[
  {
    "path": ".gitignore",
    "content": ".terraform\nterraform.tfstate*\nterraform.tfvars\nassets\nbin\n"
  },
  {
    "path": ".travis.yml",
    "content": "language: go\n\ngo:\n  - \"1.10\"\n\ninstall:\n  - go get -u golang.org/x/lint/golint\n  - go get -u github.com/hashicorp/terraform\n\nscript:\n  - make build\n  - make test\n\nnotifications:\n  email: change\n"
  },
  {
    "path": "LICENSE",
    "content": "Mozilla Public License Version 2.0\n==================================\n\n1. Definitions\n--------------\n\n1.1. \"Contributor\"\n    means each individual or legal entity that creates, contributes to\n    the creation of, or owns Covered Software.\n\n1.2. \"Contributor Version\"\n    means the combination of the Contributions of others (if any) used\n    by a Contributor and that particular Contributor's Contribution.\n\n1.3. \"Contribution\"\n    means Covered Software of a particular Contributor.\n\n1.4. \"Covered Software\"\n    means Source Code Form to which the initial Contributor has attached\n    the notice in Exhibit A, the Executable Form of such Source Code\n    Form, and Modifications of such Source Code Form, in each case\n    including portions thereof.\n\n1.5. \"Incompatible With Secondary Licenses\"\n    means\n\n    (a) that the initial Contributor has attached the notice described\n        in Exhibit B to the Covered Software; or\n\n    (b) that the Covered Software was made available under the terms of\n        version 1.1 or earlier of the License, but not also under the\n        terms of a Secondary License.\n\n1.6. \"Executable Form\"\n    means any form of the work other than Source Code Form.\n\n1.7. \"Larger Work\"\n    means a work that combines Covered Software with other material, in\n    a separate file or files, that is not Covered Software.\n\n1.8. \"License\"\n    means this document.\n\n1.9. \"Licensable\"\n    means having the right to grant, to the maximum extent possible,\n    whether at the time of the initial grant or subsequently, any and\n    all of the rights conveyed by this License.\n\n1.10. \"Modifications\"\n    means any of the following:\n\n    (a) any file in Source Code Form that results from an addition to,\n        deletion from, or modification of the contents of Covered\n        Software; or\n\n    (b) any new file in Source Code Form that contains any Covered\n        Software.\n\n1.11. \"Patent Claims\" of a Contributor\n    means any patent claim(s), including without limitation, method,\n    process, and apparatus claims, in any patent Licensable by such\n    Contributor that would be infringed, but for the grant of the\n    License, by the making, using, selling, offering for sale, having\n    made, import, or transfer of either its Contributions or its\n    Contributor Version.\n\n1.12. \"Secondary License\"\n    means either the GNU General Public License, Version 2.0, the GNU\n    Lesser General Public License, Version 2.1, the GNU Affero General\n    Public License, Version 3.0, or any later versions of those\n    licenses.\n\n1.13. \"Source Code Form\"\n    means the form of the work preferred for making modifications.\n\n1.14. \"You\" (or \"Your\")\n    means an individual or a legal entity exercising rights under this\n    License. For legal entities, \"You\" includes any entity that\n    controls, is controlled by, or is under common control with You. For\n    purposes of this definition, \"control\" means (a) the power, direct\n    or indirect, to cause the direction or management of such entity,\n    whether by contract or otherwise, or (b) ownership of more than\n    fifty percent (50%) of the outstanding shares or beneficial\n    ownership of such entity.\n\n2. License Grants and Conditions\n--------------------------------\n\n2.1. Grants\n\nEach Contributor hereby grants You a world-wide, royalty-free,\nnon-exclusive license:\n\n(a) under intellectual property rights (other than patent or trademark)\n    Licensable by such Contributor to use, reproduce, make available,\n    modify, display, perform, distribute, and otherwise exploit its\n    Contributions, either on an unmodified basis, with Modifications, or\n    as part of a Larger Work; and\n\n(b) under Patent Claims of such Contributor to make, use, sell, offer\n    for sale, have made, import, and otherwise transfer either its\n    Contributions or its Contributor Version.\n\n2.2. Effective Date\n\nThe licenses granted in Section 2.1 with respect to any Contribution\nbecome effective for each Contribution on the date the Contributor first\ndistributes such Contribution.\n\n2.3. Limitations on Grant Scope\n\nThe licenses granted in this Section 2 are the only rights granted under\nthis License. No additional rights or licenses will be implied from the\ndistribution or licensing of Covered Software under this License.\nNotwithstanding Section 2.1(b) above, no patent license is granted by a\nContributor:\n\n(a) for any code that a Contributor has removed from Covered Software;\n    or\n\n(b) for infringements caused by: (i) Your and any other third party's\n    modifications of Covered Software, or (ii) the combination of its\n    Contributions with other software (except as part of its Contributor\n    Version); or\n\n(c) under Patent Claims infringed by Covered Software in the absence of\n    its Contributions.\n\nThis License does not grant any rights in the trademarks, service marks,\nor logos of any Contributor (except as may be necessary to comply with\nthe notice requirements in Section 3.4).\n\n2.4. Subsequent Licenses\n\nNo Contributor makes additional grants as a result of Your choice to\ndistribute the Covered Software under a subsequent version of this\nLicense (see Section 10.2) or under the terms of a Secondary License (if\npermitted under the terms of Section 3.3).\n\n2.5. Representation\n\nEach Contributor represents that the Contributor believes its\nContributions are its original creation(s) or it has sufficient rights\nto grant the rights to its Contributions conveyed by this License.\n\n2.6. Fair Use\n\nThis License is not intended to limit any rights You have under\napplicable copyright doctrines of fair use, fair dealing, or other\nequivalents.\n\n2.7. Conditions\n\nSections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted\nin Section 2.1.\n\n3. Responsibilities\n-------------------\n\n3.1. Distribution of Source Form\n\nAll distribution of Covered Software in Source Code Form, including any\nModifications that You create or to which You contribute, must be under\nthe terms of this License. You must inform recipients that the Source\nCode Form of the Covered Software is governed by the terms of this\nLicense, and how they can obtain a copy of this License. You may not\nattempt to alter or restrict the recipients' rights in the Source Code\nForm.\n\n3.2. Distribution of Executable Form\n\nIf You distribute Covered Software in Executable Form then:\n\n(a) such Covered Software must also be made available in Source Code\n    Form, as described in Section 3.1, and You must inform recipients of\n    the Executable Form how they can obtain a copy of such Source Code\n    Form by reasonable means in a timely manner, at a charge no more\n    than the cost of distribution to the recipient; and\n\n(b) You may distribute such Executable Form under the terms of this\n    License, or sublicense it under different terms, provided that the\n    license for the Executable Form does not attempt to limit or alter\n    the recipients' rights in the Source Code Form under this License.\n\n3.3. Distribution of a Larger Work\n\nYou may create and distribute a Larger Work under terms of Your choice,\nprovided that You also comply with the requirements of this License for\nthe Covered Software. If the Larger Work is a combination of Covered\nSoftware with a work governed by one or more Secondary Licenses, and the\nCovered Software is not Incompatible With Secondary Licenses, this\nLicense permits You to additionally distribute such Covered Software\nunder the terms of such Secondary License(s), so that the recipient of\nthe Larger Work may, at their option, further distribute the Covered\nSoftware under the terms of either this License or such Secondary\nLicense(s).\n\n3.4. Notices\n\nYou may not remove or alter the substance of any license notices\n(including copyright notices, patent notices, disclaimers of warranty,\nor limitations of liability) contained within the Source Code Form of\nthe Covered Software, except that You may alter any license notices to\nthe extent required to remedy known factual inaccuracies.\n\n3.5. Application of Additional Terms\n\nYou may choose to offer, and to charge a fee for, warranty, support,\nindemnity or liability obligations to one or more recipients of Covered\nSoftware. However, You may do so only on Your own behalf, and not on\nbehalf of any Contributor. You must make it absolutely clear that any\nsuch warranty, support, indemnity, or liability obligation is offered by\nYou alone, and You hereby agree to indemnify every Contributor for any\nliability incurred by such Contributor as a result of warranty, support,\nindemnity or liability terms You offer. You may include additional\ndisclaimers of warranty and limitations of liability specific to any\njurisdiction.\n\n4. Inability to Comply Due to Statute or Regulation\n---------------------------------------------------\n\nIf it is impossible for You to comply with any of the terms of this\nLicense with respect to some or all of the Covered Software due to\nstatute, judicial order, or regulation then You must: (a) comply with\nthe terms of this License to the maximum extent possible; and (b)\ndescribe the limitations and the code they affect. Such description must\nbe placed in a text file included with all distributions of the Covered\nSoftware under this License. Except to the extent prohibited by statute\nor regulation, such description must be sufficiently detailed for a\nrecipient of ordinary skill to be able to understand it.\n\n5. Termination\n--------------\n\n5.1. The rights granted under this License will terminate automatically\nif You fail to comply with any of its terms. However, if You become\ncompliant, then the rights granted under this License from a particular\nContributor are reinstated (a) provisionally, unless and until such\nContributor explicitly and finally terminates Your grants, and (b) on an\nongoing basis, if such Contributor fails to notify You of the\nnon-compliance by some reasonable means prior to 60 days after You have\ncome back into compliance. Moreover, Your grants from a particular\nContributor are reinstated on an ongoing basis if such Contributor\nnotifies You of the non-compliance by some reasonable means, this is the\nfirst time You have received notice of non-compliance with this License\nfrom such Contributor, and You become compliant prior to 30 days after\nYour receipt of the notice.\n\n5.2. If You initiate litigation against any entity by asserting a patent\ninfringement claim (excluding declaratory judgment actions,\ncounter-claims, and cross-claims) alleging that a Contributor Version\ndirectly or indirectly infringes any patent, then the rights granted to\nYou by any and all Contributors for the Covered Software under Section\n2.1 of this License shall terminate.\n\n5.3. In the event of termination under Sections 5.1 or 5.2 above, all\nend user license agreements (excluding distributors and resellers) which\nhave been validly granted by You or Your distributors under this License\nprior to termination shall survive termination.\n\n************************************************************************\n*                                                                      *\n*  6. Disclaimer of Warranty                                           *\n*  -------------------------                                           *\n*                                                                      *\n*  Covered Software is provided under this License on an \"as is\"       *\n*  basis, without warranty of any kind, either expressed, implied, or  *\n*  statutory, including, without limitation, warranties that the       *\n*  Covered Software is free of defects, merchantable, fit for a        *\n*  particular purpose or non-infringing. The entire risk as to the     *\n*  quality and performance of the Covered Software is with You.        *\n*  Should any Covered Software prove defective in any respect, You     *\n*  (not any Contributor) assume the cost of any necessary servicing,   *\n*  repair, or correction. This disclaimer of warranty constitutes an   *\n*  essential part of this License. No use of any Covered Software is   *\n*  authorized under this License except under this disclaimer.         *\n*                                                                      *\n************************************************************************\n\n************************************************************************\n*                                                                      *\n*  7. Limitation of Liability                                          *\n*  --------------------------                                          *\n*                                                                      *\n*  Under no circumstances and under no legal theory, whether tort      *\n*  (including negligence), contract, or otherwise, shall any           *\n*  Contributor, or anyone who distributes Covered Software as          *\n*  permitted above, be liable to You for any direct, indirect,         *\n*  special, incidental, or consequential damages of any character      *\n*  including, without limitation, damages for lost profits, loss of    *\n*  goodwill, work stoppage, computer failure or malfunction, or any    *\n*  and all other commercial damages or losses, even if such party      *\n*  shall have been informed of the possibility of such damages. This   *\n*  limitation of liability shall not apply to liability for death or   *\n*  personal injury resulting from such party's negligence to the       *\n*  extent applicable law prohibits such limitation. Some               *\n*  jurisdictions do not allow the exclusion or limitation of           *\n*  incidental or consequential damages, so this exclusion and          *\n*  limitation may not apply to You.                                    *\n*                                                                      *\n************************************************************************\n\n8. Litigation\n-------------\n\nAny litigation relating to this License may be brought only in the\ncourts of a jurisdiction where the defendant maintains its principal\nplace of business and such litigation shall be governed by laws of that\njurisdiction, without reference to its conflict-of-law provisions.\nNothing in this Section shall prevent a party's ability to bring\ncross-claims or counter-claims.\n\n9. Miscellaneous\n----------------\n\nThis License represents the complete agreement concerning the subject\nmatter hereof. If any provision of this License is held to be\nunenforceable, such provision shall be reformed only to the extent\nnecessary to make it enforceable. Any law or regulation which provides\nthat the language of a contract shall be construed against the drafter\nshall not be used to construe this License against a Contributor.\n\n10. Versions of the License\n---------------------------\n\n10.1. New Versions\n\nMozilla Foundation is the license steward. Except as provided in Section\n10.3, no one other than the license steward has the right to modify or\npublish new versions of this License. Each version will be given a\ndistinguishing version number.\n\n10.2. Effect of New Versions\n\nYou may distribute the Covered Software under the terms of the version\nof the License under which You originally received the Covered Software,\nor under the terms of any subsequent version published by the license\nsteward.\n\n10.3. Modified Versions\n\nIf you create software not governed by this License, and you want to\ncreate a new license for such software, you may create and use a\nmodified version of this License if you rename the license and remove\nany references to the name of the license steward (except to note that\nsuch modified license differs from this License).\n\n10.4. Distributing Source Code Form that is Incompatible With Secondary\nLicenses\n\nIf You choose to distribute Source Code Form that is Incompatible With\nSecondary Licenses under the terms of this version of the License, the\nnotice described in Exhibit B of this License must be attached.\n\nExhibit A - Source Code Form License Notice\n-------------------------------------------\n\n  This Source Code Form is subject to the terms of the Mozilla Public\n  License, v. 2.0. If a copy of the MPL was not distributed with this\n  file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\nIf it is not possible or desirable to put the notice in a particular\nfile, then You may include the notice in a location (such as a LICENSE\nfile in a relevant directory) where a recipient would be likely to look\nfor such a notice.\n\nYou may add additional accurate notices of copyright ownership.\n\nExhibit B - \"Incompatible With Secondary Licenses\" Notice\n---------------------------------------------------------\n\n  This Source Code Form is \"Incompatible With Secondary Licenses\", as\n  defined by the Mozilla Public License, v. 2.0.\n"
  },
  {
    "path": "Makefile",
    "content": ".PHONY: all-release build clean fmt fmt-go fmt-terraform lint lint-go lint-terraform release test vendor vendor-status vet \n\nARCH ?= amd64\nPLATFORM ?= linux\nALL_PLATFORMS := darwin linux windows\nBIN := terraform-provider-vultr\nPKG := github.com/squat/$(BIN)\nBUILD_IMAGE ?= golang:1.10.0-alpine\nTEST ?= $$(go list ./... | grep -v 'vendor/')\nGOFMT_FILES ?= $$(find . -name '*.go' | grep -v vendor)\nSRC := $(shell find . -type f -name '*.go' -not -path \"./vendor/*\")\nTERRAFORMFMT_FILES ?= examples\nTESTARGS ?=\nTAG := $(shell git describe --abbrev=0 --tags HEAD 2>/dev/null)\nCOMMIT := $(shell git rev-parse HEAD)\nVERSION := $(COMMIT)\nifneq ($(TAG),)\n    ifeq ($(COMMIT), $(shell git rev-list -n1 $(TAG)))\n        VERSION := $(TAG)\n    endif\nendif\nDIRTY := $(shell test -z \"$$(git diff --shortstat 2>/dev/null)\" || echo -dirty)\nVERSION := $(VERSION)$(DIRTY)\n\ndefault: build\n\nbuild:\n\tgo install\n\nall-release: $(addprefix release-, $(ALL_PLATFORMS))\n\nrelease-%:\n\t@$(MAKE) --no-print-directory ARCH=$(ARCH) PLATFORM=$* release\n\nrelease: bin/$(BIN)_$(VERSION)_$(PLATFORM)_$(ARCH).tar.gz.asc\n\nbin/$(PLATFORM)/$(ARCH):\n\t@mkdir -p bin/$(PLATFORM)/$(ARCH)\n\nbin/$(BIN)_$(VERSION)_$(PLATFORM)_$(ARCH).tar.gz.asc: bin/$(BIN)_$(VERSION)_$(PLATFORM)_$(ARCH).tar.gz\n\t@cd bin && gpg --armor --detach-sign $(<F)\n\nbin/$(BIN)_$(VERSION)_$(PLATFORM)_$(ARCH).tar.gz: bin/$(PLATFORM)/$(ARCH)/$(BIN)_$(VERSION)\n\t@tar -czf $@ -C $(<D) $(<F)\n\nbin/$(PLATFORM)/$(ARCH)/$(BIN)_$(VERSION): $(SRC) glide.yaml bin/$(PLATFORM)/$(ARCH)\n\t@echo \"building: $@\"\n\t@docker run --rm \\\n\t    -u $$(id -u):$$(id -g) \\\n\t    -v $$(pwd):/go/src/$(PKG) \\\n\t    -v $$(pwd)/bin/$(PLATFORM)/$(ARCH):/go/bin \\\n\t    -w /go/src/$(PKG) \\\n\t    $(BUILD_IMAGE) \\\n\t    /bin/sh -c \" \\\n\t        GOARCH=$(ARCH) \\\n\t        GOOS=$(PLATFORM) \\\n\t\tCGO_ENABLED=0 \\\n\t\tgo build -o /go/bin/$(BIN)_$(VERSION) \\\n\t    \"\n\nfmt: fmt-go fmt-terraform\n\nfmt-go:\n\tgofmt -w -s $(GOFMT_FILES)\n\nfmt-terraform:\n\tterraform fmt $(TERRAFORMFMT_FILES)\n\nlint: lint-go lint-terraform\n\nlint-go:\n\t@echo 'golint $(TEST)'\n\t@lint_res=$$(golint $(TEST)); if [ -n \"$$lint_res\" ]; then \\\n\t\techo \"\"; \\\n\t\techo \"Golint found style issues. Please check the reported issues\"; \\\n\t\techo \"and fix them if necessary before submitting the code for review:\"; \\\n\t\techo \"$$lint_res\"; \\\n\t\texit 1; \\\n\tfi\n\t@echo 'gofmt -d -s $(GOFMT_FILES)'\n\t@fmt_res=$$(gofmt -d -s $(GOFMT_FILES)); if [ -n \"$$fmt_res\" ]; then \\\n\t\techo \"\"; \\\n\t\techo \"Gofmt found style issues. Please check the reported issues\"; \\\n\t\techo \"and fix them if necessary before submitting the code for review:\"; \\\n\t\techo \"$$fmt_res\"; \\\n\t\texit 1; \\\n\tfi\n\nlint-terraform:\n\t@echo \"terraform fmt --check=true $(TERRAFORMFMT_FILES)\"\n\t@lint_res=$$(terraform fmt --check=true $(TERRAFORMFMT_FILES)); if [ -n \"$$lint_res\" ]; then \\\n\t\techo \"\"; \\\n\t\techo \"Terraform fmt found style issues. Please check the reported issues\"; \\\n\t\techo \"and fix them if necessary before submitting the code for review:\"; \\\n\t\techo \"$$lint_res\"; \\\n\t\texit 1; \\\n\tfi\n\n\ntest: vet lint\n\tgo test -i $(TEST) || exit 1\n\tgo test $(TESTARGS) -timeout=30s -parallel=4 $(TEST)\n\nvendor:\n\t@glide install -v\n\t@glide-vc --only-code --no-tests\n\nvendor-status:\n\t@glide list\n\nvet:\n\t@echo 'go vet $(TEST)'\n\t@go vet $(TEST); if [ $$? -eq 1 ]; then \\\n\t\techo \"\"; \\\n\t\techo \"Vet found suspicious constructs. Please check the reported constructs\"; \\\n\t\techo \"and fix them if necessary before submitting the code for review.\"; \\\n\t\texit 1; \\\n\tfi\n\nclean:\n\t@rm -rf bin\n"
  },
  {
    "path": "README.md",
    "content": "# Vultr Terraform Provider\n\nThis is a Terraform provider for Vultr. Find out more about [Vultr](https://www.vultr.com/about/).\n\n[![Build Status](https://travis-ci.org/squat/terraform-provider-vultr.svg?branch=master)](https://travis-ci.org/squat/terraform-provider-vultr)\n[![Go Report Card](https://goreportcard.com/badge/github.com/squat/terraform-provider-vultr)](https://goreportcard.com/report/github.com/squat/terraform-provider-vultr)\n\n## Requirements\n\n* A Vultr account and API key\n* [Terraform](https://www.terraform.io/downloads.html) 0.12+\n* [Go](https://golang.org/doc/install) 1.8 (to build the provider plugin)\n\n## Usage\n\nDownload `terraform-provider-vultr` from the [releases page](https://github.com/squat/terraform-provider-vultr/releases) and follow the instructions to [install it as a plugin](https://www.terraform.io/docs/plugins/basics.html#installing-a-plugin). After placing it into your plugins directory,  run `terraform init` to initialize it.\n\n*Note*: in order to build and install the provider from the latest commit on master, run:\n```sh\ngo get -u github.com/squat/terraform-provider-vultr\n```\n\nand then register the plugin by symlinking the binary to the [third-party plugins directory](https://www.terraform.io/docs/configuration/providers.html#third-party-plugins):\n```sh\nmkdir -p ~/.terraform.d/plugins\nln -s \"$GOPATH/bin/terraform-provider-vultr\" ~/.terraform.d/plugins/terraform-provider-vultr\n```\n\nSet an environment variable containing the Vultr API key:\n```\nexport VULTR_API_KEY=<your-vultr-api-key>\n```\n*Note*: as an alternative, the API key can be specified in configuration as shown below.\n\n## Examples\n\n```tf\n// Configure the Vultr provider. \n// Alternatively, export the API key as an environment variable: `export VULTR_API_KEY=<your-vultr-api-key>`.\nprovider \"vultr\" {\n  api_key = \"<your-vultr-api-key>\"\n}\n\n// Find the ID of the Silicon Valley region.\ndata \"vultr_region\" \"silicon_valley\" {\n  filter {\n    name   = \"name\"\n    values = [\"Silicon Valley\"]\n  }\n}\n\n// Find the ID for CoreOS Container Linux.\ndata \"vultr_os\" \"container_linux\" {\n  filter {\n    name   = \"family\"\n    values = [\"coreos\"]\n  }\n}\n\n// Find the ID for a starter plan.\ndata \"vultr_plan\" \"starter\" {\n  filter {\n    name   = \"price_per_month\"\n    values = [\"5.00\"]\n  }\n\n  filter {\n    name   = \"ram\"\n    values = [\"1024\"]\n  }\n}\n\n// Find the ID of an existing SSH key.\ndata \"vultr_ssh_key\" \"squat\" {\n  filter {\n    name   = \"name\"\n    values = [\"squat\"]\n  }\n}\n\n// Create a Vultr virtual machine.\nresource \"vultr_instance\" \"example\" {\n  name              = \"example\"\n  region_id         = \"${data.vultr_region.silicon_valley.id}\"\n  plan_id           = \"${data.vultr_plan.starter.id}\"\n  os_id             = \"${data.vultr_os.container_linux.id}\"\n  ssh_key_ids       = [\"${data.vultr_ssh_key.squat.id}\"]\n  hostname          = \"example\"\n  tag               = \"container-linux\"\n  firewall_group_id = \"${vultr_firewall_group.example.id}\"\n}\n\n// Create a new firewall group.\nresource \"vultr_firewall_group\" \"example\" {\n  description = \"example group\"\n}\n\n// Add a firewall rule to the group allowing SSH access.\nresource \"vultr_firewall_rule\" \"ssh\" {\n  firewall_group_id = \"${vultr_firewall_group.example.id}\"\n  cidr_block        = \"0.0.0.0/0\"\n  protocol          = \"tcp\"\n  from_port         = 22\n  to_port           = 22\n}\n```\n\n## Development\n\nTo develop the plugin locally, install the following dependencies:\n* [Go](https://golang.org/doc/install) 1.8 (to build the provider plugin)\n* [Glide](https://github.com/Masterminds/glide#install) (to install and maintain dependencies)\n* [glide-vc](https://github.com/sgotti/glide-vc#install) (to clean up dependencies)\n\nTo build the plugin run:\n```sh\nmake build\n```\n\nTo update Go dependencies run:\n```sh\nmake vendor\n```\n"
  },
  {
    "path": "examples/application/example.tf",
    "content": "// Configure the Vultr provider.\n// Alternatively, export the API key as an environment variable: `export VULTR_API_KEY=<your-vultr-api-key>`.\nprovider \"vultr\" {\n  api_key = \"<your-vultr-api-key>\"\n}\n\n// Find the OS ID for applications.\ndata \"vultr_os\" \"application\" {\n  filter {\n    name   = \"family\"\n    values = [\"application\"]\n  }\n}\n\n// Find the application ID for OpenVPN.\ndata \"vultr_application\" \"openvpn\" {\n  filter {\n    name   = \"short_name\"\n    values = [\"openvpn\"]\n  }\n}\n\n// Find the ID of the Silicon Valley region.\ndata \"vultr_region\" \"silicon_valley\" {\n  filter {\n    name   = \"name\"\n    values = [\"Silicon Valley\"]\n  }\n}\n\n// Find the ID for a starter plan.\ndata \"vultr_plan\" \"starter\" {\n  filter {\n    name   = \"price_per_month\"\n    values = [\"5.00\"]\n  }\n\n  filter {\n    name   = \"ram\"\n    values = [\"1024\"]\n  }\n}\n\n// Create a Vultr virtual machine.\nresource \"vultr_instance\" \"openvpn\" {\n  name           = \"openvpn\"\n  hostname       = \"openvpn\"\n  region_id      = data.vultr_region.silicon_valley.id\n  plan_id        = data.vultr_plan.starter.id\n  os_id          = data.vultr_os.application.id\n  application_id = data.vultr_application.openvpn.id\n}\n"
  },
  {
    "path": "examples/application/versions.tf",
    "content": "terraform {\n  required_version = \">= 0.12\"\n}\n"
  },
  {
    "path": "examples/bare_metal/example.tf",
    "content": "// Configure the Vultr provider.\n// Alternatively, export the API key as an environment variable: `export VULTR_API_KEY=<your-vultr-api-key>`.\nprovider \"vultr\" {\n  api_key = \"<your-vultr-api-key>\"\n}\n\n// Find the OS ID for Container Linux.\ndata \"vultr_os\" \"container_linux\" {\n  filter {\n    name   = \"family\"\n    values = [\"coreos\"]\n  }\n}\n\n// Find the ID of the Silicon Valley region.\ndata \"vultr_region\" \"silicon_valley\" {\n  filter {\n    name   = \"name\"\n    values = [\"Silicon Valley\"]\n  }\n}\n\n// Find the ID for a starter plan.\ndata \"vultr_bare_metal_plan\" \"eightcpus\" {\n  filter {\n    name   = \"cpu_count\"\n    values = [8]\n  }\n}\n\n// Create a Vultr virtual machine.\nresource \"vultr_bare_metal\" \"example\" {\n  name      = \"example\"\n  hostname  = \"example\"\n  region_id = data.vultr_region.silicon_valley.id\n  plan_id   = data.vultr_bare_metal_plan.eightcpus.id\n  os_id     = data.vultr_os.container_linux.id\n}\n"
  },
  {
    "path": "examples/bare_metal/versions.tf",
    "content": "terraform {\n  required_version = \">= 0.12\"\n}\n"
  },
  {
    "path": "examples/basic/example.tf",
    "content": "// Configure the Vultr provider.\n// Alternatively, export the API key as an environment variable: `export VULTR_API_KEY=<your-vultr-api-key>`.\nprovider \"vultr\" {\n  api_key = \"<your-vultr-api-key>\"\n}\n\n// Find the ID of the Silicon Valley region.\ndata \"vultr_region\" \"silicon_valley\" {\n  filter {\n    name   = \"name\"\n    values = [\"Silicon Valley\"]\n  }\n}\n\n// Find the ID for CoreOS Container Linux.\ndata \"vultr_os\" \"container_linux\" {\n  filter {\n    name   = \"family\"\n    values = [\"coreos\"]\n  }\n}\n\n// Find the ID for a starter plan.\ndata \"vultr_plan\" \"starter\" {\n  filter {\n    name   = \"price_per_month\"\n    values = [\"5.00\"]\n  }\n\n  filter {\n    name   = \"ram\"\n    values = [\"1024\"]\n  }\n}\n\n// Create a Vultr virtual machine.\nresource \"vultr_instance\" \"example\" {\n  name              = \"example\"\n  region_id         = data.vultr_region.silicon_valley.id\n  plan_id           = data.vultr_plan.starter.id\n  os_id             = data.vultr_os.container_linux.id\n  ssh_key_ids       = [vultr_ssh_key.squat.id]\n  hostname          = \"example\"\n  tag               = \"container-linux\"\n  firewall_group_id = vultr_firewall_group.example.id\n\n  connection {\n    host = vultr_instance.example.ipv4_address\n  }\n\n  provisioner \"remote-exec\" {\n    inline = [\"docker run --rm --net=host tianon/speedtest\"]\n  }\n}\n\n// Create a new firewall group.\nresource \"vultr_firewall_group\" \"example\" {\n  description = \"example group\"\n}\n\n// Add a firewall rule to the group allowing SSH access.\nresource \"vultr_firewall_rule\" \"ssh\" {\n  firewall_group_id = vultr_firewall_group.example.id\n  cidr_block        = \"0.0.0.0/0\"\n  protocol          = \"tcp\"\n  from_port         = 22\n  to_port           = 22\n  notes             = \"ssh\"\n}\n\n// Add a firewall rule to the group allowing ICMP.\nresource \"vultr_firewall_rule\" \"icmp\" {\n  firewall_group_id = vultr_firewall_group.example.id\n  cidr_block        = \"0.0.0.0/0\"\n  protocol          = \"icmp\"\n  notes             = \"icmp\"\n}\n\n// Create a new SSH key.\nresource \"vultr_ssh_key\" \"squat\" {\n  name       = \"squat\"\n  public_key = file(\"~/lserven.ssh\")\n}\n\n// Add two extra IPv4 addresses to the virtual machine.\nresource \"vultr_ipv4\" \"example\" {\n  instance_id = vultr_instance.example.id\n  reboot      = false\n  count       = 2\n}\n\n// Output all of the virtual machine's IPv4 addresses to STDOUT when the infrastructure is ready.\noutput \"ip_addresses\" {\n  value = concat(\n    vultr_ipv4.example.*.ipv4_address,\n    [vultr_instance.example.ipv4_address],\n  )\n}\n"
  },
  {
    "path": "examples/basic/versions.tf",
    "content": "terraform {\n  required_version = \">= 0.12\"\n}\n"
  },
  {
    "path": "examples/block_storage/example.tf",
    "content": "// Configure the Vultr provider.\n// Alternatively, export the API key as an environment variable: `export VULTR_API_KEY=<your-vultr-api-key>`.\nprovider \"vultr\" {\n  api_key = \"<your-vultr-api-key>\"\n}\n\n// Find the ID of the Silicon Valley region.\ndata \"vultr_region\" \"has_block_storage\" {\n  filter {\n    name   = \"block_storage\"\n    values = [\"true\"]\n  }\n}\n\n// Create block storage.\nresource \"vultr_block_storage\" \"example\" {\n  name      = \"example\"\n  region_id = data.vultr_region.has_block_storage.id\n  size      = 50\n}\n"
  },
  {
    "path": "examples/block_storage/versions.tf",
    "content": "terraform {\n  required_version = \">= 0.12\"\n}\n"
  },
  {
    "path": "examples/dns/example.tf",
    "content": "// Configure the Vultr provider.\n// Alternatively, export the API key as an environment variable: `export VULTR_API_KEY=<your-vultr-api-key>`.\nprovider \"vultr\" {\n  api_key = \"<your-vultr-api-key>\"\n}\n\n// Create a DNS domain.\nresource \"vultr_dns_domain\" \"example\" {\n  domain = \"example.com\"\n  ip     = \"10.0.0.1\"\n}\n\n// Create a new DNS record.\nresource \"vultr_dns_record\" \"example_web\" {\n  domain = vultr_dns_domain.example.id\n  name   = \"www\"\n  type   = \"A\"\n  data   = vultr_dns_domain.example.ip\n  ttl    = 300\n}\n"
  },
  {
    "path": "examples/dns/versions.tf",
    "content": "terraform {\n  required_version = \">= 0.12\"\n}\n"
  },
  {
    "path": "examples/kubernetes/example.tf",
    "content": "resource \"vultr_dns_domain\" \"example\" {\n  domain = \"example.com\"\n  ip     = \"0.0.0.0\"\n}\n\nmodule \"typhoon\" {\n  source = \"git::https://github.com/squat/typhoon-vultr?ref=v1.15.1\"\n\n  cluster_name = \"example\"\n\n  # Vultr\n  region          = data.vultr_region.frankfurt.id\n  dns_zone        = vultr_dns_domain.example.domain\n  controller_type = data.vultr_plan.twogb.id\n  worker_type     = data.vultr_plan.twogb.id\n\n  # configuration\n  ssh_authorized_key = file(\"/path/to/ssh/public/key\")\n  asset_dir          = \"assets\"\n\n  # optional\n  worker_count = 2\n}\n\ndata \"vultr_region\" \"frankfurt\" {\n  filter {\n    name   = \"name\"\n    values = [\"Frankfurt\"]\n  }\n}\n\ndata \"vultr_plan\" \"twogb\" {\n  filter {\n    name   = \"ram\"\n    values = [\"2048\"]\n  }\n\n  filter {\n    name   = \"plan_type\"\n    values = [\"SSD\"]\n  }\n}\n"
  },
  {
    "path": "examples/kubernetes/versions.tf",
    "content": "terraform {\n  required_version = \">= 0.12\"\n}\n"
  },
  {
    "path": "examples/network/example.tf",
    "content": "// Configure the Vultr provider.\n// Alternatively, export the API key as an environment variable: `export VULTR_API_KEY=<your-vultr-api-key>`.\nprovider \"vultr\" {\n  api_key = \"<your-vultr-api-key>\"\n}\n\n// Find the ID of the Frankfurt region.\ndata \"vultr_region\" \"frankfurt\" {\n  filter {\n    name   = \"name\"\n    values = [\"Frankfurt\"]\n  }\n}\n\n// Find the ID for a starter plan.\ndata \"vultr_plan\" \"starter\" {\n  filter {\n    name   = \"price_per_month\"\n    values = [\"5.00\"]\n  }\n\n  filter {\n    name   = \"ram\"\n    values = [\"1024\"]\n  }\n}\n\n// Find the OS ID for Ubuntu.\ndata \"vultr_os\" \"ubuntu\" {\n  filter {\n    name   = \"name\"\n    values = [\"Ubuntu 18.04 x64\"]\n  }\n}\n\n// Create a pair of Vultr private networks.\nresource \"vultr_network\" \"network\" {\n  count       = 2\n  cidr_block  = cidrsubnet(\"192.168.0.0/23\", 1, count.index)\n  description = \"test_${count.index}\"\n  region_id   = data.vultr_region.frankfurt.id\n}\n\n// Create a Vultr virtual machine.\nresource \"vultr_instance\" \"ubuntu\" {\n  name        = \"ubuntu\"\n  network_ids = vultr_network.network.*.id\n  region_id   = data.vultr_region.frankfurt.id\n  plan_id     = data.vultr_plan.starter.id\n  os_id       = data.vultr_os.ubuntu.id\n  ipv6        = true\n}\n\n// Output all of the virtual machine's IPv6 addresses to STDOUT when the infrastructure is ready.\noutput \"ip_addresses\" {\n  value = vultr_instance.ubuntu.ipv6_addresses\n}\n"
  },
  {
    "path": "examples/network/versions.tf",
    "content": "terraform {\n  required_version = \">= 0.12\"\n}\n"
  },
  {
    "path": "examples/reserved_ip/example.tf",
    "content": "// Configure the Vultr provider.\n// Alternatively, export the API key as an environment variable: `export VULTR_API_KEY=<your-vultr-api-key>`.\n#provider \"vultr\" {\n#api_key = \"<your-vultr-api-key>\"\n#}\n\n// Find the ID of the Silicon Valley region.\ndata \"vultr_region\" \"silicon_valley\" {\n  filter {\n    name   = \"name\"\n    values = [\"Silicon Valley\"]\n  }\n}\n\n// Find the ID for CoreOS Container Linux.\ndata \"vultr_os\" \"container_linux\" {\n  filter {\n    name   = \"family\"\n    values = [\"coreos\"]\n  }\n}\n\n// Find the ID for a starter plan.\ndata \"vultr_plan\" \"starter\" {\n  filter {\n    name   = \"price_per_month\"\n    values = [\"5.00\"]\n  }\n\n  filter {\n    name   = \"ram\"\n    values = [\"1024\"]\n  }\n}\n\n// Create a Vultr virtual machine.\nresource \"vultr_instance\" \"example\" {\n  name        = \"example\"\n  region_id   = data.vultr_region.silicon_valley.id\n  plan_id     = data.vultr_plan.starter.id\n  os_id       = data.vultr_os.container_linux.id\n  ssh_key_ids = [vultr_ssh_key.squat.id]\n}\n\n// Create a new SSH key.\nresource \"vultr_ssh_key\" \"squat\" {\n  name       = \"squat\"\n  public_key = file(\"~/lserven.ssh\")\n}\n\n// Create a reserved IP.\nresource \"vultr_reserved_ip\" \"example\" {\n  name        = \"example\"\n  attached_id = vultr_instance.example.id\n  region_id   = data.vultr_region.silicon_valley.id\n}\n"
  },
  {
    "path": "examples/reserved_ip/versions.tf",
    "content": "terraform {\n  required_version = \">= 0.12\"\n}\n"
  },
  {
    "path": "examples/snapshot/example.tf",
    "content": "// Configure the Vultr provider.\n// Alternatively, export the API key as an environment variable: `export VULTR_API_KEY=<your-vultr-api-key>`.\nprovider \"vultr\" {\n  api_key = \"<your-vultr-api-key>\"\n}\n\n// Find the snapshot ID for a Kubernetes master.\ndata \"vultr_snapshot\" \"master\" {\n  description_regex = \"master\"\n}\n\n// Find the ID of the Silicon Valley region.\ndata \"vultr_region\" \"silicon_valley\" {\n  filter {\n    name   = \"name\"\n    values = [\"Frankfurt\"]\n  }\n}\n\n// Find the ID for a starter plan.\ndata \"vultr_plan\" \"starter\" {\n  filter {\n    name   = \"price_per_month\"\n    values = [\"5.00\"]\n  }\n\n  filter {\n    name   = \"ram\"\n    values = [\"1024\"]\n  }\n}\n\n// Create a Vultr virtual machine.\nresource \"vultr_instance\" \"snapshot\" {\n  name        = \"snapshot\"\n  region_id   = data.vultr_region.silicon_valley.id\n  plan_id     = data.vultr_plan.starter.id\n  snapshot_id = data.vultr_snapshot.master.id\n}\n"
  },
  {
    "path": "examples/snapshot/versions.tf",
    "content": "terraform {\n  required_version = \">= 0.12\"\n}\n"
  },
  {
    "path": "glide.yaml",
    "content": "package: github.com/squat/terraform-provider-vultr\nimport:\n- package: github.com/JamesClonk/vultr\n  version: ea92af1525b60d4eb6aed8d17fab725592e06ed2\n  subpackages:\n  - lib\n- package: github.com/fatih/structs\n- package: github.com/hashicorp/terraform\n  version: v0.12.1\n  subpackages:\n  - helper/mutexkv\n  - helper/resource\n  - helper/schema\n  - plugin\n  - terraform\n"
  },
  {
    "path": "main.go",
    "content": "package main\n\nimport (\n\t\"github.com/hashicorp/terraform/plugin\"\n\t\"github.com/squat/terraform-provider-vultr/vultr\"\n)\n\nfunc main() {\n\tplugin.Serve(&plugin.ServeOpts{\n\t\tProviderFunc: vultr.Provider,\n\t})\n}\n"
  },
  {
    "path": "structs/field.go",
    "content": "package structs\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"reflect\"\n)\n\nvar (\n\terrNotExported = errors.New(\"field is not exported\")\n\terrNotSettable = errors.New(\"field is not settable\")\n)\n\n// Field represents a single struct field that encapsulates high level\n// functions around the field.\ntype Field struct {\n\tvalue      reflect.Value\n\tfield      reflect.StructField\n\tdefaultTag string\n}\n\n// Tag returns the value associated with key in the tag string. If there is no\n// such key in the tag, Tag returns the empty string.\nfunc (f *Field) Tag(key string) string {\n\treturn f.field.Tag.Get(key)\n}\n\n// Value returns the underlying value of the field. It panics if the field\n// is not exported.\nfunc (f *Field) Value() interface{} {\n\treturn f.value.Interface()\n}\n\n// IsEmbedded returns true if the given field is an anonymous field (embedded)\nfunc (f *Field) IsEmbedded() bool {\n\treturn f.field.Anonymous\n}\n\n// IsExported returns true if the given field is exported.\nfunc (f *Field) IsExported() bool {\n\treturn f.field.PkgPath == \"\"\n}\n\n// IsZero returns true if the given field is not initialized (has a zero value).\n// It panics if the field is not exported.\nfunc (f *Field) IsZero() bool {\n\tzero := reflect.Zero(f.value.Type()).Interface()\n\tcurrent := f.Value()\n\n\treturn reflect.DeepEqual(current, zero)\n}\n\n// Name returns the name of the given field\nfunc (f *Field) Name() string {\n\treturn f.field.Name\n}\n\n// Kind returns the fields kind, such as \"string\", \"map\", \"bool\", etc ..\nfunc (f *Field) Kind() reflect.Kind {\n\treturn f.value.Kind()\n}\n\n// Set sets the field to given value v. It returns an error if the field is not\n// settable (not addressable or not exported) or if the given value's type\n// doesn't match the fields type.\nfunc (f *Field) Set(val interface{}) error {\n\t// we can't set unexported fields, so be sure this field is exported\n\tif !f.IsExported() {\n\t\treturn errNotExported\n\t}\n\n\t// do we get here? not sure...\n\tif !f.value.CanSet() {\n\t\treturn errNotSettable\n\t}\n\n\tgiven := reflect.ValueOf(val)\n\n\tif f.value.Kind() != given.Kind() {\n\t\treturn fmt.Errorf(\"wrong kind. got: %s want: %s\", given.Kind(), f.value.Kind())\n\t}\n\n\tf.value.Set(given)\n\treturn nil\n}\n\n// Zero sets the field to its zero value. It returns an error if the field is not\n// settable (not addressable or not exported).\nfunc (f *Field) Zero() error {\n\tzero := reflect.Zero(f.value.Type()).Interface()\n\treturn f.Set(zero)\n}\n\n// Fields returns a slice of Fields. This is particular handy to get the fields\n// of a nested struct . A struct tag with the content of \"-\" ignores the\n// checking of that particular field. Example:\n//\n//   // Field is ignored by this package.\n//   Field *http.Request `structs:\"-\"`\n//\n// It panics if field is not exported or if field's kind is not struct\nfunc (f *Field) Fields() []*Field {\n\treturn getFields(f.value, f.defaultTag)\n}\n\n// Field returns the field from a nested struct. It panics if the nested struct\n// is not exported or if the field was not found.\nfunc (f *Field) Field(name string) *Field {\n\tfield, ok := f.FieldOk(name)\n\tif !ok {\n\t\tpanic(\"field not found\")\n\t}\n\n\treturn field\n}\n\n// FieldOk returns the field from a nested struct. The boolean returns whether\n// the field was found (true) or not (false).\nfunc (f *Field) FieldOk(name string) (*Field, bool) {\n\tvalue := &f.value\n\t// value must be settable so we need to make sure it holds the address of the\n\t// variable and not a copy, so we can pass the pointer to strctVal instead of a\n\t// copy (which is not assigned to any variable, hence not settable).\n\t// see \"https://blog.golang.org/laws-of-reflection#TOC_8.\"\n\tif f.value.Kind() != reflect.Ptr {\n\t\ta := f.value.Addr()\n\t\tvalue = &a\n\t}\n\tv := strctVal(value.Interface())\n\tt := v.Type()\n\n\tfield, ok := t.FieldByName(name)\n\tif !ok {\n\t\treturn nil, false\n\t}\n\n\treturn &Field{\n\t\tfield: field,\n\t\tvalue: v.FieldByName(name),\n\t}, true\n}\n"
  },
  {
    "path": "structs/structs.go",
    "content": "// Package structs is a fork of \"github.com/fatih/structs\" which is archived. This contains various utilities functions to work with structs.\npackage structs\n\nimport (\n\t\"fmt\"\n\n\t\"reflect\"\n)\n\nvar (\n\t// DefaultTagName is the default tag name for struct fields which provides\n\t// a more granular to tweak certain structs. Lookup the necessary functions\n\t// for more info.\n\tDefaultTagName = \"structs\" // struct's field default tag name\n)\n\n// Struct encapsulates a struct type to provide several high level functions\n// around the struct.\ntype Struct struct {\n\traw     interface{}\n\tvalue   reflect.Value\n\tTagName string\n}\n\n// New returns a new *Struct with the struct s. It panics if the s's kind is\n// not struct.\nfunc New(s interface{}) *Struct {\n\treturn &Struct{\n\t\traw:     s,\n\t\tvalue:   strctVal(s),\n\t\tTagName: DefaultTagName,\n\t}\n}\n\n// Map converts the given struct to a map[string]interface{}, where the keys\n// of the map are the field names and the values of the map the associated\n// values of the fields. The default key string is the struct field name but\n// can be changed in the struct field's tag value. The \"structs\" key in the\n// struct's field tag value is the key name. Example:\n//\n//   // Field appears in map as key \"myName\".\n//   Name string `structs:\"myName\"`\n//\n// A tag value with the content of \"-\" ignores that particular field. Example:\n//\n//   // Field is ignored by this package.\n//   Field bool `structs:\"-\"`\n//\n// A tag value with the content of \"string\" uses fmt.Sprintf() to get the value. Example:\n//\n//   Field *Animal `structs:\"field,string\"`\n//\n// A tag value with the option of \"flatten\" used in a struct field is to flatten its fields\n// in the output map. Example:\n//\n//   // The FieldStruct's fields will be flattened into the output map.\n//   FieldStruct time.Time `structs:\",flatten\"`\n//\n// A tag value with the option of \"omitnested\" stops iterating further if the type\n// is a struct. Example:\n//\n//   // Field is not processed further by this package.\n//   Field time.Time     `structs:\"myName,omitnested\"`\n//   Field *http.Request `structs:\",omitnested\"`\n//\n// A tag value with the option of \"omitempty\" ignores that particular field if\n// the field value is empty. Example:\n//\n//   // Field appears in map as key \"myName\", but the field is\n//   // skipped if empty.\n//   Field string `structs:\"myName,omitempty\"`\n//\n//   // Field appears in map as key \"Field\" (the default), but\n//   // the field is skipped if empty.\n//   Field string `structs:\",omitempty\"`\n//\n// Note that only exported fields of a struct can be accessed, non exported\n// fields will be neglected.\nfunc (s *Struct) Map() map[string]interface{} {\n\tout := make(map[string]interface{})\n\ts.FillMap(out)\n\treturn out\n}\n\n// FillMap is the same as Map. Instead of returning the output, it fills the\n// given map.\nfunc (s *Struct) FillMap(out map[string]interface{}) {\n\tif out == nil {\n\t\treturn\n\t}\n\n\tfields := s.structFields()\n\n\tfor _, field := range fields {\n\t\tname := field.Name\n\t\tval := s.value.FieldByName(name)\n\t\tisSubStruct := false\n\t\tvar finalVal interface{}\n\n\t\ttagName, tagOpts := parseTag(field.Tag.Get(s.TagName))\n\t\tif tagName != \"\" {\n\t\t\tname = tagName\n\t\t}\n\n\t\t// if the value is a zero value and the field is marked as omitempty do\n\t\t// not include\n\t\tif tagOpts.Has(\"omitempty\") {\n\t\t\tzero := reflect.Zero(val.Type()).Interface()\n\t\t\tcurrent := val.Interface()\n\n\t\t\tif reflect.DeepEqual(current, zero) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\tif !tagOpts.Has(\"omitnested\") {\n\t\t\tfinalVal = s.nested(val)\n\n\t\t\tv := reflect.ValueOf(val.Interface())\n\t\t\tif v.Kind() == reflect.Ptr {\n\t\t\t\tv = v.Elem()\n\t\t\t}\n\n\t\t\tswitch v.Kind() {\n\t\t\tcase reflect.Map, reflect.Struct:\n\t\t\t\tisSubStruct = true\n\t\t\t}\n\t\t} else {\n\t\t\tfinalVal = val.Interface()\n\t\t}\n\n\t\tif tagOpts.Has(\"string\") {\n\t\t\ts := fmt.Sprintf(\"%v\", val.Interface())\n\t\t\tif s != \"\" {\n\t\t\t\tout[name] = s\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\tif isSubStruct && (tagOpts.Has(\"flatten\")) {\n\t\t\tfor k := range finalVal.(map[string]interface{}) {\n\t\t\t\tout[k] = finalVal.(map[string]interface{})[k]\n\t\t\t}\n\t\t} else {\n\t\t\tout[name] = finalVal\n\t\t}\n\t}\n}\n\n// Values converts the given s struct's field values to a []interface{}.  A\n// struct tag with the content of \"-\" ignores the that particular field.\n// Example:\n//\n//   // Field is ignored by this package.\n//   Field int `structs:\"-\"`\n//\n// A value with the option of \"omitnested\" stops iterating further if the type\n// is a struct. Example:\n//\n//   // Fields is not processed further by this package.\n//   Field time.Time     `structs:\",omitnested\"`\n//   Field *http.Request `structs:\",omitnested\"`\n//\n// A tag value with the option of \"omitempty\" ignores that particular field and\n// is not added to the values if the field value is empty. Example:\n//\n//   // Field is skipped if empty\n//   Field string `structs:\",omitempty\"`\n//\n// Note that only exported fields of a struct can be accessed, non exported\n// fields  will be neglected.\nfunc (s *Struct) Values() []interface{} {\n\tfields := s.structFields()\n\n\tvar t []interface{}\n\n\tfor _, field := range fields {\n\t\tval := s.value.FieldByName(field.Name)\n\n\t\t_, tagOpts := parseTag(field.Tag.Get(s.TagName))\n\n\t\t// if the value is a zero value and the field is marked as omitempty do\n\t\t// not include\n\t\tif tagOpts.Has(\"omitempty\") {\n\t\t\tzero := reflect.Zero(val.Type()).Interface()\n\t\t\tcurrent := val.Interface()\n\n\t\t\tif reflect.DeepEqual(current, zero) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\tif tagOpts.Has(\"string\") {\n\t\t\ts, ok := val.Interface().(fmt.Stringer)\n\t\t\tif ok {\n\t\t\t\tt = append(t, s.String())\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\tif IsStruct(val.Interface()) && !tagOpts.Has(\"omitnested\") {\n\t\t\t// look out for embedded structs, and convert them to a\n\t\t\t// []interface{} to be added to the final values slice\n\t\t\tt = append(t, Values(val.Interface())...)\n\t\t} else {\n\t\t\tt = append(t, val.Interface())\n\t\t}\n\t}\n\n\treturn t\n}\n\n// Fields returns a slice of Fields. A struct tag with the content of \"-\"\n// ignores the checking of that particular field. Example:\n//\n//   // Field is ignored by this package.\n//   Field bool `structs:\"-\"`\n//\n// It panics if s's kind is not struct.\nfunc (s *Struct) Fields() []*Field {\n\treturn getFields(s.value, s.TagName)\n}\n\n// Names returns a slice of field names. A struct tag with the content of \"-\"\n// ignores the checking of that particular field. Example:\n//\n//   // Field is ignored by this package.\n//   Field bool `structs:\"-\"`\n//\n// It panics if s's kind is not struct.\nfunc (s *Struct) Names() []string {\n\tfields := getFields(s.value, s.TagName)\n\n\tnames := make([]string, len(fields))\n\n\tfor i, field := range fields {\n\t\tnames[i] = field.Name()\n\t}\n\n\treturn names\n}\n\nfunc getFields(v reflect.Value, tagName string) []*Field {\n\tif v.Kind() == reflect.Ptr {\n\t\tv = v.Elem()\n\t}\n\n\tt := v.Type()\n\n\tvar fields []*Field\n\n\tfor i := 0; i < t.NumField(); i++ {\n\t\tfield := t.Field(i)\n\n\t\tif tag := field.Tag.Get(tagName); tag == \"-\" {\n\t\t\tcontinue\n\t\t}\n\n\t\tf := &Field{\n\t\t\tfield: field,\n\t\t\tvalue: v.FieldByName(field.Name),\n\t\t}\n\n\t\tfields = append(fields, f)\n\n\t}\n\n\treturn fields\n}\n\n// Field returns a new Field struct that provides several high level functions\n// around a single struct field entity. It panics if the field is not found.\nfunc (s *Struct) Field(name string) *Field {\n\tf, ok := s.FieldOk(name)\n\tif !ok {\n\t\tpanic(\"field not found\")\n\t}\n\n\treturn f\n}\n\n// FieldOk returns a new Field struct that provides several high level functions\n// around a single struct field entity. The boolean returns true if the field\n// was found.\nfunc (s *Struct) FieldOk(name string) (*Field, bool) {\n\tt := s.value.Type()\n\n\tfield, ok := t.FieldByName(name)\n\tif !ok {\n\t\treturn nil, false\n\t}\n\n\treturn &Field{\n\t\tfield:      field,\n\t\tvalue:      s.value.FieldByName(name),\n\t\tdefaultTag: s.TagName,\n\t}, true\n}\n\n// IsZero returns true if all fields in a struct is a zero value (not\n// initialized) A struct tag with the content of \"-\" ignores the checking of\n// that particular field. Example:\n//\n//   // Field is ignored by this package.\n//   Field bool `structs:\"-\"`\n//\n// A value with the option of \"omitnested\" stops iterating further if the type\n// is a struct. Example:\n//\n//   // Field is not processed further by this package.\n//   Field time.Time     `structs:\"myName,omitnested\"`\n//   Field *http.Request `structs:\",omitnested\"`\n//\n// Note that only exported fields of a struct can be accessed, non exported\n// fields  will be neglected. It panics if s's kind is not struct.\nfunc (s *Struct) IsZero() bool {\n\tfields := s.structFields()\n\n\tfor _, field := range fields {\n\t\tval := s.value.FieldByName(field.Name)\n\n\t\t_, tagOpts := parseTag(field.Tag.Get(s.TagName))\n\n\t\tif IsStruct(val.Interface()) && !tagOpts.Has(\"omitnested\") {\n\t\t\tok := IsZero(val.Interface())\n\t\t\tif !ok {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tcontinue\n\t\t}\n\n\t\t// zero value of the given field, such as \"\" for string, 0 for int\n\t\tzero := reflect.Zero(val.Type()).Interface()\n\n\t\t//  current value of the given field\n\t\tcurrent := val.Interface()\n\n\t\tif !reflect.DeepEqual(current, zero) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\treturn true\n}\n\n// HasZero returns true if a field in a struct is not initialized (zero value).\n// A struct tag with the content of \"-\" ignores the checking of that particular\n// field. Example:\n//\n//   // Field is ignored by this package.\n//   Field bool `structs:\"-\"`\n//\n// A value with the option of \"omitnested\" stops iterating further if the type\n// is a struct. Example:\n//\n//   // Field is not processed further by this package.\n//   Field time.Time     `structs:\"myName,omitnested\"`\n//   Field *http.Request `structs:\",omitnested\"`\n//\n// Note that only exported fields of a struct can be accessed, non exported\n// fields  will be neglected. It panics if s's kind is not struct.\nfunc (s *Struct) HasZero() bool {\n\tfields := s.structFields()\n\n\tfor _, field := range fields {\n\t\tval := s.value.FieldByName(field.Name)\n\n\t\t_, tagOpts := parseTag(field.Tag.Get(s.TagName))\n\n\t\tif IsStruct(val.Interface()) && !tagOpts.Has(\"omitnested\") {\n\t\t\tok := HasZero(val.Interface())\n\t\t\tif ok {\n\t\t\t\treturn true\n\t\t\t}\n\n\t\t\tcontinue\n\t\t}\n\n\t\t// zero value of the given field, such as \"\" for string, 0 for int\n\t\tzero := reflect.Zero(val.Type()).Interface()\n\n\t\t//  current value of the given field\n\t\tcurrent := val.Interface()\n\n\t\tif reflect.DeepEqual(current, zero) {\n\t\t\treturn true\n\t\t}\n\t}\n\n\treturn false\n}\n\n// Name returns the structs's type name within its package. For more info refer\n// to Name() function.\nfunc (s *Struct) Name() string {\n\treturn s.value.Type().Name()\n}\n\n// structFields returns the exported struct fields for a given s struct. This\n// is a convenient helper method to avoid duplicate code in some of the\n// functions.\nfunc (s *Struct) structFields() []reflect.StructField {\n\tt := s.value.Type()\n\n\tvar f []reflect.StructField\n\n\tfor i := 0; i < t.NumField(); i++ {\n\t\tfield := t.Field(i)\n\t\t// we can't access the value of unexported fields\n\t\tif field.PkgPath != \"\" {\n\t\t\tcontinue\n\t\t}\n\n\t\t// don't check if it's omitted\n\t\tif tag := field.Tag.Get(s.TagName); tag == \"-\" {\n\t\t\tcontinue\n\t\t}\n\n\t\tf = append(f, field)\n\t}\n\n\treturn f\n}\n\nfunc strctVal(s interface{}) reflect.Value {\n\tv := reflect.ValueOf(s)\n\n\t// if pointer get the underlying element≤\n\tfor v.Kind() == reflect.Ptr {\n\t\tv = v.Elem()\n\t}\n\n\tif v.Kind() != reflect.Struct {\n\t\tpanic(\"not struct\")\n\t}\n\n\treturn v\n}\n\n// Map converts the given struct to a map[string]interface{}. For more info\n// refer to Struct types Map() method. It panics if s's kind is not struct.\nfunc Map(s interface{}) map[string]interface{} {\n\treturn New(s).Map()\n}\n\n// FillMap is the same as Map. Instead of returning the output, it fills the\n// given map.\nfunc FillMap(s interface{}, out map[string]interface{}) {\n\tNew(s).FillMap(out)\n}\n\n// Values converts the given struct to a []interface{}. For more info refer to\n// Struct types Values() method.  It panics if s's kind is not struct.\nfunc Values(s interface{}) []interface{} {\n\treturn New(s).Values()\n}\n\n// Fields returns a slice of *Field. For more info refer to Struct types\n// Fields() method.  It panics if s's kind is not struct.\nfunc Fields(s interface{}) []*Field {\n\treturn New(s).Fields()\n}\n\n// Names returns a slice of field names. For more info refer to Struct types\n// Names() method.  It panics if s's kind is not struct.\nfunc Names(s interface{}) []string {\n\treturn New(s).Names()\n}\n\n// IsZero returns true if all fields is equal to a zero value. For more info\n// refer to Struct types IsZero() method.  It panics if s's kind is not struct.\nfunc IsZero(s interface{}) bool {\n\treturn New(s).IsZero()\n}\n\n// HasZero returns true if any field is equal to a zero value. For more info\n// refer to Struct types HasZero() method.  It panics if s's kind is not struct.\nfunc HasZero(s interface{}) bool {\n\treturn New(s).HasZero()\n}\n\n// IsStruct returns true if the given variable is a struct or a pointer to\n// struct.\nfunc IsStruct(s interface{}) bool {\n\tv := reflect.ValueOf(s)\n\tif v.Kind() == reflect.Ptr {\n\t\tv = v.Elem()\n\t}\n\n\t// uninitialized zero value of a struct\n\tif v.Kind() == reflect.Invalid {\n\t\treturn false\n\t}\n\n\treturn v.Kind() == reflect.Struct\n}\n\n// Name returns the structs's type name within its package. It returns an\n// empty string for unnamed types. It panics if s's kind is not struct.\nfunc Name(s interface{}) string {\n\treturn New(s).Name()\n}\n\n// nested retrieves recursively all types for the given value and returns the\n// nested value.\nfunc (s *Struct) nested(val reflect.Value) interface{} {\n\tvar finalVal interface{}\n\n\tv := reflect.ValueOf(val.Interface())\n\tif v.Kind() == reflect.Ptr {\n\t\tv = v.Elem()\n\t}\n\n\tswitch v.Kind() {\n\tcase reflect.Struct:\n\t\tn := New(val.Interface())\n\t\tn.TagName = s.TagName\n\t\tm := n.Map()\n\n\t\t// do not add the converted value if there are no exported fields, ie:\n\t\t// time.Time\n\t\tif len(m) == 0 {\n\t\t\tfinalVal = val.Interface()\n\t\t} else {\n\t\t\tfinalVal = m\n\t\t}\n\tcase reflect.Map:\n\t\t// get the element type of the map\n\t\tmapElem := val.Type()\n\t\tswitch val.Type().Kind() {\n\t\tcase reflect.Ptr, reflect.Array, reflect.Map,\n\t\t\treflect.Slice, reflect.Chan:\n\t\t\tmapElem = val.Type().Elem()\n\t\t\tif mapElem.Kind() == reflect.Ptr {\n\t\t\t\tmapElem = mapElem.Elem()\n\t\t\t}\n\t\t}\n\n\t\t// only iterate over struct types, ie: map[string]StructType,\n\t\t// map[string][]StructType,\n\t\tif mapElem.Kind() == reflect.Struct ||\n\t\t\t(mapElem.Kind() == reflect.Slice &&\n\t\t\t\tmapElem.Elem().Kind() == reflect.Struct) {\n\t\t\tm := make(map[string]interface{}, val.Len())\n\t\t\tfor _, k := range val.MapKeys() {\n\t\t\t\tm[k.String()] = s.nested(val.MapIndex(k))\n\t\t\t}\n\t\t\tfinalVal = m\n\t\t\tbreak\n\t\t}\n\n\t\t// TODO(arslan): should this be optional?\n\t\tfinalVal = val.Interface()\n\tcase reflect.Slice, reflect.Array:\n\t\tif val.Type().Kind() == reflect.Interface {\n\t\t\tfinalVal = val.Interface()\n\t\t\tbreak\n\t\t}\n\n\t\t// TODO(arslan): should this be optional?\n\t\t// do not iterate of non struct types, just pass the value. Ie: []int,\n\t\t// []string, co... We only iterate further if it's a struct.\n\t\t// i.e []foo or []*foo\n\t\tif val.Type().Elem().Kind() != reflect.Struct &&\n\t\t\t!(val.Type().Elem().Kind() == reflect.Ptr &&\n\t\t\t\tval.Type().Elem().Elem().Kind() == reflect.Struct) {\n\t\t\tfinalVal = val.Interface()\n\t\t\tbreak\n\t\t}\n\n\t\tslices := make([]interface{}, val.Len())\n\t\tfor x := 0; x < val.Len(); x++ {\n\t\t\tslices[x] = s.nested(val.Index(x))\n\t\t}\n\t\tfinalVal = slices\n\tdefault:\n\t\tfinalVal = val.Interface()\n\t}\n\n\treturn finalVal\n}\n"
  },
  {
    "path": "structs/tags.go",
    "content": "package structs\n\nimport \"strings\"\n\n// tagOptions contains a slice of tag options\ntype tagOptions []string\n\n// Has returns true if the given option is available in tagOptions\nfunc (t tagOptions) Has(opt string) bool {\n\tfor _, tagOpt := range t {\n\t\tif tagOpt == opt {\n\t\t\treturn true\n\t\t}\n\t}\n\n\treturn false\n}\n\n// parseTag splits a struct field's tag into its name and a list of options\n// which comes after a name. A tag is in the form of: \"name,option1,option2\".\n// The name can be neglectected.\nfunc parseTag(tag string) (string, tagOptions) {\n\t// tag is one of followings:\n\t// \"\"\n\t// \"name\"\n\t// \"name,opt\"\n\t// \"name,opt,opt2\"\n\t// \",opt\"\n\n\tres := strings.Split(tag, \",\")\n\treturn res[0], res[1:]\n}\n"
  },
  {
    "path": "vendor/cloud.google.com/go/LICENSE",
    "content": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "vendor/cloud.google.com/go/compute/metadata/metadata.go",
    "content": "// Copyright 2014 Google LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// Package metadata provides access to Google Compute Engine (GCE)\n// metadata and API service accounts.\n//\n// This package is a wrapper around the GCE metadata service,\n// as documented at https://developers.google.com/compute/docs/metadata.\npackage metadata // import \"cloud.google.com/go/compute/metadata\"\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"net\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"os\"\n\t\"runtime\"\n\t\"strings\"\n\t\"sync\"\n\t\"time\"\n)\n\nconst (\n\t// metadataIP is the documented metadata server IP address.\n\tmetadataIP = \"169.254.169.254\"\n\n\t// metadataHostEnv is the environment variable specifying the\n\t// GCE metadata hostname.  If empty, the default value of\n\t// metadataIP (\"169.254.169.254\") is used instead.\n\t// This is variable name is not defined by any spec, as far as\n\t// I know; it was made up for the Go package.\n\tmetadataHostEnv = \"GCE_METADATA_HOST\"\n\n\tuserAgent = \"gcloud-golang/0.1\"\n)\n\ntype cachedValue struct {\n\tk    string\n\ttrim bool\n\tmu   sync.Mutex\n\tv    string\n}\n\nvar (\n\tprojID  = &cachedValue{k: \"project/project-id\", trim: true}\n\tprojNum = &cachedValue{k: \"project/numeric-project-id\", trim: true}\n\tinstID  = &cachedValue{k: \"instance/id\", trim: true}\n)\n\nvar (\n\tdefaultClient = &Client{hc: &http.Client{\n\t\tTransport: &http.Transport{\n\t\t\tDial: (&net.Dialer{\n\t\t\t\tTimeout:   2 * time.Second,\n\t\t\t\tKeepAlive: 30 * time.Second,\n\t\t\t}).Dial,\n\t\t\tResponseHeaderTimeout: 2 * time.Second,\n\t\t},\n\t}}\n\tsubscribeClient = &Client{hc: &http.Client{\n\t\tTransport: &http.Transport{\n\t\t\tDial: (&net.Dialer{\n\t\t\t\tTimeout:   2 * time.Second,\n\t\t\t\tKeepAlive: 30 * time.Second,\n\t\t\t}).Dial,\n\t\t},\n\t}}\n)\n\n// NotDefinedError is returned when requested metadata is not defined.\n//\n// The underlying string is the suffix after \"/computeMetadata/v1/\".\n//\n// This error is not returned if the value is defined to be the empty\n// string.\ntype NotDefinedError string\n\nfunc (suffix NotDefinedError) Error() string {\n\treturn fmt.Sprintf(\"metadata: GCE metadata %q not defined\", string(suffix))\n}\n\nfunc (c *cachedValue) get(cl *Client) (v string, err error) {\n\tdefer c.mu.Unlock()\n\tc.mu.Lock()\n\tif c.v != \"\" {\n\t\treturn c.v, nil\n\t}\n\tif c.trim {\n\t\tv, err = cl.getTrimmed(c.k)\n\t} else {\n\t\tv, err = cl.Get(c.k)\n\t}\n\tif err == nil {\n\t\tc.v = v\n\t}\n\treturn\n}\n\nvar (\n\tonGCEOnce sync.Once\n\tonGCE     bool\n)\n\n// OnGCE reports whether this process is running on Google Compute Engine.\nfunc OnGCE() bool {\n\tonGCEOnce.Do(initOnGCE)\n\treturn onGCE\n}\n\nfunc initOnGCE() {\n\tonGCE = testOnGCE()\n}\n\nfunc testOnGCE() bool {\n\t// The user explicitly said they're on GCE, so trust them.\n\tif os.Getenv(metadataHostEnv) != \"\" {\n\t\treturn true\n\t}\n\n\tctx, cancel := context.WithCancel(context.Background())\n\tdefer cancel()\n\n\tresc := make(chan bool, 2)\n\n\t// Try two strategies in parallel.\n\t// See https://github.com/googleapis/google-cloud-go/issues/194\n\tgo func() {\n\t\treq, _ := http.NewRequest(\"GET\", \"http://\"+metadataIP, nil)\n\t\treq.Header.Set(\"User-Agent\", userAgent)\n\t\tres, err := defaultClient.hc.Do(req.WithContext(ctx))\n\t\tif err != nil {\n\t\t\tresc <- false\n\t\t\treturn\n\t\t}\n\t\tdefer res.Body.Close()\n\t\tresc <- res.Header.Get(\"Metadata-Flavor\") == \"Google\"\n\t}()\n\n\tgo func() {\n\t\taddrs, err := net.LookupHost(\"metadata.google.internal\")\n\t\tif err != nil || len(addrs) == 0 {\n\t\t\tresc <- false\n\t\t\treturn\n\t\t}\n\t\tresc <- strsContains(addrs, metadataIP)\n\t}()\n\n\ttryHarder := systemInfoSuggestsGCE()\n\tif tryHarder {\n\t\tres := <-resc\n\t\tif res {\n\t\t\t// The first strategy succeeded, so let's use it.\n\t\t\treturn true\n\t\t}\n\t\t// Wait for either the DNS or metadata server probe to\n\t\t// contradict the other one and say we are running on\n\t\t// GCE. Give it a lot of time to do so, since the system\n\t\t// info already suggests we're running on a GCE BIOS.\n\t\ttimer := time.NewTimer(5 * time.Second)\n\t\tdefer timer.Stop()\n\t\tselect {\n\t\tcase res = <-resc:\n\t\t\treturn res\n\t\tcase <-timer.C:\n\t\t\t// Too slow. Who knows what this system is.\n\t\t\treturn false\n\t\t}\n\t}\n\n\t// There's no hint from the system info that we're running on\n\t// GCE, so use the first probe's result as truth, whether it's\n\t// true or false. The goal here is to optimize for speed for\n\t// users who are NOT running on GCE. We can't assume that\n\t// either a DNS lookup or an HTTP request to a blackholed IP\n\t// address is fast. Worst case this should return when the\n\t// metaClient's Transport.ResponseHeaderTimeout or\n\t// Transport.Dial.Timeout fires (in two seconds).\n\treturn <-resc\n}\n\n// systemInfoSuggestsGCE reports whether the local system (without\n// doing network requests) suggests that we're running on GCE. If this\n// returns true, testOnGCE tries a bit harder to reach its metadata\n// server.\nfunc systemInfoSuggestsGCE() bool {\n\tif runtime.GOOS != \"linux\" {\n\t\t// We don't have any non-Linux clues available, at least yet.\n\t\treturn false\n\t}\n\tslurp, _ := ioutil.ReadFile(\"/sys/class/dmi/id/product_name\")\n\tname := strings.TrimSpace(string(slurp))\n\treturn name == \"Google\" || name == \"Google Compute Engine\"\n}\n\n// Subscribe calls Client.Subscribe on a client designed for subscribing (one with no\n// ResponseHeaderTimeout).\nfunc Subscribe(suffix string, fn func(v string, ok bool) error) error {\n\treturn subscribeClient.Subscribe(suffix, fn)\n}\n\n// Get calls Client.Get on the default client.\nfunc Get(suffix string) (string, error) { return defaultClient.Get(suffix) }\n\n// ProjectID returns the current instance's project ID string.\nfunc ProjectID() (string, error) { return defaultClient.ProjectID() }\n\n// NumericProjectID returns the current instance's numeric project ID.\nfunc NumericProjectID() (string, error) { return defaultClient.NumericProjectID() }\n\n// InternalIP returns the instance's primary internal IP address.\nfunc InternalIP() (string, error) { return defaultClient.InternalIP() }\n\n// ExternalIP returns the instance's primary external (public) IP address.\nfunc ExternalIP() (string, error) { return defaultClient.ExternalIP() }\n\n// Hostname returns the instance's hostname. This will be of the form\n// \"<instanceID>.c.<projID>.internal\".\nfunc Hostname() (string, error) { return defaultClient.Hostname() }\n\n// InstanceTags returns the list of user-defined instance tags,\n// assigned when initially creating a GCE instance.\nfunc InstanceTags() ([]string, error) { return defaultClient.InstanceTags() }\n\n// InstanceID returns the current VM's numeric instance ID.\nfunc InstanceID() (string, error) { return defaultClient.InstanceID() }\n\n// InstanceName returns the current VM's instance ID string.\nfunc InstanceName() (string, error) { return defaultClient.InstanceName() }\n\n// Zone returns the current VM's zone, such as \"us-central1-b\".\nfunc Zone() (string, error) { return defaultClient.Zone() }\n\n// InstanceAttributes calls Client.InstanceAttributes on the default client.\nfunc InstanceAttributes() ([]string, error) { return defaultClient.InstanceAttributes() }\n\n// ProjectAttributes calls Client.ProjectAttributes on the default client.\nfunc ProjectAttributes() ([]string, error) { return defaultClient.ProjectAttributes() }\n\n// InstanceAttributeValue calls Client.InstanceAttributeValue on the default client.\nfunc InstanceAttributeValue(attr string) (string, error) {\n\treturn defaultClient.InstanceAttributeValue(attr)\n}\n\n// ProjectAttributeValue calls Client.ProjectAttributeValue on the default client.\nfunc ProjectAttributeValue(attr string) (string, error) {\n\treturn defaultClient.ProjectAttributeValue(attr)\n}\n\n// Scopes calls Client.Scopes on the default client.\nfunc Scopes(serviceAccount string) ([]string, error) { return defaultClient.Scopes(serviceAccount) }\n\nfunc strsContains(ss []string, s string) bool {\n\tfor _, v := range ss {\n\t\tif v == s {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// A Client provides metadata.\ntype Client struct {\n\thc *http.Client\n}\n\n// NewClient returns a Client that can be used to fetch metadata. All HTTP requests\n// will use the given http.Client instead of the default client.\nfunc NewClient(c *http.Client) *Client {\n\treturn &Client{hc: c}\n}\n\n// getETag returns a value from the metadata service as well as the associated ETag.\n// This func is otherwise equivalent to Get.\nfunc (c *Client) getETag(suffix string) (value, etag string, err error) {\n\t// Using a fixed IP makes it very difficult to spoof the metadata service in\n\t// a container, which is an important use-case for local testing of cloud\n\t// deployments. To enable spoofing of the metadata service, the environment\n\t// variable GCE_METADATA_HOST is first inspected to decide where metadata\n\t// requests shall go.\n\thost := os.Getenv(metadataHostEnv)\n\tif host == \"\" {\n\t\t// Using 169.254.169.254 instead of \"metadata\" here because Go\n\t\t// binaries built with the \"netgo\" tag and without cgo won't\n\t\t// know the search suffix for \"metadata\" is\n\t\t// \".google.internal\", and this IP address is documented as\n\t\t// being stable anyway.\n\t\thost = metadataIP\n\t}\n\tu := \"http://\" + host + \"/computeMetadata/v1/\" + suffix\n\treq, _ := http.NewRequest(\"GET\", u, nil)\n\treq.Header.Set(\"Metadata-Flavor\", \"Google\")\n\treq.Header.Set(\"User-Agent\", userAgent)\n\tres, err := c.hc.Do(req)\n\tif err != nil {\n\t\treturn \"\", \"\", err\n\t}\n\tdefer res.Body.Close()\n\tif res.StatusCode == http.StatusNotFound {\n\t\treturn \"\", \"\", NotDefinedError(suffix)\n\t}\n\tall, err := ioutil.ReadAll(res.Body)\n\tif err != nil {\n\t\treturn \"\", \"\", err\n\t}\n\tif res.StatusCode != 200 {\n\t\treturn \"\", \"\", &Error{Code: res.StatusCode, Message: string(all)}\n\t}\n\treturn string(all), res.Header.Get(\"Etag\"), nil\n}\n\n// Get returns a value from the metadata service.\n// The suffix is appended to \"http://${GCE_METADATA_HOST}/computeMetadata/v1/\".\n//\n// If the GCE_METADATA_HOST environment variable is not defined, a default of\n// 169.254.169.254 will be used instead.\n//\n// If the requested metadata is not defined, the returned error will\n// be of type NotDefinedError.\nfunc (c *Client) Get(suffix string) (string, error) {\n\tval, _, err := c.getETag(suffix)\n\treturn val, err\n}\n\nfunc (c *Client) getTrimmed(suffix string) (s string, err error) {\n\ts, err = c.Get(suffix)\n\ts = strings.TrimSpace(s)\n\treturn\n}\n\nfunc (c *Client) lines(suffix string) ([]string, error) {\n\tj, err := c.Get(suffix)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\ts := strings.Split(strings.TrimSpace(j), \"\\n\")\n\tfor i := range s {\n\t\ts[i] = strings.TrimSpace(s[i])\n\t}\n\treturn s, nil\n}\n\n// ProjectID returns the current instance's project ID string.\nfunc (c *Client) ProjectID() (string, error) { return projID.get(c) }\n\n// NumericProjectID returns the current instance's numeric project ID.\nfunc (c *Client) NumericProjectID() (string, error) { return projNum.get(c) }\n\n// InstanceID returns the current VM's numeric instance ID.\nfunc (c *Client) InstanceID() (string, error) { return instID.get(c) }\n\n// InternalIP returns the instance's primary internal IP address.\nfunc (c *Client) InternalIP() (string, error) {\n\treturn c.getTrimmed(\"instance/network-interfaces/0/ip\")\n}\n\n// ExternalIP returns the instance's primary external (public) IP address.\nfunc (c *Client) ExternalIP() (string, error) {\n\treturn c.getTrimmed(\"instance/network-interfaces/0/access-configs/0/external-ip\")\n}\n\n// Hostname returns the instance's hostname. This will be of the form\n// \"<instanceID>.c.<projID>.internal\".\nfunc (c *Client) Hostname() (string, error) {\n\treturn c.getTrimmed(\"instance/hostname\")\n}\n\n// InstanceTags returns the list of user-defined instance tags,\n// assigned when initially creating a GCE instance.\nfunc (c *Client) InstanceTags() ([]string, error) {\n\tvar s []string\n\tj, err := c.Get(\"instance/tags\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif err := json.NewDecoder(strings.NewReader(j)).Decode(&s); err != nil {\n\t\treturn nil, err\n\t}\n\treturn s, nil\n}\n\n// InstanceName returns the current VM's instance ID string.\nfunc (c *Client) InstanceName() (string, error) {\n\thost, err := c.Hostname()\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn strings.Split(host, \".\")[0], nil\n}\n\n// Zone returns the current VM's zone, such as \"us-central1-b\".\nfunc (c *Client) Zone() (string, error) {\n\tzone, err := c.getTrimmed(\"instance/zone\")\n\t// zone is of the form \"projects/<projNum>/zones/<zoneName>\".\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn zone[strings.LastIndex(zone, \"/\")+1:], nil\n}\n\n// InstanceAttributes returns the list of user-defined attributes,\n// assigned when initially creating a GCE VM instance. The value of an\n// attribute can be obtained with InstanceAttributeValue.\nfunc (c *Client) InstanceAttributes() ([]string, error) { return c.lines(\"instance/attributes/\") }\n\n// ProjectAttributes returns the list of user-defined attributes\n// applying to the project as a whole, not just this VM.  The value of\n// an attribute can be obtained with ProjectAttributeValue.\nfunc (c *Client) ProjectAttributes() ([]string, error) { return c.lines(\"project/attributes/\") }\n\n// InstanceAttributeValue returns the value of the provided VM\n// instance attribute.\n//\n// If the requested attribute is not defined, the returned error will\n// be of type NotDefinedError.\n//\n// InstanceAttributeValue may return (\"\", nil) if the attribute was\n// defined to be the empty string.\nfunc (c *Client) InstanceAttributeValue(attr string) (string, error) {\n\treturn c.Get(\"instance/attributes/\" + attr)\n}\n\n// ProjectAttributeValue returns the value of the provided\n// project attribute.\n//\n// If the requested attribute is not defined, the returned error will\n// be of type NotDefinedError.\n//\n// ProjectAttributeValue may return (\"\", nil) if the attribute was\n// defined to be the empty string.\nfunc (c *Client) ProjectAttributeValue(attr string) (string, error) {\n\treturn c.Get(\"project/attributes/\" + attr)\n}\n\n// Scopes returns the service account scopes for the given account.\n// The account may be empty or the string \"default\" to use the instance's\n// main account.\nfunc (c *Client) Scopes(serviceAccount string) ([]string, error) {\n\tif serviceAccount == \"\" {\n\t\tserviceAccount = \"default\"\n\t}\n\treturn c.lines(\"instance/service-accounts/\" + serviceAccount + \"/scopes\")\n}\n\n// Subscribe subscribes to a value from the metadata service.\n// The suffix is appended to \"http://${GCE_METADATA_HOST}/computeMetadata/v1/\".\n// The suffix may contain query parameters.\n//\n// Subscribe calls fn with the latest metadata value indicated by the provided\n// suffix. If the metadata value is deleted, fn is called with the empty string\n// and ok false. Subscribe blocks until fn returns a non-nil error or the value\n// is deleted. Subscribe returns the error value returned from the last call to\n// fn, which may be nil when ok == false.\nfunc (c *Client) Subscribe(suffix string, fn func(v string, ok bool) error) error {\n\tconst failedSubscribeSleep = time.Second * 5\n\n\t// First check to see if the metadata value exists at all.\n\tval, lastETag, err := c.getETag(suffix)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif err := fn(val, true); err != nil {\n\t\treturn err\n\t}\n\n\tok := true\n\tif strings.ContainsRune(suffix, '?') {\n\t\tsuffix += \"&wait_for_change=true&last_etag=\"\n\t} else {\n\t\tsuffix += \"?wait_for_change=true&last_etag=\"\n\t}\n\tfor {\n\t\tval, etag, err := c.getETag(suffix + url.QueryEscape(lastETag))\n\t\tif err != nil {\n\t\t\tif _, deleted := err.(NotDefinedError); !deleted {\n\t\t\t\ttime.Sleep(failedSubscribeSleep)\n\t\t\t\tcontinue // Retry on other errors.\n\t\t\t}\n\t\t\tok = false\n\t\t}\n\t\tlastETag = etag\n\n\t\tif err := fn(val, ok); err != nil || !ok {\n\t\t\treturn err\n\t\t}\n\t}\n}\n\n// Error contains an error response from the server.\ntype Error struct {\n\t// Code is the HTTP response status code.\n\tCode int\n\t// Message is the server response message.\n\tMessage string\n}\n\nfunc (e *Error) Error() string {\n\treturn fmt.Sprintf(\"compute: Received %d `%s`\", e.Code, e.Message)\n}\n"
  },
  {
    "path": "vendor/cloud.google.com/go/iam/iam.go",
    "content": "// Copyright 2016 Google LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// Package iam supports the resource-specific operations of Google Cloud\n// IAM (Identity and Access Management) for the Google Cloud Libraries.\n// See https://cloud.google.com/iam for more about IAM.\n//\n// Users of the Google Cloud Libraries will typically not use this package\n// directly. Instead they will begin with some resource that supports IAM, like\n// a pubsub topic, and call its IAM method to get a Handle for that resource.\npackage iam\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"time\"\n\n\tgax \"github.com/googleapis/gax-go/v2\"\n\tpb \"google.golang.org/genproto/googleapis/iam/v1\"\n\t\"google.golang.org/grpc\"\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/metadata\"\n)\n\n// client abstracts the IAMPolicy API to allow multiple implementations.\ntype client interface {\n\tGet(ctx context.Context, resource string) (*pb.Policy, error)\n\tSet(ctx context.Context, resource string, p *pb.Policy) error\n\tTest(ctx context.Context, resource string, perms []string) ([]string, error)\n}\n\n// grpcClient implements client for the standard gRPC-based IAMPolicy service.\ntype grpcClient struct {\n\tc pb.IAMPolicyClient\n}\n\nvar withRetry = gax.WithRetry(func() gax.Retryer {\n\treturn gax.OnCodes([]codes.Code{\n\t\tcodes.DeadlineExceeded,\n\t\tcodes.Unavailable,\n\t}, gax.Backoff{\n\t\tInitial:    100 * time.Millisecond,\n\t\tMax:        60 * time.Second,\n\t\tMultiplier: 1.3,\n\t})\n})\n\nfunc (g *grpcClient) Get(ctx context.Context, resource string) (*pb.Policy, error) {\n\tvar proto *pb.Policy\n\tmd := metadata.Pairs(\"x-goog-request-params\", fmt.Sprintf(\"%s=%v\", \"resource\", resource))\n\tctx = insertMetadata(ctx, md)\n\n\terr := gax.Invoke(ctx, func(ctx context.Context, _ gax.CallSettings) error {\n\t\tvar err error\n\t\tproto, err = g.c.GetIamPolicy(ctx, &pb.GetIamPolicyRequest{Resource: resource})\n\t\treturn err\n\t}, withRetry)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn proto, nil\n}\n\nfunc (g *grpcClient) Set(ctx context.Context, resource string, p *pb.Policy) error {\n\tmd := metadata.Pairs(\"x-goog-request-params\", fmt.Sprintf(\"%s=%v\", \"resource\", resource))\n\tctx = insertMetadata(ctx, md)\n\n\treturn gax.Invoke(ctx, func(ctx context.Context, _ gax.CallSettings) error {\n\t\t_, err := g.c.SetIamPolicy(ctx, &pb.SetIamPolicyRequest{\n\t\t\tResource: resource,\n\t\t\tPolicy:   p,\n\t\t})\n\t\treturn err\n\t}, withRetry)\n}\n\nfunc (g *grpcClient) Test(ctx context.Context, resource string, perms []string) ([]string, error) {\n\tvar res *pb.TestIamPermissionsResponse\n\tmd := metadata.Pairs(\"x-goog-request-params\", fmt.Sprintf(\"%s=%v\", \"resource\", resource))\n\tctx = insertMetadata(ctx, md)\n\n\terr := gax.Invoke(ctx, func(ctx context.Context, _ gax.CallSettings) error {\n\t\tvar err error\n\t\tres, err = g.c.TestIamPermissions(ctx, &pb.TestIamPermissionsRequest{\n\t\t\tResource:    resource,\n\t\t\tPermissions: perms,\n\t\t})\n\t\treturn err\n\t}, withRetry)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn res.Permissions, nil\n}\n\n// A Handle provides IAM operations for a resource.\ntype Handle struct {\n\tc        client\n\tresource string\n}\n\n// InternalNewHandle is for use by the Google Cloud Libraries only.\n//\n// InternalNewHandle returns a Handle for resource.\n// The conn parameter refers to a server that must support the IAMPolicy service.\nfunc InternalNewHandle(conn *grpc.ClientConn, resource string) *Handle {\n\treturn InternalNewHandleGRPCClient(pb.NewIAMPolicyClient(conn), resource)\n}\n\n// InternalNewHandleGRPCClient is for use by the Google Cloud Libraries only.\n//\n// InternalNewHandleClient returns a Handle for resource using the given\n// grpc service that implements IAM as a mixin\nfunc InternalNewHandleGRPCClient(c pb.IAMPolicyClient, resource string) *Handle {\n\treturn InternalNewHandleClient(&grpcClient{c: c}, resource)\n}\n\n// InternalNewHandleClient is for use by the Google Cloud Libraries only.\n//\n// InternalNewHandleClient returns a Handle for resource using the given\n// client implementation.\nfunc InternalNewHandleClient(c client, resource string) *Handle {\n\treturn &Handle{\n\t\tc:        c,\n\t\tresource: resource,\n\t}\n}\n\n// Policy retrieves the IAM policy for the resource.\nfunc (h *Handle) Policy(ctx context.Context) (*Policy, error) {\n\tproto, err := h.c.Get(ctx, h.resource)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &Policy{InternalProto: proto}, nil\n}\n\n// SetPolicy replaces the resource's current policy with the supplied Policy.\n//\n// If policy was created from a prior call to Get, then the modification will\n// only succeed if the policy has not changed since the Get.\nfunc (h *Handle) SetPolicy(ctx context.Context, policy *Policy) error {\n\treturn h.c.Set(ctx, h.resource, policy.InternalProto)\n}\n\n// TestPermissions returns the subset of permissions that the caller has on the resource.\nfunc (h *Handle) TestPermissions(ctx context.Context, permissions []string) ([]string, error) {\n\treturn h.c.Test(ctx, h.resource, permissions)\n}\n\n// A RoleName is a name representing a collection of permissions.\ntype RoleName string\n\n// Common role names.\nconst (\n\tOwner  RoleName = \"roles/owner\"\n\tEditor RoleName = \"roles/editor\"\n\tViewer RoleName = \"roles/viewer\"\n)\n\nconst (\n\t// AllUsers is a special member that denotes all users, even unauthenticated ones.\n\tAllUsers = \"allUsers\"\n\n\t// AllAuthenticatedUsers is a special member that denotes all authenticated users.\n\tAllAuthenticatedUsers = \"allAuthenticatedUsers\"\n)\n\n// A Policy is a list of Bindings representing roles\n// granted to members.\n//\n// The zero Policy is a valid policy with no bindings.\ntype Policy struct {\n\t// TODO(jba): when type aliases are available, put Policy into an internal package\n\t// and provide an exported alias here.\n\n\t// This field is exported for use by the Google Cloud Libraries only.\n\t// It may become unexported in a future release.\n\tInternalProto *pb.Policy\n}\n\n// Members returns the list of members with the supplied role.\n// The return value should not be modified. Use Add and Remove\n// to modify the members of a role.\nfunc (p *Policy) Members(r RoleName) []string {\n\tb := p.binding(r)\n\tif b == nil {\n\t\treturn nil\n\t}\n\treturn b.Members\n}\n\n// HasRole reports whether member has role r.\nfunc (p *Policy) HasRole(member string, r RoleName) bool {\n\treturn memberIndex(member, p.binding(r)) >= 0\n}\n\n// Add adds member member to role r if it is not already present.\n// A new binding is created if there is no binding for the role.\nfunc (p *Policy) Add(member string, r RoleName) {\n\tb := p.binding(r)\n\tif b == nil {\n\t\tif p.InternalProto == nil {\n\t\t\tp.InternalProto = &pb.Policy{}\n\t\t}\n\t\tp.InternalProto.Bindings = append(p.InternalProto.Bindings, &pb.Binding{\n\t\t\tRole:    string(r),\n\t\t\tMembers: []string{member},\n\t\t})\n\t\treturn\n\t}\n\tif memberIndex(member, b) < 0 {\n\t\tb.Members = append(b.Members, member)\n\t\treturn\n\t}\n}\n\n// Remove removes member from role r if it is present.\nfunc (p *Policy) Remove(member string, r RoleName) {\n\tbi := p.bindingIndex(r)\n\tif bi < 0 {\n\t\treturn\n\t}\n\tbindings := p.InternalProto.Bindings\n\tb := bindings[bi]\n\tmi := memberIndex(member, b)\n\tif mi < 0 {\n\t\treturn\n\t}\n\t// Order doesn't matter for bindings or members, so to remove, move the last item\n\t// into the removed spot and shrink the slice.\n\tif len(b.Members) == 1 {\n\t\t// Remove binding.\n\t\tlast := len(bindings) - 1\n\t\tbindings[bi] = bindings[last]\n\t\tbindings[last] = nil\n\t\tp.InternalProto.Bindings = bindings[:last]\n\t\treturn\n\t}\n\t// Remove member.\n\t// TODO(jba): worry about multiple copies of m?\n\tlast := len(b.Members) - 1\n\tb.Members[mi] = b.Members[last]\n\tb.Members[last] = \"\"\n\tb.Members = b.Members[:last]\n}\n\n// Roles returns the names of all the roles that appear in the Policy.\nfunc (p *Policy) Roles() []RoleName {\n\tif p.InternalProto == nil {\n\t\treturn nil\n\t}\n\tvar rns []RoleName\n\tfor _, b := range p.InternalProto.Bindings {\n\t\trns = append(rns, RoleName(b.Role))\n\t}\n\treturn rns\n}\n\n// binding returns the Binding for the suppied role, or nil if there isn't one.\nfunc (p *Policy) binding(r RoleName) *pb.Binding {\n\ti := p.bindingIndex(r)\n\tif i < 0 {\n\t\treturn nil\n\t}\n\treturn p.InternalProto.Bindings[i]\n}\n\nfunc (p *Policy) bindingIndex(r RoleName) int {\n\tif p.InternalProto == nil {\n\t\treturn -1\n\t}\n\tfor i, b := range p.InternalProto.Bindings {\n\t\tif b.Role == string(r) {\n\t\t\treturn i\n\t\t}\n\t}\n\treturn -1\n}\n\n// memberIndex returns the index of m in b's Members, or -1 if not found.\nfunc memberIndex(m string, b *pb.Binding) int {\n\tif b == nil {\n\t\treturn -1\n\t}\n\tfor i, mm := range b.Members {\n\t\tif mm == m {\n\t\t\treturn i\n\t\t}\n\t}\n\treturn -1\n}\n\n// insertMetadata inserts metadata into the given context\nfunc insertMetadata(ctx context.Context, mds ...metadata.MD) context.Context {\n\tout, _ := metadata.FromOutgoingContext(ctx)\n\tout = out.Copy()\n\tfor _, md := range mds {\n\t\tfor k, v := range md {\n\t\t\tout[k] = append(out[k], v...)\n\t\t}\n\t}\n\treturn metadata.NewOutgoingContext(ctx, out)\n}\n"
  },
  {
    "path": "vendor/cloud.google.com/go/internal/annotate.go",
    "content": "// Copyright 2017 Google LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage internal\n\nimport (\n\t\"fmt\"\n\n\t\"google.golang.org/api/googleapi\"\n\t\"google.golang.org/grpc/status\"\n)\n\n// Annotate prepends msg to the error message in err, attempting\n// to preserve other information in err, like an error code.\n//\n// Annotate panics if err is nil.\n//\n// Annotate knows about these error types:\n// - \"google.golang.org/grpc/status\".Status\n// - \"google.golang.org/api/googleapi\".Error\n// If the error is not one of these types, Annotate behaves\n// like\n//   fmt.Errorf(\"%s: %v\", msg, err)\nfunc Annotate(err error, msg string) error {\n\tif err == nil {\n\t\tpanic(\"Annotate called with nil\")\n\t}\n\tif s, ok := status.FromError(err); ok {\n\t\tp := s.Proto()\n\t\tp.Message = msg + \": \" + p.Message\n\t\treturn status.ErrorProto(p)\n\t}\n\tif g, ok := err.(*googleapi.Error); ok {\n\t\tg.Message = msg + \": \" + g.Message\n\t\treturn g\n\t}\n\treturn fmt.Errorf(\"%s: %v\", msg, err)\n}\n\n// Annotatef uses format and args to format a string, then calls Annotate.\nfunc Annotatef(err error, format string, args ...interface{}) error {\n\treturn Annotate(err, fmt.Sprintf(format, args...))\n}\n"
  },
  {
    "path": "vendor/cloud.google.com/go/internal/optional/optional.go",
    "content": "// Copyright 2016 Google LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// Package optional provides versions of primitive types that can\n// be nil. These are useful in methods that update some of an API object's\n// fields.\npackage optional\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n\t\"time\"\n)\n\ntype (\n\t// Bool is either a bool or nil.\n\tBool interface{}\n\n\t// String is either a string or nil.\n\tString interface{}\n\n\t// Int is either an int or nil.\n\tInt interface{}\n\n\t// Uint is either a uint or nil.\n\tUint interface{}\n\n\t// Float64 is either a float64 or nil.\n\tFloat64 interface{}\n\n\t// Duration is either a time.Duration or nil.\n\tDuration interface{}\n)\n\n// ToBool returns its argument as a bool.\n// It panics if its argument is nil or not a bool.\nfunc ToBool(v Bool) bool {\n\tx, ok := v.(bool)\n\tif !ok {\n\t\tdoPanic(\"Bool\", v)\n\t}\n\treturn x\n}\n\n// ToString returns its argument as a string.\n// It panics if its argument is nil or not a string.\nfunc ToString(v String) string {\n\tx, ok := v.(string)\n\tif !ok {\n\t\tdoPanic(\"String\", v)\n\t}\n\treturn x\n}\n\n// ToInt returns its argument as an int.\n// It panics if its argument is nil or not an int.\nfunc ToInt(v Int) int {\n\tx, ok := v.(int)\n\tif !ok {\n\t\tdoPanic(\"Int\", v)\n\t}\n\treturn x\n}\n\n// ToUint returns its argument as a uint.\n// It panics if its argument is nil or not a uint.\nfunc ToUint(v Uint) uint {\n\tx, ok := v.(uint)\n\tif !ok {\n\t\tdoPanic(\"Uint\", v)\n\t}\n\treturn x\n}\n\n// ToFloat64 returns its argument as a float64.\n// It panics if its argument is nil or not a float64.\nfunc ToFloat64(v Float64) float64 {\n\tx, ok := v.(float64)\n\tif !ok {\n\t\tdoPanic(\"Float64\", v)\n\t}\n\treturn x\n}\n\n// ToDuration returns its argument as a time.Duration.\n// It panics if its argument is nil or not a time.Duration.\nfunc ToDuration(v Duration) time.Duration {\n\tx, ok := v.(time.Duration)\n\tif !ok {\n\t\tdoPanic(\"Duration\", v)\n\t}\n\treturn x\n}\n\nfunc doPanic(capType string, v interface{}) {\n\tpanic(fmt.Sprintf(\"optional.%s value should be %s, got %T\", capType, strings.ToLower(capType), v))\n}\n"
  },
  {
    "path": "vendor/cloud.google.com/go/internal/retry.go",
    "content": "// Copyright 2016 Google LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage internal\n\nimport (\n\t\"context\"\n\t\"time\"\n\n\tgax \"github.com/googleapis/gax-go/v2\"\n)\n\n// Retry calls the supplied function f repeatedly according to the provided\n// backoff parameters. It returns when one of the following occurs:\n// When f's first return value is true, Retry immediately returns with f's second\n// return value.\n// When the provided context is done, Retry returns with an error that\n// includes both ctx.Error() and the last error returned by f.\nfunc Retry(ctx context.Context, bo gax.Backoff, f func() (stop bool, err error)) error {\n\treturn retry(ctx, bo, f, gax.Sleep)\n}\n\nfunc retry(ctx context.Context, bo gax.Backoff, f func() (stop bool, err error),\n\tsleep func(context.Context, time.Duration) error) error {\n\tvar lastErr error\n\tfor {\n\t\tstop, err := f()\n\t\tif stop {\n\t\t\treturn err\n\t\t}\n\t\t// Remember the last \"real\" error from f.\n\t\tif err != nil && err != context.Canceled && err != context.DeadlineExceeded {\n\t\t\tlastErr = err\n\t\t}\n\t\tp := bo.Pause()\n\t\tif cerr := sleep(ctx, p); cerr != nil {\n\t\t\tif lastErr != nil {\n\t\t\t\treturn Annotatef(lastErr, \"retry failed with %v; last error\", cerr)\n\t\t\t}\n\t\t\treturn cerr\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "vendor/cloud.google.com/go/internal/trace/trace.go",
    "content": "// Copyright 2018 Google LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage trace\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"go.opencensus.io/trace\"\n\t\"google.golang.org/api/googleapi\"\n\t\"google.golang.org/genproto/googleapis/rpc/code\"\n\t\"google.golang.org/grpc/status\"\n)\n\n// StartSpan adds a span to the trace with the given name.\nfunc StartSpan(ctx context.Context, name string) context.Context {\n\tctx, _ = trace.StartSpan(ctx, name)\n\treturn ctx\n}\n\n// EndSpan ends a span with the given error.\nfunc EndSpan(ctx context.Context, err error) {\n\tspan := trace.FromContext(ctx)\n\tif err != nil {\n\t\tspan.SetStatus(toStatus(err))\n\t}\n\tspan.End()\n}\n\n// toStatus interrogates an error and converts it to an appropriate\n// OpenCensus status.\nfunc toStatus(err error) trace.Status {\n\tif err2, ok := err.(*googleapi.Error); ok {\n\t\treturn trace.Status{Code: httpStatusCodeToOCCode(err2.Code), Message: err2.Message}\n\t} else if s, ok := status.FromError(err); ok {\n\t\treturn trace.Status{Code: int32(s.Code()), Message: s.Message()}\n\t} else {\n\t\treturn trace.Status{Code: int32(code.Code_UNKNOWN), Message: err.Error()}\n\t}\n}\n\n// TODO(deklerk): switch to using OpenCensus function when it becomes available.\n// Reference: https://github.com/googleapis/googleapis/blob/26b634d2724ac5dd30ae0b0cbfb01f07f2e4050e/google/rpc/code.proto\nfunc httpStatusCodeToOCCode(httpStatusCode int) int32 {\n\tswitch httpStatusCode {\n\tcase 200:\n\t\treturn int32(code.Code_OK)\n\tcase 499:\n\t\treturn int32(code.Code_CANCELLED)\n\tcase 500:\n\t\treturn int32(code.Code_UNKNOWN) // Could also be Code_INTERNAL, Code_DATA_LOSS\n\tcase 400:\n\t\treturn int32(code.Code_INVALID_ARGUMENT) // Could also be Code_OUT_OF_RANGE\n\tcase 504:\n\t\treturn int32(code.Code_DEADLINE_EXCEEDED)\n\tcase 404:\n\t\treturn int32(code.Code_NOT_FOUND)\n\tcase 409:\n\t\treturn int32(code.Code_ALREADY_EXISTS) // Could also be Code_ABORTED\n\tcase 403:\n\t\treturn int32(code.Code_PERMISSION_DENIED)\n\tcase 401:\n\t\treturn int32(code.Code_UNAUTHENTICATED)\n\tcase 429:\n\t\treturn int32(code.Code_RESOURCE_EXHAUSTED)\n\tcase 501:\n\t\treturn int32(code.Code_UNIMPLEMENTED)\n\tcase 503:\n\t\treturn int32(code.Code_UNAVAILABLE)\n\tdefault:\n\t\treturn int32(code.Code_UNKNOWN)\n\t}\n}\n\n// TODO: (odeke-em): perhaps just pass around spans due to the cost\n// incurred from using trace.FromContext(ctx) yet we could avoid\n// throwing away the work done by ctx, span := trace.StartSpan.\nfunc TracePrintf(ctx context.Context, attrMap map[string]interface{}, format string, args ...interface{}) {\n\tvar attrs []trace.Attribute\n\tfor k, v := range attrMap {\n\t\tvar a trace.Attribute\n\t\tswitch v := v.(type) {\n\t\tcase string:\n\t\t\ta = trace.StringAttribute(k, v)\n\t\tcase bool:\n\t\t\ta = trace.BoolAttribute(k, v)\n\t\tcase int:\n\t\t\ta = trace.Int64Attribute(k, int64(v))\n\t\tcase int64:\n\t\t\ta = trace.Int64Attribute(k, v)\n\t\tdefault:\n\t\t\ta = trace.StringAttribute(k, fmt.Sprintf(\"%#v\", v))\n\t\t}\n\t\tattrs = append(attrs, a)\n\t}\n\ttrace.FromContext(ctx).Annotatef(attrs, format, args...)\n}\n"
  },
  {
    "path": "vendor/cloud.google.com/go/internal/version/version.go",
    "content": "// Copyright 2016 Google LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n//go:generate ./update_version.sh\n\n// Package version contains version information for Google Cloud Client\n// Libraries for Go, as reported in request headers.\npackage version\n\nimport (\n\t\"runtime\"\n\t\"strings\"\n\t\"unicode\"\n)\n\n// Repo is the current version of the client libraries in this\n// repo. It should be a date in YYYYMMDD format.\nconst Repo = \"20180226\"\n\n// Go returns the Go runtime version. The returned string\n// has no whitespace.\nfunc Go() string {\n\treturn goVersion\n}\n\nvar goVersion = goVer(runtime.Version())\n\nconst develPrefix = \"devel +\"\n\nfunc goVer(s string) string {\n\tif strings.HasPrefix(s, develPrefix) {\n\t\ts = s[len(develPrefix):]\n\t\tif p := strings.IndexFunc(s, unicode.IsSpace); p >= 0 {\n\t\t\ts = s[:p]\n\t\t}\n\t\treturn s\n\t}\n\n\tif strings.HasPrefix(s, \"go1\") {\n\t\ts = s[2:]\n\t\tvar prerelease string\n\t\tif p := strings.IndexFunc(s, notSemverRune); p >= 0 {\n\t\t\ts, prerelease = s[:p], s[p:]\n\t\t}\n\t\tif strings.HasSuffix(s, \".\") {\n\t\t\ts += \"0\"\n\t\t} else if strings.Count(s, \".\") < 2 {\n\t\t\ts += \".0\"\n\t\t}\n\t\tif prerelease != \"\" {\n\t\t\ts += \"-\" + prerelease\n\t\t}\n\t\treturn s\n\t}\n\treturn \"\"\n}\n\nfunc notSemverRune(r rune) bool {\n\treturn !strings.ContainsRune(\"0123456789.\", r)\n}\n"
  },
  {
    "path": "vendor/cloud.google.com/go/storage/acl.go",
    "content": "// Copyright 2014 Google LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage storage\n\nimport (\n\t\"context\"\n\t\"net/http\"\n\t\"reflect\"\n\n\t\"cloud.google.com/go/internal/trace\"\n\t\"google.golang.org/api/googleapi\"\n\traw \"google.golang.org/api/storage/v1\"\n)\n\n// ACLRole is the level of access to grant.\ntype ACLRole string\n\nconst (\n\tRoleOwner  ACLRole = \"OWNER\"\n\tRoleReader ACLRole = \"READER\"\n\tRoleWriter ACLRole = \"WRITER\"\n)\n\n// ACLEntity refers to a user or group.\n// They are sometimes referred to as grantees.\n//\n// It could be in the form of:\n// \"user-<userId>\", \"user-<email>\", \"group-<groupId>\", \"group-<email>\",\n// \"domain-<domain>\" and \"project-team-<projectId>\".\n//\n// Or one of the predefined constants: AllUsers, AllAuthenticatedUsers.\ntype ACLEntity string\n\nconst (\n\tAllUsers              ACLEntity = \"allUsers\"\n\tAllAuthenticatedUsers ACLEntity = \"allAuthenticatedUsers\"\n)\n\n// ACLRule represents a grant for a role to an entity (user, group or team) for a\n// Google Cloud Storage object or bucket.\ntype ACLRule struct {\n\tEntity      ACLEntity\n\tEntityID    string\n\tRole        ACLRole\n\tDomain      string\n\tEmail       string\n\tProjectTeam *ProjectTeam\n}\n\n// ProjectTeam is the project team associated with the entity, if any.\ntype ProjectTeam struct {\n\tProjectNumber string\n\tTeam          string\n}\n\n// ACLHandle provides operations on an access control list for a Google Cloud Storage bucket or object.\ntype ACLHandle struct {\n\tc           *Client\n\tbucket      string\n\tobject      string\n\tisDefault   bool\n\tuserProject string // for requester-pays buckets\n}\n\n// Delete permanently deletes the ACL entry for the given entity.\nfunc (a *ACLHandle) Delete(ctx context.Context, entity ACLEntity) (err error) {\n\tctx = trace.StartSpan(ctx, \"cloud.google.com/go/storage.ACL.Delete\")\n\tdefer func() { trace.EndSpan(ctx, err) }()\n\n\tif a.object != \"\" {\n\t\treturn a.objectDelete(ctx, entity)\n\t}\n\tif a.isDefault {\n\t\treturn a.bucketDefaultDelete(ctx, entity)\n\t}\n\treturn a.bucketDelete(ctx, entity)\n}\n\n// Set sets the role for the given entity.\nfunc (a *ACLHandle) Set(ctx context.Context, entity ACLEntity, role ACLRole) (err error) {\n\tctx = trace.StartSpan(ctx, \"cloud.google.com/go/storage.ACL.Set\")\n\tdefer func() { trace.EndSpan(ctx, err) }()\n\n\tif a.object != \"\" {\n\t\treturn a.objectSet(ctx, entity, role, false)\n\t}\n\tif a.isDefault {\n\t\treturn a.objectSet(ctx, entity, role, true)\n\t}\n\treturn a.bucketSet(ctx, entity, role)\n}\n\n// List retrieves ACL entries.\nfunc (a *ACLHandle) List(ctx context.Context) (rules []ACLRule, err error) {\n\tctx = trace.StartSpan(ctx, \"cloud.google.com/go/storage.ACL.List\")\n\tdefer func() { trace.EndSpan(ctx, err) }()\n\n\tif a.object != \"\" {\n\t\treturn a.objectList(ctx)\n\t}\n\tif a.isDefault {\n\t\treturn a.bucketDefaultList(ctx)\n\t}\n\treturn a.bucketList(ctx)\n}\n\nfunc (a *ACLHandle) bucketDefaultList(ctx context.Context) ([]ACLRule, error) {\n\tvar acls *raw.ObjectAccessControls\n\tvar err error\n\terr = runWithRetry(ctx, func() error {\n\t\treq := a.c.raw.DefaultObjectAccessControls.List(a.bucket)\n\t\ta.configureCall(ctx, req)\n\t\tacls, err = req.Do()\n\t\treturn err\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn toObjectACLRules(acls.Items), nil\n}\n\nfunc (a *ACLHandle) bucketDefaultDelete(ctx context.Context, entity ACLEntity) error {\n\treturn runWithRetry(ctx, func() error {\n\t\treq := a.c.raw.DefaultObjectAccessControls.Delete(a.bucket, string(entity))\n\t\ta.configureCall(ctx, req)\n\t\treturn req.Do()\n\t})\n}\n\nfunc (a *ACLHandle) bucketList(ctx context.Context) ([]ACLRule, error) {\n\tvar acls *raw.BucketAccessControls\n\tvar err error\n\terr = runWithRetry(ctx, func() error {\n\t\treq := a.c.raw.BucketAccessControls.List(a.bucket)\n\t\ta.configureCall(ctx, req)\n\t\tacls, err = req.Do()\n\t\treturn err\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn toBucketACLRules(acls.Items), nil\n}\n\nfunc (a *ACLHandle) bucketSet(ctx context.Context, entity ACLEntity, role ACLRole) error {\n\tacl := &raw.BucketAccessControl{\n\t\tBucket: a.bucket,\n\t\tEntity: string(entity),\n\t\tRole:   string(role),\n\t}\n\terr := runWithRetry(ctx, func() error {\n\t\treq := a.c.raw.BucketAccessControls.Update(a.bucket, string(entity), acl)\n\t\ta.configureCall(ctx, req)\n\t\t_, err := req.Do()\n\t\treturn err\n\t})\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc (a *ACLHandle) bucketDelete(ctx context.Context, entity ACLEntity) error {\n\treturn runWithRetry(ctx, func() error {\n\t\treq := a.c.raw.BucketAccessControls.Delete(a.bucket, string(entity))\n\t\ta.configureCall(ctx, req)\n\t\treturn req.Do()\n\t})\n}\n\nfunc (a *ACLHandle) objectList(ctx context.Context) ([]ACLRule, error) {\n\tvar acls *raw.ObjectAccessControls\n\tvar err error\n\terr = runWithRetry(ctx, func() error {\n\t\treq := a.c.raw.ObjectAccessControls.List(a.bucket, a.object)\n\t\ta.configureCall(ctx, req)\n\t\tacls, err = req.Do()\n\t\treturn err\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn toObjectACLRules(acls.Items), nil\n}\n\nfunc (a *ACLHandle) objectSet(ctx context.Context, entity ACLEntity, role ACLRole, isBucketDefault bool) error {\n\ttype setRequest interface {\n\t\tDo(opts ...googleapi.CallOption) (*raw.ObjectAccessControl, error)\n\t\tHeader() http.Header\n\t}\n\n\tacl := &raw.ObjectAccessControl{\n\t\tBucket: a.bucket,\n\t\tEntity: string(entity),\n\t\tRole:   string(role),\n\t}\n\tvar req setRequest\n\tif isBucketDefault {\n\t\treq = a.c.raw.DefaultObjectAccessControls.Update(a.bucket, string(entity), acl)\n\t} else {\n\t\treq = a.c.raw.ObjectAccessControls.Update(a.bucket, a.object, string(entity), acl)\n\t}\n\ta.configureCall(ctx, req)\n\treturn runWithRetry(ctx, func() error {\n\t\t_, err := req.Do()\n\t\treturn err\n\t})\n}\n\nfunc (a *ACLHandle) objectDelete(ctx context.Context, entity ACLEntity) error {\n\treturn runWithRetry(ctx, func() error {\n\t\treq := a.c.raw.ObjectAccessControls.Delete(a.bucket, a.object, string(entity))\n\t\ta.configureCall(ctx, req)\n\t\treturn req.Do()\n\t})\n}\n\nfunc (a *ACLHandle) configureCall(ctx context.Context, call interface{ Header() http.Header }) {\n\tvc := reflect.ValueOf(call)\n\tvc.MethodByName(\"Context\").Call([]reflect.Value{reflect.ValueOf(ctx)})\n\tif a.userProject != \"\" {\n\t\tvc.MethodByName(\"UserProject\").Call([]reflect.Value{reflect.ValueOf(a.userProject)})\n\t}\n\tsetClientHeader(call.Header())\n}\n\nfunc toObjectACLRules(items []*raw.ObjectAccessControl) []ACLRule {\n\tvar rs []ACLRule\n\tfor _, item := range items {\n\t\trs = append(rs, toObjectACLRule(item))\n\t}\n\treturn rs\n}\n\nfunc toBucketACLRules(items []*raw.BucketAccessControl) []ACLRule {\n\tvar rs []ACLRule\n\tfor _, item := range items {\n\t\trs = append(rs, toBucketACLRule(item))\n\t}\n\treturn rs\n}\n\nfunc toObjectACLRule(a *raw.ObjectAccessControl) ACLRule {\n\treturn ACLRule{\n\t\tEntity:      ACLEntity(a.Entity),\n\t\tEntityID:    a.EntityId,\n\t\tRole:        ACLRole(a.Role),\n\t\tDomain:      a.Domain,\n\t\tEmail:       a.Email,\n\t\tProjectTeam: toObjectProjectTeam(a.ProjectTeam),\n\t}\n}\n\nfunc toBucketACLRule(a *raw.BucketAccessControl) ACLRule {\n\treturn ACLRule{\n\t\tEntity:      ACLEntity(a.Entity),\n\t\tEntityID:    a.EntityId,\n\t\tRole:        ACLRole(a.Role),\n\t\tDomain:      a.Domain,\n\t\tEmail:       a.Email,\n\t\tProjectTeam: toBucketProjectTeam(a.ProjectTeam),\n\t}\n}\n\nfunc toRawObjectACL(rules []ACLRule) []*raw.ObjectAccessControl {\n\tif len(rules) == 0 {\n\t\treturn nil\n\t}\n\tr := make([]*raw.ObjectAccessControl, 0, len(rules))\n\tfor _, rule := range rules {\n\t\tr = append(r, rule.toRawObjectAccessControl(\"\")) // bucket name unnecessary\n\t}\n\treturn r\n}\n\nfunc toRawBucketACL(rules []ACLRule) []*raw.BucketAccessControl {\n\tif len(rules) == 0 {\n\t\treturn nil\n\t}\n\tr := make([]*raw.BucketAccessControl, 0, len(rules))\n\tfor _, rule := range rules {\n\t\tr = append(r, rule.toRawBucketAccessControl(\"\")) // bucket name unnecessary\n\t}\n\treturn r\n}\n\nfunc (r ACLRule) toRawBucketAccessControl(bucket string) *raw.BucketAccessControl {\n\treturn &raw.BucketAccessControl{\n\t\tBucket: bucket,\n\t\tEntity: string(r.Entity),\n\t\tRole:   string(r.Role),\n\t\t// The other fields are not settable.\n\t}\n}\n\nfunc (r ACLRule) toRawObjectAccessControl(bucket string) *raw.ObjectAccessControl {\n\treturn &raw.ObjectAccessControl{\n\t\tBucket: bucket,\n\t\tEntity: string(r.Entity),\n\t\tRole:   string(r.Role),\n\t\t// The other fields are not settable.\n\t}\n}\n\nfunc toBucketProjectTeam(p *raw.BucketAccessControlProjectTeam) *ProjectTeam {\n\tif p == nil {\n\t\treturn nil\n\t}\n\treturn &ProjectTeam{\n\t\tProjectNumber: p.ProjectNumber,\n\t\tTeam:          p.Team,\n\t}\n}\n\nfunc toObjectProjectTeam(p *raw.ObjectAccessControlProjectTeam) *ProjectTeam {\n\tif p == nil {\n\t\treturn nil\n\t}\n\treturn &ProjectTeam{\n\t\tProjectNumber: p.ProjectNumber,\n\t\tTeam:          p.Team,\n\t}\n}\n"
  },
  {
    "path": "vendor/cloud.google.com/go/storage/bucket.go",
    "content": "// Copyright 2014 Google LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage storage\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"reflect\"\n\t\"time\"\n\n\t\"cloud.google.com/go/internal/optional\"\n\t\"cloud.google.com/go/internal/trace\"\n\t\"google.golang.org/api/googleapi\"\n\t\"google.golang.org/api/iterator\"\n\traw \"google.golang.org/api/storage/v1\"\n)\n\n// BucketHandle provides operations on a Google Cloud Storage bucket.\n// Use Client.Bucket to get a handle.\ntype BucketHandle struct {\n\tc                *Client\n\tname             string\n\tacl              ACLHandle\n\tdefaultObjectACL ACLHandle\n\tconds            *BucketConditions\n\tuserProject      string // project for Requester Pays buckets\n}\n\n// Bucket returns a BucketHandle, which provides operations on the named bucket.\n// This call does not perform any network operations.\n//\n// The supplied name must contain only lowercase letters, numbers, dashes,\n// underscores, and dots. The full specification for valid bucket names can be\n// found at:\n//   https://cloud.google.com/storage/docs/bucket-naming\nfunc (c *Client) Bucket(name string) *BucketHandle {\n\treturn &BucketHandle{\n\t\tc:    c,\n\t\tname: name,\n\t\tacl: ACLHandle{\n\t\t\tc:      c,\n\t\t\tbucket: name,\n\t\t},\n\t\tdefaultObjectACL: ACLHandle{\n\t\t\tc:         c,\n\t\t\tbucket:    name,\n\t\t\tisDefault: true,\n\t\t},\n\t}\n}\n\n// Create creates the Bucket in the project.\n// If attrs is nil the API defaults will be used.\nfunc (b *BucketHandle) Create(ctx context.Context, projectID string, attrs *BucketAttrs) (err error) {\n\tctx = trace.StartSpan(ctx, \"cloud.google.com/go/storage.Bucket.Create\")\n\tdefer func() { trace.EndSpan(ctx, err) }()\n\n\tvar bkt *raw.Bucket\n\tif attrs != nil {\n\t\tbkt = attrs.toRawBucket()\n\t} else {\n\t\tbkt = &raw.Bucket{}\n\t}\n\tbkt.Name = b.name\n\t// If there is lifecycle information but no location, explicitly set\n\t// the location. This is a GCS quirk/bug.\n\tif bkt.Location == \"\" && bkt.Lifecycle != nil {\n\t\tbkt.Location = \"US\"\n\t}\n\treq := b.c.raw.Buckets.Insert(projectID, bkt)\n\tsetClientHeader(req.Header())\n\tif attrs != nil && attrs.PredefinedACL != \"\" {\n\t\treq.PredefinedAcl(attrs.PredefinedACL)\n\t}\n\tif attrs != nil && attrs.PredefinedDefaultObjectACL != \"\" {\n\t\treq.PredefinedDefaultObjectAcl(attrs.PredefinedDefaultObjectACL)\n\t}\n\treturn runWithRetry(ctx, func() error { _, err := req.Context(ctx).Do(); return err })\n}\n\n// Delete deletes the Bucket.\nfunc (b *BucketHandle) Delete(ctx context.Context) (err error) {\n\tctx = trace.StartSpan(ctx, \"cloud.google.com/go/storage.Bucket.Delete\")\n\tdefer func() { trace.EndSpan(ctx, err) }()\n\n\treq, err := b.newDeleteCall()\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn runWithRetry(ctx, func() error { return req.Context(ctx).Do() })\n}\n\nfunc (b *BucketHandle) newDeleteCall() (*raw.BucketsDeleteCall, error) {\n\treq := b.c.raw.Buckets.Delete(b.name)\n\tsetClientHeader(req.Header())\n\tif err := applyBucketConds(\"BucketHandle.Delete\", b.conds, req); err != nil {\n\t\treturn nil, err\n\t}\n\tif b.userProject != \"\" {\n\t\treq.UserProject(b.userProject)\n\t}\n\treturn req, nil\n}\n\n// ACL returns an ACLHandle, which provides access to the bucket's access control list.\n// This controls who can list, create or overwrite the objects in a bucket.\n// This call does not perform any network operations.\nfunc (b *BucketHandle) ACL() *ACLHandle {\n\treturn &b.acl\n}\n\n// DefaultObjectACL returns an ACLHandle, which provides access to the bucket's default object ACLs.\n// These ACLs are applied to newly created objects in this bucket that do not have a defined ACL.\n// This call does not perform any network operations.\nfunc (b *BucketHandle) DefaultObjectACL() *ACLHandle {\n\treturn &b.defaultObjectACL\n}\n\n// Object returns an ObjectHandle, which provides operations on the named object.\n// This call does not perform any network operations.\n//\n// name must consist entirely of valid UTF-8-encoded runes. The full specification\n// for valid object names can be found at:\n//   https://cloud.google.com/storage/docs/bucket-naming\nfunc (b *BucketHandle) Object(name string) *ObjectHandle {\n\treturn &ObjectHandle{\n\t\tc:      b.c,\n\t\tbucket: b.name,\n\t\tobject: name,\n\t\tacl: ACLHandle{\n\t\t\tc:           b.c,\n\t\t\tbucket:      b.name,\n\t\t\tobject:      name,\n\t\t\tuserProject: b.userProject,\n\t\t},\n\t\tgen:         -1,\n\t\tuserProject: b.userProject,\n\t}\n}\n\n// Attrs returns the metadata for the bucket.\nfunc (b *BucketHandle) Attrs(ctx context.Context) (attrs *BucketAttrs, err error) {\n\tctx = trace.StartSpan(ctx, \"cloud.google.com/go/storage.Bucket.Attrs\")\n\tdefer func() { trace.EndSpan(ctx, err) }()\n\n\treq, err := b.newGetCall()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tvar resp *raw.Bucket\n\terr = runWithRetry(ctx, func() error {\n\t\tresp, err = req.Context(ctx).Do()\n\t\treturn err\n\t})\n\tif e, ok := err.(*googleapi.Error); ok && e.Code == http.StatusNotFound {\n\t\treturn nil, ErrBucketNotExist\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn newBucket(resp)\n}\n\nfunc (b *BucketHandle) newGetCall() (*raw.BucketsGetCall, error) {\n\treq := b.c.raw.Buckets.Get(b.name).Projection(\"full\")\n\tsetClientHeader(req.Header())\n\tif err := applyBucketConds(\"BucketHandle.Attrs\", b.conds, req); err != nil {\n\t\treturn nil, err\n\t}\n\tif b.userProject != \"\" {\n\t\treq.UserProject(b.userProject)\n\t}\n\treturn req, nil\n}\n\n// Update updates a bucket's attributes.\nfunc (b *BucketHandle) Update(ctx context.Context, uattrs BucketAttrsToUpdate) (attrs *BucketAttrs, err error) {\n\tctx = trace.StartSpan(ctx, \"cloud.google.com/go/storage.Bucket.Create\")\n\tdefer func() { trace.EndSpan(ctx, err) }()\n\n\treq, err := b.newPatchCall(&uattrs)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif uattrs.PredefinedACL != \"\" {\n\t\treq.PredefinedAcl(uattrs.PredefinedACL)\n\t}\n\tif uattrs.PredefinedDefaultObjectACL != \"\" {\n\t\treq.PredefinedDefaultObjectAcl(uattrs.PredefinedDefaultObjectACL)\n\t}\n\t// TODO(jba): retry iff metagen is set?\n\trb, err := req.Context(ctx).Do()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn newBucket(rb)\n}\n\nfunc (b *BucketHandle) newPatchCall(uattrs *BucketAttrsToUpdate) (*raw.BucketsPatchCall, error) {\n\trb := uattrs.toRawBucket()\n\treq := b.c.raw.Buckets.Patch(b.name, rb).Projection(\"full\")\n\tsetClientHeader(req.Header())\n\tif err := applyBucketConds(\"BucketHandle.Update\", b.conds, req); err != nil {\n\t\treturn nil, err\n\t}\n\tif b.userProject != \"\" {\n\t\treq.UserProject(b.userProject)\n\t}\n\treturn req, nil\n}\n\n// BucketAttrs represents the metadata for a Google Cloud Storage bucket.\n// Read-only fields are ignored by BucketHandle.Create.\ntype BucketAttrs struct {\n\t// Name is the name of the bucket.\n\t// This field is read-only.\n\tName string\n\n\t// ACL is the list of access control rules on the bucket.\n\tACL []ACLRule\n\n\t// BucketPolicyOnly configures access checks to use only bucket-level IAM\n\t// policies.\n\tBucketPolicyOnly BucketPolicyOnly\n\n\t// DefaultObjectACL is the list of access controls to\n\t// apply to new objects when no object ACL is provided.\n\tDefaultObjectACL []ACLRule\n\n\t// DefaultEventBasedHold is the default value for event-based hold on\n\t// newly created objects in this bucket. It defaults to false.\n\tDefaultEventBasedHold bool\n\n\t// If not empty, applies a predefined set of access controls. It should be set\n\t// only when creating a bucket.\n\t// It is always empty for BucketAttrs returned from the service.\n\t// See https://cloud.google.com/storage/docs/json_api/v1/buckets/insert\n\t// for valid values.\n\tPredefinedACL string\n\n\t// If not empty, applies a predefined set of default object access controls.\n\t// It should be set only when creating a bucket.\n\t// It is always empty for BucketAttrs returned from the service.\n\t// See https://cloud.google.com/storage/docs/json_api/v1/buckets/insert\n\t// for valid values.\n\tPredefinedDefaultObjectACL string\n\n\t// Location is the location of the bucket. It defaults to \"US\".\n\tLocation string\n\n\t// MetaGeneration is the metadata generation of the bucket.\n\t// This field is read-only.\n\tMetaGeneration int64\n\n\t// StorageClass is the default storage class of the bucket. This defines\n\t// how objects in the bucket are stored and determines the SLA\n\t// and the cost of storage. Typical values are \"MULTI_REGIONAL\",\n\t// \"REGIONAL\", \"NEARLINE\", \"COLDLINE\", \"STANDARD\" and\n\t// \"DURABLE_REDUCED_AVAILABILITY\". Defaults to \"STANDARD\", which\n\t// is equivalent to \"MULTI_REGIONAL\" or \"REGIONAL\" depending on\n\t// the bucket's location settings.\n\tStorageClass string\n\n\t// Created is the creation time of the bucket.\n\t// This field is read-only.\n\tCreated time.Time\n\n\t// VersioningEnabled reports whether this bucket has versioning enabled.\n\tVersioningEnabled bool\n\n\t// Labels are the bucket's labels.\n\tLabels map[string]string\n\n\t// RequesterPays reports whether the bucket is a Requester Pays bucket.\n\t// Clients performing operations on Requester Pays buckets must provide\n\t// a user project (see BucketHandle.UserProject), which will be billed\n\t// for the operations.\n\tRequesterPays bool\n\n\t// Lifecycle is the lifecycle configuration for objects in the bucket.\n\tLifecycle Lifecycle\n\n\t// Retention policy enforces a minimum retention time for all objects\n\t// contained in the bucket. A RetentionPolicy of nil implies the bucket\n\t// has no minimum data retention.\n\t//\n\t// This feature is in private alpha release. It is not currently available to\n\t// most customers. It might be changed in backwards-incompatible ways and is not\n\t// subject to any SLA or deprecation policy.\n\tRetentionPolicy *RetentionPolicy\n\n\t// The bucket's Cross-Origin Resource Sharing (CORS) configuration.\n\tCORS []CORS\n\n\t// The encryption configuration used by default for newly inserted objects.\n\tEncryption *BucketEncryption\n\n\t// The logging configuration.\n\tLogging *BucketLogging\n\n\t// The website configuration.\n\tWebsite *BucketWebsite\n\n\t// Etag is the HTTP/1.1 Entity tag for the bucket.\n\t// This field is read-only.\n\tEtag string\n}\n\n// BucketPolicyOnly configures access checks to use only bucket-level IAM\n// policies.\ntype BucketPolicyOnly struct {\n\t// Enabled specifies whether access checks use only bucket-level IAM\n\t// policies. Enabled may be disabled until the locked time.\n\tEnabled bool\n\t// LockedTime specifies the deadline for changing Enabled from true to\n\t// false.\n\tLockedTime time.Time\n}\n\n// Lifecycle is the lifecycle configuration for objects in the bucket.\ntype Lifecycle struct {\n\tRules []LifecycleRule\n}\n\n// RetentionPolicy enforces a minimum retention time for all objects\n// contained in the bucket.\n//\n// Any attempt to overwrite or delete objects younger than the retention\n// period will result in an error. An unlocked retention policy can be\n// modified or removed from the bucket via the Update method. A\n// locked retention policy cannot be removed or shortened in duration\n// for the lifetime of the bucket.\n//\n// This feature is in private alpha release. It is not currently available to\n// most customers. It might be changed in backwards-incompatible ways and is not\n// subject to any SLA or deprecation policy.\ntype RetentionPolicy struct {\n\t// RetentionPeriod specifies the duration that objects need to be\n\t// retained. Retention duration must be greater than zero and less than\n\t// 100 years. Note that enforcement of retention periods less than a day\n\t// is not guaranteed. Such periods should only be used for testing\n\t// purposes.\n\tRetentionPeriod time.Duration\n\n\t// EffectiveTime is the time from which the policy was enforced and\n\t// effective. This field is read-only.\n\tEffectiveTime time.Time\n\n\t// IsLocked describes whether the bucket is locked. Once locked, an\n\t// object retention policy cannot be modified.\n\t// This field is read-only.\n\tIsLocked bool\n}\n\nconst (\n\t// RFC3339 date with only the date segment, used for CreatedBefore in LifecycleRule.\n\trfc3339Date = \"2006-01-02\"\n\n\t// DeleteAction is a lifecycle action that deletes a live and/or archived\n\t// objects. Takes precedence over SetStorageClass actions.\n\tDeleteAction = \"Delete\"\n\n\t// SetStorageClassAction changes the storage class of live and/or archived\n\t// objects.\n\tSetStorageClassAction = \"SetStorageClass\"\n)\n\n// LifecycleRule is a lifecycle configuration rule.\n//\n// When all the configured conditions are met by an object in the bucket, the\n// configured action will automatically be taken on that object.\ntype LifecycleRule struct {\n\t// Action is the action to take when all of the associated conditions are\n\t// met.\n\tAction LifecycleAction\n\n\t// Condition is the set of conditions that must be met for the associated\n\t// action to be taken.\n\tCondition LifecycleCondition\n}\n\n// LifecycleAction is a lifecycle configuration action.\ntype LifecycleAction struct {\n\t// Type is the type of action to take on matching objects.\n\t//\n\t// Acceptable values are \"Delete\" to delete matching objects and\n\t// \"SetStorageClass\" to set the storage class defined in StorageClass on\n\t// matching objects.\n\tType string\n\n\t// StorageClass is the storage class to set on matching objects if the Action\n\t// is \"SetStorageClass\".\n\tStorageClass string\n}\n\n// Liveness specifies whether the object is live or not.\ntype Liveness int\n\nconst (\n\t// LiveAndArchived includes both live and archived objects.\n\tLiveAndArchived Liveness = iota\n\t// Live specifies that the object is still live.\n\tLive\n\t// Archived specifies that the object is archived.\n\tArchived\n)\n\n// LifecycleCondition is a set of conditions used to match objects and take an\n// action automatically.\n//\n// All configured conditions must be met for the associated action to be taken.\ntype LifecycleCondition struct {\n\t// AgeInDays is the age of the object in days.\n\tAgeInDays int64\n\n\t// CreatedBefore is the time the object was created.\n\t//\n\t// This condition is satisfied when an object is created before midnight of\n\t// the specified date in UTC.\n\tCreatedBefore time.Time\n\n\t// Liveness specifies the object's liveness. Relevant only for versioned objects\n\tLiveness Liveness\n\n\t// MatchesStorageClasses is the condition matching the object's storage\n\t// class.\n\t//\n\t// Values include \"MULTI_REGIONAL\", \"REGIONAL\", \"NEARLINE\", \"COLDLINE\",\n\t// \"STANDARD\", and \"DURABLE_REDUCED_AVAILABILITY\".\n\tMatchesStorageClasses []string\n\n\t// NumNewerVersions is the condition matching objects with a number of newer versions.\n\t//\n\t// If the value is N, this condition is satisfied when there are at least N\n\t// versions (including the live version) newer than this version of the\n\t// object.\n\tNumNewerVersions int64\n}\n\n// BucketLogging holds the bucket's logging configuration, which defines the\n// destination bucket and optional name prefix for the current bucket's\n// logs.\ntype BucketLogging struct {\n\t// The destination bucket where the current bucket's logs\n\t// should be placed.\n\tLogBucket string\n\n\t// A prefix for log object names.\n\tLogObjectPrefix string\n}\n\n// BucketWebsite holds the bucket's website configuration, controlling how the\n// service behaves when accessing bucket contents as a web site. See\n// https://cloud.google.com/storage/docs/static-website for more information.\ntype BucketWebsite struct {\n\t// If the requested object path is missing, the service will ensure the path has\n\t// a trailing '/', append this suffix, and attempt to retrieve the resulting\n\t// object. This allows the creation of index.html objects to represent directory\n\t// pages.\n\tMainPageSuffix string\n\n\t// If the requested object path is missing, and any mainPageSuffix object is\n\t// missing, if applicable, the service will return the named object from this\n\t// bucket as the content for a 404 Not Found result.\n\tNotFoundPage string\n}\n\nfunc newBucket(b *raw.Bucket) (*BucketAttrs, error) {\n\tif b == nil {\n\t\treturn nil, nil\n\t}\n\trp, err := toRetentionPolicy(b.RetentionPolicy)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &BucketAttrs{\n\t\tName:                  b.Name,\n\t\tLocation:              b.Location,\n\t\tMetaGeneration:        b.Metageneration,\n\t\tDefaultEventBasedHold: b.DefaultEventBasedHold,\n\t\tStorageClass:          b.StorageClass,\n\t\tCreated:               convertTime(b.TimeCreated),\n\t\tVersioningEnabled:     b.Versioning != nil && b.Versioning.Enabled,\n\t\tACL:                   toBucketACLRules(b.Acl),\n\t\tDefaultObjectACL:      toObjectACLRules(b.DefaultObjectAcl),\n\t\tLabels:                b.Labels,\n\t\tRequesterPays:         b.Billing != nil && b.Billing.RequesterPays,\n\t\tLifecycle:             toLifecycle(b.Lifecycle),\n\t\tRetentionPolicy:       rp,\n\t\tCORS:                  toCORS(b.Cors),\n\t\tEncryption:            toBucketEncryption(b.Encryption),\n\t\tLogging:               toBucketLogging(b.Logging),\n\t\tWebsite:               toBucketWebsite(b.Website),\n\t\tBucketPolicyOnly:      toBucketPolicyOnly(b.IamConfiguration),\n\t\tEtag:                  b.Etag,\n\t}, nil\n}\n\n// toRawBucket copies the editable attribute from b to the raw library's Bucket type.\nfunc (b *BucketAttrs) toRawBucket() *raw.Bucket {\n\t// Copy label map.\n\tvar labels map[string]string\n\tif len(b.Labels) > 0 {\n\t\tlabels = make(map[string]string, len(b.Labels))\n\t\tfor k, v := range b.Labels {\n\t\t\tlabels[k] = v\n\t\t}\n\t}\n\t// Ignore VersioningEnabled if it is false. This is OK because\n\t// we only call this method when creating a bucket, and by default\n\t// new buckets have versioning off.\n\tvar v *raw.BucketVersioning\n\tif b.VersioningEnabled {\n\t\tv = &raw.BucketVersioning{Enabled: true}\n\t}\n\tvar bb *raw.BucketBilling\n\tif b.RequesterPays {\n\t\tbb = &raw.BucketBilling{RequesterPays: true}\n\t}\n\tvar bktIAM *raw.BucketIamConfiguration\n\tif b.BucketPolicyOnly.Enabled {\n\t\tbktIAM = &raw.BucketIamConfiguration{\n\t\t\tBucketPolicyOnly: &raw.BucketIamConfigurationBucketPolicyOnly{\n\t\t\t\tEnabled: true,\n\t\t\t},\n\t\t}\n\t}\n\treturn &raw.Bucket{\n\t\tName:             b.Name,\n\t\tLocation:         b.Location,\n\t\tStorageClass:     b.StorageClass,\n\t\tAcl:              toRawBucketACL(b.ACL),\n\t\tDefaultObjectAcl: toRawObjectACL(b.DefaultObjectACL),\n\t\tVersioning:       v,\n\t\tLabels:           labels,\n\t\tBilling:          bb,\n\t\tLifecycle:        toRawLifecycle(b.Lifecycle),\n\t\tRetentionPolicy:  b.RetentionPolicy.toRawRetentionPolicy(),\n\t\tCors:             toRawCORS(b.CORS),\n\t\tEncryption:       b.Encryption.toRawBucketEncryption(),\n\t\tLogging:          b.Logging.toRawBucketLogging(),\n\t\tWebsite:          b.Website.toRawBucketWebsite(),\n\t\tIamConfiguration: bktIAM,\n\t}\n}\n\n// CORS is the bucket's Cross-Origin Resource Sharing (CORS) configuration.\ntype CORS struct {\n\t// MaxAge is the value to return in the Access-Control-Max-Age\n\t// header used in preflight responses.\n\tMaxAge time.Duration\n\n\t// Methods is the list of HTTP methods on which to include CORS response\n\t// headers, (GET, OPTIONS, POST, etc) Note: \"*\" is permitted in the list\n\t// of methods, and means \"any method\".\n\tMethods []string\n\n\t// Origins is the list of Origins eligible to receive CORS response\n\t// headers. Note: \"*\" is permitted in the list of origins, and means\n\t// \"any Origin\".\n\tOrigins []string\n\n\t// ResponseHeaders is the list of HTTP headers other than the simple\n\t// response headers to give permission for the user-agent to share\n\t// across domains.\n\tResponseHeaders []string\n}\n\n// BucketEncryption is a bucket's encryption configuration.\ntype BucketEncryption struct {\n\t// A Cloud KMS key name, in the form\n\t// projects/P/locations/L/keyRings/R/cryptoKeys/K, that will be used to encrypt\n\t// objects inserted into this bucket, if no encryption method is specified.\n\t// The key's location must be the same as the bucket's.\n\tDefaultKMSKeyName string\n}\n\n// BucketAttrsToUpdate define the attributes to update during an Update call.\ntype BucketAttrsToUpdate struct {\n\t// If set, updates whether the bucket uses versioning.\n\tVersioningEnabled optional.Bool\n\n\t// If set, updates whether the bucket is a Requester Pays bucket.\n\tRequesterPays optional.Bool\n\n\t// DefaultEventBasedHold is the default value for event-based hold on\n\t// newly created objects in this bucket.\n\tDefaultEventBasedHold optional.Bool\n\n\t// BucketPolicyOnly configures access checks to use only bucket-level IAM\n\t// policies.\n\tBucketPolicyOnly *BucketPolicyOnly\n\n\t// If set, updates the retention policy of the bucket. Using\n\t// RetentionPolicy.RetentionPeriod = 0 will delete the existing policy.\n\t//\n\t// This feature is in private alpha release. It is not currently available to\n\t// most customers. It might be changed in backwards-incompatible ways and is not\n\t// subject to any SLA or deprecation policy.\n\tRetentionPolicy *RetentionPolicy\n\n\t// If set, replaces the CORS configuration with a new configuration.\n\t// An empty (rather than nil) slice causes all CORS policies to be removed.\n\tCORS []CORS\n\n\t// If set, replaces the encryption configuration of the bucket. Using\n\t// BucketEncryption.DefaultKMSKeyName = \"\" will delete the existing\n\t// configuration.\n\tEncryption *BucketEncryption\n\n\t// If set, replaces the lifecycle configuration of the bucket.\n\tLifecycle *Lifecycle\n\n\t// If set, replaces the logging configuration of the bucket.\n\tLogging *BucketLogging\n\n\t// If set, replaces the website configuration of the bucket.\n\tWebsite *BucketWebsite\n\n\t// If not empty, applies a predefined set of access controls.\n\t// See https://cloud.google.com/storage/docs/json_api/v1/buckets/patch.\n\tPredefinedACL string\n\n\t// If not empty, applies a predefined set of default object access controls.\n\t// See https://cloud.google.com/storage/docs/json_api/v1/buckets/patch.\n\tPredefinedDefaultObjectACL string\n\n\tsetLabels    map[string]string\n\tdeleteLabels map[string]bool\n}\n\n// SetLabel causes a label to be added or modified when ua is used\n// in a call to Bucket.Update.\nfunc (ua *BucketAttrsToUpdate) SetLabel(name, value string) {\n\tif ua.setLabels == nil {\n\t\tua.setLabels = map[string]string{}\n\t}\n\tua.setLabels[name] = value\n}\n\n// DeleteLabel causes a label to be deleted when ua is used in a\n// call to Bucket.Update.\nfunc (ua *BucketAttrsToUpdate) DeleteLabel(name string) {\n\tif ua.deleteLabels == nil {\n\t\tua.deleteLabels = map[string]bool{}\n\t}\n\tua.deleteLabels[name] = true\n}\n\nfunc (ua *BucketAttrsToUpdate) toRawBucket() *raw.Bucket {\n\trb := &raw.Bucket{}\n\tif ua.CORS != nil {\n\t\trb.Cors = toRawCORS(ua.CORS)\n\t\trb.ForceSendFields = append(rb.ForceSendFields, \"Cors\")\n\t}\n\tif ua.DefaultEventBasedHold != nil {\n\t\trb.DefaultEventBasedHold = optional.ToBool(ua.DefaultEventBasedHold)\n\t\trb.ForceSendFields = append(rb.ForceSendFields, \"DefaultEventBasedHold\")\n\t}\n\tif ua.RetentionPolicy != nil {\n\t\tif ua.RetentionPolicy.RetentionPeriod == 0 {\n\t\t\trb.NullFields = append(rb.NullFields, \"RetentionPolicy\")\n\t\t\trb.RetentionPolicy = nil\n\t\t} else {\n\t\t\trb.RetentionPolicy = ua.RetentionPolicy.toRawRetentionPolicy()\n\t\t}\n\t}\n\tif ua.VersioningEnabled != nil {\n\t\trb.Versioning = &raw.BucketVersioning{\n\t\t\tEnabled:         optional.ToBool(ua.VersioningEnabled),\n\t\t\tForceSendFields: []string{\"Enabled\"},\n\t\t}\n\t}\n\tif ua.RequesterPays != nil {\n\t\trb.Billing = &raw.BucketBilling{\n\t\t\tRequesterPays:   optional.ToBool(ua.RequesterPays),\n\t\t\tForceSendFields: []string{\"RequesterPays\"},\n\t\t}\n\t}\n\tif ua.BucketPolicyOnly != nil {\n\t\trb.IamConfiguration = &raw.BucketIamConfiguration{\n\t\t\tBucketPolicyOnly: &raw.BucketIamConfigurationBucketPolicyOnly{\n\t\t\t\tEnabled: ua.BucketPolicyOnly.Enabled,\n\t\t\t},\n\t\t}\n\t}\n\tif ua.Encryption != nil {\n\t\tif ua.Encryption.DefaultKMSKeyName == \"\" {\n\t\t\trb.NullFields = append(rb.NullFields, \"Encryption\")\n\t\t\trb.Encryption = nil\n\t\t} else {\n\t\t\trb.Encryption = ua.Encryption.toRawBucketEncryption()\n\t\t}\n\t}\n\tif ua.Lifecycle != nil {\n\t\trb.Lifecycle = toRawLifecycle(*ua.Lifecycle)\n\t}\n\tif ua.Logging != nil {\n\t\tif *ua.Logging == (BucketLogging{}) {\n\t\t\trb.NullFields = append(rb.NullFields, \"Logging\")\n\t\t\trb.Logging = nil\n\t\t} else {\n\t\t\trb.Logging = ua.Logging.toRawBucketLogging()\n\t\t}\n\t}\n\tif ua.Website != nil {\n\t\tif *ua.Website == (BucketWebsite{}) {\n\t\t\trb.NullFields = append(rb.NullFields, \"Website\")\n\t\t\trb.Website = nil\n\t\t} else {\n\t\t\trb.Website = ua.Website.toRawBucketWebsite()\n\t\t}\n\t}\n\tif ua.PredefinedACL != \"\" {\n\t\t// Clear ACL or the call will fail.\n\t\trb.Acl = nil\n\t\trb.ForceSendFields = append(rb.ForceSendFields, \"Acl\")\n\t}\n\tif ua.PredefinedDefaultObjectACL != \"\" {\n\t\t// Clear ACLs or the call will fail.\n\t\trb.DefaultObjectAcl = nil\n\t\trb.ForceSendFields = append(rb.ForceSendFields, \"DefaultObjectAcl\")\n\t}\n\tif ua.setLabels != nil || ua.deleteLabels != nil {\n\t\trb.Labels = map[string]string{}\n\t\tfor k, v := range ua.setLabels {\n\t\t\trb.Labels[k] = v\n\t\t}\n\t\tif len(rb.Labels) == 0 && len(ua.deleteLabels) > 0 {\n\t\t\trb.ForceSendFields = append(rb.ForceSendFields, \"Labels\")\n\t\t}\n\t\tfor l := range ua.deleteLabels {\n\t\t\trb.NullFields = append(rb.NullFields, \"Labels.\"+l)\n\t\t}\n\t}\n\treturn rb\n}\n\n// If returns a new BucketHandle that applies a set of preconditions.\n// Preconditions already set on the BucketHandle are ignored.\n// Operations on the new handle will return an error if the preconditions are not\n// satisfied. The only valid preconditions for buckets are MetagenerationMatch\n// and MetagenerationNotMatch.\nfunc (b *BucketHandle) If(conds BucketConditions) *BucketHandle {\n\tb2 := *b\n\tb2.conds = &conds\n\treturn &b2\n}\n\n// BucketConditions constrain bucket methods to act on specific metagenerations.\n//\n// The zero value is an empty set of constraints.\ntype BucketConditions struct {\n\t// MetagenerationMatch specifies that the bucket must have the given\n\t// metageneration for the operation to occur.\n\t// If MetagenerationMatch is zero, it has no effect.\n\tMetagenerationMatch int64\n\n\t// MetagenerationNotMatch specifies that the bucket must not have the given\n\t// metageneration for the operation to occur.\n\t// If MetagenerationNotMatch is zero, it has no effect.\n\tMetagenerationNotMatch int64\n}\n\nfunc (c *BucketConditions) validate(method string) error {\n\tif *c == (BucketConditions{}) {\n\t\treturn fmt.Errorf(\"storage: %s: empty conditions\", method)\n\t}\n\tif c.MetagenerationMatch != 0 && c.MetagenerationNotMatch != 0 {\n\t\treturn fmt.Errorf(\"storage: %s: multiple conditions specified for metageneration\", method)\n\t}\n\treturn nil\n}\n\n// UserProject returns a new BucketHandle that passes the project ID as the user\n// project for all subsequent calls. Calls with a user project will be billed to that\n// project rather than to the bucket's owning project.\n//\n// A user project is required for all operations on Requester Pays buckets.\nfunc (b *BucketHandle) UserProject(projectID string) *BucketHandle {\n\tb2 := *b\n\tb2.userProject = projectID\n\tb2.acl.userProject = projectID\n\tb2.defaultObjectACL.userProject = projectID\n\treturn &b2\n}\n\n// LockRetentionPolicy locks a bucket's retention policy until a previously-configured\n// RetentionPeriod past the EffectiveTime. Note that if RetentionPeriod is set to less\n// than a day, the retention policy is treated as a development configuration and locking\n// will have no effect. The BucketHandle must have a metageneration condition that\n// matches the bucket's metageneration. See BucketHandle.If.\n//\n// This feature is in private alpha release. It is not currently available to\n// most customers. It might be changed in backwards-incompatible ways and is not\n// subject to any SLA or deprecation policy.\nfunc (b *BucketHandle) LockRetentionPolicy(ctx context.Context) error {\n\tvar metageneration int64\n\tif b.conds != nil {\n\t\tmetageneration = b.conds.MetagenerationMatch\n\t}\n\treq := b.c.raw.Buckets.LockRetentionPolicy(b.name, metageneration)\n\t_, err := req.Context(ctx).Do()\n\treturn err\n}\n\n// applyBucketConds modifies the provided call using the conditions in conds.\n// call is something that quacks like a *raw.WhateverCall.\nfunc applyBucketConds(method string, conds *BucketConditions, call interface{}) error {\n\tif conds == nil {\n\t\treturn nil\n\t}\n\tif err := conds.validate(method); err != nil {\n\t\treturn err\n\t}\n\tcval := reflect.ValueOf(call)\n\tswitch {\n\tcase conds.MetagenerationMatch != 0:\n\t\tif !setConditionField(cval, \"IfMetagenerationMatch\", conds.MetagenerationMatch) {\n\t\t\treturn fmt.Errorf(\"storage: %s: ifMetagenerationMatch not supported\", method)\n\t\t}\n\tcase conds.MetagenerationNotMatch != 0:\n\t\tif !setConditionField(cval, \"IfMetagenerationNotMatch\", conds.MetagenerationNotMatch) {\n\t\t\treturn fmt.Errorf(\"storage: %s: ifMetagenerationNotMatch not supported\", method)\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (rp *RetentionPolicy) toRawRetentionPolicy() *raw.BucketRetentionPolicy {\n\tif rp == nil {\n\t\treturn nil\n\t}\n\treturn &raw.BucketRetentionPolicy{\n\t\tRetentionPeriod: int64(rp.RetentionPeriod / time.Second),\n\t}\n}\n\nfunc toRetentionPolicy(rp *raw.BucketRetentionPolicy) (*RetentionPolicy, error) {\n\tif rp == nil {\n\t\treturn nil, nil\n\t}\n\tt, err := time.Parse(time.RFC3339, rp.EffectiveTime)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &RetentionPolicy{\n\t\tRetentionPeriod: time.Duration(rp.RetentionPeriod) * time.Second,\n\t\tEffectiveTime:   t,\n\t\tIsLocked:        rp.IsLocked,\n\t}, nil\n}\n\nfunc toRawCORS(c []CORS) []*raw.BucketCors {\n\tvar out []*raw.BucketCors\n\tfor _, v := range c {\n\t\tout = append(out, &raw.BucketCors{\n\t\t\tMaxAgeSeconds:  int64(v.MaxAge / time.Second),\n\t\t\tMethod:         v.Methods,\n\t\t\tOrigin:         v.Origins,\n\t\t\tResponseHeader: v.ResponseHeaders,\n\t\t})\n\t}\n\treturn out\n}\n\nfunc toCORS(rc []*raw.BucketCors) []CORS {\n\tvar out []CORS\n\tfor _, v := range rc {\n\t\tout = append(out, CORS{\n\t\t\tMaxAge:          time.Duration(v.MaxAgeSeconds) * time.Second,\n\t\t\tMethods:         v.Method,\n\t\t\tOrigins:         v.Origin,\n\t\t\tResponseHeaders: v.ResponseHeader,\n\t\t})\n\t}\n\treturn out\n}\n\nfunc toRawLifecycle(l Lifecycle) *raw.BucketLifecycle {\n\tvar rl raw.BucketLifecycle\n\tif len(l.Rules) == 0 {\n\t\treturn nil\n\t}\n\tfor _, r := range l.Rules {\n\t\trr := &raw.BucketLifecycleRule{\n\t\t\tAction: &raw.BucketLifecycleRuleAction{\n\t\t\t\tType:         r.Action.Type,\n\t\t\t\tStorageClass: r.Action.StorageClass,\n\t\t\t},\n\t\t\tCondition: &raw.BucketLifecycleRuleCondition{\n\t\t\t\tAge:                 r.Condition.AgeInDays,\n\t\t\t\tMatchesStorageClass: r.Condition.MatchesStorageClasses,\n\t\t\t\tNumNewerVersions:    r.Condition.NumNewerVersions,\n\t\t\t},\n\t\t}\n\n\t\tswitch r.Condition.Liveness {\n\t\tcase LiveAndArchived:\n\t\t\trr.Condition.IsLive = nil\n\t\tcase Live:\n\t\t\trr.Condition.IsLive = googleapi.Bool(true)\n\t\tcase Archived:\n\t\t\trr.Condition.IsLive = googleapi.Bool(false)\n\t\t}\n\n\t\tif !r.Condition.CreatedBefore.IsZero() {\n\t\t\trr.Condition.CreatedBefore = r.Condition.CreatedBefore.Format(rfc3339Date)\n\t\t}\n\t\trl.Rule = append(rl.Rule, rr)\n\t}\n\treturn &rl\n}\n\nfunc toLifecycle(rl *raw.BucketLifecycle) Lifecycle {\n\tvar l Lifecycle\n\tif rl == nil {\n\t\treturn l\n\t}\n\tfor _, rr := range rl.Rule {\n\t\tr := LifecycleRule{\n\t\t\tAction: LifecycleAction{\n\t\t\t\tType:         rr.Action.Type,\n\t\t\t\tStorageClass: rr.Action.StorageClass,\n\t\t\t},\n\t\t\tCondition: LifecycleCondition{\n\t\t\t\tAgeInDays:             rr.Condition.Age,\n\t\t\t\tMatchesStorageClasses: rr.Condition.MatchesStorageClass,\n\t\t\t\tNumNewerVersions:      rr.Condition.NumNewerVersions,\n\t\t\t},\n\t\t}\n\n\t\tswitch {\n\t\tcase rr.Condition.IsLive == nil:\n\t\t\tr.Condition.Liveness = LiveAndArchived\n\t\tcase *rr.Condition.IsLive == true:\n\t\t\tr.Condition.Liveness = Live\n\t\tcase *rr.Condition.IsLive == false:\n\t\t\tr.Condition.Liveness = Archived\n\t\t}\n\n\t\tif rr.Condition.CreatedBefore != \"\" {\n\t\t\tr.Condition.CreatedBefore, _ = time.Parse(rfc3339Date, rr.Condition.CreatedBefore)\n\t\t}\n\t\tl.Rules = append(l.Rules, r)\n\t}\n\treturn l\n}\n\nfunc (e *BucketEncryption) toRawBucketEncryption() *raw.BucketEncryption {\n\tif e == nil {\n\t\treturn nil\n\t}\n\treturn &raw.BucketEncryption{\n\t\tDefaultKmsKeyName: e.DefaultKMSKeyName,\n\t}\n}\n\nfunc toBucketEncryption(e *raw.BucketEncryption) *BucketEncryption {\n\tif e == nil {\n\t\treturn nil\n\t}\n\treturn &BucketEncryption{DefaultKMSKeyName: e.DefaultKmsKeyName}\n}\n\nfunc (b *BucketLogging) toRawBucketLogging() *raw.BucketLogging {\n\tif b == nil {\n\t\treturn nil\n\t}\n\treturn &raw.BucketLogging{\n\t\tLogBucket:       b.LogBucket,\n\t\tLogObjectPrefix: b.LogObjectPrefix,\n\t}\n}\n\nfunc toBucketLogging(b *raw.BucketLogging) *BucketLogging {\n\tif b == nil {\n\t\treturn nil\n\t}\n\treturn &BucketLogging{\n\t\tLogBucket:       b.LogBucket,\n\t\tLogObjectPrefix: b.LogObjectPrefix,\n\t}\n}\n\nfunc (w *BucketWebsite) toRawBucketWebsite() *raw.BucketWebsite {\n\tif w == nil {\n\t\treturn nil\n\t}\n\treturn &raw.BucketWebsite{\n\t\tMainPageSuffix: w.MainPageSuffix,\n\t\tNotFoundPage:   w.NotFoundPage,\n\t}\n}\n\nfunc toBucketWebsite(w *raw.BucketWebsite) *BucketWebsite {\n\tif w == nil {\n\t\treturn nil\n\t}\n\treturn &BucketWebsite{\n\t\tMainPageSuffix: w.MainPageSuffix,\n\t\tNotFoundPage:   w.NotFoundPage,\n\t}\n}\n\nfunc toBucketPolicyOnly(b *raw.BucketIamConfiguration) BucketPolicyOnly {\n\tif b == nil || b.BucketPolicyOnly == nil || !b.BucketPolicyOnly.Enabled {\n\t\treturn BucketPolicyOnly{}\n\t}\n\tlt, err := time.Parse(time.RFC3339, b.BucketPolicyOnly.LockedTime)\n\tif err != nil {\n\t\treturn BucketPolicyOnly{\n\t\t\tEnabled: true,\n\t\t}\n\t}\n\treturn BucketPolicyOnly{\n\t\tEnabled:    true,\n\t\tLockedTime: lt,\n\t}\n}\n\n// Objects returns an iterator over the objects in the bucket that match the Query q.\n// If q is nil, no filtering is done.\nfunc (b *BucketHandle) Objects(ctx context.Context, q *Query) *ObjectIterator {\n\tit := &ObjectIterator{\n\t\tctx:    ctx,\n\t\tbucket: b,\n\t}\n\tit.pageInfo, it.nextFunc = iterator.NewPageInfo(\n\t\tit.fetch,\n\t\tfunc() int { return len(it.items) },\n\t\tfunc() interface{} { b := it.items; it.items = nil; return b })\n\tif q != nil {\n\t\tit.query = *q\n\t}\n\treturn it\n}\n\n// An ObjectIterator is an iterator over ObjectAttrs.\ntype ObjectIterator struct {\n\tctx      context.Context\n\tbucket   *BucketHandle\n\tquery    Query\n\tpageInfo *iterator.PageInfo\n\tnextFunc func() error\n\titems    []*ObjectAttrs\n}\n\n// PageInfo supports pagination. See the google.golang.org/api/iterator package for details.\nfunc (it *ObjectIterator) PageInfo() *iterator.PageInfo { return it.pageInfo }\n\n// Next returns the next result. Its second return value is iterator.Done if\n// there are no more results. Once Next returns iterator.Done, all subsequent\n// calls will return iterator.Done.\n//\n// If Query.Delimiter is non-empty, some of the ObjectAttrs returned by Next will\n// have a non-empty Prefix field, and a zero value for all other fields. These\n// represent prefixes.\nfunc (it *ObjectIterator) Next() (*ObjectAttrs, error) {\n\tif err := it.nextFunc(); err != nil {\n\t\treturn nil, err\n\t}\n\titem := it.items[0]\n\tit.items = it.items[1:]\n\treturn item, nil\n}\n\nfunc (it *ObjectIterator) fetch(pageSize int, pageToken string) (string, error) {\n\treq := it.bucket.c.raw.Objects.List(it.bucket.name)\n\tsetClientHeader(req.Header())\n\treq.Projection(\"full\")\n\treq.Delimiter(it.query.Delimiter)\n\treq.Prefix(it.query.Prefix)\n\treq.Versions(it.query.Versions)\n\treq.PageToken(pageToken)\n\tif it.bucket.userProject != \"\" {\n\t\treq.UserProject(it.bucket.userProject)\n\t}\n\tif pageSize > 0 {\n\t\treq.MaxResults(int64(pageSize))\n\t}\n\tvar resp *raw.Objects\n\tvar err error\n\terr = runWithRetry(it.ctx, func() error {\n\t\tresp, err = req.Context(it.ctx).Do()\n\t\treturn err\n\t})\n\tif err != nil {\n\t\tif e, ok := err.(*googleapi.Error); ok && e.Code == http.StatusNotFound {\n\t\t\terr = ErrBucketNotExist\n\t\t}\n\t\treturn \"\", err\n\t}\n\tfor _, item := range resp.Items {\n\t\tit.items = append(it.items, newObject(item))\n\t}\n\tfor _, prefix := range resp.Prefixes {\n\t\tit.items = append(it.items, &ObjectAttrs{Prefix: prefix})\n\t}\n\treturn resp.NextPageToken, nil\n}\n\n// Buckets returns an iterator over the buckets in the project. You may\n// optionally set the iterator's Prefix field to restrict the list to buckets\n// whose names begin with the prefix. By default, all buckets in the project\n// are returned.\nfunc (c *Client) Buckets(ctx context.Context, projectID string) *BucketIterator {\n\tit := &BucketIterator{\n\t\tctx:       ctx,\n\t\tclient:    c,\n\t\tprojectID: projectID,\n\t}\n\tit.pageInfo, it.nextFunc = iterator.NewPageInfo(\n\t\tit.fetch,\n\t\tfunc() int { return len(it.buckets) },\n\t\tfunc() interface{} { b := it.buckets; it.buckets = nil; return b })\n\treturn it\n}\n\n// A BucketIterator is an iterator over BucketAttrs.\ntype BucketIterator struct {\n\t// Prefix restricts the iterator to buckets whose names begin with it.\n\tPrefix string\n\n\tctx       context.Context\n\tclient    *Client\n\tprojectID string\n\tbuckets   []*BucketAttrs\n\tpageInfo  *iterator.PageInfo\n\tnextFunc  func() error\n}\n\n// Next returns the next result. Its second return value is iterator.Done if\n// there are no more results. Once Next returns iterator.Done, all subsequent\n// calls will return iterator.Done.\nfunc (it *BucketIterator) Next() (*BucketAttrs, error) {\n\tif err := it.nextFunc(); err != nil {\n\t\treturn nil, err\n\t}\n\tb := it.buckets[0]\n\tit.buckets = it.buckets[1:]\n\treturn b, nil\n}\n\n// PageInfo supports pagination. See the google.golang.org/api/iterator package for details.\nfunc (it *BucketIterator) PageInfo() *iterator.PageInfo { return it.pageInfo }\n\nfunc (it *BucketIterator) fetch(pageSize int, pageToken string) (token string, err error) {\n\treq := it.client.raw.Buckets.List(it.projectID)\n\tsetClientHeader(req.Header())\n\treq.Projection(\"full\")\n\treq.Prefix(it.Prefix)\n\treq.PageToken(pageToken)\n\tif pageSize > 0 {\n\t\treq.MaxResults(int64(pageSize))\n\t}\n\tvar resp *raw.Buckets\n\terr = runWithRetry(it.ctx, func() error {\n\t\tresp, err = req.Context(it.ctx).Do()\n\t\treturn err\n\t})\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tfor _, item := range resp.Items {\n\t\tb, err := newBucket(item)\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\t\tit.buckets = append(it.buckets, b)\n\t}\n\treturn resp.NextPageToken, nil\n}\n"
  },
  {
    "path": "vendor/cloud.google.com/go/storage/copy.go",
    "content": "// Copyright 2016 Google LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage storage\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\n\t\"cloud.google.com/go/internal/trace\"\n\traw \"google.golang.org/api/storage/v1\"\n)\n\n// CopierFrom creates a Copier that can copy src to dst.\n// You can immediately call Run on the returned Copier, or\n// you can configure it first.\n//\n// For Requester Pays buckets, the user project of dst is billed, unless it is empty,\n// in which case the user project of src is billed.\nfunc (dst *ObjectHandle) CopierFrom(src *ObjectHandle) *Copier {\n\treturn &Copier{dst: dst, src: src}\n}\n\n// A Copier copies a source object to a destination.\ntype Copier struct {\n\t// ObjectAttrs are optional attributes to set on the destination object.\n\t// Any attributes must be initialized before any calls on the Copier. Nil\n\t// or zero-valued attributes are ignored.\n\tObjectAttrs\n\n\t// RewriteToken can be set before calling Run to resume a copy\n\t// operation. After Run returns a non-nil error, RewriteToken will\n\t// have been updated to contain the value needed to resume the copy.\n\tRewriteToken string\n\n\t// ProgressFunc can be used to monitor the progress of a multi-RPC copy\n\t// operation. If ProgressFunc is not nil and copying requires multiple\n\t// calls to the underlying service (see\n\t// https://cloud.google.com/storage/docs/json_api/v1/objects/rewrite), then\n\t// ProgressFunc will be invoked after each call with the number of bytes of\n\t// content copied so far and the total size in bytes of the source object.\n\t//\n\t// ProgressFunc is intended to make upload progress available to the\n\t// application. For example, the implementation of ProgressFunc may update\n\t// a progress bar in the application's UI, or log the result of\n\t// float64(copiedBytes)/float64(totalBytes).\n\t//\n\t// ProgressFunc should return quickly without blocking.\n\tProgressFunc func(copiedBytes, totalBytes uint64)\n\n\t// The Cloud KMS key, in the form projects/P/locations/L/keyRings/R/cryptoKeys/K,\n\t// that will be used to encrypt the object. Overrides the object's KMSKeyName, if\n\t// any.\n\t//\n\t// Providing both a DestinationKMSKeyName and a customer-supplied encryption key\n\t// (via ObjectHandle.Key) on the destination object will result in an error when\n\t// Run is called.\n\tDestinationKMSKeyName string\n\n\tdst, src *ObjectHandle\n}\n\n// Run performs the copy.\nfunc (c *Copier) Run(ctx context.Context) (attrs *ObjectAttrs, err error) {\n\tctx = trace.StartSpan(ctx, \"cloud.google.com/go/storage.Copier.Run\")\n\tdefer func() { trace.EndSpan(ctx, err) }()\n\n\tif err := c.src.validate(); err != nil {\n\t\treturn nil, err\n\t}\n\tif err := c.dst.validate(); err != nil {\n\t\treturn nil, err\n\t}\n\tif c.DestinationKMSKeyName != \"\" && c.dst.encryptionKey != nil {\n\t\treturn nil, errors.New(\"storage: cannot use DestinationKMSKeyName with a customer-supplied encryption key\")\n\t}\n\t// Convert destination attributes to raw form, omitting the bucket.\n\t// If the bucket is included but name or content-type aren't, the service\n\t// returns a 400 with \"Required\" as the only message. Omitting the bucket\n\t// does not cause any problems.\n\trawObject := c.ObjectAttrs.toRawObject(\"\")\n\tfor {\n\t\tres, err := c.callRewrite(ctx, rawObject)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif c.ProgressFunc != nil {\n\t\t\tc.ProgressFunc(uint64(res.TotalBytesRewritten), uint64(res.ObjectSize))\n\t\t}\n\t\tif res.Done { // Finished successfully.\n\t\t\treturn newObject(res.Resource), nil\n\t\t}\n\t}\n}\n\nfunc (c *Copier) callRewrite(ctx context.Context, rawObj *raw.Object) (*raw.RewriteResponse, error) {\n\tcall := c.dst.c.raw.Objects.Rewrite(c.src.bucket, c.src.object, c.dst.bucket, c.dst.object, rawObj)\n\n\tcall.Context(ctx).Projection(\"full\")\n\tif c.RewriteToken != \"\" {\n\t\tcall.RewriteToken(c.RewriteToken)\n\t}\n\tif c.DestinationKMSKeyName != \"\" {\n\t\tcall.DestinationKmsKeyName(c.DestinationKMSKeyName)\n\t}\n\tif c.PredefinedACL != \"\" {\n\t\tcall.DestinationPredefinedAcl(c.PredefinedACL)\n\t}\n\tif err := applyConds(\"Copy destination\", c.dst.gen, c.dst.conds, call); err != nil {\n\t\treturn nil, err\n\t}\n\tif c.dst.userProject != \"\" {\n\t\tcall.UserProject(c.dst.userProject)\n\t} else if c.src.userProject != \"\" {\n\t\tcall.UserProject(c.src.userProject)\n\t}\n\tif err := applySourceConds(c.src.gen, c.src.conds, call); err != nil {\n\t\treturn nil, err\n\t}\n\tif err := setEncryptionHeaders(call.Header(), c.dst.encryptionKey, false); err != nil {\n\t\treturn nil, err\n\t}\n\tif err := setEncryptionHeaders(call.Header(), c.src.encryptionKey, true); err != nil {\n\t\treturn nil, err\n\t}\n\tvar res *raw.RewriteResponse\n\tvar err error\n\tsetClientHeader(call.Header())\n\terr = runWithRetry(ctx, func() error { res, err = call.Do(); return err })\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tc.RewriteToken = res.RewriteToken\n\treturn res, nil\n}\n\n// ComposerFrom creates a Composer that can compose srcs into dst.\n// You can immediately call Run on the returned Composer, or you can\n// configure it first.\n//\n// The encryption key for the destination object will be used to decrypt all\n// source objects and encrypt the destination object. It is an error\n// to specify an encryption key for any of the source objects.\nfunc (dst *ObjectHandle) ComposerFrom(srcs ...*ObjectHandle) *Composer {\n\treturn &Composer{dst: dst, srcs: srcs}\n}\n\n// A Composer composes source objects into a destination object.\n//\n// For Requester Pays buckets, the user project of dst is billed.\ntype Composer struct {\n\t// ObjectAttrs are optional attributes to set on the destination object.\n\t// Any attributes must be initialized before any calls on the Composer. Nil\n\t// or zero-valued attributes are ignored.\n\tObjectAttrs\n\n\tdst  *ObjectHandle\n\tsrcs []*ObjectHandle\n}\n\n// Run performs the compose operation.\nfunc (c *Composer) Run(ctx context.Context) (attrs *ObjectAttrs, err error) {\n\tctx = trace.StartSpan(ctx, \"cloud.google.com/go/storage.Composer.Run\")\n\tdefer func() { trace.EndSpan(ctx, err) }()\n\n\tif err := c.dst.validate(); err != nil {\n\t\treturn nil, err\n\t}\n\tif len(c.srcs) == 0 {\n\t\treturn nil, errors.New(\"storage: at least one source object must be specified\")\n\t}\n\n\treq := &raw.ComposeRequest{}\n\t// Compose requires a non-empty Destination, so we always set it,\n\t// even if the caller-provided ObjectAttrs is the zero value.\n\treq.Destination = c.ObjectAttrs.toRawObject(c.dst.bucket)\n\tfor _, src := range c.srcs {\n\t\tif err := src.validate(); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif src.bucket != c.dst.bucket {\n\t\t\treturn nil, fmt.Errorf(\"storage: all source objects must be in bucket %q, found %q\", c.dst.bucket, src.bucket)\n\t\t}\n\t\tif src.encryptionKey != nil {\n\t\t\treturn nil, fmt.Errorf(\"storage: compose source %s.%s must not have encryption key\", src.bucket, src.object)\n\t\t}\n\t\tsrcObj := &raw.ComposeRequestSourceObjects{\n\t\t\tName: src.object,\n\t\t}\n\t\tif err := applyConds(\"ComposeFrom source\", src.gen, src.conds, composeSourceObj{srcObj}); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treq.SourceObjects = append(req.SourceObjects, srcObj)\n\t}\n\n\tcall := c.dst.c.raw.Objects.Compose(c.dst.bucket, c.dst.object, req).Context(ctx)\n\tif err := applyConds(\"ComposeFrom destination\", c.dst.gen, c.dst.conds, call); err != nil {\n\t\treturn nil, err\n\t}\n\tif c.dst.userProject != \"\" {\n\t\tcall.UserProject(c.dst.userProject)\n\t}\n\tif c.PredefinedACL != \"\" {\n\t\tcall.DestinationPredefinedAcl(c.PredefinedACL)\n\t}\n\tif err := setEncryptionHeaders(call.Header(), c.dst.encryptionKey, false); err != nil {\n\t\treturn nil, err\n\t}\n\tvar obj *raw.Object\n\tsetClientHeader(call.Header())\n\terr = runWithRetry(ctx, func() error { obj, err = call.Do(); return err })\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn newObject(obj), nil\n}\n"
  },
  {
    "path": "vendor/cloud.google.com/go/storage/doc.go",
    "content": "// Copyright 2016 Google LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n/*\nPackage storage provides an easy way to work with Google Cloud Storage.\nGoogle Cloud Storage stores data in named objects, which are grouped into buckets.\n\nMore information about Google Cloud Storage is available at\nhttps://cloud.google.com/storage/docs.\n\nSee https://godoc.org/cloud.google.com/go for authentication, timeouts,\nconnection pooling and similar aspects of this package.\n\nAll of the methods of this package use exponential backoff to retry calls that fail\nwith certain errors, as described in\nhttps://cloud.google.com/storage/docs/exponential-backoff. Retrying continues\nindefinitely unless the controlling context is canceled or the client is closed. See\ncontext.WithTimeout and context.WithCancel.\n\n\nCreating a Client\n\nTo start working with this package, create a client:\n\n    ctx := context.Background()\n    client, err := storage.NewClient(ctx)\n    if err != nil {\n        // TODO: Handle error.\n    }\n\nThe client will use your default application credentials.\n\nIf you only wish to access public data, you can create\nan unauthenticated client with\n\n    client, err := storage.NewClient(ctx, option.WithoutAuthentication())\n\nBuckets\n\nA Google Cloud Storage bucket is a collection of objects. To work with a\nbucket, make a bucket handle:\n\n    bkt := client.Bucket(bucketName)\n\nA handle is a reference to a bucket. You can have a handle even if the\nbucket doesn't exist yet. To create a bucket in Google Cloud Storage,\ncall Create on the handle:\n\n    if err := bkt.Create(ctx, projectID, nil); err != nil {\n        // TODO: Handle error.\n    }\n\nNote that although buckets are associated with projects, bucket names are\nglobal across all projects.\n\nEach bucket has associated metadata, represented in this package by\nBucketAttrs. The third argument to BucketHandle.Create allows you to set\nthe initial BucketAttrs of a bucket. To retrieve a bucket's attributes, use\nAttrs:\n\n    attrs, err := bkt.Attrs(ctx)\n    if err != nil {\n        // TODO: Handle error.\n    }\n    fmt.Printf(\"bucket %s, created at %s, is located in %s with storage class %s\\n\",\n        attrs.Name, attrs.Created, attrs.Location, attrs.StorageClass)\n\nObjects\n\nAn object holds arbitrary data as a sequence of bytes, like a file. You\nrefer to objects using a handle, just as with buckets, but unlike buckets\nyou don't explicitly create an object. Instead, the first time you write\nto an object it will be created. You can use the standard Go io.Reader\nand io.Writer interfaces to read and write object data:\n\n    obj := bkt.Object(\"data\")\n    // Write something to obj.\n    // w implements io.Writer.\n    w := obj.NewWriter(ctx)\n    // Write some text to obj. This will either create the object or overwrite whatever is there already.\n    if _, err := fmt.Fprintf(w, \"This object contains text.\\n\"); err != nil {\n        // TODO: Handle error.\n    }\n    // Close, just like writing a file.\n    if err := w.Close(); err != nil {\n        // TODO: Handle error.\n    }\n\n    // Read it back.\n    r, err := obj.NewReader(ctx)\n    if err != nil {\n        // TODO: Handle error.\n    }\n    defer r.Close()\n    if _, err := io.Copy(os.Stdout, r); err != nil {\n        // TODO: Handle error.\n    }\n    // Prints \"This object contains text.\"\n\nObjects also have attributes, which you can fetch with Attrs:\n\n    objAttrs, err := obj.Attrs(ctx)\n    if err != nil {\n        // TODO: Handle error.\n    }\n    fmt.Printf(\"object %s has size %d and can be read using %s\\n\",\n        objAttrs.Name, objAttrs.Size, objAttrs.MediaLink)\n\nACLs\n\nBoth objects and buckets have ACLs (Access Control Lists). An ACL is a list of\nACLRules, each of which specifies the role of a user, group or project. ACLs\nare suitable for fine-grained control, but you may prefer using IAM to control\naccess at the project level (see\nhttps://cloud.google.com/storage/docs/access-control/iam).\n\nTo list the ACLs of a bucket or object, obtain an ACLHandle and call its List method:\n\n    acls, err := obj.ACL().List(ctx)\n    if err != nil {\n        // TODO: Handle error.\n    }\n    for _, rule := range acls {\n        fmt.Printf(\"%s has role %s\\n\", rule.Entity, rule.Role)\n    }\n\nYou can also set and delete ACLs.\n\nConditions\n\nEvery object has a generation and a metageneration. The generation changes\nwhenever the content changes, and the metageneration changes whenever the\nmetadata changes. Conditions let you check these values before an operation;\nthe operation only executes if the conditions match. You can use conditions to\nprevent race conditions in read-modify-write operations.\n\nFor example, say you've read an object's metadata into objAttrs. Now\nyou want to write to that object, but only if its contents haven't changed\nsince you read it. Here is how to express that:\n\n    w = obj.If(storage.Conditions{GenerationMatch: objAttrs.Generation}).NewWriter(ctx)\n    // Proceed with writing as above.\n\nSigned URLs\n\nYou can obtain a URL that lets anyone read or write an object for a limited time.\nYou don't need to create a client to do this. See the documentation of\nSignedURL for details.\n\n    url, err := storage.SignedURL(bucketName, \"shared-object\", opts)\n    if err != nil {\n        // TODO: Handle error.\n    }\n    fmt.Println(url)\n\nErrors\n\nErrors returned by this client are often of the type [`googleapi.Error`](https://godoc.org/google.golang.org/api/googleapi#Error).\nThese errors can be introspected for more information by type asserting to the richer `googleapi.Error` type. For example:\n\n\tif e, ok := err.(*googleapi.Error); ok {\n\t\t  if e.Code == 409 { ... }\n\t}\n*/\npackage storage // import \"cloud.google.com/go/storage\"\n"
  },
  {
    "path": "vendor/cloud.google.com/go/storage/go110.go",
    "content": "// Copyright 2017 Google LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// +build go1.10\n\npackage storage\n\nimport \"google.golang.org/api/googleapi\"\n\nfunc shouldRetry(err error) bool {\n\tswitch e := err.(type) {\n\tcase *googleapi.Error:\n\t\t// Retry on 429 and 5xx, according to\n\t\t// https://cloud.google.com/storage/docs/exponential-backoff.\n\t\treturn e.Code == 429 || (e.Code >= 500 && e.Code < 600)\n\tcase interface{ Temporary() bool }:\n\t\treturn e.Temporary()\n\tdefault:\n\t\treturn false\n\t}\n}\n"
  },
  {
    "path": "vendor/cloud.google.com/go/storage/iam.go",
    "content": "// Copyright 2017 Google LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage storage\n\nimport (\n\t\"context\"\n\n\t\"cloud.google.com/go/iam\"\n\t\"cloud.google.com/go/internal/trace\"\n\traw \"google.golang.org/api/storage/v1\"\n\tiampb \"google.golang.org/genproto/googleapis/iam/v1\"\n)\n\n// IAM provides access to IAM access control for the bucket.\nfunc (b *BucketHandle) IAM() *iam.Handle {\n\treturn iam.InternalNewHandleClient(&iamClient{\n\t\traw:         b.c.raw,\n\t\tuserProject: b.userProject,\n\t}, b.name)\n}\n\n// iamClient implements the iam.client interface.\ntype iamClient struct {\n\traw         *raw.Service\n\tuserProject string\n}\n\nfunc (c *iamClient) Get(ctx context.Context, resource string) (p *iampb.Policy, err error) {\n\tctx = trace.StartSpan(ctx, \"cloud.google.com/go/storage.IAM.Get\")\n\tdefer func() { trace.EndSpan(ctx, err) }()\n\n\tcall := c.raw.Buckets.GetIamPolicy(resource)\n\tsetClientHeader(call.Header())\n\tif c.userProject != \"\" {\n\t\tcall.UserProject(c.userProject)\n\t}\n\tvar rp *raw.Policy\n\terr = runWithRetry(ctx, func() error {\n\t\trp, err = call.Context(ctx).Do()\n\t\treturn err\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn iamFromStoragePolicy(rp), nil\n}\n\nfunc (c *iamClient) Set(ctx context.Context, resource string, p *iampb.Policy) (err error) {\n\tctx = trace.StartSpan(ctx, \"cloud.google.com/go/storage.IAM.Set\")\n\tdefer func() { trace.EndSpan(ctx, err) }()\n\n\trp := iamToStoragePolicy(p)\n\tcall := c.raw.Buckets.SetIamPolicy(resource, rp)\n\tsetClientHeader(call.Header())\n\tif c.userProject != \"\" {\n\t\tcall.UserProject(c.userProject)\n\t}\n\treturn runWithRetry(ctx, func() error {\n\t\t_, err := call.Context(ctx).Do()\n\t\treturn err\n\t})\n}\n\nfunc (c *iamClient) Test(ctx context.Context, resource string, perms []string) (permissions []string, err error) {\n\tctx = trace.StartSpan(ctx, \"cloud.google.com/go/storage.IAM.Test\")\n\tdefer func() { trace.EndSpan(ctx, err) }()\n\n\tcall := c.raw.Buckets.TestIamPermissions(resource, perms)\n\tsetClientHeader(call.Header())\n\tif c.userProject != \"\" {\n\t\tcall.UserProject(c.userProject)\n\t}\n\tvar res *raw.TestIamPermissionsResponse\n\terr = runWithRetry(ctx, func() error {\n\t\tres, err = call.Context(ctx).Do()\n\t\treturn err\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn res.Permissions, nil\n}\n\nfunc iamToStoragePolicy(ip *iampb.Policy) *raw.Policy {\n\treturn &raw.Policy{\n\t\tBindings: iamToStorageBindings(ip.Bindings),\n\t\tEtag:     string(ip.Etag),\n\t}\n}\n\nfunc iamToStorageBindings(ibs []*iampb.Binding) []*raw.PolicyBindings {\n\tvar rbs []*raw.PolicyBindings\n\tfor _, ib := range ibs {\n\t\trbs = append(rbs, &raw.PolicyBindings{\n\t\t\tRole:    ib.Role,\n\t\t\tMembers: ib.Members,\n\t\t})\n\t}\n\treturn rbs\n}\n\nfunc iamFromStoragePolicy(rp *raw.Policy) *iampb.Policy {\n\treturn &iampb.Policy{\n\t\tBindings: iamFromStorageBindings(rp.Bindings),\n\t\tEtag:     []byte(rp.Etag),\n\t}\n}\n\nfunc iamFromStorageBindings(rbs []*raw.PolicyBindings) []*iampb.Binding {\n\tvar ibs []*iampb.Binding\n\tfor _, rb := range rbs {\n\t\tibs = append(ibs, &iampb.Binding{\n\t\t\tRole:    rb.Role,\n\t\t\tMembers: rb.Members,\n\t\t})\n\t}\n\treturn ibs\n}\n"
  },
  {
    "path": "vendor/cloud.google.com/go/storage/invoke.go",
    "content": "// Copyright 2014 Google LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage storage\n\nimport (\n\t\"context\"\n\n\t\"cloud.google.com/go/internal\"\n\tgax \"github.com/googleapis/gax-go/v2\"\n)\n\n// runWithRetry calls the function until it returns nil or a non-retryable error, or\n// the context is done.\nfunc runWithRetry(ctx context.Context, call func() error) error {\n\treturn internal.Retry(ctx, gax.Backoff{}, func() (stop bool, err error) {\n\t\terr = call()\n\t\tif err == nil {\n\t\t\treturn true, nil\n\t\t}\n\t\tif shouldRetry(err) {\n\t\t\treturn false, nil\n\t\t}\n\t\treturn true, err\n\t})\n}\n"
  },
  {
    "path": "vendor/cloud.google.com/go/storage/not_go110.go",
    "content": "// Copyright 2017 Google LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// +build !go1.10\n\npackage storage\n\nimport (\n\t\"net/url\"\n\t\"strings\"\n\n\t\"google.golang.org/api/googleapi\"\n)\n\nfunc shouldRetry(err error) bool {\n\tswitch e := err.(type) {\n\tcase *googleapi.Error:\n\t\t// Retry on 429 and 5xx, according to\n\t\t// https://cloud.google.com/storage/docs/exponential-backoff.\n\t\treturn e.Code == 429 || (e.Code >= 500 && e.Code < 600)\n\tcase *url.Error:\n\t\t// Retry on REFUSED_STREAM.\n\t\t// Unfortunately the error type is unexported, so we resort to string\n\t\t// matching.\n\t\treturn strings.Contains(e.Error(), \"REFUSED_STREAM\")\n\tcase interface{ Temporary() bool }:\n\t\treturn e.Temporary()\n\tdefault:\n\t\treturn false\n\t}\n}\n"
  },
  {
    "path": "vendor/cloud.google.com/go/storage/notifications.go",
    "content": "// Copyright 2017 Google LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage storage\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"regexp\"\n\n\t\"cloud.google.com/go/internal/trace\"\n\traw \"google.golang.org/api/storage/v1\"\n)\n\n// A Notification describes how to send Cloud PubSub messages when certain\n// events occur in a bucket.\ntype Notification struct {\n\t//The ID of the notification.\n\tID string\n\n\t// The ID of the topic to which this subscription publishes.\n\tTopicID string\n\n\t// The ID of the project to which the topic belongs.\n\tTopicProjectID string\n\n\t// Only send notifications about listed event types. If empty, send notifications\n\t// for all event types.\n\t// See https://cloud.google.com/storage/docs/pubsub-notifications#events.\n\tEventTypes []string\n\n\t// If present, only apply this notification configuration to object names that\n\t// begin with this prefix.\n\tObjectNamePrefix string\n\n\t// An optional list of additional attributes to attach to each Cloud PubSub\n\t// message published for this notification subscription.\n\tCustomAttributes map[string]string\n\n\t// The contents of the message payload.\n\t// See https://cloud.google.com/storage/docs/pubsub-notifications#payload.\n\tPayloadFormat string\n}\n\n// Values for Notification.PayloadFormat.\nconst (\n\t// Send no payload with notification messages.\n\tNoPayload = \"NONE\"\n\n\t// Send object metadata as JSON with notification messages.\n\tJSONPayload = \"JSON_API_V1\"\n)\n\n// Values for Notification.EventTypes.\nconst (\n\t// Event that occurs when an object is successfully created.\n\tObjectFinalizeEvent = \"OBJECT_FINALIZE\"\n\n\t// Event that occurs when the metadata of an existing object changes.\n\tObjectMetadataUpdateEvent = \"OBJECT_METADATA_UPDATE\"\n\n\t// Event that occurs when an object is permanently deleted.\n\tObjectDeleteEvent = \"OBJECT_DELETE\"\n\n\t// Event that occurs when the live version of an object becomes an\n\t// archived version.\n\tObjectArchiveEvent = \"OBJECT_ARCHIVE\"\n)\n\nfunc toNotification(rn *raw.Notification) *Notification {\n\tn := &Notification{\n\t\tID:               rn.Id,\n\t\tEventTypes:       rn.EventTypes,\n\t\tObjectNamePrefix: rn.ObjectNamePrefix,\n\t\tCustomAttributes: rn.CustomAttributes,\n\t\tPayloadFormat:    rn.PayloadFormat,\n\t}\n\tn.TopicProjectID, n.TopicID = parseNotificationTopic(rn.Topic)\n\treturn n\n}\n\nvar topicRE = regexp.MustCompile(\"^//pubsub.googleapis.com/projects/([^/]+)/topics/([^/]+)\")\n\n// parseNotificationTopic extracts the project and topic IDs from from the full\n// resource name returned by the service. If the name is malformed, it returns\n// \"?\" for both IDs.\nfunc parseNotificationTopic(nt string) (projectID, topicID string) {\n\tmatches := topicRE.FindStringSubmatch(nt)\n\tif matches == nil {\n\t\treturn \"?\", \"?\"\n\t}\n\treturn matches[1], matches[2]\n}\n\nfunc toRawNotification(n *Notification) *raw.Notification {\n\treturn &raw.Notification{\n\t\tId: n.ID,\n\t\tTopic: fmt.Sprintf(\"//pubsub.googleapis.com/projects/%s/topics/%s\",\n\t\t\tn.TopicProjectID, n.TopicID),\n\t\tEventTypes:       n.EventTypes,\n\t\tObjectNamePrefix: n.ObjectNamePrefix,\n\t\tCustomAttributes: n.CustomAttributes,\n\t\tPayloadFormat:    string(n.PayloadFormat),\n\t}\n}\n\n// AddNotification adds a notification to b. You must set n's TopicProjectID, TopicID\n// and PayloadFormat, and must not set its ID. The other fields are all optional. The\n// returned Notification's ID can be used to refer to it.\nfunc (b *BucketHandle) AddNotification(ctx context.Context, n *Notification) (ret *Notification, err error) {\n\tctx = trace.StartSpan(ctx, \"cloud.google.com/go/storage.Bucket.AddNotification\")\n\tdefer func() { trace.EndSpan(ctx, err) }()\n\n\tif n.ID != \"\" {\n\t\treturn nil, errors.New(\"storage: AddNotification: ID must not be set\")\n\t}\n\tif n.TopicProjectID == \"\" {\n\t\treturn nil, errors.New(\"storage: AddNotification: missing TopicProjectID\")\n\t}\n\tif n.TopicID == \"\" {\n\t\treturn nil, errors.New(\"storage: AddNotification: missing TopicID\")\n\t}\n\tcall := b.c.raw.Notifications.Insert(b.name, toRawNotification(n))\n\tsetClientHeader(call.Header())\n\tif b.userProject != \"\" {\n\t\tcall.UserProject(b.userProject)\n\t}\n\trn, err := call.Context(ctx).Do()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn toNotification(rn), nil\n}\n\n// Notifications returns all the Notifications configured for this bucket, as a map\n// indexed by notification ID.\nfunc (b *BucketHandle) Notifications(ctx context.Context) (n map[string]*Notification, err error) {\n\tctx = trace.StartSpan(ctx, \"cloud.google.com/go/storage.Bucket.Notifications\")\n\tdefer func() { trace.EndSpan(ctx, err) }()\n\n\tcall := b.c.raw.Notifications.List(b.name)\n\tsetClientHeader(call.Header())\n\tif b.userProject != \"\" {\n\t\tcall.UserProject(b.userProject)\n\t}\n\tvar res *raw.Notifications\n\terr = runWithRetry(ctx, func() error {\n\t\tres, err = call.Context(ctx).Do()\n\t\treturn err\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn notificationsToMap(res.Items), nil\n}\n\nfunc notificationsToMap(rns []*raw.Notification) map[string]*Notification {\n\tm := map[string]*Notification{}\n\tfor _, rn := range rns {\n\t\tm[rn.Id] = toNotification(rn)\n\t}\n\treturn m\n}\n\n// DeleteNotification deletes the notification with the given ID.\nfunc (b *BucketHandle) DeleteNotification(ctx context.Context, id string) (err error) {\n\tctx = trace.StartSpan(ctx, \"cloud.google.com/go/storage.Bucket.DeleteNotification\")\n\tdefer func() { trace.EndSpan(ctx, err) }()\n\n\tcall := b.c.raw.Notifications.Delete(b.name, id)\n\tsetClientHeader(call.Header())\n\tif b.userProject != \"\" {\n\t\tcall.UserProject(b.userProject)\n\t}\n\treturn call.Context(ctx).Do()\n}\n"
  },
  {
    "path": "vendor/cloud.google.com/go/storage/reader.go",
    "content": "// Copyright 2016 Google LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage storage\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"hash/crc32\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"reflect\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\n\t\"cloud.google.com/go/internal/trace\"\n\t\"google.golang.org/api/googleapi\"\n)\n\nvar crc32cTable = crc32.MakeTable(crc32.Castagnoli)\n\n// ReaderObjectAttrs are attributes about the object being read. These are populated\n// during the New call. This struct only holds a subset of object attributes: to\n// get the full set of attributes, use ObjectHandle.Attrs.\n//\n// Each field is read-only.\ntype ReaderObjectAttrs struct {\n\t// Size is the length of the object's content.\n\tSize int64\n\n\t// ContentType is the MIME type of the object's content.\n\tContentType string\n\n\t// ContentEncoding is the encoding of the object's content.\n\tContentEncoding string\n\n\t// CacheControl specifies whether and for how long browser and Internet\n\t// caches are allowed to cache your objects.\n\tCacheControl string\n\n\t// LastModified is the time that the object was last modified.\n\tLastModified time.Time\n\n\t// Generation is the generation number of the object's content.\n\tGeneration int64\n\n\t// Metageneration is the version of the metadata for this object at\n\t// this generation. This field is used for preconditions and for\n\t// detecting changes in metadata. A metageneration number is only\n\t// meaningful in the context of a particular generation of a\n\t// particular object.\n\tMetageneration int64\n}\n\n// NewReader creates a new Reader to read the contents of the\n// object.\n// ErrObjectNotExist will be returned if the object is not found.\n//\n// The caller must call Close on the returned Reader when done reading.\nfunc (o *ObjectHandle) NewReader(ctx context.Context) (*Reader, error) {\n\treturn o.NewRangeReader(ctx, 0, -1)\n}\n\n// NewRangeReader reads part of an object, reading at most length bytes\n// starting at the given offset. If length is negative, the object is read\n// until the end.\nfunc (o *ObjectHandle) NewRangeReader(ctx context.Context, offset, length int64) (r *Reader, err error) {\n\tctx = trace.StartSpan(ctx, \"cloud.google.com/go/storage.Object.NewRangeReader\")\n\tdefer func() { trace.EndSpan(ctx, err) }()\n\n\tif err := o.validate(); err != nil {\n\t\treturn nil, err\n\t}\n\tif offset < 0 {\n\t\treturn nil, fmt.Errorf(\"storage: invalid offset %d < 0\", offset)\n\t}\n\tif o.conds != nil {\n\t\tif err := o.conds.validate(\"NewRangeReader\"); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\tu := &url.URL{\n\t\tScheme: \"https\",\n\t\tHost:   \"storage.googleapis.com\",\n\t\tPath:   fmt.Sprintf(\"/%s/%s\", o.bucket, o.object),\n\t}\n\tverb := \"GET\"\n\tif length == 0 {\n\t\tverb = \"HEAD\"\n\t}\n\treq, err := http.NewRequest(verb, u.String(), nil)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq = req.WithContext(ctx)\n\tif o.userProject != \"\" {\n\t\treq.Header.Set(\"X-Goog-User-Project\", o.userProject)\n\t}\n\tif o.readCompressed {\n\t\treq.Header.Set(\"Accept-Encoding\", \"gzip\")\n\t}\n\tif err := setEncryptionHeaders(req.Header, o.encryptionKey, false); err != nil {\n\t\treturn nil, err\n\t}\n\n\tgen := o.gen\n\n\t// Define a function that initiates a Read with offset and length, assuming we\n\t// have already read seen bytes.\n\treopen := func(seen int64) (*http.Response, error) {\n\t\tstart := offset + seen\n\t\tif length < 0 && start > 0 {\n\t\t\treq.Header.Set(\"Range\", fmt.Sprintf(\"bytes=%d-\", start))\n\t\t} else if length > 0 {\n\t\t\t// The end character isn't affected by how many bytes we've seen.\n\t\t\treq.Header.Set(\"Range\", fmt.Sprintf(\"bytes=%d-%d\", start, offset+length-1))\n\t\t}\n\t\t// We wait to assign conditions here because the generation number can change in between reopen() runs.\n\t\treq.URL.RawQuery = conditionsQuery(gen, o.conds)\n\t\tvar res *http.Response\n\t\terr = runWithRetry(ctx, func() error {\n\t\t\tres, err = o.c.hc.Do(req)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif res.StatusCode == http.StatusNotFound {\n\t\t\t\tres.Body.Close()\n\t\t\t\treturn ErrObjectNotExist\n\t\t\t}\n\t\t\tif res.StatusCode < 200 || res.StatusCode > 299 {\n\t\t\t\tbody, _ := ioutil.ReadAll(res.Body)\n\t\t\t\tres.Body.Close()\n\t\t\t\treturn &googleapi.Error{\n\t\t\t\t\tCode:   res.StatusCode,\n\t\t\t\t\tHeader: res.Header,\n\t\t\t\t\tBody:   string(body),\n\t\t\t\t}\n\t\t\t}\n\t\t\tif start > 0 && length != 0 && res.StatusCode != http.StatusPartialContent {\n\t\t\t\tres.Body.Close()\n\t\t\t\treturn errors.New(\"storage: partial request not satisfied\")\n\t\t\t}\n\t\t\t// If a generation hasn't been specified, and this is the first response we get, let's record the\n\t\t\t// generation. In future requests we'll use this generation as a precondition to avoid data races.\n\t\t\tif gen < 0 && res.Header.Get(\"X-Goog-Generation\") != \"\" {\n\t\t\t\tgen64, err := strconv.ParseInt(res.Header.Get(\"X-Goog-Generation\"), 10, 64)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tgen = gen64\n\t\t\t}\n\t\t\treturn nil\n\t\t})\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn res, nil\n\t}\n\n\tres, err := reopen(0)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tvar (\n\t\tsize     int64 // total size of object, even if a range was requested.\n\t\tcheckCRC bool\n\t\tcrc      uint32\n\t)\n\tif res.StatusCode == http.StatusPartialContent {\n\t\tcr := strings.TrimSpace(res.Header.Get(\"Content-Range\"))\n\t\tif !strings.HasPrefix(cr, \"bytes \") || !strings.Contains(cr, \"/\") {\n\n\t\t\treturn nil, fmt.Errorf(\"storage: invalid Content-Range %q\", cr)\n\t\t}\n\t\tsize, err = strconv.ParseInt(cr[strings.LastIndex(cr, \"/\")+1:], 10, 64)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"storage: invalid Content-Range %q\", cr)\n\t\t}\n\t} else {\n\t\tsize = res.ContentLength\n\t\t// Check the CRC iff all of the following hold:\n\t\t// - We asked for content (length != 0).\n\t\t// - We got all the content (status != PartialContent).\n\t\t// - The server sent a CRC header.\n\t\t// - The Go http stack did not uncompress the file.\n\t\t// - We were not served compressed data that was uncompressed on download.\n\t\t// The problem with the last two cases is that the CRC will not match -- GCS\n\t\t// computes it on the compressed contents, but we compute it on the\n\t\t// uncompressed contents.\n\t\tif length != 0 && !res.Uncompressed && !uncompressedByServer(res) {\n\t\t\tcrc, checkCRC = parseCRC32c(res)\n\t\t}\n\t}\n\n\tremain := res.ContentLength\n\tbody := res.Body\n\tif length == 0 {\n\t\tremain = 0\n\t\tbody.Close()\n\t\tbody = emptyBody\n\t}\n\tvar metaGen int64\n\tif res.Header.Get(\"X-Goog-Generation\") != \"\" {\n\t\tmetaGen, err = strconv.ParseInt(res.Header.Get(\"X-Goog-Metageneration\"), 10, 64)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\tvar lm time.Time\n\tif res.Header.Get(\"Last-Modified\") != \"\" {\n\t\tlm, err = http.ParseTime(res.Header.Get(\"Last-Modified\"))\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\tattrs := ReaderObjectAttrs{\n\t\tSize:            size,\n\t\tContentType:     res.Header.Get(\"Content-Type\"),\n\t\tContentEncoding: res.Header.Get(\"Content-Encoding\"),\n\t\tCacheControl:    res.Header.Get(\"Cache-Control\"),\n\t\tLastModified:    lm,\n\t\tGeneration:      gen,\n\t\tMetageneration:  metaGen,\n\t}\n\treturn &Reader{\n\t\tAttrs:    attrs,\n\t\tbody:     body,\n\t\tsize:     size,\n\t\tremain:   remain,\n\t\twantCRC:  crc,\n\t\tcheckCRC: checkCRC,\n\t\treopen:   reopen,\n\t}, nil\n}\n\nfunc uncompressedByServer(res *http.Response) bool {\n\t// If the data is stored as gzip but is not encoded as gzip, then it\n\t// was uncompressed by the server.\n\treturn res.Header.Get(\"X-Goog-Stored-Content-Encoding\") == \"gzip\" &&\n\t\tres.Header.Get(\"Content-Encoding\") != \"gzip\"\n}\n\nfunc parseCRC32c(res *http.Response) (uint32, bool) {\n\tconst prefix = \"crc32c=\"\n\tfor _, spec := range res.Header[\"X-Goog-Hash\"] {\n\t\tif strings.HasPrefix(spec, prefix) {\n\t\t\tc, err := decodeUint32(spec[len(prefix):])\n\t\t\tif err == nil {\n\t\t\t\treturn c, true\n\t\t\t}\n\t\t}\n\t}\n\treturn 0, false\n}\n\nvar emptyBody = ioutil.NopCloser(strings.NewReader(\"\"))\n\n// Reader reads a Cloud Storage object.\n// It implements io.Reader.\n//\n// Typically, a Reader computes the CRC of the downloaded content and compares it to\n// the stored CRC, returning an error from Read if there is a mismatch. This integrity check\n// is skipped if transcoding occurs. See https://cloud.google.com/storage/docs/transcoding.\ntype Reader struct {\n\tAttrs              ReaderObjectAttrs\n\tbody               io.ReadCloser\n\tseen, remain, size int64\n\tcheckCRC           bool   // should we check the CRC?\n\twantCRC            uint32 // the CRC32c value the server sent in the header\n\tgotCRC             uint32 // running crc\n\treopen             func(seen int64) (*http.Response, error)\n}\n\n// Close closes the Reader. It must be called when done reading.\nfunc (r *Reader) Close() error {\n\treturn r.body.Close()\n}\n\nfunc (r *Reader) Read(p []byte) (int, error) {\n\tn, err := r.readWithRetry(p)\n\tif r.remain != -1 {\n\t\tr.remain -= int64(n)\n\t}\n\tif r.checkCRC {\n\t\tr.gotCRC = crc32.Update(r.gotCRC, crc32cTable, p[:n])\n\t\t// Check CRC here. It would be natural to check it in Close, but\n\t\t// everybody defers Close on the assumption that it doesn't return\n\t\t// anything worth looking at.\n\t\tif err == io.EOF {\n\t\t\tif r.gotCRC != r.wantCRC {\n\t\t\t\treturn n, fmt.Errorf(\"storage: bad CRC on read: got %d, want %d\",\n\t\t\t\t\tr.gotCRC, r.wantCRC)\n\t\t\t}\n\t\t}\n\t}\n\treturn n, err\n}\n\nfunc (r *Reader) readWithRetry(p []byte) (int, error) {\n\tn := 0\n\tfor len(p[n:]) > 0 {\n\t\tm, err := r.body.Read(p[n:])\n\t\tn += m\n\t\tr.seen += int64(m)\n\t\tif !shouldRetryRead(err) {\n\t\t\treturn n, err\n\t\t}\n\t\t// Read failed, but we will try again. Send a ranged read request that takes\n\t\t// into account the number of bytes we've already seen.\n\t\tres, err := r.reopen(r.seen)\n\t\tif err != nil {\n\t\t\t// reopen already retries\n\t\t\treturn n, err\n\t\t}\n\t\tr.body.Close()\n\t\tr.body = res.Body\n\t}\n\treturn n, nil\n}\n\nfunc shouldRetryRead(err error) bool {\n\tif err == nil {\n\t\treturn false\n\t}\n\treturn strings.HasSuffix(err.Error(), \"INTERNAL_ERROR\") && strings.Contains(reflect.TypeOf(err).String(), \"http2\")\n}\n\n// Size returns the size of the object in bytes.\n// The returned value is always the same and is not affected by\n// calls to Read or Close.\n//\n// Deprecated: use Reader.Attrs.Size.\nfunc (r *Reader) Size() int64 {\n\treturn r.Attrs.Size\n}\n\n// Remain returns the number of bytes left to read, or -1 if unknown.\nfunc (r *Reader) Remain() int64 {\n\treturn r.remain\n}\n\n// ContentType returns the content type of the object.\n//\n// Deprecated: use Reader.Attrs.ContentType.\nfunc (r *Reader) ContentType() string {\n\treturn r.Attrs.ContentType\n}\n\n// ContentEncoding returns the content encoding of the object.\n//\n// Deprecated: use Reader.Attrs.ContentEncoding.\nfunc (r *Reader) ContentEncoding() string {\n\treturn r.Attrs.ContentEncoding\n}\n\n// CacheControl returns the cache control of the object.\n//\n// Deprecated: use Reader.Attrs.CacheControl.\nfunc (r *Reader) CacheControl() string {\n\treturn r.Attrs.CacheControl\n}\n\n// LastModified returns the value of the Last-Modified header.\n//\n// Deprecated: use Reader.Attrs.LastModified.\nfunc (r *Reader) LastModified() (time.Time, error) {\n\treturn r.Attrs.LastModified, nil\n}\n"
  },
  {
    "path": "vendor/cloud.google.com/go/storage/storage.go",
    "content": "// Copyright 2014 Google LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage storage\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"crypto\"\n\t\"crypto/rand\"\n\t\"crypto/rsa\"\n\t\"crypto/sha256\"\n\t\"crypto/x509\"\n\t\"encoding/base64\"\n\t\"encoding/hex\"\n\t\"encoding/pem\"\n\t\"errors\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"reflect\"\n\t\"regexp\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\t\"unicode/utf8\"\n\n\t\"cloud.google.com/go/internal/optional\"\n\t\"cloud.google.com/go/internal/trace\"\n\t\"cloud.google.com/go/internal/version\"\n\t\"google.golang.org/api/googleapi\"\n\t\"google.golang.org/api/option\"\n\traw \"google.golang.org/api/storage/v1\"\n\thtransport \"google.golang.org/api/transport/http\"\n)\n\nvar (\n\t// ErrBucketNotExist indicates that the bucket does not exist.\n\tErrBucketNotExist = errors.New(\"storage: bucket doesn't exist\")\n\t// ErrObjectNotExist indicates that the object does not exist.\n\tErrObjectNotExist = errors.New(\"storage: object doesn't exist\")\n)\n\nconst userAgent = \"gcloud-golang-storage/20151204\"\n\nconst (\n\t// ScopeFullControl grants permissions to manage your\n\t// data and permissions in Google Cloud Storage.\n\tScopeFullControl = raw.DevstorageFullControlScope\n\n\t// ScopeReadOnly grants permissions to\n\t// view your data in Google Cloud Storage.\n\tScopeReadOnly = raw.DevstorageReadOnlyScope\n\n\t// ScopeReadWrite grants permissions to manage your\n\t// data in Google Cloud Storage.\n\tScopeReadWrite = raw.DevstorageReadWriteScope\n)\n\nvar xGoogHeader = fmt.Sprintf(\"gl-go/%s gccl/%s\", version.Go(), version.Repo)\n\nfunc setClientHeader(headers http.Header) {\n\theaders.Set(\"x-goog-api-client\", xGoogHeader)\n}\n\n// Client is a client for interacting with Google Cloud Storage.\n//\n// Clients should be reused instead of created as needed.\n// The methods of Client are safe for concurrent use by multiple goroutines.\ntype Client struct {\n\thc  *http.Client\n\traw *raw.Service\n}\n\n// NewClient creates a new Google Cloud Storage client.\n// The default scope is ScopeFullControl. To use a different scope, like ScopeReadOnly, use option.WithScopes.\nfunc NewClient(ctx context.Context, opts ...option.ClientOption) (*Client, error) {\n\to := []option.ClientOption{\n\t\toption.WithScopes(ScopeFullControl),\n\t\toption.WithUserAgent(userAgent),\n\t}\n\topts = append(o, opts...)\n\thc, ep, err := htransport.NewClient(ctx, opts...)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"dialing: %v\", err)\n\t}\n\trawService, err := raw.New(hc)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"storage client: %v\", err)\n\t}\n\tif ep != \"\" {\n\t\trawService.BasePath = ep\n\t}\n\treturn &Client{\n\t\thc:  hc,\n\t\traw: rawService,\n\t}, nil\n}\n\n// Close closes the Client.\n//\n// Close need not be called at program exit.\nfunc (c *Client) Close() error {\n\t// Set fields to nil so that subsequent uses will panic.\n\tc.hc = nil\n\tc.raw = nil\n\treturn nil\n}\n\n// SigningScheme determines the API version to use when signing URLs.\ntype SigningScheme int\n\nconst (\n\t// SigningSchemeDefault is presently V2 and will change to V4 in the future.\n\tSigningSchemeDefault SigningScheme = iota\n\n\t// SigningSchemeV2 uses the V2 scheme to sign URLs.\n\tSigningSchemeV2\n\n\t// SigningSchemeV4 uses the V4 scheme to sign URLs.\n\tSigningSchemeV4\n)\n\n// SignedURLOptions allows you to restrict the access to the signed URL.\ntype SignedURLOptions struct {\n\t// GoogleAccessID represents the authorizer of the signed URL generation.\n\t// It is typically the Google service account client email address from\n\t// the Google Developers Console in the form of \"xxx@developer.gserviceaccount.com\".\n\t// Required.\n\tGoogleAccessID string\n\n\t// PrivateKey is the Google service account private key. It is obtainable\n\t// from the Google Developers Console.\n\t// At https://console.developers.google.com/project/<your-project-id>/apiui/credential,\n\t// create a service account client ID or reuse one of your existing service account\n\t// credentials. Click on the \"Generate new P12 key\" to generate and download\n\t// a new private key. Once you download the P12 file, use the following command\n\t// to convert it into a PEM file.\n\t//\n\t//    $ openssl pkcs12 -in key.p12 -passin pass:notasecret -out key.pem -nodes\n\t//\n\t// Provide the contents of the PEM file as a byte slice.\n\t// Exactly one of PrivateKey or SignBytes must be non-nil.\n\tPrivateKey []byte\n\n\t// SignBytes is a function for implementing custom signing. For example, if\n\t// your application is running on Google App Engine, you can use\n\t// appengine's internal signing function:\n\t//     ctx := appengine.NewContext(request)\n\t//     acc, _ := appengine.ServiceAccount(ctx)\n\t//     url, err := SignedURL(\"bucket\", \"object\", &SignedURLOptions{\n\t//     \tGoogleAccessID: acc,\n\t//     \tSignBytes: func(b []byte) ([]byte, error) {\n\t//     \t\t_, signedBytes, err := appengine.SignBytes(ctx, b)\n\t//     \t\treturn signedBytes, err\n\t//     \t},\n\t//     \t// etc.\n\t//     })\n\t//\n\t// Exactly one of PrivateKey or SignBytes must be non-nil.\n\tSignBytes func([]byte) ([]byte, error)\n\n\t// Method is the HTTP method to be used with the signed URL.\n\t// Signed URLs can be used with GET, HEAD, PUT, and DELETE requests.\n\t// Required.\n\tMethod string\n\n\t// Expires is the expiration time on the signed URL. It must be\n\t// a datetime in the future. For SigningSchemeV4, the expiration may be no\n\t// more than seven days in the future.\n\t// Required.\n\tExpires time.Time\n\n\t// ContentType is the content type header the client must provide\n\t// to use the generated signed URL.\n\t// Optional.\n\tContentType string\n\n\t// Headers is a list of extension headers the client must provide\n\t// in order to use the generated signed URL.\n\t// Optional.\n\tHeaders []string\n\n\t// MD5 is the base64 encoded MD5 checksum of the file.\n\t// If provided, the client should provide the exact value on the request\n\t// header in order to use the signed URL.\n\t// Optional.\n\tMD5 string\n\n\t// Scheme determines the version of URL signing to use. Default is\n\t// SigningSchemeV2.\n\tScheme SigningScheme\n}\n\nvar (\n\ttabRegex = regexp.MustCompile(`[\\t]+`)\n\t// I was tempted to call this spacex. :)\n\tspaceRegex = regexp.MustCompile(` +`)\n\n\tcanonicalHeaderRegexp    = regexp.MustCompile(`(?i)^(x-goog-[^:]+):(.*)?$`)\n\texcludedCanonicalHeaders = map[string]bool{\n\t\t\"x-goog-encryption-key\":        true,\n\t\t\"x-goog-encryption-key-sha256\": true,\n\t}\n)\n\n// v2SanitizeHeaders applies the specifications for canonical extension headers at\n// https://cloud.google.com/storage/docs/access-control/signed-urls#about-canonical-extension-headers.\nfunc v2SanitizeHeaders(hdrs []string) []string {\n\theaderMap := map[string][]string{}\n\tfor _, hdr := range hdrs {\n\t\t// No leading or trailing whitespaces.\n\t\tsanitizedHeader := strings.TrimSpace(hdr)\n\n\t\tvar header, value string\n\t\t// Only keep canonical headers, discard any others.\n\t\theaderMatches := canonicalHeaderRegexp.FindStringSubmatch(sanitizedHeader)\n\t\tif len(headerMatches) == 0 {\n\t\t\tcontinue\n\t\t}\n\t\theader = headerMatches[1]\n\t\tvalue = headerMatches[2]\n\n\t\theader = strings.ToLower(strings.TrimSpace(header))\n\t\tvalue = strings.TrimSpace(value)\n\n\t\tif excludedCanonicalHeaders[header] {\n\t\t\t// Do not keep any deliberately excluded canonical headers when signing.\n\t\t\tcontinue\n\t\t}\n\n\t\tif len(value) > 0 {\n\t\t\t// Remove duplicate headers by appending the values of duplicates\n\t\t\t// in their order of appearance.\n\t\t\theaderMap[header] = append(headerMap[header], value)\n\t\t}\n\t}\n\n\tvar sanitizedHeaders []string\n\tfor header, values := range headerMap {\n\t\t// There should be no spaces around the colon separating the header name\n\t\t// from the header value or around the values themselves. The values\n\t\t// should be separated by commas.\n\t\t//\n\t\t// NOTE: The semantics for headers without a value are not clear.\n\t\t// However from specifications these should be edge-cases anyway and we\n\t\t// should assume that there will be no canonical headers using empty\n\t\t// values. Any such headers are discarded at the regexp stage above.\n\t\tsanitizedHeaders = append(sanitizedHeaders, fmt.Sprintf(\"%s:%s\", header, strings.Join(values, \",\")))\n\t}\n\tsort.Strings(sanitizedHeaders)\n\treturn sanitizedHeaders\n}\n\n// v4SanitizeHeaders applies the specifications for canonical extension headers\n// at https://cloud.google.com/storage/docs/access-control/signed-urls#about-canonical-extension-headers.\n//\n// V4 does a couple things differently from V2:\n// - Headers get sorted by key, instead of by key:value. We do this in\n//   signedURLV4.\n// - There's no canonical regexp: we simply split headers on :.\n// - We don't exclude canonical headers.\n// - We replace leading and trailing spaces in header values, like v2, but also\n//   all intermediate space duplicates get stripped. That is, there's only ever\n//   a single consecutive space.\nfunc v4SanitizeHeaders(hdrs []string) []string {\n\theaderMap := map[string][]string{}\n\tfor _, hdr := range hdrs {\n\t\t// No leading or trailing whitespaces.\n\t\tsanitizedHeader := strings.TrimSpace(hdr)\n\n\t\tvar key, value string\n\t\theaderMatches := strings.Split(sanitizedHeader, \":\")\n\t\tif len(headerMatches) < 2 {\n\t\t\tcontinue\n\t\t}\n\n\t\tkey = headerMatches[0]\n\t\tvalue = headerMatches[1]\n\n\t\tkey = strings.ToLower(strings.TrimSpace(key))\n\t\tvalue = strings.TrimSpace(value)\n\t\tvalue = string(spaceRegex.ReplaceAll([]byte(value), []byte(\" \")))\n\t\tvalue = string(tabRegex.ReplaceAll([]byte(value), []byte(\"\\t\")))\n\n\t\tif len(value) > 0 {\n\t\t\t// Remove duplicate headers by appending the values of duplicates\n\t\t\t// in their order of appearance.\n\t\t\theaderMap[key] = append(headerMap[key], value)\n\t\t}\n\t}\n\n\tvar sanitizedHeaders []string\n\tfor header, values := range headerMap {\n\t\t// There should be no spaces around the colon separating the header name\n\t\t// from the header value or around the values themselves. The values\n\t\t// should be separated by commas.\n\t\t//\n\t\t// NOTE: The semantics for headers without a value are not clear.\n\t\t// However from specifications these should be edge-cases anyway and we\n\t\t// should assume that there will be no canonical headers using empty\n\t\t// values. Any such headers are discarded at the regexp stage above.\n\t\tsanitizedHeaders = append(sanitizedHeaders, fmt.Sprintf(\"%s:%s\", header, strings.Join(values, \",\")))\n\t}\n\treturn sanitizedHeaders\n}\n\n// SignedURL returns a URL for the specified object. Signed URLs allow\n// the users access to a restricted resource for a limited time without having a\n// Google account or signing in. For more information about the signed\n// URLs, see https://cloud.google.com/storage/docs/accesscontrol#Signed-URLs.\nfunc SignedURL(bucket, name string, opts *SignedURLOptions) (string, error) {\n\tnow := utcNow()\n\tif err := validateOptions(opts, now); err != nil {\n\t\treturn \"\", err\n\t}\n\n\tswitch opts.Scheme {\n\tcase SigningSchemeV2:\n\t\topts.Headers = v2SanitizeHeaders(opts.Headers)\n\t\treturn signedURLV2(bucket, name, opts)\n\tcase SigningSchemeV4:\n\t\topts.Headers = v4SanitizeHeaders(opts.Headers)\n\t\treturn signedURLV4(bucket, name, opts, now)\n\tdefault: // SigningSchemeDefault\n\t\topts.Headers = v2SanitizeHeaders(opts.Headers)\n\t\treturn signedURLV2(bucket, name, opts)\n\t}\n}\n\nfunc validateOptions(opts *SignedURLOptions, now time.Time) error {\n\tif opts == nil {\n\t\treturn errors.New(\"storage: missing required SignedURLOptions\")\n\t}\n\tif opts.GoogleAccessID == \"\" {\n\t\treturn errors.New(\"storage: missing required GoogleAccessID\")\n\t}\n\tif (opts.PrivateKey == nil) == (opts.SignBytes == nil) {\n\t\treturn errors.New(\"storage: exactly one of PrivateKey or SignedBytes must be set\")\n\t}\n\tif opts.Method == \"\" {\n\t\treturn errors.New(\"storage: missing required method option\")\n\t}\n\tif opts.Expires.IsZero() {\n\t\treturn errors.New(\"storage: missing required expires option\")\n\t}\n\tif opts.MD5 != \"\" {\n\t\tmd5, err := base64.StdEncoding.DecodeString(opts.MD5)\n\t\tif err != nil || len(md5) != 16 {\n\t\t\treturn errors.New(\"storage: invalid MD5 checksum\")\n\t\t}\n\t}\n\tif opts.Scheme == SigningSchemeV4 {\n\t\tcutoff := now.Add(604801 * time.Second) // 7 days + 1 second\n\t\tif !opts.Expires.Before(cutoff) {\n\t\t\treturn errors.New(\"storage: expires must be within seven days from now\")\n\t\t}\n\t}\n\treturn nil\n}\n\nconst (\n\tiso8601      = \"20060102T150405Z\"\n\tyearMonthDay = \"20060102\"\n)\n\n// utcNow returns the current time in UTC and is a variable to allow for\n// reassignment in tests to provide deterministic signed URL values.\nvar utcNow = func() time.Time {\n\treturn time.Now().UTC()\n}\n\n// extractHeaderNames takes in a series of key:value headers and returns the\n// header names only.\nfunc extractHeaderNames(kvs []string) []string {\n\tvar res []string\n\tfor _, header := range kvs {\n\t\tnameValue := strings.Split(header, \":\")\n\t\tres = append(res, nameValue[0])\n\t}\n\treturn res\n}\n\n// signedURLV4 creates a signed URL using the sigV4 algorithm.\nfunc signedURLV4(bucket, name string, opts *SignedURLOptions, now time.Time) (string, error) {\n\tbuf := &bytes.Buffer{}\n\tfmt.Fprintf(buf, \"%s\\n\", opts.Method)\n\tu := &url.URL{Path: bucket}\n\tif name != \"\" {\n\t\tu.Path += \"/\" + name\n\t}\n\n\t// Note: we have to add a / here because GCS does so auto-magically, despite\n\t// Go's EscapedPath not doing so (and we have to exactly match their\n\t// canonical query).\n\tfmt.Fprintf(buf, \"/%s\\n\", u.EscapedPath())\n\n\theaderNames := append(extractHeaderNames(opts.Headers), \"host\")\n\tif opts.ContentType != \"\" {\n\t\theaderNames = append(headerNames, \"content-type\")\n\t}\n\tif opts.MD5 != \"\" {\n\t\theaderNames = append(headerNames, \"content-md5\")\n\t}\n\tsort.Strings(headerNames)\n\tsignedHeaders := strings.Join(headerNames, \";\")\n\ttimestamp := now.Format(iso8601)\n\tcredentialScope := fmt.Sprintf(\"%s/auto/storage/goog4_request\", now.Format(yearMonthDay))\n\tcanonicalQueryString := url.Values{\n\t\t\"X-Goog-Algorithm\":     {\"GOOG4-RSA-SHA256\"},\n\t\t\"X-Goog-Credential\":    {fmt.Sprintf(\"%s/%s\", opts.GoogleAccessID, credentialScope)},\n\t\t\"X-Goog-Date\":          {timestamp},\n\t\t\"X-Goog-Expires\":       {fmt.Sprintf(\"%d\", int(opts.Expires.Sub(now).Seconds()))},\n\t\t\"X-Goog-SignedHeaders\": {signedHeaders},\n\t}\n\tfmt.Fprintf(buf, \"%s\\n\", canonicalQueryString.Encode())\n\n\tu.Host = \"storage.googleapis.com\"\n\n\tvar headersWithValue []string\n\theadersWithValue = append(headersWithValue, \"host:\"+u.Host)\n\theadersWithValue = append(headersWithValue, opts.Headers...)\n\tif opts.ContentType != \"\" {\n\t\theadersWithValue = append(headersWithValue, \"content-type:\"+strings.TrimSpace(opts.ContentType))\n\t}\n\tif opts.MD5 != \"\" {\n\t\theadersWithValue = append(headersWithValue, \"content-md5:\"+strings.TrimSpace(opts.MD5))\n\t}\n\tcanonicalHeaders := strings.Join(sortHeadersByKey(headersWithValue), \"\\n\")\n\tfmt.Fprintf(buf, \"%s\\n\\n\", canonicalHeaders)\n\tfmt.Fprintf(buf, \"%s\\n\", signedHeaders)\n\tfmt.Fprint(buf, \"UNSIGNED-PAYLOAD\")\n\n\tsum := sha256.Sum256(buf.Bytes())\n\thexDigest := hex.EncodeToString(sum[:])\n\tsignBuf := &bytes.Buffer{}\n\tfmt.Fprint(signBuf, \"GOOG4-RSA-SHA256\\n\")\n\tfmt.Fprintf(signBuf, \"%s\\n\", timestamp)\n\tfmt.Fprintf(signBuf, \"%s\\n\", credentialScope)\n\tfmt.Fprintf(signBuf, \"%s\", hexDigest)\n\n\tsignBytes := opts.SignBytes\n\tif opts.PrivateKey != nil {\n\t\tkey, err := parseKey(opts.PrivateKey)\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\t\tsignBytes = func(b []byte) ([]byte, error) {\n\t\t\tsum := sha256.Sum256(b)\n\t\t\treturn rsa.SignPKCS1v15(\n\t\t\t\trand.Reader,\n\t\t\t\tkey,\n\t\t\t\tcrypto.SHA256,\n\t\t\t\tsum[:],\n\t\t\t)\n\t\t}\n\t}\n\tb, err := signBytes(signBuf.Bytes())\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tsignature := hex.EncodeToString(b)\n\tcanonicalQueryString.Set(\"X-Goog-Signature\", string(signature))\n\tu.Scheme = \"https\"\n\tu.RawQuery = canonicalQueryString.Encode()\n\treturn u.String(), nil\n}\n\n// takes a list of headerKey:headervalue1,headervalue2,etc and sorts by header\n// key.\nfunc sortHeadersByKey(hdrs []string) []string {\n\theadersMap := map[string]string{}\n\tvar headersKeys []string\n\tfor _, h := range hdrs {\n\t\tparts := strings.Split(h, \":\")\n\t\tk := parts[0]\n\t\tv := parts[1]\n\t\theadersMap[k] = v\n\t\theadersKeys = append(headersKeys, k)\n\t}\n\tsort.Strings(headersKeys)\n\tvar sorted []string\n\tfor _, k := range headersKeys {\n\t\tv := headersMap[k]\n\t\tsorted = append(sorted, fmt.Sprintf(\"%s:%s\", k, v))\n\t}\n\treturn sorted\n}\n\nfunc signedURLV2(bucket, name string, opts *SignedURLOptions) (string, error) {\n\tsignBytes := opts.SignBytes\n\tif opts.PrivateKey != nil {\n\t\tkey, err := parseKey(opts.PrivateKey)\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\t\tsignBytes = func(b []byte) ([]byte, error) {\n\t\t\tsum := sha256.Sum256(b)\n\t\t\treturn rsa.SignPKCS1v15(\n\t\t\t\trand.Reader,\n\t\t\t\tkey,\n\t\t\t\tcrypto.SHA256,\n\t\t\t\tsum[:],\n\t\t\t)\n\t\t}\n\t}\n\n\tu := &url.URL{\n\t\tPath: fmt.Sprintf(\"/%s/%s\", bucket, name),\n\t}\n\n\tbuf := &bytes.Buffer{}\n\tfmt.Fprintf(buf, \"%s\\n\", opts.Method)\n\tfmt.Fprintf(buf, \"%s\\n\", opts.MD5)\n\tfmt.Fprintf(buf, \"%s\\n\", opts.ContentType)\n\tfmt.Fprintf(buf, \"%d\\n\", opts.Expires.Unix())\n\tif len(opts.Headers) > 0 {\n\t\tfmt.Fprintf(buf, \"%s\\n\", strings.Join(opts.Headers, \"\\n\"))\n\t}\n\tfmt.Fprintf(buf, \"%s\", u.String())\n\n\tb, err := signBytes(buf.Bytes())\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tencoded := base64.StdEncoding.EncodeToString(b)\n\tu.Scheme = \"https\"\n\tu.Host = \"storage.googleapis.com\"\n\tq := u.Query()\n\tq.Set(\"GoogleAccessId\", opts.GoogleAccessID)\n\tq.Set(\"Expires\", fmt.Sprintf(\"%d\", opts.Expires.Unix()))\n\tq.Set(\"Signature\", string(encoded))\n\tu.RawQuery = q.Encode()\n\treturn u.String(), nil\n}\n\n// ObjectHandle provides operations on an object in a Google Cloud Storage bucket.\n// Use BucketHandle.Object to get a handle.\ntype ObjectHandle struct {\n\tc              *Client\n\tbucket         string\n\tobject         string\n\tacl            ACLHandle\n\tgen            int64 // a negative value indicates latest\n\tconds          *Conditions\n\tencryptionKey  []byte // AES-256 key\n\tuserProject    string // for requester-pays buckets\n\treadCompressed bool   // Accept-Encoding: gzip\n}\n\n// ACL provides access to the object's access control list.\n// This controls who can read and write this object.\n// This call does not perform any network operations.\nfunc (o *ObjectHandle) ACL() *ACLHandle {\n\treturn &o.acl\n}\n\n// Generation returns a new ObjectHandle that operates on a specific generation\n// of the object.\n// By default, the handle operates on the latest generation. Not\n// all operations work when given a specific generation; check the API\n// endpoints at https://cloud.google.com/storage/docs/json_api/ for details.\nfunc (o *ObjectHandle) Generation(gen int64) *ObjectHandle {\n\to2 := *o\n\to2.gen = gen\n\treturn &o2\n}\n\n// If returns a new ObjectHandle that applies a set of preconditions.\n// Preconditions already set on the ObjectHandle are ignored.\n// Operations on the new handle will return an error if the preconditions are not\n// satisfied. See https://cloud.google.com/storage/docs/generations-preconditions\n// for more details.\nfunc (o *ObjectHandle) If(conds Conditions) *ObjectHandle {\n\to2 := *o\n\to2.conds = &conds\n\treturn &o2\n}\n\n// Key returns a new ObjectHandle that uses the supplied encryption\n// key to encrypt and decrypt the object's contents.\n//\n// Encryption key must be a 32-byte AES-256 key.\n// See https://cloud.google.com/storage/docs/encryption for details.\nfunc (o *ObjectHandle) Key(encryptionKey []byte) *ObjectHandle {\n\to2 := *o\n\to2.encryptionKey = encryptionKey\n\treturn &o2\n}\n\n// Attrs returns meta information about the object.\n// ErrObjectNotExist will be returned if the object is not found.\nfunc (o *ObjectHandle) Attrs(ctx context.Context) (attrs *ObjectAttrs, err error) {\n\tctx = trace.StartSpan(ctx, \"cloud.google.com/go/storage.Object.Attrs\")\n\tdefer func() { trace.EndSpan(ctx, err) }()\n\n\tif err := o.validate(); err != nil {\n\t\treturn nil, err\n\t}\n\tcall := o.c.raw.Objects.Get(o.bucket, o.object).Projection(\"full\").Context(ctx)\n\tif err := applyConds(\"Attrs\", o.gen, o.conds, call); err != nil {\n\t\treturn nil, err\n\t}\n\tif o.userProject != \"\" {\n\t\tcall.UserProject(o.userProject)\n\t}\n\tif err := setEncryptionHeaders(call.Header(), o.encryptionKey, false); err != nil {\n\t\treturn nil, err\n\t}\n\tvar obj *raw.Object\n\tsetClientHeader(call.Header())\n\terr = runWithRetry(ctx, func() error { obj, err = call.Do(); return err })\n\tif e, ok := err.(*googleapi.Error); ok && e.Code == http.StatusNotFound {\n\t\treturn nil, ErrObjectNotExist\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn newObject(obj), nil\n}\n\n// Update updates an object with the provided attributes.\n// All zero-value attributes are ignored.\n// ErrObjectNotExist will be returned if the object is not found.\nfunc (o *ObjectHandle) Update(ctx context.Context, uattrs ObjectAttrsToUpdate) (oa *ObjectAttrs, err error) {\n\tctx = trace.StartSpan(ctx, \"cloud.google.com/go/storage.Object.Update\")\n\tdefer func() { trace.EndSpan(ctx, err) }()\n\n\tif err := o.validate(); err != nil {\n\t\treturn nil, err\n\t}\n\tvar attrs ObjectAttrs\n\t// Lists of fields to send, and set to null, in the JSON.\n\tvar forceSendFields, nullFields []string\n\tif uattrs.ContentType != nil {\n\t\tattrs.ContentType = optional.ToString(uattrs.ContentType)\n\t\t// For ContentType, sending the empty string is a no-op.\n\t\t// Instead we send a null.\n\t\tif attrs.ContentType == \"\" {\n\t\t\tnullFields = append(nullFields, \"ContentType\")\n\t\t} else {\n\t\t\tforceSendFields = append(forceSendFields, \"ContentType\")\n\t\t}\n\t}\n\tif uattrs.ContentLanguage != nil {\n\t\tattrs.ContentLanguage = optional.ToString(uattrs.ContentLanguage)\n\t\t// For ContentLanguage it's an error to send the empty string.\n\t\t// Instead we send a null.\n\t\tif attrs.ContentLanguage == \"\" {\n\t\t\tnullFields = append(nullFields, \"ContentLanguage\")\n\t\t} else {\n\t\t\tforceSendFields = append(forceSendFields, \"ContentLanguage\")\n\t\t}\n\t}\n\tif uattrs.ContentEncoding != nil {\n\t\tattrs.ContentEncoding = optional.ToString(uattrs.ContentEncoding)\n\t\tforceSendFields = append(forceSendFields, \"ContentEncoding\")\n\t}\n\tif uattrs.ContentDisposition != nil {\n\t\tattrs.ContentDisposition = optional.ToString(uattrs.ContentDisposition)\n\t\tforceSendFields = append(forceSendFields, \"ContentDisposition\")\n\t}\n\tif uattrs.CacheControl != nil {\n\t\tattrs.CacheControl = optional.ToString(uattrs.CacheControl)\n\t\tforceSendFields = append(forceSendFields, \"CacheControl\")\n\t}\n\tif uattrs.EventBasedHold != nil {\n\t\tattrs.EventBasedHold = optional.ToBool(uattrs.EventBasedHold)\n\t\tforceSendFields = append(forceSendFields, \"EventBasedHold\")\n\t}\n\tif uattrs.TemporaryHold != nil {\n\t\tattrs.TemporaryHold = optional.ToBool(uattrs.TemporaryHold)\n\t\tforceSendFields = append(forceSendFields, \"TemporaryHold\")\n\t}\n\tif uattrs.Metadata != nil {\n\t\tattrs.Metadata = uattrs.Metadata\n\t\tif len(attrs.Metadata) == 0 {\n\t\t\t// Sending the empty map is a no-op. We send null instead.\n\t\t\tnullFields = append(nullFields, \"Metadata\")\n\t\t} else {\n\t\t\tforceSendFields = append(forceSendFields, \"Metadata\")\n\t\t}\n\t}\n\tif uattrs.ACL != nil {\n\t\tattrs.ACL = uattrs.ACL\n\t\t// It's an error to attempt to delete the ACL, so\n\t\t// we don't append to nullFields here.\n\t\tforceSendFields = append(forceSendFields, \"Acl\")\n\t}\n\trawObj := attrs.toRawObject(o.bucket)\n\trawObj.ForceSendFields = forceSendFields\n\trawObj.NullFields = nullFields\n\tcall := o.c.raw.Objects.Patch(o.bucket, o.object, rawObj).Projection(\"full\").Context(ctx)\n\tif err := applyConds(\"Update\", o.gen, o.conds, call); err != nil {\n\t\treturn nil, err\n\t}\n\tif o.userProject != \"\" {\n\t\tcall.UserProject(o.userProject)\n\t}\n\tif uattrs.PredefinedACL != \"\" {\n\t\tcall.PredefinedAcl(uattrs.PredefinedACL)\n\t}\n\tif err := setEncryptionHeaders(call.Header(), o.encryptionKey, false); err != nil {\n\t\treturn nil, err\n\t}\n\tvar obj *raw.Object\n\tsetClientHeader(call.Header())\n\terr = runWithRetry(ctx, func() error { obj, err = call.Do(); return err })\n\tif e, ok := err.(*googleapi.Error); ok && e.Code == http.StatusNotFound {\n\t\treturn nil, ErrObjectNotExist\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn newObject(obj), nil\n}\n\n// BucketName returns the name of the bucket.\nfunc (o *ObjectHandle) BucketName() string {\n\treturn o.bucket\n}\n\n// ObjectName returns the name of the object.\nfunc (o *ObjectHandle) ObjectName() string {\n\treturn o.object\n}\n\n// ObjectAttrsToUpdate is used to update the attributes of an object.\n// Only fields set to non-nil values will be updated.\n// Set a field to its zero value to delete it.\n//\n// For example, to change ContentType and delete ContentEncoding and\n// Metadata, use\n//    ObjectAttrsToUpdate{\n//        ContentType: \"text/html\",\n//        ContentEncoding: \"\",\n//        Metadata: map[string]string{},\n//    }\ntype ObjectAttrsToUpdate struct {\n\tEventBasedHold     optional.Bool\n\tTemporaryHold      optional.Bool\n\tContentType        optional.String\n\tContentLanguage    optional.String\n\tContentEncoding    optional.String\n\tContentDisposition optional.String\n\tCacheControl       optional.String\n\tMetadata           map[string]string // set to map[string]string{} to delete\n\tACL                []ACLRule\n\n\t// If not empty, applies a predefined set of access controls. ACL must be nil.\n\t// See https://cloud.google.com/storage/docs/json_api/v1/objects/patch.\n\tPredefinedACL string\n}\n\n// Delete deletes the single specified object.\nfunc (o *ObjectHandle) Delete(ctx context.Context) error {\n\tif err := o.validate(); err != nil {\n\t\treturn err\n\t}\n\tcall := o.c.raw.Objects.Delete(o.bucket, o.object).Context(ctx)\n\tif err := applyConds(\"Delete\", o.gen, o.conds, call); err != nil {\n\t\treturn err\n\t}\n\tif o.userProject != \"\" {\n\t\tcall.UserProject(o.userProject)\n\t}\n\t// Encryption doesn't apply to Delete.\n\tsetClientHeader(call.Header())\n\terr := runWithRetry(ctx, func() error { return call.Do() })\n\tswitch e := err.(type) {\n\tcase nil:\n\t\treturn nil\n\tcase *googleapi.Error:\n\t\tif e.Code == http.StatusNotFound {\n\t\t\treturn ErrObjectNotExist\n\t\t}\n\t}\n\treturn err\n}\n\n// ReadCompressed when true causes the read to happen without decompressing.\nfunc (o *ObjectHandle) ReadCompressed(compressed bool) *ObjectHandle {\n\to2 := *o\n\to2.readCompressed = compressed\n\treturn &o2\n}\n\n// NewWriter returns a storage Writer that writes to the GCS object\n// associated with this ObjectHandle.\n//\n// A new object will be created unless an object with this name already exists.\n// Otherwise any previous object with the same name will be replaced.\n// The object will not be available (and any previous object will remain)\n// until Close has been called.\n//\n// Attributes can be set on the object by modifying the returned Writer's\n// ObjectAttrs field before the first call to Write. If no ContentType\n// attribute is specified, the content type will be automatically sniffed\n// using net/http.DetectContentType.\n//\n// It is the caller's responsibility to call Close when writing is done. To\n// stop writing without saving the data, cancel the context.\nfunc (o *ObjectHandle) NewWriter(ctx context.Context) *Writer {\n\treturn &Writer{\n\t\tctx:         ctx,\n\t\to:           o,\n\t\tdonec:       make(chan struct{}),\n\t\tObjectAttrs: ObjectAttrs{Name: o.object},\n\t\tChunkSize:   googleapi.DefaultUploadChunkSize,\n\t}\n}\n\nfunc (o *ObjectHandle) validate() error {\n\tif o.bucket == \"\" {\n\t\treturn errors.New(\"storage: bucket name is empty\")\n\t}\n\tif o.object == \"\" {\n\t\treturn errors.New(\"storage: object name is empty\")\n\t}\n\tif !utf8.ValidString(o.object) {\n\t\treturn fmt.Errorf(\"storage: object name %q is not valid UTF-8\", o.object)\n\t}\n\treturn nil\n}\n\n// parseKey converts the binary contents of a private key file to an\n// *rsa.PrivateKey. It detects whether the private key is in a PEM container or\n// not. If so, it extracts the private key from PEM container before\n// conversion. It only supports PEM containers with no passphrase.\nfunc parseKey(key []byte) (*rsa.PrivateKey, error) {\n\tif block, _ := pem.Decode(key); block != nil {\n\t\tkey = block.Bytes\n\t}\n\tparsedKey, err := x509.ParsePKCS8PrivateKey(key)\n\tif err != nil {\n\t\tparsedKey, err = x509.ParsePKCS1PrivateKey(key)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\tparsed, ok := parsedKey.(*rsa.PrivateKey)\n\tif !ok {\n\t\treturn nil, errors.New(\"oauth2: private key is invalid\")\n\t}\n\treturn parsed, nil\n}\n\n// toRawObject copies the editable attributes from o to the raw library's Object type.\nfunc (o *ObjectAttrs) toRawObject(bucket string) *raw.Object {\n\tvar ret string\n\tif !o.RetentionExpirationTime.IsZero() {\n\t\tret = o.RetentionExpirationTime.Format(time.RFC3339)\n\t}\n\treturn &raw.Object{\n\t\tBucket:                  bucket,\n\t\tName:                    o.Name,\n\t\tEventBasedHold:          o.EventBasedHold,\n\t\tTemporaryHold:           o.TemporaryHold,\n\t\tRetentionExpirationTime: ret,\n\t\tContentType:             o.ContentType,\n\t\tContentEncoding:         o.ContentEncoding,\n\t\tContentLanguage:         o.ContentLanguage,\n\t\tCacheControl:            o.CacheControl,\n\t\tContentDisposition:      o.ContentDisposition,\n\t\tStorageClass:            o.StorageClass,\n\t\tAcl:                     toRawObjectACL(o.ACL),\n\t\tMetadata:                o.Metadata,\n\t}\n}\n\n// ObjectAttrs represents the metadata for a Google Cloud Storage (GCS) object.\ntype ObjectAttrs struct {\n\t// Bucket is the name of the bucket containing this GCS object.\n\t// This field is read-only.\n\tBucket string\n\n\t// Name is the name of the object within the bucket.\n\t// This field is read-only.\n\tName string\n\n\t// ContentType is the MIME type of the object's content.\n\tContentType string\n\n\t// ContentLanguage is the content language of the object's content.\n\tContentLanguage string\n\n\t// CacheControl is the Cache-Control header to be sent in the response\n\t// headers when serving the object data.\n\tCacheControl string\n\n\t// EventBasedHold specifies whether an object is under event-based hold. New\n\t// objects created in a bucket whose DefaultEventBasedHold is set will\n\t// default to that value.\n\tEventBasedHold bool\n\n\t// TemporaryHold specifies whether an object is under temporary hold. While\n\t// this flag is set to true, the object is protected against deletion and\n\t// overwrites.\n\tTemporaryHold bool\n\n\t// RetentionExpirationTime is a server-determined value that specifies the\n\t// earliest time that the object's retention period expires.\n\t// This is a read-only field.\n\tRetentionExpirationTime time.Time\n\n\t// ACL is the list of access control rules for the object.\n\tACL []ACLRule\n\n\t// If not empty, applies a predefined set of access controls. It should be set\n\t// only when writing, copying or composing an object. When copying or composing,\n\t// it acts as the destinationPredefinedAcl parameter.\n\t// PredefinedACL is always empty for ObjectAttrs returned from the service.\n\t// See https://cloud.google.com/storage/docs/json_api/v1/objects/insert\n\t// for valid values.\n\tPredefinedACL string\n\n\t// Owner is the owner of the object. This field is read-only.\n\t//\n\t// If non-zero, it is in the form of \"user-<userId>\".\n\tOwner string\n\n\t// Size is the length of the object's content. This field is read-only.\n\tSize int64\n\n\t// ContentEncoding is the encoding of the object's content.\n\tContentEncoding string\n\n\t// ContentDisposition is the optional Content-Disposition header of the object\n\t// sent in the response headers.\n\tContentDisposition string\n\n\t// MD5 is the MD5 hash of the object's content. This field is read-only,\n\t// except when used from a Writer. If set on a Writer, the uploaded\n\t// data is rejected if its MD5 hash does not match this field.\n\tMD5 []byte\n\n\t// CRC32C is the CRC32 checksum of the object's content using\n\t// the Castagnoli93 polynomial. This field is read-only, except when\n\t// used from a Writer. If set on a Writer and Writer.SendCRC32C\n\t// is true, the uploaded data is rejected if its CRC32c hash does not\n\t// match this field.\n\tCRC32C uint32\n\n\t// MediaLink is an URL to the object's content. This field is read-only.\n\tMediaLink string\n\n\t// Metadata represents user-provided metadata, in key/value pairs.\n\t// It can be nil if no metadata is provided.\n\tMetadata map[string]string\n\n\t// Generation is the generation number of the object's content.\n\t// This field is read-only.\n\tGeneration int64\n\n\t// Metageneration is the version of the metadata for this\n\t// object at this generation. This field is used for preconditions\n\t// and for detecting changes in metadata. A metageneration number\n\t// is only meaningful in the context of a particular generation\n\t// of a particular object. This field is read-only.\n\tMetageneration int64\n\n\t// StorageClass is the storage class of the object.\n\t// This value defines how objects in the bucket are stored and\n\t// determines the SLA and the cost of storage. Typical values are\n\t// \"MULTI_REGIONAL\", \"REGIONAL\", \"NEARLINE\", \"COLDLINE\", \"STANDARD\"\n\t// and \"DURABLE_REDUCED_AVAILABILITY\".\n\t// It defaults to \"STANDARD\", which is equivalent to \"MULTI_REGIONAL\"\n\t// or \"REGIONAL\" depending on the bucket's location settings.\n\tStorageClass string\n\n\t// Created is the time the object was created. This field is read-only.\n\tCreated time.Time\n\n\t// Deleted is the time the object was deleted.\n\t// If not deleted, it is the zero value. This field is read-only.\n\tDeleted time.Time\n\n\t// Updated is the creation or modification time of the object.\n\t// For buckets with versioning enabled, changing an object's\n\t// metadata does not change this property. This field is read-only.\n\tUpdated time.Time\n\n\t// CustomerKeySHA256 is the base64-encoded SHA-256 hash of the\n\t// customer-supplied encryption key for the object. It is empty if there is\n\t// no customer-supplied encryption key.\n\t// See // https://cloud.google.com/storage/docs/encryption for more about\n\t// encryption in Google Cloud Storage.\n\tCustomerKeySHA256 string\n\n\t// Cloud KMS key name, in the form\n\t// projects/P/locations/L/keyRings/R/cryptoKeys/K, used to encrypt this object,\n\t// if the object is encrypted by such a key.\n\t//\n\t// Providing both a KMSKeyName and a customer-supplied encryption key (via\n\t// ObjectHandle.Key) will result in an error when writing an object.\n\tKMSKeyName string\n\n\t// Prefix is set only for ObjectAttrs which represent synthetic \"directory\n\t// entries\" when iterating over buckets using Query.Delimiter. See\n\t// ObjectIterator.Next. When set, no other fields in ObjectAttrs will be\n\t// populated.\n\tPrefix string\n\n\t// Etag is the HTTP/1.1 Entity tag for the object.\n\t// This field is read-only.\n\tEtag string\n}\n\n// convertTime converts a time in RFC3339 format to time.Time.\n// If any error occurs in parsing, the zero-value time.Time is silently returned.\nfunc convertTime(t string) time.Time {\n\tvar r time.Time\n\tif t != \"\" {\n\t\tr, _ = time.Parse(time.RFC3339, t)\n\t}\n\treturn r\n}\n\nfunc newObject(o *raw.Object) *ObjectAttrs {\n\tif o == nil {\n\t\treturn nil\n\t}\n\towner := \"\"\n\tif o.Owner != nil {\n\t\towner = o.Owner.Entity\n\t}\n\tmd5, _ := base64.StdEncoding.DecodeString(o.Md5Hash)\n\tcrc32c, _ := decodeUint32(o.Crc32c)\n\tvar sha256 string\n\tif o.CustomerEncryption != nil {\n\t\tsha256 = o.CustomerEncryption.KeySha256\n\t}\n\treturn &ObjectAttrs{\n\t\tBucket:                  o.Bucket,\n\t\tName:                    o.Name,\n\t\tContentType:             o.ContentType,\n\t\tContentLanguage:         o.ContentLanguage,\n\t\tCacheControl:            o.CacheControl,\n\t\tEventBasedHold:          o.EventBasedHold,\n\t\tTemporaryHold:           o.TemporaryHold,\n\t\tRetentionExpirationTime: convertTime(o.RetentionExpirationTime),\n\t\tACL:                     toObjectACLRules(o.Acl),\n\t\tOwner:                   owner,\n\t\tContentEncoding:         o.ContentEncoding,\n\t\tContentDisposition:      o.ContentDisposition,\n\t\tSize:                    int64(o.Size),\n\t\tMD5:                     md5,\n\t\tCRC32C:                  crc32c,\n\t\tMediaLink:               o.MediaLink,\n\t\tMetadata:                o.Metadata,\n\t\tGeneration:              o.Generation,\n\t\tMetageneration:          o.Metageneration,\n\t\tStorageClass:            o.StorageClass,\n\t\tCustomerKeySHA256:       sha256,\n\t\tKMSKeyName:              o.KmsKeyName,\n\t\tCreated:                 convertTime(o.TimeCreated),\n\t\tDeleted:                 convertTime(o.TimeDeleted),\n\t\tUpdated:                 convertTime(o.Updated),\n\t\tEtag:                    o.Etag,\n\t}\n}\n\n// Decode a uint32 encoded in Base64 in big-endian byte order.\nfunc decodeUint32(b64 string) (uint32, error) {\n\td, err := base64.StdEncoding.DecodeString(b64)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tif len(d) != 4 {\n\t\treturn 0, fmt.Errorf(\"storage: %q does not encode a 32-bit value\", d)\n\t}\n\treturn uint32(d[0])<<24 + uint32(d[1])<<16 + uint32(d[2])<<8 + uint32(d[3]), nil\n}\n\n// Encode a uint32 as Base64 in big-endian byte order.\nfunc encodeUint32(u uint32) string {\n\tb := []byte{byte(u >> 24), byte(u >> 16), byte(u >> 8), byte(u)}\n\treturn base64.StdEncoding.EncodeToString(b)\n}\n\n// Query represents a query to filter objects from a bucket.\ntype Query struct {\n\t// Delimiter returns results in a directory-like fashion.\n\t// Results will contain only objects whose names, aside from the\n\t// prefix, do not contain delimiter. Objects whose names,\n\t// aside from the prefix, contain delimiter will have their name,\n\t// truncated after the delimiter, returned in prefixes.\n\t// Duplicate prefixes are omitted.\n\t// Optional.\n\tDelimiter string\n\n\t// Prefix is the prefix filter to query objects\n\t// whose names begin with this prefix.\n\t// Optional.\n\tPrefix string\n\n\t// Versions indicates whether multiple versions of the same\n\t// object will be included in the results.\n\tVersions bool\n}\n\n// Conditions constrain methods to act on specific generations of\n// objects.\n//\n// The zero value is an empty set of constraints. Not all conditions or\n// combinations of conditions are applicable to all methods.\n// See https://cloud.google.com/storage/docs/generations-preconditions\n// for details on how these operate.\ntype Conditions struct {\n\t// Generation constraints.\n\t// At most one of the following can be set to a non-zero value.\n\n\t// GenerationMatch specifies that the object must have the given generation\n\t// for the operation to occur.\n\t// If GenerationMatch is zero, it has no effect.\n\t// Use DoesNotExist to specify that the object does not exist in the bucket.\n\tGenerationMatch int64\n\n\t// GenerationNotMatch specifies that the object must not have the given\n\t// generation for the operation to occur.\n\t// If GenerationNotMatch is zero, it has no effect.\n\tGenerationNotMatch int64\n\n\t// DoesNotExist specifies that the object must not exist in the bucket for\n\t// the operation to occur.\n\t// If DoesNotExist is false, it has no effect.\n\tDoesNotExist bool\n\n\t// Metadata generation constraints.\n\t// At most one of the following can be set to a non-zero value.\n\n\t// MetagenerationMatch specifies that the object must have the given\n\t// metageneration for the operation to occur.\n\t// If MetagenerationMatch is zero, it has no effect.\n\tMetagenerationMatch int64\n\n\t// MetagenerationNotMatch specifies that the object must not have the given\n\t// metageneration for the operation to occur.\n\t// If MetagenerationNotMatch is zero, it has no effect.\n\tMetagenerationNotMatch int64\n}\n\nfunc (c *Conditions) validate(method string) error {\n\tif *c == (Conditions{}) {\n\t\treturn fmt.Errorf(\"storage: %s: empty conditions\", method)\n\t}\n\tif !c.isGenerationValid() {\n\t\treturn fmt.Errorf(\"storage: %s: multiple conditions specified for generation\", method)\n\t}\n\tif !c.isMetagenerationValid() {\n\t\treturn fmt.Errorf(\"storage: %s: multiple conditions specified for metageneration\", method)\n\t}\n\treturn nil\n}\n\nfunc (c *Conditions) isGenerationValid() bool {\n\tn := 0\n\tif c.GenerationMatch != 0 {\n\t\tn++\n\t}\n\tif c.GenerationNotMatch != 0 {\n\t\tn++\n\t}\n\tif c.DoesNotExist {\n\t\tn++\n\t}\n\treturn n <= 1\n}\n\nfunc (c *Conditions) isMetagenerationValid() bool {\n\treturn c.MetagenerationMatch == 0 || c.MetagenerationNotMatch == 0\n}\n\n// applyConds modifies the provided call using the conditions in conds.\n// call is something that quacks like a *raw.WhateverCall.\nfunc applyConds(method string, gen int64, conds *Conditions, call interface{}) error {\n\tcval := reflect.ValueOf(call)\n\tif gen >= 0 {\n\t\tif !setConditionField(cval, \"Generation\", gen) {\n\t\t\treturn fmt.Errorf(\"storage: %s: generation not supported\", method)\n\t\t}\n\t}\n\tif conds == nil {\n\t\treturn nil\n\t}\n\tif err := conds.validate(method); err != nil {\n\t\treturn err\n\t}\n\tswitch {\n\tcase conds.GenerationMatch != 0:\n\t\tif !setConditionField(cval, \"IfGenerationMatch\", conds.GenerationMatch) {\n\t\t\treturn fmt.Errorf(\"storage: %s: ifGenerationMatch not supported\", method)\n\t\t}\n\tcase conds.GenerationNotMatch != 0:\n\t\tif !setConditionField(cval, \"IfGenerationNotMatch\", conds.GenerationNotMatch) {\n\t\t\treturn fmt.Errorf(\"storage: %s: ifGenerationNotMatch not supported\", method)\n\t\t}\n\tcase conds.DoesNotExist:\n\t\tif !setConditionField(cval, \"IfGenerationMatch\", int64(0)) {\n\t\t\treturn fmt.Errorf(\"storage: %s: DoesNotExist not supported\", method)\n\t\t}\n\t}\n\tswitch {\n\tcase conds.MetagenerationMatch != 0:\n\t\tif !setConditionField(cval, \"IfMetagenerationMatch\", conds.MetagenerationMatch) {\n\t\t\treturn fmt.Errorf(\"storage: %s: ifMetagenerationMatch not supported\", method)\n\t\t}\n\tcase conds.MetagenerationNotMatch != 0:\n\t\tif !setConditionField(cval, \"IfMetagenerationNotMatch\", conds.MetagenerationNotMatch) {\n\t\t\treturn fmt.Errorf(\"storage: %s: ifMetagenerationNotMatch not supported\", method)\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc applySourceConds(gen int64, conds *Conditions, call *raw.ObjectsRewriteCall) error {\n\tif gen >= 0 {\n\t\tcall.SourceGeneration(gen)\n\t}\n\tif conds == nil {\n\t\treturn nil\n\t}\n\tif err := conds.validate(\"CopyTo source\"); err != nil {\n\t\treturn err\n\t}\n\tswitch {\n\tcase conds.GenerationMatch != 0:\n\t\tcall.IfSourceGenerationMatch(conds.GenerationMatch)\n\tcase conds.GenerationNotMatch != 0:\n\t\tcall.IfSourceGenerationNotMatch(conds.GenerationNotMatch)\n\tcase conds.DoesNotExist:\n\t\tcall.IfSourceGenerationMatch(0)\n\t}\n\tswitch {\n\tcase conds.MetagenerationMatch != 0:\n\t\tcall.IfSourceMetagenerationMatch(conds.MetagenerationMatch)\n\tcase conds.MetagenerationNotMatch != 0:\n\t\tcall.IfSourceMetagenerationNotMatch(conds.MetagenerationNotMatch)\n\t}\n\treturn nil\n}\n\n// setConditionField sets a field on a *raw.WhateverCall.\n// We can't use anonymous interfaces because the return type is\n// different, since the field setters are builders.\nfunc setConditionField(call reflect.Value, name string, value interface{}) bool {\n\tm := call.MethodByName(name)\n\tif !m.IsValid() {\n\t\treturn false\n\t}\n\tm.Call([]reflect.Value{reflect.ValueOf(value)})\n\treturn true\n}\n\n// conditionsQuery returns the generation and conditions as a URL query\n// string suitable for URL.RawQuery.  It assumes that the conditions\n// have been validated.\nfunc conditionsQuery(gen int64, conds *Conditions) string {\n\t// URL escapes are elided because integer strings are URL-safe.\n\tvar buf []byte\n\n\tappendParam := func(s string, n int64) {\n\t\tif len(buf) > 0 {\n\t\t\tbuf = append(buf, '&')\n\t\t}\n\t\tbuf = append(buf, s...)\n\t\tbuf = strconv.AppendInt(buf, n, 10)\n\t}\n\n\tif gen >= 0 {\n\t\tappendParam(\"generation=\", gen)\n\t}\n\tif conds == nil {\n\t\treturn string(buf)\n\t}\n\tswitch {\n\tcase conds.GenerationMatch != 0:\n\t\tappendParam(\"ifGenerationMatch=\", conds.GenerationMatch)\n\tcase conds.GenerationNotMatch != 0:\n\t\tappendParam(\"ifGenerationNotMatch=\", conds.GenerationNotMatch)\n\tcase conds.DoesNotExist:\n\t\tappendParam(\"ifGenerationMatch=\", 0)\n\t}\n\tswitch {\n\tcase conds.MetagenerationMatch != 0:\n\t\tappendParam(\"ifMetagenerationMatch=\", conds.MetagenerationMatch)\n\tcase conds.MetagenerationNotMatch != 0:\n\t\tappendParam(\"ifMetagenerationNotMatch=\", conds.MetagenerationNotMatch)\n\t}\n\treturn string(buf)\n}\n\n// composeSourceObj wraps a *raw.ComposeRequestSourceObjects, but adds the methods\n// that modifyCall searches for by name.\ntype composeSourceObj struct {\n\tsrc *raw.ComposeRequestSourceObjects\n}\n\nfunc (c composeSourceObj) Generation(gen int64) {\n\tc.src.Generation = gen\n}\n\nfunc (c composeSourceObj) IfGenerationMatch(gen int64) {\n\t// It's safe to overwrite ObjectPreconditions, since its only field is\n\t// IfGenerationMatch.\n\tc.src.ObjectPreconditions = &raw.ComposeRequestSourceObjectsObjectPreconditions{\n\t\tIfGenerationMatch: gen,\n\t}\n}\n\nfunc setEncryptionHeaders(headers http.Header, key []byte, copySource bool) error {\n\tif key == nil {\n\t\treturn nil\n\t}\n\t// TODO(jbd): Ask the API team to return a more user-friendly error\n\t// and avoid doing this check at the client level.\n\tif len(key) != 32 {\n\t\treturn errors.New(\"storage: not a 32-byte AES-256 key\")\n\t}\n\tvar cs string\n\tif copySource {\n\t\tcs = \"copy-source-\"\n\t}\n\theaders.Set(\"x-goog-\"+cs+\"encryption-algorithm\", \"AES256\")\n\theaders.Set(\"x-goog-\"+cs+\"encryption-key\", base64.StdEncoding.EncodeToString(key))\n\tkeyHash := sha256.Sum256(key)\n\theaders.Set(\"x-goog-\"+cs+\"encryption-key-sha256\", base64.StdEncoding.EncodeToString(keyHash[:]))\n\treturn nil\n}\n\n// ServiceAccount fetches the email address of the given project's Google Cloud Storage service account.\nfunc (c *Client) ServiceAccount(ctx context.Context, projectID string) (string, error) {\n\tr := c.raw.Projects.ServiceAccount.Get(projectID)\n\tres, err := r.Context(ctx).Do()\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn res.EmailAddress, nil\n}\n"
  },
  {
    "path": "vendor/cloud.google.com/go/storage/writer.go",
    "content": "// Copyright 2014 Google LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage storage\n\nimport (\n\t\"context\"\n\t\"encoding/base64\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"sync\"\n\t\"unicode/utf8\"\n\n\t\"google.golang.org/api/googleapi\"\n\traw \"google.golang.org/api/storage/v1\"\n)\n\n// A Writer writes a Cloud Storage object.\ntype Writer struct {\n\t// ObjectAttrs are optional attributes to set on the object. Any attributes\n\t// must be initialized before the first Write call. Nil or zero-valued\n\t// attributes are ignored.\n\tObjectAttrs\n\n\t// SendCRC specifies whether to transmit a CRC32C field. It should be set\n\t// to true in addition to setting the Writer's CRC32C field, because zero\n\t// is a valid CRC and normally a zero would not be transmitted.\n\t// If a CRC32C is sent, and the data written does not match the checksum,\n\t// the write will be rejected.\n\tSendCRC32C bool\n\n\t// ChunkSize controls the maximum number of bytes of the object that the\n\t// Writer will attempt to send to the server in a single request. Objects\n\t// smaller than the size will be sent in a single request, while larger\n\t// objects will be split over multiple requests. The size will be rounded up\n\t// to the nearest multiple of 256K. If zero, chunking will be disabled and\n\t// the object will be uploaded in a single request.\n\t//\n\t// ChunkSize will default to a reasonable value. If you perform many concurrent\n\t// writes of small objects, you may wish set ChunkSize to a value that matches\n\t// your objects' sizes to avoid consuming large amounts of memory.\n\t//\n\t// ChunkSize must be set before the first Write call.\n\tChunkSize int\n\n\t// ProgressFunc can be used to monitor the progress of a large write.\n\t// operation. If ProgressFunc is not nil and writing requires multiple\n\t// calls to the underlying service (see\n\t// https://cloud.google.com/storage/docs/json_api/v1/how-tos/resumable-upload),\n\t// then ProgressFunc will be invoked after each call with the number of bytes of\n\t// content copied so far.\n\t//\n\t// ProgressFunc should return quickly without blocking.\n\tProgressFunc func(int64)\n\n\tctx context.Context\n\to   *ObjectHandle\n\n\topened bool\n\tpw     *io.PipeWriter\n\n\tdonec chan struct{} // closed after err and obj are set.\n\tobj   *ObjectAttrs\n\n\tmu  sync.Mutex\n\terr error\n}\n\nfunc (w *Writer) open() error {\n\tattrs := w.ObjectAttrs\n\t// Check the developer didn't change the object Name (this is unfortunate, but\n\t// we don't want to store an object under the wrong name).\n\tif attrs.Name != w.o.object {\n\t\treturn fmt.Errorf(\"storage: Writer.Name %q does not match object name %q\", attrs.Name, w.o.object)\n\t}\n\tif !utf8.ValidString(attrs.Name) {\n\t\treturn fmt.Errorf(\"storage: object name %q is not valid UTF-8\", attrs.Name)\n\t}\n\tif attrs.KMSKeyName != \"\" && w.o.encryptionKey != nil {\n\t\treturn errors.New(\"storage: cannot use KMSKeyName with a customer-supplied encryption key\")\n\t}\n\tpr, pw := io.Pipe()\n\tw.pw = pw\n\tw.opened = true\n\n\tgo w.monitorCancel()\n\n\tif w.ChunkSize < 0 {\n\t\treturn errors.New(\"storage: Writer.ChunkSize must be non-negative\")\n\t}\n\tmediaOpts := []googleapi.MediaOption{\n\t\tgoogleapi.ChunkSize(w.ChunkSize),\n\t}\n\tif c := attrs.ContentType; c != \"\" {\n\t\tmediaOpts = append(mediaOpts, googleapi.ContentType(c))\n\t}\n\n\tgo func() {\n\t\tdefer close(w.donec)\n\n\t\trawObj := attrs.toRawObject(w.o.bucket)\n\t\tif w.SendCRC32C {\n\t\t\trawObj.Crc32c = encodeUint32(attrs.CRC32C)\n\t\t}\n\t\tif w.MD5 != nil {\n\t\t\trawObj.Md5Hash = base64.StdEncoding.EncodeToString(w.MD5)\n\t\t}\n\t\tcall := w.o.c.raw.Objects.Insert(w.o.bucket, rawObj).\n\t\t\tMedia(pr, mediaOpts...).\n\t\t\tProjection(\"full\").\n\t\t\tContext(w.ctx)\n\t\tif w.ProgressFunc != nil {\n\t\t\tcall.ProgressUpdater(func(n, _ int64) { w.ProgressFunc(n) })\n\t\t}\n\t\tif attrs.KMSKeyName != \"\" {\n\t\t\tcall.KmsKeyName(attrs.KMSKeyName)\n\t\t}\n\t\tif attrs.PredefinedACL != \"\" {\n\t\t\tcall.PredefinedAcl(attrs.PredefinedACL)\n\t\t}\n\t\tif err := setEncryptionHeaders(call.Header(), w.o.encryptionKey, false); err != nil {\n\t\t\tw.mu.Lock()\n\t\t\tw.err = err\n\t\t\tw.mu.Unlock()\n\t\t\tpr.CloseWithError(err)\n\t\t\treturn\n\t\t}\n\t\tvar resp *raw.Object\n\t\terr := applyConds(\"NewWriter\", w.o.gen, w.o.conds, call)\n\t\tif err == nil {\n\t\t\tif w.o.userProject != \"\" {\n\t\t\t\tcall.UserProject(w.o.userProject)\n\t\t\t}\n\t\t\tsetClientHeader(call.Header())\n\t\t\t// If the chunk size is zero, then no chunking is done on the Reader,\n\t\t\t// which means we cannot retry: the first call will read the data, and if\n\t\t\t// it fails, there is no way to re-read.\n\t\t\tif w.ChunkSize == 0 {\n\t\t\t\tresp, err = call.Do()\n\t\t\t} else {\n\t\t\t\t// We will only retry here if the initial POST, which obtains a URI for\n\t\t\t\t// the resumable upload, fails with a retryable error. The upload itself\n\t\t\t\t// has its own retry logic.\n\t\t\t\terr = runWithRetry(w.ctx, func() error {\n\t\t\t\t\tvar err2 error\n\t\t\t\t\tresp, err2 = call.Do()\n\t\t\t\t\treturn err2\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\tif err != nil {\n\t\t\tw.mu.Lock()\n\t\t\tw.err = err\n\t\t\tw.mu.Unlock()\n\t\t\tpr.CloseWithError(err)\n\t\t\treturn\n\t\t}\n\t\tw.obj = newObject(resp)\n\t}()\n\treturn nil\n}\n\n// Write appends to w. It implements the io.Writer interface.\n//\n// Since writes happen asynchronously, Write may return a nil\n// error even though the write failed (or will fail). Always\n// use the error returned from Writer.Close to determine if\n// the upload was successful.\nfunc (w *Writer) Write(p []byte) (n int, err error) {\n\tw.mu.Lock()\n\twerr := w.err\n\tw.mu.Unlock()\n\tif werr != nil {\n\t\treturn 0, werr\n\t}\n\tif !w.opened {\n\t\tif err := w.open(); err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t}\n\tn, err = w.pw.Write(p)\n\tif err != nil {\n\t\tw.mu.Lock()\n\t\twerr := w.err\n\t\tw.mu.Unlock()\n\t\t// Preserve existing functionality that when context is canceled, Write will return\n\t\t// context.Canceled instead of \"io: read/write on closed pipe\". This hides the\n\t\t// pipe implementation detail from users and makes Write seem as though it's an RPC.\n\t\tif werr == context.Canceled || werr == context.DeadlineExceeded {\n\t\t\treturn n, werr\n\t\t}\n\t}\n\treturn n, err\n}\n\n// Close completes the write operation and flushes any buffered data.\n// If Close doesn't return an error, metadata about the written object\n// can be retrieved by calling Attrs.\nfunc (w *Writer) Close() error {\n\tif !w.opened {\n\t\tif err := w.open(); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// Closing either the read or write causes the entire pipe to close.\n\tif err := w.pw.Close(); err != nil {\n\t\treturn err\n\t}\n\n\t<-w.donec\n\tw.mu.Lock()\n\tdefer w.mu.Unlock()\n\treturn w.err\n}\n\n// monitorCancel is intended to be used as a background goroutine. It monitors the\n// the context, and when it observes that the context has been canceled, it manually\n// closes things that do not take a context.\nfunc (w *Writer) monitorCancel() {\n\tselect {\n\tcase <-w.ctx.Done():\n\t\tw.mu.Lock()\n\t\twerr := w.ctx.Err()\n\t\tw.err = werr\n\t\tw.mu.Unlock()\n\n\t\t// Closing either the read or write causes the entire pipe to close.\n\t\tw.CloseWithError(werr)\n\tcase <-w.donec:\n\t}\n}\n\n// CloseWithError aborts the write operation with the provided error.\n// CloseWithError always returns nil.\n//\n// Deprecated: cancel the context passed to NewWriter instead.\nfunc (w *Writer) CloseWithError(err error) error {\n\tif !w.opened {\n\t\treturn nil\n\t}\n\treturn w.pw.CloseWithError(err)\n}\n\n// Attrs returns metadata about a successfully-written object.\n// It's only valid to call it after Close returns nil.\nfunc (w *Writer) Attrs() *ObjectAttrs {\n\treturn w.obj\n}\n"
  },
  {
    "path": "vendor/github.com/JamesClonk/vultr/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2015 Fabio Berchtold\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n"
  },
  {
    "path": "vendor/github.com/JamesClonk/vultr/lib/account_info.go",
    "content": "package lib\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"strconv\"\n)\n\n// AccountInfo of Vultr account\ntype AccountInfo struct {\n\tBalance           float64 `json:\"balance\"`\n\tPendingCharges    float64 `json:\"pending_charges\"`\n\tLastPaymentDate   string  `json:\"last_payment_date\"`\n\tLastPaymentAmount float64 `json:\"last_payment_amount\"`\n}\n\n// GetAccountInfo retrieves the Vultr account information about current balance, pending charges, etc..\nfunc (c *Client) GetAccountInfo() (info AccountInfo, err error) {\n\tif err := c.get(`account/info`, &info); err != nil {\n\t\treturn AccountInfo{}, err\n\t}\n\treturn\n}\n\n// UnmarshalJSON implements json.Unmarshaller on AccountInfo.\n// This is needed because the Vultr API is inconsistent in it's JSON responses for account info.\n// Some fields can change type, from JSON number to JSON string and vice-versa.\nfunc (a *AccountInfo) UnmarshalJSON(data []byte) (err error) {\n\tif a == nil {\n\t\t*a = AccountInfo{}\n\t}\n\n\tvar fields map[string]interface{}\n\tif err := json.Unmarshal(data, &fields); err != nil {\n\t\treturn err\n\t}\n\n\tvalue := fmt.Sprintf(\"%v\", fields[\"balance\"])\n\tif len(value) == 0 || value == \"<nil>\" {\n\t\tvalue = \"0\"\n\t}\n\tb, err := strconv.ParseFloat(value, 64)\n\tif err != nil {\n\t\treturn err\n\t}\n\ta.Balance = b\n\n\tvalue = fmt.Sprintf(\"%v\", fields[\"pending_charges\"])\n\tif len(value) == 0 || value == \"<nil>\" {\n\t\tvalue = \"0\"\n\t}\n\tpc, err := strconv.ParseFloat(value, 64)\n\tif err != nil {\n\t\treturn err\n\t}\n\ta.PendingCharges = pc\n\n\tvalue = fmt.Sprintf(\"%v\", fields[\"last_payment_amount\"])\n\tif len(value) == 0 || value == \"<nil>\" {\n\t\tvalue = \"0\"\n\t}\n\tlpa, err := strconv.ParseFloat(value, 64)\n\tif err != nil {\n\t\treturn err\n\t}\n\ta.LastPaymentAmount = lpa\n\n\ta.LastPaymentDate = fmt.Sprintf(\"%v\", fields[\"last_payment_date\"])\n\n\treturn\n}\n"
  },
  {
    "path": "vendor/github.com/JamesClonk/vultr/lib/applications.go",
    "content": "package lib\n\nimport (\n\t\"sort\"\n\t\"strings\"\n)\n\n// Application on Vultr\ntype Application struct {\n\tID         string  `json:\"APPID\"`\n\tName       string  `json:\"name\"`\n\tShortName  string  `json:\"short_name\"`\n\tDeployName string  `json:\"deploy_name\"`\n\tSurcharge  float64 `json:\"surcharge\"`\n}\n\ntype applications []Application\n\nfunc (s applications) Len() int      { return len(s) }\nfunc (s applications) Swap(i, j int) { s[i], s[j] = s[j], s[i] }\nfunc (s applications) Less(i, j int) bool {\n\treturn strings.ToLower(s[i].Name) < strings.ToLower(s[j].Name)\n}\n\n// GetApplications returns a list of all available applications on Vultr\nfunc (c *Client) GetApplications() ([]Application, error) {\n\tvar appMap map[string]Application\n\tif err := c.get(`app/list`, &appMap); err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar appList []Application\n\tfor _, app := range appMap {\n\t\tappList = append(appList, app)\n\t}\n\tsort.Sort(applications(appList))\n\treturn appList, nil\n}\n"
  },
  {
    "path": "vendor/github.com/JamesClonk/vultr/lib/backup.go",
    "content": "package lib\n\nimport (\n\t\"fmt\"\n\t\"net/url\"\n\t\"sort\"\n\t\"time\"\n)\n\n// Backup of a virtual machine\ntype Backup struct {\n\tID          string `json:\"BACKUPID\"`\n\tCreated     string `json:\"date_created\"`\n\tDescription string `json:\"description\"`\n\tSize        string `json:\"size\"`\n\tStatus      string `json:\"status\"`\n}\n\ntype backups []Backup\n\nfunc (bs backups) Len() int      { return len(bs) }\nfunc (bs backups) Swap(i, j int) { bs[i], bs[j] = bs[j], bs[i] }\n\n// sort by most recent\nfunc (bs backups) Less(i, j int) bool {\n\ttimeLayout := \"2006-01-02 15:04:05\" // oh my : https://golang.org/src/time/format.go\n\tt1, _ := time.Parse(timeLayout, bs[i].Created)\n\tt2, _ := time.Parse(timeLayout, bs[j].Created)\n\treturn t1.After(t2)\n}\n\n// GetBackups retrieves a list of all backups on Vultr account\nfunc (c *Client) GetBackups(id string, backupid string) ([]Backup, error) {\n\tvar backupMap map[string]Backup\n\tvalues := url.Values{\n\t\t\"SUBID\":    {id},\n\t\t\"BACKUPID\": {backupid},\n\t}\n\n\tif err := c.post(`backup/list`, values, &backupMap); err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar backup []Backup\n\tfor _, b := range backupMap {\n\t\tfmt.Println(b)\n\t\tbackup = append(backup, b)\n\t}\n\tsort.Sort(backups(backup))\n\treturn backup, nil\n}\n"
  },
  {
    "path": "vendor/github.com/JamesClonk/vultr/lib/bare_metal.go",
    "content": "package lib\n\nimport (\n\t\"encoding/base64\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/url\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// BareMetalServer represents a bare metal server on Vultr.\ntype BareMetalServer struct {\n\tID              string      `json:\"SUBID\"`\n\tName            string      `json:\"label\"`\n\tOS              string      `json:\"os\"`\n\tRAM             string      `json:\"ram\"`\n\tDisk            string      `json:\"disk\"`\n\tMainIP          string      `json:\"main_ip\"`\n\tCPUs            int         `json:\"cpu_count\"`\n\tLocation        string      `json:\"location\"`\n\tRegionID        int         `json:\"DCID,string\"`\n\tDefaultPassword string      `json:\"default_password\"`\n\tCreated         string      `json:\"date_created\"`\n\tStatus          string      `json:\"status\"`\n\tNetmaskV4       string      `json:\"netmask_v4\"`\n\tGatewayV4       string      `json:\"gateway_v4\"`\n\tPlanID          int         `json:\"METALPLANID\"`\n\tV6Networks      []V6Network `json:\"v6_networks\"`\n\tTag             string      `json:\"tag\"`\n\tOSID            string      `json:\"OSID\"`\n\tAppID           string      `json:\"APPID\"`\n}\n\n// BareMetalServerOptions are optional parameters to be used during bare metal server creation.\ntype BareMetalServerOptions struct {\n\tScript               int\n\tUserData             string\n\tSnapshot             string\n\tSSHKey               string\n\tReservedIP           string\n\tIPV6                 bool\n\tDontNotifyOnActivate bool\n\tHostname             string\n\tTag                  string\n\tAppID                string\n}\n\ntype bareMetalServers []BareMetalServer\n\nfunc (b bareMetalServers) Len() int      { return len(b) }\nfunc (b bareMetalServers) Swap(i, j int) { b[i], b[j] = b[j], b[i] }\nfunc (b bareMetalServers) Less(i, j int) bool {\n\t// sort order: name, ip\n\tif strings.ToLower(b[i].Name) < strings.ToLower(b[j].Name) {\n\t\treturn true\n\t} else if strings.ToLower(b[i].Name) > strings.ToLower(b[j].Name) {\n\t\treturn false\n\t}\n\treturn b[i].MainIP < b[j].MainIP\n}\n\n// UnmarshalJSON implements json.Unmarshaller on BareMetal.\n// This is needed because the Vultr API is inconsistent in it's JSON responses for bare metal servers.\n// Some fields can change type, from JSON number to JSON string and vice-versa.\nfunc (b *BareMetalServer) UnmarshalJSON(data []byte) error {\n\tif b == nil {\n\t\t*b = BareMetalServer{}\n\t}\n\n\tvar fields map[string]interface{}\n\tif err := json.Unmarshal(data, &fields); err != nil {\n\t\treturn err\n\t}\n\n\tvalue := fmt.Sprintf(\"%v\", fields[\"cpu_count\"])\n\tif len(value) == 0 || value == \"<nil>\" {\n\t\tvalue = \"0\"\n\t}\n\tcpu, err := strconv.ParseInt(value, 10, 64)\n\tif err != nil {\n\t\treturn err\n\t}\n\tb.CPUs = int(cpu)\n\n\tvalue = fmt.Sprintf(\"%v\", fields[\"DCID\"])\n\tif len(value) == 0 || value == \"<nil>\" {\n\t\tvalue = \"0\"\n\t}\n\tregion, err := strconv.ParseInt(value, 10, 64)\n\tif err != nil {\n\t\treturn err\n\t}\n\tb.RegionID = int(region)\n\n\tvalue = fmt.Sprintf(\"%v\", fields[\"METALPLANID\"])\n\tif len(value) == 0 || value == \"<nil>\" {\n\t\tvalue = \"0\"\n\t}\n\tplan, err := strconv.ParseInt(value, 10, 64)\n\tif err != nil {\n\t\treturn err\n\t}\n\tb.PlanID = int(plan)\n\n\tvalue = fmt.Sprintf(\"%v\", fields[\"OSID\"])\n\tif value == \"<nil>\" {\n\t\tvalue = \"\"\n\t}\n\tb.OSID = value\n\n\tvalue = fmt.Sprintf(\"%v\", fields[\"APPID\"])\n\tif value == \"<nil>\" || value == \"0\" {\n\t\tvalue = \"\"\n\t}\n\tb.AppID = value\n\n\tb.ID = fmt.Sprintf(\"%v\", fields[\"SUBID\"])\n\tb.Name = fmt.Sprintf(\"%v\", fields[\"label\"])\n\tb.OS = fmt.Sprintf(\"%v\", fields[\"os\"])\n\tb.RAM = fmt.Sprintf(\"%v\", fields[\"ram\"])\n\tb.Disk = fmt.Sprintf(\"%v\", fields[\"disk\"])\n\tb.MainIP = fmt.Sprintf(\"%v\", fields[\"main_ip\"])\n\tb.Location = fmt.Sprintf(\"%v\", fields[\"location\"])\n\tb.DefaultPassword = fmt.Sprintf(\"%v\", fields[\"default_password\"])\n\tb.Created = fmt.Sprintf(\"%v\", fields[\"date_created\"])\n\tb.Status = fmt.Sprintf(\"%v\", fields[\"status\"])\n\tb.NetmaskV4 = fmt.Sprintf(\"%v\", fields[\"netmask_v4\"])\n\tb.GatewayV4 = fmt.Sprintf(\"%v\", fields[\"gateway_v4\"])\n\n\tv6networks := make([]V6Network, 0)\n\tif networks, ok := fields[\"v6_networks\"].([]interface{}); ok {\n\t\tfor _, network := range networks {\n\t\t\tif network, ok := network.(map[string]interface{}); ok {\n\t\t\t\tv6network := V6Network{\n\t\t\t\t\tNetwork:     fmt.Sprintf(\"%v\", network[\"v6_network\"]),\n\t\t\t\t\tMainIP:      fmt.Sprintf(\"%v\", network[\"v6_main_ip\"]),\n\t\t\t\t\tNetworkSize: fmt.Sprintf(\"%v\", network[\"v6_network_size\"]),\n\t\t\t\t}\n\t\t\t\tv6networks = append(v6networks, v6network)\n\t\t\t}\n\t\t}\n\t\tb.V6Networks = v6networks\n\t}\n\n\tb.Tag = fmt.Sprintf(\"%v\", fields[\"tag\"])\n\n\treturn nil\n}\n\n// GetBareMetalServers returns a list of current bare metal servers on the Vultr account.\nfunc (c *Client) GetBareMetalServers() ([]BareMetalServer, error) {\n\tvar bareMetalServerMap map[string]BareMetalServer\n\tif err := c.get(`baremetal/list`, &bareMetalServerMap); err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar bareMetalServerList []BareMetalServer\n\tfor _, bareMetalServer := range bareMetalServerMap {\n\t\tbareMetalServerList = append(bareMetalServerList, bareMetalServer)\n\t}\n\tsort.Sort(bareMetalServers(bareMetalServerList))\n\treturn bareMetalServerList, nil\n}\n\n// GetBareMetalServersByTag returns a list of all bare metal servers matching by tag.\nfunc (c *Client) GetBareMetalServersByTag(tag string) ([]BareMetalServer, error) {\n\tvar bareMetalServerMap map[string]BareMetalServer\n\tif err := c.get(`baremetal/list?tag=`+tag, &bareMetalServerMap); err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar bareMetalServerList []BareMetalServer\n\tfor _, bareMetalServer := range bareMetalServerMap {\n\t\tbareMetalServerList = append(bareMetalServerList, bareMetalServer)\n\t}\n\tsort.Sort(bareMetalServers(bareMetalServerList))\n\treturn bareMetalServerList, nil\n}\n\n// GetBareMetalServer returns the bare metal server with the given ID.\nfunc (c *Client) GetBareMetalServer(id string) (BareMetalServer, error) {\n\tvar b BareMetalServer\n\tif err := c.get(`baremetal/list?SUBID=`+id, &b); err != nil {\n\t\treturn BareMetalServer{}, err\n\t}\n\treturn b, nil\n}\n\n// CreateBareMetalServer creates a new bare metal server on Vultr. BareMetalServerOptions are optional settings.\nfunc (c *Client) CreateBareMetalServer(name string, regionID, planID, osID int, options *BareMetalServerOptions) (BareMetalServer, error) {\n\tvalues := url.Values{\n\t\t\"label\":       {name},\n\t\t\"DCID\":        {fmt.Sprintf(\"%v\", regionID)},\n\t\t\"METALPLANID\": {fmt.Sprintf(\"%v\", planID)},\n\t\t\"OSID\":        {fmt.Sprintf(\"%v\", osID)},\n\t}\n\n\tif options != nil {\n\t\tif options.Script != 0 {\n\t\t\tvalues.Add(\"SCRIPTID\", fmt.Sprintf(\"%v\", options.Script))\n\t\t}\n\n\t\tif options.UserData != \"\" {\n\t\t\tvalues.Add(\"userdata\", base64.StdEncoding.EncodeToString([]byte(options.UserData)))\n\t\t}\n\n\t\tif options.Snapshot != \"\" {\n\t\t\tvalues.Add(\"SNAPSHOTID\", options.Snapshot)\n\t\t}\n\n\t\tif options.SSHKey != \"\" {\n\t\t\tvalues.Add(\"SSHKEYID\", options.SSHKey)\n\t\t}\n\n\t\tvalues.Add(\"enable_ipv6\", \"no\")\n\t\tif options.IPV6 {\n\t\t\tvalues.Set(\"enable_ipv6\", \"yes\")\n\t\t}\n\n\t\tvalues.Add(\"notify_activate\", \"yes\")\n\t\tif options.DontNotifyOnActivate {\n\t\t\tvalues.Set(\"notify_activate\", \"no\")\n\t\t}\n\n\t\tif options.Hostname != \"\" {\n\t\t\tvalues.Add(\"hostname\", options.Hostname)\n\t\t}\n\n\t\tif options.Tag != \"\" {\n\t\t\tvalues.Add(\"tag\", options.Tag)\n\t\t}\n\n\t\tif options.AppID != \"\" {\n\t\t\tvalues.Add(\"APPID\", options.AppID)\n\t\t}\n\t}\n\n\tvar b BareMetalServer\n\tif err := c.post(`baremetal/create`, values, &b); err != nil {\n\t\treturn BareMetalServer{}, err\n\t}\n\tb.Name = name\n\tb.RegionID = regionID\n\tb.PlanID = planID\n\n\treturn b, nil\n}\n\n// RenameBareMetalServer renames an existing bare metal server.\nfunc (c *Client) RenameBareMetalServer(id, name string) error {\n\tvalues := url.Values{\n\t\t\"SUBID\": {id},\n\t\t\"label\": {name},\n\t}\n\n\treturn c.post(`baremetal/label_set`, values, nil)\n}\n\n// TagBareMetalServer replaces the tag on an existing bare metal server.\nfunc (c *Client) TagBareMetalServer(id, tag string) error {\n\tvalues := url.Values{\n\t\t\"SUBID\": {id},\n\t\t\"tag\":   {tag},\n\t}\n\n\treturn c.post(`baremetal/tag_set`, values, nil)\n}\n\n// HaltBareMetalServer stops an existing bare metal server.\nfunc (c *Client) HaltBareMetalServer(id string) error {\n\tvalues := url.Values{\n\t\t\"SUBID\": {id},\n\t}\n\n\treturn c.post(`baremetal/halt`, values, nil)\n}\n\n// RebootBareMetalServer reboots an existing bare metal server.\nfunc (c *Client) RebootBareMetalServer(id string) error {\n\tvalues := url.Values{\n\t\t\"SUBID\": {id},\n\t}\n\n\treturn c.post(`baremetal/reboot`, values, nil)\n}\n\n// ReinstallBareMetalServer reinstalls the operating system on an existing bare metal server.\nfunc (c *Client) ReinstallBareMetalServer(id string) error {\n\tvalues := url.Values{\n\t\t\"SUBID\": {id},\n\t}\n\n\treturn c.post(`baremetal/reinstall`, values, nil)\n}\n\n// ChangeOSofBareMetalServer changes the bare metal server to a different operating system.\nfunc (c *Client) ChangeOSofBareMetalServer(id string, osID int) error {\n\tvalues := url.Values{\n\t\t\"SUBID\": {id},\n\t\t\"OSID\":  {fmt.Sprintf(\"%v\", osID)},\n\t}\n\n\treturn c.post(`baremetal/os_change`, values, nil)\n}\n\n// ListOSforBareMetalServer lists all available operating systems to which an existing bare metal server can be changed.\nfunc (c *Client) ListOSforBareMetalServer(id string) ([]OS, error) {\n\tvar osMap map[string]OS\n\tif err := c.get(`baremetal/os_change_list?SUBID=`+id, &osMap); err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar os []OS\n\tfor _, o := range osMap {\n\t\tos = append(os, o)\n\t}\n\tsort.Sort(oses(os))\n\treturn os, nil\n}\n\n// DeleteBareMetalServer deletes an existing bare metal server.\nfunc (c *Client) DeleteBareMetalServer(id string) error {\n\tvalues := url.Values{\n\t\t\"SUBID\": {id},\n\t}\n\n\treturn c.post(`baremetal/destroy`, values, nil)\n}\n\n// BandwidthOfBareMetalServer retrieves the bandwidth used by a bare metal server.\nfunc (c *Client) BandwidthOfBareMetalServer(id string) ([]map[string]string, error) {\n\tvar bandwidthMap map[string][][]interface{}\n\tif err := c.get(`server/bandwidth?SUBID=`+id, &bandwidthMap); err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar bandwidth []map[string]string\n\t// parse incoming bytes\n\tfor _, b := range bandwidthMap[\"incoming_bytes\"] {\n\t\tbMap := make(map[string]string)\n\t\tbMap[\"date\"] = fmt.Sprintf(\"%v\", b[0])\n\t\tvar bytes int64\n\t\tswitch b[1].(type) {\n\t\tcase float64:\n\t\t\tbytes = int64(b[1].(float64))\n\t\tcase int64:\n\t\t\tbytes = b[1].(int64)\n\t\t}\n\t\tbMap[\"incoming\"] = fmt.Sprintf(\"%v\", bytes)\n\t\tbandwidth = append(bandwidth, bMap)\n\t}\n\n\t// parse outgoing bytes (we'll assume that incoming and outgoing dates are always a match)\n\tfor _, b := range bandwidthMap[\"outgoing_bytes\"] {\n\t\tfor i := range bandwidth {\n\t\t\tif bandwidth[i][\"date\"] == fmt.Sprintf(\"%v\", b[0]) {\n\t\t\t\tvar bytes int64\n\t\t\t\tswitch b[1].(type) {\n\t\t\t\tcase float64:\n\t\t\t\t\tbytes = int64(b[1].(float64))\n\t\t\t\tcase int64:\n\t\t\t\t\tbytes = b[1].(int64)\n\t\t\t\t}\n\t\t\t\tbandwidth[i][\"outgoing\"] = fmt.Sprintf(\"%v\", bytes)\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\n\treturn bandwidth, nil\n}\n\n// ChangeApplicationofBareMetalServer changes the bare metal server to a different application.\nfunc (c *Client) ChangeApplicationofBareMetalServer(id string, appID string) error {\n\tvalues := url.Values{\n\t\t\"SUBID\": {id},\n\t\t\"APPID\": {appID},\n\t}\n\n\treturn c.post(`baremetal/app_change`, values, nil)\n}\n\n// ListApplicationsforBareMetalServer lists all available operating systems to which an existing bare metal server can be changed.\nfunc (c *Client) ListApplicationsforBareMetalServer(id string) ([]Application, error) {\n\tvar appMap map[string]Application\n\tif err := c.get(`baremetal/app_change_list?SUBID=`+id, &appMap); err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar apps []Application\n\tfor _, app := range appMap {\n\t\tapps = append(apps, app)\n\t}\n\tsort.Sort(applications(apps))\n\treturn apps, nil\n}\n"
  },
  {
    "path": "vendor/github.com/JamesClonk/vultr/lib/bare_metal_plans.go",
    "content": "package lib\n\nimport (\n\t\"fmt\"\n\t\"sort\"\n)\n\n// BareMetalPlan is a bare metal-compatible plan on Vultr.\ntype BareMetalPlan struct {\n\tDeprecated bool   `json:\"deprecated\"`\n\tID         int    `json:\"METALPLANID,string\"`\n\tName       string `json:\"name\"`\n\tCPUs       int    `json:\"cpu_count\"`\n\tRAM        int    `json:\"ram\"`\n\tDisk       string `json:\"disk\"`\n\tBandwidth  int    `json:\"bandwidth_tb\"`\n\tPrice      int    `json:\"price_per_month\"`\n\tRegions    []int  `json:\"available_locations\"`\n\tType       string `json:\"type\"`\n}\n\ntype bareMetalPlans []BareMetalPlan\n\nfunc (b bareMetalPlans) Len() int      { return len(b) }\nfunc (b bareMetalPlans) Swap(i, j int) { b[i], b[j] = b[j], b[i] }\nfunc (b bareMetalPlans) Less(i, j int) bool {\n\tba := b[i].Price\n\tbb := b[j].Price\n\tra := b[i].RAM\n\trb := b[j].RAM\n\tda := b[i].Disk\n\tdb := b[j].Disk\n\n\t// sort order: price, vcpu, ram, disk\n\tif ba < bb {\n\t\treturn true\n\t} else if ba > bb {\n\t\treturn false\n\t}\n\n\tif b[i].CPUs < b[j].CPUs {\n\t\treturn true\n\t} else if b[i].CPUs > b[j].CPUs {\n\t\treturn false\n\t}\n\n\tif ra < rb {\n\t\treturn true\n\t} else if ra > rb {\n\t\treturn false\n\t}\n\n\treturn da < db\n}\n\n// GetBareMetalPlans returns a list of all available bare metal plans on Vultr account.\nfunc (c *Client) GetBareMetalPlans() ([]BareMetalPlan, error) {\n\tvar bareMetalPlanMap map[string]BareMetalPlan\n\tif err := c.get(`plans/list_baremetal`, &bareMetalPlanMap); err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar b bareMetalPlans\n\tfor _, bareMetalPlan := range bareMetalPlanMap {\n\t\tb = append(b, bareMetalPlan)\n\t}\n\n\tsort.Sort(bareMetalPlans(b))\n\treturn b, nil\n}\n\n// GetAvailableBareMetalPlansForRegion returns available bare metal plans for specified region.\nfunc (c *Client) GetAvailableBareMetalPlansForRegion(id int) ([]int, error) {\n\tvar bareMetalPlanIDs []int\n\tif err := c.get(fmt.Sprintf(`regions/availability?DCID=%v`, id), &bareMetalPlanIDs); err != nil {\n\t\treturn nil, err\n\t}\n\treturn bareMetalPlanIDs, nil\n}\n"
  },
  {
    "path": "vendor/github.com/JamesClonk/vultr/lib/block_storage.go",
    "content": "package lib\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/url\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// BlockStorage on Vultr account\ntype BlockStorage struct {\n\tID         string `json:\"SUBID,string\"`\n\tName       string `json:\"label\"`\n\tRegionID   int    `json:\"DCID,string\"`\n\tSizeGB     int    `json:\"size_gb,string\"`\n\tCreated    string `json:\"date_created\"`\n\tCost       string `json:\"cost_per_month\"`\n\tStatus     string `json:\"status\"`\n\tAttachedTo string `json:\"attached_to_SUBID\"`\n}\n\ntype blockstorages []BlockStorage\n\nfunc (b blockstorages) Len() int      { return len(b) }\nfunc (b blockstorages) Swap(i, j int) { b[i], b[j] = b[j], b[i] }\nfunc (b blockstorages) Less(i, j int) bool {\n\t// sort order: name, size, status\n\tif strings.ToLower(b[i].Name) < strings.ToLower(b[j].Name) {\n\t\treturn true\n\t} else if strings.ToLower(b[i].Name) > strings.ToLower(b[j].Name) {\n\t\treturn false\n\t}\n\tif b[i].SizeGB < b[j].SizeGB {\n\t\treturn true\n\t} else if b[i].SizeGB > b[j].SizeGB {\n\t\treturn false\n\t}\n\treturn b[i].Status < b[j].Status\n}\n\n// UnmarshalJSON implements json.Unmarshaller on BlockStorage.\n// This is needed because the Vultr API is inconsistent in it's JSON responses.\n// Some fields can change type, from JSON number to JSON string and vice-versa.\nfunc (b *BlockStorage) UnmarshalJSON(data []byte) (err error) {\n\tif b == nil {\n\t\t*b = BlockStorage{}\n\t}\n\n\tvar fields map[string]interface{}\n\tif err := json.Unmarshal(data, &fields); err != nil {\n\t\treturn err\n\t}\n\n\tvalue := fmt.Sprintf(\"%v\", fields[\"SUBID\"])\n\tif len(value) == 0 || value == \"<nil>\" || value == \"0\" {\n\t\tb.ID = \"\"\n\t} else {\n\t\tid, err := strconv.ParseFloat(value, 64)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tb.ID = strconv.FormatFloat(id, 'f', -1, 64)\n\t}\n\n\tvalue = fmt.Sprintf(\"%v\", fields[\"DCID\"])\n\tif len(value) == 0 || value == \"<nil>\" {\n\t\tvalue = \"0\"\n\t}\n\tregion, err := strconv.ParseInt(value, 10, 64)\n\tif err != nil {\n\t\treturn err\n\t}\n\tb.RegionID = int(region)\n\n\tvalue = fmt.Sprintf(\"%v\", fields[\"size_gb\"])\n\tif len(value) == 0 || value == \"<nil>\" {\n\t\tvalue = \"0\"\n\t}\n\tsize, err := strconv.ParseInt(value, 10, 64)\n\tif err != nil {\n\t\treturn err\n\t}\n\tb.SizeGB = int(size)\n\n\tvalue = fmt.Sprintf(\"%v\", fields[\"attached_to_SUBID\"])\n\tif len(value) == 0 || value == \"<nil>\" || value == \"0\" {\n\t\tb.AttachedTo = \"\"\n\t} else {\n\t\tattached, err := strconv.ParseFloat(value, 64)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tb.AttachedTo = strconv.FormatFloat(attached, 'f', -1, 64)\n\t}\n\n\tb.Name = fmt.Sprintf(\"%v\", fields[\"label\"])\n\tb.Created = fmt.Sprintf(\"%v\", fields[\"date_created\"])\n\tb.Status = fmt.Sprintf(\"%v\", fields[\"status\"])\n\tb.Cost = fmt.Sprintf(\"%v\", fields[\"cost_per_month\"])\n\n\treturn\n}\n\n// GetBlockStorages returns a list of all active block storages on Vultr account\nfunc (c *Client) GetBlockStorages() (storages []BlockStorage, err error) {\n\tif err := c.get(`block/list`, &storages); err != nil {\n\t\treturn nil, err\n\t}\n\tsort.Sort(blockstorages(storages))\n\treturn storages, nil\n}\n\n// GetBlockStorage returns block storage with given ID\nfunc (c *Client) GetBlockStorage(id string) (BlockStorage, error) {\n\tstorages, err := c.GetBlockStorages()\n\tif err != nil {\n\t\treturn BlockStorage{}, err\n\t}\n\n\tfor _, s := range storages {\n\t\tif s.ID == id {\n\t\t\treturn s, nil\n\t\t}\n\t}\n\treturn BlockStorage{}, fmt.Errorf(\"BlockStorage with ID %v not found\", id)\n}\n\n// CreateBlockStorage creates a new block storage on Vultr account\nfunc (c *Client) CreateBlockStorage(name string, regionID, size int) (BlockStorage, error) {\n\tvalues := url.Values{\n\t\t\"label\":   {name},\n\t\t\"DCID\":    {fmt.Sprintf(\"%v\", regionID)},\n\t\t\"size_gb\": {fmt.Sprintf(\"%v\", size)},\n\t}\n\n\tvar storage BlockStorage\n\tif err := c.post(`block/create`, values, &storage); err != nil {\n\t\treturn BlockStorage{}, err\n\t}\n\tstorage.RegionID = regionID\n\tstorage.Name = name\n\tstorage.SizeGB = size\n\n\treturn storage, nil\n}\n\n// ResizeBlockStorage resizes an existing block storage\nfunc (c *Client) ResizeBlockStorage(id string, size int) error {\n\tvalues := url.Values{\n\t\t\"SUBID\":   {id},\n\t\t\"size_gb\": {fmt.Sprintf(\"%v\", size)},\n\t}\n\n\tif err := c.post(`block/resize`, values, nil); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// LabelBlockStorage changes the label on an existing block storage\nfunc (c *Client) LabelBlockStorage(id, name string) error {\n\tvalues := url.Values{\n\t\t\"SUBID\": {id},\n\t\t\"label\": {name},\n\t}\n\n\tif err := c.post(`block/label_set`, values, nil); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// AttachBlockStorage attaches block storage to an existing virtual machine\nfunc (c *Client) AttachBlockStorage(id, serverID string) error {\n\tvalues := url.Values{\n\t\t\"SUBID\":           {id},\n\t\t\"attach_to_SUBID\": {serverID},\n\t}\n\n\tif err := c.post(`block/attach`, values, nil); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// DetachBlockStorage detaches block storage from virtual machine\nfunc (c *Client) DetachBlockStorage(id string) error {\n\tvalues := url.Values{\n\t\t\"SUBID\": {id},\n\t}\n\n\tif err := c.post(`block/detach`, values, nil); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// DeleteBlockStorage deletes an existing block storage\nfunc (c *Client) DeleteBlockStorage(id string) error {\n\tvalues := url.Values{\n\t\t\"SUBID\": {id},\n\t}\n\n\tif err := c.post(`block/delete`, values, nil); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/JamesClonk/vultr/lib/client.go",
    "content": "package lib\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"crypto/tls\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"math/rand\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"strings\"\n\t\"time\"\n\n\t\"golang.org/x/time/rate\"\n)\n\nconst (\n\t// Version of this libary\n\tVersion = \"2.0.1\"\n\n\t// APIVersion of Vultr\n\tAPIVersion = \"v1\"\n\n\t// DefaultEndpoint to be used\n\tDefaultEndpoint = \"https://api.vultr.com/\"\n\n\tmediaType = \"application/json\"\n)\n\n// retryableStatusCodes are API response status codes that indicate that\n// the failed request can be retried without further actions.\nvar retryableStatusCodes = map[int]struct{}{\n\t503: {}, // Rate limit hit\n\t500: {}, // Internal server error. Try again at a later time.\n}\n\n// Client represents the Vultr API client\ntype Client struct {\n\t// HTTP client for communication with the Vultr API\n\tclient *http.Client\n\n\t// User agent for HTTP client\n\tUserAgent string\n\n\t// Endpoint URL for API requests\n\tEndpoint *url.URL\n\n\t// API key for accessing the Vultr API\n\tAPIKey string\n\n\t// Max. number of request attempts\n\tMaxAttempts int\n\n\t// Throttling struct\n\tlimiter *rate.Limiter\n\n\t// Optional function called after every successful request made to the API\n\tonRequestCompleted RequestCompletionCallback\n}\n\n// RequestCompletionCallback defines the type of the request callback function\ntype RequestCompletionCallback func(*http.Request, *http.Response)\n\n// Options represents optional settings and flags that can be passed to NewClient\ntype Options struct {\n\t// HTTP client for communication with the Vultr API\n\tHTTPClient *http.Client\n\n\t// User agent for HTTP client\n\tUserAgent string\n\n\t// Endpoint URL for API requests\n\tEndpoint string\n\n\t// API rate limitation, calls per duration\n\tRateLimitation time.Duration\n\n\t// Max. number of times to retry API calls\n\tMaxRetries int\n}\n\n// NewClient creates new Vultr API client. Options are optional and can be nil.\nfunc NewClient(apiKey string, options *Options) *Client {\n\tuserAgent := \"vultr-go/\" + Version\n\ttransport := &http.Transport{\n\t\tTLSNextProto: make(map[string]func(string, *tls.Conn) http.RoundTripper),\n\t}\n\tclient := http.DefaultClient\n\tclient.Transport = transport\n\tendpoint, _ := url.Parse(DefaultEndpoint)\n\trateLimit := 505 * time.Millisecond\n\tattempts := 1\n\n\tif options != nil {\n\t\tif options.HTTPClient != nil {\n\t\t\tclient = options.HTTPClient\n\t\t}\n\t\tif options.UserAgent != \"\" {\n\t\t\tuserAgent = options.UserAgent\n\t\t}\n\t\tif options.Endpoint != \"\" {\n\t\t\tendpoint, _ = url.Parse(options.Endpoint)\n\t\t}\n\t\tif options.RateLimitation != 0 {\n\t\t\trateLimit = options.RateLimitation\n\t\t}\n\t\tif options.MaxRetries != 0 {\n\t\t\tattempts = options.MaxRetries + 1\n\t\t}\n\t}\n\n\treturn &Client{\n\t\tUserAgent:   userAgent,\n\t\tclient:      client,\n\t\tEndpoint:    endpoint,\n\t\tAPIKey:      apiKey,\n\t\tMaxAttempts: attempts,\n\t\t// rate limit is req/s\n\t\tlimiter: rate.NewLimiter(rate.Limit(float64(time.Second)/float64(rateLimit)), 1),\n\t}\n}\n\nfunc apiPath(path string) string {\n\treturn fmt.Sprintf(\"/%s/%s\", APIVersion, path)\n}\n\nfunc (c *Client) get(path string, data interface{}) error {\n\treq, err := c.newRequest(\"GET\", apiPath(path), nil)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn c.do(req, data)\n}\n\nfunc (c *Client) post(path string, values url.Values, data interface{}) error {\n\treq, err := c.newRequest(\"POST\", apiPath(path), strings.NewReader(values.Encode()))\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn c.do(req, data)\n}\n\n// OnRequestCompleted sets the API request completion callback\nfunc (c *Client) OnRequestCompleted(rc RequestCompletionCallback) {\n\tc.onRequestCompleted = rc\n}\n\nfunc (c *Client) newRequest(method string, path string, body io.Reader) (*http.Request, error) {\n\trelPath, err := url.Parse(path)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\turl := c.Endpoint.ResolveReference(relPath)\n\n\treq, err := http.NewRequest(method, url.String(), body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treq.Header.Add(\"API-Key\", c.APIKey)\n\treq.Header.Add(\"User-Agent\", c.UserAgent)\n\treq.Header.Add(\"Accept\", mediaType)\n\n\tif req.Method == \"POST\" {\n\t\treq.Header.Set(\"Content-Type\", \"application/x-www-form-urlencoded\")\n\t}\n\treturn req, nil\n}\n\nfunc (c *Client) do(req *http.Request, data interface{}) error {\n\t// Throttle http requests to avoid hitting Vultr's API rate-limit\n\tc.limiter.Wait(context.Background()) // ignore error on ratelimiter\n\n\t// Request body gets drained on each read so we\n\t// need to save it's content for retrying requests\n\tvar err error\n\tvar requestBody []byte\n\tif req.Body != nil {\n\t\trequestBody, err = ioutil.ReadAll(req.Body)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"Error reading request body: %v\", err)\n\t\t}\n\t\treq.Body.Close()\n\t}\n\n\tvar apiError error\n\tfor tryCount := 1; tryCount <= c.MaxAttempts; tryCount++ {\n\t\t// Restore request body to the original state\n\t\tif requestBody != nil {\n\t\t\treq.Body = ioutil.NopCloser(bytes.NewBuffer(requestBody))\n\t\t}\n\n\t\tresp, err := c.client.Do(req)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tif c.onRequestCompleted != nil {\n\t\t\tc.onRequestCompleted(req, resp)\n\t\t}\n\n\t\tbody, err := ioutil.ReadAll(resp.Body)\n\t\tresp.Body.Close()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tif resp.StatusCode == http.StatusOK {\n\t\t\tif data != nil {\n\t\t\t\t// avoid unmarshalling problem because Vultr API returns\n\t\t\t\t// empty array instead of empty map when it shouldn't!\n\t\t\t\tif string(body) == `[]` {\n\t\t\t\t\tdata = nil\n\t\t\t\t} else {\n\t\t\t\t\tif err := json.Unmarshal(body, data); err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn nil\n\t\t}\n\n\t\tapiError = errors.New(string(body))\n\t\tif !isCodeRetryable(resp.StatusCode) {\n\t\t\tbreak\n\t\t}\n\n\t\tdelay := backoffDuration(tryCount)\n\t\ttime.Sleep(delay)\n\t}\n\n\treturn apiError\n}\n\n// backoffDuration returns the duration to wait before retrying the request.\n// Duration is an exponential function of the retry count with a jitter of ~0-30%.\nfunc backoffDuration(retryCount int) time.Duration {\n\t// Upper limit of delay at ~1 minute\n\tif retryCount > 7 {\n\t\tretryCount = 7\n\t}\n\n\trand.Seed(time.Now().UnixNano())\n\tdelay := (1 << uint(retryCount)) * (rand.Intn(150) + 500)\n\treturn time.Duration(delay) * time.Millisecond\n}\n\n// isCodeRetryable returns true if the given status code means that we should retry.\nfunc isCodeRetryable(statusCode int) bool {\n\tif _, ok := retryableStatusCodes[statusCode]; ok {\n\t\treturn true\n\t}\n\n\treturn false\n}\n"
  },
  {
    "path": "vendor/github.com/JamesClonk/vultr/lib/dns.go",
    "content": "package lib\n\nimport (\n\t\"fmt\"\n\t\"net/url\"\n\t\"sort\"\n\t\"strings\"\n)\n\n// DNSDomain represents a DNS domain on Vultr\ntype DNSDomain struct {\n\tDomain  string `json:\"domain\"`\n\tCreated string `json:\"date_created\"`\n}\n\ntype dnsdomains []DNSDomain\n\nfunc (d dnsdomains) Len() int      { return len(d) }\nfunc (d dnsdomains) Swap(i, j int) { d[i], d[j] = d[j], d[i] }\nfunc (d dnsdomains) Less(i, j int) bool {\n\treturn strings.ToLower(d[i].Domain) < strings.ToLower(d[j].Domain)\n}\n\n// DNSRecord represents a DNS record on Vultr\ntype DNSRecord struct {\n\tRecordID int    `json:\"RECORDID\"`\n\tType     string `json:\"type\"`\n\tName     string `json:\"name\"`\n\tData     string `json:\"data\"`\n\tPriority int    `json:\"priority\"`\n\tTTL      int    `json:\"ttl\"`\n}\n\ntype dnsrecords []DNSRecord\n\nfunc (d dnsrecords) Len() int      { return len(d) }\nfunc (d dnsrecords) Swap(i, j int) { d[i], d[j] = d[j], d[i] }\nfunc (d dnsrecords) Less(i, j int) bool {\n\t// sort order: type, data, name\n\tif d[i].Type < d[j].Type {\n\t\treturn true\n\t} else if d[i].Type > d[j].Type {\n\t\treturn false\n\t}\n\tif d[i].Data < d[j].Data {\n\t\treturn true\n\t} else if d[i].Data > d[j].Data {\n\t\treturn false\n\t}\n\treturn strings.ToLower(d[i].Name) < strings.ToLower(d[j].Name)\n}\n\n// GetDNSDomains returns a list of available domains on Vultr account\nfunc (c *Client) GetDNSDomains() (domains []DNSDomain, err error) {\n\tif err := c.get(`dns/list`, &domains); err != nil {\n\t\treturn nil, err\n\t}\n\tsort.Sort(dnsdomains(domains))\n\treturn domains, nil\n}\n\n// GetDNSRecords returns a list of all DNS records of a particular domain\nfunc (c *Client) GetDNSRecords(domain string) (records []DNSRecord, err error) {\n\tif err := c.get(`dns/records?domain=`+domain, &records); err != nil {\n\t\treturn nil, err\n\t}\n\tsort.Sort(dnsrecords(records))\n\treturn records, nil\n}\n\n// CreateDNSDomain creates a new DNS domain name on Vultr\nfunc (c *Client) CreateDNSDomain(domain, serverIP string) error {\n\tvalues := url.Values{\n\t\t\"domain\":   {domain},\n\t\t\"serverip\": {serverIP},\n\t}\n\n\tif err := c.post(`dns/create_domain`, values, nil); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// DeleteDNSDomain deletes an existing DNS domain name\nfunc (c *Client) DeleteDNSDomain(domain string) error {\n\tvalues := url.Values{\n\t\t\"domain\": {domain},\n\t}\n\n\tif err := c.post(`dns/delete_domain`, values, nil); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// CreateDNSRecord creates a new DNS record\nfunc (c *Client) CreateDNSRecord(domain, name, rtype, data string, priority, ttl int) error {\n\tvalues := url.Values{\n\t\t\"domain\":   {domain},\n\t\t\"name\":     {name},\n\t\t\"type\":     {rtype},\n\t\t\"data\":     {data},\n\t\t\"priority\": {fmt.Sprintf(\"%v\", priority)},\n\t\t\"ttl\":      {fmt.Sprintf(\"%v\", ttl)},\n\t}\n\n\tif err := c.post(`dns/create_record`, values, nil); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// UpdateDNSRecord updates an existing DNS record\nfunc (c *Client) UpdateDNSRecord(domain string, dnsrecord DNSRecord) error {\n\tvalues := url.Values{\n\t\t\"domain\":   {domain},\n\t\t\"RECORDID\": {fmt.Sprintf(\"%v\", dnsrecord.RecordID)},\n\t}\n\n\tif dnsrecord.Name != \"\" {\n\t\tvalues.Add(\"name\", dnsrecord.Name)\n\t}\n\tif dnsrecord.Data != \"\" {\n\t\tvalues.Add(\"data\", dnsrecord.Data)\n\t}\n\tif dnsrecord.Priority != 0 {\n\t\tvalues.Add(\"priority\", fmt.Sprintf(\"%v\", dnsrecord.Priority))\n\t}\n\tif dnsrecord.TTL != 0 {\n\t\tvalues.Add(\"ttl\", fmt.Sprintf(\"%v\", dnsrecord.TTL))\n\t}\n\n\tif err := c.post(`dns/update_record`, values, nil); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// DeleteDNSRecord deletes an existing DNS record\nfunc (c *Client) DeleteDNSRecord(domain string, recordID int) error {\n\tvalues := url.Values{\n\t\t\"domain\":   {domain},\n\t\t\"RECORDID\": {fmt.Sprintf(\"%v\", recordID)},\n\t}\n\n\tif err := c.post(`dns/delete_record`, values, nil); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/JamesClonk/vultr/lib/firewall.go",
    "content": "package lib\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net\"\n\t\"net/url\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// FirewallGroup represents a firewall group on Vultr\ntype FirewallGroup struct {\n\tID            string `json:\"FIREWALLGROUPID\"`\n\tDescription   string `json:\"description\"`\n\tCreated       string `json:\"date_created\"`\n\tModified      string `json:\"date_modified\"`\n\tInstanceCount int    `json:\"instance_count\"`\n\tRuleCount     int    `json:\"rule_count\"`\n\tMaxRuleCount  int    `json:\"max_rule_count\"`\n}\n\n// FirewallRule represents a firewall rule on Vultr\ntype FirewallRule struct {\n\tRuleNumber int    `json:\"rulenumber\"`\n\tAction     string `json:\"action\"`\n\tProtocol   string `json:\"protocol\"`\n\tPort       string `json:\"port\"`\n\tNetwork    *net.IPNet\n\tNotes      string `json:\"notes\"`\n}\n\ntype firewallGroups []FirewallGroup\n\nfunc (f firewallGroups) Len() int      { return len(f) }\nfunc (f firewallGroups) Swap(i, j int) { f[i], f[j] = f[j], f[i] }\nfunc (f firewallGroups) Less(i, j int) bool {\n\t// sort order: description\n\treturn strings.ToLower(f[i].Description) < strings.ToLower(f[j].Description)\n}\n\ntype firewallRules []FirewallRule\n\nfunc (r firewallRules) Len() int      { return len(r) }\nfunc (r firewallRules) Swap(i, j int) { r[i], r[j] = r[j], r[i] }\nfunc (r firewallRules) Less(i, j int) bool {\n\t// sort order: rule number\n\treturn r[i].RuleNumber < r[j].RuleNumber\n}\n\n// UnmarshalJSON implements json.Unmarshaller on FirewallRule.\n// This is needed because the Vultr API is inconsistent in it's JSON responses.\n// Some fields can change type, from JSON number to JSON string and vice-versa.\nfunc (r *FirewallRule) UnmarshalJSON(data []byte) (err error) {\n\tif r == nil {\n\t\t*r = FirewallRule{}\n\t}\n\n\tvar fields map[string]interface{}\n\tif err := json.Unmarshal(data, &fields); err != nil {\n\t\treturn err\n\t}\n\n\tvalue := fmt.Sprintf(\"%v\", fields[\"rulenumber\"])\n\tif len(value) == 0 || value == \"<nil>\" {\n\t\tvalue = \"0\"\n\t}\n\tnumber, err := strconv.ParseInt(value, 10, 64)\n\tif err != nil {\n\t\treturn err\n\t}\n\tr.RuleNumber = int(number)\n\n\tvalue = fmt.Sprintf(\"%v\", fields[\"subnet_size\"])\n\tif len(value) == 0 || value == \"<nil>\" {\n\t\tvalue = \"0\"\n\t}\n\tsubnetSize, err := strconv.ParseInt(value, 10, 64)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tr.Action = fmt.Sprintf(\"%v\", fields[\"action\"])\n\tr.Protocol = fmt.Sprintf(\"%v\", fields[\"protocol\"])\n\tr.Port = fmt.Sprintf(\"%v\", fields[\"port\"])\n\tr.Notes = fmt.Sprintf(\"%v\", fields[\"notes\"])\n\tsubnet := fmt.Sprintf(\"%v\", fields[\"subnet\"])\n\tif subnet == \"<nil>\" {\n\t\tsubnet = \"\"\n\t}\n\n\tif len(subnet) > 0 {\n\t\t_, r.Network, err = net.ParseCIDR(fmt.Sprintf(\"%s/%d\", subnet, subnetSize))\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"Failed to parse subnet from Vultr API\")\n\t\t}\n\t} else {\n\t\t// This case is used to create a valid default CIDR when the Vultr API does not return a subnet/subnet size at all, e.g. the response after creating a new rule.\n\t\t_, r.Network, _ = net.ParseCIDR(\"0.0.0.0/0\")\n\t}\n\n\treturn\n}\n\n// GetFirewallGroups returns a list of all available firewall groups on Vultr\nfunc (c *Client) GetFirewallGroups() ([]FirewallGroup, error) {\n\tvar groupMap map[string]FirewallGroup\n\tif err := c.get(`firewall/group_list`, &groupMap); err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar groupList []FirewallGroup\n\tfor _, g := range groupMap {\n\t\tgroupList = append(groupList, g)\n\t}\n\tsort.Sort(firewallGroups(groupList))\n\treturn groupList, nil\n}\n\n// GetFirewallGroup returns the firewall group with given ID\nfunc (c *Client) GetFirewallGroup(id string) (FirewallGroup, error) {\n\tgroups, err := c.GetFirewallGroups()\n\tif err != nil {\n\t\treturn FirewallGroup{}, err\n\t}\n\n\tfor _, g := range groups {\n\t\tif g.ID == id {\n\t\t\treturn g, nil\n\t\t}\n\t}\n\treturn FirewallGroup{}, fmt.Errorf(\"Firewall group with ID %v not found\", id)\n}\n\n// CreateFirewallGroup creates a new firewall group in Vultr account\nfunc (c *Client) CreateFirewallGroup(description string) (string, error) {\n\tvalues := url.Values{}\n\n\t// Optional description\n\tif len(description) > 0 {\n\t\tvalues.Add(\"description\", description)\n\t}\n\n\tvar result FirewallGroup\n\terr := c.post(`firewall/group_create`, values, &result)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn result.ID, nil\n}\n\n// DeleteFirewallGroup deletes an existing firewall group\nfunc (c *Client) DeleteFirewallGroup(groupID string) error {\n\tvalues := url.Values{\n\t\t\"FIREWALLGROUPID\": {groupID},\n\t}\n\n\tif err := c.post(`firewall/group_delete`, values, nil); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// SetFirewallGroupDescription sets the description of an existing firewall group\nfunc (c *Client) SetFirewallGroupDescription(groupID, description string) error {\n\tvalues := url.Values{\n\t\t\"FIREWALLGROUPID\": {groupID},\n\t\t\"description\":     {description},\n\t}\n\n\tif err := c.post(`firewall/group_set_description`, values, nil); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// GetFirewallRules returns a list of rules for the given firewall group\nfunc (c *Client) GetFirewallRules(groupID string) ([]FirewallRule, error) {\n\tvar ruleMap map[string]FirewallRule\n\tipTypes := []string{\"v4\", \"v6\"}\n\tfor _, ipType := range ipTypes {\n\t\targs := fmt.Sprintf(\"direction=in&FIREWALLGROUPID=%s&ip_type=%s\",\n\t\t\tgroupID, ipType)\n\t\tif err := c.get(`firewall/rule_list?`+args, &ruleMap); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\tvar ruleList []FirewallRule\n\tfor _, r := range ruleMap {\n\t\truleList = append(ruleList, r)\n\t}\n\tsort.Sort(firewallRules(ruleList))\n\treturn ruleList, nil\n}\n\n// CreateFirewallRule creates a new firewall rule in Vultr account.\n// groupID is the ID of the firewall group to create the rule in\n// protocol must be one of: \"icmp\", \"tcp\", \"udp\", \"gre\"\n// port can be a port number or colon separated port range (TCP/UDP only)\nfunc (c *Client) CreateFirewallRule(groupID, protocol, port string,\n\tnetwork *net.IPNet, notes string) (int, error) {\n\tip := network.IP.String()\n\tmaskBits, _ := network.Mask.Size()\n\tif ip == \"<nil>\" {\n\t\treturn 0, fmt.Errorf(\"Invalid network\")\n\t}\n\n\tvar ipType string\n\tif network.IP.To4() != nil {\n\t\tipType = \"v4\"\n\t} else {\n\t\tipType = \"v6\"\n\t}\n\n\tvalues := url.Values{\n\t\t\"FIREWALLGROUPID\": {groupID},\n\t\t// possible values: \"in\"\n\t\t\"direction\": {\"in\"},\n\t\t// possible values: \"icmp\", \"tcp\", \"udp\", \"gre\"\n\t\t\"protocol\": {protocol},\n\t\t// possible values: \"v4\", \"v6\"\n\t\t\"ip_type\": {ipType},\n\t\t// IP address representing a subnet\n\t\t\"subnet\": {ip},\n\t\t// IP prefix size in bits\n\t\t\"subnet_size\": {fmt.Sprintf(\"%v\", maskBits)},\n\t}\n\n\tif len(port) > 0 {\n\t\tvalues.Add(\"port\", port)\n\t}\n\n\tif len(notes) > 0 {\n\t\tvalues.Add(\"notes\", notes)\n\t}\n\n\tvar result FirewallRule\n\terr := c.post(`firewall/rule_create`, values, &result)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn result.RuleNumber, nil\n}\n\n// DeleteFirewallRule deletes an existing firewall rule\nfunc (c *Client) DeleteFirewallRule(ruleNumber int, groupID string) error {\n\tvalues := url.Values{\n\t\t\"FIREWALLGROUPID\": {groupID},\n\t\t\"rulenumber\":      {fmt.Sprintf(\"%v\", ruleNumber)},\n\t}\n\n\tif err := c.post(`firewall/rule_delete`, values, nil); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/JamesClonk/vultr/lib/ip.go",
    "content": "package lib\n\nimport (\n\t\"fmt\"\n\t\"net/url\"\n\t\"sort\"\n)\n\n// IPv4 information of a virtual machine\ntype IPv4 struct {\n\tIP         string `json:\"ip\"`\n\tNetmask    string `json:\"netmask\"`\n\tGateway    string `json:\"gateway\"`\n\tMAC        string `json:\"mac_address\"`\n\tType       string `json:\"type\"`\n\tReverseDNS string `json:\"reverse\"`\n}\n\ntype ipv4s []IPv4\n\nfunc (s ipv4s) Len() int      { return len(s) }\nfunc (s ipv4s) Swap(i, j int) { s[i], s[j] = s[j], s[i] }\nfunc (s ipv4s) Less(i, j int) bool {\n\t// sort order: type, ip\n\tif s[i].Type < s[j].Type {\n\t\treturn true\n\t} else if s[i].Type > s[j].Type {\n\t\treturn false\n\t}\n\treturn s[i].IP < s[j].IP\n}\n\n// IPv6 information of a virtual machine\ntype IPv6 struct {\n\tIP          string `json:\"ip\"`\n\tNetwork     string `json:\"network\"`\n\tNetworkSize string `json:\"network_size\"`\n\tType        string `json:\"type\"`\n}\n\ntype ipv6s []IPv6\n\nfunc (s ipv6s) Len() int      { return len(s) }\nfunc (s ipv6s) Swap(i, j int) { s[i], s[j] = s[j], s[i] }\nfunc (s ipv6s) Less(i, j int) bool {\n\t// sort order: type, ip\n\tif s[i].Type < s[j].Type {\n\t\treturn true\n\t} else if s[i].Type > s[j].Type {\n\t\treturn false\n\t}\n\treturn s[i].IP < s[j].IP\n}\n\n// ReverseDNSIPv6 information of a virtual machine\ntype ReverseDNSIPv6 struct {\n\tIP         string `json:\"ip\"`\n\tReverseDNS string `json:\"reverse\"`\n}\n\ntype reverseDNSIPv6s []ReverseDNSIPv6\n\nfunc (s reverseDNSIPv6s) Len() int           { return len(s) }\nfunc (s reverseDNSIPv6s) Swap(i, j int)      { s[i], s[j] = s[j], s[i] }\nfunc (s reverseDNSIPv6s) Less(i, j int) bool { return s[i].IP < s[j].IP }\n\n// ListIPv4 lists the IPv4 information of a virtual machine\nfunc (c *Client) ListIPv4(id string) (list []IPv4, err error) {\n\tvar ipMap map[string][]IPv4\n\tif err := c.get(`server/list_ipv4?SUBID=`+id+`&public_network=yes`, &ipMap); err != nil {\n\t\treturn nil, err\n\t}\n\n\tfor _, iplist := range ipMap {\n\t\tfor _, ip := range iplist {\n\t\t\tlist = append(list, ip)\n\t\t}\n\t}\n\tsort.Sort(ipv4s(list))\n\treturn list, nil\n}\n\n// CreateIPv4 creates an IPv4 address and attaches it to a virtual machine\nfunc (c *Client) CreateIPv4(id string, reboot bool) error {\n\tvalues := url.Values{\n\t\t\"SUBID\":  {id},\n\t\t\"reboot\": {fmt.Sprintf(\"%t\", reboot)},\n\t}\n\n\tif err := c.post(`server/create_ipv4`, values, nil); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// DeleteIPv4 deletes an IPv4 address and detaches it from a virtual machine\nfunc (c *Client) DeleteIPv4(id, ip string) error {\n\tvalues := url.Values{\n\t\t\"SUBID\": {id},\n\t\t\"ip\":    {ip},\n\t}\n\n\tif err := c.post(`server/destroy_ipv4`, values, nil); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// ListIPv6 lists the IPv4 information of a virtual machine\nfunc (c *Client) ListIPv6(id string) (list []IPv6, err error) {\n\tvar ipMap map[string][]IPv6\n\tif err := c.get(`server/list_ipv6?SUBID=`+id, &ipMap); err != nil {\n\t\treturn nil, err\n\t}\n\n\tfor _, iplist := range ipMap {\n\t\tfor _, ip := range iplist {\n\t\t\tlist = append(list, ip)\n\t\t}\n\t}\n\tsort.Sort(ipv6s(list))\n\treturn list, nil\n}\n\n// ListIPv6ReverseDNS lists the IPv6 reverse DNS entries of a virtual machine\nfunc (c *Client) ListIPv6ReverseDNS(id string) (list []ReverseDNSIPv6, err error) {\n\tvar ipMap map[string][]ReverseDNSIPv6\n\tif err := c.get(`server/reverse_list_ipv6?SUBID=`+id, &ipMap); err != nil {\n\t\treturn nil, err\n\t}\n\n\tfor _, iplist := range ipMap {\n\t\tfor _, ip := range iplist {\n\t\t\tlist = append(list, ip)\n\t\t}\n\t}\n\tsort.Sort(reverseDNSIPv6s(list))\n\treturn list, nil\n}\n\n// DeleteIPv6ReverseDNS removes a reverse DNS entry for an IPv6 address of a virtual machine\nfunc (c *Client) DeleteIPv6ReverseDNS(id string, ip string) error {\n\tvalues := url.Values{\n\t\t\"SUBID\": {id},\n\t\t\"ip\":    {ip},\n\t}\n\n\tif err := c.post(`server/reverse_delete_ipv6`, values, nil); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// SetIPv6ReverseDNS sets a reverse DNS entry for an IPv6 address of a virtual machine\nfunc (c *Client) SetIPv6ReverseDNS(id, ip, entry string) error {\n\tvalues := url.Values{\n\t\t\"SUBID\": {id},\n\t\t\"ip\":    {ip},\n\t\t\"entry\": {entry},\n\t}\n\n\tif err := c.post(`server/reverse_set_ipv6`, values, nil); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// DefaultIPv4ReverseDNS sets a reverse DNS entry for an IPv4 address of a virtual machine to the original setting\nfunc (c *Client) DefaultIPv4ReverseDNS(id, ip string) error {\n\tvalues := url.Values{\n\t\t\"SUBID\": {id},\n\t\t\"ip\":    {ip},\n\t}\n\n\tif err := c.post(`server/reverse_default_ipv4`, values, nil); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// SetIPv4ReverseDNS sets a reverse DNS entry for an IPv4 address of a virtual machine\nfunc (c *Client) SetIPv4ReverseDNS(id, ip, entry string) error {\n\tvalues := url.Values{\n\t\t\"SUBID\": {id},\n\t\t\"ip\":    {ip},\n\t\t\"entry\": {entry},\n\t}\n\n\tif err := c.post(`server/reverse_set_ipv4`, values, nil); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/JamesClonk/vultr/lib/iso.go",
    "content": "package lib\n\nimport (\n\t\"sort\"\n\t\"strings\"\n)\n\n// ISO image on Vultr\ntype ISO struct {\n\tID       int    `json:\"ISOID\"`\n\tCreated  string `json:\"date_created\"`\n\tFilename string `json:\"filename\"`\n\tSize     int    `json:\"size\"`\n\tMD5sum   string `json:\"md5sum\"`\n}\n\ntype isos []ISO\n\nfunc (s isos) Len() int      { return len(s) }\nfunc (s isos) Swap(i, j int) { s[i], s[j] = s[j], s[i] }\nfunc (s isos) Less(i, j int) bool {\n\t// sort order: filename, created\n\tif strings.ToLower(s[i].Filename) < strings.ToLower(s[j].Filename) {\n\t\treturn true\n\t} else if strings.ToLower(s[i].Filename) > strings.ToLower(s[j].Filename) {\n\t\treturn false\n\t}\n\treturn s[i].Created < s[j].Created\n}\n\n// GetISO returns a list of all ISO images on Vultr account\nfunc (c *Client) GetISO() ([]ISO, error) {\n\tvar isoMap map[string]ISO\n\tif err := c.get(`iso/list`, &isoMap); err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar isoList []ISO\n\tfor _, iso := range isoMap {\n\t\tisoList = append(isoList, iso)\n\t}\n\tsort.Sort(isos(isoList))\n\treturn isoList, nil\n}\n"
  },
  {
    "path": "vendor/github.com/JamesClonk/vultr/lib/network.go",
    "content": "package lib\n\nimport (\n\t\"fmt\"\n\t\"net\"\n\t\"net/url\"\n\t\"sort\"\n\t\"strings\"\n)\n\n// Network on Vultr account\ntype Network struct {\n\tID           string `json:\"NETWORKID\"`\n\tRegionID     int    `json:\"DCID,string\"`\n\tDescription  string `json:\"description\"`\n\tV4Subnet     string `json:\"v4_subnet\"`\n\tV4SubnetMask int    `json:\"v4_subnet_mask\"`\n\tCreated      string `json:\"date_created\"`\n}\n\ntype networks []Network\n\nfunc (n networks) Len() int      { return len(n) }\nfunc (n networks) Swap(i, j int) { n[i], n[j] = n[j], n[i] }\nfunc (n networks) Less(i, j int) bool {\n\t// sort order: description, created\n\tif strings.ToLower(n[i].Description) < strings.ToLower(n[j].Description) {\n\t\treturn true\n\t} else if strings.ToLower(n[i].Description) > strings.ToLower(n[j].Description) {\n\t\treturn false\n\t}\n\treturn n[i].Created < n[j].Created\n}\n\n// GetNetworks returns a list of Networks from Vultr account\nfunc (c *Client) GetNetworks() (nets []Network, err error) {\n\tvar netMap map[string]Network\n\tif err := c.get(`network/list`, &netMap); err != nil {\n\t\treturn nil, err\n\t}\n\n\tfor _, net := range netMap {\n\t\tnets = append(nets, net)\n\t}\n\tsort.Sort(networks(nets))\n\treturn nets, nil\n}\n\n// CreateNetwork creates new Network on Vultr\nfunc (c *Client) CreateNetwork(regionID int, description string, subnet *net.IPNet) (Network, error) {\n\tvar net string\n\tvar mask int\n\tvalues := url.Values{\n\t\t\"DCID\":        {fmt.Sprintf(\"%v\", regionID)},\n\t\t\"description\": {description},\n\t}\n\tif subnet != nil && subnet.IP.To4() != nil {\n\t\tnet = subnet.IP.To4().String()\n\t\tmask, _ = subnet.Mask.Size()\n\t\tvalues.Add(\"v4_subnet\", net)\n\t\tvalues.Add(\"v4_subnet_mask\", fmt.Sprintf(\"%v\", mask))\n\t}\n\tvar network Network\n\tif err := c.post(`network/create`, values, &network); err != nil {\n\t\treturn Network{}, err\n\t}\n\tnetwork.RegionID = regionID\n\tnetwork.Description = description\n\tnetwork.V4Subnet = net\n\tnetwork.V4SubnetMask = mask\n\n\treturn network, nil\n}\n\n// DeleteNetwork deletes an existing Network from Vultr account\nfunc (c *Client) DeleteNetwork(id string) error {\n\tvalues := url.Values{\n\t\t\"NETWORKID\": {id},\n\t}\n\n\treturn c.post(`network/destroy`, values, nil)\n}\n"
  },
  {
    "path": "vendor/github.com/JamesClonk/vultr/lib/os.go",
    "content": "package lib\n\nimport (\n\t\"sort\"\n\t\"strings\"\n)\n\n// OS image on Vultr\ntype OS struct {\n\tID        int    `json:\"OSID\"`\n\tName      string `json:\"name\"`\n\tArch      string `json:\"arch\"`\n\tFamily    string `json:\"family\"`\n\tWindows   bool   `json:\"windows\"`\n\tSurcharge string `json:\"surcharge\"`\n}\n\ntype oses []OS\n\nfunc (s oses) Len() int           { return len(s) }\nfunc (s oses) Swap(i, j int)      { s[i], s[j] = s[j], s[i] }\nfunc (s oses) Less(i, j int) bool { return strings.ToLower(s[i].Name) < strings.ToLower(s[j].Name) }\n\n// GetOS returns a list of all available operating systems on Vultr\nfunc (c *Client) GetOS() ([]OS, error) {\n\tvar osMap map[string]OS\n\tif err := c.get(`os/list`, &osMap); err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar osList []OS\n\tfor _, os := range osMap {\n\t\tosList = append(osList, os)\n\t}\n\tsort.Sort(oses(osList))\n\treturn osList, nil\n}\n"
  },
  {
    "path": "vendor/github.com/JamesClonk/vultr/lib/plans.go",
    "content": "package lib\n\nimport (\n\t\"fmt\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// Plan on Vultr\ntype Plan struct {\n\tID        int    `json:\"VPSPLANID,string\"`\n\tName      string `json:\"name\"`\n\tVCpus     int    `json:\"vcpu_count,string\"`\n\tRAM       string `json:\"ram\"`\n\tDisk      string `json:\"disk\"`\n\tBandwidth string `json:\"bandwidth\"`\n\tPrice     string `json:\"price_per_month\"`\n\tPlanType  string `json:\"plan_type\"`\n\tWindows   bool   `json:\"windows\"`\n\tRegions   []int  `json:\"available_locations\"`\n}\n\ntype plans []Plan\n\nfunc (p plans) Len() int      { return len(p) }\nfunc (p plans) Swap(i, j int) { p[i], p[j] = p[j], p[i] }\nfunc (p plans) Less(i, j int) bool {\n\tpa, _ := strconv.ParseFloat(strings.TrimSpace(p[i].Price), 64)\n\tpb, _ := strconv.ParseFloat(strings.TrimSpace(p[j].Price), 64)\n\tra, _ := strconv.ParseInt(strings.TrimSpace(p[i].RAM), 10, 64)\n\trb, _ := strconv.ParseInt(strings.TrimSpace(p[j].RAM), 10, 64)\n\tda, _ := strconv.ParseInt(strings.TrimSpace(p[i].Disk), 10, 64)\n\tdb, _ := strconv.ParseInt(strings.TrimSpace(p[j].Disk), 10, 64)\n\n\t// sort order: price, vcpu, ram, disk\n\tif pa < pb {\n\t\treturn true\n\t} else if pa > pb {\n\t\treturn false\n\t}\n\n\tif p[i].VCpus < p[j].VCpus {\n\t\treturn true\n\t} else if p[i].VCpus > p[j].VCpus {\n\t\treturn false\n\t}\n\n\tif ra < rb {\n\t\treturn true\n\t} else if ra > rb {\n\t\treturn false\n\t}\n\n\treturn da < db\n}\n\n// GetPlans returns a list of all available plans on Vultr account\nfunc (c *Client) GetPlans() ([]Plan, error) {\n\tvar planMap map[string]Plan\n\tif err := c.get(`plans/list`, &planMap); err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar p plans\n\tfor _, plan := range planMap {\n\t\tp = append(p, plan)\n\t}\n\n\tsort.Sort(plans(p))\n\treturn p, nil\n}\n\n// GetAvailablePlansForRegion returns available plans for specified region\nfunc (c *Client) GetAvailablePlansForRegion(id int) (planIDs []int, err error) {\n\tif err := c.get(fmt.Sprintf(`regions/availability?DCID=%v`, id), &planIDs); err != nil {\n\t\treturn nil, err\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/github.com/JamesClonk/vultr/lib/regions.go",
    "content": "package lib\n\nimport \"sort\"\n\n// Region on Vultr\ntype Region struct {\n\tID           int    `json:\"DCID,string\"`\n\tName         string `json:\"name\"`\n\tCountry      string `json:\"country\"`\n\tContinent    string `json:\"continent\"`\n\tState        string `json:\"state\"`\n\tDdos         bool   `json:\"ddos_protection\"`\n\tBlockStorage bool   `json:\"block_storage\"`\n\tCode         string `json:\"regioncode\"`\n}\n\ntype regions []Region\n\nfunc (s regions) Len() int      { return len(s) }\nfunc (s regions) Swap(i, j int) { s[i], s[j] = s[j], s[i] }\nfunc (s regions) Less(i, j int) bool {\n\t// sort order: continent, name\n\tif s[i].Continent < s[j].Continent {\n\t\treturn true\n\t} else if s[i].Continent > s[j].Continent {\n\t\treturn false\n\t}\n\treturn s[i].Name < s[j].Name\n}\n\n// GetRegions returns a list of all available Vultr regions\nfunc (c *Client) GetRegions() ([]Region, error) {\n\tvar regionMap map[string]Region\n\tif err := c.get(`regions/list`, &regionMap); err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar regionList []Region\n\tfor _, os := range regionMap {\n\t\tregionList = append(regionList, os)\n\t}\n\tsort.Sort(regions(regionList))\n\treturn regionList, nil\n}\n"
  },
  {
    "path": "vendor/github.com/JamesClonk/vultr/lib/reservedip.go",
    "content": "package lib\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/url\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// IP on Vultr\ntype IP struct {\n\tID         string `json:\"SUBID,string\"`\n\tRegionID   int    `json:\"DCID,string\"`\n\tIPType     string `json:\"ip_type\"`\n\tSubnet     string `json:\"subnet\"`\n\tSubnetSize int    `json:\"subnet_size\"`\n\tLabel      string `json:\"label\"`\n\tAttachedTo string `json:\"attached_SUBID,string\"`\n}\n\ntype ips []IP\n\nfunc (s ips) Len() int      { return len(s) }\nfunc (s ips) Swap(i, j int) { s[i], s[j] = s[j], s[i] }\nfunc (s ips) Less(i, j int) bool {\n\t// sort order: label, iptype, subnet\n\tif strings.ToLower(s[i].Label) < strings.ToLower(s[j].Label) {\n\t\treturn true\n\t} else if strings.ToLower(s[i].Label) > strings.ToLower(s[j].Label) {\n\t\treturn false\n\t}\n\tif s[i].IPType < s[j].IPType {\n\t\treturn true\n\t} else if s[i].IPType > s[j].IPType {\n\t\treturn false\n\t}\n\treturn s[i].Subnet < s[j].Subnet\n}\n\n// UnmarshalJSON implements json.Unmarshaller on IP.\n// This is needed because the Vultr API is inconsistent in it's JSON responses.\n// Some fields can change type, from JSON number to JSON string and vice-versa.\nfunc (i *IP) UnmarshalJSON(data []byte) (err error) {\n\tif i == nil {\n\t\t*i = IP{}\n\t}\n\n\tvar fields map[string]interface{}\n\tif err := json.Unmarshal(data, &fields); err != nil {\n\t\treturn err\n\t}\n\n\tvalue := fmt.Sprintf(\"%v\", fields[\"SUBID\"])\n\tif len(value) == 0 || value == \"<nil>\" || value == \"0\" {\n\t\ti.ID = \"\"\n\t} else {\n\t\tid, err := strconv.ParseFloat(value, 64)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ti.ID = strconv.FormatFloat(id, 'f', -1, 64)\n\t}\n\n\tvalue = fmt.Sprintf(\"%v\", fields[\"DCID\"])\n\tif len(value) == 0 || value == \"<nil>\" {\n\t\tvalue = \"0\"\n\t}\n\tregion, err := strconv.ParseInt(value, 10, 64)\n\tif err != nil {\n\t\treturn err\n\t}\n\ti.RegionID = int(region)\n\n\tvalue = fmt.Sprintf(\"%v\", fields[\"attached_SUBID\"])\n\tif len(value) == 0 || value == \"<nil>\" || value == \"0\" || value == \"false\" {\n\t\ti.AttachedTo = \"\"\n\t} else {\n\t\tattached, err := strconv.ParseFloat(value, 64)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ti.AttachedTo = strconv.FormatFloat(attached, 'f', -1, 64)\n\t}\n\n\tvalue = fmt.Sprintf(\"%v\", fields[\"subnet_size\"])\n\tif len(value) == 0 || value == \"<nil>\" {\n\t\tvalue = \"0\"\n\t}\n\tsize, err := strconv.ParseInt(value, 10, 64)\n\tif err != nil {\n\t\treturn err\n\t}\n\ti.SubnetSize = int(size)\n\n\ti.IPType = fmt.Sprintf(\"%v\", fields[\"ip_type\"])\n\ti.Subnet = fmt.Sprintf(\"%v\", fields[\"subnet\"])\n\ti.Label = fmt.Sprintf(\"%v\", fields[\"label\"])\n\n\treturn\n}\n\n// ListReservedIP returns a list of all available reserved IPs on Vultr account\nfunc (c *Client) ListReservedIP() ([]IP, error) {\n\tvar ipMap map[string]IP\n\n\terr := c.get(`reservedip/list`, &ipMap)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tipList := make([]IP, 0)\n\tfor _, ip := range ipMap {\n\t\tipList = append(ipList, ip)\n\t}\n\tsort.Sort(ips(ipList))\n\treturn ipList, nil\n}\n\n// GetReservedIP returns reserved IP with given ID\nfunc (c *Client) GetReservedIP(id string) (IP, error) {\n\tvar ipMap map[string]IP\n\n\terr := c.get(`reservedip/list`, &ipMap)\n\tif err != nil {\n\t\treturn IP{}, err\n\t}\n\tif ip, ok := ipMap[id]; ok {\n\t\treturn ip, nil\n\t}\n\treturn IP{}, fmt.Errorf(\"IP with ID %v not found\", id)\n}\n\n// CreateReservedIP creates a new reserved IP on Vultr account\nfunc (c *Client) CreateReservedIP(regionID int, ipType string, label string) (string, error) {\n\tvalues := url.Values{\n\t\t\"DCID\":    {fmt.Sprintf(\"%v\", regionID)},\n\t\t\"ip_type\": {ipType},\n\t}\n\tif len(label) > 0 {\n\t\tvalues.Add(\"label\", label)\n\t}\n\n\tresult := IP{}\n\terr := c.post(`reservedip/create`, values, &result)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn result.ID, nil\n}\n\n// DestroyReservedIP deletes an existing reserved IP\nfunc (c *Client) DestroyReservedIP(id string) error {\n\tvalues := url.Values{\n\t\t\"SUBID\": {id},\n\t}\n\treturn c.post(`reservedip/destroy`, values, nil)\n}\n\n// AttachReservedIP attaches a reserved IP to a virtual machine\nfunc (c *Client) AttachReservedIP(ip string, serverID string) error {\n\tvalues := url.Values{\n\t\t\"ip_address\":   {ip},\n\t\t\"attach_SUBID\": {serverID},\n\t}\n\treturn c.post(`reservedip/attach`, values, nil)\n}\n\n// DetachReservedIP detaches a reserved IP from an existing virtual machine\nfunc (c *Client) DetachReservedIP(serverID string, ip string) error {\n\tvalues := url.Values{\n\t\t\"ip_address\":   {ip},\n\t\t\"detach_SUBID\": {serverID},\n\t}\n\treturn c.post(`reservedip/detach`, values, nil)\n}\n\n// ConvertReservedIP converts an existing virtual machines IP to a reserved IP\nfunc (c *Client) ConvertReservedIP(serverID string, ip string) (string, error) {\n\tvalues := url.Values{\n\t\t\"SUBID\":      {serverID},\n\t\t\"ip_address\": {ip},\n\t}\n\n\tresult := IP{}\n\terr := c.post(`reservedip/convert`, values, &result)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn result.ID, err\n}\n"
  },
  {
    "path": "vendor/github.com/JamesClonk/vultr/lib/scripts.go",
    "content": "package lib\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/url\"\n\t\"sort\"\n\t\"strings\"\n)\n\n// StartupScript on Vultr account\ntype StartupScript struct {\n\tID      string `json:\"SCRIPTID\"`\n\tName    string `json:\"name\"`\n\tType    string `json:\"type\"`\n\tContent string `json:\"script\"`\n}\n\ntype startupscripts []StartupScript\n\nfunc (s startupscripts) Len() int      { return len(s) }\nfunc (s startupscripts) Swap(i, j int) { s[i], s[j] = s[j], s[i] }\nfunc (s startupscripts) Less(i, j int) bool {\n\treturn strings.ToLower(s[i].Name) < strings.ToLower(s[j].Name)\n}\n\n// UnmarshalJSON implements json.Unmarshaller on StartupScript.\n// Necessary because the SCRIPTID field has inconsistent types.\nfunc (s *StartupScript) UnmarshalJSON(data []byte) (err error) {\n\tif s == nil {\n\t\t*s = StartupScript{}\n\t}\n\n\tvar fields map[string]interface{}\n\tif err := json.Unmarshal(data, &fields); err != nil {\n\t\treturn err\n\t}\n\n\ts.ID = fmt.Sprintf(\"%v\", fields[\"SCRIPTID\"])\n\ts.Name = fmt.Sprintf(\"%v\", fields[\"name\"])\n\ts.Type = fmt.Sprintf(\"%v\", fields[\"type\"])\n\ts.Content = fmt.Sprintf(\"%v\", fields[\"script\"])\n\n\treturn\n}\n\n// GetStartupScripts returns a list of all startup scripts on the current Vultr account\nfunc (c *Client) GetStartupScripts() (scripts []StartupScript, err error) {\n\tvar scriptMap map[string]StartupScript\n\tif err := c.get(`startupscript/list`, &scriptMap); err != nil {\n\t\treturn nil, err\n\t}\n\n\tfor _, script := range scriptMap {\n\t\tif script.Type == \"\" {\n\t\t\tscript.Type = \"boot\" // set default script type\n\t\t}\n\t\tscripts = append(scripts, script)\n\t}\n\tsort.Sort(startupscripts(scripts))\n\treturn scripts, nil\n}\n\n// GetStartupScript returns the startup script with the given ID\nfunc (c *Client) GetStartupScript(id string) (StartupScript, error) {\n\tscripts, err := c.GetStartupScripts()\n\tif err != nil {\n\t\treturn StartupScript{}, err\n\t}\n\n\tfor _, s := range scripts {\n\t\tif s.ID == id {\n\t\t\treturn s, nil\n\t\t}\n\t}\n\treturn StartupScript{}, nil\n}\n\n// CreateStartupScript creates a new startup script\nfunc (c *Client) CreateStartupScript(name, content, scriptType string) (StartupScript, error) {\n\tvalues := url.Values{\n\t\t\"name\":   {name},\n\t\t\"script\": {content},\n\t\t\"type\":   {scriptType},\n\t}\n\n\tvar script StartupScript\n\tif err := c.post(`startupscript/create`, values, &script); err != nil {\n\t\treturn StartupScript{}, err\n\t}\n\tscript.Name = name\n\tscript.Content = content\n\tscript.Type = scriptType\n\n\treturn script, nil\n}\n\n// UpdateStartupScript updates an existing startup script\nfunc (c *Client) UpdateStartupScript(script StartupScript) error {\n\tvalues := url.Values{\n\t\t\"SCRIPTID\": {script.ID},\n\t}\n\tif script.Name != \"\" {\n\t\tvalues.Add(\"name\", script.Name)\n\t}\n\tif script.Content != \"\" {\n\t\tvalues.Add(\"script\", script.Content)\n\t}\n\n\tif err := c.post(`startupscript/update`, values, nil); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// DeleteStartupScript deletes an existing startup script from Vultr account\nfunc (c *Client) DeleteStartupScript(id string) error {\n\tvalues := url.Values{\n\t\t\"SCRIPTID\": {id},\n\t}\n\n\tif err := c.post(`startupscript/destroy`, values, nil); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/JamesClonk/vultr/lib/servers.go",
    "content": "package lib\n\nimport (\n\t\"encoding/base64\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/url\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// Server (virtual machine) on Vultr account\ntype Server struct {\n\tID               string      `json:\"SUBID\"`\n\tName             string      `json:\"label\"`\n\tOS               string      `json:\"os\"`\n\tRAM              string      `json:\"ram\"`\n\tDisk             string      `json:\"disk\"`\n\tMainIP           string      `json:\"main_ip\"`\n\tVCpus            int         `json:\"vcpu_count,string\"`\n\tLocation         string      `json:\"location\"`\n\tRegionID         int         `json:\"DCID,string\"`\n\tDefaultPassword  string      `json:\"default_password\"`\n\tCreated          string      `json:\"date_created\"`\n\tPendingCharges   float64     `json:\"pending_charges\"`\n\tStatus           string      `json:\"status\"`\n\tCost             string      `json:\"cost_per_month\"`\n\tCurrentBandwidth float64     `json:\"current_bandwidth_gb\"`\n\tAllowedBandwidth float64     `json:\"allowed_bandwidth_gb,string\"`\n\tNetmaskV4        string      `json:\"netmask_v4\"`\n\tGatewayV4        string      `json:\"gateway_v4\"`\n\tPowerStatus      string      `json:\"power_status\"`\n\tServerState      string      `json:\"server_state\"`\n\tPlanID           int         `json:\"VPSPLANID,string\"`\n\tV6Networks       []V6Network `json:\"v6_networks\"`\n\tInternalIP       string      `json:\"internal_ip\"`\n\tKVMUrl           string      `json:\"kvm_url\"`\n\tAutoBackups      string      `json:\"auto_backups\"`\n\tTag              string      `json:\"tag\"`\n\tOSID             string      `json:\"OSID\"`\n\tAppID            string      `json:\"APPID\"`\n\tFirewallGroupID  string      `json:\"FIREWALLGROUPID\"`\n}\n\n// ServerOptions are optional parameters to be used during server creation\ntype ServerOptions struct {\n\tIPXEChainURL         string\n\tISO                  int\n\tScript               int\n\tUserData             string\n\tSnapshot             string\n\tSSHKey               string\n\tReservedIP           string\n\tIPV6                 bool\n\tNetworks             []string\n\tPrivateNetworking    bool\n\tAutoBackups          bool\n\tDontNotifyOnActivate bool\n\tHostname             string\n\tTag                  string\n\tAppID                string\n\tFirewallGroupID      string\n}\n\ntype servers []Server\n\nfunc (s servers) Len() int      { return len(s) }\nfunc (s servers) Swap(i, j int) { s[i], s[j] = s[j], s[i] }\nfunc (s servers) Less(i, j int) bool {\n\t// sort order: name, ip\n\tif strings.ToLower(s[i].Name) < strings.ToLower(s[j].Name) {\n\t\treturn true\n\t} else if strings.ToLower(s[i].Name) > strings.ToLower(s[j].Name) {\n\t\treturn false\n\t}\n\treturn s[i].MainIP < s[j].MainIP\n}\n\n// AppInfo represents the application information of a Vultr server\ntype AppInfo struct {\n\tInfo string `json:\"app_info\"`\n}\n\n// V6Network represents a IPv6 network of a Vultr server\ntype V6Network struct {\n\tNetwork     string `json:\"v6_network\"`\n\tMainIP      string `json:\"v6_main_ip\"`\n\tNetworkSize string `json:\"v6_network_size\"`\n}\n\n// ISOStatus represents an ISO image attached to a Vultr server\ntype ISOStatus struct {\n\tState string `json:\"state\"`\n\tISOID string `json:\"ISOID\"`\n}\n\n// UnmarshalJSON implements json.Unmarshaller on Server.\n// This is needed because the Vultr API is inconsistent in it's JSON responses for servers.\n// Some fields can change type, from JSON number to JSON string and vice-versa.\nfunc (s *Server) UnmarshalJSON(data []byte) (err error) {\n\tif s == nil {\n\t\t*s = Server{}\n\t}\n\n\tvar fields map[string]interface{}\n\tif err := json.Unmarshal(data, &fields); err != nil {\n\t\treturn err\n\t}\n\n\tvalue := fmt.Sprintf(\"%v\", fields[\"vcpu_count\"])\n\tif len(value) == 0 || value == \"<nil>\" {\n\t\tvalue = \"0\"\n\t}\n\tvcpu, err := strconv.ParseInt(value, 10, 64)\n\tif err != nil {\n\t\treturn err\n\t}\n\ts.VCpus = int(vcpu)\n\n\tvalue = fmt.Sprintf(\"%v\", fields[\"DCID\"])\n\tif len(value) == 0 || value == \"<nil>\" {\n\t\tvalue = \"0\"\n\t}\n\tregion, err := strconv.ParseInt(value, 10, 64)\n\tif err != nil {\n\t\treturn err\n\t}\n\ts.RegionID = int(region)\n\n\tvalue = fmt.Sprintf(\"%v\", fields[\"VPSPLANID\"])\n\tif len(value) == 0 || value == \"<nil>\" {\n\t\tvalue = \"0\"\n\t}\n\tplan, err := strconv.ParseInt(value, 10, 64)\n\tif err != nil {\n\t\treturn err\n\t}\n\ts.PlanID = int(plan)\n\n\tvalue = fmt.Sprintf(\"%v\", fields[\"pending_charges\"])\n\tif len(value) == 0 || value == \"<nil>\" {\n\t\tvalue = \"0\"\n\t}\n\tpc, err := strconv.ParseFloat(value, 64)\n\tif err != nil {\n\t\treturn err\n\t}\n\ts.PendingCharges = pc\n\n\tvalue = fmt.Sprintf(\"%v\", fields[\"current_bandwidth_gb\"])\n\tif len(value) == 0 || value == \"<nil>\" {\n\t\tvalue = \"0\"\n\t}\n\tcb, err := strconv.ParseFloat(value, 64)\n\tif err != nil {\n\t\treturn err\n\t}\n\ts.CurrentBandwidth = cb\n\n\tvalue = fmt.Sprintf(\"%v\", fields[\"allowed_bandwidth_gb\"])\n\tif len(value) == 0 || value == \"<nil>\" {\n\t\tvalue = \"0\"\n\t}\n\tab, err := strconv.ParseFloat(value, 64)\n\tif err != nil {\n\t\treturn err\n\t}\n\ts.AllowedBandwidth = ab\n\n\tvalue = fmt.Sprintf(\"%v\", fields[\"OSID\"])\n\tif value == \"<nil>\" {\n\t\tvalue = \"\"\n\t}\n\ts.OSID = value\n\n\tvalue = fmt.Sprintf(\"%v\", fields[\"APPID\"])\n\tif value == \"<nil>\" || value == \"0\" {\n\t\tvalue = \"\"\n\t}\n\ts.AppID = value\n\n\tvalue = fmt.Sprintf(\"%v\", fields[\"FIREWALLGROUPID\"])\n\tif value == \"<nil>\" || value == \"0\" {\n\t\tvalue = \"\"\n\t}\n\ts.FirewallGroupID = value\n\n\ts.ID = fmt.Sprintf(\"%v\", fields[\"SUBID\"])\n\ts.Name = fmt.Sprintf(\"%v\", fields[\"label\"])\n\ts.OS = fmt.Sprintf(\"%v\", fields[\"os\"])\n\ts.RAM = fmt.Sprintf(\"%v\", fields[\"ram\"])\n\ts.Disk = fmt.Sprintf(\"%v\", fields[\"disk\"])\n\ts.MainIP = fmt.Sprintf(\"%v\", fields[\"main_ip\"])\n\ts.Location = fmt.Sprintf(\"%v\", fields[\"location\"])\n\ts.DefaultPassword = fmt.Sprintf(\"%v\", fields[\"default_password\"])\n\ts.Created = fmt.Sprintf(\"%v\", fields[\"date_created\"])\n\ts.Status = fmt.Sprintf(\"%v\", fields[\"status\"])\n\ts.Cost = fmt.Sprintf(\"%v\", fields[\"cost_per_month\"])\n\ts.NetmaskV4 = fmt.Sprintf(\"%v\", fields[\"netmask_v4\"])\n\ts.GatewayV4 = fmt.Sprintf(\"%v\", fields[\"gateway_v4\"])\n\ts.PowerStatus = fmt.Sprintf(\"%v\", fields[\"power_status\"])\n\ts.ServerState = fmt.Sprintf(\"%v\", fields[\"server_state\"])\n\n\tv6networks := make([]V6Network, 0)\n\tif networks, ok := fields[\"v6_networks\"].([]interface{}); ok {\n\t\tfor _, network := range networks {\n\t\t\tif network, ok := network.(map[string]interface{}); ok {\n\t\t\t\tv6network := V6Network{\n\t\t\t\t\tNetwork:     fmt.Sprintf(\"%v\", network[\"v6_network\"]),\n\t\t\t\t\tMainIP:      fmt.Sprintf(\"%v\", network[\"v6_main_ip\"]),\n\t\t\t\t\tNetworkSize: fmt.Sprintf(\"%v\", network[\"v6_network_size\"]),\n\t\t\t\t}\n\t\t\t\tv6networks = append(v6networks, v6network)\n\t\t\t}\n\t\t}\n\t\ts.V6Networks = v6networks\n\t}\n\n\ts.InternalIP = fmt.Sprintf(\"%v\", fields[\"internal_ip\"])\n\ts.KVMUrl = fmt.Sprintf(\"%v\", fields[\"kvm_url\"])\n\ts.AutoBackups = fmt.Sprintf(\"%v\", fields[\"auto_backups\"])\n\ts.Tag = fmt.Sprintf(\"%v\", fields[\"tag\"])\n\n\treturn\n}\n\n// GetServers returns a list of current virtual machines on Vultr account\nfunc (c *Client) GetServers() (serverList []Server, err error) {\n\tvar serverMap map[string]Server\n\tif err := c.get(`server/list`, &serverMap); err != nil {\n\t\treturn nil, err\n\t}\n\n\tfor _, server := range serverMap {\n\t\tserverList = append(serverList, server)\n\t}\n\tsort.Sort(servers(serverList))\n\treturn serverList, nil\n}\n\n// GetServersByTag returns a list of all virtual machines matching by tag\nfunc (c *Client) GetServersByTag(tag string) (serverList []Server, err error) {\n\tvar serverMap map[string]Server\n\tif err := c.get(`server/list?tag=`+tag, &serverMap); err != nil {\n\t\treturn nil, err\n\t}\n\n\tfor _, server := range serverMap {\n\t\tserverList = append(serverList, server)\n\t}\n\tsort.Sort(servers(serverList))\n\treturn serverList, nil\n}\n\n// GetServer returns the virtual machine with the given ID\nfunc (c *Client) GetServer(id string) (server Server, err error) {\n\tif err := c.get(`server/list?SUBID=`+id, &server); err != nil {\n\t\treturn Server{}, err\n\t}\n\treturn server, nil\n}\n\n// CreateServer creates a new virtual machine on Vultr. ServerOptions are optional settings.\nfunc (c *Client) CreateServer(name string, regionID, planID, osID int, options *ServerOptions) (Server, error) {\n\tvalues := url.Values{\n\t\t\"label\":     {name},\n\t\t\"DCID\":      {fmt.Sprintf(\"%v\", regionID)},\n\t\t\"VPSPLANID\": {fmt.Sprintf(\"%v\", planID)},\n\t\t\"OSID\":      {fmt.Sprintf(\"%v\", osID)},\n\t}\n\n\tif options != nil {\n\t\tif options.IPXEChainURL != \"\" {\n\t\t\tvalues.Add(\"ipxe_chain_url\", options.IPXEChainURL)\n\t\t}\n\n\t\tif options.ISO != 0 {\n\t\t\tvalues.Add(\"ISOID\", fmt.Sprintf(\"%v\", options.ISO))\n\t\t}\n\n\t\tif options.Script != 0 {\n\t\t\tvalues.Add(\"SCRIPTID\", fmt.Sprintf(\"%v\", options.Script))\n\t\t}\n\n\t\tif options.UserData != \"\" {\n\t\t\tvalues.Add(\"userdata\", base64.StdEncoding.EncodeToString([]byte(options.UserData)))\n\t\t}\n\n\t\tif options.Snapshot != \"\" {\n\t\t\tvalues.Add(\"SNAPSHOTID\", options.Snapshot)\n\t\t}\n\n\t\tif options.SSHKey != \"\" {\n\t\t\tvalues.Add(\"SSHKEYID\", options.SSHKey)\n\t\t}\n\n\t\tif options.ReservedIP != \"\" {\n\t\t\tvalues.Add(\"reserved_ip_v4\", options.ReservedIP)\n\t\t}\n\n\t\tif options.Networks != nil && len(options.Networks) != 0 {\n\t\t\tfor _, n := range options.Networks {\n\t\t\t\tvalues.Add(\"NETWORKID[]\", n)\n\t\t\t}\n\t\t} else {\n\t\t\tvalues.Add(\"enable_private_network\", \"no\")\n\t\t\tif options.PrivateNetworking {\n\t\t\t\tvalues.Set(\"enable_private_network\", \"yes\")\n\t\t\t}\n\t\t}\n\n\t\tvalues.Add(\"enable_ipv6\", \"no\")\n\t\tif options.IPV6 {\n\t\t\tvalues.Set(\"enable_ipv6\", \"yes\")\n\t\t}\n\n\t\tvalues.Add(\"auto_backups\", \"no\")\n\t\tif options.AutoBackups {\n\t\t\tvalues.Set(\"auto_backups\", \"yes\")\n\t\t}\n\n\t\tvalues.Add(\"notify_activate\", \"yes\")\n\t\tif options.DontNotifyOnActivate {\n\t\t\tvalues.Set(\"notify_activate\", \"no\")\n\t\t}\n\n\t\tif options.Hostname != \"\" {\n\t\t\tvalues.Add(\"hostname\", options.Hostname)\n\t\t}\n\n\t\tif options.Tag != \"\" {\n\t\t\tvalues.Add(\"tag\", options.Tag)\n\t\t}\n\n\t\tif options.AppID != \"\" {\n\t\t\tvalues.Add(\"APPID\", options.AppID)\n\t\t}\n\n\t\tif options.FirewallGroupID != \"\" {\n\t\t\tvalues.Add(\"FIREWALLGROUPID\", options.FirewallGroupID)\n\t\t}\n\t}\n\n\tvar server Server\n\tif err := c.post(`server/create`, values, &server); err != nil {\n\t\treturn Server{}, err\n\t}\n\tserver.Name = name\n\tserver.RegionID = regionID\n\tserver.PlanID = planID\n\n\treturn server, nil\n}\n\n// RenameServer renames an existing virtual machine\nfunc (c *Client) RenameServer(id, name string) error {\n\tvalues := url.Values{\n\t\t\"SUBID\": {id},\n\t\t\"label\": {name},\n\t}\n\n\tif err := c.post(`server/label_set`, values, nil); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// TagServer replaces the tag on an existing virtual machine\nfunc (c *Client) TagServer(id, tag string) error {\n\tvalues := url.Values{\n\t\t\"SUBID\": {id},\n\t\t\"tag\":   {tag},\n\t}\n\n\tif err := c.post(`server/tag_set`, values, nil); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// StartServer starts an existing virtual machine\nfunc (c *Client) StartServer(id string) error {\n\tvalues := url.Values{\n\t\t\"SUBID\": {id},\n\t}\n\n\tif err := c.post(`server/start`, values, nil); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// HaltServer stops an existing virtual machine\nfunc (c *Client) HaltServer(id string) error {\n\tvalues := url.Values{\n\t\t\"SUBID\": {id},\n\t}\n\n\tif err := c.post(`server/halt`, values, nil); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// RebootServer reboots an existing virtual machine\nfunc (c *Client) RebootServer(id string) error {\n\tvalues := url.Values{\n\t\t\"SUBID\": {id},\n\t}\n\n\tif err := c.post(`server/reboot`, values, nil); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// ReinstallServer reinstalls the operating system on an existing virtual machine\nfunc (c *Client) ReinstallServer(id string) error {\n\tvalues := url.Values{\n\t\t\"SUBID\": {id},\n\t}\n\n\tif err := c.post(`server/reinstall`, values, nil); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// ChangeOSofServer changes the virtual machine to a different operating system\nfunc (c *Client) ChangeOSofServer(id string, osID int) error {\n\tvalues := url.Values{\n\t\t\"SUBID\": {id},\n\t\t\"OSID\":  {fmt.Sprintf(\"%v\", osID)},\n\t}\n\n\tif err := c.post(`server/os_change`, values, nil); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// ListOSforServer lists all available operating systems to which an existing virtual machine can be changed\nfunc (c *Client) ListOSforServer(id string) (os []OS, err error) {\n\tvar osMap map[string]OS\n\tif err := c.get(`server/os_change_list?SUBID=`+id, &osMap); err != nil {\n\t\treturn nil, err\n\t}\n\n\tfor _, o := range osMap {\n\t\tos = append(os, o)\n\t}\n\tsort.Sort(oses(os))\n\treturn os, nil\n}\n\n// AttachISOtoServer attaches an ISO image to an existing virtual machine and reboots it\nfunc (c *Client) AttachISOtoServer(id string, isoID int) error {\n\tvalues := url.Values{\n\t\t\"SUBID\": {id},\n\t\t\"ISOID\": {fmt.Sprintf(\"%v\", isoID)},\n\t}\n\n\tif err := c.post(`server/iso_attach`, values, nil); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// DetachISOfromServer detaches the currently mounted ISO image from the virtual machine and reboots it\nfunc (c *Client) DetachISOfromServer(id string) error {\n\tvalues := url.Values{\n\t\t\"SUBID\": {id},\n\t}\n\n\tif err := c.post(`server/iso_detach`, values, nil); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// GetISOStatusofServer retrieves the current ISO image state of an existing virtual machine\nfunc (c *Client) GetISOStatusofServer(id string) (isoStatus ISOStatus, err error) {\n\tif err := c.get(`server/iso_status?SUBID=`+id, &isoStatus); err != nil {\n\t\treturn ISOStatus{}, err\n\t}\n\treturn isoStatus, nil\n}\n\n// RestoreBackup restore the specified backup to the virtual machine\nfunc (c *Client) RestoreBackup(id, backupID string) error {\n\tvalues := url.Values{\n\t\t\"SUBID\":    {id},\n\t\t\"BACKUPID\": {backupID},\n\t}\n\n\tif err := c.post(`server/restore_backup`, values, nil); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// RestoreSnapshot restore the specified snapshot to the virtual machine\nfunc (c *Client) RestoreSnapshot(id, snapshotID string) error {\n\tvalues := url.Values{\n\t\t\"SUBID\":      {id},\n\t\t\"SNAPSHOTID\": {snapshotID},\n\t}\n\n\tif err := c.post(`server/restore_snapshot`, values, nil); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// DeleteServer deletes an existing virtual machine\nfunc (c *Client) DeleteServer(id string) error {\n\tvalues := url.Values{\n\t\t\"SUBID\": {id},\n\t}\n\n\tif err := c.post(`server/destroy`, values, nil); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// SetFirewallGroup adds a virtual machine to a firewall group\nfunc (c *Client) SetFirewallGroup(id, firewallgroup string) error {\n\tvalues := url.Values{\n\t\t\"SUBID\":           {id},\n\t\t\"FIREWALLGROUPID\": {firewallgroup},\n\t}\n\n\tif err := c.post(`server/firewall_group_set`, values, nil); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// UnsetFirewallGroup removes a virtual machine from a firewall group\nfunc (c *Client) UnsetFirewallGroup(id string) error {\n\treturn c.SetFirewallGroup(id, \"0\")\n}\n\n// BandwidthOfServer retrieves the bandwidth used by a virtual machine\nfunc (c *Client) BandwidthOfServer(id string) (bandwidth []map[string]string, err error) {\n\tvar bandwidthMap map[string][][]string\n\tif err := c.get(`server/bandwidth?SUBID=`+id, &bandwidthMap); err != nil {\n\t\treturn nil, err\n\t}\n\n\t// parse incoming bytes\n\tfor _, b := range bandwidthMap[\"incoming_bytes\"] {\n\t\tbMap := make(map[string]string)\n\t\tbMap[\"date\"] = b[0]\n\t\tbMap[\"incoming\"] = b[1]\n\t\tbandwidth = append(bandwidth, bMap)\n\t}\n\n\t// parse outgoing bytes (we'll assume that incoming and outgoing dates are always a match)\n\tfor _, b := range bandwidthMap[\"outgoing_bytes\"] {\n\t\tfor i := range bandwidth {\n\t\t\tif bandwidth[i][\"date\"] == b[0] {\n\t\t\t\tbandwidth[i][\"outgoing\"] = b[1]\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\n\treturn bandwidth, nil\n}\n\n// ChangeApplicationofServer changes the virtual machine to a different application\nfunc (c *Client) ChangeApplicationofServer(id string, appID string) error {\n\tvalues := url.Values{\n\t\t\"SUBID\": {id},\n\t\t\"APPID\": {appID},\n\t}\n\n\tif err := c.post(`server/app_change`, values, nil); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// ListApplicationsforServer lists all available operating systems to which an existing virtual machine can be changed\nfunc (c *Client) ListApplicationsforServer(id string) (apps []Application, err error) {\n\tvar appMap map[string]Application\n\tif err := c.get(`server/app_change_list?SUBID=`+id, &appMap); err != nil {\n\t\treturn nil, err\n\t}\n\n\tfor _, app := range appMap {\n\t\tapps = append(apps, app)\n\t}\n\tsort.Sort(applications(apps))\n\treturn apps, nil\n}\n\n// GetApplicationInfo retrieves the application information for the existing virtual machine\nfunc (c *Client) GetApplicationInfo(id string) (appInfo AppInfo, err error) {\n\tif err := c.get(`server/get_app_info?SUBID=`+id, &appInfo); err != nil {\n\t\treturn AppInfo{}, err\n\t}\n\treturn appInfo, nil\n}\n\n// PrivateNetwork on Vultr\ntype PrivateNetwork struct {\n\tID         string `json:\"NETWORKID\"`\n\tMACAddress string `json:\"mac_address\"`\n\tIPAddress  string `json:\"ip_address\"`\n}\n\ntype privateNetworks []PrivateNetwork\n\nfunc (p privateNetworks) Len() int      { return len(p) }\nfunc (p privateNetworks) Swap(i, j int) { p[i], p[j] = p[j], p[i] }\nfunc (p privateNetworks) Less(i, j int) bool {\n\treturn strings.ToLower(p[i].MACAddress) < strings.ToLower(p[j].MACAddress)\n}\n\n// ListPrivateNetworksForServer lists all the private networks to which an existing virtual machine is attached\nfunc (c *Client) ListPrivateNetworksForServer(id string) (nets []PrivateNetwork, err error) {\n\tvar netMap map[string]PrivateNetwork\n\tif err := c.get(`server/private_networks?SUBID=`+id, &netMap); err != nil {\n\t\treturn nil, err\n\t}\n\n\tfor _, net := range netMap {\n\t\tnets = append(nets, net)\n\t}\n\tsort.Sort(privateNetworks(nets))\n\treturn nets, nil\n}\n\n// DisablePrivateNetworkForServer removes the given virtual machine from the given private network\nfunc (c *Client) DisablePrivateNetworkForServer(id, networkID string) error {\n\tvalues := url.Values{\n\t\t\"SUBID\":     {id},\n\t\t\"NETWORKID\": {networkID},\n\t}\n\n\treturn c.post(`server/private_network_disable`, values, nil)\n}\n\n// EnablePrivateNetworkForServer enables private networking for the given virtual machine.\n// If private networking is already enabled, then nothing occurs.\n// If multiple private networks exist in the virtual machine's region, then the network ID must be specified.\nfunc (c *Client) EnablePrivateNetworkForServer(id, networkID string) error {\n\tvalues := url.Values{\n\t\t\"SUBID\": {id},\n\t}\n\tif networkID != \"\" {\n\t\tvalues.Add(\"NETWORKID\", networkID)\n\t}\n\n\treturn c.post(`server/private_network_enable`, values, nil)\n}\n\n// BackupSchedule represents a scheduled backup on a server\n// see: server/backup_set_schedule, server/backup_get_schedule\ntype BackupSchedule struct {\n\tCronType             string `json:\"cron_type\"`\n\tNextScheduledTimeUtc string `json:\"next_scheduled_time_utc\"`\n\tHour                 int    `json:\"hour\"`\n\tDow                  int    `json:\"dow\"`\n\tDom                  int    `json:\"dom\"`\n}\n\n// BackupScheduleResponse details about a virtual machines backup schedule\ntype BackupScheduleResponse struct {\n\tEnabled bool `json:\"enabled\"`\n\tBackupSchedule\n}\n\n// BackupGetSchedule returns a virtual machines backup schedule\nfunc (c *Client) BackupGetSchedule(id string) (*BackupScheduleResponse, error) {\n\tvar bsr = &BackupScheduleResponse{}\n\tvalues := url.Values{\n\t\t\"SUBID\": {id},\n\t}\n\tif err := c.post(`server/backup_get_schedule`, values, &bsr); err != nil {\n\t\treturn nil, err\n\t}\n\treturn bsr, nil\n}\n\n// BackupSetSchedule sets the backup schedule given a BackupSchedule struct\nfunc (c *Client) BackupSetSchedule(id string, bs BackupSchedule) error {\n\tvalues := url.Values{\n\t\t\"SUBID\":     {id},\n\t\t\"cron_type\": {bs.CronType},\n\t\t\"hour\":      {string(bs.Hour)},\n\t\t\"dow\":       {string(bs.Dow)},\n\t\t\"dom\":       {string(bs.Dom)},\n\t}\n\treturn c.post(`server/backup_set_schedule`, values, nil)\n}\n\n// ChangePlanOfServer changes the virtual machine to a different plan\nfunc (c *Client) ChangePlanOfServer(id string, planID int) error {\n\tvalues := url.Values{\n\t\t\"SUBID\":     {id},\n\t\t\"VPSPLANID\": {fmt.Sprintf(\"%v\", planID)},\n\t}\n\n\tif err := c.post(`server/upgrade_plan`, values, nil); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// ListUpgradePlansForServer retrieves a list of the VPSPLANIDs for which a virtual machine can be upgraded.\n// An empty response means that there are currently no upgrades available\nfunc (c *Client) ListUpgradePlansForServer(id string) (planIDs []int, err error) {\n\tif err := c.get(`server/upgrade_plan_list?SUBID=`+id, &planIDs); err != nil {\n\t\treturn nil, err\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/github.com/JamesClonk/vultr/lib/snapshots.go",
    "content": "package lib\n\nimport (\n\t\"net/url\"\n\t\"sort\"\n\t\"strings\"\n)\n\n// Snapshot of a virtual machine on Vultr account\ntype Snapshot struct {\n\tID          string `json:\"SNAPSHOTID\"`\n\tDescription string `json:\"description\"`\n\tSize        string `json:\"size\"`\n\tStatus      string `json:\"status\"`\n\tCreated     string `json:\"date_created\"`\n\tOSID        string `json:\"OSID\"`\n\tAppID       string `json:\"APPID\"`\n}\n\ntype snapshots []Snapshot\n\nfunc (s snapshots) Len() int      { return len(s) }\nfunc (s snapshots) Swap(i, j int) { s[i], s[j] = s[j], s[i] }\nfunc (s snapshots) Less(i, j int) bool {\n\t// sort order: description, created\n\tif strings.ToLower(s[i].Description) < strings.ToLower(s[j].Description) {\n\t\treturn true\n\t} else if strings.ToLower(s[i].Description) > strings.ToLower(s[j].Description) {\n\t\treturn false\n\t}\n\treturn s[i].Created < s[j].Created\n}\n\n// GetSnapshots retrieves a list of all snapshots on Vultr account\nfunc (c *Client) GetSnapshots() (snapshotList []Snapshot, err error) {\n\tvar snapshotMap map[string]Snapshot\n\tif err := c.get(`snapshot/list`, &snapshotMap); err != nil {\n\t\treturn nil, err\n\t}\n\n\tfor _, snapshot := range snapshotMap {\n\t\tsnapshotList = append(snapshotList, snapshot)\n\t}\n\tsort.Sort(snapshots(snapshotList))\n\treturn snapshotList, nil\n}\n\n// CreateSnapshot creates a new virtual machine snapshot\nfunc (c *Client) CreateSnapshot(id, description string) (Snapshot, error) {\n\tvalues := url.Values{\n\t\t\"SUBID\":       {id},\n\t\t\"description\": {description},\n\t}\n\n\tvar snapshot Snapshot\n\tif err := c.post(`snapshot/create`, values, &snapshot); err != nil {\n\t\treturn Snapshot{}, err\n\t}\n\tsnapshot.Description = description\n\n\treturn snapshot, nil\n}\n\n// DeleteSnapshot deletes an existing virtual machine snapshot\nfunc (c *Client) DeleteSnapshot(id string) error {\n\tvalues := url.Values{\n\t\t\"SNAPSHOTID\": {id},\n\t}\n\n\tif err := c.post(`snapshot/destroy`, values, nil); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/JamesClonk/vultr/lib/sshkeys.go",
    "content": "package lib\n\nimport (\n\t\"net/url\"\n\t\"sort\"\n\t\"strings\"\n)\n\n// SSHKey on Vultr account\ntype SSHKey struct {\n\tID      string `json:\"SSHKEYID\"`\n\tName    string `json:\"name\"`\n\tKey     string `json:\"ssh_key\"`\n\tCreated string `json:\"date_created\"`\n}\n\ntype sshkeys []SSHKey\n\nfunc (s sshkeys) Len() int           { return len(s) }\nfunc (s sshkeys) Swap(i, j int)      { s[i], s[j] = s[j], s[i] }\nfunc (s sshkeys) Less(i, j int) bool { return strings.ToLower(s[i].Name) < strings.ToLower(s[j].Name) }\n\n// GetSSHKeys returns a list of SSHKeys from Vultr account\nfunc (c *Client) GetSSHKeys() (keys []SSHKey, err error) {\n\tvar keyMap map[string]SSHKey\n\tif err := c.get(`sshkey/list`, &keyMap); err != nil {\n\t\treturn nil, err\n\t}\n\n\tfor _, key := range keyMap {\n\t\tkeys = append(keys, key)\n\t}\n\tsort.Sort(sshkeys(keys))\n\treturn keys, nil\n}\n\n// CreateSSHKey creates new SSHKey on Vultr\nfunc (c *Client) CreateSSHKey(name, key string) (SSHKey, error) {\n\tvalues := url.Values{\n\t\t\"name\":    {name},\n\t\t\"ssh_key\": {key},\n\t}\n\n\tvar sshKey SSHKey\n\tif err := c.post(`sshkey/create`, values, &sshKey); err != nil {\n\t\treturn SSHKey{}, err\n\t}\n\tsshKey.Name = name\n\tsshKey.Key = key\n\n\treturn sshKey, nil\n}\n\n// UpdateSSHKey updates an existing SSHKey entry\nfunc (c *Client) UpdateSSHKey(key SSHKey) error {\n\tvalues := url.Values{\n\t\t\"SSHKEYID\": {key.ID},\n\t}\n\tif key.Name != \"\" {\n\t\tvalues.Add(\"name\", key.Name)\n\t}\n\tif key.Key != \"\" {\n\t\tvalues.Add(\"ssh_key\", key.Key)\n\t}\n\n\tif err := c.post(`sshkey/update`, values, nil); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// DeleteSSHKey deletes an existing SSHKey from Vultr account\nfunc (c *Client) DeleteSSHKey(id string) error {\n\tvalues := url.Values{\n\t\t\"SSHKEYID\": {id},\n\t}\n\n\tif err := c.post(`sshkey/destroy`, values, nil); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/agext/levenshtein/LICENSE",
    "content": "                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "vendor/github.com/agext/levenshtein/NOTICE",
    "content": "Alrux Go EXTensions (AGExt) - package levenshtein\nCopyright 2016 ALRUX Inc.\n\nThis product includes software developed at ALRUX Inc.\n(http://www.alrux.com/).\n"
  },
  {
    "path": "vendor/github.com/agext/levenshtein/levenshtein.go",
    "content": "// Copyright 2016 ALRUX Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//    http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n/*\nPackage levenshtein implements distance and similarity metrics for strings, based on the Levenshtein measure.\n\nThe Levenshtein `Distance` between two strings is the minimum total cost of edits that would convert the first string into the second. The allowed edit operations are insertions, deletions, and substitutions, all at character (one UTF-8 code point) level. Each operation has a default cost of 1, but each can be assigned its own cost equal to or greater than 0.\n\nA `Distance` of 0 means the two strings are identical, and the higher the value the more different the strings. Since in practice we are interested in finding if the two strings are \"close enough\", it often does not make sense to continue the calculation once the result is mathematically guaranteed to exceed a desired threshold. Providing this value to the `Distance` function allows it to take a shortcut and return a lower bound instead of an exact cost when the threshold is exceeded.\n\nThe `Similarity` function calculates the distance, then converts it into a normalized metric within the range 0..1, with 1 meaning the strings are identical, and 0 that they have nothing in common. A minimum similarity threshold can be provided to speed up the calculation of the metric for strings that are far too dissimilar for the purpose at hand. All values under this threshold are rounded down to 0.\n\nThe `Match` function provides a similarity metric, with the same range and meaning as `Similarity`, but with a bonus for string pairs that share a common prefix and have a similarity above a \"bonus threshold\". It uses the same method as proposed by Winkler for the Jaro distance, and the reasoning behind it is that these string pairs are very likely spelling variations or errors, and they are more closely linked than the edit distance alone would suggest.\n\nThe underlying `Calculate` function is also exported, to allow the building of other derivative metrics, if needed.\n*/\npackage levenshtein\n\n// Calculate determines the Levenshtein distance between two strings, using\n// the given costs for each edit operation. It returns the distance along with\n// the lengths of the longest common prefix and suffix.\n//\n// If maxCost is non-zero, the calculation stops as soon as the distance is determined\n// to be greater than maxCost. Therefore, any return value higher than maxCost is a\n// lower bound for the actual distance.\nfunc Calculate(str1, str2 []rune, maxCost, insCost, subCost, delCost int) (dist, prefixLen, suffixLen int) {\n\tl1, l2 := len(str1), len(str2)\n\t// trim common prefix, if any, as it doesn't affect the distance\n\tfor ; prefixLen < l1 && prefixLen < l2; prefixLen++ {\n\t\tif str1[prefixLen] != str2[prefixLen] {\n\t\t\tbreak\n\t\t}\n\t}\n\tstr1, str2 = str1[prefixLen:], str2[prefixLen:]\n\tl1 -= prefixLen\n\tl2 -= prefixLen\n\t// trim common suffix, if any, as it doesn't affect the distance\n\tfor 0 < l1 && 0 < l2 {\n\t\tif str1[l1-1] != str2[l2-1] {\n\t\t\tstr1, str2 = str1[:l1], str2[:l2]\n\t\t\tbreak\n\t\t}\n\t\tl1--\n\t\tl2--\n\t\tsuffixLen++\n\t}\n\t// if the first string is empty, the distance is the length of the second string times the cost of insertion\n\tif l1 == 0 {\n\t\tdist = l2 * insCost\n\t\treturn\n\t}\n\t// if the second string is empty, the distance is the length of the first string times the cost of deletion\n\tif l2 == 0 {\n\t\tdist = l1 * delCost\n\t\treturn\n\t}\n\n\t// variables used in inner \"for\" loops\n\tvar y, dy, c, l int\n\n\t// if maxCost is greater than or equal to the maximum possible distance, it's equivalent to 'unlimited'\n\tif maxCost > 0 {\n\t\tif subCost < delCost+insCost {\n\t\t\tif maxCost >= l1*subCost+(l2-l1)*insCost {\n\t\t\t\tmaxCost = 0\n\t\t\t}\n\t\t} else {\n\t\t\tif maxCost >= l1*delCost+l2*insCost {\n\t\t\t\tmaxCost = 0\n\t\t\t}\n\t\t}\n\t}\n\n\tif maxCost > 0 {\n\t\t// prefer the longer string first, to minimize time;\n\t\t// a swap also transposes the meanings of insertion and deletion.\n\t\tif l1 < l2 {\n\t\t\tstr1, str2, l1, l2, insCost, delCost = str2, str1, l2, l1, delCost, insCost\n\t\t}\n\n\t\t// the length differential times cost of deletion is a lower bound for the cost;\n\t\t// if it is higher than the maxCost, there is no point going into the main calculation.\n\t\tif dist = (l1 - l2) * delCost; dist > maxCost {\n\t\t\treturn\n\t\t}\n\n\t\td := make([]int, l1+1)\n\n\t\t// offset and length of d in the current row\n\t\tdoff, dlen := 0, 1\n\t\tfor y, dy = 1, delCost; y <= l1 && dy <= maxCost; dlen++ {\n\t\t\td[y] = dy\n\t\t\ty++\n\t\t\tdy = y * delCost\n\t\t}\n\t\t// fmt.Printf(\"%q -> %q: init doff=%d dlen=%d d[%d:%d]=%v\\n\", str1, str2, doff, dlen, doff, doff+dlen, d[doff:doff+dlen])\n\n\t\tfor x := 0; x < l2; x++ {\n\t\t\tdy, d[doff] = d[doff], d[doff]+insCost\n\t\t\tfor d[doff] > maxCost && dlen > 0 {\n\t\t\t\tif str1[doff] != str2[x] {\n\t\t\t\t\tdy += subCost\n\t\t\t\t}\n\t\t\t\tdoff++\n\t\t\t\tdlen--\n\t\t\t\tif c = d[doff] + insCost; c < dy {\n\t\t\t\t\tdy = c\n\t\t\t\t}\n\t\t\t\tdy, d[doff] = d[doff], dy\n\t\t\t}\n\t\t\tfor y, l = doff, doff+dlen-1; y < l; dy, d[y] = d[y], dy {\n\t\t\t\tif str1[y] != str2[x] {\n\t\t\t\t\tdy += subCost\n\t\t\t\t}\n\t\t\t\tif c = d[y] + delCost; c < dy {\n\t\t\t\t\tdy = c\n\t\t\t\t}\n\t\t\t\ty++\n\t\t\t\tif c = d[y] + insCost; c < dy {\n\t\t\t\t\tdy = c\n\t\t\t\t}\n\t\t\t}\n\t\t\tif y < l1 {\n\t\t\t\tif str1[y] != str2[x] {\n\t\t\t\t\tdy += subCost\n\t\t\t\t}\n\t\t\t\tif c = d[y] + delCost; c < dy {\n\t\t\t\t\tdy = c\n\t\t\t\t}\n\t\t\t\tfor ; dy <= maxCost && y < l1; dy, d[y] = dy+delCost, dy {\n\t\t\t\t\ty++\n\t\t\t\t\tdlen++\n\t\t\t\t}\n\t\t\t}\n\t\t\t// fmt.Printf(\"%q -> %q: x=%d doff=%d dlen=%d d[%d:%d]=%v\\n\", str1, str2, x, doff, dlen, doff, doff+dlen, d[doff:doff+dlen])\n\t\t\tif dlen == 0 {\n\t\t\t\tdist = maxCost + 1\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t\tif doff+dlen-1 < l1 {\n\t\t\tdist = maxCost + 1\n\t\t\treturn\n\t\t}\n\t\tdist = d[l1]\n\t} else {\n\t\t// ToDo: This is O(l1*l2) time and O(min(l1,l2)) space; investigate if it is\n\t\t// worth to implement diagonal approach - O(l1*(1+dist)) time, up to O(l1*l2) space\n\t\t// http://www.csse.monash.edu.au/~lloyd/tildeStrings/Alignment/92.IPL.html\n\n\t\t// prefer the shorter string first, to minimize space; time is O(l1*l2) anyway;\n\t\t// a swap also transposes the meanings of insertion and deletion.\n\t\tif l1 > l2 {\n\t\t\tstr1, str2, l1, l2, insCost, delCost = str2, str1, l2, l1, delCost, insCost\n\t\t}\n\t\td := make([]int, l1+1)\n\n\t\tfor y = 1; y <= l1; y++ {\n\t\t\td[y] = y * delCost\n\t\t}\n\t\tfor x := 0; x < l2; x++ {\n\t\t\tdy, d[0] = d[0], d[0]+insCost\n\t\t\tfor y = 0; y < l1; dy, d[y] = d[y], dy {\n\t\t\t\tif str1[y] != str2[x] {\n\t\t\t\t\tdy += subCost\n\t\t\t\t}\n\t\t\t\tif c = d[y] + delCost; c < dy {\n\t\t\t\t\tdy = c\n\t\t\t\t}\n\t\t\t\ty++\n\t\t\t\tif c = d[y] + insCost; c < dy {\n\t\t\t\t\tdy = c\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdist = d[l1]\n\t}\n\n\treturn\n}\n\n// Distance returns the Levenshtein distance between str1 and str2, using the\n// default or provided cost values. Pass nil for the third argument to use the\n// default cost of 1 for all three operations, with no maximum.\nfunc Distance(str1, str2 string, p *Params) int {\n\tif p == nil {\n\t\tp = defaultParams\n\t}\n\tdist, _, _ := Calculate([]rune(str1), []rune(str2), p.maxCost, p.insCost, p.subCost, p.delCost)\n\treturn dist\n}\n\n// Similarity returns a score in the range of 0..1 for how similar the two strings are.\n// A score of 1 means the strings are identical, and 0 means they have nothing in common.\n//\n// A nil third argument uses the default cost of 1 for all three operations.\n//\n// If a non-zero MinScore value is provided in the parameters, scores lower than it\n// will be returned as 0.\nfunc Similarity(str1, str2 string, p *Params) float64 {\n\treturn Match(str1, str2, p.Clone().BonusThreshold(1.1)) // guaranteed no bonus\n}\n\n// Match returns a similarity score adjusted by the same method as proposed by Winkler for\n// the Jaro distance - giving a bonus to string pairs that share a common prefix, only if their\n// similarity score is already over a threshold.\n//\n// The score is in the range of 0..1, with 1 meaning the strings are identical,\n// and 0 meaning they have nothing in common.\n//\n// A nil third argument uses the default cost of 1 for all three operations, maximum length of\n// common prefix to consider for bonus of 4, scaling factor of 0.1, and bonus threshold of 0.7.\n//\n// If a non-zero MinScore value is provided in the parameters, scores lower than it\n// will be returned as 0.\nfunc Match(str1, str2 string, p *Params) float64 {\n\ts1, s2 := []rune(str1), []rune(str2)\n\tl1, l2 := len(s1), len(s2)\n\t// two empty strings are identical; shortcut also avoids divByZero issues later on.\n\tif l1 == 0 && l2 == 0 {\n\t\treturn 1\n\t}\n\n\tif p == nil {\n\t\tp = defaultParams\n\t}\n\n\t// a min over 1 can never be satisfied, so the score is 0.\n\tif p.minScore > 1 {\n\t\treturn 0\n\t}\n\n\tinsCost, delCost, maxDist, max := p.insCost, p.delCost, 0, 0\n\tif l1 > l2 {\n\t\tl1, l2, insCost, delCost = l2, l1, delCost, insCost\n\t}\n\n\tif p.subCost < delCost+insCost {\n\t\tmaxDist = l1*p.subCost + (l2-l1)*insCost\n\t} else {\n\t\tmaxDist = l1*delCost + l2*insCost\n\t}\n\n\t// a zero min is always satisfied, so no need to set a max cost.\n\tif p.minScore > 0 {\n\t\t// if p.minScore is lower than p.bonusThreshold, we can use a simplified formula\n\t\t// for the max cost, because a sim score below min cannot receive a bonus.\n\t\tif p.minScore < p.bonusThreshold {\n\t\t\t// round down the max - a cost equal to a rounded up max would already be under min.\n\t\t\tmax = int((1 - p.minScore) * float64(maxDist))\n\t\t} else {\n\t\t\t// p.minScore <= sim + p.bonusPrefix*p.bonusScale*(1-sim)\n\t\t\t// p.minScore <= (1-dist/maxDist) + p.bonusPrefix*p.bonusScale*(1-(1-dist/maxDist))\n\t\t\t// p.minScore <= 1 - dist/maxDist + p.bonusPrefix*p.bonusScale*dist/maxDist\n\t\t\t// 1 - p.minScore >= dist/maxDist - p.bonusPrefix*p.bonusScale*dist/maxDist\n\t\t\t// (1-p.minScore)*maxDist/(1-p.bonusPrefix*p.bonusScale) >= dist\n\t\t\tmax = int((1 - p.minScore) * float64(maxDist) / (1 - float64(p.bonusPrefix)*p.bonusScale))\n\t\t}\n\t}\n\n\tdist, pl, _ := Calculate(s1, s2, max, p.insCost, p.subCost, p.delCost)\n\tif max > 0 && dist > max {\n\t\treturn 0\n\t}\n\tsim := 1 - float64(dist)/float64(maxDist)\n\n\tif sim >= p.bonusThreshold && sim < 1 && p.bonusPrefix > 0 && p.bonusScale > 0 {\n\t\tif pl > p.bonusPrefix {\n\t\t\tpl = p.bonusPrefix\n\t\t}\n\t\tsim += float64(pl) * p.bonusScale * (1 - sim)\n\t}\n\n\tif sim < p.minScore {\n\t\treturn 0\n\t}\n\n\treturn sim\n}\n"
  },
  {
    "path": "vendor/github.com/agext/levenshtein/params.go",
    "content": "// Copyright 2016 ALRUX Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//    http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage levenshtein\n\n// Params represents a set of parameter values for the various formulas involved\n// in the calculation of the Levenshtein string metrics.\ntype Params struct {\n\tinsCost        int\n\tsubCost        int\n\tdelCost        int\n\tmaxCost        int\n\tminScore       float64\n\tbonusPrefix    int\n\tbonusScale     float64\n\tbonusThreshold float64\n}\n\nvar (\n\tdefaultParams = NewParams()\n)\n\n// NewParams creates a new set of parameters and initializes it with the default values.\nfunc NewParams() *Params {\n\treturn &Params{\n\t\tinsCost:        1,\n\t\tsubCost:        1,\n\t\tdelCost:        1,\n\t\tmaxCost:        0,\n\t\tminScore:       0,\n\t\tbonusPrefix:    4,\n\t\tbonusScale:     .1,\n\t\tbonusThreshold: .7,\n\t}\n}\n\n// Clone returns a pointer to a copy of the receiver parameter set, or of a new\n// default parameter set if the receiver is nil.\nfunc (p *Params) Clone() *Params {\n\tif p == nil {\n\t\treturn NewParams()\n\t}\n\treturn &Params{\n\t\tinsCost:        p.insCost,\n\t\tsubCost:        p.subCost,\n\t\tdelCost:        p.delCost,\n\t\tmaxCost:        p.maxCost,\n\t\tminScore:       p.minScore,\n\t\tbonusPrefix:    p.bonusPrefix,\n\t\tbonusScale:     p.bonusScale,\n\t\tbonusThreshold: p.bonusThreshold,\n\t}\n}\n\n// InsCost overrides the default value of 1 for the cost of insertion.\n// The new value must be zero or positive.\nfunc (p *Params) InsCost(v int) *Params {\n\tif v >= 0 {\n\t\tp.insCost = v\n\t}\n\treturn p\n}\n\n// SubCost overrides the default value of 1 for the cost of substitution.\n// The new value must be zero or positive.\nfunc (p *Params) SubCost(v int) *Params {\n\tif v >= 0 {\n\t\tp.subCost = v\n\t}\n\treturn p\n}\n\n// DelCost overrides the default value of 1 for the cost of deletion.\n// The new value must be zero or positive.\nfunc (p *Params) DelCost(v int) *Params {\n\tif v >= 0 {\n\t\tp.delCost = v\n\t}\n\treturn p\n}\n\n// MaxCost overrides the default value of 0 (meaning unlimited) for the maximum cost.\n// The calculation of Distance() stops when the result is guaranteed to exceed\n// this maximum, returning a lower-bound rather than exact value.\n// The new value must be zero or positive.\nfunc (p *Params) MaxCost(v int) *Params {\n\tif v >= 0 {\n\t\tp.maxCost = v\n\t}\n\treturn p\n}\n\n// MinScore overrides the default value of 0 for the minimum similarity score.\n// Scores below this threshold are returned as 0 by Similarity() and Match().\n// The new value must be zero or positive. Note that a minimum greater than 1\n// can never be satisfied, resulting in a score of 0 for any pair of strings.\nfunc (p *Params) MinScore(v float64) *Params {\n\tif v >= 0 {\n\t\tp.minScore = v\n\t}\n\treturn p\n}\n\n// BonusPrefix overrides the default value for the maximum length of\n// common prefix to be considered for bonus by Match().\n// The new value must be zero or positive.\nfunc (p *Params) BonusPrefix(v int) *Params {\n\tif v >= 0 {\n\t\tp.bonusPrefix = v\n\t}\n\treturn p\n}\n\n// BonusScale overrides the default value for the scaling factor used by Match()\n// in calculating the bonus.\n// The new value must be zero or positive. To guarantee that the similarity score\n// remains in the interval 0..1, this scaling factor is not allowed to exceed\n// 1 / BonusPrefix.\nfunc (p *Params) BonusScale(v float64) *Params {\n\tif v >= 0 {\n\t\tp.bonusScale = v\n\t}\n\n\t// the bonus cannot exceed (1-sim), or the score may become greater than 1.\n\tif float64(p.bonusPrefix)*p.bonusScale > 1 {\n\t\tp.bonusScale = 1 / float64(p.bonusPrefix)\n\t}\n\n\treturn p\n}\n\n// BonusThreshold overrides the default value for the minimum similarity score\n// for which Match() can assign a bonus.\n// The new value must be zero or positive. Note that a threshold greater than 1\n// effectively makes Match() become the equivalent of Similarity().\nfunc (p *Params) BonusThreshold(v float64) *Params {\n\tif v >= 0 {\n\t\tp.bonusThreshold = v\n\t}\n\treturn p\n}\n"
  },
  {
    "path": "vendor/github.com/apparentlymart/go-cidr/LICENSE",
    "content": "Copyright (c) 2015 Martin Atkins\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "vendor/github.com/apparentlymart/go-cidr/cidr/cidr.go",
    "content": "// Package cidr is a collection of assorted utilities for computing\n// network and host addresses within network ranges.\n//\n// It expects a CIDR-type address structure where addresses are divided into\n// some number of prefix bits representing the network and then the remaining\n// suffix bits represent the host.\n//\n// For example, it can help to calculate addresses for sub-networks of a\n// parent network, or to calculate host addresses within a particular prefix.\n//\n// At present this package is prioritizing simplicity of implementation and\n// de-prioritizing speed and memory usage. Thus caution is advised before\n// using this package in performance-critical applications or hot codepaths.\n// Patches to improve the speed and memory usage may be accepted as long as\n// they do not result in a significant increase in code complexity.\npackage cidr\n\nimport (\n\t\"fmt\"\n\t\"math/big\"\n\t\"net\"\n)\n\n// Subnet takes a parent CIDR range and creates a subnet within it\n// with the given number of additional prefix bits and the given\n// network number.\n//\n// For example, 10.3.0.0/16, extended by 8 bits, with a network number\n// of 5, becomes 10.3.5.0/24 .\nfunc Subnet(base *net.IPNet, newBits int, num int) (*net.IPNet, error) {\n\tip := base.IP\n\tmask := base.Mask\n\n\tparentLen, addrLen := mask.Size()\n\tnewPrefixLen := parentLen + newBits\n\n\tif newPrefixLen > addrLen {\n\t\treturn nil, fmt.Errorf(\"insufficient address space to extend prefix of %d by %d\", parentLen, newBits)\n\t}\n\n\tmaxNetNum := uint64(1<<uint64(newBits)) - 1\n\tif uint64(num) > maxNetNum {\n\t\treturn nil, fmt.Errorf(\"prefix extension of %d does not accommodate a subnet numbered %d\", newBits, num)\n\t}\n\n\treturn &net.IPNet{\n\t\tIP:   insertNumIntoIP(ip, num, newPrefixLen),\n\t\tMask: net.CIDRMask(newPrefixLen, addrLen),\n\t}, nil\n}\n\n// Host takes a parent CIDR range and turns it into a host IP address with\n// the given host number.\n//\n// For example, 10.3.0.0/16 with a host number of 2 gives 10.3.0.2.\nfunc Host(base *net.IPNet, num int) (net.IP, error) {\n\tip := base.IP\n\tmask := base.Mask\n\n\tparentLen, addrLen := mask.Size()\n\thostLen := addrLen - parentLen\n\n\tmaxHostNum := uint64(1<<uint64(hostLen)) - 1\n\n\tnumUint64 := uint64(num)\n\tif num < 0 {\n\t\tnumUint64 = uint64(-num) - 1\n\t\tnum = int(maxHostNum - numUint64)\n\t}\n\n\tif numUint64 > maxHostNum {\n\t\treturn nil, fmt.Errorf(\"prefix of %d does not accommodate a host numbered %d\", parentLen, num)\n\t}\n\tvar bitlength int\n\tif ip.To4() != nil {\n\t\tbitlength = 32\n\t} else {\n\t\tbitlength = 128\n\t}\n\treturn insertNumIntoIP(ip, num, bitlength), nil\n}\n\n// AddressRange returns the first and last addresses in the given CIDR range.\nfunc AddressRange(network *net.IPNet) (net.IP, net.IP) {\n\t// the first IP is easy\n\tfirstIP := network.IP\n\n\t// the last IP is the network address OR NOT the mask address\n\tprefixLen, bits := network.Mask.Size()\n\tif prefixLen == bits {\n\t\t// Easy!\n\t\t// But make sure that our two slices are distinct, since they\n\t\t// would be in all other cases.\n\t\tlastIP := make([]byte, len(firstIP))\n\t\tcopy(lastIP, firstIP)\n\t\treturn firstIP, lastIP\n\t}\n\n\tfirstIPInt, bits := ipToInt(firstIP)\n\thostLen := uint(bits) - uint(prefixLen)\n\tlastIPInt := big.NewInt(1)\n\tlastIPInt.Lsh(lastIPInt, hostLen)\n\tlastIPInt.Sub(lastIPInt, big.NewInt(1))\n\tlastIPInt.Or(lastIPInt, firstIPInt)\n\n\treturn firstIP, intToIP(lastIPInt, bits)\n}\n\n// AddressCount returns the number of distinct host addresses within the given\n// CIDR range.\n//\n// Since the result is a uint64, this function returns meaningful information\n// only for IPv4 ranges and IPv6 ranges with a prefix size of at least 65.\nfunc AddressCount(network *net.IPNet) uint64 {\n\tprefixLen, bits := network.Mask.Size()\n\treturn 1 << (uint64(bits) - uint64(prefixLen))\n}\n\n//VerifyNoOverlap takes a list subnets and supernet (CIDRBlock) and verifies\n//none of the subnets overlap and all subnets are in the supernet\n//it returns an error if any of those conditions are not satisfied\nfunc VerifyNoOverlap(subnets []*net.IPNet, CIDRBlock *net.IPNet) error {\n\tfirstLastIP := make([][]net.IP, len(subnets))\n\tfor i, s := range subnets {\n\t\tfirst, last := AddressRange(s)\n\t\tfirstLastIP[i] = []net.IP{first, last}\n\t}\n\tfor i, s := range subnets {\n\t\tif !CIDRBlock.Contains(firstLastIP[i][0]) || !CIDRBlock.Contains(firstLastIP[i][1]) {\n\t\t\treturn fmt.Errorf(\"%s does not fully contain %s\", CIDRBlock.String(), s.String())\n\t\t}\n\t\tfor j := 0; j < len(subnets); j++ {\n\t\t\tif i == j {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tfirst := firstLastIP[j][0]\n\t\t\tlast := firstLastIP[j][1]\n\t\t\tif s.Contains(first) || s.Contains(last) {\n\t\t\t\treturn fmt.Errorf(\"%s overlaps with %s\", subnets[j].String(), s.String())\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\n// PreviousSubnet returns the subnet of the desired mask in the IP space\n// just lower than the start of IPNet provided. If the IP space rolls over\n// then the second return value is true\nfunc PreviousSubnet(network *net.IPNet, prefixLen int) (*net.IPNet, bool) {\n\tstartIP := checkIPv4(network.IP)\n\tpreviousIP := make(net.IP, len(startIP))\n\tcopy(previousIP, startIP)\n\tcMask := net.CIDRMask(prefixLen, 8*len(previousIP))\n\tpreviousIP = Dec(previousIP)\n\tprevious := &net.IPNet{IP: previousIP.Mask(cMask), Mask: cMask}\n\tif startIP.Equal(net.IPv4zero) || startIP.Equal(net.IPv6zero) {\n\t\treturn previous, true\n\t}\n\treturn previous, false\n}\n\n// NextSubnet returns the next available subnet of the desired mask size\n// starting for the maximum IP of the offset subnet\n// If the IP exceeds the maxium IP then the second return value is true\nfunc NextSubnet(network *net.IPNet, prefixLen int) (*net.IPNet, bool) {\n\t_, currentLast := AddressRange(network)\n\tmask := net.CIDRMask(prefixLen, 8*len(currentLast))\n\tcurrentSubnet := &net.IPNet{IP: currentLast.Mask(mask), Mask: mask}\n\t_, last := AddressRange(currentSubnet)\n\tlast = Inc(last)\n\tnext := &net.IPNet{IP: last.Mask(mask), Mask: mask}\n\tif last.Equal(net.IPv4zero) || last.Equal(net.IPv6zero) {\n\t\treturn next, true\n\t}\n\treturn next, false\n}\n\n//Inc increases the IP by one this returns a new []byte for the IP\nfunc Inc(IP net.IP) net.IP {\n\tIP = checkIPv4(IP)\n\tincIP := make([]byte, len(IP))\n\tcopy(incIP, IP)\n\tfor j := len(incIP) - 1; j >= 0; j-- {\n\t\tincIP[j]++\n\t\tif incIP[j] > 0 {\n\t\t\tbreak\n\t\t}\n\t}\n\treturn incIP\n}\n\n//Dec decreases the IP by one this returns a new []byte for the IP\nfunc Dec(IP net.IP) net.IP {\n\tIP = checkIPv4(IP)\n\tdecIP := make([]byte, len(IP))\n\tcopy(decIP, IP)\n\tdecIP = checkIPv4(decIP)\n\tfor j := len(decIP) - 1; j >= 0; j-- {\n\t\tdecIP[j]--\n\t\tif decIP[j] < 255 {\n\t\t\tbreak\n\t\t}\n\t}\n\treturn decIP\n}\n\nfunc checkIPv4(ip net.IP) net.IP {\n\t// Go for some reason allocs IPv6len for IPv4 so we have to correct it\n\tif v4 := ip.To4(); v4 != nil {\n\t\treturn v4\n\t}\n\treturn ip\n}\n"
  },
  {
    "path": "vendor/github.com/apparentlymart/go-cidr/cidr/wrangling.go",
    "content": "package cidr\n\nimport (\n\t\"fmt\"\n\t\"math/big\"\n\t\"net\"\n)\n\nfunc ipToInt(ip net.IP) (*big.Int, int) {\n\tval := &big.Int{}\n\tval.SetBytes([]byte(ip))\n\tif len(ip) == net.IPv4len {\n\t\treturn val, 32\n\t} else if len(ip) == net.IPv6len {\n\t\treturn val, 128\n\t} else {\n\t\tpanic(fmt.Errorf(\"Unsupported address length %d\", len(ip)))\n\t}\n}\n\nfunc intToIP(ipInt *big.Int, bits int) net.IP {\n\tipBytes := ipInt.Bytes()\n\tret := make([]byte, bits/8)\n\t// Pack our IP bytes into the end of the return array,\n\t// since big.Int.Bytes() removes front zero padding.\n\tfor i := 1; i <= len(ipBytes); i++ {\n\t\tret[len(ret)-i] = ipBytes[len(ipBytes)-i]\n\t}\n\treturn net.IP(ret)\n}\n\nfunc insertNumIntoIP(ip net.IP, num int, prefixLen int) net.IP {\n\tipInt, totalBits := ipToInt(ip)\n\tbigNum := big.NewInt(int64(num))\n\tbigNum.Lsh(bigNum, uint(totalBits-prefixLen))\n\tipInt.Or(ipInt, bigNum)\n\treturn intToIP(ipInt, totalBits)\n}\n"
  },
  {
    "path": "vendor/github.com/apparentlymart/go-textseg/LICENSE",
    "content": "Copyright (c) 2017 Martin Atkins\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n---------\n\nUnicode table generation programs are under a separate copyright and license:\n\nCopyright (c) 2014 Couchbase, Inc.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file\nexcept in compliance with the License. You may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under the\nLicense is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\neither express or implied. See the License for the specific language governing permissions\nand limitations under the License.\n\n---------\n\nGrapheme break data is provided as part of the Unicode character database,\ncopright 2016 Unicode, Inc, which is provided with the following license:\n\nUnicode Data Files include all data files under the directories\nhttp://www.unicode.org/Public/, http://www.unicode.org/reports/,\nhttp://www.unicode.org/cldr/data/, http://source.icu-project.org/repos/icu/, and\nhttp://www.unicode.org/utility/trac/browser/.\n\nUnicode Data Files do not include PDF online code charts under the\ndirectory http://www.unicode.org/Public/.\n\nSoftware includes any source code published in the Unicode Standard\nor under the directories\nhttp://www.unicode.org/Public/, http://www.unicode.org/reports/,\nhttp://www.unicode.org/cldr/data/, http://source.icu-project.org/repos/icu/, and\nhttp://www.unicode.org/utility/trac/browser/.\n\nNOTICE TO USER: Carefully read the following legal agreement.\nBY DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S\nDATA FILES (\"DATA FILES\"), AND/OR SOFTWARE (\"SOFTWARE\"),\nYOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE\nTERMS AND CONDITIONS OF THIS AGREEMENT.\nIF YOU DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE\nTHE DATA FILES OR SOFTWARE.\n\nCOPYRIGHT AND PERMISSION NOTICE\n\nCopyright © 1991-2017 Unicode, Inc. All rights reserved.\nDistributed under the Terms of Use in http://www.unicode.org/copyright.html.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of the Unicode data files and any associated documentation\n(the \"Data Files\") or Unicode software and any associated documentation\n(the \"Software\") to deal in the Data Files or Software\nwithout restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, and/or sell copies of\nthe Data Files or Software, and to permit persons to whom the Data Files\nor Software are furnished to do so, provided that either\n(a) this copyright and permission notice appear with all copies\nof the Data Files or Software, or\n(b) this copyright and permission notice appear in associated\nDocumentation.\n\nTHE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF\nANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT OF THIRD PARTY RIGHTS.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS\nNOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL\nDAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\nDATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\nTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THE DATA FILES OR SOFTWARE.\n\nExcept as contained in this notice, the name of a copyright holder\nshall not be used in advertising or otherwise to promote the sale,\nuse or other dealings in these Data Files or Software without prior\nwritten authorization of the copyright holder.\n"
  },
  {
    "path": "vendor/github.com/apparentlymart/go-textseg/textseg/all_tokens.go",
    "content": "package textseg\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n)\n\n// AllTokens is a utility that uses a bufio.SplitFunc to produce a slice of\n// all of the recognized tokens in the given buffer.\nfunc AllTokens(buf []byte, splitFunc bufio.SplitFunc) ([][]byte, error) {\n\tscanner := bufio.NewScanner(bytes.NewReader(buf))\n\tscanner.Split(splitFunc)\n\tvar ret [][]byte\n\tfor scanner.Scan() {\n\t\tret = append(ret, scanner.Bytes())\n\t}\n\treturn ret, scanner.Err()\n}\n\n// TokenCount is a utility that uses a bufio.SplitFunc to count the number of\n// recognized tokens in the given buffer.\nfunc TokenCount(buf []byte, splitFunc bufio.SplitFunc) (int, error) {\n\tscanner := bufio.NewScanner(bytes.NewReader(buf))\n\tscanner.Split(splitFunc)\n\tvar ret int\n\tfor scanner.Scan() {\n\t\tret++\n\t}\n\treturn ret, scanner.Err()\n}\n"
  },
  {
    "path": "vendor/github.com/apparentlymart/go-textseg/textseg/generate.go",
    "content": "package textseg\n\n//go:generate go run make_tables.go -output tables.go\n//go:generate go run make_test_tables.go -output tables_test.go\n//go:generate ruby unicode2ragel.rb --url=http://www.unicode.org/Public/9.0.0/ucd/auxiliary/GraphemeBreakProperty.txt -m GraphemeCluster -p \"Prepend,CR,LF,Control,Extend,Regional_Indicator,SpacingMark,L,V,T,LV,LVT,E_Base,E_Modifier,ZWJ,Glue_After_Zwj,E_Base_GAZ\" -o grapheme_clusters_table.rl\n//go:generate ragel -Z grapheme_clusters.rl\n//go:generate gofmt -w grapheme_clusters.go\n"
  },
  {
    "path": "vendor/github.com/apparentlymart/go-textseg/textseg/grapheme_clusters.go",
    "content": "\n// line 1 \"grapheme_clusters.rl\"\npackage textseg\n\nimport (\n    \"errors\"\n    \"unicode/utf8\"\n)\n\n// Generated from grapheme_clusters.rl. DO NOT EDIT\n\n// line 13 \"grapheme_clusters.go\"\nvar _graphclust_actions []byte = []byte{\n\t0, 1, 0, 1, 4, 1, 9, 1, 10, \n\t1, 11, 1, 12, 1, 13, 1, 14, \n\t1, 15, 1, 16, 1, 17, 1, 18, \n\t1, 19, 1, 20, 1, 21, 2, 1, \n\t7, 2, 1, 8, 2, 2, 3, 2, \n\t5, 1, 3, 0, 1, 8, 3, 5, \n\t0, 1, 3, 5, 1, 6, \n}\n\nvar _graphclust_key_offsets []int16 = []int16{\n\t0, 0, 1, 3, 5, 7, 10, 15, \n\t17, 20, 28, 31, 33, 35, 37, 67, \n\t75, 77, 81, 84, 89, 94, 104, 116, \n\t122, 127, 137, 140, 147, 151, 159, 169, \n\t173, 181, 183, 191, 194, 196, 201, 203, \n\t210, 212, 220, 221, 242, 246, 252, 257, \n\t259, 263, 267, 269, 273, 275, 278, 282, \n\t284, 291, 293, 297, 301, 305, 307, 309, \n\t318, 322, 327, 329, 335, 337, 338, 340, \n\t341, 343, 345, 347, 349, 364, 368, 370, \n\t372, 377, 381, 385, 387, 389, 393, 397, \n\t399, 403, 410, 415, 419, 422, 423, 427, \n\t434, 439, 440, 441, 443, 452, 454, 477, \n\t481, 483, 487, 491, 492, 496, 500, 503, \n\t505, 510, 523, 525, 527, 529, 531, 535, \n\t539, 541, 543, 545, 549, 553, 557, 559, \n\t561, 563, 565, 566, 568, 574, 580, 586, \n\t588, 592, 596, 601, 604, 614, 616, 618, \n\t621, 623, 625, 627, 629, 632, 637, 639, \n\t642, 650, 653, 655, 657, 659, 690, 698, \n\t700, 704, 711, 723, 730, 744, 750, 768, \n\t779, 785, 797, 800, 809, 814, 824, 830, \n\t844, 850, 862, 874, 878, 880, 886, 888, \n\t895, 898, 906, 907, 928, 937, 945, 951, \n\t953, 957, 961, 966, 972, 974, 977, 990, \n\t995, 1009, 1011, 1020, 1027, 1038, 1048, 1056, \n\t1067, 1071, 1076, 1078, 1080, 1082, 1083, 1085, \n\t1087, 1089, 1091, 1106, 1110, 1112, 1114, 1122, \n\t1130, 1132, 1136, 1147, 1150, 1160, 1164, 1171, \n\t1179, 1185, 1188, 1189, 1193, 1200, 1205, 1206, \n\t1207, 1209, 1218, 1220, 1243, 1248, 1250, 1259, \n\t1264, 1265, 1274, 1280, 1290, 1295, 1302, 1316, \n\t1320, 1325, 1336, 1339, 1349, 1353, 1362, 1364, \n\t1372, 1379, 1385, 1392, 1396, 1398, 1400, 1402, \n\t1403, 1405, 1411, 1419, 1425, 1427, 1431, 1435, \n\t1440, 1443, 1453, 1455, 1457, 1458, 1460, 1461, \n\t1467, 1469, 1471, 1471, 1472, 1473, 1474, 1480, \n\t1482, 1484, 1484, 1490, 1492, 1497, 1502, 1504, \n\t1506, 1508, 1511, 1516, 1518, 1521, 1529, 1532, \n\t1534, 1536, 1538, 1568, 1576, 1578, 1582, 1585, \n\t1590, 1595, 1605, 1617, 1623, 1628, 1638, 1641, \n\t1648, 1652, 1660, 1670, 1674, 1682, 1684, 1692, \n\t1695, 1697, 1702, 1704, 1711, 1713, 1721, 1722, \n\t1743, 1747, 1753, 1758, 1760, 1764, 1768, 1770, \n\t1774, 1776, 1779, 1783, 1785, 1792, 1794, 1798, \n\t1802, 1806, 1808, 1810, 1819, 1823, 1828, 1830, \n\t1836, 1838, 1839, 1841, 1842, 1844, 1846, 1848, \n\t1850, 1865, 1869, 1871, 1873, 1878, 1882, 1886, \n\t1888, 1890, 1894, 1898, 1900, 1904, 1911, 1916, \n\t1920, 1923, 1924, 1928, 1935, 1940, 1941, 1942, \n\t1944, 1953, 1955, 1978, 1982, 1984, 1988, 1992, \n\t1993, 1997, 2001, 2004, 2006, 2011, 2024, 2026, \n\t2028, 2030, 2032, 2036, 2040, 2042, 2044, 2046, \n\t2050, 2054, 2058, 2060, 2062, 2064, 2066, 2067, \n\t2069, 2075, 2081, 2087, 2089, 2093, 2097, 2102, \n\t2105, 2115, 2117, 2119, 2122, 2124, 2126, 2128, \n\t2130, 2133, 2138, 2140, 2143, 2151, 2154, 2156, \n\t2158, 2160, 2191, 2199, 2201, 2205, 2212, 2224, \n\t2231, 2245, 2251, 2269, 2280, 2286, 2298, 2301, \n\t2310, 2315, 2325, 2331, 2345, 2351, 2363, 2375, \n\t2379, 2381, 2387, 2389, 2396, 2399, 2407, 2408, \n\t2429, 2438, 2446, 2452, 2454, 2458, 2462, 2467, \n\t2473, 2475, 2478, 2491, 2496, 2510, 2512, 2521, \n\t2528, 2539, 2549, 2557, 2568, 2572, 2577, 2579, \n\t2581, 2583, 2584, 2586, 2588, 2590, 2592, 2607, \n\t2611, 2613, 2615, 2623, 2631, 2633, 2637, 2648, \n\t2651, 2661, 2665, 2672, 2680, 2686, 2689, 2690, \n\t2694, 2701, 2706, 2707, 2708, 2710, 2719, 2721, \n\t2744, 2749, 2751, 2760, 2765, 2766, 2775, 2781, \n\t2791, 2796, 2803, 2817, 2821, 2826, 2837, 2840, \n\t2850, 2854, 2863, 2865, 2873, 2880, 2886, 2893, \n\t2897, 2899, 2901, 2903, 2904, 2906, 2912, 2920, \n\t2926, 2928, 2932, 2936, 2941, 2944, 2954, 2956, \n\t2958, 2959, 2961, 2962, 2968, 2970, 2972, 2972, \n\t2973, 2974, 2975, 2981, 2983, 2985, 2985, 2991, \n\t2993, 2997, 3003, 3006, 3009, 3013, 3016, 3019, \n\t3026, 3028, 3052, 3054, 3078, 3080, 3082, 3105, \n\t3107, 3109, 3110, 3112, 3114, 3116, 3122, 3124, \n\t3156, 3160, 3165, 3188, 3190, 3192, 3194, 3196, \n\t3199, 3201, 3203, 3207, 3207, 3263, 3319, 3350, \n\t3355, 3359, 3366, 3374, 3378, 3381, 3384, 3390, \n\t3392, 3412, 3418, 3423, 3425, 3427, 3430, 3432, \n\t3434, 3438, 3494, 3550, 3581, 3586, 3594, 3598, \n\t3600, 3605, 3611, 3615, 3618, 3624, 3627, 3631, \n\t3634, 3638, 3651, 3655, 3662, 3663, 3665, 3668, \n\t3678, 3698, 3705, 3709, 3716, 3726, 3733, 3736, \n\t3751, 3753, 3756, 3761, 3763, 3766, 3769, 3773, \n\t3776, 3779, 3786, 3788, 3790, 3792, 3794, 3797, \n\t3802, 3804, 3807, 3815, 3818, 3820, 3822, 3824, \n\t3854, 3862, 3864, 3868, 3871, 3876, 3881, 3891, \n\t3903, 3909, 3914, 3924, 3927, 3934, 3938, 3946, \n\t3956, 3960, 3968, 3970, 3978, 3981, 3983, 3988, \n\t3990, 3997, 3999, 4007, 4008, 4029, 4033, 4039, \n\t4044, 4046, 4050, 4054, 4056, 4060, 4062, 4065, \n\t4069, 4071, 4078, 4080, 4084, 4088, 4092, 4094, \n\t4096, 4105, 4109, 4114, 4116, 4122, 4124, 4125, \n\t4127, 4128, 4130, 4132, 4134, 4136, 4151, 4155, \n\t4157, 4159, 4164, 4168, 4172, 4174, 4176, 4180, \n\t4184, 4186, 4190, 4197, 4202, 4206, 4209, 4210, \n\t4214, 4221, 4226, 4227, 4228, 4230, 4239, 4241, \n\t4264, 4268, 4270, 4274, 4278, 4279, 4283, 4287, \n\t4290, 4292, 4297, 4310, 4312, 4314, 4316, 4318, \n\t4322, 4326, 4328, 4330, 4332, 4336, 4340, 4344, \n\t4346, 4348, 4350, 4352, 4353, 4355, 4361, 4367, \n\t4373, 4375, 4379, 4383, 4388, 4391, 4401, 4403, \n\t4405, 4408, 4410, 4412, 4414, 4416, 4419, 4424, \n\t4426, 4429, 4437, 4440, 4442, 4444, 4446, 4477, \n\t4485, 4487, 4491, 4498, 4510, 4517, 4531, 4537, \n\t4555, 4566, 4572, 4584, 4587, 4596, 4601, 4611, \n\t4617, 4631, 4637, 4649, 4661, 4665, 4667, 4673, \n\t4675, 4682, 4685, 4693, 4694, 4715, 4724, 4732, \n\t4738, 4740, 4744, 4748, 4753, 4759, 4761, 4764, \n\t4777, 4782, 4796, 4798, 4807, 4814, 4825, 4835, \n\t4843, 4854, 4858, 4863, 4865, 4867, 4869, 4870, \n\t4872, 4874, 4876, 4878, 4893, 4897, 4899, 4901, \n\t4909, 4917, 4919, 4923, 4934, 4937, 4947, 4951, \n\t4958, 4966, 4972, 4975, 4976, 4980, 4987, 4992, \n\t4993, 4994, 4996, 5005, 5007, 5030, 5035, 5037, \n\t5046, 5051, 5052, 5061, 5067, 5077, 5082, 5089, \n\t5103, 5107, 5112, 5123, 5126, 5136, 5140, 5149, \n\t5151, 5159, 5166, 5172, 5179, 5183, 5185, 5187, \n\t5189, 5190, 5192, 5198, 5206, 5212, 5214, 5218, \n\t5222, 5227, 5230, 5240, 5242, 5244, 5245, 5247, \n\t5248, 5254, 5256, 5258, 5258, 5259, 5260, 5261, \n\t5267, 5269, 5271, 5271, 5277, 5301, 5303, 5327, \n\t5329, 5331, 5354, 5356, 5358, 5359, 5361, 5363, \n\t5365, 5371, 5373, 5405, 5409, 5414, 5437, 5439, \n\t5441, 5443, 5445, 5448, 5450, 5452, 5456, 5456, \n\t5512, 5568, 5599, 5604, 5607, 5614, 5626, 5628, \n\t5630, 5632, 5635, 5640, 5642, 5645, 5653, 5656, \n\t5658, 5660, 5662, 5692, 5700, 5702, 5706, 5709, \n\t5714, 5719, 5729, 5741, 5747, 5752, 5762, 5765, \n\t5772, 5776, 5784, 5794, 5798, 5806, 5808, 5816, \n\t5819, 5821, 5826, 5828, 5835, 5837, 5845, 5846, \n\t5867, 5871, 5877, 5882, 5884, 5888, 5892, 5894, \n\t5898, 5900, 5903, 5907, 5909, 5916, 5918, 5922, \n\t5926, 5930, 5932, 5934, 5943, 5947, 5952, 5954, \n\t5956, 5958, 5959, 5961, 5963, 5965, 5967, 5982, \n\t5986, 5988, 5990, 5995, 5999, 6003, 6005, 6007, \n\t6011, 6015, 6017, 6021, 6028, 6033, 6037, 6040, \n\t6041, 6045, 6051, 6056, 6057, 6058, 6060, 6069, \n\t6071, 6094, 6098, 6100, 6104, 6108, 6109, 6113, \n\t6117, 6120, 6122, 6127, 6140, 6142, 6144, 6146, \n\t6148, 6152, 6156, 6158, 6160, 6162, 6166, 6170, \n\t6174, 6176, 6178, 6180, 6182, 6183, 6185, 6191, \n\t6197, 6203, 6205, 6209, 6213, 6218, 6221, 6231, \n\t6233, 6235, 6236, 6242, 6244, 6246, 6246, 6252, \n\t6253, 6260, 6263, 6265, 6267, 6269, 6271, 6274, \n\t6279, 6281, 6284, 6292, 6295, 6297, 6299, 6301, \n\t6332, 6340, 6342, 6346, 6353, 6365, 6372, 6386, \n\t6392, 6410, 6421, 6427, 6439, 6442, 6451, 6456, \n\t6466, 6472, 6486, 6492, 6504, 6516, 6520, 6522, \n\t6528, 6530, 6537, 6540, 6548, 6549, 6570, 6579, \n\t6587, 6593, 6595, 6599, 6603, 6608, 6614, 6616, \n\t6619, 6632, 6637, 6651, 6653, 6662, 6669, 6680, \n\t6690, 6698, 6709, 6713, 6718, 6720, 6722, 6724, \n\t6725, 6727, 6729, 6731, 6733, 6748, 6752, 6754, \n\t6756, 6764, 6772, 6774, 6778, 6789, 6792, 6802, \n\t6806, 6813, 6821, 6827, 6830, 6831, 6835, 6842, \n\t6847, 6848, 6849, 6851, 6860, 6862, 6885, 6890, \n\t6892, 6901, 6906, 6907, 6916, 6922, 6932, 6937, \n\t6944, 6958, 6962, 6967, 6978, 6981, 6991, 6995, \n\t7004, 7006, 7014, 7021, 7027, 7034, 7038, 7040, \n\t7042, 7044, 7045, 7047, 7053, 7061, 7067, 7069, \n\t7073, 7077, 7082, 7085, 7095, 7097, 7099, 7100, \n\t7102, 7103, 7109, 7111, 7113, 7113, 7114, 7115, \n\t7121, 7124, 7126, 7128, 7130, 7133, 7138, 7140, \n\t7143, 7151, 7154, 7156, 7158, 7160, 7191, 7199, \n\t7201, 7205, 7212, 7214, 7216, 7218, 7221, 7226, \n\t7228, 7231, 7239, 7242, 7244, 7246, 7248, 7278, \n\t7286, 7288, 7292, 7295, 7300, 7305, 7315, 7327, \n\t7333, 7338, 7348, 7351, 7358, 7362, 7370, 7380, \n\t7384, 7392, 7394, 7402, 7405, 7407, 7412, 7414, \n\t7421, 7423, 7431, 7432, 7453, 7457, 7463, 7468, \n\t7470, 7474, 7478, 7480, 7484, 7486, 7489, 7493, \n\t7495, 7502, 7504, 7508, 7512, 7516, 7518, 7520, \n\t7529, 7533, 7538, 7540, 7546, 7548, 7549, 7551, \n\t7552, 7554, 7556, 7558, 7560, 7575, 7579, 7581, \n\t7583, 7588, 7592, 7596, 7598, 7600, 7604, 7608, \n\t7610, 7614, 7621, 7626, 7630, 7633, 7634, 7638, \n\t7645, 7650, 7651, 7652, 7654, 7663, 7665, 7688, \n\t7692, 7694, 7698, 7702, 7703, 7707, 7711, 7714, \n\t7716, 7721, 7734, 7736, 7738, 7740, 7742, 7746, \n\t7750, 7752, 7754, 7756, 7760, 7764, 7768, 7770, \n\t7772, 7774, 7776, 7777, 7779, 7785, 7791, 7797, \n\t7799, 7803, 7807, 7812, 7815, 7825, 7827, 7829, \n\t7832, 7834, 7835, 7836, 7837, 7843, 7845, 7847, \n\t7847, 7853, 7865, 7872, 7886, 7892, 7910, 7921, \n\t7927, 7939, 7942, 7951, 7956, 7966, 7972, 7986, \n\t7992, 8004, 8016, 8020, 8022, 8028, 8030, 8037, \n\t8040, 8048, 8049, 8070, 8079, 8087, 8093, 8095, \n\t8099, 8103, 8108, 8114, 8116, 8119, 8132, 8137, \n\t8151, 8153, 8162, 8169, 8180, 8190, 8198, 8209, \n\t8213, 8218, 8220, 8222, 8224, 8225, 8227, 8229, \n\t8231, 8233, 8248, 8252, 8254, 8256, 8264, 8272, \n\t8274, 8278, 8289, 8292, 8302, 8306, 8313, 8321, \n\t8327, 8330, 8331, 8335, 8342, 8347, 8348, 8349, \n\t8351, 8360, 8362, 8385, 8390, 8392, 8401, 8406, \n\t8407, 8416, 8422, 8432, 8437, 8444, 8458, 8462, \n\t8467, 8478, 8481, 8491, 8495, 8504, 8506, 8514, \n\t8521, 8527, 8534, 8538, 8540, 8542, 8544, 8545, \n\t8547, 8553, 8561, 8567, 8569, 8573, 8577, 8582, \n\t8585, 8595, 8597, 8599, 8600, 8602, 8603, 8609, \n\t8611, 8613, 8613, 8616, 8622, 8624, 8644, 8650, \n\t8655, 8657, 8659, 8662, 8664, 8666, 8670, 8726, \n\t8782, 8817, 8822, 8830, 8832, 8832, 8834, 8838, \n\t8841, 8848, 8854, 8858, 8861, 8867, 8870, 8876, \n\t8879, 8885, 8898, 8902, 8904, 8906, 8908, 8911, \n\t8916, 8918, 8921, 8929, 8932, 8934, 8936, 8938, \n\t8968, 8976, 8978, 8982, 8985, 8990, 8995, 9005, \n\t9017, 9023, 9028, 9038, 9041, 9048, 9052, 9060, \n\t9070, 9074, 9082, 9084, 9092, 9095, 9097, 9102, \n\t9104, 9111, 9113, 9121, 9122, 9143, 9147, 9153, \n\t9158, 9160, 9164, 9168, 9170, 9174, 9176, 9179, \n\t9183, 9185, 9192, 9194, 9198, 9202, 9206, 9208, \n\t9210, 9219, 9223, 9228, 9230, 9236, 9238, 9239, \n\t9241, 9242, 9244, 9246, 9248, 9250, 9265, 9269, \n\t9271, 9273, 9278, 9282, 9286, 9288, 9290, 9294, \n\t9298, 9300, 9304, 9311, 9316, 9320, 9323, 9324, \n\t9328, 9335, 9340, 9341, 9342, 9344, 9353, 9355, \n\t9378, 9382, 9384, 9388, 9392, 9393, 9397, 9401, \n\t9404, 9406, 9411, 9424, 9426, 9428, 9430, 9432, \n\t9436, 9440, 9442, 9444, 9446, 9450, 9454, 9458, \n\t9460, 9462, 9464, 9466, 9467, 9469, 9475, 9481, \n\t9487, 9489, 9493, 9497, 9502, 9505, 9515, 9517, \n\t9519, 9522, 9524, 9526, 9528, 9530, 9533, 9538, \n\t9540, 9543, 9551, 9554, 9556, 9558, 9560, 9591, \n\t9599, 9601, 9605, 9612, 9624, 9631, 9645, 9651, \n\t9669, 9680, 9686, 9698, 9701, 9710, 9715, 9725, \n\t9731, 9745, 9751, 9763, 9775, 9779, 9781, 9787, \n\t9789, 9796, 9799, 9807, 9808, 9829, 9838, 9846, \n\t9852, 9854, 9858, 9862, 9867, 9873, 9875, 9878, \n\t9891, 9896, 9910, 9912, 9921, 9928, 9939, 9949, \n\t9957, 9968, 9972, 9977, 9979, 9981, 9983, 9984, \n\t9986, 9988, 9990, 9992, 10007, 10011, 10013, 10015, \n\t10023, 10031, 10033, 10037, 10048, 10051, 10061, 10065, \n\t10072, 10080, 10086, 10089, 10090, 10094, 10101, 10106, \n\t10107, 10108, 10110, 10119, 10121, 10144, 10149, 10151, \n\t10160, 10165, 10166, 10175, 10181, 10191, 10196, 10203, \n\t10217, 10221, 10226, 10237, 10240, 10250, 10254, 10263, \n\t10265, 10273, 10280, 10286, 10293, 10297, 10299, 10301, \n\t10303, 10304, 10306, 10312, 10320, 10326, 10328, 10332, \n\t10336, 10341, 10344, 10354, 10356, 10358, 10359, 10361, \n\t10362, 10368, 10370, 10372, 10372, 10373, 10374, 10375, \n\t10381, 10383, 10385, 10385, 10391, 10398, 10399, 10401, \n\t10404, 10414, 10434, 10441, 10445, 10452, 10462, 10469, \n\t10472, 10487, 10489, 10492, 10501, 10505, 10509, 10538, \n\t10558, 10578, 10598, 10620, 10640, 10660, 10680, 10703, \n\t10724, 10745, 10766, 10786, 10809, 10829, 10849, 10869, \n\t10890, 10911, 10932, 10952, 10972, 10992, 11012, 11032, \n\t11052, 11072, 11092, 11112, \n}\n\nvar _graphclust_trans_keys []byte = []byte{\n\t10, 128, 255, 176, 255, 131, 137, 191, \n\t145, 189, 135, 129, 130, 132, 133, 144, \n\t154, 176, 139, 159, 150, 156, 159, 164, \n\t167, 168, 170, 173, 145, 176, 255, 139, \n\t255, 166, 176, 171, 179, 160, 161, 163, \n\t164, 165, 167, 169, 171, 173, 174, 175, \n\t176, 177, 179, 180, 181, 182, 183, 184, \n\t185, 186, 187, 188, 189, 190, 191, 166, \n\t170, 172, 178, 150, 153, 155, 163, 165, \n\t167, 169, 173, 153, 155, 148, 161, 163, \n\t255, 189, 132, 185, 144, 152, 161, 164, \n\t255, 188, 129, 131, 190, 255, 133, 134, \n\t137, 138, 142, 150, 152, 161, 164, 255, \n\t131, 134, 137, 138, 142, 144, 146, 175, \n\t178, 180, 182, 255, 134, 138, 142, 161, \n\t164, 255, 188, 129, 131, 190, 191, 128, \n\t132, 135, 136, 139, 141, 150, 151, 162, \n\t163, 130, 190, 191, 151, 128, 130, 134, \n\t136, 138, 141, 128, 131, 190, 255, 133, \n\t137, 142, 148, 151, 161, 164, 255, 128, \n\t132, 134, 136, 138, 141, 149, 150, 162, \n\t163, 129, 131, 190, 255, 133, 137, 142, \n\t150, 152, 161, 164, 255, 130, 131, 138, \n\t150, 143, 148, 152, 159, 178, 179, 177, \n\t179, 186, 135, 142, 177, 179, 185, 187, \n\t188, 136, 141, 181, 183, 185, 152, 153, \n\t190, 191, 177, 191, 128, 132, 134, 135, \n\t141, 151, 153, 188, 134, 128, 129, 130, \n\t141, 156, 157, 158, 159, 160, 162, 164, \n\t168, 169, 170, 172, 173, 174, 175, 176, \n\t179, 183, 173, 183, 185, 190, 150, 153, \n\t158, 160, 177, 180, 130, 141, 157, 132, \n\t134, 157, 159, 146, 148, 178, 180, 146, \n\t147, 178, 179, 180, 255, 148, 156, 158, \n\t255, 139, 141, 169, 133, 134, 160, 171, \n\t176, 187, 151, 155, 160, 162, 191, 149, \n\t158, 165, 188, 176, 190, 128, 132, 180, \n\t255, 133, 170, 180, 255, 128, 130, 161, \n\t173, 166, 179, 164, 183, 173, 144, 146, \n\t148, 168, 178, 180, 184, 185, 128, 181, \n\t187, 191, 128, 131, 179, 181, 183, 140, \n\t141, 128, 131, 157, 179, 181, 183, 144, \n\t176, 164, 175, 177, 191, 160, 191, 128, \n\t130, 170, 175, 153, 154, 153, 154, 155, \n\t160, 162, 163, 164, 165, 166, 167, 168, \n\t169, 170, 171, 175, 175, 178, 180, 189, \n\t158, 159, 176, 177, 130, 134, 139, 163, \n\t167, 128, 129, 180, 255, 134, 159, 178, \n\t255, 166, 173, 135, 147, 128, 131, 179, \n\t255, 129, 164, 166, 255, 169, 182, 131, \n\t188, 140, 141, 176, 178, 180, 183, 184, \n\t190, 191, 129, 171, 175, 181, 182, 163, \n\t170, 172, 173, 172, 184, 190, 158, 128, \n\t143, 160, 175, 144, 145, 150, 155, 157, \n\t158, 159, 135, 139, 141, 168, 171, 189, \n\t160, 182, 186, 191, 129, 131, 133, 134, \n\t140, 143, 184, 186, 165, 166, 128, 129, \n\t130, 132, 133, 134, 135, 136, 139, 140, \n\t141, 144, 145, 146, 147, 150, 151, 152, \n\t153, 154, 156, 176, 178, 128, 130, 184, \n\t255, 135, 190, 131, 175, 187, 255, 128, \n\t130, 167, 180, 179, 128, 130, 179, 255, \n\t129, 137, 141, 255, 190, 172, 183, 159, \n\t170, 188, 128, 131, 190, 191, 151, 128, \n\t132, 135, 136, 139, 141, 162, 163, 166, \n\t172, 176, 180, 181, 191, 128, 134, 176, \n\t255, 132, 255, 175, 181, 184, 255, 129, \n\t155, 158, 255, 129, 255, 171, 183, 157, \n\t171, 175, 182, 184, 191, 146, 167, 169, \n\t182, 171, 172, 189, 190, 176, 180, 176, \n\t182, 145, 190, 143, 146, 178, 157, 158, \n\t133, 134, 137, 168, 169, 170, 165, 169, \n\t173, 178, 187, 255, 131, 132, 140, 169, \n\t174, 255, 130, 132, 128, 182, 187, 255, \n\t173, 180, 182, 255, 132, 155, 159, 161, \n\t175, 128, 163, 165, 128, 134, 136, 152, \n\t155, 161, 163, 164, 166, 170, 144, 150, \n\t132, 138, 145, 146, 151, 166, 169, 0, \n\t127, 176, 255, 131, 137, 191, 145, 189, \n\t135, 129, 130, 132, 133, 144, 154, 176, \n\t139, 159, 150, 156, 159, 164, 167, 168, \n\t170, 173, 145, 176, 255, 139, 255, 166, \n\t176, 171, 179, 160, 161, 163, 164, 165, \n\t166, 167, 169, 171, 172, 173, 174, 175, \n\t176, 177, 178, 179, 180, 181, 182, 183, \n\t184, 185, 186, 187, 188, 189, 190, 191, \n\t168, 170, 150, 153, 155, 163, 165, 167, \n\t169, 173, 153, 155, 148, 161, 163, 255, \n\t131, 187, 189, 132, 185, 190, 255, 141, \n\t144, 129, 136, 145, 151, 152, 161, 162, \n\t163, 164, 255, 129, 188, 190, 130, 131, \n\t191, 255, 141, 151, 129, 132, 133, 134, \n\t137, 138, 142, 161, 162, 163, 164, 255, \n\t131, 188, 129, 130, 190, 255, 145, 181, \n\t129, 130, 131, 134, 135, 136, 137, 138, \n\t139, 141, 142, 175, 176, 177, 178, 255, \n\t134, 138, 141, 129, 136, 142, 161, 162, \n\t163, 164, 255, 129, 188, 130, 131, 190, \n\t191, 128, 141, 129, 132, 135, 136, 139, \n\t140, 150, 151, 162, 163, 130, 190, 191, \n\t128, 141, 151, 129, 130, 134, 136, 138, \n\t140, 128, 129, 131, 190, 255, 133, 137, \n\t129, 132, 142, 148, 151, 161, 164, 255, \n\t129, 188, 190, 191, 130, 131, 130, 134, \n\t128, 132, 135, 136, 138, 139, 140, 141, \n\t149, 150, 162, 163, 129, 190, 130, 131, \n\t191, 255, 133, 137, 141, 151, 129, 132, \n\t142, 161, 162, 163, 164, 255, 138, 143, \n\t150, 159, 144, 145, 146, 148, 152, 158, \n\t178, 179, 177, 179, 180, 186, 135, 142, \n\t177, 179, 180, 185, 187, 188, 136, 141, \n\t181, 183, 185, 152, 153, 190, 191, 191, \n\t177, 190, 128, 132, 134, 135, 141, 151, \n\t153, 188, 134, 128, 129, 130, 141, 156, \n\t157, 158, 159, 160, 162, 164, 168, 169, \n\t170, 172, 173, 174, 175, 176, 179, 183, \n\t177, 173, 183, 185, 186, 187, 188, 189, \n\t190, 150, 151, 152, 153, 158, 160, 177, \n\t180, 130, 132, 141, 157, 133, 134, 157, \n\t159, 146, 148, 178, 180, 146, 147, 178, \n\t179, 182, 180, 189, 190, 255, 134, 157, \n\t137, 147, 148, 255, 139, 141, 169, 133, \n\t134, 178, 160, 162, 163, 166, 167, 168, \n\t169, 171, 176, 184, 185, 187, 155, 151, \n\t152, 153, 154, 150, 160, 162, 191, 149, \n\t151, 152, 158, 165, 172, 173, 178, 179, \n\t188, 176, 190, 132, 181, 187, 128, 131, \n\t180, 188, 189, 255, 130, 133, 170, 171, \n\t179, 180, 255, 130, 161, 170, 128, 129, \n\t162, 165, 166, 167, 168, 173, 167, 173, \n\t166, 169, 170, 174, 175, 177, 178, 179, \n\t164, 171, 172, 179, 180, 181, 182, 183, \n\t161, 173, 180, 144, 146, 148, 168, 178, \n\t179, 184, 185, 128, 181, 187, 191, 128, \n\t131, 179, 181, 183, 140, 141, 144, 176, \n\t175, 177, 191, 160, 191, 128, 130, 170, \n\t175, 153, 154, 153, 154, 155, 160, 162, \n\t163, 164, 165, 166, 167, 168, 169, 170, \n\t171, 175, 175, 178, 180, 189, 158, 159, \n\t176, 177, 130, 134, 139, 167, 163, 164, \n\t165, 166, 132, 133, 134, 159, 160, 177, \n\t178, 255, 166, 173, 135, 145, 146, 147, \n\t131, 179, 188, 128, 130, 180, 181, 182, \n\t185, 186, 255, 165, 129, 255, 169, 174, \n\t175, 176, 177, 178, 179, 180, 181, 182, \n\t131, 140, 141, 188, 176, 178, 180, 183, \n\t184, 190, 191, 129, 171, 181, 182, 172, \n\t173, 174, 175, 165, 168, 172, 173, 163, \n\t170, 172, 184, 190, 158, 128, 143, 160, \n\t175, 144, 145, 150, 155, 157, 158, 159, \n\t135, 139, 141, 168, 171, 189, 160, 182, \n\t186, 191, 129, 131, 133, 134, 140, 143, \n\t184, 186, 165, 166, 128, 129, 130, 132, \n\t133, 134, 135, 136, 139, 140, 141, 144, \n\t145, 146, 147, 150, 151, 152, 153, 154, \n\t156, 176, 178, 129, 128, 130, 184, 255, \n\t135, 190, 130, 131, 175, 176, 178, 183, \n\t184, 187, 255, 172, 128, 130, 167, 180, \n\t179, 130, 128, 129, 179, 181, 182, 190, \n\t191, 255, 129, 137, 138, 140, 141, 255, \n\t180, 190, 172, 174, 175, 177, 178, 181, \n\t182, 183, 159, 160, 162, 163, 170, 188, \n\t190, 191, 128, 129, 130, 131, 128, 151, \n\t129, 132, 135, 136, 139, 141, 162, 163, \n\t166, 172, 176, 180, 181, 183, 184, 191, \n\t133, 128, 129, 130, 134, 176, 185, 189, \n\t177, 178, 179, 186, 187, 190, 191, 255, \n\t129, 132, 255, 175, 190, 176, 177, 178, \n\t181, 184, 187, 188, 255, 129, 155, 158, \n\t255, 189, 176, 178, 179, 186, 187, 190, \n\t191, 255, 129, 255, 172, 182, 171, 173, \n\t174, 175, 176, 183, 166, 157, 159, 160, \n\t161, 162, 171, 175, 190, 176, 182, 184, \n\t191, 169, 177, 180, 146, 167, 170, 182, \n\t171, 172, 189, 190, 176, 180, 176, 182, \n\t143, 146, 178, 157, 158, 133, 134, 137, \n\t168, 169, 170, 166, 173, 165, 169, 174, \n\t178, 187, 255, 131, 132, 140, 169, 174, \n\t255, 130, 132, 128, 182, 187, 255, 173, \n\t180, 182, 255, 132, 155, 159, 161, 175, \n\t128, 163, 165, 128, 134, 136, 152, 155, \n\t161, 163, 164, 166, 170, 144, 150, 132, \n\t138, 143, 187, 191, 160, 128, 129, 132, \n\t135, 133, 134, 160, 255, 192, 255, 139, \n\t168, 160, 128, 129, 132, 135, 133, 134, \n\t160, 255, 192, 255, 144, 145, 150, 155, \n\t157, 158, 128, 191, 173, 128, 159, 160, \n\t191, 156, 128, 133, 134, 191, 0, 127, \n\t176, 255, 131, 137, 191, 145, 189, 135, \n\t129, 130, 132, 133, 144, 154, 176, 139, \n\t159, 150, 156, 159, 164, 167, 168, 170, \n\t173, 145, 176, 255, 139, 255, 166, 176, \n\t171, 179, 160, 161, 163, 164, 165, 167, \n\t169, 171, 173, 174, 175, 176, 177, 179, \n\t180, 181, 182, 183, 184, 185, 186, 187, \n\t188, 189, 190, 191, 166, 170, 172, 178, \n\t150, 153, 155, 163, 165, 167, 169, 173, \n\t153, 155, 148, 161, 163, 255, 189, 132, \n\t185, 144, 152, 161, 164, 255, 188, 129, \n\t131, 190, 255, 133, 134, 137, 138, 142, \n\t150, 152, 161, 164, 255, 131, 134, 137, \n\t138, 142, 144, 146, 175, 178, 180, 182, \n\t255, 134, 138, 142, 161, 164, 255, 188, \n\t129, 131, 190, 191, 128, 132, 135, 136, \n\t139, 141, 150, 151, 162, 163, 130, 190, \n\t191, 151, 128, 130, 134, 136, 138, 141, \n\t128, 131, 190, 255, 133, 137, 142, 148, \n\t151, 161, 164, 255, 128, 132, 134, 136, \n\t138, 141, 149, 150, 162, 163, 129, 131, \n\t190, 255, 133, 137, 142, 150, 152, 161, \n\t164, 255, 130, 131, 138, 150, 143, 148, \n\t152, 159, 178, 179, 177, 179, 186, 135, \n\t142, 177, 179, 185, 187, 188, 136, 141, \n\t181, 183, 185, 152, 153, 190, 191, 177, \n\t191, 128, 132, 134, 135, 141, 151, 153, \n\t188, 134, 128, 129, 130, 141, 156, 157, \n\t158, 159, 160, 162, 164, 168, 169, 170, \n\t172, 173, 174, 175, 176, 179, 183, 173, \n\t183, 185, 190, 150, 153, 158, 160, 177, \n\t180, 130, 141, 157, 132, 134, 157, 159, \n\t146, 148, 178, 180, 146, 147, 178, 179, \n\t180, 255, 148, 156, 158, 255, 139, 141, \n\t169, 133, 134, 160, 171, 176, 187, 151, \n\t155, 160, 162, 191, 149, 158, 165, 188, \n\t176, 190, 128, 132, 180, 255, 133, 170, \n\t180, 255, 128, 130, 161, 173, 166, 179, \n\t164, 183, 173, 144, 146, 148, 168, 178, \n\t180, 184, 185, 128, 181, 187, 191, 128, \n\t131, 179, 181, 183, 140, 141, 128, 131, \n\t157, 179, 181, 183, 144, 176, 164, 175, \n\t177, 191, 160, 191, 128, 130, 170, 175, \n\t153, 154, 153, 154, 155, 160, 162, 163, \n\t164, 165, 166, 167, 168, 169, 170, 171, \n\t175, 175, 178, 180, 189, 158, 159, 176, \n\t177, 130, 134, 139, 163, 167, 128, 129, \n\t180, 255, 134, 159, 178, 255, 166, 173, \n\t135, 147, 128, 131, 179, 255, 129, 164, \n\t166, 255, 169, 182, 131, 188, 140, 141, \n\t176, 178, 180, 183, 184, 190, 191, 129, \n\t171, 175, 181, 182, 163, 170, 172, 173, \n\t172, 184, 190, 158, 128, 143, 160, 175, \n\t144, 145, 150, 155, 157, 158, 159, 135, \n\t139, 141, 168, 171, 189, 160, 182, 186, \n\t191, 129, 131, 133, 134, 140, 143, 184, \n\t186, 165, 166, 128, 129, 130, 132, 133, \n\t134, 135, 136, 139, 140, 141, 144, 145, \n\t146, 147, 150, 151, 152, 153, 154, 156, \n\t176, 178, 128, 130, 184, 255, 135, 190, \n\t131, 175, 187, 255, 128, 130, 167, 180, \n\t179, 128, 130, 179, 255, 129, 137, 141, \n\t255, 190, 172, 183, 159, 170, 188, 128, \n\t131, 190, 191, 151, 128, 132, 135, 136, \n\t139, 141, 162, 163, 166, 172, 176, 180, \n\t181, 191, 128, 134, 176, 255, 132, 255, \n\t175, 181, 184, 255, 129, 155, 158, 255, \n\t129, 255, 171, 183, 157, 171, 175, 182, \n\t184, 191, 146, 167, 169, 182, 171, 172, \n\t189, 190, 176, 180, 176, 182, 145, 190, \n\t143, 146, 178, 157, 158, 133, 134, 137, \n\t168, 169, 170, 165, 169, 173, 178, 187, \n\t255, 131, 132, 140, 169, 174, 255, 130, \n\t132, 128, 182, 187, 255, 173, 180, 182, \n\t255, 132, 155, 159, 161, 175, 128, 163, \n\t165, 128, 134, 136, 152, 155, 161, 163, \n\t164, 166, 170, 144, 150, 132, 138, 145, \n\t146, 151, 166, 169, 128, 255, 176, 255, \n\t131, 137, 191, 145, 189, 135, 129, 130, \n\t132, 133, 144, 154, 176, 139, 159, 150, \n\t156, 159, 164, 167, 168, 170, 173, 145, \n\t176, 255, 139, 255, 166, 176, 171, 179, \n\t160, 161, 163, 164, 165, 166, 167, 169, \n\t171, 172, 173, 174, 175, 176, 177, 178, \n\t179, 180, 181, 182, 183, 184, 185, 186, \n\t187, 188, 189, 190, 191, 168, 170, 150, \n\t153, 155, 163, 165, 167, 169, 173, 153, \n\t155, 148, 161, 163, 255, 131, 187, 189, \n\t132, 185, 190, 255, 141, 144, 129, 136, \n\t145, 151, 152, 161, 162, 163, 164, 255, \n\t129, 188, 190, 130, 131, 191, 255, 141, \n\t151, 129, 132, 133, 134, 137, 138, 142, \n\t161, 162, 163, 164, 255, 131, 188, 129, \n\t130, 190, 255, 145, 181, 129, 130, 131, \n\t134, 135, 136, 137, 138, 139, 141, 142, \n\t175, 176, 177, 178, 255, 134, 138, 141, \n\t129, 136, 142, 161, 162, 163, 164, 255, \n\t129, 188, 130, 131, 190, 191, 128, 141, \n\t129, 132, 135, 136, 139, 140, 150, 151, \n\t162, 163, 130, 190, 191, 128, 141, 151, \n\t129, 130, 134, 136, 138, 140, 128, 129, \n\t131, 190, 255, 133, 137, 129, 132, 142, \n\t148, 151, 161, 164, 255, 129, 188, 190, \n\t191, 130, 131, 130, 134, 128, 132, 135, \n\t136, 138, 139, 140, 141, 149, 150, 162, \n\t163, 129, 190, 130, 131, 191, 255, 133, \n\t137, 141, 151, 129, 132, 142, 161, 162, \n\t163, 164, 255, 138, 143, 150, 159, 144, \n\t145, 146, 148, 152, 158, 178, 179, 177, \n\t179, 180, 186, 135, 142, 177, 179, 180, \n\t185, 187, 188, 136, 141, 181, 183, 185, \n\t152, 153, 190, 191, 191, 177, 190, 128, \n\t132, 134, 135, 141, 151, 153, 188, 134, \n\t128, 129, 130, 141, 156, 157, 158, 159, \n\t160, 162, 164, 168, 169, 170, 172, 173, \n\t174, 175, 176, 179, 183, 177, 173, 183, \n\t185, 186, 187, 188, 189, 190, 150, 151, \n\t152, 153, 158, 160, 177, 180, 130, 132, \n\t141, 157, 133, 134, 157, 159, 146, 148, \n\t178, 180, 146, 147, 178, 179, 182, 180, \n\t189, 190, 255, 134, 157, 137, 147, 148, \n\t255, 139, 141, 169, 133, 134, 178, 160, \n\t162, 163, 166, 167, 168, 169, 171, 176, \n\t184, 185, 187, 155, 151, 152, 153, 154, \n\t150, 160, 162, 191, 149, 151, 152, 158, \n\t165, 172, 173, 178, 179, 188, 176, 190, \n\t132, 181, 187, 128, 131, 180, 188, 189, \n\t255, 130, 133, 170, 171, 179, 180, 255, \n\t130, 161, 170, 128, 129, 162, 165, 166, \n\t167, 168, 173, 167, 173, 166, 169, 170, \n\t174, 175, 177, 178, 179, 164, 171, 172, \n\t179, 180, 181, 182, 183, 161, 173, 180, \n\t144, 146, 148, 168, 178, 179, 184, 185, \n\t128, 181, 187, 191, 128, 131, 179, 181, \n\t183, 140, 141, 144, 176, 175, 177, 191, \n\t160, 191, 128, 130, 170, 175, 153, 154, \n\t153, 154, 155, 160, 162, 163, 164, 165, \n\t166, 167, 168, 169, 170, 171, 175, 175, \n\t178, 180, 189, 158, 159, 176, 177, 130, \n\t134, 139, 167, 163, 164, 165, 166, 132, \n\t133, 134, 159, 160, 177, 178, 255, 166, \n\t173, 135, 145, 146, 147, 131, 179, 188, \n\t128, 130, 180, 181, 182, 185, 186, 255, \n\t165, 129, 255, 169, 174, 175, 176, 177, \n\t178, 179, 180, 181, 182, 131, 140, 141, \n\t188, 176, 178, 180, 183, 184, 190, 191, \n\t129, 171, 181, 182, 172, 173, 174, 175, \n\t165, 168, 172, 173, 163, 170, 172, 184, \n\t190, 158, 128, 143, 160, 175, 144, 145, \n\t150, 155, 157, 158, 159, 135, 139, 141, \n\t168, 171, 189, 160, 182, 186, 191, 129, \n\t131, 133, 134, 140, 143, 184, 186, 165, \n\t166, 128, 129, 130, 132, 133, 134, 135, \n\t136, 139, 140, 141, 144, 145, 146, 147, \n\t150, 151, 152, 153, 154, 156, 176, 178, \n\t129, 128, 130, 184, 255, 135, 190, 130, \n\t131, 175, 176, 178, 183, 184, 187, 255, \n\t172, 128, 130, 167, 180, 179, 130, 128, \n\t129, 179, 181, 182, 190, 191, 255, 129, \n\t137, 138, 140, 141, 255, 180, 190, 172, \n\t174, 175, 177, 178, 181, 182, 183, 159, \n\t160, 162, 163, 170, 188, 190, 191, 128, \n\t129, 130, 131, 128, 151, 129, 132, 135, \n\t136, 139, 141, 162, 163, 166, 172, 176, \n\t180, 181, 183, 184, 191, 133, 128, 129, \n\t130, 134, 176, 185, 189, 177, 178, 179, \n\t186, 187, 190, 191, 255, 129, 132, 255, \n\t175, 190, 176, 177, 178, 181, 184, 187, \n\t188, 255, 129, 155, 158, 255, 189, 176, \n\t178, 179, 186, 187, 190, 191, 255, 129, \n\t255, 172, 182, 171, 173, 174, 175, 176, \n\t183, 166, 157, 159, 160, 161, 162, 171, \n\t175, 190, 176, 182, 184, 191, 169, 177, \n\t180, 146, 167, 170, 182, 171, 172, 189, \n\t190, 176, 180, 176, 182, 143, 146, 178, \n\t157, 158, 133, 134, 137, 168, 169, 170, \n\t166, 173, 165, 169, 174, 178, 187, 255, \n\t131, 132, 140, 169, 174, 255, 130, 132, \n\t128, 182, 187, 255, 173, 180, 182, 255, \n\t132, 155, 159, 161, 175, 128, 163, 165, \n\t128, 134, 136, 152, 155, 161, 163, 164, \n\t166, 170, 144, 150, 132, 138, 143, 187, \n\t191, 160, 128, 129, 132, 135, 133, 134, \n\t160, 255, 192, 255, 139, 168, 160, 128, \n\t129, 132, 135, 133, 134, 160, 255, 192, \n\t255, 144, 145, 150, 155, 157, 158, 128, \n\t191, 160, 172, 174, 191, 128, 133, 134, \n\t155, 157, 191, 157, 128, 191, 143, 128, \n\t191, 163, 181, 128, 191, 162, 128, 191, \n\t142, 128, 191, 132, 133, 134, 135, 160, \n\t128, 191, 128, 255, 128, 129, 130, 132, \n\t133, 134, 141, 156, 157, 158, 159, 160, \n\t162, 164, 168, 169, 170, 172, 173, 174, \n\t175, 176, 179, 183, 160, 255, 128, 129, \n\t130, 133, 134, 135, 141, 156, 157, 158, \n\t159, 160, 162, 164, 168, 169, 170, 172, \n\t173, 174, 175, 176, 179, 183, 160, 255, \n\t168, 255, 128, 129, 130, 134, 135, 141, \n\t156, 157, 158, 159, 160, 162, 164, 168, \n\t169, 170, 172, 173, 174, 175, 176, 179, \n\t183, 168, 255, 192, 255, 159, 139, 187, \n\t158, 159, 176, 255, 135, 138, 139, 187, \n\t188, 255, 168, 255, 153, 154, 155, 160, \n\t162, 163, 164, 165, 166, 167, 168, 169, \n\t170, 171, 175, 177, 178, 179, 180, 181, \n\t182, 184, 185, 186, 187, 188, 189, 191, \n\t176, 190, 192, 255, 135, 147, 160, 188, \n\t128, 156, 184, 129, 255, 128, 129, 130, \n\t133, 134, 141, 156, 157, 158, 159, 160, \n\t162, 164, 168, 169, 170, 172, 173, 174, \n\t175, 176, 179, 183, 158, 159, 135, 255, \n\t148, 176, 140, 168, 132, 160, 188, 152, \n\t180, 144, 172, 136, 164, 192, 255, 129, \n\t130, 131, 132, 133, 134, 136, 137, 138, \n\t139, 140, 141, 143, 144, 145, 146, 147, \n\t148, 150, 151, 152, 153, 154, 155, 157, \n\t158, 159, 160, 161, 162, 164, 165, 166, \n\t167, 168, 169, 171, 172, 173, 174, 175, \n\t176, 178, 179, 180, 181, 182, 183, 185, \n\t186, 187, 188, 189, 190, 128, 191, 129, \n\t130, 131, 132, 133, 134, 136, 137, 138, \n\t139, 140, 141, 143, 144, 145, 146, 147, \n\t148, 150, 151, 152, 153, 154, 155, 157, \n\t158, 159, 160, 161, 162, 164, 165, 166, \n\t167, 168, 169, 171, 172, 173, 174, 175, \n\t176, 178, 179, 180, 181, 182, 183, 185, \n\t186, 187, 188, 189, 190, 128, 191, 129, \n\t130, 131, 132, 133, 134, 136, 137, 138, \n\t139, 140, 141, 143, 144, 145, 146, 147, \n\t148, 150, 151, 152, 153, 154, 155, 157, \n\t158, 159, 128, 156, 160, 255, 136, 164, \n\t175, 176, 255, 128, 141, 143, 191, 128, \n\t129, 152, 155, 156, 130, 191, 140, 141, \n\t128, 138, 144, 167, 175, 191, 128, 159, \n\t176, 191, 157, 128, 191, 185, 128, 191, \n\t128, 137, 138, 141, 142, 191, 128, 191, \n\t165, 177, 178, 179, 180, 181, 182, 184, \n\t185, 186, 187, 188, 189, 191, 128, 175, \n\t176, 190, 192, 255, 128, 159, 160, 188, \n\t189, 191, 128, 156, 184, 129, 255, 148, \n\t176, 140, 168, 132, 160, 188, 152, 180, \n\t144, 172, 136, 164, 192, 255, 129, 130, \n\t131, 132, 133, 134, 136, 137, 138, 139, \n\t140, 141, 143, 144, 145, 146, 147, 148, \n\t150, 151, 152, 153, 154, 155, 157, 158, \n\t159, 160, 161, 162, 164, 165, 166, 167, \n\t168, 169, 171, 172, 173, 174, 175, 176, \n\t178, 179, 180, 181, 182, 183, 185, 186, \n\t187, 188, 189, 190, 128, 191, 129, 130, \n\t131, 132, 133, 134, 136, 137, 138, 139, \n\t140, 141, 143, 144, 145, 146, 147, 148, \n\t150, 151, 152, 153, 154, 155, 157, 158, \n\t159, 160, 161, 162, 164, 165, 166, 167, \n\t168, 169, 171, 172, 173, 174, 175, 176, \n\t178, 179, 180, 181, 182, 183, 185, 186, \n\t187, 188, 189, 190, 128, 191, 129, 130, \n\t131, 132, 133, 134, 136, 137, 138, 139, \n\t140, 141, 143, 144, 145, 146, 147, 148, \n\t150, 151, 152, 153, 154, 155, 157, 158, \n\t159, 128, 156, 160, 255, 136, 164, 175, \n\t176, 255, 135, 138, 139, 187, 188, 191, \n\t192, 255, 187, 191, 128, 190, 128, 190, \n\t188, 128, 175, 190, 191, 145, 155, 157, \n\t159, 128, 191, 130, 135, 128, 191, 189, \n\t128, 191, 128, 129, 130, 131, 132, 191, \n\t178, 128, 191, 128, 159, 164, 191, 133, \n\t128, 191, 128, 178, 187, 191, 135, 142, \n\t143, 145, 146, 149, 150, 153, 154, 155, \n\t164, 128, 191, 128, 165, 166, 191, 144, \n\t145, 150, 155, 157, 158, 159, 135, 166, \n\t191, 133, 128, 191, 128, 130, 131, 132, \n\t133, 137, 138, 139, 140, 191, 174, 188, \n\t128, 129, 130, 131, 132, 133, 134, 144, \n\t145, 165, 166, 169, 170, 175, 176, 184, \n\t185, 191, 128, 132, 170, 129, 135, 136, \n\t191, 181, 186, 128, 191, 144, 128, 148, \n\t149, 150, 151, 191, 128, 132, 133, 135, \n\t136, 138, 139, 143, 144, 191, 163, 128, \n\t179, 180, 182, 183, 191, 128, 129, 191, \n\t166, 176, 191, 128, 151, 152, 158, 159, \n\t178, 179, 185, 186, 187, 188, 190, 128, \n\t191, 160, 128, 191, 128, 129, 135, 132, \n\t134, 128, 175, 157, 128, 191, 143, 128, \n\t191, 163, 181, 128, 191, 162, 128, 191, \n\t142, 128, 191, 132, 133, 134, 135, 160, \n\t128, 191, 0, 127, 128, 255, 176, 255, \n\t131, 137, 191, 145, 189, 135, 129, 130, \n\t132, 133, 144, 154, 176, 139, 159, 150, \n\t156, 159, 164, 167, 168, 170, 173, 145, \n\t176, 255, 139, 255, 166, 176, 171, 179, \n\t160, 161, 163, 164, 165, 167, 169, 171, \n\t173, 174, 175, 176, 177, 179, 180, 181, \n\t182, 183, 184, 185, 186, 187, 188, 189, \n\t190, 191, 166, 170, 172, 178, 150, 153, \n\t155, 163, 165, 167, 169, 173, 153, 155, \n\t148, 161, 163, 255, 189, 132, 185, 144, \n\t152, 161, 164, 255, 188, 129, 131, 190, \n\t255, 133, 134, 137, 138, 142, 150, 152, \n\t161, 164, 255, 131, 134, 137, 138, 142, \n\t144, 146, 175, 178, 180, 182, 255, 134, \n\t138, 142, 161, 164, 255, 188, 129, 131, \n\t190, 191, 128, 132, 135, 136, 139, 141, \n\t150, 151, 162, 163, 130, 190, 191, 151, \n\t128, 130, 134, 136, 138, 141, 128, 131, \n\t190, 255, 133, 137, 142, 148, 151, 161, \n\t164, 255, 128, 132, 134, 136, 138, 141, \n\t149, 150, 162, 163, 129, 131, 190, 255, \n\t133, 137, 142, 150, 152, 161, 164, 255, \n\t130, 131, 138, 150, 143, 148, 152, 159, \n\t178, 179, 177, 179, 186, 135, 142, 177, \n\t179, 185, 187, 188, 136, 141, 181, 183, \n\t185, 152, 153, 190, 191, 177, 191, 128, \n\t132, 134, 135, 141, 151, 153, 188, 134, \n\t128, 129, 130, 141, 156, 157, 158, 159, \n\t160, 162, 164, 168, 169, 170, 172, 173, \n\t174, 175, 176, 179, 183, 173, 183, 185, \n\t190, 150, 153, 158, 160, 177, 180, 130, \n\t141, 157, 132, 134, 157, 159, 146, 148, \n\t178, 180, 146, 147, 178, 179, 180, 255, \n\t148, 156, 158, 255, 139, 141, 169, 133, \n\t134, 160, 171, 176, 187, 151, 155, 160, \n\t162, 191, 149, 158, 165, 188, 176, 190, \n\t128, 132, 180, 255, 133, 170, 180, 255, \n\t128, 130, 161, 173, 166, 179, 164, 183, \n\t173, 144, 146, 148, 168, 178, 180, 184, \n\t185, 128, 181, 187, 191, 128, 131, 179, \n\t181, 183, 140, 141, 128, 131, 157, 179, \n\t181, 183, 144, 176, 164, 175, 177, 191, \n\t160, 191, 128, 130, 170, 175, 153, 154, \n\t153, 154, 155, 160, 162, 163, 164, 165, \n\t166, 167, 168, 169, 170, 171, 175, 175, \n\t178, 180, 189, 158, 159, 176, 177, 130, \n\t134, 139, 163, 167, 128, 129, 180, 255, \n\t134, 159, 178, 255, 166, 173, 135, 147, \n\t128, 131, 179, 255, 129, 164, 166, 255, \n\t169, 182, 131, 188, 140, 141, 176, 178, \n\t180, 183, 184, 190, 191, 129, 171, 175, \n\t181, 182, 163, 170, 172, 173, 172, 184, \n\t190, 158, 128, 143, 160, 175, 144, 145, \n\t150, 155, 157, 158, 159, 135, 139, 141, \n\t168, 171, 189, 160, 182, 186, 191, 129, \n\t131, 133, 134, 140, 143, 184, 186, 165, \n\t166, 128, 129, 130, 132, 133, 134, 135, \n\t136, 139, 140, 141, 144, 145, 146, 147, \n\t150, 151, 152, 153, 154, 156, 176, 178, \n\t128, 130, 184, 255, 135, 190, 131, 175, \n\t187, 255, 128, 130, 167, 180, 179, 128, \n\t130, 179, 255, 129, 137, 141, 255, 190, \n\t172, 183, 159, 170, 188, 128, 131, 190, \n\t191, 151, 128, 132, 135, 136, 139, 141, \n\t162, 163, 166, 172, 176, 180, 181, 191, \n\t128, 134, 176, 255, 132, 255, 175, 181, \n\t184, 255, 129, 155, 158, 255, 129, 255, \n\t171, 183, 157, 171, 175, 182, 184, 191, \n\t146, 167, 169, 182, 171, 172, 189, 190, \n\t176, 180, 176, 182, 145, 190, 143, 146, \n\t178, 157, 158, 133, 134, 137, 168, 169, \n\t170, 165, 169, 173, 178, 187, 255, 131, \n\t132, 140, 169, 174, 255, 130, 132, 128, \n\t182, 187, 255, 173, 180, 182, 255, 132, \n\t155, 159, 161, 175, 128, 163, 165, 128, \n\t134, 136, 152, 155, 161, 163, 164, 166, \n\t170, 144, 150, 132, 138, 145, 146, 151, \n\t166, 169, 128, 255, 176, 255, 131, 137, \n\t191, 145, 189, 135, 129, 130, 132, 133, \n\t144, 154, 176, 139, 159, 150, 156, 159, \n\t164, 167, 168, 170, 173, 145, 176, 255, \n\t139, 255, 166, 176, 171, 179, 160, 161, \n\t163, 164, 165, 166, 167, 169, 171, 172, \n\t173, 174, 175, 176, 177, 178, 179, 180, \n\t181, 182, 183, 184, 185, 186, 187, 188, \n\t189, 190, 191, 168, 170, 150, 153, 155, \n\t163, 165, 167, 169, 173, 153, 155, 148, \n\t161, 163, 255, 131, 187, 189, 132, 185, \n\t190, 255, 141, 144, 129, 136, 145, 151, \n\t152, 161, 162, 163, 164, 255, 129, 188, \n\t190, 130, 131, 191, 255, 141, 151, 129, \n\t132, 133, 134, 137, 138, 142, 161, 162, \n\t163, 164, 255, 131, 188, 129, 130, 190, \n\t255, 145, 181, 129, 130, 131, 134, 135, \n\t136, 137, 138, 139, 141, 142, 175, 176, \n\t177, 178, 255, 134, 138, 141, 129, 136, \n\t142, 161, 162, 163, 164, 255, 129, 188, \n\t130, 131, 190, 191, 128, 141, 129, 132, \n\t135, 136, 139, 140, 150, 151, 162, 163, \n\t130, 190, 191, 128, 141, 151, 129, 130, \n\t134, 136, 138, 140, 128, 129, 131, 190, \n\t255, 133, 137, 129, 132, 142, 148, 151, \n\t161, 164, 255, 129, 188, 190, 191, 130, \n\t131, 130, 134, 128, 132, 135, 136, 138, \n\t139, 140, 141, 149, 150, 162, 163, 129, \n\t190, 130, 131, 191, 255, 133, 137, 141, \n\t151, 129, 132, 142, 161, 162, 163, 164, \n\t255, 138, 143, 150, 159, 144, 145, 146, \n\t148, 152, 158, 178, 179, 177, 179, 180, \n\t186, 135, 142, 177, 179, 180, 185, 187, \n\t188, 136, 141, 181, 183, 185, 152, 153, \n\t190, 191, 191, 177, 190, 128, 132, 134, \n\t135, 141, 151, 153, 188, 134, 128, 129, \n\t130, 141, 156, 157, 158, 159, 160, 162, \n\t164, 168, 169, 170, 172, 173, 174, 175, \n\t176, 179, 183, 177, 173, 183, 185, 186, \n\t187, 188, 189, 190, 150, 151, 152, 153, \n\t158, 160, 177, 180, 130, 132, 141, 157, \n\t133, 134, 157, 159, 146, 148, 178, 180, \n\t146, 147, 178, 179, 182, 180, 189, 190, \n\t255, 134, 157, 137, 147, 148, 255, 139, \n\t141, 169, 133, 134, 178, 160, 162, 163, \n\t166, 167, 168, 169, 171, 176, 184, 185, \n\t187, 155, 151, 152, 153, 154, 150, 160, \n\t162, 191, 149, 151, 152, 158, 165, 172, \n\t173, 178, 179, 188, 176, 190, 132, 181, \n\t187, 128, 131, 180, 188, 189, 255, 130, \n\t133, 170, 171, 179, 180, 255, 130, 161, \n\t170, 128, 129, 162, 165, 166, 167, 168, \n\t173, 167, 173, 166, 169, 170, 174, 175, \n\t177, 178, 179, 164, 171, 172, 179, 180, \n\t181, 182, 183, 161, 173, 180, 144, 146, \n\t148, 168, 178, 179, 184, 185, 128, 181, \n\t187, 191, 128, 131, 179, 181, 183, 140, \n\t141, 144, 176, 175, 177, 191, 160, 191, \n\t128, 130, 170, 175, 153, 154, 153, 154, \n\t155, 160, 162, 163, 164, 165, 166, 167, \n\t168, 169, 170, 171, 175, 175, 178, 180, \n\t189, 158, 159, 176, 177, 130, 134, 139, \n\t167, 163, 164, 165, 166, 132, 133, 134, \n\t159, 160, 177, 178, 255, 166, 173, 135, \n\t145, 146, 147, 131, 179, 188, 128, 130, \n\t180, 181, 182, 185, 186, 255, 165, 129, \n\t255, 169, 174, 175, 176, 177, 178, 179, \n\t180, 181, 182, 131, 140, 141, 188, 176, \n\t178, 180, 183, 184, 190, 191, 129, 171, \n\t181, 182, 172, 173, 174, 175, 165, 168, \n\t172, 173, 163, 170, 172, 184, 190, 158, \n\t128, 143, 160, 175, 144, 145, 150, 155, \n\t157, 158, 159, 135, 139, 141, 168, 171, \n\t189, 160, 182, 186, 191, 129, 131, 133, \n\t134, 140, 143, 184, 186, 165, 166, 128, \n\t129, 130, 132, 133, 134, 135, 136, 139, \n\t140, 141, 144, 145, 146, 147, 150, 151, \n\t152, 153, 154, 156, 176, 178, 129, 128, \n\t130, 184, 255, 135, 190, 130, 131, 175, \n\t176, 178, 183, 184, 187, 255, 172, 128, \n\t130, 167, 180, 179, 130, 128, 129, 179, \n\t181, 182, 190, 191, 255, 129, 137, 138, \n\t140, 141, 255, 180, 190, 172, 174, 175, \n\t177, 178, 181, 182, 183, 159, 160, 162, \n\t163, 170, 188, 190, 191, 128, 129, 130, \n\t131, 128, 151, 129, 132, 135, 136, 139, \n\t141, 162, 163, 166, 172, 176, 180, 181, \n\t183, 184, 191, 133, 128, 129, 130, 134, \n\t176, 185, 189, 177, 178, 179, 186, 187, \n\t190, 191, 255, 129, 132, 255, 175, 190, \n\t176, 177, 178, 181, 184, 187, 188, 255, \n\t129, 155, 158, 255, 189, 176, 178, 179, \n\t186, 187, 190, 191, 255, 129, 255, 172, \n\t182, 171, 173, 174, 175, 176, 183, 166, \n\t157, 159, 160, 161, 162, 171, 175, 190, \n\t176, 182, 184, 191, 169, 177, 180, 146, \n\t167, 170, 182, 171, 172, 189, 190, 176, \n\t180, 176, 182, 143, 146, 178, 157, 158, \n\t133, 134, 137, 168, 169, 170, 166, 173, \n\t165, 169, 174, 178, 187, 255, 131, 132, \n\t140, 169, 174, 255, 130, 132, 128, 182, \n\t187, 255, 173, 180, 182, 255, 132, 155, \n\t159, 161, 175, 128, 163, 165, 128, 134, \n\t136, 152, 155, 161, 163, 164, 166, 170, \n\t144, 150, 132, 138, 143, 187, 191, 160, \n\t128, 129, 132, 135, 133, 134, 160, 255, \n\t192, 255, 139, 168, 160, 128, 129, 132, \n\t135, 133, 134, 160, 255, 192, 255, 144, \n\t145, 150, 155, 157, 158, 128, 129, 130, \n\t132, 133, 134, 141, 156, 157, 158, 159, \n\t160, 162, 164, 168, 169, 170, 172, 173, \n\t174, 175, 176, 179, 183, 160, 255, 128, \n\t129, 130, 133, 134, 135, 141, 156, 157, \n\t158, 159, 160, 162, 164, 168, 169, 170, \n\t172, 173, 174, 175, 176, 179, 183, 160, \n\t255, 168, 255, 128, 129, 130, 134, 135, \n\t141, 156, 157, 158, 159, 160, 162, 164, \n\t168, 169, 170, 172, 173, 174, 175, 176, \n\t179, 183, 168, 255, 192, 255, 159, 139, \n\t187, 158, 159, 176, 255, 135, 138, 139, \n\t187, 188, 255, 168, 255, 153, 154, 155, \n\t160, 162, 163, 164, 165, 166, 167, 168, \n\t169, 170, 171, 175, 177, 178, 179, 180, \n\t181, 182, 184, 185, 186, 187, 188, 189, \n\t191, 176, 190, 192, 255, 135, 147, 160, \n\t188, 128, 156, 184, 129, 255, 128, 129, \n\t130, 133, 134, 141, 156, 157, 158, 159, \n\t160, 162, 164, 168, 169, 170, 172, 173, \n\t174, 175, 176, 179, 183, 158, 159, 135, \n\t255, 148, 176, 140, 168, 132, 160, 188, \n\t152, 180, 144, 172, 136, 164, 192, 255, \n\t129, 130, 131, 132, 133, 134, 136, 137, \n\t138, 139, 140, 141, 143, 144, 145, 146, \n\t147, 148, 150, 151, 152, 153, 154, 155, \n\t157, 158, 159, 160, 161, 162, 164, 165, \n\t166, 167, 168, 169, 171, 172, 173, 174, \n\t175, 176, 178, 179, 180, 181, 182, 183, \n\t185, 186, 187, 188, 189, 190, 128, 191, \n\t129, 130, 131, 132, 133, 134, 136, 137, \n\t138, 139, 140, 141, 143, 144, 145, 146, \n\t147, 148, 150, 151, 152, 153, 154, 155, \n\t157, 158, 159, 160, 161, 162, 164, 165, \n\t166, 167, 168, 169, 171, 172, 173, 174, \n\t175, 176, 178, 179, 180, 181, 182, 183, \n\t185, 186, 187, 188, 189, 190, 128, 191, \n\t129, 130, 131, 132, 133, 134, 136, 137, \n\t138, 139, 140, 141, 143, 144, 145, 146, \n\t147, 148, 150, 151, 152, 153, 154, 155, \n\t157, 158, 159, 128, 156, 160, 255, 136, \n\t164, 175, 176, 255, 142, 128, 191, 128, \n\t129, 152, 155, 156, 130, 191, 139, 141, \n\t128, 140, 142, 143, 144, 167, 168, 174, \n\t175, 191, 128, 255, 176, 255, 131, 137, \n\t191, 145, 189, 135, 129, 130, 132, 133, \n\t144, 154, 176, 139, 159, 150, 156, 159, \n\t164, 167, 168, 170, 173, 145, 176, 255, \n\t139, 255, 166, 176, 171, 179, 160, 161, \n\t163, 164, 165, 167, 169, 171, 173, 174, \n\t175, 176, 177, 179, 180, 181, 182, 183, \n\t184, 185, 186, 187, 188, 189, 190, 191, \n\t166, 170, 172, 178, 150, 153, 155, 163, \n\t165, 167, 169, 173, 153, 155, 148, 161, \n\t163, 255, 189, 132, 185, 144, 152, 161, \n\t164, 255, 188, 129, 131, 190, 255, 133, \n\t134, 137, 138, 142, 150, 152, 161, 164, \n\t255, 131, 134, 137, 138, 142, 144, 146, \n\t175, 178, 180, 182, 255, 134, 138, 142, \n\t161, 164, 255, 188, 129, 131, 190, 191, \n\t128, 132, 135, 136, 139, 141, 150, 151, \n\t162, 163, 130, 190, 191, 151, 128, 130, \n\t134, 136, 138, 141, 128, 131, 190, 255, \n\t133, 137, 142, 148, 151, 161, 164, 255, \n\t128, 132, 134, 136, 138, 141, 149, 150, \n\t162, 163, 129, 131, 190, 255, 133, 137, \n\t142, 150, 152, 161, 164, 255, 130, 131, \n\t138, 150, 143, 148, 152, 159, 178, 179, \n\t177, 179, 186, 135, 142, 177, 179, 185, \n\t187, 188, 136, 141, 181, 183, 185, 152, \n\t153, 190, 191, 177, 191, 128, 132, 134, \n\t135, 141, 151, 153, 188, 134, 128, 129, \n\t130, 141, 156, 157, 158, 159, 160, 162, \n\t164, 168, 169, 170, 172, 173, 174, 175, \n\t176, 179, 183, 173, 183, 185, 190, 150, \n\t153, 158, 160, 177, 180, 130, 141, 157, \n\t132, 134, 157, 159, 146, 148, 178, 180, \n\t146, 147, 178, 179, 180, 255, 148, 156, \n\t158, 255, 139, 141, 169, 133, 134, 160, \n\t171, 176, 187, 151, 155, 160, 162, 191, \n\t149, 158, 165, 188, 176, 190, 128, 132, \n\t180, 255, 133, 170, 180, 255, 128, 130, \n\t161, 173, 166, 179, 164, 183, 173, 144, \n\t146, 148, 168, 178, 180, 184, 185, 128, \n\t181, 187, 191, 128, 131, 179, 181, 183, \n\t140, 141, 144, 176, 175, 177, 191, 160, \n\t191, 128, 130, 170, 175, 153, 154, 153, \n\t154, 155, 160, 162, 163, 164, 165, 166, \n\t167, 168, 169, 170, 171, 175, 175, 178, \n\t180, 189, 158, 159, 176, 177, 130, 134, \n\t139, 163, 167, 128, 129, 180, 255, 134, \n\t159, 178, 255, 166, 173, 135, 147, 128, \n\t131, 179, 255, 129, 164, 166, 255, 169, \n\t182, 131, 188, 140, 141, 176, 178, 180, \n\t183, 184, 190, 191, 129, 171, 175, 181, \n\t182, 163, 170, 172, 173, 172, 184, 190, \n\t158, 128, 143, 160, 175, 144, 145, 150, \n\t155, 157, 158, 135, 139, 141, 168, 171, \n\t189, 160, 182, 186, 191, 129, 131, 133, \n\t134, 140, 143, 184, 186, 165, 166, 128, \n\t129, 130, 132, 133, 134, 135, 136, 139, \n\t140, 141, 144, 145, 146, 147, 150, 151, \n\t152, 153, 154, 156, 176, 178, 128, 130, \n\t184, 255, 135, 190, 131, 175, 187, 255, \n\t128, 130, 167, 180, 179, 128, 130, 179, \n\t255, 129, 137, 141, 255, 190, 172, 183, \n\t159, 170, 188, 128, 131, 190, 191, 151, \n\t128, 132, 135, 136, 139, 141, 162, 163, \n\t166, 172, 176, 180, 181, 191, 128, 134, \n\t176, 255, 132, 255, 175, 181, 184, 255, \n\t129, 155, 158, 255, 129, 255, 171, 183, \n\t157, 171, 175, 182, 184, 191, 146, 167, \n\t169, 182, 171, 172, 189, 190, 176, 180, \n\t176, 182, 145, 190, 143, 146, 178, 157, \n\t158, 133, 134, 137, 168, 169, 170, 165, \n\t169, 173, 178, 187, 255, 131, 132, 140, \n\t169, 174, 255, 130, 132, 128, 182, 187, \n\t255, 173, 180, 182, 255, 132, 155, 159, \n\t161, 175, 128, 163, 165, 128, 134, 136, \n\t152, 155, 161, 163, 164, 166, 170, 144, \n\t150, 132, 138, 160, 128, 129, 132, 135, \n\t133, 134, 160, 255, 192, 255, 128, 131, \n\t157, 179, 181, 183, 164, 144, 145, 150, \n\t155, 157, 158, 159, 145, 146, 151, 166, \n\t169, 128, 255, 176, 255, 131, 137, 191, \n\t145, 189, 135, 129, 130, 132, 133, 144, \n\t154, 176, 139, 159, 150, 156, 159, 164, \n\t167, 168, 170, 173, 145, 176, 255, 139, \n\t255, 166, 176, 171, 179, 160, 161, 163, \n\t164, 165, 166, 167, 169, 171, 172, 173, \n\t174, 175, 176, 177, 178, 179, 180, 181, \n\t182, 183, 184, 185, 186, 187, 188, 189, \n\t190, 191, 168, 170, 150, 153, 155, 163, \n\t165, 167, 169, 173, 153, 155, 148, 161, \n\t163, 255, 131, 187, 189, 132, 185, 190, \n\t255, 141, 144, 129, 136, 145, 151, 152, \n\t161, 162, 163, 164, 255, 129, 188, 190, \n\t130, 131, 191, 255, 141, 151, 129, 132, \n\t133, 134, 137, 138, 142, 161, 162, 163, \n\t164, 255, 131, 188, 129, 130, 190, 255, \n\t145, 181, 129, 130, 131, 134, 135, 136, \n\t137, 138, 139, 141, 142, 175, 176, 177, \n\t178, 255, 134, 138, 141, 129, 136, 142, \n\t161, 162, 163, 164, 255, 129, 188, 130, \n\t131, 190, 191, 128, 141, 129, 132, 135, \n\t136, 139, 140, 150, 151, 162, 163, 130, \n\t190, 191, 128, 141, 151, 129, 130, 134, \n\t136, 138, 140, 128, 129, 131, 190, 255, \n\t133, 137, 129, 132, 142, 148, 151, 161, \n\t164, 255, 129, 188, 190, 191, 130, 131, \n\t130, 134, 128, 132, 135, 136, 138, 139, \n\t140, 141, 149, 150, 162, 163, 129, 190, \n\t130, 131, 191, 255, 133, 137, 141, 151, \n\t129, 132, 142, 161, 162, 163, 164, 255, \n\t138, 143, 150, 159, 144, 145, 146, 148, \n\t152, 158, 178, 179, 177, 179, 180, 186, \n\t135, 142, 177, 179, 180, 185, 187, 188, \n\t136, 141, 181, 183, 185, 152, 153, 190, \n\t191, 191, 177, 190, 128, 132, 134, 135, \n\t141, 151, 153, 188, 134, 128, 129, 130, \n\t141, 156, 157, 158, 159, 160, 162, 164, \n\t168, 169, 170, 172, 173, 174, 175, 176, \n\t179, 183, 177, 173, 183, 185, 186, 187, \n\t188, 189, 190, 150, 151, 152, 153, 158, \n\t160, 177, 180, 130, 132, 141, 157, 133, \n\t134, 157, 159, 146, 148, 178, 180, 146, \n\t147, 178, 179, 182, 180, 189, 190, 255, \n\t134, 157, 137, 147, 148, 255, 139, 141, \n\t169, 133, 134, 178, 160, 162, 163, 166, \n\t167, 168, 169, 171, 176, 184, 185, 187, \n\t155, 151, 152, 153, 154, 150, 160, 162, \n\t191, 149, 151, 152, 158, 165, 172, 173, \n\t178, 179, 188, 176, 190, 132, 181, 187, \n\t128, 131, 180, 188, 189, 255, 130, 133, \n\t170, 171, 179, 180, 255, 130, 161, 170, \n\t128, 129, 162, 165, 166, 167, 168, 173, \n\t167, 173, 166, 169, 170, 174, 175, 177, \n\t178, 179, 164, 171, 172, 179, 180, 181, \n\t182, 183, 161, 173, 180, 144, 146, 148, \n\t168, 178, 179, 184, 185, 128, 181, 187, \n\t191, 128, 131, 179, 181, 183, 140, 141, \n\t144, 176, 175, 177, 191, 160, 191, 128, \n\t130, 170, 175, 153, 154, 153, 154, 155, \n\t160, 162, 163, 164, 165, 166, 167, 168, \n\t169, 170, 171, 175, 175, 178, 180, 189, \n\t158, 159, 176, 177, 130, 134, 139, 167, \n\t163, 164, 165, 166, 132, 133, 134, 159, \n\t160, 177, 178, 255, 166, 173, 135, 145, \n\t146, 147, 131, 179, 188, 128, 130, 180, \n\t181, 182, 185, 186, 255, 165, 129, 255, \n\t169, 174, 175, 176, 177, 178, 179, 180, \n\t181, 182, 131, 140, 141, 188, 176, 178, \n\t180, 183, 184, 190, 191, 129, 171, 181, \n\t182, 172, 173, 174, 175, 165, 168, 172, \n\t173, 163, 170, 172, 184, 190, 158, 128, \n\t143, 160, 175, 144, 145, 150, 155, 157, \n\t158, 159, 135, 139, 141, 168, 171, 189, \n\t160, 182, 186, 191, 129, 131, 133, 134, \n\t140, 143, 184, 186, 165, 166, 128, 129, \n\t130, 132, 133, 134, 135, 136, 139, 140, \n\t141, 144, 145, 146, 147, 150, 151, 152, \n\t153, 154, 156, 176, 178, 129, 128, 130, \n\t184, 255, 135, 190, 130, 131, 175, 176, \n\t178, 183, 184, 187, 255, 172, 128, 130, \n\t167, 180, 179, 130, 128, 129, 179, 181, \n\t182, 190, 191, 255, 129, 137, 138, 140, \n\t141, 255, 180, 190, 172, 174, 175, 177, \n\t178, 181, 182, 183, 159, 160, 162, 163, \n\t170, 188, 190, 191, 128, 129, 130, 131, \n\t128, 151, 129, 132, 135, 136, 139, 141, \n\t162, 163, 166, 172, 176, 180, 181, 183, \n\t184, 191, 133, 128, 129, 130, 134, 176, \n\t185, 189, 177, 178, 179, 186, 187, 190, \n\t191, 255, 129, 132, 255, 175, 190, 176, \n\t177, 178, 181, 184, 187, 188, 255, 129, \n\t155, 158, 255, 189, 176, 178, 179, 186, \n\t187, 190, 191, 255, 129, 255, 172, 182, \n\t171, 173, 174, 175, 176, 183, 166, 157, \n\t159, 160, 161, 162, 171, 175, 190, 176, \n\t182, 184, 191, 169, 177, 180, 146, 167, \n\t170, 182, 171, 172, 189, 190, 176, 180, \n\t176, 182, 143, 146, 178, 157, 158, 133, \n\t134, 137, 168, 169, 170, 166, 173, 165, \n\t169, 174, 178, 187, 255, 131, 132, 140, \n\t169, 174, 255, 130, 132, 128, 182, 187, \n\t255, 173, 180, 182, 255, 132, 155, 159, \n\t161, 175, 128, 163, 165, 128, 134, 136, \n\t152, 155, 161, 163, 164, 166, 170, 144, \n\t150, 132, 138, 143, 187, 191, 160, 128, \n\t129, 132, 135, 133, 134, 160, 255, 192, \n\t255, 139, 168, 128, 159, 160, 175, 176, \n\t191, 157, 128, 191, 128, 255, 176, 255, \n\t131, 137, 191, 145, 189, 135, 129, 130, \n\t132, 133, 144, 154, 176, 139, 159, 150, \n\t156, 159, 164, 167, 168, 170, 173, 145, \n\t176, 255, 139, 255, 166, 176, 171, 179, \n\t160, 161, 163, 164, 165, 166, 167, 169, \n\t171, 172, 173, 174, 175, 176, 177, 178, \n\t179, 180, 181, 182, 183, 184, 185, 186, \n\t187, 188, 189, 190, 191, 168, 170, 150, \n\t153, 155, 163, 165, 167, 169, 173, 153, \n\t155, 148, 161, 163, 255, 131, 187, 189, \n\t132, 185, 190, 255, 128, 255, 176, 255, \n\t131, 137, 191, 145, 189, 135, 129, 130, \n\t132, 133, 144, 154, 176, 139, 159, 150, \n\t156, 159, 164, 167, 168, 170, 173, 145, \n\t176, 255, 139, 255, 166, 176, 171, 179, \n\t160, 161, 163, 164, 165, 167, 169, 171, \n\t173, 174, 175, 176, 177, 179, 180, 181, \n\t182, 183, 184, 185, 186, 187, 188, 189, \n\t190, 191, 166, 170, 172, 178, 150, 153, \n\t155, 163, 165, 167, 169, 173, 153, 155, \n\t148, 161, 163, 255, 189, 132, 185, 144, \n\t152, 161, 164, 255, 188, 129, 131, 190, \n\t255, 133, 134, 137, 138, 142, 150, 152, \n\t161, 164, 255, 131, 134, 137, 138, 142, \n\t144, 146, 175, 178, 180, 182, 255, 134, \n\t138, 142, 161, 164, 255, 188, 129, 131, \n\t190, 191, 128, 132, 135, 136, 139, 141, \n\t150, 151, 162, 163, 130, 190, 191, 151, \n\t128, 130, 134, 136, 138, 141, 128, 131, \n\t190, 255, 133, 137, 142, 148, 151, 161, \n\t164, 255, 128, 132, 134, 136, 138, 141, \n\t149, 150, 162, 163, 129, 131, 190, 255, \n\t133, 137, 142, 150, 152, 161, 164, 255, \n\t130, 131, 138, 150, 143, 148, 152, 159, \n\t178, 179, 177, 179, 186, 135, 142, 177, \n\t179, 185, 187, 188, 136, 141, 181, 183, \n\t185, 152, 153, 190, 191, 177, 191, 128, \n\t132, 134, 135, 141, 151, 153, 188, 134, \n\t128, 129, 130, 141, 156, 157, 158, 159, \n\t160, 162, 164, 168, 169, 170, 172, 173, \n\t174, 175, 176, 179, 183, 173, 183, 185, \n\t190, 150, 153, 158, 160, 177, 180, 130, \n\t141, 157, 132, 134, 157, 159, 146, 148, \n\t178, 180, 146, 147, 178, 179, 180, 255, \n\t148, 156, 158, 255, 139, 141, 169, 133, \n\t134, 160, 171, 176, 187, 151, 155, 160, \n\t162, 191, 149, 158, 165, 188, 176, 190, \n\t128, 132, 180, 255, 133, 170, 180, 255, \n\t128, 130, 161, 173, 166, 179, 164, 183, \n\t173, 144, 146, 148, 168, 178, 180, 184, \n\t185, 128, 181, 187, 191, 128, 131, 179, \n\t181, 183, 140, 141, 128, 131, 157, 179, \n\t181, 183, 144, 176, 164, 175, 177, 191, \n\t160, 191, 128, 130, 170, 175, 153, 154, \n\t153, 154, 155, 160, 162, 163, 164, 165, \n\t166, 167, 168, 169, 170, 171, 175, 175, \n\t178, 180, 189, 158, 159, 176, 177, 130, \n\t134, 139, 163, 167, 128, 129, 180, 255, \n\t134, 159, 178, 255, 166, 173, 135, 147, \n\t128, 131, 179, 255, 129, 164, 166, 255, \n\t169, 182, 131, 188, 140, 141, 176, 178, \n\t180, 183, 184, 190, 191, 129, 171, 175, \n\t181, 182, 163, 170, 172, 173, 172, 184, \n\t190, 158, 128, 143, 160, 175, 144, 145, \n\t150, 155, 157, 158, 159, 135, 139, 141, \n\t168, 171, 189, 160, 182, 186, 191, 129, \n\t131, 133, 134, 140, 143, 184, 186, 165, \n\t166, 128, 129, 130, 132, 133, 134, 135, \n\t136, 139, 140, 141, 144, 145, 146, 147, \n\t150, 151, 152, 153, 154, 156, 176, 178, \n\t128, 130, 184, 255, 135, 190, 131, 175, \n\t187, 255, 128, 130, 167, 180, 179, 128, \n\t130, 179, 255, 129, 137, 141, 255, 190, \n\t172, 183, 159, 170, 188, 128, 131, 190, \n\t191, 151, 128, 132, 135, 136, 139, 141, \n\t162, 163, 166, 172, 176, 180, 181, 191, \n\t128, 134, 176, 255, 132, 255, 175, 181, \n\t184, 255, 129, 155, 158, 255, 129, 255, \n\t171, 183, 157, 171, 175, 182, 184, 191, \n\t146, 167, 169, 182, 171, 172, 189, 190, \n\t176, 180, 176, 182, 145, 190, 143, 146, \n\t178, 157, 158, 133, 134, 137, 168, 169, \n\t170, 165, 169, 173, 178, 187, 255, 131, \n\t132, 140, 169, 174, 255, 130, 132, 128, \n\t182, 187, 255, 173, 180, 182, 255, 132, \n\t155, 159, 161, 175, 128, 163, 165, 128, \n\t134, 136, 152, 155, 161, 163, 164, 166, \n\t170, 144, 150, 132, 138, 145, 146, 151, \n\t166, 169, 139, 168, 160, 128, 129, 132, \n\t135, 133, 134, 160, 255, 192, 255, 144, \n\t145, 150, 155, 157, 158, 141, 144, 129, \n\t136, 145, 151, 152, 161, 162, 163, 164, \n\t255, 129, 188, 190, 130, 131, 191, 255, \n\t141, 151, 129, 132, 133, 134, 137, 138, \n\t142, 161, 162, 163, 164, 255, 131, 188, \n\t129, 130, 190, 255, 145, 181, 129, 130, \n\t131, 134, 135, 136, 137, 138, 139, 141, \n\t142, 175, 176, 177, 178, 255, 134, 138, \n\t141, 129, 136, 142, 161, 162, 163, 164, \n\t255, 129, 188, 130, 131, 190, 191, 128, \n\t141, 129, 132, 135, 136, 139, 140, 150, \n\t151, 162, 163, 130, 190, 191, 128, 141, \n\t151, 129, 130, 134, 136, 138, 140, 128, \n\t129, 131, 190, 255, 133, 137, 129, 132, \n\t142, 148, 151, 161, 164, 255, 129, 188, \n\t190, 191, 130, 131, 130, 134, 128, 132, \n\t135, 136, 138, 139, 140, 141, 149, 150, \n\t162, 163, 129, 190, 130, 131, 191, 255, \n\t133, 137, 141, 151, 129, 132, 142, 161, \n\t162, 163, 164, 255, 138, 143, 150, 159, \n\t144, 145, 146, 148, 152, 158, 178, 179, \n\t177, 179, 180, 186, 135, 142, 177, 179, \n\t180, 185, 187, 188, 136, 141, 181, 183, \n\t185, 152, 153, 190, 191, 191, 177, 190, \n\t128, 132, 134, 135, 141, 151, 153, 188, \n\t134, 128, 129, 130, 141, 156, 157, 158, \n\t159, 160, 162, 164, 168, 169, 170, 172, \n\t173, 174, 175, 176, 179, 183, 177, 173, \n\t183, 185, 186, 187, 188, 189, 190, 150, \n\t151, 152, 153, 158, 160, 177, 180, 130, \n\t132, 141, 157, 133, 134, 157, 159, 146, \n\t148, 178, 180, 146, 147, 178, 179, 182, \n\t180, 189, 190, 255, 134, 157, 137, 147, \n\t148, 255, 139, 141, 169, 133, 134, 178, \n\t160, 162, 163, 166, 167, 168, 169, 171, \n\t176, 184, 185, 187, 155, 151, 152, 153, \n\t154, 150, 160, 162, 191, 149, 151, 152, \n\t158, 165, 172, 173, 178, 179, 188, 176, \n\t190, 132, 181, 187, 128, 131, 180, 188, \n\t189, 255, 130, 133, 170, 171, 179, 180, \n\t255, 130, 161, 170, 128, 129, 162, 165, \n\t166, 167, 168, 173, 167, 173, 166, 169, \n\t170, 174, 175, 177, 178, 179, 164, 171, \n\t172, 179, 180, 181, 182, 183, 161, 173, \n\t180, 144, 146, 148, 168, 178, 179, 184, \n\t185, 128, 181, 187, 191, 128, 131, 179, \n\t181, 183, 140, 141, 144, 176, 175, 177, \n\t191, 160, 191, 128, 130, 170, 175, 153, \n\t154, 153, 154, 155, 160, 162, 163, 164, \n\t165, 166, 167, 168, 169, 170, 171, 175, \n\t175, 178, 180, 189, 158, 159, 176, 177, \n\t130, 134, 139, 167, 163, 164, 165, 166, \n\t132, 133, 134, 159, 160, 177, 178, 255, \n\t166, 173, 135, 145, 146, 147, 131, 179, \n\t188, 128, 130, 180, 181, 182, 185, 186, \n\t255, 165, 129, 255, 169, 174, 175, 176, \n\t177, 178, 179, 180, 181, 182, 131, 140, \n\t141, 188, 176, 178, 180, 183, 184, 190, \n\t191, 129, 171, 181, 182, 172, 173, 174, \n\t175, 165, 168, 172, 173, 163, 170, 172, \n\t184, 190, 158, 128, 143, 160, 175, 144, \n\t145, 150, 155, 157, 158, 159, 135, 139, \n\t141, 168, 171, 189, 160, 182, 186, 191, \n\t129, 131, 133, 134, 140, 143, 184, 186, \n\t165, 166, 128, 129, 130, 132, 133, 134, \n\t135, 136, 139, 140, 141, 144, 145, 146, \n\t147, 150, 151, 152, 153, 154, 156, 176, \n\t178, 129, 128, 130, 184, 255, 135, 190, \n\t130, 131, 175, 176, 178, 183, 184, 187, \n\t255, 172, 128, 130, 167, 180, 179, 130, \n\t128, 129, 179, 181, 182, 190, 191, 255, \n\t129, 137, 138, 140, 141, 255, 180, 190, \n\t172, 174, 175, 177, 178, 181, 182, 183, \n\t159, 160, 162, 163, 170, 188, 190, 191, \n\t128, 129, 130, 131, 128, 151, 129, 132, \n\t135, 136, 139, 141, 162, 163, 166, 172, \n\t176, 180, 181, 183, 184, 191, 133, 128, \n\t129, 130, 134, 176, 185, 189, 177, 178, \n\t179, 186, 187, 190, 191, 255, 129, 132, \n\t255, 175, 190, 176, 177, 178, 181, 184, \n\t187, 188, 255, 129, 155, 158, 255, 189, \n\t176, 178, 179, 186, 187, 190, 191, 255, \n\t129, 255, 172, 182, 171, 173, 174, 175, \n\t176, 183, 166, 157, 159, 160, 161, 162, \n\t171, 175, 190, 176, 182, 184, 191, 169, \n\t177, 180, 146, 167, 170, 182, 171, 172, \n\t189, 190, 176, 180, 176, 182, 143, 146, \n\t178, 157, 158, 133, 134, 137, 168, 169, \n\t170, 166, 173, 165, 169, 174, 178, 187, \n\t255, 131, 132, 140, 169, 174, 255, 130, \n\t132, 128, 182, 187, 255, 173, 180, 182, \n\t255, 132, 155, 159, 161, 175, 128, 163, \n\t165, 128, 134, 136, 152, 155, 161, 163, \n\t164, 166, 170, 144, 150, 132, 138, 143, \n\t187, 191, 160, 128, 129, 132, 135, 133, \n\t134, 160, 255, 192, 255, 185, 128, 191, \n\t128, 137, 138, 141, 142, 191, 128, 191, \n\t165, 177, 178, 179, 180, 181, 182, 184, \n\t185, 186, 187, 188, 189, 191, 128, 175, \n\t176, 190, 192, 255, 128, 159, 160, 188, \n\t189, 191, 128, 156, 184, 129, 255, 148, \n\t176, 140, 168, 132, 160, 188, 152, 180, \n\t144, 172, 136, 164, 192, 255, 129, 130, \n\t131, 132, 133, 134, 136, 137, 138, 139, \n\t140, 141, 143, 144, 145, 146, 147, 148, \n\t150, 151, 152, 153, 154, 155, 157, 158, \n\t159, 160, 161, 162, 164, 165, 166, 167, \n\t168, 169, 171, 172, 173, 174, 175, 176, \n\t178, 179, 180, 181, 182, 183, 185, 186, \n\t187, 188, 189, 190, 128, 191, 129, 130, \n\t131, 132, 133, 134, 136, 137, 138, 139, \n\t140, 141, 143, 144, 145, 146, 147, 148, \n\t150, 151, 152, 153, 154, 155, 157, 158, \n\t159, 160, 161, 162, 164, 165, 166, 167, \n\t168, 169, 171, 172, 173, 174, 175, 176, \n\t178, 179, 180, 181, 182, 183, 185, 186, \n\t187, 188, 189, 190, 128, 191, 129, 130, \n\t131, 132, 133, 134, 136, 137, 138, 139, \n\t140, 141, 143, 144, 145, 146, 147, 148, \n\t150, 151, 152, 153, 154, 155, 157, 158, \n\t159, 160, 191, 128, 156, 161, 190, 192, \n\t255, 136, 164, 175, 176, 255, 135, 138, \n\t139, 187, 188, 191, 192, 255, 0, 127, \n\t192, 255, 187, 191, 128, 190, 191, 128, \n\t190, 188, 128, 175, 176, 189, 190, 191, \n\t145, 155, 157, 159, 128, 191, 130, 135, \n\t128, 191, 189, 128, 191, 128, 129, 130, \n\t131, 132, 191, 178, 128, 191, 128, 159, \n\t160, 163, 164, 191, 133, 128, 191, 128, \n\t178, 179, 186, 187, 191, 135, 142, 143, \n\t145, 146, 149, 150, 153, 154, 155, 164, \n\t128, 191, 128, 165, 166, 191, 128, 255, \n\t176, 255, 131, 137, 191, 145, 189, 135, \n\t129, 130, 132, 133, 144, 154, 176, 139, \n\t159, 150, 156, 159, 164, 167, 168, 170, \n\t173, 145, 176, 255, 139, 255, 166, 176, \n\t171, 179, 160, 161, 163, 164, 165, 167, \n\t169, 171, 173, 174, 175, 176, 177, 179, \n\t180, 181, 182, 183, 184, 185, 186, 187, \n\t188, 189, 190, 191, 166, 170, 172, 178, \n\t150, 153, 155, 163, 165, 167, 169, 173, \n\t153, 155, 148, 161, 163, 255, 189, 132, \n\t185, 144, 152, 161, 164, 255, 188, 129, \n\t131, 190, 255, 133, 134, 137, 138, 142, \n\t150, 152, 161, 164, 255, 131, 134, 137, \n\t138, 142, 144, 146, 175, 178, 180, 182, \n\t255, 134, 138, 142, 161, 164, 255, 188, \n\t129, 131, 190, 191, 128, 132, 135, 136, \n\t139, 141, 150, 151, 162, 163, 130, 190, \n\t191, 151, 128, 130, 134, 136, 138, 141, \n\t128, 131, 190, 255, 133, 137, 142, 148, \n\t151, 161, 164, 255, 128, 132, 134, 136, \n\t138, 141, 149, 150, 162, 163, 129, 131, \n\t190, 255, 133, 137, 142, 150, 152, 161, \n\t164, 255, 130, 131, 138, 150, 143, 148, \n\t152, 159, 178, 179, 177, 179, 186, 135, \n\t142, 177, 179, 185, 187, 188, 136, 141, \n\t181, 183, 185, 152, 153, 190, 191, 177, \n\t191, 128, 132, 134, 135, 141, 151, 153, \n\t188, 134, 128, 129, 130, 141, 156, 157, \n\t158, 159, 160, 162, 164, 168, 169, 170, \n\t172, 173, 174, 175, 176, 179, 183, 173, \n\t183, 185, 190, 150, 153, 158, 160, 177, \n\t180, 130, 141, 157, 132, 134, 157, 159, \n\t146, 148, 178, 180, 146, 147, 178, 179, \n\t180, 255, 148, 156, 158, 255, 139, 141, \n\t169, 133, 134, 160, 171, 176, 187, 151, \n\t155, 160, 162, 191, 149, 158, 165, 188, \n\t176, 190, 128, 132, 180, 255, 133, 170, \n\t180, 255, 128, 130, 161, 173, 166, 179, \n\t164, 183, 173, 144, 146, 148, 168, 178, \n\t180, 184, 185, 128, 181, 187, 191, 128, \n\t131, 179, 181, 183, 140, 141, 128, 131, \n\t157, 179, 181, 183, 144, 176, 164, 175, \n\t177, 191, 160, 191, 128, 130, 170, 175, \n\t153, 154, 153, 154, 155, 160, 162, 163, \n\t164, 165, 166, 167, 168, 169, 170, 171, \n\t175, 175, 178, 180, 189, 158, 159, 176, \n\t177, 130, 134, 139, 163, 167, 128, 129, \n\t180, 255, 134, 159, 178, 255, 166, 173, \n\t135, 147, 128, 131, 179, 255, 129, 164, \n\t166, 255, 169, 182, 131, 188, 140, 141, \n\t176, 178, 180, 183, 184, 190, 191, 129, \n\t171, 175, 181, 182, 163, 170, 172, 173, \n\t172, 184, 190, 158, 128, 143, 160, 175, \n\t144, 145, 150, 155, 157, 158, 159, 135, \n\t139, 141, 168, 171, 189, 160, 182, 186, \n\t191, 129, 131, 133, 134, 140, 143, 184, \n\t186, 165, 166, 128, 129, 130, 132, 133, \n\t134, 135, 136, 139, 140, 141, 144, 145, \n\t146, 147, 150, 151, 152, 153, 154, 156, \n\t176, 178, 128, 130, 184, 255, 135, 190, \n\t131, 175, 187, 255, 128, 130, 167, 180, \n\t179, 128, 130, 179, 255, 129, 137, 141, \n\t255, 190, 172, 183, 159, 170, 188, 128, \n\t131, 190, 191, 151, 128, 132, 135, 136, \n\t139, 141, 162, 163, 166, 172, 176, 180, \n\t181, 191, 128, 134, 176, 255, 132, 255, \n\t175, 181, 184, 255, 129, 155, 158, 255, \n\t129, 255, 171, 183, 157, 171, 175, 182, \n\t184, 191, 146, 167, 169, 182, 171, 172, \n\t189, 190, 176, 180, 176, 182, 145, 190, \n\t143, 146, 178, 157, 158, 133, 134, 137, \n\t168, 169, 170, 165, 169, 173, 178, 187, \n\t255, 131, 132, 140, 169, 174, 255, 130, \n\t132, 128, 182, 187, 255, 173, 180, 182, \n\t255, 132, 155, 159, 161, 175, 128, 163, \n\t165, 128, 134, 136, 152, 155, 161, 163, \n\t164, 166, 170, 144, 150, 132, 138, 145, \n\t146, 151, 166, 169, 128, 255, 176, 255, \n\t131, 137, 191, 145, 189, 135, 129, 130, \n\t132, 133, 144, 154, 176, 139, 159, 150, \n\t156, 159, 164, 167, 168, 170, 173, 145, \n\t176, 255, 139, 255, 166, 176, 171, 179, \n\t160, 161, 163, 164, 165, 166, 167, 169, \n\t171, 172, 173, 174, 175, 176, 177, 178, \n\t179, 180, 181, 182, 183, 184, 185, 186, \n\t187, 188, 189, 190, 191, 168, 170, 150, \n\t153, 155, 163, 165, 167, 169, 173, 153, \n\t155, 148, 161, 163, 255, 131, 187, 189, \n\t132, 185, 190, 255, 141, 144, 129, 136, \n\t145, 151, 152, 161, 162, 163, 164, 255, \n\t129, 188, 190, 130, 131, 191, 255, 141, \n\t151, 129, 132, 133, 134, 137, 138, 142, \n\t161, 162, 163, 164, 255, 131, 188, 129, \n\t130, 190, 255, 145, 181, 129, 130, 131, \n\t134, 135, 136, 137, 138, 139, 141, 142, \n\t175, 176, 177, 178, 255, 134, 138, 141, \n\t129, 136, 142, 161, 162, 163, 164, 255, \n\t129, 188, 130, 131, 190, 191, 128, 141, \n\t129, 132, 135, 136, 139, 140, 150, 151, \n\t162, 163, 130, 190, 191, 128, 141, 151, \n\t129, 130, 134, 136, 138, 140, 128, 129, \n\t131, 190, 255, 133, 137, 129, 132, 142, \n\t148, 151, 161, 164, 255, 129, 188, 190, \n\t191, 130, 131, 130, 134, 128, 132, 135, \n\t136, 138, 139, 140, 141, 149, 150, 162, \n\t163, 129, 190, 130, 131, 191, 255, 133, \n\t137, 141, 151, 129, 132, 142, 161, 162, \n\t163, 164, 255, 138, 143, 150, 159, 144, \n\t145, 146, 148, 152, 158, 178, 179, 177, \n\t179, 180, 186, 135, 142, 177, 179, 180, \n\t185, 187, 188, 136, 141, 181, 183, 185, \n\t152, 153, 190, 191, 191, 177, 190, 128, \n\t132, 134, 135, 141, 151, 153, 188, 134, \n\t128, 129, 130, 141, 156, 157, 158, 159, \n\t160, 162, 164, 168, 169, 170, 172, 173, \n\t174, 175, 176, 179, 183, 177, 173, 183, \n\t185, 186, 187, 188, 189, 190, 150, 151, \n\t152, 153, 158, 160, 177, 180, 130, 132, \n\t141, 157, 133, 134, 157, 159, 146, 148, \n\t178, 180, 146, 147, 178, 179, 182, 180, \n\t189, 190, 255, 134, 157, 137, 147, 148, \n\t255, 139, 141, 169, 133, 134, 178, 160, \n\t162, 163, 166, 167, 168, 169, 171, 176, \n\t184, 185, 187, 155, 151, 152, 153, 154, \n\t150, 160, 162, 191, 149, 151, 152, 158, \n\t165, 172, 173, 178, 179, 188, 176, 190, \n\t132, 181, 187, 128, 131, 180, 188, 189, \n\t255, 130, 133, 170, 171, 179, 180, 255, \n\t130, 161, 170, 128, 129, 162, 165, 166, \n\t167, 168, 173, 167, 173, 166, 169, 170, \n\t174, 175, 177, 178, 179, 164, 171, 172, \n\t179, 180, 181, 182, 183, 161, 173, 180, \n\t144, 146, 148, 168, 178, 179, 184, 185, \n\t128, 181, 187, 191, 128, 131, 179, 181, \n\t183, 140, 141, 144, 176, 175, 177, 191, \n\t160, 191, 128, 130, 170, 175, 153, 154, \n\t153, 154, 155, 160, 162, 163, 164, 165, \n\t166, 167, 168, 169, 170, 171, 175, 175, \n\t178, 180, 189, 158, 159, 176, 177, 130, \n\t134, 139, 167, 163, 164, 165, 166, 132, \n\t133, 134, 159, 160, 177, 178, 255, 166, \n\t173, 135, 145, 146, 147, 131, 179, 188, \n\t128, 130, 180, 181, 182, 185, 186, 255, \n\t165, 129, 255, 169, 174, 175, 176, 177, \n\t178, 179, 180, 181, 182, 131, 140, 141, \n\t188, 176, 178, 180, 183, 184, 190, 191, \n\t129, 171, 181, 182, 172, 173, 174, 175, \n\t165, 168, 172, 173, 163, 170, 172, 184, \n\t190, 158, 128, 143, 160, 175, 144, 145, \n\t150, 155, 157, 158, 159, 135, 139, 141, \n\t168, 171, 189, 160, 182, 186, 191, 129, \n\t131, 133, 134, 140, 143, 184, 186, 165, \n\t166, 128, 129, 130, 132, 133, 134, 135, \n\t136, 139, 140, 141, 144, 145, 146, 147, \n\t150, 151, 152, 153, 154, 156, 176, 178, \n\t129, 128, 130, 184, 255, 135, 190, 130, \n\t131, 175, 176, 178, 183, 184, 187, 255, \n\t172, 128, 130, 167, 180, 179, 130, 128, \n\t129, 179, 181, 182, 190, 191, 255, 129, \n\t137, 138, 140, 141, 255, 180, 190, 172, \n\t174, 175, 177, 178, 181, 182, 183, 159, \n\t160, 162, 163, 170, 188, 190, 191, 128, \n\t129, 130, 131, 128, 151, 129, 132, 135, \n\t136, 139, 141, 162, 163, 166, 172, 176, \n\t180, 181, 183, 184, 191, 133, 128, 129, \n\t130, 134, 176, 185, 189, 177, 178, 179, \n\t186, 187, 190, 191, 255, 129, 132, 255, \n\t175, 190, 176, 177, 178, 181, 184, 187, \n\t188, 255, 129, 155, 158, 255, 189, 176, \n\t178, 179, 186, 187, 190, 191, 255, 129, \n\t255, 172, 182, 171, 173, 174, 175, 176, \n\t183, 166, 157, 159, 160, 161, 162, 171, \n\t175, 190, 176, 182, 184, 191, 169, 177, \n\t180, 146, 167, 170, 182, 171, 172, 189, \n\t190, 176, 180, 176, 182, 143, 146, 178, \n\t157, 158, 133, 134, 137, 168, 169, 170, \n\t166, 173, 165, 169, 174, 178, 187, 255, \n\t131, 132, 140, 169, 174, 255, 130, 132, \n\t128, 182, 187, 255, 173, 180, 182, 255, \n\t132, 155, 159, 161, 175, 128, 163, 165, \n\t128, 134, 136, 152, 155, 161, 163, 164, \n\t166, 170, 144, 150, 132, 138, 143, 187, \n\t191, 160, 128, 129, 132, 135, 133, 134, \n\t160, 255, 192, 255, 139, 168, 160, 128, \n\t129, 132, 135, 133, 134, 160, 255, 192, \n\t255, 144, 145, 150, 155, 157, 158, 144, \n\t145, 150, 155, 157, 158, 159, 135, 166, \n\t191, 133, 128, 191, 128, 130, 131, 132, \n\t133, 137, 138, 139, 140, 191, 174, 188, \n\t128, 129, 130, 131, 132, 133, 134, 144, \n\t145, 165, 166, 169, 170, 175, 176, 184, \n\t185, 191, 128, 132, 170, 129, 135, 136, \n\t191, 181, 186, 128, 191, 144, 128, 148, \n\t149, 150, 151, 191, 128, 132, 133, 135, \n\t136, 138, 139, 143, 144, 191, 163, 128, \n\t179, 180, 182, 183, 191, 128, 129, 191, \n\t166, 176, 191, 128, 151, 152, 158, 159, \n\t178, 179, 185, 186, 187, 188, 190, 128, \n\t191, 160, 128, 191, 128, 130, 131, 135, \n\t191, 129, 134, 136, 190, 128, 159, 160, \n\t191, 128, 175, 176, 255, 10, 13, 127, \n\t194, 216, 219, 220, 224, 225, 226, 234, \n\t235, 236, 237, 239, 240, 243, 0, 31, \n\t128, 191, 192, 223, 227, 238, 241, 247, \n\t248, 255, 204, 205, 210, 214, 215, 216, \n\t217, 219, 220, 221, 222, 223, 224, 225, \n\t226, 227, 234, 239, 240, 243, 204, 205, \n\t210, 214, 215, 216, 217, 219, 220, 221, \n\t222, 223, 224, 225, 226, 227, 234, 239, \n\t240, 243, 204, 205, 210, 214, 215, 216, \n\t217, 219, 220, 221, 222, 223, 224, 225, \n\t226, 227, 234, 239, 240, 243, 194, 216, \n\t219, 220, 224, 225, 226, 234, 235, 236, \n\t237, 239, 240, 243, 32, 126, 192, 223, \n\t227, 238, 241, 247, 204, 205, 210, 214, \n\t215, 216, 217, 219, 220, 221, 222, 223, \n\t224, 225, 226, 227, 234, 239, 240, 243, \n\t204, 205, 210, 214, 215, 216, 217, 219, \n\t220, 221, 222, 223, 224, 225, 226, 227, \n\t234, 239, 240, 243, 204, 205, 210, 214, \n\t215, 216, 217, 219, 220, 221, 222, 223, \n\t224, 225, 226, 227, 234, 239, 240, 243, \n\t204, 205, 210, 214, 215, 216, 217, 219, \n\t220, 221, 222, 223, 224, 225, 226, 227, \n\t234, 235, 236, 237, 239, 240, 243, 204, \n\t205, 210, 214, 215, 216, 217, 219, 220, \n\t221, 222, 223, 224, 225, 226, 227, 234, \n\t237, 239, 240, 243, 204, 205, 210, 214, \n\t215, 216, 217, 219, 220, 221, 222, 223, \n\t224, 225, 226, 227, 234, 237, 239, 240, \n\t243, 204, 205, 210, 214, 215, 216, 217, \n\t219, 220, 221, 222, 223, 224, 225, 226, \n\t227, 234, 237, 239, 240, 243, 204, 205, \n\t210, 214, 215, 216, 217, 219, 220, 221, \n\t222, 223, 224, 225, 226, 227, 234, 239, \n\t240, 243, 204, 205, 210, 214, 215, 216, \n\t217, 219, 220, 221, 222, 223, 224, 225, \n\t226, 227, 234, 235, 236, 237, 239, 240, \n\t243, 204, 205, 210, 214, 215, 216, 217, \n\t219, 220, 221, 222, 223, 224, 225, 226, \n\t227, 234, 239, 240, 243, 204, 205, 210, \n\t214, 215, 216, 217, 219, 220, 221, 222, \n\t223, 224, 225, 226, 227, 234, 239, 240, \n\t243, 204, 205, 210, 214, 215, 216, 217, \n\t219, 220, 221, 222, 223, 224, 225, 226, \n\t227, 234, 239, 240, 243, 204, 205, 210, \n\t214, 215, 216, 217, 219, 220, 221, 222, \n\t223, 224, 225, 226, 227, 234, 237, 239, \n\t240, 243, 204, 205, 210, 214, 215, 216, \n\t217, 219, 220, 221, 222, 223, 224, 225, \n\t226, 227, 234, 237, 239, 240, 243, 204, \n\t205, 210, 214, 215, 216, 217, 219, 220, \n\t221, 222, 223, 224, 225, 226, 227, 234, \n\t237, 239, 240, 243, 204, 205, 210, 214, \n\t215, 216, 217, 219, 220, 221, 222, 223, \n\t224, 225, 226, 227, 234, 239, 240, 243, \n\t204, 205, 210, 214, 215, 216, 217, 219, \n\t220, 221, 222, 223, 224, 225, 226, 227, \n\t234, 239, 240, 243, 204, 205, 210, 214, \n\t215, 216, 217, 219, 220, 221, 222, 223, \n\t224, 225, 226, 227, 234, 239, 240, 243, \n\t204, 205, 210, 214, 215, 216, 217, 219, \n\t220, 221, 222, 223, 224, 225, 226, 227, \n\t234, 239, 240, 243, 204, 205, 210, 214, \n\t215, 216, 217, 219, 220, 221, 222, 223, \n\t224, 225, 226, 227, 234, 239, 240, 243, \n\t204, 205, 210, 214, 215, 216, 217, 219, \n\t220, 221, 222, 223, 224, 225, 226, 227, \n\t234, 239, 240, 243, 204, 205, 210, 214, \n\t215, 216, 217, 219, 220, 221, 222, 223, \n\t224, 225, 226, 227, 234, 239, 240, 243, \n\t204, 205, 210, 214, 215, 216, 217, 219, \n\t220, 221, 222, 223, 224, 225, 226, 227, \n\t234, 239, 240, 243, 204, 205, 210, 214, \n\t215, 216, 217, 219, 220, 221, 222, 223, \n\t224, 225, 226, 227, 234, 239, 240, 243, \n\t204, 205, 210, 214, 215, 216, 217, 219, \n\t220, 221, 222, 223, 224, 225, 226, 227, \n\t234, 239, 240, 243, \n}\n\nvar _graphclust_single_lengths []byte = []byte{\n\t0, 1, 0, 0, 0, 1, 1, 0, \n\t1, 0, 1, 0, 0, 0, 26, 0, \n\t0, 0, 1, 1, 1, 0, 0, 2, \n\t1, 0, 1, 1, 0, 2, 0, 0, \n\t2, 0, 2, 1, 0, 1, 0, 3, \n\t0, 0, 1, 21, 0, 0, 3, 0, \n\t0, 0, 0, 0, 0, 1, 0, 0, \n\t3, 0, 0, 0, 0, 0, 0, 1, \n\t0, 5, 2, 6, 0, 1, 0, 1, \n\t0, 2, 0, 0, 15, 0, 0, 0, \n\t3, 0, 0, 0, 0, 0, 0, 0, \n\t2, 1, 1, 0, 3, 1, 0, 7, \n\t5, 1, 1, 0, 1, 0, 23, 0, \n\t0, 0, 0, 1, 0, 0, 1, 0, \n\t1, 1, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 4, 0, 0, \n\t0, 0, 1, 0, 6, 0, 0, 0, \n\t0, 0, 1, 3, 0, 0, 0, 3, \n\t0, 0, 0, 0, 1, 1, 0, 1, \n\t0, 1, 0, 0, 0, 29, 0, 0, \n\t0, 3, 2, 3, 2, 2, 2, 3, \n\t2, 2, 3, 3, 1, 2, 4, 2, \n\t2, 4, 4, 2, 0, 2, 0, 3, \n\t1, 0, 1, 21, 1, 0, 4, 0, \n\t0, 0, 1, 2, 0, 1, 1, 1, \n\t4, 0, 3, 1, 3, 2, 0, 3, \n\t0, 5, 2, 0, 0, 1, 0, 2, \n\t0, 0, 15, 0, 0, 0, 4, 0, \n\t0, 0, 3, 1, 0, 4, 1, 4, \n\t4, 3, 1, 0, 7, 5, 1, 1, \n\t0, 1, 0, 23, 1, 0, 1, 1, \n\t1, 1, 0, 2, 1, 3, 2, 0, \n\t1, 3, 1, 2, 0, 1, 0, 2, \n\t1, 2, 3, 4, 0, 0, 0, 1, \n\t0, 6, 2, 0, 0, 0, 0, 1, \n\t3, 0, 0, 0, 1, 0, 1, 4, \n\t0, 0, 0, 1, 1, 1, 4, 0, \n\t0, 0, 6, 0, 1, 1, 0, 0, \n\t0, 1, 1, 0, 1, 0, 1, 0, \n\t0, 0, 26, 0, 0, 0, 1, 1, \n\t1, 0, 0, 2, 1, 0, 1, 1, \n\t0, 2, 0, 0, 2, 0, 2, 1, \n\t0, 1, 0, 3, 0, 0, 1, 21, \n\t0, 0, 3, 0, 0, 0, 0, 0, \n\t0, 1, 0, 0, 3, 0, 0, 0, \n\t0, 0, 0, 1, 0, 5, 2, 6, \n\t0, 1, 0, 1, 0, 2, 0, 0, \n\t15, 0, 0, 0, 3, 0, 0, 0, \n\t0, 0, 0, 0, 2, 1, 1, 0, \n\t3, 1, 0, 7, 5, 1, 1, 0, \n\t1, 0, 23, 0, 0, 0, 0, 1, \n\t0, 0, 1, 0, 1, 1, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 4, 0, 0, 0, 0, 1, 0, \n\t6, 0, 0, 0, 0, 0, 1, 3, \n\t0, 0, 0, 3, 0, 0, 0, 0, \n\t1, 1, 0, 1, 0, 1, 0, 0, \n\t0, 29, 0, 0, 0, 3, 2, 3, \n\t2, 2, 2, 3, 2, 2, 3, 3, \n\t1, 2, 4, 2, 2, 4, 4, 2, \n\t0, 2, 0, 3, 1, 0, 1, 21, \n\t1, 0, 4, 0, 0, 0, 1, 2, \n\t0, 1, 1, 1, 4, 0, 3, 1, \n\t3, 2, 0, 3, 0, 5, 2, 0, \n\t0, 1, 0, 2, 0, 0, 15, 0, \n\t0, 0, 4, 0, 0, 0, 3, 1, \n\t0, 4, 1, 4, 4, 3, 1, 0, \n\t7, 5, 1, 1, 0, 1, 0, 23, \n\t1, 0, 1, 1, 1, 1, 0, 2, \n\t1, 3, 2, 0, 1, 3, 1, 2, \n\t0, 1, 0, 2, 1, 2, 3, 4, \n\t0, 0, 0, 1, 0, 6, 2, 0, \n\t0, 0, 0, 1, 3, 0, 0, 0, \n\t1, 0, 1, 4, 0, 0, 0, 1, \n\t1, 1, 4, 0, 0, 0, 6, 0, \n\t0, 0, 1, 1, 2, 1, 1, 5, \n\t0, 24, 0, 24, 0, 0, 23, 0, \n\t0, 1, 0, 2, 0, 0, 0, 28, \n\t0, 3, 23, 2, 0, 2, 2, 3, \n\t2, 2, 2, 0, 54, 54, 27, 1, \n\t0, 5, 2, 0, 1, 1, 0, 0, \n\t14, 0, 3, 2, 2, 3, 2, 2, \n\t2, 54, 54, 27, 1, 0, 2, 0, \n\t1, 4, 2, 1, 0, 1, 0, 1, \n\t0, 11, 0, 7, 1, 0, 1, 0, \n\t2, 3, 2, 1, 0, 1, 1, 3, \n\t0, 1, 3, 0, 1, 1, 2, 1, \n\t1, 5, 0, 0, 0, 0, 1, 1, \n\t0, 1, 0, 1, 0, 0, 0, 26, \n\t0, 0, 0, 1, 1, 1, 0, 0, \n\t2, 1, 0, 1, 1, 0, 2, 0, \n\t0, 2, 0, 2, 1, 0, 1, 0, \n\t3, 0, 0, 1, 21, 0, 0, 3, \n\t0, 0, 0, 0, 0, 0, 1, 0, \n\t0, 3, 0, 0, 0, 0, 0, 0, \n\t1, 0, 5, 2, 6, 0, 1, 0, \n\t1, 0, 2, 0, 0, 15, 0, 0, \n\t0, 3, 0, 0, 0, 0, 0, 0, \n\t0, 2, 1, 1, 0, 3, 1, 0, \n\t7, 5, 1, 1, 0, 1, 0, 23, \n\t0, 0, 0, 0, 1, 0, 0, 1, \n\t0, 1, 1, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 4, 0, \n\t0, 0, 0, 1, 0, 6, 0, 0, \n\t0, 0, 0, 1, 3, 0, 0, 0, \n\t3, 0, 0, 0, 0, 1, 1, 0, \n\t1, 0, 1, 0, 0, 0, 29, 0, \n\t0, 0, 3, 2, 3, 2, 2, 2, \n\t3, 2, 2, 3, 3, 1, 2, 4, \n\t2, 2, 4, 4, 2, 0, 2, 0, \n\t3, 1, 0, 1, 21, 1, 0, 4, \n\t0, 0, 0, 1, 2, 0, 1, 1, \n\t1, 4, 0, 3, 1, 3, 2, 0, \n\t3, 0, 5, 2, 0, 0, 1, 0, \n\t2, 0, 0, 15, 0, 0, 0, 4, \n\t0, 0, 0, 3, 1, 0, 4, 1, \n\t4, 4, 3, 1, 0, 7, 5, 1, \n\t1, 0, 1, 0, 23, 1, 0, 1, \n\t1, 1, 1, 0, 2, 1, 3, 2, \n\t0, 1, 3, 1, 2, 0, 1, 0, \n\t2, 1, 2, 3, 4, 0, 0, 0, \n\t1, 0, 6, 2, 0, 0, 0, 0, \n\t1, 3, 0, 0, 0, 1, 0, 1, \n\t4, 0, 0, 0, 1, 1, 1, 4, \n\t0, 0, 0, 6, 24, 0, 24, 0, \n\t0, 23, 0, 0, 1, 0, 2, 0, \n\t0, 0, 28, 0, 3, 23, 2, 0, \n\t2, 2, 3, 2, 2, 2, 0, 54, \n\t54, 27, 1, 1, 5, 2, 0, 0, \n\t0, 1, 1, 0, 1, 0, 1, 0, \n\t0, 0, 26, 0, 0, 0, 1, 1, \n\t1, 0, 0, 2, 1, 0, 1, 1, \n\t0, 2, 0, 0, 2, 0, 2, 1, \n\t0, 1, 0, 3, 0, 0, 1, 21, \n\t0, 0, 3, 0, 0, 0, 0, 0, \n\t0, 1, 0, 0, 3, 0, 0, 0, \n\t0, 0, 0, 1, 0, 5, 2, 0, \n\t0, 1, 0, 2, 0, 0, 15, 0, \n\t0, 0, 3, 0, 0, 0, 0, 0, \n\t0, 0, 2, 1, 1, 0, 3, 1, \n\t0, 6, 5, 1, 1, 0, 1, 0, \n\t23, 0, 0, 0, 0, 1, 0, 0, \n\t1, 0, 1, 1, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 4, \n\t0, 0, 0, 0, 1, 0, 6, 0, \n\t0, 0, 0, 0, 1, 3, 0, 0, \n\t0, 1, 4, 0, 0, 0, 6, 1, \n\t7, 3, 0, 0, 0, 0, 1, 1, \n\t0, 1, 0, 1, 0, 0, 0, 29, \n\t0, 0, 0, 3, 2, 3, 2, 2, \n\t2, 3, 2, 2, 3, 3, 1, 2, \n\t4, 2, 2, 4, 4, 2, 0, 2, \n\t0, 3, 1, 0, 1, 21, 1, 0, \n\t4, 0, 0, 0, 1, 2, 0, 1, \n\t1, 1, 4, 0, 3, 1, 3, 2, \n\t0, 3, 0, 5, 2, 0, 0, 1, \n\t0, 2, 0, 0, 15, 0, 0, 0, \n\t4, 0, 0, 0, 3, 1, 0, 4, \n\t1, 4, 4, 3, 1, 0, 7, 5, \n\t1, 1, 0, 1, 0, 23, 1, 0, \n\t1, 1, 1, 1, 0, 2, 1, 3, \n\t2, 0, 1, 3, 1, 2, 0, 1, \n\t0, 2, 1, 2, 3, 4, 0, 0, \n\t0, 1, 0, 6, 2, 0, 0, 0, \n\t0, 1, 3, 0, 0, 0, 1, 0, \n\t1, 4, 0, 0, 0, 1, 1, 0, \n\t1, 0, 0, 0, 1, 1, 0, 1, \n\t0, 1, 0, 0, 0, 29, 0, 0, \n\t0, 3, 0, 0, 0, 1, 1, 0, \n\t1, 0, 1, 0, 0, 0, 26, 0, \n\t0, 0, 1, 1, 1, 0, 0, 2, \n\t1, 0, 1, 1, 0, 2, 0, 0, \n\t2, 0, 2, 1, 0, 1, 0, 3, \n\t0, 0, 1, 21, 0, 0, 3, 0, \n\t0, 0, 0, 0, 0, 1, 0, 0, \n\t3, 0, 0, 0, 0, 0, 0, 1, \n\t0, 5, 2, 6, 0, 1, 0, 1, \n\t0, 2, 0, 0, 15, 0, 0, 0, \n\t3, 0, 0, 0, 0, 0, 0, 0, \n\t2, 1, 1, 0, 3, 1, 0, 7, \n\t5, 1, 1, 0, 1, 0, 23, 0, \n\t0, 0, 0, 1, 0, 0, 1, 0, \n\t1, 1, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 4, 0, 0, \n\t0, 0, 1, 0, 6, 0, 0, 0, \n\t0, 0, 1, 3, 0, 0, 0, 3, \n\t0, 1, 1, 1, 4, 0, 0, 0, \n\t6, 2, 3, 2, 2, 2, 3, 2, \n\t2, 3, 3, 1, 2, 4, 2, 2, \n\t4, 4, 2, 0, 2, 0, 3, 1, \n\t0, 1, 21, 1, 0, 4, 0, 0, \n\t0, 1, 2, 0, 1, 1, 1, 4, \n\t0, 3, 1, 3, 2, 0, 3, 0, \n\t5, 2, 0, 0, 1, 0, 2, 0, \n\t0, 15, 0, 0, 0, 4, 0, 0, \n\t0, 3, 1, 0, 4, 1, 4, 4, \n\t3, 1, 0, 7, 5, 1, 1, 0, \n\t1, 0, 23, 1, 0, 1, 1, 1, \n\t1, 0, 2, 1, 3, 2, 0, 1, \n\t3, 1, 2, 0, 1, 0, 2, 1, \n\t2, 3, 4, 0, 0, 0, 1, 0, \n\t6, 2, 0, 0, 0, 0, 1, 3, \n\t0, 0, 0, 1, 0, 1, 4, 0, \n\t0, 0, 1, 0, 0, 14, 0, 3, \n\t2, 2, 3, 2, 2, 2, 54, 54, \n\t29, 1, 0, 0, 0, 0, 2, 1, \n\t1, 4, 2, 1, 0, 1, 0, 1, \n\t0, 11, 0, 0, 0, 0, 1, 1, \n\t0, 1, 0, 1, 0, 0, 0, 26, \n\t0, 0, 0, 1, 1, 1, 0, 0, \n\t2, 1, 0, 1, 1, 0, 2, 0, \n\t0, 2, 0, 2, 1, 0, 1, 0, \n\t3, 0, 0, 1, 21, 0, 0, 3, \n\t0, 0, 0, 0, 0, 0, 1, 0, \n\t0, 3, 0, 0, 0, 0, 0, 0, \n\t1, 0, 5, 2, 6, 0, 1, 0, \n\t1, 0, 2, 0, 0, 15, 0, 0, \n\t0, 3, 0, 0, 0, 0, 0, 0, \n\t0, 2, 1, 1, 0, 3, 1, 0, \n\t7, 5, 1, 1, 0, 1, 0, 23, \n\t0, 0, 0, 0, 1, 0, 0, 1, \n\t0, 1, 1, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 4, 0, \n\t0, 0, 0, 1, 0, 6, 0, 0, \n\t0, 0, 0, 1, 3, 0, 0, 0, \n\t3, 0, 0, 0, 0, 1, 1, 0, \n\t1, 0, 1, 0, 0, 0, 29, 0, \n\t0, 0, 3, 2, 3, 2, 2, 2, \n\t3, 2, 2, 3, 3, 1, 2, 4, \n\t2, 2, 4, 4, 2, 0, 2, 0, \n\t3, 1, 0, 1, 21, 1, 0, 4, \n\t0, 0, 0, 1, 2, 0, 1, 1, \n\t1, 4, 0, 3, 1, 3, 2, 0, \n\t3, 0, 5, 2, 0, 0, 1, 0, \n\t2, 0, 0, 15, 0, 0, 0, 4, \n\t0, 0, 0, 3, 1, 0, 4, 1, \n\t4, 4, 3, 1, 0, 7, 5, 1, \n\t1, 0, 1, 0, 23, 1, 0, 1, \n\t1, 1, 1, 0, 2, 1, 3, 2, \n\t0, 1, 3, 1, 2, 0, 1, 0, \n\t2, 1, 2, 3, 4, 0, 0, 0, \n\t1, 0, 6, 2, 0, 0, 0, 0, \n\t1, 3, 0, 0, 0, 1, 0, 1, \n\t4, 0, 0, 0, 1, 1, 1, 4, \n\t0, 0, 0, 6, 7, 1, 0, 1, \n\t0, 2, 3, 2, 1, 0, 1, 1, \n\t3, 0, 1, 5, 0, 0, 17, 20, \n\t20, 20, 14, 20, 20, 20, 23, 21, \n\t21, 21, 20, 23, 20, 20, 20, 21, \n\t21, 21, 20, 20, 20, 20, 20, 20, \n\t20, 20, 20, 20, \n}\n\nvar _graphclust_range_lengths []byte = []byte{\n\t0, 0, 1, 1, 1, 1, 2, 1, \n\t1, 4, 1, 1, 1, 1, 2, 4, \n\t1, 2, 1, 2, 2, 5, 6, 2, \n\t2, 5, 1, 3, 2, 3, 5, 2, \n\t3, 1, 3, 1, 1, 2, 1, 2, \n\t1, 4, 0, 0, 2, 3, 1, 1, \n\t2, 2, 1, 2, 1, 1, 2, 1, \n\t2, 1, 2, 2, 2, 1, 1, 4, \n\t2, 0, 0, 0, 1, 0, 1, 0, \n\t1, 0, 1, 1, 0, 2, 1, 1, \n\t1, 2, 2, 1, 1, 2, 2, 1, \n\t1, 3, 2, 2, 0, 0, 2, 0, \n\t0, 0, 0, 1, 4, 1, 0, 2, \n\t1, 2, 2, 0, 2, 2, 1, 1, \n\t2, 6, 1, 1, 1, 1, 2, 2, \n\t1, 1, 1, 2, 2, 0, 1, 1, \n\t1, 1, 0, 1, 0, 3, 3, 1, \n\t2, 2, 2, 0, 5, 1, 1, 0, \n\t1, 1, 1, 1, 1, 2, 1, 1, \n\t4, 1, 1, 1, 1, 1, 4, 1, \n\t2, 2, 5, 2, 6, 2, 8, 4, \n\t2, 5, 0, 3, 2, 4, 1, 6, \n\t2, 4, 4, 1, 1, 2, 1, 2, \n\t1, 4, 0, 0, 4, 4, 1, 1, \n\t2, 2, 2, 2, 1, 1, 6, 2, \n\t5, 1, 3, 3, 4, 4, 4, 4, \n\t2, 0, 0, 1, 1, 0, 1, 0, \n\t1, 1, 0, 2, 1, 1, 2, 4, \n\t1, 2, 4, 1, 5, 0, 3, 2, \n\t1, 0, 0, 2, 0, 0, 0, 0, \n\t1, 4, 1, 0, 2, 1, 4, 2, \n\t0, 4, 3, 4, 2, 2, 6, 2, \n\t2, 4, 1, 4, 2, 4, 1, 3, \n\t3, 2, 2, 0, 1, 1, 1, 0, \n\t1, 0, 3, 3, 1, 2, 2, 2, \n\t0, 5, 1, 1, 0, 1, 0, 1, \n\t1, 1, 0, 0, 0, 0, 1, 1, \n\t1, 0, 0, 1, 2, 2, 1, 1, \n\t1, 1, 2, 1, 1, 4, 1, 1, \n\t1, 1, 2, 4, 1, 2, 1, 2, \n\t2, 5, 6, 2, 2, 5, 1, 3, \n\t2, 3, 5, 2, 3, 1, 3, 1, \n\t1, 2, 1, 2, 1, 4, 0, 0, \n\t2, 3, 1, 1, 2, 2, 1, 2, \n\t1, 1, 2, 1, 2, 1, 2, 2, \n\t2, 1, 1, 4, 2, 0, 0, 0, \n\t1, 0, 1, 0, 1, 0, 1, 1, \n\t0, 2, 1, 1, 1, 2, 2, 1, \n\t1, 2, 2, 1, 1, 3, 2, 2, \n\t0, 0, 2, 0, 0, 0, 0, 1, \n\t4, 1, 0, 2, 1, 2, 2, 0, \n\t2, 2, 1, 1, 2, 6, 1, 1, \n\t1, 1, 2, 2, 1, 1, 1, 2, \n\t2, 0, 1, 1, 1, 1, 0, 1, \n\t0, 3, 3, 1, 2, 2, 2, 0, \n\t5, 1, 1, 0, 1, 1, 1, 1, \n\t1, 2, 1, 1, 4, 1, 1, 1, \n\t1, 1, 4, 1, 2, 2, 5, 2, \n\t6, 2, 8, 4, 2, 5, 0, 3, \n\t2, 4, 1, 6, 2, 4, 4, 1, \n\t1, 2, 1, 2, 1, 4, 0, 0, \n\t4, 4, 1, 1, 2, 2, 2, 2, \n\t1, 1, 6, 2, 5, 1, 3, 3, \n\t4, 4, 4, 4, 2, 0, 0, 1, \n\t1, 0, 1, 0, 1, 1, 0, 2, \n\t1, 1, 2, 4, 1, 2, 4, 1, \n\t5, 0, 3, 2, 1, 0, 0, 2, \n\t0, 0, 0, 0, 1, 4, 1, 0, \n\t2, 1, 4, 2, 0, 4, 3, 4, \n\t2, 2, 6, 2, 2, 4, 1, 4, \n\t2, 4, 1, 3, 3, 2, 2, 0, \n\t1, 1, 1, 0, 1, 0, 3, 3, \n\t1, 2, 2, 2, 0, 5, 1, 1, \n\t0, 1, 0, 1, 1, 1, 0, 0, \n\t0, 0, 1, 1, 1, 0, 0, 1, \n\t2, 3, 1, 1, 1, 1, 1, 1, \n\t1, 0, 1, 0, 1, 1, 0, 1, \n\t1, 0, 1, 0, 1, 3, 1, 2, \n\t2, 1, 0, 0, 1, 0, 0, 0, \n\t0, 0, 1, 0, 1, 1, 2, 2, \n\t2, 1, 3, 2, 1, 1, 3, 1, \n\t3, 3, 1, 0, 0, 0, 0, 0, \n\t1, 1, 1, 2, 2, 4, 1, 1, \n\t2, 1, 1, 1, 3, 1, 2, 1, \n\t2, 1, 2, 0, 0, 1, 1, 5, \n\t9, 2, 1, 3, 5, 3, 1, 6, \n\t1, 1, 1, 1, 1, 1, 1, 1, \n\t1, 1, 1, 1, 1, 1, 1, 2, \n\t1, 1, 4, 1, 1, 1, 1, 2, \n\t4, 1, 2, 1, 2, 2, 5, 6, \n\t2, 2, 5, 1, 3, 2, 3, 5, \n\t2, 3, 1, 3, 1, 1, 2, 1, \n\t2, 1, 4, 0, 0, 2, 3, 1, \n\t1, 2, 2, 1, 2, 1, 1, 2, \n\t1, 2, 1, 2, 2, 2, 1, 1, \n\t4, 2, 0, 0, 0, 1, 0, 1, \n\t0, 1, 0, 1, 1, 0, 2, 1, \n\t1, 1, 2, 2, 1, 1, 2, 2, \n\t1, 1, 3, 2, 2, 0, 0, 2, \n\t0, 0, 0, 0, 1, 4, 1, 0, \n\t2, 1, 2, 2, 0, 2, 2, 1, \n\t1, 2, 6, 1, 1, 1, 1, 2, \n\t2, 1, 1, 1, 2, 2, 0, 1, \n\t1, 1, 1, 0, 1, 0, 3, 3, \n\t1, 2, 2, 2, 0, 5, 1, 1, \n\t0, 1, 1, 1, 1, 1, 2, 1, \n\t1, 4, 1, 1, 1, 1, 1, 4, \n\t1, 2, 2, 5, 2, 6, 2, 8, \n\t4, 2, 5, 0, 3, 2, 4, 1, \n\t6, 2, 4, 4, 1, 1, 2, 1, \n\t2, 1, 4, 0, 0, 4, 4, 1, \n\t1, 2, 2, 2, 2, 1, 1, 6, \n\t2, 5, 1, 3, 3, 4, 4, 4, \n\t4, 2, 0, 0, 1, 1, 0, 1, \n\t0, 1, 1, 0, 2, 1, 1, 2, \n\t4, 1, 2, 4, 1, 5, 0, 3, \n\t2, 1, 0, 0, 2, 0, 0, 0, \n\t0, 1, 4, 1, 0, 2, 1, 4, \n\t2, 0, 4, 3, 4, 2, 2, 6, \n\t2, 2, 4, 1, 4, 2, 4, 1, \n\t3, 3, 2, 2, 0, 1, 1, 1, \n\t0, 1, 0, 3, 3, 1, 2, 2, \n\t2, 0, 5, 1, 1, 0, 1, 0, \n\t1, 1, 1, 0, 0, 0, 0, 1, \n\t1, 1, 0, 0, 0, 1, 0, 1, \n\t1, 0, 1, 1, 0, 1, 0, 1, \n\t3, 1, 2, 2, 1, 0, 0, 1, \n\t0, 0, 0, 0, 0, 1, 0, 1, \n\t1, 2, 2, 1, 1, 5, 1, 1, \n\t1, 1, 2, 1, 1, 4, 1, 1, \n\t1, 1, 2, 4, 1, 2, 1, 2, \n\t2, 5, 6, 2, 2, 5, 1, 3, \n\t2, 3, 5, 2, 3, 1, 3, 1, \n\t1, 2, 1, 2, 1, 4, 0, 0, \n\t2, 3, 1, 1, 2, 2, 1, 2, \n\t1, 1, 2, 1, 2, 1, 2, 2, \n\t2, 1, 1, 4, 2, 0, 0, 1, \n\t1, 0, 1, 0, 1, 1, 0, 2, \n\t1, 1, 1, 2, 2, 1, 1, 2, \n\t2, 1, 1, 3, 2, 2, 0, 0, \n\t2, 0, 0, 0, 0, 1, 4, 1, \n\t0, 2, 1, 2, 2, 0, 2, 2, \n\t1, 1, 2, 6, 1, 1, 1, 1, \n\t2, 2, 1, 1, 1, 2, 2, 0, \n\t1, 1, 1, 1, 0, 1, 0, 3, \n\t3, 1, 2, 2, 2, 0, 5, 1, \n\t1, 0, 1, 1, 1, 0, 0, 0, \n\t0, 0, 1, 1, 1, 1, 1, 2, \n\t1, 1, 4, 1, 1, 1, 1, 1, \n\t4, 1, 2, 2, 5, 2, 6, 2, \n\t8, 4, 2, 5, 0, 3, 2, 4, \n\t1, 6, 2, 4, 4, 1, 1, 2, \n\t1, 2, 1, 4, 0, 0, 4, 4, \n\t1, 1, 2, 2, 2, 2, 1, 1, \n\t6, 2, 5, 1, 3, 3, 4, 4, \n\t4, 4, 2, 0, 0, 1, 1, 0, \n\t1, 0, 1, 1, 0, 2, 1, 1, \n\t2, 4, 1, 2, 4, 1, 5, 0, \n\t3, 2, 1, 0, 0, 2, 0, 0, \n\t0, 0, 1, 4, 1, 0, 2, 1, \n\t4, 2, 0, 4, 3, 4, 2, 2, \n\t6, 2, 2, 4, 1, 4, 2, 4, \n\t1, 3, 3, 2, 2, 0, 1, 1, \n\t1, 0, 1, 0, 3, 3, 1, 2, \n\t2, 2, 0, 5, 1, 1, 0, 1, \n\t0, 1, 1, 1, 0, 0, 0, 3, \n\t1, 1, 1, 1, 1, 2, 1, 1, \n\t4, 1, 1, 1, 1, 1, 4, 1, \n\t2, 2, 1, 1, 1, 1, 2, 1, \n\t1, 4, 1, 1, 1, 1, 2, 4, \n\t1, 2, 1, 2, 2, 5, 6, 2, \n\t2, 5, 1, 3, 2, 3, 5, 2, \n\t3, 1, 3, 1, 1, 2, 1, 2, \n\t1, 4, 0, 0, 2, 3, 1, 1, \n\t2, 2, 1, 2, 1, 1, 2, 1, \n\t2, 1, 2, 2, 2, 1, 1, 4, \n\t2, 0, 0, 0, 1, 0, 1, 0, \n\t1, 0, 1, 1, 0, 2, 1, 1, \n\t1, 2, 2, 1, 1, 2, 2, 1, \n\t1, 3, 2, 2, 0, 0, 2, 0, \n\t0, 0, 0, 1, 4, 1, 0, 2, \n\t1, 2, 2, 0, 2, 2, 1, 1, \n\t2, 6, 1, 1, 1, 1, 2, 2, \n\t1, 1, 1, 2, 2, 0, 1, 1, \n\t1, 1, 0, 1, 0, 3, 3, 1, \n\t2, 2, 2, 0, 5, 1, 1, 0, \n\t1, 0, 0, 0, 1, 1, 1, 0, \n\t0, 5, 2, 6, 2, 8, 4, 2, \n\t5, 0, 3, 2, 4, 1, 6, 2, \n\t4, 4, 1, 1, 2, 1, 2, 1, \n\t4, 0, 0, 4, 4, 1, 1, 2, \n\t2, 2, 2, 1, 1, 6, 2, 5, \n\t1, 3, 3, 4, 4, 4, 4, 2, \n\t0, 0, 1, 1, 0, 1, 0, 1, \n\t1, 0, 2, 1, 1, 2, 4, 1, \n\t2, 4, 1, 5, 0, 3, 2, 1, \n\t0, 0, 2, 0, 0, 0, 0, 1, \n\t4, 1, 0, 2, 1, 4, 2, 0, \n\t4, 3, 4, 2, 2, 6, 2, 2, \n\t4, 1, 4, 2, 4, 1, 3, 3, \n\t2, 2, 0, 1, 1, 1, 0, 1, \n\t0, 3, 3, 1, 2, 2, 2, 0, \n\t5, 1, 1, 0, 1, 0, 1, 1, \n\t1, 0, 1, 3, 1, 3, 3, 1, \n\t0, 0, 0, 0, 0, 1, 1, 1, \n\t3, 2, 4, 1, 0, 1, 1, 1, \n\t3, 1, 1, 1, 3, 1, 3, 1, \n\t3, 1, 2, 1, 1, 1, 1, 2, \n\t1, 1, 4, 1, 1, 1, 1, 2, \n\t4, 1, 2, 1, 2, 2, 5, 6, \n\t2, 2, 5, 1, 3, 2, 3, 5, \n\t2, 3, 1, 3, 1, 1, 2, 1, \n\t2, 1, 4, 0, 0, 2, 3, 1, \n\t1, 2, 2, 1, 2, 1, 1, 2, \n\t1, 2, 1, 2, 2, 2, 1, 1, \n\t4, 2, 0, 0, 0, 1, 0, 1, \n\t0, 1, 0, 1, 1, 0, 2, 1, \n\t1, 1, 2, 2, 1, 1, 2, 2, \n\t1, 1, 3, 2, 2, 0, 0, 2, \n\t0, 0, 0, 0, 1, 4, 1, 0, \n\t2, 1, 2, 2, 0, 2, 2, 1, \n\t1, 2, 6, 1, 1, 1, 1, 2, \n\t2, 1, 1, 1, 2, 2, 0, 1, \n\t1, 1, 1, 0, 1, 0, 3, 3, \n\t1, 2, 2, 2, 0, 5, 1, 1, \n\t0, 1, 1, 1, 1, 1, 2, 1, \n\t1, 4, 1, 1, 1, 1, 1, 4, \n\t1, 2, 2, 5, 2, 6, 2, 8, \n\t4, 2, 5, 0, 3, 2, 4, 1, \n\t6, 2, 4, 4, 1, 1, 2, 1, \n\t2, 1, 4, 0, 0, 4, 4, 1, \n\t1, 2, 2, 2, 2, 1, 1, 6, \n\t2, 5, 1, 3, 3, 4, 4, 4, \n\t4, 2, 0, 0, 1, 1, 0, 1, \n\t0, 1, 1, 0, 2, 1, 1, 2, \n\t4, 1, 2, 4, 1, 5, 0, 3, \n\t2, 1, 0, 0, 2, 0, 0, 0, \n\t0, 1, 4, 1, 0, 2, 1, 4, \n\t2, 0, 4, 3, 4, 2, 2, 6, \n\t2, 2, 4, 1, 4, 2, 4, 1, \n\t3, 3, 2, 2, 0, 1, 1, 1, \n\t0, 1, 0, 3, 3, 1, 2, 2, \n\t2, 0, 5, 1, 1, 0, 1, 0, \n\t1, 1, 1, 0, 0, 0, 0, 1, \n\t1, 1, 0, 0, 0, 0, 1, 1, \n\t5, 9, 2, 1, 3, 5, 3, 1, \n\t6, 1, 1, 2, 2, 2, 6, 0, \n\t0, 0, 4, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, \n}\n\nvar _graphclust_index_offsets []int16 = []int16{\n\t0, 0, 2, 4, 6, 8, 11, 15, \n\t17, 20, 25, 28, 30, 32, 34, 63, \n\t68, 70, 73, 76, 80, 84, 90, 97, \n\t102, 106, 112, 115, 120, 123, 129, 135, \n\t138, 144, 146, 152, 155, 157, 161, 163, \n\t169, 171, 176, 178, 200, 203, 207, 212, \n\t214, 217, 220, 222, 225, 227, 230, 233, \n\t235, 241, 243, 246, 249, 252, 254, 256, \n\t262, 265, 271, 274, 281, 283, 285, 287, \n\t289, 291, 294, 296, 298, 314, 317, 319, \n\t321, 326, 329, 332, 334, 336, 339, 342, \n\t344, 348, 353, 357, 360, 364, 366, 369, \n\t377, 383, 385, 387, 389, 395, 397, 421, \n\t424, 426, 429, 432, 434, 437, 440, 443, \n\t445, 449, 457, 459, 461, 463, 465, 468, \n\t471, 473, 475, 477, 480, 483, 488, 490, \n\t492, 494, 496, 498, 500, 507, 511, 515, \n\t517, 520, 523, 527, 531, 537, 539, 541, \n\t545, 547, 549, 551, 553, 556, 560, 562, \n\t565, 570, 573, 575, 577, 579, 610, 615, \n\t617, 620, 626, 634, 640, 649, 654, 665, \n\t673, 678, 686, 690, 697, 701, 708, 714, \n\t723, 728, 737, 746, 750, 752, 757, 759, \n\t765, 768, 773, 775, 797, 803, 808, 814, \n\t816, 819, 822, 826, 831, 833, 836, 844, \n\t848, 858, 860, 867, 872, 880, 887, 892, \n\t900, 903, 909, 912, 914, 916, 918, 920, \n\t923, 925, 927, 943, 946, 948, 950, 957, \n\t962, 964, 967, 975, 978, 984, 989, 994, \n\t1001, 1007, 1011, 1013, 1016, 1024, 1030, 1032, \n\t1034, 1036, 1042, 1044, 1068, 1072, 1074, 1080, \n\t1084, 1086, 1092, 1096, 1103, 1107, 1113, 1122, \n\t1125, 1129, 1137, 1140, 1147, 1150, 1156, 1158, \n\t1164, 1169, 1174, 1180, 1185, 1187, 1189, 1191, \n\t1193, 1195, 1202, 1208, 1212, 1214, 1217, 1220, \n\t1224, 1228, 1234, 1236, 1238, 1240, 1242, 1244, \n\t1250, 1252, 1254, 1255, 1257, 1259, 1261, 1267, \n\t1269, 1271, 1272, 1279, 1281, 1285, 1289, 1291, \n\t1293, 1295, 1298, 1302, 1304, 1307, 1312, 1315, \n\t1317, 1319, 1321, 1350, 1355, 1357, 1360, 1363, \n\t1367, 1371, 1377, 1384, 1389, 1393, 1399, 1402, \n\t1407, 1410, 1416, 1422, 1425, 1431, 1433, 1439, \n\t1442, 1444, 1448, 1450, 1456, 1458, 1463, 1465, \n\t1487, 1490, 1494, 1499, 1501, 1504, 1507, 1509, \n\t1512, 1514, 1517, 1520, 1522, 1528, 1530, 1533, \n\t1536, 1539, 1541, 1543, 1549, 1552, 1558, 1561, \n\t1568, 1570, 1572, 1574, 1576, 1578, 1581, 1583, \n\t1585, 1601, 1604, 1606, 1608, 1613, 1616, 1619, \n\t1621, 1623, 1626, 1629, 1631, 1635, 1640, 1644, \n\t1647, 1651, 1653, 1656, 1664, 1670, 1672, 1674, \n\t1676, 1682, 1684, 1708, 1711, 1713, 1716, 1719, \n\t1721, 1724, 1727, 1730, 1732, 1736, 1744, 1746, \n\t1748, 1750, 1752, 1755, 1758, 1760, 1762, 1764, \n\t1767, 1770, 1775, 1777, 1779, 1781, 1783, 1785, \n\t1787, 1794, 1798, 1802, 1804, 1807, 1810, 1814, \n\t1818, 1824, 1826, 1828, 1832, 1834, 1836, 1838, \n\t1840, 1843, 1847, 1849, 1852, 1857, 1860, 1862, \n\t1864, 1866, 1897, 1902, 1904, 1907, 1913, 1921, \n\t1927, 1936, 1941, 1952, 1960, 1965, 1973, 1977, \n\t1984, 1988, 1995, 2001, 2010, 2015, 2024, 2033, \n\t2037, 2039, 2044, 2046, 2052, 2055, 2060, 2062, \n\t2084, 2090, 2095, 2101, 2103, 2106, 2109, 2113, \n\t2118, 2120, 2123, 2131, 2135, 2145, 2147, 2154, \n\t2159, 2167, 2174, 2179, 2187, 2190, 2196, 2199, \n\t2201, 2203, 2205, 2207, 2210, 2212, 2214, 2230, \n\t2233, 2235, 2237, 2244, 2249, 2251, 2254, 2262, \n\t2265, 2271, 2276, 2281, 2288, 2294, 2298, 2300, \n\t2303, 2311, 2317, 2319, 2321, 2323, 2329, 2331, \n\t2355, 2359, 2361, 2367, 2371, 2373, 2379, 2383, \n\t2390, 2394, 2400, 2409, 2412, 2416, 2424, 2427, \n\t2434, 2437, 2443, 2445, 2451, 2456, 2461, 2467, \n\t2472, 2474, 2476, 2478, 2480, 2482, 2489, 2495, \n\t2499, 2501, 2504, 2507, 2511, 2515, 2521, 2523, \n\t2525, 2527, 2529, 2531, 2537, 2539, 2541, 2542, \n\t2544, 2546, 2548, 2554, 2556, 2558, 2559, 2566, \n\t2568, 2571, 2575, 2578, 2581, 2585, 2588, 2591, \n\t2598, 2600, 2625, 2627, 2652, 2654, 2656, 2680, \n\t2682, 2684, 2686, 2688, 2691, 2693, 2697, 2699, \n\t2730, 2733, 2738, 2762, 2765, 2767, 2770, 2773, \n\t2777, 2780, 2783, 2787, 2788, 2844, 2900, 2930, \n\t2934, 2937, 2944, 2950, 2953, 2956, 2959, 2963, \n\t2965, 2983, 2987, 2992, 2995, 2998, 3002, 3005, \n\t3008, 3012, 3068, 3124, 3154, 3158, 3163, 3167, \n\t3169, 3173, 3179, 3183, 3186, 3190, 3193, 3196, \n\t3199, 3202, 3215, 3218, 3226, 3228, 3230, 3233, \n\t3239, 3251, 3257, 3261, 3266, 3272, 3277, 3280, \n\t3290, 3292, 3295, 3300, 3302, 3305, 3308, 3312, \n\t3315, 3318, 3325, 3327, 3329, 3331, 3333, 3336, \n\t3340, 3342, 3345, 3350, 3353, 3355, 3357, 3359, \n\t3388, 3393, 3395, 3398, 3401, 3405, 3409, 3415, \n\t3422, 3427, 3431, 3437, 3440, 3445, 3448, 3454, \n\t3460, 3463, 3469, 3471, 3477, 3480, 3482, 3486, \n\t3488, 3494, 3496, 3501, 3503, 3525, 3528, 3532, \n\t3537, 3539, 3542, 3545, 3547, 3550, 3552, 3555, \n\t3558, 3560, 3566, 3568, 3571, 3574, 3577, 3579, \n\t3581, 3587, 3590, 3596, 3599, 3606, 3608, 3610, \n\t3612, 3614, 3616, 3619, 3621, 3623, 3639, 3642, \n\t3644, 3646, 3651, 3654, 3657, 3659, 3661, 3664, \n\t3667, 3669, 3673, 3678, 3682, 3685, 3689, 3691, \n\t3694, 3702, 3708, 3710, 3712, 3714, 3720, 3722, \n\t3746, 3749, 3751, 3754, 3757, 3759, 3762, 3765, \n\t3768, 3770, 3774, 3782, 3784, 3786, 3788, 3790, \n\t3793, 3796, 3798, 3800, 3802, 3805, 3808, 3813, \n\t3815, 3817, 3819, 3821, 3823, 3825, 3832, 3836, \n\t3840, 3842, 3845, 3848, 3852, 3856, 3862, 3864, \n\t3866, 3870, 3872, 3874, 3876, 3878, 3881, 3885, \n\t3887, 3890, 3895, 3898, 3900, 3902, 3904, 3935, \n\t3940, 3942, 3945, 3951, 3959, 3965, 3974, 3979, \n\t3990, 3998, 4003, 4011, 4015, 4022, 4026, 4033, \n\t4039, 4048, 4053, 4062, 4071, 4075, 4077, 4082, \n\t4084, 4090, 4093, 4098, 4100, 4122, 4128, 4133, \n\t4139, 4141, 4144, 4147, 4151, 4156, 4158, 4161, \n\t4169, 4173, 4183, 4185, 4192, 4197, 4205, 4212, \n\t4217, 4225, 4228, 4234, 4237, 4239, 4241, 4243, \n\t4245, 4248, 4250, 4252, 4268, 4271, 4273, 4275, \n\t4282, 4287, 4289, 4292, 4300, 4303, 4309, 4314, \n\t4319, 4326, 4332, 4336, 4338, 4341, 4349, 4355, \n\t4357, 4359, 4361, 4367, 4369, 4393, 4397, 4399, \n\t4405, 4409, 4411, 4417, 4421, 4428, 4432, 4438, \n\t4447, 4450, 4454, 4462, 4465, 4472, 4475, 4481, \n\t4483, 4489, 4494, 4499, 4505, 4510, 4512, 4514, \n\t4516, 4518, 4520, 4527, 4533, 4537, 4539, 4542, \n\t4545, 4549, 4553, 4559, 4561, 4563, 4565, 4567, \n\t4569, 4575, 4577, 4579, 4580, 4582, 4584, 4586, \n\t4592, 4594, 4596, 4597, 4604, 4629, 4631, 4656, \n\t4658, 4660, 4684, 4686, 4688, 4690, 4692, 4695, \n\t4697, 4701, 4703, 4734, 4737, 4742, 4766, 4769, \n\t4771, 4774, 4777, 4781, 4784, 4787, 4791, 4792, \n\t4848, 4904, 4934, 4938, 4941, 4948, 4956, 4958, \n\t4960, 4962, 4965, 4969, 4971, 4974, 4979, 4982, \n\t4984, 4986, 4988, 5017, 5022, 5024, 5027, 5030, \n\t5034, 5038, 5044, 5051, 5056, 5060, 5066, 5069, \n\t5074, 5077, 5083, 5089, 5092, 5098, 5100, 5106, \n\t5109, 5111, 5115, 5117, 5123, 5125, 5130, 5132, \n\t5154, 5157, 5161, 5166, 5168, 5171, 5174, 5176, \n\t5179, 5181, 5184, 5187, 5189, 5195, 5197, 5200, \n\t5203, 5206, 5208, 5210, 5216, 5219, 5225, 5228, \n\t5230, 5232, 5234, 5236, 5239, 5241, 5243, 5259, \n\t5262, 5264, 5266, 5271, 5274, 5277, 5279, 5281, \n\t5284, 5287, 5289, 5293, 5298, 5302, 5305, 5309, \n\t5311, 5314, 5321, 5327, 5329, 5331, 5333, 5339, \n\t5341, 5365, 5368, 5370, 5373, 5376, 5378, 5381, \n\t5384, 5387, 5389, 5393, 5401, 5403, 5405, 5407, \n\t5409, 5412, 5415, 5417, 5419, 5421, 5424, 5427, \n\t5432, 5434, 5436, 5438, 5440, 5442, 5444, 5451, \n\t5455, 5459, 5461, 5464, 5467, 5471, 5475, 5481, \n\t5483, 5485, 5487, 5493, 5495, 5497, 5498, 5505, \n\t5507, 5515, 5519, 5521, 5523, 5525, 5527, 5530, \n\t5534, 5536, 5539, 5544, 5547, 5549, 5551, 5553, \n\t5584, 5589, 5591, 5594, 5600, 5608, 5614, 5623, \n\t5628, 5639, 5647, 5652, 5660, 5664, 5671, 5675, \n\t5682, 5688, 5697, 5702, 5711, 5720, 5724, 5726, \n\t5731, 5733, 5739, 5742, 5747, 5749, 5771, 5777, \n\t5782, 5788, 5790, 5793, 5796, 5800, 5805, 5807, \n\t5810, 5818, 5822, 5832, 5834, 5841, 5846, 5854, \n\t5861, 5866, 5874, 5877, 5883, 5886, 5888, 5890, \n\t5892, 5894, 5897, 5899, 5901, 5917, 5920, 5922, \n\t5924, 5931, 5936, 5938, 5941, 5949, 5952, 5958, \n\t5963, 5968, 5975, 5981, 5985, 5987, 5990, 5998, \n\t6004, 6006, 6008, 6010, 6016, 6018, 6042, 6046, \n\t6048, 6054, 6058, 6060, 6066, 6070, 6077, 6081, \n\t6087, 6096, 6099, 6103, 6111, 6114, 6121, 6124, \n\t6130, 6132, 6138, 6143, 6148, 6154, 6159, 6161, \n\t6163, 6165, 6167, 6169, 6176, 6182, 6186, 6188, \n\t6191, 6194, 6198, 6202, 6208, 6210, 6212, 6214, \n\t6216, 6218, 6224, 6226, 6228, 6229, 6231, 6233, \n\t6237, 6240, 6242, 6244, 6246, 6249, 6253, 6255, \n\t6258, 6263, 6266, 6268, 6270, 6272, 6303, 6308, \n\t6310, 6313, 6319, 6321, 6323, 6325, 6328, 6332, \n\t6334, 6337, 6342, 6345, 6347, 6349, 6351, 6380, \n\t6385, 6387, 6390, 6393, 6397, 6401, 6407, 6414, \n\t6419, 6423, 6429, 6432, 6437, 6440, 6446, 6452, \n\t6455, 6461, 6463, 6469, 6472, 6474, 6478, 6480, \n\t6486, 6488, 6493, 6495, 6517, 6520, 6524, 6529, \n\t6531, 6534, 6537, 6539, 6542, 6544, 6547, 6550, \n\t6552, 6558, 6560, 6563, 6566, 6569, 6571, 6573, \n\t6579, 6582, 6588, 6591, 6598, 6600, 6602, 6604, \n\t6606, 6608, 6611, 6613, 6615, 6631, 6634, 6636, \n\t6638, 6643, 6646, 6649, 6651, 6653, 6656, 6659, \n\t6661, 6665, 6670, 6674, 6677, 6681, 6683, 6686, \n\t6694, 6700, 6702, 6704, 6706, 6712, 6714, 6738, \n\t6741, 6743, 6746, 6749, 6751, 6754, 6757, 6760, \n\t6762, 6766, 6774, 6776, 6778, 6780, 6782, 6785, \n\t6788, 6790, 6792, 6794, 6797, 6800, 6805, 6807, \n\t6809, 6811, 6813, 6815, 6817, 6824, 6828, 6832, \n\t6834, 6837, 6840, 6844, 6848, 6854, 6856, 6858, \n\t6862, 6864, 6866, 6868, 6870, 6876, 6878, 6880, \n\t6881, 6888, 6896, 6902, 6911, 6916, 6927, 6935, \n\t6940, 6948, 6952, 6959, 6963, 6970, 6976, 6985, \n\t6990, 6999, 7008, 7012, 7014, 7019, 7021, 7027, \n\t7030, 7035, 7037, 7059, 7065, 7070, 7076, 7078, \n\t7081, 7084, 7088, 7093, 7095, 7098, 7106, 7110, \n\t7120, 7122, 7129, 7134, 7142, 7149, 7154, 7162, \n\t7165, 7171, 7174, 7176, 7178, 7180, 7182, 7185, \n\t7187, 7189, 7205, 7208, 7210, 7212, 7219, 7224, \n\t7226, 7229, 7237, 7240, 7246, 7251, 7256, 7263, \n\t7269, 7273, 7275, 7278, 7286, 7292, 7294, 7296, \n\t7298, 7304, 7306, 7330, 7334, 7336, 7342, 7346, \n\t7348, 7354, 7358, 7365, 7369, 7375, 7384, 7387, \n\t7391, 7399, 7402, 7409, 7412, 7418, 7420, 7426, \n\t7431, 7436, 7442, 7447, 7449, 7451, 7453, 7455, \n\t7457, 7464, 7470, 7474, 7476, 7479, 7482, 7486, \n\t7490, 7496, 7498, 7500, 7502, 7504, 7506, 7512, \n\t7514, 7516, 7517, 7520, 7524, 7526, 7544, 7548, \n\t7553, 7556, 7559, 7563, 7566, 7569, 7573, 7629, \n\t7685, 7718, 7722, 7727, 7729, 7730, 7732, 7736, \n\t7739, 7744, 7750, 7754, 7757, 7761, 7764, 7768, \n\t7771, 7775, 7788, 7791, 7793, 7795, 7797, 7800, \n\t7804, 7806, 7809, 7814, 7817, 7819, 7821, 7823, \n\t7852, 7857, 7859, 7862, 7865, 7869, 7873, 7879, \n\t7886, 7891, 7895, 7901, 7904, 7909, 7912, 7918, \n\t7924, 7927, 7933, 7935, 7941, 7944, 7946, 7950, \n\t7952, 7958, 7960, 7965, 7967, 7989, 7992, 7996, \n\t8001, 8003, 8006, 8009, 8011, 8014, 8016, 8019, \n\t8022, 8024, 8030, 8032, 8035, 8038, 8041, 8043, \n\t8045, 8051, 8054, 8060, 8063, 8070, 8072, 8074, \n\t8076, 8078, 8080, 8083, 8085, 8087, 8103, 8106, \n\t8108, 8110, 8115, 8118, 8121, 8123, 8125, 8128, \n\t8131, 8133, 8137, 8142, 8146, 8149, 8153, 8155, \n\t8158, 8166, 8172, 8174, 8176, 8178, 8184, 8186, \n\t8210, 8213, 8215, 8218, 8221, 8223, 8226, 8229, \n\t8232, 8234, 8238, 8246, 8248, 8250, 8252, 8254, \n\t8257, 8260, 8262, 8264, 8266, 8269, 8272, 8277, \n\t8279, 8281, 8283, 8285, 8287, 8289, 8296, 8300, \n\t8304, 8306, 8309, 8312, 8316, 8320, 8326, 8328, \n\t8330, 8334, 8336, 8338, 8340, 8342, 8345, 8349, \n\t8351, 8354, 8359, 8362, 8364, 8366, 8368, 8399, \n\t8404, 8406, 8409, 8415, 8423, 8429, 8438, 8443, \n\t8454, 8462, 8467, 8475, 8479, 8486, 8490, 8497, \n\t8503, 8512, 8517, 8526, 8535, 8539, 8541, 8546, \n\t8548, 8554, 8557, 8562, 8564, 8586, 8592, 8597, \n\t8603, 8605, 8608, 8611, 8615, 8620, 8622, 8625, \n\t8633, 8637, 8647, 8649, 8656, 8661, 8669, 8676, \n\t8681, 8689, 8692, 8698, 8701, 8703, 8705, 8707, \n\t8709, 8712, 8714, 8716, 8732, 8735, 8737, 8739, \n\t8746, 8751, 8753, 8756, 8764, 8767, 8773, 8778, \n\t8783, 8790, 8796, 8800, 8802, 8805, 8813, 8819, \n\t8821, 8823, 8825, 8831, 8833, 8857, 8861, 8863, \n\t8869, 8873, 8875, 8881, 8885, 8892, 8896, 8902, \n\t8911, 8914, 8918, 8926, 8929, 8936, 8939, 8945, \n\t8947, 8953, 8958, 8963, 8969, 8974, 8976, 8978, \n\t8980, 8982, 8984, 8991, 8997, 9001, 9003, 9006, \n\t9009, 9013, 9017, 9023, 9025, 9027, 9029, 9031, \n\t9033, 9039, 9041, 9043, 9044, 9046, 9048, 9050, \n\t9056, 9058, 9060, 9061, 9068, 9076, 9078, 9080, \n\t9083, 9089, 9101, 9107, 9111, 9116, 9122, 9127, \n\t9130, 9140, 9142, 9145, 9153, 9156, 9159, 9183, \n\t9204, 9225, 9246, 9265, 9286, 9307, 9328, 9352, \n\t9374, 9396, 9418, 9439, 9463, 9484, 9505, 9526, \n\t9548, 9570, 9592, 9613, 9634, 9655, 9676, 9697, \n\t9718, 9739, 9760, 9781, \n}\n\nvar _graphclust_indicies []int16 = []int16{\n\t0, 1, 3, 2, 2, 3, 3, 2, \n\t3, 3, 2, 3, 3, 3, 2, 3, \n\t2, 3, 3, 2, 3, 3, 3, 3, \n\t2, 3, 3, 2, 2, 3, 3, 2, \n\t3, 2, 4, 5, 6, 7, 8, 10, \n\t11, 12, 14, 15, 16, 17, 18, 19, \n\t20, 21, 22, 23, 24, 25, 26, 27, \n\t28, 29, 30, 31, 9, 13, 2, 3, \n\t3, 3, 3, 2, 3, 2, 3, 3, \n\t2, 2, 2, 3, 2, 2, 2, 3, \n\t3, 3, 3, 2, 2, 2, 2, 2, \n\t2, 3, 2, 2, 2, 2, 2, 2, \n\t3, 2, 2, 2, 2, 3, 3, 3, \n\t3, 2, 3, 3, 3, 3, 3, 2, \n\t3, 3, 2, 3, 3, 3, 3, 2, \n\t3, 3, 2, 2, 2, 2, 2, 2, \n\t3, 3, 3, 3, 3, 3, 2, 3, \n\t3, 2, 2, 2, 2, 2, 2, 3, \n\t3, 2, 3, 3, 3, 3, 3, 2, \n\t3, 3, 2, 3, 2, 3, 3, 3, \n\t2, 3, 2, 3, 3, 3, 3, 3, \n\t2, 3, 2, 3, 3, 3, 3, 2, \n\t3, 2, 32, 33, 34, 35, 36, 37, \n\t38, 39, 40, 41, 42, 43, 44, 45, \n\t46, 47, 48, 49, 50, 51, 52, 2, \n\t3, 3, 2, 3, 3, 3, 2, 3, \n\t3, 3, 3, 2, 3, 2, 3, 3, \n\t2, 3, 3, 2, 3, 2, 2, 2, \n\t3, 3, 2, 3, 3, 2, 3, 3, \n\t2, 3, 2, 3, 3, 3, 3, 3, \n\t2, 3, 2, 3, 3, 2, 2, 2, \n\t3, 3, 3, 2, 3, 2, 3, 2, \n\t3, 3, 3, 3, 3, 2, 3, 3, \n\t2, 53, 54, 55, 56, 57, 2, 3, \n\t58, 2, 53, 54, 59, 55, 56, 57, \n\t2, 3, 2, 3, 2, 3, 2, 3, \n\t2, 3, 2, 60, 61, 2, 3, 2, \n\t3, 2, 62, 63, 64, 65, 66, 67, \n\t68, 69, 70, 71, 72, 73, 74, 75, \n\t76, 2, 3, 3, 2, 3, 2, 3, \n\t2, 3, 3, 3, 3, 2, 3, 3, \n\t2, 2, 2, 3, 3, 2, 3, 2, \n\t3, 3, 2, 2, 2, 3, 3, 2, \n\t3, 3, 3, 2, 3, 3, 3, 3, \n\t2, 3, 3, 3, 2, 3, 3, 2, \n\t77, 78, 63, 2, 3, 2, 3, 3, \n\t2, 79, 80, 81, 82, 83, 84, 85, \n\t2, 86, 87, 88, 89, 90, 2, 3, \n\t2, 3, 2, 3, 2, 3, 3, 3, \n\t3, 3, 2, 3, 2, 91, 92, 93, \n\t94, 95, 96, 97, 98, 99, 100, 101, \n\t102, 103, 104, 105, 106, 107, 104, 108, \n\t109, 110, 111, 112, 2, 3, 3, 2, \n\t2, 3, 2, 2, 3, 3, 3, 2, \n\t3, 2, 3, 3, 2, 2, 2, 3, \n\t3, 3, 2, 3, 2, 3, 3, 3, \n\t2, 3, 3, 3, 3, 3, 3, 3, \n\t2, 3, 2, 3, 2, 3, 2, 2, \n\t3, 3, 3, 2, 2, 2, 3, 2, \n\t3, 3, 2, 3, 2, 3, 3, 2, \n\t3, 3, 2, 113, 114, 115, 116, 2, \n\t3, 2, 3, 2, 3, 2, 3, 2, \n\t117, 2, 3, 2, 118, 119, 120, 121, \n\t122, 123, 2, 3, 3, 3, 2, 2, \n\t2, 2, 3, 3, 2, 3, 3, 2, \n\t2, 2, 3, 3, 3, 3, 2, 124, \n\t125, 126, 2, 3, 3, 3, 3, 3, \n\t2, 3, 2, 3, 2, 127, 128, 129, \n\t2, 130, 2, 2, 130, 2, 130, 130, \n\t2, 130, 130, 2, 130, 130, 130, 2, \n\t130, 2, 130, 130, 2, 130, 130, 130, \n\t130, 2, 130, 130, 2, 2, 130, 130, \n\t2, 130, 2, 131, 132, 133, 134, 135, \n\t136, 137, 139, 140, 141, 142, 143, 144, \n\t145, 146, 147, 148, 149, 150, 22, 151, \n\t152, 153, 154, 155, 156, 157, 158, 159, \n\t138, 2, 130, 130, 130, 130, 2, 130, \n\t2, 130, 130, 2, 3, 3, 2, 2, \n\t3, 130, 130, 2, 130, 130, 2, 130, \n\t2, 3, 130, 130, 130, 3, 3, 2, \n\t130, 130, 130, 2, 2, 2, 130, 2, \n\t3, 3, 130, 130, 3, 2, 130, 130, \n\t130, 2, 130, 2, 130, 2, 130, 2, \n\t3, 2, 2, 130, 130, 2, 130, 2, \n\t3, 130, 130, 3, 130, 2, 3, 130, \n\t130, 3, 3, 130, 130, 2, 130, 130, \n\t3, 2, 130, 130, 130, 3, 3, 3, \n\t2, 130, 3, 130, 2, 2, 2, 3, \n\t2, 2, 2, 130, 130, 130, 3, 130, \n\t3, 2, 130, 130, 3, 3, 3, 130, \n\t130, 130, 2, 130, 130, 3, 3, 2, \n\t2, 2, 130, 130, 130, 2, 130, 2, \n\t3, 130, 130, 130, 130, 3, 130, 3, \n\t3, 2, 130, 3, 130, 2, 130, 2, \n\t130, 3, 130, 130, 2, 130, 2, 130, \n\t130, 130, 130, 3, 2, 3, 130, 2, \n\t130, 130, 130, 130, 2, 130, 2, 160, \n\t161, 162, 163, 164, 165, 166, 167, 168, \n\t169, 170, 171, 172, 173, 174, 175, 176, \n\t177, 178, 179, 180, 2, 3, 130, 130, \n\t3, 130, 2, 3, 130, 130, 130, 2, \n\t130, 3, 130, 130, 130, 2, 130, 2, \n\t130, 130, 2, 130, 130, 2, 3, 130, \n\t3, 2, 130, 130, 130, 2, 3, 130, \n\t2, 130, 130, 2, 130, 130, 3, 130, \n\t3, 3, 130, 2, 130, 130, 3, 2, \n\t130, 130, 130, 130, 3, 130, 130, 3, \n\t130, 2, 130, 2, 3, 3, 3, 130, \n\t130, 3, 2, 130, 2, 130, 2, 3, \n\t3, 3, 3, 130, 130, 3, 130, 2, \n\t3, 130, 130, 3, 130, 3, 2, 3, \n\t130, 3, 130, 2, 3, 130, 130, 130, \n\t130, 3, 130, 2, 130, 130, 2, 181, \n\t182, 183, 184, 185, 2, 130, 58, 2, \n\t130, 2, 130, 2, 130, 2, 130, 2, \n\t186, 187, 2, 130, 2, 130, 2, 188, \n\t189, 190, 191, 66, 192, 193, 194, 195, \n\t196, 197, 198, 199, 200, 201, 2, 130, \n\t130, 2, 130, 2, 130, 2, 130, 130, \n\t130, 3, 3, 130, 2, 130, 2, 130, \n\t2, 3, 130, 2, 130, 3, 2, 3, \n\t130, 130, 130, 3, 130, 3, 2, 130, \n\t2, 3, 130, 3, 130, 3, 130, 2, \n\t130, 130, 3, 130, 2, 130, 130, 130, \n\t130, 2, 130, 3, 3, 130, 130, 3, \n\t2, 130, 130, 3, 130, 3, 2, 202, \n\t203, 189, 2, 130, 2, 130, 130, 2, \n\t204, 205, 206, 207, 208, 209, 210, 2, \n\t211, 212, 213, 214, 215, 2, 130, 2, \n\t130, 2, 130, 2, 130, 130, 130, 130, \n\t130, 2, 130, 2, 216, 217, 218, 219, \n\t220, 221, 222, 223, 224, 225, 226, 227, \n\t228, 229, 230, 231, 232, 233, 234, 235, \n\t236, 237, 238, 2, 130, 3, 130, 2, \n\t2, 130, 3, 2, 3, 3, 2, 130, \n\t3, 130, 130, 2, 130, 2, 3, 130, \n\t3, 130, 3, 2, 2, 130, 2, 3, \n\t130, 130, 3, 130, 3, 130, 2, 130, \n\t3, 130, 2, 130, 130, 3, 130, 3, \n\t2, 130, 130, 3, 3, 3, 3, 130, \n\t130, 2, 3, 130, 2, 3, 3, 130, \n\t2, 130, 3, 130, 3, 130, 3, 130, \n\t2, 3, 2, 130, 130, 3, 3, 130, \n\t3, 130, 2, 2, 2, 130, 130, 3, \n\t130, 3, 130, 2, 2, 130, 3, 3, \n\t130, 3, 130, 2, 3, 130, 3, 130, \n\t2, 3, 3, 130, 130, 2, 3, 3, \n\t3, 130, 130, 2, 239, 240, 115, 241, \n\t2, 130, 2, 130, 2, 130, 2, 242, \n\t2, 130, 2, 243, 244, 245, 246, 247, \n\t248, 2, 3, 3, 130, 130, 130, 2, \n\t2, 2, 2, 130, 130, 2, 130, 130, \n\t2, 2, 2, 130, 130, 130, 130, 2, \n\t249, 250, 251, 2, 130, 130, 130, 130, \n\t130, 2, 130, 2, 130, 2, 252, 2, \n\t3, 2, 253, 2, 254, 255, 256, 258, \n\t257, 2, 130, 2, 2, 130, 130, 3, \n\t2, 3, 2, 259, 2, 260, 261, 262, \n\t264, 263, 2, 3, 2, 2, 3, 3, \n\t79, 80, 81, 82, 83, 84, 2, 3, \n\t1, 265, 265, 3, 1, 265, 266, 3, \n\t1, 267, 268, 267, 268, 268, 267, 268, \n\t268, 267, 268, 268, 268, 267, 268, 267, \n\t268, 268, 267, 268, 268, 268, 268, 267, \n\t268, 268, 267, 267, 268, 268, 267, 268, \n\t267, 269, 270, 271, 272, 273, 275, 276, \n\t277, 279, 280, 281, 282, 283, 284, 285, \n\t286, 287, 288, 289, 290, 291, 292, 293, \n\t294, 295, 296, 274, 278, 267, 268, 268, \n\t268, 268, 267, 268, 267, 268, 268, 267, \n\t267, 267, 268, 267, 267, 267, 268, 268, \n\t268, 268, 267, 267, 267, 267, 267, 267, \n\t268, 267, 267, 267, 267, 267, 267, 268, \n\t267, 267, 267, 267, 268, 268, 268, 268, \n\t267, 268, 268, 268, 268, 268, 267, 268, \n\t268, 267, 268, 268, 268, 268, 267, 268, \n\t268, 267, 267, 267, 267, 267, 267, 268, \n\t268, 268, 268, 268, 268, 267, 268, 268, \n\t267, 267, 267, 267, 267, 267, 268, 268, \n\t267, 268, 268, 268, 268, 268, 267, 268, \n\t268, 267, 268, 267, 268, 268, 268, 267, \n\t268, 267, 268, 268, 268, 268, 268, 267, \n\t268, 267, 268, 268, 268, 268, 267, 268, \n\t267, 297, 298, 299, 300, 301, 302, 303, \n\t304, 305, 306, 307, 308, 309, 310, 311, \n\t312, 313, 314, 315, 316, 317, 267, 268, \n\t268, 267, 268, 268, 268, 267, 268, 268, \n\t268, 268, 267, 268, 267, 268, 268, 267, \n\t268, 268, 267, 268, 267, 267, 267, 268, \n\t268, 267, 268, 268, 267, 268, 268, 267, \n\t268, 267, 268, 268, 268, 268, 268, 267, \n\t268, 267, 268, 268, 267, 267, 267, 268, \n\t268, 268, 267, 268, 267, 268, 267, 268, \n\t268, 268, 268, 268, 267, 268, 268, 267, \n\t318, 319, 320, 321, 322, 267, 268, 323, \n\t267, 318, 319, 324, 320, 321, 322, 267, \n\t268, 267, 268, 267, 268, 267, 268, 267, \n\t268, 267, 325, 326, 267, 268, 267, 268, \n\t267, 327, 328, 329, 330, 331, 332, 333, \n\t334, 335, 336, 337, 338, 339, 340, 341, \n\t267, 268, 268, 267, 268, 267, 268, 267, \n\t268, 268, 268, 268, 267, 268, 268, 267, \n\t267, 267, 268, 268, 267, 268, 267, 268, \n\t268, 267, 267, 267, 268, 268, 267, 268, \n\t268, 268, 267, 268, 268, 268, 268, 267, \n\t268, 268, 268, 267, 268, 268, 267, 342, \n\t343, 328, 267, 268, 267, 268, 268, 267, \n\t344, 345, 346, 347, 348, 349, 350, 267, \n\t351, 352, 353, 354, 355, 267, 268, 267, \n\t268, 267, 268, 267, 268, 268, 268, 268, \n\t268, 267, 268, 267, 356, 357, 358, 359, \n\t360, 361, 362, 363, 364, 365, 366, 367, \n\t368, 369, 370, 371, 372, 369, 373, 374, \n\t375, 376, 377, 267, 268, 268, 267, 267, \n\t268, 267, 267, 268, 268, 268, 267, 268, \n\t267, 268, 268, 267, 267, 267, 268, 268, \n\t268, 267, 268, 267, 268, 268, 268, 267, \n\t268, 268, 268, 268, 268, 268, 268, 267, \n\t268, 267, 268, 267, 268, 267, 267, 268, \n\t268, 268, 267, 267, 267, 268, 267, 268, \n\t268, 267, 268, 267, 268, 268, 267, 268, \n\t268, 267, 378, 379, 380, 381, 267, 268, \n\t267, 268, 267, 268, 267, 268, 267, 382, \n\t267, 268, 267, 383, 384, 385, 386, 387, \n\t388, 267, 268, 268, 268, 267, 267, 267, \n\t267, 268, 268, 267, 268, 268, 267, 267, \n\t267, 268, 268, 268, 268, 267, 389, 390, \n\t391, 267, 268, 268, 268, 268, 268, 267, \n\t268, 267, 268, 267, 392, 393, 394, 267, \n\t395, 267, 395, 267, 267, 395, 395, 267, \n\t395, 395, 267, 395, 395, 395, 267, 395, \n\t267, 395, 395, 267, 395, 395, 395, 395, \n\t267, 395, 395, 267, 267, 395, 395, 267, \n\t395, 267, 396, 397, 398, 399, 400, 401, \n\t402, 404, 405, 406, 407, 408, 409, 410, \n\t411, 412, 413, 414, 415, 287, 416, 417, \n\t418, 419, 420, 421, 422, 423, 424, 403, \n\t267, 395, 395, 395, 395, 267, 395, 267, \n\t395, 395, 267, 268, 268, 267, 267, 268, \n\t395, 395, 267, 395, 395, 267, 395, 267, \n\t268, 395, 395, 395, 268, 268, 267, 395, \n\t395, 395, 267, 267, 267, 395, 267, 268, \n\t268, 395, 395, 268, 267, 395, 395, 395, \n\t267, 395, 267, 395, 267, 395, 267, 268, \n\t267, 267, 395, 395, 267, 395, 267, 268, \n\t395, 395, 268, 395, 267, 268, 395, 395, \n\t268, 268, 395, 395, 267, 395, 395, 268, \n\t267, 395, 395, 395, 268, 268, 268, 267, \n\t395, 268, 395, 267, 267, 267, 268, 267, \n\t267, 267, 395, 395, 395, 268, 395, 268, \n\t267, 395, 395, 268, 268, 268, 395, 395, \n\t395, 267, 395, 395, 268, 268, 267, 267, \n\t267, 395, 395, 395, 267, 395, 267, 268, \n\t395, 395, 395, 395, 268, 395, 268, 268, \n\t267, 395, 268, 395, 267, 395, 267, 395, \n\t268, 395, 395, 267, 395, 267, 395, 395, \n\t395, 395, 268, 267, 268, 395, 267, 395, \n\t395, 395, 395, 267, 395, 267, 425, 426, \n\t427, 428, 429, 430, 431, 432, 433, 434, \n\t435, 436, 437, 438, 439, 440, 441, 442, \n\t443, 444, 445, 267, 268, 395, 395, 268, \n\t395, 267, 268, 395, 395, 395, 267, 395, \n\t268, 395, 395, 395, 267, 395, 267, 395, \n\t395, 267, 395, 395, 267, 268, 395, 268, \n\t267, 395, 395, 395, 267, 268, 395, 267, \n\t395, 395, 267, 395, 395, 268, 395, 268, \n\t268, 395, 267, 395, 395, 268, 267, 395, \n\t395, 395, 395, 268, 395, 395, 268, 395, \n\t267, 395, 267, 268, 268, 268, 395, 395, \n\t268, 267, 395, 267, 395, 267, 268, 268, \n\t268, 268, 395, 395, 268, 395, 267, 268, \n\t395, 395, 268, 395, 268, 267, 268, 395, \n\t268, 395, 267, 268, 395, 395, 395, 395, \n\t268, 395, 267, 395, 395, 267, 446, 447, \n\t448, 449, 450, 267, 395, 323, 267, 395, \n\t267, 395, 267, 395, 267, 395, 267, 451, \n\t452, 267, 395, 267, 395, 267, 453, 454, \n\t455, 456, 331, 457, 458, 459, 460, 461, \n\t462, 463, 464, 465, 466, 267, 395, 395, \n\t267, 395, 267, 395, 267, 395, 395, 395, \n\t268, 268, 395, 267, 395, 267, 395, 267, \n\t268, 395, 267, 395, 268, 267, 268, 395, \n\t395, 395, 268, 395, 268, 267, 395, 267, \n\t268, 395, 268, 395, 268, 395, 267, 395, \n\t395, 268, 395, 267, 395, 395, 395, 395, \n\t267, 395, 268, 268, 395, 395, 268, 267, \n\t395, 395, 268, 395, 268, 267, 467, 468, \n\t454, 267, 395, 267, 395, 395, 267, 469, \n\t470, 471, 472, 473, 474, 475, 267, 476, \n\t477, 478, 479, 480, 267, 395, 267, 395, \n\t267, 395, 267, 395, 395, 395, 395, 395, \n\t267, 395, 267, 481, 482, 483, 484, 485, \n\t486, 487, 488, 489, 490, 491, 492, 493, \n\t494, 495, 496, 497, 498, 499, 500, 501, \n\t502, 503, 267, 395, 268, 395, 267, 267, \n\t395, 268, 267, 268, 268, 267, 395, 268, \n\t395, 395, 267, 395, 267, 268, 395, 268, \n\t395, 268, 267, 267, 395, 267, 268, 395, \n\t395, 268, 395, 268, 395, 267, 395, 268, \n\t395, 267, 395, 395, 268, 395, 268, 267, \n\t395, 395, 268, 268, 268, 268, 395, 395, \n\t267, 268, 395, 267, 268, 268, 395, 267, \n\t395, 268, 395, 268, 395, 268, 395, 267, \n\t268, 267, 395, 395, 268, 268, 395, 268, \n\t395, 267, 267, 267, 395, 395, 268, 395, \n\t268, 395, 267, 267, 395, 268, 268, 395, \n\t268, 395, 267, 268, 395, 268, 395, 267, \n\t268, 268, 395, 395, 267, 268, 268, 268, \n\t395, 395, 267, 504, 505, 380, 506, 267, \n\t395, 267, 395, 267, 395, 267, 507, 267, \n\t395, 267, 508, 509, 510, 511, 512, 513, \n\t267, 268, 268, 395, 395, 395, 267, 267, \n\t267, 267, 395, 395, 267, 395, 395, 267, \n\t267, 267, 395, 395, 395, 395, 267, 514, \n\t515, 516, 267, 395, 395, 395, 395, 395, \n\t267, 395, 267, 395, 267, 517, 267, 268, \n\t267, 518, 267, 519, 520, 521, 523, 522, \n\t267, 395, 267, 267, 395, 395, 268, 267, \n\t268, 267, 524, 267, 525, 526, 527, 529, \n\t528, 267, 268, 267, 267, 268, 268, 344, \n\t345, 346, 347, 348, 349, 267, 268, 267, \n\t268, 268, 267, 266, 268, 268, 267, 266, \n\t268, 267, 266, 268, 267, 531, 532, 530, \n\t267, 266, 268, 267, 266, 268, 267, 533, \n\t534, 535, 536, 537, 530, 267, 538, 267, \n\t297, 298, 299, 533, 534, 539, 300, 301, \n\t302, 303, 304, 305, 306, 307, 308, 309, \n\t310, 311, 312, 313, 314, 315, 316, 317, \n\t267, 540, 538, 297, 298, 299, 541, 535, \n\t536, 300, 301, 302, 303, 304, 305, 306, \n\t307, 308, 309, 310, 311, 312, 313, 314, \n\t315, 316, 317, 267, 540, 267, 542, 540, \n\t297, 298, 299, 543, 536, 300, 301, 302, \n\t303, 304, 305, 306, 307, 308, 309, 310, \n\t311, 312, 313, 314, 315, 316, 317, 267, \n\t542, 267, 267, 542, 544, 267, 542, 267, \n\t545, 546, 267, 540, 267, 267, 542, 267, \n\t540, 267, 540, 327, 328, 329, 330, 331, \n\t332, 333, 547, 335, 336, 337, 338, 339, \n\t340, 341, 549, 550, 551, 552, 553, 554, \n\t549, 550, 551, 552, 553, 554, 549, 548, \n\t555, 267, 268, 538, 267, 556, 556, 556, \n\t542, 267, 297, 298, 299, 541, 539, 300, \n\t301, 302, 303, 304, 305, 306, 307, 308, \n\t309, 310, 311, 312, 313, 314, 315, 316, \n\t317, 267, 545, 557, 267, 267, 540, 556, \n\t556, 542, 556, 556, 542, 556, 556, 556, \n\t542, 556, 556, 542, 556, 556, 542, 556, \n\t556, 267, 542, 542, 551, 552, 553, 554, \n\t548, 549, 551, 552, 553, 554, 548, 549, \n\t551, 552, 553, 554, 548, 549, 551, 552, \n\t553, 554, 548, 549, 551, 552, 553, 554, \n\t548, 549, 551, 552, 553, 554, 548, 549, \n\t551, 552, 553, 554, 548, 549, 551, 552, \n\t553, 554, 548, 549, 551, 552, 553, 554, \n\t548, 549, 550, 555, 552, 553, 554, 548, \n\t549, 550, 552, 553, 554, 548, 549, 550, \n\t552, 553, 554, 548, 549, 550, 552, 553, \n\t554, 548, 549, 550, 552, 553, 554, 548, \n\t549, 550, 552, 553, 554, 548, 549, 550, \n\t552, 553, 554, 548, 549, 550, 552, 553, \n\t554, 548, 549, 550, 552, 553, 554, 548, \n\t549, 550, 551, 555, 553, 554, 548, 549, \n\t550, 551, 553, 554, 548, 549, 550, 551, \n\t553, 554, 548, 549, 550, 551, 553, 554, \n\t548, 549, 550, 551, 553, 558, 557, 552, \n\t267, 555, 556, 267, 540, 542, 268, 268, \n\t267, 559, 560, 561, 562, 563, 530, 267, \n\t268, 323, 268, 268, 268, 267, 268, 268, \n\t267, 395, 268, 267, 395, 268, 267, 268, \n\t395, 268, 267, 530, 267, 564, 566, 567, \n\t568, 569, 570, 571, 566, 567, 568, 569, \n\t570, 571, 566, 530, 565, 555, 267, 268, \n\t538, 268, 267, 540, 540, 540, 542, 267, \n\t540, 540, 542, 540, 540, 542, 540, 540, \n\t540, 542, 540, 540, 542, 540, 540, 542, \n\t540, 540, 267, 542, 568, 569, 570, 571, \n\t565, 566, 568, 569, 570, 571, 565, 566, \n\t568, 569, 570, 571, 565, 566, 568, 569, \n\t570, 571, 565, 566, 568, 569, 570, 571, \n\t565, 566, 568, 569, 570, 571, 565, 566, \n\t568, 569, 570, 571, 565, 566, 568, 569, \n\t570, 571, 565, 566, 568, 569, 570, 571, \n\t565, 566, 567, 555, 569, 570, 571, 565, \n\t566, 567, 569, 570, 571, 565, 566, 567, \n\t569, 570, 571, 565, 566, 567, 569, 570, \n\t571, 565, 566, 567, 569, 570, 571, 565, \n\t566, 567, 569, 570, 571, 565, 566, 567, \n\t569, 570, 571, 565, 566, 567, 569, 570, \n\t571, 565, 566, 567, 569, 570, 571, 565, \n\t566, 567, 568, 555, 570, 571, 565, 566, \n\t567, 568, 570, 571, 565, 566, 567, 568, \n\t570, 571, 565, 566, 567, 568, 570, 571, \n\t565, 566, 567, 568, 570, 572, 573, 569, \n\t267, 555, 540, 268, 540, 542, 268, 542, \n\t268, 267, 540, 574, 575, 530, 267, 268, \n\t267, 268, 268, 268, 267, 577, 578, 579, \n\t580, 576, 267, 581, 582, 530, 267, 266, \n\t268, 267, 268, 266, 268, 267, 583, 530, \n\t267, 268, 268, 267, 584, 530, 267, 268, \n\t268, 267, 585, 586, 587, 588, 589, 590, \n\t591, 592, 593, 594, 595, 530, 267, 268, \n\t596, 267, 344, 345, 346, 347, 348, 349, \n\t597, 267, 598, 267, 268, 267, 395, 268, \n\t267, 268, 395, 268, 395, 268, 267, 395, \n\t395, 268, 395, 268, 395, 268, 395, 268, \n\t395, 268, 267, 268, 268, 395, 395, 268, \n\t267, 395, 395, 268, 267, 395, 268, 395, \n\t268, 267, 268, 395, 268, 395, 268, 267, \n\t395, 268, 395, 268, 267, 395, 268, 267, \n\t395, 395, 268, 268, 395, 268, 395, 268, \n\t395, 267, 576, 267, 599, 576, 267, 322, \n\t530, 600, 530, 267, 268, 267, 266, 3, \n\t1, 266, 3, 1, 602, 603, 601, 1, \n\t266, 3, 1, 266, 3, 1, 604, 605, \n\t606, 607, 608, 601, 1, 609, 610, 612, \n\t611, 611, 612, 612, 611, 612, 612, 611, \n\t612, 612, 612, 611, 612, 611, 612, 612, \n\t611, 612, 612, 612, 612, 611, 612, 612, \n\t611, 611, 612, 612, 611, 612, 611, 613, \n\t614, 615, 616, 617, 619, 620, 621, 623, \n\t624, 625, 626, 627, 628, 629, 630, 631, \n\t632, 633, 634, 635, 636, 637, 638, 639, \n\t640, 618, 622, 611, 612, 612, 612, 612, \n\t611, 612, 611, 612, 612, 611, 611, 611, \n\t612, 611, 611, 611, 612, 612, 612, 612, \n\t611, 611, 611, 611, 611, 611, 612, 611, \n\t611, 611, 611, 611, 611, 612, 611, 611, \n\t611, 611, 612, 612, 612, 612, 611, 612, \n\t612, 612, 612, 612, 611, 612, 612, 611, \n\t612, 612, 612, 612, 611, 612, 612, 611, \n\t611, 611, 611, 611, 611, 612, 612, 612, \n\t612, 612, 612, 611, 612, 612, 611, 611, \n\t611, 611, 611, 611, 612, 612, 611, 612, \n\t612, 612, 612, 612, 611, 612, 612, 611, \n\t612, 611, 612, 612, 612, 611, 612, 611, \n\t612, 612, 612, 612, 612, 611, 612, 611, \n\t612, 612, 612, 612, 611, 612, 611, 641, \n\t642, 643, 644, 645, 646, 647, 648, 649, \n\t650, 651, 652, 653, 654, 655, 656, 657, \n\t658, 659, 660, 661, 611, 612, 612, 611, \n\t612, 612, 612, 611, 612, 612, 612, 612, \n\t611, 612, 611, 612, 612, 611, 612, 612, \n\t611, 612, 611, 611, 611, 612, 612, 611, \n\t612, 612, 611, 612, 612, 611, 612, 611, \n\t612, 612, 612, 612, 612, 611, 612, 611, \n\t612, 612, 611, 611, 611, 612, 612, 612, \n\t611, 612, 611, 612, 611, 612, 612, 612, \n\t612, 612, 611, 612, 612, 611, 662, 663, \n\t664, 665, 666, 611, 612, 667, 611, 662, \n\t663, 668, 664, 665, 666, 611, 612, 611, \n\t612, 611, 612, 611, 612, 611, 612, 611, \n\t669, 670, 611, 612, 611, 612, 611, 671, \n\t672, 673, 674, 675, 676, 677, 678, 679, \n\t680, 681, 682, 683, 684, 685, 611, 612, \n\t612, 611, 612, 611, 612, 611, 612, 612, \n\t612, 612, 611, 612, 612, 611, 611, 611, \n\t612, 612, 611, 612, 611, 612, 612, 611, \n\t611, 611, 612, 612, 611, 612, 612, 612, \n\t611, 612, 612, 612, 612, 611, 612, 612, \n\t612, 611, 612, 612, 611, 686, 687, 672, \n\t611, 612, 611, 612, 612, 611, 688, 689, \n\t690, 691, 692, 693, 694, 611, 695, 696, \n\t697, 698, 699, 611, 612, 611, 612, 611, \n\t612, 611, 612, 612, 612, 612, 612, 611, \n\t612, 611, 700, 701, 702, 703, 704, 705, \n\t706, 707, 708, 709, 710, 711, 712, 713, \n\t714, 715, 716, 713, 717, 718, 719, 720, \n\t721, 611, 612, 612, 611, 611, 612, 611, \n\t611, 612, 612, 612, 611, 612, 611, 612, \n\t612, 611, 611, 611, 612, 612, 612, 611, \n\t612, 611, 612, 612, 612, 611, 612, 612, \n\t612, 612, 612, 612, 612, 611, 612, 611, \n\t612, 611, 612, 611, 611, 612, 612, 612, \n\t611, 611, 611, 612, 611, 612, 612, 611, \n\t612, 611, 612, 612, 611, 612, 612, 611, \n\t722, 723, 724, 725, 611, 612, 611, 612, \n\t611, 612, 611, 612, 611, 726, 611, 612, \n\t611, 727, 728, 729, 730, 731, 732, 611, \n\t612, 612, 612, 611, 611, 611, 611, 612, \n\t612, 611, 612, 612, 611, 611, 611, 612, \n\t612, 612, 612, 611, 733, 734, 735, 611, \n\t612, 612, 612, 612, 612, 611, 612, 611, \n\t612, 611, 736, 737, 738, 611, 739, 611, \n\t739, 611, 611, 739, 739, 611, 739, 739, \n\t611, 739, 739, 739, 611, 739, 611, 739, \n\t739, 611, 739, 739, 739, 739, 611, 739, \n\t739, 611, 611, 739, 739, 611, 739, 611, \n\t740, 741, 742, 743, 744, 745, 746, 748, \n\t749, 750, 751, 752, 753, 754, 755, 756, \n\t757, 758, 759, 631, 760, 761, 762, 763, \n\t764, 765, 766, 767, 768, 747, 611, 739, \n\t739, 739, 739, 611, 739, 611, 739, 739, \n\t611, 612, 612, 611, 611, 612, 739, 739, \n\t611, 739, 739, 611, 739, 611, 612, 739, \n\t739, 739, 612, 612, 611, 739, 739, 739, \n\t611, 611, 611, 739, 611, 612, 612, 739, \n\t739, 612, 611, 739, 739, 739, 611, 739, \n\t611, 739, 611, 739, 611, 612, 611, 611, \n\t739, 739, 611, 739, 611, 612, 739, 739, \n\t612, 739, 611, 612, 739, 739, 612, 612, \n\t739, 739, 611, 739, 739, 612, 611, 739, \n\t739, 739, 612, 612, 612, 611, 739, 612, \n\t739, 611, 611, 611, 612, 611, 611, 611, \n\t739, 739, 739, 612, 739, 612, 611, 739, \n\t739, 612, 612, 612, 739, 739, 739, 611, \n\t739, 739, 612, 612, 611, 611, 611, 739, \n\t739, 739, 611, 739, 611, 612, 739, 739, \n\t739, 739, 612, 739, 612, 612, 611, 739, \n\t612, 739, 611, 739, 611, 739, 612, 739, \n\t739, 611, 739, 611, 739, 739, 739, 739, \n\t612, 611, 612, 739, 611, 739, 739, 739, \n\t739, 611, 739, 611, 769, 770, 771, 772, \n\t773, 774, 775, 776, 777, 778, 779, 780, \n\t781, 782, 783, 784, 785, 786, 787, 788, \n\t789, 611, 612, 739, 739, 612, 739, 611, \n\t612, 739, 739, 739, 611, 739, 612, 739, \n\t739, 739, 611, 739, 611, 739, 739, 611, \n\t739, 739, 611, 612, 739, 612, 611, 739, \n\t739, 739, 611, 612, 739, 611, 739, 739, \n\t611, 739, 739, 612, 739, 612, 612, 739, \n\t611, 739, 739, 612, 611, 739, 739, 739, \n\t739, 612, 739, 739, 612, 739, 611, 739, \n\t611, 612, 612, 612, 739, 739, 612, 611, \n\t739, 611, 739, 611, 612, 612, 612, 612, \n\t739, 739, 612, 739, 611, 612, 739, 739, \n\t612, 739, 612, 611, 612, 739, 612, 739, \n\t611, 612, 739, 739, 739, 739, 612, 739, \n\t611, 739, 739, 611, 790, 791, 792, 793, \n\t794, 611, 739, 667, 611, 739, 611, 739, \n\t611, 739, 611, 739, 611, 795, 796, 611, \n\t739, 611, 739, 611, 797, 798, 799, 800, \n\t675, 801, 802, 803, 804, 805, 806, 807, \n\t808, 809, 810, 611, 739, 739, 611, 739, \n\t611, 739, 611, 739, 739, 739, 612, 612, \n\t739, 611, 739, 611, 739, 611, 612, 739, \n\t611, 739, 612, 611, 612, 739, 739, 739, \n\t612, 739, 612, 611, 739, 611, 612, 739, \n\t612, 739, 612, 739, 611, 739, 739, 612, \n\t739, 611, 739, 739, 739, 739, 611, 739, \n\t612, 612, 739, 739, 612, 611, 739, 739, \n\t612, 739, 612, 611, 811, 812, 798, 611, \n\t739, 611, 739, 739, 611, 813, 814, 815, \n\t816, 817, 818, 819, 611, 820, 821, 822, \n\t823, 824, 611, 739, 611, 739, 611, 739, \n\t611, 739, 739, 739, 739, 739, 611, 739, \n\t611, 825, 826, 827, 828, 829, 830, 831, \n\t832, 833, 834, 835, 836, 837, 838, 839, \n\t840, 841, 842, 843, 844, 845, 846, 847, \n\t611, 739, 612, 739, 611, 611, 739, 612, \n\t611, 612, 612, 611, 739, 612, 739, 739, \n\t611, 739, 611, 612, 739, 612, 739, 612, \n\t611, 611, 739, 611, 612, 739, 739, 612, \n\t739, 612, 739, 611, 739, 612, 739, 611, \n\t739, 739, 612, 739, 612, 611, 739, 739, \n\t612, 612, 612, 612, 739, 739, 611, 612, \n\t739, 611, 612, 612, 739, 611, 739, 612, \n\t739, 612, 739, 612, 739, 611, 612, 611, \n\t739, 739, 612, 612, 739, 612, 739, 611, \n\t611, 611, 739, 739, 612, 739, 612, 739, \n\t611, 611, 739, 612, 612, 739, 612, 739, \n\t611, 612, 739, 612, 739, 611, 612, 612, \n\t739, 739, 611, 612, 612, 612, 739, 739, \n\t611, 848, 849, 724, 850, 611, 739, 611, \n\t739, 611, 739, 611, 851, 611, 739, 611, \n\t852, 853, 854, 855, 856, 857, 611, 612, \n\t612, 739, 739, 739, 611, 611, 611, 611, \n\t739, 739, 611, 739, 739, 611, 611, 611, \n\t739, 739, 739, 739, 611, 858, 859, 860, \n\t611, 739, 739, 739, 739, 739, 611, 739, \n\t611, 739, 611, 861, 611, 612, 611, 862, \n\t611, 863, 864, 865, 867, 866, 611, 739, \n\t611, 611, 739, 739, 612, 611, 612, 611, \n\t868, 611, 869, 870, 871, 873, 872, 611, \n\t612, 611, 611, 612, 612, 688, 689, 690, \n\t691, 692, 693, 611, 641, 642, 643, 604, \n\t605, 874, 644, 645, 646, 647, 648, 649, \n\t650, 651, 652, 653, 654, 655, 656, 657, \n\t658, 659, 660, 661, 611, 875, 610, 641, \n\t642, 643, 876, 606, 607, 644, 645, 646, \n\t647, 648, 649, 650, 651, 652, 653, 654, \n\t655, 656, 657, 658, 659, 660, 661, 611, \n\t875, 611, 877, 875, 641, 642, 643, 878, \n\t607, 644, 645, 646, 647, 648, 649, 650, \n\t651, 652, 653, 654, 655, 656, 657, 658, \n\t659, 660, 661, 611, 877, 611, 609, 877, \n\t879, 611, 877, 611, 880, 881, 611, 875, \n\t611, 611, 877, 611, 875, 611, 875, 671, \n\t672, 673, 674, 675, 676, 677, 882, 679, \n\t680, 681, 682, 683, 684, 685, 884, 885, \n\t886, 887, 888, 889, 884, 885, 886, 887, \n\t888, 889, 884, 883, 890, 611, 612, 610, \n\t611, 891, 891, 891, 877, 611, 641, 642, \n\t643, 876, 874, 644, 645, 646, 647, 648, \n\t649, 650, 651, 652, 653, 654, 655, 656, \n\t657, 658, 659, 660, 661, 611, 880, 892, \n\t611, 611, 875, 891, 891, 877, 891, 891, \n\t877, 891, 891, 891, 877, 891, 891, 877, \n\t891, 891, 877, 891, 891, 611, 877, 877, \n\t886, 887, 888, 889, 883, 884, 886, 887, \n\t888, 889, 883, 884, 886, 887, 888, 889, \n\t883, 884, 886, 887, 888, 889, 883, 884, \n\t886, 887, 888, 889, 883, 884, 886, 887, \n\t888, 889, 883, 884, 886, 887, 888, 889, \n\t883, 884, 886, 887, 888, 889, 883, 884, \n\t886, 887, 888, 889, 883, 884, 885, 890, \n\t887, 888, 889, 883, 884, 885, 887, 888, \n\t889, 883, 884, 885, 887, 888, 889, 883, \n\t884, 885, 887, 888, 889, 883, 884, 885, \n\t887, 888, 889, 883, 884, 885, 887, 888, \n\t889, 883, 884, 885, 887, 888, 889, 883, \n\t884, 885, 887, 888, 889, 883, 884, 885, \n\t887, 888, 889, 883, 884, 885, 886, 890, \n\t888, 889, 883, 884, 885, 886, 888, 889, \n\t883, 884, 885, 886, 888, 889, 883, 884, \n\t885, 886, 888, 889, 883, 884, 885, 886, \n\t888, 893, 892, 887, 611, 890, 891, 611, \n\t875, 877, 265, 3, 1, 894, 895, 896, \n\t897, 898, 601, 1, 265, 899, 3, 265, \n\t3, 265, 3, 1, 901, 900, 900, 901, \n\t901, 900, 901, 901, 900, 901, 901, 901, \n\t900, 901, 900, 901, 901, 900, 901, 901, \n\t901, 901, 900, 901, 901, 900, 900, 901, \n\t901, 900, 901, 900, 902, 903, 904, 905, \n\t906, 908, 909, 910, 912, 913, 914, 915, \n\t916, 917, 918, 919, 920, 921, 922, 923, \n\t924, 925, 926, 927, 928, 929, 907, 911, \n\t900, 901, 901, 901, 901, 900, 901, 900, \n\t901, 901, 900, 900, 900, 901, 900, 900, \n\t900, 901, 901, 901, 901, 900, 900, 900, \n\t900, 900, 900, 901, 900, 900, 900, 900, \n\t900, 900, 901, 900, 900, 900, 900, 901, \n\t901, 901, 901, 900, 901, 901, 901, 901, \n\t901, 900, 901, 901, 900, 901, 901, 901, \n\t901, 900, 901, 901, 900, 900, 900, 900, \n\t900, 900, 901, 901, 901, 901, 901, 901, \n\t900, 901, 901, 900, 900, 900, 900, 900, \n\t900, 901, 901, 900, 901, 901, 901, 901, \n\t901, 900, 901, 901, 900, 901, 900, 901, \n\t901, 901, 900, 901, 900, 901, 901, 901, \n\t901, 901, 900, 901, 900, 901, 901, 901, \n\t901, 900, 901, 900, 930, 931, 932, 933, \n\t934, 935, 936, 937, 938, 939, 940, 941, \n\t942, 943, 944, 945, 946, 947, 948, 949, \n\t950, 900, 901, 901, 900, 901, 901, 901, \n\t900, 901, 901, 901, 901, 900, 901, 900, \n\t901, 901, 900, 901, 901, 900, 901, 900, \n\t900, 900, 901, 901, 900, 901, 901, 900, \n\t901, 901, 900, 901, 900, 901, 901, 901, \n\t901, 901, 900, 901, 900, 901, 901, 900, \n\t900, 900, 901, 901, 901, 900, 901, 900, \n\t901, 900, 901, 901, 901, 901, 901, 900, \n\t901, 901, 900, 951, 952, 953, 954, 955, \n\t900, 901, 899, 900, 901, 900, 901, 900, \n\t901, 900, 901, 900, 956, 957, 900, 901, \n\t900, 901, 900, 958, 959, 960, 961, 962, \n\t963, 964, 965, 966, 967, 968, 969, 970, \n\t971, 972, 900, 901, 901, 900, 901, 900, \n\t901, 900, 901, 901, 901, 901, 900, 901, \n\t901, 900, 900, 900, 901, 901, 900, 901, \n\t900, 901, 901, 900, 900, 900, 901, 901, \n\t900, 901, 901, 901, 900, 901, 901, 901, \n\t901, 900, 901, 901, 901, 900, 901, 901, \n\t900, 973, 974, 959, 900, 901, 900, 901, \n\t901, 900, 975, 976, 977, 978, 979, 980, \n\t900, 981, 982, 983, 984, 985, 900, 901, \n\t900, 901, 900, 901, 900, 901, 901, 901, \n\t901, 901, 900, 901, 900, 986, 987, 988, \n\t989, 990, 991, 992, 993, 994, 995, 996, \n\t997, 998, 999, 1000, 1001, 1002, 999, 1003, \n\t1004, 1005, 1006, 1007, 900, 901, 901, 900, \n\t900, 901, 900, 900, 901, 901, 901, 900, \n\t901, 900, 901, 901, 900, 900, 900, 901, \n\t901, 901, 900, 901, 900, 901, 901, 901, \n\t900, 901, 901, 901, 901, 901, 901, 901, \n\t900, 901, 900, 901, 900, 901, 900, 900, \n\t901, 901, 901, 900, 900, 900, 901, 900, \n\t901, 901, 900, 901, 900, 901, 901, 900, \n\t901, 901, 900, 1008, 1009, 1010, 1011, 900, \n\t901, 900, 901, 900, 901, 900, 901, 900, \n\t1012, 900, 901, 900, 1013, 1014, 1015, 1016, \n\t1017, 1018, 900, 901, 901, 901, 900, 900, \n\t900, 900, 901, 901, 900, 901, 901, 900, \n\t900, 900, 901, 901, 901, 901, 900, 1019, \n\t1020, 1021, 900, 901, 901, 901, 901, 901, \n\t900, 901, 900, 901, 900, 1022, 900, 1023, \n\t1024, 1025, 1027, 1026, 900, 901, 900, 900, \n\t901, 901, 951, 952, 1028, 953, 954, 955, \n\t900, 901, 900, 975, 976, 977, 978, 979, \n\t980, 1029, 900, 1030, 1031, 1032, 900, 1033, \n\t900, 1033, 900, 900, 1033, 1033, 900, 1033, \n\t1033, 900, 1033, 1033, 1033, 900, 1033, 900, \n\t1033, 1033, 900, 1033, 1033, 1033, 1033, 900, \n\t1033, 1033, 900, 900, 1033, 1033, 900, 1033, \n\t900, 1034, 1035, 1036, 1037, 1038, 1039, 1040, \n\t1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, \n\t1050, 1051, 1052, 1053, 920, 1054, 1055, 1056, \n\t1057, 1058, 1059, 1060, 1061, 1062, 1041, 900, \n\t1033, 1033, 1033, 1033, 900, 1033, 900, 1033, \n\t1033, 900, 901, 901, 900, 900, 901, 1033, \n\t1033, 900, 1033, 1033, 900, 1033, 900, 901, \n\t1033, 1033, 1033, 901, 901, 900, 1033, 1033, \n\t1033, 900, 900, 900, 1033, 900, 901, 901, \n\t1033, 1033, 901, 900, 1033, 1033, 1033, 900, \n\t1033, 900, 1033, 900, 1033, 900, 901, 900, \n\t900, 1033, 1033, 900, 1033, 900, 901, 1033, \n\t1033, 901, 1033, 900, 901, 1033, 1033, 901, \n\t901, 1033, 1033, 900, 1033, 1033, 901, 900, \n\t1033, 1033, 1033, 901, 901, 901, 900, 1033, \n\t901, 1033, 900, 900, 900, 901, 900, 900, \n\t900, 1033, 1033, 1033, 901, 1033, 901, 900, \n\t1033, 1033, 901, 901, 901, 1033, 1033, 1033, \n\t900, 1033, 1033, 901, 901, 900, 900, 900, \n\t1033, 1033, 1033, 900, 1033, 900, 901, 1033, \n\t1033, 1033, 1033, 901, 1033, 901, 901, 900, \n\t1033, 901, 1033, 900, 1033, 900, 1033, 901, \n\t1033, 1033, 900, 1033, 900, 1033, 1033, 1033, \n\t1033, 901, 900, 901, 1033, 900, 1033, 1033, \n\t1033, 1033, 900, 1033, 900, 1063, 1064, 1065, \n\t1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, \n\t1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, \n\t1082, 1083, 900, 901, 1033, 1033, 901, 1033, \n\t900, 901, 1033, 1033, 1033, 900, 1033, 901, \n\t1033, 1033, 1033, 900, 1033, 900, 1033, 1033, \n\t900, 1033, 1033, 900, 901, 1033, 901, 900, \n\t1033, 1033, 1033, 900, 901, 1033, 900, 1033, \n\t1033, 900, 1033, 1033, 901, 1033, 901, 901, \n\t1033, 900, 1033, 1033, 901, 900, 1033, 1033, \n\t1033, 1033, 901, 1033, 1033, 901, 1033, 900, \n\t1033, 900, 901, 901, 901, 1033, 1033, 901, \n\t900, 1033, 900, 1033, 900, 901, 901, 901, \n\t901, 1033, 1033, 901, 1033, 900, 901, 1033, \n\t1033, 901, 1033, 901, 900, 901, 1033, 901, \n\t1033, 900, 901, 1033, 1033, 1033, 1033, 901, \n\t1033, 900, 1033, 1033, 900, 1084, 1085, 1086, \n\t1087, 1088, 900, 1033, 899, 900, 1033, 900, \n\t1033, 900, 1033, 900, 1033, 900, 1089, 1090, \n\t900, 1033, 900, 1033, 900, 1091, 1092, 1093, \n\t1094, 962, 1095, 1096, 1097, 1098, 1099, 1100, \n\t1101, 1102, 1103, 1104, 900, 1033, 1033, 900, \n\t1033, 900, 1033, 900, 1033, 1033, 1033, 901, \n\t901, 1033, 900, 1033, 900, 1033, 900, 901, \n\t1033, 900, 1033, 901, 900, 901, 1033, 1033, \n\t1033, 901, 1033, 901, 900, 1033, 900, 901, \n\t1033, 901, 1033, 901, 1033, 900, 1033, 1033, \n\t901, 1033, 900, 1033, 1033, 1033, 1033, 900, \n\t1033, 901, 901, 1033, 1033, 901, 900, 1033, \n\t1033, 901, 1033, 901, 900, 1105, 1106, 1092, \n\t900, 1033, 900, 1033, 1033, 900, 1107, 1108, \n\t1109, 1110, 1111, 1112, 1113, 900, 1114, 1115, \n\t1116, 1117, 1118, 900, 1033, 900, 1033, 900, \n\t1033, 900, 1033, 1033, 1033, 1033, 1033, 900, \n\t1033, 900, 1119, 1120, 1121, 1122, 1123, 1124, \n\t1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, \n\t1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, \n\t1141, 900, 1033, 901, 1033, 900, 900, 1033, \n\t901, 900, 901, 901, 900, 1033, 901, 1033, \n\t1033, 900, 1033, 900, 901, 1033, 901, 1033, \n\t901, 900, 900, 1033, 900, 901, 1033, 1033, \n\t901, 1033, 901, 1033, 900, 1033, 901, 1033, \n\t900, 1033, 1033, 901, 1033, 901, 900, 1033, \n\t1033, 901, 901, 901, 901, 1033, 1033, 900, \n\t901, 1033, 900, 901, 901, 1033, 900, 1033, \n\t901, 1033, 901, 1033, 901, 1033, 900, 901, \n\t900, 1033, 1033, 901, 901, 1033, 901, 1033, \n\t900, 900, 900, 1033, 1033, 901, 1033, 901, \n\t1033, 900, 900, 1033, 901, 901, 1033, 901, \n\t1033, 900, 901, 1033, 901, 1033, 900, 901, \n\t901, 1033, 1033, 900, 901, 901, 901, 1033, \n\t1033, 900, 1142, 1143, 1010, 1144, 900, 1033, \n\t900, 1033, 900, 1033, 900, 1145, 900, 1033, \n\t900, 1146, 1147, 1148, 1149, 1150, 1151, 900, \n\t901, 901, 1033, 1033, 1033, 900, 900, 900, \n\t900, 1033, 1033, 900, 1033, 1033, 900, 900, \n\t900, 1033, 1033, 1033, 1033, 900, 1152, 1153, \n\t1154, 900, 1033, 1033, 1033, 1033, 1033, 900, \n\t1033, 900, 1033, 900, 1155, 900, 901, 900, \n\t1156, 900, 1157, 1158, 1159, 1161, 1160, 900, \n\t1033, 900, 900, 1033, 1033, 901, 900, 901, \n\t900, 3, 265, 3, 1, 1162, 3, 1, \n\t1162, 1163, 1163, 1162, 1162, 1163, 1162, 1162, \n\t1163, 1162, 1162, 1162, 1163, 1162, 1163, 1162, \n\t1162, 1163, 1162, 1162, 1162, 1162, 1163, 1162, \n\t1162, 1163, 1163, 1162, 1162, 1163, 1162, 1163, \n\t1164, 1165, 1166, 1167, 1168, 1169, 1170, 1172, \n\t1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180, \n\t1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, \n\t1189, 1190, 1191, 1192, 1193, 1171, 1163, 1162, \n\t1162, 1162, 1162, 1163, 1162, 1163, 1162, 1162, \n\t1163, 1194, 1194, 1163, 1163, 1194, 1162, 1194, \n\t1163, 1163, 1194, 1194, 1163, 1194, 1194, 1163, \n\t1194, 1194, 1194, 1163, 1194, 1163, 1194, 1194, \n\t1163, 1194, 1194, 1194, 1194, 1163, 1194, 1194, \n\t1163, 1163, 1194, 1194, 1163, 1194, 1163, 1195, \n\t1196, 1197, 1198, 1199, 1201, 1202, 1203, 1205, \n\t1206, 1207, 1208, 1209, 1210, 1211, 1212, 1184, \n\t1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, \n\t1221, 1200, 1204, 1163, 1194, 1194, 1194, 1194, \n\t1163, 1194, 1163, 1194, 1194, 1163, 1163, 1163, \n\t1194, 1163, 1163, 1163, 1194, 1194, 1194, 1194, \n\t1163, 1163, 1163, 1163, 1163, 1163, 1194, 1163, \n\t1163, 1163, 1163, 1163, 1163, 1194, 1163, 1163, \n\t1163, 1163, 1194, 1194, 1194, 1194, 1163, 1194, \n\t1194, 1194, 1194, 1194, 1163, 1194, 1194, 1163, \n\t1194, 1194, 1194, 1194, 1163, 1194, 1194, 1163, \n\t1163, 1163, 1163, 1163, 1163, 1194, 1194, 1194, \n\t1194, 1194, 1194, 1163, 1194, 1194, 1163, 1163, \n\t1163, 1163, 1163, 1163, 1194, 1194, 1163, 1194, \n\t1194, 1194, 1194, 1194, 1163, 1194, 1194, 1163, \n\t1194, 1163, 1194, 1194, 1194, 1163, 1194, 1163, \n\t1194, 1194, 1194, 1194, 1194, 1163, 1194, 1163, \n\t1194, 1194, 1194, 1194, 1163, 1194, 1163, 1222, \n\t1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, \n\t1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, \n\t1239, 1240, 1241, 1242, 1163, 1194, 1194, 1163, \n\t1194, 1194, 1194, 1163, 1194, 1194, 1194, 1194, \n\t1163, 1194, 1163, 1194, 1194, 1163, 1194, 1194, \n\t1163, 1194, 1163, 1163, 1163, 1194, 1194, 1163, \n\t1194, 1194, 1163, 1194, 1194, 1163, 1194, 1163, \n\t1194, 1194, 1194, 1194, 1194, 1163, 1194, 1163, \n\t1194, 1194, 1163, 1163, 1163, 1194, 1194, 1194, \n\t1163, 1194, 1163, 1194, 1163, 1194, 1194, 1194, \n\t1194, 1194, 1163, 1194, 1194, 1163, 1243, 1244, \n\t1245, 1246, 1247, 1163, 1194, 1248, 1163, 1243, \n\t1244, 1249, 1245, 1246, 1247, 1163, 1194, 1163, \n\t1194, 1163, 1194, 1163, 1194, 1163, 1194, 1163, \n\t1250, 1251, 1163, 1194, 1163, 1194, 1163, 1252, \n\t1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, \n\t1261, 1262, 1263, 1264, 1265, 1266, 1163, 1194, \n\t1194, 1163, 1194, 1163, 1194, 1163, 1194, 1194, \n\t1194, 1194, 1163, 1194, 1194, 1163, 1163, 1163, \n\t1194, 1194, 1163, 1194, 1163, 1194, 1194, 1163, \n\t1163, 1163, 1194, 1194, 1163, 1194, 1194, 1194, \n\t1163, 1194, 1194, 1194, 1194, 1163, 1194, 1194, \n\t1194, 1163, 1194, 1194, 1163, 1267, 1268, 1253, \n\t1163, 1194, 1163, 1194, 1194, 1163, 1269, 1270, \n\t1271, 1272, 1273, 1274, 1275, 1163, 1276, 1277, \n\t1278, 1279, 1280, 1163, 1194, 1163, 1194, 1163, \n\t1194, 1163, 1194, 1194, 1194, 1194, 1194, 1163, \n\t1194, 1163, 1281, 1282, 1283, 1284, 1285, 1286, \n\t1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, \n\t1295, 1296, 1297, 1294, 1298, 1299, 1300, 1301, \n\t1302, 1163, 1194, 1194, 1163, 1163, 1194, 1163, \n\t1163, 1194, 1194, 1194, 1163, 1194, 1163, 1194, \n\t1194, 1163, 1163, 1163, 1194, 1194, 1194, 1163, \n\t1194, 1163, 1194, 1194, 1194, 1163, 1194, 1194, \n\t1194, 1194, 1194, 1194, 1194, 1163, 1194, 1163, \n\t1194, 1163, 1194, 1163, 1163, 1194, 1194, 1194, \n\t1163, 1163, 1163, 1194, 1163, 1194, 1194, 1163, \n\t1194, 1163, 1194, 1194, 1163, 1194, 1194, 1163, \n\t1303, 1304, 1305, 1306, 1163, 1194, 1163, 1194, \n\t1163, 1194, 1163, 1194, 1163, 1307, 1163, 1194, \n\t1163, 1308, 1309, 1310, 1311, 1312, 1313, 1163, \n\t1194, 1194, 1194, 1163, 1163, 1163, 1163, 1194, \n\t1194, 1163, 1194, 1194, 1163, 1163, 1163, 1194, \n\t1194, 1194, 1194, 1163, 1314, 1315, 1316, 1163, \n\t1194, 1194, 1194, 1194, 1194, 1163, 1194, 1163, \n\t1194, 1163, 1317, 1318, 1319, 1163, 1162, 1163, \n\t1194, 1163, 1194, 1163, 1320, 1163, 1321, 1322, \n\t1323, 1325, 1324, 1163, 1194, 1163, 1163, 1194, \n\t1194, 1269, 1270, 1271, 1272, 1273, 1274, 1163, \n\t1162, 1163, 1162, 1162, 1163, 1162, 1163, 1194, \n\t1162, 1162, 1162, 1194, 1194, 1163, 1162, 1162, \n\t1162, 1163, 1163, 1163, 1162, 1163, 1194, 1194, \n\t1162, 1162, 1194, 1163, 1162, 1162, 1162, 1163, \n\t1162, 1163, 1162, 1163, 1162, 1163, 1194, 1163, \n\t1163, 1162, 1162, 1163, 1162, 1163, 1194, 1162, \n\t1162, 1194, 1162, 1163, 1194, 1162, 1162, 1194, \n\t1194, 1162, 1162, 1163, 1162, 1162, 1194, 1163, \n\t1162, 1162, 1162, 1194, 1194, 1194, 1163, 1162, \n\t1194, 1162, 1163, 1163, 1163, 1194, 1163, 1163, \n\t1163, 1162, 1162, 1162, 1194, 1162, 1194, 1163, \n\t1162, 1162, 1194, 1194, 1194, 1162, 1162, 1162, \n\t1163, 1162, 1162, 1194, 1194, 1163, 1163, 1163, \n\t1162, 1162, 1162, 1163, 1162, 1163, 1194, 1162, \n\t1162, 1162, 1162, 1194, 1162, 1194, 1194, 1163, \n\t1162, 1194, 1162, 1163, 1162, 1163, 1162, 1194, \n\t1162, 1162, 1163, 1162, 1163, 1162, 1162, 1162, \n\t1162, 1194, 1163, 1194, 1162, 1163, 1162, 1162, \n\t1162, 1162, 1163, 1162, 1163, 1326, 1327, 1328, \n\t1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, \n\t1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, \n\t1345, 1346, 1163, 1194, 1162, 1162, 1194, 1162, \n\t1163, 1194, 1162, 1162, 1162, 1163, 1162, 1194, \n\t1162, 1162, 1162, 1163, 1162, 1163, 1162, 1162, \n\t1163, 1162, 1162, 1163, 1194, 1162, 1194, 1163, \n\t1162, 1162, 1162, 1163, 1194, 1162, 1163, 1162, \n\t1162, 1163, 1162, 1162, 1194, 1162, 1194, 1194, \n\t1162, 1163, 1162, 1162, 1194, 1163, 1162, 1162, \n\t1162, 1162, 1194, 1162, 1162, 1194, 1162, 1163, \n\t1162, 1163, 1194, 1194, 1194, 1162, 1162, 1194, \n\t1163, 1162, 1163, 1162, 1163, 1194, 1194, 1194, \n\t1194, 1162, 1162, 1194, 1162, 1163, 1194, 1162, \n\t1162, 1194, 1162, 1194, 1163, 1194, 1162, 1194, \n\t1162, 1163, 1194, 1162, 1162, 1162, 1162, 1194, \n\t1162, 1163, 1162, 1162, 1163, 1347, 1348, 1349, \n\t1350, 1351, 1163, 1162, 1248, 1163, 1162, 1163, \n\t1162, 1163, 1162, 1163, 1162, 1163, 1352, 1353, \n\t1163, 1162, 1163, 1162, 1163, 1354, 1355, 1356, \n\t1357, 1256, 1358, 1359, 1360, 1361, 1362, 1363, \n\t1364, 1365, 1366, 1367, 1163, 1162, 1162, 1163, \n\t1162, 1163, 1162, 1163, 1162, 1162, 1162, 1194, \n\t1194, 1162, 1163, 1162, 1163, 1162, 1163, 1194, \n\t1162, 1163, 1162, 1194, 1163, 1194, 1162, 1162, \n\t1162, 1194, 1162, 1194, 1163, 1162, 1163, 1194, \n\t1162, 1194, 1162, 1194, 1162, 1163, 1162, 1162, \n\t1194, 1162, 1163, 1162, 1162, 1162, 1162, 1163, \n\t1162, 1194, 1194, 1162, 1162, 1194, 1163, 1162, \n\t1162, 1194, 1162, 1194, 1163, 1368, 1369, 1355, \n\t1163, 1162, 1163, 1162, 1162, 1163, 1370, 1371, \n\t1372, 1373, 1374, 1375, 1376, 1163, 1377, 1378, \n\t1379, 1380, 1381, 1163, 1162, 1163, 1162, 1163, \n\t1162, 1163, 1162, 1162, 1162, 1162, 1162, 1163, \n\t1162, 1163, 1382, 1383, 1384, 1385, 1386, 1387, \n\t1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, \n\t1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, \n\t1404, 1163, 1162, 1194, 1162, 1163, 1163, 1162, \n\t1194, 1163, 1194, 1194, 1163, 1162, 1194, 1162, \n\t1162, 1163, 1162, 1163, 1194, 1162, 1194, 1162, \n\t1194, 1163, 1163, 1162, 1163, 1194, 1162, 1162, \n\t1194, 1162, 1194, 1162, 1163, 1162, 1194, 1162, \n\t1163, 1162, 1162, 1194, 1162, 1194, 1163, 1162, \n\t1162, 1194, 1194, 1194, 1194, 1162, 1162, 1163, \n\t1194, 1162, 1163, 1194, 1194, 1162, 1163, 1162, \n\t1194, 1162, 1194, 1162, 1194, 1162, 1163, 1194, \n\t1163, 1162, 1162, 1194, 1194, 1162, 1194, 1162, \n\t1163, 1163, 1163, 1162, 1162, 1194, 1162, 1194, \n\t1162, 1163, 1163, 1162, 1194, 1194, 1162, 1194, \n\t1162, 1163, 1194, 1162, 1194, 1162, 1163, 1194, \n\t1194, 1162, 1162, 1163, 1194, 1194, 1194, 1162, \n\t1162, 1163, 1405, 1406, 1305, 1407, 1163, 1162, \n\t1163, 1162, 1163, 1162, 1163, 1408, 1163, 1162, \n\t1163, 1409, 1410, 1411, 1412, 1413, 1414, 1163, \n\t1194, 1194, 1162, 1162, 1162, 1163, 1163, 1163, \n\t1163, 1162, 1162, 1163, 1162, 1162, 1163, 1163, \n\t1163, 1162, 1162, 1162, 1162, 1163, 1415, 1416, \n\t1417, 1163, 1162, 1162, 1162, 1162, 1162, 1163, \n\t1162, 1163, 1162, 1163, 1418, 1163, 1194, 1163, \n\t1419, 1163, 1420, 1421, 1422, 1424, 1423, 1163, \n\t1162, 1163, 1163, 1162, 1162, 1162, 3, 1, \n\t3, 1162, 3, 1, 601, 1, 1425, 1427, \n\t1428, 1429, 1430, 1431, 1432, 1427, 1428, 1429, \n\t1430, 1431, 1432, 1427, 601, 1426, 890, 1, \n\t3, 610, 3, 1, 875, 875, 875, 877, \n\t1, 875, 875, 877, 875, 875, 877, 875, \n\t875, 875, 877, 875, 875, 877, 875, 875, \n\t877, 875, 875, 1, 877, 1429, 1430, 1431, \n\t1432, 1426, 1427, 1429, 1430, 1431, 1432, 1426, \n\t1427, 1429, 1430, 1431, 1432, 1426, 1427, 1429, \n\t1430, 1431, 1432, 1426, 1427, 1429, 1430, 1431, \n\t1432, 1426, 1427, 1429, 1430, 1431, 1432, 1426, \n\t1427, 1429, 1430, 1431, 1432, 1426, 1427, 1429, \n\t1430, 1431, 1432, 1426, 1427, 1429, 1430, 1431, \n\t1432, 1426, 1427, 1428, 890, 1430, 1431, 1432, \n\t1426, 1427, 1428, 1430, 1431, 1432, 1426, 1427, \n\t1428, 1430, 1431, 1432, 1426, 1427, 1428, 1430, \n\t1431, 1432, 1426, 1427, 1428, 1430, 1431, 1432, \n\t1426, 1427, 1428, 1430, 1431, 1432, 1426, 1427, \n\t1428, 1430, 1431, 1432, 1426, 1427, 1428, 1430, \n\t1431, 1432, 1426, 1427, 1428, 1430, 1431, 1432, \n\t1426, 1427, 1428, 1429, 890, 1431, 1432, 1426, \n\t1427, 1428, 1429, 1431, 1432, 1426, 1427, 1428, \n\t1429, 1431, 1432, 1426, 1427, 1428, 1429, 1431, \n\t1432, 1426, 1427, 1428, 1429, 1431, 1433, 1434, \n\t1435, 1437, 1430, 1436, 1, 890, 875, 3, \n\t875, 877, 3, 877, 3, 1, 875, 1, \n\t265, 265, 1, 265, 1438, 1439, 601, 1, \n\t265, 3, 1, 3, 3, 265, 3, 1, \n\t1441, 1442, 1443, 1444, 1440, 1, 1445, 1446, \n\t601, 1, 266, 3, 1, 3, 266, 3, \n\t1, 1447, 601, 1, 3, 265, 3, 1, \n\t1448, 601, 1, 3, 265, 3, 1, 1449, \n\t1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, \n\t1458, 1459, 601, 1, 3, 1460, 1, 1462, \n\t1461, 1461, 1462, 1462, 1461, 1462, 1462, 1461, \n\t1462, 1462, 1462, 1461, 1462, 1461, 1462, 1462, \n\t1461, 1462, 1462, 1462, 1462, 1461, 1462, 1462, \n\t1461, 1461, 1462, 1462, 1461, 1462, 1461, 1463, \n\t1464, 1465, 1466, 1467, 1469, 1470, 1471, 1473, \n\t1474, 1475, 1476, 1477, 1478, 1479, 1480, 1481, \n\t1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, \n\t1490, 1468, 1472, 1461, 1462, 1462, 1462, 1462, \n\t1461, 1462, 1461, 1462, 1462, 1461, 1461, 1461, \n\t1462, 1461, 1461, 1461, 1462, 1462, 1462, 1462, \n\t1461, 1461, 1461, 1461, 1461, 1461, 1462, 1461, \n\t1461, 1461, 1461, 1461, 1461, 1462, 1461, 1461, \n\t1461, 1461, 1462, 1462, 1462, 1462, 1461, 1462, \n\t1462, 1462, 1462, 1462, 1461, 1462, 1462, 1461, \n\t1462, 1462, 1462, 1462, 1461, 1462, 1462, 1461, \n\t1461, 1461, 1461, 1461, 1461, 1462, 1462, 1462, \n\t1462, 1462, 1462, 1461, 1462, 1462, 1461, 1461, \n\t1461, 1461, 1461, 1461, 1462, 1462, 1461, 1462, \n\t1462, 1462, 1462, 1462, 1461, 1462, 1462, 1461, \n\t1462, 1461, 1462, 1462, 1462, 1461, 1462, 1461, \n\t1462, 1462, 1462, 1462, 1462, 1461, 1462, 1461, \n\t1462, 1462, 1462, 1462, 1461, 1462, 1461, 1491, \n\t1492, 1493, 1494, 1495, 1496, 1497, 1498, 1499, \n\t1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, \n\t1508, 1509, 1510, 1511, 1461, 1462, 1462, 1461, \n\t1462, 1462, 1462, 1461, 1462, 1462, 1462, 1462, \n\t1461, 1462, 1461, 1462, 1462, 1461, 1462, 1462, \n\t1461, 1462, 1461, 1461, 1461, 1462, 1462, 1461, \n\t1462, 1462, 1461, 1462, 1462, 1461, 1462, 1461, \n\t1462, 1462, 1462, 1462, 1462, 1461, 1462, 1461, \n\t1462, 1462, 1461, 1461, 1461, 1462, 1462, 1462, \n\t1461, 1462, 1461, 1462, 1461, 1462, 1462, 1462, \n\t1462, 1462, 1461, 1462, 1462, 1461, 1512, 1513, \n\t1514, 1515, 1516, 1461, 1462, 1517, 1461, 1512, \n\t1513, 1518, 1514, 1515, 1516, 1461, 1462, 1461, \n\t1462, 1461, 1462, 1461, 1462, 1461, 1462, 1461, \n\t1519, 1520, 1461, 1462, 1461, 1462, 1461, 1521, \n\t1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, \n\t1530, 1531, 1532, 1533, 1534, 1535, 1461, 1462, \n\t1462, 1461, 1462, 1461, 1462, 1461, 1462, 1462, \n\t1462, 1462, 1461, 1462, 1462, 1461, 1461, 1461, \n\t1462, 1462, 1461, 1462, 1461, 1462, 1462, 1461, \n\t1461, 1461, 1462, 1462, 1461, 1462, 1462, 1462, \n\t1461, 1462, 1462, 1462, 1462, 1461, 1462, 1462, \n\t1462, 1461, 1462, 1462, 1461, 1536, 1537, 1522, \n\t1461, 1462, 1461, 1462, 1462, 1461, 1538, 1539, \n\t1540, 1541, 1542, 1543, 1544, 1461, 1545, 1546, \n\t1547, 1548, 1549, 1461, 1462, 1461, 1462, 1461, \n\t1462, 1461, 1462, 1462, 1462, 1462, 1462, 1461, \n\t1462, 1461, 1550, 1551, 1552, 1553, 1554, 1555, \n\t1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, \n\t1564, 1565, 1566, 1563, 1567, 1568, 1569, 1570, \n\t1571, 1461, 1462, 1462, 1461, 1461, 1462, 1461, \n\t1461, 1462, 1462, 1462, 1461, 1462, 1461, 1462, \n\t1462, 1461, 1461, 1461, 1462, 1462, 1462, 1461, \n\t1462, 1461, 1462, 1462, 1462, 1461, 1462, 1462, \n\t1462, 1462, 1462, 1462, 1462, 1461, 1462, 1461, \n\t1462, 1461, 1462, 1461, 1461, 1462, 1462, 1462, \n\t1461, 1461, 1461, 1462, 1461, 1462, 1462, 1461, \n\t1462, 1461, 1462, 1462, 1461, 1462, 1462, 1461, \n\t1572, 1573, 1574, 1575, 1461, 1462, 1461, 1462, \n\t1461, 1462, 1461, 1462, 1461, 1576, 1461, 1462, \n\t1461, 1577, 1578, 1579, 1580, 1581, 1582, 1461, \n\t1462, 1462, 1462, 1461, 1461, 1461, 1461, 1462, \n\t1462, 1461, 1462, 1462, 1461, 1461, 1461, 1462, \n\t1462, 1462, 1462, 1461, 1583, 1584, 1585, 1461, \n\t1462, 1462, 1462, 1462, 1462, 1461, 1462, 1461, \n\t1462, 1461, 1586, 1587, 1588, 1461, 1589, 1461, \n\t1589, 1461, 1461, 1589, 1589, 1461, 1589, 1589, \n\t1461, 1589, 1589, 1589, 1461, 1589, 1461, 1589, \n\t1589, 1461, 1589, 1589, 1589, 1589, 1461, 1589, \n\t1589, 1461, 1461, 1589, 1589, 1461, 1589, 1461, \n\t1590, 1591, 1592, 1593, 1594, 1595, 1596, 1598, \n\t1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, \n\t1607, 1608, 1609, 1481, 1610, 1611, 1612, 1613, \n\t1614, 1615, 1616, 1617, 1618, 1597, 1461, 1589, \n\t1589, 1589, 1589, 1461, 1589, 1461, 1589, 1589, \n\t1461, 1462, 1462, 1461, 1461, 1462, 1589, 1589, \n\t1461, 1589, 1589, 1461, 1589, 1461, 1462, 1589, \n\t1589, 1589, 1462, 1462, 1461, 1589, 1589, 1589, \n\t1461, 1461, 1461, 1589, 1461, 1462, 1462, 1589, \n\t1589, 1462, 1461, 1589, 1589, 1589, 1461, 1589, \n\t1461, 1589, 1461, 1589, 1461, 1462, 1461, 1461, \n\t1589, 1589, 1461, 1589, 1461, 1462, 1589, 1589, \n\t1462, 1589, 1461, 1462, 1589, 1589, 1462, 1462, \n\t1589, 1589, 1461, 1589, 1589, 1462, 1461, 1589, \n\t1589, 1589, 1462, 1462, 1462, 1461, 1589, 1462, \n\t1589, 1461, 1461, 1461, 1462, 1461, 1461, 1461, \n\t1589, 1589, 1589, 1462, 1589, 1462, 1461, 1589, \n\t1589, 1462, 1462, 1462, 1589, 1589, 1589, 1461, \n\t1589, 1589, 1462, 1462, 1461, 1461, 1461, 1589, \n\t1589, 1589, 1461, 1589, 1461, 1462, 1589, 1589, \n\t1589, 1589, 1462, 1589, 1462, 1462, 1461, 1589, \n\t1462, 1589, 1461, 1589, 1461, 1589, 1462, 1589, \n\t1589, 1461, 1589, 1461, 1589, 1589, 1589, 1589, \n\t1462, 1461, 1462, 1589, 1461, 1589, 1589, 1589, \n\t1589, 1461, 1589, 1461, 1619, 1620, 1621, 1622, \n\t1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, \n\t1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, \n\t1639, 1461, 1462, 1589, 1589, 1462, 1589, 1461, \n\t1462, 1589, 1589, 1589, 1461, 1589, 1462, 1589, \n\t1589, 1589, 1461, 1589, 1461, 1589, 1589, 1461, \n\t1589, 1589, 1461, 1462, 1589, 1462, 1461, 1589, \n\t1589, 1589, 1461, 1462, 1589, 1461, 1589, 1589, \n\t1461, 1589, 1589, 1462, 1589, 1462, 1462, 1589, \n\t1461, 1589, 1589, 1462, 1461, 1589, 1589, 1589, \n\t1589, 1462, 1589, 1589, 1462, 1589, 1461, 1589, \n\t1461, 1462, 1462, 1462, 1589, 1589, 1462, 1461, \n\t1589, 1461, 1589, 1461, 1462, 1462, 1462, 1462, \n\t1589, 1589, 1462, 1589, 1461, 1462, 1589, 1589, \n\t1462, 1589, 1462, 1461, 1462, 1589, 1462, 1589, \n\t1461, 1462, 1589, 1589, 1589, 1589, 1462, 1589, \n\t1461, 1589, 1589, 1461, 1640, 1641, 1642, 1643, \n\t1644, 1461, 1589, 1517, 1461, 1589, 1461, 1589, \n\t1461, 1589, 1461, 1589, 1461, 1645, 1646, 1461, \n\t1589, 1461, 1589, 1461, 1647, 1648, 1649, 1650, \n\t1525, 1651, 1652, 1653, 1654, 1655, 1656, 1657, \n\t1658, 1659, 1660, 1461, 1589, 1589, 1461, 1589, \n\t1461, 1589, 1461, 1589, 1589, 1589, 1462, 1462, \n\t1589, 1461, 1589, 1461, 1589, 1461, 1462, 1589, \n\t1461, 1589, 1462, 1461, 1462, 1589, 1589, 1589, \n\t1462, 1589, 1462, 1461, 1589, 1461, 1462, 1589, \n\t1462, 1589, 1462, 1589, 1461, 1589, 1589, 1462, \n\t1589, 1461, 1589, 1589, 1589, 1589, 1461, 1589, \n\t1462, 1462, 1589, 1589, 1462, 1461, 1589, 1589, \n\t1462, 1589, 1462, 1461, 1661, 1662, 1648, 1461, \n\t1589, 1461, 1589, 1589, 1461, 1663, 1664, 1665, \n\t1666, 1667, 1668, 1669, 1461, 1670, 1671, 1672, \n\t1673, 1674, 1461, 1589, 1461, 1589, 1461, 1589, \n\t1461, 1589, 1589, 1589, 1589, 1589, 1461, 1589, \n\t1461, 1675, 1676, 1677, 1678, 1679, 1680, 1681, \n\t1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, \n\t1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, \n\t1461, 1589, 1462, 1589, 1461, 1461, 1589, 1462, \n\t1461, 1462, 1462, 1461, 1589, 1462, 1589, 1589, \n\t1461, 1589, 1461, 1462, 1589, 1462, 1589, 1462, \n\t1461, 1461, 1589, 1461, 1462, 1589, 1589, 1462, \n\t1589, 1462, 1589, 1461, 1589, 1462, 1589, 1461, \n\t1589, 1589, 1462, 1589, 1462, 1461, 1589, 1589, \n\t1462, 1462, 1462, 1462, 1589, 1589, 1461, 1462, \n\t1589, 1461, 1462, 1462, 1589, 1461, 1589, 1462, \n\t1589, 1462, 1589, 1462, 1589, 1461, 1462, 1461, \n\t1589, 1589, 1462, 1462, 1589, 1462, 1589, 1461, \n\t1461, 1461, 1589, 1589, 1462, 1589, 1462, 1589, \n\t1461, 1461, 1589, 1462, 1462, 1589, 1462, 1589, \n\t1461, 1462, 1589, 1462, 1589, 1461, 1462, 1462, \n\t1589, 1589, 1461, 1462, 1462, 1462, 1589, 1589, \n\t1461, 1698, 1699, 1574, 1700, 1461, 1589, 1461, \n\t1589, 1461, 1589, 1461, 1701, 1461, 1589, 1461, \n\t1702, 1703, 1704, 1705, 1706, 1707, 1461, 1462, \n\t1462, 1589, 1589, 1589, 1461, 1461, 1461, 1461, \n\t1589, 1589, 1461, 1589, 1589, 1461, 1461, 1461, \n\t1589, 1589, 1589, 1589, 1461, 1708, 1709, 1710, \n\t1461, 1589, 1589, 1589, 1589, 1589, 1461, 1589, \n\t1461, 1589, 1461, 1711, 1461, 1462, 1461, 1712, \n\t1461, 1713, 1714, 1715, 1717, 1716, 1461, 1589, \n\t1461, 1461, 1589, 1589, 1462, 1461, 1462, 1461, \n\t1718, 1461, 1719, 1720, 1721, 1723, 1722, 1461, \n\t1462, 1461, 1461, 1462, 1462, 1538, 1539, 1540, \n\t1541, 1542, 1543, 1461, 1538, 1539, 1540, 1541, \n\t1542, 1543, 1724, 1461, 1725, 1461, 1462, 1461, \n\t1162, 3, 1, 3, 1162, 3, 1162, 3, \n\t1, 1162, 1162, 3, 1162, 3, 1162, 3, \n\t1162, 3, 1162, 3, 1, 3, 3, 1162, \n\t1162, 3, 1, 1162, 1162, 3, 1, 1162, \n\t3, 1162, 3, 1, 3, 1162, 3, 1162, \n\t3, 1, 1162, 3, 1162, 3, 1, 1162, \n\t3, 1, 1162, 1162, 3, 3, 1162, 3, \n\t1162, 3, 1162, 1, 1440, 1, 1726, 1440, \n\t1, 1727, 1435, 1437, 1728, 1437, 601, 1436, \n\t1, 265, 3, 1, 3, 265, 1, 1, \n\t1730, 1729, 1733, 1734, 1735, 1736, 1737, 1738, \n\t1739, 1741, 1742, 1743, 1744, 1745, 1746, 1748, \n\t1729, 1, 1732, 1740, 1747, 1, 1731, 262, \n\t264, 1750, 1751, 1752, 1753, 1754, 1755, 1756, \n\t1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, \n\t1765, 1766, 1767, 1749, 262, 264, 1750, 1751, \n\t1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, \n\t1760, 1761, 1768, 1763, 1764, 1765, 1769, 1767, \n\t1749, 256, 258, 1770, 1771, 1772, 1773, 1774, \n\t1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, \n\t1783, 1784, 1785, 1786, 1787, 1749, 1789, 1790, \n\t1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, \n\t1799, 1800, 1801, 1803, 268, 530, 576, 1802, \n\t1788, 527, 529, 1804, 1805, 1806, 1807, 1808, \n\t1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, \n\t1817, 1818, 1819, 1820, 1821, 1788, 527, 529, \n\t1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, \n\t1812, 1813, 1814, 1815, 1822, 1817, 1818, 1819, \n\t1823, 1821, 1788, 521, 523, 1824, 1825, 1826, \n\t1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, \n\t1835, 1836, 1837, 1838, 1839, 1840, 1841, 1788, \n\t527, 529, 1804, 1805, 1806, 1807, 1808, 1809, \n\t1810, 1811, 1812, 1813, 1814, 1842, 1816, 1817, \n\t1843, 1844, 1845, 1846, 1819, 1820, 1821, 1788, \n\t527, 529, 1804, 1805, 1806, 1807, 1808, 1809, \n\t1810, 1811, 1812, 1813, 1814, 1847, 1816, 1817, \n\t1818, 1848, 1819, 1820, 1821, 1788, 527, 529, \n\t1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, \n\t1812, 1813, 1814, 1849, 1816, 1817, 1818, 1850, \n\t1819, 1820, 1821, 1788, 527, 529, 1804, 1805, \n\t1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, \n\t1814, 1851, 1816, 1817, 1818, 1852, 1819, 1820, \n\t1821, 1788, 527, 529, 1804, 1805, 1806, 1807, \n\t1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, \n\t1816, 1817, 1818, 1819, 1853, 1821, 1788, 871, \n\t873, 1855, 1856, 1857, 1858, 1859, 1860, 1861, \n\t1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, \n\t1870, 1871, 1872, 1873, 1874, 1875, 1854, 871, \n\t873, 1855, 1856, 1857, 1858, 1859, 1860, 1861, \n\t1862, 1863, 1864, 1865, 1876, 1867, 1868, 1877, \n\t1873, 1874, 1875, 1854, 871, 873, 1855, 1856, \n\t1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, \n\t1865, 1876, 1878, 1868, 1877, 1873, 1879, 1875, \n\t1854, 865, 867, 1880, 1881, 1882, 1883, 1884, \n\t1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, \n\t1893, 1894, 1895, 1896, 1897, 1854, 871, 873, \n\t1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, \n\t1863, 1864, 1865, 1898, 1867, 1868, 1877, 1899, \n\t1873, 1874, 1875, 1854, 871, 873, 1855, 1856, \n\t1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, \n\t1865, 1900, 1867, 1868, 1877, 1901, 1873, 1874, \n\t1875, 1854, 871, 873, 1855, 1856, 1857, 1858, \n\t1859, 1860, 1861, 1862, 1863, 1864, 1865, 1902, \n\t1867, 1868, 1877, 1903, 1873, 1874, 1875, 1854, \n\t1025, 1027, 1905, 1906, 1907, 1908, 1909, 1910, \n\t1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, \n\t1919, 1920, 1921, 1922, 1904, 1025, 1027, 1905, \n\t1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, \n\t1914, 1915, 1916, 1923, 1918, 1919, 1920, 1924, \n\t1922, 1904, 1159, 1161, 1925, 1926, 1927, 1928, \n\t1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, \n\t1937, 1938, 1939, 1940, 1941, 1942, 1904, 1422, \n\t1424, 1944, 1945, 1946, 1947, 1948, 1949, 1950, \n\t1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, \n\t1959, 1960, 1961, 1943, 1323, 1325, 1962, 1963, \n\t1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, \n\t1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, \n\t1943, 1323, 1325, 1962, 1963, 1964, 1965, 1966, \n\t1967, 1968, 1969, 1970, 1971, 1972, 1973, 1980, \n\t1975, 1976, 1977, 1981, 1979, 1943, 1721, 1723, \n\t1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, \n\t1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, \n\t1999, 2000, 1982, 1721, 1723, 1983, 1984, 1985, \n\t1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, \n\t1994, 1995, 1996, 1997, 1998, 2001, 2000, 1982, \n\t1721, 1723, 1983, 1984, 1985, 1986, 1987, 1988, \n\t1989, 1990, 1991, 1992, 1993, 1994, 2002, 1996, \n\t1997, 1998, 2003, 2000, 1982, 1715, 1717, 2004, \n\t2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, \n\t2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, \n\t2021, 1982, \n}\n\nvar _graphclust_trans_targs []int16 = []int16{\n\t1974, 0, 1974, 1975, 15, 16, 17, 18, \n\t19, 20, 21, 22, 23, 24, 25, 26, \n\t27, 28, 29, 30, 31, 32, 33, 34, \n\t35, 36, 37, 38, 39, 40, 41, 42, \n\t44, 45, 46, 47, 48, 49, 50, 51, \n\t52, 53, 54, 55, 56, 57, 58, 59, \n\t60, 61, 62, 63, 64, 66, 68, 70, \n\t71, 72, 1976, 69, 74, 75, 77, 78, \n\t79, 80, 81, 82, 83, 84, 85, 86, \n\t87, 88, 89, 90, 91, 93, 94, 96, \n\t102, 125, 130, 132, 139, 143, 97, 98, \n\t99, 100, 101, 103, 104, 105, 106, 107, \n\t108, 109, 110, 111, 112, 113, 114, 115, \n\t116, 117, 118, 119, 120, 121, 122, 123, \n\t124, 126, 127, 128, 129, 131, 133, 134, \n\t135, 136, 137, 138, 140, 141, 142, 144, \n\t291, 292, 1977, 158, 159, 160, 161, 162, \n\t163, 164, 165, 166, 167, 168, 169, 170, \n\t171, 172, 173, 174, 175, 176, 177, 178, \n\t179, 180, 181, 182, 183, 184, 185, 186, \n\t188, 189, 190, 191, 192, 193, 194, 195, \n\t196, 197, 198, 199, 200, 201, 202, 203, \n\t204, 205, 206, 207, 208, 210, 211, 212, \n\t213, 214, 216, 217, 219, 220, 221, 222, \n\t223, 224, 225, 226, 227, 228, 229, 230, \n\t231, 232, 234, 235, 237, 243, 267, 271, \n\t273, 280, 284, 238, 239, 240, 241, 242, \n\t244, 245, 246, 247, 248, 249, 250, 251, \n\t252, 253, 254, 255, 256, 257, 258, 259, \n\t260, 261, 262, 263, 264, 265, 266, 268, \n\t269, 270, 272, 274, 275, 276, 277, 278, \n\t279, 281, 282, 283, 285, 287, 288, 289, \n\t145, 290, 146, 294, 295, 296, 2, 297, \n\t3, 1974, 1978, 1974, 1979, 315, 316, 317, \n\t318, 319, 320, 321, 322, 323, 324, 325, \n\t326, 327, 328, 329, 330, 331, 332, 333, \n\t334, 335, 336, 337, 338, 339, 340, 341, \n\t342, 344, 345, 346, 347, 348, 349, 350, \n\t351, 352, 353, 354, 355, 356, 357, 358, \n\t359, 360, 361, 362, 363, 364, 366, 368, \n\t370, 371, 372, 1980, 369, 374, 375, 377, \n\t378, 379, 380, 381, 382, 383, 384, 385, \n\t386, 387, 388, 389, 390, 391, 393, 394, \n\t396, 402, 425, 430, 432, 439, 443, 397, \n\t398, 399, 400, 401, 403, 404, 405, 406, \n\t407, 408, 409, 410, 411, 412, 413, 414, \n\t415, 416, 417, 418, 419, 420, 421, 422, \n\t423, 424, 426, 427, 428, 429, 431, 433, \n\t434, 435, 436, 437, 438, 440, 441, 442, \n\t444, 591, 592, 1981, 458, 459, 460, 461, \n\t462, 463, 464, 465, 466, 467, 468, 469, \n\t470, 471, 472, 473, 474, 475, 476, 477, \n\t478, 479, 480, 481, 482, 483, 484, 485, \n\t486, 488, 489, 490, 491, 492, 493, 494, \n\t495, 496, 497, 498, 499, 500, 501, 502, \n\t503, 504, 505, 506, 507, 508, 510, 511, \n\t512, 513, 514, 516, 517, 519, 520, 521, \n\t522, 523, 524, 525, 526, 527, 528, 529, \n\t530, 531, 532, 534, 535, 537, 543, 567, \n\t571, 573, 580, 584, 538, 539, 540, 541, \n\t542, 544, 545, 546, 547, 548, 549, 550, \n\t551, 552, 553, 554, 555, 556, 557, 558, \n\t559, 560, 561, 562, 563, 564, 565, 566, \n\t568, 569, 570, 572, 574, 575, 576, 577, \n\t578, 579, 581, 582, 583, 585, 587, 588, \n\t589, 445, 590, 446, 594, 595, 596, 302, \n\t597, 303, 599, 605, 606, 608, 610, 613, \n\t616, 640, 1982, 622, 1983, 612, 1984, 615, \n\t618, 620, 621, 624, 625, 629, 630, 631, \n\t632, 633, 634, 635, 1985, 628, 639, 642, \n\t643, 644, 645, 646, 649, 650, 651, 652, \n\t653, 654, 655, 656, 660, 661, 663, 664, \n\t647, 666, 669, 671, 673, 667, 668, 670, \n\t672, 674, 678, 679, 680, 681, 682, 683, \n\t684, 685, 686, 687, 1986, 676, 677, 690, \n\t691, 299, 695, 696, 698, 997, 1000, 1003, \n\t1027, 1974, 1987, 1974, 1988, 712, 713, 714, \n\t715, 716, 717, 718, 719, 720, 721, 722, \n\t723, 724, 725, 726, 727, 728, 729, 730, \n\t731, 732, 733, 734, 735, 736, 737, 738, \n\t739, 741, 742, 743, 744, 745, 746, 747, \n\t748, 749, 750, 751, 752, 753, 754, 755, \n\t756, 757, 758, 759, 760, 761, 763, 765, \n\t767, 768, 769, 1989, 766, 771, 772, 774, \n\t775, 776, 777, 778, 779, 780, 781, 782, \n\t783, 784, 785, 786, 787, 788, 790, 791, \n\t793, 799, 822, 827, 829, 836, 840, 794, \n\t795, 796, 797, 798, 800, 801, 802, 803, \n\t804, 805, 806, 807, 808, 809, 810, 811, \n\t812, 813, 814, 815, 816, 817, 818, 819, \n\t820, 821, 823, 824, 825, 826, 828, 830, \n\t831, 832, 833, 834, 835, 837, 838, 839, \n\t841, 988, 989, 1990, 855, 856, 857, 858, \n\t859, 860, 861, 862, 863, 864, 865, 866, \n\t867, 868, 869, 870, 871, 872, 873, 874, \n\t875, 876, 877, 878, 879, 880, 881, 882, \n\t883, 885, 886, 887, 888, 889, 890, 891, \n\t892, 893, 894, 895, 896, 897, 898, 899, \n\t900, 901, 902, 903, 904, 905, 907, 908, \n\t909, 910, 911, 913, 914, 916, 917, 918, \n\t919, 920, 921, 922, 923, 924, 925, 926, \n\t927, 928, 929, 931, 932, 934, 940, 964, \n\t968, 970, 977, 981, 935, 936, 937, 938, \n\t939, 941, 942, 943, 944, 945, 946, 947, \n\t948, 949, 950, 951, 952, 953, 954, 955, \n\t956, 957, 958, 959, 960, 961, 962, 963, \n\t965, 966, 967, 969, 971, 972, 973, 974, \n\t975, 976, 978, 979, 980, 982, 984, 985, \n\t986, 842, 987, 843, 991, 992, 993, 699, \n\t994, 700, 1009, 1991, 999, 1992, 1002, 1005, \n\t1007, 1008, 1011, 1012, 1016, 1017, 1018, 1019, \n\t1020, 1021, 1022, 1993, 1015, 1026, 1029, 1327, \n\t1328, 1626, 1627, 1994, 1974, 1995, 1043, 1044, \n\t1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, \n\t1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, \n\t1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, \n\t1069, 1070, 1072, 1073, 1074, 1075, 1076, 1077, \n\t1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, \n\t1086, 1087, 1088, 1089, 1090, 1091, 1092, 1094, \n\t1095, 1096, 1097, 1098, 1100, 1101, 1103, 1104, \n\t1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, \n\t1113, 1114, 1115, 1116, 1117, 1119, 1120, 1122, \n\t1128, 1151, 1156, 1158, 1165, 1123, 1124, 1125, \n\t1126, 1127, 1129, 1130, 1131, 1132, 1133, 1134, \n\t1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, \n\t1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, \n\t1152, 1153, 1154, 1155, 1157, 1159, 1160, 1161, \n\t1162, 1163, 1164, 1166, 1167, 1168, 1170, 1171, \n\t1172, 1030, 1173, 1031, 1175, 1177, 1178, 1325, \n\t1326, 1996, 1192, 1193, 1194, 1195, 1196, 1197, \n\t1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, \n\t1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, \n\t1214, 1215, 1216, 1217, 1218, 1219, 1220, 1222, \n\t1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, \n\t1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, \n\t1239, 1240, 1241, 1242, 1244, 1245, 1246, 1247, \n\t1248, 1250, 1251, 1253, 1254, 1255, 1256, 1257, \n\t1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265, \n\t1266, 1268, 1269, 1271, 1277, 1301, 1305, 1307, \n\t1314, 1318, 1272, 1273, 1274, 1275, 1276, 1278, \n\t1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, \n\t1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, \n\t1295, 1296, 1297, 1298, 1299, 1300, 1302, 1303, \n\t1304, 1306, 1308, 1309, 1310, 1311, 1312, 1313, \n\t1315, 1316, 1317, 1319, 1321, 1322, 1323, 1179, \n\t1324, 1180, 1997, 1974, 1342, 1343, 1344, 1345, \n\t1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, \n\t1505, 1506, 1507, 1508, 1509, 1510, 1511, 1512, \n\t1377, 1513, 1514, 1515, 1516, 1517, 1518, 1519, \n\t1520, 1521, 1998, 1359, 1360, 1361, 1362, 1363, \n\t1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, \n\t1372, 1373, 1374, 1375, 1376, 1378, 1379, 1380, \n\t1381, 1382, 1383, 1384, 1385, 1386, 1388, 1389, \n\t1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, \n\t1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, \n\t1406, 1407, 1408, 1410, 1412, 1414, 1415, 1416, \n\t1999, 1413, 1418, 1419, 1421, 1422, 1423, 1424, \n\t1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, \n\t1433, 1434, 1435, 1437, 1438, 1440, 1446, 1469, \n\t1474, 1476, 1483, 1487, 1441, 1442, 1443, 1444, \n\t1445, 1447, 1448, 1449, 1450, 1451, 1452, 1453, \n\t1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, \n\t1462, 1463, 1464, 1465, 1466, 1467, 1468, 1470, \n\t1471, 1472, 1473, 1475, 1477, 1478, 1479, 1480, \n\t1481, 1482, 1484, 1485, 1486, 1488, 1489, 1490, \n\t1492, 1493, 1494, 1346, 1495, 1347, 1523, 1524, \n\t1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, \n\t1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, \n\t1541, 1542, 1543, 1545, 1546, 1547, 1548, 1549, \n\t1551, 1552, 1554, 1555, 1556, 1557, 1558, 1559, \n\t1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, \n\t1569, 1570, 1572, 1578, 1602, 1606, 1608, 1615, \n\t1619, 1573, 1574, 1575, 1576, 1577, 1579, 1580, \n\t1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, \n\t1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, \n\t1597, 1598, 1599, 1600, 1601, 1603, 1604, 1605, \n\t1607, 1609, 1610, 1611, 1612, 1613, 1614, 1616, \n\t1617, 1618, 1620, 1622, 1623, 1624, 1329, 1625, \n\t1330, 1630, 1631, 1632, 1633, 1634, 1635, 1636, \n\t1637, 1641, 1642, 1643, 1644, 1645, 1647, 1648, \n\t1628, 1650, 1653, 1655, 1657, 1651, 1652, 1654, \n\t1656, 1658, 1959, 1960, 1961, 1962, 1963, 1964, \n\t1965, 1966, 1967, 1968, 2000, 1974, 2001, 1672, \n\t1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, \n\t1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, \n\t1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, \n\t1697, 1698, 1699, 1701, 1702, 1703, 1704, 1705, \n\t1706, 1707, 1708, 1709, 1710, 1711, 1712, 1713, \n\t1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, \n\t1723, 1725, 1727, 1728, 1729, 2002, 1726, 1731, \n\t1732, 1734, 1735, 1736, 1737, 1738, 1739, 1740, \n\t1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, \n\t1750, 1751, 1753, 1759, 1782, 1787, 1789, 1796, \n\t1800, 1754, 1755, 1756, 1757, 1758, 1760, 1761, \n\t1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, \n\t1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, \n\t1778, 1779, 1780, 1781, 1783, 1784, 1785, 1786, \n\t1788, 1790, 1791, 1792, 1793, 1794, 1795, 1797, \n\t1798, 1799, 1801, 1948, 1949, 2003, 1815, 1816, \n\t1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, \n\t1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, \n\t1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, \n\t1841, 1842, 1843, 1845, 1846, 1847, 1848, 1849, \n\t1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, \n\t1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, \n\t1867, 1868, 1869, 1870, 1871, 1873, 1874, 1876, \n\t1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, \n\t1885, 1886, 1887, 1888, 1889, 1891, 1892, 1894, \n\t1900, 1924, 1928, 1930, 1937, 1941, 1895, 1896, \n\t1897, 1898, 1899, 1901, 1902, 1903, 1904, 1905, \n\t1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, \n\t1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, \n\t1922, 1923, 1925, 1926, 1927, 1929, 1931, 1932, \n\t1933, 1934, 1935, 1936, 1938, 1939, 1940, 1942, \n\t1944, 1945, 1946, 1802, 1947, 1803, 1951, 1952, \n\t1953, 1659, 1954, 1660, 1957, 1958, 1971, 1972, \n\t1973, 1974, 1, 1975, 299, 300, 301, 692, \n\t693, 694, 697, 1028, 1628, 1629, 1638, 1639, \n\t1640, 1646, 1649, 1969, 1970, 1974, 4, 5, \n\t6, 7, 8, 9, 10, 11, 12, 13, \n\t14, 43, 65, 73, 76, 92, 298, 293, \n\t67, 95, 147, 148, 149, 150, 151, 152, \n\t153, 154, 155, 156, 157, 187, 209, 215, \n\t218, 233, 236, 286, 1974, 600, 601, 602, \n\t603, 604, 607, 641, 648, 657, 658, 659, \n\t662, 665, 688, 689, 304, 305, 306, 307, \n\t308, 309, 310, 311, 312, 313, 314, 343, \n\t365, 373, 376, 392, 598, 593, 367, 395, \n\t447, 448, 449, 450, 451, 452, 453, 454, \n\t455, 456, 457, 487, 509, 515, 518, 533, \n\t536, 586, 609, 623, 636, 637, 638, 611, \n\t619, 614, 617, 626, 627, 675, 1974, 701, \n\t702, 703, 704, 705, 706, 707, 708, 709, \n\t710, 711, 996, 762, 770, 1010, 1023, 1024, \n\t1025, 789, 995, 990, 740, 773, 764, 792, \n\t844, 845, 846, 847, 848, 849, 850, 851, \n\t852, 853, 854, 884, 906, 912, 915, 930, \n\t933, 983, 998, 1006, 1001, 1004, 1013, 1014, \n\t1974, 1032, 1033, 1034, 1035, 1036, 1037, 1038, \n\t1039, 1040, 1041, 1042, 1071, 1174, 1099, 1102, \n\t1118, 1176, 1169, 1093, 1121, 1181, 1182, 1183, \n\t1184, 1185, 1186, 1187, 1188, 1189, 1190, 1191, \n\t1221, 1243, 1249, 1252, 1267, 1270, 1320, 1974, \n\t1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, \n\t1339, 1340, 1341, 1522, 1544, 1550, 1553, 1568, \n\t1571, 1621, 1348, 1349, 1350, 1351, 1352, 1353, \n\t1354, 1355, 1356, 1357, 1358, 1387, 1409, 1417, \n\t1420, 1436, 1496, 1491, 1411, 1439, 1974, 1661, \n\t1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, \n\t1670, 1671, 1700, 1722, 1730, 1733, 1749, 1956, \n\t1950, 1955, 1724, 1752, 1804, 1805, 1806, 1807, \n\t1808, 1809, 1810, 1811, 1812, 1813, 1814, 1844, \n\t1866, 1872, 1875, 1890, 1893, 1943, \n}\n\nvar _graphclust_trans_actions []byte = []byte{\n\t31, 0, 27, 40, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 40, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 40, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 34, 40, 25, 40, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 40, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 40, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 40, 0, 40, 0, 40, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 40, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 40, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 29, 51, 17, 40, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 40, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 40, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 51, 0, 51, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 40, 0, 0, 0, 0, \n\t0, 0, 0, 40, 21, 40, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 40, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 40, 19, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 40, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t40, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 40, 23, 40, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 40, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 40, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 43, 1, 47, 1, 1, 1, 1, \n\t1, 1, 1, 1, 1, 1, 1, 1, \n\t1, 1, 1, 1, 1, 15, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 13, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 5, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t9, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 7, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 11, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, \n}\n\nvar _graphclust_to_state_actions []byte = []byte{\n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 37, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, \n}\n\nvar _graphclust_from_state_actions []byte = []byte{\n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 3, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, \n}\n\nvar _graphclust_eof_trans []int16 = []int16{\n\t0, 0, 3, 3, 3, 3, 3, 3, \n\t3, 3, 3, 3, 3, 3, 3, 3, \n\t3, 3, 3, 3, 3, 3, 3, 3, \n\t3, 3, 3, 3, 3, 3, 3, 3, \n\t3, 3, 3, 3, 3, 3, 3, 3, \n\t3, 3, 3, 3, 3, 3, 3, 3, \n\t3, 3, 3, 3, 3, 3, 3, 3, \n\t3, 3, 3, 3, 3, 3, 3, 3, \n\t3, 3, 3, 3, 3, 3, 3, 3, \n\t3, 3, 3, 3, 3, 3, 3, 3, \n\t3, 3, 3, 3, 3, 3, 3, 3, \n\t3, 3, 3, 3, 3, 3, 3, 3, \n\t3, 3, 3, 3, 3, 3, 3, 3, \n\t3, 3, 3, 3, 3, 3, 3, 3, \n\t3, 3, 3, 3, 3, 3, 3, 3, \n\t3, 3, 3, 3, 3, 3, 3, 3, \n\t3, 3, 3, 3, 3, 3, 3, 3, \n\t3, 3, 3, 3, 3, 3, 3, 3, \n\t3, 3, 3, 3, 3, 3, 3, 3, \n\t3, 3, 3, 3, 3, 3, 3, 3, \n\t3, 3, 3, 3, 3, 3, 3, 3, \n\t3, 3, 3, 3, 3, 3, 3, 3, \n\t3, 3, 3, 3, 3, 3, 3, 3, \n\t3, 3, 3, 3, 3, 3, 3, 3, \n\t3, 3, 3, 3, 3, 3, 3, 3, \n\t3, 3, 3, 3, 3, 3, 3, 3, \n\t3, 3, 3, 3, 3, 3, 3, 3, \n\t3, 3, 3, 3, 3, 3, 3, 3, \n\t3, 3, 3, 3, 3, 3, 3, 3, \n\t3, 3, 3, 3, 3, 3, 3, 3, \n\t3, 3, 3, 3, 3, 3, 3, 3, \n\t3, 3, 3, 3, 3, 3, 3, 3, \n\t3, 3, 3, 3, 3, 3, 3, 3, \n\t3, 3, 3, 3, 3, 3, 3, 3, \n\t3, 3, 3, 3, 3, 3, 3, 3, \n\t3, 3, 3, 3, 3, 3, 3, 3, \n\t3, 3, 3, 3, 3, 3, 3, 3, \n\t3, 3, 3, 0, 0, 0, 268, 268, \n\t268, 268, 268, 268, 268, 268, 268, 268, \n\t268, 268, 268, 268, 268, 268, 268, 268, \n\t268, 268, 268, 268, 268, 268, 268, 268, \n\t268, 268, 268, 268, 268, 268, 268, 268, \n\t268, 268, 268, 268, 268, 268, 268, 268, \n\t268, 268, 268, 268, 268, 268, 268, 268, \n\t268, 268, 268, 268, 268, 268, 268, 268, \n\t268, 268, 268, 268, 268, 268, 268, 268, \n\t268, 268, 268, 268, 268, 268, 268, 268, \n\t268, 268, 268, 268, 268, 268, 268, 268, \n\t268, 268, 268, 268, 268, 268, 268, 268, \n\t268, 268, 268, 268, 268, 268, 268, 268, \n\t268, 268, 268, 268, 268, 268, 268, 268, \n\t268, 268, 268, 268, 268, 268, 268, 268, \n\t268, 268, 268, 268, 268, 268, 268, 268, \n\t268, 268, 268, 268, 268, 268, 268, 268, \n\t268, 268, 268, 268, 268, 268, 268, 268, \n\t268, 268, 268, 268, 268, 268, 268, 268, \n\t268, 268, 268, 268, 268, 268, 268, 268, \n\t268, 268, 268, 268, 268, 268, 268, 268, \n\t268, 268, 268, 268, 268, 268, 268, 268, \n\t268, 268, 268, 268, 268, 268, 268, 268, \n\t268, 268, 268, 268, 268, 268, 268, 268, \n\t268, 268, 268, 268, 268, 268, 268, 268, \n\t268, 268, 268, 268, 268, 268, 268, 268, \n\t268, 268, 268, 268, 268, 268, 268, 268, \n\t268, 268, 268, 268, 268, 268, 268, 268, \n\t268, 268, 268, 268, 268, 268, 268, 268, \n\t268, 268, 268, 268, 268, 268, 268, 268, \n\t268, 268, 268, 268, 268, 268, 268, 268, \n\t268, 268, 268, 268, 268, 268, 268, 268, \n\t268, 268, 268, 268, 268, 268, 268, 268, \n\t268, 268, 268, 268, 268, 268, 268, 268, \n\t268, 268, 268, 268, 268, 268, 268, 268, \n\t268, 268, 268, 268, 268, 268, 268, 268, \n\t268, 268, 268, 268, 268, 268, 268, 268, \n\t268, 268, 268, 268, 268, 268, 268, 268, \n\t268, 268, 268, 268, 268, 268, 268, 268, \n\t268, 268, 268, 268, 268, 268, 268, 268, \n\t268, 268, 268, 268, 268, 268, 268, 268, \n\t268, 268, 268, 268, 268, 268, 268, 268, \n\t268, 268, 268, 268, 268, 268, 268, 268, \n\t268, 268, 268, 268, 268, 268, 268, 268, \n\t268, 268, 268, 268, 268, 268, 268, 268, \n\t268, 268, 268, 268, 268, 268, 268, 268, \n\t268, 268, 268, 268, 268, 268, 268, 268, \n\t268, 268, 268, 268, 268, 268, 268, 268, \n\t268, 268, 268, 268, 268, 268, 268, 268, \n\t268, 268, 268, 268, 0, 0, 0, 0, \n\t0, 0, 610, 612, 612, 612, 612, 612, \n\t612, 612, 612, 612, 612, 612, 612, 612, \n\t612, 612, 612, 612, 612, 612, 612, 612, \n\t612, 612, 612, 612, 612, 612, 612, 612, \n\t612, 612, 612, 612, 612, 612, 612, 612, \n\t612, 612, 612, 612, 612, 612, 612, 612, \n\t612, 612, 612, 612, 612, 612, 612, 612, \n\t612, 612, 612, 612, 612, 612, 612, 612, \n\t612, 612, 612, 612, 612, 612, 612, 612, \n\t612, 612, 612, 612, 612, 612, 612, 612, \n\t612, 612, 612, 612, 612, 612, 612, 612, \n\t612, 612, 612, 612, 612, 612, 612, 612, \n\t612, 612, 612, 612, 612, 612, 612, 612, \n\t612, 612, 612, 612, 612, 612, 612, 612, \n\t612, 612, 612, 612, 612, 612, 612, 612, \n\t612, 612, 612, 612, 612, 612, 612, 612, \n\t612, 612, 612, 612, 612, 612, 612, 612, \n\t612, 612, 612, 612, 612, 612, 612, 612, \n\t612, 612, 612, 612, 612, 612, 612, 612, \n\t612, 612, 612, 612, 612, 612, 612, 612, \n\t612, 612, 612, 612, 612, 612, 612, 612, \n\t612, 612, 612, 612, 612, 612, 612, 612, \n\t612, 612, 612, 612, 612, 612, 612, 612, \n\t612, 612, 612, 612, 612, 612, 612, 612, \n\t612, 612, 612, 612, 612, 612, 612, 612, \n\t612, 612, 612, 612, 612, 612, 612, 612, \n\t612, 612, 612, 612, 612, 612, 612, 612, \n\t612, 612, 612, 612, 612, 612, 612, 612, \n\t612, 612, 612, 612, 612, 612, 612, 612, \n\t612, 612, 612, 612, 612, 612, 612, 612, \n\t612, 612, 612, 612, 612, 612, 612, 612, \n\t612, 612, 612, 612, 612, 612, 612, 612, \n\t612, 612, 612, 612, 612, 612, 612, 612, \n\t612, 612, 612, 612, 612, 612, 612, 612, \n\t612, 612, 612, 612, 612, 612, 612, 612, \n\t612, 612, 612, 612, 612, 612, 612, 612, \n\t612, 612, 612, 612, 612, 612, 612, 612, \n\t612, 612, 612, 612, 612, 610, 612, 612, \n\t610, 612, 612, 610, 612, 612, 612, 612, \n\t612, 612, 612, 612, 612, 612, 612, 612, \n\t612, 612, 612, 612, 612, 612, 610, 612, \n\t612, 612, 612, 0, 0, 0, 901, 901, \n\t901, 901, 901, 901, 901, 901, 901, 901, \n\t901, 901, 901, 901, 901, 901, 901, 901, \n\t901, 901, 901, 901, 901, 901, 901, 901, \n\t901, 901, 901, 901, 901, 901, 901, 901, \n\t901, 901, 901, 901, 901, 901, 901, 901, \n\t901, 901, 901, 901, 901, 901, 901, 901, \n\t901, 901, 901, 901, 901, 901, 901, 901, \n\t901, 901, 901, 901, 901, 901, 901, 901, \n\t901, 901, 901, 901, 901, 901, 901, 901, \n\t901, 901, 901, 901, 901, 901, 901, 901, \n\t901, 901, 901, 901, 901, 901, 901, 901, \n\t901, 901, 901, 901, 901, 901, 901, 901, \n\t901, 901, 901, 901, 901, 901, 901, 901, \n\t901, 901, 901, 901, 901, 901, 901, 901, \n\t901, 901, 901, 901, 901, 901, 901, 901, \n\t901, 901, 901, 901, 901, 901, 901, 901, \n\t901, 901, 901, 901, 901, 901, 901, 901, \n\t901, 901, 901, 901, 901, 901, 901, 901, \n\t901, 901, 901, 901, 901, 901, 901, 901, \n\t901, 901, 901, 901, 901, 901, 901, 901, \n\t901, 901, 901, 901, 901, 901, 901, 901, \n\t901, 901, 901, 901, 901, 901, 901, 901, \n\t901, 901, 901, 901, 901, 901, 901, 901, \n\t901, 901, 901, 901, 901, 901, 901, 901, \n\t901, 901, 901, 901, 901, 901, 901, 901, \n\t901, 901, 901, 901, 901, 901, 901, 901, \n\t901, 901, 901, 901, 901, 901, 901, 901, \n\t901, 901, 901, 901, 901, 901, 901, 901, \n\t901, 901, 901, 901, 901, 901, 901, 901, \n\t901, 901, 901, 901, 901, 901, 901, 901, \n\t901, 901, 901, 901, 901, 901, 901, 901, \n\t901, 901, 901, 901, 901, 901, 901, 901, \n\t901, 901, 901, 901, 901, 901, 901, 901, \n\t901, 901, 901, 901, 901, 901, 901, 901, \n\t901, 901, 901, 901, 901, 901, 901, 901, \n\t901, 901, 901, 901, 901, 901, 901, 901, \n\t901, 901, 901, 901, 901, 901, 901, 0, \n\t0, 1164, 1164, 1164, 1164, 1164, 1164, 1164, \n\t1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, \n\t1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, \n\t1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, \n\t1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, \n\t1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, \n\t1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, \n\t1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, \n\t1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, \n\t1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, \n\t1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, \n\t1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, \n\t1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, \n\t1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, \n\t1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, \n\t1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, \n\t1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, \n\t1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, \n\t1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, \n\t1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, \n\t1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, \n\t1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, \n\t1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, \n\t1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, \n\t1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, \n\t1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, \n\t1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, \n\t1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, \n\t1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, \n\t1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, \n\t1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, \n\t1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, \n\t1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, \n\t1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, \n\t1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, \n\t1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, \n\t1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, \n\t1164, 1164, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 1462, 1462, 1462, 1462, 1462, \n\t1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, \n\t1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, \n\t1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, \n\t1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, \n\t1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, \n\t1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, \n\t1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, \n\t1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, \n\t1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, \n\t1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, \n\t1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, \n\t1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, \n\t1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, \n\t1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, \n\t1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, \n\t1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, \n\t1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, \n\t1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, \n\t1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, \n\t1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, \n\t1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, \n\t1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, \n\t1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, \n\t1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, \n\t1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, \n\t1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, \n\t1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, \n\t1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, \n\t1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, \n\t1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, \n\t1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, \n\t1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, \n\t1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, \n\t1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, \n\t1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, \n\t1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, \n\t1462, 1462, 1462, 1462, 1462, 1462, 1462, 0, \n\t0, 0, 0, 0, 0, 0, 0, 0, \n\t0, 0, 0, 0, 0, 0, 0, 1750, \n\t1750, 1750, 1789, 1789, 1789, 1789, 1789, 1789, \n\t1789, 1789, 1789, 1855, 1855, 1855, 1855, 1855, \n\t1855, 1855, 1905, 1905, 1905, 1944, 1944, 1944, \n\t1983, 1983, 1983, 1983, \n}\n\nconst graphclust_start int = 1974\nconst graphclust_first_final int = 1974\nconst graphclust_error int = 0\n\nconst graphclust_en_main int = 1974\n\n\n// line 14 \"grapheme_clusters.rl\"\n\n\nvar Error = errors.New(\"invalid UTF8 text\")\n\n// ScanGraphemeClusters is a split function for bufio.Scanner that splits\n// on grapheme cluster boundaries.\nfunc ScanGraphemeClusters(data []byte, atEOF bool) (int, []byte, error) {\n    if len(data) == 0 {\n        return 0, nil, nil\n    }\n\n    // Ragel state\n\tcs := 0 // Current State\n\tp := 0  // \"Pointer\" into data\n\tpe := len(data) // End-of-data \"pointer\"\n    ts := 0\n    te := 0\n    act := 0\n    eof := pe\n\n    // Make Go compiler happy\n    _ = ts\n    _ = te\n    _ = act\n    _ = eof\n\n    startPos := 0\n    endPos := 0\n\n    \n// line 4976 \"grapheme_clusters.go\"\n\t{\n\tcs = graphclust_start\n\tts = 0\n\tte = 0\n\tact = 0\n\t}\n\n// line 4984 \"grapheme_clusters.go\"\n\t{\n\tvar _klen int\n\tvar _trans int\n\tvar _acts int\n\tvar _nacts uint\n\tvar _keys int\n\tif p == pe {\n\t\tgoto _test_eof\n\t}\n\tif cs == 0 {\n\t\tgoto _out\n\t}\n_resume:\n\t_acts = int(_graphclust_from_state_actions[cs])\n\t_nacts = uint(_graphclust_actions[_acts]); _acts++\n\tfor ; _nacts > 0; _nacts-- {\n\t\t _acts++\n\t\tswitch _graphclust_actions[_acts - 1] {\n\t\tcase 4:\n// line 1 \"NONE\"\n\nts = p\n\n// line 5008 \"grapheme_clusters.go\"\n\t\t}\n\t}\n\n\t_keys = int(_graphclust_key_offsets[cs])\n\t_trans = int(_graphclust_index_offsets[cs])\n\n\t_klen = int(_graphclust_single_lengths[cs])\n\tif _klen > 0 {\n\t\t_lower := int(_keys)\n\t\tvar _mid int\n\t\t_upper := int(_keys + _klen - 1)\n\t\tfor {\n\t\t\tif _upper < _lower {\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\t_mid = _lower + ((_upper - _lower) >> 1)\n\t\t\tswitch {\n\t\t\tcase data[p] < _graphclust_trans_keys[_mid]:\n\t\t\t\t_upper = _mid - 1\n\t\t\tcase data[p] > _graphclust_trans_keys[_mid]:\n\t\t\t\t_lower = _mid + 1\n\t\t\tdefault:\n\t\t\t\t_trans += int(_mid - int(_keys))\n\t\t\t\tgoto _match\n\t\t\t}\n\t\t}\n\t\t_keys += _klen\n\t\t_trans += _klen\n\t}\n\n\t_klen = int(_graphclust_range_lengths[cs])\n\tif _klen > 0 {\n\t\t_lower := int(_keys)\n\t\tvar _mid int\n\t\t_upper := int(_keys + (_klen << 1) - 2)\n\t\tfor {\n\t\t\tif _upper < _lower {\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\t_mid = _lower + (((_upper - _lower) >> 1) & ^1)\n\t\t\tswitch {\n\t\t\tcase data[p] < _graphclust_trans_keys[_mid]:\n\t\t\t\t_upper = _mid - 2\n\t\t\tcase data[p] > _graphclust_trans_keys[_mid + 1]:\n\t\t\t\t_lower = _mid + 2\n\t\t\tdefault:\n\t\t\t\t_trans += int((_mid - int(_keys)) >> 1)\n\t\t\t\tgoto _match\n\t\t\t}\n\t\t}\n\t\t_trans += _klen\n\t}\n\n_match:\n\t_trans = int(_graphclust_indicies[_trans])\n_eof_trans:\n\tcs = int(_graphclust_trans_targs[_trans])\n\n\tif _graphclust_trans_actions[_trans] == 0 {\n\t\tgoto _again\n\t}\n\n\t_acts = int(_graphclust_trans_actions[_trans])\n\t_nacts = uint(_graphclust_actions[_acts]); _acts++\n\tfor ; _nacts > 0; _nacts-- {\n\t\t_acts++\n\t\tswitch _graphclust_actions[_acts-1] {\n\t\tcase 0:\n// line 46 \"grapheme_clusters.rl\"\n\n\n            startPos = p\n        \n\t\tcase 1:\n// line 50 \"grapheme_clusters.rl\"\n\n\n            endPos = p\n        \n\t\tcase 5:\n// line 1 \"NONE\"\n\nte = p+1\n\n\t\tcase 6:\n// line 54 \"grapheme_clusters.rl\"\n\nact = 3;\n\t\tcase 7:\n// line 54 \"grapheme_clusters.rl\"\n\nte = p+1\n{\n            return endPos+1, data[startPos:endPos+1], nil\n        }\n\t\tcase 8:\n// line 54 \"grapheme_clusters.rl\"\n\nte = p+1\n{\n            return endPos+1, data[startPos:endPos+1], nil\n        }\n\t\tcase 9:\n// line 54 \"grapheme_clusters.rl\"\n\nte = p\np--\n{\n            return endPos+1, data[startPos:endPos+1], nil\n        }\n\t\tcase 10:\n// line 54 \"grapheme_clusters.rl\"\n\nte = p\np--\n{\n            return endPos+1, data[startPos:endPos+1], nil\n        }\n\t\tcase 11:\n// line 54 \"grapheme_clusters.rl\"\n\nte = p\np--\n{\n            return endPos+1, data[startPos:endPos+1], nil\n        }\n\t\tcase 12:\n// line 54 \"grapheme_clusters.rl\"\n\nte = p\np--\n{\n            return endPos+1, data[startPos:endPos+1], nil\n        }\n\t\tcase 13:\n// line 54 \"grapheme_clusters.rl\"\n\nte = p\np--\n{\n            return endPos+1, data[startPos:endPos+1], nil\n        }\n\t\tcase 14:\n// line 54 \"grapheme_clusters.rl\"\n\nte = p\np--\n{\n            return endPos+1, data[startPos:endPos+1], nil\n        }\n\t\tcase 15:\n// line 54 \"grapheme_clusters.rl\"\n\np = (te) - 1\n{\n            return endPos+1, data[startPos:endPos+1], nil\n        }\n\t\tcase 16:\n// line 54 \"grapheme_clusters.rl\"\n\np = (te) - 1\n{\n            return endPos+1, data[startPos:endPos+1], nil\n        }\n\t\tcase 17:\n// line 54 \"grapheme_clusters.rl\"\n\np = (te) - 1\n{\n            return endPos+1, data[startPos:endPos+1], nil\n        }\n\t\tcase 18:\n// line 54 \"grapheme_clusters.rl\"\n\np = (te) - 1\n{\n            return endPos+1, data[startPos:endPos+1], nil\n        }\n\t\tcase 19:\n// line 54 \"grapheme_clusters.rl\"\n\np = (te) - 1\n{\n            return endPos+1, data[startPos:endPos+1], nil\n        }\n\t\tcase 20:\n// line 54 \"grapheme_clusters.rl\"\n\np = (te) - 1\n{\n            return endPos+1, data[startPos:endPos+1], nil\n        }\n\t\tcase 21:\n// line 1 \"NONE\"\n\n\tswitch act {\n\tcase 0:\n\t{cs = 0\ngoto _again\n}\n\tcase 3:\n\t{p = (te) - 1\n\n            return endPos+1, data[startPos:endPos+1], nil\n        }\n\t}\n\t\n// line 5218 \"grapheme_clusters.go\"\n\t\t}\n\t}\n\n_again:\n\t_acts = int(_graphclust_to_state_actions[cs])\n\t_nacts = uint(_graphclust_actions[_acts]); _acts++\n\tfor ; _nacts > 0; _nacts-- {\n\t\t_acts++\n\t\tswitch _graphclust_actions[_acts-1] {\n\t\tcase 2:\n// line 1 \"NONE\"\n\nts = 0\n\n\t\tcase 3:\n// line 1 \"NONE\"\n\nact = 0\n\n// line 5238 \"grapheme_clusters.go\"\n\t\t}\n\t}\n\n\tif cs == 0 {\n\t\tgoto _out\n\t}\n\tp++\n\tif p != pe {\n\t\tgoto _resume\n\t}\n\t_test_eof: {}\n\tif p == eof {\n\t\tif _graphclust_eof_trans[cs] > 0 {\n\t\t\t_trans = int(_graphclust_eof_trans[cs] - 1)\n\t\t\tgoto _eof_trans\n\t\t}\n\t}\n\n\t_out: {}\n\t}\n\n// line 116 \"grapheme_clusters.rl\"\n\n\n    // If we fall out here then we were unable to complete a sequence.\n    // If we weren't able to complete a sequence then either we've\n    // reached the end of a partial buffer (so there's more data to come)\n    // or we have an isolated symbol that would normally be part of a\n    // grapheme cluster but has appeared in isolation here.\n\n    if !atEOF {\n        // Request more\n        return 0, nil, nil\n    }\n\n    // Just take the first UTF-8 sequence and return that.\n    _, seqLen := utf8.DecodeRune(data)\n    return seqLen, data[:seqLen], nil\n}\n"
  },
  {
    "path": "vendor/github.com/apparentlymart/go-textseg/textseg/make_tables.go",
    "content": "//  Copyright (c) 2014 Couchbase, Inc.\n//  Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file\n//  except in compliance with the License. You may obtain a copy of the License at\n//    http://www.apache.org/licenses/LICENSE-2.0\n//  Unless required by applicable law or agreed to in writing, software distributed under the\n//  License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\n//  either express or implied. See the License for the specific language governing permissions\n//  and limitations under the License.\n\n// Modified by Martin Atkins to serve the needs of package textseg.\n\n// +build ignore\n\npackage main\n\nimport (\n\t\"bufio\"\n\t\"flag\"\n\t\"fmt\"\n\t\"io\"\n\t\"log\"\n\t\"net/http\"\n\t\"os\"\n\t\"os/exec\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\t\"unicode\"\n)\n\nvar url = flag.String(\"url\",\n\t\"http://www.unicode.org/Public/\"+unicode.Version+\"/ucd/auxiliary/\",\n\t\"URL of Unicode database directory\")\nvar verbose = flag.Bool(\"verbose\",\n\tfalse,\n\t\"write data to stdout as it is parsed\")\nvar localFiles = flag.Bool(\"local\",\n\tfalse,\n\t\"data files have been copied to the current directory; for debugging only\")\nvar outputFile = flag.String(\"output\",\n\t\"\",\n\t\"output file for generated tables; default stdout\")\n\nvar output *bufio.Writer\n\nfunc main() {\n\tflag.Parse()\n\tsetupOutput()\n\n\tgraphemePropertyRanges := make(map[string]*unicode.RangeTable)\n\tloadUnicodeData(\"GraphemeBreakProperty.txt\", graphemePropertyRanges)\n\twordPropertyRanges := make(map[string]*unicode.RangeTable)\n\tloadUnicodeData(\"WordBreakProperty.txt\", wordPropertyRanges)\n\tsentencePropertyRanges := make(map[string]*unicode.RangeTable)\n\tloadUnicodeData(\"SentenceBreakProperty.txt\", sentencePropertyRanges)\n\n\tfmt.Fprintf(output, fileHeader, *url)\n\tgenerateTables(\"Grapheme\", graphemePropertyRanges)\n\tgenerateTables(\"Word\", wordPropertyRanges)\n\tgenerateTables(\"Sentence\", sentencePropertyRanges)\n\n\tflushOutput()\n}\n\n// WordBreakProperty.txt has the form:\n// 05F0..05F2    ; Hebrew_Letter # Lo   [3] HEBREW LIGATURE YIDDISH DOUBLE VAV..HEBREW LIGATURE YIDDISH DOUBLE YOD\n// FB1D          ; Hebrew_Letter # Lo       HEBREW LETTER YOD WITH HIRIQ\nfunc openReader(file string) (input io.ReadCloser) {\n\tif *localFiles {\n\t\tf, err := os.Open(file)\n\t\tif err != nil {\n\t\t\tlog.Fatal(err)\n\t\t}\n\t\tinput = f\n\t} else {\n\t\tpath := *url + file\n\t\tresp, err := http.Get(path)\n\t\tif err != nil {\n\t\t\tlog.Fatal(err)\n\t\t}\n\t\tif resp.StatusCode != 200 {\n\t\t\tlog.Fatal(\"bad GET status for \"+file, resp.Status)\n\t\t}\n\t\tinput = resp.Body\n\t}\n\treturn\n}\n\nfunc loadUnicodeData(filename string, propertyRanges map[string]*unicode.RangeTable) {\n\tf := openReader(filename)\n\tdefer f.Close()\n\tbufioReader := bufio.NewReader(f)\n\tline, err := bufioReader.ReadString('\\n')\n\tfor err == nil {\n\t\tparseLine(line, propertyRanges)\n\t\tline, err = bufioReader.ReadString('\\n')\n\t}\n\t// if the err was EOF still need to process last value\n\tif err == io.EOF {\n\t\tparseLine(line, propertyRanges)\n\t}\n}\n\nconst comment = \"#\"\nconst sep = \";\"\nconst rnge = \"..\"\n\nfunc parseLine(line string, propertyRanges map[string]*unicode.RangeTable) {\n\tif strings.HasPrefix(line, comment) {\n\t\treturn\n\t}\n\tline = strings.TrimSpace(line)\n\tif len(line) == 0 {\n\t\treturn\n\t}\n\tcommentStart := strings.Index(line, comment)\n\tif commentStart > 0 {\n\t\tline = line[0:commentStart]\n\t}\n\tpieces := strings.Split(line, sep)\n\tif len(pieces) != 2 {\n\t\tlog.Printf(\"unexpected %d pieces in %s\", len(pieces), line)\n\t\treturn\n\t}\n\n\tpropertyName := strings.TrimSpace(pieces[1])\n\n\trangeTable, ok := propertyRanges[propertyName]\n\tif !ok {\n\t\trangeTable = &unicode.RangeTable{\n\t\t\tLatinOffset: 0,\n\t\t}\n\t\tpropertyRanges[propertyName] = rangeTable\n\t}\n\n\tcodepointRange := strings.TrimSpace(pieces[0])\n\trngeIndex := strings.Index(codepointRange, rnge)\n\n\tif rngeIndex < 0 {\n\t\t// single codepoint, not range\n\t\tcodepointInt, err := strconv.ParseUint(codepointRange, 16, 64)\n\t\tif err != nil {\n\t\t\tlog.Printf(\"error parsing int: %v\", err)\n\t\t\treturn\n\t\t}\n\t\tif codepointInt < 0x10000 {\n\t\t\tr16 := unicode.Range16{\n\t\t\t\tLo:     uint16(codepointInt),\n\t\t\t\tHi:     uint16(codepointInt),\n\t\t\t\tStride: 1,\n\t\t\t}\n\t\t\taddR16ToTable(rangeTable, r16)\n\t\t} else {\n\t\t\tr32 := unicode.Range32{\n\t\t\t\tLo:     uint32(codepointInt),\n\t\t\t\tHi:     uint32(codepointInt),\n\t\t\t\tStride: 1,\n\t\t\t}\n\t\t\taddR32ToTable(rangeTable, r32)\n\t\t}\n\t} else {\n\t\trngeStart := codepointRange[0:rngeIndex]\n\t\trngeEnd := codepointRange[rngeIndex+2:]\n\t\trngeStartInt, err := strconv.ParseUint(rngeStart, 16, 64)\n\t\tif err != nil {\n\t\t\tlog.Printf(\"error parsing int: %v\", err)\n\t\t\treturn\n\t\t}\n\t\trngeEndInt, err := strconv.ParseUint(rngeEnd, 16, 64)\n\t\tif err != nil {\n\t\t\tlog.Printf(\"error parsing int: %v\", err)\n\t\t\treturn\n\t\t}\n\t\tif rngeStartInt < 0x10000 && rngeEndInt < 0x10000 {\n\t\t\tr16 := unicode.Range16{\n\t\t\t\tLo:     uint16(rngeStartInt),\n\t\t\t\tHi:     uint16(rngeEndInt),\n\t\t\t\tStride: 1,\n\t\t\t}\n\t\t\taddR16ToTable(rangeTable, r16)\n\t\t} else if rngeStartInt >= 0x10000 && rngeEndInt >= 0x10000 {\n\t\t\tr32 := unicode.Range32{\n\t\t\t\tLo:     uint32(rngeStartInt),\n\t\t\t\tHi:     uint32(rngeEndInt),\n\t\t\t\tStride: 1,\n\t\t\t}\n\t\t\taddR32ToTable(rangeTable, r32)\n\t\t} else {\n\t\t\tlog.Printf(\"unexpected range\")\n\t\t}\n\t}\n}\n\nfunc addR16ToTable(r *unicode.RangeTable, r16 unicode.Range16) {\n\tif r.R16 == nil {\n\t\tr.R16 = make([]unicode.Range16, 0, 1)\n\t}\n\tr.R16 = append(r.R16, r16)\n\tif r16.Hi <= unicode.MaxLatin1 {\n\t\tr.LatinOffset++\n\t}\n}\n\nfunc addR32ToTable(r *unicode.RangeTable, r32 unicode.Range32) {\n\tif r.R32 == nil {\n\t\tr.R32 = make([]unicode.Range32, 0, 1)\n\t}\n\tr.R32 = append(r.R32, r32)\n}\n\nfunc generateTables(prefix string, propertyRanges map[string]*unicode.RangeTable) {\n\tprNames := make([]string, 0, len(propertyRanges))\n\tfor k := range propertyRanges {\n\t\tprNames = append(prNames, k)\n\t}\n\tsort.Strings(prNames)\n\tfor _, key := range prNames {\n\t\trt := propertyRanges[key]\n\t\tfmt.Fprintf(output, \"var _%s%s = %s\\n\", prefix, key, generateRangeTable(rt))\n\t}\n\tfmt.Fprintf(output, \"type _%sRuneRange unicode.RangeTable\\n\", prefix)\n\n\tfmt.Fprintf(output, \"func _%sRuneType(r rune) *_%sRuneRange {\\n\", prefix, prefix)\n\tfmt.Fprintf(output, \"\\tswitch {\\n\")\n\tfor _, key := range prNames {\n\t\tfmt.Fprintf(output, \"\\tcase unicode.Is(_%s%s, r):\\n\\t\\treturn (*_%sRuneRange)(_%s%s)\\n\", prefix, key, prefix, prefix, key)\n\t}\n\tfmt.Fprintf(output, \"\\tdefault:\\n\\t\\treturn nil\\n\")\n\tfmt.Fprintf(output, \"\\t}\\n\")\n\tfmt.Fprintf(output, \"}\\n\")\n\n\tfmt.Fprintf(output, \"func (rng *_%sRuneRange) String() string {\\n\", prefix)\n\tfmt.Fprintf(output, \"\\tswitch (*unicode.RangeTable)(rng) {\\n\")\n\tfor _, key := range prNames {\n\t\tfmt.Fprintf(output, \"\\tcase _%s%s:\\n\\t\\treturn %q\\n\", prefix, key, key)\n\t}\n\tfmt.Fprintf(output, \"\\tdefault:\\n\\t\\treturn \\\"Other\\\"\\n\")\n\tfmt.Fprintf(output, \"\\t}\\n\")\n\tfmt.Fprintf(output, \"}\\n\")\n}\n\nfunc generateRangeTable(rt *unicode.RangeTable) string {\n\trv := \"&unicode.RangeTable{\\n\"\n\tif rt.R16 != nil {\n\t\trv += \"\\tR16: []unicode.Range16{\\n\"\n\t\tfor _, r16 := range rt.R16 {\n\t\t\trv += fmt.Sprintf(\"\\t\\t%#v,\\n\", r16)\n\t\t}\n\t\trv += \"\\t},\\n\"\n\t}\n\tif rt.R32 != nil {\n\t\trv += \"\\tR32: []unicode.Range32{\\n\"\n\t\tfor _, r32 := range rt.R32 {\n\t\t\trv += fmt.Sprintf(\"\\t\\t%#v,\\n\", r32)\n\t\t}\n\t\trv += \"\\t},\\n\"\n\t}\n\trv += fmt.Sprintf(\"\\t\\tLatinOffset: %d,\\n\", rt.LatinOffset)\n\trv += \"}\\n\"\n\treturn rv\n}\n\nconst fileHeader = `// Generated by running\n//      maketables --url=%s\n// DO NOT EDIT\n\npackage textseg\n\nimport(\n\t\"unicode\"\n)\n`\n\nfunc setupOutput() {\n\toutput = bufio.NewWriter(startGofmt())\n}\n\n// startGofmt connects output to a gofmt process if -output is set.\nfunc startGofmt() io.Writer {\n\tif *outputFile == \"\" {\n\t\treturn os.Stdout\n\t}\n\tstdout, err := os.Create(*outputFile)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\t// Pipe output to gofmt.\n\tgofmt := exec.Command(\"gofmt\")\n\tfd, err := gofmt.StdinPipe()\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\tgofmt.Stdout = stdout\n\tgofmt.Stderr = os.Stderr\n\terr = gofmt.Start()\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\treturn fd\n}\n\nfunc flushOutput() {\n\terr := output.Flush()\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/apparentlymart/go-textseg/textseg/make_test_tables.go",
    "content": "//  Copyright (c) 2014 Couchbase, Inc.\n//  Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file\n//  except in compliance with the License. You may obtain a copy of the License at\n//    http://www.apache.org/licenses/LICENSE-2.0\n//  Unless required by applicable law or agreed to in writing, software distributed under the\n//  License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\n//  either express or implied. See the License for the specific language governing permissions\n//  and limitations under the License.\n\n// +build ignore\n\npackage main\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"flag\"\n\t\"fmt\"\n\t\"io\"\n\t\"log\"\n\t\"net/http\"\n\t\"os\"\n\t\"os/exec\"\n\t\"strconv\"\n\t\"strings\"\n\t\"unicode\"\n)\n\nvar url = flag.String(\"url\",\n\t\"http://www.unicode.org/Public/\"+unicode.Version+\"/ucd/auxiliary/\",\n\t\"URL of Unicode database directory\")\nvar verbose = flag.Bool(\"verbose\",\n\tfalse,\n\t\"write data to stdout as it is parsed\")\nvar localFiles = flag.Bool(\"local\",\n\tfalse,\n\t\"data files have been copied to the current directory; for debugging only\")\n\nvar outputFile = flag.String(\"output\",\n\t\"\",\n\t\"output file for generated tables; default stdout\")\n\nvar output *bufio.Writer\n\nfunc main() {\n\tflag.Parse()\n\tsetupOutput()\n\n\tgraphemeTests := make([]test, 0)\n\tgraphemeTests = loadUnicodeData(\"GraphemeBreakTest.txt\", graphemeTests)\n\twordTests := make([]test, 0)\n\twordTests = loadUnicodeData(\"WordBreakTest.txt\", wordTests)\n\tsentenceTests := make([]test, 0)\n\tsentenceTests = loadUnicodeData(\"SentenceBreakTest.txt\", sentenceTests)\n\n\tfmt.Fprintf(output, fileHeader, *url)\n\tgenerateTestTables(\"Grapheme\", graphemeTests)\n\tgenerateTestTables(\"Word\", wordTests)\n\tgenerateTestTables(\"Sentence\", sentenceTests)\n\n\tflushOutput()\n}\n\n// WordBreakProperty.txt has the form:\n// 05F0..05F2    ; Hebrew_Letter # Lo   [3] HEBREW LIGATURE YIDDISH DOUBLE VAV..HEBREW LIGATURE YIDDISH DOUBLE YOD\n// FB1D          ; Hebrew_Letter # Lo       HEBREW LETTER YOD WITH HIRIQ\nfunc openReader(file string) (input io.ReadCloser) {\n\tif *localFiles {\n\t\tf, err := os.Open(file)\n\t\tif err != nil {\n\t\t\tlog.Fatal(err)\n\t\t}\n\t\tinput = f\n\t} else {\n\t\tpath := *url + file\n\t\tresp, err := http.Get(path)\n\t\tif err != nil {\n\t\t\tlog.Fatal(err)\n\t\t}\n\t\tif resp.StatusCode != 200 {\n\t\t\tlog.Fatal(\"bad GET status for \"+file, resp.Status)\n\t\t}\n\t\tinput = resp.Body\n\t}\n\treturn\n}\n\nfunc loadUnicodeData(filename string, tests []test) []test {\n\tf := openReader(filename)\n\tdefer f.Close()\n\tbufioReader := bufio.NewReader(f)\n\tline, err := bufioReader.ReadString('\\n')\n\tfor err == nil {\n\t\ttests = parseLine(line, tests)\n\t\tline, err = bufioReader.ReadString('\\n')\n\t}\n\t// if the err was EOF still need to process last value\n\tif err == io.EOF {\n\t\ttests = parseLine(line, tests)\n\t}\n\treturn tests\n}\n\nconst comment = \"#\"\nconst brk = \"÷\"\nconst nbrk = \"×\"\n\ntype test [][]byte\n\nfunc parseLine(line string, tests []test) []test {\n\tif strings.HasPrefix(line, comment) {\n\t\treturn tests\n\t}\n\tline = strings.TrimSpace(line)\n\tif len(line) == 0 {\n\t\treturn tests\n\t}\n\tcommentStart := strings.Index(line, comment)\n\tif commentStart > 0 {\n\t\tline = line[0:commentStart]\n\t}\n\tpieces := strings.Split(line, brk)\n\tt := make(test, 0)\n\tfor _, piece := range pieces {\n\t\tpiece = strings.TrimSpace(piece)\n\t\tif len(piece) > 0 {\n\t\t\tcodePoints := strings.Split(piece, nbrk)\n\t\t\tword := \"\"\n\t\t\tfor _, codePoint := range codePoints {\n\t\t\t\tcodePoint = strings.TrimSpace(codePoint)\n\t\t\t\tr, err := strconv.ParseInt(codePoint, 16, 64)\n\t\t\t\tif err != nil {\n\t\t\t\t\tlog.Printf(\"err: %v for '%s'\", err, string(r))\n\t\t\t\t\treturn tests\n\t\t\t\t}\n\n\t\t\t\tword += string(r)\n\t\t\t}\n\t\t\tt = append(t, []byte(word))\n\t\t}\n\t}\n\ttests = append(tests, t)\n\treturn tests\n}\n\nfunc generateTestTables(prefix string, tests []test) {\n\tfmt.Fprintf(output, testHeader, prefix)\n\tfor _, t := range tests {\n\t\tfmt.Fprintf(output, \"\\t\\t{\\n\")\n\t\tfmt.Fprintf(output, \"\\t\\t\\tinput: %#v,\\n\", bytes.Join(t, []byte{}))\n\t\tfmt.Fprintf(output, \"\\t\\t\\toutput: %s,\\n\", generateTest(t))\n\t\tfmt.Fprintf(output, \"\\t\\t},\\n\")\n\t}\n\tfmt.Fprintf(output, \"}\\n\")\n}\n\nfunc generateTest(t test) string {\n\trv := \"[][]byte{\"\n\tfor _, te := range t {\n\t\trv += fmt.Sprintf(\"%#v,\", te)\n\t}\n\trv += \"}\"\n\treturn rv\n}\n\nconst fileHeader = `// Generated by running\n//      maketesttables --url=%s\n// DO NOT EDIT\n\npackage textseg\n`\n\nconst testHeader = `var unicode%sTests = []struct {\n\t\tinput  []byte\n\t\toutput [][]byte\n\t}{\n`\n\nfunc setupOutput() {\n\toutput = bufio.NewWriter(startGofmt())\n}\n\n// startGofmt connects output to a gofmt process if -output is set.\nfunc startGofmt() io.Writer {\n\tif *outputFile == \"\" {\n\t\treturn os.Stdout\n\t}\n\tstdout, err := os.Create(*outputFile)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\t// Pipe output to gofmt.\n\tgofmt := exec.Command(\"gofmt\")\n\tfd, err := gofmt.StdinPipe()\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\tgofmt.Stdout = stdout\n\tgofmt.Stderr = os.Stderr\n\terr = gofmt.Start()\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\treturn fd\n}\n\nfunc flushOutput() {\n\terr := output.Flush()\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/apparentlymart/go-textseg/textseg/tables.go",
    "content": "// Generated by running\n//      maketables --url=http://www.unicode.org/Public/9.0.0/ucd/auxiliary/\n// DO NOT EDIT\n\npackage textseg\n\nimport (\n\t\"unicode\"\n)\n\nvar _GraphemeCR = &unicode.RangeTable{\n\tR16: []unicode.Range16{\n\t\tunicode.Range16{Lo: 0xd, Hi: 0xd, Stride: 0x1},\n\t},\n\tLatinOffset: 1,\n}\n\nvar _GraphemeControl = &unicode.RangeTable{\n\tR16: []unicode.Range16{\n\t\tunicode.Range16{Lo: 0x0, Hi: 0x9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb, Hi: 0xc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xe, Hi: 0x1f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x7f, Hi: 0x9f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xad, Hi: 0xad, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x61c, Hi: 0x61c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x180e, Hi: 0x180e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x200b, Hi: 0x200b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x200e, Hi: 0x200f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2028, Hi: 0x2028, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2029, Hi: 0x2029, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x202a, Hi: 0x202e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2060, Hi: 0x2064, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2065, Hi: 0x2065, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2066, Hi: 0x206f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd800, Hi: 0xdfff, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfeff, Hi: 0xfeff, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfff0, Hi: 0xfff8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfff9, Hi: 0xfffb, Stride: 0x1},\n\t},\n\tR32: []unicode.Range32{\n\t\tunicode.Range32{Lo: 0x1bca0, Hi: 0x1bca3, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d173, Hi: 0x1d17a, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0xe0000, Hi: 0xe0000, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0xe0001, Hi: 0xe0001, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0xe0002, Hi: 0xe001f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0xe0080, Hi: 0xe00ff, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0xe01f0, Hi: 0xe0fff, Stride: 0x1},\n\t},\n\tLatinOffset: 5,\n}\n\nvar _GraphemeE_Base = &unicode.RangeTable{\n\tR16: []unicode.Range16{\n\t\tunicode.Range16{Lo: 0x261d, Hi: 0x261d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x26f9, Hi: 0x26f9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x270a, Hi: 0x270d, Stride: 0x1},\n\t},\n\tR32: []unicode.Range32{\n\t\tunicode.Range32{Lo: 0x1f385, Hi: 0x1f385, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1f3c3, Hi: 0x1f3c4, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1f3ca, Hi: 0x1f3cb, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1f442, Hi: 0x1f443, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1f446, Hi: 0x1f450, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1f46e, Hi: 0x1f46e, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1f470, Hi: 0x1f478, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1f47c, Hi: 0x1f47c, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1f481, Hi: 0x1f483, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1f485, Hi: 0x1f487, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1f4aa, Hi: 0x1f4aa, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1f575, Hi: 0x1f575, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1f57a, Hi: 0x1f57a, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1f590, Hi: 0x1f590, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1f595, Hi: 0x1f596, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1f645, Hi: 0x1f647, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1f64b, Hi: 0x1f64f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1f6a3, Hi: 0x1f6a3, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1f6b4, Hi: 0x1f6b6, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1f6c0, Hi: 0x1f6c0, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1f918, Hi: 0x1f91e, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1f926, Hi: 0x1f926, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1f930, Hi: 0x1f930, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1f933, Hi: 0x1f939, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1f93c, Hi: 0x1f93e, Stride: 0x1},\n\t},\n\tLatinOffset: 0,\n}\n\nvar _GraphemeE_Base_GAZ = &unicode.RangeTable{\n\tR32: []unicode.Range32{\n\t\tunicode.Range32{Lo: 0x1f466, Hi: 0x1f469, Stride: 0x1},\n\t},\n\tLatinOffset: 0,\n}\n\nvar _GraphemeE_Modifier = &unicode.RangeTable{\n\tR32: []unicode.Range32{\n\t\tunicode.Range32{Lo: 0x1f3fb, Hi: 0x1f3ff, Stride: 0x1},\n\t},\n\tLatinOffset: 0,\n}\n\nvar _GraphemeExtend = &unicode.RangeTable{\n\tR16: []unicode.Range16{\n\t\tunicode.Range16{Lo: 0x300, Hi: 0x36f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x483, Hi: 0x487, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x488, Hi: 0x489, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x591, Hi: 0x5bd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x5bf, Hi: 0x5bf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x5c1, Hi: 0x5c2, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x5c4, Hi: 0x5c5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x5c7, Hi: 0x5c7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x610, Hi: 0x61a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x64b, Hi: 0x65f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x670, Hi: 0x670, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x6d6, Hi: 0x6dc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x6df, Hi: 0x6e4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x6e7, Hi: 0x6e8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x6ea, Hi: 0x6ed, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x711, Hi: 0x711, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x730, Hi: 0x74a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x7a6, Hi: 0x7b0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x7eb, Hi: 0x7f3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x816, Hi: 0x819, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x81b, Hi: 0x823, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x825, Hi: 0x827, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x829, Hi: 0x82d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x859, Hi: 0x85b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x8d4, Hi: 0x8e1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x8e3, Hi: 0x902, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x93a, Hi: 0x93a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x93c, Hi: 0x93c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x941, Hi: 0x948, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x94d, Hi: 0x94d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x951, Hi: 0x957, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x962, Hi: 0x963, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x981, Hi: 0x981, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x9bc, Hi: 0x9bc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x9be, Hi: 0x9be, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x9c1, Hi: 0x9c4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x9cd, Hi: 0x9cd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x9d7, Hi: 0x9d7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x9e2, Hi: 0x9e3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa01, Hi: 0xa02, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa3c, Hi: 0xa3c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa41, Hi: 0xa42, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa47, Hi: 0xa48, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa4b, Hi: 0xa4d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa51, Hi: 0xa51, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa70, Hi: 0xa71, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa75, Hi: 0xa75, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa81, Hi: 0xa82, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xabc, Hi: 0xabc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xac1, Hi: 0xac5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xac7, Hi: 0xac8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xacd, Hi: 0xacd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xae2, Hi: 0xae3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb01, Hi: 0xb01, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb3c, Hi: 0xb3c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb3e, Hi: 0xb3e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb3f, Hi: 0xb3f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb41, Hi: 0xb44, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb4d, Hi: 0xb4d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb56, Hi: 0xb56, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb57, Hi: 0xb57, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb62, Hi: 0xb63, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb82, Hi: 0xb82, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbbe, Hi: 0xbbe, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbc0, Hi: 0xbc0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbcd, Hi: 0xbcd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbd7, Hi: 0xbd7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc00, Hi: 0xc00, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc3e, Hi: 0xc40, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc46, Hi: 0xc48, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc4a, Hi: 0xc4d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc55, Hi: 0xc56, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc62, Hi: 0xc63, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc81, Hi: 0xc81, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcbc, Hi: 0xcbc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcbf, Hi: 0xcbf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcc2, Hi: 0xcc2, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcc6, Hi: 0xcc6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xccc, Hi: 0xccd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcd5, Hi: 0xcd6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xce2, Hi: 0xce3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd01, Hi: 0xd01, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd3e, Hi: 0xd3e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd41, Hi: 0xd44, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd4d, Hi: 0xd4d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd57, Hi: 0xd57, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd62, Hi: 0xd63, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xdca, Hi: 0xdca, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xdcf, Hi: 0xdcf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xdd2, Hi: 0xdd4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xdd6, Hi: 0xdd6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xddf, Hi: 0xddf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xe31, Hi: 0xe31, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xe34, Hi: 0xe3a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xe47, Hi: 0xe4e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xeb1, Hi: 0xeb1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xeb4, Hi: 0xeb9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xebb, Hi: 0xebc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xec8, Hi: 0xecd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xf18, Hi: 0xf19, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xf35, Hi: 0xf35, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xf37, Hi: 0xf37, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xf39, Hi: 0xf39, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xf71, Hi: 0xf7e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xf80, Hi: 0xf84, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xf86, Hi: 0xf87, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xf8d, Hi: 0xf97, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xf99, Hi: 0xfbc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfc6, Hi: 0xfc6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x102d, Hi: 0x1030, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1032, Hi: 0x1037, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1039, Hi: 0x103a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x103d, Hi: 0x103e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1058, Hi: 0x1059, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x105e, Hi: 0x1060, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1071, Hi: 0x1074, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1082, Hi: 0x1082, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1085, Hi: 0x1086, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x108d, Hi: 0x108d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x109d, Hi: 0x109d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x135d, Hi: 0x135f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1712, Hi: 0x1714, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1732, Hi: 0x1734, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1752, Hi: 0x1753, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1772, Hi: 0x1773, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x17b4, Hi: 0x17b5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x17b7, Hi: 0x17bd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x17c6, Hi: 0x17c6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x17c9, Hi: 0x17d3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x17dd, Hi: 0x17dd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x180b, Hi: 0x180d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1885, Hi: 0x1886, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x18a9, Hi: 0x18a9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1920, Hi: 0x1922, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1927, Hi: 0x1928, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1932, Hi: 0x1932, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1939, Hi: 0x193b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1a17, Hi: 0x1a18, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1a1b, Hi: 0x1a1b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1a56, Hi: 0x1a56, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1a58, Hi: 0x1a5e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1a60, Hi: 0x1a60, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1a62, Hi: 0x1a62, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1a65, Hi: 0x1a6c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1a73, Hi: 0x1a7c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1a7f, Hi: 0x1a7f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ab0, Hi: 0x1abd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1abe, Hi: 0x1abe, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1b00, Hi: 0x1b03, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1b34, Hi: 0x1b34, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1b36, Hi: 0x1b3a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1b3c, Hi: 0x1b3c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1b42, Hi: 0x1b42, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1b6b, Hi: 0x1b73, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1b80, Hi: 0x1b81, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ba2, Hi: 0x1ba5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ba8, Hi: 0x1ba9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1bab, Hi: 0x1bad, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1be6, Hi: 0x1be6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1be8, Hi: 0x1be9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1bed, Hi: 0x1bed, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1bef, Hi: 0x1bf1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1c2c, Hi: 0x1c33, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1c36, Hi: 0x1c37, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1cd0, Hi: 0x1cd2, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1cd4, Hi: 0x1ce0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ce2, Hi: 0x1ce8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ced, Hi: 0x1ced, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1cf4, Hi: 0x1cf4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1cf8, Hi: 0x1cf9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1dc0, Hi: 0x1df5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1dfb, Hi: 0x1dff, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x200c, Hi: 0x200c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x20d0, Hi: 0x20dc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x20dd, Hi: 0x20e0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x20e1, Hi: 0x20e1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x20e2, Hi: 0x20e4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x20e5, Hi: 0x20f0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2cef, Hi: 0x2cf1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2d7f, Hi: 0x2d7f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2de0, Hi: 0x2dff, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x302a, Hi: 0x302d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x302e, Hi: 0x302f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3099, Hi: 0x309a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa66f, Hi: 0xa66f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa670, Hi: 0xa672, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa674, Hi: 0xa67d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa69e, Hi: 0xa69f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa6f0, Hi: 0xa6f1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa802, Hi: 0xa802, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa806, Hi: 0xa806, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa80b, Hi: 0xa80b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa825, Hi: 0xa826, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa8c4, Hi: 0xa8c5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa8e0, Hi: 0xa8f1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa926, Hi: 0xa92d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa947, Hi: 0xa951, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa980, Hi: 0xa982, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa9b3, Hi: 0xa9b3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa9b6, Hi: 0xa9b9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa9bc, Hi: 0xa9bc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa9e5, Hi: 0xa9e5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaa29, Hi: 0xaa2e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaa31, Hi: 0xaa32, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaa35, Hi: 0xaa36, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaa43, Hi: 0xaa43, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaa4c, Hi: 0xaa4c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaa7c, Hi: 0xaa7c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaab0, Hi: 0xaab0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaab2, Hi: 0xaab4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaab7, Hi: 0xaab8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaabe, Hi: 0xaabf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaac1, Hi: 0xaac1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaaec, Hi: 0xaaed, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaaf6, Hi: 0xaaf6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xabe5, Hi: 0xabe5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xabe8, Hi: 0xabe8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xabed, Hi: 0xabed, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfb1e, Hi: 0xfb1e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfe00, Hi: 0xfe0f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfe20, Hi: 0xfe2f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xff9e, Hi: 0xff9f, Stride: 0x1},\n\t},\n\tR32: []unicode.Range32{\n\t\tunicode.Range32{Lo: 0x101fd, Hi: 0x101fd, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x102e0, Hi: 0x102e0, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10376, Hi: 0x1037a, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10a01, Hi: 0x10a03, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10a05, Hi: 0x10a06, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10a0c, Hi: 0x10a0f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10a38, Hi: 0x10a3a, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10a3f, Hi: 0x10a3f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10ae5, Hi: 0x10ae6, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11001, Hi: 0x11001, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11038, Hi: 0x11046, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1107f, Hi: 0x11081, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x110b3, Hi: 0x110b6, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x110b9, Hi: 0x110ba, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11100, Hi: 0x11102, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11127, Hi: 0x1112b, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1112d, Hi: 0x11134, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11173, Hi: 0x11173, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11180, Hi: 0x11181, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x111b6, Hi: 0x111be, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x111ca, Hi: 0x111cc, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1122f, Hi: 0x11231, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11234, Hi: 0x11234, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11236, Hi: 0x11237, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1123e, Hi: 0x1123e, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x112df, Hi: 0x112df, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x112e3, Hi: 0x112ea, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11300, Hi: 0x11301, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1133c, Hi: 0x1133c, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1133e, Hi: 0x1133e, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11340, Hi: 0x11340, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11357, Hi: 0x11357, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11366, Hi: 0x1136c, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11370, Hi: 0x11374, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11438, Hi: 0x1143f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11442, Hi: 0x11444, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11446, Hi: 0x11446, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x114b0, Hi: 0x114b0, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x114b3, Hi: 0x114b8, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x114ba, Hi: 0x114ba, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x114bd, Hi: 0x114bd, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x114bf, Hi: 0x114c0, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x114c2, Hi: 0x114c3, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x115af, Hi: 0x115af, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x115b2, Hi: 0x115b5, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x115bc, Hi: 0x115bd, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x115bf, Hi: 0x115c0, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x115dc, Hi: 0x115dd, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11633, Hi: 0x1163a, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1163d, Hi: 0x1163d, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1163f, Hi: 0x11640, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x116ab, Hi: 0x116ab, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x116ad, Hi: 0x116ad, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x116b0, Hi: 0x116b5, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x116b7, Hi: 0x116b7, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1171d, Hi: 0x1171f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11722, Hi: 0x11725, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11727, Hi: 0x1172b, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11c30, Hi: 0x11c36, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11c38, Hi: 0x11c3d, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11c3f, Hi: 0x11c3f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11c92, Hi: 0x11ca7, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11caa, Hi: 0x11cb0, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11cb2, Hi: 0x11cb3, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11cb5, Hi: 0x11cb6, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x16af0, Hi: 0x16af4, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x16b30, Hi: 0x16b36, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x16f8f, Hi: 0x16f92, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1bc9d, Hi: 0x1bc9e, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d165, Hi: 0x1d165, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d167, Hi: 0x1d169, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d16e, Hi: 0x1d172, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d17b, Hi: 0x1d182, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d185, Hi: 0x1d18b, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d1aa, Hi: 0x1d1ad, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d242, Hi: 0x1d244, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1da00, Hi: 0x1da36, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1da3b, Hi: 0x1da6c, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1da75, Hi: 0x1da75, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1da84, Hi: 0x1da84, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1da9b, Hi: 0x1da9f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1daa1, Hi: 0x1daaf, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1e000, Hi: 0x1e006, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1e008, Hi: 0x1e018, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1e01b, Hi: 0x1e021, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1e023, Hi: 0x1e024, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1e026, Hi: 0x1e02a, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1e8d0, Hi: 0x1e8d6, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1e944, Hi: 0x1e94a, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0xe0020, Hi: 0xe007f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0xe0100, Hi: 0xe01ef, Stride: 0x1},\n\t},\n\tLatinOffset: 0,\n}\n\nvar _GraphemeGlue_After_Zwj = &unicode.RangeTable{\n\tR16: []unicode.Range16{\n\t\tunicode.Range16{Lo: 0x2764, Hi: 0x2764, Stride: 0x1},\n\t},\n\tR32: []unicode.Range32{\n\t\tunicode.Range32{Lo: 0x1f48b, Hi: 0x1f48b, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1f5e8, Hi: 0x1f5e8, Stride: 0x1},\n\t},\n\tLatinOffset: 0,\n}\n\nvar _GraphemeL = &unicode.RangeTable{\n\tR16: []unicode.Range16{\n\t\tunicode.Range16{Lo: 0x1100, Hi: 0x115f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa960, Hi: 0xa97c, Stride: 0x1},\n\t},\n\tLatinOffset: 0,\n}\n\nvar _GraphemeLF = &unicode.RangeTable{\n\tR16: []unicode.Range16{\n\t\tunicode.Range16{Lo: 0xa, Hi: 0xa, Stride: 0x1},\n\t},\n\tLatinOffset: 1,\n}\n\nvar _GraphemeLV = &unicode.RangeTable{\n\tR16: []unicode.Range16{\n\t\tunicode.Range16{Lo: 0xac00, Hi: 0xac00, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xac1c, Hi: 0xac1c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xac38, Hi: 0xac38, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xac54, Hi: 0xac54, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xac70, Hi: 0xac70, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xac8c, Hi: 0xac8c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaca8, Hi: 0xaca8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xacc4, Hi: 0xacc4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xace0, Hi: 0xace0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xacfc, Hi: 0xacfc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xad18, Hi: 0xad18, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xad34, Hi: 0xad34, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xad50, Hi: 0xad50, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xad6c, Hi: 0xad6c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xad88, Hi: 0xad88, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xada4, Hi: 0xada4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xadc0, Hi: 0xadc0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaddc, Hi: 0xaddc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xadf8, Hi: 0xadf8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xae14, Hi: 0xae14, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xae30, Hi: 0xae30, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xae4c, Hi: 0xae4c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xae68, Hi: 0xae68, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xae84, Hi: 0xae84, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaea0, Hi: 0xaea0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaebc, Hi: 0xaebc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaed8, Hi: 0xaed8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaef4, Hi: 0xaef4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaf10, Hi: 0xaf10, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaf2c, Hi: 0xaf2c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaf48, Hi: 0xaf48, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaf64, Hi: 0xaf64, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaf80, Hi: 0xaf80, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaf9c, Hi: 0xaf9c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xafb8, Hi: 0xafb8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xafd4, Hi: 0xafd4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaff0, Hi: 0xaff0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb00c, Hi: 0xb00c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb028, Hi: 0xb028, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb044, Hi: 0xb044, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb060, Hi: 0xb060, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb07c, Hi: 0xb07c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb098, Hi: 0xb098, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb0b4, Hi: 0xb0b4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb0d0, Hi: 0xb0d0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb0ec, Hi: 0xb0ec, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb108, Hi: 0xb108, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb124, Hi: 0xb124, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb140, Hi: 0xb140, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb15c, Hi: 0xb15c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb178, Hi: 0xb178, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb194, Hi: 0xb194, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb1b0, Hi: 0xb1b0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb1cc, Hi: 0xb1cc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb1e8, Hi: 0xb1e8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb204, Hi: 0xb204, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb220, Hi: 0xb220, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb23c, Hi: 0xb23c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb258, Hi: 0xb258, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb274, Hi: 0xb274, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb290, Hi: 0xb290, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb2ac, Hi: 0xb2ac, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb2c8, Hi: 0xb2c8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb2e4, Hi: 0xb2e4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb300, Hi: 0xb300, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb31c, Hi: 0xb31c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb338, Hi: 0xb338, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb354, Hi: 0xb354, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb370, Hi: 0xb370, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb38c, Hi: 0xb38c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb3a8, Hi: 0xb3a8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb3c4, Hi: 0xb3c4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb3e0, Hi: 0xb3e0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb3fc, Hi: 0xb3fc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb418, Hi: 0xb418, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb434, Hi: 0xb434, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb450, Hi: 0xb450, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb46c, Hi: 0xb46c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb488, Hi: 0xb488, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb4a4, Hi: 0xb4a4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb4c0, Hi: 0xb4c0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb4dc, Hi: 0xb4dc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb4f8, Hi: 0xb4f8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb514, Hi: 0xb514, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb530, Hi: 0xb530, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb54c, Hi: 0xb54c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb568, Hi: 0xb568, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb584, Hi: 0xb584, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb5a0, Hi: 0xb5a0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb5bc, Hi: 0xb5bc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb5d8, Hi: 0xb5d8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb5f4, Hi: 0xb5f4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb610, Hi: 0xb610, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb62c, Hi: 0xb62c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb648, Hi: 0xb648, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb664, Hi: 0xb664, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb680, Hi: 0xb680, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb69c, Hi: 0xb69c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb6b8, Hi: 0xb6b8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb6d4, Hi: 0xb6d4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb6f0, Hi: 0xb6f0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb70c, Hi: 0xb70c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb728, Hi: 0xb728, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb744, Hi: 0xb744, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb760, Hi: 0xb760, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb77c, Hi: 0xb77c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb798, Hi: 0xb798, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb7b4, Hi: 0xb7b4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb7d0, Hi: 0xb7d0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb7ec, Hi: 0xb7ec, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb808, Hi: 0xb808, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb824, Hi: 0xb824, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb840, Hi: 0xb840, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb85c, Hi: 0xb85c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb878, Hi: 0xb878, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb894, Hi: 0xb894, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb8b0, Hi: 0xb8b0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb8cc, Hi: 0xb8cc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb8e8, Hi: 0xb8e8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb904, Hi: 0xb904, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb920, Hi: 0xb920, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb93c, Hi: 0xb93c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb958, Hi: 0xb958, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb974, Hi: 0xb974, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb990, Hi: 0xb990, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb9ac, Hi: 0xb9ac, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb9c8, Hi: 0xb9c8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb9e4, Hi: 0xb9e4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xba00, Hi: 0xba00, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xba1c, Hi: 0xba1c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xba38, Hi: 0xba38, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xba54, Hi: 0xba54, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xba70, Hi: 0xba70, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xba8c, Hi: 0xba8c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbaa8, Hi: 0xbaa8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbac4, Hi: 0xbac4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbae0, Hi: 0xbae0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbafc, Hi: 0xbafc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbb18, Hi: 0xbb18, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbb34, Hi: 0xbb34, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbb50, Hi: 0xbb50, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbb6c, Hi: 0xbb6c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbb88, Hi: 0xbb88, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbba4, Hi: 0xbba4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbbc0, Hi: 0xbbc0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbbdc, Hi: 0xbbdc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbbf8, Hi: 0xbbf8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbc14, Hi: 0xbc14, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbc30, Hi: 0xbc30, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbc4c, Hi: 0xbc4c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbc68, Hi: 0xbc68, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbc84, Hi: 0xbc84, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbca0, Hi: 0xbca0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbcbc, Hi: 0xbcbc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbcd8, Hi: 0xbcd8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbcf4, Hi: 0xbcf4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbd10, Hi: 0xbd10, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbd2c, Hi: 0xbd2c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbd48, Hi: 0xbd48, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbd64, Hi: 0xbd64, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbd80, Hi: 0xbd80, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbd9c, Hi: 0xbd9c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbdb8, Hi: 0xbdb8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbdd4, Hi: 0xbdd4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbdf0, Hi: 0xbdf0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbe0c, Hi: 0xbe0c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbe28, Hi: 0xbe28, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbe44, Hi: 0xbe44, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbe60, Hi: 0xbe60, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbe7c, Hi: 0xbe7c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbe98, Hi: 0xbe98, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbeb4, Hi: 0xbeb4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbed0, Hi: 0xbed0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbeec, Hi: 0xbeec, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbf08, Hi: 0xbf08, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbf24, Hi: 0xbf24, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbf40, Hi: 0xbf40, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbf5c, Hi: 0xbf5c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbf78, Hi: 0xbf78, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbf94, Hi: 0xbf94, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbfb0, Hi: 0xbfb0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbfcc, Hi: 0xbfcc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbfe8, Hi: 0xbfe8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc004, Hi: 0xc004, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc020, Hi: 0xc020, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc03c, Hi: 0xc03c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc058, Hi: 0xc058, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc074, Hi: 0xc074, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc090, Hi: 0xc090, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc0ac, Hi: 0xc0ac, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc0c8, Hi: 0xc0c8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc0e4, Hi: 0xc0e4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc100, Hi: 0xc100, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc11c, Hi: 0xc11c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc138, Hi: 0xc138, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc154, Hi: 0xc154, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc170, Hi: 0xc170, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc18c, Hi: 0xc18c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc1a8, Hi: 0xc1a8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc1c4, Hi: 0xc1c4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc1e0, Hi: 0xc1e0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc1fc, Hi: 0xc1fc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc218, Hi: 0xc218, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc234, Hi: 0xc234, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc250, Hi: 0xc250, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc26c, Hi: 0xc26c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc288, Hi: 0xc288, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc2a4, Hi: 0xc2a4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc2c0, Hi: 0xc2c0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc2dc, Hi: 0xc2dc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc2f8, Hi: 0xc2f8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc314, Hi: 0xc314, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc330, Hi: 0xc330, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc34c, Hi: 0xc34c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc368, Hi: 0xc368, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc384, Hi: 0xc384, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc3a0, Hi: 0xc3a0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc3bc, Hi: 0xc3bc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc3d8, Hi: 0xc3d8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc3f4, Hi: 0xc3f4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc410, Hi: 0xc410, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc42c, Hi: 0xc42c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc448, Hi: 0xc448, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc464, Hi: 0xc464, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc480, Hi: 0xc480, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc49c, Hi: 0xc49c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc4b8, Hi: 0xc4b8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc4d4, Hi: 0xc4d4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc4f0, Hi: 0xc4f0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc50c, Hi: 0xc50c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc528, Hi: 0xc528, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc544, Hi: 0xc544, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc560, Hi: 0xc560, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc57c, Hi: 0xc57c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc598, Hi: 0xc598, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc5b4, Hi: 0xc5b4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc5d0, Hi: 0xc5d0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc5ec, Hi: 0xc5ec, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc608, Hi: 0xc608, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc624, Hi: 0xc624, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc640, Hi: 0xc640, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc65c, Hi: 0xc65c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc678, Hi: 0xc678, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc694, Hi: 0xc694, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc6b0, Hi: 0xc6b0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc6cc, Hi: 0xc6cc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc6e8, Hi: 0xc6e8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc704, Hi: 0xc704, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc720, Hi: 0xc720, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc73c, Hi: 0xc73c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc758, Hi: 0xc758, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc774, Hi: 0xc774, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc790, Hi: 0xc790, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc7ac, Hi: 0xc7ac, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc7c8, Hi: 0xc7c8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc7e4, Hi: 0xc7e4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc800, Hi: 0xc800, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc81c, Hi: 0xc81c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc838, Hi: 0xc838, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc854, Hi: 0xc854, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc870, Hi: 0xc870, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc88c, Hi: 0xc88c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc8a8, Hi: 0xc8a8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc8c4, Hi: 0xc8c4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc8e0, Hi: 0xc8e0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc8fc, Hi: 0xc8fc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc918, Hi: 0xc918, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc934, Hi: 0xc934, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc950, Hi: 0xc950, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc96c, Hi: 0xc96c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc988, Hi: 0xc988, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc9a4, Hi: 0xc9a4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc9c0, Hi: 0xc9c0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc9dc, Hi: 0xc9dc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc9f8, Hi: 0xc9f8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xca14, Hi: 0xca14, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xca30, Hi: 0xca30, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xca4c, Hi: 0xca4c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xca68, Hi: 0xca68, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xca84, Hi: 0xca84, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcaa0, Hi: 0xcaa0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcabc, Hi: 0xcabc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcad8, Hi: 0xcad8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcaf4, Hi: 0xcaf4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcb10, Hi: 0xcb10, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcb2c, Hi: 0xcb2c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcb48, Hi: 0xcb48, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcb64, Hi: 0xcb64, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcb80, Hi: 0xcb80, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcb9c, Hi: 0xcb9c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcbb8, Hi: 0xcbb8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcbd4, Hi: 0xcbd4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcbf0, Hi: 0xcbf0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcc0c, Hi: 0xcc0c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcc28, Hi: 0xcc28, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcc44, Hi: 0xcc44, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcc60, Hi: 0xcc60, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcc7c, Hi: 0xcc7c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcc98, Hi: 0xcc98, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xccb4, Hi: 0xccb4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xccd0, Hi: 0xccd0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xccec, Hi: 0xccec, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcd08, Hi: 0xcd08, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcd24, Hi: 0xcd24, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcd40, Hi: 0xcd40, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcd5c, Hi: 0xcd5c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcd78, Hi: 0xcd78, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcd94, Hi: 0xcd94, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcdb0, Hi: 0xcdb0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcdcc, Hi: 0xcdcc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcde8, Hi: 0xcde8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xce04, Hi: 0xce04, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xce20, Hi: 0xce20, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xce3c, Hi: 0xce3c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xce58, Hi: 0xce58, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xce74, Hi: 0xce74, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xce90, Hi: 0xce90, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xceac, Hi: 0xceac, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcec8, Hi: 0xcec8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcee4, Hi: 0xcee4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcf00, Hi: 0xcf00, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcf1c, Hi: 0xcf1c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcf38, Hi: 0xcf38, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcf54, Hi: 0xcf54, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcf70, Hi: 0xcf70, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcf8c, Hi: 0xcf8c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcfa8, Hi: 0xcfa8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcfc4, Hi: 0xcfc4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcfe0, Hi: 0xcfe0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcffc, Hi: 0xcffc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd018, Hi: 0xd018, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd034, Hi: 0xd034, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd050, Hi: 0xd050, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd06c, Hi: 0xd06c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd088, Hi: 0xd088, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd0a4, Hi: 0xd0a4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd0c0, Hi: 0xd0c0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd0dc, Hi: 0xd0dc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd0f8, Hi: 0xd0f8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd114, Hi: 0xd114, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd130, Hi: 0xd130, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd14c, Hi: 0xd14c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd168, Hi: 0xd168, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd184, Hi: 0xd184, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd1a0, Hi: 0xd1a0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd1bc, Hi: 0xd1bc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd1d8, Hi: 0xd1d8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd1f4, Hi: 0xd1f4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd210, Hi: 0xd210, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd22c, Hi: 0xd22c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd248, Hi: 0xd248, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd264, Hi: 0xd264, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd280, Hi: 0xd280, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd29c, Hi: 0xd29c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd2b8, Hi: 0xd2b8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd2d4, Hi: 0xd2d4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd2f0, Hi: 0xd2f0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd30c, Hi: 0xd30c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd328, Hi: 0xd328, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd344, Hi: 0xd344, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd360, Hi: 0xd360, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd37c, Hi: 0xd37c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd398, Hi: 0xd398, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd3b4, Hi: 0xd3b4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd3d0, Hi: 0xd3d0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd3ec, Hi: 0xd3ec, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd408, Hi: 0xd408, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd424, Hi: 0xd424, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd440, Hi: 0xd440, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd45c, Hi: 0xd45c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd478, Hi: 0xd478, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd494, Hi: 0xd494, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd4b0, Hi: 0xd4b0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd4cc, Hi: 0xd4cc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd4e8, Hi: 0xd4e8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd504, Hi: 0xd504, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd520, Hi: 0xd520, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd53c, Hi: 0xd53c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd558, Hi: 0xd558, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd574, Hi: 0xd574, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd590, Hi: 0xd590, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd5ac, Hi: 0xd5ac, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd5c8, Hi: 0xd5c8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd5e4, Hi: 0xd5e4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd600, Hi: 0xd600, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd61c, Hi: 0xd61c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd638, Hi: 0xd638, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd654, Hi: 0xd654, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd670, Hi: 0xd670, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd68c, Hi: 0xd68c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd6a8, Hi: 0xd6a8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd6c4, Hi: 0xd6c4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd6e0, Hi: 0xd6e0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd6fc, Hi: 0xd6fc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd718, Hi: 0xd718, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd734, Hi: 0xd734, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd750, Hi: 0xd750, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd76c, Hi: 0xd76c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd788, Hi: 0xd788, Stride: 0x1},\n\t},\n\tLatinOffset: 0,\n}\n\nvar _GraphemeLVT = &unicode.RangeTable{\n\tR16: []unicode.Range16{\n\t\tunicode.Range16{Lo: 0xac01, Hi: 0xac1b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xac1d, Hi: 0xac37, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xac39, Hi: 0xac53, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xac55, Hi: 0xac6f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xac71, Hi: 0xac8b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xac8d, Hi: 0xaca7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaca9, Hi: 0xacc3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xacc5, Hi: 0xacdf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xace1, Hi: 0xacfb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xacfd, Hi: 0xad17, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xad19, Hi: 0xad33, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xad35, Hi: 0xad4f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xad51, Hi: 0xad6b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xad6d, Hi: 0xad87, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xad89, Hi: 0xada3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xada5, Hi: 0xadbf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xadc1, Hi: 0xaddb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaddd, Hi: 0xadf7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xadf9, Hi: 0xae13, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xae15, Hi: 0xae2f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xae31, Hi: 0xae4b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xae4d, Hi: 0xae67, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xae69, Hi: 0xae83, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xae85, Hi: 0xae9f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaea1, Hi: 0xaebb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaebd, Hi: 0xaed7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaed9, Hi: 0xaef3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaef5, Hi: 0xaf0f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaf11, Hi: 0xaf2b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaf2d, Hi: 0xaf47, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaf49, Hi: 0xaf63, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaf65, Hi: 0xaf7f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaf81, Hi: 0xaf9b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaf9d, Hi: 0xafb7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xafb9, Hi: 0xafd3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xafd5, Hi: 0xafef, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaff1, Hi: 0xb00b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb00d, Hi: 0xb027, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb029, Hi: 0xb043, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb045, Hi: 0xb05f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb061, Hi: 0xb07b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb07d, Hi: 0xb097, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb099, Hi: 0xb0b3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb0b5, Hi: 0xb0cf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb0d1, Hi: 0xb0eb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb0ed, Hi: 0xb107, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb109, Hi: 0xb123, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb125, Hi: 0xb13f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb141, Hi: 0xb15b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb15d, Hi: 0xb177, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb179, Hi: 0xb193, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb195, Hi: 0xb1af, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb1b1, Hi: 0xb1cb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb1cd, Hi: 0xb1e7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb1e9, Hi: 0xb203, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb205, Hi: 0xb21f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb221, Hi: 0xb23b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb23d, Hi: 0xb257, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb259, Hi: 0xb273, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb275, Hi: 0xb28f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb291, Hi: 0xb2ab, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb2ad, Hi: 0xb2c7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb2c9, Hi: 0xb2e3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb2e5, Hi: 0xb2ff, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb301, Hi: 0xb31b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb31d, Hi: 0xb337, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb339, Hi: 0xb353, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb355, Hi: 0xb36f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb371, Hi: 0xb38b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb38d, Hi: 0xb3a7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb3a9, Hi: 0xb3c3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb3c5, Hi: 0xb3df, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb3e1, Hi: 0xb3fb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb3fd, Hi: 0xb417, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb419, Hi: 0xb433, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb435, Hi: 0xb44f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb451, Hi: 0xb46b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb46d, Hi: 0xb487, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb489, Hi: 0xb4a3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb4a5, Hi: 0xb4bf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb4c1, Hi: 0xb4db, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb4dd, Hi: 0xb4f7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb4f9, Hi: 0xb513, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb515, Hi: 0xb52f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb531, Hi: 0xb54b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb54d, Hi: 0xb567, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb569, Hi: 0xb583, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb585, Hi: 0xb59f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb5a1, Hi: 0xb5bb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb5bd, Hi: 0xb5d7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb5d9, Hi: 0xb5f3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb5f5, Hi: 0xb60f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb611, Hi: 0xb62b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb62d, Hi: 0xb647, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb649, Hi: 0xb663, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb665, Hi: 0xb67f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb681, Hi: 0xb69b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb69d, Hi: 0xb6b7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb6b9, Hi: 0xb6d3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb6d5, Hi: 0xb6ef, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb6f1, Hi: 0xb70b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb70d, Hi: 0xb727, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb729, Hi: 0xb743, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb745, Hi: 0xb75f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb761, Hi: 0xb77b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb77d, Hi: 0xb797, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb799, Hi: 0xb7b3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb7b5, Hi: 0xb7cf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb7d1, Hi: 0xb7eb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb7ed, Hi: 0xb807, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb809, Hi: 0xb823, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb825, Hi: 0xb83f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb841, Hi: 0xb85b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb85d, Hi: 0xb877, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb879, Hi: 0xb893, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb895, Hi: 0xb8af, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb8b1, Hi: 0xb8cb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb8cd, Hi: 0xb8e7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb8e9, Hi: 0xb903, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb905, Hi: 0xb91f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb921, Hi: 0xb93b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb93d, Hi: 0xb957, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb959, Hi: 0xb973, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb975, Hi: 0xb98f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb991, Hi: 0xb9ab, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb9ad, Hi: 0xb9c7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb9c9, Hi: 0xb9e3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb9e5, Hi: 0xb9ff, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xba01, Hi: 0xba1b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xba1d, Hi: 0xba37, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xba39, Hi: 0xba53, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xba55, Hi: 0xba6f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xba71, Hi: 0xba8b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xba8d, Hi: 0xbaa7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbaa9, Hi: 0xbac3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbac5, Hi: 0xbadf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbae1, Hi: 0xbafb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbafd, Hi: 0xbb17, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbb19, Hi: 0xbb33, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbb35, Hi: 0xbb4f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbb51, Hi: 0xbb6b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbb6d, Hi: 0xbb87, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbb89, Hi: 0xbba3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbba5, Hi: 0xbbbf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbbc1, Hi: 0xbbdb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbbdd, Hi: 0xbbf7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbbf9, Hi: 0xbc13, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbc15, Hi: 0xbc2f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbc31, Hi: 0xbc4b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbc4d, Hi: 0xbc67, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbc69, Hi: 0xbc83, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbc85, Hi: 0xbc9f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbca1, Hi: 0xbcbb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbcbd, Hi: 0xbcd7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbcd9, Hi: 0xbcf3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbcf5, Hi: 0xbd0f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbd11, Hi: 0xbd2b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbd2d, Hi: 0xbd47, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbd49, Hi: 0xbd63, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbd65, Hi: 0xbd7f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbd81, Hi: 0xbd9b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbd9d, Hi: 0xbdb7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbdb9, Hi: 0xbdd3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbdd5, Hi: 0xbdef, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbdf1, Hi: 0xbe0b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbe0d, Hi: 0xbe27, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbe29, Hi: 0xbe43, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbe45, Hi: 0xbe5f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbe61, Hi: 0xbe7b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbe7d, Hi: 0xbe97, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbe99, Hi: 0xbeb3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbeb5, Hi: 0xbecf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbed1, Hi: 0xbeeb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbeed, Hi: 0xbf07, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbf09, Hi: 0xbf23, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbf25, Hi: 0xbf3f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbf41, Hi: 0xbf5b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbf5d, Hi: 0xbf77, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbf79, Hi: 0xbf93, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbf95, Hi: 0xbfaf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbfb1, Hi: 0xbfcb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbfcd, Hi: 0xbfe7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbfe9, Hi: 0xc003, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc005, Hi: 0xc01f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc021, Hi: 0xc03b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc03d, Hi: 0xc057, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc059, Hi: 0xc073, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc075, Hi: 0xc08f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc091, Hi: 0xc0ab, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc0ad, Hi: 0xc0c7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc0c9, Hi: 0xc0e3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc0e5, Hi: 0xc0ff, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc101, Hi: 0xc11b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc11d, Hi: 0xc137, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc139, Hi: 0xc153, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc155, Hi: 0xc16f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc171, Hi: 0xc18b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc18d, Hi: 0xc1a7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc1a9, Hi: 0xc1c3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc1c5, Hi: 0xc1df, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc1e1, Hi: 0xc1fb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc1fd, Hi: 0xc217, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc219, Hi: 0xc233, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc235, Hi: 0xc24f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc251, Hi: 0xc26b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc26d, Hi: 0xc287, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc289, Hi: 0xc2a3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc2a5, Hi: 0xc2bf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc2c1, Hi: 0xc2db, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc2dd, Hi: 0xc2f7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc2f9, Hi: 0xc313, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc315, Hi: 0xc32f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc331, Hi: 0xc34b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc34d, Hi: 0xc367, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc369, Hi: 0xc383, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc385, Hi: 0xc39f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc3a1, Hi: 0xc3bb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc3bd, Hi: 0xc3d7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc3d9, Hi: 0xc3f3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc3f5, Hi: 0xc40f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc411, Hi: 0xc42b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc42d, Hi: 0xc447, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc449, Hi: 0xc463, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc465, Hi: 0xc47f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc481, Hi: 0xc49b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc49d, Hi: 0xc4b7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc4b9, Hi: 0xc4d3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc4d5, Hi: 0xc4ef, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc4f1, Hi: 0xc50b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc50d, Hi: 0xc527, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc529, Hi: 0xc543, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc545, Hi: 0xc55f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc561, Hi: 0xc57b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc57d, Hi: 0xc597, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc599, Hi: 0xc5b3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc5b5, Hi: 0xc5cf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc5d1, Hi: 0xc5eb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc5ed, Hi: 0xc607, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc609, Hi: 0xc623, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc625, Hi: 0xc63f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc641, Hi: 0xc65b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc65d, Hi: 0xc677, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc679, Hi: 0xc693, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc695, Hi: 0xc6af, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc6b1, Hi: 0xc6cb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc6cd, Hi: 0xc6e7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc6e9, Hi: 0xc703, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc705, Hi: 0xc71f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc721, Hi: 0xc73b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc73d, Hi: 0xc757, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc759, Hi: 0xc773, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc775, Hi: 0xc78f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc791, Hi: 0xc7ab, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc7ad, Hi: 0xc7c7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc7c9, Hi: 0xc7e3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc7e5, Hi: 0xc7ff, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc801, Hi: 0xc81b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc81d, Hi: 0xc837, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc839, Hi: 0xc853, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc855, Hi: 0xc86f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc871, Hi: 0xc88b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc88d, Hi: 0xc8a7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc8a9, Hi: 0xc8c3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc8c5, Hi: 0xc8df, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc8e1, Hi: 0xc8fb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc8fd, Hi: 0xc917, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc919, Hi: 0xc933, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc935, Hi: 0xc94f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc951, Hi: 0xc96b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc96d, Hi: 0xc987, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc989, Hi: 0xc9a3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc9a5, Hi: 0xc9bf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc9c1, Hi: 0xc9db, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc9dd, Hi: 0xc9f7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc9f9, Hi: 0xca13, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xca15, Hi: 0xca2f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xca31, Hi: 0xca4b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xca4d, Hi: 0xca67, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xca69, Hi: 0xca83, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xca85, Hi: 0xca9f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcaa1, Hi: 0xcabb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcabd, Hi: 0xcad7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcad9, Hi: 0xcaf3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcaf5, Hi: 0xcb0f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcb11, Hi: 0xcb2b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcb2d, Hi: 0xcb47, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcb49, Hi: 0xcb63, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcb65, Hi: 0xcb7f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcb81, Hi: 0xcb9b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcb9d, Hi: 0xcbb7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcbb9, Hi: 0xcbd3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcbd5, Hi: 0xcbef, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcbf1, Hi: 0xcc0b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcc0d, Hi: 0xcc27, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcc29, Hi: 0xcc43, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcc45, Hi: 0xcc5f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcc61, Hi: 0xcc7b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcc7d, Hi: 0xcc97, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcc99, Hi: 0xccb3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xccb5, Hi: 0xcccf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xccd1, Hi: 0xcceb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcced, Hi: 0xcd07, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcd09, Hi: 0xcd23, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcd25, Hi: 0xcd3f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcd41, Hi: 0xcd5b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcd5d, Hi: 0xcd77, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcd79, Hi: 0xcd93, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcd95, Hi: 0xcdaf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcdb1, Hi: 0xcdcb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcdcd, Hi: 0xcde7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcde9, Hi: 0xce03, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xce05, Hi: 0xce1f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xce21, Hi: 0xce3b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xce3d, Hi: 0xce57, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xce59, Hi: 0xce73, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xce75, Hi: 0xce8f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xce91, Hi: 0xceab, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcead, Hi: 0xcec7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcec9, Hi: 0xcee3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcee5, Hi: 0xceff, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcf01, Hi: 0xcf1b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcf1d, Hi: 0xcf37, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcf39, Hi: 0xcf53, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcf55, Hi: 0xcf6f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcf71, Hi: 0xcf8b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcf8d, Hi: 0xcfa7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcfa9, Hi: 0xcfc3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcfc5, Hi: 0xcfdf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcfe1, Hi: 0xcffb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcffd, Hi: 0xd017, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd019, Hi: 0xd033, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd035, Hi: 0xd04f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd051, Hi: 0xd06b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd06d, Hi: 0xd087, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd089, Hi: 0xd0a3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd0a5, Hi: 0xd0bf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd0c1, Hi: 0xd0db, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd0dd, Hi: 0xd0f7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd0f9, Hi: 0xd113, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd115, Hi: 0xd12f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd131, Hi: 0xd14b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd14d, Hi: 0xd167, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd169, Hi: 0xd183, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd185, Hi: 0xd19f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd1a1, Hi: 0xd1bb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd1bd, Hi: 0xd1d7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd1d9, Hi: 0xd1f3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd1f5, Hi: 0xd20f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd211, Hi: 0xd22b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd22d, Hi: 0xd247, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd249, Hi: 0xd263, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd265, Hi: 0xd27f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd281, Hi: 0xd29b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd29d, Hi: 0xd2b7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd2b9, Hi: 0xd2d3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd2d5, Hi: 0xd2ef, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd2f1, Hi: 0xd30b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd30d, Hi: 0xd327, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd329, Hi: 0xd343, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd345, Hi: 0xd35f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd361, Hi: 0xd37b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd37d, Hi: 0xd397, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd399, Hi: 0xd3b3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd3b5, Hi: 0xd3cf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd3d1, Hi: 0xd3eb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd3ed, Hi: 0xd407, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd409, Hi: 0xd423, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd425, Hi: 0xd43f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd441, Hi: 0xd45b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd45d, Hi: 0xd477, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd479, Hi: 0xd493, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd495, Hi: 0xd4af, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd4b1, Hi: 0xd4cb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd4cd, Hi: 0xd4e7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd4e9, Hi: 0xd503, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd505, Hi: 0xd51f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd521, Hi: 0xd53b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd53d, Hi: 0xd557, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd559, Hi: 0xd573, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd575, Hi: 0xd58f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd591, Hi: 0xd5ab, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd5ad, Hi: 0xd5c7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd5c9, Hi: 0xd5e3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd5e5, Hi: 0xd5ff, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd601, Hi: 0xd61b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd61d, Hi: 0xd637, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd639, Hi: 0xd653, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd655, Hi: 0xd66f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd671, Hi: 0xd68b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd68d, Hi: 0xd6a7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd6a9, Hi: 0xd6c3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd6c5, Hi: 0xd6df, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd6e1, Hi: 0xd6fb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd6fd, Hi: 0xd717, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd719, Hi: 0xd733, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd735, Hi: 0xd74f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd751, Hi: 0xd76b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd76d, Hi: 0xd787, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd789, Hi: 0xd7a3, Stride: 0x1},\n\t},\n\tLatinOffset: 0,\n}\n\nvar _GraphemePrepend = &unicode.RangeTable{\n\tR16: []unicode.Range16{\n\t\tunicode.Range16{Lo: 0x600, Hi: 0x605, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x6dd, Hi: 0x6dd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x70f, Hi: 0x70f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x8e2, Hi: 0x8e2, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd4e, Hi: 0xd4e, Stride: 0x1},\n\t},\n\tR32: []unicode.Range32{\n\t\tunicode.Range32{Lo: 0x110bd, Hi: 0x110bd, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x111c2, Hi: 0x111c3, Stride: 0x1},\n\t},\n\tLatinOffset: 0,\n}\n\nvar _GraphemeRegional_Indicator = &unicode.RangeTable{\n\tR32: []unicode.Range32{\n\t\tunicode.Range32{Lo: 0x1f1e6, Hi: 0x1f1ff, Stride: 0x1},\n\t},\n\tLatinOffset: 0,\n}\n\nvar _GraphemeSpacingMark = &unicode.RangeTable{\n\tR16: []unicode.Range16{\n\t\tunicode.Range16{Lo: 0x903, Hi: 0x903, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x93b, Hi: 0x93b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x93e, Hi: 0x940, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x949, Hi: 0x94c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x94e, Hi: 0x94f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x982, Hi: 0x983, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x9bf, Hi: 0x9c0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x9c7, Hi: 0x9c8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x9cb, Hi: 0x9cc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa03, Hi: 0xa03, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa3e, Hi: 0xa40, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa83, Hi: 0xa83, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xabe, Hi: 0xac0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xac9, Hi: 0xac9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xacb, Hi: 0xacc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb02, Hi: 0xb03, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb40, Hi: 0xb40, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb47, Hi: 0xb48, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb4b, Hi: 0xb4c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbbf, Hi: 0xbbf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbc1, Hi: 0xbc2, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbc6, Hi: 0xbc8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbca, Hi: 0xbcc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc01, Hi: 0xc03, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc41, Hi: 0xc44, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc82, Hi: 0xc83, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcbe, Hi: 0xcbe, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcc0, Hi: 0xcc1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcc3, Hi: 0xcc4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcc7, Hi: 0xcc8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcca, Hi: 0xccb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd02, Hi: 0xd03, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd3f, Hi: 0xd40, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd46, Hi: 0xd48, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd4a, Hi: 0xd4c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd82, Hi: 0xd83, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xdd0, Hi: 0xdd1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xdd8, Hi: 0xdde, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xdf2, Hi: 0xdf3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xe33, Hi: 0xe33, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xeb3, Hi: 0xeb3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xf3e, Hi: 0xf3f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xf7f, Hi: 0xf7f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1031, Hi: 0x1031, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x103b, Hi: 0x103c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1056, Hi: 0x1057, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1084, Hi: 0x1084, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x17b6, Hi: 0x17b6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x17be, Hi: 0x17c5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x17c7, Hi: 0x17c8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1923, Hi: 0x1926, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1929, Hi: 0x192b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1930, Hi: 0x1931, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1933, Hi: 0x1938, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1a19, Hi: 0x1a1a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1a55, Hi: 0x1a55, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1a57, Hi: 0x1a57, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1a6d, Hi: 0x1a72, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1b04, Hi: 0x1b04, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1b35, Hi: 0x1b35, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1b3b, Hi: 0x1b3b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1b3d, Hi: 0x1b41, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1b43, Hi: 0x1b44, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1b82, Hi: 0x1b82, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ba1, Hi: 0x1ba1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ba6, Hi: 0x1ba7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1baa, Hi: 0x1baa, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1be7, Hi: 0x1be7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1bea, Hi: 0x1bec, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1bee, Hi: 0x1bee, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1bf2, Hi: 0x1bf3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1c24, Hi: 0x1c2b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1c34, Hi: 0x1c35, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ce1, Hi: 0x1ce1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1cf2, Hi: 0x1cf3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa823, Hi: 0xa824, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa827, Hi: 0xa827, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa880, Hi: 0xa881, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa8b4, Hi: 0xa8c3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa952, Hi: 0xa953, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa983, Hi: 0xa983, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa9b4, Hi: 0xa9b5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa9ba, Hi: 0xa9bb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa9bd, Hi: 0xa9c0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaa2f, Hi: 0xaa30, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaa33, Hi: 0xaa34, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaa4d, Hi: 0xaa4d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaaeb, Hi: 0xaaeb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaaee, Hi: 0xaaef, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaaf5, Hi: 0xaaf5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xabe3, Hi: 0xabe4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xabe6, Hi: 0xabe7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xabe9, Hi: 0xabea, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xabec, Hi: 0xabec, Stride: 0x1},\n\t},\n\tR32: []unicode.Range32{\n\t\tunicode.Range32{Lo: 0x11000, Hi: 0x11000, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11002, Hi: 0x11002, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11082, Hi: 0x11082, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x110b0, Hi: 0x110b2, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x110b7, Hi: 0x110b8, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1112c, Hi: 0x1112c, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11182, Hi: 0x11182, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x111b3, Hi: 0x111b5, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x111bf, Hi: 0x111c0, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1122c, Hi: 0x1122e, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11232, Hi: 0x11233, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11235, Hi: 0x11235, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x112e0, Hi: 0x112e2, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11302, Hi: 0x11303, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1133f, Hi: 0x1133f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11341, Hi: 0x11344, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11347, Hi: 0x11348, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1134b, Hi: 0x1134d, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11362, Hi: 0x11363, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11435, Hi: 0x11437, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11440, Hi: 0x11441, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11445, Hi: 0x11445, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x114b1, Hi: 0x114b2, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x114b9, Hi: 0x114b9, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x114bb, Hi: 0x114bc, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x114be, Hi: 0x114be, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x114c1, Hi: 0x114c1, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x115b0, Hi: 0x115b1, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x115b8, Hi: 0x115bb, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x115be, Hi: 0x115be, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11630, Hi: 0x11632, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1163b, Hi: 0x1163c, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1163e, Hi: 0x1163e, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x116ac, Hi: 0x116ac, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x116ae, Hi: 0x116af, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x116b6, Hi: 0x116b6, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11720, Hi: 0x11721, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11726, Hi: 0x11726, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11c2f, Hi: 0x11c2f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11c3e, Hi: 0x11c3e, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11ca9, Hi: 0x11ca9, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11cb1, Hi: 0x11cb1, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11cb4, Hi: 0x11cb4, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x16f51, Hi: 0x16f7e, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d166, Hi: 0x1d166, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d16d, Hi: 0x1d16d, Stride: 0x1},\n\t},\n\tLatinOffset: 0,\n}\n\nvar _GraphemeT = &unicode.RangeTable{\n\tR16: []unicode.Range16{\n\t\tunicode.Range16{Lo: 0x11a8, Hi: 0x11ff, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd7cb, Hi: 0xd7fb, Stride: 0x1},\n\t},\n\tLatinOffset: 0,\n}\n\nvar _GraphemeV = &unicode.RangeTable{\n\tR16: []unicode.Range16{\n\t\tunicode.Range16{Lo: 0x1160, Hi: 0x11a7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd7b0, Hi: 0xd7c6, Stride: 0x1},\n\t},\n\tLatinOffset: 0,\n}\n\nvar _GraphemeZWJ = &unicode.RangeTable{\n\tR16: []unicode.Range16{\n\t\tunicode.Range16{Lo: 0x200d, Hi: 0x200d, Stride: 0x1},\n\t},\n\tLatinOffset: 0,\n}\n\ntype _GraphemeRuneRange unicode.RangeTable\n\nfunc _GraphemeRuneType(r rune) *_GraphemeRuneRange {\n\tswitch {\n\tcase unicode.Is(_GraphemeCR, r):\n\t\treturn (*_GraphemeRuneRange)(_GraphemeCR)\n\tcase unicode.Is(_GraphemeControl, r):\n\t\treturn (*_GraphemeRuneRange)(_GraphemeControl)\n\tcase unicode.Is(_GraphemeE_Base, r):\n\t\treturn (*_GraphemeRuneRange)(_GraphemeE_Base)\n\tcase unicode.Is(_GraphemeE_Base_GAZ, r):\n\t\treturn (*_GraphemeRuneRange)(_GraphemeE_Base_GAZ)\n\tcase unicode.Is(_GraphemeE_Modifier, r):\n\t\treturn (*_GraphemeRuneRange)(_GraphemeE_Modifier)\n\tcase unicode.Is(_GraphemeExtend, r):\n\t\treturn (*_GraphemeRuneRange)(_GraphemeExtend)\n\tcase unicode.Is(_GraphemeGlue_After_Zwj, r):\n\t\treturn (*_GraphemeRuneRange)(_GraphemeGlue_After_Zwj)\n\tcase unicode.Is(_GraphemeL, r):\n\t\treturn (*_GraphemeRuneRange)(_GraphemeL)\n\tcase unicode.Is(_GraphemeLF, r):\n\t\treturn (*_GraphemeRuneRange)(_GraphemeLF)\n\tcase unicode.Is(_GraphemeLV, r):\n\t\treturn (*_GraphemeRuneRange)(_GraphemeLV)\n\tcase unicode.Is(_GraphemeLVT, r):\n\t\treturn (*_GraphemeRuneRange)(_GraphemeLVT)\n\tcase unicode.Is(_GraphemePrepend, r):\n\t\treturn (*_GraphemeRuneRange)(_GraphemePrepend)\n\tcase unicode.Is(_GraphemeRegional_Indicator, r):\n\t\treturn (*_GraphemeRuneRange)(_GraphemeRegional_Indicator)\n\tcase unicode.Is(_GraphemeSpacingMark, r):\n\t\treturn (*_GraphemeRuneRange)(_GraphemeSpacingMark)\n\tcase unicode.Is(_GraphemeT, r):\n\t\treturn (*_GraphemeRuneRange)(_GraphemeT)\n\tcase unicode.Is(_GraphemeV, r):\n\t\treturn (*_GraphemeRuneRange)(_GraphemeV)\n\tcase unicode.Is(_GraphemeZWJ, r):\n\t\treturn (*_GraphemeRuneRange)(_GraphemeZWJ)\n\tdefault:\n\t\treturn nil\n\t}\n}\nfunc (rng *_GraphemeRuneRange) String() string {\n\tswitch (*unicode.RangeTable)(rng) {\n\tcase _GraphemeCR:\n\t\treturn \"CR\"\n\tcase _GraphemeControl:\n\t\treturn \"Control\"\n\tcase _GraphemeE_Base:\n\t\treturn \"E_Base\"\n\tcase _GraphemeE_Base_GAZ:\n\t\treturn \"E_Base_GAZ\"\n\tcase _GraphemeE_Modifier:\n\t\treturn \"E_Modifier\"\n\tcase _GraphemeExtend:\n\t\treturn \"Extend\"\n\tcase _GraphemeGlue_After_Zwj:\n\t\treturn \"Glue_After_Zwj\"\n\tcase _GraphemeL:\n\t\treturn \"L\"\n\tcase _GraphemeLF:\n\t\treturn \"LF\"\n\tcase _GraphemeLV:\n\t\treturn \"LV\"\n\tcase _GraphemeLVT:\n\t\treturn \"LVT\"\n\tcase _GraphemePrepend:\n\t\treturn \"Prepend\"\n\tcase _GraphemeRegional_Indicator:\n\t\treturn \"Regional_Indicator\"\n\tcase _GraphemeSpacingMark:\n\t\treturn \"SpacingMark\"\n\tcase _GraphemeT:\n\t\treturn \"T\"\n\tcase _GraphemeV:\n\t\treturn \"V\"\n\tcase _GraphemeZWJ:\n\t\treturn \"ZWJ\"\n\tdefault:\n\t\treturn \"Other\"\n\t}\n}\n\nvar _WordALetter = &unicode.RangeTable{\n\tR16: []unicode.Range16{\n\t\tunicode.Range16{Lo: 0x41, Hi: 0x5a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x61, Hi: 0x7a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaa, Hi: 0xaa, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb5, Hi: 0xb5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xba, Hi: 0xba, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc0, Hi: 0xd6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd8, Hi: 0xf6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xf8, Hi: 0x1ba, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1bb, Hi: 0x1bb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1bc, Hi: 0x1bf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1c0, Hi: 0x1c3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1c4, Hi: 0x293, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x294, Hi: 0x294, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x295, Hi: 0x2af, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2b0, Hi: 0x2c1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2c6, Hi: 0x2d1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2e0, Hi: 0x2e4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2ec, Hi: 0x2ec, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2ee, Hi: 0x2ee, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x370, Hi: 0x373, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x374, Hi: 0x374, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x376, Hi: 0x377, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x37a, Hi: 0x37a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x37b, Hi: 0x37d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x37f, Hi: 0x37f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x386, Hi: 0x386, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x388, Hi: 0x38a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x38c, Hi: 0x38c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x38e, Hi: 0x3a1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3a3, Hi: 0x3f5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3f7, Hi: 0x481, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x48a, Hi: 0x52f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x531, Hi: 0x556, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x559, Hi: 0x559, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x561, Hi: 0x587, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x5f3, Hi: 0x5f3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x620, Hi: 0x63f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x640, Hi: 0x640, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x641, Hi: 0x64a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x66e, Hi: 0x66f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x671, Hi: 0x6d3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x6d5, Hi: 0x6d5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x6e5, Hi: 0x6e6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x6ee, Hi: 0x6ef, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x6fa, Hi: 0x6fc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x6ff, Hi: 0x6ff, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x710, Hi: 0x710, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x712, Hi: 0x72f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x74d, Hi: 0x7a5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x7b1, Hi: 0x7b1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x7ca, Hi: 0x7ea, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x7f4, Hi: 0x7f5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x7fa, Hi: 0x7fa, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x800, Hi: 0x815, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x81a, Hi: 0x81a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x824, Hi: 0x824, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x828, Hi: 0x828, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x840, Hi: 0x858, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x8a0, Hi: 0x8b4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x8b6, Hi: 0x8bd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x904, Hi: 0x939, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x93d, Hi: 0x93d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x950, Hi: 0x950, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x958, Hi: 0x961, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x971, Hi: 0x971, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x972, Hi: 0x980, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x985, Hi: 0x98c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x98f, Hi: 0x990, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x993, Hi: 0x9a8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x9aa, Hi: 0x9b0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x9b2, Hi: 0x9b2, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x9b6, Hi: 0x9b9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x9bd, Hi: 0x9bd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x9ce, Hi: 0x9ce, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x9dc, Hi: 0x9dd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x9df, Hi: 0x9e1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x9f0, Hi: 0x9f1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa05, Hi: 0xa0a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa0f, Hi: 0xa10, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa13, Hi: 0xa28, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa2a, Hi: 0xa30, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa32, Hi: 0xa33, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa35, Hi: 0xa36, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa38, Hi: 0xa39, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa59, Hi: 0xa5c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa5e, Hi: 0xa5e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa72, Hi: 0xa74, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa85, Hi: 0xa8d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa8f, Hi: 0xa91, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa93, Hi: 0xaa8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaaa, Hi: 0xab0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xab2, Hi: 0xab3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xab5, Hi: 0xab9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xabd, Hi: 0xabd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xad0, Hi: 0xad0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xae0, Hi: 0xae1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaf9, Hi: 0xaf9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb05, Hi: 0xb0c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb0f, Hi: 0xb10, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb13, Hi: 0xb28, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb2a, Hi: 0xb30, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb32, Hi: 0xb33, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb35, Hi: 0xb39, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb3d, Hi: 0xb3d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb5c, Hi: 0xb5d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb5f, Hi: 0xb61, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb71, Hi: 0xb71, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb83, Hi: 0xb83, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb85, Hi: 0xb8a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb8e, Hi: 0xb90, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb92, Hi: 0xb95, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb99, Hi: 0xb9a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb9c, Hi: 0xb9c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb9e, Hi: 0xb9f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xba3, Hi: 0xba4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xba8, Hi: 0xbaa, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbae, Hi: 0xbb9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbd0, Hi: 0xbd0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc05, Hi: 0xc0c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc0e, Hi: 0xc10, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc12, Hi: 0xc28, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc2a, Hi: 0xc39, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc3d, Hi: 0xc3d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc58, Hi: 0xc5a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc60, Hi: 0xc61, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc80, Hi: 0xc80, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc85, Hi: 0xc8c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc8e, Hi: 0xc90, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc92, Hi: 0xca8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcaa, Hi: 0xcb3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcb5, Hi: 0xcb9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcbd, Hi: 0xcbd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcde, Hi: 0xcde, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xce0, Hi: 0xce1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcf1, Hi: 0xcf2, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd05, Hi: 0xd0c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd0e, Hi: 0xd10, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd12, Hi: 0xd3a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd3d, Hi: 0xd3d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd4e, Hi: 0xd4e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd54, Hi: 0xd56, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd5f, Hi: 0xd61, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd7a, Hi: 0xd7f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd85, Hi: 0xd96, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd9a, Hi: 0xdb1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xdb3, Hi: 0xdbb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xdbd, Hi: 0xdbd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xdc0, Hi: 0xdc6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xf00, Hi: 0xf00, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xf40, Hi: 0xf47, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xf49, Hi: 0xf6c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xf88, Hi: 0xf8c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x10a0, Hi: 0x10c5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x10c7, Hi: 0x10c7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x10cd, Hi: 0x10cd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x10d0, Hi: 0x10fa, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x10fc, Hi: 0x10fc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x10fd, Hi: 0x1248, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x124a, Hi: 0x124d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1250, Hi: 0x1256, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1258, Hi: 0x1258, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x125a, Hi: 0x125d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1260, Hi: 0x1288, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x128a, Hi: 0x128d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1290, Hi: 0x12b0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x12b2, Hi: 0x12b5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x12b8, Hi: 0x12be, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x12c0, Hi: 0x12c0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x12c2, Hi: 0x12c5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x12c8, Hi: 0x12d6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x12d8, Hi: 0x1310, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1312, Hi: 0x1315, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1318, Hi: 0x135a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1380, Hi: 0x138f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x13a0, Hi: 0x13f5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x13f8, Hi: 0x13fd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1401, Hi: 0x166c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x166f, Hi: 0x167f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1681, Hi: 0x169a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x16a0, Hi: 0x16ea, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x16ee, Hi: 0x16f0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x16f1, Hi: 0x16f8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1700, Hi: 0x170c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x170e, Hi: 0x1711, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1720, Hi: 0x1731, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1740, Hi: 0x1751, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1760, Hi: 0x176c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x176e, Hi: 0x1770, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1820, Hi: 0x1842, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1843, Hi: 0x1843, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1844, Hi: 0x1877, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1880, Hi: 0x1884, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1887, Hi: 0x18a8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x18aa, Hi: 0x18aa, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x18b0, Hi: 0x18f5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1900, Hi: 0x191e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1a00, Hi: 0x1a16, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1b05, Hi: 0x1b33, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1b45, Hi: 0x1b4b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1b83, Hi: 0x1ba0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1bae, Hi: 0x1baf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1bba, Hi: 0x1be5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1c00, Hi: 0x1c23, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1c4d, Hi: 0x1c4f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1c5a, Hi: 0x1c77, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1c78, Hi: 0x1c7d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1c80, Hi: 0x1c88, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ce9, Hi: 0x1cec, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1cee, Hi: 0x1cf1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1cf5, Hi: 0x1cf6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1d00, Hi: 0x1d2b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1d2c, Hi: 0x1d6a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1d6b, Hi: 0x1d77, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1d78, Hi: 0x1d78, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1d79, Hi: 0x1d9a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1d9b, Hi: 0x1dbf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e00, Hi: 0x1f15, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1f18, Hi: 0x1f1d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1f20, Hi: 0x1f45, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1f48, Hi: 0x1f4d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1f50, Hi: 0x1f57, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1f59, Hi: 0x1f59, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1f5b, Hi: 0x1f5b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1f5d, Hi: 0x1f5d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1f5f, Hi: 0x1f7d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1f80, Hi: 0x1fb4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1fb6, Hi: 0x1fbc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1fbe, Hi: 0x1fbe, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1fc2, Hi: 0x1fc4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1fc6, Hi: 0x1fcc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1fd0, Hi: 0x1fd3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1fd6, Hi: 0x1fdb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1fe0, Hi: 0x1fec, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ff2, Hi: 0x1ff4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ff6, Hi: 0x1ffc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2071, Hi: 0x2071, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x207f, Hi: 0x207f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2090, Hi: 0x209c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2102, Hi: 0x2102, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2107, Hi: 0x2107, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x210a, Hi: 0x2113, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2115, Hi: 0x2115, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2119, Hi: 0x211d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2124, Hi: 0x2124, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2126, Hi: 0x2126, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2128, Hi: 0x2128, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x212a, Hi: 0x212d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x212f, Hi: 0x2134, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2135, Hi: 0x2138, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2139, Hi: 0x2139, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x213c, Hi: 0x213f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2145, Hi: 0x2149, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x214e, Hi: 0x214e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2160, Hi: 0x2182, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2183, Hi: 0x2184, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2185, Hi: 0x2188, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x24b6, Hi: 0x24e9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2c00, Hi: 0x2c2e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2c30, Hi: 0x2c5e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2c60, Hi: 0x2c7b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2c7c, Hi: 0x2c7d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2c7e, Hi: 0x2ce4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2ceb, Hi: 0x2cee, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2cf2, Hi: 0x2cf3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2d00, Hi: 0x2d25, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2d27, Hi: 0x2d27, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2d2d, Hi: 0x2d2d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2d30, Hi: 0x2d67, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2d6f, Hi: 0x2d6f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2d80, Hi: 0x2d96, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2da0, Hi: 0x2da6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2da8, Hi: 0x2dae, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2db0, Hi: 0x2db6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2db8, Hi: 0x2dbe, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2dc0, Hi: 0x2dc6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2dc8, Hi: 0x2dce, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2dd0, Hi: 0x2dd6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2dd8, Hi: 0x2dde, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2e2f, Hi: 0x2e2f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3005, Hi: 0x3005, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x303b, Hi: 0x303b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x303c, Hi: 0x303c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3105, Hi: 0x312d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3131, Hi: 0x318e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x31a0, Hi: 0x31ba, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa000, Hi: 0xa014, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa015, Hi: 0xa015, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa016, Hi: 0xa48c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa4d0, Hi: 0xa4f7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa4f8, Hi: 0xa4fd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa500, Hi: 0xa60b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa60c, Hi: 0xa60c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa610, Hi: 0xa61f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa62a, Hi: 0xa62b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa640, Hi: 0xa66d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa66e, Hi: 0xa66e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa67f, Hi: 0xa67f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa680, Hi: 0xa69b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa69c, Hi: 0xa69d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa6a0, Hi: 0xa6e5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa6e6, Hi: 0xa6ef, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa717, Hi: 0xa71f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa722, Hi: 0xa76f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa770, Hi: 0xa770, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa771, Hi: 0xa787, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa788, Hi: 0xa788, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa78b, Hi: 0xa78e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa78f, Hi: 0xa78f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa790, Hi: 0xa7ae, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa7b0, Hi: 0xa7b7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa7f7, Hi: 0xa7f7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa7f8, Hi: 0xa7f9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa7fa, Hi: 0xa7fa, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa7fb, Hi: 0xa801, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa803, Hi: 0xa805, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa807, Hi: 0xa80a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa80c, Hi: 0xa822, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa840, Hi: 0xa873, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa882, Hi: 0xa8b3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa8f2, Hi: 0xa8f7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa8fb, Hi: 0xa8fb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa8fd, Hi: 0xa8fd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa90a, Hi: 0xa925, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa930, Hi: 0xa946, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa960, Hi: 0xa97c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa984, Hi: 0xa9b2, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa9cf, Hi: 0xa9cf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaa00, Hi: 0xaa28, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaa40, Hi: 0xaa42, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaa44, Hi: 0xaa4b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaae0, Hi: 0xaaea, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaaf2, Hi: 0xaaf2, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaaf3, Hi: 0xaaf4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xab01, Hi: 0xab06, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xab09, Hi: 0xab0e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xab11, Hi: 0xab16, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xab20, Hi: 0xab26, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xab28, Hi: 0xab2e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xab30, Hi: 0xab5a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xab5c, Hi: 0xab5f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xab60, Hi: 0xab65, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xab70, Hi: 0xabbf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xabc0, Hi: 0xabe2, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xac00, Hi: 0xd7a3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd7b0, Hi: 0xd7c6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd7cb, Hi: 0xd7fb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfb00, Hi: 0xfb06, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfb13, Hi: 0xfb17, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfb50, Hi: 0xfbb1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfbd3, Hi: 0xfd3d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfd50, Hi: 0xfd8f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfd92, Hi: 0xfdc7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfdf0, Hi: 0xfdfb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfe70, Hi: 0xfe74, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfe76, Hi: 0xfefc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xff21, Hi: 0xff3a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xff41, Hi: 0xff5a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xffa0, Hi: 0xffbe, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xffc2, Hi: 0xffc7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xffca, Hi: 0xffcf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xffd2, Hi: 0xffd7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xffda, Hi: 0xffdc, Stride: 0x1},\n\t},\n\tR32: []unicode.Range32{\n\t\tunicode.Range32{Lo: 0x10000, Hi: 0x1000b, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1000d, Hi: 0x10026, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10028, Hi: 0x1003a, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1003c, Hi: 0x1003d, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1003f, Hi: 0x1004d, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10050, Hi: 0x1005d, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10080, Hi: 0x100fa, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10140, Hi: 0x10174, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10280, Hi: 0x1029c, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x102a0, Hi: 0x102d0, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10300, Hi: 0x1031f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10330, Hi: 0x10340, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10341, Hi: 0x10341, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10342, Hi: 0x10349, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1034a, Hi: 0x1034a, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10350, Hi: 0x10375, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10380, Hi: 0x1039d, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x103a0, Hi: 0x103c3, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x103c8, Hi: 0x103cf, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x103d1, Hi: 0x103d5, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10400, Hi: 0x1044f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10450, Hi: 0x1049d, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x104b0, Hi: 0x104d3, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x104d8, Hi: 0x104fb, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10500, Hi: 0x10527, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10530, Hi: 0x10563, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10600, Hi: 0x10736, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10740, Hi: 0x10755, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10760, Hi: 0x10767, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10800, Hi: 0x10805, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10808, Hi: 0x10808, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1080a, Hi: 0x10835, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10837, Hi: 0x10838, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1083c, Hi: 0x1083c, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1083f, Hi: 0x10855, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10860, Hi: 0x10876, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10880, Hi: 0x1089e, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x108e0, Hi: 0x108f2, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x108f4, Hi: 0x108f5, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10900, Hi: 0x10915, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10920, Hi: 0x10939, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10980, Hi: 0x109b7, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x109be, Hi: 0x109bf, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10a00, Hi: 0x10a00, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10a10, Hi: 0x10a13, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10a15, Hi: 0x10a17, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10a19, Hi: 0x10a33, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10a60, Hi: 0x10a7c, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10a80, Hi: 0x10a9c, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10ac0, Hi: 0x10ac7, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10ac9, Hi: 0x10ae4, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10b00, Hi: 0x10b35, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10b40, Hi: 0x10b55, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10b60, Hi: 0x10b72, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10b80, Hi: 0x10b91, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10c00, Hi: 0x10c48, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10c80, Hi: 0x10cb2, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10cc0, Hi: 0x10cf2, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11003, Hi: 0x11037, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11083, Hi: 0x110af, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x110d0, Hi: 0x110e8, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11103, Hi: 0x11126, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11150, Hi: 0x11172, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11176, Hi: 0x11176, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11183, Hi: 0x111b2, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x111c1, Hi: 0x111c4, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x111da, Hi: 0x111da, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x111dc, Hi: 0x111dc, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11200, Hi: 0x11211, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11213, Hi: 0x1122b, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11280, Hi: 0x11286, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11288, Hi: 0x11288, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1128a, Hi: 0x1128d, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1128f, Hi: 0x1129d, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1129f, Hi: 0x112a8, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x112b0, Hi: 0x112de, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11305, Hi: 0x1130c, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1130f, Hi: 0x11310, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11313, Hi: 0x11328, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1132a, Hi: 0x11330, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11332, Hi: 0x11333, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11335, Hi: 0x11339, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1133d, Hi: 0x1133d, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11350, Hi: 0x11350, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1135d, Hi: 0x11361, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11400, Hi: 0x11434, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11447, Hi: 0x1144a, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11480, Hi: 0x114af, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x114c4, Hi: 0x114c5, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x114c7, Hi: 0x114c7, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11580, Hi: 0x115ae, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x115d8, Hi: 0x115db, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11600, Hi: 0x1162f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11644, Hi: 0x11644, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11680, Hi: 0x116aa, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x118a0, Hi: 0x118df, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x118ff, Hi: 0x118ff, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11ac0, Hi: 0x11af8, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11c00, Hi: 0x11c08, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11c0a, Hi: 0x11c2e, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11c40, Hi: 0x11c40, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11c72, Hi: 0x11c8f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x12000, Hi: 0x12399, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x12400, Hi: 0x1246e, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x12480, Hi: 0x12543, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x13000, Hi: 0x1342e, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x14400, Hi: 0x14646, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x16800, Hi: 0x16a38, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x16a40, Hi: 0x16a5e, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x16ad0, Hi: 0x16aed, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x16b00, Hi: 0x16b2f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x16b40, Hi: 0x16b43, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x16b63, Hi: 0x16b77, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x16b7d, Hi: 0x16b8f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x16f00, Hi: 0x16f44, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x16f50, Hi: 0x16f50, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x16f93, Hi: 0x16f9f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x16fe0, Hi: 0x16fe0, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1bc00, Hi: 0x1bc6a, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1bc70, Hi: 0x1bc7c, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1bc80, Hi: 0x1bc88, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1bc90, Hi: 0x1bc99, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d400, Hi: 0x1d454, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d456, Hi: 0x1d49c, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d49e, Hi: 0x1d49f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d4a2, Hi: 0x1d4a2, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d4a5, Hi: 0x1d4a6, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d4a9, Hi: 0x1d4ac, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d4ae, Hi: 0x1d4b9, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d4bb, Hi: 0x1d4bb, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d4bd, Hi: 0x1d4c3, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d4c5, Hi: 0x1d505, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d507, Hi: 0x1d50a, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d50d, Hi: 0x1d514, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d516, Hi: 0x1d51c, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d51e, Hi: 0x1d539, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d53b, Hi: 0x1d53e, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d540, Hi: 0x1d544, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d546, Hi: 0x1d546, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d54a, Hi: 0x1d550, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d552, Hi: 0x1d6a5, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d6a8, Hi: 0x1d6c0, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d6c2, Hi: 0x1d6da, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d6dc, Hi: 0x1d6fa, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d6fc, Hi: 0x1d714, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d716, Hi: 0x1d734, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d736, Hi: 0x1d74e, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d750, Hi: 0x1d76e, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d770, Hi: 0x1d788, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d78a, Hi: 0x1d7a8, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d7aa, Hi: 0x1d7c2, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d7c4, Hi: 0x1d7cb, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1e800, Hi: 0x1e8c4, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1e900, Hi: 0x1e943, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1ee00, Hi: 0x1ee03, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1ee05, Hi: 0x1ee1f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1ee21, Hi: 0x1ee22, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1ee24, Hi: 0x1ee24, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1ee27, Hi: 0x1ee27, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1ee29, Hi: 0x1ee32, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1ee34, Hi: 0x1ee37, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1ee39, Hi: 0x1ee39, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1ee3b, Hi: 0x1ee3b, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1ee42, Hi: 0x1ee42, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1ee47, Hi: 0x1ee47, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1ee49, Hi: 0x1ee49, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1ee4b, Hi: 0x1ee4b, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1ee4d, Hi: 0x1ee4f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1ee51, Hi: 0x1ee52, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1ee54, Hi: 0x1ee54, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1ee57, Hi: 0x1ee57, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1ee59, Hi: 0x1ee59, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1ee5b, Hi: 0x1ee5b, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1ee5d, Hi: 0x1ee5d, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1ee5f, Hi: 0x1ee5f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1ee61, Hi: 0x1ee62, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1ee64, Hi: 0x1ee64, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1ee67, Hi: 0x1ee6a, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1ee6c, Hi: 0x1ee72, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1ee74, Hi: 0x1ee77, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1ee79, Hi: 0x1ee7c, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1ee7e, Hi: 0x1ee7e, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1ee80, Hi: 0x1ee89, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1ee8b, Hi: 0x1ee9b, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1eea1, Hi: 0x1eea3, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1eea5, Hi: 0x1eea9, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1eeab, Hi: 0x1eebb, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1f130, Hi: 0x1f149, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1f150, Hi: 0x1f169, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1f170, Hi: 0x1f189, Stride: 0x1},\n\t},\n\tLatinOffset: 7,\n}\n\nvar _WordCR = &unicode.RangeTable{\n\tR16: []unicode.Range16{\n\t\tunicode.Range16{Lo: 0xd, Hi: 0xd, Stride: 0x1},\n\t},\n\tLatinOffset: 1,\n}\n\nvar _WordDouble_Quote = &unicode.RangeTable{\n\tR16: []unicode.Range16{\n\t\tunicode.Range16{Lo: 0x22, Hi: 0x22, Stride: 0x1},\n\t},\n\tLatinOffset: 1,\n}\n\nvar _WordE_Base = &unicode.RangeTable{\n\tR16: []unicode.Range16{\n\t\tunicode.Range16{Lo: 0x261d, Hi: 0x261d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x26f9, Hi: 0x26f9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x270a, Hi: 0x270d, Stride: 0x1},\n\t},\n\tR32: []unicode.Range32{\n\t\tunicode.Range32{Lo: 0x1f385, Hi: 0x1f385, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1f3c3, Hi: 0x1f3c4, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1f3ca, Hi: 0x1f3cb, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1f442, Hi: 0x1f443, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1f446, Hi: 0x1f450, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1f46e, Hi: 0x1f46e, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1f470, Hi: 0x1f478, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1f47c, Hi: 0x1f47c, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1f481, Hi: 0x1f483, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1f485, Hi: 0x1f487, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1f4aa, Hi: 0x1f4aa, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1f575, Hi: 0x1f575, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1f57a, Hi: 0x1f57a, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1f590, Hi: 0x1f590, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1f595, Hi: 0x1f596, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1f645, Hi: 0x1f647, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1f64b, Hi: 0x1f64f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1f6a3, Hi: 0x1f6a3, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1f6b4, Hi: 0x1f6b6, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1f6c0, Hi: 0x1f6c0, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1f918, Hi: 0x1f91e, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1f926, Hi: 0x1f926, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1f930, Hi: 0x1f930, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1f933, Hi: 0x1f939, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1f93c, Hi: 0x1f93e, Stride: 0x1},\n\t},\n\tLatinOffset: 0,\n}\n\nvar _WordE_Base_GAZ = &unicode.RangeTable{\n\tR32: []unicode.Range32{\n\t\tunicode.Range32{Lo: 0x1f466, Hi: 0x1f469, Stride: 0x1},\n\t},\n\tLatinOffset: 0,\n}\n\nvar _WordE_Modifier = &unicode.RangeTable{\n\tR32: []unicode.Range32{\n\t\tunicode.Range32{Lo: 0x1f3fb, Hi: 0x1f3ff, Stride: 0x1},\n\t},\n\tLatinOffset: 0,\n}\n\nvar _WordExtend = &unicode.RangeTable{\n\tR16: []unicode.Range16{\n\t\tunicode.Range16{Lo: 0x300, Hi: 0x36f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x483, Hi: 0x487, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x488, Hi: 0x489, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x591, Hi: 0x5bd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x5bf, Hi: 0x5bf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x5c1, Hi: 0x5c2, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x5c4, Hi: 0x5c5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x5c7, Hi: 0x5c7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x610, Hi: 0x61a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x64b, Hi: 0x65f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x670, Hi: 0x670, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x6d6, Hi: 0x6dc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x6df, Hi: 0x6e4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x6e7, Hi: 0x6e8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x6ea, Hi: 0x6ed, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x711, Hi: 0x711, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x730, Hi: 0x74a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x7a6, Hi: 0x7b0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x7eb, Hi: 0x7f3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x816, Hi: 0x819, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x81b, Hi: 0x823, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x825, Hi: 0x827, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x829, Hi: 0x82d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x859, Hi: 0x85b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x8d4, Hi: 0x8e1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x8e3, Hi: 0x902, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x903, Hi: 0x903, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x93a, Hi: 0x93a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x93b, Hi: 0x93b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x93c, Hi: 0x93c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x93e, Hi: 0x940, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x941, Hi: 0x948, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x949, Hi: 0x94c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x94d, Hi: 0x94d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x94e, Hi: 0x94f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x951, Hi: 0x957, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x962, Hi: 0x963, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x981, Hi: 0x981, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x982, Hi: 0x983, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x9bc, Hi: 0x9bc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x9be, Hi: 0x9c0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x9c1, Hi: 0x9c4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x9c7, Hi: 0x9c8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x9cb, Hi: 0x9cc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x9cd, Hi: 0x9cd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x9d7, Hi: 0x9d7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x9e2, Hi: 0x9e3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa01, Hi: 0xa02, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa03, Hi: 0xa03, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa3c, Hi: 0xa3c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa3e, Hi: 0xa40, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa41, Hi: 0xa42, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa47, Hi: 0xa48, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa4b, Hi: 0xa4d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa51, Hi: 0xa51, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa70, Hi: 0xa71, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa75, Hi: 0xa75, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa81, Hi: 0xa82, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa83, Hi: 0xa83, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xabc, Hi: 0xabc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xabe, Hi: 0xac0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xac1, Hi: 0xac5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xac7, Hi: 0xac8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xac9, Hi: 0xac9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xacb, Hi: 0xacc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xacd, Hi: 0xacd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xae2, Hi: 0xae3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb01, Hi: 0xb01, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb02, Hi: 0xb03, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb3c, Hi: 0xb3c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb3e, Hi: 0xb3e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb3f, Hi: 0xb3f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb40, Hi: 0xb40, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb41, Hi: 0xb44, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb47, Hi: 0xb48, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb4b, Hi: 0xb4c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb4d, Hi: 0xb4d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb56, Hi: 0xb56, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb57, Hi: 0xb57, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb62, Hi: 0xb63, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb82, Hi: 0xb82, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbbe, Hi: 0xbbf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbc0, Hi: 0xbc0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbc1, Hi: 0xbc2, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbc6, Hi: 0xbc8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbca, Hi: 0xbcc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbcd, Hi: 0xbcd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbd7, Hi: 0xbd7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc00, Hi: 0xc00, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc01, Hi: 0xc03, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc3e, Hi: 0xc40, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc41, Hi: 0xc44, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc46, Hi: 0xc48, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc4a, Hi: 0xc4d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc55, Hi: 0xc56, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc62, Hi: 0xc63, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc81, Hi: 0xc81, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc82, Hi: 0xc83, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcbc, Hi: 0xcbc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcbe, Hi: 0xcbe, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcbf, Hi: 0xcbf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcc0, Hi: 0xcc4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcc6, Hi: 0xcc6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcc7, Hi: 0xcc8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcca, Hi: 0xccb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xccc, Hi: 0xccd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcd5, Hi: 0xcd6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xce2, Hi: 0xce3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd01, Hi: 0xd01, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd02, Hi: 0xd03, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd3e, Hi: 0xd40, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd41, Hi: 0xd44, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd46, Hi: 0xd48, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd4a, Hi: 0xd4c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd4d, Hi: 0xd4d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd57, Hi: 0xd57, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd62, Hi: 0xd63, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd82, Hi: 0xd83, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xdca, Hi: 0xdca, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xdcf, Hi: 0xdd1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xdd2, Hi: 0xdd4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xdd6, Hi: 0xdd6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xdd8, Hi: 0xddf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xdf2, Hi: 0xdf3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xe31, Hi: 0xe31, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xe34, Hi: 0xe3a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xe47, Hi: 0xe4e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xeb1, Hi: 0xeb1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xeb4, Hi: 0xeb9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xebb, Hi: 0xebc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xec8, Hi: 0xecd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xf18, Hi: 0xf19, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xf35, Hi: 0xf35, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xf37, Hi: 0xf37, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xf39, Hi: 0xf39, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xf3e, Hi: 0xf3f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xf71, Hi: 0xf7e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xf7f, Hi: 0xf7f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xf80, Hi: 0xf84, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xf86, Hi: 0xf87, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xf8d, Hi: 0xf97, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xf99, Hi: 0xfbc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfc6, Hi: 0xfc6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x102b, Hi: 0x102c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x102d, Hi: 0x1030, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1031, Hi: 0x1031, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1032, Hi: 0x1037, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1038, Hi: 0x1038, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1039, Hi: 0x103a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x103b, Hi: 0x103c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x103d, Hi: 0x103e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1056, Hi: 0x1057, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1058, Hi: 0x1059, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x105e, Hi: 0x1060, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1062, Hi: 0x1064, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1067, Hi: 0x106d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1071, Hi: 0x1074, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1082, Hi: 0x1082, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1083, Hi: 0x1084, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1085, Hi: 0x1086, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1087, Hi: 0x108c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x108d, Hi: 0x108d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x108f, Hi: 0x108f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x109a, Hi: 0x109c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x109d, Hi: 0x109d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x135d, Hi: 0x135f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1712, Hi: 0x1714, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1732, Hi: 0x1734, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1752, Hi: 0x1753, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1772, Hi: 0x1773, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x17b4, Hi: 0x17b5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x17b6, Hi: 0x17b6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x17b7, Hi: 0x17bd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x17be, Hi: 0x17c5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x17c6, Hi: 0x17c6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x17c7, Hi: 0x17c8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x17c9, Hi: 0x17d3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x17dd, Hi: 0x17dd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x180b, Hi: 0x180d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1885, Hi: 0x1886, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x18a9, Hi: 0x18a9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1920, Hi: 0x1922, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1923, Hi: 0x1926, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1927, Hi: 0x1928, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1929, Hi: 0x192b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1930, Hi: 0x1931, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1932, Hi: 0x1932, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1933, Hi: 0x1938, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1939, Hi: 0x193b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1a17, Hi: 0x1a18, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1a19, Hi: 0x1a1a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1a1b, Hi: 0x1a1b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1a55, Hi: 0x1a55, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1a56, Hi: 0x1a56, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1a57, Hi: 0x1a57, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1a58, Hi: 0x1a5e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1a60, Hi: 0x1a60, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1a61, Hi: 0x1a61, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1a62, Hi: 0x1a62, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1a63, Hi: 0x1a64, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1a65, Hi: 0x1a6c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1a6d, Hi: 0x1a72, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1a73, Hi: 0x1a7c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1a7f, Hi: 0x1a7f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ab0, Hi: 0x1abd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1abe, Hi: 0x1abe, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1b00, Hi: 0x1b03, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1b04, Hi: 0x1b04, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1b34, Hi: 0x1b34, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1b35, Hi: 0x1b35, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1b36, Hi: 0x1b3a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1b3b, Hi: 0x1b3b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1b3c, Hi: 0x1b3c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1b3d, Hi: 0x1b41, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1b42, Hi: 0x1b42, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1b43, Hi: 0x1b44, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1b6b, Hi: 0x1b73, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1b80, Hi: 0x1b81, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1b82, Hi: 0x1b82, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ba1, Hi: 0x1ba1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ba2, Hi: 0x1ba5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ba6, Hi: 0x1ba7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ba8, Hi: 0x1ba9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1baa, Hi: 0x1baa, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1bab, Hi: 0x1bad, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1be6, Hi: 0x1be6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1be7, Hi: 0x1be7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1be8, Hi: 0x1be9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1bea, Hi: 0x1bec, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1bed, Hi: 0x1bed, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1bee, Hi: 0x1bee, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1bef, Hi: 0x1bf1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1bf2, Hi: 0x1bf3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1c24, Hi: 0x1c2b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1c2c, Hi: 0x1c33, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1c34, Hi: 0x1c35, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1c36, Hi: 0x1c37, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1cd0, Hi: 0x1cd2, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1cd4, Hi: 0x1ce0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ce1, Hi: 0x1ce1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ce2, Hi: 0x1ce8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ced, Hi: 0x1ced, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1cf2, Hi: 0x1cf3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1cf4, Hi: 0x1cf4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1cf8, Hi: 0x1cf9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1dc0, Hi: 0x1df5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1dfb, Hi: 0x1dff, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x200c, Hi: 0x200c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x20d0, Hi: 0x20dc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x20dd, Hi: 0x20e0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x20e1, Hi: 0x20e1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x20e2, Hi: 0x20e4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x20e5, Hi: 0x20f0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2cef, Hi: 0x2cf1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2d7f, Hi: 0x2d7f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2de0, Hi: 0x2dff, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x302a, Hi: 0x302d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x302e, Hi: 0x302f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3099, Hi: 0x309a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa66f, Hi: 0xa66f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa670, Hi: 0xa672, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa674, Hi: 0xa67d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa69e, Hi: 0xa69f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa6f0, Hi: 0xa6f1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa802, Hi: 0xa802, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa806, Hi: 0xa806, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa80b, Hi: 0xa80b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa823, Hi: 0xa824, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa825, Hi: 0xa826, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa827, Hi: 0xa827, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa880, Hi: 0xa881, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa8b4, Hi: 0xa8c3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa8c4, Hi: 0xa8c5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa8e0, Hi: 0xa8f1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa926, Hi: 0xa92d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa947, Hi: 0xa951, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa952, Hi: 0xa953, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa980, Hi: 0xa982, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa983, Hi: 0xa983, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa9b3, Hi: 0xa9b3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa9b4, Hi: 0xa9b5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa9b6, Hi: 0xa9b9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa9ba, Hi: 0xa9bb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa9bc, Hi: 0xa9bc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa9bd, Hi: 0xa9c0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa9e5, Hi: 0xa9e5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaa29, Hi: 0xaa2e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaa2f, Hi: 0xaa30, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaa31, Hi: 0xaa32, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaa33, Hi: 0xaa34, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaa35, Hi: 0xaa36, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaa43, Hi: 0xaa43, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaa4c, Hi: 0xaa4c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaa4d, Hi: 0xaa4d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaa7b, Hi: 0xaa7b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaa7c, Hi: 0xaa7c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaa7d, Hi: 0xaa7d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaab0, Hi: 0xaab0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaab2, Hi: 0xaab4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaab7, Hi: 0xaab8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaabe, Hi: 0xaabf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaac1, Hi: 0xaac1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaaeb, Hi: 0xaaeb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaaec, Hi: 0xaaed, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaaee, Hi: 0xaaef, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaaf5, Hi: 0xaaf5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaaf6, Hi: 0xaaf6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xabe3, Hi: 0xabe4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xabe5, Hi: 0xabe5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xabe6, Hi: 0xabe7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xabe8, Hi: 0xabe8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xabe9, Hi: 0xabea, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xabec, Hi: 0xabec, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xabed, Hi: 0xabed, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfb1e, Hi: 0xfb1e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfe00, Hi: 0xfe0f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfe20, Hi: 0xfe2f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xff9e, Hi: 0xff9f, Stride: 0x1},\n\t},\n\tR32: []unicode.Range32{\n\t\tunicode.Range32{Lo: 0x101fd, Hi: 0x101fd, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x102e0, Hi: 0x102e0, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10376, Hi: 0x1037a, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10a01, Hi: 0x10a03, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10a05, Hi: 0x10a06, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10a0c, Hi: 0x10a0f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10a38, Hi: 0x10a3a, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10a3f, Hi: 0x10a3f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10ae5, Hi: 0x10ae6, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11000, Hi: 0x11000, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11001, Hi: 0x11001, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11002, Hi: 0x11002, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11038, Hi: 0x11046, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1107f, Hi: 0x11081, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11082, Hi: 0x11082, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x110b0, Hi: 0x110b2, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x110b3, Hi: 0x110b6, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x110b7, Hi: 0x110b8, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x110b9, Hi: 0x110ba, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11100, Hi: 0x11102, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11127, Hi: 0x1112b, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1112c, Hi: 0x1112c, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1112d, Hi: 0x11134, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11173, Hi: 0x11173, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11180, Hi: 0x11181, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11182, Hi: 0x11182, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x111b3, Hi: 0x111b5, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x111b6, Hi: 0x111be, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x111bf, Hi: 0x111c0, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x111ca, Hi: 0x111cc, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1122c, Hi: 0x1122e, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1122f, Hi: 0x11231, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11232, Hi: 0x11233, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11234, Hi: 0x11234, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11235, Hi: 0x11235, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11236, Hi: 0x11237, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1123e, Hi: 0x1123e, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x112df, Hi: 0x112df, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x112e0, Hi: 0x112e2, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x112e3, Hi: 0x112ea, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11300, Hi: 0x11301, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11302, Hi: 0x11303, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1133c, Hi: 0x1133c, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1133e, Hi: 0x1133f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11340, Hi: 0x11340, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11341, Hi: 0x11344, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11347, Hi: 0x11348, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1134b, Hi: 0x1134d, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11357, Hi: 0x11357, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11362, Hi: 0x11363, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11366, Hi: 0x1136c, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11370, Hi: 0x11374, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11435, Hi: 0x11437, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11438, Hi: 0x1143f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11440, Hi: 0x11441, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11442, Hi: 0x11444, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11445, Hi: 0x11445, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11446, Hi: 0x11446, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x114b0, Hi: 0x114b2, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x114b3, Hi: 0x114b8, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x114b9, Hi: 0x114b9, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x114ba, Hi: 0x114ba, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x114bb, Hi: 0x114be, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x114bf, Hi: 0x114c0, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x114c1, Hi: 0x114c1, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x114c2, Hi: 0x114c3, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x115af, Hi: 0x115b1, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x115b2, Hi: 0x115b5, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x115b8, Hi: 0x115bb, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x115bc, Hi: 0x115bd, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x115be, Hi: 0x115be, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x115bf, Hi: 0x115c0, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x115dc, Hi: 0x115dd, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11630, Hi: 0x11632, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11633, Hi: 0x1163a, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1163b, Hi: 0x1163c, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1163d, Hi: 0x1163d, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1163e, Hi: 0x1163e, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1163f, Hi: 0x11640, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x116ab, Hi: 0x116ab, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x116ac, Hi: 0x116ac, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x116ad, Hi: 0x116ad, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x116ae, Hi: 0x116af, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x116b0, Hi: 0x116b5, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x116b6, Hi: 0x116b6, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x116b7, Hi: 0x116b7, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1171d, Hi: 0x1171f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11720, Hi: 0x11721, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11722, Hi: 0x11725, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11726, Hi: 0x11726, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11727, Hi: 0x1172b, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11c2f, Hi: 0x11c2f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11c30, Hi: 0x11c36, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11c38, Hi: 0x11c3d, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11c3e, Hi: 0x11c3e, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11c3f, Hi: 0x11c3f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11c92, Hi: 0x11ca7, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11ca9, Hi: 0x11ca9, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11caa, Hi: 0x11cb0, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11cb1, Hi: 0x11cb1, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11cb2, Hi: 0x11cb3, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11cb4, Hi: 0x11cb4, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11cb5, Hi: 0x11cb6, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x16af0, Hi: 0x16af4, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x16b30, Hi: 0x16b36, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x16f51, Hi: 0x16f7e, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x16f8f, Hi: 0x16f92, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1bc9d, Hi: 0x1bc9e, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d165, Hi: 0x1d166, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d167, Hi: 0x1d169, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d16d, Hi: 0x1d172, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d17b, Hi: 0x1d182, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d185, Hi: 0x1d18b, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d1aa, Hi: 0x1d1ad, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d242, Hi: 0x1d244, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1da00, Hi: 0x1da36, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1da3b, Hi: 0x1da6c, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1da75, Hi: 0x1da75, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1da84, Hi: 0x1da84, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1da9b, Hi: 0x1da9f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1daa1, Hi: 0x1daaf, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1e000, Hi: 0x1e006, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1e008, Hi: 0x1e018, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1e01b, Hi: 0x1e021, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1e023, Hi: 0x1e024, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1e026, Hi: 0x1e02a, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1e8d0, Hi: 0x1e8d6, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1e944, Hi: 0x1e94a, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0xe0020, Hi: 0xe007f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0xe0100, Hi: 0xe01ef, Stride: 0x1},\n\t},\n\tLatinOffset: 0,\n}\n\nvar _WordExtendNumLet = &unicode.RangeTable{\n\tR16: []unicode.Range16{\n\t\tunicode.Range16{Lo: 0x5f, Hi: 0x5f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x202f, Hi: 0x202f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x203f, Hi: 0x2040, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2054, Hi: 0x2054, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfe33, Hi: 0xfe34, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfe4d, Hi: 0xfe4f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xff3f, Hi: 0xff3f, Stride: 0x1},\n\t},\n\tLatinOffset: 1,\n}\n\nvar _WordFormat = &unicode.RangeTable{\n\tR16: []unicode.Range16{\n\t\tunicode.Range16{Lo: 0xad, Hi: 0xad, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x600, Hi: 0x605, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x61c, Hi: 0x61c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x6dd, Hi: 0x6dd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x70f, Hi: 0x70f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x8e2, Hi: 0x8e2, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x180e, Hi: 0x180e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x200e, Hi: 0x200f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x202a, Hi: 0x202e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2060, Hi: 0x2064, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2066, Hi: 0x206f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfeff, Hi: 0xfeff, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfff9, Hi: 0xfffb, Stride: 0x1},\n\t},\n\tR32: []unicode.Range32{\n\t\tunicode.Range32{Lo: 0x110bd, Hi: 0x110bd, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1bca0, Hi: 0x1bca3, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d173, Hi: 0x1d17a, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0xe0001, Hi: 0xe0001, Stride: 0x1},\n\t},\n\tLatinOffset: 1,\n}\n\nvar _WordGlue_After_Zwj = &unicode.RangeTable{\n\tR16: []unicode.Range16{\n\t\tunicode.Range16{Lo: 0x2764, Hi: 0x2764, Stride: 0x1},\n\t},\n\tR32: []unicode.Range32{\n\t\tunicode.Range32{Lo: 0x1f48b, Hi: 0x1f48b, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1f5e8, Hi: 0x1f5e8, Stride: 0x1},\n\t},\n\tLatinOffset: 0,\n}\n\nvar _WordHebrew_Letter = &unicode.RangeTable{\n\tR16: []unicode.Range16{\n\t\tunicode.Range16{Lo: 0x5d0, Hi: 0x5ea, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x5f0, Hi: 0x5f2, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfb1d, Hi: 0xfb1d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfb1f, Hi: 0xfb28, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfb2a, Hi: 0xfb36, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfb38, Hi: 0xfb3c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfb3e, Hi: 0xfb3e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfb40, Hi: 0xfb41, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfb43, Hi: 0xfb44, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfb46, Hi: 0xfb4f, Stride: 0x1},\n\t},\n\tLatinOffset: 0,\n}\n\nvar _WordKatakana = &unicode.RangeTable{\n\tR16: []unicode.Range16{\n\t\tunicode.Range16{Lo: 0x3031, Hi: 0x3035, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x309b, Hi: 0x309c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x30a0, Hi: 0x30a0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x30a1, Hi: 0x30fa, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x30fc, Hi: 0x30fe, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x30ff, Hi: 0x30ff, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x31f0, Hi: 0x31ff, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x32d0, Hi: 0x32fe, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3300, Hi: 0x3357, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xff66, Hi: 0xff6f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xff70, Hi: 0xff70, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xff71, Hi: 0xff9d, Stride: 0x1},\n\t},\n\tR32: []unicode.Range32{\n\t\tunicode.Range32{Lo: 0x1b000, Hi: 0x1b000, Stride: 0x1},\n\t},\n\tLatinOffset: 0,\n}\n\nvar _WordLF = &unicode.RangeTable{\n\tR16: []unicode.Range16{\n\t\tunicode.Range16{Lo: 0xa, Hi: 0xa, Stride: 0x1},\n\t},\n\tLatinOffset: 1,\n}\n\nvar _WordMidLetter = &unicode.RangeTable{\n\tR16: []unicode.Range16{\n\t\tunicode.Range16{Lo: 0x3a, Hi: 0x3a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb7, Hi: 0xb7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2d7, Hi: 0x2d7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x387, Hi: 0x387, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x5f4, Hi: 0x5f4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2027, Hi: 0x2027, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfe13, Hi: 0xfe13, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfe55, Hi: 0xfe55, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xff1a, Hi: 0xff1a, Stride: 0x1},\n\t},\n\tLatinOffset: 2,\n}\n\nvar _WordMidNum = &unicode.RangeTable{\n\tR16: []unicode.Range16{\n\t\tunicode.Range16{Lo: 0x2c, Hi: 0x2c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3b, Hi: 0x3b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x37e, Hi: 0x37e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x589, Hi: 0x589, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x60c, Hi: 0x60d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x66c, Hi: 0x66c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x7f8, Hi: 0x7f8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2044, Hi: 0x2044, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfe10, Hi: 0xfe10, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfe14, Hi: 0xfe14, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfe50, Hi: 0xfe50, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfe54, Hi: 0xfe54, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xff0c, Hi: 0xff0c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xff1b, Hi: 0xff1b, Stride: 0x1},\n\t},\n\tLatinOffset: 2,\n}\n\nvar _WordMidNumLet = &unicode.RangeTable{\n\tR16: []unicode.Range16{\n\t\tunicode.Range16{Lo: 0x2e, Hi: 0x2e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2018, Hi: 0x2018, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2019, Hi: 0x2019, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2024, Hi: 0x2024, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfe52, Hi: 0xfe52, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xff07, Hi: 0xff07, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xff0e, Hi: 0xff0e, Stride: 0x1},\n\t},\n\tLatinOffset: 1,\n}\n\nvar _WordNewline = &unicode.RangeTable{\n\tR16: []unicode.Range16{\n\t\tunicode.Range16{Lo: 0xb, Hi: 0xc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x85, Hi: 0x85, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2028, Hi: 0x2028, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2029, Hi: 0x2029, Stride: 0x1},\n\t},\n\tLatinOffset: 2,\n}\n\nvar _WordNumeric = &unicode.RangeTable{\n\tR16: []unicode.Range16{\n\t\tunicode.Range16{Lo: 0x30, Hi: 0x39, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x660, Hi: 0x669, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x66b, Hi: 0x66b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x6f0, Hi: 0x6f9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x7c0, Hi: 0x7c9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x966, Hi: 0x96f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x9e6, Hi: 0x9ef, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa66, Hi: 0xa6f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xae6, Hi: 0xaef, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb66, Hi: 0xb6f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbe6, Hi: 0xbef, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc66, Hi: 0xc6f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xce6, Hi: 0xcef, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd66, Hi: 0xd6f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xde6, Hi: 0xdef, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xe50, Hi: 0xe59, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xed0, Hi: 0xed9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xf20, Hi: 0xf29, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1040, Hi: 0x1049, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1090, Hi: 0x1099, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x17e0, Hi: 0x17e9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1810, Hi: 0x1819, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1946, Hi: 0x194f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x19d0, Hi: 0x19d9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1a80, Hi: 0x1a89, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1a90, Hi: 0x1a99, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1b50, Hi: 0x1b59, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1bb0, Hi: 0x1bb9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1c40, Hi: 0x1c49, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1c50, Hi: 0x1c59, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa620, Hi: 0xa629, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa8d0, Hi: 0xa8d9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa900, Hi: 0xa909, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa9d0, Hi: 0xa9d9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa9f0, Hi: 0xa9f9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaa50, Hi: 0xaa59, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xabf0, Hi: 0xabf9, Stride: 0x1},\n\t},\n\tR32: []unicode.Range32{\n\t\tunicode.Range32{Lo: 0x104a0, Hi: 0x104a9, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11066, Hi: 0x1106f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x110f0, Hi: 0x110f9, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11136, Hi: 0x1113f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x111d0, Hi: 0x111d9, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x112f0, Hi: 0x112f9, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11450, Hi: 0x11459, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x114d0, Hi: 0x114d9, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11650, Hi: 0x11659, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x116c0, Hi: 0x116c9, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11730, Hi: 0x11739, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x118e0, Hi: 0x118e9, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11c50, Hi: 0x11c59, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x16a60, Hi: 0x16a69, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x16b50, Hi: 0x16b59, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d7ce, Hi: 0x1d7ff, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1e950, Hi: 0x1e959, Stride: 0x1},\n\t},\n\tLatinOffset: 1,\n}\n\nvar _WordRegional_Indicator = &unicode.RangeTable{\n\tR32: []unicode.Range32{\n\t\tunicode.Range32{Lo: 0x1f1e6, Hi: 0x1f1ff, Stride: 0x1},\n\t},\n\tLatinOffset: 0,\n}\n\nvar _WordSingle_Quote = &unicode.RangeTable{\n\tR16: []unicode.Range16{\n\t\tunicode.Range16{Lo: 0x27, Hi: 0x27, Stride: 0x1},\n\t},\n\tLatinOffset: 1,\n}\n\nvar _WordZWJ = &unicode.RangeTable{\n\tR16: []unicode.Range16{\n\t\tunicode.Range16{Lo: 0x200d, Hi: 0x200d, Stride: 0x1},\n\t},\n\tLatinOffset: 0,\n}\n\ntype _WordRuneRange unicode.RangeTable\n\nfunc _WordRuneType(r rune) *_WordRuneRange {\n\tswitch {\n\tcase unicode.Is(_WordALetter, r):\n\t\treturn (*_WordRuneRange)(_WordALetter)\n\tcase unicode.Is(_WordCR, r):\n\t\treturn (*_WordRuneRange)(_WordCR)\n\tcase unicode.Is(_WordDouble_Quote, r):\n\t\treturn (*_WordRuneRange)(_WordDouble_Quote)\n\tcase unicode.Is(_WordE_Base, r):\n\t\treturn (*_WordRuneRange)(_WordE_Base)\n\tcase unicode.Is(_WordE_Base_GAZ, r):\n\t\treturn (*_WordRuneRange)(_WordE_Base_GAZ)\n\tcase unicode.Is(_WordE_Modifier, r):\n\t\treturn (*_WordRuneRange)(_WordE_Modifier)\n\tcase unicode.Is(_WordExtend, r):\n\t\treturn (*_WordRuneRange)(_WordExtend)\n\tcase unicode.Is(_WordExtendNumLet, r):\n\t\treturn (*_WordRuneRange)(_WordExtendNumLet)\n\tcase unicode.Is(_WordFormat, r):\n\t\treturn (*_WordRuneRange)(_WordFormat)\n\tcase unicode.Is(_WordGlue_After_Zwj, r):\n\t\treturn (*_WordRuneRange)(_WordGlue_After_Zwj)\n\tcase unicode.Is(_WordHebrew_Letter, r):\n\t\treturn (*_WordRuneRange)(_WordHebrew_Letter)\n\tcase unicode.Is(_WordKatakana, r):\n\t\treturn (*_WordRuneRange)(_WordKatakana)\n\tcase unicode.Is(_WordLF, r):\n\t\treturn (*_WordRuneRange)(_WordLF)\n\tcase unicode.Is(_WordMidLetter, r):\n\t\treturn (*_WordRuneRange)(_WordMidLetter)\n\tcase unicode.Is(_WordMidNum, r):\n\t\treturn (*_WordRuneRange)(_WordMidNum)\n\tcase unicode.Is(_WordMidNumLet, r):\n\t\treturn (*_WordRuneRange)(_WordMidNumLet)\n\tcase unicode.Is(_WordNewline, r):\n\t\treturn (*_WordRuneRange)(_WordNewline)\n\tcase unicode.Is(_WordNumeric, r):\n\t\treturn (*_WordRuneRange)(_WordNumeric)\n\tcase unicode.Is(_WordRegional_Indicator, r):\n\t\treturn (*_WordRuneRange)(_WordRegional_Indicator)\n\tcase unicode.Is(_WordSingle_Quote, r):\n\t\treturn (*_WordRuneRange)(_WordSingle_Quote)\n\tcase unicode.Is(_WordZWJ, r):\n\t\treturn (*_WordRuneRange)(_WordZWJ)\n\tdefault:\n\t\treturn nil\n\t}\n}\nfunc (rng *_WordRuneRange) String() string {\n\tswitch (*unicode.RangeTable)(rng) {\n\tcase _WordALetter:\n\t\treturn \"ALetter\"\n\tcase _WordCR:\n\t\treturn \"CR\"\n\tcase _WordDouble_Quote:\n\t\treturn \"Double_Quote\"\n\tcase _WordE_Base:\n\t\treturn \"E_Base\"\n\tcase _WordE_Base_GAZ:\n\t\treturn \"E_Base_GAZ\"\n\tcase _WordE_Modifier:\n\t\treturn \"E_Modifier\"\n\tcase _WordExtend:\n\t\treturn \"Extend\"\n\tcase _WordExtendNumLet:\n\t\treturn \"ExtendNumLet\"\n\tcase _WordFormat:\n\t\treturn \"Format\"\n\tcase _WordGlue_After_Zwj:\n\t\treturn \"Glue_After_Zwj\"\n\tcase _WordHebrew_Letter:\n\t\treturn \"Hebrew_Letter\"\n\tcase _WordKatakana:\n\t\treturn \"Katakana\"\n\tcase _WordLF:\n\t\treturn \"LF\"\n\tcase _WordMidLetter:\n\t\treturn \"MidLetter\"\n\tcase _WordMidNum:\n\t\treturn \"MidNum\"\n\tcase _WordMidNumLet:\n\t\treturn \"MidNumLet\"\n\tcase _WordNewline:\n\t\treturn \"Newline\"\n\tcase _WordNumeric:\n\t\treturn \"Numeric\"\n\tcase _WordRegional_Indicator:\n\t\treturn \"Regional_Indicator\"\n\tcase _WordSingle_Quote:\n\t\treturn \"Single_Quote\"\n\tcase _WordZWJ:\n\t\treturn \"ZWJ\"\n\tdefault:\n\t\treturn \"Other\"\n\t}\n}\n\nvar _SentenceATerm = &unicode.RangeTable{\n\tR16: []unicode.Range16{\n\t\tunicode.Range16{Lo: 0x2e, Hi: 0x2e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2024, Hi: 0x2024, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfe52, Hi: 0xfe52, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xff0e, Hi: 0xff0e, Stride: 0x1},\n\t},\n\tLatinOffset: 1,\n}\n\nvar _SentenceCR = &unicode.RangeTable{\n\tR16: []unicode.Range16{\n\t\tunicode.Range16{Lo: 0xd, Hi: 0xd, Stride: 0x1},\n\t},\n\tLatinOffset: 1,\n}\n\nvar _SentenceClose = &unicode.RangeTable{\n\tR16: []unicode.Range16{\n\t\tunicode.Range16{Lo: 0x22, Hi: 0x22, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x27, Hi: 0x27, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x28, Hi: 0x28, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x29, Hi: 0x29, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x5b, Hi: 0x5b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x5d, Hi: 0x5d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x7b, Hi: 0x7b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x7d, Hi: 0x7d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xab, Hi: 0xab, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbb, Hi: 0xbb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xf3a, Hi: 0xf3a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xf3b, Hi: 0xf3b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xf3c, Hi: 0xf3c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xf3d, Hi: 0xf3d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x169b, Hi: 0x169b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x169c, Hi: 0x169c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2018, Hi: 0x2018, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2019, Hi: 0x2019, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x201a, Hi: 0x201a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x201b, Hi: 0x201c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x201d, Hi: 0x201d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x201e, Hi: 0x201e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x201f, Hi: 0x201f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2039, Hi: 0x2039, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x203a, Hi: 0x203a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2045, Hi: 0x2045, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2046, Hi: 0x2046, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x207d, Hi: 0x207d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x207e, Hi: 0x207e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x208d, Hi: 0x208d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x208e, Hi: 0x208e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2308, Hi: 0x2308, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2309, Hi: 0x2309, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x230a, Hi: 0x230a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x230b, Hi: 0x230b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2329, Hi: 0x2329, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x232a, Hi: 0x232a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x275b, Hi: 0x2760, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2768, Hi: 0x2768, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2769, Hi: 0x2769, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x276a, Hi: 0x276a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x276b, Hi: 0x276b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x276c, Hi: 0x276c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x276d, Hi: 0x276d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x276e, Hi: 0x276e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x276f, Hi: 0x276f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2770, Hi: 0x2770, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2771, Hi: 0x2771, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2772, Hi: 0x2772, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2773, Hi: 0x2773, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2774, Hi: 0x2774, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2775, Hi: 0x2775, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x27c5, Hi: 0x27c5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x27c6, Hi: 0x27c6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x27e6, Hi: 0x27e6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x27e7, Hi: 0x27e7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x27e8, Hi: 0x27e8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x27e9, Hi: 0x27e9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x27ea, Hi: 0x27ea, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x27eb, Hi: 0x27eb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x27ec, Hi: 0x27ec, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x27ed, Hi: 0x27ed, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x27ee, Hi: 0x27ee, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x27ef, Hi: 0x27ef, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2983, Hi: 0x2983, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2984, Hi: 0x2984, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2985, Hi: 0x2985, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2986, Hi: 0x2986, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2987, Hi: 0x2987, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2988, Hi: 0x2988, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2989, Hi: 0x2989, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x298a, Hi: 0x298a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x298b, Hi: 0x298b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x298c, Hi: 0x298c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x298d, Hi: 0x298d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x298e, Hi: 0x298e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x298f, Hi: 0x298f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2990, Hi: 0x2990, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2991, Hi: 0x2991, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2992, Hi: 0x2992, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2993, Hi: 0x2993, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2994, Hi: 0x2994, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2995, Hi: 0x2995, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2996, Hi: 0x2996, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2997, Hi: 0x2997, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2998, Hi: 0x2998, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x29d8, Hi: 0x29d8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x29d9, Hi: 0x29d9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x29da, Hi: 0x29da, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x29db, Hi: 0x29db, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x29fc, Hi: 0x29fc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x29fd, Hi: 0x29fd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2e00, Hi: 0x2e01, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2e02, Hi: 0x2e02, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2e03, Hi: 0x2e03, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2e04, Hi: 0x2e04, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2e05, Hi: 0x2e05, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2e06, Hi: 0x2e08, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2e09, Hi: 0x2e09, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2e0a, Hi: 0x2e0a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2e0b, Hi: 0x2e0b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2e0c, Hi: 0x2e0c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2e0d, Hi: 0x2e0d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2e1c, Hi: 0x2e1c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2e1d, Hi: 0x2e1d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2e20, Hi: 0x2e20, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2e21, Hi: 0x2e21, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2e22, Hi: 0x2e22, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2e23, Hi: 0x2e23, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2e24, Hi: 0x2e24, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2e25, Hi: 0x2e25, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2e26, Hi: 0x2e26, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2e27, Hi: 0x2e27, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2e28, Hi: 0x2e28, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2e29, Hi: 0x2e29, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2e42, Hi: 0x2e42, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3008, Hi: 0x3008, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3009, Hi: 0x3009, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x300a, Hi: 0x300a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x300b, Hi: 0x300b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x300c, Hi: 0x300c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x300d, Hi: 0x300d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x300e, Hi: 0x300e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x300f, Hi: 0x300f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3010, Hi: 0x3010, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3011, Hi: 0x3011, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3014, Hi: 0x3014, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3015, Hi: 0x3015, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3016, Hi: 0x3016, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3017, Hi: 0x3017, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3018, Hi: 0x3018, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3019, Hi: 0x3019, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x301a, Hi: 0x301a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x301b, Hi: 0x301b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x301d, Hi: 0x301d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x301e, Hi: 0x301f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfd3e, Hi: 0xfd3e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfd3f, Hi: 0xfd3f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfe17, Hi: 0xfe17, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfe18, Hi: 0xfe18, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfe35, Hi: 0xfe35, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfe36, Hi: 0xfe36, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfe37, Hi: 0xfe37, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfe38, Hi: 0xfe38, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfe39, Hi: 0xfe39, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfe3a, Hi: 0xfe3a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfe3b, Hi: 0xfe3b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfe3c, Hi: 0xfe3c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfe3d, Hi: 0xfe3d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfe3e, Hi: 0xfe3e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfe3f, Hi: 0xfe3f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfe40, Hi: 0xfe40, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfe41, Hi: 0xfe41, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfe42, Hi: 0xfe42, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfe43, Hi: 0xfe43, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfe44, Hi: 0xfe44, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfe47, Hi: 0xfe47, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfe48, Hi: 0xfe48, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfe59, Hi: 0xfe59, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfe5a, Hi: 0xfe5a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfe5b, Hi: 0xfe5b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfe5c, Hi: 0xfe5c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfe5d, Hi: 0xfe5d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfe5e, Hi: 0xfe5e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xff08, Hi: 0xff08, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xff09, Hi: 0xff09, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xff3b, Hi: 0xff3b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xff3d, Hi: 0xff3d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xff5b, Hi: 0xff5b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xff5d, Hi: 0xff5d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xff5f, Hi: 0xff5f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xff60, Hi: 0xff60, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xff62, Hi: 0xff62, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xff63, Hi: 0xff63, Stride: 0x1},\n\t},\n\tR32: []unicode.Range32{\n\t\tunicode.Range32{Lo: 0x1f676, Hi: 0x1f678, Stride: 0x1},\n\t},\n\tLatinOffset: 10,\n}\n\nvar _SentenceExtend = &unicode.RangeTable{\n\tR16: []unicode.Range16{\n\t\tunicode.Range16{Lo: 0x300, Hi: 0x36f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x483, Hi: 0x487, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x488, Hi: 0x489, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x591, Hi: 0x5bd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x5bf, Hi: 0x5bf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x5c1, Hi: 0x5c2, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x5c4, Hi: 0x5c5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x5c7, Hi: 0x5c7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x610, Hi: 0x61a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x64b, Hi: 0x65f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x670, Hi: 0x670, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x6d6, Hi: 0x6dc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x6df, Hi: 0x6e4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x6e7, Hi: 0x6e8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x6ea, Hi: 0x6ed, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x711, Hi: 0x711, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x730, Hi: 0x74a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x7a6, Hi: 0x7b0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x7eb, Hi: 0x7f3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x816, Hi: 0x819, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x81b, Hi: 0x823, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x825, Hi: 0x827, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x829, Hi: 0x82d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x859, Hi: 0x85b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x8d4, Hi: 0x8e1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x8e3, Hi: 0x902, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x903, Hi: 0x903, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x93a, Hi: 0x93a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x93b, Hi: 0x93b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x93c, Hi: 0x93c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x93e, Hi: 0x940, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x941, Hi: 0x948, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x949, Hi: 0x94c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x94d, Hi: 0x94d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x94e, Hi: 0x94f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x951, Hi: 0x957, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x962, Hi: 0x963, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x981, Hi: 0x981, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x982, Hi: 0x983, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x9bc, Hi: 0x9bc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x9be, Hi: 0x9c0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x9c1, Hi: 0x9c4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x9c7, Hi: 0x9c8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x9cb, Hi: 0x9cc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x9cd, Hi: 0x9cd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x9d7, Hi: 0x9d7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x9e2, Hi: 0x9e3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa01, Hi: 0xa02, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa03, Hi: 0xa03, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa3c, Hi: 0xa3c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa3e, Hi: 0xa40, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa41, Hi: 0xa42, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa47, Hi: 0xa48, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa4b, Hi: 0xa4d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa51, Hi: 0xa51, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa70, Hi: 0xa71, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa75, Hi: 0xa75, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa81, Hi: 0xa82, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa83, Hi: 0xa83, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xabc, Hi: 0xabc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xabe, Hi: 0xac0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xac1, Hi: 0xac5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xac7, Hi: 0xac8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xac9, Hi: 0xac9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xacb, Hi: 0xacc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xacd, Hi: 0xacd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xae2, Hi: 0xae3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb01, Hi: 0xb01, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb02, Hi: 0xb03, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb3c, Hi: 0xb3c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb3e, Hi: 0xb3e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb3f, Hi: 0xb3f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb40, Hi: 0xb40, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb41, Hi: 0xb44, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb47, Hi: 0xb48, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb4b, Hi: 0xb4c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb4d, Hi: 0xb4d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb56, Hi: 0xb56, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb57, Hi: 0xb57, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb62, Hi: 0xb63, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb82, Hi: 0xb82, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbbe, Hi: 0xbbf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbc0, Hi: 0xbc0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbc1, Hi: 0xbc2, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbc6, Hi: 0xbc8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbca, Hi: 0xbcc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbcd, Hi: 0xbcd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbd7, Hi: 0xbd7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc00, Hi: 0xc00, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc01, Hi: 0xc03, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc3e, Hi: 0xc40, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc41, Hi: 0xc44, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc46, Hi: 0xc48, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc4a, Hi: 0xc4d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc55, Hi: 0xc56, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc62, Hi: 0xc63, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc81, Hi: 0xc81, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc82, Hi: 0xc83, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcbc, Hi: 0xcbc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcbe, Hi: 0xcbe, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcbf, Hi: 0xcbf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcc0, Hi: 0xcc4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcc6, Hi: 0xcc6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcc7, Hi: 0xcc8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcca, Hi: 0xccb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xccc, Hi: 0xccd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcd5, Hi: 0xcd6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xce2, Hi: 0xce3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd01, Hi: 0xd01, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd02, Hi: 0xd03, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd3e, Hi: 0xd40, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd41, Hi: 0xd44, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd46, Hi: 0xd48, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd4a, Hi: 0xd4c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd4d, Hi: 0xd4d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd57, Hi: 0xd57, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd62, Hi: 0xd63, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd82, Hi: 0xd83, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xdca, Hi: 0xdca, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xdcf, Hi: 0xdd1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xdd2, Hi: 0xdd4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xdd6, Hi: 0xdd6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xdd8, Hi: 0xddf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xdf2, Hi: 0xdf3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xe31, Hi: 0xe31, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xe34, Hi: 0xe3a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xe47, Hi: 0xe4e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xeb1, Hi: 0xeb1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xeb4, Hi: 0xeb9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xebb, Hi: 0xebc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xec8, Hi: 0xecd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xf18, Hi: 0xf19, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xf35, Hi: 0xf35, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xf37, Hi: 0xf37, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xf39, Hi: 0xf39, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xf3e, Hi: 0xf3f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xf71, Hi: 0xf7e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xf7f, Hi: 0xf7f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xf80, Hi: 0xf84, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xf86, Hi: 0xf87, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xf8d, Hi: 0xf97, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xf99, Hi: 0xfbc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfc6, Hi: 0xfc6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x102b, Hi: 0x102c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x102d, Hi: 0x1030, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1031, Hi: 0x1031, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1032, Hi: 0x1037, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1038, Hi: 0x1038, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1039, Hi: 0x103a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x103b, Hi: 0x103c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x103d, Hi: 0x103e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1056, Hi: 0x1057, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1058, Hi: 0x1059, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x105e, Hi: 0x1060, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1062, Hi: 0x1064, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1067, Hi: 0x106d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1071, Hi: 0x1074, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1082, Hi: 0x1082, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1083, Hi: 0x1084, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1085, Hi: 0x1086, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1087, Hi: 0x108c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x108d, Hi: 0x108d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x108f, Hi: 0x108f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x109a, Hi: 0x109c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x109d, Hi: 0x109d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x135d, Hi: 0x135f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1712, Hi: 0x1714, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1732, Hi: 0x1734, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1752, Hi: 0x1753, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1772, Hi: 0x1773, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x17b4, Hi: 0x17b5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x17b6, Hi: 0x17b6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x17b7, Hi: 0x17bd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x17be, Hi: 0x17c5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x17c6, Hi: 0x17c6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x17c7, Hi: 0x17c8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x17c9, Hi: 0x17d3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x17dd, Hi: 0x17dd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x180b, Hi: 0x180d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1885, Hi: 0x1886, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x18a9, Hi: 0x18a9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1920, Hi: 0x1922, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1923, Hi: 0x1926, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1927, Hi: 0x1928, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1929, Hi: 0x192b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1930, Hi: 0x1931, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1932, Hi: 0x1932, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1933, Hi: 0x1938, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1939, Hi: 0x193b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1a17, Hi: 0x1a18, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1a19, Hi: 0x1a1a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1a1b, Hi: 0x1a1b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1a55, Hi: 0x1a55, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1a56, Hi: 0x1a56, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1a57, Hi: 0x1a57, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1a58, Hi: 0x1a5e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1a60, Hi: 0x1a60, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1a61, Hi: 0x1a61, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1a62, Hi: 0x1a62, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1a63, Hi: 0x1a64, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1a65, Hi: 0x1a6c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1a6d, Hi: 0x1a72, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1a73, Hi: 0x1a7c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1a7f, Hi: 0x1a7f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ab0, Hi: 0x1abd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1abe, Hi: 0x1abe, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1b00, Hi: 0x1b03, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1b04, Hi: 0x1b04, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1b34, Hi: 0x1b34, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1b35, Hi: 0x1b35, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1b36, Hi: 0x1b3a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1b3b, Hi: 0x1b3b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1b3c, Hi: 0x1b3c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1b3d, Hi: 0x1b41, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1b42, Hi: 0x1b42, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1b43, Hi: 0x1b44, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1b6b, Hi: 0x1b73, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1b80, Hi: 0x1b81, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1b82, Hi: 0x1b82, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ba1, Hi: 0x1ba1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ba2, Hi: 0x1ba5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ba6, Hi: 0x1ba7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ba8, Hi: 0x1ba9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1baa, Hi: 0x1baa, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1bab, Hi: 0x1bad, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1be6, Hi: 0x1be6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1be7, Hi: 0x1be7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1be8, Hi: 0x1be9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1bea, Hi: 0x1bec, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1bed, Hi: 0x1bed, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1bee, Hi: 0x1bee, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1bef, Hi: 0x1bf1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1bf2, Hi: 0x1bf3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1c24, Hi: 0x1c2b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1c2c, Hi: 0x1c33, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1c34, Hi: 0x1c35, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1c36, Hi: 0x1c37, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1cd0, Hi: 0x1cd2, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1cd4, Hi: 0x1ce0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ce1, Hi: 0x1ce1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ce2, Hi: 0x1ce8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ced, Hi: 0x1ced, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1cf2, Hi: 0x1cf3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1cf4, Hi: 0x1cf4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1cf8, Hi: 0x1cf9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1dc0, Hi: 0x1df5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1dfb, Hi: 0x1dff, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x200c, Hi: 0x200d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x20d0, Hi: 0x20dc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x20dd, Hi: 0x20e0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x20e1, Hi: 0x20e1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x20e2, Hi: 0x20e4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x20e5, Hi: 0x20f0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2cef, Hi: 0x2cf1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2d7f, Hi: 0x2d7f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2de0, Hi: 0x2dff, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x302a, Hi: 0x302d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x302e, Hi: 0x302f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3099, Hi: 0x309a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa66f, Hi: 0xa66f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa670, Hi: 0xa672, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa674, Hi: 0xa67d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa69e, Hi: 0xa69f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa6f0, Hi: 0xa6f1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa802, Hi: 0xa802, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa806, Hi: 0xa806, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa80b, Hi: 0xa80b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa823, Hi: 0xa824, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa825, Hi: 0xa826, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa827, Hi: 0xa827, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa880, Hi: 0xa881, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa8b4, Hi: 0xa8c3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa8c4, Hi: 0xa8c5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa8e0, Hi: 0xa8f1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa926, Hi: 0xa92d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa947, Hi: 0xa951, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa952, Hi: 0xa953, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa980, Hi: 0xa982, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa983, Hi: 0xa983, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa9b3, Hi: 0xa9b3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa9b4, Hi: 0xa9b5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa9b6, Hi: 0xa9b9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa9ba, Hi: 0xa9bb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa9bc, Hi: 0xa9bc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa9bd, Hi: 0xa9c0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa9e5, Hi: 0xa9e5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaa29, Hi: 0xaa2e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaa2f, Hi: 0xaa30, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaa31, Hi: 0xaa32, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaa33, Hi: 0xaa34, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaa35, Hi: 0xaa36, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaa43, Hi: 0xaa43, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaa4c, Hi: 0xaa4c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaa4d, Hi: 0xaa4d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaa7b, Hi: 0xaa7b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaa7c, Hi: 0xaa7c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaa7d, Hi: 0xaa7d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaab0, Hi: 0xaab0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaab2, Hi: 0xaab4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaab7, Hi: 0xaab8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaabe, Hi: 0xaabf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaac1, Hi: 0xaac1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaaeb, Hi: 0xaaeb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaaec, Hi: 0xaaed, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaaee, Hi: 0xaaef, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaaf5, Hi: 0xaaf5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaaf6, Hi: 0xaaf6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xabe3, Hi: 0xabe4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xabe5, Hi: 0xabe5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xabe6, Hi: 0xabe7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xabe8, Hi: 0xabe8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xabe9, Hi: 0xabea, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xabec, Hi: 0xabec, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xabed, Hi: 0xabed, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfb1e, Hi: 0xfb1e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfe00, Hi: 0xfe0f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfe20, Hi: 0xfe2f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xff9e, Hi: 0xff9f, Stride: 0x1},\n\t},\n\tR32: []unicode.Range32{\n\t\tunicode.Range32{Lo: 0x101fd, Hi: 0x101fd, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x102e0, Hi: 0x102e0, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10376, Hi: 0x1037a, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10a01, Hi: 0x10a03, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10a05, Hi: 0x10a06, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10a0c, Hi: 0x10a0f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10a38, Hi: 0x10a3a, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10a3f, Hi: 0x10a3f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10ae5, Hi: 0x10ae6, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11000, Hi: 0x11000, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11001, Hi: 0x11001, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11002, Hi: 0x11002, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11038, Hi: 0x11046, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1107f, Hi: 0x11081, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11082, Hi: 0x11082, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x110b0, Hi: 0x110b2, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x110b3, Hi: 0x110b6, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x110b7, Hi: 0x110b8, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x110b9, Hi: 0x110ba, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11100, Hi: 0x11102, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11127, Hi: 0x1112b, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1112c, Hi: 0x1112c, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1112d, Hi: 0x11134, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11173, Hi: 0x11173, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11180, Hi: 0x11181, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11182, Hi: 0x11182, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x111b3, Hi: 0x111b5, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x111b6, Hi: 0x111be, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x111bf, Hi: 0x111c0, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x111ca, Hi: 0x111cc, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1122c, Hi: 0x1122e, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1122f, Hi: 0x11231, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11232, Hi: 0x11233, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11234, Hi: 0x11234, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11235, Hi: 0x11235, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11236, Hi: 0x11237, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1123e, Hi: 0x1123e, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x112df, Hi: 0x112df, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x112e0, Hi: 0x112e2, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x112e3, Hi: 0x112ea, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11300, Hi: 0x11301, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11302, Hi: 0x11303, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1133c, Hi: 0x1133c, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1133e, Hi: 0x1133f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11340, Hi: 0x11340, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11341, Hi: 0x11344, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11347, Hi: 0x11348, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1134b, Hi: 0x1134d, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11357, Hi: 0x11357, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11362, Hi: 0x11363, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11366, Hi: 0x1136c, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11370, Hi: 0x11374, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11435, Hi: 0x11437, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11438, Hi: 0x1143f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11440, Hi: 0x11441, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11442, Hi: 0x11444, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11445, Hi: 0x11445, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11446, Hi: 0x11446, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x114b0, Hi: 0x114b2, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x114b3, Hi: 0x114b8, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x114b9, Hi: 0x114b9, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x114ba, Hi: 0x114ba, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x114bb, Hi: 0x114be, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x114bf, Hi: 0x114c0, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x114c1, Hi: 0x114c1, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x114c2, Hi: 0x114c3, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x115af, Hi: 0x115b1, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x115b2, Hi: 0x115b5, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x115b8, Hi: 0x115bb, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x115bc, Hi: 0x115bd, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x115be, Hi: 0x115be, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x115bf, Hi: 0x115c0, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x115dc, Hi: 0x115dd, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11630, Hi: 0x11632, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11633, Hi: 0x1163a, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1163b, Hi: 0x1163c, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1163d, Hi: 0x1163d, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1163e, Hi: 0x1163e, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1163f, Hi: 0x11640, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x116ab, Hi: 0x116ab, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x116ac, Hi: 0x116ac, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x116ad, Hi: 0x116ad, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x116ae, Hi: 0x116af, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x116b0, Hi: 0x116b5, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x116b6, Hi: 0x116b6, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x116b7, Hi: 0x116b7, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1171d, Hi: 0x1171f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11720, Hi: 0x11721, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11722, Hi: 0x11725, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11726, Hi: 0x11726, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11727, Hi: 0x1172b, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11c2f, Hi: 0x11c2f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11c30, Hi: 0x11c36, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11c38, Hi: 0x11c3d, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11c3e, Hi: 0x11c3e, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11c3f, Hi: 0x11c3f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11c92, Hi: 0x11ca7, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11ca9, Hi: 0x11ca9, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11caa, Hi: 0x11cb0, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11cb1, Hi: 0x11cb1, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11cb2, Hi: 0x11cb3, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11cb4, Hi: 0x11cb4, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11cb5, Hi: 0x11cb6, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x16af0, Hi: 0x16af4, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x16b30, Hi: 0x16b36, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x16f51, Hi: 0x16f7e, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x16f8f, Hi: 0x16f92, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1bc9d, Hi: 0x1bc9e, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d165, Hi: 0x1d166, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d167, Hi: 0x1d169, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d16d, Hi: 0x1d172, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d17b, Hi: 0x1d182, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d185, Hi: 0x1d18b, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d1aa, Hi: 0x1d1ad, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d242, Hi: 0x1d244, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1da00, Hi: 0x1da36, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1da3b, Hi: 0x1da6c, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1da75, Hi: 0x1da75, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1da84, Hi: 0x1da84, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1da9b, Hi: 0x1da9f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1daa1, Hi: 0x1daaf, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1e000, Hi: 0x1e006, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1e008, Hi: 0x1e018, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1e01b, Hi: 0x1e021, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1e023, Hi: 0x1e024, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1e026, Hi: 0x1e02a, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1e8d0, Hi: 0x1e8d6, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1e944, Hi: 0x1e94a, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0xe0020, Hi: 0xe007f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0xe0100, Hi: 0xe01ef, Stride: 0x1},\n\t},\n\tLatinOffset: 0,\n}\n\nvar _SentenceFormat = &unicode.RangeTable{\n\tR16: []unicode.Range16{\n\t\tunicode.Range16{Lo: 0xad, Hi: 0xad, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x600, Hi: 0x605, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x61c, Hi: 0x61c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x6dd, Hi: 0x6dd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x70f, Hi: 0x70f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x8e2, Hi: 0x8e2, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x180e, Hi: 0x180e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x200b, Hi: 0x200b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x200e, Hi: 0x200f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x202a, Hi: 0x202e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2060, Hi: 0x2064, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2066, Hi: 0x206f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfeff, Hi: 0xfeff, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfff9, Hi: 0xfffb, Stride: 0x1},\n\t},\n\tR32: []unicode.Range32{\n\t\tunicode.Range32{Lo: 0x110bd, Hi: 0x110bd, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1bca0, Hi: 0x1bca3, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d173, Hi: 0x1d17a, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0xe0001, Hi: 0xe0001, Stride: 0x1},\n\t},\n\tLatinOffset: 1,\n}\n\nvar _SentenceLF = &unicode.RangeTable{\n\tR16: []unicode.Range16{\n\t\tunicode.Range16{Lo: 0xa, Hi: 0xa, Stride: 0x1},\n\t},\n\tLatinOffset: 1,\n}\n\nvar _SentenceLower = &unicode.RangeTable{\n\tR16: []unicode.Range16{\n\t\tunicode.Range16{Lo: 0x61, Hi: 0x7a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaa, Hi: 0xaa, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb5, Hi: 0xb5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xba, Hi: 0xba, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xdf, Hi: 0xf6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xf8, Hi: 0xff, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x101, Hi: 0x101, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x103, Hi: 0x103, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x105, Hi: 0x105, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x107, Hi: 0x107, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x109, Hi: 0x109, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x10b, Hi: 0x10b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x10d, Hi: 0x10d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x10f, Hi: 0x10f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x111, Hi: 0x111, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x113, Hi: 0x113, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x115, Hi: 0x115, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x117, Hi: 0x117, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x119, Hi: 0x119, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x11b, Hi: 0x11b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x11d, Hi: 0x11d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x11f, Hi: 0x11f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x121, Hi: 0x121, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x123, Hi: 0x123, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x125, Hi: 0x125, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x127, Hi: 0x127, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x129, Hi: 0x129, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x12b, Hi: 0x12b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x12d, Hi: 0x12d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x12f, Hi: 0x12f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x131, Hi: 0x131, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x133, Hi: 0x133, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x135, Hi: 0x135, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x137, Hi: 0x138, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x13a, Hi: 0x13a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x13c, Hi: 0x13c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x13e, Hi: 0x13e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x140, Hi: 0x140, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x142, Hi: 0x142, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x144, Hi: 0x144, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x146, Hi: 0x146, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x148, Hi: 0x149, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x14b, Hi: 0x14b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x14d, Hi: 0x14d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x14f, Hi: 0x14f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x151, Hi: 0x151, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x153, Hi: 0x153, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x155, Hi: 0x155, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x157, Hi: 0x157, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x159, Hi: 0x159, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x15b, Hi: 0x15b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x15d, Hi: 0x15d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x15f, Hi: 0x15f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x161, Hi: 0x161, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x163, Hi: 0x163, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x165, Hi: 0x165, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x167, Hi: 0x167, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x169, Hi: 0x169, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x16b, Hi: 0x16b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x16d, Hi: 0x16d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x16f, Hi: 0x16f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x171, Hi: 0x171, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x173, Hi: 0x173, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x175, Hi: 0x175, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x177, Hi: 0x177, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x17a, Hi: 0x17a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x17c, Hi: 0x17c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x17e, Hi: 0x180, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x183, Hi: 0x183, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x185, Hi: 0x185, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x188, Hi: 0x188, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x18c, Hi: 0x18d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x192, Hi: 0x192, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x195, Hi: 0x195, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x199, Hi: 0x19b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x19e, Hi: 0x19e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1a1, Hi: 0x1a1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1a3, Hi: 0x1a3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1a5, Hi: 0x1a5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1a8, Hi: 0x1a8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1aa, Hi: 0x1ab, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ad, Hi: 0x1ad, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1b0, Hi: 0x1b0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1b4, Hi: 0x1b4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1b6, Hi: 0x1b6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1b9, Hi: 0x1ba, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1bd, Hi: 0x1bf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1c6, Hi: 0x1c6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1c9, Hi: 0x1c9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1cc, Hi: 0x1cc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ce, Hi: 0x1ce, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1d0, Hi: 0x1d0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1d2, Hi: 0x1d2, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1d4, Hi: 0x1d4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1d6, Hi: 0x1d6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1d8, Hi: 0x1d8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1da, Hi: 0x1da, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1dc, Hi: 0x1dd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1df, Hi: 0x1df, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e1, Hi: 0x1e1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e3, Hi: 0x1e3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e5, Hi: 0x1e5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e7, Hi: 0x1e7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e9, Hi: 0x1e9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1eb, Hi: 0x1eb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ed, Hi: 0x1ed, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ef, Hi: 0x1f0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1f3, Hi: 0x1f3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1f5, Hi: 0x1f5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1f9, Hi: 0x1f9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1fb, Hi: 0x1fb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1fd, Hi: 0x1fd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ff, Hi: 0x1ff, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x201, Hi: 0x201, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x203, Hi: 0x203, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x205, Hi: 0x205, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x207, Hi: 0x207, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x209, Hi: 0x209, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x20b, Hi: 0x20b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x20d, Hi: 0x20d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x20f, Hi: 0x20f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x211, Hi: 0x211, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x213, Hi: 0x213, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x215, Hi: 0x215, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x217, Hi: 0x217, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x219, Hi: 0x219, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x21b, Hi: 0x21b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x21d, Hi: 0x21d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x21f, Hi: 0x21f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x221, Hi: 0x221, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x223, Hi: 0x223, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x225, Hi: 0x225, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x227, Hi: 0x227, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x229, Hi: 0x229, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x22b, Hi: 0x22b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x22d, Hi: 0x22d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x22f, Hi: 0x22f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x231, Hi: 0x231, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x233, Hi: 0x239, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x23c, Hi: 0x23c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x23f, Hi: 0x240, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x242, Hi: 0x242, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x247, Hi: 0x247, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x249, Hi: 0x249, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x24b, Hi: 0x24b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x24d, Hi: 0x24d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x24f, Hi: 0x293, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x295, Hi: 0x2af, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2b0, Hi: 0x2b8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2c0, Hi: 0x2c1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2e0, Hi: 0x2e4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x371, Hi: 0x371, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x373, Hi: 0x373, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x377, Hi: 0x377, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x37a, Hi: 0x37a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x37b, Hi: 0x37d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x390, Hi: 0x390, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3ac, Hi: 0x3ce, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3d0, Hi: 0x3d1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3d5, Hi: 0x3d7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3d9, Hi: 0x3d9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3db, Hi: 0x3db, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3dd, Hi: 0x3dd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3df, Hi: 0x3df, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3e1, Hi: 0x3e1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3e3, Hi: 0x3e3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3e5, Hi: 0x3e5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3e7, Hi: 0x3e7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3e9, Hi: 0x3e9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3eb, Hi: 0x3eb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3ed, Hi: 0x3ed, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3ef, Hi: 0x3f3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3f5, Hi: 0x3f5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3f8, Hi: 0x3f8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3fb, Hi: 0x3fc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x430, Hi: 0x45f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x461, Hi: 0x461, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x463, Hi: 0x463, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x465, Hi: 0x465, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x467, Hi: 0x467, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x469, Hi: 0x469, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x46b, Hi: 0x46b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x46d, Hi: 0x46d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x46f, Hi: 0x46f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x471, Hi: 0x471, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x473, Hi: 0x473, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x475, Hi: 0x475, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x477, Hi: 0x477, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x479, Hi: 0x479, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x47b, Hi: 0x47b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x47d, Hi: 0x47d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x47f, Hi: 0x47f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x481, Hi: 0x481, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x48b, Hi: 0x48b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x48d, Hi: 0x48d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x48f, Hi: 0x48f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x491, Hi: 0x491, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x493, Hi: 0x493, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x495, Hi: 0x495, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x497, Hi: 0x497, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x499, Hi: 0x499, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x49b, Hi: 0x49b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x49d, Hi: 0x49d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x49f, Hi: 0x49f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4a1, Hi: 0x4a1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4a3, Hi: 0x4a3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4a5, Hi: 0x4a5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4a7, Hi: 0x4a7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4a9, Hi: 0x4a9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4ab, Hi: 0x4ab, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4ad, Hi: 0x4ad, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4af, Hi: 0x4af, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4b1, Hi: 0x4b1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4b3, Hi: 0x4b3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4b5, Hi: 0x4b5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4b7, Hi: 0x4b7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4b9, Hi: 0x4b9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4bb, Hi: 0x4bb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4bd, Hi: 0x4bd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4bf, Hi: 0x4bf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4c2, Hi: 0x4c2, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4c4, Hi: 0x4c4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4c6, Hi: 0x4c6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4c8, Hi: 0x4c8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4ca, Hi: 0x4ca, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4cc, Hi: 0x4cc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4ce, Hi: 0x4cf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4d1, Hi: 0x4d1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4d3, Hi: 0x4d3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4d5, Hi: 0x4d5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4d7, Hi: 0x4d7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4d9, Hi: 0x4d9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4db, Hi: 0x4db, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4dd, Hi: 0x4dd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4df, Hi: 0x4df, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4e1, Hi: 0x4e1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4e3, Hi: 0x4e3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4e5, Hi: 0x4e5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4e7, Hi: 0x4e7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4e9, Hi: 0x4e9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4eb, Hi: 0x4eb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4ed, Hi: 0x4ed, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4ef, Hi: 0x4ef, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4f1, Hi: 0x4f1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4f3, Hi: 0x4f3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4f5, Hi: 0x4f5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4f7, Hi: 0x4f7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4f9, Hi: 0x4f9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4fb, Hi: 0x4fb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4fd, Hi: 0x4fd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4ff, Hi: 0x4ff, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x501, Hi: 0x501, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x503, Hi: 0x503, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x505, Hi: 0x505, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x507, Hi: 0x507, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x509, Hi: 0x509, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x50b, Hi: 0x50b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x50d, Hi: 0x50d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x50f, Hi: 0x50f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x511, Hi: 0x511, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x513, Hi: 0x513, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x515, Hi: 0x515, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x517, Hi: 0x517, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x519, Hi: 0x519, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x51b, Hi: 0x51b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x51d, Hi: 0x51d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x51f, Hi: 0x51f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x521, Hi: 0x521, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x523, Hi: 0x523, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x525, Hi: 0x525, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x527, Hi: 0x527, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x529, Hi: 0x529, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x52b, Hi: 0x52b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x52d, Hi: 0x52d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x52f, Hi: 0x52f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x561, Hi: 0x587, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x13f8, Hi: 0x13fd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1c80, Hi: 0x1c88, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1d00, Hi: 0x1d2b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1d2c, Hi: 0x1d6a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1d6b, Hi: 0x1d77, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1d78, Hi: 0x1d78, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1d79, Hi: 0x1d9a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1d9b, Hi: 0x1dbf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e01, Hi: 0x1e01, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e03, Hi: 0x1e03, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e05, Hi: 0x1e05, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e07, Hi: 0x1e07, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e09, Hi: 0x1e09, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e0b, Hi: 0x1e0b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e0d, Hi: 0x1e0d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e0f, Hi: 0x1e0f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e11, Hi: 0x1e11, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e13, Hi: 0x1e13, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e15, Hi: 0x1e15, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e17, Hi: 0x1e17, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e19, Hi: 0x1e19, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e1b, Hi: 0x1e1b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e1d, Hi: 0x1e1d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e1f, Hi: 0x1e1f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e21, Hi: 0x1e21, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e23, Hi: 0x1e23, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e25, Hi: 0x1e25, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e27, Hi: 0x1e27, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e29, Hi: 0x1e29, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e2b, Hi: 0x1e2b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e2d, Hi: 0x1e2d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e2f, Hi: 0x1e2f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e31, Hi: 0x1e31, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e33, Hi: 0x1e33, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e35, Hi: 0x1e35, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e37, Hi: 0x1e37, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e39, Hi: 0x1e39, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e3b, Hi: 0x1e3b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e3d, Hi: 0x1e3d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e3f, Hi: 0x1e3f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e41, Hi: 0x1e41, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e43, Hi: 0x1e43, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e45, Hi: 0x1e45, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e47, Hi: 0x1e47, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e49, Hi: 0x1e49, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e4b, Hi: 0x1e4b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e4d, Hi: 0x1e4d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e4f, Hi: 0x1e4f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e51, Hi: 0x1e51, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e53, Hi: 0x1e53, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e55, Hi: 0x1e55, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e57, Hi: 0x1e57, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e59, Hi: 0x1e59, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e5b, Hi: 0x1e5b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e5d, Hi: 0x1e5d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e5f, Hi: 0x1e5f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e61, Hi: 0x1e61, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e63, Hi: 0x1e63, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e65, Hi: 0x1e65, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e67, Hi: 0x1e67, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e69, Hi: 0x1e69, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e6b, Hi: 0x1e6b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e6d, Hi: 0x1e6d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e6f, Hi: 0x1e6f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e71, Hi: 0x1e71, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e73, Hi: 0x1e73, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e75, Hi: 0x1e75, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e77, Hi: 0x1e77, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e79, Hi: 0x1e79, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e7b, Hi: 0x1e7b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e7d, Hi: 0x1e7d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e7f, Hi: 0x1e7f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e81, Hi: 0x1e81, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e83, Hi: 0x1e83, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e85, Hi: 0x1e85, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e87, Hi: 0x1e87, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e89, Hi: 0x1e89, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e8b, Hi: 0x1e8b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e8d, Hi: 0x1e8d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e8f, Hi: 0x1e8f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e91, Hi: 0x1e91, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e93, Hi: 0x1e93, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e95, Hi: 0x1e9d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e9f, Hi: 0x1e9f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ea1, Hi: 0x1ea1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ea3, Hi: 0x1ea3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ea5, Hi: 0x1ea5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ea7, Hi: 0x1ea7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ea9, Hi: 0x1ea9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1eab, Hi: 0x1eab, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ead, Hi: 0x1ead, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1eaf, Hi: 0x1eaf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1eb1, Hi: 0x1eb1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1eb3, Hi: 0x1eb3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1eb5, Hi: 0x1eb5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1eb7, Hi: 0x1eb7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1eb9, Hi: 0x1eb9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ebb, Hi: 0x1ebb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ebd, Hi: 0x1ebd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ebf, Hi: 0x1ebf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ec1, Hi: 0x1ec1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ec3, Hi: 0x1ec3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ec5, Hi: 0x1ec5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ec7, Hi: 0x1ec7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ec9, Hi: 0x1ec9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ecb, Hi: 0x1ecb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ecd, Hi: 0x1ecd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ecf, Hi: 0x1ecf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ed1, Hi: 0x1ed1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ed3, Hi: 0x1ed3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ed5, Hi: 0x1ed5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ed7, Hi: 0x1ed7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ed9, Hi: 0x1ed9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1edb, Hi: 0x1edb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1edd, Hi: 0x1edd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1edf, Hi: 0x1edf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ee1, Hi: 0x1ee1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ee3, Hi: 0x1ee3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ee5, Hi: 0x1ee5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ee7, Hi: 0x1ee7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ee9, Hi: 0x1ee9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1eeb, Hi: 0x1eeb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1eed, Hi: 0x1eed, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1eef, Hi: 0x1eef, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ef1, Hi: 0x1ef1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ef3, Hi: 0x1ef3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ef5, Hi: 0x1ef5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ef7, Hi: 0x1ef7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ef9, Hi: 0x1ef9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1efb, Hi: 0x1efb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1efd, Hi: 0x1efd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1eff, Hi: 0x1f07, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1f10, Hi: 0x1f15, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1f20, Hi: 0x1f27, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1f30, Hi: 0x1f37, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1f40, Hi: 0x1f45, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1f50, Hi: 0x1f57, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1f60, Hi: 0x1f67, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1f70, Hi: 0x1f7d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1f80, Hi: 0x1f87, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1f90, Hi: 0x1f97, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1fa0, Hi: 0x1fa7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1fb0, Hi: 0x1fb4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1fb6, Hi: 0x1fb7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1fbe, Hi: 0x1fbe, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1fc2, Hi: 0x1fc4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1fc6, Hi: 0x1fc7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1fd0, Hi: 0x1fd3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1fd6, Hi: 0x1fd7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1fe0, Hi: 0x1fe7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ff2, Hi: 0x1ff4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ff6, Hi: 0x1ff7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2071, Hi: 0x2071, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x207f, Hi: 0x207f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2090, Hi: 0x209c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x210a, Hi: 0x210a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x210e, Hi: 0x210f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2113, Hi: 0x2113, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x212f, Hi: 0x212f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2134, Hi: 0x2134, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2139, Hi: 0x2139, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x213c, Hi: 0x213d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2146, Hi: 0x2149, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x214e, Hi: 0x214e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2170, Hi: 0x217f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2184, Hi: 0x2184, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x24d0, Hi: 0x24e9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2c30, Hi: 0x2c5e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2c61, Hi: 0x2c61, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2c65, Hi: 0x2c66, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2c68, Hi: 0x2c68, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2c6a, Hi: 0x2c6a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2c6c, Hi: 0x2c6c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2c71, Hi: 0x2c71, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2c73, Hi: 0x2c74, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2c76, Hi: 0x2c7b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2c7c, Hi: 0x2c7d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2c81, Hi: 0x2c81, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2c83, Hi: 0x2c83, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2c85, Hi: 0x2c85, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2c87, Hi: 0x2c87, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2c89, Hi: 0x2c89, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2c8b, Hi: 0x2c8b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2c8d, Hi: 0x2c8d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2c8f, Hi: 0x2c8f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2c91, Hi: 0x2c91, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2c93, Hi: 0x2c93, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2c95, Hi: 0x2c95, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2c97, Hi: 0x2c97, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2c99, Hi: 0x2c99, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2c9b, Hi: 0x2c9b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2c9d, Hi: 0x2c9d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2c9f, Hi: 0x2c9f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2ca1, Hi: 0x2ca1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2ca3, Hi: 0x2ca3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2ca5, Hi: 0x2ca5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2ca7, Hi: 0x2ca7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2ca9, Hi: 0x2ca9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2cab, Hi: 0x2cab, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2cad, Hi: 0x2cad, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2caf, Hi: 0x2caf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2cb1, Hi: 0x2cb1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2cb3, Hi: 0x2cb3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2cb5, Hi: 0x2cb5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2cb7, Hi: 0x2cb7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2cb9, Hi: 0x2cb9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2cbb, Hi: 0x2cbb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2cbd, Hi: 0x2cbd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2cbf, Hi: 0x2cbf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2cc1, Hi: 0x2cc1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2cc3, Hi: 0x2cc3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2cc5, Hi: 0x2cc5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2cc7, Hi: 0x2cc7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2cc9, Hi: 0x2cc9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2ccb, Hi: 0x2ccb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2ccd, Hi: 0x2ccd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2ccf, Hi: 0x2ccf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2cd1, Hi: 0x2cd1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2cd3, Hi: 0x2cd3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2cd5, Hi: 0x2cd5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2cd7, Hi: 0x2cd7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2cd9, Hi: 0x2cd9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2cdb, Hi: 0x2cdb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2cdd, Hi: 0x2cdd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2cdf, Hi: 0x2cdf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2ce1, Hi: 0x2ce1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2ce3, Hi: 0x2ce4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2cec, Hi: 0x2cec, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2cee, Hi: 0x2cee, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2cf3, Hi: 0x2cf3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2d00, Hi: 0x2d25, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2d27, Hi: 0x2d27, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2d2d, Hi: 0x2d2d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa641, Hi: 0xa641, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa643, Hi: 0xa643, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa645, Hi: 0xa645, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa647, Hi: 0xa647, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa649, Hi: 0xa649, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa64b, Hi: 0xa64b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa64d, Hi: 0xa64d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa64f, Hi: 0xa64f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa651, Hi: 0xa651, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa653, Hi: 0xa653, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa655, Hi: 0xa655, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa657, Hi: 0xa657, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa659, Hi: 0xa659, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa65b, Hi: 0xa65b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa65d, Hi: 0xa65d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa65f, Hi: 0xa65f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa661, Hi: 0xa661, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa663, Hi: 0xa663, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa665, Hi: 0xa665, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa667, Hi: 0xa667, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa669, Hi: 0xa669, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa66b, Hi: 0xa66b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa66d, Hi: 0xa66d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa681, Hi: 0xa681, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa683, Hi: 0xa683, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa685, Hi: 0xa685, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa687, Hi: 0xa687, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa689, Hi: 0xa689, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa68b, Hi: 0xa68b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa68d, Hi: 0xa68d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa68f, Hi: 0xa68f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa691, Hi: 0xa691, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa693, Hi: 0xa693, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa695, Hi: 0xa695, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa697, Hi: 0xa697, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa699, Hi: 0xa699, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa69b, Hi: 0xa69b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa69c, Hi: 0xa69d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa723, Hi: 0xa723, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa725, Hi: 0xa725, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa727, Hi: 0xa727, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa729, Hi: 0xa729, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa72b, Hi: 0xa72b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa72d, Hi: 0xa72d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa72f, Hi: 0xa731, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa733, Hi: 0xa733, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa735, Hi: 0xa735, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa737, Hi: 0xa737, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa739, Hi: 0xa739, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa73b, Hi: 0xa73b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa73d, Hi: 0xa73d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa73f, Hi: 0xa73f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa741, Hi: 0xa741, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa743, Hi: 0xa743, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa745, Hi: 0xa745, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa747, Hi: 0xa747, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa749, Hi: 0xa749, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa74b, Hi: 0xa74b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa74d, Hi: 0xa74d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa74f, Hi: 0xa74f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa751, Hi: 0xa751, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa753, Hi: 0xa753, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa755, Hi: 0xa755, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa757, Hi: 0xa757, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa759, Hi: 0xa759, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa75b, Hi: 0xa75b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa75d, Hi: 0xa75d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa75f, Hi: 0xa75f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa761, Hi: 0xa761, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa763, Hi: 0xa763, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa765, Hi: 0xa765, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa767, Hi: 0xa767, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa769, Hi: 0xa769, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa76b, Hi: 0xa76b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa76d, Hi: 0xa76d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa76f, Hi: 0xa76f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa770, Hi: 0xa770, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa771, Hi: 0xa778, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa77a, Hi: 0xa77a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa77c, Hi: 0xa77c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa77f, Hi: 0xa77f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa781, Hi: 0xa781, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa783, Hi: 0xa783, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa785, Hi: 0xa785, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa787, Hi: 0xa787, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa78c, Hi: 0xa78c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa78e, Hi: 0xa78e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa791, Hi: 0xa791, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa793, Hi: 0xa795, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa797, Hi: 0xa797, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa799, Hi: 0xa799, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa79b, Hi: 0xa79b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa79d, Hi: 0xa79d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa79f, Hi: 0xa79f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa7a1, Hi: 0xa7a1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa7a3, Hi: 0xa7a3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa7a5, Hi: 0xa7a5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa7a7, Hi: 0xa7a7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa7a9, Hi: 0xa7a9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa7b5, Hi: 0xa7b5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa7b7, Hi: 0xa7b7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa7f8, Hi: 0xa7f9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa7fa, Hi: 0xa7fa, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xab30, Hi: 0xab5a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xab5c, Hi: 0xab5f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xab60, Hi: 0xab65, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xab70, Hi: 0xabbf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfb00, Hi: 0xfb06, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfb13, Hi: 0xfb17, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xff41, Hi: 0xff5a, Stride: 0x1},\n\t},\n\tR32: []unicode.Range32{\n\t\tunicode.Range32{Lo: 0x10428, Hi: 0x1044f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x104d8, Hi: 0x104fb, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10cc0, Hi: 0x10cf2, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x118c0, Hi: 0x118df, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d41a, Hi: 0x1d433, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d44e, Hi: 0x1d454, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d456, Hi: 0x1d467, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d482, Hi: 0x1d49b, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d4b6, Hi: 0x1d4b9, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d4bb, Hi: 0x1d4bb, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d4bd, Hi: 0x1d4c3, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d4c5, Hi: 0x1d4cf, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d4ea, Hi: 0x1d503, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d51e, Hi: 0x1d537, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d552, Hi: 0x1d56b, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d586, Hi: 0x1d59f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d5ba, Hi: 0x1d5d3, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d5ee, Hi: 0x1d607, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d622, Hi: 0x1d63b, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d656, Hi: 0x1d66f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d68a, Hi: 0x1d6a5, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d6c2, Hi: 0x1d6da, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d6dc, Hi: 0x1d6e1, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d6fc, Hi: 0x1d714, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d716, Hi: 0x1d71b, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d736, Hi: 0x1d74e, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d750, Hi: 0x1d755, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d770, Hi: 0x1d788, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d78a, Hi: 0x1d78f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d7aa, Hi: 0x1d7c2, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d7c4, Hi: 0x1d7c9, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d7cb, Hi: 0x1d7cb, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1e922, Hi: 0x1e943, Stride: 0x1},\n\t},\n\tLatinOffset: 6,\n}\n\nvar _SentenceNumeric = &unicode.RangeTable{\n\tR16: []unicode.Range16{\n\t\tunicode.Range16{Lo: 0x30, Hi: 0x39, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x660, Hi: 0x669, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x66b, Hi: 0x66c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x6f0, Hi: 0x6f9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x7c0, Hi: 0x7c9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x966, Hi: 0x96f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x9e6, Hi: 0x9ef, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa66, Hi: 0xa6f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xae6, Hi: 0xaef, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb66, Hi: 0xb6f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbe6, Hi: 0xbef, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc66, Hi: 0xc6f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xce6, Hi: 0xcef, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd66, Hi: 0xd6f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xde6, Hi: 0xdef, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xe50, Hi: 0xe59, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xed0, Hi: 0xed9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xf20, Hi: 0xf29, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1040, Hi: 0x1049, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1090, Hi: 0x1099, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x17e0, Hi: 0x17e9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1810, Hi: 0x1819, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1946, Hi: 0x194f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x19d0, Hi: 0x19d9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1a80, Hi: 0x1a89, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1a90, Hi: 0x1a99, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1b50, Hi: 0x1b59, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1bb0, Hi: 0x1bb9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1c40, Hi: 0x1c49, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1c50, Hi: 0x1c59, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa620, Hi: 0xa629, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa8d0, Hi: 0xa8d9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa900, Hi: 0xa909, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa9d0, Hi: 0xa9d9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa9f0, Hi: 0xa9f9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaa50, Hi: 0xaa59, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xabf0, Hi: 0xabf9, Stride: 0x1},\n\t},\n\tR32: []unicode.Range32{\n\t\tunicode.Range32{Lo: 0x104a0, Hi: 0x104a9, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11066, Hi: 0x1106f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x110f0, Hi: 0x110f9, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11136, Hi: 0x1113f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x111d0, Hi: 0x111d9, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x112f0, Hi: 0x112f9, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11450, Hi: 0x11459, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x114d0, Hi: 0x114d9, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11650, Hi: 0x11659, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x116c0, Hi: 0x116c9, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11730, Hi: 0x11739, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x118e0, Hi: 0x118e9, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11c50, Hi: 0x11c59, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x16a60, Hi: 0x16a69, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x16b50, Hi: 0x16b59, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d7ce, Hi: 0x1d7ff, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1e950, Hi: 0x1e959, Stride: 0x1},\n\t},\n\tLatinOffset: 1,\n}\n\nvar _SentenceOLetter = &unicode.RangeTable{\n\tR16: []unicode.Range16{\n\t\tunicode.Range16{Lo: 0x1bb, Hi: 0x1bb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1c0, Hi: 0x1c3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x294, Hi: 0x294, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2b9, Hi: 0x2bf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2c6, Hi: 0x2d1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2ec, Hi: 0x2ec, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2ee, Hi: 0x2ee, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x374, Hi: 0x374, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x559, Hi: 0x559, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x5d0, Hi: 0x5ea, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x5f0, Hi: 0x5f2, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x5f3, Hi: 0x5f3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x620, Hi: 0x63f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x640, Hi: 0x640, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x641, Hi: 0x64a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x66e, Hi: 0x66f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x671, Hi: 0x6d3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x6d5, Hi: 0x6d5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x6e5, Hi: 0x6e6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x6ee, Hi: 0x6ef, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x6fa, Hi: 0x6fc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x6ff, Hi: 0x6ff, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x710, Hi: 0x710, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x712, Hi: 0x72f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x74d, Hi: 0x7a5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x7b1, Hi: 0x7b1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x7ca, Hi: 0x7ea, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x7f4, Hi: 0x7f5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x7fa, Hi: 0x7fa, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x800, Hi: 0x815, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x81a, Hi: 0x81a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x824, Hi: 0x824, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x828, Hi: 0x828, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x840, Hi: 0x858, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x8a0, Hi: 0x8b4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x8b6, Hi: 0x8bd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x904, Hi: 0x939, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x93d, Hi: 0x93d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x950, Hi: 0x950, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x958, Hi: 0x961, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x971, Hi: 0x971, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x972, Hi: 0x980, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x985, Hi: 0x98c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x98f, Hi: 0x990, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x993, Hi: 0x9a8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x9aa, Hi: 0x9b0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x9b2, Hi: 0x9b2, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x9b6, Hi: 0x9b9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x9bd, Hi: 0x9bd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x9ce, Hi: 0x9ce, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x9dc, Hi: 0x9dd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x9df, Hi: 0x9e1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x9f0, Hi: 0x9f1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa05, Hi: 0xa0a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa0f, Hi: 0xa10, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa13, Hi: 0xa28, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa2a, Hi: 0xa30, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa32, Hi: 0xa33, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa35, Hi: 0xa36, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa38, Hi: 0xa39, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa59, Hi: 0xa5c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa5e, Hi: 0xa5e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa72, Hi: 0xa74, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa85, Hi: 0xa8d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa8f, Hi: 0xa91, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa93, Hi: 0xaa8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaaa, Hi: 0xab0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xab2, Hi: 0xab3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xab5, Hi: 0xab9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xabd, Hi: 0xabd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xad0, Hi: 0xad0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xae0, Hi: 0xae1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaf9, Hi: 0xaf9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb05, Hi: 0xb0c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb0f, Hi: 0xb10, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb13, Hi: 0xb28, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb2a, Hi: 0xb30, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb32, Hi: 0xb33, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb35, Hi: 0xb39, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb3d, Hi: 0xb3d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb5c, Hi: 0xb5d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb5f, Hi: 0xb61, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb71, Hi: 0xb71, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb83, Hi: 0xb83, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb85, Hi: 0xb8a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb8e, Hi: 0xb90, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb92, Hi: 0xb95, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb99, Hi: 0xb9a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb9c, Hi: 0xb9c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb9e, Hi: 0xb9f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xba3, Hi: 0xba4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xba8, Hi: 0xbaa, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbae, Hi: 0xbb9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xbd0, Hi: 0xbd0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc05, Hi: 0xc0c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc0e, Hi: 0xc10, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc12, Hi: 0xc28, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc2a, Hi: 0xc39, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc3d, Hi: 0xc3d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc58, Hi: 0xc5a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc60, Hi: 0xc61, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc80, Hi: 0xc80, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc85, Hi: 0xc8c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc8e, Hi: 0xc90, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc92, Hi: 0xca8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcaa, Hi: 0xcb3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcb5, Hi: 0xcb9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcbd, Hi: 0xcbd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcde, Hi: 0xcde, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xce0, Hi: 0xce1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xcf1, Hi: 0xcf2, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd05, Hi: 0xd0c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd0e, Hi: 0xd10, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd12, Hi: 0xd3a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd3d, Hi: 0xd3d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd4e, Hi: 0xd4e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd54, Hi: 0xd56, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd5f, Hi: 0xd61, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd7a, Hi: 0xd7f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd85, Hi: 0xd96, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd9a, Hi: 0xdb1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xdb3, Hi: 0xdbb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xdbd, Hi: 0xdbd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xdc0, Hi: 0xdc6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xe01, Hi: 0xe30, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xe32, Hi: 0xe33, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xe40, Hi: 0xe45, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xe46, Hi: 0xe46, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xe81, Hi: 0xe82, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xe84, Hi: 0xe84, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xe87, Hi: 0xe88, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xe8a, Hi: 0xe8a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xe8d, Hi: 0xe8d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xe94, Hi: 0xe97, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xe99, Hi: 0xe9f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xea1, Hi: 0xea3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xea5, Hi: 0xea5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xea7, Hi: 0xea7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xeaa, Hi: 0xeab, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xead, Hi: 0xeb0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xeb2, Hi: 0xeb3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xebd, Hi: 0xebd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xec0, Hi: 0xec4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xec6, Hi: 0xec6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xedc, Hi: 0xedf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xf00, Hi: 0xf00, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xf40, Hi: 0xf47, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xf49, Hi: 0xf6c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xf88, Hi: 0xf8c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1000, Hi: 0x102a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x103f, Hi: 0x103f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1050, Hi: 0x1055, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x105a, Hi: 0x105d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1061, Hi: 0x1061, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1065, Hi: 0x1066, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x106e, Hi: 0x1070, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1075, Hi: 0x1081, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x108e, Hi: 0x108e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x10d0, Hi: 0x10fa, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x10fc, Hi: 0x10fc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x10fd, Hi: 0x1248, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x124a, Hi: 0x124d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1250, Hi: 0x1256, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1258, Hi: 0x1258, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x125a, Hi: 0x125d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1260, Hi: 0x1288, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x128a, Hi: 0x128d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1290, Hi: 0x12b0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x12b2, Hi: 0x12b5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x12b8, Hi: 0x12be, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x12c0, Hi: 0x12c0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x12c2, Hi: 0x12c5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x12c8, Hi: 0x12d6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x12d8, Hi: 0x1310, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1312, Hi: 0x1315, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1318, Hi: 0x135a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1380, Hi: 0x138f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1401, Hi: 0x166c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x166f, Hi: 0x167f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1681, Hi: 0x169a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x16a0, Hi: 0x16ea, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x16ee, Hi: 0x16f0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x16f1, Hi: 0x16f8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1700, Hi: 0x170c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x170e, Hi: 0x1711, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1720, Hi: 0x1731, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1740, Hi: 0x1751, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1760, Hi: 0x176c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x176e, Hi: 0x1770, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1780, Hi: 0x17b3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x17d7, Hi: 0x17d7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x17dc, Hi: 0x17dc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1820, Hi: 0x1842, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1843, Hi: 0x1843, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1844, Hi: 0x1877, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1880, Hi: 0x1884, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1887, Hi: 0x18a8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x18aa, Hi: 0x18aa, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x18b0, Hi: 0x18f5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1900, Hi: 0x191e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1950, Hi: 0x196d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1970, Hi: 0x1974, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1980, Hi: 0x19ab, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x19b0, Hi: 0x19c9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1a00, Hi: 0x1a16, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1a20, Hi: 0x1a54, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1aa7, Hi: 0x1aa7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1b05, Hi: 0x1b33, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1b45, Hi: 0x1b4b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1b83, Hi: 0x1ba0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1bae, Hi: 0x1baf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1bba, Hi: 0x1be5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1c00, Hi: 0x1c23, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1c4d, Hi: 0x1c4f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1c5a, Hi: 0x1c77, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1c78, Hi: 0x1c7d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ce9, Hi: 0x1cec, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1cee, Hi: 0x1cf1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1cf5, Hi: 0x1cf6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2135, Hi: 0x2138, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2180, Hi: 0x2182, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2185, Hi: 0x2188, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2d30, Hi: 0x2d67, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2d6f, Hi: 0x2d6f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2d80, Hi: 0x2d96, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2da0, Hi: 0x2da6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2da8, Hi: 0x2dae, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2db0, Hi: 0x2db6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2db8, Hi: 0x2dbe, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2dc0, Hi: 0x2dc6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2dc8, Hi: 0x2dce, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2dd0, Hi: 0x2dd6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2dd8, Hi: 0x2dde, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2e2f, Hi: 0x2e2f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3005, Hi: 0x3005, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3006, Hi: 0x3006, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3007, Hi: 0x3007, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3021, Hi: 0x3029, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3031, Hi: 0x3035, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3038, Hi: 0x303a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x303b, Hi: 0x303b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x303c, Hi: 0x303c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3041, Hi: 0x3096, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x309d, Hi: 0x309e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x309f, Hi: 0x309f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x30a1, Hi: 0x30fa, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x30fc, Hi: 0x30fe, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x30ff, Hi: 0x30ff, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3105, Hi: 0x312d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3131, Hi: 0x318e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x31a0, Hi: 0x31ba, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x31f0, Hi: 0x31ff, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3400, Hi: 0x4db5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4e00, Hi: 0x9fd5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa000, Hi: 0xa014, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa015, Hi: 0xa015, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa016, Hi: 0xa48c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa4d0, Hi: 0xa4f7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa4f8, Hi: 0xa4fd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa500, Hi: 0xa60b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa60c, Hi: 0xa60c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa610, Hi: 0xa61f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa62a, Hi: 0xa62b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa66e, Hi: 0xa66e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa67f, Hi: 0xa67f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa6a0, Hi: 0xa6e5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa6e6, Hi: 0xa6ef, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa717, Hi: 0xa71f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa788, Hi: 0xa788, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa78f, Hi: 0xa78f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa7f7, Hi: 0xa7f7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa7fb, Hi: 0xa801, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa803, Hi: 0xa805, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa807, Hi: 0xa80a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa80c, Hi: 0xa822, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa840, Hi: 0xa873, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa882, Hi: 0xa8b3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa8f2, Hi: 0xa8f7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa8fb, Hi: 0xa8fb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa8fd, Hi: 0xa8fd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa90a, Hi: 0xa925, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa930, Hi: 0xa946, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa960, Hi: 0xa97c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa984, Hi: 0xa9b2, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa9cf, Hi: 0xa9cf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa9e0, Hi: 0xa9e4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa9e6, Hi: 0xa9e6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa9e7, Hi: 0xa9ef, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa9fa, Hi: 0xa9fe, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaa00, Hi: 0xaa28, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaa40, Hi: 0xaa42, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaa44, Hi: 0xaa4b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaa60, Hi: 0xaa6f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaa70, Hi: 0xaa70, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaa71, Hi: 0xaa76, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaa7a, Hi: 0xaa7a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaa7e, Hi: 0xaaaf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaab1, Hi: 0xaab1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaab5, Hi: 0xaab6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaab9, Hi: 0xaabd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaac0, Hi: 0xaac0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaac2, Hi: 0xaac2, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaadb, Hi: 0xaadc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaadd, Hi: 0xaadd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaae0, Hi: 0xaaea, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaaf2, Hi: 0xaaf2, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaaf3, Hi: 0xaaf4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xab01, Hi: 0xab06, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xab09, Hi: 0xab0e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xab11, Hi: 0xab16, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xab20, Hi: 0xab26, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xab28, Hi: 0xab2e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xabc0, Hi: 0xabe2, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xac00, Hi: 0xd7a3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd7b0, Hi: 0xd7c6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd7cb, Hi: 0xd7fb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xf900, Hi: 0xfa6d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfa70, Hi: 0xfad9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfb1d, Hi: 0xfb1d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfb1f, Hi: 0xfb28, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfb2a, Hi: 0xfb36, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfb38, Hi: 0xfb3c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfb3e, Hi: 0xfb3e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfb40, Hi: 0xfb41, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfb43, Hi: 0xfb44, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfb46, Hi: 0xfbb1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfbd3, Hi: 0xfd3d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfd50, Hi: 0xfd8f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfd92, Hi: 0xfdc7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfdf0, Hi: 0xfdfb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfe70, Hi: 0xfe74, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfe76, Hi: 0xfefc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xff66, Hi: 0xff6f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xff70, Hi: 0xff70, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xff71, Hi: 0xff9d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xffa0, Hi: 0xffbe, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xffc2, Hi: 0xffc7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xffca, Hi: 0xffcf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xffd2, Hi: 0xffd7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xffda, Hi: 0xffdc, Stride: 0x1},\n\t},\n\tR32: []unicode.Range32{\n\t\tunicode.Range32{Lo: 0x10000, Hi: 0x1000b, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1000d, Hi: 0x10026, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10028, Hi: 0x1003a, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1003c, Hi: 0x1003d, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1003f, Hi: 0x1004d, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10050, Hi: 0x1005d, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10080, Hi: 0x100fa, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10140, Hi: 0x10174, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10280, Hi: 0x1029c, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x102a0, Hi: 0x102d0, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10300, Hi: 0x1031f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10330, Hi: 0x10340, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10341, Hi: 0x10341, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10342, Hi: 0x10349, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1034a, Hi: 0x1034a, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10350, Hi: 0x10375, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10380, Hi: 0x1039d, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x103a0, Hi: 0x103c3, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x103c8, Hi: 0x103cf, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x103d1, Hi: 0x103d5, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10450, Hi: 0x1049d, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10500, Hi: 0x10527, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10530, Hi: 0x10563, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10600, Hi: 0x10736, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10740, Hi: 0x10755, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10760, Hi: 0x10767, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10800, Hi: 0x10805, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10808, Hi: 0x10808, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1080a, Hi: 0x10835, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10837, Hi: 0x10838, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1083c, Hi: 0x1083c, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1083f, Hi: 0x10855, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10860, Hi: 0x10876, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10880, Hi: 0x1089e, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x108e0, Hi: 0x108f2, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x108f4, Hi: 0x108f5, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10900, Hi: 0x10915, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10920, Hi: 0x10939, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10980, Hi: 0x109b7, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x109be, Hi: 0x109bf, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10a00, Hi: 0x10a00, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10a10, Hi: 0x10a13, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10a15, Hi: 0x10a17, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10a19, Hi: 0x10a33, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10a60, Hi: 0x10a7c, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10a80, Hi: 0x10a9c, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10ac0, Hi: 0x10ac7, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10ac9, Hi: 0x10ae4, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10b00, Hi: 0x10b35, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10b40, Hi: 0x10b55, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10b60, Hi: 0x10b72, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10b80, Hi: 0x10b91, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10c00, Hi: 0x10c48, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11003, Hi: 0x11037, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11083, Hi: 0x110af, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x110d0, Hi: 0x110e8, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11103, Hi: 0x11126, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11150, Hi: 0x11172, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11176, Hi: 0x11176, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11183, Hi: 0x111b2, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x111c1, Hi: 0x111c4, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x111da, Hi: 0x111da, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x111dc, Hi: 0x111dc, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11200, Hi: 0x11211, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11213, Hi: 0x1122b, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11280, Hi: 0x11286, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11288, Hi: 0x11288, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1128a, Hi: 0x1128d, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1128f, Hi: 0x1129d, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1129f, Hi: 0x112a8, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x112b0, Hi: 0x112de, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11305, Hi: 0x1130c, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1130f, Hi: 0x11310, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11313, Hi: 0x11328, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1132a, Hi: 0x11330, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11332, Hi: 0x11333, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11335, Hi: 0x11339, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1133d, Hi: 0x1133d, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11350, Hi: 0x11350, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1135d, Hi: 0x11361, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11400, Hi: 0x11434, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11447, Hi: 0x1144a, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11480, Hi: 0x114af, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x114c4, Hi: 0x114c5, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x114c7, Hi: 0x114c7, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11580, Hi: 0x115ae, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x115d8, Hi: 0x115db, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11600, Hi: 0x1162f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11644, Hi: 0x11644, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11680, Hi: 0x116aa, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11700, Hi: 0x11719, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x118ff, Hi: 0x118ff, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11ac0, Hi: 0x11af8, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11c00, Hi: 0x11c08, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11c0a, Hi: 0x11c2e, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11c40, Hi: 0x11c40, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11c72, Hi: 0x11c8f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x12000, Hi: 0x12399, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x12400, Hi: 0x1246e, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x12480, Hi: 0x12543, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x13000, Hi: 0x1342e, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x14400, Hi: 0x14646, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x16800, Hi: 0x16a38, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x16a40, Hi: 0x16a5e, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x16ad0, Hi: 0x16aed, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x16b00, Hi: 0x16b2f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x16b40, Hi: 0x16b43, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x16b63, Hi: 0x16b77, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x16b7d, Hi: 0x16b8f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x16f00, Hi: 0x16f44, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x16f50, Hi: 0x16f50, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x16f93, Hi: 0x16f9f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x16fe0, Hi: 0x16fe0, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x17000, Hi: 0x187ec, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x18800, Hi: 0x18af2, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1b000, Hi: 0x1b001, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1bc00, Hi: 0x1bc6a, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1bc70, Hi: 0x1bc7c, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1bc80, Hi: 0x1bc88, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1bc90, Hi: 0x1bc99, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1e800, Hi: 0x1e8c4, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1ee00, Hi: 0x1ee03, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1ee05, Hi: 0x1ee1f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1ee21, Hi: 0x1ee22, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1ee24, Hi: 0x1ee24, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1ee27, Hi: 0x1ee27, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1ee29, Hi: 0x1ee32, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1ee34, Hi: 0x1ee37, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1ee39, Hi: 0x1ee39, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1ee3b, Hi: 0x1ee3b, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1ee42, Hi: 0x1ee42, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1ee47, Hi: 0x1ee47, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1ee49, Hi: 0x1ee49, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1ee4b, Hi: 0x1ee4b, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1ee4d, Hi: 0x1ee4f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1ee51, Hi: 0x1ee52, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1ee54, Hi: 0x1ee54, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1ee57, Hi: 0x1ee57, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1ee59, Hi: 0x1ee59, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1ee5b, Hi: 0x1ee5b, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1ee5d, Hi: 0x1ee5d, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1ee5f, Hi: 0x1ee5f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1ee61, Hi: 0x1ee62, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1ee64, Hi: 0x1ee64, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1ee67, Hi: 0x1ee6a, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1ee6c, Hi: 0x1ee72, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1ee74, Hi: 0x1ee77, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1ee79, Hi: 0x1ee7c, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1ee7e, Hi: 0x1ee7e, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1ee80, Hi: 0x1ee89, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1ee8b, Hi: 0x1ee9b, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1eea1, Hi: 0x1eea3, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1eea5, Hi: 0x1eea9, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1eeab, Hi: 0x1eebb, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x20000, Hi: 0x2a6d6, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x2a700, Hi: 0x2b734, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x2b740, Hi: 0x2b81d, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x2b820, Hi: 0x2cea1, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x2f800, Hi: 0x2fa1d, Stride: 0x1},\n\t},\n\tLatinOffset: 0,\n}\n\nvar _SentenceSContinue = &unicode.RangeTable{\n\tR16: []unicode.Range16{\n\t\tunicode.Range16{Lo: 0x2c, Hi: 0x2c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2d, Hi: 0x2d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3a, Hi: 0x3a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x55d, Hi: 0x55d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x60c, Hi: 0x60d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x7f8, Hi: 0x7f8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1802, Hi: 0x1802, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1808, Hi: 0x1808, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2013, Hi: 0x2014, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3001, Hi: 0x3001, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfe10, Hi: 0xfe11, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfe13, Hi: 0xfe13, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfe31, Hi: 0xfe32, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfe50, Hi: 0xfe51, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfe55, Hi: 0xfe55, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfe58, Hi: 0xfe58, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfe63, Hi: 0xfe63, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xff0c, Hi: 0xff0c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xff0d, Hi: 0xff0d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xff1a, Hi: 0xff1a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xff64, Hi: 0xff64, Stride: 0x1},\n\t},\n\tLatinOffset: 3,\n}\n\nvar _SentenceSTerm = &unicode.RangeTable{\n\tR16: []unicode.Range16{\n\t\tunicode.Range16{Lo: 0x21, Hi: 0x21, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3f, Hi: 0x3f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x589, Hi: 0x589, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x61f, Hi: 0x61f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x6d4, Hi: 0x6d4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x700, Hi: 0x702, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x7f9, Hi: 0x7f9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x964, Hi: 0x965, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x104a, Hi: 0x104b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1362, Hi: 0x1362, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1367, Hi: 0x1368, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x166e, Hi: 0x166e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1735, Hi: 0x1736, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1803, Hi: 0x1803, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1809, Hi: 0x1809, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1944, Hi: 0x1945, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1aa8, Hi: 0x1aab, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1b5a, Hi: 0x1b5b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1b5e, Hi: 0x1b5f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1c3b, Hi: 0x1c3c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1c7e, Hi: 0x1c7f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x203c, Hi: 0x203d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2047, Hi: 0x2049, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2e2e, Hi: 0x2e2e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2e3c, Hi: 0x2e3c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3002, Hi: 0x3002, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa4ff, Hi: 0xa4ff, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa60e, Hi: 0xa60f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa6f3, Hi: 0xa6f3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa6f7, Hi: 0xa6f7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa876, Hi: 0xa877, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa8ce, Hi: 0xa8cf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa92f, Hi: 0xa92f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa9c8, Hi: 0xa9c9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaa5d, Hi: 0xaa5f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xaaf0, Hi: 0xaaf1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xabeb, Hi: 0xabeb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xfe56, Hi: 0xfe57, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xff01, Hi: 0xff01, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xff1f, Hi: 0xff1f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xff61, Hi: 0xff61, Stride: 0x1},\n\t},\n\tR32: []unicode.Range32{\n\t\tunicode.Range32{Lo: 0x10a56, Hi: 0x10a57, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11047, Hi: 0x11048, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x110be, Hi: 0x110c1, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11141, Hi: 0x11143, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x111c5, Hi: 0x111c6, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x111cd, Hi: 0x111cd, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x111de, Hi: 0x111df, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11238, Hi: 0x11239, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1123b, Hi: 0x1123c, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x112a9, Hi: 0x112a9, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1144b, Hi: 0x1144c, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x115c2, Hi: 0x115c3, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x115c9, Hi: 0x115d7, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11641, Hi: 0x11642, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1173c, Hi: 0x1173e, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x11c41, Hi: 0x11c42, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x16a6e, Hi: 0x16a6f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x16af5, Hi: 0x16af5, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x16b37, Hi: 0x16b38, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x16b44, Hi: 0x16b44, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1bc9f, Hi: 0x1bc9f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1da88, Hi: 0x1da88, Stride: 0x1},\n\t},\n\tLatinOffset: 2,\n}\n\nvar _SentenceSep = &unicode.RangeTable{\n\tR16: []unicode.Range16{\n\t\tunicode.Range16{Lo: 0x85, Hi: 0x85, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2028, Hi: 0x2028, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2029, Hi: 0x2029, Stride: 0x1},\n\t},\n\tLatinOffset: 1,\n}\n\nvar _SentenceSp = &unicode.RangeTable{\n\tR16: []unicode.Range16{\n\t\tunicode.Range16{Lo: 0x9, Hi: 0x9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xb, Hi: 0xc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x20, Hi: 0x20, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa0, Hi: 0xa0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1680, Hi: 0x1680, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2000, Hi: 0x200a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x202f, Hi: 0x202f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x205f, Hi: 0x205f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3000, Hi: 0x3000, Stride: 0x1},\n\t},\n\tLatinOffset: 4,\n}\n\nvar _SentenceUpper = &unicode.RangeTable{\n\tR16: []unicode.Range16{\n\t\tunicode.Range16{Lo: 0x41, Hi: 0x5a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xc0, Hi: 0xd6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xd8, Hi: 0xde, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x100, Hi: 0x100, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x102, Hi: 0x102, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x104, Hi: 0x104, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x106, Hi: 0x106, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x108, Hi: 0x108, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x10a, Hi: 0x10a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x10c, Hi: 0x10c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x10e, Hi: 0x10e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x110, Hi: 0x110, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x112, Hi: 0x112, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x114, Hi: 0x114, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x116, Hi: 0x116, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x118, Hi: 0x118, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x11a, Hi: 0x11a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x11c, Hi: 0x11c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x11e, Hi: 0x11e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x120, Hi: 0x120, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x122, Hi: 0x122, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x124, Hi: 0x124, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x126, Hi: 0x126, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x128, Hi: 0x128, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x12a, Hi: 0x12a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x12c, Hi: 0x12c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x12e, Hi: 0x12e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x130, Hi: 0x130, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x132, Hi: 0x132, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x134, Hi: 0x134, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x136, Hi: 0x136, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x139, Hi: 0x139, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x13b, Hi: 0x13b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x13d, Hi: 0x13d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x13f, Hi: 0x13f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x141, Hi: 0x141, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x143, Hi: 0x143, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x145, Hi: 0x145, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x147, Hi: 0x147, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x14a, Hi: 0x14a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x14c, Hi: 0x14c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x14e, Hi: 0x14e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x150, Hi: 0x150, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x152, Hi: 0x152, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x154, Hi: 0x154, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x156, Hi: 0x156, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x158, Hi: 0x158, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x15a, Hi: 0x15a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x15c, Hi: 0x15c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x15e, Hi: 0x15e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x160, Hi: 0x160, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x162, Hi: 0x162, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x164, Hi: 0x164, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x166, Hi: 0x166, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x168, Hi: 0x168, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x16a, Hi: 0x16a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x16c, Hi: 0x16c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x16e, Hi: 0x16e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x170, Hi: 0x170, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x172, Hi: 0x172, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x174, Hi: 0x174, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x176, Hi: 0x176, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x178, Hi: 0x179, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x17b, Hi: 0x17b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x17d, Hi: 0x17d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x181, Hi: 0x182, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x184, Hi: 0x184, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x186, Hi: 0x187, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x189, Hi: 0x18b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x18e, Hi: 0x191, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x193, Hi: 0x194, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x196, Hi: 0x198, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x19c, Hi: 0x19d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x19f, Hi: 0x1a0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1a2, Hi: 0x1a2, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1a4, Hi: 0x1a4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1a6, Hi: 0x1a7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1a9, Hi: 0x1a9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ac, Hi: 0x1ac, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ae, Hi: 0x1af, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1b1, Hi: 0x1b3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1b5, Hi: 0x1b5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1b7, Hi: 0x1b8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1bc, Hi: 0x1bc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1c4, Hi: 0x1c5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1c7, Hi: 0x1c8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ca, Hi: 0x1cb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1cd, Hi: 0x1cd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1cf, Hi: 0x1cf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1d1, Hi: 0x1d1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1d3, Hi: 0x1d3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1d5, Hi: 0x1d5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1d7, Hi: 0x1d7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1d9, Hi: 0x1d9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1db, Hi: 0x1db, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1de, Hi: 0x1de, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e0, Hi: 0x1e0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e2, Hi: 0x1e2, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e4, Hi: 0x1e4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e6, Hi: 0x1e6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e8, Hi: 0x1e8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ea, Hi: 0x1ea, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ec, Hi: 0x1ec, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ee, Hi: 0x1ee, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1f1, Hi: 0x1f2, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1f4, Hi: 0x1f4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1f6, Hi: 0x1f8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1fa, Hi: 0x1fa, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1fc, Hi: 0x1fc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1fe, Hi: 0x1fe, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x200, Hi: 0x200, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x202, Hi: 0x202, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x204, Hi: 0x204, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x206, Hi: 0x206, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x208, Hi: 0x208, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x20a, Hi: 0x20a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x20c, Hi: 0x20c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x20e, Hi: 0x20e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x210, Hi: 0x210, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x212, Hi: 0x212, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x214, Hi: 0x214, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x216, Hi: 0x216, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x218, Hi: 0x218, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x21a, Hi: 0x21a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x21c, Hi: 0x21c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x21e, Hi: 0x21e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x220, Hi: 0x220, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x222, Hi: 0x222, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x224, Hi: 0x224, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x226, Hi: 0x226, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x228, Hi: 0x228, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x22a, Hi: 0x22a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x22c, Hi: 0x22c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x22e, Hi: 0x22e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x230, Hi: 0x230, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x232, Hi: 0x232, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x23a, Hi: 0x23b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x23d, Hi: 0x23e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x241, Hi: 0x241, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x243, Hi: 0x246, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x248, Hi: 0x248, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x24a, Hi: 0x24a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x24c, Hi: 0x24c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x24e, Hi: 0x24e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x370, Hi: 0x370, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x372, Hi: 0x372, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x376, Hi: 0x376, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x37f, Hi: 0x37f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x386, Hi: 0x386, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x388, Hi: 0x38a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x38c, Hi: 0x38c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x38e, Hi: 0x38f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x391, Hi: 0x3a1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3a3, Hi: 0x3ab, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3cf, Hi: 0x3cf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3d2, Hi: 0x3d4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3d8, Hi: 0x3d8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3da, Hi: 0x3da, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3dc, Hi: 0x3dc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3de, Hi: 0x3de, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3e0, Hi: 0x3e0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3e2, Hi: 0x3e2, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3e4, Hi: 0x3e4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3e6, Hi: 0x3e6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3e8, Hi: 0x3e8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3ea, Hi: 0x3ea, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3ec, Hi: 0x3ec, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3ee, Hi: 0x3ee, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3f4, Hi: 0x3f4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3f7, Hi: 0x3f7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3f9, Hi: 0x3fa, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x3fd, Hi: 0x42f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x460, Hi: 0x460, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x462, Hi: 0x462, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x464, Hi: 0x464, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x466, Hi: 0x466, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x468, Hi: 0x468, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x46a, Hi: 0x46a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x46c, Hi: 0x46c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x46e, Hi: 0x46e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x470, Hi: 0x470, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x472, Hi: 0x472, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x474, Hi: 0x474, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x476, Hi: 0x476, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x478, Hi: 0x478, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x47a, Hi: 0x47a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x47c, Hi: 0x47c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x47e, Hi: 0x47e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x480, Hi: 0x480, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x48a, Hi: 0x48a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x48c, Hi: 0x48c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x48e, Hi: 0x48e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x490, Hi: 0x490, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x492, Hi: 0x492, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x494, Hi: 0x494, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x496, Hi: 0x496, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x498, Hi: 0x498, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x49a, Hi: 0x49a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x49c, Hi: 0x49c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x49e, Hi: 0x49e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4a0, Hi: 0x4a0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4a2, Hi: 0x4a2, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4a4, Hi: 0x4a4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4a6, Hi: 0x4a6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4a8, Hi: 0x4a8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4aa, Hi: 0x4aa, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4ac, Hi: 0x4ac, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4ae, Hi: 0x4ae, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4b0, Hi: 0x4b0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4b2, Hi: 0x4b2, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4b4, Hi: 0x4b4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4b6, Hi: 0x4b6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4b8, Hi: 0x4b8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4ba, Hi: 0x4ba, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4bc, Hi: 0x4bc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4be, Hi: 0x4be, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4c0, Hi: 0x4c1, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4c3, Hi: 0x4c3, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4c5, Hi: 0x4c5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4c7, Hi: 0x4c7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4c9, Hi: 0x4c9, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4cb, Hi: 0x4cb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4cd, Hi: 0x4cd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4d0, Hi: 0x4d0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4d2, Hi: 0x4d2, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4d4, Hi: 0x4d4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4d6, Hi: 0x4d6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4d8, Hi: 0x4d8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4da, Hi: 0x4da, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4dc, Hi: 0x4dc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4de, Hi: 0x4de, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4e0, Hi: 0x4e0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4e2, Hi: 0x4e2, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4e4, Hi: 0x4e4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4e6, Hi: 0x4e6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4e8, Hi: 0x4e8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4ea, Hi: 0x4ea, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4ec, Hi: 0x4ec, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4ee, Hi: 0x4ee, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4f0, Hi: 0x4f0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4f2, Hi: 0x4f2, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4f4, Hi: 0x4f4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4f6, Hi: 0x4f6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4f8, Hi: 0x4f8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4fa, Hi: 0x4fa, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4fc, Hi: 0x4fc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x4fe, Hi: 0x4fe, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x500, Hi: 0x500, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x502, Hi: 0x502, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x504, Hi: 0x504, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x506, Hi: 0x506, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x508, Hi: 0x508, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x50a, Hi: 0x50a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x50c, Hi: 0x50c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x50e, Hi: 0x50e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x510, Hi: 0x510, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x512, Hi: 0x512, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x514, Hi: 0x514, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x516, Hi: 0x516, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x518, Hi: 0x518, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x51a, Hi: 0x51a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x51c, Hi: 0x51c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x51e, Hi: 0x51e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x520, Hi: 0x520, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x522, Hi: 0x522, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x524, Hi: 0x524, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x526, Hi: 0x526, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x528, Hi: 0x528, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x52a, Hi: 0x52a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x52c, Hi: 0x52c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x52e, Hi: 0x52e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x531, Hi: 0x556, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x10a0, Hi: 0x10c5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x10c7, Hi: 0x10c7, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x10cd, Hi: 0x10cd, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x13a0, Hi: 0x13f5, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e00, Hi: 0x1e00, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e02, Hi: 0x1e02, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e04, Hi: 0x1e04, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e06, Hi: 0x1e06, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e08, Hi: 0x1e08, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e0a, Hi: 0x1e0a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e0c, Hi: 0x1e0c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e0e, Hi: 0x1e0e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e10, Hi: 0x1e10, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e12, Hi: 0x1e12, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e14, Hi: 0x1e14, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e16, Hi: 0x1e16, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e18, Hi: 0x1e18, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e1a, Hi: 0x1e1a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e1c, Hi: 0x1e1c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e1e, Hi: 0x1e1e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e20, Hi: 0x1e20, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e22, Hi: 0x1e22, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e24, Hi: 0x1e24, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e26, Hi: 0x1e26, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e28, Hi: 0x1e28, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e2a, Hi: 0x1e2a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e2c, Hi: 0x1e2c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e2e, Hi: 0x1e2e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e30, Hi: 0x1e30, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e32, Hi: 0x1e32, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e34, Hi: 0x1e34, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e36, Hi: 0x1e36, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e38, Hi: 0x1e38, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e3a, Hi: 0x1e3a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e3c, Hi: 0x1e3c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e3e, Hi: 0x1e3e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e40, Hi: 0x1e40, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e42, Hi: 0x1e42, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e44, Hi: 0x1e44, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e46, Hi: 0x1e46, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e48, Hi: 0x1e48, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e4a, Hi: 0x1e4a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e4c, Hi: 0x1e4c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e4e, Hi: 0x1e4e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e50, Hi: 0x1e50, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e52, Hi: 0x1e52, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e54, Hi: 0x1e54, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e56, Hi: 0x1e56, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e58, Hi: 0x1e58, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e5a, Hi: 0x1e5a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e5c, Hi: 0x1e5c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e5e, Hi: 0x1e5e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e60, Hi: 0x1e60, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e62, Hi: 0x1e62, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e64, Hi: 0x1e64, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e66, Hi: 0x1e66, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e68, Hi: 0x1e68, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e6a, Hi: 0x1e6a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e6c, Hi: 0x1e6c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e6e, Hi: 0x1e6e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e70, Hi: 0x1e70, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e72, Hi: 0x1e72, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e74, Hi: 0x1e74, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e76, Hi: 0x1e76, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e78, Hi: 0x1e78, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e7a, Hi: 0x1e7a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e7c, Hi: 0x1e7c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e7e, Hi: 0x1e7e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e80, Hi: 0x1e80, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e82, Hi: 0x1e82, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e84, Hi: 0x1e84, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e86, Hi: 0x1e86, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e88, Hi: 0x1e88, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e8a, Hi: 0x1e8a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e8c, Hi: 0x1e8c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e8e, Hi: 0x1e8e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e90, Hi: 0x1e90, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e92, Hi: 0x1e92, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e94, Hi: 0x1e94, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1e9e, Hi: 0x1e9e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ea0, Hi: 0x1ea0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ea2, Hi: 0x1ea2, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ea4, Hi: 0x1ea4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ea6, Hi: 0x1ea6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ea8, Hi: 0x1ea8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1eaa, Hi: 0x1eaa, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1eac, Hi: 0x1eac, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1eae, Hi: 0x1eae, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1eb0, Hi: 0x1eb0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1eb2, Hi: 0x1eb2, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1eb4, Hi: 0x1eb4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1eb6, Hi: 0x1eb6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1eb8, Hi: 0x1eb8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1eba, Hi: 0x1eba, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ebc, Hi: 0x1ebc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ebe, Hi: 0x1ebe, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ec0, Hi: 0x1ec0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ec2, Hi: 0x1ec2, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ec4, Hi: 0x1ec4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ec6, Hi: 0x1ec6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ec8, Hi: 0x1ec8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1eca, Hi: 0x1eca, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ecc, Hi: 0x1ecc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ece, Hi: 0x1ece, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ed0, Hi: 0x1ed0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ed2, Hi: 0x1ed2, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ed4, Hi: 0x1ed4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ed6, Hi: 0x1ed6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ed8, Hi: 0x1ed8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1eda, Hi: 0x1eda, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1edc, Hi: 0x1edc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ede, Hi: 0x1ede, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ee0, Hi: 0x1ee0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ee2, Hi: 0x1ee2, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ee4, Hi: 0x1ee4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ee6, Hi: 0x1ee6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ee8, Hi: 0x1ee8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1eea, Hi: 0x1eea, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1eec, Hi: 0x1eec, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1eee, Hi: 0x1eee, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ef0, Hi: 0x1ef0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ef2, Hi: 0x1ef2, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ef4, Hi: 0x1ef4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ef6, Hi: 0x1ef6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ef8, Hi: 0x1ef8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1efa, Hi: 0x1efa, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1efc, Hi: 0x1efc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1efe, Hi: 0x1efe, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1f08, Hi: 0x1f0f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1f18, Hi: 0x1f1d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1f28, Hi: 0x1f2f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1f38, Hi: 0x1f3f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1f48, Hi: 0x1f4d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1f59, Hi: 0x1f59, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1f5b, Hi: 0x1f5b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1f5d, Hi: 0x1f5d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1f5f, Hi: 0x1f5f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1f68, Hi: 0x1f6f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1f88, Hi: 0x1f8f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1f98, Hi: 0x1f9f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1fa8, Hi: 0x1faf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1fb8, Hi: 0x1fbc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1fc8, Hi: 0x1fcc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1fd8, Hi: 0x1fdb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1fe8, Hi: 0x1fec, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x1ff8, Hi: 0x1ffc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2102, Hi: 0x2102, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2107, Hi: 0x2107, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x210b, Hi: 0x210d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2110, Hi: 0x2112, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2115, Hi: 0x2115, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2119, Hi: 0x211d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2124, Hi: 0x2124, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2126, Hi: 0x2126, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2128, Hi: 0x2128, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x212a, Hi: 0x212d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2130, Hi: 0x2133, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x213e, Hi: 0x213f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2145, Hi: 0x2145, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2160, Hi: 0x216f, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2183, Hi: 0x2183, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x24b6, Hi: 0x24cf, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2c00, Hi: 0x2c2e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2c60, Hi: 0x2c60, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2c62, Hi: 0x2c64, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2c67, Hi: 0x2c67, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2c69, Hi: 0x2c69, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2c6b, Hi: 0x2c6b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2c6d, Hi: 0x2c70, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2c72, Hi: 0x2c72, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2c75, Hi: 0x2c75, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2c7e, Hi: 0x2c80, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2c82, Hi: 0x2c82, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2c84, Hi: 0x2c84, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2c86, Hi: 0x2c86, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2c88, Hi: 0x2c88, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2c8a, Hi: 0x2c8a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2c8c, Hi: 0x2c8c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2c8e, Hi: 0x2c8e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2c90, Hi: 0x2c90, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2c92, Hi: 0x2c92, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2c94, Hi: 0x2c94, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2c96, Hi: 0x2c96, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2c98, Hi: 0x2c98, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2c9a, Hi: 0x2c9a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2c9c, Hi: 0x2c9c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2c9e, Hi: 0x2c9e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2ca0, Hi: 0x2ca0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2ca2, Hi: 0x2ca2, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2ca4, Hi: 0x2ca4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2ca6, Hi: 0x2ca6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2ca8, Hi: 0x2ca8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2caa, Hi: 0x2caa, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2cac, Hi: 0x2cac, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2cae, Hi: 0x2cae, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2cb0, Hi: 0x2cb0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2cb2, Hi: 0x2cb2, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2cb4, Hi: 0x2cb4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2cb6, Hi: 0x2cb6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2cb8, Hi: 0x2cb8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2cba, Hi: 0x2cba, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2cbc, Hi: 0x2cbc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2cbe, Hi: 0x2cbe, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2cc0, Hi: 0x2cc0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2cc2, Hi: 0x2cc2, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2cc4, Hi: 0x2cc4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2cc6, Hi: 0x2cc6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2cc8, Hi: 0x2cc8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2cca, Hi: 0x2cca, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2ccc, Hi: 0x2ccc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2cce, Hi: 0x2cce, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2cd0, Hi: 0x2cd0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2cd2, Hi: 0x2cd2, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2cd4, Hi: 0x2cd4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2cd6, Hi: 0x2cd6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2cd8, Hi: 0x2cd8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2cda, Hi: 0x2cda, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2cdc, Hi: 0x2cdc, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2cde, Hi: 0x2cde, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2ce0, Hi: 0x2ce0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2ce2, Hi: 0x2ce2, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2ceb, Hi: 0x2ceb, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2ced, Hi: 0x2ced, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0x2cf2, Hi: 0x2cf2, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa640, Hi: 0xa640, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa642, Hi: 0xa642, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa644, Hi: 0xa644, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa646, Hi: 0xa646, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa648, Hi: 0xa648, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa64a, Hi: 0xa64a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa64c, Hi: 0xa64c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa64e, Hi: 0xa64e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa650, Hi: 0xa650, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa652, Hi: 0xa652, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa654, Hi: 0xa654, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa656, Hi: 0xa656, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa658, Hi: 0xa658, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa65a, Hi: 0xa65a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa65c, Hi: 0xa65c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa65e, Hi: 0xa65e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa660, Hi: 0xa660, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa662, Hi: 0xa662, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa664, Hi: 0xa664, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa666, Hi: 0xa666, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa668, Hi: 0xa668, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa66a, Hi: 0xa66a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa66c, Hi: 0xa66c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa680, Hi: 0xa680, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa682, Hi: 0xa682, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa684, Hi: 0xa684, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa686, Hi: 0xa686, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa688, Hi: 0xa688, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa68a, Hi: 0xa68a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa68c, Hi: 0xa68c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa68e, Hi: 0xa68e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa690, Hi: 0xa690, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa692, Hi: 0xa692, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa694, Hi: 0xa694, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa696, Hi: 0xa696, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa698, Hi: 0xa698, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa69a, Hi: 0xa69a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa722, Hi: 0xa722, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa724, Hi: 0xa724, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa726, Hi: 0xa726, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa728, Hi: 0xa728, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa72a, Hi: 0xa72a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa72c, Hi: 0xa72c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa72e, Hi: 0xa72e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa732, Hi: 0xa732, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa734, Hi: 0xa734, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa736, Hi: 0xa736, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa738, Hi: 0xa738, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa73a, Hi: 0xa73a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa73c, Hi: 0xa73c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa73e, Hi: 0xa73e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa740, Hi: 0xa740, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa742, Hi: 0xa742, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa744, Hi: 0xa744, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa746, Hi: 0xa746, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa748, Hi: 0xa748, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa74a, Hi: 0xa74a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa74c, Hi: 0xa74c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa74e, Hi: 0xa74e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa750, Hi: 0xa750, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa752, Hi: 0xa752, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa754, Hi: 0xa754, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa756, Hi: 0xa756, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa758, Hi: 0xa758, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa75a, Hi: 0xa75a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa75c, Hi: 0xa75c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa75e, Hi: 0xa75e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa760, Hi: 0xa760, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa762, Hi: 0xa762, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa764, Hi: 0xa764, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa766, Hi: 0xa766, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa768, Hi: 0xa768, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa76a, Hi: 0xa76a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa76c, Hi: 0xa76c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa76e, Hi: 0xa76e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa779, Hi: 0xa779, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa77b, Hi: 0xa77b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa77d, Hi: 0xa77e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa780, Hi: 0xa780, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa782, Hi: 0xa782, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa784, Hi: 0xa784, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa786, Hi: 0xa786, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa78b, Hi: 0xa78b, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa78d, Hi: 0xa78d, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa790, Hi: 0xa790, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa792, Hi: 0xa792, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa796, Hi: 0xa796, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa798, Hi: 0xa798, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa79a, Hi: 0xa79a, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa79c, Hi: 0xa79c, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa79e, Hi: 0xa79e, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa7a0, Hi: 0xa7a0, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa7a2, Hi: 0xa7a2, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa7a4, Hi: 0xa7a4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa7a6, Hi: 0xa7a6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa7a8, Hi: 0xa7a8, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa7aa, Hi: 0xa7ae, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa7b0, Hi: 0xa7b4, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xa7b6, Hi: 0xa7b6, Stride: 0x1},\n\t\tunicode.Range16{Lo: 0xff21, Hi: 0xff3a, Stride: 0x1},\n\t},\n\tR32: []unicode.Range32{\n\t\tunicode.Range32{Lo: 0x10400, Hi: 0x10427, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x104b0, Hi: 0x104d3, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x10c80, Hi: 0x10cb2, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x118a0, Hi: 0x118bf, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d400, Hi: 0x1d419, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d434, Hi: 0x1d44d, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d468, Hi: 0x1d481, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d49c, Hi: 0x1d49c, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d49e, Hi: 0x1d49f, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d4a2, Hi: 0x1d4a2, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d4a5, Hi: 0x1d4a6, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d4a9, Hi: 0x1d4ac, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d4ae, Hi: 0x1d4b5, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d4d0, Hi: 0x1d4e9, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d504, Hi: 0x1d505, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d507, Hi: 0x1d50a, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d50d, Hi: 0x1d514, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d516, Hi: 0x1d51c, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d538, Hi: 0x1d539, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d53b, Hi: 0x1d53e, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d540, Hi: 0x1d544, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d546, Hi: 0x1d546, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d54a, Hi: 0x1d550, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d56c, Hi: 0x1d585, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d5a0, Hi: 0x1d5b9, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d5d4, Hi: 0x1d5ed, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d608, Hi: 0x1d621, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d63c, Hi: 0x1d655, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d670, Hi: 0x1d689, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d6a8, Hi: 0x1d6c0, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d6e2, Hi: 0x1d6fa, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d71c, Hi: 0x1d734, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d756, Hi: 0x1d76e, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d790, Hi: 0x1d7a8, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1d7ca, Hi: 0x1d7ca, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1e900, Hi: 0x1e921, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1f130, Hi: 0x1f149, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1f150, Hi: 0x1f169, Stride: 0x1},\n\t\tunicode.Range32{Lo: 0x1f170, Hi: 0x1f189, Stride: 0x1},\n\t},\n\tLatinOffset: 3,\n}\n\ntype _SentenceRuneRange unicode.RangeTable\n\nfunc _SentenceRuneType(r rune) *_SentenceRuneRange {\n\tswitch {\n\tcase unicode.Is(_SentenceATerm, r):\n\t\treturn (*_SentenceRuneRange)(_SentenceATerm)\n\tcase unicode.Is(_SentenceCR, r):\n\t\treturn (*_SentenceRuneRange)(_SentenceCR)\n\tcase unicode.Is(_SentenceClose, r):\n\t\treturn (*_SentenceRuneRange)(_SentenceClose)\n\tcase unicode.Is(_SentenceExtend, r):\n\t\treturn (*_SentenceRuneRange)(_SentenceExtend)\n\tcase unicode.Is(_SentenceFormat, r):\n\t\treturn (*_SentenceRuneRange)(_SentenceFormat)\n\tcase unicode.Is(_SentenceLF, r):\n\t\treturn (*_SentenceRuneRange)(_SentenceLF)\n\tcase unicode.Is(_SentenceLower, r):\n\t\treturn (*_SentenceRuneRange)(_SentenceLower)\n\tcase unicode.Is(_SentenceNumeric, r):\n\t\treturn (*_SentenceRuneRange)(_SentenceNumeric)\n\tcase unicode.Is(_SentenceOLetter, r):\n\t\treturn (*_SentenceRuneRange)(_SentenceOLetter)\n\tcase unicode.Is(_SentenceSContinue, r):\n\t\treturn (*_SentenceRuneRange)(_SentenceSContinue)\n\tcase unicode.Is(_SentenceSTerm, r):\n\t\treturn (*_SentenceRuneRange)(_SentenceSTerm)\n\tcase unicode.Is(_SentenceSep, r):\n\t\treturn (*_SentenceRuneRange)(_SentenceSep)\n\tcase unicode.Is(_SentenceSp, r):\n\t\treturn (*_SentenceRuneRange)(_SentenceSp)\n\tcase unicode.Is(_SentenceUpper, r):\n\t\treturn (*_SentenceRuneRange)(_SentenceUpper)\n\tdefault:\n\t\treturn nil\n\t}\n}\nfunc (rng *_SentenceRuneRange) String() string {\n\tswitch (*unicode.RangeTable)(rng) {\n\tcase _SentenceATerm:\n\t\treturn \"ATerm\"\n\tcase _SentenceCR:\n\t\treturn \"CR\"\n\tcase _SentenceClose:\n\t\treturn \"Close\"\n\tcase _SentenceExtend:\n\t\treturn \"Extend\"\n\tcase _SentenceFormat:\n\t\treturn \"Format\"\n\tcase _SentenceLF:\n\t\treturn \"LF\"\n\tcase _SentenceLower:\n\t\treturn \"Lower\"\n\tcase _SentenceNumeric:\n\t\treturn \"Numeric\"\n\tcase _SentenceOLetter:\n\t\treturn \"OLetter\"\n\tcase _SentenceSContinue:\n\t\treturn \"SContinue\"\n\tcase _SentenceSTerm:\n\t\treturn \"STerm\"\n\tcase _SentenceSep:\n\t\treturn \"Sep\"\n\tcase _SentenceSp:\n\t\treturn \"Sp\"\n\tcase _SentenceUpper:\n\t\treturn \"Upper\"\n\tdefault:\n\t\treturn \"Other\"\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/apparentlymart/go-textseg/textseg/utf8_seqs.go",
    "content": "package textseg\n\nimport \"unicode/utf8\"\n\n// ScanGraphemeClusters is a split function for bufio.Scanner that splits\n// on UTF8 sequence boundaries.\n//\n// This is included largely for completeness, since this behavior is already\n// built in to Go when ranging over a string.\nfunc ScanUTF8Sequences(data []byte, atEOF bool) (int, []byte, error) {\n\tif len(data) == 0 {\n\t\treturn 0, nil, nil\n\t}\n\tr, seqLen := utf8.DecodeRune(data)\n\tif r == utf8.RuneError && !atEOF {\n\t\treturn 0, nil, nil\n\t}\n\treturn seqLen, data[:seqLen], nil\n}\n"
  },
  {
    "path": "vendor/github.com/armon/go-radix/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2014 Armon Dadgar\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "vendor/github.com/armon/go-radix/radix.go",
    "content": "package radix\n\nimport (\n\t\"sort\"\n\t\"strings\"\n)\n\n// WalkFn is used when walking the tree. Takes a\n// key and value, returning if iteration should\n// be terminated.\ntype WalkFn func(s string, v interface{}) bool\n\n// leafNode is used to represent a value\ntype leafNode struct {\n\tkey string\n\tval interface{}\n}\n\n// edge is used to represent an edge node\ntype edge struct {\n\tlabel byte\n\tnode  *node\n}\n\ntype node struct {\n\t// leaf is used to store possible leaf\n\tleaf *leafNode\n\n\t// prefix is the common prefix we ignore\n\tprefix string\n\n\t// Edges should be stored in-order for iteration.\n\t// We avoid a fully materialized slice to save memory,\n\t// since in most cases we expect to be sparse\n\tedges edges\n}\n\nfunc (n *node) isLeaf() bool {\n\treturn n.leaf != nil\n}\n\nfunc (n *node) addEdge(e edge) {\n\tn.edges = append(n.edges, e)\n\tn.edges.Sort()\n}\n\nfunc (n *node) updateEdge(label byte, node *node) {\n\tnum := len(n.edges)\n\tidx := sort.Search(num, func(i int) bool {\n\t\treturn n.edges[i].label >= label\n\t})\n\tif idx < num && n.edges[idx].label == label {\n\t\tn.edges[idx].node = node\n\t\treturn\n\t}\n\tpanic(\"replacing missing edge\")\n}\n\nfunc (n *node) getEdge(label byte) *node {\n\tnum := len(n.edges)\n\tidx := sort.Search(num, func(i int) bool {\n\t\treturn n.edges[i].label >= label\n\t})\n\tif idx < num && n.edges[idx].label == label {\n\t\treturn n.edges[idx].node\n\t}\n\treturn nil\n}\n\nfunc (n *node) delEdge(label byte) {\n\tnum := len(n.edges)\n\tidx := sort.Search(num, func(i int) bool {\n\t\treturn n.edges[i].label >= label\n\t})\n\tif idx < num && n.edges[idx].label == label {\n\t\tcopy(n.edges[idx:], n.edges[idx+1:])\n\t\tn.edges[len(n.edges)-1] = edge{}\n\t\tn.edges = n.edges[:len(n.edges)-1]\n\t}\n}\n\ntype edges []edge\n\nfunc (e edges) Len() int {\n\treturn len(e)\n}\n\nfunc (e edges) Less(i, j int) bool {\n\treturn e[i].label < e[j].label\n}\n\nfunc (e edges) Swap(i, j int) {\n\te[i], e[j] = e[j], e[i]\n}\n\nfunc (e edges) Sort() {\n\tsort.Sort(e)\n}\n\n// Tree implements a radix tree. This can be treated as a\n// Dictionary abstract data type. The main advantage over\n// a standard hash map is prefix-based lookups and\n// ordered iteration,\ntype Tree struct {\n\troot *node\n\tsize int\n}\n\n// New returns an empty Tree\nfunc New() *Tree {\n\treturn NewFromMap(nil)\n}\n\n// NewFromMap returns a new tree containing the keys\n// from an existing map\nfunc NewFromMap(m map[string]interface{}) *Tree {\n\tt := &Tree{root: &node{}}\n\tfor k, v := range m {\n\t\tt.Insert(k, v)\n\t}\n\treturn t\n}\n\n// Len is used to return the number of elements in the tree\nfunc (t *Tree) Len() int {\n\treturn t.size\n}\n\n// longestPrefix finds the length of the shared prefix\n// of two strings\nfunc longestPrefix(k1, k2 string) int {\n\tmax := len(k1)\n\tif l := len(k2); l < max {\n\t\tmax = l\n\t}\n\tvar i int\n\tfor i = 0; i < max; i++ {\n\t\tif k1[i] != k2[i] {\n\t\t\tbreak\n\t\t}\n\t}\n\treturn i\n}\n\n// Insert is used to add a newentry or update\n// an existing entry. Returns if updated.\nfunc (t *Tree) Insert(s string, v interface{}) (interface{}, bool) {\n\tvar parent *node\n\tn := t.root\n\tsearch := s\n\tfor {\n\t\t// Handle key exhaution\n\t\tif len(search) == 0 {\n\t\t\tif n.isLeaf() {\n\t\t\t\told := n.leaf.val\n\t\t\t\tn.leaf.val = v\n\t\t\t\treturn old, true\n\t\t\t}\n\n\t\t\tn.leaf = &leafNode{\n\t\t\t\tkey: s,\n\t\t\t\tval: v,\n\t\t\t}\n\t\t\tt.size++\n\t\t\treturn nil, false\n\t\t}\n\n\t\t// Look for the edge\n\t\tparent = n\n\t\tn = n.getEdge(search[0])\n\n\t\t// No edge, create one\n\t\tif n == nil {\n\t\t\te := edge{\n\t\t\t\tlabel: search[0],\n\t\t\t\tnode: &node{\n\t\t\t\t\tleaf: &leafNode{\n\t\t\t\t\t\tkey: s,\n\t\t\t\t\t\tval: v,\n\t\t\t\t\t},\n\t\t\t\t\tprefix: search,\n\t\t\t\t},\n\t\t\t}\n\t\t\tparent.addEdge(e)\n\t\t\tt.size++\n\t\t\treturn nil, false\n\t\t}\n\n\t\t// Determine longest prefix of the search key on match\n\t\tcommonPrefix := longestPrefix(search, n.prefix)\n\t\tif commonPrefix == len(n.prefix) {\n\t\t\tsearch = search[commonPrefix:]\n\t\t\tcontinue\n\t\t}\n\n\t\t// Split the node\n\t\tt.size++\n\t\tchild := &node{\n\t\t\tprefix: search[:commonPrefix],\n\t\t}\n\t\tparent.updateEdge(search[0], child)\n\n\t\t// Restore the existing node\n\t\tchild.addEdge(edge{\n\t\t\tlabel: n.prefix[commonPrefix],\n\t\t\tnode:  n,\n\t\t})\n\t\tn.prefix = n.prefix[commonPrefix:]\n\n\t\t// Create a new leaf node\n\t\tleaf := &leafNode{\n\t\t\tkey: s,\n\t\t\tval: v,\n\t\t}\n\n\t\t// If the new key is a subset, add to to this node\n\t\tsearch = search[commonPrefix:]\n\t\tif len(search) == 0 {\n\t\t\tchild.leaf = leaf\n\t\t\treturn nil, false\n\t\t}\n\n\t\t// Create a new edge for the node\n\t\tchild.addEdge(edge{\n\t\t\tlabel: search[0],\n\t\t\tnode: &node{\n\t\t\t\tleaf:   leaf,\n\t\t\t\tprefix: search,\n\t\t\t},\n\t\t})\n\t\treturn nil, false\n\t}\n}\n\n// Delete is used to delete a key, returning the previous\n// value and if it was deleted\nfunc (t *Tree) Delete(s string) (interface{}, bool) {\n\tvar parent *node\n\tvar label byte\n\tn := t.root\n\tsearch := s\n\tfor {\n\t\t// Check for key exhaution\n\t\tif len(search) == 0 {\n\t\t\tif !n.isLeaf() {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tgoto DELETE\n\t\t}\n\n\t\t// Look for an edge\n\t\tparent = n\n\t\tlabel = search[0]\n\t\tn = n.getEdge(label)\n\t\tif n == nil {\n\t\t\tbreak\n\t\t}\n\n\t\t// Consume the search prefix\n\t\tif strings.HasPrefix(search, n.prefix) {\n\t\t\tsearch = search[len(n.prefix):]\n\t\t} else {\n\t\t\tbreak\n\t\t}\n\t}\n\treturn nil, false\n\nDELETE:\n\t// Delete the leaf\n\tleaf := n.leaf\n\tn.leaf = nil\n\tt.size--\n\n\t// Check if we should delete this node from the parent\n\tif parent != nil && len(n.edges) == 0 {\n\t\tparent.delEdge(label)\n\t}\n\n\t// Check if we should merge this node\n\tif n != t.root && len(n.edges) == 1 {\n\t\tn.mergeChild()\n\t}\n\n\t// Check if we should merge the parent's other child\n\tif parent != nil && parent != t.root && len(parent.edges) == 1 && !parent.isLeaf() {\n\t\tparent.mergeChild()\n\t}\n\n\treturn leaf.val, true\n}\n\n// DeletePrefix is used to delete the subtree under a prefix\n// Returns how many nodes were deleted\n// Use this to delete large subtrees efficiently\nfunc (t *Tree) DeletePrefix(s string) int {\n\treturn t.deletePrefix(nil, t.root, s)\n}\n\n// delete does a recursive deletion\nfunc (t *Tree) deletePrefix(parent, n *node, prefix string) int {\n\t// Check for key exhaustion\n\tif len(prefix) == 0 {\n\t\t// Remove the leaf node\n\t\tsubTreeSize := 0\n\t\t//recursively walk from all edges of the node to be deleted\n\t\trecursiveWalk(n, func(s string, v interface{}) bool {\n\t\t\tsubTreeSize++\n\t\t\treturn false\n\t\t})\n\t\tif n.isLeaf() {\n\t\t\tn.leaf = nil\n\t\t}\n\t\tn.edges = nil // deletes the entire subtree\n\n\t\t// Check if we should merge the parent's other child\n\t\tif parent != nil && parent != t.root && len(parent.edges) == 1 && !parent.isLeaf() {\n\t\t\tparent.mergeChild()\n\t\t}\n\t\tt.size -= subTreeSize\n\t\treturn subTreeSize\n\t}\n\n\t// Look for an edge\n\tlabel := prefix[0]\n\tchild := n.getEdge(label)\n\tif child == nil || (!strings.HasPrefix(child.prefix, prefix) && !strings.HasPrefix(prefix, child.prefix)) {\n\t\treturn 0\n\t}\n\n\t// Consume the search prefix\n\tif len(child.prefix) > len(prefix) {\n\t\tprefix = prefix[len(prefix):]\n\t} else {\n\t\tprefix = prefix[len(child.prefix):]\n\t}\n\treturn t.deletePrefix(n, child, prefix)\n}\n\nfunc (n *node) mergeChild() {\n\te := n.edges[0]\n\tchild := e.node\n\tn.prefix = n.prefix + child.prefix\n\tn.leaf = child.leaf\n\tn.edges = child.edges\n}\n\n// Get is used to lookup a specific key, returning\n// the value and if it was found\nfunc (t *Tree) Get(s string) (interface{}, bool) {\n\tn := t.root\n\tsearch := s\n\tfor {\n\t\t// Check for key exhaution\n\t\tif len(search) == 0 {\n\t\t\tif n.isLeaf() {\n\t\t\t\treturn n.leaf.val, true\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\n\t\t// Look for an edge\n\t\tn = n.getEdge(search[0])\n\t\tif n == nil {\n\t\t\tbreak\n\t\t}\n\n\t\t// Consume the search prefix\n\t\tif strings.HasPrefix(search, n.prefix) {\n\t\t\tsearch = search[len(n.prefix):]\n\t\t} else {\n\t\t\tbreak\n\t\t}\n\t}\n\treturn nil, false\n}\n\n// LongestPrefix is like Get, but instead of an\n// exact match, it will return the longest prefix match.\nfunc (t *Tree) LongestPrefix(s string) (string, interface{}, bool) {\n\tvar last *leafNode\n\tn := t.root\n\tsearch := s\n\tfor {\n\t\t// Look for a leaf node\n\t\tif n.isLeaf() {\n\t\t\tlast = n.leaf\n\t\t}\n\n\t\t// Check for key exhaution\n\t\tif len(search) == 0 {\n\t\t\tbreak\n\t\t}\n\n\t\t// Look for an edge\n\t\tn = n.getEdge(search[0])\n\t\tif n == nil {\n\t\t\tbreak\n\t\t}\n\n\t\t// Consume the search prefix\n\t\tif strings.HasPrefix(search, n.prefix) {\n\t\t\tsearch = search[len(n.prefix):]\n\t\t} else {\n\t\t\tbreak\n\t\t}\n\t}\n\tif last != nil {\n\t\treturn last.key, last.val, true\n\t}\n\treturn \"\", nil, false\n}\n\n// Minimum is used to return the minimum value in the tree\nfunc (t *Tree) Minimum() (string, interface{}, bool) {\n\tn := t.root\n\tfor {\n\t\tif n.isLeaf() {\n\t\t\treturn n.leaf.key, n.leaf.val, true\n\t\t}\n\t\tif len(n.edges) > 0 {\n\t\t\tn = n.edges[0].node\n\t\t} else {\n\t\t\tbreak\n\t\t}\n\t}\n\treturn \"\", nil, false\n}\n\n// Maximum is used to return the maximum value in the tree\nfunc (t *Tree) Maximum() (string, interface{}, bool) {\n\tn := t.root\n\tfor {\n\t\tif num := len(n.edges); num > 0 {\n\t\t\tn = n.edges[num-1].node\n\t\t\tcontinue\n\t\t}\n\t\tif n.isLeaf() {\n\t\t\treturn n.leaf.key, n.leaf.val, true\n\t\t}\n\t\tbreak\n\t}\n\treturn \"\", nil, false\n}\n\n// Walk is used to walk the tree\nfunc (t *Tree) Walk(fn WalkFn) {\n\trecursiveWalk(t.root, fn)\n}\n\n// WalkPrefix is used to walk the tree under a prefix\nfunc (t *Tree) WalkPrefix(prefix string, fn WalkFn) {\n\tn := t.root\n\tsearch := prefix\n\tfor {\n\t\t// Check for key exhaution\n\t\tif len(search) == 0 {\n\t\t\trecursiveWalk(n, fn)\n\t\t\treturn\n\t\t}\n\n\t\t// Look for an edge\n\t\tn = n.getEdge(search[0])\n\t\tif n == nil {\n\t\t\tbreak\n\t\t}\n\n\t\t// Consume the search prefix\n\t\tif strings.HasPrefix(search, n.prefix) {\n\t\t\tsearch = search[len(n.prefix):]\n\n\t\t} else if strings.HasPrefix(n.prefix, search) {\n\t\t\t// Child may be under our search prefix\n\t\t\trecursiveWalk(n, fn)\n\t\t\treturn\n\t\t} else {\n\t\t\tbreak\n\t\t}\n\t}\n\n}\n\n// WalkPath is used to walk the tree, but only visiting nodes\n// from the root down to a given leaf. Where WalkPrefix walks\n// all the entries *under* the given prefix, this walks the\n// entries *above* the given prefix.\nfunc (t *Tree) WalkPath(path string, fn WalkFn) {\n\tn := t.root\n\tsearch := path\n\tfor {\n\t\t// Visit the leaf values if any\n\t\tif n.leaf != nil && fn(n.leaf.key, n.leaf.val) {\n\t\t\treturn\n\t\t}\n\n\t\t// Check for key exhaution\n\t\tif len(search) == 0 {\n\t\t\treturn\n\t\t}\n\n\t\t// Look for an edge\n\t\tn = n.getEdge(search[0])\n\t\tif n == nil {\n\t\t\treturn\n\t\t}\n\n\t\t// Consume the search prefix\n\t\tif strings.HasPrefix(search, n.prefix) {\n\t\t\tsearch = search[len(n.prefix):]\n\t\t} else {\n\t\t\tbreak\n\t\t}\n\t}\n}\n\n// recursiveWalk is used to do a pre-order walk of a node\n// recursively. Returns true if the walk should be aborted\nfunc recursiveWalk(n *node, fn WalkFn) bool {\n\t// Visit the leaf values if any\n\tif n.leaf != nil && fn(n.leaf.key, n.leaf.val) {\n\t\treturn true\n\t}\n\n\t// Recurse on the children\n\tfor _, e := range n.edges {\n\t\tif recursiveWalk(e.node, fn) {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// ToMap is used to walk the tree and convert it into a map\nfunc (t *Tree) ToMap() map[string]interface{} {\n\tout := make(map[string]interface{}, t.size)\n\tt.Walk(func(k string, v interface{}) bool {\n\t\tout[k] = v\n\t\treturn false\n\t})\n\treturn out\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/LICENSE.txt",
    "content": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/NOTICE.txt",
    "content": "AWS SDK for Go\nCopyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved.\nCopyright 2014-2015 Stripe, Inc.\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/awserr/error.go",
    "content": "// Package awserr represents API error interface accessors for the SDK.\npackage awserr\n\n// An Error wraps lower level errors with code, message and an original error.\n// The underlying concrete error type may also satisfy other interfaces which\n// can be to used to obtain more specific information about the error.\n//\n// Calling Error() or String() will always include the full information about\n// an error based on its underlying type.\n//\n// Example:\n//\n//     output, err := s3manage.Upload(svc, input, opts)\n//     if err != nil {\n//         if awsErr, ok := err.(awserr.Error); ok {\n//             // Get error details\n//             log.Println(\"Error:\", awsErr.Code(), awsErr.Message())\n//\n//             // Prints out full error message, including original error if there was one.\n//             log.Println(\"Error:\", awsErr.Error())\n//\n//             // Get original error\n//             if origErr := awsErr.OrigErr(); origErr != nil {\n//                 // operate on original error.\n//             }\n//         } else {\n//             fmt.Println(err.Error())\n//         }\n//     }\n//\ntype Error interface {\n\t// Satisfy the generic error interface.\n\terror\n\n\t// Returns the short phrase depicting the classification of the error.\n\tCode() string\n\n\t// Returns the error details message.\n\tMessage() string\n\n\t// Returns the original error if one was set.  Nil is returned if not set.\n\tOrigErr() error\n}\n\n// BatchError is a batch of errors which also wraps lower level errors with\n// code, message, and original errors. Calling Error() will include all errors\n// that occurred in the batch.\n//\n// Deprecated: Replaced with BatchedErrors. Only defined for backwards\n// compatibility.\ntype BatchError interface {\n\t// Satisfy the generic error interface.\n\terror\n\n\t// Returns the short phrase depicting the classification of the error.\n\tCode() string\n\n\t// Returns the error details message.\n\tMessage() string\n\n\t// Returns the original error if one was set.  Nil is returned if not set.\n\tOrigErrs() []error\n}\n\n// BatchedErrors is a batch of errors which also wraps lower level errors with\n// code, message, and original errors. Calling Error() will include all errors\n// that occurred in the batch.\n//\n// Replaces BatchError\ntype BatchedErrors interface {\n\t// Satisfy the base Error interface.\n\tError\n\n\t// Returns the original error if one was set.  Nil is returned if not set.\n\tOrigErrs() []error\n}\n\n// New returns an Error object described by the code, message, and origErr.\n//\n// If origErr satisfies the Error interface it will not be wrapped within a new\n// Error object and will instead be returned.\nfunc New(code, message string, origErr error) Error {\n\tvar errs []error\n\tif origErr != nil {\n\t\terrs = append(errs, origErr)\n\t}\n\treturn newBaseError(code, message, errs)\n}\n\n// NewBatchError returns an BatchedErrors with a collection of errors as an\n// array of errors.\nfunc NewBatchError(code, message string, errs []error) BatchedErrors {\n\treturn newBaseError(code, message, errs)\n}\n\n// A RequestFailure is an interface to extract request failure information from\n// an Error such as the request ID of the failed request returned by a service.\n// RequestFailures may not always have a requestID value if the request failed\n// prior to reaching the service such as a connection error.\n//\n// Example:\n//\n//     output, err := s3manage.Upload(svc, input, opts)\n//     if err != nil {\n//         if reqerr, ok := err.(RequestFailure); ok {\n//             log.Println(\"Request failed\", reqerr.Code(), reqerr.Message(), reqerr.RequestID())\n//         } else {\n//             log.Println(\"Error:\", err.Error())\n//         }\n//     }\n//\n// Combined with awserr.Error:\n//\n//    output, err := s3manage.Upload(svc, input, opts)\n//    if err != nil {\n//        if awsErr, ok := err.(awserr.Error); ok {\n//            // Generic AWS Error with Code, Message, and original error (if any)\n//            fmt.Println(awsErr.Code(), awsErr.Message(), awsErr.OrigErr())\n//\n//            if reqErr, ok := err.(awserr.RequestFailure); ok {\n//                // A service error occurred\n//                fmt.Println(reqErr.StatusCode(), reqErr.RequestID())\n//            }\n//        } else {\n//            fmt.Println(err.Error())\n//        }\n//    }\n//\ntype RequestFailure interface {\n\tError\n\n\t// The status code of the HTTP response.\n\tStatusCode() int\n\n\t// The request ID returned by the service for a request failure. This will\n\t// be empty if no request ID is available such as the request failed due\n\t// to a connection error.\n\tRequestID() string\n}\n\n// NewRequestFailure returns a wrapped error with additional information for\n// request status code, and service requestID.\n//\n// Should be used to wrap all request which involve service requests. Even if\n// the request failed without a service response, but had an HTTP status code\n// that may be meaningful.\nfunc NewRequestFailure(err Error, statusCode int, reqID string) RequestFailure {\n\treturn newRequestError(err, statusCode, reqID)\n}\n\n// UnmarshalError provides the interface for the SDK failing to unmarshal data.\ntype UnmarshalError interface {\n\tawsError\n\tBytes() []byte\n}\n\n// NewUnmarshalError returns an initialized UnmarshalError error wrapper adding\n// the bytes that fail to unmarshal to the error.\nfunc NewUnmarshalError(err error, msg string, bytes []byte) UnmarshalError {\n\treturn &unmarshalError{\n\t\tawsError: New(\"UnmarshalError\", msg, err),\n\t\tbytes:    bytes,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/awserr/types.go",
    "content": "package awserr\n\nimport (\n\t\"encoding/hex\"\n\t\"fmt\"\n)\n\n// SprintError returns a string of the formatted error code.\n//\n// Both extra and origErr are optional.  If they are included their lines\n// will be added, but if they are not included their lines will be ignored.\nfunc SprintError(code, message, extra string, origErr error) string {\n\tmsg := fmt.Sprintf(\"%s: %s\", code, message)\n\tif extra != \"\" {\n\t\tmsg = fmt.Sprintf(\"%s\\n\\t%s\", msg, extra)\n\t}\n\tif origErr != nil {\n\t\tmsg = fmt.Sprintf(\"%s\\ncaused by: %s\", msg, origErr.Error())\n\t}\n\treturn msg\n}\n\n// A baseError wraps the code and message which defines an error. It also\n// can be used to wrap an original error object.\n//\n// Should be used as the root for errors satisfying the awserr.Error. Also\n// for any error which does not fit into a specific error wrapper type.\ntype baseError struct {\n\t// Classification of error\n\tcode string\n\n\t// Detailed information about error\n\tmessage string\n\n\t// Optional original error this error is based off of. Allows building\n\t// chained errors.\n\terrs []error\n}\n\n// newBaseError returns an error object for the code, message, and errors.\n//\n// code is a short no whitespace phrase depicting the classification of\n// the error that is being created.\n//\n// message is the free flow string containing detailed information about the\n// error.\n//\n// origErrs is the error objects which will be nested under the new errors to\n// be returned.\nfunc newBaseError(code, message string, origErrs []error) *baseError {\n\tb := &baseError{\n\t\tcode:    code,\n\t\tmessage: message,\n\t\terrs:    origErrs,\n\t}\n\n\treturn b\n}\n\n// Error returns the string representation of the error.\n//\n// See ErrorWithExtra for formatting.\n//\n// Satisfies the error interface.\nfunc (b baseError) Error() string {\n\tsize := len(b.errs)\n\tif size > 0 {\n\t\treturn SprintError(b.code, b.message, \"\", errorList(b.errs))\n\t}\n\n\treturn SprintError(b.code, b.message, \"\", nil)\n}\n\n// String returns the string representation of the error.\n// Alias for Error to satisfy the stringer interface.\nfunc (b baseError) String() string {\n\treturn b.Error()\n}\n\n// Code returns the short phrase depicting the classification of the error.\nfunc (b baseError) Code() string {\n\treturn b.code\n}\n\n// Message returns the error details message.\nfunc (b baseError) Message() string {\n\treturn b.message\n}\n\n// OrigErr returns the original error if one was set. Nil is returned if no\n// error was set. This only returns the first element in the list. If the full\n// list is needed, use BatchedErrors.\nfunc (b baseError) OrigErr() error {\n\tswitch len(b.errs) {\n\tcase 0:\n\t\treturn nil\n\tcase 1:\n\t\treturn b.errs[0]\n\tdefault:\n\t\tif err, ok := b.errs[0].(Error); ok {\n\t\t\treturn NewBatchError(err.Code(), err.Message(), b.errs[1:])\n\t\t}\n\t\treturn NewBatchError(\"BatchedErrors\",\n\t\t\t\"multiple errors occurred\", b.errs)\n\t}\n}\n\n// OrigErrs returns the original errors if one was set. An empty slice is\n// returned if no error was set.\nfunc (b baseError) OrigErrs() []error {\n\treturn b.errs\n}\n\n// So that the Error interface type can be included as an anonymous field\n// in the requestError struct and not conflict with the error.Error() method.\ntype awsError Error\n\n// A requestError wraps a request or service error.\n//\n// Composed of baseError for code, message, and original error.\ntype requestError struct {\n\tawsError\n\tstatusCode int\n\trequestID  string\n\tbytes      []byte\n}\n\n// newRequestError returns a wrapped error with additional information for\n// request status code, and service requestID.\n//\n// Should be used to wrap all request which involve service requests. Even if\n// the request failed without a service response, but had an HTTP status code\n// that may be meaningful.\n//\n// Also wraps original errors via the baseError.\nfunc newRequestError(err Error, statusCode int, requestID string) *requestError {\n\treturn &requestError{\n\t\tawsError:   err,\n\t\tstatusCode: statusCode,\n\t\trequestID:  requestID,\n\t}\n}\n\n// Error returns the string representation of the error.\n// Satisfies the error interface.\nfunc (r requestError) Error() string {\n\textra := fmt.Sprintf(\"status code: %d, request id: %s\",\n\t\tr.statusCode, r.requestID)\n\treturn SprintError(r.Code(), r.Message(), extra, r.OrigErr())\n}\n\n// String returns the string representation of the error.\n// Alias for Error to satisfy the stringer interface.\nfunc (r requestError) String() string {\n\treturn r.Error()\n}\n\n// StatusCode returns the wrapped status code for the error\nfunc (r requestError) StatusCode() int {\n\treturn r.statusCode\n}\n\n// RequestID returns the wrapped requestID\nfunc (r requestError) RequestID() string {\n\treturn r.requestID\n}\n\n// OrigErrs returns the original errors if one was set. An empty slice is\n// returned if no error was set.\nfunc (r requestError) OrigErrs() []error {\n\tif b, ok := r.awsError.(BatchedErrors); ok {\n\t\treturn b.OrigErrs()\n\t}\n\treturn []error{r.OrigErr()}\n}\n\ntype unmarshalError struct {\n\tawsError\n\tbytes []byte\n}\n\n// Error returns the string representation of the error.\n// Satisfies the error interface.\nfunc (e unmarshalError) Error() string {\n\textra := hex.Dump(e.bytes)\n\treturn SprintError(e.Code(), e.Message(), extra, e.OrigErr())\n}\n\n// String returns the string representation of the error.\n// Alias for Error to satisfy the stringer interface.\nfunc (e unmarshalError) String() string {\n\treturn e.Error()\n}\n\n// Bytes returns the bytes that failed to unmarshal.\nfunc (e unmarshalError) Bytes() []byte {\n\treturn e.bytes\n}\n\n// An error list that satisfies the golang interface\ntype errorList []error\n\n// Error returns the string representation of the error.\n//\n// Satisfies the error interface.\nfunc (e errorList) Error() string {\n\tmsg := \"\"\n\t// How do we want to handle the array size being zero\n\tif size := len(e); size > 0 {\n\t\tfor i := 0; i < size; i++ {\n\t\t\tmsg += fmt.Sprintf(\"%s\", e[i].Error())\n\t\t\t// We check the next index to see if it is within the slice.\n\t\t\t// If it is, then we append a newline. We do this, because unit tests\n\t\t\t// could be broken with the additional '\\n'\n\t\t\tif i+1 < size {\n\t\t\t\tmsg += \"\\n\"\n\t\t\t}\n\t\t}\n\t}\n\treturn msg\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/awsutil/copy.go",
    "content": "package awsutil\n\nimport (\n\t\"io\"\n\t\"reflect\"\n\t\"time\"\n)\n\n// Copy deeply copies a src structure to dst. Useful for copying request and\n// response structures.\n//\n// Can copy between structs of different type, but will only copy fields which\n// are assignable, and exist in both structs. Fields which are not assignable,\n// or do not exist in both structs are ignored.\nfunc Copy(dst, src interface{}) {\n\tdstval := reflect.ValueOf(dst)\n\tif !dstval.IsValid() {\n\t\tpanic(\"Copy dst cannot be nil\")\n\t}\n\n\trcopy(dstval, reflect.ValueOf(src), true)\n}\n\n// CopyOf returns a copy of src while also allocating the memory for dst.\n// src must be a pointer type or this operation will fail.\nfunc CopyOf(src interface{}) (dst interface{}) {\n\tdsti := reflect.New(reflect.TypeOf(src).Elem())\n\tdst = dsti.Interface()\n\trcopy(dsti, reflect.ValueOf(src), true)\n\treturn\n}\n\n// rcopy performs a recursive copy of values from the source to destination.\n//\n// root is used to skip certain aspects of the copy which are not valid\n// for the root node of a object.\nfunc rcopy(dst, src reflect.Value, root bool) {\n\tif !src.IsValid() {\n\t\treturn\n\t}\n\n\tswitch src.Kind() {\n\tcase reflect.Ptr:\n\t\tif _, ok := src.Interface().(io.Reader); ok {\n\t\t\tif dst.Kind() == reflect.Ptr && dst.Elem().CanSet() {\n\t\t\t\tdst.Elem().Set(src)\n\t\t\t} else if dst.CanSet() {\n\t\t\t\tdst.Set(src)\n\t\t\t}\n\t\t} else {\n\t\t\te := src.Type().Elem()\n\t\t\tif dst.CanSet() && !src.IsNil() {\n\t\t\t\tif _, ok := src.Interface().(*time.Time); !ok {\n\t\t\t\t\tdst.Set(reflect.New(e))\n\t\t\t\t} else {\n\t\t\t\t\ttempValue := reflect.New(e)\n\t\t\t\t\ttempValue.Elem().Set(src.Elem())\n\t\t\t\t\t// Sets time.Time's unexported values\n\t\t\t\t\tdst.Set(tempValue)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif src.Elem().IsValid() {\n\t\t\t\t// Keep the current root state since the depth hasn't changed\n\t\t\t\trcopy(dst.Elem(), src.Elem(), root)\n\t\t\t}\n\t\t}\n\tcase reflect.Struct:\n\t\tt := dst.Type()\n\t\tfor i := 0; i < t.NumField(); i++ {\n\t\t\tname := t.Field(i).Name\n\t\t\tsrcVal := src.FieldByName(name)\n\t\t\tdstVal := dst.FieldByName(name)\n\t\t\tif srcVal.IsValid() && dstVal.CanSet() {\n\t\t\t\trcopy(dstVal, srcVal, false)\n\t\t\t}\n\t\t}\n\tcase reflect.Slice:\n\t\tif src.IsNil() {\n\t\t\tbreak\n\t\t}\n\n\t\ts := reflect.MakeSlice(src.Type(), src.Len(), src.Cap())\n\t\tdst.Set(s)\n\t\tfor i := 0; i < src.Len(); i++ {\n\t\t\trcopy(dst.Index(i), src.Index(i), false)\n\t\t}\n\tcase reflect.Map:\n\t\tif src.IsNil() {\n\t\t\tbreak\n\t\t}\n\n\t\ts := reflect.MakeMap(src.Type())\n\t\tdst.Set(s)\n\t\tfor _, k := range src.MapKeys() {\n\t\t\tv := src.MapIndex(k)\n\t\t\tv2 := reflect.New(v.Type()).Elem()\n\t\t\trcopy(v2, v, false)\n\t\t\tdst.SetMapIndex(k, v2)\n\t\t}\n\tdefault:\n\t\t// Assign the value if possible. If its not assignable, the value would\n\t\t// need to be converted and the impact of that may be unexpected, or is\n\t\t// not compatible with the dst type.\n\t\tif src.Type().AssignableTo(dst.Type()) {\n\t\t\tdst.Set(src)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/awsutil/equal.go",
    "content": "package awsutil\n\nimport (\n\t\"reflect\"\n)\n\n// DeepEqual returns if the two values are deeply equal like reflect.DeepEqual.\n// In addition to this, this method will also dereference the input values if\n// possible so the DeepEqual performed will not fail if one parameter is a\n// pointer and the other is not.\n//\n// DeepEqual will not perform indirection of nested values of the input parameters.\nfunc DeepEqual(a, b interface{}) bool {\n\tra := reflect.Indirect(reflect.ValueOf(a))\n\trb := reflect.Indirect(reflect.ValueOf(b))\n\n\tif raValid, rbValid := ra.IsValid(), rb.IsValid(); !raValid && !rbValid {\n\t\t// If the elements are both nil, and of the same type they are equal\n\t\t// If they are of different types they are not equal\n\t\treturn reflect.TypeOf(a) == reflect.TypeOf(b)\n\t} else if raValid != rbValid {\n\t\t// Both values must be valid to be equal\n\t\treturn false\n\t}\n\n\treturn reflect.DeepEqual(ra.Interface(), rb.Interface())\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/awsutil/path_value.go",
    "content": "package awsutil\n\nimport (\n\t\"reflect\"\n\t\"regexp\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/jmespath/go-jmespath\"\n)\n\nvar indexRe = regexp.MustCompile(`(.+)\\[(-?\\d+)?\\]$`)\n\n// rValuesAtPath returns a slice of values found in value v. The values\n// in v are explored recursively so all nested values are collected.\nfunc rValuesAtPath(v interface{}, path string, createPath, caseSensitive, nilTerm bool) []reflect.Value {\n\tpathparts := strings.Split(path, \"||\")\n\tif len(pathparts) > 1 {\n\t\tfor _, pathpart := range pathparts {\n\t\t\tvals := rValuesAtPath(v, pathpart, createPath, caseSensitive, nilTerm)\n\t\t\tif len(vals) > 0 {\n\t\t\t\treturn vals\n\t\t\t}\n\t\t}\n\t\treturn nil\n\t}\n\n\tvalues := []reflect.Value{reflect.Indirect(reflect.ValueOf(v))}\n\tcomponents := strings.Split(path, \".\")\n\tfor len(values) > 0 && len(components) > 0 {\n\t\tvar index *int64\n\t\tvar indexStar bool\n\t\tc := strings.TrimSpace(components[0])\n\t\tif c == \"\" { // no actual component, illegal syntax\n\t\t\treturn nil\n\t\t} else if caseSensitive && c != \"*\" && strings.ToLower(c[0:1]) == c[0:1] {\n\t\t\t// TODO normalize case for user\n\t\t\treturn nil // don't support unexported fields\n\t\t}\n\n\t\t// parse this component\n\t\tif m := indexRe.FindStringSubmatch(c); m != nil {\n\t\t\tc = m[1]\n\t\t\tif m[2] == \"\" {\n\t\t\t\tindex = nil\n\t\t\t\tindexStar = true\n\t\t\t} else {\n\t\t\t\ti, _ := strconv.ParseInt(m[2], 10, 32)\n\t\t\t\tindex = &i\n\t\t\t\tindexStar = false\n\t\t\t}\n\t\t}\n\n\t\tnextvals := []reflect.Value{}\n\t\tfor _, value := range values {\n\t\t\t// pull component name out of struct member\n\t\t\tif value.Kind() != reflect.Struct {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif c == \"*\" { // pull all members\n\t\t\t\tfor i := 0; i < value.NumField(); i++ {\n\t\t\t\t\tif f := reflect.Indirect(value.Field(i)); f.IsValid() {\n\t\t\t\t\t\tnextvals = append(nextvals, f)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tvalue = value.FieldByNameFunc(func(name string) bool {\n\t\t\t\tif c == name {\n\t\t\t\t\treturn true\n\t\t\t\t} else if !caseSensitive && strings.ToLower(name) == strings.ToLower(c) {\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t})\n\n\t\t\tif nilTerm && value.Kind() == reflect.Ptr && len(components[1:]) == 0 {\n\t\t\t\tif !value.IsNil() {\n\t\t\t\t\tvalue.Set(reflect.Zero(value.Type()))\n\t\t\t\t}\n\t\t\t\treturn []reflect.Value{value}\n\t\t\t}\n\n\t\t\tif createPath && value.Kind() == reflect.Ptr && value.IsNil() {\n\t\t\t\t// TODO if the value is the terminus it should not be created\n\t\t\t\t// if the value to be set to its position is nil.\n\t\t\t\tvalue.Set(reflect.New(value.Type().Elem()))\n\t\t\t\tvalue = value.Elem()\n\t\t\t} else {\n\t\t\t\tvalue = reflect.Indirect(value)\n\t\t\t}\n\n\t\t\tif value.Kind() == reflect.Slice || value.Kind() == reflect.Map {\n\t\t\t\tif !createPath && value.IsNil() {\n\t\t\t\t\tvalue = reflect.ValueOf(nil)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif value.IsValid() {\n\t\t\t\tnextvals = append(nextvals, value)\n\t\t\t}\n\t\t}\n\t\tvalues = nextvals\n\n\t\tif indexStar || index != nil {\n\t\t\tnextvals = []reflect.Value{}\n\t\t\tfor _, valItem := range values {\n\t\t\t\tvalue := reflect.Indirect(valItem)\n\t\t\t\tif value.Kind() != reflect.Slice {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tif indexStar { // grab all indices\n\t\t\t\t\tfor i := 0; i < value.Len(); i++ {\n\t\t\t\t\t\tidx := reflect.Indirect(value.Index(i))\n\t\t\t\t\t\tif idx.IsValid() {\n\t\t\t\t\t\t\tnextvals = append(nextvals, idx)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\t// pull out index\n\t\t\t\ti := int(*index)\n\t\t\t\tif i >= value.Len() { // check out of bounds\n\t\t\t\t\tif createPath {\n\t\t\t\t\t\t// TODO resize slice\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t} else if i < 0 { // support negative indexing\n\t\t\t\t\ti = value.Len() + i\n\t\t\t\t}\n\t\t\t\tvalue = reflect.Indirect(value.Index(i))\n\n\t\t\t\tif value.Kind() == reflect.Slice || value.Kind() == reflect.Map {\n\t\t\t\t\tif !createPath && value.IsNil() {\n\t\t\t\t\t\tvalue = reflect.ValueOf(nil)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif value.IsValid() {\n\t\t\t\t\tnextvals = append(nextvals, value)\n\t\t\t\t}\n\t\t\t}\n\t\t\tvalues = nextvals\n\t\t}\n\n\t\tcomponents = components[1:]\n\t}\n\treturn values\n}\n\n// ValuesAtPath returns a list of values at the case insensitive lexical\n// path inside of a structure.\nfunc ValuesAtPath(i interface{}, path string) ([]interface{}, error) {\n\tresult, err := jmespath.Search(path, i)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tv := reflect.ValueOf(result)\n\tif !v.IsValid() || (v.Kind() == reflect.Ptr && v.IsNil()) {\n\t\treturn nil, nil\n\t}\n\tif s, ok := result.([]interface{}); ok {\n\t\treturn s, err\n\t}\n\tif v.Kind() == reflect.Map && v.Len() == 0 {\n\t\treturn nil, nil\n\t}\n\tif v.Kind() == reflect.Slice {\n\t\tout := make([]interface{}, v.Len())\n\t\tfor i := 0; i < v.Len(); i++ {\n\t\t\tout[i] = v.Index(i).Interface()\n\t\t}\n\t\treturn out, nil\n\t}\n\n\treturn []interface{}{result}, nil\n}\n\n// SetValueAtPath sets a value at the case insensitive lexical path inside\n// of a structure.\nfunc SetValueAtPath(i interface{}, path string, v interface{}) {\n\tif rvals := rValuesAtPath(i, path, true, false, v == nil); rvals != nil {\n\t\tfor _, rval := range rvals {\n\t\t\tif rval.Kind() == reflect.Ptr && rval.IsNil() {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tsetValue(rval, v)\n\t\t}\n\t}\n}\n\nfunc setValue(dstVal reflect.Value, src interface{}) {\n\tif dstVal.Kind() == reflect.Ptr {\n\t\tdstVal = reflect.Indirect(dstVal)\n\t}\n\tsrcVal := reflect.ValueOf(src)\n\n\tif !srcVal.IsValid() { // src is literal nil\n\t\tif dstVal.CanAddr() {\n\t\t\t// Convert to pointer so that pointer's value can be nil'ed\n\t\t\t//                     dstVal = dstVal.Addr()\n\t\t}\n\t\tdstVal.Set(reflect.Zero(dstVal.Type()))\n\n\t} else if srcVal.Kind() == reflect.Ptr {\n\t\tif srcVal.IsNil() {\n\t\t\tsrcVal = reflect.Zero(dstVal.Type())\n\t\t} else {\n\t\t\tsrcVal = reflect.ValueOf(src).Elem()\n\t\t}\n\t\tdstVal.Set(srcVal)\n\t} else {\n\t\tdstVal.Set(srcVal)\n\t}\n\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/awsutil/prettify.go",
    "content": "package awsutil\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"reflect\"\n\t\"strings\"\n)\n\n// Prettify returns the string representation of a value.\nfunc Prettify(i interface{}) string {\n\tvar buf bytes.Buffer\n\tprettify(reflect.ValueOf(i), 0, &buf)\n\treturn buf.String()\n}\n\n// prettify will recursively walk value v to build a textual\n// representation of the value.\nfunc prettify(v reflect.Value, indent int, buf *bytes.Buffer) {\n\tfor v.Kind() == reflect.Ptr {\n\t\tv = v.Elem()\n\t}\n\n\tswitch v.Kind() {\n\tcase reflect.Struct:\n\t\tstrtype := v.Type().String()\n\t\tif strtype == \"time.Time\" {\n\t\t\tfmt.Fprintf(buf, \"%s\", v.Interface())\n\t\t\tbreak\n\t\t} else if strings.HasPrefix(strtype, \"io.\") {\n\t\t\tbuf.WriteString(\"<buffer>\")\n\t\t\tbreak\n\t\t}\n\n\t\tbuf.WriteString(\"{\\n\")\n\n\t\tnames := []string{}\n\t\tfor i := 0; i < v.Type().NumField(); i++ {\n\t\t\tname := v.Type().Field(i).Name\n\t\t\tf := v.Field(i)\n\t\t\tif name[0:1] == strings.ToLower(name[0:1]) {\n\t\t\t\tcontinue // ignore unexported fields\n\t\t\t}\n\t\t\tif (f.Kind() == reflect.Ptr || f.Kind() == reflect.Slice || f.Kind() == reflect.Map) && f.IsNil() {\n\t\t\t\tcontinue // ignore unset fields\n\t\t\t}\n\t\t\tnames = append(names, name)\n\t\t}\n\n\t\tfor i, n := range names {\n\t\t\tval := v.FieldByName(n)\n\t\t\tbuf.WriteString(strings.Repeat(\" \", indent+2))\n\t\t\tbuf.WriteString(n + \": \")\n\t\t\tprettify(val, indent+2, buf)\n\n\t\t\tif i < len(names)-1 {\n\t\t\t\tbuf.WriteString(\",\\n\")\n\t\t\t}\n\t\t}\n\n\t\tbuf.WriteString(\"\\n\" + strings.Repeat(\" \", indent) + \"}\")\n\tcase reflect.Slice:\n\t\tstrtype := v.Type().String()\n\t\tif strtype == \"[]uint8\" {\n\t\t\tfmt.Fprintf(buf, \"<binary> len %d\", v.Len())\n\t\t\tbreak\n\t\t}\n\n\t\tnl, id, id2 := \"\", \"\", \"\"\n\t\tif v.Len() > 3 {\n\t\t\tnl, id, id2 = \"\\n\", strings.Repeat(\" \", indent), strings.Repeat(\" \", indent+2)\n\t\t}\n\t\tbuf.WriteString(\"[\" + nl)\n\t\tfor i := 0; i < v.Len(); i++ {\n\t\t\tbuf.WriteString(id2)\n\t\t\tprettify(v.Index(i), indent+2, buf)\n\n\t\t\tif i < v.Len()-1 {\n\t\t\t\tbuf.WriteString(\",\" + nl)\n\t\t\t}\n\t\t}\n\n\t\tbuf.WriteString(nl + id + \"]\")\n\tcase reflect.Map:\n\t\tbuf.WriteString(\"{\\n\")\n\n\t\tfor i, k := range v.MapKeys() {\n\t\t\tbuf.WriteString(strings.Repeat(\" \", indent+2))\n\t\t\tbuf.WriteString(k.String() + \": \")\n\t\t\tprettify(v.MapIndex(k), indent+2, buf)\n\n\t\t\tif i < v.Len()-1 {\n\t\t\t\tbuf.WriteString(\",\\n\")\n\t\t\t}\n\t\t}\n\n\t\tbuf.WriteString(\"\\n\" + strings.Repeat(\" \", indent) + \"}\")\n\tdefault:\n\t\tif !v.IsValid() {\n\t\t\tfmt.Fprint(buf, \"<invalid value>\")\n\t\t\treturn\n\t\t}\n\t\tformat := \"%v\"\n\t\tswitch v.Interface().(type) {\n\t\tcase string:\n\t\t\tformat = \"%q\"\n\t\tcase io.ReadSeeker, io.Reader:\n\t\t\tformat = \"buffer(%p)\"\n\t\t}\n\t\tfmt.Fprintf(buf, format, v.Interface())\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/awsutil/string_value.go",
    "content": "package awsutil\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"strings\"\n)\n\n// StringValue returns the string representation of a value.\nfunc StringValue(i interface{}) string {\n\tvar buf bytes.Buffer\n\tstringValue(reflect.ValueOf(i), 0, &buf)\n\treturn buf.String()\n}\n\nfunc stringValue(v reflect.Value, indent int, buf *bytes.Buffer) {\n\tfor v.Kind() == reflect.Ptr {\n\t\tv = v.Elem()\n\t}\n\n\tswitch v.Kind() {\n\tcase reflect.Struct:\n\t\tbuf.WriteString(\"{\\n\")\n\n\t\tfor i := 0; i < v.Type().NumField(); i++ {\n\t\t\tft := v.Type().Field(i)\n\t\t\tfv := v.Field(i)\n\n\t\t\tif ft.Name[0:1] == strings.ToLower(ft.Name[0:1]) {\n\t\t\t\tcontinue // ignore unexported fields\n\t\t\t}\n\t\t\tif (fv.Kind() == reflect.Ptr || fv.Kind() == reflect.Slice) && fv.IsNil() {\n\t\t\t\tcontinue // ignore unset fields\n\t\t\t}\n\n\t\t\tbuf.WriteString(strings.Repeat(\" \", indent+2))\n\t\t\tbuf.WriteString(ft.Name + \": \")\n\n\t\t\tif tag := ft.Tag.Get(\"sensitive\"); tag == \"true\" {\n\t\t\t\tbuf.WriteString(\"<sensitive>\")\n\t\t\t} else {\n\t\t\t\tstringValue(fv, indent+2, buf)\n\t\t\t}\n\n\t\t\tbuf.WriteString(\",\\n\")\n\t\t}\n\n\t\tbuf.WriteString(\"\\n\" + strings.Repeat(\" \", indent) + \"}\")\n\tcase reflect.Slice:\n\t\tnl, id, id2 := \"\", \"\", \"\"\n\t\tif v.Len() > 3 {\n\t\t\tnl, id, id2 = \"\\n\", strings.Repeat(\" \", indent), strings.Repeat(\" \", indent+2)\n\t\t}\n\t\tbuf.WriteString(\"[\" + nl)\n\t\tfor i := 0; i < v.Len(); i++ {\n\t\t\tbuf.WriteString(id2)\n\t\t\tstringValue(v.Index(i), indent+2, buf)\n\n\t\t\tif i < v.Len()-1 {\n\t\t\t\tbuf.WriteString(\",\" + nl)\n\t\t\t}\n\t\t}\n\n\t\tbuf.WriteString(nl + id + \"]\")\n\tcase reflect.Map:\n\t\tbuf.WriteString(\"{\\n\")\n\n\t\tfor i, k := range v.MapKeys() {\n\t\t\tbuf.WriteString(strings.Repeat(\" \", indent+2))\n\t\t\tbuf.WriteString(k.String() + \": \")\n\t\t\tstringValue(v.MapIndex(k), indent+2, buf)\n\n\t\t\tif i < v.Len()-1 {\n\t\t\t\tbuf.WriteString(\",\\n\")\n\t\t\t}\n\t\t}\n\n\t\tbuf.WriteString(\"\\n\" + strings.Repeat(\" \", indent) + \"}\")\n\tdefault:\n\t\tformat := \"%v\"\n\t\tswitch v.Interface().(type) {\n\t\tcase string:\n\t\t\tformat = \"%q\"\n\t\t}\n\t\tfmt.Fprintf(buf, format, v.Interface())\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/client/client.go",
    "content": "package client\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-go/aws/client/metadata\"\n\t\"github.com/aws/aws-sdk-go/aws/request\"\n)\n\n// A Config provides configuration to a service client instance.\ntype Config struct {\n\tConfig        *aws.Config\n\tHandlers      request.Handlers\n\tEndpoint      string\n\tSigningRegion string\n\tSigningName   string\n\n\t// States that the signing name did not come from a modeled source but\n\t// was derived based on other data. Used by service client constructors\n\t// to determine if the signin name can be overridden based on metadata the\n\t// service has.\n\tSigningNameDerived bool\n}\n\n// ConfigProvider provides a generic way for a service client to receive\n// the ClientConfig without circular dependencies.\ntype ConfigProvider interface {\n\tClientConfig(serviceName string, cfgs ...*aws.Config) Config\n}\n\n// ConfigNoResolveEndpointProvider same as ConfigProvider except it will not\n// resolve the endpoint automatically. The service client's endpoint must be\n// provided via the aws.Config.Endpoint field.\ntype ConfigNoResolveEndpointProvider interface {\n\tClientConfigNoResolveEndpoint(cfgs ...*aws.Config) Config\n}\n\n// A Client implements the base client request and response handling\n// used by all service clients.\ntype Client struct {\n\trequest.Retryer\n\tmetadata.ClientInfo\n\n\tConfig   aws.Config\n\tHandlers request.Handlers\n}\n\n// New will return a pointer to a new initialized service client.\nfunc New(cfg aws.Config, info metadata.ClientInfo, handlers request.Handlers, options ...func(*Client)) *Client {\n\tsvc := &Client{\n\t\tConfig:     cfg,\n\t\tClientInfo: info,\n\t\tHandlers:   handlers.Copy(),\n\t}\n\n\tswitch retryer, ok := cfg.Retryer.(request.Retryer); {\n\tcase ok:\n\t\tsvc.Retryer = retryer\n\tcase cfg.Retryer != nil && cfg.Logger != nil:\n\t\ts := fmt.Sprintf(\"WARNING: %T does not implement request.Retryer; using DefaultRetryer instead\", cfg.Retryer)\n\t\tcfg.Logger.Log(s)\n\t\tfallthrough\n\tdefault:\n\t\tmaxRetries := aws.IntValue(cfg.MaxRetries)\n\t\tif cfg.MaxRetries == nil || maxRetries == aws.UseServiceDefaultRetries {\n\t\t\tmaxRetries = 3\n\t\t}\n\t\tsvc.Retryer = DefaultRetryer{NumMaxRetries: maxRetries}\n\t}\n\n\tsvc.AddDebugHandlers()\n\n\tfor _, option := range options {\n\t\toption(svc)\n\t}\n\n\treturn svc\n}\n\n// NewRequest returns a new Request pointer for the service API\n// operation and parameters.\nfunc (c *Client) NewRequest(operation *request.Operation, params interface{}, data interface{}) *request.Request {\n\treturn request.New(c.Config, c.ClientInfo, c.Handlers, c.Retryer, operation, params, data)\n}\n\n// AddDebugHandlers injects debug logging handlers into the service to log request\n// debug information.\nfunc (c *Client) AddDebugHandlers() {\n\tif !c.Config.LogLevel.AtLeast(aws.LogDebug) {\n\t\treturn\n\t}\n\n\tc.Handlers.Send.PushFrontNamed(LogHTTPRequestHandler)\n\tc.Handlers.Send.PushBackNamed(LogHTTPResponseHandler)\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/client/default_retryer.go",
    "content": "package client\n\nimport (\n\t\"strconv\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go/aws/request\"\n\t\"github.com/aws/aws-sdk-go/internal/sdkrand\"\n)\n\n// DefaultRetryer implements basic retry logic using exponential backoff for\n// most services. If you want to implement custom retry logic, implement the\n// request.Retryer interface or create a structure type that composes this\n// struct and override the specific methods. For example, to override only\n// the MaxRetries method:\n//\n//\t\ttype retryer struct {\n//      client.DefaultRetryer\n//    }\n//\n//    // This implementation always has 100 max retries\n//    func (d retryer) MaxRetries() int { return 100 }\ntype DefaultRetryer struct {\n\tNumMaxRetries int\n}\n\n// MaxRetries returns the number of maximum returns the service will use to make\n// an individual API request.\nfunc (d DefaultRetryer) MaxRetries() int {\n\treturn d.NumMaxRetries\n}\n\n// RetryRules returns the delay duration before retrying this request again\nfunc (d DefaultRetryer) RetryRules(r *request.Request) time.Duration {\n\t// Set the upper limit of delay in retrying at ~five minutes\n\tminTime := 30\n\tthrottle := d.shouldThrottle(r)\n\tif throttle {\n\t\tif delay, ok := getRetryDelay(r); ok {\n\t\t\treturn delay\n\t\t}\n\n\t\tminTime = 500\n\t}\n\n\tretryCount := r.RetryCount\n\tif throttle && retryCount > 8 {\n\t\tretryCount = 8\n\t} else if retryCount > 13 {\n\t\tretryCount = 13\n\t}\n\n\tdelay := (1 << uint(retryCount)) * (sdkrand.SeededRand.Intn(minTime) + minTime)\n\treturn time.Duration(delay) * time.Millisecond\n}\n\n// ShouldRetry returns true if the request should be retried.\nfunc (d DefaultRetryer) ShouldRetry(r *request.Request) bool {\n\t// If one of the other handlers already set the retry state\n\t// we don't want to override it based on the service's state\n\tif r.Retryable != nil {\n\t\treturn *r.Retryable\n\t}\n\n\tif r.HTTPResponse.StatusCode >= 500 && r.HTTPResponse.StatusCode != 501 {\n\t\treturn true\n\t}\n\treturn r.IsErrorRetryable() || d.shouldThrottle(r)\n}\n\n// ShouldThrottle returns true if the request should be throttled.\nfunc (d DefaultRetryer) shouldThrottle(r *request.Request) bool {\n\tswitch r.HTTPResponse.StatusCode {\n\tcase 429:\n\tcase 502:\n\tcase 503:\n\tcase 504:\n\tdefault:\n\t\treturn r.IsErrorThrottle()\n\t}\n\n\treturn true\n}\n\n// This will look in the Retry-After header, RFC 7231, for how long\n// it will wait before attempting another request\nfunc getRetryDelay(r *request.Request) (time.Duration, bool) {\n\tif !canUseRetryAfterHeader(r) {\n\t\treturn 0, false\n\t}\n\n\tdelayStr := r.HTTPResponse.Header.Get(\"Retry-After\")\n\tif len(delayStr) == 0 {\n\t\treturn 0, false\n\t}\n\n\tdelay, err := strconv.Atoi(delayStr)\n\tif err != nil {\n\t\treturn 0, false\n\t}\n\n\treturn time.Duration(delay) * time.Second, true\n}\n\n// Will look at the status code to see if the retry header pertains to\n// the status code.\nfunc canUseRetryAfterHeader(r *request.Request) bool {\n\tswitch r.HTTPResponse.StatusCode {\n\tcase 429:\n\tcase 503:\n\tdefault:\n\t\treturn false\n\t}\n\n\treturn true\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/client/logger.go",
    "content": "package client\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"net/http/httputil\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-go/aws/request\"\n)\n\nconst logReqMsg = `DEBUG: Request %s/%s Details:\n---[ REQUEST POST-SIGN ]-----------------------------\n%s\n-----------------------------------------------------`\n\nconst logReqErrMsg = `DEBUG ERROR: Request %s/%s:\n---[ REQUEST DUMP ERROR ]-----------------------------\n%s\n------------------------------------------------------`\n\ntype logWriter struct {\n\t// Logger is what we will use to log the payload of a response.\n\tLogger aws.Logger\n\t// buf stores the contents of what has been read\n\tbuf *bytes.Buffer\n}\n\nfunc (logger *logWriter) Write(b []byte) (int, error) {\n\treturn logger.buf.Write(b)\n}\n\ntype teeReaderCloser struct {\n\t// io.Reader will be a tee reader that is used during logging.\n\t// This structure will read from a body and write the contents to a logger.\n\tio.Reader\n\t// Source is used just to close when we are done reading.\n\tSource io.ReadCloser\n}\n\nfunc (reader *teeReaderCloser) Close() error {\n\treturn reader.Source.Close()\n}\n\n// LogHTTPRequestHandler is a SDK request handler to log the HTTP request sent\n// to a service. Will include the HTTP request body if the LogLevel of the\n// request matches LogDebugWithHTTPBody.\nvar LogHTTPRequestHandler = request.NamedHandler{\n\tName: \"awssdk.client.LogRequest\",\n\tFn:   logRequest,\n}\n\nfunc logRequest(r *request.Request) {\n\tlogBody := r.Config.LogLevel.Matches(aws.LogDebugWithHTTPBody)\n\tbodySeekable := aws.IsReaderSeekable(r.Body)\n\n\tb, err := httputil.DumpRequestOut(r.HTTPRequest, logBody)\n\tif err != nil {\n\t\tr.Config.Logger.Log(fmt.Sprintf(logReqErrMsg,\n\t\t\tr.ClientInfo.ServiceName, r.Operation.Name, err))\n\t\treturn\n\t}\n\n\tif logBody {\n\t\tif !bodySeekable {\n\t\t\tr.SetReaderBody(aws.ReadSeekCloser(r.HTTPRequest.Body))\n\t\t}\n\t\t// Reset the request body because dumpRequest will re-wrap the r.HTTPRequest's\n\t\t// Body as a NoOpCloser and will not be reset after read by the HTTP\n\t\t// client reader.\n\t\tr.ResetBody()\n\t}\n\n\tr.Config.Logger.Log(fmt.Sprintf(logReqMsg,\n\t\tr.ClientInfo.ServiceName, r.Operation.Name, string(b)))\n}\n\n// LogHTTPRequestHeaderHandler is a SDK request handler to log the HTTP request sent\n// to a service. Will only log the HTTP request's headers. The request payload\n// will not be read.\nvar LogHTTPRequestHeaderHandler = request.NamedHandler{\n\tName: \"awssdk.client.LogRequestHeader\",\n\tFn:   logRequestHeader,\n}\n\nfunc logRequestHeader(r *request.Request) {\n\tb, err := httputil.DumpRequestOut(r.HTTPRequest, false)\n\tif err != nil {\n\t\tr.Config.Logger.Log(fmt.Sprintf(logReqErrMsg,\n\t\t\tr.ClientInfo.ServiceName, r.Operation.Name, err))\n\t\treturn\n\t}\n\n\tr.Config.Logger.Log(fmt.Sprintf(logReqMsg,\n\t\tr.ClientInfo.ServiceName, r.Operation.Name, string(b)))\n}\n\nconst logRespMsg = `DEBUG: Response %s/%s Details:\n---[ RESPONSE ]--------------------------------------\n%s\n-----------------------------------------------------`\n\nconst logRespErrMsg = `DEBUG ERROR: Response %s/%s:\n---[ RESPONSE DUMP ERROR ]-----------------------------\n%s\n-----------------------------------------------------`\n\n// LogHTTPResponseHandler is a SDK request handler to log the HTTP response\n// received from a service. Will include the HTTP response body if the LogLevel\n// of the request matches LogDebugWithHTTPBody.\nvar LogHTTPResponseHandler = request.NamedHandler{\n\tName: \"awssdk.client.LogResponse\",\n\tFn:   logResponse,\n}\n\nfunc logResponse(r *request.Request) {\n\tlw := &logWriter{r.Config.Logger, bytes.NewBuffer(nil)}\n\n\tif r.HTTPResponse == nil {\n\t\tlw.Logger.Log(fmt.Sprintf(logRespErrMsg,\n\t\t\tr.ClientInfo.ServiceName, r.Operation.Name, \"request's HTTPResponse is nil\"))\n\t\treturn\n\t}\n\n\tlogBody := r.Config.LogLevel.Matches(aws.LogDebugWithHTTPBody)\n\tif logBody {\n\t\tr.HTTPResponse.Body = &teeReaderCloser{\n\t\t\tReader: io.TeeReader(r.HTTPResponse.Body, lw),\n\t\t\tSource: r.HTTPResponse.Body,\n\t\t}\n\t}\n\n\thandlerFn := func(req *request.Request) {\n\t\tb, err := httputil.DumpResponse(req.HTTPResponse, false)\n\t\tif err != nil {\n\t\t\tlw.Logger.Log(fmt.Sprintf(logRespErrMsg,\n\t\t\t\treq.ClientInfo.ServiceName, req.Operation.Name, err))\n\t\t\treturn\n\t\t}\n\n\t\tlw.Logger.Log(fmt.Sprintf(logRespMsg,\n\t\t\treq.ClientInfo.ServiceName, req.Operation.Name, string(b)))\n\n\t\tif logBody {\n\t\t\tb, err := ioutil.ReadAll(lw.buf)\n\t\t\tif err != nil {\n\t\t\t\tlw.Logger.Log(fmt.Sprintf(logRespErrMsg,\n\t\t\t\t\treq.ClientInfo.ServiceName, req.Operation.Name, err))\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tlw.Logger.Log(string(b))\n\t\t}\n\t}\n\n\tconst handlerName = \"awsdk.client.LogResponse.ResponseBody\"\n\n\tr.Handlers.Unmarshal.SetBackNamed(request.NamedHandler{\n\t\tName: handlerName, Fn: handlerFn,\n\t})\n\tr.Handlers.UnmarshalError.SetBackNamed(request.NamedHandler{\n\t\tName: handlerName, Fn: handlerFn,\n\t})\n}\n\n// LogHTTPResponseHeaderHandler is a SDK request handler to log the HTTP\n// response received from a service. Will only log the HTTP response's headers.\n// The response payload will not be read.\nvar LogHTTPResponseHeaderHandler = request.NamedHandler{\n\tName: \"awssdk.client.LogResponseHeader\",\n\tFn:   logResponseHeader,\n}\n\nfunc logResponseHeader(r *request.Request) {\n\tif r.Config.Logger == nil {\n\t\treturn\n\t}\n\n\tb, err := httputil.DumpResponse(r.HTTPResponse, false)\n\tif err != nil {\n\t\tr.Config.Logger.Log(fmt.Sprintf(logRespErrMsg,\n\t\t\tr.ClientInfo.ServiceName, r.Operation.Name, err))\n\t\treturn\n\t}\n\n\tr.Config.Logger.Log(fmt.Sprintf(logRespMsg,\n\t\tr.ClientInfo.ServiceName, r.Operation.Name, string(b)))\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/client/metadata/client_info.go",
    "content": "package metadata\n\n// ClientInfo wraps immutable data from the client.Client structure.\ntype ClientInfo struct {\n\tServiceName   string\n\tServiceID     string\n\tAPIVersion    string\n\tEndpoint      string\n\tSigningName   string\n\tSigningRegion string\n\tJSONVersion   string\n\tTargetPrefix  string\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/config.go",
    "content": "package aws\n\nimport (\n\t\"net/http\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go/aws/credentials\"\n\t\"github.com/aws/aws-sdk-go/aws/endpoints\"\n)\n\n// UseServiceDefaultRetries instructs the config to use the service's own\n// default number of retries. This will be the default action if\n// Config.MaxRetries is nil also.\nconst UseServiceDefaultRetries = -1\n\n// RequestRetryer is an alias for a type that implements the request.Retryer\n// interface.\ntype RequestRetryer interface{}\n\n// A Config provides service configuration for service clients. By default,\n// all clients will use the defaults.DefaultConfig structure.\n//\n//     // Create Session with MaxRetry configuration to be shared by multiple\n//     // service clients.\n//     sess := session.Must(session.NewSession(&aws.Config{\n//         MaxRetries: aws.Int(3),\n//     }))\n//\n//     // Create S3 service client with a specific Region.\n//     svc := s3.New(sess, &aws.Config{\n//         Region: aws.String(\"us-west-2\"),\n//     })\ntype Config struct {\n\t// Enables verbose error printing of all credential chain errors.\n\t// Should be used when wanting to see all errors while attempting to\n\t// retrieve credentials.\n\tCredentialsChainVerboseErrors *bool\n\n\t// The credentials object to use when signing requests. Defaults to a\n\t// chain of credential providers to search for credentials in environment\n\t// variables, shared credential file, and EC2 Instance Roles.\n\tCredentials *credentials.Credentials\n\n\t// An optional endpoint URL (hostname only or fully qualified URI)\n\t// that overrides the default generated endpoint for a client. Set this\n\t// to `\"\"` to use the default generated endpoint.\n\t//\n\t// Note: You must still provide a `Region` value when specifying an\n\t// endpoint for a client.\n\tEndpoint *string\n\n\t// The resolver to use for looking up endpoints for AWS service clients\n\t// to use based on region.\n\tEndpointResolver endpoints.Resolver\n\n\t// EnforceShouldRetryCheck is used in the AfterRetryHandler to always call\n\t// ShouldRetry regardless of whether or not if request.Retryable is set.\n\t// This will utilize ShouldRetry method of custom retryers. If EnforceShouldRetryCheck\n\t// is not set, then ShouldRetry will only be called if request.Retryable is nil.\n\t// Proper handling of the request.Retryable field is important when setting this field.\n\tEnforceShouldRetryCheck *bool\n\n\t// The region to send requests to. This parameter is required and must\n\t// be configured globally or on a per-client basis unless otherwise\n\t// noted. A full list of regions is found in the \"Regions and Endpoints\"\n\t// document.\n\t//\n\t// See http://docs.aws.amazon.com/general/latest/gr/rande.html for AWS\n\t// Regions and Endpoints.\n\tRegion *string\n\n\t// Set this to `true` to disable SSL when sending requests. Defaults\n\t// to `false`.\n\tDisableSSL *bool\n\n\t// The HTTP client to use when sending requests. Defaults to\n\t// `http.DefaultClient`.\n\tHTTPClient *http.Client\n\n\t// An integer value representing the logging level. The default log level\n\t// is zero (LogOff), which represents no logging. To enable logging set\n\t// to a LogLevel Value.\n\tLogLevel *LogLevelType\n\n\t// The logger writer interface to write logging messages to. Defaults to\n\t// standard out.\n\tLogger Logger\n\n\t// The maximum number of times that a request will be retried for failures.\n\t// Defaults to -1, which defers the max retry setting to the service\n\t// specific configuration.\n\tMaxRetries *int\n\n\t// Retryer guides how HTTP requests should be retried in case of\n\t// recoverable failures.\n\t//\n\t// When nil or the value does not implement the request.Retryer interface,\n\t// the client.DefaultRetryer will be used.\n\t//\n\t// When both Retryer and MaxRetries are non-nil, the former is used and\n\t// the latter ignored.\n\t//\n\t// To set the Retryer field in a type-safe manner and with chaining, use\n\t// the request.WithRetryer helper function:\n\t//\n\t//   cfg := request.WithRetryer(aws.NewConfig(), myRetryer)\n\t//\n\tRetryer RequestRetryer\n\n\t// Disables semantic parameter validation, which validates input for\n\t// missing required fields and/or other semantic request input errors.\n\tDisableParamValidation *bool\n\n\t// Disables the computation of request and response checksums, e.g.,\n\t// CRC32 checksums in Amazon DynamoDB.\n\tDisableComputeChecksums *bool\n\n\t// Set this to `true` to force the request to use path-style addressing,\n\t// i.e., `http://s3.amazonaws.com/BUCKET/KEY`. By default, the S3 client\n\t// will use virtual hosted bucket addressing when possible\n\t// (`http://BUCKET.s3.amazonaws.com/KEY`).\n\t//\n\t// Note: This configuration option is specific to the Amazon S3 service.\n\t//\n\t// See http://docs.aws.amazon.com/AmazonS3/latest/dev/VirtualHosting.html\n\t// for Amazon S3: Virtual Hosting of Buckets\n\tS3ForcePathStyle *bool\n\n\t// Set this to `true` to disable the SDK adding the `Expect: 100-Continue`\n\t// header to PUT requests over 2MB of content. 100-Continue instructs the\n\t// HTTP client not to send the body until the service responds with a\n\t// `continue` status. This is useful to prevent sending the request body\n\t// until after the request is authenticated, and validated.\n\t//\n\t// http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html\n\t//\n\t// 100-Continue is only enabled for Go 1.6 and above. See `http.Transport`'s\n\t// `ExpectContinueTimeout` for information on adjusting the continue wait\n\t// timeout. https://golang.org/pkg/net/http/#Transport\n\t//\n\t// You should use this flag to disble 100-Continue if you experience issues\n\t// with proxies or third party S3 compatible services.\n\tS3Disable100Continue *bool\n\n\t// Set this to `true` to enable S3 Accelerate feature. For all operations\n\t// compatible with S3 Accelerate will use the accelerate endpoint for\n\t// requests. Requests not compatible will fall back to normal S3 requests.\n\t//\n\t// The bucket must be enable for accelerate to be used with S3 client with\n\t// accelerate enabled. If the bucket is not enabled for accelerate an error\n\t// will be returned. The bucket name must be DNS compatible to also work\n\t// with accelerate.\n\tS3UseAccelerate *bool\n\n\t// S3DisableContentMD5Validation config option is temporarily disabled,\n\t// For S3 GetObject API calls, #1837.\n\t//\n\t// Set this to `true` to disable the S3 service client from automatically\n\t// adding the ContentMD5 to S3 Object Put and Upload API calls. This option\n\t// will also disable the SDK from performing object ContentMD5 validation\n\t// on GetObject API calls.\n\tS3DisableContentMD5Validation *bool\n\n\t// Set this to `true` to disable the EC2Metadata client from overriding the\n\t// default http.Client's Timeout. This is helpful if you do not want the\n\t// EC2Metadata client to create a new http.Client. This options is only\n\t// meaningful if you're not already using a custom HTTP client with the\n\t// SDK. Enabled by default.\n\t//\n\t// Must be set and provided to the session.NewSession() in order to disable\n\t// the EC2Metadata overriding the timeout for default credentials chain.\n\t//\n\t// Example:\n\t//    sess := session.Must(session.NewSession(aws.NewConfig()\n\t//       .WithEC2MetadataDiableTimeoutOverride(true)))\n\t//\n\t//    svc := s3.New(sess)\n\t//\n\tEC2MetadataDisableTimeoutOverride *bool\n\n\t// Instructs the endpoint to be generated for a service client to\n\t// be the dual stack endpoint. The dual stack endpoint will support\n\t// both IPv4 and IPv6 addressing.\n\t//\n\t// Setting this for a service which does not support dual stack will fail\n\t// to make requets. It is not recommended to set this value on the session\n\t// as it will apply to all service clients created with the session. Even\n\t// services which don't support dual stack endpoints.\n\t//\n\t// If the Endpoint config value is also provided the UseDualStack flag\n\t// will be ignored.\n\t//\n\t// Only supported with.\n\t//\n\t//     sess := session.Must(session.NewSession())\n\t//\n\t//     svc := s3.New(sess, &aws.Config{\n\t//         UseDualStack: aws.Bool(true),\n\t//     })\n\tUseDualStack *bool\n\n\t// SleepDelay is an override for the func the SDK will call when sleeping\n\t// during the lifecycle of a request. Specifically this will be used for\n\t// request delays. This value should only be used for testing. To adjust\n\t// the delay of a request see the aws/client.DefaultRetryer and\n\t// aws/request.Retryer.\n\t//\n\t// SleepDelay will prevent any Context from being used for canceling retry\n\t// delay of an API operation. It is recommended to not use SleepDelay at all\n\t// and specify a Retryer instead.\n\tSleepDelay func(time.Duration)\n\n\t// DisableRestProtocolURICleaning will not clean the URL path when making rest protocol requests.\n\t// Will default to false. This would only be used for empty directory names in s3 requests.\n\t//\n\t// Example:\n\t//    sess := session.Must(session.NewSession(&aws.Config{\n\t//         DisableRestProtocolURICleaning: aws.Bool(true),\n\t//    }))\n\t//\n\t//    svc := s3.New(sess)\n\t//    out, err := svc.GetObject(&s3.GetObjectInput {\n\t//    \tBucket: aws.String(\"bucketname\"),\n\t//    \tKey: aws.String(\"//foo//bar//moo\"),\n\t//    })\n\tDisableRestProtocolURICleaning *bool\n\n\t// EnableEndpointDiscovery will allow for endpoint discovery on operations that\n\t// have the definition in its model. By default, endpoint discovery is off.\n\t//\n\t// Example:\n\t//    sess := session.Must(session.NewSession(&aws.Config{\n\t//         EnableEndpointDiscovery: aws.Bool(true),\n\t//    }))\n\t//\n\t//    svc := s3.New(sess)\n\t//    out, err := svc.GetObject(&s3.GetObjectInput {\n\t//    \tBucket: aws.String(\"bucketname\"),\n\t//    \tKey: aws.String(\"/foo/bar/moo\"),\n\t//    })\n\tEnableEndpointDiscovery *bool\n\n\t// DisableEndpointHostPrefix will disable the SDK's behavior of prefixing\n\t// request endpoint hosts with modeled information.\n\t//\n\t// Disabling this feature is useful when you want to use local endpoints\n\t// for testing that do not support the modeled host prefix pattern.\n\tDisableEndpointHostPrefix *bool\n}\n\n// NewConfig returns a new Config pointer that can be chained with builder\n// methods to set multiple configuration values inline without using pointers.\n//\n//     // Create Session with MaxRetry configuration to be shared by multiple\n//     // service clients.\n//     sess := session.Must(session.NewSession(aws.NewConfig().\n//         WithMaxRetries(3),\n//     ))\n//\n//     // Create S3 service client with a specific Region.\n//     svc := s3.New(sess, aws.NewConfig().\n//         WithRegion(\"us-west-2\"),\n//     )\nfunc NewConfig() *Config {\n\treturn &Config{}\n}\n\n// WithCredentialsChainVerboseErrors sets a config verbose errors boolean and returning\n// a Config pointer.\nfunc (c *Config) WithCredentialsChainVerboseErrors(verboseErrs bool) *Config {\n\tc.CredentialsChainVerboseErrors = &verboseErrs\n\treturn c\n}\n\n// WithCredentials sets a config Credentials value returning a Config pointer\n// for chaining.\nfunc (c *Config) WithCredentials(creds *credentials.Credentials) *Config {\n\tc.Credentials = creds\n\treturn c\n}\n\n// WithEndpoint sets a config Endpoint value returning a Config pointer for\n// chaining.\nfunc (c *Config) WithEndpoint(endpoint string) *Config {\n\tc.Endpoint = &endpoint\n\treturn c\n}\n\n// WithEndpointResolver sets a config EndpointResolver value returning a\n// Config pointer for chaining.\nfunc (c *Config) WithEndpointResolver(resolver endpoints.Resolver) *Config {\n\tc.EndpointResolver = resolver\n\treturn c\n}\n\n// WithRegion sets a config Region value returning a Config pointer for\n// chaining.\nfunc (c *Config) WithRegion(region string) *Config {\n\tc.Region = &region\n\treturn c\n}\n\n// WithDisableSSL sets a config DisableSSL value returning a Config pointer\n// for chaining.\nfunc (c *Config) WithDisableSSL(disable bool) *Config {\n\tc.DisableSSL = &disable\n\treturn c\n}\n\n// WithHTTPClient sets a config HTTPClient value returning a Config pointer\n// for chaining.\nfunc (c *Config) WithHTTPClient(client *http.Client) *Config {\n\tc.HTTPClient = client\n\treturn c\n}\n\n// WithMaxRetries sets a config MaxRetries value returning a Config pointer\n// for chaining.\nfunc (c *Config) WithMaxRetries(max int) *Config {\n\tc.MaxRetries = &max\n\treturn c\n}\n\n// WithDisableParamValidation sets a config DisableParamValidation value\n// returning a Config pointer for chaining.\nfunc (c *Config) WithDisableParamValidation(disable bool) *Config {\n\tc.DisableParamValidation = &disable\n\treturn c\n}\n\n// WithDisableComputeChecksums sets a config DisableComputeChecksums value\n// returning a Config pointer for chaining.\nfunc (c *Config) WithDisableComputeChecksums(disable bool) *Config {\n\tc.DisableComputeChecksums = &disable\n\treturn c\n}\n\n// WithLogLevel sets a config LogLevel value returning a Config pointer for\n// chaining.\nfunc (c *Config) WithLogLevel(level LogLevelType) *Config {\n\tc.LogLevel = &level\n\treturn c\n}\n\n// WithLogger sets a config Logger value returning a Config pointer for\n// chaining.\nfunc (c *Config) WithLogger(logger Logger) *Config {\n\tc.Logger = logger\n\treturn c\n}\n\n// WithS3ForcePathStyle sets a config S3ForcePathStyle value returning a Config\n// pointer for chaining.\nfunc (c *Config) WithS3ForcePathStyle(force bool) *Config {\n\tc.S3ForcePathStyle = &force\n\treturn c\n}\n\n// WithS3Disable100Continue sets a config S3Disable100Continue value returning\n// a Config pointer for chaining.\nfunc (c *Config) WithS3Disable100Continue(disable bool) *Config {\n\tc.S3Disable100Continue = &disable\n\treturn c\n}\n\n// WithS3UseAccelerate sets a config S3UseAccelerate value returning a Config\n// pointer for chaining.\nfunc (c *Config) WithS3UseAccelerate(enable bool) *Config {\n\tc.S3UseAccelerate = &enable\n\treturn c\n\n}\n\n// WithS3DisableContentMD5Validation sets a config\n// S3DisableContentMD5Validation value returning a Config pointer for chaining.\nfunc (c *Config) WithS3DisableContentMD5Validation(enable bool) *Config {\n\tc.S3DisableContentMD5Validation = &enable\n\treturn c\n\n}\n\n// WithUseDualStack sets a config UseDualStack value returning a Config\n// pointer for chaining.\nfunc (c *Config) WithUseDualStack(enable bool) *Config {\n\tc.UseDualStack = &enable\n\treturn c\n}\n\n// WithEC2MetadataDisableTimeoutOverride sets a config EC2MetadataDisableTimeoutOverride value\n// returning a Config pointer for chaining.\nfunc (c *Config) WithEC2MetadataDisableTimeoutOverride(enable bool) *Config {\n\tc.EC2MetadataDisableTimeoutOverride = &enable\n\treturn c\n}\n\n// WithSleepDelay overrides the function used to sleep while waiting for the\n// next retry. Defaults to time.Sleep.\nfunc (c *Config) WithSleepDelay(fn func(time.Duration)) *Config {\n\tc.SleepDelay = fn\n\treturn c\n}\n\n// WithEndpointDiscovery will set whether or not to use endpoint discovery.\nfunc (c *Config) WithEndpointDiscovery(t bool) *Config {\n\tc.EnableEndpointDiscovery = &t\n\treturn c\n}\n\n// WithDisableEndpointHostPrefix will set whether or not to use modeled host prefix\n// when making requests.\nfunc (c *Config) WithDisableEndpointHostPrefix(t bool) *Config {\n\tc.DisableEndpointHostPrefix = &t\n\treturn c\n}\n\n// MergeIn merges the passed in configs into the existing config object.\nfunc (c *Config) MergeIn(cfgs ...*Config) {\n\tfor _, other := range cfgs {\n\t\tmergeInConfig(c, other)\n\t}\n}\n\nfunc mergeInConfig(dst *Config, other *Config) {\n\tif other == nil {\n\t\treturn\n\t}\n\n\tif other.CredentialsChainVerboseErrors != nil {\n\t\tdst.CredentialsChainVerboseErrors = other.CredentialsChainVerboseErrors\n\t}\n\n\tif other.Credentials != nil {\n\t\tdst.Credentials = other.Credentials\n\t}\n\n\tif other.Endpoint != nil {\n\t\tdst.Endpoint = other.Endpoint\n\t}\n\n\tif other.EndpointResolver != nil {\n\t\tdst.EndpointResolver = other.EndpointResolver\n\t}\n\n\tif other.Region != nil {\n\t\tdst.Region = other.Region\n\t}\n\n\tif other.DisableSSL != nil {\n\t\tdst.DisableSSL = other.DisableSSL\n\t}\n\n\tif other.HTTPClient != nil {\n\t\tdst.HTTPClient = other.HTTPClient\n\t}\n\n\tif other.LogLevel != nil {\n\t\tdst.LogLevel = other.LogLevel\n\t}\n\n\tif other.Logger != nil {\n\t\tdst.Logger = other.Logger\n\t}\n\n\tif other.MaxRetries != nil {\n\t\tdst.MaxRetries = other.MaxRetries\n\t}\n\n\tif other.Retryer != nil {\n\t\tdst.Retryer = other.Retryer\n\t}\n\n\tif other.DisableParamValidation != nil {\n\t\tdst.DisableParamValidation = other.DisableParamValidation\n\t}\n\n\tif other.DisableComputeChecksums != nil {\n\t\tdst.DisableComputeChecksums = other.DisableComputeChecksums\n\t}\n\n\tif other.S3ForcePathStyle != nil {\n\t\tdst.S3ForcePathStyle = other.S3ForcePathStyle\n\t}\n\n\tif other.S3Disable100Continue != nil {\n\t\tdst.S3Disable100Continue = other.S3Disable100Continue\n\t}\n\n\tif other.S3UseAccelerate != nil {\n\t\tdst.S3UseAccelerate = other.S3UseAccelerate\n\t}\n\n\tif other.S3DisableContentMD5Validation != nil {\n\t\tdst.S3DisableContentMD5Validation = other.S3DisableContentMD5Validation\n\t}\n\n\tif other.UseDualStack != nil {\n\t\tdst.UseDualStack = other.UseDualStack\n\t}\n\n\tif other.EC2MetadataDisableTimeoutOverride != nil {\n\t\tdst.EC2MetadataDisableTimeoutOverride = other.EC2MetadataDisableTimeoutOverride\n\t}\n\n\tif other.SleepDelay != nil {\n\t\tdst.SleepDelay = other.SleepDelay\n\t}\n\n\tif other.DisableRestProtocolURICleaning != nil {\n\t\tdst.DisableRestProtocolURICleaning = other.DisableRestProtocolURICleaning\n\t}\n\n\tif other.EnforceShouldRetryCheck != nil {\n\t\tdst.EnforceShouldRetryCheck = other.EnforceShouldRetryCheck\n\t}\n\n\tif other.EnableEndpointDiscovery != nil {\n\t\tdst.EnableEndpointDiscovery = other.EnableEndpointDiscovery\n\t}\n\n\tif other.DisableEndpointHostPrefix != nil {\n\t\tdst.DisableEndpointHostPrefix = other.DisableEndpointHostPrefix\n\t}\n}\n\n// Copy will return a shallow copy of the Config object. If any additional\n// configurations are provided they will be merged into the new config returned.\nfunc (c *Config) Copy(cfgs ...*Config) *Config {\n\tdst := &Config{}\n\tdst.MergeIn(c)\n\n\tfor _, cfg := range cfgs {\n\t\tdst.MergeIn(cfg)\n\t}\n\n\treturn dst\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/context_1_5.go",
    "content": "// +build !go1.9\n\npackage aws\n\nimport \"time\"\n\n// Context is an copy of the Go v1.7 stdlib's context.Context interface.\n// It is represented as a SDK interface to enable you to use the \"WithContext\"\n// API methods with Go v1.6 and a Context type such as golang.org/x/net/context.\n//\n// See https://golang.org/pkg/context on how to use contexts.\ntype Context interface {\n\t// Deadline returns the time when work done on behalf of this context\n\t// should be canceled. Deadline returns ok==false when no deadline is\n\t// set. Successive calls to Deadline return the same results.\n\tDeadline() (deadline time.Time, ok bool)\n\n\t// Done returns a channel that's closed when work done on behalf of this\n\t// context should be canceled. Done may return nil if this context can\n\t// never be canceled. Successive calls to Done return the same value.\n\tDone() <-chan struct{}\n\n\t// Err returns a non-nil error value after Done is closed. Err returns\n\t// Canceled if the context was canceled or DeadlineExceeded if the\n\t// context's deadline passed. No other values for Err are defined.\n\t// After Done is closed, successive calls to Err return the same value.\n\tErr() error\n\n\t// Value returns the value associated with this context for key, or nil\n\t// if no value is associated with key. Successive calls to Value with\n\t// the same key returns the same result.\n\t//\n\t// Use context values only for request-scoped data that transits\n\t// processes and API boundaries, not for passing optional parameters to\n\t// functions.\n\tValue(key interface{}) interface{}\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/context_1_9.go",
    "content": "// +build go1.9\n\npackage aws\n\nimport \"context\"\n\n// Context is an alias of the Go stdlib's context.Context interface.\n// It can be used within the SDK's API operation \"WithContext\" methods.\n//\n// See https://golang.org/pkg/context on how to use contexts.\ntype Context = context.Context\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/context_background_1_5.go",
    "content": "// +build !go1.7\n\npackage aws\n\nimport \"time\"\n\n// An emptyCtx is a copy of the Go 1.7 context.emptyCtx type. This is copied to\n// provide a 1.6 and 1.5 safe version of context that is compatible with Go\n// 1.7's Context.\n//\n// An emptyCtx is never canceled, has no values, and has no deadline. It is not\n// struct{}, since vars of this type must have distinct addresses.\ntype emptyCtx int\n\nfunc (*emptyCtx) Deadline() (deadline time.Time, ok bool) {\n\treturn\n}\n\nfunc (*emptyCtx) Done() <-chan struct{} {\n\treturn nil\n}\n\nfunc (*emptyCtx) Err() error {\n\treturn nil\n}\n\nfunc (*emptyCtx) Value(key interface{}) interface{} {\n\treturn nil\n}\n\nfunc (e *emptyCtx) String() string {\n\tswitch e {\n\tcase backgroundCtx:\n\t\treturn \"aws.BackgroundContext\"\n\t}\n\treturn \"unknown empty Context\"\n}\n\nvar (\n\tbackgroundCtx = new(emptyCtx)\n)\n\n// BackgroundContext returns a context that will never be canceled, has no\n// values, and no deadline. This context is used by the SDK to provide\n// backwards compatibility with non-context API operations and functionality.\n//\n// Go 1.6 and before:\n// This context function is equivalent to context.Background in the Go stdlib.\n//\n// Go 1.7 and later:\n// The context returned will be the value returned by context.Background()\n//\n// See https://golang.org/pkg/context for more information on Contexts.\nfunc BackgroundContext() Context {\n\treturn backgroundCtx\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/context_background_1_7.go",
    "content": "// +build go1.7\n\npackage aws\n\nimport \"context\"\n\n// BackgroundContext returns a context that will never be canceled, has no\n// values, and no deadline. This context is used by the SDK to provide\n// backwards compatibility with non-context API operations and functionality.\n//\n// Go 1.6 and before:\n// This context function is equivalent to context.Background in the Go stdlib.\n//\n// Go 1.7 and later:\n// The context returned will be the value returned by context.Background()\n//\n// See https://golang.org/pkg/context for more information on Contexts.\nfunc BackgroundContext() Context {\n\treturn context.Background()\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/context_sleep.go",
    "content": "package aws\n\nimport (\n\t\"time\"\n)\n\n// SleepWithContext will wait for the timer duration to expire, or the context\n// is canceled. Which ever happens first. If the context is canceled the Context's\n// error will be returned.\n//\n// Expects Context to always return a non-nil error if the Done channel is closed.\nfunc SleepWithContext(ctx Context, dur time.Duration) error {\n\tt := time.NewTimer(dur)\n\tdefer t.Stop()\n\n\tselect {\n\tcase <-t.C:\n\t\tbreak\n\tcase <-ctx.Done():\n\t\treturn ctx.Err()\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/convert_types.go",
    "content": "package aws\n\nimport \"time\"\n\n// String returns a pointer to the string value passed in.\nfunc String(v string) *string {\n\treturn &v\n}\n\n// StringValue returns the value of the string pointer passed in or\n// \"\" if the pointer is nil.\nfunc StringValue(v *string) string {\n\tif v != nil {\n\t\treturn *v\n\t}\n\treturn \"\"\n}\n\n// StringSlice converts a slice of string values into a slice of\n// string pointers\nfunc StringSlice(src []string) []*string {\n\tdst := make([]*string, len(src))\n\tfor i := 0; i < len(src); i++ {\n\t\tdst[i] = &(src[i])\n\t}\n\treturn dst\n}\n\n// StringValueSlice converts a slice of string pointers into a slice of\n// string values\nfunc StringValueSlice(src []*string) []string {\n\tdst := make([]string, len(src))\n\tfor i := 0; i < len(src); i++ {\n\t\tif src[i] != nil {\n\t\t\tdst[i] = *(src[i])\n\t\t}\n\t}\n\treturn dst\n}\n\n// StringMap converts a string map of string values into a string\n// map of string pointers\nfunc StringMap(src map[string]string) map[string]*string {\n\tdst := make(map[string]*string)\n\tfor k, val := range src {\n\t\tv := val\n\t\tdst[k] = &v\n\t}\n\treturn dst\n}\n\n// StringValueMap converts a string map of string pointers into a string\n// map of string values\nfunc StringValueMap(src map[string]*string) map[string]string {\n\tdst := make(map[string]string)\n\tfor k, val := range src {\n\t\tif val != nil {\n\t\t\tdst[k] = *val\n\t\t}\n\t}\n\treturn dst\n}\n\n// Bool returns a pointer to the bool value passed in.\nfunc Bool(v bool) *bool {\n\treturn &v\n}\n\n// BoolValue returns the value of the bool pointer passed in or\n// false if the pointer is nil.\nfunc BoolValue(v *bool) bool {\n\tif v != nil {\n\t\treturn *v\n\t}\n\treturn false\n}\n\n// BoolSlice converts a slice of bool values into a slice of\n// bool pointers\nfunc BoolSlice(src []bool) []*bool {\n\tdst := make([]*bool, len(src))\n\tfor i := 0; i < len(src); i++ {\n\t\tdst[i] = &(src[i])\n\t}\n\treturn dst\n}\n\n// BoolValueSlice converts a slice of bool pointers into a slice of\n// bool values\nfunc BoolValueSlice(src []*bool) []bool {\n\tdst := make([]bool, len(src))\n\tfor i := 0; i < len(src); i++ {\n\t\tif src[i] != nil {\n\t\t\tdst[i] = *(src[i])\n\t\t}\n\t}\n\treturn dst\n}\n\n// BoolMap converts a string map of bool values into a string\n// map of bool pointers\nfunc BoolMap(src map[string]bool) map[string]*bool {\n\tdst := make(map[string]*bool)\n\tfor k, val := range src {\n\t\tv := val\n\t\tdst[k] = &v\n\t}\n\treturn dst\n}\n\n// BoolValueMap converts a string map of bool pointers into a string\n// map of bool values\nfunc BoolValueMap(src map[string]*bool) map[string]bool {\n\tdst := make(map[string]bool)\n\tfor k, val := range src {\n\t\tif val != nil {\n\t\t\tdst[k] = *val\n\t\t}\n\t}\n\treturn dst\n}\n\n// Int returns a pointer to the int value passed in.\nfunc Int(v int) *int {\n\treturn &v\n}\n\n// IntValue returns the value of the int pointer passed in or\n// 0 if the pointer is nil.\nfunc IntValue(v *int) int {\n\tif v != nil {\n\t\treturn *v\n\t}\n\treturn 0\n}\n\n// IntSlice converts a slice of int values into a slice of\n// int pointers\nfunc IntSlice(src []int) []*int {\n\tdst := make([]*int, len(src))\n\tfor i := 0; i < len(src); i++ {\n\t\tdst[i] = &(src[i])\n\t}\n\treturn dst\n}\n\n// IntValueSlice converts a slice of int pointers into a slice of\n// int values\nfunc IntValueSlice(src []*int) []int {\n\tdst := make([]int, len(src))\n\tfor i := 0; i < len(src); i++ {\n\t\tif src[i] != nil {\n\t\t\tdst[i] = *(src[i])\n\t\t}\n\t}\n\treturn dst\n}\n\n// IntMap converts a string map of int values into a string\n// map of int pointers\nfunc IntMap(src map[string]int) map[string]*int {\n\tdst := make(map[string]*int)\n\tfor k, val := range src {\n\t\tv := val\n\t\tdst[k] = &v\n\t}\n\treturn dst\n}\n\n// IntValueMap converts a string map of int pointers into a string\n// map of int values\nfunc IntValueMap(src map[string]*int) map[string]int {\n\tdst := make(map[string]int)\n\tfor k, val := range src {\n\t\tif val != nil {\n\t\t\tdst[k] = *val\n\t\t}\n\t}\n\treturn dst\n}\n\n// Int64 returns a pointer to the int64 value passed in.\nfunc Int64(v int64) *int64 {\n\treturn &v\n}\n\n// Int64Value returns the value of the int64 pointer passed in or\n// 0 if the pointer is nil.\nfunc Int64Value(v *int64) int64 {\n\tif v != nil {\n\t\treturn *v\n\t}\n\treturn 0\n}\n\n// Int64Slice converts a slice of int64 values into a slice of\n// int64 pointers\nfunc Int64Slice(src []int64) []*int64 {\n\tdst := make([]*int64, len(src))\n\tfor i := 0; i < len(src); i++ {\n\t\tdst[i] = &(src[i])\n\t}\n\treturn dst\n}\n\n// Int64ValueSlice converts a slice of int64 pointers into a slice of\n// int64 values\nfunc Int64ValueSlice(src []*int64) []int64 {\n\tdst := make([]int64, len(src))\n\tfor i := 0; i < len(src); i++ {\n\t\tif src[i] != nil {\n\t\t\tdst[i] = *(src[i])\n\t\t}\n\t}\n\treturn dst\n}\n\n// Int64Map converts a string map of int64 values into a string\n// map of int64 pointers\nfunc Int64Map(src map[string]int64) map[string]*int64 {\n\tdst := make(map[string]*int64)\n\tfor k, val := range src {\n\t\tv := val\n\t\tdst[k] = &v\n\t}\n\treturn dst\n}\n\n// Int64ValueMap converts a string map of int64 pointers into a string\n// map of int64 values\nfunc Int64ValueMap(src map[string]*int64) map[string]int64 {\n\tdst := make(map[string]int64)\n\tfor k, val := range src {\n\t\tif val != nil {\n\t\t\tdst[k] = *val\n\t\t}\n\t}\n\treturn dst\n}\n\n// Float64 returns a pointer to the float64 value passed in.\nfunc Float64(v float64) *float64 {\n\treturn &v\n}\n\n// Float64Value returns the value of the float64 pointer passed in or\n// 0 if the pointer is nil.\nfunc Float64Value(v *float64) float64 {\n\tif v != nil {\n\t\treturn *v\n\t}\n\treturn 0\n}\n\n// Float64Slice converts a slice of float64 values into a slice of\n// float64 pointers\nfunc Float64Slice(src []float64) []*float64 {\n\tdst := make([]*float64, len(src))\n\tfor i := 0; i < len(src); i++ {\n\t\tdst[i] = &(src[i])\n\t}\n\treturn dst\n}\n\n// Float64ValueSlice converts a slice of float64 pointers into a slice of\n// float64 values\nfunc Float64ValueSlice(src []*float64) []float64 {\n\tdst := make([]float64, len(src))\n\tfor i := 0; i < len(src); i++ {\n\t\tif src[i] != nil {\n\t\t\tdst[i] = *(src[i])\n\t\t}\n\t}\n\treturn dst\n}\n\n// Float64Map converts a string map of float64 values into a string\n// map of float64 pointers\nfunc Float64Map(src map[string]float64) map[string]*float64 {\n\tdst := make(map[string]*float64)\n\tfor k, val := range src {\n\t\tv := val\n\t\tdst[k] = &v\n\t}\n\treturn dst\n}\n\n// Float64ValueMap converts a string map of float64 pointers into a string\n// map of float64 values\nfunc Float64ValueMap(src map[string]*float64) map[string]float64 {\n\tdst := make(map[string]float64)\n\tfor k, val := range src {\n\t\tif val != nil {\n\t\t\tdst[k] = *val\n\t\t}\n\t}\n\treturn dst\n}\n\n// Time returns a pointer to the time.Time value passed in.\nfunc Time(v time.Time) *time.Time {\n\treturn &v\n}\n\n// TimeValue returns the value of the time.Time pointer passed in or\n// time.Time{} if the pointer is nil.\nfunc TimeValue(v *time.Time) time.Time {\n\tif v != nil {\n\t\treturn *v\n\t}\n\treturn time.Time{}\n}\n\n// SecondsTimeValue converts an int64 pointer to a time.Time value\n// representing seconds since Epoch or time.Time{} if the pointer is nil.\nfunc SecondsTimeValue(v *int64) time.Time {\n\tif v != nil {\n\t\treturn time.Unix((*v / 1000), 0)\n\t}\n\treturn time.Time{}\n}\n\n// MillisecondsTimeValue converts an int64 pointer to a time.Time value\n// representing milliseconds sinch Epoch or time.Time{} if the pointer is nil.\nfunc MillisecondsTimeValue(v *int64) time.Time {\n\tif v != nil {\n\t\treturn time.Unix(0, (*v * 1000000))\n\t}\n\treturn time.Time{}\n}\n\n// TimeUnixMilli returns a Unix timestamp in milliseconds from \"January 1, 1970 UTC\".\n// The result is undefined if the Unix time cannot be represented by an int64.\n// Which includes calling TimeUnixMilli on a zero Time is undefined.\n//\n// This utility is useful for service API's such as CloudWatch Logs which require\n// their unix time values to be in milliseconds.\n//\n// See Go stdlib https://golang.org/pkg/time/#Time.UnixNano for more information.\nfunc TimeUnixMilli(t time.Time) int64 {\n\treturn t.UnixNano() / int64(time.Millisecond/time.Nanosecond)\n}\n\n// TimeSlice converts a slice of time.Time values into a slice of\n// time.Time pointers\nfunc TimeSlice(src []time.Time) []*time.Time {\n\tdst := make([]*time.Time, len(src))\n\tfor i := 0; i < len(src); i++ {\n\t\tdst[i] = &(src[i])\n\t}\n\treturn dst\n}\n\n// TimeValueSlice converts a slice of time.Time pointers into a slice of\n// time.Time values\nfunc TimeValueSlice(src []*time.Time) []time.Time {\n\tdst := make([]time.Time, len(src))\n\tfor i := 0; i < len(src); i++ {\n\t\tif src[i] != nil {\n\t\t\tdst[i] = *(src[i])\n\t\t}\n\t}\n\treturn dst\n}\n\n// TimeMap converts a string map of time.Time values into a string\n// map of time.Time pointers\nfunc TimeMap(src map[string]time.Time) map[string]*time.Time {\n\tdst := make(map[string]*time.Time)\n\tfor k, val := range src {\n\t\tv := val\n\t\tdst[k] = &v\n\t}\n\treturn dst\n}\n\n// TimeValueMap converts a string map of time.Time pointers into a string\n// map of time.Time values\nfunc TimeValueMap(src map[string]*time.Time) map[string]time.Time {\n\tdst := make(map[string]time.Time)\n\tfor k, val := range src {\n\t\tif val != nil {\n\t\t\tdst[k] = *val\n\t\t}\n\t}\n\treturn dst\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/corehandlers/handlers.go",
    "content": "package corehandlers\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"regexp\"\n\t\"strconv\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n\t\"github.com/aws/aws-sdk-go/aws/credentials\"\n\t\"github.com/aws/aws-sdk-go/aws/request\"\n)\n\n// Interface for matching types which also have a Len method.\ntype lener interface {\n\tLen() int\n}\n\n// BuildContentLengthHandler builds the content length of a request based on the body,\n// or will use the HTTPRequest.Header's \"Content-Length\" if defined. If unable\n// to determine request body length and no \"Content-Length\" was specified it will panic.\n//\n// The Content-Length will only be added to the request if the length of the body\n// is greater than 0. If the body is empty or the current `Content-Length`\n// header is <= 0, the header will also be stripped.\nvar BuildContentLengthHandler = request.NamedHandler{Name: \"core.BuildContentLengthHandler\", Fn: func(r *request.Request) {\n\tvar length int64\n\n\tif slength := r.HTTPRequest.Header.Get(\"Content-Length\"); slength != \"\" {\n\t\tlength, _ = strconv.ParseInt(slength, 10, 64)\n\t} else {\n\t\tif r.Body != nil {\n\t\t\tvar err error\n\t\t\tlength, err = aws.SeekerLen(r.Body)\n\t\t\tif err != nil {\n\t\t\t\tr.Error = awserr.New(request.ErrCodeSerialization, \"failed to get request body's length\", err)\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t}\n\n\tif length > 0 {\n\t\tr.HTTPRequest.ContentLength = length\n\t\tr.HTTPRequest.Header.Set(\"Content-Length\", fmt.Sprintf(\"%d\", length))\n\t} else {\n\t\tr.HTTPRequest.ContentLength = 0\n\t\tr.HTTPRequest.Header.Del(\"Content-Length\")\n\t}\n}}\n\nvar reStatusCode = regexp.MustCompile(`^(\\d{3})`)\n\n// ValidateReqSigHandler is a request handler to ensure that the request's\n// signature doesn't expire before it is sent. This can happen when a request\n// is built and signed significantly before it is sent. Or significant delays\n// occur when retrying requests that would cause the signature to expire.\nvar ValidateReqSigHandler = request.NamedHandler{\n\tName: \"core.ValidateReqSigHandler\",\n\tFn: func(r *request.Request) {\n\t\t// Unsigned requests are not signed\n\t\tif r.Config.Credentials == credentials.AnonymousCredentials {\n\t\t\treturn\n\t\t}\n\n\t\tsignedTime := r.Time\n\t\tif !r.LastSignedAt.IsZero() {\n\t\t\tsignedTime = r.LastSignedAt\n\t\t}\n\n\t\t// 5 minutes to allow for some clock skew/delays in transmission.\n\t\t// Would be improved with aws/aws-sdk-go#423\n\t\tif signedTime.Add(5 * time.Minute).After(time.Now()) {\n\t\t\treturn\n\t\t}\n\n\t\tfmt.Println(\"request expired, resigning\")\n\t\tr.Sign()\n\t},\n}\n\n// SendHandler is a request handler to send service request using HTTP client.\nvar SendHandler = request.NamedHandler{\n\tName: \"core.SendHandler\",\n\tFn: func(r *request.Request) {\n\t\tsender := sendFollowRedirects\n\t\tif r.DisableFollowRedirects {\n\t\t\tsender = sendWithoutFollowRedirects\n\t\t}\n\n\t\tif request.NoBody == r.HTTPRequest.Body {\n\t\t\t// Strip off the request body if the NoBody reader was used as a\n\t\t\t// place holder for a request body. This prevents the SDK from\n\t\t\t// making requests with a request body when it would be invalid\n\t\t\t// to do so.\n\t\t\t//\n\t\t\t// Use a shallow copy of the http.Request to ensure the race condition\n\t\t\t// of transport on Body will not trigger\n\t\t\treqOrig, reqCopy := r.HTTPRequest, *r.HTTPRequest\n\t\t\treqCopy.Body = nil\n\t\t\tr.HTTPRequest = &reqCopy\n\t\t\tdefer func() {\n\t\t\t\tr.HTTPRequest = reqOrig\n\t\t\t}()\n\t\t}\n\n\t\tvar err error\n\t\tr.HTTPResponse, err = sender(r)\n\t\tif err != nil {\n\t\t\thandleSendError(r, err)\n\t\t}\n\t},\n}\n\nfunc sendFollowRedirects(r *request.Request) (*http.Response, error) {\n\treturn r.Config.HTTPClient.Do(r.HTTPRequest)\n}\n\nfunc sendWithoutFollowRedirects(r *request.Request) (*http.Response, error) {\n\ttransport := r.Config.HTTPClient.Transport\n\tif transport == nil {\n\t\ttransport = http.DefaultTransport\n\t}\n\n\treturn transport.RoundTrip(r.HTTPRequest)\n}\n\nfunc handleSendError(r *request.Request, err error) {\n\t// Prevent leaking if an HTTPResponse was returned. Clean up\n\t// the body.\n\tif r.HTTPResponse != nil {\n\t\tr.HTTPResponse.Body.Close()\n\t}\n\t// Capture the case where url.Error is returned for error processing\n\t// response. e.g. 301 without location header comes back as string\n\t// error and r.HTTPResponse is nil. Other URL redirect errors will\n\t// comeback in a similar method.\n\tif e, ok := err.(*url.Error); ok && e.Err != nil {\n\t\tif s := reStatusCode.FindStringSubmatch(e.Err.Error()); s != nil {\n\t\t\tcode, _ := strconv.ParseInt(s[1], 10, 64)\n\t\t\tr.HTTPResponse = &http.Response{\n\t\t\t\tStatusCode: int(code),\n\t\t\t\tStatus:     http.StatusText(int(code)),\n\t\t\t\tBody:       ioutil.NopCloser(bytes.NewReader([]byte{})),\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t}\n\tif r.HTTPResponse == nil {\n\t\t// Add a dummy request response object to ensure the HTTPResponse\n\t\t// value is consistent.\n\t\tr.HTTPResponse = &http.Response{\n\t\t\tStatusCode: int(0),\n\t\t\tStatus:     http.StatusText(int(0)),\n\t\t\tBody:       ioutil.NopCloser(bytes.NewReader([]byte{})),\n\t\t}\n\t}\n\t// Catch all other request errors.\n\tr.Error = awserr.New(\"RequestError\", \"send request failed\", err)\n\tr.Retryable = aws.Bool(true) // network errors are retryable\n\n\t// Override the error with a context canceled error, if that was canceled.\n\tctx := r.Context()\n\tselect {\n\tcase <-ctx.Done():\n\t\tr.Error = awserr.New(request.CanceledErrorCode,\n\t\t\t\"request context canceled\", ctx.Err())\n\t\tr.Retryable = aws.Bool(false)\n\tdefault:\n\t}\n}\n\n// ValidateResponseHandler is a request handler to validate service response.\nvar ValidateResponseHandler = request.NamedHandler{Name: \"core.ValidateResponseHandler\", Fn: func(r *request.Request) {\n\tif r.HTTPResponse.StatusCode == 0 || r.HTTPResponse.StatusCode >= 300 {\n\t\t// this may be replaced by an UnmarshalError handler\n\t\tr.Error = awserr.New(\"UnknownError\", \"unknown error\", nil)\n\t}\n}}\n\n// AfterRetryHandler performs final checks to determine if the request should\n// be retried and how long to delay.\nvar AfterRetryHandler = request.NamedHandler{Name: \"core.AfterRetryHandler\", Fn: func(r *request.Request) {\n\t// If one of the other handlers already set the retry state\n\t// we don't want to override it based on the service's state\n\tif r.Retryable == nil || aws.BoolValue(r.Config.EnforceShouldRetryCheck) {\n\t\tr.Retryable = aws.Bool(r.ShouldRetry(r))\n\t}\n\n\tif r.WillRetry() {\n\t\tr.RetryDelay = r.RetryRules(r)\n\n\t\tif sleepFn := r.Config.SleepDelay; sleepFn != nil {\n\t\t\t// Support SleepDelay for backwards compatibility and testing\n\t\t\tsleepFn(r.RetryDelay)\n\t\t} else if err := aws.SleepWithContext(r.Context(), r.RetryDelay); err != nil {\n\t\t\tr.Error = awserr.New(request.CanceledErrorCode,\n\t\t\t\t\"request context canceled\", err)\n\t\t\tr.Retryable = aws.Bool(false)\n\t\t\treturn\n\t\t}\n\n\t\t// when the expired token exception occurs the credentials\n\t\t// need to be expired locally so that the next request to\n\t\t// get credentials will trigger a credentials refresh.\n\t\tif r.IsErrorExpired() {\n\t\t\tr.Config.Credentials.Expire()\n\t\t}\n\n\t\tr.RetryCount++\n\t\tr.Error = nil\n\t}\n}}\n\n// ValidateEndpointHandler is a request handler to validate a request had the\n// appropriate Region and Endpoint set. Will set r.Error if the endpoint or\n// region is not valid.\nvar ValidateEndpointHandler = request.NamedHandler{Name: \"core.ValidateEndpointHandler\", Fn: func(r *request.Request) {\n\tif r.ClientInfo.SigningRegion == \"\" && aws.StringValue(r.Config.Region) == \"\" {\n\t\tr.Error = aws.ErrMissingRegion\n\t} else if r.ClientInfo.Endpoint == \"\" {\n\t\tr.Error = aws.ErrMissingEndpoint\n\t}\n}}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/corehandlers/param_validator.go",
    "content": "package corehandlers\n\nimport \"github.com/aws/aws-sdk-go/aws/request\"\n\n// ValidateParametersHandler is a request handler to validate the input parameters.\n// Validating parameters only has meaning if done prior to the request being sent.\nvar ValidateParametersHandler = request.NamedHandler{Name: \"core.ValidateParametersHandler\", Fn: func(r *request.Request) {\n\tif !r.ParamsFilled() {\n\t\treturn\n\t}\n\n\tif v, ok := r.Params.(request.Validator); ok {\n\t\tif err := v.Validate(); err != nil {\n\t\t\tr.Error = err\n\t\t}\n\t}\n}}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/corehandlers/user_agent.go",
    "content": "package corehandlers\n\nimport (\n\t\"os\"\n\t\"runtime\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-go/aws/request\"\n)\n\n// SDKVersionUserAgentHandler is a request handler for adding the SDK Version\n// to the user agent.\nvar SDKVersionUserAgentHandler = request.NamedHandler{\n\tName: \"core.SDKVersionUserAgentHandler\",\n\tFn: request.MakeAddToUserAgentHandler(aws.SDKName, aws.SDKVersion,\n\t\truntime.Version(), runtime.GOOS, runtime.GOARCH),\n}\n\nconst execEnvVar = `AWS_EXECUTION_ENV`\nconst execEnvUAKey = `exec-env`\n\n// AddHostExecEnvUserAgentHander is a request handler appending the SDK's\n// execution environment to the user agent.\n//\n// If the environment variable AWS_EXECUTION_ENV is set, its value will be\n// appended to the user agent string.\nvar AddHostExecEnvUserAgentHander = request.NamedHandler{\n\tName: \"core.AddHostExecEnvUserAgentHander\",\n\tFn: func(r *request.Request) {\n\t\tv := os.Getenv(execEnvVar)\n\t\tif len(v) == 0 {\n\t\t\treturn\n\t\t}\n\n\t\trequest.AddToUserAgent(r, execEnvUAKey+\"/\"+v)\n\t},\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/credentials/chain_provider.go",
    "content": "package credentials\n\nimport (\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n)\n\nvar (\n\t// ErrNoValidProvidersFoundInChain Is returned when there are no valid\n\t// providers in the ChainProvider.\n\t//\n\t// This has been deprecated. For verbose error messaging set\n\t// aws.Config.CredentialsChainVerboseErrors to true.\n\tErrNoValidProvidersFoundInChain = awserr.New(\"NoCredentialProviders\",\n\t\t`no valid providers in chain. Deprecated.\n\tFor verbose messaging see aws.Config.CredentialsChainVerboseErrors`,\n\t\tnil)\n)\n\n// A ChainProvider will search for a provider which returns credentials\n// and cache that provider until Retrieve is called again.\n//\n// The ChainProvider provides a way of chaining multiple providers together\n// which will pick the first available using priority order of the Providers\n// in the list.\n//\n// If none of the Providers retrieve valid credentials Value, ChainProvider's\n// Retrieve() will return the error ErrNoValidProvidersFoundInChain.\n//\n// If a Provider is found which returns valid credentials Value ChainProvider\n// will cache that Provider for all calls to IsExpired(), until Retrieve is\n// called again.\n//\n// Example of ChainProvider to be used with an EnvProvider and EC2RoleProvider.\n// In this example EnvProvider will first check if any credentials are available\n// via the environment variables. If there are none ChainProvider will check\n// the next Provider in the list, EC2RoleProvider in this case. If EC2RoleProvider\n// does not return any credentials ChainProvider will return the error\n// ErrNoValidProvidersFoundInChain\n//\n//     creds := credentials.NewChainCredentials(\n//         []credentials.Provider{\n//             &credentials.EnvProvider{},\n//             &ec2rolecreds.EC2RoleProvider{\n//                 Client: ec2metadata.New(sess),\n//             },\n//         })\n//\n//     // Usage of ChainCredentials with aws.Config\n//     svc := ec2.New(session.Must(session.NewSession(&aws.Config{\n//       Credentials: creds,\n//     })))\n//\ntype ChainProvider struct {\n\tProviders     []Provider\n\tcurr          Provider\n\tVerboseErrors bool\n}\n\n// NewChainCredentials returns a pointer to a new Credentials object\n// wrapping a chain of providers.\nfunc NewChainCredentials(providers []Provider) *Credentials {\n\treturn NewCredentials(&ChainProvider{\n\t\tProviders: append([]Provider{}, providers...),\n\t})\n}\n\n// Retrieve returns the credentials value or error if no provider returned\n// without error.\n//\n// If a provider is found it will be cached and any calls to IsExpired()\n// will return the expired state of the cached provider.\nfunc (c *ChainProvider) Retrieve() (Value, error) {\n\tvar errs []error\n\tfor _, p := range c.Providers {\n\t\tcreds, err := p.Retrieve()\n\t\tif err == nil {\n\t\t\tc.curr = p\n\t\t\treturn creds, nil\n\t\t}\n\t\terrs = append(errs, err)\n\t}\n\tc.curr = nil\n\n\tvar err error\n\terr = ErrNoValidProvidersFoundInChain\n\tif c.VerboseErrors {\n\t\terr = awserr.NewBatchError(\"NoCredentialProviders\", \"no valid providers in chain\", errs)\n\t}\n\treturn Value{}, err\n}\n\n// IsExpired will returned the expired state of the currently cached provider\n// if there is one.  If there is no current provider, true will be returned.\nfunc (c *ChainProvider) IsExpired() bool {\n\tif c.curr != nil {\n\t\treturn c.curr.IsExpired()\n\t}\n\n\treturn true\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/credentials/credentials.go",
    "content": "// Package credentials provides credential retrieval and management\n//\n// The Credentials is the primary method of getting access to and managing\n// credentials Values. Using dependency injection retrieval of the credential\n// values is handled by a object which satisfies the Provider interface.\n//\n// By default the Credentials.Get() will cache the successful result of a\n// Provider's Retrieve() until Provider.IsExpired() returns true. At which\n// point Credentials will call Provider's Retrieve() to get new credential Value.\n//\n// The Provider is responsible for determining when credentials Value have expired.\n// It is also important to note that Credentials will always call Retrieve the\n// first time Credentials.Get() is called.\n//\n// Example of using the environment variable credentials.\n//\n//     creds := credentials.NewEnvCredentials()\n//\n//     // Retrieve the credentials value\n//     credValue, err := creds.Get()\n//     if err != nil {\n//         // handle error\n//     }\n//\n// Example of forcing credentials to expire and be refreshed on the next Get().\n// This may be helpful to proactively expire credentials and refresh them sooner\n// than they would naturally expire on their own.\n//\n//     creds := credentials.NewCredentials(&ec2rolecreds.EC2RoleProvider{})\n//     creds.Expire()\n//     credsValue, err := creds.Get()\n//     // New credentials will be retrieved instead of from cache.\n//\n//\n// Custom Provider\n//\n// Each Provider built into this package also provides a helper method to generate\n// a Credentials pointer setup with the provider. To use a custom Provider just\n// create a type which satisfies the Provider interface and pass it to the\n// NewCredentials method.\n//\n//     type MyProvider struct{}\n//     func (m *MyProvider) Retrieve() (Value, error) {...}\n//     func (m *MyProvider) IsExpired() bool {...}\n//\n//     creds := credentials.NewCredentials(&MyProvider{})\n//     credValue, err := creds.Get()\n//\npackage credentials\n\nimport (\n\t\"fmt\"\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n\t\"sync\"\n\t\"time\"\n)\n\n// AnonymousCredentials is an empty Credential object that can be used as\n// dummy placeholder credentials for requests that do not need signed.\n//\n// This Credentials can be used to configure a service to not sign requests\n// when making service API calls. For example, when accessing public\n// s3 buckets.\n//\n//     svc := s3.New(session.Must(session.NewSession(&aws.Config{\n//       Credentials: credentials.AnonymousCredentials,\n//     })))\n//     // Access public S3 buckets.\nvar AnonymousCredentials = NewStaticCredentials(\"\", \"\", \"\")\n\n// A Value is the AWS credentials value for individual credential fields.\ntype Value struct {\n\t// AWS Access key ID\n\tAccessKeyID string\n\n\t// AWS Secret Access Key\n\tSecretAccessKey string\n\n\t// AWS Session Token\n\tSessionToken string\n\n\t// Provider used to get credentials\n\tProviderName string\n}\n\n// A Provider is the interface for any component which will provide credentials\n// Value. A provider is required to manage its own Expired state, and what to\n// be expired means.\n//\n// The Provider should not need to implement its own mutexes, because\n// that will be managed by Credentials.\ntype Provider interface {\n\t// Retrieve returns nil if it successfully retrieved the value.\n\t// Error is returned if the value were not obtainable, or empty.\n\tRetrieve() (Value, error)\n\n\t// IsExpired returns if the credentials are no longer valid, and need\n\t// to be retrieved.\n\tIsExpired() bool\n}\n\n// An Expirer is an interface that Providers can implement to expose the expiration\n// time, if known.  If the Provider cannot accurately provide this info,\n// it should not implement this interface.\ntype Expirer interface {\n\t// The time at which the credentials are no longer valid\n\tExpiresAt() time.Time\n}\n\n// An ErrorProvider is a stub credentials provider that always returns an error\n// this is used by the SDK when construction a known provider is not possible\n// due to an error.\ntype ErrorProvider struct {\n\t// The error to be returned from Retrieve\n\tErr error\n\n\t// The provider name to set on the Retrieved returned Value\n\tProviderName string\n}\n\n// Retrieve will always return the error that the ErrorProvider was created with.\nfunc (p ErrorProvider) Retrieve() (Value, error) {\n\treturn Value{ProviderName: p.ProviderName}, p.Err\n}\n\n// IsExpired will always return not expired.\nfunc (p ErrorProvider) IsExpired() bool {\n\treturn false\n}\n\n// A Expiry provides shared expiration logic to be used by credentials\n// providers to implement expiry functionality.\n//\n// The best method to use this struct is as an anonymous field within the\n// provider's struct.\n//\n// Example:\n//     type EC2RoleProvider struct {\n//         Expiry\n//         ...\n//     }\ntype Expiry struct {\n\t// The date/time when to expire on\n\texpiration time.Time\n\n\t// If set will be used by IsExpired to determine the current time.\n\t// Defaults to time.Now if CurrentTime is not set.  Available for testing\n\t// to be able to mock out the current time.\n\tCurrentTime func() time.Time\n}\n\n// SetExpiration sets the expiration IsExpired will check when called.\n//\n// If window is greater than 0 the expiration time will be reduced by the\n// window value.\n//\n// Using a window is helpful to trigger credentials to expire sooner than\n// the expiration time given to ensure no requests are made with expired\n// tokens.\nfunc (e *Expiry) SetExpiration(expiration time.Time, window time.Duration) {\n\te.expiration = expiration\n\tif window > 0 {\n\t\te.expiration = e.expiration.Add(-window)\n\t}\n}\n\n// IsExpired returns if the credentials are expired.\nfunc (e *Expiry) IsExpired() bool {\n\tcurTime := e.CurrentTime\n\tif curTime == nil {\n\t\tcurTime = time.Now\n\t}\n\treturn e.expiration.Before(curTime())\n}\n\n// ExpiresAt returns the expiration time of the credential\nfunc (e *Expiry) ExpiresAt() time.Time {\n\treturn e.expiration\n}\n\n// A Credentials provides concurrency safe retrieval of AWS credentials Value.\n// Credentials will cache the credentials value until they expire. Once the value\n// expires the next Get will attempt to retrieve valid credentials.\n//\n// Credentials is safe to use across multiple goroutines and will manage the\n// synchronous state so the Providers do not need to implement their own\n// synchronization.\n//\n// The first Credentials.Get() will always call Provider.Retrieve() to get the\n// first instance of the credentials Value. All calls to Get() after that\n// will return the cached credentials Value until IsExpired() returns true.\ntype Credentials struct {\n\tcreds        Value\n\tforceRefresh bool\n\n\tm sync.RWMutex\n\n\tprovider Provider\n}\n\n// NewCredentials returns a pointer to a new Credentials with the provider set.\nfunc NewCredentials(provider Provider) *Credentials {\n\treturn &Credentials{\n\t\tprovider:     provider,\n\t\tforceRefresh: true,\n\t}\n}\n\n// Get returns the credentials value, or error if the credentials Value failed\n// to be retrieved.\n//\n// Will return the cached credentials Value if it has not expired. If the\n// credentials Value has expired the Provider's Retrieve() will be called\n// to refresh the credentials.\n//\n// If Credentials.Expire() was called the credentials Value will be force\n// expired, and the next call to Get() will cause them to be refreshed.\nfunc (c *Credentials) Get() (Value, error) {\n\t// Check the cached credentials first with just the read lock.\n\tc.m.RLock()\n\tif !c.isExpired() {\n\t\tcreds := c.creds\n\t\tc.m.RUnlock()\n\t\treturn creds, nil\n\t}\n\tc.m.RUnlock()\n\n\t// Credentials are expired need to retrieve the credentials taking the full\n\t// lock.\n\tc.m.Lock()\n\tdefer c.m.Unlock()\n\n\tif c.isExpired() {\n\t\tcreds, err := c.provider.Retrieve()\n\t\tif err != nil {\n\t\t\treturn Value{}, err\n\t\t}\n\t\tc.creds = creds\n\t\tc.forceRefresh = false\n\t}\n\n\treturn c.creds, nil\n}\n\n// Expire expires the credentials and forces them to be retrieved on the\n// next call to Get().\n//\n// This will override the Provider's expired state, and force Credentials\n// to call the Provider's Retrieve().\nfunc (c *Credentials) Expire() {\n\tc.m.Lock()\n\tdefer c.m.Unlock()\n\n\tc.forceRefresh = true\n}\n\n// IsExpired returns if the credentials are no longer valid, and need\n// to be retrieved.\n//\n// If the Credentials were forced to be expired with Expire() this will\n// reflect that override.\nfunc (c *Credentials) IsExpired() bool {\n\tc.m.RLock()\n\tdefer c.m.RUnlock()\n\n\treturn c.isExpired()\n}\n\n// isExpired helper method wrapping the definition of expired credentials.\nfunc (c *Credentials) isExpired() bool {\n\treturn c.forceRefresh || c.provider.IsExpired()\n}\n\n// ExpiresAt provides access to the functionality of the Expirer interface of\n// the underlying Provider, if it supports that interface.  Otherwise, it returns\n// an error.\nfunc (c *Credentials) ExpiresAt() (time.Time, error) {\n\tc.m.RLock()\n\tdefer c.m.RUnlock()\n\n\texpirer, ok := c.provider.(Expirer)\n\tif !ok {\n\t\treturn time.Time{}, awserr.New(\"ProviderNotExpirer\",\n\t\t\tfmt.Sprintf(\"provider %s does not support ExpiresAt()\", c.creds.ProviderName),\n\t\t\tnil)\n\t}\n\tif c.forceRefresh {\n\t\t// set expiration time to the distant past\n\t\treturn time.Time{}, nil\n\t}\n\treturn expirer.ExpiresAt(), nil\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds/ec2_role_provider.go",
    "content": "package ec2rolecreds\n\nimport (\n\t\"bufio\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n\t\"github.com/aws/aws-sdk-go/aws/client\"\n\t\"github.com/aws/aws-sdk-go/aws/credentials\"\n\t\"github.com/aws/aws-sdk-go/aws/ec2metadata\"\n\t\"github.com/aws/aws-sdk-go/aws/request\"\n\t\"github.com/aws/aws-sdk-go/internal/sdkuri\"\n)\n\n// ProviderName provides a name of EC2Role provider\nconst ProviderName = \"EC2RoleProvider\"\n\n// A EC2RoleProvider retrieves credentials from the EC2 service, and keeps track if\n// those credentials are expired.\n//\n// Example how to configure the EC2RoleProvider with custom http Client, Endpoint\n// or ExpiryWindow\n//\n//     p := &ec2rolecreds.EC2RoleProvider{\n//         // Pass in a custom timeout to be used when requesting\n//         // IAM EC2 Role credentials.\n//         Client: ec2metadata.New(sess, aws.Config{\n//             HTTPClient: &http.Client{Timeout: 10 * time.Second},\n//         }),\n//\n//         // Do not use early expiry of credentials. If a non zero value is\n//         // specified the credentials will be expired early\n//         ExpiryWindow: 0,\n//     }\ntype EC2RoleProvider struct {\n\tcredentials.Expiry\n\n\t// Required EC2Metadata client to use when connecting to EC2 metadata service.\n\tClient *ec2metadata.EC2Metadata\n\n\t// ExpiryWindow will allow the credentials to trigger refreshing prior to\n\t// the credentials actually expiring. This is beneficial so race conditions\n\t// with expiring credentials do not cause request to fail unexpectedly\n\t// due to ExpiredTokenException exceptions.\n\t//\n\t// So a ExpiryWindow of 10s would cause calls to IsExpired() to return true\n\t// 10 seconds before the credentials are actually expired.\n\t//\n\t// If ExpiryWindow is 0 or less it will be ignored.\n\tExpiryWindow time.Duration\n}\n\n// NewCredentials returns a pointer to a new Credentials object wrapping\n// the EC2RoleProvider. Takes a ConfigProvider to create a EC2Metadata client.\n// The ConfigProvider is satisfied by the session.Session type.\nfunc NewCredentials(c client.ConfigProvider, options ...func(*EC2RoleProvider)) *credentials.Credentials {\n\tp := &EC2RoleProvider{\n\t\tClient: ec2metadata.New(c),\n\t}\n\n\tfor _, option := range options {\n\t\toption(p)\n\t}\n\n\treturn credentials.NewCredentials(p)\n}\n\n// NewCredentialsWithClient returns a pointer to a new Credentials object wrapping\n// the EC2RoleProvider. Takes a EC2Metadata client to use when connecting to EC2\n// metadata service.\nfunc NewCredentialsWithClient(client *ec2metadata.EC2Metadata, options ...func(*EC2RoleProvider)) *credentials.Credentials {\n\tp := &EC2RoleProvider{\n\t\tClient: client,\n\t}\n\n\tfor _, option := range options {\n\t\toption(p)\n\t}\n\n\treturn credentials.NewCredentials(p)\n}\n\n// Retrieve retrieves credentials from the EC2 service.\n// Error will be returned if the request fails, or unable to extract\n// the desired credentials.\nfunc (m *EC2RoleProvider) Retrieve() (credentials.Value, error) {\n\tcredsList, err := requestCredList(m.Client)\n\tif err != nil {\n\t\treturn credentials.Value{ProviderName: ProviderName}, err\n\t}\n\n\tif len(credsList) == 0 {\n\t\treturn credentials.Value{ProviderName: ProviderName}, awserr.New(\"EmptyEC2RoleList\", \"empty EC2 Role list\", nil)\n\t}\n\tcredsName := credsList[0]\n\n\troleCreds, err := requestCred(m.Client, credsName)\n\tif err != nil {\n\t\treturn credentials.Value{ProviderName: ProviderName}, err\n\t}\n\n\tm.SetExpiration(roleCreds.Expiration, m.ExpiryWindow)\n\n\treturn credentials.Value{\n\t\tAccessKeyID:     roleCreds.AccessKeyID,\n\t\tSecretAccessKey: roleCreds.SecretAccessKey,\n\t\tSessionToken:    roleCreds.Token,\n\t\tProviderName:    ProviderName,\n\t}, nil\n}\n\n// A ec2RoleCredRespBody provides the shape for unmarshaling credential\n// request responses.\ntype ec2RoleCredRespBody struct {\n\t// Success State\n\tExpiration      time.Time\n\tAccessKeyID     string\n\tSecretAccessKey string\n\tToken           string\n\n\t// Error state\n\tCode    string\n\tMessage string\n}\n\nconst iamSecurityCredsPath = \"iam/security-credentials/\"\n\n// requestCredList requests a list of credentials from the EC2 service.\n// If there are no credentials, or there is an error making or receiving the request\nfunc requestCredList(client *ec2metadata.EC2Metadata) ([]string, error) {\n\tresp, err := client.GetMetadata(iamSecurityCredsPath)\n\tif err != nil {\n\t\treturn nil, awserr.New(\"EC2RoleRequestError\", \"no EC2 instance role found\", err)\n\t}\n\n\tcredsList := []string{}\n\ts := bufio.NewScanner(strings.NewReader(resp))\n\tfor s.Scan() {\n\t\tcredsList = append(credsList, s.Text())\n\t}\n\n\tif err := s.Err(); err != nil {\n\t\treturn nil, awserr.New(request.ErrCodeSerialization,\n\t\t\t\"failed to read EC2 instance role from metadata service\", err)\n\t}\n\n\treturn credsList, nil\n}\n\n// requestCred requests the credentials for a specific credentials from the EC2 service.\n//\n// If the credentials cannot be found, or there is an error reading the response\n// and error will be returned.\nfunc requestCred(client *ec2metadata.EC2Metadata, credsName string) (ec2RoleCredRespBody, error) {\n\tresp, err := client.GetMetadata(sdkuri.PathJoin(iamSecurityCredsPath, credsName))\n\tif err != nil {\n\t\treturn ec2RoleCredRespBody{},\n\t\t\tawserr.New(\"EC2RoleRequestError\",\n\t\t\t\tfmt.Sprintf(\"failed to get %s EC2 instance role credentials\", credsName),\n\t\t\t\terr)\n\t}\n\n\trespCreds := ec2RoleCredRespBody{}\n\tif err := json.NewDecoder(strings.NewReader(resp)).Decode(&respCreds); err != nil {\n\t\treturn ec2RoleCredRespBody{},\n\t\t\tawserr.New(request.ErrCodeSerialization,\n\t\t\t\tfmt.Sprintf(\"failed to decode %s EC2 instance role credentials\", credsName),\n\t\t\t\terr)\n\t}\n\n\tif respCreds.Code != \"Success\" {\n\t\t// If an error code was returned something failed requesting the role.\n\t\treturn ec2RoleCredRespBody{}, awserr.New(respCreds.Code, respCreds.Message, nil)\n\t}\n\n\treturn respCreds, nil\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/credentials/endpointcreds/provider.go",
    "content": "// Package endpointcreds provides support for retrieving credentials from an\n// arbitrary HTTP endpoint.\n//\n// The credentials endpoint Provider can receive both static and refreshable\n// credentials that will expire. Credentials are static when an \"Expiration\"\n// value is not provided in the endpoint's response.\n//\n// Static credentials will never expire once they have been retrieved. The format\n// of the static credentials response:\n//    {\n//        \"AccessKeyId\" : \"MUA...\",\n//        \"SecretAccessKey\" : \"/7PC5om....\",\n//    }\n//\n// Refreshable credentials will expire within the \"ExpiryWindow\" of the Expiration\n// value in the response. The format of the refreshable credentials response:\n//    {\n//        \"AccessKeyId\" : \"MUA...\",\n//        \"SecretAccessKey\" : \"/7PC5om....\",\n//        \"Token\" : \"AQoDY....=\",\n//        \"Expiration\" : \"2016-02-25T06:03:31Z\"\n//    }\n//\n// Errors should be returned in the following format and only returned with 400\n// or 500 HTTP status codes.\n//    {\n//        \"code\": \"ErrorCode\",\n//        \"message\": \"Helpful error message.\"\n//    }\npackage endpointcreds\n\nimport (\n\t\"encoding/json\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n\t\"github.com/aws/aws-sdk-go/aws/client\"\n\t\"github.com/aws/aws-sdk-go/aws/client/metadata\"\n\t\"github.com/aws/aws-sdk-go/aws/credentials\"\n\t\"github.com/aws/aws-sdk-go/aws/request\"\n\t\"github.com/aws/aws-sdk-go/private/protocol/json/jsonutil\"\n)\n\n// ProviderName is the name of the credentials provider.\nconst ProviderName = `CredentialsEndpointProvider`\n\n// Provider satisfies the credentials.Provider interface, and is a client to\n// retrieve credentials from an arbitrary endpoint.\ntype Provider struct {\n\tstaticCreds bool\n\tcredentials.Expiry\n\n\t// Requires a AWS Client to make HTTP requests to the endpoint with.\n\t// the Endpoint the request will be made to is provided by the aws.Config's\n\t// Endpoint value.\n\tClient *client.Client\n\n\t// ExpiryWindow will allow the credentials to trigger refreshing prior to\n\t// the credentials actually expiring. This is beneficial so race conditions\n\t// with expiring credentials do not cause request to fail unexpectedly\n\t// due to ExpiredTokenException exceptions.\n\t//\n\t// So a ExpiryWindow of 10s would cause calls to IsExpired() to return true\n\t// 10 seconds before the credentials are actually expired.\n\t//\n\t// If ExpiryWindow is 0 or less it will be ignored.\n\tExpiryWindow time.Duration\n\n\t// Optional authorization token value if set will be used as the value of\n\t// the Authorization header of the endpoint credential request.\n\tAuthorizationToken string\n}\n\n// NewProviderClient returns a credentials Provider for retrieving AWS credentials\n// from arbitrary endpoint.\nfunc NewProviderClient(cfg aws.Config, handlers request.Handlers, endpoint string, options ...func(*Provider)) credentials.Provider {\n\tp := &Provider{\n\t\tClient: client.New(\n\t\t\tcfg,\n\t\t\tmetadata.ClientInfo{\n\t\t\t\tServiceName: \"CredentialsEndpoint\",\n\t\t\t\tEndpoint:    endpoint,\n\t\t\t},\n\t\t\thandlers,\n\t\t),\n\t}\n\n\tp.Client.Handlers.Unmarshal.PushBack(unmarshalHandler)\n\tp.Client.Handlers.UnmarshalError.PushBack(unmarshalError)\n\tp.Client.Handlers.Validate.Clear()\n\tp.Client.Handlers.Validate.PushBack(validateEndpointHandler)\n\n\tfor _, option := range options {\n\t\toption(p)\n\t}\n\n\treturn p\n}\n\n// NewCredentialsClient returns a Credentials wrapper for retrieving credentials\n// from an arbitrary endpoint concurrently. The client will request the\nfunc NewCredentialsClient(cfg aws.Config, handlers request.Handlers, endpoint string, options ...func(*Provider)) *credentials.Credentials {\n\treturn credentials.NewCredentials(NewProviderClient(cfg, handlers, endpoint, options...))\n}\n\n// IsExpired returns true if the credentials retrieved are expired, or not yet\n// retrieved.\nfunc (p *Provider) IsExpired() bool {\n\tif p.staticCreds {\n\t\treturn false\n\t}\n\treturn p.Expiry.IsExpired()\n}\n\n// Retrieve will attempt to request the credentials from the endpoint the Provider\n// was configured for. And error will be returned if the retrieval fails.\nfunc (p *Provider) Retrieve() (credentials.Value, error) {\n\tresp, err := p.getCredentials()\n\tif err != nil {\n\t\treturn credentials.Value{ProviderName: ProviderName},\n\t\t\tawserr.New(\"CredentialsEndpointError\", \"failed to load credentials\", err)\n\t}\n\n\tif resp.Expiration != nil {\n\t\tp.SetExpiration(*resp.Expiration, p.ExpiryWindow)\n\t} else {\n\t\tp.staticCreds = true\n\t}\n\n\treturn credentials.Value{\n\t\tAccessKeyID:     resp.AccessKeyID,\n\t\tSecretAccessKey: resp.SecretAccessKey,\n\t\tSessionToken:    resp.Token,\n\t\tProviderName:    ProviderName,\n\t}, nil\n}\n\ntype getCredentialsOutput struct {\n\tExpiration      *time.Time\n\tAccessKeyID     string\n\tSecretAccessKey string\n\tToken           string\n}\n\ntype errorOutput struct {\n\tCode    string `json:\"code\"`\n\tMessage string `json:\"message\"`\n}\n\nfunc (p *Provider) getCredentials() (*getCredentialsOutput, error) {\n\top := &request.Operation{\n\t\tName:       \"GetCredentials\",\n\t\tHTTPMethod: \"GET\",\n\t}\n\n\tout := &getCredentialsOutput{}\n\treq := p.Client.NewRequest(op, nil, out)\n\treq.HTTPRequest.Header.Set(\"Accept\", \"application/json\")\n\tif authToken := p.AuthorizationToken; len(authToken) != 0 {\n\t\treq.HTTPRequest.Header.Set(\"Authorization\", authToken)\n\t}\n\n\treturn out, req.Send()\n}\n\nfunc validateEndpointHandler(r *request.Request) {\n\tif len(r.ClientInfo.Endpoint) == 0 {\n\t\tr.Error = aws.ErrMissingEndpoint\n\t}\n}\n\nfunc unmarshalHandler(r *request.Request) {\n\tdefer r.HTTPResponse.Body.Close()\n\n\tout := r.Data.(*getCredentialsOutput)\n\tif err := json.NewDecoder(r.HTTPResponse.Body).Decode(&out); err != nil {\n\t\tr.Error = awserr.New(request.ErrCodeSerialization,\n\t\t\t\"failed to decode endpoint credentials\",\n\t\t\terr,\n\t\t)\n\t}\n}\n\nfunc unmarshalError(r *request.Request) {\n\tdefer r.HTTPResponse.Body.Close()\n\n\tvar errOut errorOutput\n\terr := jsonutil.UnmarshalJSONError(&errOut, r.HTTPResponse.Body)\n\tif err != nil {\n\t\tr.Error = awserr.NewRequestFailure(\n\t\t\tawserr.New(request.ErrCodeSerialization,\n\t\t\t\t\"failed to decode error message\", err),\n\t\t\tr.HTTPResponse.StatusCode,\n\t\t\tr.RequestID,\n\t\t)\n\t\treturn\n\t}\n\n\t// Response body format is not consistent between metadata endpoints.\n\t// Grab the error message as a string and include that as the source error\n\tr.Error = awserr.New(errOut.Code, errOut.Message, nil)\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/credentials/env_provider.go",
    "content": "package credentials\n\nimport (\n\t\"os\"\n\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n)\n\n// EnvProviderName provides a name of Env provider\nconst EnvProviderName = \"EnvProvider\"\n\nvar (\n\t// ErrAccessKeyIDNotFound is returned when the AWS Access Key ID can't be\n\t// found in the process's environment.\n\tErrAccessKeyIDNotFound = awserr.New(\"EnvAccessKeyNotFound\", \"AWS_ACCESS_KEY_ID or AWS_ACCESS_KEY not found in environment\", nil)\n\n\t// ErrSecretAccessKeyNotFound is returned when the AWS Secret Access Key\n\t// can't be found in the process's environment.\n\tErrSecretAccessKeyNotFound = awserr.New(\"EnvSecretNotFound\", \"AWS_SECRET_ACCESS_KEY or AWS_SECRET_KEY not found in environment\", nil)\n)\n\n// A EnvProvider retrieves credentials from the environment variables of the\n// running process. Environment credentials never expire.\n//\n// Environment variables used:\n//\n// * Access Key ID:     AWS_ACCESS_KEY_ID or AWS_ACCESS_KEY\n//\n// * Secret Access Key: AWS_SECRET_ACCESS_KEY or AWS_SECRET_KEY\ntype EnvProvider struct {\n\tretrieved bool\n}\n\n// NewEnvCredentials returns a pointer to a new Credentials object\n// wrapping the environment variable provider.\nfunc NewEnvCredentials() *Credentials {\n\treturn NewCredentials(&EnvProvider{})\n}\n\n// Retrieve retrieves the keys from the environment.\nfunc (e *EnvProvider) Retrieve() (Value, error) {\n\te.retrieved = false\n\n\tid := os.Getenv(\"AWS_ACCESS_KEY_ID\")\n\tif id == \"\" {\n\t\tid = os.Getenv(\"AWS_ACCESS_KEY\")\n\t}\n\n\tsecret := os.Getenv(\"AWS_SECRET_ACCESS_KEY\")\n\tif secret == \"\" {\n\t\tsecret = os.Getenv(\"AWS_SECRET_KEY\")\n\t}\n\n\tif id == \"\" {\n\t\treturn Value{ProviderName: EnvProviderName}, ErrAccessKeyIDNotFound\n\t}\n\n\tif secret == \"\" {\n\t\treturn Value{ProviderName: EnvProviderName}, ErrSecretAccessKeyNotFound\n\t}\n\n\te.retrieved = true\n\treturn Value{\n\t\tAccessKeyID:     id,\n\t\tSecretAccessKey: secret,\n\t\tSessionToken:    os.Getenv(\"AWS_SESSION_TOKEN\"),\n\t\tProviderName:    EnvProviderName,\n\t}, nil\n}\n\n// IsExpired returns if the credentials have been retrieved.\nfunc (e *EnvProvider) IsExpired() bool {\n\treturn !e.retrieved\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/credentials/processcreds/provider.go",
    "content": "/*\nPackage processcreds is a credential Provider to retrieve `credential_process`\ncredentials.\n\nWARNING: The following describes a method of sourcing credentials from an external\nprocess. This can potentially be dangerous, so proceed with caution. Other\ncredential providers should be preferred if at all possible. If using this\noption, you should make sure that the config file is as locked down as possible\nusing security best practices for your operating system.\n\nYou can use credentials from a `credential_process` in a variety of ways.\n\nOne way is to setup your shared config file, located in the default\nlocation, with the `credential_process` key and the command you want to be\ncalled. You also need to set the AWS_SDK_LOAD_CONFIG environment variable\n(e.g., `export AWS_SDK_LOAD_CONFIG=1`) to use the shared config file.\n\n    [default]\n    credential_process = /command/to/call\n\nCreating a new session will use the credential process to retrieve credentials.\nNOTE: If there are credentials in the profile you are using, the credential\nprocess will not be used.\n\n    // Initialize a session to load credentials.\n    sess, _ := session.NewSession(&aws.Config{\n        Region: aws.String(\"us-east-1\")},\n    )\n\n    // Create S3 service client to use the credentials.\n    svc := s3.New(sess)\n\nAnother way to use the `credential_process` method is by using\n`credentials.NewCredentials()` and providing a command to be executed to\nretrieve credentials:\n\n    // Create credentials using the ProcessProvider.\n    creds := processcreds.NewCredentials(\"/path/to/command\")\n\n    // Create service client value configured for credentials.\n    svc := s3.New(sess, &aws.Config{Credentials: creds})\n\nYou can set a non-default timeout for the `credential_process` with another\nconstructor, `credentials.NewCredentialsTimeout()`, providing the timeout. To\nset a one minute timeout:\n\n    // Create credentials using the ProcessProvider.\n    creds := processcreds.NewCredentialsTimeout(\n        \"/path/to/command\",\n        time.Duration(500) * time.Millisecond)\n\nIf you need more control, you can set any configurable options in the\ncredentials using one or more option functions. For example, you can set a two\nminute timeout, a credential duration of 60 minutes, and a maximum stdout\nbuffer size of 2k.\n\n    creds := processcreds.NewCredentials(\n        \"/path/to/command\",\n        func(opt *ProcessProvider) {\n            opt.Timeout = time.Duration(2) * time.Minute\n            opt.Duration = time.Duration(60) * time.Minute\n            opt.MaxBufSize = 2048\n        })\n\nYou can also use your own `exec.Cmd`:\n\n\t// Create an exec.Cmd\n\tmyCommand := exec.Command(\"/path/to/command\")\n\n\t// Create credentials using your exec.Cmd and custom timeout\n\tcreds := processcreds.NewCredentialsCommand(\n\t\tmyCommand,\n\t\tfunc(opt *processcreds.ProcessProvider) {\n\t\t\topt.Timeout = time.Duration(1) * time.Second\n\t\t})\n*/\npackage processcreds\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"os\"\n\t\"os/exec\"\n\t\"runtime\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n\t\"github.com/aws/aws-sdk-go/aws/credentials\"\n)\n\nconst (\n\t// ProviderName is the name this credentials provider will label any\n\t// returned credentials Value with.\n\tProviderName = `ProcessProvider`\n\n\t// ErrCodeProcessProviderParse error parsing process output\n\tErrCodeProcessProviderParse = \"ProcessProviderParseError\"\n\n\t// ErrCodeProcessProviderVersion version error in output\n\tErrCodeProcessProviderVersion = \"ProcessProviderVersionError\"\n\n\t// ErrCodeProcessProviderRequired required attribute missing in output\n\tErrCodeProcessProviderRequired = \"ProcessProviderRequiredError\"\n\n\t// ErrCodeProcessProviderExecution execution of command failed\n\tErrCodeProcessProviderExecution = \"ProcessProviderExecutionError\"\n\n\t// errMsgProcessProviderTimeout process took longer than allowed\n\terrMsgProcessProviderTimeout = \"credential process timed out\"\n\n\t// errMsgProcessProviderProcess process error\n\terrMsgProcessProviderProcess = \"error in credential_process\"\n\n\t// errMsgProcessProviderParse problem parsing output\n\terrMsgProcessProviderParse = \"parse failed of credential_process output\"\n\n\t// errMsgProcessProviderVersion version error in output\n\terrMsgProcessProviderVersion = \"wrong version in process output (not 1)\"\n\n\t// errMsgProcessProviderMissKey missing access key id in output\n\terrMsgProcessProviderMissKey = \"missing AccessKeyId in process output\"\n\n\t// errMsgProcessProviderMissSecret missing secret acess key in output\n\terrMsgProcessProviderMissSecret = \"missing SecretAccessKey in process output\"\n\n\t// errMsgProcessProviderPrepareCmd prepare of command failed\n\terrMsgProcessProviderPrepareCmd = \"failed to prepare command\"\n\n\t// errMsgProcessProviderEmptyCmd command must not be empty\n\terrMsgProcessProviderEmptyCmd = \"command must not be empty\"\n\n\t// errMsgProcessProviderPipe failed to initialize pipe\n\terrMsgProcessProviderPipe = \"failed to initialize pipe\"\n\n\t// DefaultDuration is the default amount of time in minutes that the\n\t// credentials will be valid for.\n\tDefaultDuration = time.Duration(15) * time.Minute\n\n\t// DefaultBufSize limits buffer size from growing to an enormous\n\t// amount due to a faulty process.\n\tDefaultBufSize = 1024\n\n\t// DefaultTimeout default limit on time a process can run.\n\tDefaultTimeout = time.Duration(1) * time.Minute\n)\n\n// ProcessProvider satisfies the credentials.Provider interface, and is a\n// client to retrieve credentials from a process.\ntype ProcessProvider struct {\n\tstaticCreds bool\n\tcredentials.Expiry\n\toriginalCommand []string\n\n\t// Expiry duration of the credentials. Defaults to 15 minutes if not set.\n\tDuration time.Duration\n\n\t// ExpiryWindow will allow the credentials to trigger refreshing prior to\n\t// the credentials actually expiring. This is beneficial so race conditions\n\t// with expiring credentials do not cause request to fail unexpectedly\n\t// due to ExpiredTokenException exceptions.\n\t//\n\t// So a ExpiryWindow of 10s would cause calls to IsExpired() to return true\n\t// 10 seconds before the credentials are actually expired.\n\t//\n\t// If ExpiryWindow is 0 or less it will be ignored.\n\tExpiryWindow time.Duration\n\n\t// A string representing an os command that should return a JSON with\n\t// credential information.\n\tcommand *exec.Cmd\n\n\t// MaxBufSize limits memory usage from growing to an enormous\n\t// amount due to a faulty process.\n\tMaxBufSize int\n\n\t// Timeout limits the time a process can run.\n\tTimeout time.Duration\n}\n\n// NewCredentials returns a pointer to a new Credentials object wrapping the\n// ProcessProvider. The credentials will expire every 15 minutes by default.\nfunc NewCredentials(command string, options ...func(*ProcessProvider)) *credentials.Credentials {\n\tp := &ProcessProvider{\n\t\tcommand:    exec.Command(command),\n\t\tDuration:   DefaultDuration,\n\t\tTimeout:    DefaultTimeout,\n\t\tMaxBufSize: DefaultBufSize,\n\t}\n\n\tfor _, option := range options {\n\t\toption(p)\n\t}\n\n\treturn credentials.NewCredentials(p)\n}\n\n// NewCredentialsTimeout returns a pointer to a new Credentials object with\n// the specified command and timeout, and default duration and max buffer size.\nfunc NewCredentialsTimeout(command string, timeout time.Duration) *credentials.Credentials {\n\tp := NewCredentials(command, func(opt *ProcessProvider) {\n\t\topt.Timeout = timeout\n\t})\n\n\treturn p\n}\n\n// NewCredentialsCommand returns a pointer to a new Credentials object with\n// the specified command, and default timeout, duration and max buffer size.\nfunc NewCredentialsCommand(command *exec.Cmd, options ...func(*ProcessProvider)) *credentials.Credentials {\n\tp := &ProcessProvider{\n\t\tcommand:    command,\n\t\tDuration:   DefaultDuration,\n\t\tTimeout:    DefaultTimeout,\n\t\tMaxBufSize: DefaultBufSize,\n\t}\n\n\tfor _, option := range options {\n\t\toption(p)\n\t}\n\n\treturn credentials.NewCredentials(p)\n}\n\ntype credentialProcessResponse struct {\n\tVersion         int\n\tAccessKeyID     string `json:\"AccessKeyId\"`\n\tSecretAccessKey string\n\tSessionToken    string\n\tExpiration      *time.Time\n}\n\n// Retrieve executes the 'credential_process' and returns the credentials.\nfunc (p *ProcessProvider) Retrieve() (credentials.Value, error) {\n\tout, err := p.executeCredentialProcess()\n\tif err != nil {\n\t\treturn credentials.Value{ProviderName: ProviderName}, err\n\t}\n\n\t// Serialize and validate response\n\tresp := &credentialProcessResponse{}\n\tif err = json.Unmarshal(out, resp); err != nil {\n\t\treturn credentials.Value{ProviderName: ProviderName}, awserr.New(\n\t\t\tErrCodeProcessProviderParse,\n\t\t\tfmt.Sprintf(\"%s: %s\", errMsgProcessProviderParse, string(out)),\n\t\t\terr)\n\t}\n\n\tif resp.Version != 1 {\n\t\treturn credentials.Value{ProviderName: ProviderName}, awserr.New(\n\t\t\tErrCodeProcessProviderVersion,\n\t\t\terrMsgProcessProviderVersion,\n\t\t\tnil)\n\t}\n\n\tif len(resp.AccessKeyID) == 0 {\n\t\treturn credentials.Value{ProviderName: ProviderName}, awserr.New(\n\t\t\tErrCodeProcessProviderRequired,\n\t\t\terrMsgProcessProviderMissKey,\n\t\t\tnil)\n\t}\n\n\tif len(resp.SecretAccessKey) == 0 {\n\t\treturn credentials.Value{ProviderName: ProviderName}, awserr.New(\n\t\t\tErrCodeProcessProviderRequired,\n\t\t\terrMsgProcessProviderMissSecret,\n\t\t\tnil)\n\t}\n\n\t// Handle expiration\n\tp.staticCreds = resp.Expiration == nil\n\tif resp.Expiration != nil {\n\t\tp.SetExpiration(*resp.Expiration, p.ExpiryWindow)\n\t}\n\n\treturn credentials.Value{\n\t\tProviderName:    ProviderName,\n\t\tAccessKeyID:     resp.AccessKeyID,\n\t\tSecretAccessKey: resp.SecretAccessKey,\n\t\tSessionToken:    resp.SessionToken,\n\t}, nil\n}\n\n// IsExpired returns true if the credentials retrieved are expired, or not yet\n// retrieved.\nfunc (p *ProcessProvider) IsExpired() bool {\n\tif p.staticCreds {\n\t\treturn false\n\t}\n\treturn p.Expiry.IsExpired()\n}\n\n// prepareCommand prepares the command to be executed.\nfunc (p *ProcessProvider) prepareCommand() error {\n\n\tvar cmdArgs []string\n\tif runtime.GOOS == \"windows\" {\n\t\tcmdArgs = []string{\"cmd.exe\", \"/C\"}\n\t} else {\n\t\tcmdArgs = []string{\"sh\", \"-c\"}\n\t}\n\n\tif len(p.originalCommand) == 0 {\n\t\tp.originalCommand = make([]string, len(p.command.Args))\n\t\tcopy(p.originalCommand, p.command.Args)\n\n\t\t// check for empty command because it succeeds\n\t\tif len(strings.TrimSpace(p.originalCommand[0])) < 1 {\n\t\t\treturn awserr.New(\n\t\t\t\tErrCodeProcessProviderExecution,\n\t\t\t\tfmt.Sprintf(\n\t\t\t\t\t\"%s: %s\",\n\t\t\t\t\terrMsgProcessProviderPrepareCmd,\n\t\t\t\t\terrMsgProcessProviderEmptyCmd),\n\t\t\t\tnil)\n\t\t}\n\t}\n\n\tcmdArgs = append(cmdArgs, p.originalCommand...)\n\tp.command = exec.Command(cmdArgs[0], cmdArgs[1:]...)\n\tp.command.Env = os.Environ()\n\n\treturn nil\n}\n\n// executeCredentialProcess starts the credential process on the OS and\n// returns the results or an error.\nfunc (p *ProcessProvider) executeCredentialProcess() ([]byte, error) {\n\n\tif err := p.prepareCommand(); err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Setup the pipes\n\toutReadPipe, outWritePipe, err := os.Pipe()\n\tif err != nil {\n\t\treturn nil, awserr.New(\n\t\t\tErrCodeProcessProviderExecution,\n\t\t\terrMsgProcessProviderPipe,\n\t\t\terr)\n\t}\n\n\tp.command.Stderr = os.Stderr    // display stderr on console for MFA\n\tp.command.Stdout = outWritePipe // get creds json on process's stdout\n\tp.command.Stdin = os.Stdin      // enable stdin for MFA\n\n\toutput := bytes.NewBuffer(make([]byte, 0, p.MaxBufSize))\n\n\tstdoutCh := make(chan error, 1)\n\tgo readInput(\n\t\tio.LimitReader(outReadPipe, int64(p.MaxBufSize)),\n\t\toutput,\n\t\tstdoutCh)\n\n\texecCh := make(chan error, 1)\n\tgo executeCommand(*p.command, execCh)\n\n\tfinished := false\n\tvar errors []error\n\tfor !finished {\n\t\tselect {\n\t\tcase readError := <-stdoutCh:\n\t\t\terrors = appendError(errors, readError)\n\t\t\tfinished = true\n\t\tcase execError := <-execCh:\n\t\t\terr := outWritePipe.Close()\n\t\t\terrors = appendError(errors, err)\n\t\t\terrors = appendError(errors, execError)\n\t\t\tif errors != nil {\n\t\t\t\treturn output.Bytes(), awserr.NewBatchError(\n\t\t\t\t\tErrCodeProcessProviderExecution,\n\t\t\t\t\terrMsgProcessProviderProcess,\n\t\t\t\t\terrors)\n\t\t\t}\n\t\tcase <-time.After(p.Timeout):\n\t\t\tfinished = true\n\t\t\treturn output.Bytes(), awserr.NewBatchError(\n\t\t\t\tErrCodeProcessProviderExecution,\n\t\t\t\terrMsgProcessProviderTimeout,\n\t\t\t\terrors) // errors can be nil\n\t\t}\n\t}\n\n\tout := output.Bytes()\n\n\tif runtime.GOOS == \"windows\" {\n\t\t// windows adds slashes to quotes\n\t\tout = []byte(strings.Replace(string(out), `\\\"`, `\"`, -1))\n\t}\n\n\treturn out, nil\n}\n\n// appendError conveniently checks for nil before appending slice\nfunc appendError(errors []error, err error) []error {\n\tif err != nil {\n\t\treturn append(errors, err)\n\t}\n\treturn errors\n}\n\nfunc executeCommand(cmd exec.Cmd, exec chan error) {\n\t// Start the command\n\terr := cmd.Start()\n\tif err == nil {\n\t\terr = cmd.Wait()\n\t}\n\n\texec <- err\n}\n\nfunc readInput(r io.Reader, w io.Writer, read chan error) {\n\ttee := io.TeeReader(r, w)\n\n\t_, err := ioutil.ReadAll(tee)\n\n\tif err == io.EOF {\n\t\terr = nil\n\t}\n\n\tread <- err // will only arrive here when write end of pipe is closed\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/credentials/shared_credentials_provider.go",
    "content": "package credentials\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n\t\"github.com/aws/aws-sdk-go/internal/ini\"\n\t\"github.com/aws/aws-sdk-go/internal/shareddefaults\"\n)\n\n// SharedCredsProviderName provides a name of SharedCreds provider\nconst SharedCredsProviderName = \"SharedCredentialsProvider\"\n\nvar (\n\t// ErrSharedCredentialsHomeNotFound is emitted when the user directory cannot be found.\n\tErrSharedCredentialsHomeNotFound = awserr.New(\"UserHomeNotFound\", \"user home directory not found.\", nil)\n)\n\n// A SharedCredentialsProvider retrieves credentials from the current user's home\n// directory, and keeps track if those credentials are expired.\n//\n// Profile ini file example: $HOME/.aws/credentials\ntype SharedCredentialsProvider struct {\n\t// Path to the shared credentials file.\n\t//\n\t// If empty will look for \"AWS_SHARED_CREDENTIALS_FILE\" env variable. If the\n\t// env value is empty will default to current user's home directory.\n\t// Linux/OSX: \"$HOME/.aws/credentials\"\n\t// Windows:   \"%USERPROFILE%\\.aws\\credentials\"\n\tFilename string\n\n\t// AWS Profile to extract credentials from the shared credentials file. If empty\n\t// will default to environment variable \"AWS_PROFILE\" or \"default\" if\n\t// environment variable is also not set.\n\tProfile string\n\n\t// retrieved states if the credentials have been successfully retrieved.\n\tretrieved bool\n}\n\n// NewSharedCredentials returns a pointer to a new Credentials object\n// wrapping the Profile file provider.\nfunc NewSharedCredentials(filename, profile string) *Credentials {\n\treturn NewCredentials(&SharedCredentialsProvider{\n\t\tFilename: filename,\n\t\tProfile:  profile,\n\t})\n}\n\n// Retrieve reads and extracts the shared credentials from the current\n// users home directory.\nfunc (p *SharedCredentialsProvider) Retrieve() (Value, error) {\n\tp.retrieved = false\n\n\tfilename, err := p.filename()\n\tif err != nil {\n\t\treturn Value{ProviderName: SharedCredsProviderName}, err\n\t}\n\n\tcreds, err := loadProfile(filename, p.profile())\n\tif err != nil {\n\t\treturn Value{ProviderName: SharedCredsProviderName}, err\n\t}\n\n\tp.retrieved = true\n\treturn creds, nil\n}\n\n// IsExpired returns if the shared credentials have expired.\nfunc (p *SharedCredentialsProvider) IsExpired() bool {\n\treturn !p.retrieved\n}\n\n// loadProfiles loads from the file pointed to by shared credentials filename for profile.\n// The credentials retrieved from the profile will be returned or error. Error will be\n// returned if it fails to read from the file, or the data is invalid.\nfunc loadProfile(filename, profile string) (Value, error) {\n\tconfig, err := ini.OpenFile(filename)\n\tif err != nil {\n\t\treturn Value{ProviderName: SharedCredsProviderName}, awserr.New(\"SharedCredsLoad\", \"failed to load shared credentials file\", err)\n\t}\n\n\tiniProfile, ok := config.GetSection(profile)\n\tif !ok {\n\t\treturn Value{ProviderName: SharedCredsProviderName}, awserr.New(\"SharedCredsLoad\", \"failed to get profile\", nil)\n\t}\n\n\tid := iniProfile.String(\"aws_access_key_id\")\n\tif len(id) == 0 {\n\t\treturn Value{ProviderName: SharedCredsProviderName}, awserr.New(\"SharedCredsAccessKey\",\n\t\t\tfmt.Sprintf(\"shared credentials %s in %s did not contain aws_access_key_id\", profile, filename),\n\t\t\tnil)\n\t}\n\n\tsecret := iniProfile.String(\"aws_secret_access_key\")\n\tif len(secret) == 0 {\n\t\treturn Value{ProviderName: SharedCredsProviderName}, awserr.New(\"SharedCredsSecret\",\n\t\t\tfmt.Sprintf(\"shared credentials %s in %s did not contain aws_secret_access_key\", profile, filename),\n\t\t\tnil)\n\t}\n\n\t// Default to empty string if not found\n\ttoken := iniProfile.String(\"aws_session_token\")\n\n\treturn Value{\n\t\tAccessKeyID:     id,\n\t\tSecretAccessKey: secret,\n\t\tSessionToken:    token,\n\t\tProviderName:    SharedCredsProviderName,\n\t}, nil\n}\n\n// filename returns the filename to use to read AWS shared credentials.\n//\n// Will return an error if the user's home directory path cannot be found.\nfunc (p *SharedCredentialsProvider) filename() (string, error) {\n\tif len(p.Filename) != 0 {\n\t\treturn p.Filename, nil\n\t}\n\n\tif p.Filename = os.Getenv(\"AWS_SHARED_CREDENTIALS_FILE\"); len(p.Filename) != 0 {\n\t\treturn p.Filename, nil\n\t}\n\n\tif home := shareddefaults.UserHomeDir(); len(home) == 0 {\n\t\t// Backwards compatibility of home directly not found error being returned.\n\t\t// This error is too verbose, failure when opening the file would of been\n\t\t// a better error to return.\n\t\treturn \"\", ErrSharedCredentialsHomeNotFound\n\t}\n\n\tp.Filename = shareddefaults.SharedCredentialsFilename()\n\n\treturn p.Filename, nil\n}\n\n// profile returns the AWS shared credentials profile.  If empty will read\n// environment variable \"AWS_PROFILE\". If that is not set profile will\n// return \"default\".\nfunc (p *SharedCredentialsProvider) profile() string {\n\tif p.Profile == \"\" {\n\t\tp.Profile = os.Getenv(\"AWS_PROFILE\")\n\t}\n\tif p.Profile == \"\" {\n\t\tp.Profile = \"default\"\n\t}\n\n\treturn p.Profile\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/credentials/static_provider.go",
    "content": "package credentials\n\nimport (\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n)\n\n// StaticProviderName provides a name of Static provider\nconst StaticProviderName = \"StaticProvider\"\n\nvar (\n\t// ErrStaticCredentialsEmpty is emitted when static credentials are empty.\n\tErrStaticCredentialsEmpty = awserr.New(\"EmptyStaticCreds\", \"static credentials are empty\", nil)\n)\n\n// A StaticProvider is a set of credentials which are set programmatically,\n// and will never expire.\ntype StaticProvider struct {\n\tValue\n}\n\n// NewStaticCredentials returns a pointer to a new Credentials object\n// wrapping a static credentials value provider.\nfunc NewStaticCredentials(id, secret, token string) *Credentials {\n\treturn NewCredentials(&StaticProvider{Value: Value{\n\t\tAccessKeyID:     id,\n\t\tSecretAccessKey: secret,\n\t\tSessionToken:    token,\n\t}})\n}\n\n// NewStaticCredentialsFromCreds returns a pointer to a new Credentials object\n// wrapping the static credentials value provide. Same as NewStaticCredentials\n// but takes the creds Value instead of individual fields\nfunc NewStaticCredentialsFromCreds(creds Value) *Credentials {\n\treturn NewCredentials(&StaticProvider{Value: creds})\n}\n\n// Retrieve returns the credentials or error if the credentials are invalid.\nfunc (s *StaticProvider) Retrieve() (Value, error) {\n\tif s.AccessKeyID == \"\" || s.SecretAccessKey == \"\" {\n\t\treturn Value{ProviderName: StaticProviderName}, ErrStaticCredentialsEmpty\n\t}\n\n\tif len(s.Value.ProviderName) == 0 {\n\t\ts.Value.ProviderName = StaticProviderName\n\t}\n\treturn s.Value, nil\n}\n\n// IsExpired returns if the credentials are expired.\n//\n// For StaticProvider, the credentials never expired.\nfunc (s *StaticProvider) IsExpired() bool {\n\treturn false\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/credentials/stscreds/assume_role_provider.go",
    "content": "/*\nPackage stscreds are credential Providers to retrieve STS AWS credentials.\n\nSTS provides multiple ways to retrieve credentials which can be used when making\nfuture AWS service API operation calls.\n\nThe SDK will ensure that per instance of credentials.Credentials all requests\nto refresh the credentials will be synchronized. But, the SDK is unable to\nensure synchronous usage of the AssumeRoleProvider if the value is shared\nbetween multiple Credentials, Sessions or service clients.\n\nAssume Role\n\nTo assume an IAM role using STS with the SDK you can create a new Credentials\nwith the SDKs's stscreds package.\n\n\t// Initial credentials loaded from SDK's default credential chain. Such as\n\t// the environment, shared credentials (~/.aws/credentials), or EC2 Instance\n\t// Role. These credentials will be used to to make the STS Assume Role API.\n\tsess := session.Must(session.NewSession())\n\n\t// Create the credentials from AssumeRoleProvider to assume the role\n\t// referenced by the \"myRoleARN\" ARN.\n\tcreds := stscreds.NewCredentials(sess, \"myRoleArn\")\n\n\t// Create service client value configured for credentials\n\t// from assumed role.\n\tsvc := s3.New(sess, &aws.Config{Credentials: creds})\n\nAssume Role with static MFA Token\n\nTo assume an IAM role with a MFA token you can either specify a MFA token code\ndirectly or provide a function to prompt the user each time the credentials\nneed to refresh the role's credentials. Specifying the TokenCode should be used\nfor short lived operations that will not need to be refreshed, and when you do\nnot want to have direct control over the user provides their MFA token.\n\nWith TokenCode the AssumeRoleProvider will be not be able to refresh the role's\ncredentials.\n\n\t// Create the credentials from AssumeRoleProvider to assume the role\n\t// referenced by the \"myRoleARN\" ARN using the MFA token code provided.\n\tcreds := stscreds.NewCredentials(sess, \"myRoleArn\", func(p *stscreds.AssumeRoleProvider) {\n\t\tp.SerialNumber = aws.String(\"myTokenSerialNumber\")\n\t\tp.TokenCode = aws.String(\"00000000\")\n\t})\n\n\t// Create service client value configured for credentials\n\t// from assumed role.\n\tsvc := s3.New(sess, &aws.Config{Credentials: creds})\n\nAssume Role with MFA Token Provider\n\nTo assume an IAM role with MFA for longer running tasks where the credentials\nmay need to be refreshed setting the TokenProvider field of AssumeRoleProvider\nwill allow the credential provider to prompt for new MFA token code when the\nrole's credentials need to be refreshed.\n\nThe StdinTokenProvider function is available to prompt on stdin to retrieve\nthe MFA token code from the user. You can also implement custom prompts by\nsatisfing the TokenProvider function signature.\n\nUsing StdinTokenProvider with multiple AssumeRoleProviders, or Credentials will\nhave undesirable results as the StdinTokenProvider will not be synchronized. A\nsingle Credentials with an AssumeRoleProvider can be shared safely.\n\n\t// Create the credentials from AssumeRoleProvider to assume the role\n\t// referenced by the \"myRoleARN\" ARN. Prompting for MFA token from stdin.\n\tcreds := stscreds.NewCredentials(sess, \"myRoleArn\", func(p *stscreds.AssumeRoleProvider) {\n\t\tp.SerialNumber = aws.String(\"myTokenSerialNumber\")\n\t\tp.TokenProvider = stscreds.StdinTokenProvider\n\t})\n\n\t// Create service client value configured for credentials\n\t// from assumed role.\n\tsvc := s3.New(sess, &aws.Config{Credentials: creds})\n\n*/\npackage stscreds\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n\t\"github.com/aws/aws-sdk-go/aws/client\"\n\t\"github.com/aws/aws-sdk-go/aws/credentials\"\n\t\"github.com/aws/aws-sdk-go/internal/sdkrand\"\n\t\"github.com/aws/aws-sdk-go/service/sts\"\n)\n\n// StdinTokenProvider will prompt on stderr and read from stdin for a string value.\n// An error is returned if reading from stdin fails.\n//\n// Use this function go read MFA tokens from stdin. The function makes no attempt\n// to make atomic prompts from stdin across multiple gorouties.\n//\n// Using StdinTokenProvider with multiple AssumeRoleProviders, or Credentials will\n// have undesirable results as the StdinTokenProvider will not be synchronized. A\n// single Credentials with an AssumeRoleProvider can be shared safely\n//\n// Will wait forever until something is provided on the stdin.\nfunc StdinTokenProvider() (string, error) {\n\tvar v string\n\tfmt.Fprintf(os.Stderr, \"Assume Role MFA token code: \")\n\t_, err := fmt.Scanln(&v)\n\n\treturn v, err\n}\n\n// ProviderName provides a name of AssumeRole provider\nconst ProviderName = \"AssumeRoleProvider\"\n\n// AssumeRoler represents the minimal subset of the STS client API used by this provider.\ntype AssumeRoler interface {\n\tAssumeRole(input *sts.AssumeRoleInput) (*sts.AssumeRoleOutput, error)\n}\n\n// DefaultDuration is the default amount of time in minutes that the credentials\n// will be valid for.\nvar DefaultDuration = time.Duration(15) * time.Minute\n\n// AssumeRoleProvider retrieves temporary credentials from the STS service, and\n// keeps track of their expiration time.\n//\n// This credential provider will be used by the SDKs default credential change\n// when shared configuration is enabled, and the shared config or shared credentials\n// file configure assume role. See Session docs for how to do this.\n//\n// AssumeRoleProvider does not provide any synchronization and it is not safe\n// to share this value across multiple Credentials, Sessions, or service clients\n// without also sharing the same Credentials instance.\ntype AssumeRoleProvider struct {\n\tcredentials.Expiry\n\n\t// STS client to make assume role request with.\n\tClient AssumeRoler\n\n\t// Role to be assumed.\n\tRoleARN string\n\n\t// Session name, if you wish to reuse the credentials elsewhere.\n\tRoleSessionName string\n\n\t// Expiry duration of the STS credentials. Defaults to 15 minutes if not set.\n\tDuration time.Duration\n\n\t// Optional ExternalID to pass along, defaults to nil if not set.\n\tExternalID *string\n\n\t// The policy plain text must be 2048 bytes or shorter. However, an internal\n\t// conversion compresses it into a packed binary format with a separate limit.\n\t// The PackedPolicySize response element indicates by percentage how close to\n\t// the upper size limit the policy is, with 100% equaling the maximum allowed\n\t// size.\n\tPolicy *string\n\n\t// The identification number of the MFA device that is associated with the user\n\t// who is making the AssumeRole call. Specify this value if the trust policy\n\t// of the role being assumed includes a condition that requires MFA authentication.\n\t// The value is either the serial number for a hardware device (such as GAHT12345678)\n\t// or an Amazon Resource Name (ARN) for a virtual device (such as arn:aws:iam::123456789012:mfa/user).\n\tSerialNumber *string\n\n\t// The value provided by the MFA device, if the trust policy of the role being\n\t// assumed requires MFA (that is, if the policy includes a condition that tests\n\t// for MFA). If the role being assumed requires MFA and if the TokenCode value\n\t// is missing or expired, the AssumeRole call returns an \"access denied\" error.\n\t//\n\t// If SerialNumber is set and neither TokenCode nor TokenProvider are also\n\t// set an error will be returned.\n\tTokenCode *string\n\n\t// Async method of providing MFA token code for assuming an IAM role with MFA.\n\t// The value returned by the function will be used as the TokenCode in the Retrieve\n\t// call. See StdinTokenProvider for a provider that prompts and reads from stdin.\n\t//\n\t// This token provider will be called when ever the assumed role's\n\t// credentials need to be refreshed when SerialNumber is also set and\n\t// TokenCode is not set.\n\t//\n\t// If both TokenCode and TokenProvider is set, TokenProvider will be used and\n\t// TokenCode is ignored.\n\tTokenProvider func() (string, error)\n\n\t// ExpiryWindow will allow the credentials to trigger refreshing prior to\n\t// the credentials actually expiring. This is beneficial so race conditions\n\t// with expiring credentials do not cause request to fail unexpectedly\n\t// due to ExpiredTokenException exceptions.\n\t//\n\t// So a ExpiryWindow of 10s would cause calls to IsExpired() to return true\n\t// 10 seconds before the credentials are actually expired.\n\t//\n\t// If ExpiryWindow is 0 or less it will be ignored.\n\tExpiryWindow time.Duration\n\n\t// MaxJitterFrac reduces the effective Duration of each credential requested\n\t// by a random percentage between 0 and MaxJitterFraction. MaxJitterFrac must\n\t// have a value between 0 and 1. Any other value may lead to expected behavior.\n\t// With a MaxJitterFrac value of 0, default) will no jitter will be used.\n\t// \n\t// For example, with a Duration of 30m and a MaxJitterFrac of 0.1, the\n\t// AssumeRole call will be made with an arbitrary Duration between 27m and\n\t// 30m.\n\t//\n\t// MaxJitterFrac should not be negative.\n\tMaxJitterFrac float64\n}\n\n// NewCredentials returns a pointer to a new Credentials object wrapping the\n// AssumeRoleProvider. The credentials will expire every 15 minutes and the\n// role will be named after a nanosecond timestamp of this operation.\n//\n// Takes a Config provider to create the STS client. The ConfigProvider is\n// satisfied by the session.Session type.\n//\n// It is safe to share the returned Credentials with multiple Sessions and\n// service clients. All access to the credentials and refreshing them\n// will be synchronized.\nfunc NewCredentials(c client.ConfigProvider, roleARN string, options ...func(*AssumeRoleProvider)) *credentials.Credentials {\n\tp := &AssumeRoleProvider{\n\t\tClient:   sts.New(c),\n\t\tRoleARN:  roleARN,\n\t\tDuration: DefaultDuration,\n\t}\n\n\tfor _, option := range options {\n\t\toption(p)\n\t}\n\n\treturn credentials.NewCredentials(p)\n}\n\n// NewCredentialsWithClient returns a pointer to a new Credentials object wrapping the\n// AssumeRoleProvider. The credentials will expire every 15 minutes and the\n// role will be named after a nanosecond timestamp of this operation.\n//\n// Takes an AssumeRoler which can be satisfied by the STS client.\n//\n// It is safe to share the returned Credentials with multiple Sessions and\n// service clients. All access to the credentials and refreshing them\n// will be synchronized.\nfunc NewCredentialsWithClient(svc AssumeRoler, roleARN string, options ...func(*AssumeRoleProvider)) *credentials.Credentials {\n\tp := &AssumeRoleProvider{\n\t\tClient:   svc,\n\t\tRoleARN:  roleARN,\n\t\tDuration: DefaultDuration,\n\t}\n\n\tfor _, option := range options {\n\t\toption(p)\n\t}\n\n\treturn credentials.NewCredentials(p)\n}\n\n// Retrieve generates a new set of temporary credentials using STS.\nfunc (p *AssumeRoleProvider) Retrieve() (credentials.Value, error) {\n\n\t// Apply defaults where parameters are not set.\n\tif p.RoleSessionName == \"\" {\n\t\t// Try to work out a role name that will hopefully end up unique.\n\t\tp.RoleSessionName = fmt.Sprintf(\"%d\", time.Now().UTC().UnixNano())\n\t}\n\tif p.Duration == 0 {\n\t\t// Expire as often as AWS permits.\n\t\tp.Duration = DefaultDuration\n\t}\n\tjitter := time.Duration(sdkrand.SeededRand.Float64() * p.MaxJitterFrac * float64(p.Duration))\n\tinput := &sts.AssumeRoleInput{\n\t\tDurationSeconds: aws.Int64(int64((p.Duration - jitter) / time.Second)),\n\t\tRoleArn:         aws.String(p.RoleARN),\n\t\tRoleSessionName: aws.String(p.RoleSessionName),\n\t\tExternalId:      p.ExternalID,\n\t}\n\tif p.Policy != nil {\n\t\tinput.Policy = p.Policy\n\t}\n\tif p.SerialNumber != nil {\n\t\tif p.TokenCode != nil {\n\t\t\tinput.SerialNumber = p.SerialNumber\n\t\t\tinput.TokenCode = p.TokenCode\n\t\t} else if p.TokenProvider != nil {\n\t\t\tinput.SerialNumber = p.SerialNumber\n\t\t\tcode, err := p.TokenProvider()\n\t\t\tif err != nil {\n\t\t\t\treturn credentials.Value{ProviderName: ProviderName}, err\n\t\t\t}\n\t\t\tinput.TokenCode = aws.String(code)\n\t\t} else {\n\t\t\treturn credentials.Value{ProviderName: ProviderName},\n\t\t\t\tawserr.New(\"AssumeRoleTokenNotAvailable\",\n\t\t\t\t\t\"assume role with MFA enabled, but neither TokenCode nor TokenProvider are set\", nil)\n\t\t}\n\t}\n\n\troleOutput, err := p.Client.AssumeRole(input)\n\tif err != nil {\n\t\treturn credentials.Value{ProviderName: ProviderName}, err\n\t}\n\n\t// We will proactively generate new credentials before they expire.\n\tp.SetExpiration(*roleOutput.Credentials.Expiration, p.ExpiryWindow)\n\n\treturn credentials.Value{\n\t\tAccessKeyID:     *roleOutput.Credentials.AccessKeyId,\n\t\tSecretAccessKey: *roleOutput.Credentials.SecretAccessKey,\n\t\tSessionToken:    *roleOutput.Credentials.SessionToken,\n\t\tProviderName:    ProviderName,\n\t}, nil\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/csm/doc.go",
    "content": "// Package csm provides Client Side Monitoring (CSM) which enables sending metrics\n// via UDP connection. Using the Start function will enable the reporting of\n// metrics on a given port. If Start is called, with different parameters, again,\n// a panic will occur.\n//\n// Pause can be called to pause any metrics publishing on a given port. Sessions\n// that have had their handlers modified via InjectHandlers may still be used.\n// However, the handlers will act as a no-op meaning no metrics will be published.\n//\n//\tExample:\n//\t\tr, err := csm.Start(\"clientID\", \":31000\")\n//\t\tif err != nil {\n//\t\t\tpanic(fmt.Errorf(\"failed starting CSM:  %v\", err))\n//\t\t}\n//\n//\t\tsess, err := session.NewSession(&aws.Config{})\n//\t\tif err != nil {\n//\t\t\tpanic(fmt.Errorf(\"failed loading session: %v\", err))\n//\t\t}\n//\n//\t\tr.InjectHandlers(&sess.Handlers)\n//\n//\t\tclient := s3.New(sess)\n//\t\tresp, err := client.GetObject(&s3.GetObjectInput{\n//\t\t\tBucket: aws.String(\"bucket\"),\n//\t\t\tKey: aws.String(\"key\"),\n//\t\t})\n//\n//\t\t// Will pause monitoring\n//\t\tr.Pause()\n//\t\tresp, err = client.GetObject(&s3.GetObjectInput{\n//\t\t\tBucket: aws.String(\"bucket\"),\n//\t\t\tKey: aws.String(\"key\"),\n//\t\t})\n//\n//\t\t// Resume monitoring\n//\t\tr.Continue()\n//\n// Start returns a Reporter that is used to enable or disable monitoring. If\n// access to the Reporter is required later, calling Get will return the Reporter\n// singleton.\n//\n//\tExample:\n//\t\tr := csm.Get()\n//\t\tr.Continue()\npackage csm\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/csm/enable.go",
    "content": "package csm\n\nimport (\n\t\"fmt\"\n\t\"sync\"\n)\n\nvar (\n\tlock sync.Mutex\n)\n\n// Client side metric handler names\nconst (\n\tAPICallMetricHandlerName        = \"awscsm.SendAPICallMetric\"\n\tAPICallAttemptMetricHandlerName = \"awscsm.SendAPICallAttemptMetric\"\n)\n\n// Start will start the a long running go routine to capture\n// client side metrics. Calling start multiple time will only\n// start the metric listener once and will panic if a different\n// client ID or port is passed in.\n//\n//\tExample:\n//\t\tr, err := csm.Start(\"clientID\", \"127.0.0.1:8094\")\n//\t\tif err != nil {\n//\t\t\tpanic(fmt.Errorf(\"expected no error, but received %v\", err))\n//\t\t}\n//\t\tsess := session.NewSession()\n//\t\tr.InjectHandlers(sess.Handlers)\n//\n//\t\tsvc := s3.New(sess)\n//\t\tout, err := svc.GetObject(&s3.GetObjectInput{\n//\t\t\tBucket: aws.String(\"bucket\"),\n//\t\t\tKey: aws.String(\"key\"),\n//\t\t})\nfunc Start(clientID string, url string) (*Reporter, error) {\n\tlock.Lock()\n\tdefer lock.Unlock()\n\n\tif sender == nil {\n\t\tsender = newReporter(clientID, url)\n\t} else {\n\t\tif sender.clientID != clientID {\n\t\t\tpanic(fmt.Errorf(\"inconsistent client IDs. %q was expected, but received %q\", sender.clientID, clientID))\n\t\t}\n\n\t\tif sender.url != url {\n\t\t\tpanic(fmt.Errorf(\"inconsistent URLs. %q was expected, but received %q\", sender.url, url))\n\t\t}\n\t}\n\n\tif err := connect(url); err != nil {\n\t\tsender = nil\n\t\treturn nil, err\n\t}\n\n\treturn sender, nil\n}\n\n// Get will return a reporter if one exists, if one does not exist, nil will\n// be returned.\nfunc Get() *Reporter {\n\tlock.Lock()\n\tdefer lock.Unlock()\n\n\treturn sender\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/csm/metric.go",
    "content": "package csm\n\nimport (\n\t\"strconv\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n)\n\ntype metricTime time.Time\n\nfunc (t metricTime) MarshalJSON() ([]byte, error) {\n\tns := time.Duration(time.Time(t).UnixNano())\n\treturn []byte(strconv.FormatInt(int64(ns/time.Millisecond), 10)), nil\n}\n\ntype metric struct {\n\tClientID  *string     `json:\"ClientId,omitempty\"`\n\tAPI       *string     `json:\"Api,omitempty\"`\n\tService   *string     `json:\"Service,omitempty\"`\n\tTimestamp *metricTime `json:\"Timestamp,omitempty\"`\n\tType      *string     `json:\"Type,omitempty\"`\n\tVersion   *int        `json:\"Version,omitempty\"`\n\n\tAttemptCount *int `json:\"AttemptCount,omitempty\"`\n\tLatency      *int `json:\"Latency,omitempty\"`\n\n\tFqdn           *string `json:\"Fqdn,omitempty\"`\n\tUserAgent      *string `json:\"UserAgent,omitempty\"`\n\tAttemptLatency *int    `json:\"AttemptLatency,omitempty\"`\n\n\tSessionToken   *string `json:\"SessionToken,omitempty\"`\n\tRegion         *string `json:\"Region,omitempty\"`\n\tAccessKey      *string `json:\"AccessKey,omitempty\"`\n\tHTTPStatusCode *int    `json:\"HttpStatusCode,omitempty\"`\n\tXAmzID2        *string `json:\"XAmzId2,omitempty\"`\n\tXAmzRequestID  *string `json:\"XAmznRequestId,omitempty\"`\n\n\tAWSException        *string `json:\"AwsException,omitempty\"`\n\tAWSExceptionMessage *string `json:\"AwsExceptionMessage,omitempty\"`\n\tSDKException        *string `json:\"SdkException,omitempty\"`\n\tSDKExceptionMessage *string `json:\"SdkExceptionMessage,omitempty\"`\n\n\tFinalHTTPStatusCode      *int    `json:\"FinalHttpStatusCode,omitempty\"`\n\tFinalAWSException        *string `json:\"FinalAwsException,omitempty\"`\n\tFinalAWSExceptionMessage *string `json:\"FinalAwsExceptionMessage,omitempty\"`\n\tFinalSDKException        *string `json:\"FinalSdkException,omitempty\"`\n\tFinalSDKExceptionMessage *string `json:\"FinalSdkExceptionMessage,omitempty\"`\n\n\tDestinationIP    *string `json:\"DestinationIp,omitempty\"`\n\tConnectionReused *int    `json:\"ConnectionReused,omitempty\"`\n\n\tAcquireConnectionLatency *int `json:\"AcquireConnectionLatency,omitempty\"`\n\tConnectLatency           *int `json:\"ConnectLatency,omitempty\"`\n\tRequestLatency           *int `json:\"RequestLatency,omitempty\"`\n\tDNSLatency               *int `json:\"DnsLatency,omitempty\"`\n\tTCPLatency               *int `json:\"TcpLatency,omitempty\"`\n\tSSLLatency               *int `json:\"SslLatency,omitempty\"`\n\n\tMaxRetriesExceeded *int `json:\"MaxRetriesExceeded,omitempty\"`\n}\n\nfunc (m *metric) TruncateFields() {\n\tm.ClientID = truncateString(m.ClientID, 255)\n\tm.UserAgent = truncateString(m.UserAgent, 256)\n\n\tm.AWSException = truncateString(m.AWSException, 128)\n\tm.AWSExceptionMessage = truncateString(m.AWSExceptionMessage, 512)\n\n\tm.SDKException = truncateString(m.SDKException, 128)\n\tm.SDKExceptionMessage = truncateString(m.SDKExceptionMessage, 512)\n\n\tm.FinalAWSException = truncateString(m.FinalAWSException, 128)\n\tm.FinalAWSExceptionMessage = truncateString(m.FinalAWSExceptionMessage, 512)\n\n\tm.FinalSDKException = truncateString(m.FinalSDKException, 128)\n\tm.FinalSDKExceptionMessage = truncateString(m.FinalSDKExceptionMessage, 512)\n}\n\nfunc truncateString(v *string, l int) *string {\n\tif v != nil && len(*v) > l {\n\t\tnv := (*v)[:l]\n\t\treturn &nv\n\t}\n\n\treturn v\n}\n\nfunc (m *metric) SetException(e metricException) {\n\tswitch te := e.(type) {\n\tcase awsException:\n\t\tm.AWSException = aws.String(te.exception)\n\t\tm.AWSExceptionMessage = aws.String(te.message)\n\tcase sdkException:\n\t\tm.SDKException = aws.String(te.exception)\n\t\tm.SDKExceptionMessage = aws.String(te.message)\n\t}\n}\n\nfunc (m *metric) SetFinalException(e metricException) {\n\tswitch te := e.(type) {\n\tcase awsException:\n\t\tm.FinalAWSException = aws.String(te.exception)\n\t\tm.FinalAWSExceptionMessage = aws.String(te.message)\n\tcase sdkException:\n\t\tm.FinalSDKException = aws.String(te.exception)\n\t\tm.FinalSDKExceptionMessage = aws.String(te.message)\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/csm/metric_chan.go",
    "content": "package csm\n\nimport (\n\t\"sync/atomic\"\n)\n\nconst (\n\trunningEnum = iota\n\tpausedEnum\n)\n\nvar (\n\t// MetricsChannelSize of metrics to hold in the channel\n\tMetricsChannelSize = 100\n)\n\ntype metricChan struct {\n\tch     chan metric\n\tpaused int64\n}\n\nfunc newMetricChan(size int) metricChan {\n\treturn metricChan{\n\t\tch: make(chan metric, size),\n\t}\n}\n\nfunc (ch *metricChan) Pause() {\n\tatomic.StoreInt64(&ch.paused, pausedEnum)\n}\n\nfunc (ch *metricChan) Continue() {\n\tatomic.StoreInt64(&ch.paused, runningEnum)\n}\n\nfunc (ch *metricChan) IsPaused() bool {\n\tv := atomic.LoadInt64(&ch.paused)\n\treturn v == pausedEnum\n}\n\n// Push will push metrics to the metric channel if the channel\n// is not paused\nfunc (ch *metricChan) Push(m metric) bool {\n\tif ch.IsPaused() {\n\t\treturn false\n\t}\n\n\tselect {\n\tcase ch.ch <- m:\n\t\treturn true\n\tdefault:\n\t\treturn false\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/csm/metric_exception.go",
    "content": "package csm\n\ntype metricException interface {\n\tException() string\n\tMessage() string\n}\n\ntype requestException struct {\n\texception string\n\tmessage   string\n}\n\nfunc (e requestException) Exception() string {\n\treturn e.exception\n}\nfunc (e requestException) Message() string {\n\treturn e.message\n}\n\ntype awsException struct {\n\trequestException\n}\n\ntype sdkException struct {\n\trequestException\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/csm/reporter.go",
    "content": "package csm\n\nimport (\n\t\"encoding/json\"\n\t\"net\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n\t\"github.com/aws/aws-sdk-go/aws/request\"\n)\n\nconst (\n\t// DefaultPort is used when no port is specified\n\tDefaultPort = \"31000\"\n)\n\n// Reporter will gather metrics of API requests made and\n// send those metrics to the CSM endpoint.\ntype Reporter struct {\n\tclientID  string\n\turl       string\n\tconn      net.Conn\n\tmetricsCh metricChan\n\tdone      chan struct{}\n}\n\nvar (\n\tsender *Reporter\n)\n\nfunc connect(url string) error {\n\tconst network = \"udp\"\n\tif err := sender.connect(network, url); err != nil {\n\t\treturn err\n\t}\n\n\tif sender.done == nil {\n\t\tsender.done = make(chan struct{})\n\t\tgo sender.start()\n\t}\n\n\treturn nil\n}\n\nfunc newReporter(clientID, url string) *Reporter {\n\treturn &Reporter{\n\t\tclientID:  clientID,\n\t\turl:       url,\n\t\tmetricsCh: newMetricChan(MetricsChannelSize),\n\t}\n}\n\nfunc (rep *Reporter) sendAPICallAttemptMetric(r *request.Request) {\n\tif rep == nil {\n\t\treturn\n\t}\n\n\tnow := time.Now()\n\tcreds, _ := r.Config.Credentials.Get()\n\n\tm := metric{\n\t\tClientID:  aws.String(rep.clientID),\n\t\tAPI:       aws.String(r.Operation.Name),\n\t\tService:   aws.String(r.ClientInfo.ServiceID),\n\t\tTimestamp: (*metricTime)(&now),\n\t\tUserAgent: aws.String(r.HTTPRequest.Header.Get(\"User-Agent\")),\n\t\tRegion:    r.Config.Region,\n\t\tType:      aws.String(\"ApiCallAttempt\"),\n\t\tVersion:   aws.Int(1),\n\n\t\tXAmzRequestID: aws.String(r.RequestID),\n\n\t\tAttemptCount:   aws.Int(r.RetryCount + 1),\n\t\tAttemptLatency: aws.Int(int(now.Sub(r.AttemptTime).Nanoseconds() / int64(time.Millisecond))),\n\t\tAccessKey:      aws.String(creds.AccessKeyID),\n\t}\n\n\tif r.HTTPResponse != nil {\n\t\tm.HTTPStatusCode = aws.Int(r.HTTPResponse.StatusCode)\n\t}\n\n\tif r.Error != nil {\n\t\tif awserr, ok := r.Error.(awserr.Error); ok {\n\t\t\tm.SetException(getMetricException(awserr))\n\t\t}\n\t}\n\n\tm.TruncateFields()\n\trep.metricsCh.Push(m)\n}\n\nfunc getMetricException(err awserr.Error) metricException {\n\tmsg := err.Error()\n\tcode := err.Code()\n\n\tswitch code {\n\tcase \"RequestError\",\n\t\trequest.ErrCodeSerialization,\n\t\trequest.CanceledErrorCode:\n\t\treturn sdkException{\n\t\t\trequestException{exception: code, message: msg},\n\t\t}\n\tdefault:\n\t\treturn awsException{\n\t\t\trequestException{exception: code, message: msg},\n\t\t}\n\t}\n}\n\nfunc (rep *Reporter) sendAPICallMetric(r *request.Request) {\n\tif rep == nil {\n\t\treturn\n\t}\n\n\tnow := time.Now()\n\tm := metric{\n\t\tClientID:           aws.String(rep.clientID),\n\t\tAPI:                aws.String(r.Operation.Name),\n\t\tService:            aws.String(r.ClientInfo.ServiceID),\n\t\tTimestamp:          (*metricTime)(&now),\n\t\tUserAgent:          aws.String(r.HTTPRequest.Header.Get(\"User-Agent\")),\n\t\tType:               aws.String(\"ApiCall\"),\n\t\tAttemptCount:       aws.Int(r.RetryCount + 1),\n\t\tRegion:             r.Config.Region,\n\t\tLatency:            aws.Int(int(time.Now().Sub(r.Time) / time.Millisecond)),\n\t\tXAmzRequestID:      aws.String(r.RequestID),\n\t\tMaxRetriesExceeded: aws.Int(boolIntValue(r.RetryCount >= r.MaxRetries())),\n\t}\n\n\tif r.HTTPResponse != nil {\n\t\tm.FinalHTTPStatusCode = aws.Int(r.HTTPResponse.StatusCode)\n\t}\n\n\tif r.Error != nil {\n\t\tif awserr, ok := r.Error.(awserr.Error); ok {\n\t\t\tm.SetFinalException(getMetricException(awserr))\n\t\t}\n\t}\n\n\tm.TruncateFields()\n\n\t// TODO: Probably want to figure something out for logging dropped\n\t// metrics\n\trep.metricsCh.Push(m)\n}\n\nfunc (rep *Reporter) connect(network, url string) error {\n\tif rep.conn != nil {\n\t\trep.conn.Close()\n\t}\n\n\tconn, err := net.Dial(network, url)\n\tif err != nil {\n\t\treturn awserr.New(\"UDPError\", \"Could not connect\", err)\n\t}\n\n\trep.conn = conn\n\n\treturn nil\n}\n\nfunc (rep *Reporter) close() {\n\tif rep.done != nil {\n\t\tclose(rep.done)\n\t}\n\n\trep.metricsCh.Pause()\n}\n\nfunc (rep *Reporter) start() {\n\tdefer func() {\n\t\trep.metricsCh.Pause()\n\t}()\n\n\tfor {\n\t\tselect {\n\t\tcase <-rep.done:\n\t\t\trep.done = nil\n\t\t\treturn\n\t\tcase m := <-rep.metricsCh.ch:\n\t\t\t// TODO: What to do with this error? Probably should just log\n\t\t\tb, err := json.Marshal(m)\n\t\t\tif err != nil {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\trep.conn.Write(b)\n\t\t}\n\t}\n}\n\n// Pause will pause the metric channel preventing any new metrics from\n// being added.\nfunc (rep *Reporter) Pause() {\n\tlock.Lock()\n\tdefer lock.Unlock()\n\n\tif rep == nil {\n\t\treturn\n\t}\n\n\trep.close()\n}\n\n// Continue will reopen the metric channel and allow for monitoring\n// to be resumed.\nfunc (rep *Reporter) Continue() {\n\tlock.Lock()\n\tdefer lock.Unlock()\n\tif rep == nil {\n\t\treturn\n\t}\n\n\tif !rep.metricsCh.IsPaused() {\n\t\treturn\n\t}\n\n\trep.metricsCh.Continue()\n}\n\n// InjectHandlers will will enable client side metrics and inject the proper\n// handlers to handle how metrics are sent.\n//\n//\tExample:\n//\t\t// Start must be called in order to inject the correct handlers\n//\t\tr, err := csm.Start(\"clientID\", \"127.0.0.1:8094\")\n//\t\tif err != nil {\n//\t\t\tpanic(fmt.Errorf(\"expected no error, but received %v\", err))\n//\t\t}\n//\n//\t\tsess := session.NewSession()\n//\t\tr.InjectHandlers(&sess.Handlers)\n//\n//\t\t// create a new service client with our client side metric session\n//\t\tsvc := s3.New(sess)\nfunc (rep *Reporter) InjectHandlers(handlers *request.Handlers) {\n\tif rep == nil {\n\t\treturn\n\t}\n\n\thandlers.Complete.PushFrontNamed(request.NamedHandler{\n\t\tName: APICallMetricHandlerName,\n\t\tFn:   rep.sendAPICallMetric,\n\t})\n\n\thandlers.CompleteAttempt.PushFrontNamed(request.NamedHandler{\n\t\tName: APICallAttemptMetricHandlerName,\n\t\tFn:   rep.sendAPICallAttemptMetric,\n\t})\n}\n\n// boolIntValue return 1 for true and 0 for false.\nfunc boolIntValue(b bool) int {\n\tif b {\n\t\treturn 1\n\t}\n\n\treturn 0\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/defaults/defaults.go",
    "content": "// Package defaults is a collection of helpers to retrieve the SDK's default\n// configuration and handlers.\n//\n// Generally this package shouldn't be used directly, but session.Session\n// instead. This package is useful when you need to reset the defaults\n// of a session or service client to the SDK defaults before setting\n// additional parameters.\npackage defaults\n\nimport (\n\t\"fmt\"\n\t\"net\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"os\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n\t\"github.com/aws/aws-sdk-go/aws/corehandlers\"\n\t\"github.com/aws/aws-sdk-go/aws/credentials\"\n\t\"github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds\"\n\t\"github.com/aws/aws-sdk-go/aws/credentials/endpointcreds\"\n\t\"github.com/aws/aws-sdk-go/aws/ec2metadata\"\n\t\"github.com/aws/aws-sdk-go/aws/endpoints\"\n\t\"github.com/aws/aws-sdk-go/aws/request\"\n\t\"github.com/aws/aws-sdk-go/internal/shareddefaults\"\n)\n\n// A Defaults provides a collection of default values for SDK clients.\ntype Defaults struct {\n\tConfig   *aws.Config\n\tHandlers request.Handlers\n}\n\n// Get returns the SDK's default values with Config and handlers pre-configured.\nfunc Get() Defaults {\n\tcfg := Config()\n\thandlers := Handlers()\n\tcfg.Credentials = CredChain(cfg, handlers)\n\n\treturn Defaults{\n\t\tConfig:   cfg,\n\t\tHandlers: handlers,\n\t}\n}\n\n// Config returns the default configuration without credentials.\n// To retrieve a config with credentials also included use\n// `defaults.Get().Config` instead.\n//\n// Generally you shouldn't need to use this method directly, but\n// is available if you need to reset the configuration of an\n// existing service client or session.\nfunc Config() *aws.Config {\n\treturn aws.NewConfig().\n\t\tWithCredentials(credentials.AnonymousCredentials).\n\t\tWithRegion(os.Getenv(\"AWS_REGION\")).\n\t\tWithHTTPClient(http.DefaultClient).\n\t\tWithMaxRetries(aws.UseServiceDefaultRetries).\n\t\tWithLogger(aws.NewDefaultLogger()).\n\t\tWithLogLevel(aws.LogOff).\n\t\tWithEndpointResolver(endpoints.DefaultResolver())\n}\n\n// Handlers returns the default request handlers.\n//\n// Generally you shouldn't need to use this method directly, but\n// is available if you need to reset the request handlers of an\n// existing service client or session.\nfunc Handlers() request.Handlers {\n\tvar handlers request.Handlers\n\n\thandlers.Validate.PushBackNamed(corehandlers.ValidateEndpointHandler)\n\thandlers.Validate.AfterEachFn = request.HandlerListStopOnError\n\thandlers.Build.PushBackNamed(corehandlers.SDKVersionUserAgentHandler)\n\thandlers.Build.PushBackNamed(corehandlers.AddHostExecEnvUserAgentHander)\n\thandlers.Build.AfterEachFn = request.HandlerListStopOnError\n\thandlers.Sign.PushBackNamed(corehandlers.BuildContentLengthHandler)\n\thandlers.Send.PushBackNamed(corehandlers.ValidateReqSigHandler)\n\thandlers.Send.PushBackNamed(corehandlers.SendHandler)\n\thandlers.AfterRetry.PushBackNamed(corehandlers.AfterRetryHandler)\n\thandlers.ValidateResponse.PushBackNamed(corehandlers.ValidateResponseHandler)\n\n\treturn handlers\n}\n\n// CredChain returns the default credential chain.\n//\n// Generally you shouldn't need to use this method directly, but\n// is available if you need to reset the credentials of an\n// existing service client or session's Config.\nfunc CredChain(cfg *aws.Config, handlers request.Handlers) *credentials.Credentials {\n\treturn credentials.NewCredentials(&credentials.ChainProvider{\n\t\tVerboseErrors: aws.BoolValue(cfg.CredentialsChainVerboseErrors),\n\t\tProviders:     CredProviders(cfg, handlers),\n\t})\n}\n\n// CredProviders returns the slice of providers used in\n// the default credential chain.\n//\n// For applications that need to use some other provider (for example use\n// different  environment variables for legacy reasons) but still fall back\n// on the default chain of providers. This allows that default chaint to be\n// automatically updated\nfunc CredProviders(cfg *aws.Config, handlers request.Handlers) []credentials.Provider {\n\treturn []credentials.Provider{\n\t\t&credentials.EnvProvider{},\n\t\t&credentials.SharedCredentialsProvider{Filename: \"\", Profile: \"\"},\n\t\tRemoteCredProvider(*cfg, handlers),\n\t}\n}\n\nconst (\n\thttpProviderAuthorizationEnvVar = \"AWS_CONTAINER_AUTHORIZATION_TOKEN\"\n\thttpProviderEnvVar              = \"AWS_CONTAINER_CREDENTIALS_FULL_URI\"\n)\n\n// RemoteCredProvider returns a credentials provider for the default remote\n// endpoints such as EC2 or ECS Roles.\nfunc RemoteCredProvider(cfg aws.Config, handlers request.Handlers) credentials.Provider {\n\tif u := os.Getenv(httpProviderEnvVar); len(u) > 0 {\n\t\treturn localHTTPCredProvider(cfg, handlers, u)\n\t}\n\n\tif uri := os.Getenv(shareddefaults.ECSCredsProviderEnvVar); len(uri) > 0 {\n\t\tu := fmt.Sprintf(\"%s%s\", shareddefaults.ECSContainerCredentialsURI, uri)\n\t\treturn httpCredProvider(cfg, handlers, u)\n\t}\n\n\treturn ec2RoleProvider(cfg, handlers)\n}\n\nvar lookupHostFn = net.LookupHost\n\nfunc isLoopbackHost(host string) (bool, error) {\n\tip := net.ParseIP(host)\n\tif ip != nil {\n\t\treturn ip.IsLoopback(), nil\n\t}\n\n\t// Host is not an ip, perform lookup\n\taddrs, err := lookupHostFn(host)\n\tif err != nil {\n\t\treturn false, err\n\t}\n\tfor _, addr := range addrs {\n\t\tif !net.ParseIP(addr).IsLoopback() {\n\t\t\treturn false, nil\n\t\t}\n\t}\n\n\treturn true, nil\n}\n\nfunc localHTTPCredProvider(cfg aws.Config, handlers request.Handlers, u string) credentials.Provider {\n\tvar errMsg string\n\n\tparsed, err := url.Parse(u)\n\tif err != nil {\n\t\terrMsg = fmt.Sprintf(\"invalid URL, %v\", err)\n\t} else {\n\t\thost := aws.URLHostname(parsed)\n\t\tif len(host) == 0 {\n\t\t\terrMsg = \"unable to parse host from local HTTP cred provider URL\"\n\t\t} else if isLoopback, loopbackErr := isLoopbackHost(host); loopbackErr != nil {\n\t\t\terrMsg = fmt.Sprintf(\"failed to resolve host %q, %v\", host, loopbackErr)\n\t\t} else if !isLoopback {\n\t\t\terrMsg = fmt.Sprintf(\"invalid endpoint host, %q, only loopback hosts are allowed.\", host)\n\t\t}\n\t}\n\n\tif len(errMsg) > 0 {\n\t\tif cfg.Logger != nil {\n\t\t\tcfg.Logger.Log(\"Ignoring, HTTP credential provider\", errMsg, err)\n\t\t}\n\t\treturn credentials.ErrorProvider{\n\t\t\tErr:          awserr.New(\"CredentialsEndpointError\", errMsg, err),\n\t\t\tProviderName: endpointcreds.ProviderName,\n\t\t}\n\t}\n\n\treturn httpCredProvider(cfg, handlers, u)\n}\n\nfunc httpCredProvider(cfg aws.Config, handlers request.Handlers, u string) credentials.Provider {\n\treturn endpointcreds.NewProviderClient(cfg, handlers, u,\n\t\tfunc(p *endpointcreds.Provider) {\n\t\t\tp.ExpiryWindow = 5 * time.Minute\n\t\t\tp.AuthorizationToken = os.Getenv(httpProviderAuthorizationEnvVar)\n\t\t},\n\t)\n}\n\nfunc ec2RoleProvider(cfg aws.Config, handlers request.Handlers) credentials.Provider {\n\tresolver := cfg.EndpointResolver\n\tif resolver == nil {\n\t\tresolver = endpoints.DefaultResolver()\n\t}\n\n\te, _ := resolver.EndpointFor(endpoints.Ec2metadataServiceID, \"\")\n\treturn &ec2rolecreds.EC2RoleProvider{\n\t\tClient:       ec2metadata.NewClient(cfg, handlers, e.URL, e.SigningRegion),\n\t\tExpiryWindow: 5 * time.Minute,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/defaults/shared_config.go",
    "content": "package defaults\n\nimport (\n\t\"github.com/aws/aws-sdk-go/internal/shareddefaults\"\n)\n\n// SharedCredentialsFilename returns the SDK's default file path\n// for the shared credentials file.\n//\n// Builds the shared config file path based on the OS's platform.\n//\n//   - Linux/Unix: $HOME/.aws/credentials\n//   - Windows: %USERPROFILE%\\.aws\\credentials\nfunc SharedCredentialsFilename() string {\n\treturn shareddefaults.SharedCredentialsFilename()\n}\n\n// SharedConfigFilename returns the SDK's default file path for\n// the shared config file.\n//\n// Builds the shared config file path based on the OS's platform.\n//\n//   - Linux/Unix: $HOME/.aws/config\n//   - Windows: %USERPROFILE%\\.aws\\config\nfunc SharedConfigFilename() string {\n\treturn shareddefaults.SharedConfigFilename()\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/doc.go",
    "content": "// Package aws provides the core SDK's utilities and shared types. Use this package's\n// utilities to simplify setting and reading API operations parameters.\n//\n// Value and Pointer Conversion Utilities\n//\n// This package includes a helper conversion utility for each scalar type the SDK's\n// API use. These utilities make getting a pointer of the scalar, and dereferencing\n// a pointer easier.\n//\n// Each conversion utility comes in two forms. Value to Pointer and Pointer to Value.\n// The Pointer to value will safely dereference the pointer and return its value.\n// If the pointer was nil, the scalar's zero value will be returned.\n//\n// The value to pointer functions will be named after the scalar type. So get a\n// *string from a string value use the \"String\" function. This makes it easy to\n// to get pointer of a literal string value, because getting the address of a\n// literal requires assigning the value to a variable first.\n//\n//    var strPtr *string\n//\n//    // Without the SDK's conversion functions\n//    str := \"my string\"\n//    strPtr = &str\n//\n//    // With the SDK's conversion functions\n//    strPtr = aws.String(\"my string\")\n//\n//    // Convert *string to string value\n//    str = aws.StringValue(strPtr)\n//\n// In addition to scalars the aws package also includes conversion utilities for\n// map and slice for commonly types used in API parameters. The map and slice\n// conversion functions use similar naming pattern as the scalar conversion\n// functions.\n//\n//    var strPtrs []*string\n//    var strs []string = []string{\"Go\", \"Gophers\", \"Go\"}\n//\n//    // Convert []string to []*string\n//    strPtrs = aws.StringSlice(strs)\n//\n//    // Convert []*string to []string\n//    strs = aws.StringValueSlice(strPtrs)\n//\n// SDK Default HTTP Client\n//\n// The SDK will use the http.DefaultClient if a HTTP client is not provided to\n// the SDK's Session, or service client constructor. This means that if the\n// http.DefaultClient is modified by other components of your application the\n// modifications will be picked up by the SDK as well.\n//\n// In some cases this might be intended, but it is a better practice to create\n// a custom HTTP Client to share explicitly through your application. You can\n// configure the SDK to use the custom HTTP Client by setting the HTTPClient\n// value of the SDK's Config type when creating a Session or service client.\npackage aws\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/api.go",
    "content": "package ec2metadata\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n\t\"github.com/aws/aws-sdk-go/aws/request\"\n\t\"github.com/aws/aws-sdk-go/internal/sdkuri\"\n)\n\n// GetMetadata uses the path provided to request information from the EC2\n// instance metdata service. The content will be returned as a string, or\n// error if the request failed.\nfunc (c *EC2Metadata) GetMetadata(p string) (string, error) {\n\top := &request.Operation{\n\t\tName:       \"GetMetadata\",\n\t\tHTTPMethod: \"GET\",\n\t\tHTTPPath:   sdkuri.PathJoin(\"/meta-data\", p),\n\t}\n\n\toutput := &metadataOutput{}\n\treq := c.NewRequest(op, nil, output)\n\terr := req.Send()\n\n\treturn output.Content, err\n}\n\n// GetUserData returns the userdata that was configured for the service. If\n// there is no user-data setup for the EC2 instance a \"NotFoundError\" error\n// code will be returned.\nfunc (c *EC2Metadata) GetUserData() (string, error) {\n\top := &request.Operation{\n\t\tName:       \"GetUserData\",\n\t\tHTTPMethod: \"GET\",\n\t\tHTTPPath:   \"/user-data\",\n\t}\n\n\toutput := &metadataOutput{}\n\treq := c.NewRequest(op, nil, output)\n\treq.Handlers.UnmarshalError.PushBack(func(r *request.Request) {\n\t\tif r.HTTPResponse.StatusCode == http.StatusNotFound {\n\t\t\tr.Error = awserr.New(\"NotFoundError\", \"user-data not found\", r.Error)\n\t\t}\n\t})\n\terr := req.Send()\n\n\treturn output.Content, err\n}\n\n// GetDynamicData uses the path provided to request information from the EC2\n// instance metadata service for dynamic data. The content will be returned\n// as a string, or error if the request failed.\nfunc (c *EC2Metadata) GetDynamicData(p string) (string, error) {\n\top := &request.Operation{\n\t\tName:       \"GetDynamicData\",\n\t\tHTTPMethod: \"GET\",\n\t\tHTTPPath:   sdkuri.PathJoin(\"/dynamic\", p),\n\t}\n\n\toutput := &metadataOutput{}\n\treq := c.NewRequest(op, nil, output)\n\terr := req.Send()\n\n\treturn output.Content, err\n}\n\n// GetInstanceIdentityDocument retrieves an identity document describing an\n// instance. Error is returned if the request fails or is unable to parse\n// the response.\nfunc (c *EC2Metadata) GetInstanceIdentityDocument() (EC2InstanceIdentityDocument, error) {\n\tresp, err := c.GetDynamicData(\"instance-identity/document\")\n\tif err != nil {\n\t\treturn EC2InstanceIdentityDocument{},\n\t\t\tawserr.New(\"EC2MetadataRequestError\",\n\t\t\t\t\"failed to get EC2 instance identity document\", err)\n\t}\n\n\tdoc := EC2InstanceIdentityDocument{}\n\tif err := json.NewDecoder(strings.NewReader(resp)).Decode(&doc); err != nil {\n\t\treturn EC2InstanceIdentityDocument{},\n\t\t\tawserr.New(request.ErrCodeSerialization,\n\t\t\t\t\"failed to decode EC2 instance identity document\", err)\n\t}\n\n\treturn doc, nil\n}\n\n// IAMInfo retrieves IAM info from the metadata API\nfunc (c *EC2Metadata) IAMInfo() (EC2IAMInfo, error) {\n\tresp, err := c.GetMetadata(\"iam/info\")\n\tif err != nil {\n\t\treturn EC2IAMInfo{},\n\t\t\tawserr.New(\"EC2MetadataRequestError\",\n\t\t\t\t\"failed to get EC2 IAM info\", err)\n\t}\n\n\tinfo := EC2IAMInfo{}\n\tif err := json.NewDecoder(strings.NewReader(resp)).Decode(&info); err != nil {\n\t\treturn EC2IAMInfo{},\n\t\t\tawserr.New(request.ErrCodeSerialization,\n\t\t\t\t\"failed to decode EC2 IAM info\", err)\n\t}\n\n\tif info.Code != \"Success\" {\n\t\terrMsg := fmt.Sprintf(\"failed to get EC2 IAM Info (%s)\", info.Code)\n\t\treturn EC2IAMInfo{},\n\t\t\tawserr.New(\"EC2MetadataError\", errMsg, nil)\n\t}\n\n\treturn info, nil\n}\n\n// Region returns the region the instance is running in.\nfunc (c *EC2Metadata) Region() (string, error) {\n\tresp, err := c.GetMetadata(\"placement/availability-zone\")\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\tif len(resp) == 0 {\n\t\treturn \"\", awserr.New(\"EC2MetadataError\", \"invalid Region response\", nil)\n\t}\n\n\t// returns region without the suffix. Eg: us-west-2a becomes us-west-2\n\treturn resp[:len(resp)-1], nil\n}\n\n// Available returns if the application has access to the EC2 Metadata service.\n// Can be used to determine if application is running within an EC2 Instance and\n// the metadata service is available.\nfunc (c *EC2Metadata) Available() bool {\n\tif _, err := c.GetMetadata(\"instance-id\"); err != nil {\n\t\treturn false\n\t}\n\n\treturn true\n}\n\n// An EC2IAMInfo provides the shape for unmarshaling\n// an IAM info from the metadata API\ntype EC2IAMInfo struct {\n\tCode               string\n\tLastUpdated        time.Time\n\tInstanceProfileArn string\n\tInstanceProfileID  string\n}\n\n// An EC2InstanceIdentityDocument provides the shape for unmarshaling\n// an instance identity document\ntype EC2InstanceIdentityDocument struct {\n\tDevpayProductCodes []string  `json:\"devpayProductCodes\"`\n\tAvailabilityZone   string    `json:\"availabilityZone\"`\n\tPrivateIP          string    `json:\"privateIp\"`\n\tVersion            string    `json:\"version\"`\n\tRegion             string    `json:\"region\"`\n\tInstanceID         string    `json:\"instanceId\"`\n\tBillingProducts    []string  `json:\"billingProducts\"`\n\tInstanceType       string    `json:\"instanceType\"`\n\tAccountID          string    `json:\"accountId\"`\n\tPendingTime        time.Time `json:\"pendingTime\"`\n\tImageID            string    `json:\"imageId\"`\n\tKernelID           string    `json:\"kernelId\"`\n\tRamdiskID          string    `json:\"ramdiskId\"`\n\tArchitecture       string    `json:\"architecture\"`\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/service.go",
    "content": "// Package ec2metadata provides the client for making API calls to the\n// EC2 Metadata service.\n//\n// This package's client can be disabled completely by setting the environment\n// variable \"AWS_EC2_METADATA_DISABLED=true\". This environment variable set to\n// true instructs the SDK to disable the EC2 Metadata client. The client cannot\n// be used while the environment variable is set to true, (case insensitive).\npackage ec2metadata\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"io\"\n\t\"net/http\"\n\t\"os\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n\t\"github.com/aws/aws-sdk-go/aws/client\"\n\t\"github.com/aws/aws-sdk-go/aws/client/metadata\"\n\t\"github.com/aws/aws-sdk-go/aws/corehandlers\"\n\t\"github.com/aws/aws-sdk-go/aws/request\"\n)\n\n// ServiceName is the name of the service.\nconst ServiceName = \"ec2metadata\"\nconst disableServiceEnvVar = \"AWS_EC2_METADATA_DISABLED\"\n\n// A EC2Metadata is an EC2 Metadata service Client.\ntype EC2Metadata struct {\n\t*client.Client\n}\n\n// New creates a new instance of the EC2Metadata client with a session.\n// This client is safe to use across multiple goroutines.\n//\n//\n// Example:\n//     // Create a EC2Metadata client from just a session.\n//     svc := ec2metadata.New(mySession)\n//\n//     // Create a EC2Metadata client with additional configuration\n//     svc := ec2metadata.New(mySession, aws.NewConfig().WithLogLevel(aws.LogDebugHTTPBody))\nfunc New(p client.ConfigProvider, cfgs ...*aws.Config) *EC2Metadata {\n\tc := p.ClientConfig(ServiceName, cfgs...)\n\treturn NewClient(*c.Config, c.Handlers, c.Endpoint, c.SigningRegion)\n}\n\n// NewClient returns a new EC2Metadata client. Should be used to create\n// a client when not using a session. Generally using just New with a session\n// is preferred.\n//\n// If an unmodified HTTP client is provided from the stdlib default, or no client\n// the EC2RoleProvider's EC2Metadata HTTP client's timeout will be shortened.\n// To disable this set Config.EC2MetadataDisableTimeoutOverride to false. Enabled by default.\nfunc NewClient(cfg aws.Config, handlers request.Handlers, endpoint, signingRegion string, opts ...func(*client.Client)) *EC2Metadata {\n\tif !aws.BoolValue(cfg.EC2MetadataDisableTimeoutOverride) && httpClientZero(cfg.HTTPClient) {\n\t\t// If the http client is unmodified and this feature is not disabled\n\t\t// set custom timeouts for EC2Metadata requests.\n\t\tcfg.HTTPClient = &http.Client{\n\t\t\t// use a shorter timeout than default because the metadata\n\t\t\t// service is local if it is running, and to fail faster\n\t\t\t// if not running on an ec2 instance.\n\t\t\tTimeout: 5 * time.Second,\n\t\t}\n\t}\n\n\tsvc := &EC2Metadata{\n\t\tClient: client.New(\n\t\t\tcfg,\n\t\t\tmetadata.ClientInfo{\n\t\t\t\tServiceName: ServiceName,\n\t\t\t\tServiceID:   ServiceName,\n\t\t\t\tEndpoint:    endpoint,\n\t\t\t\tAPIVersion:  \"latest\",\n\t\t\t},\n\t\t\thandlers,\n\t\t),\n\t}\n\n\tsvc.Handlers.Unmarshal.PushBack(unmarshalHandler)\n\tsvc.Handlers.UnmarshalError.PushBack(unmarshalError)\n\tsvc.Handlers.Validate.Clear()\n\tsvc.Handlers.Validate.PushBack(validateEndpointHandler)\n\n\t// Disable the EC2 Metadata service if the environment variable is set.\n\t// This shortcirctes the service's functionality to always fail to send\n\t// requests.\n\tif strings.ToLower(os.Getenv(disableServiceEnvVar)) == \"true\" {\n\t\tsvc.Handlers.Send.SwapNamed(request.NamedHandler{\n\t\t\tName: corehandlers.SendHandler.Name,\n\t\t\tFn: func(r *request.Request) {\n\t\t\t\tr.HTTPResponse = &http.Response{\n\t\t\t\t\tHeader: http.Header{},\n\t\t\t\t}\n\t\t\t\tr.Error = awserr.New(\n\t\t\t\t\trequest.CanceledErrorCode,\n\t\t\t\t\t\"EC2 IMDS access disabled via \"+disableServiceEnvVar+\" env var\",\n\t\t\t\t\tnil)\n\t\t\t},\n\t\t})\n\t}\n\n\t// Add additional options to the service config\n\tfor _, option := range opts {\n\t\toption(svc.Client)\n\t}\n\n\treturn svc\n}\n\nfunc httpClientZero(c *http.Client) bool {\n\treturn c == nil || (c.Transport == nil && c.CheckRedirect == nil && c.Jar == nil && c.Timeout == 0)\n}\n\ntype metadataOutput struct {\n\tContent string\n}\n\nfunc unmarshalHandler(r *request.Request) {\n\tdefer r.HTTPResponse.Body.Close()\n\tb := &bytes.Buffer{}\n\tif _, err := io.Copy(b, r.HTTPResponse.Body); err != nil {\n\t\tr.Error = awserr.New(request.ErrCodeSerialization, \"unable to unmarshal EC2 metadata respose\", err)\n\t\treturn\n\t}\n\n\tif data, ok := r.Data.(*metadataOutput); ok {\n\t\tdata.Content = b.String()\n\t}\n}\n\nfunc unmarshalError(r *request.Request) {\n\tdefer r.HTTPResponse.Body.Close()\n\tb := &bytes.Buffer{}\n\tif _, err := io.Copy(b, r.HTTPResponse.Body); err != nil {\n\t\tr.Error = awserr.New(request.ErrCodeSerialization, \"unable to unmarshal EC2 metadata error respose\", err)\n\t\treturn\n\t}\n\n\t// Response body format is not consistent between metadata endpoints.\n\t// Grab the error message as a string and include that as the source error\n\tr.Error = awserr.New(\"EC2MetadataError\", \"failed to make EC2Metadata request\", errors.New(b.String()))\n}\n\nfunc validateEndpointHandler(r *request.Request) {\n\tif r.ClientInfo.Endpoint == \"\" {\n\t\tr.Error = aws.ErrMissingEndpoint\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/endpoints/decode.go",
    "content": "package endpoints\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n)\n\ntype modelDefinition map[string]json.RawMessage\n\n// A DecodeModelOptions are the options for how the endpoints model definition\n// are decoded.\ntype DecodeModelOptions struct {\n\tSkipCustomizations bool\n}\n\n// Set combines all of the option functions together.\nfunc (d *DecodeModelOptions) Set(optFns ...func(*DecodeModelOptions)) {\n\tfor _, fn := range optFns {\n\t\tfn(d)\n\t}\n}\n\n// DecodeModel unmarshals a Regions and Endpoint model definition file into\n// a endpoint Resolver. If the file format is not supported, or an error occurs\n// when unmarshaling the model an error will be returned.\n//\n// Casting the return value of this func to a EnumPartitions will\n// allow you to get a list of the partitions in the order the endpoints\n// will be resolved in.\n//\n//    resolver, err := endpoints.DecodeModel(reader)\n//\n//    partitions := resolver.(endpoints.EnumPartitions).Partitions()\n//    for _, p := range partitions {\n//        // ... inspect partitions\n//    }\nfunc DecodeModel(r io.Reader, optFns ...func(*DecodeModelOptions)) (Resolver, error) {\n\tvar opts DecodeModelOptions\n\topts.Set(optFns...)\n\n\t// Get the version of the partition file to determine what\n\t// unmarshaling model to use.\n\tmodelDef := modelDefinition{}\n\tif err := json.NewDecoder(r).Decode(&modelDef); err != nil {\n\t\treturn nil, newDecodeModelError(\"failed to decode endpoints model\", err)\n\t}\n\n\tvar version string\n\tif b, ok := modelDef[\"version\"]; ok {\n\t\tversion = string(b)\n\t} else {\n\t\treturn nil, newDecodeModelError(\"endpoints version not found in model\", nil)\n\t}\n\n\tif version == \"3\" {\n\t\treturn decodeV3Endpoints(modelDef, opts)\n\t}\n\n\treturn nil, newDecodeModelError(\n\t\tfmt.Sprintf(\"endpoints version %s, not supported\", version), nil)\n}\n\nfunc decodeV3Endpoints(modelDef modelDefinition, opts DecodeModelOptions) (Resolver, error) {\n\tb, ok := modelDef[\"partitions\"]\n\tif !ok {\n\t\treturn nil, newDecodeModelError(\"endpoints model missing partitions\", nil)\n\t}\n\n\tps := partitions{}\n\tif err := json.Unmarshal(b, &ps); err != nil {\n\t\treturn nil, newDecodeModelError(\"failed to decode endpoints model\", err)\n\t}\n\n\tif opts.SkipCustomizations {\n\t\treturn ps, nil\n\t}\n\n\t// Customization\n\tfor i := 0; i < len(ps); i++ {\n\t\tp := &ps[i]\n\t\tcustAddEC2Metadata(p)\n\t\tcustAddS3DualStack(p)\n\t\tcustRmIotDataService(p)\n\t\tcustFixAppAutoscalingChina(p)\n\t\tcustFixAppAutoscalingUsGov(p)\n\t}\n\n\treturn ps, nil\n}\n\nfunc custAddS3DualStack(p *partition) {\n\tif p.ID != \"aws\" {\n\t\treturn\n\t}\n\n\tcustAddDualstack(p, \"s3\")\n\tcustAddDualstack(p, \"s3-control\")\n}\n\nfunc custAddDualstack(p *partition, svcName string) {\n\ts, ok := p.Services[svcName]\n\tif !ok {\n\t\treturn\n\t}\n\n\ts.Defaults.HasDualStack = boxedTrue\n\ts.Defaults.DualStackHostname = \"{service}.dualstack.{region}.{dnsSuffix}\"\n\n\tp.Services[svcName] = s\n}\n\nfunc custAddEC2Metadata(p *partition) {\n\tp.Services[\"ec2metadata\"] = service{\n\t\tIsRegionalized:    boxedFalse,\n\t\tPartitionEndpoint: \"aws-global\",\n\t\tEndpoints: endpoints{\n\t\t\t\"aws-global\": endpoint{\n\t\t\t\tHostname:  \"169.254.169.254/latest\",\n\t\t\t\tProtocols: []string{\"http\"},\n\t\t\t},\n\t\t},\n\t}\n}\n\nfunc custRmIotDataService(p *partition) {\n\tdelete(p.Services, \"data.iot\")\n}\n\nfunc custFixAppAutoscalingChina(p *partition) {\n\tif p.ID != \"aws-cn\" {\n\t\treturn\n\t}\n\n\tconst serviceName = \"application-autoscaling\"\n\ts, ok := p.Services[serviceName]\n\tif !ok {\n\t\treturn\n\t}\n\n\tconst expectHostname = `autoscaling.{region}.amazonaws.com`\n\tif e, a := s.Defaults.Hostname, expectHostname; e != a {\n\t\tfmt.Printf(\"custFixAppAutoscalingChina: ignoring customization, expected %s, got %s\\n\", e, a)\n\t\treturn\n\t}\n\n\ts.Defaults.Hostname = expectHostname + \".cn\"\n\tp.Services[serviceName] = s\n}\n\nfunc custFixAppAutoscalingUsGov(p *partition) {\n\tif p.ID != \"aws-us-gov\" {\n\t\treturn\n\t}\n\n\tconst serviceName = \"application-autoscaling\"\n\ts, ok := p.Services[serviceName]\n\tif !ok {\n\t\treturn\n\t}\n\n\tif a := s.Defaults.CredentialScope.Service; a != \"\" {\n\t\tfmt.Printf(\"custFixAppAutoscalingUsGov: ignoring customization, expected empty credential scope service, got %s\\n\", a)\n\t\treturn\n\t}\n\n\tif a := s.Defaults.Hostname; a != \"\" {\n\t\tfmt.Printf(\"custFixAppAutoscalingUsGov: ignoring customization, expected empty hostname, got %s\\n\", a)\n\t\treturn\n\t}\n\n\ts.Defaults.CredentialScope.Service = \"application-autoscaling\"\n\ts.Defaults.Hostname = \"autoscaling.{region}.amazonaws.com\"\n\n\tp.Services[serviceName] = s\n}\n\ntype decodeModelError struct {\n\tawsError\n}\n\nfunc newDecodeModelError(msg string, err error) decodeModelError {\n\treturn decodeModelError{\n\t\tawsError: awserr.New(\"DecodeEndpointsModelError\", msg, err),\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/endpoints/defaults.go",
    "content": "// Code generated by aws/endpoints/v3model_codegen.go. DO NOT EDIT.\n\npackage endpoints\n\nimport (\n\t\"regexp\"\n)\n\n// Partition identifiers\nconst (\n\tAwsPartitionID      = \"aws\"        // AWS Standard partition.\n\tAwsCnPartitionID    = \"aws-cn\"     // AWS China partition.\n\tAwsUsGovPartitionID = \"aws-us-gov\" // AWS GovCloud (US) partition.\n)\n\n// AWS Standard partition's regions.\nconst (\n\tApEast1RegionID      = \"ap-east-1\"      // Asia Pacific (Hong Kong).\n\tApNortheast1RegionID = \"ap-northeast-1\" // Asia Pacific (Tokyo).\n\tApNortheast2RegionID = \"ap-northeast-2\" // Asia Pacific (Seoul).\n\tApSouth1RegionID     = \"ap-south-1\"     // Asia Pacific (Mumbai).\n\tApSoutheast1RegionID = \"ap-southeast-1\" // Asia Pacific (Singapore).\n\tApSoutheast2RegionID = \"ap-southeast-2\" // Asia Pacific (Sydney).\n\tCaCentral1RegionID   = \"ca-central-1\"   // Canada (Central).\n\tEuCentral1RegionID   = \"eu-central-1\"   // EU (Frankfurt).\n\tEuNorth1RegionID     = \"eu-north-1\"     // EU (Stockholm).\n\tEuWest1RegionID      = \"eu-west-1\"      // EU (Ireland).\n\tEuWest2RegionID      = \"eu-west-2\"      // EU (London).\n\tEuWest3RegionID      = \"eu-west-3\"      // EU (Paris).\n\tSaEast1RegionID      = \"sa-east-1\"      // South America (Sao Paulo).\n\tUsEast1RegionID      = \"us-east-1\"      // US East (N. Virginia).\n\tUsEast2RegionID      = \"us-east-2\"      // US East (Ohio).\n\tUsWest1RegionID      = \"us-west-1\"      // US West (N. California).\n\tUsWest2RegionID      = \"us-west-2\"      // US West (Oregon).\n)\n\n// AWS China partition's regions.\nconst (\n\tCnNorth1RegionID     = \"cn-north-1\"     // China (Beijing).\n\tCnNorthwest1RegionID = \"cn-northwest-1\" // China (Ningxia).\n)\n\n// AWS GovCloud (US) partition's regions.\nconst (\n\tUsGovEast1RegionID = \"us-gov-east-1\" // AWS GovCloud (US-East).\n\tUsGovWest1RegionID = \"us-gov-west-1\" // AWS GovCloud (US).\n)\n\n// DefaultResolver returns an Endpoint resolver that will be able\n// to resolve endpoints for: AWS Standard, AWS China, and AWS GovCloud (US).\n//\n// Use DefaultPartitions() to get the list of the default partitions.\nfunc DefaultResolver() Resolver {\n\treturn defaultPartitions\n}\n\n// DefaultPartitions returns a list of the partitions the SDK is bundled\n// with. The available partitions are: AWS Standard, AWS China, and AWS GovCloud (US).\n//\n//    partitions := endpoints.DefaultPartitions\n//    for _, p := range partitions {\n//        // ... inspect partitions\n//    }\nfunc DefaultPartitions() []Partition {\n\treturn defaultPartitions.Partitions()\n}\n\nvar defaultPartitions = partitions{\n\tawsPartition,\n\tawscnPartition,\n\tawsusgovPartition,\n}\n\n// AwsPartition returns the Resolver for AWS Standard.\nfunc AwsPartition() Partition {\n\treturn awsPartition.Partition()\n}\n\nvar awsPartition = partition{\n\tID:        \"aws\",\n\tName:      \"AWS Standard\",\n\tDNSSuffix: \"amazonaws.com\",\n\tRegionRegex: regionRegex{\n\t\tRegexp: func() *regexp.Regexp {\n\t\t\treg, _ := regexp.Compile(\"^(us|eu|ap|sa|ca)\\\\-\\\\w+\\\\-\\\\d+$\")\n\t\t\treturn reg\n\t\t}(),\n\t},\n\tDefaults: endpoint{\n\t\tHostname:          \"{service}.{region}.{dnsSuffix}\",\n\t\tProtocols:         []string{\"https\"},\n\t\tSignatureVersions: []string{\"v4\"},\n\t},\n\tRegions: regions{\n\t\t\"ap-east-1\": region{\n\t\t\tDescription: \"Asia Pacific (Hong Kong)\",\n\t\t},\n\t\t\"ap-northeast-1\": region{\n\t\t\tDescription: \"Asia Pacific (Tokyo)\",\n\t\t},\n\t\t\"ap-northeast-2\": region{\n\t\t\tDescription: \"Asia Pacific (Seoul)\",\n\t\t},\n\t\t\"ap-south-1\": region{\n\t\t\tDescription: \"Asia Pacific (Mumbai)\",\n\t\t},\n\t\t\"ap-southeast-1\": region{\n\t\t\tDescription: \"Asia Pacific (Singapore)\",\n\t\t},\n\t\t\"ap-southeast-2\": region{\n\t\t\tDescription: \"Asia Pacific (Sydney)\",\n\t\t},\n\t\t\"ca-central-1\": region{\n\t\t\tDescription: \"Canada (Central)\",\n\t\t},\n\t\t\"eu-central-1\": region{\n\t\t\tDescription: \"EU (Frankfurt)\",\n\t\t},\n\t\t\"eu-north-1\": region{\n\t\t\tDescription: \"EU (Stockholm)\",\n\t\t},\n\t\t\"eu-west-1\": region{\n\t\t\tDescription: \"EU (Ireland)\",\n\t\t},\n\t\t\"eu-west-2\": region{\n\t\t\tDescription: \"EU (London)\",\n\t\t},\n\t\t\"eu-west-3\": region{\n\t\t\tDescription: \"EU (Paris)\",\n\t\t},\n\t\t\"sa-east-1\": region{\n\t\t\tDescription: \"South America (Sao Paulo)\",\n\t\t},\n\t\t\"us-east-1\": region{\n\t\t\tDescription: \"US East (N. Virginia)\",\n\t\t},\n\t\t\"us-east-2\": region{\n\t\t\tDescription: \"US East (Ohio)\",\n\t\t},\n\t\t\"us-west-1\": region{\n\t\t\tDescription: \"US West (N. California)\",\n\t\t},\n\t\t\"us-west-2\": region{\n\t\t\tDescription: \"US West (Oregon)\",\n\t\t},\n\t},\n\tServices: services{\n\t\t\"a4b\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-east-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"acm\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-east-1\":      endpoint{},\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-north-1\":     endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"sa-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"acm-pca\": service{\n\t\t\tDefaults: endpoint{\n\t\t\t\tProtocols: []string{\"https\"},\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-north-1\":     endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"api.ecr\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-east-1\": endpoint{\n\t\t\t\t\tHostname: \"api.ecr.ap-east-1.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"ap-east-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"ap-northeast-1\": endpoint{\n\t\t\t\t\tHostname: \"api.ecr.ap-northeast-1.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"ap-northeast-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"ap-northeast-2\": endpoint{\n\t\t\t\t\tHostname: \"api.ecr.ap-northeast-2.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"ap-northeast-2\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"ap-south-1\": endpoint{\n\t\t\t\t\tHostname: \"api.ecr.ap-south-1.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"ap-south-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"ap-southeast-1\": endpoint{\n\t\t\t\t\tHostname: \"api.ecr.ap-southeast-1.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"ap-southeast-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"ap-southeast-2\": endpoint{\n\t\t\t\t\tHostname: \"api.ecr.ap-southeast-2.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"ap-southeast-2\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"ca-central-1\": endpoint{\n\t\t\t\t\tHostname: \"api.ecr.ca-central-1.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"ca-central-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"eu-central-1\": endpoint{\n\t\t\t\t\tHostname: \"api.ecr.eu-central-1.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"eu-central-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"eu-north-1\": endpoint{\n\t\t\t\t\tHostname: \"api.ecr.eu-north-1.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"eu-north-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"eu-west-1\": endpoint{\n\t\t\t\t\tHostname: \"api.ecr.eu-west-1.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"eu-west-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"eu-west-2\": endpoint{\n\t\t\t\t\tHostname: \"api.ecr.eu-west-2.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"eu-west-2\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"eu-west-3\": endpoint{\n\t\t\t\t\tHostname: \"api.ecr.eu-west-3.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"eu-west-3\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"sa-east-1\": endpoint{\n\t\t\t\t\tHostname: \"api.ecr.sa-east-1.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"sa-east-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"us-east-1\": endpoint{\n\t\t\t\t\tHostname: \"api.ecr.us-east-1.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-east-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"us-east-2\": endpoint{\n\t\t\t\t\tHostname: \"api.ecr.us-east-2.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-east-2\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"us-west-1\": endpoint{\n\t\t\t\t\tHostname: \"api.ecr.us-west-1.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-west-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"us-west-2\": endpoint{\n\t\t\t\t\tHostname: \"api.ecr.us-west-2.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-west-2\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t\"api.mediatailor\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"api.pricing\": service{\n\t\t\tDefaults: endpoint{\n\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\tService: \"pricing\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-south-1\": endpoint{},\n\t\t\t\t\"us-east-1\":  endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"api.sagemaker\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1-fips\": endpoint{\n\t\t\t\t\tHostname: \"api-fips.sagemaker.us-east-1.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-east-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"us-east-2\": endpoint{},\n\t\t\t\t\"us-east-2-fips\": endpoint{\n\t\t\t\t\tHostname: \"api-fips.sagemaker.us-east-2.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-east-2\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"us-west-1\": endpoint{},\n\t\t\t\t\"us-west-1-fips\": endpoint{\n\t\t\t\t\tHostname: \"api-fips.sagemaker.us-west-1.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-west-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"us-west-2\": endpoint{},\n\t\t\t\t\"us-west-2-fips\": endpoint{\n\t\t\t\t\tHostname: \"api-fips.sagemaker.us-west-2.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-west-2\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t\"apigateway\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-east-1\":      endpoint{},\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-north-1\":     endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"sa-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"application-autoscaling\": service{\n\t\t\tDefaults: endpoint{\n\t\t\t\tHostname:  \"autoscaling.{region}.amazonaws.com\",\n\t\t\t\tProtocols: []string{\"http\", \"https\"},\n\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\tService: \"application-autoscaling\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-east-1\":      endpoint{},\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-north-1\":     endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"sa-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"appmesh\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"appstream2\": service{\n\t\t\tDefaults: endpoint{\n\t\t\t\tProtocols: []string{\"https\"},\n\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\tService: \"appstream\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"appsync\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"athena\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"autoscaling\": service{\n\t\t\tDefaults: endpoint{\n\t\t\t\tProtocols: []string{\"http\", \"https\"},\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-east-1\":      endpoint{},\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-north-1\":     endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"sa-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"autoscaling-plans\": service{\n\t\t\tDefaults: endpoint{\n\t\t\t\tHostname:  \"autoscaling.{region}.amazonaws.com\",\n\t\t\t\tProtocols: []string{\"http\", \"https\"},\n\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\tService: \"autoscaling-plans\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"backup\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"batch\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-north-1\":     endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"sa-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"budgets\": service{\n\t\t\tPartitionEndpoint: \"aws-global\",\n\t\t\tIsRegionalized:    boxedFalse,\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"aws-global\": endpoint{\n\t\t\t\t\tHostname: \"budgets.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-east-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t\"ce\": service{\n\t\t\tPartitionEndpoint: \"aws-global\",\n\t\t\tIsRegionalized:    boxedFalse,\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"aws-global\": endpoint{\n\t\t\t\t\tHostname: \"ce.us-east-1.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-east-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t\"chime\": service{\n\t\t\tPartitionEndpoint: \"aws-global\",\n\t\t\tIsRegionalized:    boxedFalse,\n\t\t\tDefaults: endpoint{\n\t\t\t\tSSLCommonName: \"service.chime.aws.amazon.com\",\n\t\t\t\tProtocols:     []string{\"https\"},\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"aws-global\": endpoint{\n\t\t\t\t\tHostname:  \"service.chime.aws.amazon.com\",\n\t\t\t\t\tProtocols: []string{\"https\"},\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-east-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t\"cloud9\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"clouddirectory\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"cloudformation\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-east-1\":      endpoint{},\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-north-1\":     endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"sa-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"cloudfront\": service{\n\t\t\tPartitionEndpoint: \"aws-global\",\n\t\t\tIsRegionalized:    boxedFalse,\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"aws-global\": endpoint{\n\t\t\t\t\tHostname:  \"cloudfront.amazonaws.com\",\n\t\t\t\t\tProtocols: []string{\"http\", \"https\"},\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-east-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t\"cloudhsm\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"cloudhsmv2\": service{\n\t\t\tDefaults: endpoint{\n\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\tService: \"cloudhsm\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-east-1\":      endpoint{},\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-north-1\":     endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"cloudsearch\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"sa-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"cloudtrail\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-east-1\":      endpoint{},\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-north-1\":     endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"sa-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"codebuild\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-north-1\":     endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"sa-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1-fips\": endpoint{\n\t\t\t\t\tHostname: \"codebuild-fips.us-east-1.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-east-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"us-east-2\": endpoint{},\n\t\t\t\t\"us-east-2-fips\": endpoint{\n\t\t\t\t\tHostname: \"codebuild-fips.us-east-2.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-east-2\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"us-west-1\": endpoint{},\n\t\t\t\t\"us-west-1-fips\": endpoint{\n\t\t\t\t\tHostname: \"codebuild-fips.us-west-1.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-west-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"us-west-2\": endpoint{},\n\t\t\t\t\"us-west-2-fips\": endpoint{\n\t\t\t\t\tHostname: \"codebuild-fips.us-west-2.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-west-2\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t\"codecommit\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"fips\": endpoint{\n\t\t\t\t\tHostname: \"codecommit-fips.ca-central-1.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"ca-central-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"sa-east-1\": endpoint{},\n\t\t\t\t\"us-east-1\": endpoint{},\n\t\t\t\t\"us-east-2\": endpoint{},\n\t\t\t\t\"us-west-1\": endpoint{},\n\t\t\t\t\"us-west-2\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"codedeploy\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-east-1\":      endpoint{},\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-north-1\":     endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"sa-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1-fips\": endpoint{\n\t\t\t\t\tHostname: \"codedeploy-fips.us-east-1.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-east-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"us-east-2\": endpoint{},\n\t\t\t\t\"us-east-2-fips\": endpoint{\n\t\t\t\t\tHostname: \"codedeploy-fips.us-east-2.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-east-2\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"us-west-1\": endpoint{},\n\t\t\t\t\"us-west-1-fips\": endpoint{\n\t\t\t\t\tHostname: \"codedeploy-fips.us-west-1.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-west-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"us-west-2\": endpoint{},\n\t\t\t\t\"us-west-2-fips\": endpoint{\n\t\t\t\t\tHostname: \"codedeploy-fips.us-west-2.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-west-2\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t\"codepipeline\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"sa-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"codestar\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"cognito-identity\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"cognito-idp\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"cognito-sync\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"comprehend\": service{\n\t\t\tDefaults: endpoint{\n\t\t\t\tProtocols: []string{\"https\"},\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"comprehendmedical\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"config\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-east-1\":      endpoint{},\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-north-1\":     endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"sa-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"cur\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-east-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"data.mediastore\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-north-1\":     endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"datapipeline\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"datasync\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"dax\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"sa-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"devicefarm\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-west-2\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"directconnect\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-north-1\":     endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"sa-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"discovery\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-west-2\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"dms\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-east-1\":      endpoint{},\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-north-1\":     endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"sa-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"docdb\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{\n\t\t\t\t\tHostname: \"rds.ap-northeast-1.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"ap-northeast-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"ap-northeast-2\": endpoint{\n\t\t\t\t\tHostname: \"rds.ap-northeast-2.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"ap-northeast-2\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"eu-central-1\": endpoint{\n\t\t\t\t\tHostname: \"rds.eu-central-1.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"eu-central-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"eu-west-1\": endpoint{\n\t\t\t\t\tHostname: \"rds.eu-west-1.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"eu-west-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"us-east-1\": endpoint{\n\t\t\t\t\tHostname: \"rds.us-east-1.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-east-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"us-east-2\": endpoint{\n\t\t\t\t\tHostname: \"rds.us-east-2.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-east-2\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"us-west-2\": endpoint{\n\t\t\t\t\tHostname: \"rds.us-west-2.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-west-2\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t\"ds\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"sa-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"dynamodb\": service{\n\t\t\tDefaults: endpoint{\n\t\t\t\tProtocols: []string{\"http\", \"https\"},\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-east-1\":      endpoint{},\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-north-1\":     endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"local\": endpoint{\n\t\t\t\t\tHostname:  \"localhost:8000\",\n\t\t\t\t\tProtocols: []string{\"http\"},\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-east-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"sa-east-1\": endpoint{},\n\t\t\t\t\"us-east-1\": endpoint{},\n\t\t\t\t\"us-east-2\": endpoint{},\n\t\t\t\t\"us-west-1\": endpoint{},\n\t\t\t\t\"us-west-2\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"ec2\": service{\n\t\t\tDefaults: endpoint{\n\t\t\t\tProtocols: []string{\"http\", \"https\"},\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-east-1\":      endpoint{},\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-north-1\":     endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"sa-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"ec2metadata\": service{\n\t\t\tPartitionEndpoint: \"aws-global\",\n\t\t\tIsRegionalized:    boxedFalse,\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"aws-global\": endpoint{\n\t\t\t\t\tHostname:  \"169.254.169.254/latest\",\n\t\t\t\t\tProtocols: []string{\"http\"},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t\"ecs\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-east-1\":      endpoint{},\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-north-1\":     endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"sa-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"elasticache\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-east-1\":      endpoint{},\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-north-1\":     endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"fips\": endpoint{\n\t\t\t\t\tHostname: \"elasticache-fips.us-west-1.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-west-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"sa-east-1\": endpoint{},\n\t\t\t\t\"us-east-1\": endpoint{},\n\t\t\t\t\"us-east-2\": endpoint{},\n\t\t\t\t\"us-west-1\": endpoint{},\n\t\t\t\t\"us-west-2\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"elasticbeanstalk\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-east-1\":      endpoint{},\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-north-1\":     endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"sa-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"elasticfilesystem\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"elasticloadbalancing\": service{\n\t\t\tDefaults: endpoint{\n\t\t\t\tProtocols: []string{\"https\"},\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-east-1\":      endpoint{},\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-north-1\":     endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"sa-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"elasticmapreduce\": service{\n\t\t\tDefaults: endpoint{\n\t\t\t\tSSLCommonName: \"{region}.{service}.{dnsSuffix}\",\n\t\t\t\tProtocols:     []string{\"https\"},\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-east-1\":      endpoint{},\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\": endpoint{\n\t\t\t\t\tSSLCommonName: \"{service}.{region}.{dnsSuffix}\",\n\t\t\t\t},\n\t\t\t\t\"eu-north-1\": endpoint{},\n\t\t\t\t\"eu-west-1\":  endpoint{},\n\t\t\t\t\"eu-west-2\":  endpoint{},\n\t\t\t\t\"eu-west-3\":  endpoint{},\n\t\t\t\t\"sa-east-1\":  endpoint{},\n\t\t\t\t\"us-east-1\": endpoint{\n\t\t\t\t\tSSLCommonName: \"{service}.{region}.{dnsSuffix}\",\n\t\t\t\t},\n\t\t\t\t\"us-east-2\": endpoint{},\n\t\t\t\t\"us-west-1\": endpoint{},\n\t\t\t\t\"us-west-2\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"elastictranscoder\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"email\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"entitlement.marketplace\": service{\n\t\t\tDefaults: endpoint{\n\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\tService: \"aws-marketplace\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-east-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"es\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-east-1\":      endpoint{},\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-north-1\":     endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"fips\": endpoint{\n\t\t\t\t\tHostname: \"es-fips.us-west-1.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-west-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"sa-east-1\": endpoint{},\n\t\t\t\t\"us-east-1\": endpoint{},\n\t\t\t\t\"us-east-2\": endpoint{},\n\t\t\t\t\"us-west-1\": endpoint{},\n\t\t\t\t\"us-west-2\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"events\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-east-1\":      endpoint{},\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-north-1\":     endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"sa-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"firehose\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-north-1\":     endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"sa-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"fms\": service{\n\t\t\tDefaults: endpoint{\n\t\t\t\tProtocols: []string{\"https\"},\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"fsx\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"gamelift\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"sa-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"glacier\": service{\n\t\t\tDefaults: endpoint{\n\t\t\t\tProtocols: []string{\"http\", \"https\"},\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-east-1\":      endpoint{},\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-north-1\":     endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"sa-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"glue\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"greengrass\": service{\n\t\t\tIsRegionalized: boxedTrue,\n\t\t\tDefaults: endpoint{\n\t\t\t\tProtocols: []string{\"https\"},\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"groundstation\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-east-2\": endpoint{},\n\t\t\t\t\"us-west-2\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"guardduty\": service{\n\t\t\tIsRegionalized: boxedTrue,\n\t\t\tDefaults: endpoint{\n\t\t\t\tProtocols: []string{\"https\"},\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-north-1\":     endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"sa-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"health\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-east-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"iam\": service{\n\t\t\tPartitionEndpoint: \"aws-global\",\n\t\t\tIsRegionalized:    boxedFalse,\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"aws-global\": endpoint{\n\t\t\t\t\tHostname: \"iam.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-east-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t\"importexport\": service{\n\t\t\tPartitionEndpoint: \"aws-global\",\n\t\t\tIsRegionalized:    boxedFalse,\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"aws-global\": endpoint{\n\t\t\t\t\tHostname:          \"importexport.amazonaws.com\",\n\t\t\t\t\tSignatureVersions: []string{\"v2\", \"v4\"},\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion:  \"us-east-1\",\n\t\t\t\t\t\tService: \"IngestionService\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t\"inspector\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"iot\": service{\n\t\t\tDefaults: endpoint{\n\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\tService: \"execute-api\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"iotanalytics\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"iotthingsgraph\": service{\n\t\t\tDefaults: endpoint{\n\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\tService: \"iotthingsgraph\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"kafka\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"kinesis\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-east-1\":      endpoint{},\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-north-1\":     endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"sa-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"kinesisanalytics\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"kinesisvideo\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"kms\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ProdFips\": endpoint{\n\t\t\t\t\tHostname: \"kms-fips.ca-central-1.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"ca-central-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"ap-east-1\":      endpoint{},\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-north-1\":     endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"sa-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"lambda\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-east-1\":      endpoint{},\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-north-1\":     endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"sa-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"license-manager\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-north-1\":     endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"sa-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"lightsail\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"logs\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-east-1\":      endpoint{},\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-north-1\":     endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"sa-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"machinelearning\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"eu-west-1\": endpoint{},\n\t\t\t\t\"us-east-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"marketplacecommerceanalytics\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-east-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"mediaconnect\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"sa-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"mediaconvert\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"sa-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"medialive\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"sa-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"mediapackage\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"sa-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"mediastore\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-north-1\":     endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"metering.marketplace\": service{\n\t\t\tDefaults: endpoint{\n\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\tService: \"aws-marketplace\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-east-1\":      endpoint{},\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-north-1\":     endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"sa-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"mgh\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-west-2\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"mobileanalytics\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-east-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"models.lex\": service{\n\t\t\tDefaults: endpoint{\n\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\tService: \"lex\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"eu-west-1\": endpoint{},\n\t\t\t\t\"us-east-1\": endpoint{},\n\t\t\t\t\"us-west-2\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"monitoring\": service{\n\t\t\tDefaults: endpoint{\n\t\t\t\tProtocols: []string{\"http\", \"https\"},\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-east-1\":      endpoint{},\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-north-1\":     endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"sa-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"mq\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"mturk-requester\": service{\n\t\t\tIsRegionalized: boxedFalse,\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"sandbox\": endpoint{\n\t\t\t\t\tHostname: \"mturk-requester-sandbox.us-east-1.amazonaws.com\",\n\t\t\t\t},\n\t\t\t\t\"us-east-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"neptune\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{\n\t\t\t\t\tHostname: \"rds.ap-northeast-1.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"ap-northeast-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"ap-northeast-2\": endpoint{\n\t\t\t\t\tHostname: \"rds.ap-northeast-2.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"ap-northeast-2\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"ap-south-1\": endpoint{\n\t\t\t\t\tHostname: \"rds.ap-south-1.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"ap-south-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"ap-southeast-1\": endpoint{\n\t\t\t\t\tHostname: \"rds.ap-southeast-1.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"ap-southeast-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"ap-southeast-2\": endpoint{\n\t\t\t\t\tHostname: \"rds.ap-southeast-2.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"ap-southeast-2\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"eu-central-1\": endpoint{\n\t\t\t\t\tHostname: \"rds.eu-central-1.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"eu-central-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"eu-west-1\": endpoint{\n\t\t\t\t\tHostname: \"rds.eu-west-1.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"eu-west-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"eu-west-2\": endpoint{\n\t\t\t\t\tHostname: \"rds.eu-west-2.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"eu-west-2\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"us-east-1\": endpoint{\n\t\t\t\t\tHostname: \"rds.us-east-1.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-east-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"us-east-2\": endpoint{\n\t\t\t\t\tHostname: \"rds.us-east-2.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-east-2\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"us-west-2\": endpoint{\n\t\t\t\t\tHostname: \"rds.us-west-2.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-west-2\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t\"opsworks\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"sa-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"opsworks-cm\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"organizations\": service{\n\t\t\tPartitionEndpoint: \"aws-global\",\n\t\t\tIsRegionalized:    boxedFalse,\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"aws-global\": endpoint{\n\t\t\t\t\tHostname: \"organizations.us-east-1.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-east-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t\"pinpoint\": service{\n\t\t\tDefaults: endpoint{\n\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\tService: \"mobiletargeting\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"polly\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-north-1\":     endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"sa-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"projects.iot1click\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"ram\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"rds\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-east-1\":      endpoint{},\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-north-1\":     endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"sa-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1\": endpoint{\n\t\t\t\t\tSSLCommonName: \"{service}.{dnsSuffix}\",\n\t\t\t\t},\n\t\t\t\t\"us-east-2\": endpoint{},\n\t\t\t\t\"us-west-1\": endpoint{},\n\t\t\t\t\"us-west-2\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"redshift\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-east-1\":      endpoint{},\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-north-1\":     endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"sa-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"rekognition\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"resource-groups\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-east-1\":      endpoint{},\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-north-1\":     endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"sa-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"robomaker\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"route53\": service{\n\t\t\tPartitionEndpoint: \"aws-global\",\n\t\t\tIsRegionalized:    boxedFalse,\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"aws-global\": endpoint{\n\t\t\t\t\tHostname: \"route53.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-east-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t\"route53domains\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-east-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"route53resolver\": service{\n\t\t\tDefaults: endpoint{\n\t\t\t\tProtocols: []string{\"https\"},\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"runtime.lex\": service{\n\t\t\tDefaults: endpoint{\n\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\tService: \"lex\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"eu-west-1\": endpoint{},\n\t\t\t\t\"us-east-1\": endpoint{},\n\t\t\t\t\"us-west-2\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"runtime.sagemaker\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"s3\": service{\n\t\t\tPartitionEndpoint: \"us-east-1\",\n\t\t\tIsRegionalized:    boxedTrue,\n\t\t\tDefaults: endpoint{\n\t\t\t\tProtocols:         []string{\"http\", \"https\"},\n\t\t\t\tSignatureVersions: []string{\"s3v4\"},\n\n\t\t\t\tHasDualStack:      boxedTrue,\n\t\t\t\tDualStackHostname: \"{service}.dualstack.{region}.{dnsSuffix}\",\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-east-1\": endpoint{},\n\t\t\t\t\"ap-northeast-1\": endpoint{\n\t\t\t\t\tHostname:          \"s3.ap-northeast-1.amazonaws.com\",\n\t\t\t\t\tSignatureVersions: []string{\"s3\", \"s3v4\"},\n\t\t\t\t},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{\n\t\t\t\t\tHostname:          \"s3.ap-southeast-1.amazonaws.com\",\n\t\t\t\t\tSignatureVersions: []string{\"s3\", \"s3v4\"},\n\t\t\t\t},\n\t\t\t\t\"ap-southeast-2\": endpoint{\n\t\t\t\t\tHostname:          \"s3.ap-southeast-2.amazonaws.com\",\n\t\t\t\t\tSignatureVersions: []string{\"s3\", \"s3v4\"},\n\t\t\t\t},\n\t\t\t\t\"ca-central-1\": endpoint{},\n\t\t\t\t\"eu-central-1\": endpoint{},\n\t\t\t\t\"eu-north-1\":   endpoint{},\n\t\t\t\t\"eu-west-1\": endpoint{\n\t\t\t\t\tHostname:          \"s3.eu-west-1.amazonaws.com\",\n\t\t\t\t\tSignatureVersions: []string{\"s3\", \"s3v4\"},\n\t\t\t\t},\n\t\t\t\t\"eu-west-2\": endpoint{},\n\t\t\t\t\"eu-west-3\": endpoint{},\n\t\t\t\t\"s3-external-1\": endpoint{\n\t\t\t\t\tHostname:          \"s3-external-1.amazonaws.com\",\n\t\t\t\t\tSignatureVersions: []string{\"s3\", \"s3v4\"},\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-east-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"sa-east-1\": endpoint{\n\t\t\t\t\tHostname:          \"s3.sa-east-1.amazonaws.com\",\n\t\t\t\t\tSignatureVersions: []string{\"s3\", \"s3v4\"},\n\t\t\t\t},\n\t\t\t\t\"us-east-1\": endpoint{\n\t\t\t\t\tHostname:          \"s3.amazonaws.com\",\n\t\t\t\t\tSignatureVersions: []string{\"s3\", \"s3v4\"},\n\t\t\t\t},\n\t\t\t\t\"us-east-2\": endpoint{},\n\t\t\t\t\"us-west-1\": endpoint{\n\t\t\t\t\tHostname:          \"s3.us-west-1.amazonaws.com\",\n\t\t\t\t\tSignatureVersions: []string{\"s3\", \"s3v4\"},\n\t\t\t\t},\n\t\t\t\t\"us-west-2\": endpoint{\n\t\t\t\t\tHostname:          \"s3.us-west-2.amazonaws.com\",\n\t\t\t\t\tSignatureVersions: []string{\"s3\", \"s3v4\"},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t\"s3-control\": service{\n\t\t\tDefaults: endpoint{\n\t\t\t\tProtocols:         []string{\"https\"},\n\t\t\t\tSignatureVersions: []string{\"s3v4\"},\n\n\t\t\t\tHasDualStack:      boxedTrue,\n\t\t\t\tDualStackHostname: \"{service}.dualstack.{region}.{dnsSuffix}\",\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{\n\t\t\t\t\tHostname:          \"s3-control.ap-northeast-1.amazonaws.com\",\n\t\t\t\t\tSignatureVersions: []string{\"s3v4\"},\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"ap-northeast-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"ap-northeast-2\": endpoint{\n\t\t\t\t\tHostname:          \"s3-control.ap-northeast-2.amazonaws.com\",\n\t\t\t\t\tSignatureVersions: []string{\"s3v4\"},\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"ap-northeast-2\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"ap-south-1\": endpoint{\n\t\t\t\t\tHostname:          \"s3-control.ap-south-1.amazonaws.com\",\n\t\t\t\t\tSignatureVersions: []string{\"s3v4\"},\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"ap-south-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"ap-southeast-1\": endpoint{\n\t\t\t\t\tHostname:          \"s3-control.ap-southeast-1.amazonaws.com\",\n\t\t\t\t\tSignatureVersions: []string{\"s3v4\"},\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"ap-southeast-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"ap-southeast-2\": endpoint{\n\t\t\t\t\tHostname:          \"s3-control.ap-southeast-2.amazonaws.com\",\n\t\t\t\t\tSignatureVersions: []string{\"s3v4\"},\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"ap-southeast-2\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"ca-central-1\": endpoint{\n\t\t\t\t\tHostname:          \"s3-control.ca-central-1.amazonaws.com\",\n\t\t\t\t\tSignatureVersions: []string{\"s3v4\"},\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"ca-central-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"eu-central-1\": endpoint{\n\t\t\t\t\tHostname:          \"s3-control.eu-central-1.amazonaws.com\",\n\t\t\t\t\tSignatureVersions: []string{\"s3v4\"},\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"eu-central-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"eu-north-1\": endpoint{\n\t\t\t\t\tHostname:          \"s3-control.eu-north-1.amazonaws.com\",\n\t\t\t\t\tSignatureVersions: []string{\"s3v4\"},\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"eu-north-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"eu-west-1\": endpoint{\n\t\t\t\t\tHostname:          \"s3-control.eu-west-1.amazonaws.com\",\n\t\t\t\t\tSignatureVersions: []string{\"s3v4\"},\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"eu-west-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"eu-west-2\": endpoint{\n\t\t\t\t\tHostname:          \"s3-control.eu-west-2.amazonaws.com\",\n\t\t\t\t\tSignatureVersions: []string{\"s3v4\"},\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"eu-west-2\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"eu-west-3\": endpoint{\n\t\t\t\t\tHostname:          \"s3-control.eu-west-3.amazonaws.com\",\n\t\t\t\t\tSignatureVersions: []string{\"s3v4\"},\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"eu-west-3\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"sa-east-1\": endpoint{\n\t\t\t\t\tHostname:          \"s3-control.sa-east-1.amazonaws.com\",\n\t\t\t\t\tSignatureVersions: []string{\"s3v4\"},\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"sa-east-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"us-east-1\": endpoint{\n\t\t\t\t\tHostname:          \"s3-control.us-east-1.amazonaws.com\",\n\t\t\t\t\tSignatureVersions: []string{\"s3v4\"},\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-east-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"us-east-1-fips\": endpoint{\n\t\t\t\t\tHostname:          \"s3-control-fips.us-east-1.amazonaws.com\",\n\t\t\t\t\tSignatureVersions: []string{\"s3v4\"},\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-east-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"us-east-2\": endpoint{\n\t\t\t\t\tHostname:          \"s3-control.us-east-2.amazonaws.com\",\n\t\t\t\t\tSignatureVersions: []string{\"s3v4\"},\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-east-2\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"us-east-2-fips\": endpoint{\n\t\t\t\t\tHostname:          \"s3-control-fips.us-east-2.amazonaws.com\",\n\t\t\t\t\tSignatureVersions: []string{\"s3v4\"},\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-east-2\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"us-west-1\": endpoint{\n\t\t\t\t\tHostname:          \"s3-control.us-west-1.amazonaws.com\",\n\t\t\t\t\tSignatureVersions: []string{\"s3v4\"},\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-west-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"us-west-1-fips\": endpoint{\n\t\t\t\t\tHostname:          \"s3-control-fips.us-west-1.amazonaws.com\",\n\t\t\t\t\tSignatureVersions: []string{\"s3v4\"},\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-west-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"us-west-2\": endpoint{\n\t\t\t\t\tHostname:          \"s3-control.us-west-2.amazonaws.com\",\n\t\t\t\t\tSignatureVersions: []string{\"s3v4\"},\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-west-2\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"us-west-2-fips\": endpoint{\n\t\t\t\t\tHostname:          \"s3-control-fips.us-west-2.amazonaws.com\",\n\t\t\t\t\tSignatureVersions: []string{\"s3v4\"},\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-west-2\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t\"sdb\": service{\n\t\t\tDefaults: endpoint{\n\t\t\t\tProtocols:         []string{\"http\", \"https\"},\n\t\t\t\tSignatureVersions: []string{\"v2\"},\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"sa-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1\": endpoint{\n\t\t\t\t\tHostname: \"sdb.amazonaws.com\",\n\t\t\t\t},\n\t\t\t\t\"us-west-1\": endpoint{},\n\t\t\t\t\"us-west-2\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"secretsmanager\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-north-1\":     endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"sa-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1-fips\": endpoint{\n\t\t\t\t\tHostname: \"secretsmanager-fips.us-east-1.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-east-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"us-east-2\": endpoint{},\n\t\t\t\t\"us-east-2-fips\": endpoint{\n\t\t\t\t\tHostname: \"secretsmanager-fips.us-east-2.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-east-2\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"us-west-1\": endpoint{},\n\t\t\t\t\"us-west-1-fips\": endpoint{\n\t\t\t\t\tHostname: \"secretsmanager-fips.us-west-1.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-west-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"us-west-2\": endpoint{},\n\t\t\t\t\"us-west-2-fips\": endpoint{\n\t\t\t\t\tHostname: \"secretsmanager-fips.us-west-2.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-west-2\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t\"securityhub\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"sa-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"serverlessrepo\": service{\n\t\t\tDefaults: endpoint{\n\t\t\t\tProtocols: []string{\"https\"},\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{\n\t\t\t\t\tProtocols: []string{\"https\"},\n\t\t\t\t},\n\t\t\t\t\"ap-northeast-2\": endpoint{\n\t\t\t\t\tProtocols: []string{\"https\"},\n\t\t\t\t},\n\t\t\t\t\"ap-south-1\": endpoint{\n\t\t\t\t\tProtocols: []string{\"https\"},\n\t\t\t\t},\n\t\t\t\t\"ap-southeast-1\": endpoint{\n\t\t\t\t\tProtocols: []string{\"https\"},\n\t\t\t\t},\n\t\t\t\t\"ap-southeast-2\": endpoint{\n\t\t\t\t\tProtocols: []string{\"https\"},\n\t\t\t\t},\n\t\t\t\t\"ca-central-1\": endpoint{\n\t\t\t\t\tProtocols: []string{\"https\"},\n\t\t\t\t},\n\t\t\t\t\"eu-central-1\": endpoint{\n\t\t\t\t\tProtocols: []string{\"https\"},\n\t\t\t\t},\n\t\t\t\t\"eu-north-1\": endpoint{\n\t\t\t\t\tProtocols: []string{\"https\"},\n\t\t\t\t},\n\t\t\t\t\"eu-west-1\": endpoint{\n\t\t\t\t\tProtocols: []string{\"https\"},\n\t\t\t\t},\n\t\t\t\t\"eu-west-2\": endpoint{\n\t\t\t\t\tProtocols: []string{\"https\"},\n\t\t\t\t},\n\t\t\t\t\"eu-west-3\": endpoint{\n\t\t\t\t\tProtocols: []string{\"https\"},\n\t\t\t\t},\n\t\t\t\t\"sa-east-1\": endpoint{\n\t\t\t\t\tProtocols: []string{\"https\"},\n\t\t\t\t},\n\t\t\t\t\"us-east-1\": endpoint{\n\t\t\t\t\tProtocols: []string{\"https\"},\n\t\t\t\t},\n\t\t\t\t\"us-east-2\": endpoint{\n\t\t\t\t\tProtocols: []string{\"https\"},\n\t\t\t\t},\n\t\t\t\t\"us-west-1\": endpoint{\n\t\t\t\t\tProtocols: []string{\"https\"},\n\t\t\t\t},\n\t\t\t\t\"us-west-2\": endpoint{\n\t\t\t\t\tProtocols: []string{\"https\"},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t\"servicecatalog\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-north-1\":     endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"sa-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1-fips\": endpoint{\n\t\t\t\t\tHostname: \"servicecatalog-fips.us-east-1.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-east-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"us-east-2\": endpoint{},\n\t\t\t\t\"us-east-2-fips\": endpoint{\n\t\t\t\t\tHostname: \"servicecatalog-fips.us-east-2.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-east-2\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"us-west-1\": endpoint{},\n\t\t\t\t\"us-west-1-fips\": endpoint{\n\t\t\t\t\tHostname: \"servicecatalog-fips.us-west-1.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-west-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"us-west-2\": endpoint{},\n\t\t\t\t\"us-west-2-fips\": endpoint{\n\t\t\t\t\tHostname: \"servicecatalog-fips.us-west-2.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-west-2\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t\"servicediscovery\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"sa-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"shield\": service{\n\t\t\tIsRegionalized: boxedFalse,\n\t\t\tDefaults: endpoint{\n\t\t\t\tSSLCommonName: \"shield.us-east-1.amazonaws.com\",\n\t\t\t\tProtocols:     []string{\"https\"},\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-east-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"sms\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-north-1\":     endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"sa-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"snowball\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"sa-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"sns\": service{\n\t\t\tDefaults: endpoint{\n\t\t\t\tProtocols: []string{\"http\", \"https\"},\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-east-1\":      endpoint{},\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-north-1\":     endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"sa-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"sqs\": service{\n\t\t\tDefaults: endpoint{\n\t\t\t\tSSLCommonName: \"{region}.queue.{dnsSuffix}\",\n\t\t\t\tProtocols:     []string{\"http\", \"https\"},\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-east-1\":      endpoint{},\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-north-1\":     endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"fips-us-east-1\": endpoint{\n\t\t\t\t\tHostname: \"sqs-fips.us-east-1.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-east-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"fips-us-east-2\": endpoint{\n\t\t\t\t\tHostname: \"sqs-fips.us-east-2.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-east-2\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"fips-us-west-1\": endpoint{\n\t\t\t\t\tHostname: \"sqs-fips.us-west-1.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-west-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"fips-us-west-2\": endpoint{\n\t\t\t\t\tHostname: \"sqs-fips.us-west-2.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-west-2\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"sa-east-1\": endpoint{},\n\t\t\t\t\"us-east-1\": endpoint{\n\t\t\t\t\tSSLCommonName: \"queue.{dnsSuffix}\",\n\t\t\t\t},\n\t\t\t\t\"us-east-2\": endpoint{},\n\t\t\t\t\"us-west-1\": endpoint{},\n\t\t\t\t\"us-west-2\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"ssm\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-east-1\":      endpoint{},\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-north-1\":     endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"sa-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"states\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-east-1\":      endpoint{},\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-north-1\":     endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"sa-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"storagegateway\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-north-1\":     endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"sa-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"streams.dynamodb\": service{\n\t\t\tDefaults: endpoint{\n\t\t\t\tProtocols: []string{\"http\", \"https\"},\n\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\tService: \"dynamodb\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-north-1\":     endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"local\": endpoint{\n\t\t\t\t\tHostname:  \"localhost:8000\",\n\t\t\t\t\tProtocols: []string{\"http\"},\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-east-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"sa-east-1\": endpoint{},\n\t\t\t\t\"us-east-1\": endpoint{},\n\t\t\t\t\"us-east-2\": endpoint{},\n\t\t\t\t\"us-west-1\": endpoint{},\n\t\t\t\t\"us-west-2\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"sts\": service{\n\t\t\tPartitionEndpoint: \"aws-global\",\n\t\t\tDefaults: endpoint{\n\t\t\t\tHostname: \"sts.amazonaws.com\",\n\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\tRegion: \"us-east-1\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-east-1\": endpoint{\n\t\t\t\t\tHostname: \"sts.ap-east-1.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"ap-east-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{\n\t\t\t\t\tHostname: \"sts.ap-northeast-2.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"ap-northeast-2\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"aws-global\":     endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-north-1\":     endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"sa-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1-fips\": endpoint{\n\t\t\t\t\tHostname: \"sts-fips.us-east-1.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-east-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"us-east-2\": endpoint{},\n\t\t\t\t\"us-east-2-fips\": endpoint{\n\t\t\t\t\tHostname: \"sts-fips.us-east-2.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-east-2\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"us-west-1\": endpoint{},\n\t\t\t\t\"us-west-1-fips\": endpoint{\n\t\t\t\t\tHostname: \"sts-fips.us-west-1.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-west-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"us-west-2\": endpoint{},\n\t\t\t\t\"us-west-2-fips\": endpoint{\n\t\t\t\t\tHostname: \"sts-fips.us-west-2.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-west-2\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t\"support\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-east-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"swf\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-east-1\":      endpoint{},\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-north-1\":     endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"sa-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"tagging\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-east-1\":      endpoint{},\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-north-1\":     endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"sa-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"transfer\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"translate\": service{\n\t\t\tDefaults: endpoint{\n\t\t\t\tProtocols: []string{\"https\"},\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1-fips\": endpoint{\n\t\t\t\t\tHostname: \"translate-fips.us-east-1.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-east-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"us-east-2\": endpoint{},\n\t\t\t\t\"us-east-2-fips\": endpoint{\n\t\t\t\t\tHostname: \"translate-fips.us-east-2.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-east-2\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"us-west-2\": endpoint{},\n\t\t\t\t\"us-west-2-fips\": endpoint{\n\t\t\t\t\tHostname: \"translate-fips.us-west-2.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-west-2\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t\"waf\": service{\n\t\t\tPartitionEndpoint: \"aws-global\",\n\t\t\tIsRegionalized:    boxedFalse,\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"aws-global\": endpoint{\n\t\t\t\t\tHostname: \"waf.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-east-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t\"waf-regional\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-north-1\":     endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"workdocs\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"workmail\": service{\n\t\t\tDefaults: endpoint{\n\t\t\t\tProtocols: []string{\"https\"},\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"eu-west-1\": endpoint{},\n\t\t\t\t\"us-east-1\": endpoint{},\n\t\t\t\t\"us-west-2\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"workspaces\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"sa-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"xray\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ap-northeast-1\": endpoint{},\n\t\t\t\t\"ap-northeast-2\": endpoint{},\n\t\t\t\t\"ap-south-1\":     endpoint{},\n\t\t\t\t\"ap-southeast-1\": endpoint{},\n\t\t\t\t\"ap-southeast-2\": endpoint{},\n\t\t\t\t\"ca-central-1\":   endpoint{},\n\t\t\t\t\"eu-central-1\":   endpoint{},\n\t\t\t\t\"eu-north-1\":     endpoint{},\n\t\t\t\t\"eu-west-1\":      endpoint{},\n\t\t\t\t\"eu-west-2\":      endpoint{},\n\t\t\t\t\"eu-west-3\":      endpoint{},\n\t\t\t\t\"sa-east-1\":      endpoint{},\n\t\t\t\t\"us-east-1\":      endpoint{},\n\t\t\t\t\"us-east-2\":      endpoint{},\n\t\t\t\t\"us-west-1\":      endpoint{},\n\t\t\t\t\"us-west-2\":      endpoint{},\n\t\t\t},\n\t\t},\n\t},\n}\n\n// AwsCnPartition returns the Resolver for AWS China.\nfunc AwsCnPartition() Partition {\n\treturn awscnPartition.Partition()\n}\n\nvar awscnPartition = partition{\n\tID:        \"aws-cn\",\n\tName:      \"AWS China\",\n\tDNSSuffix: \"amazonaws.com.cn\",\n\tRegionRegex: regionRegex{\n\t\tRegexp: func() *regexp.Regexp {\n\t\t\treg, _ := regexp.Compile(\"^cn\\\\-\\\\w+\\\\-\\\\d+$\")\n\t\t\treturn reg\n\t\t}(),\n\t},\n\tDefaults: endpoint{\n\t\tHostname:          \"{service}.{region}.{dnsSuffix}\",\n\t\tProtocols:         []string{\"https\"},\n\t\tSignatureVersions: []string{\"v4\"},\n\t},\n\tRegions: regions{\n\t\t\"cn-north-1\": region{\n\t\t\tDescription: \"China (Beijing)\",\n\t\t},\n\t\t\"cn-northwest-1\": region{\n\t\t\tDescription: \"China (Ningxia)\",\n\t\t},\n\t},\n\tServices: services{\n\t\t\"api.ecr\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"cn-north-1\": endpoint{\n\t\t\t\t\tHostname: \"api.ecr.cn-north-1.amazonaws.com.cn\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"cn-north-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"cn-northwest-1\": endpoint{\n\t\t\t\t\tHostname: \"api.ecr.cn-northwest-1.amazonaws.com.cn\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"cn-northwest-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t\"apigateway\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"cn-north-1\":     endpoint{},\n\t\t\t\t\"cn-northwest-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"application-autoscaling\": service{\n\t\t\tDefaults: endpoint{\n\t\t\t\tHostname:  \"autoscaling.{region}.amazonaws.com.cn\",\n\t\t\t\tProtocols: []string{\"http\", \"https\"},\n\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\tService: \"application-autoscaling\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"cn-north-1\":     endpoint{},\n\t\t\t\t\"cn-northwest-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"autoscaling\": service{\n\t\t\tDefaults: endpoint{\n\t\t\t\tProtocols: []string{\"http\", \"https\"},\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"cn-north-1\":     endpoint{},\n\t\t\t\t\"cn-northwest-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"cloudformation\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"cn-north-1\":     endpoint{},\n\t\t\t\t\"cn-northwest-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"cloudfront\": service{\n\t\t\tPartitionEndpoint: \"aws-cn-global\",\n\t\t\tIsRegionalized:    boxedFalse,\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"aws-cn-global\": endpoint{\n\t\t\t\t\tHostname:  \"cloudfront.cn-northwest-1.amazonaws.com.cn\",\n\t\t\t\t\tProtocols: []string{\"http\", \"https\"},\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"cn-northwest-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t\"cloudtrail\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"cn-north-1\":     endpoint{},\n\t\t\t\t\"cn-northwest-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"codebuild\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"cn-north-1\":     endpoint{},\n\t\t\t\t\"cn-northwest-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"codedeploy\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"cn-north-1\":     endpoint{},\n\t\t\t\t\"cn-northwest-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"cognito-identity\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"cn-north-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"config\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"cn-north-1\":     endpoint{},\n\t\t\t\t\"cn-northwest-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"directconnect\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"cn-north-1\":     endpoint{},\n\t\t\t\t\"cn-northwest-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"dms\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"cn-north-1\":     endpoint{},\n\t\t\t\t\"cn-northwest-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"ds\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"cn-north-1\":     endpoint{},\n\t\t\t\t\"cn-northwest-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"dynamodb\": service{\n\t\t\tDefaults: endpoint{\n\t\t\t\tProtocols: []string{\"http\", \"https\"},\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"cn-north-1\":     endpoint{},\n\t\t\t\t\"cn-northwest-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"ec2\": service{\n\t\t\tDefaults: endpoint{\n\t\t\t\tProtocols: []string{\"http\", \"https\"},\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"cn-north-1\":     endpoint{},\n\t\t\t\t\"cn-northwest-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"ec2metadata\": service{\n\t\t\tPartitionEndpoint: \"aws-global\",\n\t\t\tIsRegionalized:    boxedFalse,\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"aws-global\": endpoint{\n\t\t\t\t\tHostname:  \"169.254.169.254/latest\",\n\t\t\t\t\tProtocols: []string{\"http\"},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t\"ecs\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"cn-north-1\":     endpoint{},\n\t\t\t\t\"cn-northwest-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"elasticache\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"cn-north-1\":     endpoint{},\n\t\t\t\t\"cn-northwest-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"elasticbeanstalk\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"cn-north-1\":     endpoint{},\n\t\t\t\t\"cn-northwest-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"elasticloadbalancing\": service{\n\t\t\tDefaults: endpoint{\n\t\t\t\tProtocols: []string{\"https\"},\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"cn-north-1\":     endpoint{},\n\t\t\t\t\"cn-northwest-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"elasticmapreduce\": service{\n\t\t\tDefaults: endpoint{\n\t\t\t\tProtocols: []string{\"https\"},\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"cn-north-1\":     endpoint{},\n\t\t\t\t\"cn-northwest-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"es\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"cn-north-1\":     endpoint{},\n\t\t\t\t\"cn-northwest-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"events\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"cn-north-1\":     endpoint{},\n\t\t\t\t\"cn-northwest-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"firehose\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"cn-north-1\":     endpoint{},\n\t\t\t\t\"cn-northwest-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"gamelift\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"cn-north-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"glacier\": service{\n\t\t\tDefaults: endpoint{\n\t\t\t\tProtocols: []string{\"http\", \"https\"},\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"cn-north-1\":     endpoint{},\n\t\t\t\t\"cn-northwest-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"iam\": service{\n\t\t\tPartitionEndpoint: \"aws-cn-global\",\n\t\t\tIsRegionalized:    boxedFalse,\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"aws-cn-global\": endpoint{\n\t\t\t\t\tHostname: \"iam.cn-north-1.amazonaws.com.cn\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"cn-north-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t\"iot\": service{\n\t\t\tDefaults: endpoint{\n\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\tService: \"execute-api\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"cn-north-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"kinesis\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"cn-north-1\":     endpoint{},\n\t\t\t\t\"cn-northwest-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"lambda\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"cn-north-1\":     endpoint{},\n\t\t\t\t\"cn-northwest-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"logs\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"cn-north-1\":     endpoint{},\n\t\t\t\t\"cn-northwest-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"mediaconvert\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"cn-northwest-1\": endpoint{\n\t\t\t\t\tHostname: \"subscribe.mediaconvert.cn-northwest-1.amazonaws.com.cn\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"cn-northwest-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t\"monitoring\": service{\n\t\t\tDefaults: endpoint{\n\t\t\t\tProtocols: []string{\"http\", \"https\"},\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"cn-north-1\":     endpoint{},\n\t\t\t\t\"cn-northwest-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"polly\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"cn-northwest-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"rds\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"cn-north-1\":     endpoint{},\n\t\t\t\t\"cn-northwest-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"redshift\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"cn-north-1\":     endpoint{},\n\t\t\t\t\"cn-northwest-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"s3\": service{\n\t\t\tDefaults: endpoint{\n\t\t\t\tProtocols:         []string{\"http\", \"https\"},\n\t\t\t\tSignatureVersions: []string{\"s3v4\"},\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"cn-north-1\":     endpoint{},\n\t\t\t\t\"cn-northwest-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"s3-control\": service{\n\t\t\tDefaults: endpoint{\n\t\t\t\tProtocols:         []string{\"https\"},\n\t\t\t\tSignatureVersions: []string{\"s3v4\"},\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"cn-north-1\": endpoint{\n\t\t\t\t\tHostname:          \"s3-control.cn-north-1.amazonaws.com.cn\",\n\t\t\t\t\tSignatureVersions: []string{\"s3v4\"},\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"cn-north-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"cn-northwest-1\": endpoint{\n\t\t\t\t\tHostname:          \"s3-control.cn-northwest-1.amazonaws.com.cn\",\n\t\t\t\t\tSignatureVersions: []string{\"s3v4\"},\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"cn-northwest-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t\"sms\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"cn-north-1\":     endpoint{},\n\t\t\t\t\"cn-northwest-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"snowball\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"cn-north-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"sns\": service{\n\t\t\tDefaults: endpoint{\n\t\t\t\tProtocols: []string{\"http\", \"https\"},\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"cn-north-1\":     endpoint{},\n\t\t\t\t\"cn-northwest-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"sqs\": service{\n\t\t\tDefaults: endpoint{\n\t\t\t\tSSLCommonName: \"{region}.queue.{dnsSuffix}\",\n\t\t\t\tProtocols:     []string{\"http\", \"https\"},\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"cn-north-1\":     endpoint{},\n\t\t\t\t\"cn-northwest-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"ssm\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"cn-north-1\":     endpoint{},\n\t\t\t\t\"cn-northwest-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"states\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"cn-north-1\":     endpoint{},\n\t\t\t\t\"cn-northwest-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"storagegateway\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"cn-north-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"streams.dynamodb\": service{\n\t\t\tDefaults: endpoint{\n\t\t\t\tProtocols: []string{\"http\", \"https\"},\n\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\tService: \"dynamodb\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"cn-north-1\":     endpoint{},\n\t\t\t\t\"cn-northwest-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"sts\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"cn-north-1\":     endpoint{},\n\t\t\t\t\"cn-northwest-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"swf\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"cn-north-1\":     endpoint{},\n\t\t\t\t\"cn-northwest-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"tagging\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"cn-north-1\":     endpoint{},\n\t\t\t\t\"cn-northwest-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t},\n}\n\n// AwsUsGovPartition returns the Resolver for AWS GovCloud (US).\nfunc AwsUsGovPartition() Partition {\n\treturn awsusgovPartition.Partition()\n}\n\nvar awsusgovPartition = partition{\n\tID:        \"aws-us-gov\",\n\tName:      \"AWS GovCloud (US)\",\n\tDNSSuffix: \"amazonaws.com\",\n\tRegionRegex: regionRegex{\n\t\tRegexp: func() *regexp.Regexp {\n\t\t\treg, _ := regexp.Compile(\"^us\\\\-gov\\\\-\\\\w+\\\\-\\\\d+$\")\n\t\t\treturn reg\n\t\t}(),\n\t},\n\tDefaults: endpoint{\n\t\tHostname:          \"{service}.{region}.{dnsSuffix}\",\n\t\tProtocols:         []string{\"https\"},\n\t\tSignatureVersions: []string{\"v4\"},\n\t},\n\tRegions: regions{\n\t\t\"us-gov-east-1\": region{\n\t\t\tDescription: \"AWS GovCloud (US-East)\",\n\t\t},\n\t\t\"us-gov-west-1\": region{\n\t\t\tDescription: \"AWS GovCloud (US)\",\n\t\t},\n\t},\n\tServices: services{\n\t\t\"acm\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-east-1\": endpoint{},\n\t\t\t\t\"us-gov-west-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"acm-pca\": service{\n\t\t\tDefaults: endpoint{\n\t\t\t\tProtocols: []string{\"https\"},\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-east-1\": endpoint{},\n\t\t\t\t\"us-gov-west-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"api.ecr\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-east-1\": endpoint{\n\t\t\t\t\tHostname: \"api.ecr.us-gov-east-1.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-gov-east-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"us-gov-west-1\": endpoint{\n\t\t\t\t\tHostname: \"api.ecr.us-gov-west-1.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-gov-west-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t\"api.sagemaker\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-west-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"apigateway\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-east-1\": endpoint{},\n\t\t\t\t\"us-gov-west-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"application-autoscaling\": service{\n\t\t\tDefaults: endpoint{\n\t\t\t\tHostname: \"autoscaling.{region}.amazonaws.com\",\n\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\tService: \"application-autoscaling\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-east-1\": endpoint{},\n\t\t\t\t\"us-gov-west-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"athena\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-east-1\": endpoint{},\n\t\t\t\t\"us-gov-west-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"autoscaling\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-east-1\": endpoint{},\n\t\t\t\t\"us-gov-west-1\": endpoint{\n\t\t\t\t\tProtocols: []string{\"http\", \"https\"},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t\"clouddirectory\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-west-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"cloudformation\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-east-1\": endpoint{},\n\t\t\t\t\"us-gov-west-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"cloudhsm\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-west-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"cloudhsmv2\": service{\n\t\t\tDefaults: endpoint{\n\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\tService: \"cloudhsm\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-east-1\": endpoint{},\n\t\t\t\t\"us-gov-west-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"cloudtrail\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-east-1\": endpoint{},\n\t\t\t\t\"us-gov-west-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"codecommit\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-west-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"codedeploy\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-east-1\": endpoint{},\n\t\t\t\t\"us-gov-east-1-fips\": endpoint{\n\t\t\t\t\tHostname: \"codedeploy-fips.us-gov-east-1.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-gov-east-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"us-gov-west-1\": endpoint{},\n\t\t\t\t\"us-gov-west-1-fips\": endpoint{\n\t\t\t\t\tHostname: \"codedeploy-fips.us-gov-west-1.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-gov-west-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t\"comprehend\": service{\n\t\t\tDefaults: endpoint{\n\t\t\t\tProtocols: []string{\"https\"},\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-west-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"config\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-east-1\": endpoint{},\n\t\t\t\t\"us-gov-west-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"directconnect\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-east-1\": endpoint{},\n\t\t\t\t\"us-gov-west-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"dms\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-east-1\": endpoint{},\n\t\t\t\t\"us-gov-west-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"ds\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-east-1\": endpoint{},\n\t\t\t\t\"us-gov-west-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"dynamodb\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-east-1\": endpoint{},\n\t\t\t\t\"us-gov-west-1\": endpoint{},\n\t\t\t\t\"us-gov-west-1-fips\": endpoint{\n\t\t\t\t\tHostname: \"dynamodb.us-gov-west-1.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-gov-west-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t\"ec2\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-east-1\": endpoint{},\n\t\t\t\t\"us-gov-west-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"ec2metadata\": service{\n\t\t\tPartitionEndpoint: \"aws-global\",\n\t\t\tIsRegionalized:    boxedFalse,\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"aws-global\": endpoint{\n\t\t\t\t\tHostname:  \"169.254.169.254/latest\",\n\t\t\t\t\tProtocols: []string{\"http\"},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t\"ecs\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-east-1\": endpoint{},\n\t\t\t\t\"us-gov-west-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"elasticache\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"fips\": endpoint{\n\t\t\t\t\tHostname: \"elasticache-fips.us-gov-west-1.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-gov-west-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"us-gov-east-1\": endpoint{},\n\t\t\t\t\"us-gov-west-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"elasticbeanstalk\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-east-1\": endpoint{},\n\t\t\t\t\"us-gov-west-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"elasticfilesystem\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-west-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"elasticloadbalancing\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-east-1\": endpoint{},\n\t\t\t\t\"us-gov-west-1\": endpoint{\n\t\t\t\t\tProtocols: []string{\"http\", \"https\"},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t\"elasticmapreduce\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-east-1\": endpoint{},\n\t\t\t\t\"us-gov-west-1\": endpoint{\n\t\t\t\t\tProtocols: []string{\"https\"},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t\"es\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"fips\": endpoint{\n\t\t\t\t\tHostname: \"es-fips.us-gov-west-1.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-gov-west-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"us-gov-east-1\": endpoint{},\n\t\t\t\t\"us-gov-west-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"events\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-east-1\": endpoint{},\n\t\t\t\t\"us-gov-west-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"firehose\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-west-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"glacier\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-east-1\": endpoint{},\n\t\t\t\t\"us-gov-west-1\": endpoint{\n\t\t\t\t\tProtocols: []string{\"http\", \"https\"},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t\"glue\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-west-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"guardduty\": service{\n\t\t\tIsRegionalized: boxedTrue,\n\t\t\tDefaults: endpoint{\n\t\t\t\tProtocols: []string{\"https\"},\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-west-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"iam\": service{\n\t\t\tPartitionEndpoint: \"aws-us-gov-global\",\n\t\t\tIsRegionalized:    boxedFalse,\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"aws-us-gov-global\": endpoint{\n\t\t\t\t\tHostname: \"iam.us-gov.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-gov-west-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t\"inspector\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-east-1\": endpoint{},\n\t\t\t\t\"us-gov-west-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"iot\": service{\n\t\t\tDefaults: endpoint{\n\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\tService: \"execute-api\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-west-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"kinesis\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-east-1\": endpoint{},\n\t\t\t\t\"us-gov-west-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"kms\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"ProdFips\": endpoint{\n\t\t\t\t\tHostname: \"kms-fips.us-gov-west-1.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-gov-west-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"us-gov-east-1\": endpoint{},\n\t\t\t\t\"us-gov-west-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"lambda\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-east-1\": endpoint{},\n\t\t\t\t\"us-gov-west-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"license-manager\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-east-1\": endpoint{},\n\t\t\t\t\"us-gov-west-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"logs\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-east-1\": endpoint{},\n\t\t\t\t\"us-gov-west-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"mediaconvert\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-west-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"metering.marketplace\": service{\n\t\t\tDefaults: endpoint{\n\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\tService: \"aws-marketplace\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-west-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"monitoring\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-east-1\": endpoint{},\n\t\t\t\t\"us-gov-west-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"organizations\": service{\n\t\t\tPartitionEndpoint: \"aws-us-gov-global\",\n\t\t\tIsRegionalized:    boxedFalse,\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"aws-us-gov-global\": endpoint{\n\t\t\t\t\tHostname: \"organizations.us-gov-west-1.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-gov-west-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t\"polly\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-west-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"rds\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-east-1\": endpoint{},\n\t\t\t\t\"us-gov-west-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"redshift\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-east-1\": endpoint{},\n\t\t\t\t\"us-gov-west-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"rekognition\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-west-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"runtime.sagemaker\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-west-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"s3\": service{\n\t\t\tDefaults: endpoint{\n\t\t\t\tSignatureVersions: []string{\"s3\", \"s3v4\"},\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"fips-us-gov-west-1\": endpoint{\n\t\t\t\t\tHostname: \"s3-fips-us-gov-west-1.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-gov-west-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"us-gov-east-1\": endpoint{\n\t\t\t\t\tHostname:  \"s3.us-gov-east-1.amazonaws.com\",\n\t\t\t\t\tProtocols: []string{\"http\", \"https\"},\n\t\t\t\t},\n\t\t\t\t\"us-gov-west-1\": endpoint{\n\t\t\t\t\tHostname:  \"s3.us-gov-west-1.amazonaws.com\",\n\t\t\t\t\tProtocols: []string{\"http\", \"https\"},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t\"s3-control\": service{\n\t\t\tDefaults: endpoint{\n\t\t\t\tProtocols:         []string{\"https\"},\n\t\t\t\tSignatureVersions: []string{\"s3v4\"},\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-east-1\": endpoint{\n\t\t\t\t\tHostname:          \"s3-control.us-gov-east-1.amazonaws.com\",\n\t\t\t\t\tSignatureVersions: []string{\"s3v4\"},\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-gov-east-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"us-gov-east-1-fips\": endpoint{\n\t\t\t\t\tHostname:          \"s3-control-fips.us-gov-east-1.amazonaws.com\",\n\t\t\t\t\tSignatureVersions: []string{\"s3v4\"},\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-gov-east-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"us-gov-west-1\": endpoint{\n\t\t\t\t\tHostname:          \"s3-control.us-gov-west-1.amazonaws.com\",\n\t\t\t\t\tSignatureVersions: []string{\"s3v4\"},\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-gov-west-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"us-gov-west-1-fips\": endpoint{\n\t\t\t\t\tHostname:          \"s3-control-fips.us-gov-west-1.amazonaws.com\",\n\t\t\t\t\tSignatureVersions: []string{\"s3v4\"},\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-gov-west-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t\"sms\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-east-1\": endpoint{},\n\t\t\t\t\"us-gov-west-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"snowball\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-east-1\": endpoint{},\n\t\t\t\t\"us-gov-west-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"sns\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-east-1\": endpoint{},\n\t\t\t\t\"us-gov-west-1\": endpoint{\n\t\t\t\t\tProtocols: []string{\"http\", \"https\"},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t\"sqs\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-east-1\": endpoint{},\n\t\t\t\t\"us-gov-west-1\": endpoint{\n\t\t\t\t\tSSLCommonName: \"{region}.queue.{dnsSuffix}\",\n\t\t\t\t\tProtocols:     []string{\"http\", \"https\"},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t\"ssm\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-east-1\": endpoint{},\n\t\t\t\t\"us-gov-west-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"states\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-east-1\": endpoint{},\n\t\t\t\t\"us-gov-west-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"storagegateway\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-west-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"streams.dynamodb\": service{\n\t\t\tDefaults: endpoint{\n\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\tService: \"dynamodb\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-east-1\": endpoint{},\n\t\t\t\t\"us-gov-west-1\": endpoint{},\n\t\t\t\t\"us-gov-west-1-fips\": endpoint{\n\t\t\t\t\tHostname: \"dynamodb.us-gov-west-1.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-gov-west-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t\"sts\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-east-1\": endpoint{},\n\t\t\t\t\"us-gov-west-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"swf\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-east-1\": endpoint{},\n\t\t\t\t\"us-gov-west-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"tagging\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-east-1\": endpoint{},\n\t\t\t\t\"us-gov-west-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"translate\": service{\n\t\t\tDefaults: endpoint{\n\t\t\t\tProtocols: []string{\"https\"},\n\t\t\t},\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-west-1\": endpoint{},\n\t\t\t\t\"us-gov-west-1-fips\": endpoint{\n\t\t\t\t\tHostname: \"translate-fips.us-gov-west-1.amazonaws.com\",\n\t\t\t\t\tCredentialScope: credentialScope{\n\t\t\t\t\t\tRegion: \"us-gov-west-1\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t\"waf-regional\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-west-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t\t\"workspaces\": service{\n\n\t\t\tEndpoints: endpoints{\n\t\t\t\t\"us-gov-west-1\": endpoint{},\n\t\t\t},\n\t\t},\n\t},\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/endpoints/dep_service_ids.go",
    "content": "package endpoints\n\n// Service identifiers\n//\n// Deprecated: Use client package's EndpointsID value instead of these\n// ServiceIDs. These IDs are not maintained, and are out of date.\nconst (\n\tA4bServiceID                          = \"a4b\"                          // A4b.\n\tAcmServiceID                          = \"acm\"                          // Acm.\n\tAcmPcaServiceID                       = \"acm-pca\"                      // AcmPca.\n\tApiMediatailorServiceID               = \"api.mediatailor\"              // ApiMediatailor.\n\tApiPricingServiceID                   = \"api.pricing\"                  // ApiPricing.\n\tApiSagemakerServiceID                 = \"api.sagemaker\"                // ApiSagemaker.\n\tApigatewayServiceID                   = \"apigateway\"                   // Apigateway.\n\tApplicationAutoscalingServiceID       = \"application-autoscaling\"      // ApplicationAutoscaling.\n\tAppstream2ServiceID                   = \"appstream2\"                   // Appstream2.\n\tAppsyncServiceID                      = \"appsync\"                      // Appsync.\n\tAthenaServiceID                       = \"athena\"                       // Athena.\n\tAutoscalingServiceID                  = \"autoscaling\"                  // Autoscaling.\n\tAutoscalingPlansServiceID             = \"autoscaling-plans\"            // AutoscalingPlans.\n\tBatchServiceID                        = \"batch\"                        // Batch.\n\tBudgetsServiceID                      = \"budgets\"                      // Budgets.\n\tCeServiceID                           = \"ce\"                           // Ce.\n\tChimeServiceID                        = \"chime\"                        // Chime.\n\tCloud9ServiceID                       = \"cloud9\"                       // Cloud9.\n\tClouddirectoryServiceID               = \"clouddirectory\"               // Clouddirectory.\n\tCloudformationServiceID               = \"cloudformation\"               // Cloudformation.\n\tCloudfrontServiceID                   = \"cloudfront\"                   // Cloudfront.\n\tCloudhsmServiceID                     = \"cloudhsm\"                     // Cloudhsm.\n\tCloudhsmv2ServiceID                   = \"cloudhsmv2\"                   // Cloudhsmv2.\n\tCloudsearchServiceID                  = \"cloudsearch\"                  // Cloudsearch.\n\tCloudtrailServiceID                   = \"cloudtrail\"                   // Cloudtrail.\n\tCodebuildServiceID                    = \"codebuild\"                    // Codebuild.\n\tCodecommitServiceID                   = \"codecommit\"                   // Codecommit.\n\tCodedeployServiceID                   = \"codedeploy\"                   // Codedeploy.\n\tCodepipelineServiceID                 = \"codepipeline\"                 // Codepipeline.\n\tCodestarServiceID                     = \"codestar\"                     // Codestar.\n\tCognitoIdentityServiceID              = \"cognito-identity\"             // CognitoIdentity.\n\tCognitoIdpServiceID                   = \"cognito-idp\"                  // CognitoIdp.\n\tCognitoSyncServiceID                  = \"cognito-sync\"                 // CognitoSync.\n\tComprehendServiceID                   = \"comprehend\"                   // Comprehend.\n\tConfigServiceID                       = \"config\"                       // Config.\n\tCurServiceID                          = \"cur\"                          // Cur.\n\tDatapipelineServiceID                 = \"datapipeline\"                 // Datapipeline.\n\tDaxServiceID                          = \"dax\"                          // Dax.\n\tDevicefarmServiceID                   = \"devicefarm\"                   // Devicefarm.\n\tDirectconnectServiceID                = \"directconnect\"                // Directconnect.\n\tDiscoveryServiceID                    = \"discovery\"                    // Discovery.\n\tDmsServiceID                          = \"dms\"                          // Dms.\n\tDsServiceID                           = \"ds\"                           // Ds.\n\tDynamodbServiceID                     = \"dynamodb\"                     // Dynamodb.\n\tEc2ServiceID                          = \"ec2\"                          // Ec2.\n\tEc2metadataServiceID                  = \"ec2metadata\"                  // Ec2metadata.\n\tEcrServiceID                          = \"ecr\"                          // Ecr.\n\tEcsServiceID                          = \"ecs\"                          // Ecs.\n\tElasticacheServiceID                  = \"elasticache\"                  // Elasticache.\n\tElasticbeanstalkServiceID             = \"elasticbeanstalk\"             // Elasticbeanstalk.\n\tElasticfilesystemServiceID            = \"elasticfilesystem\"            // Elasticfilesystem.\n\tElasticloadbalancingServiceID         = \"elasticloadbalancing\"         // Elasticloadbalancing.\n\tElasticmapreduceServiceID             = \"elasticmapreduce\"             // Elasticmapreduce.\n\tElastictranscoderServiceID            = \"elastictranscoder\"            // Elastictranscoder.\n\tEmailServiceID                        = \"email\"                        // Email.\n\tEntitlementMarketplaceServiceID       = \"entitlement.marketplace\"      // EntitlementMarketplace.\n\tEsServiceID                           = \"es\"                           // Es.\n\tEventsServiceID                       = \"events\"                       // Events.\n\tFirehoseServiceID                     = \"firehose\"                     // Firehose.\n\tFmsServiceID                          = \"fms\"                          // Fms.\n\tGameliftServiceID                     = \"gamelift\"                     // Gamelift.\n\tGlacierServiceID                      = \"glacier\"                      // Glacier.\n\tGlueServiceID                         = \"glue\"                         // Glue.\n\tGreengrassServiceID                   = \"greengrass\"                   // Greengrass.\n\tGuarddutyServiceID                    = \"guardduty\"                    // Guardduty.\n\tHealthServiceID                       = \"health\"                       // Health.\n\tIamServiceID                          = \"iam\"                          // Iam.\n\tImportexportServiceID                 = \"importexport\"                 // Importexport.\n\tInspectorServiceID                    = \"inspector\"                    // Inspector.\n\tIotServiceID                          = \"iot\"                          // Iot.\n\tIotanalyticsServiceID                 = \"iotanalytics\"                 // Iotanalytics.\n\tKinesisServiceID                      = \"kinesis\"                      // Kinesis.\n\tKinesisanalyticsServiceID             = \"kinesisanalytics\"             // Kinesisanalytics.\n\tKinesisvideoServiceID                 = \"kinesisvideo\"                 // Kinesisvideo.\n\tKmsServiceID                          = \"kms\"                          // Kms.\n\tLambdaServiceID                       = \"lambda\"                       // Lambda.\n\tLightsailServiceID                    = \"lightsail\"                    // Lightsail.\n\tLogsServiceID                         = \"logs\"                         // Logs.\n\tMachinelearningServiceID              = \"machinelearning\"              // Machinelearning.\n\tMarketplacecommerceanalyticsServiceID = \"marketplacecommerceanalytics\" // Marketplacecommerceanalytics.\n\tMediaconvertServiceID                 = \"mediaconvert\"                 // Mediaconvert.\n\tMedialiveServiceID                    = \"medialive\"                    // Medialive.\n\tMediapackageServiceID                 = \"mediapackage\"                 // Mediapackage.\n\tMediastoreServiceID                   = \"mediastore\"                   // Mediastore.\n\tMeteringMarketplaceServiceID          = \"metering.marketplace\"         // MeteringMarketplace.\n\tMghServiceID                          = \"mgh\"                          // Mgh.\n\tMobileanalyticsServiceID              = \"mobileanalytics\"              // Mobileanalytics.\n\tModelsLexServiceID                    = \"models.lex\"                   // ModelsLex.\n\tMonitoringServiceID                   = \"monitoring\"                   // Monitoring.\n\tMturkRequesterServiceID               = \"mturk-requester\"              // MturkRequester.\n\tNeptuneServiceID                      = \"neptune\"                      // Neptune.\n\tOpsworksServiceID                     = \"opsworks\"                     // Opsworks.\n\tOpsworksCmServiceID                   = \"opsworks-cm\"                  // OpsworksCm.\n\tOrganizationsServiceID                = \"organizations\"                // Organizations.\n\tPinpointServiceID                     = \"pinpoint\"                     // Pinpoint.\n\tPollyServiceID                        = \"polly\"                        // Polly.\n\tRdsServiceID                          = \"rds\"                          // Rds.\n\tRedshiftServiceID                     = \"redshift\"                     // Redshift.\n\tRekognitionServiceID                  = \"rekognition\"                  // Rekognition.\n\tResourceGroupsServiceID               = \"resource-groups\"              // ResourceGroups.\n\tRoute53ServiceID                      = \"route53\"                      // Route53.\n\tRoute53domainsServiceID               = \"route53domains\"               // Route53domains.\n\tRuntimeLexServiceID                   = \"runtime.lex\"                  // RuntimeLex.\n\tRuntimeSagemakerServiceID             = \"runtime.sagemaker\"            // RuntimeSagemaker.\n\tS3ServiceID                           = \"s3\"                           // S3.\n\tS3ControlServiceID                    = \"s3-control\"                   // S3Control.\n\tSagemakerServiceID                    = \"api.sagemaker\"                // Sagemaker.\n\tSdbServiceID                          = \"sdb\"                          // Sdb.\n\tSecretsmanagerServiceID               = \"secretsmanager\"               // Secretsmanager.\n\tServerlessrepoServiceID               = \"serverlessrepo\"               // Serverlessrepo.\n\tServicecatalogServiceID               = \"servicecatalog\"               // Servicecatalog.\n\tServicediscoveryServiceID             = \"servicediscovery\"             // Servicediscovery.\n\tShieldServiceID                       = \"shield\"                       // Shield.\n\tSmsServiceID                          = \"sms\"                          // Sms.\n\tSnowballServiceID                     = \"snowball\"                     // Snowball.\n\tSnsServiceID                          = \"sns\"                          // Sns.\n\tSqsServiceID                          = \"sqs\"                          // Sqs.\n\tSsmServiceID                          = \"ssm\"                          // Ssm.\n\tStatesServiceID                       = \"states\"                       // States.\n\tStoragegatewayServiceID               = \"storagegateway\"               // Storagegateway.\n\tStreamsDynamodbServiceID              = \"streams.dynamodb\"             // StreamsDynamodb.\n\tStsServiceID                          = \"sts\"                          // Sts.\n\tSupportServiceID                      = \"support\"                      // Support.\n\tSwfServiceID                          = \"swf\"                          // Swf.\n\tTaggingServiceID                      = \"tagging\"                      // Tagging.\n\tTransferServiceID                     = \"transfer\"                     // Transfer.\n\tTranslateServiceID                    = \"translate\"                    // Translate.\n\tWafServiceID                          = \"waf\"                          // Waf.\n\tWafRegionalServiceID                  = \"waf-regional\"                 // WafRegional.\n\tWorkdocsServiceID                     = \"workdocs\"                     // Workdocs.\n\tWorkmailServiceID                     = \"workmail\"                     // Workmail.\n\tWorkspacesServiceID                   = \"workspaces\"                   // Workspaces.\n\tXrayServiceID                         = \"xray\"                         // Xray.\n)\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/endpoints/doc.go",
    "content": "// Package endpoints provides the types and functionality for defining regions\n// and endpoints, as well as querying those definitions.\n//\n// The SDK's Regions and Endpoints metadata is code generated into the endpoints\n// package, and is accessible via the DefaultResolver function. This function\n// returns a endpoint Resolver will search the metadata and build an associated\n// endpoint if one is found. The default resolver will search all partitions\n// known by the SDK. e.g AWS Standard (aws), AWS China (aws-cn), and\n// AWS GovCloud (US) (aws-us-gov).\n// .\n//\n// Enumerating Regions and Endpoint Metadata\n//\n// Casting the Resolver returned by DefaultResolver to a EnumPartitions interface\n// will allow you to get access to the list of underlying Partitions with the\n// Partitions method. This is helpful if you want to limit the SDK's endpoint\n// resolving to a single partition, or enumerate regions, services, and endpoints\n// in the partition.\n//\n//     resolver := endpoints.DefaultResolver()\n//     partitions := resolver.(endpoints.EnumPartitions).Partitions()\n//\n//     for _, p := range partitions {\n//         fmt.Println(\"Regions for\", p.ID())\n//         for id, _ := range p.Regions() {\n//             fmt.Println(\"*\", id)\n//         }\n//\n//         fmt.Println(\"Services for\", p.ID())\n//         for id, _ := range p.Services() {\n//             fmt.Println(\"*\", id)\n//         }\n//     }\n//\n// Using Custom Endpoints\n//\n// The endpoints package also gives you the ability to use your own logic how\n// endpoints are resolved. This is a great way to define a custom endpoint\n// for select services, without passing that logic down through your code.\n//\n// If a type implements the Resolver interface it can be used to resolve\n// endpoints. To use this with the SDK's Session and Config set the value\n// of the type to the EndpointsResolver field of aws.Config when initializing\n// the session, or service client.\n//\n// In addition the ResolverFunc is a wrapper for a func matching the signature\n// of Resolver.EndpointFor, converting it to a type that satisfies the\n// Resolver interface.\n//\n//\n//     myCustomResolver := func(service, region string, optFns ...func(*endpoints.Options)) (endpoints.ResolvedEndpoint, error) {\n//         if service == endpoints.S3ServiceID {\n//             return endpoints.ResolvedEndpoint{\n//                 URL:           \"s3.custom.endpoint.com\",\n//                 SigningRegion: \"custom-signing-region\",\n//             }, nil\n//         }\n//\n//         return endpoints.DefaultResolver().EndpointFor(service, region, optFns...)\n//     }\n//\n//     sess := session.Must(session.NewSession(&aws.Config{\n//         Region:           aws.String(\"us-west-2\"),\n//         EndpointResolver: endpoints.ResolverFunc(myCustomResolver),\n//     }))\npackage endpoints\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/endpoints/endpoints.go",
    "content": "package endpoints\n\nimport (\n\t\"fmt\"\n\t\"regexp\"\n\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n)\n\n// Options provide the configuration needed to direct how the\n// endpoints will be resolved.\ntype Options struct {\n\t// DisableSSL forces the endpoint to be resolved as HTTP.\n\t// instead of HTTPS if the service supports it.\n\tDisableSSL bool\n\n\t// Sets the resolver to resolve the endpoint as a dualstack endpoint\n\t// for the service. If dualstack support for a service is not known and\n\t// StrictMatching is not enabled a dualstack endpoint for the service will\n\t// be returned. This endpoint may not be valid. If StrictMatching is\n\t// enabled only services that are known to support dualstack will return\n\t// dualstack endpoints.\n\tUseDualStack bool\n\n\t// Enables strict matching of services and regions resolved endpoints.\n\t// If the partition doesn't enumerate the exact service and region an\n\t// error will be returned. This option will prevent returning endpoints\n\t// that look valid, but may not resolve to any real endpoint.\n\tStrictMatching bool\n\n\t// Enables resolving a service endpoint based on the region provided if the\n\t// service does not exist. The service endpoint ID will be used as the service\n\t// domain name prefix. By default the endpoint resolver requires the service\n\t// to be known when resolving endpoints.\n\t//\n\t// If resolving an endpoint on the partition list the provided region will\n\t// be used to determine which partition's domain name pattern to the service\n\t// endpoint ID with. If both the service and region are unknown and resolving\n\t// the endpoint on partition list an UnknownEndpointError error will be returned.\n\t//\n\t// If resolving and endpoint on a partition specific resolver that partition's\n\t// domain name pattern will be used with the service endpoint ID. If both\n\t// region and service do not exist when resolving an endpoint on a specific\n\t// partition the partition's domain pattern will be used to combine the\n\t// endpoint and region together.\n\t//\n\t// This option is ignored if StrictMatching is enabled.\n\tResolveUnknownService bool\n}\n\n// Set combines all of the option functions together.\nfunc (o *Options) Set(optFns ...func(*Options)) {\n\tfor _, fn := range optFns {\n\t\tfn(o)\n\t}\n}\n\n// DisableSSLOption sets the DisableSSL options. Can be used as a functional\n// option when resolving endpoints.\nfunc DisableSSLOption(o *Options) {\n\to.DisableSSL = true\n}\n\n// UseDualStackOption sets the UseDualStack option. Can be used as a functional\n// option when resolving endpoints.\nfunc UseDualStackOption(o *Options) {\n\to.UseDualStack = true\n}\n\n// StrictMatchingOption sets the StrictMatching option. Can be used as a functional\n// option when resolving endpoints.\nfunc StrictMatchingOption(o *Options) {\n\to.StrictMatching = true\n}\n\n// ResolveUnknownServiceOption sets the ResolveUnknownService option. Can be used\n// as a functional option when resolving endpoints.\nfunc ResolveUnknownServiceOption(o *Options) {\n\to.ResolveUnknownService = true\n}\n\n// A Resolver provides the interface for functionality to resolve endpoints.\n// The build in Partition and DefaultResolver return value satisfy this interface.\ntype Resolver interface {\n\tEndpointFor(service, region string, opts ...func(*Options)) (ResolvedEndpoint, error)\n}\n\n// ResolverFunc is a helper utility that wraps a function so it satisfies the\n// Resolver interface. This is useful when you want to add additional endpoint\n// resolving logic, or stub out specific endpoints with custom values.\ntype ResolverFunc func(service, region string, opts ...func(*Options)) (ResolvedEndpoint, error)\n\n// EndpointFor wraps the ResolverFunc function to satisfy the Resolver interface.\nfunc (fn ResolverFunc) EndpointFor(service, region string, opts ...func(*Options)) (ResolvedEndpoint, error) {\n\treturn fn(service, region, opts...)\n}\n\nvar schemeRE = regexp.MustCompile(\"^([^:]+)://\")\n\n// AddScheme adds the HTTP or HTTPS schemes to a endpoint URL if there is no\n// scheme. If disableSSL is true HTTP will set HTTP instead of the default HTTPS.\n//\n// If disableSSL is set, it will only set the URL's scheme if the URL does not\n// contain a scheme.\nfunc AddScheme(endpoint string, disableSSL bool) string {\n\tif !schemeRE.MatchString(endpoint) {\n\t\tscheme := \"https\"\n\t\tif disableSSL {\n\t\t\tscheme = \"http\"\n\t\t}\n\t\tendpoint = fmt.Sprintf(\"%s://%s\", scheme, endpoint)\n\t}\n\n\treturn endpoint\n}\n\n// EnumPartitions a provides a way to retrieve the underlying partitions that\n// make up the SDK's default Resolver, or any resolver decoded from a model\n// file.\n//\n// Use this interface with DefaultResolver and DecodeModels to get the list of\n// Partitions.\ntype EnumPartitions interface {\n\tPartitions() []Partition\n}\n\n// RegionsForService returns a map of regions for the partition and service.\n// If either the partition or service does not exist false will be returned\n// as the second parameter.\n//\n// This example shows how  to get the regions for DynamoDB in the AWS partition.\n//    rs, exists := endpoints.RegionsForService(endpoints.DefaultPartitions(), endpoints.AwsPartitionID, endpoints.DynamodbServiceID)\n//\n// This is equivalent to using the partition directly.\n//    rs := endpoints.AwsPartition().Services()[endpoints.DynamodbServiceID].Regions()\nfunc RegionsForService(ps []Partition, partitionID, serviceID string) (map[string]Region, bool) {\n\tfor _, p := range ps {\n\t\tif p.ID() != partitionID {\n\t\t\tcontinue\n\t\t}\n\t\tif _, ok := p.p.Services[serviceID]; !ok {\n\t\t\tbreak\n\t\t}\n\n\t\ts := Service{\n\t\t\tid: serviceID,\n\t\t\tp:  p.p,\n\t\t}\n\t\treturn s.Regions(), true\n\t}\n\n\treturn map[string]Region{}, false\n}\n\n// PartitionForRegion returns the first partition which includes the region\n// passed in. This includes both known regions and regions which match\n// a pattern supported by the partition which may include regions that are\n// not explicitly known by the partition. Use the Regions method of the\n// returned Partition if explicit support is needed.\nfunc PartitionForRegion(ps []Partition, regionID string) (Partition, bool) {\n\tfor _, p := range ps {\n\t\tif _, ok := p.p.Regions[regionID]; ok || p.p.RegionRegex.MatchString(regionID) {\n\t\t\treturn p, true\n\t\t}\n\t}\n\n\treturn Partition{}, false\n}\n\n// A Partition provides the ability to enumerate the partition's regions\n// and services.\ntype Partition struct {\n\tid string\n\tp  *partition\n}\n\n// ID returns the identifier of the partition.\nfunc (p Partition) ID() string { return p.id }\n\n// EndpointFor attempts to resolve the endpoint based on service and region.\n// See Options for information on configuring how the endpoint is resolved.\n//\n// If the service cannot be found in the metadata the UnknownServiceError\n// error will be returned. This validation will occur regardless if\n// StrictMatching is enabled. To enable resolving unknown services set the\n// \"ResolveUnknownService\" option to true. When StrictMatching is disabled\n// this option allows the partition resolver to resolve a endpoint based on\n// the service endpoint ID provided.\n//\n// When resolving endpoints you can choose to enable StrictMatching. This will\n// require the provided service and region to be known by the partition.\n// If the endpoint cannot be strictly resolved an error will be returned. This\n// mode is useful to ensure the endpoint resolved is valid. Without\n// StrictMatching enabled the endpoint returned my look valid but may not work.\n// StrictMatching requires the SDK to be updated if you want to take advantage\n// of new regions and services expansions.\n//\n// Errors that can be returned.\n//   * UnknownServiceError\n//   * UnknownEndpointError\nfunc (p Partition) EndpointFor(service, region string, opts ...func(*Options)) (ResolvedEndpoint, error) {\n\treturn p.p.EndpointFor(service, region, opts...)\n}\n\n// Regions returns a map of Regions indexed by their ID. This is useful for\n// enumerating over the regions in a partition.\nfunc (p Partition) Regions() map[string]Region {\n\trs := map[string]Region{}\n\tfor id, r := range p.p.Regions {\n\t\trs[id] = Region{\n\t\t\tid:   id,\n\t\t\tdesc: r.Description,\n\t\t\tp:    p.p,\n\t\t}\n\t}\n\n\treturn rs\n}\n\n// Services returns a map of Service indexed by their ID. This is useful for\n// enumerating over the services in a partition.\nfunc (p Partition) Services() map[string]Service {\n\tss := map[string]Service{}\n\tfor id := range p.p.Services {\n\t\tss[id] = Service{\n\t\t\tid: id,\n\t\t\tp:  p.p,\n\t\t}\n\t}\n\n\treturn ss\n}\n\n// A Region provides information about a region, and ability to resolve an\n// endpoint from the context of a region, given a service.\ntype Region struct {\n\tid, desc string\n\tp        *partition\n}\n\n// ID returns the region's identifier.\nfunc (r Region) ID() string { return r.id }\n\n// Description returns the region's description. The region description\n// is free text, it can be empty, and it may change between SDK releases.\nfunc (r Region) Description() string { return r.desc }\n\n// ResolveEndpoint resolves an endpoint from the context of the region given\n// a service. See Partition.EndpointFor for usage and errors that can be returned.\nfunc (r Region) ResolveEndpoint(service string, opts ...func(*Options)) (ResolvedEndpoint, error) {\n\treturn r.p.EndpointFor(service, r.id, opts...)\n}\n\n// Services returns a list of all services that are known to be in this region.\nfunc (r Region) Services() map[string]Service {\n\tss := map[string]Service{}\n\tfor id, s := range r.p.Services {\n\t\tif _, ok := s.Endpoints[r.id]; ok {\n\t\t\tss[id] = Service{\n\t\t\t\tid: id,\n\t\t\t\tp:  r.p,\n\t\t\t}\n\t\t}\n\t}\n\n\treturn ss\n}\n\n// A Service provides information about a service, and ability to resolve an\n// endpoint from the context of a service, given a region.\ntype Service struct {\n\tid string\n\tp  *partition\n}\n\n// ID returns the identifier for the service.\nfunc (s Service) ID() string { return s.id }\n\n// ResolveEndpoint resolves an endpoint from the context of a service given\n// a region. See Partition.EndpointFor for usage and errors that can be returned.\nfunc (s Service) ResolveEndpoint(region string, opts ...func(*Options)) (ResolvedEndpoint, error) {\n\treturn s.p.EndpointFor(s.id, region, opts...)\n}\n\n// Regions returns a map of Regions that the service is present in.\n//\n// A region is the AWS region the service exists in. Whereas a Endpoint is\n// an URL that can be resolved to a instance of a service.\nfunc (s Service) Regions() map[string]Region {\n\trs := map[string]Region{}\n\tfor id := range s.p.Services[s.id].Endpoints {\n\t\tif r, ok := s.p.Regions[id]; ok {\n\t\t\trs[id] = Region{\n\t\t\t\tid:   id,\n\t\t\t\tdesc: r.Description,\n\t\t\t\tp:    s.p,\n\t\t\t}\n\t\t}\n\t}\n\n\treturn rs\n}\n\n// Endpoints returns a map of Endpoints indexed by their ID for all known\n// endpoints for a service.\n//\n// A region is the AWS region the service exists in. Whereas a Endpoint is\n// an URL that can be resolved to a instance of a service.\nfunc (s Service) Endpoints() map[string]Endpoint {\n\tes := map[string]Endpoint{}\n\tfor id := range s.p.Services[s.id].Endpoints {\n\t\tes[id] = Endpoint{\n\t\t\tid:        id,\n\t\t\tserviceID: s.id,\n\t\t\tp:         s.p,\n\t\t}\n\t}\n\n\treturn es\n}\n\n// A Endpoint provides information about endpoints, and provides the ability\n// to resolve that endpoint for the service, and the region the endpoint\n// represents.\ntype Endpoint struct {\n\tid        string\n\tserviceID string\n\tp         *partition\n}\n\n// ID returns the identifier for an endpoint.\nfunc (e Endpoint) ID() string { return e.id }\n\n// ServiceID returns the identifier the endpoint belongs to.\nfunc (e Endpoint) ServiceID() string { return e.serviceID }\n\n// ResolveEndpoint resolves an endpoint from the context of a service and\n// region the endpoint represents. See Partition.EndpointFor for usage and\n// errors that can be returned.\nfunc (e Endpoint) ResolveEndpoint(opts ...func(*Options)) (ResolvedEndpoint, error) {\n\treturn e.p.EndpointFor(e.serviceID, e.id, opts...)\n}\n\n// A ResolvedEndpoint is an endpoint that has been resolved based on a partition\n// service, and region.\ntype ResolvedEndpoint struct {\n\t// The endpoint URL\n\tURL string\n\n\t// The region that should be used for signing requests.\n\tSigningRegion string\n\n\t// The service name that should be used for signing requests.\n\tSigningName string\n\n\t// States that the signing name for this endpoint was derived from metadata\n\t// passed in, but was not explicitly modeled.\n\tSigningNameDerived bool\n\n\t// The signing method that should be used for signing requests.\n\tSigningMethod string\n}\n\n// So that the Error interface type can be included as an anonymous field\n// in the requestError struct and not conflict with the error.Error() method.\ntype awsError awserr.Error\n\n// A EndpointNotFoundError is returned when in StrictMatching mode, and the\n// endpoint for the service and region cannot be found in any of the partitions.\ntype EndpointNotFoundError struct {\n\tawsError\n\tPartition string\n\tService   string\n\tRegion    string\n}\n\n// A UnknownServiceError is returned when the service does not resolve to an\n// endpoint. Includes a list of all known services for the partition. Returned\n// when a partition does not support the service.\ntype UnknownServiceError struct {\n\tawsError\n\tPartition string\n\tService   string\n\tKnown     []string\n}\n\n// NewUnknownServiceError builds and returns UnknownServiceError.\nfunc NewUnknownServiceError(p, s string, known []string) UnknownServiceError {\n\treturn UnknownServiceError{\n\t\tawsError: awserr.New(\"UnknownServiceError\",\n\t\t\t\"could not resolve endpoint for unknown service\", nil),\n\t\tPartition: p,\n\t\tService:   s,\n\t\tKnown:     known,\n\t}\n}\n\n// String returns the string representation of the error.\nfunc (e UnknownServiceError) Error() string {\n\textra := fmt.Sprintf(\"partition: %q, service: %q\",\n\t\te.Partition, e.Service)\n\tif len(e.Known) > 0 {\n\t\textra += fmt.Sprintf(\", known: %v\", e.Known)\n\t}\n\treturn awserr.SprintError(e.Code(), e.Message(), extra, e.OrigErr())\n}\n\n// String returns the string representation of the error.\nfunc (e UnknownServiceError) String() string {\n\treturn e.Error()\n}\n\n// A UnknownEndpointError is returned when in StrictMatching mode and the\n// service is valid, but the region does not resolve to an endpoint. Includes\n// a list of all known endpoints for the service.\ntype UnknownEndpointError struct {\n\tawsError\n\tPartition string\n\tService   string\n\tRegion    string\n\tKnown     []string\n}\n\n// NewUnknownEndpointError builds and returns UnknownEndpointError.\nfunc NewUnknownEndpointError(p, s, r string, known []string) UnknownEndpointError {\n\treturn UnknownEndpointError{\n\t\tawsError: awserr.New(\"UnknownEndpointError\",\n\t\t\t\"could not resolve endpoint\", nil),\n\t\tPartition: p,\n\t\tService:   s,\n\t\tRegion:    r,\n\t\tKnown:     known,\n\t}\n}\n\n// String returns the string representation of the error.\nfunc (e UnknownEndpointError) Error() string {\n\textra := fmt.Sprintf(\"partition: %q, service: %q, region: %q\",\n\t\te.Partition, e.Service, e.Region)\n\tif len(e.Known) > 0 {\n\t\textra += fmt.Sprintf(\", known: %v\", e.Known)\n\t}\n\treturn awserr.SprintError(e.Code(), e.Message(), extra, e.OrigErr())\n}\n\n// String returns the string representation of the error.\nfunc (e UnknownEndpointError) String() string {\n\treturn e.Error()\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/endpoints/v3model.go",
    "content": "package endpoints\n\nimport (\n\t\"fmt\"\n\t\"regexp\"\n\t\"strconv\"\n\t\"strings\"\n)\n\ntype partitions []partition\n\nfunc (ps partitions) EndpointFor(service, region string, opts ...func(*Options)) (ResolvedEndpoint, error) {\n\tvar opt Options\n\topt.Set(opts...)\n\n\tfor i := 0; i < len(ps); i++ {\n\t\tif !ps[i].canResolveEndpoint(service, region, opt.StrictMatching) {\n\t\t\tcontinue\n\t\t}\n\n\t\treturn ps[i].EndpointFor(service, region, opts...)\n\t}\n\n\t// If loose matching fallback to first partition format to use\n\t// when resolving the endpoint.\n\tif !opt.StrictMatching && len(ps) > 0 {\n\t\treturn ps[0].EndpointFor(service, region, opts...)\n\t}\n\n\treturn ResolvedEndpoint{}, NewUnknownEndpointError(\"all partitions\", service, region, []string{})\n}\n\n// Partitions satisfies the EnumPartitions interface and returns a list\n// of Partitions representing each partition represented in the SDK's\n// endpoints model.\nfunc (ps partitions) Partitions() []Partition {\n\tparts := make([]Partition, 0, len(ps))\n\tfor i := 0; i < len(ps); i++ {\n\t\tparts = append(parts, ps[i].Partition())\n\t}\n\n\treturn parts\n}\n\ntype partition struct {\n\tID          string      `json:\"partition\"`\n\tName        string      `json:\"partitionName\"`\n\tDNSSuffix   string      `json:\"dnsSuffix\"`\n\tRegionRegex regionRegex `json:\"regionRegex\"`\n\tDefaults    endpoint    `json:\"defaults\"`\n\tRegions     regions     `json:\"regions\"`\n\tServices    services    `json:\"services\"`\n}\n\nfunc (p partition) Partition() Partition {\n\treturn Partition{\n\t\tid: p.ID,\n\t\tp:  &p,\n\t}\n}\n\nfunc (p partition) canResolveEndpoint(service, region string, strictMatch bool) bool {\n\ts, hasService := p.Services[service]\n\t_, hasEndpoint := s.Endpoints[region]\n\n\tif hasEndpoint && hasService {\n\t\treturn true\n\t}\n\n\tif strictMatch {\n\t\treturn false\n\t}\n\n\treturn p.RegionRegex.MatchString(region)\n}\n\nfunc (p partition) EndpointFor(service, region string, opts ...func(*Options)) (resolved ResolvedEndpoint, err error) {\n\tvar opt Options\n\topt.Set(opts...)\n\n\ts, hasService := p.Services[service]\n\tif !(hasService || opt.ResolveUnknownService) {\n\t\t// Only return error if the resolver will not fallback to creating\n\t\t// endpoint based on service endpoint ID passed in.\n\t\treturn resolved, NewUnknownServiceError(p.ID, service, serviceList(p.Services))\n\t}\n\n\te, hasEndpoint := s.endpointForRegion(region)\n\tif !hasEndpoint && opt.StrictMatching {\n\t\treturn resolved, NewUnknownEndpointError(p.ID, service, region, endpointList(s.Endpoints))\n\t}\n\n\tdefs := []endpoint{p.Defaults, s.Defaults}\n\treturn e.resolve(service, region, p.DNSSuffix, defs, opt), nil\n}\n\nfunc serviceList(ss services) []string {\n\tlist := make([]string, 0, len(ss))\n\tfor k := range ss {\n\t\tlist = append(list, k)\n\t}\n\treturn list\n}\nfunc endpointList(es endpoints) []string {\n\tlist := make([]string, 0, len(es))\n\tfor k := range es {\n\t\tlist = append(list, k)\n\t}\n\treturn list\n}\n\ntype regionRegex struct {\n\t*regexp.Regexp\n}\n\nfunc (rr *regionRegex) UnmarshalJSON(b []byte) (err error) {\n\t// Strip leading and trailing quotes\n\tregex, err := strconv.Unquote(string(b))\n\tif err != nil {\n\t\treturn fmt.Errorf(\"unable to strip quotes from regex, %v\", err)\n\t}\n\n\trr.Regexp, err = regexp.Compile(regex)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"unable to unmarshal region regex, %v\", err)\n\t}\n\treturn nil\n}\n\ntype regions map[string]region\n\ntype region struct {\n\tDescription string `json:\"description\"`\n}\n\ntype services map[string]service\n\ntype service struct {\n\tPartitionEndpoint string    `json:\"partitionEndpoint\"`\n\tIsRegionalized    boxedBool `json:\"isRegionalized,omitempty\"`\n\tDefaults          endpoint  `json:\"defaults\"`\n\tEndpoints         endpoints `json:\"endpoints\"`\n}\n\nfunc (s *service) endpointForRegion(region string) (endpoint, bool) {\n\tif s.IsRegionalized == boxedFalse {\n\t\treturn s.Endpoints[s.PartitionEndpoint], region == s.PartitionEndpoint\n\t}\n\n\tif e, ok := s.Endpoints[region]; ok {\n\t\treturn e, true\n\t}\n\n\t// Unable to find any matching endpoint, return\n\t// blank that will be used for generic endpoint creation.\n\treturn endpoint{}, false\n}\n\ntype endpoints map[string]endpoint\n\ntype endpoint struct {\n\tHostname        string          `json:\"hostname\"`\n\tProtocols       []string        `json:\"protocols\"`\n\tCredentialScope credentialScope `json:\"credentialScope\"`\n\n\t// Custom fields not modeled\n\tHasDualStack      boxedBool `json:\"-\"`\n\tDualStackHostname string    `json:\"-\"`\n\n\t// Signature Version not used\n\tSignatureVersions []string `json:\"signatureVersions\"`\n\n\t// SSLCommonName not used.\n\tSSLCommonName string `json:\"sslCommonName\"`\n}\n\nconst (\n\tdefaultProtocol = \"https\"\n\tdefaultSigner   = \"v4\"\n)\n\nvar (\n\tprotocolPriority = []string{\"https\", \"http\"}\n\tsignerPriority   = []string{\"v4\", \"v2\"}\n)\n\nfunc getByPriority(s []string, p []string, def string) string {\n\tif len(s) == 0 {\n\t\treturn def\n\t}\n\n\tfor i := 0; i < len(p); i++ {\n\t\tfor j := 0; j < len(s); j++ {\n\t\t\tif s[j] == p[i] {\n\t\t\t\treturn s[j]\n\t\t\t}\n\t\t}\n\t}\n\n\treturn s[0]\n}\n\nfunc (e endpoint) resolve(service, region, dnsSuffix string, defs []endpoint, opts Options) ResolvedEndpoint {\n\tvar merged endpoint\n\tfor _, def := range defs {\n\t\tmerged.mergeIn(def)\n\t}\n\tmerged.mergeIn(e)\n\te = merged\n\n\thostname := e.Hostname\n\n\t// Offset the hostname for dualstack if enabled\n\tif opts.UseDualStack && e.HasDualStack == boxedTrue {\n\t\thostname = e.DualStackHostname\n\t}\n\n\tu := strings.Replace(hostname, \"{service}\", service, 1)\n\tu = strings.Replace(u, \"{region}\", region, 1)\n\tu = strings.Replace(u, \"{dnsSuffix}\", dnsSuffix, 1)\n\n\tscheme := getEndpointScheme(e.Protocols, opts.DisableSSL)\n\tu = fmt.Sprintf(\"%s://%s\", scheme, u)\n\n\tsigningRegion := e.CredentialScope.Region\n\tif len(signingRegion) == 0 {\n\t\tsigningRegion = region\n\t}\n\n\tsigningName := e.CredentialScope.Service\n\tvar signingNameDerived bool\n\tif len(signingName) == 0 {\n\t\tsigningName = service\n\t\tsigningNameDerived = true\n\t}\n\n\treturn ResolvedEndpoint{\n\t\tURL:                u,\n\t\tSigningRegion:      signingRegion,\n\t\tSigningName:        signingName,\n\t\tSigningNameDerived: signingNameDerived,\n\t\tSigningMethod:      getByPriority(e.SignatureVersions, signerPriority, defaultSigner),\n\t}\n}\n\nfunc getEndpointScheme(protocols []string, disableSSL bool) string {\n\tif disableSSL {\n\t\treturn \"http\"\n\t}\n\n\treturn getByPriority(protocols, protocolPriority, defaultProtocol)\n}\n\nfunc (e *endpoint) mergeIn(other endpoint) {\n\tif len(other.Hostname) > 0 {\n\t\te.Hostname = other.Hostname\n\t}\n\tif len(other.Protocols) > 0 {\n\t\te.Protocols = other.Protocols\n\t}\n\tif len(other.SignatureVersions) > 0 {\n\t\te.SignatureVersions = other.SignatureVersions\n\t}\n\tif len(other.CredentialScope.Region) > 0 {\n\t\te.CredentialScope.Region = other.CredentialScope.Region\n\t}\n\tif len(other.CredentialScope.Service) > 0 {\n\t\te.CredentialScope.Service = other.CredentialScope.Service\n\t}\n\tif len(other.SSLCommonName) > 0 {\n\t\te.SSLCommonName = other.SSLCommonName\n\t}\n\tif other.HasDualStack != boxedBoolUnset {\n\t\te.HasDualStack = other.HasDualStack\n\t}\n\tif len(other.DualStackHostname) > 0 {\n\t\te.DualStackHostname = other.DualStackHostname\n\t}\n}\n\ntype credentialScope struct {\n\tRegion  string `json:\"region\"`\n\tService string `json:\"service\"`\n}\n\ntype boxedBool int\n\nfunc (b *boxedBool) UnmarshalJSON(buf []byte) error {\n\tv, err := strconv.ParseBool(string(buf))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif v {\n\t\t*b = boxedTrue\n\t} else {\n\t\t*b = boxedFalse\n\t}\n\n\treturn nil\n}\n\nconst (\n\tboxedBoolUnset boxedBool = iota\n\tboxedFalse\n\tboxedTrue\n)\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/endpoints/v3model_codegen.go",
    "content": "// +build codegen\n\npackage endpoints\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"reflect\"\n\t\"strings\"\n\t\"text/template\"\n\t\"unicode\"\n)\n\n// A CodeGenOptions are the options for code generating the endpoints into\n// Go code from the endpoints model definition.\ntype CodeGenOptions struct {\n\t// Options for how the model will be decoded.\n\tDecodeModelOptions DecodeModelOptions\n\n\t// Disables code generation of the service endpoint prefix IDs defined in\n\t// the model.\n\tDisableGenerateServiceIDs bool\n}\n\n// Set combines all of the option functions together\nfunc (d *CodeGenOptions) Set(optFns ...func(*CodeGenOptions)) {\n\tfor _, fn := range optFns {\n\t\tfn(d)\n\t}\n}\n\n// CodeGenModel given a endpoints model file will decode it and attempt to\n// generate Go code from the model definition. Error will be returned if\n// the code is unable to be generated, or decoded.\nfunc CodeGenModel(modelFile io.Reader, outFile io.Writer, optFns ...func(*CodeGenOptions)) error {\n\tvar opts CodeGenOptions\n\topts.Set(optFns...)\n\n\tresolver, err := DecodeModel(modelFile, func(d *DecodeModelOptions) {\n\t\t*d = opts.DecodeModelOptions\n\t})\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tv := struct {\n\t\tResolver\n\t\tCodeGenOptions\n\t}{\n\t\tResolver:       resolver,\n\t\tCodeGenOptions: opts,\n\t}\n\n\ttmpl := template.Must(template.New(\"tmpl\").Funcs(funcMap).Parse(v3Tmpl))\n\tif err := tmpl.ExecuteTemplate(outFile, \"defaults\", v); err != nil {\n\t\treturn fmt.Errorf(\"failed to execute template, %v\", err)\n\t}\n\n\treturn nil\n}\n\nfunc toSymbol(v string) string {\n\tout := []rune{}\n\tfor _, c := range strings.Title(v) {\n\t\tif !(unicode.IsNumber(c) || unicode.IsLetter(c)) {\n\t\t\tcontinue\n\t\t}\n\n\t\tout = append(out, c)\n\t}\n\n\treturn string(out)\n}\n\nfunc quoteString(v string) string {\n\treturn fmt.Sprintf(\"%q\", v)\n}\n\nfunc regionConstName(p, r string) string {\n\treturn toSymbol(p) + toSymbol(r)\n}\n\nfunc partitionGetter(id string) string {\n\treturn fmt.Sprintf(\"%sPartition\", toSymbol(id))\n}\n\nfunc partitionVarName(id string) string {\n\treturn fmt.Sprintf(\"%sPartition\", strings.ToLower(toSymbol(id)))\n}\n\nfunc listPartitionNames(ps partitions) string {\n\tnames := []string{}\n\tswitch len(ps) {\n\tcase 1:\n\t\treturn ps[0].Name\n\tcase 2:\n\t\treturn fmt.Sprintf(\"%s and %s\", ps[0].Name, ps[1].Name)\n\tdefault:\n\t\tfor i, p := range ps {\n\t\t\tif i == len(ps)-1 {\n\t\t\t\tnames = append(names, \"and \"+p.Name)\n\t\t\t} else {\n\t\t\t\tnames = append(names, p.Name)\n\t\t\t}\n\t\t}\n\t\treturn strings.Join(names, \", \")\n\t}\n}\n\nfunc boxedBoolIfSet(msg string, v boxedBool) string {\n\tswitch v {\n\tcase boxedTrue:\n\t\treturn fmt.Sprintf(msg, \"boxedTrue\")\n\tcase boxedFalse:\n\t\treturn fmt.Sprintf(msg, \"boxedFalse\")\n\tdefault:\n\t\treturn \"\"\n\t}\n}\n\nfunc stringIfSet(msg, v string) string {\n\tif len(v) == 0 {\n\t\treturn \"\"\n\t}\n\n\treturn fmt.Sprintf(msg, v)\n}\n\nfunc stringSliceIfSet(msg string, vs []string) string {\n\tif len(vs) == 0 {\n\t\treturn \"\"\n\t}\n\n\tnames := []string{}\n\tfor _, v := range vs {\n\t\tnames = append(names, `\"`+v+`\"`)\n\t}\n\n\treturn fmt.Sprintf(msg, strings.Join(names, \",\"))\n}\n\nfunc endpointIsSet(v endpoint) bool {\n\treturn !reflect.DeepEqual(v, endpoint{})\n}\n\nfunc serviceSet(ps partitions) map[string]struct{} {\n\tset := map[string]struct{}{}\n\tfor _, p := range ps {\n\t\tfor id := range p.Services {\n\t\t\tset[id] = struct{}{}\n\t\t}\n\t}\n\n\treturn set\n}\n\nvar funcMap = template.FuncMap{\n\t\"ToSymbol\":           toSymbol,\n\t\"QuoteString\":        quoteString,\n\t\"RegionConst\":        regionConstName,\n\t\"PartitionGetter\":    partitionGetter,\n\t\"PartitionVarName\":   partitionVarName,\n\t\"ListPartitionNames\": listPartitionNames,\n\t\"BoxedBoolIfSet\":     boxedBoolIfSet,\n\t\"StringIfSet\":        stringIfSet,\n\t\"StringSliceIfSet\":   stringSliceIfSet,\n\t\"EndpointIsSet\":      endpointIsSet,\n\t\"ServicesSet\":        serviceSet,\n}\n\nconst v3Tmpl = `\n{{ define \"defaults\" -}}\n// Code generated by aws/endpoints/v3model_codegen.go. DO NOT EDIT.\n\npackage endpoints\n\nimport (\n\t\"regexp\"\n)\n\n\t{{ template \"partition consts\" $.Resolver }}\n\n\t{{ range $_, $partition := $.Resolver }}\n\t\t{{ template \"partition region consts\" $partition }}\n\t{{ end }}\n\n\t{{ if not $.DisableGenerateServiceIDs -}}\n\t{{ template \"service consts\" $.Resolver }}\n\t{{- end }}\n\t\n\t{{ template \"endpoint resolvers\" $.Resolver }}\n{{- end }}\n\n{{ define \"partition consts\" }}\n\t// Partition identifiers\n\tconst (\n\t\t{{ range $_, $p := . -}}\n\t\t\t{{ ToSymbol $p.ID }}PartitionID = {{ QuoteString $p.ID }} // {{ $p.Name }} partition.\n\t\t{{ end -}}\n\t)\n{{- end }}\n\n{{ define \"partition region consts\" }}\n\t// {{ .Name }} partition's regions.\n\tconst (\n\t\t{{ range $id, $region := .Regions -}}\n\t\t\t{{ ToSymbol $id }}RegionID = {{ QuoteString $id }} // {{ $region.Description }}.\n\t\t{{ end -}}\n\t)\n{{- end }}\n\n{{ define \"service consts\" }}\n\t// Service identifiers\n\tconst (\n\t\t{{ $serviceSet := ServicesSet . -}}\n\t\t{{ range $id, $_ := $serviceSet -}}\n\t\t\t{{ ToSymbol $id }}ServiceID = {{ QuoteString $id }} // {{ ToSymbol $id }}.\n\t\t{{ end -}}\n\t)\n{{- end }}\n\n{{ define \"endpoint resolvers\" }}\n\t// DefaultResolver returns an Endpoint resolver that will be able\n\t// to resolve endpoints for: {{ ListPartitionNames . }}.\n\t//\n\t// Use DefaultPartitions() to get the list of the default partitions.\n\tfunc DefaultResolver() Resolver {\n\t\treturn defaultPartitions\n\t}\n\n\t// DefaultPartitions returns a list of the partitions the SDK is bundled\n\t// with. The available partitions are: {{ ListPartitionNames . }}.\n\t//\n\t//    partitions := endpoints.DefaultPartitions\n\t//    for _, p := range partitions {\n\t//        // ... inspect partitions\n\t//    }\n\tfunc DefaultPartitions() []Partition {\n\t\treturn defaultPartitions.Partitions()\n\t}\n\n\tvar defaultPartitions = partitions{\n\t\t{{ range $_, $partition := . -}}\n\t\t\t{{ PartitionVarName $partition.ID }},\n\t\t{{ end }}\n\t}\n\t\n\t{{ range $_, $partition := . -}}\n\t\t{{ $name := PartitionGetter $partition.ID -}}\n\t\t// {{ $name }} returns the Resolver for {{ $partition.Name }}.\n\t\tfunc {{ $name }}() Partition {\n\t\t\treturn  {{ PartitionVarName $partition.ID }}.Partition()\n\t\t}\n\t\tvar {{ PartitionVarName $partition.ID }} = {{ template \"gocode Partition\" $partition }}\n\t{{ end }}\n{{ end }}\n\n{{ define \"default partitions\" }}\n\tfunc DefaultPartitions() []Partition {\n\t\treturn []partition{\n\t\t\t{{ range $_, $partition := . -}}\n\t\t\t// {{ ToSymbol $partition.ID}}Partition(),\n\t\t\t{{ end }}\n\t\t}\n\t}\n{{ end }}\n\n{{ define \"gocode Partition\" -}}\npartition{\n\t{{ StringIfSet \"ID: %q,\\n\" .ID -}}\n\t{{ StringIfSet \"Name: %q,\\n\" .Name -}}\n\t{{ StringIfSet \"DNSSuffix: %q,\\n\" .DNSSuffix -}}\n\tRegionRegex: {{ template \"gocode RegionRegex\" .RegionRegex }},\n\t{{ if EndpointIsSet .Defaults -}}\n\t\tDefaults: {{ template \"gocode Endpoint\" .Defaults }},\n\t{{- end }}\n\tRegions:  {{ template \"gocode Regions\" .Regions }},\n\tServices: {{ template \"gocode Services\" .Services }},\n}\n{{- end }}\n\n{{ define \"gocode RegionRegex\" -}}\nregionRegex{\n\tRegexp: func() *regexp.Regexp{\n\t\treg, _ := regexp.Compile({{ QuoteString .Regexp.String }})\n\t\treturn reg\n\t}(),\n}\n{{- end }}\n\n{{ define \"gocode Regions\" -}}\nregions{\n\t{{ range $id, $region := . -}}\n\t\t\"{{ $id }}\": {{ template \"gocode Region\" $region }},\n\t{{ end -}}\n}\n{{- end }}\n\n{{ define \"gocode Region\" -}}\nregion{\n\t{{ StringIfSet \"Description: %q,\\n\" .Description -}}\n}\n{{- end }}\n\n{{ define \"gocode Services\" -}}\nservices{\n\t{{ range $id, $service := . -}}\n\t\"{{ $id }}\": {{ template \"gocode Service\" $service }},\n\t{{ end }}\n}\n{{- end }}\n\n{{ define \"gocode Service\" -}}\nservice{\n\t{{ StringIfSet \"PartitionEndpoint: %q,\\n\" .PartitionEndpoint -}}\n\t{{ BoxedBoolIfSet \"IsRegionalized: %s,\\n\" .IsRegionalized -}}\n\t{{ if EndpointIsSet .Defaults -}}\n\t\tDefaults: {{ template \"gocode Endpoint\" .Defaults -}},\n\t{{- end }}\n\t{{ if .Endpoints -}}\n\t\tEndpoints: {{ template \"gocode Endpoints\" .Endpoints }},\n\t{{- end }}\n}\n{{- end }}\n\n{{ define \"gocode Endpoints\" -}}\nendpoints{\n\t{{ range $id, $endpoint := . -}}\n\t\"{{ $id }}\": {{ template \"gocode Endpoint\" $endpoint }},\n\t{{ end }}\n}\n{{- end }}\n\n{{ define \"gocode Endpoint\" -}}\nendpoint{\n\t{{ StringIfSet \"Hostname: %q,\\n\" .Hostname -}}\n\t{{ StringIfSet \"SSLCommonName: %q,\\n\" .SSLCommonName -}}\n\t{{ StringSliceIfSet \"Protocols: []string{%s},\\n\" .Protocols -}}\n\t{{ StringSliceIfSet \"SignatureVersions: []string{%s},\\n\" .SignatureVersions -}}\n\t{{ if or .CredentialScope.Region .CredentialScope.Service -}}\n\tCredentialScope: credentialScope{\n\t\t{{ StringIfSet \"Region: %q,\\n\" .CredentialScope.Region -}}\n\t\t{{ StringIfSet \"Service: %q,\\n\" .CredentialScope.Service -}}\n\t},\n\t{{- end }}\n\t{{ BoxedBoolIfSet \"HasDualStack: %s,\\n\" .HasDualStack -}}\n\t{{ StringIfSet \"DualStackHostname: %q,\\n\" .DualStackHostname -}}\n\n}\n{{- end }}\n`\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/errors.go",
    "content": "package aws\n\nimport \"github.com/aws/aws-sdk-go/aws/awserr\"\n\nvar (\n\t// ErrMissingRegion is an error that is returned if region configuration is\n\t// not found.\n\tErrMissingRegion = awserr.New(\"MissingRegion\", \"could not find region configuration\", nil)\n\n\t// ErrMissingEndpoint is an error that is returned if an endpoint cannot be\n\t// resolved for a service.\n\tErrMissingEndpoint = awserr.New(\"MissingEndpoint\", \"'Endpoint' configuration is required for this service\", nil)\n)\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/jsonvalue.go",
    "content": "package aws\n\n// JSONValue is a representation of a grab bag type that will be marshaled\n// into a json string. This type can be used just like any other map.\n//\n//\tExample:\n//\n//\tvalues := aws.JSONValue{\n//\t\t\"Foo\": \"Bar\",\n//\t}\n//\tvalues[\"Baz\"] = \"Qux\"\ntype JSONValue map[string]interface{}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/logger.go",
    "content": "package aws\n\nimport (\n\t\"log\"\n\t\"os\"\n)\n\n// A LogLevelType defines the level logging should be performed at. Used to instruct\n// the SDK which statements should be logged.\ntype LogLevelType uint\n\n// LogLevel returns the pointer to a LogLevel. Should be used to workaround\n// not being able to take the address of a non-composite literal.\nfunc LogLevel(l LogLevelType) *LogLevelType {\n\treturn &l\n}\n\n// Value returns the LogLevel value or the default value LogOff if the LogLevel\n// is nil. Safe to use on nil value LogLevelTypes.\nfunc (l *LogLevelType) Value() LogLevelType {\n\tif l != nil {\n\t\treturn *l\n\t}\n\treturn LogOff\n}\n\n// Matches returns true if the v LogLevel is enabled by this LogLevel. Should be\n// used with logging sub levels. Is safe to use on nil value LogLevelTypes. If\n// LogLevel is nil, will default to LogOff comparison.\nfunc (l *LogLevelType) Matches(v LogLevelType) bool {\n\tc := l.Value()\n\treturn c&v == v\n}\n\n// AtLeast returns true if this LogLevel is at least high enough to satisfies v.\n// Is safe to use on nil value LogLevelTypes. If LogLevel is nil, will default\n// to LogOff comparison.\nfunc (l *LogLevelType) AtLeast(v LogLevelType) bool {\n\tc := l.Value()\n\treturn c >= v\n}\n\nconst (\n\t// LogOff states that no logging should be performed by the SDK. This is the\n\t// default state of the SDK, and should be use to disable all logging.\n\tLogOff LogLevelType = iota * 0x1000\n\n\t// LogDebug state that debug output should be logged by the SDK. This should\n\t// be used to inspect request made and responses received.\n\tLogDebug\n)\n\n// Debug Logging Sub Levels\nconst (\n\t// LogDebugWithSigning states that the SDK should log request signing and\n\t// presigning events. This should be used to log the signing details of\n\t// requests for debugging. Will also enable LogDebug.\n\tLogDebugWithSigning LogLevelType = LogDebug | (1 << iota)\n\n\t// LogDebugWithHTTPBody states the SDK should log HTTP request and response\n\t// HTTP bodys in addition to the headers and path. This should be used to\n\t// see the body content of requests and responses made while using the SDK\n\t// Will also enable LogDebug.\n\tLogDebugWithHTTPBody\n\n\t// LogDebugWithRequestRetries states the SDK should log when service requests will\n\t// be retried. This should be used to log when you want to log when service\n\t// requests are being retried. Will also enable LogDebug.\n\tLogDebugWithRequestRetries\n\n\t// LogDebugWithRequestErrors states the SDK should log when service requests fail\n\t// to build, send, validate, or unmarshal.\n\tLogDebugWithRequestErrors\n\n\t// LogDebugWithEventStreamBody states the SDK should log EventStream\n\t// request and response bodys. This should be used to log the EventStream\n\t// wire unmarshaled message content of requests and responses made while\n\t// using the SDK Will also enable LogDebug.\n\tLogDebugWithEventStreamBody\n)\n\n// A Logger is a minimalistic interface for the SDK to log messages to. Should\n// be used to provide custom logging writers for the SDK to use.\ntype Logger interface {\n\tLog(...interface{})\n}\n\n// A LoggerFunc is a convenience type to convert a function taking a variadic\n// list of arguments and wrap it so the Logger interface can be used.\n//\n// Example:\n//     s3.New(sess, &aws.Config{Logger: aws.LoggerFunc(func(args ...interface{}) {\n//         fmt.Fprintln(os.Stdout, args...)\n//     })})\ntype LoggerFunc func(...interface{})\n\n// Log calls the wrapped function with the arguments provided\nfunc (f LoggerFunc) Log(args ...interface{}) {\n\tf(args...)\n}\n\n// NewDefaultLogger returns a Logger which will write log messages to stdout, and\n// use same formatting runes as the stdlib log.Logger\nfunc NewDefaultLogger() Logger {\n\treturn &defaultLogger{\n\t\tlogger: log.New(os.Stdout, \"\", log.LstdFlags),\n\t}\n}\n\n// A defaultLogger provides a minimalistic logger satisfying the Logger interface.\ntype defaultLogger struct {\n\tlogger *log.Logger\n}\n\n// Log logs the parameters to the stdlib logger. See log.Println.\nfunc (l defaultLogger) Log(args ...interface{}) {\n\tl.logger.Println(args...)\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/request/connection_reset_error.go",
    "content": "package request\n\nimport (\n\t\"strings\"\n)\n\nfunc isErrConnectionReset(err error) bool {\n\treturn strings.Contains(err.Error(), \"connection reset\")\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/request/handlers.go",
    "content": "package request\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n)\n\n// A Handlers provides a collection of request handlers for various\n// stages of handling requests.\ntype Handlers struct {\n\tValidate         HandlerList\n\tBuild            HandlerList\n\tSign             HandlerList\n\tSend             HandlerList\n\tValidateResponse HandlerList\n\tUnmarshal        HandlerList\n\tUnmarshalStream  HandlerList\n\tUnmarshalMeta    HandlerList\n\tUnmarshalError   HandlerList\n\tRetry            HandlerList\n\tAfterRetry       HandlerList\n\tCompleteAttempt  HandlerList\n\tComplete         HandlerList\n}\n\n// Copy returns of this handler's lists.\nfunc (h *Handlers) Copy() Handlers {\n\treturn Handlers{\n\t\tValidate:         h.Validate.copy(),\n\t\tBuild:            h.Build.copy(),\n\t\tSign:             h.Sign.copy(),\n\t\tSend:             h.Send.copy(),\n\t\tValidateResponse: h.ValidateResponse.copy(),\n\t\tUnmarshal:        h.Unmarshal.copy(),\n\t\tUnmarshalStream:  h.UnmarshalStream.copy(),\n\t\tUnmarshalError:   h.UnmarshalError.copy(),\n\t\tUnmarshalMeta:    h.UnmarshalMeta.copy(),\n\t\tRetry:            h.Retry.copy(),\n\t\tAfterRetry:       h.AfterRetry.copy(),\n\t\tCompleteAttempt:  h.CompleteAttempt.copy(),\n\t\tComplete:         h.Complete.copy(),\n\t}\n}\n\n// Clear removes callback functions for all handlers\nfunc (h *Handlers) Clear() {\n\th.Validate.Clear()\n\th.Build.Clear()\n\th.Send.Clear()\n\th.Sign.Clear()\n\th.Unmarshal.Clear()\n\th.UnmarshalStream.Clear()\n\th.UnmarshalMeta.Clear()\n\th.UnmarshalError.Clear()\n\th.ValidateResponse.Clear()\n\th.Retry.Clear()\n\th.AfterRetry.Clear()\n\th.CompleteAttempt.Clear()\n\th.Complete.Clear()\n}\n\n// A HandlerListRunItem represents an entry in the HandlerList which\n// is being run.\ntype HandlerListRunItem struct {\n\tIndex   int\n\tHandler NamedHandler\n\tRequest *Request\n}\n\n// A HandlerList manages zero or more handlers in a list.\ntype HandlerList struct {\n\tlist []NamedHandler\n\n\t// Called after each request handler in the list is called. If set\n\t// and the func returns true the HandlerList will continue to iterate\n\t// over the request handlers. If false is returned the HandlerList\n\t// will stop iterating.\n\t//\n\t// Should be used if extra logic to be performed between each handler\n\t// in the list. This can be used to terminate a list's iteration\n\t// based on a condition such as error like, HandlerListStopOnError.\n\t// Or for logging like HandlerListLogItem.\n\tAfterEachFn func(item HandlerListRunItem) bool\n}\n\n// A NamedHandler is a struct that contains a name and function callback.\ntype NamedHandler struct {\n\tName string\n\tFn   func(*Request)\n}\n\n// copy creates a copy of the handler list.\nfunc (l *HandlerList) copy() HandlerList {\n\tn := HandlerList{\n\t\tAfterEachFn: l.AfterEachFn,\n\t}\n\tif len(l.list) == 0 {\n\t\treturn n\n\t}\n\n\tn.list = append(make([]NamedHandler, 0, len(l.list)), l.list...)\n\treturn n\n}\n\n// Clear clears the handler list.\nfunc (l *HandlerList) Clear() {\n\tl.list = l.list[0:0]\n}\n\n// Len returns the number of handlers in the list.\nfunc (l *HandlerList) Len() int {\n\treturn len(l.list)\n}\n\n// PushBack pushes handler f to the back of the handler list.\nfunc (l *HandlerList) PushBack(f func(*Request)) {\n\tl.PushBackNamed(NamedHandler{\"__anonymous\", f})\n}\n\n// PushBackNamed pushes named handler f to the back of the handler list.\nfunc (l *HandlerList) PushBackNamed(n NamedHandler) {\n\tif cap(l.list) == 0 {\n\t\tl.list = make([]NamedHandler, 0, 5)\n\t}\n\tl.list = append(l.list, n)\n}\n\n// PushFront pushes handler f to the front of the handler list.\nfunc (l *HandlerList) PushFront(f func(*Request)) {\n\tl.PushFrontNamed(NamedHandler{\"__anonymous\", f})\n}\n\n// PushFrontNamed pushes named handler f to the front of the handler list.\nfunc (l *HandlerList) PushFrontNamed(n NamedHandler) {\n\tif cap(l.list) == len(l.list) {\n\t\t// Allocating new list required\n\t\tl.list = append([]NamedHandler{n}, l.list...)\n\t} else {\n\t\t// Enough room to prepend into list.\n\t\tl.list = append(l.list, NamedHandler{})\n\t\tcopy(l.list[1:], l.list)\n\t\tl.list[0] = n\n\t}\n}\n\n// Remove removes a NamedHandler n\nfunc (l *HandlerList) Remove(n NamedHandler) {\n\tl.RemoveByName(n.Name)\n}\n\n// RemoveByName removes a NamedHandler by name.\nfunc (l *HandlerList) RemoveByName(name string) {\n\tfor i := 0; i < len(l.list); i++ {\n\t\tm := l.list[i]\n\t\tif m.Name == name {\n\t\t\t// Shift array preventing creating new arrays\n\t\t\tcopy(l.list[i:], l.list[i+1:])\n\t\t\tl.list[len(l.list)-1] = NamedHandler{}\n\t\t\tl.list = l.list[:len(l.list)-1]\n\n\t\t\t// decrement list so next check to length is correct\n\t\t\ti--\n\t\t}\n\t}\n}\n\n// SwapNamed will swap out any existing handlers with the same name as the\n// passed in NamedHandler returning true if handlers were swapped. False is\n// returned otherwise.\nfunc (l *HandlerList) SwapNamed(n NamedHandler) (swapped bool) {\n\tfor i := 0; i < len(l.list); i++ {\n\t\tif l.list[i].Name == n.Name {\n\t\t\tl.list[i].Fn = n.Fn\n\t\t\tswapped = true\n\t\t}\n\t}\n\n\treturn swapped\n}\n\n// Swap will swap out all handlers matching the name passed in. The matched\n// handlers will be swapped in. True is returned if the handlers were swapped.\nfunc (l *HandlerList) Swap(name string, replace NamedHandler) bool {\n\tvar swapped bool\n\n\tfor i := 0; i < len(l.list); i++ {\n\t\tif l.list[i].Name == name {\n\t\t\tl.list[i] = replace\n\t\t\tswapped = true\n\t\t}\n\t}\n\n\treturn swapped\n}\n\n// SetBackNamed will replace the named handler if it exists in the handler list.\n// If the handler does not exist the handler will be added to the end of the list.\nfunc (l *HandlerList) SetBackNamed(n NamedHandler) {\n\tif !l.SwapNamed(n) {\n\t\tl.PushBackNamed(n)\n\t}\n}\n\n// SetFrontNamed will replace the named handler if it exists in the handler list.\n// If the handler does not exist the handler will be added to the beginning of\n// the list.\nfunc (l *HandlerList) SetFrontNamed(n NamedHandler) {\n\tif !l.SwapNamed(n) {\n\t\tl.PushFrontNamed(n)\n\t}\n}\n\n// Run executes all handlers in the list with a given request object.\nfunc (l *HandlerList) Run(r *Request) {\n\tfor i, h := range l.list {\n\t\th.Fn(r)\n\t\titem := HandlerListRunItem{\n\t\t\tIndex: i, Handler: h, Request: r,\n\t\t}\n\t\tif l.AfterEachFn != nil && !l.AfterEachFn(item) {\n\t\t\treturn\n\t\t}\n\t}\n}\n\n// HandlerListLogItem logs the request handler and the state of the\n// request's Error value. Always returns true to continue iterating\n// request handlers in a HandlerList.\nfunc HandlerListLogItem(item HandlerListRunItem) bool {\n\tif item.Request.Config.Logger == nil {\n\t\treturn true\n\t}\n\titem.Request.Config.Logger.Log(\"DEBUG: RequestHandler\",\n\t\titem.Index, item.Handler.Name, item.Request.Error)\n\n\treturn true\n}\n\n// HandlerListStopOnError returns false to stop the HandlerList iterating\n// over request handlers if Request.Error is not nil. True otherwise\n// to continue iterating.\nfunc HandlerListStopOnError(item HandlerListRunItem) bool {\n\treturn item.Request.Error == nil\n}\n\n// WithAppendUserAgent will add a string to the user agent prefixed with a\n// single white space.\nfunc WithAppendUserAgent(s string) Option {\n\treturn func(r *Request) {\n\t\tr.Handlers.Build.PushBack(func(r2 *Request) {\n\t\t\tAddToUserAgent(r, s)\n\t\t})\n\t}\n}\n\n// MakeAddToUserAgentHandler will add the name/version pair to the User-Agent request\n// header. If the extra parameters are provided they will be added as metadata to the\n// name/version pair resulting in the following format.\n// \"name/version (extra0; extra1; ...)\"\n// The user agent part will be concatenated with this current request's user agent string.\nfunc MakeAddToUserAgentHandler(name, version string, extra ...string) func(*Request) {\n\tua := fmt.Sprintf(\"%s/%s\", name, version)\n\tif len(extra) > 0 {\n\t\tua += fmt.Sprintf(\" (%s)\", strings.Join(extra, \"; \"))\n\t}\n\treturn func(r *Request) {\n\t\tAddToUserAgent(r, ua)\n\t}\n}\n\n// MakeAddToUserAgentFreeFormHandler adds the input to the User-Agent request header.\n// The input string will be concatenated with the current request's user agent string.\nfunc MakeAddToUserAgentFreeFormHandler(s string) func(*Request) {\n\treturn func(r *Request) {\n\t\tAddToUserAgent(r, s)\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/request/http_request.go",
    "content": "package request\n\nimport (\n\t\"io\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc copyHTTPRequest(r *http.Request, body io.ReadCloser) *http.Request {\n\treq := new(http.Request)\n\t*req = *r\n\treq.URL = &url.URL{}\n\t*req.URL = *r.URL\n\treq.Body = body\n\n\treq.Header = http.Header{}\n\tfor k, v := range r.Header {\n\t\tfor _, vv := range v {\n\t\t\treq.Header.Add(k, vv)\n\t\t}\n\t}\n\n\treturn req\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/request/offset_reader.go",
    "content": "package request\n\nimport (\n\t\"io\"\n\t\"sync\"\n\n\t\"github.com/aws/aws-sdk-go/internal/sdkio\"\n)\n\n// offsetReader is a thread-safe io.ReadCloser to prevent racing\n// with retrying requests\ntype offsetReader struct {\n\tbuf    io.ReadSeeker\n\tlock   sync.Mutex\n\tclosed bool\n}\n\nfunc newOffsetReader(buf io.ReadSeeker, offset int64) *offsetReader {\n\treader := &offsetReader{}\n\tbuf.Seek(offset, sdkio.SeekStart)\n\n\treader.buf = buf\n\treturn reader\n}\n\n// Close will close the instance of the offset reader's access to\n// the underlying io.ReadSeeker.\nfunc (o *offsetReader) Close() error {\n\to.lock.Lock()\n\tdefer o.lock.Unlock()\n\to.closed = true\n\treturn nil\n}\n\n// Read is a thread-safe read of the underlying io.ReadSeeker\nfunc (o *offsetReader) Read(p []byte) (int, error) {\n\to.lock.Lock()\n\tdefer o.lock.Unlock()\n\n\tif o.closed {\n\t\treturn 0, io.EOF\n\t}\n\n\treturn o.buf.Read(p)\n}\n\n// Seek is a thread-safe seeking operation.\nfunc (o *offsetReader) Seek(offset int64, whence int) (int64, error) {\n\to.lock.Lock()\n\tdefer o.lock.Unlock()\n\n\treturn o.buf.Seek(offset, whence)\n}\n\n// CloseAndCopy will return a new offsetReader with a copy of the old buffer\n// and close the old buffer.\nfunc (o *offsetReader) CloseAndCopy(offset int64) *offsetReader {\n\to.Close()\n\treturn newOffsetReader(o.buf, offset)\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/request/request.go",
    "content": "package request\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"reflect\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n\t\"github.com/aws/aws-sdk-go/aws/client/metadata\"\n\t\"github.com/aws/aws-sdk-go/internal/sdkio\"\n)\n\nconst (\n\t// ErrCodeSerialization is the serialization error code that is received\n\t// during protocol unmarshaling.\n\tErrCodeSerialization = \"SerializationError\"\n\n\t// ErrCodeRead is an error that is returned during HTTP reads.\n\tErrCodeRead = \"ReadError\"\n\n\t// ErrCodeResponseTimeout is the connection timeout error that is received\n\t// during body reads.\n\tErrCodeResponseTimeout = \"ResponseTimeout\"\n\n\t// ErrCodeInvalidPresignExpire is returned when the expire time provided to\n\t// presign is invalid\n\tErrCodeInvalidPresignExpire = \"InvalidPresignExpireError\"\n\n\t// CanceledErrorCode is the error code that will be returned by an\n\t// API request that was canceled. Requests given a aws.Context may\n\t// return this error when canceled.\n\tCanceledErrorCode = \"RequestCanceled\"\n)\n\n// A Request is the service request to be made.\ntype Request struct {\n\tConfig     aws.Config\n\tClientInfo metadata.ClientInfo\n\tHandlers   Handlers\n\n\tRetryer\n\tAttemptTime            time.Time\n\tTime                   time.Time\n\tOperation              *Operation\n\tHTTPRequest            *http.Request\n\tHTTPResponse           *http.Response\n\tBody                   io.ReadSeeker\n\tBodyStart              int64 // offset from beginning of Body that the request body starts\n\tParams                 interface{}\n\tError                  error\n\tData                   interface{}\n\tRequestID              string\n\tRetryCount             int\n\tRetryable              *bool\n\tRetryDelay             time.Duration\n\tNotHoist               bool\n\tSignedHeaderVals       http.Header\n\tLastSignedAt           time.Time\n\tDisableFollowRedirects bool\n\n\t// A value greater than 0 instructs the request to be signed as Presigned URL\n\t// You should not set this field directly. Instead use Request's\n\t// Presign or PresignRequest methods.\n\tExpireTime time.Duration\n\n\tcontext aws.Context\n\n\tbuilt bool\n\n\t// Need to persist an intermediate body between the input Body and HTTP\n\t// request body because the HTTP Client's transport can maintain a reference\n\t// to the HTTP request's body after the client has returned. This value is\n\t// safe to use concurrently and wrap the input Body for each HTTP request.\n\tsafeBody *offsetReader\n}\n\n// An Operation is the service API operation to be made.\ntype Operation struct {\n\tName       string\n\tHTTPMethod string\n\tHTTPPath   string\n\t*Paginator\n\n\tBeforePresignFn func(r *Request) error\n}\n\n// New returns a new Request pointer for the service API\n// operation and parameters.\n//\n// Params is any value of input parameters to be the request payload.\n// Data is pointer value to an object which the request's response\n// payload will be deserialized to.\nfunc New(cfg aws.Config, clientInfo metadata.ClientInfo, handlers Handlers,\n\tretryer Retryer, operation *Operation, params interface{}, data interface{}) *Request {\n\n\tmethod := operation.HTTPMethod\n\tif method == \"\" {\n\t\tmethod = \"POST\"\n\t}\n\n\thttpReq, _ := http.NewRequest(method, \"\", nil)\n\n\tvar err error\n\thttpReq.URL, err = url.Parse(clientInfo.Endpoint + operation.HTTPPath)\n\tif err != nil {\n\t\thttpReq.URL = &url.URL{}\n\t\terr = awserr.New(\"InvalidEndpointURL\", \"invalid endpoint uri\", err)\n\t}\n\n\tSanitizeHostForHeader(httpReq)\n\n\tr := &Request{\n\t\tConfig:     cfg,\n\t\tClientInfo: clientInfo,\n\t\tHandlers:   handlers.Copy(),\n\n\t\tRetryer:     retryer,\n\t\tTime:        time.Now(),\n\t\tExpireTime:  0,\n\t\tOperation:   operation,\n\t\tHTTPRequest: httpReq,\n\t\tBody:        nil,\n\t\tParams:      params,\n\t\tError:       err,\n\t\tData:        data,\n\t}\n\tr.SetBufferBody([]byte{})\n\n\treturn r\n}\n\n// A Option is a functional option that can augment or modify a request when\n// using a WithContext API operation method.\ntype Option func(*Request)\n\n// WithGetResponseHeader builds a request Option which will retrieve a single\n// header value from the HTTP Response. If there are multiple values for the\n// header key use WithGetResponseHeaders instead to access the http.Header\n// map directly. The passed in val pointer must be non-nil.\n//\n// This Option can be used multiple times with a single API operation.\n//\n//    var id2, versionID string\n//    svc.PutObjectWithContext(ctx, params,\n//        request.WithGetResponseHeader(\"x-amz-id-2\", &id2),\n//        request.WithGetResponseHeader(\"x-amz-version-id\", &versionID),\n//    )\nfunc WithGetResponseHeader(key string, val *string) Option {\n\treturn func(r *Request) {\n\t\tr.Handlers.Complete.PushBack(func(req *Request) {\n\t\t\t*val = req.HTTPResponse.Header.Get(key)\n\t\t})\n\t}\n}\n\n// WithGetResponseHeaders builds a request Option which will retrieve the\n// headers from the HTTP response and assign them to the passed in headers\n// variable. The passed in headers pointer must be non-nil.\n//\n//    var headers http.Header\n//    svc.PutObjectWithContext(ctx, params, request.WithGetResponseHeaders(&headers))\nfunc WithGetResponseHeaders(headers *http.Header) Option {\n\treturn func(r *Request) {\n\t\tr.Handlers.Complete.PushBack(func(req *Request) {\n\t\t\t*headers = req.HTTPResponse.Header\n\t\t})\n\t}\n}\n\n// WithLogLevel is a request option that will set the request to use a specific\n// log level when the request is made.\n//\n//     svc.PutObjectWithContext(ctx, params, request.WithLogLevel(aws.LogDebugWithHTTPBody)\nfunc WithLogLevel(l aws.LogLevelType) Option {\n\treturn func(r *Request) {\n\t\tr.Config.LogLevel = aws.LogLevel(l)\n\t}\n}\n\n// ApplyOptions will apply each option to the request calling them in the order\n// the were provided.\nfunc (r *Request) ApplyOptions(opts ...Option) {\n\tfor _, opt := range opts {\n\t\topt(r)\n\t}\n}\n\n// Context will always returns a non-nil context. If Request does not have a\n// context aws.BackgroundContext will be returned.\nfunc (r *Request) Context() aws.Context {\n\tif r.context != nil {\n\t\treturn r.context\n\t}\n\treturn aws.BackgroundContext()\n}\n\n// SetContext adds a Context to the current request that can be used to cancel\n// a in-flight request. The Context value must not be nil, or this method will\n// panic.\n//\n// Unlike http.Request.WithContext, SetContext does not return a copy of the\n// Request. It is not safe to use use a single Request value for multiple\n// requests. A new Request should be created for each API operation request.\n//\n// Go 1.6 and below:\n// The http.Request's Cancel field will be set to the Done() value of\n// the context. This will overwrite the Cancel field's value.\n//\n// Go 1.7 and above:\n// The http.Request.WithContext will be used to set the context on the underlying\n// http.Request. This will create a shallow copy of the http.Request. The SDK\n// may create sub contexts in the future for nested requests such as retries.\nfunc (r *Request) SetContext(ctx aws.Context) {\n\tif ctx == nil {\n\t\tpanic(\"context cannot be nil\")\n\t}\n\tsetRequestContext(r, ctx)\n}\n\n// WillRetry returns if the request's can be retried.\nfunc (r *Request) WillRetry() bool {\n\tif !aws.IsReaderSeekable(r.Body) && r.HTTPRequest.Body != NoBody {\n\t\treturn false\n\t}\n\treturn r.Error != nil && aws.BoolValue(r.Retryable) && r.RetryCount < r.MaxRetries()\n}\n\n// ParamsFilled returns if the request's parameters have been populated\n// and the parameters are valid. False is returned if no parameters are\n// provided or invalid.\nfunc (r *Request) ParamsFilled() bool {\n\treturn r.Params != nil && reflect.ValueOf(r.Params).Elem().IsValid()\n}\n\n// DataFilled returns true if the request's data for response deserialization\n// target has been set and is a valid. False is returned if data is not\n// set, or is invalid.\nfunc (r *Request) DataFilled() bool {\n\treturn r.Data != nil && reflect.ValueOf(r.Data).Elem().IsValid()\n}\n\n// SetBufferBody will set the request's body bytes that will be sent to\n// the service API.\nfunc (r *Request) SetBufferBody(buf []byte) {\n\tr.SetReaderBody(bytes.NewReader(buf))\n}\n\n// SetStringBody sets the body of the request to be backed by a string.\nfunc (r *Request) SetStringBody(s string) {\n\tr.SetReaderBody(strings.NewReader(s))\n}\n\n// SetReaderBody will set the request's body reader.\nfunc (r *Request) SetReaderBody(reader io.ReadSeeker) {\n\tr.Body = reader\n\tr.BodyStart, _ = reader.Seek(0, sdkio.SeekCurrent) // Get the Bodies current offset.\n\tr.ResetBody()\n}\n\n// Presign returns the request's signed URL. Error will be returned\n// if the signing fails. The expire parameter is only used for presigned Amazon\n// S3 API requests. All other AWS services will use a fixed expiration\n// time of 15 minutes.\n//\n// It is invalid to create a presigned URL with a expire duration 0 or less. An\n// error is returned if expire duration is 0 or less.\nfunc (r *Request) Presign(expire time.Duration) (string, error) {\n\tr = r.copy()\n\n\t// Presign requires all headers be hoisted. There is no way to retrieve\n\t// the signed headers not hoisted without this. Making the presigned URL\n\t// useless.\n\tr.NotHoist = false\n\n\tu, _, err := getPresignedURL(r, expire)\n\treturn u, err\n}\n\n// PresignRequest behaves just like presign, with the addition of returning a\n// set of headers that were signed. The expire parameter is only used for\n// presigned Amazon S3 API requests. All other AWS services will use a fixed\n// expiration time of 15 minutes.\n//\n// It is invalid to create a presigned URL with a expire duration 0 or less. An\n// error is returned if expire duration is 0 or less.\n//\n// Returns the URL string for the API operation with signature in the query string,\n// and the HTTP headers that were included in the signature. These headers must\n// be included in any HTTP request made with the presigned URL.\n//\n// To prevent hoisting any headers to the query string set NotHoist to true on\n// this Request value prior to calling PresignRequest.\nfunc (r *Request) PresignRequest(expire time.Duration) (string, http.Header, error) {\n\tr = r.copy()\n\treturn getPresignedURL(r, expire)\n}\n\n// IsPresigned returns true if the request represents a presigned API url.\nfunc (r *Request) IsPresigned() bool {\n\treturn r.ExpireTime != 0\n}\n\nfunc getPresignedURL(r *Request, expire time.Duration) (string, http.Header, error) {\n\tif expire <= 0 {\n\t\treturn \"\", nil, awserr.New(\n\t\t\tErrCodeInvalidPresignExpire,\n\t\t\t\"presigned URL requires an expire duration greater than 0\",\n\t\t\tnil,\n\t\t)\n\t}\n\n\tr.ExpireTime = expire\n\n\tif r.Operation.BeforePresignFn != nil {\n\t\tif err := r.Operation.BeforePresignFn(r); err != nil {\n\t\t\treturn \"\", nil, err\n\t\t}\n\t}\n\n\tif err := r.Sign(); err != nil {\n\t\treturn \"\", nil, err\n\t}\n\n\treturn r.HTTPRequest.URL.String(), r.SignedHeaderVals, nil\n}\n\nfunc debugLogReqError(r *Request, stage string, retrying bool, err error) {\n\tif !r.Config.LogLevel.Matches(aws.LogDebugWithRequestErrors) {\n\t\treturn\n\t}\n\n\tretryStr := \"not retrying\"\n\tif retrying {\n\t\tretryStr = \"will retry\"\n\t}\n\n\tr.Config.Logger.Log(fmt.Sprintf(\"DEBUG: %s %s/%s failed, %s, error %v\",\n\t\tstage, r.ClientInfo.ServiceName, r.Operation.Name, retryStr, err))\n}\n\n// Build will build the request's object so it can be signed and sent\n// to the service. Build will also validate all the request's parameters.\n// Any additional build Handlers set on this request will be run\n// in the order they were set.\n//\n// The request will only be built once. Multiple calls to build will have\n// no effect.\n//\n// If any Validate or Build errors occur the build will stop and the error\n// which occurred will be returned.\nfunc (r *Request) Build() error {\n\tif !r.built {\n\t\tr.Handlers.Validate.Run(r)\n\t\tif r.Error != nil {\n\t\t\tdebugLogReqError(r, \"Validate Request\", false, r.Error)\n\t\t\treturn r.Error\n\t\t}\n\t\tr.Handlers.Build.Run(r)\n\t\tif r.Error != nil {\n\t\t\tdebugLogReqError(r, \"Build Request\", false, r.Error)\n\t\t\treturn r.Error\n\t\t}\n\t\tr.built = true\n\t}\n\n\treturn r.Error\n}\n\n// Sign will sign the request, returning error if errors are encountered.\n//\n// Sign will build the request prior to signing. All Sign Handlers will\n// be executed in the order they were set.\nfunc (r *Request) Sign() error {\n\tr.Build()\n\tif r.Error != nil {\n\t\tdebugLogReqError(r, \"Build Request\", false, r.Error)\n\t\treturn r.Error\n\t}\n\n\tr.Handlers.Sign.Run(r)\n\treturn r.Error\n}\n\nfunc (r *Request) getNextRequestBody() (io.ReadCloser, error) {\n\tif r.safeBody != nil {\n\t\tr.safeBody.Close()\n\t}\n\n\tr.safeBody = newOffsetReader(r.Body, r.BodyStart)\n\n\t// Go 1.8 tightened and clarified the rules code needs to use when building\n\t// requests with the http package. Go 1.8 removed the automatic detection\n\t// of if the Request.Body was empty, or actually had bytes in it. The SDK\n\t// always sets the Request.Body even if it is empty and should not actually\n\t// be sent. This is incorrect.\n\t//\n\t// Go 1.8 did add a http.NoBody value that the SDK can use to tell the http\n\t// client that the request really should be sent without a body. The\n\t// Request.Body cannot be set to nil, which is preferable, because the\n\t// field is exported and could introduce nil pointer dereferences for users\n\t// of the SDK if they used that field.\n\t//\n\t// Related golang/go#18257\n\tl, err := aws.SeekerLen(r.Body)\n\tif err != nil {\n\t\treturn nil, awserr.New(ErrCodeSerialization, \"failed to compute request body size\", err)\n\t}\n\n\tvar body io.ReadCloser\n\tif l == 0 {\n\t\tbody = NoBody\n\t} else if l > 0 {\n\t\tbody = r.safeBody\n\t} else {\n\t\t// Hack to prevent sending bodies for methods where the body\n\t\t// should be ignored by the server. Sending bodies on these\n\t\t// methods without an associated ContentLength will cause the\n\t\t// request to socket timeout because the server does not handle\n\t\t// Transfer-Encoding: chunked bodies for these methods.\n\t\t//\n\t\t// This would only happen if a aws.ReaderSeekerCloser was used with\n\t\t// a io.Reader that was not also an io.Seeker, or did not implement\n\t\t// Len() method.\n\t\tswitch r.Operation.HTTPMethod {\n\t\tcase \"GET\", \"HEAD\", \"DELETE\":\n\t\t\tbody = NoBody\n\t\tdefault:\n\t\t\tbody = r.safeBody\n\t\t}\n\t}\n\n\treturn body, nil\n}\n\n// GetBody will return an io.ReadSeeker of the Request's underlying\n// input body with a concurrency safe wrapper.\nfunc (r *Request) GetBody() io.ReadSeeker {\n\treturn r.safeBody\n}\n\n// Send will send the request, returning error if errors are encountered.\n//\n// Send will sign the request prior to sending. All Send Handlers will\n// be executed in the order they were set.\n//\n// Canceling a request is non-deterministic. If a request has been canceled,\n// then the transport will choose, randomly, one of the state channels during\n// reads or getting the connection.\n//\n// readLoop() and getConn(req *Request, cm connectMethod)\n// https://github.com/golang/go/blob/master/src/net/http/transport.go\n//\n// Send will not close the request.Request's body.\nfunc (r *Request) Send() error {\n\tdefer func() {\n\t\t// Regardless of success or failure of the request trigger the Complete\n\t\t// request handlers.\n\t\tr.Handlers.Complete.Run(r)\n\t}()\n\n\tif err := r.Error; err != nil {\n\t\treturn err\n\t}\n\n\tfor {\n\t\tr.Error = nil\n\t\tr.AttemptTime = time.Now()\n\n\t\tif err := r.Sign(); err != nil {\n\t\t\tdebugLogReqError(r, \"Sign Request\", false, err)\n\t\t\treturn err\n\t\t}\n\n\t\tif err := r.sendRequest(); err == nil {\n\t\t\treturn nil\n\t\t} else if !shouldRetryCancel(r.Error) {\n\t\t\treturn err\n\t\t} else {\n\t\t\tr.Handlers.Retry.Run(r)\n\t\t\tr.Handlers.AfterRetry.Run(r)\n\n\t\t\tif r.Error != nil || !aws.BoolValue(r.Retryable) {\n\t\t\t\treturn r.Error\n\t\t\t}\n\n\t\t\tr.prepareRetry()\n\t\t\tcontinue\n\t\t}\n\t}\n}\n\nfunc (r *Request) prepareRetry() {\n\tif r.Config.LogLevel.Matches(aws.LogDebugWithRequestRetries) {\n\t\tr.Config.Logger.Log(fmt.Sprintf(\"DEBUG: Retrying Request %s/%s, attempt %d\",\n\t\t\tr.ClientInfo.ServiceName, r.Operation.Name, r.RetryCount))\n\t}\n\n\t// The previous http.Request will have a reference to the r.Body\n\t// and the HTTP Client's Transport may still be reading from\n\t// the request's body even though the Client's Do returned.\n\tr.HTTPRequest = copyHTTPRequest(r.HTTPRequest, nil)\n\tr.ResetBody()\n\n\t// Closing response body to ensure that no response body is leaked\n\t// between retry attempts.\n\tif r.HTTPResponse != nil && r.HTTPResponse.Body != nil {\n\t\tr.HTTPResponse.Body.Close()\n\t}\n}\n\nfunc (r *Request) sendRequest() (sendErr error) {\n\tdefer r.Handlers.CompleteAttempt.Run(r)\n\n\tr.Retryable = nil\n\tr.Handlers.Send.Run(r)\n\tif r.Error != nil {\n\t\tdebugLogReqError(r, \"Send Request\", r.WillRetry(), r.Error)\n\t\treturn r.Error\n\t}\n\n\tr.Handlers.UnmarshalMeta.Run(r)\n\tr.Handlers.ValidateResponse.Run(r)\n\tif r.Error != nil {\n\t\tr.Handlers.UnmarshalError.Run(r)\n\t\tdebugLogReqError(r, \"Validate Response\", r.WillRetry(), r.Error)\n\t\treturn r.Error\n\t}\n\n\tr.Handlers.Unmarshal.Run(r)\n\tif r.Error != nil {\n\t\tdebugLogReqError(r, \"Unmarshal Response\", r.WillRetry(), r.Error)\n\t\treturn r.Error\n\t}\n\n\treturn nil\n}\n\n// copy will copy a request which will allow for local manipulation of the\n// request.\nfunc (r *Request) copy() *Request {\n\treq := &Request{}\n\t*req = *r\n\treq.Handlers = r.Handlers.Copy()\n\top := *r.Operation\n\treq.Operation = &op\n\treturn req\n}\n\n// AddToUserAgent adds the string to the end of the request's current user agent.\nfunc AddToUserAgent(r *Request, s string) {\n\tcurUA := r.HTTPRequest.Header.Get(\"User-Agent\")\n\tif len(curUA) > 0 {\n\t\ts = curUA + \" \" + s\n\t}\n\tr.HTTPRequest.Header.Set(\"User-Agent\", s)\n}\n\ntype temporary interface {\n\tTemporary() bool\n}\n\nfunc shouldRetryCancel(err error) bool {\n\tswitch err := err.(type) {\n\tcase awserr.Error:\n\t\tif err.Code() == CanceledErrorCode {\n\t\t\treturn false\n\t\t}\n\t\treturn shouldRetryCancel(err.OrigErr())\n\tcase *url.Error:\n\t\tif strings.Contains(err.Error(), \"connection refused\") {\n\t\t\t// Refused connections should be retried as the service may not yet\n\t\t\t// be running on the port. Go TCP dial considers refused\n\t\t\t// connections as not temporary.\n\t\t\treturn true\n\t\t}\n\t\t// *url.Error only implements Temporary after golang 1.6 but since\n\t\t// url.Error only wraps the error:\n\t\treturn shouldRetryCancel(err.Err)\n\tcase temporary:\n\t\t// If the error is temporary, we want to allow continuation of the\n\t\t// retry process\n\t\treturn err.Temporary()\n\tcase nil:\n\t\t// `awserr.Error.OrigErr()` can be nil, meaning there was an error but\n\t\t// because we don't know the cause, it is marked as retryable. See\n\t\t// TestRequest4xxUnretryable for an example.\n\t\treturn true\n\tdefault:\n\t\tswitch err.Error() {\n\t\tcase \"net/http: request canceled\",\n\t\t\t\"net/http: request canceled while waiting for connection\":\n\t\t\t// known 1.5 error case when an http request is cancelled\n\t\t\treturn false\n\t\t}\n\t\t// here we don't know the error; so we allow a retry.\n\t\treturn true\n\t}\n}\n\n// SanitizeHostForHeader removes default port from host and updates request.Host\nfunc SanitizeHostForHeader(r *http.Request) {\n\thost := getHost(r)\n\tport := portOnly(host)\n\tif port != \"\" && isDefaultPort(r.URL.Scheme, port) {\n\t\tr.Host = stripPort(host)\n\t}\n}\n\n// Returns host from request\nfunc getHost(r *http.Request) string {\n\tif r.Host != \"\" {\n\t\treturn r.Host\n\t}\n\n\treturn r.URL.Host\n}\n\n// Hostname returns u.Host, without any port number.\n//\n// If Host is an IPv6 literal with a port number, Hostname returns the\n// IPv6 literal without the square brackets. IPv6 literals may include\n// a zone identifier.\n//\n// Copied from the Go 1.8 standard library (net/url)\nfunc stripPort(hostport string) string {\n\tcolon := strings.IndexByte(hostport, ':')\n\tif colon == -1 {\n\t\treturn hostport\n\t}\n\tif i := strings.IndexByte(hostport, ']'); i != -1 {\n\t\treturn strings.TrimPrefix(hostport[:i], \"[\")\n\t}\n\treturn hostport[:colon]\n}\n\n// Port returns the port part of u.Host, without the leading colon.\n// If u.Host doesn't contain a port, Port returns an empty string.\n//\n// Copied from the Go 1.8 standard library (net/url)\nfunc portOnly(hostport string) string {\n\tcolon := strings.IndexByte(hostport, ':')\n\tif colon == -1 {\n\t\treturn \"\"\n\t}\n\tif i := strings.Index(hostport, \"]:\"); i != -1 {\n\t\treturn hostport[i+len(\"]:\"):]\n\t}\n\tif strings.Contains(hostport, \"]\") {\n\t\treturn \"\"\n\t}\n\treturn hostport[colon+len(\":\"):]\n}\n\n// Returns true if the specified URI is using the standard port\n// (i.e. port 80 for HTTP URIs or 443 for HTTPS URIs)\nfunc isDefaultPort(scheme, port string) bool {\n\tif port == \"\" {\n\t\treturn true\n\t}\n\n\tlowerCaseScheme := strings.ToLower(scheme)\n\tif (lowerCaseScheme == \"http\" && port == \"80\") || (lowerCaseScheme == \"https\" && port == \"443\") {\n\t\treturn true\n\t}\n\n\treturn false\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/request/request_1_7.go",
    "content": "// +build !go1.8\n\npackage request\n\nimport \"io\"\n\n// NoBody is an io.ReadCloser with no bytes. Read always returns EOF\n// and Close always returns nil. It can be used in an outgoing client\n// request to explicitly signal that a request has zero bytes.\n// An alternative, however, is to simply set Request.Body to nil.\n//\n// Copy of Go 1.8 NoBody type from net/http/http.go\ntype noBody struct{}\n\nfunc (noBody) Read([]byte) (int, error)         { return 0, io.EOF }\nfunc (noBody) Close() error                     { return nil }\nfunc (noBody) WriteTo(io.Writer) (int64, error) { return 0, nil }\n\n// NoBody is an empty reader that will trigger the Go HTTP client to not include\n// and body in the HTTP request.\nvar NoBody = noBody{}\n\n// ResetBody rewinds the request body back to its starting position, and\n// sets the HTTP Request body reference. When the body is read prior\n// to being sent in the HTTP request it will need to be rewound.\n//\n// ResetBody will automatically be called by the SDK's build handler, but if\n// the request is being used directly ResetBody must be called before the request\n// is Sent.  SetStringBody, SetBufferBody, and SetReaderBody will automatically\n// call ResetBody.\nfunc (r *Request) ResetBody() {\n\tbody, err := r.getNextRequestBody()\n\tif err != nil {\n\t\tr.Error = err\n\t\treturn\n\t}\n\n\tr.HTTPRequest.Body = body\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/request/request_1_8.go",
    "content": "// +build go1.8\n\npackage request\n\nimport (\n\t\"net/http\"\n)\n\n// NoBody is a http.NoBody reader instructing Go HTTP client to not include\n// and body in the HTTP request.\nvar NoBody = http.NoBody\n\n// ResetBody rewinds the request body back to its starting position, and\n// sets the HTTP Request body reference. When the body is read prior\n// to being sent in the HTTP request it will need to be rewound.\n//\n// ResetBody will automatically be called by the SDK's build handler, but if\n// the request is being used directly ResetBody must be called before the request\n// is Sent.  SetStringBody, SetBufferBody, and SetReaderBody will automatically\n// call ResetBody.\n//\n// Will also set the Go 1.8's http.Request.GetBody member to allow retrying\n// PUT/POST redirects.\nfunc (r *Request) ResetBody() {\n\tbody, err := r.getNextRequestBody()\n\tif err != nil {\n\t\tr.Error = err\n\t\treturn\n\t}\n\n\tr.HTTPRequest.Body = body\n\tr.HTTPRequest.GetBody = r.getNextRequestBody\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/request/request_context.go",
    "content": "// +build go1.7\n\npackage request\n\nimport \"github.com/aws/aws-sdk-go/aws\"\n\n// setContext updates the Request to use the passed in context for cancellation.\n// Context will also be used for request retry delay.\n//\n// Creates shallow copy of the http.Request with the WithContext method.\nfunc setRequestContext(r *Request, ctx aws.Context) {\n\tr.context = ctx\n\tr.HTTPRequest = r.HTTPRequest.WithContext(ctx)\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/request/request_context_1_6.go",
    "content": "// +build !go1.7\n\npackage request\n\nimport \"github.com/aws/aws-sdk-go/aws\"\n\n// setContext updates the Request to use the passed in context for cancellation.\n// Context will also be used for request retry delay.\n//\n// Creates shallow copy of the http.Request with the WithContext method.\nfunc setRequestContext(r *Request, ctx aws.Context) {\n\tr.context = ctx\n\tr.HTTPRequest.Cancel = ctx.Done()\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/request/request_pagination.go",
    "content": "package request\n\nimport (\n\t\"reflect\"\n\t\"sync/atomic\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-go/aws/awsutil\"\n)\n\n// A Pagination provides paginating of SDK API operations which are paginatable.\n// Generally you should not use this type directly, but use the \"Pages\" API\n// operations method to automatically perform pagination for you. Such as,\n// \"S3.ListObjectsPages\", and \"S3.ListObjectsPagesWithContext\" methods.\n//\n// Pagination differs from a Paginator type in that pagination is the type that\n// does the pagination between API operations, and Paginator defines the\n// configuration that will be used per page request.\n//\n//     cont := true\n//     for p.Next() && cont {\n//         data := p.Page().(*s3.ListObjectsOutput)\n//         // process the page's data\n//     }\n//     return p.Err()\n//\n// See service client API operation Pages methods for examples how the SDK will\n// use the Pagination type.\ntype Pagination struct {\n\t// Function to return a Request value for each pagination request.\n\t// Any configuration or handlers that need to be applied to the request\n\t// prior to getting the next page should be done here before the request\n\t// returned.\n\t//\n\t// NewRequest should always be built from the same API operations. It is\n\t// undefined if different API operations are returned on subsequent calls.\n\tNewRequest func() (*Request, error)\n\t// EndPageOnSameToken, when enabled, will allow the paginator to stop on\n\t// token that are the same as its previous tokens.\n\tEndPageOnSameToken bool\n\n\tstarted    bool\n\tprevTokens []interface{}\n\tnextTokens []interface{}\n\n\terr     error\n\tcurPage interface{}\n}\n\n// HasNextPage will return true if Pagination is able to determine that the API\n// operation has additional pages. False will be returned if there are no more\n// pages remaining.\n//\n// Will always return true if Next has not been called yet.\nfunc (p *Pagination) HasNextPage() bool {\n\tif !p.started {\n\t\treturn true\n\t}\n\n\thasNextPage := len(p.nextTokens) != 0\n\tif p.EndPageOnSameToken {\n\t\treturn hasNextPage && !awsutil.DeepEqual(p.nextTokens, p.prevTokens)\n\t}\n\treturn hasNextPage\n}\n\n// Err returns the error Pagination encountered when retrieving the next page.\nfunc (p *Pagination) Err() error {\n\treturn p.err\n}\n\n// Page returns the current page. Page should only be called after a successful\n// call to Next. It is undefined what Page will return if Page is called after\n// Next returns false.\nfunc (p *Pagination) Page() interface{} {\n\treturn p.curPage\n}\n\n// Next will attempt to retrieve the next page for the API operation. When a page\n// is retrieved true will be returned. If the page cannot be retrieved, or there\n// are no more pages false will be returned.\n//\n// Use the Page method to retrieve the current page data. The data will need\n// to be cast to the API operation's output type.\n//\n// Use the Err method to determine if an error occurred if Page returns false.\nfunc (p *Pagination) Next() bool {\n\tif !p.HasNextPage() {\n\t\treturn false\n\t}\n\n\treq, err := p.NewRequest()\n\tif err != nil {\n\t\tp.err = err\n\t\treturn false\n\t}\n\n\tif p.started {\n\t\tfor i, intok := range req.Operation.InputTokens {\n\t\t\tawsutil.SetValueAtPath(req.Params, intok, p.nextTokens[i])\n\t\t}\n\t}\n\tp.started = true\n\n\terr = req.Send()\n\tif err != nil {\n\t\tp.err = err\n\t\treturn false\n\t}\n\n\tp.prevTokens = p.nextTokens\n\tp.nextTokens = req.nextPageTokens()\n\tp.curPage = req.Data\n\n\treturn true\n}\n\n// A Paginator is the configuration data that defines how an API operation\n// should be paginated. This type is used by the API service models to define\n// the generated pagination config for service APIs.\n//\n// The Pagination type is what provides iterating between pages of an API. It\n// is only used to store the token metadata the SDK should use for performing\n// pagination.\ntype Paginator struct {\n\tInputTokens     []string\n\tOutputTokens    []string\n\tLimitToken      string\n\tTruncationToken string\n}\n\n// nextPageTokens returns the tokens to use when asking for the next page of data.\nfunc (r *Request) nextPageTokens() []interface{} {\n\tif r.Operation.Paginator == nil {\n\t\treturn nil\n\t}\n\tif r.Operation.TruncationToken != \"\" {\n\t\ttr, _ := awsutil.ValuesAtPath(r.Data, r.Operation.TruncationToken)\n\t\tif len(tr) == 0 {\n\t\t\treturn nil\n\t\t}\n\n\t\tswitch v := tr[0].(type) {\n\t\tcase *bool:\n\t\t\tif !aws.BoolValue(v) {\n\t\t\t\treturn nil\n\t\t\t}\n\t\tcase bool:\n\t\t\tif v == false {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t}\n\t}\n\n\ttokens := []interface{}{}\n\ttokenAdded := false\n\tfor _, outToken := range r.Operation.OutputTokens {\n\t\tvs, _ := awsutil.ValuesAtPath(r.Data, outToken)\n\t\tif len(vs) == 0 {\n\t\t\ttokens = append(tokens, nil)\n\t\t\tcontinue\n\t\t}\n\t\tv := vs[0]\n\n\t\tswitch tv := v.(type) {\n\t\tcase *string:\n\t\t\tif len(aws.StringValue(tv)) == 0 {\n\t\t\t\ttokens = append(tokens, nil)\n\t\t\t\tcontinue\n\t\t\t}\n\t\tcase string:\n\t\t\tif len(tv) == 0 {\n\t\t\t\ttokens = append(tokens, nil)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\ttokenAdded = true\n\t\ttokens = append(tokens, v)\n\t}\n\tif !tokenAdded {\n\t\treturn nil\n\t}\n\n\treturn tokens\n}\n\n// Ensure a deprecated item is only logged once instead of each time its used.\nfunc logDeprecatedf(logger aws.Logger, flag *int32, msg string) {\n\tif logger == nil {\n\t\treturn\n\t}\n\tif atomic.CompareAndSwapInt32(flag, 0, 1) {\n\t\tlogger.Log(msg)\n\t}\n}\n\nvar (\n\tlogDeprecatedHasNextPage int32\n\tlogDeprecatedNextPage    int32\n\tlogDeprecatedEachPage    int32\n)\n\n// HasNextPage returns true if this request has more pages of data available.\n//\n// Deprecated Use Pagination type for configurable pagination of API operations\nfunc (r *Request) HasNextPage() bool {\n\tlogDeprecatedf(r.Config.Logger, &logDeprecatedHasNextPage,\n\t\t\"Request.HasNextPage deprecated. Use Pagination type for configurable pagination of API operations\")\n\n\treturn len(r.nextPageTokens()) > 0\n}\n\n// NextPage returns a new Request that can be executed to return the next\n// page of result data. Call .Send() on this request to execute it.\n//\n// Deprecated Use Pagination type for configurable pagination of API operations\nfunc (r *Request) NextPage() *Request {\n\tlogDeprecatedf(r.Config.Logger, &logDeprecatedNextPage,\n\t\t\"Request.NextPage deprecated. Use Pagination type for configurable pagination of API operations\")\n\n\ttokens := r.nextPageTokens()\n\tif len(tokens) == 0 {\n\t\treturn nil\n\t}\n\n\tdata := reflect.New(reflect.TypeOf(r.Data).Elem()).Interface()\n\tnr := New(r.Config, r.ClientInfo, r.Handlers, r.Retryer, r.Operation, awsutil.CopyOf(r.Params), data)\n\tfor i, intok := range nr.Operation.InputTokens {\n\t\tawsutil.SetValueAtPath(nr.Params, intok, tokens[i])\n\t}\n\treturn nr\n}\n\n// EachPage iterates over each page of a paginated request object. The fn\n// parameter should be a function with the following sample signature:\n//\n//   func(page *T, lastPage bool) bool {\n//       return true // return false to stop iterating\n//   }\n//\n// Where \"T\" is the structure type matching the output structure of the given\n// operation. For example, a request object generated by\n// DynamoDB.ListTablesRequest() would expect to see dynamodb.ListTablesOutput\n// as the structure \"T\". The lastPage value represents whether the page is\n// the last page of data or not. The return value of this function should\n// return true to keep iterating or false to stop.\n//\n// Deprecated Use Pagination type for configurable pagination of API operations\nfunc (r *Request) EachPage(fn func(data interface{}, isLastPage bool) (shouldContinue bool)) error {\n\tlogDeprecatedf(r.Config.Logger, &logDeprecatedEachPage,\n\t\t\"Request.EachPage deprecated. Use Pagination type for configurable pagination of API operations\")\n\n\tfor page := r; page != nil; page = page.NextPage() {\n\t\tif err := page.Send(); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif getNextPage := fn(page.Data, !page.HasNextPage()); !getNextPage {\n\t\t\treturn page.Error\n\t\t}\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/request/retryer.go",
    "content": "package request\n\nimport (\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n)\n\n// Retryer is an interface to control retry logic for a given service.\n// The default implementation used by most services is the client.DefaultRetryer\n// structure, which contains basic retry logic using exponential backoff.\ntype Retryer interface {\n\tRetryRules(*Request) time.Duration\n\tShouldRetry(*Request) bool\n\tMaxRetries() int\n}\n\n// WithRetryer sets a config Retryer value to the given Config returning it\n// for chaining.\nfunc WithRetryer(cfg *aws.Config, retryer Retryer) *aws.Config {\n\tcfg.Retryer = retryer\n\treturn cfg\n}\n\n// retryableCodes is a collection of service response codes which are retry-able\n// without any further action.\nvar retryableCodes = map[string]struct{}{\n\t\"RequestError\":            {},\n\t\"RequestTimeout\":          {},\n\tErrCodeResponseTimeout:    {},\n\t\"RequestTimeoutException\": {}, // Glacier's flavor of RequestTimeout\n}\n\nvar throttleCodes = map[string]struct{}{\n\t\"ProvisionedThroughputExceededException\": {},\n\t\"Throttling\":                             {},\n\t\"ThrottlingException\":                    {},\n\t\"RequestLimitExceeded\":                   {},\n\t\"RequestThrottled\":                       {},\n\t\"RequestThrottledException\":              {},\n\t\"TooManyRequestsException\":               {}, // Lambda functions\n\t\"PriorRequestNotComplete\":                {}, // Route53\n\t\"TransactionInProgressException\":         {},\n}\n\n// credsExpiredCodes is a collection of error codes which signify the credentials\n// need to be refreshed. Expired tokens require refreshing of credentials, and\n// resigning before the request can be retried.\nvar credsExpiredCodes = map[string]struct{}{\n\t\"ExpiredToken\":          {},\n\t\"ExpiredTokenException\": {},\n\t\"RequestExpired\":        {}, // EC2 Only\n}\n\nfunc isCodeThrottle(code string) bool {\n\t_, ok := throttleCodes[code]\n\treturn ok\n}\n\nfunc isCodeRetryable(code string) bool {\n\tif _, ok := retryableCodes[code]; ok {\n\t\treturn true\n\t}\n\n\treturn isCodeExpiredCreds(code)\n}\n\nfunc isCodeExpiredCreds(code string) bool {\n\t_, ok := credsExpiredCodes[code]\n\treturn ok\n}\n\nvar validParentCodes = map[string]struct{}{\n\tErrCodeSerialization: {},\n\tErrCodeRead:          {},\n}\n\ntype temporaryError interface {\n\tTemporary() bool\n}\n\nfunc isNestedErrorRetryable(parentErr awserr.Error) bool {\n\tif parentErr == nil {\n\t\treturn false\n\t}\n\n\tif _, ok := validParentCodes[parentErr.Code()]; !ok {\n\t\treturn false\n\t}\n\n\terr := parentErr.OrigErr()\n\tif err == nil {\n\t\treturn false\n\t}\n\n\tif aerr, ok := err.(awserr.Error); ok {\n\t\treturn isCodeRetryable(aerr.Code())\n\t}\n\n\tif t, ok := err.(temporaryError); ok {\n\t\treturn t.Temporary() || isErrConnectionReset(err)\n\t}\n\n\treturn isErrConnectionReset(err)\n}\n\n// IsErrorRetryable returns whether the error is retryable, based on its Code.\n// Returns false if error is nil.\nfunc IsErrorRetryable(err error) bool {\n\tif err != nil {\n\t\tif aerr, ok := err.(awserr.Error); ok {\n\t\t\treturn isCodeRetryable(aerr.Code()) || isNestedErrorRetryable(aerr)\n\t\t}\n\t}\n\treturn false\n}\n\n// IsErrorThrottle returns whether the error is to be throttled based on its code.\n// Returns false if error is nil.\nfunc IsErrorThrottle(err error) bool {\n\tif err != nil {\n\t\tif aerr, ok := err.(awserr.Error); ok {\n\t\t\treturn isCodeThrottle(aerr.Code())\n\t\t}\n\t}\n\treturn false\n}\n\n// IsErrorExpiredCreds returns whether the error code is a credential expiry error.\n// Returns false if error is nil.\nfunc IsErrorExpiredCreds(err error) bool {\n\tif err != nil {\n\t\tif aerr, ok := err.(awserr.Error); ok {\n\t\t\treturn isCodeExpiredCreds(aerr.Code())\n\t\t}\n\t}\n\treturn false\n}\n\n// IsErrorRetryable returns whether the error is retryable, based on its Code.\n// Returns false if the request has no Error set.\n//\n// Alias for the utility function IsErrorRetryable\nfunc (r *Request) IsErrorRetryable() bool {\n\treturn IsErrorRetryable(r.Error)\n}\n\n// IsErrorThrottle returns whether the error is to be throttled based on its code.\n// Returns false if the request has no Error set\n//\n// Alias for the utility function IsErrorThrottle\nfunc (r *Request) IsErrorThrottle() bool {\n\treturn IsErrorThrottle(r.Error)\n}\n\n// IsErrorExpired returns whether the error code is a credential expiry error.\n// Returns false if the request has no Error set.\n//\n// Alias for the utility function IsErrorExpiredCreds\nfunc (r *Request) IsErrorExpired() bool {\n\treturn IsErrorExpiredCreds(r.Error)\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/request/timeout_read_closer.go",
    "content": "package request\n\nimport (\n\t\"io\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n)\n\nvar timeoutErr = awserr.New(\n\tErrCodeResponseTimeout,\n\t\"read on body has reached the timeout limit\",\n\tnil,\n)\n\ntype readResult struct {\n\tn   int\n\terr error\n}\n\n// timeoutReadCloser will handle body reads that take too long.\n// We will return a ErrReadTimeout error if a timeout occurs.\ntype timeoutReadCloser struct {\n\treader   io.ReadCloser\n\tduration time.Duration\n}\n\n// Read will spin off a goroutine to call the reader's Read method. We will\n// select on the timer's channel or the read's channel. Whoever completes first\n// will be returned.\nfunc (r *timeoutReadCloser) Read(b []byte) (int, error) {\n\ttimer := time.NewTimer(r.duration)\n\tc := make(chan readResult, 1)\n\n\tgo func() {\n\t\tn, err := r.reader.Read(b)\n\t\ttimer.Stop()\n\t\tc <- readResult{n: n, err: err}\n\t}()\n\n\tselect {\n\tcase data := <-c:\n\t\treturn data.n, data.err\n\tcase <-timer.C:\n\t\treturn 0, timeoutErr\n\t}\n}\n\nfunc (r *timeoutReadCloser) Close() error {\n\treturn r.reader.Close()\n}\n\nconst (\n\t// HandlerResponseTimeout is what we use to signify the name of the\n\t// response timeout handler.\n\tHandlerResponseTimeout = \"ResponseTimeoutHandler\"\n)\n\n// adaptToResponseTimeoutError is a handler that will replace any top level error\n// to a ErrCodeResponseTimeout, if its child is that.\nfunc adaptToResponseTimeoutError(req *Request) {\n\tif err, ok := req.Error.(awserr.Error); ok {\n\t\taerr, ok := err.OrigErr().(awserr.Error)\n\t\tif ok && aerr.Code() == ErrCodeResponseTimeout {\n\t\t\treq.Error = aerr\n\t\t}\n\t}\n}\n\n// WithResponseReadTimeout is a request option that will wrap the body in a timeout read closer.\n// This will allow for per read timeouts. If a timeout occurred, we will return the\n// ErrCodeResponseTimeout.\n//\n//     svc.PutObjectWithContext(ctx, params, request.WithTimeoutReadCloser(30 * time.Second)\nfunc WithResponseReadTimeout(duration time.Duration) Option {\n\treturn func(r *Request) {\n\n\t\tvar timeoutHandler = NamedHandler{\n\t\t\tHandlerResponseTimeout,\n\t\t\tfunc(req *Request) {\n\t\t\t\treq.HTTPResponse.Body = &timeoutReadCloser{\n\t\t\t\t\treader:   req.HTTPResponse.Body,\n\t\t\t\t\tduration: duration,\n\t\t\t\t}\n\t\t\t}}\n\n\t\t// remove the handler so we are not stomping over any new durations.\n\t\tr.Handlers.Send.RemoveByName(HandlerResponseTimeout)\n\t\tr.Handlers.Send.PushBackNamed(timeoutHandler)\n\n\t\tr.Handlers.Unmarshal.PushBack(adaptToResponseTimeoutError)\n\t\tr.Handlers.UnmarshalError.PushBack(adaptToResponseTimeoutError)\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/request/validation.go",
    "content": "package request\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n)\n\nconst (\n\t// InvalidParameterErrCode is the error code for invalid parameters errors\n\tInvalidParameterErrCode = \"InvalidParameter\"\n\t// ParamRequiredErrCode is the error code for required parameter errors\n\tParamRequiredErrCode = \"ParamRequiredError\"\n\t// ParamMinValueErrCode is the error code for fields with too low of a\n\t// number value.\n\tParamMinValueErrCode = \"ParamMinValueError\"\n\t// ParamMinLenErrCode is the error code for fields without enough elements.\n\tParamMinLenErrCode = \"ParamMinLenError\"\n\t// ParamMaxLenErrCode is the error code for value being too long.\n\tParamMaxLenErrCode = \"ParamMaxLenError\"\n\n\t// ParamFormatErrCode is the error code for a field with invalid\n\t// format or characters.\n\tParamFormatErrCode = \"ParamFormatInvalidError\"\n)\n\n// Validator provides a way for types to perform validation logic on their\n// input values that external code can use to determine if a type's values\n// are valid.\ntype Validator interface {\n\tValidate() error\n}\n\n// An ErrInvalidParams provides wrapping of invalid parameter errors found when\n// validating API operation input parameters.\ntype ErrInvalidParams struct {\n\t// Context is the base context of the invalid parameter group.\n\tContext string\n\terrs    []ErrInvalidParam\n}\n\n// Add adds a new invalid parameter error to the collection of invalid\n// parameters. The context of the invalid parameter will be updated to reflect\n// this collection.\nfunc (e *ErrInvalidParams) Add(err ErrInvalidParam) {\n\terr.SetContext(e.Context)\n\te.errs = append(e.errs, err)\n}\n\n// AddNested adds the invalid parameter errors from another ErrInvalidParams\n// value into this collection. The nested errors will have their nested context\n// updated and base context to reflect the merging.\n//\n// Use for nested validations errors.\nfunc (e *ErrInvalidParams) AddNested(nestedCtx string, nested ErrInvalidParams) {\n\tfor _, err := range nested.errs {\n\t\terr.SetContext(e.Context)\n\t\terr.AddNestedContext(nestedCtx)\n\t\te.errs = append(e.errs, err)\n\t}\n}\n\n// Len returns the number of invalid parameter errors\nfunc (e ErrInvalidParams) Len() int {\n\treturn len(e.errs)\n}\n\n// Code returns the code of the error\nfunc (e ErrInvalidParams) Code() string {\n\treturn InvalidParameterErrCode\n}\n\n// Message returns the message of the error\nfunc (e ErrInvalidParams) Message() string {\n\treturn fmt.Sprintf(\"%d validation error(s) found.\", len(e.errs))\n}\n\n// Error returns the string formatted form of the invalid parameters.\nfunc (e ErrInvalidParams) Error() string {\n\tw := &bytes.Buffer{}\n\tfmt.Fprintf(w, \"%s: %s\\n\", e.Code(), e.Message())\n\n\tfor _, err := range e.errs {\n\t\tfmt.Fprintf(w, \"- %s\\n\", err.Message())\n\t}\n\n\treturn w.String()\n}\n\n// OrigErr returns the invalid parameters as a awserr.BatchedErrors value\nfunc (e ErrInvalidParams) OrigErr() error {\n\treturn awserr.NewBatchError(\n\t\tInvalidParameterErrCode, e.Message(), e.OrigErrs())\n}\n\n// OrigErrs returns a slice of the invalid parameters\nfunc (e ErrInvalidParams) OrigErrs() []error {\n\terrs := make([]error, len(e.errs))\n\tfor i := 0; i < len(errs); i++ {\n\t\terrs[i] = e.errs[i]\n\t}\n\n\treturn errs\n}\n\n// An ErrInvalidParam represents an invalid parameter error type.\ntype ErrInvalidParam interface {\n\tawserr.Error\n\n\t// Field name the error occurred on.\n\tField() string\n\n\t// SetContext updates the context of the error.\n\tSetContext(string)\n\n\t// AddNestedContext updates the error's context to include a nested level.\n\tAddNestedContext(string)\n}\n\ntype errInvalidParam struct {\n\tcontext       string\n\tnestedContext string\n\tfield         string\n\tcode          string\n\tmsg           string\n}\n\n// Code returns the error code for the type of invalid parameter.\nfunc (e *errInvalidParam) Code() string {\n\treturn e.code\n}\n\n// Message returns the reason the parameter was invalid, and its context.\nfunc (e *errInvalidParam) Message() string {\n\treturn fmt.Sprintf(\"%s, %s.\", e.msg, e.Field())\n}\n\n// Error returns the string version of the invalid parameter error.\nfunc (e *errInvalidParam) Error() string {\n\treturn fmt.Sprintf(\"%s: %s\", e.code, e.Message())\n}\n\n// OrigErr returns nil, Implemented for awserr.Error interface.\nfunc (e *errInvalidParam) OrigErr() error {\n\treturn nil\n}\n\n// Field Returns the field and context the error occurred.\nfunc (e *errInvalidParam) Field() string {\n\tfield := e.context\n\tif len(field) > 0 {\n\t\tfield += \".\"\n\t}\n\tif len(e.nestedContext) > 0 {\n\t\tfield += fmt.Sprintf(\"%s.\", e.nestedContext)\n\t}\n\tfield += e.field\n\n\treturn field\n}\n\n// SetContext updates the base context of the error.\nfunc (e *errInvalidParam) SetContext(ctx string) {\n\te.context = ctx\n}\n\n// AddNestedContext prepends a context to the field's path.\nfunc (e *errInvalidParam) AddNestedContext(ctx string) {\n\tif len(e.nestedContext) == 0 {\n\t\te.nestedContext = ctx\n\t} else {\n\t\te.nestedContext = fmt.Sprintf(\"%s.%s\", ctx, e.nestedContext)\n\t}\n\n}\n\n// An ErrParamRequired represents an required parameter error.\ntype ErrParamRequired struct {\n\terrInvalidParam\n}\n\n// NewErrParamRequired creates a new required parameter error.\nfunc NewErrParamRequired(field string) *ErrParamRequired {\n\treturn &ErrParamRequired{\n\t\terrInvalidParam{\n\t\t\tcode:  ParamRequiredErrCode,\n\t\t\tfield: field,\n\t\t\tmsg:   fmt.Sprintf(\"missing required field\"),\n\t\t},\n\t}\n}\n\n// An ErrParamMinValue represents a minimum value parameter error.\ntype ErrParamMinValue struct {\n\terrInvalidParam\n\tmin float64\n}\n\n// NewErrParamMinValue creates a new minimum value parameter error.\nfunc NewErrParamMinValue(field string, min float64) *ErrParamMinValue {\n\treturn &ErrParamMinValue{\n\t\terrInvalidParam: errInvalidParam{\n\t\t\tcode:  ParamMinValueErrCode,\n\t\t\tfield: field,\n\t\t\tmsg:   fmt.Sprintf(\"minimum field value of %v\", min),\n\t\t},\n\t\tmin: min,\n\t}\n}\n\n// MinValue returns the field's require minimum value.\n//\n// float64 is returned for both int and float min values.\nfunc (e *ErrParamMinValue) MinValue() float64 {\n\treturn e.min\n}\n\n// An ErrParamMinLen represents a minimum length parameter error.\ntype ErrParamMinLen struct {\n\terrInvalidParam\n\tmin int\n}\n\n// NewErrParamMinLen creates a new minimum length parameter error.\nfunc NewErrParamMinLen(field string, min int) *ErrParamMinLen {\n\treturn &ErrParamMinLen{\n\t\terrInvalidParam: errInvalidParam{\n\t\t\tcode:  ParamMinLenErrCode,\n\t\t\tfield: field,\n\t\t\tmsg:   fmt.Sprintf(\"minimum field size of %v\", min),\n\t\t},\n\t\tmin: min,\n\t}\n}\n\n// MinLen returns the field's required minimum length.\nfunc (e *ErrParamMinLen) MinLen() int {\n\treturn e.min\n}\n\n// An ErrParamMaxLen represents a maximum length parameter error.\ntype ErrParamMaxLen struct {\n\terrInvalidParam\n\tmax int\n}\n\n// NewErrParamMaxLen creates a new maximum length parameter error.\nfunc NewErrParamMaxLen(field string, max int, value string) *ErrParamMaxLen {\n\treturn &ErrParamMaxLen{\n\t\terrInvalidParam: errInvalidParam{\n\t\t\tcode:  ParamMaxLenErrCode,\n\t\t\tfield: field,\n\t\t\tmsg:   fmt.Sprintf(\"maximum size of %v, %v\", max, value),\n\t\t},\n\t\tmax: max,\n\t}\n}\n\n// MaxLen returns the field's required minimum length.\nfunc (e *ErrParamMaxLen) MaxLen() int {\n\treturn e.max\n}\n\n// An ErrParamFormat represents a invalid format parameter error.\ntype ErrParamFormat struct {\n\terrInvalidParam\n\tformat string\n}\n\n// NewErrParamFormat creates a new invalid format parameter error.\nfunc NewErrParamFormat(field string, format, value string) *ErrParamFormat {\n\treturn &ErrParamFormat{\n\t\terrInvalidParam: errInvalidParam{\n\t\t\tcode:  ParamFormatErrCode,\n\t\t\tfield: field,\n\t\t\tmsg:   fmt.Sprintf(\"format %v, %v\", format, value),\n\t\t},\n\t\tformat: format,\n\t}\n}\n\n// Format returns the field's required format.\nfunc (e *ErrParamFormat) Format() string {\n\treturn e.format\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/request/waiter.go",
    "content": "package request\n\nimport (\n\t\"fmt\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n\t\"github.com/aws/aws-sdk-go/aws/awsutil\"\n)\n\n// WaiterResourceNotReadyErrorCode is the error code returned by a waiter when\n// the waiter's max attempts have been exhausted.\nconst WaiterResourceNotReadyErrorCode = \"ResourceNotReady\"\n\n// A WaiterOption is a function that will update the Waiter value's fields to\n// configure the waiter.\ntype WaiterOption func(*Waiter)\n\n// WithWaiterMaxAttempts returns the maximum number of times the waiter should\n// attempt to check the resource for the target state.\nfunc WithWaiterMaxAttempts(max int) WaiterOption {\n\treturn func(w *Waiter) {\n\t\tw.MaxAttempts = max\n\t}\n}\n\n// WaiterDelay will return a delay the waiter should pause between attempts to\n// check the resource state. The passed in attempt is the number of times the\n// Waiter has checked the resource state.\n//\n// Attempt is the number of attempts the Waiter has made checking the resource\n// state.\ntype WaiterDelay func(attempt int) time.Duration\n\n// ConstantWaiterDelay returns a WaiterDelay that will always return a constant\n// delay the waiter should use between attempts. It ignores the number of\n// attempts made.\nfunc ConstantWaiterDelay(delay time.Duration) WaiterDelay {\n\treturn func(attempt int) time.Duration {\n\t\treturn delay\n\t}\n}\n\n// WithWaiterDelay will set the Waiter to use the WaiterDelay passed in.\nfunc WithWaiterDelay(delayer WaiterDelay) WaiterOption {\n\treturn func(w *Waiter) {\n\t\tw.Delay = delayer\n\t}\n}\n\n// WithWaiterLogger returns a waiter option to set the logger a waiter\n// should use to log warnings and errors to.\nfunc WithWaiterLogger(logger aws.Logger) WaiterOption {\n\treturn func(w *Waiter) {\n\t\tw.Logger = logger\n\t}\n}\n\n// WithWaiterRequestOptions returns a waiter option setting the request\n// options for each request the waiter makes. Appends to waiter's request\n// options already set.\nfunc WithWaiterRequestOptions(opts ...Option) WaiterOption {\n\treturn func(w *Waiter) {\n\t\tw.RequestOptions = append(w.RequestOptions, opts...)\n\t}\n}\n\n// A Waiter provides the functionality to perform a blocking call which will\n// wait for a resource state to be satisfied by a service.\n//\n// This type should not be used directly. The API operations provided in the\n// service packages prefixed with \"WaitUntil\" should be used instead.\ntype Waiter struct {\n\tName      string\n\tAcceptors []WaiterAcceptor\n\tLogger    aws.Logger\n\n\tMaxAttempts int\n\tDelay       WaiterDelay\n\n\tRequestOptions   []Option\n\tNewRequest       func([]Option) (*Request, error)\n\tSleepWithContext func(aws.Context, time.Duration) error\n}\n\n// ApplyOptions updates the waiter with the list of waiter options provided.\nfunc (w *Waiter) ApplyOptions(opts ...WaiterOption) {\n\tfor _, fn := range opts {\n\t\tfn(w)\n\t}\n}\n\n// WaiterState are states the waiter uses based on WaiterAcceptor definitions\n// to identify if the resource state the waiter is waiting on has occurred.\ntype WaiterState int\n\n// String returns the string representation of the waiter state.\nfunc (s WaiterState) String() string {\n\tswitch s {\n\tcase SuccessWaiterState:\n\t\treturn \"success\"\n\tcase FailureWaiterState:\n\t\treturn \"failure\"\n\tcase RetryWaiterState:\n\t\treturn \"retry\"\n\tdefault:\n\t\treturn \"unknown waiter state\"\n\t}\n}\n\n// States the waiter acceptors will use to identify target resource states.\nconst (\n\tSuccessWaiterState WaiterState = iota // waiter successful\n\tFailureWaiterState                    // waiter failed\n\tRetryWaiterState                      // waiter needs to be retried\n)\n\n// WaiterMatchMode is the mode that the waiter will use to match the WaiterAcceptor\n// definition's Expected attribute.\ntype WaiterMatchMode int\n\n// Modes the waiter will use when inspecting API response to identify target\n// resource states.\nconst (\n\tPathAllWaiterMatch  WaiterMatchMode = iota // match on all paths\n\tPathWaiterMatch                            // match on specific path\n\tPathAnyWaiterMatch                         // match on any path\n\tPathListWaiterMatch                        // match on list of paths\n\tStatusWaiterMatch                          // match on status code\n\tErrorWaiterMatch                           // match on error\n)\n\n// String returns the string representation of the waiter match mode.\nfunc (m WaiterMatchMode) String() string {\n\tswitch m {\n\tcase PathAllWaiterMatch:\n\t\treturn \"pathAll\"\n\tcase PathWaiterMatch:\n\t\treturn \"path\"\n\tcase PathAnyWaiterMatch:\n\t\treturn \"pathAny\"\n\tcase PathListWaiterMatch:\n\t\treturn \"pathList\"\n\tcase StatusWaiterMatch:\n\t\treturn \"status\"\n\tcase ErrorWaiterMatch:\n\t\treturn \"error\"\n\tdefault:\n\t\treturn \"unknown waiter match mode\"\n\t}\n}\n\n// WaitWithContext will make requests for the API operation using NewRequest to\n// build API requests. The request's response will be compared against the\n// Waiter's Acceptors to determine the successful state of the resource the\n// waiter is inspecting.\n//\n// The passed in context must not be nil. If it is nil a panic will occur. The\n// Context will be used to cancel the waiter's pending requests and retry delays.\n// Use aws.BackgroundContext if no context is available.\n//\n// The waiter will continue until the target state defined by the Acceptors,\n// or the max attempts expires.\n//\n// Will return the WaiterResourceNotReadyErrorCode error code if the waiter's\n// retryer ShouldRetry returns false. This normally will happen when the max\n// wait attempts expires.\nfunc (w Waiter) WaitWithContext(ctx aws.Context) error {\n\n\tfor attempt := 1; ; attempt++ {\n\t\treq, err := w.NewRequest(w.RequestOptions)\n\t\tif err != nil {\n\t\t\twaiterLogf(w.Logger, \"unable to create request %v\", err)\n\t\t\treturn err\n\t\t}\n\t\treq.Handlers.Build.PushBack(MakeAddToUserAgentFreeFormHandler(\"Waiter\"))\n\t\terr = req.Send()\n\n\t\t// See if any of the acceptors match the request's response, or error\n\t\tfor _, a := range w.Acceptors {\n\t\t\tif matched, matchErr := a.match(w.Name, w.Logger, req, err); matched {\n\t\t\t\treturn matchErr\n\t\t\t}\n\t\t}\n\n\t\t// The Waiter should only check the resource state MaxAttempts times\n\t\t// This is here instead of in the for loop above to prevent delaying\n\t\t// unnecessary when the waiter will not retry.\n\t\tif attempt == w.MaxAttempts {\n\t\t\tbreak\n\t\t}\n\n\t\t// Delay to wait before inspecting the resource again\n\t\tdelay := w.Delay(attempt)\n\t\tif sleepFn := req.Config.SleepDelay; sleepFn != nil {\n\t\t\t// Support SleepDelay for backwards compatibility and testing\n\t\t\tsleepFn(delay)\n\t\t} else {\n\t\t\tsleepCtxFn := w.SleepWithContext\n\t\t\tif sleepCtxFn == nil {\n\t\t\t\tsleepCtxFn = aws.SleepWithContext\n\t\t\t}\n\n\t\t\tif err := sleepCtxFn(ctx, delay); err != nil {\n\t\t\t\treturn awserr.New(CanceledErrorCode, \"waiter context canceled\", err)\n\t\t\t}\n\t\t}\n\t}\n\n\treturn awserr.New(WaiterResourceNotReadyErrorCode, \"exceeded wait attempts\", nil)\n}\n\n// A WaiterAcceptor provides the information needed to wait for an API operation\n// to complete.\ntype WaiterAcceptor struct {\n\tState    WaiterState\n\tMatcher  WaiterMatchMode\n\tArgument string\n\tExpected interface{}\n}\n\n// match returns if the acceptor found a match with the passed in request\n// or error. True is returned if the acceptor made a match, error is returned\n// if there was an error attempting to perform the match.\nfunc (a *WaiterAcceptor) match(name string, l aws.Logger, req *Request, err error) (bool, error) {\n\tresult := false\n\tvar vals []interface{}\n\n\tswitch a.Matcher {\n\tcase PathAllWaiterMatch, PathWaiterMatch:\n\t\t// Require all matches to be equal for result to match\n\t\tvals, _ = awsutil.ValuesAtPath(req.Data, a.Argument)\n\t\tif len(vals) == 0 {\n\t\t\tbreak\n\t\t}\n\t\tresult = true\n\t\tfor _, val := range vals {\n\t\t\tif !awsutil.DeepEqual(val, a.Expected) {\n\t\t\t\tresult = false\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\tcase PathAnyWaiterMatch:\n\t\t// Only a single match needs to equal for the result to match\n\t\tvals, _ = awsutil.ValuesAtPath(req.Data, a.Argument)\n\t\tfor _, val := range vals {\n\t\t\tif awsutil.DeepEqual(val, a.Expected) {\n\t\t\t\tresult = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\tcase PathListWaiterMatch:\n\t\t// ignored matcher\n\tcase StatusWaiterMatch:\n\t\ts := a.Expected.(int)\n\t\tresult = s == req.HTTPResponse.StatusCode\n\tcase ErrorWaiterMatch:\n\t\tif aerr, ok := err.(awserr.Error); ok {\n\t\t\tresult = aerr.Code() == a.Expected.(string)\n\t\t}\n\tdefault:\n\t\twaiterLogf(l, \"WARNING: Waiter %s encountered unexpected matcher: %s\",\n\t\t\tname, a.Matcher)\n\t}\n\n\tif !result {\n\t\t// If there was no matching result found there is nothing more to do\n\t\t// for this response, retry the request.\n\t\treturn false, nil\n\t}\n\n\tswitch a.State {\n\tcase SuccessWaiterState:\n\t\t// waiter completed\n\t\treturn true, nil\n\tcase FailureWaiterState:\n\t\t// Waiter failure state triggered\n\t\treturn true, awserr.New(WaiterResourceNotReadyErrorCode,\n\t\t\t\"failed waiting for successful resource state\", err)\n\tcase RetryWaiterState:\n\t\t// clear the error and retry the operation\n\t\treturn false, nil\n\tdefault:\n\t\twaiterLogf(l, \"WARNING: Waiter %s encountered unexpected state: %s\",\n\t\t\tname, a.State)\n\t\treturn false, nil\n\t}\n}\n\nfunc waiterLogf(logger aws.Logger, msg string, args ...interface{}) {\n\tif logger != nil {\n\t\tlogger.Log(fmt.Sprintf(msg, args...))\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/session/cabundle_transport.go",
    "content": "// +build go1.7\n\npackage session\n\nimport (\n\t\"net\"\n\t\"net/http\"\n\t\"time\"\n)\n\n// Transport that should be used when a custom CA bundle is specified with the\n// SDK.\nfunc getCABundleTransport() *http.Transport {\n\treturn &http.Transport{\n\t\tProxy: http.ProxyFromEnvironment,\n\t\tDialContext: (&net.Dialer{\n\t\t\tTimeout:   30 * time.Second,\n\t\t\tKeepAlive: 30 * time.Second,\n\t\t\tDualStack: true,\n\t\t}).DialContext,\n\t\tMaxIdleConns:          100,\n\t\tIdleConnTimeout:       90 * time.Second,\n\t\tTLSHandshakeTimeout:   10 * time.Second,\n\t\tExpectContinueTimeout: 1 * time.Second,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/session/cabundle_transport_1_5.go",
    "content": "// +build !go1.6,go1.5\n\npackage session\n\nimport (\n\t\"net\"\n\t\"net/http\"\n\t\"time\"\n)\n\n// Transport that should be used when a custom CA bundle is specified with the\n// SDK.\nfunc getCABundleTransport() *http.Transport {\n\treturn &http.Transport{\n\t\tProxy: http.ProxyFromEnvironment,\n\t\tDial: (&net.Dialer{\n\t\t\tTimeout:   30 * time.Second,\n\t\t\tKeepAlive: 30 * time.Second,\n\t\t}).Dial,\n\t\tTLSHandshakeTimeout: 10 * time.Second,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/session/cabundle_transport_1_6.go",
    "content": "// +build !go1.7,go1.6\n\npackage session\n\nimport (\n\t\"net\"\n\t\"net/http\"\n\t\"time\"\n)\n\n// Transport that should be used when a custom CA bundle is specified with the\n// SDK.\nfunc getCABundleTransport() *http.Transport {\n\treturn &http.Transport{\n\t\tProxy: http.ProxyFromEnvironment,\n\t\tDial: (&net.Dialer{\n\t\t\tTimeout:   30 * time.Second,\n\t\t\tKeepAlive: 30 * time.Second,\n\t\t}).Dial,\n\t\tTLSHandshakeTimeout:   10 * time.Second,\n\t\tExpectContinueTimeout: 1 * time.Second,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/session/doc.go",
    "content": "/*\nPackage session provides configuration for the SDK's service clients.\n\nSessions can be shared across all service clients that share the same base\nconfiguration.  The Session is built from the SDK's default configuration and\nrequest handlers.\n\nSessions should be cached when possible, because creating a new Session will\nload all configuration values from the environment, and config files each time\nthe Session is created. Sharing the Session value across all of your service\nclients will ensure the configuration is loaded the fewest number of times possible.\n\nConcurrency\n\nSessions are safe to use concurrently as long as the Session is not being\nmodified. The SDK will not modify the Session once the Session has been created.\nCreating service clients concurrently from a shared Session is safe.\n\nSessions from Shared Config\n\nSessions can be created using the method above that will only load the\nadditional config if the AWS_SDK_LOAD_CONFIG environment variable is set.\nAlternatively you can explicitly create a Session with shared config enabled.\nTo do this you can use NewSessionWithOptions to configure how the Session will\nbe created. Using the NewSessionWithOptions with SharedConfigState set to\nSharedConfigEnable will create the session as if the AWS_SDK_LOAD_CONFIG\nenvironment variable was set.\n\nCreating Sessions\n\nWhen creating Sessions optional aws.Config values can be passed in that will\noverride the default, or loaded config values the Session is being created\nwith. This allows you to provide additional, or case based, configuration\nas needed.\n\nBy default NewSession will only load credentials from the shared credentials\nfile (~/.aws/credentials). If the AWS_SDK_LOAD_CONFIG environment variable is\nset to a truthy value the Session will be created from the configuration\nvalues from the shared config (~/.aws/config) and shared credentials\n(~/.aws/credentials) files. See the section Sessions from Shared Config for\nmore information.\n\nCreate a Session with the default config and request handlers. With credentials\nregion, and profile loaded from the environment and shared config automatically.\nRequires the AWS_PROFILE to be set, or \"default\" is used.\n\n\t// Create Session\n\tsess := session.Must(session.NewSession())\n\n\t// Create a Session with a custom region\n\tsess := session.Must(session.NewSession(&aws.Config{\n\t\tRegion: aws.String(\"us-east-1\"),\n\t}))\n\n\t// Create a S3 client instance from a session\n\tsess := session.Must(session.NewSession())\n\n\tsvc := s3.New(sess)\n\nCreate Session With Option Overrides\n\nIn addition to NewSession, Sessions can be created using NewSessionWithOptions.\nThis func allows you to control and override how the Session will be created\nthrough code instead of being driven by environment variables only.\n\nUse NewSessionWithOptions when you want to provide the config profile, or\noverride the shared config state (AWS_SDK_LOAD_CONFIG).\n\n\t// Equivalent to session.NewSession()\n\tsess := session.Must(session.NewSessionWithOptions(session.Options{\n\t\t// Options\n\t}))\n\n\t// Specify profile to load for the session's config\n\tsess := session.Must(session.NewSessionWithOptions(session.Options{\n\t\t Profile: \"profile_name\",\n\t}))\n\n\t// Specify profile for config and region for requests\n\tsess := session.Must(session.NewSessionWithOptions(session.Options{\n\t\t Config: aws.Config{Region: aws.String(\"us-east-1\")},\n\t\t Profile: \"profile_name\",\n\t}))\n\n\t// Force enable Shared Config support\n\tsess := session.Must(session.NewSessionWithOptions(session.Options{\n\t\tSharedConfigState: session.SharedConfigEnable,\n\t}))\n\nAdding Handlers\n\nYou can add handlers to a session for processing HTTP requests. All service\nclients that use the session inherit the handlers. For example, the following\nhandler logs every request and its payload made by a service client:\n\n\t// Create a session, and add additional handlers for all service\n\t// clients created with the Session to inherit. Adds logging handler.\n\tsess := session.Must(session.NewSession())\n\n\tsess.Handlers.Send.PushFront(func(r *request.Request) {\n\t\t// Log every request made and its payload\n\t\tlogger.Printf(\"Request: %s/%s, Payload: %s\",\n\t\t\tr.ClientInfo.ServiceName, r.Operation, r.Params)\n\t})\n\nDeprecated \"New\" function\n\nThe New session function has been deprecated because it does not provide good\nway to return errors that occur when loading the configuration files and values.\nBecause of this, NewSession was created so errors can be retrieved when\ncreating a session fails.\n\nShared Config Fields\n\nBy default the SDK will only load the shared credentials file's (~/.aws/credentials)\ncredentials values, and all other config is provided by the environment variables,\nSDK defaults, and user provided aws.Config values.\n\nIf the AWS_SDK_LOAD_CONFIG environment variable is set, or SharedConfigEnable\noption is used to create the Session the full shared config values will be\nloaded. This includes credentials, region, and support for assume role. In\naddition the Session will load its configuration from both the shared config\nfile (~/.aws/config) and shared credentials file (~/.aws/credentials). Both\nfiles have the same format.\n\nIf both config files are present the configuration from both files will be\nread. The Session will be created from configuration values from the shared\ncredentials file (~/.aws/credentials) over those in the shared config file (~/.aws/config).\n\nCredentials are the values the SDK should use for authenticating requests with\nAWS Services. They are from a configuration file will need to include both\naws_access_key_id and aws_secret_access_key must be provided together in the\nsame file to be considered valid. The values will be ignored if not a complete\ngroup. aws_session_token is an optional field that can be provided if both of\nthe other two fields are also provided.\n\n\taws_access_key_id = AKID\n\taws_secret_access_key = SECRET\n\taws_session_token = TOKEN\n\nAssume Role values allow you to configure the SDK to assume an IAM role using\na set of credentials provided in a config file via the source_profile field.\nBoth \"role_arn\" and \"source_profile\" are required. The SDK supports assuming\na role with MFA token if the session option AssumeRoleTokenProvider\nis set.\n\n\trole_arn = arn:aws:iam::<account_number>:role/<role_name>\n\tsource_profile = profile_with_creds\n\texternal_id = 1234\n\tmfa_serial = <serial or mfa arn>\n\trole_session_name = session_name\n\nRegion is the region the SDK should use for looking up AWS service endpoints\nand signing requests.\n\n\tregion = us-east-1\n\nAssume Role with MFA token\n\nTo create a session with support for assuming an IAM role with MFA set the\nsession option AssumeRoleTokenProvider to a function that will prompt for the\nMFA token code when the SDK assumes the role and refreshes the role's credentials.\nThis allows you to configure the SDK via the shared config to assumea role\nwith MFA tokens.\n\nIn order for the SDK to assume a role with MFA the SharedConfigState\nsession option must be set to SharedConfigEnable, or AWS_SDK_LOAD_CONFIG\nenvironment variable set.\n\nThe shared configuration instructs the SDK to assume an IAM role with MFA\nwhen the mfa_serial configuration field is set in the shared config\n(~/.aws/config) or shared credentials (~/.aws/credentials) file.\n\nIf mfa_serial is set in the configuration, the SDK will assume the role, and\nthe AssumeRoleTokenProvider session option is not set an an error will\nbe returned when creating the session.\n\n    sess := session.Must(session.NewSessionWithOptions(session.Options{\n        AssumeRoleTokenProvider: stscreds.StdinTokenProvider,\n    }))\n\n    // Create service client value configured for credentials\n    // from assumed role.\n    svc := s3.New(sess)\n\nTo setup assume role outside of a session see the stscreds.AssumeRoleProvider\ndocumentation.\n\nEnvironment Variables\n\nWhen a Session is created several environment variables can be set to adjust\nhow the SDK functions, and what configuration data it loads when creating\nSessions. All environment values are optional, but some values like credentials\nrequire multiple of the values to set or the partial values will be ignored.\nAll environment variable values are strings unless otherwise noted.\n\nEnvironment configuration values. If set both Access Key ID and Secret Access\nKey must be provided. Session Token and optionally also be provided, but is\nnot required.\n\n\t# Access Key ID\n\tAWS_ACCESS_KEY_ID=AKID\n\tAWS_ACCESS_KEY=AKID # only read if AWS_ACCESS_KEY_ID is not set.\n\n\t# Secret Access Key\n\tAWS_SECRET_ACCESS_KEY=SECRET\n\tAWS_SECRET_KEY=SECRET=SECRET # only read if AWS_SECRET_ACCESS_KEY is not set.\n\n\t# Session Token\n\tAWS_SESSION_TOKEN=TOKEN\n\nRegion value will instruct the SDK where to make service API requests to. If is\nnot provided in the environment the region must be provided before a service\nclient request is made.\n\n\tAWS_REGION=us-east-1\n\n\t# AWS_DEFAULT_REGION is only read if AWS_SDK_LOAD_CONFIG is also set,\n\t# and AWS_REGION is not also set.\n\tAWS_DEFAULT_REGION=us-east-1\n\nProfile name the SDK should load use when loading shared config from the\nconfiguration files. If not provided \"default\" will be used as the profile name.\n\n\tAWS_PROFILE=my_profile\n\n\t# AWS_DEFAULT_PROFILE is only read if AWS_SDK_LOAD_CONFIG is also set,\n\t# and AWS_PROFILE is not also set.\n\tAWS_DEFAULT_PROFILE=my_profile\n\nSDK load config instructs the SDK to load the shared config in addition to\nshared credentials. This also expands the configuration loaded so the shared\ncredentials will have parity with the shared config file. This also enables\nRegion and Profile support for the AWS_DEFAULT_REGION and AWS_DEFAULT_PROFILE\nenv values as well.\n\n\tAWS_SDK_LOAD_CONFIG=1\n\nShared credentials file path can be set to instruct the SDK to use an alternative\nfile for the shared credentials. If not set the file will be loaded from\n$HOME/.aws/credentials on Linux/Unix based systems, and\n%USERPROFILE%\\.aws\\credentials on Windows.\n\n\tAWS_SHARED_CREDENTIALS_FILE=$HOME/my_shared_credentials\n\nShared config file path can be set to instruct the SDK to use an alternative\nfile for the shared config. If not set the file will be loaded from\n$HOME/.aws/config on Linux/Unix based systems, and\n%USERPROFILE%\\.aws\\config on Windows.\n\n\tAWS_CONFIG_FILE=$HOME/my_shared_config\n\nPath to a custom Credentials Authority (CA) bundle PEM file that the SDK\nwill use instead of the default system's root CA bundle. Use this only\nif you want to replace the CA bundle the SDK uses for TLS requests.\n\n\tAWS_CA_BUNDLE=$HOME/my_custom_ca_bundle\n\nEnabling this option will attempt to merge the Transport into the SDK's HTTP\nclient. If the client's Transport is not a http.Transport an error will be\nreturned. If the Transport's TLS config is set this option will cause the SDK\nto overwrite the Transport's TLS config's  RootCAs value. If the CA bundle file\ncontains multiple certificates all of them will be loaded.\n\nThe Session option CustomCABundle is also available when creating sessions\nto also enable this feature. CustomCABundle session option field has priority\nover the AWS_CA_BUNDLE environment variable, and will be used if both are set.\n\nSetting a custom HTTPClient in the aws.Config options will override this setting.\nTo use this option and custom HTTP client, the HTTP client needs to be provided\nwhen creating the session. Not the service client.\n*/\npackage session\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/session/env_config.go",
    "content": "package session\n\nimport (\n\t\"os\"\n\t\"strconv\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-go/aws/credentials\"\n\t\"github.com/aws/aws-sdk-go/aws/defaults\"\n)\n\n// EnvProviderName provides a name of the provider when config is loaded from environment.\nconst EnvProviderName = \"EnvConfigCredentials\"\n\n// envConfig is a collection of environment values the SDK will read\n// setup config from. All environment values are optional. But some values\n// such as credentials require multiple values to be complete or the values\n// will be ignored.\ntype envConfig struct {\n\t// Environment configuration values. If set both Access Key ID and Secret Access\n\t// Key must be provided. Session Token and optionally also be provided, but is\n\t// not required.\n\t//\n\t//\t# Access Key ID\n\t//\tAWS_ACCESS_KEY_ID=AKID\n\t//\tAWS_ACCESS_KEY=AKID # only read if AWS_ACCESS_KEY_ID is not set.\n\t//\n\t//\t# Secret Access Key\n\t//\tAWS_SECRET_ACCESS_KEY=SECRET\n\t//\tAWS_SECRET_KEY=SECRET=SECRET # only read if AWS_SECRET_ACCESS_KEY is not set.\n\t//\n\t//\t# Session Token\n\t//\tAWS_SESSION_TOKEN=TOKEN\n\tCreds credentials.Value\n\n\t// Region value will instruct the SDK where to make service API requests to. If is\n\t// not provided in the environment the region must be provided before a service\n\t// client request is made.\n\t//\n\t//\tAWS_REGION=us-east-1\n\t//\n\t//\t# AWS_DEFAULT_REGION is only read if AWS_SDK_LOAD_CONFIG is also set,\n\t//\t# and AWS_REGION is not also set.\n\t//\tAWS_DEFAULT_REGION=us-east-1\n\tRegion string\n\n\t// Profile name the SDK should load use when loading shared configuration from the\n\t// shared configuration files. If not provided \"default\" will be used as the\n\t// profile name.\n\t//\n\t//\tAWS_PROFILE=my_profile\n\t//\n\t//\t# AWS_DEFAULT_PROFILE is only read if AWS_SDK_LOAD_CONFIG is also set,\n\t//\t# and AWS_PROFILE is not also set.\n\t//\tAWS_DEFAULT_PROFILE=my_profile\n\tProfile string\n\n\t// SDK load config instructs the SDK to load the shared config in addition to\n\t// shared credentials. This also expands the configuration loaded from the shared\n\t// credentials to have parity with the shared config file. This also enables\n\t// Region and Profile support for the AWS_DEFAULT_REGION and AWS_DEFAULT_PROFILE\n\t// env values as well.\n\t//\n\t//\tAWS_SDK_LOAD_CONFIG=1\n\tEnableSharedConfig bool\n\n\t// Shared credentials file path can be set to instruct the SDK to use an alternate\n\t// file for the shared credentials. If not set the file will be loaded from\n\t// $HOME/.aws/credentials on Linux/Unix based systems, and\n\t// %USERPROFILE%\\.aws\\credentials on Windows.\n\t//\n\t//\tAWS_SHARED_CREDENTIALS_FILE=$HOME/my_shared_credentials\n\tSharedCredentialsFile string\n\n\t// Shared config file path can be set to instruct the SDK to use an alternate\n\t// file for the shared config. If not set the file will be loaded from\n\t// $HOME/.aws/config on Linux/Unix based systems, and\n\t// %USERPROFILE%\\.aws\\config on Windows.\n\t//\n\t//\tAWS_CONFIG_FILE=$HOME/my_shared_config\n\tSharedConfigFile string\n\n\t// Sets the path to a custom Credentials Authority (CA) Bundle PEM file\n\t// that the SDK will use instead of the system's root CA bundle.\n\t// Only use this if you want to configure the SDK to use a custom set\n\t// of CAs.\n\t//\n\t// Enabling this option will attempt to merge the Transport\n\t// into the SDK's HTTP client. If the client's Transport is\n\t// not a http.Transport an error will be returned. If the\n\t// Transport's TLS config is set this option will cause the\n\t// SDK to overwrite the Transport's TLS config's  RootCAs value.\n\t//\n\t// Setting a custom HTTPClient in the aws.Config options will override this setting.\n\t// To use this option and custom HTTP client, the HTTP client needs to be provided\n\t// when creating the session. Not the service client.\n\t//\n\t//  AWS_CA_BUNDLE=$HOME/my_custom_ca_bundle\n\tCustomCABundle string\n\n\tcsmEnabled  string\n\tCSMEnabled  bool\n\tCSMPort     string\n\tCSMClientID string\n\n\tenableEndpointDiscovery string\n\t// Enables endpoint discovery via environment variables.\n\t//\n\t//\tAWS_ENABLE_ENDPOINT_DISCOVERY=true\n\tEnableEndpointDiscovery *bool\n}\n\nvar (\n\tcsmEnabledEnvKey = []string{\n\t\t\"AWS_CSM_ENABLED\",\n\t}\n\tcsmPortEnvKey = []string{\n\t\t\"AWS_CSM_PORT\",\n\t}\n\tcsmClientIDEnvKey = []string{\n\t\t\"AWS_CSM_CLIENT_ID\",\n\t}\n\tcredAccessEnvKey = []string{\n\t\t\"AWS_ACCESS_KEY_ID\",\n\t\t\"AWS_ACCESS_KEY\",\n\t}\n\tcredSecretEnvKey = []string{\n\t\t\"AWS_SECRET_ACCESS_KEY\",\n\t\t\"AWS_SECRET_KEY\",\n\t}\n\tcredSessionEnvKey = []string{\n\t\t\"AWS_SESSION_TOKEN\",\n\t}\n\n\tenableEndpointDiscoveryEnvKey = []string{\n\t\t\"AWS_ENABLE_ENDPOINT_DISCOVERY\",\n\t}\n\n\tregionEnvKeys = []string{\n\t\t\"AWS_REGION\",\n\t\t\"AWS_DEFAULT_REGION\", // Only read if AWS_SDK_LOAD_CONFIG is also set\n\t}\n\tprofileEnvKeys = []string{\n\t\t\"AWS_PROFILE\",\n\t\t\"AWS_DEFAULT_PROFILE\", // Only read if AWS_SDK_LOAD_CONFIG is also set\n\t}\n\tsharedCredsFileEnvKey = []string{\n\t\t\"AWS_SHARED_CREDENTIALS_FILE\",\n\t}\n\tsharedConfigFileEnvKey = []string{\n\t\t\"AWS_CONFIG_FILE\",\n\t}\n)\n\n// loadEnvConfig retrieves the SDK's environment configuration.\n// See `envConfig` for the values that will be retrieved.\n//\n// If the environment variable `AWS_SDK_LOAD_CONFIG` is set to a truthy value\n// the shared SDK config will be loaded in addition to the SDK's specific\n// configuration values.\nfunc loadEnvConfig() envConfig {\n\tenableSharedConfig, _ := strconv.ParseBool(os.Getenv(\"AWS_SDK_LOAD_CONFIG\"))\n\treturn envConfigLoad(enableSharedConfig)\n}\n\n// loadEnvSharedConfig retrieves the SDK's environment configuration, and the\n// SDK shared config. See `envConfig` for the values that will be retrieved.\n//\n// Loads the shared configuration in addition to the SDK's specific configuration.\n// This will load the same values as `loadEnvConfig` if the `AWS_SDK_LOAD_CONFIG`\n// environment variable is set.\nfunc loadSharedEnvConfig() envConfig {\n\treturn envConfigLoad(true)\n}\n\nfunc envConfigLoad(enableSharedConfig bool) envConfig {\n\tcfg := envConfig{}\n\n\tcfg.EnableSharedConfig = enableSharedConfig\n\n\tsetFromEnvVal(&cfg.Creds.AccessKeyID, credAccessEnvKey)\n\tsetFromEnvVal(&cfg.Creds.SecretAccessKey, credSecretEnvKey)\n\tsetFromEnvVal(&cfg.Creds.SessionToken, credSessionEnvKey)\n\n\t// CSM environment variables\n\tsetFromEnvVal(&cfg.csmEnabled, csmEnabledEnvKey)\n\tsetFromEnvVal(&cfg.CSMPort, csmPortEnvKey)\n\tsetFromEnvVal(&cfg.CSMClientID, csmClientIDEnvKey)\n\tcfg.CSMEnabled = len(cfg.csmEnabled) > 0\n\n\t// Require logical grouping of credentials\n\tif len(cfg.Creds.AccessKeyID) == 0 || len(cfg.Creds.SecretAccessKey) == 0 {\n\t\tcfg.Creds = credentials.Value{}\n\t} else {\n\t\tcfg.Creds.ProviderName = EnvProviderName\n\t}\n\n\tregionKeys := regionEnvKeys\n\tprofileKeys := profileEnvKeys\n\tif !cfg.EnableSharedConfig {\n\t\tregionKeys = regionKeys[:1]\n\t\tprofileKeys = profileKeys[:1]\n\t}\n\n\tsetFromEnvVal(&cfg.Region, regionKeys)\n\tsetFromEnvVal(&cfg.Profile, profileKeys)\n\n\t// endpoint discovery is in reference to it being enabled.\n\tsetFromEnvVal(&cfg.enableEndpointDiscovery, enableEndpointDiscoveryEnvKey)\n\tif len(cfg.enableEndpointDiscovery) > 0 {\n\t\tcfg.EnableEndpointDiscovery = aws.Bool(cfg.enableEndpointDiscovery != \"false\")\n\t}\n\n\tsetFromEnvVal(&cfg.SharedCredentialsFile, sharedCredsFileEnvKey)\n\tsetFromEnvVal(&cfg.SharedConfigFile, sharedConfigFileEnvKey)\n\n\tif len(cfg.SharedCredentialsFile) == 0 {\n\t\tcfg.SharedCredentialsFile = defaults.SharedCredentialsFilename()\n\t}\n\tif len(cfg.SharedConfigFile) == 0 {\n\t\tcfg.SharedConfigFile = defaults.SharedConfigFilename()\n\t}\n\n\tcfg.CustomCABundle = os.Getenv(\"AWS_CA_BUNDLE\")\n\n\treturn cfg\n}\n\nfunc setFromEnvVal(dst *string, keys []string) {\n\tfor _, k := range keys {\n\t\tif v := os.Getenv(k); len(v) > 0 {\n\t\t\t*dst = v\n\t\t\tbreak\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/session/session.go",
    "content": "package session\n\nimport (\n\t\"crypto/tls\"\n\t\"crypto/x509\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"net/http\"\n\t\"os\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n\t\"github.com/aws/aws-sdk-go/aws/client\"\n\t\"github.com/aws/aws-sdk-go/aws/corehandlers\"\n\t\"github.com/aws/aws-sdk-go/aws/credentials\"\n\t\"github.com/aws/aws-sdk-go/aws/credentials/processcreds\"\n\t\"github.com/aws/aws-sdk-go/aws/credentials/stscreds\"\n\t\"github.com/aws/aws-sdk-go/aws/csm\"\n\t\"github.com/aws/aws-sdk-go/aws/defaults\"\n\t\"github.com/aws/aws-sdk-go/aws/endpoints\"\n\t\"github.com/aws/aws-sdk-go/aws/request\"\n\t\"github.com/aws/aws-sdk-go/internal/shareddefaults\"\n)\n\nconst (\n\t// ErrCodeSharedConfig represents an error that occurs in the shared\n\t// configuration logic\n\tErrCodeSharedConfig = \"SharedConfigErr\"\n)\n\n// ErrSharedConfigSourceCollision will be returned if a section contains both\n// source_profile and credential_source\nvar ErrSharedConfigSourceCollision = awserr.New(ErrCodeSharedConfig, \"only source profile or credential source can be specified, not both\", nil)\n\n// ErrSharedConfigECSContainerEnvVarEmpty will be returned if the environment\n// variables are empty and Environment was set as the credential source\nvar ErrSharedConfigECSContainerEnvVarEmpty = awserr.New(ErrCodeSharedConfig, \"EcsContainer was specified as the credential_source, but 'AWS_CONTAINER_CREDENTIALS_RELATIVE_URI' was not set\", nil)\n\n// ErrSharedConfigInvalidCredSource will be returned if an invalid credential source was provided\nvar ErrSharedConfigInvalidCredSource = awserr.New(ErrCodeSharedConfig, \"credential source values must be EcsContainer, Ec2InstanceMetadata, or Environment\", nil)\n\n// A Session provides a central location to create service clients from and\n// store configurations and request handlers for those services.\n//\n// Sessions are safe to create service clients concurrently, but it is not safe\n// to mutate the Session concurrently.\n//\n// The Session satisfies the service client's client.ConfigProvider.\ntype Session struct {\n\tConfig   *aws.Config\n\tHandlers request.Handlers\n}\n\n// New creates a new instance of the handlers merging in the provided configs\n// on top of the SDK's default configurations. Once the Session is created it\n// can be mutated to modify the Config or Handlers. The Session is safe to be\n// read concurrently, but it should not be written to concurrently.\n//\n// If the AWS_SDK_LOAD_CONFIG environment is set to a truthy value, the New\n// method could now encounter an error when loading the configuration. When\n// The environment variable is set, and an error occurs, New will return a\n// session that will fail all requests reporting the error that occurred while\n// loading the session. Use NewSession to get the error when creating the\n// session.\n//\n// If the AWS_SDK_LOAD_CONFIG environment variable is set to a truthy value\n// the shared config file (~/.aws/config) will also be loaded, in addition to\n// the shared credentials file (~/.aws/credentials). Values set in both the\n// shared config, and shared credentials will be taken from the shared\n// credentials file.\n//\n// Deprecated: Use NewSession functions to create sessions instead. NewSession\n// has the same functionality as New except an error can be returned when the\n// func is called instead of waiting to receive an error until a request is made.\nfunc New(cfgs ...*aws.Config) *Session {\n\t// load initial config from environment\n\tenvCfg := loadEnvConfig()\n\n\tif envCfg.EnableSharedConfig {\n\t\tvar cfg aws.Config\n\t\tcfg.MergeIn(cfgs...)\n\t\ts, err := NewSessionWithOptions(Options{\n\t\t\tConfig:            cfg,\n\t\t\tSharedConfigState: SharedConfigEnable,\n\t\t})\n\t\tif err != nil {\n\t\t\t// Old session.New expected all errors to be discovered when\n\t\t\t// a request is made, and would report the errors then. This\n\t\t\t// needs to be replicated if an error occurs while creating\n\t\t\t// the session.\n\t\t\tmsg := \"failed to create session with AWS_SDK_LOAD_CONFIG enabled. \" +\n\t\t\t\t\"Use session.NewSession to handle errors occurring during session creation.\"\n\n\t\t\t// Session creation failed, need to report the error and prevent\n\t\t\t// any requests from succeeding.\n\t\t\ts = &Session{Config: defaults.Config()}\n\t\t\ts.Config.MergeIn(cfgs...)\n\t\t\ts.Config.Logger.Log(\"ERROR:\", msg, \"Error:\", err)\n\t\t\ts.Handlers.Validate.PushBack(func(r *request.Request) {\n\t\t\t\tr.Error = err\n\t\t\t})\n\t\t}\n\n\t\treturn s\n\t}\n\n\ts := deprecatedNewSession(cfgs...)\n\tif envCfg.CSMEnabled {\n\t\tenableCSM(&s.Handlers, envCfg.CSMClientID, envCfg.CSMPort, s.Config.Logger)\n\t}\n\n\treturn s\n}\n\n// NewSession returns a new Session created from SDK defaults, config files,\n// environment, and user provided config files. Once the Session is created\n// it can be mutated to modify the Config or Handlers. The Session is safe to\n// be read concurrently, but it should not be written to concurrently.\n//\n// If the AWS_SDK_LOAD_CONFIG environment variable is set to a truthy value\n// the shared config file (~/.aws/config) will also be loaded in addition to\n// the shared credentials file (~/.aws/credentials). Values set in both the\n// shared config, and shared credentials will be taken from the shared\n// credentials file. Enabling the Shared Config will also allow the Session\n// to be built with retrieving credentials with AssumeRole set in the config.\n//\n// See the NewSessionWithOptions func for information on how to override or\n// control through code how the Session will be created. Such as specifying the\n// config profile, and controlling if shared config is enabled or not.\nfunc NewSession(cfgs ...*aws.Config) (*Session, error) {\n\topts := Options{}\n\topts.Config.MergeIn(cfgs...)\n\n\treturn NewSessionWithOptions(opts)\n}\n\n// SharedConfigState provides the ability to optionally override the state\n// of the session's creation based on the shared config being enabled or\n// disabled.\ntype SharedConfigState int\n\nconst (\n\t// SharedConfigStateFromEnv does not override any state of the\n\t// AWS_SDK_LOAD_CONFIG env var. It is the default value of the\n\t// SharedConfigState type.\n\tSharedConfigStateFromEnv SharedConfigState = iota\n\n\t// SharedConfigDisable overrides the AWS_SDK_LOAD_CONFIG env var value\n\t// and disables the shared config functionality.\n\tSharedConfigDisable\n\n\t// SharedConfigEnable overrides the AWS_SDK_LOAD_CONFIG env var value\n\t// and enables the shared config functionality.\n\tSharedConfigEnable\n)\n\n// Options provides the means to control how a Session is created and what\n// configuration values will be loaded.\n//\ntype Options struct {\n\t// Provides config values for the SDK to use when creating service clients\n\t// and making API requests to services. Any value set in with this field\n\t// will override the associated value provided by the SDK defaults,\n\t// environment or config files where relevant.\n\t//\n\t// If not set, configuration values from from SDK defaults, environment,\n\t// config will be used.\n\tConfig aws.Config\n\n\t// Overrides the config profile the Session should be created from. If not\n\t// set the value of the environment variable will be loaded (AWS_PROFILE,\n\t// or AWS_DEFAULT_PROFILE if the Shared Config is enabled).\n\t//\n\t// If not set and environment variables are not set the \"default\"\n\t// (DefaultSharedConfigProfile) will be used as the profile to load the\n\t// session config from.\n\tProfile string\n\n\t// Instructs how the Session will be created based on the AWS_SDK_LOAD_CONFIG\n\t// environment variable. By default a Session will be created using the\n\t// value provided by the AWS_SDK_LOAD_CONFIG environment variable.\n\t//\n\t// Setting this value to SharedConfigEnable or SharedConfigDisable\n\t// will allow you to override the AWS_SDK_LOAD_CONFIG environment variable\n\t// and enable or disable the shared config functionality.\n\tSharedConfigState SharedConfigState\n\n\t// Ordered list of files the session will load configuration from.\n\t// It will override environment variable AWS_SHARED_CREDENTIALS_FILE, AWS_CONFIG_FILE.\n\tSharedConfigFiles []string\n\n\t// When the SDK's shared config is configured to assume a role with MFA\n\t// this option is required in order to provide the mechanism that will\n\t// retrieve the MFA token. There is no default value for this field. If\n\t// it is not set an error will be returned when creating the session.\n\t//\n\t// This token provider will be called when ever the assumed role's\n\t// credentials need to be refreshed. Within the context of service clients\n\t// all sharing the same session the SDK will ensure calls to the token\n\t// provider are atomic. When sharing a token provider across multiple\n\t// sessions additional synchronization logic is needed to ensure the\n\t// token providers do not introduce race conditions. It is recommend to\n\t// share the session where possible.\n\t//\n\t// stscreds.StdinTokenProvider is a basic implementation that will prompt\n\t// from stdin for the MFA token code.\n\t//\n\t// This field is only used if the shared configuration is enabled, and\n\t// the config enables assume role wit MFA via the mfa_serial field.\n\tAssumeRoleTokenProvider func() (string, error)\n\n\t// Reader for a custom Credentials Authority (CA) bundle in PEM format that\n\t// the SDK will use instead of the default system's root CA bundle. Use this\n\t// only if you want to replace the CA bundle the SDK uses for TLS requests.\n\t//\n\t// Enabling this option will attempt to merge the Transport into the SDK's HTTP\n\t// client. If the client's Transport is not a http.Transport an error will be\n\t// returned. If the Transport's TLS config is set this option will cause the SDK\n\t// to overwrite the Transport's TLS config's  RootCAs value. If the CA\n\t// bundle reader contains multiple certificates all of them will be loaded.\n\t//\n\t// The Session option CustomCABundle is also available when creating sessions\n\t// to also enable this feature. CustomCABundle session option field has priority\n\t// over the AWS_CA_BUNDLE environment variable, and will be used if both are set.\n\tCustomCABundle io.Reader\n}\n\n// NewSessionWithOptions returns a new Session created from SDK defaults, config files,\n// environment, and user provided config files. This func uses the Options\n// values to configure how the Session is created.\n//\n// If the AWS_SDK_LOAD_CONFIG environment variable is set to a truthy value\n// the shared config file (~/.aws/config) will also be loaded in addition to\n// the shared credentials file (~/.aws/credentials). Values set in both the\n// shared config, and shared credentials will be taken from the shared\n// credentials file. Enabling the Shared Config will also allow the Session\n// to be built with retrieving credentials with AssumeRole set in the config.\n//\n//     // Equivalent to session.New\n//     sess := session.Must(session.NewSessionWithOptions(session.Options{}))\n//\n//     // Specify profile to load for the session's config\n//     sess := session.Must(session.NewSessionWithOptions(session.Options{\n//          Profile: \"profile_name\",\n//     }))\n//\n//     // Specify profile for config and region for requests\n//     sess := session.Must(session.NewSessionWithOptions(session.Options{\n//          Config: aws.Config{Region: aws.String(\"us-east-1\")},\n//          Profile: \"profile_name\",\n//     }))\n//\n//     // Force enable Shared Config support\n//     sess := session.Must(session.NewSessionWithOptions(session.Options{\n//         SharedConfigState: session.SharedConfigEnable,\n//     }))\nfunc NewSessionWithOptions(opts Options) (*Session, error) {\n\tvar envCfg envConfig\n\tif opts.SharedConfigState == SharedConfigEnable {\n\t\tenvCfg = loadSharedEnvConfig()\n\t} else {\n\t\tenvCfg = loadEnvConfig()\n\t}\n\n\tif len(opts.Profile) > 0 {\n\t\tenvCfg.Profile = opts.Profile\n\t}\n\n\tswitch opts.SharedConfigState {\n\tcase SharedConfigDisable:\n\t\tenvCfg.EnableSharedConfig = false\n\tcase SharedConfigEnable:\n\t\tenvCfg.EnableSharedConfig = true\n\t}\n\n\t// Only use AWS_CA_BUNDLE if session option is not provided.\n\tif len(envCfg.CustomCABundle) != 0 && opts.CustomCABundle == nil {\n\t\tf, err := os.Open(envCfg.CustomCABundle)\n\t\tif err != nil {\n\t\t\treturn nil, awserr.New(\"LoadCustomCABundleError\",\n\t\t\t\t\"failed to open custom CA bundle PEM file\", err)\n\t\t}\n\t\tdefer f.Close()\n\t\topts.CustomCABundle = f\n\t}\n\n\treturn newSession(opts, envCfg, &opts.Config)\n}\n\n// Must is a helper function to ensure the Session is valid and there was no\n// error when calling a NewSession function.\n//\n// This helper is intended to be used in variable initialization to load the\n// Session and configuration at startup. Such as:\n//\n//     var sess = session.Must(session.NewSession())\nfunc Must(sess *Session, err error) *Session {\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\treturn sess\n}\n\nfunc deprecatedNewSession(cfgs ...*aws.Config) *Session {\n\tcfg := defaults.Config()\n\thandlers := defaults.Handlers()\n\n\t// Apply the passed in configs so the configuration can be applied to the\n\t// default credential chain\n\tcfg.MergeIn(cfgs...)\n\tif cfg.EndpointResolver == nil {\n\t\t// An endpoint resolver is required for a session to be able to provide\n\t\t// endpoints for service client configurations.\n\t\tcfg.EndpointResolver = endpoints.DefaultResolver()\n\t}\n\tcfg.Credentials = defaults.CredChain(cfg, handlers)\n\n\t// Reapply any passed in configs to override credentials if set\n\tcfg.MergeIn(cfgs...)\n\n\ts := &Session{\n\t\tConfig:   cfg,\n\t\tHandlers: handlers,\n\t}\n\n\tinitHandlers(s)\n\treturn s\n}\n\nfunc enableCSM(handlers *request.Handlers, clientID string, port string, logger aws.Logger) {\n\tlogger.Log(\"Enabling CSM\")\n\tif len(port) == 0 {\n\t\tport = csm.DefaultPort\n\t}\n\n\tr, err := csm.Start(clientID, \"127.0.0.1:\"+port)\n\tif err != nil {\n\t\treturn\n\t}\n\tr.InjectHandlers(handlers)\n}\n\nfunc newSession(opts Options, envCfg envConfig, cfgs ...*aws.Config) (*Session, error) {\n\tcfg := defaults.Config()\n\thandlers := defaults.Handlers()\n\n\t// Get a merged version of the user provided config to determine if\n\t// credentials were.\n\tuserCfg := &aws.Config{}\n\tuserCfg.MergeIn(cfgs...)\n\n\t// Ordered config files will be loaded in with later files overwriting\n\t// previous config file values.\n\tvar cfgFiles []string\n\tif opts.SharedConfigFiles != nil {\n\t\tcfgFiles = opts.SharedConfigFiles\n\t} else {\n\t\tcfgFiles = []string{envCfg.SharedConfigFile, envCfg.SharedCredentialsFile}\n\t\tif !envCfg.EnableSharedConfig {\n\t\t\t// The shared config file (~/.aws/config) is only loaded if instructed\n\t\t\t// to load via the envConfig.EnableSharedConfig (AWS_SDK_LOAD_CONFIG).\n\t\t\tcfgFiles = cfgFiles[1:]\n\t\t}\n\t}\n\n\t// Load additional config from file(s)\n\tsharedCfg, err := loadSharedConfig(envCfg.Profile, cfgFiles)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif err := mergeConfigSrcs(cfg, userCfg, envCfg, sharedCfg, handlers, opts); err != nil {\n\t\treturn nil, err\n\t}\n\n\ts := &Session{\n\t\tConfig:   cfg,\n\t\tHandlers: handlers,\n\t}\n\n\tinitHandlers(s)\n\tif envCfg.CSMEnabled {\n\t\tenableCSM(&s.Handlers, envCfg.CSMClientID, envCfg.CSMPort, s.Config.Logger)\n\t}\n\n\t// Setup HTTP client with custom cert bundle if enabled\n\tif opts.CustomCABundle != nil {\n\t\tif err := loadCustomCABundle(s, opts.CustomCABundle); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\treturn s, nil\n}\n\nfunc loadCustomCABundle(s *Session, bundle io.Reader) error {\n\tvar t *http.Transport\n\tswitch v := s.Config.HTTPClient.Transport.(type) {\n\tcase *http.Transport:\n\t\tt = v\n\tdefault:\n\t\tif s.Config.HTTPClient.Transport != nil {\n\t\t\treturn awserr.New(\"LoadCustomCABundleError\",\n\t\t\t\t\"unable to load custom CA bundle, HTTPClient's transport unsupported type\", nil)\n\t\t}\n\t}\n\tif t == nil {\n\t\t// Nil transport implies `http.DefaultTransport` should be used. Since\n\t\t// the SDK cannot modify, nor copy the `DefaultTransport` specifying\n\t\t// the values the next closest behavior.\n\t\tt = getCABundleTransport()\n\t}\n\n\tp, err := loadCertPool(bundle)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif t.TLSClientConfig == nil {\n\t\tt.TLSClientConfig = &tls.Config{}\n\t}\n\tt.TLSClientConfig.RootCAs = p\n\n\ts.Config.HTTPClient.Transport = t\n\n\treturn nil\n}\n\nfunc loadCertPool(r io.Reader) (*x509.CertPool, error) {\n\tb, err := ioutil.ReadAll(r)\n\tif err != nil {\n\t\treturn nil, awserr.New(\"LoadCustomCABundleError\",\n\t\t\t\"failed to read custom CA bundle PEM file\", err)\n\t}\n\n\tp := x509.NewCertPool()\n\tif !p.AppendCertsFromPEM(b) {\n\t\treturn nil, awserr.New(\"LoadCustomCABundleError\",\n\t\t\t\"failed to load custom CA bundle PEM file\", err)\n\t}\n\n\treturn p, nil\n}\n\nfunc mergeConfigSrcs(cfg, userCfg *aws.Config, envCfg envConfig, sharedCfg sharedConfig, handlers request.Handlers, sessOpts Options) error {\n\t// Merge in user provided configuration\n\tcfg.MergeIn(userCfg)\n\n\t// Region if not already set by user\n\tif len(aws.StringValue(cfg.Region)) == 0 {\n\t\tif len(envCfg.Region) > 0 {\n\t\t\tcfg.WithRegion(envCfg.Region)\n\t\t} else if envCfg.EnableSharedConfig && len(sharedCfg.Region) > 0 {\n\t\t\tcfg.WithRegion(sharedCfg.Region)\n\t\t}\n\t}\n\n\tif cfg.EnableEndpointDiscovery == nil {\n\t\tif envCfg.EnableEndpointDiscovery != nil {\n\t\t\tcfg.WithEndpointDiscovery(*envCfg.EnableEndpointDiscovery)\n\t\t} else if envCfg.EnableSharedConfig && sharedCfg.EnableEndpointDiscovery != nil {\n\t\t\tcfg.WithEndpointDiscovery(*sharedCfg.EnableEndpointDiscovery)\n\t\t}\n\t}\n\n\t// Configure credentials if not already set\n\tif cfg.Credentials == credentials.AnonymousCredentials && userCfg.Credentials == nil {\n\n\t\t// inspect the profile to see if a credential source has been specified.\n\t\tif envCfg.EnableSharedConfig && len(sharedCfg.AssumeRole.CredentialSource) > 0 {\n\n\t\t\t// if both credential_source and source_profile have been set, return an error\n\t\t\t// as this is undefined behavior.\n\t\t\tif len(sharedCfg.AssumeRole.SourceProfile) > 0 {\n\t\t\t\treturn ErrSharedConfigSourceCollision\n\t\t\t}\n\n\t\t\t// valid credential source values\n\t\t\tconst (\n\t\t\t\tcredSourceEc2Metadata  = \"Ec2InstanceMetadata\"\n\t\t\t\tcredSourceEnvironment  = \"Environment\"\n\t\t\t\tcredSourceECSContainer = \"EcsContainer\"\n\t\t\t)\n\n\t\t\tswitch sharedCfg.AssumeRole.CredentialSource {\n\t\t\tcase credSourceEc2Metadata:\n\t\t\t\tcfgCp := *cfg\n\t\t\t\tp := defaults.RemoteCredProvider(cfgCp, handlers)\n\t\t\t\tcfgCp.Credentials = credentials.NewCredentials(p)\n\n\t\t\t\tif len(sharedCfg.AssumeRole.MFASerial) > 0 && sessOpts.AssumeRoleTokenProvider == nil {\n\t\t\t\t\t// AssumeRole Token provider is required if doing Assume Role\n\t\t\t\t\t// with MFA.\n\t\t\t\t\treturn AssumeRoleTokenProviderNotSetError{}\n\t\t\t\t}\n\n\t\t\t\tcfg.Credentials = assumeRoleCredentials(cfgCp, handlers, sharedCfg, sessOpts)\n\t\t\tcase credSourceEnvironment:\n\t\t\t\tcfg.Credentials = credentials.NewStaticCredentialsFromCreds(\n\t\t\t\t\tenvCfg.Creds,\n\t\t\t\t)\n\t\t\tcase credSourceECSContainer:\n\t\t\t\tif len(os.Getenv(shareddefaults.ECSCredsProviderEnvVar)) == 0 {\n\t\t\t\t\treturn ErrSharedConfigECSContainerEnvVarEmpty\n\t\t\t\t}\n\n\t\t\t\tcfgCp := *cfg\n\t\t\t\tp := defaults.RemoteCredProvider(cfgCp, handlers)\n\t\t\t\tcreds := credentials.NewCredentials(p)\n\n\t\t\t\tcfg.Credentials = creds\n\t\t\tdefault:\n\t\t\t\treturn ErrSharedConfigInvalidCredSource\n\t\t\t}\n\n\t\t\treturn nil\n\t\t}\n\n\t\tif len(envCfg.Creds.AccessKeyID) > 0 {\n\t\t\tcfg.Credentials = credentials.NewStaticCredentialsFromCreds(\n\t\t\t\tenvCfg.Creds,\n\t\t\t)\n\t\t} else if envCfg.EnableSharedConfig && len(sharedCfg.AssumeRole.RoleARN) > 0 && sharedCfg.AssumeRoleSource != nil {\n\t\t\tcfgCp := *cfg\n\t\t\tcfgCp.Credentials = credentials.NewStaticCredentialsFromCreds(\n\t\t\t\tsharedCfg.AssumeRoleSource.Creds,\n\t\t\t)\n\n\t\t\tif len(sharedCfg.AssumeRole.MFASerial) > 0 && sessOpts.AssumeRoleTokenProvider == nil {\n\t\t\t\t// AssumeRole Token provider is required if doing Assume Role\n\t\t\t\t// with MFA.\n\t\t\t\treturn AssumeRoleTokenProviderNotSetError{}\n\t\t\t}\n\n\t\t\tcfg.Credentials = assumeRoleCredentials(cfgCp, handlers, sharedCfg, sessOpts)\n\t\t} else if len(sharedCfg.Creds.AccessKeyID) > 0 {\n\t\t\tcfg.Credentials = credentials.NewStaticCredentialsFromCreds(\n\t\t\t\tsharedCfg.Creds,\n\t\t\t)\n\t\t} else if len(sharedCfg.CredentialProcess) > 0 {\n\t\t\tcfg.Credentials = processcreds.NewCredentials(\n\t\t\t\tsharedCfg.CredentialProcess,\n\t\t\t)\n\t\t} else {\n\t\t\t// Fallback to default credentials provider, include mock errors\n\t\t\t// for the credential chain so user can identify why credentials\n\t\t\t// failed to be retrieved.\n\t\t\tcfg.Credentials = credentials.NewCredentials(&credentials.ChainProvider{\n\t\t\t\tVerboseErrors: aws.BoolValue(cfg.CredentialsChainVerboseErrors),\n\t\t\t\tProviders: []credentials.Provider{\n\t\t\t\t\t&credProviderError{Err: awserr.New(\"EnvAccessKeyNotFound\", \"failed to find credentials in the environment.\", nil)},\n\t\t\t\t\t&credProviderError{Err: awserr.New(\"SharedCredsLoad\", fmt.Sprintf(\"failed to load profile, %s.\", envCfg.Profile), nil)},\n\t\t\t\t\tdefaults.RemoteCredProvider(*cfg, handlers),\n\t\t\t\t},\n\t\t\t})\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc assumeRoleCredentials(cfg aws.Config, handlers request.Handlers, sharedCfg sharedConfig, sessOpts Options) *credentials.Credentials {\n\treturn stscreds.NewCredentials(\n\t\t&Session{\n\t\t\tConfig:   &cfg,\n\t\t\tHandlers: handlers.Copy(),\n\t\t},\n\t\tsharedCfg.AssumeRole.RoleARN,\n\t\tfunc(opt *stscreds.AssumeRoleProvider) {\n\t\t\topt.RoleSessionName = sharedCfg.AssumeRole.RoleSessionName\n\n\t\t\t// Assume role with external ID\n\t\t\tif len(sharedCfg.AssumeRole.ExternalID) > 0 {\n\t\t\t\topt.ExternalID = aws.String(sharedCfg.AssumeRole.ExternalID)\n\t\t\t}\n\n\t\t\t// Assume role with MFA\n\t\t\tif len(sharedCfg.AssumeRole.MFASerial) > 0 {\n\t\t\t\topt.SerialNumber = aws.String(sharedCfg.AssumeRole.MFASerial)\n\t\t\t\topt.TokenProvider = sessOpts.AssumeRoleTokenProvider\n\t\t\t}\n\t\t},\n\t)\n}\n\n// AssumeRoleTokenProviderNotSetError is an error returned when creating a session when the\n// MFAToken option is not set when shared config is configured load assume a\n// role with an MFA token.\ntype AssumeRoleTokenProviderNotSetError struct{}\n\n// Code is the short id of the error.\nfunc (e AssumeRoleTokenProviderNotSetError) Code() string {\n\treturn \"AssumeRoleTokenProviderNotSetError\"\n}\n\n// Message is the description of the error\nfunc (e AssumeRoleTokenProviderNotSetError) Message() string {\n\treturn fmt.Sprintf(\"assume role with MFA enabled, but AssumeRoleTokenProvider session option not set.\")\n}\n\n// OrigErr is the underlying error that caused the failure.\nfunc (e AssumeRoleTokenProviderNotSetError) OrigErr() error {\n\treturn nil\n}\n\n// Error satisfies the error interface.\nfunc (e AssumeRoleTokenProviderNotSetError) Error() string {\n\treturn awserr.SprintError(e.Code(), e.Message(), \"\", nil)\n}\n\ntype credProviderError struct {\n\tErr error\n}\n\nvar emptyCreds = credentials.Value{}\n\nfunc (c credProviderError) Retrieve() (credentials.Value, error) {\n\treturn credentials.Value{}, c.Err\n}\nfunc (c credProviderError) IsExpired() bool {\n\treturn true\n}\n\nfunc initHandlers(s *Session) {\n\t// Add the Validate parameter handler if it is not disabled.\n\ts.Handlers.Validate.Remove(corehandlers.ValidateParametersHandler)\n\tif !aws.BoolValue(s.Config.DisableParamValidation) {\n\t\ts.Handlers.Validate.PushBackNamed(corehandlers.ValidateParametersHandler)\n\t}\n}\n\n// Copy creates and returns a copy of the current Session, coping the config\n// and handlers. If any additional configs are provided they will be merged\n// on top of the Session's copied config.\n//\n//     // Create a copy of the current Session, configured for the us-west-2 region.\n//     sess.Copy(&aws.Config{Region: aws.String(\"us-west-2\")})\nfunc (s *Session) Copy(cfgs ...*aws.Config) *Session {\n\tnewSession := &Session{\n\t\tConfig:   s.Config.Copy(cfgs...),\n\t\tHandlers: s.Handlers.Copy(),\n\t}\n\n\tinitHandlers(newSession)\n\n\treturn newSession\n}\n\n// ClientConfig satisfies the client.ConfigProvider interface and is used to\n// configure the service client instances. Passing the Session to the service\n// client's constructor (New) will use this method to configure the client.\nfunc (s *Session) ClientConfig(serviceName string, cfgs ...*aws.Config) client.Config {\n\t// Backwards compatibility, the error will be eaten if user calls ClientConfig\n\t// directly. All SDK services will use ClientconfigWithError.\n\tcfg, _ := s.clientConfigWithErr(serviceName, cfgs...)\n\n\treturn cfg\n}\n\nfunc (s *Session) clientConfigWithErr(serviceName string, cfgs ...*aws.Config) (client.Config, error) {\n\ts = s.Copy(cfgs...)\n\n\tvar resolved endpoints.ResolvedEndpoint\n\tvar err error\n\n\tregion := aws.StringValue(s.Config.Region)\n\n\tif endpoint := aws.StringValue(s.Config.Endpoint); len(endpoint) != 0 {\n\t\tresolved.URL = endpoints.AddScheme(endpoint, aws.BoolValue(s.Config.DisableSSL))\n\t\tresolved.SigningRegion = region\n\t} else {\n\t\tresolved, err = s.Config.EndpointResolver.EndpointFor(\n\t\t\tserviceName, region,\n\t\t\tfunc(opt *endpoints.Options) {\n\t\t\t\topt.DisableSSL = aws.BoolValue(s.Config.DisableSSL)\n\t\t\t\topt.UseDualStack = aws.BoolValue(s.Config.UseDualStack)\n\n\t\t\t\t// Support the condition where the service is modeled but its\n\t\t\t\t// endpoint metadata is not available.\n\t\t\t\topt.ResolveUnknownService = true\n\t\t\t},\n\t\t)\n\t}\n\n\treturn client.Config{\n\t\tConfig:             s.Config,\n\t\tHandlers:           s.Handlers,\n\t\tEndpoint:           resolved.URL,\n\t\tSigningRegion:      resolved.SigningRegion,\n\t\tSigningNameDerived: resolved.SigningNameDerived,\n\t\tSigningName:        resolved.SigningName,\n\t}, err\n}\n\n// ClientConfigNoResolveEndpoint is the same as ClientConfig with the exception\n// that the EndpointResolver will not be used to resolve the endpoint. The only\n// endpoint set must come from the aws.Config.Endpoint field.\nfunc (s *Session) ClientConfigNoResolveEndpoint(cfgs ...*aws.Config) client.Config {\n\ts = s.Copy(cfgs...)\n\n\tvar resolved endpoints.ResolvedEndpoint\n\n\tregion := aws.StringValue(s.Config.Region)\n\n\tif ep := aws.StringValue(s.Config.Endpoint); len(ep) > 0 {\n\t\tresolved.URL = endpoints.AddScheme(ep, aws.BoolValue(s.Config.DisableSSL))\n\t\tresolved.SigningRegion = region\n\t}\n\n\treturn client.Config{\n\t\tConfig:             s.Config,\n\t\tHandlers:           s.Handlers,\n\t\tEndpoint:           resolved.URL,\n\t\tSigningRegion:      resolved.SigningRegion,\n\t\tSigningNameDerived: resolved.SigningNameDerived,\n\t\tSigningName:        resolved.SigningName,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/session/shared_config.go",
    "content": "package session\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n\t\"github.com/aws/aws-sdk-go/aws/credentials\"\n\n\t\"github.com/aws/aws-sdk-go/internal/ini\"\n)\n\nconst (\n\t// Static Credentials group\n\taccessKeyIDKey  = `aws_access_key_id`     // group required\n\tsecretAccessKey = `aws_secret_access_key` // group required\n\tsessionTokenKey = `aws_session_token`     // optional\n\n\t// Assume Role Credentials group\n\troleArnKey          = `role_arn`          // group required\n\tsourceProfileKey    = `source_profile`    // group required (or credential_source)\n\tcredentialSourceKey = `credential_source` // group required (or source_profile)\n\texternalIDKey       = `external_id`       // optional\n\tmfaSerialKey        = `mfa_serial`        // optional\n\troleSessionNameKey  = `role_session_name` // optional\n\n\t// Additional Config fields\n\tregionKey = `region`\n\n\t// endpoint discovery group\n\tenableEndpointDiscoveryKey = `endpoint_discovery_enabled` // optional\n\t// External Credential Process\n\tcredentialProcessKey = `credential_process`\n\n\t// DefaultSharedConfigProfile is the default profile to be used when\n\t// loading configuration from the config files if another profile name\n\t// is not provided.\n\tDefaultSharedConfigProfile = `default`\n)\n\ntype assumeRoleConfig struct {\n\tRoleARN          string\n\tSourceProfile    string\n\tCredentialSource string\n\tExternalID       string\n\tMFASerial        string\n\tRoleSessionName  string\n}\n\n// sharedConfig represents the configuration fields of the SDK config files.\ntype sharedConfig struct {\n\t// Credentials values from the config file. Both aws_access_key_id\n\t// and aws_secret_access_key must be provided together in the same file\n\t// to be considered valid. The values will be ignored if not a complete group.\n\t// aws_session_token is an optional field that can be provided if both of the\n\t// other two fields are also provided.\n\t//\n\t//\taws_access_key_id\n\t//\taws_secret_access_key\n\t//\taws_session_token\n\tCreds credentials.Value\n\n\tAssumeRole       assumeRoleConfig\n\tAssumeRoleSource *sharedConfig\n\n\t// An external process to request credentials\n\tCredentialProcess string\n\n\t// Region is the region the SDK should use for looking up AWS service endpoints\n\t// and signing requests.\n\t//\n\t//\tregion\n\tRegion string\n\n\t// EnableEndpointDiscovery can be enabled in the shared config by setting\n\t// endpoint_discovery_enabled to true\n\t//\n\t//\tendpoint_discovery_enabled = true\n\tEnableEndpointDiscovery *bool\n}\n\ntype sharedConfigFile struct {\n\tFilename string\n\tIniData  ini.Sections\n}\n\n// loadSharedConfig retrieves the configuration from the list of files\n// using the profile provided. The order the files are listed will determine\n// precedence. Values in subsequent files will overwrite values defined in\n// earlier files.\n//\n// For example, given two files A and B. Both define credentials. If the order\n// of the files are A then B, B's credential values will be used instead of A's.\n//\n// See sharedConfig.setFromFile for information how the config files\n// will be loaded.\nfunc loadSharedConfig(profile string, filenames []string) (sharedConfig, error) {\n\tif len(profile) == 0 {\n\t\tprofile = DefaultSharedConfigProfile\n\t}\n\n\tfiles, err := loadSharedConfigIniFiles(filenames)\n\tif err != nil {\n\t\treturn sharedConfig{}, err\n\t}\n\n\tcfg := sharedConfig{}\n\tif err = cfg.setFromIniFiles(profile, files); err != nil {\n\t\treturn sharedConfig{}, err\n\t}\n\n\tif len(cfg.AssumeRole.SourceProfile) > 0 {\n\t\tif err := cfg.setAssumeRoleSource(profile, files); err != nil {\n\t\t\treturn sharedConfig{}, err\n\t\t}\n\t}\n\n\treturn cfg, nil\n}\n\nfunc loadSharedConfigIniFiles(filenames []string) ([]sharedConfigFile, error) {\n\tfiles := make([]sharedConfigFile, 0, len(filenames))\n\n\tfor _, filename := range filenames {\n\t\tsections, err := ini.OpenFile(filename)\n\t\tif aerr, ok := err.(awserr.Error); ok && aerr.Code() == ini.ErrCodeUnableToReadFile {\n\t\t\t// Skip files which can't be opened and read for whatever reason\n\t\t\tcontinue\n\t\t} else if err != nil {\n\t\t\treturn nil, SharedConfigLoadError{Filename: filename, Err: err}\n\t\t}\n\n\t\tfiles = append(files, sharedConfigFile{\n\t\t\tFilename: filename, IniData: sections,\n\t\t})\n\t}\n\n\treturn files, nil\n}\n\nfunc (cfg *sharedConfig) setAssumeRoleSource(origProfile string, files []sharedConfigFile) error {\n\tvar assumeRoleSrc sharedConfig\n\n\tif len(cfg.AssumeRole.CredentialSource) > 0 {\n\t\t// setAssumeRoleSource is only called when source_profile is found.\n\t\t// If both source_profile and credential_source are set, then\n\t\t// ErrSharedConfigSourceCollision will be returned\n\t\treturn ErrSharedConfigSourceCollision\n\t}\n\n\t// Multiple level assume role chains are not support\n\tif cfg.AssumeRole.SourceProfile == origProfile {\n\t\tassumeRoleSrc = *cfg\n\t\tassumeRoleSrc.AssumeRole = assumeRoleConfig{}\n\t} else {\n\t\terr := assumeRoleSrc.setFromIniFiles(cfg.AssumeRole.SourceProfile, files)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tif len(assumeRoleSrc.Creds.AccessKeyID) == 0 {\n\t\treturn SharedConfigAssumeRoleError{RoleARN: cfg.AssumeRole.RoleARN}\n\t}\n\n\tcfg.AssumeRoleSource = &assumeRoleSrc\n\n\treturn nil\n}\n\nfunc (cfg *sharedConfig) setFromIniFiles(profile string, files []sharedConfigFile) error {\n\t// Trim files from the list that don't exist.\n\tfor _, f := range files {\n\t\tif err := cfg.setFromIniFile(profile, f); err != nil {\n\t\t\tif _, ok := err.(SharedConfigProfileNotExistsError); ok {\n\t\t\t\t// Ignore proviles missings\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// setFromFile loads the configuration from the file using\n// the profile provided. A sharedConfig pointer type value is used so that\n// multiple config file loadings can be chained.\n//\n// Only loads complete logically grouped values, and will not set fields in cfg\n// for incomplete grouped values in the config. Such as credentials. For example\n// if a config file only includes aws_access_key_id but no aws_secret_access_key\n// the aws_access_key_id will be ignored.\nfunc (cfg *sharedConfig) setFromIniFile(profile string, file sharedConfigFile) error {\n\tsection, ok := file.IniData.GetSection(profile)\n\tif !ok {\n\t\t// Fallback to to alternate profile name: profile <name>\n\t\tsection, ok = file.IniData.GetSection(fmt.Sprintf(\"profile %s\", profile))\n\t\tif !ok {\n\t\t\treturn SharedConfigProfileNotExistsError{Profile: profile, Err: nil}\n\t\t}\n\t}\n\n\t// Shared Credentials\n\takid := section.String(accessKeyIDKey)\n\tsecret := section.String(secretAccessKey)\n\tif len(akid) > 0 && len(secret) > 0 {\n\t\tcfg.Creds = credentials.Value{\n\t\t\tAccessKeyID:     akid,\n\t\t\tSecretAccessKey: secret,\n\t\t\tSessionToken:    section.String(sessionTokenKey),\n\t\t\tProviderName:    fmt.Sprintf(\"SharedConfigCredentials: %s\", file.Filename),\n\t\t}\n\t}\n\n\t// Assume Role\n\troleArn := section.String(roleArnKey)\n\tsrcProfile := section.String(sourceProfileKey)\n\tcredentialSource := section.String(credentialSourceKey)\n\thasSource := len(srcProfile) > 0 || len(credentialSource) > 0\n\tif len(roleArn) > 0 && hasSource {\n\t\tcfg.AssumeRole = assumeRoleConfig{\n\t\t\tRoleARN:          roleArn,\n\t\t\tSourceProfile:    srcProfile,\n\t\t\tCredentialSource: credentialSource,\n\t\t\tExternalID:       section.String(externalIDKey),\n\t\t\tMFASerial:        section.String(mfaSerialKey),\n\t\t\tRoleSessionName:  section.String(roleSessionNameKey),\n\t\t}\n\t}\n\n\t// `credential_process`\n\tif credProc := section.String(credentialProcessKey); len(credProc) > 0 {\n\t\tcfg.CredentialProcess = credProc\n\t}\n\n\t// Region\n\tif v := section.String(regionKey); len(v) > 0 {\n\t\tcfg.Region = v\n\t}\n\n\t// Endpoint discovery\n\tif section.Has(enableEndpointDiscoveryKey) {\n\t\tv := section.Bool(enableEndpointDiscoveryKey)\n\t\tcfg.EnableEndpointDiscovery = &v\n\t}\n\n\treturn nil\n}\n\n// SharedConfigLoadError is an error for the shared config file failed to load.\ntype SharedConfigLoadError struct {\n\tFilename string\n\tErr      error\n}\n\n// Code is the short id of the error.\nfunc (e SharedConfigLoadError) Code() string {\n\treturn \"SharedConfigLoadError\"\n}\n\n// Message is the description of the error\nfunc (e SharedConfigLoadError) Message() string {\n\treturn fmt.Sprintf(\"failed to load config file, %s\", e.Filename)\n}\n\n// OrigErr is the underlying error that caused the failure.\nfunc (e SharedConfigLoadError) OrigErr() error {\n\treturn e.Err\n}\n\n// Error satisfies the error interface.\nfunc (e SharedConfigLoadError) Error() string {\n\treturn awserr.SprintError(e.Code(), e.Message(), \"\", e.Err)\n}\n\n// SharedConfigProfileNotExistsError is an error for the shared config when\n// the profile was not find in the config file.\ntype SharedConfigProfileNotExistsError struct {\n\tProfile string\n\tErr     error\n}\n\n// Code is the short id of the error.\nfunc (e SharedConfigProfileNotExistsError) Code() string {\n\treturn \"SharedConfigProfileNotExistsError\"\n}\n\n// Message is the description of the error\nfunc (e SharedConfigProfileNotExistsError) Message() string {\n\treturn fmt.Sprintf(\"failed to get profile, %s\", e.Profile)\n}\n\n// OrigErr is the underlying error that caused the failure.\nfunc (e SharedConfigProfileNotExistsError) OrigErr() error {\n\treturn e.Err\n}\n\n// Error satisfies the error interface.\nfunc (e SharedConfigProfileNotExistsError) Error() string {\n\treturn awserr.SprintError(e.Code(), e.Message(), \"\", e.Err)\n}\n\n// SharedConfigAssumeRoleError is an error for the shared config when the\n// profile contains assume role information, but that information is invalid\n// or not complete.\ntype SharedConfigAssumeRoleError struct {\n\tRoleARN string\n}\n\n// Code is the short id of the error.\nfunc (e SharedConfigAssumeRoleError) Code() string {\n\treturn \"SharedConfigAssumeRoleError\"\n}\n\n// Message is the description of the error\nfunc (e SharedConfigAssumeRoleError) Message() string {\n\treturn fmt.Sprintf(\"failed to load assume role for %s, source profile has no shared credentials\",\n\t\te.RoleARN)\n}\n\n// OrigErr is the underlying error that caused the failure.\nfunc (e SharedConfigAssumeRoleError) OrigErr() error {\n\treturn nil\n}\n\n// Error satisfies the error interface.\nfunc (e SharedConfigAssumeRoleError) Error() string {\n\treturn awserr.SprintError(e.Code(), e.Message(), \"\", nil)\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/signer/v4/header_rules.go",
    "content": "package v4\n\nimport (\n\t\"net/http\"\n\t\"strings\"\n)\n\n// validator houses a set of rule needed for validation of a\n// string value\ntype rules []rule\n\n// rule interface allows for more flexible rules and just simply\n// checks whether or not a value adheres to that rule\ntype rule interface {\n\tIsValid(value string) bool\n}\n\n// IsValid will iterate through all rules and see if any rules\n// apply to the value and supports nested rules\nfunc (r rules) IsValid(value string) bool {\n\tfor _, rule := range r {\n\t\tif rule.IsValid(value) {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// mapRule generic rule for maps\ntype mapRule map[string]struct{}\n\n// IsValid for the map rule satisfies whether it exists in the map\nfunc (m mapRule) IsValid(value string) bool {\n\t_, ok := m[value]\n\treturn ok\n}\n\n// whitelist is a generic rule for whitelisting\ntype whitelist struct {\n\trule\n}\n\n// IsValid for whitelist checks if the value is within the whitelist\nfunc (w whitelist) IsValid(value string) bool {\n\treturn w.rule.IsValid(value)\n}\n\n// blacklist is a generic rule for blacklisting\ntype blacklist struct {\n\trule\n}\n\n// IsValid for whitelist checks if the value is within the whitelist\nfunc (b blacklist) IsValid(value string) bool {\n\treturn !b.rule.IsValid(value)\n}\n\ntype patterns []string\n\n// IsValid for patterns checks each pattern and returns if a match has\n// been found\nfunc (p patterns) IsValid(value string) bool {\n\tfor _, pattern := range p {\n\t\tif strings.HasPrefix(http.CanonicalHeaderKey(value), pattern) {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// inclusiveRules rules allow for rules to depend on one another\ntype inclusiveRules []rule\n\n// IsValid will return true if all rules are true\nfunc (r inclusiveRules) IsValid(value string) bool {\n\tfor _, rule := range r {\n\t\tif !rule.IsValid(value) {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/signer/v4/options.go",
    "content": "package v4\n\n// WithUnsignedPayload will enable and set the UnsignedPayload field to\n// true of the signer.\nfunc WithUnsignedPayload(v4 *Signer) {\n\tv4.UnsignedPayload = true\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/signer/v4/uri_path.go",
    "content": "// +build go1.5\n\npackage v4\n\nimport (\n\t\"net/url\"\n\t\"strings\"\n)\n\nfunc getURIPath(u *url.URL) string {\n\tvar uri string\n\n\tif len(u.Opaque) > 0 {\n\t\turi = \"/\" + strings.Join(strings.Split(u.Opaque, \"/\")[3:], \"/\")\n\t} else {\n\t\turi = u.EscapedPath()\n\t}\n\n\tif len(uri) == 0 {\n\t\turi = \"/\"\n\t}\n\n\treturn uri\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/signer/v4/v4.go",
    "content": "// Package v4 implements signing for AWS V4 signer\n//\n// Provides request signing for request that need to be signed with\n// AWS V4 Signatures.\n//\n// Standalone Signer\n//\n// Generally using the signer outside of the SDK should not require any additional\n// logic when using Go v1.5 or higher. The signer does this by taking advantage\n// of the URL.EscapedPath method. If your request URI requires additional escaping\n// you many need to use the URL.Opaque to define what the raw URI should be sent\n// to the service as.\n//\n// The signer will first check the URL.Opaque field, and use its value if set.\n// The signer does require the URL.Opaque field to be set in the form of:\n//\n//     \"//<hostname>/<path>\"\n//\n//     // e.g.\n//     \"//example.com/some/path\"\n//\n// The leading \"//\" and hostname are required or the URL.Opaque escaping will\n// not work correctly.\n//\n// If URL.Opaque is not set the signer will fallback to the URL.EscapedPath()\n// method and using the returned value. If you're using Go v1.4 you must set\n// URL.Opaque if the URI path needs escaping. If URL.Opaque is not set with\n// Go v1.5 the signer will fallback to URL.Path.\n//\n// AWS v4 signature validation requires that the canonical string's URI path\n// element must be the URI escaped form of the HTTP request's path.\n// http://docs.aws.amazon.com/general/latest/gr/sigv4-create-canonical-request.html\n//\n// The Go HTTP client will perform escaping automatically on the request. Some\n// of these escaping may cause signature validation errors because the HTTP\n// request differs from the URI path or query that the signature was generated.\n// https://golang.org/pkg/net/url/#URL.EscapedPath\n//\n// Because of this, it is recommended that when using the signer outside of the\n// SDK that explicitly escaping the request prior to being signed is preferable,\n// and will help prevent signature validation errors. This can be done by setting\n// the URL.Opaque or URL.RawPath. The SDK will use URL.Opaque first and then\n// call URL.EscapedPath() if Opaque is not set.\n//\n// If signing a request intended for HTTP2 server, and you're using Go 1.6.2\n// through 1.7.4 you should use the URL.RawPath as the pre-escaped form of the\n// request URL. https://github.com/golang/go/issues/16847 points to a bug in\n// Go pre 1.8 that fails to make HTTP2 requests using absolute URL in the HTTP\n// message. URL.Opaque generally will force Go to make requests with absolute URL.\n// URL.RawPath does not do this, but RawPath must be a valid escaping of Path\n// or url.EscapedPath will ignore the RawPath escaping.\n//\n// Test `TestStandaloneSign` provides a complete example of using the signer\n// outside of the SDK and pre-escaping the URI path.\npackage v4\n\nimport (\n\t\"crypto/hmac\"\n\t\"crypto/sha256\"\n\t\"encoding/hex\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-go/aws/credentials\"\n\t\"github.com/aws/aws-sdk-go/aws/request\"\n\t\"github.com/aws/aws-sdk-go/internal/sdkio\"\n\t\"github.com/aws/aws-sdk-go/private/protocol/rest\"\n)\n\nconst (\n\tauthHeaderPrefix = \"AWS4-HMAC-SHA256\"\n\ttimeFormat       = \"20060102T150405Z\"\n\tshortTimeFormat  = \"20060102\"\n\n\t// emptyStringSHA256 is a SHA256 of an empty string\n\temptyStringSHA256 = `e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855`\n)\n\nvar ignoredHeaders = rules{\n\tblacklist{\n\t\tmapRule{\n\t\t\t\"Authorization\":   struct{}{},\n\t\t\t\"User-Agent\":      struct{}{},\n\t\t\t\"X-Amzn-Trace-Id\": struct{}{},\n\t\t},\n\t},\n}\n\n// requiredSignedHeaders is a whitelist for build canonical headers.\nvar requiredSignedHeaders = rules{\n\twhitelist{\n\t\tmapRule{\n\t\t\t\"Cache-Control\":                         struct{}{},\n\t\t\t\"Content-Disposition\":                   struct{}{},\n\t\t\t\"Content-Encoding\":                      struct{}{},\n\t\t\t\"Content-Language\":                      struct{}{},\n\t\t\t\"Content-Md5\":                           struct{}{},\n\t\t\t\"Content-Type\":                          struct{}{},\n\t\t\t\"Expires\":                               struct{}{},\n\t\t\t\"If-Match\":                              struct{}{},\n\t\t\t\"If-Modified-Since\":                     struct{}{},\n\t\t\t\"If-None-Match\":                         struct{}{},\n\t\t\t\"If-Unmodified-Since\":                   struct{}{},\n\t\t\t\"Range\":                                 struct{}{},\n\t\t\t\"X-Amz-Acl\":                             struct{}{},\n\t\t\t\"X-Amz-Copy-Source\":                     struct{}{},\n\t\t\t\"X-Amz-Copy-Source-If-Match\":            struct{}{},\n\t\t\t\"X-Amz-Copy-Source-If-Modified-Since\":   struct{}{},\n\t\t\t\"X-Amz-Copy-Source-If-None-Match\":       struct{}{},\n\t\t\t\"X-Amz-Copy-Source-If-Unmodified-Since\": struct{}{},\n\t\t\t\"X-Amz-Copy-Source-Range\":               struct{}{},\n\t\t\t\"X-Amz-Copy-Source-Server-Side-Encryption-Customer-Algorithm\": struct{}{},\n\t\t\t\"X-Amz-Copy-Source-Server-Side-Encryption-Customer-Key\":       struct{}{},\n\t\t\t\"X-Amz-Copy-Source-Server-Side-Encryption-Customer-Key-Md5\":   struct{}{},\n\t\t\t\"X-Amz-Grant-Full-control\":                                    struct{}{},\n\t\t\t\"X-Amz-Grant-Read\":                                            struct{}{},\n\t\t\t\"X-Amz-Grant-Read-Acp\":                                        struct{}{},\n\t\t\t\"X-Amz-Grant-Write\":                                           struct{}{},\n\t\t\t\"X-Amz-Grant-Write-Acp\":                                       struct{}{},\n\t\t\t\"X-Amz-Metadata-Directive\":                                    struct{}{},\n\t\t\t\"X-Amz-Mfa\":                                                   struct{}{},\n\t\t\t\"X-Amz-Request-Payer\":                                         struct{}{},\n\t\t\t\"X-Amz-Server-Side-Encryption\":                                struct{}{},\n\t\t\t\"X-Amz-Server-Side-Encryption-Aws-Kms-Key-Id\":                 struct{}{},\n\t\t\t\"X-Amz-Server-Side-Encryption-Customer-Algorithm\":             struct{}{},\n\t\t\t\"X-Amz-Server-Side-Encryption-Customer-Key\":                   struct{}{},\n\t\t\t\"X-Amz-Server-Side-Encryption-Customer-Key-Md5\":               struct{}{},\n\t\t\t\"X-Amz-Storage-Class\":                                         struct{}{},\n\t\t\t\"X-Amz-Tagging\":                                               struct{}{},\n\t\t\t\"X-Amz-Website-Redirect-Location\":                             struct{}{},\n\t\t\t\"X-Amz-Content-Sha256\":                                        struct{}{},\n\t\t},\n\t},\n\tpatterns{\"X-Amz-Meta-\"},\n}\n\n// allowedHoisting is a whitelist for build query headers. The boolean value\n// represents whether or not it is a pattern.\nvar allowedQueryHoisting = inclusiveRules{\n\tblacklist{requiredSignedHeaders},\n\tpatterns{\"X-Amz-\"},\n}\n\n// Signer applies AWS v4 signing to given request. Use this to sign requests\n// that need to be signed with AWS V4 Signatures.\ntype Signer struct {\n\t// The authentication credentials the request will be signed against.\n\t// This value must be set to sign requests.\n\tCredentials *credentials.Credentials\n\n\t// Sets the log level the signer should use when reporting information to\n\t// the logger. If the logger is nil nothing will be logged. See\n\t// aws.LogLevelType for more information on available logging levels\n\t//\n\t// By default nothing will be logged.\n\tDebug aws.LogLevelType\n\n\t// The logger loging information will be written to. If there the logger\n\t// is nil, nothing will be logged.\n\tLogger aws.Logger\n\n\t// Disables the Signer's moving HTTP header key/value pairs from the HTTP\n\t// request header to the request's query string. This is most commonly used\n\t// with pre-signed requests preventing headers from being added to the\n\t// request's query string.\n\tDisableHeaderHoisting bool\n\n\t// Disables the automatic escaping of the URI path of the request for the\n\t// siganture's canonical string's path. For services that do not need additional\n\t// escaping then use this to disable the signer escaping the path.\n\t//\n\t// S3 is an example of a service that does not need additional escaping.\n\t//\n\t// http://docs.aws.amazon.com/general/latest/gr/sigv4-create-canonical-request.html\n\tDisableURIPathEscaping bool\n\n\t// Disables the automatical setting of the HTTP request's Body field with the\n\t// io.ReadSeeker passed in to the signer. This is useful if you're using a\n\t// custom wrapper around the body for the io.ReadSeeker and want to preserve\n\t// the Body value on the Request.Body.\n\t//\n\t// This does run the risk of signing a request with a body that will not be\n\t// sent in the request. Need to ensure that the underlying data of the Body\n\t// values are the same.\n\tDisableRequestBodyOverwrite bool\n\n\t// currentTimeFn returns the time value which represents the current time.\n\t// This value should only be used for testing. If it is nil the default\n\t// time.Now will be used.\n\tcurrentTimeFn func() time.Time\n\n\t// UnsignedPayload will prevent signing of the payload. This will only\n\t// work for services that have support for this.\n\tUnsignedPayload bool\n}\n\n// NewSigner returns a Signer pointer configured with the credentials and optional\n// option values provided. If not options are provided the Signer will use its\n// default configuration.\nfunc NewSigner(credentials *credentials.Credentials, options ...func(*Signer)) *Signer {\n\tv4 := &Signer{\n\t\tCredentials: credentials,\n\t}\n\n\tfor _, option := range options {\n\t\toption(v4)\n\t}\n\n\treturn v4\n}\n\ntype signingCtx struct {\n\tServiceName      string\n\tRegion           string\n\tRequest          *http.Request\n\tBody             io.ReadSeeker\n\tQuery            url.Values\n\tTime             time.Time\n\tExpireTime       time.Duration\n\tSignedHeaderVals http.Header\n\n\tDisableURIPathEscaping bool\n\n\tcredValues         credentials.Value\n\tisPresign          bool\n\tformattedTime      string\n\tformattedShortTime string\n\tunsignedPayload    bool\n\n\tbodyDigest       string\n\tsignedHeaders    string\n\tcanonicalHeaders string\n\tcanonicalString  string\n\tcredentialString string\n\tstringToSign     string\n\tsignature        string\n\tauthorization    string\n}\n\n// Sign signs AWS v4 requests with the provided body, service name, region the\n// request is made to, and time the request is signed at. The signTime allows\n// you to specify that a request is signed for the future, and cannot be\n// used until then.\n//\n// Returns a list of HTTP headers that were included in the signature or an\n// error if signing the request failed. Generally for signed requests this value\n// is not needed as the full request context will be captured by the http.Request\n// value. It is included for reference though.\n//\n// Sign will set the request's Body to be the `body` parameter passed in. If\n// the body is not already an io.ReadCloser, it will be wrapped within one. If\n// a `nil` body parameter passed to Sign, the request's Body field will be\n// also set to nil. Its important to note that this functionality will not\n// change the request's ContentLength of the request.\n//\n// Sign differs from Presign in that it will sign the request using HTTP\n// header values. This type of signing is intended for http.Request values that\n// will not be shared, or are shared in a way the header values on the request\n// will not be lost.\n//\n// The requests body is an io.ReadSeeker so the SHA256 of the body can be\n// generated. To bypass the signer computing the hash you can set the\n// \"X-Amz-Content-Sha256\" header with a precomputed value. The signer will\n// only compute the hash if the request header value is empty.\nfunc (v4 Signer) Sign(r *http.Request, body io.ReadSeeker, service, region string, signTime time.Time) (http.Header, error) {\n\treturn v4.signWithBody(r, body, service, region, 0, false, signTime)\n}\n\n// Presign signs AWS v4 requests with the provided body, service name, region\n// the request is made to, and time the request is signed at. The signTime\n// allows you to specify that a request is signed for the future, and cannot\n// be used until then.\n//\n// Returns a list of HTTP headers that were included in the signature or an\n// error if signing the request failed. For presigned requests these headers\n// and their values must be included on the HTTP request when it is made. This\n// is helpful to know what header values need to be shared with the party the\n// presigned request will be distributed to.\n//\n// Presign differs from Sign in that it will sign the request using query string\n// instead of header values. This allows you to share the Presigned Request's\n// URL with third parties, or distribute it throughout your system with minimal\n// dependencies.\n//\n// Presign also takes an exp value which is the duration the\n// signed request will be valid after the signing time. This is allows you to\n// set when the request will expire.\n//\n// The requests body is an io.ReadSeeker so the SHA256 of the body can be\n// generated. To bypass the signer computing the hash you can set the\n// \"X-Amz-Content-Sha256\" header with a precomputed value. The signer will\n// only compute the hash if the request header value is empty.\n//\n// Presigning a S3 request will not compute the body's SHA256 hash by default.\n// This is done due to the general use case for S3 presigned URLs is to share\n// PUT/GET capabilities. If you would like to include the body's SHA256 in the\n// presigned request's signature you can set the \"X-Amz-Content-Sha256\"\n// HTTP header and that will be included in the request's signature.\nfunc (v4 Signer) Presign(r *http.Request, body io.ReadSeeker, service, region string, exp time.Duration, signTime time.Time) (http.Header, error) {\n\treturn v4.signWithBody(r, body, service, region, exp, true, signTime)\n}\n\nfunc (v4 Signer) signWithBody(r *http.Request, body io.ReadSeeker, service, region string, exp time.Duration, isPresign bool, signTime time.Time) (http.Header, error) {\n\tcurrentTimeFn := v4.currentTimeFn\n\tif currentTimeFn == nil {\n\t\tcurrentTimeFn = time.Now\n\t}\n\n\tctx := &signingCtx{\n\t\tRequest:                r,\n\t\tBody:                   body,\n\t\tQuery:                  r.URL.Query(),\n\t\tTime:                   signTime,\n\t\tExpireTime:             exp,\n\t\tisPresign:              isPresign,\n\t\tServiceName:            service,\n\t\tRegion:                 region,\n\t\tDisableURIPathEscaping: v4.DisableURIPathEscaping,\n\t\tunsignedPayload:        v4.UnsignedPayload,\n\t}\n\n\tfor key := range ctx.Query {\n\t\tsort.Strings(ctx.Query[key])\n\t}\n\n\tif ctx.isRequestSigned() {\n\t\tctx.Time = currentTimeFn()\n\t\tctx.handlePresignRemoval()\n\t}\n\n\tvar err error\n\tctx.credValues, err = v4.Credentials.Get()\n\tif err != nil {\n\t\treturn http.Header{}, err\n\t}\n\n\tctx.sanitizeHostForHeader()\n\tctx.assignAmzQueryValues()\n\tif err := ctx.build(v4.DisableHeaderHoisting); err != nil {\n\t\treturn nil, err\n\t}\n\n\t// If the request is not presigned the body should be attached to it. This\n\t// prevents the confusion of wanting to send a signed request without\n\t// the body the request was signed for attached.\n\tif !(v4.DisableRequestBodyOverwrite || ctx.isPresign) {\n\t\tvar reader io.ReadCloser\n\t\tif body != nil {\n\t\t\tvar ok bool\n\t\t\tif reader, ok = body.(io.ReadCloser); !ok {\n\t\t\t\treader = ioutil.NopCloser(body)\n\t\t\t}\n\t\t}\n\t\tr.Body = reader\n\t}\n\n\tif v4.Debug.Matches(aws.LogDebugWithSigning) {\n\t\tv4.logSigningInfo(ctx)\n\t}\n\n\treturn ctx.SignedHeaderVals, nil\n}\n\nfunc (ctx *signingCtx) sanitizeHostForHeader() {\n\trequest.SanitizeHostForHeader(ctx.Request)\n}\n\nfunc (ctx *signingCtx) handlePresignRemoval() {\n\tif !ctx.isPresign {\n\t\treturn\n\t}\n\n\t// The credentials have expired for this request. The current signing\n\t// is invalid, and needs to be request because the request will fail.\n\tctx.removePresign()\n\n\t// Update the request's query string to ensure the values stays in\n\t// sync in the case retrieving the new credentials fails.\n\tctx.Request.URL.RawQuery = ctx.Query.Encode()\n}\n\nfunc (ctx *signingCtx) assignAmzQueryValues() {\n\tif ctx.isPresign {\n\t\tctx.Query.Set(\"X-Amz-Algorithm\", authHeaderPrefix)\n\t\tif ctx.credValues.SessionToken != \"\" {\n\t\t\tctx.Query.Set(\"X-Amz-Security-Token\", ctx.credValues.SessionToken)\n\t\t} else {\n\t\t\tctx.Query.Del(\"X-Amz-Security-Token\")\n\t\t}\n\n\t\treturn\n\t}\n\n\tif ctx.credValues.SessionToken != \"\" {\n\t\tctx.Request.Header.Set(\"X-Amz-Security-Token\", ctx.credValues.SessionToken)\n\t}\n}\n\n// SignRequestHandler is a named request handler the SDK will use to sign\n// service client request with using the V4 signature.\nvar SignRequestHandler = request.NamedHandler{\n\tName: \"v4.SignRequestHandler\", Fn: SignSDKRequest,\n}\n\n// SignSDKRequest signs an AWS request with the V4 signature. This\n// request handler should only be used with the SDK's built in service client's\n// API operation requests.\n//\n// This function should not be used on its on its own, but in conjunction with\n// an AWS service client's API operation call. To sign a standalone request\n// not created by a service client's API operation method use the \"Sign\" or\n// \"Presign\" functions of the \"Signer\" type.\n//\n// If the credentials of the request's config are set to\n// credentials.AnonymousCredentials the request will not be signed.\nfunc SignSDKRequest(req *request.Request) {\n\tSignSDKRequestWithCurrentTime(req, time.Now)\n}\n\n// BuildNamedHandler will build a generic handler for signing.\nfunc BuildNamedHandler(name string, opts ...func(*Signer)) request.NamedHandler {\n\treturn request.NamedHandler{\n\t\tName: name,\n\t\tFn: func(req *request.Request) {\n\t\t\tSignSDKRequestWithCurrentTime(req, time.Now, opts...)\n\t\t},\n\t}\n}\n\n// SignSDKRequestWithCurrentTime will sign the SDK's request using the time\n// function passed in. Behaves the same as SignSDKRequest with the exception\n// the request is signed with the value returned by the current time function.\nfunc SignSDKRequestWithCurrentTime(req *request.Request, curTimeFn func() time.Time, opts ...func(*Signer)) {\n\t// If the request does not need to be signed ignore the signing of the\n\t// request if the AnonymousCredentials object is used.\n\tif req.Config.Credentials == credentials.AnonymousCredentials {\n\t\treturn\n\t}\n\n\tregion := req.ClientInfo.SigningRegion\n\tif region == \"\" {\n\t\tregion = aws.StringValue(req.Config.Region)\n\t}\n\n\tname := req.ClientInfo.SigningName\n\tif name == \"\" {\n\t\tname = req.ClientInfo.ServiceName\n\t}\n\n\tv4 := NewSigner(req.Config.Credentials, func(v4 *Signer) {\n\t\tv4.Debug = req.Config.LogLevel.Value()\n\t\tv4.Logger = req.Config.Logger\n\t\tv4.DisableHeaderHoisting = req.NotHoist\n\t\tv4.currentTimeFn = curTimeFn\n\t\tif name == \"s3\" {\n\t\t\t// S3 service should not have any escaping applied\n\t\t\tv4.DisableURIPathEscaping = true\n\t\t}\n\t\t// Prevents setting the HTTPRequest's Body. Since the Body could be\n\t\t// wrapped in a custom io.Closer that we do not want to be stompped\n\t\t// on top of by the signer.\n\t\tv4.DisableRequestBodyOverwrite = true\n\t})\n\n\tfor _, opt := range opts {\n\t\topt(v4)\n\t}\n\n\tcurTime := curTimeFn()\n\tsignedHeaders, err := v4.signWithBody(req.HTTPRequest, req.GetBody(),\n\t\tname, region, req.ExpireTime, req.ExpireTime > 0, curTime,\n\t)\n\tif err != nil {\n\t\treq.Error = err\n\t\treq.SignedHeaderVals = nil\n\t\treturn\n\t}\n\n\treq.SignedHeaderVals = signedHeaders\n\treq.LastSignedAt = curTime\n}\n\nconst logSignInfoMsg = `DEBUG: Request Signature:\n---[ CANONICAL STRING  ]-----------------------------\n%s\n---[ STRING TO SIGN ]--------------------------------\n%s%s\n-----------------------------------------------------`\nconst logSignedURLMsg = `\n---[ SIGNED URL ]------------------------------------\n%s`\n\nfunc (v4 *Signer) logSigningInfo(ctx *signingCtx) {\n\tsignedURLMsg := \"\"\n\tif ctx.isPresign {\n\t\tsignedURLMsg = fmt.Sprintf(logSignedURLMsg, ctx.Request.URL.String())\n\t}\n\tmsg := fmt.Sprintf(logSignInfoMsg, ctx.canonicalString, ctx.stringToSign, signedURLMsg)\n\tv4.Logger.Log(msg)\n}\n\nfunc (ctx *signingCtx) build(disableHeaderHoisting bool) error {\n\tctx.buildTime()             // no depends\n\tctx.buildCredentialString() // no depends\n\n\tif err := ctx.buildBodyDigest(); err != nil {\n\t\treturn err\n\t}\n\n\tunsignedHeaders := ctx.Request.Header\n\tif ctx.isPresign {\n\t\tif !disableHeaderHoisting {\n\t\t\turlValues := url.Values{}\n\t\t\turlValues, unsignedHeaders = buildQuery(allowedQueryHoisting, unsignedHeaders) // no depends\n\t\t\tfor k := range urlValues {\n\t\t\t\tctx.Query[k] = urlValues[k]\n\t\t\t}\n\t\t}\n\t}\n\n\tctx.buildCanonicalHeaders(ignoredHeaders, unsignedHeaders)\n\tctx.buildCanonicalString() // depends on canon headers / signed headers\n\tctx.buildStringToSign()    // depends on canon string\n\tctx.buildSignature()       // depends on string to sign\n\n\tif ctx.isPresign {\n\t\tctx.Request.URL.RawQuery += \"&X-Amz-Signature=\" + ctx.signature\n\t} else {\n\t\tparts := []string{\n\t\t\tauthHeaderPrefix + \" Credential=\" + ctx.credValues.AccessKeyID + \"/\" + ctx.credentialString,\n\t\t\t\"SignedHeaders=\" + ctx.signedHeaders,\n\t\t\t\"Signature=\" + ctx.signature,\n\t\t}\n\t\tctx.Request.Header.Set(\"Authorization\", strings.Join(parts, \", \"))\n\t}\n\n\treturn nil\n}\n\nfunc (ctx *signingCtx) buildTime() {\n\tctx.formattedTime = ctx.Time.UTC().Format(timeFormat)\n\tctx.formattedShortTime = ctx.Time.UTC().Format(shortTimeFormat)\n\n\tif ctx.isPresign {\n\t\tduration := int64(ctx.ExpireTime / time.Second)\n\t\tctx.Query.Set(\"X-Amz-Date\", ctx.formattedTime)\n\t\tctx.Query.Set(\"X-Amz-Expires\", strconv.FormatInt(duration, 10))\n\t} else {\n\t\tctx.Request.Header.Set(\"X-Amz-Date\", ctx.formattedTime)\n\t}\n}\n\nfunc (ctx *signingCtx) buildCredentialString() {\n\tctx.credentialString = strings.Join([]string{\n\t\tctx.formattedShortTime,\n\t\tctx.Region,\n\t\tctx.ServiceName,\n\t\t\"aws4_request\",\n\t}, \"/\")\n\n\tif ctx.isPresign {\n\t\tctx.Query.Set(\"X-Amz-Credential\", ctx.credValues.AccessKeyID+\"/\"+ctx.credentialString)\n\t}\n}\n\nfunc buildQuery(r rule, header http.Header) (url.Values, http.Header) {\n\tquery := url.Values{}\n\tunsignedHeaders := http.Header{}\n\tfor k, h := range header {\n\t\tif r.IsValid(k) {\n\t\t\tquery[k] = h\n\t\t} else {\n\t\t\tunsignedHeaders[k] = h\n\t\t}\n\t}\n\n\treturn query, unsignedHeaders\n}\nfunc (ctx *signingCtx) buildCanonicalHeaders(r rule, header http.Header) {\n\tvar headers []string\n\theaders = append(headers, \"host\")\n\tfor k, v := range header {\n\t\tcanonicalKey := http.CanonicalHeaderKey(k)\n\t\tif !r.IsValid(canonicalKey) {\n\t\t\tcontinue // ignored header\n\t\t}\n\t\tif ctx.SignedHeaderVals == nil {\n\t\t\tctx.SignedHeaderVals = make(http.Header)\n\t\t}\n\n\t\tlowerCaseKey := strings.ToLower(k)\n\t\tif _, ok := ctx.SignedHeaderVals[lowerCaseKey]; ok {\n\t\t\t// include additional values\n\t\t\tctx.SignedHeaderVals[lowerCaseKey] = append(ctx.SignedHeaderVals[lowerCaseKey], v...)\n\t\t\tcontinue\n\t\t}\n\n\t\theaders = append(headers, lowerCaseKey)\n\t\tctx.SignedHeaderVals[lowerCaseKey] = v\n\t}\n\tsort.Strings(headers)\n\n\tctx.signedHeaders = strings.Join(headers, \";\")\n\n\tif ctx.isPresign {\n\t\tctx.Query.Set(\"X-Amz-SignedHeaders\", ctx.signedHeaders)\n\t}\n\n\theaderValues := make([]string, len(headers))\n\tfor i, k := range headers {\n\t\tif k == \"host\" {\n\t\t\tif ctx.Request.Host != \"\" {\n\t\t\t\theaderValues[i] = \"host:\" + ctx.Request.Host\n\t\t\t} else {\n\t\t\t\theaderValues[i] = \"host:\" + ctx.Request.URL.Host\n\t\t\t}\n\t\t} else {\n\t\t\theaderValues[i] = k + \":\" +\n\t\t\t\tstrings.Join(ctx.SignedHeaderVals[k], \",\")\n\t\t}\n\t}\n\tstripExcessSpaces(headerValues)\n\tctx.canonicalHeaders = strings.Join(headerValues, \"\\n\")\n}\n\nfunc (ctx *signingCtx) buildCanonicalString() {\n\tctx.Request.URL.RawQuery = strings.Replace(ctx.Query.Encode(), \"+\", \"%20\", -1)\n\n\turi := getURIPath(ctx.Request.URL)\n\n\tif !ctx.DisableURIPathEscaping {\n\t\turi = rest.EscapePath(uri, false)\n\t}\n\n\tctx.canonicalString = strings.Join([]string{\n\t\tctx.Request.Method,\n\t\turi,\n\t\tctx.Request.URL.RawQuery,\n\t\tctx.canonicalHeaders + \"\\n\",\n\t\tctx.signedHeaders,\n\t\tctx.bodyDigest,\n\t}, \"\\n\")\n}\n\nfunc (ctx *signingCtx) buildStringToSign() {\n\tctx.stringToSign = strings.Join([]string{\n\t\tauthHeaderPrefix,\n\t\tctx.formattedTime,\n\t\tctx.credentialString,\n\t\thex.EncodeToString(makeSha256([]byte(ctx.canonicalString))),\n\t}, \"\\n\")\n}\n\nfunc (ctx *signingCtx) buildSignature() {\n\tsecret := ctx.credValues.SecretAccessKey\n\tdate := makeHmac([]byte(\"AWS4\"+secret), []byte(ctx.formattedShortTime))\n\tregion := makeHmac(date, []byte(ctx.Region))\n\tservice := makeHmac(region, []byte(ctx.ServiceName))\n\tcredentials := makeHmac(service, []byte(\"aws4_request\"))\n\tsignature := makeHmac(credentials, []byte(ctx.stringToSign))\n\tctx.signature = hex.EncodeToString(signature)\n}\n\nfunc (ctx *signingCtx) buildBodyDigest() error {\n\thash := ctx.Request.Header.Get(\"X-Amz-Content-Sha256\")\n\tif hash == \"\" {\n\t\tincludeSHA256Header := ctx.unsignedPayload ||\n\t\t\tctx.ServiceName == \"s3\" ||\n\t\t\tctx.ServiceName == \"glacier\"\n\n\t\ts3Presign := ctx.isPresign && ctx.ServiceName == \"s3\"\n\n\t\tif ctx.unsignedPayload || s3Presign {\n\t\t\thash = \"UNSIGNED-PAYLOAD\"\n\t\t\tincludeSHA256Header = !s3Presign\n\t\t} else if ctx.Body == nil {\n\t\t\thash = emptyStringSHA256\n\t\t} else {\n\t\t\tif !aws.IsReaderSeekable(ctx.Body) {\n\t\t\t\treturn fmt.Errorf(\"cannot use unseekable request body %T, for signed request with body\", ctx.Body)\n\t\t\t}\n\t\t\thash = hex.EncodeToString(makeSha256Reader(ctx.Body))\n\t\t}\n\n\t\tif includeSHA256Header {\n\t\t\tctx.Request.Header.Set(\"X-Amz-Content-Sha256\", hash)\n\t\t}\n\t}\n\tctx.bodyDigest = hash\n\n\treturn nil\n}\n\n// isRequestSigned returns if the request is currently signed or presigned\nfunc (ctx *signingCtx) isRequestSigned() bool {\n\tif ctx.isPresign && ctx.Query.Get(\"X-Amz-Signature\") != \"\" {\n\t\treturn true\n\t}\n\tif ctx.Request.Header.Get(\"Authorization\") != \"\" {\n\t\treturn true\n\t}\n\n\treturn false\n}\n\n// unsign removes signing flags for both signed and presigned requests.\nfunc (ctx *signingCtx) removePresign() {\n\tctx.Query.Del(\"X-Amz-Algorithm\")\n\tctx.Query.Del(\"X-Amz-Signature\")\n\tctx.Query.Del(\"X-Amz-Security-Token\")\n\tctx.Query.Del(\"X-Amz-Date\")\n\tctx.Query.Del(\"X-Amz-Expires\")\n\tctx.Query.Del(\"X-Amz-Credential\")\n\tctx.Query.Del(\"X-Amz-SignedHeaders\")\n}\n\nfunc makeHmac(key []byte, data []byte) []byte {\n\thash := hmac.New(sha256.New, key)\n\thash.Write(data)\n\treturn hash.Sum(nil)\n}\n\nfunc makeSha256(data []byte) []byte {\n\thash := sha256.New()\n\thash.Write(data)\n\treturn hash.Sum(nil)\n}\n\nfunc makeSha256Reader(reader io.ReadSeeker) []byte {\n\thash := sha256.New()\n\tstart, _ := reader.Seek(0, sdkio.SeekCurrent)\n\tdefer reader.Seek(start, sdkio.SeekStart)\n\n\t// Use CopyN to avoid allocating the 32KB buffer in io.Copy for bodies\n\t// smaller than 32KB. Fall back to io.Copy if we fail to determine the size.\n\tsize, err := aws.SeekerLen(reader)\n\tif err != nil {\n\t\tio.Copy(hash, reader)\n\t} else {\n\t\tio.CopyN(hash, reader, size)\n\t}\n\n\treturn hash.Sum(nil)\n}\n\nconst doubleSpace = \"  \"\n\n// stripExcessSpaces will rewrite the passed in slice's string values to not\n// contain multiple side-by-side spaces.\nfunc stripExcessSpaces(vals []string) {\n\tvar j, k, l, m, spaces int\n\tfor i, str := range vals {\n\t\t// Trim trailing spaces\n\t\tfor j = len(str) - 1; j >= 0 && str[j] == ' '; j-- {\n\t\t}\n\n\t\t// Trim leading spaces\n\t\tfor k = 0; k < j && str[k] == ' '; k++ {\n\t\t}\n\t\tstr = str[k : j+1]\n\n\t\t// Strip multiple spaces.\n\t\tj = strings.Index(str, doubleSpace)\n\t\tif j < 0 {\n\t\t\tvals[i] = str\n\t\t\tcontinue\n\t\t}\n\n\t\tbuf := []byte(str)\n\t\tfor k, m, l = j, j, len(buf); k < l; k++ {\n\t\t\tif buf[k] == ' ' {\n\t\t\t\tif spaces == 0 {\n\t\t\t\t\t// First space.\n\t\t\t\t\tbuf[m] = buf[k]\n\t\t\t\t\tm++\n\t\t\t\t}\n\t\t\t\tspaces++\n\t\t\t} else {\n\t\t\t\t// End of multiple spaces.\n\t\t\t\tspaces = 0\n\t\t\t\tbuf[m] = buf[k]\n\t\t\t\tm++\n\t\t\t}\n\t\t}\n\n\t\tvals[i] = string(buf[:m])\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/types.go",
    "content": "package aws\n\nimport (\n\t\"io\"\n\t\"sync\"\n\n\t\"github.com/aws/aws-sdk-go/internal/sdkio\"\n)\n\n// ReadSeekCloser wraps a io.Reader returning a ReaderSeekerCloser. Allows the\n// SDK to accept an io.Reader that is not also an io.Seeker for unsigned\n// streaming payload API operations.\n//\n// A ReadSeekCloser wrapping an nonseekable io.Reader used in an API\n// operation's input will prevent that operation being retried in the case of\n// network errors, and cause operation requests to fail if the operation\n// requires payload signing.\n//\n// Note: If using With S3 PutObject to stream an object upload The SDK's S3\n// Upload manager (s3manager.Uploader) provides support for streaming with the\n// ability to retry network errors.\nfunc ReadSeekCloser(r io.Reader) ReaderSeekerCloser {\n\treturn ReaderSeekerCloser{r}\n}\n\n// ReaderSeekerCloser represents a reader that can also delegate io.Seeker and\n// io.Closer interfaces to the underlying object if they are available.\ntype ReaderSeekerCloser struct {\n\tr io.Reader\n}\n\n// IsReaderSeekable returns if the underlying reader type can be seeked. A\n// io.Reader might not actually be seekable if it is the ReaderSeekerCloser\n// type.\nfunc IsReaderSeekable(r io.Reader) bool {\n\tswitch v := r.(type) {\n\tcase ReaderSeekerCloser:\n\t\treturn v.IsSeeker()\n\tcase *ReaderSeekerCloser:\n\t\treturn v.IsSeeker()\n\tcase io.ReadSeeker:\n\t\treturn true\n\tdefault:\n\t\treturn false\n\t}\n}\n\n// Read reads from the reader up to size of p. The number of bytes read, and\n// error if it occurred will be returned.\n//\n// If the reader is not an io.Reader zero bytes read, and nil error will be\n// returned.\n//\n// Performs the same functionality as io.Reader Read\nfunc (r ReaderSeekerCloser) Read(p []byte) (int, error) {\n\tswitch t := r.r.(type) {\n\tcase io.Reader:\n\t\treturn t.Read(p)\n\t}\n\treturn 0, nil\n}\n\n// Seek sets the offset for the next Read to offset, interpreted according to\n// whence: 0 means relative to the origin of the file, 1 means relative to the\n// current offset, and 2 means relative to the end. Seek returns the new offset\n// and an error, if any.\n//\n// If the ReaderSeekerCloser is not an io.Seeker nothing will be done.\nfunc (r ReaderSeekerCloser) Seek(offset int64, whence int) (int64, error) {\n\tswitch t := r.r.(type) {\n\tcase io.Seeker:\n\t\treturn t.Seek(offset, whence)\n\t}\n\treturn int64(0), nil\n}\n\n// IsSeeker returns if the underlying reader is also a seeker.\nfunc (r ReaderSeekerCloser) IsSeeker() bool {\n\t_, ok := r.r.(io.Seeker)\n\treturn ok\n}\n\n// HasLen returns the length of the underlying reader if the value implements\n// the Len() int method.\nfunc (r ReaderSeekerCloser) HasLen() (int, bool) {\n\ttype lenner interface {\n\t\tLen() int\n\t}\n\n\tif lr, ok := r.r.(lenner); ok {\n\t\treturn lr.Len(), true\n\t}\n\n\treturn 0, false\n}\n\n// GetLen returns the length of the bytes remaining in the underlying reader.\n// Checks first for Len(), then io.Seeker to determine the size of the\n// underlying reader.\n//\n// Will return -1 if the length cannot be determined.\nfunc (r ReaderSeekerCloser) GetLen() (int64, error) {\n\tif l, ok := r.HasLen(); ok {\n\t\treturn int64(l), nil\n\t}\n\n\tif s, ok := r.r.(io.Seeker); ok {\n\t\treturn seekerLen(s)\n\t}\n\n\treturn -1, nil\n}\n\n// SeekerLen attempts to get the number of bytes remaining at the seeker's\n// current position.  Returns the number of bytes remaining or error.\nfunc SeekerLen(s io.Seeker) (int64, error) {\n\t// Determine if the seeker is actually seekable. ReaderSeekerCloser\n\t// hides the fact that a io.Readers might not actually be seekable.\n\tswitch v := s.(type) {\n\tcase ReaderSeekerCloser:\n\t\treturn v.GetLen()\n\tcase *ReaderSeekerCloser:\n\t\treturn v.GetLen()\n\t}\n\n\treturn seekerLen(s)\n}\n\nfunc seekerLen(s io.Seeker) (int64, error) {\n\tcurOffset, err := s.Seek(0, sdkio.SeekCurrent)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\tendOffset, err := s.Seek(0, sdkio.SeekEnd)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\t_, err = s.Seek(curOffset, sdkio.SeekStart)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\treturn endOffset - curOffset, nil\n}\n\n// Close closes the ReaderSeekerCloser.\n//\n// If the ReaderSeekerCloser is not an io.Closer nothing will be done.\nfunc (r ReaderSeekerCloser) Close() error {\n\tswitch t := r.r.(type) {\n\tcase io.Closer:\n\t\treturn t.Close()\n\t}\n\treturn nil\n}\n\n// A WriteAtBuffer provides a in memory buffer supporting the io.WriterAt interface\n// Can be used with the s3manager.Downloader to download content to a buffer\n// in memory. Safe to use concurrently.\ntype WriteAtBuffer struct {\n\tbuf []byte\n\tm   sync.Mutex\n\n\t// GrowthCoeff defines the growth rate of the internal buffer. By\n\t// default, the growth rate is 1, where expanding the internal\n\t// buffer will allocate only enough capacity to fit the new expected\n\t// length.\n\tGrowthCoeff float64\n}\n\n// NewWriteAtBuffer creates a WriteAtBuffer with an internal buffer\n// provided by buf.\nfunc NewWriteAtBuffer(buf []byte) *WriteAtBuffer {\n\treturn &WriteAtBuffer{buf: buf}\n}\n\n// WriteAt writes a slice of bytes to a buffer starting at the position provided\n// The number of bytes written will be returned, or error. Can overwrite previous\n// written slices if the write ats overlap.\nfunc (b *WriteAtBuffer) WriteAt(p []byte, pos int64) (n int, err error) {\n\tpLen := len(p)\n\texpLen := pos + int64(pLen)\n\tb.m.Lock()\n\tdefer b.m.Unlock()\n\tif int64(len(b.buf)) < expLen {\n\t\tif int64(cap(b.buf)) < expLen {\n\t\t\tif b.GrowthCoeff < 1 {\n\t\t\t\tb.GrowthCoeff = 1\n\t\t\t}\n\t\t\tnewBuf := make([]byte, expLen, int64(b.GrowthCoeff*float64(expLen)))\n\t\t\tcopy(newBuf, b.buf)\n\t\t\tb.buf = newBuf\n\t\t}\n\t\tb.buf = b.buf[:expLen]\n\t}\n\tcopy(b.buf[pos:], p)\n\treturn pLen, nil\n}\n\n// Bytes returns a slice of bytes written to the buffer.\nfunc (b *WriteAtBuffer) Bytes() []byte {\n\tb.m.Lock()\n\tdefer b.m.Unlock()\n\treturn b.buf\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/url.go",
    "content": "// +build go1.8\n\npackage aws\n\nimport \"net/url\"\n\n// URLHostname will extract the Hostname without port from the URL value.\n//\n// Wrapper of net/url#URL.Hostname for backwards Go version compatibility.\nfunc URLHostname(url *url.URL) string {\n\treturn url.Hostname()\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/url_1_7.go",
    "content": "// +build !go1.8\n\npackage aws\n\nimport (\n\t\"net/url\"\n\t\"strings\"\n)\n\n// URLHostname will extract the Hostname without port from the URL value.\n//\n// Copy of Go 1.8's net/url#URL.Hostname functionality.\nfunc URLHostname(url *url.URL) string {\n\treturn stripPort(url.Host)\n\n}\n\n// stripPort is copy of Go 1.8 url#URL.Hostname functionality.\n// https://golang.org/src/net/url/url.go\nfunc stripPort(hostport string) string {\n\tcolon := strings.IndexByte(hostport, ':')\n\tif colon == -1 {\n\t\treturn hostport\n\t}\n\tif i := strings.IndexByte(hostport, ']'); i != -1 {\n\t\treturn strings.TrimPrefix(hostport[:i], \"[\")\n\t}\n\treturn hostport[:colon]\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/aws/version.go",
    "content": "// Package aws provides core functionality for making requests to AWS services.\npackage aws\n\n// SDKName is the name of this AWS SDK\nconst SDKName = \"aws-sdk-go\"\n\n// SDKVersion is the version of this SDK\nconst SDKVersion = \"1.19.44\"\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/internal/ini/ast.go",
    "content": "package ini\n\n// ASTKind represents different states in the parse table\n// and the type of AST that is being constructed\ntype ASTKind int\n\n// ASTKind* is used in the parse table to transition between\n// the different states\nconst (\n\tASTKindNone = ASTKind(iota)\n\tASTKindStart\n\tASTKindExpr\n\tASTKindEqualExpr\n\tASTKindStatement\n\tASTKindSkipStatement\n\tASTKindExprStatement\n\tASTKindSectionStatement\n\tASTKindNestedSectionStatement\n\tASTKindCompletedNestedSectionStatement\n\tASTKindCommentStatement\n\tASTKindCompletedSectionStatement\n)\n\nfunc (k ASTKind) String() string {\n\tswitch k {\n\tcase ASTKindNone:\n\t\treturn \"none\"\n\tcase ASTKindStart:\n\t\treturn \"start\"\n\tcase ASTKindExpr:\n\t\treturn \"expr\"\n\tcase ASTKindStatement:\n\t\treturn \"stmt\"\n\tcase ASTKindSectionStatement:\n\t\treturn \"section_stmt\"\n\tcase ASTKindExprStatement:\n\t\treturn \"expr_stmt\"\n\tcase ASTKindCommentStatement:\n\t\treturn \"comment\"\n\tcase ASTKindNestedSectionStatement:\n\t\treturn \"nested_section_stmt\"\n\tcase ASTKindCompletedSectionStatement:\n\t\treturn \"completed_stmt\"\n\tcase ASTKindSkipStatement:\n\t\treturn \"skip\"\n\tdefault:\n\t\treturn \"\"\n\t}\n}\n\n// AST interface allows us to determine what kind of node we\n// are on and casting may not need to be necessary.\n//\n// The root is always the first node in Children\ntype AST struct {\n\tKind      ASTKind\n\tRoot      Token\n\tRootToken bool\n\tChildren  []AST\n}\n\nfunc newAST(kind ASTKind, root AST, children ...AST) AST {\n\treturn AST{\n\t\tKind:     kind,\n\t\tChildren: append([]AST{root}, children...),\n\t}\n}\n\nfunc newASTWithRootToken(kind ASTKind, root Token, children ...AST) AST {\n\treturn AST{\n\t\tKind:      kind,\n\t\tRoot:      root,\n\t\tRootToken: true,\n\t\tChildren:  children,\n\t}\n}\n\n// AppendChild will append to the list of children an AST has.\nfunc (a *AST) AppendChild(child AST) {\n\ta.Children = append(a.Children, child)\n}\n\n// GetRoot will return the root AST which can be the first entry\n// in the children list or a token.\nfunc (a *AST) GetRoot() AST {\n\tif a.RootToken {\n\t\treturn *a\n\t}\n\n\tif len(a.Children) == 0 {\n\t\treturn AST{}\n\t}\n\n\treturn a.Children[0]\n}\n\n// GetChildren will return the current AST's list of children\nfunc (a *AST) GetChildren() []AST {\n\tif len(a.Children) == 0 {\n\t\treturn []AST{}\n\t}\n\n\tif a.RootToken {\n\t\treturn a.Children\n\t}\n\n\treturn a.Children[1:]\n}\n\n// SetChildren will set and override all children of the AST.\nfunc (a *AST) SetChildren(children []AST) {\n\tif a.RootToken {\n\t\ta.Children = children\n\t} else {\n\t\ta.Children = append(a.Children[:1], children...)\n\t}\n}\n\n// Start is used to indicate the starting state of the parse table.\nvar Start = newAST(ASTKindStart, AST{})\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/internal/ini/comma_token.go",
    "content": "package ini\n\nvar commaRunes = []rune(\",\")\n\nfunc isComma(b rune) bool {\n\treturn b == ','\n}\n\nfunc newCommaToken() Token {\n\treturn newToken(TokenComma, commaRunes, NoneType)\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/internal/ini/comment_token.go",
    "content": "package ini\n\n// isComment will return whether or not the next byte(s) is a\n// comment.\nfunc isComment(b []rune) bool {\n\tif len(b) == 0 {\n\t\treturn false\n\t}\n\n\tswitch b[0] {\n\tcase ';':\n\t\treturn true\n\tcase '#':\n\t\treturn true\n\t}\n\n\treturn false\n}\n\n// newCommentToken will create a comment token and\n// return how many bytes were read.\nfunc newCommentToken(b []rune) (Token, int, error) {\n\ti := 0\n\tfor ; i < len(b); i++ {\n\t\tif b[i] == '\\n' {\n\t\t\tbreak\n\t\t}\n\n\t\tif len(b)-i > 2 && b[i] == '\\r' && b[i+1] == '\\n' {\n\t\t\tbreak\n\t\t}\n\t}\n\n\treturn newToken(TokenComment, b[:i], NoneType), i, nil\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/internal/ini/doc.go",
    "content": "// Package ini is an LL(1) parser for configuration files.\n//\n//\tExample:\n//\tsections, err := ini.OpenFile(\"/path/to/file\")\n//\tif err != nil {\n//\t\tpanic(err)\n//\t}\n//\n//\tprofile := \"foo\"\n//\tsection, ok := sections.GetSection(profile)\n//\tif !ok {\n//\t\tfmt.Printf(\"section %q could not be found\", profile)\n//\t}\n//\n// Below is the BNF that describes this parser\n//\tGrammar:\n//\tstmt -> value stmt'\n//\tstmt' -> epsilon | op stmt\n//\tvalue -> number | string | boolean | quoted_string\n//\n//\tsection -> [ section'\n//\tsection' -> value section_close\n//\tsection_close -> ]\n//\n//\tSkipState will skip (NL WS)+\n//\n//\tcomment -> # comment' | ; comment'\n//\tcomment' -> epsilon | value\npackage ini\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/internal/ini/empty_token.go",
    "content": "package ini\n\n// emptyToken is used to satisfy the Token interface\nvar emptyToken = newToken(TokenNone, []rune{}, NoneType)\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/internal/ini/expression.go",
    "content": "package ini\n\n// newExpression will return an expression AST.\n// Expr represents an expression\n//\n//\tgrammar:\n//\texpr -> string | number\nfunc newExpression(tok Token) AST {\n\treturn newASTWithRootToken(ASTKindExpr, tok)\n}\n\nfunc newEqualExpr(left AST, tok Token) AST {\n\treturn newASTWithRootToken(ASTKindEqualExpr, tok, left)\n}\n\n// EqualExprKey will return a LHS value in the equal expr\nfunc EqualExprKey(ast AST) string {\n\tchildren := ast.GetChildren()\n\tif len(children) == 0 || ast.Kind != ASTKindEqualExpr {\n\t\treturn \"\"\n\t}\n\n\treturn string(children[0].Root.Raw())\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/internal/ini/fuzz.go",
    "content": "// +build gofuzz\n\npackage ini\n\nimport (\n\t\"bytes\"\n)\n\nfunc Fuzz(data []byte) int {\n\tb := bytes.NewReader(data)\n\n\tif _, err := Parse(b); err != nil {\n\t\treturn 0\n\t}\n\n\treturn 1\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/internal/ini/ini.go",
    "content": "package ini\n\nimport (\n\t\"io\"\n\t\"os\"\n\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n)\n\n// OpenFile takes a path to a given file, and will open  and parse\n// that file.\nfunc OpenFile(path string) (Sections, error) {\n\tf, err := os.Open(path)\n\tif err != nil {\n\t\treturn Sections{}, awserr.New(ErrCodeUnableToReadFile, \"unable to open file\", err)\n\t}\n\tdefer f.Close()\n\n\treturn Parse(f)\n}\n\n// Parse will parse the given file using the shared config\n// visitor.\nfunc Parse(f io.Reader) (Sections, error) {\n\ttree, err := ParseAST(f)\n\tif err != nil {\n\t\treturn Sections{}, err\n\t}\n\n\tv := NewDefaultVisitor()\n\tif err = Walk(tree, v); err != nil {\n\t\treturn Sections{}, err\n\t}\n\n\treturn v.Sections, nil\n}\n\n// ParseBytes will parse the given bytes and return the parsed sections.\nfunc ParseBytes(b []byte) (Sections, error) {\n\ttree, err := ParseASTBytes(b)\n\tif err != nil {\n\t\treturn Sections{}, err\n\t}\n\n\tv := NewDefaultVisitor()\n\tif err = Walk(tree, v); err != nil {\n\t\treturn Sections{}, err\n\t}\n\n\treturn v.Sections, nil\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/internal/ini/ini_lexer.go",
    "content": "package ini\n\nimport (\n\t\"bytes\"\n\t\"io\"\n\t\"io/ioutil\"\n\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n)\n\nconst (\n\t// ErrCodeUnableToReadFile is used when a file is failed to be\n\t// opened or read from.\n\tErrCodeUnableToReadFile = \"FailedRead\"\n)\n\n// TokenType represents the various different tokens types\ntype TokenType int\n\nfunc (t TokenType) String() string {\n\tswitch t {\n\tcase TokenNone:\n\t\treturn \"none\"\n\tcase TokenLit:\n\t\treturn \"literal\"\n\tcase TokenSep:\n\t\treturn \"sep\"\n\tcase TokenOp:\n\t\treturn \"op\"\n\tcase TokenWS:\n\t\treturn \"ws\"\n\tcase TokenNL:\n\t\treturn \"newline\"\n\tcase TokenComment:\n\t\treturn \"comment\"\n\tcase TokenComma:\n\t\treturn \"comma\"\n\tdefault:\n\t\treturn \"\"\n\t}\n}\n\n// TokenType enums\nconst (\n\tTokenNone = TokenType(iota)\n\tTokenLit\n\tTokenSep\n\tTokenComma\n\tTokenOp\n\tTokenWS\n\tTokenNL\n\tTokenComment\n)\n\ntype iniLexer struct{}\n\n// Tokenize will return a list of tokens during lexical analysis of the\n// io.Reader.\nfunc (l *iniLexer) Tokenize(r io.Reader) ([]Token, error) {\n\tb, err := ioutil.ReadAll(r)\n\tif err != nil {\n\t\treturn nil, awserr.New(ErrCodeUnableToReadFile, \"unable to read file\", err)\n\t}\n\n\treturn l.tokenize(b)\n}\n\nfunc (l *iniLexer) tokenize(b []byte) ([]Token, error) {\n\trunes := bytes.Runes(b)\n\tvar err error\n\tn := 0\n\ttokenAmount := countTokens(runes)\n\ttokens := make([]Token, tokenAmount)\n\tcount := 0\n\n\tfor len(runes) > 0 && count < tokenAmount {\n\t\tswitch {\n\t\tcase isWhitespace(runes[0]):\n\t\t\ttokens[count], n, err = newWSToken(runes)\n\t\tcase isComma(runes[0]):\n\t\t\ttokens[count], n = newCommaToken(), 1\n\t\tcase isComment(runes):\n\t\t\ttokens[count], n, err = newCommentToken(runes)\n\t\tcase isNewline(runes):\n\t\t\ttokens[count], n, err = newNewlineToken(runes)\n\t\tcase isSep(runes):\n\t\t\ttokens[count], n, err = newSepToken(runes)\n\t\tcase isOp(runes):\n\t\t\ttokens[count], n, err = newOpToken(runes)\n\t\tdefault:\n\t\t\ttokens[count], n, err = newLitToken(runes)\n\t\t}\n\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tcount++\n\n\t\trunes = runes[n:]\n\t}\n\n\treturn tokens[:count], nil\n}\n\nfunc countTokens(runes []rune) int {\n\tcount, n := 0, 0\n\tvar err error\n\n\tfor len(runes) > 0 {\n\t\tswitch {\n\t\tcase isWhitespace(runes[0]):\n\t\t\t_, n, err = newWSToken(runes)\n\t\tcase isComma(runes[0]):\n\t\t\t_, n = newCommaToken(), 1\n\t\tcase isComment(runes):\n\t\t\t_, n, err = newCommentToken(runes)\n\t\tcase isNewline(runes):\n\t\t\t_, n, err = newNewlineToken(runes)\n\t\tcase isSep(runes):\n\t\t\t_, n, err = newSepToken(runes)\n\t\tcase isOp(runes):\n\t\t\t_, n, err = newOpToken(runes)\n\t\tdefault:\n\t\t\t_, n, err = newLitToken(runes)\n\t\t}\n\n\t\tif err != nil {\n\t\t\treturn 0\n\t\t}\n\n\t\tcount++\n\t\trunes = runes[n:]\n\t}\n\n\treturn count + 1\n}\n\n// Token indicates a metadata about a given value.\ntype Token struct {\n\tt         TokenType\n\tValueType ValueType\n\tbase      int\n\traw       []rune\n}\n\nvar emptyValue = Value{}\n\nfunc newToken(t TokenType, raw []rune, v ValueType) Token {\n\treturn Token{\n\t\tt:         t,\n\t\traw:       raw,\n\t\tValueType: v,\n\t}\n}\n\n// Raw return the raw runes that were consumed\nfunc (tok Token) Raw() []rune {\n\treturn tok.raw\n}\n\n// Type returns the token type\nfunc (tok Token) Type() TokenType {\n\treturn tok.t\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/internal/ini/ini_parser.go",
    "content": "package ini\n\nimport (\n\t\"fmt\"\n\t\"io\"\n)\n\n// State enums for the parse table\nconst (\n\tInvalidState = iota\n\t// stmt -> value stmt'\n\tStatementState\n\t// stmt' -> MarkComplete | op stmt\n\tStatementPrimeState\n\t// value -> number | string | boolean | quoted_string\n\tValueState\n\t// section -> [ section'\n\tOpenScopeState\n\t// section' -> value section_close\n\tSectionState\n\t// section_close -> ]\n\tCloseScopeState\n\t// SkipState will skip (NL WS)+\n\tSkipState\n\t// SkipTokenState will skip any token and push the previous\n\t// state onto the stack.\n\tSkipTokenState\n\t// comment -> # comment' | ; comment'\n\t// comment' -> MarkComplete | value\n\tCommentState\n\t// MarkComplete state will complete statements and move that\n\t// to the completed AST list\n\tMarkCompleteState\n\t// TerminalState signifies that the tokens have been fully parsed\n\tTerminalState\n)\n\n// parseTable is a state machine to dictate the grammar above.\nvar parseTable = map[ASTKind]map[TokenType]int{\n\tASTKindStart: map[TokenType]int{\n\t\tTokenLit:     StatementState,\n\t\tTokenSep:     OpenScopeState,\n\t\tTokenWS:      SkipTokenState,\n\t\tTokenNL:      SkipTokenState,\n\t\tTokenComment: CommentState,\n\t\tTokenNone:    TerminalState,\n\t},\n\tASTKindCommentStatement: map[TokenType]int{\n\t\tTokenLit:     StatementState,\n\t\tTokenSep:     OpenScopeState,\n\t\tTokenWS:      SkipTokenState,\n\t\tTokenNL:      SkipTokenState,\n\t\tTokenComment: CommentState,\n\t\tTokenNone:    MarkCompleteState,\n\t},\n\tASTKindExpr: map[TokenType]int{\n\t\tTokenOp:      StatementPrimeState,\n\t\tTokenLit:     ValueState,\n\t\tTokenSep:     OpenScopeState,\n\t\tTokenWS:      ValueState,\n\t\tTokenNL:      SkipState,\n\t\tTokenComment: CommentState,\n\t\tTokenNone:    MarkCompleteState,\n\t},\n\tASTKindEqualExpr: map[TokenType]int{\n\t\tTokenLit: ValueState,\n\t\tTokenWS:  SkipTokenState,\n\t\tTokenNL:  SkipState,\n\t},\n\tASTKindStatement: map[TokenType]int{\n\t\tTokenLit:     SectionState,\n\t\tTokenSep:     CloseScopeState,\n\t\tTokenWS:      SkipTokenState,\n\t\tTokenNL:      SkipTokenState,\n\t\tTokenComment: CommentState,\n\t\tTokenNone:    MarkCompleteState,\n\t},\n\tASTKindExprStatement: map[TokenType]int{\n\t\tTokenLit:     ValueState,\n\t\tTokenSep:     OpenScopeState,\n\t\tTokenOp:      ValueState,\n\t\tTokenWS:      ValueState,\n\t\tTokenNL:      MarkCompleteState,\n\t\tTokenComment: CommentState,\n\t\tTokenNone:    TerminalState,\n\t\tTokenComma:   SkipState,\n\t},\n\tASTKindSectionStatement: map[TokenType]int{\n\t\tTokenLit: SectionState,\n\t\tTokenOp:  SectionState,\n\t\tTokenSep: CloseScopeState,\n\t\tTokenWS:  SectionState,\n\t\tTokenNL:  SkipTokenState,\n\t},\n\tASTKindCompletedSectionStatement: map[TokenType]int{\n\t\tTokenWS:      SkipTokenState,\n\t\tTokenNL:      SkipTokenState,\n\t\tTokenLit:     StatementState,\n\t\tTokenSep:     OpenScopeState,\n\t\tTokenComment: CommentState,\n\t\tTokenNone:    MarkCompleteState,\n\t},\n\tASTKindSkipStatement: map[TokenType]int{\n\t\tTokenLit:     StatementState,\n\t\tTokenSep:     OpenScopeState,\n\t\tTokenWS:      SkipTokenState,\n\t\tTokenNL:      SkipTokenState,\n\t\tTokenComment: CommentState,\n\t\tTokenNone:    TerminalState,\n\t},\n}\n\n// ParseAST will parse input from an io.Reader using\n// an LL(1) parser.\nfunc ParseAST(r io.Reader) ([]AST, error) {\n\tlexer := iniLexer{}\n\ttokens, err := lexer.Tokenize(r)\n\tif err != nil {\n\t\treturn []AST{}, err\n\t}\n\n\treturn parse(tokens)\n}\n\n// ParseASTBytes will parse input from a byte slice using\n// an LL(1) parser.\nfunc ParseASTBytes(b []byte) ([]AST, error) {\n\tlexer := iniLexer{}\n\ttokens, err := lexer.tokenize(b)\n\tif err != nil {\n\t\treturn []AST{}, err\n\t}\n\n\treturn parse(tokens)\n}\n\nfunc parse(tokens []Token) ([]AST, error) {\n\tstart := Start\n\tstack := newParseStack(3, len(tokens))\n\n\tstack.Push(start)\n\ts := newSkipper()\n\nloop:\n\tfor stack.Len() > 0 {\n\t\tk := stack.Pop()\n\n\t\tvar tok Token\n\t\tif len(tokens) == 0 {\n\t\t\t// this occurs when all the tokens have been processed\n\t\t\t// but reduction of what's left on the stack needs to\n\t\t\t// occur.\n\t\t\ttok = emptyToken\n\t\t} else {\n\t\t\ttok = tokens[0]\n\t\t}\n\n\t\tstep := parseTable[k.Kind][tok.Type()]\n\t\tif s.ShouldSkip(tok) {\n\t\t\t// being in a skip state with no tokens will break out of\n\t\t\t// the parse loop since there is nothing left to process.\n\t\t\tif len(tokens) == 0 {\n\t\t\t\tbreak loop\n\t\t\t}\n\n\t\t\tstep = SkipTokenState\n\t\t}\n\n\t\tswitch step {\n\t\tcase TerminalState:\n\t\t\t// Finished parsing. Push what should be the last\n\t\t\t// statement to the stack. If there is anything left\n\t\t\t// on the stack, an error in parsing has occurred.\n\t\t\tif k.Kind != ASTKindStart {\n\t\t\t\tstack.MarkComplete(k)\n\t\t\t}\n\t\t\tbreak loop\n\t\tcase SkipTokenState:\n\t\t\t// When skipping a token, the previous state was popped off the stack.\n\t\t\t// To maintain the correct state, the previous state will be pushed\n\t\t\t// onto the stack.\n\t\t\tstack.Push(k)\n\t\tcase StatementState:\n\t\t\tif k.Kind != ASTKindStart {\n\t\t\t\tstack.MarkComplete(k)\n\t\t\t}\n\t\t\texpr := newExpression(tok)\n\t\t\tstack.Push(expr)\n\t\tcase StatementPrimeState:\n\t\t\tif tok.Type() != TokenOp {\n\t\t\t\tstack.MarkComplete(k)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif k.Kind != ASTKindExpr {\n\t\t\t\treturn nil, NewParseError(\n\t\t\t\t\tfmt.Sprintf(\"invalid expression: expected Expr type, but found %T type\", k),\n\t\t\t\t)\n\t\t\t}\n\n\t\t\tk = trimSpaces(k)\n\t\t\texpr := newEqualExpr(k, tok)\n\t\t\tstack.Push(expr)\n\t\tcase ValueState:\n\t\t\t// ValueState requires the previous state to either be an equal expression\n\t\t\t// or an expression statement.\n\t\t\t//\n\t\t\t// This grammar occurs when the RHS is a number, word, or quoted string.\n\t\t\t// equal_expr -> lit op equal_expr'\n\t\t\t// equal_expr' -> number | string | quoted_string\n\t\t\t// quoted_string -> \" quoted_string'\n\t\t\t// quoted_string' -> string quoted_string_end\n\t\t\t// quoted_string_end -> \"\n\t\t\t//\n\t\t\t// otherwise\n\t\t\t// expr_stmt -> equal_expr (expr_stmt')*\n\t\t\t// expr_stmt' -> ws S | op S | MarkComplete\n\t\t\t// S -> equal_expr' expr_stmt'\n\t\t\tswitch k.Kind {\n\t\t\tcase ASTKindEqualExpr:\n\t\t\t\t// assiging a value to some key\n\t\t\t\tk.AppendChild(newExpression(tok))\n\t\t\t\tstack.Push(newExprStatement(k))\n\t\t\tcase ASTKindExpr:\n\t\t\t\tk.Root.raw = append(k.Root.raw, tok.Raw()...)\n\t\t\t\tstack.Push(k)\n\t\t\tcase ASTKindExprStatement:\n\t\t\t\troot := k.GetRoot()\n\t\t\t\tchildren := root.GetChildren()\n\t\t\t\tif len(children) == 0 {\n\t\t\t\t\treturn nil, NewParseError(\n\t\t\t\t\t\tfmt.Sprintf(\"invalid expression: AST contains no children %s\", k.Kind),\n\t\t\t\t\t)\n\t\t\t\t}\n\n\t\t\t\trhs := children[len(children)-1]\n\n\t\t\t\tif rhs.Root.ValueType != QuotedStringType {\n\t\t\t\t\trhs.Root.ValueType = StringType\n\t\t\t\t\trhs.Root.raw = append(rhs.Root.raw, tok.Raw()...)\n\n\t\t\t\t}\n\n\t\t\t\tchildren[len(children)-1] = rhs\n\t\t\t\tk.SetChildren(children)\n\n\t\t\t\tstack.Push(k)\n\t\t\t}\n\t\tcase OpenScopeState:\n\t\t\tif !runeCompare(tok.Raw(), openBrace) {\n\t\t\t\treturn nil, NewParseError(\"expected '['\")\n\t\t\t}\n\n\t\t\tstmt := newStatement()\n\t\t\tstack.Push(stmt)\n\t\tcase CloseScopeState:\n\t\t\tif !runeCompare(tok.Raw(), closeBrace) {\n\t\t\t\treturn nil, NewParseError(\"expected ']'\")\n\t\t\t}\n\n\t\t\tk = trimSpaces(k)\n\t\t\tstack.Push(newCompletedSectionStatement(k))\n\t\tcase SectionState:\n\t\t\tvar stmt AST\n\n\t\t\tswitch k.Kind {\n\t\t\tcase ASTKindStatement:\n\t\t\t\t// If there are multiple literals inside of a scope declaration,\n\t\t\t\t// then the current token's raw value will be appended to the Name.\n\t\t\t\t//\n\t\t\t\t// This handles cases like [ profile default ]\n\t\t\t\t//\n\t\t\t\t// k will represent a SectionStatement with the children representing\n\t\t\t\t// the label of the section\n\t\t\t\tstmt = newSectionStatement(tok)\n\t\t\tcase ASTKindSectionStatement:\n\t\t\t\tk.Root.raw = append(k.Root.raw, tok.Raw()...)\n\t\t\t\tstmt = k\n\t\t\tdefault:\n\t\t\t\treturn nil, NewParseError(\n\t\t\t\t\tfmt.Sprintf(\"invalid statement: expected statement: %v\", k.Kind),\n\t\t\t\t)\n\t\t\t}\n\n\t\t\tstack.Push(stmt)\n\t\tcase MarkCompleteState:\n\t\t\tif k.Kind != ASTKindStart {\n\t\t\t\tstack.MarkComplete(k)\n\t\t\t}\n\n\t\t\tif stack.Len() == 0 {\n\t\t\t\tstack.Push(start)\n\t\t\t}\n\t\tcase SkipState:\n\t\t\tstack.Push(newSkipStatement(k))\n\t\t\ts.Skip()\n\t\tcase CommentState:\n\t\t\tif k.Kind == ASTKindStart {\n\t\t\t\tstack.Push(k)\n\t\t\t} else {\n\t\t\t\tstack.MarkComplete(k)\n\t\t\t}\n\n\t\t\tstmt := newCommentStatement(tok)\n\t\t\tstack.Push(stmt)\n\t\tdefault:\n\t\t\treturn nil, NewParseError(\n\t\t\t\tfmt.Sprintf(\"invalid state with ASTKind %v and TokenType %v\",\n\t\t\t\t\tk, tok.Type()))\n\t\t}\n\n\t\tif len(tokens) > 0 {\n\t\t\ttokens = tokens[1:]\n\t\t}\n\t}\n\n\t// this occurs when a statement has not been completed\n\tif stack.top > 1 {\n\t\treturn nil, NewParseError(fmt.Sprintf(\"incomplete ini expression\"))\n\t}\n\n\t// returns a sublist which excludes the start symbol\n\treturn stack.List(), nil\n}\n\n// trimSpaces will trim spaces on the left and right hand side of\n// the literal.\nfunc trimSpaces(k AST) AST {\n\t// trim left hand side of spaces\n\tfor i := 0; i < len(k.Root.raw); i++ {\n\t\tif !isWhitespace(k.Root.raw[i]) {\n\t\t\tbreak\n\t\t}\n\n\t\tk.Root.raw = k.Root.raw[1:]\n\t\ti--\n\t}\n\n\t// trim right hand side of spaces\n\tfor i := len(k.Root.raw) - 1; i >= 0; i-- {\n\t\tif !isWhitespace(k.Root.raw[i]) {\n\t\t\tbreak\n\t\t}\n\n\t\tk.Root.raw = k.Root.raw[:len(k.Root.raw)-1]\n\t}\n\n\treturn k\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/internal/ini/literal_tokens.go",
    "content": "package ini\n\nimport (\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n)\n\nvar (\n\trunesTrue  = []rune(\"true\")\n\trunesFalse = []rune(\"false\")\n)\n\nvar literalValues = [][]rune{\n\trunesTrue,\n\trunesFalse,\n}\n\nfunc isBoolValue(b []rune) bool {\n\tfor _, lv := range literalValues {\n\t\tif isLitValue(lv, b) {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\nfunc isLitValue(want, have []rune) bool {\n\tif len(have) < len(want) {\n\t\treturn false\n\t}\n\n\tfor i := 0; i < len(want); i++ {\n\t\tif want[i] != have[i] {\n\t\t\treturn false\n\t\t}\n\t}\n\n\treturn true\n}\n\n// isNumberValue will return whether not the leading characters in\n// a byte slice is a number. A number is delimited by whitespace or\n// the newline token.\n//\n// A number is defined to be in a binary, octal, decimal (int | float), hex format,\n// or in scientific notation.\nfunc isNumberValue(b []rune) bool {\n\tnegativeIndex := 0\n\thelper := numberHelper{}\n\tneedDigit := false\n\n\tfor i := 0; i < len(b); i++ {\n\t\tnegativeIndex++\n\n\t\tswitch b[i] {\n\t\tcase '-':\n\t\t\tif helper.IsNegative() || negativeIndex != 1 {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\thelper.Determine(b[i])\n\t\t\tneedDigit = true\n\t\t\tcontinue\n\t\tcase 'e', 'E':\n\t\t\tif err := helper.Determine(b[i]); err != nil {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tnegativeIndex = 0\n\t\t\tneedDigit = true\n\t\t\tcontinue\n\t\tcase 'b':\n\t\t\tif helper.numberFormat == hex {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase 'o', 'x':\n\t\t\tneedDigit = true\n\t\t\tif i == 0 {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tfallthrough\n\t\tcase '.':\n\t\t\tif err := helper.Determine(b[i]); err != nil {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tneedDigit = true\n\t\t\tcontinue\n\t\t}\n\n\t\tif i > 0 && (isNewline(b[i:]) || isWhitespace(b[i])) {\n\t\t\treturn !needDigit\n\t\t}\n\n\t\tif !helper.CorrectByte(b[i]) {\n\t\t\treturn false\n\t\t}\n\t\tneedDigit = false\n\t}\n\n\treturn !needDigit\n}\n\nfunc isValid(b []rune) (bool, int, error) {\n\tif len(b) == 0 {\n\t\t// TODO: should probably return an error\n\t\treturn false, 0, nil\n\t}\n\n\treturn isValidRune(b[0]), 1, nil\n}\n\nfunc isValidRune(r rune) bool {\n\treturn r != ':' && r != '=' && r != '[' && r != ']' && r != ' ' && r != '\\n'\n}\n\n// ValueType is an enum that will signify what type\n// the Value is\ntype ValueType int\n\nfunc (v ValueType) String() string {\n\tswitch v {\n\tcase NoneType:\n\t\treturn \"NONE\"\n\tcase DecimalType:\n\t\treturn \"FLOAT\"\n\tcase IntegerType:\n\t\treturn \"INT\"\n\tcase StringType:\n\t\treturn \"STRING\"\n\tcase BoolType:\n\t\treturn \"BOOL\"\n\t}\n\n\treturn \"\"\n}\n\n// ValueType enums\nconst (\n\tNoneType = ValueType(iota)\n\tDecimalType\n\tIntegerType\n\tStringType\n\tQuotedStringType\n\tBoolType\n)\n\n// Value is a union container\ntype Value struct {\n\tType ValueType\n\traw  []rune\n\n\tinteger int64\n\tdecimal float64\n\tboolean bool\n\tstr     string\n}\n\nfunc newValue(t ValueType, base int, raw []rune) (Value, error) {\n\tv := Value{\n\t\tType: t,\n\t\traw:  raw,\n\t}\n\tvar err error\n\n\tswitch t {\n\tcase DecimalType:\n\t\tv.decimal, err = strconv.ParseFloat(string(raw), 64)\n\tcase IntegerType:\n\t\tif base != 10 {\n\t\t\traw = raw[2:]\n\t\t}\n\n\t\tv.integer, err = strconv.ParseInt(string(raw), base, 64)\n\tcase StringType:\n\t\tv.str = string(raw)\n\tcase QuotedStringType:\n\t\tv.str = string(raw[1 : len(raw)-1])\n\tcase BoolType:\n\t\tv.boolean = runeCompare(v.raw, runesTrue)\n\t}\n\n\t// issue 2253\n\t//\n\t// if the value trying to be parsed is too large, then we will use\n\t// the 'StringType' and raw value instead.\n\tif nerr, ok := err.(*strconv.NumError); ok && nerr.Err == strconv.ErrRange {\n\t\tv.Type = StringType\n\t\tv.str = string(raw)\n\t\terr = nil\n\t}\n\n\treturn v, err\n}\n\n// Append will append values and change the type to a string\n// type.\nfunc (v *Value) Append(tok Token) {\n\tr := tok.Raw()\n\tif v.Type != QuotedStringType {\n\t\tv.Type = StringType\n\t\tr = tok.raw[1 : len(tok.raw)-1]\n\t}\n\tif tok.Type() != TokenLit {\n\t\tv.raw = append(v.raw, tok.Raw()...)\n\t} else {\n\t\tv.raw = append(v.raw, r...)\n\t}\n}\n\nfunc (v Value) String() string {\n\tswitch v.Type {\n\tcase DecimalType:\n\t\treturn fmt.Sprintf(\"decimal: %f\", v.decimal)\n\tcase IntegerType:\n\t\treturn fmt.Sprintf(\"integer: %d\", v.integer)\n\tcase StringType:\n\t\treturn fmt.Sprintf(\"string: %s\", string(v.raw))\n\tcase QuotedStringType:\n\t\treturn fmt.Sprintf(\"quoted string: %s\", string(v.raw))\n\tcase BoolType:\n\t\treturn fmt.Sprintf(\"bool: %t\", v.boolean)\n\tdefault:\n\t\treturn \"union not set\"\n\t}\n}\n\nfunc newLitToken(b []rune) (Token, int, error) {\n\tn := 0\n\tvar err error\n\n\ttoken := Token{}\n\tif b[0] == '\"' {\n\t\tn, err = getStringValue(b)\n\t\tif err != nil {\n\t\t\treturn token, n, err\n\t\t}\n\n\t\ttoken = newToken(TokenLit, b[:n], QuotedStringType)\n\t} else if isNumberValue(b) {\n\t\tvar base int\n\t\tbase, n, err = getNumericalValue(b)\n\t\tif err != nil {\n\t\t\treturn token, 0, err\n\t\t}\n\n\t\tvalue := b[:n]\n\t\tvType := IntegerType\n\t\tif contains(value, '.') || hasExponent(value) {\n\t\t\tvType = DecimalType\n\t\t}\n\t\ttoken = newToken(TokenLit, value, vType)\n\t\ttoken.base = base\n\t} else if isBoolValue(b) {\n\t\tn, err = getBoolValue(b)\n\n\t\ttoken = newToken(TokenLit, b[:n], BoolType)\n\t} else {\n\t\tn, err = getValue(b)\n\t\ttoken = newToken(TokenLit, b[:n], StringType)\n\t}\n\n\treturn token, n, err\n}\n\n// IntValue returns an integer value\nfunc (v Value) IntValue() int64 {\n\treturn v.integer\n}\n\n// FloatValue returns a float value\nfunc (v Value) FloatValue() float64 {\n\treturn v.decimal\n}\n\n// BoolValue returns a bool value\nfunc (v Value) BoolValue() bool {\n\treturn v.boolean\n}\n\nfunc isTrimmable(r rune) bool {\n\tswitch r {\n\tcase '\\n', ' ':\n\t\treturn true\n\t}\n\treturn false\n}\n\n// StringValue returns the string value\nfunc (v Value) StringValue() string {\n\tswitch v.Type {\n\tcase StringType:\n\t\treturn strings.TrimFunc(string(v.raw), isTrimmable)\n\tcase QuotedStringType:\n\t\t// preserve all characters in the quotes\n\t\treturn string(removeEscapedCharacters(v.raw[1 : len(v.raw)-1]))\n\tdefault:\n\t\treturn strings.TrimFunc(string(v.raw), isTrimmable)\n\t}\n}\n\nfunc contains(runes []rune, c rune) bool {\n\tfor i := 0; i < len(runes); i++ {\n\t\tif runes[i] == c {\n\t\t\treturn true\n\t\t}\n\t}\n\n\treturn false\n}\n\nfunc runeCompare(v1 []rune, v2 []rune) bool {\n\tif len(v1) != len(v2) {\n\t\treturn false\n\t}\n\n\tfor i := 0; i < len(v1); i++ {\n\t\tif v1[i] != v2[i] {\n\t\t\treturn false\n\t\t}\n\t}\n\n\treturn true\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/internal/ini/newline_token.go",
    "content": "package ini\n\nfunc isNewline(b []rune) bool {\n\tif len(b) == 0 {\n\t\treturn false\n\t}\n\n\tif b[0] == '\\n' {\n\t\treturn true\n\t}\n\n\tif len(b) < 2 {\n\t\treturn false\n\t}\n\n\treturn b[0] == '\\r' && b[1] == '\\n'\n}\n\nfunc newNewlineToken(b []rune) (Token, int, error) {\n\ti := 1\n\tif b[0] == '\\r' && isNewline(b[1:]) {\n\t\ti++\n\t}\n\n\tif !isNewline([]rune(b[:i])) {\n\t\treturn emptyToken, 0, NewParseError(\"invalid new line token\")\n\t}\n\n\treturn newToken(TokenNL, b[:i], NoneType), i, nil\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/internal/ini/number_helper.go",
    "content": "package ini\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"strconv\"\n)\n\nconst (\n\tnone = numberFormat(iota)\n\tbinary\n\toctal\n\tdecimal\n\thex\n\texponent\n)\n\ntype numberFormat int\n\n// numberHelper is used to dictate what format a number is in\n// and what to do for negative values. Since -1e-4 is a valid\n// number, we cannot just simply check for duplicate negatives.\ntype numberHelper struct {\n\tnumberFormat numberFormat\n\n\tnegative         bool\n\tnegativeExponent bool\n}\n\nfunc (b numberHelper) Exists() bool {\n\treturn b.numberFormat != none\n}\n\nfunc (b numberHelper) IsNegative() bool {\n\treturn b.negative || b.negativeExponent\n}\n\nfunc (b *numberHelper) Determine(c rune) error {\n\tif b.Exists() {\n\t\treturn NewParseError(fmt.Sprintf(\"multiple number formats: 0%v\", string(c)))\n\t}\n\n\tswitch c {\n\tcase 'b':\n\t\tb.numberFormat = binary\n\tcase 'o':\n\t\tb.numberFormat = octal\n\tcase 'x':\n\t\tb.numberFormat = hex\n\tcase 'e', 'E':\n\t\tb.numberFormat = exponent\n\tcase '-':\n\t\tif b.numberFormat != exponent {\n\t\t\tb.negative = true\n\t\t} else {\n\t\t\tb.negativeExponent = true\n\t\t}\n\tcase '.':\n\t\tb.numberFormat = decimal\n\tdefault:\n\t\treturn NewParseError(fmt.Sprintf(\"invalid number character: %v\", string(c)))\n\t}\n\n\treturn nil\n}\n\nfunc (b numberHelper) CorrectByte(c rune) bool {\n\tswitch {\n\tcase b.numberFormat == binary:\n\t\tif !isBinaryByte(c) {\n\t\t\treturn false\n\t\t}\n\tcase b.numberFormat == octal:\n\t\tif !isOctalByte(c) {\n\t\t\treturn false\n\t\t}\n\tcase b.numberFormat == hex:\n\t\tif !isHexByte(c) {\n\t\t\treturn false\n\t\t}\n\tcase b.numberFormat == decimal:\n\t\tif !isDigit(c) {\n\t\t\treturn false\n\t\t}\n\tcase b.numberFormat == exponent:\n\t\tif !isDigit(c) {\n\t\t\treturn false\n\t\t}\n\tcase b.negativeExponent:\n\t\tif !isDigit(c) {\n\t\t\treturn false\n\t\t}\n\tcase b.negative:\n\t\tif !isDigit(c) {\n\t\t\treturn false\n\t\t}\n\tdefault:\n\t\tif !isDigit(c) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\treturn true\n}\n\nfunc (b numberHelper) Base() int {\n\tswitch b.numberFormat {\n\tcase binary:\n\t\treturn 2\n\tcase octal:\n\t\treturn 8\n\tcase hex:\n\t\treturn 16\n\tdefault:\n\t\treturn 10\n\t}\n}\n\nfunc (b numberHelper) String() string {\n\tbuf := bytes.Buffer{}\n\ti := 0\n\n\tswitch b.numberFormat {\n\tcase binary:\n\t\ti++\n\t\tbuf.WriteString(strconv.Itoa(i) + \": binary format\\n\")\n\tcase octal:\n\t\ti++\n\t\tbuf.WriteString(strconv.Itoa(i) + \": octal format\\n\")\n\tcase hex:\n\t\ti++\n\t\tbuf.WriteString(strconv.Itoa(i) + \": hex format\\n\")\n\tcase exponent:\n\t\ti++\n\t\tbuf.WriteString(strconv.Itoa(i) + \": exponent format\\n\")\n\tdefault:\n\t\ti++\n\t\tbuf.WriteString(strconv.Itoa(i) + \": integer format\\n\")\n\t}\n\n\tif b.negative {\n\t\ti++\n\t\tbuf.WriteString(strconv.Itoa(i) + \": negative format\\n\")\n\t}\n\n\tif b.negativeExponent {\n\t\ti++\n\t\tbuf.WriteString(strconv.Itoa(i) + \": negative exponent format\\n\")\n\t}\n\n\treturn buf.String()\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/internal/ini/op_tokens.go",
    "content": "package ini\n\nimport (\n\t\"fmt\"\n)\n\nvar (\n\tequalOp      = []rune(\"=\")\n\tequalColonOp = []rune(\":\")\n)\n\nfunc isOp(b []rune) bool {\n\tif len(b) == 0 {\n\t\treturn false\n\t}\n\n\tswitch b[0] {\n\tcase '=':\n\t\treturn true\n\tcase ':':\n\t\treturn true\n\tdefault:\n\t\treturn false\n\t}\n}\n\nfunc newOpToken(b []rune) (Token, int, error) {\n\ttok := Token{}\n\n\tswitch b[0] {\n\tcase '=':\n\t\ttok = newToken(TokenOp, equalOp, NoneType)\n\tcase ':':\n\t\ttok = newToken(TokenOp, equalColonOp, NoneType)\n\tdefault:\n\t\treturn tok, 0, NewParseError(fmt.Sprintf(\"unexpected op type, %v\", b[0]))\n\t}\n\treturn tok, 1, nil\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/internal/ini/parse_error.go",
    "content": "package ini\n\nimport \"fmt\"\n\nconst (\n\t// ErrCodeParseError is returned when a parsing error\n\t// has occurred.\n\tErrCodeParseError = \"INIParseError\"\n)\n\n// ParseError is an error which is returned during any part of\n// the parsing process.\ntype ParseError struct {\n\tmsg string\n}\n\n// NewParseError will return a new ParseError where message\n// is the description of the error.\nfunc NewParseError(message string) *ParseError {\n\treturn &ParseError{\n\t\tmsg: message,\n\t}\n}\n\n// Code will return the ErrCodeParseError\nfunc (err *ParseError) Code() string {\n\treturn ErrCodeParseError\n}\n\n// Message returns the error's message\nfunc (err *ParseError) Message() string {\n\treturn err.msg\n}\n\n// OrigError return nothing since there will never be any\n// original error.\nfunc (err *ParseError) OrigError() error {\n\treturn nil\n}\n\nfunc (err *ParseError) Error() string {\n\treturn fmt.Sprintf(\"%s: %s\", err.Code(), err.Message())\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/internal/ini/parse_stack.go",
    "content": "package ini\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n)\n\n// ParseStack is a stack that contains a container, the stack portion,\n// and the list which is the list of ASTs that have been successfully\n// parsed.\ntype ParseStack struct {\n\ttop       int\n\tcontainer []AST\n\tlist      []AST\n\tindex     int\n}\n\nfunc newParseStack(sizeContainer, sizeList int) ParseStack {\n\treturn ParseStack{\n\t\tcontainer: make([]AST, sizeContainer),\n\t\tlist:      make([]AST, sizeList),\n\t}\n}\n\n// Pop will return and truncate the last container element.\nfunc (s *ParseStack) Pop() AST {\n\ts.top--\n\treturn s.container[s.top]\n}\n\n// Push will add the new AST to the container\nfunc (s *ParseStack) Push(ast AST) {\n\ts.container[s.top] = ast\n\ts.top++\n}\n\n// MarkComplete will append the AST to the list of completed statements\nfunc (s *ParseStack) MarkComplete(ast AST) {\n\ts.list[s.index] = ast\n\ts.index++\n}\n\n// List will return the completed statements\nfunc (s ParseStack) List() []AST {\n\treturn s.list[:s.index]\n}\n\n// Len will return the length of the container\nfunc (s *ParseStack) Len() int {\n\treturn s.top\n}\n\nfunc (s ParseStack) String() string {\n\tbuf := bytes.Buffer{}\n\tfor i, node := range s.list {\n\t\tbuf.WriteString(fmt.Sprintf(\"%d: %v\\n\", i+1, node))\n\t}\n\n\treturn buf.String()\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/internal/ini/sep_tokens.go",
    "content": "package ini\n\nimport (\n\t\"fmt\"\n)\n\nvar (\n\temptyRunes = []rune{}\n)\n\nfunc isSep(b []rune) bool {\n\tif len(b) == 0 {\n\t\treturn false\n\t}\n\n\tswitch b[0] {\n\tcase '[', ']':\n\t\treturn true\n\tdefault:\n\t\treturn false\n\t}\n}\n\nvar (\n\topenBrace  = []rune(\"[\")\n\tcloseBrace = []rune(\"]\")\n)\n\nfunc newSepToken(b []rune) (Token, int, error) {\n\ttok := Token{}\n\n\tswitch b[0] {\n\tcase '[':\n\t\ttok = newToken(TokenSep, openBrace, NoneType)\n\tcase ']':\n\t\ttok = newToken(TokenSep, closeBrace, NoneType)\n\tdefault:\n\t\treturn tok, 0, NewParseError(fmt.Sprintf(\"unexpected sep type, %v\", b[0]))\n\t}\n\treturn tok, 1, nil\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/internal/ini/skipper.go",
    "content": "package ini\n\n// skipper is used to skip certain blocks of an ini file.\n// Currently skipper is used to skip nested blocks of ini\n// files. See example below\n//\n//\t[ foo ]\n//\tnested = ; this section will be skipped\n//\t\ta=b\n//\t\tc=d\n//\tbar=baz ; this will be included\ntype skipper struct {\n\tshouldSkip bool\n\tTokenSet   bool\n\tprevTok    Token\n}\n\nfunc newSkipper() skipper {\n\treturn skipper{\n\t\tprevTok: emptyToken,\n\t}\n}\n\nfunc (s *skipper) ShouldSkip(tok Token) bool {\n\tif s.shouldSkip &&\n\t\ts.prevTok.Type() == TokenNL &&\n\t\ttok.Type() != TokenWS {\n\n\t\ts.Continue()\n\t\treturn false\n\t}\n\ts.prevTok = tok\n\n\treturn s.shouldSkip\n}\n\nfunc (s *skipper) Skip() {\n\ts.shouldSkip = true\n\ts.prevTok = emptyToken\n}\n\nfunc (s *skipper) Continue() {\n\ts.shouldSkip = false\n\ts.prevTok = emptyToken\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/internal/ini/statement.go",
    "content": "package ini\n\n// Statement is an empty AST mostly used for transitioning states.\nfunc newStatement() AST {\n\treturn newAST(ASTKindStatement, AST{})\n}\n\n// SectionStatement represents a section AST\nfunc newSectionStatement(tok Token) AST {\n\treturn newASTWithRootToken(ASTKindSectionStatement, tok)\n}\n\n// ExprStatement represents a completed expression AST\nfunc newExprStatement(ast AST) AST {\n\treturn newAST(ASTKindExprStatement, ast)\n}\n\n// CommentStatement represents a comment in the ini definition.\n//\n//\tgrammar:\n//\tcomment -> #comment' | ;comment'\n//\tcomment' -> epsilon | value\nfunc newCommentStatement(tok Token) AST {\n\treturn newAST(ASTKindCommentStatement, newExpression(tok))\n}\n\n// CompletedSectionStatement represents a completed section\nfunc newCompletedSectionStatement(ast AST) AST {\n\treturn newAST(ASTKindCompletedSectionStatement, ast)\n}\n\n// SkipStatement is used to skip whole statements\nfunc newSkipStatement(ast AST) AST {\n\treturn newAST(ASTKindSkipStatement, ast)\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/internal/ini/value_util.go",
    "content": "package ini\n\nimport (\n\t\"fmt\"\n)\n\n// getStringValue will return a quoted string and the amount\n// of bytes read\n//\n// an error will be returned if the string is not properly formatted\nfunc getStringValue(b []rune) (int, error) {\n\tif b[0] != '\"' {\n\t\treturn 0, NewParseError(\"strings must start with '\\\"'\")\n\t}\n\n\tendQuote := false\n\ti := 1\n\n\tfor ; i < len(b) && !endQuote; i++ {\n\t\tif escaped := isEscaped(b[:i], b[i]); b[i] == '\"' && !escaped {\n\t\t\tendQuote = true\n\t\t\tbreak\n\t\t} else if escaped {\n\t\t\t/*c, err := getEscapedByte(b[i])\n\t\t\tif err != nil {\n\t\t\t\treturn 0, err\n\t\t\t}\n\n\t\t\tb[i-1] = c\n\t\t\tb = append(b[:i], b[i+1:]...)\n\t\t\ti--*/\n\n\t\t\tcontinue\n\t\t}\n\t}\n\n\tif !endQuote {\n\t\treturn 0, NewParseError(\"missing '\\\"' in string value\")\n\t}\n\n\treturn i + 1, nil\n}\n\n// getBoolValue will return a boolean and the amount\n// of bytes read\n//\n// an error will be returned if the boolean is not of a correct\n// value\nfunc getBoolValue(b []rune) (int, error) {\n\tif len(b) < 4 {\n\t\treturn 0, NewParseError(\"invalid boolean value\")\n\t}\n\n\tn := 0\n\tfor _, lv := range literalValues {\n\t\tif len(lv) > len(b) {\n\t\t\tcontinue\n\t\t}\n\n\t\tif isLitValue(lv, b) {\n\t\t\tn = len(lv)\n\t\t}\n\t}\n\n\tif n == 0 {\n\t\treturn 0, NewParseError(\"invalid boolean value\")\n\t}\n\n\treturn n, nil\n}\n\n// getNumericalValue will return a numerical string, the amount\n// of bytes read, and the base of the number\n//\n// an error will be returned if the number is not of a correct\n// value\nfunc getNumericalValue(b []rune) (int, int, error) {\n\tif !isDigit(b[0]) {\n\t\treturn 0, 0, NewParseError(\"invalid digit value\")\n\t}\n\n\ti := 0\n\thelper := numberHelper{}\n\nloop:\n\tfor negativeIndex := 0; i < len(b); i++ {\n\t\tnegativeIndex++\n\n\t\tif !isDigit(b[i]) {\n\t\t\tswitch b[i] {\n\t\t\tcase '-':\n\t\t\t\tif helper.IsNegative() || negativeIndex != 1 {\n\t\t\t\t\treturn 0, 0, NewParseError(\"parse error '-'\")\n\t\t\t\t}\n\n\t\t\t\tn := getNegativeNumber(b[i:])\n\t\t\t\ti += (n - 1)\n\t\t\t\thelper.Determine(b[i])\n\t\t\t\tcontinue\n\t\t\tcase '.':\n\t\t\t\tif err := helper.Determine(b[i]); err != nil {\n\t\t\t\t\treturn 0, 0, err\n\t\t\t\t}\n\t\t\tcase 'e', 'E':\n\t\t\t\tif err := helper.Determine(b[i]); err != nil {\n\t\t\t\t\treturn 0, 0, err\n\t\t\t\t}\n\n\t\t\t\tnegativeIndex = 0\n\t\t\tcase 'b':\n\t\t\t\tif helper.numberFormat == hex {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tfallthrough\n\t\t\tcase 'o', 'x':\n\t\t\t\tif i == 0 && b[i] != '0' {\n\t\t\t\t\treturn 0, 0, NewParseError(\"incorrect base format, expected leading '0'\")\n\t\t\t\t}\n\n\t\t\t\tif i != 1 {\n\t\t\t\t\treturn 0, 0, NewParseError(fmt.Sprintf(\"incorrect base format found %s at %d index\", string(b[i]), i))\n\t\t\t\t}\n\n\t\t\t\tif err := helper.Determine(b[i]); err != nil {\n\t\t\t\t\treturn 0, 0, err\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\tif isWhitespace(b[i]) {\n\t\t\t\t\tbreak loop\n\t\t\t\t}\n\n\t\t\t\tif isNewline(b[i:]) {\n\t\t\t\t\tbreak loop\n\t\t\t\t}\n\n\t\t\t\tif !(helper.numberFormat == hex && isHexByte(b[i])) {\n\t\t\t\t\tif i+2 < len(b) && !isNewline(b[i:i+2]) {\n\t\t\t\t\t\treturn 0, 0, NewParseError(\"invalid numerical character\")\n\t\t\t\t\t} else if !isNewline([]rune{b[i]}) {\n\t\t\t\t\t\treturn 0, 0, NewParseError(\"invalid numerical character\")\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak loop\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn helper.Base(), i, nil\n}\n\n// isDigit will return whether or not something is an integer\nfunc isDigit(b rune) bool {\n\treturn b >= '0' && b <= '9'\n}\n\nfunc hasExponent(v []rune) bool {\n\treturn contains(v, 'e') || contains(v, 'E')\n}\n\nfunc isBinaryByte(b rune) bool {\n\tswitch b {\n\tcase '0', '1':\n\t\treturn true\n\tdefault:\n\t\treturn false\n\t}\n}\n\nfunc isOctalByte(b rune) bool {\n\tswitch b {\n\tcase '0', '1', '2', '3', '4', '5', '6', '7':\n\t\treturn true\n\tdefault:\n\t\treturn false\n\t}\n}\n\nfunc isHexByte(b rune) bool {\n\tif isDigit(b) {\n\t\treturn true\n\t}\n\treturn (b >= 'A' && b <= 'F') ||\n\t\t(b >= 'a' && b <= 'f')\n}\n\nfunc getValue(b []rune) (int, error) {\n\ti := 0\n\n\tfor i < len(b) {\n\t\tif isNewline(b[i:]) {\n\t\t\tbreak\n\t\t}\n\n\t\tif isOp(b[i:]) {\n\t\t\tbreak\n\t\t}\n\n\t\tvalid, n, err := isValid(b[i:])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\n\t\tif !valid {\n\t\t\tbreak\n\t\t}\n\n\t\ti += n\n\t}\n\n\treturn i, nil\n}\n\n// getNegativeNumber will return a negative number from a\n// byte slice. This will iterate through all characters until\n// a non-digit has been found.\nfunc getNegativeNumber(b []rune) int {\n\tif b[0] != '-' {\n\t\treturn 0\n\t}\n\n\ti := 1\n\tfor ; i < len(b); i++ {\n\t\tif !isDigit(b[i]) {\n\t\t\treturn i\n\t\t}\n\t}\n\n\treturn i\n}\n\n// isEscaped will return whether or not the character is an escaped\n// character.\nfunc isEscaped(value []rune, b rune) bool {\n\tif len(value) == 0 {\n\t\treturn false\n\t}\n\n\tswitch b {\n\tcase '\\'': // single quote\n\tcase '\"': // quote\n\tcase 'n': // newline\n\tcase 't': // tab\n\tcase '\\\\': // backslash\n\tdefault:\n\t\treturn false\n\t}\n\n\treturn value[len(value)-1] == '\\\\'\n}\n\nfunc getEscapedByte(b rune) (rune, error) {\n\tswitch b {\n\tcase '\\'': // single quote\n\t\treturn '\\'', nil\n\tcase '\"': // quote\n\t\treturn '\"', nil\n\tcase 'n': // newline\n\t\treturn '\\n', nil\n\tcase 't': // table\n\t\treturn '\\t', nil\n\tcase '\\\\': // backslash\n\t\treturn '\\\\', nil\n\tdefault:\n\t\treturn b, NewParseError(fmt.Sprintf(\"invalid escaped character %c\", b))\n\t}\n}\n\nfunc removeEscapedCharacters(b []rune) []rune {\n\tfor i := 0; i < len(b); i++ {\n\t\tif isEscaped(b[:i], b[i]) {\n\t\t\tc, err := getEscapedByte(b[i])\n\t\t\tif err != nil {\n\t\t\t\treturn b\n\t\t\t}\n\n\t\t\tb[i-1] = c\n\t\t\tb = append(b[:i], b[i+1:]...)\n\t\t\ti--\n\t\t}\n\t}\n\n\treturn b\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/internal/ini/visitor.go",
    "content": "package ini\n\nimport (\n\t\"fmt\"\n\t\"sort\"\n)\n\n// Visitor is an interface used by walkers that will\n// traverse an array of ASTs.\ntype Visitor interface {\n\tVisitExpr(AST) error\n\tVisitStatement(AST) error\n}\n\n// DefaultVisitor is used to visit statements and expressions\n// and ensure that they are both of the correct format.\n// In addition, upon visiting this will build sections and populate\n// the Sections field which can be used to retrieve profile\n// configuration.\ntype DefaultVisitor struct {\n\tscope    string\n\tSections Sections\n}\n\n// NewDefaultVisitor return a DefaultVisitor\nfunc NewDefaultVisitor() *DefaultVisitor {\n\treturn &DefaultVisitor{\n\t\tSections: Sections{\n\t\t\tcontainer: map[string]Section{},\n\t\t},\n\t}\n}\n\n// VisitExpr visits expressions...\nfunc (v *DefaultVisitor) VisitExpr(expr AST) error {\n\tt := v.Sections.container[v.scope]\n\tif t.values == nil {\n\t\tt.values = values{}\n\t}\n\n\tswitch expr.Kind {\n\tcase ASTKindExprStatement:\n\t\topExpr := expr.GetRoot()\n\t\tswitch opExpr.Kind {\n\t\tcase ASTKindEqualExpr:\n\t\t\tchildren := opExpr.GetChildren()\n\t\t\tif len(children) <= 1 {\n\t\t\t\treturn NewParseError(\"unexpected token type\")\n\t\t\t}\n\n\t\t\trhs := children[1]\n\n\t\t\tif rhs.Root.Type() != TokenLit {\n\t\t\t\treturn NewParseError(\"unexpected token type\")\n\t\t\t}\n\n\t\t\tkey := EqualExprKey(opExpr)\n\t\t\tv, err := newValue(rhs.Root.ValueType, rhs.Root.base, rhs.Root.Raw())\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tt.values[key] = v\n\t\tdefault:\n\t\t\treturn NewParseError(fmt.Sprintf(\"unsupported expression %v\", expr))\n\t\t}\n\tdefault:\n\t\treturn NewParseError(fmt.Sprintf(\"unsupported expression %v\", expr))\n\t}\n\n\tv.Sections.container[v.scope] = t\n\treturn nil\n}\n\n// VisitStatement visits statements...\nfunc (v *DefaultVisitor) VisitStatement(stmt AST) error {\n\tswitch stmt.Kind {\n\tcase ASTKindCompletedSectionStatement:\n\t\tchild := stmt.GetRoot()\n\t\tif child.Kind != ASTKindSectionStatement {\n\t\t\treturn NewParseError(fmt.Sprintf(\"unsupported child statement: %T\", child))\n\t\t}\n\n\t\tname := string(child.Root.Raw())\n\t\tv.Sections.container[name] = Section{}\n\t\tv.scope = name\n\tdefault:\n\t\treturn NewParseError(fmt.Sprintf(\"unsupported statement: %s\", stmt.Kind))\n\t}\n\n\treturn nil\n}\n\n// Sections is a map of Section structures that represent\n// a configuration.\ntype Sections struct {\n\tcontainer map[string]Section\n}\n\n// GetSection will return section p. If section p does not exist,\n// false will be returned in the second parameter.\nfunc (t Sections) GetSection(p string) (Section, bool) {\n\tv, ok := t.container[p]\n\treturn v, ok\n}\n\n// values represents a map of union values.\ntype values map[string]Value\n\n// List will return a list of all sections that were successfully\n// parsed.\nfunc (t Sections) List() []string {\n\tkeys := make([]string, len(t.container))\n\ti := 0\n\tfor k := range t.container {\n\t\tkeys[i] = k\n\t\ti++\n\t}\n\n\tsort.Strings(keys)\n\treturn keys\n}\n\n// Section contains a name and values. This represent\n// a sectioned entry in a configuration file.\ntype Section struct {\n\tName   string\n\tvalues values\n}\n\n// Has will return whether or not an entry exists in a given section\nfunc (t Section) Has(k string) bool {\n\t_, ok := t.values[k]\n\treturn ok\n}\n\n// ValueType will returned what type the union is set to. If\n// k was not found, the NoneType will be returned.\nfunc (t Section) ValueType(k string) (ValueType, bool) {\n\tv, ok := t.values[k]\n\treturn v.Type, ok\n}\n\n// Bool returns a bool value at k\nfunc (t Section) Bool(k string) bool {\n\treturn t.values[k].BoolValue()\n}\n\n// Int returns an integer value at k\nfunc (t Section) Int(k string) int64 {\n\treturn t.values[k].IntValue()\n}\n\n// Float64 returns a float value at k\nfunc (t Section) Float64(k string) float64 {\n\treturn t.values[k].FloatValue()\n}\n\n// String returns the string value at k\nfunc (t Section) String(k string) string {\n\t_, ok := t.values[k]\n\tif !ok {\n\t\treturn \"\"\n\t}\n\treturn t.values[k].StringValue()\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/internal/ini/walker.go",
    "content": "package ini\n\n// Walk will traverse the AST using the v, the Visitor.\nfunc Walk(tree []AST, v Visitor) error {\n\tfor _, node := range tree {\n\t\tswitch node.Kind {\n\t\tcase ASTKindExpr,\n\t\t\tASTKindExprStatement:\n\n\t\t\tif err := v.VisitExpr(node); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\tcase ASTKindStatement,\n\t\t\tASTKindCompletedSectionStatement,\n\t\t\tASTKindNestedSectionStatement,\n\t\t\tASTKindCompletedNestedSectionStatement:\n\n\t\t\tif err := v.VisitStatement(node); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/internal/ini/ws_token.go",
    "content": "package ini\n\nimport (\n\t\"unicode\"\n)\n\n// isWhitespace will return whether or not the character is\n// a whitespace character.\n//\n// Whitespace is defined as a space or tab.\nfunc isWhitespace(c rune) bool {\n\treturn unicode.IsSpace(c) && c != '\\n' && c != '\\r'\n}\n\nfunc newWSToken(b []rune) (Token, int, error) {\n\ti := 0\n\tfor ; i < len(b); i++ {\n\t\tif !isWhitespace(b[i]) {\n\t\t\tbreak\n\t\t}\n\t}\n\n\treturn newToken(TokenWS, b[:i], NoneType), i, nil\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/internal/s3err/error.go",
    "content": "package s3err\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n\t\"github.com/aws/aws-sdk-go/aws/request\"\n)\n\n// RequestFailure provides additional S3 specific metadata for the request\n// failure.\ntype RequestFailure struct {\n\tawserr.RequestFailure\n\n\thostID string\n}\n\n// NewRequestFailure returns a request failure error decordated with S3\n// specific metadata.\nfunc NewRequestFailure(err awserr.RequestFailure, hostID string) *RequestFailure {\n\treturn &RequestFailure{RequestFailure: err, hostID: hostID}\n}\n\nfunc (r RequestFailure) Error() string {\n\textra := fmt.Sprintf(\"status code: %d, request id: %s, host id: %s\",\n\t\tr.StatusCode(), r.RequestID(), r.hostID)\n\treturn awserr.SprintError(r.Code(), r.Message(), extra, r.OrigErr())\n}\nfunc (r RequestFailure) String() string {\n\treturn r.Error()\n}\n\n// HostID returns the HostID request response value.\nfunc (r RequestFailure) HostID() string {\n\treturn r.hostID\n}\n\n// RequestFailureWrapperHandler returns a handler to rap an\n// awserr.RequestFailure with the  S3 request ID 2 from the response.\nfunc RequestFailureWrapperHandler() request.NamedHandler {\n\treturn request.NamedHandler{\n\t\tName: \"awssdk.s3.errorHandler\",\n\t\tFn: func(req *request.Request) {\n\t\t\treqErr, ok := req.Error.(awserr.RequestFailure)\n\t\t\tif !ok || reqErr == nil {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\thostID := req.HTTPResponse.Header.Get(\"X-Amz-Id-2\")\n\t\t\tif req.Error == nil {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\treq.Error = NewRequestFailure(reqErr, hostID)\n\t\t},\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/internal/sdkio/io_go1.6.go",
    "content": "// +build !go1.7\n\npackage sdkio\n\n// Copy of Go 1.7 io package's Seeker constants.\nconst (\n\tSeekStart   = 0 // seek relative to the origin of the file\n\tSeekCurrent = 1 // seek relative to the current offset\n\tSeekEnd     = 2 // seek relative to the end\n)\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/internal/sdkio/io_go1.7.go",
    "content": "// +build go1.7\n\npackage sdkio\n\nimport \"io\"\n\n// Alias for Go 1.7 io package Seeker constants\nconst (\n\tSeekStart   = io.SeekStart   // seek relative to the origin of the file\n\tSeekCurrent = io.SeekCurrent // seek relative to the current offset\n\tSeekEnd     = io.SeekEnd     // seek relative to the end\n)\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/internal/sdkrand/locked_source.go",
    "content": "package sdkrand\n\nimport (\n\t\"math/rand\"\n\t\"sync\"\n\t\"time\"\n)\n\n// lockedSource is a thread-safe implementation of rand.Source\ntype lockedSource struct {\n\tlk  sync.Mutex\n\tsrc rand.Source\n}\n\nfunc (r *lockedSource) Int63() (n int64) {\n\tr.lk.Lock()\n\tn = r.src.Int63()\n\tr.lk.Unlock()\n\treturn\n}\n\nfunc (r *lockedSource) Seed(seed int64) {\n\tr.lk.Lock()\n\tr.src.Seed(seed)\n\tr.lk.Unlock()\n}\n\n// SeededRand is a new RNG using a thread safe implementation of rand.Source\nvar SeededRand = rand.New(&lockedSource{src: rand.NewSource(time.Now().UnixNano())})\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/internal/sdkuri/path.go",
    "content": "package sdkuri\n\nimport (\n\t\"path\"\n\t\"strings\"\n)\n\n// PathJoin will join the elements of the path delimited by the \"/\"\n// character. Similar to path.Join with the exception the trailing \"/\"\n// character is preserved if present.\nfunc PathJoin(elems ...string) string {\n\tif len(elems) == 0 {\n\t\treturn \"\"\n\t}\n\n\thasTrailing := strings.HasSuffix(elems[len(elems)-1], \"/\")\n\tstr := path.Join(elems...)\n\tif hasTrailing && str != \"/\" {\n\t\tstr += \"/\"\n\t}\n\n\treturn str\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/internal/shareddefaults/ecs_container.go",
    "content": "package shareddefaults\n\nconst (\n\t// ECSCredsProviderEnvVar is an environmental variable key used to\n\t// determine which path needs to be hit.\n\tECSCredsProviderEnvVar = \"AWS_CONTAINER_CREDENTIALS_RELATIVE_URI\"\n)\n\n// ECSContainerCredentialsURI is the endpoint to retrieve container\n// credentials. This can be overridden to test to ensure the credential process\n// is behaving correctly.\nvar ECSContainerCredentialsURI = \"http://169.254.170.2\"\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/internal/shareddefaults/shared_config.go",
    "content": "package shareddefaults\n\nimport (\n\t\"os\"\n\t\"path/filepath\"\n\t\"runtime\"\n)\n\n// SharedCredentialsFilename returns the SDK's default file path\n// for the shared credentials file.\n//\n// Builds the shared config file path based on the OS's platform.\n//\n//   - Linux/Unix: $HOME/.aws/credentials\n//   - Windows: %USERPROFILE%\\.aws\\credentials\nfunc SharedCredentialsFilename() string {\n\treturn filepath.Join(UserHomeDir(), \".aws\", \"credentials\")\n}\n\n// SharedConfigFilename returns the SDK's default file path for\n// the shared config file.\n//\n// Builds the shared config file path based on the OS's platform.\n//\n//   - Linux/Unix: $HOME/.aws/config\n//   - Windows: %USERPROFILE%\\.aws\\config\nfunc SharedConfigFilename() string {\n\treturn filepath.Join(UserHomeDir(), \".aws\", \"config\")\n}\n\n// UserHomeDir returns the home directory for the user the process is\n// running under.\nfunc UserHomeDir() string {\n\tif runtime.GOOS == \"windows\" { // Windows\n\t\treturn os.Getenv(\"USERPROFILE\")\n\t}\n\n\t// *nix\n\treturn os.Getenv(\"HOME\")\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/private/protocol/eventstream/debug.go",
    "content": "package eventstream\n\nimport (\n\t\"bytes\"\n\t\"encoding/base64\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"strconv\"\n)\n\ntype decodedMessage struct {\n\trawMessage\n\tHeaders decodedHeaders `json:\"headers\"`\n}\ntype jsonMessage struct {\n\tLength     json.Number    `json:\"total_length\"`\n\tHeadersLen json.Number    `json:\"headers_length\"`\n\tPreludeCRC json.Number    `json:\"prelude_crc\"`\n\tHeaders    decodedHeaders `json:\"headers\"`\n\tPayload    []byte         `json:\"payload\"`\n\tCRC        json.Number    `json:\"message_crc\"`\n}\n\nfunc (d *decodedMessage) UnmarshalJSON(b []byte) (err error) {\n\tvar jsonMsg jsonMessage\n\tif err = json.Unmarshal(b, &jsonMsg); err != nil {\n\t\treturn err\n\t}\n\n\td.Length, err = numAsUint32(jsonMsg.Length)\n\tif err != nil {\n\t\treturn err\n\t}\n\td.HeadersLen, err = numAsUint32(jsonMsg.HeadersLen)\n\tif err != nil {\n\t\treturn err\n\t}\n\td.PreludeCRC, err = numAsUint32(jsonMsg.PreludeCRC)\n\tif err != nil {\n\t\treturn err\n\t}\n\td.Headers = jsonMsg.Headers\n\td.Payload = jsonMsg.Payload\n\td.CRC, err = numAsUint32(jsonMsg.CRC)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\nfunc (d *decodedMessage) MarshalJSON() ([]byte, error) {\n\tjsonMsg := jsonMessage{\n\t\tLength:     json.Number(strconv.Itoa(int(d.Length))),\n\t\tHeadersLen: json.Number(strconv.Itoa(int(d.HeadersLen))),\n\t\tPreludeCRC: json.Number(strconv.Itoa(int(d.PreludeCRC))),\n\t\tHeaders:    d.Headers,\n\t\tPayload:    d.Payload,\n\t\tCRC:        json.Number(strconv.Itoa(int(d.CRC))),\n\t}\n\n\treturn json.Marshal(jsonMsg)\n}\n\nfunc numAsUint32(n json.Number) (uint32, error) {\n\tv, err := n.Int64()\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"failed to get int64 json number, %v\", err)\n\t}\n\n\treturn uint32(v), nil\n}\n\nfunc (d decodedMessage) Message() Message {\n\treturn Message{\n\t\tHeaders: Headers(d.Headers),\n\t\tPayload: d.Payload,\n\t}\n}\n\ntype decodedHeaders Headers\n\nfunc (hs *decodedHeaders) UnmarshalJSON(b []byte) error {\n\tvar jsonHeaders []struct {\n\t\tName  string      `json:\"name\"`\n\t\tType  valueType   `json:\"type\"`\n\t\tValue interface{} `json:\"value\"`\n\t}\n\n\tdecoder := json.NewDecoder(bytes.NewReader(b))\n\tdecoder.UseNumber()\n\tif err := decoder.Decode(&jsonHeaders); err != nil {\n\t\treturn err\n\t}\n\n\tvar headers Headers\n\tfor _, h := range jsonHeaders {\n\t\tvalue, err := valueFromType(h.Type, h.Value)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\theaders.Set(h.Name, value)\n\t}\n\t(*hs) = decodedHeaders(headers)\n\n\treturn nil\n}\n\nfunc valueFromType(typ valueType, val interface{}) (Value, error) {\n\tswitch typ {\n\tcase trueValueType:\n\t\treturn BoolValue(true), nil\n\tcase falseValueType:\n\t\treturn BoolValue(false), nil\n\tcase int8ValueType:\n\t\tv, err := val.(json.Number).Int64()\n\t\treturn Int8Value(int8(v)), err\n\tcase int16ValueType:\n\t\tv, err := val.(json.Number).Int64()\n\t\treturn Int16Value(int16(v)), err\n\tcase int32ValueType:\n\t\tv, err := val.(json.Number).Int64()\n\t\treturn Int32Value(int32(v)), err\n\tcase int64ValueType:\n\t\tv, err := val.(json.Number).Int64()\n\t\treturn Int64Value(v), err\n\tcase bytesValueType:\n\t\tv, err := base64.StdEncoding.DecodeString(val.(string))\n\t\treturn BytesValue(v), err\n\tcase stringValueType:\n\t\tv, err := base64.StdEncoding.DecodeString(val.(string))\n\t\treturn StringValue(string(v)), err\n\tcase timestampValueType:\n\t\tv, err := val.(json.Number).Int64()\n\t\treturn TimestampValue(timeFromEpochMilli(v)), err\n\tcase uuidValueType:\n\t\tv, err := base64.StdEncoding.DecodeString(val.(string))\n\t\tvar tv UUIDValue\n\t\tcopy(tv[:], v)\n\t\treturn tv, err\n\tdefault:\n\t\tpanic(fmt.Sprintf(\"unknown type, %s, %T\", typ.String(), val))\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/private/protocol/eventstream/decode.go",
    "content": "package eventstream\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"encoding/hex\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"hash\"\n\t\"hash/crc32\"\n\t\"io\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n)\n\n// Decoder provides decoding of an Event Stream messages.\ntype Decoder struct {\n\tr      io.Reader\n\tlogger aws.Logger\n}\n\n// NewDecoder initializes and returns a Decoder for decoding event\n// stream messages from the reader provided.\nfunc NewDecoder(r io.Reader) *Decoder {\n\treturn &Decoder{\n\t\tr: r,\n\t}\n}\n\n// Decode attempts to decode a single message from the event stream reader.\n// Will return the event stream message, or error if Decode fails to read\n// the message from the stream.\nfunc (d *Decoder) Decode(payloadBuf []byte) (m Message, err error) {\n\treader := d.r\n\tif d.logger != nil {\n\t\tdebugMsgBuf := bytes.NewBuffer(nil)\n\t\treader = io.TeeReader(reader, debugMsgBuf)\n\t\tdefer func() {\n\t\t\tlogMessageDecode(d.logger, debugMsgBuf, m, err)\n\t\t}()\n\t}\n\n\tcrc := crc32.New(crc32IEEETable)\n\thashReader := io.TeeReader(reader, crc)\n\n\tprelude, err := decodePrelude(hashReader, crc)\n\tif err != nil {\n\t\treturn Message{}, err\n\t}\n\n\tif prelude.HeadersLen > 0 {\n\t\tlr := io.LimitReader(hashReader, int64(prelude.HeadersLen))\n\t\tm.Headers, err = decodeHeaders(lr)\n\t\tif err != nil {\n\t\t\treturn Message{}, err\n\t\t}\n\t}\n\n\tif payloadLen := prelude.PayloadLen(); payloadLen > 0 {\n\t\tbuf, err := decodePayload(payloadBuf, io.LimitReader(hashReader, int64(payloadLen)))\n\t\tif err != nil {\n\t\t\treturn Message{}, err\n\t\t}\n\t\tm.Payload = buf\n\t}\n\n\tmsgCRC := crc.Sum32()\n\tif err := validateCRC(reader, msgCRC); err != nil {\n\t\treturn Message{}, err\n\t}\n\n\treturn m, nil\n}\n\n// UseLogger specifies the Logger that that the decoder should use to log the\n// message decode to.\nfunc (d *Decoder) UseLogger(logger aws.Logger) {\n\td.logger = logger\n}\n\nfunc logMessageDecode(logger aws.Logger, msgBuf *bytes.Buffer, msg Message, decodeErr error) {\n\tw := bytes.NewBuffer(nil)\n\tdefer func() { logger.Log(w.String()) }()\n\n\tfmt.Fprintf(w, \"Raw message:\\n%s\\n\",\n\t\thex.Dump(msgBuf.Bytes()))\n\n\tif decodeErr != nil {\n\t\tfmt.Fprintf(w, \"Decode error: %v\\n\", decodeErr)\n\t\treturn\n\t}\n\n\trawMsg, err := msg.rawMessage()\n\tif err != nil {\n\t\tfmt.Fprintf(w, \"failed to create raw message, %v\\n\", err)\n\t\treturn\n\t}\n\n\tdecodedMsg := decodedMessage{\n\t\trawMessage: rawMsg,\n\t\tHeaders:    decodedHeaders(msg.Headers),\n\t}\n\n\tfmt.Fprintf(w, \"Decoded message:\\n\")\n\tencoder := json.NewEncoder(w)\n\tif err := encoder.Encode(decodedMsg); err != nil {\n\t\tfmt.Fprintf(w, \"failed to generate decoded message, %v\\n\", err)\n\t}\n}\n\nfunc decodePrelude(r io.Reader, crc hash.Hash32) (messagePrelude, error) {\n\tvar p messagePrelude\n\n\tvar err error\n\tp.Length, err = decodeUint32(r)\n\tif err != nil {\n\t\treturn messagePrelude{}, err\n\t}\n\n\tp.HeadersLen, err = decodeUint32(r)\n\tif err != nil {\n\t\treturn messagePrelude{}, err\n\t}\n\n\tif err := p.ValidateLens(); err != nil {\n\t\treturn messagePrelude{}, err\n\t}\n\n\tpreludeCRC := crc.Sum32()\n\tif err := validateCRC(r, preludeCRC); err != nil {\n\t\treturn messagePrelude{}, err\n\t}\n\n\tp.PreludeCRC = preludeCRC\n\n\treturn p, nil\n}\n\nfunc decodePayload(buf []byte, r io.Reader) ([]byte, error) {\n\tw := bytes.NewBuffer(buf[0:0])\n\n\t_, err := io.Copy(w, r)\n\treturn w.Bytes(), err\n}\n\nfunc decodeUint8(r io.Reader) (uint8, error) {\n\ttype byteReader interface {\n\t\tReadByte() (byte, error)\n\t}\n\n\tif br, ok := r.(byteReader); ok {\n\t\tv, err := br.ReadByte()\n\t\treturn uint8(v), err\n\t}\n\n\tvar b [1]byte\n\t_, err := io.ReadFull(r, b[:])\n\treturn uint8(b[0]), err\n}\nfunc decodeUint16(r io.Reader) (uint16, error) {\n\tvar b [2]byte\n\tbs := b[:]\n\t_, err := io.ReadFull(r, bs)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn binary.BigEndian.Uint16(bs), nil\n}\nfunc decodeUint32(r io.Reader) (uint32, error) {\n\tvar b [4]byte\n\tbs := b[:]\n\t_, err := io.ReadFull(r, bs)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn binary.BigEndian.Uint32(bs), nil\n}\nfunc decodeUint64(r io.Reader) (uint64, error) {\n\tvar b [8]byte\n\tbs := b[:]\n\t_, err := io.ReadFull(r, bs)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn binary.BigEndian.Uint64(bs), nil\n}\n\nfunc validateCRC(r io.Reader, expect uint32) error {\n\tmsgCRC, err := decodeUint32(r)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif msgCRC != expect {\n\t\treturn ChecksumError{}\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/private/protocol/eventstream/encode.go",
    "content": "package eventstream\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"hash\"\n\t\"hash/crc32\"\n\t\"io\"\n)\n\n// Encoder provides EventStream message encoding.\ntype Encoder struct {\n\tw io.Writer\n\n\theadersBuf *bytes.Buffer\n}\n\n// NewEncoder initializes and returns an Encoder to encode Event Stream\n// messages to an io.Writer.\nfunc NewEncoder(w io.Writer) *Encoder {\n\treturn &Encoder{\n\t\tw:          w,\n\t\theadersBuf: bytes.NewBuffer(nil),\n\t}\n}\n\n// Encode encodes a single EventStream message to the io.Writer the Encoder\n// was created with. An error is returned if writing the message fails.\nfunc (e *Encoder) Encode(msg Message) error {\n\te.headersBuf.Reset()\n\n\terr := encodeHeaders(e.headersBuf, msg.Headers)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tcrc := crc32.New(crc32IEEETable)\n\thashWriter := io.MultiWriter(e.w, crc)\n\n\theadersLen := uint32(e.headersBuf.Len())\n\tpayloadLen := uint32(len(msg.Payload))\n\n\tif err := encodePrelude(hashWriter, crc, headersLen, payloadLen); err != nil {\n\t\treturn err\n\t}\n\n\tif headersLen > 0 {\n\t\tif _, err := io.Copy(hashWriter, e.headersBuf); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tif payloadLen > 0 {\n\t\tif _, err := hashWriter.Write(msg.Payload); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tmsgCRC := crc.Sum32()\n\treturn binary.Write(e.w, binary.BigEndian, msgCRC)\n}\n\nfunc encodePrelude(w io.Writer, crc hash.Hash32, headersLen, payloadLen uint32) error {\n\tp := messagePrelude{\n\t\tLength:     minMsgLen + headersLen + payloadLen,\n\t\tHeadersLen: headersLen,\n\t}\n\tif err := p.ValidateLens(); err != nil {\n\t\treturn err\n\t}\n\n\terr := binaryWriteFields(w, binary.BigEndian,\n\t\tp.Length,\n\t\tp.HeadersLen,\n\t)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tp.PreludeCRC = crc.Sum32()\n\terr = binary.Write(w, binary.BigEndian, p.PreludeCRC)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\nfunc encodeHeaders(w io.Writer, headers Headers) error {\n\tfor _, h := range headers {\n\t\thn := headerName{\n\t\t\tLen: uint8(len(h.Name)),\n\t\t}\n\t\tcopy(hn.Name[:hn.Len], h.Name)\n\t\tif err := hn.encode(w); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tif err := h.Value.encode(w); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc binaryWriteFields(w io.Writer, order binary.ByteOrder, vs ...interface{}) error {\n\tfor _, v := range vs {\n\t\tif err := binary.Write(w, order, v); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/private/protocol/eventstream/error.go",
    "content": "package eventstream\n\nimport \"fmt\"\n\n// LengthError provides the error for items being larger than a maximum length.\ntype LengthError struct {\n\tPart  string\n\tWant  int\n\tHave  int\n\tValue interface{}\n}\n\nfunc (e LengthError) Error() string {\n\treturn fmt.Sprintf(\"%s length invalid, %d/%d, %v\",\n\t\te.Part, e.Want, e.Have, e.Value)\n}\n\n// ChecksumError provides the error for message checksum invalidation errors.\ntype ChecksumError struct{}\n\nfunc (e ChecksumError) Error() string {\n\treturn \"message checksum mismatch\"\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/private/protocol/eventstream/eventstreamapi/api.go",
    "content": "package eventstreamapi\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-go/private/protocol\"\n\t\"github.com/aws/aws-sdk-go/private/protocol/eventstream\"\n)\n\n// Unmarshaler provides the interface for unmarshaling a EventStream\n// message into a SDK type.\ntype Unmarshaler interface {\n\tUnmarshalEvent(protocol.PayloadUnmarshaler, eventstream.Message) error\n}\n\n// EventStream headers with specific meaning to async API functionality.\nconst (\n\tMessageTypeHeader    = `:message-type` // Identifies type of message.\n\tEventMessageType     = `event`\n\tErrorMessageType     = `error`\n\tExceptionMessageType = `exception`\n\n\t// Message Events\n\tEventTypeHeader = `:event-type` // Identifies message event type e.g. \"Stats\".\n\n\t// Message Error\n\tErrorCodeHeader    = `:error-code`\n\tErrorMessageHeader = `:error-message`\n\n\t// Message Exception\n\tExceptionTypeHeader = `:exception-type`\n)\n\n// EventReader provides reading from the EventStream of an reader.\ntype EventReader struct {\n\treader  io.ReadCloser\n\tdecoder *eventstream.Decoder\n\n\tunmarshalerForEventType func(string) (Unmarshaler, error)\n\tpayloadUnmarshaler      protocol.PayloadUnmarshaler\n\n\tpayloadBuf []byte\n}\n\n// NewEventReader returns a EventReader built from the reader and unmarshaler\n// provided.  Use ReadStream method to start reading from the EventStream.\nfunc NewEventReader(\n\treader io.ReadCloser,\n\tpayloadUnmarshaler protocol.PayloadUnmarshaler,\n\tunmarshalerForEventType func(string) (Unmarshaler, error),\n) *EventReader {\n\treturn &EventReader{\n\t\treader:                  reader,\n\t\tdecoder:                 eventstream.NewDecoder(reader),\n\t\tpayloadUnmarshaler:      payloadUnmarshaler,\n\t\tunmarshalerForEventType: unmarshalerForEventType,\n\t\tpayloadBuf:              make([]byte, 10*1024),\n\t}\n}\n\n// UseLogger instructs the EventReader to use the logger and log level\n// specified.\nfunc (r *EventReader) UseLogger(logger aws.Logger, logLevel aws.LogLevelType) {\n\tif logger != nil && logLevel.Matches(aws.LogDebugWithEventStreamBody) {\n\t\tr.decoder.UseLogger(logger)\n\t}\n}\n\n// ReadEvent attempts to read a message from the EventStream and return the\n// unmarshaled event value that the message is for.\n//\n// For EventStream API errors check if the returned error satisfies the\n// awserr.Error interface to get the error's Code and Message components.\n//\n// EventUnmarshalers called with EventStream messages must take copies of the\n// message's Payload. The payload will is reused between events read.\nfunc (r *EventReader) ReadEvent() (event interface{}, err error) {\n\tmsg, err := r.decoder.Decode(r.payloadBuf)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer func() {\n\t\t// Reclaim payload buffer for next message read.\n\t\tr.payloadBuf = msg.Payload[0:0]\n\t}()\n\n\ttyp, err := GetHeaderString(msg, MessageTypeHeader)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tswitch typ {\n\tcase EventMessageType:\n\t\treturn r.unmarshalEventMessage(msg)\n\tcase ExceptionMessageType:\n\t\terr = r.unmarshalEventException(msg)\n\t\treturn nil, err\n\tcase ErrorMessageType:\n\t\treturn nil, r.unmarshalErrorMessage(msg)\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"unknown eventstream message type, %v\", typ)\n\t}\n}\n\nfunc (r *EventReader) unmarshalEventMessage(\n\tmsg eventstream.Message,\n) (event interface{}, err error) {\n\teventType, err := GetHeaderString(msg, EventTypeHeader)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tev, err := r.unmarshalerForEventType(eventType)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\terr = ev.UnmarshalEvent(r.payloadUnmarshaler, msg)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn ev, nil\n}\n\nfunc (r *EventReader) unmarshalEventException(\n\tmsg eventstream.Message,\n) (err error) {\n\teventType, err := GetHeaderString(msg, ExceptionTypeHeader)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tev, err := r.unmarshalerForEventType(eventType)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\terr = ev.UnmarshalEvent(r.payloadUnmarshaler, msg)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tvar ok bool\n\terr, ok = ev.(error)\n\tif !ok {\n\t\terr = messageError{\n\t\t\tcode: \"SerializationError\",\n\t\t\tmsg: fmt.Sprintf(\n\t\t\t\t\"event stream exception %s mapped to non-error %T, %v\",\n\t\t\t\teventType, ev, ev,\n\t\t\t),\n\t\t}\n\t}\n\n\treturn err\n}\n\nfunc (r *EventReader) unmarshalErrorMessage(msg eventstream.Message) (err error) {\n\tvar msgErr messageError\n\n\tmsgErr.code, err = GetHeaderString(msg, ErrorCodeHeader)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tmsgErr.msg, err = GetHeaderString(msg, ErrorMessageHeader)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn msgErr\n}\n\n// Close closes the EventReader's EventStream reader.\nfunc (r *EventReader) Close() error {\n\treturn r.reader.Close()\n}\n\n// GetHeaderString returns the value of the header as a string. If the header\n// is not set or the value is not a string an error will be returned.\nfunc GetHeaderString(msg eventstream.Message, headerName string) (string, error) {\n\theaderVal := msg.Headers.Get(headerName)\n\tif headerVal == nil {\n\t\treturn \"\", fmt.Errorf(\"error header %s not present\", headerName)\n\t}\n\n\tv, ok := headerVal.Get().(string)\n\tif !ok {\n\t\treturn \"\", fmt.Errorf(\"error header value is not a string, %T\", headerVal)\n\t}\n\n\treturn v, nil\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/private/protocol/eventstream/eventstreamapi/error.go",
    "content": "package eventstreamapi\n\nimport \"fmt\"\n\ntype messageError struct {\n\tcode string\n\tmsg  string\n}\n\nfunc (e messageError) Code() string {\n\treturn e.code\n}\n\nfunc (e messageError) Message() string {\n\treturn e.msg\n}\n\nfunc (e messageError) Error() string {\n\treturn fmt.Sprintf(\"%s: %s\", e.code, e.msg)\n}\n\nfunc (e messageError) OrigErr() error {\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/private/protocol/eventstream/header.go",
    "content": "package eventstream\n\nimport (\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"io\"\n)\n\n// Headers are a collection of EventStream header values.\ntype Headers []Header\n\n// Header is a single EventStream Key Value header pair.\ntype Header struct {\n\tName  string\n\tValue Value\n}\n\n// Set associates the name with a value. If the header name already exists in\n// the Headers the value will be replaced with the new one.\nfunc (hs *Headers) Set(name string, value Value) {\n\tvar i int\n\tfor ; i < len(*hs); i++ {\n\t\tif (*hs)[i].Name == name {\n\t\t\t(*hs)[i].Value = value\n\t\t\treturn\n\t\t}\n\t}\n\n\t*hs = append(*hs, Header{\n\t\tName: name, Value: value,\n\t})\n}\n\n// Get returns the Value associated with the header. Nil is returned if the\n// value does not exist.\nfunc (hs Headers) Get(name string) Value {\n\tfor i := 0; i < len(hs); i++ {\n\t\tif h := hs[i]; h.Name == name {\n\t\t\treturn h.Value\n\t\t}\n\t}\n\treturn nil\n}\n\n// Del deletes the value in the Headers if it exists.\nfunc (hs *Headers) Del(name string) {\n\tfor i := 0; i < len(*hs); i++ {\n\t\tif (*hs)[i].Name == name {\n\t\t\tcopy((*hs)[i:], (*hs)[i+1:])\n\t\t\t(*hs) = (*hs)[:len(*hs)-1]\n\t\t}\n\t}\n}\n\nfunc decodeHeaders(r io.Reader) (Headers, error) {\n\ths := Headers{}\n\n\tfor {\n\t\tname, err := decodeHeaderName(r)\n\t\tif err != nil {\n\t\t\tif err == io.EOF {\n\t\t\t\t// EOF while getting header name means no more headers\n\t\t\t\tbreak\n\t\t\t}\n\t\t\treturn nil, err\n\t\t}\n\n\t\tvalue, err := decodeHeaderValue(r)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\ths.Set(name, value)\n\t}\n\n\treturn hs, nil\n}\n\nfunc decodeHeaderName(r io.Reader) (string, error) {\n\tvar n headerName\n\n\tvar err error\n\tn.Len, err = decodeUint8(r)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\tname := n.Name[:n.Len]\n\tif _, err := io.ReadFull(r, name); err != nil {\n\t\treturn \"\", err\n\t}\n\n\treturn string(name), nil\n}\n\nfunc decodeHeaderValue(r io.Reader) (Value, error) {\n\tvar raw rawValue\n\n\ttyp, err := decodeUint8(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\traw.Type = valueType(typ)\n\n\tvar v Value\n\n\tswitch raw.Type {\n\tcase trueValueType:\n\t\tv = BoolValue(true)\n\tcase falseValueType:\n\t\tv = BoolValue(false)\n\tcase int8ValueType:\n\t\tvar tv Int8Value\n\t\terr = tv.decode(r)\n\t\tv = tv\n\tcase int16ValueType:\n\t\tvar tv Int16Value\n\t\terr = tv.decode(r)\n\t\tv = tv\n\tcase int32ValueType:\n\t\tvar tv Int32Value\n\t\terr = tv.decode(r)\n\t\tv = tv\n\tcase int64ValueType:\n\t\tvar tv Int64Value\n\t\terr = tv.decode(r)\n\t\tv = tv\n\tcase bytesValueType:\n\t\tvar tv BytesValue\n\t\terr = tv.decode(r)\n\t\tv = tv\n\tcase stringValueType:\n\t\tvar tv StringValue\n\t\terr = tv.decode(r)\n\t\tv = tv\n\tcase timestampValueType:\n\t\tvar tv TimestampValue\n\t\terr = tv.decode(r)\n\t\tv = tv\n\tcase uuidValueType:\n\t\tvar tv UUIDValue\n\t\terr = tv.decode(r)\n\t\tv = tv\n\tdefault:\n\t\tpanic(fmt.Sprintf(\"unknown value type %d\", raw.Type))\n\t}\n\n\t// Error could be EOF, let caller deal with it\n\treturn v, err\n}\n\nconst maxHeaderNameLen = 255\n\ntype headerName struct {\n\tLen  uint8\n\tName [maxHeaderNameLen]byte\n}\n\nfunc (v headerName) encode(w io.Writer) error {\n\tif err := binary.Write(w, binary.BigEndian, v.Len); err != nil {\n\t\treturn err\n\t}\n\n\t_, err := w.Write(v.Name[:v.Len])\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/private/protocol/eventstream/header_value.go",
    "content": "package eventstream\n\nimport (\n\t\"encoding/base64\"\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"io\"\n\t\"strconv\"\n\t\"time\"\n)\n\nconst maxHeaderValueLen = 1<<15 - 1 // 2^15-1 or 32KB - 1\n\n// valueType is the EventStream header value type.\ntype valueType uint8\n\n// Header value types\nconst (\n\ttrueValueType valueType = iota\n\tfalseValueType\n\tint8ValueType  // Byte\n\tint16ValueType // Short\n\tint32ValueType // Integer\n\tint64ValueType // Long\n\tbytesValueType\n\tstringValueType\n\ttimestampValueType\n\tuuidValueType\n)\n\nfunc (t valueType) String() string {\n\tswitch t {\n\tcase trueValueType:\n\t\treturn \"bool\"\n\tcase falseValueType:\n\t\treturn \"bool\"\n\tcase int8ValueType:\n\t\treturn \"int8\"\n\tcase int16ValueType:\n\t\treturn \"int16\"\n\tcase int32ValueType:\n\t\treturn \"int32\"\n\tcase int64ValueType:\n\t\treturn \"int64\"\n\tcase bytesValueType:\n\t\treturn \"byte_array\"\n\tcase stringValueType:\n\t\treturn \"string\"\n\tcase timestampValueType:\n\t\treturn \"timestamp\"\n\tcase uuidValueType:\n\t\treturn \"uuid\"\n\tdefault:\n\t\treturn fmt.Sprintf(\"unknown value type %d\", uint8(t))\n\t}\n}\n\ntype rawValue struct {\n\tType  valueType\n\tLen   uint16 // Only set for variable length slices\n\tValue []byte // byte representation of value, BigEndian encoding.\n}\n\nfunc (r rawValue) encodeScalar(w io.Writer, v interface{}) error {\n\treturn binaryWriteFields(w, binary.BigEndian,\n\t\tr.Type,\n\t\tv,\n\t)\n}\n\nfunc (r rawValue) encodeFixedSlice(w io.Writer, v []byte) error {\n\tbinary.Write(w, binary.BigEndian, r.Type)\n\n\t_, err := w.Write(v)\n\treturn err\n}\n\nfunc (r rawValue) encodeBytes(w io.Writer, v []byte) error {\n\tif len(v) > maxHeaderValueLen {\n\t\treturn LengthError{\n\t\t\tPart: \"header value\",\n\t\t\tWant: maxHeaderValueLen, Have: len(v),\n\t\t\tValue: v,\n\t\t}\n\t}\n\tr.Len = uint16(len(v))\n\n\terr := binaryWriteFields(w, binary.BigEndian,\n\t\tr.Type,\n\t\tr.Len,\n\t)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t_, err = w.Write(v)\n\treturn err\n}\n\nfunc (r rawValue) encodeString(w io.Writer, v string) error {\n\tif len(v) > maxHeaderValueLen {\n\t\treturn LengthError{\n\t\t\tPart: \"header value\",\n\t\t\tWant: maxHeaderValueLen, Have: len(v),\n\t\t\tValue: v,\n\t\t}\n\t}\n\tr.Len = uint16(len(v))\n\n\ttype stringWriter interface {\n\t\tWriteString(string) (int, error)\n\t}\n\n\terr := binaryWriteFields(w, binary.BigEndian,\n\t\tr.Type,\n\t\tr.Len,\n\t)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif sw, ok := w.(stringWriter); ok {\n\t\t_, err = sw.WriteString(v)\n\t} else {\n\t\t_, err = w.Write([]byte(v))\n\t}\n\n\treturn err\n}\n\nfunc decodeFixedBytesValue(r io.Reader, buf []byte) error {\n\t_, err := io.ReadFull(r, buf)\n\treturn err\n}\n\nfunc decodeBytesValue(r io.Reader) ([]byte, error) {\n\tvar raw rawValue\n\tvar err error\n\traw.Len, err = decodeUint16(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tbuf := make([]byte, raw.Len)\n\t_, err = io.ReadFull(r, buf)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn buf, nil\n}\n\nfunc decodeStringValue(r io.Reader) (string, error) {\n\tv, err := decodeBytesValue(r)\n\treturn string(v), err\n}\n\n// Value represents the abstract header value.\ntype Value interface {\n\tGet() interface{}\n\tString() string\n\tvalueType() valueType\n\tencode(io.Writer) error\n}\n\n// An BoolValue provides eventstream encoding, and representation\n// of a Go bool value.\ntype BoolValue bool\n\n// Get returns the underlying type\nfunc (v BoolValue) Get() interface{} {\n\treturn bool(v)\n}\n\n// valueType returns the EventStream header value type value.\nfunc (v BoolValue) valueType() valueType {\n\tif v {\n\t\treturn trueValueType\n\t}\n\treturn falseValueType\n}\n\nfunc (v BoolValue) String() string {\n\treturn strconv.FormatBool(bool(v))\n}\n\n// encode encodes the BoolValue into an eventstream binary value\n// representation.\nfunc (v BoolValue) encode(w io.Writer) error {\n\treturn binary.Write(w, binary.BigEndian, v.valueType())\n}\n\n// An Int8Value provides eventstream encoding, and representation of a Go\n// int8 value.\ntype Int8Value int8\n\n// Get returns the underlying value.\nfunc (v Int8Value) Get() interface{} {\n\treturn int8(v)\n}\n\n// valueType returns the EventStream header value type value.\nfunc (Int8Value) valueType() valueType {\n\treturn int8ValueType\n}\n\nfunc (v Int8Value) String() string {\n\treturn fmt.Sprintf(\"0x%02x\", int8(v))\n}\n\n// encode encodes the Int8Value into an eventstream binary value\n// representation.\nfunc (v Int8Value) encode(w io.Writer) error {\n\traw := rawValue{\n\t\tType: v.valueType(),\n\t}\n\n\treturn raw.encodeScalar(w, v)\n}\n\nfunc (v *Int8Value) decode(r io.Reader) error {\n\tn, err := decodeUint8(r)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t*v = Int8Value(n)\n\treturn nil\n}\n\n// An Int16Value provides eventstream encoding, and representation of a Go\n// int16 value.\ntype Int16Value int16\n\n// Get returns the underlying value.\nfunc (v Int16Value) Get() interface{} {\n\treturn int16(v)\n}\n\n// valueType returns the EventStream header value type value.\nfunc (Int16Value) valueType() valueType {\n\treturn int16ValueType\n}\n\nfunc (v Int16Value) String() string {\n\treturn fmt.Sprintf(\"0x%04x\", int16(v))\n}\n\n// encode encodes the Int16Value into an eventstream binary value\n// representation.\nfunc (v Int16Value) encode(w io.Writer) error {\n\traw := rawValue{\n\t\tType: v.valueType(),\n\t}\n\treturn raw.encodeScalar(w, v)\n}\n\nfunc (v *Int16Value) decode(r io.Reader) error {\n\tn, err := decodeUint16(r)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t*v = Int16Value(n)\n\treturn nil\n}\n\n// An Int32Value provides eventstream encoding, and representation of a Go\n// int32 value.\ntype Int32Value int32\n\n// Get returns the underlying value.\nfunc (v Int32Value) Get() interface{} {\n\treturn int32(v)\n}\n\n// valueType returns the EventStream header value type value.\nfunc (Int32Value) valueType() valueType {\n\treturn int32ValueType\n}\n\nfunc (v Int32Value) String() string {\n\treturn fmt.Sprintf(\"0x%08x\", int32(v))\n}\n\n// encode encodes the Int32Value into an eventstream binary value\n// representation.\nfunc (v Int32Value) encode(w io.Writer) error {\n\traw := rawValue{\n\t\tType: v.valueType(),\n\t}\n\treturn raw.encodeScalar(w, v)\n}\n\nfunc (v *Int32Value) decode(r io.Reader) error {\n\tn, err := decodeUint32(r)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t*v = Int32Value(n)\n\treturn nil\n}\n\n// An Int64Value provides eventstream encoding, and representation of a Go\n// int64 value.\ntype Int64Value int64\n\n// Get returns the underlying value.\nfunc (v Int64Value) Get() interface{} {\n\treturn int64(v)\n}\n\n// valueType returns the EventStream header value type value.\nfunc (Int64Value) valueType() valueType {\n\treturn int64ValueType\n}\n\nfunc (v Int64Value) String() string {\n\treturn fmt.Sprintf(\"0x%016x\", int64(v))\n}\n\n// encode encodes the Int64Value into an eventstream binary value\n// representation.\nfunc (v Int64Value) encode(w io.Writer) error {\n\traw := rawValue{\n\t\tType: v.valueType(),\n\t}\n\treturn raw.encodeScalar(w, v)\n}\n\nfunc (v *Int64Value) decode(r io.Reader) error {\n\tn, err := decodeUint64(r)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t*v = Int64Value(n)\n\treturn nil\n}\n\n// An BytesValue provides eventstream encoding, and representation of a Go\n// byte slice.\ntype BytesValue []byte\n\n// Get returns the underlying value.\nfunc (v BytesValue) Get() interface{} {\n\treturn []byte(v)\n}\n\n// valueType returns the EventStream header value type value.\nfunc (BytesValue) valueType() valueType {\n\treturn bytesValueType\n}\n\nfunc (v BytesValue) String() string {\n\treturn base64.StdEncoding.EncodeToString([]byte(v))\n}\n\n// encode encodes the BytesValue into an eventstream binary value\n// representation.\nfunc (v BytesValue) encode(w io.Writer) error {\n\traw := rawValue{\n\t\tType: v.valueType(),\n\t}\n\n\treturn raw.encodeBytes(w, []byte(v))\n}\n\nfunc (v *BytesValue) decode(r io.Reader) error {\n\tbuf, err := decodeBytesValue(r)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t*v = BytesValue(buf)\n\treturn nil\n}\n\n// An StringValue provides eventstream encoding, and representation of a Go\n// string.\ntype StringValue string\n\n// Get returns the underlying value.\nfunc (v StringValue) Get() interface{} {\n\treturn string(v)\n}\n\n// valueType returns the EventStream header value type value.\nfunc (StringValue) valueType() valueType {\n\treturn stringValueType\n}\n\nfunc (v StringValue) String() string {\n\treturn string(v)\n}\n\n// encode encodes the StringValue into an eventstream binary value\n// representation.\nfunc (v StringValue) encode(w io.Writer) error {\n\traw := rawValue{\n\t\tType: v.valueType(),\n\t}\n\n\treturn raw.encodeString(w, string(v))\n}\n\nfunc (v *StringValue) decode(r io.Reader) error {\n\ts, err := decodeStringValue(r)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t*v = StringValue(s)\n\treturn nil\n}\n\n// An TimestampValue provides eventstream encoding, and representation of a Go\n// timestamp.\ntype TimestampValue time.Time\n\n// Get returns the underlying value.\nfunc (v TimestampValue) Get() interface{} {\n\treturn time.Time(v)\n}\n\n// valueType returns the EventStream header value type value.\nfunc (TimestampValue) valueType() valueType {\n\treturn timestampValueType\n}\n\nfunc (v TimestampValue) epochMilli() int64 {\n\tnano := time.Time(v).UnixNano()\n\tmsec := nano / int64(time.Millisecond)\n\treturn msec\n}\n\nfunc (v TimestampValue) String() string {\n\tmsec := v.epochMilli()\n\treturn strconv.FormatInt(msec, 10)\n}\n\n// encode encodes the TimestampValue into an eventstream binary value\n// representation.\nfunc (v TimestampValue) encode(w io.Writer) error {\n\traw := rawValue{\n\t\tType: v.valueType(),\n\t}\n\n\tmsec := v.epochMilli()\n\treturn raw.encodeScalar(w, msec)\n}\n\nfunc (v *TimestampValue) decode(r io.Reader) error {\n\tn, err := decodeUint64(r)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t*v = TimestampValue(timeFromEpochMilli(int64(n)))\n\treturn nil\n}\n\nfunc timeFromEpochMilli(t int64) time.Time {\n\tsecs := t / 1e3\n\tmsec := t % 1e3\n\treturn time.Unix(secs, msec*int64(time.Millisecond)).UTC()\n}\n\n// An UUIDValue provides eventstream encoding, and representation of a UUID\n// value.\ntype UUIDValue [16]byte\n\n// Get returns the underlying value.\nfunc (v UUIDValue) Get() interface{} {\n\treturn v[:]\n}\n\n// valueType returns the EventStream header value type value.\nfunc (UUIDValue) valueType() valueType {\n\treturn uuidValueType\n}\n\nfunc (v UUIDValue) String() string {\n\treturn fmt.Sprintf(`%X-%X-%X-%X-%X`, v[0:4], v[4:6], v[6:8], v[8:10], v[10:])\n}\n\n// encode encodes the UUIDValue into an eventstream binary value\n// representation.\nfunc (v UUIDValue) encode(w io.Writer) error {\n\traw := rawValue{\n\t\tType: v.valueType(),\n\t}\n\n\treturn raw.encodeFixedSlice(w, v[:])\n}\n\nfunc (v *UUIDValue) decode(r io.Reader) error {\n\ttv := (*v)[:]\n\treturn decodeFixedBytesValue(r, tv)\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/private/protocol/eventstream/message.go",
    "content": "package eventstream\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"hash/crc32\"\n)\n\nconst preludeLen = 8\nconst preludeCRCLen = 4\nconst msgCRCLen = 4\nconst minMsgLen = preludeLen + preludeCRCLen + msgCRCLen\nconst maxPayloadLen = 1024 * 1024 * 16 // 16MB\nconst maxHeadersLen = 1024 * 128       // 128KB\nconst maxMsgLen = minMsgLen + maxHeadersLen + maxPayloadLen\n\nvar crc32IEEETable = crc32.MakeTable(crc32.IEEE)\n\n// A Message provides the eventstream message representation.\ntype Message struct {\n\tHeaders Headers\n\tPayload []byte\n}\n\nfunc (m *Message) rawMessage() (rawMessage, error) {\n\tvar raw rawMessage\n\n\tif len(m.Headers) > 0 {\n\t\tvar headers bytes.Buffer\n\t\tif err := encodeHeaders(&headers, m.Headers); err != nil {\n\t\t\treturn rawMessage{}, err\n\t\t}\n\t\traw.Headers = headers.Bytes()\n\t\traw.HeadersLen = uint32(len(raw.Headers))\n\t}\n\n\traw.Length = raw.HeadersLen + uint32(len(m.Payload)) + minMsgLen\n\n\thash := crc32.New(crc32IEEETable)\n\tbinaryWriteFields(hash, binary.BigEndian, raw.Length, raw.HeadersLen)\n\traw.PreludeCRC = hash.Sum32()\n\n\tbinaryWriteFields(hash, binary.BigEndian, raw.PreludeCRC)\n\n\tif raw.HeadersLen > 0 {\n\t\thash.Write(raw.Headers)\n\t}\n\n\t// Read payload bytes and update hash for it as well.\n\tif len(m.Payload) > 0 {\n\t\traw.Payload = m.Payload\n\t\thash.Write(raw.Payload)\n\t}\n\n\traw.CRC = hash.Sum32()\n\n\treturn raw, nil\n}\n\ntype messagePrelude struct {\n\tLength     uint32\n\tHeadersLen uint32\n\tPreludeCRC uint32\n}\n\nfunc (p messagePrelude) PayloadLen() uint32 {\n\treturn p.Length - p.HeadersLen - minMsgLen\n}\n\nfunc (p messagePrelude) ValidateLens() error {\n\tif p.Length == 0 || p.Length > maxMsgLen {\n\t\treturn LengthError{\n\t\t\tPart: \"message prelude\",\n\t\t\tWant: maxMsgLen,\n\t\t\tHave: int(p.Length),\n\t\t}\n\t}\n\tif p.HeadersLen > maxHeadersLen {\n\t\treturn LengthError{\n\t\t\tPart: \"message headers\",\n\t\t\tWant: maxHeadersLen,\n\t\t\tHave: int(p.HeadersLen),\n\t\t}\n\t}\n\tif payloadLen := p.PayloadLen(); payloadLen > maxPayloadLen {\n\t\treturn LengthError{\n\t\t\tPart: \"message payload\",\n\t\t\tWant: maxPayloadLen,\n\t\t\tHave: int(payloadLen),\n\t\t}\n\t}\n\n\treturn nil\n}\n\ntype rawMessage struct {\n\tmessagePrelude\n\n\tHeaders []byte\n\tPayload []byte\n\n\tCRC uint32\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/private/protocol/host.go",
    "content": "package protocol\n\nimport (\n\t\"strings\"\n\n\t\"github.com/aws/aws-sdk-go/aws/request\"\n)\n\n// ValidateEndpointHostHandler is a request handler that will validate the\n// request endpoint's hosts is a valid RFC 3986 host.\nvar ValidateEndpointHostHandler = request.NamedHandler{\n\tName: \"awssdk.protocol.ValidateEndpointHostHandler\",\n\tFn: func(r *request.Request) {\n\t\terr := ValidateEndpointHost(r.Operation.Name, r.HTTPRequest.URL.Host)\n\t\tif err != nil {\n\t\t\tr.Error = err\n\t\t}\n\t},\n}\n\n// ValidateEndpointHost validates that the host string passed in is a valid RFC\n// 3986 host. Returns error if the host is not valid.\nfunc ValidateEndpointHost(opName, host string) error {\n\tparamErrs := request.ErrInvalidParams{Context: opName}\n\tlabels := strings.Split(host, \".\")\n\n\tfor i, label := range labels {\n\t\tif i == len(labels)-1 && len(label) == 0 {\n\t\t\t// Allow trailing dot for FQDN hosts.\n\t\t\tcontinue\n\t\t}\n\n\t\tif !ValidHostLabel(label) {\n\t\t\tparamErrs.Add(request.NewErrParamFormat(\n\t\t\t\t\"endpoint host label\", \"[a-zA-Z0-9-]{1,63}\", label))\n\t\t}\n\t}\n\n\tif len(host) > 255 {\n\t\tparamErrs.Add(request.NewErrParamMaxLen(\n\t\t\t\"endpoint host\", 255, host,\n\t\t))\n\t}\n\n\tif paramErrs.Len() > 0 {\n\t\treturn paramErrs\n\t}\n\treturn nil\n}\n\n// ValidHostLabel returns if the label is a valid RFC 3986 host label.\nfunc ValidHostLabel(label string) bool {\n\tif l := len(label); l == 0 || l > 63 {\n\t\treturn false\n\t}\n\tfor _, r := range label {\n\t\tswitch {\n\t\tcase r >= '0' && r <= '9':\n\t\tcase r >= 'A' && r <= 'Z':\n\t\tcase r >= 'a' && r <= 'z':\n\t\tcase r == '-':\n\t\tdefault:\n\t\t\treturn false\n\t\t}\n\t}\n\n\treturn true\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/private/protocol/host_prefix.go",
    "content": "package protocol\n\nimport (\n\t\"strings\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-go/aws/request\"\n)\n\n// HostPrefixHandlerName is the handler name for the host prefix request\n// handler.\nconst HostPrefixHandlerName = \"awssdk.endpoint.HostPrefixHandler\"\n\n// NewHostPrefixHandler constructs a build handler\nfunc NewHostPrefixHandler(prefix string, labelsFn func() map[string]string) request.NamedHandler {\n\tbuilder := HostPrefixBuilder{\n\t\tPrefix:   prefix,\n\t\tLabelsFn: labelsFn,\n\t}\n\n\treturn request.NamedHandler{\n\t\tName: HostPrefixHandlerName,\n\t\tFn:   builder.Build,\n\t}\n}\n\n// HostPrefixBuilder provides the request handler to expand and prepend\n// the host prefix into the operation's request endpoint host.\ntype HostPrefixBuilder struct {\n\tPrefix   string\n\tLabelsFn func() map[string]string\n}\n\n// Build updates the passed in Request with the HostPrefix template expanded.\nfunc (h HostPrefixBuilder) Build(r *request.Request) {\n\tif aws.BoolValue(r.Config.DisableEndpointHostPrefix) {\n\t\treturn\n\t}\n\n\tvar labels map[string]string\n\tif h.LabelsFn != nil {\n\t\tlabels = h.LabelsFn()\n\t}\n\n\tprefix := h.Prefix\n\tfor name, value := range labels {\n\t\tprefix = strings.Replace(prefix, \"{\"+name+\"}\", value, -1)\n\t}\n\n\tr.HTTPRequest.URL.Host = prefix + r.HTTPRequest.URL.Host\n\tif len(r.HTTPRequest.Host) > 0 {\n\t\tr.HTTPRequest.Host = prefix + r.HTTPRequest.Host\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/private/protocol/idempotency.go",
    "content": "package protocol\n\nimport (\n\t\"crypto/rand\"\n\t\"fmt\"\n\t\"reflect\"\n)\n\n// RandReader is the random reader the protocol package will use to read\n// random bytes from. This is exported for testing, and should not be used.\nvar RandReader = rand.Reader\n\nconst idempotencyTokenFillTag = `idempotencyToken`\n\n// CanSetIdempotencyToken returns true if the struct field should be\n// automatically populated with a Idempotency token.\n//\n// Only *string and string type fields that are tagged with idempotencyToken\n// which are not already set can be auto filled.\nfunc CanSetIdempotencyToken(v reflect.Value, f reflect.StructField) bool {\n\tswitch u := v.Interface().(type) {\n\t// To auto fill an Idempotency token the field must be a string,\n\t// tagged for auto fill, and have a zero value.\n\tcase *string:\n\t\treturn u == nil && len(f.Tag.Get(idempotencyTokenFillTag)) != 0\n\tcase string:\n\t\treturn len(u) == 0 && len(f.Tag.Get(idempotencyTokenFillTag)) != 0\n\t}\n\n\treturn false\n}\n\n// GetIdempotencyToken returns a randomly generated idempotency token.\nfunc GetIdempotencyToken() string {\n\tb := make([]byte, 16)\n\tRandReader.Read(b)\n\n\treturn UUIDVersion4(b)\n}\n\n// SetIdempotencyToken will set the value provided with a Idempotency Token.\n// Given that the value can be set. Will panic if value is not setable.\nfunc SetIdempotencyToken(v reflect.Value) {\n\tif v.Kind() == reflect.Ptr {\n\t\tif v.IsNil() && v.CanSet() {\n\t\t\tv.Set(reflect.New(v.Type().Elem()))\n\t\t}\n\t\tv = v.Elem()\n\t}\n\tv = reflect.Indirect(v)\n\n\tif !v.CanSet() {\n\t\tpanic(fmt.Sprintf(\"unable to set idempotnecy token %v\", v))\n\t}\n\n\tb := make([]byte, 16)\n\t_, err := rand.Read(b)\n\tif err != nil {\n\t\t// TODO handle error\n\t\treturn\n\t}\n\n\tv.Set(reflect.ValueOf(UUIDVersion4(b)))\n}\n\n// UUIDVersion4 returns a Version 4 random UUID from the byte slice provided\nfunc UUIDVersion4(u []byte) string {\n\t// https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_4_.28random.29\n\t// 13th character is \"4\"\n\tu[6] = (u[6] | 0x40) & 0x4F\n\t// 17th character is \"8\", \"9\", \"a\", or \"b\"\n\tu[8] = (u[8] | 0x80) & 0xBF\n\n\treturn fmt.Sprintf(`%X-%X-%X-%X-%X`, u[0:4], u[4:6], u[6:8], u[8:10], u[10:])\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/private/protocol/json/jsonutil/build.go",
    "content": "// Package jsonutil provides JSON serialization of AWS requests and responses.\npackage jsonutil\n\nimport (\n\t\"bytes\"\n\t\"encoding/base64\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"math\"\n\t\"reflect\"\n\t\"sort\"\n\t\"strconv\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-go/private/protocol\"\n)\n\nvar timeType = reflect.ValueOf(time.Time{}).Type()\nvar byteSliceType = reflect.ValueOf([]byte{}).Type()\n\n// BuildJSON builds a JSON string for a given object v.\nfunc BuildJSON(v interface{}) ([]byte, error) {\n\tvar buf bytes.Buffer\n\n\terr := buildAny(reflect.ValueOf(v), &buf, \"\")\n\treturn buf.Bytes(), err\n}\n\nfunc buildAny(value reflect.Value, buf *bytes.Buffer, tag reflect.StructTag) error {\n\torigVal := value\n\tvalue = reflect.Indirect(value)\n\tif !value.IsValid() {\n\t\treturn nil\n\t}\n\n\tvtype := value.Type()\n\n\tt := tag.Get(\"type\")\n\tif t == \"\" {\n\t\tswitch vtype.Kind() {\n\t\tcase reflect.Struct:\n\t\t\t// also it can't be a time object\n\t\t\tif value.Type() != timeType {\n\t\t\t\tt = \"structure\"\n\t\t\t}\n\t\tcase reflect.Slice:\n\t\t\t// also it can't be a byte slice\n\t\t\tif _, ok := value.Interface().([]byte); !ok {\n\t\t\t\tt = \"list\"\n\t\t\t}\n\t\tcase reflect.Map:\n\t\t\t// cannot be a JSONValue map\n\t\t\tif _, ok := value.Interface().(aws.JSONValue); !ok {\n\t\t\t\tt = \"map\"\n\t\t\t}\n\t\t}\n\t}\n\n\tswitch t {\n\tcase \"structure\":\n\t\tif field, ok := vtype.FieldByName(\"_\"); ok {\n\t\t\ttag = field.Tag\n\t\t}\n\t\treturn buildStruct(value, buf, tag)\n\tcase \"list\":\n\t\treturn buildList(value, buf, tag)\n\tcase \"map\":\n\t\treturn buildMap(value, buf, tag)\n\tdefault:\n\t\treturn buildScalar(origVal, buf, tag)\n\t}\n}\n\nfunc buildStruct(value reflect.Value, buf *bytes.Buffer, tag reflect.StructTag) error {\n\tif !value.IsValid() {\n\t\treturn nil\n\t}\n\n\t// unwrap payloads\n\tif payload := tag.Get(\"payload\"); payload != \"\" {\n\t\tfield, _ := value.Type().FieldByName(payload)\n\t\ttag = field.Tag\n\t\tvalue = elemOf(value.FieldByName(payload))\n\n\t\tif !value.IsValid() {\n\t\t\treturn nil\n\t\t}\n\t}\n\n\tbuf.WriteByte('{')\n\n\tt := value.Type()\n\tfirst := true\n\tfor i := 0; i < t.NumField(); i++ {\n\t\tmember := value.Field(i)\n\n\t\t// This allocates the most memory.\n\t\t// Additionally, we cannot skip nil fields due to\n\t\t// idempotency auto filling.\n\t\tfield := t.Field(i)\n\n\t\tif field.PkgPath != \"\" {\n\t\t\tcontinue // ignore unexported fields\n\t\t}\n\t\tif field.Tag.Get(\"json\") == \"-\" {\n\t\t\tcontinue\n\t\t}\n\t\tif field.Tag.Get(\"location\") != \"\" {\n\t\t\tcontinue // ignore non-body elements\n\t\t}\n\t\tif field.Tag.Get(\"ignore\") != \"\" {\n\t\t\tcontinue\n\t\t}\n\n\t\tif protocol.CanSetIdempotencyToken(member, field) {\n\t\t\ttoken := protocol.GetIdempotencyToken()\n\t\t\tmember = reflect.ValueOf(&token)\n\t\t}\n\n\t\tif (member.Kind() == reflect.Ptr || member.Kind() == reflect.Slice || member.Kind() == reflect.Map) && member.IsNil() {\n\t\t\tcontinue // ignore unset fields\n\t\t}\n\n\t\tif first {\n\t\t\tfirst = false\n\t\t} else {\n\t\t\tbuf.WriteByte(',')\n\t\t}\n\n\t\t// figure out what this field is called\n\t\tname := field.Name\n\t\tif locName := field.Tag.Get(\"locationName\"); locName != \"\" {\n\t\t\tname = locName\n\t\t}\n\n\t\twriteString(name, buf)\n\t\tbuf.WriteString(`:`)\n\n\t\terr := buildAny(member, buf, field.Tag)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t}\n\n\tbuf.WriteString(\"}\")\n\n\treturn nil\n}\n\nfunc buildList(value reflect.Value, buf *bytes.Buffer, tag reflect.StructTag) error {\n\tbuf.WriteString(\"[\")\n\n\tfor i := 0; i < value.Len(); i++ {\n\t\tbuildAny(value.Index(i), buf, \"\")\n\n\t\tif i < value.Len()-1 {\n\t\t\tbuf.WriteString(\",\")\n\t\t}\n\t}\n\n\tbuf.WriteString(\"]\")\n\n\treturn nil\n}\n\ntype sortedValues []reflect.Value\n\nfunc (sv sortedValues) Len() int           { return len(sv) }\nfunc (sv sortedValues) Swap(i, j int)      { sv[i], sv[j] = sv[j], sv[i] }\nfunc (sv sortedValues) Less(i, j int) bool { return sv[i].String() < sv[j].String() }\n\nfunc buildMap(value reflect.Value, buf *bytes.Buffer, tag reflect.StructTag) error {\n\tbuf.WriteString(\"{\")\n\n\tsv := sortedValues(value.MapKeys())\n\tsort.Sort(sv)\n\n\tfor i, k := range sv {\n\t\tif i > 0 {\n\t\t\tbuf.WriteByte(',')\n\t\t}\n\n\t\twriteString(k.String(), buf)\n\t\tbuf.WriteString(`:`)\n\n\t\tbuildAny(value.MapIndex(k), buf, \"\")\n\t}\n\n\tbuf.WriteString(\"}\")\n\n\treturn nil\n}\n\nfunc buildScalar(v reflect.Value, buf *bytes.Buffer, tag reflect.StructTag) error {\n\t// prevents allocation on the heap.\n\tscratch := [64]byte{}\n\tswitch value := reflect.Indirect(v); value.Kind() {\n\tcase reflect.String:\n\t\twriteString(value.String(), buf)\n\tcase reflect.Bool:\n\t\tif value.Bool() {\n\t\t\tbuf.WriteString(\"true\")\n\t\t} else {\n\t\t\tbuf.WriteString(\"false\")\n\t\t}\n\tcase reflect.Int64:\n\t\tbuf.Write(strconv.AppendInt(scratch[:0], value.Int(), 10))\n\tcase reflect.Float64:\n\t\tf := value.Float()\n\t\tif math.IsInf(f, 0) || math.IsNaN(f) {\n\t\t\treturn &json.UnsupportedValueError{Value: v, Str: strconv.FormatFloat(f, 'f', -1, 64)}\n\t\t}\n\t\tbuf.Write(strconv.AppendFloat(scratch[:0], f, 'f', -1, 64))\n\tdefault:\n\t\tswitch converted := value.Interface().(type) {\n\t\tcase time.Time:\n\t\t\tformat := tag.Get(\"timestampFormat\")\n\t\t\tif len(format) == 0 {\n\t\t\t\tformat = protocol.UnixTimeFormatName\n\t\t\t}\n\n\t\t\tts := protocol.FormatTime(format, converted)\n\t\t\tif format != protocol.UnixTimeFormatName {\n\t\t\t\tts = `\"` + ts + `\"`\n\t\t\t}\n\n\t\t\tbuf.WriteString(ts)\n\t\tcase []byte:\n\t\t\tif !value.IsNil() {\n\t\t\t\tbuf.WriteByte('\"')\n\t\t\t\tif len(converted) < 1024 {\n\t\t\t\t\t// for small buffers, using Encode directly is much faster.\n\t\t\t\t\tdst := make([]byte, base64.StdEncoding.EncodedLen(len(converted)))\n\t\t\t\t\tbase64.StdEncoding.Encode(dst, converted)\n\t\t\t\t\tbuf.Write(dst)\n\t\t\t\t} else {\n\t\t\t\t\t// for large buffers, avoid unnecessary extra temporary\n\t\t\t\t\t// buffer space.\n\t\t\t\t\tenc := base64.NewEncoder(base64.StdEncoding, buf)\n\t\t\t\t\tenc.Write(converted)\n\t\t\t\t\tenc.Close()\n\t\t\t\t}\n\t\t\t\tbuf.WriteByte('\"')\n\t\t\t}\n\t\tcase aws.JSONValue:\n\t\t\tstr, err := protocol.EncodeJSONValue(converted, protocol.QuotedEscape)\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"unable to encode JSONValue, %v\", err)\n\t\t\t}\n\t\t\tbuf.WriteString(str)\n\t\tdefault:\n\t\t\treturn fmt.Errorf(\"unsupported JSON value %v (%s)\", value.Interface(), value.Type())\n\t\t}\n\t}\n\treturn nil\n}\n\nvar hex = \"0123456789abcdef\"\n\nfunc writeString(s string, buf *bytes.Buffer) {\n\tbuf.WriteByte('\"')\n\tfor i := 0; i < len(s); i++ {\n\t\tif s[i] == '\"' {\n\t\t\tbuf.WriteString(`\\\"`)\n\t\t} else if s[i] == '\\\\' {\n\t\t\tbuf.WriteString(`\\\\`)\n\t\t} else if s[i] == '\\b' {\n\t\t\tbuf.WriteString(`\\b`)\n\t\t} else if s[i] == '\\f' {\n\t\t\tbuf.WriteString(`\\f`)\n\t\t} else if s[i] == '\\r' {\n\t\t\tbuf.WriteString(`\\r`)\n\t\t} else if s[i] == '\\t' {\n\t\t\tbuf.WriteString(`\\t`)\n\t\t} else if s[i] == '\\n' {\n\t\t\tbuf.WriteString(`\\n`)\n\t\t} else if s[i] < 32 {\n\t\t\tbuf.WriteString(\"\\\\u00\")\n\t\t\tbuf.WriteByte(hex[s[i]>>4])\n\t\t\tbuf.WriteByte(hex[s[i]&0xF])\n\t\t} else {\n\t\t\tbuf.WriteByte(s[i])\n\t\t}\n\t}\n\tbuf.WriteByte('\"')\n}\n\n// Returns the reflection element of a value, if it is a pointer.\nfunc elemOf(value reflect.Value) reflect.Value {\n\tfor value.Kind() == reflect.Ptr {\n\t\tvalue = value.Elem()\n\t}\n\treturn value\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/private/protocol/json/jsonutil/unmarshal.go",
    "content": "package jsonutil\n\nimport (\n\t\"bytes\"\n\t\"encoding/base64\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"reflect\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n\t\"github.com/aws/aws-sdk-go/private/protocol\"\n)\n\n// UnmarshalJSONError unmarshal's the reader's JSON document into the passed in\n// type. The value to unmarshal the json document into must be a pointer to the\n// type.\nfunc UnmarshalJSONError(v interface{}, stream io.Reader) error {\n\tvar errBuf bytes.Buffer\n\tbody := io.TeeReader(stream, &errBuf)\n\n\terr := json.NewDecoder(body).Decode(v)\n\tif err != nil {\n\t\tmsg := \"failed decoding error message\"\n\t\tif err == io.EOF {\n\t\t\tmsg = \"error message missing\"\n\t\t\terr = nil\n\t\t}\n\t\treturn awserr.NewUnmarshalError(err, msg, errBuf.Bytes())\n\t}\n\n\treturn nil\n}\n\n// UnmarshalJSON reads a stream and unmarshals the results in object v.\nfunc UnmarshalJSON(v interface{}, stream io.Reader) error {\n\tvar out interface{}\n\n\terr := json.NewDecoder(stream).Decode(&out)\n\tif err == io.EOF {\n\t\treturn nil\n\t} else if err != nil {\n\t\treturn err\n\t}\n\n\treturn unmarshalAny(reflect.ValueOf(v), out, \"\")\n}\n\nfunc unmarshalAny(value reflect.Value, data interface{}, tag reflect.StructTag) error {\n\tvtype := value.Type()\n\tif vtype.Kind() == reflect.Ptr {\n\t\tvtype = vtype.Elem() // check kind of actual element type\n\t}\n\n\tt := tag.Get(\"type\")\n\tif t == \"\" {\n\t\tswitch vtype.Kind() {\n\t\tcase reflect.Struct:\n\t\t\t// also it can't be a time object\n\t\t\tif _, ok := value.Interface().(*time.Time); !ok {\n\t\t\t\tt = \"structure\"\n\t\t\t}\n\t\tcase reflect.Slice:\n\t\t\t// also it can't be a byte slice\n\t\t\tif _, ok := value.Interface().([]byte); !ok {\n\t\t\t\tt = \"list\"\n\t\t\t}\n\t\tcase reflect.Map:\n\t\t\t// cannot be a JSONValue map\n\t\t\tif _, ok := value.Interface().(aws.JSONValue); !ok {\n\t\t\t\tt = \"map\"\n\t\t\t}\n\t\t}\n\t}\n\n\tswitch t {\n\tcase \"structure\":\n\t\tif field, ok := vtype.FieldByName(\"_\"); ok {\n\t\t\ttag = field.Tag\n\t\t}\n\t\treturn unmarshalStruct(value, data, tag)\n\tcase \"list\":\n\t\treturn unmarshalList(value, data, tag)\n\tcase \"map\":\n\t\treturn unmarshalMap(value, data, tag)\n\tdefault:\n\t\treturn unmarshalScalar(value, data, tag)\n\t}\n}\n\nfunc unmarshalStruct(value reflect.Value, data interface{}, tag reflect.StructTag) error {\n\tif data == nil {\n\t\treturn nil\n\t}\n\tmapData, ok := data.(map[string]interface{})\n\tif !ok {\n\t\treturn fmt.Errorf(\"JSON value is not a structure (%#v)\", data)\n\t}\n\n\tt := value.Type()\n\tif value.Kind() == reflect.Ptr {\n\t\tif value.IsNil() { // create the structure if it's nil\n\t\t\ts := reflect.New(value.Type().Elem())\n\t\t\tvalue.Set(s)\n\t\t\tvalue = s\n\t\t}\n\n\t\tvalue = value.Elem()\n\t\tt = t.Elem()\n\t}\n\n\t// unwrap any payloads\n\tif payload := tag.Get(\"payload\"); payload != \"\" {\n\t\tfield, _ := t.FieldByName(payload)\n\t\treturn unmarshalAny(value.FieldByName(payload), data, field.Tag)\n\t}\n\n\tfor i := 0; i < t.NumField(); i++ {\n\t\tfield := t.Field(i)\n\t\tif field.PkgPath != \"\" {\n\t\t\tcontinue // ignore unexported fields\n\t\t}\n\n\t\t// figure out what this field is called\n\t\tname := field.Name\n\t\tif locName := field.Tag.Get(\"locationName\"); locName != \"\" {\n\t\t\tname = locName\n\t\t}\n\n\t\tmember := value.FieldByIndex(field.Index)\n\t\terr := unmarshalAny(member, mapData[name], field.Tag)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc unmarshalList(value reflect.Value, data interface{}, tag reflect.StructTag) error {\n\tif data == nil {\n\t\treturn nil\n\t}\n\tlistData, ok := data.([]interface{})\n\tif !ok {\n\t\treturn fmt.Errorf(\"JSON value is not a list (%#v)\", data)\n\t}\n\n\tif value.IsNil() {\n\t\tl := len(listData)\n\t\tvalue.Set(reflect.MakeSlice(value.Type(), l, l))\n\t}\n\n\tfor i, c := range listData {\n\t\terr := unmarshalAny(value.Index(i), c, \"\")\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc unmarshalMap(value reflect.Value, data interface{}, tag reflect.StructTag) error {\n\tif data == nil {\n\t\treturn nil\n\t}\n\tmapData, ok := data.(map[string]interface{})\n\tif !ok {\n\t\treturn fmt.Errorf(\"JSON value is not a map (%#v)\", data)\n\t}\n\n\tif value.IsNil() {\n\t\tvalue.Set(reflect.MakeMap(value.Type()))\n\t}\n\n\tfor k, v := range mapData {\n\t\tkvalue := reflect.ValueOf(k)\n\t\tvvalue := reflect.New(value.Type().Elem()).Elem()\n\n\t\tunmarshalAny(vvalue, v, \"\")\n\t\tvalue.SetMapIndex(kvalue, vvalue)\n\t}\n\n\treturn nil\n}\n\nfunc unmarshalScalar(value reflect.Value, data interface{}, tag reflect.StructTag) error {\n\n\tswitch d := data.(type) {\n\tcase nil:\n\t\treturn nil // nothing to do here\n\tcase string:\n\t\tswitch value.Interface().(type) {\n\t\tcase *string:\n\t\t\tvalue.Set(reflect.ValueOf(&d))\n\t\tcase []byte:\n\t\t\tb, err := base64.StdEncoding.DecodeString(d)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tvalue.Set(reflect.ValueOf(b))\n\t\tcase *time.Time:\n\t\t\tformat := tag.Get(\"timestampFormat\")\n\t\t\tif len(format) == 0 {\n\t\t\t\tformat = protocol.ISO8601TimeFormatName\n\t\t\t}\n\n\t\t\tt, err := protocol.ParseTime(format, d)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tvalue.Set(reflect.ValueOf(&t))\n\t\tcase aws.JSONValue:\n\t\t\t// No need to use escaping as the value is a non-quoted string.\n\t\t\tv, err := protocol.DecodeJSONValue(d, protocol.NoEscape)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tvalue.Set(reflect.ValueOf(v))\n\t\tdefault:\n\t\t\treturn fmt.Errorf(\"unsupported value: %v (%s)\", value.Interface(), value.Type())\n\t\t}\n\tcase float64:\n\t\tswitch value.Interface().(type) {\n\t\tcase *int64:\n\t\t\tdi := int64(d)\n\t\t\tvalue.Set(reflect.ValueOf(&di))\n\t\tcase *float64:\n\t\t\tvalue.Set(reflect.ValueOf(&d))\n\t\tcase *time.Time:\n\t\t\t// Time unmarshaled from a float64 can only be epoch seconds\n\t\t\tt := time.Unix(int64(d), 0).UTC()\n\t\t\tvalue.Set(reflect.ValueOf(&t))\n\t\tdefault:\n\t\t\treturn fmt.Errorf(\"unsupported value: %v (%s)\", value.Interface(), value.Type())\n\t\t}\n\tcase bool:\n\t\tswitch value.Interface().(type) {\n\t\tcase *bool:\n\t\t\tvalue.Set(reflect.ValueOf(&d))\n\t\tdefault:\n\t\t\treturn fmt.Errorf(\"unsupported value: %v (%s)\", value.Interface(), value.Type())\n\t\t}\n\tdefault:\n\t\treturn fmt.Errorf(\"unsupported JSON value (%v)\", data)\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/private/protocol/jsonvalue.go",
    "content": "package protocol\n\nimport (\n\t\"encoding/base64\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"strconv\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n)\n\n// EscapeMode is the mode that should be use for escaping a value\ntype EscapeMode uint\n\n// The modes for escaping a value before it is marshaled, and unmarshaled.\nconst (\n\tNoEscape EscapeMode = iota\n\tBase64Escape\n\tQuotedEscape\n)\n\n// EncodeJSONValue marshals the value into a JSON string, and optionally base64\n// encodes the string before returning it.\n//\n// Will panic if the escape mode is unknown.\nfunc EncodeJSONValue(v aws.JSONValue, escape EscapeMode) (string, error) {\n\tb, err := json.Marshal(v)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\tswitch escape {\n\tcase NoEscape:\n\t\treturn string(b), nil\n\tcase Base64Escape:\n\t\treturn base64.StdEncoding.EncodeToString(b), nil\n\tcase QuotedEscape:\n\t\treturn strconv.Quote(string(b)), nil\n\t}\n\n\tpanic(fmt.Sprintf(\"EncodeJSONValue called with unknown EscapeMode, %v\", escape))\n}\n\n// DecodeJSONValue will attempt to decode the string input as a JSONValue.\n// Optionally decoding base64 the value first before JSON unmarshaling.\n//\n// Will panic if the escape mode is unknown.\nfunc DecodeJSONValue(v string, escape EscapeMode) (aws.JSONValue, error) {\n\tvar b []byte\n\tvar err error\n\n\tswitch escape {\n\tcase NoEscape:\n\t\tb = []byte(v)\n\tcase Base64Escape:\n\t\tb, err = base64.StdEncoding.DecodeString(v)\n\tcase QuotedEscape:\n\t\tvar u string\n\t\tu, err = strconv.Unquote(v)\n\t\tb = []byte(u)\n\tdefault:\n\t\tpanic(fmt.Sprintf(\"DecodeJSONValue called with unknown EscapeMode, %v\", escape))\n\t}\n\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tm := aws.JSONValue{}\n\terr = json.Unmarshal(b, &m)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn m, nil\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/private/protocol/payload.go",
    "content": "package protocol\n\nimport (\n\t\"io\"\n\t\"io/ioutil\"\n\t\"net/http\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-go/aws/client/metadata\"\n\t\"github.com/aws/aws-sdk-go/aws/request\"\n)\n\n// PayloadUnmarshaler provides the interface for unmarshaling a payload's\n// reader into a SDK shape.\ntype PayloadUnmarshaler interface {\n\tUnmarshalPayload(io.Reader, interface{}) error\n}\n\n// HandlerPayloadUnmarshal implements the PayloadUnmarshaler from a\n// HandlerList. This provides the support for unmarshaling a payload reader to\n// a shape without needing a SDK request first.\ntype HandlerPayloadUnmarshal struct {\n\tUnmarshalers request.HandlerList\n}\n\n// UnmarshalPayload unmarshals the io.Reader payload into the SDK shape using\n// the Unmarshalers HandlerList provided. Returns an error if unable\n// unmarshaling fails.\nfunc (h HandlerPayloadUnmarshal) UnmarshalPayload(r io.Reader, v interface{}) error {\n\treq := &request.Request{\n\t\tHTTPRequest: &http.Request{},\n\t\tHTTPResponse: &http.Response{\n\t\t\tStatusCode: 200,\n\t\t\tHeader:     http.Header{},\n\t\t\tBody:       ioutil.NopCloser(r),\n\t\t},\n\t\tData: v,\n\t}\n\n\th.Unmarshalers.Run(req)\n\n\treturn req.Error\n}\n\n// PayloadMarshaler provides the interface for marshaling a SDK shape into and\n// io.Writer.\ntype PayloadMarshaler interface {\n\tMarshalPayload(io.Writer, interface{}) error\n}\n\n// HandlerPayloadMarshal implements the PayloadMarshaler from a HandlerList.\n// This provides support for marshaling a SDK shape into an io.Writer without\n// needing a SDK request first.\ntype HandlerPayloadMarshal struct {\n\tMarshalers request.HandlerList\n}\n\n// MarshalPayload marshals the SDK shape into the io.Writer using the\n// Marshalers HandlerList provided. Returns an error if unable if marshal\n// fails.\nfunc (h HandlerPayloadMarshal) MarshalPayload(w io.Writer, v interface{}) error {\n\treq := request.New(\n\t\taws.Config{},\n\t\tmetadata.ClientInfo{},\n\t\trequest.Handlers{},\n\t\tnil,\n\t\t&request.Operation{HTTPMethod: \"GET\"},\n\t\tv,\n\t\tnil,\n\t)\n\n\th.Marshalers.Run(req)\n\n\tif req.Error != nil {\n\t\treturn req.Error\n\t}\n\n\tio.Copy(w, req.GetBody())\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/private/protocol/query/build.go",
    "content": "// Package query provides serialization of AWS query requests, and responses.\npackage query\n\n//go:generate go run -tags codegen ../../../models/protocol_tests/generate.go ../../../models/protocol_tests/input/query.json build_test.go\n\nimport (\n\t\"net/url\"\n\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n\t\"github.com/aws/aws-sdk-go/aws/request\"\n\t\"github.com/aws/aws-sdk-go/private/protocol/query/queryutil\"\n)\n\n// BuildHandler is a named request handler for building query protocol requests\nvar BuildHandler = request.NamedHandler{Name: \"awssdk.query.Build\", Fn: Build}\n\n// Build builds a request for an AWS Query service.\nfunc Build(r *request.Request) {\n\tbody := url.Values{\n\t\t\"Action\":  {r.Operation.Name},\n\t\t\"Version\": {r.ClientInfo.APIVersion},\n\t}\n\tif err := queryutil.Parse(body, r.Params, false); err != nil {\n\t\tr.Error = awserr.New(request.ErrCodeSerialization, \"failed encoding Query request\", err)\n\t\treturn\n\t}\n\n\tif !r.IsPresigned() {\n\t\tr.HTTPRequest.Method = \"POST\"\n\t\tr.HTTPRequest.Header.Set(\"Content-Type\", \"application/x-www-form-urlencoded; charset=utf-8\")\n\t\tr.SetBufferBody([]byte(body.Encode()))\n\t} else { // This is a pre-signed request\n\t\tr.HTTPRequest.Method = \"GET\"\n\t\tr.HTTPRequest.URL.RawQuery = body.Encode()\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/private/protocol/query/queryutil/queryutil.go",
    "content": "package queryutil\n\nimport (\n\t\"encoding/base64\"\n\t\"fmt\"\n\t\"net/url\"\n\t\"reflect\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go/private/protocol\"\n)\n\n// Parse parses an object i and fills a url.Values object. The isEC2 flag\n// indicates if this is the EC2 Query sub-protocol.\nfunc Parse(body url.Values, i interface{}, isEC2 bool) error {\n\tq := queryParser{isEC2: isEC2}\n\treturn q.parseValue(body, reflect.ValueOf(i), \"\", \"\")\n}\n\nfunc elemOf(value reflect.Value) reflect.Value {\n\tfor value.Kind() == reflect.Ptr {\n\t\tvalue = value.Elem()\n\t}\n\treturn value\n}\n\ntype queryParser struct {\n\tisEC2 bool\n}\n\nfunc (q *queryParser) parseValue(v url.Values, value reflect.Value, prefix string, tag reflect.StructTag) error {\n\tvalue = elemOf(value)\n\n\t// no need to handle zero values\n\tif !value.IsValid() {\n\t\treturn nil\n\t}\n\n\tt := tag.Get(\"type\")\n\tif t == \"\" {\n\t\tswitch value.Kind() {\n\t\tcase reflect.Struct:\n\t\t\tt = \"structure\"\n\t\tcase reflect.Slice:\n\t\t\tt = \"list\"\n\t\tcase reflect.Map:\n\t\t\tt = \"map\"\n\t\t}\n\t}\n\n\tswitch t {\n\tcase \"structure\":\n\t\treturn q.parseStruct(v, value, prefix)\n\tcase \"list\":\n\t\treturn q.parseList(v, value, prefix, tag)\n\tcase \"map\":\n\t\treturn q.parseMap(v, value, prefix, tag)\n\tdefault:\n\t\treturn q.parseScalar(v, value, prefix, tag)\n\t}\n}\n\nfunc (q *queryParser) parseStruct(v url.Values, value reflect.Value, prefix string) error {\n\tif !value.IsValid() {\n\t\treturn nil\n\t}\n\n\tt := value.Type()\n\tfor i := 0; i < value.NumField(); i++ {\n\t\telemValue := elemOf(value.Field(i))\n\t\tfield := t.Field(i)\n\n\t\tif field.PkgPath != \"\" {\n\t\t\tcontinue // ignore unexported fields\n\t\t}\n\t\tif field.Tag.Get(\"ignore\") != \"\" {\n\t\t\tcontinue\n\t\t}\n\n\t\tif protocol.CanSetIdempotencyToken(value.Field(i), field) {\n\t\t\ttoken := protocol.GetIdempotencyToken()\n\t\t\telemValue = reflect.ValueOf(token)\n\t\t}\n\n\t\tvar name string\n\t\tif q.isEC2 {\n\t\t\tname = field.Tag.Get(\"queryName\")\n\t\t}\n\t\tif name == \"\" {\n\t\t\tif field.Tag.Get(\"flattened\") != \"\" && field.Tag.Get(\"locationNameList\") != \"\" {\n\t\t\t\tname = field.Tag.Get(\"locationNameList\")\n\t\t\t} else if locName := field.Tag.Get(\"locationName\"); locName != \"\" {\n\t\t\t\tname = locName\n\t\t\t}\n\t\t\tif name != \"\" && q.isEC2 {\n\t\t\t\tname = strings.ToUpper(name[0:1]) + name[1:]\n\t\t\t}\n\t\t}\n\t\tif name == \"\" {\n\t\t\tname = field.Name\n\t\t}\n\n\t\tif prefix != \"\" {\n\t\t\tname = prefix + \".\" + name\n\t\t}\n\n\t\tif err := q.parseValue(v, elemValue, name, field.Tag); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (q *queryParser) parseList(v url.Values, value reflect.Value, prefix string, tag reflect.StructTag) error {\n\t// If it's empty, generate an empty value\n\tif !value.IsNil() && value.Len() == 0 {\n\t\tv.Set(prefix, \"\")\n\t\treturn nil\n\t}\n\n\tif _, ok := value.Interface().([]byte); ok {\n\t\treturn q.parseScalar(v, value, prefix, tag)\n\t}\n\n\t// check for unflattened list member\n\tif !q.isEC2 && tag.Get(\"flattened\") == \"\" {\n\t\tif listName := tag.Get(\"locationNameList\"); listName == \"\" {\n\t\t\tprefix += \".member\"\n\t\t} else {\n\t\t\tprefix += \".\" + listName\n\t\t}\n\t}\n\n\tfor i := 0; i < value.Len(); i++ {\n\t\tslicePrefix := prefix\n\t\tif slicePrefix == \"\" {\n\t\t\tslicePrefix = strconv.Itoa(i + 1)\n\t\t} else {\n\t\t\tslicePrefix = slicePrefix + \".\" + strconv.Itoa(i+1)\n\t\t}\n\t\tif err := q.parseValue(v, value.Index(i), slicePrefix, \"\"); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (q *queryParser) parseMap(v url.Values, value reflect.Value, prefix string, tag reflect.StructTag) error {\n\t// If it's empty, generate an empty value\n\tif !value.IsNil() && value.Len() == 0 {\n\t\tv.Set(prefix, \"\")\n\t\treturn nil\n\t}\n\n\t// check for unflattened list member\n\tif !q.isEC2 && tag.Get(\"flattened\") == \"\" {\n\t\tprefix += \".entry\"\n\t}\n\n\t// sort keys for improved serialization consistency.\n\t// this is not strictly necessary for protocol support.\n\tmapKeyValues := value.MapKeys()\n\tmapKeys := map[string]reflect.Value{}\n\tmapKeyNames := make([]string, len(mapKeyValues))\n\tfor i, mapKey := range mapKeyValues {\n\t\tname := mapKey.String()\n\t\tmapKeys[name] = mapKey\n\t\tmapKeyNames[i] = name\n\t}\n\tsort.Strings(mapKeyNames)\n\n\tfor i, mapKeyName := range mapKeyNames {\n\t\tmapKey := mapKeys[mapKeyName]\n\t\tmapValue := value.MapIndex(mapKey)\n\n\t\tkname := tag.Get(\"locationNameKey\")\n\t\tif kname == \"\" {\n\t\t\tkname = \"key\"\n\t\t}\n\t\tvname := tag.Get(\"locationNameValue\")\n\t\tif vname == \"\" {\n\t\t\tvname = \"value\"\n\t\t}\n\n\t\t// serialize key\n\t\tvar keyName string\n\t\tif prefix == \"\" {\n\t\t\tkeyName = strconv.Itoa(i+1) + \".\" + kname\n\t\t} else {\n\t\t\tkeyName = prefix + \".\" + strconv.Itoa(i+1) + \".\" + kname\n\t\t}\n\n\t\tif err := q.parseValue(v, mapKey, keyName, \"\"); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// serialize value\n\t\tvar valueName string\n\t\tif prefix == \"\" {\n\t\t\tvalueName = strconv.Itoa(i+1) + \".\" + vname\n\t\t} else {\n\t\t\tvalueName = prefix + \".\" + strconv.Itoa(i+1) + \".\" + vname\n\t\t}\n\n\t\tif err := q.parseValue(v, mapValue, valueName, \"\"); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (q *queryParser) parseScalar(v url.Values, r reflect.Value, name string, tag reflect.StructTag) error {\n\tswitch value := r.Interface().(type) {\n\tcase string:\n\t\tv.Set(name, value)\n\tcase []byte:\n\t\tif !r.IsNil() {\n\t\t\tv.Set(name, base64.StdEncoding.EncodeToString(value))\n\t\t}\n\tcase bool:\n\t\tv.Set(name, strconv.FormatBool(value))\n\tcase int64:\n\t\tv.Set(name, strconv.FormatInt(value, 10))\n\tcase int:\n\t\tv.Set(name, strconv.Itoa(value))\n\tcase float64:\n\t\tv.Set(name, strconv.FormatFloat(value, 'f', -1, 64))\n\tcase float32:\n\t\tv.Set(name, strconv.FormatFloat(float64(value), 'f', -1, 32))\n\tcase time.Time:\n\t\tconst ISO8601UTC = \"2006-01-02T15:04:05Z\"\n\t\tformat := tag.Get(\"timestampFormat\")\n\t\tif len(format) == 0 {\n\t\t\tformat = protocol.ISO8601TimeFormatName\n\t\t}\n\n\t\tv.Set(name, protocol.FormatTime(format, value))\n\tdefault:\n\t\treturn fmt.Errorf(\"unsupported value for param %s: %v (%s)\", name, r.Interface(), r.Type().Name())\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/private/protocol/query/unmarshal.go",
    "content": "package query\n\n//go:generate go run -tags codegen ../../../models/protocol_tests/generate.go ../../../models/protocol_tests/output/query.json unmarshal_test.go\n\nimport (\n\t\"encoding/xml\"\n\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n\t\"github.com/aws/aws-sdk-go/aws/request\"\n\t\"github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil\"\n)\n\n// UnmarshalHandler is a named request handler for unmarshaling query protocol requests\nvar UnmarshalHandler = request.NamedHandler{Name: \"awssdk.query.Unmarshal\", Fn: Unmarshal}\n\n// UnmarshalMetaHandler is a named request handler for unmarshaling query protocol request metadata\nvar UnmarshalMetaHandler = request.NamedHandler{Name: \"awssdk.query.UnmarshalMeta\", Fn: UnmarshalMeta}\n\n// Unmarshal unmarshals a response for an AWS Query service.\nfunc Unmarshal(r *request.Request) {\n\tdefer r.HTTPResponse.Body.Close()\n\tif r.DataFilled() {\n\t\tdecoder := xml.NewDecoder(r.HTTPResponse.Body)\n\t\terr := xmlutil.UnmarshalXML(r.Data, decoder, r.Operation.Name+\"Result\")\n\t\tif err != nil {\n\t\t\tr.Error = awserr.NewRequestFailure(\n\t\t\t\tawserr.New(request.ErrCodeSerialization, \"failed decoding Query response\", err),\n\t\t\t\tr.HTTPResponse.StatusCode,\n\t\t\t\tr.RequestID,\n\t\t\t)\n\t\t\treturn\n\t\t}\n\t}\n}\n\n// UnmarshalMeta unmarshals header response values for an AWS Query service.\nfunc UnmarshalMeta(r *request.Request) {\n\tr.RequestID = r.HTTPResponse.Header.Get(\"X-Amzn-Requestid\")\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/private/protocol/query/unmarshal_error.go",
    "content": "package query\n\nimport (\n\t\"encoding/xml\"\n\t\"fmt\"\n\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n\t\"github.com/aws/aws-sdk-go/aws/request\"\n\t\"github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil\"\n)\n\n// UnmarshalErrorHandler is a name request handler to unmarshal request errors\nvar UnmarshalErrorHandler = request.NamedHandler{Name: \"awssdk.query.UnmarshalError\", Fn: UnmarshalError}\n\ntype xmlErrorResponse struct {\n\tCode      string `xml:\"Error>Code\"`\n\tMessage   string `xml:\"Error>Message\"`\n\tRequestID string `xml:\"RequestId\"`\n}\n\ntype xmlResponseError struct {\n\txmlErrorResponse\n}\n\nfunc (e *xmlResponseError) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {\n\tconst svcUnavailableTagName = \"ServiceUnavailableException\"\n\tconst errorResponseTagName = \"ErrorResponse\"\n\n\tswitch start.Name.Local {\n\tcase svcUnavailableTagName:\n\t\te.Code = svcUnavailableTagName\n\t\te.Message = \"service is unavailable\"\n\t\treturn d.Skip()\n\n\tcase errorResponseTagName:\n\t\treturn d.DecodeElement(&e.xmlErrorResponse, &start)\n\n\tdefault:\n\t\treturn fmt.Errorf(\"unknown error response tag, %v\", start)\n\t}\n}\n\n// UnmarshalError unmarshals an error response for an AWS Query service.\nfunc UnmarshalError(r *request.Request) {\n\tdefer r.HTTPResponse.Body.Close()\n\n\tvar respErr xmlResponseError\n\terr := xmlutil.UnmarshalXMLError(&respErr, r.HTTPResponse.Body)\n\tif err != nil {\n\t\tr.Error = awserr.NewRequestFailure(\n\t\t\tawserr.New(request.ErrCodeSerialization,\n\t\t\t\t\"failed to unmarshal error message\", err),\n\t\t\tr.HTTPResponse.StatusCode,\n\t\t\tr.RequestID,\n\t\t)\n\t\treturn\n\t}\n\n\treqID := respErr.RequestID\n\tif len(reqID) == 0 {\n\t\treqID = r.RequestID\n\t}\n\n\tr.Error = awserr.NewRequestFailure(\n\t\tawserr.New(respErr.Code, respErr.Message, nil),\n\t\tr.HTTPResponse.StatusCode,\n\t\treqID,\n\t)\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/private/protocol/rest/build.go",
    "content": "// Package rest provides RESTful serialization of AWS requests and responses.\npackage rest\n\nimport (\n\t\"bytes\"\n\t\"encoding/base64\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"path\"\n\t\"reflect\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n\t\"github.com/aws/aws-sdk-go/aws/request\"\n\t\"github.com/aws/aws-sdk-go/private/protocol\"\n)\n\n// Whether the byte value can be sent without escaping in AWS URLs\nvar noEscape [256]bool\n\nvar errValueNotSet = fmt.Errorf(\"value not set\")\n\nvar byteSliceType = reflect.TypeOf([]byte{})\n\nfunc init() {\n\tfor i := 0; i < len(noEscape); i++ {\n\t\t// AWS expects every character except these to be escaped\n\t\tnoEscape[i] = (i >= 'A' && i <= 'Z') ||\n\t\t\t(i >= 'a' && i <= 'z') ||\n\t\t\t(i >= '0' && i <= '9') ||\n\t\t\ti == '-' ||\n\t\t\ti == '.' ||\n\t\t\ti == '_' ||\n\t\t\ti == '~'\n\t}\n}\n\n// BuildHandler is a named request handler for building rest protocol requests\nvar BuildHandler = request.NamedHandler{Name: \"awssdk.rest.Build\", Fn: Build}\n\n// Build builds the REST component of a service request.\nfunc Build(r *request.Request) {\n\tif r.ParamsFilled() {\n\t\tv := reflect.ValueOf(r.Params).Elem()\n\t\tbuildLocationElements(r, v, false)\n\t\tbuildBody(r, v)\n\t}\n}\n\n// BuildAsGET builds the REST component of a service request with the ability to hoist\n// data from the body.\nfunc BuildAsGET(r *request.Request) {\n\tif r.ParamsFilled() {\n\t\tv := reflect.ValueOf(r.Params).Elem()\n\t\tbuildLocationElements(r, v, true)\n\t\tbuildBody(r, v)\n\t}\n}\n\nfunc buildLocationElements(r *request.Request, v reflect.Value, buildGETQuery bool) {\n\tquery := r.HTTPRequest.URL.Query()\n\n\t// Setup the raw path to match the base path pattern. This is needed\n\t// so that when the path is mutated a custom escaped version can be\n\t// stored in RawPath that will be used by the Go client.\n\tr.HTTPRequest.URL.RawPath = r.HTTPRequest.URL.Path\n\n\tfor i := 0; i < v.NumField(); i++ {\n\t\tm := v.Field(i)\n\t\tif n := v.Type().Field(i).Name; n[0:1] == strings.ToLower(n[0:1]) {\n\t\t\tcontinue\n\t\t}\n\n\t\tif m.IsValid() {\n\t\t\tfield := v.Type().Field(i)\n\t\t\tname := field.Tag.Get(\"locationName\")\n\t\t\tif name == \"\" {\n\t\t\t\tname = field.Name\n\t\t\t}\n\t\t\tif kind := m.Kind(); kind == reflect.Ptr {\n\t\t\t\tm = m.Elem()\n\t\t\t} else if kind == reflect.Interface {\n\t\t\t\tif !m.Elem().IsValid() {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\t\t\tif !m.IsValid() {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif field.Tag.Get(\"ignore\") != \"\" {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// Support the ability to customize values to be marshaled as a\n\t\t\t// blob even though they were modeled as a string. Required for S3\n\t\t\t// API operations like SSECustomerKey is modeled as stirng but\n\t\t\t// required to be base64 encoded in request.\n\t\t\tif field.Tag.Get(\"marshal-as\") == \"blob\" {\n\t\t\t\tm = m.Convert(byteSliceType)\n\t\t\t}\n\n\t\t\tvar err error\n\t\t\tswitch field.Tag.Get(\"location\") {\n\t\t\tcase \"headers\": // header maps\n\t\t\t\terr = buildHeaderMap(&r.HTTPRequest.Header, m, field.Tag)\n\t\t\tcase \"header\":\n\t\t\t\terr = buildHeader(&r.HTTPRequest.Header, m, name, field.Tag)\n\t\t\tcase \"uri\":\n\t\t\t\terr = buildURI(r.HTTPRequest.URL, m, name, field.Tag)\n\t\t\tcase \"querystring\":\n\t\t\t\terr = buildQueryString(query, m, name, field.Tag)\n\t\t\tdefault:\n\t\t\t\tif buildGETQuery {\n\t\t\t\t\terr = buildQueryString(query, m, name, field.Tag)\n\t\t\t\t}\n\t\t\t}\n\t\t\tr.Error = err\n\t\t}\n\t\tif r.Error != nil {\n\t\t\treturn\n\t\t}\n\t}\n\n\tr.HTTPRequest.URL.RawQuery = query.Encode()\n\tif !aws.BoolValue(r.Config.DisableRestProtocolURICleaning) {\n\t\tcleanPath(r.HTTPRequest.URL)\n\t}\n}\n\nfunc buildBody(r *request.Request, v reflect.Value) {\n\tif field, ok := v.Type().FieldByName(\"_\"); ok {\n\t\tif payloadName := field.Tag.Get(\"payload\"); payloadName != \"\" {\n\t\t\tpfield, _ := v.Type().FieldByName(payloadName)\n\t\t\tif ptag := pfield.Tag.Get(\"type\"); ptag != \"\" && ptag != \"structure\" {\n\t\t\t\tpayload := reflect.Indirect(v.FieldByName(payloadName))\n\t\t\t\tif payload.IsValid() && payload.Interface() != nil {\n\t\t\t\t\tswitch reader := payload.Interface().(type) {\n\t\t\t\t\tcase io.ReadSeeker:\n\t\t\t\t\t\tr.SetReaderBody(reader)\n\t\t\t\t\tcase []byte:\n\t\t\t\t\t\tr.SetBufferBody(reader)\n\t\t\t\t\tcase string:\n\t\t\t\t\t\tr.SetStringBody(reader)\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tr.Error = awserr.New(request.ErrCodeSerialization,\n\t\t\t\t\t\t\t\"failed to encode REST request\",\n\t\t\t\t\t\t\tfmt.Errorf(\"unknown payload type %s\", payload.Type()))\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc buildHeader(header *http.Header, v reflect.Value, name string, tag reflect.StructTag) error {\n\tstr, err := convertType(v, tag)\n\tif err == errValueNotSet {\n\t\treturn nil\n\t} else if err != nil {\n\t\treturn awserr.New(request.ErrCodeSerialization, \"failed to encode REST request\", err)\n\t}\n\n\tname = strings.TrimSpace(name)\n\tstr = strings.TrimSpace(str)\n\n\theader.Add(name, str)\n\n\treturn nil\n}\n\nfunc buildHeaderMap(header *http.Header, v reflect.Value, tag reflect.StructTag) error {\n\tprefix := tag.Get(\"locationName\")\n\tfor _, key := range v.MapKeys() {\n\t\tstr, err := convertType(v.MapIndex(key), tag)\n\t\tif err == errValueNotSet {\n\t\t\tcontinue\n\t\t} else if err != nil {\n\t\t\treturn awserr.New(request.ErrCodeSerialization, \"failed to encode REST request\", err)\n\n\t\t}\n\t\tkeyStr := strings.TrimSpace(key.String())\n\t\tstr = strings.TrimSpace(str)\n\n\t\theader.Add(prefix+keyStr, str)\n\t}\n\treturn nil\n}\n\nfunc buildURI(u *url.URL, v reflect.Value, name string, tag reflect.StructTag) error {\n\tvalue, err := convertType(v, tag)\n\tif err == errValueNotSet {\n\t\treturn nil\n\t} else if err != nil {\n\t\treturn awserr.New(request.ErrCodeSerialization, \"failed to encode REST request\", err)\n\t}\n\n\tu.Path = strings.Replace(u.Path, \"{\"+name+\"}\", value, -1)\n\tu.Path = strings.Replace(u.Path, \"{\"+name+\"+}\", value, -1)\n\n\tu.RawPath = strings.Replace(u.RawPath, \"{\"+name+\"}\", EscapePath(value, true), -1)\n\tu.RawPath = strings.Replace(u.RawPath, \"{\"+name+\"+}\", EscapePath(value, false), -1)\n\n\treturn nil\n}\n\nfunc buildQueryString(query url.Values, v reflect.Value, name string, tag reflect.StructTag) error {\n\tswitch value := v.Interface().(type) {\n\tcase []*string:\n\t\tfor _, item := range value {\n\t\t\tquery.Add(name, *item)\n\t\t}\n\tcase map[string]*string:\n\t\tfor key, item := range value {\n\t\t\tquery.Add(key, *item)\n\t\t}\n\tcase map[string][]*string:\n\t\tfor key, items := range value {\n\t\t\tfor _, item := range items {\n\t\t\t\tquery.Add(key, *item)\n\t\t\t}\n\t\t}\n\tdefault:\n\t\tstr, err := convertType(v, tag)\n\t\tif err == errValueNotSet {\n\t\t\treturn nil\n\t\t} else if err != nil {\n\t\t\treturn awserr.New(request.ErrCodeSerialization, \"failed to encode REST request\", err)\n\t\t}\n\t\tquery.Set(name, str)\n\t}\n\n\treturn nil\n}\n\nfunc cleanPath(u *url.URL) {\n\thasSlash := strings.HasSuffix(u.Path, \"/\")\n\n\t// clean up path, removing duplicate `/`\n\tu.Path = path.Clean(u.Path)\n\tu.RawPath = path.Clean(u.RawPath)\n\n\tif hasSlash && !strings.HasSuffix(u.Path, \"/\") {\n\t\tu.Path += \"/\"\n\t\tu.RawPath += \"/\"\n\t}\n}\n\n// EscapePath escapes part of a URL path in Amazon style\nfunc EscapePath(path string, encodeSep bool) string {\n\tvar buf bytes.Buffer\n\tfor i := 0; i < len(path); i++ {\n\t\tc := path[i]\n\t\tif noEscape[c] || (c == '/' && !encodeSep) {\n\t\t\tbuf.WriteByte(c)\n\t\t} else {\n\t\t\tfmt.Fprintf(&buf, \"%%%02X\", c)\n\t\t}\n\t}\n\treturn buf.String()\n}\n\nfunc convertType(v reflect.Value, tag reflect.StructTag) (str string, err error) {\n\tv = reflect.Indirect(v)\n\tif !v.IsValid() {\n\t\treturn \"\", errValueNotSet\n\t}\n\n\tswitch value := v.Interface().(type) {\n\tcase string:\n\t\tstr = value\n\tcase []byte:\n\t\tstr = base64.StdEncoding.EncodeToString(value)\n\tcase bool:\n\t\tstr = strconv.FormatBool(value)\n\tcase int64:\n\t\tstr = strconv.FormatInt(value, 10)\n\tcase float64:\n\t\tstr = strconv.FormatFloat(value, 'f', -1, 64)\n\tcase time.Time:\n\t\tformat := tag.Get(\"timestampFormat\")\n\t\tif len(format) == 0 {\n\t\t\tformat = protocol.RFC822TimeFormatName\n\t\t\tif tag.Get(\"location\") == \"querystring\" {\n\t\t\t\tformat = protocol.ISO8601TimeFormatName\n\t\t\t}\n\t\t}\n\t\tstr = protocol.FormatTime(format, value)\n\tcase aws.JSONValue:\n\t\tif len(value) == 0 {\n\t\t\treturn \"\", errValueNotSet\n\t\t}\n\t\tescaping := protocol.NoEscape\n\t\tif tag.Get(\"location\") == \"header\" {\n\t\t\tescaping = protocol.Base64Escape\n\t\t}\n\t\tstr, err = protocol.EncodeJSONValue(value, escaping)\n\t\tif err != nil {\n\t\t\treturn \"\", fmt.Errorf(\"unable to encode JSONValue, %v\", err)\n\t\t}\n\tdefault:\n\t\terr := fmt.Errorf(\"unsupported value for param %v (%s)\", v.Interface(), v.Type())\n\t\treturn \"\", err\n\t}\n\treturn str, nil\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/private/protocol/rest/payload.go",
    "content": "package rest\n\nimport \"reflect\"\n\n// PayloadMember returns the payload field member of i if there is one, or nil.\nfunc PayloadMember(i interface{}) interface{} {\n\tif i == nil {\n\t\treturn nil\n\t}\n\n\tv := reflect.ValueOf(i).Elem()\n\tif !v.IsValid() {\n\t\treturn nil\n\t}\n\tif field, ok := v.Type().FieldByName(\"_\"); ok {\n\t\tif payloadName := field.Tag.Get(\"payload\"); payloadName != \"\" {\n\t\t\tfield, _ := v.Type().FieldByName(payloadName)\n\t\t\tif field.Tag.Get(\"type\") != \"structure\" {\n\t\t\t\treturn nil\n\t\t\t}\n\n\t\t\tpayload := v.FieldByName(payloadName)\n\t\t\tif payload.IsValid() || (payload.Kind() == reflect.Ptr && !payload.IsNil()) {\n\t\t\t\treturn payload.Interface()\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\n// PayloadType returns the type of a payload field member of i if there is one, or \"\".\nfunc PayloadType(i interface{}) string {\n\tv := reflect.Indirect(reflect.ValueOf(i))\n\tif !v.IsValid() {\n\t\treturn \"\"\n\t}\n\tif field, ok := v.Type().FieldByName(\"_\"); ok {\n\t\tif payloadName := field.Tag.Get(\"payload\"); payloadName != \"\" {\n\t\t\tif member, ok := v.Type().FieldByName(payloadName); ok {\n\t\t\t\treturn member.Tag.Get(\"type\")\n\t\t\t}\n\t\t}\n\t}\n\treturn \"\"\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/private/protocol/rest/unmarshal.go",
    "content": "package rest\n\nimport (\n\t\"bytes\"\n\t\"encoding/base64\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"net/http\"\n\t\"reflect\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n\t\"github.com/aws/aws-sdk-go/aws/request\"\n\t\"github.com/aws/aws-sdk-go/private/protocol\"\n)\n\n// UnmarshalHandler is a named request handler for unmarshaling rest protocol requests\nvar UnmarshalHandler = request.NamedHandler{Name: \"awssdk.rest.Unmarshal\", Fn: Unmarshal}\n\n// UnmarshalMetaHandler is a named request handler for unmarshaling rest protocol request metadata\nvar UnmarshalMetaHandler = request.NamedHandler{Name: \"awssdk.rest.UnmarshalMeta\", Fn: UnmarshalMeta}\n\n// Unmarshal unmarshals the REST component of a response in a REST service.\nfunc Unmarshal(r *request.Request) {\n\tif r.DataFilled() {\n\t\tv := reflect.Indirect(reflect.ValueOf(r.Data))\n\t\tunmarshalBody(r, v)\n\t}\n}\n\n// UnmarshalMeta unmarshals the REST metadata of a response in a REST service\nfunc UnmarshalMeta(r *request.Request) {\n\tr.RequestID = r.HTTPResponse.Header.Get(\"X-Amzn-Requestid\")\n\tif r.RequestID == \"\" {\n\t\t// Alternative version of request id in the header\n\t\tr.RequestID = r.HTTPResponse.Header.Get(\"X-Amz-Request-Id\")\n\t}\n\tif r.DataFilled() {\n\t\tv := reflect.Indirect(reflect.ValueOf(r.Data))\n\t\tunmarshalLocationElements(r, v)\n\t}\n}\n\nfunc unmarshalBody(r *request.Request, v reflect.Value) {\n\tif field, ok := v.Type().FieldByName(\"_\"); ok {\n\t\tif payloadName := field.Tag.Get(\"payload\"); payloadName != \"\" {\n\t\t\tpfield, _ := v.Type().FieldByName(payloadName)\n\t\t\tif ptag := pfield.Tag.Get(\"type\"); ptag != \"\" && ptag != \"structure\" {\n\t\t\t\tpayload := v.FieldByName(payloadName)\n\t\t\t\tif payload.IsValid() {\n\t\t\t\t\tswitch payload.Interface().(type) {\n\t\t\t\t\tcase []byte:\n\t\t\t\t\t\tdefer r.HTTPResponse.Body.Close()\n\t\t\t\t\t\tb, err := ioutil.ReadAll(r.HTTPResponse.Body)\n\t\t\t\t\t\tif err != nil {\n\t\t\t\t\t\t\tr.Error = awserr.New(request.ErrCodeSerialization, \"failed to decode REST response\", err)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tpayload.Set(reflect.ValueOf(b))\n\t\t\t\t\t\t}\n\t\t\t\t\tcase *string:\n\t\t\t\t\t\tdefer r.HTTPResponse.Body.Close()\n\t\t\t\t\t\tb, err := ioutil.ReadAll(r.HTTPResponse.Body)\n\t\t\t\t\t\tif err != nil {\n\t\t\t\t\t\t\tr.Error = awserr.New(request.ErrCodeSerialization, \"failed to decode REST response\", err)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tstr := string(b)\n\t\t\t\t\t\t\tpayload.Set(reflect.ValueOf(&str))\n\t\t\t\t\t\t}\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tswitch payload.Type().String() {\n\t\t\t\t\t\tcase \"io.ReadCloser\":\n\t\t\t\t\t\t\tpayload.Set(reflect.ValueOf(r.HTTPResponse.Body))\n\t\t\t\t\t\tcase \"io.ReadSeeker\":\n\t\t\t\t\t\t\tb, err := ioutil.ReadAll(r.HTTPResponse.Body)\n\t\t\t\t\t\t\tif err != nil {\n\t\t\t\t\t\t\t\tr.Error = awserr.New(request.ErrCodeSerialization,\n\t\t\t\t\t\t\t\t\t\"failed to read response body\", err)\n\t\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpayload.Set(reflect.ValueOf(ioutil.NopCloser(bytes.NewReader(b))))\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tio.Copy(ioutil.Discard, r.HTTPResponse.Body)\n\t\t\t\t\t\t\tdefer r.HTTPResponse.Body.Close()\n\t\t\t\t\t\t\tr.Error = awserr.New(request.ErrCodeSerialization,\n\t\t\t\t\t\t\t\t\"failed to decode REST response\",\n\t\t\t\t\t\t\t\tfmt.Errorf(\"unknown payload type %s\", payload.Type()))\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc unmarshalLocationElements(r *request.Request, v reflect.Value) {\n\tfor i := 0; i < v.NumField(); i++ {\n\t\tm, field := v.Field(i), v.Type().Field(i)\n\t\tif n := field.Name; n[0:1] == strings.ToLower(n[0:1]) {\n\t\t\tcontinue\n\t\t}\n\n\t\tif m.IsValid() {\n\t\t\tname := field.Tag.Get(\"locationName\")\n\t\t\tif name == \"\" {\n\t\t\t\tname = field.Name\n\t\t\t}\n\n\t\t\tswitch field.Tag.Get(\"location\") {\n\t\t\tcase \"statusCode\":\n\t\t\t\tunmarshalStatusCode(m, r.HTTPResponse.StatusCode)\n\t\t\tcase \"header\":\n\t\t\t\terr := unmarshalHeader(m, r.HTTPResponse.Header.Get(name), field.Tag)\n\t\t\t\tif err != nil {\n\t\t\t\t\tr.Error = awserr.New(request.ErrCodeSerialization, \"failed to decode REST response\", err)\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\tcase \"headers\":\n\t\t\t\tprefix := field.Tag.Get(\"locationName\")\n\t\t\t\terr := unmarshalHeaderMap(m, r.HTTPResponse.Header, prefix)\n\t\t\t\tif err != nil {\n\t\t\t\t\tr.Error = awserr.New(request.ErrCodeSerialization, \"failed to decode REST response\", err)\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif r.Error != nil {\n\t\t\treturn\n\t\t}\n\t}\n}\n\nfunc unmarshalStatusCode(v reflect.Value, statusCode int) {\n\tif !v.IsValid() {\n\t\treturn\n\t}\n\n\tswitch v.Interface().(type) {\n\tcase *int64:\n\t\ts := int64(statusCode)\n\t\tv.Set(reflect.ValueOf(&s))\n\t}\n}\n\nfunc unmarshalHeaderMap(r reflect.Value, headers http.Header, prefix string) error {\n\tswitch r.Interface().(type) {\n\tcase map[string]*string: // we only support string map value types\n\t\tout := map[string]*string{}\n\t\tfor k, v := range headers {\n\t\t\tk = http.CanonicalHeaderKey(k)\n\t\t\tif strings.HasPrefix(strings.ToLower(k), strings.ToLower(prefix)) {\n\t\t\t\tout[k[len(prefix):]] = &v[0]\n\t\t\t}\n\t\t}\n\t\tr.Set(reflect.ValueOf(out))\n\t}\n\treturn nil\n}\n\nfunc unmarshalHeader(v reflect.Value, header string, tag reflect.StructTag) error {\n\tisJSONValue := tag.Get(\"type\") == \"jsonvalue\"\n\tif isJSONValue {\n\t\tif len(header) == 0 {\n\t\t\treturn nil\n\t\t}\n\t} else if !v.IsValid() || (header == \"\" && v.Elem().Kind() != reflect.String) {\n\t\treturn nil\n\t}\n\n\tswitch v.Interface().(type) {\n\tcase *string:\n\t\tv.Set(reflect.ValueOf(&header))\n\tcase []byte:\n\t\tb, err := base64.StdEncoding.DecodeString(header)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tv.Set(reflect.ValueOf(&b))\n\tcase *bool:\n\t\tb, err := strconv.ParseBool(header)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tv.Set(reflect.ValueOf(&b))\n\tcase *int64:\n\t\ti, err := strconv.ParseInt(header, 10, 64)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tv.Set(reflect.ValueOf(&i))\n\tcase *float64:\n\t\tf, err := strconv.ParseFloat(header, 64)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tv.Set(reflect.ValueOf(&f))\n\tcase *time.Time:\n\t\tformat := tag.Get(\"timestampFormat\")\n\t\tif len(format) == 0 {\n\t\t\tformat = protocol.RFC822TimeFormatName\n\t\t}\n\t\tt, err := protocol.ParseTime(format, header)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tv.Set(reflect.ValueOf(&t))\n\tcase aws.JSONValue:\n\t\tescaping := protocol.NoEscape\n\t\tif tag.Get(\"location\") == \"header\" {\n\t\t\tescaping = protocol.Base64Escape\n\t\t}\n\t\tm, err := protocol.DecodeJSONValue(header, escaping)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tv.Set(reflect.ValueOf(m))\n\tdefault:\n\t\terr := fmt.Errorf(\"Unsupported value for param %v (%s)\", v.Interface(), v.Type())\n\t\treturn err\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/private/protocol/restxml/restxml.go",
    "content": "// Package restxml provides RESTful XML serialization of AWS\n// requests and responses.\npackage restxml\n\n//go:generate go run -tags codegen ../../../models/protocol_tests/generate.go ../../../models/protocol_tests/input/rest-xml.json build_test.go\n//go:generate go run -tags codegen ../../../models/protocol_tests/generate.go ../../../models/protocol_tests/output/rest-xml.json unmarshal_test.go\n\nimport (\n\t\"bytes\"\n\t\"encoding/xml\"\n\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n\t\"github.com/aws/aws-sdk-go/aws/request\"\n\t\"github.com/aws/aws-sdk-go/private/protocol/query\"\n\t\"github.com/aws/aws-sdk-go/private/protocol/rest\"\n\t\"github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil\"\n)\n\n// BuildHandler is a named request handler for building restxml protocol requests\nvar BuildHandler = request.NamedHandler{Name: \"awssdk.restxml.Build\", Fn: Build}\n\n// UnmarshalHandler is a named request handler for unmarshaling restxml protocol requests\nvar UnmarshalHandler = request.NamedHandler{Name: \"awssdk.restxml.Unmarshal\", Fn: Unmarshal}\n\n// UnmarshalMetaHandler is a named request handler for unmarshaling restxml protocol request metadata\nvar UnmarshalMetaHandler = request.NamedHandler{Name: \"awssdk.restxml.UnmarshalMeta\", Fn: UnmarshalMeta}\n\n// UnmarshalErrorHandler is a named request handler for unmarshaling restxml protocol request errors\nvar UnmarshalErrorHandler = request.NamedHandler{Name: \"awssdk.restxml.UnmarshalError\", Fn: UnmarshalError}\n\n// Build builds a request payload for the REST XML protocol.\nfunc Build(r *request.Request) {\n\trest.Build(r)\n\n\tif t := rest.PayloadType(r.Params); t == \"structure\" || t == \"\" {\n\t\tvar buf bytes.Buffer\n\t\terr := xmlutil.BuildXML(r.Params, xml.NewEncoder(&buf))\n\t\tif err != nil {\n\t\t\tr.Error = awserr.NewRequestFailure(\n\t\t\t\tawserr.New(request.ErrCodeSerialization,\n\t\t\t\t\t\"failed to encode rest XML request\", err),\n\t\t\t\tr.HTTPResponse.StatusCode,\n\t\t\t\tr.RequestID,\n\t\t\t)\n\t\t\treturn\n\t\t}\n\t\tr.SetBufferBody(buf.Bytes())\n\t}\n}\n\n// Unmarshal unmarshals a payload response for the REST XML protocol.\nfunc Unmarshal(r *request.Request) {\n\tif t := rest.PayloadType(r.Data); t == \"structure\" || t == \"\" {\n\t\tdefer r.HTTPResponse.Body.Close()\n\t\tdecoder := xml.NewDecoder(r.HTTPResponse.Body)\n\t\terr := xmlutil.UnmarshalXML(r.Data, decoder, \"\")\n\t\tif err != nil {\n\t\t\tr.Error = awserr.NewRequestFailure(\n\t\t\t\tawserr.New(request.ErrCodeSerialization,\n\t\t\t\t\t\"failed to decode REST XML response\", err),\n\t\t\t\tr.HTTPResponse.StatusCode,\n\t\t\t\tr.RequestID,\n\t\t\t)\n\t\t\treturn\n\t\t}\n\t} else {\n\t\trest.Unmarshal(r)\n\t}\n}\n\n// UnmarshalMeta unmarshals response headers for the REST XML protocol.\nfunc UnmarshalMeta(r *request.Request) {\n\trest.UnmarshalMeta(r)\n}\n\n// UnmarshalError unmarshals a response error for the REST XML protocol.\nfunc UnmarshalError(r *request.Request) {\n\tquery.UnmarshalError(r)\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/private/protocol/timestamp.go",
    "content": "package protocol\n\nimport (\n\t\"strconv\"\n\t\"time\"\n)\n\n// Names of time formats supported by the SDK\nconst (\n\tRFC822TimeFormatName  = \"rfc822\"\n\tISO8601TimeFormatName = \"iso8601\"\n\tUnixTimeFormatName    = \"unixTimestamp\"\n)\n\n// Time formats supported by the SDK\nconst (\n\t// RFC 7231#section-7.1.1.1 timetamp format. e.g Tue, 29 Apr 2014 18:30:38 GMT\n\tRFC822TimeFormat = \"Mon, 2 Jan 2006 15:04:05 GMT\"\n\n\t// RFC3339 a subset of the ISO8601 timestamp format. e.g 2014-04-29T18:30:38Z\n\tISO8601TimeFormat = \"2006-01-02T15:04:05Z\"\n)\n\n// IsKnownTimestampFormat returns if the timestamp format name\n// is know to the SDK's protocols.\nfunc IsKnownTimestampFormat(name string) bool {\n\tswitch name {\n\tcase RFC822TimeFormatName:\n\t\tfallthrough\n\tcase ISO8601TimeFormatName:\n\t\tfallthrough\n\tcase UnixTimeFormatName:\n\t\treturn true\n\tdefault:\n\t\treturn false\n\t}\n}\n\n// FormatTime returns a string value of the time.\nfunc FormatTime(name string, t time.Time) string {\n\tt = t.UTC()\n\n\tswitch name {\n\tcase RFC822TimeFormatName:\n\t\treturn t.Format(RFC822TimeFormat)\n\tcase ISO8601TimeFormatName:\n\t\treturn t.Format(ISO8601TimeFormat)\n\tcase UnixTimeFormatName:\n\t\treturn strconv.FormatInt(t.Unix(), 10)\n\tdefault:\n\t\tpanic(\"unknown timestamp format name, \" + name)\n\t}\n}\n\n// ParseTime attempts to parse the time given the format. Returns\n// the time if it was able to be parsed, and fails otherwise.\nfunc ParseTime(formatName, value string) (time.Time, error) {\n\tswitch formatName {\n\tcase RFC822TimeFormatName:\n\t\treturn time.Parse(RFC822TimeFormat, value)\n\tcase ISO8601TimeFormatName:\n\t\treturn time.Parse(ISO8601TimeFormat, value)\n\tcase UnixTimeFormatName:\n\t\tv, err := strconv.ParseFloat(value, 64)\n\t\tif err != nil {\n\t\t\treturn time.Time{}, err\n\t\t}\n\t\treturn time.Unix(int64(v), 0), nil\n\tdefault:\n\t\tpanic(\"unknown timestamp format name, \" + formatName)\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/private/protocol/unmarshal.go",
    "content": "package protocol\n\nimport (\n\t\"io\"\n\t\"io/ioutil\"\n\n\t\"github.com/aws/aws-sdk-go/aws/request\"\n)\n\n// UnmarshalDiscardBodyHandler is a named request handler to empty and close a response's body\nvar UnmarshalDiscardBodyHandler = request.NamedHandler{Name: \"awssdk.shared.UnmarshalDiscardBody\", Fn: UnmarshalDiscardBody}\n\n// UnmarshalDiscardBody is a request handler to empty a response's body and closing it.\nfunc UnmarshalDiscardBody(r *request.Request) {\n\tif r.HTTPResponse == nil || r.HTTPResponse.Body == nil {\n\t\treturn\n\t}\n\n\tio.Copy(ioutil.Discard, r.HTTPResponse.Body)\n\tr.HTTPResponse.Body.Close()\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/build.go",
    "content": "// Package xmlutil provides XML serialization of AWS requests and responses.\npackage xmlutil\n\nimport (\n\t\"encoding/base64\"\n\t\"encoding/xml\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"sort\"\n\t\"strconv\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go/private/protocol\"\n)\n\n// BuildXML will serialize params into an xml.Encoder. Error will be returned\n// if the serialization of any of the params or nested values fails.\nfunc BuildXML(params interface{}, e *xml.Encoder) error {\n\treturn buildXML(params, e, false)\n}\n\nfunc buildXML(params interface{}, e *xml.Encoder, sorted bool) error {\n\tb := xmlBuilder{encoder: e, namespaces: map[string]string{}}\n\troot := NewXMLElement(xml.Name{})\n\tif err := b.buildValue(reflect.ValueOf(params), root, \"\"); err != nil {\n\t\treturn err\n\t}\n\tfor _, c := range root.Children {\n\t\tfor _, v := range c {\n\t\t\treturn StructToXML(e, v, sorted)\n\t\t}\n\t}\n\treturn nil\n}\n\n// Returns the reflection element of a value, if it is a pointer.\nfunc elemOf(value reflect.Value) reflect.Value {\n\tfor value.Kind() == reflect.Ptr {\n\t\tvalue = value.Elem()\n\t}\n\treturn value\n}\n\n// A xmlBuilder serializes values from Go code to XML\ntype xmlBuilder struct {\n\tencoder    *xml.Encoder\n\tnamespaces map[string]string\n}\n\n// buildValue generic XMLNode builder for any type. Will build value for their specific type\n// struct, list, map, scalar.\n//\n// Also takes a \"type\" tag value to set what type a value should be converted to XMLNode as. If\n// type is not provided reflect will be used to determine the value's type.\nfunc (b *xmlBuilder) buildValue(value reflect.Value, current *XMLNode, tag reflect.StructTag) error {\n\tvalue = elemOf(value)\n\tif !value.IsValid() { // no need to handle zero values\n\t\treturn nil\n\t} else if tag.Get(\"location\") != \"\" { // don't handle non-body location values\n\t\treturn nil\n\t}\n\n\tt := tag.Get(\"type\")\n\tif t == \"\" {\n\t\tswitch value.Kind() {\n\t\tcase reflect.Struct:\n\t\t\tt = \"structure\"\n\t\tcase reflect.Slice:\n\t\t\tt = \"list\"\n\t\tcase reflect.Map:\n\t\t\tt = \"map\"\n\t\t}\n\t}\n\n\tswitch t {\n\tcase \"structure\":\n\t\tif field, ok := value.Type().FieldByName(\"_\"); ok {\n\t\t\ttag = tag + reflect.StructTag(\" \") + field.Tag\n\t\t}\n\t\treturn b.buildStruct(value, current, tag)\n\tcase \"list\":\n\t\treturn b.buildList(value, current, tag)\n\tcase \"map\":\n\t\treturn b.buildMap(value, current, tag)\n\tdefault:\n\t\treturn b.buildScalar(value, current, tag)\n\t}\n}\n\n// buildStruct adds a struct and its fields to the current XMLNode. All fields and any nested\n// types are converted to XMLNodes also.\nfunc (b *xmlBuilder) buildStruct(value reflect.Value, current *XMLNode, tag reflect.StructTag) error {\n\tif !value.IsValid() {\n\t\treturn nil\n\t}\n\n\t// unwrap payloads\n\tif payload := tag.Get(\"payload\"); payload != \"\" {\n\t\tfield, _ := value.Type().FieldByName(payload)\n\t\ttag = field.Tag\n\t\tvalue = elemOf(value.FieldByName(payload))\n\n\t\tif !value.IsValid() {\n\t\t\treturn nil\n\t\t}\n\t}\n\n\tchild := NewXMLElement(xml.Name{Local: tag.Get(\"locationName\")})\n\n\t// there is an xmlNamespace associated with this struct\n\tif prefix, uri := tag.Get(\"xmlPrefix\"), tag.Get(\"xmlURI\"); uri != \"\" {\n\t\tns := xml.Attr{\n\t\t\tName:  xml.Name{Local: \"xmlns\"},\n\t\t\tValue: uri,\n\t\t}\n\t\tif prefix != \"\" {\n\t\t\tb.namespaces[prefix] = uri // register the namespace\n\t\t\tns.Name.Local = \"xmlns:\" + prefix\n\t\t}\n\n\t\tchild.Attr = append(child.Attr, ns)\n\t}\n\n\tvar payloadFields, nonPayloadFields int\n\n\tt := value.Type()\n\tfor i := 0; i < value.NumField(); i++ {\n\t\tmember := elemOf(value.Field(i))\n\t\tfield := t.Field(i)\n\n\t\tif field.PkgPath != \"\" {\n\t\t\tcontinue // ignore unexported fields\n\t\t}\n\t\tif field.Tag.Get(\"ignore\") != \"\" {\n\t\t\tcontinue\n\t\t}\n\n\t\tmTag := field.Tag\n\t\tif mTag.Get(\"location\") != \"\" { // skip non-body members\n\t\t\tnonPayloadFields++\n\t\t\tcontinue\n\t\t}\n\t\tpayloadFields++\n\n\t\tif protocol.CanSetIdempotencyToken(value.Field(i), field) {\n\t\t\ttoken := protocol.GetIdempotencyToken()\n\t\t\tmember = reflect.ValueOf(token)\n\t\t}\n\n\t\tmemberName := mTag.Get(\"locationName\")\n\t\tif memberName == \"\" {\n\t\t\tmemberName = field.Name\n\t\t\tmTag = reflect.StructTag(string(mTag) + ` locationName:\"` + memberName + `\"`)\n\t\t}\n\t\tif err := b.buildValue(member, child, mTag); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// Only case where the child shape is not added is if the shape only contains\n\t// non-payload fields, e.g headers/query.\n\tif !(payloadFields == 0 && nonPayloadFields > 0) {\n\t\tcurrent.AddChild(child)\n\t}\n\n\treturn nil\n}\n\n// buildList adds the value's list items to the current XMLNode as children nodes. All\n// nested values in the list are converted to XMLNodes also.\nfunc (b *xmlBuilder) buildList(value reflect.Value, current *XMLNode, tag reflect.StructTag) error {\n\tif value.IsNil() { // don't build omitted lists\n\t\treturn nil\n\t}\n\n\t// check for unflattened list member\n\tflattened := tag.Get(\"flattened\") != \"\"\n\n\txname := xml.Name{Local: tag.Get(\"locationName\")}\n\tif flattened {\n\t\tfor i := 0; i < value.Len(); i++ {\n\t\t\tchild := NewXMLElement(xname)\n\t\t\tcurrent.AddChild(child)\n\t\t\tif err := b.buildValue(value.Index(i), child, \"\"); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t} else {\n\t\tlist := NewXMLElement(xname)\n\t\tcurrent.AddChild(list)\n\n\t\tfor i := 0; i < value.Len(); i++ {\n\t\t\tiname := tag.Get(\"locationNameList\")\n\t\t\tif iname == \"\" {\n\t\t\t\tiname = \"member\"\n\t\t\t}\n\n\t\t\tchild := NewXMLElement(xml.Name{Local: iname})\n\t\t\tlist.AddChild(child)\n\t\t\tif err := b.buildValue(value.Index(i), child, \"\"); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// buildMap adds the value's key/value pairs to the current XMLNode as children nodes. All\n// nested values in the map are converted to XMLNodes also.\n//\n// Error will be returned if it is unable to build the map's values into XMLNodes\nfunc (b *xmlBuilder) buildMap(value reflect.Value, current *XMLNode, tag reflect.StructTag) error {\n\tif value.IsNil() { // don't build omitted maps\n\t\treturn nil\n\t}\n\n\tmaproot := NewXMLElement(xml.Name{Local: tag.Get(\"locationName\")})\n\tcurrent.AddChild(maproot)\n\tcurrent = maproot\n\n\tkname, vname := \"key\", \"value\"\n\tif n := tag.Get(\"locationNameKey\"); n != \"\" {\n\t\tkname = n\n\t}\n\tif n := tag.Get(\"locationNameValue\"); n != \"\" {\n\t\tvname = n\n\t}\n\n\t// sorting is not required for compliance, but it makes testing easier\n\tkeys := make([]string, value.Len())\n\tfor i, k := range value.MapKeys() {\n\t\tkeys[i] = k.String()\n\t}\n\tsort.Strings(keys)\n\n\tfor _, k := range keys {\n\t\tv := value.MapIndex(reflect.ValueOf(k))\n\n\t\tmapcur := current\n\t\tif tag.Get(\"flattened\") == \"\" { // add \"entry\" tag to non-flat maps\n\t\t\tchild := NewXMLElement(xml.Name{Local: \"entry\"})\n\t\t\tmapcur.AddChild(child)\n\t\t\tmapcur = child\n\t\t}\n\n\t\tkchild := NewXMLElement(xml.Name{Local: kname})\n\t\tkchild.Text = k\n\t\tvchild := NewXMLElement(xml.Name{Local: vname})\n\t\tmapcur.AddChild(kchild)\n\t\tmapcur.AddChild(vchild)\n\n\t\tif err := b.buildValue(v, vchild, \"\"); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// buildScalar will convert the value into a string and append it as a attribute or child\n// of the current XMLNode.\n//\n// The value will be added as an attribute if tag contains a \"xmlAttribute\" attribute value.\n//\n// Error will be returned if the value type is unsupported.\nfunc (b *xmlBuilder) buildScalar(value reflect.Value, current *XMLNode, tag reflect.StructTag) error {\n\tvar str string\n\tswitch converted := value.Interface().(type) {\n\tcase string:\n\t\tstr = converted\n\tcase []byte:\n\t\tif !value.IsNil() {\n\t\t\tstr = base64.StdEncoding.EncodeToString(converted)\n\t\t}\n\tcase bool:\n\t\tstr = strconv.FormatBool(converted)\n\tcase int64:\n\t\tstr = strconv.FormatInt(converted, 10)\n\tcase int:\n\t\tstr = strconv.Itoa(converted)\n\tcase float64:\n\t\tstr = strconv.FormatFloat(converted, 'f', -1, 64)\n\tcase float32:\n\t\tstr = strconv.FormatFloat(float64(converted), 'f', -1, 32)\n\tcase time.Time:\n\t\tformat := tag.Get(\"timestampFormat\")\n\t\tif len(format) == 0 {\n\t\t\tformat = protocol.ISO8601TimeFormatName\n\t\t}\n\n\t\tstr = protocol.FormatTime(format, converted)\n\tdefault:\n\t\treturn fmt.Errorf(\"unsupported value for param %s: %v (%s)\",\n\t\t\ttag.Get(\"locationName\"), value.Interface(), value.Type().Name())\n\t}\n\n\txname := xml.Name{Local: tag.Get(\"locationName\")}\n\tif tag.Get(\"xmlAttribute\") != \"\" { // put into current node's attribute list\n\t\tattr := xml.Attr{Name: xname, Value: str}\n\t\tcurrent.Attr = append(current.Attr, attr)\n\t} else { // regular text node\n\t\tcurrent.AddChild(&XMLNode{Name: xname, Text: str})\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/unmarshal.go",
    "content": "package xmlutil\n\nimport (\n\t\"bytes\"\n\t\"encoding/base64\"\n\t\"encoding/xml\"\n\t\"fmt\"\n\t\"io\"\n\t\"reflect\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n\t\"github.com/aws/aws-sdk-go/private/protocol\"\n)\n\n// UnmarshalXMLError unmarshals the XML error from the stream into the value\n// type specified. The value must be a pointer. If the message fails to\n// unmarshal, the message content will be included in the returned error as a\n// awserr.UnmarshalError.\nfunc UnmarshalXMLError(v interface{}, stream io.Reader) error {\n\tvar errBuf bytes.Buffer\n\tbody := io.TeeReader(stream, &errBuf)\n\n\terr := xml.NewDecoder(body).Decode(v)\n\tif err != nil && err != io.EOF {\n\t\treturn awserr.NewUnmarshalError(err,\n\t\t\t\"failed to unmarshal error message\", errBuf.Bytes())\n\t}\n\n\treturn nil\n}\n\n// UnmarshalXML deserializes an xml.Decoder into the container v. V\n// needs to match the shape of the XML expected to be decoded.\n// If the shape doesn't match unmarshaling will fail.\nfunc UnmarshalXML(v interface{}, d *xml.Decoder, wrapper string) error {\n\tn, err := XMLToStruct(d, nil)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif n.Children != nil {\n\t\tfor _, root := range n.Children {\n\t\t\tfor _, c := range root {\n\t\t\t\tif wrappedChild, ok := c.Children[wrapper]; ok {\n\t\t\t\t\tc = wrappedChild[0] // pull out wrapped element\n\t\t\t\t}\n\n\t\t\t\terr = parse(reflect.ValueOf(v), c, \"\")\n\t\t\t\tif err != nil {\n\t\t\t\t\tif err == io.EOF {\n\t\t\t\t\t\treturn nil\n\t\t\t\t\t}\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn nil\n\t}\n\treturn nil\n}\n\n// parse deserializes any value from the XMLNode. The type tag is used to infer the type, or reflect\n// will be used to determine the type from r.\nfunc parse(r reflect.Value, node *XMLNode, tag reflect.StructTag) error {\n\trtype := r.Type()\n\tif rtype.Kind() == reflect.Ptr {\n\t\trtype = rtype.Elem() // check kind of actual element type\n\t}\n\n\tt := tag.Get(\"type\")\n\tif t == \"\" {\n\t\tswitch rtype.Kind() {\n\t\tcase reflect.Struct:\n\t\t\t// also it can't be a time object\n\t\t\tif _, ok := r.Interface().(*time.Time); !ok {\n\t\t\t\tt = \"structure\"\n\t\t\t}\n\t\tcase reflect.Slice:\n\t\t\t// also it can't be a byte slice\n\t\t\tif _, ok := r.Interface().([]byte); !ok {\n\t\t\t\tt = \"list\"\n\t\t\t}\n\t\tcase reflect.Map:\n\t\t\tt = \"map\"\n\t\t}\n\t}\n\n\tswitch t {\n\tcase \"structure\":\n\t\tif field, ok := rtype.FieldByName(\"_\"); ok {\n\t\t\ttag = field.Tag\n\t\t}\n\t\treturn parseStruct(r, node, tag)\n\tcase \"list\":\n\t\treturn parseList(r, node, tag)\n\tcase \"map\":\n\t\treturn parseMap(r, node, tag)\n\tdefault:\n\t\treturn parseScalar(r, node, tag)\n\t}\n}\n\n// parseStruct deserializes a structure and its fields from an XMLNode. Any nested\n// types in the structure will also be deserialized.\nfunc parseStruct(r reflect.Value, node *XMLNode, tag reflect.StructTag) error {\n\tt := r.Type()\n\tif r.Kind() == reflect.Ptr {\n\t\tif r.IsNil() { // create the structure if it's nil\n\t\t\ts := reflect.New(r.Type().Elem())\n\t\t\tr.Set(s)\n\t\t\tr = s\n\t\t}\n\n\t\tr = r.Elem()\n\t\tt = t.Elem()\n\t}\n\n\t// unwrap any payloads\n\tif payload := tag.Get(\"payload\"); payload != \"\" {\n\t\tfield, _ := t.FieldByName(payload)\n\t\treturn parseStruct(r.FieldByName(payload), node, field.Tag)\n\t}\n\n\tfor i := 0; i < t.NumField(); i++ {\n\t\tfield := t.Field(i)\n\t\tif c := field.Name[0:1]; strings.ToLower(c) == c {\n\t\t\tcontinue // ignore unexported fields\n\t\t}\n\n\t\t// figure out what this field is called\n\t\tname := field.Name\n\t\tif field.Tag.Get(\"flattened\") != \"\" && field.Tag.Get(\"locationNameList\") != \"\" {\n\t\t\tname = field.Tag.Get(\"locationNameList\")\n\t\t} else if locName := field.Tag.Get(\"locationName\"); locName != \"\" {\n\t\t\tname = locName\n\t\t}\n\n\t\t// try to find the field by name in elements\n\t\telems := node.Children[name]\n\n\t\tif elems == nil { // try to find the field in attributes\n\t\t\tif val, ok := node.findElem(name); ok {\n\t\t\t\telems = []*XMLNode{{Text: val}}\n\t\t\t}\n\t\t}\n\n\t\tmember := r.FieldByName(field.Name)\n\t\tfor _, elem := range elems {\n\t\t\terr := parse(member, elem, field.Tag)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\n// parseList deserializes a list of values from an XML node. Each list entry\n// will also be deserialized.\nfunc parseList(r reflect.Value, node *XMLNode, tag reflect.StructTag) error {\n\tt := r.Type()\n\n\tif tag.Get(\"flattened\") == \"\" { // look at all item entries\n\t\tmname := \"member\"\n\t\tif name := tag.Get(\"locationNameList\"); name != \"\" {\n\t\t\tmname = name\n\t\t}\n\n\t\tif Children, ok := node.Children[mname]; ok {\n\t\t\tif r.IsNil() {\n\t\t\t\tr.Set(reflect.MakeSlice(t, len(Children), len(Children)))\n\t\t\t}\n\n\t\t\tfor i, c := range Children {\n\t\t\t\terr := parse(r.Index(i), c, \"\")\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else { // flattened list means this is a single element\n\t\tif r.IsNil() {\n\t\t\tr.Set(reflect.MakeSlice(t, 0, 0))\n\t\t}\n\n\t\tchildR := reflect.Zero(t.Elem())\n\t\tr.Set(reflect.Append(r, childR))\n\t\terr := parse(r.Index(r.Len()-1), node, \"\")\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// parseMap deserializes a map from an XMLNode. The direct children of the XMLNode\n// will also be deserialized as map entries.\nfunc parseMap(r reflect.Value, node *XMLNode, tag reflect.StructTag) error {\n\tif r.IsNil() {\n\t\tr.Set(reflect.MakeMap(r.Type()))\n\t}\n\n\tif tag.Get(\"flattened\") == \"\" { // look at all child entries\n\t\tfor _, entry := range node.Children[\"entry\"] {\n\t\t\tparseMapEntry(r, entry, tag)\n\t\t}\n\t} else { // this element is itself an entry\n\t\tparseMapEntry(r, node, tag)\n\t}\n\n\treturn nil\n}\n\n// parseMapEntry deserializes a map entry from a XML node.\nfunc parseMapEntry(r reflect.Value, node *XMLNode, tag reflect.StructTag) error {\n\tkname, vname := \"key\", \"value\"\n\tif n := tag.Get(\"locationNameKey\"); n != \"\" {\n\t\tkname = n\n\t}\n\tif n := tag.Get(\"locationNameValue\"); n != \"\" {\n\t\tvname = n\n\t}\n\n\tkeys, ok := node.Children[kname]\n\tvalues := node.Children[vname]\n\tif ok {\n\t\tfor i, key := range keys {\n\t\t\tkeyR := reflect.ValueOf(key.Text)\n\t\t\tvalue := values[i]\n\t\t\tvalueR := reflect.New(r.Type().Elem()).Elem()\n\n\t\t\tparse(valueR, value, \"\")\n\t\t\tr.SetMapIndex(keyR, valueR)\n\t\t}\n\t}\n\treturn nil\n}\n\n// parseScaller deserializes an XMLNode value into a concrete type based on the\n// interface type of r.\n//\n// Error is returned if the deserialization fails due to invalid type conversion,\n// or unsupported interface type.\nfunc parseScalar(r reflect.Value, node *XMLNode, tag reflect.StructTag) error {\n\tswitch r.Interface().(type) {\n\tcase *string:\n\t\tr.Set(reflect.ValueOf(&node.Text))\n\t\treturn nil\n\tcase []byte:\n\t\tb, err := base64.StdEncoding.DecodeString(node.Text)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tr.Set(reflect.ValueOf(b))\n\tcase *bool:\n\t\tv, err := strconv.ParseBool(node.Text)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tr.Set(reflect.ValueOf(&v))\n\tcase *int64:\n\t\tv, err := strconv.ParseInt(node.Text, 10, 64)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tr.Set(reflect.ValueOf(&v))\n\tcase *float64:\n\t\tv, err := strconv.ParseFloat(node.Text, 64)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tr.Set(reflect.ValueOf(&v))\n\tcase *time.Time:\n\t\tformat := tag.Get(\"timestampFormat\")\n\t\tif len(format) == 0 {\n\t\t\tformat = protocol.ISO8601TimeFormatName\n\t\t}\n\n\t\tt, err := protocol.ParseTime(format, node.Text)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tr.Set(reflect.ValueOf(&t))\n\tdefault:\n\t\treturn fmt.Errorf(\"unsupported value: %v (%s)\", r.Interface(), r.Type())\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/xml_to_struct.go",
    "content": "package xmlutil\n\nimport (\n\t\"encoding/xml\"\n\t\"fmt\"\n\t\"io\"\n\t\"sort\"\n)\n\n// A XMLNode contains the values to be encoded or decoded.\ntype XMLNode struct {\n\tName     xml.Name              `json:\",omitempty\"`\n\tChildren map[string][]*XMLNode `json:\",omitempty\"`\n\tText     string                `json:\",omitempty\"`\n\tAttr     []xml.Attr            `json:\",omitempty\"`\n\n\tnamespaces map[string]string\n\tparent     *XMLNode\n}\n\n// NewXMLElement returns a pointer to a new XMLNode initialized to default values.\nfunc NewXMLElement(name xml.Name) *XMLNode {\n\treturn &XMLNode{\n\t\tName:     name,\n\t\tChildren: map[string][]*XMLNode{},\n\t\tAttr:     []xml.Attr{},\n\t}\n}\n\n// AddChild adds child to the XMLNode.\nfunc (n *XMLNode) AddChild(child *XMLNode) {\n\tchild.parent = n\n\tif _, ok := n.Children[child.Name.Local]; !ok {\n\t\tn.Children[child.Name.Local] = []*XMLNode{}\n\t}\n\tn.Children[child.Name.Local] = append(n.Children[child.Name.Local], child)\n}\n\n// XMLToStruct converts a xml.Decoder stream to XMLNode with nested values.\nfunc XMLToStruct(d *xml.Decoder, s *xml.StartElement) (*XMLNode, error) {\n\tout := &XMLNode{}\n\tfor {\n\t\ttok, err := d.Token()\n\t\tif err != nil {\n\t\t\tif err == io.EOF {\n\t\t\t\tbreak\n\t\t\t} else {\n\t\t\t\treturn out, err\n\t\t\t}\n\t\t}\n\n\t\tif tok == nil {\n\t\t\tbreak\n\t\t}\n\n\t\tswitch typed := tok.(type) {\n\t\tcase xml.CharData:\n\t\t\tout.Text = string(typed.Copy())\n\t\tcase xml.StartElement:\n\t\t\tel := typed.Copy()\n\t\t\tout.Attr = el.Attr\n\t\t\tif out.Children == nil {\n\t\t\t\tout.Children = map[string][]*XMLNode{}\n\t\t\t}\n\n\t\t\tname := typed.Name.Local\n\t\t\tslice := out.Children[name]\n\t\t\tif slice == nil {\n\t\t\t\tslice = []*XMLNode{}\n\t\t\t}\n\t\t\tnode, e := XMLToStruct(d, &el)\n\t\t\tout.findNamespaces()\n\t\t\tif e != nil {\n\t\t\t\treturn out, e\n\t\t\t}\n\t\t\tnode.Name = typed.Name\n\t\t\tnode.findNamespaces()\n\t\t\ttempOut := *out\n\t\t\t// Save into a temp variable, simply because out gets squashed during\n\t\t\t// loop iterations\n\t\t\tnode.parent = &tempOut\n\t\t\tslice = append(slice, node)\n\t\t\tout.Children[name] = slice\n\t\tcase xml.EndElement:\n\t\t\tif s != nil && s.Name.Local == typed.Name.Local { // matching end token\n\t\t\t\treturn out, nil\n\t\t\t}\n\t\t\tout = &XMLNode{}\n\t\t}\n\t}\n\treturn out, nil\n}\n\nfunc (n *XMLNode) findNamespaces() {\n\tns := map[string]string{}\n\tfor _, a := range n.Attr {\n\t\tif a.Name.Space == \"xmlns\" {\n\t\t\tns[a.Value] = a.Name.Local\n\t\t}\n\t}\n\n\tn.namespaces = ns\n}\n\nfunc (n *XMLNode) findElem(name string) (string, bool) {\n\tfor node := n; node != nil; node = node.parent {\n\t\tfor _, a := range node.Attr {\n\t\t\tnamespace := a.Name.Space\n\t\t\tif v, ok := node.namespaces[namespace]; ok {\n\t\t\t\tnamespace = v\n\t\t\t}\n\t\t\tif name == fmt.Sprintf(\"%s:%s\", namespace, a.Name.Local) {\n\t\t\t\treturn a.Value, true\n\t\t\t}\n\t\t}\n\t}\n\treturn \"\", false\n}\n\n// StructToXML writes an XMLNode to a xml.Encoder as tokens.\nfunc StructToXML(e *xml.Encoder, node *XMLNode, sorted bool) error {\n\te.EncodeToken(xml.StartElement{Name: node.Name, Attr: node.Attr})\n\n\tif node.Text != \"\" {\n\t\te.EncodeToken(xml.CharData([]byte(node.Text)))\n\t} else if sorted {\n\t\tsortedNames := []string{}\n\t\tfor k := range node.Children {\n\t\t\tsortedNames = append(sortedNames, k)\n\t\t}\n\t\tsort.Strings(sortedNames)\n\n\t\tfor _, k := range sortedNames {\n\t\t\tfor _, v := range node.Children[k] {\n\t\t\t\tStructToXML(e, v, sorted)\n\t\t\t}\n\t\t}\n\t} else {\n\t\tfor _, c := range node.Children {\n\t\t\tfor _, v := range c {\n\t\t\t\tStructToXML(e, v, sorted)\n\t\t\t}\n\t\t}\n\t}\n\n\te.EncodeToken(xml.EndElement{Name: node.Name})\n\treturn e.Flush()\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/service/s3/api.go",
    "content": "// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT.\n\npackage s3\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"sync\"\n\t\"sync/atomic\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n\t\"github.com/aws/aws-sdk-go/aws/awsutil\"\n\t\"github.com/aws/aws-sdk-go/aws/client\"\n\t\"github.com/aws/aws-sdk-go/aws/request\"\n\t\"github.com/aws/aws-sdk-go/private/protocol\"\n\t\"github.com/aws/aws-sdk-go/private/protocol/eventstream\"\n\t\"github.com/aws/aws-sdk-go/private/protocol/eventstream/eventstreamapi\"\n\t\"github.com/aws/aws-sdk-go/private/protocol/rest\"\n\t\"github.com/aws/aws-sdk-go/private/protocol/restxml\"\n)\n\nconst opAbortMultipartUpload = \"AbortMultipartUpload\"\n\n// AbortMultipartUploadRequest generates a \"aws/request.Request\" representing the\n// client's request for the AbortMultipartUpload operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See AbortMultipartUpload for more information on using the AbortMultipartUpload\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the AbortMultipartUploadRequest method.\n//    req, resp := client.AbortMultipartUploadRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/AbortMultipartUpload\nfunc (c *S3) AbortMultipartUploadRequest(input *AbortMultipartUploadInput) (req *request.Request, output *AbortMultipartUploadOutput) {\n\top := &request.Operation{\n\t\tName:       opAbortMultipartUpload,\n\t\tHTTPMethod: \"DELETE\",\n\t\tHTTPPath:   \"/{Bucket}/{Key+}\",\n\t}\n\n\tif input == nil {\n\t\tinput = &AbortMultipartUploadInput{}\n\t}\n\n\toutput = &AbortMultipartUploadOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// AbortMultipartUpload API operation for Amazon Simple Storage Service.\n//\n// Aborts a multipart upload.\n//\n// To verify that all parts have been removed, so you don't get charged for\n// the part storage, you should call the List Parts operation and ensure the\n// parts list is empty.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation AbortMultipartUpload for usage and error information.\n//\n// Returned Error Codes:\n//   * ErrCodeNoSuchUpload \"NoSuchUpload\"\n//   The specified multipart upload does not exist.\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/AbortMultipartUpload\nfunc (c *S3) AbortMultipartUpload(input *AbortMultipartUploadInput) (*AbortMultipartUploadOutput, error) {\n\treq, out := c.AbortMultipartUploadRequest(input)\n\treturn out, req.Send()\n}\n\n// AbortMultipartUploadWithContext is the same as AbortMultipartUpload with the addition of\n// the ability to pass a context and additional request options.\n//\n// See AbortMultipartUpload for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) AbortMultipartUploadWithContext(ctx aws.Context, input *AbortMultipartUploadInput, opts ...request.Option) (*AbortMultipartUploadOutput, error) {\n\treq, out := c.AbortMultipartUploadRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opCompleteMultipartUpload = \"CompleteMultipartUpload\"\n\n// CompleteMultipartUploadRequest generates a \"aws/request.Request\" representing the\n// client's request for the CompleteMultipartUpload operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See CompleteMultipartUpload for more information on using the CompleteMultipartUpload\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the CompleteMultipartUploadRequest method.\n//    req, resp := client.CompleteMultipartUploadRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/CompleteMultipartUpload\nfunc (c *S3) CompleteMultipartUploadRequest(input *CompleteMultipartUploadInput) (req *request.Request, output *CompleteMultipartUploadOutput) {\n\top := &request.Operation{\n\t\tName:       opCompleteMultipartUpload,\n\t\tHTTPMethod: \"POST\",\n\t\tHTTPPath:   \"/{Bucket}/{Key+}\",\n\t}\n\n\tif input == nil {\n\t\tinput = &CompleteMultipartUploadInput{}\n\t}\n\n\toutput = &CompleteMultipartUploadOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// CompleteMultipartUpload API operation for Amazon Simple Storage Service.\n//\n// Completes a multipart upload by assembling previously uploaded parts.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation CompleteMultipartUpload for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/CompleteMultipartUpload\nfunc (c *S3) CompleteMultipartUpload(input *CompleteMultipartUploadInput) (*CompleteMultipartUploadOutput, error) {\n\treq, out := c.CompleteMultipartUploadRequest(input)\n\treturn out, req.Send()\n}\n\n// CompleteMultipartUploadWithContext is the same as CompleteMultipartUpload with the addition of\n// the ability to pass a context and additional request options.\n//\n// See CompleteMultipartUpload for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) CompleteMultipartUploadWithContext(ctx aws.Context, input *CompleteMultipartUploadInput, opts ...request.Option) (*CompleteMultipartUploadOutput, error) {\n\treq, out := c.CompleteMultipartUploadRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opCopyObject = \"CopyObject\"\n\n// CopyObjectRequest generates a \"aws/request.Request\" representing the\n// client's request for the CopyObject operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See CopyObject for more information on using the CopyObject\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the CopyObjectRequest method.\n//    req, resp := client.CopyObjectRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/CopyObject\nfunc (c *S3) CopyObjectRequest(input *CopyObjectInput) (req *request.Request, output *CopyObjectOutput) {\n\top := &request.Operation{\n\t\tName:       opCopyObject,\n\t\tHTTPMethod: \"PUT\",\n\t\tHTTPPath:   \"/{Bucket}/{Key+}\",\n\t}\n\n\tif input == nil {\n\t\tinput = &CopyObjectInput{}\n\t}\n\n\toutput = &CopyObjectOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// CopyObject API operation for Amazon Simple Storage Service.\n//\n// Creates a copy of an object that is already stored in Amazon S3.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation CopyObject for usage and error information.\n//\n// Returned Error Codes:\n//   * ErrCodeObjectNotInActiveTierError \"ObjectNotInActiveTierError\"\n//   The source object of the COPY operation is not in the active tier and is\n//   only stored in Amazon Glacier.\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/CopyObject\nfunc (c *S3) CopyObject(input *CopyObjectInput) (*CopyObjectOutput, error) {\n\treq, out := c.CopyObjectRequest(input)\n\treturn out, req.Send()\n}\n\n// CopyObjectWithContext is the same as CopyObject with the addition of\n// the ability to pass a context and additional request options.\n//\n// See CopyObject for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) CopyObjectWithContext(ctx aws.Context, input *CopyObjectInput, opts ...request.Option) (*CopyObjectOutput, error) {\n\treq, out := c.CopyObjectRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opCreateBucket = \"CreateBucket\"\n\n// CreateBucketRequest generates a \"aws/request.Request\" representing the\n// client's request for the CreateBucket operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See CreateBucket for more information on using the CreateBucket\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the CreateBucketRequest method.\n//    req, resp := client.CreateBucketRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/CreateBucket\nfunc (c *S3) CreateBucketRequest(input *CreateBucketInput) (req *request.Request, output *CreateBucketOutput) {\n\top := &request.Operation{\n\t\tName:       opCreateBucket,\n\t\tHTTPMethod: \"PUT\",\n\t\tHTTPPath:   \"/{Bucket}\",\n\t}\n\n\tif input == nil {\n\t\tinput = &CreateBucketInput{}\n\t}\n\n\toutput = &CreateBucketOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// CreateBucket API operation for Amazon Simple Storage Service.\n//\n// Creates a new bucket.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation CreateBucket for usage and error information.\n//\n// Returned Error Codes:\n//   * ErrCodeBucketAlreadyExists \"BucketAlreadyExists\"\n//   The requested bucket name is not available. The bucket namespace is shared\n//   by all users of the system. Please select a different name and try again.\n//\n//   * ErrCodeBucketAlreadyOwnedByYou \"BucketAlreadyOwnedByYou\"\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/CreateBucket\nfunc (c *S3) CreateBucket(input *CreateBucketInput) (*CreateBucketOutput, error) {\n\treq, out := c.CreateBucketRequest(input)\n\treturn out, req.Send()\n}\n\n// CreateBucketWithContext is the same as CreateBucket with the addition of\n// the ability to pass a context and additional request options.\n//\n// See CreateBucket for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) CreateBucketWithContext(ctx aws.Context, input *CreateBucketInput, opts ...request.Option) (*CreateBucketOutput, error) {\n\treq, out := c.CreateBucketRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opCreateMultipartUpload = \"CreateMultipartUpload\"\n\n// CreateMultipartUploadRequest generates a \"aws/request.Request\" representing the\n// client's request for the CreateMultipartUpload operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See CreateMultipartUpload for more information on using the CreateMultipartUpload\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the CreateMultipartUploadRequest method.\n//    req, resp := client.CreateMultipartUploadRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/CreateMultipartUpload\nfunc (c *S3) CreateMultipartUploadRequest(input *CreateMultipartUploadInput) (req *request.Request, output *CreateMultipartUploadOutput) {\n\top := &request.Operation{\n\t\tName:       opCreateMultipartUpload,\n\t\tHTTPMethod: \"POST\",\n\t\tHTTPPath:   \"/{Bucket}/{Key+}?uploads\",\n\t}\n\n\tif input == nil {\n\t\tinput = &CreateMultipartUploadInput{}\n\t}\n\n\toutput = &CreateMultipartUploadOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// CreateMultipartUpload API operation for Amazon Simple Storage Service.\n//\n// Initiates a multipart upload and returns an upload ID.\n//\n// Note: After you initiate multipart upload and upload one or more parts, you\n// must either complete or abort multipart upload in order to stop getting charged\n// for storage of the uploaded parts. Only after you either complete or abort\n// multipart upload, Amazon S3 frees up the parts storage and stops charging\n// you for the parts storage.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation CreateMultipartUpload for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/CreateMultipartUpload\nfunc (c *S3) CreateMultipartUpload(input *CreateMultipartUploadInput) (*CreateMultipartUploadOutput, error) {\n\treq, out := c.CreateMultipartUploadRequest(input)\n\treturn out, req.Send()\n}\n\n// CreateMultipartUploadWithContext is the same as CreateMultipartUpload with the addition of\n// the ability to pass a context and additional request options.\n//\n// See CreateMultipartUpload for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) CreateMultipartUploadWithContext(ctx aws.Context, input *CreateMultipartUploadInput, opts ...request.Option) (*CreateMultipartUploadOutput, error) {\n\treq, out := c.CreateMultipartUploadRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opDeleteBucket = \"DeleteBucket\"\n\n// DeleteBucketRequest generates a \"aws/request.Request\" representing the\n// client's request for the DeleteBucket operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See DeleteBucket for more information on using the DeleteBucket\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the DeleteBucketRequest method.\n//    req, resp := client.DeleteBucketRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucket\nfunc (c *S3) DeleteBucketRequest(input *DeleteBucketInput) (req *request.Request, output *DeleteBucketOutput) {\n\top := &request.Operation{\n\t\tName:       opDeleteBucket,\n\t\tHTTPMethod: \"DELETE\",\n\t\tHTTPPath:   \"/{Bucket}\",\n\t}\n\n\tif input == nil {\n\t\tinput = &DeleteBucketInput{}\n\t}\n\n\toutput = &DeleteBucketOutput{}\n\treq = c.newRequest(op, input, output)\n\treq.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)\n\treturn\n}\n\n// DeleteBucket API operation for Amazon Simple Storage Service.\n//\n// Deletes the bucket. All objects (including all object versions and Delete\n// Markers) in the bucket must be deleted before the bucket itself can be deleted.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation DeleteBucket for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucket\nfunc (c *S3) DeleteBucket(input *DeleteBucketInput) (*DeleteBucketOutput, error) {\n\treq, out := c.DeleteBucketRequest(input)\n\treturn out, req.Send()\n}\n\n// DeleteBucketWithContext is the same as DeleteBucket with the addition of\n// the ability to pass a context and additional request options.\n//\n// See DeleteBucket for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) DeleteBucketWithContext(ctx aws.Context, input *DeleteBucketInput, opts ...request.Option) (*DeleteBucketOutput, error) {\n\treq, out := c.DeleteBucketRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opDeleteBucketAnalyticsConfiguration = \"DeleteBucketAnalyticsConfiguration\"\n\n// DeleteBucketAnalyticsConfigurationRequest generates a \"aws/request.Request\" representing the\n// client's request for the DeleteBucketAnalyticsConfiguration operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See DeleteBucketAnalyticsConfiguration for more information on using the DeleteBucketAnalyticsConfiguration\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the DeleteBucketAnalyticsConfigurationRequest method.\n//    req, resp := client.DeleteBucketAnalyticsConfigurationRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketAnalyticsConfiguration\nfunc (c *S3) DeleteBucketAnalyticsConfigurationRequest(input *DeleteBucketAnalyticsConfigurationInput) (req *request.Request, output *DeleteBucketAnalyticsConfigurationOutput) {\n\top := &request.Operation{\n\t\tName:       opDeleteBucketAnalyticsConfiguration,\n\t\tHTTPMethod: \"DELETE\",\n\t\tHTTPPath:   \"/{Bucket}?analytics\",\n\t}\n\n\tif input == nil {\n\t\tinput = &DeleteBucketAnalyticsConfigurationInput{}\n\t}\n\n\toutput = &DeleteBucketAnalyticsConfigurationOutput{}\n\treq = c.newRequest(op, input, output)\n\treq.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)\n\treturn\n}\n\n// DeleteBucketAnalyticsConfiguration API operation for Amazon Simple Storage Service.\n//\n// Deletes an analytics configuration for the bucket (specified by the analytics\n// configuration ID).\n//\n// To use this operation, you must have permissions to perform the s3:PutAnalyticsConfiguration\n// action. The bucket owner has this permission by default. The bucket owner\n// can grant this permission to others.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation DeleteBucketAnalyticsConfiguration for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketAnalyticsConfiguration\nfunc (c *S3) DeleteBucketAnalyticsConfiguration(input *DeleteBucketAnalyticsConfigurationInput) (*DeleteBucketAnalyticsConfigurationOutput, error) {\n\treq, out := c.DeleteBucketAnalyticsConfigurationRequest(input)\n\treturn out, req.Send()\n}\n\n// DeleteBucketAnalyticsConfigurationWithContext is the same as DeleteBucketAnalyticsConfiguration with the addition of\n// the ability to pass a context and additional request options.\n//\n// See DeleteBucketAnalyticsConfiguration for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) DeleteBucketAnalyticsConfigurationWithContext(ctx aws.Context, input *DeleteBucketAnalyticsConfigurationInput, opts ...request.Option) (*DeleteBucketAnalyticsConfigurationOutput, error) {\n\treq, out := c.DeleteBucketAnalyticsConfigurationRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opDeleteBucketCors = \"DeleteBucketCors\"\n\n// DeleteBucketCorsRequest generates a \"aws/request.Request\" representing the\n// client's request for the DeleteBucketCors operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See DeleteBucketCors for more information on using the DeleteBucketCors\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the DeleteBucketCorsRequest method.\n//    req, resp := client.DeleteBucketCorsRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketCors\nfunc (c *S3) DeleteBucketCorsRequest(input *DeleteBucketCorsInput) (req *request.Request, output *DeleteBucketCorsOutput) {\n\top := &request.Operation{\n\t\tName:       opDeleteBucketCors,\n\t\tHTTPMethod: \"DELETE\",\n\t\tHTTPPath:   \"/{Bucket}?cors\",\n\t}\n\n\tif input == nil {\n\t\tinput = &DeleteBucketCorsInput{}\n\t}\n\n\toutput = &DeleteBucketCorsOutput{}\n\treq = c.newRequest(op, input, output)\n\treq.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)\n\treturn\n}\n\n// DeleteBucketCors API operation for Amazon Simple Storage Service.\n//\n// Deletes the CORS configuration information set for the bucket.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation DeleteBucketCors for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketCors\nfunc (c *S3) DeleteBucketCors(input *DeleteBucketCorsInput) (*DeleteBucketCorsOutput, error) {\n\treq, out := c.DeleteBucketCorsRequest(input)\n\treturn out, req.Send()\n}\n\n// DeleteBucketCorsWithContext is the same as DeleteBucketCors with the addition of\n// the ability to pass a context and additional request options.\n//\n// See DeleteBucketCors for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) DeleteBucketCorsWithContext(ctx aws.Context, input *DeleteBucketCorsInput, opts ...request.Option) (*DeleteBucketCorsOutput, error) {\n\treq, out := c.DeleteBucketCorsRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opDeleteBucketEncryption = \"DeleteBucketEncryption\"\n\n// DeleteBucketEncryptionRequest generates a \"aws/request.Request\" representing the\n// client's request for the DeleteBucketEncryption operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See DeleteBucketEncryption for more information on using the DeleteBucketEncryption\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the DeleteBucketEncryptionRequest method.\n//    req, resp := client.DeleteBucketEncryptionRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketEncryption\nfunc (c *S3) DeleteBucketEncryptionRequest(input *DeleteBucketEncryptionInput) (req *request.Request, output *DeleteBucketEncryptionOutput) {\n\top := &request.Operation{\n\t\tName:       opDeleteBucketEncryption,\n\t\tHTTPMethod: \"DELETE\",\n\t\tHTTPPath:   \"/{Bucket}?encryption\",\n\t}\n\n\tif input == nil {\n\t\tinput = &DeleteBucketEncryptionInput{}\n\t}\n\n\toutput = &DeleteBucketEncryptionOutput{}\n\treq = c.newRequest(op, input, output)\n\treq.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)\n\treturn\n}\n\n// DeleteBucketEncryption API operation for Amazon Simple Storage Service.\n//\n// Deletes the server-side encryption configuration from the bucket.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation DeleteBucketEncryption for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketEncryption\nfunc (c *S3) DeleteBucketEncryption(input *DeleteBucketEncryptionInput) (*DeleteBucketEncryptionOutput, error) {\n\treq, out := c.DeleteBucketEncryptionRequest(input)\n\treturn out, req.Send()\n}\n\n// DeleteBucketEncryptionWithContext is the same as DeleteBucketEncryption with the addition of\n// the ability to pass a context and additional request options.\n//\n// See DeleteBucketEncryption for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) DeleteBucketEncryptionWithContext(ctx aws.Context, input *DeleteBucketEncryptionInput, opts ...request.Option) (*DeleteBucketEncryptionOutput, error) {\n\treq, out := c.DeleteBucketEncryptionRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opDeleteBucketInventoryConfiguration = \"DeleteBucketInventoryConfiguration\"\n\n// DeleteBucketInventoryConfigurationRequest generates a \"aws/request.Request\" representing the\n// client's request for the DeleteBucketInventoryConfiguration operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See DeleteBucketInventoryConfiguration for more information on using the DeleteBucketInventoryConfiguration\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the DeleteBucketInventoryConfigurationRequest method.\n//    req, resp := client.DeleteBucketInventoryConfigurationRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketInventoryConfiguration\nfunc (c *S3) DeleteBucketInventoryConfigurationRequest(input *DeleteBucketInventoryConfigurationInput) (req *request.Request, output *DeleteBucketInventoryConfigurationOutput) {\n\top := &request.Operation{\n\t\tName:       opDeleteBucketInventoryConfiguration,\n\t\tHTTPMethod: \"DELETE\",\n\t\tHTTPPath:   \"/{Bucket}?inventory\",\n\t}\n\n\tif input == nil {\n\t\tinput = &DeleteBucketInventoryConfigurationInput{}\n\t}\n\n\toutput = &DeleteBucketInventoryConfigurationOutput{}\n\treq = c.newRequest(op, input, output)\n\treq.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)\n\treturn\n}\n\n// DeleteBucketInventoryConfiguration API operation for Amazon Simple Storage Service.\n//\n// Deletes an inventory configuration (identified by the inventory ID) from\n// the bucket.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation DeleteBucketInventoryConfiguration for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketInventoryConfiguration\nfunc (c *S3) DeleteBucketInventoryConfiguration(input *DeleteBucketInventoryConfigurationInput) (*DeleteBucketInventoryConfigurationOutput, error) {\n\treq, out := c.DeleteBucketInventoryConfigurationRequest(input)\n\treturn out, req.Send()\n}\n\n// DeleteBucketInventoryConfigurationWithContext is the same as DeleteBucketInventoryConfiguration with the addition of\n// the ability to pass a context and additional request options.\n//\n// See DeleteBucketInventoryConfiguration for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) DeleteBucketInventoryConfigurationWithContext(ctx aws.Context, input *DeleteBucketInventoryConfigurationInput, opts ...request.Option) (*DeleteBucketInventoryConfigurationOutput, error) {\n\treq, out := c.DeleteBucketInventoryConfigurationRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opDeleteBucketLifecycle = \"DeleteBucketLifecycle\"\n\n// DeleteBucketLifecycleRequest generates a \"aws/request.Request\" representing the\n// client's request for the DeleteBucketLifecycle operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See DeleteBucketLifecycle for more information on using the DeleteBucketLifecycle\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the DeleteBucketLifecycleRequest method.\n//    req, resp := client.DeleteBucketLifecycleRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketLifecycle\nfunc (c *S3) DeleteBucketLifecycleRequest(input *DeleteBucketLifecycleInput) (req *request.Request, output *DeleteBucketLifecycleOutput) {\n\top := &request.Operation{\n\t\tName:       opDeleteBucketLifecycle,\n\t\tHTTPMethod: \"DELETE\",\n\t\tHTTPPath:   \"/{Bucket}?lifecycle\",\n\t}\n\n\tif input == nil {\n\t\tinput = &DeleteBucketLifecycleInput{}\n\t}\n\n\toutput = &DeleteBucketLifecycleOutput{}\n\treq = c.newRequest(op, input, output)\n\treq.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)\n\treturn\n}\n\n// DeleteBucketLifecycle API operation for Amazon Simple Storage Service.\n//\n// Deletes the lifecycle configuration from the bucket.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation DeleteBucketLifecycle for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketLifecycle\nfunc (c *S3) DeleteBucketLifecycle(input *DeleteBucketLifecycleInput) (*DeleteBucketLifecycleOutput, error) {\n\treq, out := c.DeleteBucketLifecycleRequest(input)\n\treturn out, req.Send()\n}\n\n// DeleteBucketLifecycleWithContext is the same as DeleteBucketLifecycle with the addition of\n// the ability to pass a context and additional request options.\n//\n// See DeleteBucketLifecycle for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) DeleteBucketLifecycleWithContext(ctx aws.Context, input *DeleteBucketLifecycleInput, opts ...request.Option) (*DeleteBucketLifecycleOutput, error) {\n\treq, out := c.DeleteBucketLifecycleRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opDeleteBucketMetricsConfiguration = \"DeleteBucketMetricsConfiguration\"\n\n// DeleteBucketMetricsConfigurationRequest generates a \"aws/request.Request\" representing the\n// client's request for the DeleteBucketMetricsConfiguration operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See DeleteBucketMetricsConfiguration for more information on using the DeleteBucketMetricsConfiguration\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the DeleteBucketMetricsConfigurationRequest method.\n//    req, resp := client.DeleteBucketMetricsConfigurationRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketMetricsConfiguration\nfunc (c *S3) DeleteBucketMetricsConfigurationRequest(input *DeleteBucketMetricsConfigurationInput) (req *request.Request, output *DeleteBucketMetricsConfigurationOutput) {\n\top := &request.Operation{\n\t\tName:       opDeleteBucketMetricsConfiguration,\n\t\tHTTPMethod: \"DELETE\",\n\t\tHTTPPath:   \"/{Bucket}?metrics\",\n\t}\n\n\tif input == nil {\n\t\tinput = &DeleteBucketMetricsConfigurationInput{}\n\t}\n\n\toutput = &DeleteBucketMetricsConfigurationOutput{}\n\treq = c.newRequest(op, input, output)\n\treq.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)\n\treturn\n}\n\n// DeleteBucketMetricsConfiguration API operation for Amazon Simple Storage Service.\n//\n// Deletes a metrics configuration (specified by the metrics configuration ID)\n// from the bucket.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation DeleteBucketMetricsConfiguration for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketMetricsConfiguration\nfunc (c *S3) DeleteBucketMetricsConfiguration(input *DeleteBucketMetricsConfigurationInput) (*DeleteBucketMetricsConfigurationOutput, error) {\n\treq, out := c.DeleteBucketMetricsConfigurationRequest(input)\n\treturn out, req.Send()\n}\n\n// DeleteBucketMetricsConfigurationWithContext is the same as DeleteBucketMetricsConfiguration with the addition of\n// the ability to pass a context and additional request options.\n//\n// See DeleteBucketMetricsConfiguration for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) DeleteBucketMetricsConfigurationWithContext(ctx aws.Context, input *DeleteBucketMetricsConfigurationInput, opts ...request.Option) (*DeleteBucketMetricsConfigurationOutput, error) {\n\treq, out := c.DeleteBucketMetricsConfigurationRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opDeleteBucketPolicy = \"DeleteBucketPolicy\"\n\n// DeleteBucketPolicyRequest generates a \"aws/request.Request\" representing the\n// client's request for the DeleteBucketPolicy operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See DeleteBucketPolicy for more information on using the DeleteBucketPolicy\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the DeleteBucketPolicyRequest method.\n//    req, resp := client.DeleteBucketPolicyRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketPolicy\nfunc (c *S3) DeleteBucketPolicyRequest(input *DeleteBucketPolicyInput) (req *request.Request, output *DeleteBucketPolicyOutput) {\n\top := &request.Operation{\n\t\tName:       opDeleteBucketPolicy,\n\t\tHTTPMethod: \"DELETE\",\n\t\tHTTPPath:   \"/{Bucket}?policy\",\n\t}\n\n\tif input == nil {\n\t\tinput = &DeleteBucketPolicyInput{}\n\t}\n\n\toutput = &DeleteBucketPolicyOutput{}\n\treq = c.newRequest(op, input, output)\n\treq.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)\n\treturn\n}\n\n// DeleteBucketPolicy API operation for Amazon Simple Storage Service.\n//\n// Deletes the policy from the bucket.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation DeleteBucketPolicy for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketPolicy\nfunc (c *S3) DeleteBucketPolicy(input *DeleteBucketPolicyInput) (*DeleteBucketPolicyOutput, error) {\n\treq, out := c.DeleteBucketPolicyRequest(input)\n\treturn out, req.Send()\n}\n\n// DeleteBucketPolicyWithContext is the same as DeleteBucketPolicy with the addition of\n// the ability to pass a context and additional request options.\n//\n// See DeleteBucketPolicy for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) DeleteBucketPolicyWithContext(ctx aws.Context, input *DeleteBucketPolicyInput, opts ...request.Option) (*DeleteBucketPolicyOutput, error) {\n\treq, out := c.DeleteBucketPolicyRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opDeleteBucketReplication = \"DeleteBucketReplication\"\n\n// DeleteBucketReplicationRequest generates a \"aws/request.Request\" representing the\n// client's request for the DeleteBucketReplication operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See DeleteBucketReplication for more information on using the DeleteBucketReplication\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the DeleteBucketReplicationRequest method.\n//    req, resp := client.DeleteBucketReplicationRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketReplication\nfunc (c *S3) DeleteBucketReplicationRequest(input *DeleteBucketReplicationInput) (req *request.Request, output *DeleteBucketReplicationOutput) {\n\top := &request.Operation{\n\t\tName:       opDeleteBucketReplication,\n\t\tHTTPMethod: \"DELETE\",\n\t\tHTTPPath:   \"/{Bucket}?replication\",\n\t}\n\n\tif input == nil {\n\t\tinput = &DeleteBucketReplicationInput{}\n\t}\n\n\toutput = &DeleteBucketReplicationOutput{}\n\treq = c.newRequest(op, input, output)\n\treq.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)\n\treturn\n}\n\n// DeleteBucketReplication API operation for Amazon Simple Storage Service.\n//\n// Deletes the replication configuration from the bucket. For information about\n// replication configuration, see Cross-Region Replication (CRR) (https://docs.aws.amazon.com/AmazonS3/latest/dev/crr.html)\n// in the Amazon S3 Developer Guide.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation DeleteBucketReplication for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketReplication\nfunc (c *S3) DeleteBucketReplication(input *DeleteBucketReplicationInput) (*DeleteBucketReplicationOutput, error) {\n\treq, out := c.DeleteBucketReplicationRequest(input)\n\treturn out, req.Send()\n}\n\n// DeleteBucketReplicationWithContext is the same as DeleteBucketReplication with the addition of\n// the ability to pass a context and additional request options.\n//\n// See DeleteBucketReplication for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) DeleteBucketReplicationWithContext(ctx aws.Context, input *DeleteBucketReplicationInput, opts ...request.Option) (*DeleteBucketReplicationOutput, error) {\n\treq, out := c.DeleteBucketReplicationRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opDeleteBucketTagging = \"DeleteBucketTagging\"\n\n// DeleteBucketTaggingRequest generates a \"aws/request.Request\" representing the\n// client's request for the DeleteBucketTagging operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See DeleteBucketTagging for more information on using the DeleteBucketTagging\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the DeleteBucketTaggingRequest method.\n//    req, resp := client.DeleteBucketTaggingRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketTagging\nfunc (c *S3) DeleteBucketTaggingRequest(input *DeleteBucketTaggingInput) (req *request.Request, output *DeleteBucketTaggingOutput) {\n\top := &request.Operation{\n\t\tName:       opDeleteBucketTagging,\n\t\tHTTPMethod: \"DELETE\",\n\t\tHTTPPath:   \"/{Bucket}?tagging\",\n\t}\n\n\tif input == nil {\n\t\tinput = &DeleteBucketTaggingInput{}\n\t}\n\n\toutput = &DeleteBucketTaggingOutput{}\n\treq = c.newRequest(op, input, output)\n\treq.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)\n\treturn\n}\n\n// DeleteBucketTagging API operation for Amazon Simple Storage Service.\n//\n// Deletes the tags from the bucket.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation DeleteBucketTagging for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketTagging\nfunc (c *S3) DeleteBucketTagging(input *DeleteBucketTaggingInput) (*DeleteBucketTaggingOutput, error) {\n\treq, out := c.DeleteBucketTaggingRequest(input)\n\treturn out, req.Send()\n}\n\n// DeleteBucketTaggingWithContext is the same as DeleteBucketTagging with the addition of\n// the ability to pass a context and additional request options.\n//\n// See DeleteBucketTagging for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) DeleteBucketTaggingWithContext(ctx aws.Context, input *DeleteBucketTaggingInput, opts ...request.Option) (*DeleteBucketTaggingOutput, error) {\n\treq, out := c.DeleteBucketTaggingRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opDeleteBucketWebsite = \"DeleteBucketWebsite\"\n\n// DeleteBucketWebsiteRequest generates a \"aws/request.Request\" representing the\n// client's request for the DeleteBucketWebsite operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See DeleteBucketWebsite for more information on using the DeleteBucketWebsite\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the DeleteBucketWebsiteRequest method.\n//    req, resp := client.DeleteBucketWebsiteRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketWebsite\nfunc (c *S3) DeleteBucketWebsiteRequest(input *DeleteBucketWebsiteInput) (req *request.Request, output *DeleteBucketWebsiteOutput) {\n\top := &request.Operation{\n\t\tName:       opDeleteBucketWebsite,\n\t\tHTTPMethod: \"DELETE\",\n\t\tHTTPPath:   \"/{Bucket}?website\",\n\t}\n\n\tif input == nil {\n\t\tinput = &DeleteBucketWebsiteInput{}\n\t}\n\n\toutput = &DeleteBucketWebsiteOutput{}\n\treq = c.newRequest(op, input, output)\n\treq.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)\n\treturn\n}\n\n// DeleteBucketWebsite API operation for Amazon Simple Storage Service.\n//\n// This operation removes the website configuration from the bucket.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation DeleteBucketWebsite for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteBucketWebsite\nfunc (c *S3) DeleteBucketWebsite(input *DeleteBucketWebsiteInput) (*DeleteBucketWebsiteOutput, error) {\n\treq, out := c.DeleteBucketWebsiteRequest(input)\n\treturn out, req.Send()\n}\n\n// DeleteBucketWebsiteWithContext is the same as DeleteBucketWebsite with the addition of\n// the ability to pass a context and additional request options.\n//\n// See DeleteBucketWebsite for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) DeleteBucketWebsiteWithContext(ctx aws.Context, input *DeleteBucketWebsiteInput, opts ...request.Option) (*DeleteBucketWebsiteOutput, error) {\n\treq, out := c.DeleteBucketWebsiteRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opDeleteObject = \"DeleteObject\"\n\n// DeleteObjectRequest generates a \"aws/request.Request\" representing the\n// client's request for the DeleteObject operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See DeleteObject for more information on using the DeleteObject\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the DeleteObjectRequest method.\n//    req, resp := client.DeleteObjectRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteObject\nfunc (c *S3) DeleteObjectRequest(input *DeleteObjectInput) (req *request.Request, output *DeleteObjectOutput) {\n\top := &request.Operation{\n\t\tName:       opDeleteObject,\n\t\tHTTPMethod: \"DELETE\",\n\t\tHTTPPath:   \"/{Bucket}/{Key+}\",\n\t}\n\n\tif input == nil {\n\t\tinput = &DeleteObjectInput{}\n\t}\n\n\toutput = &DeleteObjectOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// DeleteObject API operation for Amazon Simple Storage Service.\n//\n// Removes the null version (if there is one) of an object and inserts a delete\n// marker, which becomes the latest version of the object. If there isn't a\n// null version, Amazon S3 does not remove any objects.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation DeleteObject for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteObject\nfunc (c *S3) DeleteObject(input *DeleteObjectInput) (*DeleteObjectOutput, error) {\n\treq, out := c.DeleteObjectRequest(input)\n\treturn out, req.Send()\n}\n\n// DeleteObjectWithContext is the same as DeleteObject with the addition of\n// the ability to pass a context and additional request options.\n//\n// See DeleteObject for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) DeleteObjectWithContext(ctx aws.Context, input *DeleteObjectInput, opts ...request.Option) (*DeleteObjectOutput, error) {\n\treq, out := c.DeleteObjectRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opDeleteObjectTagging = \"DeleteObjectTagging\"\n\n// DeleteObjectTaggingRequest generates a \"aws/request.Request\" representing the\n// client's request for the DeleteObjectTagging operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See DeleteObjectTagging for more information on using the DeleteObjectTagging\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the DeleteObjectTaggingRequest method.\n//    req, resp := client.DeleteObjectTaggingRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteObjectTagging\nfunc (c *S3) DeleteObjectTaggingRequest(input *DeleteObjectTaggingInput) (req *request.Request, output *DeleteObjectTaggingOutput) {\n\top := &request.Operation{\n\t\tName:       opDeleteObjectTagging,\n\t\tHTTPMethod: \"DELETE\",\n\t\tHTTPPath:   \"/{Bucket}/{Key+}?tagging\",\n\t}\n\n\tif input == nil {\n\t\tinput = &DeleteObjectTaggingInput{}\n\t}\n\n\toutput = &DeleteObjectTaggingOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// DeleteObjectTagging API operation for Amazon Simple Storage Service.\n//\n// Removes the tag-set from an existing object.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation DeleteObjectTagging for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteObjectTagging\nfunc (c *S3) DeleteObjectTagging(input *DeleteObjectTaggingInput) (*DeleteObjectTaggingOutput, error) {\n\treq, out := c.DeleteObjectTaggingRequest(input)\n\treturn out, req.Send()\n}\n\n// DeleteObjectTaggingWithContext is the same as DeleteObjectTagging with the addition of\n// the ability to pass a context and additional request options.\n//\n// See DeleteObjectTagging for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) DeleteObjectTaggingWithContext(ctx aws.Context, input *DeleteObjectTaggingInput, opts ...request.Option) (*DeleteObjectTaggingOutput, error) {\n\treq, out := c.DeleteObjectTaggingRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opDeleteObjects = \"DeleteObjects\"\n\n// DeleteObjectsRequest generates a \"aws/request.Request\" representing the\n// client's request for the DeleteObjects operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See DeleteObjects for more information on using the DeleteObjects\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the DeleteObjectsRequest method.\n//    req, resp := client.DeleteObjectsRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteObjects\nfunc (c *S3) DeleteObjectsRequest(input *DeleteObjectsInput) (req *request.Request, output *DeleteObjectsOutput) {\n\top := &request.Operation{\n\t\tName:       opDeleteObjects,\n\t\tHTTPMethod: \"POST\",\n\t\tHTTPPath:   \"/{Bucket}?delete\",\n\t}\n\n\tif input == nil {\n\t\tinput = &DeleteObjectsInput{}\n\t}\n\n\toutput = &DeleteObjectsOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// DeleteObjects API operation for Amazon Simple Storage Service.\n//\n// This operation enables you to delete multiple objects from a bucket using\n// a single HTTP request. You may specify up to 1000 keys.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation DeleteObjects for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeleteObjects\nfunc (c *S3) DeleteObjects(input *DeleteObjectsInput) (*DeleteObjectsOutput, error) {\n\treq, out := c.DeleteObjectsRequest(input)\n\treturn out, req.Send()\n}\n\n// DeleteObjectsWithContext is the same as DeleteObjects with the addition of\n// the ability to pass a context and additional request options.\n//\n// See DeleteObjects for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) DeleteObjectsWithContext(ctx aws.Context, input *DeleteObjectsInput, opts ...request.Option) (*DeleteObjectsOutput, error) {\n\treq, out := c.DeleteObjectsRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opDeletePublicAccessBlock = \"DeletePublicAccessBlock\"\n\n// DeletePublicAccessBlockRequest generates a \"aws/request.Request\" representing the\n// client's request for the DeletePublicAccessBlock operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See DeletePublicAccessBlock for more information on using the DeletePublicAccessBlock\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the DeletePublicAccessBlockRequest method.\n//    req, resp := client.DeletePublicAccessBlockRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeletePublicAccessBlock\nfunc (c *S3) DeletePublicAccessBlockRequest(input *DeletePublicAccessBlockInput) (req *request.Request, output *DeletePublicAccessBlockOutput) {\n\top := &request.Operation{\n\t\tName:       opDeletePublicAccessBlock,\n\t\tHTTPMethod: \"DELETE\",\n\t\tHTTPPath:   \"/{Bucket}?publicAccessBlock\",\n\t}\n\n\tif input == nil {\n\t\tinput = &DeletePublicAccessBlockInput{}\n\t}\n\n\toutput = &DeletePublicAccessBlockOutput{}\n\treq = c.newRequest(op, input, output)\n\treq.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)\n\treturn\n}\n\n// DeletePublicAccessBlock API operation for Amazon Simple Storage Service.\n//\n// Removes the PublicAccessBlock configuration from an Amazon S3 bucket.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation DeletePublicAccessBlock for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/DeletePublicAccessBlock\nfunc (c *S3) DeletePublicAccessBlock(input *DeletePublicAccessBlockInput) (*DeletePublicAccessBlockOutput, error) {\n\treq, out := c.DeletePublicAccessBlockRequest(input)\n\treturn out, req.Send()\n}\n\n// DeletePublicAccessBlockWithContext is the same as DeletePublicAccessBlock with the addition of\n// the ability to pass a context and additional request options.\n//\n// See DeletePublicAccessBlock for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) DeletePublicAccessBlockWithContext(ctx aws.Context, input *DeletePublicAccessBlockInput, opts ...request.Option) (*DeletePublicAccessBlockOutput, error) {\n\treq, out := c.DeletePublicAccessBlockRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opGetBucketAccelerateConfiguration = \"GetBucketAccelerateConfiguration\"\n\n// GetBucketAccelerateConfigurationRequest generates a \"aws/request.Request\" representing the\n// client's request for the GetBucketAccelerateConfiguration operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See GetBucketAccelerateConfiguration for more information on using the GetBucketAccelerateConfiguration\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the GetBucketAccelerateConfigurationRequest method.\n//    req, resp := client.GetBucketAccelerateConfigurationRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketAccelerateConfiguration\nfunc (c *S3) GetBucketAccelerateConfigurationRequest(input *GetBucketAccelerateConfigurationInput) (req *request.Request, output *GetBucketAccelerateConfigurationOutput) {\n\top := &request.Operation{\n\t\tName:       opGetBucketAccelerateConfiguration,\n\t\tHTTPMethod: \"GET\",\n\t\tHTTPPath:   \"/{Bucket}?accelerate\",\n\t}\n\n\tif input == nil {\n\t\tinput = &GetBucketAccelerateConfigurationInput{}\n\t}\n\n\toutput = &GetBucketAccelerateConfigurationOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// GetBucketAccelerateConfiguration API operation for Amazon Simple Storage Service.\n//\n// Returns the accelerate configuration of a bucket.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation GetBucketAccelerateConfiguration for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketAccelerateConfiguration\nfunc (c *S3) GetBucketAccelerateConfiguration(input *GetBucketAccelerateConfigurationInput) (*GetBucketAccelerateConfigurationOutput, error) {\n\treq, out := c.GetBucketAccelerateConfigurationRequest(input)\n\treturn out, req.Send()\n}\n\n// GetBucketAccelerateConfigurationWithContext is the same as GetBucketAccelerateConfiguration with the addition of\n// the ability to pass a context and additional request options.\n//\n// See GetBucketAccelerateConfiguration for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) GetBucketAccelerateConfigurationWithContext(ctx aws.Context, input *GetBucketAccelerateConfigurationInput, opts ...request.Option) (*GetBucketAccelerateConfigurationOutput, error) {\n\treq, out := c.GetBucketAccelerateConfigurationRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opGetBucketAcl = \"GetBucketAcl\"\n\n// GetBucketAclRequest generates a \"aws/request.Request\" representing the\n// client's request for the GetBucketAcl operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See GetBucketAcl for more information on using the GetBucketAcl\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the GetBucketAclRequest method.\n//    req, resp := client.GetBucketAclRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketAcl\nfunc (c *S3) GetBucketAclRequest(input *GetBucketAclInput) (req *request.Request, output *GetBucketAclOutput) {\n\top := &request.Operation{\n\t\tName:       opGetBucketAcl,\n\t\tHTTPMethod: \"GET\",\n\t\tHTTPPath:   \"/{Bucket}?acl\",\n\t}\n\n\tif input == nil {\n\t\tinput = &GetBucketAclInput{}\n\t}\n\n\toutput = &GetBucketAclOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// GetBucketAcl API operation for Amazon Simple Storage Service.\n//\n// Gets the access control policy for the bucket.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation GetBucketAcl for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketAcl\nfunc (c *S3) GetBucketAcl(input *GetBucketAclInput) (*GetBucketAclOutput, error) {\n\treq, out := c.GetBucketAclRequest(input)\n\treturn out, req.Send()\n}\n\n// GetBucketAclWithContext is the same as GetBucketAcl with the addition of\n// the ability to pass a context and additional request options.\n//\n// See GetBucketAcl for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) GetBucketAclWithContext(ctx aws.Context, input *GetBucketAclInput, opts ...request.Option) (*GetBucketAclOutput, error) {\n\treq, out := c.GetBucketAclRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opGetBucketAnalyticsConfiguration = \"GetBucketAnalyticsConfiguration\"\n\n// GetBucketAnalyticsConfigurationRequest generates a \"aws/request.Request\" representing the\n// client's request for the GetBucketAnalyticsConfiguration operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See GetBucketAnalyticsConfiguration for more information on using the GetBucketAnalyticsConfiguration\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the GetBucketAnalyticsConfigurationRequest method.\n//    req, resp := client.GetBucketAnalyticsConfigurationRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketAnalyticsConfiguration\nfunc (c *S3) GetBucketAnalyticsConfigurationRequest(input *GetBucketAnalyticsConfigurationInput) (req *request.Request, output *GetBucketAnalyticsConfigurationOutput) {\n\top := &request.Operation{\n\t\tName:       opGetBucketAnalyticsConfiguration,\n\t\tHTTPMethod: \"GET\",\n\t\tHTTPPath:   \"/{Bucket}?analytics\",\n\t}\n\n\tif input == nil {\n\t\tinput = &GetBucketAnalyticsConfigurationInput{}\n\t}\n\n\toutput = &GetBucketAnalyticsConfigurationOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// GetBucketAnalyticsConfiguration API operation for Amazon Simple Storage Service.\n//\n// Gets an analytics configuration for the bucket (specified by the analytics\n// configuration ID).\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation GetBucketAnalyticsConfiguration for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketAnalyticsConfiguration\nfunc (c *S3) GetBucketAnalyticsConfiguration(input *GetBucketAnalyticsConfigurationInput) (*GetBucketAnalyticsConfigurationOutput, error) {\n\treq, out := c.GetBucketAnalyticsConfigurationRequest(input)\n\treturn out, req.Send()\n}\n\n// GetBucketAnalyticsConfigurationWithContext is the same as GetBucketAnalyticsConfiguration with the addition of\n// the ability to pass a context and additional request options.\n//\n// See GetBucketAnalyticsConfiguration for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) GetBucketAnalyticsConfigurationWithContext(ctx aws.Context, input *GetBucketAnalyticsConfigurationInput, opts ...request.Option) (*GetBucketAnalyticsConfigurationOutput, error) {\n\treq, out := c.GetBucketAnalyticsConfigurationRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opGetBucketCors = \"GetBucketCors\"\n\n// GetBucketCorsRequest generates a \"aws/request.Request\" representing the\n// client's request for the GetBucketCors operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See GetBucketCors for more information on using the GetBucketCors\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the GetBucketCorsRequest method.\n//    req, resp := client.GetBucketCorsRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketCors\nfunc (c *S3) GetBucketCorsRequest(input *GetBucketCorsInput) (req *request.Request, output *GetBucketCorsOutput) {\n\top := &request.Operation{\n\t\tName:       opGetBucketCors,\n\t\tHTTPMethod: \"GET\",\n\t\tHTTPPath:   \"/{Bucket}?cors\",\n\t}\n\n\tif input == nil {\n\t\tinput = &GetBucketCorsInput{}\n\t}\n\n\toutput = &GetBucketCorsOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// GetBucketCors API operation for Amazon Simple Storage Service.\n//\n// Returns the CORS configuration for the bucket.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation GetBucketCors for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketCors\nfunc (c *S3) GetBucketCors(input *GetBucketCorsInput) (*GetBucketCorsOutput, error) {\n\treq, out := c.GetBucketCorsRequest(input)\n\treturn out, req.Send()\n}\n\n// GetBucketCorsWithContext is the same as GetBucketCors with the addition of\n// the ability to pass a context and additional request options.\n//\n// See GetBucketCors for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) GetBucketCorsWithContext(ctx aws.Context, input *GetBucketCorsInput, opts ...request.Option) (*GetBucketCorsOutput, error) {\n\treq, out := c.GetBucketCorsRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opGetBucketEncryption = \"GetBucketEncryption\"\n\n// GetBucketEncryptionRequest generates a \"aws/request.Request\" representing the\n// client's request for the GetBucketEncryption operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See GetBucketEncryption for more information on using the GetBucketEncryption\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the GetBucketEncryptionRequest method.\n//    req, resp := client.GetBucketEncryptionRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketEncryption\nfunc (c *S3) GetBucketEncryptionRequest(input *GetBucketEncryptionInput) (req *request.Request, output *GetBucketEncryptionOutput) {\n\top := &request.Operation{\n\t\tName:       opGetBucketEncryption,\n\t\tHTTPMethod: \"GET\",\n\t\tHTTPPath:   \"/{Bucket}?encryption\",\n\t}\n\n\tif input == nil {\n\t\tinput = &GetBucketEncryptionInput{}\n\t}\n\n\toutput = &GetBucketEncryptionOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// GetBucketEncryption API operation for Amazon Simple Storage Service.\n//\n// Returns the server-side encryption configuration of a bucket.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation GetBucketEncryption for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketEncryption\nfunc (c *S3) GetBucketEncryption(input *GetBucketEncryptionInput) (*GetBucketEncryptionOutput, error) {\n\treq, out := c.GetBucketEncryptionRequest(input)\n\treturn out, req.Send()\n}\n\n// GetBucketEncryptionWithContext is the same as GetBucketEncryption with the addition of\n// the ability to pass a context and additional request options.\n//\n// See GetBucketEncryption for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) GetBucketEncryptionWithContext(ctx aws.Context, input *GetBucketEncryptionInput, opts ...request.Option) (*GetBucketEncryptionOutput, error) {\n\treq, out := c.GetBucketEncryptionRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opGetBucketInventoryConfiguration = \"GetBucketInventoryConfiguration\"\n\n// GetBucketInventoryConfigurationRequest generates a \"aws/request.Request\" representing the\n// client's request for the GetBucketInventoryConfiguration operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See GetBucketInventoryConfiguration for more information on using the GetBucketInventoryConfiguration\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the GetBucketInventoryConfigurationRequest method.\n//    req, resp := client.GetBucketInventoryConfigurationRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketInventoryConfiguration\nfunc (c *S3) GetBucketInventoryConfigurationRequest(input *GetBucketInventoryConfigurationInput) (req *request.Request, output *GetBucketInventoryConfigurationOutput) {\n\top := &request.Operation{\n\t\tName:       opGetBucketInventoryConfiguration,\n\t\tHTTPMethod: \"GET\",\n\t\tHTTPPath:   \"/{Bucket}?inventory\",\n\t}\n\n\tif input == nil {\n\t\tinput = &GetBucketInventoryConfigurationInput{}\n\t}\n\n\toutput = &GetBucketInventoryConfigurationOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// GetBucketInventoryConfiguration API operation for Amazon Simple Storage Service.\n//\n// Returns an inventory configuration (identified by the inventory ID) from\n// the bucket.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation GetBucketInventoryConfiguration for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketInventoryConfiguration\nfunc (c *S3) GetBucketInventoryConfiguration(input *GetBucketInventoryConfigurationInput) (*GetBucketInventoryConfigurationOutput, error) {\n\treq, out := c.GetBucketInventoryConfigurationRequest(input)\n\treturn out, req.Send()\n}\n\n// GetBucketInventoryConfigurationWithContext is the same as GetBucketInventoryConfiguration with the addition of\n// the ability to pass a context and additional request options.\n//\n// See GetBucketInventoryConfiguration for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) GetBucketInventoryConfigurationWithContext(ctx aws.Context, input *GetBucketInventoryConfigurationInput, opts ...request.Option) (*GetBucketInventoryConfigurationOutput, error) {\n\treq, out := c.GetBucketInventoryConfigurationRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opGetBucketLifecycle = \"GetBucketLifecycle\"\n\n// GetBucketLifecycleRequest generates a \"aws/request.Request\" representing the\n// client's request for the GetBucketLifecycle operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See GetBucketLifecycle for more information on using the GetBucketLifecycle\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the GetBucketLifecycleRequest method.\n//    req, resp := client.GetBucketLifecycleRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketLifecycle\n//\n// Deprecated: GetBucketLifecycle has been deprecated\nfunc (c *S3) GetBucketLifecycleRequest(input *GetBucketLifecycleInput) (req *request.Request, output *GetBucketLifecycleOutput) {\n\tif c.Client.Config.Logger != nil {\n\t\tc.Client.Config.Logger.Log(\"This operation, GetBucketLifecycle, has been deprecated\")\n\t}\n\top := &request.Operation{\n\t\tName:       opGetBucketLifecycle,\n\t\tHTTPMethod: \"GET\",\n\t\tHTTPPath:   \"/{Bucket}?lifecycle\",\n\t}\n\n\tif input == nil {\n\t\tinput = &GetBucketLifecycleInput{}\n\t}\n\n\toutput = &GetBucketLifecycleOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// GetBucketLifecycle API operation for Amazon Simple Storage Service.\n//\n// No longer used, see the GetBucketLifecycleConfiguration operation.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation GetBucketLifecycle for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketLifecycle\n//\n// Deprecated: GetBucketLifecycle has been deprecated\nfunc (c *S3) GetBucketLifecycle(input *GetBucketLifecycleInput) (*GetBucketLifecycleOutput, error) {\n\treq, out := c.GetBucketLifecycleRequest(input)\n\treturn out, req.Send()\n}\n\n// GetBucketLifecycleWithContext is the same as GetBucketLifecycle with the addition of\n// the ability to pass a context and additional request options.\n//\n// See GetBucketLifecycle for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\n//\n// Deprecated: GetBucketLifecycleWithContext has been deprecated\nfunc (c *S3) GetBucketLifecycleWithContext(ctx aws.Context, input *GetBucketLifecycleInput, opts ...request.Option) (*GetBucketLifecycleOutput, error) {\n\treq, out := c.GetBucketLifecycleRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opGetBucketLifecycleConfiguration = \"GetBucketLifecycleConfiguration\"\n\n// GetBucketLifecycleConfigurationRequest generates a \"aws/request.Request\" representing the\n// client's request for the GetBucketLifecycleConfiguration operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See GetBucketLifecycleConfiguration for more information on using the GetBucketLifecycleConfiguration\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the GetBucketLifecycleConfigurationRequest method.\n//    req, resp := client.GetBucketLifecycleConfigurationRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketLifecycleConfiguration\nfunc (c *S3) GetBucketLifecycleConfigurationRequest(input *GetBucketLifecycleConfigurationInput) (req *request.Request, output *GetBucketLifecycleConfigurationOutput) {\n\top := &request.Operation{\n\t\tName:       opGetBucketLifecycleConfiguration,\n\t\tHTTPMethod: \"GET\",\n\t\tHTTPPath:   \"/{Bucket}?lifecycle\",\n\t}\n\n\tif input == nil {\n\t\tinput = &GetBucketLifecycleConfigurationInput{}\n\t}\n\n\toutput = &GetBucketLifecycleConfigurationOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// GetBucketLifecycleConfiguration API operation for Amazon Simple Storage Service.\n//\n// Returns the lifecycle configuration information set on the bucket.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation GetBucketLifecycleConfiguration for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketLifecycleConfiguration\nfunc (c *S3) GetBucketLifecycleConfiguration(input *GetBucketLifecycleConfigurationInput) (*GetBucketLifecycleConfigurationOutput, error) {\n\treq, out := c.GetBucketLifecycleConfigurationRequest(input)\n\treturn out, req.Send()\n}\n\n// GetBucketLifecycleConfigurationWithContext is the same as GetBucketLifecycleConfiguration with the addition of\n// the ability to pass a context and additional request options.\n//\n// See GetBucketLifecycleConfiguration for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) GetBucketLifecycleConfigurationWithContext(ctx aws.Context, input *GetBucketLifecycleConfigurationInput, opts ...request.Option) (*GetBucketLifecycleConfigurationOutput, error) {\n\treq, out := c.GetBucketLifecycleConfigurationRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opGetBucketLocation = \"GetBucketLocation\"\n\n// GetBucketLocationRequest generates a \"aws/request.Request\" representing the\n// client's request for the GetBucketLocation operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See GetBucketLocation for more information on using the GetBucketLocation\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the GetBucketLocationRequest method.\n//    req, resp := client.GetBucketLocationRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketLocation\nfunc (c *S3) GetBucketLocationRequest(input *GetBucketLocationInput) (req *request.Request, output *GetBucketLocationOutput) {\n\top := &request.Operation{\n\t\tName:       opGetBucketLocation,\n\t\tHTTPMethod: \"GET\",\n\t\tHTTPPath:   \"/{Bucket}?location\",\n\t}\n\n\tif input == nil {\n\t\tinput = &GetBucketLocationInput{}\n\t}\n\n\toutput = &GetBucketLocationOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// GetBucketLocation API operation for Amazon Simple Storage Service.\n//\n// Returns the region the bucket resides in.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation GetBucketLocation for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketLocation\nfunc (c *S3) GetBucketLocation(input *GetBucketLocationInput) (*GetBucketLocationOutput, error) {\n\treq, out := c.GetBucketLocationRequest(input)\n\treturn out, req.Send()\n}\n\n// GetBucketLocationWithContext is the same as GetBucketLocation with the addition of\n// the ability to pass a context and additional request options.\n//\n// See GetBucketLocation for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) GetBucketLocationWithContext(ctx aws.Context, input *GetBucketLocationInput, opts ...request.Option) (*GetBucketLocationOutput, error) {\n\treq, out := c.GetBucketLocationRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opGetBucketLogging = \"GetBucketLogging\"\n\n// GetBucketLoggingRequest generates a \"aws/request.Request\" representing the\n// client's request for the GetBucketLogging operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See GetBucketLogging for more information on using the GetBucketLogging\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the GetBucketLoggingRequest method.\n//    req, resp := client.GetBucketLoggingRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketLogging\nfunc (c *S3) GetBucketLoggingRequest(input *GetBucketLoggingInput) (req *request.Request, output *GetBucketLoggingOutput) {\n\top := &request.Operation{\n\t\tName:       opGetBucketLogging,\n\t\tHTTPMethod: \"GET\",\n\t\tHTTPPath:   \"/{Bucket}?logging\",\n\t}\n\n\tif input == nil {\n\t\tinput = &GetBucketLoggingInput{}\n\t}\n\n\toutput = &GetBucketLoggingOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// GetBucketLogging API operation for Amazon Simple Storage Service.\n//\n// Returns the logging status of a bucket and the permissions users have to\n// view and modify that status. To use GET, you must be the bucket owner.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation GetBucketLogging for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketLogging\nfunc (c *S3) GetBucketLogging(input *GetBucketLoggingInput) (*GetBucketLoggingOutput, error) {\n\treq, out := c.GetBucketLoggingRequest(input)\n\treturn out, req.Send()\n}\n\n// GetBucketLoggingWithContext is the same as GetBucketLogging with the addition of\n// the ability to pass a context and additional request options.\n//\n// See GetBucketLogging for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) GetBucketLoggingWithContext(ctx aws.Context, input *GetBucketLoggingInput, opts ...request.Option) (*GetBucketLoggingOutput, error) {\n\treq, out := c.GetBucketLoggingRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opGetBucketMetricsConfiguration = \"GetBucketMetricsConfiguration\"\n\n// GetBucketMetricsConfigurationRequest generates a \"aws/request.Request\" representing the\n// client's request for the GetBucketMetricsConfiguration operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See GetBucketMetricsConfiguration for more information on using the GetBucketMetricsConfiguration\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the GetBucketMetricsConfigurationRequest method.\n//    req, resp := client.GetBucketMetricsConfigurationRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketMetricsConfiguration\nfunc (c *S3) GetBucketMetricsConfigurationRequest(input *GetBucketMetricsConfigurationInput) (req *request.Request, output *GetBucketMetricsConfigurationOutput) {\n\top := &request.Operation{\n\t\tName:       opGetBucketMetricsConfiguration,\n\t\tHTTPMethod: \"GET\",\n\t\tHTTPPath:   \"/{Bucket}?metrics\",\n\t}\n\n\tif input == nil {\n\t\tinput = &GetBucketMetricsConfigurationInput{}\n\t}\n\n\toutput = &GetBucketMetricsConfigurationOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// GetBucketMetricsConfiguration API operation for Amazon Simple Storage Service.\n//\n// Gets a metrics configuration (specified by the metrics configuration ID)\n// from the bucket.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation GetBucketMetricsConfiguration for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketMetricsConfiguration\nfunc (c *S3) GetBucketMetricsConfiguration(input *GetBucketMetricsConfigurationInput) (*GetBucketMetricsConfigurationOutput, error) {\n\treq, out := c.GetBucketMetricsConfigurationRequest(input)\n\treturn out, req.Send()\n}\n\n// GetBucketMetricsConfigurationWithContext is the same as GetBucketMetricsConfiguration with the addition of\n// the ability to pass a context and additional request options.\n//\n// See GetBucketMetricsConfiguration for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) GetBucketMetricsConfigurationWithContext(ctx aws.Context, input *GetBucketMetricsConfigurationInput, opts ...request.Option) (*GetBucketMetricsConfigurationOutput, error) {\n\treq, out := c.GetBucketMetricsConfigurationRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opGetBucketNotification = \"GetBucketNotification\"\n\n// GetBucketNotificationRequest generates a \"aws/request.Request\" representing the\n// client's request for the GetBucketNotification operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See GetBucketNotification for more information on using the GetBucketNotification\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the GetBucketNotificationRequest method.\n//    req, resp := client.GetBucketNotificationRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketNotification\n//\n// Deprecated: GetBucketNotification has been deprecated\nfunc (c *S3) GetBucketNotificationRequest(input *GetBucketNotificationConfigurationRequest) (req *request.Request, output *NotificationConfigurationDeprecated) {\n\tif c.Client.Config.Logger != nil {\n\t\tc.Client.Config.Logger.Log(\"This operation, GetBucketNotification, has been deprecated\")\n\t}\n\top := &request.Operation{\n\t\tName:       opGetBucketNotification,\n\t\tHTTPMethod: \"GET\",\n\t\tHTTPPath:   \"/{Bucket}?notification\",\n\t}\n\n\tif input == nil {\n\t\tinput = &GetBucketNotificationConfigurationRequest{}\n\t}\n\n\toutput = &NotificationConfigurationDeprecated{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// GetBucketNotification API operation for Amazon Simple Storage Service.\n//\n// No longer used, see the GetBucketNotificationConfiguration operation.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation GetBucketNotification for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketNotification\n//\n// Deprecated: GetBucketNotification has been deprecated\nfunc (c *S3) GetBucketNotification(input *GetBucketNotificationConfigurationRequest) (*NotificationConfigurationDeprecated, error) {\n\treq, out := c.GetBucketNotificationRequest(input)\n\treturn out, req.Send()\n}\n\n// GetBucketNotificationWithContext is the same as GetBucketNotification with the addition of\n// the ability to pass a context and additional request options.\n//\n// See GetBucketNotification for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\n//\n// Deprecated: GetBucketNotificationWithContext has been deprecated\nfunc (c *S3) GetBucketNotificationWithContext(ctx aws.Context, input *GetBucketNotificationConfigurationRequest, opts ...request.Option) (*NotificationConfigurationDeprecated, error) {\n\treq, out := c.GetBucketNotificationRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opGetBucketNotificationConfiguration = \"GetBucketNotificationConfiguration\"\n\n// GetBucketNotificationConfigurationRequest generates a \"aws/request.Request\" representing the\n// client's request for the GetBucketNotificationConfiguration operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See GetBucketNotificationConfiguration for more information on using the GetBucketNotificationConfiguration\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the GetBucketNotificationConfigurationRequest method.\n//    req, resp := client.GetBucketNotificationConfigurationRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketNotificationConfiguration\nfunc (c *S3) GetBucketNotificationConfigurationRequest(input *GetBucketNotificationConfigurationRequest) (req *request.Request, output *NotificationConfiguration) {\n\top := &request.Operation{\n\t\tName:       opGetBucketNotificationConfiguration,\n\t\tHTTPMethod: \"GET\",\n\t\tHTTPPath:   \"/{Bucket}?notification\",\n\t}\n\n\tif input == nil {\n\t\tinput = &GetBucketNotificationConfigurationRequest{}\n\t}\n\n\toutput = &NotificationConfiguration{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// GetBucketNotificationConfiguration API operation for Amazon Simple Storage Service.\n//\n// Returns the notification configuration of a bucket.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation GetBucketNotificationConfiguration for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketNotificationConfiguration\nfunc (c *S3) GetBucketNotificationConfiguration(input *GetBucketNotificationConfigurationRequest) (*NotificationConfiguration, error) {\n\treq, out := c.GetBucketNotificationConfigurationRequest(input)\n\treturn out, req.Send()\n}\n\n// GetBucketNotificationConfigurationWithContext is the same as GetBucketNotificationConfiguration with the addition of\n// the ability to pass a context and additional request options.\n//\n// See GetBucketNotificationConfiguration for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) GetBucketNotificationConfigurationWithContext(ctx aws.Context, input *GetBucketNotificationConfigurationRequest, opts ...request.Option) (*NotificationConfiguration, error) {\n\treq, out := c.GetBucketNotificationConfigurationRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opGetBucketPolicy = \"GetBucketPolicy\"\n\n// GetBucketPolicyRequest generates a \"aws/request.Request\" representing the\n// client's request for the GetBucketPolicy operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See GetBucketPolicy for more information on using the GetBucketPolicy\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the GetBucketPolicyRequest method.\n//    req, resp := client.GetBucketPolicyRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketPolicy\nfunc (c *S3) GetBucketPolicyRequest(input *GetBucketPolicyInput) (req *request.Request, output *GetBucketPolicyOutput) {\n\top := &request.Operation{\n\t\tName:       opGetBucketPolicy,\n\t\tHTTPMethod: \"GET\",\n\t\tHTTPPath:   \"/{Bucket}?policy\",\n\t}\n\n\tif input == nil {\n\t\tinput = &GetBucketPolicyInput{}\n\t}\n\n\toutput = &GetBucketPolicyOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// GetBucketPolicy API operation for Amazon Simple Storage Service.\n//\n// Returns the policy of a specified bucket.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation GetBucketPolicy for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketPolicy\nfunc (c *S3) GetBucketPolicy(input *GetBucketPolicyInput) (*GetBucketPolicyOutput, error) {\n\treq, out := c.GetBucketPolicyRequest(input)\n\treturn out, req.Send()\n}\n\n// GetBucketPolicyWithContext is the same as GetBucketPolicy with the addition of\n// the ability to pass a context and additional request options.\n//\n// See GetBucketPolicy for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) GetBucketPolicyWithContext(ctx aws.Context, input *GetBucketPolicyInput, opts ...request.Option) (*GetBucketPolicyOutput, error) {\n\treq, out := c.GetBucketPolicyRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opGetBucketPolicyStatus = \"GetBucketPolicyStatus\"\n\n// GetBucketPolicyStatusRequest generates a \"aws/request.Request\" representing the\n// client's request for the GetBucketPolicyStatus operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See GetBucketPolicyStatus for more information on using the GetBucketPolicyStatus\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the GetBucketPolicyStatusRequest method.\n//    req, resp := client.GetBucketPolicyStatusRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketPolicyStatus\nfunc (c *S3) GetBucketPolicyStatusRequest(input *GetBucketPolicyStatusInput) (req *request.Request, output *GetBucketPolicyStatusOutput) {\n\top := &request.Operation{\n\t\tName:       opGetBucketPolicyStatus,\n\t\tHTTPMethod: \"GET\",\n\t\tHTTPPath:   \"/{Bucket}?policyStatus\",\n\t}\n\n\tif input == nil {\n\t\tinput = &GetBucketPolicyStatusInput{}\n\t}\n\n\toutput = &GetBucketPolicyStatusOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// GetBucketPolicyStatus API operation for Amazon Simple Storage Service.\n//\n// Retrieves the policy status for an Amazon S3 bucket, indicating whether the\n// bucket is public.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation GetBucketPolicyStatus for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketPolicyStatus\nfunc (c *S3) GetBucketPolicyStatus(input *GetBucketPolicyStatusInput) (*GetBucketPolicyStatusOutput, error) {\n\treq, out := c.GetBucketPolicyStatusRequest(input)\n\treturn out, req.Send()\n}\n\n// GetBucketPolicyStatusWithContext is the same as GetBucketPolicyStatus with the addition of\n// the ability to pass a context and additional request options.\n//\n// See GetBucketPolicyStatus for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) GetBucketPolicyStatusWithContext(ctx aws.Context, input *GetBucketPolicyStatusInput, opts ...request.Option) (*GetBucketPolicyStatusOutput, error) {\n\treq, out := c.GetBucketPolicyStatusRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opGetBucketReplication = \"GetBucketReplication\"\n\n// GetBucketReplicationRequest generates a \"aws/request.Request\" representing the\n// client's request for the GetBucketReplication operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See GetBucketReplication for more information on using the GetBucketReplication\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the GetBucketReplicationRequest method.\n//    req, resp := client.GetBucketReplicationRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketReplication\nfunc (c *S3) GetBucketReplicationRequest(input *GetBucketReplicationInput) (req *request.Request, output *GetBucketReplicationOutput) {\n\top := &request.Operation{\n\t\tName:       opGetBucketReplication,\n\t\tHTTPMethod: \"GET\",\n\t\tHTTPPath:   \"/{Bucket}?replication\",\n\t}\n\n\tif input == nil {\n\t\tinput = &GetBucketReplicationInput{}\n\t}\n\n\toutput = &GetBucketReplicationOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// GetBucketReplication API operation for Amazon Simple Storage Service.\n//\n// Returns the replication configuration of a bucket.\n//\n// It can take a while to propagate the put or delete a replication configuration\n// to all Amazon S3 systems. Therefore, a get request soon after put or delete\n// can return a wrong result.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation GetBucketReplication for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketReplication\nfunc (c *S3) GetBucketReplication(input *GetBucketReplicationInput) (*GetBucketReplicationOutput, error) {\n\treq, out := c.GetBucketReplicationRequest(input)\n\treturn out, req.Send()\n}\n\n// GetBucketReplicationWithContext is the same as GetBucketReplication with the addition of\n// the ability to pass a context and additional request options.\n//\n// See GetBucketReplication for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) GetBucketReplicationWithContext(ctx aws.Context, input *GetBucketReplicationInput, opts ...request.Option) (*GetBucketReplicationOutput, error) {\n\treq, out := c.GetBucketReplicationRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opGetBucketRequestPayment = \"GetBucketRequestPayment\"\n\n// GetBucketRequestPaymentRequest generates a \"aws/request.Request\" representing the\n// client's request for the GetBucketRequestPayment operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See GetBucketRequestPayment for more information on using the GetBucketRequestPayment\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the GetBucketRequestPaymentRequest method.\n//    req, resp := client.GetBucketRequestPaymentRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketRequestPayment\nfunc (c *S3) GetBucketRequestPaymentRequest(input *GetBucketRequestPaymentInput) (req *request.Request, output *GetBucketRequestPaymentOutput) {\n\top := &request.Operation{\n\t\tName:       opGetBucketRequestPayment,\n\t\tHTTPMethod: \"GET\",\n\t\tHTTPPath:   \"/{Bucket}?requestPayment\",\n\t}\n\n\tif input == nil {\n\t\tinput = &GetBucketRequestPaymentInput{}\n\t}\n\n\toutput = &GetBucketRequestPaymentOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// GetBucketRequestPayment API operation for Amazon Simple Storage Service.\n//\n// Returns the request payment configuration of a bucket.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation GetBucketRequestPayment for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketRequestPayment\nfunc (c *S3) GetBucketRequestPayment(input *GetBucketRequestPaymentInput) (*GetBucketRequestPaymentOutput, error) {\n\treq, out := c.GetBucketRequestPaymentRequest(input)\n\treturn out, req.Send()\n}\n\n// GetBucketRequestPaymentWithContext is the same as GetBucketRequestPayment with the addition of\n// the ability to pass a context and additional request options.\n//\n// See GetBucketRequestPayment for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) GetBucketRequestPaymentWithContext(ctx aws.Context, input *GetBucketRequestPaymentInput, opts ...request.Option) (*GetBucketRequestPaymentOutput, error) {\n\treq, out := c.GetBucketRequestPaymentRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opGetBucketTagging = \"GetBucketTagging\"\n\n// GetBucketTaggingRequest generates a \"aws/request.Request\" representing the\n// client's request for the GetBucketTagging operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See GetBucketTagging for more information on using the GetBucketTagging\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the GetBucketTaggingRequest method.\n//    req, resp := client.GetBucketTaggingRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketTagging\nfunc (c *S3) GetBucketTaggingRequest(input *GetBucketTaggingInput) (req *request.Request, output *GetBucketTaggingOutput) {\n\top := &request.Operation{\n\t\tName:       opGetBucketTagging,\n\t\tHTTPMethod: \"GET\",\n\t\tHTTPPath:   \"/{Bucket}?tagging\",\n\t}\n\n\tif input == nil {\n\t\tinput = &GetBucketTaggingInput{}\n\t}\n\n\toutput = &GetBucketTaggingOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// GetBucketTagging API operation for Amazon Simple Storage Service.\n//\n// Returns the tag set associated with the bucket.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation GetBucketTagging for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketTagging\nfunc (c *S3) GetBucketTagging(input *GetBucketTaggingInput) (*GetBucketTaggingOutput, error) {\n\treq, out := c.GetBucketTaggingRequest(input)\n\treturn out, req.Send()\n}\n\n// GetBucketTaggingWithContext is the same as GetBucketTagging with the addition of\n// the ability to pass a context and additional request options.\n//\n// See GetBucketTagging for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) GetBucketTaggingWithContext(ctx aws.Context, input *GetBucketTaggingInput, opts ...request.Option) (*GetBucketTaggingOutput, error) {\n\treq, out := c.GetBucketTaggingRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opGetBucketVersioning = \"GetBucketVersioning\"\n\n// GetBucketVersioningRequest generates a \"aws/request.Request\" representing the\n// client's request for the GetBucketVersioning operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See GetBucketVersioning for more information on using the GetBucketVersioning\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the GetBucketVersioningRequest method.\n//    req, resp := client.GetBucketVersioningRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketVersioning\nfunc (c *S3) GetBucketVersioningRequest(input *GetBucketVersioningInput) (req *request.Request, output *GetBucketVersioningOutput) {\n\top := &request.Operation{\n\t\tName:       opGetBucketVersioning,\n\t\tHTTPMethod: \"GET\",\n\t\tHTTPPath:   \"/{Bucket}?versioning\",\n\t}\n\n\tif input == nil {\n\t\tinput = &GetBucketVersioningInput{}\n\t}\n\n\toutput = &GetBucketVersioningOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// GetBucketVersioning API operation for Amazon Simple Storage Service.\n//\n// Returns the versioning state of a bucket.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation GetBucketVersioning for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketVersioning\nfunc (c *S3) GetBucketVersioning(input *GetBucketVersioningInput) (*GetBucketVersioningOutput, error) {\n\treq, out := c.GetBucketVersioningRequest(input)\n\treturn out, req.Send()\n}\n\n// GetBucketVersioningWithContext is the same as GetBucketVersioning with the addition of\n// the ability to pass a context and additional request options.\n//\n// See GetBucketVersioning for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) GetBucketVersioningWithContext(ctx aws.Context, input *GetBucketVersioningInput, opts ...request.Option) (*GetBucketVersioningOutput, error) {\n\treq, out := c.GetBucketVersioningRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opGetBucketWebsite = \"GetBucketWebsite\"\n\n// GetBucketWebsiteRequest generates a \"aws/request.Request\" representing the\n// client's request for the GetBucketWebsite operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See GetBucketWebsite for more information on using the GetBucketWebsite\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the GetBucketWebsiteRequest method.\n//    req, resp := client.GetBucketWebsiteRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketWebsite\nfunc (c *S3) GetBucketWebsiteRequest(input *GetBucketWebsiteInput) (req *request.Request, output *GetBucketWebsiteOutput) {\n\top := &request.Operation{\n\t\tName:       opGetBucketWebsite,\n\t\tHTTPMethod: \"GET\",\n\t\tHTTPPath:   \"/{Bucket}?website\",\n\t}\n\n\tif input == nil {\n\t\tinput = &GetBucketWebsiteInput{}\n\t}\n\n\toutput = &GetBucketWebsiteOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// GetBucketWebsite API operation for Amazon Simple Storage Service.\n//\n// Returns the website configuration for a bucket.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation GetBucketWebsite for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetBucketWebsite\nfunc (c *S3) GetBucketWebsite(input *GetBucketWebsiteInput) (*GetBucketWebsiteOutput, error) {\n\treq, out := c.GetBucketWebsiteRequest(input)\n\treturn out, req.Send()\n}\n\n// GetBucketWebsiteWithContext is the same as GetBucketWebsite with the addition of\n// the ability to pass a context and additional request options.\n//\n// See GetBucketWebsite for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) GetBucketWebsiteWithContext(ctx aws.Context, input *GetBucketWebsiteInput, opts ...request.Option) (*GetBucketWebsiteOutput, error) {\n\treq, out := c.GetBucketWebsiteRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opGetObject = \"GetObject\"\n\n// GetObjectRequest generates a \"aws/request.Request\" representing the\n// client's request for the GetObject operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See GetObject for more information on using the GetObject\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the GetObjectRequest method.\n//    req, resp := client.GetObjectRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObject\nfunc (c *S3) GetObjectRequest(input *GetObjectInput) (req *request.Request, output *GetObjectOutput) {\n\top := &request.Operation{\n\t\tName:       opGetObject,\n\t\tHTTPMethod: \"GET\",\n\t\tHTTPPath:   \"/{Bucket}/{Key+}\",\n\t}\n\n\tif input == nil {\n\t\tinput = &GetObjectInput{}\n\t}\n\n\toutput = &GetObjectOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// GetObject API operation for Amazon Simple Storage Service.\n//\n// Retrieves objects from Amazon S3.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation GetObject for usage and error information.\n//\n// Returned Error Codes:\n//   * ErrCodeNoSuchKey \"NoSuchKey\"\n//   The specified key does not exist.\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObject\nfunc (c *S3) GetObject(input *GetObjectInput) (*GetObjectOutput, error) {\n\treq, out := c.GetObjectRequest(input)\n\treturn out, req.Send()\n}\n\n// GetObjectWithContext is the same as GetObject with the addition of\n// the ability to pass a context and additional request options.\n//\n// See GetObject for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) GetObjectWithContext(ctx aws.Context, input *GetObjectInput, opts ...request.Option) (*GetObjectOutput, error) {\n\treq, out := c.GetObjectRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opGetObjectAcl = \"GetObjectAcl\"\n\n// GetObjectAclRequest generates a \"aws/request.Request\" representing the\n// client's request for the GetObjectAcl operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See GetObjectAcl for more information on using the GetObjectAcl\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the GetObjectAclRequest method.\n//    req, resp := client.GetObjectAclRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObjectAcl\nfunc (c *S3) GetObjectAclRequest(input *GetObjectAclInput) (req *request.Request, output *GetObjectAclOutput) {\n\top := &request.Operation{\n\t\tName:       opGetObjectAcl,\n\t\tHTTPMethod: \"GET\",\n\t\tHTTPPath:   \"/{Bucket}/{Key+}?acl\",\n\t}\n\n\tif input == nil {\n\t\tinput = &GetObjectAclInput{}\n\t}\n\n\toutput = &GetObjectAclOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// GetObjectAcl API operation for Amazon Simple Storage Service.\n//\n// Returns the access control list (ACL) of an object.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation GetObjectAcl for usage and error information.\n//\n// Returned Error Codes:\n//   * ErrCodeNoSuchKey \"NoSuchKey\"\n//   The specified key does not exist.\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObjectAcl\nfunc (c *S3) GetObjectAcl(input *GetObjectAclInput) (*GetObjectAclOutput, error) {\n\treq, out := c.GetObjectAclRequest(input)\n\treturn out, req.Send()\n}\n\n// GetObjectAclWithContext is the same as GetObjectAcl with the addition of\n// the ability to pass a context and additional request options.\n//\n// See GetObjectAcl for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) GetObjectAclWithContext(ctx aws.Context, input *GetObjectAclInput, opts ...request.Option) (*GetObjectAclOutput, error) {\n\treq, out := c.GetObjectAclRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opGetObjectLegalHold = \"GetObjectLegalHold\"\n\n// GetObjectLegalHoldRequest generates a \"aws/request.Request\" representing the\n// client's request for the GetObjectLegalHold operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See GetObjectLegalHold for more information on using the GetObjectLegalHold\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the GetObjectLegalHoldRequest method.\n//    req, resp := client.GetObjectLegalHoldRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObjectLegalHold\nfunc (c *S3) GetObjectLegalHoldRequest(input *GetObjectLegalHoldInput) (req *request.Request, output *GetObjectLegalHoldOutput) {\n\top := &request.Operation{\n\t\tName:       opGetObjectLegalHold,\n\t\tHTTPMethod: \"GET\",\n\t\tHTTPPath:   \"/{Bucket}/{Key+}?legal-hold\",\n\t}\n\n\tif input == nil {\n\t\tinput = &GetObjectLegalHoldInput{}\n\t}\n\n\toutput = &GetObjectLegalHoldOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// GetObjectLegalHold API operation for Amazon Simple Storage Service.\n//\n// Gets an object's current Legal Hold status.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation GetObjectLegalHold for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObjectLegalHold\nfunc (c *S3) GetObjectLegalHold(input *GetObjectLegalHoldInput) (*GetObjectLegalHoldOutput, error) {\n\treq, out := c.GetObjectLegalHoldRequest(input)\n\treturn out, req.Send()\n}\n\n// GetObjectLegalHoldWithContext is the same as GetObjectLegalHold with the addition of\n// the ability to pass a context and additional request options.\n//\n// See GetObjectLegalHold for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) GetObjectLegalHoldWithContext(ctx aws.Context, input *GetObjectLegalHoldInput, opts ...request.Option) (*GetObjectLegalHoldOutput, error) {\n\treq, out := c.GetObjectLegalHoldRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opGetObjectLockConfiguration = \"GetObjectLockConfiguration\"\n\n// GetObjectLockConfigurationRequest generates a \"aws/request.Request\" representing the\n// client's request for the GetObjectLockConfiguration operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See GetObjectLockConfiguration for more information on using the GetObjectLockConfiguration\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the GetObjectLockConfigurationRequest method.\n//    req, resp := client.GetObjectLockConfigurationRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObjectLockConfiguration\nfunc (c *S3) GetObjectLockConfigurationRequest(input *GetObjectLockConfigurationInput) (req *request.Request, output *GetObjectLockConfigurationOutput) {\n\top := &request.Operation{\n\t\tName:       opGetObjectLockConfiguration,\n\t\tHTTPMethod: \"GET\",\n\t\tHTTPPath:   \"/{Bucket}?object-lock\",\n\t}\n\n\tif input == nil {\n\t\tinput = &GetObjectLockConfigurationInput{}\n\t}\n\n\toutput = &GetObjectLockConfigurationOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// GetObjectLockConfiguration API operation for Amazon Simple Storage Service.\n//\n// Gets the object lock configuration for a bucket. The rule specified in the\n// object lock configuration will be applied by default to every new object\n// placed in the specified bucket.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation GetObjectLockConfiguration for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObjectLockConfiguration\nfunc (c *S3) GetObjectLockConfiguration(input *GetObjectLockConfigurationInput) (*GetObjectLockConfigurationOutput, error) {\n\treq, out := c.GetObjectLockConfigurationRequest(input)\n\treturn out, req.Send()\n}\n\n// GetObjectLockConfigurationWithContext is the same as GetObjectLockConfiguration with the addition of\n// the ability to pass a context and additional request options.\n//\n// See GetObjectLockConfiguration for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) GetObjectLockConfigurationWithContext(ctx aws.Context, input *GetObjectLockConfigurationInput, opts ...request.Option) (*GetObjectLockConfigurationOutput, error) {\n\treq, out := c.GetObjectLockConfigurationRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opGetObjectRetention = \"GetObjectRetention\"\n\n// GetObjectRetentionRequest generates a \"aws/request.Request\" representing the\n// client's request for the GetObjectRetention operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See GetObjectRetention for more information on using the GetObjectRetention\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the GetObjectRetentionRequest method.\n//    req, resp := client.GetObjectRetentionRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObjectRetention\nfunc (c *S3) GetObjectRetentionRequest(input *GetObjectRetentionInput) (req *request.Request, output *GetObjectRetentionOutput) {\n\top := &request.Operation{\n\t\tName:       opGetObjectRetention,\n\t\tHTTPMethod: \"GET\",\n\t\tHTTPPath:   \"/{Bucket}/{Key+}?retention\",\n\t}\n\n\tif input == nil {\n\t\tinput = &GetObjectRetentionInput{}\n\t}\n\n\toutput = &GetObjectRetentionOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// GetObjectRetention API operation for Amazon Simple Storage Service.\n//\n// Retrieves an object's retention settings.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation GetObjectRetention for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObjectRetention\nfunc (c *S3) GetObjectRetention(input *GetObjectRetentionInput) (*GetObjectRetentionOutput, error) {\n\treq, out := c.GetObjectRetentionRequest(input)\n\treturn out, req.Send()\n}\n\n// GetObjectRetentionWithContext is the same as GetObjectRetention with the addition of\n// the ability to pass a context and additional request options.\n//\n// See GetObjectRetention for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) GetObjectRetentionWithContext(ctx aws.Context, input *GetObjectRetentionInput, opts ...request.Option) (*GetObjectRetentionOutput, error) {\n\treq, out := c.GetObjectRetentionRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opGetObjectTagging = \"GetObjectTagging\"\n\n// GetObjectTaggingRequest generates a \"aws/request.Request\" representing the\n// client's request for the GetObjectTagging operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See GetObjectTagging for more information on using the GetObjectTagging\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the GetObjectTaggingRequest method.\n//    req, resp := client.GetObjectTaggingRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObjectTagging\nfunc (c *S3) GetObjectTaggingRequest(input *GetObjectTaggingInput) (req *request.Request, output *GetObjectTaggingOutput) {\n\top := &request.Operation{\n\t\tName:       opGetObjectTagging,\n\t\tHTTPMethod: \"GET\",\n\t\tHTTPPath:   \"/{Bucket}/{Key+}?tagging\",\n\t}\n\n\tif input == nil {\n\t\tinput = &GetObjectTaggingInput{}\n\t}\n\n\toutput = &GetObjectTaggingOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// GetObjectTagging API operation for Amazon Simple Storage Service.\n//\n// Returns the tag-set of an object.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation GetObjectTagging for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObjectTagging\nfunc (c *S3) GetObjectTagging(input *GetObjectTaggingInput) (*GetObjectTaggingOutput, error) {\n\treq, out := c.GetObjectTaggingRequest(input)\n\treturn out, req.Send()\n}\n\n// GetObjectTaggingWithContext is the same as GetObjectTagging with the addition of\n// the ability to pass a context and additional request options.\n//\n// See GetObjectTagging for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) GetObjectTaggingWithContext(ctx aws.Context, input *GetObjectTaggingInput, opts ...request.Option) (*GetObjectTaggingOutput, error) {\n\treq, out := c.GetObjectTaggingRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opGetObjectTorrent = \"GetObjectTorrent\"\n\n// GetObjectTorrentRequest generates a \"aws/request.Request\" representing the\n// client's request for the GetObjectTorrent operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See GetObjectTorrent for more information on using the GetObjectTorrent\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the GetObjectTorrentRequest method.\n//    req, resp := client.GetObjectTorrentRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObjectTorrent\nfunc (c *S3) GetObjectTorrentRequest(input *GetObjectTorrentInput) (req *request.Request, output *GetObjectTorrentOutput) {\n\top := &request.Operation{\n\t\tName:       opGetObjectTorrent,\n\t\tHTTPMethod: \"GET\",\n\t\tHTTPPath:   \"/{Bucket}/{Key+}?torrent\",\n\t}\n\n\tif input == nil {\n\t\tinput = &GetObjectTorrentInput{}\n\t}\n\n\toutput = &GetObjectTorrentOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// GetObjectTorrent API operation for Amazon Simple Storage Service.\n//\n// Return torrent files from a bucket.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation GetObjectTorrent for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetObjectTorrent\nfunc (c *S3) GetObjectTorrent(input *GetObjectTorrentInput) (*GetObjectTorrentOutput, error) {\n\treq, out := c.GetObjectTorrentRequest(input)\n\treturn out, req.Send()\n}\n\n// GetObjectTorrentWithContext is the same as GetObjectTorrent with the addition of\n// the ability to pass a context and additional request options.\n//\n// See GetObjectTorrent for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) GetObjectTorrentWithContext(ctx aws.Context, input *GetObjectTorrentInput, opts ...request.Option) (*GetObjectTorrentOutput, error) {\n\treq, out := c.GetObjectTorrentRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opGetPublicAccessBlock = \"GetPublicAccessBlock\"\n\n// GetPublicAccessBlockRequest generates a \"aws/request.Request\" representing the\n// client's request for the GetPublicAccessBlock operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See GetPublicAccessBlock for more information on using the GetPublicAccessBlock\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the GetPublicAccessBlockRequest method.\n//    req, resp := client.GetPublicAccessBlockRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetPublicAccessBlock\nfunc (c *S3) GetPublicAccessBlockRequest(input *GetPublicAccessBlockInput) (req *request.Request, output *GetPublicAccessBlockOutput) {\n\top := &request.Operation{\n\t\tName:       opGetPublicAccessBlock,\n\t\tHTTPMethod: \"GET\",\n\t\tHTTPPath:   \"/{Bucket}?publicAccessBlock\",\n\t}\n\n\tif input == nil {\n\t\tinput = &GetPublicAccessBlockInput{}\n\t}\n\n\toutput = &GetPublicAccessBlockOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// GetPublicAccessBlock API operation for Amazon Simple Storage Service.\n//\n// Retrieves the PublicAccessBlock configuration for an Amazon S3 bucket.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation GetPublicAccessBlock for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/GetPublicAccessBlock\nfunc (c *S3) GetPublicAccessBlock(input *GetPublicAccessBlockInput) (*GetPublicAccessBlockOutput, error) {\n\treq, out := c.GetPublicAccessBlockRequest(input)\n\treturn out, req.Send()\n}\n\n// GetPublicAccessBlockWithContext is the same as GetPublicAccessBlock with the addition of\n// the ability to pass a context and additional request options.\n//\n// See GetPublicAccessBlock for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) GetPublicAccessBlockWithContext(ctx aws.Context, input *GetPublicAccessBlockInput, opts ...request.Option) (*GetPublicAccessBlockOutput, error) {\n\treq, out := c.GetPublicAccessBlockRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opHeadBucket = \"HeadBucket\"\n\n// HeadBucketRequest generates a \"aws/request.Request\" representing the\n// client's request for the HeadBucket operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See HeadBucket for more information on using the HeadBucket\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the HeadBucketRequest method.\n//    req, resp := client.HeadBucketRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/HeadBucket\nfunc (c *S3) HeadBucketRequest(input *HeadBucketInput) (req *request.Request, output *HeadBucketOutput) {\n\top := &request.Operation{\n\t\tName:       opHeadBucket,\n\t\tHTTPMethod: \"HEAD\",\n\t\tHTTPPath:   \"/{Bucket}\",\n\t}\n\n\tif input == nil {\n\t\tinput = &HeadBucketInput{}\n\t}\n\n\toutput = &HeadBucketOutput{}\n\treq = c.newRequest(op, input, output)\n\treq.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)\n\treturn\n}\n\n// HeadBucket API operation for Amazon Simple Storage Service.\n//\n// This operation is useful to determine if a bucket exists and you have permission\n// to access it.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation HeadBucket for usage and error information.\n//\n// Returned Error Codes:\n//   * ErrCodeNoSuchBucket \"NoSuchBucket\"\n//   The specified bucket does not exist.\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/HeadBucket\nfunc (c *S3) HeadBucket(input *HeadBucketInput) (*HeadBucketOutput, error) {\n\treq, out := c.HeadBucketRequest(input)\n\treturn out, req.Send()\n}\n\n// HeadBucketWithContext is the same as HeadBucket with the addition of\n// the ability to pass a context and additional request options.\n//\n// See HeadBucket for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) HeadBucketWithContext(ctx aws.Context, input *HeadBucketInput, opts ...request.Option) (*HeadBucketOutput, error) {\n\treq, out := c.HeadBucketRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opHeadObject = \"HeadObject\"\n\n// HeadObjectRequest generates a \"aws/request.Request\" representing the\n// client's request for the HeadObject operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See HeadObject for more information on using the HeadObject\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the HeadObjectRequest method.\n//    req, resp := client.HeadObjectRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/HeadObject\nfunc (c *S3) HeadObjectRequest(input *HeadObjectInput) (req *request.Request, output *HeadObjectOutput) {\n\top := &request.Operation{\n\t\tName:       opHeadObject,\n\t\tHTTPMethod: \"HEAD\",\n\t\tHTTPPath:   \"/{Bucket}/{Key+}\",\n\t}\n\n\tif input == nil {\n\t\tinput = &HeadObjectInput{}\n\t}\n\n\toutput = &HeadObjectOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// HeadObject API operation for Amazon Simple Storage Service.\n//\n// The HEAD operation retrieves metadata from an object without returning the\n// object itself. This operation is useful if you're only interested in an object's\n// metadata. To use HEAD, you must have READ access to the object.\n//\n// See http://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#RESTErrorResponses\n// for more information on returned errors.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation HeadObject for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/HeadObject\nfunc (c *S3) HeadObject(input *HeadObjectInput) (*HeadObjectOutput, error) {\n\treq, out := c.HeadObjectRequest(input)\n\treturn out, req.Send()\n}\n\n// HeadObjectWithContext is the same as HeadObject with the addition of\n// the ability to pass a context and additional request options.\n//\n// See HeadObject for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) HeadObjectWithContext(ctx aws.Context, input *HeadObjectInput, opts ...request.Option) (*HeadObjectOutput, error) {\n\treq, out := c.HeadObjectRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opListBucketAnalyticsConfigurations = \"ListBucketAnalyticsConfigurations\"\n\n// ListBucketAnalyticsConfigurationsRequest generates a \"aws/request.Request\" representing the\n// client's request for the ListBucketAnalyticsConfigurations operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See ListBucketAnalyticsConfigurations for more information on using the ListBucketAnalyticsConfigurations\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the ListBucketAnalyticsConfigurationsRequest method.\n//    req, resp := client.ListBucketAnalyticsConfigurationsRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListBucketAnalyticsConfigurations\nfunc (c *S3) ListBucketAnalyticsConfigurationsRequest(input *ListBucketAnalyticsConfigurationsInput) (req *request.Request, output *ListBucketAnalyticsConfigurationsOutput) {\n\top := &request.Operation{\n\t\tName:       opListBucketAnalyticsConfigurations,\n\t\tHTTPMethod: \"GET\",\n\t\tHTTPPath:   \"/{Bucket}?analytics\",\n\t}\n\n\tif input == nil {\n\t\tinput = &ListBucketAnalyticsConfigurationsInput{}\n\t}\n\n\toutput = &ListBucketAnalyticsConfigurationsOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// ListBucketAnalyticsConfigurations API operation for Amazon Simple Storage Service.\n//\n// Lists the analytics configurations for the bucket.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation ListBucketAnalyticsConfigurations for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListBucketAnalyticsConfigurations\nfunc (c *S3) ListBucketAnalyticsConfigurations(input *ListBucketAnalyticsConfigurationsInput) (*ListBucketAnalyticsConfigurationsOutput, error) {\n\treq, out := c.ListBucketAnalyticsConfigurationsRequest(input)\n\treturn out, req.Send()\n}\n\n// ListBucketAnalyticsConfigurationsWithContext is the same as ListBucketAnalyticsConfigurations with the addition of\n// the ability to pass a context and additional request options.\n//\n// See ListBucketAnalyticsConfigurations for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) ListBucketAnalyticsConfigurationsWithContext(ctx aws.Context, input *ListBucketAnalyticsConfigurationsInput, opts ...request.Option) (*ListBucketAnalyticsConfigurationsOutput, error) {\n\treq, out := c.ListBucketAnalyticsConfigurationsRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opListBucketInventoryConfigurations = \"ListBucketInventoryConfigurations\"\n\n// ListBucketInventoryConfigurationsRequest generates a \"aws/request.Request\" representing the\n// client's request for the ListBucketInventoryConfigurations operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See ListBucketInventoryConfigurations for more information on using the ListBucketInventoryConfigurations\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the ListBucketInventoryConfigurationsRequest method.\n//    req, resp := client.ListBucketInventoryConfigurationsRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListBucketInventoryConfigurations\nfunc (c *S3) ListBucketInventoryConfigurationsRequest(input *ListBucketInventoryConfigurationsInput) (req *request.Request, output *ListBucketInventoryConfigurationsOutput) {\n\top := &request.Operation{\n\t\tName:       opListBucketInventoryConfigurations,\n\t\tHTTPMethod: \"GET\",\n\t\tHTTPPath:   \"/{Bucket}?inventory\",\n\t}\n\n\tif input == nil {\n\t\tinput = &ListBucketInventoryConfigurationsInput{}\n\t}\n\n\toutput = &ListBucketInventoryConfigurationsOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// ListBucketInventoryConfigurations API operation for Amazon Simple Storage Service.\n//\n// Returns a list of inventory configurations for the bucket.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation ListBucketInventoryConfigurations for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListBucketInventoryConfigurations\nfunc (c *S3) ListBucketInventoryConfigurations(input *ListBucketInventoryConfigurationsInput) (*ListBucketInventoryConfigurationsOutput, error) {\n\treq, out := c.ListBucketInventoryConfigurationsRequest(input)\n\treturn out, req.Send()\n}\n\n// ListBucketInventoryConfigurationsWithContext is the same as ListBucketInventoryConfigurations with the addition of\n// the ability to pass a context and additional request options.\n//\n// See ListBucketInventoryConfigurations for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) ListBucketInventoryConfigurationsWithContext(ctx aws.Context, input *ListBucketInventoryConfigurationsInput, opts ...request.Option) (*ListBucketInventoryConfigurationsOutput, error) {\n\treq, out := c.ListBucketInventoryConfigurationsRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opListBucketMetricsConfigurations = \"ListBucketMetricsConfigurations\"\n\n// ListBucketMetricsConfigurationsRequest generates a \"aws/request.Request\" representing the\n// client's request for the ListBucketMetricsConfigurations operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See ListBucketMetricsConfigurations for more information on using the ListBucketMetricsConfigurations\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the ListBucketMetricsConfigurationsRequest method.\n//    req, resp := client.ListBucketMetricsConfigurationsRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListBucketMetricsConfigurations\nfunc (c *S3) ListBucketMetricsConfigurationsRequest(input *ListBucketMetricsConfigurationsInput) (req *request.Request, output *ListBucketMetricsConfigurationsOutput) {\n\top := &request.Operation{\n\t\tName:       opListBucketMetricsConfigurations,\n\t\tHTTPMethod: \"GET\",\n\t\tHTTPPath:   \"/{Bucket}?metrics\",\n\t}\n\n\tif input == nil {\n\t\tinput = &ListBucketMetricsConfigurationsInput{}\n\t}\n\n\toutput = &ListBucketMetricsConfigurationsOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// ListBucketMetricsConfigurations API operation for Amazon Simple Storage Service.\n//\n// Lists the metrics configurations for the bucket.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation ListBucketMetricsConfigurations for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListBucketMetricsConfigurations\nfunc (c *S3) ListBucketMetricsConfigurations(input *ListBucketMetricsConfigurationsInput) (*ListBucketMetricsConfigurationsOutput, error) {\n\treq, out := c.ListBucketMetricsConfigurationsRequest(input)\n\treturn out, req.Send()\n}\n\n// ListBucketMetricsConfigurationsWithContext is the same as ListBucketMetricsConfigurations with the addition of\n// the ability to pass a context and additional request options.\n//\n// See ListBucketMetricsConfigurations for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) ListBucketMetricsConfigurationsWithContext(ctx aws.Context, input *ListBucketMetricsConfigurationsInput, opts ...request.Option) (*ListBucketMetricsConfigurationsOutput, error) {\n\treq, out := c.ListBucketMetricsConfigurationsRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opListBuckets = \"ListBuckets\"\n\n// ListBucketsRequest generates a \"aws/request.Request\" representing the\n// client's request for the ListBuckets operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See ListBuckets for more information on using the ListBuckets\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the ListBucketsRequest method.\n//    req, resp := client.ListBucketsRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListBuckets\nfunc (c *S3) ListBucketsRequest(input *ListBucketsInput) (req *request.Request, output *ListBucketsOutput) {\n\top := &request.Operation{\n\t\tName:       opListBuckets,\n\t\tHTTPMethod: \"GET\",\n\t\tHTTPPath:   \"/\",\n\t}\n\n\tif input == nil {\n\t\tinput = &ListBucketsInput{}\n\t}\n\n\toutput = &ListBucketsOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// ListBuckets API operation for Amazon Simple Storage Service.\n//\n// Returns a list of all buckets owned by the authenticated sender of the request.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation ListBuckets for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListBuckets\nfunc (c *S3) ListBuckets(input *ListBucketsInput) (*ListBucketsOutput, error) {\n\treq, out := c.ListBucketsRequest(input)\n\treturn out, req.Send()\n}\n\n// ListBucketsWithContext is the same as ListBuckets with the addition of\n// the ability to pass a context and additional request options.\n//\n// See ListBuckets for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) ListBucketsWithContext(ctx aws.Context, input *ListBucketsInput, opts ...request.Option) (*ListBucketsOutput, error) {\n\treq, out := c.ListBucketsRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opListMultipartUploads = \"ListMultipartUploads\"\n\n// ListMultipartUploadsRequest generates a \"aws/request.Request\" representing the\n// client's request for the ListMultipartUploads operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See ListMultipartUploads for more information on using the ListMultipartUploads\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the ListMultipartUploadsRequest method.\n//    req, resp := client.ListMultipartUploadsRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListMultipartUploads\nfunc (c *S3) ListMultipartUploadsRequest(input *ListMultipartUploadsInput) (req *request.Request, output *ListMultipartUploadsOutput) {\n\top := &request.Operation{\n\t\tName:       opListMultipartUploads,\n\t\tHTTPMethod: \"GET\",\n\t\tHTTPPath:   \"/{Bucket}?uploads\",\n\t\tPaginator: &request.Paginator{\n\t\t\tInputTokens:     []string{\"KeyMarker\", \"UploadIdMarker\"},\n\t\t\tOutputTokens:    []string{\"NextKeyMarker\", \"NextUploadIdMarker\"},\n\t\t\tLimitToken:      \"MaxUploads\",\n\t\t\tTruncationToken: \"IsTruncated\",\n\t\t},\n\t}\n\n\tif input == nil {\n\t\tinput = &ListMultipartUploadsInput{}\n\t}\n\n\toutput = &ListMultipartUploadsOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// ListMultipartUploads API operation for Amazon Simple Storage Service.\n//\n// This operation lists in-progress multipart uploads.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation ListMultipartUploads for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListMultipartUploads\nfunc (c *S3) ListMultipartUploads(input *ListMultipartUploadsInput) (*ListMultipartUploadsOutput, error) {\n\treq, out := c.ListMultipartUploadsRequest(input)\n\treturn out, req.Send()\n}\n\n// ListMultipartUploadsWithContext is the same as ListMultipartUploads with the addition of\n// the ability to pass a context and additional request options.\n//\n// See ListMultipartUploads for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) ListMultipartUploadsWithContext(ctx aws.Context, input *ListMultipartUploadsInput, opts ...request.Option) (*ListMultipartUploadsOutput, error) {\n\treq, out := c.ListMultipartUploadsRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\n// ListMultipartUploadsPages iterates over the pages of a ListMultipartUploads operation,\n// calling the \"fn\" function with the response data for each page. To stop\n// iterating, return false from the fn function.\n//\n// See ListMultipartUploads method for more information on how to use this operation.\n//\n// Note: This operation can generate multiple requests to a service.\n//\n//    // Example iterating over at most 3 pages of a ListMultipartUploads operation.\n//    pageNum := 0\n//    err := client.ListMultipartUploadsPages(params,\n//        func(page *s3.ListMultipartUploadsOutput, lastPage bool) bool {\n//            pageNum++\n//            fmt.Println(page)\n//            return pageNum <= 3\n//        })\n//\nfunc (c *S3) ListMultipartUploadsPages(input *ListMultipartUploadsInput, fn func(*ListMultipartUploadsOutput, bool) bool) error {\n\treturn c.ListMultipartUploadsPagesWithContext(aws.BackgroundContext(), input, fn)\n}\n\n// ListMultipartUploadsPagesWithContext same as ListMultipartUploadsPages except\n// it takes a Context and allows setting request options on the pages.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) ListMultipartUploadsPagesWithContext(ctx aws.Context, input *ListMultipartUploadsInput, fn func(*ListMultipartUploadsOutput, bool) bool, opts ...request.Option) error {\n\tp := request.Pagination{\n\t\tNewRequest: func() (*request.Request, error) {\n\t\t\tvar inCpy *ListMultipartUploadsInput\n\t\t\tif input != nil {\n\t\t\t\ttmp := *input\n\t\t\t\tinCpy = &tmp\n\t\t\t}\n\t\t\treq, _ := c.ListMultipartUploadsRequest(inCpy)\n\t\t\treq.SetContext(ctx)\n\t\t\treq.ApplyOptions(opts...)\n\t\t\treturn req, nil\n\t\t},\n\t}\n\n\tcont := true\n\tfor p.Next() && cont {\n\t\tcont = fn(p.Page().(*ListMultipartUploadsOutput), !p.HasNextPage())\n\t}\n\treturn p.Err()\n}\n\nconst opListObjectVersions = \"ListObjectVersions\"\n\n// ListObjectVersionsRequest generates a \"aws/request.Request\" representing the\n// client's request for the ListObjectVersions operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See ListObjectVersions for more information on using the ListObjectVersions\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the ListObjectVersionsRequest method.\n//    req, resp := client.ListObjectVersionsRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListObjectVersions\nfunc (c *S3) ListObjectVersionsRequest(input *ListObjectVersionsInput) (req *request.Request, output *ListObjectVersionsOutput) {\n\top := &request.Operation{\n\t\tName:       opListObjectVersions,\n\t\tHTTPMethod: \"GET\",\n\t\tHTTPPath:   \"/{Bucket}?versions\",\n\t\tPaginator: &request.Paginator{\n\t\t\tInputTokens:     []string{\"KeyMarker\", \"VersionIdMarker\"},\n\t\t\tOutputTokens:    []string{\"NextKeyMarker\", \"NextVersionIdMarker\"},\n\t\t\tLimitToken:      \"MaxKeys\",\n\t\t\tTruncationToken: \"IsTruncated\",\n\t\t},\n\t}\n\n\tif input == nil {\n\t\tinput = &ListObjectVersionsInput{}\n\t}\n\n\toutput = &ListObjectVersionsOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// ListObjectVersions API operation for Amazon Simple Storage Service.\n//\n// Returns metadata about all of the versions of objects in a bucket.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation ListObjectVersions for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListObjectVersions\nfunc (c *S3) ListObjectVersions(input *ListObjectVersionsInput) (*ListObjectVersionsOutput, error) {\n\treq, out := c.ListObjectVersionsRequest(input)\n\treturn out, req.Send()\n}\n\n// ListObjectVersionsWithContext is the same as ListObjectVersions with the addition of\n// the ability to pass a context and additional request options.\n//\n// See ListObjectVersions for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) ListObjectVersionsWithContext(ctx aws.Context, input *ListObjectVersionsInput, opts ...request.Option) (*ListObjectVersionsOutput, error) {\n\treq, out := c.ListObjectVersionsRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\n// ListObjectVersionsPages iterates over the pages of a ListObjectVersions operation,\n// calling the \"fn\" function with the response data for each page. To stop\n// iterating, return false from the fn function.\n//\n// See ListObjectVersions method for more information on how to use this operation.\n//\n// Note: This operation can generate multiple requests to a service.\n//\n//    // Example iterating over at most 3 pages of a ListObjectVersions operation.\n//    pageNum := 0\n//    err := client.ListObjectVersionsPages(params,\n//        func(page *s3.ListObjectVersionsOutput, lastPage bool) bool {\n//            pageNum++\n//            fmt.Println(page)\n//            return pageNum <= 3\n//        })\n//\nfunc (c *S3) ListObjectVersionsPages(input *ListObjectVersionsInput, fn func(*ListObjectVersionsOutput, bool) bool) error {\n\treturn c.ListObjectVersionsPagesWithContext(aws.BackgroundContext(), input, fn)\n}\n\n// ListObjectVersionsPagesWithContext same as ListObjectVersionsPages except\n// it takes a Context and allows setting request options on the pages.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) ListObjectVersionsPagesWithContext(ctx aws.Context, input *ListObjectVersionsInput, fn func(*ListObjectVersionsOutput, bool) bool, opts ...request.Option) error {\n\tp := request.Pagination{\n\t\tNewRequest: func() (*request.Request, error) {\n\t\t\tvar inCpy *ListObjectVersionsInput\n\t\t\tif input != nil {\n\t\t\t\ttmp := *input\n\t\t\t\tinCpy = &tmp\n\t\t\t}\n\t\t\treq, _ := c.ListObjectVersionsRequest(inCpy)\n\t\t\treq.SetContext(ctx)\n\t\t\treq.ApplyOptions(opts...)\n\t\t\treturn req, nil\n\t\t},\n\t}\n\n\tcont := true\n\tfor p.Next() && cont {\n\t\tcont = fn(p.Page().(*ListObjectVersionsOutput), !p.HasNextPage())\n\t}\n\treturn p.Err()\n}\n\nconst opListObjects = \"ListObjects\"\n\n// ListObjectsRequest generates a \"aws/request.Request\" representing the\n// client's request for the ListObjects operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See ListObjects for more information on using the ListObjects\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the ListObjectsRequest method.\n//    req, resp := client.ListObjectsRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListObjects\nfunc (c *S3) ListObjectsRequest(input *ListObjectsInput) (req *request.Request, output *ListObjectsOutput) {\n\top := &request.Operation{\n\t\tName:       opListObjects,\n\t\tHTTPMethod: \"GET\",\n\t\tHTTPPath:   \"/{Bucket}\",\n\t\tPaginator: &request.Paginator{\n\t\t\tInputTokens:     []string{\"Marker\"},\n\t\t\tOutputTokens:    []string{\"NextMarker || Contents[-1].Key\"},\n\t\t\tLimitToken:      \"MaxKeys\",\n\t\t\tTruncationToken: \"IsTruncated\",\n\t\t},\n\t}\n\n\tif input == nil {\n\t\tinput = &ListObjectsInput{}\n\t}\n\n\toutput = &ListObjectsOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// ListObjects API operation for Amazon Simple Storage Service.\n//\n// Returns some or all (up to 1000) of the objects in a bucket. You can use\n// the request parameters as selection criteria to return a subset of the objects\n// in a bucket.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation ListObjects for usage and error information.\n//\n// Returned Error Codes:\n//   * ErrCodeNoSuchBucket \"NoSuchBucket\"\n//   The specified bucket does not exist.\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListObjects\nfunc (c *S3) ListObjects(input *ListObjectsInput) (*ListObjectsOutput, error) {\n\treq, out := c.ListObjectsRequest(input)\n\treturn out, req.Send()\n}\n\n// ListObjectsWithContext is the same as ListObjects with the addition of\n// the ability to pass a context and additional request options.\n//\n// See ListObjects for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) ListObjectsWithContext(ctx aws.Context, input *ListObjectsInput, opts ...request.Option) (*ListObjectsOutput, error) {\n\treq, out := c.ListObjectsRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\n// ListObjectsPages iterates over the pages of a ListObjects operation,\n// calling the \"fn\" function with the response data for each page. To stop\n// iterating, return false from the fn function.\n//\n// See ListObjects method for more information on how to use this operation.\n//\n// Note: This operation can generate multiple requests to a service.\n//\n//    // Example iterating over at most 3 pages of a ListObjects operation.\n//    pageNum := 0\n//    err := client.ListObjectsPages(params,\n//        func(page *s3.ListObjectsOutput, lastPage bool) bool {\n//            pageNum++\n//            fmt.Println(page)\n//            return pageNum <= 3\n//        })\n//\nfunc (c *S3) ListObjectsPages(input *ListObjectsInput, fn func(*ListObjectsOutput, bool) bool) error {\n\treturn c.ListObjectsPagesWithContext(aws.BackgroundContext(), input, fn)\n}\n\n// ListObjectsPagesWithContext same as ListObjectsPages except\n// it takes a Context and allows setting request options on the pages.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) ListObjectsPagesWithContext(ctx aws.Context, input *ListObjectsInput, fn func(*ListObjectsOutput, bool) bool, opts ...request.Option) error {\n\tp := request.Pagination{\n\t\tNewRequest: func() (*request.Request, error) {\n\t\t\tvar inCpy *ListObjectsInput\n\t\t\tif input != nil {\n\t\t\t\ttmp := *input\n\t\t\t\tinCpy = &tmp\n\t\t\t}\n\t\t\treq, _ := c.ListObjectsRequest(inCpy)\n\t\t\treq.SetContext(ctx)\n\t\t\treq.ApplyOptions(opts...)\n\t\t\treturn req, nil\n\t\t},\n\t}\n\n\tcont := true\n\tfor p.Next() && cont {\n\t\tcont = fn(p.Page().(*ListObjectsOutput), !p.HasNextPage())\n\t}\n\treturn p.Err()\n}\n\nconst opListObjectsV2 = \"ListObjectsV2\"\n\n// ListObjectsV2Request generates a \"aws/request.Request\" representing the\n// client's request for the ListObjectsV2 operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See ListObjectsV2 for more information on using the ListObjectsV2\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the ListObjectsV2Request method.\n//    req, resp := client.ListObjectsV2Request(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListObjectsV2\nfunc (c *S3) ListObjectsV2Request(input *ListObjectsV2Input) (req *request.Request, output *ListObjectsV2Output) {\n\top := &request.Operation{\n\t\tName:       opListObjectsV2,\n\t\tHTTPMethod: \"GET\",\n\t\tHTTPPath:   \"/{Bucket}?list-type=2\",\n\t\tPaginator: &request.Paginator{\n\t\t\tInputTokens:     []string{\"ContinuationToken\"},\n\t\t\tOutputTokens:    []string{\"NextContinuationToken\"},\n\t\t\tLimitToken:      \"MaxKeys\",\n\t\t\tTruncationToken: \"\",\n\t\t},\n\t}\n\n\tif input == nil {\n\t\tinput = &ListObjectsV2Input{}\n\t}\n\n\toutput = &ListObjectsV2Output{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// ListObjectsV2 API operation for Amazon Simple Storage Service.\n//\n// Returns some or all (up to 1000) of the objects in a bucket. You can use\n// the request parameters as selection criteria to return a subset of the objects\n// in a bucket. Note: ListObjectsV2 is the revised List Objects API and we recommend\n// you use this revised API for new application development.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation ListObjectsV2 for usage and error information.\n//\n// Returned Error Codes:\n//   * ErrCodeNoSuchBucket \"NoSuchBucket\"\n//   The specified bucket does not exist.\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListObjectsV2\nfunc (c *S3) ListObjectsV2(input *ListObjectsV2Input) (*ListObjectsV2Output, error) {\n\treq, out := c.ListObjectsV2Request(input)\n\treturn out, req.Send()\n}\n\n// ListObjectsV2WithContext is the same as ListObjectsV2 with the addition of\n// the ability to pass a context and additional request options.\n//\n// See ListObjectsV2 for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) ListObjectsV2WithContext(ctx aws.Context, input *ListObjectsV2Input, opts ...request.Option) (*ListObjectsV2Output, error) {\n\treq, out := c.ListObjectsV2Request(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\n// ListObjectsV2Pages iterates over the pages of a ListObjectsV2 operation,\n// calling the \"fn\" function with the response data for each page. To stop\n// iterating, return false from the fn function.\n//\n// See ListObjectsV2 method for more information on how to use this operation.\n//\n// Note: This operation can generate multiple requests to a service.\n//\n//    // Example iterating over at most 3 pages of a ListObjectsV2 operation.\n//    pageNum := 0\n//    err := client.ListObjectsV2Pages(params,\n//        func(page *s3.ListObjectsV2Output, lastPage bool) bool {\n//            pageNum++\n//            fmt.Println(page)\n//            return pageNum <= 3\n//        })\n//\nfunc (c *S3) ListObjectsV2Pages(input *ListObjectsV2Input, fn func(*ListObjectsV2Output, bool) bool) error {\n\treturn c.ListObjectsV2PagesWithContext(aws.BackgroundContext(), input, fn)\n}\n\n// ListObjectsV2PagesWithContext same as ListObjectsV2Pages except\n// it takes a Context and allows setting request options on the pages.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) ListObjectsV2PagesWithContext(ctx aws.Context, input *ListObjectsV2Input, fn func(*ListObjectsV2Output, bool) bool, opts ...request.Option) error {\n\tp := request.Pagination{\n\t\tNewRequest: func() (*request.Request, error) {\n\t\t\tvar inCpy *ListObjectsV2Input\n\t\t\tif input != nil {\n\t\t\t\ttmp := *input\n\t\t\t\tinCpy = &tmp\n\t\t\t}\n\t\t\treq, _ := c.ListObjectsV2Request(inCpy)\n\t\t\treq.SetContext(ctx)\n\t\t\treq.ApplyOptions(opts...)\n\t\t\treturn req, nil\n\t\t},\n\t}\n\n\tcont := true\n\tfor p.Next() && cont {\n\t\tcont = fn(p.Page().(*ListObjectsV2Output), !p.HasNextPage())\n\t}\n\treturn p.Err()\n}\n\nconst opListParts = \"ListParts\"\n\n// ListPartsRequest generates a \"aws/request.Request\" representing the\n// client's request for the ListParts operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See ListParts for more information on using the ListParts\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the ListPartsRequest method.\n//    req, resp := client.ListPartsRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListParts\nfunc (c *S3) ListPartsRequest(input *ListPartsInput) (req *request.Request, output *ListPartsOutput) {\n\top := &request.Operation{\n\t\tName:       opListParts,\n\t\tHTTPMethod: \"GET\",\n\t\tHTTPPath:   \"/{Bucket}/{Key+}\",\n\t\tPaginator: &request.Paginator{\n\t\t\tInputTokens:     []string{\"PartNumberMarker\"},\n\t\t\tOutputTokens:    []string{\"NextPartNumberMarker\"},\n\t\t\tLimitToken:      \"MaxParts\",\n\t\t\tTruncationToken: \"IsTruncated\",\n\t\t},\n\t}\n\n\tif input == nil {\n\t\tinput = &ListPartsInput{}\n\t}\n\n\toutput = &ListPartsOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// ListParts API operation for Amazon Simple Storage Service.\n//\n// Lists the parts that have been uploaded for a specific multipart upload.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation ListParts for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/ListParts\nfunc (c *S3) ListParts(input *ListPartsInput) (*ListPartsOutput, error) {\n\treq, out := c.ListPartsRequest(input)\n\treturn out, req.Send()\n}\n\n// ListPartsWithContext is the same as ListParts with the addition of\n// the ability to pass a context and additional request options.\n//\n// See ListParts for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) ListPartsWithContext(ctx aws.Context, input *ListPartsInput, opts ...request.Option) (*ListPartsOutput, error) {\n\treq, out := c.ListPartsRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\n// ListPartsPages iterates over the pages of a ListParts operation,\n// calling the \"fn\" function with the response data for each page. To stop\n// iterating, return false from the fn function.\n//\n// See ListParts method for more information on how to use this operation.\n//\n// Note: This operation can generate multiple requests to a service.\n//\n//    // Example iterating over at most 3 pages of a ListParts operation.\n//    pageNum := 0\n//    err := client.ListPartsPages(params,\n//        func(page *s3.ListPartsOutput, lastPage bool) bool {\n//            pageNum++\n//            fmt.Println(page)\n//            return pageNum <= 3\n//        })\n//\nfunc (c *S3) ListPartsPages(input *ListPartsInput, fn func(*ListPartsOutput, bool) bool) error {\n\treturn c.ListPartsPagesWithContext(aws.BackgroundContext(), input, fn)\n}\n\n// ListPartsPagesWithContext same as ListPartsPages except\n// it takes a Context and allows setting request options on the pages.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) ListPartsPagesWithContext(ctx aws.Context, input *ListPartsInput, fn func(*ListPartsOutput, bool) bool, opts ...request.Option) error {\n\tp := request.Pagination{\n\t\tNewRequest: func() (*request.Request, error) {\n\t\t\tvar inCpy *ListPartsInput\n\t\t\tif input != nil {\n\t\t\t\ttmp := *input\n\t\t\t\tinCpy = &tmp\n\t\t\t}\n\t\t\treq, _ := c.ListPartsRequest(inCpy)\n\t\t\treq.SetContext(ctx)\n\t\t\treq.ApplyOptions(opts...)\n\t\t\treturn req, nil\n\t\t},\n\t}\n\n\tcont := true\n\tfor p.Next() && cont {\n\t\tcont = fn(p.Page().(*ListPartsOutput), !p.HasNextPage())\n\t}\n\treturn p.Err()\n}\n\nconst opPutBucketAccelerateConfiguration = \"PutBucketAccelerateConfiguration\"\n\n// PutBucketAccelerateConfigurationRequest generates a \"aws/request.Request\" representing the\n// client's request for the PutBucketAccelerateConfiguration operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See PutBucketAccelerateConfiguration for more information on using the PutBucketAccelerateConfiguration\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the PutBucketAccelerateConfigurationRequest method.\n//    req, resp := client.PutBucketAccelerateConfigurationRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketAccelerateConfiguration\nfunc (c *S3) PutBucketAccelerateConfigurationRequest(input *PutBucketAccelerateConfigurationInput) (req *request.Request, output *PutBucketAccelerateConfigurationOutput) {\n\top := &request.Operation{\n\t\tName:       opPutBucketAccelerateConfiguration,\n\t\tHTTPMethod: \"PUT\",\n\t\tHTTPPath:   \"/{Bucket}?accelerate\",\n\t}\n\n\tif input == nil {\n\t\tinput = &PutBucketAccelerateConfigurationInput{}\n\t}\n\n\toutput = &PutBucketAccelerateConfigurationOutput{}\n\treq = c.newRequest(op, input, output)\n\treq.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)\n\treturn\n}\n\n// PutBucketAccelerateConfiguration API operation for Amazon Simple Storage Service.\n//\n// Sets the accelerate configuration of an existing bucket.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation PutBucketAccelerateConfiguration for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketAccelerateConfiguration\nfunc (c *S3) PutBucketAccelerateConfiguration(input *PutBucketAccelerateConfigurationInput) (*PutBucketAccelerateConfigurationOutput, error) {\n\treq, out := c.PutBucketAccelerateConfigurationRequest(input)\n\treturn out, req.Send()\n}\n\n// PutBucketAccelerateConfigurationWithContext is the same as PutBucketAccelerateConfiguration with the addition of\n// the ability to pass a context and additional request options.\n//\n// See PutBucketAccelerateConfiguration for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) PutBucketAccelerateConfigurationWithContext(ctx aws.Context, input *PutBucketAccelerateConfigurationInput, opts ...request.Option) (*PutBucketAccelerateConfigurationOutput, error) {\n\treq, out := c.PutBucketAccelerateConfigurationRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opPutBucketAcl = \"PutBucketAcl\"\n\n// PutBucketAclRequest generates a \"aws/request.Request\" representing the\n// client's request for the PutBucketAcl operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See PutBucketAcl for more information on using the PutBucketAcl\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the PutBucketAclRequest method.\n//    req, resp := client.PutBucketAclRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketAcl\nfunc (c *S3) PutBucketAclRequest(input *PutBucketAclInput) (req *request.Request, output *PutBucketAclOutput) {\n\top := &request.Operation{\n\t\tName:       opPutBucketAcl,\n\t\tHTTPMethod: \"PUT\",\n\t\tHTTPPath:   \"/{Bucket}?acl\",\n\t}\n\n\tif input == nil {\n\t\tinput = &PutBucketAclInput{}\n\t}\n\n\toutput = &PutBucketAclOutput{}\n\treq = c.newRequest(op, input, output)\n\treq.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)\n\treturn\n}\n\n// PutBucketAcl API operation for Amazon Simple Storage Service.\n//\n// Sets the permissions on a bucket using access control lists (ACL).\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation PutBucketAcl for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketAcl\nfunc (c *S3) PutBucketAcl(input *PutBucketAclInput) (*PutBucketAclOutput, error) {\n\treq, out := c.PutBucketAclRequest(input)\n\treturn out, req.Send()\n}\n\n// PutBucketAclWithContext is the same as PutBucketAcl with the addition of\n// the ability to pass a context and additional request options.\n//\n// See PutBucketAcl for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) PutBucketAclWithContext(ctx aws.Context, input *PutBucketAclInput, opts ...request.Option) (*PutBucketAclOutput, error) {\n\treq, out := c.PutBucketAclRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opPutBucketAnalyticsConfiguration = \"PutBucketAnalyticsConfiguration\"\n\n// PutBucketAnalyticsConfigurationRequest generates a \"aws/request.Request\" representing the\n// client's request for the PutBucketAnalyticsConfiguration operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See PutBucketAnalyticsConfiguration for more information on using the PutBucketAnalyticsConfiguration\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the PutBucketAnalyticsConfigurationRequest method.\n//    req, resp := client.PutBucketAnalyticsConfigurationRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketAnalyticsConfiguration\nfunc (c *S3) PutBucketAnalyticsConfigurationRequest(input *PutBucketAnalyticsConfigurationInput) (req *request.Request, output *PutBucketAnalyticsConfigurationOutput) {\n\top := &request.Operation{\n\t\tName:       opPutBucketAnalyticsConfiguration,\n\t\tHTTPMethod: \"PUT\",\n\t\tHTTPPath:   \"/{Bucket}?analytics\",\n\t}\n\n\tif input == nil {\n\t\tinput = &PutBucketAnalyticsConfigurationInput{}\n\t}\n\n\toutput = &PutBucketAnalyticsConfigurationOutput{}\n\treq = c.newRequest(op, input, output)\n\treq.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)\n\treturn\n}\n\n// PutBucketAnalyticsConfiguration API operation for Amazon Simple Storage Service.\n//\n// Sets an analytics configuration for the bucket (specified by the analytics\n// configuration ID).\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation PutBucketAnalyticsConfiguration for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketAnalyticsConfiguration\nfunc (c *S3) PutBucketAnalyticsConfiguration(input *PutBucketAnalyticsConfigurationInput) (*PutBucketAnalyticsConfigurationOutput, error) {\n\treq, out := c.PutBucketAnalyticsConfigurationRequest(input)\n\treturn out, req.Send()\n}\n\n// PutBucketAnalyticsConfigurationWithContext is the same as PutBucketAnalyticsConfiguration with the addition of\n// the ability to pass a context and additional request options.\n//\n// See PutBucketAnalyticsConfiguration for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) PutBucketAnalyticsConfigurationWithContext(ctx aws.Context, input *PutBucketAnalyticsConfigurationInput, opts ...request.Option) (*PutBucketAnalyticsConfigurationOutput, error) {\n\treq, out := c.PutBucketAnalyticsConfigurationRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opPutBucketCors = \"PutBucketCors\"\n\n// PutBucketCorsRequest generates a \"aws/request.Request\" representing the\n// client's request for the PutBucketCors operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See PutBucketCors for more information on using the PutBucketCors\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the PutBucketCorsRequest method.\n//    req, resp := client.PutBucketCorsRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketCors\nfunc (c *S3) PutBucketCorsRequest(input *PutBucketCorsInput) (req *request.Request, output *PutBucketCorsOutput) {\n\top := &request.Operation{\n\t\tName:       opPutBucketCors,\n\t\tHTTPMethod: \"PUT\",\n\t\tHTTPPath:   \"/{Bucket}?cors\",\n\t}\n\n\tif input == nil {\n\t\tinput = &PutBucketCorsInput{}\n\t}\n\n\toutput = &PutBucketCorsOutput{}\n\treq = c.newRequest(op, input, output)\n\treq.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)\n\treturn\n}\n\n// PutBucketCors API operation for Amazon Simple Storage Service.\n//\n// Sets the CORS configuration for a bucket.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation PutBucketCors for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketCors\nfunc (c *S3) PutBucketCors(input *PutBucketCorsInput) (*PutBucketCorsOutput, error) {\n\treq, out := c.PutBucketCorsRequest(input)\n\treturn out, req.Send()\n}\n\n// PutBucketCorsWithContext is the same as PutBucketCors with the addition of\n// the ability to pass a context and additional request options.\n//\n// See PutBucketCors for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) PutBucketCorsWithContext(ctx aws.Context, input *PutBucketCorsInput, opts ...request.Option) (*PutBucketCorsOutput, error) {\n\treq, out := c.PutBucketCorsRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opPutBucketEncryption = \"PutBucketEncryption\"\n\n// PutBucketEncryptionRequest generates a \"aws/request.Request\" representing the\n// client's request for the PutBucketEncryption operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See PutBucketEncryption for more information on using the PutBucketEncryption\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the PutBucketEncryptionRequest method.\n//    req, resp := client.PutBucketEncryptionRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketEncryption\nfunc (c *S3) PutBucketEncryptionRequest(input *PutBucketEncryptionInput) (req *request.Request, output *PutBucketEncryptionOutput) {\n\top := &request.Operation{\n\t\tName:       opPutBucketEncryption,\n\t\tHTTPMethod: \"PUT\",\n\t\tHTTPPath:   \"/{Bucket}?encryption\",\n\t}\n\n\tif input == nil {\n\t\tinput = &PutBucketEncryptionInput{}\n\t}\n\n\toutput = &PutBucketEncryptionOutput{}\n\treq = c.newRequest(op, input, output)\n\treq.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)\n\treturn\n}\n\n// PutBucketEncryption API operation for Amazon Simple Storage Service.\n//\n// Creates a new server-side encryption configuration (or replaces an existing\n// one, if present).\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation PutBucketEncryption for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketEncryption\nfunc (c *S3) PutBucketEncryption(input *PutBucketEncryptionInput) (*PutBucketEncryptionOutput, error) {\n\treq, out := c.PutBucketEncryptionRequest(input)\n\treturn out, req.Send()\n}\n\n// PutBucketEncryptionWithContext is the same as PutBucketEncryption with the addition of\n// the ability to pass a context and additional request options.\n//\n// See PutBucketEncryption for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) PutBucketEncryptionWithContext(ctx aws.Context, input *PutBucketEncryptionInput, opts ...request.Option) (*PutBucketEncryptionOutput, error) {\n\treq, out := c.PutBucketEncryptionRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opPutBucketInventoryConfiguration = \"PutBucketInventoryConfiguration\"\n\n// PutBucketInventoryConfigurationRequest generates a \"aws/request.Request\" representing the\n// client's request for the PutBucketInventoryConfiguration operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See PutBucketInventoryConfiguration for more information on using the PutBucketInventoryConfiguration\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the PutBucketInventoryConfigurationRequest method.\n//    req, resp := client.PutBucketInventoryConfigurationRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketInventoryConfiguration\nfunc (c *S3) PutBucketInventoryConfigurationRequest(input *PutBucketInventoryConfigurationInput) (req *request.Request, output *PutBucketInventoryConfigurationOutput) {\n\top := &request.Operation{\n\t\tName:       opPutBucketInventoryConfiguration,\n\t\tHTTPMethod: \"PUT\",\n\t\tHTTPPath:   \"/{Bucket}?inventory\",\n\t}\n\n\tif input == nil {\n\t\tinput = &PutBucketInventoryConfigurationInput{}\n\t}\n\n\toutput = &PutBucketInventoryConfigurationOutput{}\n\treq = c.newRequest(op, input, output)\n\treq.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)\n\treturn\n}\n\n// PutBucketInventoryConfiguration API operation for Amazon Simple Storage Service.\n//\n// Adds an inventory configuration (identified by the inventory ID) from the\n// bucket.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation PutBucketInventoryConfiguration for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketInventoryConfiguration\nfunc (c *S3) PutBucketInventoryConfiguration(input *PutBucketInventoryConfigurationInput) (*PutBucketInventoryConfigurationOutput, error) {\n\treq, out := c.PutBucketInventoryConfigurationRequest(input)\n\treturn out, req.Send()\n}\n\n// PutBucketInventoryConfigurationWithContext is the same as PutBucketInventoryConfiguration with the addition of\n// the ability to pass a context and additional request options.\n//\n// See PutBucketInventoryConfiguration for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) PutBucketInventoryConfigurationWithContext(ctx aws.Context, input *PutBucketInventoryConfigurationInput, opts ...request.Option) (*PutBucketInventoryConfigurationOutput, error) {\n\treq, out := c.PutBucketInventoryConfigurationRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opPutBucketLifecycle = \"PutBucketLifecycle\"\n\n// PutBucketLifecycleRequest generates a \"aws/request.Request\" representing the\n// client's request for the PutBucketLifecycle operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See PutBucketLifecycle for more information on using the PutBucketLifecycle\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the PutBucketLifecycleRequest method.\n//    req, resp := client.PutBucketLifecycleRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketLifecycle\n//\n// Deprecated: PutBucketLifecycle has been deprecated\nfunc (c *S3) PutBucketLifecycleRequest(input *PutBucketLifecycleInput) (req *request.Request, output *PutBucketLifecycleOutput) {\n\tif c.Client.Config.Logger != nil {\n\t\tc.Client.Config.Logger.Log(\"This operation, PutBucketLifecycle, has been deprecated\")\n\t}\n\top := &request.Operation{\n\t\tName:       opPutBucketLifecycle,\n\t\tHTTPMethod: \"PUT\",\n\t\tHTTPPath:   \"/{Bucket}?lifecycle\",\n\t}\n\n\tif input == nil {\n\t\tinput = &PutBucketLifecycleInput{}\n\t}\n\n\toutput = &PutBucketLifecycleOutput{}\n\treq = c.newRequest(op, input, output)\n\treq.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)\n\treturn\n}\n\n// PutBucketLifecycle API operation for Amazon Simple Storage Service.\n//\n// No longer used, see the PutBucketLifecycleConfiguration operation.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation PutBucketLifecycle for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketLifecycle\n//\n// Deprecated: PutBucketLifecycle has been deprecated\nfunc (c *S3) PutBucketLifecycle(input *PutBucketLifecycleInput) (*PutBucketLifecycleOutput, error) {\n\treq, out := c.PutBucketLifecycleRequest(input)\n\treturn out, req.Send()\n}\n\n// PutBucketLifecycleWithContext is the same as PutBucketLifecycle with the addition of\n// the ability to pass a context and additional request options.\n//\n// See PutBucketLifecycle for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\n//\n// Deprecated: PutBucketLifecycleWithContext has been deprecated\nfunc (c *S3) PutBucketLifecycleWithContext(ctx aws.Context, input *PutBucketLifecycleInput, opts ...request.Option) (*PutBucketLifecycleOutput, error) {\n\treq, out := c.PutBucketLifecycleRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opPutBucketLifecycleConfiguration = \"PutBucketLifecycleConfiguration\"\n\n// PutBucketLifecycleConfigurationRequest generates a \"aws/request.Request\" representing the\n// client's request for the PutBucketLifecycleConfiguration operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See PutBucketLifecycleConfiguration for more information on using the PutBucketLifecycleConfiguration\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the PutBucketLifecycleConfigurationRequest method.\n//    req, resp := client.PutBucketLifecycleConfigurationRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketLifecycleConfiguration\nfunc (c *S3) PutBucketLifecycleConfigurationRequest(input *PutBucketLifecycleConfigurationInput) (req *request.Request, output *PutBucketLifecycleConfigurationOutput) {\n\top := &request.Operation{\n\t\tName:       opPutBucketLifecycleConfiguration,\n\t\tHTTPMethod: \"PUT\",\n\t\tHTTPPath:   \"/{Bucket}?lifecycle\",\n\t}\n\n\tif input == nil {\n\t\tinput = &PutBucketLifecycleConfigurationInput{}\n\t}\n\n\toutput = &PutBucketLifecycleConfigurationOutput{}\n\treq = c.newRequest(op, input, output)\n\treq.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)\n\treturn\n}\n\n// PutBucketLifecycleConfiguration API operation for Amazon Simple Storage Service.\n//\n// Sets lifecycle configuration for your bucket. If a lifecycle configuration\n// exists, it replaces it.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation PutBucketLifecycleConfiguration for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketLifecycleConfiguration\nfunc (c *S3) PutBucketLifecycleConfiguration(input *PutBucketLifecycleConfigurationInput) (*PutBucketLifecycleConfigurationOutput, error) {\n\treq, out := c.PutBucketLifecycleConfigurationRequest(input)\n\treturn out, req.Send()\n}\n\n// PutBucketLifecycleConfigurationWithContext is the same as PutBucketLifecycleConfiguration with the addition of\n// the ability to pass a context and additional request options.\n//\n// See PutBucketLifecycleConfiguration for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) PutBucketLifecycleConfigurationWithContext(ctx aws.Context, input *PutBucketLifecycleConfigurationInput, opts ...request.Option) (*PutBucketLifecycleConfigurationOutput, error) {\n\treq, out := c.PutBucketLifecycleConfigurationRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opPutBucketLogging = \"PutBucketLogging\"\n\n// PutBucketLoggingRequest generates a \"aws/request.Request\" representing the\n// client's request for the PutBucketLogging operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See PutBucketLogging for more information on using the PutBucketLogging\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the PutBucketLoggingRequest method.\n//    req, resp := client.PutBucketLoggingRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketLogging\nfunc (c *S3) PutBucketLoggingRequest(input *PutBucketLoggingInput) (req *request.Request, output *PutBucketLoggingOutput) {\n\top := &request.Operation{\n\t\tName:       opPutBucketLogging,\n\t\tHTTPMethod: \"PUT\",\n\t\tHTTPPath:   \"/{Bucket}?logging\",\n\t}\n\n\tif input == nil {\n\t\tinput = &PutBucketLoggingInput{}\n\t}\n\n\toutput = &PutBucketLoggingOutput{}\n\treq = c.newRequest(op, input, output)\n\treq.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)\n\treturn\n}\n\n// PutBucketLogging API operation for Amazon Simple Storage Service.\n//\n// Set the logging parameters for a bucket and to specify permissions for who\n// can view and modify the logging parameters. To set the logging status of\n// a bucket, you must be the bucket owner.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation PutBucketLogging for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketLogging\nfunc (c *S3) PutBucketLogging(input *PutBucketLoggingInput) (*PutBucketLoggingOutput, error) {\n\treq, out := c.PutBucketLoggingRequest(input)\n\treturn out, req.Send()\n}\n\n// PutBucketLoggingWithContext is the same as PutBucketLogging with the addition of\n// the ability to pass a context and additional request options.\n//\n// See PutBucketLogging for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) PutBucketLoggingWithContext(ctx aws.Context, input *PutBucketLoggingInput, opts ...request.Option) (*PutBucketLoggingOutput, error) {\n\treq, out := c.PutBucketLoggingRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opPutBucketMetricsConfiguration = \"PutBucketMetricsConfiguration\"\n\n// PutBucketMetricsConfigurationRequest generates a \"aws/request.Request\" representing the\n// client's request for the PutBucketMetricsConfiguration operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See PutBucketMetricsConfiguration for more information on using the PutBucketMetricsConfiguration\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the PutBucketMetricsConfigurationRequest method.\n//    req, resp := client.PutBucketMetricsConfigurationRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketMetricsConfiguration\nfunc (c *S3) PutBucketMetricsConfigurationRequest(input *PutBucketMetricsConfigurationInput) (req *request.Request, output *PutBucketMetricsConfigurationOutput) {\n\top := &request.Operation{\n\t\tName:       opPutBucketMetricsConfiguration,\n\t\tHTTPMethod: \"PUT\",\n\t\tHTTPPath:   \"/{Bucket}?metrics\",\n\t}\n\n\tif input == nil {\n\t\tinput = &PutBucketMetricsConfigurationInput{}\n\t}\n\n\toutput = &PutBucketMetricsConfigurationOutput{}\n\treq = c.newRequest(op, input, output)\n\treq.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)\n\treturn\n}\n\n// PutBucketMetricsConfiguration API operation for Amazon Simple Storage Service.\n//\n// Sets a metrics configuration (specified by the metrics configuration ID)\n// for the bucket.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation PutBucketMetricsConfiguration for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketMetricsConfiguration\nfunc (c *S3) PutBucketMetricsConfiguration(input *PutBucketMetricsConfigurationInput) (*PutBucketMetricsConfigurationOutput, error) {\n\treq, out := c.PutBucketMetricsConfigurationRequest(input)\n\treturn out, req.Send()\n}\n\n// PutBucketMetricsConfigurationWithContext is the same as PutBucketMetricsConfiguration with the addition of\n// the ability to pass a context and additional request options.\n//\n// See PutBucketMetricsConfiguration for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) PutBucketMetricsConfigurationWithContext(ctx aws.Context, input *PutBucketMetricsConfigurationInput, opts ...request.Option) (*PutBucketMetricsConfigurationOutput, error) {\n\treq, out := c.PutBucketMetricsConfigurationRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opPutBucketNotification = \"PutBucketNotification\"\n\n// PutBucketNotificationRequest generates a \"aws/request.Request\" representing the\n// client's request for the PutBucketNotification operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See PutBucketNotification for more information on using the PutBucketNotification\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the PutBucketNotificationRequest method.\n//    req, resp := client.PutBucketNotificationRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketNotification\n//\n// Deprecated: PutBucketNotification has been deprecated\nfunc (c *S3) PutBucketNotificationRequest(input *PutBucketNotificationInput) (req *request.Request, output *PutBucketNotificationOutput) {\n\tif c.Client.Config.Logger != nil {\n\t\tc.Client.Config.Logger.Log(\"This operation, PutBucketNotification, has been deprecated\")\n\t}\n\top := &request.Operation{\n\t\tName:       opPutBucketNotification,\n\t\tHTTPMethod: \"PUT\",\n\t\tHTTPPath:   \"/{Bucket}?notification\",\n\t}\n\n\tif input == nil {\n\t\tinput = &PutBucketNotificationInput{}\n\t}\n\n\toutput = &PutBucketNotificationOutput{}\n\treq = c.newRequest(op, input, output)\n\treq.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)\n\treturn\n}\n\n// PutBucketNotification API operation for Amazon Simple Storage Service.\n//\n// No longer used, see the PutBucketNotificationConfiguration operation.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation PutBucketNotification for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketNotification\n//\n// Deprecated: PutBucketNotification has been deprecated\nfunc (c *S3) PutBucketNotification(input *PutBucketNotificationInput) (*PutBucketNotificationOutput, error) {\n\treq, out := c.PutBucketNotificationRequest(input)\n\treturn out, req.Send()\n}\n\n// PutBucketNotificationWithContext is the same as PutBucketNotification with the addition of\n// the ability to pass a context and additional request options.\n//\n// See PutBucketNotification for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\n//\n// Deprecated: PutBucketNotificationWithContext has been deprecated\nfunc (c *S3) PutBucketNotificationWithContext(ctx aws.Context, input *PutBucketNotificationInput, opts ...request.Option) (*PutBucketNotificationOutput, error) {\n\treq, out := c.PutBucketNotificationRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opPutBucketNotificationConfiguration = \"PutBucketNotificationConfiguration\"\n\n// PutBucketNotificationConfigurationRequest generates a \"aws/request.Request\" representing the\n// client's request for the PutBucketNotificationConfiguration operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See PutBucketNotificationConfiguration for more information on using the PutBucketNotificationConfiguration\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the PutBucketNotificationConfigurationRequest method.\n//    req, resp := client.PutBucketNotificationConfigurationRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketNotificationConfiguration\nfunc (c *S3) PutBucketNotificationConfigurationRequest(input *PutBucketNotificationConfigurationInput) (req *request.Request, output *PutBucketNotificationConfigurationOutput) {\n\top := &request.Operation{\n\t\tName:       opPutBucketNotificationConfiguration,\n\t\tHTTPMethod: \"PUT\",\n\t\tHTTPPath:   \"/{Bucket}?notification\",\n\t}\n\n\tif input == nil {\n\t\tinput = &PutBucketNotificationConfigurationInput{}\n\t}\n\n\toutput = &PutBucketNotificationConfigurationOutput{}\n\treq = c.newRequest(op, input, output)\n\treq.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)\n\treturn\n}\n\n// PutBucketNotificationConfiguration API operation for Amazon Simple Storage Service.\n//\n// Enables notifications of specified events for a bucket.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation PutBucketNotificationConfiguration for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketNotificationConfiguration\nfunc (c *S3) PutBucketNotificationConfiguration(input *PutBucketNotificationConfigurationInput) (*PutBucketNotificationConfigurationOutput, error) {\n\treq, out := c.PutBucketNotificationConfigurationRequest(input)\n\treturn out, req.Send()\n}\n\n// PutBucketNotificationConfigurationWithContext is the same as PutBucketNotificationConfiguration with the addition of\n// the ability to pass a context and additional request options.\n//\n// See PutBucketNotificationConfiguration for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) PutBucketNotificationConfigurationWithContext(ctx aws.Context, input *PutBucketNotificationConfigurationInput, opts ...request.Option) (*PutBucketNotificationConfigurationOutput, error) {\n\treq, out := c.PutBucketNotificationConfigurationRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opPutBucketPolicy = \"PutBucketPolicy\"\n\n// PutBucketPolicyRequest generates a \"aws/request.Request\" representing the\n// client's request for the PutBucketPolicy operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See PutBucketPolicy for more information on using the PutBucketPolicy\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the PutBucketPolicyRequest method.\n//    req, resp := client.PutBucketPolicyRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketPolicy\nfunc (c *S3) PutBucketPolicyRequest(input *PutBucketPolicyInput) (req *request.Request, output *PutBucketPolicyOutput) {\n\top := &request.Operation{\n\t\tName:       opPutBucketPolicy,\n\t\tHTTPMethod: \"PUT\",\n\t\tHTTPPath:   \"/{Bucket}?policy\",\n\t}\n\n\tif input == nil {\n\t\tinput = &PutBucketPolicyInput{}\n\t}\n\n\toutput = &PutBucketPolicyOutput{}\n\treq = c.newRequest(op, input, output)\n\treq.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)\n\treturn\n}\n\n// PutBucketPolicy API operation for Amazon Simple Storage Service.\n//\n// Applies an Amazon S3 bucket policy to an Amazon S3 bucket.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation PutBucketPolicy for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketPolicy\nfunc (c *S3) PutBucketPolicy(input *PutBucketPolicyInput) (*PutBucketPolicyOutput, error) {\n\treq, out := c.PutBucketPolicyRequest(input)\n\treturn out, req.Send()\n}\n\n// PutBucketPolicyWithContext is the same as PutBucketPolicy with the addition of\n// the ability to pass a context and additional request options.\n//\n// See PutBucketPolicy for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) PutBucketPolicyWithContext(ctx aws.Context, input *PutBucketPolicyInput, opts ...request.Option) (*PutBucketPolicyOutput, error) {\n\treq, out := c.PutBucketPolicyRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opPutBucketReplication = \"PutBucketReplication\"\n\n// PutBucketReplicationRequest generates a \"aws/request.Request\" representing the\n// client's request for the PutBucketReplication operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See PutBucketReplication for more information on using the PutBucketReplication\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the PutBucketReplicationRequest method.\n//    req, resp := client.PutBucketReplicationRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketReplication\nfunc (c *S3) PutBucketReplicationRequest(input *PutBucketReplicationInput) (req *request.Request, output *PutBucketReplicationOutput) {\n\top := &request.Operation{\n\t\tName:       opPutBucketReplication,\n\t\tHTTPMethod: \"PUT\",\n\t\tHTTPPath:   \"/{Bucket}?replication\",\n\t}\n\n\tif input == nil {\n\t\tinput = &PutBucketReplicationInput{}\n\t}\n\n\toutput = &PutBucketReplicationOutput{}\n\treq = c.newRequest(op, input, output)\n\treq.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)\n\treturn\n}\n\n// PutBucketReplication API operation for Amazon Simple Storage Service.\n//\n// Creates a replication configuration or replaces an existing one. For more\n// information, see Cross-Region Replication (CRR) (https://docs.aws.amazon.com/AmazonS3/latest/dev/crr.html)\n// in the Amazon S3 Developer Guide.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation PutBucketReplication for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketReplication\nfunc (c *S3) PutBucketReplication(input *PutBucketReplicationInput) (*PutBucketReplicationOutput, error) {\n\treq, out := c.PutBucketReplicationRequest(input)\n\treturn out, req.Send()\n}\n\n// PutBucketReplicationWithContext is the same as PutBucketReplication with the addition of\n// the ability to pass a context and additional request options.\n//\n// See PutBucketReplication for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) PutBucketReplicationWithContext(ctx aws.Context, input *PutBucketReplicationInput, opts ...request.Option) (*PutBucketReplicationOutput, error) {\n\treq, out := c.PutBucketReplicationRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opPutBucketRequestPayment = \"PutBucketRequestPayment\"\n\n// PutBucketRequestPaymentRequest generates a \"aws/request.Request\" representing the\n// client's request for the PutBucketRequestPayment operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See PutBucketRequestPayment for more information on using the PutBucketRequestPayment\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the PutBucketRequestPaymentRequest method.\n//    req, resp := client.PutBucketRequestPaymentRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketRequestPayment\nfunc (c *S3) PutBucketRequestPaymentRequest(input *PutBucketRequestPaymentInput) (req *request.Request, output *PutBucketRequestPaymentOutput) {\n\top := &request.Operation{\n\t\tName:       opPutBucketRequestPayment,\n\t\tHTTPMethod: \"PUT\",\n\t\tHTTPPath:   \"/{Bucket}?requestPayment\",\n\t}\n\n\tif input == nil {\n\t\tinput = &PutBucketRequestPaymentInput{}\n\t}\n\n\toutput = &PutBucketRequestPaymentOutput{}\n\treq = c.newRequest(op, input, output)\n\treq.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)\n\treturn\n}\n\n// PutBucketRequestPayment API operation for Amazon Simple Storage Service.\n//\n// Sets the request payment configuration for a bucket. By default, the bucket\n// owner pays for downloads from the bucket. This configuration parameter enables\n// the bucket owner (only) to specify that the person requesting the download\n// will be charged for the download. Documentation on requester pays buckets\n// can be found at http://docs.aws.amazon.com/AmazonS3/latest/dev/RequesterPaysBuckets.html\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation PutBucketRequestPayment for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketRequestPayment\nfunc (c *S3) PutBucketRequestPayment(input *PutBucketRequestPaymentInput) (*PutBucketRequestPaymentOutput, error) {\n\treq, out := c.PutBucketRequestPaymentRequest(input)\n\treturn out, req.Send()\n}\n\n// PutBucketRequestPaymentWithContext is the same as PutBucketRequestPayment with the addition of\n// the ability to pass a context and additional request options.\n//\n// See PutBucketRequestPayment for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) PutBucketRequestPaymentWithContext(ctx aws.Context, input *PutBucketRequestPaymentInput, opts ...request.Option) (*PutBucketRequestPaymentOutput, error) {\n\treq, out := c.PutBucketRequestPaymentRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opPutBucketTagging = \"PutBucketTagging\"\n\n// PutBucketTaggingRequest generates a \"aws/request.Request\" representing the\n// client's request for the PutBucketTagging operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See PutBucketTagging for more information on using the PutBucketTagging\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the PutBucketTaggingRequest method.\n//    req, resp := client.PutBucketTaggingRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketTagging\nfunc (c *S3) PutBucketTaggingRequest(input *PutBucketTaggingInput) (req *request.Request, output *PutBucketTaggingOutput) {\n\top := &request.Operation{\n\t\tName:       opPutBucketTagging,\n\t\tHTTPMethod: \"PUT\",\n\t\tHTTPPath:   \"/{Bucket}?tagging\",\n\t}\n\n\tif input == nil {\n\t\tinput = &PutBucketTaggingInput{}\n\t}\n\n\toutput = &PutBucketTaggingOutput{}\n\treq = c.newRequest(op, input, output)\n\treq.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)\n\treturn\n}\n\n// PutBucketTagging API operation for Amazon Simple Storage Service.\n//\n// Sets the tags for a bucket.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation PutBucketTagging for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketTagging\nfunc (c *S3) PutBucketTagging(input *PutBucketTaggingInput) (*PutBucketTaggingOutput, error) {\n\treq, out := c.PutBucketTaggingRequest(input)\n\treturn out, req.Send()\n}\n\n// PutBucketTaggingWithContext is the same as PutBucketTagging with the addition of\n// the ability to pass a context and additional request options.\n//\n// See PutBucketTagging for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) PutBucketTaggingWithContext(ctx aws.Context, input *PutBucketTaggingInput, opts ...request.Option) (*PutBucketTaggingOutput, error) {\n\treq, out := c.PutBucketTaggingRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opPutBucketVersioning = \"PutBucketVersioning\"\n\n// PutBucketVersioningRequest generates a \"aws/request.Request\" representing the\n// client's request for the PutBucketVersioning operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See PutBucketVersioning for more information on using the PutBucketVersioning\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the PutBucketVersioningRequest method.\n//    req, resp := client.PutBucketVersioningRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketVersioning\nfunc (c *S3) PutBucketVersioningRequest(input *PutBucketVersioningInput) (req *request.Request, output *PutBucketVersioningOutput) {\n\top := &request.Operation{\n\t\tName:       opPutBucketVersioning,\n\t\tHTTPMethod: \"PUT\",\n\t\tHTTPPath:   \"/{Bucket}?versioning\",\n\t}\n\n\tif input == nil {\n\t\tinput = &PutBucketVersioningInput{}\n\t}\n\n\toutput = &PutBucketVersioningOutput{}\n\treq = c.newRequest(op, input, output)\n\treq.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)\n\treturn\n}\n\n// PutBucketVersioning API operation for Amazon Simple Storage Service.\n//\n// Sets the versioning state of an existing bucket. To set the versioning state,\n// you must be the bucket owner.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation PutBucketVersioning for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketVersioning\nfunc (c *S3) PutBucketVersioning(input *PutBucketVersioningInput) (*PutBucketVersioningOutput, error) {\n\treq, out := c.PutBucketVersioningRequest(input)\n\treturn out, req.Send()\n}\n\n// PutBucketVersioningWithContext is the same as PutBucketVersioning with the addition of\n// the ability to pass a context and additional request options.\n//\n// See PutBucketVersioning for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) PutBucketVersioningWithContext(ctx aws.Context, input *PutBucketVersioningInput, opts ...request.Option) (*PutBucketVersioningOutput, error) {\n\treq, out := c.PutBucketVersioningRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opPutBucketWebsite = \"PutBucketWebsite\"\n\n// PutBucketWebsiteRequest generates a \"aws/request.Request\" representing the\n// client's request for the PutBucketWebsite operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See PutBucketWebsite for more information on using the PutBucketWebsite\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the PutBucketWebsiteRequest method.\n//    req, resp := client.PutBucketWebsiteRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketWebsite\nfunc (c *S3) PutBucketWebsiteRequest(input *PutBucketWebsiteInput) (req *request.Request, output *PutBucketWebsiteOutput) {\n\top := &request.Operation{\n\t\tName:       opPutBucketWebsite,\n\t\tHTTPMethod: \"PUT\",\n\t\tHTTPPath:   \"/{Bucket}?website\",\n\t}\n\n\tif input == nil {\n\t\tinput = &PutBucketWebsiteInput{}\n\t}\n\n\toutput = &PutBucketWebsiteOutput{}\n\treq = c.newRequest(op, input, output)\n\treq.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)\n\treturn\n}\n\n// PutBucketWebsite API operation for Amazon Simple Storage Service.\n//\n// Set the website configuration for a bucket.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation PutBucketWebsite for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutBucketWebsite\nfunc (c *S3) PutBucketWebsite(input *PutBucketWebsiteInput) (*PutBucketWebsiteOutput, error) {\n\treq, out := c.PutBucketWebsiteRequest(input)\n\treturn out, req.Send()\n}\n\n// PutBucketWebsiteWithContext is the same as PutBucketWebsite with the addition of\n// the ability to pass a context and additional request options.\n//\n// See PutBucketWebsite for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) PutBucketWebsiteWithContext(ctx aws.Context, input *PutBucketWebsiteInput, opts ...request.Option) (*PutBucketWebsiteOutput, error) {\n\treq, out := c.PutBucketWebsiteRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opPutObject = \"PutObject\"\n\n// PutObjectRequest generates a \"aws/request.Request\" representing the\n// client's request for the PutObject operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See PutObject for more information on using the PutObject\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the PutObjectRequest method.\n//    req, resp := client.PutObjectRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutObject\nfunc (c *S3) PutObjectRequest(input *PutObjectInput) (req *request.Request, output *PutObjectOutput) {\n\top := &request.Operation{\n\t\tName:       opPutObject,\n\t\tHTTPMethod: \"PUT\",\n\t\tHTTPPath:   \"/{Bucket}/{Key+}\",\n\t}\n\n\tif input == nil {\n\t\tinput = &PutObjectInput{}\n\t}\n\n\toutput = &PutObjectOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// PutObject API operation for Amazon Simple Storage Service.\n//\n// Adds an object to a bucket.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation PutObject for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutObject\nfunc (c *S3) PutObject(input *PutObjectInput) (*PutObjectOutput, error) {\n\treq, out := c.PutObjectRequest(input)\n\treturn out, req.Send()\n}\n\n// PutObjectWithContext is the same as PutObject with the addition of\n// the ability to pass a context and additional request options.\n//\n// See PutObject for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) PutObjectWithContext(ctx aws.Context, input *PutObjectInput, opts ...request.Option) (*PutObjectOutput, error) {\n\treq, out := c.PutObjectRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opPutObjectAcl = \"PutObjectAcl\"\n\n// PutObjectAclRequest generates a \"aws/request.Request\" representing the\n// client's request for the PutObjectAcl operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See PutObjectAcl for more information on using the PutObjectAcl\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the PutObjectAclRequest method.\n//    req, resp := client.PutObjectAclRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutObjectAcl\nfunc (c *S3) PutObjectAclRequest(input *PutObjectAclInput) (req *request.Request, output *PutObjectAclOutput) {\n\top := &request.Operation{\n\t\tName:       opPutObjectAcl,\n\t\tHTTPMethod: \"PUT\",\n\t\tHTTPPath:   \"/{Bucket}/{Key+}?acl\",\n\t}\n\n\tif input == nil {\n\t\tinput = &PutObjectAclInput{}\n\t}\n\n\toutput = &PutObjectAclOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// PutObjectAcl API operation for Amazon Simple Storage Service.\n//\n// uses the acl subresource to set the access control list (ACL) permissions\n// for an object that already exists in a bucket\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation PutObjectAcl for usage and error information.\n//\n// Returned Error Codes:\n//   * ErrCodeNoSuchKey \"NoSuchKey\"\n//   The specified key does not exist.\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutObjectAcl\nfunc (c *S3) PutObjectAcl(input *PutObjectAclInput) (*PutObjectAclOutput, error) {\n\treq, out := c.PutObjectAclRequest(input)\n\treturn out, req.Send()\n}\n\n// PutObjectAclWithContext is the same as PutObjectAcl with the addition of\n// the ability to pass a context and additional request options.\n//\n// See PutObjectAcl for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) PutObjectAclWithContext(ctx aws.Context, input *PutObjectAclInput, opts ...request.Option) (*PutObjectAclOutput, error) {\n\treq, out := c.PutObjectAclRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opPutObjectLegalHold = \"PutObjectLegalHold\"\n\n// PutObjectLegalHoldRequest generates a \"aws/request.Request\" representing the\n// client's request for the PutObjectLegalHold operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See PutObjectLegalHold for more information on using the PutObjectLegalHold\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the PutObjectLegalHoldRequest method.\n//    req, resp := client.PutObjectLegalHoldRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutObjectLegalHold\nfunc (c *S3) PutObjectLegalHoldRequest(input *PutObjectLegalHoldInput) (req *request.Request, output *PutObjectLegalHoldOutput) {\n\top := &request.Operation{\n\t\tName:       opPutObjectLegalHold,\n\t\tHTTPMethod: \"PUT\",\n\t\tHTTPPath:   \"/{Bucket}/{Key+}?legal-hold\",\n\t}\n\n\tif input == nil {\n\t\tinput = &PutObjectLegalHoldInput{}\n\t}\n\n\toutput = &PutObjectLegalHoldOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// PutObjectLegalHold API operation for Amazon Simple Storage Service.\n//\n// Applies a Legal Hold configuration to the specified object.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation PutObjectLegalHold for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutObjectLegalHold\nfunc (c *S3) PutObjectLegalHold(input *PutObjectLegalHoldInput) (*PutObjectLegalHoldOutput, error) {\n\treq, out := c.PutObjectLegalHoldRequest(input)\n\treturn out, req.Send()\n}\n\n// PutObjectLegalHoldWithContext is the same as PutObjectLegalHold with the addition of\n// the ability to pass a context and additional request options.\n//\n// See PutObjectLegalHold for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) PutObjectLegalHoldWithContext(ctx aws.Context, input *PutObjectLegalHoldInput, opts ...request.Option) (*PutObjectLegalHoldOutput, error) {\n\treq, out := c.PutObjectLegalHoldRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opPutObjectLockConfiguration = \"PutObjectLockConfiguration\"\n\n// PutObjectLockConfigurationRequest generates a \"aws/request.Request\" representing the\n// client's request for the PutObjectLockConfiguration operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See PutObjectLockConfiguration for more information on using the PutObjectLockConfiguration\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the PutObjectLockConfigurationRequest method.\n//    req, resp := client.PutObjectLockConfigurationRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutObjectLockConfiguration\nfunc (c *S3) PutObjectLockConfigurationRequest(input *PutObjectLockConfigurationInput) (req *request.Request, output *PutObjectLockConfigurationOutput) {\n\top := &request.Operation{\n\t\tName:       opPutObjectLockConfiguration,\n\t\tHTTPMethod: \"PUT\",\n\t\tHTTPPath:   \"/{Bucket}?object-lock\",\n\t}\n\n\tif input == nil {\n\t\tinput = &PutObjectLockConfigurationInput{}\n\t}\n\n\toutput = &PutObjectLockConfigurationOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// PutObjectLockConfiguration API operation for Amazon Simple Storage Service.\n//\n// Places an object lock configuration on the specified bucket. The rule specified\n// in the object lock configuration will be applied by default to every new\n// object placed in the specified bucket.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation PutObjectLockConfiguration for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutObjectLockConfiguration\nfunc (c *S3) PutObjectLockConfiguration(input *PutObjectLockConfigurationInput) (*PutObjectLockConfigurationOutput, error) {\n\treq, out := c.PutObjectLockConfigurationRequest(input)\n\treturn out, req.Send()\n}\n\n// PutObjectLockConfigurationWithContext is the same as PutObjectLockConfiguration with the addition of\n// the ability to pass a context and additional request options.\n//\n// See PutObjectLockConfiguration for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) PutObjectLockConfigurationWithContext(ctx aws.Context, input *PutObjectLockConfigurationInput, opts ...request.Option) (*PutObjectLockConfigurationOutput, error) {\n\treq, out := c.PutObjectLockConfigurationRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opPutObjectRetention = \"PutObjectRetention\"\n\n// PutObjectRetentionRequest generates a \"aws/request.Request\" representing the\n// client's request for the PutObjectRetention operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See PutObjectRetention for more information on using the PutObjectRetention\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the PutObjectRetentionRequest method.\n//    req, resp := client.PutObjectRetentionRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutObjectRetention\nfunc (c *S3) PutObjectRetentionRequest(input *PutObjectRetentionInput) (req *request.Request, output *PutObjectRetentionOutput) {\n\top := &request.Operation{\n\t\tName:       opPutObjectRetention,\n\t\tHTTPMethod: \"PUT\",\n\t\tHTTPPath:   \"/{Bucket}/{Key+}?retention\",\n\t}\n\n\tif input == nil {\n\t\tinput = &PutObjectRetentionInput{}\n\t}\n\n\toutput = &PutObjectRetentionOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// PutObjectRetention API operation for Amazon Simple Storage Service.\n//\n// Places an Object Retention configuration on an object.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation PutObjectRetention for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutObjectRetention\nfunc (c *S3) PutObjectRetention(input *PutObjectRetentionInput) (*PutObjectRetentionOutput, error) {\n\treq, out := c.PutObjectRetentionRequest(input)\n\treturn out, req.Send()\n}\n\n// PutObjectRetentionWithContext is the same as PutObjectRetention with the addition of\n// the ability to pass a context and additional request options.\n//\n// See PutObjectRetention for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) PutObjectRetentionWithContext(ctx aws.Context, input *PutObjectRetentionInput, opts ...request.Option) (*PutObjectRetentionOutput, error) {\n\treq, out := c.PutObjectRetentionRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opPutObjectTagging = \"PutObjectTagging\"\n\n// PutObjectTaggingRequest generates a \"aws/request.Request\" representing the\n// client's request for the PutObjectTagging operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See PutObjectTagging for more information on using the PutObjectTagging\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the PutObjectTaggingRequest method.\n//    req, resp := client.PutObjectTaggingRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutObjectTagging\nfunc (c *S3) PutObjectTaggingRequest(input *PutObjectTaggingInput) (req *request.Request, output *PutObjectTaggingOutput) {\n\top := &request.Operation{\n\t\tName:       opPutObjectTagging,\n\t\tHTTPMethod: \"PUT\",\n\t\tHTTPPath:   \"/{Bucket}/{Key+}?tagging\",\n\t}\n\n\tif input == nil {\n\t\tinput = &PutObjectTaggingInput{}\n\t}\n\n\toutput = &PutObjectTaggingOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// PutObjectTagging API operation for Amazon Simple Storage Service.\n//\n// Sets the supplied tag-set to an object that already exists in a bucket\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation PutObjectTagging for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutObjectTagging\nfunc (c *S3) PutObjectTagging(input *PutObjectTaggingInput) (*PutObjectTaggingOutput, error) {\n\treq, out := c.PutObjectTaggingRequest(input)\n\treturn out, req.Send()\n}\n\n// PutObjectTaggingWithContext is the same as PutObjectTagging with the addition of\n// the ability to pass a context and additional request options.\n//\n// See PutObjectTagging for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) PutObjectTaggingWithContext(ctx aws.Context, input *PutObjectTaggingInput, opts ...request.Option) (*PutObjectTaggingOutput, error) {\n\treq, out := c.PutObjectTaggingRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opPutPublicAccessBlock = \"PutPublicAccessBlock\"\n\n// PutPublicAccessBlockRequest generates a \"aws/request.Request\" representing the\n// client's request for the PutPublicAccessBlock operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See PutPublicAccessBlock for more information on using the PutPublicAccessBlock\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the PutPublicAccessBlockRequest method.\n//    req, resp := client.PutPublicAccessBlockRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutPublicAccessBlock\nfunc (c *S3) PutPublicAccessBlockRequest(input *PutPublicAccessBlockInput) (req *request.Request, output *PutPublicAccessBlockOutput) {\n\top := &request.Operation{\n\t\tName:       opPutPublicAccessBlock,\n\t\tHTTPMethod: \"PUT\",\n\t\tHTTPPath:   \"/{Bucket}?publicAccessBlock\",\n\t}\n\n\tif input == nil {\n\t\tinput = &PutPublicAccessBlockInput{}\n\t}\n\n\toutput = &PutPublicAccessBlockOutput{}\n\treq = c.newRequest(op, input, output)\n\treq.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, protocol.UnmarshalDiscardBodyHandler)\n\treturn\n}\n\n// PutPublicAccessBlock API operation for Amazon Simple Storage Service.\n//\n// Creates or modifies the PublicAccessBlock configuration for an Amazon S3\n// bucket.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation PutPublicAccessBlock for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/PutPublicAccessBlock\nfunc (c *S3) PutPublicAccessBlock(input *PutPublicAccessBlockInput) (*PutPublicAccessBlockOutput, error) {\n\treq, out := c.PutPublicAccessBlockRequest(input)\n\treturn out, req.Send()\n}\n\n// PutPublicAccessBlockWithContext is the same as PutPublicAccessBlock with the addition of\n// the ability to pass a context and additional request options.\n//\n// See PutPublicAccessBlock for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) PutPublicAccessBlockWithContext(ctx aws.Context, input *PutPublicAccessBlockInput, opts ...request.Option) (*PutPublicAccessBlockOutput, error) {\n\treq, out := c.PutPublicAccessBlockRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opRestoreObject = \"RestoreObject\"\n\n// RestoreObjectRequest generates a \"aws/request.Request\" representing the\n// client's request for the RestoreObject operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See RestoreObject for more information on using the RestoreObject\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the RestoreObjectRequest method.\n//    req, resp := client.RestoreObjectRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/RestoreObject\nfunc (c *S3) RestoreObjectRequest(input *RestoreObjectInput) (req *request.Request, output *RestoreObjectOutput) {\n\top := &request.Operation{\n\t\tName:       opRestoreObject,\n\t\tHTTPMethod: \"POST\",\n\t\tHTTPPath:   \"/{Bucket}/{Key+}?restore\",\n\t}\n\n\tif input == nil {\n\t\tinput = &RestoreObjectInput{}\n\t}\n\n\toutput = &RestoreObjectOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// RestoreObject API operation for Amazon Simple Storage Service.\n//\n// Restores an archived copy of an object back into Amazon S3\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation RestoreObject for usage and error information.\n//\n// Returned Error Codes:\n//   * ErrCodeObjectAlreadyInActiveTierError \"ObjectAlreadyInActiveTierError\"\n//   This operation is not allowed against this storage tier\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/RestoreObject\nfunc (c *S3) RestoreObject(input *RestoreObjectInput) (*RestoreObjectOutput, error) {\n\treq, out := c.RestoreObjectRequest(input)\n\treturn out, req.Send()\n}\n\n// RestoreObjectWithContext is the same as RestoreObject with the addition of\n// the ability to pass a context and additional request options.\n//\n// See RestoreObject for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) RestoreObjectWithContext(ctx aws.Context, input *RestoreObjectInput, opts ...request.Option) (*RestoreObjectOutput, error) {\n\treq, out := c.RestoreObjectRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opSelectObjectContent = \"SelectObjectContent\"\n\n// SelectObjectContentRequest generates a \"aws/request.Request\" representing the\n// client's request for the SelectObjectContent operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See SelectObjectContent for more information on using the SelectObjectContent\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the SelectObjectContentRequest method.\n//    req, resp := client.SelectObjectContentRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/SelectObjectContent\nfunc (c *S3) SelectObjectContentRequest(input *SelectObjectContentInput) (req *request.Request, output *SelectObjectContentOutput) {\n\top := &request.Operation{\n\t\tName:       opSelectObjectContent,\n\t\tHTTPMethod: \"POST\",\n\t\tHTTPPath:   \"/{Bucket}/{Key+}?select&select-type=2\",\n\t}\n\n\tif input == nil {\n\t\tinput = &SelectObjectContentInput{}\n\t}\n\n\toutput = &SelectObjectContentOutput{}\n\treq = c.newRequest(op, input, output)\n\treq.Handlers.Send.Swap(client.LogHTTPResponseHandler.Name, client.LogHTTPResponseHeaderHandler)\n\treq.Handlers.Unmarshal.Swap(restxml.UnmarshalHandler.Name, rest.UnmarshalHandler)\n\treq.Handlers.Unmarshal.PushBack(output.runEventStreamLoop)\n\treturn\n}\n\n// SelectObjectContent API operation for Amazon Simple Storage Service.\n//\n// This operation filters the contents of an Amazon S3 object based on a simple\n// Structured Query Language (SQL) statement. In the request, along with the\n// SQL expression, you must also specify a data serialization format (JSON or\n// CSV) of the object. Amazon S3 uses this to parse object data into records,\n// and returns only records that match the specified SQL expression. You must\n// also specify the data serialization format for the response.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation SelectObjectContent for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/SelectObjectContent\nfunc (c *S3) SelectObjectContent(input *SelectObjectContentInput) (*SelectObjectContentOutput, error) {\n\treq, out := c.SelectObjectContentRequest(input)\n\treturn out, req.Send()\n}\n\n// SelectObjectContentWithContext is the same as SelectObjectContent with the addition of\n// the ability to pass a context and additional request options.\n//\n// See SelectObjectContent for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) SelectObjectContentWithContext(ctx aws.Context, input *SelectObjectContentInput, opts ...request.Option) (*SelectObjectContentOutput, error) {\n\treq, out := c.SelectObjectContentRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opUploadPart = \"UploadPart\"\n\n// UploadPartRequest generates a \"aws/request.Request\" representing the\n// client's request for the UploadPart operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See UploadPart for more information on using the UploadPart\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the UploadPartRequest method.\n//    req, resp := client.UploadPartRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/UploadPart\nfunc (c *S3) UploadPartRequest(input *UploadPartInput) (req *request.Request, output *UploadPartOutput) {\n\top := &request.Operation{\n\t\tName:       opUploadPart,\n\t\tHTTPMethod: \"PUT\",\n\t\tHTTPPath:   \"/{Bucket}/{Key+}\",\n\t}\n\n\tif input == nil {\n\t\tinput = &UploadPartInput{}\n\t}\n\n\toutput = &UploadPartOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// UploadPart API operation for Amazon Simple Storage Service.\n//\n// Uploads a part in a multipart upload.\n//\n// Note: After you initiate multipart upload and upload one or more parts, you\n// must either complete or abort multipart upload in order to stop getting charged\n// for storage of the uploaded parts. Only after you either complete or abort\n// multipart upload, Amazon S3 frees up the parts storage and stops charging\n// you for the parts storage.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation UploadPart for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/UploadPart\nfunc (c *S3) UploadPart(input *UploadPartInput) (*UploadPartOutput, error) {\n\treq, out := c.UploadPartRequest(input)\n\treturn out, req.Send()\n}\n\n// UploadPartWithContext is the same as UploadPart with the addition of\n// the ability to pass a context and additional request options.\n//\n// See UploadPart for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) UploadPartWithContext(ctx aws.Context, input *UploadPartInput, opts ...request.Option) (*UploadPartOutput, error) {\n\treq, out := c.UploadPartRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opUploadPartCopy = \"UploadPartCopy\"\n\n// UploadPartCopyRequest generates a \"aws/request.Request\" representing the\n// client's request for the UploadPartCopy operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See UploadPartCopy for more information on using the UploadPartCopy\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the UploadPartCopyRequest method.\n//    req, resp := client.UploadPartCopyRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/UploadPartCopy\nfunc (c *S3) UploadPartCopyRequest(input *UploadPartCopyInput) (req *request.Request, output *UploadPartCopyOutput) {\n\top := &request.Operation{\n\t\tName:       opUploadPartCopy,\n\t\tHTTPMethod: \"PUT\",\n\t\tHTTPPath:   \"/{Bucket}/{Key+}\",\n\t}\n\n\tif input == nil {\n\t\tinput = &UploadPartCopyInput{}\n\t}\n\n\toutput = &UploadPartCopyOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// UploadPartCopy API operation for Amazon Simple Storage Service.\n//\n// Uploads a part by copying data from an existing object as data source.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for Amazon Simple Storage Service's\n// API operation UploadPartCopy for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01/UploadPartCopy\nfunc (c *S3) UploadPartCopy(input *UploadPartCopyInput) (*UploadPartCopyOutput, error) {\n\treq, out := c.UploadPartCopyRequest(input)\n\treturn out, req.Send()\n}\n\n// UploadPartCopyWithContext is the same as UploadPartCopy with the addition of\n// the ability to pass a context and additional request options.\n//\n// See UploadPartCopy for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) UploadPartCopyWithContext(ctx aws.Context, input *UploadPartCopyInput, opts ...request.Option) (*UploadPartCopyOutput, error) {\n\treq, out := c.UploadPartCopyRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\n// Specifies the days since the initiation of an incomplete multipart upload\n// that Amazon S3 will wait before permanently removing all parts of the upload.\n// For more information, see Aborting Incomplete Multipart Uploads Using a Bucket\n// Lifecycle Policy (https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuoverview.html#mpu-abort-incomplete-mpu-lifecycle-config)\n// in the Amazon Simple Storage Service Developer Guide.\ntype AbortIncompleteMultipartUpload struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Specifies the number of days after which Amazon S3 aborts an incomplete multipart\n\t// upload.\n\tDaysAfterInitiation *int64 `type:\"integer\"`\n}\n\n// String returns the string representation\nfunc (s AbortIncompleteMultipartUpload) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s AbortIncompleteMultipartUpload) GoString() string {\n\treturn s.String()\n}\n\n// SetDaysAfterInitiation sets the DaysAfterInitiation field's value.\nfunc (s *AbortIncompleteMultipartUpload) SetDaysAfterInitiation(v int64) *AbortIncompleteMultipartUpload {\n\ts.DaysAfterInitiation = &v\n\treturn s\n}\n\ntype AbortMultipartUploadInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Name of the bucket to which the multipart upload was initiated.\n\t//\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n\n\t// Key of the object for which the multipart upload was initiated.\n\t//\n\t// Key is a required field\n\tKey *string `location:\"uri\" locationName:\"Key\" min:\"1\" type:\"string\" required:\"true\"`\n\n\t// Confirms that the requester knows that she or he will be charged for the\n\t// request. Bucket owners need not specify this parameter in their requests.\n\t// Documentation on downloading objects from requester pays buckets can be found\n\t// at http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html\n\tRequestPayer *string `location:\"header\" locationName:\"x-amz-request-payer\" type:\"string\" enum:\"RequestPayer\"`\n\n\t// Upload ID that identifies the multipart upload.\n\t//\n\t// UploadId is a required field\n\tUploadId *string `location:\"querystring\" locationName:\"uploadId\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s AbortMultipartUploadInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s AbortMultipartUploadInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *AbortMultipartUploadInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"AbortMultipartUploadInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\tif s.Key == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Key\"))\n\t}\n\tif s.Key != nil && len(*s.Key) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Key\", 1))\n\t}\n\tif s.UploadId == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"UploadId\"))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *AbortMultipartUploadInput) SetBucket(v string) *AbortMultipartUploadInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *AbortMultipartUploadInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetKey sets the Key field's value.\nfunc (s *AbortMultipartUploadInput) SetKey(v string) *AbortMultipartUploadInput {\n\ts.Key = &v\n\treturn s\n}\n\n// SetRequestPayer sets the RequestPayer field's value.\nfunc (s *AbortMultipartUploadInput) SetRequestPayer(v string) *AbortMultipartUploadInput {\n\ts.RequestPayer = &v\n\treturn s\n}\n\n// SetUploadId sets the UploadId field's value.\nfunc (s *AbortMultipartUploadInput) SetUploadId(v string) *AbortMultipartUploadInput {\n\ts.UploadId = &v\n\treturn s\n}\n\ntype AbortMultipartUploadOutput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// If present, indicates that the requester was successfully charged for the\n\t// request.\n\tRequestCharged *string `location:\"header\" locationName:\"x-amz-request-charged\" type:\"string\" enum:\"RequestCharged\"`\n}\n\n// String returns the string representation\nfunc (s AbortMultipartUploadOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s AbortMultipartUploadOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetRequestCharged sets the RequestCharged field's value.\nfunc (s *AbortMultipartUploadOutput) SetRequestCharged(v string) *AbortMultipartUploadOutput {\n\ts.RequestCharged = &v\n\treturn s\n}\n\n// Configures the transfer acceleration state for an Amazon S3 bucket. For more\n// information, see Amazon S3 Transfer Acceleration (https://docs.aws.amazon.com/AmazonS3/latest/dev/transfer-acceleration.html)\n// in the Amazon Simple Storage Service Developer Guide.\ntype AccelerateConfiguration struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Specifies the transfer acceleration status of the bucket.\n\tStatus *string `type:\"string\" enum:\"BucketAccelerateStatus\"`\n}\n\n// String returns the string representation\nfunc (s AccelerateConfiguration) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s AccelerateConfiguration) GoString() string {\n\treturn s.String()\n}\n\n// SetStatus sets the Status field's value.\nfunc (s *AccelerateConfiguration) SetStatus(v string) *AccelerateConfiguration {\n\ts.Status = &v\n\treturn s\n}\n\n// Contains the elements that set the ACL permissions for an object per grantee.\ntype AccessControlPolicy struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// A list of grants.\n\tGrants []*Grant `locationName:\"AccessControlList\" locationNameList:\"Grant\" type:\"list\"`\n\n\t// Container for the bucket owner's display name and ID.\n\tOwner *Owner `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s AccessControlPolicy) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s AccessControlPolicy) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *AccessControlPolicy) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"AccessControlPolicy\"}\n\tif s.Grants != nil {\n\t\tfor i, v := range s.Grants {\n\t\t\tif v == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif err := v.Validate(); err != nil {\n\t\t\t\tinvalidParams.AddNested(fmt.Sprintf(\"%s[%v]\", \"Grants\", i), err.(request.ErrInvalidParams))\n\t\t\t}\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetGrants sets the Grants field's value.\nfunc (s *AccessControlPolicy) SetGrants(v []*Grant) *AccessControlPolicy {\n\ts.Grants = v\n\treturn s\n}\n\n// SetOwner sets the Owner field's value.\nfunc (s *AccessControlPolicy) SetOwner(v *Owner) *AccessControlPolicy {\n\ts.Owner = v\n\treturn s\n}\n\n// A container for information about access control for replicas.\ntype AccessControlTranslation struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Specifies the replica ownership. For default and valid values, see PUT bucket\n\t// replication (https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTreplication.html)\n\t// in the Amazon Simple Storage Service API Reference.\n\t//\n\t// Owner is a required field\n\tOwner *string `type:\"string\" required:\"true\" enum:\"OwnerOverride\"`\n}\n\n// String returns the string representation\nfunc (s AccessControlTranslation) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s AccessControlTranslation) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *AccessControlTranslation) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"AccessControlTranslation\"}\n\tif s.Owner == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Owner\"))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetOwner sets the Owner field's value.\nfunc (s *AccessControlTranslation) SetOwner(v string) *AccessControlTranslation {\n\ts.Owner = &v\n\treturn s\n}\n\n// A conjunction (logical AND) of predicates, which is used in evaluating a\n// metrics filter. The operator must have at least two predicates in any combination,\n// and an object must match all of the predicates for the filter to apply.\ntype AnalyticsAndOperator struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The prefix to use when evaluating an AND predicate: The prefix that an object\n\t// must have to be included in the metrics results.\n\tPrefix *string `type:\"string\"`\n\n\t// The list of tags to use when evaluating an AND predicate.\n\tTags []*Tag `locationName:\"Tag\" locationNameList:\"Tag\" type:\"list\" flattened:\"true\"`\n}\n\n// String returns the string representation\nfunc (s AnalyticsAndOperator) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s AnalyticsAndOperator) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *AnalyticsAndOperator) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"AnalyticsAndOperator\"}\n\tif s.Tags != nil {\n\t\tfor i, v := range s.Tags {\n\t\t\tif v == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif err := v.Validate(); err != nil {\n\t\t\t\tinvalidParams.AddNested(fmt.Sprintf(\"%s[%v]\", \"Tags\", i), err.(request.ErrInvalidParams))\n\t\t\t}\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetPrefix sets the Prefix field's value.\nfunc (s *AnalyticsAndOperator) SetPrefix(v string) *AnalyticsAndOperator {\n\ts.Prefix = &v\n\treturn s\n}\n\n// SetTags sets the Tags field's value.\nfunc (s *AnalyticsAndOperator) SetTags(v []*Tag) *AnalyticsAndOperator {\n\ts.Tags = v\n\treturn s\n}\n\n// Specifies the configuration and any analyses for the analytics filter of\n// an Amazon S3 bucket.\n//\n// For more information, see GET Bucket analytics (https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGETAnalyticsConfig.html)\n// in the Amazon Simple Storage Service API Reference.\ntype AnalyticsConfiguration struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The filter used to describe a set of objects for analyses. A filter must\n\t// have exactly one prefix, one tag, or one conjunction (AnalyticsAndOperator).\n\t// If no filter is provided, all objects will be considered in any analysis.\n\tFilter *AnalyticsFilter `type:\"structure\"`\n\n\t// The ID that identifies the analytics configuration.\n\t//\n\t// Id is a required field\n\tId *string `type:\"string\" required:\"true\"`\n\n\t// Contains data related to access patterns to be collected and made available\n\t// to analyze the tradeoffs between different storage classes.\n\t//\n\t// StorageClassAnalysis is a required field\n\tStorageClassAnalysis *StorageClassAnalysis `type:\"structure\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s AnalyticsConfiguration) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s AnalyticsConfiguration) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *AnalyticsConfiguration) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"AnalyticsConfiguration\"}\n\tif s.Id == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Id\"))\n\t}\n\tif s.StorageClassAnalysis == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"StorageClassAnalysis\"))\n\t}\n\tif s.Filter != nil {\n\t\tif err := s.Filter.Validate(); err != nil {\n\t\t\tinvalidParams.AddNested(\"Filter\", err.(request.ErrInvalidParams))\n\t\t}\n\t}\n\tif s.StorageClassAnalysis != nil {\n\t\tif err := s.StorageClassAnalysis.Validate(); err != nil {\n\t\t\tinvalidParams.AddNested(\"StorageClassAnalysis\", err.(request.ErrInvalidParams))\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetFilter sets the Filter field's value.\nfunc (s *AnalyticsConfiguration) SetFilter(v *AnalyticsFilter) *AnalyticsConfiguration {\n\ts.Filter = v\n\treturn s\n}\n\n// SetId sets the Id field's value.\nfunc (s *AnalyticsConfiguration) SetId(v string) *AnalyticsConfiguration {\n\ts.Id = &v\n\treturn s\n}\n\n// SetStorageClassAnalysis sets the StorageClassAnalysis field's value.\nfunc (s *AnalyticsConfiguration) SetStorageClassAnalysis(v *StorageClassAnalysis) *AnalyticsConfiguration {\n\ts.StorageClassAnalysis = v\n\treturn s\n}\n\n// Where to publish the analytics results.\ntype AnalyticsExportDestination struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// A destination signifying output to an S3 bucket.\n\t//\n\t// S3BucketDestination is a required field\n\tS3BucketDestination *AnalyticsS3BucketDestination `type:\"structure\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s AnalyticsExportDestination) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s AnalyticsExportDestination) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *AnalyticsExportDestination) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"AnalyticsExportDestination\"}\n\tif s.S3BucketDestination == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"S3BucketDestination\"))\n\t}\n\tif s.S3BucketDestination != nil {\n\t\tif err := s.S3BucketDestination.Validate(); err != nil {\n\t\t\tinvalidParams.AddNested(\"S3BucketDestination\", err.(request.ErrInvalidParams))\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetS3BucketDestination sets the S3BucketDestination field's value.\nfunc (s *AnalyticsExportDestination) SetS3BucketDestination(v *AnalyticsS3BucketDestination) *AnalyticsExportDestination {\n\ts.S3BucketDestination = v\n\treturn s\n}\n\ntype AnalyticsFilter struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// A conjunction (logical AND) of predicates, which is used in evaluating an\n\t// analytics filter. The operator must have at least two predicates.\n\tAnd *AnalyticsAndOperator `type:\"structure\"`\n\n\t// The prefix to use when evaluating an analytics filter.\n\tPrefix *string `type:\"string\"`\n\n\t// The tag to use when evaluating an analytics filter.\n\tTag *Tag `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s AnalyticsFilter) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s AnalyticsFilter) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *AnalyticsFilter) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"AnalyticsFilter\"}\n\tif s.And != nil {\n\t\tif err := s.And.Validate(); err != nil {\n\t\t\tinvalidParams.AddNested(\"And\", err.(request.ErrInvalidParams))\n\t\t}\n\t}\n\tif s.Tag != nil {\n\t\tif err := s.Tag.Validate(); err != nil {\n\t\t\tinvalidParams.AddNested(\"Tag\", err.(request.ErrInvalidParams))\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetAnd sets the And field's value.\nfunc (s *AnalyticsFilter) SetAnd(v *AnalyticsAndOperator) *AnalyticsFilter {\n\ts.And = v\n\treturn s\n}\n\n// SetPrefix sets the Prefix field's value.\nfunc (s *AnalyticsFilter) SetPrefix(v string) *AnalyticsFilter {\n\ts.Prefix = &v\n\treturn s\n}\n\n// SetTag sets the Tag field's value.\nfunc (s *AnalyticsFilter) SetTag(v *Tag) *AnalyticsFilter {\n\ts.Tag = v\n\treturn s\n}\n\ntype AnalyticsS3BucketDestination struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The Amazon Resource Name (ARN) of the bucket to which data is exported.\n\t//\n\t// Bucket is a required field\n\tBucket *string `type:\"string\" required:\"true\"`\n\n\t// The account ID that owns the destination bucket. If no account ID is provided,\n\t// the owner will not be validated prior to exporting data.\n\tBucketAccountId *string `type:\"string\"`\n\n\t// Specifies the file format used when exporting data to Amazon S3.\n\t//\n\t// Format is a required field\n\tFormat *string `type:\"string\" required:\"true\" enum:\"AnalyticsS3ExportFileFormat\"`\n\n\t// The prefix to use when exporting data. The prefix is prepended to all results.\n\tPrefix *string `type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s AnalyticsS3BucketDestination) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s AnalyticsS3BucketDestination) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *AnalyticsS3BucketDestination) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"AnalyticsS3BucketDestination\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Format == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Format\"))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *AnalyticsS3BucketDestination) SetBucket(v string) *AnalyticsS3BucketDestination {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *AnalyticsS3BucketDestination) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetBucketAccountId sets the BucketAccountId field's value.\nfunc (s *AnalyticsS3BucketDestination) SetBucketAccountId(v string) *AnalyticsS3BucketDestination {\n\ts.BucketAccountId = &v\n\treturn s\n}\n\n// SetFormat sets the Format field's value.\nfunc (s *AnalyticsS3BucketDestination) SetFormat(v string) *AnalyticsS3BucketDestination {\n\ts.Format = &v\n\treturn s\n}\n\n// SetPrefix sets the Prefix field's value.\nfunc (s *AnalyticsS3BucketDestination) SetPrefix(v string) *AnalyticsS3BucketDestination {\n\ts.Prefix = &v\n\treturn s\n}\n\ntype Bucket struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Date the bucket was created.\n\tCreationDate *time.Time `type:\"timestamp\"`\n\n\t// The name of the bucket.\n\tName *string `type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s Bucket) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s Bucket) GoString() string {\n\treturn s.String()\n}\n\n// SetCreationDate sets the CreationDate field's value.\nfunc (s *Bucket) SetCreationDate(v time.Time) *Bucket {\n\ts.CreationDate = &v\n\treturn s\n}\n\n// SetName sets the Name field's value.\nfunc (s *Bucket) SetName(v string) *Bucket {\n\ts.Name = &v\n\treturn s\n}\n\n// Specifies the lifecycle configuration for objects in an Amazon S3 bucket.\n// For more information, see Object Lifecycle Management (https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html)\n// in the Amazon Simple Storage Service Developer Guide.\ntype BucketLifecycleConfiguration struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// A lifecycle rule for individual objects in an Amazon S3 bucket.\n\t//\n\t// Rules is a required field\n\tRules []*LifecycleRule `locationName:\"Rule\" type:\"list\" flattened:\"true\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s BucketLifecycleConfiguration) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s BucketLifecycleConfiguration) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *BucketLifecycleConfiguration) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"BucketLifecycleConfiguration\"}\n\tif s.Rules == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Rules\"))\n\t}\n\tif s.Rules != nil {\n\t\tfor i, v := range s.Rules {\n\t\t\tif v == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif err := v.Validate(); err != nil {\n\t\t\t\tinvalidParams.AddNested(fmt.Sprintf(\"%s[%v]\", \"Rules\", i), err.(request.ErrInvalidParams))\n\t\t\t}\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetRules sets the Rules field's value.\nfunc (s *BucketLifecycleConfiguration) SetRules(v []*LifecycleRule) *BucketLifecycleConfiguration {\n\ts.Rules = v\n\treturn s\n}\n\ntype BucketLoggingStatus struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Describes where logs are stored and the prefix that Amazon S3 assigns to\n\t// all log object keys for a bucket. For more information, see PUT Bucket logging\n\t// (https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTlogging.html)\n\t// in the Amazon Simple Storage Service API Reference.\n\tLoggingEnabled *LoggingEnabled `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s BucketLoggingStatus) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s BucketLoggingStatus) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *BucketLoggingStatus) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"BucketLoggingStatus\"}\n\tif s.LoggingEnabled != nil {\n\t\tif err := s.LoggingEnabled.Validate(); err != nil {\n\t\t\tinvalidParams.AddNested(\"LoggingEnabled\", err.(request.ErrInvalidParams))\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetLoggingEnabled sets the LoggingEnabled field's value.\nfunc (s *BucketLoggingStatus) SetLoggingEnabled(v *LoggingEnabled) *BucketLoggingStatus {\n\ts.LoggingEnabled = v\n\treturn s\n}\n\n// Describes the cross-origin access configuration for objects in an Amazon\n// S3 bucket. For more information, see Enabling Cross-Origin Resource Sharing\n// (https://docs.aws.amazon.com/AmazonS3/latest/dev/cors.html) in the Amazon\n// Simple Storage Service Developer Guide.\ntype CORSConfiguration struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// A set of allowed origins and methods.\n\t//\n\t// CORSRules is a required field\n\tCORSRules []*CORSRule `locationName:\"CORSRule\" type:\"list\" flattened:\"true\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s CORSConfiguration) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s CORSConfiguration) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *CORSConfiguration) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"CORSConfiguration\"}\n\tif s.CORSRules == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"CORSRules\"))\n\t}\n\tif s.CORSRules != nil {\n\t\tfor i, v := range s.CORSRules {\n\t\t\tif v == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif err := v.Validate(); err != nil {\n\t\t\t\tinvalidParams.AddNested(fmt.Sprintf(\"%s[%v]\", \"CORSRules\", i), err.(request.ErrInvalidParams))\n\t\t\t}\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetCORSRules sets the CORSRules field's value.\nfunc (s *CORSConfiguration) SetCORSRules(v []*CORSRule) *CORSConfiguration {\n\ts.CORSRules = v\n\treturn s\n}\n\n// Specifies a cross-origin access rule for an Amazon S3 bucket.\ntype CORSRule struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Headers that are specified in the Access-Control-Request-Headers header.\n\t// These headers are allowed in a preflight OPTIONS request. In response to\n\t// any preflight OPTIONS request, Amazon S3 returns any requested headers that\n\t// are allowed.\n\tAllowedHeaders []*string `locationName:\"AllowedHeader\" type:\"list\" flattened:\"true\"`\n\n\t// An HTTP method that you allow the origin to execute. Valid values are GET,\n\t// PUT, HEAD, POST, and DELETE.\n\t//\n\t// AllowedMethods is a required field\n\tAllowedMethods []*string `locationName:\"AllowedMethod\" type:\"list\" flattened:\"true\" required:\"true\"`\n\n\t// One or more origins you want customers to be able to access the bucket from.\n\t//\n\t// AllowedOrigins is a required field\n\tAllowedOrigins []*string `locationName:\"AllowedOrigin\" type:\"list\" flattened:\"true\" required:\"true\"`\n\n\t// One or more headers in the response that you want customers to be able to\n\t// access from their applications (for example, from a JavaScript XMLHttpRequest\n\t// object).\n\tExposeHeaders []*string `locationName:\"ExposeHeader\" type:\"list\" flattened:\"true\"`\n\n\t// The time in seconds that your browser is to cache the preflight response\n\t// for the specified resource.\n\tMaxAgeSeconds *int64 `type:\"integer\"`\n}\n\n// String returns the string representation\nfunc (s CORSRule) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s CORSRule) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *CORSRule) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"CORSRule\"}\n\tif s.AllowedMethods == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"AllowedMethods\"))\n\t}\n\tif s.AllowedOrigins == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"AllowedOrigins\"))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetAllowedHeaders sets the AllowedHeaders field's value.\nfunc (s *CORSRule) SetAllowedHeaders(v []*string) *CORSRule {\n\ts.AllowedHeaders = v\n\treturn s\n}\n\n// SetAllowedMethods sets the AllowedMethods field's value.\nfunc (s *CORSRule) SetAllowedMethods(v []*string) *CORSRule {\n\ts.AllowedMethods = v\n\treturn s\n}\n\n// SetAllowedOrigins sets the AllowedOrigins field's value.\nfunc (s *CORSRule) SetAllowedOrigins(v []*string) *CORSRule {\n\ts.AllowedOrigins = v\n\treturn s\n}\n\n// SetExposeHeaders sets the ExposeHeaders field's value.\nfunc (s *CORSRule) SetExposeHeaders(v []*string) *CORSRule {\n\ts.ExposeHeaders = v\n\treturn s\n}\n\n// SetMaxAgeSeconds sets the MaxAgeSeconds field's value.\nfunc (s *CORSRule) SetMaxAgeSeconds(v int64) *CORSRule {\n\ts.MaxAgeSeconds = &v\n\treturn s\n}\n\n// Describes how a CSV-formatted input object is formatted.\ntype CSVInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Specifies that CSV field values may contain quoted record delimiters and\n\t// such records should be allowed. Default value is FALSE. Setting this value\n\t// to TRUE may lower performance.\n\tAllowQuotedRecordDelimiter *bool `type:\"boolean\"`\n\n\t// The single character used to indicate a row should be ignored when present\n\t// at the start of a row.\n\tComments *string `type:\"string\"`\n\n\t// The value used to separate individual fields in a record.\n\tFieldDelimiter *string `type:\"string\"`\n\n\t// Describes the first line of input. Valid values: None, Ignore, Use.\n\tFileHeaderInfo *string `type:\"string\" enum:\"FileHeaderInfo\"`\n\n\t// Value used for escaping where the field delimiter is part of the value.\n\tQuoteCharacter *string `type:\"string\"`\n\n\t// The single character used for escaping the quote character inside an already\n\t// escaped value.\n\tQuoteEscapeCharacter *string `type:\"string\"`\n\n\t// The value used to separate individual records.\n\tRecordDelimiter *string `type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s CSVInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s CSVInput) GoString() string {\n\treturn s.String()\n}\n\n// SetAllowQuotedRecordDelimiter sets the AllowQuotedRecordDelimiter field's value.\nfunc (s *CSVInput) SetAllowQuotedRecordDelimiter(v bool) *CSVInput {\n\ts.AllowQuotedRecordDelimiter = &v\n\treturn s\n}\n\n// SetComments sets the Comments field's value.\nfunc (s *CSVInput) SetComments(v string) *CSVInput {\n\ts.Comments = &v\n\treturn s\n}\n\n// SetFieldDelimiter sets the FieldDelimiter field's value.\nfunc (s *CSVInput) SetFieldDelimiter(v string) *CSVInput {\n\ts.FieldDelimiter = &v\n\treturn s\n}\n\n// SetFileHeaderInfo sets the FileHeaderInfo field's value.\nfunc (s *CSVInput) SetFileHeaderInfo(v string) *CSVInput {\n\ts.FileHeaderInfo = &v\n\treturn s\n}\n\n// SetQuoteCharacter sets the QuoteCharacter field's value.\nfunc (s *CSVInput) SetQuoteCharacter(v string) *CSVInput {\n\ts.QuoteCharacter = &v\n\treturn s\n}\n\n// SetQuoteEscapeCharacter sets the QuoteEscapeCharacter field's value.\nfunc (s *CSVInput) SetQuoteEscapeCharacter(v string) *CSVInput {\n\ts.QuoteEscapeCharacter = &v\n\treturn s\n}\n\n// SetRecordDelimiter sets the RecordDelimiter field's value.\nfunc (s *CSVInput) SetRecordDelimiter(v string) *CSVInput {\n\ts.RecordDelimiter = &v\n\treturn s\n}\n\n// Describes how CSV-formatted results are formatted.\ntype CSVOutput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The value used to separate individual fields in a record.\n\tFieldDelimiter *string `type:\"string\"`\n\n\t// The value used for escaping where the field delimiter is part of the value.\n\tQuoteCharacter *string `type:\"string\"`\n\n\t// Th single character used for escaping the quote character inside an already\n\t// escaped value.\n\tQuoteEscapeCharacter *string `type:\"string\"`\n\n\t// Indicates whether or not all output fields should be quoted.\n\tQuoteFields *string `type:\"string\" enum:\"QuoteFields\"`\n\n\t// The value used to separate individual records.\n\tRecordDelimiter *string `type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s CSVOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s CSVOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetFieldDelimiter sets the FieldDelimiter field's value.\nfunc (s *CSVOutput) SetFieldDelimiter(v string) *CSVOutput {\n\ts.FieldDelimiter = &v\n\treturn s\n}\n\n// SetQuoteCharacter sets the QuoteCharacter field's value.\nfunc (s *CSVOutput) SetQuoteCharacter(v string) *CSVOutput {\n\ts.QuoteCharacter = &v\n\treturn s\n}\n\n// SetQuoteEscapeCharacter sets the QuoteEscapeCharacter field's value.\nfunc (s *CSVOutput) SetQuoteEscapeCharacter(v string) *CSVOutput {\n\ts.QuoteEscapeCharacter = &v\n\treturn s\n}\n\n// SetQuoteFields sets the QuoteFields field's value.\nfunc (s *CSVOutput) SetQuoteFields(v string) *CSVOutput {\n\ts.QuoteFields = &v\n\treturn s\n}\n\n// SetRecordDelimiter sets the RecordDelimiter field's value.\nfunc (s *CSVOutput) SetRecordDelimiter(v string) *CSVOutput {\n\ts.RecordDelimiter = &v\n\treturn s\n}\n\ntype CloudFunctionConfiguration struct {\n\t_ struct{} `type:\"structure\"`\n\n\tCloudFunction *string `type:\"string\"`\n\n\t// The bucket event for which to send notifications.\n\t//\n\t// Deprecated: Event has been deprecated\n\tEvent *string `deprecated:\"true\" type:\"string\" enum:\"Event\"`\n\n\tEvents []*string `locationName:\"Event\" type:\"list\" flattened:\"true\"`\n\n\t// An optional unique identifier for configurations in a notification configuration.\n\t// If you don't provide one, Amazon S3 will assign an ID.\n\tId *string `type:\"string\"`\n\n\tInvocationRole *string `type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s CloudFunctionConfiguration) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s CloudFunctionConfiguration) GoString() string {\n\treturn s.String()\n}\n\n// SetCloudFunction sets the CloudFunction field's value.\nfunc (s *CloudFunctionConfiguration) SetCloudFunction(v string) *CloudFunctionConfiguration {\n\ts.CloudFunction = &v\n\treturn s\n}\n\n// SetEvent sets the Event field's value.\nfunc (s *CloudFunctionConfiguration) SetEvent(v string) *CloudFunctionConfiguration {\n\ts.Event = &v\n\treturn s\n}\n\n// SetEvents sets the Events field's value.\nfunc (s *CloudFunctionConfiguration) SetEvents(v []*string) *CloudFunctionConfiguration {\n\ts.Events = v\n\treturn s\n}\n\n// SetId sets the Id field's value.\nfunc (s *CloudFunctionConfiguration) SetId(v string) *CloudFunctionConfiguration {\n\ts.Id = &v\n\treturn s\n}\n\n// SetInvocationRole sets the InvocationRole field's value.\nfunc (s *CloudFunctionConfiguration) SetInvocationRole(v string) *CloudFunctionConfiguration {\n\ts.InvocationRole = &v\n\treturn s\n}\n\ntype CommonPrefix struct {\n\t_ struct{} `type:\"structure\"`\n\n\tPrefix *string `type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s CommonPrefix) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s CommonPrefix) GoString() string {\n\treturn s.String()\n}\n\n// SetPrefix sets the Prefix field's value.\nfunc (s *CommonPrefix) SetPrefix(v string) *CommonPrefix {\n\ts.Prefix = &v\n\treturn s\n}\n\ntype CompleteMultipartUploadInput struct {\n\t_ struct{} `type:\"structure\" payload:\"MultipartUpload\"`\n\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n\n\t// Key is a required field\n\tKey *string `location:\"uri\" locationName:\"Key\" min:\"1\" type:\"string\" required:\"true\"`\n\n\tMultipartUpload *CompletedMultipartUpload `locationName:\"CompleteMultipartUpload\" type:\"structure\" xmlURI:\"http://s3.amazonaws.com/doc/2006-03-01/\"`\n\n\t// Confirms that the requester knows that she or he will be charged for the\n\t// request. Bucket owners need not specify this parameter in their requests.\n\t// Documentation on downloading objects from requester pays buckets can be found\n\t// at http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html\n\tRequestPayer *string `location:\"header\" locationName:\"x-amz-request-payer\" type:\"string\" enum:\"RequestPayer\"`\n\n\t// UploadId is a required field\n\tUploadId *string `location:\"querystring\" locationName:\"uploadId\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s CompleteMultipartUploadInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s CompleteMultipartUploadInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *CompleteMultipartUploadInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"CompleteMultipartUploadInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\tif s.Key == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Key\"))\n\t}\n\tif s.Key != nil && len(*s.Key) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Key\", 1))\n\t}\n\tif s.UploadId == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"UploadId\"))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *CompleteMultipartUploadInput) SetBucket(v string) *CompleteMultipartUploadInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *CompleteMultipartUploadInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetKey sets the Key field's value.\nfunc (s *CompleteMultipartUploadInput) SetKey(v string) *CompleteMultipartUploadInput {\n\ts.Key = &v\n\treturn s\n}\n\n// SetMultipartUpload sets the MultipartUpload field's value.\nfunc (s *CompleteMultipartUploadInput) SetMultipartUpload(v *CompletedMultipartUpload) *CompleteMultipartUploadInput {\n\ts.MultipartUpload = v\n\treturn s\n}\n\n// SetRequestPayer sets the RequestPayer field's value.\nfunc (s *CompleteMultipartUploadInput) SetRequestPayer(v string) *CompleteMultipartUploadInput {\n\ts.RequestPayer = &v\n\treturn s\n}\n\n// SetUploadId sets the UploadId field's value.\nfunc (s *CompleteMultipartUploadInput) SetUploadId(v string) *CompleteMultipartUploadInput {\n\ts.UploadId = &v\n\treturn s\n}\n\ntype CompleteMultipartUploadOutput struct {\n\t_ struct{} `type:\"structure\"`\n\n\tBucket *string `type:\"string\"`\n\n\t// Entity tag of the object.\n\tETag *string `type:\"string\"`\n\n\t// If the object expiration is configured, this will contain the expiration\n\t// date (expiry-date) and rule ID (rule-id). The value of rule-id is URL encoded.\n\tExpiration *string `location:\"header\" locationName:\"x-amz-expiration\" type:\"string\"`\n\n\tKey *string `min:\"1\" type:\"string\"`\n\n\tLocation *string `type:\"string\"`\n\n\t// If present, indicates that the requester was successfully charged for the\n\t// request.\n\tRequestCharged *string `location:\"header\" locationName:\"x-amz-request-charged\" type:\"string\" enum:\"RequestCharged\"`\n\n\t// If present, specifies the ID of the AWS Key Management Service (KMS) master\n\t// encryption key that was used for the object.\n\tSSEKMSKeyId *string `location:\"header\" locationName:\"x-amz-server-side-encryption-aws-kms-key-id\" type:\"string\" sensitive:\"true\"`\n\n\t// The Server-side encryption algorithm used when storing this object in S3\n\t// (e.g., AES256, aws:kms).\n\tServerSideEncryption *string `location:\"header\" locationName:\"x-amz-server-side-encryption\" type:\"string\" enum:\"ServerSideEncryption\"`\n\n\t// Version of the object.\n\tVersionId *string `location:\"header\" locationName:\"x-amz-version-id\" type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s CompleteMultipartUploadOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s CompleteMultipartUploadOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *CompleteMultipartUploadOutput) SetBucket(v string) *CompleteMultipartUploadOutput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *CompleteMultipartUploadOutput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetETag sets the ETag field's value.\nfunc (s *CompleteMultipartUploadOutput) SetETag(v string) *CompleteMultipartUploadOutput {\n\ts.ETag = &v\n\treturn s\n}\n\n// SetExpiration sets the Expiration field's value.\nfunc (s *CompleteMultipartUploadOutput) SetExpiration(v string) *CompleteMultipartUploadOutput {\n\ts.Expiration = &v\n\treturn s\n}\n\n// SetKey sets the Key field's value.\nfunc (s *CompleteMultipartUploadOutput) SetKey(v string) *CompleteMultipartUploadOutput {\n\ts.Key = &v\n\treturn s\n}\n\n// SetLocation sets the Location field's value.\nfunc (s *CompleteMultipartUploadOutput) SetLocation(v string) *CompleteMultipartUploadOutput {\n\ts.Location = &v\n\treturn s\n}\n\n// SetRequestCharged sets the RequestCharged field's value.\nfunc (s *CompleteMultipartUploadOutput) SetRequestCharged(v string) *CompleteMultipartUploadOutput {\n\ts.RequestCharged = &v\n\treturn s\n}\n\n// SetSSEKMSKeyId sets the SSEKMSKeyId field's value.\nfunc (s *CompleteMultipartUploadOutput) SetSSEKMSKeyId(v string) *CompleteMultipartUploadOutput {\n\ts.SSEKMSKeyId = &v\n\treturn s\n}\n\n// SetServerSideEncryption sets the ServerSideEncryption field's value.\nfunc (s *CompleteMultipartUploadOutput) SetServerSideEncryption(v string) *CompleteMultipartUploadOutput {\n\ts.ServerSideEncryption = &v\n\treturn s\n}\n\n// SetVersionId sets the VersionId field's value.\nfunc (s *CompleteMultipartUploadOutput) SetVersionId(v string) *CompleteMultipartUploadOutput {\n\ts.VersionId = &v\n\treturn s\n}\n\ntype CompletedMultipartUpload struct {\n\t_ struct{} `type:\"structure\"`\n\n\tParts []*CompletedPart `locationName:\"Part\" type:\"list\" flattened:\"true\"`\n}\n\n// String returns the string representation\nfunc (s CompletedMultipartUpload) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s CompletedMultipartUpload) GoString() string {\n\treturn s.String()\n}\n\n// SetParts sets the Parts field's value.\nfunc (s *CompletedMultipartUpload) SetParts(v []*CompletedPart) *CompletedMultipartUpload {\n\ts.Parts = v\n\treturn s\n}\n\ntype CompletedPart struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Entity tag returned when the part was uploaded.\n\tETag *string `type:\"string\"`\n\n\t// Part number that identifies the part. This is a positive integer between\n\t// 1 and 10,000.\n\tPartNumber *int64 `type:\"integer\"`\n}\n\n// String returns the string representation\nfunc (s CompletedPart) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s CompletedPart) GoString() string {\n\treturn s.String()\n}\n\n// SetETag sets the ETag field's value.\nfunc (s *CompletedPart) SetETag(v string) *CompletedPart {\n\ts.ETag = &v\n\treturn s\n}\n\n// SetPartNumber sets the PartNumber field's value.\nfunc (s *CompletedPart) SetPartNumber(v int64) *CompletedPart {\n\ts.PartNumber = &v\n\treturn s\n}\n\n// Specifies a condition that must be met for a redirect to apply.\ntype Condition struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The HTTP error code when the redirect is applied. In the event of an error,\n\t// if the error code equals this value, then the specified redirect is applied.\n\t// Required when parent element Condition is specified and sibling KeyPrefixEquals\n\t// is not specified. If both are specified, then both must be true for the redirect\n\t// to be applied.\n\tHttpErrorCodeReturnedEquals *string `type:\"string\"`\n\n\t// The object key name prefix when the redirect is applied. For example, to\n\t// redirect requests for ExamplePage.html, the key prefix will be ExamplePage.html.\n\t// To redirect request for all pages with the prefix docs/, the key prefix will\n\t// be /docs, which identifies all objects in the docs/ folder. Required when\n\t// the parent element Condition is specified and sibling HttpErrorCodeReturnedEquals\n\t// is not specified. If both conditions are specified, both must be true for\n\t// the redirect to be applied.\n\tKeyPrefixEquals *string `type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s Condition) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s Condition) GoString() string {\n\treturn s.String()\n}\n\n// SetHttpErrorCodeReturnedEquals sets the HttpErrorCodeReturnedEquals field's value.\nfunc (s *Condition) SetHttpErrorCodeReturnedEquals(v string) *Condition {\n\ts.HttpErrorCodeReturnedEquals = &v\n\treturn s\n}\n\n// SetKeyPrefixEquals sets the KeyPrefixEquals field's value.\nfunc (s *Condition) SetKeyPrefixEquals(v string) *Condition {\n\ts.KeyPrefixEquals = &v\n\treturn s\n}\n\ntype ContinuationEvent struct {\n\t_ struct{} `locationName:\"ContinuationEvent\" type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s ContinuationEvent) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s ContinuationEvent) GoString() string {\n\treturn s.String()\n}\n\n// The ContinuationEvent is and event in the SelectObjectContentEventStream group of events.\nfunc (s *ContinuationEvent) eventSelectObjectContentEventStream() {}\n\n// UnmarshalEvent unmarshals the EventStream Message into the ContinuationEvent value.\n// This method is only used internally within the SDK's EventStream handling.\nfunc (s *ContinuationEvent) UnmarshalEvent(\n\tpayloadUnmarshaler protocol.PayloadUnmarshaler,\n\tmsg eventstream.Message,\n) error {\n\treturn nil\n}\n\ntype CopyObjectInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The canned ACL to apply to the object.\n\tACL *string `location:\"header\" locationName:\"x-amz-acl\" type:\"string\" enum:\"ObjectCannedACL\"`\n\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n\n\t// Specifies caching behavior along the request/reply chain.\n\tCacheControl *string `location:\"header\" locationName:\"Cache-Control\" type:\"string\"`\n\n\t// Specifies presentational information for the object.\n\tContentDisposition *string `location:\"header\" locationName:\"Content-Disposition\" type:\"string\"`\n\n\t// Specifies what content encodings have been applied to the object and thus\n\t// what decoding mechanisms must be applied to obtain the media-type referenced\n\t// by the Content-Type header field.\n\tContentEncoding *string `location:\"header\" locationName:\"Content-Encoding\" type:\"string\"`\n\n\t// The language the content is in.\n\tContentLanguage *string `location:\"header\" locationName:\"Content-Language\" type:\"string\"`\n\n\t// A standard MIME type describing the format of the object data.\n\tContentType *string `location:\"header\" locationName:\"Content-Type\" type:\"string\"`\n\n\t// The name of the source bucket and key name of the source object, separated\n\t// by a slash (/). Must be URL-encoded.\n\t//\n\t// CopySource is a required field\n\tCopySource *string `location:\"header\" locationName:\"x-amz-copy-source\" type:\"string\" required:\"true\"`\n\n\t// Copies the object if its entity tag (ETag) matches the specified tag.\n\tCopySourceIfMatch *string `location:\"header\" locationName:\"x-amz-copy-source-if-match\" type:\"string\"`\n\n\t// Copies the object if it has been modified since the specified time.\n\tCopySourceIfModifiedSince *time.Time `location:\"header\" locationName:\"x-amz-copy-source-if-modified-since\" type:\"timestamp\"`\n\n\t// Copies the object if its entity tag (ETag) is different than the specified\n\t// ETag.\n\tCopySourceIfNoneMatch *string `location:\"header\" locationName:\"x-amz-copy-source-if-none-match\" type:\"string\"`\n\n\t// Copies the object if it hasn't been modified since the specified time.\n\tCopySourceIfUnmodifiedSince *time.Time `location:\"header\" locationName:\"x-amz-copy-source-if-unmodified-since\" type:\"timestamp\"`\n\n\t// Specifies the algorithm to use when decrypting the source object (e.g., AES256).\n\tCopySourceSSECustomerAlgorithm *string `location:\"header\" locationName:\"x-amz-copy-source-server-side-encryption-customer-algorithm\" type:\"string\"`\n\n\t// Specifies the customer-provided encryption key for Amazon S3 to use to decrypt\n\t// the source object. The encryption key provided in this header must be one\n\t// that was used when the source object was created.\n\tCopySourceSSECustomerKey *string `marshal-as:\"blob\" location:\"header\" locationName:\"x-amz-copy-source-server-side-encryption-customer-key\" type:\"string\" sensitive:\"true\"`\n\n\t// Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.\n\t// Amazon S3 uses this header for a message integrity check to ensure the encryption\n\t// key was transmitted without error.\n\tCopySourceSSECustomerKeyMD5 *string `location:\"header\" locationName:\"x-amz-copy-source-server-side-encryption-customer-key-MD5\" type:\"string\"`\n\n\t// The date and time at which the object is no longer cacheable.\n\tExpires *time.Time `location:\"header\" locationName:\"Expires\" type:\"timestamp\"`\n\n\t// Gives the grantee READ, READ_ACP, and WRITE_ACP permissions on the object.\n\tGrantFullControl *string `location:\"header\" locationName:\"x-amz-grant-full-control\" type:\"string\"`\n\n\t// Allows grantee to read the object data and its metadata.\n\tGrantRead *string `location:\"header\" locationName:\"x-amz-grant-read\" type:\"string\"`\n\n\t// Allows grantee to read the object ACL.\n\tGrantReadACP *string `location:\"header\" locationName:\"x-amz-grant-read-acp\" type:\"string\"`\n\n\t// Allows grantee to write the ACL for the applicable object.\n\tGrantWriteACP *string `location:\"header\" locationName:\"x-amz-grant-write-acp\" type:\"string\"`\n\n\t// Key is a required field\n\tKey *string `location:\"uri\" locationName:\"Key\" min:\"1\" type:\"string\" required:\"true\"`\n\n\t// A map of metadata to store with the object in S3.\n\tMetadata map[string]*string `location:\"headers\" locationName:\"x-amz-meta-\" type:\"map\"`\n\n\t// Specifies whether the metadata is copied from the source object or replaced\n\t// with metadata provided in the request.\n\tMetadataDirective *string `location:\"header\" locationName:\"x-amz-metadata-directive\" type:\"string\" enum:\"MetadataDirective\"`\n\n\t// Specifies whether you want to apply a Legal Hold to the copied object.\n\tObjectLockLegalHoldStatus *string `location:\"header\" locationName:\"x-amz-object-lock-legal-hold\" type:\"string\" enum:\"ObjectLockLegalHoldStatus\"`\n\n\t// The object lock mode that you want to apply to the copied object.\n\tObjectLockMode *string `location:\"header\" locationName:\"x-amz-object-lock-mode\" type:\"string\" enum:\"ObjectLockMode\"`\n\n\t// The date and time when you want the copied object's object lock to expire.\n\tObjectLockRetainUntilDate *time.Time `location:\"header\" locationName:\"x-amz-object-lock-retain-until-date\" type:\"timestamp\" timestampFormat:\"iso8601\"`\n\n\t// Confirms that the requester knows that she or he will be charged for the\n\t// request. Bucket owners need not specify this parameter in their requests.\n\t// Documentation on downloading objects from requester pays buckets can be found\n\t// at http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html\n\tRequestPayer *string `location:\"header\" locationName:\"x-amz-request-payer\" type:\"string\" enum:\"RequestPayer\"`\n\n\t// Specifies the algorithm to use to when encrypting the object (e.g., AES256).\n\tSSECustomerAlgorithm *string `location:\"header\" locationName:\"x-amz-server-side-encryption-customer-algorithm\" type:\"string\"`\n\n\t// Specifies the customer-provided encryption key for Amazon S3 to use in encrypting\n\t// data. This value is used to store the object and then it is discarded; Amazon\n\t// does not store the encryption key. The key must be appropriate for use with\n\t// the algorithm specified in the x-amz-server-side​-encryption​-customer-algorithm\n\t// header.\n\tSSECustomerKey *string `marshal-as:\"blob\" location:\"header\" locationName:\"x-amz-server-side-encryption-customer-key\" type:\"string\" sensitive:\"true\"`\n\n\t// Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.\n\t// Amazon S3 uses this header for a message integrity check to ensure the encryption\n\t// key was transmitted without error.\n\tSSECustomerKeyMD5 *string `location:\"header\" locationName:\"x-amz-server-side-encryption-customer-key-MD5\" type:\"string\"`\n\n\t// Specifies the AWS KMS key ID to use for object encryption. All GET and PUT\n\t// requests for an object protected by AWS KMS will fail if not made via SSL\n\t// or using SigV4. Documentation on configuring any of the officially supported\n\t// AWS SDKs and CLI can be found at http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingAWSSDK.html#specify-signature-version\n\tSSEKMSKeyId *string `location:\"header\" locationName:\"x-amz-server-side-encryption-aws-kms-key-id\" type:\"string\" sensitive:\"true\"`\n\n\t// The Server-side encryption algorithm used when storing this object in S3\n\t// (e.g., AES256, aws:kms).\n\tServerSideEncryption *string `location:\"header\" locationName:\"x-amz-server-side-encryption\" type:\"string\" enum:\"ServerSideEncryption\"`\n\n\t// The type of storage to use for the object. Defaults to 'STANDARD'.\n\tStorageClass *string `location:\"header\" locationName:\"x-amz-storage-class\" type:\"string\" enum:\"StorageClass\"`\n\n\t// The tag-set for the object destination object this value must be used in\n\t// conjunction with the TaggingDirective. The tag-set must be encoded as URL\n\t// Query parameters\n\tTagging *string `location:\"header\" locationName:\"x-amz-tagging\" type:\"string\"`\n\n\t// Specifies whether the object tag-set are copied from the source object or\n\t// replaced with tag-set provided in the request.\n\tTaggingDirective *string `location:\"header\" locationName:\"x-amz-tagging-directive\" type:\"string\" enum:\"TaggingDirective\"`\n\n\t// If the bucket is configured as a website, redirects requests for this object\n\t// to another object in the same bucket or to an external URL. Amazon S3 stores\n\t// the value of this header in the object metadata.\n\tWebsiteRedirectLocation *string `location:\"header\" locationName:\"x-amz-website-redirect-location\" type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s CopyObjectInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s CopyObjectInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *CopyObjectInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"CopyObjectInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\tif s.CopySource == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"CopySource\"))\n\t}\n\tif s.Key == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Key\"))\n\t}\n\tif s.Key != nil && len(*s.Key) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Key\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetACL sets the ACL field's value.\nfunc (s *CopyObjectInput) SetACL(v string) *CopyObjectInput {\n\ts.ACL = &v\n\treturn s\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *CopyObjectInput) SetBucket(v string) *CopyObjectInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *CopyObjectInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetCacheControl sets the CacheControl field's value.\nfunc (s *CopyObjectInput) SetCacheControl(v string) *CopyObjectInput {\n\ts.CacheControl = &v\n\treturn s\n}\n\n// SetContentDisposition sets the ContentDisposition field's value.\nfunc (s *CopyObjectInput) SetContentDisposition(v string) *CopyObjectInput {\n\ts.ContentDisposition = &v\n\treturn s\n}\n\n// SetContentEncoding sets the ContentEncoding field's value.\nfunc (s *CopyObjectInput) SetContentEncoding(v string) *CopyObjectInput {\n\ts.ContentEncoding = &v\n\treturn s\n}\n\n// SetContentLanguage sets the ContentLanguage field's value.\nfunc (s *CopyObjectInput) SetContentLanguage(v string) *CopyObjectInput {\n\ts.ContentLanguage = &v\n\treturn s\n}\n\n// SetContentType sets the ContentType field's value.\nfunc (s *CopyObjectInput) SetContentType(v string) *CopyObjectInput {\n\ts.ContentType = &v\n\treturn s\n}\n\n// SetCopySource sets the CopySource field's value.\nfunc (s *CopyObjectInput) SetCopySource(v string) *CopyObjectInput {\n\ts.CopySource = &v\n\treturn s\n}\n\n// SetCopySourceIfMatch sets the CopySourceIfMatch field's value.\nfunc (s *CopyObjectInput) SetCopySourceIfMatch(v string) *CopyObjectInput {\n\ts.CopySourceIfMatch = &v\n\treturn s\n}\n\n// SetCopySourceIfModifiedSince sets the CopySourceIfModifiedSince field's value.\nfunc (s *CopyObjectInput) SetCopySourceIfModifiedSince(v time.Time) *CopyObjectInput {\n\ts.CopySourceIfModifiedSince = &v\n\treturn s\n}\n\n// SetCopySourceIfNoneMatch sets the CopySourceIfNoneMatch field's value.\nfunc (s *CopyObjectInput) SetCopySourceIfNoneMatch(v string) *CopyObjectInput {\n\ts.CopySourceIfNoneMatch = &v\n\treturn s\n}\n\n// SetCopySourceIfUnmodifiedSince sets the CopySourceIfUnmodifiedSince field's value.\nfunc (s *CopyObjectInput) SetCopySourceIfUnmodifiedSince(v time.Time) *CopyObjectInput {\n\ts.CopySourceIfUnmodifiedSince = &v\n\treturn s\n}\n\n// SetCopySourceSSECustomerAlgorithm sets the CopySourceSSECustomerAlgorithm field's value.\nfunc (s *CopyObjectInput) SetCopySourceSSECustomerAlgorithm(v string) *CopyObjectInput {\n\ts.CopySourceSSECustomerAlgorithm = &v\n\treturn s\n}\n\n// SetCopySourceSSECustomerKey sets the CopySourceSSECustomerKey field's value.\nfunc (s *CopyObjectInput) SetCopySourceSSECustomerKey(v string) *CopyObjectInput {\n\ts.CopySourceSSECustomerKey = &v\n\treturn s\n}\n\nfunc (s *CopyObjectInput) getCopySourceSSECustomerKey() (v string) {\n\tif s.CopySourceSSECustomerKey == nil {\n\t\treturn v\n\t}\n\treturn *s.CopySourceSSECustomerKey\n}\n\n// SetCopySourceSSECustomerKeyMD5 sets the CopySourceSSECustomerKeyMD5 field's value.\nfunc (s *CopyObjectInput) SetCopySourceSSECustomerKeyMD5(v string) *CopyObjectInput {\n\ts.CopySourceSSECustomerKeyMD5 = &v\n\treturn s\n}\n\n// SetExpires sets the Expires field's value.\nfunc (s *CopyObjectInput) SetExpires(v time.Time) *CopyObjectInput {\n\ts.Expires = &v\n\treturn s\n}\n\n// SetGrantFullControl sets the GrantFullControl field's value.\nfunc (s *CopyObjectInput) SetGrantFullControl(v string) *CopyObjectInput {\n\ts.GrantFullControl = &v\n\treturn s\n}\n\n// SetGrantRead sets the GrantRead field's value.\nfunc (s *CopyObjectInput) SetGrantRead(v string) *CopyObjectInput {\n\ts.GrantRead = &v\n\treturn s\n}\n\n// SetGrantReadACP sets the GrantReadACP field's value.\nfunc (s *CopyObjectInput) SetGrantReadACP(v string) *CopyObjectInput {\n\ts.GrantReadACP = &v\n\treturn s\n}\n\n// SetGrantWriteACP sets the GrantWriteACP field's value.\nfunc (s *CopyObjectInput) SetGrantWriteACP(v string) *CopyObjectInput {\n\ts.GrantWriteACP = &v\n\treturn s\n}\n\n// SetKey sets the Key field's value.\nfunc (s *CopyObjectInput) SetKey(v string) *CopyObjectInput {\n\ts.Key = &v\n\treturn s\n}\n\n// SetMetadata sets the Metadata field's value.\nfunc (s *CopyObjectInput) SetMetadata(v map[string]*string) *CopyObjectInput {\n\ts.Metadata = v\n\treturn s\n}\n\n// SetMetadataDirective sets the MetadataDirective field's value.\nfunc (s *CopyObjectInput) SetMetadataDirective(v string) *CopyObjectInput {\n\ts.MetadataDirective = &v\n\treturn s\n}\n\n// SetObjectLockLegalHoldStatus sets the ObjectLockLegalHoldStatus field's value.\nfunc (s *CopyObjectInput) SetObjectLockLegalHoldStatus(v string) *CopyObjectInput {\n\ts.ObjectLockLegalHoldStatus = &v\n\treturn s\n}\n\n// SetObjectLockMode sets the ObjectLockMode field's value.\nfunc (s *CopyObjectInput) SetObjectLockMode(v string) *CopyObjectInput {\n\ts.ObjectLockMode = &v\n\treturn s\n}\n\n// SetObjectLockRetainUntilDate sets the ObjectLockRetainUntilDate field's value.\nfunc (s *CopyObjectInput) SetObjectLockRetainUntilDate(v time.Time) *CopyObjectInput {\n\ts.ObjectLockRetainUntilDate = &v\n\treturn s\n}\n\n// SetRequestPayer sets the RequestPayer field's value.\nfunc (s *CopyObjectInput) SetRequestPayer(v string) *CopyObjectInput {\n\ts.RequestPayer = &v\n\treturn s\n}\n\n// SetSSECustomerAlgorithm sets the SSECustomerAlgorithm field's value.\nfunc (s *CopyObjectInput) SetSSECustomerAlgorithm(v string) *CopyObjectInput {\n\ts.SSECustomerAlgorithm = &v\n\treturn s\n}\n\n// SetSSECustomerKey sets the SSECustomerKey field's value.\nfunc (s *CopyObjectInput) SetSSECustomerKey(v string) *CopyObjectInput {\n\ts.SSECustomerKey = &v\n\treturn s\n}\n\nfunc (s *CopyObjectInput) getSSECustomerKey() (v string) {\n\tif s.SSECustomerKey == nil {\n\t\treturn v\n\t}\n\treturn *s.SSECustomerKey\n}\n\n// SetSSECustomerKeyMD5 sets the SSECustomerKeyMD5 field's value.\nfunc (s *CopyObjectInput) SetSSECustomerKeyMD5(v string) *CopyObjectInput {\n\ts.SSECustomerKeyMD5 = &v\n\treturn s\n}\n\n// SetSSEKMSKeyId sets the SSEKMSKeyId field's value.\nfunc (s *CopyObjectInput) SetSSEKMSKeyId(v string) *CopyObjectInput {\n\ts.SSEKMSKeyId = &v\n\treturn s\n}\n\n// SetServerSideEncryption sets the ServerSideEncryption field's value.\nfunc (s *CopyObjectInput) SetServerSideEncryption(v string) *CopyObjectInput {\n\ts.ServerSideEncryption = &v\n\treturn s\n}\n\n// SetStorageClass sets the StorageClass field's value.\nfunc (s *CopyObjectInput) SetStorageClass(v string) *CopyObjectInput {\n\ts.StorageClass = &v\n\treturn s\n}\n\n// SetTagging sets the Tagging field's value.\nfunc (s *CopyObjectInput) SetTagging(v string) *CopyObjectInput {\n\ts.Tagging = &v\n\treturn s\n}\n\n// SetTaggingDirective sets the TaggingDirective field's value.\nfunc (s *CopyObjectInput) SetTaggingDirective(v string) *CopyObjectInput {\n\ts.TaggingDirective = &v\n\treturn s\n}\n\n// SetWebsiteRedirectLocation sets the WebsiteRedirectLocation field's value.\nfunc (s *CopyObjectInput) SetWebsiteRedirectLocation(v string) *CopyObjectInput {\n\ts.WebsiteRedirectLocation = &v\n\treturn s\n}\n\ntype CopyObjectOutput struct {\n\t_ struct{} `type:\"structure\" payload:\"CopyObjectResult\"`\n\n\tCopyObjectResult *CopyObjectResult `type:\"structure\"`\n\n\tCopySourceVersionId *string `location:\"header\" locationName:\"x-amz-copy-source-version-id\" type:\"string\"`\n\n\t// If the object expiration is configured, the response includes this header.\n\tExpiration *string `location:\"header\" locationName:\"x-amz-expiration\" type:\"string\"`\n\n\t// If present, indicates that the requester was successfully charged for the\n\t// request.\n\tRequestCharged *string `location:\"header\" locationName:\"x-amz-request-charged\" type:\"string\" enum:\"RequestCharged\"`\n\n\t// If server-side encryption with a customer-provided encryption key was requested,\n\t// the response will include this header confirming the encryption algorithm\n\t// used.\n\tSSECustomerAlgorithm *string `location:\"header\" locationName:\"x-amz-server-side-encryption-customer-algorithm\" type:\"string\"`\n\n\t// If server-side encryption with a customer-provided encryption key was requested,\n\t// the response will include this header to provide round trip message integrity\n\t// verification of the customer-provided encryption key.\n\tSSECustomerKeyMD5 *string `location:\"header\" locationName:\"x-amz-server-side-encryption-customer-key-MD5\" type:\"string\"`\n\n\t// If present, specifies the ID of the AWS Key Management Service (KMS) master\n\t// encryption key that was used for the object.\n\tSSEKMSKeyId *string `location:\"header\" locationName:\"x-amz-server-side-encryption-aws-kms-key-id\" type:\"string\" sensitive:\"true\"`\n\n\t// The Server-side encryption algorithm used when storing this object in S3\n\t// (e.g., AES256, aws:kms).\n\tServerSideEncryption *string `location:\"header\" locationName:\"x-amz-server-side-encryption\" type:\"string\" enum:\"ServerSideEncryption\"`\n\n\t// Version ID of the newly created copy.\n\tVersionId *string `location:\"header\" locationName:\"x-amz-version-id\" type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s CopyObjectOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s CopyObjectOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetCopyObjectResult sets the CopyObjectResult field's value.\nfunc (s *CopyObjectOutput) SetCopyObjectResult(v *CopyObjectResult) *CopyObjectOutput {\n\ts.CopyObjectResult = v\n\treturn s\n}\n\n// SetCopySourceVersionId sets the CopySourceVersionId field's value.\nfunc (s *CopyObjectOutput) SetCopySourceVersionId(v string) *CopyObjectOutput {\n\ts.CopySourceVersionId = &v\n\treturn s\n}\n\n// SetExpiration sets the Expiration field's value.\nfunc (s *CopyObjectOutput) SetExpiration(v string) *CopyObjectOutput {\n\ts.Expiration = &v\n\treturn s\n}\n\n// SetRequestCharged sets the RequestCharged field's value.\nfunc (s *CopyObjectOutput) SetRequestCharged(v string) *CopyObjectOutput {\n\ts.RequestCharged = &v\n\treturn s\n}\n\n// SetSSECustomerAlgorithm sets the SSECustomerAlgorithm field's value.\nfunc (s *CopyObjectOutput) SetSSECustomerAlgorithm(v string) *CopyObjectOutput {\n\ts.SSECustomerAlgorithm = &v\n\treturn s\n}\n\n// SetSSECustomerKeyMD5 sets the SSECustomerKeyMD5 field's value.\nfunc (s *CopyObjectOutput) SetSSECustomerKeyMD5(v string) *CopyObjectOutput {\n\ts.SSECustomerKeyMD5 = &v\n\treturn s\n}\n\n// SetSSEKMSKeyId sets the SSEKMSKeyId field's value.\nfunc (s *CopyObjectOutput) SetSSEKMSKeyId(v string) *CopyObjectOutput {\n\ts.SSEKMSKeyId = &v\n\treturn s\n}\n\n// SetServerSideEncryption sets the ServerSideEncryption field's value.\nfunc (s *CopyObjectOutput) SetServerSideEncryption(v string) *CopyObjectOutput {\n\ts.ServerSideEncryption = &v\n\treturn s\n}\n\n// SetVersionId sets the VersionId field's value.\nfunc (s *CopyObjectOutput) SetVersionId(v string) *CopyObjectOutput {\n\ts.VersionId = &v\n\treturn s\n}\n\ntype CopyObjectResult struct {\n\t_ struct{} `type:\"structure\"`\n\n\tETag *string `type:\"string\"`\n\n\tLastModified *time.Time `type:\"timestamp\"`\n}\n\n// String returns the string representation\nfunc (s CopyObjectResult) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s CopyObjectResult) GoString() string {\n\treturn s.String()\n}\n\n// SetETag sets the ETag field's value.\nfunc (s *CopyObjectResult) SetETag(v string) *CopyObjectResult {\n\ts.ETag = &v\n\treturn s\n}\n\n// SetLastModified sets the LastModified field's value.\nfunc (s *CopyObjectResult) SetLastModified(v time.Time) *CopyObjectResult {\n\ts.LastModified = &v\n\treturn s\n}\n\ntype CopyPartResult struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Entity tag of the object.\n\tETag *string `type:\"string\"`\n\n\t// Date and time at which the object was uploaded.\n\tLastModified *time.Time `type:\"timestamp\"`\n}\n\n// String returns the string representation\nfunc (s CopyPartResult) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s CopyPartResult) GoString() string {\n\treturn s.String()\n}\n\n// SetETag sets the ETag field's value.\nfunc (s *CopyPartResult) SetETag(v string) *CopyPartResult {\n\ts.ETag = &v\n\treturn s\n}\n\n// SetLastModified sets the LastModified field's value.\nfunc (s *CopyPartResult) SetLastModified(v time.Time) *CopyPartResult {\n\ts.LastModified = &v\n\treturn s\n}\n\ntype CreateBucketConfiguration struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Specifies the region where the bucket will be created. If you don't specify\n\t// a region, the bucket is created in US East (N. Virginia) Region (us-east-1).\n\tLocationConstraint *string `type:\"string\" enum:\"BucketLocationConstraint\"`\n}\n\n// String returns the string representation\nfunc (s CreateBucketConfiguration) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s CreateBucketConfiguration) GoString() string {\n\treturn s.String()\n}\n\n// SetLocationConstraint sets the LocationConstraint field's value.\nfunc (s *CreateBucketConfiguration) SetLocationConstraint(v string) *CreateBucketConfiguration {\n\ts.LocationConstraint = &v\n\treturn s\n}\n\ntype CreateBucketInput struct {\n\t_ struct{} `type:\"structure\" payload:\"CreateBucketConfiguration\"`\n\n\t// The canned ACL to apply to the bucket.\n\tACL *string `location:\"header\" locationName:\"x-amz-acl\" type:\"string\" enum:\"BucketCannedACL\"`\n\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n\n\tCreateBucketConfiguration *CreateBucketConfiguration `locationName:\"CreateBucketConfiguration\" type:\"structure\" xmlURI:\"http://s3.amazonaws.com/doc/2006-03-01/\"`\n\n\t// Allows grantee the read, write, read ACP, and write ACP permissions on the\n\t// bucket.\n\tGrantFullControl *string `location:\"header\" locationName:\"x-amz-grant-full-control\" type:\"string\"`\n\n\t// Allows grantee to list the objects in the bucket.\n\tGrantRead *string `location:\"header\" locationName:\"x-amz-grant-read\" type:\"string\"`\n\n\t// Allows grantee to read the bucket ACL.\n\tGrantReadACP *string `location:\"header\" locationName:\"x-amz-grant-read-acp\" type:\"string\"`\n\n\t// Allows grantee to create, overwrite, and delete any object in the bucket.\n\tGrantWrite *string `location:\"header\" locationName:\"x-amz-grant-write\" type:\"string\"`\n\n\t// Allows grantee to write the ACL for the applicable bucket.\n\tGrantWriteACP *string `location:\"header\" locationName:\"x-amz-grant-write-acp\" type:\"string\"`\n\n\t// Specifies whether you want Amazon S3 object lock to be enabled for the new\n\t// bucket.\n\tObjectLockEnabledForBucket *bool `location:\"header\" locationName:\"x-amz-bucket-object-lock-enabled\" type:\"boolean\"`\n}\n\n// String returns the string representation\nfunc (s CreateBucketInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s CreateBucketInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *CreateBucketInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"CreateBucketInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetACL sets the ACL field's value.\nfunc (s *CreateBucketInput) SetACL(v string) *CreateBucketInput {\n\ts.ACL = &v\n\treturn s\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *CreateBucketInput) SetBucket(v string) *CreateBucketInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *CreateBucketInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetCreateBucketConfiguration sets the CreateBucketConfiguration field's value.\nfunc (s *CreateBucketInput) SetCreateBucketConfiguration(v *CreateBucketConfiguration) *CreateBucketInput {\n\ts.CreateBucketConfiguration = v\n\treturn s\n}\n\n// SetGrantFullControl sets the GrantFullControl field's value.\nfunc (s *CreateBucketInput) SetGrantFullControl(v string) *CreateBucketInput {\n\ts.GrantFullControl = &v\n\treturn s\n}\n\n// SetGrantRead sets the GrantRead field's value.\nfunc (s *CreateBucketInput) SetGrantRead(v string) *CreateBucketInput {\n\ts.GrantRead = &v\n\treturn s\n}\n\n// SetGrantReadACP sets the GrantReadACP field's value.\nfunc (s *CreateBucketInput) SetGrantReadACP(v string) *CreateBucketInput {\n\ts.GrantReadACP = &v\n\treturn s\n}\n\n// SetGrantWrite sets the GrantWrite field's value.\nfunc (s *CreateBucketInput) SetGrantWrite(v string) *CreateBucketInput {\n\ts.GrantWrite = &v\n\treturn s\n}\n\n// SetGrantWriteACP sets the GrantWriteACP field's value.\nfunc (s *CreateBucketInput) SetGrantWriteACP(v string) *CreateBucketInput {\n\ts.GrantWriteACP = &v\n\treturn s\n}\n\n// SetObjectLockEnabledForBucket sets the ObjectLockEnabledForBucket field's value.\nfunc (s *CreateBucketInput) SetObjectLockEnabledForBucket(v bool) *CreateBucketInput {\n\ts.ObjectLockEnabledForBucket = &v\n\treturn s\n}\n\ntype CreateBucketOutput struct {\n\t_ struct{} `type:\"structure\"`\n\n\tLocation *string `location:\"header\" locationName:\"Location\" type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s CreateBucketOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s CreateBucketOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetLocation sets the Location field's value.\nfunc (s *CreateBucketOutput) SetLocation(v string) *CreateBucketOutput {\n\ts.Location = &v\n\treturn s\n}\n\ntype CreateMultipartUploadInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The canned ACL to apply to the object.\n\tACL *string `location:\"header\" locationName:\"x-amz-acl\" type:\"string\" enum:\"ObjectCannedACL\"`\n\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n\n\t// Specifies caching behavior along the request/reply chain.\n\tCacheControl *string `location:\"header\" locationName:\"Cache-Control\" type:\"string\"`\n\n\t// Specifies presentational information for the object.\n\tContentDisposition *string `location:\"header\" locationName:\"Content-Disposition\" type:\"string\"`\n\n\t// Specifies what content encodings have been applied to the object and thus\n\t// what decoding mechanisms must be applied to obtain the media-type referenced\n\t// by the Content-Type header field.\n\tContentEncoding *string `location:\"header\" locationName:\"Content-Encoding\" type:\"string\"`\n\n\t// The language the content is in.\n\tContentLanguage *string `location:\"header\" locationName:\"Content-Language\" type:\"string\"`\n\n\t// A standard MIME type describing the format of the object data.\n\tContentType *string `location:\"header\" locationName:\"Content-Type\" type:\"string\"`\n\n\t// The date and time at which the object is no longer cacheable.\n\tExpires *time.Time `location:\"header\" locationName:\"Expires\" type:\"timestamp\"`\n\n\t// Gives the grantee READ, READ_ACP, and WRITE_ACP permissions on the object.\n\tGrantFullControl *string `location:\"header\" locationName:\"x-amz-grant-full-control\" type:\"string\"`\n\n\t// Allows grantee to read the object data and its metadata.\n\tGrantRead *string `location:\"header\" locationName:\"x-amz-grant-read\" type:\"string\"`\n\n\t// Allows grantee to read the object ACL.\n\tGrantReadACP *string `location:\"header\" locationName:\"x-amz-grant-read-acp\" type:\"string\"`\n\n\t// Allows grantee to write the ACL for the applicable object.\n\tGrantWriteACP *string `location:\"header\" locationName:\"x-amz-grant-write-acp\" type:\"string\"`\n\n\t// Key is a required field\n\tKey *string `location:\"uri\" locationName:\"Key\" min:\"1\" type:\"string\" required:\"true\"`\n\n\t// A map of metadata to store with the object in S3.\n\tMetadata map[string]*string `location:\"headers\" locationName:\"x-amz-meta-\" type:\"map\"`\n\n\t// Specifies whether you want to apply a Legal Hold to the uploaded object.\n\tObjectLockLegalHoldStatus *string `location:\"header\" locationName:\"x-amz-object-lock-legal-hold\" type:\"string\" enum:\"ObjectLockLegalHoldStatus\"`\n\n\t// Specifies the object lock mode that you want to apply to the uploaded object.\n\tObjectLockMode *string `location:\"header\" locationName:\"x-amz-object-lock-mode\" type:\"string\" enum:\"ObjectLockMode\"`\n\n\t// Specifies the date and time when you want the object lock to expire.\n\tObjectLockRetainUntilDate *time.Time `location:\"header\" locationName:\"x-amz-object-lock-retain-until-date\" type:\"timestamp\" timestampFormat:\"iso8601\"`\n\n\t// Confirms that the requester knows that she or he will be charged for the\n\t// request. Bucket owners need not specify this parameter in their requests.\n\t// Documentation on downloading objects from requester pays buckets can be found\n\t// at http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html\n\tRequestPayer *string `location:\"header\" locationName:\"x-amz-request-payer\" type:\"string\" enum:\"RequestPayer\"`\n\n\t// Specifies the algorithm to use to when encrypting the object (e.g., AES256).\n\tSSECustomerAlgorithm *string `location:\"header\" locationName:\"x-amz-server-side-encryption-customer-algorithm\" type:\"string\"`\n\n\t// Specifies the customer-provided encryption key for Amazon S3 to use in encrypting\n\t// data. This value is used to store the object and then it is discarded; Amazon\n\t// does not store the encryption key. The key must be appropriate for use with\n\t// the algorithm specified in the x-amz-server-side​-encryption​-customer-algorithm\n\t// header.\n\tSSECustomerKey *string `marshal-as:\"blob\" location:\"header\" locationName:\"x-amz-server-side-encryption-customer-key\" type:\"string\" sensitive:\"true\"`\n\n\t// Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.\n\t// Amazon S3 uses this header for a message integrity check to ensure the encryption\n\t// key was transmitted without error.\n\tSSECustomerKeyMD5 *string `location:\"header\" locationName:\"x-amz-server-side-encryption-customer-key-MD5\" type:\"string\"`\n\n\t// Specifies the AWS KMS key ID to use for object encryption. All GET and PUT\n\t// requests for an object protected by AWS KMS will fail if not made via SSL\n\t// or using SigV4. Documentation on configuring any of the officially supported\n\t// AWS SDKs and CLI can be found at http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingAWSSDK.html#specify-signature-version\n\tSSEKMSKeyId *string `location:\"header\" locationName:\"x-amz-server-side-encryption-aws-kms-key-id\" type:\"string\" sensitive:\"true\"`\n\n\t// The Server-side encryption algorithm used when storing this object in S3\n\t// (e.g., AES256, aws:kms).\n\tServerSideEncryption *string `location:\"header\" locationName:\"x-amz-server-side-encryption\" type:\"string\" enum:\"ServerSideEncryption\"`\n\n\t// The type of storage to use for the object. Defaults to 'STANDARD'.\n\tStorageClass *string `location:\"header\" locationName:\"x-amz-storage-class\" type:\"string\" enum:\"StorageClass\"`\n\n\t// The tag-set for the object. The tag-set must be encoded as URL Query parameters\n\tTagging *string `location:\"header\" locationName:\"x-amz-tagging\" type:\"string\"`\n\n\t// If the bucket is configured as a website, redirects requests for this object\n\t// to another object in the same bucket or to an external URL. Amazon S3 stores\n\t// the value of this header in the object metadata.\n\tWebsiteRedirectLocation *string `location:\"header\" locationName:\"x-amz-website-redirect-location\" type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s CreateMultipartUploadInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s CreateMultipartUploadInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *CreateMultipartUploadInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"CreateMultipartUploadInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\tif s.Key == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Key\"))\n\t}\n\tif s.Key != nil && len(*s.Key) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Key\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetACL sets the ACL field's value.\nfunc (s *CreateMultipartUploadInput) SetACL(v string) *CreateMultipartUploadInput {\n\ts.ACL = &v\n\treturn s\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *CreateMultipartUploadInput) SetBucket(v string) *CreateMultipartUploadInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *CreateMultipartUploadInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetCacheControl sets the CacheControl field's value.\nfunc (s *CreateMultipartUploadInput) SetCacheControl(v string) *CreateMultipartUploadInput {\n\ts.CacheControl = &v\n\treturn s\n}\n\n// SetContentDisposition sets the ContentDisposition field's value.\nfunc (s *CreateMultipartUploadInput) SetContentDisposition(v string) *CreateMultipartUploadInput {\n\ts.ContentDisposition = &v\n\treturn s\n}\n\n// SetContentEncoding sets the ContentEncoding field's value.\nfunc (s *CreateMultipartUploadInput) SetContentEncoding(v string) *CreateMultipartUploadInput {\n\ts.ContentEncoding = &v\n\treturn s\n}\n\n// SetContentLanguage sets the ContentLanguage field's value.\nfunc (s *CreateMultipartUploadInput) SetContentLanguage(v string) *CreateMultipartUploadInput {\n\ts.ContentLanguage = &v\n\treturn s\n}\n\n// SetContentType sets the ContentType field's value.\nfunc (s *CreateMultipartUploadInput) SetContentType(v string) *CreateMultipartUploadInput {\n\ts.ContentType = &v\n\treturn s\n}\n\n// SetExpires sets the Expires field's value.\nfunc (s *CreateMultipartUploadInput) SetExpires(v time.Time) *CreateMultipartUploadInput {\n\ts.Expires = &v\n\treturn s\n}\n\n// SetGrantFullControl sets the GrantFullControl field's value.\nfunc (s *CreateMultipartUploadInput) SetGrantFullControl(v string) *CreateMultipartUploadInput {\n\ts.GrantFullControl = &v\n\treturn s\n}\n\n// SetGrantRead sets the GrantRead field's value.\nfunc (s *CreateMultipartUploadInput) SetGrantRead(v string) *CreateMultipartUploadInput {\n\ts.GrantRead = &v\n\treturn s\n}\n\n// SetGrantReadACP sets the GrantReadACP field's value.\nfunc (s *CreateMultipartUploadInput) SetGrantReadACP(v string) *CreateMultipartUploadInput {\n\ts.GrantReadACP = &v\n\treturn s\n}\n\n// SetGrantWriteACP sets the GrantWriteACP field's value.\nfunc (s *CreateMultipartUploadInput) SetGrantWriteACP(v string) *CreateMultipartUploadInput {\n\ts.GrantWriteACP = &v\n\treturn s\n}\n\n// SetKey sets the Key field's value.\nfunc (s *CreateMultipartUploadInput) SetKey(v string) *CreateMultipartUploadInput {\n\ts.Key = &v\n\treturn s\n}\n\n// SetMetadata sets the Metadata field's value.\nfunc (s *CreateMultipartUploadInput) SetMetadata(v map[string]*string) *CreateMultipartUploadInput {\n\ts.Metadata = v\n\treturn s\n}\n\n// SetObjectLockLegalHoldStatus sets the ObjectLockLegalHoldStatus field's value.\nfunc (s *CreateMultipartUploadInput) SetObjectLockLegalHoldStatus(v string) *CreateMultipartUploadInput {\n\ts.ObjectLockLegalHoldStatus = &v\n\treturn s\n}\n\n// SetObjectLockMode sets the ObjectLockMode field's value.\nfunc (s *CreateMultipartUploadInput) SetObjectLockMode(v string) *CreateMultipartUploadInput {\n\ts.ObjectLockMode = &v\n\treturn s\n}\n\n// SetObjectLockRetainUntilDate sets the ObjectLockRetainUntilDate field's value.\nfunc (s *CreateMultipartUploadInput) SetObjectLockRetainUntilDate(v time.Time) *CreateMultipartUploadInput {\n\ts.ObjectLockRetainUntilDate = &v\n\treturn s\n}\n\n// SetRequestPayer sets the RequestPayer field's value.\nfunc (s *CreateMultipartUploadInput) SetRequestPayer(v string) *CreateMultipartUploadInput {\n\ts.RequestPayer = &v\n\treturn s\n}\n\n// SetSSECustomerAlgorithm sets the SSECustomerAlgorithm field's value.\nfunc (s *CreateMultipartUploadInput) SetSSECustomerAlgorithm(v string) *CreateMultipartUploadInput {\n\ts.SSECustomerAlgorithm = &v\n\treturn s\n}\n\n// SetSSECustomerKey sets the SSECustomerKey field's value.\nfunc (s *CreateMultipartUploadInput) SetSSECustomerKey(v string) *CreateMultipartUploadInput {\n\ts.SSECustomerKey = &v\n\treturn s\n}\n\nfunc (s *CreateMultipartUploadInput) getSSECustomerKey() (v string) {\n\tif s.SSECustomerKey == nil {\n\t\treturn v\n\t}\n\treturn *s.SSECustomerKey\n}\n\n// SetSSECustomerKeyMD5 sets the SSECustomerKeyMD5 field's value.\nfunc (s *CreateMultipartUploadInput) SetSSECustomerKeyMD5(v string) *CreateMultipartUploadInput {\n\ts.SSECustomerKeyMD5 = &v\n\treturn s\n}\n\n// SetSSEKMSKeyId sets the SSEKMSKeyId field's value.\nfunc (s *CreateMultipartUploadInput) SetSSEKMSKeyId(v string) *CreateMultipartUploadInput {\n\ts.SSEKMSKeyId = &v\n\treturn s\n}\n\n// SetServerSideEncryption sets the ServerSideEncryption field's value.\nfunc (s *CreateMultipartUploadInput) SetServerSideEncryption(v string) *CreateMultipartUploadInput {\n\ts.ServerSideEncryption = &v\n\treturn s\n}\n\n// SetStorageClass sets the StorageClass field's value.\nfunc (s *CreateMultipartUploadInput) SetStorageClass(v string) *CreateMultipartUploadInput {\n\ts.StorageClass = &v\n\treturn s\n}\n\n// SetTagging sets the Tagging field's value.\nfunc (s *CreateMultipartUploadInput) SetTagging(v string) *CreateMultipartUploadInput {\n\ts.Tagging = &v\n\treturn s\n}\n\n// SetWebsiteRedirectLocation sets the WebsiteRedirectLocation field's value.\nfunc (s *CreateMultipartUploadInput) SetWebsiteRedirectLocation(v string) *CreateMultipartUploadInput {\n\ts.WebsiteRedirectLocation = &v\n\treturn s\n}\n\ntype CreateMultipartUploadOutput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Date when multipart upload will become eligible for abort operation by lifecycle.\n\tAbortDate *time.Time `location:\"header\" locationName:\"x-amz-abort-date\" type:\"timestamp\"`\n\n\t// Id of the lifecycle rule that makes a multipart upload eligible for abort\n\t// operation.\n\tAbortRuleId *string `location:\"header\" locationName:\"x-amz-abort-rule-id\" type:\"string\"`\n\n\t// Name of the bucket to which the multipart upload was initiated.\n\tBucket *string `locationName:\"Bucket\" type:\"string\"`\n\n\t// Object key for which the multipart upload was initiated.\n\tKey *string `min:\"1\" type:\"string\"`\n\n\t// If present, indicates that the requester was successfully charged for the\n\t// request.\n\tRequestCharged *string `location:\"header\" locationName:\"x-amz-request-charged\" type:\"string\" enum:\"RequestCharged\"`\n\n\t// If server-side encryption with a customer-provided encryption key was requested,\n\t// the response will include this header confirming the encryption algorithm\n\t// used.\n\tSSECustomerAlgorithm *string `location:\"header\" locationName:\"x-amz-server-side-encryption-customer-algorithm\" type:\"string\"`\n\n\t// If server-side encryption with a customer-provided encryption key was requested,\n\t// the response will include this header to provide round trip message integrity\n\t// verification of the customer-provided encryption key.\n\tSSECustomerKeyMD5 *string `location:\"header\" locationName:\"x-amz-server-side-encryption-customer-key-MD5\" type:\"string\"`\n\n\t// If present, specifies the ID of the AWS Key Management Service (KMS) master\n\t// encryption key that was used for the object.\n\tSSEKMSKeyId *string `location:\"header\" locationName:\"x-amz-server-side-encryption-aws-kms-key-id\" type:\"string\" sensitive:\"true\"`\n\n\t// The Server-side encryption algorithm used when storing this object in S3\n\t// (e.g., AES256, aws:kms).\n\tServerSideEncryption *string `location:\"header\" locationName:\"x-amz-server-side-encryption\" type:\"string\" enum:\"ServerSideEncryption\"`\n\n\t// ID for the initiated multipart upload.\n\tUploadId *string `type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s CreateMultipartUploadOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s CreateMultipartUploadOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetAbortDate sets the AbortDate field's value.\nfunc (s *CreateMultipartUploadOutput) SetAbortDate(v time.Time) *CreateMultipartUploadOutput {\n\ts.AbortDate = &v\n\treturn s\n}\n\n// SetAbortRuleId sets the AbortRuleId field's value.\nfunc (s *CreateMultipartUploadOutput) SetAbortRuleId(v string) *CreateMultipartUploadOutput {\n\ts.AbortRuleId = &v\n\treturn s\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *CreateMultipartUploadOutput) SetBucket(v string) *CreateMultipartUploadOutput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *CreateMultipartUploadOutput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetKey sets the Key field's value.\nfunc (s *CreateMultipartUploadOutput) SetKey(v string) *CreateMultipartUploadOutput {\n\ts.Key = &v\n\treturn s\n}\n\n// SetRequestCharged sets the RequestCharged field's value.\nfunc (s *CreateMultipartUploadOutput) SetRequestCharged(v string) *CreateMultipartUploadOutput {\n\ts.RequestCharged = &v\n\treturn s\n}\n\n// SetSSECustomerAlgorithm sets the SSECustomerAlgorithm field's value.\nfunc (s *CreateMultipartUploadOutput) SetSSECustomerAlgorithm(v string) *CreateMultipartUploadOutput {\n\ts.SSECustomerAlgorithm = &v\n\treturn s\n}\n\n// SetSSECustomerKeyMD5 sets the SSECustomerKeyMD5 field's value.\nfunc (s *CreateMultipartUploadOutput) SetSSECustomerKeyMD5(v string) *CreateMultipartUploadOutput {\n\ts.SSECustomerKeyMD5 = &v\n\treturn s\n}\n\n// SetSSEKMSKeyId sets the SSEKMSKeyId field's value.\nfunc (s *CreateMultipartUploadOutput) SetSSEKMSKeyId(v string) *CreateMultipartUploadOutput {\n\ts.SSEKMSKeyId = &v\n\treturn s\n}\n\n// SetServerSideEncryption sets the ServerSideEncryption field's value.\nfunc (s *CreateMultipartUploadOutput) SetServerSideEncryption(v string) *CreateMultipartUploadOutput {\n\ts.ServerSideEncryption = &v\n\treturn s\n}\n\n// SetUploadId sets the UploadId field's value.\nfunc (s *CreateMultipartUploadOutput) SetUploadId(v string) *CreateMultipartUploadOutput {\n\ts.UploadId = &v\n\treturn s\n}\n\n// The container element for specifying the default object lock retention settings\n// for new objects placed in the specified bucket.\ntype DefaultRetention struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The number of days that you want to specify for the default retention period.\n\tDays *int64 `type:\"integer\"`\n\n\t// The default object lock retention mode you want to apply to new objects placed\n\t// in the specified bucket.\n\tMode *string `type:\"string\" enum:\"ObjectLockRetentionMode\"`\n\n\t// The number of years that you want to specify for the default retention period.\n\tYears *int64 `type:\"integer\"`\n}\n\n// String returns the string representation\nfunc (s DefaultRetention) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s DefaultRetention) GoString() string {\n\treturn s.String()\n}\n\n// SetDays sets the Days field's value.\nfunc (s *DefaultRetention) SetDays(v int64) *DefaultRetention {\n\ts.Days = &v\n\treturn s\n}\n\n// SetMode sets the Mode field's value.\nfunc (s *DefaultRetention) SetMode(v string) *DefaultRetention {\n\ts.Mode = &v\n\treturn s\n}\n\n// SetYears sets the Years field's value.\nfunc (s *DefaultRetention) SetYears(v int64) *DefaultRetention {\n\ts.Years = &v\n\treturn s\n}\n\ntype Delete struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Objects is a required field\n\tObjects []*ObjectIdentifier `locationName:\"Object\" type:\"list\" flattened:\"true\" required:\"true\"`\n\n\t// Element to enable quiet mode for the request. When you add this element,\n\t// you must set its value to true.\n\tQuiet *bool `type:\"boolean\"`\n}\n\n// String returns the string representation\nfunc (s Delete) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s Delete) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *Delete) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"Delete\"}\n\tif s.Objects == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Objects\"))\n\t}\n\tif s.Objects != nil {\n\t\tfor i, v := range s.Objects {\n\t\t\tif v == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif err := v.Validate(); err != nil {\n\t\t\t\tinvalidParams.AddNested(fmt.Sprintf(\"%s[%v]\", \"Objects\", i), err.(request.ErrInvalidParams))\n\t\t\t}\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetObjects sets the Objects field's value.\nfunc (s *Delete) SetObjects(v []*ObjectIdentifier) *Delete {\n\ts.Objects = v\n\treturn s\n}\n\n// SetQuiet sets the Quiet field's value.\nfunc (s *Delete) SetQuiet(v bool) *Delete {\n\ts.Quiet = &v\n\treturn s\n}\n\ntype DeleteBucketAnalyticsConfigurationInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The name of the bucket from which an analytics configuration is deleted.\n\t//\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n\n\t// The ID that identifies the analytics configuration.\n\t//\n\t// Id is a required field\n\tId *string `location:\"querystring\" locationName:\"id\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s DeleteBucketAnalyticsConfigurationInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s DeleteBucketAnalyticsConfigurationInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *DeleteBucketAnalyticsConfigurationInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"DeleteBucketAnalyticsConfigurationInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\tif s.Id == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Id\"))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *DeleteBucketAnalyticsConfigurationInput) SetBucket(v string) *DeleteBucketAnalyticsConfigurationInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *DeleteBucketAnalyticsConfigurationInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetId sets the Id field's value.\nfunc (s *DeleteBucketAnalyticsConfigurationInput) SetId(v string) *DeleteBucketAnalyticsConfigurationInput {\n\ts.Id = &v\n\treturn s\n}\n\ntype DeleteBucketAnalyticsConfigurationOutput struct {\n\t_ struct{} `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s DeleteBucketAnalyticsConfigurationOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s DeleteBucketAnalyticsConfigurationOutput) GoString() string {\n\treturn s.String()\n}\n\ntype DeleteBucketCorsInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s DeleteBucketCorsInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s DeleteBucketCorsInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *DeleteBucketCorsInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"DeleteBucketCorsInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *DeleteBucketCorsInput) SetBucket(v string) *DeleteBucketCorsInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *DeleteBucketCorsInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\ntype DeleteBucketCorsOutput struct {\n\t_ struct{} `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s DeleteBucketCorsOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s DeleteBucketCorsOutput) GoString() string {\n\treturn s.String()\n}\n\ntype DeleteBucketEncryptionInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The name of the bucket containing the server-side encryption configuration\n\t// to delete.\n\t//\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s DeleteBucketEncryptionInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s DeleteBucketEncryptionInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *DeleteBucketEncryptionInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"DeleteBucketEncryptionInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *DeleteBucketEncryptionInput) SetBucket(v string) *DeleteBucketEncryptionInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *DeleteBucketEncryptionInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\ntype DeleteBucketEncryptionOutput struct {\n\t_ struct{} `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s DeleteBucketEncryptionOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s DeleteBucketEncryptionOutput) GoString() string {\n\treturn s.String()\n}\n\ntype DeleteBucketInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s DeleteBucketInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s DeleteBucketInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *DeleteBucketInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"DeleteBucketInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *DeleteBucketInput) SetBucket(v string) *DeleteBucketInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *DeleteBucketInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\ntype DeleteBucketInventoryConfigurationInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The name of the bucket containing the inventory configuration to delete.\n\t//\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n\n\t// The ID used to identify the inventory configuration.\n\t//\n\t// Id is a required field\n\tId *string `location:\"querystring\" locationName:\"id\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s DeleteBucketInventoryConfigurationInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s DeleteBucketInventoryConfigurationInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *DeleteBucketInventoryConfigurationInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"DeleteBucketInventoryConfigurationInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\tif s.Id == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Id\"))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *DeleteBucketInventoryConfigurationInput) SetBucket(v string) *DeleteBucketInventoryConfigurationInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *DeleteBucketInventoryConfigurationInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetId sets the Id field's value.\nfunc (s *DeleteBucketInventoryConfigurationInput) SetId(v string) *DeleteBucketInventoryConfigurationInput {\n\ts.Id = &v\n\treturn s\n}\n\ntype DeleteBucketInventoryConfigurationOutput struct {\n\t_ struct{} `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s DeleteBucketInventoryConfigurationOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s DeleteBucketInventoryConfigurationOutput) GoString() string {\n\treturn s.String()\n}\n\ntype DeleteBucketLifecycleInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s DeleteBucketLifecycleInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s DeleteBucketLifecycleInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *DeleteBucketLifecycleInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"DeleteBucketLifecycleInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *DeleteBucketLifecycleInput) SetBucket(v string) *DeleteBucketLifecycleInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *DeleteBucketLifecycleInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\ntype DeleteBucketLifecycleOutput struct {\n\t_ struct{} `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s DeleteBucketLifecycleOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s DeleteBucketLifecycleOutput) GoString() string {\n\treturn s.String()\n}\n\ntype DeleteBucketMetricsConfigurationInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The name of the bucket containing the metrics configuration to delete.\n\t//\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n\n\t// The ID used to identify the metrics configuration.\n\t//\n\t// Id is a required field\n\tId *string `location:\"querystring\" locationName:\"id\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s DeleteBucketMetricsConfigurationInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s DeleteBucketMetricsConfigurationInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *DeleteBucketMetricsConfigurationInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"DeleteBucketMetricsConfigurationInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\tif s.Id == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Id\"))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *DeleteBucketMetricsConfigurationInput) SetBucket(v string) *DeleteBucketMetricsConfigurationInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *DeleteBucketMetricsConfigurationInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetId sets the Id field's value.\nfunc (s *DeleteBucketMetricsConfigurationInput) SetId(v string) *DeleteBucketMetricsConfigurationInput {\n\ts.Id = &v\n\treturn s\n}\n\ntype DeleteBucketMetricsConfigurationOutput struct {\n\t_ struct{} `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s DeleteBucketMetricsConfigurationOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s DeleteBucketMetricsConfigurationOutput) GoString() string {\n\treturn s.String()\n}\n\ntype DeleteBucketOutput struct {\n\t_ struct{} `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s DeleteBucketOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s DeleteBucketOutput) GoString() string {\n\treturn s.String()\n}\n\ntype DeleteBucketPolicyInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s DeleteBucketPolicyInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s DeleteBucketPolicyInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *DeleteBucketPolicyInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"DeleteBucketPolicyInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *DeleteBucketPolicyInput) SetBucket(v string) *DeleteBucketPolicyInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *DeleteBucketPolicyInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\ntype DeleteBucketPolicyOutput struct {\n\t_ struct{} `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s DeleteBucketPolicyOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s DeleteBucketPolicyOutput) GoString() string {\n\treturn s.String()\n}\n\ntype DeleteBucketReplicationInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The bucket name.\n\t//\n\t// It can take a while to propagate the deletion of a replication configuration\n\t// to all Amazon S3 systems.\n\t//\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s DeleteBucketReplicationInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s DeleteBucketReplicationInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *DeleteBucketReplicationInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"DeleteBucketReplicationInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *DeleteBucketReplicationInput) SetBucket(v string) *DeleteBucketReplicationInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *DeleteBucketReplicationInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\ntype DeleteBucketReplicationOutput struct {\n\t_ struct{} `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s DeleteBucketReplicationOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s DeleteBucketReplicationOutput) GoString() string {\n\treturn s.String()\n}\n\ntype DeleteBucketTaggingInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s DeleteBucketTaggingInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s DeleteBucketTaggingInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *DeleteBucketTaggingInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"DeleteBucketTaggingInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *DeleteBucketTaggingInput) SetBucket(v string) *DeleteBucketTaggingInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *DeleteBucketTaggingInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\ntype DeleteBucketTaggingOutput struct {\n\t_ struct{} `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s DeleteBucketTaggingOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s DeleteBucketTaggingOutput) GoString() string {\n\treturn s.String()\n}\n\ntype DeleteBucketWebsiteInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s DeleteBucketWebsiteInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s DeleteBucketWebsiteInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *DeleteBucketWebsiteInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"DeleteBucketWebsiteInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *DeleteBucketWebsiteInput) SetBucket(v string) *DeleteBucketWebsiteInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *DeleteBucketWebsiteInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\ntype DeleteBucketWebsiteOutput struct {\n\t_ struct{} `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s DeleteBucketWebsiteOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s DeleteBucketWebsiteOutput) GoString() string {\n\treturn s.String()\n}\n\ntype DeleteMarkerEntry struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Specifies whether the object is (true) or is not (false) the latest version\n\t// of an object.\n\tIsLatest *bool `type:\"boolean\"`\n\n\t// The object key.\n\tKey *string `min:\"1\" type:\"string\"`\n\n\t// Date and time the object was last modified.\n\tLastModified *time.Time `type:\"timestamp\"`\n\n\tOwner *Owner `type:\"structure\"`\n\n\t// Version ID of an object.\n\tVersionId *string `type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s DeleteMarkerEntry) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s DeleteMarkerEntry) GoString() string {\n\treturn s.String()\n}\n\n// SetIsLatest sets the IsLatest field's value.\nfunc (s *DeleteMarkerEntry) SetIsLatest(v bool) *DeleteMarkerEntry {\n\ts.IsLatest = &v\n\treturn s\n}\n\n// SetKey sets the Key field's value.\nfunc (s *DeleteMarkerEntry) SetKey(v string) *DeleteMarkerEntry {\n\ts.Key = &v\n\treturn s\n}\n\n// SetLastModified sets the LastModified field's value.\nfunc (s *DeleteMarkerEntry) SetLastModified(v time.Time) *DeleteMarkerEntry {\n\ts.LastModified = &v\n\treturn s\n}\n\n// SetOwner sets the Owner field's value.\nfunc (s *DeleteMarkerEntry) SetOwner(v *Owner) *DeleteMarkerEntry {\n\ts.Owner = v\n\treturn s\n}\n\n// SetVersionId sets the VersionId field's value.\nfunc (s *DeleteMarkerEntry) SetVersionId(v string) *DeleteMarkerEntry {\n\ts.VersionId = &v\n\treturn s\n}\n\n// Specifies whether Amazon S3 should replicate delete makers.\ntype DeleteMarkerReplication struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The status of the delete marker replication.\n\t//\n\t// In the current implementation, Amazon S3 doesn't replicate the delete markers.\n\t// The status must be Disabled.\n\tStatus *string `type:\"string\" enum:\"DeleteMarkerReplicationStatus\"`\n}\n\n// String returns the string representation\nfunc (s DeleteMarkerReplication) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s DeleteMarkerReplication) GoString() string {\n\treturn s.String()\n}\n\n// SetStatus sets the Status field's value.\nfunc (s *DeleteMarkerReplication) SetStatus(v string) *DeleteMarkerReplication {\n\ts.Status = &v\n\treturn s\n}\n\ntype DeleteObjectInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n\n\t// Indicates whether Amazon S3 object lock should bypass governance-mode restrictions\n\t// to process this operation.\n\tBypassGovernanceRetention *bool `location:\"header\" locationName:\"x-amz-bypass-governance-retention\" type:\"boolean\"`\n\n\t// Key is a required field\n\tKey *string `location:\"uri\" locationName:\"Key\" min:\"1\" type:\"string\" required:\"true\"`\n\n\t// The concatenation of the authentication device's serial number, a space,\n\t// and the value that is displayed on your authentication device.\n\tMFA *string `location:\"header\" locationName:\"x-amz-mfa\" type:\"string\"`\n\n\t// Confirms that the requester knows that she or he will be charged for the\n\t// request. Bucket owners need not specify this parameter in their requests.\n\t// Documentation on downloading objects from requester pays buckets can be found\n\t// at http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html\n\tRequestPayer *string `location:\"header\" locationName:\"x-amz-request-payer\" type:\"string\" enum:\"RequestPayer\"`\n\n\t// VersionId used to reference a specific version of the object.\n\tVersionId *string `location:\"querystring\" locationName:\"versionId\" type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s DeleteObjectInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s DeleteObjectInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *DeleteObjectInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"DeleteObjectInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\tif s.Key == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Key\"))\n\t}\n\tif s.Key != nil && len(*s.Key) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Key\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *DeleteObjectInput) SetBucket(v string) *DeleteObjectInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *DeleteObjectInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetBypassGovernanceRetention sets the BypassGovernanceRetention field's value.\nfunc (s *DeleteObjectInput) SetBypassGovernanceRetention(v bool) *DeleteObjectInput {\n\ts.BypassGovernanceRetention = &v\n\treturn s\n}\n\n// SetKey sets the Key field's value.\nfunc (s *DeleteObjectInput) SetKey(v string) *DeleteObjectInput {\n\ts.Key = &v\n\treturn s\n}\n\n// SetMFA sets the MFA field's value.\nfunc (s *DeleteObjectInput) SetMFA(v string) *DeleteObjectInput {\n\ts.MFA = &v\n\treturn s\n}\n\n// SetRequestPayer sets the RequestPayer field's value.\nfunc (s *DeleteObjectInput) SetRequestPayer(v string) *DeleteObjectInput {\n\ts.RequestPayer = &v\n\treturn s\n}\n\n// SetVersionId sets the VersionId field's value.\nfunc (s *DeleteObjectInput) SetVersionId(v string) *DeleteObjectInput {\n\ts.VersionId = &v\n\treturn s\n}\n\ntype DeleteObjectOutput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Specifies whether the versioned object that was permanently deleted was (true)\n\t// or was not (false) a delete marker.\n\tDeleteMarker *bool `location:\"header\" locationName:\"x-amz-delete-marker\" type:\"boolean\"`\n\n\t// If present, indicates that the requester was successfully charged for the\n\t// request.\n\tRequestCharged *string `location:\"header\" locationName:\"x-amz-request-charged\" type:\"string\" enum:\"RequestCharged\"`\n\n\t// Returns the version ID of the delete marker created as a result of the DELETE\n\t// operation.\n\tVersionId *string `location:\"header\" locationName:\"x-amz-version-id\" type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s DeleteObjectOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s DeleteObjectOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetDeleteMarker sets the DeleteMarker field's value.\nfunc (s *DeleteObjectOutput) SetDeleteMarker(v bool) *DeleteObjectOutput {\n\ts.DeleteMarker = &v\n\treturn s\n}\n\n// SetRequestCharged sets the RequestCharged field's value.\nfunc (s *DeleteObjectOutput) SetRequestCharged(v string) *DeleteObjectOutput {\n\ts.RequestCharged = &v\n\treturn s\n}\n\n// SetVersionId sets the VersionId field's value.\nfunc (s *DeleteObjectOutput) SetVersionId(v string) *DeleteObjectOutput {\n\ts.VersionId = &v\n\treturn s\n}\n\ntype DeleteObjectTaggingInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n\n\t// Key is a required field\n\tKey *string `location:\"uri\" locationName:\"Key\" min:\"1\" type:\"string\" required:\"true\"`\n\n\t// The versionId of the object that the tag-set will be removed from.\n\tVersionId *string `location:\"querystring\" locationName:\"versionId\" type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s DeleteObjectTaggingInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s DeleteObjectTaggingInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *DeleteObjectTaggingInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"DeleteObjectTaggingInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\tif s.Key == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Key\"))\n\t}\n\tif s.Key != nil && len(*s.Key) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Key\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *DeleteObjectTaggingInput) SetBucket(v string) *DeleteObjectTaggingInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *DeleteObjectTaggingInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetKey sets the Key field's value.\nfunc (s *DeleteObjectTaggingInput) SetKey(v string) *DeleteObjectTaggingInput {\n\ts.Key = &v\n\treturn s\n}\n\n// SetVersionId sets the VersionId field's value.\nfunc (s *DeleteObjectTaggingInput) SetVersionId(v string) *DeleteObjectTaggingInput {\n\ts.VersionId = &v\n\treturn s\n}\n\ntype DeleteObjectTaggingOutput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The versionId of the object the tag-set was removed from.\n\tVersionId *string `location:\"header\" locationName:\"x-amz-version-id\" type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s DeleteObjectTaggingOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s DeleteObjectTaggingOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetVersionId sets the VersionId field's value.\nfunc (s *DeleteObjectTaggingOutput) SetVersionId(v string) *DeleteObjectTaggingOutput {\n\ts.VersionId = &v\n\treturn s\n}\n\ntype DeleteObjectsInput struct {\n\t_ struct{} `type:\"structure\" payload:\"Delete\"`\n\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n\n\t// Specifies whether you want to delete this object even if it has a Governance-type\n\t// object lock in place. You must have sufficient permissions to perform this\n\t// operation.\n\tBypassGovernanceRetention *bool `location:\"header\" locationName:\"x-amz-bypass-governance-retention\" type:\"boolean\"`\n\n\t// Delete is a required field\n\tDelete *Delete `locationName:\"Delete\" type:\"structure\" required:\"true\" xmlURI:\"http://s3.amazonaws.com/doc/2006-03-01/\"`\n\n\t// The concatenation of the authentication device's serial number, a space,\n\t// and the value that is displayed on your authentication device.\n\tMFA *string `location:\"header\" locationName:\"x-amz-mfa\" type:\"string\"`\n\n\t// Confirms that the requester knows that she or he will be charged for the\n\t// request. Bucket owners need not specify this parameter in their requests.\n\t// Documentation on downloading objects from requester pays buckets can be found\n\t// at http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html\n\tRequestPayer *string `location:\"header\" locationName:\"x-amz-request-payer\" type:\"string\" enum:\"RequestPayer\"`\n}\n\n// String returns the string representation\nfunc (s DeleteObjectsInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s DeleteObjectsInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *DeleteObjectsInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"DeleteObjectsInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\tif s.Delete == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Delete\"))\n\t}\n\tif s.Delete != nil {\n\t\tif err := s.Delete.Validate(); err != nil {\n\t\t\tinvalidParams.AddNested(\"Delete\", err.(request.ErrInvalidParams))\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *DeleteObjectsInput) SetBucket(v string) *DeleteObjectsInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *DeleteObjectsInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetBypassGovernanceRetention sets the BypassGovernanceRetention field's value.\nfunc (s *DeleteObjectsInput) SetBypassGovernanceRetention(v bool) *DeleteObjectsInput {\n\ts.BypassGovernanceRetention = &v\n\treturn s\n}\n\n// SetDelete sets the Delete field's value.\nfunc (s *DeleteObjectsInput) SetDelete(v *Delete) *DeleteObjectsInput {\n\ts.Delete = v\n\treturn s\n}\n\n// SetMFA sets the MFA field's value.\nfunc (s *DeleteObjectsInput) SetMFA(v string) *DeleteObjectsInput {\n\ts.MFA = &v\n\treturn s\n}\n\n// SetRequestPayer sets the RequestPayer field's value.\nfunc (s *DeleteObjectsInput) SetRequestPayer(v string) *DeleteObjectsInput {\n\ts.RequestPayer = &v\n\treturn s\n}\n\ntype DeleteObjectsOutput struct {\n\t_ struct{} `type:\"structure\"`\n\n\tDeleted []*DeletedObject `type:\"list\" flattened:\"true\"`\n\n\tErrors []*Error `locationName:\"Error\" type:\"list\" flattened:\"true\"`\n\n\t// If present, indicates that the requester was successfully charged for the\n\t// request.\n\tRequestCharged *string `location:\"header\" locationName:\"x-amz-request-charged\" type:\"string\" enum:\"RequestCharged\"`\n}\n\n// String returns the string representation\nfunc (s DeleteObjectsOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s DeleteObjectsOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetDeleted sets the Deleted field's value.\nfunc (s *DeleteObjectsOutput) SetDeleted(v []*DeletedObject) *DeleteObjectsOutput {\n\ts.Deleted = v\n\treturn s\n}\n\n// SetErrors sets the Errors field's value.\nfunc (s *DeleteObjectsOutput) SetErrors(v []*Error) *DeleteObjectsOutput {\n\ts.Errors = v\n\treturn s\n}\n\n// SetRequestCharged sets the RequestCharged field's value.\nfunc (s *DeleteObjectsOutput) SetRequestCharged(v string) *DeleteObjectsOutput {\n\ts.RequestCharged = &v\n\treturn s\n}\n\ntype DeletePublicAccessBlockInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The Amazon S3 bucket whose PublicAccessBlock configuration you want to delete.\n\t//\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s DeletePublicAccessBlockInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s DeletePublicAccessBlockInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *DeletePublicAccessBlockInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"DeletePublicAccessBlockInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *DeletePublicAccessBlockInput) SetBucket(v string) *DeletePublicAccessBlockInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *DeletePublicAccessBlockInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\ntype DeletePublicAccessBlockOutput struct {\n\t_ struct{} `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s DeletePublicAccessBlockOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s DeletePublicAccessBlockOutput) GoString() string {\n\treturn s.String()\n}\n\ntype DeletedObject struct {\n\t_ struct{} `type:\"structure\"`\n\n\tDeleteMarker *bool `type:\"boolean\"`\n\n\tDeleteMarkerVersionId *string `type:\"string\"`\n\n\tKey *string `min:\"1\" type:\"string\"`\n\n\tVersionId *string `type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s DeletedObject) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s DeletedObject) GoString() string {\n\treturn s.String()\n}\n\n// SetDeleteMarker sets the DeleteMarker field's value.\nfunc (s *DeletedObject) SetDeleteMarker(v bool) *DeletedObject {\n\ts.DeleteMarker = &v\n\treturn s\n}\n\n// SetDeleteMarkerVersionId sets the DeleteMarkerVersionId field's value.\nfunc (s *DeletedObject) SetDeleteMarkerVersionId(v string) *DeletedObject {\n\ts.DeleteMarkerVersionId = &v\n\treturn s\n}\n\n// SetKey sets the Key field's value.\nfunc (s *DeletedObject) SetKey(v string) *DeletedObject {\n\ts.Key = &v\n\treturn s\n}\n\n// SetVersionId sets the VersionId field's value.\nfunc (s *DeletedObject) SetVersionId(v string) *DeletedObject {\n\ts.VersionId = &v\n\treturn s\n}\n\n// Specifies information about where to publish analysis or configuration results\n// for an Amazon S3 bucket.\ntype Destination struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Specify this only in a cross-account scenario (where source and destination\n\t// bucket owners are not the same), and you want to change replica ownership\n\t// to the AWS account that owns the destination bucket. If this is not specified\n\t// in the replication configuration, the replicas are owned by same AWS account\n\t// that owns the source object.\n\tAccessControlTranslation *AccessControlTranslation `type:\"structure\"`\n\n\t// Destination bucket owner account ID. In a cross-account scenario, if you\n\t// direct Amazon S3 to change replica ownership to the AWS account that owns\n\t// the destination bucket by specifying the AccessControlTranslation property,\n\t// this is the account ID of the destination bucket owner. For more information,\n\t// see Cross-Region Replication Additional Configuration: Change Replica Owner\n\t// (https://docs.aws.amazon.com/AmazonS3/latest/dev/crr-change-owner.html) in\n\t// the Amazon Simple Storage Service Developer Guide.\n\tAccount *string `type:\"string\"`\n\n\t// The Amazon Resource Name (ARN) of the bucket where you want Amazon S3 to\n\t// store replicas of the object identified by the rule.\n\t//\n\t// A replication configuration can replicate objects to only one destination\n\t// bucket. If there are multiple rules in your replication configuration, all\n\t// rules must specify the same destination bucket.\n\t//\n\t// Bucket is a required field\n\tBucket *string `type:\"string\" required:\"true\"`\n\n\t// A container that provides information about encryption. If SourceSelectionCriteria\n\t// is specified, you must specify this element.\n\tEncryptionConfiguration *EncryptionConfiguration `type:\"structure\"`\n\n\t// The storage class to use when replicating objects, such as standard or reduced\n\t// redundancy. By default, Amazon S3 uses the storage class of the source object\n\t// to create the object replica.\n\t//\n\t// For valid values, see the StorageClass element of the PUT Bucket replication\n\t// (https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTreplication.html)\n\t// action in the Amazon Simple Storage Service API Reference.\n\tStorageClass *string `type:\"string\" enum:\"StorageClass\"`\n}\n\n// String returns the string representation\nfunc (s Destination) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s Destination) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *Destination) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"Destination\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.AccessControlTranslation != nil {\n\t\tif err := s.AccessControlTranslation.Validate(); err != nil {\n\t\t\tinvalidParams.AddNested(\"AccessControlTranslation\", err.(request.ErrInvalidParams))\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetAccessControlTranslation sets the AccessControlTranslation field's value.\nfunc (s *Destination) SetAccessControlTranslation(v *AccessControlTranslation) *Destination {\n\ts.AccessControlTranslation = v\n\treturn s\n}\n\n// SetAccount sets the Account field's value.\nfunc (s *Destination) SetAccount(v string) *Destination {\n\ts.Account = &v\n\treturn s\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *Destination) SetBucket(v string) *Destination {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *Destination) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetEncryptionConfiguration sets the EncryptionConfiguration field's value.\nfunc (s *Destination) SetEncryptionConfiguration(v *EncryptionConfiguration) *Destination {\n\ts.EncryptionConfiguration = v\n\treturn s\n}\n\n// SetStorageClass sets the StorageClass field's value.\nfunc (s *Destination) SetStorageClass(v string) *Destination {\n\ts.StorageClass = &v\n\treturn s\n}\n\n// Describes the server-side encryption that will be applied to the restore\n// results.\ntype Encryption struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The server-side encryption algorithm used when storing job results in Amazon\n\t// S3 (e.g., AES256, aws:kms).\n\t//\n\t// EncryptionType is a required field\n\tEncryptionType *string `type:\"string\" required:\"true\" enum:\"ServerSideEncryption\"`\n\n\t// If the encryption type is aws:kms, this optional value can be used to specify\n\t// the encryption context for the restore results.\n\tKMSContext *string `type:\"string\"`\n\n\t// If the encryption type is aws:kms, this optional value specifies the AWS\n\t// KMS key ID to use for encryption of job results.\n\tKMSKeyId *string `type:\"string\" sensitive:\"true\"`\n}\n\n// String returns the string representation\nfunc (s Encryption) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s Encryption) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *Encryption) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"Encryption\"}\n\tif s.EncryptionType == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"EncryptionType\"))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetEncryptionType sets the EncryptionType field's value.\nfunc (s *Encryption) SetEncryptionType(v string) *Encryption {\n\ts.EncryptionType = &v\n\treturn s\n}\n\n// SetKMSContext sets the KMSContext field's value.\nfunc (s *Encryption) SetKMSContext(v string) *Encryption {\n\ts.KMSContext = &v\n\treturn s\n}\n\n// SetKMSKeyId sets the KMSKeyId field's value.\nfunc (s *Encryption) SetKMSKeyId(v string) *Encryption {\n\ts.KMSKeyId = &v\n\treturn s\n}\n\n// Specifies encryption-related information for an Amazon S3 bucket that is\n// a destination for replicated objects.\ntype EncryptionConfiguration struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Specifies the AWS KMS Key ID (Key ARN or Alias ARN) for the destination bucket.\n\t// Amazon S3 uses this key to encrypt replica objects.\n\tReplicaKmsKeyID *string `type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s EncryptionConfiguration) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s EncryptionConfiguration) GoString() string {\n\treturn s.String()\n}\n\n// SetReplicaKmsKeyID sets the ReplicaKmsKeyID field's value.\nfunc (s *EncryptionConfiguration) SetReplicaKmsKeyID(v string) *EncryptionConfiguration {\n\ts.ReplicaKmsKeyID = &v\n\treturn s\n}\n\ntype EndEvent struct {\n\t_ struct{} `locationName:\"EndEvent\" type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s EndEvent) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s EndEvent) GoString() string {\n\treturn s.String()\n}\n\n// The EndEvent is and event in the SelectObjectContentEventStream group of events.\nfunc (s *EndEvent) eventSelectObjectContentEventStream() {}\n\n// UnmarshalEvent unmarshals the EventStream Message into the EndEvent value.\n// This method is only used internally within the SDK's EventStream handling.\nfunc (s *EndEvent) UnmarshalEvent(\n\tpayloadUnmarshaler protocol.PayloadUnmarshaler,\n\tmsg eventstream.Message,\n) error {\n\treturn nil\n}\n\ntype Error struct {\n\t_ struct{} `type:\"structure\"`\n\n\tCode *string `type:\"string\"`\n\n\tKey *string `min:\"1\" type:\"string\"`\n\n\tMessage *string `type:\"string\"`\n\n\tVersionId *string `type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s Error) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s Error) GoString() string {\n\treturn s.String()\n}\n\n// SetCode sets the Code field's value.\nfunc (s *Error) SetCode(v string) *Error {\n\ts.Code = &v\n\treturn s\n}\n\n// SetKey sets the Key field's value.\nfunc (s *Error) SetKey(v string) *Error {\n\ts.Key = &v\n\treturn s\n}\n\n// SetMessage sets the Message field's value.\nfunc (s *Error) SetMessage(v string) *Error {\n\ts.Message = &v\n\treturn s\n}\n\n// SetVersionId sets the VersionId field's value.\nfunc (s *Error) SetVersionId(v string) *Error {\n\ts.VersionId = &v\n\treturn s\n}\n\ntype ErrorDocument struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The object key name to use when a 4XX class error occurs.\n\t//\n\t// Key is a required field\n\tKey *string `min:\"1\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s ErrorDocument) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s ErrorDocument) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *ErrorDocument) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"ErrorDocument\"}\n\tif s.Key == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Key\"))\n\t}\n\tif s.Key != nil && len(*s.Key) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Key\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetKey sets the Key field's value.\nfunc (s *ErrorDocument) SetKey(v string) *ErrorDocument {\n\ts.Key = &v\n\treturn s\n}\n\n// Specifies the Amazon S3 object key name to filter on and whether to filter\n// on the suffix or prefix of the key name.\ntype FilterRule struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The object key name prefix or suffix identifying one or more objects to which\n\t// the filtering rule applies. The maximum length is 1,024 characters. Overlapping\n\t// prefixes and suffixes are not supported. For more information, see Configuring\n\t// Event Notifications (https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html)\n\t// in the Amazon Simple Storage Service Developer Guide.\n\tName *string `type:\"string\" enum:\"FilterRuleName\"`\n\n\t// The value that the filter searches for in object key names.\n\tValue *string `type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s FilterRule) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s FilterRule) GoString() string {\n\treturn s.String()\n}\n\n// SetName sets the Name field's value.\nfunc (s *FilterRule) SetName(v string) *FilterRule {\n\ts.Name = &v\n\treturn s\n}\n\n// SetValue sets the Value field's value.\nfunc (s *FilterRule) SetValue(v string) *FilterRule {\n\ts.Value = &v\n\treturn s\n}\n\ntype GetBucketAccelerateConfigurationInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Name of the bucket for which the accelerate configuration is retrieved.\n\t//\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s GetBucketAccelerateConfigurationInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetBucketAccelerateConfigurationInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *GetBucketAccelerateConfigurationInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"GetBucketAccelerateConfigurationInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *GetBucketAccelerateConfigurationInput) SetBucket(v string) *GetBucketAccelerateConfigurationInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *GetBucketAccelerateConfigurationInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\ntype GetBucketAccelerateConfigurationOutput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The accelerate configuration of the bucket.\n\tStatus *string `type:\"string\" enum:\"BucketAccelerateStatus\"`\n}\n\n// String returns the string representation\nfunc (s GetBucketAccelerateConfigurationOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetBucketAccelerateConfigurationOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetStatus sets the Status field's value.\nfunc (s *GetBucketAccelerateConfigurationOutput) SetStatus(v string) *GetBucketAccelerateConfigurationOutput {\n\ts.Status = &v\n\treturn s\n}\n\ntype GetBucketAclInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s GetBucketAclInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetBucketAclInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *GetBucketAclInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"GetBucketAclInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *GetBucketAclInput) SetBucket(v string) *GetBucketAclInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *GetBucketAclInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\ntype GetBucketAclOutput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// A list of grants.\n\tGrants []*Grant `locationName:\"AccessControlList\" locationNameList:\"Grant\" type:\"list\"`\n\n\tOwner *Owner `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s GetBucketAclOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetBucketAclOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetGrants sets the Grants field's value.\nfunc (s *GetBucketAclOutput) SetGrants(v []*Grant) *GetBucketAclOutput {\n\ts.Grants = v\n\treturn s\n}\n\n// SetOwner sets the Owner field's value.\nfunc (s *GetBucketAclOutput) SetOwner(v *Owner) *GetBucketAclOutput {\n\ts.Owner = v\n\treturn s\n}\n\ntype GetBucketAnalyticsConfigurationInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The name of the bucket from which an analytics configuration is retrieved.\n\t//\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n\n\t// The ID that identifies the analytics configuration.\n\t//\n\t// Id is a required field\n\tId *string `location:\"querystring\" locationName:\"id\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s GetBucketAnalyticsConfigurationInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetBucketAnalyticsConfigurationInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *GetBucketAnalyticsConfigurationInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"GetBucketAnalyticsConfigurationInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\tif s.Id == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Id\"))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *GetBucketAnalyticsConfigurationInput) SetBucket(v string) *GetBucketAnalyticsConfigurationInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *GetBucketAnalyticsConfigurationInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetId sets the Id field's value.\nfunc (s *GetBucketAnalyticsConfigurationInput) SetId(v string) *GetBucketAnalyticsConfigurationInput {\n\ts.Id = &v\n\treturn s\n}\n\ntype GetBucketAnalyticsConfigurationOutput struct {\n\t_ struct{} `type:\"structure\" payload:\"AnalyticsConfiguration\"`\n\n\t// The configuration and any analyses for the analytics filter.\n\tAnalyticsConfiguration *AnalyticsConfiguration `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s GetBucketAnalyticsConfigurationOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetBucketAnalyticsConfigurationOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetAnalyticsConfiguration sets the AnalyticsConfiguration field's value.\nfunc (s *GetBucketAnalyticsConfigurationOutput) SetAnalyticsConfiguration(v *AnalyticsConfiguration) *GetBucketAnalyticsConfigurationOutput {\n\ts.AnalyticsConfiguration = v\n\treturn s\n}\n\ntype GetBucketCorsInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s GetBucketCorsInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetBucketCorsInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *GetBucketCorsInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"GetBucketCorsInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *GetBucketCorsInput) SetBucket(v string) *GetBucketCorsInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *GetBucketCorsInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\ntype GetBucketCorsOutput struct {\n\t_ struct{} `type:\"structure\"`\n\n\tCORSRules []*CORSRule `locationName:\"CORSRule\" type:\"list\" flattened:\"true\"`\n}\n\n// String returns the string representation\nfunc (s GetBucketCorsOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetBucketCorsOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetCORSRules sets the CORSRules field's value.\nfunc (s *GetBucketCorsOutput) SetCORSRules(v []*CORSRule) *GetBucketCorsOutput {\n\ts.CORSRules = v\n\treturn s\n}\n\ntype GetBucketEncryptionInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The name of the bucket from which the server-side encryption configuration\n\t// is retrieved.\n\t//\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s GetBucketEncryptionInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetBucketEncryptionInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *GetBucketEncryptionInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"GetBucketEncryptionInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *GetBucketEncryptionInput) SetBucket(v string) *GetBucketEncryptionInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *GetBucketEncryptionInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\ntype GetBucketEncryptionOutput struct {\n\t_ struct{} `type:\"structure\" payload:\"ServerSideEncryptionConfiguration\"`\n\n\t// Specifies the default server-side-encryption configuration.\n\tServerSideEncryptionConfiguration *ServerSideEncryptionConfiguration `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s GetBucketEncryptionOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetBucketEncryptionOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetServerSideEncryptionConfiguration sets the ServerSideEncryptionConfiguration field's value.\nfunc (s *GetBucketEncryptionOutput) SetServerSideEncryptionConfiguration(v *ServerSideEncryptionConfiguration) *GetBucketEncryptionOutput {\n\ts.ServerSideEncryptionConfiguration = v\n\treturn s\n}\n\ntype GetBucketInventoryConfigurationInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The name of the bucket containing the inventory configuration to retrieve.\n\t//\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n\n\t// The ID used to identify the inventory configuration.\n\t//\n\t// Id is a required field\n\tId *string `location:\"querystring\" locationName:\"id\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s GetBucketInventoryConfigurationInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetBucketInventoryConfigurationInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *GetBucketInventoryConfigurationInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"GetBucketInventoryConfigurationInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\tif s.Id == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Id\"))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *GetBucketInventoryConfigurationInput) SetBucket(v string) *GetBucketInventoryConfigurationInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *GetBucketInventoryConfigurationInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetId sets the Id field's value.\nfunc (s *GetBucketInventoryConfigurationInput) SetId(v string) *GetBucketInventoryConfigurationInput {\n\ts.Id = &v\n\treturn s\n}\n\ntype GetBucketInventoryConfigurationOutput struct {\n\t_ struct{} `type:\"structure\" payload:\"InventoryConfiguration\"`\n\n\t// Specifies the inventory configuration.\n\tInventoryConfiguration *InventoryConfiguration `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s GetBucketInventoryConfigurationOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetBucketInventoryConfigurationOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetInventoryConfiguration sets the InventoryConfiguration field's value.\nfunc (s *GetBucketInventoryConfigurationOutput) SetInventoryConfiguration(v *InventoryConfiguration) *GetBucketInventoryConfigurationOutput {\n\ts.InventoryConfiguration = v\n\treturn s\n}\n\ntype GetBucketLifecycleConfigurationInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s GetBucketLifecycleConfigurationInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetBucketLifecycleConfigurationInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *GetBucketLifecycleConfigurationInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"GetBucketLifecycleConfigurationInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *GetBucketLifecycleConfigurationInput) SetBucket(v string) *GetBucketLifecycleConfigurationInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *GetBucketLifecycleConfigurationInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\ntype GetBucketLifecycleConfigurationOutput struct {\n\t_ struct{} `type:\"structure\"`\n\n\tRules []*LifecycleRule `locationName:\"Rule\" type:\"list\" flattened:\"true\"`\n}\n\n// String returns the string representation\nfunc (s GetBucketLifecycleConfigurationOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetBucketLifecycleConfigurationOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetRules sets the Rules field's value.\nfunc (s *GetBucketLifecycleConfigurationOutput) SetRules(v []*LifecycleRule) *GetBucketLifecycleConfigurationOutput {\n\ts.Rules = v\n\treturn s\n}\n\ntype GetBucketLifecycleInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s GetBucketLifecycleInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetBucketLifecycleInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *GetBucketLifecycleInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"GetBucketLifecycleInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *GetBucketLifecycleInput) SetBucket(v string) *GetBucketLifecycleInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *GetBucketLifecycleInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\ntype GetBucketLifecycleOutput struct {\n\t_ struct{} `type:\"structure\"`\n\n\tRules []*Rule `locationName:\"Rule\" type:\"list\" flattened:\"true\"`\n}\n\n// String returns the string representation\nfunc (s GetBucketLifecycleOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetBucketLifecycleOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetRules sets the Rules field's value.\nfunc (s *GetBucketLifecycleOutput) SetRules(v []*Rule) *GetBucketLifecycleOutput {\n\ts.Rules = v\n\treturn s\n}\n\ntype GetBucketLocationInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s GetBucketLocationInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetBucketLocationInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *GetBucketLocationInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"GetBucketLocationInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *GetBucketLocationInput) SetBucket(v string) *GetBucketLocationInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *GetBucketLocationInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\ntype GetBucketLocationOutput struct {\n\t_ struct{} `type:\"structure\"`\n\n\tLocationConstraint *string `type:\"string\" enum:\"BucketLocationConstraint\"`\n}\n\n// String returns the string representation\nfunc (s GetBucketLocationOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetBucketLocationOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetLocationConstraint sets the LocationConstraint field's value.\nfunc (s *GetBucketLocationOutput) SetLocationConstraint(v string) *GetBucketLocationOutput {\n\ts.LocationConstraint = &v\n\treturn s\n}\n\ntype GetBucketLoggingInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s GetBucketLoggingInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetBucketLoggingInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *GetBucketLoggingInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"GetBucketLoggingInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *GetBucketLoggingInput) SetBucket(v string) *GetBucketLoggingInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *GetBucketLoggingInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\ntype GetBucketLoggingOutput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Describes where logs are stored and the prefix that Amazon S3 assigns to\n\t// all log object keys for a bucket. For more information, see PUT Bucket logging\n\t// (https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTlogging.html)\n\t// in the Amazon Simple Storage Service API Reference.\n\tLoggingEnabled *LoggingEnabled `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s GetBucketLoggingOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetBucketLoggingOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetLoggingEnabled sets the LoggingEnabled field's value.\nfunc (s *GetBucketLoggingOutput) SetLoggingEnabled(v *LoggingEnabled) *GetBucketLoggingOutput {\n\ts.LoggingEnabled = v\n\treturn s\n}\n\ntype GetBucketMetricsConfigurationInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The name of the bucket containing the metrics configuration to retrieve.\n\t//\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n\n\t// The ID used to identify the metrics configuration.\n\t//\n\t// Id is a required field\n\tId *string `location:\"querystring\" locationName:\"id\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s GetBucketMetricsConfigurationInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetBucketMetricsConfigurationInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *GetBucketMetricsConfigurationInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"GetBucketMetricsConfigurationInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\tif s.Id == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Id\"))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *GetBucketMetricsConfigurationInput) SetBucket(v string) *GetBucketMetricsConfigurationInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *GetBucketMetricsConfigurationInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetId sets the Id field's value.\nfunc (s *GetBucketMetricsConfigurationInput) SetId(v string) *GetBucketMetricsConfigurationInput {\n\ts.Id = &v\n\treturn s\n}\n\ntype GetBucketMetricsConfigurationOutput struct {\n\t_ struct{} `type:\"structure\" payload:\"MetricsConfiguration\"`\n\n\t// Specifies the metrics configuration.\n\tMetricsConfiguration *MetricsConfiguration `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s GetBucketMetricsConfigurationOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetBucketMetricsConfigurationOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetMetricsConfiguration sets the MetricsConfiguration field's value.\nfunc (s *GetBucketMetricsConfigurationOutput) SetMetricsConfiguration(v *MetricsConfiguration) *GetBucketMetricsConfigurationOutput {\n\ts.MetricsConfiguration = v\n\treturn s\n}\n\ntype GetBucketNotificationConfigurationRequest struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Name of the bucket to get the notification configuration for.\n\t//\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s GetBucketNotificationConfigurationRequest) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetBucketNotificationConfigurationRequest) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *GetBucketNotificationConfigurationRequest) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"GetBucketNotificationConfigurationRequest\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *GetBucketNotificationConfigurationRequest) SetBucket(v string) *GetBucketNotificationConfigurationRequest {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *GetBucketNotificationConfigurationRequest) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\ntype GetBucketPolicyInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s GetBucketPolicyInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetBucketPolicyInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *GetBucketPolicyInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"GetBucketPolicyInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *GetBucketPolicyInput) SetBucket(v string) *GetBucketPolicyInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *GetBucketPolicyInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\ntype GetBucketPolicyOutput struct {\n\t_ struct{} `type:\"structure\" payload:\"Policy\"`\n\n\t// The bucket policy as a JSON document.\n\tPolicy *string `type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s GetBucketPolicyOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetBucketPolicyOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetPolicy sets the Policy field's value.\nfunc (s *GetBucketPolicyOutput) SetPolicy(v string) *GetBucketPolicyOutput {\n\ts.Policy = &v\n\treturn s\n}\n\ntype GetBucketPolicyStatusInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The name of the Amazon S3 bucket whose policy status you want to retrieve.\n\t//\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s GetBucketPolicyStatusInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetBucketPolicyStatusInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *GetBucketPolicyStatusInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"GetBucketPolicyStatusInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *GetBucketPolicyStatusInput) SetBucket(v string) *GetBucketPolicyStatusInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *GetBucketPolicyStatusInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\ntype GetBucketPolicyStatusOutput struct {\n\t_ struct{} `type:\"structure\" payload:\"PolicyStatus\"`\n\n\t// The policy status for the specified bucket.\n\tPolicyStatus *PolicyStatus `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s GetBucketPolicyStatusOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetBucketPolicyStatusOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetPolicyStatus sets the PolicyStatus field's value.\nfunc (s *GetBucketPolicyStatusOutput) SetPolicyStatus(v *PolicyStatus) *GetBucketPolicyStatusOutput {\n\ts.PolicyStatus = v\n\treturn s\n}\n\ntype GetBucketReplicationInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s GetBucketReplicationInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetBucketReplicationInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *GetBucketReplicationInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"GetBucketReplicationInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *GetBucketReplicationInput) SetBucket(v string) *GetBucketReplicationInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *GetBucketReplicationInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\ntype GetBucketReplicationOutput struct {\n\t_ struct{} `type:\"structure\" payload:\"ReplicationConfiguration\"`\n\n\t// A container for replication rules. You can add up to 1,000 rules. The maximum\n\t// size of a replication configuration is 2 MB.\n\tReplicationConfiguration *ReplicationConfiguration `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s GetBucketReplicationOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetBucketReplicationOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetReplicationConfiguration sets the ReplicationConfiguration field's value.\nfunc (s *GetBucketReplicationOutput) SetReplicationConfiguration(v *ReplicationConfiguration) *GetBucketReplicationOutput {\n\ts.ReplicationConfiguration = v\n\treturn s\n}\n\ntype GetBucketRequestPaymentInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s GetBucketRequestPaymentInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetBucketRequestPaymentInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *GetBucketRequestPaymentInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"GetBucketRequestPaymentInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *GetBucketRequestPaymentInput) SetBucket(v string) *GetBucketRequestPaymentInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *GetBucketRequestPaymentInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\ntype GetBucketRequestPaymentOutput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Specifies who pays for the download and request fees.\n\tPayer *string `type:\"string\" enum:\"Payer\"`\n}\n\n// String returns the string representation\nfunc (s GetBucketRequestPaymentOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetBucketRequestPaymentOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetPayer sets the Payer field's value.\nfunc (s *GetBucketRequestPaymentOutput) SetPayer(v string) *GetBucketRequestPaymentOutput {\n\ts.Payer = &v\n\treturn s\n}\n\ntype GetBucketTaggingInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s GetBucketTaggingInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetBucketTaggingInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *GetBucketTaggingInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"GetBucketTaggingInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *GetBucketTaggingInput) SetBucket(v string) *GetBucketTaggingInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *GetBucketTaggingInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\ntype GetBucketTaggingOutput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// TagSet is a required field\n\tTagSet []*Tag `locationNameList:\"Tag\" type:\"list\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s GetBucketTaggingOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetBucketTaggingOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetTagSet sets the TagSet field's value.\nfunc (s *GetBucketTaggingOutput) SetTagSet(v []*Tag) *GetBucketTaggingOutput {\n\ts.TagSet = v\n\treturn s\n}\n\ntype GetBucketVersioningInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s GetBucketVersioningInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetBucketVersioningInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *GetBucketVersioningInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"GetBucketVersioningInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *GetBucketVersioningInput) SetBucket(v string) *GetBucketVersioningInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *GetBucketVersioningInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\ntype GetBucketVersioningOutput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Specifies whether MFA delete is enabled in the bucket versioning configuration.\n\t// This element is only returned if the bucket has been configured with MFA\n\t// delete. If the bucket has never been so configured, this element is not returned.\n\tMFADelete *string `locationName:\"MfaDelete\" type:\"string\" enum:\"MFADeleteStatus\"`\n\n\t// The versioning state of the bucket.\n\tStatus *string `type:\"string\" enum:\"BucketVersioningStatus\"`\n}\n\n// String returns the string representation\nfunc (s GetBucketVersioningOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetBucketVersioningOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetMFADelete sets the MFADelete field's value.\nfunc (s *GetBucketVersioningOutput) SetMFADelete(v string) *GetBucketVersioningOutput {\n\ts.MFADelete = &v\n\treturn s\n}\n\n// SetStatus sets the Status field's value.\nfunc (s *GetBucketVersioningOutput) SetStatus(v string) *GetBucketVersioningOutput {\n\ts.Status = &v\n\treturn s\n}\n\ntype GetBucketWebsiteInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s GetBucketWebsiteInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetBucketWebsiteInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *GetBucketWebsiteInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"GetBucketWebsiteInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *GetBucketWebsiteInput) SetBucket(v string) *GetBucketWebsiteInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *GetBucketWebsiteInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\ntype GetBucketWebsiteOutput struct {\n\t_ struct{} `type:\"structure\"`\n\n\tErrorDocument *ErrorDocument `type:\"structure\"`\n\n\tIndexDocument *IndexDocument `type:\"structure\"`\n\n\t// Specifies the redirect behavior of all requests to a website endpoint of\n\t// an Amazon S3 bucket.\n\tRedirectAllRequestsTo *RedirectAllRequestsTo `type:\"structure\"`\n\n\tRoutingRules []*RoutingRule `locationNameList:\"RoutingRule\" type:\"list\"`\n}\n\n// String returns the string representation\nfunc (s GetBucketWebsiteOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetBucketWebsiteOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetErrorDocument sets the ErrorDocument field's value.\nfunc (s *GetBucketWebsiteOutput) SetErrorDocument(v *ErrorDocument) *GetBucketWebsiteOutput {\n\ts.ErrorDocument = v\n\treturn s\n}\n\n// SetIndexDocument sets the IndexDocument field's value.\nfunc (s *GetBucketWebsiteOutput) SetIndexDocument(v *IndexDocument) *GetBucketWebsiteOutput {\n\ts.IndexDocument = v\n\treturn s\n}\n\n// SetRedirectAllRequestsTo sets the RedirectAllRequestsTo field's value.\nfunc (s *GetBucketWebsiteOutput) SetRedirectAllRequestsTo(v *RedirectAllRequestsTo) *GetBucketWebsiteOutput {\n\ts.RedirectAllRequestsTo = v\n\treturn s\n}\n\n// SetRoutingRules sets the RoutingRules field's value.\nfunc (s *GetBucketWebsiteOutput) SetRoutingRules(v []*RoutingRule) *GetBucketWebsiteOutput {\n\ts.RoutingRules = v\n\treturn s\n}\n\ntype GetObjectAclInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n\n\t// Key is a required field\n\tKey *string `location:\"uri\" locationName:\"Key\" min:\"1\" type:\"string\" required:\"true\"`\n\n\t// Confirms that the requester knows that she or he will be charged for the\n\t// request. Bucket owners need not specify this parameter in their requests.\n\t// Documentation on downloading objects from requester pays buckets can be found\n\t// at http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html\n\tRequestPayer *string `location:\"header\" locationName:\"x-amz-request-payer\" type:\"string\" enum:\"RequestPayer\"`\n\n\t// VersionId used to reference a specific version of the object.\n\tVersionId *string `location:\"querystring\" locationName:\"versionId\" type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s GetObjectAclInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetObjectAclInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *GetObjectAclInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"GetObjectAclInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\tif s.Key == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Key\"))\n\t}\n\tif s.Key != nil && len(*s.Key) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Key\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *GetObjectAclInput) SetBucket(v string) *GetObjectAclInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *GetObjectAclInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetKey sets the Key field's value.\nfunc (s *GetObjectAclInput) SetKey(v string) *GetObjectAclInput {\n\ts.Key = &v\n\treturn s\n}\n\n// SetRequestPayer sets the RequestPayer field's value.\nfunc (s *GetObjectAclInput) SetRequestPayer(v string) *GetObjectAclInput {\n\ts.RequestPayer = &v\n\treturn s\n}\n\n// SetVersionId sets the VersionId field's value.\nfunc (s *GetObjectAclInput) SetVersionId(v string) *GetObjectAclInput {\n\ts.VersionId = &v\n\treturn s\n}\n\ntype GetObjectAclOutput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// A list of grants.\n\tGrants []*Grant `locationName:\"AccessControlList\" locationNameList:\"Grant\" type:\"list\"`\n\n\tOwner *Owner `type:\"structure\"`\n\n\t// If present, indicates that the requester was successfully charged for the\n\t// request.\n\tRequestCharged *string `location:\"header\" locationName:\"x-amz-request-charged\" type:\"string\" enum:\"RequestCharged\"`\n}\n\n// String returns the string representation\nfunc (s GetObjectAclOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetObjectAclOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetGrants sets the Grants field's value.\nfunc (s *GetObjectAclOutput) SetGrants(v []*Grant) *GetObjectAclOutput {\n\ts.Grants = v\n\treturn s\n}\n\n// SetOwner sets the Owner field's value.\nfunc (s *GetObjectAclOutput) SetOwner(v *Owner) *GetObjectAclOutput {\n\ts.Owner = v\n\treturn s\n}\n\n// SetRequestCharged sets the RequestCharged field's value.\nfunc (s *GetObjectAclOutput) SetRequestCharged(v string) *GetObjectAclOutput {\n\ts.RequestCharged = &v\n\treturn s\n}\n\ntype GetObjectInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n\n\t// Return the object only if its entity tag (ETag) is the same as the one specified,\n\t// otherwise return a 412 (precondition failed).\n\tIfMatch *string `location:\"header\" locationName:\"If-Match\" type:\"string\"`\n\n\t// Return the object only if it has been modified since the specified time,\n\t// otherwise return a 304 (not modified).\n\tIfModifiedSince *time.Time `location:\"header\" locationName:\"If-Modified-Since\" type:\"timestamp\"`\n\n\t// Return the object only if its entity tag (ETag) is different from the one\n\t// specified, otherwise return a 304 (not modified).\n\tIfNoneMatch *string `location:\"header\" locationName:\"If-None-Match\" type:\"string\"`\n\n\t// Return the object only if it has not been modified since the specified time,\n\t// otherwise return a 412 (precondition failed).\n\tIfUnmodifiedSince *time.Time `location:\"header\" locationName:\"If-Unmodified-Since\" type:\"timestamp\"`\n\n\t// Key is a required field\n\tKey *string `location:\"uri\" locationName:\"Key\" min:\"1\" type:\"string\" required:\"true\"`\n\n\t// Part number of the object being read. This is a positive integer between\n\t// 1 and 10,000. Effectively performs a 'ranged' GET request for the part specified.\n\t// Useful for downloading just a part of an object.\n\tPartNumber *int64 `location:\"querystring\" locationName:\"partNumber\" type:\"integer\"`\n\n\t// Downloads the specified range bytes of an object. For more information about\n\t// the HTTP Range header, go to http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35.\n\tRange *string `location:\"header\" locationName:\"Range\" type:\"string\"`\n\n\t// Confirms that the requester knows that she or he will be charged for the\n\t// request. Bucket owners need not specify this parameter in their requests.\n\t// Documentation on downloading objects from requester pays buckets can be found\n\t// at http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html\n\tRequestPayer *string `location:\"header\" locationName:\"x-amz-request-payer\" type:\"string\" enum:\"RequestPayer\"`\n\n\t// Sets the Cache-Control header of the response.\n\tResponseCacheControl *string `location:\"querystring\" locationName:\"response-cache-control\" type:\"string\"`\n\n\t// Sets the Content-Disposition header of the response\n\tResponseContentDisposition *string `location:\"querystring\" locationName:\"response-content-disposition\" type:\"string\"`\n\n\t// Sets the Content-Encoding header of the response.\n\tResponseContentEncoding *string `location:\"querystring\" locationName:\"response-content-encoding\" type:\"string\"`\n\n\t// Sets the Content-Language header of the response.\n\tResponseContentLanguage *string `location:\"querystring\" locationName:\"response-content-language\" type:\"string\"`\n\n\t// Sets the Content-Type header of the response.\n\tResponseContentType *string `location:\"querystring\" locationName:\"response-content-type\" type:\"string\"`\n\n\t// Sets the Expires header of the response.\n\tResponseExpires *time.Time `location:\"querystring\" locationName:\"response-expires\" type:\"timestamp\"`\n\n\t// Specifies the algorithm to use to when encrypting the object (e.g., AES256).\n\tSSECustomerAlgorithm *string `location:\"header\" locationName:\"x-amz-server-side-encryption-customer-algorithm\" type:\"string\"`\n\n\t// Specifies the customer-provided encryption key for Amazon S3 to use in encrypting\n\t// data. This value is used to store the object and then it is discarded; Amazon\n\t// does not store the encryption key. The key must be appropriate for use with\n\t// the algorithm specified in the x-amz-server-side​-encryption​-customer-algorithm\n\t// header.\n\tSSECustomerKey *string `marshal-as:\"blob\" location:\"header\" locationName:\"x-amz-server-side-encryption-customer-key\" type:\"string\" sensitive:\"true\"`\n\n\t// Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.\n\t// Amazon S3 uses this header for a message integrity check to ensure the encryption\n\t// key was transmitted without error.\n\tSSECustomerKeyMD5 *string `location:\"header\" locationName:\"x-amz-server-side-encryption-customer-key-MD5\" type:\"string\"`\n\n\t// VersionId used to reference a specific version of the object.\n\tVersionId *string `location:\"querystring\" locationName:\"versionId\" type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s GetObjectInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetObjectInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *GetObjectInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"GetObjectInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\tif s.Key == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Key\"))\n\t}\n\tif s.Key != nil && len(*s.Key) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Key\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *GetObjectInput) SetBucket(v string) *GetObjectInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *GetObjectInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetIfMatch sets the IfMatch field's value.\nfunc (s *GetObjectInput) SetIfMatch(v string) *GetObjectInput {\n\ts.IfMatch = &v\n\treturn s\n}\n\n// SetIfModifiedSince sets the IfModifiedSince field's value.\nfunc (s *GetObjectInput) SetIfModifiedSince(v time.Time) *GetObjectInput {\n\ts.IfModifiedSince = &v\n\treturn s\n}\n\n// SetIfNoneMatch sets the IfNoneMatch field's value.\nfunc (s *GetObjectInput) SetIfNoneMatch(v string) *GetObjectInput {\n\ts.IfNoneMatch = &v\n\treturn s\n}\n\n// SetIfUnmodifiedSince sets the IfUnmodifiedSince field's value.\nfunc (s *GetObjectInput) SetIfUnmodifiedSince(v time.Time) *GetObjectInput {\n\ts.IfUnmodifiedSince = &v\n\treturn s\n}\n\n// SetKey sets the Key field's value.\nfunc (s *GetObjectInput) SetKey(v string) *GetObjectInput {\n\ts.Key = &v\n\treturn s\n}\n\n// SetPartNumber sets the PartNumber field's value.\nfunc (s *GetObjectInput) SetPartNumber(v int64) *GetObjectInput {\n\ts.PartNumber = &v\n\treturn s\n}\n\n// SetRange sets the Range field's value.\nfunc (s *GetObjectInput) SetRange(v string) *GetObjectInput {\n\ts.Range = &v\n\treturn s\n}\n\n// SetRequestPayer sets the RequestPayer field's value.\nfunc (s *GetObjectInput) SetRequestPayer(v string) *GetObjectInput {\n\ts.RequestPayer = &v\n\treturn s\n}\n\n// SetResponseCacheControl sets the ResponseCacheControl field's value.\nfunc (s *GetObjectInput) SetResponseCacheControl(v string) *GetObjectInput {\n\ts.ResponseCacheControl = &v\n\treturn s\n}\n\n// SetResponseContentDisposition sets the ResponseContentDisposition field's value.\nfunc (s *GetObjectInput) SetResponseContentDisposition(v string) *GetObjectInput {\n\ts.ResponseContentDisposition = &v\n\treturn s\n}\n\n// SetResponseContentEncoding sets the ResponseContentEncoding field's value.\nfunc (s *GetObjectInput) SetResponseContentEncoding(v string) *GetObjectInput {\n\ts.ResponseContentEncoding = &v\n\treturn s\n}\n\n// SetResponseContentLanguage sets the ResponseContentLanguage field's value.\nfunc (s *GetObjectInput) SetResponseContentLanguage(v string) *GetObjectInput {\n\ts.ResponseContentLanguage = &v\n\treturn s\n}\n\n// SetResponseContentType sets the ResponseContentType field's value.\nfunc (s *GetObjectInput) SetResponseContentType(v string) *GetObjectInput {\n\ts.ResponseContentType = &v\n\treturn s\n}\n\n// SetResponseExpires sets the ResponseExpires field's value.\nfunc (s *GetObjectInput) SetResponseExpires(v time.Time) *GetObjectInput {\n\ts.ResponseExpires = &v\n\treturn s\n}\n\n// SetSSECustomerAlgorithm sets the SSECustomerAlgorithm field's value.\nfunc (s *GetObjectInput) SetSSECustomerAlgorithm(v string) *GetObjectInput {\n\ts.SSECustomerAlgorithm = &v\n\treturn s\n}\n\n// SetSSECustomerKey sets the SSECustomerKey field's value.\nfunc (s *GetObjectInput) SetSSECustomerKey(v string) *GetObjectInput {\n\ts.SSECustomerKey = &v\n\treturn s\n}\n\nfunc (s *GetObjectInput) getSSECustomerKey() (v string) {\n\tif s.SSECustomerKey == nil {\n\t\treturn v\n\t}\n\treturn *s.SSECustomerKey\n}\n\n// SetSSECustomerKeyMD5 sets the SSECustomerKeyMD5 field's value.\nfunc (s *GetObjectInput) SetSSECustomerKeyMD5(v string) *GetObjectInput {\n\ts.SSECustomerKeyMD5 = &v\n\treturn s\n}\n\n// SetVersionId sets the VersionId field's value.\nfunc (s *GetObjectInput) SetVersionId(v string) *GetObjectInput {\n\ts.VersionId = &v\n\treturn s\n}\n\ntype GetObjectLegalHoldInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The bucket containing the object whose Legal Hold status you want to retrieve.\n\t//\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n\n\t// The key name for the object whose Legal Hold status you want to retrieve.\n\t//\n\t// Key is a required field\n\tKey *string `location:\"uri\" locationName:\"Key\" min:\"1\" type:\"string\" required:\"true\"`\n\n\t// Confirms that the requester knows that she or he will be charged for the\n\t// request. Bucket owners need not specify this parameter in their requests.\n\t// Documentation on downloading objects from requester pays buckets can be found\n\t// at http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html\n\tRequestPayer *string `location:\"header\" locationName:\"x-amz-request-payer\" type:\"string\" enum:\"RequestPayer\"`\n\n\t// The version ID of the object whose Legal Hold status you want to retrieve.\n\tVersionId *string `location:\"querystring\" locationName:\"versionId\" type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s GetObjectLegalHoldInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetObjectLegalHoldInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *GetObjectLegalHoldInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"GetObjectLegalHoldInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\tif s.Key == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Key\"))\n\t}\n\tif s.Key != nil && len(*s.Key) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Key\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *GetObjectLegalHoldInput) SetBucket(v string) *GetObjectLegalHoldInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *GetObjectLegalHoldInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetKey sets the Key field's value.\nfunc (s *GetObjectLegalHoldInput) SetKey(v string) *GetObjectLegalHoldInput {\n\ts.Key = &v\n\treturn s\n}\n\n// SetRequestPayer sets the RequestPayer field's value.\nfunc (s *GetObjectLegalHoldInput) SetRequestPayer(v string) *GetObjectLegalHoldInput {\n\ts.RequestPayer = &v\n\treturn s\n}\n\n// SetVersionId sets the VersionId field's value.\nfunc (s *GetObjectLegalHoldInput) SetVersionId(v string) *GetObjectLegalHoldInput {\n\ts.VersionId = &v\n\treturn s\n}\n\ntype GetObjectLegalHoldOutput struct {\n\t_ struct{} `type:\"structure\" payload:\"LegalHold\"`\n\n\t// The current Legal Hold status for the specified object.\n\tLegalHold *ObjectLockLegalHold `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s GetObjectLegalHoldOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetObjectLegalHoldOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetLegalHold sets the LegalHold field's value.\nfunc (s *GetObjectLegalHoldOutput) SetLegalHold(v *ObjectLockLegalHold) *GetObjectLegalHoldOutput {\n\ts.LegalHold = v\n\treturn s\n}\n\ntype GetObjectLockConfigurationInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The bucket whose object lock configuration you want to retrieve.\n\t//\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s GetObjectLockConfigurationInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetObjectLockConfigurationInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *GetObjectLockConfigurationInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"GetObjectLockConfigurationInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *GetObjectLockConfigurationInput) SetBucket(v string) *GetObjectLockConfigurationInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *GetObjectLockConfigurationInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\ntype GetObjectLockConfigurationOutput struct {\n\t_ struct{} `type:\"structure\" payload:\"ObjectLockConfiguration\"`\n\n\t// The specified bucket's object lock configuration.\n\tObjectLockConfiguration *ObjectLockConfiguration `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s GetObjectLockConfigurationOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetObjectLockConfigurationOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetObjectLockConfiguration sets the ObjectLockConfiguration field's value.\nfunc (s *GetObjectLockConfigurationOutput) SetObjectLockConfiguration(v *ObjectLockConfiguration) *GetObjectLockConfigurationOutput {\n\ts.ObjectLockConfiguration = v\n\treturn s\n}\n\ntype GetObjectOutput struct {\n\t_ struct{} `type:\"structure\" payload:\"Body\"`\n\n\tAcceptRanges *string `location:\"header\" locationName:\"accept-ranges\" type:\"string\"`\n\n\t// Object data.\n\tBody io.ReadCloser `type:\"blob\"`\n\n\t// Specifies caching behavior along the request/reply chain.\n\tCacheControl *string `location:\"header\" locationName:\"Cache-Control\" type:\"string\"`\n\n\t// Specifies presentational information for the object.\n\tContentDisposition *string `location:\"header\" locationName:\"Content-Disposition\" type:\"string\"`\n\n\t// Specifies what content encodings have been applied to the object and thus\n\t// what decoding mechanisms must be applied to obtain the media-type referenced\n\t// by the Content-Type header field.\n\tContentEncoding *string `location:\"header\" locationName:\"Content-Encoding\" type:\"string\"`\n\n\t// The language the content is in.\n\tContentLanguage *string `location:\"header\" locationName:\"Content-Language\" type:\"string\"`\n\n\t// Size of the body in bytes.\n\tContentLength *int64 `location:\"header\" locationName:\"Content-Length\" type:\"long\"`\n\n\t// The portion of the object returned in the response.\n\tContentRange *string `location:\"header\" locationName:\"Content-Range\" type:\"string\"`\n\n\t// A standard MIME type describing the format of the object data.\n\tContentType *string `location:\"header\" locationName:\"Content-Type\" type:\"string\"`\n\n\t// Specifies whether the object retrieved was (true) or was not (false) a Delete\n\t// Marker. If false, this response header does not appear in the response.\n\tDeleteMarker *bool `location:\"header\" locationName:\"x-amz-delete-marker\" type:\"boolean\"`\n\n\t// An ETag is an opaque identifier assigned by a web server to a specific version\n\t// of a resource found at a URL\n\tETag *string `location:\"header\" locationName:\"ETag\" type:\"string\"`\n\n\t// If the object expiration is configured (see PUT Bucket lifecycle), the response\n\t// includes this header. It includes the expiry-date and rule-id key value pairs\n\t// providing object expiration information. The value of the rule-id is URL\n\t// encoded.\n\tExpiration *string `location:\"header\" locationName:\"x-amz-expiration\" type:\"string\"`\n\n\t// The date and time at which the object is no longer cacheable.\n\tExpires *string `location:\"header\" locationName:\"Expires\" type:\"string\"`\n\n\t// Last modified date of the object\n\tLastModified *time.Time `location:\"header\" locationName:\"Last-Modified\" type:\"timestamp\"`\n\n\t// A map of metadata to store with the object in S3.\n\tMetadata map[string]*string `location:\"headers\" locationName:\"x-amz-meta-\" type:\"map\"`\n\n\t// This is set to the number of metadata entries not returned in x-amz-meta\n\t// headers. This can happen if you create metadata using an API like SOAP that\n\t// supports more flexible metadata than the REST API. For example, using SOAP,\n\t// you can create metadata whose values are not legal HTTP headers.\n\tMissingMeta *int64 `location:\"header\" locationName:\"x-amz-missing-meta\" type:\"integer\"`\n\n\t// Indicates whether this object has an active legal hold. This field is only\n\t// returned if you have permission to view an object's legal hold status.\n\tObjectLockLegalHoldStatus *string `location:\"header\" locationName:\"x-amz-object-lock-legal-hold\" type:\"string\" enum:\"ObjectLockLegalHoldStatus\"`\n\n\t// The object lock mode currently in place for this object.\n\tObjectLockMode *string `location:\"header\" locationName:\"x-amz-object-lock-mode\" type:\"string\" enum:\"ObjectLockMode\"`\n\n\t// The date and time when this object's object lock will expire.\n\tObjectLockRetainUntilDate *time.Time `location:\"header\" locationName:\"x-amz-object-lock-retain-until-date\" type:\"timestamp\" timestampFormat:\"iso8601\"`\n\n\t// The count of parts this object has.\n\tPartsCount *int64 `location:\"header\" locationName:\"x-amz-mp-parts-count\" type:\"integer\"`\n\n\tReplicationStatus *string `location:\"header\" locationName:\"x-amz-replication-status\" type:\"string\" enum:\"ReplicationStatus\"`\n\n\t// If present, indicates that the requester was successfully charged for the\n\t// request.\n\tRequestCharged *string `location:\"header\" locationName:\"x-amz-request-charged\" type:\"string\" enum:\"RequestCharged\"`\n\n\t// Provides information about object restoration operation and expiration time\n\t// of the restored object copy.\n\tRestore *string `location:\"header\" locationName:\"x-amz-restore\" type:\"string\"`\n\n\t// If server-side encryption with a customer-provided encryption key was requested,\n\t// the response will include this header confirming the encryption algorithm\n\t// used.\n\tSSECustomerAlgorithm *string `location:\"header\" locationName:\"x-amz-server-side-encryption-customer-algorithm\" type:\"string\"`\n\n\t// If server-side encryption with a customer-provided encryption key was requested,\n\t// the response will include this header to provide round trip message integrity\n\t// verification of the customer-provided encryption key.\n\tSSECustomerKeyMD5 *string `location:\"header\" locationName:\"x-amz-server-side-encryption-customer-key-MD5\" type:\"string\"`\n\n\t// If present, specifies the ID of the AWS Key Management Service (KMS) master\n\t// encryption key that was used for the object.\n\tSSEKMSKeyId *string `location:\"header\" locationName:\"x-amz-server-side-encryption-aws-kms-key-id\" type:\"string\" sensitive:\"true\"`\n\n\t// The Server-side encryption algorithm used when storing this object in S3\n\t// (e.g., AES256, aws:kms).\n\tServerSideEncryption *string `location:\"header\" locationName:\"x-amz-server-side-encryption\" type:\"string\" enum:\"ServerSideEncryption\"`\n\n\tStorageClass *string `location:\"header\" locationName:\"x-amz-storage-class\" type:\"string\" enum:\"StorageClass\"`\n\n\t// The number of tags, if any, on the object.\n\tTagCount *int64 `location:\"header\" locationName:\"x-amz-tagging-count\" type:\"integer\"`\n\n\t// Version of the object.\n\tVersionId *string `location:\"header\" locationName:\"x-amz-version-id\" type:\"string\"`\n\n\t// If the bucket is configured as a website, redirects requests for this object\n\t// to another object in the same bucket or to an external URL. Amazon S3 stores\n\t// the value of this header in the object metadata.\n\tWebsiteRedirectLocation *string `location:\"header\" locationName:\"x-amz-website-redirect-location\" type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s GetObjectOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetObjectOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetAcceptRanges sets the AcceptRanges field's value.\nfunc (s *GetObjectOutput) SetAcceptRanges(v string) *GetObjectOutput {\n\ts.AcceptRanges = &v\n\treturn s\n}\n\n// SetBody sets the Body field's value.\nfunc (s *GetObjectOutput) SetBody(v io.ReadCloser) *GetObjectOutput {\n\ts.Body = v\n\treturn s\n}\n\n// SetCacheControl sets the CacheControl field's value.\nfunc (s *GetObjectOutput) SetCacheControl(v string) *GetObjectOutput {\n\ts.CacheControl = &v\n\treturn s\n}\n\n// SetContentDisposition sets the ContentDisposition field's value.\nfunc (s *GetObjectOutput) SetContentDisposition(v string) *GetObjectOutput {\n\ts.ContentDisposition = &v\n\treturn s\n}\n\n// SetContentEncoding sets the ContentEncoding field's value.\nfunc (s *GetObjectOutput) SetContentEncoding(v string) *GetObjectOutput {\n\ts.ContentEncoding = &v\n\treturn s\n}\n\n// SetContentLanguage sets the ContentLanguage field's value.\nfunc (s *GetObjectOutput) SetContentLanguage(v string) *GetObjectOutput {\n\ts.ContentLanguage = &v\n\treturn s\n}\n\n// SetContentLength sets the ContentLength field's value.\nfunc (s *GetObjectOutput) SetContentLength(v int64) *GetObjectOutput {\n\ts.ContentLength = &v\n\treturn s\n}\n\n// SetContentRange sets the ContentRange field's value.\nfunc (s *GetObjectOutput) SetContentRange(v string) *GetObjectOutput {\n\ts.ContentRange = &v\n\treturn s\n}\n\n// SetContentType sets the ContentType field's value.\nfunc (s *GetObjectOutput) SetContentType(v string) *GetObjectOutput {\n\ts.ContentType = &v\n\treturn s\n}\n\n// SetDeleteMarker sets the DeleteMarker field's value.\nfunc (s *GetObjectOutput) SetDeleteMarker(v bool) *GetObjectOutput {\n\ts.DeleteMarker = &v\n\treturn s\n}\n\n// SetETag sets the ETag field's value.\nfunc (s *GetObjectOutput) SetETag(v string) *GetObjectOutput {\n\ts.ETag = &v\n\treturn s\n}\n\n// SetExpiration sets the Expiration field's value.\nfunc (s *GetObjectOutput) SetExpiration(v string) *GetObjectOutput {\n\ts.Expiration = &v\n\treturn s\n}\n\n// SetExpires sets the Expires field's value.\nfunc (s *GetObjectOutput) SetExpires(v string) *GetObjectOutput {\n\ts.Expires = &v\n\treturn s\n}\n\n// SetLastModified sets the LastModified field's value.\nfunc (s *GetObjectOutput) SetLastModified(v time.Time) *GetObjectOutput {\n\ts.LastModified = &v\n\treturn s\n}\n\n// SetMetadata sets the Metadata field's value.\nfunc (s *GetObjectOutput) SetMetadata(v map[string]*string) *GetObjectOutput {\n\ts.Metadata = v\n\treturn s\n}\n\n// SetMissingMeta sets the MissingMeta field's value.\nfunc (s *GetObjectOutput) SetMissingMeta(v int64) *GetObjectOutput {\n\ts.MissingMeta = &v\n\treturn s\n}\n\n// SetObjectLockLegalHoldStatus sets the ObjectLockLegalHoldStatus field's value.\nfunc (s *GetObjectOutput) SetObjectLockLegalHoldStatus(v string) *GetObjectOutput {\n\ts.ObjectLockLegalHoldStatus = &v\n\treturn s\n}\n\n// SetObjectLockMode sets the ObjectLockMode field's value.\nfunc (s *GetObjectOutput) SetObjectLockMode(v string) *GetObjectOutput {\n\ts.ObjectLockMode = &v\n\treturn s\n}\n\n// SetObjectLockRetainUntilDate sets the ObjectLockRetainUntilDate field's value.\nfunc (s *GetObjectOutput) SetObjectLockRetainUntilDate(v time.Time) *GetObjectOutput {\n\ts.ObjectLockRetainUntilDate = &v\n\treturn s\n}\n\n// SetPartsCount sets the PartsCount field's value.\nfunc (s *GetObjectOutput) SetPartsCount(v int64) *GetObjectOutput {\n\ts.PartsCount = &v\n\treturn s\n}\n\n// SetReplicationStatus sets the ReplicationStatus field's value.\nfunc (s *GetObjectOutput) SetReplicationStatus(v string) *GetObjectOutput {\n\ts.ReplicationStatus = &v\n\treturn s\n}\n\n// SetRequestCharged sets the RequestCharged field's value.\nfunc (s *GetObjectOutput) SetRequestCharged(v string) *GetObjectOutput {\n\ts.RequestCharged = &v\n\treturn s\n}\n\n// SetRestore sets the Restore field's value.\nfunc (s *GetObjectOutput) SetRestore(v string) *GetObjectOutput {\n\ts.Restore = &v\n\treturn s\n}\n\n// SetSSECustomerAlgorithm sets the SSECustomerAlgorithm field's value.\nfunc (s *GetObjectOutput) SetSSECustomerAlgorithm(v string) *GetObjectOutput {\n\ts.SSECustomerAlgorithm = &v\n\treturn s\n}\n\n// SetSSECustomerKeyMD5 sets the SSECustomerKeyMD5 field's value.\nfunc (s *GetObjectOutput) SetSSECustomerKeyMD5(v string) *GetObjectOutput {\n\ts.SSECustomerKeyMD5 = &v\n\treturn s\n}\n\n// SetSSEKMSKeyId sets the SSEKMSKeyId field's value.\nfunc (s *GetObjectOutput) SetSSEKMSKeyId(v string) *GetObjectOutput {\n\ts.SSEKMSKeyId = &v\n\treturn s\n}\n\n// SetServerSideEncryption sets the ServerSideEncryption field's value.\nfunc (s *GetObjectOutput) SetServerSideEncryption(v string) *GetObjectOutput {\n\ts.ServerSideEncryption = &v\n\treturn s\n}\n\n// SetStorageClass sets the StorageClass field's value.\nfunc (s *GetObjectOutput) SetStorageClass(v string) *GetObjectOutput {\n\ts.StorageClass = &v\n\treturn s\n}\n\n// SetTagCount sets the TagCount field's value.\nfunc (s *GetObjectOutput) SetTagCount(v int64) *GetObjectOutput {\n\ts.TagCount = &v\n\treturn s\n}\n\n// SetVersionId sets the VersionId field's value.\nfunc (s *GetObjectOutput) SetVersionId(v string) *GetObjectOutput {\n\ts.VersionId = &v\n\treturn s\n}\n\n// SetWebsiteRedirectLocation sets the WebsiteRedirectLocation field's value.\nfunc (s *GetObjectOutput) SetWebsiteRedirectLocation(v string) *GetObjectOutput {\n\ts.WebsiteRedirectLocation = &v\n\treturn s\n}\n\ntype GetObjectRetentionInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The bucket containing the object whose retention settings you want to retrieve.\n\t//\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n\n\t// The key name for the object whose retention settings you want to retrieve.\n\t//\n\t// Key is a required field\n\tKey *string `location:\"uri\" locationName:\"Key\" min:\"1\" type:\"string\" required:\"true\"`\n\n\t// Confirms that the requester knows that she or he will be charged for the\n\t// request. Bucket owners need not specify this parameter in their requests.\n\t// Documentation on downloading objects from requester pays buckets can be found\n\t// at http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html\n\tRequestPayer *string `location:\"header\" locationName:\"x-amz-request-payer\" type:\"string\" enum:\"RequestPayer\"`\n\n\t// The version ID for the object whose retention settings you want to retrieve.\n\tVersionId *string `location:\"querystring\" locationName:\"versionId\" type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s GetObjectRetentionInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetObjectRetentionInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *GetObjectRetentionInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"GetObjectRetentionInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\tif s.Key == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Key\"))\n\t}\n\tif s.Key != nil && len(*s.Key) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Key\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *GetObjectRetentionInput) SetBucket(v string) *GetObjectRetentionInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *GetObjectRetentionInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetKey sets the Key field's value.\nfunc (s *GetObjectRetentionInput) SetKey(v string) *GetObjectRetentionInput {\n\ts.Key = &v\n\treturn s\n}\n\n// SetRequestPayer sets the RequestPayer field's value.\nfunc (s *GetObjectRetentionInput) SetRequestPayer(v string) *GetObjectRetentionInput {\n\ts.RequestPayer = &v\n\treturn s\n}\n\n// SetVersionId sets the VersionId field's value.\nfunc (s *GetObjectRetentionInput) SetVersionId(v string) *GetObjectRetentionInput {\n\ts.VersionId = &v\n\treturn s\n}\n\ntype GetObjectRetentionOutput struct {\n\t_ struct{} `type:\"structure\" payload:\"Retention\"`\n\n\t// The container element for an object's retention settings.\n\tRetention *ObjectLockRetention `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s GetObjectRetentionOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetObjectRetentionOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetRetention sets the Retention field's value.\nfunc (s *GetObjectRetentionOutput) SetRetention(v *ObjectLockRetention) *GetObjectRetentionOutput {\n\ts.Retention = v\n\treturn s\n}\n\ntype GetObjectTaggingInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n\n\t// Key is a required field\n\tKey *string `location:\"uri\" locationName:\"Key\" min:\"1\" type:\"string\" required:\"true\"`\n\n\tVersionId *string `location:\"querystring\" locationName:\"versionId\" type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s GetObjectTaggingInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetObjectTaggingInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *GetObjectTaggingInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"GetObjectTaggingInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\tif s.Key == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Key\"))\n\t}\n\tif s.Key != nil && len(*s.Key) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Key\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *GetObjectTaggingInput) SetBucket(v string) *GetObjectTaggingInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *GetObjectTaggingInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetKey sets the Key field's value.\nfunc (s *GetObjectTaggingInput) SetKey(v string) *GetObjectTaggingInput {\n\ts.Key = &v\n\treturn s\n}\n\n// SetVersionId sets the VersionId field's value.\nfunc (s *GetObjectTaggingInput) SetVersionId(v string) *GetObjectTaggingInput {\n\ts.VersionId = &v\n\treturn s\n}\n\ntype GetObjectTaggingOutput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// TagSet is a required field\n\tTagSet []*Tag `locationNameList:\"Tag\" type:\"list\" required:\"true\"`\n\n\tVersionId *string `location:\"header\" locationName:\"x-amz-version-id\" type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s GetObjectTaggingOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetObjectTaggingOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetTagSet sets the TagSet field's value.\nfunc (s *GetObjectTaggingOutput) SetTagSet(v []*Tag) *GetObjectTaggingOutput {\n\ts.TagSet = v\n\treturn s\n}\n\n// SetVersionId sets the VersionId field's value.\nfunc (s *GetObjectTaggingOutput) SetVersionId(v string) *GetObjectTaggingOutput {\n\ts.VersionId = &v\n\treturn s\n}\n\ntype GetObjectTorrentInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n\n\t// Key is a required field\n\tKey *string `location:\"uri\" locationName:\"Key\" min:\"1\" type:\"string\" required:\"true\"`\n\n\t// Confirms that the requester knows that she or he will be charged for the\n\t// request. Bucket owners need not specify this parameter in their requests.\n\t// Documentation on downloading objects from requester pays buckets can be found\n\t// at http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html\n\tRequestPayer *string `location:\"header\" locationName:\"x-amz-request-payer\" type:\"string\" enum:\"RequestPayer\"`\n}\n\n// String returns the string representation\nfunc (s GetObjectTorrentInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetObjectTorrentInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *GetObjectTorrentInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"GetObjectTorrentInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\tif s.Key == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Key\"))\n\t}\n\tif s.Key != nil && len(*s.Key) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Key\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *GetObjectTorrentInput) SetBucket(v string) *GetObjectTorrentInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *GetObjectTorrentInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetKey sets the Key field's value.\nfunc (s *GetObjectTorrentInput) SetKey(v string) *GetObjectTorrentInput {\n\ts.Key = &v\n\treturn s\n}\n\n// SetRequestPayer sets the RequestPayer field's value.\nfunc (s *GetObjectTorrentInput) SetRequestPayer(v string) *GetObjectTorrentInput {\n\ts.RequestPayer = &v\n\treturn s\n}\n\ntype GetObjectTorrentOutput struct {\n\t_ struct{} `type:\"structure\" payload:\"Body\"`\n\n\tBody io.ReadCloser `type:\"blob\"`\n\n\t// If present, indicates that the requester was successfully charged for the\n\t// request.\n\tRequestCharged *string `location:\"header\" locationName:\"x-amz-request-charged\" type:\"string\" enum:\"RequestCharged\"`\n}\n\n// String returns the string representation\nfunc (s GetObjectTorrentOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetObjectTorrentOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetBody sets the Body field's value.\nfunc (s *GetObjectTorrentOutput) SetBody(v io.ReadCloser) *GetObjectTorrentOutput {\n\ts.Body = v\n\treturn s\n}\n\n// SetRequestCharged sets the RequestCharged field's value.\nfunc (s *GetObjectTorrentOutput) SetRequestCharged(v string) *GetObjectTorrentOutput {\n\ts.RequestCharged = &v\n\treturn s\n}\n\ntype GetPublicAccessBlockInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The name of the Amazon S3 bucket whose PublicAccessBlock configuration you\n\t// want to retrieve.\n\t//\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s GetPublicAccessBlockInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetPublicAccessBlockInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *GetPublicAccessBlockInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"GetPublicAccessBlockInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *GetPublicAccessBlockInput) SetBucket(v string) *GetPublicAccessBlockInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *GetPublicAccessBlockInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\ntype GetPublicAccessBlockOutput struct {\n\t_ struct{} `type:\"structure\" payload:\"PublicAccessBlockConfiguration\"`\n\n\t// The PublicAccessBlock configuration currently in effect for this Amazon S3\n\t// bucket.\n\tPublicAccessBlockConfiguration *PublicAccessBlockConfiguration `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s GetPublicAccessBlockOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetPublicAccessBlockOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetPublicAccessBlockConfiguration sets the PublicAccessBlockConfiguration field's value.\nfunc (s *GetPublicAccessBlockOutput) SetPublicAccessBlockConfiguration(v *PublicAccessBlockConfiguration) *GetPublicAccessBlockOutput {\n\ts.PublicAccessBlockConfiguration = v\n\treturn s\n}\n\ntype GlacierJobParameters struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Glacier retrieval tier at which the restore will be processed.\n\t//\n\t// Tier is a required field\n\tTier *string `type:\"string\" required:\"true\" enum:\"Tier\"`\n}\n\n// String returns the string representation\nfunc (s GlacierJobParameters) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GlacierJobParameters) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *GlacierJobParameters) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"GlacierJobParameters\"}\n\tif s.Tier == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Tier\"))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetTier sets the Tier field's value.\nfunc (s *GlacierJobParameters) SetTier(v string) *GlacierJobParameters {\n\ts.Tier = &v\n\treturn s\n}\n\ntype Grant struct {\n\t_ struct{} `type:\"structure\"`\n\n\tGrantee *Grantee `type:\"structure\" xmlPrefix:\"xsi\" xmlURI:\"http://www.w3.org/2001/XMLSchema-instance\"`\n\n\t// Specifies the permission given to the grantee.\n\tPermission *string `type:\"string\" enum:\"Permission\"`\n}\n\n// String returns the string representation\nfunc (s Grant) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s Grant) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *Grant) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"Grant\"}\n\tif s.Grantee != nil {\n\t\tif err := s.Grantee.Validate(); err != nil {\n\t\t\tinvalidParams.AddNested(\"Grantee\", err.(request.ErrInvalidParams))\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetGrantee sets the Grantee field's value.\nfunc (s *Grant) SetGrantee(v *Grantee) *Grant {\n\ts.Grantee = v\n\treturn s\n}\n\n// SetPermission sets the Permission field's value.\nfunc (s *Grant) SetPermission(v string) *Grant {\n\ts.Permission = &v\n\treturn s\n}\n\ntype Grantee struct {\n\t_ struct{} `type:\"structure\" xmlPrefix:\"xsi\" xmlURI:\"http://www.w3.org/2001/XMLSchema-instance\"`\n\n\t// Screen name of the grantee.\n\tDisplayName *string `type:\"string\"`\n\n\t// Email address of the grantee.\n\tEmailAddress *string `type:\"string\"`\n\n\t// The canonical user ID of the grantee.\n\tID *string `type:\"string\"`\n\n\t// Type of grantee\n\t//\n\t// Type is a required field\n\tType *string `locationName:\"xsi:type\" type:\"string\" xmlAttribute:\"true\" required:\"true\" enum:\"Type\"`\n\n\t// URI of the grantee group.\n\tURI *string `type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s Grantee) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s Grantee) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *Grantee) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"Grantee\"}\n\tif s.Type == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Type\"))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetDisplayName sets the DisplayName field's value.\nfunc (s *Grantee) SetDisplayName(v string) *Grantee {\n\ts.DisplayName = &v\n\treturn s\n}\n\n// SetEmailAddress sets the EmailAddress field's value.\nfunc (s *Grantee) SetEmailAddress(v string) *Grantee {\n\ts.EmailAddress = &v\n\treturn s\n}\n\n// SetID sets the ID field's value.\nfunc (s *Grantee) SetID(v string) *Grantee {\n\ts.ID = &v\n\treturn s\n}\n\n// SetType sets the Type field's value.\nfunc (s *Grantee) SetType(v string) *Grantee {\n\ts.Type = &v\n\treturn s\n}\n\n// SetURI sets the URI field's value.\nfunc (s *Grantee) SetURI(v string) *Grantee {\n\ts.URI = &v\n\treturn s\n}\n\ntype HeadBucketInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s HeadBucketInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s HeadBucketInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *HeadBucketInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"HeadBucketInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *HeadBucketInput) SetBucket(v string) *HeadBucketInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *HeadBucketInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\ntype HeadBucketOutput struct {\n\t_ struct{} `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s HeadBucketOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s HeadBucketOutput) GoString() string {\n\treturn s.String()\n}\n\ntype HeadObjectInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n\n\t// Return the object only if its entity tag (ETag) is the same as the one specified,\n\t// otherwise return a 412 (precondition failed).\n\tIfMatch *string `location:\"header\" locationName:\"If-Match\" type:\"string\"`\n\n\t// Return the object only if it has been modified since the specified time,\n\t// otherwise return a 304 (not modified).\n\tIfModifiedSince *time.Time `location:\"header\" locationName:\"If-Modified-Since\" type:\"timestamp\"`\n\n\t// Return the object only if its entity tag (ETag) is different from the one\n\t// specified, otherwise return a 304 (not modified).\n\tIfNoneMatch *string `location:\"header\" locationName:\"If-None-Match\" type:\"string\"`\n\n\t// Return the object only if it has not been modified since the specified time,\n\t// otherwise return a 412 (precondition failed).\n\tIfUnmodifiedSince *time.Time `location:\"header\" locationName:\"If-Unmodified-Since\" type:\"timestamp\"`\n\n\t// Key is a required field\n\tKey *string `location:\"uri\" locationName:\"Key\" min:\"1\" type:\"string\" required:\"true\"`\n\n\t// Part number of the object being read. This is a positive integer between\n\t// 1 and 10,000. Effectively performs a 'ranged' HEAD request for the part specified.\n\t// Useful querying about the size of the part and the number of parts in this\n\t// object.\n\tPartNumber *int64 `location:\"querystring\" locationName:\"partNumber\" type:\"integer\"`\n\n\t// Downloads the specified range bytes of an object. For more information about\n\t// the HTTP Range header, go to http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35.\n\tRange *string `location:\"header\" locationName:\"Range\" type:\"string\"`\n\n\t// Confirms that the requester knows that she or he will be charged for the\n\t// request. Bucket owners need not specify this parameter in their requests.\n\t// Documentation on downloading objects from requester pays buckets can be found\n\t// at http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html\n\tRequestPayer *string `location:\"header\" locationName:\"x-amz-request-payer\" type:\"string\" enum:\"RequestPayer\"`\n\n\t// Specifies the algorithm to use to when encrypting the object (e.g., AES256).\n\tSSECustomerAlgorithm *string `location:\"header\" locationName:\"x-amz-server-side-encryption-customer-algorithm\" type:\"string\"`\n\n\t// Specifies the customer-provided encryption key for Amazon S3 to use in encrypting\n\t// data. This value is used to store the object and then it is discarded; Amazon\n\t// does not store the encryption key. The key must be appropriate for use with\n\t// the algorithm specified in the x-amz-server-side​-encryption​-customer-algorithm\n\t// header.\n\tSSECustomerKey *string `marshal-as:\"blob\" location:\"header\" locationName:\"x-amz-server-side-encryption-customer-key\" type:\"string\" sensitive:\"true\"`\n\n\t// Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.\n\t// Amazon S3 uses this header for a message integrity check to ensure the encryption\n\t// key was transmitted without error.\n\tSSECustomerKeyMD5 *string `location:\"header\" locationName:\"x-amz-server-side-encryption-customer-key-MD5\" type:\"string\"`\n\n\t// VersionId used to reference a specific version of the object.\n\tVersionId *string `location:\"querystring\" locationName:\"versionId\" type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s HeadObjectInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s HeadObjectInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *HeadObjectInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"HeadObjectInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\tif s.Key == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Key\"))\n\t}\n\tif s.Key != nil && len(*s.Key) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Key\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *HeadObjectInput) SetBucket(v string) *HeadObjectInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *HeadObjectInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetIfMatch sets the IfMatch field's value.\nfunc (s *HeadObjectInput) SetIfMatch(v string) *HeadObjectInput {\n\ts.IfMatch = &v\n\treturn s\n}\n\n// SetIfModifiedSince sets the IfModifiedSince field's value.\nfunc (s *HeadObjectInput) SetIfModifiedSince(v time.Time) *HeadObjectInput {\n\ts.IfModifiedSince = &v\n\treturn s\n}\n\n// SetIfNoneMatch sets the IfNoneMatch field's value.\nfunc (s *HeadObjectInput) SetIfNoneMatch(v string) *HeadObjectInput {\n\ts.IfNoneMatch = &v\n\treturn s\n}\n\n// SetIfUnmodifiedSince sets the IfUnmodifiedSince field's value.\nfunc (s *HeadObjectInput) SetIfUnmodifiedSince(v time.Time) *HeadObjectInput {\n\ts.IfUnmodifiedSince = &v\n\treturn s\n}\n\n// SetKey sets the Key field's value.\nfunc (s *HeadObjectInput) SetKey(v string) *HeadObjectInput {\n\ts.Key = &v\n\treturn s\n}\n\n// SetPartNumber sets the PartNumber field's value.\nfunc (s *HeadObjectInput) SetPartNumber(v int64) *HeadObjectInput {\n\ts.PartNumber = &v\n\treturn s\n}\n\n// SetRange sets the Range field's value.\nfunc (s *HeadObjectInput) SetRange(v string) *HeadObjectInput {\n\ts.Range = &v\n\treturn s\n}\n\n// SetRequestPayer sets the RequestPayer field's value.\nfunc (s *HeadObjectInput) SetRequestPayer(v string) *HeadObjectInput {\n\ts.RequestPayer = &v\n\treturn s\n}\n\n// SetSSECustomerAlgorithm sets the SSECustomerAlgorithm field's value.\nfunc (s *HeadObjectInput) SetSSECustomerAlgorithm(v string) *HeadObjectInput {\n\ts.SSECustomerAlgorithm = &v\n\treturn s\n}\n\n// SetSSECustomerKey sets the SSECustomerKey field's value.\nfunc (s *HeadObjectInput) SetSSECustomerKey(v string) *HeadObjectInput {\n\ts.SSECustomerKey = &v\n\treturn s\n}\n\nfunc (s *HeadObjectInput) getSSECustomerKey() (v string) {\n\tif s.SSECustomerKey == nil {\n\t\treturn v\n\t}\n\treturn *s.SSECustomerKey\n}\n\n// SetSSECustomerKeyMD5 sets the SSECustomerKeyMD5 field's value.\nfunc (s *HeadObjectInput) SetSSECustomerKeyMD5(v string) *HeadObjectInput {\n\ts.SSECustomerKeyMD5 = &v\n\treturn s\n}\n\n// SetVersionId sets the VersionId field's value.\nfunc (s *HeadObjectInput) SetVersionId(v string) *HeadObjectInput {\n\ts.VersionId = &v\n\treturn s\n}\n\ntype HeadObjectOutput struct {\n\t_ struct{} `type:\"structure\"`\n\n\tAcceptRanges *string `location:\"header\" locationName:\"accept-ranges\" type:\"string\"`\n\n\t// Specifies caching behavior along the request/reply chain.\n\tCacheControl *string `location:\"header\" locationName:\"Cache-Control\" type:\"string\"`\n\n\t// Specifies presentational information for the object.\n\tContentDisposition *string `location:\"header\" locationName:\"Content-Disposition\" type:\"string\"`\n\n\t// Specifies what content encodings have been applied to the object and thus\n\t// what decoding mechanisms must be applied to obtain the media-type referenced\n\t// by the Content-Type header field.\n\tContentEncoding *string `location:\"header\" locationName:\"Content-Encoding\" type:\"string\"`\n\n\t// The language the content is in.\n\tContentLanguage *string `location:\"header\" locationName:\"Content-Language\" type:\"string\"`\n\n\t// Size of the body in bytes.\n\tContentLength *int64 `location:\"header\" locationName:\"Content-Length\" type:\"long\"`\n\n\t// A standard MIME type describing the format of the object data.\n\tContentType *string `location:\"header\" locationName:\"Content-Type\" type:\"string\"`\n\n\t// Specifies whether the object retrieved was (true) or was not (false) a Delete\n\t// Marker. If false, this response header does not appear in the response.\n\tDeleteMarker *bool `location:\"header\" locationName:\"x-amz-delete-marker\" type:\"boolean\"`\n\n\t// An ETag is an opaque identifier assigned by a web server to a specific version\n\t// of a resource found at a URL\n\tETag *string `location:\"header\" locationName:\"ETag\" type:\"string\"`\n\n\t// If the object expiration is configured (see PUT Bucket lifecycle), the response\n\t// includes this header. It includes the expiry-date and rule-id key value pairs\n\t// providing object expiration information. The value of the rule-id is URL\n\t// encoded.\n\tExpiration *string `location:\"header\" locationName:\"x-amz-expiration\" type:\"string\"`\n\n\t// The date and time at which the object is no longer cacheable.\n\tExpires *string `location:\"header\" locationName:\"Expires\" type:\"string\"`\n\n\t// Last modified date of the object\n\tLastModified *time.Time `location:\"header\" locationName:\"Last-Modified\" type:\"timestamp\"`\n\n\t// A map of metadata to store with the object in S3.\n\tMetadata map[string]*string `location:\"headers\" locationName:\"x-amz-meta-\" type:\"map\"`\n\n\t// This is set to the number of metadata entries not returned in x-amz-meta\n\t// headers. This can happen if you create metadata using an API like SOAP that\n\t// supports more flexible metadata than the REST API. For example, using SOAP,\n\t// you can create metadata whose values are not legal HTTP headers.\n\tMissingMeta *int64 `location:\"header\" locationName:\"x-amz-missing-meta\" type:\"integer\"`\n\n\t// The Legal Hold status for the specified object.\n\tObjectLockLegalHoldStatus *string `location:\"header\" locationName:\"x-amz-object-lock-legal-hold\" type:\"string\" enum:\"ObjectLockLegalHoldStatus\"`\n\n\t// The object lock mode currently in place for this object.\n\tObjectLockMode *string `location:\"header\" locationName:\"x-amz-object-lock-mode\" type:\"string\" enum:\"ObjectLockMode\"`\n\n\t// The date and time when this object's object lock expires.\n\tObjectLockRetainUntilDate *time.Time `location:\"header\" locationName:\"x-amz-object-lock-retain-until-date\" type:\"timestamp\" timestampFormat:\"iso8601\"`\n\n\t// The count of parts this object has.\n\tPartsCount *int64 `location:\"header\" locationName:\"x-amz-mp-parts-count\" type:\"integer\"`\n\n\tReplicationStatus *string `location:\"header\" locationName:\"x-amz-replication-status\" type:\"string\" enum:\"ReplicationStatus\"`\n\n\t// If present, indicates that the requester was successfully charged for the\n\t// request.\n\tRequestCharged *string `location:\"header\" locationName:\"x-amz-request-charged\" type:\"string\" enum:\"RequestCharged\"`\n\n\t// Provides information about object restoration operation and expiration time\n\t// of the restored object copy.\n\tRestore *string `location:\"header\" locationName:\"x-amz-restore\" type:\"string\"`\n\n\t// If server-side encryption with a customer-provided encryption key was requested,\n\t// the response will include this header confirming the encryption algorithm\n\t// used.\n\tSSECustomerAlgorithm *string `location:\"header\" locationName:\"x-amz-server-side-encryption-customer-algorithm\" type:\"string\"`\n\n\t// If server-side encryption with a customer-provided encryption key was requested,\n\t// the response will include this header to provide round trip message integrity\n\t// verification of the customer-provided encryption key.\n\tSSECustomerKeyMD5 *string `location:\"header\" locationName:\"x-amz-server-side-encryption-customer-key-MD5\" type:\"string\"`\n\n\t// If present, specifies the ID of the AWS Key Management Service (KMS) master\n\t// encryption key that was used for the object.\n\tSSEKMSKeyId *string `location:\"header\" locationName:\"x-amz-server-side-encryption-aws-kms-key-id\" type:\"string\" sensitive:\"true\"`\n\n\t// The Server-side encryption algorithm used when storing this object in S3\n\t// (e.g., AES256, aws:kms).\n\tServerSideEncryption *string `location:\"header\" locationName:\"x-amz-server-side-encryption\" type:\"string\" enum:\"ServerSideEncryption\"`\n\n\tStorageClass *string `location:\"header\" locationName:\"x-amz-storage-class\" type:\"string\" enum:\"StorageClass\"`\n\n\t// Version of the object.\n\tVersionId *string `location:\"header\" locationName:\"x-amz-version-id\" type:\"string\"`\n\n\t// If the bucket is configured as a website, redirects requests for this object\n\t// to another object in the same bucket or to an external URL. Amazon S3 stores\n\t// the value of this header in the object metadata.\n\tWebsiteRedirectLocation *string `location:\"header\" locationName:\"x-amz-website-redirect-location\" type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s HeadObjectOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s HeadObjectOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetAcceptRanges sets the AcceptRanges field's value.\nfunc (s *HeadObjectOutput) SetAcceptRanges(v string) *HeadObjectOutput {\n\ts.AcceptRanges = &v\n\treturn s\n}\n\n// SetCacheControl sets the CacheControl field's value.\nfunc (s *HeadObjectOutput) SetCacheControl(v string) *HeadObjectOutput {\n\ts.CacheControl = &v\n\treturn s\n}\n\n// SetContentDisposition sets the ContentDisposition field's value.\nfunc (s *HeadObjectOutput) SetContentDisposition(v string) *HeadObjectOutput {\n\ts.ContentDisposition = &v\n\treturn s\n}\n\n// SetContentEncoding sets the ContentEncoding field's value.\nfunc (s *HeadObjectOutput) SetContentEncoding(v string) *HeadObjectOutput {\n\ts.ContentEncoding = &v\n\treturn s\n}\n\n// SetContentLanguage sets the ContentLanguage field's value.\nfunc (s *HeadObjectOutput) SetContentLanguage(v string) *HeadObjectOutput {\n\ts.ContentLanguage = &v\n\treturn s\n}\n\n// SetContentLength sets the ContentLength field's value.\nfunc (s *HeadObjectOutput) SetContentLength(v int64) *HeadObjectOutput {\n\ts.ContentLength = &v\n\treturn s\n}\n\n// SetContentType sets the ContentType field's value.\nfunc (s *HeadObjectOutput) SetContentType(v string) *HeadObjectOutput {\n\ts.ContentType = &v\n\treturn s\n}\n\n// SetDeleteMarker sets the DeleteMarker field's value.\nfunc (s *HeadObjectOutput) SetDeleteMarker(v bool) *HeadObjectOutput {\n\ts.DeleteMarker = &v\n\treturn s\n}\n\n// SetETag sets the ETag field's value.\nfunc (s *HeadObjectOutput) SetETag(v string) *HeadObjectOutput {\n\ts.ETag = &v\n\treturn s\n}\n\n// SetExpiration sets the Expiration field's value.\nfunc (s *HeadObjectOutput) SetExpiration(v string) *HeadObjectOutput {\n\ts.Expiration = &v\n\treturn s\n}\n\n// SetExpires sets the Expires field's value.\nfunc (s *HeadObjectOutput) SetExpires(v string) *HeadObjectOutput {\n\ts.Expires = &v\n\treturn s\n}\n\n// SetLastModified sets the LastModified field's value.\nfunc (s *HeadObjectOutput) SetLastModified(v time.Time) *HeadObjectOutput {\n\ts.LastModified = &v\n\treturn s\n}\n\n// SetMetadata sets the Metadata field's value.\nfunc (s *HeadObjectOutput) SetMetadata(v map[string]*string) *HeadObjectOutput {\n\ts.Metadata = v\n\treturn s\n}\n\n// SetMissingMeta sets the MissingMeta field's value.\nfunc (s *HeadObjectOutput) SetMissingMeta(v int64) *HeadObjectOutput {\n\ts.MissingMeta = &v\n\treturn s\n}\n\n// SetObjectLockLegalHoldStatus sets the ObjectLockLegalHoldStatus field's value.\nfunc (s *HeadObjectOutput) SetObjectLockLegalHoldStatus(v string) *HeadObjectOutput {\n\ts.ObjectLockLegalHoldStatus = &v\n\treturn s\n}\n\n// SetObjectLockMode sets the ObjectLockMode field's value.\nfunc (s *HeadObjectOutput) SetObjectLockMode(v string) *HeadObjectOutput {\n\ts.ObjectLockMode = &v\n\treturn s\n}\n\n// SetObjectLockRetainUntilDate sets the ObjectLockRetainUntilDate field's value.\nfunc (s *HeadObjectOutput) SetObjectLockRetainUntilDate(v time.Time) *HeadObjectOutput {\n\ts.ObjectLockRetainUntilDate = &v\n\treturn s\n}\n\n// SetPartsCount sets the PartsCount field's value.\nfunc (s *HeadObjectOutput) SetPartsCount(v int64) *HeadObjectOutput {\n\ts.PartsCount = &v\n\treturn s\n}\n\n// SetReplicationStatus sets the ReplicationStatus field's value.\nfunc (s *HeadObjectOutput) SetReplicationStatus(v string) *HeadObjectOutput {\n\ts.ReplicationStatus = &v\n\treturn s\n}\n\n// SetRequestCharged sets the RequestCharged field's value.\nfunc (s *HeadObjectOutput) SetRequestCharged(v string) *HeadObjectOutput {\n\ts.RequestCharged = &v\n\treturn s\n}\n\n// SetRestore sets the Restore field's value.\nfunc (s *HeadObjectOutput) SetRestore(v string) *HeadObjectOutput {\n\ts.Restore = &v\n\treturn s\n}\n\n// SetSSECustomerAlgorithm sets the SSECustomerAlgorithm field's value.\nfunc (s *HeadObjectOutput) SetSSECustomerAlgorithm(v string) *HeadObjectOutput {\n\ts.SSECustomerAlgorithm = &v\n\treturn s\n}\n\n// SetSSECustomerKeyMD5 sets the SSECustomerKeyMD5 field's value.\nfunc (s *HeadObjectOutput) SetSSECustomerKeyMD5(v string) *HeadObjectOutput {\n\ts.SSECustomerKeyMD5 = &v\n\treturn s\n}\n\n// SetSSEKMSKeyId sets the SSEKMSKeyId field's value.\nfunc (s *HeadObjectOutput) SetSSEKMSKeyId(v string) *HeadObjectOutput {\n\ts.SSEKMSKeyId = &v\n\treturn s\n}\n\n// SetServerSideEncryption sets the ServerSideEncryption field's value.\nfunc (s *HeadObjectOutput) SetServerSideEncryption(v string) *HeadObjectOutput {\n\ts.ServerSideEncryption = &v\n\treturn s\n}\n\n// SetStorageClass sets the StorageClass field's value.\nfunc (s *HeadObjectOutput) SetStorageClass(v string) *HeadObjectOutput {\n\ts.StorageClass = &v\n\treturn s\n}\n\n// SetVersionId sets the VersionId field's value.\nfunc (s *HeadObjectOutput) SetVersionId(v string) *HeadObjectOutput {\n\ts.VersionId = &v\n\treturn s\n}\n\n// SetWebsiteRedirectLocation sets the WebsiteRedirectLocation field's value.\nfunc (s *HeadObjectOutput) SetWebsiteRedirectLocation(v string) *HeadObjectOutput {\n\ts.WebsiteRedirectLocation = &v\n\treturn s\n}\n\ntype IndexDocument struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// A suffix that is appended to a request that is for a directory on the website\n\t// endpoint (e.g. if the suffix is index.html and you make a request to samplebucket/images/\n\t// the data that is returned will be for the object with the key name images/index.html)\n\t// The suffix must not be empty and must not include a slash character.\n\t//\n\t// Suffix is a required field\n\tSuffix *string `type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s IndexDocument) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s IndexDocument) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *IndexDocument) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"IndexDocument\"}\n\tif s.Suffix == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Suffix\"))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetSuffix sets the Suffix field's value.\nfunc (s *IndexDocument) SetSuffix(v string) *IndexDocument {\n\ts.Suffix = &v\n\treturn s\n}\n\ntype Initiator struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Name of the Principal.\n\tDisplayName *string `type:\"string\"`\n\n\t// If the principal is an AWS account, it provides the Canonical User ID. If\n\t// the principal is an IAM User, it provides a user ARN value.\n\tID *string `type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s Initiator) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s Initiator) GoString() string {\n\treturn s.String()\n}\n\n// SetDisplayName sets the DisplayName field's value.\nfunc (s *Initiator) SetDisplayName(v string) *Initiator {\n\ts.DisplayName = &v\n\treturn s\n}\n\n// SetID sets the ID field's value.\nfunc (s *Initiator) SetID(v string) *Initiator {\n\ts.ID = &v\n\treturn s\n}\n\n// Describes the serialization format of the object.\ntype InputSerialization struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Describes the serialization of a CSV-encoded object.\n\tCSV *CSVInput `type:\"structure\"`\n\n\t// Specifies object's compression format. Valid values: NONE, GZIP, BZIP2. Default\n\t// Value: NONE.\n\tCompressionType *string `type:\"string\" enum:\"CompressionType\"`\n\n\t// Specifies JSON as object's input serialization format.\n\tJSON *JSONInput `type:\"structure\"`\n\n\t// Specifies Parquet as object's input serialization format.\n\tParquet *ParquetInput `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s InputSerialization) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s InputSerialization) GoString() string {\n\treturn s.String()\n}\n\n// SetCSV sets the CSV field's value.\nfunc (s *InputSerialization) SetCSV(v *CSVInput) *InputSerialization {\n\ts.CSV = v\n\treturn s\n}\n\n// SetCompressionType sets the CompressionType field's value.\nfunc (s *InputSerialization) SetCompressionType(v string) *InputSerialization {\n\ts.CompressionType = &v\n\treturn s\n}\n\n// SetJSON sets the JSON field's value.\nfunc (s *InputSerialization) SetJSON(v *JSONInput) *InputSerialization {\n\ts.JSON = v\n\treturn s\n}\n\n// SetParquet sets the Parquet field's value.\nfunc (s *InputSerialization) SetParquet(v *ParquetInput) *InputSerialization {\n\ts.Parquet = v\n\treturn s\n}\n\n// Specifies the inventory configuration for an Amazon S3 bucket. For more information,\n// see GET Bucket inventory (https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGETInventoryConfig.html)\n// in the Amazon Simple Storage Service API Reference.\ntype InventoryConfiguration struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Contains information about where to publish the inventory results.\n\t//\n\t// Destination is a required field\n\tDestination *InventoryDestination `type:\"structure\" required:\"true\"`\n\n\t// Specifies an inventory filter. The inventory only includes objects that meet\n\t// the filter's criteria.\n\tFilter *InventoryFilter `type:\"structure\"`\n\n\t// The ID used to identify the inventory configuration.\n\t//\n\t// Id is a required field\n\tId *string `type:\"string\" required:\"true\"`\n\n\t// Object versions to include in the inventory list. If set to All, the list\n\t// includes all the object versions, which adds the version-related fields VersionId,\n\t// IsLatest, and DeleteMarker to the list. If set to Current, the list does\n\t// not contain these version-related fields.\n\t//\n\t// IncludedObjectVersions is a required field\n\tIncludedObjectVersions *string `type:\"string\" required:\"true\" enum:\"InventoryIncludedObjectVersions\"`\n\n\t// Specifies whether the inventory is enabled or disabled. If set to True, an\n\t// inventory list is generated. If set to False, no inventory list is generated.\n\t//\n\t// IsEnabled is a required field\n\tIsEnabled *bool `type:\"boolean\" required:\"true\"`\n\n\t// Contains the optional fields that are included in the inventory results.\n\tOptionalFields []*string `locationNameList:\"Field\" type:\"list\"`\n\n\t// Specifies the schedule for generating inventory results.\n\t//\n\t// Schedule is a required field\n\tSchedule *InventorySchedule `type:\"structure\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s InventoryConfiguration) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s InventoryConfiguration) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *InventoryConfiguration) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"InventoryConfiguration\"}\n\tif s.Destination == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Destination\"))\n\t}\n\tif s.Id == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Id\"))\n\t}\n\tif s.IncludedObjectVersions == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"IncludedObjectVersions\"))\n\t}\n\tif s.IsEnabled == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"IsEnabled\"))\n\t}\n\tif s.Schedule == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Schedule\"))\n\t}\n\tif s.Destination != nil {\n\t\tif err := s.Destination.Validate(); err != nil {\n\t\t\tinvalidParams.AddNested(\"Destination\", err.(request.ErrInvalidParams))\n\t\t}\n\t}\n\tif s.Filter != nil {\n\t\tif err := s.Filter.Validate(); err != nil {\n\t\t\tinvalidParams.AddNested(\"Filter\", err.(request.ErrInvalidParams))\n\t\t}\n\t}\n\tif s.Schedule != nil {\n\t\tif err := s.Schedule.Validate(); err != nil {\n\t\t\tinvalidParams.AddNested(\"Schedule\", err.(request.ErrInvalidParams))\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetDestination sets the Destination field's value.\nfunc (s *InventoryConfiguration) SetDestination(v *InventoryDestination) *InventoryConfiguration {\n\ts.Destination = v\n\treturn s\n}\n\n// SetFilter sets the Filter field's value.\nfunc (s *InventoryConfiguration) SetFilter(v *InventoryFilter) *InventoryConfiguration {\n\ts.Filter = v\n\treturn s\n}\n\n// SetId sets the Id field's value.\nfunc (s *InventoryConfiguration) SetId(v string) *InventoryConfiguration {\n\ts.Id = &v\n\treturn s\n}\n\n// SetIncludedObjectVersions sets the IncludedObjectVersions field's value.\nfunc (s *InventoryConfiguration) SetIncludedObjectVersions(v string) *InventoryConfiguration {\n\ts.IncludedObjectVersions = &v\n\treturn s\n}\n\n// SetIsEnabled sets the IsEnabled field's value.\nfunc (s *InventoryConfiguration) SetIsEnabled(v bool) *InventoryConfiguration {\n\ts.IsEnabled = &v\n\treturn s\n}\n\n// SetOptionalFields sets the OptionalFields field's value.\nfunc (s *InventoryConfiguration) SetOptionalFields(v []*string) *InventoryConfiguration {\n\ts.OptionalFields = v\n\treturn s\n}\n\n// SetSchedule sets the Schedule field's value.\nfunc (s *InventoryConfiguration) SetSchedule(v *InventorySchedule) *InventoryConfiguration {\n\ts.Schedule = v\n\treturn s\n}\n\ntype InventoryDestination struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Contains the bucket name, file format, bucket owner (optional), and prefix\n\t// (optional) where inventory results are published.\n\t//\n\t// S3BucketDestination is a required field\n\tS3BucketDestination *InventoryS3BucketDestination `type:\"structure\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s InventoryDestination) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s InventoryDestination) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *InventoryDestination) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"InventoryDestination\"}\n\tif s.S3BucketDestination == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"S3BucketDestination\"))\n\t}\n\tif s.S3BucketDestination != nil {\n\t\tif err := s.S3BucketDestination.Validate(); err != nil {\n\t\t\tinvalidParams.AddNested(\"S3BucketDestination\", err.(request.ErrInvalidParams))\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetS3BucketDestination sets the S3BucketDestination field's value.\nfunc (s *InventoryDestination) SetS3BucketDestination(v *InventoryS3BucketDestination) *InventoryDestination {\n\ts.S3BucketDestination = v\n\treturn s\n}\n\n// Contains the type of server-side encryption used to encrypt the inventory\n// results.\ntype InventoryEncryption struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Specifies the use of SSE-KMS to encrypt delivered Inventory reports.\n\tSSEKMS *SSEKMS `locationName:\"SSE-KMS\" type:\"structure\"`\n\n\t// Specifies the use of SSE-S3 to encrypt delivered Inventory reports.\n\tSSES3 *SSES3 `locationName:\"SSE-S3\" type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s InventoryEncryption) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s InventoryEncryption) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *InventoryEncryption) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"InventoryEncryption\"}\n\tif s.SSEKMS != nil {\n\t\tif err := s.SSEKMS.Validate(); err != nil {\n\t\t\tinvalidParams.AddNested(\"SSEKMS\", err.(request.ErrInvalidParams))\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetSSEKMS sets the SSEKMS field's value.\nfunc (s *InventoryEncryption) SetSSEKMS(v *SSEKMS) *InventoryEncryption {\n\ts.SSEKMS = v\n\treturn s\n}\n\n// SetSSES3 sets the SSES3 field's value.\nfunc (s *InventoryEncryption) SetSSES3(v *SSES3) *InventoryEncryption {\n\ts.SSES3 = v\n\treturn s\n}\n\ntype InventoryFilter struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The prefix that an object must have to be included in the inventory results.\n\t//\n\t// Prefix is a required field\n\tPrefix *string `type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s InventoryFilter) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s InventoryFilter) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *InventoryFilter) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"InventoryFilter\"}\n\tif s.Prefix == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Prefix\"))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetPrefix sets the Prefix field's value.\nfunc (s *InventoryFilter) SetPrefix(v string) *InventoryFilter {\n\ts.Prefix = &v\n\treturn s\n}\n\ntype InventoryS3BucketDestination struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The ID of the account that owns the destination bucket.\n\tAccountId *string `type:\"string\"`\n\n\t// The Amazon resource name (ARN) of the bucket where inventory results will\n\t// be published.\n\t//\n\t// Bucket is a required field\n\tBucket *string `type:\"string\" required:\"true\"`\n\n\t// Contains the type of server-side encryption used to encrypt the inventory\n\t// results.\n\tEncryption *InventoryEncryption `type:\"structure\"`\n\n\t// Specifies the output format of the inventory results.\n\t//\n\t// Format is a required field\n\tFormat *string `type:\"string\" required:\"true\" enum:\"InventoryFormat\"`\n\n\t// The prefix that is prepended to all inventory results.\n\tPrefix *string `type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s InventoryS3BucketDestination) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s InventoryS3BucketDestination) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *InventoryS3BucketDestination) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"InventoryS3BucketDestination\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Format == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Format\"))\n\t}\n\tif s.Encryption != nil {\n\t\tif err := s.Encryption.Validate(); err != nil {\n\t\t\tinvalidParams.AddNested(\"Encryption\", err.(request.ErrInvalidParams))\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetAccountId sets the AccountId field's value.\nfunc (s *InventoryS3BucketDestination) SetAccountId(v string) *InventoryS3BucketDestination {\n\ts.AccountId = &v\n\treturn s\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *InventoryS3BucketDestination) SetBucket(v string) *InventoryS3BucketDestination {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *InventoryS3BucketDestination) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetEncryption sets the Encryption field's value.\nfunc (s *InventoryS3BucketDestination) SetEncryption(v *InventoryEncryption) *InventoryS3BucketDestination {\n\ts.Encryption = v\n\treturn s\n}\n\n// SetFormat sets the Format field's value.\nfunc (s *InventoryS3BucketDestination) SetFormat(v string) *InventoryS3BucketDestination {\n\ts.Format = &v\n\treturn s\n}\n\n// SetPrefix sets the Prefix field's value.\nfunc (s *InventoryS3BucketDestination) SetPrefix(v string) *InventoryS3BucketDestination {\n\ts.Prefix = &v\n\treturn s\n}\n\ntype InventorySchedule struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Specifies how frequently inventory results are produced.\n\t//\n\t// Frequency is a required field\n\tFrequency *string `type:\"string\" required:\"true\" enum:\"InventoryFrequency\"`\n}\n\n// String returns the string representation\nfunc (s InventorySchedule) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s InventorySchedule) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *InventorySchedule) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"InventorySchedule\"}\n\tif s.Frequency == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Frequency\"))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetFrequency sets the Frequency field's value.\nfunc (s *InventorySchedule) SetFrequency(v string) *InventorySchedule {\n\ts.Frequency = &v\n\treturn s\n}\n\ntype JSONInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The type of JSON. Valid values: Document, Lines.\n\tType *string `type:\"string\" enum:\"JSONType\"`\n}\n\n// String returns the string representation\nfunc (s JSONInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s JSONInput) GoString() string {\n\treturn s.String()\n}\n\n// SetType sets the Type field's value.\nfunc (s *JSONInput) SetType(v string) *JSONInput {\n\ts.Type = &v\n\treturn s\n}\n\ntype JSONOutput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The value used to separate individual records in the output.\n\tRecordDelimiter *string `type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s JSONOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s JSONOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetRecordDelimiter sets the RecordDelimiter field's value.\nfunc (s *JSONOutput) SetRecordDelimiter(v string) *JSONOutput {\n\ts.RecordDelimiter = &v\n\treturn s\n}\n\n// A container for object key name prefix and suffix filtering rules.\ntype KeyFilter struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// A list of containers for the key value pair that defines the criteria for\n\t// the filter rule.\n\tFilterRules []*FilterRule `locationName:\"FilterRule\" type:\"list\" flattened:\"true\"`\n}\n\n// String returns the string representation\nfunc (s KeyFilter) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s KeyFilter) GoString() string {\n\treturn s.String()\n}\n\n// SetFilterRules sets the FilterRules field's value.\nfunc (s *KeyFilter) SetFilterRules(v []*FilterRule) *KeyFilter {\n\ts.FilterRules = v\n\treturn s\n}\n\n// A container for specifying the configuration for AWS Lambda notifications.\ntype LambdaFunctionConfiguration struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The Amazon S3 bucket event for which to invoke the AWS Lambda function. For\n\t// more information, see Supported Event Types (https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html)\n\t// in the Amazon Simple Storage Service Developer Guide.\n\t//\n\t// Events is a required field\n\tEvents []*string `locationName:\"Event\" type:\"list\" flattened:\"true\" required:\"true\"`\n\n\t// Specifies object key name filtering rules. For information about key name\n\t// filtering, see Configuring Event Notifications (https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html)\n\t// in the Amazon Simple Storage Service Developer Guide.\n\tFilter *NotificationConfigurationFilter `type:\"structure\"`\n\n\t// An optional unique identifier for configurations in a notification configuration.\n\t// If you don't provide one, Amazon S3 will assign an ID.\n\tId *string `type:\"string\"`\n\n\t// The Amazon Resource Name (ARN) of the AWS Lambda function that Amazon S3\n\t// invokes when the specified event type occurs.\n\t//\n\t// LambdaFunctionArn is a required field\n\tLambdaFunctionArn *string `locationName:\"CloudFunction\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s LambdaFunctionConfiguration) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s LambdaFunctionConfiguration) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *LambdaFunctionConfiguration) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"LambdaFunctionConfiguration\"}\n\tif s.Events == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Events\"))\n\t}\n\tif s.LambdaFunctionArn == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"LambdaFunctionArn\"))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetEvents sets the Events field's value.\nfunc (s *LambdaFunctionConfiguration) SetEvents(v []*string) *LambdaFunctionConfiguration {\n\ts.Events = v\n\treturn s\n}\n\n// SetFilter sets the Filter field's value.\nfunc (s *LambdaFunctionConfiguration) SetFilter(v *NotificationConfigurationFilter) *LambdaFunctionConfiguration {\n\ts.Filter = v\n\treturn s\n}\n\n// SetId sets the Id field's value.\nfunc (s *LambdaFunctionConfiguration) SetId(v string) *LambdaFunctionConfiguration {\n\ts.Id = &v\n\treturn s\n}\n\n// SetLambdaFunctionArn sets the LambdaFunctionArn field's value.\nfunc (s *LambdaFunctionConfiguration) SetLambdaFunctionArn(v string) *LambdaFunctionConfiguration {\n\ts.LambdaFunctionArn = &v\n\treturn s\n}\n\ntype LifecycleConfiguration struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Rules is a required field\n\tRules []*Rule `locationName:\"Rule\" type:\"list\" flattened:\"true\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s LifecycleConfiguration) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s LifecycleConfiguration) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *LifecycleConfiguration) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"LifecycleConfiguration\"}\n\tif s.Rules == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Rules\"))\n\t}\n\tif s.Rules != nil {\n\t\tfor i, v := range s.Rules {\n\t\t\tif v == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif err := v.Validate(); err != nil {\n\t\t\t\tinvalidParams.AddNested(fmt.Sprintf(\"%s[%v]\", \"Rules\", i), err.(request.ErrInvalidParams))\n\t\t\t}\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetRules sets the Rules field's value.\nfunc (s *LifecycleConfiguration) SetRules(v []*Rule) *LifecycleConfiguration {\n\ts.Rules = v\n\treturn s\n}\n\ntype LifecycleExpiration struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Indicates at what date the object is to be moved or deleted. Should be in\n\t// GMT ISO 8601 Format.\n\tDate *time.Time `type:\"timestamp\" timestampFormat:\"iso8601\"`\n\n\t// Indicates the lifetime, in days, of the objects that are subject to the rule.\n\t// The value must be a non-zero positive integer.\n\tDays *int64 `type:\"integer\"`\n\n\t// Indicates whether Amazon S3 will remove a delete marker with no noncurrent\n\t// versions. If set to true, the delete marker will be expired; if set to false\n\t// the policy takes no action. This cannot be specified with Days or Date in\n\t// a Lifecycle Expiration Policy.\n\tExpiredObjectDeleteMarker *bool `type:\"boolean\"`\n}\n\n// String returns the string representation\nfunc (s LifecycleExpiration) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s LifecycleExpiration) GoString() string {\n\treturn s.String()\n}\n\n// SetDate sets the Date field's value.\nfunc (s *LifecycleExpiration) SetDate(v time.Time) *LifecycleExpiration {\n\ts.Date = &v\n\treturn s\n}\n\n// SetDays sets the Days field's value.\nfunc (s *LifecycleExpiration) SetDays(v int64) *LifecycleExpiration {\n\ts.Days = &v\n\treturn s\n}\n\n// SetExpiredObjectDeleteMarker sets the ExpiredObjectDeleteMarker field's value.\nfunc (s *LifecycleExpiration) SetExpiredObjectDeleteMarker(v bool) *LifecycleExpiration {\n\ts.ExpiredObjectDeleteMarker = &v\n\treturn s\n}\n\ntype LifecycleRule struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Specifies the days since the initiation of an incomplete multipart upload\n\t// that Amazon S3 will wait before permanently removing all parts of the upload.\n\t// For more information, see Aborting Incomplete Multipart Uploads Using a Bucket\n\t// Lifecycle Policy (https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuoverview.html#mpu-abort-incomplete-mpu-lifecycle-config)\n\t// in the Amazon Simple Storage Service Developer Guide.\n\tAbortIncompleteMultipartUpload *AbortIncompleteMultipartUpload `type:\"structure\"`\n\n\tExpiration *LifecycleExpiration `type:\"structure\"`\n\n\t// The Filter is used to identify objects that a Lifecycle Rule applies to.\n\t// A Filter must have exactly one of Prefix, Tag, or And specified.\n\tFilter *LifecycleRuleFilter `type:\"structure\"`\n\n\t// Unique identifier for the rule. The value cannot be longer than 255 characters.\n\tID *string `type:\"string\"`\n\n\t// Specifies when noncurrent object versions expire. Upon expiration, Amazon\n\t// S3 permanently deletes the noncurrent object versions. You set this lifecycle\n\t// configuration action on a bucket that has versioning enabled (or suspended)\n\t// to request that Amazon S3 delete noncurrent object versions at a specific\n\t// period in the object's lifetime.\n\tNoncurrentVersionExpiration *NoncurrentVersionExpiration `type:\"structure\"`\n\n\tNoncurrentVersionTransitions []*NoncurrentVersionTransition `locationName:\"NoncurrentVersionTransition\" type:\"list\" flattened:\"true\"`\n\n\t// Prefix identifying one or more objects to which the rule applies. This is\n\t// No longer used; use Filter instead.\n\t//\n\t// Deprecated: Prefix has been deprecated\n\tPrefix *string `deprecated:\"true\" type:\"string\"`\n\n\t// If 'Enabled', the rule is currently being applied. If 'Disabled', the rule\n\t// is not currently being applied.\n\t//\n\t// Status is a required field\n\tStatus *string `type:\"string\" required:\"true\" enum:\"ExpirationStatus\"`\n\n\tTransitions []*Transition `locationName:\"Transition\" type:\"list\" flattened:\"true\"`\n}\n\n// String returns the string representation\nfunc (s LifecycleRule) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s LifecycleRule) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *LifecycleRule) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"LifecycleRule\"}\n\tif s.Status == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Status\"))\n\t}\n\tif s.Filter != nil {\n\t\tif err := s.Filter.Validate(); err != nil {\n\t\t\tinvalidParams.AddNested(\"Filter\", err.(request.ErrInvalidParams))\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetAbortIncompleteMultipartUpload sets the AbortIncompleteMultipartUpload field's value.\nfunc (s *LifecycleRule) SetAbortIncompleteMultipartUpload(v *AbortIncompleteMultipartUpload) *LifecycleRule {\n\ts.AbortIncompleteMultipartUpload = v\n\treturn s\n}\n\n// SetExpiration sets the Expiration field's value.\nfunc (s *LifecycleRule) SetExpiration(v *LifecycleExpiration) *LifecycleRule {\n\ts.Expiration = v\n\treturn s\n}\n\n// SetFilter sets the Filter field's value.\nfunc (s *LifecycleRule) SetFilter(v *LifecycleRuleFilter) *LifecycleRule {\n\ts.Filter = v\n\treturn s\n}\n\n// SetID sets the ID field's value.\nfunc (s *LifecycleRule) SetID(v string) *LifecycleRule {\n\ts.ID = &v\n\treturn s\n}\n\n// SetNoncurrentVersionExpiration sets the NoncurrentVersionExpiration field's value.\nfunc (s *LifecycleRule) SetNoncurrentVersionExpiration(v *NoncurrentVersionExpiration) *LifecycleRule {\n\ts.NoncurrentVersionExpiration = v\n\treturn s\n}\n\n// SetNoncurrentVersionTransitions sets the NoncurrentVersionTransitions field's value.\nfunc (s *LifecycleRule) SetNoncurrentVersionTransitions(v []*NoncurrentVersionTransition) *LifecycleRule {\n\ts.NoncurrentVersionTransitions = v\n\treturn s\n}\n\n// SetPrefix sets the Prefix field's value.\nfunc (s *LifecycleRule) SetPrefix(v string) *LifecycleRule {\n\ts.Prefix = &v\n\treturn s\n}\n\n// SetStatus sets the Status field's value.\nfunc (s *LifecycleRule) SetStatus(v string) *LifecycleRule {\n\ts.Status = &v\n\treturn s\n}\n\n// SetTransitions sets the Transitions field's value.\nfunc (s *LifecycleRule) SetTransitions(v []*Transition) *LifecycleRule {\n\ts.Transitions = v\n\treturn s\n}\n\n// This is used in a Lifecycle Rule Filter to apply a logical AND to two or\n// more predicates. The Lifecycle Rule will apply to any object matching all\n// of the predicates configured inside the And operator.\ntype LifecycleRuleAndOperator struct {\n\t_ struct{} `type:\"structure\"`\n\n\tPrefix *string `type:\"string\"`\n\n\t// All of these tags must exist in the object's tag set in order for the rule\n\t// to apply.\n\tTags []*Tag `locationName:\"Tag\" locationNameList:\"Tag\" type:\"list\" flattened:\"true\"`\n}\n\n// String returns the string representation\nfunc (s LifecycleRuleAndOperator) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s LifecycleRuleAndOperator) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *LifecycleRuleAndOperator) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"LifecycleRuleAndOperator\"}\n\tif s.Tags != nil {\n\t\tfor i, v := range s.Tags {\n\t\t\tif v == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif err := v.Validate(); err != nil {\n\t\t\t\tinvalidParams.AddNested(fmt.Sprintf(\"%s[%v]\", \"Tags\", i), err.(request.ErrInvalidParams))\n\t\t\t}\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetPrefix sets the Prefix field's value.\nfunc (s *LifecycleRuleAndOperator) SetPrefix(v string) *LifecycleRuleAndOperator {\n\ts.Prefix = &v\n\treturn s\n}\n\n// SetTags sets the Tags field's value.\nfunc (s *LifecycleRuleAndOperator) SetTags(v []*Tag) *LifecycleRuleAndOperator {\n\ts.Tags = v\n\treturn s\n}\n\n// The Filter is used to identify objects that a Lifecycle Rule applies to.\n// A Filter must have exactly one of Prefix, Tag, or And specified.\ntype LifecycleRuleFilter struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// This is used in a Lifecycle Rule Filter to apply a logical AND to two or\n\t// more predicates. The Lifecycle Rule will apply to any object matching all\n\t// of the predicates configured inside the And operator.\n\tAnd *LifecycleRuleAndOperator `type:\"structure\"`\n\n\t// Prefix identifying one or more objects to which the rule applies.\n\tPrefix *string `type:\"string\"`\n\n\t// This tag must exist in the object's tag set in order for the rule to apply.\n\tTag *Tag `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s LifecycleRuleFilter) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s LifecycleRuleFilter) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *LifecycleRuleFilter) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"LifecycleRuleFilter\"}\n\tif s.And != nil {\n\t\tif err := s.And.Validate(); err != nil {\n\t\t\tinvalidParams.AddNested(\"And\", err.(request.ErrInvalidParams))\n\t\t}\n\t}\n\tif s.Tag != nil {\n\t\tif err := s.Tag.Validate(); err != nil {\n\t\t\tinvalidParams.AddNested(\"Tag\", err.(request.ErrInvalidParams))\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetAnd sets the And field's value.\nfunc (s *LifecycleRuleFilter) SetAnd(v *LifecycleRuleAndOperator) *LifecycleRuleFilter {\n\ts.And = v\n\treturn s\n}\n\n// SetPrefix sets the Prefix field's value.\nfunc (s *LifecycleRuleFilter) SetPrefix(v string) *LifecycleRuleFilter {\n\ts.Prefix = &v\n\treturn s\n}\n\n// SetTag sets the Tag field's value.\nfunc (s *LifecycleRuleFilter) SetTag(v *Tag) *LifecycleRuleFilter {\n\ts.Tag = v\n\treturn s\n}\n\ntype ListBucketAnalyticsConfigurationsInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The name of the bucket from which analytics configurations are retrieved.\n\t//\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n\n\t// The ContinuationToken that represents a placeholder from where this request\n\t// should begin.\n\tContinuationToken *string `location:\"querystring\" locationName:\"continuation-token\" type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s ListBucketAnalyticsConfigurationsInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s ListBucketAnalyticsConfigurationsInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *ListBucketAnalyticsConfigurationsInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"ListBucketAnalyticsConfigurationsInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *ListBucketAnalyticsConfigurationsInput) SetBucket(v string) *ListBucketAnalyticsConfigurationsInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *ListBucketAnalyticsConfigurationsInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetContinuationToken sets the ContinuationToken field's value.\nfunc (s *ListBucketAnalyticsConfigurationsInput) SetContinuationToken(v string) *ListBucketAnalyticsConfigurationsInput {\n\ts.ContinuationToken = &v\n\treturn s\n}\n\ntype ListBucketAnalyticsConfigurationsOutput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The list of analytics configurations for a bucket.\n\tAnalyticsConfigurationList []*AnalyticsConfiguration `locationName:\"AnalyticsConfiguration\" type:\"list\" flattened:\"true\"`\n\n\t// The ContinuationToken that represents where this request began.\n\tContinuationToken *string `type:\"string\"`\n\n\t// Indicates whether the returned list of analytics configurations is complete.\n\t// A value of true indicates that the list is not complete and the NextContinuationToken\n\t// will be provided for a subsequent request.\n\tIsTruncated *bool `type:\"boolean\"`\n\n\t// NextContinuationToken is sent when isTruncated is true, which indicates that\n\t// there are more analytics configurations to list. The next request must include\n\t// this NextContinuationToken. The token is obfuscated and is not a usable value.\n\tNextContinuationToken *string `type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s ListBucketAnalyticsConfigurationsOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s ListBucketAnalyticsConfigurationsOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetAnalyticsConfigurationList sets the AnalyticsConfigurationList field's value.\nfunc (s *ListBucketAnalyticsConfigurationsOutput) SetAnalyticsConfigurationList(v []*AnalyticsConfiguration) *ListBucketAnalyticsConfigurationsOutput {\n\ts.AnalyticsConfigurationList = v\n\treturn s\n}\n\n// SetContinuationToken sets the ContinuationToken field's value.\nfunc (s *ListBucketAnalyticsConfigurationsOutput) SetContinuationToken(v string) *ListBucketAnalyticsConfigurationsOutput {\n\ts.ContinuationToken = &v\n\treturn s\n}\n\n// SetIsTruncated sets the IsTruncated field's value.\nfunc (s *ListBucketAnalyticsConfigurationsOutput) SetIsTruncated(v bool) *ListBucketAnalyticsConfigurationsOutput {\n\ts.IsTruncated = &v\n\treturn s\n}\n\n// SetNextContinuationToken sets the NextContinuationToken field's value.\nfunc (s *ListBucketAnalyticsConfigurationsOutput) SetNextContinuationToken(v string) *ListBucketAnalyticsConfigurationsOutput {\n\ts.NextContinuationToken = &v\n\treturn s\n}\n\ntype ListBucketInventoryConfigurationsInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The name of the bucket containing the inventory configurations to retrieve.\n\t//\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n\n\t// The marker used to continue an inventory configuration listing that has been\n\t// truncated. Use the NextContinuationToken from a previously truncated list\n\t// response to continue the listing. The continuation token is an opaque value\n\t// that Amazon S3 understands.\n\tContinuationToken *string `location:\"querystring\" locationName:\"continuation-token\" type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s ListBucketInventoryConfigurationsInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s ListBucketInventoryConfigurationsInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *ListBucketInventoryConfigurationsInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"ListBucketInventoryConfigurationsInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *ListBucketInventoryConfigurationsInput) SetBucket(v string) *ListBucketInventoryConfigurationsInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *ListBucketInventoryConfigurationsInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetContinuationToken sets the ContinuationToken field's value.\nfunc (s *ListBucketInventoryConfigurationsInput) SetContinuationToken(v string) *ListBucketInventoryConfigurationsInput {\n\ts.ContinuationToken = &v\n\treturn s\n}\n\ntype ListBucketInventoryConfigurationsOutput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// If sent in the request, the marker that is used as a starting point for this\n\t// inventory configuration list response.\n\tContinuationToken *string `type:\"string\"`\n\n\t// The list of inventory configurations for a bucket.\n\tInventoryConfigurationList []*InventoryConfiguration `locationName:\"InventoryConfiguration\" type:\"list\" flattened:\"true\"`\n\n\t// Indicates whether the returned list of inventory configurations is truncated\n\t// in this response. A value of true indicates that the list is truncated.\n\tIsTruncated *bool `type:\"boolean\"`\n\n\t// The marker used to continue this inventory configuration listing. Use the\n\t// NextContinuationToken from this response to continue the listing in a subsequent\n\t// request. The continuation token is an opaque value that Amazon S3 understands.\n\tNextContinuationToken *string `type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s ListBucketInventoryConfigurationsOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s ListBucketInventoryConfigurationsOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetContinuationToken sets the ContinuationToken field's value.\nfunc (s *ListBucketInventoryConfigurationsOutput) SetContinuationToken(v string) *ListBucketInventoryConfigurationsOutput {\n\ts.ContinuationToken = &v\n\treturn s\n}\n\n// SetInventoryConfigurationList sets the InventoryConfigurationList field's value.\nfunc (s *ListBucketInventoryConfigurationsOutput) SetInventoryConfigurationList(v []*InventoryConfiguration) *ListBucketInventoryConfigurationsOutput {\n\ts.InventoryConfigurationList = v\n\treturn s\n}\n\n// SetIsTruncated sets the IsTruncated field's value.\nfunc (s *ListBucketInventoryConfigurationsOutput) SetIsTruncated(v bool) *ListBucketInventoryConfigurationsOutput {\n\ts.IsTruncated = &v\n\treturn s\n}\n\n// SetNextContinuationToken sets the NextContinuationToken field's value.\nfunc (s *ListBucketInventoryConfigurationsOutput) SetNextContinuationToken(v string) *ListBucketInventoryConfigurationsOutput {\n\ts.NextContinuationToken = &v\n\treturn s\n}\n\ntype ListBucketMetricsConfigurationsInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The name of the bucket containing the metrics configurations to retrieve.\n\t//\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n\n\t// The marker that is used to continue a metrics configuration listing that\n\t// has been truncated. Use the NextContinuationToken from a previously truncated\n\t// list response to continue the listing. The continuation token is an opaque\n\t// value that Amazon S3 understands.\n\tContinuationToken *string `location:\"querystring\" locationName:\"continuation-token\" type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s ListBucketMetricsConfigurationsInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s ListBucketMetricsConfigurationsInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *ListBucketMetricsConfigurationsInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"ListBucketMetricsConfigurationsInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *ListBucketMetricsConfigurationsInput) SetBucket(v string) *ListBucketMetricsConfigurationsInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *ListBucketMetricsConfigurationsInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetContinuationToken sets the ContinuationToken field's value.\nfunc (s *ListBucketMetricsConfigurationsInput) SetContinuationToken(v string) *ListBucketMetricsConfigurationsInput {\n\ts.ContinuationToken = &v\n\treturn s\n}\n\ntype ListBucketMetricsConfigurationsOutput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The marker that is used as a starting point for this metrics configuration\n\t// list response. This value is present if it was sent in the request.\n\tContinuationToken *string `type:\"string\"`\n\n\t// Indicates whether the returned list of metrics configurations is complete.\n\t// A value of true indicates that the list is not complete and the NextContinuationToken\n\t// will be provided for a subsequent request.\n\tIsTruncated *bool `type:\"boolean\"`\n\n\t// The list of metrics configurations for a bucket.\n\tMetricsConfigurationList []*MetricsConfiguration `locationName:\"MetricsConfiguration\" type:\"list\" flattened:\"true\"`\n\n\t// The marker used to continue a metrics configuration listing that has been\n\t// truncated. Use the NextContinuationToken from a previously truncated list\n\t// response to continue the listing. The continuation token is an opaque value\n\t// that Amazon S3 understands.\n\tNextContinuationToken *string `type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s ListBucketMetricsConfigurationsOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s ListBucketMetricsConfigurationsOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetContinuationToken sets the ContinuationToken field's value.\nfunc (s *ListBucketMetricsConfigurationsOutput) SetContinuationToken(v string) *ListBucketMetricsConfigurationsOutput {\n\ts.ContinuationToken = &v\n\treturn s\n}\n\n// SetIsTruncated sets the IsTruncated field's value.\nfunc (s *ListBucketMetricsConfigurationsOutput) SetIsTruncated(v bool) *ListBucketMetricsConfigurationsOutput {\n\ts.IsTruncated = &v\n\treturn s\n}\n\n// SetMetricsConfigurationList sets the MetricsConfigurationList field's value.\nfunc (s *ListBucketMetricsConfigurationsOutput) SetMetricsConfigurationList(v []*MetricsConfiguration) *ListBucketMetricsConfigurationsOutput {\n\ts.MetricsConfigurationList = v\n\treturn s\n}\n\n// SetNextContinuationToken sets the NextContinuationToken field's value.\nfunc (s *ListBucketMetricsConfigurationsOutput) SetNextContinuationToken(v string) *ListBucketMetricsConfigurationsOutput {\n\ts.NextContinuationToken = &v\n\treturn s\n}\n\ntype ListBucketsInput struct {\n\t_ struct{} `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s ListBucketsInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s ListBucketsInput) GoString() string {\n\treturn s.String()\n}\n\ntype ListBucketsOutput struct {\n\t_ struct{} `type:\"structure\"`\n\n\tBuckets []*Bucket `locationNameList:\"Bucket\" type:\"list\"`\n\n\tOwner *Owner `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s ListBucketsOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s ListBucketsOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetBuckets sets the Buckets field's value.\nfunc (s *ListBucketsOutput) SetBuckets(v []*Bucket) *ListBucketsOutput {\n\ts.Buckets = v\n\treturn s\n}\n\n// SetOwner sets the Owner field's value.\nfunc (s *ListBucketsOutput) SetOwner(v *Owner) *ListBucketsOutput {\n\ts.Owner = v\n\treturn s\n}\n\ntype ListMultipartUploadsInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n\n\t// Character you use to group keys.\n\tDelimiter *string `location:\"querystring\" locationName:\"delimiter\" type:\"string\"`\n\n\t// Requests Amazon S3 to encode the object keys in the response and specifies\n\t// the encoding method to use. An object key may contain any Unicode character;\n\t// however, XML 1.0 parser cannot parse some characters, such as characters\n\t// with an ASCII value from 0 to 10. For characters that are not supported in\n\t// XML 1.0, you can add this parameter to request that Amazon S3 encode the\n\t// keys in the response.\n\tEncodingType *string `location:\"querystring\" locationName:\"encoding-type\" type:\"string\" enum:\"EncodingType\"`\n\n\t// Together with upload-id-marker, this parameter specifies the multipart upload\n\t// after which listing should begin.\n\tKeyMarker *string `location:\"querystring\" locationName:\"key-marker\" type:\"string\"`\n\n\t// Sets the maximum number of multipart uploads, from 1 to 1,000, to return\n\t// in the response body. 1,000 is the maximum number of uploads that can be\n\t// returned in a response.\n\tMaxUploads *int64 `location:\"querystring\" locationName:\"max-uploads\" type:\"integer\"`\n\n\t// Lists in-progress uploads only for those keys that begin with the specified\n\t// prefix.\n\tPrefix *string `location:\"querystring\" locationName:\"prefix\" type:\"string\"`\n\n\t// Together with key-marker, specifies the multipart upload after which listing\n\t// should begin. If key-marker is not specified, the upload-id-marker parameter\n\t// is ignored.\n\tUploadIdMarker *string `location:\"querystring\" locationName:\"upload-id-marker\" type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s ListMultipartUploadsInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s ListMultipartUploadsInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *ListMultipartUploadsInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"ListMultipartUploadsInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *ListMultipartUploadsInput) SetBucket(v string) *ListMultipartUploadsInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *ListMultipartUploadsInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetDelimiter sets the Delimiter field's value.\nfunc (s *ListMultipartUploadsInput) SetDelimiter(v string) *ListMultipartUploadsInput {\n\ts.Delimiter = &v\n\treturn s\n}\n\n// SetEncodingType sets the EncodingType field's value.\nfunc (s *ListMultipartUploadsInput) SetEncodingType(v string) *ListMultipartUploadsInput {\n\ts.EncodingType = &v\n\treturn s\n}\n\n// SetKeyMarker sets the KeyMarker field's value.\nfunc (s *ListMultipartUploadsInput) SetKeyMarker(v string) *ListMultipartUploadsInput {\n\ts.KeyMarker = &v\n\treturn s\n}\n\n// SetMaxUploads sets the MaxUploads field's value.\nfunc (s *ListMultipartUploadsInput) SetMaxUploads(v int64) *ListMultipartUploadsInput {\n\ts.MaxUploads = &v\n\treturn s\n}\n\n// SetPrefix sets the Prefix field's value.\nfunc (s *ListMultipartUploadsInput) SetPrefix(v string) *ListMultipartUploadsInput {\n\ts.Prefix = &v\n\treturn s\n}\n\n// SetUploadIdMarker sets the UploadIdMarker field's value.\nfunc (s *ListMultipartUploadsInput) SetUploadIdMarker(v string) *ListMultipartUploadsInput {\n\ts.UploadIdMarker = &v\n\treturn s\n}\n\ntype ListMultipartUploadsOutput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Name of the bucket to which the multipart upload was initiated.\n\tBucket *string `type:\"string\"`\n\n\tCommonPrefixes []*CommonPrefix `type:\"list\" flattened:\"true\"`\n\n\tDelimiter *string `type:\"string\"`\n\n\t// Encoding type used by Amazon S3 to encode object keys in the response.\n\tEncodingType *string `type:\"string\" enum:\"EncodingType\"`\n\n\t// Indicates whether the returned list of multipart uploads is truncated. A\n\t// value of true indicates that the list was truncated. The list can be truncated\n\t// if the number of multipart uploads exceeds the limit allowed or specified\n\t// by max uploads.\n\tIsTruncated *bool `type:\"boolean\"`\n\n\t// The key at or after which the listing began.\n\tKeyMarker *string `type:\"string\"`\n\n\t// Maximum number of multipart uploads that could have been included in the\n\t// response.\n\tMaxUploads *int64 `type:\"integer\"`\n\n\t// When a list is truncated, this element specifies the value that should be\n\t// used for the key-marker request parameter in a subsequent request.\n\tNextKeyMarker *string `type:\"string\"`\n\n\t// When a list is truncated, this element specifies the value that should be\n\t// used for the upload-id-marker request parameter in a subsequent request.\n\tNextUploadIdMarker *string `type:\"string\"`\n\n\t// When a prefix is provided in the request, this field contains the specified\n\t// prefix. The result contains only keys starting with the specified prefix.\n\tPrefix *string `type:\"string\"`\n\n\t// Upload ID after which listing began.\n\tUploadIdMarker *string `type:\"string\"`\n\n\tUploads []*MultipartUpload `locationName:\"Upload\" type:\"list\" flattened:\"true\"`\n}\n\n// String returns the string representation\nfunc (s ListMultipartUploadsOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s ListMultipartUploadsOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *ListMultipartUploadsOutput) SetBucket(v string) *ListMultipartUploadsOutput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *ListMultipartUploadsOutput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetCommonPrefixes sets the CommonPrefixes field's value.\nfunc (s *ListMultipartUploadsOutput) SetCommonPrefixes(v []*CommonPrefix) *ListMultipartUploadsOutput {\n\ts.CommonPrefixes = v\n\treturn s\n}\n\n// SetDelimiter sets the Delimiter field's value.\nfunc (s *ListMultipartUploadsOutput) SetDelimiter(v string) *ListMultipartUploadsOutput {\n\ts.Delimiter = &v\n\treturn s\n}\n\n// SetEncodingType sets the EncodingType field's value.\nfunc (s *ListMultipartUploadsOutput) SetEncodingType(v string) *ListMultipartUploadsOutput {\n\ts.EncodingType = &v\n\treturn s\n}\n\n// SetIsTruncated sets the IsTruncated field's value.\nfunc (s *ListMultipartUploadsOutput) SetIsTruncated(v bool) *ListMultipartUploadsOutput {\n\ts.IsTruncated = &v\n\treturn s\n}\n\n// SetKeyMarker sets the KeyMarker field's value.\nfunc (s *ListMultipartUploadsOutput) SetKeyMarker(v string) *ListMultipartUploadsOutput {\n\ts.KeyMarker = &v\n\treturn s\n}\n\n// SetMaxUploads sets the MaxUploads field's value.\nfunc (s *ListMultipartUploadsOutput) SetMaxUploads(v int64) *ListMultipartUploadsOutput {\n\ts.MaxUploads = &v\n\treturn s\n}\n\n// SetNextKeyMarker sets the NextKeyMarker field's value.\nfunc (s *ListMultipartUploadsOutput) SetNextKeyMarker(v string) *ListMultipartUploadsOutput {\n\ts.NextKeyMarker = &v\n\treturn s\n}\n\n// SetNextUploadIdMarker sets the NextUploadIdMarker field's value.\nfunc (s *ListMultipartUploadsOutput) SetNextUploadIdMarker(v string) *ListMultipartUploadsOutput {\n\ts.NextUploadIdMarker = &v\n\treturn s\n}\n\n// SetPrefix sets the Prefix field's value.\nfunc (s *ListMultipartUploadsOutput) SetPrefix(v string) *ListMultipartUploadsOutput {\n\ts.Prefix = &v\n\treturn s\n}\n\n// SetUploadIdMarker sets the UploadIdMarker field's value.\nfunc (s *ListMultipartUploadsOutput) SetUploadIdMarker(v string) *ListMultipartUploadsOutput {\n\ts.UploadIdMarker = &v\n\treturn s\n}\n\n// SetUploads sets the Uploads field's value.\nfunc (s *ListMultipartUploadsOutput) SetUploads(v []*MultipartUpload) *ListMultipartUploadsOutput {\n\ts.Uploads = v\n\treturn s\n}\n\ntype ListObjectVersionsInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n\n\t// A delimiter is a character you use to group keys.\n\tDelimiter *string `location:\"querystring\" locationName:\"delimiter\" type:\"string\"`\n\n\t// Requests Amazon S3 to encode the object keys in the response and specifies\n\t// the encoding method to use. An object key may contain any Unicode character;\n\t// however, XML 1.0 parser cannot parse some characters, such as characters\n\t// with an ASCII value from 0 to 10. For characters that are not supported in\n\t// XML 1.0, you can add this parameter to request that Amazon S3 encode the\n\t// keys in the response.\n\tEncodingType *string `location:\"querystring\" locationName:\"encoding-type\" type:\"string\" enum:\"EncodingType\"`\n\n\t// Specifies the key to start with when listing objects in a bucket.\n\tKeyMarker *string `location:\"querystring\" locationName:\"key-marker\" type:\"string\"`\n\n\t// Sets the maximum number of keys returned in the response. The response might\n\t// contain fewer keys but will never contain more.\n\tMaxKeys *int64 `location:\"querystring\" locationName:\"max-keys\" type:\"integer\"`\n\n\t// Limits the response to keys that begin with the specified prefix.\n\tPrefix *string `location:\"querystring\" locationName:\"prefix\" type:\"string\"`\n\n\t// Specifies the object version you want to start listing from.\n\tVersionIdMarker *string `location:\"querystring\" locationName:\"version-id-marker\" type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s ListObjectVersionsInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s ListObjectVersionsInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *ListObjectVersionsInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"ListObjectVersionsInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *ListObjectVersionsInput) SetBucket(v string) *ListObjectVersionsInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *ListObjectVersionsInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetDelimiter sets the Delimiter field's value.\nfunc (s *ListObjectVersionsInput) SetDelimiter(v string) *ListObjectVersionsInput {\n\ts.Delimiter = &v\n\treturn s\n}\n\n// SetEncodingType sets the EncodingType field's value.\nfunc (s *ListObjectVersionsInput) SetEncodingType(v string) *ListObjectVersionsInput {\n\ts.EncodingType = &v\n\treturn s\n}\n\n// SetKeyMarker sets the KeyMarker field's value.\nfunc (s *ListObjectVersionsInput) SetKeyMarker(v string) *ListObjectVersionsInput {\n\ts.KeyMarker = &v\n\treturn s\n}\n\n// SetMaxKeys sets the MaxKeys field's value.\nfunc (s *ListObjectVersionsInput) SetMaxKeys(v int64) *ListObjectVersionsInput {\n\ts.MaxKeys = &v\n\treturn s\n}\n\n// SetPrefix sets the Prefix field's value.\nfunc (s *ListObjectVersionsInput) SetPrefix(v string) *ListObjectVersionsInput {\n\ts.Prefix = &v\n\treturn s\n}\n\n// SetVersionIdMarker sets the VersionIdMarker field's value.\nfunc (s *ListObjectVersionsInput) SetVersionIdMarker(v string) *ListObjectVersionsInput {\n\ts.VersionIdMarker = &v\n\treturn s\n}\n\ntype ListObjectVersionsOutput struct {\n\t_ struct{} `type:\"structure\"`\n\n\tCommonPrefixes []*CommonPrefix `type:\"list\" flattened:\"true\"`\n\n\tDeleteMarkers []*DeleteMarkerEntry `locationName:\"DeleteMarker\" type:\"list\" flattened:\"true\"`\n\n\tDelimiter *string `type:\"string\"`\n\n\t// Encoding type used by Amazon S3 to encode object keys in the response.\n\tEncodingType *string `type:\"string\" enum:\"EncodingType\"`\n\n\t// A flag that indicates whether or not Amazon S3 returned all of the results\n\t// that satisfied the search criteria. If your results were truncated, you can\n\t// make a follow-up paginated request using the NextKeyMarker and NextVersionIdMarker\n\t// response parameters as a starting place in another request to return the\n\t// rest of the results.\n\tIsTruncated *bool `type:\"boolean\"`\n\n\t// Marks the last Key returned in a truncated response.\n\tKeyMarker *string `type:\"string\"`\n\n\tMaxKeys *int64 `type:\"integer\"`\n\n\tName *string `type:\"string\"`\n\n\t// Use this value for the key marker request parameter in a subsequent request.\n\tNextKeyMarker *string `type:\"string\"`\n\n\t// Use this value for the next version id marker parameter in a subsequent request.\n\tNextVersionIdMarker *string `type:\"string\"`\n\n\tPrefix *string `type:\"string\"`\n\n\tVersionIdMarker *string `type:\"string\"`\n\n\tVersions []*ObjectVersion `locationName:\"Version\" type:\"list\" flattened:\"true\"`\n}\n\n// String returns the string representation\nfunc (s ListObjectVersionsOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s ListObjectVersionsOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetCommonPrefixes sets the CommonPrefixes field's value.\nfunc (s *ListObjectVersionsOutput) SetCommonPrefixes(v []*CommonPrefix) *ListObjectVersionsOutput {\n\ts.CommonPrefixes = v\n\treturn s\n}\n\n// SetDeleteMarkers sets the DeleteMarkers field's value.\nfunc (s *ListObjectVersionsOutput) SetDeleteMarkers(v []*DeleteMarkerEntry) *ListObjectVersionsOutput {\n\ts.DeleteMarkers = v\n\treturn s\n}\n\n// SetDelimiter sets the Delimiter field's value.\nfunc (s *ListObjectVersionsOutput) SetDelimiter(v string) *ListObjectVersionsOutput {\n\ts.Delimiter = &v\n\treturn s\n}\n\n// SetEncodingType sets the EncodingType field's value.\nfunc (s *ListObjectVersionsOutput) SetEncodingType(v string) *ListObjectVersionsOutput {\n\ts.EncodingType = &v\n\treturn s\n}\n\n// SetIsTruncated sets the IsTruncated field's value.\nfunc (s *ListObjectVersionsOutput) SetIsTruncated(v bool) *ListObjectVersionsOutput {\n\ts.IsTruncated = &v\n\treturn s\n}\n\n// SetKeyMarker sets the KeyMarker field's value.\nfunc (s *ListObjectVersionsOutput) SetKeyMarker(v string) *ListObjectVersionsOutput {\n\ts.KeyMarker = &v\n\treturn s\n}\n\n// SetMaxKeys sets the MaxKeys field's value.\nfunc (s *ListObjectVersionsOutput) SetMaxKeys(v int64) *ListObjectVersionsOutput {\n\ts.MaxKeys = &v\n\treturn s\n}\n\n// SetName sets the Name field's value.\nfunc (s *ListObjectVersionsOutput) SetName(v string) *ListObjectVersionsOutput {\n\ts.Name = &v\n\treturn s\n}\n\n// SetNextKeyMarker sets the NextKeyMarker field's value.\nfunc (s *ListObjectVersionsOutput) SetNextKeyMarker(v string) *ListObjectVersionsOutput {\n\ts.NextKeyMarker = &v\n\treturn s\n}\n\n// SetNextVersionIdMarker sets the NextVersionIdMarker field's value.\nfunc (s *ListObjectVersionsOutput) SetNextVersionIdMarker(v string) *ListObjectVersionsOutput {\n\ts.NextVersionIdMarker = &v\n\treturn s\n}\n\n// SetPrefix sets the Prefix field's value.\nfunc (s *ListObjectVersionsOutput) SetPrefix(v string) *ListObjectVersionsOutput {\n\ts.Prefix = &v\n\treturn s\n}\n\n// SetVersionIdMarker sets the VersionIdMarker field's value.\nfunc (s *ListObjectVersionsOutput) SetVersionIdMarker(v string) *ListObjectVersionsOutput {\n\ts.VersionIdMarker = &v\n\treturn s\n}\n\n// SetVersions sets the Versions field's value.\nfunc (s *ListObjectVersionsOutput) SetVersions(v []*ObjectVersion) *ListObjectVersionsOutput {\n\ts.Versions = v\n\treturn s\n}\n\ntype ListObjectsInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n\n\t// A delimiter is a character you use to group keys.\n\tDelimiter *string `location:\"querystring\" locationName:\"delimiter\" type:\"string\"`\n\n\t// Requests Amazon S3 to encode the object keys in the response and specifies\n\t// the encoding method to use. An object key may contain any Unicode character;\n\t// however, XML 1.0 parser cannot parse some characters, such as characters\n\t// with an ASCII value from 0 to 10. For characters that are not supported in\n\t// XML 1.0, you can add this parameter to request that Amazon S3 encode the\n\t// keys in the response.\n\tEncodingType *string `location:\"querystring\" locationName:\"encoding-type\" type:\"string\" enum:\"EncodingType\"`\n\n\t// Specifies the key to start with when listing objects in a bucket.\n\tMarker *string `location:\"querystring\" locationName:\"marker\" type:\"string\"`\n\n\t// Sets the maximum number of keys returned in the response. The response might\n\t// contain fewer keys but will never contain more.\n\tMaxKeys *int64 `location:\"querystring\" locationName:\"max-keys\" type:\"integer\"`\n\n\t// Limits the response to keys that begin with the specified prefix.\n\tPrefix *string `location:\"querystring\" locationName:\"prefix\" type:\"string\"`\n\n\t// Confirms that the requester knows that she or he will be charged for the\n\t// list objects request. Bucket owners need not specify this parameter in their\n\t// requests.\n\tRequestPayer *string `location:\"header\" locationName:\"x-amz-request-payer\" type:\"string\" enum:\"RequestPayer\"`\n}\n\n// String returns the string representation\nfunc (s ListObjectsInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s ListObjectsInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *ListObjectsInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"ListObjectsInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *ListObjectsInput) SetBucket(v string) *ListObjectsInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *ListObjectsInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetDelimiter sets the Delimiter field's value.\nfunc (s *ListObjectsInput) SetDelimiter(v string) *ListObjectsInput {\n\ts.Delimiter = &v\n\treturn s\n}\n\n// SetEncodingType sets the EncodingType field's value.\nfunc (s *ListObjectsInput) SetEncodingType(v string) *ListObjectsInput {\n\ts.EncodingType = &v\n\treturn s\n}\n\n// SetMarker sets the Marker field's value.\nfunc (s *ListObjectsInput) SetMarker(v string) *ListObjectsInput {\n\ts.Marker = &v\n\treturn s\n}\n\n// SetMaxKeys sets the MaxKeys field's value.\nfunc (s *ListObjectsInput) SetMaxKeys(v int64) *ListObjectsInput {\n\ts.MaxKeys = &v\n\treturn s\n}\n\n// SetPrefix sets the Prefix field's value.\nfunc (s *ListObjectsInput) SetPrefix(v string) *ListObjectsInput {\n\ts.Prefix = &v\n\treturn s\n}\n\n// SetRequestPayer sets the RequestPayer field's value.\nfunc (s *ListObjectsInput) SetRequestPayer(v string) *ListObjectsInput {\n\ts.RequestPayer = &v\n\treturn s\n}\n\ntype ListObjectsOutput struct {\n\t_ struct{} `type:\"structure\"`\n\n\tCommonPrefixes []*CommonPrefix `type:\"list\" flattened:\"true\"`\n\n\tContents []*Object `type:\"list\" flattened:\"true\"`\n\n\tDelimiter *string `type:\"string\"`\n\n\t// Encoding type used by Amazon S3 to encode object keys in the response.\n\tEncodingType *string `type:\"string\" enum:\"EncodingType\"`\n\n\t// A flag that indicates whether or not Amazon S3 returned all of the results\n\t// that satisfied the search criteria.\n\tIsTruncated *bool `type:\"boolean\"`\n\n\tMarker *string `type:\"string\"`\n\n\tMaxKeys *int64 `type:\"integer\"`\n\n\tName *string `type:\"string\"`\n\n\t// When response is truncated (the IsTruncated element value in the response\n\t// is true), you can use the key name in this field as marker in the subsequent\n\t// request to get next set of objects. Amazon S3 lists objects in alphabetical\n\t// order Note: This element is returned only if you have delimiter request parameter\n\t// specified. If response does not include the NextMaker and it is truncated,\n\t// you can use the value of the last Key in the response as the marker in the\n\t// subsequent request to get the next set of object keys.\n\tNextMarker *string `type:\"string\"`\n\n\tPrefix *string `type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s ListObjectsOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s ListObjectsOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetCommonPrefixes sets the CommonPrefixes field's value.\nfunc (s *ListObjectsOutput) SetCommonPrefixes(v []*CommonPrefix) *ListObjectsOutput {\n\ts.CommonPrefixes = v\n\treturn s\n}\n\n// SetContents sets the Contents field's value.\nfunc (s *ListObjectsOutput) SetContents(v []*Object) *ListObjectsOutput {\n\ts.Contents = v\n\treturn s\n}\n\n// SetDelimiter sets the Delimiter field's value.\nfunc (s *ListObjectsOutput) SetDelimiter(v string) *ListObjectsOutput {\n\ts.Delimiter = &v\n\treturn s\n}\n\n// SetEncodingType sets the EncodingType field's value.\nfunc (s *ListObjectsOutput) SetEncodingType(v string) *ListObjectsOutput {\n\ts.EncodingType = &v\n\treturn s\n}\n\n// SetIsTruncated sets the IsTruncated field's value.\nfunc (s *ListObjectsOutput) SetIsTruncated(v bool) *ListObjectsOutput {\n\ts.IsTruncated = &v\n\treturn s\n}\n\n// SetMarker sets the Marker field's value.\nfunc (s *ListObjectsOutput) SetMarker(v string) *ListObjectsOutput {\n\ts.Marker = &v\n\treturn s\n}\n\n// SetMaxKeys sets the MaxKeys field's value.\nfunc (s *ListObjectsOutput) SetMaxKeys(v int64) *ListObjectsOutput {\n\ts.MaxKeys = &v\n\treturn s\n}\n\n// SetName sets the Name field's value.\nfunc (s *ListObjectsOutput) SetName(v string) *ListObjectsOutput {\n\ts.Name = &v\n\treturn s\n}\n\n// SetNextMarker sets the NextMarker field's value.\nfunc (s *ListObjectsOutput) SetNextMarker(v string) *ListObjectsOutput {\n\ts.NextMarker = &v\n\treturn s\n}\n\n// SetPrefix sets the Prefix field's value.\nfunc (s *ListObjectsOutput) SetPrefix(v string) *ListObjectsOutput {\n\ts.Prefix = &v\n\treturn s\n}\n\ntype ListObjectsV2Input struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Name of the bucket to list.\n\t//\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n\n\t// ContinuationToken indicates Amazon S3 that the list is being continued on\n\t// this bucket with a token. ContinuationToken is obfuscated and is not a real\n\t// key\n\tContinuationToken *string `location:\"querystring\" locationName:\"continuation-token\" type:\"string\"`\n\n\t// A delimiter is a character you use to group keys.\n\tDelimiter *string `location:\"querystring\" locationName:\"delimiter\" type:\"string\"`\n\n\t// Encoding type used by Amazon S3 to encode object keys in the response.\n\tEncodingType *string `location:\"querystring\" locationName:\"encoding-type\" type:\"string\" enum:\"EncodingType\"`\n\n\t// The owner field is not present in listV2 by default, if you want to return\n\t// owner field with each key in the result then set the fetch owner field to\n\t// true\n\tFetchOwner *bool `location:\"querystring\" locationName:\"fetch-owner\" type:\"boolean\"`\n\n\t// Sets the maximum number of keys returned in the response. The response might\n\t// contain fewer keys but will never contain more.\n\tMaxKeys *int64 `location:\"querystring\" locationName:\"max-keys\" type:\"integer\"`\n\n\t// Limits the response to keys that begin with the specified prefix.\n\tPrefix *string `location:\"querystring\" locationName:\"prefix\" type:\"string\"`\n\n\t// Confirms that the requester knows that she or he will be charged for the\n\t// list objects request in V2 style. Bucket owners need not specify this parameter\n\t// in their requests.\n\tRequestPayer *string `location:\"header\" locationName:\"x-amz-request-payer\" type:\"string\" enum:\"RequestPayer\"`\n\n\t// StartAfter is where you want Amazon S3 to start listing from. Amazon S3 starts\n\t// listing after this specified key. StartAfter can be any key in the bucket\n\tStartAfter *string `location:\"querystring\" locationName:\"start-after\" type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s ListObjectsV2Input) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s ListObjectsV2Input) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *ListObjectsV2Input) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"ListObjectsV2Input\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *ListObjectsV2Input) SetBucket(v string) *ListObjectsV2Input {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *ListObjectsV2Input) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetContinuationToken sets the ContinuationToken field's value.\nfunc (s *ListObjectsV2Input) SetContinuationToken(v string) *ListObjectsV2Input {\n\ts.ContinuationToken = &v\n\treturn s\n}\n\n// SetDelimiter sets the Delimiter field's value.\nfunc (s *ListObjectsV2Input) SetDelimiter(v string) *ListObjectsV2Input {\n\ts.Delimiter = &v\n\treturn s\n}\n\n// SetEncodingType sets the EncodingType field's value.\nfunc (s *ListObjectsV2Input) SetEncodingType(v string) *ListObjectsV2Input {\n\ts.EncodingType = &v\n\treturn s\n}\n\n// SetFetchOwner sets the FetchOwner field's value.\nfunc (s *ListObjectsV2Input) SetFetchOwner(v bool) *ListObjectsV2Input {\n\ts.FetchOwner = &v\n\treturn s\n}\n\n// SetMaxKeys sets the MaxKeys field's value.\nfunc (s *ListObjectsV2Input) SetMaxKeys(v int64) *ListObjectsV2Input {\n\ts.MaxKeys = &v\n\treturn s\n}\n\n// SetPrefix sets the Prefix field's value.\nfunc (s *ListObjectsV2Input) SetPrefix(v string) *ListObjectsV2Input {\n\ts.Prefix = &v\n\treturn s\n}\n\n// SetRequestPayer sets the RequestPayer field's value.\nfunc (s *ListObjectsV2Input) SetRequestPayer(v string) *ListObjectsV2Input {\n\ts.RequestPayer = &v\n\treturn s\n}\n\n// SetStartAfter sets the StartAfter field's value.\nfunc (s *ListObjectsV2Input) SetStartAfter(v string) *ListObjectsV2Input {\n\ts.StartAfter = &v\n\treturn s\n}\n\ntype ListObjectsV2Output struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// CommonPrefixes contains all (if there are any) keys between Prefix and the\n\t// next occurrence of the string specified by delimiter\n\tCommonPrefixes []*CommonPrefix `type:\"list\" flattened:\"true\"`\n\n\t// Metadata about each object returned.\n\tContents []*Object `type:\"list\" flattened:\"true\"`\n\n\t// ContinuationToken indicates Amazon S3 that the list is being continued on\n\t// this bucket with a token. ContinuationToken is obfuscated and is not a real\n\t// key\n\tContinuationToken *string `type:\"string\"`\n\n\t// A delimiter is a character you use to group keys.\n\tDelimiter *string `type:\"string\"`\n\n\t// Encoding type used by Amazon S3 to encode object keys in the response.\n\tEncodingType *string `type:\"string\" enum:\"EncodingType\"`\n\n\t// A flag that indicates whether or not Amazon S3 returned all of the results\n\t// that satisfied the search criteria.\n\tIsTruncated *bool `type:\"boolean\"`\n\n\t// KeyCount is the number of keys returned with this request. KeyCount will\n\t// always be less than equals to MaxKeys field. Say you ask for 50 keys, your\n\t// result will include less than equals 50 keys\n\tKeyCount *int64 `type:\"integer\"`\n\n\t// Sets the maximum number of keys returned in the response. The response might\n\t// contain fewer keys but will never contain more.\n\tMaxKeys *int64 `type:\"integer\"`\n\n\t// Name of the bucket to list.\n\tName *string `type:\"string\"`\n\n\t// NextContinuationToken is sent when isTruncated is true which means there\n\t// are more keys in the bucket that can be listed. The next list requests to\n\t// Amazon S3 can be continued with this NextContinuationToken. NextContinuationToken\n\t// is obfuscated and is not a real key\n\tNextContinuationToken *string `type:\"string\"`\n\n\t// Limits the response to keys that begin with the specified prefix.\n\tPrefix *string `type:\"string\"`\n\n\t// StartAfter is where you want Amazon S3 to start listing from. Amazon S3 starts\n\t// listing after this specified key. StartAfter can be any key in the bucket\n\tStartAfter *string `type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s ListObjectsV2Output) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s ListObjectsV2Output) GoString() string {\n\treturn s.String()\n}\n\n// SetCommonPrefixes sets the CommonPrefixes field's value.\nfunc (s *ListObjectsV2Output) SetCommonPrefixes(v []*CommonPrefix) *ListObjectsV2Output {\n\ts.CommonPrefixes = v\n\treturn s\n}\n\n// SetContents sets the Contents field's value.\nfunc (s *ListObjectsV2Output) SetContents(v []*Object) *ListObjectsV2Output {\n\ts.Contents = v\n\treturn s\n}\n\n// SetContinuationToken sets the ContinuationToken field's value.\nfunc (s *ListObjectsV2Output) SetContinuationToken(v string) *ListObjectsV2Output {\n\ts.ContinuationToken = &v\n\treturn s\n}\n\n// SetDelimiter sets the Delimiter field's value.\nfunc (s *ListObjectsV2Output) SetDelimiter(v string) *ListObjectsV2Output {\n\ts.Delimiter = &v\n\treturn s\n}\n\n// SetEncodingType sets the EncodingType field's value.\nfunc (s *ListObjectsV2Output) SetEncodingType(v string) *ListObjectsV2Output {\n\ts.EncodingType = &v\n\treturn s\n}\n\n// SetIsTruncated sets the IsTruncated field's value.\nfunc (s *ListObjectsV2Output) SetIsTruncated(v bool) *ListObjectsV2Output {\n\ts.IsTruncated = &v\n\treturn s\n}\n\n// SetKeyCount sets the KeyCount field's value.\nfunc (s *ListObjectsV2Output) SetKeyCount(v int64) *ListObjectsV2Output {\n\ts.KeyCount = &v\n\treturn s\n}\n\n// SetMaxKeys sets the MaxKeys field's value.\nfunc (s *ListObjectsV2Output) SetMaxKeys(v int64) *ListObjectsV2Output {\n\ts.MaxKeys = &v\n\treturn s\n}\n\n// SetName sets the Name field's value.\nfunc (s *ListObjectsV2Output) SetName(v string) *ListObjectsV2Output {\n\ts.Name = &v\n\treturn s\n}\n\n// SetNextContinuationToken sets the NextContinuationToken field's value.\nfunc (s *ListObjectsV2Output) SetNextContinuationToken(v string) *ListObjectsV2Output {\n\ts.NextContinuationToken = &v\n\treturn s\n}\n\n// SetPrefix sets the Prefix field's value.\nfunc (s *ListObjectsV2Output) SetPrefix(v string) *ListObjectsV2Output {\n\ts.Prefix = &v\n\treturn s\n}\n\n// SetStartAfter sets the StartAfter field's value.\nfunc (s *ListObjectsV2Output) SetStartAfter(v string) *ListObjectsV2Output {\n\ts.StartAfter = &v\n\treturn s\n}\n\ntype ListPartsInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n\n\t// Key is a required field\n\tKey *string `location:\"uri\" locationName:\"Key\" min:\"1\" type:\"string\" required:\"true\"`\n\n\t// Sets the maximum number of parts to return.\n\tMaxParts *int64 `location:\"querystring\" locationName:\"max-parts\" type:\"integer\"`\n\n\t// Specifies the part after which listing should begin. Only parts with higher\n\t// part numbers will be listed.\n\tPartNumberMarker *int64 `location:\"querystring\" locationName:\"part-number-marker\" type:\"integer\"`\n\n\t// Confirms that the requester knows that she or he will be charged for the\n\t// request. Bucket owners need not specify this parameter in their requests.\n\t// Documentation on downloading objects from requester pays buckets can be found\n\t// at http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html\n\tRequestPayer *string `location:\"header\" locationName:\"x-amz-request-payer\" type:\"string\" enum:\"RequestPayer\"`\n\n\t// Upload ID identifying the multipart upload whose parts are being listed.\n\t//\n\t// UploadId is a required field\n\tUploadId *string `location:\"querystring\" locationName:\"uploadId\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s ListPartsInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s ListPartsInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *ListPartsInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"ListPartsInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\tif s.Key == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Key\"))\n\t}\n\tif s.Key != nil && len(*s.Key) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Key\", 1))\n\t}\n\tif s.UploadId == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"UploadId\"))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *ListPartsInput) SetBucket(v string) *ListPartsInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *ListPartsInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetKey sets the Key field's value.\nfunc (s *ListPartsInput) SetKey(v string) *ListPartsInput {\n\ts.Key = &v\n\treturn s\n}\n\n// SetMaxParts sets the MaxParts field's value.\nfunc (s *ListPartsInput) SetMaxParts(v int64) *ListPartsInput {\n\ts.MaxParts = &v\n\treturn s\n}\n\n// SetPartNumberMarker sets the PartNumberMarker field's value.\nfunc (s *ListPartsInput) SetPartNumberMarker(v int64) *ListPartsInput {\n\ts.PartNumberMarker = &v\n\treturn s\n}\n\n// SetRequestPayer sets the RequestPayer field's value.\nfunc (s *ListPartsInput) SetRequestPayer(v string) *ListPartsInput {\n\ts.RequestPayer = &v\n\treturn s\n}\n\n// SetUploadId sets the UploadId field's value.\nfunc (s *ListPartsInput) SetUploadId(v string) *ListPartsInput {\n\ts.UploadId = &v\n\treturn s\n}\n\ntype ListPartsOutput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Date when multipart upload will become eligible for abort operation by lifecycle.\n\tAbortDate *time.Time `location:\"header\" locationName:\"x-amz-abort-date\" type:\"timestamp\"`\n\n\t// Id of the lifecycle rule that makes a multipart upload eligible for abort\n\t// operation.\n\tAbortRuleId *string `location:\"header\" locationName:\"x-amz-abort-rule-id\" type:\"string\"`\n\n\t// Name of the bucket to which the multipart upload was initiated.\n\tBucket *string `type:\"string\"`\n\n\t// Identifies who initiated the multipart upload.\n\tInitiator *Initiator `type:\"structure\"`\n\n\t// Indicates whether the returned list of parts is truncated.\n\tIsTruncated *bool `type:\"boolean\"`\n\n\t// Object key for which the multipart upload was initiated.\n\tKey *string `min:\"1\" type:\"string\"`\n\n\t// Maximum number of parts that were allowed in the response.\n\tMaxParts *int64 `type:\"integer\"`\n\n\t// When a list is truncated, this element specifies the last part in the list,\n\t// as well as the value to use for the part-number-marker request parameter\n\t// in a subsequent request.\n\tNextPartNumberMarker *int64 `type:\"integer\"`\n\n\tOwner *Owner `type:\"structure\"`\n\n\t// Part number after which listing begins.\n\tPartNumberMarker *int64 `type:\"integer\"`\n\n\tParts []*Part `locationName:\"Part\" type:\"list\" flattened:\"true\"`\n\n\t// If present, indicates that the requester was successfully charged for the\n\t// request.\n\tRequestCharged *string `location:\"header\" locationName:\"x-amz-request-charged\" type:\"string\" enum:\"RequestCharged\"`\n\n\t// The class of storage used to store the object.\n\tStorageClass *string `type:\"string\" enum:\"StorageClass\"`\n\n\t// Upload ID identifying the multipart upload whose parts are being listed.\n\tUploadId *string `type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s ListPartsOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s ListPartsOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetAbortDate sets the AbortDate field's value.\nfunc (s *ListPartsOutput) SetAbortDate(v time.Time) *ListPartsOutput {\n\ts.AbortDate = &v\n\treturn s\n}\n\n// SetAbortRuleId sets the AbortRuleId field's value.\nfunc (s *ListPartsOutput) SetAbortRuleId(v string) *ListPartsOutput {\n\ts.AbortRuleId = &v\n\treturn s\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *ListPartsOutput) SetBucket(v string) *ListPartsOutput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *ListPartsOutput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetInitiator sets the Initiator field's value.\nfunc (s *ListPartsOutput) SetInitiator(v *Initiator) *ListPartsOutput {\n\ts.Initiator = v\n\treturn s\n}\n\n// SetIsTruncated sets the IsTruncated field's value.\nfunc (s *ListPartsOutput) SetIsTruncated(v bool) *ListPartsOutput {\n\ts.IsTruncated = &v\n\treturn s\n}\n\n// SetKey sets the Key field's value.\nfunc (s *ListPartsOutput) SetKey(v string) *ListPartsOutput {\n\ts.Key = &v\n\treturn s\n}\n\n// SetMaxParts sets the MaxParts field's value.\nfunc (s *ListPartsOutput) SetMaxParts(v int64) *ListPartsOutput {\n\ts.MaxParts = &v\n\treturn s\n}\n\n// SetNextPartNumberMarker sets the NextPartNumberMarker field's value.\nfunc (s *ListPartsOutput) SetNextPartNumberMarker(v int64) *ListPartsOutput {\n\ts.NextPartNumberMarker = &v\n\treturn s\n}\n\n// SetOwner sets the Owner field's value.\nfunc (s *ListPartsOutput) SetOwner(v *Owner) *ListPartsOutput {\n\ts.Owner = v\n\treturn s\n}\n\n// SetPartNumberMarker sets the PartNumberMarker field's value.\nfunc (s *ListPartsOutput) SetPartNumberMarker(v int64) *ListPartsOutput {\n\ts.PartNumberMarker = &v\n\treturn s\n}\n\n// SetParts sets the Parts field's value.\nfunc (s *ListPartsOutput) SetParts(v []*Part) *ListPartsOutput {\n\ts.Parts = v\n\treturn s\n}\n\n// SetRequestCharged sets the RequestCharged field's value.\nfunc (s *ListPartsOutput) SetRequestCharged(v string) *ListPartsOutput {\n\ts.RequestCharged = &v\n\treturn s\n}\n\n// SetStorageClass sets the StorageClass field's value.\nfunc (s *ListPartsOutput) SetStorageClass(v string) *ListPartsOutput {\n\ts.StorageClass = &v\n\treturn s\n}\n\n// SetUploadId sets the UploadId field's value.\nfunc (s *ListPartsOutput) SetUploadId(v string) *ListPartsOutput {\n\ts.UploadId = &v\n\treturn s\n}\n\n// Describes an S3 location that will receive the results of the restore request.\ntype Location struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// A list of grants that control access to the staged results.\n\tAccessControlList []*Grant `locationNameList:\"Grant\" type:\"list\"`\n\n\t// The name of the bucket where the restore results will be placed.\n\t//\n\t// BucketName is a required field\n\tBucketName *string `type:\"string\" required:\"true\"`\n\n\t// The canned ACL to apply to the restore results.\n\tCannedACL *string `type:\"string\" enum:\"ObjectCannedACL\"`\n\n\t// Describes the server-side encryption that will be applied to the restore\n\t// results.\n\tEncryption *Encryption `type:\"structure\"`\n\n\t// The prefix that is prepended to the restore results for this request.\n\t//\n\t// Prefix is a required field\n\tPrefix *string `type:\"string\" required:\"true\"`\n\n\t// The class of storage used to store the restore results.\n\tStorageClass *string `type:\"string\" enum:\"StorageClass\"`\n\n\t// The tag-set that is applied to the restore results.\n\tTagging *Tagging `type:\"structure\"`\n\n\t// A list of metadata to store with the restore results in S3.\n\tUserMetadata []*MetadataEntry `locationNameList:\"MetadataEntry\" type:\"list\"`\n}\n\n// String returns the string representation\nfunc (s Location) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s Location) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *Location) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"Location\"}\n\tif s.BucketName == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"BucketName\"))\n\t}\n\tif s.Prefix == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Prefix\"))\n\t}\n\tif s.AccessControlList != nil {\n\t\tfor i, v := range s.AccessControlList {\n\t\t\tif v == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif err := v.Validate(); err != nil {\n\t\t\t\tinvalidParams.AddNested(fmt.Sprintf(\"%s[%v]\", \"AccessControlList\", i), err.(request.ErrInvalidParams))\n\t\t\t}\n\t\t}\n\t}\n\tif s.Encryption != nil {\n\t\tif err := s.Encryption.Validate(); err != nil {\n\t\t\tinvalidParams.AddNested(\"Encryption\", err.(request.ErrInvalidParams))\n\t\t}\n\t}\n\tif s.Tagging != nil {\n\t\tif err := s.Tagging.Validate(); err != nil {\n\t\t\tinvalidParams.AddNested(\"Tagging\", err.(request.ErrInvalidParams))\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetAccessControlList sets the AccessControlList field's value.\nfunc (s *Location) SetAccessControlList(v []*Grant) *Location {\n\ts.AccessControlList = v\n\treturn s\n}\n\n// SetBucketName sets the BucketName field's value.\nfunc (s *Location) SetBucketName(v string) *Location {\n\ts.BucketName = &v\n\treturn s\n}\n\n// SetCannedACL sets the CannedACL field's value.\nfunc (s *Location) SetCannedACL(v string) *Location {\n\ts.CannedACL = &v\n\treturn s\n}\n\n// SetEncryption sets the Encryption field's value.\nfunc (s *Location) SetEncryption(v *Encryption) *Location {\n\ts.Encryption = v\n\treturn s\n}\n\n// SetPrefix sets the Prefix field's value.\nfunc (s *Location) SetPrefix(v string) *Location {\n\ts.Prefix = &v\n\treturn s\n}\n\n// SetStorageClass sets the StorageClass field's value.\nfunc (s *Location) SetStorageClass(v string) *Location {\n\ts.StorageClass = &v\n\treturn s\n}\n\n// SetTagging sets the Tagging field's value.\nfunc (s *Location) SetTagging(v *Tagging) *Location {\n\ts.Tagging = v\n\treturn s\n}\n\n// SetUserMetadata sets the UserMetadata field's value.\nfunc (s *Location) SetUserMetadata(v []*MetadataEntry) *Location {\n\ts.UserMetadata = v\n\treturn s\n}\n\n// Describes where logs are stored and the prefix that Amazon S3 assigns to\n// all log object keys for a bucket. For more information, see PUT Bucket logging\n// (https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTlogging.html)\n// in the Amazon Simple Storage Service API Reference.\ntype LoggingEnabled struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Specifies the bucket where you want Amazon S3 to store server access logs.\n\t// You can have your logs delivered to any bucket that you own, including the\n\t// same bucket that is being logged. You can also configure multiple buckets\n\t// to deliver their logs to the same target bucket. In this case you should\n\t// choose a different TargetPrefix for each source bucket so that the delivered\n\t// log files can be distinguished by key.\n\t//\n\t// TargetBucket is a required field\n\tTargetBucket *string `type:\"string\" required:\"true\"`\n\n\tTargetGrants []*TargetGrant `locationNameList:\"Grant\" type:\"list\"`\n\n\t// A prefix for all log object keys. If you store log files from multiple Amazon\n\t// S3 buckets in a single bucket, you can use a prefix to distinguish which\n\t// log files came from which bucket.\n\t//\n\t// TargetPrefix is a required field\n\tTargetPrefix *string `type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s LoggingEnabled) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s LoggingEnabled) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *LoggingEnabled) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"LoggingEnabled\"}\n\tif s.TargetBucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"TargetBucket\"))\n\t}\n\tif s.TargetPrefix == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"TargetPrefix\"))\n\t}\n\tif s.TargetGrants != nil {\n\t\tfor i, v := range s.TargetGrants {\n\t\t\tif v == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif err := v.Validate(); err != nil {\n\t\t\t\tinvalidParams.AddNested(fmt.Sprintf(\"%s[%v]\", \"TargetGrants\", i), err.(request.ErrInvalidParams))\n\t\t\t}\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetTargetBucket sets the TargetBucket field's value.\nfunc (s *LoggingEnabled) SetTargetBucket(v string) *LoggingEnabled {\n\ts.TargetBucket = &v\n\treturn s\n}\n\n// SetTargetGrants sets the TargetGrants field's value.\nfunc (s *LoggingEnabled) SetTargetGrants(v []*TargetGrant) *LoggingEnabled {\n\ts.TargetGrants = v\n\treturn s\n}\n\n// SetTargetPrefix sets the TargetPrefix field's value.\nfunc (s *LoggingEnabled) SetTargetPrefix(v string) *LoggingEnabled {\n\ts.TargetPrefix = &v\n\treturn s\n}\n\n// A metadata key-value pair to store with an object.\ntype MetadataEntry struct {\n\t_ struct{} `type:\"structure\"`\n\n\tName *string `type:\"string\"`\n\n\tValue *string `type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s MetadataEntry) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s MetadataEntry) GoString() string {\n\treturn s.String()\n}\n\n// SetName sets the Name field's value.\nfunc (s *MetadataEntry) SetName(v string) *MetadataEntry {\n\ts.Name = &v\n\treturn s\n}\n\n// SetValue sets the Value field's value.\nfunc (s *MetadataEntry) SetValue(v string) *MetadataEntry {\n\ts.Value = &v\n\treturn s\n}\n\ntype MetricsAndOperator struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The prefix used when evaluating an AND predicate.\n\tPrefix *string `type:\"string\"`\n\n\t// The list of tags used when evaluating an AND predicate.\n\tTags []*Tag `locationName:\"Tag\" locationNameList:\"Tag\" type:\"list\" flattened:\"true\"`\n}\n\n// String returns the string representation\nfunc (s MetricsAndOperator) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s MetricsAndOperator) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *MetricsAndOperator) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"MetricsAndOperator\"}\n\tif s.Tags != nil {\n\t\tfor i, v := range s.Tags {\n\t\t\tif v == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif err := v.Validate(); err != nil {\n\t\t\t\tinvalidParams.AddNested(fmt.Sprintf(\"%s[%v]\", \"Tags\", i), err.(request.ErrInvalidParams))\n\t\t\t}\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetPrefix sets the Prefix field's value.\nfunc (s *MetricsAndOperator) SetPrefix(v string) *MetricsAndOperator {\n\ts.Prefix = &v\n\treturn s\n}\n\n// SetTags sets the Tags field's value.\nfunc (s *MetricsAndOperator) SetTags(v []*Tag) *MetricsAndOperator {\n\ts.Tags = v\n\treturn s\n}\n\n// Specifies a metrics configuration for the CloudWatch request metrics (specified\n// by the metrics configuration ID) from an Amazon S3 bucket. If you're updating\n// an existing metrics configuration, note that this is a full replacement of\n// the existing metrics configuration. If you don't include the elements you\n// want to keep, they are erased. For more information, see PUT Bucket metrics\n// (https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTMetricConfiguration.html)\n// in the Amazon Simple Storage Service API Reference.\ntype MetricsConfiguration struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Specifies a metrics configuration filter. The metrics configuration will\n\t// only include objects that meet the filter's criteria. A filter must be a\n\t// prefix, a tag, or a conjunction (MetricsAndOperator).\n\tFilter *MetricsFilter `type:\"structure\"`\n\n\t// The ID used to identify the metrics configuration.\n\t//\n\t// Id is a required field\n\tId *string `type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s MetricsConfiguration) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s MetricsConfiguration) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *MetricsConfiguration) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"MetricsConfiguration\"}\n\tif s.Id == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Id\"))\n\t}\n\tif s.Filter != nil {\n\t\tif err := s.Filter.Validate(); err != nil {\n\t\t\tinvalidParams.AddNested(\"Filter\", err.(request.ErrInvalidParams))\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetFilter sets the Filter field's value.\nfunc (s *MetricsConfiguration) SetFilter(v *MetricsFilter) *MetricsConfiguration {\n\ts.Filter = v\n\treturn s\n}\n\n// SetId sets the Id field's value.\nfunc (s *MetricsConfiguration) SetId(v string) *MetricsConfiguration {\n\ts.Id = &v\n\treturn s\n}\n\ntype MetricsFilter struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// A conjunction (logical AND) of predicates, which is used in evaluating a\n\t// metrics filter. The operator must have at least two predicates, and an object\n\t// must match all of the predicates in order for the filter to apply.\n\tAnd *MetricsAndOperator `type:\"structure\"`\n\n\t// The prefix used when evaluating a metrics filter.\n\tPrefix *string `type:\"string\"`\n\n\t// The tag used when evaluating a metrics filter.\n\tTag *Tag `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s MetricsFilter) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s MetricsFilter) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *MetricsFilter) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"MetricsFilter\"}\n\tif s.And != nil {\n\t\tif err := s.And.Validate(); err != nil {\n\t\t\tinvalidParams.AddNested(\"And\", err.(request.ErrInvalidParams))\n\t\t}\n\t}\n\tif s.Tag != nil {\n\t\tif err := s.Tag.Validate(); err != nil {\n\t\t\tinvalidParams.AddNested(\"Tag\", err.(request.ErrInvalidParams))\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetAnd sets the And field's value.\nfunc (s *MetricsFilter) SetAnd(v *MetricsAndOperator) *MetricsFilter {\n\ts.And = v\n\treturn s\n}\n\n// SetPrefix sets the Prefix field's value.\nfunc (s *MetricsFilter) SetPrefix(v string) *MetricsFilter {\n\ts.Prefix = &v\n\treturn s\n}\n\n// SetTag sets the Tag field's value.\nfunc (s *MetricsFilter) SetTag(v *Tag) *MetricsFilter {\n\ts.Tag = v\n\treturn s\n}\n\ntype MultipartUpload struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Date and time at which the multipart upload was initiated.\n\tInitiated *time.Time `type:\"timestamp\"`\n\n\t// Identifies who initiated the multipart upload.\n\tInitiator *Initiator `type:\"structure\"`\n\n\t// Key of the object for which the multipart upload was initiated.\n\tKey *string `min:\"1\" type:\"string\"`\n\n\tOwner *Owner `type:\"structure\"`\n\n\t// The class of storage used to store the object.\n\tStorageClass *string `type:\"string\" enum:\"StorageClass\"`\n\n\t// Upload ID that identifies the multipart upload.\n\tUploadId *string `type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s MultipartUpload) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s MultipartUpload) GoString() string {\n\treturn s.String()\n}\n\n// SetInitiated sets the Initiated field's value.\nfunc (s *MultipartUpload) SetInitiated(v time.Time) *MultipartUpload {\n\ts.Initiated = &v\n\treturn s\n}\n\n// SetInitiator sets the Initiator field's value.\nfunc (s *MultipartUpload) SetInitiator(v *Initiator) *MultipartUpload {\n\ts.Initiator = v\n\treturn s\n}\n\n// SetKey sets the Key field's value.\nfunc (s *MultipartUpload) SetKey(v string) *MultipartUpload {\n\ts.Key = &v\n\treturn s\n}\n\n// SetOwner sets the Owner field's value.\nfunc (s *MultipartUpload) SetOwner(v *Owner) *MultipartUpload {\n\ts.Owner = v\n\treturn s\n}\n\n// SetStorageClass sets the StorageClass field's value.\nfunc (s *MultipartUpload) SetStorageClass(v string) *MultipartUpload {\n\ts.StorageClass = &v\n\treturn s\n}\n\n// SetUploadId sets the UploadId field's value.\nfunc (s *MultipartUpload) SetUploadId(v string) *MultipartUpload {\n\ts.UploadId = &v\n\treturn s\n}\n\n// Specifies when noncurrent object versions expire. Upon expiration, Amazon\n// S3 permanently deletes the noncurrent object versions. You set this lifecycle\n// configuration action on a bucket that has versioning enabled (or suspended)\n// to request that Amazon S3 delete noncurrent object versions at a specific\n// period in the object's lifetime.\ntype NoncurrentVersionExpiration struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Specifies the number of days an object is noncurrent before Amazon S3 can\n\t// perform the associated action. For information about the noncurrent days\n\t// calculations, see How Amazon S3 Calculates When an Object Became Noncurrent\n\t// (https://docs.aws.amazon.com/AmazonS3/latest/dev/intro-lifecycle-rules.html#non-current-days-calculations)\n\t// in the Amazon Simple Storage Service Developer Guide.\n\tNoncurrentDays *int64 `type:\"integer\"`\n}\n\n// String returns the string representation\nfunc (s NoncurrentVersionExpiration) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s NoncurrentVersionExpiration) GoString() string {\n\treturn s.String()\n}\n\n// SetNoncurrentDays sets the NoncurrentDays field's value.\nfunc (s *NoncurrentVersionExpiration) SetNoncurrentDays(v int64) *NoncurrentVersionExpiration {\n\ts.NoncurrentDays = &v\n\treturn s\n}\n\n// Container for the transition rule that describes when noncurrent objects\n// transition to the STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING, GLACIER,\n// or DEEP_ARCHIVE storage class. If your bucket is versioning-enabled (or versioning\n// is suspended), you can set this action to request that Amazon S3 transition\n// noncurrent object versions to the STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING,\n// GLACIER, or DEEP_ARCHIVE storage class at a specific period in the object's\n// lifetime.\ntype NoncurrentVersionTransition struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Specifies the number of days an object is noncurrent before Amazon S3 can\n\t// perform the associated action. For information about the noncurrent days\n\t// calculations, see How Amazon S3 Calculates When an Object Became Noncurrent\n\t// (https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html)\n\t// in the Amazon Simple Storage Service Developer Guide.\n\tNoncurrentDays *int64 `type:\"integer\"`\n\n\t// The class of storage used to store the object.\n\tStorageClass *string `type:\"string\" enum:\"TransitionStorageClass\"`\n}\n\n// String returns the string representation\nfunc (s NoncurrentVersionTransition) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s NoncurrentVersionTransition) GoString() string {\n\treturn s.String()\n}\n\n// SetNoncurrentDays sets the NoncurrentDays field's value.\nfunc (s *NoncurrentVersionTransition) SetNoncurrentDays(v int64) *NoncurrentVersionTransition {\n\ts.NoncurrentDays = &v\n\treturn s\n}\n\n// SetStorageClass sets the StorageClass field's value.\nfunc (s *NoncurrentVersionTransition) SetStorageClass(v string) *NoncurrentVersionTransition {\n\ts.StorageClass = &v\n\treturn s\n}\n\n// A container for specifying the notification configuration of the bucket.\n// If this element is empty, notifications are turned off for the bucket.\ntype NotificationConfiguration struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Describes the AWS Lambda functions to invoke and the events for which to\n\t// invoke them.\n\tLambdaFunctionConfigurations []*LambdaFunctionConfiguration `locationName:\"CloudFunctionConfiguration\" type:\"list\" flattened:\"true\"`\n\n\t// The Amazon Simple Queue Service queues to publish messages to and the events\n\t// for which to publish messages.\n\tQueueConfigurations []*QueueConfiguration `locationName:\"QueueConfiguration\" type:\"list\" flattened:\"true\"`\n\n\t// The topic to which notifications are sent and the events for which notifications\n\t// are generated.\n\tTopicConfigurations []*TopicConfiguration `locationName:\"TopicConfiguration\" type:\"list\" flattened:\"true\"`\n}\n\n// String returns the string representation\nfunc (s NotificationConfiguration) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s NotificationConfiguration) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *NotificationConfiguration) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"NotificationConfiguration\"}\n\tif s.LambdaFunctionConfigurations != nil {\n\t\tfor i, v := range s.LambdaFunctionConfigurations {\n\t\t\tif v == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif err := v.Validate(); err != nil {\n\t\t\t\tinvalidParams.AddNested(fmt.Sprintf(\"%s[%v]\", \"LambdaFunctionConfigurations\", i), err.(request.ErrInvalidParams))\n\t\t\t}\n\t\t}\n\t}\n\tif s.QueueConfigurations != nil {\n\t\tfor i, v := range s.QueueConfigurations {\n\t\t\tif v == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif err := v.Validate(); err != nil {\n\t\t\t\tinvalidParams.AddNested(fmt.Sprintf(\"%s[%v]\", \"QueueConfigurations\", i), err.(request.ErrInvalidParams))\n\t\t\t}\n\t\t}\n\t}\n\tif s.TopicConfigurations != nil {\n\t\tfor i, v := range s.TopicConfigurations {\n\t\t\tif v == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif err := v.Validate(); err != nil {\n\t\t\t\tinvalidParams.AddNested(fmt.Sprintf(\"%s[%v]\", \"TopicConfigurations\", i), err.(request.ErrInvalidParams))\n\t\t\t}\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetLambdaFunctionConfigurations sets the LambdaFunctionConfigurations field's value.\nfunc (s *NotificationConfiguration) SetLambdaFunctionConfigurations(v []*LambdaFunctionConfiguration) *NotificationConfiguration {\n\ts.LambdaFunctionConfigurations = v\n\treturn s\n}\n\n// SetQueueConfigurations sets the QueueConfigurations field's value.\nfunc (s *NotificationConfiguration) SetQueueConfigurations(v []*QueueConfiguration) *NotificationConfiguration {\n\ts.QueueConfigurations = v\n\treturn s\n}\n\n// SetTopicConfigurations sets the TopicConfigurations field's value.\nfunc (s *NotificationConfiguration) SetTopicConfigurations(v []*TopicConfiguration) *NotificationConfiguration {\n\ts.TopicConfigurations = v\n\treturn s\n}\n\ntype NotificationConfigurationDeprecated struct {\n\t_ struct{} `type:\"structure\"`\n\n\tCloudFunctionConfiguration *CloudFunctionConfiguration `type:\"structure\"`\n\n\tQueueConfiguration *QueueConfigurationDeprecated `type:\"structure\"`\n\n\tTopicConfiguration *TopicConfigurationDeprecated `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s NotificationConfigurationDeprecated) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s NotificationConfigurationDeprecated) GoString() string {\n\treturn s.String()\n}\n\n// SetCloudFunctionConfiguration sets the CloudFunctionConfiguration field's value.\nfunc (s *NotificationConfigurationDeprecated) SetCloudFunctionConfiguration(v *CloudFunctionConfiguration) *NotificationConfigurationDeprecated {\n\ts.CloudFunctionConfiguration = v\n\treturn s\n}\n\n// SetQueueConfiguration sets the QueueConfiguration field's value.\nfunc (s *NotificationConfigurationDeprecated) SetQueueConfiguration(v *QueueConfigurationDeprecated) *NotificationConfigurationDeprecated {\n\ts.QueueConfiguration = v\n\treturn s\n}\n\n// SetTopicConfiguration sets the TopicConfiguration field's value.\nfunc (s *NotificationConfigurationDeprecated) SetTopicConfiguration(v *TopicConfigurationDeprecated) *NotificationConfigurationDeprecated {\n\ts.TopicConfiguration = v\n\treturn s\n}\n\n// Specifies object key name filtering rules. For information about key name\n// filtering, see Configuring Event Notifications (https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html)\n// in the Amazon Simple Storage Service Developer Guide.\ntype NotificationConfigurationFilter struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// A container for object key name prefix and suffix filtering rules.\n\tKey *KeyFilter `locationName:\"S3Key\" type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s NotificationConfigurationFilter) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s NotificationConfigurationFilter) GoString() string {\n\treturn s.String()\n}\n\n// SetKey sets the Key field's value.\nfunc (s *NotificationConfigurationFilter) SetKey(v *KeyFilter) *NotificationConfigurationFilter {\n\ts.Key = v\n\treturn s\n}\n\ntype Object struct {\n\t_ struct{} `type:\"structure\"`\n\n\tETag *string `type:\"string\"`\n\n\tKey *string `min:\"1\" type:\"string\"`\n\n\tLastModified *time.Time `type:\"timestamp\"`\n\n\tOwner *Owner `type:\"structure\"`\n\n\tSize *int64 `type:\"integer\"`\n\n\t// The class of storage used to store the object.\n\tStorageClass *string `type:\"string\" enum:\"ObjectStorageClass\"`\n}\n\n// String returns the string representation\nfunc (s Object) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s Object) GoString() string {\n\treturn s.String()\n}\n\n// SetETag sets the ETag field's value.\nfunc (s *Object) SetETag(v string) *Object {\n\ts.ETag = &v\n\treturn s\n}\n\n// SetKey sets the Key field's value.\nfunc (s *Object) SetKey(v string) *Object {\n\ts.Key = &v\n\treturn s\n}\n\n// SetLastModified sets the LastModified field's value.\nfunc (s *Object) SetLastModified(v time.Time) *Object {\n\ts.LastModified = &v\n\treturn s\n}\n\n// SetOwner sets the Owner field's value.\nfunc (s *Object) SetOwner(v *Owner) *Object {\n\ts.Owner = v\n\treturn s\n}\n\n// SetSize sets the Size field's value.\nfunc (s *Object) SetSize(v int64) *Object {\n\ts.Size = &v\n\treturn s\n}\n\n// SetStorageClass sets the StorageClass field's value.\nfunc (s *Object) SetStorageClass(v string) *Object {\n\ts.StorageClass = &v\n\treturn s\n}\n\ntype ObjectIdentifier struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Key name of the object to delete.\n\t//\n\t// Key is a required field\n\tKey *string `min:\"1\" type:\"string\" required:\"true\"`\n\n\t// VersionId for the specific version of the object to delete.\n\tVersionId *string `type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s ObjectIdentifier) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s ObjectIdentifier) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *ObjectIdentifier) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"ObjectIdentifier\"}\n\tif s.Key == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Key\"))\n\t}\n\tif s.Key != nil && len(*s.Key) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Key\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetKey sets the Key field's value.\nfunc (s *ObjectIdentifier) SetKey(v string) *ObjectIdentifier {\n\ts.Key = &v\n\treturn s\n}\n\n// SetVersionId sets the VersionId field's value.\nfunc (s *ObjectIdentifier) SetVersionId(v string) *ObjectIdentifier {\n\ts.VersionId = &v\n\treturn s\n}\n\n// The container element for object lock configuration parameters.\ntype ObjectLockConfiguration struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Indicates whether this bucket has an object lock configuration enabled.\n\tObjectLockEnabled *string `type:\"string\" enum:\"ObjectLockEnabled\"`\n\n\t// The object lock rule in place for the specified object.\n\tRule *ObjectLockRule `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s ObjectLockConfiguration) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s ObjectLockConfiguration) GoString() string {\n\treturn s.String()\n}\n\n// SetObjectLockEnabled sets the ObjectLockEnabled field's value.\nfunc (s *ObjectLockConfiguration) SetObjectLockEnabled(v string) *ObjectLockConfiguration {\n\ts.ObjectLockEnabled = &v\n\treturn s\n}\n\n// SetRule sets the Rule field's value.\nfunc (s *ObjectLockConfiguration) SetRule(v *ObjectLockRule) *ObjectLockConfiguration {\n\ts.Rule = v\n\treturn s\n}\n\n// A Legal Hold configuration for an object.\ntype ObjectLockLegalHold struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Indicates whether the specified object has a Legal Hold in place.\n\tStatus *string `type:\"string\" enum:\"ObjectLockLegalHoldStatus\"`\n}\n\n// String returns the string representation\nfunc (s ObjectLockLegalHold) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s ObjectLockLegalHold) GoString() string {\n\treturn s.String()\n}\n\n// SetStatus sets the Status field's value.\nfunc (s *ObjectLockLegalHold) SetStatus(v string) *ObjectLockLegalHold {\n\ts.Status = &v\n\treturn s\n}\n\n// A Retention configuration for an object.\ntype ObjectLockRetention struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Indicates the Retention mode for the specified object.\n\tMode *string `type:\"string\" enum:\"ObjectLockRetentionMode\"`\n\n\t// The date on which this object lock retention expires.\n\tRetainUntilDate *time.Time `type:\"timestamp\" timestampFormat:\"iso8601\"`\n}\n\n// String returns the string representation\nfunc (s ObjectLockRetention) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s ObjectLockRetention) GoString() string {\n\treturn s.String()\n}\n\n// SetMode sets the Mode field's value.\nfunc (s *ObjectLockRetention) SetMode(v string) *ObjectLockRetention {\n\ts.Mode = &v\n\treturn s\n}\n\n// SetRetainUntilDate sets the RetainUntilDate field's value.\nfunc (s *ObjectLockRetention) SetRetainUntilDate(v time.Time) *ObjectLockRetention {\n\ts.RetainUntilDate = &v\n\treturn s\n}\n\n// The container element for an object lock rule.\ntype ObjectLockRule struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The default retention period that you want to apply to new objects placed\n\t// in the specified bucket.\n\tDefaultRetention *DefaultRetention `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s ObjectLockRule) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s ObjectLockRule) GoString() string {\n\treturn s.String()\n}\n\n// SetDefaultRetention sets the DefaultRetention field's value.\nfunc (s *ObjectLockRule) SetDefaultRetention(v *DefaultRetention) *ObjectLockRule {\n\ts.DefaultRetention = v\n\treturn s\n}\n\ntype ObjectVersion struct {\n\t_ struct{} `type:\"structure\"`\n\n\tETag *string `type:\"string\"`\n\n\t// Specifies whether the object is (true) or is not (false) the latest version\n\t// of an object.\n\tIsLatest *bool `type:\"boolean\"`\n\n\t// The object key.\n\tKey *string `min:\"1\" type:\"string\"`\n\n\t// Date and time the object was last modified.\n\tLastModified *time.Time `type:\"timestamp\"`\n\n\tOwner *Owner `type:\"structure\"`\n\n\t// Size in bytes of the object.\n\tSize *int64 `type:\"integer\"`\n\n\t// The class of storage used to store the object.\n\tStorageClass *string `type:\"string\" enum:\"ObjectVersionStorageClass\"`\n\n\t// Version ID of an object.\n\tVersionId *string `type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s ObjectVersion) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s ObjectVersion) GoString() string {\n\treturn s.String()\n}\n\n// SetETag sets the ETag field's value.\nfunc (s *ObjectVersion) SetETag(v string) *ObjectVersion {\n\ts.ETag = &v\n\treturn s\n}\n\n// SetIsLatest sets the IsLatest field's value.\nfunc (s *ObjectVersion) SetIsLatest(v bool) *ObjectVersion {\n\ts.IsLatest = &v\n\treturn s\n}\n\n// SetKey sets the Key field's value.\nfunc (s *ObjectVersion) SetKey(v string) *ObjectVersion {\n\ts.Key = &v\n\treturn s\n}\n\n// SetLastModified sets the LastModified field's value.\nfunc (s *ObjectVersion) SetLastModified(v time.Time) *ObjectVersion {\n\ts.LastModified = &v\n\treturn s\n}\n\n// SetOwner sets the Owner field's value.\nfunc (s *ObjectVersion) SetOwner(v *Owner) *ObjectVersion {\n\ts.Owner = v\n\treturn s\n}\n\n// SetSize sets the Size field's value.\nfunc (s *ObjectVersion) SetSize(v int64) *ObjectVersion {\n\ts.Size = &v\n\treturn s\n}\n\n// SetStorageClass sets the StorageClass field's value.\nfunc (s *ObjectVersion) SetStorageClass(v string) *ObjectVersion {\n\ts.StorageClass = &v\n\treturn s\n}\n\n// SetVersionId sets the VersionId field's value.\nfunc (s *ObjectVersion) SetVersionId(v string) *ObjectVersion {\n\ts.VersionId = &v\n\treturn s\n}\n\n// Describes the location where the restore job's output is stored.\ntype OutputLocation struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Describes an S3 location that will receive the results of the restore request.\n\tS3 *Location `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s OutputLocation) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s OutputLocation) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *OutputLocation) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"OutputLocation\"}\n\tif s.S3 != nil {\n\t\tif err := s.S3.Validate(); err != nil {\n\t\t\tinvalidParams.AddNested(\"S3\", err.(request.ErrInvalidParams))\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetS3 sets the S3 field's value.\nfunc (s *OutputLocation) SetS3(v *Location) *OutputLocation {\n\ts.S3 = v\n\treturn s\n}\n\n// Describes how results of the Select job are serialized.\ntype OutputSerialization struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Describes the serialization of CSV-encoded Select results.\n\tCSV *CSVOutput `type:\"structure\"`\n\n\t// Specifies JSON as request's output serialization format.\n\tJSON *JSONOutput `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s OutputSerialization) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s OutputSerialization) GoString() string {\n\treturn s.String()\n}\n\n// SetCSV sets the CSV field's value.\nfunc (s *OutputSerialization) SetCSV(v *CSVOutput) *OutputSerialization {\n\ts.CSV = v\n\treturn s\n}\n\n// SetJSON sets the JSON field's value.\nfunc (s *OutputSerialization) SetJSON(v *JSONOutput) *OutputSerialization {\n\ts.JSON = v\n\treturn s\n}\n\ntype Owner struct {\n\t_ struct{} `type:\"structure\"`\n\n\tDisplayName *string `type:\"string\"`\n\n\tID *string `type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s Owner) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s Owner) GoString() string {\n\treturn s.String()\n}\n\n// SetDisplayName sets the DisplayName field's value.\nfunc (s *Owner) SetDisplayName(v string) *Owner {\n\ts.DisplayName = &v\n\treturn s\n}\n\n// SetID sets the ID field's value.\nfunc (s *Owner) SetID(v string) *Owner {\n\ts.ID = &v\n\treturn s\n}\n\ntype ParquetInput struct {\n\t_ struct{} `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s ParquetInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s ParquetInput) GoString() string {\n\treturn s.String()\n}\n\ntype Part struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Entity tag returned when the part was uploaded.\n\tETag *string `type:\"string\"`\n\n\t// Date and time at which the part was uploaded.\n\tLastModified *time.Time `type:\"timestamp\"`\n\n\t// Part number identifying the part. This is a positive integer between 1 and\n\t// 10,000.\n\tPartNumber *int64 `type:\"integer\"`\n\n\t// Size in bytes of the uploaded part data.\n\tSize *int64 `type:\"integer\"`\n}\n\n// String returns the string representation\nfunc (s Part) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s Part) GoString() string {\n\treturn s.String()\n}\n\n// SetETag sets the ETag field's value.\nfunc (s *Part) SetETag(v string) *Part {\n\ts.ETag = &v\n\treturn s\n}\n\n// SetLastModified sets the LastModified field's value.\nfunc (s *Part) SetLastModified(v time.Time) *Part {\n\ts.LastModified = &v\n\treturn s\n}\n\n// SetPartNumber sets the PartNumber field's value.\nfunc (s *Part) SetPartNumber(v int64) *Part {\n\ts.PartNumber = &v\n\treturn s\n}\n\n// SetSize sets the Size field's value.\nfunc (s *Part) SetSize(v int64) *Part {\n\ts.Size = &v\n\treturn s\n}\n\n// The container element for a bucket's policy status.\ntype PolicyStatus struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The policy status for this bucket. TRUE indicates that this bucket is public.\n\t// FALSE indicates that the bucket is not public.\n\tIsPublic *bool `locationName:\"IsPublic\" type:\"boolean\"`\n}\n\n// String returns the string representation\nfunc (s PolicyStatus) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s PolicyStatus) GoString() string {\n\treturn s.String()\n}\n\n// SetIsPublic sets the IsPublic field's value.\nfunc (s *PolicyStatus) SetIsPublic(v bool) *PolicyStatus {\n\ts.IsPublic = &v\n\treturn s\n}\n\ntype Progress struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The current number of uncompressed object bytes processed.\n\tBytesProcessed *int64 `type:\"long\"`\n\n\t// The current number of bytes of records payload data returned.\n\tBytesReturned *int64 `type:\"long\"`\n\n\t// The current number of object bytes scanned.\n\tBytesScanned *int64 `type:\"long\"`\n}\n\n// String returns the string representation\nfunc (s Progress) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s Progress) GoString() string {\n\treturn s.String()\n}\n\n// SetBytesProcessed sets the BytesProcessed field's value.\nfunc (s *Progress) SetBytesProcessed(v int64) *Progress {\n\ts.BytesProcessed = &v\n\treturn s\n}\n\n// SetBytesReturned sets the BytesReturned field's value.\nfunc (s *Progress) SetBytesReturned(v int64) *Progress {\n\ts.BytesReturned = &v\n\treturn s\n}\n\n// SetBytesScanned sets the BytesScanned field's value.\nfunc (s *Progress) SetBytesScanned(v int64) *Progress {\n\ts.BytesScanned = &v\n\treturn s\n}\n\ntype ProgressEvent struct {\n\t_ struct{} `locationName:\"ProgressEvent\" type:\"structure\" payload:\"Details\"`\n\n\t// The Progress event details.\n\tDetails *Progress `locationName:\"Details\" type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s ProgressEvent) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s ProgressEvent) GoString() string {\n\treturn s.String()\n}\n\n// SetDetails sets the Details field's value.\nfunc (s *ProgressEvent) SetDetails(v *Progress) *ProgressEvent {\n\ts.Details = v\n\treturn s\n}\n\n// The ProgressEvent is and event in the SelectObjectContentEventStream group of events.\nfunc (s *ProgressEvent) eventSelectObjectContentEventStream() {}\n\n// UnmarshalEvent unmarshals the EventStream Message into the ProgressEvent value.\n// This method is only used internally within the SDK's EventStream handling.\nfunc (s *ProgressEvent) UnmarshalEvent(\n\tpayloadUnmarshaler protocol.PayloadUnmarshaler,\n\tmsg eventstream.Message,\n) error {\n\tif err := payloadUnmarshaler.UnmarshalPayload(\n\t\tbytes.NewReader(msg.Payload), s,\n\t); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// Specifies the Block Public Access configuration for an Amazon S3 bucket.\ntype PublicAccessBlockConfiguration struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Specifies whether Amazon S3 should block public access control lists (ACLs)\n\t// for this bucket and objects in this bucket. Setting this element to TRUE\n\t// causes the following behavior:\n\t//\n\t//    * PUT Bucket acl and PUT Object acl calls fail if the specified ACL is\n\t//    public.\n\t//\n\t//    * PUT Object calls fail if the request includes a public ACL.\n\t//\n\t// Enabling this setting doesn't affect existing policies or ACLs.\n\tBlockPublicAcls *bool `locationName:\"BlockPublicAcls\" type:\"boolean\"`\n\n\t// Specifies whether Amazon S3 should block public bucket policies for this\n\t// bucket. Setting this element to TRUE causes Amazon S3 to reject calls to\n\t// PUT Bucket policy if the specified bucket policy allows public access.\n\t//\n\t// Enabling this setting doesn't affect existing bucket policies.\n\tBlockPublicPolicy *bool `locationName:\"BlockPublicPolicy\" type:\"boolean\"`\n\n\t// Specifies whether Amazon S3 should ignore public ACLs for this bucket and\n\t// objects in this bucket. Setting this element to TRUE causes Amazon S3 to\n\t// ignore all public ACLs on this bucket and objects in this bucket.\n\t//\n\t// Enabling this setting doesn't affect the persistence of any existing ACLs\n\t// and doesn't prevent new public ACLs from being set.\n\tIgnorePublicAcls *bool `locationName:\"IgnorePublicAcls\" type:\"boolean\"`\n\n\t// Specifies whether Amazon S3 should restrict public bucket policies for this\n\t// bucket. Setting this element to TRUE restricts access to this bucket to only\n\t// AWS services and authorized users within this account if the bucket has a\n\t// public policy.\n\t//\n\t// Enabling this setting doesn't affect previously stored bucket policies, except\n\t// that public and cross-account access within any public bucket policy, including\n\t// non-public delegation to specific accounts, is blocked.\n\tRestrictPublicBuckets *bool `locationName:\"RestrictPublicBuckets\" type:\"boolean\"`\n}\n\n// String returns the string representation\nfunc (s PublicAccessBlockConfiguration) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s PublicAccessBlockConfiguration) GoString() string {\n\treturn s.String()\n}\n\n// SetBlockPublicAcls sets the BlockPublicAcls field's value.\nfunc (s *PublicAccessBlockConfiguration) SetBlockPublicAcls(v bool) *PublicAccessBlockConfiguration {\n\ts.BlockPublicAcls = &v\n\treturn s\n}\n\n// SetBlockPublicPolicy sets the BlockPublicPolicy field's value.\nfunc (s *PublicAccessBlockConfiguration) SetBlockPublicPolicy(v bool) *PublicAccessBlockConfiguration {\n\ts.BlockPublicPolicy = &v\n\treturn s\n}\n\n// SetIgnorePublicAcls sets the IgnorePublicAcls field's value.\nfunc (s *PublicAccessBlockConfiguration) SetIgnorePublicAcls(v bool) *PublicAccessBlockConfiguration {\n\ts.IgnorePublicAcls = &v\n\treturn s\n}\n\n// SetRestrictPublicBuckets sets the RestrictPublicBuckets field's value.\nfunc (s *PublicAccessBlockConfiguration) SetRestrictPublicBuckets(v bool) *PublicAccessBlockConfiguration {\n\ts.RestrictPublicBuckets = &v\n\treturn s\n}\n\ntype PutBucketAccelerateConfigurationInput struct {\n\t_ struct{} `type:\"structure\" payload:\"AccelerateConfiguration\"`\n\n\t// Specifies the Accelerate Configuration you want to set for the bucket.\n\t//\n\t// AccelerateConfiguration is a required field\n\tAccelerateConfiguration *AccelerateConfiguration `locationName:\"AccelerateConfiguration\" type:\"structure\" required:\"true\" xmlURI:\"http://s3.amazonaws.com/doc/2006-03-01/\"`\n\n\t// Name of the bucket for which the accelerate configuration is set.\n\t//\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s PutBucketAccelerateConfigurationInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s PutBucketAccelerateConfigurationInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *PutBucketAccelerateConfigurationInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"PutBucketAccelerateConfigurationInput\"}\n\tif s.AccelerateConfiguration == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"AccelerateConfiguration\"))\n\t}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetAccelerateConfiguration sets the AccelerateConfiguration field's value.\nfunc (s *PutBucketAccelerateConfigurationInput) SetAccelerateConfiguration(v *AccelerateConfiguration) *PutBucketAccelerateConfigurationInput {\n\ts.AccelerateConfiguration = v\n\treturn s\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *PutBucketAccelerateConfigurationInput) SetBucket(v string) *PutBucketAccelerateConfigurationInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *PutBucketAccelerateConfigurationInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\ntype PutBucketAccelerateConfigurationOutput struct {\n\t_ struct{} `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s PutBucketAccelerateConfigurationOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s PutBucketAccelerateConfigurationOutput) GoString() string {\n\treturn s.String()\n}\n\ntype PutBucketAclInput struct {\n\t_ struct{} `type:\"structure\" payload:\"AccessControlPolicy\"`\n\n\t// The canned ACL to apply to the bucket.\n\tACL *string `location:\"header\" locationName:\"x-amz-acl\" type:\"string\" enum:\"BucketCannedACL\"`\n\n\t// Contains the elements that set the ACL permissions for an object per grantee.\n\tAccessControlPolicy *AccessControlPolicy `locationName:\"AccessControlPolicy\" type:\"structure\" xmlURI:\"http://s3.amazonaws.com/doc/2006-03-01/\"`\n\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n\n\t// Allows grantee the read, write, read ACP, and write ACP permissions on the\n\t// bucket.\n\tGrantFullControl *string `location:\"header\" locationName:\"x-amz-grant-full-control\" type:\"string\"`\n\n\t// Allows grantee to list the objects in the bucket.\n\tGrantRead *string `location:\"header\" locationName:\"x-amz-grant-read\" type:\"string\"`\n\n\t// Allows grantee to read the bucket ACL.\n\tGrantReadACP *string `location:\"header\" locationName:\"x-amz-grant-read-acp\" type:\"string\"`\n\n\t// Allows grantee to create, overwrite, and delete any object in the bucket.\n\tGrantWrite *string `location:\"header\" locationName:\"x-amz-grant-write\" type:\"string\"`\n\n\t// Allows grantee to write the ACL for the applicable bucket.\n\tGrantWriteACP *string `location:\"header\" locationName:\"x-amz-grant-write-acp\" type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s PutBucketAclInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s PutBucketAclInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *PutBucketAclInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"PutBucketAclInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\tif s.AccessControlPolicy != nil {\n\t\tif err := s.AccessControlPolicy.Validate(); err != nil {\n\t\t\tinvalidParams.AddNested(\"AccessControlPolicy\", err.(request.ErrInvalidParams))\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetACL sets the ACL field's value.\nfunc (s *PutBucketAclInput) SetACL(v string) *PutBucketAclInput {\n\ts.ACL = &v\n\treturn s\n}\n\n// SetAccessControlPolicy sets the AccessControlPolicy field's value.\nfunc (s *PutBucketAclInput) SetAccessControlPolicy(v *AccessControlPolicy) *PutBucketAclInput {\n\ts.AccessControlPolicy = v\n\treturn s\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *PutBucketAclInput) SetBucket(v string) *PutBucketAclInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *PutBucketAclInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetGrantFullControl sets the GrantFullControl field's value.\nfunc (s *PutBucketAclInput) SetGrantFullControl(v string) *PutBucketAclInput {\n\ts.GrantFullControl = &v\n\treturn s\n}\n\n// SetGrantRead sets the GrantRead field's value.\nfunc (s *PutBucketAclInput) SetGrantRead(v string) *PutBucketAclInput {\n\ts.GrantRead = &v\n\treturn s\n}\n\n// SetGrantReadACP sets the GrantReadACP field's value.\nfunc (s *PutBucketAclInput) SetGrantReadACP(v string) *PutBucketAclInput {\n\ts.GrantReadACP = &v\n\treturn s\n}\n\n// SetGrantWrite sets the GrantWrite field's value.\nfunc (s *PutBucketAclInput) SetGrantWrite(v string) *PutBucketAclInput {\n\ts.GrantWrite = &v\n\treturn s\n}\n\n// SetGrantWriteACP sets the GrantWriteACP field's value.\nfunc (s *PutBucketAclInput) SetGrantWriteACP(v string) *PutBucketAclInput {\n\ts.GrantWriteACP = &v\n\treturn s\n}\n\ntype PutBucketAclOutput struct {\n\t_ struct{} `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s PutBucketAclOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s PutBucketAclOutput) GoString() string {\n\treturn s.String()\n}\n\ntype PutBucketAnalyticsConfigurationInput struct {\n\t_ struct{} `type:\"structure\" payload:\"AnalyticsConfiguration\"`\n\n\t// The configuration and any analyses for the analytics filter.\n\t//\n\t// AnalyticsConfiguration is a required field\n\tAnalyticsConfiguration *AnalyticsConfiguration `locationName:\"AnalyticsConfiguration\" type:\"structure\" required:\"true\" xmlURI:\"http://s3.amazonaws.com/doc/2006-03-01/\"`\n\n\t// The name of the bucket to which an analytics configuration is stored.\n\t//\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n\n\t// The ID that identifies the analytics configuration.\n\t//\n\t// Id is a required field\n\tId *string `location:\"querystring\" locationName:\"id\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s PutBucketAnalyticsConfigurationInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s PutBucketAnalyticsConfigurationInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *PutBucketAnalyticsConfigurationInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"PutBucketAnalyticsConfigurationInput\"}\n\tif s.AnalyticsConfiguration == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"AnalyticsConfiguration\"))\n\t}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\tif s.Id == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Id\"))\n\t}\n\tif s.AnalyticsConfiguration != nil {\n\t\tif err := s.AnalyticsConfiguration.Validate(); err != nil {\n\t\t\tinvalidParams.AddNested(\"AnalyticsConfiguration\", err.(request.ErrInvalidParams))\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetAnalyticsConfiguration sets the AnalyticsConfiguration field's value.\nfunc (s *PutBucketAnalyticsConfigurationInput) SetAnalyticsConfiguration(v *AnalyticsConfiguration) *PutBucketAnalyticsConfigurationInput {\n\ts.AnalyticsConfiguration = v\n\treturn s\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *PutBucketAnalyticsConfigurationInput) SetBucket(v string) *PutBucketAnalyticsConfigurationInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *PutBucketAnalyticsConfigurationInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetId sets the Id field's value.\nfunc (s *PutBucketAnalyticsConfigurationInput) SetId(v string) *PutBucketAnalyticsConfigurationInput {\n\ts.Id = &v\n\treturn s\n}\n\ntype PutBucketAnalyticsConfigurationOutput struct {\n\t_ struct{} `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s PutBucketAnalyticsConfigurationOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s PutBucketAnalyticsConfigurationOutput) GoString() string {\n\treturn s.String()\n}\n\ntype PutBucketCorsInput struct {\n\t_ struct{} `type:\"structure\" payload:\"CORSConfiguration\"`\n\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n\n\t// Describes the cross-origin access configuration for objects in an Amazon\n\t// S3 bucket. For more information, see Enabling Cross-Origin Resource Sharing\n\t// (https://docs.aws.amazon.com/AmazonS3/latest/dev/cors.html) in the Amazon\n\t// Simple Storage Service Developer Guide.\n\t//\n\t// CORSConfiguration is a required field\n\tCORSConfiguration *CORSConfiguration `locationName:\"CORSConfiguration\" type:\"structure\" required:\"true\" xmlURI:\"http://s3.amazonaws.com/doc/2006-03-01/\"`\n}\n\n// String returns the string representation\nfunc (s PutBucketCorsInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s PutBucketCorsInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *PutBucketCorsInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"PutBucketCorsInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\tif s.CORSConfiguration == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"CORSConfiguration\"))\n\t}\n\tif s.CORSConfiguration != nil {\n\t\tif err := s.CORSConfiguration.Validate(); err != nil {\n\t\t\tinvalidParams.AddNested(\"CORSConfiguration\", err.(request.ErrInvalidParams))\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *PutBucketCorsInput) SetBucket(v string) *PutBucketCorsInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *PutBucketCorsInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetCORSConfiguration sets the CORSConfiguration field's value.\nfunc (s *PutBucketCorsInput) SetCORSConfiguration(v *CORSConfiguration) *PutBucketCorsInput {\n\ts.CORSConfiguration = v\n\treturn s\n}\n\ntype PutBucketCorsOutput struct {\n\t_ struct{} `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s PutBucketCorsOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s PutBucketCorsOutput) GoString() string {\n\treturn s.String()\n}\n\ntype PutBucketEncryptionInput struct {\n\t_ struct{} `type:\"structure\" payload:\"ServerSideEncryptionConfiguration\"`\n\n\t// Specifies default encryption for a bucket using server-side encryption with\n\t// Amazon S3-managed keys (SSE-S3) or AWS KMS-managed keys (SSE-KMS). For information\n\t// about the Amazon S3 default encryption feature, see Amazon S3 Default Bucket\n\t// Encryption (https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-encryption.html)\n\t// in the Amazon Simple Storage Service Developer Guide.\n\t//\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n\n\t// Specifies the default server-side-encryption configuration.\n\t//\n\t// ServerSideEncryptionConfiguration is a required field\n\tServerSideEncryptionConfiguration *ServerSideEncryptionConfiguration `locationName:\"ServerSideEncryptionConfiguration\" type:\"structure\" required:\"true\" xmlURI:\"http://s3.amazonaws.com/doc/2006-03-01/\"`\n}\n\n// String returns the string representation\nfunc (s PutBucketEncryptionInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s PutBucketEncryptionInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *PutBucketEncryptionInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"PutBucketEncryptionInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\tif s.ServerSideEncryptionConfiguration == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"ServerSideEncryptionConfiguration\"))\n\t}\n\tif s.ServerSideEncryptionConfiguration != nil {\n\t\tif err := s.ServerSideEncryptionConfiguration.Validate(); err != nil {\n\t\t\tinvalidParams.AddNested(\"ServerSideEncryptionConfiguration\", err.(request.ErrInvalidParams))\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *PutBucketEncryptionInput) SetBucket(v string) *PutBucketEncryptionInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *PutBucketEncryptionInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetServerSideEncryptionConfiguration sets the ServerSideEncryptionConfiguration field's value.\nfunc (s *PutBucketEncryptionInput) SetServerSideEncryptionConfiguration(v *ServerSideEncryptionConfiguration) *PutBucketEncryptionInput {\n\ts.ServerSideEncryptionConfiguration = v\n\treturn s\n}\n\ntype PutBucketEncryptionOutput struct {\n\t_ struct{} `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s PutBucketEncryptionOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s PutBucketEncryptionOutput) GoString() string {\n\treturn s.String()\n}\n\ntype PutBucketInventoryConfigurationInput struct {\n\t_ struct{} `type:\"structure\" payload:\"InventoryConfiguration\"`\n\n\t// The name of the bucket where the inventory configuration will be stored.\n\t//\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n\n\t// The ID used to identify the inventory configuration.\n\t//\n\t// Id is a required field\n\tId *string `location:\"querystring\" locationName:\"id\" type:\"string\" required:\"true\"`\n\n\t// Specifies the inventory configuration.\n\t//\n\t// InventoryConfiguration is a required field\n\tInventoryConfiguration *InventoryConfiguration `locationName:\"InventoryConfiguration\" type:\"structure\" required:\"true\" xmlURI:\"http://s3.amazonaws.com/doc/2006-03-01/\"`\n}\n\n// String returns the string representation\nfunc (s PutBucketInventoryConfigurationInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s PutBucketInventoryConfigurationInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *PutBucketInventoryConfigurationInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"PutBucketInventoryConfigurationInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\tif s.Id == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Id\"))\n\t}\n\tif s.InventoryConfiguration == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"InventoryConfiguration\"))\n\t}\n\tif s.InventoryConfiguration != nil {\n\t\tif err := s.InventoryConfiguration.Validate(); err != nil {\n\t\t\tinvalidParams.AddNested(\"InventoryConfiguration\", err.(request.ErrInvalidParams))\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *PutBucketInventoryConfigurationInput) SetBucket(v string) *PutBucketInventoryConfigurationInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *PutBucketInventoryConfigurationInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetId sets the Id field's value.\nfunc (s *PutBucketInventoryConfigurationInput) SetId(v string) *PutBucketInventoryConfigurationInput {\n\ts.Id = &v\n\treturn s\n}\n\n// SetInventoryConfiguration sets the InventoryConfiguration field's value.\nfunc (s *PutBucketInventoryConfigurationInput) SetInventoryConfiguration(v *InventoryConfiguration) *PutBucketInventoryConfigurationInput {\n\ts.InventoryConfiguration = v\n\treturn s\n}\n\ntype PutBucketInventoryConfigurationOutput struct {\n\t_ struct{} `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s PutBucketInventoryConfigurationOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s PutBucketInventoryConfigurationOutput) GoString() string {\n\treturn s.String()\n}\n\ntype PutBucketLifecycleConfigurationInput struct {\n\t_ struct{} `type:\"structure\" payload:\"LifecycleConfiguration\"`\n\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n\n\t// Specifies the lifecycle configuration for objects in an Amazon S3 bucket.\n\t// For more information, see Object Lifecycle Management (https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html)\n\t// in the Amazon Simple Storage Service Developer Guide.\n\tLifecycleConfiguration *BucketLifecycleConfiguration `locationName:\"LifecycleConfiguration\" type:\"structure\" xmlURI:\"http://s3.amazonaws.com/doc/2006-03-01/\"`\n}\n\n// String returns the string representation\nfunc (s PutBucketLifecycleConfigurationInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s PutBucketLifecycleConfigurationInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *PutBucketLifecycleConfigurationInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"PutBucketLifecycleConfigurationInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\tif s.LifecycleConfiguration != nil {\n\t\tif err := s.LifecycleConfiguration.Validate(); err != nil {\n\t\t\tinvalidParams.AddNested(\"LifecycleConfiguration\", err.(request.ErrInvalidParams))\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *PutBucketLifecycleConfigurationInput) SetBucket(v string) *PutBucketLifecycleConfigurationInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *PutBucketLifecycleConfigurationInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetLifecycleConfiguration sets the LifecycleConfiguration field's value.\nfunc (s *PutBucketLifecycleConfigurationInput) SetLifecycleConfiguration(v *BucketLifecycleConfiguration) *PutBucketLifecycleConfigurationInput {\n\ts.LifecycleConfiguration = v\n\treturn s\n}\n\ntype PutBucketLifecycleConfigurationOutput struct {\n\t_ struct{} `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s PutBucketLifecycleConfigurationOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s PutBucketLifecycleConfigurationOutput) GoString() string {\n\treturn s.String()\n}\n\ntype PutBucketLifecycleInput struct {\n\t_ struct{} `type:\"structure\" payload:\"LifecycleConfiguration\"`\n\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n\n\tLifecycleConfiguration *LifecycleConfiguration `locationName:\"LifecycleConfiguration\" type:\"structure\" xmlURI:\"http://s3.amazonaws.com/doc/2006-03-01/\"`\n}\n\n// String returns the string representation\nfunc (s PutBucketLifecycleInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s PutBucketLifecycleInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *PutBucketLifecycleInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"PutBucketLifecycleInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\tif s.LifecycleConfiguration != nil {\n\t\tif err := s.LifecycleConfiguration.Validate(); err != nil {\n\t\t\tinvalidParams.AddNested(\"LifecycleConfiguration\", err.(request.ErrInvalidParams))\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *PutBucketLifecycleInput) SetBucket(v string) *PutBucketLifecycleInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *PutBucketLifecycleInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetLifecycleConfiguration sets the LifecycleConfiguration field's value.\nfunc (s *PutBucketLifecycleInput) SetLifecycleConfiguration(v *LifecycleConfiguration) *PutBucketLifecycleInput {\n\ts.LifecycleConfiguration = v\n\treturn s\n}\n\ntype PutBucketLifecycleOutput struct {\n\t_ struct{} `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s PutBucketLifecycleOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s PutBucketLifecycleOutput) GoString() string {\n\treturn s.String()\n}\n\ntype PutBucketLoggingInput struct {\n\t_ struct{} `type:\"structure\" payload:\"BucketLoggingStatus\"`\n\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n\n\t// BucketLoggingStatus is a required field\n\tBucketLoggingStatus *BucketLoggingStatus `locationName:\"BucketLoggingStatus\" type:\"structure\" required:\"true\" xmlURI:\"http://s3.amazonaws.com/doc/2006-03-01/\"`\n}\n\n// String returns the string representation\nfunc (s PutBucketLoggingInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s PutBucketLoggingInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *PutBucketLoggingInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"PutBucketLoggingInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\tif s.BucketLoggingStatus == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"BucketLoggingStatus\"))\n\t}\n\tif s.BucketLoggingStatus != nil {\n\t\tif err := s.BucketLoggingStatus.Validate(); err != nil {\n\t\t\tinvalidParams.AddNested(\"BucketLoggingStatus\", err.(request.ErrInvalidParams))\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *PutBucketLoggingInput) SetBucket(v string) *PutBucketLoggingInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *PutBucketLoggingInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetBucketLoggingStatus sets the BucketLoggingStatus field's value.\nfunc (s *PutBucketLoggingInput) SetBucketLoggingStatus(v *BucketLoggingStatus) *PutBucketLoggingInput {\n\ts.BucketLoggingStatus = v\n\treturn s\n}\n\ntype PutBucketLoggingOutput struct {\n\t_ struct{} `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s PutBucketLoggingOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s PutBucketLoggingOutput) GoString() string {\n\treturn s.String()\n}\n\ntype PutBucketMetricsConfigurationInput struct {\n\t_ struct{} `type:\"structure\" payload:\"MetricsConfiguration\"`\n\n\t// The name of the bucket for which the metrics configuration is set.\n\t//\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n\n\t// The ID used to identify the metrics configuration.\n\t//\n\t// Id is a required field\n\tId *string `location:\"querystring\" locationName:\"id\" type:\"string\" required:\"true\"`\n\n\t// Specifies the metrics configuration.\n\t//\n\t// MetricsConfiguration is a required field\n\tMetricsConfiguration *MetricsConfiguration `locationName:\"MetricsConfiguration\" type:\"structure\" required:\"true\" xmlURI:\"http://s3.amazonaws.com/doc/2006-03-01/\"`\n}\n\n// String returns the string representation\nfunc (s PutBucketMetricsConfigurationInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s PutBucketMetricsConfigurationInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *PutBucketMetricsConfigurationInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"PutBucketMetricsConfigurationInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\tif s.Id == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Id\"))\n\t}\n\tif s.MetricsConfiguration == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"MetricsConfiguration\"))\n\t}\n\tif s.MetricsConfiguration != nil {\n\t\tif err := s.MetricsConfiguration.Validate(); err != nil {\n\t\t\tinvalidParams.AddNested(\"MetricsConfiguration\", err.(request.ErrInvalidParams))\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *PutBucketMetricsConfigurationInput) SetBucket(v string) *PutBucketMetricsConfigurationInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *PutBucketMetricsConfigurationInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetId sets the Id field's value.\nfunc (s *PutBucketMetricsConfigurationInput) SetId(v string) *PutBucketMetricsConfigurationInput {\n\ts.Id = &v\n\treturn s\n}\n\n// SetMetricsConfiguration sets the MetricsConfiguration field's value.\nfunc (s *PutBucketMetricsConfigurationInput) SetMetricsConfiguration(v *MetricsConfiguration) *PutBucketMetricsConfigurationInput {\n\ts.MetricsConfiguration = v\n\treturn s\n}\n\ntype PutBucketMetricsConfigurationOutput struct {\n\t_ struct{} `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s PutBucketMetricsConfigurationOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s PutBucketMetricsConfigurationOutput) GoString() string {\n\treturn s.String()\n}\n\ntype PutBucketNotificationConfigurationInput struct {\n\t_ struct{} `type:\"structure\" payload:\"NotificationConfiguration\"`\n\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n\n\t// A container for specifying the notification configuration of the bucket.\n\t// If this element is empty, notifications are turned off for the bucket.\n\t//\n\t// NotificationConfiguration is a required field\n\tNotificationConfiguration *NotificationConfiguration `locationName:\"NotificationConfiguration\" type:\"structure\" required:\"true\" xmlURI:\"http://s3.amazonaws.com/doc/2006-03-01/\"`\n}\n\n// String returns the string representation\nfunc (s PutBucketNotificationConfigurationInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s PutBucketNotificationConfigurationInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *PutBucketNotificationConfigurationInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"PutBucketNotificationConfigurationInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\tif s.NotificationConfiguration == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"NotificationConfiguration\"))\n\t}\n\tif s.NotificationConfiguration != nil {\n\t\tif err := s.NotificationConfiguration.Validate(); err != nil {\n\t\t\tinvalidParams.AddNested(\"NotificationConfiguration\", err.(request.ErrInvalidParams))\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *PutBucketNotificationConfigurationInput) SetBucket(v string) *PutBucketNotificationConfigurationInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *PutBucketNotificationConfigurationInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetNotificationConfiguration sets the NotificationConfiguration field's value.\nfunc (s *PutBucketNotificationConfigurationInput) SetNotificationConfiguration(v *NotificationConfiguration) *PutBucketNotificationConfigurationInput {\n\ts.NotificationConfiguration = v\n\treturn s\n}\n\ntype PutBucketNotificationConfigurationOutput struct {\n\t_ struct{} `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s PutBucketNotificationConfigurationOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s PutBucketNotificationConfigurationOutput) GoString() string {\n\treturn s.String()\n}\n\ntype PutBucketNotificationInput struct {\n\t_ struct{} `type:\"structure\" payload:\"NotificationConfiguration\"`\n\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n\n\t// NotificationConfiguration is a required field\n\tNotificationConfiguration *NotificationConfigurationDeprecated `locationName:\"NotificationConfiguration\" type:\"structure\" required:\"true\" xmlURI:\"http://s3.amazonaws.com/doc/2006-03-01/\"`\n}\n\n// String returns the string representation\nfunc (s PutBucketNotificationInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s PutBucketNotificationInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *PutBucketNotificationInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"PutBucketNotificationInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\tif s.NotificationConfiguration == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"NotificationConfiguration\"))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *PutBucketNotificationInput) SetBucket(v string) *PutBucketNotificationInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *PutBucketNotificationInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetNotificationConfiguration sets the NotificationConfiguration field's value.\nfunc (s *PutBucketNotificationInput) SetNotificationConfiguration(v *NotificationConfigurationDeprecated) *PutBucketNotificationInput {\n\ts.NotificationConfiguration = v\n\treturn s\n}\n\ntype PutBucketNotificationOutput struct {\n\t_ struct{} `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s PutBucketNotificationOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s PutBucketNotificationOutput) GoString() string {\n\treturn s.String()\n}\n\ntype PutBucketPolicyInput struct {\n\t_ struct{} `type:\"structure\" payload:\"Policy\"`\n\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n\n\t// Set this parameter to true to confirm that you want to remove your permissions\n\t// to change this bucket policy in the future.\n\tConfirmRemoveSelfBucketAccess *bool `location:\"header\" locationName:\"x-amz-confirm-remove-self-bucket-access\" type:\"boolean\"`\n\n\t// The bucket policy as a JSON document.\n\t//\n\t// Policy is a required field\n\tPolicy *string `type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s PutBucketPolicyInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s PutBucketPolicyInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *PutBucketPolicyInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"PutBucketPolicyInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\tif s.Policy == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Policy\"))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *PutBucketPolicyInput) SetBucket(v string) *PutBucketPolicyInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *PutBucketPolicyInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetConfirmRemoveSelfBucketAccess sets the ConfirmRemoveSelfBucketAccess field's value.\nfunc (s *PutBucketPolicyInput) SetConfirmRemoveSelfBucketAccess(v bool) *PutBucketPolicyInput {\n\ts.ConfirmRemoveSelfBucketAccess = &v\n\treturn s\n}\n\n// SetPolicy sets the Policy field's value.\nfunc (s *PutBucketPolicyInput) SetPolicy(v string) *PutBucketPolicyInput {\n\ts.Policy = &v\n\treturn s\n}\n\ntype PutBucketPolicyOutput struct {\n\t_ struct{} `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s PutBucketPolicyOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s PutBucketPolicyOutput) GoString() string {\n\treturn s.String()\n}\n\ntype PutBucketReplicationInput struct {\n\t_ struct{} `type:\"structure\" payload:\"ReplicationConfiguration\"`\n\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n\n\t// A container for replication rules. You can add up to 1,000 rules. The maximum\n\t// size of a replication configuration is 2 MB.\n\t//\n\t// ReplicationConfiguration is a required field\n\tReplicationConfiguration *ReplicationConfiguration `locationName:\"ReplicationConfiguration\" type:\"structure\" required:\"true\" xmlURI:\"http://s3.amazonaws.com/doc/2006-03-01/\"`\n\n\t// A token that allows Amazon S3 object lock to be enabled for an existing bucket.\n\tToken *string `location:\"header\" locationName:\"x-amz-bucket-object-lock-token\" type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s PutBucketReplicationInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s PutBucketReplicationInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *PutBucketReplicationInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"PutBucketReplicationInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\tif s.ReplicationConfiguration == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"ReplicationConfiguration\"))\n\t}\n\tif s.ReplicationConfiguration != nil {\n\t\tif err := s.ReplicationConfiguration.Validate(); err != nil {\n\t\t\tinvalidParams.AddNested(\"ReplicationConfiguration\", err.(request.ErrInvalidParams))\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *PutBucketReplicationInput) SetBucket(v string) *PutBucketReplicationInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *PutBucketReplicationInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetReplicationConfiguration sets the ReplicationConfiguration field's value.\nfunc (s *PutBucketReplicationInput) SetReplicationConfiguration(v *ReplicationConfiguration) *PutBucketReplicationInput {\n\ts.ReplicationConfiguration = v\n\treturn s\n}\n\n// SetToken sets the Token field's value.\nfunc (s *PutBucketReplicationInput) SetToken(v string) *PutBucketReplicationInput {\n\ts.Token = &v\n\treturn s\n}\n\ntype PutBucketReplicationOutput struct {\n\t_ struct{} `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s PutBucketReplicationOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s PutBucketReplicationOutput) GoString() string {\n\treturn s.String()\n}\n\ntype PutBucketRequestPaymentInput struct {\n\t_ struct{} `type:\"structure\" payload:\"RequestPaymentConfiguration\"`\n\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n\n\t// RequestPaymentConfiguration is a required field\n\tRequestPaymentConfiguration *RequestPaymentConfiguration `locationName:\"RequestPaymentConfiguration\" type:\"structure\" required:\"true\" xmlURI:\"http://s3.amazonaws.com/doc/2006-03-01/\"`\n}\n\n// String returns the string representation\nfunc (s PutBucketRequestPaymentInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s PutBucketRequestPaymentInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *PutBucketRequestPaymentInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"PutBucketRequestPaymentInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\tif s.RequestPaymentConfiguration == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"RequestPaymentConfiguration\"))\n\t}\n\tif s.RequestPaymentConfiguration != nil {\n\t\tif err := s.RequestPaymentConfiguration.Validate(); err != nil {\n\t\t\tinvalidParams.AddNested(\"RequestPaymentConfiguration\", err.(request.ErrInvalidParams))\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *PutBucketRequestPaymentInput) SetBucket(v string) *PutBucketRequestPaymentInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *PutBucketRequestPaymentInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetRequestPaymentConfiguration sets the RequestPaymentConfiguration field's value.\nfunc (s *PutBucketRequestPaymentInput) SetRequestPaymentConfiguration(v *RequestPaymentConfiguration) *PutBucketRequestPaymentInput {\n\ts.RequestPaymentConfiguration = v\n\treturn s\n}\n\ntype PutBucketRequestPaymentOutput struct {\n\t_ struct{} `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s PutBucketRequestPaymentOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s PutBucketRequestPaymentOutput) GoString() string {\n\treturn s.String()\n}\n\ntype PutBucketTaggingInput struct {\n\t_ struct{} `type:\"structure\" payload:\"Tagging\"`\n\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n\n\t// Tagging is a required field\n\tTagging *Tagging `locationName:\"Tagging\" type:\"structure\" required:\"true\" xmlURI:\"http://s3.amazonaws.com/doc/2006-03-01/\"`\n}\n\n// String returns the string representation\nfunc (s PutBucketTaggingInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s PutBucketTaggingInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *PutBucketTaggingInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"PutBucketTaggingInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\tif s.Tagging == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Tagging\"))\n\t}\n\tif s.Tagging != nil {\n\t\tif err := s.Tagging.Validate(); err != nil {\n\t\t\tinvalidParams.AddNested(\"Tagging\", err.(request.ErrInvalidParams))\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *PutBucketTaggingInput) SetBucket(v string) *PutBucketTaggingInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *PutBucketTaggingInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetTagging sets the Tagging field's value.\nfunc (s *PutBucketTaggingInput) SetTagging(v *Tagging) *PutBucketTaggingInput {\n\ts.Tagging = v\n\treturn s\n}\n\ntype PutBucketTaggingOutput struct {\n\t_ struct{} `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s PutBucketTaggingOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s PutBucketTaggingOutput) GoString() string {\n\treturn s.String()\n}\n\ntype PutBucketVersioningInput struct {\n\t_ struct{} `type:\"structure\" payload:\"VersioningConfiguration\"`\n\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n\n\t// The concatenation of the authentication device's serial number, a space,\n\t// and the value that is displayed on your authentication device.\n\tMFA *string `location:\"header\" locationName:\"x-amz-mfa\" type:\"string\"`\n\n\t// Describes the versioning state of an Amazon S3 bucket. For more information,\n\t// see PUT Bucket versioning (https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTVersioningStatus.html)\n\t// in the Amazon Simple Storage Service API Reference.\n\t//\n\t// VersioningConfiguration is a required field\n\tVersioningConfiguration *VersioningConfiguration `locationName:\"VersioningConfiguration\" type:\"structure\" required:\"true\" xmlURI:\"http://s3.amazonaws.com/doc/2006-03-01/\"`\n}\n\n// String returns the string representation\nfunc (s PutBucketVersioningInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s PutBucketVersioningInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *PutBucketVersioningInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"PutBucketVersioningInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\tif s.VersioningConfiguration == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"VersioningConfiguration\"))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *PutBucketVersioningInput) SetBucket(v string) *PutBucketVersioningInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *PutBucketVersioningInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetMFA sets the MFA field's value.\nfunc (s *PutBucketVersioningInput) SetMFA(v string) *PutBucketVersioningInput {\n\ts.MFA = &v\n\treturn s\n}\n\n// SetVersioningConfiguration sets the VersioningConfiguration field's value.\nfunc (s *PutBucketVersioningInput) SetVersioningConfiguration(v *VersioningConfiguration) *PutBucketVersioningInput {\n\ts.VersioningConfiguration = v\n\treturn s\n}\n\ntype PutBucketVersioningOutput struct {\n\t_ struct{} `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s PutBucketVersioningOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s PutBucketVersioningOutput) GoString() string {\n\treturn s.String()\n}\n\ntype PutBucketWebsiteInput struct {\n\t_ struct{} `type:\"structure\" payload:\"WebsiteConfiguration\"`\n\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n\n\t// Specifies website configuration parameters for an Amazon S3 bucket.\n\t//\n\t// WebsiteConfiguration is a required field\n\tWebsiteConfiguration *WebsiteConfiguration `locationName:\"WebsiteConfiguration\" type:\"structure\" required:\"true\" xmlURI:\"http://s3.amazonaws.com/doc/2006-03-01/\"`\n}\n\n// String returns the string representation\nfunc (s PutBucketWebsiteInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s PutBucketWebsiteInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *PutBucketWebsiteInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"PutBucketWebsiteInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\tif s.WebsiteConfiguration == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"WebsiteConfiguration\"))\n\t}\n\tif s.WebsiteConfiguration != nil {\n\t\tif err := s.WebsiteConfiguration.Validate(); err != nil {\n\t\t\tinvalidParams.AddNested(\"WebsiteConfiguration\", err.(request.ErrInvalidParams))\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *PutBucketWebsiteInput) SetBucket(v string) *PutBucketWebsiteInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *PutBucketWebsiteInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetWebsiteConfiguration sets the WebsiteConfiguration field's value.\nfunc (s *PutBucketWebsiteInput) SetWebsiteConfiguration(v *WebsiteConfiguration) *PutBucketWebsiteInput {\n\ts.WebsiteConfiguration = v\n\treturn s\n}\n\ntype PutBucketWebsiteOutput struct {\n\t_ struct{} `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s PutBucketWebsiteOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s PutBucketWebsiteOutput) GoString() string {\n\treturn s.String()\n}\n\ntype PutObjectAclInput struct {\n\t_ struct{} `type:\"structure\" payload:\"AccessControlPolicy\"`\n\n\t// The canned ACL to apply to the object.\n\tACL *string `location:\"header\" locationName:\"x-amz-acl\" type:\"string\" enum:\"ObjectCannedACL\"`\n\n\t// Contains the elements that set the ACL permissions for an object per grantee.\n\tAccessControlPolicy *AccessControlPolicy `locationName:\"AccessControlPolicy\" type:\"structure\" xmlURI:\"http://s3.amazonaws.com/doc/2006-03-01/\"`\n\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n\n\t// Allows grantee the read, write, read ACP, and write ACP permissions on the\n\t// bucket.\n\tGrantFullControl *string `location:\"header\" locationName:\"x-amz-grant-full-control\" type:\"string\"`\n\n\t// Allows grantee to list the objects in the bucket.\n\tGrantRead *string `location:\"header\" locationName:\"x-amz-grant-read\" type:\"string\"`\n\n\t// Allows grantee to read the bucket ACL.\n\tGrantReadACP *string `location:\"header\" locationName:\"x-amz-grant-read-acp\" type:\"string\"`\n\n\t// Allows grantee to create, overwrite, and delete any object in the bucket.\n\tGrantWrite *string `location:\"header\" locationName:\"x-amz-grant-write\" type:\"string\"`\n\n\t// Allows grantee to write the ACL for the applicable bucket.\n\tGrantWriteACP *string `location:\"header\" locationName:\"x-amz-grant-write-acp\" type:\"string\"`\n\n\t// Key is a required field\n\tKey *string `location:\"uri\" locationName:\"Key\" min:\"1\" type:\"string\" required:\"true\"`\n\n\t// Confirms that the requester knows that she or he will be charged for the\n\t// request. Bucket owners need not specify this parameter in their requests.\n\t// Documentation on downloading objects from requester pays buckets can be found\n\t// at http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html\n\tRequestPayer *string `location:\"header\" locationName:\"x-amz-request-payer\" type:\"string\" enum:\"RequestPayer\"`\n\n\t// VersionId used to reference a specific version of the object.\n\tVersionId *string `location:\"querystring\" locationName:\"versionId\" type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s PutObjectAclInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s PutObjectAclInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *PutObjectAclInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"PutObjectAclInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\tif s.Key == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Key\"))\n\t}\n\tif s.Key != nil && len(*s.Key) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Key\", 1))\n\t}\n\tif s.AccessControlPolicy != nil {\n\t\tif err := s.AccessControlPolicy.Validate(); err != nil {\n\t\t\tinvalidParams.AddNested(\"AccessControlPolicy\", err.(request.ErrInvalidParams))\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetACL sets the ACL field's value.\nfunc (s *PutObjectAclInput) SetACL(v string) *PutObjectAclInput {\n\ts.ACL = &v\n\treturn s\n}\n\n// SetAccessControlPolicy sets the AccessControlPolicy field's value.\nfunc (s *PutObjectAclInput) SetAccessControlPolicy(v *AccessControlPolicy) *PutObjectAclInput {\n\ts.AccessControlPolicy = v\n\treturn s\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *PutObjectAclInput) SetBucket(v string) *PutObjectAclInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *PutObjectAclInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetGrantFullControl sets the GrantFullControl field's value.\nfunc (s *PutObjectAclInput) SetGrantFullControl(v string) *PutObjectAclInput {\n\ts.GrantFullControl = &v\n\treturn s\n}\n\n// SetGrantRead sets the GrantRead field's value.\nfunc (s *PutObjectAclInput) SetGrantRead(v string) *PutObjectAclInput {\n\ts.GrantRead = &v\n\treturn s\n}\n\n// SetGrantReadACP sets the GrantReadACP field's value.\nfunc (s *PutObjectAclInput) SetGrantReadACP(v string) *PutObjectAclInput {\n\ts.GrantReadACP = &v\n\treturn s\n}\n\n// SetGrantWrite sets the GrantWrite field's value.\nfunc (s *PutObjectAclInput) SetGrantWrite(v string) *PutObjectAclInput {\n\ts.GrantWrite = &v\n\treturn s\n}\n\n// SetGrantWriteACP sets the GrantWriteACP field's value.\nfunc (s *PutObjectAclInput) SetGrantWriteACP(v string) *PutObjectAclInput {\n\ts.GrantWriteACP = &v\n\treturn s\n}\n\n// SetKey sets the Key field's value.\nfunc (s *PutObjectAclInput) SetKey(v string) *PutObjectAclInput {\n\ts.Key = &v\n\treturn s\n}\n\n// SetRequestPayer sets the RequestPayer field's value.\nfunc (s *PutObjectAclInput) SetRequestPayer(v string) *PutObjectAclInput {\n\ts.RequestPayer = &v\n\treturn s\n}\n\n// SetVersionId sets the VersionId field's value.\nfunc (s *PutObjectAclInput) SetVersionId(v string) *PutObjectAclInput {\n\ts.VersionId = &v\n\treturn s\n}\n\ntype PutObjectAclOutput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// If present, indicates that the requester was successfully charged for the\n\t// request.\n\tRequestCharged *string `location:\"header\" locationName:\"x-amz-request-charged\" type:\"string\" enum:\"RequestCharged\"`\n}\n\n// String returns the string representation\nfunc (s PutObjectAclOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s PutObjectAclOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetRequestCharged sets the RequestCharged field's value.\nfunc (s *PutObjectAclOutput) SetRequestCharged(v string) *PutObjectAclOutput {\n\ts.RequestCharged = &v\n\treturn s\n}\n\ntype PutObjectInput struct {\n\t_ struct{} `type:\"structure\" payload:\"Body\"`\n\n\t// The canned ACL to apply to the object.\n\tACL *string `location:\"header\" locationName:\"x-amz-acl\" type:\"string\" enum:\"ObjectCannedACL\"`\n\n\t// Object data.\n\tBody io.ReadSeeker `type:\"blob\"`\n\n\t// Name of the bucket to which the PUT operation was initiated.\n\t//\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n\n\t// Specifies caching behavior along the request/reply chain.\n\tCacheControl *string `location:\"header\" locationName:\"Cache-Control\" type:\"string\"`\n\n\t// Specifies presentational information for the object.\n\tContentDisposition *string `location:\"header\" locationName:\"Content-Disposition\" type:\"string\"`\n\n\t// Specifies what content encodings have been applied to the object and thus\n\t// what decoding mechanisms must be applied to obtain the media-type referenced\n\t// by the Content-Type header field.\n\tContentEncoding *string `location:\"header\" locationName:\"Content-Encoding\" type:\"string\"`\n\n\t// The language the content is in.\n\tContentLanguage *string `location:\"header\" locationName:\"Content-Language\" type:\"string\"`\n\n\t// Size of the body in bytes. This parameter is useful when the size of the\n\t// body cannot be determined automatically.\n\tContentLength *int64 `location:\"header\" locationName:\"Content-Length\" type:\"long\"`\n\n\t// The base64-encoded 128-bit MD5 digest of the part data. This parameter is\n\t// auto-populated when using the command from the CLI. This parameted is required\n\t// if object lock parameters are specified.\n\tContentMD5 *string `location:\"header\" locationName:\"Content-MD5\" type:\"string\"`\n\n\t// A standard MIME type describing the format of the object data.\n\tContentType *string `location:\"header\" locationName:\"Content-Type\" type:\"string\"`\n\n\t// The date and time at which the object is no longer cacheable.\n\tExpires *time.Time `location:\"header\" locationName:\"Expires\" type:\"timestamp\"`\n\n\t// Gives the grantee READ, READ_ACP, and WRITE_ACP permissions on the object.\n\tGrantFullControl *string `location:\"header\" locationName:\"x-amz-grant-full-control\" type:\"string\"`\n\n\t// Allows grantee to read the object data and its metadata.\n\tGrantRead *string `location:\"header\" locationName:\"x-amz-grant-read\" type:\"string\"`\n\n\t// Allows grantee to read the object ACL.\n\tGrantReadACP *string `location:\"header\" locationName:\"x-amz-grant-read-acp\" type:\"string\"`\n\n\t// Allows grantee to write the ACL for the applicable object.\n\tGrantWriteACP *string `location:\"header\" locationName:\"x-amz-grant-write-acp\" type:\"string\"`\n\n\t// Object key for which the PUT operation was initiated.\n\t//\n\t// Key is a required field\n\tKey *string `location:\"uri\" locationName:\"Key\" min:\"1\" type:\"string\" required:\"true\"`\n\n\t// A map of metadata to store with the object in S3.\n\tMetadata map[string]*string `location:\"headers\" locationName:\"x-amz-meta-\" type:\"map\"`\n\n\t// The Legal Hold status that you want to apply to the specified object.\n\tObjectLockLegalHoldStatus *string `location:\"header\" locationName:\"x-amz-object-lock-legal-hold\" type:\"string\" enum:\"ObjectLockLegalHoldStatus\"`\n\n\t// The object lock mode that you want to apply to this object.\n\tObjectLockMode *string `location:\"header\" locationName:\"x-amz-object-lock-mode\" type:\"string\" enum:\"ObjectLockMode\"`\n\n\t// The date and time when you want this object's object lock to expire.\n\tObjectLockRetainUntilDate *time.Time `location:\"header\" locationName:\"x-amz-object-lock-retain-until-date\" type:\"timestamp\" timestampFormat:\"iso8601\"`\n\n\t// Confirms that the requester knows that she or he will be charged for the\n\t// request. Bucket owners need not specify this parameter in their requests.\n\t// Documentation on downloading objects from requester pays buckets can be found\n\t// at http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html\n\tRequestPayer *string `location:\"header\" locationName:\"x-amz-request-payer\" type:\"string\" enum:\"RequestPayer\"`\n\n\t// Specifies the algorithm to use to when encrypting the object (e.g., AES256).\n\tSSECustomerAlgorithm *string `location:\"header\" locationName:\"x-amz-server-side-encryption-customer-algorithm\" type:\"string\"`\n\n\t// Specifies the customer-provided encryption key for Amazon S3 to use in encrypting\n\t// data. This value is used to store the object and then it is discarded; Amazon\n\t// does not store the encryption key. The key must be appropriate for use with\n\t// the algorithm specified in the x-amz-server-side​-encryption​-customer-algorithm\n\t// header.\n\tSSECustomerKey *string `marshal-as:\"blob\" location:\"header\" locationName:\"x-amz-server-side-encryption-customer-key\" type:\"string\" sensitive:\"true\"`\n\n\t// Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.\n\t// Amazon S3 uses this header for a message integrity check to ensure the encryption\n\t// key was transmitted without error.\n\tSSECustomerKeyMD5 *string `location:\"header\" locationName:\"x-amz-server-side-encryption-customer-key-MD5\" type:\"string\"`\n\n\t// Specifies the AWS KMS key ID to use for object encryption. All GET and PUT\n\t// requests for an object protected by AWS KMS will fail if not made via SSL\n\t// or using SigV4. Documentation on configuring any of the officially supported\n\t// AWS SDKs and CLI can be found at http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingAWSSDK.html#specify-signature-version\n\tSSEKMSKeyId *string `location:\"header\" locationName:\"x-amz-server-side-encryption-aws-kms-key-id\" type:\"string\" sensitive:\"true\"`\n\n\t// The Server-side encryption algorithm used when storing this object in S3\n\t// (e.g., AES256, aws:kms).\n\tServerSideEncryption *string `location:\"header\" locationName:\"x-amz-server-side-encryption\" type:\"string\" enum:\"ServerSideEncryption\"`\n\n\t// The type of storage to use for the object. Defaults to 'STANDARD'.\n\tStorageClass *string `location:\"header\" locationName:\"x-amz-storage-class\" type:\"string\" enum:\"StorageClass\"`\n\n\t// The tag-set for the object. The tag-set must be encoded as URL Query parameters.\n\t// (For example, \"Key1=Value1\")\n\tTagging *string `location:\"header\" locationName:\"x-amz-tagging\" type:\"string\"`\n\n\t// If the bucket is configured as a website, redirects requests for this object\n\t// to another object in the same bucket or to an external URL. Amazon S3 stores\n\t// the value of this header in the object metadata.\n\tWebsiteRedirectLocation *string `location:\"header\" locationName:\"x-amz-website-redirect-location\" type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s PutObjectInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s PutObjectInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *PutObjectInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"PutObjectInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\tif s.Key == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Key\"))\n\t}\n\tif s.Key != nil && len(*s.Key) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Key\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetACL sets the ACL field's value.\nfunc (s *PutObjectInput) SetACL(v string) *PutObjectInput {\n\ts.ACL = &v\n\treturn s\n}\n\n// SetBody sets the Body field's value.\nfunc (s *PutObjectInput) SetBody(v io.ReadSeeker) *PutObjectInput {\n\ts.Body = v\n\treturn s\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *PutObjectInput) SetBucket(v string) *PutObjectInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *PutObjectInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetCacheControl sets the CacheControl field's value.\nfunc (s *PutObjectInput) SetCacheControl(v string) *PutObjectInput {\n\ts.CacheControl = &v\n\treturn s\n}\n\n// SetContentDisposition sets the ContentDisposition field's value.\nfunc (s *PutObjectInput) SetContentDisposition(v string) *PutObjectInput {\n\ts.ContentDisposition = &v\n\treturn s\n}\n\n// SetContentEncoding sets the ContentEncoding field's value.\nfunc (s *PutObjectInput) SetContentEncoding(v string) *PutObjectInput {\n\ts.ContentEncoding = &v\n\treturn s\n}\n\n// SetContentLanguage sets the ContentLanguage field's value.\nfunc (s *PutObjectInput) SetContentLanguage(v string) *PutObjectInput {\n\ts.ContentLanguage = &v\n\treturn s\n}\n\n// SetContentLength sets the ContentLength field's value.\nfunc (s *PutObjectInput) SetContentLength(v int64) *PutObjectInput {\n\ts.ContentLength = &v\n\treturn s\n}\n\n// SetContentMD5 sets the ContentMD5 field's value.\nfunc (s *PutObjectInput) SetContentMD5(v string) *PutObjectInput {\n\ts.ContentMD5 = &v\n\treturn s\n}\n\n// SetContentType sets the ContentType field's value.\nfunc (s *PutObjectInput) SetContentType(v string) *PutObjectInput {\n\ts.ContentType = &v\n\treturn s\n}\n\n// SetExpires sets the Expires field's value.\nfunc (s *PutObjectInput) SetExpires(v time.Time) *PutObjectInput {\n\ts.Expires = &v\n\treturn s\n}\n\n// SetGrantFullControl sets the GrantFullControl field's value.\nfunc (s *PutObjectInput) SetGrantFullControl(v string) *PutObjectInput {\n\ts.GrantFullControl = &v\n\treturn s\n}\n\n// SetGrantRead sets the GrantRead field's value.\nfunc (s *PutObjectInput) SetGrantRead(v string) *PutObjectInput {\n\ts.GrantRead = &v\n\treturn s\n}\n\n// SetGrantReadACP sets the GrantReadACP field's value.\nfunc (s *PutObjectInput) SetGrantReadACP(v string) *PutObjectInput {\n\ts.GrantReadACP = &v\n\treturn s\n}\n\n// SetGrantWriteACP sets the GrantWriteACP field's value.\nfunc (s *PutObjectInput) SetGrantWriteACP(v string) *PutObjectInput {\n\ts.GrantWriteACP = &v\n\treturn s\n}\n\n// SetKey sets the Key field's value.\nfunc (s *PutObjectInput) SetKey(v string) *PutObjectInput {\n\ts.Key = &v\n\treturn s\n}\n\n// SetMetadata sets the Metadata field's value.\nfunc (s *PutObjectInput) SetMetadata(v map[string]*string) *PutObjectInput {\n\ts.Metadata = v\n\treturn s\n}\n\n// SetObjectLockLegalHoldStatus sets the ObjectLockLegalHoldStatus field's value.\nfunc (s *PutObjectInput) SetObjectLockLegalHoldStatus(v string) *PutObjectInput {\n\ts.ObjectLockLegalHoldStatus = &v\n\treturn s\n}\n\n// SetObjectLockMode sets the ObjectLockMode field's value.\nfunc (s *PutObjectInput) SetObjectLockMode(v string) *PutObjectInput {\n\ts.ObjectLockMode = &v\n\treturn s\n}\n\n// SetObjectLockRetainUntilDate sets the ObjectLockRetainUntilDate field's value.\nfunc (s *PutObjectInput) SetObjectLockRetainUntilDate(v time.Time) *PutObjectInput {\n\ts.ObjectLockRetainUntilDate = &v\n\treturn s\n}\n\n// SetRequestPayer sets the RequestPayer field's value.\nfunc (s *PutObjectInput) SetRequestPayer(v string) *PutObjectInput {\n\ts.RequestPayer = &v\n\treturn s\n}\n\n// SetSSECustomerAlgorithm sets the SSECustomerAlgorithm field's value.\nfunc (s *PutObjectInput) SetSSECustomerAlgorithm(v string) *PutObjectInput {\n\ts.SSECustomerAlgorithm = &v\n\treturn s\n}\n\n// SetSSECustomerKey sets the SSECustomerKey field's value.\nfunc (s *PutObjectInput) SetSSECustomerKey(v string) *PutObjectInput {\n\ts.SSECustomerKey = &v\n\treturn s\n}\n\nfunc (s *PutObjectInput) getSSECustomerKey() (v string) {\n\tif s.SSECustomerKey == nil {\n\t\treturn v\n\t}\n\treturn *s.SSECustomerKey\n}\n\n// SetSSECustomerKeyMD5 sets the SSECustomerKeyMD5 field's value.\nfunc (s *PutObjectInput) SetSSECustomerKeyMD5(v string) *PutObjectInput {\n\ts.SSECustomerKeyMD5 = &v\n\treturn s\n}\n\n// SetSSEKMSKeyId sets the SSEKMSKeyId field's value.\nfunc (s *PutObjectInput) SetSSEKMSKeyId(v string) *PutObjectInput {\n\ts.SSEKMSKeyId = &v\n\treturn s\n}\n\n// SetServerSideEncryption sets the ServerSideEncryption field's value.\nfunc (s *PutObjectInput) SetServerSideEncryption(v string) *PutObjectInput {\n\ts.ServerSideEncryption = &v\n\treturn s\n}\n\n// SetStorageClass sets the StorageClass field's value.\nfunc (s *PutObjectInput) SetStorageClass(v string) *PutObjectInput {\n\ts.StorageClass = &v\n\treturn s\n}\n\n// SetTagging sets the Tagging field's value.\nfunc (s *PutObjectInput) SetTagging(v string) *PutObjectInput {\n\ts.Tagging = &v\n\treturn s\n}\n\n// SetWebsiteRedirectLocation sets the WebsiteRedirectLocation field's value.\nfunc (s *PutObjectInput) SetWebsiteRedirectLocation(v string) *PutObjectInput {\n\ts.WebsiteRedirectLocation = &v\n\treturn s\n}\n\ntype PutObjectLegalHoldInput struct {\n\t_ struct{} `type:\"structure\" payload:\"LegalHold\"`\n\n\t// The bucket containing the object that you want to place a Legal Hold on.\n\t//\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n\n\t// The key name for the object that you want to place a Legal Hold on.\n\t//\n\t// Key is a required field\n\tKey *string `location:\"uri\" locationName:\"Key\" min:\"1\" type:\"string\" required:\"true\"`\n\n\t// Container element for the Legal Hold configuration you want to apply to the\n\t// specified object.\n\tLegalHold *ObjectLockLegalHold `locationName:\"LegalHold\" type:\"structure\" xmlURI:\"http://s3.amazonaws.com/doc/2006-03-01/\"`\n\n\t// Confirms that the requester knows that she or he will be charged for the\n\t// request. Bucket owners need not specify this parameter in their requests.\n\t// Documentation on downloading objects from requester pays buckets can be found\n\t// at http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html\n\tRequestPayer *string `location:\"header\" locationName:\"x-amz-request-payer\" type:\"string\" enum:\"RequestPayer\"`\n\n\t// The version ID of the object that you want to place a Legal Hold on.\n\tVersionId *string `location:\"querystring\" locationName:\"versionId\" type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s PutObjectLegalHoldInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s PutObjectLegalHoldInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *PutObjectLegalHoldInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"PutObjectLegalHoldInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\tif s.Key == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Key\"))\n\t}\n\tif s.Key != nil && len(*s.Key) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Key\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *PutObjectLegalHoldInput) SetBucket(v string) *PutObjectLegalHoldInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *PutObjectLegalHoldInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetKey sets the Key field's value.\nfunc (s *PutObjectLegalHoldInput) SetKey(v string) *PutObjectLegalHoldInput {\n\ts.Key = &v\n\treturn s\n}\n\n// SetLegalHold sets the LegalHold field's value.\nfunc (s *PutObjectLegalHoldInput) SetLegalHold(v *ObjectLockLegalHold) *PutObjectLegalHoldInput {\n\ts.LegalHold = v\n\treturn s\n}\n\n// SetRequestPayer sets the RequestPayer field's value.\nfunc (s *PutObjectLegalHoldInput) SetRequestPayer(v string) *PutObjectLegalHoldInput {\n\ts.RequestPayer = &v\n\treturn s\n}\n\n// SetVersionId sets the VersionId field's value.\nfunc (s *PutObjectLegalHoldInput) SetVersionId(v string) *PutObjectLegalHoldInput {\n\ts.VersionId = &v\n\treturn s\n}\n\ntype PutObjectLegalHoldOutput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// If present, indicates that the requester was successfully charged for the\n\t// request.\n\tRequestCharged *string `location:\"header\" locationName:\"x-amz-request-charged\" type:\"string\" enum:\"RequestCharged\"`\n}\n\n// String returns the string representation\nfunc (s PutObjectLegalHoldOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s PutObjectLegalHoldOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetRequestCharged sets the RequestCharged field's value.\nfunc (s *PutObjectLegalHoldOutput) SetRequestCharged(v string) *PutObjectLegalHoldOutput {\n\ts.RequestCharged = &v\n\treturn s\n}\n\ntype PutObjectLockConfigurationInput struct {\n\t_ struct{} `type:\"structure\" payload:\"ObjectLockConfiguration\"`\n\n\t// The bucket whose object lock configuration you want to create or replace.\n\t//\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n\n\t// The object lock configuration that you want to apply to the specified bucket.\n\tObjectLockConfiguration *ObjectLockConfiguration `locationName:\"ObjectLockConfiguration\" type:\"structure\" xmlURI:\"http://s3.amazonaws.com/doc/2006-03-01/\"`\n\n\t// Confirms that the requester knows that she or he will be charged for the\n\t// request. Bucket owners need not specify this parameter in their requests.\n\t// Documentation on downloading objects from requester pays buckets can be found\n\t// at http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html\n\tRequestPayer *string `location:\"header\" locationName:\"x-amz-request-payer\" type:\"string\" enum:\"RequestPayer\"`\n\n\t// A token to allow Amazon S3 object lock to be enabled for an existing bucket.\n\tToken *string `location:\"header\" locationName:\"x-amz-bucket-object-lock-token\" type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s PutObjectLockConfigurationInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s PutObjectLockConfigurationInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *PutObjectLockConfigurationInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"PutObjectLockConfigurationInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *PutObjectLockConfigurationInput) SetBucket(v string) *PutObjectLockConfigurationInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *PutObjectLockConfigurationInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetObjectLockConfiguration sets the ObjectLockConfiguration field's value.\nfunc (s *PutObjectLockConfigurationInput) SetObjectLockConfiguration(v *ObjectLockConfiguration) *PutObjectLockConfigurationInput {\n\ts.ObjectLockConfiguration = v\n\treturn s\n}\n\n// SetRequestPayer sets the RequestPayer field's value.\nfunc (s *PutObjectLockConfigurationInput) SetRequestPayer(v string) *PutObjectLockConfigurationInput {\n\ts.RequestPayer = &v\n\treturn s\n}\n\n// SetToken sets the Token field's value.\nfunc (s *PutObjectLockConfigurationInput) SetToken(v string) *PutObjectLockConfigurationInput {\n\ts.Token = &v\n\treturn s\n}\n\ntype PutObjectLockConfigurationOutput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// If present, indicates that the requester was successfully charged for the\n\t// request.\n\tRequestCharged *string `location:\"header\" locationName:\"x-amz-request-charged\" type:\"string\" enum:\"RequestCharged\"`\n}\n\n// String returns the string representation\nfunc (s PutObjectLockConfigurationOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s PutObjectLockConfigurationOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetRequestCharged sets the RequestCharged field's value.\nfunc (s *PutObjectLockConfigurationOutput) SetRequestCharged(v string) *PutObjectLockConfigurationOutput {\n\ts.RequestCharged = &v\n\treturn s\n}\n\ntype PutObjectOutput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Entity tag for the uploaded object.\n\tETag *string `location:\"header\" locationName:\"ETag\" type:\"string\"`\n\n\t// If the object expiration is configured, this will contain the expiration\n\t// date (expiry-date) and rule ID (rule-id). The value of rule-id is URL encoded.\n\tExpiration *string `location:\"header\" locationName:\"x-amz-expiration\" type:\"string\"`\n\n\t// If present, indicates that the requester was successfully charged for the\n\t// request.\n\tRequestCharged *string `location:\"header\" locationName:\"x-amz-request-charged\" type:\"string\" enum:\"RequestCharged\"`\n\n\t// If server-side encryption with a customer-provided encryption key was requested,\n\t// the response will include this header confirming the encryption algorithm\n\t// used.\n\tSSECustomerAlgorithm *string `location:\"header\" locationName:\"x-amz-server-side-encryption-customer-algorithm\" type:\"string\"`\n\n\t// If server-side encryption with a customer-provided encryption key was requested,\n\t// the response will include this header to provide round trip message integrity\n\t// verification of the customer-provided encryption key.\n\tSSECustomerKeyMD5 *string `location:\"header\" locationName:\"x-amz-server-side-encryption-customer-key-MD5\" type:\"string\"`\n\n\t// If present, specifies the ID of the AWS Key Management Service (KMS) master\n\t// encryption key that was used for the object.\n\tSSEKMSKeyId *string `location:\"header\" locationName:\"x-amz-server-side-encryption-aws-kms-key-id\" type:\"string\" sensitive:\"true\"`\n\n\t// The Server-side encryption algorithm used when storing this object in S3\n\t// (e.g., AES256, aws:kms).\n\tServerSideEncryption *string `location:\"header\" locationName:\"x-amz-server-side-encryption\" type:\"string\" enum:\"ServerSideEncryption\"`\n\n\t// Version of the object.\n\tVersionId *string `location:\"header\" locationName:\"x-amz-version-id\" type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s PutObjectOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s PutObjectOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetETag sets the ETag field's value.\nfunc (s *PutObjectOutput) SetETag(v string) *PutObjectOutput {\n\ts.ETag = &v\n\treturn s\n}\n\n// SetExpiration sets the Expiration field's value.\nfunc (s *PutObjectOutput) SetExpiration(v string) *PutObjectOutput {\n\ts.Expiration = &v\n\treturn s\n}\n\n// SetRequestCharged sets the RequestCharged field's value.\nfunc (s *PutObjectOutput) SetRequestCharged(v string) *PutObjectOutput {\n\ts.RequestCharged = &v\n\treturn s\n}\n\n// SetSSECustomerAlgorithm sets the SSECustomerAlgorithm field's value.\nfunc (s *PutObjectOutput) SetSSECustomerAlgorithm(v string) *PutObjectOutput {\n\ts.SSECustomerAlgorithm = &v\n\treturn s\n}\n\n// SetSSECustomerKeyMD5 sets the SSECustomerKeyMD5 field's value.\nfunc (s *PutObjectOutput) SetSSECustomerKeyMD5(v string) *PutObjectOutput {\n\ts.SSECustomerKeyMD5 = &v\n\treturn s\n}\n\n// SetSSEKMSKeyId sets the SSEKMSKeyId field's value.\nfunc (s *PutObjectOutput) SetSSEKMSKeyId(v string) *PutObjectOutput {\n\ts.SSEKMSKeyId = &v\n\treturn s\n}\n\n// SetServerSideEncryption sets the ServerSideEncryption field's value.\nfunc (s *PutObjectOutput) SetServerSideEncryption(v string) *PutObjectOutput {\n\ts.ServerSideEncryption = &v\n\treturn s\n}\n\n// SetVersionId sets the VersionId field's value.\nfunc (s *PutObjectOutput) SetVersionId(v string) *PutObjectOutput {\n\ts.VersionId = &v\n\treturn s\n}\n\ntype PutObjectRetentionInput struct {\n\t_ struct{} `type:\"structure\" payload:\"Retention\"`\n\n\t// The bucket that contains the object you want to apply this Object Retention\n\t// configuration to.\n\t//\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n\n\t// Indicates whether this operation should bypass Governance-mode restrictions.j\n\tBypassGovernanceRetention *bool `location:\"header\" locationName:\"x-amz-bypass-governance-retention\" type:\"boolean\"`\n\n\t// The key name for the object that you want to apply this Object Retention\n\t// configuration to.\n\t//\n\t// Key is a required field\n\tKey *string `location:\"uri\" locationName:\"Key\" min:\"1\" type:\"string\" required:\"true\"`\n\n\t// Confirms that the requester knows that she or he will be charged for the\n\t// request. Bucket owners need not specify this parameter in their requests.\n\t// Documentation on downloading objects from requester pays buckets can be found\n\t// at http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html\n\tRequestPayer *string `location:\"header\" locationName:\"x-amz-request-payer\" type:\"string\" enum:\"RequestPayer\"`\n\n\t// The container element for the Object Retention configuration.\n\tRetention *ObjectLockRetention `locationName:\"Retention\" type:\"structure\" xmlURI:\"http://s3.amazonaws.com/doc/2006-03-01/\"`\n\n\t// The version ID for the object that you want to apply this Object Retention\n\t// configuration to.\n\tVersionId *string `location:\"querystring\" locationName:\"versionId\" type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s PutObjectRetentionInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s PutObjectRetentionInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *PutObjectRetentionInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"PutObjectRetentionInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\tif s.Key == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Key\"))\n\t}\n\tif s.Key != nil && len(*s.Key) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Key\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *PutObjectRetentionInput) SetBucket(v string) *PutObjectRetentionInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *PutObjectRetentionInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetBypassGovernanceRetention sets the BypassGovernanceRetention field's value.\nfunc (s *PutObjectRetentionInput) SetBypassGovernanceRetention(v bool) *PutObjectRetentionInput {\n\ts.BypassGovernanceRetention = &v\n\treturn s\n}\n\n// SetKey sets the Key field's value.\nfunc (s *PutObjectRetentionInput) SetKey(v string) *PutObjectRetentionInput {\n\ts.Key = &v\n\treturn s\n}\n\n// SetRequestPayer sets the RequestPayer field's value.\nfunc (s *PutObjectRetentionInput) SetRequestPayer(v string) *PutObjectRetentionInput {\n\ts.RequestPayer = &v\n\treturn s\n}\n\n// SetRetention sets the Retention field's value.\nfunc (s *PutObjectRetentionInput) SetRetention(v *ObjectLockRetention) *PutObjectRetentionInput {\n\ts.Retention = v\n\treturn s\n}\n\n// SetVersionId sets the VersionId field's value.\nfunc (s *PutObjectRetentionInput) SetVersionId(v string) *PutObjectRetentionInput {\n\ts.VersionId = &v\n\treturn s\n}\n\ntype PutObjectRetentionOutput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// If present, indicates that the requester was successfully charged for the\n\t// request.\n\tRequestCharged *string `location:\"header\" locationName:\"x-amz-request-charged\" type:\"string\" enum:\"RequestCharged\"`\n}\n\n// String returns the string representation\nfunc (s PutObjectRetentionOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s PutObjectRetentionOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetRequestCharged sets the RequestCharged field's value.\nfunc (s *PutObjectRetentionOutput) SetRequestCharged(v string) *PutObjectRetentionOutput {\n\ts.RequestCharged = &v\n\treturn s\n}\n\ntype PutObjectTaggingInput struct {\n\t_ struct{} `type:\"structure\" payload:\"Tagging\"`\n\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n\n\t// Key is a required field\n\tKey *string `location:\"uri\" locationName:\"Key\" min:\"1\" type:\"string\" required:\"true\"`\n\n\t// Tagging is a required field\n\tTagging *Tagging `locationName:\"Tagging\" type:\"structure\" required:\"true\" xmlURI:\"http://s3.amazonaws.com/doc/2006-03-01/\"`\n\n\tVersionId *string `location:\"querystring\" locationName:\"versionId\" type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s PutObjectTaggingInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s PutObjectTaggingInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *PutObjectTaggingInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"PutObjectTaggingInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\tif s.Key == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Key\"))\n\t}\n\tif s.Key != nil && len(*s.Key) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Key\", 1))\n\t}\n\tif s.Tagging == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Tagging\"))\n\t}\n\tif s.Tagging != nil {\n\t\tif err := s.Tagging.Validate(); err != nil {\n\t\t\tinvalidParams.AddNested(\"Tagging\", err.(request.ErrInvalidParams))\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *PutObjectTaggingInput) SetBucket(v string) *PutObjectTaggingInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *PutObjectTaggingInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetKey sets the Key field's value.\nfunc (s *PutObjectTaggingInput) SetKey(v string) *PutObjectTaggingInput {\n\ts.Key = &v\n\treturn s\n}\n\n// SetTagging sets the Tagging field's value.\nfunc (s *PutObjectTaggingInput) SetTagging(v *Tagging) *PutObjectTaggingInput {\n\ts.Tagging = v\n\treturn s\n}\n\n// SetVersionId sets the VersionId field's value.\nfunc (s *PutObjectTaggingInput) SetVersionId(v string) *PutObjectTaggingInput {\n\ts.VersionId = &v\n\treturn s\n}\n\ntype PutObjectTaggingOutput struct {\n\t_ struct{} `type:\"structure\"`\n\n\tVersionId *string `location:\"header\" locationName:\"x-amz-version-id\" type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s PutObjectTaggingOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s PutObjectTaggingOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetVersionId sets the VersionId field's value.\nfunc (s *PutObjectTaggingOutput) SetVersionId(v string) *PutObjectTaggingOutput {\n\ts.VersionId = &v\n\treturn s\n}\n\ntype PutPublicAccessBlockInput struct {\n\t_ struct{} `type:\"structure\" payload:\"PublicAccessBlockConfiguration\"`\n\n\t// The name of the Amazon S3 bucket whose PublicAccessBlock configuration you\n\t// want to set.\n\t//\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n\n\t// The PublicAccessBlock configuration that you want to apply to this Amazon\n\t// S3 bucket. You can enable the configuration options in any combination. For\n\t// more information about when Amazon S3 considers a bucket or object public,\n\t// see The Meaning of \"Public\" (https://docs.aws.amazon.com/AmazonS3/latest/dev/access-control-block-public-access.html#access-control-block-public-access-policy-status)\n\t// in the Amazon Simple Storage Service Developer Guide.\n\t//\n\t// PublicAccessBlockConfiguration is a required field\n\tPublicAccessBlockConfiguration *PublicAccessBlockConfiguration `locationName:\"PublicAccessBlockConfiguration\" type:\"structure\" required:\"true\" xmlURI:\"http://s3.amazonaws.com/doc/2006-03-01/\"`\n}\n\n// String returns the string representation\nfunc (s PutPublicAccessBlockInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s PutPublicAccessBlockInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *PutPublicAccessBlockInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"PutPublicAccessBlockInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\tif s.PublicAccessBlockConfiguration == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"PublicAccessBlockConfiguration\"))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *PutPublicAccessBlockInput) SetBucket(v string) *PutPublicAccessBlockInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *PutPublicAccessBlockInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetPublicAccessBlockConfiguration sets the PublicAccessBlockConfiguration field's value.\nfunc (s *PutPublicAccessBlockInput) SetPublicAccessBlockConfiguration(v *PublicAccessBlockConfiguration) *PutPublicAccessBlockInput {\n\ts.PublicAccessBlockConfiguration = v\n\treturn s\n}\n\ntype PutPublicAccessBlockOutput struct {\n\t_ struct{} `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s PutPublicAccessBlockOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s PutPublicAccessBlockOutput) GoString() string {\n\treturn s.String()\n}\n\n// Specifies the configuration for publishing messages to an Amazon Simple Queue\n// Service (Amazon SQS) queue when Amazon S3 detects specified events.\ntype QueueConfiguration struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Events is a required field\n\tEvents []*string `locationName:\"Event\" type:\"list\" flattened:\"true\" required:\"true\"`\n\n\t// Specifies object key name filtering rules. For information about key name\n\t// filtering, see Configuring Event Notifications (https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html)\n\t// in the Amazon Simple Storage Service Developer Guide.\n\tFilter *NotificationConfigurationFilter `type:\"structure\"`\n\n\t// An optional unique identifier for configurations in a notification configuration.\n\t// If you don't provide one, Amazon S3 will assign an ID.\n\tId *string `type:\"string\"`\n\n\t// The Amazon Resource Name (ARN) of the Amazon SQS queue to which Amazon S3\n\t// publishes a message when it detects events of the specified type.\n\t//\n\t// QueueArn is a required field\n\tQueueArn *string `locationName:\"Queue\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s QueueConfiguration) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s QueueConfiguration) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *QueueConfiguration) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"QueueConfiguration\"}\n\tif s.Events == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Events\"))\n\t}\n\tif s.QueueArn == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"QueueArn\"))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetEvents sets the Events field's value.\nfunc (s *QueueConfiguration) SetEvents(v []*string) *QueueConfiguration {\n\ts.Events = v\n\treturn s\n}\n\n// SetFilter sets the Filter field's value.\nfunc (s *QueueConfiguration) SetFilter(v *NotificationConfigurationFilter) *QueueConfiguration {\n\ts.Filter = v\n\treturn s\n}\n\n// SetId sets the Id field's value.\nfunc (s *QueueConfiguration) SetId(v string) *QueueConfiguration {\n\ts.Id = &v\n\treturn s\n}\n\n// SetQueueArn sets the QueueArn field's value.\nfunc (s *QueueConfiguration) SetQueueArn(v string) *QueueConfiguration {\n\ts.QueueArn = &v\n\treturn s\n}\n\ntype QueueConfigurationDeprecated struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The bucket event for which to send notifications.\n\t//\n\t// Deprecated: Event has been deprecated\n\tEvent *string `deprecated:\"true\" type:\"string\" enum:\"Event\"`\n\n\tEvents []*string `locationName:\"Event\" type:\"list\" flattened:\"true\"`\n\n\t// An optional unique identifier for configurations in a notification configuration.\n\t// If you don't provide one, Amazon S3 will assign an ID.\n\tId *string `type:\"string\"`\n\n\tQueue *string `type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s QueueConfigurationDeprecated) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s QueueConfigurationDeprecated) GoString() string {\n\treturn s.String()\n}\n\n// SetEvent sets the Event field's value.\nfunc (s *QueueConfigurationDeprecated) SetEvent(v string) *QueueConfigurationDeprecated {\n\ts.Event = &v\n\treturn s\n}\n\n// SetEvents sets the Events field's value.\nfunc (s *QueueConfigurationDeprecated) SetEvents(v []*string) *QueueConfigurationDeprecated {\n\ts.Events = v\n\treturn s\n}\n\n// SetId sets the Id field's value.\nfunc (s *QueueConfigurationDeprecated) SetId(v string) *QueueConfigurationDeprecated {\n\ts.Id = &v\n\treturn s\n}\n\n// SetQueue sets the Queue field's value.\nfunc (s *QueueConfigurationDeprecated) SetQueue(v string) *QueueConfigurationDeprecated {\n\ts.Queue = &v\n\treturn s\n}\n\ntype RecordsEvent struct {\n\t_ struct{} `locationName:\"RecordsEvent\" type:\"structure\" payload:\"Payload\"`\n\n\t// The byte array of partial, one or more result records.\n\t//\n\t// Payload is automatically base64 encoded/decoded by the SDK.\n\tPayload []byte `type:\"blob\"`\n}\n\n// String returns the string representation\nfunc (s RecordsEvent) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s RecordsEvent) GoString() string {\n\treturn s.String()\n}\n\n// SetPayload sets the Payload field's value.\nfunc (s *RecordsEvent) SetPayload(v []byte) *RecordsEvent {\n\ts.Payload = v\n\treturn s\n}\n\n// The RecordsEvent is and event in the SelectObjectContentEventStream group of events.\nfunc (s *RecordsEvent) eventSelectObjectContentEventStream() {}\n\n// UnmarshalEvent unmarshals the EventStream Message into the RecordsEvent value.\n// This method is only used internally within the SDK's EventStream handling.\nfunc (s *RecordsEvent) UnmarshalEvent(\n\tpayloadUnmarshaler protocol.PayloadUnmarshaler,\n\tmsg eventstream.Message,\n) error {\n\ts.Payload = make([]byte, len(msg.Payload))\n\tcopy(s.Payload, msg.Payload)\n\treturn nil\n}\n\n// Specifies how requests are redirected. In the event of an error, you can\n// specify a different error code to return.\ntype Redirect struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The host name to use in the redirect request.\n\tHostName *string `type:\"string\"`\n\n\t// The HTTP redirect code to use on the response. Not required if one of the\n\t// siblings is present.\n\tHttpRedirectCode *string `type:\"string\"`\n\n\t// Protocol to use when redirecting requests. The default is the protocol that\n\t// is used in the original request.\n\tProtocol *string `type:\"string\" enum:\"Protocol\"`\n\n\t// The object key prefix to use in the redirect request. For example, to redirect\n\t// requests for all pages with prefix docs/ (objects in the docs/ folder) to\n\t// documents/, you can set a condition block with KeyPrefixEquals set to docs/\n\t// and in the Redirect set ReplaceKeyPrefixWith to /documents. Not required\n\t// if one of the siblings is present. Can be present only if ReplaceKeyWith\n\t// is not provided.\n\tReplaceKeyPrefixWith *string `type:\"string\"`\n\n\t// The specific object key to use in the redirect request. For example, redirect\n\t// request to error.html. Not required if one of the siblings is present. Can\n\t// be present only if ReplaceKeyPrefixWith is not provided.\n\tReplaceKeyWith *string `type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s Redirect) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s Redirect) GoString() string {\n\treturn s.String()\n}\n\n// SetHostName sets the HostName field's value.\nfunc (s *Redirect) SetHostName(v string) *Redirect {\n\ts.HostName = &v\n\treturn s\n}\n\n// SetHttpRedirectCode sets the HttpRedirectCode field's value.\nfunc (s *Redirect) SetHttpRedirectCode(v string) *Redirect {\n\ts.HttpRedirectCode = &v\n\treturn s\n}\n\n// SetProtocol sets the Protocol field's value.\nfunc (s *Redirect) SetProtocol(v string) *Redirect {\n\ts.Protocol = &v\n\treturn s\n}\n\n// SetReplaceKeyPrefixWith sets the ReplaceKeyPrefixWith field's value.\nfunc (s *Redirect) SetReplaceKeyPrefixWith(v string) *Redirect {\n\ts.ReplaceKeyPrefixWith = &v\n\treturn s\n}\n\n// SetReplaceKeyWith sets the ReplaceKeyWith field's value.\nfunc (s *Redirect) SetReplaceKeyWith(v string) *Redirect {\n\ts.ReplaceKeyWith = &v\n\treturn s\n}\n\n// Specifies the redirect behavior of all requests to a website endpoint of\n// an Amazon S3 bucket.\ntype RedirectAllRequestsTo struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Name of the host where requests are redirected.\n\t//\n\t// HostName is a required field\n\tHostName *string `type:\"string\" required:\"true\"`\n\n\t// Protocol to use when redirecting requests. The default is the protocol that\n\t// is used in the original request.\n\tProtocol *string `type:\"string\" enum:\"Protocol\"`\n}\n\n// String returns the string representation\nfunc (s RedirectAllRequestsTo) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s RedirectAllRequestsTo) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *RedirectAllRequestsTo) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"RedirectAllRequestsTo\"}\n\tif s.HostName == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"HostName\"))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetHostName sets the HostName field's value.\nfunc (s *RedirectAllRequestsTo) SetHostName(v string) *RedirectAllRequestsTo {\n\ts.HostName = &v\n\treturn s\n}\n\n// SetProtocol sets the Protocol field's value.\nfunc (s *RedirectAllRequestsTo) SetProtocol(v string) *RedirectAllRequestsTo {\n\ts.Protocol = &v\n\treturn s\n}\n\n// A container for replication rules. You can add up to 1,000 rules. The maximum\n// size of a replication configuration is 2 MB.\ntype ReplicationConfiguration struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The Amazon Resource Name (ARN) of the AWS Identity and Access Management\n\t// (IAM) role that Amazon S3 assumes when replicating objects. For more information,\n\t// see How to Set Up Cross-Region Replication (https://docs.aws.amazon.com/AmazonS3/latest/dev/crr-how-setup.html)\n\t// in the Amazon Simple Storage Service Developer Guide.\n\t//\n\t// Role is a required field\n\tRole *string `type:\"string\" required:\"true\"`\n\n\t// A container for one or more replication rules. A replication configuration\n\t// must have at least one rule and can contain a maximum of 1,000 rules.\n\t//\n\t// Rules is a required field\n\tRules []*ReplicationRule `locationName:\"Rule\" type:\"list\" flattened:\"true\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s ReplicationConfiguration) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s ReplicationConfiguration) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *ReplicationConfiguration) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"ReplicationConfiguration\"}\n\tif s.Role == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Role\"))\n\t}\n\tif s.Rules == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Rules\"))\n\t}\n\tif s.Rules != nil {\n\t\tfor i, v := range s.Rules {\n\t\t\tif v == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif err := v.Validate(); err != nil {\n\t\t\t\tinvalidParams.AddNested(fmt.Sprintf(\"%s[%v]\", \"Rules\", i), err.(request.ErrInvalidParams))\n\t\t\t}\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetRole sets the Role field's value.\nfunc (s *ReplicationConfiguration) SetRole(v string) *ReplicationConfiguration {\n\ts.Role = &v\n\treturn s\n}\n\n// SetRules sets the Rules field's value.\nfunc (s *ReplicationConfiguration) SetRules(v []*ReplicationRule) *ReplicationConfiguration {\n\ts.Rules = v\n\treturn s\n}\n\n// Specifies which Amazon S3 objects to replicate and where to store the replicas.\ntype ReplicationRule struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Specifies whether Amazon S3 should replicate delete makers.\n\tDeleteMarkerReplication *DeleteMarkerReplication `type:\"structure\"`\n\n\t// A container for information about the replication destination.\n\t//\n\t// Destination is a required field\n\tDestination *Destination `type:\"structure\" required:\"true\"`\n\n\t// A filter that identifies the subset of objects to which the replication rule\n\t// applies. A Filter must specify exactly one Prefix, Tag, or an And child element.\n\tFilter *ReplicationRuleFilter `type:\"structure\"`\n\n\t// A unique identifier for the rule. The maximum value is 255 characters.\n\tID *string `type:\"string\"`\n\n\t// An object keyname prefix that identifies the object or objects to which the\n\t// rule applies. The maximum prefix length is 1,024 characters. To include all\n\t// objects in a bucket, specify an empty string.\n\t//\n\t// Deprecated: Prefix has been deprecated\n\tPrefix *string `deprecated:\"true\" type:\"string\"`\n\n\t// The priority associated with the rule. If you specify multiple rules in a\n\t// replication configuration, Amazon S3 prioritizes the rules to prevent conflicts\n\t// when filtering. If two or more rules identify the same object based on a\n\t// specified filter, the rule with higher priority takes precedence. For example:\n\t//\n\t//    * Same object quality prefix based filter criteria If prefixes you specified\n\t//    in multiple rules overlap\n\t//\n\t//    * Same object qualify tag based filter criteria specified in multiple\n\t//    rules\n\t//\n\t// For more information, see Cross-Region Replication (CRR) (https://docs.aws.amazon.com/AmazonS3/latest/dev/crr.html)\n\t// in the Amazon S3 Developer Guide.\n\tPriority *int64 `type:\"integer\"`\n\n\t// A container that describes additional filters for identifying the source\n\t// objects that you want to replicate. You can choose to enable or disable the\n\t// replication of these objects. Currently, Amazon S3 supports only the filter\n\t// that you can specify for objects created with server-side encryption using\n\t// an AWS KMS-Managed Key (SSE-KMS).\n\tSourceSelectionCriteria *SourceSelectionCriteria `type:\"structure\"`\n\n\t// Specifies whether the rule is enabled.\n\t//\n\t// Status is a required field\n\tStatus *string `type:\"string\" required:\"true\" enum:\"ReplicationRuleStatus\"`\n}\n\n// String returns the string representation\nfunc (s ReplicationRule) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s ReplicationRule) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *ReplicationRule) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"ReplicationRule\"}\n\tif s.Destination == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Destination\"))\n\t}\n\tif s.Status == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Status\"))\n\t}\n\tif s.Destination != nil {\n\t\tif err := s.Destination.Validate(); err != nil {\n\t\t\tinvalidParams.AddNested(\"Destination\", err.(request.ErrInvalidParams))\n\t\t}\n\t}\n\tif s.Filter != nil {\n\t\tif err := s.Filter.Validate(); err != nil {\n\t\t\tinvalidParams.AddNested(\"Filter\", err.(request.ErrInvalidParams))\n\t\t}\n\t}\n\tif s.SourceSelectionCriteria != nil {\n\t\tif err := s.SourceSelectionCriteria.Validate(); err != nil {\n\t\t\tinvalidParams.AddNested(\"SourceSelectionCriteria\", err.(request.ErrInvalidParams))\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetDeleteMarkerReplication sets the DeleteMarkerReplication field's value.\nfunc (s *ReplicationRule) SetDeleteMarkerReplication(v *DeleteMarkerReplication) *ReplicationRule {\n\ts.DeleteMarkerReplication = v\n\treturn s\n}\n\n// SetDestination sets the Destination field's value.\nfunc (s *ReplicationRule) SetDestination(v *Destination) *ReplicationRule {\n\ts.Destination = v\n\treturn s\n}\n\n// SetFilter sets the Filter field's value.\nfunc (s *ReplicationRule) SetFilter(v *ReplicationRuleFilter) *ReplicationRule {\n\ts.Filter = v\n\treturn s\n}\n\n// SetID sets the ID field's value.\nfunc (s *ReplicationRule) SetID(v string) *ReplicationRule {\n\ts.ID = &v\n\treturn s\n}\n\n// SetPrefix sets the Prefix field's value.\nfunc (s *ReplicationRule) SetPrefix(v string) *ReplicationRule {\n\ts.Prefix = &v\n\treturn s\n}\n\n// SetPriority sets the Priority field's value.\nfunc (s *ReplicationRule) SetPriority(v int64) *ReplicationRule {\n\ts.Priority = &v\n\treturn s\n}\n\n// SetSourceSelectionCriteria sets the SourceSelectionCriteria field's value.\nfunc (s *ReplicationRule) SetSourceSelectionCriteria(v *SourceSelectionCriteria) *ReplicationRule {\n\ts.SourceSelectionCriteria = v\n\treturn s\n}\n\n// SetStatus sets the Status field's value.\nfunc (s *ReplicationRule) SetStatus(v string) *ReplicationRule {\n\ts.Status = &v\n\treturn s\n}\n\ntype ReplicationRuleAndOperator struct {\n\t_ struct{} `type:\"structure\"`\n\n\tPrefix *string `type:\"string\"`\n\n\tTags []*Tag `locationName:\"Tag\" locationNameList:\"Tag\" type:\"list\" flattened:\"true\"`\n}\n\n// String returns the string representation\nfunc (s ReplicationRuleAndOperator) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s ReplicationRuleAndOperator) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *ReplicationRuleAndOperator) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"ReplicationRuleAndOperator\"}\n\tif s.Tags != nil {\n\t\tfor i, v := range s.Tags {\n\t\t\tif v == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif err := v.Validate(); err != nil {\n\t\t\t\tinvalidParams.AddNested(fmt.Sprintf(\"%s[%v]\", \"Tags\", i), err.(request.ErrInvalidParams))\n\t\t\t}\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetPrefix sets the Prefix field's value.\nfunc (s *ReplicationRuleAndOperator) SetPrefix(v string) *ReplicationRuleAndOperator {\n\ts.Prefix = &v\n\treturn s\n}\n\n// SetTags sets the Tags field's value.\nfunc (s *ReplicationRuleAndOperator) SetTags(v []*Tag) *ReplicationRuleAndOperator {\n\ts.Tags = v\n\treturn s\n}\n\n// A filter that identifies the subset of objects to which the replication rule\n// applies. A Filter must specify exactly one Prefix, Tag, or an And child element.\ntype ReplicationRuleFilter struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// A container for specifying rule filters. The filters determine the subset\n\t// of objects to which the rule applies. This element is required only if you\n\t// specify more than one filter. For example:\n\t//\n\t//    * If you specify both a Prefix and a Tag filter, wrap these filters in\n\t//    an And tag.\n\t//\n\t//    * If you specify a filter based on multiple tags, wrap the Tag elements\n\t//    in an And tag.\n\tAnd *ReplicationRuleAndOperator `type:\"structure\"`\n\n\t// An object keyname prefix that identifies the subset of objects to which the\n\t// rule applies.\n\tPrefix *string `type:\"string\"`\n\n\t// A container for specifying a tag key and value.\n\t//\n\t// The rule applies only to objects that have the tag in their tag set.\n\tTag *Tag `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s ReplicationRuleFilter) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s ReplicationRuleFilter) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *ReplicationRuleFilter) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"ReplicationRuleFilter\"}\n\tif s.And != nil {\n\t\tif err := s.And.Validate(); err != nil {\n\t\t\tinvalidParams.AddNested(\"And\", err.(request.ErrInvalidParams))\n\t\t}\n\t}\n\tif s.Tag != nil {\n\t\tif err := s.Tag.Validate(); err != nil {\n\t\t\tinvalidParams.AddNested(\"Tag\", err.(request.ErrInvalidParams))\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetAnd sets the And field's value.\nfunc (s *ReplicationRuleFilter) SetAnd(v *ReplicationRuleAndOperator) *ReplicationRuleFilter {\n\ts.And = v\n\treturn s\n}\n\n// SetPrefix sets the Prefix field's value.\nfunc (s *ReplicationRuleFilter) SetPrefix(v string) *ReplicationRuleFilter {\n\ts.Prefix = &v\n\treturn s\n}\n\n// SetTag sets the Tag field's value.\nfunc (s *ReplicationRuleFilter) SetTag(v *Tag) *ReplicationRuleFilter {\n\ts.Tag = v\n\treturn s\n}\n\ntype RequestPaymentConfiguration struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Specifies who pays for the download and request fees.\n\t//\n\t// Payer is a required field\n\tPayer *string `type:\"string\" required:\"true\" enum:\"Payer\"`\n}\n\n// String returns the string representation\nfunc (s RequestPaymentConfiguration) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s RequestPaymentConfiguration) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *RequestPaymentConfiguration) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"RequestPaymentConfiguration\"}\n\tif s.Payer == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Payer\"))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetPayer sets the Payer field's value.\nfunc (s *RequestPaymentConfiguration) SetPayer(v string) *RequestPaymentConfiguration {\n\ts.Payer = &v\n\treturn s\n}\n\ntype RequestProgress struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Specifies whether periodic QueryProgress frames should be sent. Valid values:\n\t// TRUE, FALSE. Default value: FALSE.\n\tEnabled *bool `type:\"boolean\"`\n}\n\n// String returns the string representation\nfunc (s RequestProgress) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s RequestProgress) GoString() string {\n\treturn s.String()\n}\n\n// SetEnabled sets the Enabled field's value.\nfunc (s *RequestProgress) SetEnabled(v bool) *RequestProgress {\n\ts.Enabled = &v\n\treturn s\n}\n\ntype RestoreObjectInput struct {\n\t_ struct{} `type:\"structure\" payload:\"RestoreRequest\"`\n\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n\n\t// Key is a required field\n\tKey *string `location:\"uri\" locationName:\"Key\" min:\"1\" type:\"string\" required:\"true\"`\n\n\t// Confirms that the requester knows that she or he will be charged for the\n\t// request. Bucket owners need not specify this parameter in their requests.\n\t// Documentation on downloading objects from requester pays buckets can be found\n\t// at http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html\n\tRequestPayer *string `location:\"header\" locationName:\"x-amz-request-payer\" type:\"string\" enum:\"RequestPayer\"`\n\n\t// Container for restore job parameters.\n\tRestoreRequest *RestoreRequest `locationName:\"RestoreRequest\" type:\"structure\" xmlURI:\"http://s3.amazonaws.com/doc/2006-03-01/\"`\n\n\tVersionId *string `location:\"querystring\" locationName:\"versionId\" type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s RestoreObjectInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s RestoreObjectInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *RestoreObjectInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"RestoreObjectInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\tif s.Key == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Key\"))\n\t}\n\tif s.Key != nil && len(*s.Key) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Key\", 1))\n\t}\n\tif s.RestoreRequest != nil {\n\t\tif err := s.RestoreRequest.Validate(); err != nil {\n\t\t\tinvalidParams.AddNested(\"RestoreRequest\", err.(request.ErrInvalidParams))\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *RestoreObjectInput) SetBucket(v string) *RestoreObjectInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *RestoreObjectInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetKey sets the Key field's value.\nfunc (s *RestoreObjectInput) SetKey(v string) *RestoreObjectInput {\n\ts.Key = &v\n\treturn s\n}\n\n// SetRequestPayer sets the RequestPayer field's value.\nfunc (s *RestoreObjectInput) SetRequestPayer(v string) *RestoreObjectInput {\n\ts.RequestPayer = &v\n\treturn s\n}\n\n// SetRestoreRequest sets the RestoreRequest field's value.\nfunc (s *RestoreObjectInput) SetRestoreRequest(v *RestoreRequest) *RestoreObjectInput {\n\ts.RestoreRequest = v\n\treturn s\n}\n\n// SetVersionId sets the VersionId field's value.\nfunc (s *RestoreObjectInput) SetVersionId(v string) *RestoreObjectInput {\n\ts.VersionId = &v\n\treturn s\n}\n\ntype RestoreObjectOutput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// If present, indicates that the requester was successfully charged for the\n\t// request.\n\tRequestCharged *string `location:\"header\" locationName:\"x-amz-request-charged\" type:\"string\" enum:\"RequestCharged\"`\n\n\t// Indicates the path in the provided S3 output location where Select results\n\t// will be restored to.\n\tRestoreOutputPath *string `location:\"header\" locationName:\"x-amz-restore-output-path\" type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s RestoreObjectOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s RestoreObjectOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetRequestCharged sets the RequestCharged field's value.\nfunc (s *RestoreObjectOutput) SetRequestCharged(v string) *RestoreObjectOutput {\n\ts.RequestCharged = &v\n\treturn s\n}\n\n// SetRestoreOutputPath sets the RestoreOutputPath field's value.\nfunc (s *RestoreObjectOutput) SetRestoreOutputPath(v string) *RestoreObjectOutput {\n\ts.RestoreOutputPath = &v\n\treturn s\n}\n\n// Container for restore job parameters.\ntype RestoreRequest struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Lifetime of the active copy in days. Do not use with restores that specify\n\t// OutputLocation.\n\tDays *int64 `type:\"integer\"`\n\n\t// The optional description for the job.\n\tDescription *string `type:\"string\"`\n\n\t// Glacier related parameters pertaining to this job. Do not use with restores\n\t// that specify OutputLocation.\n\tGlacierJobParameters *GlacierJobParameters `type:\"structure\"`\n\n\t// Describes the location where the restore job's output is stored.\n\tOutputLocation *OutputLocation `type:\"structure\"`\n\n\t// Describes the parameters for Select job types.\n\tSelectParameters *SelectParameters `type:\"structure\"`\n\n\t// Glacier retrieval tier at which the restore will be processed.\n\tTier *string `type:\"string\" enum:\"Tier\"`\n\n\t// Type of restore request.\n\tType *string `type:\"string\" enum:\"RestoreRequestType\"`\n}\n\n// String returns the string representation\nfunc (s RestoreRequest) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s RestoreRequest) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *RestoreRequest) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"RestoreRequest\"}\n\tif s.GlacierJobParameters != nil {\n\t\tif err := s.GlacierJobParameters.Validate(); err != nil {\n\t\t\tinvalidParams.AddNested(\"GlacierJobParameters\", err.(request.ErrInvalidParams))\n\t\t}\n\t}\n\tif s.OutputLocation != nil {\n\t\tif err := s.OutputLocation.Validate(); err != nil {\n\t\t\tinvalidParams.AddNested(\"OutputLocation\", err.(request.ErrInvalidParams))\n\t\t}\n\t}\n\tif s.SelectParameters != nil {\n\t\tif err := s.SelectParameters.Validate(); err != nil {\n\t\t\tinvalidParams.AddNested(\"SelectParameters\", err.(request.ErrInvalidParams))\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetDays sets the Days field's value.\nfunc (s *RestoreRequest) SetDays(v int64) *RestoreRequest {\n\ts.Days = &v\n\treturn s\n}\n\n// SetDescription sets the Description field's value.\nfunc (s *RestoreRequest) SetDescription(v string) *RestoreRequest {\n\ts.Description = &v\n\treturn s\n}\n\n// SetGlacierJobParameters sets the GlacierJobParameters field's value.\nfunc (s *RestoreRequest) SetGlacierJobParameters(v *GlacierJobParameters) *RestoreRequest {\n\ts.GlacierJobParameters = v\n\treturn s\n}\n\n// SetOutputLocation sets the OutputLocation field's value.\nfunc (s *RestoreRequest) SetOutputLocation(v *OutputLocation) *RestoreRequest {\n\ts.OutputLocation = v\n\treturn s\n}\n\n// SetSelectParameters sets the SelectParameters field's value.\nfunc (s *RestoreRequest) SetSelectParameters(v *SelectParameters) *RestoreRequest {\n\ts.SelectParameters = v\n\treturn s\n}\n\n// SetTier sets the Tier field's value.\nfunc (s *RestoreRequest) SetTier(v string) *RestoreRequest {\n\ts.Tier = &v\n\treturn s\n}\n\n// SetType sets the Type field's value.\nfunc (s *RestoreRequest) SetType(v string) *RestoreRequest {\n\ts.Type = &v\n\treturn s\n}\n\n// Specifies the redirect behavior and when a redirect is applied.\ntype RoutingRule struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// A container for describing a condition that must be met for the specified\n\t// redirect to apply. For example, 1. If request is for pages in the /docs folder,\n\t// redirect to the /documents folder. 2. If request results in HTTP error 4xx,\n\t// redirect request to another host where you might process the error.\n\tCondition *Condition `type:\"structure\"`\n\n\t// Container for redirect information. You can redirect requests to another\n\t// host, to another page, or with another protocol. In the event of an error,\n\t// you can specify a different error code to return.\n\t//\n\t// Redirect is a required field\n\tRedirect *Redirect `type:\"structure\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s RoutingRule) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s RoutingRule) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *RoutingRule) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"RoutingRule\"}\n\tif s.Redirect == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Redirect\"))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetCondition sets the Condition field's value.\nfunc (s *RoutingRule) SetCondition(v *Condition) *RoutingRule {\n\ts.Condition = v\n\treturn s\n}\n\n// SetRedirect sets the Redirect field's value.\nfunc (s *RoutingRule) SetRedirect(v *Redirect) *RoutingRule {\n\ts.Redirect = v\n\treturn s\n}\n\n// Specifies lifecycle rules for an Amazon S3 bucket. For more information,\n// see PUT Bucket lifecycle (https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTlifecycle.html)\n// in the Amazon Simple Storage Service API Reference.\ntype Rule struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Specifies the days since the initiation of an incomplete multipart upload\n\t// that Amazon S3 will wait before permanently removing all parts of the upload.\n\t// For more information, see Aborting Incomplete Multipart Uploads Using a Bucket\n\t// Lifecycle Policy (https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuoverview.html#mpu-abort-incomplete-mpu-lifecycle-config)\n\t// in the Amazon Simple Storage Service Developer Guide.\n\tAbortIncompleteMultipartUpload *AbortIncompleteMultipartUpload `type:\"structure\"`\n\n\tExpiration *LifecycleExpiration `type:\"structure\"`\n\n\t// Unique identifier for the rule. The value can't be longer than 255 characters.\n\tID *string `type:\"string\"`\n\n\t// Specifies when noncurrent object versions expire. Upon expiration, Amazon\n\t// S3 permanently deletes the noncurrent object versions. You set this lifecycle\n\t// configuration action on a bucket that has versioning enabled (or suspended)\n\t// to request that Amazon S3 delete noncurrent object versions at a specific\n\t// period in the object's lifetime.\n\tNoncurrentVersionExpiration *NoncurrentVersionExpiration `type:\"structure\"`\n\n\t// Container for the transition rule that describes when noncurrent objects\n\t// transition to the STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING, GLACIER,\n\t// or DEEP_ARCHIVE storage class. If your bucket is versioning-enabled (or versioning\n\t// is suspended), you can set this action to request that Amazon S3 transition\n\t// noncurrent object versions to the STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING,\n\t// GLACIER, or DEEP_ARCHIVE storage class at a specific period in the object's\n\t// lifetime.\n\tNoncurrentVersionTransition *NoncurrentVersionTransition `type:\"structure\"`\n\n\t// Object key prefix that identifies one or more objects to which this rule\n\t// applies.\n\t//\n\t// Prefix is a required field\n\tPrefix *string `type:\"string\" required:\"true\"`\n\n\t// If Enabled, the rule is currently being applied. If Disabled, the rule is\n\t// not currently being applied.\n\t//\n\t// Status is a required field\n\tStatus *string `type:\"string\" required:\"true\" enum:\"ExpirationStatus\"`\n\n\t// Specifies when an object transitions to a specified storage class.\n\tTransition *Transition `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s Rule) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s Rule) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *Rule) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"Rule\"}\n\tif s.Prefix == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Prefix\"))\n\t}\n\tif s.Status == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Status\"))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetAbortIncompleteMultipartUpload sets the AbortIncompleteMultipartUpload field's value.\nfunc (s *Rule) SetAbortIncompleteMultipartUpload(v *AbortIncompleteMultipartUpload) *Rule {\n\ts.AbortIncompleteMultipartUpload = v\n\treturn s\n}\n\n// SetExpiration sets the Expiration field's value.\nfunc (s *Rule) SetExpiration(v *LifecycleExpiration) *Rule {\n\ts.Expiration = v\n\treturn s\n}\n\n// SetID sets the ID field's value.\nfunc (s *Rule) SetID(v string) *Rule {\n\ts.ID = &v\n\treturn s\n}\n\n// SetNoncurrentVersionExpiration sets the NoncurrentVersionExpiration field's value.\nfunc (s *Rule) SetNoncurrentVersionExpiration(v *NoncurrentVersionExpiration) *Rule {\n\ts.NoncurrentVersionExpiration = v\n\treturn s\n}\n\n// SetNoncurrentVersionTransition sets the NoncurrentVersionTransition field's value.\nfunc (s *Rule) SetNoncurrentVersionTransition(v *NoncurrentVersionTransition) *Rule {\n\ts.NoncurrentVersionTransition = v\n\treturn s\n}\n\n// SetPrefix sets the Prefix field's value.\nfunc (s *Rule) SetPrefix(v string) *Rule {\n\ts.Prefix = &v\n\treturn s\n}\n\n// SetStatus sets the Status field's value.\nfunc (s *Rule) SetStatus(v string) *Rule {\n\ts.Status = &v\n\treturn s\n}\n\n// SetTransition sets the Transition field's value.\nfunc (s *Rule) SetTransition(v *Transition) *Rule {\n\ts.Transition = v\n\treturn s\n}\n\n// Specifies the use of SSE-KMS to encrypt delivered Inventory reports.\ntype SSEKMS struct {\n\t_ struct{} `locationName:\"SSE-KMS\" type:\"structure\"`\n\n\t// Specifies the ID of the AWS Key Management Service (KMS) master encryption\n\t// key to use for encrypting Inventory reports.\n\t//\n\t// KeyId is a required field\n\tKeyId *string `type:\"string\" required:\"true\" sensitive:\"true\"`\n}\n\n// String returns the string representation\nfunc (s SSEKMS) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s SSEKMS) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *SSEKMS) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"SSEKMS\"}\n\tif s.KeyId == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"KeyId\"))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetKeyId sets the KeyId field's value.\nfunc (s *SSEKMS) SetKeyId(v string) *SSEKMS {\n\ts.KeyId = &v\n\treturn s\n}\n\n// Specifies the use of SSE-S3 to encrypt delivered Inventory reports.\ntype SSES3 struct {\n\t_ struct{} `locationName:\"SSE-S3\" type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s SSES3) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s SSES3) GoString() string {\n\treturn s.String()\n}\n\n// SelectObjectContentEventStream provides handling of EventStreams for\n// the SelectObjectContent API.\n//\n// Use this type to receive SelectObjectContentEventStream events. The events\n// can be read from the Events channel member.\n//\n// The events that can be received are:\n//\n//     * ContinuationEvent\n//     * EndEvent\n//     * ProgressEvent\n//     * RecordsEvent\n//     * StatsEvent\ntype SelectObjectContentEventStream struct {\n\t// Reader is the EventStream reader for the SelectObjectContentEventStream\n\t// events. This value is automatically set by the SDK when the API call is made\n\t// Use this member when unit testing your code with the SDK to mock out the\n\t// EventStream Reader.\n\t//\n\t// Must not be nil.\n\tReader SelectObjectContentEventStreamReader\n\n\t// StreamCloser is the io.Closer for the EventStream connection. For HTTP\n\t// EventStream this is the response Body. The stream will be closed when\n\t// the Close method of the EventStream is called.\n\tStreamCloser io.Closer\n}\n\n// Close closes the EventStream. This will also cause the Events channel to be\n// closed. You can use the closing of the Events channel to terminate your\n// application's read from the API's EventStream.\n//\n// Will close the underlying EventStream reader. For EventStream over HTTP\n// connection this will also close the HTTP connection.\n//\n// Close must be called when done using the EventStream API. Not calling Close\n// may result in resource leaks.\nfunc (es *SelectObjectContentEventStream) Close() (err error) {\n\tes.Reader.Close()\n\treturn es.Err()\n}\n\n// Err returns any error that occurred while reading EventStream Events from\n// the service API's response. Returns nil if there were no errors.\nfunc (es *SelectObjectContentEventStream) Err() error {\n\tif err := es.Reader.Err(); err != nil {\n\t\treturn err\n\t}\n\tes.StreamCloser.Close()\n\n\treturn nil\n}\n\n// Events returns a channel to read EventStream Events from the\n// SelectObjectContent API.\n//\n// These events are:\n//\n//     * ContinuationEvent\n//     * EndEvent\n//     * ProgressEvent\n//     * RecordsEvent\n//     * StatsEvent\nfunc (es *SelectObjectContentEventStream) Events() <-chan SelectObjectContentEventStreamEvent {\n\treturn es.Reader.Events()\n}\n\n// SelectObjectContentEventStreamEvent groups together all EventStream\n// events read from the SelectObjectContent API.\n//\n// These events are:\n//\n//     * ContinuationEvent\n//     * EndEvent\n//     * ProgressEvent\n//     * RecordsEvent\n//     * StatsEvent\ntype SelectObjectContentEventStreamEvent interface {\n\teventSelectObjectContentEventStream()\n}\n\n// SelectObjectContentEventStreamReader provides the interface for reading EventStream\n// Events from the SelectObjectContent API. The\n// default implementation for this interface will be SelectObjectContentEventStream.\n//\n// The reader's Close method must allow multiple concurrent calls.\n//\n// These events are:\n//\n//     * ContinuationEvent\n//     * EndEvent\n//     * ProgressEvent\n//     * RecordsEvent\n//     * StatsEvent\ntype SelectObjectContentEventStreamReader interface {\n\t// Returns a channel of events as they are read from the event stream.\n\tEvents() <-chan SelectObjectContentEventStreamEvent\n\n\t// Close will close the underlying event stream reader. For event stream over\n\t// HTTP this will also close the HTTP connection.\n\tClose() error\n\n\t// Returns any error that has occurred while reading from the event stream.\n\tErr() error\n}\n\ntype readSelectObjectContentEventStream struct {\n\teventReader *eventstreamapi.EventReader\n\tstream      chan SelectObjectContentEventStreamEvent\n\terrVal      atomic.Value\n\n\tdone      chan struct{}\n\tcloseOnce sync.Once\n}\n\nfunc newReadSelectObjectContentEventStream(\n\treader io.ReadCloser,\n\tunmarshalers request.HandlerList,\n\tlogger aws.Logger,\n\tlogLevel aws.LogLevelType,\n) *readSelectObjectContentEventStream {\n\tr := &readSelectObjectContentEventStream{\n\t\tstream: make(chan SelectObjectContentEventStreamEvent),\n\t\tdone:   make(chan struct{}),\n\t}\n\n\tr.eventReader = eventstreamapi.NewEventReader(\n\t\treader,\n\t\tprotocol.HandlerPayloadUnmarshal{\n\t\t\tUnmarshalers: unmarshalers,\n\t\t},\n\t\tr.unmarshalerForEventType,\n\t)\n\tr.eventReader.UseLogger(logger, logLevel)\n\n\treturn r\n}\n\n// Close will close the underlying event stream reader. For EventStream over\n// HTTP this will also close the HTTP connection.\nfunc (r *readSelectObjectContentEventStream) Close() error {\n\tr.closeOnce.Do(r.safeClose)\n\n\treturn r.Err()\n}\n\nfunc (r *readSelectObjectContentEventStream) safeClose() {\n\tclose(r.done)\n\terr := r.eventReader.Close()\n\tif err != nil {\n\t\tr.errVal.Store(err)\n\t}\n}\n\nfunc (r *readSelectObjectContentEventStream) Err() error {\n\tif v := r.errVal.Load(); v != nil {\n\t\treturn v.(error)\n\t}\n\n\treturn nil\n}\n\nfunc (r *readSelectObjectContentEventStream) Events() <-chan SelectObjectContentEventStreamEvent {\n\treturn r.stream\n}\n\nfunc (r *readSelectObjectContentEventStream) readEventStream() {\n\tdefer close(r.stream)\n\n\tfor {\n\t\tevent, err := r.eventReader.ReadEvent()\n\t\tif err != nil {\n\t\t\tif err == io.EOF {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tselect {\n\t\t\tcase <-r.done:\n\t\t\t\t// If closed already ignore the error\n\t\t\t\treturn\n\t\t\tdefault:\n\t\t\t}\n\t\t\tr.errVal.Store(err)\n\t\t\treturn\n\t\t}\n\n\t\tselect {\n\t\tcase r.stream <- event.(SelectObjectContentEventStreamEvent):\n\t\tcase <-r.done:\n\t\t\treturn\n\t\t}\n\t}\n}\n\nfunc (r *readSelectObjectContentEventStream) unmarshalerForEventType(\n\teventType string,\n) (eventstreamapi.Unmarshaler, error) {\n\tswitch eventType {\n\tcase \"Cont\":\n\t\treturn &ContinuationEvent{}, nil\n\n\tcase \"End\":\n\t\treturn &EndEvent{}, nil\n\n\tcase \"Progress\":\n\t\treturn &ProgressEvent{}, nil\n\n\tcase \"Records\":\n\t\treturn &RecordsEvent{}, nil\n\n\tcase \"Stats\":\n\t\treturn &StatsEvent{}, nil\n\tdefault:\n\t\treturn nil, awserr.New(\n\t\t\trequest.ErrCodeSerialization,\n\t\t\tfmt.Sprintf(\"unknown event type name, %s, for SelectObjectContentEventStream\", eventType),\n\t\t\tnil,\n\t\t)\n\t}\n}\n\n// Request to filter the contents of an Amazon S3 object based on a simple Structured\n// Query Language (SQL) statement. In the request, along with the SQL expression,\n// you must specify a data serialization format (JSON or CSV) of the object.\n// Amazon S3 uses this to parse object data into records. It returns only records\n// that match the specified SQL expression. You must also specify the data serialization\n// format for the response. For more information, see S3Select API Documentation\n// (https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectSELECTContent.html).\ntype SelectObjectContentInput struct {\n\t_ struct{} `locationName:\"SelectObjectContentRequest\" type:\"structure\" xmlURI:\"http://s3.amazonaws.com/doc/2006-03-01/\"`\n\n\t// The S3 bucket.\n\t//\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n\n\t// The expression that is used to query the object.\n\t//\n\t// Expression is a required field\n\tExpression *string `type:\"string\" required:\"true\"`\n\n\t// The type of the provided expression (for example., SQL).\n\t//\n\t// ExpressionType is a required field\n\tExpressionType *string `type:\"string\" required:\"true\" enum:\"ExpressionType\"`\n\n\t// Describes the format of the data in the object that is being queried.\n\t//\n\t// InputSerialization is a required field\n\tInputSerialization *InputSerialization `type:\"structure\" required:\"true\"`\n\n\t// The object key.\n\t//\n\t// Key is a required field\n\tKey *string `location:\"uri\" locationName:\"Key\" min:\"1\" type:\"string\" required:\"true\"`\n\n\t// Describes the format of the data that you want Amazon S3 to return in response.\n\t//\n\t// OutputSerialization is a required field\n\tOutputSerialization *OutputSerialization `type:\"structure\" required:\"true\"`\n\n\t// Specifies if periodic request progress information should be enabled.\n\tRequestProgress *RequestProgress `type:\"structure\"`\n\n\t// The SSE Algorithm used to encrypt the object. For more information, see Server-Side\n\t// Encryption (Using Customer-Provided Encryption Keys (https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html).\n\tSSECustomerAlgorithm *string `location:\"header\" locationName:\"x-amz-server-side-encryption-customer-algorithm\" type:\"string\"`\n\n\t// The SSE Customer Key. For more information, see Server-Side Encryption (Using\n\t// Customer-Provided Encryption Keys (https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html).\n\tSSECustomerKey *string `marshal-as:\"blob\" location:\"header\" locationName:\"x-amz-server-side-encryption-customer-key\" type:\"string\" sensitive:\"true\"`\n\n\t// The SSE Customer Key MD5. For more information, see Server-Side Encryption\n\t// (Using Customer-Provided Encryption Keys (https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html).\n\tSSECustomerKeyMD5 *string `location:\"header\" locationName:\"x-amz-server-side-encryption-customer-key-MD5\" type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s SelectObjectContentInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s SelectObjectContentInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *SelectObjectContentInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"SelectObjectContentInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\tif s.Expression == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Expression\"))\n\t}\n\tif s.ExpressionType == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"ExpressionType\"))\n\t}\n\tif s.InputSerialization == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"InputSerialization\"))\n\t}\n\tif s.Key == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Key\"))\n\t}\n\tif s.Key != nil && len(*s.Key) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Key\", 1))\n\t}\n\tif s.OutputSerialization == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"OutputSerialization\"))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *SelectObjectContentInput) SetBucket(v string) *SelectObjectContentInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *SelectObjectContentInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetExpression sets the Expression field's value.\nfunc (s *SelectObjectContentInput) SetExpression(v string) *SelectObjectContentInput {\n\ts.Expression = &v\n\treturn s\n}\n\n// SetExpressionType sets the ExpressionType field's value.\nfunc (s *SelectObjectContentInput) SetExpressionType(v string) *SelectObjectContentInput {\n\ts.ExpressionType = &v\n\treturn s\n}\n\n// SetInputSerialization sets the InputSerialization field's value.\nfunc (s *SelectObjectContentInput) SetInputSerialization(v *InputSerialization) *SelectObjectContentInput {\n\ts.InputSerialization = v\n\treturn s\n}\n\n// SetKey sets the Key field's value.\nfunc (s *SelectObjectContentInput) SetKey(v string) *SelectObjectContentInput {\n\ts.Key = &v\n\treturn s\n}\n\n// SetOutputSerialization sets the OutputSerialization field's value.\nfunc (s *SelectObjectContentInput) SetOutputSerialization(v *OutputSerialization) *SelectObjectContentInput {\n\ts.OutputSerialization = v\n\treturn s\n}\n\n// SetRequestProgress sets the RequestProgress field's value.\nfunc (s *SelectObjectContentInput) SetRequestProgress(v *RequestProgress) *SelectObjectContentInput {\n\ts.RequestProgress = v\n\treturn s\n}\n\n// SetSSECustomerAlgorithm sets the SSECustomerAlgorithm field's value.\nfunc (s *SelectObjectContentInput) SetSSECustomerAlgorithm(v string) *SelectObjectContentInput {\n\ts.SSECustomerAlgorithm = &v\n\treturn s\n}\n\n// SetSSECustomerKey sets the SSECustomerKey field's value.\nfunc (s *SelectObjectContentInput) SetSSECustomerKey(v string) *SelectObjectContentInput {\n\ts.SSECustomerKey = &v\n\treturn s\n}\n\nfunc (s *SelectObjectContentInput) getSSECustomerKey() (v string) {\n\tif s.SSECustomerKey == nil {\n\t\treturn v\n\t}\n\treturn *s.SSECustomerKey\n}\n\n// SetSSECustomerKeyMD5 sets the SSECustomerKeyMD5 field's value.\nfunc (s *SelectObjectContentInput) SetSSECustomerKeyMD5(v string) *SelectObjectContentInput {\n\ts.SSECustomerKeyMD5 = &v\n\treturn s\n}\n\ntype SelectObjectContentOutput struct {\n\t_ struct{} `type:\"structure\" payload:\"Payload\"`\n\n\t// Use EventStream to use the API's stream.\n\tEventStream *SelectObjectContentEventStream `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s SelectObjectContentOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s SelectObjectContentOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetEventStream sets the EventStream field's value.\nfunc (s *SelectObjectContentOutput) SetEventStream(v *SelectObjectContentEventStream) *SelectObjectContentOutput {\n\ts.EventStream = v\n\treturn s\n}\n\nfunc (s *SelectObjectContentOutput) runEventStreamLoop(r *request.Request) {\n\tif r.Error != nil {\n\t\treturn\n\t}\n\treader := newReadSelectObjectContentEventStream(\n\t\tr.HTTPResponse.Body,\n\t\tr.Handlers.UnmarshalStream,\n\t\tr.Config.Logger,\n\t\tr.Config.LogLevel.Value(),\n\t)\n\tgo reader.readEventStream()\n\n\teventStream := &SelectObjectContentEventStream{\n\t\tStreamCloser: r.HTTPResponse.Body,\n\t\tReader:       reader,\n\t}\n\ts.EventStream = eventStream\n}\n\n// Describes the parameters for Select job types.\ntype SelectParameters struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The expression that is used to query the object.\n\t//\n\t// Expression is a required field\n\tExpression *string `type:\"string\" required:\"true\"`\n\n\t// The type of the provided expression (e.g., SQL).\n\t//\n\t// ExpressionType is a required field\n\tExpressionType *string `type:\"string\" required:\"true\" enum:\"ExpressionType\"`\n\n\t// Describes the serialization format of the object.\n\t//\n\t// InputSerialization is a required field\n\tInputSerialization *InputSerialization `type:\"structure\" required:\"true\"`\n\n\t// Describes how the results of the Select job are serialized.\n\t//\n\t// OutputSerialization is a required field\n\tOutputSerialization *OutputSerialization `type:\"structure\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s SelectParameters) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s SelectParameters) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *SelectParameters) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"SelectParameters\"}\n\tif s.Expression == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Expression\"))\n\t}\n\tif s.ExpressionType == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"ExpressionType\"))\n\t}\n\tif s.InputSerialization == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"InputSerialization\"))\n\t}\n\tif s.OutputSerialization == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"OutputSerialization\"))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetExpression sets the Expression field's value.\nfunc (s *SelectParameters) SetExpression(v string) *SelectParameters {\n\ts.Expression = &v\n\treturn s\n}\n\n// SetExpressionType sets the ExpressionType field's value.\nfunc (s *SelectParameters) SetExpressionType(v string) *SelectParameters {\n\ts.ExpressionType = &v\n\treturn s\n}\n\n// SetInputSerialization sets the InputSerialization field's value.\nfunc (s *SelectParameters) SetInputSerialization(v *InputSerialization) *SelectParameters {\n\ts.InputSerialization = v\n\treturn s\n}\n\n// SetOutputSerialization sets the OutputSerialization field's value.\nfunc (s *SelectParameters) SetOutputSerialization(v *OutputSerialization) *SelectParameters {\n\ts.OutputSerialization = v\n\treturn s\n}\n\n// Describes the default server-side encryption to apply to new objects in the\n// bucket. If a PUT Object request doesn't specify any server-side encryption,\n// this default encryption will be applied. For more information, see PUT Bucket\n// encryption (https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTencryption.html)\n// in the Amazon Simple Storage Service API Reference.\ntype ServerSideEncryptionByDefault struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// KMS master key ID to use for the default encryption. This parameter is allowed\n\t// if and only if SSEAlgorithm is set to aws:kms.\n\tKMSMasterKeyID *string `type:\"string\" sensitive:\"true\"`\n\n\t// Server-side encryption algorithm to use for the default encryption.\n\t//\n\t// SSEAlgorithm is a required field\n\tSSEAlgorithm *string `type:\"string\" required:\"true\" enum:\"ServerSideEncryption\"`\n}\n\n// String returns the string representation\nfunc (s ServerSideEncryptionByDefault) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s ServerSideEncryptionByDefault) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *ServerSideEncryptionByDefault) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"ServerSideEncryptionByDefault\"}\n\tif s.SSEAlgorithm == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"SSEAlgorithm\"))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetKMSMasterKeyID sets the KMSMasterKeyID field's value.\nfunc (s *ServerSideEncryptionByDefault) SetKMSMasterKeyID(v string) *ServerSideEncryptionByDefault {\n\ts.KMSMasterKeyID = &v\n\treturn s\n}\n\n// SetSSEAlgorithm sets the SSEAlgorithm field's value.\nfunc (s *ServerSideEncryptionByDefault) SetSSEAlgorithm(v string) *ServerSideEncryptionByDefault {\n\ts.SSEAlgorithm = &v\n\treturn s\n}\n\n// Specifies the default server-side-encryption configuration.\ntype ServerSideEncryptionConfiguration struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Container for information about a particular server-side encryption configuration\n\t// rule.\n\t//\n\t// Rules is a required field\n\tRules []*ServerSideEncryptionRule `locationName:\"Rule\" type:\"list\" flattened:\"true\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s ServerSideEncryptionConfiguration) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s ServerSideEncryptionConfiguration) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *ServerSideEncryptionConfiguration) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"ServerSideEncryptionConfiguration\"}\n\tif s.Rules == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Rules\"))\n\t}\n\tif s.Rules != nil {\n\t\tfor i, v := range s.Rules {\n\t\t\tif v == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif err := v.Validate(); err != nil {\n\t\t\t\tinvalidParams.AddNested(fmt.Sprintf(\"%s[%v]\", \"Rules\", i), err.(request.ErrInvalidParams))\n\t\t\t}\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetRules sets the Rules field's value.\nfunc (s *ServerSideEncryptionConfiguration) SetRules(v []*ServerSideEncryptionRule) *ServerSideEncryptionConfiguration {\n\ts.Rules = v\n\treturn s\n}\n\n// Specifies the default server-side encryption configuration.\ntype ServerSideEncryptionRule struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Specifies the default server-side encryption to apply to new objects in the\n\t// bucket. If a PUT Object request doesn't specify any server-side encryption,\n\t// this default encryption will be applied.\n\tApplyServerSideEncryptionByDefault *ServerSideEncryptionByDefault `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s ServerSideEncryptionRule) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s ServerSideEncryptionRule) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *ServerSideEncryptionRule) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"ServerSideEncryptionRule\"}\n\tif s.ApplyServerSideEncryptionByDefault != nil {\n\t\tif err := s.ApplyServerSideEncryptionByDefault.Validate(); err != nil {\n\t\t\tinvalidParams.AddNested(\"ApplyServerSideEncryptionByDefault\", err.(request.ErrInvalidParams))\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetApplyServerSideEncryptionByDefault sets the ApplyServerSideEncryptionByDefault field's value.\nfunc (s *ServerSideEncryptionRule) SetApplyServerSideEncryptionByDefault(v *ServerSideEncryptionByDefault) *ServerSideEncryptionRule {\n\ts.ApplyServerSideEncryptionByDefault = v\n\treturn s\n}\n\n// A container that describes additional filters for identifying the source\n// objects that you want to replicate. You can choose to enable or disable the\n// replication of these objects. Currently, Amazon S3 supports only the filter\n// that you can specify for objects created with server-side encryption using\n// an AWS KMS-Managed Key (SSE-KMS).\ntype SourceSelectionCriteria struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// A container for filter information for the selection of Amazon S3 objects\n\t// encrypted with AWS KMS. If you include SourceSelectionCriteria in the replication\n\t// configuration, this element is required.\n\tSseKmsEncryptedObjects *SseKmsEncryptedObjects `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s SourceSelectionCriteria) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s SourceSelectionCriteria) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *SourceSelectionCriteria) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"SourceSelectionCriteria\"}\n\tif s.SseKmsEncryptedObjects != nil {\n\t\tif err := s.SseKmsEncryptedObjects.Validate(); err != nil {\n\t\t\tinvalidParams.AddNested(\"SseKmsEncryptedObjects\", err.(request.ErrInvalidParams))\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetSseKmsEncryptedObjects sets the SseKmsEncryptedObjects field's value.\nfunc (s *SourceSelectionCriteria) SetSseKmsEncryptedObjects(v *SseKmsEncryptedObjects) *SourceSelectionCriteria {\n\ts.SseKmsEncryptedObjects = v\n\treturn s\n}\n\n// A container for filter information for the selection of S3 objects encrypted\n// with AWS KMS.\ntype SseKmsEncryptedObjects struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Specifies whether Amazon S3 replicates objects created with server-side encryption\n\t// using an AWS KMS-managed key.\n\t//\n\t// Status is a required field\n\tStatus *string `type:\"string\" required:\"true\" enum:\"SseKmsEncryptedObjectsStatus\"`\n}\n\n// String returns the string representation\nfunc (s SseKmsEncryptedObjects) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s SseKmsEncryptedObjects) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *SseKmsEncryptedObjects) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"SseKmsEncryptedObjects\"}\n\tif s.Status == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Status\"))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetStatus sets the Status field's value.\nfunc (s *SseKmsEncryptedObjects) SetStatus(v string) *SseKmsEncryptedObjects {\n\ts.Status = &v\n\treturn s\n}\n\ntype Stats struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The total number of uncompressed object bytes processed.\n\tBytesProcessed *int64 `type:\"long\"`\n\n\t// The total number of bytes of records payload data returned.\n\tBytesReturned *int64 `type:\"long\"`\n\n\t// The total number of object bytes scanned.\n\tBytesScanned *int64 `type:\"long\"`\n}\n\n// String returns the string representation\nfunc (s Stats) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s Stats) GoString() string {\n\treturn s.String()\n}\n\n// SetBytesProcessed sets the BytesProcessed field's value.\nfunc (s *Stats) SetBytesProcessed(v int64) *Stats {\n\ts.BytesProcessed = &v\n\treturn s\n}\n\n// SetBytesReturned sets the BytesReturned field's value.\nfunc (s *Stats) SetBytesReturned(v int64) *Stats {\n\ts.BytesReturned = &v\n\treturn s\n}\n\n// SetBytesScanned sets the BytesScanned field's value.\nfunc (s *Stats) SetBytesScanned(v int64) *Stats {\n\ts.BytesScanned = &v\n\treturn s\n}\n\ntype StatsEvent struct {\n\t_ struct{} `locationName:\"StatsEvent\" type:\"structure\" payload:\"Details\"`\n\n\t// The Stats event details.\n\tDetails *Stats `locationName:\"Details\" type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s StatsEvent) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s StatsEvent) GoString() string {\n\treturn s.String()\n}\n\n// SetDetails sets the Details field's value.\nfunc (s *StatsEvent) SetDetails(v *Stats) *StatsEvent {\n\ts.Details = v\n\treturn s\n}\n\n// The StatsEvent is and event in the SelectObjectContentEventStream group of events.\nfunc (s *StatsEvent) eventSelectObjectContentEventStream() {}\n\n// UnmarshalEvent unmarshals the EventStream Message into the StatsEvent value.\n// This method is only used internally within the SDK's EventStream handling.\nfunc (s *StatsEvent) UnmarshalEvent(\n\tpayloadUnmarshaler protocol.PayloadUnmarshaler,\n\tmsg eventstream.Message,\n) error {\n\tif err := payloadUnmarshaler.UnmarshalPayload(\n\t\tbytes.NewReader(msg.Payload), s,\n\t); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// Specifies data related to access patterns to be collected and made available\n// to analyze the tradeoffs between different storage classes for an Amazon\n// S3 bucket.\ntype StorageClassAnalysis struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Specifies how data related to the storage class analysis for an Amazon S3\n\t// bucket should be exported.\n\tDataExport *StorageClassAnalysisDataExport `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s StorageClassAnalysis) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s StorageClassAnalysis) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *StorageClassAnalysis) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"StorageClassAnalysis\"}\n\tif s.DataExport != nil {\n\t\tif err := s.DataExport.Validate(); err != nil {\n\t\t\tinvalidParams.AddNested(\"DataExport\", err.(request.ErrInvalidParams))\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetDataExport sets the DataExport field's value.\nfunc (s *StorageClassAnalysis) SetDataExport(v *StorageClassAnalysisDataExport) *StorageClassAnalysis {\n\ts.DataExport = v\n\treturn s\n}\n\ntype StorageClassAnalysisDataExport struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The place to store the data for an analysis.\n\t//\n\t// Destination is a required field\n\tDestination *AnalyticsExportDestination `type:\"structure\" required:\"true\"`\n\n\t// The version of the output schema to use when exporting data. Must be V_1.\n\t//\n\t// OutputSchemaVersion is a required field\n\tOutputSchemaVersion *string `type:\"string\" required:\"true\" enum:\"StorageClassAnalysisSchemaVersion\"`\n}\n\n// String returns the string representation\nfunc (s StorageClassAnalysisDataExport) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s StorageClassAnalysisDataExport) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *StorageClassAnalysisDataExport) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"StorageClassAnalysisDataExport\"}\n\tif s.Destination == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Destination\"))\n\t}\n\tif s.OutputSchemaVersion == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"OutputSchemaVersion\"))\n\t}\n\tif s.Destination != nil {\n\t\tif err := s.Destination.Validate(); err != nil {\n\t\t\tinvalidParams.AddNested(\"Destination\", err.(request.ErrInvalidParams))\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetDestination sets the Destination field's value.\nfunc (s *StorageClassAnalysisDataExport) SetDestination(v *AnalyticsExportDestination) *StorageClassAnalysisDataExport {\n\ts.Destination = v\n\treturn s\n}\n\n// SetOutputSchemaVersion sets the OutputSchemaVersion field's value.\nfunc (s *StorageClassAnalysisDataExport) SetOutputSchemaVersion(v string) *StorageClassAnalysisDataExport {\n\ts.OutputSchemaVersion = &v\n\treturn s\n}\n\ntype Tag struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Name of the tag.\n\t//\n\t// Key is a required field\n\tKey *string `min:\"1\" type:\"string\" required:\"true\"`\n\n\t// Value of the tag.\n\t//\n\t// Value is a required field\n\tValue *string `type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s Tag) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s Tag) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *Tag) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"Tag\"}\n\tif s.Key == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Key\"))\n\t}\n\tif s.Key != nil && len(*s.Key) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Key\", 1))\n\t}\n\tif s.Value == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Value\"))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetKey sets the Key field's value.\nfunc (s *Tag) SetKey(v string) *Tag {\n\ts.Key = &v\n\treturn s\n}\n\n// SetValue sets the Value field's value.\nfunc (s *Tag) SetValue(v string) *Tag {\n\ts.Value = &v\n\treturn s\n}\n\ntype Tagging struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// TagSet is a required field\n\tTagSet []*Tag `locationNameList:\"Tag\" type:\"list\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s Tagging) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s Tagging) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *Tagging) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"Tagging\"}\n\tif s.TagSet == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"TagSet\"))\n\t}\n\tif s.TagSet != nil {\n\t\tfor i, v := range s.TagSet {\n\t\t\tif v == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif err := v.Validate(); err != nil {\n\t\t\t\tinvalidParams.AddNested(fmt.Sprintf(\"%s[%v]\", \"TagSet\", i), err.(request.ErrInvalidParams))\n\t\t\t}\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetTagSet sets the TagSet field's value.\nfunc (s *Tagging) SetTagSet(v []*Tag) *Tagging {\n\ts.TagSet = v\n\treturn s\n}\n\ntype TargetGrant struct {\n\t_ struct{} `type:\"structure\"`\n\n\tGrantee *Grantee `type:\"structure\" xmlPrefix:\"xsi\" xmlURI:\"http://www.w3.org/2001/XMLSchema-instance\"`\n\n\t// Logging permissions assigned to the Grantee for the bucket.\n\tPermission *string `type:\"string\" enum:\"BucketLogsPermission\"`\n}\n\n// String returns the string representation\nfunc (s TargetGrant) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s TargetGrant) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *TargetGrant) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"TargetGrant\"}\n\tif s.Grantee != nil {\n\t\tif err := s.Grantee.Validate(); err != nil {\n\t\t\tinvalidParams.AddNested(\"Grantee\", err.(request.ErrInvalidParams))\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetGrantee sets the Grantee field's value.\nfunc (s *TargetGrant) SetGrantee(v *Grantee) *TargetGrant {\n\ts.Grantee = v\n\treturn s\n}\n\n// SetPermission sets the Permission field's value.\nfunc (s *TargetGrant) SetPermission(v string) *TargetGrant {\n\ts.Permission = &v\n\treturn s\n}\n\n// A container for specifying the configuration for publication of messages\n// to an Amazon Simple Notification Service (Amazon SNS) topic when Amazon S3\n// detects specified events.\ntype TopicConfiguration struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The Amazon S3 bucket event about which to send notifications. For more information,\n\t// see Supported Event Types (https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html)\n\t// in the Amazon Simple Storage Service Developer Guide.\n\t//\n\t// Events is a required field\n\tEvents []*string `locationName:\"Event\" type:\"list\" flattened:\"true\" required:\"true\"`\n\n\t// Specifies object key name filtering rules. For information about key name\n\t// filtering, see Configuring Event Notifications (https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html)\n\t// in the Amazon Simple Storage Service Developer Guide.\n\tFilter *NotificationConfigurationFilter `type:\"structure\"`\n\n\t// An optional unique identifier for configurations in a notification configuration.\n\t// If you don't provide one, Amazon S3 will assign an ID.\n\tId *string `type:\"string\"`\n\n\t// The Amazon Resource Name (ARN) of the Amazon SNS topic to which Amazon S3\n\t// publishes a message when it detects events of the specified type.\n\t//\n\t// TopicArn is a required field\n\tTopicArn *string `locationName:\"Topic\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s TopicConfiguration) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s TopicConfiguration) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *TopicConfiguration) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"TopicConfiguration\"}\n\tif s.Events == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Events\"))\n\t}\n\tif s.TopicArn == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"TopicArn\"))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetEvents sets the Events field's value.\nfunc (s *TopicConfiguration) SetEvents(v []*string) *TopicConfiguration {\n\ts.Events = v\n\treturn s\n}\n\n// SetFilter sets the Filter field's value.\nfunc (s *TopicConfiguration) SetFilter(v *NotificationConfigurationFilter) *TopicConfiguration {\n\ts.Filter = v\n\treturn s\n}\n\n// SetId sets the Id field's value.\nfunc (s *TopicConfiguration) SetId(v string) *TopicConfiguration {\n\ts.Id = &v\n\treturn s\n}\n\n// SetTopicArn sets the TopicArn field's value.\nfunc (s *TopicConfiguration) SetTopicArn(v string) *TopicConfiguration {\n\ts.TopicArn = &v\n\treturn s\n}\n\ntype TopicConfigurationDeprecated struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Bucket event for which to send notifications.\n\t//\n\t// Deprecated: Event has been deprecated\n\tEvent *string `deprecated:\"true\" type:\"string\" enum:\"Event\"`\n\n\tEvents []*string `locationName:\"Event\" type:\"list\" flattened:\"true\"`\n\n\t// An optional unique identifier for configurations in a notification configuration.\n\t// If you don't provide one, Amazon S3 will assign an ID.\n\tId *string `type:\"string\"`\n\n\t// Amazon SNS topic to which Amazon S3 will publish a message to report the\n\t// specified events for the bucket.\n\tTopic *string `type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s TopicConfigurationDeprecated) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s TopicConfigurationDeprecated) GoString() string {\n\treturn s.String()\n}\n\n// SetEvent sets the Event field's value.\nfunc (s *TopicConfigurationDeprecated) SetEvent(v string) *TopicConfigurationDeprecated {\n\ts.Event = &v\n\treturn s\n}\n\n// SetEvents sets the Events field's value.\nfunc (s *TopicConfigurationDeprecated) SetEvents(v []*string) *TopicConfigurationDeprecated {\n\ts.Events = v\n\treturn s\n}\n\n// SetId sets the Id field's value.\nfunc (s *TopicConfigurationDeprecated) SetId(v string) *TopicConfigurationDeprecated {\n\ts.Id = &v\n\treturn s\n}\n\n// SetTopic sets the Topic field's value.\nfunc (s *TopicConfigurationDeprecated) SetTopic(v string) *TopicConfigurationDeprecated {\n\ts.Topic = &v\n\treturn s\n}\n\n// Specifies when an object transitions to a specified storage class.\ntype Transition struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Indicates when objects are transitioned to the specified storage class. The\n\t// date value must be in ISO 8601 format. The time is always midnight UTC.\n\tDate *time.Time `type:\"timestamp\" timestampFormat:\"iso8601\"`\n\n\t// Indicates the number of days after creation when objects are transitioned\n\t// to the specified storage class. The value must be a positive integer.\n\tDays *int64 `type:\"integer\"`\n\n\t// The storage class to which you want the object to transition.\n\tStorageClass *string `type:\"string\" enum:\"TransitionStorageClass\"`\n}\n\n// String returns the string representation\nfunc (s Transition) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s Transition) GoString() string {\n\treturn s.String()\n}\n\n// SetDate sets the Date field's value.\nfunc (s *Transition) SetDate(v time.Time) *Transition {\n\ts.Date = &v\n\treturn s\n}\n\n// SetDays sets the Days field's value.\nfunc (s *Transition) SetDays(v int64) *Transition {\n\ts.Days = &v\n\treturn s\n}\n\n// SetStorageClass sets the StorageClass field's value.\nfunc (s *Transition) SetStorageClass(v string) *Transition {\n\ts.StorageClass = &v\n\treturn s\n}\n\ntype UploadPartCopyInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n\n\t// The name of the source bucket and key name of the source object, separated\n\t// by a slash (/). Must be URL-encoded.\n\t//\n\t// CopySource is a required field\n\tCopySource *string `location:\"header\" locationName:\"x-amz-copy-source\" type:\"string\" required:\"true\"`\n\n\t// Copies the object if its entity tag (ETag) matches the specified tag.\n\tCopySourceIfMatch *string `location:\"header\" locationName:\"x-amz-copy-source-if-match\" type:\"string\"`\n\n\t// Copies the object if it has been modified since the specified time.\n\tCopySourceIfModifiedSince *time.Time `location:\"header\" locationName:\"x-amz-copy-source-if-modified-since\" type:\"timestamp\"`\n\n\t// Copies the object if its entity tag (ETag) is different than the specified\n\t// ETag.\n\tCopySourceIfNoneMatch *string `location:\"header\" locationName:\"x-amz-copy-source-if-none-match\" type:\"string\"`\n\n\t// Copies the object if it hasn't been modified since the specified time.\n\tCopySourceIfUnmodifiedSince *time.Time `location:\"header\" locationName:\"x-amz-copy-source-if-unmodified-since\" type:\"timestamp\"`\n\n\t// The range of bytes to copy from the source object. The range value must use\n\t// the form bytes=first-last, where the first and last are the zero-based byte\n\t// offsets to copy. For example, bytes=0-9 indicates that you want to copy the\n\t// first ten bytes of the source. You can copy a range only if the source object\n\t// is greater than 5 MB.\n\tCopySourceRange *string `location:\"header\" locationName:\"x-amz-copy-source-range\" type:\"string\"`\n\n\t// Specifies the algorithm to use when decrypting the source object (e.g., AES256).\n\tCopySourceSSECustomerAlgorithm *string `location:\"header\" locationName:\"x-amz-copy-source-server-side-encryption-customer-algorithm\" type:\"string\"`\n\n\t// Specifies the customer-provided encryption key for Amazon S3 to use to decrypt\n\t// the source object. The encryption key provided in this header must be one\n\t// that was used when the source object was created.\n\tCopySourceSSECustomerKey *string `marshal-as:\"blob\" location:\"header\" locationName:\"x-amz-copy-source-server-side-encryption-customer-key\" type:\"string\" sensitive:\"true\"`\n\n\t// Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.\n\t// Amazon S3 uses this header for a message integrity check to ensure the encryption\n\t// key was transmitted without error.\n\tCopySourceSSECustomerKeyMD5 *string `location:\"header\" locationName:\"x-amz-copy-source-server-side-encryption-customer-key-MD5\" type:\"string\"`\n\n\t// Key is a required field\n\tKey *string `location:\"uri\" locationName:\"Key\" min:\"1\" type:\"string\" required:\"true\"`\n\n\t// Part number of part being copied. This is a positive integer between 1 and\n\t// 10,000.\n\t//\n\t// PartNumber is a required field\n\tPartNumber *int64 `location:\"querystring\" locationName:\"partNumber\" type:\"integer\" required:\"true\"`\n\n\t// Confirms that the requester knows that she or he will be charged for the\n\t// request. Bucket owners need not specify this parameter in their requests.\n\t// Documentation on downloading objects from requester pays buckets can be found\n\t// at http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html\n\tRequestPayer *string `location:\"header\" locationName:\"x-amz-request-payer\" type:\"string\" enum:\"RequestPayer\"`\n\n\t// Specifies the algorithm to use to when encrypting the object (e.g., AES256).\n\tSSECustomerAlgorithm *string `location:\"header\" locationName:\"x-amz-server-side-encryption-customer-algorithm\" type:\"string\"`\n\n\t// Specifies the customer-provided encryption key for Amazon S3 to use in encrypting\n\t// data. This value is used to store the object and then it is discarded; Amazon\n\t// does not store the encryption key. The key must be appropriate for use with\n\t// the algorithm specified in the x-amz-server-side​-encryption​-customer-algorithm\n\t// header. This must be the same encryption key specified in the initiate multipart\n\t// upload request.\n\tSSECustomerKey *string `marshal-as:\"blob\" location:\"header\" locationName:\"x-amz-server-side-encryption-customer-key\" type:\"string\" sensitive:\"true\"`\n\n\t// Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.\n\t// Amazon S3 uses this header for a message integrity check to ensure the encryption\n\t// key was transmitted without error.\n\tSSECustomerKeyMD5 *string `location:\"header\" locationName:\"x-amz-server-side-encryption-customer-key-MD5\" type:\"string\"`\n\n\t// Upload ID identifying the multipart upload whose part is being copied.\n\t//\n\t// UploadId is a required field\n\tUploadId *string `location:\"querystring\" locationName:\"uploadId\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s UploadPartCopyInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s UploadPartCopyInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *UploadPartCopyInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"UploadPartCopyInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\tif s.CopySource == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"CopySource\"))\n\t}\n\tif s.Key == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Key\"))\n\t}\n\tif s.Key != nil && len(*s.Key) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Key\", 1))\n\t}\n\tif s.PartNumber == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"PartNumber\"))\n\t}\n\tif s.UploadId == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"UploadId\"))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *UploadPartCopyInput) SetBucket(v string) *UploadPartCopyInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *UploadPartCopyInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetCopySource sets the CopySource field's value.\nfunc (s *UploadPartCopyInput) SetCopySource(v string) *UploadPartCopyInput {\n\ts.CopySource = &v\n\treturn s\n}\n\n// SetCopySourceIfMatch sets the CopySourceIfMatch field's value.\nfunc (s *UploadPartCopyInput) SetCopySourceIfMatch(v string) *UploadPartCopyInput {\n\ts.CopySourceIfMatch = &v\n\treturn s\n}\n\n// SetCopySourceIfModifiedSince sets the CopySourceIfModifiedSince field's value.\nfunc (s *UploadPartCopyInput) SetCopySourceIfModifiedSince(v time.Time) *UploadPartCopyInput {\n\ts.CopySourceIfModifiedSince = &v\n\treturn s\n}\n\n// SetCopySourceIfNoneMatch sets the CopySourceIfNoneMatch field's value.\nfunc (s *UploadPartCopyInput) SetCopySourceIfNoneMatch(v string) *UploadPartCopyInput {\n\ts.CopySourceIfNoneMatch = &v\n\treturn s\n}\n\n// SetCopySourceIfUnmodifiedSince sets the CopySourceIfUnmodifiedSince field's value.\nfunc (s *UploadPartCopyInput) SetCopySourceIfUnmodifiedSince(v time.Time) *UploadPartCopyInput {\n\ts.CopySourceIfUnmodifiedSince = &v\n\treturn s\n}\n\n// SetCopySourceRange sets the CopySourceRange field's value.\nfunc (s *UploadPartCopyInput) SetCopySourceRange(v string) *UploadPartCopyInput {\n\ts.CopySourceRange = &v\n\treturn s\n}\n\n// SetCopySourceSSECustomerAlgorithm sets the CopySourceSSECustomerAlgorithm field's value.\nfunc (s *UploadPartCopyInput) SetCopySourceSSECustomerAlgorithm(v string) *UploadPartCopyInput {\n\ts.CopySourceSSECustomerAlgorithm = &v\n\treturn s\n}\n\n// SetCopySourceSSECustomerKey sets the CopySourceSSECustomerKey field's value.\nfunc (s *UploadPartCopyInput) SetCopySourceSSECustomerKey(v string) *UploadPartCopyInput {\n\ts.CopySourceSSECustomerKey = &v\n\treturn s\n}\n\nfunc (s *UploadPartCopyInput) getCopySourceSSECustomerKey() (v string) {\n\tif s.CopySourceSSECustomerKey == nil {\n\t\treturn v\n\t}\n\treturn *s.CopySourceSSECustomerKey\n}\n\n// SetCopySourceSSECustomerKeyMD5 sets the CopySourceSSECustomerKeyMD5 field's value.\nfunc (s *UploadPartCopyInput) SetCopySourceSSECustomerKeyMD5(v string) *UploadPartCopyInput {\n\ts.CopySourceSSECustomerKeyMD5 = &v\n\treturn s\n}\n\n// SetKey sets the Key field's value.\nfunc (s *UploadPartCopyInput) SetKey(v string) *UploadPartCopyInput {\n\ts.Key = &v\n\treturn s\n}\n\n// SetPartNumber sets the PartNumber field's value.\nfunc (s *UploadPartCopyInput) SetPartNumber(v int64) *UploadPartCopyInput {\n\ts.PartNumber = &v\n\treturn s\n}\n\n// SetRequestPayer sets the RequestPayer field's value.\nfunc (s *UploadPartCopyInput) SetRequestPayer(v string) *UploadPartCopyInput {\n\ts.RequestPayer = &v\n\treturn s\n}\n\n// SetSSECustomerAlgorithm sets the SSECustomerAlgorithm field's value.\nfunc (s *UploadPartCopyInput) SetSSECustomerAlgorithm(v string) *UploadPartCopyInput {\n\ts.SSECustomerAlgorithm = &v\n\treturn s\n}\n\n// SetSSECustomerKey sets the SSECustomerKey field's value.\nfunc (s *UploadPartCopyInput) SetSSECustomerKey(v string) *UploadPartCopyInput {\n\ts.SSECustomerKey = &v\n\treturn s\n}\n\nfunc (s *UploadPartCopyInput) getSSECustomerKey() (v string) {\n\tif s.SSECustomerKey == nil {\n\t\treturn v\n\t}\n\treturn *s.SSECustomerKey\n}\n\n// SetSSECustomerKeyMD5 sets the SSECustomerKeyMD5 field's value.\nfunc (s *UploadPartCopyInput) SetSSECustomerKeyMD5(v string) *UploadPartCopyInput {\n\ts.SSECustomerKeyMD5 = &v\n\treturn s\n}\n\n// SetUploadId sets the UploadId field's value.\nfunc (s *UploadPartCopyInput) SetUploadId(v string) *UploadPartCopyInput {\n\ts.UploadId = &v\n\treturn s\n}\n\ntype UploadPartCopyOutput struct {\n\t_ struct{} `type:\"structure\" payload:\"CopyPartResult\"`\n\n\tCopyPartResult *CopyPartResult `type:\"structure\"`\n\n\t// The version of the source object that was copied, if you have enabled versioning\n\t// on the source bucket.\n\tCopySourceVersionId *string `location:\"header\" locationName:\"x-amz-copy-source-version-id\" type:\"string\"`\n\n\t// If present, indicates that the requester was successfully charged for the\n\t// request.\n\tRequestCharged *string `location:\"header\" locationName:\"x-amz-request-charged\" type:\"string\" enum:\"RequestCharged\"`\n\n\t// If server-side encryption with a customer-provided encryption key was requested,\n\t// the response will include this header confirming the encryption algorithm\n\t// used.\n\tSSECustomerAlgorithm *string `location:\"header\" locationName:\"x-amz-server-side-encryption-customer-algorithm\" type:\"string\"`\n\n\t// If server-side encryption with a customer-provided encryption key was requested,\n\t// the response will include this header to provide round trip message integrity\n\t// verification of the customer-provided encryption key.\n\tSSECustomerKeyMD5 *string `location:\"header\" locationName:\"x-amz-server-side-encryption-customer-key-MD5\" type:\"string\"`\n\n\t// If present, specifies the ID of the AWS Key Management Service (KMS) master\n\t// encryption key that was used for the object.\n\tSSEKMSKeyId *string `location:\"header\" locationName:\"x-amz-server-side-encryption-aws-kms-key-id\" type:\"string\" sensitive:\"true\"`\n\n\t// The Server-side encryption algorithm used when storing this object in S3\n\t// (e.g., AES256, aws:kms).\n\tServerSideEncryption *string `location:\"header\" locationName:\"x-amz-server-side-encryption\" type:\"string\" enum:\"ServerSideEncryption\"`\n}\n\n// String returns the string representation\nfunc (s UploadPartCopyOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s UploadPartCopyOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetCopyPartResult sets the CopyPartResult field's value.\nfunc (s *UploadPartCopyOutput) SetCopyPartResult(v *CopyPartResult) *UploadPartCopyOutput {\n\ts.CopyPartResult = v\n\treturn s\n}\n\n// SetCopySourceVersionId sets the CopySourceVersionId field's value.\nfunc (s *UploadPartCopyOutput) SetCopySourceVersionId(v string) *UploadPartCopyOutput {\n\ts.CopySourceVersionId = &v\n\treturn s\n}\n\n// SetRequestCharged sets the RequestCharged field's value.\nfunc (s *UploadPartCopyOutput) SetRequestCharged(v string) *UploadPartCopyOutput {\n\ts.RequestCharged = &v\n\treturn s\n}\n\n// SetSSECustomerAlgorithm sets the SSECustomerAlgorithm field's value.\nfunc (s *UploadPartCopyOutput) SetSSECustomerAlgorithm(v string) *UploadPartCopyOutput {\n\ts.SSECustomerAlgorithm = &v\n\treturn s\n}\n\n// SetSSECustomerKeyMD5 sets the SSECustomerKeyMD5 field's value.\nfunc (s *UploadPartCopyOutput) SetSSECustomerKeyMD5(v string) *UploadPartCopyOutput {\n\ts.SSECustomerKeyMD5 = &v\n\treturn s\n}\n\n// SetSSEKMSKeyId sets the SSEKMSKeyId field's value.\nfunc (s *UploadPartCopyOutput) SetSSEKMSKeyId(v string) *UploadPartCopyOutput {\n\ts.SSEKMSKeyId = &v\n\treturn s\n}\n\n// SetServerSideEncryption sets the ServerSideEncryption field's value.\nfunc (s *UploadPartCopyOutput) SetServerSideEncryption(v string) *UploadPartCopyOutput {\n\ts.ServerSideEncryption = &v\n\treturn s\n}\n\ntype UploadPartInput struct {\n\t_ struct{} `type:\"structure\" payload:\"Body\"`\n\n\t// Object data.\n\tBody io.ReadSeeker `type:\"blob\"`\n\n\t// Name of the bucket to which the multipart upload was initiated.\n\t//\n\t// Bucket is a required field\n\tBucket *string `location:\"uri\" locationName:\"Bucket\" type:\"string\" required:\"true\"`\n\n\t// Size of the body in bytes. This parameter is useful when the size of the\n\t// body cannot be determined automatically.\n\tContentLength *int64 `location:\"header\" locationName:\"Content-Length\" type:\"long\"`\n\n\t// The base64-encoded 128-bit MD5 digest of the part data. This parameter is\n\t// auto-populated when using the command from the CLI. This parameted is required\n\t// if object lock parameters are specified.\n\tContentMD5 *string `location:\"header\" locationName:\"Content-MD5\" type:\"string\"`\n\n\t// Object key for which the multipart upload was initiated.\n\t//\n\t// Key is a required field\n\tKey *string `location:\"uri\" locationName:\"Key\" min:\"1\" type:\"string\" required:\"true\"`\n\n\t// Part number of part being uploaded. This is a positive integer between 1\n\t// and 10,000.\n\t//\n\t// PartNumber is a required field\n\tPartNumber *int64 `location:\"querystring\" locationName:\"partNumber\" type:\"integer\" required:\"true\"`\n\n\t// Confirms that the requester knows that she or he will be charged for the\n\t// request. Bucket owners need not specify this parameter in their requests.\n\t// Documentation on downloading objects from requester pays buckets can be found\n\t// at http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html\n\tRequestPayer *string `location:\"header\" locationName:\"x-amz-request-payer\" type:\"string\" enum:\"RequestPayer\"`\n\n\t// Specifies the algorithm to use to when encrypting the object (e.g., AES256).\n\tSSECustomerAlgorithm *string `location:\"header\" locationName:\"x-amz-server-side-encryption-customer-algorithm\" type:\"string\"`\n\n\t// Specifies the customer-provided encryption key for Amazon S3 to use in encrypting\n\t// data. This value is used to store the object and then it is discarded; Amazon\n\t// does not store the encryption key. The key must be appropriate for use with\n\t// the algorithm specified in the x-amz-server-side​-encryption​-customer-algorithm\n\t// header. This must be the same encryption key specified in the initiate multipart\n\t// upload request.\n\tSSECustomerKey *string `marshal-as:\"blob\" location:\"header\" locationName:\"x-amz-server-side-encryption-customer-key\" type:\"string\" sensitive:\"true\"`\n\n\t// Specifies the 128-bit MD5 digest of the encryption key according to RFC 1321.\n\t// Amazon S3 uses this header for a message integrity check to ensure the encryption\n\t// key was transmitted without error.\n\tSSECustomerKeyMD5 *string `location:\"header\" locationName:\"x-amz-server-side-encryption-customer-key-MD5\" type:\"string\"`\n\n\t// Upload ID identifying the multipart upload whose part is being uploaded.\n\t//\n\t// UploadId is a required field\n\tUploadId *string `location:\"querystring\" locationName:\"uploadId\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s UploadPartInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s UploadPartInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *UploadPartInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"UploadPartInput\"}\n\tif s.Bucket == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Bucket\"))\n\t}\n\tif s.Bucket != nil && len(*s.Bucket) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Bucket\", 1))\n\t}\n\tif s.Key == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Key\"))\n\t}\n\tif s.Key != nil && len(*s.Key) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Key\", 1))\n\t}\n\tif s.PartNumber == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"PartNumber\"))\n\t}\n\tif s.UploadId == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"UploadId\"))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetBody sets the Body field's value.\nfunc (s *UploadPartInput) SetBody(v io.ReadSeeker) *UploadPartInput {\n\ts.Body = v\n\treturn s\n}\n\n// SetBucket sets the Bucket field's value.\nfunc (s *UploadPartInput) SetBucket(v string) *UploadPartInput {\n\ts.Bucket = &v\n\treturn s\n}\n\nfunc (s *UploadPartInput) getBucket() (v string) {\n\tif s.Bucket == nil {\n\t\treturn v\n\t}\n\treturn *s.Bucket\n}\n\n// SetContentLength sets the ContentLength field's value.\nfunc (s *UploadPartInput) SetContentLength(v int64) *UploadPartInput {\n\ts.ContentLength = &v\n\treturn s\n}\n\n// SetContentMD5 sets the ContentMD5 field's value.\nfunc (s *UploadPartInput) SetContentMD5(v string) *UploadPartInput {\n\ts.ContentMD5 = &v\n\treturn s\n}\n\n// SetKey sets the Key field's value.\nfunc (s *UploadPartInput) SetKey(v string) *UploadPartInput {\n\ts.Key = &v\n\treturn s\n}\n\n// SetPartNumber sets the PartNumber field's value.\nfunc (s *UploadPartInput) SetPartNumber(v int64) *UploadPartInput {\n\ts.PartNumber = &v\n\treturn s\n}\n\n// SetRequestPayer sets the RequestPayer field's value.\nfunc (s *UploadPartInput) SetRequestPayer(v string) *UploadPartInput {\n\ts.RequestPayer = &v\n\treturn s\n}\n\n// SetSSECustomerAlgorithm sets the SSECustomerAlgorithm field's value.\nfunc (s *UploadPartInput) SetSSECustomerAlgorithm(v string) *UploadPartInput {\n\ts.SSECustomerAlgorithm = &v\n\treturn s\n}\n\n// SetSSECustomerKey sets the SSECustomerKey field's value.\nfunc (s *UploadPartInput) SetSSECustomerKey(v string) *UploadPartInput {\n\ts.SSECustomerKey = &v\n\treturn s\n}\n\nfunc (s *UploadPartInput) getSSECustomerKey() (v string) {\n\tif s.SSECustomerKey == nil {\n\t\treturn v\n\t}\n\treturn *s.SSECustomerKey\n}\n\n// SetSSECustomerKeyMD5 sets the SSECustomerKeyMD5 field's value.\nfunc (s *UploadPartInput) SetSSECustomerKeyMD5(v string) *UploadPartInput {\n\ts.SSECustomerKeyMD5 = &v\n\treturn s\n}\n\n// SetUploadId sets the UploadId field's value.\nfunc (s *UploadPartInput) SetUploadId(v string) *UploadPartInput {\n\ts.UploadId = &v\n\treturn s\n}\n\ntype UploadPartOutput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Entity tag for the uploaded object.\n\tETag *string `location:\"header\" locationName:\"ETag\" type:\"string\"`\n\n\t// If present, indicates that the requester was successfully charged for the\n\t// request.\n\tRequestCharged *string `location:\"header\" locationName:\"x-amz-request-charged\" type:\"string\" enum:\"RequestCharged\"`\n\n\t// If server-side encryption with a customer-provided encryption key was requested,\n\t// the response will include this header confirming the encryption algorithm\n\t// used.\n\tSSECustomerAlgorithm *string `location:\"header\" locationName:\"x-amz-server-side-encryption-customer-algorithm\" type:\"string\"`\n\n\t// If server-side encryption with a customer-provided encryption key was requested,\n\t// the response will include this header to provide round trip message integrity\n\t// verification of the customer-provided encryption key.\n\tSSECustomerKeyMD5 *string `location:\"header\" locationName:\"x-amz-server-side-encryption-customer-key-MD5\" type:\"string\"`\n\n\t// If present, specifies the ID of the AWS Key Management Service (KMS) master\n\t// encryption key that was used for the object.\n\tSSEKMSKeyId *string `location:\"header\" locationName:\"x-amz-server-side-encryption-aws-kms-key-id\" type:\"string\" sensitive:\"true\"`\n\n\t// The Server-side encryption algorithm used when storing this object in S3\n\t// (e.g., AES256, aws:kms).\n\tServerSideEncryption *string `location:\"header\" locationName:\"x-amz-server-side-encryption\" type:\"string\" enum:\"ServerSideEncryption\"`\n}\n\n// String returns the string representation\nfunc (s UploadPartOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s UploadPartOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetETag sets the ETag field's value.\nfunc (s *UploadPartOutput) SetETag(v string) *UploadPartOutput {\n\ts.ETag = &v\n\treturn s\n}\n\n// SetRequestCharged sets the RequestCharged field's value.\nfunc (s *UploadPartOutput) SetRequestCharged(v string) *UploadPartOutput {\n\ts.RequestCharged = &v\n\treturn s\n}\n\n// SetSSECustomerAlgorithm sets the SSECustomerAlgorithm field's value.\nfunc (s *UploadPartOutput) SetSSECustomerAlgorithm(v string) *UploadPartOutput {\n\ts.SSECustomerAlgorithm = &v\n\treturn s\n}\n\n// SetSSECustomerKeyMD5 sets the SSECustomerKeyMD5 field's value.\nfunc (s *UploadPartOutput) SetSSECustomerKeyMD5(v string) *UploadPartOutput {\n\ts.SSECustomerKeyMD5 = &v\n\treturn s\n}\n\n// SetSSEKMSKeyId sets the SSEKMSKeyId field's value.\nfunc (s *UploadPartOutput) SetSSEKMSKeyId(v string) *UploadPartOutput {\n\ts.SSEKMSKeyId = &v\n\treturn s\n}\n\n// SetServerSideEncryption sets the ServerSideEncryption field's value.\nfunc (s *UploadPartOutput) SetServerSideEncryption(v string) *UploadPartOutput {\n\ts.ServerSideEncryption = &v\n\treturn s\n}\n\n// Describes the versioning state of an Amazon S3 bucket. For more information,\n// see PUT Bucket versioning (https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTVersioningStatus.html)\n// in the Amazon Simple Storage Service API Reference.\ntype VersioningConfiguration struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// Specifies whether MFA delete is enabled in the bucket versioning configuration.\n\t// This element is only returned if the bucket has been configured with MFA\n\t// delete. If the bucket has never been so configured, this element is not returned.\n\tMFADelete *string `locationName:\"MfaDelete\" type:\"string\" enum:\"MFADelete\"`\n\n\t// The versioning state of the bucket.\n\tStatus *string `type:\"string\" enum:\"BucketVersioningStatus\"`\n}\n\n// String returns the string representation\nfunc (s VersioningConfiguration) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s VersioningConfiguration) GoString() string {\n\treturn s.String()\n}\n\n// SetMFADelete sets the MFADelete field's value.\nfunc (s *VersioningConfiguration) SetMFADelete(v string) *VersioningConfiguration {\n\ts.MFADelete = &v\n\treturn s\n}\n\n// SetStatus sets the Status field's value.\nfunc (s *VersioningConfiguration) SetStatus(v string) *VersioningConfiguration {\n\ts.Status = &v\n\treturn s\n}\n\n// Specifies website configuration parameters for an Amazon S3 bucket.\ntype WebsiteConfiguration struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The name of the error document for the website.\n\tErrorDocument *ErrorDocument `type:\"structure\"`\n\n\t// The name of the index document for the website.\n\tIndexDocument *IndexDocument `type:\"structure\"`\n\n\t// The redirect behavior for every request to this bucket's website endpoint.\n\t//\n\t// If you specify this property, you can't specify any other property.\n\tRedirectAllRequestsTo *RedirectAllRequestsTo `type:\"structure\"`\n\n\t// Rules that define when a redirect is applied and the redirect behavior.\n\tRoutingRules []*RoutingRule `locationNameList:\"RoutingRule\" type:\"list\"`\n}\n\n// String returns the string representation\nfunc (s WebsiteConfiguration) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s WebsiteConfiguration) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *WebsiteConfiguration) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"WebsiteConfiguration\"}\n\tif s.ErrorDocument != nil {\n\t\tif err := s.ErrorDocument.Validate(); err != nil {\n\t\t\tinvalidParams.AddNested(\"ErrorDocument\", err.(request.ErrInvalidParams))\n\t\t}\n\t}\n\tif s.IndexDocument != nil {\n\t\tif err := s.IndexDocument.Validate(); err != nil {\n\t\t\tinvalidParams.AddNested(\"IndexDocument\", err.(request.ErrInvalidParams))\n\t\t}\n\t}\n\tif s.RedirectAllRequestsTo != nil {\n\t\tif err := s.RedirectAllRequestsTo.Validate(); err != nil {\n\t\t\tinvalidParams.AddNested(\"RedirectAllRequestsTo\", err.(request.ErrInvalidParams))\n\t\t}\n\t}\n\tif s.RoutingRules != nil {\n\t\tfor i, v := range s.RoutingRules {\n\t\t\tif v == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif err := v.Validate(); err != nil {\n\t\t\t\tinvalidParams.AddNested(fmt.Sprintf(\"%s[%v]\", \"RoutingRules\", i), err.(request.ErrInvalidParams))\n\t\t\t}\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetErrorDocument sets the ErrorDocument field's value.\nfunc (s *WebsiteConfiguration) SetErrorDocument(v *ErrorDocument) *WebsiteConfiguration {\n\ts.ErrorDocument = v\n\treturn s\n}\n\n// SetIndexDocument sets the IndexDocument field's value.\nfunc (s *WebsiteConfiguration) SetIndexDocument(v *IndexDocument) *WebsiteConfiguration {\n\ts.IndexDocument = v\n\treturn s\n}\n\n// SetRedirectAllRequestsTo sets the RedirectAllRequestsTo field's value.\nfunc (s *WebsiteConfiguration) SetRedirectAllRequestsTo(v *RedirectAllRequestsTo) *WebsiteConfiguration {\n\ts.RedirectAllRequestsTo = v\n\treturn s\n}\n\n// SetRoutingRules sets the RoutingRules field's value.\nfunc (s *WebsiteConfiguration) SetRoutingRules(v []*RoutingRule) *WebsiteConfiguration {\n\ts.RoutingRules = v\n\treturn s\n}\n\nconst (\n\t// AnalyticsS3ExportFileFormatCsv is a AnalyticsS3ExportFileFormat enum value\n\tAnalyticsS3ExportFileFormatCsv = \"CSV\"\n)\n\nconst (\n\t// BucketAccelerateStatusEnabled is a BucketAccelerateStatus enum value\n\tBucketAccelerateStatusEnabled = \"Enabled\"\n\n\t// BucketAccelerateStatusSuspended is a BucketAccelerateStatus enum value\n\tBucketAccelerateStatusSuspended = \"Suspended\"\n)\n\nconst (\n\t// BucketCannedACLPrivate is a BucketCannedACL enum value\n\tBucketCannedACLPrivate = \"private\"\n\n\t// BucketCannedACLPublicRead is a BucketCannedACL enum value\n\tBucketCannedACLPublicRead = \"public-read\"\n\n\t// BucketCannedACLPublicReadWrite is a BucketCannedACL enum value\n\tBucketCannedACLPublicReadWrite = \"public-read-write\"\n\n\t// BucketCannedACLAuthenticatedRead is a BucketCannedACL enum value\n\tBucketCannedACLAuthenticatedRead = \"authenticated-read\"\n)\n\nconst (\n\t// BucketLocationConstraintEu is a BucketLocationConstraint enum value\n\tBucketLocationConstraintEu = \"EU\"\n\n\t// BucketLocationConstraintEuWest1 is a BucketLocationConstraint enum value\n\tBucketLocationConstraintEuWest1 = \"eu-west-1\"\n\n\t// BucketLocationConstraintUsWest1 is a BucketLocationConstraint enum value\n\tBucketLocationConstraintUsWest1 = \"us-west-1\"\n\n\t// BucketLocationConstraintUsWest2 is a BucketLocationConstraint enum value\n\tBucketLocationConstraintUsWest2 = \"us-west-2\"\n\n\t// BucketLocationConstraintApSouth1 is a BucketLocationConstraint enum value\n\tBucketLocationConstraintApSouth1 = \"ap-south-1\"\n\n\t// BucketLocationConstraintApSoutheast1 is a BucketLocationConstraint enum value\n\tBucketLocationConstraintApSoutheast1 = \"ap-southeast-1\"\n\n\t// BucketLocationConstraintApSoutheast2 is a BucketLocationConstraint enum value\n\tBucketLocationConstraintApSoutheast2 = \"ap-southeast-2\"\n\n\t// BucketLocationConstraintApNortheast1 is a BucketLocationConstraint enum value\n\tBucketLocationConstraintApNortheast1 = \"ap-northeast-1\"\n\n\t// BucketLocationConstraintSaEast1 is a BucketLocationConstraint enum value\n\tBucketLocationConstraintSaEast1 = \"sa-east-1\"\n\n\t// BucketLocationConstraintCnNorth1 is a BucketLocationConstraint enum value\n\tBucketLocationConstraintCnNorth1 = \"cn-north-1\"\n\n\t// BucketLocationConstraintEuCentral1 is a BucketLocationConstraint enum value\n\tBucketLocationConstraintEuCentral1 = \"eu-central-1\"\n)\n\nconst (\n\t// BucketLogsPermissionFullControl is a BucketLogsPermission enum value\n\tBucketLogsPermissionFullControl = \"FULL_CONTROL\"\n\n\t// BucketLogsPermissionRead is a BucketLogsPermission enum value\n\tBucketLogsPermissionRead = \"READ\"\n\n\t// BucketLogsPermissionWrite is a BucketLogsPermission enum value\n\tBucketLogsPermissionWrite = \"WRITE\"\n)\n\nconst (\n\t// BucketVersioningStatusEnabled is a BucketVersioningStatus enum value\n\tBucketVersioningStatusEnabled = \"Enabled\"\n\n\t// BucketVersioningStatusSuspended is a BucketVersioningStatus enum value\n\tBucketVersioningStatusSuspended = \"Suspended\"\n)\n\nconst (\n\t// CompressionTypeNone is a CompressionType enum value\n\tCompressionTypeNone = \"NONE\"\n\n\t// CompressionTypeGzip is a CompressionType enum value\n\tCompressionTypeGzip = \"GZIP\"\n\n\t// CompressionTypeBzip2 is a CompressionType enum value\n\tCompressionTypeBzip2 = \"BZIP2\"\n)\n\nconst (\n\t// DeleteMarkerReplicationStatusEnabled is a DeleteMarkerReplicationStatus enum value\n\tDeleteMarkerReplicationStatusEnabled = \"Enabled\"\n\n\t// DeleteMarkerReplicationStatusDisabled is a DeleteMarkerReplicationStatus enum value\n\tDeleteMarkerReplicationStatusDisabled = \"Disabled\"\n)\n\n// Requests Amazon S3 to encode the object keys in the response and specifies\n// the encoding method to use. An object key may contain any Unicode character;\n// however, XML 1.0 parser cannot parse some characters, such as characters\n// with an ASCII value from 0 to 10. For characters that are not supported in\n// XML 1.0, you can add this parameter to request that Amazon S3 encode the\n// keys in the response.\nconst (\n\t// EncodingTypeUrl is a EncodingType enum value\n\tEncodingTypeUrl = \"url\"\n)\n\n// The bucket event for which to send notifications.\nconst (\n\t// EventS3ReducedRedundancyLostObject is a Event enum value\n\tEventS3ReducedRedundancyLostObject = \"s3:ReducedRedundancyLostObject\"\n\n\t// EventS3ObjectCreated is a Event enum value\n\tEventS3ObjectCreated = \"s3:ObjectCreated:*\"\n\n\t// EventS3ObjectCreatedPut is a Event enum value\n\tEventS3ObjectCreatedPut = \"s3:ObjectCreated:Put\"\n\n\t// EventS3ObjectCreatedPost is a Event enum value\n\tEventS3ObjectCreatedPost = \"s3:ObjectCreated:Post\"\n\n\t// EventS3ObjectCreatedCopy is a Event enum value\n\tEventS3ObjectCreatedCopy = \"s3:ObjectCreated:Copy\"\n\n\t// EventS3ObjectCreatedCompleteMultipartUpload is a Event enum value\n\tEventS3ObjectCreatedCompleteMultipartUpload = \"s3:ObjectCreated:CompleteMultipartUpload\"\n\n\t// EventS3ObjectRemoved is a Event enum value\n\tEventS3ObjectRemoved = \"s3:ObjectRemoved:*\"\n\n\t// EventS3ObjectRemovedDelete is a Event enum value\n\tEventS3ObjectRemovedDelete = \"s3:ObjectRemoved:Delete\"\n\n\t// EventS3ObjectRemovedDeleteMarkerCreated is a Event enum value\n\tEventS3ObjectRemovedDeleteMarkerCreated = \"s3:ObjectRemoved:DeleteMarkerCreated\"\n\n\t// EventS3ObjectRestorePost is a Event enum value\n\tEventS3ObjectRestorePost = \"s3:ObjectRestore:Post\"\n\n\t// EventS3ObjectRestoreCompleted is a Event enum value\n\tEventS3ObjectRestoreCompleted = \"s3:ObjectRestore:Completed\"\n)\n\nconst (\n\t// ExpirationStatusEnabled is a ExpirationStatus enum value\n\tExpirationStatusEnabled = \"Enabled\"\n\n\t// ExpirationStatusDisabled is a ExpirationStatus enum value\n\tExpirationStatusDisabled = \"Disabled\"\n)\n\nconst (\n\t// ExpressionTypeSql is a ExpressionType enum value\n\tExpressionTypeSql = \"SQL\"\n)\n\nconst (\n\t// FileHeaderInfoUse is a FileHeaderInfo enum value\n\tFileHeaderInfoUse = \"USE\"\n\n\t// FileHeaderInfoIgnore is a FileHeaderInfo enum value\n\tFileHeaderInfoIgnore = \"IGNORE\"\n\n\t// FileHeaderInfoNone is a FileHeaderInfo enum value\n\tFileHeaderInfoNone = \"NONE\"\n)\n\nconst (\n\t// FilterRuleNamePrefix is a FilterRuleName enum value\n\tFilterRuleNamePrefix = \"prefix\"\n\n\t// FilterRuleNameSuffix is a FilterRuleName enum value\n\tFilterRuleNameSuffix = \"suffix\"\n)\n\nconst (\n\t// InventoryFormatCsv is a InventoryFormat enum value\n\tInventoryFormatCsv = \"CSV\"\n\n\t// InventoryFormatOrc is a InventoryFormat enum value\n\tInventoryFormatOrc = \"ORC\"\n\n\t// InventoryFormatParquet is a InventoryFormat enum value\n\tInventoryFormatParquet = \"Parquet\"\n)\n\nconst (\n\t// InventoryFrequencyDaily is a InventoryFrequency enum value\n\tInventoryFrequencyDaily = \"Daily\"\n\n\t// InventoryFrequencyWeekly is a InventoryFrequency enum value\n\tInventoryFrequencyWeekly = \"Weekly\"\n)\n\nconst (\n\t// InventoryIncludedObjectVersionsAll is a InventoryIncludedObjectVersions enum value\n\tInventoryIncludedObjectVersionsAll = \"All\"\n\n\t// InventoryIncludedObjectVersionsCurrent is a InventoryIncludedObjectVersions enum value\n\tInventoryIncludedObjectVersionsCurrent = \"Current\"\n)\n\nconst (\n\t// InventoryOptionalFieldSize is a InventoryOptionalField enum value\n\tInventoryOptionalFieldSize = \"Size\"\n\n\t// InventoryOptionalFieldLastModifiedDate is a InventoryOptionalField enum value\n\tInventoryOptionalFieldLastModifiedDate = \"LastModifiedDate\"\n\n\t// InventoryOptionalFieldStorageClass is a InventoryOptionalField enum value\n\tInventoryOptionalFieldStorageClass = \"StorageClass\"\n\n\t// InventoryOptionalFieldEtag is a InventoryOptionalField enum value\n\tInventoryOptionalFieldEtag = \"ETag\"\n\n\t// InventoryOptionalFieldIsMultipartUploaded is a InventoryOptionalField enum value\n\tInventoryOptionalFieldIsMultipartUploaded = \"IsMultipartUploaded\"\n\n\t// InventoryOptionalFieldReplicationStatus is a InventoryOptionalField enum value\n\tInventoryOptionalFieldReplicationStatus = \"ReplicationStatus\"\n\n\t// InventoryOptionalFieldEncryptionStatus is a InventoryOptionalField enum value\n\tInventoryOptionalFieldEncryptionStatus = \"EncryptionStatus\"\n\n\t// InventoryOptionalFieldObjectLockRetainUntilDate is a InventoryOptionalField enum value\n\tInventoryOptionalFieldObjectLockRetainUntilDate = \"ObjectLockRetainUntilDate\"\n\n\t// InventoryOptionalFieldObjectLockMode is a InventoryOptionalField enum value\n\tInventoryOptionalFieldObjectLockMode = \"ObjectLockMode\"\n\n\t// InventoryOptionalFieldObjectLockLegalHoldStatus is a InventoryOptionalField enum value\n\tInventoryOptionalFieldObjectLockLegalHoldStatus = \"ObjectLockLegalHoldStatus\"\n)\n\nconst (\n\t// JSONTypeDocument is a JSONType enum value\n\tJSONTypeDocument = \"DOCUMENT\"\n\n\t// JSONTypeLines is a JSONType enum value\n\tJSONTypeLines = \"LINES\"\n)\n\nconst (\n\t// MFADeleteEnabled is a MFADelete enum value\n\tMFADeleteEnabled = \"Enabled\"\n\n\t// MFADeleteDisabled is a MFADelete enum value\n\tMFADeleteDisabled = \"Disabled\"\n)\n\nconst (\n\t// MFADeleteStatusEnabled is a MFADeleteStatus enum value\n\tMFADeleteStatusEnabled = \"Enabled\"\n\n\t// MFADeleteStatusDisabled is a MFADeleteStatus enum value\n\tMFADeleteStatusDisabled = \"Disabled\"\n)\n\nconst (\n\t// MetadataDirectiveCopy is a MetadataDirective enum value\n\tMetadataDirectiveCopy = \"COPY\"\n\n\t// MetadataDirectiveReplace is a MetadataDirective enum value\n\tMetadataDirectiveReplace = \"REPLACE\"\n)\n\nconst (\n\t// ObjectCannedACLPrivate is a ObjectCannedACL enum value\n\tObjectCannedACLPrivate = \"private\"\n\n\t// ObjectCannedACLPublicRead is a ObjectCannedACL enum value\n\tObjectCannedACLPublicRead = \"public-read\"\n\n\t// ObjectCannedACLPublicReadWrite is a ObjectCannedACL enum value\n\tObjectCannedACLPublicReadWrite = \"public-read-write\"\n\n\t// ObjectCannedACLAuthenticatedRead is a ObjectCannedACL enum value\n\tObjectCannedACLAuthenticatedRead = \"authenticated-read\"\n\n\t// ObjectCannedACLAwsExecRead is a ObjectCannedACL enum value\n\tObjectCannedACLAwsExecRead = \"aws-exec-read\"\n\n\t// ObjectCannedACLBucketOwnerRead is a ObjectCannedACL enum value\n\tObjectCannedACLBucketOwnerRead = \"bucket-owner-read\"\n\n\t// ObjectCannedACLBucketOwnerFullControl is a ObjectCannedACL enum value\n\tObjectCannedACLBucketOwnerFullControl = \"bucket-owner-full-control\"\n)\n\nconst (\n\t// ObjectLockEnabledEnabled is a ObjectLockEnabled enum value\n\tObjectLockEnabledEnabled = \"Enabled\"\n)\n\nconst (\n\t// ObjectLockLegalHoldStatusOn is a ObjectLockLegalHoldStatus enum value\n\tObjectLockLegalHoldStatusOn = \"ON\"\n\n\t// ObjectLockLegalHoldStatusOff is a ObjectLockLegalHoldStatus enum value\n\tObjectLockLegalHoldStatusOff = \"OFF\"\n)\n\nconst (\n\t// ObjectLockModeGovernance is a ObjectLockMode enum value\n\tObjectLockModeGovernance = \"GOVERNANCE\"\n\n\t// ObjectLockModeCompliance is a ObjectLockMode enum value\n\tObjectLockModeCompliance = \"COMPLIANCE\"\n)\n\nconst (\n\t// ObjectLockRetentionModeGovernance is a ObjectLockRetentionMode enum value\n\tObjectLockRetentionModeGovernance = \"GOVERNANCE\"\n\n\t// ObjectLockRetentionModeCompliance is a ObjectLockRetentionMode enum value\n\tObjectLockRetentionModeCompliance = \"COMPLIANCE\"\n)\n\nconst (\n\t// ObjectStorageClassStandard is a ObjectStorageClass enum value\n\tObjectStorageClassStandard = \"STANDARD\"\n\n\t// ObjectStorageClassReducedRedundancy is a ObjectStorageClass enum value\n\tObjectStorageClassReducedRedundancy = \"REDUCED_REDUNDANCY\"\n\n\t// ObjectStorageClassGlacier is a ObjectStorageClass enum value\n\tObjectStorageClassGlacier = \"GLACIER\"\n\n\t// ObjectStorageClassStandardIa is a ObjectStorageClass enum value\n\tObjectStorageClassStandardIa = \"STANDARD_IA\"\n\n\t// ObjectStorageClassOnezoneIa is a ObjectStorageClass enum value\n\tObjectStorageClassOnezoneIa = \"ONEZONE_IA\"\n\n\t// ObjectStorageClassIntelligentTiering is a ObjectStorageClass enum value\n\tObjectStorageClassIntelligentTiering = \"INTELLIGENT_TIERING\"\n\n\t// ObjectStorageClassDeepArchive is a ObjectStorageClass enum value\n\tObjectStorageClassDeepArchive = \"DEEP_ARCHIVE\"\n)\n\nconst (\n\t// ObjectVersionStorageClassStandard is a ObjectVersionStorageClass enum value\n\tObjectVersionStorageClassStandard = \"STANDARD\"\n)\n\nconst (\n\t// OwnerOverrideDestination is a OwnerOverride enum value\n\tOwnerOverrideDestination = \"Destination\"\n)\n\nconst (\n\t// PayerRequester is a Payer enum value\n\tPayerRequester = \"Requester\"\n\n\t// PayerBucketOwner is a Payer enum value\n\tPayerBucketOwner = \"BucketOwner\"\n)\n\nconst (\n\t// PermissionFullControl is a Permission enum value\n\tPermissionFullControl = \"FULL_CONTROL\"\n\n\t// PermissionWrite is a Permission enum value\n\tPermissionWrite = \"WRITE\"\n\n\t// PermissionWriteAcp is a Permission enum value\n\tPermissionWriteAcp = \"WRITE_ACP\"\n\n\t// PermissionRead is a Permission enum value\n\tPermissionRead = \"READ\"\n\n\t// PermissionReadAcp is a Permission enum value\n\tPermissionReadAcp = \"READ_ACP\"\n)\n\nconst (\n\t// ProtocolHttp is a Protocol enum value\n\tProtocolHttp = \"http\"\n\n\t// ProtocolHttps is a Protocol enum value\n\tProtocolHttps = \"https\"\n)\n\nconst (\n\t// QuoteFieldsAlways is a QuoteFields enum value\n\tQuoteFieldsAlways = \"ALWAYS\"\n\n\t// QuoteFieldsAsneeded is a QuoteFields enum value\n\tQuoteFieldsAsneeded = \"ASNEEDED\"\n)\n\nconst (\n\t// ReplicationRuleStatusEnabled is a ReplicationRuleStatus enum value\n\tReplicationRuleStatusEnabled = \"Enabled\"\n\n\t// ReplicationRuleStatusDisabled is a ReplicationRuleStatus enum value\n\tReplicationRuleStatusDisabled = \"Disabled\"\n)\n\nconst (\n\t// ReplicationStatusComplete is a ReplicationStatus enum value\n\tReplicationStatusComplete = \"COMPLETE\"\n\n\t// ReplicationStatusPending is a ReplicationStatus enum value\n\tReplicationStatusPending = \"PENDING\"\n\n\t// ReplicationStatusFailed is a ReplicationStatus enum value\n\tReplicationStatusFailed = \"FAILED\"\n\n\t// ReplicationStatusReplica is a ReplicationStatus enum value\n\tReplicationStatusReplica = \"REPLICA\"\n)\n\n// If present, indicates that the requester was successfully charged for the\n// request.\nconst (\n\t// RequestChargedRequester is a RequestCharged enum value\n\tRequestChargedRequester = \"requester\"\n)\n\n// Confirms that the requester knows that she or he will be charged for the\n// request. Bucket owners need not specify this parameter in their requests.\n// Documentation on downloading objects from requester pays buckets can be found\n// at http://docs.aws.amazon.com/AmazonS3/latest/dev/ObjectsinRequesterPaysBuckets.html\nconst (\n\t// RequestPayerRequester is a RequestPayer enum value\n\tRequestPayerRequester = \"requester\"\n)\n\nconst (\n\t// RestoreRequestTypeSelect is a RestoreRequestType enum value\n\tRestoreRequestTypeSelect = \"SELECT\"\n)\n\nconst (\n\t// ServerSideEncryptionAes256 is a ServerSideEncryption enum value\n\tServerSideEncryptionAes256 = \"AES256\"\n\n\t// ServerSideEncryptionAwsKms is a ServerSideEncryption enum value\n\tServerSideEncryptionAwsKms = \"aws:kms\"\n)\n\nconst (\n\t// SseKmsEncryptedObjectsStatusEnabled is a SseKmsEncryptedObjectsStatus enum value\n\tSseKmsEncryptedObjectsStatusEnabled = \"Enabled\"\n\n\t// SseKmsEncryptedObjectsStatusDisabled is a SseKmsEncryptedObjectsStatus enum value\n\tSseKmsEncryptedObjectsStatusDisabled = \"Disabled\"\n)\n\nconst (\n\t// StorageClassStandard is a StorageClass enum value\n\tStorageClassStandard = \"STANDARD\"\n\n\t// StorageClassReducedRedundancy is a StorageClass enum value\n\tStorageClassReducedRedundancy = \"REDUCED_REDUNDANCY\"\n\n\t// StorageClassStandardIa is a StorageClass enum value\n\tStorageClassStandardIa = \"STANDARD_IA\"\n\n\t// StorageClassOnezoneIa is a StorageClass enum value\n\tStorageClassOnezoneIa = \"ONEZONE_IA\"\n\n\t// StorageClassIntelligentTiering is a StorageClass enum value\n\tStorageClassIntelligentTiering = \"INTELLIGENT_TIERING\"\n\n\t// StorageClassGlacier is a StorageClass enum value\n\tStorageClassGlacier = \"GLACIER\"\n\n\t// StorageClassDeepArchive is a StorageClass enum value\n\tStorageClassDeepArchive = \"DEEP_ARCHIVE\"\n)\n\nconst (\n\t// StorageClassAnalysisSchemaVersionV1 is a StorageClassAnalysisSchemaVersion enum value\n\tStorageClassAnalysisSchemaVersionV1 = \"V_1\"\n)\n\nconst (\n\t// TaggingDirectiveCopy is a TaggingDirective enum value\n\tTaggingDirectiveCopy = \"COPY\"\n\n\t// TaggingDirectiveReplace is a TaggingDirective enum value\n\tTaggingDirectiveReplace = \"REPLACE\"\n)\n\nconst (\n\t// TierStandard is a Tier enum value\n\tTierStandard = \"Standard\"\n\n\t// TierBulk is a Tier enum value\n\tTierBulk = \"Bulk\"\n\n\t// TierExpedited is a Tier enum value\n\tTierExpedited = \"Expedited\"\n)\n\nconst (\n\t// TransitionStorageClassGlacier is a TransitionStorageClass enum value\n\tTransitionStorageClassGlacier = \"GLACIER\"\n\n\t// TransitionStorageClassStandardIa is a TransitionStorageClass enum value\n\tTransitionStorageClassStandardIa = \"STANDARD_IA\"\n\n\t// TransitionStorageClassOnezoneIa is a TransitionStorageClass enum value\n\tTransitionStorageClassOnezoneIa = \"ONEZONE_IA\"\n\n\t// TransitionStorageClassIntelligentTiering is a TransitionStorageClass enum value\n\tTransitionStorageClassIntelligentTiering = \"INTELLIGENT_TIERING\"\n\n\t// TransitionStorageClassDeepArchive is a TransitionStorageClass enum value\n\tTransitionStorageClassDeepArchive = \"DEEP_ARCHIVE\"\n)\n\nconst (\n\t// TypeCanonicalUser is a Type enum value\n\tTypeCanonicalUser = \"CanonicalUser\"\n\n\t// TypeAmazonCustomerByEmail is a Type enum value\n\tTypeAmazonCustomerByEmail = \"AmazonCustomerByEmail\"\n\n\t// TypeGroup is a Type enum value\n\tTypeGroup = \"Group\"\n)\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/service/s3/body_hash.go",
    "content": "package s3\n\nimport (\n\t\"bytes\"\n\t\"crypto/md5\"\n\t\"crypto/sha256\"\n\t\"encoding/base64\"\n\t\"encoding/hex\"\n\t\"fmt\"\n\t\"hash\"\n\t\"io\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n\t\"github.com/aws/aws-sdk-go/aws/request\"\n\t\"github.com/aws/aws-sdk-go/internal/sdkio\"\n)\n\nconst (\n\tcontentMD5Header    = \"Content-Md5\"\n\tcontentSha256Header = \"X-Amz-Content-Sha256\"\n\tamzTeHeader         = \"X-Amz-Te\"\n\tamzTxEncodingHeader = \"X-Amz-Transfer-Encoding\"\n\n\tappendMD5TxEncoding = \"append-md5\"\n)\n\n// contentMD5 computes and sets the HTTP Content-MD5 header for requests that\n// require it.\nfunc contentMD5(r *request.Request) {\n\th := md5.New()\n\n\tif !aws.IsReaderSeekable(r.Body) {\n\t\tif r.Config.Logger != nil {\n\t\t\tr.Config.Logger.Log(fmt.Sprintf(\n\t\t\t\t\"Unable to compute Content-MD5 for unseekable body, S3.%s\",\n\t\t\t\tr.Operation.Name))\n\t\t}\n\t\treturn\n\t}\n\n\tif _, err := copySeekableBody(h, r.Body); err != nil {\n\t\tr.Error = awserr.New(\"ContentMD5\", \"failed to compute body MD5\", err)\n\t\treturn\n\t}\n\n\t// encode the md5 checksum in base64 and set the request header.\n\tv := base64.StdEncoding.EncodeToString(h.Sum(nil))\n\tr.HTTPRequest.Header.Set(contentMD5Header, v)\n}\n\n// computeBodyHashes will add Content MD5 and Content Sha256 hashes to the\n// request. If the body is not seekable or S3DisableContentMD5Validation set\n// this handler will be ignored.\nfunc computeBodyHashes(r *request.Request) {\n\tif aws.BoolValue(r.Config.S3DisableContentMD5Validation) {\n\t\treturn\n\t}\n\tif r.IsPresigned() {\n\t\treturn\n\t}\n\tif r.Error != nil || !aws.IsReaderSeekable(r.Body) {\n\t\treturn\n\t}\n\n\tvar md5Hash, sha256Hash hash.Hash\n\thashers := make([]io.Writer, 0, 2)\n\n\t// Determine upfront which hashes can be set without overriding user\n\t// provide header data.\n\tif v := r.HTTPRequest.Header.Get(contentMD5Header); len(v) == 0 {\n\t\tmd5Hash = md5.New()\n\t\thashers = append(hashers, md5Hash)\n\t}\n\n\tif v := r.HTTPRequest.Header.Get(contentSha256Header); len(v) == 0 {\n\t\tsha256Hash = sha256.New()\n\t\thashers = append(hashers, sha256Hash)\n\t}\n\n\t// Create the destination writer based on the hashes that are not already\n\t// provided by the user.\n\tvar dst io.Writer\n\tswitch len(hashers) {\n\tcase 0:\n\t\treturn\n\tcase 1:\n\t\tdst = hashers[0]\n\tdefault:\n\t\tdst = io.MultiWriter(hashers...)\n\t}\n\n\tif _, err := copySeekableBody(dst, r.Body); err != nil {\n\t\tr.Error = awserr.New(\"BodyHashError\", \"failed to compute body hashes\", err)\n\t\treturn\n\t}\n\n\t// For the hashes created, set the associated headers that the user did not\n\t// already provide.\n\tif md5Hash != nil {\n\t\tsum := make([]byte, md5.Size)\n\t\tencoded := make([]byte, md5Base64EncLen)\n\n\t\tbase64.StdEncoding.Encode(encoded, md5Hash.Sum(sum[0:0]))\n\t\tr.HTTPRequest.Header[contentMD5Header] = []string{string(encoded)}\n\t}\n\n\tif sha256Hash != nil {\n\t\tencoded := make([]byte, sha256HexEncLen)\n\t\tsum := make([]byte, sha256.Size)\n\n\t\thex.Encode(encoded, sha256Hash.Sum(sum[0:0]))\n\t\tr.HTTPRequest.Header[contentSha256Header] = []string{string(encoded)}\n\t}\n}\n\nconst (\n\tmd5Base64EncLen = (md5.Size + 2) / 3 * 4 // base64.StdEncoding.EncodedLen\n\tsha256HexEncLen = sha256.Size * 2        // hex.EncodedLen\n)\n\nfunc copySeekableBody(dst io.Writer, src io.ReadSeeker) (int64, error) {\n\tcurPos, err := src.Seek(0, sdkio.SeekCurrent)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\t// hash the body.  seek back to the first position after reading to reset\n\t// the body for transmission.  copy errors may be assumed to be from the\n\t// body.\n\tn, err := io.Copy(dst, src)\n\tif err != nil {\n\t\treturn n, err\n\t}\n\n\t_, err = src.Seek(curPos, sdkio.SeekStart)\n\tif err != nil {\n\t\treturn n, err\n\t}\n\n\treturn n, nil\n}\n\n// Adds the x-amz-te: append_md5 header to the request. This requests the service\n// responds with a trailing MD5 checksum.\n//\n// Will not ask for append MD5 if disabled, the request is presigned or,\n// or the API operation does not support content MD5 validation.\nfunc askForTxEncodingAppendMD5(r *request.Request) {\n\tif aws.BoolValue(r.Config.S3DisableContentMD5Validation) {\n\t\treturn\n\t}\n\tif r.IsPresigned() {\n\t\treturn\n\t}\n\tr.HTTPRequest.Header.Set(amzTeHeader, appendMD5TxEncoding)\n}\n\nfunc useMD5ValidationReader(r *request.Request) {\n\tif r.Error != nil {\n\t\treturn\n\t}\n\n\tif v := r.HTTPResponse.Header.Get(amzTxEncodingHeader); v != appendMD5TxEncoding {\n\t\treturn\n\t}\n\n\tvar bodyReader *io.ReadCloser\n\tvar contentLen int64\n\tswitch tv := r.Data.(type) {\n\tcase *GetObjectOutput:\n\t\tbodyReader = &tv.Body\n\t\tcontentLen = aws.Int64Value(tv.ContentLength)\n\t\t// Update ContentLength hiden the trailing MD5 checksum.\n\t\ttv.ContentLength = aws.Int64(contentLen - md5.Size)\n\t\ttv.ContentRange = aws.String(r.HTTPResponse.Header.Get(\"X-Amz-Content-Range\"))\n\tdefault:\n\t\tr.Error = awserr.New(\"ChecksumValidationError\",\n\t\t\tfmt.Sprintf(\"%s: %s header received on unsupported API, %s\",\n\t\t\t\tamzTxEncodingHeader, appendMD5TxEncoding, r.Operation.Name,\n\t\t\t), nil)\n\t\treturn\n\t}\n\n\tif contentLen < md5.Size {\n\t\tr.Error = awserr.New(\"ChecksumValidationError\",\n\t\t\tfmt.Sprintf(\"invalid Content-Length %d for %s %s\",\n\t\t\t\tcontentLen, appendMD5TxEncoding, amzTxEncodingHeader,\n\t\t\t), nil)\n\t\treturn\n\t}\n\n\t// Wrap and swap the response body reader with the validation reader.\n\t*bodyReader = newMD5ValidationReader(*bodyReader, contentLen-md5.Size)\n}\n\ntype md5ValidationReader struct {\n\trawReader io.ReadCloser\n\tpayload   io.Reader\n\thash      hash.Hash\n\n\tpayloadLen int64\n\tread       int64\n}\n\nfunc newMD5ValidationReader(reader io.ReadCloser, payloadLen int64) *md5ValidationReader {\n\th := md5.New()\n\treturn &md5ValidationReader{\n\t\trawReader:  reader,\n\t\tpayload:    io.TeeReader(&io.LimitedReader{R: reader, N: payloadLen}, h),\n\t\thash:       h,\n\t\tpayloadLen: payloadLen,\n\t}\n}\n\nfunc (v *md5ValidationReader) Read(p []byte) (n int, err error) {\n\tn, err = v.payload.Read(p)\n\tif err != nil && err != io.EOF {\n\t\treturn n, err\n\t}\n\n\tv.read += int64(n)\n\n\tif err == io.EOF {\n\t\tif v.read != v.payloadLen {\n\t\t\treturn n, io.ErrUnexpectedEOF\n\t\t}\n\t\texpectSum := make([]byte, md5.Size)\n\t\tactualSum := make([]byte, md5.Size)\n\t\tif _, sumReadErr := io.ReadFull(v.rawReader, expectSum); sumReadErr != nil {\n\t\t\treturn n, sumReadErr\n\t\t}\n\t\tactualSum = v.hash.Sum(actualSum[0:0])\n\t\tif !bytes.Equal(expectSum, actualSum) {\n\t\t\treturn n, awserr.New(\"InvalidChecksum\",\n\t\t\t\tfmt.Sprintf(\"expected MD5 checksum %s, got %s\",\n\t\t\t\t\thex.EncodeToString(expectSum),\n\t\t\t\t\thex.EncodeToString(actualSum),\n\t\t\t\t),\n\t\t\t\tnil)\n\t\t}\n\t}\n\n\treturn n, err\n}\n\nfunc (v *md5ValidationReader) Close() error {\n\treturn v.rawReader.Close()\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/service/s3/bucket_location.go",
    "content": "package s3\n\nimport (\n\t\"io/ioutil\"\n\t\"regexp\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n\t\"github.com/aws/aws-sdk-go/aws/awsutil\"\n\t\"github.com/aws/aws-sdk-go/aws/request\"\n)\n\nvar reBucketLocation = regexp.MustCompile(`>([^<>]+)<\\/Location`)\n\n// NormalizeBucketLocation is a utility function which will update the\n// passed in value to always be a region ID. Generally this would be used\n// with GetBucketLocation API operation.\n//\n// Replaces empty string with \"us-east-1\", and \"EU\" with \"eu-west-1\".\n//\n// See http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGETlocation.html\n// for more information on the values that can be returned.\nfunc NormalizeBucketLocation(loc string) string {\n\tswitch loc {\n\tcase \"\":\n\t\tloc = \"us-east-1\"\n\tcase \"EU\":\n\t\tloc = \"eu-west-1\"\n\t}\n\n\treturn loc\n}\n\n// NormalizeBucketLocationHandler is a request handler which will update the\n// GetBucketLocation's result LocationConstraint value to always be a region ID.\n//\n// Replaces empty string with \"us-east-1\", and \"EU\" with \"eu-west-1\".\n//\n// See http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGETlocation.html\n// for more information on the values that can be returned.\n//\n//     req, result := svc.GetBucketLocationRequest(&s3.GetBucketLocationInput{\n//         Bucket: aws.String(bucket),\n//     })\n//     req.Handlers.Unmarshal.PushBackNamed(NormalizeBucketLocationHandler)\n//     err := req.Send()\nvar NormalizeBucketLocationHandler = request.NamedHandler{\n\tName: \"awssdk.s3.NormalizeBucketLocation\",\n\tFn: func(req *request.Request) {\n\t\tif req.Error != nil {\n\t\t\treturn\n\t\t}\n\n\t\tout := req.Data.(*GetBucketLocationOutput)\n\t\tloc := NormalizeBucketLocation(aws.StringValue(out.LocationConstraint))\n\t\tout.LocationConstraint = aws.String(loc)\n\t},\n}\n\n// WithNormalizeBucketLocation is a request option which will update the\n// GetBucketLocation's result LocationConstraint value to always be a region ID.\n//\n// Replaces empty string with \"us-east-1\", and \"EU\" with \"eu-west-1\".\n//\n// See http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGETlocation.html\n// for more information on the values that can be returned.\n//\n//     result, err := svc.GetBucketLocationWithContext(ctx,\n//         &s3.GetBucketLocationInput{\n//             Bucket: aws.String(bucket),\n//         },\n//         s3.WithNormalizeBucketLocation,\n//     )\nfunc WithNormalizeBucketLocation(r *request.Request) {\n\tr.Handlers.Unmarshal.PushBackNamed(NormalizeBucketLocationHandler)\n}\n\nfunc buildGetBucketLocation(r *request.Request) {\n\tif r.DataFilled() {\n\t\tout := r.Data.(*GetBucketLocationOutput)\n\t\tb, err := ioutil.ReadAll(r.HTTPResponse.Body)\n\t\tif err != nil {\n\t\t\tr.Error = awserr.New(request.ErrCodeSerialization,\n\t\t\t\t\"failed reading response body\", err)\n\t\t\treturn\n\t\t}\n\n\t\tmatch := reBucketLocation.FindSubmatch(b)\n\t\tif len(match) > 1 {\n\t\t\tloc := string(match[1])\n\t\t\tout.LocationConstraint = aws.String(loc)\n\t\t}\n\t}\n}\n\nfunc populateLocationConstraint(r *request.Request) {\n\tif r.ParamsFilled() && aws.StringValue(r.Config.Region) != \"us-east-1\" {\n\t\tin := r.Params.(*CreateBucketInput)\n\t\tif in.CreateBucketConfiguration == nil {\n\t\t\tr.Params = awsutil.CopyOf(r.Params)\n\t\t\tin = r.Params.(*CreateBucketInput)\n\t\t\tin.CreateBucketConfiguration = &CreateBucketConfiguration{\n\t\t\t\tLocationConstraint: r.Config.Region,\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/service/s3/customizations.go",
    "content": "package s3\n\nimport (\n\t\"github.com/aws/aws-sdk-go/aws/client\"\n\t\"github.com/aws/aws-sdk-go/aws/request\"\n\t\"github.com/aws/aws-sdk-go/internal/s3err\"\n)\n\nfunc init() {\n\tinitClient = defaultInitClientFn\n\tinitRequest = defaultInitRequestFn\n}\n\nfunc defaultInitClientFn(c *client.Client) {\n\t// Support building custom endpoints based on config\n\tc.Handlers.Build.PushFront(updateEndpointForS3Config)\n\n\t// Require SSL when using SSE keys\n\tc.Handlers.Validate.PushBack(validateSSERequiresSSL)\n\tc.Handlers.Build.PushBack(computeSSEKeyMD5)\n\tc.Handlers.Build.PushBack(computeCopySourceSSEKeyMD5)\n\n\t// S3 uses custom error unmarshaling logic\n\tc.Handlers.UnmarshalError.Clear()\n\tc.Handlers.UnmarshalError.PushBack(unmarshalError)\n\tc.Handlers.UnmarshalError.PushBackNamed(s3err.RequestFailureWrapperHandler())\n}\n\nfunc defaultInitRequestFn(r *request.Request) {\n\t// Add reuest handlers for specific platforms.\n\t// e.g. 100-continue support for PUT requests using Go 1.6\n\tplatformRequestHandlers(r)\n\n\tswitch r.Operation.Name {\n\tcase opPutBucketCors, opPutBucketLifecycle, opPutBucketPolicy,\n\t\topPutBucketTagging, opDeleteObjects, opPutBucketLifecycleConfiguration,\n\t\topPutObjectLegalHold, opPutObjectRetention, opPutObjectLockConfiguration,\n\t\topPutBucketReplication:\n\t\t// These S3 operations require Content-MD5 to be set\n\t\tr.Handlers.Build.PushBack(contentMD5)\n\tcase opGetBucketLocation:\n\t\t// GetBucketLocation has custom parsing logic\n\t\tr.Handlers.Unmarshal.PushFront(buildGetBucketLocation)\n\tcase opCreateBucket:\n\t\t// Auto-populate LocationConstraint with current region\n\t\tr.Handlers.Validate.PushFront(populateLocationConstraint)\n\tcase opCopyObject, opUploadPartCopy, opCompleteMultipartUpload:\n\t\tr.Handlers.Unmarshal.PushFront(copyMultipartStatusOKUnmarhsalError)\n\t\tr.Handlers.Unmarshal.PushBackNamed(s3err.RequestFailureWrapperHandler())\n\tcase opPutObject, opUploadPart:\n\t\tr.Handlers.Build.PushBack(computeBodyHashes)\n\t\t// Disabled until #1837 root issue is resolved.\n\t\t//\tcase opGetObject:\n\t\t//\t\tr.Handlers.Build.PushBack(askForTxEncodingAppendMD5)\n\t\t//\t\tr.Handlers.Unmarshal.PushBack(useMD5ValidationReader)\n\t}\n}\n\n// bucketGetter is an accessor interface to grab the \"Bucket\" field from\n// an S3 type.\ntype bucketGetter interface {\n\tgetBucket() string\n}\n\n// sseCustomerKeyGetter is an accessor interface to grab the \"SSECustomerKey\"\n// field from an S3 type.\ntype sseCustomerKeyGetter interface {\n\tgetSSECustomerKey() string\n}\n\n// copySourceSSECustomerKeyGetter is an accessor interface to grab the\n// \"CopySourceSSECustomerKey\" field from an S3 type.\ntype copySourceSSECustomerKeyGetter interface {\n\tgetCopySourceSSECustomerKey() string\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/service/s3/doc.go",
    "content": "// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT.\n\n// Package s3 provides the client and types for making API\n// requests to Amazon Simple Storage Service.\n//\n// See https://docs.aws.amazon.com/goto/WebAPI/s3-2006-03-01 for more information on this service.\n//\n// See s3 package documentation for more information.\n// https://docs.aws.amazon.com/sdk-for-go/api/service/s3/\n//\n// Using the Client\n//\n// To contact Amazon Simple Storage Service with the SDK use the New function to create\n// a new service client. With that client you can make API requests to the service.\n// These clients are safe to use concurrently.\n//\n// See the SDK's documentation for more information on how to use the SDK.\n// https://docs.aws.amazon.com/sdk-for-go/api/\n//\n// See aws.Config documentation for more information on configuring SDK clients.\n// https://docs.aws.amazon.com/sdk-for-go/api/aws/#Config\n//\n// See the Amazon Simple Storage Service client S3 for more\n// information on creating client for this service.\n// https://docs.aws.amazon.com/sdk-for-go/api/service/s3/#New\npackage s3\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/service/s3/doc_custom.go",
    "content": "// Upload Managers\n//\n// The s3manager package's Uploader provides concurrent upload of content to S3\n// by taking advantage of S3's Multipart APIs. The Uploader also supports both\n// io.Reader for streaming uploads, and will also take advantage of io.ReadSeeker\n// for optimizations if the Body satisfies that type. Once the Uploader instance\n// is created you can call Upload concurrently from multiple goroutines safely.\n//\n//   // The session the S3 Uploader will use\n//   sess := session.Must(session.NewSession())\n//\n//   // Create an uploader with the session and default options\n//   uploader := s3manager.NewUploader(sess)\n//\n//   f, err  := os.Open(filename)\n//   if err != nil {\n//       return fmt.Errorf(\"failed to open file %q, %v\", filename, err)\n//   }\n//\n//   // Upload the file to S3.\n//   result, err := uploader.Upload(&s3manager.UploadInput{\n//       Bucket: aws.String(myBucket),\n//       Key:    aws.String(myString),\n//       Body:   f,\n//   })\n//   if err != nil {\n//       return fmt.Errorf(\"failed to upload file, %v\", err)\n//   }\n//   fmt.Printf(\"file uploaded to, %s\\n\", aws.StringValue(result.Location))\n//\n// See the s3manager package's Uploader type documentation for more information.\n// https://docs.aws.amazon.com/sdk-for-go/api/service/s3/s3manager/#Uploader\n//\n// Download Manager\n//\n// The s3manager package's Downloader provides concurrently downloading of Objects\n// from S3. The Downloader will write S3 Object content with an io.WriterAt.\n// Once the Downloader instance is created you can call Download concurrently from\n// multiple goroutines safely.\n//\n//   // The session the S3 Downloader will use\n//   sess := session.Must(session.NewSession())\n//\n//   // Create a downloader with the session and default options\n//   downloader := s3manager.NewDownloader(sess)\n//\n//   // Create a file to write the S3 Object contents to.\n//   f, err := os.Create(filename)\n//   if err != nil {\n//       return fmt.Errorf(\"failed to create file %q, %v\", filename, err)\n//   }\n//\n//   // Write the contents of S3 Object to the file\n//   n, err := downloader.Download(f, &s3.GetObjectInput{\n//       Bucket: aws.String(myBucket),\n//       Key:    aws.String(myString),\n//   })\n//   if err != nil {\n//       return fmt.Errorf(\"failed to download file, %v\", err)\n//   }\n//   fmt.Printf(\"file downloaded, %d bytes\\n\", n)\n//\n// See the s3manager package's Downloader type documentation for more information.\n// https://docs.aws.amazon.com/sdk-for-go/api/service/s3/s3manager/#Downloader\n//\n// Get Bucket Region\n//\n// GetBucketRegion will attempt to get the region for a bucket using a region\n// hint to determine which AWS partition to perform the query on. Use this utility\n// to determine the region a bucket is in.\n//\n//   sess := session.Must(session.NewSession())\n//\n//   bucket := \"my-bucket\"\n//   region, err := s3manager.GetBucketRegion(ctx, sess, bucket, \"us-west-2\")\n//   if err != nil {\n//       if aerr, ok := err.(awserr.Error); ok && aerr.Code() == \"NotFound\" {\n//            fmt.Fprintf(os.Stderr, \"unable to find bucket %s's region not found\\n\", bucket)\n//       }\n//       return err\n//   }\n//   fmt.Printf(\"Bucket %s is in %s region\\n\", bucket, region)\n//\n// See the s3manager package's GetBucketRegion function documentation for more information\n// https://docs.aws.amazon.com/sdk-for-go/api/service/s3/s3manager/#GetBucketRegion\n//\n// S3 Crypto Client\n//\n// The s3crypto package provides the tools to upload and download encrypted\n// content from S3. The Encryption and Decryption clients can be used concurrently\n// once the client is created.\n//\n//    sess := session.Must(session.NewSession())\n//\n//    // Create the decryption client.\n//    svc := s3crypto.NewDecryptionClient(sess)\n//\n//    // The object will be downloaded from S3 and decrypted locally. By metadata\n//    // about the object's encryption will instruct the decryption client how\n//    // decrypt the content of the object. By default KMS is used for keys.\n//    result, err := svc.GetObject(&s3.GetObjectInput {\n//        Bucket: aws.String(myBucket),\n//        Key: aws.String(myKey),\n//    })\n//\n// See the s3crypto package documentation for more information.\n// https://docs.aws.amazon.com/sdk-for-go/api/service/s3/s3crypto/\n//\npackage s3\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/service/s3/errors.go",
    "content": "// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT.\n\npackage s3\n\nconst (\n\n\t// ErrCodeBucketAlreadyExists for service response error code\n\t// \"BucketAlreadyExists\".\n\t//\n\t// The requested bucket name is not available. The bucket namespace is shared\n\t// by all users of the system. Please select a different name and try again.\n\tErrCodeBucketAlreadyExists = \"BucketAlreadyExists\"\n\n\t// ErrCodeBucketAlreadyOwnedByYou for service response error code\n\t// \"BucketAlreadyOwnedByYou\".\n\tErrCodeBucketAlreadyOwnedByYou = \"BucketAlreadyOwnedByYou\"\n\n\t// ErrCodeNoSuchBucket for service response error code\n\t// \"NoSuchBucket\".\n\t//\n\t// The specified bucket does not exist.\n\tErrCodeNoSuchBucket = \"NoSuchBucket\"\n\n\t// ErrCodeNoSuchKey for service response error code\n\t// \"NoSuchKey\".\n\t//\n\t// The specified key does not exist.\n\tErrCodeNoSuchKey = \"NoSuchKey\"\n\n\t// ErrCodeNoSuchUpload for service response error code\n\t// \"NoSuchUpload\".\n\t//\n\t// The specified multipart upload does not exist.\n\tErrCodeNoSuchUpload = \"NoSuchUpload\"\n\n\t// ErrCodeObjectAlreadyInActiveTierError for service response error code\n\t// \"ObjectAlreadyInActiveTierError\".\n\t//\n\t// This operation is not allowed against this storage tier\n\tErrCodeObjectAlreadyInActiveTierError = \"ObjectAlreadyInActiveTierError\"\n\n\t// ErrCodeObjectNotInActiveTierError for service response error code\n\t// \"ObjectNotInActiveTierError\".\n\t//\n\t// The source object of the COPY operation is not in the active tier and is\n\t// only stored in Amazon Glacier.\n\tErrCodeObjectNotInActiveTierError = \"ObjectNotInActiveTierError\"\n)\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/service/s3/host_style_bucket.go",
    "content": "package s3\n\nimport (\n\t\"fmt\"\n\t\"net/url\"\n\t\"regexp\"\n\t\"strings\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n\t\"github.com/aws/aws-sdk-go/aws/request\"\n)\n\n// an operationBlacklist is a list of operation names that should a\n// request handler should not be executed with.\ntype operationBlacklist []string\n\n// Continue will return true of the Request's operation name is not\n// in the blacklist. False otherwise.\nfunc (b operationBlacklist) Continue(r *request.Request) bool {\n\tfor i := 0; i < len(b); i++ {\n\t\tif b[i] == r.Operation.Name {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\nvar accelerateOpBlacklist = operationBlacklist{\n\topListBuckets, opCreateBucket, opDeleteBucket,\n}\n\n// Request handler to automatically add the bucket name to the endpoint domain\n// if possible. This style of bucket is valid for all bucket names which are\n// DNS compatible and do not contain \".\"\nfunc updateEndpointForS3Config(r *request.Request) {\n\tforceHostStyle := aws.BoolValue(r.Config.S3ForcePathStyle)\n\taccelerate := aws.BoolValue(r.Config.S3UseAccelerate)\n\n\tif accelerate && accelerateOpBlacklist.Continue(r) {\n\t\tif forceHostStyle {\n\t\t\tif r.Config.Logger != nil {\n\t\t\t\tr.Config.Logger.Log(\"ERROR: aws.Config.S3UseAccelerate is not compatible with aws.Config.S3ForcePathStyle, ignoring S3ForcePathStyle.\")\n\t\t\t}\n\t\t}\n\t\tupdateEndpointForAccelerate(r)\n\t} else if !forceHostStyle && r.Operation.Name != opGetBucketLocation {\n\t\tupdateEndpointForHostStyle(r)\n\t}\n}\n\nfunc updateEndpointForHostStyle(r *request.Request) {\n\tbucket, ok := bucketNameFromReqParams(r.Params)\n\tif !ok {\n\t\t// Ignore operation requests if the bucketname was not provided\n\t\t// if this is an input validation error the validation handler\n\t\t// will report it.\n\t\treturn\n\t}\n\n\tif !hostCompatibleBucketName(r.HTTPRequest.URL, bucket) {\n\t\t// bucket name must be valid to put into the host\n\t\treturn\n\t}\n\n\tmoveBucketToHost(r.HTTPRequest.URL, bucket)\n}\n\nvar (\n\taccelElem = []byte(\"s3-accelerate.dualstack.\")\n)\n\nfunc updateEndpointForAccelerate(r *request.Request) {\n\tbucket, ok := bucketNameFromReqParams(r.Params)\n\tif !ok {\n\t\t// Ignore operation requests if the bucketname was not provided\n\t\t// if this is an input validation error the validation handler\n\t\t// will report it.\n\t\treturn\n\t}\n\n\tif !hostCompatibleBucketName(r.HTTPRequest.URL, bucket) {\n\t\tr.Error = awserr.New(\"InvalidParameterException\",\n\t\t\tfmt.Sprintf(\"bucket name %s is not compatible with S3 Accelerate\", bucket),\n\t\t\tnil)\n\t\treturn\n\t}\n\n\tparts := strings.Split(r.HTTPRequest.URL.Host, \".\")\n\tif len(parts) < 3 {\n\t\tr.Error = awserr.New(\"InvalidParameterExecption\",\n\t\t\tfmt.Sprintf(\"unable to update endpoint host for S3 accelerate, hostname invalid, %s\",\n\t\t\t\tr.HTTPRequest.URL.Host), nil)\n\t\treturn\n\t}\n\n\tif parts[0] == \"s3\" || strings.HasPrefix(parts[0], \"s3-\") {\n\t\tparts[0] = \"s3-accelerate\"\n\t}\n\tfor i := 1; i+1 < len(parts); i++ {\n\t\tif parts[i] == aws.StringValue(r.Config.Region) {\n\t\t\tparts = append(parts[:i], parts[i+1:]...)\n\t\t\tbreak\n\t\t}\n\t}\n\n\tr.HTTPRequest.URL.Host = strings.Join(parts, \".\")\n\n\tmoveBucketToHost(r.HTTPRequest.URL, bucket)\n}\n\n// Attempts to retrieve the bucket name from the request input parameters.\n// If no bucket is found, or the field is empty \"\", false will be returned.\nfunc bucketNameFromReqParams(params interface{}) (string, bool) {\n\tif iface, ok := params.(bucketGetter); ok {\n\t\tb := iface.getBucket()\n\t\treturn b, len(b) > 0\n\t}\n\n\treturn \"\", false\n}\n\n// hostCompatibleBucketName returns true if the request should\n// put the bucket in the host. This is false if S3ForcePathStyle is\n// explicitly set or if the bucket is not DNS compatible.\nfunc hostCompatibleBucketName(u *url.URL, bucket string) bool {\n\t// Bucket might be DNS compatible but dots in the hostname will fail\n\t// certificate validation, so do not use host-style.\n\tif u.Scheme == \"https\" && strings.Contains(bucket, \".\") {\n\t\treturn false\n\t}\n\n\t// if the bucket is DNS compatible\n\treturn dnsCompatibleBucketName(bucket)\n}\n\nvar reDomain = regexp.MustCompile(`^[a-z0-9][a-z0-9\\.\\-]{1,61}[a-z0-9]$`)\nvar reIPAddress = regexp.MustCompile(`^(\\d+\\.){3}\\d+$`)\n\n// dnsCompatibleBucketName returns true if the bucket name is DNS compatible.\n// Buckets created outside of the classic region MUST be DNS compatible.\nfunc dnsCompatibleBucketName(bucket string) bool {\n\treturn reDomain.MatchString(bucket) &&\n\t\t!reIPAddress.MatchString(bucket) &&\n\t\t!strings.Contains(bucket, \"..\")\n}\n\n// moveBucketToHost moves the bucket name from the URI path to URL host.\nfunc moveBucketToHost(u *url.URL, bucket string) {\n\tu.Host = bucket + \".\" + u.Host\n\tu.Path = strings.Replace(u.Path, \"/{Bucket}\", \"\", -1)\n\tif u.Path == \"\" {\n\t\tu.Path = \"/\"\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/service/s3/platform_handlers.go",
    "content": "// +build !go1.6\n\npackage s3\n\nimport \"github.com/aws/aws-sdk-go/aws/request\"\n\nfunc platformRequestHandlers(r *request.Request) {\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/service/s3/platform_handlers_go1.6.go",
    "content": "// +build go1.6\n\npackage s3\n\nimport (\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-go/aws/request\"\n)\n\nfunc platformRequestHandlers(r *request.Request) {\n\tif r.Operation.HTTPMethod == \"PUT\" {\n\t\t// 100-Continue should only be used on put requests.\n\t\tr.Handlers.Sign.PushBack(add100Continue)\n\t}\n}\n\nfunc add100Continue(r *request.Request) {\n\tif aws.BoolValue(r.Config.S3Disable100Continue) {\n\t\treturn\n\t}\n\tif r.HTTPRequest.ContentLength < 1024*1024*2 {\n\t\t// Ignore requests smaller than 2MB. This helps prevent delaying\n\t\t// requests unnecessarily.\n\t\treturn\n\t}\n\n\tr.HTTPRequest.Header.Set(\"Expect\", \"100-Continue\")\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/service/s3/service.go",
    "content": "// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT.\n\npackage s3\n\nimport (\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-go/aws/client\"\n\t\"github.com/aws/aws-sdk-go/aws/client/metadata\"\n\t\"github.com/aws/aws-sdk-go/aws/request\"\n\t\"github.com/aws/aws-sdk-go/aws/signer/v4\"\n\t\"github.com/aws/aws-sdk-go/private/protocol/restxml\"\n)\n\n// S3 provides the API operation methods for making requests to\n// Amazon Simple Storage Service. See this package's package overview docs\n// for details on the service.\n//\n// S3 methods are safe to use concurrently. It is not safe to\n// modify mutate any of the struct's properties though.\ntype S3 struct {\n\t*client.Client\n}\n\n// Used for custom client initialization logic\nvar initClient func(*client.Client)\n\n// Used for custom request initialization logic\nvar initRequest func(*request.Request)\n\n// Service information constants\nconst (\n\tServiceName = \"s3\"        // Name of service.\n\tEndpointsID = ServiceName // ID to lookup a service endpoint with.\n\tServiceID   = \"S3\"        // ServiceID is a unique identifer of a specific service.\n)\n\n// New creates a new instance of the S3 client with a session.\n// If additional configuration is needed for the client instance use the optional\n// aws.Config parameter to add your extra config.\n//\n// Example:\n//     // Create a S3 client from just a session.\n//     svc := s3.New(mySession)\n//\n//     // Create a S3 client with additional configuration\n//     svc := s3.New(mySession, aws.NewConfig().WithRegion(\"us-west-2\"))\nfunc New(p client.ConfigProvider, cfgs ...*aws.Config) *S3 {\n\tc := p.ClientConfig(EndpointsID, cfgs...)\n\treturn newClient(*c.Config, c.Handlers, c.Endpoint, c.SigningRegion, c.SigningName)\n}\n\n// newClient creates, initializes and returns a new service client instance.\nfunc newClient(cfg aws.Config, handlers request.Handlers, endpoint, signingRegion, signingName string) *S3 {\n\tsvc := &S3{\n\t\tClient: client.New(\n\t\t\tcfg,\n\t\t\tmetadata.ClientInfo{\n\t\t\t\tServiceName:   ServiceName,\n\t\t\t\tServiceID:     ServiceID,\n\t\t\t\tSigningName:   signingName,\n\t\t\t\tSigningRegion: signingRegion,\n\t\t\t\tEndpoint:      endpoint,\n\t\t\t\tAPIVersion:    \"2006-03-01\",\n\t\t\t},\n\t\t\thandlers,\n\t\t),\n\t}\n\n\t// Handlers\n\tsvc.Handlers.Sign.PushBackNamed(v4.BuildNamedHandler(v4.SignRequestHandler.Name, func(s *v4.Signer) {\n\t\ts.DisableURIPathEscaping = true\n\t}))\n\tsvc.Handlers.Build.PushBackNamed(restxml.BuildHandler)\n\tsvc.Handlers.Unmarshal.PushBackNamed(restxml.UnmarshalHandler)\n\tsvc.Handlers.UnmarshalMeta.PushBackNamed(restxml.UnmarshalMetaHandler)\n\tsvc.Handlers.UnmarshalError.PushBackNamed(restxml.UnmarshalErrorHandler)\n\n\tsvc.Handlers.UnmarshalStream.PushBackNamed(restxml.UnmarshalHandler)\n\n\t// Run custom client initialization if present\n\tif initClient != nil {\n\t\tinitClient(svc.Client)\n\t}\n\n\treturn svc\n}\n\n// newRequest creates a new request for a S3 operation and runs any\n// custom request initialization.\nfunc (c *S3) newRequest(op *request.Operation, params, data interface{}) *request.Request {\n\treq := c.NewRequest(op, params, data)\n\n\t// Run custom request initialization if present\n\tif initRequest != nil {\n\t\tinitRequest(req)\n\t}\n\n\treturn req\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/service/s3/sse.go",
    "content": "package s3\n\nimport (\n\t\"crypto/md5\"\n\t\"encoding/base64\"\n\t\"net/http\"\n\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n\t\"github.com/aws/aws-sdk-go/aws/request\"\n)\n\nvar errSSERequiresSSL = awserr.New(\"ConfigError\", \"cannot send SSE keys over HTTP.\", nil)\n\nfunc validateSSERequiresSSL(r *request.Request) {\n\tif r.HTTPRequest.URL.Scheme == \"https\" {\n\t\treturn\n\t}\n\n\tif iface, ok := r.Params.(sseCustomerKeyGetter); ok {\n\t\tif len(iface.getSSECustomerKey()) > 0 {\n\t\t\tr.Error = errSSERequiresSSL\n\t\t\treturn\n\t\t}\n\t}\n\n\tif iface, ok := r.Params.(copySourceSSECustomerKeyGetter); ok {\n\t\tif len(iface.getCopySourceSSECustomerKey()) > 0 {\n\t\t\tr.Error = errSSERequiresSSL\n\t\t\treturn\n\t\t}\n\t}\n}\n\nconst (\n\tsseKeyHeader    = \"x-amz-server-side-encryption-customer-key\"\n\tsseKeyMD5Header = sseKeyHeader + \"-md5\"\n)\n\nfunc computeSSEKeyMD5(r *request.Request) {\n\tvar key string\n\tif g, ok := r.Params.(sseCustomerKeyGetter); ok {\n\t\tkey = g.getSSECustomerKey()\n\t}\n\n\tcomputeKeyMD5(sseKeyHeader, sseKeyMD5Header, key, r.HTTPRequest)\n}\n\nconst (\n\tcopySrcSSEKeyHeader    = \"x-amz-copy-source-server-side-encryption-customer-key\"\n\tcopySrcSSEKeyMD5Header = copySrcSSEKeyHeader + \"-md5\"\n)\n\nfunc computeCopySourceSSEKeyMD5(r *request.Request) {\n\tvar key string\n\tif g, ok := r.Params.(copySourceSSECustomerKeyGetter); ok {\n\t\tkey = g.getCopySourceSSECustomerKey()\n\t}\n\n\tcomputeKeyMD5(copySrcSSEKeyHeader, copySrcSSEKeyMD5Header, key, r.HTTPRequest)\n}\n\nfunc computeKeyMD5(keyHeader, keyMD5Header, key string, r *http.Request) {\n\tif len(key) == 0 {\n\t\t// Backwards compatiablity where user just set the header value instead\n\t\t// of using the API parameter, or setting the header value for an\n\t\t// operation without the parameters modeled.\n\t\tkey = r.Header.Get(keyHeader)\n\t\tif len(key) == 0 {\n\t\t\treturn\n\t\t}\n\n\t\t// In backwards compatiable, the header's value is not base64 encoded,\n\t\t// and needs to be encoded and updated by the SDK's customizations.\n\t\tb64Key := base64.StdEncoding.EncodeToString([]byte(key))\n\t\tr.Header.Set(keyHeader, b64Key)\n\t}\n\n\t// Only update Key's MD5 if not already set.\n\tif len(r.Header.Get(keyMD5Header)) == 0 {\n\t\tsum := md5.Sum([]byte(key))\n\t\tkeyMD5 := base64.StdEncoding.EncodeToString(sum[:])\n\t\tr.Header.Set(keyMD5Header, keyMD5)\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/service/s3/statusok_error.go",
    "content": "package s3\n\nimport (\n\t\"bytes\"\n\t\"io/ioutil\"\n\t\"net/http\"\n\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n\t\"github.com/aws/aws-sdk-go/aws/request\"\n\t\"github.com/aws/aws-sdk-go/internal/sdkio\"\n)\n\nfunc copyMultipartStatusOKUnmarhsalError(r *request.Request) {\n\tb, err := ioutil.ReadAll(r.HTTPResponse.Body)\n\tif err != nil {\n\t\tr.Error = awserr.NewRequestFailure(\n\t\t\tawserr.New(request.ErrCodeSerialization, \"unable to read response body\", err),\n\t\t\tr.HTTPResponse.StatusCode,\n\t\t\tr.RequestID,\n\t\t)\n\t\treturn\n\t}\n\tbody := bytes.NewReader(b)\n\tr.HTTPResponse.Body = ioutil.NopCloser(body)\n\tdefer body.Seek(0, sdkio.SeekStart)\n\n\tif body.Len() == 0 {\n\t\t// If there is no body don't attempt to parse the body.\n\t\treturn\n\t}\n\n\tunmarshalError(r)\n\tif err, ok := r.Error.(awserr.Error); ok && err != nil {\n\t\tif err.Code() == request.ErrCodeSerialization {\n\t\t\tr.Error = nil\n\t\t\treturn\n\t\t}\n\t\tr.HTTPResponse.StatusCode = http.StatusServiceUnavailable\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/service/s3/unmarshal_error.go",
    "content": "package s3\n\nimport (\n\t\"encoding/xml\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"net/http\"\n\t\"strings\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-go/aws/awserr\"\n\t\"github.com/aws/aws-sdk-go/aws/request\"\n\t\"github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil\"\n)\n\ntype xmlErrorResponse struct {\n\tXMLName xml.Name `xml:\"Error\"`\n\tCode    string   `xml:\"Code\"`\n\tMessage string   `xml:\"Message\"`\n}\n\nfunc unmarshalError(r *request.Request) {\n\tdefer r.HTTPResponse.Body.Close()\n\tdefer io.Copy(ioutil.Discard, r.HTTPResponse.Body)\n\n\t// Bucket exists in a different region, and request needs\n\t// to be made to the correct region.\n\tif r.HTTPResponse.StatusCode == http.StatusMovedPermanently {\n\t\tmsg := fmt.Sprintf(\n\t\t\t\"incorrect region, the bucket is not in '%s' region at endpoint '%s'\",\n\t\t\taws.StringValue(r.Config.Region),\n\t\t\taws.StringValue(r.Config.Endpoint),\n\t\t)\n\t\tif v := r.HTTPResponse.Header.Get(\"x-amz-bucket-region\"); len(v) != 0 {\n\t\t\tmsg += fmt.Sprintf(\", bucket is in '%s' region\", v)\n\t\t}\n\t\tr.Error = awserr.NewRequestFailure(\n\t\t\tawserr.New(\"BucketRegionError\", msg, nil),\n\t\t\tr.HTTPResponse.StatusCode,\n\t\t\tr.RequestID,\n\t\t)\n\t\treturn\n\t}\n\n\t// Attempt to parse error from body if it is known\n\tvar errResp xmlErrorResponse\n\terr := xmlutil.UnmarshalXMLError(&errResp, r.HTTPResponse.Body)\n\tif err == io.EOF {\n\t\t// Only capture the error if an unmarshal error occurs that is not EOF,\n\t\t// because S3 might send an error without a error message which causes\n\t\t// the XML unmarshal to fail with EOF.\n\t\terr = nil\n\t}\n\tif err != nil {\n\t\tr.Error = awserr.NewRequestFailure(\n\t\t\tawserr.New(request.ErrCodeSerialization,\n\t\t\t\t\"failed to unmarshal error message\", err),\n\t\t\tr.HTTPResponse.StatusCode,\n\t\t\tr.RequestID,\n\t\t)\n\t\treturn\n\t}\n\n\t// Fallback to status code converted to message if still no error code\n\tif len(errResp.Code) == 0 {\n\t\tstatusText := http.StatusText(r.HTTPResponse.StatusCode)\n\t\terrResp.Code = strings.Replace(statusText, \" \", \"\", -1)\n\t\terrResp.Message = statusText\n\t}\n\n\tr.Error = awserr.NewRequestFailure(\n\t\tawserr.New(errResp.Code, errResp.Message, err),\n\t\tr.HTTPResponse.StatusCode,\n\t\tr.RequestID,\n\t)\n}\n\n// A RequestFailure provides access to the S3 Request ID and Host ID values\n// returned from API operation errors. Getting the error as a string will\n// return the formated error with the same information as awserr.RequestFailure,\n// while also adding the HostID value from the response.\ntype RequestFailure interface {\n\tawserr.RequestFailure\n\n\t// Host ID is the S3 Host ID needed for debug, and contacting support\n\tHostID() string\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/service/s3/waiters.go",
    "content": "// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT.\n\npackage s3\n\nimport (\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-go/aws/request\"\n)\n\n// WaitUntilBucketExists uses the Amazon S3 API operation\n// HeadBucket to wait for a condition to be met before returning.\n// If the condition is not met within the max attempt window, an error will\n// be returned.\nfunc (c *S3) WaitUntilBucketExists(input *HeadBucketInput) error {\n\treturn c.WaitUntilBucketExistsWithContext(aws.BackgroundContext(), input)\n}\n\n// WaitUntilBucketExistsWithContext is an extended version of WaitUntilBucketExists.\n// With the support for passing in a context and options to configure the\n// Waiter and the underlying request options.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) WaitUntilBucketExistsWithContext(ctx aws.Context, input *HeadBucketInput, opts ...request.WaiterOption) error {\n\tw := request.Waiter{\n\t\tName:        \"WaitUntilBucketExists\",\n\t\tMaxAttempts: 20,\n\t\tDelay:       request.ConstantWaiterDelay(5 * time.Second),\n\t\tAcceptors: []request.WaiterAcceptor{\n\t\t\t{\n\t\t\t\tState:    request.SuccessWaiterState,\n\t\t\t\tMatcher:  request.StatusWaiterMatch,\n\t\t\t\tExpected: 200,\n\t\t\t},\n\t\t\t{\n\t\t\t\tState:    request.SuccessWaiterState,\n\t\t\t\tMatcher:  request.StatusWaiterMatch,\n\t\t\t\tExpected: 301,\n\t\t\t},\n\t\t\t{\n\t\t\t\tState:    request.SuccessWaiterState,\n\t\t\t\tMatcher:  request.StatusWaiterMatch,\n\t\t\t\tExpected: 403,\n\t\t\t},\n\t\t\t{\n\t\t\t\tState:    request.RetryWaiterState,\n\t\t\t\tMatcher:  request.StatusWaiterMatch,\n\t\t\t\tExpected: 404,\n\t\t\t},\n\t\t},\n\t\tLogger: c.Config.Logger,\n\t\tNewRequest: func(opts []request.Option) (*request.Request, error) {\n\t\t\tvar inCpy *HeadBucketInput\n\t\t\tif input != nil {\n\t\t\t\ttmp := *input\n\t\t\t\tinCpy = &tmp\n\t\t\t}\n\t\t\treq, _ := c.HeadBucketRequest(inCpy)\n\t\t\treq.SetContext(ctx)\n\t\t\treq.ApplyOptions(opts...)\n\t\t\treturn req, nil\n\t\t},\n\t}\n\tw.ApplyOptions(opts...)\n\n\treturn w.WaitWithContext(ctx)\n}\n\n// WaitUntilBucketNotExists uses the Amazon S3 API operation\n// HeadBucket to wait for a condition to be met before returning.\n// If the condition is not met within the max attempt window, an error will\n// be returned.\nfunc (c *S3) WaitUntilBucketNotExists(input *HeadBucketInput) error {\n\treturn c.WaitUntilBucketNotExistsWithContext(aws.BackgroundContext(), input)\n}\n\n// WaitUntilBucketNotExistsWithContext is an extended version of WaitUntilBucketNotExists.\n// With the support for passing in a context and options to configure the\n// Waiter and the underlying request options.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) WaitUntilBucketNotExistsWithContext(ctx aws.Context, input *HeadBucketInput, opts ...request.WaiterOption) error {\n\tw := request.Waiter{\n\t\tName:        \"WaitUntilBucketNotExists\",\n\t\tMaxAttempts: 20,\n\t\tDelay:       request.ConstantWaiterDelay(5 * time.Second),\n\t\tAcceptors: []request.WaiterAcceptor{\n\t\t\t{\n\t\t\t\tState:    request.SuccessWaiterState,\n\t\t\t\tMatcher:  request.StatusWaiterMatch,\n\t\t\t\tExpected: 404,\n\t\t\t},\n\t\t},\n\t\tLogger: c.Config.Logger,\n\t\tNewRequest: func(opts []request.Option) (*request.Request, error) {\n\t\t\tvar inCpy *HeadBucketInput\n\t\t\tif input != nil {\n\t\t\t\ttmp := *input\n\t\t\t\tinCpy = &tmp\n\t\t\t}\n\t\t\treq, _ := c.HeadBucketRequest(inCpy)\n\t\t\treq.SetContext(ctx)\n\t\t\treq.ApplyOptions(opts...)\n\t\t\treturn req, nil\n\t\t},\n\t}\n\tw.ApplyOptions(opts...)\n\n\treturn w.WaitWithContext(ctx)\n}\n\n// WaitUntilObjectExists uses the Amazon S3 API operation\n// HeadObject to wait for a condition to be met before returning.\n// If the condition is not met within the max attempt window, an error will\n// be returned.\nfunc (c *S3) WaitUntilObjectExists(input *HeadObjectInput) error {\n\treturn c.WaitUntilObjectExistsWithContext(aws.BackgroundContext(), input)\n}\n\n// WaitUntilObjectExistsWithContext is an extended version of WaitUntilObjectExists.\n// With the support for passing in a context and options to configure the\n// Waiter and the underlying request options.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) WaitUntilObjectExistsWithContext(ctx aws.Context, input *HeadObjectInput, opts ...request.WaiterOption) error {\n\tw := request.Waiter{\n\t\tName:        \"WaitUntilObjectExists\",\n\t\tMaxAttempts: 20,\n\t\tDelay:       request.ConstantWaiterDelay(5 * time.Second),\n\t\tAcceptors: []request.WaiterAcceptor{\n\t\t\t{\n\t\t\t\tState:    request.SuccessWaiterState,\n\t\t\t\tMatcher:  request.StatusWaiterMatch,\n\t\t\t\tExpected: 200,\n\t\t\t},\n\t\t\t{\n\t\t\t\tState:    request.RetryWaiterState,\n\t\t\t\tMatcher:  request.StatusWaiterMatch,\n\t\t\t\tExpected: 404,\n\t\t\t},\n\t\t},\n\t\tLogger: c.Config.Logger,\n\t\tNewRequest: func(opts []request.Option) (*request.Request, error) {\n\t\t\tvar inCpy *HeadObjectInput\n\t\t\tif input != nil {\n\t\t\t\ttmp := *input\n\t\t\t\tinCpy = &tmp\n\t\t\t}\n\t\t\treq, _ := c.HeadObjectRequest(inCpy)\n\t\t\treq.SetContext(ctx)\n\t\t\treq.ApplyOptions(opts...)\n\t\t\treturn req, nil\n\t\t},\n\t}\n\tw.ApplyOptions(opts...)\n\n\treturn w.WaitWithContext(ctx)\n}\n\n// WaitUntilObjectNotExists uses the Amazon S3 API operation\n// HeadObject to wait for a condition to be met before returning.\n// If the condition is not met within the max attempt window, an error will\n// be returned.\nfunc (c *S3) WaitUntilObjectNotExists(input *HeadObjectInput) error {\n\treturn c.WaitUntilObjectNotExistsWithContext(aws.BackgroundContext(), input)\n}\n\n// WaitUntilObjectNotExistsWithContext is an extended version of WaitUntilObjectNotExists.\n// With the support for passing in a context and options to configure the\n// Waiter and the underlying request options.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *S3) WaitUntilObjectNotExistsWithContext(ctx aws.Context, input *HeadObjectInput, opts ...request.WaiterOption) error {\n\tw := request.Waiter{\n\t\tName:        \"WaitUntilObjectNotExists\",\n\t\tMaxAttempts: 20,\n\t\tDelay:       request.ConstantWaiterDelay(5 * time.Second),\n\t\tAcceptors: []request.WaiterAcceptor{\n\t\t\t{\n\t\t\t\tState:    request.SuccessWaiterState,\n\t\t\t\tMatcher:  request.StatusWaiterMatch,\n\t\t\t\tExpected: 404,\n\t\t\t},\n\t\t},\n\t\tLogger: c.Config.Logger,\n\t\tNewRequest: func(opts []request.Option) (*request.Request, error) {\n\t\t\tvar inCpy *HeadObjectInput\n\t\t\tif input != nil {\n\t\t\t\ttmp := *input\n\t\t\t\tinCpy = &tmp\n\t\t\t}\n\t\t\treq, _ := c.HeadObjectRequest(inCpy)\n\t\t\treq.SetContext(ctx)\n\t\t\treq.ApplyOptions(opts...)\n\t\t\treturn req, nil\n\t\t},\n\t}\n\tw.ApplyOptions(opts...)\n\n\treturn w.WaitWithContext(ctx)\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/service/sts/api.go",
    "content": "// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT.\n\npackage sts\n\nimport (\n\t\"fmt\"\n\t\"time\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-go/aws/awsutil\"\n\t\"github.com/aws/aws-sdk-go/aws/credentials\"\n\t\"github.com/aws/aws-sdk-go/aws/request\"\n)\n\nconst opAssumeRole = \"AssumeRole\"\n\n// AssumeRoleRequest generates a \"aws/request.Request\" representing the\n// client's request for the AssumeRole operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See AssumeRole for more information on using the AssumeRole\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the AssumeRoleRequest method.\n//    req, resp := client.AssumeRoleRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/AssumeRole\nfunc (c *STS) AssumeRoleRequest(input *AssumeRoleInput) (req *request.Request, output *AssumeRoleOutput) {\n\top := &request.Operation{\n\t\tName:       opAssumeRole,\n\t\tHTTPMethod: \"POST\",\n\t\tHTTPPath:   \"/\",\n\t}\n\n\tif input == nil {\n\t\tinput = &AssumeRoleInput{}\n\t}\n\n\toutput = &AssumeRoleOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// AssumeRole API operation for AWS Security Token Service.\n//\n// Returns a set of temporary security credentials that you can use to access\n// AWS resources that you might not normally have access to. These temporary\n// credentials consist of an access key ID, a secret access key, and a security\n// token. Typically, you use AssumeRole within your account or for cross-account\n// access. For a comparison of AssumeRole with other API operations that produce\n// temporary credentials, see Requesting Temporary Security Credentials (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html)\n// and Comparing the AWS STS API operations (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#stsapi_comparison)\n// in the IAM User Guide.\n//\n// You cannot use AWS account root user credentials to call AssumeRole. You\n// must use credentials for an IAM user or an IAM role to call AssumeRole.\n//\n// For cross-account access, imagine that you own multiple accounts and need\n// to access resources in each account. You could create long-term credentials\n// in each account to access those resources. However, managing all those credentials\n// and remembering which one can access which account can be time consuming.\n// Instead, you can create one set of long-term credentials in one account.\n// Then use temporary security credentials to access all the other accounts\n// by assuming roles in those accounts. For more information about roles, see\n// IAM Roles (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)\n// in the IAM User Guide.\n//\n// By default, the temporary security credentials created by AssumeRole last\n// for one hour. However, you can use the optional DurationSeconds parameter\n// to specify the duration of your session. You can provide a value from 900\n// seconds (15 minutes) up to the maximum session duration setting for the role.\n// This setting can have a value from 1 hour to 12 hours. To learn how to view\n// the maximum value for your role, see View the Maximum Session Duration Setting\n// for a Role (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html#id_roles_use_view-role-max-session)\n// in the IAM User Guide. The maximum session duration limit applies when you\n// use the AssumeRole* API operations or the assume-role* CLI commands. However\n// the limit does not apply when you use those operations to create a console\n// URL. For more information, see Using IAM Roles (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html)\n// in the IAM User Guide.\n//\n// The temporary security credentials created by AssumeRole can be used to make\n// API calls to any AWS service with the following exception: You cannot call\n// the AWS STS GetFederationToken or GetSessionToken API operations.\n//\n// (Optional) You can pass inline or managed session policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)\n// to this operation. You can pass a single JSON policy document to use as an\n// inline session policy. You can also specify up to 10 managed policies to\n// use as managed session policies. The plain text that you use for both inline\n// and managed session policies shouldn't exceed 2048 characters. Passing policies\n// to this operation returns new temporary credentials. The resulting session's\n// permissions are the intersection of the role's identity-based policy and\n// the session policies. You can use the role's temporary credentials in subsequent\n// AWS API calls to access resources in the account that owns the role. You\n// cannot use session policies to grant more permissions than those allowed\n// by the identity-based policy of the role that is being assumed. For more\n// information, see Session Policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)\n// in the IAM User Guide.\n//\n// To assume a role from a different account, your AWS account must be trusted\n// by the role. The trust relationship is defined in the role's trust policy\n// when the role is created. That trust policy states which accounts are allowed\n// to delegate that access to users in the account.\n//\n// A user who wants to access a role in a different account must also have permissions\n// that are delegated from the user account administrator. The administrator\n// must attach a policy that allows the user to call AssumeRole for the ARN\n// of the role in the other account. If the user is in the same account as the\n// role, then you can do either of the following:\n//\n//    * Attach a policy to the user (identical to the previous user in a different\n//    account).\n//\n//    * Add the user as a principal directly in the role's trust policy.\n//\n// In this case, the trust policy acts as an IAM resource-based policy. Users\n// in the same account as the role do not need explicit permission to assume\n// the role. For more information about trust policies and resource-based policies,\n// see IAM Policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html)\n// in the IAM User Guide.\n//\n// Using MFA with AssumeRole\n//\n// (Optional) You can include multi-factor authentication (MFA) information\n// when you call AssumeRole. This is useful for cross-account scenarios to ensure\n// that the user that assumes the role has been authenticated with an AWS MFA\n// device. In that scenario, the trust policy of the role being assumed includes\n// a condition that tests for MFA authentication. If the caller does not include\n// valid MFA information, the request to assume the role is denied. The condition\n// in a trust policy that tests for MFA authentication might look like the following\n// example.\n//\n// \"Condition\": {\"Bool\": {\"aws:MultiFactorAuthPresent\": true}}\n//\n// For more information, see Configuring MFA-Protected API Access (https://docs.aws.amazon.com/IAM/latest/UserGuide/MFAProtectedAPI.html)\n// in the IAM User Guide guide.\n//\n// To use MFA with AssumeRole, you pass values for the SerialNumber and TokenCode\n// parameters. The SerialNumber value identifies the user's hardware or virtual\n// MFA device. The TokenCode is the time-based one-time password (TOTP) that\n// the MFA device produces.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for AWS Security Token Service's\n// API operation AssumeRole for usage and error information.\n//\n// Returned Error Codes:\n//   * ErrCodeMalformedPolicyDocumentException \"MalformedPolicyDocument\"\n//   The request was rejected because the policy document was malformed. The error\n//   message describes the specific error.\n//\n//   * ErrCodePackedPolicyTooLargeException \"PackedPolicyTooLarge\"\n//   The request was rejected because the policy document was too large. The error\n//   message describes how big the policy document is, in packed form, as a percentage\n//   of what the API allows.\n//\n//   * ErrCodeRegionDisabledException \"RegionDisabledException\"\n//   STS is not activated in the requested region for the account that is being\n//   asked to generate credentials. The account administrator must use the IAM\n//   console to activate STS in that region. For more information, see Activating\n//   and Deactivating AWS STS in an AWS Region (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html)\n//   in the IAM User Guide.\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/AssumeRole\nfunc (c *STS) AssumeRole(input *AssumeRoleInput) (*AssumeRoleOutput, error) {\n\treq, out := c.AssumeRoleRequest(input)\n\treturn out, req.Send()\n}\n\n// AssumeRoleWithContext is the same as AssumeRole with the addition of\n// the ability to pass a context and additional request options.\n//\n// See AssumeRole for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *STS) AssumeRoleWithContext(ctx aws.Context, input *AssumeRoleInput, opts ...request.Option) (*AssumeRoleOutput, error) {\n\treq, out := c.AssumeRoleRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opAssumeRoleWithSAML = \"AssumeRoleWithSAML\"\n\n// AssumeRoleWithSAMLRequest generates a \"aws/request.Request\" representing the\n// client's request for the AssumeRoleWithSAML operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See AssumeRoleWithSAML for more information on using the AssumeRoleWithSAML\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the AssumeRoleWithSAMLRequest method.\n//    req, resp := client.AssumeRoleWithSAMLRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/AssumeRoleWithSAML\nfunc (c *STS) AssumeRoleWithSAMLRequest(input *AssumeRoleWithSAMLInput) (req *request.Request, output *AssumeRoleWithSAMLOutput) {\n\top := &request.Operation{\n\t\tName:       opAssumeRoleWithSAML,\n\t\tHTTPMethod: \"POST\",\n\t\tHTTPPath:   \"/\",\n\t}\n\n\tif input == nil {\n\t\tinput = &AssumeRoleWithSAMLInput{}\n\t}\n\n\toutput = &AssumeRoleWithSAMLOutput{}\n\treq = c.newRequest(op, input, output)\n\treq.Config.Credentials = credentials.AnonymousCredentials\n\treturn\n}\n\n// AssumeRoleWithSAML API operation for AWS Security Token Service.\n//\n// Returns a set of temporary security credentials for users who have been authenticated\n// via a SAML authentication response. This operation provides a mechanism for\n// tying an enterprise identity store or directory to role-based AWS access\n// without user-specific credentials or configuration. For a comparison of AssumeRoleWithSAML\n// with the other API operations that produce temporary credentials, see Requesting\n// Temporary Security Credentials (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html)\n// and Comparing the AWS STS API operations (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#stsapi_comparison)\n// in the IAM User Guide.\n//\n// The temporary security credentials returned by this operation consist of\n// an access key ID, a secret access key, and a security token. Applications\n// can use these temporary security credentials to sign calls to AWS services.\n//\n// By default, the temporary security credentials created by AssumeRoleWithSAML\n// last for one hour. However, you can use the optional DurationSeconds parameter\n// to specify the duration of your session. Your role session lasts for the\n// duration that you specify, or until the time specified in the SAML authentication\n// response's SessionNotOnOrAfter value, whichever is shorter. You can provide\n// a DurationSeconds value from 900 seconds (15 minutes) up to the maximum session\n// duration setting for the role. This setting can have a value from 1 hour\n// to 12 hours. To learn how to view the maximum value for your role, see View\n// the Maximum Session Duration Setting for a Role (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html#id_roles_use_view-role-max-session)\n// in the IAM User Guide. The maximum session duration limit applies when you\n// use the AssumeRole* API operations or the assume-role* CLI commands. However\n// the limit does not apply when you use those operations to create a console\n// URL. For more information, see Using IAM Roles (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html)\n// in the IAM User Guide.\n//\n// The temporary security credentials created by AssumeRoleWithSAML can be used\n// to make API calls to any AWS service with the following exception: you cannot\n// call the STS GetFederationToken or GetSessionToken API operations.\n//\n// (Optional) You can pass inline or managed session policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)\n// to this operation. You can pass a single JSON policy document to use as an\n// inline session policy. You can also specify up to 10 managed policies to\n// use as managed session policies. The plain text that you use for both inline\n// and managed session policies shouldn't exceed 2048 characters. Passing policies\n// to this operation returns new temporary credentials. The resulting session's\n// permissions are the intersection of the role's identity-based policy and\n// the session policies. You can use the role's temporary credentials in subsequent\n// AWS API calls to access resources in the account that owns the role. You\n// cannot use session policies to grant more permissions than those allowed\n// by the identity-based policy of the role that is being assumed. For more\n// information, see Session Policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)\n// in the IAM User Guide.\n//\n// Before your application can call AssumeRoleWithSAML, you must configure your\n// SAML identity provider (IdP) to issue the claims required by AWS. Additionally,\n// you must use AWS Identity and Access Management (IAM) to create a SAML provider\n// entity in your AWS account that represents your identity provider. You must\n// also create an IAM role that specifies this SAML provider in its trust policy.\n//\n// Calling AssumeRoleWithSAML does not require the use of AWS security credentials.\n// The identity of the caller is validated by using keys in the metadata document\n// that is uploaded for the SAML provider entity for your identity provider.\n//\n// Calling AssumeRoleWithSAML can result in an entry in your AWS CloudTrail\n// logs. The entry includes the value in the NameID element of the SAML assertion.\n// We recommend that you use a NameIDType that is not associated with any personally\n// identifiable information (PII). For example, you could instead use the Persistent\n// Identifier (urn:oasis:names:tc:SAML:2.0:nameid-format:persistent).\n//\n// For more information, see the following resources:\n//\n//    * About SAML 2.0-based Federation (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_saml.html)\n//    in the IAM User Guide.\n//\n//    * Creating SAML Identity Providers (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_saml.html)\n//    in the IAM User Guide.\n//\n//    * Configuring a Relying Party and Claims (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_saml_relying-party.html)\n//    in the IAM User Guide.\n//\n//    * Creating a Role for SAML 2.0 Federation (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_saml.html)\n//    in the IAM User Guide.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for AWS Security Token Service's\n// API operation AssumeRoleWithSAML for usage and error information.\n//\n// Returned Error Codes:\n//   * ErrCodeMalformedPolicyDocumentException \"MalformedPolicyDocument\"\n//   The request was rejected because the policy document was malformed. The error\n//   message describes the specific error.\n//\n//   * ErrCodePackedPolicyTooLargeException \"PackedPolicyTooLarge\"\n//   The request was rejected because the policy document was too large. The error\n//   message describes how big the policy document is, in packed form, as a percentage\n//   of what the API allows.\n//\n//   * ErrCodeIDPRejectedClaimException \"IDPRejectedClaim\"\n//   The identity provider (IdP) reported that authentication failed. This might\n//   be because the claim is invalid.\n//\n//   If this error is returned for the AssumeRoleWithWebIdentity operation, it\n//   can also mean that the claim has expired or has been explicitly revoked.\n//\n//   * ErrCodeInvalidIdentityTokenException \"InvalidIdentityToken\"\n//   The web identity token that was passed could not be validated by AWS. Get\n//   a new identity token from the identity provider and then retry the request.\n//\n//   * ErrCodeExpiredTokenException \"ExpiredTokenException\"\n//   The web identity token that was passed is expired or is not valid. Get a\n//   new identity token from the identity provider and then retry the request.\n//\n//   * ErrCodeRegionDisabledException \"RegionDisabledException\"\n//   STS is not activated in the requested region for the account that is being\n//   asked to generate credentials. The account administrator must use the IAM\n//   console to activate STS in that region. For more information, see Activating\n//   and Deactivating AWS STS in an AWS Region (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html)\n//   in the IAM User Guide.\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/AssumeRoleWithSAML\nfunc (c *STS) AssumeRoleWithSAML(input *AssumeRoleWithSAMLInput) (*AssumeRoleWithSAMLOutput, error) {\n\treq, out := c.AssumeRoleWithSAMLRequest(input)\n\treturn out, req.Send()\n}\n\n// AssumeRoleWithSAMLWithContext is the same as AssumeRoleWithSAML with the addition of\n// the ability to pass a context and additional request options.\n//\n// See AssumeRoleWithSAML for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *STS) AssumeRoleWithSAMLWithContext(ctx aws.Context, input *AssumeRoleWithSAMLInput, opts ...request.Option) (*AssumeRoleWithSAMLOutput, error) {\n\treq, out := c.AssumeRoleWithSAMLRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opAssumeRoleWithWebIdentity = \"AssumeRoleWithWebIdentity\"\n\n// AssumeRoleWithWebIdentityRequest generates a \"aws/request.Request\" representing the\n// client's request for the AssumeRoleWithWebIdentity operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See AssumeRoleWithWebIdentity for more information on using the AssumeRoleWithWebIdentity\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the AssumeRoleWithWebIdentityRequest method.\n//    req, resp := client.AssumeRoleWithWebIdentityRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/AssumeRoleWithWebIdentity\nfunc (c *STS) AssumeRoleWithWebIdentityRequest(input *AssumeRoleWithWebIdentityInput) (req *request.Request, output *AssumeRoleWithWebIdentityOutput) {\n\top := &request.Operation{\n\t\tName:       opAssumeRoleWithWebIdentity,\n\t\tHTTPMethod: \"POST\",\n\t\tHTTPPath:   \"/\",\n\t}\n\n\tif input == nil {\n\t\tinput = &AssumeRoleWithWebIdentityInput{}\n\t}\n\n\toutput = &AssumeRoleWithWebIdentityOutput{}\n\treq = c.newRequest(op, input, output)\n\treq.Config.Credentials = credentials.AnonymousCredentials\n\treturn\n}\n\n// AssumeRoleWithWebIdentity API operation for AWS Security Token Service.\n//\n// Returns a set of temporary security credentials for users who have been authenticated\n// in a mobile or web application with a web identity provider. Example providers\n// include Amazon Cognito, Login with Amazon, Facebook, Google, or any OpenID\n// Connect-compatible identity provider.\n//\n// For mobile applications, we recommend that you use Amazon Cognito. You can\n// use Amazon Cognito with the AWS SDK for iOS Developer Guide (http://aws.amazon.com/sdkforios/)\n// and the AWS SDK for Android Developer Guide (http://aws.amazon.com/sdkforandroid/)\n// to uniquely identify a user. You can also supply the user with a consistent\n// identity throughout the lifetime of an application.\n//\n// To learn more about Amazon Cognito, see Amazon Cognito Overview (https://docs.aws.amazon.com/mobile/sdkforandroid/developerguide/cognito-auth.html#d0e840)\n// in AWS SDK for Android Developer Guide and Amazon Cognito Overview (https://docs.aws.amazon.com/mobile/sdkforios/developerguide/cognito-auth.html#d0e664)\n// in the AWS SDK for iOS Developer Guide.\n//\n// Calling AssumeRoleWithWebIdentity does not require the use of AWS security\n// credentials. Therefore, you can distribute an application (for example, on\n// mobile devices) that requests temporary security credentials without including\n// long-term AWS credentials in the application. You also don't need to deploy\n// server-based proxy services that use long-term AWS credentials. Instead,\n// the identity of the caller is validated by using a token from the web identity\n// provider. For a comparison of AssumeRoleWithWebIdentity with the other API\n// operations that produce temporary credentials, see Requesting Temporary Security\n// Credentials (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html)\n// and Comparing the AWS STS API operations (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#stsapi_comparison)\n// in the IAM User Guide.\n//\n// The temporary security credentials returned by this API consist of an access\n// key ID, a secret access key, and a security token. Applications can use these\n// temporary security credentials to sign calls to AWS service API operations.\n//\n// By default, the temporary security credentials created by AssumeRoleWithWebIdentity\n// last for one hour. However, you can use the optional DurationSeconds parameter\n// to specify the duration of your session. You can provide a value from 900\n// seconds (15 minutes) up to the maximum session duration setting for the role.\n// This setting can have a value from 1 hour to 12 hours. To learn how to view\n// the maximum value for your role, see View the Maximum Session Duration Setting\n// for a Role (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html#id_roles_use_view-role-max-session)\n// in the IAM User Guide. The maximum session duration limit applies when you\n// use the AssumeRole* API operations or the assume-role* CLI commands. However\n// the limit does not apply when you use those operations to create a console\n// URL. For more information, see Using IAM Roles (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html)\n// in the IAM User Guide.\n//\n// The temporary security credentials created by AssumeRoleWithWebIdentity can\n// be used to make API calls to any AWS service with the following exception:\n// you cannot call the STS GetFederationToken or GetSessionToken API operations.\n//\n// (Optional) You can pass inline or managed session policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)\n// to this operation. You can pass a single JSON policy document to use as an\n// inline session policy. You can also specify up to 10 managed policies to\n// use as managed session policies. The plain text that you use for both inline\n// and managed session policies shouldn't exceed 2048 characters. Passing policies\n// to this operation returns new temporary credentials. The resulting session's\n// permissions are the intersection of the role's identity-based policy and\n// the session policies. You can use the role's temporary credentials in subsequent\n// AWS API calls to access resources in the account that owns the role. You\n// cannot use session policies to grant more permissions than those allowed\n// by the identity-based policy of the role that is being assumed. For more\n// information, see Session Policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)\n// in the IAM User Guide.\n//\n// Before your application can call AssumeRoleWithWebIdentity, you must have\n// an identity token from a supported identity provider and create a role that\n// the application can assume. The role that your application assumes must trust\n// the identity provider that is associated with the identity token. In other\n// words, the identity provider must be specified in the role's trust policy.\n//\n// Calling AssumeRoleWithWebIdentity can result in an entry in your AWS CloudTrail\n// logs. The entry includes the Subject (http://openid.net/specs/openid-connect-core-1_0.html#Claims)\n// of the provided Web Identity Token. We recommend that you avoid using any\n// personally identifiable information (PII) in this field. For example, you\n// could instead use a GUID or a pairwise identifier, as suggested in the OIDC\n// specification (http://openid.net/specs/openid-connect-core-1_0.html#SubjectIDTypes).\n//\n// For more information about how to use web identity federation and the AssumeRoleWithWebIdentity\n// API, see the following resources:\n//\n//    * Using Web Identity Federation API Operations for Mobile Apps (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_oidc_manual.html)\n//    and Federation Through a Web-based Identity Provider (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#api_assumerolewithwebidentity).\n//\n//    * Web Identity Federation Playground (https://web-identity-federation-playground.s3.amazonaws.com/index.html).\n//    Walk through the process of authenticating through Login with Amazon,\n//    Facebook, or Google, getting temporary security credentials, and then\n//    using those credentials to make a request to AWS.\n//\n//    * AWS SDK for iOS Developer Guide (http://aws.amazon.com/sdkforios/) and\n//    AWS SDK for Android Developer Guide (http://aws.amazon.com/sdkforandroid/).\n//    These toolkits contain sample apps that show how to invoke the identity\n//    providers, and then how to use the information from these providers to\n//    get and use temporary security credentials.\n//\n//    * Web Identity Federation with Mobile Applications (http://aws.amazon.com/articles/web-identity-federation-with-mobile-applications).\n//    This article discusses web identity federation and shows an example of\n//    how to use web identity federation to get access to content in Amazon\n//    S3.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for AWS Security Token Service's\n// API operation AssumeRoleWithWebIdentity for usage and error information.\n//\n// Returned Error Codes:\n//   * ErrCodeMalformedPolicyDocumentException \"MalformedPolicyDocument\"\n//   The request was rejected because the policy document was malformed. The error\n//   message describes the specific error.\n//\n//   * ErrCodePackedPolicyTooLargeException \"PackedPolicyTooLarge\"\n//   The request was rejected because the policy document was too large. The error\n//   message describes how big the policy document is, in packed form, as a percentage\n//   of what the API allows.\n//\n//   * ErrCodeIDPRejectedClaimException \"IDPRejectedClaim\"\n//   The identity provider (IdP) reported that authentication failed. This might\n//   be because the claim is invalid.\n//\n//   If this error is returned for the AssumeRoleWithWebIdentity operation, it\n//   can also mean that the claim has expired or has been explicitly revoked.\n//\n//   * ErrCodeIDPCommunicationErrorException \"IDPCommunicationError\"\n//   The request could not be fulfilled because the non-AWS identity provider\n//   (IDP) that was asked to verify the incoming identity token could not be reached.\n//   This is often a transient error caused by network conditions. Retry the request\n//   a limited number of times so that you don't exceed the request rate. If the\n//   error persists, the non-AWS identity provider might be down or not responding.\n//\n//   * ErrCodeInvalidIdentityTokenException \"InvalidIdentityToken\"\n//   The web identity token that was passed could not be validated by AWS. Get\n//   a new identity token from the identity provider and then retry the request.\n//\n//   * ErrCodeExpiredTokenException \"ExpiredTokenException\"\n//   The web identity token that was passed is expired or is not valid. Get a\n//   new identity token from the identity provider and then retry the request.\n//\n//   * ErrCodeRegionDisabledException \"RegionDisabledException\"\n//   STS is not activated in the requested region for the account that is being\n//   asked to generate credentials. The account administrator must use the IAM\n//   console to activate STS in that region. For more information, see Activating\n//   and Deactivating AWS STS in an AWS Region (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html)\n//   in the IAM User Guide.\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/AssumeRoleWithWebIdentity\nfunc (c *STS) AssumeRoleWithWebIdentity(input *AssumeRoleWithWebIdentityInput) (*AssumeRoleWithWebIdentityOutput, error) {\n\treq, out := c.AssumeRoleWithWebIdentityRequest(input)\n\treturn out, req.Send()\n}\n\n// AssumeRoleWithWebIdentityWithContext is the same as AssumeRoleWithWebIdentity with the addition of\n// the ability to pass a context and additional request options.\n//\n// See AssumeRoleWithWebIdentity for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *STS) AssumeRoleWithWebIdentityWithContext(ctx aws.Context, input *AssumeRoleWithWebIdentityInput, opts ...request.Option) (*AssumeRoleWithWebIdentityOutput, error) {\n\treq, out := c.AssumeRoleWithWebIdentityRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opDecodeAuthorizationMessage = \"DecodeAuthorizationMessage\"\n\n// DecodeAuthorizationMessageRequest generates a \"aws/request.Request\" representing the\n// client's request for the DecodeAuthorizationMessage operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See DecodeAuthorizationMessage for more information on using the DecodeAuthorizationMessage\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the DecodeAuthorizationMessageRequest method.\n//    req, resp := client.DecodeAuthorizationMessageRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/DecodeAuthorizationMessage\nfunc (c *STS) DecodeAuthorizationMessageRequest(input *DecodeAuthorizationMessageInput) (req *request.Request, output *DecodeAuthorizationMessageOutput) {\n\top := &request.Operation{\n\t\tName:       opDecodeAuthorizationMessage,\n\t\tHTTPMethod: \"POST\",\n\t\tHTTPPath:   \"/\",\n\t}\n\n\tif input == nil {\n\t\tinput = &DecodeAuthorizationMessageInput{}\n\t}\n\n\toutput = &DecodeAuthorizationMessageOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// DecodeAuthorizationMessage API operation for AWS Security Token Service.\n//\n// Decodes additional information about the authorization status of a request\n// from an encoded message returned in response to an AWS request.\n//\n// For example, if a user is not authorized to perform an operation that he\n// or she has requested, the request returns a Client.UnauthorizedOperation\n// response (an HTTP 403 response). Some AWS operations additionally return\n// an encoded message that can provide details about this authorization failure.\n//\n// Only certain AWS operations return an encoded authorization message. The\n// documentation for an individual operation indicates whether that operation\n// returns an encoded message in addition to returning an HTTP code.\n//\n// The message is encoded because the details of the authorization status can\n// constitute privileged information that the user who requested the operation\n// should not see. To decode an authorization status message, a user must be\n// granted permissions via an IAM policy to request the DecodeAuthorizationMessage\n// (sts:DecodeAuthorizationMessage) action.\n//\n// The decoded message includes the following type of information:\n//\n//    * Whether the request was denied due to an explicit deny or due to the\n//    absence of an explicit allow. For more information, see Determining Whether\n//    a Request is Allowed or Denied (https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html#policy-eval-denyallow)\n//    in the IAM User Guide.\n//\n//    * The principal who made the request.\n//\n//    * The requested action.\n//\n//    * The requested resource.\n//\n//    * The values of condition keys in the context of the user's request.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for AWS Security Token Service's\n// API operation DecodeAuthorizationMessage for usage and error information.\n//\n// Returned Error Codes:\n//   * ErrCodeInvalidAuthorizationMessageException \"InvalidAuthorizationMessageException\"\n//   The error returned if the message passed to DecodeAuthorizationMessage was\n//   invalid. This can happen if the token contains invalid characters, such as\n//   linebreaks.\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/DecodeAuthorizationMessage\nfunc (c *STS) DecodeAuthorizationMessage(input *DecodeAuthorizationMessageInput) (*DecodeAuthorizationMessageOutput, error) {\n\treq, out := c.DecodeAuthorizationMessageRequest(input)\n\treturn out, req.Send()\n}\n\n// DecodeAuthorizationMessageWithContext is the same as DecodeAuthorizationMessage with the addition of\n// the ability to pass a context and additional request options.\n//\n// See DecodeAuthorizationMessage for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *STS) DecodeAuthorizationMessageWithContext(ctx aws.Context, input *DecodeAuthorizationMessageInput, opts ...request.Option) (*DecodeAuthorizationMessageOutput, error) {\n\treq, out := c.DecodeAuthorizationMessageRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opGetCallerIdentity = \"GetCallerIdentity\"\n\n// GetCallerIdentityRequest generates a \"aws/request.Request\" representing the\n// client's request for the GetCallerIdentity operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See GetCallerIdentity for more information on using the GetCallerIdentity\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the GetCallerIdentityRequest method.\n//    req, resp := client.GetCallerIdentityRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/GetCallerIdentity\nfunc (c *STS) GetCallerIdentityRequest(input *GetCallerIdentityInput) (req *request.Request, output *GetCallerIdentityOutput) {\n\top := &request.Operation{\n\t\tName:       opGetCallerIdentity,\n\t\tHTTPMethod: \"POST\",\n\t\tHTTPPath:   \"/\",\n\t}\n\n\tif input == nil {\n\t\tinput = &GetCallerIdentityInput{}\n\t}\n\n\toutput = &GetCallerIdentityOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// GetCallerIdentity API operation for AWS Security Token Service.\n//\n// Returns details about the IAM identity whose credentials are used to call\n// the API.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for AWS Security Token Service's\n// API operation GetCallerIdentity for usage and error information.\n// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/GetCallerIdentity\nfunc (c *STS) GetCallerIdentity(input *GetCallerIdentityInput) (*GetCallerIdentityOutput, error) {\n\treq, out := c.GetCallerIdentityRequest(input)\n\treturn out, req.Send()\n}\n\n// GetCallerIdentityWithContext is the same as GetCallerIdentity with the addition of\n// the ability to pass a context and additional request options.\n//\n// See GetCallerIdentity for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *STS) GetCallerIdentityWithContext(ctx aws.Context, input *GetCallerIdentityInput, opts ...request.Option) (*GetCallerIdentityOutput, error) {\n\treq, out := c.GetCallerIdentityRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opGetFederationToken = \"GetFederationToken\"\n\n// GetFederationTokenRequest generates a \"aws/request.Request\" representing the\n// client's request for the GetFederationToken operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See GetFederationToken for more information on using the GetFederationToken\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the GetFederationTokenRequest method.\n//    req, resp := client.GetFederationTokenRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/GetFederationToken\nfunc (c *STS) GetFederationTokenRequest(input *GetFederationTokenInput) (req *request.Request, output *GetFederationTokenOutput) {\n\top := &request.Operation{\n\t\tName:       opGetFederationToken,\n\t\tHTTPMethod: \"POST\",\n\t\tHTTPPath:   \"/\",\n\t}\n\n\tif input == nil {\n\t\tinput = &GetFederationTokenInput{}\n\t}\n\n\toutput = &GetFederationTokenOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// GetFederationToken API operation for AWS Security Token Service.\n//\n// Returns a set of temporary security credentials (consisting of an access\n// key ID, a secret access key, and a security token) for a federated user.\n// A typical use is in a proxy application that gets temporary security credentials\n// on behalf of distributed applications inside a corporate network. You must\n// call the GetFederationToken operation using the long-term security credentials\n// of an IAM user. As a result, this call is appropriate in contexts where those\n// credentials can be safely stored, usually in a server-based application.\n// For a comparison of GetFederationToken with the other API operations that\n// produce temporary credentials, see Requesting Temporary Security Credentials\n// (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html)\n// and Comparing the AWS STS API operations (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#stsapi_comparison)\n// in the IAM User Guide.\n//\n// You can create a mobile-based or browser-based app that can authenticate\n// users using a web identity provider like Login with Amazon, Facebook, Google,\n// or an OpenID Connect-compatible identity provider. In this case, we recommend\n// that you use Amazon Cognito (http://aws.amazon.com/cognito/) or AssumeRoleWithWebIdentity.\n// For more information, see Federation Through a Web-based Identity Provider\n// (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#api_assumerolewithwebidentity).\n//\n// You can also call GetFederationToken using the security credentials of an\n// AWS account root user, but we do not recommend it. Instead, we recommend\n// that you create an IAM user for the purpose of the proxy application. Then\n// attach a policy to the IAM user that limits federated users to only the actions\n// and resources that they need to access. For more information, see IAM Best\n// Practices (https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)\n// in the IAM User Guide.\n//\n// The temporary credentials are valid for the specified duration, from 900\n// seconds (15 minutes) up to a maximum of 129,600 seconds (36 hours). The default\n// is 43,200 seconds (12 hours). Temporary credentials that are obtained by\n// using AWS account root user credentials have a maximum duration of 3,600\n// seconds (1 hour).\n//\n// The temporary security credentials created by GetFederationToken can be used\n// to make API calls to any AWS service with the following exceptions:\n//\n//    * You cannot use these credentials to call any IAM API operations.\n//\n//    * You cannot call any STS API operations except GetCallerIdentity.\n//\n// Permissions\n//\n// You must pass an inline or managed session policy (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)\n// to this operation. You can pass a single JSON policy document to use as an\n// inline session policy. You can also specify up to 10 managed policies to\n// use as managed session policies. The plain text that you use for both inline\n// and managed session policies shouldn't exceed 2048 characters.\n//\n// Though the session policy parameters are optional, if you do not pass a policy,\n// then the resulting federated user session has no permissions. The only exception\n// is when the credentials are used to access a resource that has a resource-based\n// policy that specifically references the federated user session in the Principal\n// element of the policy. When you pass session policies, the session permissions\n// are the intersection of the IAM user policies and the session policies that\n// you pass. This gives you a way to further restrict the permissions for a\n// federated user. You cannot use session policies to grant more permissions\n// than those that are defined in the permissions policy of the IAM user. For\n// more information, see Session Policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)\n// in the IAM User Guide. For information about using GetFederationToken to\n// create temporary security credentials, see GetFederationToken—Federation\n// Through a Custom Identity Broker (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#api_getfederationtoken).\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for AWS Security Token Service's\n// API operation GetFederationToken for usage and error information.\n//\n// Returned Error Codes:\n//   * ErrCodeMalformedPolicyDocumentException \"MalformedPolicyDocument\"\n//   The request was rejected because the policy document was malformed. The error\n//   message describes the specific error.\n//\n//   * ErrCodePackedPolicyTooLargeException \"PackedPolicyTooLarge\"\n//   The request was rejected because the policy document was too large. The error\n//   message describes how big the policy document is, in packed form, as a percentage\n//   of what the API allows.\n//\n//   * ErrCodeRegionDisabledException \"RegionDisabledException\"\n//   STS is not activated in the requested region for the account that is being\n//   asked to generate credentials. The account administrator must use the IAM\n//   console to activate STS in that region. For more information, see Activating\n//   and Deactivating AWS STS in an AWS Region (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html)\n//   in the IAM User Guide.\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/GetFederationToken\nfunc (c *STS) GetFederationToken(input *GetFederationTokenInput) (*GetFederationTokenOutput, error) {\n\treq, out := c.GetFederationTokenRequest(input)\n\treturn out, req.Send()\n}\n\n// GetFederationTokenWithContext is the same as GetFederationToken with the addition of\n// the ability to pass a context and additional request options.\n//\n// See GetFederationToken for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *STS) GetFederationTokenWithContext(ctx aws.Context, input *GetFederationTokenInput, opts ...request.Option) (*GetFederationTokenOutput, error) {\n\treq, out := c.GetFederationTokenRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\nconst opGetSessionToken = \"GetSessionToken\"\n\n// GetSessionTokenRequest generates a \"aws/request.Request\" representing the\n// client's request for the GetSessionToken operation. The \"output\" return\n// value will be populated with the request's response once the request completes\n// successfully.\n//\n// Use \"Send\" method on the returned Request to send the API call to the service.\n// the \"output\" return value is not valid until after Send returns without error.\n//\n// See GetSessionToken for more information on using the GetSessionToken\n// API call, and error handling.\n//\n// This method is useful when you want to inject custom logic or configuration\n// into the SDK's request lifecycle. Such as custom headers, or retry logic.\n//\n//\n//    // Example sending a request using the GetSessionTokenRequest method.\n//    req, resp := client.GetSessionTokenRequest(params)\n//\n//    err := req.Send()\n//    if err == nil { // resp is now filled\n//        fmt.Println(resp)\n//    }\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/GetSessionToken\nfunc (c *STS) GetSessionTokenRequest(input *GetSessionTokenInput) (req *request.Request, output *GetSessionTokenOutput) {\n\top := &request.Operation{\n\t\tName:       opGetSessionToken,\n\t\tHTTPMethod: \"POST\",\n\t\tHTTPPath:   \"/\",\n\t}\n\n\tif input == nil {\n\t\tinput = &GetSessionTokenInput{}\n\t}\n\n\toutput = &GetSessionTokenOutput{}\n\treq = c.newRequest(op, input, output)\n\treturn\n}\n\n// GetSessionToken API operation for AWS Security Token Service.\n//\n// Returns a set of temporary credentials for an AWS account or IAM user. The\n// credentials consist of an access key ID, a secret access key, and a security\n// token. Typically, you use GetSessionToken if you want to use MFA to protect\n// programmatic calls to specific AWS API operations like Amazon EC2 StopInstances.\n// MFA-enabled IAM users would need to call GetSessionToken and submit an MFA\n// code that is associated with their MFA device. Using the temporary security\n// credentials that are returned from the call, IAM users can then make programmatic\n// calls to API operations that require MFA authentication. If you do not supply\n// a correct MFA code, then the API returns an access denied error. For a comparison\n// of GetSessionToken with the other API operations that produce temporary credentials,\n// see Requesting Temporary Security Credentials (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html)\n// and Comparing the AWS STS API operations (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#stsapi_comparison)\n// in the IAM User Guide.\n//\n// The GetSessionToken operation must be called by using the long-term AWS security\n// credentials of the AWS account root user or an IAM user. Credentials that\n// are created by IAM users are valid for the duration that you specify. This\n// duration can range from 900 seconds (15 minutes) up to a maximum of 129,600\n// seconds (36 hours), with a default of 43,200 seconds (12 hours). Credentials\n// based on account credentials can range from 900 seconds (15 minutes) up to\n// 3,600 seconds (1 hour), with a default of 1 hour.\n//\n// The temporary security credentials created by GetSessionToken can be used\n// to make API calls to any AWS service with the following exceptions:\n//\n//    * You cannot call any IAM API operations unless MFA authentication information\n//    is included in the request.\n//\n//    * You cannot call any STS API except AssumeRole or GetCallerIdentity.\n//\n// We recommend that you do not call GetSessionToken with AWS account root user\n// credentials. Instead, follow our best practices (https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#create-iam-users)\n// by creating one or more IAM users, giving them the necessary permissions,\n// and using IAM users for everyday interaction with AWS.\n//\n// The credentials that are returned by GetSessionToken are based on permissions\n// associated with the user whose credentials were used to call the operation.\n// If GetSessionToken is called using AWS account root user credentials, the\n// temporary credentials have root user permissions. Similarly, if GetSessionToken\n// is called using the credentials of an IAM user, the temporary credentials\n// have the same permissions as the IAM user.\n//\n// For more information about using GetSessionToken to create temporary credentials,\n// go to Temporary Credentials for Users in Untrusted Environments (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#api_getsessiontoken)\n// in the IAM User Guide.\n//\n// Returns awserr.Error for service API and SDK errors. Use runtime type assertions\n// with awserr.Error's Code and Message methods to get detailed information about\n// the error.\n//\n// See the AWS API reference guide for AWS Security Token Service's\n// API operation GetSessionToken for usage and error information.\n//\n// Returned Error Codes:\n//   * ErrCodeRegionDisabledException \"RegionDisabledException\"\n//   STS is not activated in the requested region for the account that is being\n//   asked to generate credentials. The account administrator must use the IAM\n//   console to activate STS in that region. For more information, see Activating\n//   and Deactivating AWS STS in an AWS Region (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html)\n//   in the IAM User Guide.\n//\n// See also, https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15/GetSessionToken\nfunc (c *STS) GetSessionToken(input *GetSessionTokenInput) (*GetSessionTokenOutput, error) {\n\treq, out := c.GetSessionTokenRequest(input)\n\treturn out, req.Send()\n}\n\n// GetSessionTokenWithContext is the same as GetSessionToken with the addition of\n// the ability to pass a context and additional request options.\n//\n// See GetSessionToken for details on how to use this API operation.\n//\n// The context must be non-nil and will be used for request cancellation. If\n// the context is nil a panic will occur. In the future the SDK may create\n// sub-contexts for http.Requests. See https://golang.org/pkg/context/\n// for more information on using Contexts.\nfunc (c *STS) GetSessionTokenWithContext(ctx aws.Context, input *GetSessionTokenInput, opts ...request.Option) (*GetSessionTokenOutput, error) {\n\treq, out := c.GetSessionTokenRequest(input)\n\treq.SetContext(ctx)\n\treq.ApplyOptions(opts...)\n\treturn out, req.Send()\n}\n\ntype AssumeRoleInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The duration, in seconds, of the role session. The value can range from 900\n\t// seconds (15 minutes) up to the maximum session duration setting for the role.\n\t// This setting can have a value from 1 hour to 12 hours. If you specify a value\n\t// higher than this setting, the operation fails. For example, if you specify\n\t// a session duration of 12 hours, but your administrator set the maximum session\n\t// duration to 6 hours, your operation fails. To learn how to view the maximum\n\t// value for your role, see View the Maximum Session Duration Setting for a\n\t// Role (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html#id_roles_use_view-role-max-session)\n\t// in the IAM User Guide.\n\t//\n\t// By default, the value is set to 3600 seconds.\n\t//\n\t// The DurationSeconds parameter is separate from the duration of a console\n\t// session that you might request using the returned credentials. The request\n\t// to the federation endpoint for a console sign-in token takes a SessionDuration\n\t// parameter that specifies the maximum length of the console session. For more\n\t// information, see Creating a URL that Enables Federated Users to Access the\n\t// AWS Management Console (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_enable-console-custom-url.html)\n\t// in the IAM User Guide.\n\tDurationSeconds *int64 `min:\"900\" type:\"integer\"`\n\n\t// A unique identifier that might be required when you assume a role in another\n\t// account. If the administrator of the account to which the role belongs provided\n\t// you with an external ID, then provide that value in the ExternalId parameter.\n\t// This value can be any string, such as a passphrase or account number. A cross-account\n\t// role is usually set up to trust everyone in an account. Therefore, the administrator\n\t// of the trusting account might send an external ID to the administrator of\n\t// the trusted account. That way, only someone with the ID can assume the role,\n\t// rather than everyone in the account. For more information about the external\n\t// ID, see How to Use an External ID When Granting Access to Your AWS Resources\n\t// to a Third Party (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user_externalid.html)\n\t// in the IAM User Guide.\n\t//\n\t// The regex used to validate this parameter is a string of characters consisting\n\t// of upper- and lower-case alphanumeric characters with no spaces. You can\n\t// also include underscores or any of the following characters: =,.@:/-\n\tExternalId *string `min:\"2\" type:\"string\"`\n\n\t// An IAM policy in JSON format that you want to use as an inline session policy.\n\t//\n\t// This parameter is optional. Passing policies to this operation returns new\n\t// temporary credentials. The resulting session's permissions are the intersection\n\t// of the role's identity-based policy and the session policies. You can use\n\t// the role's temporary credentials in subsequent AWS API calls to access resources\n\t// in the account that owns the role. You cannot use session policies to grant\n\t// more permissions than those allowed by the identity-based policy of the role\n\t// that is being assumed. For more information, see Session Policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)\n\t// in the IAM User Guide.\n\t//\n\t// The plain text that you use for both inline and managed session policies\n\t// shouldn't exceed 2048 characters. The JSON policy characters can be any ASCII\n\t// character from the space character to the end of the valid character list\n\t// (\\u0020 through \\u00FF). It can also include the tab (\\u0009), linefeed (\\u000A),\n\t// and carriage return (\\u000D) characters.\n\t//\n\t// The characters in this parameter count towards the 2048 character session\n\t// policy guideline. However, an AWS conversion compresses the session policies\n\t// into a packed binary format that has a separate limit. This is the enforced\n\t// limit. The PackedPolicySize response element indicates by percentage how\n\t// close the policy is to the upper size limit.\n\tPolicy *string `min:\"1\" type:\"string\"`\n\n\t// The Amazon Resource Names (ARNs) of the IAM managed policies that you want\n\t// to use as managed session policies. The policies must exist in the same account\n\t// as the role.\n\t//\n\t// This parameter is optional. You can provide up to 10 managed policy ARNs.\n\t// However, the plain text that you use for both inline and managed session\n\t// policies shouldn't exceed 2048 characters. For more information about ARNs,\n\t// see Amazon Resource Names (ARNs) and AWS Service Namespaces (general/latest/gr/aws-arns-and-namespaces.html)\n\t// in the AWS General Reference.\n\t//\n\t// The characters in this parameter count towards the 2048 character session\n\t// policy guideline. However, an AWS conversion compresses the session policies\n\t// into a packed binary format that has a separate limit. This is the enforced\n\t// limit. The PackedPolicySize response element indicates by percentage how\n\t// close the policy is to the upper size limit.\n\t//\n\t// Passing policies to this operation returns new temporary credentials. The\n\t// resulting session's permissions are the intersection of the role's identity-based\n\t// policy and the session policies. You can use the role's temporary credentials\n\t// in subsequent AWS API calls to access resources in the account that owns\n\t// the role. You cannot use session policies to grant more permissions than\n\t// those allowed by the identity-based policy of the role that is being assumed.\n\t// For more information, see Session Policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)\n\t// in the IAM User Guide.\n\tPolicyArns []*PolicyDescriptorType `type:\"list\"`\n\n\t// The Amazon Resource Name (ARN) of the role to assume.\n\t//\n\t// RoleArn is a required field\n\tRoleArn *string `min:\"20\" type:\"string\" required:\"true\"`\n\n\t// An identifier for the assumed role session.\n\t//\n\t// Use the role session name to uniquely identify a session when the same role\n\t// is assumed by different principals or for different reasons. In cross-account\n\t// scenarios, the role session name is visible to, and can be logged by the\n\t// account that owns the role. The role session name is also used in the ARN\n\t// of the assumed role principal. This means that subsequent cross-account API\n\t// requests that use the temporary security credentials will expose the role\n\t// session name to the external account in their AWS CloudTrail logs.\n\t//\n\t// The regex used to validate this parameter is a string of characters consisting\n\t// of upper- and lower-case alphanumeric characters with no spaces. You can\n\t// also include underscores or any of the following characters: =,.@-\n\t//\n\t// RoleSessionName is a required field\n\tRoleSessionName *string `min:\"2\" type:\"string\" required:\"true\"`\n\n\t// The identification number of the MFA device that is associated with the user\n\t// who is making the AssumeRole call. Specify this value if the trust policy\n\t// of the role being assumed includes a condition that requires MFA authentication.\n\t// The value is either the serial number for a hardware device (such as GAHT12345678)\n\t// or an Amazon Resource Name (ARN) for a virtual device (such as arn:aws:iam::123456789012:mfa/user).\n\t//\n\t// The regex used to validate this parameter is a string of characters consisting\n\t// of upper- and lower-case alphanumeric characters with no spaces. You can\n\t// also include underscores or any of the following characters: =,.@-\n\tSerialNumber *string `min:\"9\" type:\"string\"`\n\n\t// The value provided by the MFA device, if the trust policy of the role being\n\t// assumed requires MFA (that is, if the policy includes a condition that tests\n\t// for MFA). If the role being assumed requires MFA and if the TokenCode value\n\t// is missing or expired, the AssumeRole call returns an \"access denied\" error.\n\t//\n\t// The format for this parameter, as described by its regex pattern, is a sequence\n\t// of six numeric digits.\n\tTokenCode *string `min:\"6\" type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s AssumeRoleInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s AssumeRoleInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *AssumeRoleInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"AssumeRoleInput\"}\n\tif s.DurationSeconds != nil && *s.DurationSeconds < 900 {\n\t\tinvalidParams.Add(request.NewErrParamMinValue(\"DurationSeconds\", 900))\n\t}\n\tif s.ExternalId != nil && len(*s.ExternalId) < 2 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"ExternalId\", 2))\n\t}\n\tif s.Policy != nil && len(*s.Policy) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Policy\", 1))\n\t}\n\tif s.RoleArn == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"RoleArn\"))\n\t}\n\tif s.RoleArn != nil && len(*s.RoleArn) < 20 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"RoleArn\", 20))\n\t}\n\tif s.RoleSessionName == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"RoleSessionName\"))\n\t}\n\tif s.RoleSessionName != nil && len(*s.RoleSessionName) < 2 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"RoleSessionName\", 2))\n\t}\n\tif s.SerialNumber != nil && len(*s.SerialNumber) < 9 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"SerialNumber\", 9))\n\t}\n\tif s.TokenCode != nil && len(*s.TokenCode) < 6 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"TokenCode\", 6))\n\t}\n\tif s.PolicyArns != nil {\n\t\tfor i, v := range s.PolicyArns {\n\t\t\tif v == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif err := v.Validate(); err != nil {\n\t\t\t\tinvalidParams.AddNested(fmt.Sprintf(\"%s[%v]\", \"PolicyArns\", i), err.(request.ErrInvalidParams))\n\t\t\t}\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetDurationSeconds sets the DurationSeconds field's value.\nfunc (s *AssumeRoleInput) SetDurationSeconds(v int64) *AssumeRoleInput {\n\ts.DurationSeconds = &v\n\treturn s\n}\n\n// SetExternalId sets the ExternalId field's value.\nfunc (s *AssumeRoleInput) SetExternalId(v string) *AssumeRoleInput {\n\ts.ExternalId = &v\n\treturn s\n}\n\n// SetPolicy sets the Policy field's value.\nfunc (s *AssumeRoleInput) SetPolicy(v string) *AssumeRoleInput {\n\ts.Policy = &v\n\treturn s\n}\n\n// SetPolicyArns sets the PolicyArns field's value.\nfunc (s *AssumeRoleInput) SetPolicyArns(v []*PolicyDescriptorType) *AssumeRoleInput {\n\ts.PolicyArns = v\n\treturn s\n}\n\n// SetRoleArn sets the RoleArn field's value.\nfunc (s *AssumeRoleInput) SetRoleArn(v string) *AssumeRoleInput {\n\ts.RoleArn = &v\n\treturn s\n}\n\n// SetRoleSessionName sets the RoleSessionName field's value.\nfunc (s *AssumeRoleInput) SetRoleSessionName(v string) *AssumeRoleInput {\n\ts.RoleSessionName = &v\n\treturn s\n}\n\n// SetSerialNumber sets the SerialNumber field's value.\nfunc (s *AssumeRoleInput) SetSerialNumber(v string) *AssumeRoleInput {\n\ts.SerialNumber = &v\n\treturn s\n}\n\n// SetTokenCode sets the TokenCode field's value.\nfunc (s *AssumeRoleInput) SetTokenCode(v string) *AssumeRoleInput {\n\ts.TokenCode = &v\n\treturn s\n}\n\n// Contains the response to a successful AssumeRole request, including temporary\n// AWS credentials that can be used to make AWS requests.\ntype AssumeRoleOutput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The Amazon Resource Name (ARN) and the assumed role ID, which are identifiers\n\t// that you can use to refer to the resulting temporary security credentials.\n\t// For example, you can reference these credentials as a principal in a resource-based\n\t// policy by using the ARN or assumed role ID. The ARN and ID include the RoleSessionName\n\t// that you specified when you called AssumeRole.\n\tAssumedRoleUser *AssumedRoleUser `type:\"structure\"`\n\n\t// The temporary security credentials, which include an access key ID, a secret\n\t// access key, and a security (or session) token.\n\t//\n\t// The size of the security token that STS API operations return is not fixed.\n\t// We strongly recommend that you make no assumptions about the maximum size.\n\tCredentials *Credentials `type:\"structure\"`\n\n\t// A percentage value that indicates the size of the policy in packed form.\n\t// The service rejects any policy with a packed size greater than 100 percent,\n\t// which means the policy exceeded the allowed space.\n\tPackedPolicySize *int64 `type:\"integer\"`\n}\n\n// String returns the string representation\nfunc (s AssumeRoleOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s AssumeRoleOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetAssumedRoleUser sets the AssumedRoleUser field's value.\nfunc (s *AssumeRoleOutput) SetAssumedRoleUser(v *AssumedRoleUser) *AssumeRoleOutput {\n\ts.AssumedRoleUser = v\n\treturn s\n}\n\n// SetCredentials sets the Credentials field's value.\nfunc (s *AssumeRoleOutput) SetCredentials(v *Credentials) *AssumeRoleOutput {\n\ts.Credentials = v\n\treturn s\n}\n\n// SetPackedPolicySize sets the PackedPolicySize field's value.\nfunc (s *AssumeRoleOutput) SetPackedPolicySize(v int64) *AssumeRoleOutput {\n\ts.PackedPolicySize = &v\n\treturn s\n}\n\ntype AssumeRoleWithSAMLInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The duration, in seconds, of the role session. Your role session lasts for\n\t// the duration that you specify for the DurationSeconds parameter, or until\n\t// the time specified in the SAML authentication response's SessionNotOnOrAfter\n\t// value, whichever is shorter. You can provide a DurationSeconds value from\n\t// 900 seconds (15 minutes) up to the maximum session duration setting for the\n\t// role. This setting can have a value from 1 hour to 12 hours. If you specify\n\t// a value higher than this setting, the operation fails. For example, if you\n\t// specify a session duration of 12 hours, but your administrator set the maximum\n\t// session duration to 6 hours, your operation fails. To learn how to view the\n\t// maximum value for your role, see View the Maximum Session Duration Setting\n\t// for a Role (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html#id_roles_use_view-role-max-session)\n\t// in the IAM User Guide.\n\t//\n\t// By default, the value is set to 3600 seconds.\n\t//\n\t// The DurationSeconds parameter is separate from the duration of a console\n\t// session that you might request using the returned credentials. The request\n\t// to the federation endpoint for a console sign-in token takes a SessionDuration\n\t// parameter that specifies the maximum length of the console session. For more\n\t// information, see Creating a URL that Enables Federated Users to Access the\n\t// AWS Management Console (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_enable-console-custom-url.html)\n\t// in the IAM User Guide.\n\tDurationSeconds *int64 `min:\"900\" type:\"integer\"`\n\n\t// An IAM policy in JSON format that you want to use as an inline session policy.\n\t//\n\t// This parameter is optional. Passing policies to this operation returns new\n\t// temporary credentials. The resulting session's permissions are the intersection\n\t// of the role's identity-based policy and the session policies. You can use\n\t// the role's temporary credentials in subsequent AWS API calls to access resources\n\t// in the account that owns the role. You cannot use session policies to grant\n\t// more permissions than those allowed by the identity-based policy of the role\n\t// that is being assumed. For more information, see Session Policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)\n\t// in the IAM User Guide.\n\t//\n\t// The plain text that you use for both inline and managed session policies\n\t// shouldn't exceed 2048 characters. The JSON policy characters can be any ASCII\n\t// character from the space character to the end of the valid character list\n\t// (\\u0020 through \\u00FF). It can also include the tab (\\u0009), linefeed (\\u000A),\n\t// and carriage return (\\u000D) characters.\n\t//\n\t// The characters in this parameter count towards the 2048 character session\n\t// policy guideline. However, an AWS conversion compresses the session policies\n\t// into a packed binary format that has a separate limit. This is the enforced\n\t// limit. The PackedPolicySize response element indicates by percentage how\n\t// close the policy is to the upper size limit.\n\tPolicy *string `min:\"1\" type:\"string\"`\n\n\t// The Amazon Resource Names (ARNs) of the IAM managed policies that you want\n\t// to use as managed session policies. The policies must exist in the same account\n\t// as the role.\n\t//\n\t// This parameter is optional. You can provide up to 10 managed policy ARNs.\n\t// However, the plain text that you use for both inline and managed session\n\t// policies shouldn't exceed 2048 characters. For more information about ARNs,\n\t// see Amazon Resource Names (ARNs) and AWS Service Namespaces (general/latest/gr/aws-arns-and-namespaces.html)\n\t// in the AWS General Reference.\n\t//\n\t// The characters in this parameter count towards the 2048 character session\n\t// policy guideline. However, an AWS conversion compresses the session policies\n\t// into a packed binary format that has a separate limit. This is the enforced\n\t// limit. The PackedPolicySize response element indicates by percentage how\n\t// close the policy is to the upper size limit.\n\t//\n\t// Passing policies to this operation returns new temporary credentials. The\n\t// resulting session's permissions are the intersection of the role's identity-based\n\t// policy and the session policies. You can use the role's temporary credentials\n\t// in subsequent AWS API calls to access resources in the account that owns\n\t// the role. You cannot use session policies to grant more permissions than\n\t// those allowed by the identity-based policy of the role that is being assumed.\n\t// For more information, see Session Policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)\n\t// in the IAM User Guide.\n\tPolicyArns []*PolicyDescriptorType `type:\"list\"`\n\n\t// The Amazon Resource Name (ARN) of the SAML provider in IAM that describes\n\t// the IdP.\n\t//\n\t// PrincipalArn is a required field\n\tPrincipalArn *string `min:\"20\" type:\"string\" required:\"true\"`\n\n\t// The Amazon Resource Name (ARN) of the role that the caller is assuming.\n\t//\n\t// RoleArn is a required field\n\tRoleArn *string `min:\"20\" type:\"string\" required:\"true\"`\n\n\t// The base-64 encoded SAML authentication response provided by the IdP.\n\t//\n\t// For more information, see Configuring a Relying Party and Adding Claims (https://docs.aws.amazon.com/IAM/latest/UserGuide/create-role-saml-IdP-tasks.html)\n\t// in the IAM User Guide.\n\t//\n\t// SAMLAssertion is a required field\n\tSAMLAssertion *string `min:\"4\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s AssumeRoleWithSAMLInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s AssumeRoleWithSAMLInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *AssumeRoleWithSAMLInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"AssumeRoleWithSAMLInput\"}\n\tif s.DurationSeconds != nil && *s.DurationSeconds < 900 {\n\t\tinvalidParams.Add(request.NewErrParamMinValue(\"DurationSeconds\", 900))\n\t}\n\tif s.Policy != nil && len(*s.Policy) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Policy\", 1))\n\t}\n\tif s.PrincipalArn == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"PrincipalArn\"))\n\t}\n\tif s.PrincipalArn != nil && len(*s.PrincipalArn) < 20 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"PrincipalArn\", 20))\n\t}\n\tif s.RoleArn == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"RoleArn\"))\n\t}\n\tif s.RoleArn != nil && len(*s.RoleArn) < 20 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"RoleArn\", 20))\n\t}\n\tif s.SAMLAssertion == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"SAMLAssertion\"))\n\t}\n\tif s.SAMLAssertion != nil && len(*s.SAMLAssertion) < 4 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"SAMLAssertion\", 4))\n\t}\n\tif s.PolicyArns != nil {\n\t\tfor i, v := range s.PolicyArns {\n\t\t\tif v == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif err := v.Validate(); err != nil {\n\t\t\t\tinvalidParams.AddNested(fmt.Sprintf(\"%s[%v]\", \"PolicyArns\", i), err.(request.ErrInvalidParams))\n\t\t\t}\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetDurationSeconds sets the DurationSeconds field's value.\nfunc (s *AssumeRoleWithSAMLInput) SetDurationSeconds(v int64) *AssumeRoleWithSAMLInput {\n\ts.DurationSeconds = &v\n\treturn s\n}\n\n// SetPolicy sets the Policy field's value.\nfunc (s *AssumeRoleWithSAMLInput) SetPolicy(v string) *AssumeRoleWithSAMLInput {\n\ts.Policy = &v\n\treturn s\n}\n\n// SetPolicyArns sets the PolicyArns field's value.\nfunc (s *AssumeRoleWithSAMLInput) SetPolicyArns(v []*PolicyDescriptorType) *AssumeRoleWithSAMLInput {\n\ts.PolicyArns = v\n\treturn s\n}\n\n// SetPrincipalArn sets the PrincipalArn field's value.\nfunc (s *AssumeRoleWithSAMLInput) SetPrincipalArn(v string) *AssumeRoleWithSAMLInput {\n\ts.PrincipalArn = &v\n\treturn s\n}\n\n// SetRoleArn sets the RoleArn field's value.\nfunc (s *AssumeRoleWithSAMLInput) SetRoleArn(v string) *AssumeRoleWithSAMLInput {\n\ts.RoleArn = &v\n\treturn s\n}\n\n// SetSAMLAssertion sets the SAMLAssertion field's value.\nfunc (s *AssumeRoleWithSAMLInput) SetSAMLAssertion(v string) *AssumeRoleWithSAMLInput {\n\ts.SAMLAssertion = &v\n\treturn s\n}\n\n// Contains the response to a successful AssumeRoleWithSAML request, including\n// temporary AWS credentials that can be used to make AWS requests.\ntype AssumeRoleWithSAMLOutput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The identifiers for the temporary security credentials that the operation\n\t// returns.\n\tAssumedRoleUser *AssumedRoleUser `type:\"structure\"`\n\n\t// The value of the Recipient attribute of the SubjectConfirmationData element\n\t// of the SAML assertion.\n\tAudience *string `type:\"string\"`\n\n\t// The temporary security credentials, which include an access key ID, a secret\n\t// access key, and a security (or session) token.\n\t//\n\t// The size of the security token that STS API operations return is not fixed.\n\t// We strongly recommend that you make no assumptions about the maximum size.\n\tCredentials *Credentials `type:\"structure\"`\n\n\t// The value of the Issuer element of the SAML assertion.\n\tIssuer *string `type:\"string\"`\n\n\t// A hash value based on the concatenation of the Issuer response value, the\n\t// AWS account ID, and the friendly name (the last part of the ARN) of the SAML\n\t// provider in IAM. The combination of NameQualifier and Subject can be used\n\t// to uniquely identify a federated user.\n\t//\n\t// The following pseudocode shows how the hash value is calculated:\n\t//\n\t// BASE64 ( SHA1 ( \"https://example.com/saml\" + \"123456789012\" + \"/MySAMLIdP\"\n\t// ) )\n\tNameQualifier *string `type:\"string\"`\n\n\t// A percentage value that indicates the size of the policy in packed form.\n\t// The service rejects any policy with a packed size greater than 100 percent,\n\t// which means the policy exceeded the allowed space.\n\tPackedPolicySize *int64 `type:\"integer\"`\n\n\t// The value of the NameID element in the Subject element of the SAML assertion.\n\tSubject *string `type:\"string\"`\n\n\t// The format of the name ID, as defined by the Format attribute in the NameID\n\t// element of the SAML assertion. Typical examples of the format are transient\n\t// or persistent.\n\t//\n\t// If the format includes the prefix urn:oasis:names:tc:SAML:2.0:nameid-format,\n\t// that prefix is removed. For example, urn:oasis:names:tc:SAML:2.0:nameid-format:transient\n\t// is returned as transient. If the format includes any other prefix, the format\n\t// is returned with no modifications.\n\tSubjectType *string `type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s AssumeRoleWithSAMLOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s AssumeRoleWithSAMLOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetAssumedRoleUser sets the AssumedRoleUser field's value.\nfunc (s *AssumeRoleWithSAMLOutput) SetAssumedRoleUser(v *AssumedRoleUser) *AssumeRoleWithSAMLOutput {\n\ts.AssumedRoleUser = v\n\treturn s\n}\n\n// SetAudience sets the Audience field's value.\nfunc (s *AssumeRoleWithSAMLOutput) SetAudience(v string) *AssumeRoleWithSAMLOutput {\n\ts.Audience = &v\n\treturn s\n}\n\n// SetCredentials sets the Credentials field's value.\nfunc (s *AssumeRoleWithSAMLOutput) SetCredentials(v *Credentials) *AssumeRoleWithSAMLOutput {\n\ts.Credentials = v\n\treturn s\n}\n\n// SetIssuer sets the Issuer field's value.\nfunc (s *AssumeRoleWithSAMLOutput) SetIssuer(v string) *AssumeRoleWithSAMLOutput {\n\ts.Issuer = &v\n\treturn s\n}\n\n// SetNameQualifier sets the NameQualifier field's value.\nfunc (s *AssumeRoleWithSAMLOutput) SetNameQualifier(v string) *AssumeRoleWithSAMLOutput {\n\ts.NameQualifier = &v\n\treturn s\n}\n\n// SetPackedPolicySize sets the PackedPolicySize field's value.\nfunc (s *AssumeRoleWithSAMLOutput) SetPackedPolicySize(v int64) *AssumeRoleWithSAMLOutput {\n\ts.PackedPolicySize = &v\n\treturn s\n}\n\n// SetSubject sets the Subject field's value.\nfunc (s *AssumeRoleWithSAMLOutput) SetSubject(v string) *AssumeRoleWithSAMLOutput {\n\ts.Subject = &v\n\treturn s\n}\n\n// SetSubjectType sets the SubjectType field's value.\nfunc (s *AssumeRoleWithSAMLOutput) SetSubjectType(v string) *AssumeRoleWithSAMLOutput {\n\ts.SubjectType = &v\n\treturn s\n}\n\ntype AssumeRoleWithWebIdentityInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The duration, in seconds, of the role session. The value can range from 900\n\t// seconds (15 minutes) up to the maximum session duration setting for the role.\n\t// This setting can have a value from 1 hour to 12 hours. If you specify a value\n\t// higher than this setting, the operation fails. For example, if you specify\n\t// a session duration of 12 hours, but your administrator set the maximum session\n\t// duration to 6 hours, your operation fails. To learn how to view the maximum\n\t// value for your role, see View the Maximum Session Duration Setting for a\n\t// Role (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html#id_roles_use_view-role-max-session)\n\t// in the IAM User Guide.\n\t//\n\t// By default, the value is set to 3600 seconds.\n\t//\n\t// The DurationSeconds parameter is separate from the duration of a console\n\t// session that you might request using the returned credentials. The request\n\t// to the federation endpoint for a console sign-in token takes a SessionDuration\n\t// parameter that specifies the maximum length of the console session. For more\n\t// information, see Creating a URL that Enables Federated Users to Access the\n\t// AWS Management Console (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_enable-console-custom-url.html)\n\t// in the IAM User Guide.\n\tDurationSeconds *int64 `min:\"900\" type:\"integer\"`\n\n\t// An IAM policy in JSON format that you want to use as an inline session policy.\n\t//\n\t// This parameter is optional. Passing policies to this operation returns new\n\t// temporary credentials. The resulting session's permissions are the intersection\n\t// of the role's identity-based policy and the session policies. You can use\n\t// the role's temporary credentials in subsequent AWS API calls to access resources\n\t// in the account that owns the role. You cannot use session policies to grant\n\t// more permissions than those allowed by the identity-based policy of the role\n\t// that is being assumed. For more information, see Session Policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)\n\t// in the IAM User Guide.\n\t//\n\t// The plain text that you use for both inline and managed session policies\n\t// shouldn't exceed 2048 characters. The JSON policy characters can be any ASCII\n\t// character from the space character to the end of the valid character list\n\t// (\\u0020 through \\u00FF). It can also include the tab (\\u0009), linefeed (\\u000A),\n\t// and carriage return (\\u000D) characters.\n\t//\n\t// The characters in this parameter count towards the 2048 character session\n\t// policy guideline. However, an AWS conversion compresses the session policies\n\t// into a packed binary format that has a separate limit. This is the enforced\n\t// limit. The PackedPolicySize response element indicates by percentage how\n\t// close the policy is to the upper size limit.\n\tPolicy *string `min:\"1\" type:\"string\"`\n\n\t// The Amazon Resource Names (ARNs) of the IAM managed policies that you want\n\t// to use as managed session policies. The policies must exist in the same account\n\t// as the role.\n\t//\n\t// This parameter is optional. You can provide up to 10 managed policy ARNs.\n\t// However, the plain text that you use for both inline and managed session\n\t// policies shouldn't exceed 2048 characters. For more information about ARNs,\n\t// see Amazon Resource Names (ARNs) and AWS Service Namespaces (general/latest/gr/aws-arns-and-namespaces.html)\n\t// in the AWS General Reference.\n\t//\n\t// The characters in this parameter count towards the 2048 character session\n\t// policy guideline. However, an AWS conversion compresses the session policies\n\t// into a packed binary format that has a separate limit. This is the enforced\n\t// limit. The PackedPolicySize response element indicates by percentage how\n\t// close the policy is to the upper size limit.\n\t//\n\t// Passing policies to this operation returns new temporary credentials. The\n\t// resulting session's permissions are the intersection of the role's identity-based\n\t// policy and the session policies. You can use the role's temporary credentials\n\t// in subsequent AWS API calls to access resources in the account that owns\n\t// the role. You cannot use session policies to grant more permissions than\n\t// those allowed by the identity-based policy of the role that is being assumed.\n\t// For more information, see Session Policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)\n\t// in the IAM User Guide.\n\tPolicyArns []*PolicyDescriptorType `type:\"list\"`\n\n\t// The fully qualified host component of the domain name of the identity provider.\n\t//\n\t// Specify this value only for OAuth 2.0 access tokens. Currently www.amazon.com\n\t// and graph.facebook.com are the only supported identity providers for OAuth\n\t// 2.0 access tokens. Do not include URL schemes and port numbers.\n\t//\n\t// Do not specify this value for OpenID Connect ID tokens.\n\tProviderId *string `min:\"4\" type:\"string\"`\n\n\t// The Amazon Resource Name (ARN) of the role that the caller is assuming.\n\t//\n\t// RoleArn is a required field\n\tRoleArn *string `min:\"20\" type:\"string\" required:\"true\"`\n\n\t// An identifier for the assumed role session. Typically, you pass the name\n\t// or identifier that is associated with the user who is using your application.\n\t// That way, the temporary security credentials that your application will use\n\t// are associated with that user. This session name is included as part of the\n\t// ARN and assumed role ID in the AssumedRoleUser response element.\n\t//\n\t// The regex used to validate this parameter is a string of characters consisting\n\t// of upper- and lower-case alphanumeric characters with no spaces. You can\n\t// also include underscores or any of the following characters: =,.@-\n\t//\n\t// RoleSessionName is a required field\n\tRoleSessionName *string `min:\"2\" type:\"string\" required:\"true\"`\n\n\t// The OAuth 2.0 access token or OpenID Connect ID token that is provided by\n\t// the identity provider. Your application must get this token by authenticating\n\t// the user who is using your application with a web identity provider before\n\t// the application makes an AssumeRoleWithWebIdentity call.\n\t//\n\t// WebIdentityToken is a required field\n\tWebIdentityToken *string `min:\"4\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s AssumeRoleWithWebIdentityInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s AssumeRoleWithWebIdentityInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *AssumeRoleWithWebIdentityInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"AssumeRoleWithWebIdentityInput\"}\n\tif s.DurationSeconds != nil && *s.DurationSeconds < 900 {\n\t\tinvalidParams.Add(request.NewErrParamMinValue(\"DurationSeconds\", 900))\n\t}\n\tif s.Policy != nil && len(*s.Policy) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Policy\", 1))\n\t}\n\tif s.ProviderId != nil && len(*s.ProviderId) < 4 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"ProviderId\", 4))\n\t}\n\tif s.RoleArn == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"RoleArn\"))\n\t}\n\tif s.RoleArn != nil && len(*s.RoleArn) < 20 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"RoleArn\", 20))\n\t}\n\tif s.RoleSessionName == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"RoleSessionName\"))\n\t}\n\tif s.RoleSessionName != nil && len(*s.RoleSessionName) < 2 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"RoleSessionName\", 2))\n\t}\n\tif s.WebIdentityToken == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"WebIdentityToken\"))\n\t}\n\tif s.WebIdentityToken != nil && len(*s.WebIdentityToken) < 4 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"WebIdentityToken\", 4))\n\t}\n\tif s.PolicyArns != nil {\n\t\tfor i, v := range s.PolicyArns {\n\t\t\tif v == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif err := v.Validate(); err != nil {\n\t\t\t\tinvalidParams.AddNested(fmt.Sprintf(\"%s[%v]\", \"PolicyArns\", i), err.(request.ErrInvalidParams))\n\t\t\t}\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetDurationSeconds sets the DurationSeconds field's value.\nfunc (s *AssumeRoleWithWebIdentityInput) SetDurationSeconds(v int64) *AssumeRoleWithWebIdentityInput {\n\ts.DurationSeconds = &v\n\treturn s\n}\n\n// SetPolicy sets the Policy field's value.\nfunc (s *AssumeRoleWithWebIdentityInput) SetPolicy(v string) *AssumeRoleWithWebIdentityInput {\n\ts.Policy = &v\n\treturn s\n}\n\n// SetPolicyArns sets the PolicyArns field's value.\nfunc (s *AssumeRoleWithWebIdentityInput) SetPolicyArns(v []*PolicyDescriptorType) *AssumeRoleWithWebIdentityInput {\n\ts.PolicyArns = v\n\treturn s\n}\n\n// SetProviderId sets the ProviderId field's value.\nfunc (s *AssumeRoleWithWebIdentityInput) SetProviderId(v string) *AssumeRoleWithWebIdentityInput {\n\ts.ProviderId = &v\n\treturn s\n}\n\n// SetRoleArn sets the RoleArn field's value.\nfunc (s *AssumeRoleWithWebIdentityInput) SetRoleArn(v string) *AssumeRoleWithWebIdentityInput {\n\ts.RoleArn = &v\n\treturn s\n}\n\n// SetRoleSessionName sets the RoleSessionName field's value.\nfunc (s *AssumeRoleWithWebIdentityInput) SetRoleSessionName(v string) *AssumeRoleWithWebIdentityInput {\n\ts.RoleSessionName = &v\n\treturn s\n}\n\n// SetWebIdentityToken sets the WebIdentityToken field's value.\nfunc (s *AssumeRoleWithWebIdentityInput) SetWebIdentityToken(v string) *AssumeRoleWithWebIdentityInput {\n\ts.WebIdentityToken = &v\n\treturn s\n}\n\n// Contains the response to a successful AssumeRoleWithWebIdentity request,\n// including temporary AWS credentials that can be used to make AWS requests.\ntype AssumeRoleWithWebIdentityOutput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The Amazon Resource Name (ARN) and the assumed role ID, which are identifiers\n\t// that you can use to refer to the resulting temporary security credentials.\n\t// For example, you can reference these credentials as a principal in a resource-based\n\t// policy by using the ARN or assumed role ID. The ARN and ID include the RoleSessionName\n\t// that you specified when you called AssumeRole.\n\tAssumedRoleUser *AssumedRoleUser `type:\"structure\"`\n\n\t// The intended audience (also known as client ID) of the web identity token.\n\t// This is traditionally the client identifier issued to the application that\n\t// requested the web identity token.\n\tAudience *string `type:\"string\"`\n\n\t// The temporary security credentials, which include an access key ID, a secret\n\t// access key, and a security token.\n\t//\n\t// The size of the security token that STS API operations return is not fixed.\n\t// We strongly recommend that you make no assumptions about the maximum size.\n\tCredentials *Credentials `type:\"structure\"`\n\n\t// A percentage value that indicates the size of the policy in packed form.\n\t// The service rejects any policy with a packed size greater than 100 percent,\n\t// which means the policy exceeded the allowed space.\n\tPackedPolicySize *int64 `type:\"integer\"`\n\n\t// The issuing authority of the web identity token presented. For OpenID Connect\n\t// ID tokens, this contains the value of the iss field. For OAuth 2.0 access\n\t// tokens, this contains the value of the ProviderId parameter that was passed\n\t// in the AssumeRoleWithWebIdentity request.\n\tProvider *string `type:\"string\"`\n\n\t// The unique user identifier that is returned by the identity provider. This\n\t// identifier is associated with the WebIdentityToken that was submitted with\n\t// the AssumeRoleWithWebIdentity call. The identifier is typically unique to\n\t// the user and the application that acquired the WebIdentityToken (pairwise\n\t// identifier). For OpenID Connect ID tokens, this field contains the value\n\t// returned by the identity provider as the token's sub (Subject) claim.\n\tSubjectFromWebIdentityToken *string `min:\"6\" type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s AssumeRoleWithWebIdentityOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s AssumeRoleWithWebIdentityOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetAssumedRoleUser sets the AssumedRoleUser field's value.\nfunc (s *AssumeRoleWithWebIdentityOutput) SetAssumedRoleUser(v *AssumedRoleUser) *AssumeRoleWithWebIdentityOutput {\n\ts.AssumedRoleUser = v\n\treturn s\n}\n\n// SetAudience sets the Audience field's value.\nfunc (s *AssumeRoleWithWebIdentityOutput) SetAudience(v string) *AssumeRoleWithWebIdentityOutput {\n\ts.Audience = &v\n\treturn s\n}\n\n// SetCredentials sets the Credentials field's value.\nfunc (s *AssumeRoleWithWebIdentityOutput) SetCredentials(v *Credentials) *AssumeRoleWithWebIdentityOutput {\n\ts.Credentials = v\n\treturn s\n}\n\n// SetPackedPolicySize sets the PackedPolicySize field's value.\nfunc (s *AssumeRoleWithWebIdentityOutput) SetPackedPolicySize(v int64) *AssumeRoleWithWebIdentityOutput {\n\ts.PackedPolicySize = &v\n\treturn s\n}\n\n// SetProvider sets the Provider field's value.\nfunc (s *AssumeRoleWithWebIdentityOutput) SetProvider(v string) *AssumeRoleWithWebIdentityOutput {\n\ts.Provider = &v\n\treturn s\n}\n\n// SetSubjectFromWebIdentityToken sets the SubjectFromWebIdentityToken field's value.\nfunc (s *AssumeRoleWithWebIdentityOutput) SetSubjectFromWebIdentityToken(v string) *AssumeRoleWithWebIdentityOutput {\n\ts.SubjectFromWebIdentityToken = &v\n\treturn s\n}\n\n// The identifiers for the temporary security credentials that the operation\n// returns.\ntype AssumedRoleUser struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The ARN of the temporary security credentials that are returned from the\n\t// AssumeRole action. For more information about ARNs and how to use them in\n\t// policies, see IAM Identifiers (https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html)\n\t// in Using IAM.\n\t//\n\t// Arn is a required field\n\tArn *string `min:\"20\" type:\"string\" required:\"true\"`\n\n\t// A unique identifier that contains the role ID and the role session name of\n\t// the role that is being assumed. The role ID is generated by AWS when the\n\t// role is created.\n\t//\n\t// AssumedRoleId is a required field\n\tAssumedRoleId *string `min:\"2\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s AssumedRoleUser) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s AssumedRoleUser) GoString() string {\n\treturn s.String()\n}\n\n// SetArn sets the Arn field's value.\nfunc (s *AssumedRoleUser) SetArn(v string) *AssumedRoleUser {\n\ts.Arn = &v\n\treturn s\n}\n\n// SetAssumedRoleId sets the AssumedRoleId field's value.\nfunc (s *AssumedRoleUser) SetAssumedRoleId(v string) *AssumedRoleUser {\n\ts.AssumedRoleId = &v\n\treturn s\n}\n\n// AWS credentials for API authentication.\ntype Credentials struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The access key ID that identifies the temporary security credentials.\n\t//\n\t// AccessKeyId is a required field\n\tAccessKeyId *string `min:\"16\" type:\"string\" required:\"true\"`\n\n\t// The date on which the current credentials expire.\n\t//\n\t// Expiration is a required field\n\tExpiration *time.Time `type:\"timestamp\" required:\"true\"`\n\n\t// The secret access key that can be used to sign requests.\n\t//\n\t// SecretAccessKey is a required field\n\tSecretAccessKey *string `type:\"string\" required:\"true\"`\n\n\t// The token that users must pass to the service API to use the temporary credentials.\n\t//\n\t// SessionToken is a required field\n\tSessionToken *string `type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s Credentials) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s Credentials) GoString() string {\n\treturn s.String()\n}\n\n// SetAccessKeyId sets the AccessKeyId field's value.\nfunc (s *Credentials) SetAccessKeyId(v string) *Credentials {\n\ts.AccessKeyId = &v\n\treturn s\n}\n\n// SetExpiration sets the Expiration field's value.\nfunc (s *Credentials) SetExpiration(v time.Time) *Credentials {\n\ts.Expiration = &v\n\treturn s\n}\n\n// SetSecretAccessKey sets the SecretAccessKey field's value.\nfunc (s *Credentials) SetSecretAccessKey(v string) *Credentials {\n\ts.SecretAccessKey = &v\n\treturn s\n}\n\n// SetSessionToken sets the SessionToken field's value.\nfunc (s *Credentials) SetSessionToken(v string) *Credentials {\n\ts.SessionToken = &v\n\treturn s\n}\n\ntype DecodeAuthorizationMessageInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The encoded message that was returned with the response.\n\t//\n\t// EncodedMessage is a required field\n\tEncodedMessage *string `min:\"1\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s DecodeAuthorizationMessageInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s DecodeAuthorizationMessageInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *DecodeAuthorizationMessageInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"DecodeAuthorizationMessageInput\"}\n\tif s.EncodedMessage == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"EncodedMessage\"))\n\t}\n\tif s.EncodedMessage != nil && len(*s.EncodedMessage) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"EncodedMessage\", 1))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetEncodedMessage sets the EncodedMessage field's value.\nfunc (s *DecodeAuthorizationMessageInput) SetEncodedMessage(v string) *DecodeAuthorizationMessageInput {\n\ts.EncodedMessage = &v\n\treturn s\n}\n\n// A document that contains additional information about the authorization status\n// of a request from an encoded message that is returned in response to an AWS\n// request.\ntype DecodeAuthorizationMessageOutput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// An XML document that contains the decoded message.\n\tDecodedMessage *string `type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s DecodeAuthorizationMessageOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s DecodeAuthorizationMessageOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetDecodedMessage sets the DecodedMessage field's value.\nfunc (s *DecodeAuthorizationMessageOutput) SetDecodedMessage(v string) *DecodeAuthorizationMessageOutput {\n\ts.DecodedMessage = &v\n\treturn s\n}\n\n// Identifiers for the federated user that is associated with the credentials.\ntype FederatedUser struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The ARN that specifies the federated user that is associated with the credentials.\n\t// For more information about ARNs and how to use them in policies, see IAM\n\t// Identifiers (https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html)\n\t// in Using IAM.\n\t//\n\t// Arn is a required field\n\tArn *string `min:\"20\" type:\"string\" required:\"true\"`\n\n\t// The string that identifies the federated user associated with the credentials,\n\t// similar to the unique ID of an IAM user.\n\t//\n\t// FederatedUserId is a required field\n\tFederatedUserId *string `min:\"2\" type:\"string\" required:\"true\"`\n}\n\n// String returns the string representation\nfunc (s FederatedUser) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s FederatedUser) GoString() string {\n\treturn s.String()\n}\n\n// SetArn sets the Arn field's value.\nfunc (s *FederatedUser) SetArn(v string) *FederatedUser {\n\ts.Arn = &v\n\treturn s\n}\n\n// SetFederatedUserId sets the FederatedUserId field's value.\nfunc (s *FederatedUser) SetFederatedUserId(v string) *FederatedUser {\n\ts.FederatedUserId = &v\n\treturn s\n}\n\ntype GetCallerIdentityInput struct {\n\t_ struct{} `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s GetCallerIdentityInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetCallerIdentityInput) GoString() string {\n\treturn s.String()\n}\n\n// Contains the response to a successful GetCallerIdentity request, including\n// information about the entity making the request.\ntype GetCallerIdentityOutput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The AWS account ID number of the account that owns or contains the calling\n\t// entity.\n\tAccount *string `type:\"string\"`\n\n\t// The AWS ARN associated with the calling entity.\n\tArn *string `min:\"20\" type:\"string\"`\n\n\t// The unique identifier of the calling entity. The exact value depends on the\n\t// type of entity that is making the call. The values returned are those listed\n\t// in the aws:userid column in the Principal table (https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_variables.html#principaltable)\n\t// found on the Policy Variables reference page in the IAM User Guide.\n\tUserId *string `type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s GetCallerIdentityOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetCallerIdentityOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetAccount sets the Account field's value.\nfunc (s *GetCallerIdentityOutput) SetAccount(v string) *GetCallerIdentityOutput {\n\ts.Account = &v\n\treturn s\n}\n\n// SetArn sets the Arn field's value.\nfunc (s *GetCallerIdentityOutput) SetArn(v string) *GetCallerIdentityOutput {\n\ts.Arn = &v\n\treturn s\n}\n\n// SetUserId sets the UserId field's value.\nfunc (s *GetCallerIdentityOutput) SetUserId(v string) *GetCallerIdentityOutput {\n\ts.UserId = &v\n\treturn s\n}\n\ntype GetFederationTokenInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The duration, in seconds, that the session should last. Acceptable durations\n\t// for federation sessions range from 900 seconds (15 minutes) to 129,600 seconds\n\t// (36 hours), with 43,200 seconds (12 hours) as the default. Sessions obtained\n\t// using AWS account root user credentials are restricted to a maximum of 3,600\n\t// seconds (one hour). If the specified duration is longer than one hour, the\n\t// session obtained by using root user credentials defaults to one hour.\n\tDurationSeconds *int64 `min:\"900\" type:\"integer\"`\n\n\t// The name of the federated user. The name is used as an identifier for the\n\t// temporary security credentials (such as Bob). For example, you can reference\n\t// the federated user name in a resource-based policy, such as in an Amazon\n\t// S3 bucket policy.\n\t//\n\t// The regex used to validate this parameter is a string of characters consisting\n\t// of upper- and lower-case alphanumeric characters with no spaces. You can\n\t// also include underscores or any of the following characters: =,.@-\n\t//\n\t// Name is a required field\n\tName *string `min:\"2\" type:\"string\" required:\"true\"`\n\n\t// An IAM policy in JSON format that you want to use as an inline session policy.\n\t//\n\t// You must pass an inline or managed session policy (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)\n\t// to this operation. You can pass a single JSON policy document to use as an\n\t// inline session policy. You can also specify up to 10 managed policies to\n\t// use as managed session policies.\n\t//\n\t// This parameter is optional. However, if you do not pass any session policies,\n\t// then the resulting federated user session has no permissions. The only exception\n\t// is when the credentials are used to access a resource that has a resource-based\n\t// policy that specifically references the federated user session in the Principal\n\t// element of the policy.\n\t//\n\t// When you pass session policies, the session permissions are the intersection\n\t// of the IAM user policies and the session policies that you pass. This gives\n\t// you a way to further restrict the permissions for a federated user. You cannot\n\t// use session policies to grant more permissions than those that are defined\n\t// in the permissions policy of the IAM user. For more information, see Session\n\t// Policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)\n\t// in the IAM User Guide.\n\t//\n\t// The plain text that you use for both inline and managed session policies\n\t// shouldn't exceed 2048 characters. The JSON policy characters can be any ASCII\n\t// character from the space character to the end of the valid character list\n\t// (\\u0020 through \\u00FF). It can also include the tab (\\u0009), linefeed (\\u000A),\n\t// and carriage return (\\u000D) characters.\n\t//\n\t// The characters in this parameter count towards the 2048 character session\n\t// policy guideline. However, an AWS conversion compresses the session policies\n\t// into a packed binary format that has a separate limit. This is the enforced\n\t// limit. The PackedPolicySize response element indicates by percentage how\n\t// close the policy is to the upper size limit.\n\tPolicy *string `min:\"1\" type:\"string\"`\n\n\t// The Amazon Resource Names (ARNs) of the IAM managed policies that you want\n\t// to use as a managed session policy. The policies must exist in the same account\n\t// as the IAM user that is requesting federated access.\n\t//\n\t// You must pass an inline or managed session policy (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)\n\t// to this operation. You can pass a single JSON policy document to use as an\n\t// inline session policy. You can also specify up to 10 managed policies to\n\t// use as managed session policies. The plain text that you use for both inline\n\t// and managed session policies shouldn't exceed 2048 characters. You can provide\n\t// up to 10 managed policy ARNs. For more information about ARNs, see Amazon\n\t// Resource Names (ARNs) and AWS Service Namespaces (general/latest/gr/aws-arns-and-namespaces.html)\n\t// in the AWS General Reference.\n\t//\n\t// This parameter is optional. However, if you do not pass any session policies,\n\t// then the resulting federated user session has no permissions. The only exception\n\t// is when the credentials are used to access a resource that has a resource-based\n\t// policy that specifically references the federated user session in the Principal\n\t// element of the policy.\n\t//\n\t// When you pass session policies, the session permissions are the intersection\n\t// of the IAM user policies and the session policies that you pass. This gives\n\t// you a way to further restrict the permissions for a federated user. You cannot\n\t// use session policies to grant more permissions than those that are defined\n\t// in the permissions policy of the IAM user. For more information, see Session\n\t// Policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)\n\t// in the IAM User Guide.\n\t//\n\t// The characters in this parameter count towards the 2048 character session\n\t// policy guideline. However, an AWS conversion compresses the session policies\n\t// into a packed binary format that has a separate limit. This is the enforced\n\t// limit. The PackedPolicySize response element indicates by percentage how\n\t// close the policy is to the upper size limit.\n\tPolicyArns []*PolicyDescriptorType `type:\"list\"`\n}\n\n// String returns the string representation\nfunc (s GetFederationTokenInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetFederationTokenInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *GetFederationTokenInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"GetFederationTokenInput\"}\n\tif s.DurationSeconds != nil && *s.DurationSeconds < 900 {\n\t\tinvalidParams.Add(request.NewErrParamMinValue(\"DurationSeconds\", 900))\n\t}\n\tif s.Name == nil {\n\t\tinvalidParams.Add(request.NewErrParamRequired(\"Name\"))\n\t}\n\tif s.Name != nil && len(*s.Name) < 2 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Name\", 2))\n\t}\n\tif s.Policy != nil && len(*s.Policy) < 1 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Policy\", 1))\n\t}\n\tif s.PolicyArns != nil {\n\t\tfor i, v := range s.PolicyArns {\n\t\t\tif v == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif err := v.Validate(); err != nil {\n\t\t\t\tinvalidParams.AddNested(fmt.Sprintf(\"%s[%v]\", \"PolicyArns\", i), err.(request.ErrInvalidParams))\n\t\t\t}\n\t\t}\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetDurationSeconds sets the DurationSeconds field's value.\nfunc (s *GetFederationTokenInput) SetDurationSeconds(v int64) *GetFederationTokenInput {\n\ts.DurationSeconds = &v\n\treturn s\n}\n\n// SetName sets the Name field's value.\nfunc (s *GetFederationTokenInput) SetName(v string) *GetFederationTokenInput {\n\ts.Name = &v\n\treturn s\n}\n\n// SetPolicy sets the Policy field's value.\nfunc (s *GetFederationTokenInput) SetPolicy(v string) *GetFederationTokenInput {\n\ts.Policy = &v\n\treturn s\n}\n\n// SetPolicyArns sets the PolicyArns field's value.\nfunc (s *GetFederationTokenInput) SetPolicyArns(v []*PolicyDescriptorType) *GetFederationTokenInput {\n\ts.PolicyArns = v\n\treturn s\n}\n\n// Contains the response to a successful GetFederationToken request, including\n// temporary AWS credentials that can be used to make AWS requests.\ntype GetFederationTokenOutput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The temporary security credentials, which include an access key ID, a secret\n\t// access key, and a security (or session) token.\n\t//\n\t// The size of the security token that STS API operations return is not fixed.\n\t// We strongly recommend that you make no assumptions about the maximum size.\n\tCredentials *Credentials `type:\"structure\"`\n\n\t// Identifiers for the federated user associated with the credentials (such\n\t// as arn:aws:sts::123456789012:federated-user/Bob or 123456789012:Bob). You\n\t// can use the federated user's ARN in your resource-based policies, such as\n\t// an Amazon S3 bucket policy.\n\tFederatedUser *FederatedUser `type:\"structure\"`\n\n\t// A percentage value indicating the size of the policy in packed form. The\n\t// service rejects policies for which the packed size is greater than 100 percent\n\t// of the allowed value.\n\tPackedPolicySize *int64 `type:\"integer\"`\n}\n\n// String returns the string representation\nfunc (s GetFederationTokenOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetFederationTokenOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetCredentials sets the Credentials field's value.\nfunc (s *GetFederationTokenOutput) SetCredentials(v *Credentials) *GetFederationTokenOutput {\n\ts.Credentials = v\n\treturn s\n}\n\n// SetFederatedUser sets the FederatedUser field's value.\nfunc (s *GetFederationTokenOutput) SetFederatedUser(v *FederatedUser) *GetFederationTokenOutput {\n\ts.FederatedUser = v\n\treturn s\n}\n\n// SetPackedPolicySize sets the PackedPolicySize field's value.\nfunc (s *GetFederationTokenOutput) SetPackedPolicySize(v int64) *GetFederationTokenOutput {\n\ts.PackedPolicySize = &v\n\treturn s\n}\n\ntype GetSessionTokenInput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The duration, in seconds, that the credentials should remain valid. Acceptable\n\t// durations for IAM user sessions range from 900 seconds (15 minutes) to 129,600\n\t// seconds (36 hours), with 43,200 seconds (12 hours) as the default. Sessions\n\t// for AWS account owners are restricted to a maximum of 3,600 seconds (one\n\t// hour). If the duration is longer than one hour, the session for AWS account\n\t// owners defaults to one hour.\n\tDurationSeconds *int64 `min:\"900\" type:\"integer\"`\n\n\t// The identification number of the MFA device that is associated with the IAM\n\t// user who is making the GetSessionToken call. Specify this value if the IAM\n\t// user has a policy that requires MFA authentication. The value is either the\n\t// serial number for a hardware device (such as GAHT12345678) or an Amazon Resource\n\t// Name (ARN) for a virtual device (such as arn:aws:iam::123456789012:mfa/user).\n\t// You can find the device for an IAM user by going to the AWS Management Console\n\t// and viewing the user's security credentials.\n\t//\n\t// The regex used to validate this parameter is a string of characters consisting\n\t// of upper- and lower-case alphanumeric characters with no spaces. You can\n\t// also include underscores or any of the following characters: =,.@:/-\n\tSerialNumber *string `min:\"9\" type:\"string\"`\n\n\t// The value provided by the MFA device, if MFA is required. If any policy requires\n\t// the IAM user to submit an MFA code, specify this value. If MFA authentication\n\t// is required, the user must provide a code when requesting a set of temporary\n\t// security credentials. A user who fails to provide the code receives an \"access\n\t// denied\" response when requesting resources that require MFA authentication.\n\t//\n\t// The format for this parameter, as described by its regex pattern, is a sequence\n\t// of six numeric digits.\n\tTokenCode *string `min:\"6\" type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s GetSessionTokenInput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetSessionTokenInput) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *GetSessionTokenInput) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"GetSessionTokenInput\"}\n\tif s.DurationSeconds != nil && *s.DurationSeconds < 900 {\n\t\tinvalidParams.Add(request.NewErrParamMinValue(\"DurationSeconds\", 900))\n\t}\n\tif s.SerialNumber != nil && len(*s.SerialNumber) < 9 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"SerialNumber\", 9))\n\t}\n\tif s.TokenCode != nil && len(*s.TokenCode) < 6 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"TokenCode\", 6))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetDurationSeconds sets the DurationSeconds field's value.\nfunc (s *GetSessionTokenInput) SetDurationSeconds(v int64) *GetSessionTokenInput {\n\ts.DurationSeconds = &v\n\treturn s\n}\n\n// SetSerialNumber sets the SerialNumber field's value.\nfunc (s *GetSessionTokenInput) SetSerialNumber(v string) *GetSessionTokenInput {\n\ts.SerialNumber = &v\n\treturn s\n}\n\n// SetTokenCode sets the TokenCode field's value.\nfunc (s *GetSessionTokenInput) SetTokenCode(v string) *GetSessionTokenInput {\n\ts.TokenCode = &v\n\treturn s\n}\n\n// Contains the response to a successful GetSessionToken request, including\n// temporary AWS credentials that can be used to make AWS requests.\ntype GetSessionTokenOutput struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The temporary security credentials, which include an access key ID, a secret\n\t// access key, and a security (or session) token.\n\t//\n\t// The size of the security token that STS API operations return is not fixed.\n\t// We strongly recommend that you make no assumptions about the maximum size.\n\tCredentials *Credentials `type:\"structure\"`\n}\n\n// String returns the string representation\nfunc (s GetSessionTokenOutput) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s GetSessionTokenOutput) GoString() string {\n\treturn s.String()\n}\n\n// SetCredentials sets the Credentials field's value.\nfunc (s *GetSessionTokenOutput) SetCredentials(v *Credentials) *GetSessionTokenOutput {\n\ts.Credentials = v\n\treturn s\n}\n\n// A reference to the IAM managed policy that is passed as a session policy\n// for a role session or a federated user session.\ntype PolicyDescriptorType struct {\n\t_ struct{} `type:\"structure\"`\n\n\t// The Amazon Resource Name (ARN) of the IAM managed policy to use as a session\n\t// policy for the role. For more information about ARNs, see Amazon Resource\n\t// Names (ARNs) and AWS Service Namespaces (general/latest/gr/aws-arns-and-namespaces.html)\n\t// in the AWS General Reference.\n\tArn *string `locationName:\"arn\" min:\"20\" type:\"string\"`\n}\n\n// String returns the string representation\nfunc (s PolicyDescriptorType) String() string {\n\treturn awsutil.Prettify(s)\n}\n\n// GoString returns the string representation\nfunc (s PolicyDescriptorType) GoString() string {\n\treturn s.String()\n}\n\n// Validate inspects the fields of the type to determine if they are valid.\nfunc (s *PolicyDescriptorType) Validate() error {\n\tinvalidParams := request.ErrInvalidParams{Context: \"PolicyDescriptorType\"}\n\tif s.Arn != nil && len(*s.Arn) < 20 {\n\t\tinvalidParams.Add(request.NewErrParamMinLen(\"Arn\", 20))\n\t}\n\n\tif invalidParams.Len() > 0 {\n\t\treturn invalidParams\n\t}\n\treturn nil\n}\n\n// SetArn sets the Arn field's value.\nfunc (s *PolicyDescriptorType) SetArn(v string) *PolicyDescriptorType {\n\ts.Arn = &v\n\treturn s\n}\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/service/sts/doc.go",
    "content": "// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT.\n\n// Package sts provides the client and types for making API\n// requests to AWS Security Token Service.\n//\n// The AWS Security Token Service (STS) is a web service that enables you to\n// request temporary, limited-privilege credentials for AWS Identity and Access\n// Management (IAM) users or for users that you authenticate (federated users).\n// This guide provides descriptions of the STS API. For more detailed information\n// about using this service, go to Temporary Security Credentials (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html).\n//\n// For information about setting up signatures and authorization through the\n// API, go to Signing AWS API Requests (https://docs.aws.amazon.com/general/latest/gr/signing_aws_api_requests.html)\n// in the AWS General Reference. For general information about the Query API,\n// go to Making Query Requests (https://docs.aws.amazon.com/IAM/latest/UserGuide/IAM_UsingQueryAPI.html)\n// in Using IAM. For information about using security tokens with other AWS\n// products, go to AWS Services That Work with IAM (https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)\n// in the IAM User Guide.\n//\n// If you're new to AWS and need additional technical information about a specific\n// AWS product, you can find the product's technical documentation at http://aws.amazon.com/documentation/\n// (http://aws.amazon.com/documentation/).\n//\n// Endpoints\n//\n// By default, AWS Security Token Service (STS) is available as a global service,\n// and all AWS STS requests go to a single endpoint at https://sts.amazonaws.com.\n// Global requests map to the US East (N. Virginia) region. AWS recommends using\n// Regional AWS STS endpoints instead of the global endpoint to reduce latency,\n// build in redundancy, and increase session token validity. For more information,\n// see Managing AWS STS in an AWS Region (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html)\n// in the IAM User Guide.\n//\n// Most AWS Regions are enabled for operations in all AWS services by default.\n// Those Regions are automatically activated for use with AWS STS. Some Regions,\n// such as Asia Pacific (Hong Kong), must be manually enabled. To learn more\n// about enabling and disabling AWS Regions, see Managing AWS Regions (https://docs.aws.amazon.com/general/latest/gr/rande-manage.html)\n// in the AWS General Reference. When you enable these AWS Regions, they are\n// automatically activated for use with AWS STS. You cannot activate the STS\n// endpoint for a Region that is disabled. Tokens that are valid in all AWS\n// Regions are longer than tokens that are valid in Regions that are enabled\n// by default. Changing this setting might affect existing systems where you\n// temporarily store tokens. For more information, see Managing Global Endpoint\n// Session Tokens (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html#sts-regions-manage-tokens)\n// in the IAM User Guide.\n//\n// After you activate a Region for use with AWS STS, you can direct AWS STS\n// API calls to that Region. AWS STS recommends that you provide both the Region\n// and endpoint when you make calls to a Regional endpoint. You can provide\n// the Region alone for manually enabled Regions, such as Asia Pacific (Hong\n// Kong). In this case, the calls are directed to the STS Regional endpoint.\n// However, if you provide the Region alone for Regions enabled by default,\n// the calls are directed to the global endpoint of https://sts.amazonaws.com.\n//\n// To view the list of AWS STS endpoints and whether they are active by default,\n// see Writing Code to Use AWS STS Regions (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html#id_credentials_temp_enable-regions_writing_code)\n// in the IAM User Guide.\n//\n// Recording API requests\n//\n// STS supports AWS CloudTrail, which is a service that records AWS calls for\n// your AWS account and delivers log files to an Amazon S3 bucket. By using\n// information collected by CloudTrail, you can determine what requests were\n// successfully made to STS, who made the request, when it was made, and so\n// on.\n//\n// If you activate AWS STS endpoints in Regions other than the default global\n// endpoint, then you must also turn on CloudTrail logging in those Regions.\n// This is necessary to record any AWS STS API calls that are made in those\n// Regions. For more information, see Turning On CloudTrail in Additional Regions\n// (https://docs.aws.amazon.com/awscloudtrail/latest/userguide/aggregating_logs_regions_turn_on_ct.html)\n// in the AWS CloudTrail User Guide.\n//\n// AWS Security Token Service (STS) is a global service with a single endpoint\n// at https://sts.amazonaws.com. Calls to this endpoint are logged as calls\n// to a global service. However, because this endpoint is physically located\n// in the US East (N. Virginia) Region, your logs list us-east-1 as the event\n// Region. CloudTrail does not write these logs to the US East (Ohio) Region\n// unless you choose to include global service logs in that Region. CloudTrail\n// writes calls to all Regional endpoints to their respective Regions. For example,\n// calls to sts.us-east-2.amazonaws.com are published to the US East (Ohio)\n// Region and calls to sts.eu-central-1.amazonaws.com are published to the EU\n// (Frankfurt) Region.\n//\n// To learn more about CloudTrail, including how to turn it on and find your\n// log files, see the AWS CloudTrail User Guide (https://docs.aws.amazon.com/awscloudtrail/latest/userguide/what_is_cloud_trail_top_level.html).\n//\n// See https://docs.aws.amazon.com/goto/WebAPI/sts-2011-06-15 for more information on this service.\n//\n// See sts package documentation for more information.\n// https://docs.aws.amazon.com/sdk-for-go/api/service/sts/\n//\n// Using the Client\n//\n// To contact AWS Security Token Service with the SDK use the New function to create\n// a new service client. With that client you can make API requests to the service.\n// These clients are safe to use concurrently.\n//\n// See the SDK's documentation for more information on how to use the SDK.\n// https://docs.aws.amazon.com/sdk-for-go/api/\n//\n// See aws.Config documentation for more information on configuring SDK clients.\n// https://docs.aws.amazon.com/sdk-for-go/api/aws/#Config\n//\n// See the AWS Security Token Service client STS for more\n// information on creating client for this service.\n// https://docs.aws.amazon.com/sdk-for-go/api/service/sts/#New\npackage sts\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/service/sts/errors.go",
    "content": "// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT.\n\npackage sts\n\nconst (\n\n\t// ErrCodeExpiredTokenException for service response error code\n\t// \"ExpiredTokenException\".\n\t//\n\t// The web identity token that was passed is expired or is not valid. Get a\n\t// new identity token from the identity provider and then retry the request.\n\tErrCodeExpiredTokenException = \"ExpiredTokenException\"\n\n\t// ErrCodeIDPCommunicationErrorException for service response error code\n\t// \"IDPCommunicationError\".\n\t//\n\t// The request could not be fulfilled because the non-AWS identity provider\n\t// (IDP) that was asked to verify the incoming identity token could not be reached.\n\t// This is often a transient error caused by network conditions. Retry the request\n\t// a limited number of times so that you don't exceed the request rate. If the\n\t// error persists, the non-AWS identity provider might be down or not responding.\n\tErrCodeIDPCommunicationErrorException = \"IDPCommunicationError\"\n\n\t// ErrCodeIDPRejectedClaimException for service response error code\n\t// \"IDPRejectedClaim\".\n\t//\n\t// The identity provider (IdP) reported that authentication failed. This might\n\t// be because the claim is invalid.\n\t//\n\t// If this error is returned for the AssumeRoleWithWebIdentity operation, it\n\t// can also mean that the claim has expired or has been explicitly revoked.\n\tErrCodeIDPRejectedClaimException = \"IDPRejectedClaim\"\n\n\t// ErrCodeInvalidAuthorizationMessageException for service response error code\n\t// \"InvalidAuthorizationMessageException\".\n\t//\n\t// The error returned if the message passed to DecodeAuthorizationMessage was\n\t// invalid. This can happen if the token contains invalid characters, such as\n\t// linebreaks.\n\tErrCodeInvalidAuthorizationMessageException = \"InvalidAuthorizationMessageException\"\n\n\t// ErrCodeInvalidIdentityTokenException for service response error code\n\t// \"InvalidIdentityToken\".\n\t//\n\t// The web identity token that was passed could not be validated by AWS. Get\n\t// a new identity token from the identity provider and then retry the request.\n\tErrCodeInvalidIdentityTokenException = \"InvalidIdentityToken\"\n\n\t// ErrCodeMalformedPolicyDocumentException for service response error code\n\t// \"MalformedPolicyDocument\".\n\t//\n\t// The request was rejected because the policy document was malformed. The error\n\t// message describes the specific error.\n\tErrCodeMalformedPolicyDocumentException = \"MalformedPolicyDocument\"\n\n\t// ErrCodePackedPolicyTooLargeException for service response error code\n\t// \"PackedPolicyTooLarge\".\n\t//\n\t// The request was rejected because the policy document was too large. The error\n\t// message describes how big the policy document is, in packed form, as a percentage\n\t// of what the API allows.\n\tErrCodePackedPolicyTooLargeException = \"PackedPolicyTooLarge\"\n\n\t// ErrCodeRegionDisabledException for service response error code\n\t// \"RegionDisabledException\".\n\t//\n\t// STS is not activated in the requested region for the account that is being\n\t// asked to generate credentials. The account administrator must use the IAM\n\t// console to activate STS in that region. For more information, see Activating\n\t// and Deactivating AWS STS in an AWS Region (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html)\n\t// in the IAM User Guide.\n\tErrCodeRegionDisabledException = \"RegionDisabledException\"\n)\n"
  },
  {
    "path": "vendor/github.com/aws/aws-sdk-go/service/sts/service.go",
    "content": "// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT.\n\npackage sts\n\nimport (\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-go/aws/client\"\n\t\"github.com/aws/aws-sdk-go/aws/client/metadata\"\n\t\"github.com/aws/aws-sdk-go/aws/request\"\n\t\"github.com/aws/aws-sdk-go/aws/signer/v4\"\n\t\"github.com/aws/aws-sdk-go/private/protocol/query\"\n)\n\n// STS provides the API operation methods for making requests to\n// AWS Security Token Service. See this package's package overview docs\n// for details on the service.\n//\n// STS methods are safe to use concurrently. It is not safe to\n// modify mutate any of the struct's properties though.\ntype STS struct {\n\t*client.Client\n}\n\n// Used for custom client initialization logic\nvar initClient func(*client.Client)\n\n// Used for custom request initialization logic\nvar initRequest func(*request.Request)\n\n// Service information constants\nconst (\n\tServiceName = \"sts\"       // Name of service.\n\tEndpointsID = ServiceName // ID to lookup a service endpoint with.\n\tServiceID   = \"STS\"       // ServiceID is a unique identifer of a specific service.\n)\n\n// New creates a new instance of the STS client with a session.\n// If additional configuration is needed for the client instance use the optional\n// aws.Config parameter to add your extra config.\n//\n// Example:\n//     // Create a STS client from just a session.\n//     svc := sts.New(mySession)\n//\n//     // Create a STS client with additional configuration\n//     svc := sts.New(mySession, aws.NewConfig().WithRegion(\"us-west-2\"))\nfunc New(p client.ConfigProvider, cfgs ...*aws.Config) *STS {\n\tc := p.ClientConfig(EndpointsID, cfgs...)\n\treturn newClient(*c.Config, c.Handlers, c.Endpoint, c.SigningRegion, c.SigningName)\n}\n\n// newClient creates, initializes and returns a new service client instance.\nfunc newClient(cfg aws.Config, handlers request.Handlers, endpoint, signingRegion, signingName string) *STS {\n\tsvc := &STS{\n\t\tClient: client.New(\n\t\t\tcfg,\n\t\t\tmetadata.ClientInfo{\n\t\t\t\tServiceName:   ServiceName,\n\t\t\t\tServiceID:     ServiceID,\n\t\t\t\tSigningName:   signingName,\n\t\t\t\tSigningRegion: signingRegion,\n\t\t\t\tEndpoint:      endpoint,\n\t\t\t\tAPIVersion:    \"2011-06-15\",\n\t\t\t},\n\t\t\thandlers,\n\t\t),\n\t}\n\n\t// Handlers\n\tsvc.Handlers.Sign.PushBackNamed(v4.SignRequestHandler)\n\tsvc.Handlers.Build.PushBackNamed(query.BuildHandler)\n\tsvc.Handlers.Unmarshal.PushBackNamed(query.UnmarshalHandler)\n\tsvc.Handlers.UnmarshalMeta.PushBackNamed(query.UnmarshalMetaHandler)\n\tsvc.Handlers.UnmarshalError.PushBackNamed(query.UnmarshalErrorHandler)\n\n\t// Run custom client initialization if present\n\tif initClient != nil {\n\t\tinitClient(svc.Client)\n\t}\n\n\treturn svc\n}\n\n// newRequest creates a new request for a STS operation and runs any\n// custom request initialization.\nfunc (c *STS) newRequest(op *request.Operation, params, data interface{}) *request.Request {\n\treq := c.NewRequest(op, params, data)\n\n\t// Run custom request initialization if present\n\tif initRequest != nil {\n\t\tinitRequest(req)\n\t}\n\n\treturn req\n}\n"
  },
  {
    "path": "vendor/github.com/bgentry/go-netrc/LICENSE",
    "content": "Original version Copyright © 2010 Fazlul Shahriar <fshahriar@gmail.com>. Newer\nportions Copyright © 2014 Blake Gentry <blakesgentry@gmail.com>.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "vendor/github.com/bgentry/go-netrc/netrc/netrc.go",
    "content": "package netrc\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"os\"\n\t\"strings\"\n\t\"sync\"\n\t\"unicode\"\n\t\"unicode/utf8\"\n)\n\ntype tkType int\n\nconst (\n\ttkMachine tkType = iota\n\ttkDefault\n\ttkLogin\n\ttkPassword\n\ttkAccount\n\ttkMacdef\n\ttkComment\n\ttkWhitespace\n)\n\nvar keywords = map[string]tkType{\n\t\"machine\":  tkMachine,\n\t\"default\":  tkDefault,\n\t\"login\":    tkLogin,\n\t\"password\": tkPassword,\n\t\"account\":  tkAccount,\n\t\"macdef\":   tkMacdef,\n\t\"#\":        tkComment,\n}\n\ntype Netrc struct {\n\ttokens     []*token\n\tmachines   []*Machine\n\tmacros     Macros\n\tupdateLock sync.Mutex\n}\n\n// FindMachine returns the Machine in n named by name. If a machine named by\n// name exists, it is returned. If no Machine with name name is found and there\n// is a ``default'' machine, the ``default'' machine is returned. Otherwise, nil\n// is returned.\nfunc (n *Netrc) FindMachine(name string) (m *Machine) {\n\t// TODO(bgentry): not safe for concurrency\n\tvar def *Machine\n\tfor _, m = range n.machines {\n\t\tif m.Name == name {\n\t\t\treturn m\n\t\t}\n\t\tif m.IsDefault() {\n\t\t\tdef = m\n\t\t}\n\t}\n\tif def == nil {\n\t\treturn nil\n\t}\n\treturn def\n}\n\n// MarshalText implements the encoding.TextMarshaler interface to encode a\n// Netrc into text format.\nfunc (n *Netrc) MarshalText() (text []byte, err error) {\n\t// TODO(bgentry): not safe for concurrency\n\tfor i := range n.tokens {\n\t\tswitch n.tokens[i].kind {\n\t\tcase tkComment, tkDefault, tkWhitespace: // always append these types\n\t\t\ttext = append(text, n.tokens[i].rawkind...)\n\t\tdefault:\n\t\t\tif n.tokens[i].value != \"\" { // skip empty-value tokens\n\t\t\t\ttext = append(text, n.tokens[i].rawkind...)\n\t\t\t}\n\t\t}\n\t\tif n.tokens[i].kind == tkMacdef {\n\t\t\ttext = append(text, ' ')\n\t\t\ttext = append(text, n.tokens[i].macroName...)\n\t\t}\n\t\ttext = append(text, n.tokens[i].rawvalue...)\n\t}\n\treturn\n}\n\nfunc (n *Netrc) NewMachine(name, login, password, account string) *Machine {\n\tn.updateLock.Lock()\n\tdefer n.updateLock.Unlock()\n\n\tprefix := \"\\n\"\n\tif len(n.tokens) == 0 {\n\t\tprefix = \"\"\n\t}\n\tm := &Machine{\n\t\tName:     name,\n\t\tLogin:    login,\n\t\tPassword: password,\n\t\tAccount:  account,\n\n\t\tnametoken: &token{\n\t\t\tkind:     tkMachine,\n\t\t\trawkind:  []byte(prefix + \"machine\"),\n\t\t\tvalue:    name,\n\t\t\trawvalue: []byte(\" \" + name),\n\t\t},\n\t\tlogintoken: &token{\n\t\t\tkind:     tkLogin,\n\t\t\trawkind:  []byte(\"\\n\\tlogin\"),\n\t\t\tvalue:    login,\n\t\t\trawvalue: []byte(\" \" + login),\n\t\t},\n\t\tpasstoken: &token{\n\t\t\tkind:     tkPassword,\n\t\t\trawkind:  []byte(\"\\n\\tpassword\"),\n\t\t\tvalue:    password,\n\t\t\trawvalue: []byte(\" \" + password),\n\t\t},\n\t\taccounttoken: &token{\n\t\t\tkind:     tkAccount,\n\t\t\trawkind:  []byte(\"\\n\\taccount\"),\n\t\t\tvalue:    account,\n\t\t\trawvalue: []byte(\" \" + account),\n\t\t},\n\t}\n\tn.insertMachineTokensBeforeDefault(m)\n\tfor i := range n.machines {\n\t\tif n.machines[i].IsDefault() {\n\t\t\tn.machines = append(append(n.machines[:i], m), n.machines[i:]...)\n\t\t\treturn m\n\t\t}\n\t}\n\tn.machines = append(n.machines, m)\n\treturn m\n}\n\nfunc (n *Netrc) insertMachineTokensBeforeDefault(m *Machine) {\n\tnewtokens := []*token{m.nametoken}\n\tif m.logintoken.value != \"\" {\n\t\tnewtokens = append(newtokens, m.logintoken)\n\t}\n\tif m.passtoken.value != \"\" {\n\t\tnewtokens = append(newtokens, m.passtoken)\n\t}\n\tif m.accounttoken.value != \"\" {\n\t\tnewtokens = append(newtokens, m.accounttoken)\n\t}\n\tfor i := range n.tokens {\n\t\tif n.tokens[i].kind == tkDefault {\n\t\t\t// found the default, now insert tokens before it\n\t\t\tn.tokens = append(n.tokens[:i], append(newtokens, n.tokens[i:]...)...)\n\t\t\treturn\n\t\t}\n\t}\n\t// didn't find a default, just add the newtokens to the end\n\tn.tokens = append(n.tokens, newtokens...)\n\treturn\n}\n\nfunc (n *Netrc) RemoveMachine(name string) {\n\tn.updateLock.Lock()\n\tdefer n.updateLock.Unlock()\n\n\tfor i := range n.machines {\n\t\tif n.machines[i] != nil && n.machines[i].Name == name {\n\t\t\tm := n.machines[i]\n\t\t\tfor _, t := range []*token{\n\t\t\t\tm.nametoken, m.logintoken, m.passtoken, m.accounttoken,\n\t\t\t} {\n\t\t\t\tn.removeToken(t)\n\t\t\t}\n\t\t\tn.machines = append(n.machines[:i], n.machines[i+1:]...)\n\t\t\treturn\n\t\t}\n\t}\n}\n\nfunc (n *Netrc) removeToken(t *token) {\n\tif t != nil {\n\t\tfor i := range n.tokens {\n\t\t\tif n.tokens[i] == t {\n\t\t\t\tn.tokens = append(n.tokens[:i], n.tokens[i+1:]...)\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t}\n}\n\n// Machine contains information about a remote machine.\ntype Machine struct {\n\tName     string\n\tLogin    string\n\tPassword string\n\tAccount  string\n\n\tnametoken    *token\n\tlogintoken   *token\n\tpasstoken    *token\n\taccounttoken *token\n}\n\n// IsDefault returns true if the machine is a \"default\" token, denoted by an\n// empty name.\nfunc (m *Machine) IsDefault() bool {\n\treturn m.Name == \"\"\n}\n\n// UpdatePassword sets the password for the Machine m.\nfunc (m *Machine) UpdatePassword(newpass string) {\n\tm.Password = newpass\n\tupdateTokenValue(m.passtoken, newpass)\n}\n\n// UpdateLogin sets the login for the Machine m.\nfunc (m *Machine) UpdateLogin(newlogin string) {\n\tm.Login = newlogin\n\tupdateTokenValue(m.logintoken, newlogin)\n}\n\n// UpdateAccount sets the login for the Machine m.\nfunc (m *Machine) UpdateAccount(newaccount string) {\n\tm.Account = newaccount\n\tupdateTokenValue(m.accounttoken, newaccount)\n}\n\nfunc updateTokenValue(t *token, value string) {\n\toldvalue := t.value\n\tt.value = value\n\tnewraw := make([]byte, len(t.rawvalue))\n\tcopy(newraw, t.rawvalue)\n\tt.rawvalue = append(\n\t\tbytes.TrimSuffix(newraw, []byte(oldvalue)),\n\t\t[]byte(value)...,\n\t)\n}\n\n// Macros contains all the macro definitions in a netrc file.\ntype Macros map[string]string\n\ntype token struct {\n\tkind      tkType\n\tmacroName string\n\tvalue     string\n\trawkind   []byte\n\trawvalue  []byte\n}\n\n// Error represents a netrc file parse error.\ntype Error struct {\n\tLineNum int    // Line number\n\tMsg     string // Error message\n}\n\n// Error returns a string representation of error e.\nfunc (e *Error) Error() string {\n\treturn fmt.Sprintf(\"line %d: %s\", e.LineNum, e.Msg)\n}\n\nfunc (e *Error) BadDefaultOrder() bool {\n\treturn e.Msg == errBadDefaultOrder\n}\n\nconst errBadDefaultOrder = \"default token must appear after all machine tokens\"\n\n// scanLinesKeepPrefix is a split function for a Scanner that returns each line\n// of text. The returned token may include newlines if they are before the\n// first non-space character. The returned line may be empty. The end-of-line\n// marker is one optional carriage return followed by one mandatory newline. In\n// regular expression notation, it is `\\r?\\n`. The last non-empty line of\n// input will be returned even if it has no newline.\nfunc scanLinesKeepPrefix(data []byte, atEOF bool) (advance int, token []byte, err error) {\n\tif atEOF && len(data) == 0 {\n\t\treturn 0, nil, nil\n\t}\n\t// Skip leading spaces.\n\tstart := 0\n\tfor width := 0; start < len(data); start += width {\n\t\tvar r rune\n\t\tr, width = utf8.DecodeRune(data[start:])\n\t\tif !unicode.IsSpace(r) {\n\t\t\tbreak\n\t\t}\n\t}\n\tif i := bytes.IndexByte(data[start:], '\\n'); i >= 0 {\n\t\t// We have a full newline-terminated line.\n\t\treturn start + i, data[0 : start+i], nil\n\t}\n\t// If we're at EOF, we have a final, non-terminated line. Return it.\n\tif atEOF {\n\t\treturn len(data), data, nil\n\t}\n\t// Request more data.\n\treturn 0, nil, nil\n}\n\n// scanWordsKeepPrefix is a split function for a Scanner that returns each\n// space-separated word of text, with prefixing spaces included. It will never\n// return an empty string. The definition of space is set by unicode.IsSpace.\n//\n// Adapted from bufio.ScanWords().\nfunc scanTokensKeepPrefix(data []byte, atEOF bool) (advance int, token []byte, err error) {\n\t// Skip leading spaces.\n\tstart := 0\n\tfor width := 0; start < len(data); start += width {\n\t\tvar r rune\n\t\tr, width = utf8.DecodeRune(data[start:])\n\t\tif !unicode.IsSpace(r) {\n\t\t\tbreak\n\t\t}\n\t}\n\tif atEOF && len(data) == 0 || start == len(data) {\n\t\treturn len(data), data, nil\n\t}\n\tif len(data) > start && data[start] == '#' {\n\t\treturn scanLinesKeepPrefix(data, atEOF)\n\t}\n\t// Scan until space, marking end of word.\n\tfor width, i := 0, start; i < len(data); i += width {\n\t\tvar r rune\n\t\tr, width = utf8.DecodeRune(data[i:])\n\t\tif unicode.IsSpace(r) {\n\t\t\treturn i, data[:i], nil\n\t\t}\n\t}\n\t// If we're at EOF, we have a final, non-empty, non-terminated word. Return it.\n\tif atEOF && len(data) > start {\n\t\treturn len(data), data, nil\n\t}\n\t// Request more data.\n\treturn 0, nil, nil\n}\n\nfunc newToken(rawb []byte) (*token, error) {\n\t_, tkind, err := bufio.ScanWords(rawb, true)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tvar ok bool\n\tt := token{rawkind: rawb}\n\tt.kind, ok = keywords[string(tkind)]\n\tif !ok {\n\t\ttrimmed := strings.TrimSpace(string(tkind))\n\t\tif trimmed == \"\" {\n\t\t\tt.kind = tkWhitespace // whitespace-only, should happen only at EOF\n\t\t\treturn &t, nil\n\t\t}\n\t\tif strings.HasPrefix(trimmed, \"#\") {\n\t\t\tt.kind = tkComment // this is a comment\n\t\t\treturn &t, nil\n\t\t}\n\t\treturn &t, fmt.Errorf(\"keyword expected; got \" + string(tkind))\n\t}\n\treturn &t, nil\n}\n\nfunc scanValue(scanner *bufio.Scanner, pos int) ([]byte, string, int, error) {\n\tif scanner.Scan() {\n\t\traw := scanner.Bytes()\n\t\tpos += bytes.Count(raw, []byte{'\\n'})\n\t\treturn raw, strings.TrimSpace(string(raw)), pos, nil\n\t}\n\tif err := scanner.Err(); err != nil {\n\t\treturn nil, \"\", pos, &Error{pos, err.Error()}\n\t}\n\treturn nil, \"\", pos, nil\n}\n\nfunc parse(r io.Reader, pos int) (*Netrc, error) {\n\tb, err := ioutil.ReadAll(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tnrc := Netrc{machines: make([]*Machine, 0, 20), macros: make(Macros, 10)}\n\n\tdefaultSeen := false\n\tvar currentMacro *token\n\tvar m *Machine\n\tvar t *token\n\tscanner := bufio.NewScanner(bytes.NewReader(b))\n\tscanner.Split(scanTokensKeepPrefix)\n\n\tfor scanner.Scan() {\n\t\trawb := scanner.Bytes()\n\t\tif len(rawb) == 0 {\n\t\t\tbreak\n\t\t}\n\t\tpos += bytes.Count(rawb, []byte{'\\n'})\n\t\tt, err = newToken(rawb)\n\t\tif err != nil {\n\t\t\tif currentMacro == nil {\n\t\t\t\treturn nil, &Error{pos, err.Error()}\n\t\t\t}\n\t\t\tcurrentMacro.rawvalue = append(currentMacro.rawvalue, rawb...)\n\t\t\tcontinue\n\t\t}\n\n\t\tif currentMacro != nil && bytes.Contains(rawb, []byte{'\\n', '\\n'}) {\n\t\t\t// if macro rawvalue + rawb would contain \\n\\n, then macro def is over\n\t\t\tcurrentMacro.value = strings.TrimLeft(string(currentMacro.rawvalue), \"\\r\\n\")\n\t\t\tnrc.macros[currentMacro.macroName] = currentMacro.value\n\t\t\tcurrentMacro = nil\n\t\t}\n\n\t\tswitch t.kind {\n\t\tcase tkMacdef:\n\t\t\tif _, t.macroName, pos, err = scanValue(scanner, pos); err != nil {\n\t\t\t\treturn nil, &Error{pos, err.Error()}\n\t\t\t}\n\t\t\tcurrentMacro = t\n\t\tcase tkDefault:\n\t\t\tif defaultSeen {\n\t\t\t\treturn nil, &Error{pos, \"multiple default token\"}\n\t\t\t}\n\t\t\tif m != nil {\n\t\t\t\tnrc.machines, m = append(nrc.machines, m), nil\n\t\t\t}\n\t\t\tm = new(Machine)\n\t\t\tm.Name = \"\"\n\t\t\tdefaultSeen = true\n\t\tcase tkMachine:\n\t\t\tif defaultSeen {\n\t\t\t\treturn nil, &Error{pos, errBadDefaultOrder}\n\t\t\t}\n\t\t\tif m != nil {\n\t\t\t\tnrc.machines, m = append(nrc.machines, m), nil\n\t\t\t}\n\t\t\tm = new(Machine)\n\t\t\tif t.rawvalue, m.Name, pos, err = scanValue(scanner, pos); err != nil {\n\t\t\t\treturn nil, &Error{pos, err.Error()}\n\t\t\t}\n\t\t\tt.value = m.Name\n\t\t\tm.nametoken = t\n\t\tcase tkLogin:\n\t\t\tif m == nil || m.Login != \"\" {\n\t\t\t\treturn nil, &Error{pos, \"unexpected token login \"}\n\t\t\t}\n\t\t\tif t.rawvalue, m.Login, pos, err = scanValue(scanner, pos); err != nil {\n\t\t\t\treturn nil, &Error{pos, err.Error()}\n\t\t\t}\n\t\t\tt.value = m.Login\n\t\t\tm.logintoken = t\n\t\tcase tkPassword:\n\t\t\tif m == nil || m.Password != \"\" {\n\t\t\t\treturn nil, &Error{pos, \"unexpected token password\"}\n\t\t\t}\n\t\t\tif t.rawvalue, m.Password, pos, err = scanValue(scanner, pos); err != nil {\n\t\t\t\treturn nil, &Error{pos, err.Error()}\n\t\t\t}\n\t\t\tt.value = m.Password\n\t\t\tm.passtoken = t\n\t\tcase tkAccount:\n\t\t\tif m == nil || m.Account != \"\" {\n\t\t\t\treturn nil, &Error{pos, \"unexpected token account\"}\n\t\t\t}\n\t\t\tif t.rawvalue, m.Account, pos, err = scanValue(scanner, pos); err != nil {\n\t\t\t\treturn nil, &Error{pos, err.Error()}\n\t\t\t}\n\t\t\tt.value = m.Account\n\t\t\tm.accounttoken = t\n\t\t}\n\n\t\tnrc.tokens = append(nrc.tokens, t)\n\t}\n\n\tif err := scanner.Err(); err != nil {\n\t\treturn nil, err\n\t}\n\n\tif m != nil {\n\t\tnrc.machines, m = append(nrc.machines, m), nil\n\t}\n\treturn &nrc, nil\n}\n\n// ParseFile opens the file at filename and then passes its io.Reader to\n// Parse().\nfunc ParseFile(filename string) (*Netrc, error) {\n\tfd, err := os.Open(filename)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer fd.Close()\n\treturn Parse(fd)\n}\n\n// Parse parses from the the Reader r as a netrc file and returns the set of\n// machine information and macros defined in it. The ``default'' machine,\n// which is intended to be used when no machine name matches, is identified\n// by an empty machine name. There can be only one ``default'' machine.\n//\n// If there is a parsing error, an Error is returned.\nfunc Parse(r io.Reader) (*Netrc, error) {\n\treturn parse(r, 1)\n}\n\n// FindMachine parses the netrc file identified by filename and returns the\n// Machine named by name. If a problem occurs parsing the file at filename, an\n// error is returned. If a machine named by name exists, it is returned. If no\n// Machine with name name is found and there is a ``default'' machine, the\n// ``default'' machine is returned. Otherwise, nil is returned.\nfunc FindMachine(filename, name string) (m *Machine, err error) {\n\tn, err := ParseFile(filename)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn n.FindMachine(name), nil\n}\n"
  },
  {
    "path": "vendor/github.com/bgentry/speakeasy/LICENSE",
    "content": "MIT License\n\nCopyright (c) 2017 Blake Gentry\n\nThis license applies to the non-Windows portions of this library. The Windows\nportion maintains its own Apache 2.0 license.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "vendor/github.com/bgentry/speakeasy/LICENSE_WINDOWS",
    "content": "                              Apache License\n                        Version 2.0, January 2004\n                     http://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n   \"License\" shall mean the terms and conditions for use, reproduction,\n   and distribution as defined by Sections 1 through 9 of this document.\n\n   \"Licensor\" shall mean the copyright owner or entity authorized by\n   the copyright owner that is granting the License.\n\n   \"Legal Entity\" shall mean the union of the acting entity and all\n   other entities that control, are controlled by, or are under common\n   control with that entity. For the purposes of this definition,\n   \"control\" means (i) the power, direct or indirect, to cause the\n   direction or management of such entity, whether by contract or\n   otherwise, or (ii) ownership of fifty percent (50%) or more of the\n   outstanding shares, or (iii) beneficial ownership of such entity.\n\n   \"You\" (or \"Your\") shall mean an individual or Legal Entity\n   exercising permissions granted by this License.\n\n   \"Source\" form shall mean the preferred form for making modifications,\n   including but not limited to software source code, documentation\n   source, and configuration files.\n\n   \"Object\" form shall mean any form resulting from mechanical\n   transformation or translation of a Source form, including but\n   not limited to compiled object code, generated documentation,\n   and conversions to other media types.\n\n   \"Work\" shall mean the work of authorship, whether in Source or\n   Object form, made available under the License, as indicated by a\n   copyright notice that is included in or attached to the work\n   (an example is provided in the Appendix below).\n\n   \"Derivative Works\" shall mean any work, whether in Source or Object\n   form, that is based on (or derived from) the Work and for which the\n   editorial revisions, annotations, elaborations, or other modifications\n   represent, as a whole, an original work of authorship. For the purposes\n   of this License, Derivative Works shall not include works that remain\n   separable from, or merely link (or bind by name) to the interfaces of,\n   the Work and Derivative Works thereof.\n\n   \"Contribution\" shall mean any work of authorship, including\n   the original version of the Work and any modifications or additions\n   to that Work or Derivative Works thereof, that is intentionally\n   submitted to Licensor for inclusion in the Work by the copyright owner\n   or by an individual or Legal Entity authorized to submit on behalf of\n   the copyright owner. For the purposes of this definition, \"submitted\"\n   means any form of electronic, verbal, or written communication sent\n   to the Licensor or its representatives, including but not limited to\n   communication on electronic mailing lists, source code control systems,\n   and issue tracking systems that are managed by, or on behalf of, the\n   Licensor for the purpose of discussing and improving the Work, but\n   excluding communication that is conspicuously marked or otherwise\n   designated in writing by the copyright owner as \"Not a Contribution.\"\n\n   \"Contributor\" shall mean Licensor and any individual or Legal Entity\n   on behalf of whom a Contribution has been received by Licensor and\n   subsequently incorporated within the Work.\n\n2. Grant of Copyright License. Subject to the terms and conditions of\n   this License, each Contributor hereby grants to You a perpetual,\n   worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n   copyright license to reproduce, prepare Derivative Works of,\n   publicly display, publicly perform, sublicense, and distribute the\n   Work and such Derivative Works in Source or Object form.\n\n3. Grant of Patent License. Subject to the terms and conditions of\n   this License, each Contributor hereby grants to You a perpetual,\n   worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n   (except as stated in this section) patent license to make, have made,\n   use, offer to sell, sell, import, and otherwise transfer the Work,\n   where such license applies only to those patent claims licensable\n   by such Contributor that are necessarily infringed by their\n   Contribution(s) alone or by combination of their Contribution(s)\n   with the Work to which such Contribution(s) was submitted. If You\n   institute patent litigation against any entity (including a\n   cross-claim or counterclaim in a lawsuit) alleging that the Work\n   or a Contribution incorporated within the Work constitutes direct\n   or contributory patent infringement, then any patent licenses\n   granted to You under this License for that Work shall terminate\n   as of the date such litigation is filed.\n\n4. Redistribution. You may reproduce and distribute copies of the\n   Work or Derivative Works thereof in any medium, with or without\n   modifications, and in Source or Object form, provided that You\n   meet the following conditions:\n\n   (a) You must give any other recipients of the Work or\n       Derivative Works a copy of this License; and\n\n   (b) You must cause any modified files to carry prominent notices\n       stating that You changed the files; and\n\n   (c) You must retain, in the Source form of any Derivative Works\n       that You distribute, all copyright, patent, trademark, and\n       attribution notices from the Source form of the Work,\n       excluding those notices that do not pertain to any part of\n       the Derivative Works; and\n\n   (d) If the Work includes a \"NOTICE\" text file as part of its\n       distribution, then any Derivative Works that You distribute must\n       include a readable copy of the attribution notices contained\n       within such NOTICE file, excluding those notices that do not\n       pertain to any part of the Derivative Works, in at least one\n       of the following places: within a NOTICE text file distributed\n       as part of the Derivative Works; within the Source form or\n       documentation, if provided along with the Derivative Works; or,\n       within a display generated by the Derivative Works, if and\n       wherever such third-party notices normally appear. The contents\n       of the NOTICE file are for informational purposes only and\n       do not modify the License. You may add Your own attribution\n       notices within Derivative Works that You distribute, alongside\n       or as an addendum to the NOTICE text from the Work, provided\n       that such additional attribution notices cannot be construed\n       as modifying the License.\n\n   You may add Your own copyright statement to Your modifications and\n   may provide additional or different license terms and conditions\n   for use, reproduction, or distribution of Your modifications, or\n   for any such Derivative Works as a whole, provided Your use,\n   reproduction, and distribution of the Work otherwise complies with\n   the conditions stated in this License.\n\n5. Submission of Contributions. Unless You explicitly state otherwise,\n   any Contribution intentionally submitted for inclusion in the Work\n   by You to the Licensor shall be under the terms and conditions of\n   this License, without any additional terms or conditions.\n   Notwithstanding the above, nothing herein shall supersede or modify\n   the terms of any separate license agreement you may have executed\n   with Licensor regarding such Contributions.\n\n6. Trademarks. This License does not grant permission to use the trade\n   names, trademarks, service marks, or product names of the Licensor,\n   except as required for reasonable and customary use in describing the\n   origin of the Work and reproducing the content of the NOTICE file.\n\n7. Disclaimer of Warranty. Unless required by applicable law or\n   agreed to in writing, Licensor provides the Work (and each\n   Contributor provides its Contributions) on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n   implied, including, without limitation, any warranties or conditions\n   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n   PARTICULAR PURPOSE. You are solely responsible for determining the\n   appropriateness of using or redistributing the Work and assume any\n   risks associated with Your exercise of permissions under this License.\n\n8. Limitation of Liability. In no event and under no legal theory,\n   whether in tort (including negligence), contract, or otherwise,\n   unless required by applicable law (such as deliberate and grossly\n   negligent acts) or agreed to in writing, shall any Contributor be\n   liable to You for damages, including any direct, indirect, special,\n   incidental, or consequential damages of any character arising as a\n   result of this License or out of the use or inability to use the\n   Work (including but not limited to damages for loss of goodwill,\n   work stoppage, computer failure or malfunction, or any and all\n   other commercial damages or losses), even if such Contributor\n   has been advised of the possibility of such damages.\n\n9. Accepting Warranty or Additional Liability. While redistributing\n   the Work or Derivative Works thereof, You may choose to offer,\n   and charge a fee for, acceptance of support, warranty, indemnity,\n   or other liability obligations and/or rights consistent with this\n   License. However, in accepting such obligations, You may act only\n   on Your own behalf and on Your sole responsibility, not on behalf\n   of any other Contributor, and only if You agree to indemnify,\n   defend, and hold each Contributor harmless for any liability\n   incurred by, or claims asserted against, such Contributor by reason\n   of your accepting any such warranty or additional liability.\n\nEND OF TERMS AND CONDITIONS\n\nAPPENDIX: How to apply the Apache License to your work.\n\n   To apply the Apache License to your work, attach the following\n   boilerplate notice, with the fields enclosed by brackets \"[]\"\n   replaced with your own identifying information. (Don't include\n   the brackets!)  The text should be enclosed in the appropriate\n   comment syntax for the file format. We also recommend that a\n   file or class name and description of purpose be included on the\n   same \"printed page\" as the copyright notice for easier\n   identification within third-party archives.\n\nCopyright [2013] [the CloudFoundry Authors]\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n"
  },
  {
    "path": "vendor/github.com/bgentry/speakeasy/speakeasy.go",
    "content": "package speakeasy\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"strings\"\n)\n\n// Ask the user to enter a password with input hidden. prompt is a string to\n// display before the user's input. Returns the provided password, or an error\n// if the command failed.\nfunc Ask(prompt string) (password string, err error) {\n\treturn FAsk(os.Stdout, prompt)\n}\n\n// FAsk is the same as Ask, except it is possible to specify the file to write\n// the prompt to. If 'nil' is passed as the writer, no prompt will be written.\nfunc FAsk(wr io.Writer, prompt string) (password string, err error) {\n\tif wr != nil && prompt != \"\" {\n\t\tfmt.Fprint(wr, prompt) // Display the prompt.\n\t}\n\tpassword, err = getPassword()\n\n\t// Carriage return after the user input.\n\tif wr != nil {\n\t\tfmt.Fprintln(wr, \"\")\n\t}\n\treturn\n}\n\nfunc readline() (value string, err error) {\n\tvar valb []byte\n\tvar n int\n\tb := make([]byte, 1)\n\tfor {\n\t\t// read one byte at a time so we don't accidentally read extra bytes\n\t\tn, err = os.Stdin.Read(b)\n\t\tif err != nil && err != io.EOF {\n\t\t\treturn \"\", err\n\t\t}\n\t\tif n == 0 || b[0] == '\\n' {\n\t\t\tbreak\n\t\t}\n\t\tvalb = append(valb, b[0])\n\t}\n\n\treturn strings.TrimSuffix(string(valb), \"\\r\"), nil\n}\n"
  },
  {
    "path": "vendor/github.com/bgentry/speakeasy/speakeasy_unix.go",
    "content": "// based on https://code.google.com/p/gopass\n// Author: johnsiilver@gmail.com (John Doak)\n//\n// Original code is based on code by RogerV in the golang-nuts thread:\n// https://groups.google.com/group/golang-nuts/browse_thread/thread/40cc41e9d9fc9247\n\n// +build darwin dragonfly freebsd linux netbsd openbsd solaris\n\npackage speakeasy\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"os/signal\"\n\t\"strings\"\n\t\"syscall\"\n)\n\nconst sttyArg0 = \"/bin/stty\"\n\nvar (\n\tsttyArgvEOff = []string{\"stty\", \"-echo\"}\n\tsttyArgvEOn  = []string{\"stty\", \"echo\"}\n)\n\n// getPassword gets input hidden from the terminal from a user. This is\n// accomplished by turning off terminal echo, reading input from the user and\n// finally turning on terminal echo.\nfunc getPassword() (password string, err error) {\n\tsig := make(chan os.Signal, 10)\n\tbrk := make(chan bool)\n\n\t// File descriptors for stdin, stdout, and stderr.\n\tfd := []uintptr{os.Stdin.Fd(), os.Stdout.Fd(), os.Stderr.Fd()}\n\n\t// Setup notifications of termination signals to channel sig, create a process to\n\t// watch for these signals so we can turn back on echo if need be.\n\tsignal.Notify(sig, syscall.SIGHUP, syscall.SIGINT, syscall.SIGKILL, syscall.SIGQUIT,\n\t\tsyscall.SIGTERM)\n\tgo catchSignal(fd, sig, brk)\n\n\t// Turn off the terminal echo.\n\tpid, err := echoOff(fd)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\t// Turn on the terminal echo and stop listening for signals.\n\tdefer signal.Stop(sig)\n\tdefer close(brk)\n\tdefer echoOn(fd)\n\n\tsyscall.Wait4(pid, nil, 0, nil)\n\n\tline, err := readline()\n\tif err == nil {\n\t\tpassword = strings.TrimSpace(line)\n\t} else {\n\t\terr = fmt.Errorf(\"failed during password entry: %s\", err)\n\t}\n\n\treturn password, err\n}\n\n// echoOff turns off the terminal echo.\nfunc echoOff(fd []uintptr) (int, error) {\n\tpid, err := syscall.ForkExec(sttyArg0, sttyArgvEOff, &syscall.ProcAttr{Dir: \"\", Files: fd})\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"failed turning off console echo for password entry:\\n\\t%s\", err)\n\t}\n\treturn pid, nil\n}\n\n// echoOn turns back on the terminal echo.\nfunc echoOn(fd []uintptr) {\n\t// Turn on the terminal echo.\n\tpid, e := syscall.ForkExec(sttyArg0, sttyArgvEOn, &syscall.ProcAttr{Dir: \"\", Files: fd})\n\tif e == nil {\n\t\tsyscall.Wait4(pid, nil, 0, nil)\n\t}\n}\n\n// catchSignal tries to catch SIGKILL, SIGQUIT and SIGINT so that we can turn\n// terminal echo back on before the program ends. Otherwise the user is left\n// with echo off on their terminal.\nfunc catchSignal(fd []uintptr, sig chan os.Signal, brk chan bool) {\n\tselect {\n\tcase <-sig:\n\t\techoOn(fd)\n\t\tos.Exit(-1)\n\tcase <-brk:\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/bgentry/speakeasy/speakeasy_windows.go",
    "content": "// +build windows\n\npackage speakeasy\n\nimport (\n\t\"syscall\"\n)\n\n// SetConsoleMode function can be used to change value of ENABLE_ECHO_INPUT:\n// http://msdn.microsoft.com/en-us/library/windows/desktop/ms686033(v=vs.85).aspx\nconst ENABLE_ECHO_INPUT = 0x0004\n\nfunc getPassword() (password string, err error) {\n\tvar oldMode uint32\n\n\terr = syscall.GetConsoleMode(syscall.Stdin, &oldMode)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tvar newMode uint32 = (oldMode &^ ENABLE_ECHO_INPUT)\n\n\terr = setConsoleMode(syscall.Stdin, newMode)\n\tdefer setConsoleMode(syscall.Stdin, oldMode)\n\tif err != nil {\n\t\treturn\n\t}\n\n\treturn readline()\n}\n\nfunc setConsoleMode(console syscall.Handle, mode uint32) (err error) {\n\tdll := syscall.MustLoadDLL(\"kernel32\")\n\tproc := dll.MustFindProc(\"SetConsoleMode\")\n\tr, _, err := proc.Call(uintptr(console), uintptr(mode))\n\n\tif r == 0 {\n\t\treturn err\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/blang/semver/LICENSE",
    "content": "The MIT License\n\nCopyright (c) 2014 Benedikt Lang <github at benediktlang.de>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n"
  },
  {
    "path": "vendor/github.com/blang/semver/json.go",
    "content": "package semver\n\nimport (\n\t\"encoding/json\"\n)\n\n// MarshalJSON implements the encoding/json.Marshaler interface.\nfunc (v Version) MarshalJSON() ([]byte, error) {\n\treturn json.Marshal(v.String())\n}\n\n// UnmarshalJSON implements the encoding/json.Unmarshaler interface.\nfunc (v *Version) UnmarshalJSON(data []byte) (err error) {\n\tvar versionString string\n\n\tif err = json.Unmarshal(data, &versionString); err != nil {\n\t\treturn\n\t}\n\n\t*v, err = Parse(versionString)\n\n\treturn\n}\n"
  },
  {
    "path": "vendor/github.com/blang/semver/range.go",
    "content": "package semver\n\nimport (\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n\t\"unicode\"\n)\n\ntype wildcardType int\n\nconst (\n\tnoneWildcard  wildcardType = iota\n\tmajorWildcard wildcardType = 1\n\tminorWildcard wildcardType = 2\n\tpatchWildcard wildcardType = 3\n)\n\nfunc wildcardTypefromInt(i int) wildcardType {\n\tswitch i {\n\tcase 1:\n\t\treturn majorWildcard\n\tcase 2:\n\t\treturn minorWildcard\n\tcase 3:\n\t\treturn patchWildcard\n\tdefault:\n\t\treturn noneWildcard\n\t}\n}\n\ntype comparator func(Version, Version) bool\n\nvar (\n\tcompEQ comparator = func(v1 Version, v2 Version) bool {\n\t\treturn v1.Compare(v2) == 0\n\t}\n\tcompNE = func(v1 Version, v2 Version) bool {\n\t\treturn v1.Compare(v2) != 0\n\t}\n\tcompGT = func(v1 Version, v2 Version) bool {\n\t\treturn v1.Compare(v2) == 1\n\t}\n\tcompGE = func(v1 Version, v2 Version) bool {\n\t\treturn v1.Compare(v2) >= 0\n\t}\n\tcompLT = func(v1 Version, v2 Version) bool {\n\t\treturn v1.Compare(v2) == -1\n\t}\n\tcompLE = func(v1 Version, v2 Version) bool {\n\t\treturn v1.Compare(v2) <= 0\n\t}\n)\n\ntype versionRange struct {\n\tv Version\n\tc comparator\n}\n\n// rangeFunc creates a Range from the given versionRange.\nfunc (vr *versionRange) rangeFunc() Range {\n\treturn Range(func(v Version) bool {\n\t\treturn vr.c(v, vr.v)\n\t})\n}\n\n// Range represents a range of versions.\n// A Range can be used to check if a Version satisfies it:\n//\n//     range, err := semver.ParseRange(\">1.0.0 <2.0.0\")\n//     range(semver.MustParse(\"1.1.1\") // returns true\ntype Range func(Version) bool\n\n// OR combines the existing Range with another Range using logical OR.\nfunc (rf Range) OR(f Range) Range {\n\treturn Range(func(v Version) bool {\n\t\treturn rf(v) || f(v)\n\t})\n}\n\n// AND combines the existing Range with another Range using logical AND.\nfunc (rf Range) AND(f Range) Range {\n\treturn Range(func(v Version) bool {\n\t\treturn rf(v) && f(v)\n\t})\n}\n\n// ParseRange parses a range and returns a Range.\n// If the range could not be parsed an error is returned.\n//\n// Valid ranges are:\n//   - \"<1.0.0\"\n//   - \"<=1.0.0\"\n//   - \">1.0.0\"\n//   - \">=1.0.0\"\n//   - \"1.0.0\", \"=1.0.0\", \"==1.0.0\"\n//   - \"!1.0.0\", \"!=1.0.0\"\n//\n// A Range can consist of multiple ranges separated by space:\n// Ranges can be linked by logical AND:\n//   - \">1.0.0 <2.0.0\" would match between both ranges, so \"1.1.1\" and \"1.8.7\" but not \"1.0.0\" or \"2.0.0\"\n//   - \">1.0.0 <3.0.0 !2.0.3-beta.2\" would match every version between 1.0.0 and 3.0.0 except 2.0.3-beta.2\n//\n// Ranges can also be linked by logical OR:\n//   - \"<2.0.0 || >=3.0.0\" would match \"1.x.x\" and \"3.x.x\" but not \"2.x.x\"\n//\n// AND has a higher precedence than OR. It's not possible to use brackets.\n//\n// Ranges can be combined by both AND and OR\n//\n//  - `>1.0.0 <2.0.0 || >3.0.0 !4.2.1` would match `1.2.3`, `1.9.9`, `3.1.1`, but not `4.2.1`, `2.1.1`\nfunc ParseRange(s string) (Range, error) {\n\tparts := splitAndTrim(s)\n\torParts, err := splitORParts(parts)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\texpandedParts, err := expandWildcardVersion(orParts)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tvar orFn Range\n\tfor _, p := range expandedParts {\n\t\tvar andFn Range\n\t\tfor _, ap := range p {\n\t\t\topStr, vStr, err := splitComparatorVersion(ap)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tvr, err := buildVersionRange(opStr, vStr)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"Could not parse Range %q: %s\", ap, err)\n\t\t\t}\n\t\t\trf := vr.rangeFunc()\n\n\t\t\t// Set function\n\t\t\tif andFn == nil {\n\t\t\t\tandFn = rf\n\t\t\t} else { // Combine with existing function\n\t\t\t\tandFn = andFn.AND(rf)\n\t\t\t}\n\t\t}\n\t\tif orFn == nil {\n\t\t\torFn = andFn\n\t\t} else {\n\t\t\torFn = orFn.OR(andFn)\n\t\t}\n\n\t}\n\treturn orFn, nil\n}\n\n// splitORParts splits the already cleaned parts by '||'.\n// Checks for invalid positions of the operator and returns an\n// error if found.\nfunc splitORParts(parts []string) ([][]string, error) {\n\tvar ORparts [][]string\n\tlast := 0\n\tfor i, p := range parts {\n\t\tif p == \"||\" {\n\t\t\tif i == 0 {\n\t\t\t\treturn nil, fmt.Errorf(\"First element in range is '||'\")\n\t\t\t}\n\t\t\tORparts = append(ORparts, parts[last:i])\n\t\t\tlast = i + 1\n\t\t}\n\t}\n\tif last == len(parts) {\n\t\treturn nil, fmt.Errorf(\"Last element in range is '||'\")\n\t}\n\tORparts = append(ORparts, parts[last:])\n\treturn ORparts, nil\n}\n\n// buildVersionRange takes a slice of 2: operator and version\n// and builds a versionRange, otherwise an error.\nfunc buildVersionRange(opStr, vStr string) (*versionRange, error) {\n\tc := parseComparator(opStr)\n\tif c == nil {\n\t\treturn nil, fmt.Errorf(\"Could not parse comparator %q in %q\", opStr, strings.Join([]string{opStr, vStr}, \"\"))\n\t}\n\tv, err := Parse(vStr)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"Could not parse version %q in %q: %s\", vStr, strings.Join([]string{opStr, vStr}, \"\"), err)\n\t}\n\n\treturn &versionRange{\n\t\tv: v,\n\t\tc: c,\n\t}, nil\n\n}\n\n// inArray checks if a byte is contained in an array of bytes\nfunc inArray(s byte, list []byte) bool {\n\tfor _, el := range list {\n\t\tif el == s {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// splitAndTrim splits a range string by spaces and cleans whitespaces\nfunc splitAndTrim(s string) (result []string) {\n\tlast := 0\n\tvar lastChar byte\n\texcludeFromSplit := []byte{'>', '<', '='}\n\tfor i := 0; i < len(s); i++ {\n\t\tif s[i] == ' ' && !inArray(lastChar, excludeFromSplit) {\n\t\t\tif last < i-1 {\n\t\t\t\tresult = append(result, s[last:i])\n\t\t\t}\n\t\t\tlast = i + 1\n\t\t} else if s[i] != ' ' {\n\t\t\tlastChar = s[i]\n\t\t}\n\t}\n\tif last < len(s)-1 {\n\t\tresult = append(result, s[last:])\n\t}\n\n\tfor i, v := range result {\n\t\tresult[i] = strings.Replace(v, \" \", \"\", -1)\n\t}\n\n\t// parts := strings.Split(s, \" \")\n\t// for _, x := range parts {\n\t// \tif s := strings.TrimSpace(x); len(s) != 0 {\n\t// \t\tresult = append(result, s)\n\t// \t}\n\t// }\n\treturn\n}\n\n// splitComparatorVersion splits the comparator from the version.\n// Input must be free of leading or trailing spaces.\nfunc splitComparatorVersion(s string) (string, string, error) {\n\ti := strings.IndexFunc(s, unicode.IsDigit)\n\tif i == -1 {\n\t\treturn \"\", \"\", fmt.Errorf(\"Could not get version from string: %q\", s)\n\t}\n\treturn strings.TrimSpace(s[0:i]), s[i:], nil\n}\n\n// getWildcardType will return the type of wildcard that the\n// passed version contains\nfunc getWildcardType(vStr string) wildcardType {\n\tparts := strings.Split(vStr, \".\")\n\tnparts := len(parts)\n\twildcard := parts[nparts-1]\n\n\tpossibleWildcardType := wildcardTypefromInt(nparts)\n\tif wildcard == \"x\" {\n\t\treturn possibleWildcardType\n\t}\n\n\treturn noneWildcard\n}\n\n// createVersionFromWildcard will convert a wildcard version\n// into a regular version, replacing 'x's with '0's, handling\n// special cases like '1.x.x' and '1.x'\nfunc createVersionFromWildcard(vStr string) string {\n\t// handle 1.x.x\n\tvStr2 := strings.Replace(vStr, \".x.x\", \".x\", 1)\n\tvStr2 = strings.Replace(vStr2, \".x\", \".0\", 1)\n\tparts := strings.Split(vStr2, \".\")\n\n\t// handle 1.x\n\tif len(parts) == 2 {\n\t\treturn vStr2 + \".0\"\n\t}\n\n\treturn vStr2\n}\n\n// incrementMajorVersion will increment the major version\n// of the passed version\nfunc incrementMajorVersion(vStr string) (string, error) {\n\tparts := strings.Split(vStr, \".\")\n\ti, err := strconv.Atoi(parts[0])\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tparts[0] = strconv.Itoa(i + 1)\n\n\treturn strings.Join(parts, \".\"), nil\n}\n\n// incrementMajorVersion will increment the minor version\n// of the passed version\nfunc incrementMinorVersion(vStr string) (string, error) {\n\tparts := strings.Split(vStr, \".\")\n\ti, err := strconv.Atoi(parts[1])\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tparts[1] = strconv.Itoa(i + 1)\n\n\treturn strings.Join(parts, \".\"), nil\n}\n\n// expandWildcardVersion will expand wildcards inside versions\n// following these rules:\n//\n// * when dealing with patch wildcards:\n// >= 1.2.x    will become    >= 1.2.0\n// <= 1.2.x    will become    <  1.3.0\n// >  1.2.x    will become    >= 1.3.0\n// <  1.2.x    will become    <  1.2.0\n// != 1.2.x    will become    <  1.2.0 >= 1.3.0\n//\n// * when dealing with minor wildcards:\n// >= 1.x      will become    >= 1.0.0\n// <= 1.x      will become    <  2.0.0\n// >  1.x      will become    >= 2.0.0\n// <  1.0      will become    <  1.0.0\n// != 1.x      will become    <  1.0.0 >= 2.0.0\n//\n// * when dealing with wildcards without\n// version operator:\n// 1.2.x       will become    >= 1.2.0 < 1.3.0\n// 1.x         will become    >= 1.0.0 < 2.0.0\nfunc expandWildcardVersion(parts [][]string) ([][]string, error) {\n\tvar expandedParts [][]string\n\tfor _, p := range parts {\n\t\tvar newParts []string\n\t\tfor _, ap := range p {\n\t\t\tif strings.Contains(ap, \"x\") {\n\t\t\t\topStr, vStr, err := splitComparatorVersion(ap)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\n\t\t\t\tversionWildcardType := getWildcardType(vStr)\n\t\t\t\tflatVersion := createVersionFromWildcard(vStr)\n\n\t\t\t\tvar resultOperator string\n\t\t\t\tvar shouldIncrementVersion bool\n\t\t\t\tswitch opStr {\n\t\t\t\tcase \">\":\n\t\t\t\t\tresultOperator = \">=\"\n\t\t\t\t\tshouldIncrementVersion = true\n\t\t\t\tcase \">=\":\n\t\t\t\t\tresultOperator = \">=\"\n\t\t\t\tcase \"<\":\n\t\t\t\t\tresultOperator = \"<\"\n\t\t\t\tcase \"<=\":\n\t\t\t\t\tresultOperator = \"<\"\n\t\t\t\t\tshouldIncrementVersion = true\n\t\t\t\tcase \"\", \"=\", \"==\":\n\t\t\t\t\tnewParts = append(newParts, \">=\"+flatVersion)\n\t\t\t\t\tresultOperator = \"<\"\n\t\t\t\t\tshouldIncrementVersion = true\n\t\t\t\tcase \"!=\", \"!\":\n\t\t\t\t\tnewParts = append(newParts, \"<\"+flatVersion)\n\t\t\t\t\tresultOperator = \">=\"\n\t\t\t\t\tshouldIncrementVersion = true\n\t\t\t\t}\n\n\t\t\t\tvar resultVersion string\n\t\t\t\tif shouldIncrementVersion {\n\t\t\t\t\tswitch versionWildcardType {\n\t\t\t\t\tcase patchWildcard:\n\t\t\t\t\t\tresultVersion, _ = incrementMinorVersion(flatVersion)\n\t\t\t\t\tcase minorWildcard:\n\t\t\t\t\t\tresultVersion, _ = incrementMajorVersion(flatVersion)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tresultVersion = flatVersion\n\t\t\t\t}\n\n\t\t\t\tap = resultOperator + resultVersion\n\t\t\t}\n\t\t\tnewParts = append(newParts, ap)\n\t\t}\n\t\texpandedParts = append(expandedParts, newParts)\n\t}\n\n\treturn expandedParts, nil\n}\n\nfunc parseComparator(s string) comparator {\n\tswitch s {\n\tcase \"==\":\n\t\tfallthrough\n\tcase \"\":\n\t\tfallthrough\n\tcase \"=\":\n\t\treturn compEQ\n\tcase \">\":\n\t\treturn compGT\n\tcase \">=\":\n\t\treturn compGE\n\tcase \"<\":\n\t\treturn compLT\n\tcase \"<=\":\n\t\treturn compLE\n\tcase \"!\":\n\t\tfallthrough\n\tcase \"!=\":\n\t\treturn compNE\n\t}\n\n\treturn nil\n}\n\n// MustParseRange is like ParseRange but panics if the range cannot be parsed.\nfunc MustParseRange(s string) Range {\n\tr, err := ParseRange(s)\n\tif err != nil {\n\t\tpanic(`semver: ParseRange(` + s + `): ` + err.Error())\n\t}\n\treturn r\n}\n"
  },
  {
    "path": "vendor/github.com/blang/semver/semver.go",
    "content": "package semver\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n)\n\nconst (\n\tnumbers  string = \"0123456789\"\n\talphas          = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-\"\n\talphanum        = alphas + numbers\n)\n\n// SpecVersion is the latest fully supported spec version of semver\nvar SpecVersion = Version{\n\tMajor: 2,\n\tMinor: 0,\n\tPatch: 0,\n}\n\n// Version represents a semver compatible version\ntype Version struct {\n\tMajor uint64\n\tMinor uint64\n\tPatch uint64\n\tPre   []PRVersion\n\tBuild []string //No Precedence\n}\n\n// Version to string\nfunc (v Version) String() string {\n\tb := make([]byte, 0, 5)\n\tb = strconv.AppendUint(b, v.Major, 10)\n\tb = append(b, '.')\n\tb = strconv.AppendUint(b, v.Minor, 10)\n\tb = append(b, '.')\n\tb = strconv.AppendUint(b, v.Patch, 10)\n\n\tif len(v.Pre) > 0 {\n\t\tb = append(b, '-')\n\t\tb = append(b, v.Pre[0].String()...)\n\n\t\tfor _, pre := range v.Pre[1:] {\n\t\t\tb = append(b, '.')\n\t\t\tb = append(b, pre.String()...)\n\t\t}\n\t}\n\n\tif len(v.Build) > 0 {\n\t\tb = append(b, '+')\n\t\tb = append(b, v.Build[0]...)\n\n\t\tfor _, build := range v.Build[1:] {\n\t\t\tb = append(b, '.')\n\t\t\tb = append(b, build...)\n\t\t}\n\t}\n\n\treturn string(b)\n}\n\n// Equals checks if v is equal to o.\nfunc (v Version) Equals(o Version) bool {\n\treturn (v.Compare(o) == 0)\n}\n\n// EQ checks if v is equal to o.\nfunc (v Version) EQ(o Version) bool {\n\treturn (v.Compare(o) == 0)\n}\n\n// NE checks if v is not equal to o.\nfunc (v Version) NE(o Version) bool {\n\treturn (v.Compare(o) != 0)\n}\n\n// GT checks if v is greater than o.\nfunc (v Version) GT(o Version) bool {\n\treturn (v.Compare(o) == 1)\n}\n\n// GTE checks if v is greater than or equal to o.\nfunc (v Version) GTE(o Version) bool {\n\treturn (v.Compare(o) >= 0)\n}\n\n// GE checks if v is greater than or equal to o.\nfunc (v Version) GE(o Version) bool {\n\treturn (v.Compare(o) >= 0)\n}\n\n// LT checks if v is less than o.\nfunc (v Version) LT(o Version) bool {\n\treturn (v.Compare(o) == -1)\n}\n\n// LTE checks if v is less than or equal to o.\nfunc (v Version) LTE(o Version) bool {\n\treturn (v.Compare(o) <= 0)\n}\n\n// LE checks if v is less than or equal to o.\nfunc (v Version) LE(o Version) bool {\n\treturn (v.Compare(o) <= 0)\n}\n\n// Compare compares Versions v to o:\n// -1 == v is less than o\n// 0 == v is equal to o\n// 1 == v is greater than o\nfunc (v Version) Compare(o Version) int {\n\tif v.Major != o.Major {\n\t\tif v.Major > o.Major {\n\t\t\treturn 1\n\t\t}\n\t\treturn -1\n\t}\n\tif v.Minor != o.Minor {\n\t\tif v.Minor > o.Minor {\n\t\t\treturn 1\n\t\t}\n\t\treturn -1\n\t}\n\tif v.Patch != o.Patch {\n\t\tif v.Patch > o.Patch {\n\t\t\treturn 1\n\t\t}\n\t\treturn -1\n\t}\n\n\t// Quick comparison if a version has no prerelease versions\n\tif len(v.Pre) == 0 && len(o.Pre) == 0 {\n\t\treturn 0\n\t} else if len(v.Pre) == 0 && len(o.Pre) > 0 {\n\t\treturn 1\n\t} else if len(v.Pre) > 0 && len(o.Pre) == 0 {\n\t\treturn -1\n\t}\n\n\ti := 0\n\tfor ; i < len(v.Pre) && i < len(o.Pre); i++ {\n\t\tif comp := v.Pre[i].Compare(o.Pre[i]); comp == 0 {\n\t\t\tcontinue\n\t\t} else if comp == 1 {\n\t\t\treturn 1\n\t\t} else {\n\t\t\treturn -1\n\t\t}\n\t}\n\n\t// If all pr versions are the equal but one has further prversion, this one greater\n\tif i == len(v.Pre) && i == len(o.Pre) {\n\t\treturn 0\n\t} else if i == len(v.Pre) && i < len(o.Pre) {\n\t\treturn -1\n\t} else {\n\t\treturn 1\n\t}\n\n}\n\n// IncrementPatch increments the patch version\nfunc (v *Version) IncrementPatch() error {\n\tif v.Major == 0 {\n\t\treturn fmt.Errorf(\"Patch version can not be incremented for %q\", v.String())\n\t}\n\tv.Patch += 1\n\treturn nil\n}\n\n// IncrementMinor increments the minor version\nfunc (v *Version) IncrementMinor() error {\n\tif v.Major == 0 {\n\t\treturn fmt.Errorf(\"Minor version can not be incremented for %q\", v.String())\n\t}\n\tv.Minor += 1\n\tv.Patch = 0\n\treturn nil\n}\n\n// IncrementMajor increments the major version\nfunc (v *Version) IncrementMajor() error {\n\tif v.Major == 0 {\n\t\treturn fmt.Errorf(\"Major version can not be incremented for %q\", v.String())\n\t}\n\tv.Major += 1\n\tv.Minor = 0\n\tv.Patch = 0\n\treturn nil\n}\n\n// Validate validates v and returns error in case\nfunc (v Version) Validate() error {\n\t// Major, Minor, Patch already validated using uint64\n\n\tfor _, pre := range v.Pre {\n\t\tif !pre.IsNum { //Numeric prerelease versions already uint64\n\t\t\tif len(pre.VersionStr) == 0 {\n\t\t\t\treturn fmt.Errorf(\"Prerelease can not be empty %q\", pre.VersionStr)\n\t\t\t}\n\t\t\tif !containsOnly(pre.VersionStr, alphanum) {\n\t\t\t\treturn fmt.Errorf(\"Invalid character(s) found in prerelease %q\", pre.VersionStr)\n\t\t\t}\n\t\t}\n\t}\n\n\tfor _, build := range v.Build {\n\t\tif len(build) == 0 {\n\t\t\treturn fmt.Errorf(\"Build meta data can not be empty %q\", build)\n\t\t}\n\t\tif !containsOnly(build, alphanum) {\n\t\t\treturn fmt.Errorf(\"Invalid character(s) found in build meta data %q\", build)\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// New is an alias for Parse and returns a pointer, parses version string and returns a validated Version or error\nfunc New(s string) (vp *Version, err error) {\n\tv, err := Parse(s)\n\tvp = &v\n\treturn\n}\n\n// Make is an alias for Parse, parses version string and returns a validated Version or error\nfunc Make(s string) (Version, error) {\n\treturn Parse(s)\n}\n\n// ParseTolerant allows for certain version specifications that do not strictly adhere to semver\n// specs to be parsed by this library. It does so by normalizing versions before passing them to\n// Parse(). It currently trims spaces, removes a \"v\" prefix, adds a 0 patch number to versions\n// with only major and minor components specified, and removes leading 0s.\nfunc ParseTolerant(s string) (Version, error) {\n\ts = strings.TrimSpace(s)\n\ts = strings.TrimPrefix(s, \"v\")\n\n\t// Split into major.minor.(patch+pr+meta)\n\tparts := strings.SplitN(s, \".\", 3)\n\t// Remove leading zeros.\n\tfor i, p := range parts {\n\t\tif len(p) > 1 {\n\t\t\tparts[i] = strings.TrimPrefix(p, \"0\")\n\t\t}\n\t}\n\t// Fill up shortened versions.\n\tif len(parts) < 3 {\n\t\tif strings.ContainsAny(parts[len(parts)-1], \"+-\") {\n\t\t\treturn Version{}, errors.New(\"Short version cannot contain PreRelease/Build meta data\")\n\t\t}\n\t\tfor len(parts) < 3 {\n\t\t\tparts = append(parts, \"0\")\n\t\t}\n\t}\n\ts = strings.Join(parts, \".\")\n\n\treturn Parse(s)\n}\n\n// Parse parses version string and returns a validated Version or error\nfunc Parse(s string) (Version, error) {\n\tif len(s) == 0 {\n\t\treturn Version{}, errors.New(\"Version string empty\")\n\t}\n\n\t// Split into major.minor.(patch+pr+meta)\n\tparts := strings.SplitN(s, \".\", 3)\n\tif len(parts) != 3 {\n\t\treturn Version{}, errors.New(\"No Major.Minor.Patch elements found\")\n\t}\n\n\t// Major\n\tif !containsOnly(parts[0], numbers) {\n\t\treturn Version{}, fmt.Errorf(\"Invalid character(s) found in major number %q\", parts[0])\n\t}\n\tif hasLeadingZeroes(parts[0]) {\n\t\treturn Version{}, fmt.Errorf(\"Major number must not contain leading zeroes %q\", parts[0])\n\t}\n\tmajor, err := strconv.ParseUint(parts[0], 10, 64)\n\tif err != nil {\n\t\treturn Version{}, err\n\t}\n\n\t// Minor\n\tif !containsOnly(parts[1], numbers) {\n\t\treturn Version{}, fmt.Errorf(\"Invalid character(s) found in minor number %q\", parts[1])\n\t}\n\tif hasLeadingZeroes(parts[1]) {\n\t\treturn Version{}, fmt.Errorf(\"Minor number must not contain leading zeroes %q\", parts[1])\n\t}\n\tminor, err := strconv.ParseUint(parts[1], 10, 64)\n\tif err != nil {\n\t\treturn Version{}, err\n\t}\n\n\tv := Version{}\n\tv.Major = major\n\tv.Minor = minor\n\n\tvar build, prerelease []string\n\tpatchStr := parts[2]\n\n\tif buildIndex := strings.IndexRune(patchStr, '+'); buildIndex != -1 {\n\t\tbuild = strings.Split(patchStr[buildIndex+1:], \".\")\n\t\tpatchStr = patchStr[:buildIndex]\n\t}\n\n\tif preIndex := strings.IndexRune(patchStr, '-'); preIndex != -1 {\n\t\tprerelease = strings.Split(patchStr[preIndex+1:], \".\")\n\t\tpatchStr = patchStr[:preIndex]\n\t}\n\n\tif !containsOnly(patchStr, numbers) {\n\t\treturn Version{}, fmt.Errorf(\"Invalid character(s) found in patch number %q\", patchStr)\n\t}\n\tif hasLeadingZeroes(patchStr) {\n\t\treturn Version{}, fmt.Errorf(\"Patch number must not contain leading zeroes %q\", patchStr)\n\t}\n\tpatch, err := strconv.ParseUint(patchStr, 10, 64)\n\tif err != nil {\n\t\treturn Version{}, err\n\t}\n\n\tv.Patch = patch\n\n\t// Prerelease\n\tfor _, prstr := range prerelease {\n\t\tparsedPR, err := NewPRVersion(prstr)\n\t\tif err != nil {\n\t\t\treturn Version{}, err\n\t\t}\n\t\tv.Pre = append(v.Pre, parsedPR)\n\t}\n\n\t// Build meta data\n\tfor _, str := range build {\n\t\tif len(str) == 0 {\n\t\t\treturn Version{}, errors.New(\"Build meta data is empty\")\n\t\t}\n\t\tif !containsOnly(str, alphanum) {\n\t\t\treturn Version{}, fmt.Errorf(\"Invalid character(s) found in build meta data %q\", str)\n\t\t}\n\t\tv.Build = append(v.Build, str)\n\t}\n\n\treturn v, nil\n}\n\n// MustParse is like Parse but panics if the version cannot be parsed.\nfunc MustParse(s string) Version {\n\tv, err := Parse(s)\n\tif err != nil {\n\t\tpanic(`semver: Parse(` + s + `): ` + err.Error())\n\t}\n\treturn v\n}\n\n// PRVersion represents a PreRelease Version\ntype PRVersion struct {\n\tVersionStr string\n\tVersionNum uint64\n\tIsNum      bool\n}\n\n// NewPRVersion creates a new valid prerelease version\nfunc NewPRVersion(s string) (PRVersion, error) {\n\tif len(s) == 0 {\n\t\treturn PRVersion{}, errors.New(\"Prerelease is empty\")\n\t}\n\tv := PRVersion{}\n\tif containsOnly(s, numbers) {\n\t\tif hasLeadingZeroes(s) {\n\t\t\treturn PRVersion{}, fmt.Errorf(\"Numeric PreRelease version must not contain leading zeroes %q\", s)\n\t\t}\n\t\tnum, err := strconv.ParseUint(s, 10, 64)\n\n\t\t// Might never be hit, but just in case\n\t\tif err != nil {\n\t\t\treturn PRVersion{}, err\n\t\t}\n\t\tv.VersionNum = num\n\t\tv.IsNum = true\n\t} else if containsOnly(s, alphanum) {\n\t\tv.VersionStr = s\n\t\tv.IsNum = false\n\t} else {\n\t\treturn PRVersion{}, fmt.Errorf(\"Invalid character(s) found in prerelease %q\", s)\n\t}\n\treturn v, nil\n}\n\n// IsNumeric checks if prerelease-version is numeric\nfunc (v PRVersion) IsNumeric() bool {\n\treturn v.IsNum\n}\n\n// Compare compares two PreRelease Versions v and o:\n// -1 == v is less than o\n// 0 == v is equal to o\n// 1 == v is greater than o\nfunc (v PRVersion) Compare(o PRVersion) int {\n\tif v.IsNum && !o.IsNum {\n\t\treturn -1\n\t} else if !v.IsNum && o.IsNum {\n\t\treturn 1\n\t} else if v.IsNum && o.IsNum {\n\t\tif v.VersionNum == o.VersionNum {\n\t\t\treturn 0\n\t\t} else if v.VersionNum > o.VersionNum {\n\t\t\treturn 1\n\t\t} else {\n\t\t\treturn -1\n\t\t}\n\t} else { // both are Alphas\n\t\tif v.VersionStr == o.VersionStr {\n\t\t\treturn 0\n\t\t} else if v.VersionStr > o.VersionStr {\n\t\t\treturn 1\n\t\t} else {\n\t\t\treturn -1\n\t\t}\n\t}\n}\n\n// PreRelease version to string\nfunc (v PRVersion) String() string {\n\tif v.IsNum {\n\t\treturn strconv.FormatUint(v.VersionNum, 10)\n\t}\n\treturn v.VersionStr\n}\n\nfunc containsOnly(s string, set string) bool {\n\treturn strings.IndexFunc(s, func(r rune) bool {\n\t\treturn !strings.ContainsRune(set, r)\n\t}) == -1\n}\n\nfunc hasLeadingZeroes(s string) bool {\n\treturn len(s) > 1 && s[0] == '0'\n}\n\n// NewBuildVersion creates a new valid build version\nfunc NewBuildVersion(s string) (string, error) {\n\tif len(s) == 0 {\n\t\treturn \"\", errors.New(\"Buildversion is empty\")\n\t}\n\tif !containsOnly(s, alphanum) {\n\t\treturn \"\", fmt.Errorf(\"Invalid character(s) found in build meta data %q\", s)\n\t}\n\treturn s, nil\n}\n"
  },
  {
    "path": "vendor/github.com/blang/semver/sort.go",
    "content": "package semver\n\nimport (\n\t\"sort\"\n)\n\n// Versions represents multiple versions.\ntype Versions []Version\n\n// Len returns length of version collection\nfunc (s Versions) Len() int {\n\treturn len(s)\n}\n\n// Swap swaps two versions inside the collection by its indices\nfunc (s Versions) Swap(i, j int) {\n\ts[i], s[j] = s[j], s[i]\n}\n\n// Less checks if version at index i is less than version at index j\nfunc (s Versions) Less(i, j int) bool {\n\treturn s[i].LT(s[j])\n}\n\n// Sort sorts a slice of versions\nfunc Sort(versions []Version) {\n\tsort.Sort(Versions(versions))\n}\n"
  },
  {
    "path": "vendor/github.com/blang/semver/sql.go",
    "content": "package semver\n\nimport (\n\t\"database/sql/driver\"\n\t\"fmt\"\n)\n\n// Scan implements the database/sql.Scanner interface.\nfunc (v *Version) Scan(src interface{}) (err error) {\n\tvar str string\n\tswitch src := src.(type) {\n\tcase string:\n\t\tstr = src\n\tcase []byte:\n\t\tstr = string(src)\n\tdefault:\n\t\treturn fmt.Errorf(\"version.Scan: cannot convert %T to string\", src)\n\t}\n\n\tif t, err := Parse(str); err == nil {\n\t\t*v = t\n\t}\n\n\treturn\n}\n\n// Value implements the database/sql/driver.Valuer interface.\nfunc (v Version) Value() (driver.Value, error) {\n\treturn v.String(), nil\n}\n"
  },
  {
    "path": "vendor/github.com/davecgh/go-spew/LICENSE",
    "content": "ISC License\n\nCopyright (c) 2012-2016 Dave Collins <dave@davec.name>\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\nANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\nACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\nOR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n"
  },
  {
    "path": "vendor/github.com/davecgh/go-spew/spew/bypass.go",
    "content": "// Copyright (c) 2015-2016 Dave Collins <dave@davec.name>\n//\n// Permission to use, copy, modify, and distribute this software for any\n// purpose with or without fee is hereby granted, provided that the above\n// copyright notice and this permission notice appear in all copies.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n\n// NOTE: Due to the following build constraints, this file will only be compiled\n// when the code is not running on Google App Engine, compiled by GopherJS, and\n// \"-tags safe\" is not added to the go build command line.  The \"disableunsafe\"\n// tag is deprecated and thus should not be used.\n// Go versions prior to 1.4 are disabled because they use a different layout\n// for interfaces which make the implementation of unsafeReflectValue more complex.\n// +build !js,!appengine,!safe,!disableunsafe,go1.4\n\npackage spew\n\nimport (\n\t\"reflect\"\n\t\"unsafe\"\n)\n\nconst (\n\t// UnsafeDisabled is a build-time constant which specifies whether or\n\t// not access to the unsafe package is available.\n\tUnsafeDisabled = false\n\n\t// ptrSize is the size of a pointer on the current arch.\n\tptrSize = unsafe.Sizeof((*byte)(nil))\n)\n\ntype flag uintptr\n\nvar (\n\t// flagRO indicates whether the value field of a reflect.Value\n\t// is read-only.\n\tflagRO flag\n\n\t// flagAddr indicates whether the address of the reflect.Value's\n\t// value may be taken.\n\tflagAddr flag\n)\n\n// flagKindMask holds the bits that make up the kind\n// part of the flags field. In all the supported versions,\n// it is in the lower 5 bits.\nconst flagKindMask = flag(0x1f)\n\n// Different versions of Go have used different\n// bit layouts for the flags type. This table\n// records the known combinations.\nvar okFlags = []struct {\n\tro, addr flag\n}{{\n\t// From Go 1.4 to 1.5\n\tro:   1 << 5,\n\taddr: 1 << 7,\n}, {\n\t// Up to Go tip.\n\tro:   1<<5 | 1<<6,\n\taddr: 1 << 8,\n}}\n\nvar flagValOffset = func() uintptr {\n\tfield, ok := reflect.TypeOf(reflect.Value{}).FieldByName(\"flag\")\n\tif !ok {\n\t\tpanic(\"reflect.Value has no flag field\")\n\t}\n\treturn field.Offset\n}()\n\n// flagField returns a pointer to the flag field of a reflect.Value.\nfunc flagField(v *reflect.Value) *flag {\n\treturn (*flag)(unsafe.Pointer(uintptr(unsafe.Pointer(v)) + flagValOffset))\n}\n\n// unsafeReflectValue converts the passed reflect.Value into a one that bypasses\n// the typical safety restrictions preventing access to unaddressable and\n// unexported data.  It works by digging the raw pointer to the underlying\n// value out of the protected value and generating a new unprotected (unsafe)\n// reflect.Value to it.\n//\n// This allows us to check for implementations of the Stringer and error\n// interfaces to be used for pretty printing ordinarily unaddressable and\n// inaccessible values such as unexported struct fields.\nfunc unsafeReflectValue(v reflect.Value) reflect.Value {\n\tif !v.IsValid() || (v.CanInterface() && v.CanAddr()) {\n\t\treturn v\n\t}\n\tflagFieldPtr := flagField(&v)\n\t*flagFieldPtr &^= flagRO\n\t*flagFieldPtr |= flagAddr\n\treturn v\n}\n\n// Sanity checks against future reflect package changes\n// to the type or semantics of the Value.flag field.\nfunc init() {\n\tfield, ok := reflect.TypeOf(reflect.Value{}).FieldByName(\"flag\")\n\tif !ok {\n\t\tpanic(\"reflect.Value has no flag field\")\n\t}\n\tif field.Type.Kind() != reflect.TypeOf(flag(0)).Kind() {\n\t\tpanic(\"reflect.Value flag field has changed kind\")\n\t}\n\ttype t0 int\n\tvar t struct {\n\t\tA t0\n\t\t// t0 will have flagEmbedRO set.\n\t\tt0\n\t\t// a will have flagStickyRO set\n\t\ta t0\n\t}\n\tvA := reflect.ValueOf(t).FieldByName(\"A\")\n\tva := reflect.ValueOf(t).FieldByName(\"a\")\n\tvt0 := reflect.ValueOf(t).FieldByName(\"t0\")\n\n\t// Infer flagRO from the difference between the flags\n\t// for the (otherwise identical) fields in t.\n\tflagPublic := *flagField(&vA)\n\tflagWithRO := *flagField(&va) | *flagField(&vt0)\n\tflagRO = flagPublic ^ flagWithRO\n\n\t// Infer flagAddr from the difference between a value\n\t// taken from a pointer and not.\n\tvPtrA := reflect.ValueOf(&t).Elem().FieldByName(\"A\")\n\tflagNoPtr := *flagField(&vA)\n\tflagPtr := *flagField(&vPtrA)\n\tflagAddr = flagNoPtr ^ flagPtr\n\n\t// Check that the inferred flags tally with one of the known versions.\n\tfor _, f := range okFlags {\n\t\tif flagRO == f.ro && flagAddr == f.addr {\n\t\t\treturn\n\t\t}\n\t}\n\tpanic(\"reflect.Value read-only flag has changed semantics\")\n}\n"
  },
  {
    "path": "vendor/github.com/davecgh/go-spew/spew/bypasssafe.go",
    "content": "// Copyright (c) 2015-2016 Dave Collins <dave@davec.name>\n//\n// Permission to use, copy, modify, and distribute this software for any\n// purpose with or without fee is hereby granted, provided that the above\n// copyright notice and this permission notice appear in all copies.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n\n// NOTE: Due to the following build constraints, this file will only be compiled\n// when the code is running on Google App Engine, compiled by GopherJS, or\n// \"-tags safe\" is added to the go build command line.  The \"disableunsafe\"\n// tag is deprecated and thus should not be used.\n// +build js appengine safe disableunsafe !go1.4\n\npackage spew\n\nimport \"reflect\"\n\nconst (\n\t// UnsafeDisabled is a build-time constant which specifies whether or\n\t// not access to the unsafe package is available.\n\tUnsafeDisabled = true\n)\n\n// unsafeReflectValue typically converts the passed reflect.Value into a one\n// that bypasses the typical safety restrictions preventing access to\n// unaddressable and unexported data.  However, doing this relies on access to\n// the unsafe package.  This is a stub version which simply returns the passed\n// reflect.Value when the unsafe package is not available.\nfunc unsafeReflectValue(v reflect.Value) reflect.Value {\n\treturn v\n}\n"
  },
  {
    "path": "vendor/github.com/davecgh/go-spew/spew/common.go",
    "content": "/*\n * Copyright (c) 2013-2016 Dave Collins <dave@davec.name>\n *\n * Permission to use, copy, modify, and distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n */\n\npackage spew\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"reflect\"\n\t\"sort\"\n\t\"strconv\"\n)\n\n// Some constants in the form of bytes to avoid string overhead.  This mirrors\n// the technique used in the fmt package.\nvar (\n\tpanicBytes            = []byte(\"(PANIC=\")\n\tplusBytes             = []byte(\"+\")\n\tiBytes                = []byte(\"i\")\n\ttrueBytes             = []byte(\"true\")\n\tfalseBytes            = []byte(\"false\")\n\tinterfaceBytes        = []byte(\"(interface {})\")\n\tcommaNewlineBytes     = []byte(\",\\n\")\n\tnewlineBytes          = []byte(\"\\n\")\n\topenBraceBytes        = []byte(\"{\")\n\topenBraceNewlineBytes = []byte(\"{\\n\")\n\tcloseBraceBytes       = []byte(\"}\")\n\tasteriskBytes         = []byte(\"*\")\n\tcolonBytes            = []byte(\":\")\n\tcolonSpaceBytes       = []byte(\": \")\n\topenParenBytes        = []byte(\"(\")\n\tcloseParenBytes       = []byte(\")\")\n\tspaceBytes            = []byte(\" \")\n\tpointerChainBytes     = []byte(\"->\")\n\tnilAngleBytes         = []byte(\"<nil>\")\n\tmaxNewlineBytes       = []byte(\"<max depth reached>\\n\")\n\tmaxShortBytes         = []byte(\"<max>\")\n\tcircularBytes         = []byte(\"<already shown>\")\n\tcircularShortBytes    = []byte(\"<shown>\")\n\tinvalidAngleBytes     = []byte(\"<invalid>\")\n\topenBracketBytes      = []byte(\"[\")\n\tcloseBracketBytes     = []byte(\"]\")\n\tpercentBytes          = []byte(\"%\")\n\tprecisionBytes        = []byte(\".\")\n\topenAngleBytes        = []byte(\"<\")\n\tcloseAngleBytes       = []byte(\">\")\n\topenMapBytes          = []byte(\"map[\")\n\tcloseMapBytes         = []byte(\"]\")\n\tlenEqualsBytes        = []byte(\"len=\")\n\tcapEqualsBytes        = []byte(\"cap=\")\n)\n\n// hexDigits is used to map a decimal value to a hex digit.\nvar hexDigits = \"0123456789abcdef\"\n\n// catchPanic handles any panics that might occur during the handleMethods\n// calls.\nfunc catchPanic(w io.Writer, v reflect.Value) {\n\tif err := recover(); err != nil {\n\t\tw.Write(panicBytes)\n\t\tfmt.Fprintf(w, \"%v\", err)\n\t\tw.Write(closeParenBytes)\n\t}\n}\n\n// handleMethods attempts to call the Error and String methods on the underlying\n// type the passed reflect.Value represents and outputes the result to Writer w.\n//\n// It handles panics in any called methods by catching and displaying the error\n// as the formatted value.\nfunc handleMethods(cs *ConfigState, w io.Writer, v reflect.Value) (handled bool) {\n\t// We need an interface to check if the type implements the error or\n\t// Stringer interface.  However, the reflect package won't give us an\n\t// interface on certain things like unexported struct fields in order\n\t// to enforce visibility rules.  We use unsafe, when it's available,\n\t// to bypass these restrictions since this package does not mutate the\n\t// values.\n\tif !v.CanInterface() {\n\t\tif UnsafeDisabled {\n\t\t\treturn false\n\t\t}\n\n\t\tv = unsafeReflectValue(v)\n\t}\n\n\t// Choose whether or not to do error and Stringer interface lookups against\n\t// the base type or a pointer to the base type depending on settings.\n\t// Technically calling one of these methods with a pointer receiver can\n\t// mutate the value, however, types which choose to satisify an error or\n\t// Stringer interface with a pointer receiver should not be mutating their\n\t// state inside these interface methods.\n\tif !cs.DisablePointerMethods && !UnsafeDisabled && !v.CanAddr() {\n\t\tv = unsafeReflectValue(v)\n\t}\n\tif v.CanAddr() {\n\t\tv = v.Addr()\n\t}\n\n\t// Is it an error or Stringer?\n\tswitch iface := v.Interface().(type) {\n\tcase error:\n\t\tdefer catchPanic(w, v)\n\t\tif cs.ContinueOnMethod {\n\t\t\tw.Write(openParenBytes)\n\t\t\tw.Write([]byte(iface.Error()))\n\t\t\tw.Write(closeParenBytes)\n\t\t\tw.Write(spaceBytes)\n\t\t\treturn false\n\t\t}\n\n\t\tw.Write([]byte(iface.Error()))\n\t\treturn true\n\n\tcase fmt.Stringer:\n\t\tdefer catchPanic(w, v)\n\t\tif cs.ContinueOnMethod {\n\t\t\tw.Write(openParenBytes)\n\t\t\tw.Write([]byte(iface.String()))\n\t\t\tw.Write(closeParenBytes)\n\t\t\tw.Write(spaceBytes)\n\t\t\treturn false\n\t\t}\n\t\tw.Write([]byte(iface.String()))\n\t\treturn true\n\t}\n\treturn false\n}\n\n// printBool outputs a boolean value as true or false to Writer w.\nfunc printBool(w io.Writer, val bool) {\n\tif val {\n\t\tw.Write(trueBytes)\n\t} else {\n\t\tw.Write(falseBytes)\n\t}\n}\n\n// printInt outputs a signed integer value to Writer w.\nfunc printInt(w io.Writer, val int64, base int) {\n\tw.Write([]byte(strconv.FormatInt(val, base)))\n}\n\n// printUint outputs an unsigned integer value to Writer w.\nfunc printUint(w io.Writer, val uint64, base int) {\n\tw.Write([]byte(strconv.FormatUint(val, base)))\n}\n\n// printFloat outputs a floating point value using the specified precision,\n// which is expected to be 32 or 64bit, to Writer w.\nfunc printFloat(w io.Writer, val float64, precision int) {\n\tw.Write([]byte(strconv.FormatFloat(val, 'g', -1, precision)))\n}\n\n// printComplex outputs a complex value using the specified float precision\n// for the real and imaginary parts to Writer w.\nfunc printComplex(w io.Writer, c complex128, floatPrecision int) {\n\tr := real(c)\n\tw.Write(openParenBytes)\n\tw.Write([]byte(strconv.FormatFloat(r, 'g', -1, floatPrecision)))\n\ti := imag(c)\n\tif i >= 0 {\n\t\tw.Write(plusBytes)\n\t}\n\tw.Write([]byte(strconv.FormatFloat(i, 'g', -1, floatPrecision)))\n\tw.Write(iBytes)\n\tw.Write(closeParenBytes)\n}\n\n// printHexPtr outputs a uintptr formatted as hexadecimal with a leading '0x'\n// prefix to Writer w.\nfunc printHexPtr(w io.Writer, p uintptr) {\n\t// Null pointer.\n\tnum := uint64(p)\n\tif num == 0 {\n\t\tw.Write(nilAngleBytes)\n\t\treturn\n\t}\n\n\t// Max uint64 is 16 bytes in hex + 2 bytes for '0x' prefix\n\tbuf := make([]byte, 18)\n\n\t// It's simpler to construct the hex string right to left.\n\tbase := uint64(16)\n\ti := len(buf) - 1\n\tfor num >= base {\n\t\tbuf[i] = hexDigits[num%base]\n\t\tnum /= base\n\t\ti--\n\t}\n\tbuf[i] = hexDigits[num]\n\n\t// Add '0x' prefix.\n\ti--\n\tbuf[i] = 'x'\n\ti--\n\tbuf[i] = '0'\n\n\t// Strip unused leading bytes.\n\tbuf = buf[i:]\n\tw.Write(buf)\n}\n\n// valuesSorter implements sort.Interface to allow a slice of reflect.Value\n// elements to be sorted.\ntype valuesSorter struct {\n\tvalues  []reflect.Value\n\tstrings []string // either nil or same len and values\n\tcs      *ConfigState\n}\n\n// newValuesSorter initializes a valuesSorter instance, which holds a set of\n// surrogate keys on which the data should be sorted.  It uses flags in\n// ConfigState to decide if and how to populate those surrogate keys.\nfunc newValuesSorter(values []reflect.Value, cs *ConfigState) sort.Interface {\n\tvs := &valuesSorter{values: values, cs: cs}\n\tif canSortSimply(vs.values[0].Kind()) {\n\t\treturn vs\n\t}\n\tif !cs.DisableMethods {\n\t\tvs.strings = make([]string, len(values))\n\t\tfor i := range vs.values {\n\t\t\tb := bytes.Buffer{}\n\t\t\tif !handleMethods(cs, &b, vs.values[i]) {\n\t\t\t\tvs.strings = nil\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tvs.strings[i] = b.String()\n\t\t}\n\t}\n\tif vs.strings == nil && cs.SpewKeys {\n\t\tvs.strings = make([]string, len(values))\n\t\tfor i := range vs.values {\n\t\t\tvs.strings[i] = Sprintf(\"%#v\", vs.values[i].Interface())\n\t\t}\n\t}\n\treturn vs\n}\n\n// canSortSimply tests whether a reflect.Kind is a primitive that can be sorted\n// directly, or whether it should be considered for sorting by surrogate keys\n// (if the ConfigState allows it).\nfunc canSortSimply(kind reflect.Kind) bool {\n\t// This switch parallels valueSortLess, except for the default case.\n\tswitch kind {\n\tcase reflect.Bool:\n\t\treturn true\n\tcase reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int:\n\t\treturn true\n\tcase reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint:\n\t\treturn true\n\tcase reflect.Float32, reflect.Float64:\n\t\treturn true\n\tcase reflect.String:\n\t\treturn true\n\tcase reflect.Uintptr:\n\t\treturn true\n\tcase reflect.Array:\n\t\treturn true\n\t}\n\treturn false\n}\n\n// Len returns the number of values in the slice.  It is part of the\n// sort.Interface implementation.\nfunc (s *valuesSorter) Len() int {\n\treturn len(s.values)\n}\n\n// Swap swaps the values at the passed indices.  It is part of the\n// sort.Interface implementation.\nfunc (s *valuesSorter) Swap(i, j int) {\n\ts.values[i], s.values[j] = s.values[j], s.values[i]\n\tif s.strings != nil {\n\t\ts.strings[i], s.strings[j] = s.strings[j], s.strings[i]\n\t}\n}\n\n// valueSortLess returns whether the first value should sort before the second\n// value.  It is used by valueSorter.Less as part of the sort.Interface\n// implementation.\nfunc valueSortLess(a, b reflect.Value) bool {\n\tswitch a.Kind() {\n\tcase reflect.Bool:\n\t\treturn !a.Bool() && b.Bool()\n\tcase reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int:\n\t\treturn a.Int() < b.Int()\n\tcase reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint:\n\t\treturn a.Uint() < b.Uint()\n\tcase reflect.Float32, reflect.Float64:\n\t\treturn a.Float() < b.Float()\n\tcase reflect.String:\n\t\treturn a.String() < b.String()\n\tcase reflect.Uintptr:\n\t\treturn a.Uint() < b.Uint()\n\tcase reflect.Array:\n\t\t// Compare the contents of both arrays.\n\t\tl := a.Len()\n\t\tfor i := 0; i < l; i++ {\n\t\t\tav := a.Index(i)\n\t\t\tbv := b.Index(i)\n\t\t\tif av.Interface() == bv.Interface() {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn valueSortLess(av, bv)\n\t\t}\n\t}\n\treturn a.String() < b.String()\n}\n\n// Less returns whether the value at index i should sort before the\n// value at index j.  It is part of the sort.Interface implementation.\nfunc (s *valuesSorter) Less(i, j int) bool {\n\tif s.strings == nil {\n\t\treturn valueSortLess(s.values[i], s.values[j])\n\t}\n\treturn s.strings[i] < s.strings[j]\n}\n\n// sortValues is a sort function that handles both native types and any type that\n// can be converted to error or Stringer.  Other inputs are sorted according to\n// their Value.String() value to ensure display stability.\nfunc sortValues(values []reflect.Value, cs *ConfigState) {\n\tif len(values) == 0 {\n\t\treturn\n\t}\n\tsort.Sort(newValuesSorter(values, cs))\n}\n"
  },
  {
    "path": "vendor/github.com/davecgh/go-spew/spew/config.go",
    "content": "/*\n * Copyright (c) 2013-2016 Dave Collins <dave@davec.name>\n *\n * Permission to use, copy, modify, and distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n */\n\npackage spew\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n)\n\n// ConfigState houses the configuration options used by spew to format and\n// display values.  There is a global instance, Config, that is used to control\n// all top-level Formatter and Dump functionality.  Each ConfigState instance\n// provides methods equivalent to the top-level functions.\n//\n// The zero value for ConfigState provides no indentation.  You would typically\n// want to set it to a space or a tab.\n//\n// Alternatively, you can use NewDefaultConfig to get a ConfigState instance\n// with default settings.  See the documentation of NewDefaultConfig for default\n// values.\ntype ConfigState struct {\n\t// Indent specifies the string to use for each indentation level.  The\n\t// global config instance that all top-level functions use set this to a\n\t// single space by default.  If you would like more indentation, you might\n\t// set this to a tab with \"\\t\" or perhaps two spaces with \"  \".\n\tIndent string\n\n\t// MaxDepth controls the maximum number of levels to descend into nested\n\t// data structures.  The default, 0, means there is no limit.\n\t//\n\t// NOTE: Circular data structures are properly detected, so it is not\n\t// necessary to set this value unless you specifically want to limit deeply\n\t// nested data structures.\n\tMaxDepth int\n\n\t// DisableMethods specifies whether or not error and Stringer interfaces are\n\t// invoked for types that implement them.\n\tDisableMethods bool\n\n\t// DisablePointerMethods specifies whether or not to check for and invoke\n\t// error and Stringer interfaces on types which only accept a pointer\n\t// receiver when the current type is not a pointer.\n\t//\n\t// NOTE: This might be an unsafe action since calling one of these methods\n\t// with a pointer receiver could technically mutate the value, however,\n\t// in practice, types which choose to satisify an error or Stringer\n\t// interface with a pointer receiver should not be mutating their state\n\t// inside these interface methods.  As a result, this option relies on\n\t// access to the unsafe package, so it will not have any effect when\n\t// running in environments without access to the unsafe package such as\n\t// Google App Engine or with the \"safe\" build tag specified.\n\tDisablePointerMethods bool\n\n\t// DisablePointerAddresses specifies whether to disable the printing of\n\t// pointer addresses. This is useful when diffing data structures in tests.\n\tDisablePointerAddresses bool\n\n\t// DisableCapacities specifies whether to disable the printing of capacities\n\t// for arrays, slices, maps and channels. This is useful when diffing\n\t// data structures in tests.\n\tDisableCapacities bool\n\n\t// ContinueOnMethod specifies whether or not recursion should continue once\n\t// a custom error or Stringer interface is invoked.  The default, false,\n\t// means it will print the results of invoking the custom error or Stringer\n\t// interface and return immediately instead of continuing to recurse into\n\t// the internals of the data type.\n\t//\n\t// NOTE: This flag does not have any effect if method invocation is disabled\n\t// via the DisableMethods or DisablePointerMethods options.\n\tContinueOnMethod bool\n\n\t// SortKeys specifies map keys should be sorted before being printed. Use\n\t// this to have a more deterministic, diffable output.  Note that only\n\t// native types (bool, int, uint, floats, uintptr and string) and types\n\t// that support the error or Stringer interfaces (if methods are\n\t// enabled) are supported, with other types sorted according to the\n\t// reflect.Value.String() output which guarantees display stability.\n\tSortKeys bool\n\n\t// SpewKeys specifies that, as a last resort attempt, map keys should\n\t// be spewed to strings and sorted by those strings.  This is only\n\t// considered if SortKeys is true.\n\tSpewKeys bool\n}\n\n// Config is the active configuration of the top-level functions.\n// The configuration can be changed by modifying the contents of spew.Config.\nvar Config = ConfigState{Indent: \" \"}\n\n// Errorf is a wrapper for fmt.Errorf that treats each argument as if it were\n// passed with a Formatter interface returned by c.NewFormatter.  It returns\n// the formatted string as a value that satisfies error.  See NewFormatter\n// for formatting details.\n//\n// This function is shorthand for the following syntax:\n//\n//\tfmt.Errorf(format, c.NewFormatter(a), c.NewFormatter(b))\nfunc (c *ConfigState) Errorf(format string, a ...interface{}) (err error) {\n\treturn fmt.Errorf(format, c.convertArgs(a)...)\n}\n\n// Fprint is a wrapper for fmt.Fprint that treats each argument as if it were\n// passed with a Formatter interface returned by c.NewFormatter.  It returns\n// the number of bytes written and any write error encountered.  See\n// NewFormatter for formatting details.\n//\n// This function is shorthand for the following syntax:\n//\n//\tfmt.Fprint(w, c.NewFormatter(a), c.NewFormatter(b))\nfunc (c *ConfigState) Fprint(w io.Writer, a ...interface{}) (n int, err error) {\n\treturn fmt.Fprint(w, c.convertArgs(a)...)\n}\n\n// Fprintf is a wrapper for fmt.Fprintf that treats each argument as if it were\n// passed with a Formatter interface returned by c.NewFormatter.  It returns\n// the number of bytes written and any write error encountered.  See\n// NewFormatter for formatting details.\n//\n// This function is shorthand for the following syntax:\n//\n//\tfmt.Fprintf(w, format, c.NewFormatter(a), c.NewFormatter(b))\nfunc (c *ConfigState) Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error) {\n\treturn fmt.Fprintf(w, format, c.convertArgs(a)...)\n}\n\n// Fprintln is a wrapper for fmt.Fprintln that treats each argument as if it\n// passed with a Formatter interface returned by c.NewFormatter.  See\n// NewFormatter for formatting details.\n//\n// This function is shorthand for the following syntax:\n//\n//\tfmt.Fprintln(w, c.NewFormatter(a), c.NewFormatter(b))\nfunc (c *ConfigState) Fprintln(w io.Writer, a ...interface{}) (n int, err error) {\n\treturn fmt.Fprintln(w, c.convertArgs(a)...)\n}\n\n// Print is a wrapper for fmt.Print that treats each argument as if it were\n// passed with a Formatter interface returned by c.NewFormatter.  It returns\n// the number of bytes written and any write error encountered.  See\n// NewFormatter for formatting details.\n//\n// This function is shorthand for the following syntax:\n//\n//\tfmt.Print(c.NewFormatter(a), c.NewFormatter(b))\nfunc (c *ConfigState) Print(a ...interface{}) (n int, err error) {\n\treturn fmt.Print(c.convertArgs(a)...)\n}\n\n// Printf is a wrapper for fmt.Printf that treats each argument as if it were\n// passed with a Formatter interface returned by c.NewFormatter.  It returns\n// the number of bytes written and any write error encountered.  See\n// NewFormatter for formatting details.\n//\n// This function is shorthand for the following syntax:\n//\n//\tfmt.Printf(format, c.NewFormatter(a), c.NewFormatter(b))\nfunc (c *ConfigState) Printf(format string, a ...interface{}) (n int, err error) {\n\treturn fmt.Printf(format, c.convertArgs(a)...)\n}\n\n// Println is a wrapper for fmt.Println that treats each argument as if it were\n// passed with a Formatter interface returned by c.NewFormatter.  It returns\n// the number of bytes written and any write error encountered.  See\n// NewFormatter for formatting details.\n//\n// This function is shorthand for the following syntax:\n//\n//\tfmt.Println(c.NewFormatter(a), c.NewFormatter(b))\nfunc (c *ConfigState) Println(a ...interface{}) (n int, err error) {\n\treturn fmt.Println(c.convertArgs(a)...)\n}\n\n// Sprint is a wrapper for fmt.Sprint that treats each argument as if it were\n// passed with a Formatter interface returned by c.NewFormatter.  It returns\n// the resulting string.  See NewFormatter for formatting details.\n//\n// This function is shorthand for the following syntax:\n//\n//\tfmt.Sprint(c.NewFormatter(a), c.NewFormatter(b))\nfunc (c *ConfigState) Sprint(a ...interface{}) string {\n\treturn fmt.Sprint(c.convertArgs(a)...)\n}\n\n// Sprintf is a wrapper for fmt.Sprintf that treats each argument as if it were\n// passed with a Formatter interface returned by c.NewFormatter.  It returns\n// the resulting string.  See NewFormatter for formatting details.\n//\n// This function is shorthand for the following syntax:\n//\n//\tfmt.Sprintf(format, c.NewFormatter(a), c.NewFormatter(b))\nfunc (c *ConfigState) Sprintf(format string, a ...interface{}) string {\n\treturn fmt.Sprintf(format, c.convertArgs(a)...)\n}\n\n// Sprintln is a wrapper for fmt.Sprintln that treats each argument as if it\n// were passed with a Formatter interface returned by c.NewFormatter.  It\n// returns the resulting string.  See NewFormatter for formatting details.\n//\n// This function is shorthand for the following syntax:\n//\n//\tfmt.Sprintln(c.NewFormatter(a), c.NewFormatter(b))\nfunc (c *ConfigState) Sprintln(a ...interface{}) string {\n\treturn fmt.Sprintln(c.convertArgs(a)...)\n}\n\n/*\nNewFormatter returns a custom formatter that satisfies the fmt.Formatter\ninterface.  As a result, it integrates cleanly with standard fmt package\nprinting functions.  The formatter is useful for inline printing of smaller data\ntypes similar to the standard %v format specifier.\n\nThe custom formatter only responds to the %v (most compact), %+v (adds pointer\naddresses), %#v (adds types), and %#+v (adds types and pointer addresses) verb\ncombinations.  Any other verbs such as %x and %q will be sent to the the\nstandard fmt package for formatting.  In addition, the custom formatter ignores\nthe width and precision arguments (however they will still work on the format\nspecifiers not handled by the custom formatter).\n\nTypically this function shouldn't be called directly.  It is much easier to make\nuse of the custom formatter by calling one of the convenience functions such as\nc.Printf, c.Println, or c.Printf.\n*/\nfunc (c *ConfigState) NewFormatter(v interface{}) fmt.Formatter {\n\treturn newFormatter(c, v)\n}\n\n// Fdump formats and displays the passed arguments to io.Writer w.  It formats\n// exactly the same as Dump.\nfunc (c *ConfigState) Fdump(w io.Writer, a ...interface{}) {\n\tfdump(c, w, a...)\n}\n\n/*\nDump displays the passed parameters to standard out with newlines, customizable\nindentation, and additional debug information such as complete types and all\npointer addresses used to indirect to the final value.  It provides the\nfollowing features over the built-in printing facilities provided by the fmt\npackage:\n\n\t* Pointers are dereferenced and followed\n\t* Circular data structures are detected and handled properly\n\t* Custom Stringer/error interfaces are optionally invoked, including\n\t  on unexported types\n\t* Custom types which only implement the Stringer/error interfaces via\n\t  a pointer receiver are optionally invoked when passing non-pointer\n\t  variables\n\t* Byte arrays and slices are dumped like the hexdump -C command which\n\t  includes offsets, byte values in hex, and ASCII output\n\nThe configuration options are controlled by modifying the public members\nof c.  See ConfigState for options documentation.\n\nSee Fdump if you would prefer dumping to an arbitrary io.Writer or Sdump to\nget the formatted result as a string.\n*/\nfunc (c *ConfigState) Dump(a ...interface{}) {\n\tfdump(c, os.Stdout, a...)\n}\n\n// Sdump returns a string with the passed arguments formatted exactly the same\n// as Dump.\nfunc (c *ConfigState) Sdump(a ...interface{}) string {\n\tvar buf bytes.Buffer\n\tfdump(c, &buf, a...)\n\treturn buf.String()\n}\n\n// convertArgs accepts a slice of arguments and returns a slice of the same\n// length with each argument converted to a spew Formatter interface using\n// the ConfigState associated with s.\nfunc (c *ConfigState) convertArgs(args []interface{}) (formatters []interface{}) {\n\tformatters = make([]interface{}, len(args))\n\tfor index, arg := range args {\n\t\tformatters[index] = newFormatter(c, arg)\n\t}\n\treturn formatters\n}\n\n// NewDefaultConfig returns a ConfigState with the following default settings.\n//\n// \tIndent: \" \"\n// \tMaxDepth: 0\n// \tDisableMethods: false\n// \tDisablePointerMethods: false\n// \tContinueOnMethod: false\n// \tSortKeys: false\nfunc NewDefaultConfig() *ConfigState {\n\treturn &ConfigState{Indent: \" \"}\n}\n"
  },
  {
    "path": "vendor/github.com/davecgh/go-spew/spew/doc.go",
    "content": "/*\n * Copyright (c) 2013-2016 Dave Collins <dave@davec.name>\n *\n * Permission to use, copy, modify, and distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n */\n\n/*\nPackage spew implements a deep pretty printer for Go data structures to aid in\ndebugging.\n\nA quick overview of the additional features spew provides over the built-in\nprinting facilities for Go data types are as follows:\n\n\t* Pointers are dereferenced and followed\n\t* Circular data structures are detected and handled properly\n\t* Custom Stringer/error interfaces are optionally invoked, including\n\t  on unexported types\n\t* Custom types which only implement the Stringer/error interfaces via\n\t  a pointer receiver are optionally invoked when passing non-pointer\n\t  variables\n\t* Byte arrays and slices are dumped like the hexdump -C command which\n\t  includes offsets, byte values in hex, and ASCII output (only when using\n\t  Dump style)\n\nThere are two different approaches spew allows for dumping Go data structures:\n\n\t* Dump style which prints with newlines, customizable indentation,\n\t  and additional debug information such as types and all pointer addresses\n\t  used to indirect to the final value\n\t* A custom Formatter interface that integrates cleanly with the standard fmt\n\t  package and replaces %v, %+v, %#v, and %#+v to provide inline printing\n\t  similar to the default %v while providing the additional functionality\n\t  outlined above and passing unsupported format verbs such as %x and %q\n\t  along to fmt\n\nQuick Start\n\nThis section demonstrates how to quickly get started with spew.  See the\nsections below for further details on formatting and configuration options.\n\nTo dump a variable with full newlines, indentation, type, and pointer\ninformation use Dump, Fdump, or Sdump:\n\tspew.Dump(myVar1, myVar2, ...)\n\tspew.Fdump(someWriter, myVar1, myVar2, ...)\n\tstr := spew.Sdump(myVar1, myVar2, ...)\n\nAlternatively, if you would prefer to use format strings with a compacted inline\nprinting style, use the convenience wrappers Printf, Fprintf, etc with\n%v (most compact), %+v (adds pointer addresses), %#v (adds types), or\n%#+v (adds types and pointer addresses):\n\tspew.Printf(\"myVar1: %v -- myVar2: %+v\", myVar1, myVar2)\n\tspew.Printf(\"myVar3: %#v -- myVar4: %#+v\", myVar3, myVar4)\n\tspew.Fprintf(someWriter, \"myVar1: %v -- myVar2: %+v\", myVar1, myVar2)\n\tspew.Fprintf(someWriter, \"myVar3: %#v -- myVar4: %#+v\", myVar3, myVar4)\n\nConfiguration Options\n\nConfiguration of spew is handled by fields in the ConfigState type.  For\nconvenience, all of the top-level functions use a global state available\nvia the spew.Config global.\n\nIt is also possible to create a ConfigState instance that provides methods\nequivalent to the top-level functions.  This allows concurrent configuration\noptions.  See the ConfigState documentation for more details.\n\nThe following configuration options are available:\n\t* Indent\n\t\tString to use for each indentation level for Dump functions.\n\t\tIt is a single space by default.  A popular alternative is \"\\t\".\n\n\t* MaxDepth\n\t\tMaximum number of levels to descend into nested data structures.\n\t\tThere is no limit by default.\n\n\t* DisableMethods\n\t\tDisables invocation of error and Stringer interface methods.\n\t\tMethod invocation is enabled by default.\n\n\t* DisablePointerMethods\n\t\tDisables invocation of error and Stringer interface methods on types\n\t\twhich only accept pointer receivers from non-pointer variables.\n\t\tPointer method invocation is enabled by default.\n\n\t* DisablePointerAddresses\n\t\tDisablePointerAddresses specifies whether to disable the printing of\n\t\tpointer addresses. This is useful when diffing data structures in tests.\n\n\t* DisableCapacities\n\t\tDisableCapacities specifies whether to disable the printing of\n\t\tcapacities for arrays, slices, maps and channels. This is useful when\n\t\tdiffing data structures in tests.\n\n\t* ContinueOnMethod\n\t\tEnables recursion into types after invoking error and Stringer interface\n\t\tmethods. Recursion after method invocation is disabled by default.\n\n\t* SortKeys\n\t\tSpecifies map keys should be sorted before being printed. Use\n\t\tthis to have a more deterministic, diffable output.  Note that\n\t\tonly native types (bool, int, uint, floats, uintptr and string)\n\t\tand types which implement error or Stringer interfaces are\n\t\tsupported with other types sorted according to the\n\t\treflect.Value.String() output which guarantees display\n\t\tstability.  Natural map order is used by default.\n\n\t* SpewKeys\n\t\tSpecifies that, as a last resort attempt, map keys should be\n\t\tspewed to strings and sorted by those strings.  This is only\n\t\tconsidered if SortKeys is true.\n\nDump Usage\n\nSimply call spew.Dump with a list of variables you want to dump:\n\n\tspew.Dump(myVar1, myVar2, ...)\n\nYou may also call spew.Fdump if you would prefer to output to an arbitrary\nio.Writer.  For example, to dump to standard error:\n\n\tspew.Fdump(os.Stderr, myVar1, myVar2, ...)\n\nA third option is to call spew.Sdump to get the formatted output as a string:\n\n\tstr := spew.Sdump(myVar1, myVar2, ...)\n\nSample Dump Output\n\nSee the Dump example for details on the setup of the types and variables being\nshown here.\n\n\t(main.Foo) {\n\t unexportedField: (*main.Bar)(0xf84002e210)({\n\t  flag: (main.Flag) flagTwo,\n\t  data: (uintptr) <nil>\n\t }),\n\t ExportedField: (map[interface {}]interface {}) (len=1) {\n\t  (string) (len=3) \"one\": (bool) true\n\t }\n\t}\n\nByte (and uint8) arrays and slices are displayed uniquely like the hexdump -C\ncommand as shown.\n\t([]uint8) (len=32 cap=32) {\n\t 00000000  11 12 13 14 15 16 17 18  19 1a 1b 1c 1d 1e 1f 20  |............... |\n\t 00000010  21 22 23 24 25 26 27 28  29 2a 2b 2c 2d 2e 2f 30  |!\"#$%&'()*+,-./0|\n\t 00000020  31 32                                             |12|\n\t}\n\nCustom Formatter\n\nSpew provides a custom formatter that implements the fmt.Formatter interface\nso that it integrates cleanly with standard fmt package printing functions. The\nformatter is useful for inline printing of smaller data types similar to the\nstandard %v format specifier.\n\nThe custom formatter only responds to the %v (most compact), %+v (adds pointer\naddresses), %#v (adds types), or %#+v (adds types and pointer addresses) verb\ncombinations.  Any other verbs such as %x and %q will be sent to the the\nstandard fmt package for formatting.  In addition, the custom formatter ignores\nthe width and precision arguments (however they will still work on the format\nspecifiers not handled by the custom formatter).\n\nCustom Formatter Usage\n\nThe simplest way to make use of the spew custom formatter is to call one of the\nconvenience functions such as spew.Printf, spew.Println, or spew.Printf.  The\nfunctions have syntax you are most likely already familiar with:\n\n\tspew.Printf(\"myVar1: %v -- myVar2: %+v\", myVar1, myVar2)\n\tspew.Printf(\"myVar3: %#v -- myVar4: %#+v\", myVar3, myVar4)\n\tspew.Println(myVar, myVar2)\n\tspew.Fprintf(os.Stderr, \"myVar1: %v -- myVar2: %+v\", myVar1, myVar2)\n\tspew.Fprintf(os.Stderr, \"myVar3: %#v -- myVar4: %#+v\", myVar3, myVar4)\n\nSee the Index for the full list convenience functions.\n\nSample Formatter Output\n\nDouble pointer to a uint8:\n\t  %v: <**>5\n\t %+v: <**>(0xf8400420d0->0xf8400420c8)5\n\t %#v: (**uint8)5\n\t%#+v: (**uint8)(0xf8400420d0->0xf8400420c8)5\n\nPointer to circular struct with a uint8 field and a pointer to itself:\n\t  %v: <*>{1 <*><shown>}\n\t %+v: <*>(0xf84003e260){ui8:1 c:<*>(0xf84003e260)<shown>}\n\t %#v: (*main.circular){ui8:(uint8)1 c:(*main.circular)<shown>}\n\t%#+v: (*main.circular)(0xf84003e260){ui8:(uint8)1 c:(*main.circular)(0xf84003e260)<shown>}\n\nSee the Printf example for details on the setup of variables being shown\nhere.\n\nErrors\n\nSince it is possible for custom Stringer/error interfaces to panic, spew\ndetects them and handles them internally by printing the panic information\ninline with the output.  Since spew is intended to provide deep pretty printing\ncapabilities on structures, it intentionally does not return any errors.\n*/\npackage spew\n"
  },
  {
    "path": "vendor/github.com/davecgh/go-spew/spew/dump.go",
    "content": "/*\n * Copyright (c) 2013-2016 Dave Collins <dave@davec.name>\n *\n * Permission to use, copy, modify, and distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n */\n\npackage spew\n\nimport (\n\t\"bytes\"\n\t\"encoding/hex\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"reflect\"\n\t\"regexp\"\n\t\"strconv\"\n\t\"strings\"\n)\n\nvar (\n\t// uint8Type is a reflect.Type representing a uint8.  It is used to\n\t// convert cgo types to uint8 slices for hexdumping.\n\tuint8Type = reflect.TypeOf(uint8(0))\n\n\t// cCharRE is a regular expression that matches a cgo char.\n\t// It is used to detect character arrays to hexdump them.\n\tcCharRE = regexp.MustCompile(`^.*\\._Ctype_char$`)\n\n\t// cUnsignedCharRE is a regular expression that matches a cgo unsigned\n\t// char.  It is used to detect unsigned character arrays to hexdump\n\t// them.\n\tcUnsignedCharRE = regexp.MustCompile(`^.*\\._Ctype_unsignedchar$`)\n\n\t// cUint8tCharRE is a regular expression that matches a cgo uint8_t.\n\t// It is used to detect uint8_t arrays to hexdump them.\n\tcUint8tCharRE = regexp.MustCompile(`^.*\\._Ctype_uint8_t$`)\n)\n\n// dumpState contains information about the state of a dump operation.\ntype dumpState struct {\n\tw                io.Writer\n\tdepth            int\n\tpointers         map[uintptr]int\n\tignoreNextType   bool\n\tignoreNextIndent bool\n\tcs               *ConfigState\n}\n\n// indent performs indentation according to the depth level and cs.Indent\n// option.\nfunc (d *dumpState) indent() {\n\tif d.ignoreNextIndent {\n\t\td.ignoreNextIndent = false\n\t\treturn\n\t}\n\td.w.Write(bytes.Repeat([]byte(d.cs.Indent), d.depth))\n}\n\n// unpackValue returns values inside of non-nil interfaces when possible.\n// This is useful for data types like structs, arrays, slices, and maps which\n// can contain varying types packed inside an interface.\nfunc (d *dumpState) unpackValue(v reflect.Value) reflect.Value {\n\tif v.Kind() == reflect.Interface && !v.IsNil() {\n\t\tv = v.Elem()\n\t}\n\treturn v\n}\n\n// dumpPtr handles formatting of pointers by indirecting them as necessary.\nfunc (d *dumpState) dumpPtr(v reflect.Value) {\n\t// Remove pointers at or below the current depth from map used to detect\n\t// circular refs.\n\tfor k, depth := range d.pointers {\n\t\tif depth >= d.depth {\n\t\t\tdelete(d.pointers, k)\n\t\t}\n\t}\n\n\t// Keep list of all dereferenced pointers to show later.\n\tpointerChain := make([]uintptr, 0)\n\n\t// Figure out how many levels of indirection there are by dereferencing\n\t// pointers and unpacking interfaces down the chain while detecting circular\n\t// references.\n\tnilFound := false\n\tcycleFound := false\n\tindirects := 0\n\tve := v\n\tfor ve.Kind() == reflect.Ptr {\n\t\tif ve.IsNil() {\n\t\t\tnilFound = true\n\t\t\tbreak\n\t\t}\n\t\tindirects++\n\t\taddr := ve.Pointer()\n\t\tpointerChain = append(pointerChain, addr)\n\t\tif pd, ok := d.pointers[addr]; ok && pd < d.depth {\n\t\t\tcycleFound = true\n\t\t\tindirects--\n\t\t\tbreak\n\t\t}\n\t\td.pointers[addr] = d.depth\n\n\t\tve = ve.Elem()\n\t\tif ve.Kind() == reflect.Interface {\n\t\t\tif ve.IsNil() {\n\t\t\t\tnilFound = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tve = ve.Elem()\n\t\t}\n\t}\n\n\t// Display type information.\n\td.w.Write(openParenBytes)\n\td.w.Write(bytes.Repeat(asteriskBytes, indirects))\n\td.w.Write([]byte(ve.Type().String()))\n\td.w.Write(closeParenBytes)\n\n\t// Display pointer information.\n\tif !d.cs.DisablePointerAddresses && len(pointerChain) > 0 {\n\t\td.w.Write(openParenBytes)\n\t\tfor i, addr := range pointerChain {\n\t\t\tif i > 0 {\n\t\t\t\td.w.Write(pointerChainBytes)\n\t\t\t}\n\t\t\tprintHexPtr(d.w, addr)\n\t\t}\n\t\td.w.Write(closeParenBytes)\n\t}\n\n\t// Display dereferenced value.\n\td.w.Write(openParenBytes)\n\tswitch {\n\tcase nilFound:\n\t\td.w.Write(nilAngleBytes)\n\n\tcase cycleFound:\n\t\td.w.Write(circularBytes)\n\n\tdefault:\n\t\td.ignoreNextType = true\n\t\td.dump(ve)\n\t}\n\td.w.Write(closeParenBytes)\n}\n\n// dumpSlice handles formatting of arrays and slices.  Byte (uint8 under\n// reflection) arrays and slices are dumped in hexdump -C fashion.\nfunc (d *dumpState) dumpSlice(v reflect.Value) {\n\t// Determine whether this type should be hex dumped or not.  Also,\n\t// for types which should be hexdumped, try to use the underlying data\n\t// first, then fall back to trying to convert them to a uint8 slice.\n\tvar buf []uint8\n\tdoConvert := false\n\tdoHexDump := false\n\tnumEntries := v.Len()\n\tif numEntries > 0 {\n\t\tvt := v.Index(0).Type()\n\t\tvts := vt.String()\n\t\tswitch {\n\t\t// C types that need to be converted.\n\t\tcase cCharRE.MatchString(vts):\n\t\t\tfallthrough\n\t\tcase cUnsignedCharRE.MatchString(vts):\n\t\t\tfallthrough\n\t\tcase cUint8tCharRE.MatchString(vts):\n\t\t\tdoConvert = true\n\n\t\t// Try to use existing uint8 slices and fall back to converting\n\t\t// and copying if that fails.\n\t\tcase vt.Kind() == reflect.Uint8:\n\t\t\t// We need an addressable interface to convert the type\n\t\t\t// to a byte slice.  However, the reflect package won't\n\t\t\t// give us an interface on certain things like\n\t\t\t// unexported struct fields in order to enforce\n\t\t\t// visibility rules.  We use unsafe, when available, to\n\t\t\t// bypass these restrictions since this package does not\n\t\t\t// mutate the values.\n\t\t\tvs := v\n\t\t\tif !vs.CanInterface() || !vs.CanAddr() {\n\t\t\t\tvs = unsafeReflectValue(vs)\n\t\t\t}\n\t\t\tif !UnsafeDisabled {\n\t\t\t\tvs = vs.Slice(0, numEntries)\n\n\t\t\t\t// Use the existing uint8 slice if it can be\n\t\t\t\t// type asserted.\n\t\t\t\tiface := vs.Interface()\n\t\t\t\tif slice, ok := iface.([]uint8); ok {\n\t\t\t\t\tbuf = slice\n\t\t\t\t\tdoHexDump = true\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// The underlying data needs to be converted if it can't\n\t\t\t// be type asserted to a uint8 slice.\n\t\t\tdoConvert = true\n\t\t}\n\n\t\t// Copy and convert the underlying type if needed.\n\t\tif doConvert && vt.ConvertibleTo(uint8Type) {\n\t\t\t// Convert and copy each element into a uint8 byte\n\t\t\t// slice.\n\t\t\tbuf = make([]uint8, numEntries)\n\t\t\tfor i := 0; i < numEntries; i++ {\n\t\t\t\tvv := v.Index(i)\n\t\t\t\tbuf[i] = uint8(vv.Convert(uint8Type).Uint())\n\t\t\t}\n\t\t\tdoHexDump = true\n\t\t}\n\t}\n\n\t// Hexdump the entire slice as needed.\n\tif doHexDump {\n\t\tindent := strings.Repeat(d.cs.Indent, d.depth)\n\t\tstr := indent + hex.Dump(buf)\n\t\tstr = strings.Replace(str, \"\\n\", \"\\n\"+indent, -1)\n\t\tstr = strings.TrimRight(str, d.cs.Indent)\n\t\td.w.Write([]byte(str))\n\t\treturn\n\t}\n\n\t// Recursively call dump for each item.\n\tfor i := 0; i < numEntries; i++ {\n\t\td.dump(d.unpackValue(v.Index(i)))\n\t\tif i < (numEntries - 1) {\n\t\t\td.w.Write(commaNewlineBytes)\n\t\t} else {\n\t\t\td.w.Write(newlineBytes)\n\t\t}\n\t}\n}\n\n// dump is the main workhorse for dumping a value.  It uses the passed reflect\n// value to figure out what kind of object we are dealing with and formats it\n// appropriately.  It is a recursive function, however circular data structures\n// are detected and handled properly.\nfunc (d *dumpState) dump(v reflect.Value) {\n\t// Handle invalid reflect values immediately.\n\tkind := v.Kind()\n\tif kind == reflect.Invalid {\n\t\td.w.Write(invalidAngleBytes)\n\t\treturn\n\t}\n\n\t// Handle pointers specially.\n\tif kind == reflect.Ptr {\n\t\td.indent()\n\t\td.dumpPtr(v)\n\t\treturn\n\t}\n\n\t// Print type information unless already handled elsewhere.\n\tif !d.ignoreNextType {\n\t\td.indent()\n\t\td.w.Write(openParenBytes)\n\t\td.w.Write([]byte(v.Type().String()))\n\t\td.w.Write(closeParenBytes)\n\t\td.w.Write(spaceBytes)\n\t}\n\td.ignoreNextType = false\n\n\t// Display length and capacity if the built-in len and cap functions\n\t// work with the value's kind and the len/cap itself is non-zero.\n\tvalueLen, valueCap := 0, 0\n\tswitch v.Kind() {\n\tcase reflect.Array, reflect.Slice, reflect.Chan:\n\t\tvalueLen, valueCap = v.Len(), v.Cap()\n\tcase reflect.Map, reflect.String:\n\t\tvalueLen = v.Len()\n\t}\n\tif valueLen != 0 || !d.cs.DisableCapacities && valueCap != 0 {\n\t\td.w.Write(openParenBytes)\n\t\tif valueLen != 0 {\n\t\t\td.w.Write(lenEqualsBytes)\n\t\t\tprintInt(d.w, int64(valueLen), 10)\n\t\t}\n\t\tif !d.cs.DisableCapacities && valueCap != 0 {\n\t\t\tif valueLen != 0 {\n\t\t\t\td.w.Write(spaceBytes)\n\t\t\t}\n\t\t\td.w.Write(capEqualsBytes)\n\t\t\tprintInt(d.w, int64(valueCap), 10)\n\t\t}\n\t\td.w.Write(closeParenBytes)\n\t\td.w.Write(spaceBytes)\n\t}\n\n\t// Call Stringer/error interfaces if they exist and the handle methods flag\n\t// is enabled\n\tif !d.cs.DisableMethods {\n\t\tif (kind != reflect.Invalid) && (kind != reflect.Interface) {\n\t\t\tif handled := handleMethods(d.cs, d.w, v); handled {\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t}\n\n\tswitch kind {\n\tcase reflect.Invalid:\n\t\t// Do nothing.  We should never get here since invalid has already\n\t\t// been handled above.\n\n\tcase reflect.Bool:\n\t\tprintBool(d.w, v.Bool())\n\n\tcase reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int:\n\t\tprintInt(d.w, v.Int(), 10)\n\n\tcase reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint:\n\t\tprintUint(d.w, v.Uint(), 10)\n\n\tcase reflect.Float32:\n\t\tprintFloat(d.w, v.Float(), 32)\n\n\tcase reflect.Float64:\n\t\tprintFloat(d.w, v.Float(), 64)\n\n\tcase reflect.Complex64:\n\t\tprintComplex(d.w, v.Complex(), 32)\n\n\tcase reflect.Complex128:\n\t\tprintComplex(d.w, v.Complex(), 64)\n\n\tcase reflect.Slice:\n\t\tif v.IsNil() {\n\t\t\td.w.Write(nilAngleBytes)\n\t\t\tbreak\n\t\t}\n\t\tfallthrough\n\n\tcase reflect.Array:\n\t\td.w.Write(openBraceNewlineBytes)\n\t\td.depth++\n\t\tif (d.cs.MaxDepth != 0) && (d.depth > d.cs.MaxDepth) {\n\t\t\td.indent()\n\t\t\td.w.Write(maxNewlineBytes)\n\t\t} else {\n\t\t\td.dumpSlice(v)\n\t\t}\n\t\td.depth--\n\t\td.indent()\n\t\td.w.Write(closeBraceBytes)\n\n\tcase reflect.String:\n\t\td.w.Write([]byte(strconv.Quote(v.String())))\n\n\tcase reflect.Interface:\n\t\t// The only time we should get here is for nil interfaces due to\n\t\t// unpackValue calls.\n\t\tif v.IsNil() {\n\t\t\td.w.Write(nilAngleBytes)\n\t\t}\n\n\tcase reflect.Ptr:\n\t\t// Do nothing.  We should never get here since pointers have already\n\t\t// been handled above.\n\n\tcase reflect.Map:\n\t\t// nil maps should be indicated as different than empty maps\n\t\tif v.IsNil() {\n\t\t\td.w.Write(nilAngleBytes)\n\t\t\tbreak\n\t\t}\n\n\t\td.w.Write(openBraceNewlineBytes)\n\t\td.depth++\n\t\tif (d.cs.MaxDepth != 0) && (d.depth > d.cs.MaxDepth) {\n\t\t\td.indent()\n\t\t\td.w.Write(maxNewlineBytes)\n\t\t} else {\n\t\t\tnumEntries := v.Len()\n\t\t\tkeys := v.MapKeys()\n\t\t\tif d.cs.SortKeys {\n\t\t\t\tsortValues(keys, d.cs)\n\t\t\t}\n\t\t\tfor i, key := range keys {\n\t\t\t\td.dump(d.unpackValue(key))\n\t\t\t\td.w.Write(colonSpaceBytes)\n\t\t\t\td.ignoreNextIndent = true\n\t\t\t\td.dump(d.unpackValue(v.MapIndex(key)))\n\t\t\t\tif i < (numEntries - 1) {\n\t\t\t\t\td.w.Write(commaNewlineBytes)\n\t\t\t\t} else {\n\t\t\t\t\td.w.Write(newlineBytes)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\td.depth--\n\t\td.indent()\n\t\td.w.Write(closeBraceBytes)\n\n\tcase reflect.Struct:\n\t\td.w.Write(openBraceNewlineBytes)\n\t\td.depth++\n\t\tif (d.cs.MaxDepth != 0) && (d.depth > d.cs.MaxDepth) {\n\t\t\td.indent()\n\t\t\td.w.Write(maxNewlineBytes)\n\t\t} else {\n\t\t\tvt := v.Type()\n\t\t\tnumFields := v.NumField()\n\t\t\tfor i := 0; i < numFields; i++ {\n\t\t\t\td.indent()\n\t\t\t\tvtf := vt.Field(i)\n\t\t\t\td.w.Write([]byte(vtf.Name))\n\t\t\t\td.w.Write(colonSpaceBytes)\n\t\t\t\td.ignoreNextIndent = true\n\t\t\t\td.dump(d.unpackValue(v.Field(i)))\n\t\t\t\tif i < (numFields - 1) {\n\t\t\t\t\td.w.Write(commaNewlineBytes)\n\t\t\t\t} else {\n\t\t\t\t\td.w.Write(newlineBytes)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\td.depth--\n\t\td.indent()\n\t\td.w.Write(closeBraceBytes)\n\n\tcase reflect.Uintptr:\n\t\tprintHexPtr(d.w, uintptr(v.Uint()))\n\n\tcase reflect.UnsafePointer, reflect.Chan, reflect.Func:\n\t\tprintHexPtr(d.w, v.Pointer())\n\n\t// There were not any other types at the time this code was written, but\n\t// fall back to letting the default fmt package handle it in case any new\n\t// types are added.\n\tdefault:\n\t\tif v.CanInterface() {\n\t\t\tfmt.Fprintf(d.w, \"%v\", v.Interface())\n\t\t} else {\n\t\t\tfmt.Fprintf(d.w, \"%v\", v.String())\n\t\t}\n\t}\n}\n\n// fdump is a helper function to consolidate the logic from the various public\n// methods which take varying writers and config states.\nfunc fdump(cs *ConfigState, w io.Writer, a ...interface{}) {\n\tfor _, arg := range a {\n\t\tif arg == nil {\n\t\t\tw.Write(interfaceBytes)\n\t\t\tw.Write(spaceBytes)\n\t\t\tw.Write(nilAngleBytes)\n\t\t\tw.Write(newlineBytes)\n\t\t\tcontinue\n\t\t}\n\n\t\td := dumpState{w: w, cs: cs}\n\t\td.pointers = make(map[uintptr]int)\n\t\td.dump(reflect.ValueOf(arg))\n\t\td.w.Write(newlineBytes)\n\t}\n}\n\n// Fdump formats and displays the passed arguments to io.Writer w.  It formats\n// exactly the same as Dump.\nfunc Fdump(w io.Writer, a ...interface{}) {\n\tfdump(&Config, w, a...)\n}\n\n// Sdump returns a string with the passed arguments formatted exactly the same\n// as Dump.\nfunc Sdump(a ...interface{}) string {\n\tvar buf bytes.Buffer\n\tfdump(&Config, &buf, a...)\n\treturn buf.String()\n}\n\n/*\nDump displays the passed parameters to standard out with newlines, customizable\nindentation, and additional debug information such as complete types and all\npointer addresses used to indirect to the final value.  It provides the\nfollowing features over the built-in printing facilities provided by the fmt\npackage:\n\n\t* Pointers are dereferenced and followed\n\t* Circular data structures are detected and handled properly\n\t* Custom Stringer/error interfaces are optionally invoked, including\n\t  on unexported types\n\t* Custom types which only implement the Stringer/error interfaces via\n\t  a pointer receiver are optionally invoked when passing non-pointer\n\t  variables\n\t* Byte arrays and slices are dumped like the hexdump -C command which\n\t  includes offsets, byte values in hex, and ASCII output\n\nThe configuration options are controlled by an exported package global,\nspew.Config.  See ConfigState for options documentation.\n\nSee Fdump if you would prefer dumping to an arbitrary io.Writer or Sdump to\nget the formatted result as a string.\n*/\nfunc Dump(a ...interface{}) {\n\tfdump(&Config, os.Stdout, a...)\n}\n"
  },
  {
    "path": "vendor/github.com/davecgh/go-spew/spew/format.go",
    "content": "/*\n * Copyright (c) 2013-2016 Dave Collins <dave@davec.name>\n *\n * Permission to use, copy, modify, and distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n */\n\npackage spew\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// supportedFlags is a list of all the character flags supported by fmt package.\nconst supportedFlags = \"0-+# \"\n\n// formatState implements the fmt.Formatter interface and contains information\n// about the state of a formatting operation.  The NewFormatter function can\n// be used to get a new Formatter which can be used directly as arguments\n// in standard fmt package printing calls.\ntype formatState struct {\n\tvalue          interface{}\n\tfs             fmt.State\n\tdepth          int\n\tpointers       map[uintptr]int\n\tignoreNextType bool\n\tcs             *ConfigState\n}\n\n// buildDefaultFormat recreates the original format string without precision\n// and width information to pass in to fmt.Sprintf in the case of an\n// unrecognized type.  Unless new types are added to the language, this\n// function won't ever be called.\nfunc (f *formatState) buildDefaultFormat() (format string) {\n\tbuf := bytes.NewBuffer(percentBytes)\n\n\tfor _, flag := range supportedFlags {\n\t\tif f.fs.Flag(int(flag)) {\n\t\t\tbuf.WriteRune(flag)\n\t\t}\n\t}\n\n\tbuf.WriteRune('v')\n\n\tformat = buf.String()\n\treturn format\n}\n\n// constructOrigFormat recreates the original format string including precision\n// and width information to pass along to the standard fmt package.  This allows\n// automatic deferral of all format strings this package doesn't support.\nfunc (f *formatState) constructOrigFormat(verb rune) (format string) {\n\tbuf := bytes.NewBuffer(percentBytes)\n\n\tfor _, flag := range supportedFlags {\n\t\tif f.fs.Flag(int(flag)) {\n\t\t\tbuf.WriteRune(flag)\n\t\t}\n\t}\n\n\tif width, ok := f.fs.Width(); ok {\n\t\tbuf.WriteString(strconv.Itoa(width))\n\t}\n\n\tif precision, ok := f.fs.Precision(); ok {\n\t\tbuf.Write(precisionBytes)\n\t\tbuf.WriteString(strconv.Itoa(precision))\n\t}\n\n\tbuf.WriteRune(verb)\n\n\tformat = buf.String()\n\treturn format\n}\n\n// unpackValue returns values inside of non-nil interfaces when possible and\n// ensures that types for values which have been unpacked from an interface\n// are displayed when the show types flag is also set.\n// This is useful for data types like structs, arrays, slices, and maps which\n// can contain varying types packed inside an interface.\nfunc (f *formatState) unpackValue(v reflect.Value) reflect.Value {\n\tif v.Kind() == reflect.Interface {\n\t\tf.ignoreNextType = false\n\t\tif !v.IsNil() {\n\t\t\tv = v.Elem()\n\t\t}\n\t}\n\treturn v\n}\n\n// formatPtr handles formatting of pointers by indirecting them as necessary.\nfunc (f *formatState) formatPtr(v reflect.Value) {\n\t// Display nil if top level pointer is nil.\n\tshowTypes := f.fs.Flag('#')\n\tif v.IsNil() && (!showTypes || f.ignoreNextType) {\n\t\tf.fs.Write(nilAngleBytes)\n\t\treturn\n\t}\n\n\t// Remove pointers at or below the current depth from map used to detect\n\t// circular refs.\n\tfor k, depth := range f.pointers {\n\t\tif depth >= f.depth {\n\t\t\tdelete(f.pointers, k)\n\t\t}\n\t}\n\n\t// Keep list of all dereferenced pointers to possibly show later.\n\tpointerChain := make([]uintptr, 0)\n\n\t// Figure out how many levels of indirection there are by derferencing\n\t// pointers and unpacking interfaces down the chain while detecting circular\n\t// references.\n\tnilFound := false\n\tcycleFound := false\n\tindirects := 0\n\tve := v\n\tfor ve.Kind() == reflect.Ptr {\n\t\tif ve.IsNil() {\n\t\t\tnilFound = true\n\t\t\tbreak\n\t\t}\n\t\tindirects++\n\t\taddr := ve.Pointer()\n\t\tpointerChain = append(pointerChain, addr)\n\t\tif pd, ok := f.pointers[addr]; ok && pd < f.depth {\n\t\t\tcycleFound = true\n\t\t\tindirects--\n\t\t\tbreak\n\t\t}\n\t\tf.pointers[addr] = f.depth\n\n\t\tve = ve.Elem()\n\t\tif ve.Kind() == reflect.Interface {\n\t\t\tif ve.IsNil() {\n\t\t\t\tnilFound = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tve = ve.Elem()\n\t\t}\n\t}\n\n\t// Display type or indirection level depending on flags.\n\tif showTypes && !f.ignoreNextType {\n\t\tf.fs.Write(openParenBytes)\n\t\tf.fs.Write(bytes.Repeat(asteriskBytes, indirects))\n\t\tf.fs.Write([]byte(ve.Type().String()))\n\t\tf.fs.Write(closeParenBytes)\n\t} else {\n\t\tif nilFound || cycleFound {\n\t\t\tindirects += strings.Count(ve.Type().String(), \"*\")\n\t\t}\n\t\tf.fs.Write(openAngleBytes)\n\t\tf.fs.Write([]byte(strings.Repeat(\"*\", indirects)))\n\t\tf.fs.Write(closeAngleBytes)\n\t}\n\n\t// Display pointer information depending on flags.\n\tif f.fs.Flag('+') && (len(pointerChain) > 0) {\n\t\tf.fs.Write(openParenBytes)\n\t\tfor i, addr := range pointerChain {\n\t\t\tif i > 0 {\n\t\t\t\tf.fs.Write(pointerChainBytes)\n\t\t\t}\n\t\t\tprintHexPtr(f.fs, addr)\n\t\t}\n\t\tf.fs.Write(closeParenBytes)\n\t}\n\n\t// Display dereferenced value.\n\tswitch {\n\tcase nilFound:\n\t\tf.fs.Write(nilAngleBytes)\n\n\tcase cycleFound:\n\t\tf.fs.Write(circularShortBytes)\n\n\tdefault:\n\t\tf.ignoreNextType = true\n\t\tf.format(ve)\n\t}\n}\n\n// format is the main workhorse for providing the Formatter interface.  It\n// uses the passed reflect value to figure out what kind of object we are\n// dealing with and formats it appropriately.  It is a recursive function,\n// however circular data structures are detected and handled properly.\nfunc (f *formatState) format(v reflect.Value) {\n\t// Handle invalid reflect values immediately.\n\tkind := v.Kind()\n\tif kind == reflect.Invalid {\n\t\tf.fs.Write(invalidAngleBytes)\n\t\treturn\n\t}\n\n\t// Handle pointers specially.\n\tif kind == reflect.Ptr {\n\t\tf.formatPtr(v)\n\t\treturn\n\t}\n\n\t// Print type information unless already handled elsewhere.\n\tif !f.ignoreNextType && f.fs.Flag('#') {\n\t\tf.fs.Write(openParenBytes)\n\t\tf.fs.Write([]byte(v.Type().String()))\n\t\tf.fs.Write(closeParenBytes)\n\t}\n\tf.ignoreNextType = false\n\n\t// Call Stringer/error interfaces if they exist and the handle methods\n\t// flag is enabled.\n\tif !f.cs.DisableMethods {\n\t\tif (kind != reflect.Invalid) && (kind != reflect.Interface) {\n\t\t\tif handled := handleMethods(f.cs, f.fs, v); handled {\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t}\n\n\tswitch kind {\n\tcase reflect.Invalid:\n\t\t// Do nothing.  We should never get here since invalid has already\n\t\t// been handled above.\n\n\tcase reflect.Bool:\n\t\tprintBool(f.fs, v.Bool())\n\n\tcase reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int:\n\t\tprintInt(f.fs, v.Int(), 10)\n\n\tcase reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint:\n\t\tprintUint(f.fs, v.Uint(), 10)\n\n\tcase reflect.Float32:\n\t\tprintFloat(f.fs, v.Float(), 32)\n\n\tcase reflect.Float64:\n\t\tprintFloat(f.fs, v.Float(), 64)\n\n\tcase reflect.Complex64:\n\t\tprintComplex(f.fs, v.Complex(), 32)\n\n\tcase reflect.Complex128:\n\t\tprintComplex(f.fs, v.Complex(), 64)\n\n\tcase reflect.Slice:\n\t\tif v.IsNil() {\n\t\t\tf.fs.Write(nilAngleBytes)\n\t\t\tbreak\n\t\t}\n\t\tfallthrough\n\n\tcase reflect.Array:\n\t\tf.fs.Write(openBracketBytes)\n\t\tf.depth++\n\t\tif (f.cs.MaxDepth != 0) && (f.depth > f.cs.MaxDepth) {\n\t\t\tf.fs.Write(maxShortBytes)\n\t\t} else {\n\t\t\tnumEntries := v.Len()\n\t\t\tfor i := 0; i < numEntries; i++ {\n\t\t\t\tif i > 0 {\n\t\t\t\t\tf.fs.Write(spaceBytes)\n\t\t\t\t}\n\t\t\t\tf.ignoreNextType = true\n\t\t\t\tf.format(f.unpackValue(v.Index(i)))\n\t\t\t}\n\t\t}\n\t\tf.depth--\n\t\tf.fs.Write(closeBracketBytes)\n\n\tcase reflect.String:\n\t\tf.fs.Write([]byte(v.String()))\n\n\tcase reflect.Interface:\n\t\t// The only time we should get here is for nil interfaces due to\n\t\t// unpackValue calls.\n\t\tif v.IsNil() {\n\t\t\tf.fs.Write(nilAngleBytes)\n\t\t}\n\n\tcase reflect.Ptr:\n\t\t// Do nothing.  We should never get here since pointers have already\n\t\t// been handled above.\n\n\tcase reflect.Map:\n\t\t// nil maps should be indicated as different than empty maps\n\t\tif v.IsNil() {\n\t\t\tf.fs.Write(nilAngleBytes)\n\t\t\tbreak\n\t\t}\n\n\t\tf.fs.Write(openMapBytes)\n\t\tf.depth++\n\t\tif (f.cs.MaxDepth != 0) && (f.depth > f.cs.MaxDepth) {\n\t\t\tf.fs.Write(maxShortBytes)\n\t\t} else {\n\t\t\tkeys := v.MapKeys()\n\t\t\tif f.cs.SortKeys {\n\t\t\t\tsortValues(keys, f.cs)\n\t\t\t}\n\t\t\tfor i, key := range keys {\n\t\t\t\tif i > 0 {\n\t\t\t\t\tf.fs.Write(spaceBytes)\n\t\t\t\t}\n\t\t\t\tf.ignoreNextType = true\n\t\t\t\tf.format(f.unpackValue(key))\n\t\t\t\tf.fs.Write(colonBytes)\n\t\t\t\tf.ignoreNextType = true\n\t\t\t\tf.format(f.unpackValue(v.MapIndex(key)))\n\t\t\t}\n\t\t}\n\t\tf.depth--\n\t\tf.fs.Write(closeMapBytes)\n\n\tcase reflect.Struct:\n\t\tnumFields := v.NumField()\n\t\tf.fs.Write(openBraceBytes)\n\t\tf.depth++\n\t\tif (f.cs.MaxDepth != 0) && (f.depth > f.cs.MaxDepth) {\n\t\t\tf.fs.Write(maxShortBytes)\n\t\t} else {\n\t\t\tvt := v.Type()\n\t\t\tfor i := 0; i < numFields; i++ {\n\t\t\t\tif i > 0 {\n\t\t\t\t\tf.fs.Write(spaceBytes)\n\t\t\t\t}\n\t\t\t\tvtf := vt.Field(i)\n\t\t\t\tif f.fs.Flag('+') || f.fs.Flag('#') {\n\t\t\t\t\tf.fs.Write([]byte(vtf.Name))\n\t\t\t\t\tf.fs.Write(colonBytes)\n\t\t\t\t}\n\t\t\t\tf.format(f.unpackValue(v.Field(i)))\n\t\t\t}\n\t\t}\n\t\tf.depth--\n\t\tf.fs.Write(closeBraceBytes)\n\n\tcase reflect.Uintptr:\n\t\tprintHexPtr(f.fs, uintptr(v.Uint()))\n\n\tcase reflect.UnsafePointer, reflect.Chan, reflect.Func:\n\t\tprintHexPtr(f.fs, v.Pointer())\n\n\t// There were not any other types at the time this code was written, but\n\t// fall back to letting the default fmt package handle it if any get added.\n\tdefault:\n\t\tformat := f.buildDefaultFormat()\n\t\tif v.CanInterface() {\n\t\t\tfmt.Fprintf(f.fs, format, v.Interface())\n\t\t} else {\n\t\t\tfmt.Fprintf(f.fs, format, v.String())\n\t\t}\n\t}\n}\n\n// Format satisfies the fmt.Formatter interface. See NewFormatter for usage\n// details.\nfunc (f *formatState) Format(fs fmt.State, verb rune) {\n\tf.fs = fs\n\n\t// Use standard formatting for verbs that are not v.\n\tif verb != 'v' {\n\t\tformat := f.constructOrigFormat(verb)\n\t\tfmt.Fprintf(fs, format, f.value)\n\t\treturn\n\t}\n\n\tif f.value == nil {\n\t\tif fs.Flag('#') {\n\t\t\tfs.Write(interfaceBytes)\n\t\t}\n\t\tfs.Write(nilAngleBytes)\n\t\treturn\n\t}\n\n\tf.format(reflect.ValueOf(f.value))\n}\n\n// newFormatter is a helper function to consolidate the logic from the various\n// public methods which take varying config states.\nfunc newFormatter(cs *ConfigState, v interface{}) fmt.Formatter {\n\tfs := &formatState{value: v, cs: cs}\n\tfs.pointers = make(map[uintptr]int)\n\treturn fs\n}\n\n/*\nNewFormatter returns a custom formatter that satisfies the fmt.Formatter\ninterface.  As a result, it integrates cleanly with standard fmt package\nprinting functions.  The formatter is useful for inline printing of smaller data\ntypes similar to the standard %v format specifier.\n\nThe custom formatter only responds to the %v (most compact), %+v (adds pointer\naddresses), %#v (adds types), or %#+v (adds types and pointer addresses) verb\ncombinations.  Any other verbs such as %x and %q will be sent to the the\nstandard fmt package for formatting.  In addition, the custom formatter ignores\nthe width and precision arguments (however they will still work on the format\nspecifiers not handled by the custom formatter).\n\nTypically this function shouldn't be called directly.  It is much easier to make\nuse of the custom formatter by calling one of the convenience functions such as\nPrintf, Println, or Fprintf.\n*/\nfunc NewFormatter(v interface{}) fmt.Formatter {\n\treturn newFormatter(&Config, v)\n}\n"
  },
  {
    "path": "vendor/github.com/davecgh/go-spew/spew/spew.go",
    "content": "/*\n * Copyright (c) 2013-2016 Dave Collins <dave@davec.name>\n *\n * Permission to use, copy, modify, and distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n */\n\npackage spew\n\nimport (\n\t\"fmt\"\n\t\"io\"\n)\n\n// Errorf is a wrapper for fmt.Errorf that treats each argument as if it were\n// passed with a default Formatter interface returned by NewFormatter.  It\n// returns the formatted string as a value that satisfies error.  See\n// NewFormatter for formatting details.\n//\n// This function is shorthand for the following syntax:\n//\n//\tfmt.Errorf(format, spew.NewFormatter(a), spew.NewFormatter(b))\nfunc Errorf(format string, a ...interface{}) (err error) {\n\treturn fmt.Errorf(format, convertArgs(a)...)\n}\n\n// Fprint is a wrapper for fmt.Fprint that treats each argument as if it were\n// passed with a default Formatter interface returned by NewFormatter.  It\n// returns the number of bytes written and any write error encountered.  See\n// NewFormatter for formatting details.\n//\n// This function is shorthand for the following syntax:\n//\n//\tfmt.Fprint(w, spew.NewFormatter(a), spew.NewFormatter(b))\nfunc Fprint(w io.Writer, a ...interface{}) (n int, err error) {\n\treturn fmt.Fprint(w, convertArgs(a)...)\n}\n\n// Fprintf is a wrapper for fmt.Fprintf that treats each argument as if it were\n// passed with a default Formatter interface returned by NewFormatter.  It\n// returns the number of bytes written and any write error encountered.  See\n// NewFormatter for formatting details.\n//\n// This function is shorthand for the following syntax:\n//\n//\tfmt.Fprintf(w, format, spew.NewFormatter(a), spew.NewFormatter(b))\nfunc Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error) {\n\treturn fmt.Fprintf(w, format, convertArgs(a)...)\n}\n\n// Fprintln is a wrapper for fmt.Fprintln that treats each argument as if it\n// passed with a default Formatter interface returned by NewFormatter.  See\n// NewFormatter for formatting details.\n//\n// This function is shorthand for the following syntax:\n//\n//\tfmt.Fprintln(w, spew.NewFormatter(a), spew.NewFormatter(b))\nfunc Fprintln(w io.Writer, a ...interface{}) (n int, err error) {\n\treturn fmt.Fprintln(w, convertArgs(a)...)\n}\n\n// Print is a wrapper for fmt.Print that treats each argument as if it were\n// passed with a default Formatter interface returned by NewFormatter.  It\n// returns the number of bytes written and any write error encountered.  See\n// NewFormatter for formatting details.\n//\n// This function is shorthand for the following syntax:\n//\n//\tfmt.Print(spew.NewFormatter(a), spew.NewFormatter(b))\nfunc Print(a ...interface{}) (n int, err error) {\n\treturn fmt.Print(convertArgs(a)...)\n}\n\n// Printf is a wrapper for fmt.Printf that treats each argument as if it were\n// passed with a default Formatter interface returned by NewFormatter.  It\n// returns the number of bytes written and any write error encountered.  See\n// NewFormatter for formatting details.\n//\n// This function is shorthand for the following syntax:\n//\n//\tfmt.Printf(format, spew.NewFormatter(a), spew.NewFormatter(b))\nfunc Printf(format string, a ...interface{}) (n int, err error) {\n\treturn fmt.Printf(format, convertArgs(a)...)\n}\n\n// Println is a wrapper for fmt.Println that treats each argument as if it were\n// passed with a default Formatter interface returned by NewFormatter.  It\n// returns the number of bytes written and any write error encountered.  See\n// NewFormatter for formatting details.\n//\n// This function is shorthand for the following syntax:\n//\n//\tfmt.Println(spew.NewFormatter(a), spew.NewFormatter(b))\nfunc Println(a ...interface{}) (n int, err error) {\n\treturn fmt.Println(convertArgs(a)...)\n}\n\n// Sprint is a wrapper for fmt.Sprint that treats each argument as if it were\n// passed with a default Formatter interface returned by NewFormatter.  It\n// returns the resulting string.  See NewFormatter for formatting details.\n//\n// This function is shorthand for the following syntax:\n//\n//\tfmt.Sprint(spew.NewFormatter(a), spew.NewFormatter(b))\nfunc Sprint(a ...interface{}) string {\n\treturn fmt.Sprint(convertArgs(a)...)\n}\n\n// Sprintf is a wrapper for fmt.Sprintf that treats each argument as if it were\n// passed with a default Formatter interface returned by NewFormatter.  It\n// returns the resulting string.  See NewFormatter for formatting details.\n//\n// This function is shorthand for the following syntax:\n//\n//\tfmt.Sprintf(format, spew.NewFormatter(a), spew.NewFormatter(b))\nfunc Sprintf(format string, a ...interface{}) string {\n\treturn fmt.Sprintf(format, convertArgs(a)...)\n}\n\n// Sprintln is a wrapper for fmt.Sprintln that treats each argument as if it\n// were passed with a default Formatter interface returned by NewFormatter.  It\n// returns the resulting string.  See NewFormatter for formatting details.\n//\n// This function is shorthand for the following syntax:\n//\n//\tfmt.Sprintln(spew.NewFormatter(a), spew.NewFormatter(b))\nfunc Sprintln(a ...interface{}) string {\n\treturn fmt.Sprintln(convertArgs(a)...)\n}\n\n// convertArgs accepts a slice of arguments and returns a slice of the same\n// length with each argument converted to a default spew Formatter interface.\nfunc convertArgs(args []interface{}) (formatters []interface{}) {\n\tformatters = make([]interface{}, len(args))\n\tfor index, arg := range args {\n\t\tformatters[index] = NewFormatter(arg)\n\t}\n\treturn formatters\n}\n"
  },
  {
    "path": "vendor/github.com/fatih/color/LICENSE.md",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2013 Fatih Arslan\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "vendor/github.com/fatih/color/color.go",
    "content": "package color\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\n\t\"github.com/mattn/go-colorable\"\n\t\"github.com/mattn/go-isatty\"\n)\n\nvar (\n\t// NoColor defines if the output is colorized or not. It's dynamically set to\n\t// false or true based on the stdout's file descriptor referring to a terminal\n\t// or not. This is a global option and affects all colors. For more control\n\t// over each color block use the methods DisableColor() individually.\n\tNoColor = os.Getenv(\"TERM\") == \"dumb\" ||\n\t\t(!isatty.IsTerminal(os.Stdout.Fd()) && !isatty.IsCygwinTerminal(os.Stdout.Fd()))\n\n\t// Output defines the standard output of the print functions. By default\n\t// os.Stdout is used.\n\tOutput = colorable.NewColorableStdout()\n\n\t// Error defines a color supporting writer for os.Stderr.\n\tError = colorable.NewColorableStderr()\n\n\t// colorsCache is used to reduce the count of created Color objects and\n\t// allows to reuse already created objects with required Attribute.\n\tcolorsCache   = make(map[Attribute]*Color)\n\tcolorsCacheMu sync.Mutex // protects colorsCache\n)\n\n// Color defines a custom color object which is defined by SGR parameters.\ntype Color struct {\n\tparams  []Attribute\n\tnoColor *bool\n}\n\n// Attribute defines a single SGR Code\ntype Attribute int\n\nconst escape = \"\\x1b\"\n\n// Base attributes\nconst (\n\tReset Attribute = iota\n\tBold\n\tFaint\n\tItalic\n\tUnderline\n\tBlinkSlow\n\tBlinkRapid\n\tReverseVideo\n\tConcealed\n\tCrossedOut\n)\n\n// Foreground text colors\nconst (\n\tFgBlack Attribute = iota + 30\n\tFgRed\n\tFgGreen\n\tFgYellow\n\tFgBlue\n\tFgMagenta\n\tFgCyan\n\tFgWhite\n)\n\n// Foreground Hi-Intensity text colors\nconst (\n\tFgHiBlack Attribute = iota + 90\n\tFgHiRed\n\tFgHiGreen\n\tFgHiYellow\n\tFgHiBlue\n\tFgHiMagenta\n\tFgHiCyan\n\tFgHiWhite\n)\n\n// Background text colors\nconst (\n\tBgBlack Attribute = iota + 40\n\tBgRed\n\tBgGreen\n\tBgYellow\n\tBgBlue\n\tBgMagenta\n\tBgCyan\n\tBgWhite\n)\n\n// Background Hi-Intensity text colors\nconst (\n\tBgHiBlack Attribute = iota + 100\n\tBgHiRed\n\tBgHiGreen\n\tBgHiYellow\n\tBgHiBlue\n\tBgHiMagenta\n\tBgHiCyan\n\tBgHiWhite\n)\n\n// New returns a newly created color object.\nfunc New(value ...Attribute) *Color {\n\tc := &Color{params: make([]Attribute, 0)}\n\tc.Add(value...)\n\treturn c\n}\n\n// Set sets the given parameters immediately. It will change the color of\n// output with the given SGR parameters until color.Unset() is called.\nfunc Set(p ...Attribute) *Color {\n\tc := New(p...)\n\tc.Set()\n\treturn c\n}\n\n// Unset resets all escape attributes and clears the output. Usually should\n// be called after Set().\nfunc Unset() {\n\tif NoColor {\n\t\treturn\n\t}\n\n\tfmt.Fprintf(Output, \"%s[%dm\", escape, Reset)\n}\n\n// Set sets the SGR sequence.\nfunc (c *Color) Set() *Color {\n\tif c.isNoColorSet() {\n\t\treturn c\n\t}\n\n\tfmt.Fprintf(Output, c.format())\n\treturn c\n}\n\nfunc (c *Color) unset() {\n\tif c.isNoColorSet() {\n\t\treturn\n\t}\n\n\tUnset()\n}\n\nfunc (c *Color) setWriter(w io.Writer) *Color {\n\tif c.isNoColorSet() {\n\t\treturn c\n\t}\n\n\tfmt.Fprintf(w, c.format())\n\treturn c\n}\n\nfunc (c *Color) unsetWriter(w io.Writer) {\n\tif c.isNoColorSet() {\n\t\treturn\n\t}\n\n\tif NoColor {\n\t\treturn\n\t}\n\n\tfmt.Fprintf(w, \"%s[%dm\", escape, Reset)\n}\n\n// Add is used to chain SGR parameters. Use as many as parameters to combine\n// and create custom color objects. Example: Add(color.FgRed, color.Underline).\nfunc (c *Color) Add(value ...Attribute) *Color {\n\tc.params = append(c.params, value...)\n\treturn c\n}\n\nfunc (c *Color) prepend(value Attribute) {\n\tc.params = append(c.params, 0)\n\tcopy(c.params[1:], c.params[0:])\n\tc.params[0] = value\n}\n\n// Fprint formats using the default formats for its operands and writes to w.\n// Spaces are added between operands when neither is a string.\n// It returns the number of bytes written and any write error encountered.\n// On Windows, users should wrap w with colorable.NewColorable() if w is of\n// type *os.File.\nfunc (c *Color) Fprint(w io.Writer, a ...interface{}) (n int, err error) {\n\tc.setWriter(w)\n\tdefer c.unsetWriter(w)\n\n\treturn fmt.Fprint(w, a...)\n}\n\n// Print formats using the default formats for its operands and writes to\n// standard output. Spaces are added between operands when neither is a\n// string. It returns the number of bytes written and any write error\n// encountered. This is the standard fmt.Print() method wrapped with the given\n// color.\nfunc (c *Color) Print(a ...interface{}) (n int, err error) {\n\tc.Set()\n\tdefer c.unset()\n\n\treturn fmt.Fprint(Output, a...)\n}\n\n// Fprintf formats according to a format specifier and writes to w.\n// It returns the number of bytes written and any write error encountered.\n// On Windows, users should wrap w with colorable.NewColorable() if w is of\n// type *os.File.\nfunc (c *Color) Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error) {\n\tc.setWriter(w)\n\tdefer c.unsetWriter(w)\n\n\treturn fmt.Fprintf(w, format, a...)\n}\n\n// Printf formats according to a format specifier and writes to standard output.\n// It returns the number of bytes written and any write error encountered.\n// This is the standard fmt.Printf() method wrapped with the given color.\nfunc (c *Color) Printf(format string, a ...interface{}) (n int, err error) {\n\tc.Set()\n\tdefer c.unset()\n\n\treturn fmt.Fprintf(Output, format, a...)\n}\n\n// Fprintln formats using the default formats for its operands and writes to w.\n// Spaces are always added between operands and a newline is appended.\n// On Windows, users should wrap w with colorable.NewColorable() if w is of\n// type *os.File.\nfunc (c *Color) Fprintln(w io.Writer, a ...interface{}) (n int, err error) {\n\tc.setWriter(w)\n\tdefer c.unsetWriter(w)\n\n\treturn fmt.Fprintln(w, a...)\n}\n\n// Println formats using the default formats for its operands and writes to\n// standard output. Spaces are always added between operands and a newline is\n// appended. It returns the number of bytes written and any write error\n// encountered. This is the standard fmt.Print() method wrapped with the given\n// color.\nfunc (c *Color) Println(a ...interface{}) (n int, err error) {\n\tc.Set()\n\tdefer c.unset()\n\n\treturn fmt.Fprintln(Output, a...)\n}\n\n// Sprint is just like Print, but returns a string instead of printing it.\nfunc (c *Color) Sprint(a ...interface{}) string {\n\treturn c.wrap(fmt.Sprint(a...))\n}\n\n// Sprintln is just like Println, but returns a string instead of printing it.\nfunc (c *Color) Sprintln(a ...interface{}) string {\n\treturn c.wrap(fmt.Sprintln(a...))\n}\n\n// Sprintf is just like Printf, but returns a string instead of printing it.\nfunc (c *Color) Sprintf(format string, a ...interface{}) string {\n\treturn c.wrap(fmt.Sprintf(format, a...))\n}\n\n// FprintFunc returns a new function that prints the passed arguments as\n// colorized with color.Fprint().\nfunc (c *Color) FprintFunc() func(w io.Writer, a ...interface{}) {\n\treturn func(w io.Writer, a ...interface{}) {\n\t\tc.Fprint(w, a...)\n\t}\n}\n\n// PrintFunc returns a new function that prints the passed arguments as\n// colorized with color.Print().\nfunc (c *Color) PrintFunc() func(a ...interface{}) {\n\treturn func(a ...interface{}) {\n\t\tc.Print(a...)\n\t}\n}\n\n// FprintfFunc returns a new function that prints the passed arguments as\n// colorized with color.Fprintf().\nfunc (c *Color) FprintfFunc() func(w io.Writer, format string, a ...interface{}) {\n\treturn func(w io.Writer, format string, a ...interface{}) {\n\t\tc.Fprintf(w, format, a...)\n\t}\n}\n\n// PrintfFunc returns a new function that prints the passed arguments as\n// colorized with color.Printf().\nfunc (c *Color) PrintfFunc() func(format string, a ...interface{}) {\n\treturn func(format string, a ...interface{}) {\n\t\tc.Printf(format, a...)\n\t}\n}\n\n// FprintlnFunc returns a new function that prints the passed arguments as\n// colorized with color.Fprintln().\nfunc (c *Color) FprintlnFunc() func(w io.Writer, a ...interface{}) {\n\treturn func(w io.Writer, a ...interface{}) {\n\t\tc.Fprintln(w, a...)\n\t}\n}\n\n// PrintlnFunc returns a new function that prints the passed arguments as\n// colorized with color.Println().\nfunc (c *Color) PrintlnFunc() func(a ...interface{}) {\n\treturn func(a ...interface{}) {\n\t\tc.Println(a...)\n\t}\n}\n\n// SprintFunc returns a new function that returns colorized strings for the\n// given arguments with fmt.Sprint(). Useful to put into or mix into other\n// string. Windows users should use this in conjunction with color.Output, example:\n//\n//\tput := New(FgYellow).SprintFunc()\n//\tfmt.Fprintf(color.Output, \"This is a %s\", put(\"warning\"))\nfunc (c *Color) SprintFunc() func(a ...interface{}) string {\n\treturn func(a ...interface{}) string {\n\t\treturn c.wrap(fmt.Sprint(a...))\n\t}\n}\n\n// SprintfFunc returns a new function that returns colorized strings for the\n// given arguments with fmt.Sprintf(). Useful to put into or mix into other\n// string. Windows users should use this in conjunction with color.Output.\nfunc (c *Color) SprintfFunc() func(format string, a ...interface{}) string {\n\treturn func(format string, a ...interface{}) string {\n\t\treturn c.wrap(fmt.Sprintf(format, a...))\n\t}\n}\n\n// SprintlnFunc returns a new function that returns colorized strings for the\n// given arguments with fmt.Sprintln(). Useful to put into or mix into other\n// string. Windows users should use this in conjunction with color.Output.\nfunc (c *Color) SprintlnFunc() func(a ...interface{}) string {\n\treturn func(a ...interface{}) string {\n\t\treturn c.wrap(fmt.Sprintln(a...))\n\t}\n}\n\n// sequence returns a formatted SGR sequence to be plugged into a \"\\x1b[...m\"\n// an example output might be: \"1;36\" -> bold cyan\nfunc (c *Color) sequence() string {\n\tformat := make([]string, len(c.params))\n\tfor i, v := range c.params {\n\t\tformat[i] = strconv.Itoa(int(v))\n\t}\n\n\treturn strings.Join(format, \";\")\n}\n\n// wrap wraps the s string with the colors attributes. The string is ready to\n// be printed.\nfunc (c *Color) wrap(s string) string {\n\tif c.isNoColorSet() {\n\t\treturn s\n\t}\n\n\treturn c.format() + s + c.unformat()\n}\n\nfunc (c *Color) format() string {\n\treturn fmt.Sprintf(\"%s[%sm\", escape, c.sequence())\n}\n\nfunc (c *Color) unformat() string {\n\treturn fmt.Sprintf(\"%s[%dm\", escape, Reset)\n}\n\n// DisableColor disables the color output. Useful to not change any existing\n// code and still being able to output. Can be used for flags like\n// \"--no-color\". To enable back use EnableColor() method.\nfunc (c *Color) DisableColor() {\n\tc.noColor = boolPtr(true)\n}\n\n// EnableColor enables the color output. Use it in conjunction with\n// DisableColor(). Otherwise this method has no side effects.\nfunc (c *Color) EnableColor() {\n\tc.noColor = boolPtr(false)\n}\n\nfunc (c *Color) isNoColorSet() bool {\n\t// check first if we have user setted action\n\tif c.noColor != nil {\n\t\treturn *c.noColor\n\t}\n\n\t// if not return the global option, which is disabled by default\n\treturn NoColor\n}\n\n// Equals returns a boolean value indicating whether two colors are equal.\nfunc (c *Color) Equals(c2 *Color) bool {\n\tif len(c.params) != len(c2.params) {\n\t\treturn false\n\t}\n\n\tfor _, attr := range c.params {\n\t\tif !c2.attrExists(attr) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\treturn true\n}\n\nfunc (c *Color) attrExists(a Attribute) bool {\n\tfor _, attr := range c.params {\n\t\tif attr == a {\n\t\t\treturn true\n\t\t}\n\t}\n\n\treturn false\n}\n\nfunc boolPtr(v bool) *bool {\n\treturn &v\n}\n\nfunc getCachedColor(p Attribute) *Color {\n\tcolorsCacheMu.Lock()\n\tdefer colorsCacheMu.Unlock()\n\n\tc, ok := colorsCache[p]\n\tif !ok {\n\t\tc = New(p)\n\t\tcolorsCache[p] = c\n\t}\n\n\treturn c\n}\n\nfunc colorPrint(format string, p Attribute, a ...interface{}) {\n\tc := getCachedColor(p)\n\n\tif !strings.HasSuffix(format, \"\\n\") {\n\t\tformat += \"\\n\"\n\t}\n\n\tif len(a) == 0 {\n\t\tc.Print(format)\n\t} else {\n\t\tc.Printf(format, a...)\n\t}\n}\n\nfunc colorString(format string, p Attribute, a ...interface{}) string {\n\tc := getCachedColor(p)\n\n\tif len(a) == 0 {\n\t\treturn c.SprintFunc()(format)\n\t}\n\n\treturn c.SprintfFunc()(format, a...)\n}\n\n// Black is a convenient helper function to print with black foreground. A\n// newline is appended to format by default.\nfunc Black(format string, a ...interface{}) { colorPrint(format, FgBlack, a...) }\n\n// Red is a convenient helper function to print with red foreground. A\n// newline is appended to format by default.\nfunc Red(format string, a ...interface{}) { colorPrint(format, FgRed, a...) }\n\n// Green is a convenient helper function to print with green foreground. A\n// newline is appended to format by default.\nfunc Green(format string, a ...interface{}) { colorPrint(format, FgGreen, a...) }\n\n// Yellow is a convenient helper function to print with yellow foreground.\n// A newline is appended to format by default.\nfunc Yellow(format string, a ...interface{}) { colorPrint(format, FgYellow, a...) }\n\n// Blue is a convenient helper function to print with blue foreground. A\n// newline is appended to format by default.\nfunc Blue(format string, a ...interface{}) { colorPrint(format, FgBlue, a...) }\n\n// Magenta is a convenient helper function to print with magenta foreground.\n// A newline is appended to format by default.\nfunc Magenta(format string, a ...interface{}) { colorPrint(format, FgMagenta, a...) }\n\n// Cyan is a convenient helper function to print with cyan foreground. A\n// newline is appended to format by default.\nfunc Cyan(format string, a ...interface{}) { colorPrint(format, FgCyan, a...) }\n\n// White is a convenient helper function to print with white foreground. A\n// newline is appended to format by default.\nfunc White(format string, a ...interface{}) { colorPrint(format, FgWhite, a...) }\n\n// BlackString is a convenient helper function to return a string with black\n// foreground.\nfunc BlackString(format string, a ...interface{}) string { return colorString(format, FgBlack, a...) }\n\n// RedString is a convenient helper function to return a string with red\n// foreground.\nfunc RedString(format string, a ...interface{}) string { return colorString(format, FgRed, a...) }\n\n// GreenString is a convenient helper function to return a string with green\n// foreground.\nfunc GreenString(format string, a ...interface{}) string { return colorString(format, FgGreen, a...) }\n\n// YellowString is a convenient helper function to return a string with yellow\n// foreground.\nfunc YellowString(format string, a ...interface{}) string { return colorString(format, FgYellow, a...) }\n\n// BlueString is a convenient helper function to return a string with blue\n// foreground.\nfunc BlueString(format string, a ...interface{}) string { return colorString(format, FgBlue, a...) }\n\n// MagentaString is a convenient helper function to return a string with magenta\n// foreground.\nfunc MagentaString(format string, a ...interface{}) string {\n\treturn colorString(format, FgMagenta, a...)\n}\n\n// CyanString is a convenient helper function to return a string with cyan\n// foreground.\nfunc CyanString(format string, a ...interface{}) string { return colorString(format, FgCyan, a...) }\n\n// WhiteString is a convenient helper function to return a string with white\n// foreground.\nfunc WhiteString(format string, a ...interface{}) string { return colorString(format, FgWhite, a...) }\n\n// HiBlack is a convenient helper function to print with hi-intensity black foreground. A\n// newline is appended to format by default.\nfunc HiBlack(format string, a ...interface{}) { colorPrint(format, FgHiBlack, a...) }\n\n// HiRed is a convenient helper function to print with hi-intensity red foreground. A\n// newline is appended to format by default.\nfunc HiRed(format string, a ...interface{}) { colorPrint(format, FgHiRed, a...) }\n\n// HiGreen is a convenient helper function to print with hi-intensity green foreground. A\n// newline is appended to format by default.\nfunc HiGreen(format string, a ...interface{}) { colorPrint(format, FgHiGreen, a...) }\n\n// HiYellow is a convenient helper function to print with hi-intensity yellow foreground.\n// A newline is appended to format by default.\nfunc HiYellow(format string, a ...interface{}) { colorPrint(format, FgHiYellow, a...) }\n\n// HiBlue is a convenient helper function to print with hi-intensity blue foreground. A\n// newline is appended to format by default.\nfunc HiBlue(format string, a ...interface{}) { colorPrint(format, FgHiBlue, a...) }\n\n// HiMagenta is a convenient helper function to print with hi-intensity magenta foreground.\n// A newline is appended to format by default.\nfunc HiMagenta(format string, a ...interface{}) { colorPrint(format, FgHiMagenta, a...) }\n\n// HiCyan is a convenient helper function to print with hi-intensity cyan foreground. A\n// newline is appended to format by default.\nfunc HiCyan(format string, a ...interface{}) { colorPrint(format, FgHiCyan, a...) }\n\n// HiWhite is a convenient helper function to print with hi-intensity white foreground. A\n// newline is appended to format by default.\nfunc HiWhite(format string, a ...interface{}) { colorPrint(format, FgHiWhite, a...) }\n\n// HiBlackString is a convenient helper function to return a string with hi-intensity black\n// foreground.\nfunc HiBlackString(format string, a ...interface{}) string {\n\treturn colorString(format, FgHiBlack, a...)\n}\n\n// HiRedString is a convenient helper function to return a string with hi-intensity red\n// foreground.\nfunc HiRedString(format string, a ...interface{}) string { return colorString(format, FgHiRed, a...) }\n\n// HiGreenString is a convenient helper function to return a string with hi-intensity green\n// foreground.\nfunc HiGreenString(format string, a ...interface{}) string {\n\treturn colorString(format, FgHiGreen, a...)\n}\n\n// HiYellowString is a convenient helper function to return a string with hi-intensity yellow\n// foreground.\nfunc HiYellowString(format string, a ...interface{}) string {\n\treturn colorString(format, FgHiYellow, a...)\n}\n\n// HiBlueString is a convenient helper function to return a string with hi-intensity blue\n// foreground.\nfunc HiBlueString(format string, a ...interface{}) string { return colorString(format, FgHiBlue, a...) }\n\n// HiMagentaString is a convenient helper function to return a string with hi-intensity magenta\n// foreground.\nfunc HiMagentaString(format string, a ...interface{}) string {\n\treturn colorString(format, FgHiMagenta, a...)\n}\n\n// HiCyanString is a convenient helper function to return a string with hi-intensity cyan\n// foreground.\nfunc HiCyanString(format string, a ...interface{}) string { return colorString(format, FgHiCyan, a...) }\n\n// HiWhiteString is a convenient helper function to return a string with hi-intensity white\n// foreground.\nfunc HiWhiteString(format string, a ...interface{}) string {\n\treturn colorString(format, FgHiWhite, a...)\n}\n"
  },
  {
    "path": "vendor/github.com/fatih/color/doc.go",
    "content": "/*\nPackage color is an ANSI color package to output colorized or SGR defined\noutput to the standard output. The API can be used in several way, pick one\nthat suits you.\n\nUse simple and default helper functions with predefined foreground colors:\n\n    color.Cyan(\"Prints text in cyan.\")\n\n    // a newline will be appended automatically\n    color.Blue(\"Prints %s in blue.\", \"text\")\n\n    // More default foreground colors..\n    color.Red(\"We have red\")\n    color.Yellow(\"Yellow color too!\")\n    color.Magenta(\"And many others ..\")\n\n    // Hi-intensity colors\n    color.HiGreen(\"Bright green color.\")\n    color.HiBlack(\"Bright black means gray..\")\n    color.HiWhite(\"Shiny white color!\")\n\nHowever there are times where custom color mixes are required. Below are some\nexamples to create custom color objects and use the print functions of each\nseparate color object.\n\n    // Create a new color object\n    c := color.New(color.FgCyan).Add(color.Underline)\n    c.Println(\"Prints cyan text with an underline.\")\n\n    // Or just add them to New()\n    d := color.New(color.FgCyan, color.Bold)\n    d.Printf(\"This prints bold cyan %s\\n\", \"too!.\")\n\n\n    // Mix up foreground and background colors, create new mixes!\n    red := color.New(color.FgRed)\n\n    boldRed := red.Add(color.Bold)\n    boldRed.Println(\"This will print text in bold red.\")\n\n    whiteBackground := red.Add(color.BgWhite)\n    whiteBackground.Println(\"Red text with White background.\")\n\n    // Use your own io.Writer output\n    color.New(color.FgBlue).Fprintln(myWriter, \"blue color!\")\n\n    blue := color.New(color.FgBlue)\n    blue.Fprint(myWriter, \"This will print text in blue.\")\n\nYou can create PrintXxx functions to simplify even more:\n\n    // Create a custom print function for convenient\n    red := color.New(color.FgRed).PrintfFunc()\n    red(\"warning\")\n    red(\"error: %s\", err)\n\n    // Mix up multiple attributes\n    notice := color.New(color.Bold, color.FgGreen).PrintlnFunc()\n    notice(\"don't forget this...\")\n\nYou can also FprintXxx functions to pass your own io.Writer:\n\n    blue := color.New(FgBlue).FprintfFunc()\n    blue(myWriter, \"important notice: %s\", stars)\n\n    // Mix up with multiple attributes\n    success := color.New(color.Bold, color.FgGreen).FprintlnFunc()\n    success(myWriter, don't forget this...\")\n\n\nOr create SprintXxx functions to mix strings with other non-colorized strings:\n\n    yellow := New(FgYellow).SprintFunc()\n    red := New(FgRed).SprintFunc()\n\n    fmt.Printf(\"this is a %s and this is %s.\\n\", yellow(\"warning\"), red(\"error\"))\n\n    info := New(FgWhite, BgGreen).SprintFunc()\n    fmt.Printf(\"this %s rocks!\\n\", info(\"package\"))\n\nWindows support is enabled by default. All Print functions work as intended.\nHowever only for color.SprintXXX functions, user should use fmt.FprintXXX and\nset the output to color.Output:\n\n    fmt.Fprintf(color.Output, \"Windows support: %s\", color.GreenString(\"PASS\"))\n\n    info := New(FgWhite, BgGreen).SprintFunc()\n    fmt.Fprintf(color.Output, \"this %s rocks!\\n\", info(\"package\"))\n\nUsing with existing code is possible. Just use the Set() method to set the\nstandard output to the given parameters. That way a rewrite of an existing\ncode is not required.\n\n    // Use handy standard colors.\n    color.Set(color.FgYellow)\n\n    fmt.Println(\"Existing text will be now in Yellow\")\n    fmt.Printf(\"This one %s\\n\", \"too\")\n\n    color.Unset() // don't forget to unset\n\n    // You can mix up parameters\n    color.Set(color.FgMagenta, color.Bold)\n    defer color.Unset() // use it in your function\n\n    fmt.Println(\"All text will be now bold magenta.\")\n\nThere might be a case where you want to disable color output (for example to\npipe the standard output of your app to somewhere else). `Color` has support to\ndisable colors both globally and for single color definition. For example\nsuppose you have a CLI app and a `--no-color` bool flag. You can easily disable\nthe color output with:\n\n    var flagNoColor = flag.Bool(\"no-color\", false, \"Disable color output\")\n\n    if *flagNoColor {\n    \tcolor.NoColor = true // disables colorized output\n    }\n\nIt also has support for single color definitions (local). You can\ndisable/enable color output on the fly:\n\n     c := color.New(color.FgCyan)\n     c.Println(\"Prints cyan text\")\n\n     c.DisableColor()\n     c.Println(\"This is printed without any color\")\n\n     c.EnableColor()\n     c.Println(\"This prints again cyan...\")\n*/\npackage color\n"
  },
  {
    "path": "vendor/github.com/fatih/structs/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2014 Fatih Arslan\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE."
  },
  {
    "path": "vendor/github.com/fatih/structs/field.go",
    "content": "package structs\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"reflect\"\n)\n\nvar (\n\terrNotExported = errors.New(\"field is not exported\")\n\terrNotSettable = errors.New(\"field is not settable\")\n)\n\n// Field represents a single struct field that encapsulates high level\n// functions around the field.\ntype Field struct {\n\tvalue      reflect.Value\n\tfield      reflect.StructField\n\tdefaultTag string\n}\n\n// Tag returns the value associated with key in the tag string. If there is no\n// such key in the tag, Tag returns the empty string.\nfunc (f *Field) Tag(key string) string {\n\treturn f.field.Tag.Get(key)\n}\n\n// Value returns the underlying value of the field. It panics if the field\n// is not exported.\nfunc (f *Field) Value() interface{} {\n\treturn f.value.Interface()\n}\n\n// IsEmbedded returns true if the given field is an anonymous field (embedded)\nfunc (f *Field) IsEmbedded() bool {\n\treturn f.field.Anonymous\n}\n\n// IsExported returns true if the given field is exported.\nfunc (f *Field) IsExported() bool {\n\treturn f.field.PkgPath == \"\"\n}\n\n// IsZero returns true if the given field is not initialized (has a zero value).\n// It panics if the field is not exported.\nfunc (f *Field) IsZero() bool {\n\tzero := reflect.Zero(f.value.Type()).Interface()\n\tcurrent := f.Value()\n\n\treturn reflect.DeepEqual(current, zero)\n}\n\n// Name returns the name of the given field\nfunc (f *Field) Name() string {\n\treturn f.field.Name\n}\n\n// Kind returns the fields kind, such as \"string\", \"map\", \"bool\", etc ..\nfunc (f *Field) Kind() reflect.Kind {\n\treturn f.value.Kind()\n}\n\n// Set sets the field to given value v. It returns an error if the field is not\n// settable (not addressable or not exported) or if the given value's type\n// doesn't match the fields type.\nfunc (f *Field) Set(val interface{}) error {\n\t// we can't set unexported fields, so be sure this field is exported\n\tif !f.IsExported() {\n\t\treturn errNotExported\n\t}\n\n\t// do we get here? not sure...\n\tif !f.value.CanSet() {\n\t\treturn errNotSettable\n\t}\n\n\tgiven := reflect.ValueOf(val)\n\n\tif f.value.Kind() != given.Kind() {\n\t\treturn fmt.Errorf(\"wrong kind. got: %s want: %s\", given.Kind(), f.value.Kind())\n\t}\n\n\tf.value.Set(given)\n\treturn nil\n}\n\n// Zero sets the field to its zero value. It returns an error if the field is not\n// settable (not addressable or not exported).\nfunc (f *Field) Zero() error {\n\tzero := reflect.Zero(f.value.Type()).Interface()\n\treturn f.Set(zero)\n}\n\n// Fields returns a slice of Fields. This is particular handy to get the fields\n// of a nested struct . A struct tag with the content of \"-\" ignores the\n// checking of that particular field. Example:\n//\n//   // Field is ignored by this package.\n//   Field *http.Request `structs:\"-\"`\n//\n// It panics if field is not exported or if field's kind is not struct\nfunc (f *Field) Fields() []*Field {\n\treturn getFields(f.value, f.defaultTag)\n}\n\n// Field returns the field from a nested struct. It panics if the nested struct\n// is not exported or if the field was not found.\nfunc (f *Field) Field(name string) *Field {\n\tfield, ok := f.FieldOk(name)\n\tif !ok {\n\t\tpanic(\"field not found\")\n\t}\n\n\treturn field\n}\n\n// FieldOk returns the field from a nested struct. The boolean returns whether\n// the field was found (true) or not (false).\nfunc (f *Field) FieldOk(name string) (*Field, bool) {\n\tvalue := &f.value\n\t// value must be settable so we need to make sure it holds the address of the\n\t// variable and not a copy, so we can pass the pointer to strctVal instead of a\n\t// copy (which is not assigned to any variable, hence not settable).\n\t// see \"https://blog.golang.org/laws-of-reflection#TOC_8.\"\n\tif f.value.Kind() != reflect.Ptr {\n\t\ta := f.value.Addr()\n\t\tvalue = &a\n\t}\n\tv := strctVal(value.Interface())\n\tt := v.Type()\n\n\tfield, ok := t.FieldByName(name)\n\tif !ok {\n\t\treturn nil, false\n\t}\n\n\treturn &Field{\n\t\tfield: field,\n\t\tvalue: v.FieldByName(name),\n\t}, true\n}\n"
  },
  {
    "path": "vendor/github.com/fatih/structs/structs.go",
    "content": "// Package structs contains various utilities functions to work with structs.\npackage structs\n\nimport (\n\t\"fmt\"\n\n\t\"reflect\"\n)\n\nvar (\n\t// DefaultTagName is the default tag name for struct fields which provides\n\t// a more granular to tweak certain structs. Lookup the necessary functions\n\t// for more info.\n\tDefaultTagName = \"structs\" // struct's field default tag name\n)\n\n// Struct encapsulates a struct type to provide several high level functions\n// around the struct.\ntype Struct struct {\n\traw     interface{}\n\tvalue   reflect.Value\n\tTagName string\n}\n\n// New returns a new *Struct with the struct s. It panics if the s's kind is\n// not struct.\nfunc New(s interface{}) *Struct {\n\treturn &Struct{\n\t\traw:     s,\n\t\tvalue:   strctVal(s),\n\t\tTagName: DefaultTagName,\n\t}\n}\n\n// Map converts the given struct to a map[string]interface{}, where the keys\n// of the map are the field names and the values of the map the associated\n// values of the fields. The default key string is the struct field name but\n// can be changed in the struct field's tag value. The \"structs\" key in the\n// struct's field tag value is the key name. Example:\n//\n//   // Field appears in map as key \"myName\".\n//   Name string `structs:\"myName\"`\n//\n// A tag value with the content of \"-\" ignores that particular field. Example:\n//\n//   // Field is ignored by this package.\n//   Field bool `structs:\"-\"`\n//\n// A tag value with the content of \"string\" uses the stringer to get the value. Example:\n//\n//   // The value will be output of Animal's String() func.\n//   // Map will panic if Animal does not implement String().\n//   Field *Animal `structs:\"field,string\"`\n//\n// A tag value with the option of \"flatten\" used in a struct field is to flatten its fields\n// in the output map. Example:\n//\n//   // The FieldStruct's fields will be flattened into the output map.\n//   FieldStruct time.Time `structs:\",flatten\"`\n//\n// A tag value with the option of \"omitnested\" stops iterating further if the type\n// is a struct. Example:\n//\n//   // Field is not processed further by this package.\n//   Field time.Time     `structs:\"myName,omitnested\"`\n//   Field *http.Request `structs:\",omitnested\"`\n//\n// A tag value with the option of \"omitempty\" ignores that particular field if\n// the field value is empty. Example:\n//\n//   // Field appears in map as key \"myName\", but the field is\n//   // skipped if empty.\n//   Field string `structs:\"myName,omitempty\"`\n//\n//   // Field appears in map as key \"Field\" (the default), but\n//   // the field is skipped if empty.\n//   Field string `structs:\",omitempty\"`\n//\n// Note that only exported fields of a struct can be accessed, non exported\n// fields will be neglected.\nfunc (s *Struct) Map() map[string]interface{} {\n\tout := make(map[string]interface{})\n\ts.FillMap(out)\n\treturn out\n}\n\n// FillMap is the same as Map. Instead of returning the output, it fills the\n// given map.\nfunc (s *Struct) FillMap(out map[string]interface{}) {\n\tif out == nil {\n\t\treturn\n\t}\n\n\tfields := s.structFields()\n\n\tfor _, field := range fields {\n\t\tname := field.Name\n\t\tval := s.value.FieldByName(name)\n\t\tisSubStruct := false\n\t\tvar finalVal interface{}\n\n\t\ttagName, tagOpts := parseTag(field.Tag.Get(s.TagName))\n\t\tif tagName != \"\" {\n\t\t\tname = tagName\n\t\t}\n\n\t\t// if the value is a zero value and the field is marked as omitempty do\n\t\t// not include\n\t\tif tagOpts.Has(\"omitempty\") {\n\t\t\tzero := reflect.Zero(val.Type()).Interface()\n\t\t\tcurrent := val.Interface()\n\n\t\t\tif reflect.DeepEqual(current, zero) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\tif !tagOpts.Has(\"omitnested\") {\n\t\t\tfinalVal = s.nested(val)\n\n\t\t\tv := reflect.ValueOf(val.Interface())\n\t\t\tif v.Kind() == reflect.Ptr {\n\t\t\t\tv = v.Elem()\n\t\t\t}\n\n\t\t\tswitch v.Kind() {\n\t\t\tcase reflect.Map, reflect.Struct:\n\t\t\t\tisSubStruct = true\n\t\t\t}\n\t\t} else {\n\t\t\tfinalVal = val.Interface()\n\t\t}\n\n\t\tif tagOpts.Has(\"string\") {\n\t\t\ts, ok := val.Interface().(fmt.Stringer)\n\t\t\tif ok {\n\t\t\t\tout[name] = s.String()\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\tif isSubStruct && (tagOpts.Has(\"flatten\")) {\n\t\t\tfor k := range finalVal.(map[string]interface{}) {\n\t\t\t\tout[k] = finalVal.(map[string]interface{})[k]\n\t\t\t}\n\t\t} else {\n\t\t\tout[name] = finalVal\n\t\t}\n\t}\n}\n\n// Values converts the given s struct's field values to a []interface{}.  A\n// struct tag with the content of \"-\" ignores the that particular field.\n// Example:\n//\n//   // Field is ignored by this package.\n//   Field int `structs:\"-\"`\n//\n// A value with the option of \"omitnested\" stops iterating further if the type\n// is a struct. Example:\n//\n//   // Fields is not processed further by this package.\n//   Field time.Time     `structs:\",omitnested\"`\n//   Field *http.Request `structs:\",omitnested\"`\n//\n// A tag value with the option of \"omitempty\" ignores that particular field and\n// is not added to the values if the field value is empty. Example:\n//\n//   // Field is skipped if empty\n//   Field string `structs:\",omitempty\"`\n//\n// Note that only exported fields of a struct can be accessed, non exported\n// fields  will be neglected.\nfunc (s *Struct) Values() []interface{} {\n\tfields := s.structFields()\n\n\tvar t []interface{}\n\n\tfor _, field := range fields {\n\t\tval := s.value.FieldByName(field.Name)\n\n\t\t_, tagOpts := parseTag(field.Tag.Get(s.TagName))\n\n\t\t// if the value is a zero value and the field is marked as omitempty do\n\t\t// not include\n\t\tif tagOpts.Has(\"omitempty\") {\n\t\t\tzero := reflect.Zero(val.Type()).Interface()\n\t\t\tcurrent := val.Interface()\n\n\t\t\tif reflect.DeepEqual(current, zero) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\tif tagOpts.Has(\"string\") {\n\t\t\ts, ok := val.Interface().(fmt.Stringer)\n\t\t\tif ok {\n\t\t\t\tt = append(t, s.String())\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\tif IsStruct(val.Interface()) && !tagOpts.Has(\"omitnested\") {\n\t\t\t// look out for embedded structs, and convert them to a\n\t\t\t// []interface{} to be added to the final values slice\n\t\t\tt = append(t, Values(val.Interface())...)\n\t\t} else {\n\t\t\tt = append(t, val.Interface())\n\t\t}\n\t}\n\n\treturn t\n}\n\n// Fields returns a slice of Fields. A struct tag with the content of \"-\"\n// ignores the checking of that particular field. Example:\n//\n//   // Field is ignored by this package.\n//   Field bool `structs:\"-\"`\n//\n// It panics if s's kind is not struct.\nfunc (s *Struct) Fields() []*Field {\n\treturn getFields(s.value, s.TagName)\n}\n\n// Names returns a slice of field names. A struct tag with the content of \"-\"\n// ignores the checking of that particular field. Example:\n//\n//   // Field is ignored by this package.\n//   Field bool `structs:\"-\"`\n//\n// It panics if s's kind is not struct.\nfunc (s *Struct) Names() []string {\n\tfields := getFields(s.value, s.TagName)\n\n\tnames := make([]string, len(fields))\n\n\tfor i, field := range fields {\n\t\tnames[i] = field.Name()\n\t}\n\n\treturn names\n}\n\nfunc getFields(v reflect.Value, tagName string) []*Field {\n\tif v.Kind() == reflect.Ptr {\n\t\tv = v.Elem()\n\t}\n\n\tt := v.Type()\n\n\tvar fields []*Field\n\n\tfor i := 0; i < t.NumField(); i++ {\n\t\tfield := t.Field(i)\n\n\t\tif tag := field.Tag.Get(tagName); tag == \"-\" {\n\t\t\tcontinue\n\t\t}\n\n\t\tf := &Field{\n\t\t\tfield: field,\n\t\t\tvalue: v.FieldByName(field.Name),\n\t\t}\n\n\t\tfields = append(fields, f)\n\n\t}\n\n\treturn fields\n}\n\n// Field returns a new Field struct that provides several high level functions\n// around a single struct field entity. It panics if the field is not found.\nfunc (s *Struct) Field(name string) *Field {\n\tf, ok := s.FieldOk(name)\n\tif !ok {\n\t\tpanic(\"field not found\")\n\t}\n\n\treturn f\n}\n\n// FieldOk returns a new Field struct that provides several high level functions\n// around a single struct field entity. The boolean returns true if the field\n// was found.\nfunc (s *Struct) FieldOk(name string) (*Field, bool) {\n\tt := s.value.Type()\n\n\tfield, ok := t.FieldByName(name)\n\tif !ok {\n\t\treturn nil, false\n\t}\n\n\treturn &Field{\n\t\tfield:      field,\n\t\tvalue:      s.value.FieldByName(name),\n\t\tdefaultTag: s.TagName,\n\t}, true\n}\n\n// IsZero returns true if all fields in a struct is a zero value (not\n// initialized) A struct tag with the content of \"-\" ignores the checking of\n// that particular field. Example:\n//\n//   // Field is ignored by this package.\n//   Field bool `structs:\"-\"`\n//\n// A value with the option of \"omitnested\" stops iterating further if the type\n// is a struct. Example:\n//\n//   // Field is not processed further by this package.\n//   Field time.Time     `structs:\"myName,omitnested\"`\n//   Field *http.Request `structs:\",omitnested\"`\n//\n// Note that only exported fields of a struct can be accessed, non exported\n// fields  will be neglected. It panics if s's kind is not struct.\nfunc (s *Struct) IsZero() bool {\n\tfields := s.structFields()\n\n\tfor _, field := range fields {\n\t\tval := s.value.FieldByName(field.Name)\n\n\t\t_, tagOpts := parseTag(field.Tag.Get(s.TagName))\n\n\t\tif IsStruct(val.Interface()) && !tagOpts.Has(\"omitnested\") {\n\t\t\tok := IsZero(val.Interface())\n\t\t\tif !ok {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tcontinue\n\t\t}\n\n\t\t// zero value of the given field, such as \"\" for string, 0 for int\n\t\tzero := reflect.Zero(val.Type()).Interface()\n\n\t\t//  current value of the given field\n\t\tcurrent := val.Interface()\n\n\t\tif !reflect.DeepEqual(current, zero) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\treturn true\n}\n\n// HasZero returns true if a field in a struct is not initialized (zero value).\n// A struct tag with the content of \"-\" ignores the checking of that particular\n// field. Example:\n//\n//   // Field is ignored by this package.\n//   Field bool `structs:\"-\"`\n//\n// A value with the option of \"omitnested\" stops iterating further if the type\n// is a struct. Example:\n//\n//   // Field is not processed further by this package.\n//   Field time.Time     `structs:\"myName,omitnested\"`\n//   Field *http.Request `structs:\",omitnested\"`\n//\n// Note that only exported fields of a struct can be accessed, non exported\n// fields  will be neglected. It panics if s's kind is not struct.\nfunc (s *Struct) HasZero() bool {\n\tfields := s.structFields()\n\n\tfor _, field := range fields {\n\t\tval := s.value.FieldByName(field.Name)\n\n\t\t_, tagOpts := parseTag(field.Tag.Get(s.TagName))\n\n\t\tif IsStruct(val.Interface()) && !tagOpts.Has(\"omitnested\") {\n\t\t\tok := HasZero(val.Interface())\n\t\t\tif ok {\n\t\t\t\treturn true\n\t\t\t}\n\n\t\t\tcontinue\n\t\t}\n\n\t\t// zero value of the given field, such as \"\" for string, 0 for int\n\t\tzero := reflect.Zero(val.Type()).Interface()\n\n\t\t//  current value of the given field\n\t\tcurrent := val.Interface()\n\n\t\tif reflect.DeepEqual(current, zero) {\n\t\t\treturn true\n\t\t}\n\t}\n\n\treturn false\n}\n\n// Name returns the structs's type name within its package. For more info refer\n// to Name() function.\nfunc (s *Struct) Name() string {\n\treturn s.value.Type().Name()\n}\n\n// structFields returns the exported struct fields for a given s struct. This\n// is a convenient helper method to avoid duplicate code in some of the\n// functions.\nfunc (s *Struct) structFields() []reflect.StructField {\n\tt := s.value.Type()\n\n\tvar f []reflect.StructField\n\n\tfor i := 0; i < t.NumField(); i++ {\n\t\tfield := t.Field(i)\n\t\t// we can't access the value of unexported fields\n\t\tif field.PkgPath != \"\" {\n\t\t\tcontinue\n\t\t}\n\n\t\t// don't check if it's omitted\n\t\tif tag := field.Tag.Get(s.TagName); tag == \"-\" {\n\t\t\tcontinue\n\t\t}\n\n\t\tf = append(f, field)\n\t}\n\n\treturn f\n}\n\nfunc strctVal(s interface{}) reflect.Value {\n\tv := reflect.ValueOf(s)\n\n\t// if pointer get the underlying element≤\n\tfor v.Kind() == reflect.Ptr {\n\t\tv = v.Elem()\n\t}\n\n\tif v.Kind() != reflect.Struct {\n\t\tpanic(\"not struct\")\n\t}\n\n\treturn v\n}\n\n// Map converts the given struct to a map[string]interface{}. For more info\n// refer to Struct types Map() method. It panics if s's kind is not struct.\nfunc Map(s interface{}) map[string]interface{} {\n\treturn New(s).Map()\n}\n\n// FillMap is the same as Map. Instead of returning the output, it fills the\n// given map.\nfunc FillMap(s interface{}, out map[string]interface{}) {\n\tNew(s).FillMap(out)\n}\n\n// Values converts the given struct to a []interface{}. For more info refer to\n// Struct types Values() method.  It panics if s's kind is not struct.\nfunc Values(s interface{}) []interface{} {\n\treturn New(s).Values()\n}\n\n// Fields returns a slice of *Field. For more info refer to Struct types\n// Fields() method.  It panics if s's kind is not struct.\nfunc Fields(s interface{}) []*Field {\n\treturn New(s).Fields()\n}\n\n// Names returns a slice of field names. For more info refer to Struct types\n// Names() method.  It panics if s's kind is not struct.\nfunc Names(s interface{}) []string {\n\treturn New(s).Names()\n}\n\n// IsZero returns true if all fields is equal to a zero value. For more info\n// refer to Struct types IsZero() method.  It panics if s's kind is not struct.\nfunc IsZero(s interface{}) bool {\n\treturn New(s).IsZero()\n}\n\n// HasZero returns true if any field is equal to a zero value. For more info\n// refer to Struct types HasZero() method.  It panics if s's kind is not struct.\nfunc HasZero(s interface{}) bool {\n\treturn New(s).HasZero()\n}\n\n// IsStruct returns true if the given variable is a struct or a pointer to\n// struct.\nfunc IsStruct(s interface{}) bool {\n\tv := reflect.ValueOf(s)\n\tif v.Kind() == reflect.Ptr {\n\t\tv = v.Elem()\n\t}\n\n\t// uninitialized zero value of a struct\n\tif v.Kind() == reflect.Invalid {\n\t\treturn false\n\t}\n\n\treturn v.Kind() == reflect.Struct\n}\n\n// Name returns the structs's type name within its package. It returns an\n// empty string for unnamed types. It panics if s's kind is not struct.\nfunc Name(s interface{}) string {\n\treturn New(s).Name()\n}\n\n// nested retrieves recursively all types for the given value and returns the\n// nested value.\nfunc (s *Struct) nested(val reflect.Value) interface{} {\n\tvar finalVal interface{}\n\n\tv := reflect.ValueOf(val.Interface())\n\tif v.Kind() == reflect.Ptr {\n\t\tv = v.Elem()\n\t}\n\n\tswitch v.Kind() {\n\tcase reflect.Struct:\n\t\tn := New(val.Interface())\n\t\tn.TagName = s.TagName\n\t\tm := n.Map()\n\n\t\t// do not add the converted value if there are no exported fields, ie:\n\t\t// time.Time\n\t\tif len(m) == 0 {\n\t\t\tfinalVal = val.Interface()\n\t\t} else {\n\t\t\tfinalVal = m\n\t\t}\n\tcase reflect.Map:\n\t\t// get the element type of the map\n\t\tmapElem := val.Type()\n\t\tswitch val.Type().Kind() {\n\t\tcase reflect.Ptr, reflect.Array, reflect.Map,\n\t\t\treflect.Slice, reflect.Chan:\n\t\t\tmapElem = val.Type().Elem()\n\t\t\tif mapElem.Kind() == reflect.Ptr {\n\t\t\t\tmapElem = mapElem.Elem()\n\t\t\t}\n\t\t}\n\n\t\t// only iterate over struct types, ie: map[string]StructType,\n\t\t// map[string][]StructType,\n\t\tif mapElem.Kind() == reflect.Struct ||\n\t\t\t(mapElem.Kind() == reflect.Slice &&\n\t\t\t\tmapElem.Elem().Kind() == reflect.Struct) {\n\t\t\tm := make(map[string]interface{}, val.Len())\n\t\t\tfor _, k := range val.MapKeys() {\n\t\t\t\tm[k.String()] = s.nested(val.MapIndex(k))\n\t\t\t}\n\t\t\tfinalVal = m\n\t\t\tbreak\n\t\t}\n\n\t\t// TODO(arslan): should this be optional?\n\t\tfinalVal = val.Interface()\n\tcase reflect.Slice, reflect.Array:\n\t\tif val.Type().Kind() == reflect.Interface {\n\t\t\tfinalVal = val.Interface()\n\t\t\tbreak\n\t\t}\n\n\t\t// TODO(arslan): should this be optional?\n\t\t// do not iterate of non struct types, just pass the value. Ie: []int,\n\t\t// []string, co... We only iterate further if it's a struct.\n\t\t// i.e []foo or []*foo\n\t\tif val.Type().Elem().Kind() != reflect.Struct &&\n\t\t\t!(val.Type().Elem().Kind() == reflect.Ptr &&\n\t\t\t\tval.Type().Elem().Elem().Kind() == reflect.Struct) {\n\t\t\tfinalVal = val.Interface()\n\t\t\tbreak\n\t\t}\n\n\t\tslices := make([]interface{}, val.Len())\n\t\tfor x := 0; x < val.Len(); x++ {\n\t\t\tslices[x] = s.nested(val.Index(x))\n\t\t}\n\t\tfinalVal = slices\n\tdefault:\n\t\tfinalVal = val.Interface()\n\t}\n\n\treturn finalVal\n}\n"
  },
  {
    "path": "vendor/github.com/fatih/structs/tags.go",
    "content": "package structs\n\nimport \"strings\"\n\n// tagOptions contains a slice of tag options\ntype tagOptions []string\n\n// Has returns true if the given option is available in tagOptions\nfunc (t tagOptions) Has(opt string) bool {\n\tfor _, tagOpt := range t {\n\t\tif tagOpt == opt {\n\t\t\treturn true\n\t\t}\n\t}\n\n\treturn false\n}\n\n// parseTag splits a struct field's tag into its name and a list of options\n// which comes after a name. A tag is in the form of: \"name,option1,option2\".\n// The name can be neglectected.\nfunc parseTag(tag string) (string, tagOptions) {\n\t// tag is one of followings:\n\t// \"\"\n\t// \"name\"\n\t// \"name,opt\"\n\t// \"name,opt,opt2\"\n\t// \",opt\"\n\n\tres := strings.Split(tag, \",\")\n\treturn res[0], res[1:]\n}\n"
  },
  {
    "path": "vendor/github.com/golang/protobuf/LICENSE",
    "content": "Copyright 2010 The Go Authors.  All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n    * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n    * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n"
  },
  {
    "path": "vendor/github.com/golang/protobuf/proto/clone.go",
    "content": "// Go support for Protocol Buffers - Google's data interchange format\n//\n// Copyright 2011 The Go Authors.  All rights reserved.\n// https://github.com/golang/protobuf\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n// Protocol buffer deep copy and merge.\n// TODO: RawMessage.\n\npackage proto\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"reflect\"\n\t\"strings\"\n)\n\n// Clone returns a deep copy of a protocol buffer.\nfunc Clone(src Message) Message {\n\tin := reflect.ValueOf(src)\n\tif in.IsNil() {\n\t\treturn src\n\t}\n\tout := reflect.New(in.Type().Elem())\n\tdst := out.Interface().(Message)\n\tMerge(dst, src)\n\treturn dst\n}\n\n// Merger is the interface representing objects that can merge messages of the same type.\ntype Merger interface {\n\t// Merge merges src into this message.\n\t// Required and optional fields that are set in src will be set to that value in dst.\n\t// Elements of repeated fields will be appended.\n\t//\n\t// Merge may panic if called with a different argument type than the receiver.\n\tMerge(src Message)\n}\n\n// generatedMerger is the custom merge method that generated protos will have.\n// We must add this method since a generate Merge method will conflict with\n// many existing protos that have a Merge data field already defined.\ntype generatedMerger interface {\n\tXXX_Merge(src Message)\n}\n\n// Merge merges src into dst.\n// Required and optional fields that are set in src will be set to that value in dst.\n// Elements of repeated fields will be appended.\n// Merge panics if src and dst are not the same type, or if dst is nil.\nfunc Merge(dst, src Message) {\n\tif m, ok := dst.(Merger); ok {\n\t\tm.Merge(src)\n\t\treturn\n\t}\n\n\tin := reflect.ValueOf(src)\n\tout := reflect.ValueOf(dst)\n\tif out.IsNil() {\n\t\tpanic(\"proto: nil destination\")\n\t}\n\tif in.Type() != out.Type() {\n\t\tpanic(fmt.Sprintf(\"proto.Merge(%T, %T) type mismatch\", dst, src))\n\t}\n\tif in.IsNil() {\n\t\treturn // Merge from nil src is a noop\n\t}\n\tif m, ok := dst.(generatedMerger); ok {\n\t\tm.XXX_Merge(src)\n\t\treturn\n\t}\n\tmergeStruct(out.Elem(), in.Elem())\n}\n\nfunc mergeStruct(out, in reflect.Value) {\n\tsprop := GetProperties(in.Type())\n\tfor i := 0; i < in.NumField(); i++ {\n\t\tf := in.Type().Field(i)\n\t\tif strings.HasPrefix(f.Name, \"XXX_\") {\n\t\t\tcontinue\n\t\t}\n\t\tmergeAny(out.Field(i), in.Field(i), false, sprop.Prop[i])\n\t}\n\n\tif emIn, err := extendable(in.Addr().Interface()); err == nil {\n\t\temOut, _ := extendable(out.Addr().Interface())\n\t\tmIn, muIn := emIn.extensionsRead()\n\t\tif mIn != nil {\n\t\t\tmOut := emOut.extensionsWrite()\n\t\t\tmuIn.Lock()\n\t\t\tmergeExtension(mOut, mIn)\n\t\t\tmuIn.Unlock()\n\t\t}\n\t}\n\n\tuf := in.FieldByName(\"XXX_unrecognized\")\n\tif !uf.IsValid() {\n\t\treturn\n\t}\n\tuin := uf.Bytes()\n\tif len(uin) > 0 {\n\t\tout.FieldByName(\"XXX_unrecognized\").SetBytes(append([]byte(nil), uin...))\n\t}\n}\n\n// mergeAny performs a merge between two values of the same type.\n// viaPtr indicates whether the values were indirected through a pointer (implying proto2).\n// prop is set if this is a struct field (it may be nil).\nfunc mergeAny(out, in reflect.Value, viaPtr bool, prop *Properties) {\n\tif in.Type() == protoMessageType {\n\t\tif !in.IsNil() {\n\t\t\tif out.IsNil() {\n\t\t\t\tout.Set(reflect.ValueOf(Clone(in.Interface().(Message))))\n\t\t\t} else {\n\t\t\t\tMerge(out.Interface().(Message), in.Interface().(Message))\n\t\t\t}\n\t\t}\n\t\treturn\n\t}\n\tswitch in.Kind() {\n\tcase reflect.Bool, reflect.Float32, reflect.Float64, reflect.Int32, reflect.Int64,\n\t\treflect.String, reflect.Uint32, reflect.Uint64:\n\t\tif !viaPtr && isProto3Zero(in) {\n\t\t\treturn\n\t\t}\n\t\tout.Set(in)\n\tcase reflect.Interface:\n\t\t// Probably a oneof field; copy non-nil values.\n\t\tif in.IsNil() {\n\t\t\treturn\n\t\t}\n\t\t// Allocate destination if it is not set, or set to a different type.\n\t\t// Otherwise we will merge as normal.\n\t\tif out.IsNil() || out.Elem().Type() != in.Elem().Type() {\n\t\t\tout.Set(reflect.New(in.Elem().Elem().Type())) // interface -> *T -> T -> new(T)\n\t\t}\n\t\tmergeAny(out.Elem(), in.Elem(), false, nil)\n\tcase reflect.Map:\n\t\tif in.Len() == 0 {\n\t\t\treturn\n\t\t}\n\t\tif out.IsNil() {\n\t\t\tout.Set(reflect.MakeMap(in.Type()))\n\t\t}\n\t\t// For maps with value types of *T or []byte we need to deep copy each value.\n\t\telemKind := in.Type().Elem().Kind()\n\t\tfor _, key := range in.MapKeys() {\n\t\t\tvar val reflect.Value\n\t\t\tswitch elemKind {\n\t\t\tcase reflect.Ptr:\n\t\t\t\tval = reflect.New(in.Type().Elem().Elem())\n\t\t\t\tmergeAny(val, in.MapIndex(key), false, nil)\n\t\t\tcase reflect.Slice:\n\t\t\t\tval = in.MapIndex(key)\n\t\t\t\tval = reflect.ValueOf(append([]byte{}, val.Bytes()...))\n\t\t\tdefault:\n\t\t\t\tval = in.MapIndex(key)\n\t\t\t}\n\t\t\tout.SetMapIndex(key, val)\n\t\t}\n\tcase reflect.Ptr:\n\t\tif in.IsNil() {\n\t\t\treturn\n\t\t}\n\t\tif out.IsNil() {\n\t\t\tout.Set(reflect.New(in.Elem().Type()))\n\t\t}\n\t\tmergeAny(out.Elem(), in.Elem(), true, nil)\n\tcase reflect.Slice:\n\t\tif in.IsNil() {\n\t\t\treturn\n\t\t}\n\t\tif in.Type().Elem().Kind() == reflect.Uint8 {\n\t\t\t// []byte is a scalar bytes field, not a repeated field.\n\n\t\t\t// Edge case: if this is in a proto3 message, a zero length\n\t\t\t// bytes field is considered the zero value, and should not\n\t\t\t// be merged.\n\t\t\tif prop != nil && prop.proto3 && in.Len() == 0 {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Make a deep copy.\n\t\t\t// Append to []byte{} instead of []byte(nil) so that we never end up\n\t\t\t// with a nil result.\n\t\t\tout.SetBytes(append([]byte{}, in.Bytes()...))\n\t\t\treturn\n\t\t}\n\t\tn := in.Len()\n\t\tif out.IsNil() {\n\t\t\tout.Set(reflect.MakeSlice(in.Type(), 0, n))\n\t\t}\n\t\tswitch in.Type().Elem().Kind() {\n\t\tcase reflect.Bool, reflect.Float32, reflect.Float64, reflect.Int32, reflect.Int64,\n\t\t\treflect.String, reflect.Uint32, reflect.Uint64:\n\t\t\tout.Set(reflect.AppendSlice(out, in))\n\t\tdefault:\n\t\t\tfor i := 0; i < n; i++ {\n\t\t\t\tx := reflect.Indirect(reflect.New(in.Type().Elem()))\n\t\t\t\tmergeAny(x, in.Index(i), false, nil)\n\t\t\t\tout.Set(reflect.Append(out, x))\n\t\t\t}\n\t\t}\n\tcase reflect.Struct:\n\t\tmergeStruct(out, in)\n\tdefault:\n\t\t// unknown type, so not a protocol buffer\n\t\tlog.Printf(\"proto: don't know how to copy %v\", in)\n\t}\n}\n\nfunc mergeExtension(out, in map[int32]Extension) {\n\tfor extNum, eIn := range in {\n\t\teOut := Extension{desc: eIn.desc}\n\t\tif eIn.value != nil {\n\t\t\tv := reflect.New(reflect.TypeOf(eIn.value)).Elem()\n\t\t\tmergeAny(v, reflect.ValueOf(eIn.value), false, nil)\n\t\t\teOut.value = v.Interface()\n\t\t}\n\t\tif eIn.enc != nil {\n\t\t\teOut.enc = make([]byte, len(eIn.enc))\n\t\t\tcopy(eOut.enc, eIn.enc)\n\t\t}\n\n\t\tout[extNum] = eOut\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/golang/protobuf/proto/decode.go",
    "content": "// Go support for Protocol Buffers - Google's data interchange format\n//\n// Copyright 2010 The Go Authors.  All rights reserved.\n// https://github.com/golang/protobuf\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\npackage proto\n\n/*\n * Routines for decoding protocol buffer data to construct in-memory representations.\n */\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n)\n\n// errOverflow is returned when an integer is too large to be represented.\nvar errOverflow = errors.New(\"proto: integer overflow\")\n\n// ErrInternalBadWireType is returned by generated code when an incorrect\n// wire type is encountered. It does not get returned to user code.\nvar ErrInternalBadWireType = errors.New(\"proto: internal error: bad wiretype for oneof\")\n\n// DecodeVarint reads a varint-encoded integer from the slice.\n// It returns the integer and the number of bytes consumed, or\n// zero if there is not enough.\n// This is the format for the\n// int32, int64, uint32, uint64, bool, and enum\n// protocol buffer types.\nfunc DecodeVarint(buf []byte) (x uint64, n int) {\n\tfor shift := uint(0); shift < 64; shift += 7 {\n\t\tif n >= len(buf) {\n\t\t\treturn 0, 0\n\t\t}\n\t\tb := uint64(buf[n])\n\t\tn++\n\t\tx |= (b & 0x7F) << shift\n\t\tif (b & 0x80) == 0 {\n\t\t\treturn x, n\n\t\t}\n\t}\n\n\t// The number is too large to represent in a 64-bit value.\n\treturn 0, 0\n}\n\nfunc (p *Buffer) decodeVarintSlow() (x uint64, err error) {\n\ti := p.index\n\tl := len(p.buf)\n\n\tfor shift := uint(0); shift < 64; shift += 7 {\n\t\tif i >= l {\n\t\t\terr = io.ErrUnexpectedEOF\n\t\t\treturn\n\t\t}\n\t\tb := p.buf[i]\n\t\ti++\n\t\tx |= (uint64(b) & 0x7F) << shift\n\t\tif b < 0x80 {\n\t\t\tp.index = i\n\t\t\treturn\n\t\t}\n\t}\n\n\t// The number is too large to represent in a 64-bit value.\n\terr = errOverflow\n\treturn\n}\n\n// DecodeVarint reads a varint-encoded integer from the Buffer.\n// This is the format for the\n// int32, int64, uint32, uint64, bool, and enum\n// protocol buffer types.\nfunc (p *Buffer) DecodeVarint() (x uint64, err error) {\n\ti := p.index\n\tbuf := p.buf\n\n\tif i >= len(buf) {\n\t\treturn 0, io.ErrUnexpectedEOF\n\t} else if buf[i] < 0x80 {\n\t\tp.index++\n\t\treturn uint64(buf[i]), nil\n\t} else if len(buf)-i < 10 {\n\t\treturn p.decodeVarintSlow()\n\t}\n\n\tvar b uint64\n\t// we already checked the first byte\n\tx = uint64(buf[i]) - 0x80\n\ti++\n\n\tb = uint64(buf[i])\n\ti++\n\tx += b << 7\n\tif b&0x80 == 0 {\n\t\tgoto done\n\t}\n\tx -= 0x80 << 7\n\n\tb = uint64(buf[i])\n\ti++\n\tx += b << 14\n\tif b&0x80 == 0 {\n\t\tgoto done\n\t}\n\tx -= 0x80 << 14\n\n\tb = uint64(buf[i])\n\ti++\n\tx += b << 21\n\tif b&0x80 == 0 {\n\t\tgoto done\n\t}\n\tx -= 0x80 << 21\n\n\tb = uint64(buf[i])\n\ti++\n\tx += b << 28\n\tif b&0x80 == 0 {\n\t\tgoto done\n\t}\n\tx -= 0x80 << 28\n\n\tb = uint64(buf[i])\n\ti++\n\tx += b << 35\n\tif b&0x80 == 0 {\n\t\tgoto done\n\t}\n\tx -= 0x80 << 35\n\n\tb = uint64(buf[i])\n\ti++\n\tx += b << 42\n\tif b&0x80 == 0 {\n\t\tgoto done\n\t}\n\tx -= 0x80 << 42\n\n\tb = uint64(buf[i])\n\ti++\n\tx += b << 49\n\tif b&0x80 == 0 {\n\t\tgoto done\n\t}\n\tx -= 0x80 << 49\n\n\tb = uint64(buf[i])\n\ti++\n\tx += b << 56\n\tif b&0x80 == 0 {\n\t\tgoto done\n\t}\n\tx -= 0x80 << 56\n\n\tb = uint64(buf[i])\n\ti++\n\tx += b << 63\n\tif b&0x80 == 0 {\n\t\tgoto done\n\t}\n\n\treturn 0, errOverflow\n\ndone:\n\tp.index = i\n\treturn x, nil\n}\n\n// DecodeFixed64 reads a 64-bit integer from the Buffer.\n// This is the format for the\n// fixed64, sfixed64, and double protocol buffer types.\nfunc (p *Buffer) DecodeFixed64() (x uint64, err error) {\n\t// x, err already 0\n\ti := p.index + 8\n\tif i < 0 || i > len(p.buf) {\n\t\terr = io.ErrUnexpectedEOF\n\t\treturn\n\t}\n\tp.index = i\n\n\tx = uint64(p.buf[i-8])\n\tx |= uint64(p.buf[i-7]) << 8\n\tx |= uint64(p.buf[i-6]) << 16\n\tx |= uint64(p.buf[i-5]) << 24\n\tx |= uint64(p.buf[i-4]) << 32\n\tx |= uint64(p.buf[i-3]) << 40\n\tx |= uint64(p.buf[i-2]) << 48\n\tx |= uint64(p.buf[i-1]) << 56\n\treturn\n}\n\n// DecodeFixed32 reads a 32-bit integer from the Buffer.\n// This is the format for the\n// fixed32, sfixed32, and float protocol buffer types.\nfunc (p *Buffer) DecodeFixed32() (x uint64, err error) {\n\t// x, err already 0\n\ti := p.index + 4\n\tif i < 0 || i > len(p.buf) {\n\t\terr = io.ErrUnexpectedEOF\n\t\treturn\n\t}\n\tp.index = i\n\n\tx = uint64(p.buf[i-4])\n\tx |= uint64(p.buf[i-3]) << 8\n\tx |= uint64(p.buf[i-2]) << 16\n\tx |= uint64(p.buf[i-1]) << 24\n\treturn\n}\n\n// DecodeZigzag64 reads a zigzag-encoded 64-bit integer\n// from the Buffer.\n// This is the format used for the sint64 protocol buffer type.\nfunc (p *Buffer) DecodeZigzag64() (x uint64, err error) {\n\tx, err = p.DecodeVarint()\n\tif err != nil {\n\t\treturn\n\t}\n\tx = (x >> 1) ^ uint64((int64(x&1)<<63)>>63)\n\treturn\n}\n\n// DecodeZigzag32 reads a zigzag-encoded 32-bit integer\n// from  the Buffer.\n// This is the format used for the sint32 protocol buffer type.\nfunc (p *Buffer) DecodeZigzag32() (x uint64, err error) {\n\tx, err = p.DecodeVarint()\n\tif err != nil {\n\t\treturn\n\t}\n\tx = uint64((uint32(x) >> 1) ^ uint32((int32(x&1)<<31)>>31))\n\treturn\n}\n\n// DecodeRawBytes reads a count-delimited byte buffer from the Buffer.\n// This is the format used for the bytes protocol buffer\n// type and for embedded messages.\nfunc (p *Buffer) DecodeRawBytes(alloc bool) (buf []byte, err error) {\n\tn, err := p.DecodeVarint()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tnb := int(n)\n\tif nb < 0 {\n\t\treturn nil, fmt.Errorf(\"proto: bad byte length %d\", nb)\n\t}\n\tend := p.index + nb\n\tif end < p.index || end > len(p.buf) {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\n\tif !alloc {\n\t\t// todo: check if can get more uses of alloc=false\n\t\tbuf = p.buf[p.index:end]\n\t\tp.index += nb\n\t\treturn\n\t}\n\n\tbuf = make([]byte, nb)\n\tcopy(buf, p.buf[p.index:])\n\tp.index += nb\n\treturn\n}\n\n// DecodeStringBytes reads an encoded string from the Buffer.\n// This is the format used for the proto2 string type.\nfunc (p *Buffer) DecodeStringBytes() (s string, err error) {\n\tbuf, err := p.DecodeRawBytes(false)\n\tif err != nil {\n\t\treturn\n\t}\n\treturn string(buf), nil\n}\n\n// Unmarshaler is the interface representing objects that can\n// unmarshal themselves.  The argument points to data that may be\n// overwritten, so implementations should not keep references to the\n// buffer.\n// Unmarshal implementations should not clear the receiver.\n// Any unmarshaled data should be merged into the receiver.\n// Callers of Unmarshal that do not want to retain existing data\n// should Reset the receiver before calling Unmarshal.\ntype Unmarshaler interface {\n\tUnmarshal([]byte) error\n}\n\n// newUnmarshaler is the interface representing objects that can\n// unmarshal themselves. The semantics are identical to Unmarshaler.\n//\n// This exists to support protoc-gen-go generated messages.\n// The proto package will stop type-asserting to this interface in the future.\n//\n// DO NOT DEPEND ON THIS.\ntype newUnmarshaler interface {\n\tXXX_Unmarshal([]byte) error\n}\n\n// Unmarshal parses the protocol buffer representation in buf and places the\n// decoded result in pb.  If the struct underlying pb does not match\n// the data in buf, the results can be unpredictable.\n//\n// Unmarshal resets pb before starting to unmarshal, so any\n// existing data in pb is always removed. Use UnmarshalMerge\n// to preserve and append to existing data.\nfunc Unmarshal(buf []byte, pb Message) error {\n\tpb.Reset()\n\tif u, ok := pb.(newUnmarshaler); ok {\n\t\treturn u.XXX_Unmarshal(buf)\n\t}\n\tif u, ok := pb.(Unmarshaler); ok {\n\t\treturn u.Unmarshal(buf)\n\t}\n\treturn NewBuffer(buf).Unmarshal(pb)\n}\n\n// UnmarshalMerge parses the protocol buffer representation in buf and\n// writes the decoded result to pb.  If the struct underlying pb does not match\n// the data in buf, the results can be unpredictable.\n//\n// UnmarshalMerge merges into existing data in pb.\n// Most code should use Unmarshal instead.\nfunc UnmarshalMerge(buf []byte, pb Message) error {\n\tif u, ok := pb.(newUnmarshaler); ok {\n\t\treturn u.XXX_Unmarshal(buf)\n\t}\n\tif u, ok := pb.(Unmarshaler); ok {\n\t\t// NOTE: The history of proto have unfortunately been inconsistent\n\t\t// whether Unmarshaler should or should not implicitly clear itself.\n\t\t// Some implementations do, most do not.\n\t\t// Thus, calling this here may or may not do what people want.\n\t\t//\n\t\t// See https://github.com/golang/protobuf/issues/424\n\t\treturn u.Unmarshal(buf)\n\t}\n\treturn NewBuffer(buf).Unmarshal(pb)\n}\n\n// DecodeMessage reads a count-delimited message from the Buffer.\nfunc (p *Buffer) DecodeMessage(pb Message) error {\n\tenc, err := p.DecodeRawBytes(false)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn NewBuffer(enc).Unmarshal(pb)\n}\n\n// DecodeGroup reads a tag-delimited group from the Buffer.\n// StartGroup tag is already consumed. This function consumes\n// EndGroup tag.\nfunc (p *Buffer) DecodeGroup(pb Message) error {\n\tb := p.buf[p.index:]\n\tx, y := findEndGroup(b)\n\tif x < 0 {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\terr := Unmarshal(b[:x], pb)\n\tp.index += y\n\treturn err\n}\n\n// Unmarshal parses the protocol buffer representation in the\n// Buffer and places the decoded result in pb.  If the struct\n// underlying pb does not match the data in the buffer, the results can be\n// unpredictable.\n//\n// Unlike proto.Unmarshal, this does not reset pb before starting to unmarshal.\nfunc (p *Buffer) Unmarshal(pb Message) error {\n\t// If the object can unmarshal itself, let it.\n\tif u, ok := pb.(newUnmarshaler); ok {\n\t\terr := u.XXX_Unmarshal(p.buf[p.index:])\n\t\tp.index = len(p.buf)\n\t\treturn err\n\t}\n\tif u, ok := pb.(Unmarshaler); ok {\n\t\t// NOTE: The history of proto have unfortunately been inconsistent\n\t\t// whether Unmarshaler should or should not implicitly clear itself.\n\t\t// Some implementations do, most do not.\n\t\t// Thus, calling this here may or may not do what people want.\n\t\t//\n\t\t// See https://github.com/golang/protobuf/issues/424\n\t\terr := u.Unmarshal(p.buf[p.index:])\n\t\tp.index = len(p.buf)\n\t\treturn err\n\t}\n\n\t// Slow workaround for messages that aren't Unmarshalers.\n\t// This includes some hand-coded .pb.go files and\n\t// bootstrap protos.\n\t// TODO: fix all of those and then add Unmarshal to\n\t// the Message interface. Then:\n\t// The cast above and code below can be deleted.\n\t// The old unmarshaler can be deleted.\n\t// Clients can call Unmarshal directly (can already do that, actually).\n\tvar info InternalMessageInfo\n\terr := info.Unmarshal(pb, p.buf[p.index:])\n\tp.index = len(p.buf)\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/golang/protobuf/proto/deprecated.go",
    "content": "// Go support for Protocol Buffers - Google's data interchange format\n//\n// Copyright 2018 The Go Authors.  All rights reserved.\n// https://github.com/golang/protobuf\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\npackage proto\n\nimport \"errors\"\n\n// Deprecated: do not use.\ntype Stats struct{ Emalloc, Dmalloc, Encode, Decode, Chit, Cmiss, Size uint64 }\n\n// Deprecated: do not use.\nfunc GetStats() Stats { return Stats{} }\n\n// Deprecated: do not use.\nfunc MarshalMessageSet(interface{}) ([]byte, error) {\n\treturn nil, errors.New(\"proto: not implemented\")\n}\n\n// Deprecated: do not use.\nfunc UnmarshalMessageSet([]byte, interface{}) error {\n\treturn errors.New(\"proto: not implemented\")\n}\n\n// Deprecated: do not use.\nfunc MarshalMessageSetJSON(interface{}) ([]byte, error) {\n\treturn nil, errors.New(\"proto: not implemented\")\n}\n\n// Deprecated: do not use.\nfunc UnmarshalMessageSetJSON([]byte, interface{}) error {\n\treturn errors.New(\"proto: not implemented\")\n}\n\n// Deprecated: do not use.\nfunc RegisterMessageSetType(Message, int32, string) {}\n"
  },
  {
    "path": "vendor/github.com/golang/protobuf/proto/discard.go",
    "content": "// Go support for Protocol Buffers - Google's data interchange format\n//\n// Copyright 2017 The Go Authors.  All rights reserved.\n// https://github.com/golang/protobuf\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\npackage proto\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\t\"strings\"\n\t\"sync\"\n\t\"sync/atomic\"\n)\n\ntype generatedDiscarder interface {\n\tXXX_DiscardUnknown()\n}\n\n// DiscardUnknown recursively discards all unknown fields from this message\n// and all embedded messages.\n//\n// When unmarshaling a message with unrecognized fields, the tags and values\n// of such fields are preserved in the Message. This allows a later call to\n// marshal to be able to produce a message that continues to have those\n// unrecognized fields. To avoid this, DiscardUnknown is used to\n// explicitly clear the unknown fields after unmarshaling.\n//\n// For proto2 messages, the unknown fields of message extensions are only\n// discarded from messages that have been accessed via GetExtension.\nfunc DiscardUnknown(m Message) {\n\tif m, ok := m.(generatedDiscarder); ok {\n\t\tm.XXX_DiscardUnknown()\n\t\treturn\n\t}\n\t// TODO: Dynamically populate a InternalMessageInfo for legacy messages,\n\t// but the master branch has no implementation for InternalMessageInfo,\n\t// so it would be more work to replicate that approach.\n\tdiscardLegacy(m)\n}\n\n// DiscardUnknown recursively discards all unknown fields.\nfunc (a *InternalMessageInfo) DiscardUnknown(m Message) {\n\tdi := atomicLoadDiscardInfo(&a.discard)\n\tif di == nil {\n\t\tdi = getDiscardInfo(reflect.TypeOf(m).Elem())\n\t\tatomicStoreDiscardInfo(&a.discard, di)\n\t}\n\tdi.discard(toPointer(&m))\n}\n\ntype discardInfo struct {\n\ttyp reflect.Type\n\n\tinitialized int32 // 0: only typ is valid, 1: everything is valid\n\tlock        sync.Mutex\n\n\tfields       []discardFieldInfo\n\tunrecognized field\n}\n\ntype discardFieldInfo struct {\n\tfield   field // Offset of field, guaranteed to be valid\n\tdiscard func(src pointer)\n}\n\nvar (\n\tdiscardInfoMap  = map[reflect.Type]*discardInfo{}\n\tdiscardInfoLock sync.Mutex\n)\n\nfunc getDiscardInfo(t reflect.Type) *discardInfo {\n\tdiscardInfoLock.Lock()\n\tdefer discardInfoLock.Unlock()\n\tdi := discardInfoMap[t]\n\tif di == nil {\n\t\tdi = &discardInfo{typ: t}\n\t\tdiscardInfoMap[t] = di\n\t}\n\treturn di\n}\n\nfunc (di *discardInfo) discard(src pointer) {\n\tif src.isNil() {\n\t\treturn // Nothing to do.\n\t}\n\n\tif atomic.LoadInt32(&di.initialized) == 0 {\n\t\tdi.computeDiscardInfo()\n\t}\n\n\tfor _, fi := range di.fields {\n\t\tsfp := src.offset(fi.field)\n\t\tfi.discard(sfp)\n\t}\n\n\t// For proto2 messages, only discard unknown fields in message extensions\n\t// that have been accessed via GetExtension.\n\tif em, err := extendable(src.asPointerTo(di.typ).Interface()); err == nil {\n\t\t// Ignore lock since DiscardUnknown is not concurrency safe.\n\t\temm, _ := em.extensionsRead()\n\t\tfor _, mx := range emm {\n\t\t\tif m, ok := mx.value.(Message); ok {\n\t\t\t\tDiscardUnknown(m)\n\t\t\t}\n\t\t}\n\t}\n\n\tif di.unrecognized.IsValid() {\n\t\t*src.offset(di.unrecognized).toBytes() = nil\n\t}\n}\n\nfunc (di *discardInfo) computeDiscardInfo() {\n\tdi.lock.Lock()\n\tdefer di.lock.Unlock()\n\tif di.initialized != 0 {\n\t\treturn\n\t}\n\tt := di.typ\n\tn := t.NumField()\n\n\tfor i := 0; i < n; i++ {\n\t\tf := t.Field(i)\n\t\tif strings.HasPrefix(f.Name, \"XXX_\") {\n\t\t\tcontinue\n\t\t}\n\n\t\tdfi := discardFieldInfo{field: toField(&f)}\n\t\ttf := f.Type\n\n\t\t// Unwrap tf to get its most basic type.\n\t\tvar isPointer, isSlice bool\n\t\tif tf.Kind() == reflect.Slice && tf.Elem().Kind() != reflect.Uint8 {\n\t\t\tisSlice = true\n\t\t\ttf = tf.Elem()\n\t\t}\n\t\tif tf.Kind() == reflect.Ptr {\n\t\t\tisPointer = true\n\t\t\ttf = tf.Elem()\n\t\t}\n\t\tif isPointer && isSlice && tf.Kind() != reflect.Struct {\n\t\t\tpanic(fmt.Sprintf(\"%v.%s cannot be a slice of pointers to primitive types\", t, f.Name))\n\t\t}\n\n\t\tswitch tf.Kind() {\n\t\tcase reflect.Struct:\n\t\t\tswitch {\n\t\t\tcase !isPointer:\n\t\t\t\tpanic(fmt.Sprintf(\"%v.%s cannot be a direct struct value\", t, f.Name))\n\t\t\tcase isSlice: // E.g., []*pb.T\n\t\t\t\tdi := getDiscardInfo(tf)\n\t\t\t\tdfi.discard = func(src pointer) {\n\t\t\t\t\tsps := src.getPointerSlice()\n\t\t\t\t\tfor _, sp := range sps {\n\t\t\t\t\t\tif !sp.isNil() {\n\t\t\t\t\t\t\tdi.discard(sp)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tdefault: // E.g., *pb.T\n\t\t\t\tdi := getDiscardInfo(tf)\n\t\t\t\tdfi.discard = func(src pointer) {\n\t\t\t\t\tsp := src.getPointer()\n\t\t\t\t\tif !sp.isNil() {\n\t\t\t\t\t\tdi.discard(sp)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\tcase reflect.Map:\n\t\t\tswitch {\n\t\t\tcase isPointer || isSlice:\n\t\t\t\tpanic(fmt.Sprintf(\"%v.%s cannot be a pointer to a map or a slice of map values\", t, f.Name))\n\t\t\tdefault: // E.g., map[K]V\n\t\t\t\tif tf.Elem().Kind() == reflect.Ptr { // Proto struct (e.g., *T)\n\t\t\t\t\tdfi.discard = func(src pointer) {\n\t\t\t\t\t\tsm := src.asPointerTo(tf).Elem()\n\t\t\t\t\t\tif sm.Len() == 0 {\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor _, key := range sm.MapKeys() {\n\t\t\t\t\t\t\tval := sm.MapIndex(key)\n\t\t\t\t\t\t\tDiscardUnknown(val.Interface().(Message))\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tdfi.discard = func(pointer) {} // Noop\n\t\t\t\t}\n\t\t\t}\n\t\tcase reflect.Interface:\n\t\t\t// Must be oneof field.\n\t\t\tswitch {\n\t\t\tcase isPointer || isSlice:\n\t\t\t\tpanic(fmt.Sprintf(\"%v.%s cannot be a pointer to a interface or a slice of interface values\", t, f.Name))\n\t\t\tdefault: // E.g., interface{}\n\t\t\t\t// TODO: Make this faster?\n\t\t\t\tdfi.discard = func(src pointer) {\n\t\t\t\t\tsu := src.asPointerTo(tf).Elem()\n\t\t\t\t\tif !su.IsNil() {\n\t\t\t\t\t\tsv := su.Elem().Elem().Field(0)\n\t\t\t\t\t\tif sv.Kind() == reflect.Ptr && sv.IsNil() {\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\t\t\t\t\t\tswitch sv.Type().Kind() {\n\t\t\t\t\t\tcase reflect.Ptr: // Proto struct (e.g., *T)\n\t\t\t\t\t\t\tDiscardUnknown(sv.Interface().(Message))\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\tdefault:\n\t\t\tcontinue\n\t\t}\n\t\tdi.fields = append(di.fields, dfi)\n\t}\n\n\tdi.unrecognized = invalidField\n\tif f, ok := t.FieldByName(\"XXX_unrecognized\"); ok {\n\t\tif f.Type != reflect.TypeOf([]byte{}) {\n\t\t\tpanic(\"expected XXX_unrecognized to be of type []byte\")\n\t\t}\n\t\tdi.unrecognized = toField(&f)\n\t}\n\n\tatomic.StoreInt32(&di.initialized, 1)\n}\n\nfunc discardLegacy(m Message) {\n\tv := reflect.ValueOf(m)\n\tif v.Kind() != reflect.Ptr || v.IsNil() {\n\t\treturn\n\t}\n\tv = v.Elem()\n\tif v.Kind() != reflect.Struct {\n\t\treturn\n\t}\n\tt := v.Type()\n\n\tfor i := 0; i < v.NumField(); i++ {\n\t\tf := t.Field(i)\n\t\tif strings.HasPrefix(f.Name, \"XXX_\") {\n\t\t\tcontinue\n\t\t}\n\t\tvf := v.Field(i)\n\t\ttf := f.Type\n\n\t\t// Unwrap tf to get its most basic type.\n\t\tvar isPointer, isSlice bool\n\t\tif tf.Kind() == reflect.Slice && tf.Elem().Kind() != reflect.Uint8 {\n\t\t\tisSlice = true\n\t\t\ttf = tf.Elem()\n\t\t}\n\t\tif tf.Kind() == reflect.Ptr {\n\t\t\tisPointer = true\n\t\t\ttf = tf.Elem()\n\t\t}\n\t\tif isPointer && isSlice && tf.Kind() != reflect.Struct {\n\t\t\tpanic(fmt.Sprintf(\"%T.%s cannot be a slice of pointers to primitive types\", m, f.Name))\n\t\t}\n\n\t\tswitch tf.Kind() {\n\t\tcase reflect.Struct:\n\t\t\tswitch {\n\t\t\tcase !isPointer:\n\t\t\t\tpanic(fmt.Sprintf(\"%T.%s cannot be a direct struct value\", m, f.Name))\n\t\t\tcase isSlice: // E.g., []*pb.T\n\t\t\t\tfor j := 0; j < vf.Len(); j++ {\n\t\t\t\t\tdiscardLegacy(vf.Index(j).Interface().(Message))\n\t\t\t\t}\n\t\t\tdefault: // E.g., *pb.T\n\t\t\t\tdiscardLegacy(vf.Interface().(Message))\n\t\t\t}\n\t\tcase reflect.Map:\n\t\t\tswitch {\n\t\t\tcase isPointer || isSlice:\n\t\t\t\tpanic(fmt.Sprintf(\"%T.%s cannot be a pointer to a map or a slice of map values\", m, f.Name))\n\t\t\tdefault: // E.g., map[K]V\n\t\t\t\ttv := vf.Type().Elem()\n\t\t\t\tif tv.Kind() == reflect.Ptr && tv.Implements(protoMessageType) { // Proto struct (e.g., *T)\n\t\t\t\t\tfor _, key := range vf.MapKeys() {\n\t\t\t\t\t\tval := vf.MapIndex(key)\n\t\t\t\t\t\tdiscardLegacy(val.Interface().(Message))\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\tcase reflect.Interface:\n\t\t\t// Must be oneof field.\n\t\t\tswitch {\n\t\t\tcase isPointer || isSlice:\n\t\t\t\tpanic(fmt.Sprintf(\"%T.%s cannot be a pointer to a interface or a slice of interface values\", m, f.Name))\n\t\t\tdefault: // E.g., test_proto.isCommunique_Union interface\n\t\t\t\tif !vf.IsNil() && f.Tag.Get(\"protobuf_oneof\") != \"\" {\n\t\t\t\t\tvf = vf.Elem() // E.g., *test_proto.Communique_Msg\n\t\t\t\t\tif !vf.IsNil() {\n\t\t\t\t\t\tvf = vf.Elem()   // E.g., test_proto.Communique_Msg\n\t\t\t\t\t\tvf = vf.Field(0) // E.g., Proto struct (e.g., *T) or primitive value\n\t\t\t\t\t\tif vf.Kind() == reflect.Ptr {\n\t\t\t\t\t\t\tdiscardLegacy(vf.Interface().(Message))\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif vf := v.FieldByName(\"XXX_unrecognized\"); vf.IsValid() {\n\t\tif vf.Type() != reflect.TypeOf([]byte{}) {\n\t\t\tpanic(\"expected XXX_unrecognized to be of type []byte\")\n\t\t}\n\t\tvf.Set(reflect.ValueOf([]byte(nil)))\n\t}\n\n\t// For proto2 messages, only discard unknown fields in message extensions\n\t// that have been accessed via GetExtension.\n\tif em, err := extendable(m); err == nil {\n\t\t// Ignore lock since discardLegacy is not concurrency safe.\n\t\temm, _ := em.extensionsRead()\n\t\tfor _, mx := range emm {\n\t\t\tif m, ok := mx.value.(Message); ok {\n\t\t\t\tdiscardLegacy(m)\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/golang/protobuf/proto/encode.go",
    "content": "// Go support for Protocol Buffers - Google's data interchange format\n//\n// Copyright 2010 The Go Authors.  All rights reserved.\n// https://github.com/golang/protobuf\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\npackage proto\n\n/*\n * Routines for encoding data into the wire format for protocol buffers.\n */\n\nimport (\n\t\"errors\"\n\t\"reflect\"\n)\n\nvar (\n\t// errRepeatedHasNil is the error returned if Marshal is called with\n\t// a struct with a repeated field containing a nil element.\n\terrRepeatedHasNil = errors.New(\"proto: repeated field has nil element\")\n\n\t// errOneofHasNil is the error returned if Marshal is called with\n\t// a struct with a oneof field containing a nil element.\n\terrOneofHasNil = errors.New(\"proto: oneof field has nil value\")\n\n\t// ErrNil is the error returned if Marshal is called with nil.\n\tErrNil = errors.New(\"proto: Marshal called with nil\")\n\n\t// ErrTooLarge is the error returned if Marshal is called with a\n\t// message that encodes to >2GB.\n\tErrTooLarge = errors.New(\"proto: message encodes to over 2 GB\")\n)\n\n// The fundamental encoders that put bytes on the wire.\n// Those that take integer types all accept uint64 and are\n// therefore of type valueEncoder.\n\nconst maxVarintBytes = 10 // maximum length of a varint\n\n// EncodeVarint returns the varint encoding of x.\n// This is the format for the\n// int32, int64, uint32, uint64, bool, and enum\n// protocol buffer types.\n// Not used by the package itself, but helpful to clients\n// wishing to use the same encoding.\nfunc EncodeVarint(x uint64) []byte {\n\tvar buf [maxVarintBytes]byte\n\tvar n int\n\tfor n = 0; x > 127; n++ {\n\t\tbuf[n] = 0x80 | uint8(x&0x7F)\n\t\tx >>= 7\n\t}\n\tbuf[n] = uint8(x)\n\tn++\n\treturn buf[0:n]\n}\n\n// EncodeVarint writes a varint-encoded integer to the Buffer.\n// This is the format for the\n// int32, int64, uint32, uint64, bool, and enum\n// protocol buffer types.\nfunc (p *Buffer) EncodeVarint(x uint64) error {\n\tfor x >= 1<<7 {\n\t\tp.buf = append(p.buf, uint8(x&0x7f|0x80))\n\t\tx >>= 7\n\t}\n\tp.buf = append(p.buf, uint8(x))\n\treturn nil\n}\n\n// SizeVarint returns the varint encoding size of an integer.\nfunc SizeVarint(x uint64) int {\n\tswitch {\n\tcase x < 1<<7:\n\t\treturn 1\n\tcase x < 1<<14:\n\t\treturn 2\n\tcase x < 1<<21:\n\t\treturn 3\n\tcase x < 1<<28:\n\t\treturn 4\n\tcase x < 1<<35:\n\t\treturn 5\n\tcase x < 1<<42:\n\t\treturn 6\n\tcase x < 1<<49:\n\t\treturn 7\n\tcase x < 1<<56:\n\t\treturn 8\n\tcase x < 1<<63:\n\t\treturn 9\n\t}\n\treturn 10\n}\n\n// EncodeFixed64 writes a 64-bit integer to the Buffer.\n// This is the format for the\n// fixed64, sfixed64, and double protocol buffer types.\nfunc (p *Buffer) EncodeFixed64(x uint64) error {\n\tp.buf = append(p.buf,\n\t\tuint8(x),\n\t\tuint8(x>>8),\n\t\tuint8(x>>16),\n\t\tuint8(x>>24),\n\t\tuint8(x>>32),\n\t\tuint8(x>>40),\n\t\tuint8(x>>48),\n\t\tuint8(x>>56))\n\treturn nil\n}\n\n// EncodeFixed32 writes a 32-bit integer to the Buffer.\n// This is the format for the\n// fixed32, sfixed32, and float protocol buffer types.\nfunc (p *Buffer) EncodeFixed32(x uint64) error {\n\tp.buf = append(p.buf,\n\t\tuint8(x),\n\t\tuint8(x>>8),\n\t\tuint8(x>>16),\n\t\tuint8(x>>24))\n\treturn nil\n}\n\n// EncodeZigzag64 writes a zigzag-encoded 64-bit integer\n// to the Buffer.\n// This is the format used for the sint64 protocol buffer type.\nfunc (p *Buffer) EncodeZigzag64(x uint64) error {\n\t// use signed number to get arithmetic right shift.\n\treturn p.EncodeVarint(uint64((x << 1) ^ uint64((int64(x) >> 63))))\n}\n\n// EncodeZigzag32 writes a zigzag-encoded 32-bit integer\n// to the Buffer.\n// This is the format used for the sint32 protocol buffer type.\nfunc (p *Buffer) EncodeZigzag32(x uint64) error {\n\t// use signed number to get arithmetic right shift.\n\treturn p.EncodeVarint(uint64((uint32(x) << 1) ^ uint32((int32(x) >> 31))))\n}\n\n// EncodeRawBytes writes a count-delimited byte buffer to the Buffer.\n// This is the format used for the bytes protocol buffer\n// type and for embedded messages.\nfunc (p *Buffer) EncodeRawBytes(b []byte) error {\n\tp.EncodeVarint(uint64(len(b)))\n\tp.buf = append(p.buf, b...)\n\treturn nil\n}\n\n// EncodeStringBytes writes an encoded string to the Buffer.\n// This is the format used for the proto2 string type.\nfunc (p *Buffer) EncodeStringBytes(s string) error {\n\tp.EncodeVarint(uint64(len(s)))\n\tp.buf = append(p.buf, s...)\n\treturn nil\n}\n\n// Marshaler is the interface representing objects that can marshal themselves.\ntype Marshaler interface {\n\tMarshal() ([]byte, error)\n}\n\n// EncodeMessage writes the protocol buffer to the Buffer,\n// prefixed by a varint-encoded length.\nfunc (p *Buffer) EncodeMessage(pb Message) error {\n\tsiz := Size(pb)\n\tp.EncodeVarint(uint64(siz))\n\treturn p.Marshal(pb)\n}\n\n// All protocol buffer fields are nillable, but be careful.\nfunc isNil(v reflect.Value) bool {\n\tswitch v.Kind() {\n\tcase reflect.Interface, reflect.Map, reflect.Ptr, reflect.Slice:\n\t\treturn v.IsNil()\n\t}\n\treturn false\n}\n"
  },
  {
    "path": "vendor/github.com/golang/protobuf/proto/equal.go",
    "content": "// Go support for Protocol Buffers - Google's data interchange format\n//\n// Copyright 2011 The Go Authors.  All rights reserved.\n// https://github.com/golang/protobuf\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n// Protocol buffer comparison.\n\npackage proto\n\nimport (\n\t\"bytes\"\n\t\"log\"\n\t\"reflect\"\n\t\"strings\"\n)\n\n/*\nEqual returns true iff protocol buffers a and b are equal.\nThe arguments must both be pointers to protocol buffer structs.\n\nEquality is defined in this way:\n  - Two messages are equal iff they are the same type,\n    corresponding fields are equal, unknown field sets\n    are equal, and extensions sets are equal.\n  - Two set scalar fields are equal iff their values are equal.\n    If the fields are of a floating-point type, remember that\n    NaN != x for all x, including NaN. If the message is defined\n    in a proto3 .proto file, fields are not \"set\"; specifically,\n    zero length proto3 \"bytes\" fields are equal (nil == {}).\n  - Two repeated fields are equal iff their lengths are the same,\n    and their corresponding elements are equal. Note a \"bytes\" field,\n    although represented by []byte, is not a repeated field and the\n    rule for the scalar fields described above applies.\n  - Two unset fields are equal.\n  - Two unknown field sets are equal if their current\n    encoded state is equal.\n  - Two extension sets are equal iff they have corresponding\n    elements that are pairwise equal.\n  - Two map fields are equal iff their lengths are the same,\n    and they contain the same set of elements. Zero-length map\n    fields are equal.\n  - Every other combination of things are not equal.\n\nThe return value is undefined if a and b are not protocol buffers.\n*/\nfunc Equal(a, b Message) bool {\n\tif a == nil || b == nil {\n\t\treturn a == b\n\t}\n\tv1, v2 := reflect.ValueOf(a), reflect.ValueOf(b)\n\tif v1.Type() != v2.Type() {\n\t\treturn false\n\t}\n\tif v1.Kind() == reflect.Ptr {\n\t\tif v1.IsNil() {\n\t\t\treturn v2.IsNil()\n\t\t}\n\t\tif v2.IsNil() {\n\t\t\treturn false\n\t\t}\n\t\tv1, v2 = v1.Elem(), v2.Elem()\n\t}\n\tif v1.Kind() != reflect.Struct {\n\t\treturn false\n\t}\n\treturn equalStruct(v1, v2)\n}\n\n// v1 and v2 are known to have the same type.\nfunc equalStruct(v1, v2 reflect.Value) bool {\n\tsprop := GetProperties(v1.Type())\n\tfor i := 0; i < v1.NumField(); i++ {\n\t\tf := v1.Type().Field(i)\n\t\tif strings.HasPrefix(f.Name, \"XXX_\") {\n\t\t\tcontinue\n\t\t}\n\t\tf1, f2 := v1.Field(i), v2.Field(i)\n\t\tif f.Type.Kind() == reflect.Ptr {\n\t\t\tif n1, n2 := f1.IsNil(), f2.IsNil(); n1 && n2 {\n\t\t\t\t// both unset\n\t\t\t\tcontinue\n\t\t\t} else if n1 != n2 {\n\t\t\t\t// set/unset mismatch\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tf1, f2 = f1.Elem(), f2.Elem()\n\t\t}\n\t\tif !equalAny(f1, f2, sprop.Prop[i]) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\tif em1 := v1.FieldByName(\"XXX_InternalExtensions\"); em1.IsValid() {\n\t\tem2 := v2.FieldByName(\"XXX_InternalExtensions\")\n\t\tif !equalExtensions(v1.Type(), em1.Interface().(XXX_InternalExtensions), em2.Interface().(XXX_InternalExtensions)) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\tif em1 := v1.FieldByName(\"XXX_extensions\"); em1.IsValid() {\n\t\tem2 := v2.FieldByName(\"XXX_extensions\")\n\t\tif !equalExtMap(v1.Type(), em1.Interface().(map[int32]Extension), em2.Interface().(map[int32]Extension)) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\tuf := v1.FieldByName(\"XXX_unrecognized\")\n\tif !uf.IsValid() {\n\t\treturn true\n\t}\n\n\tu1 := uf.Bytes()\n\tu2 := v2.FieldByName(\"XXX_unrecognized\").Bytes()\n\treturn bytes.Equal(u1, u2)\n}\n\n// v1 and v2 are known to have the same type.\n// prop may be nil.\nfunc equalAny(v1, v2 reflect.Value, prop *Properties) bool {\n\tif v1.Type() == protoMessageType {\n\t\tm1, _ := v1.Interface().(Message)\n\t\tm2, _ := v2.Interface().(Message)\n\t\treturn Equal(m1, m2)\n\t}\n\tswitch v1.Kind() {\n\tcase reflect.Bool:\n\t\treturn v1.Bool() == v2.Bool()\n\tcase reflect.Float32, reflect.Float64:\n\t\treturn v1.Float() == v2.Float()\n\tcase reflect.Int32, reflect.Int64:\n\t\treturn v1.Int() == v2.Int()\n\tcase reflect.Interface:\n\t\t// Probably a oneof field; compare the inner values.\n\t\tn1, n2 := v1.IsNil(), v2.IsNil()\n\t\tif n1 || n2 {\n\t\t\treturn n1 == n2\n\t\t}\n\t\te1, e2 := v1.Elem(), v2.Elem()\n\t\tif e1.Type() != e2.Type() {\n\t\t\treturn false\n\t\t}\n\t\treturn equalAny(e1, e2, nil)\n\tcase reflect.Map:\n\t\tif v1.Len() != v2.Len() {\n\t\t\treturn false\n\t\t}\n\t\tfor _, key := range v1.MapKeys() {\n\t\t\tval2 := v2.MapIndex(key)\n\t\t\tif !val2.IsValid() {\n\t\t\t\t// This key was not found in the second map.\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif !equalAny(v1.MapIndex(key), val2, nil) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\treturn true\n\tcase reflect.Ptr:\n\t\t// Maps may have nil values in them, so check for nil.\n\t\tif v1.IsNil() && v2.IsNil() {\n\t\t\treturn true\n\t\t}\n\t\tif v1.IsNil() != v2.IsNil() {\n\t\t\treturn false\n\t\t}\n\t\treturn equalAny(v1.Elem(), v2.Elem(), prop)\n\tcase reflect.Slice:\n\t\tif v1.Type().Elem().Kind() == reflect.Uint8 {\n\t\t\t// short circuit: []byte\n\n\t\t\t// Edge case: if this is in a proto3 message, a zero length\n\t\t\t// bytes field is considered the zero value.\n\t\t\tif prop != nil && prop.proto3 && v1.Len() == 0 && v2.Len() == 0 {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\tif v1.IsNil() != v2.IsNil() {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn bytes.Equal(v1.Interface().([]byte), v2.Interface().([]byte))\n\t\t}\n\n\t\tif v1.Len() != v2.Len() {\n\t\t\treturn false\n\t\t}\n\t\tfor i := 0; i < v1.Len(); i++ {\n\t\t\tif !equalAny(v1.Index(i), v2.Index(i), prop) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\treturn true\n\tcase reflect.String:\n\t\treturn v1.Interface().(string) == v2.Interface().(string)\n\tcase reflect.Struct:\n\t\treturn equalStruct(v1, v2)\n\tcase reflect.Uint32, reflect.Uint64:\n\t\treturn v1.Uint() == v2.Uint()\n\t}\n\n\t// unknown type, so not a protocol buffer\n\tlog.Printf(\"proto: don't know how to compare %v\", v1)\n\treturn false\n}\n\n// base is the struct type that the extensions are based on.\n// x1 and x2 are InternalExtensions.\nfunc equalExtensions(base reflect.Type, x1, x2 XXX_InternalExtensions) bool {\n\tem1, _ := x1.extensionsRead()\n\tem2, _ := x2.extensionsRead()\n\treturn equalExtMap(base, em1, em2)\n}\n\nfunc equalExtMap(base reflect.Type, em1, em2 map[int32]Extension) bool {\n\tif len(em1) != len(em2) {\n\t\treturn false\n\t}\n\n\tfor extNum, e1 := range em1 {\n\t\te2, ok := em2[extNum]\n\t\tif !ok {\n\t\t\treturn false\n\t\t}\n\n\t\tm1 := extensionAsLegacyType(e1.value)\n\t\tm2 := extensionAsLegacyType(e2.value)\n\n\t\tif m1 == nil && m2 == nil {\n\t\t\t// Both have only encoded form.\n\t\t\tif bytes.Equal(e1.enc, e2.enc) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\t// The bytes are different, but the extensions might still be\n\t\t\t// equal. We need to decode them to compare.\n\t\t}\n\n\t\tif m1 != nil && m2 != nil {\n\t\t\t// Both are unencoded.\n\t\t\tif !equalAny(reflect.ValueOf(m1), reflect.ValueOf(m2), nil) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\t// At least one is encoded. To do a semantically correct comparison\n\t\t// we need to unmarshal them first.\n\t\tvar desc *ExtensionDesc\n\t\tif m := extensionMaps[base]; m != nil {\n\t\t\tdesc = m[extNum]\n\t\t}\n\t\tif desc == nil {\n\t\t\t// If both have only encoded form and the bytes are the same,\n\t\t\t// it is handled above. We get here when the bytes are different.\n\t\t\t// We don't know how to decode it, so just compare them as byte\n\t\t\t// slices.\n\t\t\tlog.Printf(\"proto: don't know how to compare extension %d of %v\", extNum, base)\n\t\t\treturn false\n\t\t}\n\t\tvar err error\n\t\tif m1 == nil {\n\t\t\tm1, err = decodeExtension(e1.enc, desc)\n\t\t}\n\t\tif m2 == nil && err == nil {\n\t\t\tm2, err = decodeExtension(e2.enc, desc)\n\t\t}\n\t\tif err != nil {\n\t\t\t// The encoded form is invalid.\n\t\t\tlog.Printf(\"proto: badly encoded extension %d of %v: %v\", extNum, base, err)\n\t\t\treturn false\n\t\t}\n\t\tif !equalAny(reflect.ValueOf(m1), reflect.ValueOf(m2), nil) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\treturn true\n}\n"
  },
  {
    "path": "vendor/github.com/golang/protobuf/proto/extensions.go",
    "content": "// Go support for Protocol Buffers - Google's data interchange format\n//\n// Copyright 2010 The Go Authors.  All rights reserved.\n// https://github.com/golang/protobuf\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\npackage proto\n\n/*\n * Types and routines for supporting protocol buffer extensions.\n */\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"reflect\"\n\t\"strconv\"\n\t\"sync\"\n)\n\n// ErrMissingExtension is the error returned by GetExtension if the named extension is not in the message.\nvar ErrMissingExtension = errors.New(\"proto: missing extension\")\n\n// ExtensionRange represents a range of message extensions for a protocol buffer.\n// Used in code generated by the protocol compiler.\ntype ExtensionRange struct {\n\tStart, End int32 // both inclusive\n}\n\n// extendableProto is an interface implemented by any protocol buffer generated by the current\n// proto compiler that may be extended.\ntype extendableProto interface {\n\tMessage\n\tExtensionRangeArray() []ExtensionRange\n\textensionsWrite() map[int32]Extension\n\textensionsRead() (map[int32]Extension, sync.Locker)\n}\n\n// extendableProtoV1 is an interface implemented by a protocol buffer generated by the previous\n// version of the proto compiler that may be extended.\ntype extendableProtoV1 interface {\n\tMessage\n\tExtensionRangeArray() []ExtensionRange\n\tExtensionMap() map[int32]Extension\n}\n\n// extensionAdapter is a wrapper around extendableProtoV1 that implements extendableProto.\ntype extensionAdapter struct {\n\textendableProtoV1\n}\n\nfunc (e extensionAdapter) extensionsWrite() map[int32]Extension {\n\treturn e.ExtensionMap()\n}\n\nfunc (e extensionAdapter) extensionsRead() (map[int32]Extension, sync.Locker) {\n\treturn e.ExtensionMap(), notLocker{}\n}\n\n// notLocker is a sync.Locker whose Lock and Unlock methods are nops.\ntype notLocker struct{}\n\nfunc (n notLocker) Lock()   {}\nfunc (n notLocker) Unlock() {}\n\n// extendable returns the extendableProto interface for the given generated proto message.\n// If the proto message has the old extension format, it returns a wrapper that implements\n// the extendableProto interface.\nfunc extendable(p interface{}) (extendableProto, error) {\n\tswitch p := p.(type) {\n\tcase extendableProto:\n\t\tif isNilPtr(p) {\n\t\t\treturn nil, fmt.Errorf(\"proto: nil %T is not extendable\", p)\n\t\t}\n\t\treturn p, nil\n\tcase extendableProtoV1:\n\t\tif isNilPtr(p) {\n\t\t\treturn nil, fmt.Errorf(\"proto: nil %T is not extendable\", p)\n\t\t}\n\t\treturn extensionAdapter{p}, nil\n\t}\n\t// Don't allocate a specific error containing %T:\n\t// this is the hot path for Clone and MarshalText.\n\treturn nil, errNotExtendable\n}\n\nvar errNotExtendable = errors.New(\"proto: not an extendable proto.Message\")\n\nfunc isNilPtr(x interface{}) bool {\n\tv := reflect.ValueOf(x)\n\treturn v.Kind() == reflect.Ptr && v.IsNil()\n}\n\n// XXX_InternalExtensions is an internal representation of proto extensions.\n//\n// Each generated message struct type embeds an anonymous XXX_InternalExtensions field,\n// thus gaining the unexported 'extensions' method, which can be called only from the proto package.\n//\n// The methods of XXX_InternalExtensions are not concurrency safe in general,\n// but calls to logically read-only methods such as has and get may be executed concurrently.\ntype XXX_InternalExtensions struct {\n\t// The struct must be indirect so that if a user inadvertently copies a\n\t// generated message and its embedded XXX_InternalExtensions, they\n\t// avoid the mayhem of a copied mutex.\n\t//\n\t// The mutex serializes all logically read-only operations to p.extensionMap.\n\t// It is up to the client to ensure that write operations to p.extensionMap are\n\t// mutually exclusive with other accesses.\n\tp *struct {\n\t\tmu           sync.Mutex\n\t\textensionMap map[int32]Extension\n\t}\n}\n\n// extensionsWrite returns the extension map, creating it on first use.\nfunc (e *XXX_InternalExtensions) extensionsWrite() map[int32]Extension {\n\tif e.p == nil {\n\t\te.p = new(struct {\n\t\t\tmu           sync.Mutex\n\t\t\textensionMap map[int32]Extension\n\t\t})\n\t\te.p.extensionMap = make(map[int32]Extension)\n\t}\n\treturn e.p.extensionMap\n}\n\n// extensionsRead returns the extensions map for read-only use.  It may be nil.\n// The caller must hold the returned mutex's lock when accessing Elements within the map.\nfunc (e *XXX_InternalExtensions) extensionsRead() (map[int32]Extension, sync.Locker) {\n\tif e.p == nil {\n\t\treturn nil, nil\n\t}\n\treturn e.p.extensionMap, &e.p.mu\n}\n\n// ExtensionDesc represents an extension specification.\n// Used in generated code from the protocol compiler.\ntype ExtensionDesc struct {\n\tExtendedType  Message     // nil pointer to the type that is being extended\n\tExtensionType interface{} // nil pointer to the extension type\n\tField         int32       // field number\n\tName          string      // fully-qualified name of extension, for text formatting\n\tTag           string      // protobuf tag style\n\tFilename      string      // name of the file in which the extension is defined\n}\n\nfunc (ed *ExtensionDesc) repeated() bool {\n\tt := reflect.TypeOf(ed.ExtensionType)\n\treturn t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8\n}\n\n// Extension represents an extension in a message.\ntype Extension struct {\n\t// When an extension is stored in a message using SetExtension\n\t// only desc and value are set. When the message is marshaled\n\t// enc will be set to the encoded form of the message.\n\t//\n\t// When a message is unmarshaled and contains extensions, each\n\t// extension will have only enc set. When such an extension is\n\t// accessed using GetExtension (or GetExtensions) desc and value\n\t// will be set.\n\tdesc *ExtensionDesc\n\n\t// value is a concrete value for the extension field. Let the type of\n\t// desc.ExtensionType be the \"API type\" and the type of Extension.value\n\t// be the \"storage type\". The API type and storage type are the same except:\n\t//\t* For scalars (except []byte), the API type uses *T,\n\t//\twhile the storage type uses T.\n\t//\t* For repeated fields, the API type uses []T, while the storage type\n\t//\tuses *[]T.\n\t//\n\t// The reason for the divergence is so that the storage type more naturally\n\t// matches what is expected of when retrieving the values through the\n\t// protobuf reflection APIs.\n\t//\n\t// The value may only be populated if desc is also populated.\n\tvalue interface{}\n\n\t// enc is the raw bytes for the extension field.\n\tenc []byte\n}\n\n// SetRawExtension is for testing only.\nfunc SetRawExtension(base Message, id int32, b []byte) {\n\tepb, err := extendable(base)\n\tif err != nil {\n\t\treturn\n\t}\n\textmap := epb.extensionsWrite()\n\textmap[id] = Extension{enc: b}\n}\n\n// isExtensionField returns true iff the given field number is in an extension range.\nfunc isExtensionField(pb extendableProto, field int32) bool {\n\tfor _, er := range pb.ExtensionRangeArray() {\n\t\tif er.Start <= field && field <= er.End {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// checkExtensionTypes checks that the given extension is valid for pb.\nfunc checkExtensionTypes(pb extendableProto, extension *ExtensionDesc) error {\n\tvar pbi interface{} = pb\n\t// Check the extended type.\n\tif ea, ok := pbi.(extensionAdapter); ok {\n\t\tpbi = ea.extendableProtoV1\n\t}\n\tif a, b := reflect.TypeOf(pbi), reflect.TypeOf(extension.ExtendedType); a != b {\n\t\treturn fmt.Errorf(\"proto: bad extended type; %v does not extend %v\", b, a)\n\t}\n\t// Check the range.\n\tif !isExtensionField(pb, extension.Field) {\n\t\treturn errors.New(\"proto: bad extension number; not in declared ranges\")\n\t}\n\treturn nil\n}\n\n// extPropKey is sufficient to uniquely identify an extension.\ntype extPropKey struct {\n\tbase  reflect.Type\n\tfield int32\n}\n\nvar extProp = struct {\n\tsync.RWMutex\n\tm map[extPropKey]*Properties\n}{\n\tm: make(map[extPropKey]*Properties),\n}\n\nfunc extensionProperties(ed *ExtensionDesc) *Properties {\n\tkey := extPropKey{base: reflect.TypeOf(ed.ExtendedType), field: ed.Field}\n\n\textProp.RLock()\n\tif prop, ok := extProp.m[key]; ok {\n\t\textProp.RUnlock()\n\t\treturn prop\n\t}\n\textProp.RUnlock()\n\n\textProp.Lock()\n\tdefer extProp.Unlock()\n\t// Check again.\n\tif prop, ok := extProp.m[key]; ok {\n\t\treturn prop\n\t}\n\n\tprop := new(Properties)\n\tprop.Init(reflect.TypeOf(ed.ExtensionType), \"unknown_name\", ed.Tag, nil)\n\textProp.m[key] = prop\n\treturn prop\n}\n\n// HasExtension returns whether the given extension is present in pb.\nfunc HasExtension(pb Message, extension *ExtensionDesc) bool {\n\t// TODO: Check types, field numbers, etc.?\n\tepb, err := extendable(pb)\n\tif err != nil {\n\t\treturn false\n\t}\n\textmap, mu := epb.extensionsRead()\n\tif extmap == nil {\n\t\treturn false\n\t}\n\tmu.Lock()\n\t_, ok := extmap[extension.Field]\n\tmu.Unlock()\n\treturn ok\n}\n\n// ClearExtension removes the given extension from pb.\nfunc ClearExtension(pb Message, extension *ExtensionDesc) {\n\tepb, err := extendable(pb)\n\tif err != nil {\n\t\treturn\n\t}\n\t// TODO: Check types, field numbers, etc.?\n\textmap := epb.extensionsWrite()\n\tdelete(extmap, extension.Field)\n}\n\n// GetExtension retrieves a proto2 extended field from pb.\n//\n// If the descriptor is type complete (i.e., ExtensionDesc.ExtensionType is non-nil),\n// then GetExtension parses the encoded field and returns a Go value of the specified type.\n// If the field is not present, then the default value is returned (if one is specified),\n// otherwise ErrMissingExtension is reported.\n//\n// If the descriptor is not type complete (i.e., ExtensionDesc.ExtensionType is nil),\n// then GetExtension returns the raw encoded bytes of the field extension.\nfunc GetExtension(pb Message, extension *ExtensionDesc) (interface{}, error) {\n\tepb, err := extendable(pb)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif extension.ExtendedType != nil {\n\t\t// can only check type if this is a complete descriptor\n\t\tif err := checkExtensionTypes(epb, extension); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\temap, mu := epb.extensionsRead()\n\tif emap == nil {\n\t\treturn defaultExtensionValue(extension)\n\t}\n\tmu.Lock()\n\tdefer mu.Unlock()\n\te, ok := emap[extension.Field]\n\tif !ok {\n\t\t// defaultExtensionValue returns the default value or\n\t\t// ErrMissingExtension if there is no default.\n\t\treturn defaultExtensionValue(extension)\n\t}\n\n\tif e.value != nil {\n\t\t// Already decoded. Check the descriptor, though.\n\t\tif e.desc != extension {\n\t\t\t// This shouldn't happen. If it does, it means that\n\t\t\t// GetExtension was called twice with two different\n\t\t\t// descriptors with the same field number.\n\t\t\treturn nil, errors.New(\"proto: descriptor conflict\")\n\t\t}\n\t\treturn extensionAsLegacyType(e.value), nil\n\t}\n\n\tif extension.ExtensionType == nil {\n\t\t// incomplete descriptor\n\t\treturn e.enc, nil\n\t}\n\n\tv, err := decodeExtension(e.enc, extension)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Remember the decoded version and drop the encoded version.\n\t// That way it is safe to mutate what we return.\n\te.value = extensionAsStorageType(v)\n\te.desc = extension\n\te.enc = nil\n\temap[extension.Field] = e\n\treturn extensionAsLegacyType(e.value), nil\n}\n\n// defaultExtensionValue returns the default value for extension.\n// If no default for an extension is defined ErrMissingExtension is returned.\nfunc defaultExtensionValue(extension *ExtensionDesc) (interface{}, error) {\n\tif extension.ExtensionType == nil {\n\t\t// incomplete descriptor, so no default\n\t\treturn nil, ErrMissingExtension\n\t}\n\n\tt := reflect.TypeOf(extension.ExtensionType)\n\tprops := extensionProperties(extension)\n\n\tsf, _, err := fieldDefault(t, props)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif sf == nil || sf.value == nil {\n\t\t// There is no default value.\n\t\treturn nil, ErrMissingExtension\n\t}\n\n\tif t.Kind() != reflect.Ptr {\n\t\t// We do not need to return a Ptr, we can directly return sf.value.\n\t\treturn sf.value, nil\n\t}\n\n\t// We need to return an interface{} that is a pointer to sf.value.\n\tvalue := reflect.New(t).Elem()\n\tvalue.Set(reflect.New(value.Type().Elem()))\n\tif sf.kind == reflect.Int32 {\n\t\t// We may have an int32 or an enum, but the underlying data is int32.\n\t\t// Since we can't set an int32 into a non int32 reflect.value directly\n\t\t// set it as a int32.\n\t\tvalue.Elem().SetInt(int64(sf.value.(int32)))\n\t} else {\n\t\tvalue.Elem().Set(reflect.ValueOf(sf.value))\n\t}\n\treturn value.Interface(), nil\n}\n\n// decodeExtension decodes an extension encoded in b.\nfunc decodeExtension(b []byte, extension *ExtensionDesc) (interface{}, error) {\n\tt := reflect.TypeOf(extension.ExtensionType)\n\tunmarshal := typeUnmarshaler(t, extension.Tag)\n\n\t// t is a pointer to a struct, pointer to basic type or a slice.\n\t// Allocate space to store the pointer/slice.\n\tvalue := reflect.New(t).Elem()\n\n\tvar err error\n\tfor {\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\twire := int(x) & 7\n\n\t\tb, err = unmarshal(b, valToPointer(value.Addr()), wire)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tif len(b) == 0 {\n\t\t\tbreak\n\t\t}\n\t}\n\treturn value.Interface(), nil\n}\n\n// GetExtensions returns a slice of the extensions present in pb that are also listed in es.\n// The returned slice has the same length as es; missing extensions will appear as nil elements.\nfunc GetExtensions(pb Message, es []*ExtensionDesc) (extensions []interface{}, err error) {\n\tepb, err := extendable(pb)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\textensions = make([]interface{}, len(es))\n\tfor i, e := range es {\n\t\textensions[i], err = GetExtension(epb, e)\n\t\tif err == ErrMissingExtension {\n\t\t\terr = nil\n\t\t}\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t}\n\treturn\n}\n\n// ExtensionDescs returns a new slice containing pb's extension descriptors, in undefined order.\n// For non-registered extensions, ExtensionDescs returns an incomplete descriptor containing\n// just the Field field, which defines the extension's field number.\nfunc ExtensionDescs(pb Message) ([]*ExtensionDesc, error) {\n\tepb, err := extendable(pb)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tregisteredExtensions := RegisteredExtensions(pb)\n\n\temap, mu := epb.extensionsRead()\n\tif emap == nil {\n\t\treturn nil, nil\n\t}\n\tmu.Lock()\n\tdefer mu.Unlock()\n\textensions := make([]*ExtensionDesc, 0, len(emap))\n\tfor extid, e := range emap {\n\t\tdesc := e.desc\n\t\tif desc == nil {\n\t\t\tdesc = registeredExtensions[extid]\n\t\t\tif desc == nil {\n\t\t\t\tdesc = &ExtensionDesc{Field: extid}\n\t\t\t}\n\t\t}\n\n\t\textensions = append(extensions, desc)\n\t}\n\treturn extensions, nil\n}\n\n// SetExtension sets the specified extension of pb to the specified value.\nfunc SetExtension(pb Message, extension *ExtensionDesc, value interface{}) error {\n\tepb, err := extendable(pb)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif err := checkExtensionTypes(epb, extension); err != nil {\n\t\treturn err\n\t}\n\ttyp := reflect.TypeOf(extension.ExtensionType)\n\tif typ != reflect.TypeOf(value) {\n\t\treturn fmt.Errorf(\"proto: bad extension value type. got: %T, want: %T\", value, extension.ExtensionType)\n\t}\n\t// nil extension values need to be caught early, because the\n\t// encoder can't distinguish an ErrNil due to a nil extension\n\t// from an ErrNil due to a missing field. Extensions are\n\t// always optional, so the encoder would just swallow the error\n\t// and drop all the extensions from the encoded message.\n\tif reflect.ValueOf(value).IsNil() {\n\t\treturn fmt.Errorf(\"proto: SetExtension called with nil value of type %T\", value)\n\t}\n\n\textmap := epb.extensionsWrite()\n\textmap[extension.Field] = Extension{desc: extension, value: extensionAsStorageType(value)}\n\treturn nil\n}\n\n// ClearAllExtensions clears all extensions from pb.\nfunc ClearAllExtensions(pb Message) {\n\tepb, err := extendable(pb)\n\tif err != nil {\n\t\treturn\n\t}\n\tm := epb.extensionsWrite()\n\tfor k := range m {\n\t\tdelete(m, k)\n\t}\n}\n\n// A global registry of extensions.\n// The generated code will register the generated descriptors by calling RegisterExtension.\n\nvar extensionMaps = make(map[reflect.Type]map[int32]*ExtensionDesc)\n\n// RegisterExtension is called from the generated code.\nfunc RegisterExtension(desc *ExtensionDesc) {\n\tst := reflect.TypeOf(desc.ExtendedType).Elem()\n\tm := extensionMaps[st]\n\tif m == nil {\n\t\tm = make(map[int32]*ExtensionDesc)\n\t\textensionMaps[st] = m\n\t}\n\tif _, ok := m[desc.Field]; ok {\n\t\tpanic(\"proto: duplicate extension registered: \" + st.String() + \" \" + strconv.Itoa(int(desc.Field)))\n\t}\n\tm[desc.Field] = desc\n}\n\n// RegisteredExtensions returns a map of the registered extensions of a\n// protocol buffer struct, indexed by the extension number.\n// The argument pb should be a nil pointer to the struct type.\nfunc RegisteredExtensions(pb Message) map[int32]*ExtensionDesc {\n\treturn extensionMaps[reflect.TypeOf(pb).Elem()]\n}\n\n// extensionAsLegacyType converts an value in the storage type as the API type.\n// See Extension.value.\nfunc extensionAsLegacyType(v interface{}) interface{} {\n\tswitch rv := reflect.ValueOf(v); rv.Kind() {\n\tcase reflect.Bool, reflect.Int32, reflect.Int64, reflect.Uint32, reflect.Uint64, reflect.Float32, reflect.Float64, reflect.String:\n\t\t// Represent primitive types as a pointer to the value.\n\t\trv2 := reflect.New(rv.Type())\n\t\trv2.Elem().Set(rv)\n\t\tv = rv2.Interface()\n\tcase reflect.Ptr:\n\t\t// Represent slice types as the value itself.\n\t\tswitch rv.Type().Elem().Kind() {\n\t\tcase reflect.Slice:\n\t\t\tif rv.IsNil() {\n\t\t\t\tv = reflect.Zero(rv.Type().Elem()).Interface()\n\t\t\t} else {\n\t\t\t\tv = rv.Elem().Interface()\n\t\t\t}\n\t\t}\n\t}\n\treturn v\n}\n\n// extensionAsStorageType converts an value in the API type as the storage type.\n// See Extension.value.\nfunc extensionAsStorageType(v interface{}) interface{} {\n\tswitch rv := reflect.ValueOf(v); rv.Kind() {\n\tcase reflect.Ptr:\n\t\t// Represent slice types as the value itself.\n\t\tswitch rv.Type().Elem().Kind() {\n\t\tcase reflect.Bool, reflect.Int32, reflect.Int64, reflect.Uint32, reflect.Uint64, reflect.Float32, reflect.Float64, reflect.String:\n\t\t\tif rv.IsNil() {\n\t\t\t\tv = reflect.Zero(rv.Type().Elem()).Interface()\n\t\t\t} else {\n\t\t\t\tv = rv.Elem().Interface()\n\t\t\t}\n\t\t}\n\tcase reflect.Slice:\n\t\t// Represent slice types as a pointer to the value.\n\t\tif rv.Type().Elem().Kind() != reflect.Uint8 {\n\t\t\trv2 := reflect.New(rv.Type())\n\t\t\trv2.Elem().Set(rv)\n\t\t\tv = rv2.Interface()\n\t\t}\n\t}\n\treturn v\n}\n"
  },
  {
    "path": "vendor/github.com/golang/protobuf/proto/lib.go",
    "content": "// Go support for Protocol Buffers - Google's data interchange format\n//\n// Copyright 2010 The Go Authors.  All rights reserved.\n// https://github.com/golang/protobuf\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n/*\nPackage proto converts data structures to and from the wire format of\nprotocol buffers.  It works in concert with the Go source code generated\nfor .proto files by the protocol compiler.\n\nA summary of the properties of the protocol buffer interface\nfor a protocol buffer variable v:\n\n  - Names are turned from camel_case to CamelCase for export.\n  - There are no methods on v to set fields; just treat\n\tthem as structure fields.\n  - There are getters that return a field's value if set,\n\tand return the field's default value if unset.\n\tThe getters work even if the receiver is a nil message.\n  - The zero value for a struct is its correct initialization state.\n\tAll desired fields must be set before marshaling.\n  - A Reset() method will restore a protobuf struct to its zero state.\n  - Non-repeated fields are pointers to the values; nil means unset.\n\tThat is, optional or required field int32 f becomes F *int32.\n  - Repeated fields are slices.\n  - Helper functions are available to aid the setting of fields.\n\tmsg.Foo = proto.String(\"hello\") // set field\n  - Constants are defined to hold the default values of all fields that\n\thave them.  They have the form Default_StructName_FieldName.\n\tBecause the getter methods handle defaulted values,\n\tdirect use of these constants should be rare.\n  - Enums are given type names and maps from names to values.\n\tEnum values are prefixed by the enclosing message's name, or by the\n\tenum's type name if it is a top-level enum. Enum types have a String\n\tmethod, and a Enum method to assist in message construction.\n  - Nested messages, groups and enums have type names prefixed with the name of\n\tthe surrounding message type.\n  - Extensions are given descriptor names that start with E_,\n\tfollowed by an underscore-delimited list of the nested messages\n\tthat contain it (if any) followed by the CamelCased name of the\n\textension field itself.  HasExtension, ClearExtension, GetExtension\n\tand SetExtension are functions for manipulating extensions.\n  - Oneof field sets are given a single field in their message,\n\twith distinguished wrapper types for each possible field value.\n  - Marshal and Unmarshal are functions to encode and decode the wire format.\n\nWhen the .proto file specifies `syntax=\"proto3\"`, there are some differences:\n\n  - Non-repeated fields of non-message type are values instead of pointers.\n  - Enum types do not get an Enum method.\n\nThe simplest way to describe this is to see an example.\nGiven file test.proto, containing\n\n\tpackage example;\n\n\tenum FOO { X = 17; }\n\n\tmessage Test {\n\t  required string label = 1;\n\t  optional int32 type = 2 [default=77];\n\t  repeated int64 reps = 3;\n\t  optional group OptionalGroup = 4 {\n\t    required string RequiredField = 5;\n\t  }\n\t  oneof union {\n\t    int32 number = 6;\n\t    string name = 7;\n\t  }\n\t}\n\nThe resulting file, test.pb.go, is:\n\n\tpackage example\n\n\timport proto \"github.com/golang/protobuf/proto\"\n\timport math \"math\"\n\n\ttype FOO int32\n\tconst (\n\t\tFOO_X FOO = 17\n\t)\n\tvar FOO_name = map[int32]string{\n\t\t17: \"X\",\n\t}\n\tvar FOO_value = map[string]int32{\n\t\t\"X\": 17,\n\t}\n\n\tfunc (x FOO) Enum() *FOO {\n\t\tp := new(FOO)\n\t\t*p = x\n\t\treturn p\n\t}\n\tfunc (x FOO) String() string {\n\t\treturn proto.EnumName(FOO_name, int32(x))\n\t}\n\tfunc (x *FOO) UnmarshalJSON(data []byte) error {\n\t\tvalue, err := proto.UnmarshalJSONEnum(FOO_value, data)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t*x = FOO(value)\n\t\treturn nil\n\t}\n\n\ttype Test struct {\n\t\tLabel         *string             `protobuf:\"bytes,1,req,name=label\" json:\"label,omitempty\"`\n\t\tType          *int32              `protobuf:\"varint,2,opt,name=type,def=77\" json:\"type,omitempty\"`\n\t\tReps          []int64             `protobuf:\"varint,3,rep,name=reps\" json:\"reps,omitempty\"`\n\t\tOptionalgroup *Test_OptionalGroup `protobuf:\"group,4,opt,name=OptionalGroup\" json:\"optionalgroup,omitempty\"`\n\t\t// Types that are valid to be assigned to Union:\n\t\t//\t*Test_Number\n\t\t//\t*Test_Name\n\t\tUnion            isTest_Union `protobuf_oneof:\"union\"`\n\t\tXXX_unrecognized []byte       `json:\"-\"`\n\t}\n\tfunc (m *Test) Reset()         { *m = Test{} }\n\tfunc (m *Test) String() string { return proto.CompactTextString(m) }\n\tfunc (*Test) ProtoMessage() {}\n\n\ttype isTest_Union interface {\n\t\tisTest_Union()\n\t}\n\n\ttype Test_Number struct {\n\t\tNumber int32 `protobuf:\"varint,6,opt,name=number\"`\n\t}\n\ttype Test_Name struct {\n\t\tName string `protobuf:\"bytes,7,opt,name=name\"`\n\t}\n\n\tfunc (*Test_Number) isTest_Union() {}\n\tfunc (*Test_Name) isTest_Union()   {}\n\n\tfunc (m *Test) GetUnion() isTest_Union {\n\t\tif m != nil {\n\t\t\treturn m.Union\n\t\t}\n\t\treturn nil\n\t}\n\tconst Default_Test_Type int32 = 77\n\n\tfunc (m *Test) GetLabel() string {\n\t\tif m != nil && m.Label != nil {\n\t\t\treturn *m.Label\n\t\t}\n\t\treturn \"\"\n\t}\n\n\tfunc (m *Test) GetType() int32 {\n\t\tif m != nil && m.Type != nil {\n\t\t\treturn *m.Type\n\t\t}\n\t\treturn Default_Test_Type\n\t}\n\n\tfunc (m *Test) GetOptionalgroup() *Test_OptionalGroup {\n\t\tif m != nil {\n\t\t\treturn m.Optionalgroup\n\t\t}\n\t\treturn nil\n\t}\n\n\ttype Test_OptionalGroup struct {\n\t\tRequiredField *string `protobuf:\"bytes,5,req\" json:\"RequiredField,omitempty\"`\n\t}\n\tfunc (m *Test_OptionalGroup) Reset()         { *m = Test_OptionalGroup{} }\n\tfunc (m *Test_OptionalGroup) String() string { return proto.CompactTextString(m) }\n\n\tfunc (m *Test_OptionalGroup) GetRequiredField() string {\n\t\tif m != nil && m.RequiredField != nil {\n\t\t\treturn *m.RequiredField\n\t\t}\n\t\treturn \"\"\n\t}\n\n\tfunc (m *Test) GetNumber() int32 {\n\t\tif x, ok := m.GetUnion().(*Test_Number); ok {\n\t\t\treturn x.Number\n\t\t}\n\t\treturn 0\n\t}\n\n\tfunc (m *Test) GetName() string {\n\t\tif x, ok := m.GetUnion().(*Test_Name); ok {\n\t\t\treturn x.Name\n\t\t}\n\t\treturn \"\"\n\t}\n\n\tfunc init() {\n\t\tproto.RegisterEnum(\"example.FOO\", FOO_name, FOO_value)\n\t}\n\nTo create and play with a Test object:\n\n\tpackage main\n\n\timport (\n\t\t\"log\"\n\n\t\t\"github.com/golang/protobuf/proto\"\n\t\tpb \"./example.pb\"\n\t)\n\n\tfunc main() {\n\t\ttest := &pb.Test{\n\t\t\tLabel: proto.String(\"hello\"),\n\t\t\tType:  proto.Int32(17),\n\t\t\tReps:  []int64{1, 2, 3},\n\t\t\tOptionalgroup: &pb.Test_OptionalGroup{\n\t\t\t\tRequiredField: proto.String(\"good bye\"),\n\t\t\t},\n\t\t\tUnion: &pb.Test_Name{\"fred\"},\n\t\t}\n\t\tdata, err := proto.Marshal(test)\n\t\tif err != nil {\n\t\t\tlog.Fatal(\"marshaling error: \", err)\n\t\t}\n\t\tnewTest := &pb.Test{}\n\t\terr = proto.Unmarshal(data, newTest)\n\t\tif err != nil {\n\t\t\tlog.Fatal(\"unmarshaling error: \", err)\n\t\t}\n\t\t// Now test and newTest contain the same data.\n\t\tif test.GetLabel() != newTest.GetLabel() {\n\t\t\tlog.Fatalf(\"data mismatch %q != %q\", test.GetLabel(), newTest.GetLabel())\n\t\t}\n\t\t// Use a type switch to determine which oneof was set.\n\t\tswitch u := test.Union.(type) {\n\t\tcase *pb.Test_Number: // u.Number contains the number.\n\t\tcase *pb.Test_Name: // u.Name contains the string.\n\t\t}\n\t\t// etc.\n\t}\n*/\npackage proto\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"log\"\n\t\"reflect\"\n\t\"sort\"\n\t\"strconv\"\n\t\"sync\"\n)\n\n// RequiredNotSetError is an error type returned by either Marshal or Unmarshal.\n// Marshal reports this when a required field is not initialized.\n// Unmarshal reports this when a required field is missing from the wire data.\ntype RequiredNotSetError struct{ field string }\n\nfunc (e *RequiredNotSetError) Error() string {\n\tif e.field == \"\" {\n\t\treturn fmt.Sprintf(\"proto: required field not set\")\n\t}\n\treturn fmt.Sprintf(\"proto: required field %q not set\", e.field)\n}\nfunc (e *RequiredNotSetError) RequiredNotSet() bool {\n\treturn true\n}\n\ntype invalidUTF8Error struct{ field string }\n\nfunc (e *invalidUTF8Error) Error() string {\n\tif e.field == \"\" {\n\t\treturn \"proto: invalid UTF-8 detected\"\n\t}\n\treturn fmt.Sprintf(\"proto: field %q contains invalid UTF-8\", e.field)\n}\nfunc (e *invalidUTF8Error) InvalidUTF8() bool {\n\treturn true\n}\n\n// errInvalidUTF8 is a sentinel error to identify fields with invalid UTF-8.\n// This error should not be exposed to the external API as such errors should\n// be recreated with the field information.\nvar errInvalidUTF8 = &invalidUTF8Error{}\n\n// isNonFatal reports whether the error is either a RequiredNotSet error\n// or a InvalidUTF8 error.\nfunc isNonFatal(err error) bool {\n\tif re, ok := err.(interface{ RequiredNotSet() bool }); ok && re.RequiredNotSet() {\n\t\treturn true\n\t}\n\tif re, ok := err.(interface{ InvalidUTF8() bool }); ok && re.InvalidUTF8() {\n\t\treturn true\n\t}\n\treturn false\n}\n\ntype nonFatal struct{ E error }\n\n// Merge merges err into nf and reports whether it was successful.\n// Otherwise it returns false for any fatal non-nil errors.\nfunc (nf *nonFatal) Merge(err error) (ok bool) {\n\tif err == nil {\n\t\treturn true // not an error\n\t}\n\tif !isNonFatal(err) {\n\t\treturn false // fatal error\n\t}\n\tif nf.E == nil {\n\t\tnf.E = err // store first instance of non-fatal error\n\t}\n\treturn true\n}\n\n// Message is implemented by generated protocol buffer messages.\ntype Message interface {\n\tReset()\n\tString() string\n\tProtoMessage()\n}\n\n// A Buffer is a buffer manager for marshaling and unmarshaling\n// protocol buffers.  It may be reused between invocations to\n// reduce memory usage.  It is not necessary to use a Buffer;\n// the global functions Marshal and Unmarshal create a\n// temporary Buffer and are fine for most applications.\ntype Buffer struct {\n\tbuf   []byte // encode/decode byte stream\n\tindex int    // read point\n\n\tdeterministic bool\n}\n\n// NewBuffer allocates a new Buffer and initializes its internal data to\n// the contents of the argument slice.\nfunc NewBuffer(e []byte) *Buffer {\n\treturn &Buffer{buf: e}\n}\n\n// Reset resets the Buffer, ready for marshaling a new protocol buffer.\nfunc (p *Buffer) Reset() {\n\tp.buf = p.buf[0:0] // for reading/writing\n\tp.index = 0        // for reading\n}\n\n// SetBuf replaces the internal buffer with the slice,\n// ready for unmarshaling the contents of the slice.\nfunc (p *Buffer) SetBuf(s []byte) {\n\tp.buf = s\n\tp.index = 0\n}\n\n// Bytes returns the contents of the Buffer.\nfunc (p *Buffer) Bytes() []byte { return p.buf }\n\n// SetDeterministic sets whether to use deterministic serialization.\n//\n// Deterministic serialization guarantees that for a given binary, equal\n// messages will always be serialized to the same bytes. This implies:\n//\n//   - Repeated serialization of a message will return the same bytes.\n//   - Different processes of the same binary (which may be executing on\n//     different machines) will serialize equal messages to the same bytes.\n//\n// Note that the deterministic serialization is NOT canonical across\n// languages. It is not guaranteed to remain stable over time. It is unstable\n// across different builds with schema changes due to unknown fields.\n// Users who need canonical serialization (e.g., persistent storage in a\n// canonical form, fingerprinting, etc.) should define their own\n// canonicalization specification and implement their own serializer rather\n// than relying on this API.\n//\n// If deterministic serialization is requested, map entries will be sorted\n// by keys in lexographical order. This is an implementation detail and\n// subject to change.\nfunc (p *Buffer) SetDeterministic(deterministic bool) {\n\tp.deterministic = deterministic\n}\n\n/*\n * Helper routines for simplifying the creation of optional fields of basic type.\n */\n\n// Bool is a helper routine that allocates a new bool value\n// to store v and returns a pointer to it.\nfunc Bool(v bool) *bool {\n\treturn &v\n}\n\n// Int32 is a helper routine that allocates a new int32 value\n// to store v and returns a pointer to it.\nfunc Int32(v int32) *int32 {\n\treturn &v\n}\n\n// Int is a helper routine that allocates a new int32 value\n// to store v and returns a pointer to it, but unlike Int32\n// its argument value is an int.\nfunc Int(v int) *int32 {\n\tp := new(int32)\n\t*p = int32(v)\n\treturn p\n}\n\n// Int64 is a helper routine that allocates a new int64 value\n// to store v and returns a pointer to it.\nfunc Int64(v int64) *int64 {\n\treturn &v\n}\n\n// Float32 is a helper routine that allocates a new float32 value\n// to store v and returns a pointer to it.\nfunc Float32(v float32) *float32 {\n\treturn &v\n}\n\n// Float64 is a helper routine that allocates a new float64 value\n// to store v and returns a pointer to it.\nfunc Float64(v float64) *float64 {\n\treturn &v\n}\n\n// Uint32 is a helper routine that allocates a new uint32 value\n// to store v and returns a pointer to it.\nfunc Uint32(v uint32) *uint32 {\n\treturn &v\n}\n\n// Uint64 is a helper routine that allocates a new uint64 value\n// to store v and returns a pointer to it.\nfunc Uint64(v uint64) *uint64 {\n\treturn &v\n}\n\n// String is a helper routine that allocates a new string value\n// to store v and returns a pointer to it.\nfunc String(v string) *string {\n\treturn &v\n}\n\n// EnumName is a helper function to simplify printing protocol buffer enums\n// by name.  Given an enum map and a value, it returns a useful string.\nfunc EnumName(m map[int32]string, v int32) string {\n\ts, ok := m[v]\n\tif ok {\n\t\treturn s\n\t}\n\treturn strconv.Itoa(int(v))\n}\n\n// UnmarshalJSONEnum is a helper function to simplify recovering enum int values\n// from their JSON-encoded representation. Given a map from the enum's symbolic\n// names to its int values, and a byte buffer containing the JSON-encoded\n// value, it returns an int32 that can be cast to the enum type by the caller.\n//\n// The function can deal with both JSON representations, numeric and symbolic.\nfunc UnmarshalJSONEnum(m map[string]int32, data []byte, enumName string) (int32, error) {\n\tif data[0] == '\"' {\n\t\t// New style: enums are strings.\n\t\tvar repr string\n\t\tif err := json.Unmarshal(data, &repr); err != nil {\n\t\t\treturn -1, err\n\t\t}\n\t\tval, ok := m[repr]\n\t\tif !ok {\n\t\t\treturn 0, fmt.Errorf(\"unrecognized enum %s value %q\", enumName, repr)\n\t\t}\n\t\treturn val, nil\n\t}\n\t// Old style: enums are ints.\n\tvar val int32\n\tif err := json.Unmarshal(data, &val); err != nil {\n\t\treturn 0, fmt.Errorf(\"cannot unmarshal %#q into enum %s\", data, enumName)\n\t}\n\treturn val, nil\n}\n\n// DebugPrint dumps the encoded data in b in a debugging format with a header\n// including the string s. Used in testing but made available for general debugging.\nfunc (p *Buffer) DebugPrint(s string, b []byte) {\n\tvar u uint64\n\n\tobuf := p.buf\n\tindex := p.index\n\tp.buf = b\n\tp.index = 0\n\tdepth := 0\n\n\tfmt.Printf(\"\\n--- %s ---\\n\", s)\n\nout:\n\tfor {\n\t\tfor i := 0; i < depth; i++ {\n\t\t\tfmt.Print(\"  \")\n\t\t}\n\n\t\tindex := p.index\n\t\tif index == len(p.buf) {\n\t\t\tbreak\n\t\t}\n\n\t\top, err := p.DecodeVarint()\n\t\tif err != nil {\n\t\t\tfmt.Printf(\"%3d: fetching op err %v\\n\", index, err)\n\t\t\tbreak out\n\t\t}\n\t\ttag := op >> 3\n\t\twire := op & 7\n\n\t\tswitch wire {\n\t\tdefault:\n\t\t\tfmt.Printf(\"%3d: t=%3d unknown wire=%d\\n\",\n\t\t\t\tindex, tag, wire)\n\t\t\tbreak out\n\n\t\tcase WireBytes:\n\t\t\tvar r []byte\n\n\t\t\tr, err = p.DecodeRawBytes(false)\n\t\t\tif err != nil {\n\t\t\t\tbreak out\n\t\t\t}\n\t\t\tfmt.Printf(\"%3d: t=%3d bytes [%d]\", index, tag, len(r))\n\t\t\tif len(r) <= 6 {\n\t\t\t\tfor i := 0; i < len(r); i++ {\n\t\t\t\t\tfmt.Printf(\" %.2x\", r[i])\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor i := 0; i < 3; i++ {\n\t\t\t\t\tfmt.Printf(\" %.2x\", r[i])\n\t\t\t\t}\n\t\t\t\tfmt.Printf(\" ..\")\n\t\t\t\tfor i := len(r) - 3; i < len(r); i++ {\n\t\t\t\t\tfmt.Printf(\" %.2x\", r[i])\n\t\t\t\t}\n\t\t\t}\n\t\t\tfmt.Printf(\"\\n\")\n\n\t\tcase WireFixed32:\n\t\t\tu, err = p.DecodeFixed32()\n\t\t\tif err != nil {\n\t\t\t\tfmt.Printf(\"%3d: t=%3d fix32 err %v\\n\", index, tag, err)\n\t\t\t\tbreak out\n\t\t\t}\n\t\t\tfmt.Printf(\"%3d: t=%3d fix32 %d\\n\", index, tag, u)\n\n\t\tcase WireFixed64:\n\t\t\tu, err = p.DecodeFixed64()\n\t\t\tif err != nil {\n\t\t\t\tfmt.Printf(\"%3d: t=%3d fix64 err %v\\n\", index, tag, err)\n\t\t\t\tbreak out\n\t\t\t}\n\t\t\tfmt.Printf(\"%3d: t=%3d fix64 %d\\n\", index, tag, u)\n\n\t\tcase WireVarint:\n\t\t\tu, err = p.DecodeVarint()\n\t\t\tif err != nil {\n\t\t\t\tfmt.Printf(\"%3d: t=%3d varint err %v\\n\", index, tag, err)\n\t\t\t\tbreak out\n\t\t\t}\n\t\t\tfmt.Printf(\"%3d: t=%3d varint %d\\n\", index, tag, u)\n\n\t\tcase WireStartGroup:\n\t\t\tfmt.Printf(\"%3d: t=%3d start\\n\", index, tag)\n\t\t\tdepth++\n\n\t\tcase WireEndGroup:\n\t\t\tdepth--\n\t\t\tfmt.Printf(\"%3d: t=%3d end\\n\", index, tag)\n\t\t}\n\t}\n\n\tif depth != 0 {\n\t\tfmt.Printf(\"%3d: start-end not balanced %d\\n\", p.index, depth)\n\t}\n\tfmt.Printf(\"\\n\")\n\n\tp.buf = obuf\n\tp.index = index\n}\n\n// SetDefaults sets unset protocol buffer fields to their default values.\n// It only modifies fields that are both unset and have defined defaults.\n// It recursively sets default values in any non-nil sub-messages.\nfunc SetDefaults(pb Message) {\n\tsetDefaults(reflect.ValueOf(pb), true, false)\n}\n\n// v is a pointer to a struct.\nfunc setDefaults(v reflect.Value, recur, zeros bool) {\n\tv = v.Elem()\n\n\tdefaultMu.RLock()\n\tdm, ok := defaults[v.Type()]\n\tdefaultMu.RUnlock()\n\tif !ok {\n\t\tdm = buildDefaultMessage(v.Type())\n\t\tdefaultMu.Lock()\n\t\tdefaults[v.Type()] = dm\n\t\tdefaultMu.Unlock()\n\t}\n\n\tfor _, sf := range dm.scalars {\n\t\tf := v.Field(sf.index)\n\t\tif !f.IsNil() {\n\t\t\t// field already set\n\t\t\tcontinue\n\t\t}\n\t\tdv := sf.value\n\t\tif dv == nil && !zeros {\n\t\t\t// no explicit default, and don't want to set zeros\n\t\t\tcontinue\n\t\t}\n\t\tfptr := f.Addr().Interface() // **T\n\t\t// TODO: Consider batching the allocations we do here.\n\t\tswitch sf.kind {\n\t\tcase reflect.Bool:\n\t\t\tb := new(bool)\n\t\t\tif dv != nil {\n\t\t\t\t*b = dv.(bool)\n\t\t\t}\n\t\t\t*(fptr.(**bool)) = b\n\t\tcase reflect.Float32:\n\t\t\tf := new(float32)\n\t\t\tif dv != nil {\n\t\t\t\t*f = dv.(float32)\n\t\t\t}\n\t\t\t*(fptr.(**float32)) = f\n\t\tcase reflect.Float64:\n\t\t\tf := new(float64)\n\t\t\tif dv != nil {\n\t\t\t\t*f = dv.(float64)\n\t\t\t}\n\t\t\t*(fptr.(**float64)) = f\n\t\tcase reflect.Int32:\n\t\t\t// might be an enum\n\t\t\tif ft := f.Type(); ft != int32PtrType {\n\t\t\t\t// enum\n\t\t\t\tf.Set(reflect.New(ft.Elem()))\n\t\t\t\tif dv != nil {\n\t\t\t\t\tf.Elem().SetInt(int64(dv.(int32)))\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// int32 field\n\t\t\t\ti := new(int32)\n\t\t\t\tif dv != nil {\n\t\t\t\t\t*i = dv.(int32)\n\t\t\t\t}\n\t\t\t\t*(fptr.(**int32)) = i\n\t\t\t}\n\t\tcase reflect.Int64:\n\t\t\ti := new(int64)\n\t\t\tif dv != nil {\n\t\t\t\t*i = dv.(int64)\n\t\t\t}\n\t\t\t*(fptr.(**int64)) = i\n\t\tcase reflect.String:\n\t\t\ts := new(string)\n\t\t\tif dv != nil {\n\t\t\t\t*s = dv.(string)\n\t\t\t}\n\t\t\t*(fptr.(**string)) = s\n\t\tcase reflect.Uint8:\n\t\t\t// exceptional case: []byte\n\t\t\tvar b []byte\n\t\t\tif dv != nil {\n\t\t\t\tdb := dv.([]byte)\n\t\t\t\tb = make([]byte, len(db))\n\t\t\t\tcopy(b, db)\n\t\t\t} else {\n\t\t\t\tb = []byte{}\n\t\t\t}\n\t\t\t*(fptr.(*[]byte)) = b\n\t\tcase reflect.Uint32:\n\t\t\tu := new(uint32)\n\t\t\tif dv != nil {\n\t\t\t\t*u = dv.(uint32)\n\t\t\t}\n\t\t\t*(fptr.(**uint32)) = u\n\t\tcase reflect.Uint64:\n\t\t\tu := new(uint64)\n\t\t\tif dv != nil {\n\t\t\t\t*u = dv.(uint64)\n\t\t\t}\n\t\t\t*(fptr.(**uint64)) = u\n\t\tdefault:\n\t\t\tlog.Printf(\"proto: can't set default for field %v (sf.kind=%v)\", f, sf.kind)\n\t\t}\n\t}\n\n\tfor _, ni := range dm.nested {\n\t\tf := v.Field(ni)\n\t\t// f is *T or []*T or map[T]*T\n\t\tswitch f.Kind() {\n\t\tcase reflect.Ptr:\n\t\t\tif f.IsNil() {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tsetDefaults(f, recur, zeros)\n\n\t\tcase reflect.Slice:\n\t\t\tfor i := 0; i < f.Len(); i++ {\n\t\t\t\te := f.Index(i)\n\t\t\t\tif e.IsNil() {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tsetDefaults(e, recur, zeros)\n\t\t\t}\n\n\t\tcase reflect.Map:\n\t\t\tfor _, k := range f.MapKeys() {\n\t\t\t\te := f.MapIndex(k)\n\t\t\t\tif e.IsNil() {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tsetDefaults(e, recur, zeros)\n\t\t\t}\n\t\t}\n\t}\n}\n\nvar (\n\t// defaults maps a protocol buffer struct type to a slice of the fields,\n\t// with its scalar fields set to their proto-declared non-zero default values.\n\tdefaultMu sync.RWMutex\n\tdefaults  = make(map[reflect.Type]defaultMessage)\n\n\tint32PtrType = reflect.TypeOf((*int32)(nil))\n)\n\n// defaultMessage represents information about the default values of a message.\ntype defaultMessage struct {\n\tscalars []scalarField\n\tnested  []int // struct field index of nested messages\n}\n\ntype scalarField struct {\n\tindex int          // struct field index\n\tkind  reflect.Kind // element type (the T in *T or []T)\n\tvalue interface{}  // the proto-declared default value, or nil\n}\n\n// t is a struct type.\nfunc buildDefaultMessage(t reflect.Type) (dm defaultMessage) {\n\tsprop := GetProperties(t)\n\tfor _, prop := range sprop.Prop {\n\t\tfi, ok := sprop.decoderTags.get(prop.Tag)\n\t\tif !ok {\n\t\t\t// XXX_unrecognized\n\t\t\tcontinue\n\t\t}\n\t\tft := t.Field(fi).Type\n\n\t\tsf, nested, err := fieldDefault(ft, prop)\n\t\tswitch {\n\t\tcase err != nil:\n\t\t\tlog.Print(err)\n\t\tcase nested:\n\t\t\tdm.nested = append(dm.nested, fi)\n\t\tcase sf != nil:\n\t\t\tsf.index = fi\n\t\t\tdm.scalars = append(dm.scalars, *sf)\n\t\t}\n\t}\n\n\treturn dm\n}\n\n// fieldDefault returns the scalarField for field type ft.\n// sf will be nil if the field can not have a default.\n// nestedMessage will be true if this is a nested message.\n// Note that sf.index is not set on return.\nfunc fieldDefault(ft reflect.Type, prop *Properties) (sf *scalarField, nestedMessage bool, err error) {\n\tvar canHaveDefault bool\n\tswitch ft.Kind() {\n\tcase reflect.Ptr:\n\t\tif ft.Elem().Kind() == reflect.Struct {\n\t\t\tnestedMessage = true\n\t\t} else {\n\t\t\tcanHaveDefault = true // proto2 scalar field\n\t\t}\n\n\tcase reflect.Slice:\n\t\tswitch ft.Elem().Kind() {\n\t\tcase reflect.Ptr:\n\t\t\tnestedMessage = true // repeated message\n\t\tcase reflect.Uint8:\n\t\t\tcanHaveDefault = true // bytes field\n\t\t}\n\n\tcase reflect.Map:\n\t\tif ft.Elem().Kind() == reflect.Ptr {\n\t\t\tnestedMessage = true // map with message values\n\t\t}\n\t}\n\n\tif !canHaveDefault {\n\t\tif nestedMessage {\n\t\t\treturn nil, true, nil\n\t\t}\n\t\treturn nil, false, nil\n\t}\n\n\t// We now know that ft is a pointer or slice.\n\tsf = &scalarField{kind: ft.Elem().Kind()}\n\n\t// scalar fields without defaults\n\tif !prop.HasDefault {\n\t\treturn sf, false, nil\n\t}\n\n\t// a scalar field: either *T or []byte\n\tswitch ft.Elem().Kind() {\n\tcase reflect.Bool:\n\t\tx, err := strconv.ParseBool(prop.Default)\n\t\tif err != nil {\n\t\t\treturn nil, false, fmt.Errorf(\"proto: bad default bool %q: %v\", prop.Default, err)\n\t\t}\n\t\tsf.value = x\n\tcase reflect.Float32:\n\t\tx, err := strconv.ParseFloat(prop.Default, 32)\n\t\tif err != nil {\n\t\t\treturn nil, false, fmt.Errorf(\"proto: bad default float32 %q: %v\", prop.Default, err)\n\t\t}\n\t\tsf.value = float32(x)\n\tcase reflect.Float64:\n\t\tx, err := strconv.ParseFloat(prop.Default, 64)\n\t\tif err != nil {\n\t\t\treturn nil, false, fmt.Errorf(\"proto: bad default float64 %q: %v\", prop.Default, err)\n\t\t}\n\t\tsf.value = x\n\tcase reflect.Int32:\n\t\tx, err := strconv.ParseInt(prop.Default, 10, 32)\n\t\tif err != nil {\n\t\t\treturn nil, false, fmt.Errorf(\"proto: bad default int32 %q: %v\", prop.Default, err)\n\t\t}\n\t\tsf.value = int32(x)\n\tcase reflect.Int64:\n\t\tx, err := strconv.ParseInt(prop.Default, 10, 64)\n\t\tif err != nil {\n\t\t\treturn nil, false, fmt.Errorf(\"proto: bad default int64 %q: %v\", prop.Default, err)\n\t\t}\n\t\tsf.value = x\n\tcase reflect.String:\n\t\tsf.value = prop.Default\n\tcase reflect.Uint8:\n\t\t// []byte (not *uint8)\n\t\tsf.value = []byte(prop.Default)\n\tcase reflect.Uint32:\n\t\tx, err := strconv.ParseUint(prop.Default, 10, 32)\n\t\tif err != nil {\n\t\t\treturn nil, false, fmt.Errorf(\"proto: bad default uint32 %q: %v\", prop.Default, err)\n\t\t}\n\t\tsf.value = uint32(x)\n\tcase reflect.Uint64:\n\t\tx, err := strconv.ParseUint(prop.Default, 10, 64)\n\t\tif err != nil {\n\t\t\treturn nil, false, fmt.Errorf(\"proto: bad default uint64 %q: %v\", prop.Default, err)\n\t\t}\n\t\tsf.value = x\n\tdefault:\n\t\treturn nil, false, fmt.Errorf(\"proto: unhandled def kind %v\", ft.Elem().Kind())\n\t}\n\n\treturn sf, false, nil\n}\n\n// mapKeys returns a sort.Interface to be used for sorting the map keys.\n// Map fields may have key types of non-float scalars, strings and enums.\nfunc mapKeys(vs []reflect.Value) sort.Interface {\n\ts := mapKeySorter{vs: vs}\n\n\t// Type specialization per https://developers.google.com/protocol-buffers/docs/proto#maps.\n\tif len(vs) == 0 {\n\t\treturn s\n\t}\n\tswitch vs[0].Kind() {\n\tcase reflect.Int32, reflect.Int64:\n\t\ts.less = func(a, b reflect.Value) bool { return a.Int() < b.Int() }\n\tcase reflect.Uint32, reflect.Uint64:\n\t\ts.less = func(a, b reflect.Value) bool { return a.Uint() < b.Uint() }\n\tcase reflect.Bool:\n\t\ts.less = func(a, b reflect.Value) bool { return !a.Bool() && b.Bool() } // false < true\n\tcase reflect.String:\n\t\ts.less = func(a, b reflect.Value) bool { return a.String() < b.String() }\n\tdefault:\n\t\tpanic(fmt.Sprintf(\"unsupported map key type: %v\", vs[0].Kind()))\n\t}\n\n\treturn s\n}\n\ntype mapKeySorter struct {\n\tvs   []reflect.Value\n\tless func(a, b reflect.Value) bool\n}\n\nfunc (s mapKeySorter) Len() int      { return len(s.vs) }\nfunc (s mapKeySorter) Swap(i, j int) { s.vs[i], s.vs[j] = s.vs[j], s.vs[i] }\nfunc (s mapKeySorter) Less(i, j int) bool {\n\treturn s.less(s.vs[i], s.vs[j])\n}\n\n// isProto3Zero reports whether v is a zero proto3 value.\nfunc isProto3Zero(v reflect.Value) bool {\n\tswitch v.Kind() {\n\tcase reflect.Bool:\n\t\treturn !v.Bool()\n\tcase reflect.Int32, reflect.Int64:\n\t\treturn v.Int() == 0\n\tcase reflect.Uint32, reflect.Uint64:\n\t\treturn v.Uint() == 0\n\tcase reflect.Float32, reflect.Float64:\n\t\treturn v.Float() == 0\n\tcase reflect.String:\n\t\treturn v.String() == \"\"\n\t}\n\treturn false\n}\n\nconst (\n\t// ProtoPackageIsVersion3 is referenced from generated protocol buffer files\n\t// to assert that that code is compatible with this version of the proto package.\n\tProtoPackageIsVersion3 = true\n\n\t// ProtoPackageIsVersion2 is referenced from generated protocol buffer files\n\t// to assert that that code is compatible with this version of the proto package.\n\tProtoPackageIsVersion2 = true\n\n\t// ProtoPackageIsVersion1 is referenced from generated protocol buffer files\n\t// to assert that that code is compatible with this version of the proto package.\n\tProtoPackageIsVersion1 = true\n)\n\n// InternalMessageInfo is a type used internally by generated .pb.go files.\n// This type is not intended to be used by non-generated code.\n// This type is not subject to any compatibility guarantee.\ntype InternalMessageInfo struct {\n\tmarshal   *marshalInfo\n\tunmarshal *unmarshalInfo\n\tmerge     *mergeInfo\n\tdiscard   *discardInfo\n}\n"
  },
  {
    "path": "vendor/github.com/golang/protobuf/proto/message_set.go",
    "content": "// Go support for Protocol Buffers - Google's data interchange format\n//\n// Copyright 2010 The Go Authors.  All rights reserved.\n// https://github.com/golang/protobuf\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\npackage proto\n\n/*\n * Support for message sets.\n */\n\nimport (\n\t\"errors\"\n)\n\n// errNoMessageTypeID occurs when a protocol buffer does not have a message type ID.\n// A message type ID is required for storing a protocol buffer in a message set.\nvar errNoMessageTypeID = errors.New(\"proto does not have a message type ID\")\n\n// The first two types (_MessageSet_Item and messageSet)\n// model what the protocol compiler produces for the following protocol message:\n//   message MessageSet {\n//     repeated group Item = 1 {\n//       required int32 type_id = 2;\n//       required string message = 3;\n//     };\n//   }\n// That is the MessageSet wire format. We can't use a proto to generate these\n// because that would introduce a circular dependency between it and this package.\n\ntype _MessageSet_Item struct {\n\tTypeId  *int32 `protobuf:\"varint,2,req,name=type_id\"`\n\tMessage []byte `protobuf:\"bytes,3,req,name=message\"`\n}\n\ntype messageSet struct {\n\tItem             []*_MessageSet_Item `protobuf:\"group,1,rep\"`\n\tXXX_unrecognized []byte\n\t// TODO: caching?\n}\n\n// Make sure messageSet is a Message.\nvar _ Message = (*messageSet)(nil)\n\n// messageTypeIder is an interface satisfied by a protocol buffer type\n// that may be stored in a MessageSet.\ntype messageTypeIder interface {\n\tMessageTypeId() int32\n}\n\nfunc (ms *messageSet) find(pb Message) *_MessageSet_Item {\n\tmti, ok := pb.(messageTypeIder)\n\tif !ok {\n\t\treturn nil\n\t}\n\tid := mti.MessageTypeId()\n\tfor _, item := range ms.Item {\n\t\tif *item.TypeId == id {\n\t\t\treturn item\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (ms *messageSet) Has(pb Message) bool {\n\treturn ms.find(pb) != nil\n}\n\nfunc (ms *messageSet) Unmarshal(pb Message) error {\n\tif item := ms.find(pb); item != nil {\n\t\treturn Unmarshal(item.Message, pb)\n\t}\n\tif _, ok := pb.(messageTypeIder); !ok {\n\t\treturn errNoMessageTypeID\n\t}\n\treturn nil // TODO: return error instead?\n}\n\nfunc (ms *messageSet) Marshal(pb Message) error {\n\tmsg, err := Marshal(pb)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif item := ms.find(pb); item != nil {\n\t\t// reuse existing item\n\t\titem.Message = msg\n\t\treturn nil\n\t}\n\n\tmti, ok := pb.(messageTypeIder)\n\tif !ok {\n\t\treturn errNoMessageTypeID\n\t}\n\n\tmtid := mti.MessageTypeId()\n\tms.Item = append(ms.Item, &_MessageSet_Item{\n\t\tTypeId:  &mtid,\n\t\tMessage: msg,\n\t})\n\treturn nil\n}\n\nfunc (ms *messageSet) Reset()         { *ms = messageSet{} }\nfunc (ms *messageSet) String() string { return CompactTextString(ms) }\nfunc (*messageSet) ProtoMessage()     {}\n\n// Support for the message_set_wire_format message option.\n\nfunc skipVarint(buf []byte) []byte {\n\ti := 0\n\tfor ; buf[i]&0x80 != 0; i++ {\n\t}\n\treturn buf[i+1:]\n}\n\n// unmarshalMessageSet decodes the extension map encoded in buf in the message set wire format.\n// It is called by Unmarshal methods on protocol buffer messages with the message_set_wire_format option.\nfunc unmarshalMessageSet(buf []byte, exts interface{}) error {\n\tvar m map[int32]Extension\n\tswitch exts := exts.(type) {\n\tcase *XXX_InternalExtensions:\n\t\tm = exts.extensionsWrite()\n\tcase map[int32]Extension:\n\t\tm = exts\n\tdefault:\n\t\treturn errors.New(\"proto: not an extension map\")\n\t}\n\n\tms := new(messageSet)\n\tif err := Unmarshal(buf, ms); err != nil {\n\t\treturn err\n\t}\n\tfor _, item := range ms.Item {\n\t\tid := *item.TypeId\n\t\tmsg := item.Message\n\n\t\t// Restore wire type and field number varint, plus length varint.\n\t\t// Be careful to preserve duplicate items.\n\t\tb := EncodeVarint(uint64(id)<<3 | WireBytes)\n\t\tif ext, ok := m[id]; ok {\n\t\t\t// Existing data; rip off the tag and length varint\n\t\t\t// so we join the new data correctly.\n\t\t\t// We can assume that ext.enc is set because we are unmarshaling.\n\t\t\to := ext.enc[len(b):]   // skip wire type and field number\n\t\t\t_, n := DecodeVarint(o) // calculate length of length varint\n\t\t\to = o[n:]               // skip length varint\n\t\t\tmsg = append(o, msg...) // join old data and new data\n\t\t}\n\t\tb = append(b, EncodeVarint(uint64(len(msg)))...)\n\t\tb = append(b, msg...)\n\n\t\tm[id] = Extension{enc: b}\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/golang/protobuf/proto/pointer_reflect.go",
    "content": "// Go support for Protocol Buffers - Google's data interchange format\n//\n// Copyright 2012 The Go Authors.  All rights reserved.\n// https://github.com/golang/protobuf\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n// +build purego appengine js\n\n// This file contains an implementation of proto field accesses using package reflect.\n// It is slower than the code in pointer_unsafe.go but it avoids package unsafe and can\n// be used on App Engine.\n\npackage proto\n\nimport (\n\t\"reflect\"\n\t\"sync\"\n)\n\nconst unsafeAllowed = false\n\n// A field identifies a field in a struct, accessible from a pointer.\n// In this implementation, a field is identified by the sequence of field indices\n// passed to reflect's FieldByIndex.\ntype field []int\n\n// toField returns a field equivalent to the given reflect field.\nfunc toField(f *reflect.StructField) field {\n\treturn f.Index\n}\n\n// invalidField is an invalid field identifier.\nvar invalidField = field(nil)\n\n// zeroField is a noop when calling pointer.offset.\nvar zeroField = field([]int{})\n\n// IsValid reports whether the field identifier is valid.\nfunc (f field) IsValid() bool { return f != nil }\n\n// The pointer type is for the table-driven decoder.\n// The implementation here uses a reflect.Value of pointer type to\n// create a generic pointer. In pointer_unsafe.go we use unsafe\n// instead of reflect to implement the same (but faster) interface.\ntype pointer struct {\n\tv reflect.Value\n}\n\n// toPointer converts an interface of pointer type to a pointer\n// that points to the same target.\nfunc toPointer(i *Message) pointer {\n\treturn pointer{v: reflect.ValueOf(*i)}\n}\n\n// toAddrPointer converts an interface to a pointer that points to\n// the interface data.\nfunc toAddrPointer(i *interface{}, isptr, deref bool) pointer {\n\tv := reflect.ValueOf(*i)\n\tu := reflect.New(v.Type())\n\tu.Elem().Set(v)\n\tif deref {\n\t\tu = u.Elem()\n\t}\n\treturn pointer{v: u}\n}\n\n// valToPointer converts v to a pointer.  v must be of pointer type.\nfunc valToPointer(v reflect.Value) pointer {\n\treturn pointer{v: v}\n}\n\n// offset converts from a pointer to a structure to a pointer to\n// one of its fields.\nfunc (p pointer) offset(f field) pointer {\n\treturn pointer{v: p.v.Elem().FieldByIndex(f).Addr()}\n}\n\nfunc (p pointer) isNil() bool {\n\treturn p.v.IsNil()\n}\n\n// grow updates the slice s in place to make it one element longer.\n// s must be addressable.\n// Returns the (addressable) new element.\nfunc grow(s reflect.Value) reflect.Value {\n\tn, m := s.Len(), s.Cap()\n\tif n < m {\n\t\ts.SetLen(n + 1)\n\t} else {\n\t\ts.Set(reflect.Append(s, reflect.Zero(s.Type().Elem())))\n\t}\n\treturn s.Index(n)\n}\n\nfunc (p pointer) toInt64() *int64 {\n\treturn p.v.Interface().(*int64)\n}\nfunc (p pointer) toInt64Ptr() **int64 {\n\treturn p.v.Interface().(**int64)\n}\nfunc (p pointer) toInt64Slice() *[]int64 {\n\treturn p.v.Interface().(*[]int64)\n}\n\nvar int32ptr = reflect.TypeOf((*int32)(nil))\n\nfunc (p pointer) toInt32() *int32 {\n\treturn p.v.Convert(int32ptr).Interface().(*int32)\n}\n\n// The toInt32Ptr/Slice methods don't work because of enums.\n// Instead, we must use set/get methods for the int32ptr/slice case.\n/*\n\tfunc (p pointer) toInt32Ptr() **int32 {\n\t\treturn p.v.Interface().(**int32)\n}\n\tfunc (p pointer) toInt32Slice() *[]int32 {\n\t\treturn p.v.Interface().(*[]int32)\n}\n*/\nfunc (p pointer) getInt32Ptr() *int32 {\n\tif p.v.Type().Elem().Elem() == reflect.TypeOf(int32(0)) {\n\t\t// raw int32 type\n\t\treturn p.v.Elem().Interface().(*int32)\n\t}\n\t// an enum\n\treturn p.v.Elem().Convert(int32PtrType).Interface().(*int32)\n}\nfunc (p pointer) setInt32Ptr(v int32) {\n\t// Allocate value in a *int32. Possibly convert that to a *enum.\n\t// Then assign it to a **int32 or **enum.\n\t// Note: we can convert *int32 to *enum, but we can't convert\n\t// **int32 to **enum!\n\tp.v.Elem().Set(reflect.ValueOf(&v).Convert(p.v.Type().Elem()))\n}\n\n// getInt32Slice copies []int32 from p as a new slice.\n// This behavior differs from the implementation in pointer_unsafe.go.\nfunc (p pointer) getInt32Slice() []int32 {\n\tif p.v.Type().Elem().Elem() == reflect.TypeOf(int32(0)) {\n\t\t// raw int32 type\n\t\treturn p.v.Elem().Interface().([]int32)\n\t}\n\t// an enum\n\t// Allocate a []int32, then assign []enum's values into it.\n\t// Note: we can't convert []enum to []int32.\n\tslice := p.v.Elem()\n\ts := make([]int32, slice.Len())\n\tfor i := 0; i < slice.Len(); i++ {\n\t\ts[i] = int32(slice.Index(i).Int())\n\t}\n\treturn s\n}\n\n// setInt32Slice copies []int32 into p as a new slice.\n// This behavior differs from the implementation in pointer_unsafe.go.\nfunc (p pointer) setInt32Slice(v []int32) {\n\tif p.v.Type().Elem().Elem() == reflect.TypeOf(int32(0)) {\n\t\t// raw int32 type\n\t\tp.v.Elem().Set(reflect.ValueOf(v))\n\t\treturn\n\t}\n\t// an enum\n\t// Allocate a []enum, then assign []int32's values into it.\n\t// Note: we can't convert []enum to []int32.\n\tslice := reflect.MakeSlice(p.v.Type().Elem(), len(v), cap(v))\n\tfor i, x := range v {\n\t\tslice.Index(i).SetInt(int64(x))\n\t}\n\tp.v.Elem().Set(slice)\n}\nfunc (p pointer) appendInt32Slice(v int32) {\n\tgrow(p.v.Elem()).SetInt(int64(v))\n}\n\nfunc (p pointer) toUint64() *uint64 {\n\treturn p.v.Interface().(*uint64)\n}\nfunc (p pointer) toUint64Ptr() **uint64 {\n\treturn p.v.Interface().(**uint64)\n}\nfunc (p pointer) toUint64Slice() *[]uint64 {\n\treturn p.v.Interface().(*[]uint64)\n}\nfunc (p pointer) toUint32() *uint32 {\n\treturn p.v.Interface().(*uint32)\n}\nfunc (p pointer) toUint32Ptr() **uint32 {\n\treturn p.v.Interface().(**uint32)\n}\nfunc (p pointer) toUint32Slice() *[]uint32 {\n\treturn p.v.Interface().(*[]uint32)\n}\nfunc (p pointer) toBool() *bool {\n\treturn p.v.Interface().(*bool)\n}\nfunc (p pointer) toBoolPtr() **bool {\n\treturn p.v.Interface().(**bool)\n}\nfunc (p pointer) toBoolSlice() *[]bool {\n\treturn p.v.Interface().(*[]bool)\n}\nfunc (p pointer) toFloat64() *float64 {\n\treturn p.v.Interface().(*float64)\n}\nfunc (p pointer) toFloat64Ptr() **float64 {\n\treturn p.v.Interface().(**float64)\n}\nfunc (p pointer) toFloat64Slice() *[]float64 {\n\treturn p.v.Interface().(*[]float64)\n}\nfunc (p pointer) toFloat32() *float32 {\n\treturn p.v.Interface().(*float32)\n}\nfunc (p pointer) toFloat32Ptr() **float32 {\n\treturn p.v.Interface().(**float32)\n}\nfunc (p pointer) toFloat32Slice() *[]float32 {\n\treturn p.v.Interface().(*[]float32)\n}\nfunc (p pointer) toString() *string {\n\treturn p.v.Interface().(*string)\n}\nfunc (p pointer) toStringPtr() **string {\n\treturn p.v.Interface().(**string)\n}\nfunc (p pointer) toStringSlice() *[]string {\n\treturn p.v.Interface().(*[]string)\n}\nfunc (p pointer) toBytes() *[]byte {\n\treturn p.v.Interface().(*[]byte)\n}\nfunc (p pointer) toBytesSlice() *[][]byte {\n\treturn p.v.Interface().(*[][]byte)\n}\nfunc (p pointer) toExtensions() *XXX_InternalExtensions {\n\treturn p.v.Interface().(*XXX_InternalExtensions)\n}\nfunc (p pointer) toOldExtensions() *map[int32]Extension {\n\treturn p.v.Interface().(*map[int32]Extension)\n}\nfunc (p pointer) getPointer() pointer {\n\treturn pointer{v: p.v.Elem()}\n}\nfunc (p pointer) setPointer(q pointer) {\n\tp.v.Elem().Set(q.v)\n}\nfunc (p pointer) appendPointer(q pointer) {\n\tgrow(p.v.Elem()).Set(q.v)\n}\n\n// getPointerSlice copies []*T from p as a new []pointer.\n// This behavior differs from the implementation in pointer_unsafe.go.\nfunc (p pointer) getPointerSlice() []pointer {\n\tif p.v.IsNil() {\n\t\treturn nil\n\t}\n\tn := p.v.Elem().Len()\n\ts := make([]pointer, n)\n\tfor i := 0; i < n; i++ {\n\t\ts[i] = pointer{v: p.v.Elem().Index(i)}\n\t}\n\treturn s\n}\n\n// setPointerSlice copies []pointer into p as a new []*T.\n// This behavior differs from the implementation in pointer_unsafe.go.\nfunc (p pointer) setPointerSlice(v []pointer) {\n\tif v == nil {\n\t\tp.v.Elem().Set(reflect.New(p.v.Elem().Type()).Elem())\n\t\treturn\n\t}\n\ts := reflect.MakeSlice(p.v.Elem().Type(), 0, len(v))\n\tfor _, p := range v {\n\t\ts = reflect.Append(s, p.v)\n\t}\n\tp.v.Elem().Set(s)\n}\n\n// getInterfacePointer returns a pointer that points to the\n// interface data of the interface pointed by p.\nfunc (p pointer) getInterfacePointer() pointer {\n\tif p.v.Elem().IsNil() {\n\t\treturn pointer{v: p.v.Elem()}\n\t}\n\treturn pointer{v: p.v.Elem().Elem().Elem().Field(0).Addr()} // *interface -> interface -> *struct -> struct\n}\n\nfunc (p pointer) asPointerTo(t reflect.Type) reflect.Value {\n\t// TODO: check that p.v.Type().Elem() == t?\n\treturn p.v\n}\n\nfunc atomicLoadUnmarshalInfo(p **unmarshalInfo) *unmarshalInfo {\n\tatomicLock.Lock()\n\tdefer atomicLock.Unlock()\n\treturn *p\n}\nfunc atomicStoreUnmarshalInfo(p **unmarshalInfo, v *unmarshalInfo) {\n\tatomicLock.Lock()\n\tdefer atomicLock.Unlock()\n\t*p = v\n}\nfunc atomicLoadMarshalInfo(p **marshalInfo) *marshalInfo {\n\tatomicLock.Lock()\n\tdefer atomicLock.Unlock()\n\treturn *p\n}\nfunc atomicStoreMarshalInfo(p **marshalInfo, v *marshalInfo) {\n\tatomicLock.Lock()\n\tdefer atomicLock.Unlock()\n\t*p = v\n}\nfunc atomicLoadMergeInfo(p **mergeInfo) *mergeInfo {\n\tatomicLock.Lock()\n\tdefer atomicLock.Unlock()\n\treturn *p\n}\nfunc atomicStoreMergeInfo(p **mergeInfo, v *mergeInfo) {\n\tatomicLock.Lock()\n\tdefer atomicLock.Unlock()\n\t*p = v\n}\nfunc atomicLoadDiscardInfo(p **discardInfo) *discardInfo {\n\tatomicLock.Lock()\n\tdefer atomicLock.Unlock()\n\treturn *p\n}\nfunc atomicStoreDiscardInfo(p **discardInfo, v *discardInfo) {\n\tatomicLock.Lock()\n\tdefer atomicLock.Unlock()\n\t*p = v\n}\n\nvar atomicLock sync.Mutex\n"
  },
  {
    "path": "vendor/github.com/golang/protobuf/proto/pointer_unsafe.go",
    "content": "// Go support for Protocol Buffers - Google's data interchange format\n//\n// Copyright 2012 The Go Authors.  All rights reserved.\n// https://github.com/golang/protobuf\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n// +build !purego,!appengine,!js\n\n// This file contains the implementation of the proto field accesses using package unsafe.\n\npackage proto\n\nimport (\n\t\"reflect\"\n\t\"sync/atomic\"\n\t\"unsafe\"\n)\n\nconst unsafeAllowed = true\n\n// A field identifies a field in a struct, accessible from a pointer.\n// In this implementation, a field is identified by its byte offset from the start of the struct.\ntype field uintptr\n\n// toField returns a field equivalent to the given reflect field.\nfunc toField(f *reflect.StructField) field {\n\treturn field(f.Offset)\n}\n\n// invalidField is an invalid field identifier.\nconst invalidField = ^field(0)\n\n// zeroField is a noop when calling pointer.offset.\nconst zeroField = field(0)\n\n// IsValid reports whether the field identifier is valid.\nfunc (f field) IsValid() bool {\n\treturn f != invalidField\n}\n\n// The pointer type below is for the new table-driven encoder/decoder.\n// The implementation here uses unsafe.Pointer to create a generic pointer.\n// In pointer_reflect.go we use reflect instead of unsafe to implement\n// the same (but slower) interface.\ntype pointer struct {\n\tp unsafe.Pointer\n}\n\n// size of pointer\nvar ptrSize = unsafe.Sizeof(uintptr(0))\n\n// toPointer converts an interface of pointer type to a pointer\n// that points to the same target.\nfunc toPointer(i *Message) pointer {\n\t// Super-tricky - read pointer out of data word of interface value.\n\t// Saves ~25ns over the equivalent:\n\t// return valToPointer(reflect.ValueOf(*i))\n\treturn pointer{p: (*[2]unsafe.Pointer)(unsafe.Pointer(i))[1]}\n}\n\n// toAddrPointer converts an interface to a pointer that points to\n// the interface data.\nfunc toAddrPointer(i *interface{}, isptr, deref bool) (p pointer) {\n\t// Super-tricky - read or get the address of data word of interface value.\n\tif isptr {\n\t\t// The interface is of pointer type, thus it is a direct interface.\n\t\t// The data word is the pointer data itself. We take its address.\n\t\tp = pointer{p: unsafe.Pointer(uintptr(unsafe.Pointer(i)) + ptrSize)}\n\t} else {\n\t\t// The interface is not of pointer type. The data word is the pointer\n\t\t// to the data.\n\t\tp = pointer{p: (*[2]unsafe.Pointer)(unsafe.Pointer(i))[1]}\n\t}\n\tif deref {\n\t\tp.p = *(*unsafe.Pointer)(p.p)\n\t}\n\treturn p\n}\n\n// valToPointer converts v to a pointer. v must be of pointer type.\nfunc valToPointer(v reflect.Value) pointer {\n\treturn pointer{p: unsafe.Pointer(v.Pointer())}\n}\n\n// offset converts from a pointer to a structure to a pointer to\n// one of its fields.\nfunc (p pointer) offset(f field) pointer {\n\t// For safety, we should panic if !f.IsValid, however calling panic causes\n\t// this to no longer be inlineable, which is a serious performance cost.\n\t/*\n\t\tif !f.IsValid() {\n\t\t\tpanic(\"invalid field\")\n\t\t}\n\t*/\n\treturn pointer{p: unsafe.Pointer(uintptr(p.p) + uintptr(f))}\n}\n\nfunc (p pointer) isNil() bool {\n\treturn p.p == nil\n}\n\nfunc (p pointer) toInt64() *int64 {\n\treturn (*int64)(p.p)\n}\nfunc (p pointer) toInt64Ptr() **int64 {\n\treturn (**int64)(p.p)\n}\nfunc (p pointer) toInt64Slice() *[]int64 {\n\treturn (*[]int64)(p.p)\n}\nfunc (p pointer) toInt32() *int32 {\n\treturn (*int32)(p.p)\n}\n\n// See pointer_reflect.go for why toInt32Ptr/Slice doesn't exist.\n/*\n\tfunc (p pointer) toInt32Ptr() **int32 {\n\t\treturn (**int32)(p.p)\n\t}\n\tfunc (p pointer) toInt32Slice() *[]int32 {\n\t\treturn (*[]int32)(p.p)\n\t}\n*/\nfunc (p pointer) getInt32Ptr() *int32 {\n\treturn *(**int32)(p.p)\n}\nfunc (p pointer) setInt32Ptr(v int32) {\n\t*(**int32)(p.p) = &v\n}\n\n// getInt32Slice loads a []int32 from p.\n// The value returned is aliased with the original slice.\n// This behavior differs from the implementation in pointer_reflect.go.\nfunc (p pointer) getInt32Slice() []int32 {\n\treturn *(*[]int32)(p.p)\n}\n\n// setInt32Slice stores a []int32 to p.\n// The value set is aliased with the input slice.\n// This behavior differs from the implementation in pointer_reflect.go.\nfunc (p pointer) setInt32Slice(v []int32) {\n\t*(*[]int32)(p.p) = v\n}\n\n// TODO: Can we get rid of appendInt32Slice and use setInt32Slice instead?\nfunc (p pointer) appendInt32Slice(v int32) {\n\ts := (*[]int32)(p.p)\n\t*s = append(*s, v)\n}\n\nfunc (p pointer) toUint64() *uint64 {\n\treturn (*uint64)(p.p)\n}\nfunc (p pointer) toUint64Ptr() **uint64 {\n\treturn (**uint64)(p.p)\n}\nfunc (p pointer) toUint64Slice() *[]uint64 {\n\treturn (*[]uint64)(p.p)\n}\nfunc (p pointer) toUint32() *uint32 {\n\treturn (*uint32)(p.p)\n}\nfunc (p pointer) toUint32Ptr() **uint32 {\n\treturn (**uint32)(p.p)\n}\nfunc (p pointer) toUint32Slice() *[]uint32 {\n\treturn (*[]uint32)(p.p)\n}\nfunc (p pointer) toBool() *bool {\n\treturn (*bool)(p.p)\n}\nfunc (p pointer) toBoolPtr() **bool {\n\treturn (**bool)(p.p)\n}\nfunc (p pointer) toBoolSlice() *[]bool {\n\treturn (*[]bool)(p.p)\n}\nfunc (p pointer) toFloat64() *float64 {\n\treturn (*float64)(p.p)\n}\nfunc (p pointer) toFloat64Ptr() **float64 {\n\treturn (**float64)(p.p)\n}\nfunc (p pointer) toFloat64Slice() *[]float64 {\n\treturn (*[]float64)(p.p)\n}\nfunc (p pointer) toFloat32() *float32 {\n\treturn (*float32)(p.p)\n}\nfunc (p pointer) toFloat32Ptr() **float32 {\n\treturn (**float32)(p.p)\n}\nfunc (p pointer) toFloat32Slice() *[]float32 {\n\treturn (*[]float32)(p.p)\n}\nfunc (p pointer) toString() *string {\n\treturn (*string)(p.p)\n}\nfunc (p pointer) toStringPtr() **string {\n\treturn (**string)(p.p)\n}\nfunc (p pointer) toStringSlice() *[]string {\n\treturn (*[]string)(p.p)\n}\nfunc (p pointer) toBytes() *[]byte {\n\treturn (*[]byte)(p.p)\n}\nfunc (p pointer) toBytesSlice() *[][]byte {\n\treturn (*[][]byte)(p.p)\n}\nfunc (p pointer) toExtensions() *XXX_InternalExtensions {\n\treturn (*XXX_InternalExtensions)(p.p)\n}\nfunc (p pointer) toOldExtensions() *map[int32]Extension {\n\treturn (*map[int32]Extension)(p.p)\n}\n\n// getPointerSlice loads []*T from p as a []pointer.\n// The value returned is aliased with the original slice.\n// This behavior differs from the implementation in pointer_reflect.go.\nfunc (p pointer) getPointerSlice() []pointer {\n\t// Super-tricky - p should point to a []*T where T is a\n\t// message type. We load it as []pointer.\n\treturn *(*[]pointer)(p.p)\n}\n\n// setPointerSlice stores []pointer into p as a []*T.\n// The value set is aliased with the input slice.\n// This behavior differs from the implementation in pointer_reflect.go.\nfunc (p pointer) setPointerSlice(v []pointer) {\n\t// Super-tricky - p should point to a []*T where T is a\n\t// message type. We store it as []pointer.\n\t*(*[]pointer)(p.p) = v\n}\n\n// getPointer loads the pointer at p and returns it.\nfunc (p pointer) getPointer() pointer {\n\treturn pointer{p: *(*unsafe.Pointer)(p.p)}\n}\n\n// setPointer stores the pointer q at p.\nfunc (p pointer) setPointer(q pointer) {\n\t*(*unsafe.Pointer)(p.p) = q.p\n}\n\n// append q to the slice pointed to by p.\nfunc (p pointer) appendPointer(q pointer) {\n\ts := (*[]unsafe.Pointer)(p.p)\n\t*s = append(*s, q.p)\n}\n\n// getInterfacePointer returns a pointer that points to the\n// interface data of the interface pointed by p.\nfunc (p pointer) getInterfacePointer() pointer {\n\t// Super-tricky - read pointer out of data word of interface value.\n\treturn pointer{p: (*(*[2]unsafe.Pointer)(p.p))[1]}\n}\n\n// asPointerTo returns a reflect.Value that is a pointer to an\n// object of type t stored at p.\nfunc (p pointer) asPointerTo(t reflect.Type) reflect.Value {\n\treturn reflect.NewAt(t, p.p)\n}\n\nfunc atomicLoadUnmarshalInfo(p **unmarshalInfo) *unmarshalInfo {\n\treturn (*unmarshalInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p))))\n}\nfunc atomicStoreUnmarshalInfo(p **unmarshalInfo, v *unmarshalInfo) {\n\tatomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v))\n}\nfunc atomicLoadMarshalInfo(p **marshalInfo) *marshalInfo {\n\treturn (*marshalInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p))))\n}\nfunc atomicStoreMarshalInfo(p **marshalInfo, v *marshalInfo) {\n\tatomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v))\n}\nfunc atomicLoadMergeInfo(p **mergeInfo) *mergeInfo {\n\treturn (*mergeInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p))))\n}\nfunc atomicStoreMergeInfo(p **mergeInfo, v *mergeInfo) {\n\tatomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v))\n}\nfunc atomicLoadDiscardInfo(p **discardInfo) *discardInfo {\n\treturn (*discardInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p))))\n}\nfunc atomicStoreDiscardInfo(p **discardInfo, v *discardInfo) {\n\tatomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v))\n}\n"
  },
  {
    "path": "vendor/github.com/golang/protobuf/proto/properties.go",
    "content": "// Go support for Protocol Buffers - Google's data interchange format\n//\n// Copyright 2010 The Go Authors.  All rights reserved.\n// https://github.com/golang/protobuf\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\npackage proto\n\n/*\n * Routines for encoding data into the wire format for protocol buffers.\n */\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"reflect\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n)\n\nconst debug bool = false\n\n// Constants that identify the encoding of a value on the wire.\nconst (\n\tWireVarint     = 0\n\tWireFixed64    = 1\n\tWireBytes      = 2\n\tWireStartGroup = 3\n\tWireEndGroup   = 4\n\tWireFixed32    = 5\n)\n\n// tagMap is an optimization over map[int]int for typical protocol buffer\n// use-cases. Encoded protocol buffers are often in tag order with small tag\n// numbers.\ntype tagMap struct {\n\tfastTags []int\n\tslowTags map[int]int\n}\n\n// tagMapFastLimit is the upper bound on the tag number that will be stored in\n// the tagMap slice rather than its map.\nconst tagMapFastLimit = 1024\n\nfunc (p *tagMap) get(t int) (int, bool) {\n\tif t > 0 && t < tagMapFastLimit {\n\t\tif t >= len(p.fastTags) {\n\t\t\treturn 0, false\n\t\t}\n\t\tfi := p.fastTags[t]\n\t\treturn fi, fi >= 0\n\t}\n\tfi, ok := p.slowTags[t]\n\treturn fi, ok\n}\n\nfunc (p *tagMap) put(t int, fi int) {\n\tif t > 0 && t < tagMapFastLimit {\n\t\tfor len(p.fastTags) < t+1 {\n\t\t\tp.fastTags = append(p.fastTags, -1)\n\t\t}\n\t\tp.fastTags[t] = fi\n\t\treturn\n\t}\n\tif p.slowTags == nil {\n\t\tp.slowTags = make(map[int]int)\n\t}\n\tp.slowTags[t] = fi\n}\n\n// StructProperties represents properties for all the fields of a struct.\n// decoderTags and decoderOrigNames should only be used by the decoder.\ntype StructProperties struct {\n\tProp             []*Properties  // properties for each field\n\treqCount         int            // required count\n\tdecoderTags      tagMap         // map from proto tag to struct field number\n\tdecoderOrigNames map[string]int // map from original name to struct field number\n\torder            []int          // list of struct field numbers in tag order\n\n\t// OneofTypes contains information about the oneof fields in this message.\n\t// It is keyed by the original name of a field.\n\tOneofTypes map[string]*OneofProperties\n}\n\n// OneofProperties represents information about a specific field in a oneof.\ntype OneofProperties struct {\n\tType  reflect.Type // pointer to generated struct type for this oneof field\n\tField int          // struct field number of the containing oneof in the message\n\tProp  *Properties\n}\n\n// Implement the sorting interface so we can sort the fields in tag order, as recommended by the spec.\n// See encode.go, (*Buffer).enc_struct.\n\nfunc (sp *StructProperties) Len() int { return len(sp.order) }\nfunc (sp *StructProperties) Less(i, j int) bool {\n\treturn sp.Prop[sp.order[i]].Tag < sp.Prop[sp.order[j]].Tag\n}\nfunc (sp *StructProperties) Swap(i, j int) { sp.order[i], sp.order[j] = sp.order[j], sp.order[i] }\n\n// Properties represents the protocol-specific behavior of a single struct field.\ntype Properties struct {\n\tName     string // name of the field, for error messages\n\tOrigName string // original name before protocol compiler (always set)\n\tJSONName string // name to use for JSON; determined by protoc\n\tWire     string\n\tWireType int\n\tTag      int\n\tRequired bool\n\tOptional bool\n\tRepeated bool\n\tPacked   bool   // relevant for repeated primitives only\n\tEnum     string // set for enum types only\n\tproto3   bool   // whether this is known to be a proto3 field\n\toneof    bool   // whether this is a oneof field\n\n\tDefault    string // default value\n\tHasDefault bool   // whether an explicit default was provided\n\n\tstype reflect.Type      // set for struct types only\n\tsprop *StructProperties // set for struct types only\n\n\tmtype      reflect.Type // set for map types only\n\tMapKeyProp *Properties  // set for map types only\n\tMapValProp *Properties  // set for map types only\n}\n\n// String formats the properties in the protobuf struct field tag style.\nfunc (p *Properties) String() string {\n\ts := p.Wire\n\ts += \",\"\n\ts += strconv.Itoa(p.Tag)\n\tif p.Required {\n\t\ts += \",req\"\n\t}\n\tif p.Optional {\n\t\ts += \",opt\"\n\t}\n\tif p.Repeated {\n\t\ts += \",rep\"\n\t}\n\tif p.Packed {\n\t\ts += \",packed\"\n\t}\n\ts += \",name=\" + p.OrigName\n\tif p.JSONName != p.OrigName {\n\t\ts += \",json=\" + p.JSONName\n\t}\n\tif p.proto3 {\n\t\ts += \",proto3\"\n\t}\n\tif p.oneof {\n\t\ts += \",oneof\"\n\t}\n\tif len(p.Enum) > 0 {\n\t\ts += \",enum=\" + p.Enum\n\t}\n\tif p.HasDefault {\n\t\ts += \",def=\" + p.Default\n\t}\n\treturn s\n}\n\n// Parse populates p by parsing a string in the protobuf struct field tag style.\nfunc (p *Properties) Parse(s string) {\n\t// \"bytes,49,opt,name=foo,def=hello!\"\n\tfields := strings.Split(s, \",\") // breaks def=, but handled below.\n\tif len(fields) < 2 {\n\t\tlog.Printf(\"proto: tag has too few fields: %q\", s)\n\t\treturn\n\t}\n\n\tp.Wire = fields[0]\n\tswitch p.Wire {\n\tcase \"varint\":\n\t\tp.WireType = WireVarint\n\tcase \"fixed32\":\n\t\tp.WireType = WireFixed32\n\tcase \"fixed64\":\n\t\tp.WireType = WireFixed64\n\tcase \"zigzag32\":\n\t\tp.WireType = WireVarint\n\tcase \"zigzag64\":\n\t\tp.WireType = WireVarint\n\tcase \"bytes\", \"group\":\n\t\tp.WireType = WireBytes\n\t\t// no numeric converter for non-numeric types\n\tdefault:\n\t\tlog.Printf(\"proto: tag has unknown wire type: %q\", s)\n\t\treturn\n\t}\n\n\tvar err error\n\tp.Tag, err = strconv.Atoi(fields[1])\n\tif err != nil {\n\t\treturn\n\t}\n\nouter:\n\tfor i := 2; i < len(fields); i++ {\n\t\tf := fields[i]\n\t\tswitch {\n\t\tcase f == \"req\":\n\t\t\tp.Required = true\n\t\tcase f == \"opt\":\n\t\t\tp.Optional = true\n\t\tcase f == \"rep\":\n\t\t\tp.Repeated = true\n\t\tcase f == \"packed\":\n\t\t\tp.Packed = true\n\t\tcase strings.HasPrefix(f, \"name=\"):\n\t\t\tp.OrigName = f[5:]\n\t\tcase strings.HasPrefix(f, \"json=\"):\n\t\t\tp.JSONName = f[5:]\n\t\tcase strings.HasPrefix(f, \"enum=\"):\n\t\t\tp.Enum = f[5:]\n\t\tcase f == \"proto3\":\n\t\t\tp.proto3 = true\n\t\tcase f == \"oneof\":\n\t\t\tp.oneof = true\n\t\tcase strings.HasPrefix(f, \"def=\"):\n\t\t\tp.HasDefault = true\n\t\t\tp.Default = f[4:] // rest of string\n\t\t\tif i+1 < len(fields) {\n\t\t\t\t// Commas aren't escaped, and def is always last.\n\t\t\t\tp.Default += \",\" + strings.Join(fields[i+1:], \",\")\n\t\t\t\tbreak outer\n\t\t\t}\n\t\t}\n\t}\n}\n\nvar protoMessageType = reflect.TypeOf((*Message)(nil)).Elem()\n\n// setFieldProps initializes the field properties for submessages and maps.\nfunc (p *Properties) setFieldProps(typ reflect.Type, f *reflect.StructField, lockGetProp bool) {\n\tswitch t1 := typ; t1.Kind() {\n\tcase reflect.Ptr:\n\t\tif t1.Elem().Kind() == reflect.Struct {\n\t\t\tp.stype = t1.Elem()\n\t\t}\n\n\tcase reflect.Slice:\n\t\tif t2 := t1.Elem(); t2.Kind() == reflect.Ptr && t2.Elem().Kind() == reflect.Struct {\n\t\t\tp.stype = t2.Elem()\n\t\t}\n\n\tcase reflect.Map:\n\t\tp.mtype = t1\n\t\tp.MapKeyProp = &Properties{}\n\t\tp.MapKeyProp.init(reflect.PtrTo(p.mtype.Key()), \"Key\", f.Tag.Get(\"protobuf_key\"), nil, lockGetProp)\n\t\tp.MapValProp = &Properties{}\n\t\tvtype := p.mtype.Elem()\n\t\tif vtype.Kind() != reflect.Ptr && vtype.Kind() != reflect.Slice {\n\t\t\t// The value type is not a message (*T) or bytes ([]byte),\n\t\t\t// so we need encoders for the pointer to this type.\n\t\t\tvtype = reflect.PtrTo(vtype)\n\t\t}\n\t\tp.MapValProp.init(vtype, \"Value\", f.Tag.Get(\"protobuf_val\"), nil, lockGetProp)\n\t}\n\n\tif p.stype != nil {\n\t\tif lockGetProp {\n\t\t\tp.sprop = GetProperties(p.stype)\n\t\t} else {\n\t\t\tp.sprop = getPropertiesLocked(p.stype)\n\t\t}\n\t}\n}\n\nvar (\n\tmarshalerType = reflect.TypeOf((*Marshaler)(nil)).Elem()\n)\n\n// Init populates the properties from a protocol buffer struct tag.\nfunc (p *Properties) Init(typ reflect.Type, name, tag string, f *reflect.StructField) {\n\tp.init(typ, name, tag, f, true)\n}\n\nfunc (p *Properties) init(typ reflect.Type, name, tag string, f *reflect.StructField, lockGetProp bool) {\n\t// \"bytes,49,opt,def=hello!\"\n\tp.Name = name\n\tp.OrigName = name\n\tif tag == \"\" {\n\t\treturn\n\t}\n\tp.Parse(tag)\n\tp.setFieldProps(typ, f, lockGetProp)\n}\n\nvar (\n\tpropertiesMu  sync.RWMutex\n\tpropertiesMap = make(map[reflect.Type]*StructProperties)\n)\n\n// GetProperties returns the list of properties for the type represented by t.\n// t must represent a generated struct type of a protocol message.\nfunc GetProperties(t reflect.Type) *StructProperties {\n\tif t.Kind() != reflect.Struct {\n\t\tpanic(\"proto: type must have kind struct\")\n\t}\n\n\t// Most calls to GetProperties in a long-running program will be\n\t// retrieving details for types we have seen before.\n\tpropertiesMu.RLock()\n\tsprop, ok := propertiesMap[t]\n\tpropertiesMu.RUnlock()\n\tif ok {\n\t\treturn sprop\n\t}\n\n\tpropertiesMu.Lock()\n\tsprop = getPropertiesLocked(t)\n\tpropertiesMu.Unlock()\n\treturn sprop\n}\n\ntype (\n\toneofFuncsIface interface {\n\t\tXXX_OneofFuncs() (func(Message, *Buffer) error, func(Message, int, int, *Buffer) (bool, error), func(Message) int, []interface{})\n\t}\n\toneofWrappersIface interface {\n\t\tXXX_OneofWrappers() []interface{}\n\t}\n)\n\n// getPropertiesLocked requires that propertiesMu is held.\nfunc getPropertiesLocked(t reflect.Type) *StructProperties {\n\tif prop, ok := propertiesMap[t]; ok {\n\t\treturn prop\n\t}\n\n\tprop := new(StructProperties)\n\t// in case of recursive protos, fill this in now.\n\tpropertiesMap[t] = prop\n\n\t// build properties\n\tprop.Prop = make([]*Properties, t.NumField())\n\tprop.order = make([]int, t.NumField())\n\n\tfor i := 0; i < t.NumField(); i++ {\n\t\tf := t.Field(i)\n\t\tp := new(Properties)\n\t\tname := f.Name\n\t\tp.init(f.Type, name, f.Tag.Get(\"protobuf\"), &f, false)\n\n\t\toneof := f.Tag.Get(\"protobuf_oneof\") // special case\n\t\tif oneof != \"\" {\n\t\t\t// Oneof fields don't use the traditional protobuf tag.\n\t\t\tp.OrigName = oneof\n\t\t}\n\t\tprop.Prop[i] = p\n\t\tprop.order[i] = i\n\t\tif debug {\n\t\t\tprint(i, \" \", f.Name, \" \", t.String(), \" \")\n\t\t\tif p.Tag > 0 {\n\t\t\t\tprint(p.String())\n\t\t\t}\n\t\t\tprint(\"\\n\")\n\t\t}\n\t}\n\n\t// Re-order prop.order.\n\tsort.Sort(prop)\n\n\tvar oots []interface{}\n\tswitch m := reflect.Zero(reflect.PtrTo(t)).Interface().(type) {\n\tcase oneofFuncsIface:\n\t\t_, _, _, oots = m.XXX_OneofFuncs()\n\tcase oneofWrappersIface:\n\t\toots = m.XXX_OneofWrappers()\n\t}\n\tif len(oots) > 0 {\n\t\t// Interpret oneof metadata.\n\t\tprop.OneofTypes = make(map[string]*OneofProperties)\n\t\tfor _, oot := range oots {\n\t\t\toop := &OneofProperties{\n\t\t\t\tType: reflect.ValueOf(oot).Type(), // *T\n\t\t\t\tProp: new(Properties),\n\t\t\t}\n\t\t\tsft := oop.Type.Elem().Field(0)\n\t\t\toop.Prop.Name = sft.Name\n\t\t\toop.Prop.Parse(sft.Tag.Get(\"protobuf\"))\n\t\t\t// There will be exactly one interface field that\n\t\t\t// this new value is assignable to.\n\t\t\tfor i := 0; i < t.NumField(); i++ {\n\t\t\t\tf := t.Field(i)\n\t\t\t\tif f.Type.Kind() != reflect.Interface {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif !oop.Type.AssignableTo(f.Type) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\toop.Field = i\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tprop.OneofTypes[oop.Prop.OrigName] = oop\n\t\t}\n\t}\n\n\t// build required counts\n\t// build tags\n\treqCount := 0\n\tprop.decoderOrigNames = make(map[string]int)\n\tfor i, p := range prop.Prop {\n\t\tif strings.HasPrefix(p.Name, \"XXX_\") {\n\t\t\t// Internal fields should not appear in tags/origNames maps.\n\t\t\t// They are handled specially when encoding and decoding.\n\t\t\tcontinue\n\t\t}\n\t\tif p.Required {\n\t\t\treqCount++\n\t\t}\n\t\tprop.decoderTags.put(p.Tag, i)\n\t\tprop.decoderOrigNames[p.OrigName] = i\n\t}\n\tprop.reqCount = reqCount\n\n\treturn prop\n}\n\n// A global registry of enum types.\n// The generated code will register the generated maps by calling RegisterEnum.\n\nvar enumValueMaps = make(map[string]map[string]int32)\n\n// RegisterEnum is called from the generated code to install the enum descriptor\n// maps into the global table to aid parsing text format protocol buffers.\nfunc RegisterEnum(typeName string, unusedNameMap map[int32]string, valueMap map[string]int32) {\n\tif _, ok := enumValueMaps[typeName]; ok {\n\t\tpanic(\"proto: duplicate enum registered: \" + typeName)\n\t}\n\tenumValueMaps[typeName] = valueMap\n}\n\n// EnumValueMap returns the mapping from names to integers of the\n// enum type enumType, or a nil if not found.\nfunc EnumValueMap(enumType string) map[string]int32 {\n\treturn enumValueMaps[enumType]\n}\n\n// A registry of all linked message types.\n// The string is a fully-qualified proto name (\"pkg.Message\").\nvar (\n\tprotoTypedNils = make(map[string]Message)      // a map from proto names to typed nil pointers\n\tprotoMapTypes  = make(map[string]reflect.Type) // a map from proto names to map types\n\trevProtoTypes  = make(map[reflect.Type]string)\n)\n\n// RegisterType is called from generated code and maps from the fully qualified\n// proto name to the type (pointer to struct) of the protocol buffer.\nfunc RegisterType(x Message, name string) {\n\tif _, ok := protoTypedNils[name]; ok {\n\t\t// TODO: Some day, make this a panic.\n\t\tlog.Printf(\"proto: duplicate proto type registered: %s\", name)\n\t\treturn\n\t}\n\tt := reflect.TypeOf(x)\n\tif v := reflect.ValueOf(x); v.Kind() == reflect.Ptr && v.Pointer() == 0 {\n\t\t// Generated code always calls RegisterType with nil x.\n\t\t// This check is just for extra safety.\n\t\tprotoTypedNils[name] = x\n\t} else {\n\t\tprotoTypedNils[name] = reflect.Zero(t).Interface().(Message)\n\t}\n\trevProtoTypes[t] = name\n}\n\n// RegisterMapType is called from generated code and maps from the fully qualified\n// proto name to the native map type of the proto map definition.\nfunc RegisterMapType(x interface{}, name string) {\n\tif reflect.TypeOf(x).Kind() != reflect.Map {\n\t\tpanic(fmt.Sprintf(\"RegisterMapType(%T, %q); want map\", x, name))\n\t}\n\tif _, ok := protoMapTypes[name]; ok {\n\t\tlog.Printf(\"proto: duplicate proto type registered: %s\", name)\n\t\treturn\n\t}\n\tt := reflect.TypeOf(x)\n\tprotoMapTypes[name] = t\n\trevProtoTypes[t] = name\n}\n\n// MessageName returns the fully-qualified proto name for the given message type.\nfunc MessageName(x Message) string {\n\ttype xname interface {\n\t\tXXX_MessageName() string\n\t}\n\tif m, ok := x.(xname); ok {\n\t\treturn m.XXX_MessageName()\n\t}\n\treturn revProtoTypes[reflect.TypeOf(x)]\n}\n\n// MessageType returns the message type (pointer to struct) for a named message.\n// The type is not guaranteed to implement proto.Message if the name refers to a\n// map entry.\nfunc MessageType(name string) reflect.Type {\n\tif t, ok := protoTypedNils[name]; ok {\n\t\treturn reflect.TypeOf(t)\n\t}\n\treturn protoMapTypes[name]\n}\n\n// A registry of all linked proto files.\nvar (\n\tprotoFiles = make(map[string][]byte) // file name => fileDescriptor\n)\n\n// RegisterFile is called from generated code and maps from the\n// full file name of a .proto file to its compressed FileDescriptorProto.\nfunc RegisterFile(filename string, fileDescriptor []byte) {\n\tprotoFiles[filename] = fileDescriptor\n}\n\n// FileDescriptor returns the compressed FileDescriptorProto for a .proto file.\nfunc FileDescriptor(filename string) []byte { return protoFiles[filename] }\n"
  },
  {
    "path": "vendor/github.com/golang/protobuf/proto/table_marshal.go",
    "content": "// Go support for Protocol Buffers - Google's data interchange format\n//\n// Copyright 2016 The Go Authors.  All rights reserved.\n// https://github.com/golang/protobuf\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\npackage proto\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"math\"\n\t\"reflect\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\t\"sync/atomic\"\n\t\"unicode/utf8\"\n)\n\n// a sizer takes a pointer to a field and the size of its tag, computes the size of\n// the encoded data.\ntype sizer func(pointer, int) int\n\n// a marshaler takes a byte slice, a pointer to a field, and its tag (in wire format),\n// marshals the field to the end of the slice, returns the slice and error (if any).\ntype marshaler func(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error)\n\n// marshalInfo is the information used for marshaling a message.\ntype marshalInfo struct {\n\ttyp          reflect.Type\n\tfields       []*marshalFieldInfo\n\tunrecognized field                      // offset of XXX_unrecognized\n\textensions   field                      // offset of XXX_InternalExtensions\n\tv1extensions field                      // offset of XXX_extensions\n\tsizecache    field                      // offset of XXX_sizecache\n\tinitialized  int32                      // 0 -- only typ is set, 1 -- fully initialized\n\tmessageset   bool                       // uses message set wire format\n\thasmarshaler bool                       // has custom marshaler\n\tsync.RWMutex                            // protect extElems map, also for initialization\n\textElems     map[int32]*marshalElemInfo // info of extension elements\n}\n\n// marshalFieldInfo is the information used for marshaling a field of a message.\ntype marshalFieldInfo struct {\n\tfield      field\n\twiretag    uint64 // tag in wire format\n\ttagsize    int    // size of tag in wire format\n\tsizer      sizer\n\tmarshaler  marshaler\n\tisPointer  bool\n\trequired   bool                              // field is required\n\tname       string                            // name of the field, for error reporting\n\toneofElems map[reflect.Type]*marshalElemInfo // info of oneof elements\n}\n\n// marshalElemInfo is the information used for marshaling an extension or oneof element.\ntype marshalElemInfo struct {\n\twiretag   uint64 // tag in wire format\n\ttagsize   int    // size of tag in wire format\n\tsizer     sizer\n\tmarshaler marshaler\n\tisptr     bool // elem is pointer typed, thus interface of this type is a direct interface (extension only)\n\tderef     bool // dereference the pointer before operating on it; implies isptr\n}\n\nvar (\n\tmarshalInfoMap  = map[reflect.Type]*marshalInfo{}\n\tmarshalInfoLock sync.Mutex\n)\n\n// getMarshalInfo returns the information to marshal a given type of message.\n// The info it returns may not necessarily initialized.\n// t is the type of the message (NOT the pointer to it).\nfunc getMarshalInfo(t reflect.Type) *marshalInfo {\n\tmarshalInfoLock.Lock()\n\tu, ok := marshalInfoMap[t]\n\tif !ok {\n\t\tu = &marshalInfo{typ: t}\n\t\tmarshalInfoMap[t] = u\n\t}\n\tmarshalInfoLock.Unlock()\n\treturn u\n}\n\n// Size is the entry point from generated code,\n// and should be ONLY called by generated code.\n// It computes the size of encoded data of msg.\n// a is a pointer to a place to store cached marshal info.\nfunc (a *InternalMessageInfo) Size(msg Message) int {\n\tu := getMessageMarshalInfo(msg, a)\n\tptr := toPointer(&msg)\n\tif ptr.isNil() {\n\t\t// We get here if msg is a typed nil ((*SomeMessage)(nil)),\n\t\t// so it satisfies the interface, and msg == nil wouldn't\n\t\t// catch it. We don't want crash in this case.\n\t\treturn 0\n\t}\n\treturn u.size(ptr)\n}\n\n// Marshal is the entry point from generated code,\n// and should be ONLY called by generated code.\n// It marshals msg to the end of b.\n// a is a pointer to a place to store cached marshal info.\nfunc (a *InternalMessageInfo) Marshal(b []byte, msg Message, deterministic bool) ([]byte, error) {\n\tu := getMessageMarshalInfo(msg, a)\n\tptr := toPointer(&msg)\n\tif ptr.isNil() {\n\t\t// We get here if msg is a typed nil ((*SomeMessage)(nil)),\n\t\t// so it satisfies the interface, and msg == nil wouldn't\n\t\t// catch it. We don't want crash in this case.\n\t\treturn b, ErrNil\n\t}\n\treturn u.marshal(b, ptr, deterministic)\n}\n\nfunc getMessageMarshalInfo(msg interface{}, a *InternalMessageInfo) *marshalInfo {\n\t// u := a.marshal, but atomically.\n\t// We use an atomic here to ensure memory consistency.\n\tu := atomicLoadMarshalInfo(&a.marshal)\n\tif u == nil {\n\t\t// Get marshal information from type of message.\n\t\tt := reflect.ValueOf(msg).Type()\n\t\tif t.Kind() != reflect.Ptr {\n\t\t\tpanic(fmt.Sprintf(\"cannot handle non-pointer message type %v\", t))\n\t\t}\n\t\tu = getMarshalInfo(t.Elem())\n\t\t// Store it in the cache for later users.\n\t\t// a.marshal = u, but atomically.\n\t\tatomicStoreMarshalInfo(&a.marshal, u)\n\t}\n\treturn u\n}\n\n// size is the main function to compute the size of the encoded data of a message.\n// ptr is the pointer to the message.\nfunc (u *marshalInfo) size(ptr pointer) int {\n\tif atomic.LoadInt32(&u.initialized) == 0 {\n\t\tu.computeMarshalInfo()\n\t}\n\n\t// If the message can marshal itself, let it do it, for compatibility.\n\t// NOTE: This is not efficient.\n\tif u.hasmarshaler {\n\t\tm := ptr.asPointerTo(u.typ).Interface().(Marshaler)\n\t\tb, _ := m.Marshal()\n\t\treturn len(b)\n\t}\n\n\tn := 0\n\tfor _, f := range u.fields {\n\t\tif f.isPointer && ptr.offset(f.field).getPointer().isNil() {\n\t\t\t// nil pointer always marshals to nothing\n\t\t\tcontinue\n\t\t}\n\t\tn += f.sizer(ptr.offset(f.field), f.tagsize)\n\t}\n\tif u.extensions.IsValid() {\n\t\te := ptr.offset(u.extensions).toExtensions()\n\t\tif u.messageset {\n\t\t\tn += u.sizeMessageSet(e)\n\t\t} else {\n\t\t\tn += u.sizeExtensions(e)\n\t\t}\n\t}\n\tif u.v1extensions.IsValid() {\n\t\tm := *ptr.offset(u.v1extensions).toOldExtensions()\n\t\tn += u.sizeV1Extensions(m)\n\t}\n\tif u.unrecognized.IsValid() {\n\t\ts := *ptr.offset(u.unrecognized).toBytes()\n\t\tn += len(s)\n\t}\n\t// cache the result for use in marshal\n\tif u.sizecache.IsValid() {\n\t\tatomic.StoreInt32(ptr.offset(u.sizecache).toInt32(), int32(n))\n\t}\n\treturn n\n}\n\n// cachedsize gets the size from cache. If there is no cache (i.e. message is not generated),\n// fall back to compute the size.\nfunc (u *marshalInfo) cachedsize(ptr pointer) int {\n\tif u.sizecache.IsValid() {\n\t\treturn int(atomic.LoadInt32(ptr.offset(u.sizecache).toInt32()))\n\t}\n\treturn u.size(ptr)\n}\n\n// marshal is the main function to marshal a message. It takes a byte slice and appends\n// the encoded data to the end of the slice, returns the slice and error (if any).\n// ptr is the pointer to the message.\n// If deterministic is true, map is marshaled in deterministic order.\nfunc (u *marshalInfo) marshal(b []byte, ptr pointer, deterministic bool) ([]byte, error) {\n\tif atomic.LoadInt32(&u.initialized) == 0 {\n\t\tu.computeMarshalInfo()\n\t}\n\n\t// If the message can marshal itself, let it do it, for compatibility.\n\t// NOTE: This is not efficient.\n\tif u.hasmarshaler {\n\t\tm := ptr.asPointerTo(u.typ).Interface().(Marshaler)\n\t\tb1, err := m.Marshal()\n\t\tb = append(b, b1...)\n\t\treturn b, err\n\t}\n\n\tvar err, errLater error\n\t// The old marshaler encodes extensions at beginning.\n\tif u.extensions.IsValid() {\n\t\te := ptr.offset(u.extensions).toExtensions()\n\t\tif u.messageset {\n\t\t\tb, err = u.appendMessageSet(b, e, deterministic)\n\t\t} else {\n\t\t\tb, err = u.appendExtensions(b, e, deterministic)\n\t\t}\n\t\tif err != nil {\n\t\t\treturn b, err\n\t\t}\n\t}\n\tif u.v1extensions.IsValid() {\n\t\tm := *ptr.offset(u.v1extensions).toOldExtensions()\n\t\tb, err = u.appendV1Extensions(b, m, deterministic)\n\t\tif err != nil {\n\t\t\treturn b, err\n\t\t}\n\t}\n\tfor _, f := range u.fields {\n\t\tif f.required {\n\t\t\tif ptr.offset(f.field).getPointer().isNil() {\n\t\t\t\t// Required field is not set.\n\t\t\t\t// We record the error but keep going, to give a complete marshaling.\n\t\t\t\tif errLater == nil {\n\t\t\t\t\terrLater = &RequiredNotSetError{f.name}\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\t\tif f.isPointer && ptr.offset(f.field).getPointer().isNil() {\n\t\t\t// nil pointer always marshals to nothing\n\t\t\tcontinue\n\t\t}\n\t\tb, err = f.marshaler(b, ptr.offset(f.field), f.wiretag, deterministic)\n\t\tif err != nil {\n\t\t\tif err1, ok := err.(*RequiredNotSetError); ok {\n\t\t\t\t// Required field in submessage is not set.\n\t\t\t\t// We record the error but keep going, to give a complete marshaling.\n\t\t\t\tif errLater == nil {\n\t\t\t\t\terrLater = &RequiredNotSetError{f.name + \".\" + err1.field}\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif err == errRepeatedHasNil {\n\t\t\t\terr = errors.New(\"proto: repeated field \" + f.name + \" has nil element\")\n\t\t\t}\n\t\t\tif err == errInvalidUTF8 {\n\t\t\t\tif errLater == nil {\n\t\t\t\t\tfullName := revProtoTypes[reflect.PtrTo(u.typ)] + \".\" + f.name\n\t\t\t\t\terrLater = &invalidUTF8Error{fullName}\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn b, err\n\t\t}\n\t}\n\tif u.unrecognized.IsValid() {\n\t\ts := *ptr.offset(u.unrecognized).toBytes()\n\t\tb = append(b, s...)\n\t}\n\treturn b, errLater\n}\n\n// computeMarshalInfo initializes the marshal info.\nfunc (u *marshalInfo) computeMarshalInfo() {\n\tu.Lock()\n\tdefer u.Unlock()\n\tif u.initialized != 0 { // non-atomic read is ok as it is protected by the lock\n\t\treturn\n\t}\n\n\tt := u.typ\n\tu.unrecognized = invalidField\n\tu.extensions = invalidField\n\tu.v1extensions = invalidField\n\tu.sizecache = invalidField\n\n\t// If the message can marshal itself, let it do it, for compatibility.\n\t// NOTE: This is not efficient.\n\tif reflect.PtrTo(t).Implements(marshalerType) {\n\t\tu.hasmarshaler = true\n\t\tatomic.StoreInt32(&u.initialized, 1)\n\t\treturn\n\t}\n\n\t// get oneof implementers\n\tvar oneofImplementers []interface{}\n\tswitch m := reflect.Zero(reflect.PtrTo(t)).Interface().(type) {\n\tcase oneofFuncsIface:\n\t\t_, _, _, oneofImplementers = m.XXX_OneofFuncs()\n\tcase oneofWrappersIface:\n\t\toneofImplementers = m.XXX_OneofWrappers()\n\t}\n\n\tn := t.NumField()\n\n\t// deal with XXX fields first\n\tfor i := 0; i < t.NumField(); i++ {\n\t\tf := t.Field(i)\n\t\tif !strings.HasPrefix(f.Name, \"XXX_\") {\n\t\t\tcontinue\n\t\t}\n\t\tswitch f.Name {\n\t\tcase \"XXX_sizecache\":\n\t\t\tu.sizecache = toField(&f)\n\t\tcase \"XXX_unrecognized\":\n\t\t\tu.unrecognized = toField(&f)\n\t\tcase \"XXX_InternalExtensions\":\n\t\t\tu.extensions = toField(&f)\n\t\t\tu.messageset = f.Tag.Get(\"protobuf_messageset\") == \"1\"\n\t\tcase \"XXX_extensions\":\n\t\t\tu.v1extensions = toField(&f)\n\t\tcase \"XXX_NoUnkeyedLiteral\":\n\t\t\t// nothing to do\n\t\tdefault:\n\t\t\tpanic(\"unknown XXX field: \" + f.Name)\n\t\t}\n\t\tn--\n\t}\n\n\t// normal fields\n\tfields := make([]marshalFieldInfo, n) // batch allocation\n\tu.fields = make([]*marshalFieldInfo, 0, n)\n\tfor i, j := 0, 0; i < t.NumField(); i++ {\n\t\tf := t.Field(i)\n\n\t\tif strings.HasPrefix(f.Name, \"XXX_\") {\n\t\t\tcontinue\n\t\t}\n\t\tfield := &fields[j]\n\t\tj++\n\t\tfield.name = f.Name\n\t\tu.fields = append(u.fields, field)\n\t\tif f.Tag.Get(\"protobuf_oneof\") != \"\" {\n\t\t\tfield.computeOneofFieldInfo(&f, oneofImplementers)\n\t\t\tcontinue\n\t\t}\n\t\tif f.Tag.Get(\"protobuf\") == \"\" {\n\t\t\t// field has no tag (not in generated message), ignore it\n\t\t\tu.fields = u.fields[:len(u.fields)-1]\n\t\t\tj--\n\t\t\tcontinue\n\t\t}\n\t\tfield.computeMarshalFieldInfo(&f)\n\t}\n\n\t// fields are marshaled in tag order on the wire.\n\tsort.Sort(byTag(u.fields))\n\n\tatomic.StoreInt32(&u.initialized, 1)\n}\n\n// helper for sorting fields by tag\ntype byTag []*marshalFieldInfo\n\nfunc (a byTag) Len() int           { return len(a) }\nfunc (a byTag) Swap(i, j int)      { a[i], a[j] = a[j], a[i] }\nfunc (a byTag) Less(i, j int) bool { return a[i].wiretag < a[j].wiretag }\n\n// getExtElemInfo returns the information to marshal an extension element.\n// The info it returns is initialized.\nfunc (u *marshalInfo) getExtElemInfo(desc *ExtensionDesc) *marshalElemInfo {\n\t// get from cache first\n\tu.RLock()\n\te, ok := u.extElems[desc.Field]\n\tu.RUnlock()\n\tif ok {\n\t\treturn e\n\t}\n\n\tt := reflect.TypeOf(desc.ExtensionType) // pointer or slice to basic type or struct\n\ttags := strings.Split(desc.Tag, \",\")\n\ttag, err := strconv.Atoi(tags[1])\n\tif err != nil {\n\t\tpanic(\"tag is not an integer\")\n\t}\n\twt := wiretype(tags[0])\n\tif t.Kind() == reflect.Ptr && t.Elem().Kind() != reflect.Struct {\n\t\tt = t.Elem()\n\t}\n\tsizer, marshaler := typeMarshaler(t, tags, false, false)\n\tvar deref bool\n\tif t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8 {\n\t\tt = reflect.PtrTo(t)\n\t\tderef = true\n\t}\n\te = &marshalElemInfo{\n\t\twiretag:   uint64(tag)<<3 | wt,\n\t\ttagsize:   SizeVarint(uint64(tag) << 3),\n\t\tsizer:     sizer,\n\t\tmarshaler: marshaler,\n\t\tisptr:     t.Kind() == reflect.Ptr,\n\t\tderef:     deref,\n\t}\n\n\t// update cache\n\tu.Lock()\n\tif u.extElems == nil {\n\t\tu.extElems = make(map[int32]*marshalElemInfo)\n\t}\n\tu.extElems[desc.Field] = e\n\tu.Unlock()\n\treturn e\n}\n\n// computeMarshalFieldInfo fills up the information to marshal a field.\nfunc (fi *marshalFieldInfo) computeMarshalFieldInfo(f *reflect.StructField) {\n\t// parse protobuf tag of the field.\n\t// tag has format of \"bytes,49,opt,name=foo,def=hello!\"\n\ttags := strings.Split(f.Tag.Get(\"protobuf\"), \",\")\n\tif tags[0] == \"\" {\n\t\treturn\n\t}\n\ttag, err := strconv.Atoi(tags[1])\n\tif err != nil {\n\t\tpanic(\"tag is not an integer\")\n\t}\n\twt := wiretype(tags[0])\n\tif tags[2] == \"req\" {\n\t\tfi.required = true\n\t}\n\tfi.setTag(f, tag, wt)\n\tfi.setMarshaler(f, tags)\n}\n\nfunc (fi *marshalFieldInfo) computeOneofFieldInfo(f *reflect.StructField, oneofImplementers []interface{}) {\n\tfi.field = toField(f)\n\tfi.wiretag = math.MaxInt32 // Use a large tag number, make oneofs sorted at the end. This tag will not appear on the wire.\n\tfi.isPointer = true\n\tfi.sizer, fi.marshaler = makeOneOfMarshaler(fi, f)\n\tfi.oneofElems = make(map[reflect.Type]*marshalElemInfo)\n\n\tityp := f.Type // interface type\n\tfor _, o := range oneofImplementers {\n\t\tt := reflect.TypeOf(o)\n\t\tif !t.Implements(ityp) {\n\t\t\tcontinue\n\t\t}\n\t\tsf := t.Elem().Field(0) // oneof implementer is a struct with a single field\n\t\ttags := strings.Split(sf.Tag.Get(\"protobuf\"), \",\")\n\t\ttag, err := strconv.Atoi(tags[1])\n\t\tif err != nil {\n\t\t\tpanic(\"tag is not an integer\")\n\t\t}\n\t\twt := wiretype(tags[0])\n\t\tsizer, marshaler := typeMarshaler(sf.Type, tags, false, true) // oneof should not omit any zero value\n\t\tfi.oneofElems[t.Elem()] = &marshalElemInfo{\n\t\t\twiretag:   uint64(tag)<<3 | wt,\n\t\t\ttagsize:   SizeVarint(uint64(tag) << 3),\n\t\t\tsizer:     sizer,\n\t\t\tmarshaler: marshaler,\n\t\t}\n\t}\n}\n\n// wiretype returns the wire encoding of the type.\nfunc wiretype(encoding string) uint64 {\n\tswitch encoding {\n\tcase \"fixed32\":\n\t\treturn WireFixed32\n\tcase \"fixed64\":\n\t\treturn WireFixed64\n\tcase \"varint\", \"zigzag32\", \"zigzag64\":\n\t\treturn WireVarint\n\tcase \"bytes\":\n\t\treturn WireBytes\n\tcase \"group\":\n\t\treturn WireStartGroup\n\t}\n\tpanic(\"unknown wire type \" + encoding)\n}\n\n// setTag fills up the tag (in wire format) and its size in the info of a field.\nfunc (fi *marshalFieldInfo) setTag(f *reflect.StructField, tag int, wt uint64) {\n\tfi.field = toField(f)\n\tfi.wiretag = uint64(tag)<<3 | wt\n\tfi.tagsize = SizeVarint(uint64(tag) << 3)\n}\n\n// setMarshaler fills up the sizer and marshaler in the info of a field.\nfunc (fi *marshalFieldInfo) setMarshaler(f *reflect.StructField, tags []string) {\n\tswitch f.Type.Kind() {\n\tcase reflect.Map:\n\t\t// map field\n\t\tfi.isPointer = true\n\t\tfi.sizer, fi.marshaler = makeMapMarshaler(f)\n\t\treturn\n\tcase reflect.Ptr, reflect.Slice:\n\t\tfi.isPointer = true\n\t}\n\tfi.sizer, fi.marshaler = typeMarshaler(f.Type, tags, true, false)\n}\n\n// typeMarshaler returns the sizer and marshaler of a given field.\n// t is the type of the field.\n// tags is the generated \"protobuf\" tag of the field.\n// If nozero is true, zero value is not marshaled to the wire.\n// If oneof is true, it is a oneof field.\nfunc typeMarshaler(t reflect.Type, tags []string, nozero, oneof bool) (sizer, marshaler) {\n\tencoding := tags[0]\n\n\tpointer := false\n\tslice := false\n\tif t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8 {\n\t\tslice = true\n\t\tt = t.Elem()\n\t}\n\tif t.Kind() == reflect.Ptr {\n\t\tpointer = true\n\t\tt = t.Elem()\n\t}\n\n\tpacked := false\n\tproto3 := false\n\tvalidateUTF8 := true\n\tfor i := 2; i < len(tags); i++ {\n\t\tif tags[i] == \"packed\" {\n\t\t\tpacked = true\n\t\t}\n\t\tif tags[i] == \"proto3\" {\n\t\t\tproto3 = true\n\t\t}\n\t}\n\tvalidateUTF8 = validateUTF8 && proto3\n\n\tswitch t.Kind() {\n\tcase reflect.Bool:\n\t\tif pointer {\n\t\t\treturn sizeBoolPtr, appendBoolPtr\n\t\t}\n\t\tif slice {\n\t\t\tif packed {\n\t\t\t\treturn sizeBoolPackedSlice, appendBoolPackedSlice\n\t\t\t}\n\t\t\treturn sizeBoolSlice, appendBoolSlice\n\t\t}\n\t\tif nozero {\n\t\t\treturn sizeBoolValueNoZero, appendBoolValueNoZero\n\t\t}\n\t\treturn sizeBoolValue, appendBoolValue\n\tcase reflect.Uint32:\n\t\tswitch encoding {\n\t\tcase \"fixed32\":\n\t\t\tif pointer {\n\t\t\t\treturn sizeFixed32Ptr, appendFixed32Ptr\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\tif packed {\n\t\t\t\t\treturn sizeFixed32PackedSlice, appendFixed32PackedSlice\n\t\t\t\t}\n\t\t\t\treturn sizeFixed32Slice, appendFixed32Slice\n\t\t\t}\n\t\t\tif nozero {\n\t\t\t\treturn sizeFixed32ValueNoZero, appendFixed32ValueNoZero\n\t\t\t}\n\t\t\treturn sizeFixed32Value, appendFixed32Value\n\t\tcase \"varint\":\n\t\t\tif pointer {\n\t\t\t\treturn sizeVarint32Ptr, appendVarint32Ptr\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\tif packed {\n\t\t\t\t\treturn sizeVarint32PackedSlice, appendVarint32PackedSlice\n\t\t\t\t}\n\t\t\t\treturn sizeVarint32Slice, appendVarint32Slice\n\t\t\t}\n\t\t\tif nozero {\n\t\t\t\treturn sizeVarint32ValueNoZero, appendVarint32ValueNoZero\n\t\t\t}\n\t\t\treturn sizeVarint32Value, appendVarint32Value\n\t\t}\n\tcase reflect.Int32:\n\t\tswitch encoding {\n\t\tcase \"fixed32\":\n\t\t\tif pointer {\n\t\t\t\treturn sizeFixedS32Ptr, appendFixedS32Ptr\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\tif packed {\n\t\t\t\t\treturn sizeFixedS32PackedSlice, appendFixedS32PackedSlice\n\t\t\t\t}\n\t\t\t\treturn sizeFixedS32Slice, appendFixedS32Slice\n\t\t\t}\n\t\t\tif nozero {\n\t\t\t\treturn sizeFixedS32ValueNoZero, appendFixedS32ValueNoZero\n\t\t\t}\n\t\t\treturn sizeFixedS32Value, appendFixedS32Value\n\t\tcase \"varint\":\n\t\t\tif pointer {\n\t\t\t\treturn sizeVarintS32Ptr, appendVarintS32Ptr\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\tif packed {\n\t\t\t\t\treturn sizeVarintS32PackedSlice, appendVarintS32PackedSlice\n\t\t\t\t}\n\t\t\t\treturn sizeVarintS32Slice, appendVarintS32Slice\n\t\t\t}\n\t\t\tif nozero {\n\t\t\t\treturn sizeVarintS32ValueNoZero, appendVarintS32ValueNoZero\n\t\t\t}\n\t\t\treturn sizeVarintS32Value, appendVarintS32Value\n\t\tcase \"zigzag32\":\n\t\t\tif pointer {\n\t\t\t\treturn sizeZigzag32Ptr, appendZigzag32Ptr\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\tif packed {\n\t\t\t\t\treturn sizeZigzag32PackedSlice, appendZigzag32PackedSlice\n\t\t\t\t}\n\t\t\t\treturn sizeZigzag32Slice, appendZigzag32Slice\n\t\t\t}\n\t\t\tif nozero {\n\t\t\t\treturn sizeZigzag32ValueNoZero, appendZigzag32ValueNoZero\n\t\t\t}\n\t\t\treturn sizeZigzag32Value, appendZigzag32Value\n\t\t}\n\tcase reflect.Uint64:\n\t\tswitch encoding {\n\t\tcase \"fixed64\":\n\t\t\tif pointer {\n\t\t\t\treturn sizeFixed64Ptr, appendFixed64Ptr\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\tif packed {\n\t\t\t\t\treturn sizeFixed64PackedSlice, appendFixed64PackedSlice\n\t\t\t\t}\n\t\t\t\treturn sizeFixed64Slice, appendFixed64Slice\n\t\t\t}\n\t\t\tif nozero {\n\t\t\t\treturn sizeFixed64ValueNoZero, appendFixed64ValueNoZero\n\t\t\t}\n\t\t\treturn sizeFixed64Value, appendFixed64Value\n\t\tcase \"varint\":\n\t\t\tif pointer {\n\t\t\t\treturn sizeVarint64Ptr, appendVarint64Ptr\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\tif packed {\n\t\t\t\t\treturn sizeVarint64PackedSlice, appendVarint64PackedSlice\n\t\t\t\t}\n\t\t\t\treturn sizeVarint64Slice, appendVarint64Slice\n\t\t\t}\n\t\t\tif nozero {\n\t\t\t\treturn sizeVarint64ValueNoZero, appendVarint64ValueNoZero\n\t\t\t}\n\t\t\treturn sizeVarint64Value, appendVarint64Value\n\t\t}\n\tcase reflect.Int64:\n\t\tswitch encoding {\n\t\tcase \"fixed64\":\n\t\t\tif pointer {\n\t\t\t\treturn sizeFixedS64Ptr, appendFixedS64Ptr\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\tif packed {\n\t\t\t\t\treturn sizeFixedS64PackedSlice, appendFixedS64PackedSlice\n\t\t\t\t}\n\t\t\t\treturn sizeFixedS64Slice, appendFixedS64Slice\n\t\t\t}\n\t\t\tif nozero {\n\t\t\t\treturn sizeFixedS64ValueNoZero, appendFixedS64ValueNoZero\n\t\t\t}\n\t\t\treturn sizeFixedS64Value, appendFixedS64Value\n\t\tcase \"varint\":\n\t\t\tif pointer {\n\t\t\t\treturn sizeVarintS64Ptr, appendVarintS64Ptr\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\tif packed {\n\t\t\t\t\treturn sizeVarintS64PackedSlice, appendVarintS64PackedSlice\n\t\t\t\t}\n\t\t\t\treturn sizeVarintS64Slice, appendVarintS64Slice\n\t\t\t}\n\t\t\tif nozero {\n\t\t\t\treturn sizeVarintS64ValueNoZero, appendVarintS64ValueNoZero\n\t\t\t}\n\t\t\treturn sizeVarintS64Value, appendVarintS64Value\n\t\tcase \"zigzag64\":\n\t\t\tif pointer {\n\t\t\t\treturn sizeZigzag64Ptr, appendZigzag64Ptr\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\tif packed {\n\t\t\t\t\treturn sizeZigzag64PackedSlice, appendZigzag64PackedSlice\n\t\t\t\t}\n\t\t\t\treturn sizeZigzag64Slice, appendZigzag64Slice\n\t\t\t}\n\t\t\tif nozero {\n\t\t\t\treturn sizeZigzag64ValueNoZero, appendZigzag64ValueNoZero\n\t\t\t}\n\t\t\treturn sizeZigzag64Value, appendZigzag64Value\n\t\t}\n\tcase reflect.Float32:\n\t\tif pointer {\n\t\t\treturn sizeFloat32Ptr, appendFloat32Ptr\n\t\t}\n\t\tif slice {\n\t\t\tif packed {\n\t\t\t\treturn sizeFloat32PackedSlice, appendFloat32PackedSlice\n\t\t\t}\n\t\t\treturn sizeFloat32Slice, appendFloat32Slice\n\t\t}\n\t\tif nozero {\n\t\t\treturn sizeFloat32ValueNoZero, appendFloat32ValueNoZero\n\t\t}\n\t\treturn sizeFloat32Value, appendFloat32Value\n\tcase reflect.Float64:\n\t\tif pointer {\n\t\t\treturn sizeFloat64Ptr, appendFloat64Ptr\n\t\t}\n\t\tif slice {\n\t\t\tif packed {\n\t\t\t\treturn sizeFloat64PackedSlice, appendFloat64PackedSlice\n\t\t\t}\n\t\t\treturn sizeFloat64Slice, appendFloat64Slice\n\t\t}\n\t\tif nozero {\n\t\t\treturn sizeFloat64ValueNoZero, appendFloat64ValueNoZero\n\t\t}\n\t\treturn sizeFloat64Value, appendFloat64Value\n\tcase reflect.String:\n\t\tif validateUTF8 {\n\t\t\tif pointer {\n\t\t\t\treturn sizeStringPtr, appendUTF8StringPtr\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\treturn sizeStringSlice, appendUTF8StringSlice\n\t\t\t}\n\t\t\tif nozero {\n\t\t\t\treturn sizeStringValueNoZero, appendUTF8StringValueNoZero\n\t\t\t}\n\t\t\treturn sizeStringValue, appendUTF8StringValue\n\t\t}\n\t\tif pointer {\n\t\t\treturn sizeStringPtr, appendStringPtr\n\t\t}\n\t\tif slice {\n\t\t\treturn sizeStringSlice, appendStringSlice\n\t\t}\n\t\tif nozero {\n\t\t\treturn sizeStringValueNoZero, appendStringValueNoZero\n\t\t}\n\t\treturn sizeStringValue, appendStringValue\n\tcase reflect.Slice:\n\t\tif slice {\n\t\t\treturn sizeBytesSlice, appendBytesSlice\n\t\t}\n\t\tif oneof {\n\t\t\t// Oneof bytes field may also have \"proto3\" tag.\n\t\t\t// We want to marshal it as a oneof field. Do this\n\t\t\t// check before the proto3 check.\n\t\t\treturn sizeBytesOneof, appendBytesOneof\n\t\t}\n\t\tif proto3 {\n\t\t\treturn sizeBytes3, appendBytes3\n\t\t}\n\t\treturn sizeBytes, appendBytes\n\tcase reflect.Struct:\n\t\tswitch encoding {\n\t\tcase \"group\":\n\t\t\tif slice {\n\t\t\t\treturn makeGroupSliceMarshaler(getMarshalInfo(t))\n\t\t\t}\n\t\t\treturn makeGroupMarshaler(getMarshalInfo(t))\n\t\tcase \"bytes\":\n\t\t\tif slice {\n\t\t\t\treturn makeMessageSliceMarshaler(getMarshalInfo(t))\n\t\t\t}\n\t\t\treturn makeMessageMarshaler(getMarshalInfo(t))\n\t\t}\n\t}\n\tpanic(fmt.Sprintf(\"unknown or mismatched type: type: %v, wire type: %v\", t, encoding))\n}\n\n// Below are functions to size/marshal a specific type of a field.\n// They are stored in the field's info, and called by function pointers.\n// They have type sizer or marshaler.\n\nfunc sizeFixed32Value(_ pointer, tagsize int) int {\n\treturn 4 + tagsize\n}\nfunc sizeFixed32ValueNoZero(ptr pointer, tagsize int) int {\n\tv := *ptr.toUint32()\n\tif v == 0 {\n\t\treturn 0\n\t}\n\treturn 4 + tagsize\n}\nfunc sizeFixed32Ptr(ptr pointer, tagsize int) int {\n\tp := *ptr.toUint32Ptr()\n\tif p == nil {\n\t\treturn 0\n\t}\n\treturn 4 + tagsize\n}\nfunc sizeFixed32Slice(ptr pointer, tagsize int) int {\n\ts := *ptr.toUint32Slice()\n\treturn (4 + tagsize) * len(s)\n}\nfunc sizeFixed32PackedSlice(ptr pointer, tagsize int) int {\n\ts := *ptr.toUint32Slice()\n\tif len(s) == 0 {\n\t\treturn 0\n\t}\n\treturn 4*len(s) + SizeVarint(uint64(4*len(s))) + tagsize\n}\nfunc sizeFixedS32Value(_ pointer, tagsize int) int {\n\treturn 4 + tagsize\n}\nfunc sizeFixedS32ValueNoZero(ptr pointer, tagsize int) int {\n\tv := *ptr.toInt32()\n\tif v == 0 {\n\t\treturn 0\n\t}\n\treturn 4 + tagsize\n}\nfunc sizeFixedS32Ptr(ptr pointer, tagsize int) int {\n\tp := ptr.getInt32Ptr()\n\tif p == nil {\n\t\treturn 0\n\t}\n\treturn 4 + tagsize\n}\nfunc sizeFixedS32Slice(ptr pointer, tagsize int) int {\n\ts := ptr.getInt32Slice()\n\treturn (4 + tagsize) * len(s)\n}\nfunc sizeFixedS32PackedSlice(ptr pointer, tagsize int) int {\n\ts := ptr.getInt32Slice()\n\tif len(s) == 0 {\n\t\treturn 0\n\t}\n\treturn 4*len(s) + SizeVarint(uint64(4*len(s))) + tagsize\n}\nfunc sizeFloat32Value(_ pointer, tagsize int) int {\n\treturn 4 + tagsize\n}\nfunc sizeFloat32ValueNoZero(ptr pointer, tagsize int) int {\n\tv := math.Float32bits(*ptr.toFloat32())\n\tif v == 0 {\n\t\treturn 0\n\t}\n\treturn 4 + tagsize\n}\nfunc sizeFloat32Ptr(ptr pointer, tagsize int) int {\n\tp := *ptr.toFloat32Ptr()\n\tif p == nil {\n\t\treturn 0\n\t}\n\treturn 4 + tagsize\n}\nfunc sizeFloat32Slice(ptr pointer, tagsize int) int {\n\ts := *ptr.toFloat32Slice()\n\treturn (4 + tagsize) * len(s)\n}\nfunc sizeFloat32PackedSlice(ptr pointer, tagsize int) int {\n\ts := *ptr.toFloat32Slice()\n\tif len(s) == 0 {\n\t\treturn 0\n\t}\n\treturn 4*len(s) + SizeVarint(uint64(4*len(s))) + tagsize\n}\nfunc sizeFixed64Value(_ pointer, tagsize int) int {\n\treturn 8 + tagsize\n}\nfunc sizeFixed64ValueNoZero(ptr pointer, tagsize int) int {\n\tv := *ptr.toUint64()\n\tif v == 0 {\n\t\treturn 0\n\t}\n\treturn 8 + tagsize\n}\nfunc sizeFixed64Ptr(ptr pointer, tagsize int) int {\n\tp := *ptr.toUint64Ptr()\n\tif p == nil {\n\t\treturn 0\n\t}\n\treturn 8 + tagsize\n}\nfunc sizeFixed64Slice(ptr pointer, tagsize int) int {\n\ts := *ptr.toUint64Slice()\n\treturn (8 + tagsize) * len(s)\n}\nfunc sizeFixed64PackedSlice(ptr pointer, tagsize int) int {\n\ts := *ptr.toUint64Slice()\n\tif len(s) == 0 {\n\t\treturn 0\n\t}\n\treturn 8*len(s) + SizeVarint(uint64(8*len(s))) + tagsize\n}\nfunc sizeFixedS64Value(_ pointer, tagsize int) int {\n\treturn 8 + tagsize\n}\nfunc sizeFixedS64ValueNoZero(ptr pointer, tagsize int) int {\n\tv := *ptr.toInt64()\n\tif v == 0 {\n\t\treturn 0\n\t}\n\treturn 8 + tagsize\n}\nfunc sizeFixedS64Ptr(ptr pointer, tagsize int) int {\n\tp := *ptr.toInt64Ptr()\n\tif p == nil {\n\t\treturn 0\n\t}\n\treturn 8 + tagsize\n}\nfunc sizeFixedS64Slice(ptr pointer, tagsize int) int {\n\ts := *ptr.toInt64Slice()\n\treturn (8 + tagsize) * len(s)\n}\nfunc sizeFixedS64PackedSlice(ptr pointer, tagsize int) int {\n\ts := *ptr.toInt64Slice()\n\tif len(s) == 0 {\n\t\treturn 0\n\t}\n\treturn 8*len(s) + SizeVarint(uint64(8*len(s))) + tagsize\n}\nfunc sizeFloat64Value(_ pointer, tagsize int) int {\n\treturn 8 + tagsize\n}\nfunc sizeFloat64ValueNoZero(ptr pointer, tagsize int) int {\n\tv := math.Float64bits(*ptr.toFloat64())\n\tif v == 0 {\n\t\treturn 0\n\t}\n\treturn 8 + tagsize\n}\nfunc sizeFloat64Ptr(ptr pointer, tagsize int) int {\n\tp := *ptr.toFloat64Ptr()\n\tif p == nil {\n\t\treturn 0\n\t}\n\treturn 8 + tagsize\n}\nfunc sizeFloat64Slice(ptr pointer, tagsize int) int {\n\ts := *ptr.toFloat64Slice()\n\treturn (8 + tagsize) * len(s)\n}\nfunc sizeFloat64PackedSlice(ptr pointer, tagsize int) int {\n\ts := *ptr.toFloat64Slice()\n\tif len(s) == 0 {\n\t\treturn 0\n\t}\n\treturn 8*len(s) + SizeVarint(uint64(8*len(s))) + tagsize\n}\nfunc sizeVarint32Value(ptr pointer, tagsize int) int {\n\tv := *ptr.toUint32()\n\treturn SizeVarint(uint64(v)) + tagsize\n}\nfunc sizeVarint32ValueNoZero(ptr pointer, tagsize int) int {\n\tv := *ptr.toUint32()\n\tif v == 0 {\n\t\treturn 0\n\t}\n\treturn SizeVarint(uint64(v)) + tagsize\n}\nfunc sizeVarint32Ptr(ptr pointer, tagsize int) int {\n\tp := *ptr.toUint32Ptr()\n\tif p == nil {\n\t\treturn 0\n\t}\n\treturn SizeVarint(uint64(*p)) + tagsize\n}\nfunc sizeVarint32Slice(ptr pointer, tagsize int) int {\n\ts := *ptr.toUint32Slice()\n\tn := 0\n\tfor _, v := range s {\n\t\tn += SizeVarint(uint64(v)) + tagsize\n\t}\n\treturn n\n}\nfunc sizeVarint32PackedSlice(ptr pointer, tagsize int) int {\n\ts := *ptr.toUint32Slice()\n\tif len(s) == 0 {\n\t\treturn 0\n\t}\n\tn := 0\n\tfor _, v := range s {\n\t\tn += SizeVarint(uint64(v))\n\t}\n\treturn n + SizeVarint(uint64(n)) + tagsize\n}\nfunc sizeVarintS32Value(ptr pointer, tagsize int) int {\n\tv := *ptr.toInt32()\n\treturn SizeVarint(uint64(v)) + tagsize\n}\nfunc sizeVarintS32ValueNoZero(ptr pointer, tagsize int) int {\n\tv := *ptr.toInt32()\n\tif v == 0 {\n\t\treturn 0\n\t}\n\treturn SizeVarint(uint64(v)) + tagsize\n}\nfunc sizeVarintS32Ptr(ptr pointer, tagsize int) int {\n\tp := ptr.getInt32Ptr()\n\tif p == nil {\n\t\treturn 0\n\t}\n\treturn SizeVarint(uint64(*p)) + tagsize\n}\nfunc sizeVarintS32Slice(ptr pointer, tagsize int) int {\n\ts := ptr.getInt32Slice()\n\tn := 0\n\tfor _, v := range s {\n\t\tn += SizeVarint(uint64(v)) + tagsize\n\t}\n\treturn n\n}\nfunc sizeVarintS32PackedSlice(ptr pointer, tagsize int) int {\n\ts := ptr.getInt32Slice()\n\tif len(s) == 0 {\n\t\treturn 0\n\t}\n\tn := 0\n\tfor _, v := range s {\n\t\tn += SizeVarint(uint64(v))\n\t}\n\treturn n + SizeVarint(uint64(n)) + tagsize\n}\nfunc sizeVarint64Value(ptr pointer, tagsize int) int {\n\tv := *ptr.toUint64()\n\treturn SizeVarint(v) + tagsize\n}\nfunc sizeVarint64ValueNoZero(ptr pointer, tagsize int) int {\n\tv := *ptr.toUint64()\n\tif v == 0 {\n\t\treturn 0\n\t}\n\treturn SizeVarint(v) + tagsize\n}\nfunc sizeVarint64Ptr(ptr pointer, tagsize int) int {\n\tp := *ptr.toUint64Ptr()\n\tif p == nil {\n\t\treturn 0\n\t}\n\treturn SizeVarint(*p) + tagsize\n}\nfunc sizeVarint64Slice(ptr pointer, tagsize int) int {\n\ts := *ptr.toUint64Slice()\n\tn := 0\n\tfor _, v := range s {\n\t\tn += SizeVarint(v) + tagsize\n\t}\n\treturn n\n}\nfunc sizeVarint64PackedSlice(ptr pointer, tagsize int) int {\n\ts := *ptr.toUint64Slice()\n\tif len(s) == 0 {\n\t\treturn 0\n\t}\n\tn := 0\n\tfor _, v := range s {\n\t\tn += SizeVarint(v)\n\t}\n\treturn n + SizeVarint(uint64(n)) + tagsize\n}\nfunc sizeVarintS64Value(ptr pointer, tagsize int) int {\n\tv := *ptr.toInt64()\n\treturn SizeVarint(uint64(v)) + tagsize\n}\nfunc sizeVarintS64ValueNoZero(ptr pointer, tagsize int) int {\n\tv := *ptr.toInt64()\n\tif v == 0 {\n\t\treturn 0\n\t}\n\treturn SizeVarint(uint64(v)) + tagsize\n}\nfunc sizeVarintS64Ptr(ptr pointer, tagsize int) int {\n\tp := *ptr.toInt64Ptr()\n\tif p == nil {\n\t\treturn 0\n\t}\n\treturn SizeVarint(uint64(*p)) + tagsize\n}\nfunc sizeVarintS64Slice(ptr pointer, tagsize int) int {\n\ts := *ptr.toInt64Slice()\n\tn := 0\n\tfor _, v := range s {\n\t\tn += SizeVarint(uint64(v)) + tagsize\n\t}\n\treturn n\n}\nfunc sizeVarintS64PackedSlice(ptr pointer, tagsize int) int {\n\ts := *ptr.toInt64Slice()\n\tif len(s) == 0 {\n\t\treturn 0\n\t}\n\tn := 0\n\tfor _, v := range s {\n\t\tn += SizeVarint(uint64(v))\n\t}\n\treturn n + SizeVarint(uint64(n)) + tagsize\n}\nfunc sizeZigzag32Value(ptr pointer, tagsize int) int {\n\tv := *ptr.toInt32()\n\treturn SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize\n}\nfunc sizeZigzag32ValueNoZero(ptr pointer, tagsize int) int {\n\tv := *ptr.toInt32()\n\tif v == 0 {\n\t\treturn 0\n\t}\n\treturn SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize\n}\nfunc sizeZigzag32Ptr(ptr pointer, tagsize int) int {\n\tp := ptr.getInt32Ptr()\n\tif p == nil {\n\t\treturn 0\n\t}\n\tv := *p\n\treturn SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize\n}\nfunc sizeZigzag32Slice(ptr pointer, tagsize int) int {\n\ts := ptr.getInt32Slice()\n\tn := 0\n\tfor _, v := range s {\n\t\tn += SizeVarint(uint64((uint32(v)<<1)^uint32((int32(v)>>31)))) + tagsize\n\t}\n\treturn n\n}\nfunc sizeZigzag32PackedSlice(ptr pointer, tagsize int) int {\n\ts := ptr.getInt32Slice()\n\tif len(s) == 0 {\n\t\treturn 0\n\t}\n\tn := 0\n\tfor _, v := range s {\n\t\tn += SizeVarint(uint64((uint32(v) << 1) ^ uint32((int32(v) >> 31))))\n\t}\n\treturn n + SizeVarint(uint64(n)) + tagsize\n}\nfunc sizeZigzag64Value(ptr pointer, tagsize int) int {\n\tv := *ptr.toInt64()\n\treturn SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize\n}\nfunc sizeZigzag64ValueNoZero(ptr pointer, tagsize int) int {\n\tv := *ptr.toInt64()\n\tif v == 0 {\n\t\treturn 0\n\t}\n\treturn SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize\n}\nfunc sizeZigzag64Ptr(ptr pointer, tagsize int) int {\n\tp := *ptr.toInt64Ptr()\n\tif p == nil {\n\t\treturn 0\n\t}\n\tv := *p\n\treturn SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize\n}\nfunc sizeZigzag64Slice(ptr pointer, tagsize int) int {\n\ts := *ptr.toInt64Slice()\n\tn := 0\n\tfor _, v := range s {\n\t\tn += SizeVarint(uint64(v<<1)^uint64((int64(v)>>63))) + tagsize\n\t}\n\treturn n\n}\nfunc sizeZigzag64PackedSlice(ptr pointer, tagsize int) int {\n\ts := *ptr.toInt64Slice()\n\tif len(s) == 0 {\n\t\treturn 0\n\t}\n\tn := 0\n\tfor _, v := range s {\n\t\tn += SizeVarint(uint64(v<<1) ^ uint64((int64(v) >> 63)))\n\t}\n\treturn n + SizeVarint(uint64(n)) + tagsize\n}\nfunc sizeBoolValue(_ pointer, tagsize int) int {\n\treturn 1 + tagsize\n}\nfunc sizeBoolValueNoZero(ptr pointer, tagsize int) int {\n\tv := *ptr.toBool()\n\tif !v {\n\t\treturn 0\n\t}\n\treturn 1 + tagsize\n}\nfunc sizeBoolPtr(ptr pointer, tagsize int) int {\n\tp := *ptr.toBoolPtr()\n\tif p == nil {\n\t\treturn 0\n\t}\n\treturn 1 + tagsize\n}\nfunc sizeBoolSlice(ptr pointer, tagsize int) int {\n\ts := *ptr.toBoolSlice()\n\treturn (1 + tagsize) * len(s)\n}\nfunc sizeBoolPackedSlice(ptr pointer, tagsize int) int {\n\ts := *ptr.toBoolSlice()\n\tif len(s) == 0 {\n\t\treturn 0\n\t}\n\treturn len(s) + SizeVarint(uint64(len(s))) + tagsize\n}\nfunc sizeStringValue(ptr pointer, tagsize int) int {\n\tv := *ptr.toString()\n\treturn len(v) + SizeVarint(uint64(len(v))) + tagsize\n}\nfunc sizeStringValueNoZero(ptr pointer, tagsize int) int {\n\tv := *ptr.toString()\n\tif v == \"\" {\n\t\treturn 0\n\t}\n\treturn len(v) + SizeVarint(uint64(len(v))) + tagsize\n}\nfunc sizeStringPtr(ptr pointer, tagsize int) int {\n\tp := *ptr.toStringPtr()\n\tif p == nil {\n\t\treturn 0\n\t}\n\tv := *p\n\treturn len(v) + SizeVarint(uint64(len(v))) + tagsize\n}\nfunc sizeStringSlice(ptr pointer, tagsize int) int {\n\ts := *ptr.toStringSlice()\n\tn := 0\n\tfor _, v := range s {\n\t\tn += len(v) + SizeVarint(uint64(len(v))) + tagsize\n\t}\n\treturn n\n}\nfunc sizeBytes(ptr pointer, tagsize int) int {\n\tv := *ptr.toBytes()\n\tif v == nil {\n\t\treturn 0\n\t}\n\treturn len(v) + SizeVarint(uint64(len(v))) + tagsize\n}\nfunc sizeBytes3(ptr pointer, tagsize int) int {\n\tv := *ptr.toBytes()\n\tif len(v) == 0 {\n\t\treturn 0\n\t}\n\treturn len(v) + SizeVarint(uint64(len(v))) + tagsize\n}\nfunc sizeBytesOneof(ptr pointer, tagsize int) int {\n\tv := *ptr.toBytes()\n\treturn len(v) + SizeVarint(uint64(len(v))) + tagsize\n}\nfunc sizeBytesSlice(ptr pointer, tagsize int) int {\n\ts := *ptr.toBytesSlice()\n\tn := 0\n\tfor _, v := range s {\n\t\tn += len(v) + SizeVarint(uint64(len(v))) + tagsize\n\t}\n\treturn n\n}\n\n// appendFixed32 appends an encoded fixed32 to b.\nfunc appendFixed32(b []byte, v uint32) []byte {\n\tb = append(b,\n\t\tbyte(v),\n\t\tbyte(v>>8),\n\t\tbyte(v>>16),\n\t\tbyte(v>>24))\n\treturn b\n}\n\n// appendFixed64 appends an encoded fixed64 to b.\nfunc appendFixed64(b []byte, v uint64) []byte {\n\tb = append(b,\n\t\tbyte(v),\n\t\tbyte(v>>8),\n\t\tbyte(v>>16),\n\t\tbyte(v>>24),\n\t\tbyte(v>>32),\n\t\tbyte(v>>40),\n\t\tbyte(v>>48),\n\t\tbyte(v>>56))\n\treturn b\n}\n\n// appendVarint appends an encoded varint to b.\nfunc appendVarint(b []byte, v uint64) []byte {\n\t// TODO: make 1-byte (maybe 2-byte) case inline-able, once we\n\t// have non-leaf inliner.\n\tswitch {\n\tcase v < 1<<7:\n\t\tb = append(b, byte(v))\n\tcase v < 1<<14:\n\t\tb = append(b,\n\t\t\tbyte(v&0x7f|0x80),\n\t\t\tbyte(v>>7))\n\tcase v < 1<<21:\n\t\tb = append(b,\n\t\t\tbyte(v&0x7f|0x80),\n\t\t\tbyte((v>>7)&0x7f|0x80),\n\t\t\tbyte(v>>14))\n\tcase v < 1<<28:\n\t\tb = append(b,\n\t\t\tbyte(v&0x7f|0x80),\n\t\t\tbyte((v>>7)&0x7f|0x80),\n\t\t\tbyte((v>>14)&0x7f|0x80),\n\t\t\tbyte(v>>21))\n\tcase v < 1<<35:\n\t\tb = append(b,\n\t\t\tbyte(v&0x7f|0x80),\n\t\t\tbyte((v>>7)&0x7f|0x80),\n\t\t\tbyte((v>>14)&0x7f|0x80),\n\t\t\tbyte((v>>21)&0x7f|0x80),\n\t\t\tbyte(v>>28))\n\tcase v < 1<<42:\n\t\tb = append(b,\n\t\t\tbyte(v&0x7f|0x80),\n\t\t\tbyte((v>>7)&0x7f|0x80),\n\t\t\tbyte((v>>14)&0x7f|0x80),\n\t\t\tbyte((v>>21)&0x7f|0x80),\n\t\t\tbyte((v>>28)&0x7f|0x80),\n\t\t\tbyte(v>>35))\n\tcase v < 1<<49:\n\t\tb = append(b,\n\t\t\tbyte(v&0x7f|0x80),\n\t\t\tbyte((v>>7)&0x7f|0x80),\n\t\t\tbyte((v>>14)&0x7f|0x80),\n\t\t\tbyte((v>>21)&0x7f|0x80),\n\t\t\tbyte((v>>28)&0x7f|0x80),\n\t\t\tbyte((v>>35)&0x7f|0x80),\n\t\t\tbyte(v>>42))\n\tcase v < 1<<56:\n\t\tb = append(b,\n\t\t\tbyte(v&0x7f|0x80),\n\t\t\tbyte((v>>7)&0x7f|0x80),\n\t\t\tbyte((v>>14)&0x7f|0x80),\n\t\t\tbyte((v>>21)&0x7f|0x80),\n\t\t\tbyte((v>>28)&0x7f|0x80),\n\t\t\tbyte((v>>35)&0x7f|0x80),\n\t\t\tbyte((v>>42)&0x7f|0x80),\n\t\t\tbyte(v>>49))\n\tcase v < 1<<63:\n\t\tb = append(b,\n\t\t\tbyte(v&0x7f|0x80),\n\t\t\tbyte((v>>7)&0x7f|0x80),\n\t\t\tbyte((v>>14)&0x7f|0x80),\n\t\t\tbyte((v>>21)&0x7f|0x80),\n\t\t\tbyte((v>>28)&0x7f|0x80),\n\t\t\tbyte((v>>35)&0x7f|0x80),\n\t\t\tbyte((v>>42)&0x7f|0x80),\n\t\t\tbyte((v>>49)&0x7f|0x80),\n\t\t\tbyte(v>>56))\n\tdefault:\n\t\tb = append(b,\n\t\t\tbyte(v&0x7f|0x80),\n\t\t\tbyte((v>>7)&0x7f|0x80),\n\t\t\tbyte((v>>14)&0x7f|0x80),\n\t\t\tbyte((v>>21)&0x7f|0x80),\n\t\t\tbyte((v>>28)&0x7f|0x80),\n\t\t\tbyte((v>>35)&0x7f|0x80),\n\t\t\tbyte((v>>42)&0x7f|0x80),\n\t\t\tbyte((v>>49)&0x7f|0x80),\n\t\t\tbyte((v>>56)&0x7f|0x80),\n\t\t\t1)\n\t}\n\treturn b\n}\n\nfunc appendFixed32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := *ptr.toUint32()\n\tb = appendVarint(b, wiretag)\n\tb = appendFixed32(b, v)\n\treturn b, nil\n}\nfunc appendFixed32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := *ptr.toUint32()\n\tif v == 0 {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag)\n\tb = appendFixed32(b, v)\n\treturn b, nil\n}\nfunc appendFixed32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tp := *ptr.toUint32Ptr()\n\tif p == nil {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag)\n\tb = appendFixed32(b, *p)\n\treturn b, nil\n}\nfunc appendFixed32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\ts := *ptr.toUint32Slice()\n\tfor _, v := range s {\n\t\tb = appendVarint(b, wiretag)\n\t\tb = appendFixed32(b, v)\n\t}\n\treturn b, nil\n}\nfunc appendFixed32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\ts := *ptr.toUint32Slice()\n\tif len(s) == 0 {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag&^7|WireBytes)\n\tb = appendVarint(b, uint64(4*len(s)))\n\tfor _, v := range s {\n\t\tb = appendFixed32(b, v)\n\t}\n\treturn b, nil\n}\nfunc appendFixedS32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := *ptr.toInt32()\n\tb = appendVarint(b, wiretag)\n\tb = appendFixed32(b, uint32(v))\n\treturn b, nil\n}\nfunc appendFixedS32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := *ptr.toInt32()\n\tif v == 0 {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag)\n\tb = appendFixed32(b, uint32(v))\n\treturn b, nil\n}\nfunc appendFixedS32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tp := ptr.getInt32Ptr()\n\tif p == nil {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag)\n\tb = appendFixed32(b, uint32(*p))\n\treturn b, nil\n}\nfunc appendFixedS32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\ts := ptr.getInt32Slice()\n\tfor _, v := range s {\n\t\tb = appendVarint(b, wiretag)\n\t\tb = appendFixed32(b, uint32(v))\n\t}\n\treturn b, nil\n}\nfunc appendFixedS32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\ts := ptr.getInt32Slice()\n\tif len(s) == 0 {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag&^7|WireBytes)\n\tb = appendVarint(b, uint64(4*len(s)))\n\tfor _, v := range s {\n\t\tb = appendFixed32(b, uint32(v))\n\t}\n\treturn b, nil\n}\nfunc appendFloat32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := math.Float32bits(*ptr.toFloat32())\n\tb = appendVarint(b, wiretag)\n\tb = appendFixed32(b, v)\n\treturn b, nil\n}\nfunc appendFloat32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := math.Float32bits(*ptr.toFloat32())\n\tif v == 0 {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag)\n\tb = appendFixed32(b, v)\n\treturn b, nil\n}\nfunc appendFloat32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tp := *ptr.toFloat32Ptr()\n\tif p == nil {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag)\n\tb = appendFixed32(b, math.Float32bits(*p))\n\treturn b, nil\n}\nfunc appendFloat32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\ts := *ptr.toFloat32Slice()\n\tfor _, v := range s {\n\t\tb = appendVarint(b, wiretag)\n\t\tb = appendFixed32(b, math.Float32bits(v))\n\t}\n\treturn b, nil\n}\nfunc appendFloat32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\ts := *ptr.toFloat32Slice()\n\tif len(s) == 0 {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag&^7|WireBytes)\n\tb = appendVarint(b, uint64(4*len(s)))\n\tfor _, v := range s {\n\t\tb = appendFixed32(b, math.Float32bits(v))\n\t}\n\treturn b, nil\n}\nfunc appendFixed64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := *ptr.toUint64()\n\tb = appendVarint(b, wiretag)\n\tb = appendFixed64(b, v)\n\treturn b, nil\n}\nfunc appendFixed64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := *ptr.toUint64()\n\tif v == 0 {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag)\n\tb = appendFixed64(b, v)\n\treturn b, nil\n}\nfunc appendFixed64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tp := *ptr.toUint64Ptr()\n\tif p == nil {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag)\n\tb = appendFixed64(b, *p)\n\treturn b, nil\n}\nfunc appendFixed64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\ts := *ptr.toUint64Slice()\n\tfor _, v := range s {\n\t\tb = appendVarint(b, wiretag)\n\t\tb = appendFixed64(b, v)\n\t}\n\treturn b, nil\n}\nfunc appendFixed64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\ts := *ptr.toUint64Slice()\n\tif len(s) == 0 {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag&^7|WireBytes)\n\tb = appendVarint(b, uint64(8*len(s)))\n\tfor _, v := range s {\n\t\tb = appendFixed64(b, v)\n\t}\n\treturn b, nil\n}\nfunc appendFixedS64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := *ptr.toInt64()\n\tb = appendVarint(b, wiretag)\n\tb = appendFixed64(b, uint64(v))\n\treturn b, nil\n}\nfunc appendFixedS64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := *ptr.toInt64()\n\tif v == 0 {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag)\n\tb = appendFixed64(b, uint64(v))\n\treturn b, nil\n}\nfunc appendFixedS64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tp := *ptr.toInt64Ptr()\n\tif p == nil {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag)\n\tb = appendFixed64(b, uint64(*p))\n\treturn b, nil\n}\nfunc appendFixedS64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\ts := *ptr.toInt64Slice()\n\tfor _, v := range s {\n\t\tb = appendVarint(b, wiretag)\n\t\tb = appendFixed64(b, uint64(v))\n\t}\n\treturn b, nil\n}\nfunc appendFixedS64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\ts := *ptr.toInt64Slice()\n\tif len(s) == 0 {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag&^7|WireBytes)\n\tb = appendVarint(b, uint64(8*len(s)))\n\tfor _, v := range s {\n\t\tb = appendFixed64(b, uint64(v))\n\t}\n\treturn b, nil\n}\nfunc appendFloat64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := math.Float64bits(*ptr.toFloat64())\n\tb = appendVarint(b, wiretag)\n\tb = appendFixed64(b, v)\n\treturn b, nil\n}\nfunc appendFloat64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := math.Float64bits(*ptr.toFloat64())\n\tif v == 0 {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag)\n\tb = appendFixed64(b, v)\n\treturn b, nil\n}\nfunc appendFloat64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tp := *ptr.toFloat64Ptr()\n\tif p == nil {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag)\n\tb = appendFixed64(b, math.Float64bits(*p))\n\treturn b, nil\n}\nfunc appendFloat64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\ts := *ptr.toFloat64Slice()\n\tfor _, v := range s {\n\t\tb = appendVarint(b, wiretag)\n\t\tb = appendFixed64(b, math.Float64bits(v))\n\t}\n\treturn b, nil\n}\nfunc appendFloat64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\ts := *ptr.toFloat64Slice()\n\tif len(s) == 0 {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag&^7|WireBytes)\n\tb = appendVarint(b, uint64(8*len(s)))\n\tfor _, v := range s {\n\t\tb = appendFixed64(b, math.Float64bits(v))\n\t}\n\treturn b, nil\n}\nfunc appendVarint32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := *ptr.toUint32()\n\tb = appendVarint(b, wiretag)\n\tb = appendVarint(b, uint64(v))\n\treturn b, nil\n}\nfunc appendVarint32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := *ptr.toUint32()\n\tif v == 0 {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag)\n\tb = appendVarint(b, uint64(v))\n\treturn b, nil\n}\nfunc appendVarint32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tp := *ptr.toUint32Ptr()\n\tif p == nil {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag)\n\tb = appendVarint(b, uint64(*p))\n\treturn b, nil\n}\nfunc appendVarint32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\ts := *ptr.toUint32Slice()\n\tfor _, v := range s {\n\t\tb = appendVarint(b, wiretag)\n\t\tb = appendVarint(b, uint64(v))\n\t}\n\treturn b, nil\n}\nfunc appendVarint32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\ts := *ptr.toUint32Slice()\n\tif len(s) == 0 {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag&^7|WireBytes)\n\t// compute size\n\tn := 0\n\tfor _, v := range s {\n\t\tn += SizeVarint(uint64(v))\n\t}\n\tb = appendVarint(b, uint64(n))\n\tfor _, v := range s {\n\t\tb = appendVarint(b, uint64(v))\n\t}\n\treturn b, nil\n}\nfunc appendVarintS32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := *ptr.toInt32()\n\tb = appendVarint(b, wiretag)\n\tb = appendVarint(b, uint64(v))\n\treturn b, nil\n}\nfunc appendVarintS32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := *ptr.toInt32()\n\tif v == 0 {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag)\n\tb = appendVarint(b, uint64(v))\n\treturn b, nil\n}\nfunc appendVarintS32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tp := ptr.getInt32Ptr()\n\tif p == nil {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag)\n\tb = appendVarint(b, uint64(*p))\n\treturn b, nil\n}\nfunc appendVarintS32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\ts := ptr.getInt32Slice()\n\tfor _, v := range s {\n\t\tb = appendVarint(b, wiretag)\n\t\tb = appendVarint(b, uint64(v))\n\t}\n\treturn b, nil\n}\nfunc appendVarintS32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\ts := ptr.getInt32Slice()\n\tif len(s) == 0 {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag&^7|WireBytes)\n\t// compute size\n\tn := 0\n\tfor _, v := range s {\n\t\tn += SizeVarint(uint64(v))\n\t}\n\tb = appendVarint(b, uint64(n))\n\tfor _, v := range s {\n\t\tb = appendVarint(b, uint64(v))\n\t}\n\treturn b, nil\n}\nfunc appendVarint64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := *ptr.toUint64()\n\tb = appendVarint(b, wiretag)\n\tb = appendVarint(b, v)\n\treturn b, nil\n}\nfunc appendVarint64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := *ptr.toUint64()\n\tif v == 0 {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag)\n\tb = appendVarint(b, v)\n\treturn b, nil\n}\nfunc appendVarint64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tp := *ptr.toUint64Ptr()\n\tif p == nil {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag)\n\tb = appendVarint(b, *p)\n\treturn b, nil\n}\nfunc appendVarint64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\ts := *ptr.toUint64Slice()\n\tfor _, v := range s {\n\t\tb = appendVarint(b, wiretag)\n\t\tb = appendVarint(b, v)\n\t}\n\treturn b, nil\n}\nfunc appendVarint64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\ts := *ptr.toUint64Slice()\n\tif len(s) == 0 {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag&^7|WireBytes)\n\t// compute size\n\tn := 0\n\tfor _, v := range s {\n\t\tn += SizeVarint(v)\n\t}\n\tb = appendVarint(b, uint64(n))\n\tfor _, v := range s {\n\t\tb = appendVarint(b, v)\n\t}\n\treturn b, nil\n}\nfunc appendVarintS64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := *ptr.toInt64()\n\tb = appendVarint(b, wiretag)\n\tb = appendVarint(b, uint64(v))\n\treturn b, nil\n}\nfunc appendVarintS64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := *ptr.toInt64()\n\tif v == 0 {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag)\n\tb = appendVarint(b, uint64(v))\n\treturn b, nil\n}\nfunc appendVarintS64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tp := *ptr.toInt64Ptr()\n\tif p == nil {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag)\n\tb = appendVarint(b, uint64(*p))\n\treturn b, nil\n}\nfunc appendVarintS64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\ts := *ptr.toInt64Slice()\n\tfor _, v := range s {\n\t\tb = appendVarint(b, wiretag)\n\t\tb = appendVarint(b, uint64(v))\n\t}\n\treturn b, nil\n}\nfunc appendVarintS64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\ts := *ptr.toInt64Slice()\n\tif len(s) == 0 {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag&^7|WireBytes)\n\t// compute size\n\tn := 0\n\tfor _, v := range s {\n\t\tn += SizeVarint(uint64(v))\n\t}\n\tb = appendVarint(b, uint64(n))\n\tfor _, v := range s {\n\t\tb = appendVarint(b, uint64(v))\n\t}\n\treturn b, nil\n}\nfunc appendZigzag32Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := *ptr.toInt32()\n\tb = appendVarint(b, wiretag)\n\tb = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31))))\n\treturn b, nil\n}\nfunc appendZigzag32ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := *ptr.toInt32()\n\tif v == 0 {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag)\n\tb = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31))))\n\treturn b, nil\n}\nfunc appendZigzag32Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tp := ptr.getInt32Ptr()\n\tif p == nil {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag)\n\tv := *p\n\tb = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31))))\n\treturn b, nil\n}\nfunc appendZigzag32Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\ts := ptr.getInt32Slice()\n\tfor _, v := range s {\n\t\tb = appendVarint(b, wiretag)\n\t\tb = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31))))\n\t}\n\treturn b, nil\n}\nfunc appendZigzag32PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\ts := ptr.getInt32Slice()\n\tif len(s) == 0 {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag&^7|WireBytes)\n\t// compute size\n\tn := 0\n\tfor _, v := range s {\n\t\tn += SizeVarint(uint64((uint32(v) << 1) ^ uint32((int32(v) >> 31))))\n\t}\n\tb = appendVarint(b, uint64(n))\n\tfor _, v := range s {\n\t\tb = appendVarint(b, uint64((uint32(v)<<1)^uint32((int32(v)>>31))))\n\t}\n\treturn b, nil\n}\nfunc appendZigzag64Value(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := *ptr.toInt64()\n\tb = appendVarint(b, wiretag)\n\tb = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63)))\n\treturn b, nil\n}\nfunc appendZigzag64ValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := *ptr.toInt64()\n\tif v == 0 {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag)\n\tb = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63)))\n\treturn b, nil\n}\nfunc appendZigzag64Ptr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tp := *ptr.toInt64Ptr()\n\tif p == nil {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag)\n\tv := *p\n\tb = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63)))\n\treturn b, nil\n}\nfunc appendZigzag64Slice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\ts := *ptr.toInt64Slice()\n\tfor _, v := range s {\n\t\tb = appendVarint(b, wiretag)\n\t\tb = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63)))\n\t}\n\treturn b, nil\n}\nfunc appendZigzag64PackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\ts := *ptr.toInt64Slice()\n\tif len(s) == 0 {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag&^7|WireBytes)\n\t// compute size\n\tn := 0\n\tfor _, v := range s {\n\t\tn += SizeVarint(uint64(v<<1) ^ uint64((int64(v) >> 63)))\n\t}\n\tb = appendVarint(b, uint64(n))\n\tfor _, v := range s {\n\t\tb = appendVarint(b, uint64(v<<1)^uint64((int64(v)>>63)))\n\t}\n\treturn b, nil\n}\nfunc appendBoolValue(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := *ptr.toBool()\n\tb = appendVarint(b, wiretag)\n\tif v {\n\t\tb = append(b, 1)\n\t} else {\n\t\tb = append(b, 0)\n\t}\n\treturn b, nil\n}\nfunc appendBoolValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := *ptr.toBool()\n\tif !v {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag)\n\tb = append(b, 1)\n\treturn b, nil\n}\n\nfunc appendBoolPtr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tp := *ptr.toBoolPtr()\n\tif p == nil {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag)\n\tif *p {\n\t\tb = append(b, 1)\n\t} else {\n\t\tb = append(b, 0)\n\t}\n\treturn b, nil\n}\nfunc appendBoolSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\ts := *ptr.toBoolSlice()\n\tfor _, v := range s {\n\t\tb = appendVarint(b, wiretag)\n\t\tif v {\n\t\t\tb = append(b, 1)\n\t\t} else {\n\t\t\tb = append(b, 0)\n\t\t}\n\t}\n\treturn b, nil\n}\nfunc appendBoolPackedSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\ts := *ptr.toBoolSlice()\n\tif len(s) == 0 {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag&^7|WireBytes)\n\tb = appendVarint(b, uint64(len(s)))\n\tfor _, v := range s {\n\t\tif v {\n\t\t\tb = append(b, 1)\n\t\t} else {\n\t\t\tb = append(b, 0)\n\t\t}\n\t}\n\treturn b, nil\n}\nfunc appendStringValue(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := *ptr.toString()\n\tb = appendVarint(b, wiretag)\n\tb = appendVarint(b, uint64(len(v)))\n\tb = append(b, v...)\n\treturn b, nil\n}\nfunc appendStringValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := *ptr.toString()\n\tif v == \"\" {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag)\n\tb = appendVarint(b, uint64(len(v)))\n\tb = append(b, v...)\n\treturn b, nil\n}\nfunc appendStringPtr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tp := *ptr.toStringPtr()\n\tif p == nil {\n\t\treturn b, nil\n\t}\n\tv := *p\n\tb = appendVarint(b, wiretag)\n\tb = appendVarint(b, uint64(len(v)))\n\tb = append(b, v...)\n\treturn b, nil\n}\nfunc appendStringSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\ts := *ptr.toStringSlice()\n\tfor _, v := range s {\n\t\tb = appendVarint(b, wiretag)\n\t\tb = appendVarint(b, uint64(len(v)))\n\t\tb = append(b, v...)\n\t}\n\treturn b, nil\n}\nfunc appendUTF8StringValue(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tvar invalidUTF8 bool\n\tv := *ptr.toString()\n\tif !utf8.ValidString(v) {\n\t\tinvalidUTF8 = true\n\t}\n\tb = appendVarint(b, wiretag)\n\tb = appendVarint(b, uint64(len(v)))\n\tb = append(b, v...)\n\tif invalidUTF8 {\n\t\treturn b, errInvalidUTF8\n\t}\n\treturn b, nil\n}\nfunc appendUTF8StringValueNoZero(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tvar invalidUTF8 bool\n\tv := *ptr.toString()\n\tif v == \"\" {\n\t\treturn b, nil\n\t}\n\tif !utf8.ValidString(v) {\n\t\tinvalidUTF8 = true\n\t}\n\tb = appendVarint(b, wiretag)\n\tb = appendVarint(b, uint64(len(v)))\n\tb = append(b, v...)\n\tif invalidUTF8 {\n\t\treturn b, errInvalidUTF8\n\t}\n\treturn b, nil\n}\nfunc appendUTF8StringPtr(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tvar invalidUTF8 bool\n\tp := *ptr.toStringPtr()\n\tif p == nil {\n\t\treturn b, nil\n\t}\n\tv := *p\n\tif !utf8.ValidString(v) {\n\t\tinvalidUTF8 = true\n\t}\n\tb = appendVarint(b, wiretag)\n\tb = appendVarint(b, uint64(len(v)))\n\tb = append(b, v...)\n\tif invalidUTF8 {\n\t\treturn b, errInvalidUTF8\n\t}\n\treturn b, nil\n}\nfunc appendUTF8StringSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tvar invalidUTF8 bool\n\ts := *ptr.toStringSlice()\n\tfor _, v := range s {\n\t\tif !utf8.ValidString(v) {\n\t\t\tinvalidUTF8 = true\n\t\t}\n\t\tb = appendVarint(b, wiretag)\n\t\tb = appendVarint(b, uint64(len(v)))\n\t\tb = append(b, v...)\n\t}\n\tif invalidUTF8 {\n\t\treturn b, errInvalidUTF8\n\t}\n\treturn b, nil\n}\nfunc appendBytes(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := *ptr.toBytes()\n\tif v == nil {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag)\n\tb = appendVarint(b, uint64(len(v)))\n\tb = append(b, v...)\n\treturn b, nil\n}\nfunc appendBytes3(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := *ptr.toBytes()\n\tif len(v) == 0 {\n\t\treturn b, nil\n\t}\n\tb = appendVarint(b, wiretag)\n\tb = appendVarint(b, uint64(len(v)))\n\tb = append(b, v...)\n\treturn b, nil\n}\nfunc appendBytesOneof(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\tv := *ptr.toBytes()\n\tb = appendVarint(b, wiretag)\n\tb = appendVarint(b, uint64(len(v)))\n\tb = append(b, v...)\n\treturn b, nil\n}\nfunc appendBytesSlice(b []byte, ptr pointer, wiretag uint64, _ bool) ([]byte, error) {\n\ts := *ptr.toBytesSlice()\n\tfor _, v := range s {\n\t\tb = appendVarint(b, wiretag)\n\t\tb = appendVarint(b, uint64(len(v)))\n\t\tb = append(b, v...)\n\t}\n\treturn b, nil\n}\n\n// makeGroupMarshaler returns the sizer and marshaler for a group.\n// u is the marshal info of the underlying message.\nfunc makeGroupMarshaler(u *marshalInfo) (sizer, marshaler) {\n\treturn func(ptr pointer, tagsize int) int {\n\t\t\tp := ptr.getPointer()\n\t\t\tif p.isNil() {\n\t\t\t\treturn 0\n\t\t\t}\n\t\t\treturn u.size(p) + 2*tagsize\n\t\t},\n\t\tfunc(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {\n\t\t\tp := ptr.getPointer()\n\t\t\tif p.isNil() {\n\t\t\t\treturn b, nil\n\t\t\t}\n\t\t\tvar err error\n\t\t\tb = appendVarint(b, wiretag) // start group\n\t\t\tb, err = u.marshal(b, p, deterministic)\n\t\t\tb = appendVarint(b, wiretag+(WireEndGroup-WireStartGroup)) // end group\n\t\t\treturn b, err\n\t\t}\n}\n\n// makeGroupSliceMarshaler returns the sizer and marshaler for a group slice.\n// u is the marshal info of the underlying message.\nfunc makeGroupSliceMarshaler(u *marshalInfo) (sizer, marshaler) {\n\treturn func(ptr pointer, tagsize int) int {\n\t\t\ts := ptr.getPointerSlice()\n\t\t\tn := 0\n\t\t\tfor _, v := range s {\n\t\t\t\tif v.isNil() {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tn += u.size(v) + 2*tagsize\n\t\t\t}\n\t\t\treturn n\n\t\t},\n\t\tfunc(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {\n\t\t\ts := ptr.getPointerSlice()\n\t\t\tvar err error\n\t\t\tvar nerr nonFatal\n\t\t\tfor _, v := range s {\n\t\t\t\tif v.isNil() {\n\t\t\t\t\treturn b, errRepeatedHasNil\n\t\t\t\t}\n\t\t\t\tb = appendVarint(b, wiretag) // start group\n\t\t\t\tb, err = u.marshal(b, v, deterministic)\n\t\t\t\tb = appendVarint(b, wiretag+(WireEndGroup-WireStartGroup)) // end group\n\t\t\t\tif !nerr.Merge(err) {\n\t\t\t\t\tif err == ErrNil {\n\t\t\t\t\t\terr = errRepeatedHasNil\n\t\t\t\t\t}\n\t\t\t\t\treturn b, err\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn b, nerr.E\n\t\t}\n}\n\n// makeMessageMarshaler returns the sizer and marshaler for a message field.\n// u is the marshal info of the message.\nfunc makeMessageMarshaler(u *marshalInfo) (sizer, marshaler) {\n\treturn func(ptr pointer, tagsize int) int {\n\t\t\tp := ptr.getPointer()\n\t\t\tif p.isNil() {\n\t\t\t\treturn 0\n\t\t\t}\n\t\t\tsiz := u.size(p)\n\t\t\treturn siz + SizeVarint(uint64(siz)) + tagsize\n\t\t},\n\t\tfunc(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {\n\t\t\tp := ptr.getPointer()\n\t\t\tif p.isNil() {\n\t\t\t\treturn b, nil\n\t\t\t}\n\t\t\tb = appendVarint(b, wiretag)\n\t\t\tsiz := u.cachedsize(p)\n\t\t\tb = appendVarint(b, uint64(siz))\n\t\t\treturn u.marshal(b, p, deterministic)\n\t\t}\n}\n\n// makeMessageSliceMarshaler returns the sizer and marshaler for a message slice.\n// u is the marshal info of the message.\nfunc makeMessageSliceMarshaler(u *marshalInfo) (sizer, marshaler) {\n\treturn func(ptr pointer, tagsize int) int {\n\t\t\ts := ptr.getPointerSlice()\n\t\t\tn := 0\n\t\t\tfor _, v := range s {\n\t\t\t\tif v.isNil() {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tsiz := u.size(v)\n\t\t\t\tn += siz + SizeVarint(uint64(siz)) + tagsize\n\t\t\t}\n\t\t\treturn n\n\t\t},\n\t\tfunc(b []byte, ptr pointer, wiretag uint64, deterministic bool) ([]byte, error) {\n\t\t\ts := ptr.getPointerSlice()\n\t\t\tvar err error\n\t\t\tvar nerr nonFatal\n\t\t\tfor _, v := range s {\n\t\t\t\tif v.isNil() {\n\t\t\t\t\treturn b, errRepeatedHasNil\n\t\t\t\t}\n\t\t\t\tb = appendVarint(b, wiretag)\n\t\t\t\tsiz := u.cachedsize(v)\n\t\t\t\tb = appendVarint(b, uint64(siz))\n\t\t\t\tb, err = u.marshal(b, v, deterministic)\n\n\t\t\t\tif !nerr.Merge(err) {\n\t\t\t\t\tif err == ErrNil {\n\t\t\t\t\t\terr = errRepeatedHasNil\n\t\t\t\t\t}\n\t\t\t\t\treturn b, err\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn b, nerr.E\n\t\t}\n}\n\n// makeMapMarshaler returns the sizer and marshaler for a map field.\n// f is the pointer to the reflect data structure of the field.\nfunc makeMapMarshaler(f *reflect.StructField) (sizer, marshaler) {\n\t// figure out key and value type\n\tt := f.Type\n\tkeyType := t.Key()\n\tvalType := t.Elem()\n\tkeyTags := strings.Split(f.Tag.Get(\"protobuf_key\"), \",\")\n\tvalTags := strings.Split(f.Tag.Get(\"protobuf_val\"), \",\")\n\tkeySizer, keyMarshaler := typeMarshaler(keyType, keyTags, false, false) // don't omit zero value in map\n\tvalSizer, valMarshaler := typeMarshaler(valType, valTags, false, false) // don't omit zero value in map\n\tkeyWireTag := 1<<3 | wiretype(keyTags[0])\n\tvalWireTag := 2<<3 | wiretype(valTags[0])\n\n\t// We create an interface to get the addresses of the map key and value.\n\t// If value is pointer-typed, the interface is a direct interface, the\n\t// idata itself is the value. Otherwise, the idata is the pointer to the\n\t// value.\n\t// Key cannot be pointer-typed.\n\tvalIsPtr := valType.Kind() == reflect.Ptr\n\n\t// If value is a message with nested maps, calling\n\t// valSizer in marshal may be quadratic. We should use\n\t// cached version in marshal (but not in size).\n\t// If value is not message type, we don't have size cache,\n\t// but it cannot be nested either. Just use valSizer.\n\tvalCachedSizer := valSizer\n\tif valIsPtr && valType.Elem().Kind() == reflect.Struct {\n\t\tu := getMarshalInfo(valType.Elem())\n\t\tvalCachedSizer = func(ptr pointer, tagsize int) int {\n\t\t\t// Same as message sizer, but use cache.\n\t\t\tp := ptr.getPointer()\n\t\t\tif p.isNil() {\n\t\t\t\treturn 0\n\t\t\t}\n\t\t\tsiz := u.cachedsize(p)\n\t\t\treturn siz + SizeVarint(uint64(siz)) + tagsize\n\t\t}\n\t}\n\treturn func(ptr pointer, tagsize int) int {\n\t\t\tm := ptr.asPointerTo(t).Elem() // the map\n\t\t\tn := 0\n\t\t\tfor _, k := range m.MapKeys() {\n\t\t\t\tki := k.Interface()\n\t\t\t\tvi := m.MapIndex(k).Interface()\n\t\t\t\tkaddr := toAddrPointer(&ki, false, false)      // pointer to key\n\t\t\t\tvaddr := toAddrPointer(&vi, valIsPtr, false)   // pointer to value\n\t\t\t\tsiz := keySizer(kaddr, 1) + valSizer(vaddr, 1) // tag of key = 1 (size=1), tag of val = 2 (size=1)\n\t\t\t\tn += siz + SizeVarint(uint64(siz)) + tagsize\n\t\t\t}\n\t\t\treturn n\n\t\t},\n\t\tfunc(b []byte, ptr pointer, tag uint64, deterministic bool) ([]byte, error) {\n\t\t\tm := ptr.asPointerTo(t).Elem() // the map\n\t\t\tvar err error\n\t\t\tkeys := m.MapKeys()\n\t\t\tif len(keys) > 1 && deterministic {\n\t\t\t\tsort.Sort(mapKeys(keys))\n\t\t\t}\n\n\t\t\tvar nerr nonFatal\n\t\t\tfor _, k := range keys {\n\t\t\t\tki := k.Interface()\n\t\t\t\tvi := m.MapIndex(k).Interface()\n\t\t\t\tkaddr := toAddrPointer(&ki, false, false)    // pointer to key\n\t\t\t\tvaddr := toAddrPointer(&vi, valIsPtr, false) // pointer to value\n\t\t\t\tb = appendVarint(b, tag)\n\t\t\t\tsiz := keySizer(kaddr, 1) + valCachedSizer(vaddr, 1) // tag of key = 1 (size=1), tag of val = 2 (size=1)\n\t\t\t\tb = appendVarint(b, uint64(siz))\n\t\t\t\tb, err = keyMarshaler(b, kaddr, keyWireTag, deterministic)\n\t\t\t\tif !nerr.Merge(err) {\n\t\t\t\t\treturn b, err\n\t\t\t\t}\n\t\t\t\tb, err = valMarshaler(b, vaddr, valWireTag, deterministic)\n\t\t\t\tif err != ErrNil && !nerr.Merge(err) { // allow nil value in map\n\t\t\t\t\treturn b, err\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn b, nerr.E\n\t\t}\n}\n\n// makeOneOfMarshaler returns the sizer and marshaler for a oneof field.\n// fi is the marshal info of the field.\n// f is the pointer to the reflect data structure of the field.\nfunc makeOneOfMarshaler(fi *marshalFieldInfo, f *reflect.StructField) (sizer, marshaler) {\n\t// Oneof field is an interface. We need to get the actual data type on the fly.\n\tt := f.Type\n\treturn func(ptr pointer, _ int) int {\n\t\t\tp := ptr.getInterfacePointer()\n\t\t\tif p.isNil() {\n\t\t\t\treturn 0\n\t\t\t}\n\t\t\tv := ptr.asPointerTo(t).Elem().Elem().Elem() // *interface -> interface -> *struct -> struct\n\t\t\ttelem := v.Type()\n\t\t\te := fi.oneofElems[telem]\n\t\t\treturn e.sizer(p, e.tagsize)\n\t\t},\n\t\tfunc(b []byte, ptr pointer, _ uint64, deterministic bool) ([]byte, error) {\n\t\t\tp := ptr.getInterfacePointer()\n\t\t\tif p.isNil() {\n\t\t\t\treturn b, nil\n\t\t\t}\n\t\t\tv := ptr.asPointerTo(t).Elem().Elem().Elem() // *interface -> interface -> *struct -> struct\n\t\t\ttelem := v.Type()\n\t\t\tif telem.Field(0).Type.Kind() == reflect.Ptr && p.getPointer().isNil() {\n\t\t\t\treturn b, errOneofHasNil\n\t\t\t}\n\t\t\te := fi.oneofElems[telem]\n\t\t\treturn e.marshaler(b, p, e.wiretag, deterministic)\n\t\t}\n}\n\n// sizeExtensions computes the size of encoded data for a XXX_InternalExtensions field.\nfunc (u *marshalInfo) sizeExtensions(ext *XXX_InternalExtensions) int {\n\tm, mu := ext.extensionsRead()\n\tif m == nil {\n\t\treturn 0\n\t}\n\tmu.Lock()\n\n\tn := 0\n\tfor _, e := range m {\n\t\tif e.value == nil || e.desc == nil {\n\t\t\t// Extension is only in its encoded form.\n\t\t\tn += len(e.enc)\n\t\t\tcontinue\n\t\t}\n\n\t\t// We don't skip extensions that have an encoded form set,\n\t\t// because the extension value may have been mutated after\n\t\t// the last time this function was called.\n\t\tei := u.getExtElemInfo(e.desc)\n\t\tv := e.value\n\t\tp := toAddrPointer(&v, ei.isptr, ei.deref)\n\t\tn += ei.sizer(p, ei.tagsize)\n\t}\n\tmu.Unlock()\n\treturn n\n}\n\n// appendExtensions marshals a XXX_InternalExtensions field to the end of byte slice b.\nfunc (u *marshalInfo) appendExtensions(b []byte, ext *XXX_InternalExtensions, deterministic bool) ([]byte, error) {\n\tm, mu := ext.extensionsRead()\n\tif m == nil {\n\t\treturn b, nil\n\t}\n\tmu.Lock()\n\tdefer mu.Unlock()\n\n\tvar err error\n\tvar nerr nonFatal\n\n\t// Fast-path for common cases: zero or one extensions.\n\t// Don't bother sorting the keys.\n\tif len(m) <= 1 {\n\t\tfor _, e := range m {\n\t\t\tif e.value == nil || e.desc == nil {\n\t\t\t\t// Extension is only in its encoded form.\n\t\t\t\tb = append(b, e.enc...)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// We don't skip extensions that have an encoded form set,\n\t\t\t// because the extension value may have been mutated after\n\t\t\t// the last time this function was called.\n\n\t\t\tei := u.getExtElemInfo(e.desc)\n\t\t\tv := e.value\n\t\t\tp := toAddrPointer(&v, ei.isptr, ei.deref)\n\t\t\tb, err = ei.marshaler(b, p, ei.wiretag, deterministic)\n\t\t\tif !nerr.Merge(err) {\n\t\t\t\treturn b, err\n\t\t\t}\n\t\t}\n\t\treturn b, nerr.E\n\t}\n\n\t// Sort the keys to provide a deterministic encoding.\n\t// Not sure this is required, but the old code does it.\n\tkeys := make([]int, 0, len(m))\n\tfor k := range m {\n\t\tkeys = append(keys, int(k))\n\t}\n\tsort.Ints(keys)\n\n\tfor _, k := range keys {\n\t\te := m[int32(k)]\n\t\tif e.value == nil || e.desc == nil {\n\t\t\t// Extension is only in its encoded form.\n\t\t\tb = append(b, e.enc...)\n\t\t\tcontinue\n\t\t}\n\n\t\t// We don't skip extensions that have an encoded form set,\n\t\t// because the extension value may have been mutated after\n\t\t// the last time this function was called.\n\n\t\tei := u.getExtElemInfo(e.desc)\n\t\tv := e.value\n\t\tp := toAddrPointer(&v, ei.isptr, ei.deref)\n\t\tb, err = ei.marshaler(b, p, ei.wiretag, deterministic)\n\t\tif !nerr.Merge(err) {\n\t\t\treturn b, err\n\t\t}\n\t}\n\treturn b, nerr.E\n}\n\n// message set format is:\n//   message MessageSet {\n//     repeated group Item = 1 {\n//       required int32 type_id = 2;\n//       required string message = 3;\n//     };\n//   }\n\n// sizeMessageSet computes the size of encoded data for a XXX_InternalExtensions field\n// in message set format (above).\nfunc (u *marshalInfo) sizeMessageSet(ext *XXX_InternalExtensions) int {\n\tm, mu := ext.extensionsRead()\n\tif m == nil {\n\t\treturn 0\n\t}\n\tmu.Lock()\n\n\tn := 0\n\tfor id, e := range m {\n\t\tn += 2                          // start group, end group. tag = 1 (size=1)\n\t\tn += SizeVarint(uint64(id)) + 1 // type_id, tag = 2 (size=1)\n\n\t\tif e.value == nil || e.desc == nil {\n\t\t\t// Extension is only in its encoded form.\n\t\t\tmsgWithLen := skipVarint(e.enc) // skip old tag, but leave the length varint\n\t\t\tsiz := len(msgWithLen)\n\t\t\tn += siz + 1 // message, tag = 3 (size=1)\n\t\t\tcontinue\n\t\t}\n\n\t\t// We don't skip extensions that have an encoded form set,\n\t\t// because the extension value may have been mutated after\n\t\t// the last time this function was called.\n\n\t\tei := u.getExtElemInfo(e.desc)\n\t\tv := e.value\n\t\tp := toAddrPointer(&v, ei.isptr, ei.deref)\n\t\tn += ei.sizer(p, 1) // message, tag = 3 (size=1)\n\t}\n\tmu.Unlock()\n\treturn n\n}\n\n// appendMessageSet marshals a XXX_InternalExtensions field in message set format (above)\n// to the end of byte slice b.\nfunc (u *marshalInfo) appendMessageSet(b []byte, ext *XXX_InternalExtensions, deterministic bool) ([]byte, error) {\n\tm, mu := ext.extensionsRead()\n\tif m == nil {\n\t\treturn b, nil\n\t}\n\tmu.Lock()\n\tdefer mu.Unlock()\n\n\tvar err error\n\tvar nerr nonFatal\n\n\t// Fast-path for common cases: zero or one extensions.\n\t// Don't bother sorting the keys.\n\tif len(m) <= 1 {\n\t\tfor id, e := range m {\n\t\t\tb = append(b, 1<<3|WireStartGroup)\n\t\t\tb = append(b, 2<<3|WireVarint)\n\t\t\tb = appendVarint(b, uint64(id))\n\n\t\t\tif e.value == nil || e.desc == nil {\n\t\t\t\t// Extension is only in its encoded form.\n\t\t\t\tmsgWithLen := skipVarint(e.enc) // skip old tag, but leave the length varint\n\t\t\t\tb = append(b, 3<<3|WireBytes)\n\t\t\t\tb = append(b, msgWithLen...)\n\t\t\t\tb = append(b, 1<<3|WireEndGroup)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// We don't skip extensions that have an encoded form set,\n\t\t\t// because the extension value may have been mutated after\n\t\t\t// the last time this function was called.\n\n\t\t\tei := u.getExtElemInfo(e.desc)\n\t\t\tv := e.value\n\t\t\tp := toAddrPointer(&v, ei.isptr, ei.deref)\n\t\t\tb, err = ei.marshaler(b, p, 3<<3|WireBytes, deterministic)\n\t\t\tif !nerr.Merge(err) {\n\t\t\t\treturn b, err\n\t\t\t}\n\t\t\tb = append(b, 1<<3|WireEndGroup)\n\t\t}\n\t\treturn b, nerr.E\n\t}\n\n\t// Sort the keys to provide a deterministic encoding.\n\tkeys := make([]int, 0, len(m))\n\tfor k := range m {\n\t\tkeys = append(keys, int(k))\n\t}\n\tsort.Ints(keys)\n\n\tfor _, id := range keys {\n\t\te := m[int32(id)]\n\t\tb = append(b, 1<<3|WireStartGroup)\n\t\tb = append(b, 2<<3|WireVarint)\n\t\tb = appendVarint(b, uint64(id))\n\n\t\tif e.value == nil || e.desc == nil {\n\t\t\t// Extension is only in its encoded form.\n\t\t\tmsgWithLen := skipVarint(e.enc) // skip old tag, but leave the length varint\n\t\t\tb = append(b, 3<<3|WireBytes)\n\t\t\tb = append(b, msgWithLen...)\n\t\t\tb = append(b, 1<<3|WireEndGroup)\n\t\t\tcontinue\n\t\t}\n\n\t\t// We don't skip extensions that have an encoded form set,\n\t\t// because the extension value may have been mutated after\n\t\t// the last time this function was called.\n\n\t\tei := u.getExtElemInfo(e.desc)\n\t\tv := e.value\n\t\tp := toAddrPointer(&v, ei.isptr, ei.deref)\n\t\tb, err = ei.marshaler(b, p, 3<<3|WireBytes, deterministic)\n\t\tb = append(b, 1<<3|WireEndGroup)\n\t\tif !nerr.Merge(err) {\n\t\t\treturn b, err\n\t\t}\n\t}\n\treturn b, nerr.E\n}\n\n// sizeV1Extensions computes the size of encoded data for a V1-API extension field.\nfunc (u *marshalInfo) sizeV1Extensions(m map[int32]Extension) int {\n\tif m == nil {\n\t\treturn 0\n\t}\n\n\tn := 0\n\tfor _, e := range m {\n\t\tif e.value == nil || e.desc == nil {\n\t\t\t// Extension is only in its encoded form.\n\t\t\tn += len(e.enc)\n\t\t\tcontinue\n\t\t}\n\n\t\t// We don't skip extensions that have an encoded form set,\n\t\t// because the extension value may have been mutated after\n\t\t// the last time this function was called.\n\n\t\tei := u.getExtElemInfo(e.desc)\n\t\tv := e.value\n\t\tp := toAddrPointer(&v, ei.isptr, ei.deref)\n\t\tn += ei.sizer(p, ei.tagsize)\n\t}\n\treturn n\n}\n\n// appendV1Extensions marshals a V1-API extension field to the end of byte slice b.\nfunc (u *marshalInfo) appendV1Extensions(b []byte, m map[int32]Extension, deterministic bool) ([]byte, error) {\n\tif m == nil {\n\t\treturn b, nil\n\t}\n\n\t// Sort the keys to provide a deterministic encoding.\n\tkeys := make([]int, 0, len(m))\n\tfor k := range m {\n\t\tkeys = append(keys, int(k))\n\t}\n\tsort.Ints(keys)\n\n\tvar err error\n\tvar nerr nonFatal\n\tfor _, k := range keys {\n\t\te := m[int32(k)]\n\t\tif e.value == nil || e.desc == nil {\n\t\t\t// Extension is only in its encoded form.\n\t\t\tb = append(b, e.enc...)\n\t\t\tcontinue\n\t\t}\n\n\t\t// We don't skip extensions that have an encoded form set,\n\t\t// because the extension value may have been mutated after\n\t\t// the last time this function was called.\n\n\t\tei := u.getExtElemInfo(e.desc)\n\t\tv := e.value\n\t\tp := toAddrPointer(&v, ei.isptr, ei.deref)\n\t\tb, err = ei.marshaler(b, p, ei.wiretag, deterministic)\n\t\tif !nerr.Merge(err) {\n\t\t\treturn b, err\n\t\t}\n\t}\n\treturn b, nerr.E\n}\n\n// newMarshaler is the interface representing objects that can marshal themselves.\n//\n// This exists to support protoc-gen-go generated messages.\n// The proto package will stop type-asserting to this interface in the future.\n//\n// DO NOT DEPEND ON THIS.\ntype newMarshaler interface {\n\tXXX_Size() int\n\tXXX_Marshal(b []byte, deterministic bool) ([]byte, error)\n}\n\n// Size returns the encoded size of a protocol buffer message.\n// This is the main entry point.\nfunc Size(pb Message) int {\n\tif m, ok := pb.(newMarshaler); ok {\n\t\treturn m.XXX_Size()\n\t}\n\tif m, ok := pb.(Marshaler); ok {\n\t\t// If the message can marshal itself, let it do it, for compatibility.\n\t\t// NOTE: This is not efficient.\n\t\tb, _ := m.Marshal()\n\t\treturn len(b)\n\t}\n\t// in case somehow we didn't generate the wrapper\n\tif pb == nil {\n\t\treturn 0\n\t}\n\tvar info InternalMessageInfo\n\treturn info.Size(pb)\n}\n\n// Marshal takes a protocol buffer message\n// and encodes it into the wire format, returning the data.\n// This is the main entry point.\nfunc Marshal(pb Message) ([]byte, error) {\n\tif m, ok := pb.(newMarshaler); ok {\n\t\tsiz := m.XXX_Size()\n\t\tb := make([]byte, 0, siz)\n\t\treturn m.XXX_Marshal(b, false)\n\t}\n\tif m, ok := pb.(Marshaler); ok {\n\t\t// If the message can marshal itself, let it do it, for compatibility.\n\t\t// NOTE: This is not efficient.\n\t\treturn m.Marshal()\n\t}\n\t// in case somehow we didn't generate the wrapper\n\tif pb == nil {\n\t\treturn nil, ErrNil\n\t}\n\tvar info InternalMessageInfo\n\tsiz := info.Size(pb)\n\tb := make([]byte, 0, siz)\n\treturn info.Marshal(b, pb, false)\n}\n\n// Marshal takes a protocol buffer message\n// and encodes it into the wire format, writing the result to the\n// Buffer.\n// This is an alternative entry point. It is not necessary to use\n// a Buffer for most applications.\nfunc (p *Buffer) Marshal(pb Message) error {\n\tvar err error\n\tif m, ok := pb.(newMarshaler); ok {\n\t\tsiz := m.XXX_Size()\n\t\tp.grow(siz) // make sure buf has enough capacity\n\t\tp.buf, err = m.XXX_Marshal(p.buf, p.deterministic)\n\t\treturn err\n\t}\n\tif m, ok := pb.(Marshaler); ok {\n\t\t// If the message can marshal itself, let it do it, for compatibility.\n\t\t// NOTE: This is not efficient.\n\t\tb, err := m.Marshal()\n\t\tp.buf = append(p.buf, b...)\n\t\treturn err\n\t}\n\t// in case somehow we didn't generate the wrapper\n\tif pb == nil {\n\t\treturn ErrNil\n\t}\n\tvar info InternalMessageInfo\n\tsiz := info.Size(pb)\n\tp.grow(siz) // make sure buf has enough capacity\n\tp.buf, err = info.Marshal(p.buf, pb, p.deterministic)\n\treturn err\n}\n\n// grow grows the buffer's capacity, if necessary, to guarantee space for\n// another n bytes. After grow(n), at least n bytes can be written to the\n// buffer without another allocation.\nfunc (p *Buffer) grow(n int) {\n\tneed := len(p.buf) + n\n\tif need <= cap(p.buf) {\n\t\treturn\n\t}\n\tnewCap := len(p.buf) * 2\n\tif newCap < need {\n\t\tnewCap = need\n\t}\n\tp.buf = append(make([]byte, 0, newCap), p.buf...)\n}\n"
  },
  {
    "path": "vendor/github.com/golang/protobuf/proto/table_merge.go",
    "content": "// Go support for Protocol Buffers - Google's data interchange format\n//\n// Copyright 2016 The Go Authors.  All rights reserved.\n// https://github.com/golang/protobuf\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\npackage proto\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\t\"strings\"\n\t\"sync\"\n\t\"sync/atomic\"\n)\n\n// Merge merges the src message into dst.\n// This assumes that dst and src of the same type and are non-nil.\nfunc (a *InternalMessageInfo) Merge(dst, src Message) {\n\tmi := atomicLoadMergeInfo(&a.merge)\n\tif mi == nil {\n\t\tmi = getMergeInfo(reflect.TypeOf(dst).Elem())\n\t\tatomicStoreMergeInfo(&a.merge, mi)\n\t}\n\tmi.merge(toPointer(&dst), toPointer(&src))\n}\n\ntype mergeInfo struct {\n\ttyp reflect.Type\n\n\tinitialized int32 // 0: only typ is valid, 1: everything is valid\n\tlock        sync.Mutex\n\n\tfields       []mergeFieldInfo\n\tunrecognized field // Offset of XXX_unrecognized\n}\n\ntype mergeFieldInfo struct {\n\tfield field // Offset of field, guaranteed to be valid\n\n\t// isPointer reports whether the value in the field is a pointer.\n\t// This is true for the following situations:\n\t//\t* Pointer to struct\n\t//\t* Pointer to basic type (proto2 only)\n\t//\t* Slice (first value in slice header is a pointer)\n\t//\t* String (first value in string header is a pointer)\n\tisPointer bool\n\n\t// basicWidth reports the width of the field assuming that it is directly\n\t// embedded in the struct (as is the case for basic types in proto3).\n\t// The possible values are:\n\t// \t0: invalid\n\t//\t1: bool\n\t//\t4: int32, uint32, float32\n\t//\t8: int64, uint64, float64\n\tbasicWidth int\n\n\t// Where dst and src are pointers to the types being merged.\n\tmerge func(dst, src pointer)\n}\n\nvar (\n\tmergeInfoMap  = map[reflect.Type]*mergeInfo{}\n\tmergeInfoLock sync.Mutex\n)\n\nfunc getMergeInfo(t reflect.Type) *mergeInfo {\n\tmergeInfoLock.Lock()\n\tdefer mergeInfoLock.Unlock()\n\tmi := mergeInfoMap[t]\n\tif mi == nil {\n\t\tmi = &mergeInfo{typ: t}\n\t\tmergeInfoMap[t] = mi\n\t}\n\treturn mi\n}\n\n// merge merges src into dst assuming they are both of type *mi.typ.\nfunc (mi *mergeInfo) merge(dst, src pointer) {\n\tif dst.isNil() {\n\t\tpanic(\"proto: nil destination\")\n\t}\n\tif src.isNil() {\n\t\treturn // Nothing to do.\n\t}\n\n\tif atomic.LoadInt32(&mi.initialized) == 0 {\n\t\tmi.computeMergeInfo()\n\t}\n\n\tfor _, fi := range mi.fields {\n\t\tsfp := src.offset(fi.field)\n\n\t\t// As an optimization, we can avoid the merge function call cost\n\t\t// if we know for sure that the source will have no effect\n\t\t// by checking if it is the zero value.\n\t\tif unsafeAllowed {\n\t\t\tif fi.isPointer && sfp.getPointer().isNil() { // Could be slice or string\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif fi.basicWidth > 0 {\n\t\t\t\tswitch {\n\t\t\t\tcase fi.basicWidth == 1 && !*sfp.toBool():\n\t\t\t\t\tcontinue\n\t\t\t\tcase fi.basicWidth == 4 && *sfp.toUint32() == 0:\n\t\t\t\t\tcontinue\n\t\t\t\tcase fi.basicWidth == 8 && *sfp.toUint64() == 0:\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tdfp := dst.offset(fi.field)\n\t\tfi.merge(dfp, sfp)\n\t}\n\n\t// TODO: Make this faster?\n\tout := dst.asPointerTo(mi.typ).Elem()\n\tin := src.asPointerTo(mi.typ).Elem()\n\tif emIn, err := extendable(in.Addr().Interface()); err == nil {\n\t\temOut, _ := extendable(out.Addr().Interface())\n\t\tmIn, muIn := emIn.extensionsRead()\n\t\tif mIn != nil {\n\t\t\tmOut := emOut.extensionsWrite()\n\t\t\tmuIn.Lock()\n\t\t\tmergeExtension(mOut, mIn)\n\t\t\tmuIn.Unlock()\n\t\t}\n\t}\n\n\tif mi.unrecognized.IsValid() {\n\t\tif b := *src.offset(mi.unrecognized).toBytes(); len(b) > 0 {\n\t\t\t*dst.offset(mi.unrecognized).toBytes() = append([]byte(nil), b...)\n\t\t}\n\t}\n}\n\nfunc (mi *mergeInfo) computeMergeInfo() {\n\tmi.lock.Lock()\n\tdefer mi.lock.Unlock()\n\tif mi.initialized != 0 {\n\t\treturn\n\t}\n\tt := mi.typ\n\tn := t.NumField()\n\n\tprops := GetProperties(t)\n\tfor i := 0; i < n; i++ {\n\t\tf := t.Field(i)\n\t\tif strings.HasPrefix(f.Name, \"XXX_\") {\n\t\t\tcontinue\n\t\t}\n\n\t\tmfi := mergeFieldInfo{field: toField(&f)}\n\t\ttf := f.Type\n\n\t\t// As an optimization, we can avoid the merge function call cost\n\t\t// if we know for sure that the source will have no effect\n\t\t// by checking if it is the zero value.\n\t\tif unsafeAllowed {\n\t\t\tswitch tf.Kind() {\n\t\t\tcase reflect.Ptr, reflect.Slice, reflect.String:\n\t\t\t\t// As a special case, we assume slices and strings are pointers\n\t\t\t\t// since we know that the first field in the SliceSlice or\n\t\t\t\t// StringHeader is a data pointer.\n\t\t\t\tmfi.isPointer = true\n\t\t\tcase reflect.Bool:\n\t\t\t\tmfi.basicWidth = 1\n\t\t\tcase reflect.Int32, reflect.Uint32, reflect.Float32:\n\t\t\t\tmfi.basicWidth = 4\n\t\t\tcase reflect.Int64, reflect.Uint64, reflect.Float64:\n\t\t\t\tmfi.basicWidth = 8\n\t\t\t}\n\t\t}\n\n\t\t// Unwrap tf to get at its most basic type.\n\t\tvar isPointer, isSlice bool\n\t\tif tf.Kind() == reflect.Slice && tf.Elem().Kind() != reflect.Uint8 {\n\t\t\tisSlice = true\n\t\t\ttf = tf.Elem()\n\t\t}\n\t\tif tf.Kind() == reflect.Ptr {\n\t\t\tisPointer = true\n\t\t\ttf = tf.Elem()\n\t\t}\n\t\tif isPointer && isSlice && tf.Kind() != reflect.Struct {\n\t\t\tpanic(\"both pointer and slice for basic type in \" + tf.Name())\n\t\t}\n\n\t\tswitch tf.Kind() {\n\t\tcase reflect.Int32:\n\t\t\tswitch {\n\t\t\tcase isSlice: // E.g., []int32\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\t// NOTE: toInt32Slice is not defined (see pointer_reflect.go).\n\t\t\t\t\t/*\n\t\t\t\t\t\tsfsp := src.toInt32Slice()\n\t\t\t\t\t\tif *sfsp != nil {\n\t\t\t\t\t\t\tdfsp := dst.toInt32Slice()\n\t\t\t\t\t\t\t*dfsp = append(*dfsp, *sfsp...)\n\t\t\t\t\t\t\tif *dfsp == nil {\n\t\t\t\t\t\t\t\t*dfsp = []int64{}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t*/\n\t\t\t\t\tsfs := src.getInt32Slice()\n\t\t\t\t\tif sfs != nil {\n\t\t\t\t\t\tdfs := dst.getInt32Slice()\n\t\t\t\t\t\tdfs = append(dfs, sfs...)\n\t\t\t\t\t\tif dfs == nil {\n\t\t\t\t\t\t\tdfs = []int32{}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdst.setInt32Slice(dfs)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tcase isPointer: // E.g., *int32\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\t// NOTE: toInt32Ptr is not defined (see pointer_reflect.go).\n\t\t\t\t\t/*\n\t\t\t\t\t\tsfpp := src.toInt32Ptr()\n\t\t\t\t\t\tif *sfpp != nil {\n\t\t\t\t\t\t\tdfpp := dst.toInt32Ptr()\n\t\t\t\t\t\t\tif *dfpp == nil {\n\t\t\t\t\t\t\t\t*dfpp = Int32(**sfpp)\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t**dfpp = **sfpp\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t*/\n\t\t\t\t\tsfp := src.getInt32Ptr()\n\t\t\t\t\tif sfp != nil {\n\t\t\t\t\t\tdfp := dst.getInt32Ptr()\n\t\t\t\t\t\tif dfp == nil {\n\t\t\t\t\t\t\tdst.setInt32Ptr(*sfp)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t*dfp = *sfp\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tdefault: // E.g., int32\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\tif v := *src.toInt32(); v != 0 {\n\t\t\t\t\t\t*dst.toInt32() = v\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\tcase reflect.Int64:\n\t\t\tswitch {\n\t\t\tcase isSlice: // E.g., []int64\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\tsfsp := src.toInt64Slice()\n\t\t\t\t\tif *sfsp != nil {\n\t\t\t\t\t\tdfsp := dst.toInt64Slice()\n\t\t\t\t\t\t*dfsp = append(*dfsp, *sfsp...)\n\t\t\t\t\t\tif *dfsp == nil {\n\t\t\t\t\t\t\t*dfsp = []int64{}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tcase isPointer: // E.g., *int64\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\tsfpp := src.toInt64Ptr()\n\t\t\t\t\tif *sfpp != nil {\n\t\t\t\t\t\tdfpp := dst.toInt64Ptr()\n\t\t\t\t\t\tif *dfpp == nil {\n\t\t\t\t\t\t\t*dfpp = Int64(**sfpp)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t**dfpp = **sfpp\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tdefault: // E.g., int64\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\tif v := *src.toInt64(); v != 0 {\n\t\t\t\t\t\t*dst.toInt64() = v\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\tcase reflect.Uint32:\n\t\t\tswitch {\n\t\t\tcase isSlice: // E.g., []uint32\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\tsfsp := src.toUint32Slice()\n\t\t\t\t\tif *sfsp != nil {\n\t\t\t\t\t\tdfsp := dst.toUint32Slice()\n\t\t\t\t\t\t*dfsp = append(*dfsp, *sfsp...)\n\t\t\t\t\t\tif *dfsp == nil {\n\t\t\t\t\t\t\t*dfsp = []uint32{}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tcase isPointer: // E.g., *uint32\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\tsfpp := src.toUint32Ptr()\n\t\t\t\t\tif *sfpp != nil {\n\t\t\t\t\t\tdfpp := dst.toUint32Ptr()\n\t\t\t\t\t\tif *dfpp == nil {\n\t\t\t\t\t\t\t*dfpp = Uint32(**sfpp)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t**dfpp = **sfpp\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tdefault: // E.g., uint32\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\tif v := *src.toUint32(); v != 0 {\n\t\t\t\t\t\t*dst.toUint32() = v\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\tcase reflect.Uint64:\n\t\t\tswitch {\n\t\t\tcase isSlice: // E.g., []uint64\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\tsfsp := src.toUint64Slice()\n\t\t\t\t\tif *sfsp != nil {\n\t\t\t\t\t\tdfsp := dst.toUint64Slice()\n\t\t\t\t\t\t*dfsp = append(*dfsp, *sfsp...)\n\t\t\t\t\t\tif *dfsp == nil {\n\t\t\t\t\t\t\t*dfsp = []uint64{}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tcase isPointer: // E.g., *uint64\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\tsfpp := src.toUint64Ptr()\n\t\t\t\t\tif *sfpp != nil {\n\t\t\t\t\t\tdfpp := dst.toUint64Ptr()\n\t\t\t\t\t\tif *dfpp == nil {\n\t\t\t\t\t\t\t*dfpp = Uint64(**sfpp)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t**dfpp = **sfpp\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tdefault: // E.g., uint64\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\tif v := *src.toUint64(); v != 0 {\n\t\t\t\t\t\t*dst.toUint64() = v\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\tcase reflect.Float32:\n\t\t\tswitch {\n\t\t\tcase isSlice: // E.g., []float32\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\tsfsp := src.toFloat32Slice()\n\t\t\t\t\tif *sfsp != nil {\n\t\t\t\t\t\tdfsp := dst.toFloat32Slice()\n\t\t\t\t\t\t*dfsp = append(*dfsp, *sfsp...)\n\t\t\t\t\t\tif *dfsp == nil {\n\t\t\t\t\t\t\t*dfsp = []float32{}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tcase isPointer: // E.g., *float32\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\tsfpp := src.toFloat32Ptr()\n\t\t\t\t\tif *sfpp != nil {\n\t\t\t\t\t\tdfpp := dst.toFloat32Ptr()\n\t\t\t\t\t\tif *dfpp == nil {\n\t\t\t\t\t\t\t*dfpp = Float32(**sfpp)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t**dfpp = **sfpp\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tdefault: // E.g., float32\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\tif v := *src.toFloat32(); v != 0 {\n\t\t\t\t\t\t*dst.toFloat32() = v\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\tcase reflect.Float64:\n\t\t\tswitch {\n\t\t\tcase isSlice: // E.g., []float64\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\tsfsp := src.toFloat64Slice()\n\t\t\t\t\tif *sfsp != nil {\n\t\t\t\t\t\tdfsp := dst.toFloat64Slice()\n\t\t\t\t\t\t*dfsp = append(*dfsp, *sfsp...)\n\t\t\t\t\t\tif *dfsp == nil {\n\t\t\t\t\t\t\t*dfsp = []float64{}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tcase isPointer: // E.g., *float64\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\tsfpp := src.toFloat64Ptr()\n\t\t\t\t\tif *sfpp != nil {\n\t\t\t\t\t\tdfpp := dst.toFloat64Ptr()\n\t\t\t\t\t\tif *dfpp == nil {\n\t\t\t\t\t\t\t*dfpp = Float64(**sfpp)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t**dfpp = **sfpp\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tdefault: // E.g., float64\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\tif v := *src.toFloat64(); v != 0 {\n\t\t\t\t\t\t*dst.toFloat64() = v\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\tcase reflect.Bool:\n\t\t\tswitch {\n\t\t\tcase isSlice: // E.g., []bool\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\tsfsp := src.toBoolSlice()\n\t\t\t\t\tif *sfsp != nil {\n\t\t\t\t\t\tdfsp := dst.toBoolSlice()\n\t\t\t\t\t\t*dfsp = append(*dfsp, *sfsp...)\n\t\t\t\t\t\tif *dfsp == nil {\n\t\t\t\t\t\t\t*dfsp = []bool{}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tcase isPointer: // E.g., *bool\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\tsfpp := src.toBoolPtr()\n\t\t\t\t\tif *sfpp != nil {\n\t\t\t\t\t\tdfpp := dst.toBoolPtr()\n\t\t\t\t\t\tif *dfpp == nil {\n\t\t\t\t\t\t\t*dfpp = Bool(**sfpp)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t**dfpp = **sfpp\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tdefault: // E.g., bool\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\tif v := *src.toBool(); v {\n\t\t\t\t\t\t*dst.toBool() = v\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\tcase reflect.String:\n\t\t\tswitch {\n\t\t\tcase isSlice: // E.g., []string\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\tsfsp := src.toStringSlice()\n\t\t\t\t\tif *sfsp != nil {\n\t\t\t\t\t\tdfsp := dst.toStringSlice()\n\t\t\t\t\t\t*dfsp = append(*dfsp, *sfsp...)\n\t\t\t\t\t\tif *dfsp == nil {\n\t\t\t\t\t\t\t*dfsp = []string{}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tcase isPointer: // E.g., *string\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\tsfpp := src.toStringPtr()\n\t\t\t\t\tif *sfpp != nil {\n\t\t\t\t\t\tdfpp := dst.toStringPtr()\n\t\t\t\t\t\tif *dfpp == nil {\n\t\t\t\t\t\t\t*dfpp = String(**sfpp)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t**dfpp = **sfpp\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tdefault: // E.g., string\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\tif v := *src.toString(); v != \"\" {\n\t\t\t\t\t\t*dst.toString() = v\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\tcase reflect.Slice:\n\t\t\tisProto3 := props.Prop[i].proto3\n\t\t\tswitch {\n\t\t\tcase isPointer:\n\t\t\t\tpanic(\"bad pointer in byte slice case in \" + tf.Name())\n\t\t\tcase tf.Elem().Kind() != reflect.Uint8:\n\t\t\t\tpanic(\"bad element kind in byte slice case in \" + tf.Name())\n\t\t\tcase isSlice: // E.g., [][]byte\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\tsbsp := src.toBytesSlice()\n\t\t\t\t\tif *sbsp != nil {\n\t\t\t\t\t\tdbsp := dst.toBytesSlice()\n\t\t\t\t\t\tfor _, sb := range *sbsp {\n\t\t\t\t\t\t\tif sb == nil {\n\t\t\t\t\t\t\t\t*dbsp = append(*dbsp, nil)\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t*dbsp = append(*dbsp, append([]byte{}, sb...))\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif *dbsp == nil {\n\t\t\t\t\t\t\t*dbsp = [][]byte{}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tdefault: // E.g., []byte\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\tsbp := src.toBytes()\n\t\t\t\t\tif *sbp != nil {\n\t\t\t\t\t\tdbp := dst.toBytes()\n\t\t\t\t\t\tif !isProto3 || len(*sbp) > 0 {\n\t\t\t\t\t\t\t*dbp = append([]byte{}, *sbp...)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\tcase reflect.Struct:\n\t\t\tswitch {\n\t\t\tcase !isPointer:\n\t\t\t\tpanic(fmt.Sprintf(\"message field %s without pointer\", tf))\n\t\t\tcase isSlice: // E.g., []*pb.T\n\t\t\t\tmi := getMergeInfo(tf)\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\tsps := src.getPointerSlice()\n\t\t\t\t\tif sps != nil {\n\t\t\t\t\t\tdps := dst.getPointerSlice()\n\t\t\t\t\t\tfor _, sp := range sps {\n\t\t\t\t\t\t\tvar dp pointer\n\t\t\t\t\t\t\tif !sp.isNil() {\n\t\t\t\t\t\t\t\tdp = valToPointer(reflect.New(tf))\n\t\t\t\t\t\t\t\tmi.merge(dp, sp)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdps = append(dps, dp)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif dps == nil {\n\t\t\t\t\t\t\tdps = []pointer{}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdst.setPointerSlice(dps)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tdefault: // E.g., *pb.T\n\t\t\t\tmi := getMergeInfo(tf)\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\tsp := src.getPointer()\n\t\t\t\t\tif !sp.isNil() {\n\t\t\t\t\t\tdp := dst.getPointer()\n\t\t\t\t\t\tif dp.isNil() {\n\t\t\t\t\t\t\tdp = valToPointer(reflect.New(tf))\n\t\t\t\t\t\t\tdst.setPointer(dp)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmi.merge(dp, sp)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\tcase reflect.Map:\n\t\t\tswitch {\n\t\t\tcase isPointer || isSlice:\n\t\t\t\tpanic(\"bad pointer or slice in map case in \" + tf.Name())\n\t\t\tdefault: // E.g., map[K]V\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\tsm := src.asPointerTo(tf).Elem()\n\t\t\t\t\tif sm.Len() == 0 {\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tdm := dst.asPointerTo(tf).Elem()\n\t\t\t\t\tif dm.IsNil() {\n\t\t\t\t\t\tdm.Set(reflect.MakeMap(tf))\n\t\t\t\t\t}\n\n\t\t\t\t\tswitch tf.Elem().Kind() {\n\t\t\t\t\tcase reflect.Ptr: // Proto struct (e.g., *T)\n\t\t\t\t\t\tfor _, key := range sm.MapKeys() {\n\t\t\t\t\t\t\tval := sm.MapIndex(key)\n\t\t\t\t\t\t\tval = reflect.ValueOf(Clone(val.Interface().(Message)))\n\t\t\t\t\t\t\tdm.SetMapIndex(key, val)\n\t\t\t\t\t\t}\n\t\t\t\t\tcase reflect.Slice: // E.g. Bytes type (e.g., []byte)\n\t\t\t\t\t\tfor _, key := range sm.MapKeys() {\n\t\t\t\t\t\t\tval := sm.MapIndex(key)\n\t\t\t\t\t\t\tval = reflect.ValueOf(append([]byte{}, val.Bytes()...))\n\t\t\t\t\t\t\tdm.SetMapIndex(key, val)\n\t\t\t\t\t\t}\n\t\t\t\t\tdefault: // Basic type (e.g., string)\n\t\t\t\t\t\tfor _, key := range sm.MapKeys() {\n\t\t\t\t\t\t\tval := sm.MapIndex(key)\n\t\t\t\t\t\t\tdm.SetMapIndex(key, val)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\tcase reflect.Interface:\n\t\t\t// Must be oneof field.\n\t\t\tswitch {\n\t\t\tcase isPointer || isSlice:\n\t\t\t\tpanic(\"bad pointer or slice in interface case in \" + tf.Name())\n\t\t\tdefault: // E.g., interface{}\n\t\t\t\t// TODO: Make this faster?\n\t\t\t\tmfi.merge = func(dst, src pointer) {\n\t\t\t\t\tsu := src.asPointerTo(tf).Elem()\n\t\t\t\t\tif !su.IsNil() {\n\t\t\t\t\t\tdu := dst.asPointerTo(tf).Elem()\n\t\t\t\t\t\ttyp := su.Elem().Type()\n\t\t\t\t\t\tif du.IsNil() || du.Elem().Type() != typ {\n\t\t\t\t\t\t\tdu.Set(reflect.New(typ.Elem())) // Initialize interface if empty\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsv := su.Elem().Elem().Field(0)\n\t\t\t\t\t\tif sv.Kind() == reflect.Ptr && sv.IsNil() {\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdv := du.Elem().Elem().Field(0)\n\t\t\t\t\t\tif dv.Kind() == reflect.Ptr && dv.IsNil() {\n\t\t\t\t\t\t\tdv.Set(reflect.New(sv.Type().Elem())) // Initialize proto message if empty\n\t\t\t\t\t\t}\n\t\t\t\t\t\tswitch sv.Type().Kind() {\n\t\t\t\t\t\tcase reflect.Ptr: // Proto struct (e.g., *T)\n\t\t\t\t\t\t\tMerge(dv.Interface().(Message), sv.Interface().(Message))\n\t\t\t\t\t\tcase reflect.Slice: // E.g. Bytes type (e.g., []byte)\n\t\t\t\t\t\t\tdv.Set(reflect.ValueOf(append([]byte{}, sv.Bytes()...)))\n\t\t\t\t\t\tdefault: // Basic type (e.g., string)\n\t\t\t\t\t\t\tdv.Set(sv)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\tdefault:\n\t\t\tpanic(fmt.Sprintf(\"merger not found for type:%s\", tf))\n\t\t}\n\t\tmi.fields = append(mi.fields, mfi)\n\t}\n\n\tmi.unrecognized = invalidField\n\tif f, ok := t.FieldByName(\"XXX_unrecognized\"); ok {\n\t\tif f.Type != reflect.TypeOf([]byte{}) {\n\t\t\tpanic(\"expected XXX_unrecognized to be of type []byte\")\n\t\t}\n\t\tmi.unrecognized = toField(&f)\n\t}\n\n\tatomic.StoreInt32(&mi.initialized, 1)\n}\n"
  },
  {
    "path": "vendor/github.com/golang/protobuf/proto/table_unmarshal.go",
    "content": "// Go support for Protocol Buffers - Google's data interchange format\n//\n// Copyright 2016 The Go Authors.  All rights reserved.\n// https://github.com/golang/protobuf\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\npackage proto\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"math\"\n\t\"reflect\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\t\"sync/atomic\"\n\t\"unicode/utf8\"\n)\n\n// Unmarshal is the entry point from the generated .pb.go files.\n// This function is not intended to be used by non-generated code.\n// This function is not subject to any compatibility guarantee.\n// msg contains a pointer to a protocol buffer struct.\n// b is the data to be unmarshaled into the protocol buffer.\n// a is a pointer to a place to store cached unmarshal information.\nfunc (a *InternalMessageInfo) Unmarshal(msg Message, b []byte) error {\n\t// Load the unmarshal information for this message type.\n\t// The atomic load ensures memory consistency.\n\tu := atomicLoadUnmarshalInfo(&a.unmarshal)\n\tif u == nil {\n\t\t// Slow path: find unmarshal info for msg, update a with it.\n\t\tu = getUnmarshalInfo(reflect.TypeOf(msg).Elem())\n\t\tatomicStoreUnmarshalInfo(&a.unmarshal, u)\n\t}\n\t// Then do the unmarshaling.\n\terr := u.unmarshal(toPointer(&msg), b)\n\treturn err\n}\n\ntype unmarshalInfo struct {\n\ttyp reflect.Type // type of the protobuf struct\n\n\t// 0 = only typ field is initialized\n\t// 1 = completely initialized\n\tinitialized     int32\n\tlock            sync.Mutex                    // prevents double initialization\n\tdense           []unmarshalFieldInfo          // fields indexed by tag #\n\tsparse          map[uint64]unmarshalFieldInfo // fields indexed by tag #\n\treqFields       []string                      // names of required fields\n\treqMask         uint64                        // 1<<len(reqFields)-1\n\tunrecognized    field                         // offset of []byte to put unrecognized data (or invalidField if we should throw it away)\n\textensions      field                         // offset of extensions field (of type proto.XXX_InternalExtensions), or invalidField if it does not exist\n\toldExtensions   field                         // offset of old-form extensions field (of type map[int]Extension)\n\textensionRanges []ExtensionRange              // if non-nil, implies extensions field is valid\n\tisMessageSet    bool                          // if true, implies extensions field is valid\n}\n\n// An unmarshaler takes a stream of bytes and a pointer to a field of a message.\n// It decodes the field, stores it at f, and returns the unused bytes.\n// w is the wire encoding.\n// b is the data after the tag and wire encoding have been read.\ntype unmarshaler func(b []byte, f pointer, w int) ([]byte, error)\n\ntype unmarshalFieldInfo struct {\n\t// location of the field in the proto message structure.\n\tfield field\n\n\t// function to unmarshal the data for the field.\n\tunmarshal unmarshaler\n\n\t// if a required field, contains a single set bit at this field's index in the required field list.\n\treqMask uint64\n\n\tname string // name of the field, for error reporting\n}\n\nvar (\n\tunmarshalInfoMap  = map[reflect.Type]*unmarshalInfo{}\n\tunmarshalInfoLock sync.Mutex\n)\n\n// getUnmarshalInfo returns the data structure which can be\n// subsequently used to unmarshal a message of the given type.\n// t is the type of the message (note: not pointer to message).\nfunc getUnmarshalInfo(t reflect.Type) *unmarshalInfo {\n\t// It would be correct to return a new unmarshalInfo\n\t// unconditionally. We would end up allocating one\n\t// per occurrence of that type as a message or submessage.\n\t// We use a cache here just to reduce memory usage.\n\tunmarshalInfoLock.Lock()\n\tdefer unmarshalInfoLock.Unlock()\n\tu := unmarshalInfoMap[t]\n\tif u == nil {\n\t\tu = &unmarshalInfo{typ: t}\n\t\t// Note: we just set the type here. The rest of the fields\n\t\t// will be initialized on first use.\n\t\tunmarshalInfoMap[t] = u\n\t}\n\treturn u\n}\n\n// unmarshal does the main work of unmarshaling a message.\n// u provides type information used to unmarshal the message.\n// m is a pointer to a protocol buffer message.\n// b is a byte stream to unmarshal into m.\n// This is top routine used when recursively unmarshaling submessages.\nfunc (u *unmarshalInfo) unmarshal(m pointer, b []byte) error {\n\tif atomic.LoadInt32(&u.initialized) == 0 {\n\t\tu.computeUnmarshalInfo()\n\t}\n\tif u.isMessageSet {\n\t\treturn unmarshalMessageSet(b, m.offset(u.extensions).toExtensions())\n\t}\n\tvar reqMask uint64 // bitmask of required fields we've seen.\n\tvar errLater error\n\tfor len(b) > 0 {\n\t\t// Read tag and wire type.\n\t\t// Special case 1 and 2 byte varints.\n\t\tvar x uint64\n\t\tif b[0] < 128 {\n\t\t\tx = uint64(b[0])\n\t\t\tb = b[1:]\n\t\t} else if len(b) >= 2 && b[1] < 128 {\n\t\t\tx = uint64(b[0]&0x7f) + uint64(b[1])<<7\n\t\t\tb = b[2:]\n\t\t} else {\n\t\t\tvar n int\n\t\t\tx, n = decodeVarint(b)\n\t\t\tif n == 0 {\n\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb = b[n:]\n\t\t}\n\t\ttag := x >> 3\n\t\twire := int(x) & 7\n\n\t\t// Dispatch on the tag to one of the unmarshal* functions below.\n\t\tvar f unmarshalFieldInfo\n\t\tif tag < uint64(len(u.dense)) {\n\t\t\tf = u.dense[tag]\n\t\t} else {\n\t\t\tf = u.sparse[tag]\n\t\t}\n\t\tif fn := f.unmarshal; fn != nil {\n\t\t\tvar err error\n\t\t\tb, err = fn(b, m.offset(f.field), wire)\n\t\t\tif err == nil {\n\t\t\t\treqMask |= f.reqMask\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif r, ok := err.(*RequiredNotSetError); ok {\n\t\t\t\t// Remember this error, but keep parsing. We need to produce\n\t\t\t\t// a full parse even if a required field is missing.\n\t\t\t\tif errLater == nil {\n\t\t\t\t\terrLater = r\n\t\t\t\t}\n\t\t\t\treqMask |= f.reqMask\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif err != errInternalBadWireType {\n\t\t\t\tif err == errInvalidUTF8 {\n\t\t\t\t\tif errLater == nil {\n\t\t\t\t\t\tfullName := revProtoTypes[reflect.PtrTo(u.typ)] + \".\" + f.name\n\t\t\t\t\t\terrLater = &invalidUTF8Error{fullName}\n\t\t\t\t\t}\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\treturn err\n\t\t\t}\n\t\t\t// Fragments with bad wire type are treated as unknown fields.\n\t\t}\n\n\t\t// Unknown tag.\n\t\tif !u.unrecognized.IsValid() {\n\t\t\t// Don't keep unrecognized data; just skip it.\n\t\t\tvar err error\n\t\t\tb, err = skipField(b, wire)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\t// Keep unrecognized data around.\n\t\t// maybe in extensions, maybe in the unrecognized field.\n\t\tz := m.offset(u.unrecognized).toBytes()\n\t\tvar emap map[int32]Extension\n\t\tvar e Extension\n\t\tfor _, r := range u.extensionRanges {\n\t\t\tif uint64(r.Start) <= tag && tag <= uint64(r.End) {\n\t\t\t\tif u.extensions.IsValid() {\n\t\t\t\t\tmp := m.offset(u.extensions).toExtensions()\n\t\t\t\t\temap = mp.extensionsWrite()\n\t\t\t\t\te = emap[int32(tag)]\n\t\t\t\t\tz = &e.enc\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tif u.oldExtensions.IsValid() {\n\t\t\t\t\tp := m.offset(u.oldExtensions).toOldExtensions()\n\t\t\t\t\temap = *p\n\t\t\t\t\tif emap == nil {\n\t\t\t\t\t\temap = map[int32]Extension{}\n\t\t\t\t\t\t*p = emap\n\t\t\t\t\t}\n\t\t\t\t\te = emap[int32(tag)]\n\t\t\t\t\tz = &e.enc\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tpanic(\"no extensions field available\")\n\t\t\t}\n\t\t}\n\n\t\t// Use wire type to skip data.\n\t\tvar err error\n\t\tb0 := b\n\t\tb, err = skipField(b, wire)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t*z = encodeVarint(*z, tag<<3|uint64(wire))\n\t\t*z = append(*z, b0[:len(b0)-len(b)]...)\n\n\t\tif emap != nil {\n\t\t\temap[int32(tag)] = e\n\t\t}\n\t}\n\tif reqMask != u.reqMask && errLater == nil {\n\t\t// A required field of this message is missing.\n\t\tfor _, n := range u.reqFields {\n\t\t\tif reqMask&1 == 0 {\n\t\t\t\terrLater = &RequiredNotSetError{n}\n\t\t\t}\n\t\t\treqMask >>= 1\n\t\t}\n\t}\n\treturn errLater\n}\n\n// computeUnmarshalInfo fills in u with information for use\n// in unmarshaling protocol buffers of type u.typ.\nfunc (u *unmarshalInfo) computeUnmarshalInfo() {\n\tu.lock.Lock()\n\tdefer u.lock.Unlock()\n\tif u.initialized != 0 {\n\t\treturn\n\t}\n\tt := u.typ\n\tn := t.NumField()\n\n\t// Set up the \"not found\" value for the unrecognized byte buffer.\n\t// This is the default for proto3.\n\tu.unrecognized = invalidField\n\tu.extensions = invalidField\n\tu.oldExtensions = invalidField\n\n\t// List of the generated type and offset for each oneof field.\n\ttype oneofField struct {\n\t\tityp  reflect.Type // interface type of oneof field\n\t\tfield field        // offset in containing message\n\t}\n\tvar oneofFields []oneofField\n\n\tfor i := 0; i < n; i++ {\n\t\tf := t.Field(i)\n\t\tif f.Name == \"XXX_unrecognized\" {\n\t\t\t// The byte slice used to hold unrecognized input is special.\n\t\t\tif f.Type != reflect.TypeOf(([]byte)(nil)) {\n\t\t\t\tpanic(\"bad type for XXX_unrecognized field: \" + f.Type.Name())\n\t\t\t}\n\t\t\tu.unrecognized = toField(&f)\n\t\t\tcontinue\n\t\t}\n\t\tif f.Name == \"XXX_InternalExtensions\" {\n\t\t\t// Ditto here.\n\t\t\tif f.Type != reflect.TypeOf(XXX_InternalExtensions{}) {\n\t\t\t\tpanic(\"bad type for XXX_InternalExtensions field: \" + f.Type.Name())\n\t\t\t}\n\t\t\tu.extensions = toField(&f)\n\t\t\tif f.Tag.Get(\"protobuf_messageset\") == \"1\" {\n\t\t\t\tu.isMessageSet = true\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\tif f.Name == \"XXX_extensions\" {\n\t\t\t// An older form of the extensions field.\n\t\t\tif f.Type != reflect.TypeOf((map[int32]Extension)(nil)) {\n\t\t\t\tpanic(\"bad type for XXX_extensions field: \" + f.Type.Name())\n\t\t\t}\n\t\t\tu.oldExtensions = toField(&f)\n\t\t\tcontinue\n\t\t}\n\t\tif f.Name == \"XXX_NoUnkeyedLiteral\" || f.Name == \"XXX_sizecache\" {\n\t\t\tcontinue\n\t\t}\n\n\t\toneof := f.Tag.Get(\"protobuf_oneof\")\n\t\tif oneof != \"\" {\n\t\t\toneofFields = append(oneofFields, oneofField{f.Type, toField(&f)})\n\t\t\t// The rest of oneof processing happens below.\n\t\t\tcontinue\n\t\t}\n\n\t\ttags := f.Tag.Get(\"protobuf\")\n\t\ttagArray := strings.Split(tags, \",\")\n\t\tif len(tagArray) < 2 {\n\t\t\tpanic(\"protobuf tag not enough fields in \" + t.Name() + \".\" + f.Name + \": \" + tags)\n\t\t}\n\t\ttag, err := strconv.Atoi(tagArray[1])\n\t\tif err != nil {\n\t\t\tpanic(\"protobuf tag field not an integer: \" + tagArray[1])\n\t\t}\n\n\t\tname := \"\"\n\t\tfor _, tag := range tagArray[3:] {\n\t\t\tif strings.HasPrefix(tag, \"name=\") {\n\t\t\t\tname = tag[5:]\n\t\t\t}\n\t\t}\n\n\t\t// Extract unmarshaling function from the field (its type and tags).\n\t\tunmarshal := fieldUnmarshaler(&f)\n\n\t\t// Required field?\n\t\tvar reqMask uint64\n\t\tif tagArray[2] == \"req\" {\n\t\t\tbit := len(u.reqFields)\n\t\t\tu.reqFields = append(u.reqFields, name)\n\t\t\treqMask = uint64(1) << uint(bit)\n\t\t\t// TODO: if we have more than 64 required fields, we end up\n\t\t\t// not verifying that all required fields are present.\n\t\t\t// Fix this, perhaps using a count of required fields?\n\t\t}\n\n\t\t// Store the info in the correct slot in the message.\n\t\tu.setTag(tag, toField(&f), unmarshal, reqMask, name)\n\t}\n\n\t// Find any types associated with oneof fields.\n\tvar oneofImplementers []interface{}\n\tswitch m := reflect.Zero(reflect.PtrTo(t)).Interface().(type) {\n\tcase oneofFuncsIface:\n\t\t_, _, _, oneofImplementers = m.XXX_OneofFuncs()\n\tcase oneofWrappersIface:\n\t\toneofImplementers = m.XXX_OneofWrappers()\n\t}\n\tfor _, v := range oneofImplementers {\n\t\ttptr := reflect.TypeOf(v) // *Msg_X\n\t\ttyp := tptr.Elem()        // Msg_X\n\n\t\tf := typ.Field(0) // oneof implementers have one field\n\t\tbaseUnmarshal := fieldUnmarshaler(&f)\n\t\ttags := strings.Split(f.Tag.Get(\"protobuf\"), \",\")\n\t\tfieldNum, err := strconv.Atoi(tags[1])\n\t\tif err != nil {\n\t\t\tpanic(\"protobuf tag field not an integer: \" + tags[1])\n\t\t}\n\t\tvar name string\n\t\tfor _, tag := range tags {\n\t\t\tif strings.HasPrefix(tag, \"name=\") {\n\t\t\t\tname = strings.TrimPrefix(tag, \"name=\")\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\t// Find the oneof field that this struct implements.\n\t\t// Might take O(n^2) to process all of the oneofs, but who cares.\n\t\tfor _, of := range oneofFields {\n\t\t\tif tptr.Implements(of.ityp) {\n\t\t\t\t// We have found the corresponding interface for this struct.\n\t\t\t\t// That lets us know where this struct should be stored\n\t\t\t\t// when we encounter it during unmarshaling.\n\t\t\t\tunmarshal := makeUnmarshalOneof(typ, of.ityp, baseUnmarshal)\n\t\t\t\tu.setTag(fieldNum, of.field, unmarshal, 0, name)\n\t\t\t}\n\t\t}\n\n\t}\n\n\t// Get extension ranges, if any.\n\tfn := reflect.Zero(reflect.PtrTo(t)).MethodByName(\"ExtensionRangeArray\")\n\tif fn.IsValid() {\n\t\tif !u.extensions.IsValid() && !u.oldExtensions.IsValid() {\n\t\t\tpanic(\"a message with extensions, but no extensions field in \" + t.Name())\n\t\t}\n\t\tu.extensionRanges = fn.Call(nil)[0].Interface().([]ExtensionRange)\n\t}\n\n\t// Explicitly disallow tag 0. This will ensure we flag an error\n\t// when decoding a buffer of all zeros. Without this code, we\n\t// would decode and skip an all-zero buffer of even length.\n\t// [0 0] is [tag=0/wiretype=varint varint-encoded-0].\n\tu.setTag(0, zeroField, func(b []byte, f pointer, w int) ([]byte, error) {\n\t\treturn nil, fmt.Errorf(\"proto: %s: illegal tag 0 (wire type %d)\", t, w)\n\t}, 0, \"\")\n\n\t// Set mask for required field check.\n\tu.reqMask = uint64(1)<<uint(len(u.reqFields)) - 1\n\n\tatomic.StoreInt32(&u.initialized, 1)\n}\n\n// setTag stores the unmarshal information for the given tag.\n// tag = tag # for field\n// field/unmarshal = unmarshal info for that field.\n// reqMask = if required, bitmask for field position in required field list. 0 otherwise.\n// name = short name of the field.\nfunc (u *unmarshalInfo) setTag(tag int, field field, unmarshal unmarshaler, reqMask uint64, name string) {\n\ti := unmarshalFieldInfo{field: field, unmarshal: unmarshal, reqMask: reqMask, name: name}\n\tn := u.typ.NumField()\n\tif tag >= 0 && (tag < 16 || tag < 2*n) { // TODO: what are the right numbers here?\n\t\tfor len(u.dense) <= tag {\n\t\t\tu.dense = append(u.dense, unmarshalFieldInfo{})\n\t\t}\n\t\tu.dense[tag] = i\n\t\treturn\n\t}\n\tif u.sparse == nil {\n\t\tu.sparse = map[uint64]unmarshalFieldInfo{}\n\t}\n\tu.sparse[uint64(tag)] = i\n}\n\n// fieldUnmarshaler returns an unmarshaler for the given field.\nfunc fieldUnmarshaler(f *reflect.StructField) unmarshaler {\n\tif f.Type.Kind() == reflect.Map {\n\t\treturn makeUnmarshalMap(f)\n\t}\n\treturn typeUnmarshaler(f.Type, f.Tag.Get(\"protobuf\"))\n}\n\n// typeUnmarshaler returns an unmarshaler for the given field type / field tag pair.\nfunc typeUnmarshaler(t reflect.Type, tags string) unmarshaler {\n\ttagArray := strings.Split(tags, \",\")\n\tencoding := tagArray[0]\n\tname := \"unknown\"\n\tproto3 := false\n\tvalidateUTF8 := true\n\tfor _, tag := range tagArray[3:] {\n\t\tif strings.HasPrefix(tag, \"name=\") {\n\t\t\tname = tag[5:]\n\t\t}\n\t\tif tag == \"proto3\" {\n\t\t\tproto3 = true\n\t\t}\n\t}\n\tvalidateUTF8 = validateUTF8 && proto3\n\n\t// Figure out packaging (pointer, slice, or both)\n\tslice := false\n\tpointer := false\n\tif t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8 {\n\t\tslice = true\n\t\tt = t.Elem()\n\t}\n\tif t.Kind() == reflect.Ptr {\n\t\tpointer = true\n\t\tt = t.Elem()\n\t}\n\n\t// We'll never have both pointer and slice for basic types.\n\tif pointer && slice && t.Kind() != reflect.Struct {\n\t\tpanic(\"both pointer and slice for basic type in \" + t.Name())\n\t}\n\n\tswitch t.Kind() {\n\tcase reflect.Bool:\n\t\tif pointer {\n\t\t\treturn unmarshalBoolPtr\n\t\t}\n\t\tif slice {\n\t\t\treturn unmarshalBoolSlice\n\t\t}\n\t\treturn unmarshalBoolValue\n\tcase reflect.Int32:\n\t\tswitch encoding {\n\t\tcase \"fixed32\":\n\t\t\tif pointer {\n\t\t\t\treturn unmarshalFixedS32Ptr\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\treturn unmarshalFixedS32Slice\n\t\t\t}\n\t\t\treturn unmarshalFixedS32Value\n\t\tcase \"varint\":\n\t\t\t// this could be int32 or enum\n\t\t\tif pointer {\n\t\t\t\treturn unmarshalInt32Ptr\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\treturn unmarshalInt32Slice\n\t\t\t}\n\t\t\treturn unmarshalInt32Value\n\t\tcase \"zigzag32\":\n\t\t\tif pointer {\n\t\t\t\treturn unmarshalSint32Ptr\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\treturn unmarshalSint32Slice\n\t\t\t}\n\t\t\treturn unmarshalSint32Value\n\t\t}\n\tcase reflect.Int64:\n\t\tswitch encoding {\n\t\tcase \"fixed64\":\n\t\t\tif pointer {\n\t\t\t\treturn unmarshalFixedS64Ptr\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\treturn unmarshalFixedS64Slice\n\t\t\t}\n\t\t\treturn unmarshalFixedS64Value\n\t\tcase \"varint\":\n\t\t\tif pointer {\n\t\t\t\treturn unmarshalInt64Ptr\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\treturn unmarshalInt64Slice\n\t\t\t}\n\t\t\treturn unmarshalInt64Value\n\t\tcase \"zigzag64\":\n\t\t\tif pointer {\n\t\t\t\treturn unmarshalSint64Ptr\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\treturn unmarshalSint64Slice\n\t\t\t}\n\t\t\treturn unmarshalSint64Value\n\t\t}\n\tcase reflect.Uint32:\n\t\tswitch encoding {\n\t\tcase \"fixed32\":\n\t\t\tif pointer {\n\t\t\t\treturn unmarshalFixed32Ptr\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\treturn unmarshalFixed32Slice\n\t\t\t}\n\t\t\treturn unmarshalFixed32Value\n\t\tcase \"varint\":\n\t\t\tif pointer {\n\t\t\t\treturn unmarshalUint32Ptr\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\treturn unmarshalUint32Slice\n\t\t\t}\n\t\t\treturn unmarshalUint32Value\n\t\t}\n\tcase reflect.Uint64:\n\t\tswitch encoding {\n\t\tcase \"fixed64\":\n\t\t\tif pointer {\n\t\t\t\treturn unmarshalFixed64Ptr\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\treturn unmarshalFixed64Slice\n\t\t\t}\n\t\t\treturn unmarshalFixed64Value\n\t\tcase \"varint\":\n\t\t\tif pointer {\n\t\t\t\treturn unmarshalUint64Ptr\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\treturn unmarshalUint64Slice\n\t\t\t}\n\t\t\treturn unmarshalUint64Value\n\t\t}\n\tcase reflect.Float32:\n\t\tif pointer {\n\t\t\treturn unmarshalFloat32Ptr\n\t\t}\n\t\tif slice {\n\t\t\treturn unmarshalFloat32Slice\n\t\t}\n\t\treturn unmarshalFloat32Value\n\tcase reflect.Float64:\n\t\tif pointer {\n\t\t\treturn unmarshalFloat64Ptr\n\t\t}\n\t\tif slice {\n\t\t\treturn unmarshalFloat64Slice\n\t\t}\n\t\treturn unmarshalFloat64Value\n\tcase reflect.Map:\n\t\tpanic(\"map type in typeUnmarshaler in \" + t.Name())\n\tcase reflect.Slice:\n\t\tif pointer {\n\t\t\tpanic(\"bad pointer in slice case in \" + t.Name())\n\t\t}\n\t\tif slice {\n\t\t\treturn unmarshalBytesSlice\n\t\t}\n\t\treturn unmarshalBytesValue\n\tcase reflect.String:\n\t\tif validateUTF8 {\n\t\t\tif pointer {\n\t\t\t\treturn unmarshalUTF8StringPtr\n\t\t\t}\n\t\t\tif slice {\n\t\t\t\treturn unmarshalUTF8StringSlice\n\t\t\t}\n\t\t\treturn unmarshalUTF8StringValue\n\t\t}\n\t\tif pointer {\n\t\t\treturn unmarshalStringPtr\n\t\t}\n\t\tif slice {\n\t\t\treturn unmarshalStringSlice\n\t\t}\n\t\treturn unmarshalStringValue\n\tcase reflect.Struct:\n\t\t// message or group field\n\t\tif !pointer {\n\t\t\tpanic(fmt.Sprintf(\"message/group field %s:%s without pointer\", t, encoding))\n\t\t}\n\t\tswitch encoding {\n\t\tcase \"bytes\":\n\t\t\tif slice {\n\t\t\t\treturn makeUnmarshalMessageSlicePtr(getUnmarshalInfo(t), name)\n\t\t\t}\n\t\t\treturn makeUnmarshalMessagePtr(getUnmarshalInfo(t), name)\n\t\tcase \"group\":\n\t\t\tif slice {\n\t\t\t\treturn makeUnmarshalGroupSlicePtr(getUnmarshalInfo(t), name)\n\t\t\t}\n\t\t\treturn makeUnmarshalGroupPtr(getUnmarshalInfo(t), name)\n\t\t}\n\t}\n\tpanic(fmt.Sprintf(\"unmarshaler not found type:%s encoding:%s\", t, encoding))\n}\n\n// Below are all the unmarshalers for individual fields of various types.\n\nfunc unmarshalInt64Value(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireVarint {\n\t\treturn b, errInternalBadWireType\n\t}\n\tx, n := decodeVarint(b)\n\tif n == 0 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tb = b[n:]\n\tv := int64(x)\n\t*f.toInt64() = v\n\treturn b, nil\n}\n\nfunc unmarshalInt64Ptr(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireVarint {\n\t\treturn b, errInternalBadWireType\n\t}\n\tx, n := decodeVarint(b)\n\tif n == 0 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tb = b[n:]\n\tv := int64(x)\n\t*f.toInt64Ptr() = &v\n\treturn b, nil\n}\n\nfunc unmarshalInt64Slice(b []byte, f pointer, w int) ([]byte, error) {\n\tif w == WireBytes { // packed\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tres := b[x:]\n\t\tb = b[:x]\n\t\tfor len(b) > 0 {\n\t\t\tx, n = decodeVarint(b)\n\t\t\tif n == 0 {\n\t\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb = b[n:]\n\t\t\tv := int64(x)\n\t\t\ts := f.toInt64Slice()\n\t\t\t*s = append(*s, v)\n\t\t}\n\t\treturn res, nil\n\t}\n\tif w != WireVarint {\n\t\treturn b, errInternalBadWireType\n\t}\n\tx, n := decodeVarint(b)\n\tif n == 0 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tb = b[n:]\n\tv := int64(x)\n\ts := f.toInt64Slice()\n\t*s = append(*s, v)\n\treturn b, nil\n}\n\nfunc unmarshalSint64Value(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireVarint {\n\t\treturn b, errInternalBadWireType\n\t}\n\tx, n := decodeVarint(b)\n\tif n == 0 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tb = b[n:]\n\tv := int64(x>>1) ^ int64(x)<<63>>63\n\t*f.toInt64() = v\n\treturn b, nil\n}\n\nfunc unmarshalSint64Ptr(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireVarint {\n\t\treturn b, errInternalBadWireType\n\t}\n\tx, n := decodeVarint(b)\n\tif n == 0 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tb = b[n:]\n\tv := int64(x>>1) ^ int64(x)<<63>>63\n\t*f.toInt64Ptr() = &v\n\treturn b, nil\n}\n\nfunc unmarshalSint64Slice(b []byte, f pointer, w int) ([]byte, error) {\n\tif w == WireBytes { // packed\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tres := b[x:]\n\t\tb = b[:x]\n\t\tfor len(b) > 0 {\n\t\t\tx, n = decodeVarint(b)\n\t\t\tif n == 0 {\n\t\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb = b[n:]\n\t\t\tv := int64(x>>1) ^ int64(x)<<63>>63\n\t\t\ts := f.toInt64Slice()\n\t\t\t*s = append(*s, v)\n\t\t}\n\t\treturn res, nil\n\t}\n\tif w != WireVarint {\n\t\treturn b, errInternalBadWireType\n\t}\n\tx, n := decodeVarint(b)\n\tif n == 0 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tb = b[n:]\n\tv := int64(x>>1) ^ int64(x)<<63>>63\n\ts := f.toInt64Slice()\n\t*s = append(*s, v)\n\treturn b, nil\n}\n\nfunc unmarshalUint64Value(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireVarint {\n\t\treturn b, errInternalBadWireType\n\t}\n\tx, n := decodeVarint(b)\n\tif n == 0 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tb = b[n:]\n\tv := uint64(x)\n\t*f.toUint64() = v\n\treturn b, nil\n}\n\nfunc unmarshalUint64Ptr(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireVarint {\n\t\treturn b, errInternalBadWireType\n\t}\n\tx, n := decodeVarint(b)\n\tif n == 0 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tb = b[n:]\n\tv := uint64(x)\n\t*f.toUint64Ptr() = &v\n\treturn b, nil\n}\n\nfunc unmarshalUint64Slice(b []byte, f pointer, w int) ([]byte, error) {\n\tif w == WireBytes { // packed\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tres := b[x:]\n\t\tb = b[:x]\n\t\tfor len(b) > 0 {\n\t\t\tx, n = decodeVarint(b)\n\t\t\tif n == 0 {\n\t\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb = b[n:]\n\t\t\tv := uint64(x)\n\t\t\ts := f.toUint64Slice()\n\t\t\t*s = append(*s, v)\n\t\t}\n\t\treturn res, nil\n\t}\n\tif w != WireVarint {\n\t\treturn b, errInternalBadWireType\n\t}\n\tx, n := decodeVarint(b)\n\tif n == 0 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tb = b[n:]\n\tv := uint64(x)\n\ts := f.toUint64Slice()\n\t*s = append(*s, v)\n\treturn b, nil\n}\n\nfunc unmarshalInt32Value(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireVarint {\n\t\treturn b, errInternalBadWireType\n\t}\n\tx, n := decodeVarint(b)\n\tif n == 0 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tb = b[n:]\n\tv := int32(x)\n\t*f.toInt32() = v\n\treturn b, nil\n}\n\nfunc unmarshalInt32Ptr(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireVarint {\n\t\treturn b, errInternalBadWireType\n\t}\n\tx, n := decodeVarint(b)\n\tif n == 0 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tb = b[n:]\n\tv := int32(x)\n\tf.setInt32Ptr(v)\n\treturn b, nil\n}\n\nfunc unmarshalInt32Slice(b []byte, f pointer, w int) ([]byte, error) {\n\tif w == WireBytes { // packed\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tres := b[x:]\n\t\tb = b[:x]\n\t\tfor len(b) > 0 {\n\t\t\tx, n = decodeVarint(b)\n\t\t\tif n == 0 {\n\t\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb = b[n:]\n\t\t\tv := int32(x)\n\t\t\tf.appendInt32Slice(v)\n\t\t}\n\t\treturn res, nil\n\t}\n\tif w != WireVarint {\n\t\treturn b, errInternalBadWireType\n\t}\n\tx, n := decodeVarint(b)\n\tif n == 0 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tb = b[n:]\n\tv := int32(x)\n\tf.appendInt32Slice(v)\n\treturn b, nil\n}\n\nfunc unmarshalSint32Value(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireVarint {\n\t\treturn b, errInternalBadWireType\n\t}\n\tx, n := decodeVarint(b)\n\tif n == 0 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tb = b[n:]\n\tv := int32(x>>1) ^ int32(x)<<31>>31\n\t*f.toInt32() = v\n\treturn b, nil\n}\n\nfunc unmarshalSint32Ptr(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireVarint {\n\t\treturn b, errInternalBadWireType\n\t}\n\tx, n := decodeVarint(b)\n\tif n == 0 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tb = b[n:]\n\tv := int32(x>>1) ^ int32(x)<<31>>31\n\tf.setInt32Ptr(v)\n\treturn b, nil\n}\n\nfunc unmarshalSint32Slice(b []byte, f pointer, w int) ([]byte, error) {\n\tif w == WireBytes { // packed\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tres := b[x:]\n\t\tb = b[:x]\n\t\tfor len(b) > 0 {\n\t\t\tx, n = decodeVarint(b)\n\t\t\tif n == 0 {\n\t\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb = b[n:]\n\t\t\tv := int32(x>>1) ^ int32(x)<<31>>31\n\t\t\tf.appendInt32Slice(v)\n\t\t}\n\t\treturn res, nil\n\t}\n\tif w != WireVarint {\n\t\treturn b, errInternalBadWireType\n\t}\n\tx, n := decodeVarint(b)\n\tif n == 0 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tb = b[n:]\n\tv := int32(x>>1) ^ int32(x)<<31>>31\n\tf.appendInt32Slice(v)\n\treturn b, nil\n}\n\nfunc unmarshalUint32Value(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireVarint {\n\t\treturn b, errInternalBadWireType\n\t}\n\tx, n := decodeVarint(b)\n\tif n == 0 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tb = b[n:]\n\tv := uint32(x)\n\t*f.toUint32() = v\n\treturn b, nil\n}\n\nfunc unmarshalUint32Ptr(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireVarint {\n\t\treturn b, errInternalBadWireType\n\t}\n\tx, n := decodeVarint(b)\n\tif n == 0 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tb = b[n:]\n\tv := uint32(x)\n\t*f.toUint32Ptr() = &v\n\treturn b, nil\n}\n\nfunc unmarshalUint32Slice(b []byte, f pointer, w int) ([]byte, error) {\n\tif w == WireBytes { // packed\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tres := b[x:]\n\t\tb = b[:x]\n\t\tfor len(b) > 0 {\n\t\t\tx, n = decodeVarint(b)\n\t\t\tif n == 0 {\n\t\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tb = b[n:]\n\t\t\tv := uint32(x)\n\t\t\ts := f.toUint32Slice()\n\t\t\t*s = append(*s, v)\n\t\t}\n\t\treturn res, nil\n\t}\n\tif w != WireVarint {\n\t\treturn b, errInternalBadWireType\n\t}\n\tx, n := decodeVarint(b)\n\tif n == 0 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tb = b[n:]\n\tv := uint32(x)\n\ts := f.toUint32Slice()\n\t*s = append(*s, v)\n\treturn b, nil\n}\n\nfunc unmarshalFixed64Value(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireFixed64 {\n\t\treturn b, errInternalBadWireType\n\t}\n\tif len(b) < 8 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tv := 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\n\t*f.toUint64() = v\n\treturn b[8:], nil\n}\n\nfunc unmarshalFixed64Ptr(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireFixed64 {\n\t\treturn b, errInternalBadWireType\n\t}\n\tif len(b) < 8 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tv := 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\n\t*f.toUint64Ptr() = &v\n\treturn b[8:], nil\n}\n\nfunc unmarshalFixed64Slice(b []byte, f pointer, w int) ([]byte, error) {\n\tif w == WireBytes { // packed\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tres := b[x:]\n\t\tb = b[:x]\n\t\tfor len(b) > 0 {\n\t\t\tif len(b) < 8 {\n\t\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tv := 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\n\t\t\ts := f.toUint64Slice()\n\t\t\t*s = append(*s, v)\n\t\t\tb = b[8:]\n\t\t}\n\t\treturn res, nil\n\t}\n\tif w != WireFixed64 {\n\t\treturn b, errInternalBadWireType\n\t}\n\tif len(b) < 8 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tv := 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\n\ts := f.toUint64Slice()\n\t*s = append(*s, v)\n\treturn b[8:], nil\n}\n\nfunc unmarshalFixedS64Value(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireFixed64 {\n\t\treturn b, errInternalBadWireType\n\t}\n\tif len(b) < 8 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tv := 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\n\t*f.toInt64() = v\n\treturn b[8:], nil\n}\n\nfunc unmarshalFixedS64Ptr(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireFixed64 {\n\t\treturn b, errInternalBadWireType\n\t}\n\tif len(b) < 8 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tv := 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\n\t*f.toInt64Ptr() = &v\n\treturn b[8:], nil\n}\n\nfunc unmarshalFixedS64Slice(b []byte, f pointer, w int) ([]byte, error) {\n\tif w == WireBytes { // packed\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tres := b[x:]\n\t\tb = b[:x]\n\t\tfor len(b) > 0 {\n\t\t\tif len(b) < 8 {\n\t\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tv := 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\n\t\t\ts := f.toInt64Slice()\n\t\t\t*s = append(*s, v)\n\t\t\tb = b[8:]\n\t\t}\n\t\treturn res, nil\n\t}\n\tif w != WireFixed64 {\n\t\treturn b, errInternalBadWireType\n\t}\n\tif len(b) < 8 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tv := 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\n\ts := f.toInt64Slice()\n\t*s = append(*s, v)\n\treturn b[8:], nil\n}\n\nfunc unmarshalFixed32Value(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireFixed32 {\n\t\treturn b, errInternalBadWireType\n\t}\n\tif len(b) < 4 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tv := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24\n\t*f.toUint32() = v\n\treturn b[4:], nil\n}\n\nfunc unmarshalFixed32Ptr(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireFixed32 {\n\t\treturn b, errInternalBadWireType\n\t}\n\tif len(b) < 4 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tv := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24\n\t*f.toUint32Ptr() = &v\n\treturn b[4:], nil\n}\n\nfunc unmarshalFixed32Slice(b []byte, f pointer, w int) ([]byte, error) {\n\tif w == WireBytes { // packed\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tres := b[x:]\n\t\tb = b[:x]\n\t\tfor len(b) > 0 {\n\t\t\tif len(b) < 4 {\n\t\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tv := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24\n\t\t\ts := f.toUint32Slice()\n\t\t\t*s = append(*s, v)\n\t\t\tb = b[4:]\n\t\t}\n\t\treturn res, nil\n\t}\n\tif w != WireFixed32 {\n\t\treturn b, errInternalBadWireType\n\t}\n\tif len(b) < 4 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tv := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24\n\ts := f.toUint32Slice()\n\t*s = append(*s, v)\n\treturn b[4:], nil\n}\n\nfunc unmarshalFixedS32Value(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireFixed32 {\n\t\treturn b, errInternalBadWireType\n\t}\n\tif len(b) < 4 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tv := int32(b[0]) | int32(b[1])<<8 | int32(b[2])<<16 | int32(b[3])<<24\n\t*f.toInt32() = v\n\treturn b[4:], nil\n}\n\nfunc unmarshalFixedS32Ptr(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireFixed32 {\n\t\treturn b, errInternalBadWireType\n\t}\n\tif len(b) < 4 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tv := int32(b[0]) | int32(b[1])<<8 | int32(b[2])<<16 | int32(b[3])<<24\n\tf.setInt32Ptr(v)\n\treturn b[4:], nil\n}\n\nfunc unmarshalFixedS32Slice(b []byte, f pointer, w int) ([]byte, error) {\n\tif w == WireBytes { // packed\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tres := b[x:]\n\t\tb = b[:x]\n\t\tfor len(b) > 0 {\n\t\t\tif len(b) < 4 {\n\t\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tv := int32(b[0]) | int32(b[1])<<8 | int32(b[2])<<16 | int32(b[3])<<24\n\t\t\tf.appendInt32Slice(v)\n\t\t\tb = b[4:]\n\t\t}\n\t\treturn res, nil\n\t}\n\tif w != WireFixed32 {\n\t\treturn b, errInternalBadWireType\n\t}\n\tif len(b) < 4 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tv := int32(b[0]) | int32(b[1])<<8 | int32(b[2])<<16 | int32(b[3])<<24\n\tf.appendInt32Slice(v)\n\treturn b[4:], nil\n}\n\nfunc unmarshalBoolValue(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireVarint {\n\t\treturn b, errInternalBadWireType\n\t}\n\t// Note: any length varint is allowed, even though any sane\n\t// encoder will use one byte.\n\t// See https://github.com/golang/protobuf/issues/76\n\tx, n := decodeVarint(b)\n\tif n == 0 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\t// TODO: check if x>1? Tests seem to indicate no.\n\tv := x != 0\n\t*f.toBool() = v\n\treturn b[n:], nil\n}\n\nfunc unmarshalBoolPtr(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireVarint {\n\t\treturn b, errInternalBadWireType\n\t}\n\tx, n := decodeVarint(b)\n\tif n == 0 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tv := x != 0\n\t*f.toBoolPtr() = &v\n\treturn b[n:], nil\n}\n\nfunc unmarshalBoolSlice(b []byte, f pointer, w int) ([]byte, error) {\n\tif w == WireBytes { // packed\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tres := b[x:]\n\t\tb = b[:x]\n\t\tfor len(b) > 0 {\n\t\t\tx, n = decodeVarint(b)\n\t\t\tif n == 0 {\n\t\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tv := x != 0\n\t\t\ts := f.toBoolSlice()\n\t\t\t*s = append(*s, v)\n\t\t\tb = b[n:]\n\t\t}\n\t\treturn res, nil\n\t}\n\tif w != WireVarint {\n\t\treturn b, errInternalBadWireType\n\t}\n\tx, n := decodeVarint(b)\n\tif n == 0 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tv := x != 0\n\ts := f.toBoolSlice()\n\t*s = append(*s, v)\n\treturn b[n:], nil\n}\n\nfunc unmarshalFloat64Value(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireFixed64 {\n\t\treturn b, errInternalBadWireType\n\t}\n\tif len(b) < 8 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tv := 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)\n\t*f.toFloat64() = v\n\treturn b[8:], nil\n}\n\nfunc unmarshalFloat64Ptr(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireFixed64 {\n\t\treturn b, errInternalBadWireType\n\t}\n\tif len(b) < 8 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tv := 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)\n\t*f.toFloat64Ptr() = &v\n\treturn b[8:], nil\n}\n\nfunc unmarshalFloat64Slice(b []byte, f pointer, w int) ([]byte, error) {\n\tif w == WireBytes { // packed\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tres := b[x:]\n\t\tb = b[:x]\n\t\tfor len(b) > 0 {\n\t\t\tif len(b) < 8 {\n\t\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tv := 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)\n\t\t\ts := f.toFloat64Slice()\n\t\t\t*s = append(*s, v)\n\t\t\tb = b[8:]\n\t\t}\n\t\treturn res, nil\n\t}\n\tif w != WireFixed64 {\n\t\treturn b, errInternalBadWireType\n\t}\n\tif len(b) < 8 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tv := 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)\n\ts := f.toFloat64Slice()\n\t*s = append(*s, v)\n\treturn b[8:], nil\n}\n\nfunc unmarshalFloat32Value(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireFixed32 {\n\t\treturn b, errInternalBadWireType\n\t}\n\tif len(b) < 4 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tv := math.Float32frombits(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24)\n\t*f.toFloat32() = v\n\treturn b[4:], nil\n}\n\nfunc unmarshalFloat32Ptr(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireFixed32 {\n\t\treturn b, errInternalBadWireType\n\t}\n\tif len(b) < 4 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tv := math.Float32frombits(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24)\n\t*f.toFloat32Ptr() = &v\n\treturn b[4:], nil\n}\n\nfunc unmarshalFloat32Slice(b []byte, f pointer, w int) ([]byte, error) {\n\tif w == WireBytes { // packed\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tres := b[x:]\n\t\tb = b[:x]\n\t\tfor len(b) > 0 {\n\t\t\tif len(b) < 4 {\n\t\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\tv := math.Float32frombits(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24)\n\t\t\ts := f.toFloat32Slice()\n\t\t\t*s = append(*s, v)\n\t\t\tb = b[4:]\n\t\t}\n\t\treturn res, nil\n\t}\n\tif w != WireFixed32 {\n\t\treturn b, errInternalBadWireType\n\t}\n\tif len(b) < 4 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tv := math.Float32frombits(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24)\n\ts := f.toFloat32Slice()\n\t*s = append(*s, v)\n\treturn b[4:], nil\n}\n\nfunc unmarshalStringValue(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireBytes {\n\t\treturn b, errInternalBadWireType\n\t}\n\tx, n := decodeVarint(b)\n\tif n == 0 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tb = b[n:]\n\tif x > uint64(len(b)) {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tv := string(b[:x])\n\t*f.toString() = v\n\treturn b[x:], nil\n}\n\nfunc unmarshalStringPtr(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireBytes {\n\t\treturn b, errInternalBadWireType\n\t}\n\tx, n := decodeVarint(b)\n\tif n == 0 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tb = b[n:]\n\tif x > uint64(len(b)) {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tv := string(b[:x])\n\t*f.toStringPtr() = &v\n\treturn b[x:], nil\n}\n\nfunc unmarshalStringSlice(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireBytes {\n\t\treturn b, errInternalBadWireType\n\t}\n\tx, n := decodeVarint(b)\n\tif n == 0 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tb = b[n:]\n\tif x > uint64(len(b)) {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tv := string(b[:x])\n\ts := f.toStringSlice()\n\t*s = append(*s, v)\n\treturn b[x:], nil\n}\n\nfunc unmarshalUTF8StringValue(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireBytes {\n\t\treturn b, errInternalBadWireType\n\t}\n\tx, n := decodeVarint(b)\n\tif n == 0 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tb = b[n:]\n\tif x > uint64(len(b)) {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tv := string(b[:x])\n\t*f.toString() = v\n\tif !utf8.ValidString(v) {\n\t\treturn b[x:], errInvalidUTF8\n\t}\n\treturn b[x:], nil\n}\n\nfunc unmarshalUTF8StringPtr(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireBytes {\n\t\treturn b, errInternalBadWireType\n\t}\n\tx, n := decodeVarint(b)\n\tif n == 0 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tb = b[n:]\n\tif x > uint64(len(b)) {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tv := string(b[:x])\n\t*f.toStringPtr() = &v\n\tif !utf8.ValidString(v) {\n\t\treturn b[x:], errInvalidUTF8\n\t}\n\treturn b[x:], nil\n}\n\nfunc unmarshalUTF8StringSlice(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireBytes {\n\t\treturn b, errInternalBadWireType\n\t}\n\tx, n := decodeVarint(b)\n\tif n == 0 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tb = b[n:]\n\tif x > uint64(len(b)) {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tv := string(b[:x])\n\ts := f.toStringSlice()\n\t*s = append(*s, v)\n\tif !utf8.ValidString(v) {\n\t\treturn b[x:], errInvalidUTF8\n\t}\n\treturn b[x:], nil\n}\n\nvar emptyBuf [0]byte\n\nfunc unmarshalBytesValue(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireBytes {\n\t\treturn b, errInternalBadWireType\n\t}\n\tx, n := decodeVarint(b)\n\tif n == 0 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tb = b[n:]\n\tif x > uint64(len(b)) {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\t// The use of append here is a trick which avoids the zeroing\n\t// that would be required if we used a make/copy pair.\n\t// We append to emptyBuf instead of nil because we want\n\t// a non-nil result even when the length is 0.\n\tv := append(emptyBuf[:], b[:x]...)\n\t*f.toBytes() = v\n\treturn b[x:], nil\n}\n\nfunc unmarshalBytesSlice(b []byte, f pointer, w int) ([]byte, error) {\n\tif w != WireBytes {\n\t\treturn b, errInternalBadWireType\n\t}\n\tx, n := decodeVarint(b)\n\tif n == 0 {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tb = b[n:]\n\tif x > uint64(len(b)) {\n\t\treturn nil, io.ErrUnexpectedEOF\n\t}\n\tv := append(emptyBuf[:], b[:x]...)\n\ts := f.toBytesSlice()\n\t*s = append(*s, v)\n\treturn b[x:], nil\n}\n\nfunc makeUnmarshalMessagePtr(sub *unmarshalInfo, name string) unmarshaler {\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\tif w != WireBytes {\n\t\t\treturn b, errInternalBadWireType\n\t\t}\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\t// First read the message field to see if something is there.\n\t\t// The semantics of multiple submessages are weird.  Instead of\n\t\t// the last one winning (as it is for all other fields), multiple\n\t\t// submessages are merged.\n\t\tv := f.getPointer()\n\t\tif v.isNil() {\n\t\t\tv = valToPointer(reflect.New(sub.typ))\n\t\t\tf.setPointer(v)\n\t\t}\n\t\terr := sub.unmarshal(v, b[:x])\n\t\tif err != nil {\n\t\t\tif r, ok := err.(*RequiredNotSetError); ok {\n\t\t\t\tr.field = name + \".\" + r.field\n\t\t\t} else {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t}\n\t\treturn b[x:], err\n\t}\n}\n\nfunc makeUnmarshalMessageSlicePtr(sub *unmarshalInfo, name string) unmarshaler {\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\tif w != WireBytes {\n\t\t\treturn b, errInternalBadWireType\n\t\t}\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tv := valToPointer(reflect.New(sub.typ))\n\t\terr := sub.unmarshal(v, b[:x])\n\t\tif err != nil {\n\t\t\tif r, ok := err.(*RequiredNotSetError); ok {\n\t\t\t\tr.field = name + \".\" + r.field\n\t\t\t} else {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t}\n\t\tf.appendPointer(v)\n\t\treturn b[x:], err\n\t}\n}\n\nfunc makeUnmarshalGroupPtr(sub *unmarshalInfo, name string) unmarshaler {\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\tif w != WireStartGroup {\n\t\t\treturn b, errInternalBadWireType\n\t\t}\n\t\tx, y := findEndGroup(b)\n\t\tif x < 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tv := f.getPointer()\n\t\tif v.isNil() {\n\t\t\tv = valToPointer(reflect.New(sub.typ))\n\t\t\tf.setPointer(v)\n\t\t}\n\t\terr := sub.unmarshal(v, b[:x])\n\t\tif err != nil {\n\t\t\tif r, ok := err.(*RequiredNotSetError); ok {\n\t\t\t\tr.field = name + \".\" + r.field\n\t\t\t} else {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t}\n\t\treturn b[y:], err\n\t}\n}\n\nfunc makeUnmarshalGroupSlicePtr(sub *unmarshalInfo, name string) unmarshaler {\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\tif w != WireStartGroup {\n\t\t\treturn b, errInternalBadWireType\n\t\t}\n\t\tx, y := findEndGroup(b)\n\t\tif x < 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tv := valToPointer(reflect.New(sub.typ))\n\t\terr := sub.unmarshal(v, b[:x])\n\t\tif err != nil {\n\t\t\tif r, ok := err.(*RequiredNotSetError); ok {\n\t\t\t\tr.field = name + \".\" + r.field\n\t\t\t} else {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t}\n\t\tf.appendPointer(v)\n\t\treturn b[y:], err\n\t}\n}\n\nfunc makeUnmarshalMap(f *reflect.StructField) unmarshaler {\n\tt := f.Type\n\tkt := t.Key()\n\tvt := t.Elem()\n\tunmarshalKey := typeUnmarshaler(kt, f.Tag.Get(\"protobuf_key\"))\n\tunmarshalVal := typeUnmarshaler(vt, f.Tag.Get(\"protobuf_val\"))\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\t// The map entry is a submessage. Figure out how big it is.\n\t\tif w != WireBytes {\n\t\t\treturn nil, fmt.Errorf(\"proto: bad wiretype for map field: got %d want %d\", w, WireBytes)\n\t\t}\n\t\tx, n := decodeVarint(b)\n\t\tif n == 0 {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[n:]\n\t\tif x > uint64(len(b)) {\n\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t}\n\t\tr := b[x:] // unused data to return\n\t\tb = b[:x]  // data for map entry\n\n\t\t// Note: we could use #keys * #values ~= 200 functions\n\t\t// to do map decoding without reflection. Probably not worth it.\n\t\t// Maps will be somewhat slow. Oh well.\n\n\t\t// Read key and value from data.\n\t\tvar nerr nonFatal\n\t\tk := reflect.New(kt)\n\t\tv := reflect.New(vt)\n\t\tfor len(b) > 0 {\n\t\t\tx, n := decodeVarint(b)\n\t\t\tif n == 0 {\n\t\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t\t}\n\t\t\twire := int(x) & 7\n\t\t\tb = b[n:]\n\n\t\t\tvar err error\n\t\t\tswitch x >> 3 {\n\t\t\tcase 1:\n\t\t\t\tb, err = unmarshalKey(b, valToPointer(k), wire)\n\t\t\tcase 2:\n\t\t\t\tb, err = unmarshalVal(b, valToPointer(v), wire)\n\t\t\tdefault:\n\t\t\t\terr = errInternalBadWireType // skip unknown tag\n\t\t\t}\n\n\t\t\tif nerr.Merge(err) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif err != errInternalBadWireType {\n\t\t\t\treturn nil, err\n\t\t\t}\n\n\t\t\t// Skip past unknown fields.\n\t\t\tb, err = skipField(b, wire)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t}\n\n\t\t// Get map, allocate if needed.\n\t\tm := f.asPointerTo(t).Elem() // an addressable map[K]T\n\t\tif m.IsNil() {\n\t\t\tm.Set(reflect.MakeMap(t))\n\t\t}\n\n\t\t// Insert into map.\n\t\tm.SetMapIndex(k.Elem(), v.Elem())\n\n\t\treturn r, nerr.E\n\t}\n}\n\n// makeUnmarshalOneof makes an unmarshaler for oneof fields.\n// for:\n// message Msg {\n//   oneof F {\n//     int64 X = 1;\n//     float64 Y = 2;\n//   }\n// }\n// typ is the type of the concrete entry for a oneof case (e.g. Msg_X).\n// ityp is the interface type of the oneof field (e.g. isMsg_F).\n// unmarshal is the unmarshaler for the base type of the oneof case (e.g. int64).\n// Note that this function will be called once for each case in the oneof.\nfunc makeUnmarshalOneof(typ, ityp reflect.Type, unmarshal unmarshaler) unmarshaler {\n\tsf := typ.Field(0)\n\tfield0 := toField(&sf)\n\treturn func(b []byte, f pointer, w int) ([]byte, error) {\n\t\t// Allocate holder for value.\n\t\tv := reflect.New(typ)\n\n\t\t// Unmarshal data into holder.\n\t\t// We unmarshal into the first field of the holder object.\n\t\tvar err error\n\t\tvar nerr nonFatal\n\t\tb, err = unmarshal(b, valToPointer(v).offset(field0), w)\n\t\tif !nerr.Merge(err) {\n\t\t\treturn nil, err\n\t\t}\n\n\t\t// Write pointer to holder into target field.\n\t\tf.asPointerTo(ityp).Elem().Set(v)\n\n\t\treturn b, nerr.E\n\t}\n}\n\n// Error used by decode internally.\nvar errInternalBadWireType = errors.New(\"proto: internal error: bad wiretype\")\n\n// skipField skips past a field of type wire and returns the remaining bytes.\nfunc skipField(b []byte, wire int) ([]byte, error) {\n\tswitch wire {\n\tcase WireVarint:\n\t\t_, k := decodeVarint(b)\n\t\tif k == 0 {\n\t\t\treturn b, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[k:]\n\tcase WireFixed32:\n\t\tif len(b) < 4 {\n\t\t\treturn b, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[4:]\n\tcase WireFixed64:\n\t\tif len(b) < 8 {\n\t\t\treturn b, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[8:]\n\tcase WireBytes:\n\t\tm, k := decodeVarint(b)\n\t\tif k == 0 || uint64(len(b)-k) < m {\n\t\t\treturn b, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[uint64(k)+m:]\n\tcase WireStartGroup:\n\t\t_, i := findEndGroup(b)\n\t\tif i == -1 {\n\t\t\treturn b, io.ErrUnexpectedEOF\n\t\t}\n\t\tb = b[i:]\n\tdefault:\n\t\treturn b, fmt.Errorf(\"proto: can't skip unknown wire type %d\", wire)\n\t}\n\treturn b, nil\n}\n\n// findEndGroup finds the index of the next EndGroup tag.\n// Groups may be nested, so the \"next\" EndGroup tag is the first\n// unpaired EndGroup.\n// findEndGroup returns the indexes of the start and end of the EndGroup tag.\n// Returns (-1,-1) if it can't find one.\nfunc findEndGroup(b []byte) (int, int) {\n\tdepth := 1\n\ti := 0\n\tfor {\n\t\tx, n := decodeVarint(b[i:])\n\t\tif n == 0 {\n\t\t\treturn -1, -1\n\t\t}\n\t\tj := i\n\t\ti += n\n\t\tswitch x & 7 {\n\t\tcase WireVarint:\n\t\t\t_, k := decodeVarint(b[i:])\n\t\t\tif k == 0 {\n\t\t\t\treturn -1, -1\n\t\t\t}\n\t\t\ti += k\n\t\tcase WireFixed32:\n\t\t\tif len(b)-4 < i {\n\t\t\t\treturn -1, -1\n\t\t\t}\n\t\t\ti += 4\n\t\tcase WireFixed64:\n\t\t\tif len(b)-8 < i {\n\t\t\t\treturn -1, -1\n\t\t\t}\n\t\t\ti += 8\n\t\tcase WireBytes:\n\t\t\tm, k := decodeVarint(b[i:])\n\t\t\tif k == 0 {\n\t\t\t\treturn -1, -1\n\t\t\t}\n\t\t\ti += k\n\t\t\tif uint64(len(b)-i) < m {\n\t\t\t\treturn -1, -1\n\t\t\t}\n\t\t\ti += int(m)\n\t\tcase WireStartGroup:\n\t\t\tdepth++\n\t\tcase WireEndGroup:\n\t\t\tdepth--\n\t\t\tif depth == 0 {\n\t\t\t\treturn j, i\n\t\t\t}\n\t\tdefault:\n\t\t\treturn -1, -1\n\t\t}\n\t}\n}\n\n// encodeVarint appends a varint-encoded integer to b and returns the result.\nfunc encodeVarint(b []byte, x uint64) []byte {\n\tfor x >= 1<<7 {\n\t\tb = append(b, byte(x&0x7f|0x80))\n\t\tx >>= 7\n\t}\n\treturn append(b, byte(x))\n}\n\n// decodeVarint reads a varint-encoded integer from b.\n// Returns the decoded integer and the number of bytes read.\n// If there is an error, it returns 0,0.\nfunc decodeVarint(b []byte) (uint64, int) {\n\tvar x, y uint64\n\tif len(b) == 0 {\n\t\tgoto bad\n\t}\n\tx = uint64(b[0])\n\tif x < 0x80 {\n\t\treturn x, 1\n\t}\n\tx -= 0x80\n\n\tif len(b) <= 1 {\n\t\tgoto bad\n\t}\n\ty = uint64(b[1])\n\tx += y << 7\n\tif y < 0x80 {\n\t\treturn x, 2\n\t}\n\tx -= 0x80 << 7\n\n\tif len(b) <= 2 {\n\t\tgoto bad\n\t}\n\ty = uint64(b[2])\n\tx += y << 14\n\tif y < 0x80 {\n\t\treturn x, 3\n\t}\n\tx -= 0x80 << 14\n\n\tif len(b) <= 3 {\n\t\tgoto bad\n\t}\n\ty = uint64(b[3])\n\tx += y << 21\n\tif y < 0x80 {\n\t\treturn x, 4\n\t}\n\tx -= 0x80 << 21\n\n\tif len(b) <= 4 {\n\t\tgoto bad\n\t}\n\ty = uint64(b[4])\n\tx += y << 28\n\tif y < 0x80 {\n\t\treturn x, 5\n\t}\n\tx -= 0x80 << 28\n\n\tif len(b) <= 5 {\n\t\tgoto bad\n\t}\n\ty = uint64(b[5])\n\tx += y << 35\n\tif y < 0x80 {\n\t\treturn x, 6\n\t}\n\tx -= 0x80 << 35\n\n\tif len(b) <= 6 {\n\t\tgoto bad\n\t}\n\ty = uint64(b[6])\n\tx += y << 42\n\tif y < 0x80 {\n\t\treturn x, 7\n\t}\n\tx -= 0x80 << 42\n\n\tif len(b) <= 7 {\n\t\tgoto bad\n\t}\n\ty = uint64(b[7])\n\tx += y << 49\n\tif y < 0x80 {\n\t\treturn x, 8\n\t}\n\tx -= 0x80 << 49\n\n\tif len(b) <= 8 {\n\t\tgoto bad\n\t}\n\ty = uint64(b[8])\n\tx += y << 56\n\tif y < 0x80 {\n\t\treturn x, 9\n\t}\n\tx -= 0x80 << 56\n\n\tif len(b) <= 9 {\n\t\tgoto bad\n\t}\n\ty = uint64(b[9])\n\tx += y << 63\n\tif y < 2 {\n\t\treturn x, 10\n\t}\n\nbad:\n\treturn 0, 0\n}\n"
  },
  {
    "path": "vendor/github.com/golang/protobuf/proto/text.go",
    "content": "// Go support for Protocol Buffers - Google's data interchange format\n//\n// Copyright 2010 The Go Authors.  All rights reserved.\n// https://github.com/golang/protobuf\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\npackage proto\n\n// Functions for writing the text protocol buffer format.\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"encoding\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"log\"\n\t\"math\"\n\t\"reflect\"\n\t\"sort\"\n\t\"strings\"\n)\n\nvar (\n\tnewline         = []byte(\"\\n\")\n\tspaces          = []byte(\"                                        \")\n\tendBraceNewline = []byte(\"}\\n\")\n\tbackslashN      = []byte{'\\\\', 'n'}\n\tbackslashR      = []byte{'\\\\', 'r'}\n\tbackslashT      = []byte{'\\\\', 't'}\n\tbackslashDQ     = []byte{'\\\\', '\"'}\n\tbackslashBS     = []byte{'\\\\', '\\\\'}\n\tposInf          = []byte(\"inf\")\n\tnegInf          = []byte(\"-inf\")\n\tnan             = []byte(\"nan\")\n)\n\ntype writer interface {\n\tio.Writer\n\tWriteByte(byte) error\n}\n\n// textWriter is an io.Writer that tracks its indentation level.\ntype textWriter struct {\n\tind      int\n\tcomplete bool // if the current position is a complete line\n\tcompact  bool // whether to write out as a one-liner\n\tw        writer\n}\n\nfunc (w *textWriter) WriteString(s string) (n int, err error) {\n\tif !strings.Contains(s, \"\\n\") {\n\t\tif !w.compact && w.complete {\n\t\t\tw.writeIndent()\n\t\t}\n\t\tw.complete = false\n\t\treturn io.WriteString(w.w, s)\n\t}\n\t// WriteString is typically called without newlines, so this\n\t// codepath and its copy are rare.  We copy to avoid\n\t// duplicating all of Write's logic here.\n\treturn w.Write([]byte(s))\n}\n\nfunc (w *textWriter) Write(p []byte) (n int, err error) {\n\tnewlines := bytes.Count(p, newline)\n\tif newlines == 0 {\n\t\tif !w.compact && w.complete {\n\t\t\tw.writeIndent()\n\t\t}\n\t\tn, err = w.w.Write(p)\n\t\tw.complete = false\n\t\treturn n, err\n\t}\n\n\tfrags := bytes.SplitN(p, newline, newlines+1)\n\tif w.compact {\n\t\tfor i, frag := range frags {\n\t\t\tif i > 0 {\n\t\t\t\tif err := w.w.WriteByte(' '); err != nil {\n\t\t\t\t\treturn n, err\n\t\t\t\t}\n\t\t\t\tn++\n\t\t\t}\n\t\t\tnn, err := w.w.Write(frag)\n\t\t\tn += nn\n\t\t\tif err != nil {\n\t\t\t\treturn n, err\n\t\t\t}\n\t\t}\n\t\treturn n, nil\n\t}\n\n\tfor i, frag := range frags {\n\t\tif w.complete {\n\t\t\tw.writeIndent()\n\t\t}\n\t\tnn, err := w.w.Write(frag)\n\t\tn += nn\n\t\tif err != nil {\n\t\t\treturn n, err\n\t\t}\n\t\tif i+1 < len(frags) {\n\t\t\tif err := w.w.WriteByte('\\n'); err != nil {\n\t\t\t\treturn n, err\n\t\t\t}\n\t\t\tn++\n\t\t}\n\t}\n\tw.complete = len(frags[len(frags)-1]) == 0\n\treturn n, nil\n}\n\nfunc (w *textWriter) WriteByte(c byte) error {\n\tif w.compact && c == '\\n' {\n\t\tc = ' '\n\t}\n\tif !w.compact && w.complete {\n\t\tw.writeIndent()\n\t}\n\terr := w.w.WriteByte(c)\n\tw.complete = c == '\\n'\n\treturn err\n}\n\nfunc (w *textWriter) indent() { w.ind++ }\n\nfunc (w *textWriter) unindent() {\n\tif w.ind == 0 {\n\t\tlog.Print(\"proto: textWriter unindented too far\")\n\t\treturn\n\t}\n\tw.ind--\n}\n\nfunc writeName(w *textWriter, props *Properties) error {\n\tif _, err := w.WriteString(props.OrigName); err != nil {\n\t\treturn err\n\t}\n\tif props.Wire != \"group\" {\n\t\treturn w.WriteByte(':')\n\t}\n\treturn nil\n}\n\nfunc requiresQuotes(u string) bool {\n\t// When type URL contains any characters except [0-9A-Za-z./\\-]*, it must be quoted.\n\tfor _, ch := range u {\n\t\tswitch {\n\t\tcase ch == '.' || ch == '/' || ch == '_':\n\t\t\tcontinue\n\t\tcase '0' <= ch && ch <= '9':\n\t\t\tcontinue\n\t\tcase 'A' <= ch && ch <= 'Z':\n\t\t\tcontinue\n\t\tcase 'a' <= ch && ch <= 'z':\n\t\t\tcontinue\n\t\tdefault:\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// isAny reports whether sv is a google.protobuf.Any message\nfunc isAny(sv reflect.Value) bool {\n\ttype wkt interface {\n\t\tXXX_WellKnownType() string\n\t}\n\tt, ok := sv.Addr().Interface().(wkt)\n\treturn ok && t.XXX_WellKnownType() == \"Any\"\n}\n\n// writeProto3Any writes an expanded google.protobuf.Any message.\n//\n// It returns (false, nil) if sv value can't be unmarshaled (e.g. because\n// required messages are not linked in).\n//\n// It returns (true, error) when sv was written in expanded format or an error\n// was encountered.\nfunc (tm *TextMarshaler) writeProto3Any(w *textWriter, sv reflect.Value) (bool, error) {\n\tturl := sv.FieldByName(\"TypeUrl\")\n\tval := sv.FieldByName(\"Value\")\n\tif !turl.IsValid() || !val.IsValid() {\n\t\treturn true, errors.New(\"proto: invalid google.protobuf.Any message\")\n\t}\n\n\tb, ok := val.Interface().([]byte)\n\tif !ok {\n\t\treturn true, errors.New(\"proto: invalid google.protobuf.Any message\")\n\t}\n\n\tparts := strings.Split(turl.String(), \"/\")\n\tmt := MessageType(parts[len(parts)-1])\n\tif mt == nil {\n\t\treturn false, nil\n\t}\n\tm := reflect.New(mt.Elem())\n\tif err := Unmarshal(b, m.Interface().(Message)); err != nil {\n\t\treturn false, nil\n\t}\n\tw.Write([]byte(\"[\"))\n\tu := turl.String()\n\tif requiresQuotes(u) {\n\t\twriteString(w, u)\n\t} else {\n\t\tw.Write([]byte(u))\n\t}\n\tif w.compact {\n\t\tw.Write([]byte(\"]:<\"))\n\t} else {\n\t\tw.Write([]byte(\"]: <\\n\"))\n\t\tw.ind++\n\t}\n\tif err := tm.writeStruct(w, m.Elem()); err != nil {\n\t\treturn true, err\n\t}\n\tif w.compact {\n\t\tw.Write([]byte(\"> \"))\n\t} else {\n\t\tw.ind--\n\t\tw.Write([]byte(\">\\n\"))\n\t}\n\treturn true, nil\n}\n\nfunc (tm *TextMarshaler) writeStruct(w *textWriter, sv reflect.Value) error {\n\tif tm.ExpandAny && isAny(sv) {\n\t\tif canExpand, err := tm.writeProto3Any(w, sv); canExpand {\n\t\t\treturn err\n\t\t}\n\t}\n\tst := sv.Type()\n\tsprops := GetProperties(st)\n\tfor i := 0; i < sv.NumField(); i++ {\n\t\tfv := sv.Field(i)\n\t\tprops := sprops.Prop[i]\n\t\tname := st.Field(i).Name\n\n\t\tif name == \"XXX_NoUnkeyedLiteral\" {\n\t\t\tcontinue\n\t\t}\n\n\t\tif strings.HasPrefix(name, \"XXX_\") {\n\t\t\t// There are two XXX_ fields:\n\t\t\t//   XXX_unrecognized []byte\n\t\t\t//   XXX_extensions   map[int32]proto.Extension\n\t\t\t// The first is handled here;\n\t\t\t// the second is handled at the bottom of this function.\n\t\t\tif name == \"XXX_unrecognized\" && !fv.IsNil() {\n\t\t\t\tif err := writeUnknownStruct(w, fv.Interface().([]byte)); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\tif fv.Kind() == reflect.Ptr && fv.IsNil() {\n\t\t\t// Field not filled in. This could be an optional field or\n\t\t\t// a required field that wasn't filled in. Either way, there\n\t\t\t// isn't anything we can show for it.\n\t\t\tcontinue\n\t\t}\n\t\tif fv.Kind() == reflect.Slice && fv.IsNil() {\n\t\t\t// Repeated field that is empty, or a bytes field that is unused.\n\t\t\tcontinue\n\t\t}\n\n\t\tif props.Repeated && fv.Kind() == reflect.Slice {\n\t\t\t// Repeated field.\n\t\t\tfor j := 0; j < fv.Len(); j++ {\n\t\t\t\tif err := writeName(w, props); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tif !w.compact {\n\t\t\t\t\tif err := w.WriteByte(' '); err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tv := fv.Index(j)\n\t\t\t\tif v.Kind() == reflect.Ptr && v.IsNil() {\n\t\t\t\t\t// A nil message in a repeated field is not valid,\n\t\t\t\t\t// but we can handle that more gracefully than panicking.\n\t\t\t\t\tif _, err := w.Write([]byte(\"<nil>\\n\")); err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif err := tm.writeAny(w, v, props); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tif err := w.WriteByte('\\n'); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\tif fv.Kind() == reflect.Map {\n\t\t\t// Map fields are rendered as a repeated struct with key/value fields.\n\t\t\tkeys := fv.MapKeys()\n\t\t\tsort.Sort(mapKeys(keys))\n\t\t\tfor _, key := range keys {\n\t\t\t\tval := fv.MapIndex(key)\n\t\t\t\tif err := writeName(w, props); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tif !w.compact {\n\t\t\t\t\tif err := w.WriteByte(' '); err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// open struct\n\t\t\t\tif err := w.WriteByte('<'); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tif !w.compact {\n\t\t\t\t\tif err := w.WriteByte('\\n'); err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tw.indent()\n\t\t\t\t// key\n\t\t\t\tif _, err := w.WriteString(\"key:\"); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tif !w.compact {\n\t\t\t\t\tif err := w.WriteByte(' '); err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif err := tm.writeAny(w, key, props.MapKeyProp); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tif err := w.WriteByte('\\n'); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\t// nil values aren't legal, but we can avoid panicking because of them.\n\t\t\t\tif val.Kind() != reflect.Ptr || !val.IsNil() {\n\t\t\t\t\t// value\n\t\t\t\t\tif _, err := w.WriteString(\"value:\"); err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t\tif !w.compact {\n\t\t\t\t\t\tif err := w.WriteByte(' '); err != nil {\n\t\t\t\t\t\t\treturn err\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif err := tm.writeAny(w, val, props.MapValProp); err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t\tif err := w.WriteByte('\\n'); err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// close struct\n\t\t\t\tw.unindent()\n\t\t\t\tif err := w.WriteByte('>'); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tif err := w.WriteByte('\\n'); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\tif props.proto3 && fv.Kind() == reflect.Slice && fv.Len() == 0 {\n\t\t\t// empty bytes field\n\t\t\tcontinue\n\t\t}\n\t\tif fv.Kind() != reflect.Ptr && fv.Kind() != reflect.Slice {\n\t\t\t// proto3 non-repeated scalar field; skip if zero value\n\t\t\tif isProto3Zero(fv) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\tif fv.Kind() == reflect.Interface {\n\t\t\t// Check if it is a oneof.\n\t\t\tif st.Field(i).Tag.Get(\"protobuf_oneof\") != \"\" {\n\t\t\t\t// fv is nil, or holds a pointer to generated struct.\n\t\t\t\t// That generated struct has exactly one field,\n\t\t\t\t// which has a protobuf struct tag.\n\t\t\t\tif fv.IsNil() {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tinner := fv.Elem().Elem() // interface -> *T -> T\n\t\t\t\ttag := inner.Type().Field(0).Tag.Get(\"protobuf\")\n\t\t\t\tprops = new(Properties) // Overwrite the outer props var, but not its pointee.\n\t\t\t\tprops.Parse(tag)\n\t\t\t\t// Write the value in the oneof, not the oneof itself.\n\t\t\t\tfv = inner.Field(0)\n\n\t\t\t\t// Special case to cope with malformed messages gracefully:\n\t\t\t\t// If the value in the oneof is a nil pointer, don't panic\n\t\t\t\t// in writeAny.\n\t\t\t\tif fv.Kind() == reflect.Ptr && fv.IsNil() {\n\t\t\t\t\t// Use errors.New so writeAny won't render quotes.\n\t\t\t\t\tmsg := errors.New(\"/* nil */\")\n\t\t\t\t\tfv = reflect.ValueOf(&msg).Elem()\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif err := writeName(w, props); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif !w.compact {\n\t\t\tif err := w.WriteByte(' '); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\n\t\t// Enums have a String method, so writeAny will work fine.\n\t\tif err := tm.writeAny(w, fv, props); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tif err := w.WriteByte('\\n'); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// Extensions (the XXX_extensions field).\n\tpv := sv.Addr()\n\tif _, err := extendable(pv.Interface()); err == nil {\n\t\tif err := tm.writeExtensions(w, pv); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// writeAny writes an arbitrary field.\nfunc (tm *TextMarshaler) writeAny(w *textWriter, v reflect.Value, props *Properties) error {\n\tv = reflect.Indirect(v)\n\n\t// Floats have special cases.\n\tif v.Kind() == reflect.Float32 || v.Kind() == reflect.Float64 {\n\t\tx := v.Float()\n\t\tvar b []byte\n\t\tswitch {\n\t\tcase math.IsInf(x, 1):\n\t\t\tb = posInf\n\t\tcase math.IsInf(x, -1):\n\t\t\tb = negInf\n\t\tcase math.IsNaN(x):\n\t\t\tb = nan\n\t\t}\n\t\tif b != nil {\n\t\t\t_, err := w.Write(b)\n\t\t\treturn err\n\t\t}\n\t\t// Other values are handled below.\n\t}\n\n\t// We don't attempt to serialise every possible value type; only those\n\t// that can occur in protocol buffers.\n\tswitch v.Kind() {\n\tcase reflect.Slice:\n\t\t// Should only be a []byte; repeated fields are handled in writeStruct.\n\t\tif err := writeString(w, string(v.Bytes())); err != nil {\n\t\t\treturn err\n\t\t}\n\tcase reflect.String:\n\t\tif err := writeString(w, v.String()); err != nil {\n\t\t\treturn err\n\t\t}\n\tcase reflect.Struct:\n\t\t// Required/optional group/message.\n\t\tvar bra, ket byte = '<', '>'\n\t\tif props != nil && props.Wire == \"group\" {\n\t\t\tbra, ket = '{', '}'\n\t\t}\n\t\tif err := w.WriteByte(bra); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif !w.compact {\n\t\t\tif err := w.WriteByte('\\n'); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t\tw.indent()\n\t\tif v.CanAddr() {\n\t\t\t// Calling v.Interface on a struct causes the reflect package to\n\t\t\t// copy the entire struct. This is racy with the new Marshaler\n\t\t\t// since we atomically update the XXX_sizecache.\n\t\t\t//\n\t\t\t// Thus, we retrieve a pointer to the struct if possible to avoid\n\t\t\t// a race since v.Interface on the pointer doesn't copy the struct.\n\t\t\t//\n\t\t\t// If v is not addressable, then we are not worried about a race\n\t\t\t// since it implies that the binary Marshaler cannot possibly be\n\t\t\t// mutating this value.\n\t\t\tv = v.Addr()\n\t\t}\n\t\tif etm, ok := v.Interface().(encoding.TextMarshaler); ok {\n\t\t\ttext, err := etm.MarshalText()\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif _, err = w.Write(text); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t} else {\n\t\t\tif v.Kind() == reflect.Ptr {\n\t\t\t\tv = v.Elem()\n\t\t\t}\n\t\t\tif err := tm.writeStruct(w, v); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t\tw.unindent()\n\t\tif err := w.WriteByte(ket); err != nil {\n\t\t\treturn err\n\t\t}\n\tdefault:\n\t\t_, err := fmt.Fprint(w, v.Interface())\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// equivalent to C's isprint.\nfunc isprint(c byte) bool {\n\treturn c >= 0x20 && c < 0x7f\n}\n\n// writeString writes a string in the protocol buffer text format.\n// It is similar to strconv.Quote except we don't use Go escape sequences,\n// we treat the string as a byte sequence, and we use octal escapes.\n// These differences are to maintain interoperability with the other\n// languages' implementations of the text format.\nfunc writeString(w *textWriter, s string) error {\n\t// use WriteByte here to get any needed indent\n\tif err := w.WriteByte('\"'); err != nil {\n\t\treturn err\n\t}\n\t// Loop over the bytes, not the runes.\n\tfor i := 0; i < len(s); i++ {\n\t\tvar err error\n\t\t// Divergence from C++: we don't escape apostrophes.\n\t\t// There's no need to escape them, and the C++ parser\n\t\t// copes with a naked apostrophe.\n\t\tswitch c := s[i]; c {\n\t\tcase '\\n':\n\t\t\t_, err = w.w.Write(backslashN)\n\t\tcase '\\r':\n\t\t\t_, err = w.w.Write(backslashR)\n\t\tcase '\\t':\n\t\t\t_, err = w.w.Write(backslashT)\n\t\tcase '\"':\n\t\t\t_, err = w.w.Write(backslashDQ)\n\t\tcase '\\\\':\n\t\t\t_, err = w.w.Write(backslashBS)\n\t\tdefault:\n\t\t\tif isprint(c) {\n\t\t\t\terr = w.w.WriteByte(c)\n\t\t\t} else {\n\t\t\t\t_, err = fmt.Fprintf(w.w, \"\\\\%03o\", c)\n\t\t\t}\n\t\t}\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn w.WriteByte('\"')\n}\n\nfunc writeUnknownStruct(w *textWriter, data []byte) (err error) {\n\tif !w.compact {\n\t\tif _, err := fmt.Fprintf(w, \"/* %d unknown bytes */\\n\", len(data)); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tb := NewBuffer(data)\n\tfor b.index < len(b.buf) {\n\t\tx, err := b.DecodeVarint()\n\t\tif err != nil {\n\t\t\t_, err := fmt.Fprintf(w, \"/* %v */\\n\", err)\n\t\t\treturn err\n\t\t}\n\t\twire, tag := x&7, x>>3\n\t\tif wire == WireEndGroup {\n\t\t\tw.unindent()\n\t\t\tif _, err := w.Write(endBraceNewline); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\tif _, err := fmt.Fprint(w, tag); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif wire != WireStartGroup {\n\t\t\tif err := w.WriteByte(':'); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t\tif !w.compact || wire == WireStartGroup {\n\t\t\tif err := w.WriteByte(' '); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t\tswitch wire {\n\t\tcase WireBytes:\n\t\t\tbuf, e := b.DecodeRawBytes(false)\n\t\t\tif e == nil {\n\t\t\t\t_, err = fmt.Fprintf(w, \"%q\", buf)\n\t\t\t} else {\n\t\t\t\t_, err = fmt.Fprintf(w, \"/* %v */\", e)\n\t\t\t}\n\t\tcase WireFixed32:\n\t\t\tx, err = b.DecodeFixed32()\n\t\t\terr = writeUnknownInt(w, x, err)\n\t\tcase WireFixed64:\n\t\t\tx, err = b.DecodeFixed64()\n\t\t\terr = writeUnknownInt(w, x, err)\n\t\tcase WireStartGroup:\n\t\t\terr = w.WriteByte('{')\n\t\t\tw.indent()\n\t\tcase WireVarint:\n\t\t\tx, err = b.DecodeVarint()\n\t\t\terr = writeUnknownInt(w, x, err)\n\t\tdefault:\n\t\t\t_, err = fmt.Fprintf(w, \"/* unknown wire type %d */\", wire)\n\t\t}\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif err = w.WriteByte('\\n'); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc writeUnknownInt(w *textWriter, x uint64, err error) error {\n\tif err == nil {\n\t\t_, err = fmt.Fprint(w, x)\n\t} else {\n\t\t_, err = fmt.Fprintf(w, \"/* %v */\", err)\n\t}\n\treturn err\n}\n\ntype int32Slice []int32\n\nfunc (s int32Slice) Len() int           { return len(s) }\nfunc (s int32Slice) Less(i, j int) bool { return s[i] < s[j] }\nfunc (s int32Slice) Swap(i, j int)      { s[i], s[j] = s[j], s[i] }\n\n// writeExtensions writes all the extensions in pv.\n// pv is assumed to be a pointer to a protocol message struct that is extendable.\nfunc (tm *TextMarshaler) writeExtensions(w *textWriter, pv reflect.Value) error {\n\temap := extensionMaps[pv.Type().Elem()]\n\tep, _ := extendable(pv.Interface())\n\n\t// Order the extensions by ID.\n\t// This isn't strictly necessary, but it will give us\n\t// canonical output, which will also make testing easier.\n\tm, mu := ep.extensionsRead()\n\tif m == nil {\n\t\treturn nil\n\t}\n\tmu.Lock()\n\tids := make([]int32, 0, len(m))\n\tfor id := range m {\n\t\tids = append(ids, id)\n\t}\n\tsort.Sort(int32Slice(ids))\n\tmu.Unlock()\n\n\tfor _, extNum := range ids {\n\t\text := m[extNum]\n\t\tvar desc *ExtensionDesc\n\t\tif emap != nil {\n\t\t\tdesc = emap[extNum]\n\t\t}\n\t\tif desc == nil {\n\t\t\t// Unknown extension.\n\t\t\tif err := writeUnknownStruct(w, ext.enc); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\tpb, err := GetExtension(ep, desc)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"failed getting extension: %v\", err)\n\t\t}\n\n\t\t// Repeated extensions will appear as a slice.\n\t\tif !desc.repeated() {\n\t\t\tif err := tm.writeExtension(w, desc.Name, pb); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t} else {\n\t\t\tv := reflect.ValueOf(pb)\n\t\t\tfor i := 0; i < v.Len(); i++ {\n\t\t\t\tif err := tm.writeExtension(w, desc.Name, v.Index(i).Interface()); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (tm *TextMarshaler) writeExtension(w *textWriter, name string, pb interface{}) error {\n\tif _, err := fmt.Fprintf(w, \"[%s]:\", name); err != nil {\n\t\treturn err\n\t}\n\tif !w.compact {\n\t\tif err := w.WriteByte(' '); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tif err := tm.writeAny(w, reflect.ValueOf(pb), nil); err != nil {\n\t\treturn err\n\t}\n\tif err := w.WriteByte('\\n'); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc (w *textWriter) writeIndent() {\n\tif !w.complete {\n\t\treturn\n\t}\n\tremain := w.ind * 2\n\tfor remain > 0 {\n\t\tn := remain\n\t\tif n > len(spaces) {\n\t\t\tn = len(spaces)\n\t\t}\n\t\tw.w.Write(spaces[:n])\n\t\tremain -= n\n\t}\n\tw.complete = false\n}\n\n// TextMarshaler is a configurable text format marshaler.\ntype TextMarshaler struct {\n\tCompact   bool // use compact text format (one line).\n\tExpandAny bool // expand google.protobuf.Any messages of known types\n}\n\n// Marshal writes a given protocol buffer in text format.\n// The only errors returned are from w.\nfunc (tm *TextMarshaler) Marshal(w io.Writer, pb Message) error {\n\tval := reflect.ValueOf(pb)\n\tif pb == nil || val.IsNil() {\n\t\tw.Write([]byte(\"<nil>\"))\n\t\treturn nil\n\t}\n\tvar bw *bufio.Writer\n\tww, ok := w.(writer)\n\tif !ok {\n\t\tbw = bufio.NewWriter(w)\n\t\tww = bw\n\t}\n\taw := &textWriter{\n\t\tw:        ww,\n\t\tcomplete: true,\n\t\tcompact:  tm.Compact,\n\t}\n\n\tif etm, ok := pb.(encoding.TextMarshaler); ok {\n\t\ttext, err := etm.MarshalText()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif _, err = aw.Write(text); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif bw != nil {\n\t\t\treturn bw.Flush()\n\t\t}\n\t\treturn nil\n\t}\n\t// Dereference the received pointer so we don't have outer < and >.\n\tv := reflect.Indirect(val)\n\tif err := tm.writeStruct(aw, v); err != nil {\n\t\treturn err\n\t}\n\tif bw != nil {\n\t\treturn bw.Flush()\n\t}\n\treturn nil\n}\n\n// Text is the same as Marshal, but returns the string directly.\nfunc (tm *TextMarshaler) Text(pb Message) string {\n\tvar buf bytes.Buffer\n\ttm.Marshal(&buf, pb)\n\treturn buf.String()\n}\n\nvar (\n\tdefaultTextMarshaler = TextMarshaler{}\n\tcompactTextMarshaler = TextMarshaler{Compact: true}\n)\n\n// TODO: consider removing some of the Marshal functions below.\n\n// MarshalText writes a given protocol buffer in text format.\n// The only errors returned are from w.\nfunc MarshalText(w io.Writer, pb Message) error { return defaultTextMarshaler.Marshal(w, pb) }\n\n// MarshalTextString is the same as MarshalText, but returns the string directly.\nfunc MarshalTextString(pb Message) string { return defaultTextMarshaler.Text(pb) }\n\n// CompactText writes a given protocol buffer in compact text format (one line).\nfunc CompactText(w io.Writer, pb Message) error { return compactTextMarshaler.Marshal(w, pb) }\n\n// CompactTextString is the same as CompactText, but returns the string directly.\nfunc CompactTextString(pb Message) string { return compactTextMarshaler.Text(pb) }\n"
  },
  {
    "path": "vendor/github.com/golang/protobuf/proto/text_parser.go",
    "content": "// Go support for Protocol Buffers - Google's data interchange format\n//\n// Copyright 2010 The Go Authors.  All rights reserved.\n// https://github.com/golang/protobuf\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\npackage proto\n\n// Functions for parsing the Text protocol buffer format.\n// TODO: message sets.\n\nimport (\n\t\"encoding\"\n\t\"errors\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"strconv\"\n\t\"strings\"\n\t\"unicode/utf8\"\n)\n\n// Error string emitted when deserializing Any and fields are already set\nconst anyRepeatedlyUnpacked = \"Any message unpacked multiple times, or %q already set\"\n\ntype ParseError struct {\n\tMessage string\n\tLine    int // 1-based line number\n\tOffset  int // 0-based byte offset from start of input\n}\n\nfunc (p *ParseError) Error() string {\n\tif p.Line == 1 {\n\t\t// show offset only for first line\n\t\treturn fmt.Sprintf(\"line 1.%d: %v\", p.Offset, p.Message)\n\t}\n\treturn fmt.Sprintf(\"line %d: %v\", p.Line, p.Message)\n}\n\ntype token struct {\n\tvalue    string\n\terr      *ParseError\n\tline     int    // line number\n\toffset   int    // byte number from start of input, not start of line\n\tunquoted string // the unquoted version of value, if it was a quoted string\n}\n\nfunc (t *token) String() string {\n\tif t.err == nil {\n\t\treturn fmt.Sprintf(\"%q (line=%d, offset=%d)\", t.value, t.line, t.offset)\n\t}\n\treturn fmt.Sprintf(\"parse error: %v\", t.err)\n}\n\ntype textParser struct {\n\ts            string // remaining input\n\tdone         bool   // whether the parsing is finished (success or error)\n\tbacked       bool   // whether back() was called\n\toffset, line int\n\tcur          token\n}\n\nfunc newTextParser(s string) *textParser {\n\tp := new(textParser)\n\tp.s = s\n\tp.line = 1\n\tp.cur.line = 1\n\treturn p\n}\n\nfunc (p *textParser) errorf(format string, a ...interface{}) *ParseError {\n\tpe := &ParseError{fmt.Sprintf(format, a...), p.cur.line, p.cur.offset}\n\tp.cur.err = pe\n\tp.done = true\n\treturn pe\n}\n\n// Numbers and identifiers are matched by [-+._A-Za-z0-9]\nfunc isIdentOrNumberChar(c byte) bool {\n\tswitch {\n\tcase 'A' <= c && c <= 'Z', 'a' <= c && c <= 'z':\n\t\treturn true\n\tcase '0' <= c && c <= '9':\n\t\treturn true\n\t}\n\tswitch c {\n\tcase '-', '+', '.', '_':\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc isWhitespace(c byte) bool {\n\tswitch c {\n\tcase ' ', '\\t', '\\n', '\\r':\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc isQuote(c byte) bool {\n\tswitch c {\n\tcase '\"', '\\'':\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc (p *textParser) skipWhitespace() {\n\ti := 0\n\tfor i < len(p.s) && (isWhitespace(p.s[i]) || p.s[i] == '#') {\n\t\tif p.s[i] == '#' {\n\t\t\t// comment; skip to end of line or input\n\t\t\tfor i < len(p.s) && p.s[i] != '\\n' {\n\t\t\t\ti++\n\t\t\t}\n\t\t\tif i == len(p.s) {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif p.s[i] == '\\n' {\n\t\t\tp.line++\n\t\t}\n\t\ti++\n\t}\n\tp.offset += i\n\tp.s = p.s[i:len(p.s)]\n\tif len(p.s) == 0 {\n\t\tp.done = true\n\t}\n}\n\nfunc (p *textParser) advance() {\n\t// Skip whitespace\n\tp.skipWhitespace()\n\tif p.done {\n\t\treturn\n\t}\n\n\t// Start of non-whitespace\n\tp.cur.err = nil\n\tp.cur.offset, p.cur.line = p.offset, p.line\n\tp.cur.unquoted = \"\"\n\tswitch p.s[0] {\n\tcase '<', '>', '{', '}', ':', '[', ']', ';', ',', '/':\n\t\t// Single symbol\n\t\tp.cur.value, p.s = p.s[0:1], p.s[1:len(p.s)]\n\tcase '\"', '\\'':\n\t\t// Quoted string\n\t\ti := 1\n\t\tfor i < len(p.s) && p.s[i] != p.s[0] && p.s[i] != '\\n' {\n\t\t\tif p.s[i] == '\\\\' && i+1 < len(p.s) {\n\t\t\t\t// skip escaped char\n\t\t\t\ti++\n\t\t\t}\n\t\t\ti++\n\t\t}\n\t\tif i >= len(p.s) || p.s[i] != p.s[0] {\n\t\t\tp.errorf(\"unmatched quote\")\n\t\t\treturn\n\t\t}\n\t\tunq, err := unquoteC(p.s[1:i], rune(p.s[0]))\n\t\tif err != nil {\n\t\t\tp.errorf(\"invalid quoted string %s: %v\", p.s[0:i+1], err)\n\t\t\treturn\n\t\t}\n\t\tp.cur.value, p.s = p.s[0:i+1], p.s[i+1:len(p.s)]\n\t\tp.cur.unquoted = unq\n\tdefault:\n\t\ti := 0\n\t\tfor i < len(p.s) && isIdentOrNumberChar(p.s[i]) {\n\t\t\ti++\n\t\t}\n\t\tif i == 0 {\n\t\t\tp.errorf(\"unexpected byte %#x\", p.s[0])\n\t\t\treturn\n\t\t}\n\t\tp.cur.value, p.s = p.s[0:i], p.s[i:len(p.s)]\n\t}\n\tp.offset += len(p.cur.value)\n}\n\nvar (\n\terrBadUTF8 = errors.New(\"proto: bad UTF-8\")\n)\n\nfunc unquoteC(s string, quote rune) (string, error) {\n\t// This is based on C++'s tokenizer.cc.\n\t// Despite its name, this is *not* parsing C syntax.\n\t// For instance, \"\\0\" is an invalid quoted string.\n\n\t// Avoid allocation in trivial cases.\n\tsimple := true\n\tfor _, r := range s {\n\t\tif r == '\\\\' || r == quote {\n\t\t\tsimple = false\n\t\t\tbreak\n\t\t}\n\t}\n\tif simple {\n\t\treturn s, nil\n\t}\n\n\tbuf := make([]byte, 0, 3*len(s)/2)\n\tfor len(s) > 0 {\n\t\tr, n := utf8.DecodeRuneInString(s)\n\t\tif r == utf8.RuneError && n == 1 {\n\t\t\treturn \"\", errBadUTF8\n\t\t}\n\t\ts = s[n:]\n\t\tif r != '\\\\' {\n\t\t\tif r < utf8.RuneSelf {\n\t\t\t\tbuf = append(buf, byte(r))\n\t\t\t} else {\n\t\t\t\tbuf = append(buf, string(r)...)\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\tch, tail, err := unescape(s)\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\t\tbuf = append(buf, ch...)\n\t\ts = tail\n\t}\n\treturn string(buf), nil\n}\n\nfunc unescape(s string) (ch string, tail string, err error) {\n\tr, n := utf8.DecodeRuneInString(s)\n\tif r == utf8.RuneError && n == 1 {\n\t\treturn \"\", \"\", errBadUTF8\n\t}\n\ts = s[n:]\n\tswitch r {\n\tcase 'a':\n\t\treturn \"\\a\", s, nil\n\tcase 'b':\n\t\treturn \"\\b\", s, nil\n\tcase 'f':\n\t\treturn \"\\f\", s, nil\n\tcase 'n':\n\t\treturn \"\\n\", s, nil\n\tcase 'r':\n\t\treturn \"\\r\", s, nil\n\tcase 't':\n\t\treturn \"\\t\", s, nil\n\tcase 'v':\n\t\treturn \"\\v\", s, nil\n\tcase '?':\n\t\treturn \"?\", s, nil // trigraph workaround\n\tcase '\\'', '\"', '\\\\':\n\t\treturn string(r), s, nil\n\tcase '0', '1', '2', '3', '4', '5', '6', '7':\n\t\tif len(s) < 2 {\n\t\t\treturn \"\", \"\", fmt.Errorf(`\\%c requires 2 following digits`, r)\n\t\t}\n\t\tss := string(r) + s[:2]\n\t\ts = s[2:]\n\t\ti, err := strconv.ParseUint(ss, 8, 8)\n\t\tif err != nil {\n\t\t\treturn \"\", \"\", fmt.Errorf(`\\%s contains non-octal digits`, ss)\n\t\t}\n\t\treturn string([]byte{byte(i)}), s, nil\n\tcase 'x', 'X', 'u', 'U':\n\t\tvar n int\n\t\tswitch r {\n\t\tcase 'x', 'X':\n\t\t\tn = 2\n\t\tcase 'u':\n\t\t\tn = 4\n\t\tcase 'U':\n\t\t\tn = 8\n\t\t}\n\t\tif len(s) < n {\n\t\t\treturn \"\", \"\", fmt.Errorf(`\\%c requires %d following digits`, r, n)\n\t\t}\n\t\tss := s[:n]\n\t\ts = s[n:]\n\t\ti, err := strconv.ParseUint(ss, 16, 64)\n\t\tif err != nil {\n\t\t\treturn \"\", \"\", fmt.Errorf(`\\%c%s contains non-hexadecimal digits`, r, ss)\n\t\t}\n\t\tif r == 'x' || r == 'X' {\n\t\t\treturn string([]byte{byte(i)}), s, nil\n\t\t}\n\t\tif i > utf8.MaxRune {\n\t\t\treturn \"\", \"\", fmt.Errorf(`\\%c%s is not a valid Unicode code point`, r, ss)\n\t\t}\n\t\treturn string(i), s, nil\n\t}\n\treturn \"\", \"\", fmt.Errorf(`unknown escape \\%c`, r)\n}\n\n// Back off the parser by one token. Can only be done between calls to next().\n// It makes the next advance() a no-op.\nfunc (p *textParser) back() { p.backed = true }\n\n// Advances the parser and returns the new current token.\nfunc (p *textParser) next() *token {\n\tif p.backed || p.done {\n\t\tp.backed = false\n\t\treturn &p.cur\n\t}\n\tp.advance()\n\tif p.done {\n\t\tp.cur.value = \"\"\n\t} else if len(p.cur.value) > 0 && isQuote(p.cur.value[0]) {\n\t\t// Look for multiple quoted strings separated by whitespace,\n\t\t// and concatenate them.\n\t\tcat := p.cur\n\t\tfor {\n\t\t\tp.skipWhitespace()\n\t\t\tif p.done || !isQuote(p.s[0]) {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tp.advance()\n\t\t\tif p.cur.err != nil {\n\t\t\t\treturn &p.cur\n\t\t\t}\n\t\t\tcat.value += \" \" + p.cur.value\n\t\t\tcat.unquoted += p.cur.unquoted\n\t\t}\n\t\tp.done = false // parser may have seen EOF, but we want to return cat\n\t\tp.cur = cat\n\t}\n\treturn &p.cur\n}\n\nfunc (p *textParser) consumeToken(s string) error {\n\ttok := p.next()\n\tif tok.err != nil {\n\t\treturn tok.err\n\t}\n\tif tok.value != s {\n\t\tp.back()\n\t\treturn p.errorf(\"expected %q, found %q\", s, tok.value)\n\t}\n\treturn nil\n}\n\n// Return a RequiredNotSetError indicating which required field was not set.\nfunc (p *textParser) missingRequiredFieldError(sv reflect.Value) *RequiredNotSetError {\n\tst := sv.Type()\n\tsprops := GetProperties(st)\n\tfor i := 0; i < st.NumField(); i++ {\n\t\tif !isNil(sv.Field(i)) {\n\t\t\tcontinue\n\t\t}\n\n\t\tprops := sprops.Prop[i]\n\t\tif props.Required {\n\t\t\treturn &RequiredNotSetError{fmt.Sprintf(\"%v.%v\", st, props.OrigName)}\n\t\t}\n\t}\n\treturn &RequiredNotSetError{fmt.Sprintf(\"%v.<unknown field name>\", st)} // should not happen\n}\n\n// Returns the index in the struct for the named field, as well as the parsed tag properties.\nfunc structFieldByName(sprops *StructProperties, name string) (int, *Properties, bool) {\n\ti, ok := sprops.decoderOrigNames[name]\n\tif ok {\n\t\treturn i, sprops.Prop[i], true\n\t}\n\treturn -1, nil, false\n}\n\n// Consume a ':' from the input stream (if the next token is a colon),\n// returning an error if a colon is needed but not present.\nfunc (p *textParser) checkForColon(props *Properties, typ reflect.Type) *ParseError {\n\ttok := p.next()\n\tif tok.err != nil {\n\t\treturn tok.err\n\t}\n\tif tok.value != \":\" {\n\t\t// Colon is optional when the field is a group or message.\n\t\tneedColon := true\n\t\tswitch props.Wire {\n\t\tcase \"group\":\n\t\t\tneedColon = false\n\t\tcase \"bytes\":\n\t\t\t// A \"bytes\" field is either a message, a string, or a repeated field;\n\t\t\t// those three become *T, *string and []T respectively, so we can check for\n\t\t\t// this field being a pointer to a non-string.\n\t\t\tif typ.Kind() == reflect.Ptr {\n\t\t\t\t// *T or *string\n\t\t\t\tif typ.Elem().Kind() == reflect.String {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t} else if typ.Kind() == reflect.Slice {\n\t\t\t\t// []T or []*T\n\t\t\t\tif typ.Elem().Kind() != reflect.Ptr {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t} else if typ.Kind() == reflect.String {\n\t\t\t\t// The proto3 exception is for a string field,\n\t\t\t\t// which requires a colon.\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tneedColon = false\n\t\t}\n\t\tif needColon {\n\t\t\treturn p.errorf(\"expected ':', found %q\", tok.value)\n\t\t}\n\t\tp.back()\n\t}\n\treturn nil\n}\n\nfunc (p *textParser) readStruct(sv reflect.Value, terminator string) error {\n\tst := sv.Type()\n\tsprops := GetProperties(st)\n\treqCount := sprops.reqCount\n\tvar reqFieldErr error\n\tfieldSet := make(map[string]bool)\n\t// A struct is a sequence of \"name: value\", terminated by one of\n\t// '>' or '}', or the end of the input.  A name may also be\n\t// \"[extension]\" or \"[type/url]\".\n\t//\n\t// The whole struct can also be an expanded Any message, like:\n\t// [type/url] < ... struct contents ... >\n\tfor {\n\t\ttok := p.next()\n\t\tif tok.err != nil {\n\t\t\treturn tok.err\n\t\t}\n\t\tif tok.value == terminator {\n\t\t\tbreak\n\t\t}\n\t\tif tok.value == \"[\" {\n\t\t\t// Looks like an extension or an Any.\n\t\t\t//\n\t\t\t// TODO: Check whether we need to handle\n\t\t\t// namespace rooted names (e.g. \".something.Foo\").\n\t\t\textName, err := p.consumeExtName()\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tif s := strings.LastIndex(extName, \"/\"); s >= 0 {\n\t\t\t\t// If it contains a slash, it's an Any type URL.\n\t\t\t\tmessageName := extName[s+1:]\n\t\t\t\tmt := MessageType(messageName)\n\t\t\t\tif mt == nil {\n\t\t\t\t\treturn p.errorf(\"unrecognized message %q in google.protobuf.Any\", messageName)\n\t\t\t\t}\n\t\t\t\ttok = p.next()\n\t\t\t\tif tok.err != nil {\n\t\t\t\t\treturn tok.err\n\t\t\t\t}\n\t\t\t\t// consume an optional colon\n\t\t\t\tif tok.value == \":\" {\n\t\t\t\t\ttok = p.next()\n\t\t\t\t\tif tok.err != nil {\n\t\t\t\t\t\treturn tok.err\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tvar terminator string\n\t\t\t\tswitch tok.value {\n\t\t\t\tcase \"<\":\n\t\t\t\t\tterminator = \">\"\n\t\t\t\tcase \"{\":\n\t\t\t\t\tterminator = \"}\"\n\t\t\t\tdefault:\n\t\t\t\t\treturn p.errorf(\"expected '{' or '<', found %q\", tok.value)\n\t\t\t\t}\n\t\t\t\tv := reflect.New(mt.Elem())\n\t\t\t\tif pe := p.readStruct(v.Elem(), terminator); pe != nil {\n\t\t\t\t\treturn pe\n\t\t\t\t}\n\t\t\t\tb, err := Marshal(v.Interface().(Message))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn p.errorf(\"failed to marshal message of type %q: %v\", messageName, err)\n\t\t\t\t}\n\t\t\t\tif fieldSet[\"type_url\"] {\n\t\t\t\t\treturn p.errorf(anyRepeatedlyUnpacked, \"type_url\")\n\t\t\t\t}\n\t\t\t\tif fieldSet[\"value\"] {\n\t\t\t\t\treturn p.errorf(anyRepeatedlyUnpacked, \"value\")\n\t\t\t\t}\n\t\t\t\tsv.FieldByName(\"TypeUrl\").SetString(extName)\n\t\t\t\tsv.FieldByName(\"Value\").SetBytes(b)\n\t\t\t\tfieldSet[\"type_url\"] = true\n\t\t\t\tfieldSet[\"value\"] = true\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tvar desc *ExtensionDesc\n\t\t\t// This could be faster, but it's functional.\n\t\t\t// TODO: Do something smarter than a linear scan.\n\t\t\tfor _, d := range RegisteredExtensions(reflect.New(st).Interface().(Message)) {\n\t\t\t\tif d.Name == extName {\n\t\t\t\t\tdesc = d\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif desc == nil {\n\t\t\t\treturn p.errorf(\"unrecognized extension %q\", extName)\n\t\t\t}\n\n\t\t\tprops := &Properties{}\n\t\t\tprops.Parse(desc.Tag)\n\n\t\t\ttyp := reflect.TypeOf(desc.ExtensionType)\n\t\t\tif err := p.checkForColon(props, typ); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\trep := desc.repeated()\n\n\t\t\t// Read the extension structure, and set it in\n\t\t\t// the value we're constructing.\n\t\t\tvar ext reflect.Value\n\t\t\tif !rep {\n\t\t\t\text = reflect.New(typ).Elem()\n\t\t\t} else {\n\t\t\t\text = reflect.New(typ.Elem()).Elem()\n\t\t\t}\n\t\t\tif err := p.readAny(ext, props); err != nil {\n\t\t\t\tif _, ok := err.(*RequiredNotSetError); !ok {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\treqFieldErr = err\n\t\t\t}\n\t\t\tep := sv.Addr().Interface().(Message)\n\t\t\tif !rep {\n\t\t\t\tSetExtension(ep, desc, ext.Interface())\n\t\t\t} else {\n\t\t\t\told, err := GetExtension(ep, desc)\n\t\t\t\tvar sl reflect.Value\n\t\t\t\tif err == nil {\n\t\t\t\t\tsl = reflect.ValueOf(old) // existing slice\n\t\t\t\t} else {\n\t\t\t\t\tsl = reflect.MakeSlice(typ, 0, 1)\n\t\t\t\t}\n\t\t\t\tsl = reflect.Append(sl, ext)\n\t\t\t\tSetExtension(ep, desc, sl.Interface())\n\t\t\t}\n\t\t\tif err := p.consumeOptionalSeparator(); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\t// This is a normal, non-extension field.\n\t\tname := tok.value\n\t\tvar dst reflect.Value\n\t\tfi, props, ok := structFieldByName(sprops, name)\n\t\tif ok {\n\t\t\tdst = sv.Field(fi)\n\t\t} else if oop, ok := sprops.OneofTypes[name]; ok {\n\t\t\t// It is a oneof.\n\t\t\tprops = oop.Prop\n\t\t\tnv := reflect.New(oop.Type.Elem())\n\t\t\tdst = nv.Elem().Field(0)\n\t\t\tfield := sv.Field(oop.Field)\n\t\t\tif !field.IsNil() {\n\t\t\t\treturn p.errorf(\"field '%s' would overwrite already parsed oneof '%s'\", name, sv.Type().Field(oop.Field).Name)\n\t\t\t}\n\t\t\tfield.Set(nv)\n\t\t}\n\t\tif !dst.IsValid() {\n\t\t\treturn p.errorf(\"unknown field name %q in %v\", name, st)\n\t\t}\n\n\t\tif dst.Kind() == reflect.Map {\n\t\t\t// Consume any colon.\n\t\t\tif err := p.checkForColon(props, dst.Type()); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\t// Construct the map if it doesn't already exist.\n\t\t\tif dst.IsNil() {\n\t\t\t\tdst.Set(reflect.MakeMap(dst.Type()))\n\t\t\t}\n\t\t\tkey := reflect.New(dst.Type().Key()).Elem()\n\t\t\tval := reflect.New(dst.Type().Elem()).Elem()\n\n\t\t\t// The map entry should be this sequence of tokens:\n\t\t\t//\t< key : KEY value : VALUE >\n\t\t\t// However, implementations may omit key or value, and technically\n\t\t\t// we should support them in any order.  See b/28924776 for a time\n\t\t\t// this went wrong.\n\n\t\t\ttok := p.next()\n\t\t\tvar terminator string\n\t\t\tswitch tok.value {\n\t\t\tcase \"<\":\n\t\t\t\tterminator = \">\"\n\t\t\tcase \"{\":\n\t\t\t\tterminator = \"}\"\n\t\t\tdefault:\n\t\t\t\treturn p.errorf(\"expected '{' or '<', found %q\", tok.value)\n\t\t\t}\n\t\t\tfor {\n\t\t\t\ttok := p.next()\n\t\t\t\tif tok.err != nil {\n\t\t\t\t\treturn tok.err\n\t\t\t\t}\n\t\t\t\tif tok.value == terminator {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tswitch tok.value {\n\t\t\t\tcase \"key\":\n\t\t\t\t\tif err := p.consumeToken(\":\"); err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t\tif err := p.readAny(key, props.MapKeyProp); err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t\tif err := p.consumeOptionalSeparator(); err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\tcase \"value\":\n\t\t\t\t\tif err := p.checkForColon(props.MapValProp, dst.Type().Elem()); err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t\tif err := p.readAny(val, props.MapValProp); err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t\tif err := p.consumeOptionalSeparator(); err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\tp.back()\n\t\t\t\t\treturn p.errorf(`expected \"key\", \"value\", or %q, found %q`, terminator, tok.value)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdst.SetMapIndex(key, val)\n\t\t\tcontinue\n\t\t}\n\n\t\t// Check that it's not already set if it's not a repeated field.\n\t\tif !props.Repeated && fieldSet[name] {\n\t\t\treturn p.errorf(\"non-repeated field %q was repeated\", name)\n\t\t}\n\n\t\tif err := p.checkForColon(props, dst.Type()); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// Parse into the field.\n\t\tfieldSet[name] = true\n\t\tif err := p.readAny(dst, props); err != nil {\n\t\t\tif _, ok := err.(*RequiredNotSetError); !ok {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\treqFieldErr = err\n\t\t}\n\t\tif props.Required {\n\t\t\treqCount--\n\t\t}\n\n\t\tif err := p.consumeOptionalSeparator(); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t}\n\n\tif reqCount > 0 {\n\t\treturn p.missingRequiredFieldError(sv)\n\t}\n\treturn reqFieldErr\n}\n\n// consumeExtName consumes extension name or expanded Any type URL and the\n// following ']'. It returns the name or URL consumed.\nfunc (p *textParser) consumeExtName() (string, error) {\n\ttok := p.next()\n\tif tok.err != nil {\n\t\treturn \"\", tok.err\n\t}\n\n\t// If extension name or type url is quoted, it's a single token.\n\tif len(tok.value) > 2 && isQuote(tok.value[0]) && tok.value[len(tok.value)-1] == tok.value[0] {\n\t\tname, err := unquoteC(tok.value[1:len(tok.value)-1], rune(tok.value[0]))\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\t\treturn name, p.consumeToken(\"]\")\n\t}\n\n\t// Consume everything up to \"]\"\n\tvar parts []string\n\tfor tok.value != \"]\" {\n\t\tparts = append(parts, tok.value)\n\t\ttok = p.next()\n\t\tif tok.err != nil {\n\t\t\treturn \"\", p.errorf(\"unrecognized type_url or extension name: %s\", tok.err)\n\t\t}\n\t\tif p.done && tok.value != \"]\" {\n\t\t\treturn \"\", p.errorf(\"unclosed type_url or extension name\")\n\t\t}\n\t}\n\treturn strings.Join(parts, \"\"), nil\n}\n\n// consumeOptionalSeparator consumes an optional semicolon or comma.\n// It is used in readStruct to provide backward compatibility.\nfunc (p *textParser) consumeOptionalSeparator() error {\n\ttok := p.next()\n\tif tok.err != nil {\n\t\treturn tok.err\n\t}\n\tif tok.value != \";\" && tok.value != \",\" {\n\t\tp.back()\n\t}\n\treturn nil\n}\n\nfunc (p *textParser) readAny(v reflect.Value, props *Properties) error {\n\ttok := p.next()\n\tif tok.err != nil {\n\t\treturn tok.err\n\t}\n\tif tok.value == \"\" {\n\t\treturn p.errorf(\"unexpected EOF\")\n\t}\n\n\tswitch fv := v; fv.Kind() {\n\tcase reflect.Slice:\n\t\tat := v.Type()\n\t\tif at.Elem().Kind() == reflect.Uint8 {\n\t\t\t// Special case for []byte\n\t\t\tif tok.value[0] != '\"' && tok.value[0] != '\\'' {\n\t\t\t\t// Deliberately written out here, as the error after\n\t\t\t\t// this switch statement would write \"invalid []byte: ...\",\n\t\t\t\t// which is not as user-friendly.\n\t\t\t\treturn p.errorf(\"invalid string: %v\", tok.value)\n\t\t\t}\n\t\t\tbytes := []byte(tok.unquoted)\n\t\t\tfv.Set(reflect.ValueOf(bytes))\n\t\t\treturn nil\n\t\t}\n\t\t// Repeated field.\n\t\tif tok.value == \"[\" {\n\t\t\t// Repeated field with list notation, like [1,2,3].\n\t\t\tfor {\n\t\t\t\tfv.Set(reflect.Append(fv, reflect.New(at.Elem()).Elem()))\n\t\t\t\terr := p.readAny(fv.Index(fv.Len()-1), props)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\ttok := p.next()\n\t\t\t\tif tok.err != nil {\n\t\t\t\t\treturn tok.err\n\t\t\t\t}\n\t\t\t\tif tok.value == \"]\" {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tif tok.value != \",\" {\n\t\t\t\t\treturn p.errorf(\"Expected ']' or ',' found %q\", tok.value)\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn nil\n\t\t}\n\t\t// One value of the repeated field.\n\t\tp.back()\n\t\tfv.Set(reflect.Append(fv, reflect.New(at.Elem()).Elem()))\n\t\treturn p.readAny(fv.Index(fv.Len()-1), props)\n\tcase reflect.Bool:\n\t\t// true/1/t/True or false/f/0/False.\n\t\tswitch tok.value {\n\t\tcase \"true\", \"1\", \"t\", \"True\":\n\t\t\tfv.SetBool(true)\n\t\t\treturn nil\n\t\tcase \"false\", \"0\", \"f\", \"False\":\n\t\t\tfv.SetBool(false)\n\t\t\treturn nil\n\t\t}\n\tcase reflect.Float32, reflect.Float64:\n\t\tv := tok.value\n\t\t// Ignore 'f' for compatibility with output generated by C++, but don't\n\t\t// remove 'f' when the value is \"-inf\" or \"inf\".\n\t\tif strings.HasSuffix(v, \"f\") && tok.value != \"-inf\" && tok.value != \"inf\" {\n\t\t\tv = v[:len(v)-1]\n\t\t}\n\t\tif f, err := strconv.ParseFloat(v, fv.Type().Bits()); err == nil {\n\t\t\tfv.SetFloat(f)\n\t\t\treturn nil\n\t\t}\n\tcase reflect.Int32:\n\t\tif x, err := strconv.ParseInt(tok.value, 0, 32); err == nil {\n\t\t\tfv.SetInt(x)\n\t\t\treturn nil\n\t\t}\n\n\t\tif len(props.Enum) == 0 {\n\t\t\tbreak\n\t\t}\n\t\tm, ok := enumValueMaps[props.Enum]\n\t\tif !ok {\n\t\t\tbreak\n\t\t}\n\t\tx, ok := m[tok.value]\n\t\tif !ok {\n\t\t\tbreak\n\t\t}\n\t\tfv.SetInt(int64(x))\n\t\treturn nil\n\tcase reflect.Int64:\n\t\tif x, err := strconv.ParseInt(tok.value, 0, 64); err == nil {\n\t\t\tfv.SetInt(x)\n\t\t\treturn nil\n\t\t}\n\n\tcase reflect.Ptr:\n\t\t// A basic field (indirected through pointer), or a repeated message/group\n\t\tp.back()\n\t\tfv.Set(reflect.New(fv.Type().Elem()))\n\t\treturn p.readAny(fv.Elem(), props)\n\tcase reflect.String:\n\t\tif tok.value[0] == '\"' || tok.value[0] == '\\'' {\n\t\t\tfv.SetString(tok.unquoted)\n\t\t\treturn nil\n\t\t}\n\tcase reflect.Struct:\n\t\tvar terminator string\n\t\tswitch tok.value {\n\t\tcase \"{\":\n\t\t\tterminator = \"}\"\n\t\tcase \"<\":\n\t\t\tterminator = \">\"\n\t\tdefault:\n\t\t\treturn p.errorf(\"expected '{' or '<', found %q\", tok.value)\n\t\t}\n\t\t// TODO: Handle nested messages which implement encoding.TextUnmarshaler.\n\t\treturn p.readStruct(fv, terminator)\n\tcase reflect.Uint32:\n\t\tif x, err := strconv.ParseUint(tok.value, 0, 32); err == nil {\n\t\t\tfv.SetUint(uint64(x))\n\t\t\treturn nil\n\t\t}\n\tcase reflect.Uint64:\n\t\tif x, err := strconv.ParseUint(tok.value, 0, 64); err == nil {\n\t\t\tfv.SetUint(x)\n\t\t\treturn nil\n\t\t}\n\t}\n\treturn p.errorf(\"invalid %v: %v\", v.Type(), tok.value)\n}\n\n// UnmarshalText reads a protocol buffer in Text format. UnmarshalText resets pb\n// before starting to unmarshal, so any existing data in pb is always removed.\n// If a required field is not set and no other error occurs,\n// UnmarshalText returns *RequiredNotSetError.\nfunc UnmarshalText(s string, pb Message) error {\n\tif um, ok := pb.(encoding.TextUnmarshaler); ok {\n\t\treturn um.UnmarshalText([]byte(s))\n\t}\n\tpb.Reset()\n\tv := reflect.ValueOf(pb)\n\treturn newTextParser(s).readStruct(v.Elem(), \"\")\n}\n"
  },
  {
    "path": "vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// source: google/protobuf/descriptor.proto\n\npackage descriptor\n\nimport (\n\tfmt \"fmt\"\n\tproto \"github.com/golang/protobuf/proto\"\n\tmath \"math\"\n)\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar _ = proto.Marshal\nvar _ = fmt.Errorf\nvar _ = math.Inf\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package\n\ntype FieldDescriptorProto_Type int32\n\nconst (\n\t// 0 is reserved for errors.\n\t// Order is weird for historical reasons.\n\tFieldDescriptorProto_TYPE_DOUBLE FieldDescriptorProto_Type = 1\n\tFieldDescriptorProto_TYPE_FLOAT  FieldDescriptorProto_Type = 2\n\t// Not ZigZag encoded.  Negative numbers take 10 bytes.  Use TYPE_SINT64 if\n\t// negative values are likely.\n\tFieldDescriptorProto_TYPE_INT64  FieldDescriptorProto_Type = 3\n\tFieldDescriptorProto_TYPE_UINT64 FieldDescriptorProto_Type = 4\n\t// Not ZigZag encoded.  Negative numbers take 10 bytes.  Use TYPE_SINT32 if\n\t// negative values are likely.\n\tFieldDescriptorProto_TYPE_INT32   FieldDescriptorProto_Type = 5\n\tFieldDescriptorProto_TYPE_FIXED64 FieldDescriptorProto_Type = 6\n\tFieldDescriptorProto_TYPE_FIXED32 FieldDescriptorProto_Type = 7\n\tFieldDescriptorProto_TYPE_BOOL    FieldDescriptorProto_Type = 8\n\tFieldDescriptorProto_TYPE_STRING  FieldDescriptorProto_Type = 9\n\t// Tag-delimited aggregate.\n\t// Group type is deprecated and not supported in proto3. However, Proto3\n\t// implementations should still be able to parse the group wire format and\n\t// treat group fields as unknown fields.\n\tFieldDescriptorProto_TYPE_GROUP   FieldDescriptorProto_Type = 10\n\tFieldDescriptorProto_TYPE_MESSAGE FieldDescriptorProto_Type = 11\n\t// New in version 2.\n\tFieldDescriptorProto_TYPE_BYTES    FieldDescriptorProto_Type = 12\n\tFieldDescriptorProto_TYPE_UINT32   FieldDescriptorProto_Type = 13\n\tFieldDescriptorProto_TYPE_ENUM     FieldDescriptorProto_Type = 14\n\tFieldDescriptorProto_TYPE_SFIXED32 FieldDescriptorProto_Type = 15\n\tFieldDescriptorProto_TYPE_SFIXED64 FieldDescriptorProto_Type = 16\n\tFieldDescriptorProto_TYPE_SINT32   FieldDescriptorProto_Type = 17\n\tFieldDescriptorProto_TYPE_SINT64   FieldDescriptorProto_Type = 18\n)\n\nvar FieldDescriptorProto_Type_name = map[int32]string{\n\t1:  \"TYPE_DOUBLE\",\n\t2:  \"TYPE_FLOAT\",\n\t3:  \"TYPE_INT64\",\n\t4:  \"TYPE_UINT64\",\n\t5:  \"TYPE_INT32\",\n\t6:  \"TYPE_FIXED64\",\n\t7:  \"TYPE_FIXED32\",\n\t8:  \"TYPE_BOOL\",\n\t9:  \"TYPE_STRING\",\n\t10: \"TYPE_GROUP\",\n\t11: \"TYPE_MESSAGE\",\n\t12: \"TYPE_BYTES\",\n\t13: \"TYPE_UINT32\",\n\t14: \"TYPE_ENUM\",\n\t15: \"TYPE_SFIXED32\",\n\t16: \"TYPE_SFIXED64\",\n\t17: \"TYPE_SINT32\",\n\t18: \"TYPE_SINT64\",\n}\n\nvar FieldDescriptorProto_Type_value = map[string]int32{\n\t\"TYPE_DOUBLE\":   1,\n\t\"TYPE_FLOAT\":    2,\n\t\"TYPE_INT64\":    3,\n\t\"TYPE_UINT64\":   4,\n\t\"TYPE_INT32\":    5,\n\t\"TYPE_FIXED64\":  6,\n\t\"TYPE_FIXED32\":  7,\n\t\"TYPE_BOOL\":     8,\n\t\"TYPE_STRING\":   9,\n\t\"TYPE_GROUP\":    10,\n\t\"TYPE_MESSAGE\":  11,\n\t\"TYPE_BYTES\":    12,\n\t\"TYPE_UINT32\":   13,\n\t\"TYPE_ENUM\":     14,\n\t\"TYPE_SFIXED32\": 15,\n\t\"TYPE_SFIXED64\": 16,\n\t\"TYPE_SINT32\":   17,\n\t\"TYPE_SINT64\":   18,\n}\n\nfunc (x FieldDescriptorProto_Type) Enum() *FieldDescriptorProto_Type {\n\tp := new(FieldDescriptorProto_Type)\n\t*p = x\n\treturn p\n}\n\nfunc (x FieldDescriptorProto_Type) String() string {\n\treturn proto.EnumName(FieldDescriptorProto_Type_name, int32(x))\n}\n\nfunc (x *FieldDescriptorProto_Type) UnmarshalJSON(data []byte) error {\n\tvalue, err := proto.UnmarshalJSONEnum(FieldDescriptorProto_Type_value, data, \"FieldDescriptorProto_Type\")\n\tif err != nil {\n\t\treturn err\n\t}\n\t*x = FieldDescriptorProto_Type(value)\n\treturn nil\n}\n\nfunc (FieldDescriptorProto_Type) EnumDescriptor() ([]byte, []int) {\n\treturn fileDescriptor_e5baabe45344a177, []int{4, 0}\n}\n\ntype FieldDescriptorProto_Label int32\n\nconst (\n\t// 0 is reserved for errors\n\tFieldDescriptorProto_LABEL_OPTIONAL FieldDescriptorProto_Label = 1\n\tFieldDescriptorProto_LABEL_REQUIRED FieldDescriptorProto_Label = 2\n\tFieldDescriptorProto_LABEL_REPEATED FieldDescriptorProto_Label = 3\n)\n\nvar FieldDescriptorProto_Label_name = map[int32]string{\n\t1: \"LABEL_OPTIONAL\",\n\t2: \"LABEL_REQUIRED\",\n\t3: \"LABEL_REPEATED\",\n}\n\nvar FieldDescriptorProto_Label_value = map[string]int32{\n\t\"LABEL_OPTIONAL\": 1,\n\t\"LABEL_REQUIRED\": 2,\n\t\"LABEL_REPEATED\": 3,\n}\n\nfunc (x FieldDescriptorProto_Label) Enum() *FieldDescriptorProto_Label {\n\tp := new(FieldDescriptorProto_Label)\n\t*p = x\n\treturn p\n}\n\nfunc (x FieldDescriptorProto_Label) String() string {\n\treturn proto.EnumName(FieldDescriptorProto_Label_name, int32(x))\n}\n\nfunc (x *FieldDescriptorProto_Label) UnmarshalJSON(data []byte) error {\n\tvalue, err := proto.UnmarshalJSONEnum(FieldDescriptorProto_Label_value, data, \"FieldDescriptorProto_Label\")\n\tif err != nil {\n\t\treturn err\n\t}\n\t*x = FieldDescriptorProto_Label(value)\n\treturn nil\n}\n\nfunc (FieldDescriptorProto_Label) EnumDescriptor() ([]byte, []int) {\n\treturn fileDescriptor_e5baabe45344a177, []int{4, 1}\n}\n\n// Generated classes can be optimized for speed or code size.\ntype FileOptions_OptimizeMode int32\n\nconst (\n\tFileOptions_SPEED FileOptions_OptimizeMode = 1\n\t// etc.\n\tFileOptions_CODE_SIZE    FileOptions_OptimizeMode = 2\n\tFileOptions_LITE_RUNTIME FileOptions_OptimizeMode = 3\n)\n\nvar FileOptions_OptimizeMode_name = map[int32]string{\n\t1: \"SPEED\",\n\t2: \"CODE_SIZE\",\n\t3: \"LITE_RUNTIME\",\n}\n\nvar FileOptions_OptimizeMode_value = map[string]int32{\n\t\"SPEED\":        1,\n\t\"CODE_SIZE\":    2,\n\t\"LITE_RUNTIME\": 3,\n}\n\nfunc (x FileOptions_OptimizeMode) Enum() *FileOptions_OptimizeMode {\n\tp := new(FileOptions_OptimizeMode)\n\t*p = x\n\treturn p\n}\n\nfunc (x FileOptions_OptimizeMode) String() string {\n\treturn proto.EnumName(FileOptions_OptimizeMode_name, int32(x))\n}\n\nfunc (x *FileOptions_OptimizeMode) UnmarshalJSON(data []byte) error {\n\tvalue, err := proto.UnmarshalJSONEnum(FileOptions_OptimizeMode_value, data, \"FileOptions_OptimizeMode\")\n\tif err != nil {\n\t\treturn err\n\t}\n\t*x = FileOptions_OptimizeMode(value)\n\treturn nil\n}\n\nfunc (FileOptions_OptimizeMode) EnumDescriptor() ([]byte, []int) {\n\treturn fileDescriptor_e5baabe45344a177, []int{10, 0}\n}\n\ntype FieldOptions_CType int32\n\nconst (\n\t// Default mode.\n\tFieldOptions_STRING       FieldOptions_CType = 0\n\tFieldOptions_CORD         FieldOptions_CType = 1\n\tFieldOptions_STRING_PIECE FieldOptions_CType = 2\n)\n\nvar FieldOptions_CType_name = map[int32]string{\n\t0: \"STRING\",\n\t1: \"CORD\",\n\t2: \"STRING_PIECE\",\n}\n\nvar FieldOptions_CType_value = map[string]int32{\n\t\"STRING\":       0,\n\t\"CORD\":         1,\n\t\"STRING_PIECE\": 2,\n}\n\nfunc (x FieldOptions_CType) Enum() *FieldOptions_CType {\n\tp := new(FieldOptions_CType)\n\t*p = x\n\treturn p\n}\n\nfunc (x FieldOptions_CType) String() string {\n\treturn proto.EnumName(FieldOptions_CType_name, int32(x))\n}\n\nfunc (x *FieldOptions_CType) UnmarshalJSON(data []byte) error {\n\tvalue, err := proto.UnmarshalJSONEnum(FieldOptions_CType_value, data, \"FieldOptions_CType\")\n\tif err != nil {\n\t\treturn err\n\t}\n\t*x = FieldOptions_CType(value)\n\treturn nil\n}\n\nfunc (FieldOptions_CType) EnumDescriptor() ([]byte, []int) {\n\treturn fileDescriptor_e5baabe45344a177, []int{12, 0}\n}\n\ntype FieldOptions_JSType int32\n\nconst (\n\t// Use the default type.\n\tFieldOptions_JS_NORMAL FieldOptions_JSType = 0\n\t// Use JavaScript strings.\n\tFieldOptions_JS_STRING FieldOptions_JSType = 1\n\t// Use JavaScript numbers.\n\tFieldOptions_JS_NUMBER FieldOptions_JSType = 2\n)\n\nvar FieldOptions_JSType_name = map[int32]string{\n\t0: \"JS_NORMAL\",\n\t1: \"JS_STRING\",\n\t2: \"JS_NUMBER\",\n}\n\nvar FieldOptions_JSType_value = map[string]int32{\n\t\"JS_NORMAL\": 0,\n\t\"JS_STRING\": 1,\n\t\"JS_NUMBER\": 2,\n}\n\nfunc (x FieldOptions_JSType) Enum() *FieldOptions_JSType {\n\tp := new(FieldOptions_JSType)\n\t*p = x\n\treturn p\n}\n\nfunc (x FieldOptions_JSType) String() string {\n\treturn proto.EnumName(FieldOptions_JSType_name, int32(x))\n}\n\nfunc (x *FieldOptions_JSType) UnmarshalJSON(data []byte) error {\n\tvalue, err := proto.UnmarshalJSONEnum(FieldOptions_JSType_value, data, \"FieldOptions_JSType\")\n\tif err != nil {\n\t\treturn err\n\t}\n\t*x = FieldOptions_JSType(value)\n\treturn nil\n}\n\nfunc (FieldOptions_JSType) EnumDescriptor() ([]byte, []int) {\n\treturn fileDescriptor_e5baabe45344a177, []int{12, 1}\n}\n\n// Is this method side-effect-free (or safe in HTTP parlance), or idempotent,\n// or neither? HTTP based RPC implementation may choose GET verb for safe\n// methods, and PUT verb for idempotent methods instead of the default POST.\ntype MethodOptions_IdempotencyLevel int32\n\nconst (\n\tMethodOptions_IDEMPOTENCY_UNKNOWN MethodOptions_IdempotencyLevel = 0\n\tMethodOptions_NO_SIDE_EFFECTS     MethodOptions_IdempotencyLevel = 1\n\tMethodOptions_IDEMPOTENT          MethodOptions_IdempotencyLevel = 2\n)\n\nvar MethodOptions_IdempotencyLevel_name = map[int32]string{\n\t0: \"IDEMPOTENCY_UNKNOWN\",\n\t1: \"NO_SIDE_EFFECTS\",\n\t2: \"IDEMPOTENT\",\n}\n\nvar MethodOptions_IdempotencyLevel_value = map[string]int32{\n\t\"IDEMPOTENCY_UNKNOWN\": 0,\n\t\"NO_SIDE_EFFECTS\":     1,\n\t\"IDEMPOTENT\":          2,\n}\n\nfunc (x MethodOptions_IdempotencyLevel) Enum() *MethodOptions_IdempotencyLevel {\n\tp := new(MethodOptions_IdempotencyLevel)\n\t*p = x\n\treturn p\n}\n\nfunc (x MethodOptions_IdempotencyLevel) String() string {\n\treturn proto.EnumName(MethodOptions_IdempotencyLevel_name, int32(x))\n}\n\nfunc (x *MethodOptions_IdempotencyLevel) UnmarshalJSON(data []byte) error {\n\tvalue, err := proto.UnmarshalJSONEnum(MethodOptions_IdempotencyLevel_value, data, \"MethodOptions_IdempotencyLevel\")\n\tif err != nil {\n\t\treturn err\n\t}\n\t*x = MethodOptions_IdempotencyLevel(value)\n\treturn nil\n}\n\nfunc (MethodOptions_IdempotencyLevel) EnumDescriptor() ([]byte, []int) {\n\treturn fileDescriptor_e5baabe45344a177, []int{17, 0}\n}\n\n// The protocol compiler can output a FileDescriptorSet containing the .proto\n// files it parses.\ntype FileDescriptorSet struct {\n\tFile                 []*FileDescriptorProto `protobuf:\"bytes,1,rep,name=file\" json:\"file,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}               `json:\"-\"`\n\tXXX_unrecognized     []byte                 `json:\"-\"`\n\tXXX_sizecache        int32                  `json:\"-\"`\n}\n\nfunc (m *FileDescriptorSet) Reset()         { *m = FileDescriptorSet{} }\nfunc (m *FileDescriptorSet) String() string { return proto.CompactTextString(m) }\nfunc (*FileDescriptorSet) ProtoMessage()    {}\nfunc (*FileDescriptorSet) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_e5baabe45344a177, []int{0}\n}\n\nfunc (m *FileDescriptorSet) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_FileDescriptorSet.Unmarshal(m, b)\n}\nfunc (m *FileDescriptorSet) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_FileDescriptorSet.Marshal(b, m, deterministic)\n}\nfunc (m *FileDescriptorSet) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_FileDescriptorSet.Merge(m, src)\n}\nfunc (m *FileDescriptorSet) XXX_Size() int {\n\treturn xxx_messageInfo_FileDescriptorSet.Size(m)\n}\nfunc (m *FileDescriptorSet) XXX_DiscardUnknown() {\n\txxx_messageInfo_FileDescriptorSet.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_FileDescriptorSet proto.InternalMessageInfo\n\nfunc (m *FileDescriptorSet) GetFile() []*FileDescriptorProto {\n\tif m != nil {\n\t\treturn m.File\n\t}\n\treturn nil\n}\n\n// Describes a complete .proto file.\ntype FileDescriptorProto struct {\n\tName    *string `protobuf:\"bytes,1,opt,name=name\" json:\"name,omitempty\"`\n\tPackage *string `protobuf:\"bytes,2,opt,name=package\" json:\"package,omitempty\"`\n\t// Names of files imported by this file.\n\tDependency []string `protobuf:\"bytes,3,rep,name=dependency\" json:\"dependency,omitempty\"`\n\t// Indexes of the public imported files in the dependency list above.\n\tPublicDependency []int32 `protobuf:\"varint,10,rep,name=public_dependency,json=publicDependency\" json:\"public_dependency,omitempty\"`\n\t// Indexes of the weak imported files in the dependency list.\n\t// For Google-internal migration only. Do not use.\n\tWeakDependency []int32 `protobuf:\"varint,11,rep,name=weak_dependency,json=weakDependency\" json:\"weak_dependency,omitempty\"`\n\t// All top-level definitions in this file.\n\tMessageType []*DescriptorProto        `protobuf:\"bytes,4,rep,name=message_type,json=messageType\" json:\"message_type,omitempty\"`\n\tEnumType    []*EnumDescriptorProto    `protobuf:\"bytes,5,rep,name=enum_type,json=enumType\" json:\"enum_type,omitempty\"`\n\tService     []*ServiceDescriptorProto `protobuf:\"bytes,6,rep,name=service\" json:\"service,omitempty\"`\n\tExtension   []*FieldDescriptorProto   `protobuf:\"bytes,7,rep,name=extension\" json:\"extension,omitempty\"`\n\tOptions     *FileOptions              `protobuf:\"bytes,8,opt,name=options\" json:\"options,omitempty\"`\n\t// This field contains optional information about the original source code.\n\t// You may safely remove this entire field without harming runtime\n\t// functionality of the descriptors -- the information is needed only by\n\t// development tools.\n\tSourceCodeInfo *SourceCodeInfo `protobuf:\"bytes,9,opt,name=source_code_info,json=sourceCodeInfo\" json:\"source_code_info,omitempty\"`\n\t// The syntax of the proto file.\n\t// The supported values are \"proto2\" and \"proto3\".\n\tSyntax               *string  `protobuf:\"bytes,12,opt,name=syntax\" json:\"syntax,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *FileDescriptorProto) Reset()         { *m = FileDescriptorProto{} }\nfunc (m *FileDescriptorProto) String() string { return proto.CompactTextString(m) }\nfunc (*FileDescriptorProto) ProtoMessage()    {}\nfunc (*FileDescriptorProto) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_e5baabe45344a177, []int{1}\n}\n\nfunc (m *FileDescriptorProto) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_FileDescriptorProto.Unmarshal(m, b)\n}\nfunc (m *FileDescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_FileDescriptorProto.Marshal(b, m, deterministic)\n}\nfunc (m *FileDescriptorProto) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_FileDescriptorProto.Merge(m, src)\n}\nfunc (m *FileDescriptorProto) XXX_Size() int {\n\treturn xxx_messageInfo_FileDescriptorProto.Size(m)\n}\nfunc (m *FileDescriptorProto) XXX_DiscardUnknown() {\n\txxx_messageInfo_FileDescriptorProto.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_FileDescriptorProto proto.InternalMessageInfo\n\nfunc (m *FileDescriptorProto) GetName() string {\n\tif m != nil && m.Name != nil {\n\t\treturn *m.Name\n\t}\n\treturn \"\"\n}\n\nfunc (m *FileDescriptorProto) GetPackage() string {\n\tif m != nil && m.Package != nil {\n\t\treturn *m.Package\n\t}\n\treturn \"\"\n}\n\nfunc (m *FileDescriptorProto) GetDependency() []string {\n\tif m != nil {\n\t\treturn m.Dependency\n\t}\n\treturn nil\n}\n\nfunc (m *FileDescriptorProto) GetPublicDependency() []int32 {\n\tif m != nil {\n\t\treturn m.PublicDependency\n\t}\n\treturn nil\n}\n\nfunc (m *FileDescriptorProto) GetWeakDependency() []int32 {\n\tif m != nil {\n\t\treturn m.WeakDependency\n\t}\n\treturn nil\n}\n\nfunc (m *FileDescriptorProto) GetMessageType() []*DescriptorProto {\n\tif m != nil {\n\t\treturn m.MessageType\n\t}\n\treturn nil\n}\n\nfunc (m *FileDescriptorProto) GetEnumType() []*EnumDescriptorProto {\n\tif m != nil {\n\t\treturn m.EnumType\n\t}\n\treturn nil\n}\n\nfunc (m *FileDescriptorProto) GetService() []*ServiceDescriptorProto {\n\tif m != nil {\n\t\treturn m.Service\n\t}\n\treturn nil\n}\n\nfunc (m *FileDescriptorProto) GetExtension() []*FieldDescriptorProto {\n\tif m != nil {\n\t\treturn m.Extension\n\t}\n\treturn nil\n}\n\nfunc (m *FileDescriptorProto) GetOptions() *FileOptions {\n\tif m != nil {\n\t\treturn m.Options\n\t}\n\treturn nil\n}\n\nfunc (m *FileDescriptorProto) GetSourceCodeInfo() *SourceCodeInfo {\n\tif m != nil {\n\t\treturn m.SourceCodeInfo\n\t}\n\treturn nil\n}\n\nfunc (m *FileDescriptorProto) GetSyntax() string {\n\tif m != nil && m.Syntax != nil {\n\t\treturn *m.Syntax\n\t}\n\treturn \"\"\n}\n\n// Describes a message type.\ntype DescriptorProto struct {\n\tName           *string                           `protobuf:\"bytes,1,opt,name=name\" json:\"name,omitempty\"`\n\tField          []*FieldDescriptorProto           `protobuf:\"bytes,2,rep,name=field\" json:\"field,omitempty\"`\n\tExtension      []*FieldDescriptorProto           `protobuf:\"bytes,6,rep,name=extension\" json:\"extension,omitempty\"`\n\tNestedType     []*DescriptorProto                `protobuf:\"bytes,3,rep,name=nested_type,json=nestedType\" json:\"nested_type,omitempty\"`\n\tEnumType       []*EnumDescriptorProto            `protobuf:\"bytes,4,rep,name=enum_type,json=enumType\" json:\"enum_type,omitempty\"`\n\tExtensionRange []*DescriptorProto_ExtensionRange `protobuf:\"bytes,5,rep,name=extension_range,json=extensionRange\" json:\"extension_range,omitempty\"`\n\tOneofDecl      []*OneofDescriptorProto           `protobuf:\"bytes,8,rep,name=oneof_decl,json=oneofDecl\" json:\"oneof_decl,omitempty\"`\n\tOptions        *MessageOptions                   `protobuf:\"bytes,7,opt,name=options\" json:\"options,omitempty\"`\n\tReservedRange  []*DescriptorProto_ReservedRange  `protobuf:\"bytes,9,rep,name=reserved_range,json=reservedRange\" json:\"reserved_range,omitempty\"`\n\t// Reserved field names, which may not be used by fields in the same message.\n\t// A given name may only be reserved once.\n\tReservedName         []string `protobuf:\"bytes,10,rep,name=reserved_name,json=reservedName\" json:\"reserved_name,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *DescriptorProto) Reset()         { *m = DescriptorProto{} }\nfunc (m *DescriptorProto) String() string { return proto.CompactTextString(m) }\nfunc (*DescriptorProto) ProtoMessage()    {}\nfunc (*DescriptorProto) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_e5baabe45344a177, []int{2}\n}\n\nfunc (m *DescriptorProto) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_DescriptorProto.Unmarshal(m, b)\n}\nfunc (m *DescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_DescriptorProto.Marshal(b, m, deterministic)\n}\nfunc (m *DescriptorProto) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_DescriptorProto.Merge(m, src)\n}\nfunc (m *DescriptorProto) XXX_Size() int {\n\treturn xxx_messageInfo_DescriptorProto.Size(m)\n}\nfunc (m *DescriptorProto) XXX_DiscardUnknown() {\n\txxx_messageInfo_DescriptorProto.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_DescriptorProto proto.InternalMessageInfo\n\nfunc (m *DescriptorProto) GetName() string {\n\tif m != nil && m.Name != nil {\n\t\treturn *m.Name\n\t}\n\treturn \"\"\n}\n\nfunc (m *DescriptorProto) GetField() []*FieldDescriptorProto {\n\tif m != nil {\n\t\treturn m.Field\n\t}\n\treturn nil\n}\n\nfunc (m *DescriptorProto) GetExtension() []*FieldDescriptorProto {\n\tif m != nil {\n\t\treturn m.Extension\n\t}\n\treturn nil\n}\n\nfunc (m *DescriptorProto) GetNestedType() []*DescriptorProto {\n\tif m != nil {\n\t\treturn m.NestedType\n\t}\n\treturn nil\n}\n\nfunc (m *DescriptorProto) GetEnumType() []*EnumDescriptorProto {\n\tif m != nil {\n\t\treturn m.EnumType\n\t}\n\treturn nil\n}\n\nfunc (m *DescriptorProto) GetExtensionRange() []*DescriptorProto_ExtensionRange {\n\tif m != nil {\n\t\treturn m.ExtensionRange\n\t}\n\treturn nil\n}\n\nfunc (m *DescriptorProto) GetOneofDecl() []*OneofDescriptorProto {\n\tif m != nil {\n\t\treturn m.OneofDecl\n\t}\n\treturn nil\n}\n\nfunc (m *DescriptorProto) GetOptions() *MessageOptions {\n\tif m != nil {\n\t\treturn m.Options\n\t}\n\treturn nil\n}\n\nfunc (m *DescriptorProto) GetReservedRange() []*DescriptorProto_ReservedRange {\n\tif m != nil {\n\t\treturn m.ReservedRange\n\t}\n\treturn nil\n}\n\nfunc (m *DescriptorProto) GetReservedName() []string {\n\tif m != nil {\n\t\treturn m.ReservedName\n\t}\n\treturn nil\n}\n\ntype DescriptorProto_ExtensionRange struct {\n\tStart                *int32                 `protobuf:\"varint,1,opt,name=start\" json:\"start,omitempty\"`\n\tEnd                  *int32                 `protobuf:\"varint,2,opt,name=end\" json:\"end,omitempty\"`\n\tOptions              *ExtensionRangeOptions `protobuf:\"bytes,3,opt,name=options\" json:\"options,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}               `json:\"-\"`\n\tXXX_unrecognized     []byte                 `json:\"-\"`\n\tXXX_sizecache        int32                  `json:\"-\"`\n}\n\nfunc (m *DescriptorProto_ExtensionRange) Reset()         { *m = DescriptorProto_ExtensionRange{} }\nfunc (m *DescriptorProto_ExtensionRange) String() string { return proto.CompactTextString(m) }\nfunc (*DescriptorProto_ExtensionRange) ProtoMessage()    {}\nfunc (*DescriptorProto_ExtensionRange) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_e5baabe45344a177, []int{2, 0}\n}\n\nfunc (m *DescriptorProto_ExtensionRange) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_DescriptorProto_ExtensionRange.Unmarshal(m, b)\n}\nfunc (m *DescriptorProto_ExtensionRange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_DescriptorProto_ExtensionRange.Marshal(b, m, deterministic)\n}\nfunc (m *DescriptorProto_ExtensionRange) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_DescriptorProto_ExtensionRange.Merge(m, src)\n}\nfunc (m *DescriptorProto_ExtensionRange) XXX_Size() int {\n\treturn xxx_messageInfo_DescriptorProto_ExtensionRange.Size(m)\n}\nfunc (m *DescriptorProto_ExtensionRange) XXX_DiscardUnknown() {\n\txxx_messageInfo_DescriptorProto_ExtensionRange.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_DescriptorProto_ExtensionRange proto.InternalMessageInfo\n\nfunc (m *DescriptorProto_ExtensionRange) GetStart() int32 {\n\tif m != nil && m.Start != nil {\n\t\treturn *m.Start\n\t}\n\treturn 0\n}\n\nfunc (m *DescriptorProto_ExtensionRange) GetEnd() int32 {\n\tif m != nil && m.End != nil {\n\t\treturn *m.End\n\t}\n\treturn 0\n}\n\nfunc (m *DescriptorProto_ExtensionRange) GetOptions() *ExtensionRangeOptions {\n\tif m != nil {\n\t\treturn m.Options\n\t}\n\treturn nil\n}\n\n// Range of reserved tag numbers. Reserved tag numbers may not be used by\n// fields or extension ranges in the same message. Reserved ranges may\n// not overlap.\ntype DescriptorProto_ReservedRange struct {\n\tStart                *int32   `protobuf:\"varint,1,opt,name=start\" json:\"start,omitempty\"`\n\tEnd                  *int32   `protobuf:\"varint,2,opt,name=end\" json:\"end,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *DescriptorProto_ReservedRange) Reset()         { *m = DescriptorProto_ReservedRange{} }\nfunc (m *DescriptorProto_ReservedRange) String() string { return proto.CompactTextString(m) }\nfunc (*DescriptorProto_ReservedRange) ProtoMessage()    {}\nfunc (*DescriptorProto_ReservedRange) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_e5baabe45344a177, []int{2, 1}\n}\n\nfunc (m *DescriptorProto_ReservedRange) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_DescriptorProto_ReservedRange.Unmarshal(m, b)\n}\nfunc (m *DescriptorProto_ReservedRange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_DescriptorProto_ReservedRange.Marshal(b, m, deterministic)\n}\nfunc (m *DescriptorProto_ReservedRange) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_DescriptorProto_ReservedRange.Merge(m, src)\n}\nfunc (m *DescriptorProto_ReservedRange) XXX_Size() int {\n\treturn xxx_messageInfo_DescriptorProto_ReservedRange.Size(m)\n}\nfunc (m *DescriptorProto_ReservedRange) XXX_DiscardUnknown() {\n\txxx_messageInfo_DescriptorProto_ReservedRange.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_DescriptorProto_ReservedRange proto.InternalMessageInfo\n\nfunc (m *DescriptorProto_ReservedRange) GetStart() int32 {\n\tif m != nil && m.Start != nil {\n\t\treturn *m.Start\n\t}\n\treturn 0\n}\n\nfunc (m *DescriptorProto_ReservedRange) GetEnd() int32 {\n\tif m != nil && m.End != nil {\n\t\treturn *m.End\n\t}\n\treturn 0\n}\n\ntype ExtensionRangeOptions struct {\n\t// The parser stores options it doesn't recognize here. See above.\n\tUninterpretedOption          []*UninterpretedOption `protobuf:\"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption\" json:\"uninterpreted_option,omitempty\"`\n\tXXX_NoUnkeyedLiteral         struct{}               `json:\"-\"`\n\tproto.XXX_InternalExtensions `json:\"-\"`\n\tXXX_unrecognized             []byte `json:\"-\"`\n\tXXX_sizecache                int32  `json:\"-\"`\n}\n\nfunc (m *ExtensionRangeOptions) Reset()         { *m = ExtensionRangeOptions{} }\nfunc (m *ExtensionRangeOptions) String() string { return proto.CompactTextString(m) }\nfunc (*ExtensionRangeOptions) ProtoMessage()    {}\nfunc (*ExtensionRangeOptions) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_e5baabe45344a177, []int{3}\n}\n\nvar extRange_ExtensionRangeOptions = []proto.ExtensionRange{\n\t{Start: 1000, End: 536870911},\n}\n\nfunc (*ExtensionRangeOptions) ExtensionRangeArray() []proto.ExtensionRange {\n\treturn extRange_ExtensionRangeOptions\n}\n\nfunc (m *ExtensionRangeOptions) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_ExtensionRangeOptions.Unmarshal(m, b)\n}\nfunc (m *ExtensionRangeOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_ExtensionRangeOptions.Marshal(b, m, deterministic)\n}\nfunc (m *ExtensionRangeOptions) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_ExtensionRangeOptions.Merge(m, src)\n}\nfunc (m *ExtensionRangeOptions) XXX_Size() int {\n\treturn xxx_messageInfo_ExtensionRangeOptions.Size(m)\n}\nfunc (m *ExtensionRangeOptions) XXX_DiscardUnknown() {\n\txxx_messageInfo_ExtensionRangeOptions.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_ExtensionRangeOptions proto.InternalMessageInfo\n\nfunc (m *ExtensionRangeOptions) GetUninterpretedOption() []*UninterpretedOption {\n\tif m != nil {\n\t\treturn m.UninterpretedOption\n\t}\n\treturn nil\n}\n\n// Describes a field within a message.\ntype FieldDescriptorProto struct {\n\tName   *string                     `protobuf:\"bytes,1,opt,name=name\" json:\"name,omitempty\"`\n\tNumber *int32                      `protobuf:\"varint,3,opt,name=number\" json:\"number,omitempty\"`\n\tLabel  *FieldDescriptorProto_Label `protobuf:\"varint,4,opt,name=label,enum=google.protobuf.FieldDescriptorProto_Label\" json:\"label,omitempty\"`\n\t// If type_name is set, this need not be set.  If both this and type_name\n\t// are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP.\n\tType *FieldDescriptorProto_Type `protobuf:\"varint,5,opt,name=type,enum=google.protobuf.FieldDescriptorProto_Type\" json:\"type,omitempty\"`\n\t// For message and enum types, this is the name of the type.  If the name\n\t// starts with a '.', it is fully-qualified.  Otherwise, C++-like scoping\n\t// rules are used to find the type (i.e. first the nested types within this\n\t// message are searched, then within the parent, on up to the root\n\t// namespace).\n\tTypeName *string `protobuf:\"bytes,6,opt,name=type_name,json=typeName\" json:\"type_name,omitempty\"`\n\t// For extensions, this is the name of the type being extended.  It is\n\t// resolved in the same manner as type_name.\n\tExtendee *string `protobuf:\"bytes,2,opt,name=extendee\" json:\"extendee,omitempty\"`\n\t// For numeric types, contains the original text representation of the value.\n\t// For booleans, \"true\" or \"false\".\n\t// For strings, contains the default text contents (not escaped in any way).\n\t// For bytes, contains the C escaped value.  All bytes >= 128 are escaped.\n\t// TODO(kenton):  Base-64 encode?\n\tDefaultValue *string `protobuf:\"bytes,7,opt,name=default_value,json=defaultValue\" json:\"default_value,omitempty\"`\n\t// If set, gives the index of a oneof in the containing type's oneof_decl\n\t// list.  This field is a member of that oneof.\n\tOneofIndex *int32 `protobuf:\"varint,9,opt,name=oneof_index,json=oneofIndex\" json:\"oneof_index,omitempty\"`\n\t// JSON name of this field. The value is set by protocol compiler. If the\n\t// user has set a \"json_name\" option on this field, that option's value\n\t// will be used. Otherwise, it's deduced from the field's name by converting\n\t// it to camelCase.\n\tJsonName             *string       `protobuf:\"bytes,10,opt,name=json_name,json=jsonName\" json:\"json_name,omitempty\"`\n\tOptions              *FieldOptions `protobuf:\"bytes,8,opt,name=options\" json:\"options,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}      `json:\"-\"`\n\tXXX_unrecognized     []byte        `json:\"-\"`\n\tXXX_sizecache        int32         `json:\"-\"`\n}\n\nfunc (m *FieldDescriptorProto) Reset()         { *m = FieldDescriptorProto{} }\nfunc (m *FieldDescriptorProto) String() string { return proto.CompactTextString(m) }\nfunc (*FieldDescriptorProto) ProtoMessage()    {}\nfunc (*FieldDescriptorProto) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_e5baabe45344a177, []int{4}\n}\n\nfunc (m *FieldDescriptorProto) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_FieldDescriptorProto.Unmarshal(m, b)\n}\nfunc (m *FieldDescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_FieldDescriptorProto.Marshal(b, m, deterministic)\n}\nfunc (m *FieldDescriptorProto) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_FieldDescriptorProto.Merge(m, src)\n}\nfunc (m *FieldDescriptorProto) XXX_Size() int {\n\treturn xxx_messageInfo_FieldDescriptorProto.Size(m)\n}\nfunc (m *FieldDescriptorProto) XXX_DiscardUnknown() {\n\txxx_messageInfo_FieldDescriptorProto.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_FieldDescriptorProto proto.InternalMessageInfo\n\nfunc (m *FieldDescriptorProto) GetName() string {\n\tif m != nil && m.Name != nil {\n\t\treturn *m.Name\n\t}\n\treturn \"\"\n}\n\nfunc (m *FieldDescriptorProto) GetNumber() int32 {\n\tif m != nil && m.Number != nil {\n\t\treturn *m.Number\n\t}\n\treturn 0\n}\n\nfunc (m *FieldDescriptorProto) GetLabel() FieldDescriptorProto_Label {\n\tif m != nil && m.Label != nil {\n\t\treturn *m.Label\n\t}\n\treturn FieldDescriptorProto_LABEL_OPTIONAL\n}\n\nfunc (m *FieldDescriptorProto) GetType() FieldDescriptorProto_Type {\n\tif m != nil && m.Type != nil {\n\t\treturn *m.Type\n\t}\n\treturn FieldDescriptorProto_TYPE_DOUBLE\n}\n\nfunc (m *FieldDescriptorProto) GetTypeName() string {\n\tif m != nil && m.TypeName != nil {\n\t\treturn *m.TypeName\n\t}\n\treturn \"\"\n}\n\nfunc (m *FieldDescriptorProto) GetExtendee() string {\n\tif m != nil && m.Extendee != nil {\n\t\treturn *m.Extendee\n\t}\n\treturn \"\"\n}\n\nfunc (m *FieldDescriptorProto) GetDefaultValue() string {\n\tif m != nil && m.DefaultValue != nil {\n\t\treturn *m.DefaultValue\n\t}\n\treturn \"\"\n}\n\nfunc (m *FieldDescriptorProto) GetOneofIndex() int32 {\n\tif m != nil && m.OneofIndex != nil {\n\t\treturn *m.OneofIndex\n\t}\n\treturn 0\n}\n\nfunc (m *FieldDescriptorProto) GetJsonName() string {\n\tif m != nil && m.JsonName != nil {\n\t\treturn *m.JsonName\n\t}\n\treturn \"\"\n}\n\nfunc (m *FieldDescriptorProto) GetOptions() *FieldOptions {\n\tif m != nil {\n\t\treturn m.Options\n\t}\n\treturn nil\n}\n\n// Describes a oneof.\ntype OneofDescriptorProto struct {\n\tName                 *string       `protobuf:\"bytes,1,opt,name=name\" json:\"name,omitempty\"`\n\tOptions              *OneofOptions `protobuf:\"bytes,2,opt,name=options\" json:\"options,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}      `json:\"-\"`\n\tXXX_unrecognized     []byte        `json:\"-\"`\n\tXXX_sizecache        int32         `json:\"-\"`\n}\n\nfunc (m *OneofDescriptorProto) Reset()         { *m = OneofDescriptorProto{} }\nfunc (m *OneofDescriptorProto) String() string { return proto.CompactTextString(m) }\nfunc (*OneofDescriptorProto) ProtoMessage()    {}\nfunc (*OneofDescriptorProto) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_e5baabe45344a177, []int{5}\n}\n\nfunc (m *OneofDescriptorProto) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_OneofDescriptorProto.Unmarshal(m, b)\n}\nfunc (m *OneofDescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_OneofDescriptorProto.Marshal(b, m, deterministic)\n}\nfunc (m *OneofDescriptorProto) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_OneofDescriptorProto.Merge(m, src)\n}\nfunc (m *OneofDescriptorProto) XXX_Size() int {\n\treturn xxx_messageInfo_OneofDescriptorProto.Size(m)\n}\nfunc (m *OneofDescriptorProto) XXX_DiscardUnknown() {\n\txxx_messageInfo_OneofDescriptorProto.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_OneofDescriptorProto proto.InternalMessageInfo\n\nfunc (m *OneofDescriptorProto) GetName() string {\n\tif m != nil && m.Name != nil {\n\t\treturn *m.Name\n\t}\n\treturn \"\"\n}\n\nfunc (m *OneofDescriptorProto) GetOptions() *OneofOptions {\n\tif m != nil {\n\t\treturn m.Options\n\t}\n\treturn nil\n}\n\n// Describes an enum type.\ntype EnumDescriptorProto struct {\n\tName    *string                     `protobuf:\"bytes,1,opt,name=name\" json:\"name,omitempty\"`\n\tValue   []*EnumValueDescriptorProto `protobuf:\"bytes,2,rep,name=value\" json:\"value,omitempty\"`\n\tOptions *EnumOptions                `protobuf:\"bytes,3,opt,name=options\" json:\"options,omitempty\"`\n\t// Range of reserved numeric values. Reserved numeric values may not be used\n\t// by enum values in the same enum declaration. Reserved ranges may not\n\t// overlap.\n\tReservedRange []*EnumDescriptorProto_EnumReservedRange `protobuf:\"bytes,4,rep,name=reserved_range,json=reservedRange\" json:\"reserved_range,omitempty\"`\n\t// Reserved enum value names, which may not be reused. A given name may only\n\t// be reserved once.\n\tReservedName         []string `protobuf:\"bytes,5,rep,name=reserved_name,json=reservedName\" json:\"reserved_name,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *EnumDescriptorProto) Reset()         { *m = EnumDescriptorProto{} }\nfunc (m *EnumDescriptorProto) String() string { return proto.CompactTextString(m) }\nfunc (*EnumDescriptorProto) ProtoMessage()    {}\nfunc (*EnumDescriptorProto) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_e5baabe45344a177, []int{6}\n}\n\nfunc (m *EnumDescriptorProto) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_EnumDescriptorProto.Unmarshal(m, b)\n}\nfunc (m *EnumDescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_EnumDescriptorProto.Marshal(b, m, deterministic)\n}\nfunc (m *EnumDescriptorProto) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_EnumDescriptorProto.Merge(m, src)\n}\nfunc (m *EnumDescriptorProto) XXX_Size() int {\n\treturn xxx_messageInfo_EnumDescriptorProto.Size(m)\n}\nfunc (m *EnumDescriptorProto) XXX_DiscardUnknown() {\n\txxx_messageInfo_EnumDescriptorProto.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_EnumDescriptorProto proto.InternalMessageInfo\n\nfunc (m *EnumDescriptorProto) GetName() string {\n\tif m != nil && m.Name != nil {\n\t\treturn *m.Name\n\t}\n\treturn \"\"\n}\n\nfunc (m *EnumDescriptorProto) GetValue() []*EnumValueDescriptorProto {\n\tif m != nil {\n\t\treturn m.Value\n\t}\n\treturn nil\n}\n\nfunc (m *EnumDescriptorProto) GetOptions() *EnumOptions {\n\tif m != nil {\n\t\treturn m.Options\n\t}\n\treturn nil\n}\n\nfunc (m *EnumDescriptorProto) GetReservedRange() []*EnumDescriptorProto_EnumReservedRange {\n\tif m != nil {\n\t\treturn m.ReservedRange\n\t}\n\treturn nil\n}\n\nfunc (m *EnumDescriptorProto) GetReservedName() []string {\n\tif m != nil {\n\t\treturn m.ReservedName\n\t}\n\treturn nil\n}\n\n// Range of reserved numeric values. Reserved values may not be used by\n// entries in the same enum. Reserved ranges may not overlap.\n//\n// Note that this is distinct from DescriptorProto.ReservedRange in that it\n// is inclusive such that it can appropriately represent the entire int32\n// domain.\ntype EnumDescriptorProto_EnumReservedRange struct {\n\tStart                *int32   `protobuf:\"varint,1,opt,name=start\" json:\"start,omitempty\"`\n\tEnd                  *int32   `protobuf:\"varint,2,opt,name=end\" json:\"end,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *EnumDescriptorProto_EnumReservedRange) Reset()         { *m = EnumDescriptorProto_EnumReservedRange{} }\nfunc (m *EnumDescriptorProto_EnumReservedRange) String() string { return proto.CompactTextString(m) }\nfunc (*EnumDescriptorProto_EnumReservedRange) ProtoMessage()    {}\nfunc (*EnumDescriptorProto_EnumReservedRange) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_e5baabe45344a177, []int{6, 0}\n}\n\nfunc (m *EnumDescriptorProto_EnumReservedRange) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_EnumDescriptorProto_EnumReservedRange.Unmarshal(m, b)\n}\nfunc (m *EnumDescriptorProto_EnumReservedRange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_EnumDescriptorProto_EnumReservedRange.Marshal(b, m, deterministic)\n}\nfunc (m *EnumDescriptorProto_EnumReservedRange) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_EnumDescriptorProto_EnumReservedRange.Merge(m, src)\n}\nfunc (m *EnumDescriptorProto_EnumReservedRange) XXX_Size() int {\n\treturn xxx_messageInfo_EnumDescriptorProto_EnumReservedRange.Size(m)\n}\nfunc (m *EnumDescriptorProto_EnumReservedRange) XXX_DiscardUnknown() {\n\txxx_messageInfo_EnumDescriptorProto_EnumReservedRange.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_EnumDescriptorProto_EnumReservedRange proto.InternalMessageInfo\n\nfunc (m *EnumDescriptorProto_EnumReservedRange) GetStart() int32 {\n\tif m != nil && m.Start != nil {\n\t\treturn *m.Start\n\t}\n\treturn 0\n}\n\nfunc (m *EnumDescriptorProto_EnumReservedRange) GetEnd() int32 {\n\tif m != nil && m.End != nil {\n\t\treturn *m.End\n\t}\n\treturn 0\n}\n\n// Describes a value within an enum.\ntype EnumValueDescriptorProto struct {\n\tName                 *string           `protobuf:\"bytes,1,opt,name=name\" json:\"name,omitempty\"`\n\tNumber               *int32            `protobuf:\"varint,2,opt,name=number\" json:\"number,omitempty\"`\n\tOptions              *EnumValueOptions `protobuf:\"bytes,3,opt,name=options\" json:\"options,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}          `json:\"-\"`\n\tXXX_unrecognized     []byte            `json:\"-\"`\n\tXXX_sizecache        int32             `json:\"-\"`\n}\n\nfunc (m *EnumValueDescriptorProto) Reset()         { *m = EnumValueDescriptorProto{} }\nfunc (m *EnumValueDescriptorProto) String() string { return proto.CompactTextString(m) }\nfunc (*EnumValueDescriptorProto) ProtoMessage()    {}\nfunc (*EnumValueDescriptorProto) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_e5baabe45344a177, []int{7}\n}\n\nfunc (m *EnumValueDescriptorProto) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_EnumValueDescriptorProto.Unmarshal(m, b)\n}\nfunc (m *EnumValueDescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_EnumValueDescriptorProto.Marshal(b, m, deterministic)\n}\nfunc (m *EnumValueDescriptorProto) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_EnumValueDescriptorProto.Merge(m, src)\n}\nfunc (m *EnumValueDescriptorProto) XXX_Size() int {\n\treturn xxx_messageInfo_EnumValueDescriptorProto.Size(m)\n}\nfunc (m *EnumValueDescriptorProto) XXX_DiscardUnknown() {\n\txxx_messageInfo_EnumValueDescriptorProto.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_EnumValueDescriptorProto proto.InternalMessageInfo\n\nfunc (m *EnumValueDescriptorProto) GetName() string {\n\tif m != nil && m.Name != nil {\n\t\treturn *m.Name\n\t}\n\treturn \"\"\n}\n\nfunc (m *EnumValueDescriptorProto) GetNumber() int32 {\n\tif m != nil && m.Number != nil {\n\t\treturn *m.Number\n\t}\n\treturn 0\n}\n\nfunc (m *EnumValueDescriptorProto) GetOptions() *EnumValueOptions {\n\tif m != nil {\n\t\treturn m.Options\n\t}\n\treturn nil\n}\n\n// Describes a service.\ntype ServiceDescriptorProto struct {\n\tName                 *string                  `protobuf:\"bytes,1,opt,name=name\" json:\"name,omitempty\"`\n\tMethod               []*MethodDescriptorProto `protobuf:\"bytes,2,rep,name=method\" json:\"method,omitempty\"`\n\tOptions              *ServiceOptions          `protobuf:\"bytes,3,opt,name=options\" json:\"options,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}                 `json:\"-\"`\n\tXXX_unrecognized     []byte                   `json:\"-\"`\n\tXXX_sizecache        int32                    `json:\"-\"`\n}\n\nfunc (m *ServiceDescriptorProto) Reset()         { *m = ServiceDescriptorProto{} }\nfunc (m *ServiceDescriptorProto) String() string { return proto.CompactTextString(m) }\nfunc (*ServiceDescriptorProto) ProtoMessage()    {}\nfunc (*ServiceDescriptorProto) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_e5baabe45344a177, []int{8}\n}\n\nfunc (m *ServiceDescriptorProto) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_ServiceDescriptorProto.Unmarshal(m, b)\n}\nfunc (m *ServiceDescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_ServiceDescriptorProto.Marshal(b, m, deterministic)\n}\nfunc (m *ServiceDescriptorProto) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_ServiceDescriptorProto.Merge(m, src)\n}\nfunc (m *ServiceDescriptorProto) XXX_Size() int {\n\treturn xxx_messageInfo_ServiceDescriptorProto.Size(m)\n}\nfunc (m *ServiceDescriptorProto) XXX_DiscardUnknown() {\n\txxx_messageInfo_ServiceDescriptorProto.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_ServiceDescriptorProto proto.InternalMessageInfo\n\nfunc (m *ServiceDescriptorProto) GetName() string {\n\tif m != nil && m.Name != nil {\n\t\treturn *m.Name\n\t}\n\treturn \"\"\n}\n\nfunc (m *ServiceDescriptorProto) GetMethod() []*MethodDescriptorProto {\n\tif m != nil {\n\t\treturn m.Method\n\t}\n\treturn nil\n}\n\nfunc (m *ServiceDescriptorProto) GetOptions() *ServiceOptions {\n\tif m != nil {\n\t\treturn m.Options\n\t}\n\treturn nil\n}\n\n// Describes a method of a service.\ntype MethodDescriptorProto struct {\n\tName *string `protobuf:\"bytes,1,opt,name=name\" json:\"name,omitempty\"`\n\t// Input and output type names.  These are resolved in the same way as\n\t// FieldDescriptorProto.type_name, but must refer to a message type.\n\tInputType  *string        `protobuf:\"bytes,2,opt,name=input_type,json=inputType\" json:\"input_type,omitempty\"`\n\tOutputType *string        `protobuf:\"bytes,3,opt,name=output_type,json=outputType\" json:\"output_type,omitempty\"`\n\tOptions    *MethodOptions `protobuf:\"bytes,4,opt,name=options\" json:\"options,omitempty\"`\n\t// Identifies if client streams multiple client messages\n\tClientStreaming *bool `protobuf:\"varint,5,opt,name=client_streaming,json=clientStreaming,def=0\" json:\"client_streaming,omitempty\"`\n\t// Identifies if server streams multiple server messages\n\tServerStreaming      *bool    `protobuf:\"varint,6,opt,name=server_streaming,json=serverStreaming,def=0\" json:\"server_streaming,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *MethodDescriptorProto) Reset()         { *m = MethodDescriptorProto{} }\nfunc (m *MethodDescriptorProto) String() string { return proto.CompactTextString(m) }\nfunc (*MethodDescriptorProto) ProtoMessage()    {}\nfunc (*MethodDescriptorProto) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_e5baabe45344a177, []int{9}\n}\n\nfunc (m *MethodDescriptorProto) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_MethodDescriptorProto.Unmarshal(m, b)\n}\nfunc (m *MethodDescriptorProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_MethodDescriptorProto.Marshal(b, m, deterministic)\n}\nfunc (m *MethodDescriptorProto) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MethodDescriptorProto.Merge(m, src)\n}\nfunc (m *MethodDescriptorProto) XXX_Size() int {\n\treturn xxx_messageInfo_MethodDescriptorProto.Size(m)\n}\nfunc (m *MethodDescriptorProto) XXX_DiscardUnknown() {\n\txxx_messageInfo_MethodDescriptorProto.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MethodDescriptorProto proto.InternalMessageInfo\n\nconst Default_MethodDescriptorProto_ClientStreaming bool = false\nconst Default_MethodDescriptorProto_ServerStreaming bool = false\n\nfunc (m *MethodDescriptorProto) GetName() string {\n\tif m != nil && m.Name != nil {\n\t\treturn *m.Name\n\t}\n\treturn \"\"\n}\n\nfunc (m *MethodDescriptorProto) GetInputType() string {\n\tif m != nil && m.InputType != nil {\n\t\treturn *m.InputType\n\t}\n\treturn \"\"\n}\n\nfunc (m *MethodDescriptorProto) GetOutputType() string {\n\tif m != nil && m.OutputType != nil {\n\t\treturn *m.OutputType\n\t}\n\treturn \"\"\n}\n\nfunc (m *MethodDescriptorProto) GetOptions() *MethodOptions {\n\tif m != nil {\n\t\treturn m.Options\n\t}\n\treturn nil\n}\n\nfunc (m *MethodDescriptorProto) GetClientStreaming() bool {\n\tif m != nil && m.ClientStreaming != nil {\n\t\treturn *m.ClientStreaming\n\t}\n\treturn Default_MethodDescriptorProto_ClientStreaming\n}\n\nfunc (m *MethodDescriptorProto) GetServerStreaming() bool {\n\tif m != nil && m.ServerStreaming != nil {\n\t\treturn *m.ServerStreaming\n\t}\n\treturn Default_MethodDescriptorProto_ServerStreaming\n}\n\ntype FileOptions struct {\n\t// Sets the Java package where classes generated from this .proto will be\n\t// placed.  By default, the proto package is used, but this is often\n\t// inappropriate because proto packages do not normally start with backwards\n\t// domain names.\n\tJavaPackage *string `protobuf:\"bytes,1,opt,name=java_package,json=javaPackage\" json:\"java_package,omitempty\"`\n\t// If set, all the classes from the .proto file are wrapped in a single\n\t// outer class with the given name.  This applies to both Proto1\n\t// (equivalent to the old \"--one_java_file\" option) and Proto2 (where\n\t// a .proto always translates to a single class, but you may want to\n\t// explicitly choose the class name).\n\tJavaOuterClassname *string `protobuf:\"bytes,8,opt,name=java_outer_classname,json=javaOuterClassname\" json:\"java_outer_classname,omitempty\"`\n\t// If set true, then the Java code generator will generate a separate .java\n\t// file for each top-level message, enum, and service defined in the .proto\n\t// file.  Thus, these types will *not* be nested inside the outer class\n\t// named by java_outer_classname.  However, the outer class will still be\n\t// generated to contain the file's getDescriptor() method as well as any\n\t// top-level extensions defined in the file.\n\tJavaMultipleFiles *bool `protobuf:\"varint,10,opt,name=java_multiple_files,json=javaMultipleFiles,def=0\" json:\"java_multiple_files,omitempty\"`\n\t// This option does nothing.\n\tJavaGenerateEqualsAndHash *bool `protobuf:\"varint,20,opt,name=java_generate_equals_and_hash,json=javaGenerateEqualsAndHash\" json:\"java_generate_equals_and_hash,omitempty\"` // Deprecated: Do not use.\n\t// If set true, then the Java2 code generator will generate code that\n\t// throws an exception whenever an attempt is made to assign a non-UTF-8\n\t// byte sequence to a string field.\n\t// Message reflection will do the same.\n\t// However, an extension field still accepts non-UTF-8 byte sequences.\n\t// This option has no effect on when used with the lite runtime.\n\tJavaStringCheckUtf8 *bool                     `protobuf:\"varint,27,opt,name=java_string_check_utf8,json=javaStringCheckUtf8,def=0\" json:\"java_string_check_utf8,omitempty\"`\n\tOptimizeFor         *FileOptions_OptimizeMode `protobuf:\"varint,9,opt,name=optimize_for,json=optimizeFor,enum=google.protobuf.FileOptions_OptimizeMode,def=1\" json:\"optimize_for,omitempty\"`\n\t// Sets the Go package where structs generated from this .proto will be\n\t// placed. If omitted, the Go package will be derived from the following:\n\t//   - The basename of the package import path, if provided.\n\t//   - Otherwise, the package statement in the .proto file, if present.\n\t//   - Otherwise, the basename of the .proto file, without extension.\n\tGoPackage *string `protobuf:\"bytes,11,opt,name=go_package,json=goPackage\" json:\"go_package,omitempty\"`\n\t// Should generic services be generated in each language?  \"Generic\" services\n\t// are not specific to any particular RPC system.  They are generated by the\n\t// main code generators in each language (without additional plugins).\n\t// Generic services were the only kind of service generation supported by\n\t// early versions of google.protobuf.\n\t//\n\t// Generic services are now considered deprecated in favor of using plugins\n\t// that generate code specific to your particular RPC system.  Therefore,\n\t// these default to false.  Old code which depends on generic services should\n\t// explicitly set them to true.\n\tCcGenericServices   *bool `protobuf:\"varint,16,opt,name=cc_generic_services,json=ccGenericServices,def=0\" json:\"cc_generic_services,omitempty\"`\n\tJavaGenericServices *bool `protobuf:\"varint,17,opt,name=java_generic_services,json=javaGenericServices,def=0\" json:\"java_generic_services,omitempty\"`\n\tPyGenericServices   *bool `protobuf:\"varint,18,opt,name=py_generic_services,json=pyGenericServices,def=0\" json:\"py_generic_services,omitempty\"`\n\tPhpGenericServices  *bool `protobuf:\"varint,42,opt,name=php_generic_services,json=phpGenericServices,def=0\" json:\"php_generic_services,omitempty\"`\n\t// Is this file deprecated?\n\t// Depending on the target platform, this can emit Deprecated annotations\n\t// for everything in the file, or it will be completely ignored; in the very\n\t// least, this is a formalization for deprecating files.\n\tDeprecated *bool `protobuf:\"varint,23,opt,name=deprecated,def=0\" json:\"deprecated,omitempty\"`\n\t// Enables the use of arenas for the proto messages in this file. This applies\n\t// only to generated classes for C++.\n\tCcEnableArenas *bool `protobuf:\"varint,31,opt,name=cc_enable_arenas,json=ccEnableArenas,def=0\" json:\"cc_enable_arenas,omitempty\"`\n\t// Sets the objective c class prefix which is prepended to all objective c\n\t// generated classes from this .proto. There is no default.\n\tObjcClassPrefix *string `protobuf:\"bytes,36,opt,name=objc_class_prefix,json=objcClassPrefix\" json:\"objc_class_prefix,omitempty\"`\n\t// Namespace for generated classes; defaults to the package.\n\tCsharpNamespace *string `protobuf:\"bytes,37,opt,name=csharp_namespace,json=csharpNamespace\" json:\"csharp_namespace,omitempty\"`\n\t// By default Swift generators will take the proto package and CamelCase it\n\t// replacing '.' with underscore and use that to prefix the types/symbols\n\t// defined. When this options is provided, they will use this value instead\n\t// to prefix the types/symbols defined.\n\tSwiftPrefix *string `protobuf:\"bytes,39,opt,name=swift_prefix,json=swiftPrefix\" json:\"swift_prefix,omitempty\"`\n\t// Sets the php class prefix which is prepended to all php generated classes\n\t// from this .proto. Default is empty.\n\tPhpClassPrefix *string `protobuf:\"bytes,40,opt,name=php_class_prefix,json=phpClassPrefix\" json:\"php_class_prefix,omitempty\"`\n\t// Use this option to change the namespace of php generated classes. Default\n\t// is empty. When this option is empty, the package name will be used for\n\t// determining the namespace.\n\tPhpNamespace *string `protobuf:\"bytes,41,opt,name=php_namespace,json=phpNamespace\" json:\"php_namespace,omitempty\"`\n\t// Use this option to change the namespace of php generated metadata classes.\n\t// Default is empty. When this option is empty, the proto file name will be used\n\t// for determining the namespace.\n\tPhpMetadataNamespace *string `protobuf:\"bytes,44,opt,name=php_metadata_namespace,json=phpMetadataNamespace\" json:\"php_metadata_namespace,omitempty\"`\n\t// Use this option to change the package of ruby generated classes. Default\n\t// is empty. When this option is not set, the package name will be used for\n\t// determining the ruby package.\n\tRubyPackage *string `protobuf:\"bytes,45,opt,name=ruby_package,json=rubyPackage\" json:\"ruby_package,omitempty\"`\n\t// The parser stores options it doesn't recognize here.\n\t// See the documentation for the \"Options\" section above.\n\tUninterpretedOption          []*UninterpretedOption `protobuf:\"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption\" json:\"uninterpreted_option,omitempty\"`\n\tXXX_NoUnkeyedLiteral         struct{}               `json:\"-\"`\n\tproto.XXX_InternalExtensions `json:\"-\"`\n\tXXX_unrecognized             []byte `json:\"-\"`\n\tXXX_sizecache                int32  `json:\"-\"`\n}\n\nfunc (m *FileOptions) Reset()         { *m = FileOptions{} }\nfunc (m *FileOptions) String() string { return proto.CompactTextString(m) }\nfunc (*FileOptions) ProtoMessage()    {}\nfunc (*FileOptions) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_e5baabe45344a177, []int{10}\n}\n\nvar extRange_FileOptions = []proto.ExtensionRange{\n\t{Start: 1000, End: 536870911},\n}\n\nfunc (*FileOptions) ExtensionRangeArray() []proto.ExtensionRange {\n\treturn extRange_FileOptions\n}\n\nfunc (m *FileOptions) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_FileOptions.Unmarshal(m, b)\n}\nfunc (m *FileOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_FileOptions.Marshal(b, m, deterministic)\n}\nfunc (m *FileOptions) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_FileOptions.Merge(m, src)\n}\nfunc (m *FileOptions) XXX_Size() int {\n\treturn xxx_messageInfo_FileOptions.Size(m)\n}\nfunc (m *FileOptions) XXX_DiscardUnknown() {\n\txxx_messageInfo_FileOptions.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_FileOptions proto.InternalMessageInfo\n\nconst Default_FileOptions_JavaMultipleFiles bool = false\nconst Default_FileOptions_JavaStringCheckUtf8 bool = false\nconst Default_FileOptions_OptimizeFor FileOptions_OptimizeMode = FileOptions_SPEED\nconst Default_FileOptions_CcGenericServices bool = false\nconst Default_FileOptions_JavaGenericServices bool = false\nconst Default_FileOptions_PyGenericServices bool = false\nconst Default_FileOptions_PhpGenericServices bool = false\nconst Default_FileOptions_Deprecated bool = false\nconst Default_FileOptions_CcEnableArenas bool = false\n\nfunc (m *FileOptions) GetJavaPackage() string {\n\tif m != nil && m.JavaPackage != nil {\n\t\treturn *m.JavaPackage\n\t}\n\treturn \"\"\n}\n\nfunc (m *FileOptions) GetJavaOuterClassname() string {\n\tif m != nil && m.JavaOuterClassname != nil {\n\t\treturn *m.JavaOuterClassname\n\t}\n\treturn \"\"\n}\n\nfunc (m *FileOptions) GetJavaMultipleFiles() bool {\n\tif m != nil && m.JavaMultipleFiles != nil {\n\t\treturn *m.JavaMultipleFiles\n\t}\n\treturn Default_FileOptions_JavaMultipleFiles\n}\n\n// Deprecated: Do not use.\nfunc (m *FileOptions) GetJavaGenerateEqualsAndHash() bool {\n\tif m != nil && m.JavaGenerateEqualsAndHash != nil {\n\t\treturn *m.JavaGenerateEqualsAndHash\n\t}\n\treturn false\n}\n\nfunc (m *FileOptions) GetJavaStringCheckUtf8() bool {\n\tif m != nil && m.JavaStringCheckUtf8 != nil {\n\t\treturn *m.JavaStringCheckUtf8\n\t}\n\treturn Default_FileOptions_JavaStringCheckUtf8\n}\n\nfunc (m *FileOptions) GetOptimizeFor() FileOptions_OptimizeMode {\n\tif m != nil && m.OptimizeFor != nil {\n\t\treturn *m.OptimizeFor\n\t}\n\treturn Default_FileOptions_OptimizeFor\n}\n\nfunc (m *FileOptions) GetGoPackage() string {\n\tif m != nil && m.GoPackage != nil {\n\t\treturn *m.GoPackage\n\t}\n\treturn \"\"\n}\n\nfunc (m *FileOptions) GetCcGenericServices() bool {\n\tif m != nil && m.CcGenericServices != nil {\n\t\treturn *m.CcGenericServices\n\t}\n\treturn Default_FileOptions_CcGenericServices\n}\n\nfunc (m *FileOptions) GetJavaGenericServices() bool {\n\tif m != nil && m.JavaGenericServices != nil {\n\t\treturn *m.JavaGenericServices\n\t}\n\treturn Default_FileOptions_JavaGenericServices\n}\n\nfunc (m *FileOptions) GetPyGenericServices() bool {\n\tif m != nil && m.PyGenericServices != nil {\n\t\treturn *m.PyGenericServices\n\t}\n\treturn Default_FileOptions_PyGenericServices\n}\n\nfunc (m *FileOptions) GetPhpGenericServices() bool {\n\tif m != nil && m.PhpGenericServices != nil {\n\t\treturn *m.PhpGenericServices\n\t}\n\treturn Default_FileOptions_PhpGenericServices\n}\n\nfunc (m *FileOptions) GetDeprecated() bool {\n\tif m != nil && m.Deprecated != nil {\n\t\treturn *m.Deprecated\n\t}\n\treturn Default_FileOptions_Deprecated\n}\n\nfunc (m *FileOptions) GetCcEnableArenas() bool {\n\tif m != nil && m.CcEnableArenas != nil {\n\t\treturn *m.CcEnableArenas\n\t}\n\treturn Default_FileOptions_CcEnableArenas\n}\n\nfunc (m *FileOptions) GetObjcClassPrefix() string {\n\tif m != nil && m.ObjcClassPrefix != nil {\n\t\treturn *m.ObjcClassPrefix\n\t}\n\treturn \"\"\n}\n\nfunc (m *FileOptions) GetCsharpNamespace() string {\n\tif m != nil && m.CsharpNamespace != nil {\n\t\treturn *m.CsharpNamespace\n\t}\n\treturn \"\"\n}\n\nfunc (m *FileOptions) GetSwiftPrefix() string {\n\tif m != nil && m.SwiftPrefix != nil {\n\t\treturn *m.SwiftPrefix\n\t}\n\treturn \"\"\n}\n\nfunc (m *FileOptions) GetPhpClassPrefix() string {\n\tif m != nil && m.PhpClassPrefix != nil {\n\t\treturn *m.PhpClassPrefix\n\t}\n\treturn \"\"\n}\n\nfunc (m *FileOptions) GetPhpNamespace() string {\n\tif m != nil && m.PhpNamespace != nil {\n\t\treturn *m.PhpNamespace\n\t}\n\treturn \"\"\n}\n\nfunc (m *FileOptions) GetPhpMetadataNamespace() string {\n\tif m != nil && m.PhpMetadataNamespace != nil {\n\t\treturn *m.PhpMetadataNamespace\n\t}\n\treturn \"\"\n}\n\nfunc (m *FileOptions) GetRubyPackage() string {\n\tif m != nil && m.RubyPackage != nil {\n\t\treturn *m.RubyPackage\n\t}\n\treturn \"\"\n}\n\nfunc (m *FileOptions) GetUninterpretedOption() []*UninterpretedOption {\n\tif m != nil {\n\t\treturn m.UninterpretedOption\n\t}\n\treturn nil\n}\n\ntype MessageOptions struct {\n\t// Set true to use the old proto1 MessageSet wire format for extensions.\n\t// This is provided for backwards-compatibility with the MessageSet wire\n\t// format.  You should not use this for any other reason:  It's less\n\t// efficient, has fewer features, and is more complicated.\n\t//\n\t// The message must be defined exactly as follows:\n\t//   message Foo {\n\t//     option message_set_wire_format = true;\n\t//     extensions 4 to max;\n\t//   }\n\t// Note that the message cannot have any defined fields; MessageSets only\n\t// have extensions.\n\t//\n\t// All extensions of your type must be singular messages; e.g. they cannot\n\t// be int32s, enums, or repeated messages.\n\t//\n\t// Because this is an option, the above two restrictions are not enforced by\n\t// the protocol compiler.\n\tMessageSetWireFormat *bool `protobuf:\"varint,1,opt,name=message_set_wire_format,json=messageSetWireFormat,def=0\" json:\"message_set_wire_format,omitempty\"`\n\t// Disables the generation of the standard \"descriptor()\" accessor, which can\n\t// conflict with a field of the same name.  This is meant to make migration\n\t// from proto1 easier; new code should avoid fields named \"descriptor\".\n\tNoStandardDescriptorAccessor *bool `protobuf:\"varint,2,opt,name=no_standard_descriptor_accessor,json=noStandardDescriptorAccessor,def=0\" json:\"no_standard_descriptor_accessor,omitempty\"`\n\t// Is this message deprecated?\n\t// Depending on the target platform, this can emit Deprecated annotations\n\t// for the message, or it will be completely ignored; in the very least,\n\t// this is a formalization for deprecating messages.\n\tDeprecated *bool `protobuf:\"varint,3,opt,name=deprecated,def=0\" json:\"deprecated,omitempty\"`\n\t// Whether the message is an automatically generated map entry type for the\n\t// maps field.\n\t//\n\t// For maps fields:\n\t//     map<KeyType, ValueType> map_field = 1;\n\t// The parsed descriptor looks like:\n\t//     message MapFieldEntry {\n\t//         option map_entry = true;\n\t//         optional KeyType key = 1;\n\t//         optional ValueType value = 2;\n\t//     }\n\t//     repeated MapFieldEntry map_field = 1;\n\t//\n\t// Implementations may choose not to generate the map_entry=true message, but\n\t// use a native map in the target language to hold the keys and values.\n\t// The reflection APIs in such implementions still need to work as\n\t// if the field is a repeated message field.\n\t//\n\t// NOTE: Do not set the option in .proto files. Always use the maps syntax\n\t// instead. The option should only be implicitly set by the proto compiler\n\t// parser.\n\tMapEntry *bool `protobuf:\"varint,7,opt,name=map_entry,json=mapEntry\" json:\"map_entry,omitempty\"`\n\t// The parser stores options it doesn't recognize here. See above.\n\tUninterpretedOption          []*UninterpretedOption `protobuf:\"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption\" json:\"uninterpreted_option,omitempty\"`\n\tXXX_NoUnkeyedLiteral         struct{}               `json:\"-\"`\n\tproto.XXX_InternalExtensions `json:\"-\"`\n\tXXX_unrecognized             []byte `json:\"-\"`\n\tXXX_sizecache                int32  `json:\"-\"`\n}\n\nfunc (m *MessageOptions) Reset()         { *m = MessageOptions{} }\nfunc (m *MessageOptions) String() string { return proto.CompactTextString(m) }\nfunc (*MessageOptions) ProtoMessage()    {}\nfunc (*MessageOptions) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_e5baabe45344a177, []int{11}\n}\n\nvar extRange_MessageOptions = []proto.ExtensionRange{\n\t{Start: 1000, End: 536870911},\n}\n\nfunc (*MessageOptions) ExtensionRangeArray() []proto.ExtensionRange {\n\treturn extRange_MessageOptions\n}\n\nfunc (m *MessageOptions) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_MessageOptions.Unmarshal(m, b)\n}\nfunc (m *MessageOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_MessageOptions.Marshal(b, m, deterministic)\n}\nfunc (m *MessageOptions) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MessageOptions.Merge(m, src)\n}\nfunc (m *MessageOptions) XXX_Size() int {\n\treturn xxx_messageInfo_MessageOptions.Size(m)\n}\nfunc (m *MessageOptions) XXX_DiscardUnknown() {\n\txxx_messageInfo_MessageOptions.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MessageOptions proto.InternalMessageInfo\n\nconst Default_MessageOptions_MessageSetWireFormat bool = false\nconst Default_MessageOptions_NoStandardDescriptorAccessor bool = false\nconst Default_MessageOptions_Deprecated bool = false\n\nfunc (m *MessageOptions) GetMessageSetWireFormat() bool {\n\tif m != nil && m.MessageSetWireFormat != nil {\n\t\treturn *m.MessageSetWireFormat\n\t}\n\treturn Default_MessageOptions_MessageSetWireFormat\n}\n\nfunc (m *MessageOptions) GetNoStandardDescriptorAccessor() bool {\n\tif m != nil && m.NoStandardDescriptorAccessor != nil {\n\t\treturn *m.NoStandardDescriptorAccessor\n\t}\n\treturn Default_MessageOptions_NoStandardDescriptorAccessor\n}\n\nfunc (m *MessageOptions) GetDeprecated() bool {\n\tif m != nil && m.Deprecated != nil {\n\t\treturn *m.Deprecated\n\t}\n\treturn Default_MessageOptions_Deprecated\n}\n\nfunc (m *MessageOptions) GetMapEntry() bool {\n\tif m != nil && m.MapEntry != nil {\n\t\treturn *m.MapEntry\n\t}\n\treturn false\n}\n\nfunc (m *MessageOptions) GetUninterpretedOption() []*UninterpretedOption {\n\tif m != nil {\n\t\treturn m.UninterpretedOption\n\t}\n\treturn nil\n}\n\ntype FieldOptions struct {\n\t// The ctype option instructs the C++ code generator to use a different\n\t// representation of the field than it normally would.  See the specific\n\t// options below.  This option is not yet implemented in the open source\n\t// release -- sorry, we'll try to include it in a future version!\n\tCtype *FieldOptions_CType `protobuf:\"varint,1,opt,name=ctype,enum=google.protobuf.FieldOptions_CType,def=0\" json:\"ctype,omitempty\"`\n\t// The packed option can be enabled for repeated primitive fields to enable\n\t// a more efficient representation on the wire. Rather than repeatedly\n\t// writing the tag and type for each element, the entire array is encoded as\n\t// a single length-delimited blob. In proto3, only explicit setting it to\n\t// false will avoid using packed encoding.\n\tPacked *bool `protobuf:\"varint,2,opt,name=packed\" json:\"packed,omitempty\"`\n\t// The jstype option determines the JavaScript type used for values of the\n\t// field.  The option is permitted only for 64 bit integral and fixed types\n\t// (int64, uint64, sint64, fixed64, sfixed64).  A field with jstype JS_STRING\n\t// is represented as JavaScript string, which avoids loss of precision that\n\t// can happen when a large value is converted to a floating point JavaScript.\n\t// Specifying JS_NUMBER for the jstype causes the generated JavaScript code to\n\t// use the JavaScript \"number\" type.  The behavior of the default option\n\t// JS_NORMAL is implementation dependent.\n\t//\n\t// This option is an enum to permit additional types to be added, e.g.\n\t// goog.math.Integer.\n\tJstype *FieldOptions_JSType `protobuf:\"varint,6,opt,name=jstype,enum=google.protobuf.FieldOptions_JSType,def=0\" json:\"jstype,omitempty\"`\n\t// Should this field be parsed lazily?  Lazy applies only to message-type\n\t// fields.  It means that when the outer message is initially parsed, the\n\t// inner message's contents will not be parsed but instead stored in encoded\n\t// form.  The inner message will actually be parsed when it is first accessed.\n\t//\n\t// This is only a hint.  Implementations are free to choose whether to use\n\t// eager or lazy parsing regardless of the value of this option.  However,\n\t// setting this option true suggests that the protocol author believes that\n\t// using lazy parsing on this field is worth the additional bookkeeping\n\t// overhead typically needed to implement it.\n\t//\n\t// This option does not affect the public interface of any generated code;\n\t// all method signatures remain the same.  Furthermore, thread-safety of the\n\t// interface is not affected by this option; const methods remain safe to\n\t// call from multiple threads concurrently, while non-const methods continue\n\t// to require exclusive access.\n\t//\n\t//\n\t// Note that implementations may choose not to check required fields within\n\t// a lazy sub-message.  That is, calling IsInitialized() on the outer message\n\t// may return true even if the inner message has missing required fields.\n\t// This is necessary because otherwise the inner message would have to be\n\t// parsed in order to perform the check, defeating the purpose of lazy\n\t// parsing.  An implementation which chooses not to check required fields\n\t// must be consistent about it.  That is, for any particular sub-message, the\n\t// implementation must either *always* check its required fields, or *never*\n\t// check its required fields, regardless of whether or not the message has\n\t// been parsed.\n\tLazy *bool `protobuf:\"varint,5,opt,name=lazy,def=0\" json:\"lazy,omitempty\"`\n\t// Is this field deprecated?\n\t// Depending on the target platform, this can emit Deprecated annotations\n\t// for accessors, or it will be completely ignored; in the very least, this\n\t// is a formalization for deprecating fields.\n\tDeprecated *bool `protobuf:\"varint,3,opt,name=deprecated,def=0\" json:\"deprecated,omitempty\"`\n\t// For Google-internal migration only. Do not use.\n\tWeak *bool `protobuf:\"varint,10,opt,name=weak,def=0\" json:\"weak,omitempty\"`\n\t// The parser stores options it doesn't recognize here. See above.\n\tUninterpretedOption          []*UninterpretedOption `protobuf:\"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption\" json:\"uninterpreted_option,omitempty\"`\n\tXXX_NoUnkeyedLiteral         struct{}               `json:\"-\"`\n\tproto.XXX_InternalExtensions `json:\"-\"`\n\tXXX_unrecognized             []byte `json:\"-\"`\n\tXXX_sizecache                int32  `json:\"-\"`\n}\n\nfunc (m *FieldOptions) Reset()         { *m = FieldOptions{} }\nfunc (m *FieldOptions) String() string { return proto.CompactTextString(m) }\nfunc (*FieldOptions) ProtoMessage()    {}\nfunc (*FieldOptions) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_e5baabe45344a177, []int{12}\n}\n\nvar extRange_FieldOptions = []proto.ExtensionRange{\n\t{Start: 1000, End: 536870911},\n}\n\nfunc (*FieldOptions) ExtensionRangeArray() []proto.ExtensionRange {\n\treturn extRange_FieldOptions\n}\n\nfunc (m *FieldOptions) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_FieldOptions.Unmarshal(m, b)\n}\nfunc (m *FieldOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_FieldOptions.Marshal(b, m, deterministic)\n}\nfunc (m *FieldOptions) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_FieldOptions.Merge(m, src)\n}\nfunc (m *FieldOptions) XXX_Size() int {\n\treturn xxx_messageInfo_FieldOptions.Size(m)\n}\nfunc (m *FieldOptions) XXX_DiscardUnknown() {\n\txxx_messageInfo_FieldOptions.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_FieldOptions proto.InternalMessageInfo\n\nconst Default_FieldOptions_Ctype FieldOptions_CType = FieldOptions_STRING\nconst Default_FieldOptions_Jstype FieldOptions_JSType = FieldOptions_JS_NORMAL\nconst Default_FieldOptions_Lazy bool = false\nconst Default_FieldOptions_Deprecated bool = false\nconst Default_FieldOptions_Weak bool = false\n\nfunc (m *FieldOptions) GetCtype() FieldOptions_CType {\n\tif m != nil && m.Ctype != nil {\n\t\treturn *m.Ctype\n\t}\n\treturn Default_FieldOptions_Ctype\n}\n\nfunc (m *FieldOptions) GetPacked() bool {\n\tif m != nil && m.Packed != nil {\n\t\treturn *m.Packed\n\t}\n\treturn false\n}\n\nfunc (m *FieldOptions) GetJstype() FieldOptions_JSType {\n\tif m != nil && m.Jstype != nil {\n\t\treturn *m.Jstype\n\t}\n\treturn Default_FieldOptions_Jstype\n}\n\nfunc (m *FieldOptions) GetLazy() bool {\n\tif m != nil && m.Lazy != nil {\n\t\treturn *m.Lazy\n\t}\n\treturn Default_FieldOptions_Lazy\n}\n\nfunc (m *FieldOptions) GetDeprecated() bool {\n\tif m != nil && m.Deprecated != nil {\n\t\treturn *m.Deprecated\n\t}\n\treturn Default_FieldOptions_Deprecated\n}\n\nfunc (m *FieldOptions) GetWeak() bool {\n\tif m != nil && m.Weak != nil {\n\t\treturn *m.Weak\n\t}\n\treturn Default_FieldOptions_Weak\n}\n\nfunc (m *FieldOptions) GetUninterpretedOption() []*UninterpretedOption {\n\tif m != nil {\n\t\treturn m.UninterpretedOption\n\t}\n\treturn nil\n}\n\ntype OneofOptions struct {\n\t// The parser stores options it doesn't recognize here. See above.\n\tUninterpretedOption          []*UninterpretedOption `protobuf:\"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption\" json:\"uninterpreted_option,omitempty\"`\n\tXXX_NoUnkeyedLiteral         struct{}               `json:\"-\"`\n\tproto.XXX_InternalExtensions `json:\"-\"`\n\tXXX_unrecognized             []byte `json:\"-\"`\n\tXXX_sizecache                int32  `json:\"-\"`\n}\n\nfunc (m *OneofOptions) Reset()         { *m = OneofOptions{} }\nfunc (m *OneofOptions) String() string { return proto.CompactTextString(m) }\nfunc (*OneofOptions) ProtoMessage()    {}\nfunc (*OneofOptions) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_e5baabe45344a177, []int{13}\n}\n\nvar extRange_OneofOptions = []proto.ExtensionRange{\n\t{Start: 1000, End: 536870911},\n}\n\nfunc (*OneofOptions) ExtensionRangeArray() []proto.ExtensionRange {\n\treturn extRange_OneofOptions\n}\n\nfunc (m *OneofOptions) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_OneofOptions.Unmarshal(m, b)\n}\nfunc (m *OneofOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_OneofOptions.Marshal(b, m, deterministic)\n}\nfunc (m *OneofOptions) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_OneofOptions.Merge(m, src)\n}\nfunc (m *OneofOptions) XXX_Size() int {\n\treturn xxx_messageInfo_OneofOptions.Size(m)\n}\nfunc (m *OneofOptions) XXX_DiscardUnknown() {\n\txxx_messageInfo_OneofOptions.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_OneofOptions proto.InternalMessageInfo\n\nfunc (m *OneofOptions) GetUninterpretedOption() []*UninterpretedOption {\n\tif m != nil {\n\t\treturn m.UninterpretedOption\n\t}\n\treturn nil\n}\n\ntype EnumOptions struct {\n\t// Set this option to true to allow mapping different tag names to the same\n\t// value.\n\tAllowAlias *bool `protobuf:\"varint,2,opt,name=allow_alias,json=allowAlias\" json:\"allow_alias,omitempty\"`\n\t// Is this enum deprecated?\n\t// Depending on the target platform, this can emit Deprecated annotations\n\t// for the enum, or it will be completely ignored; in the very least, this\n\t// is a formalization for deprecating enums.\n\tDeprecated *bool `protobuf:\"varint,3,opt,name=deprecated,def=0\" json:\"deprecated,omitempty\"`\n\t// The parser stores options it doesn't recognize here. See above.\n\tUninterpretedOption          []*UninterpretedOption `protobuf:\"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption\" json:\"uninterpreted_option,omitempty\"`\n\tXXX_NoUnkeyedLiteral         struct{}               `json:\"-\"`\n\tproto.XXX_InternalExtensions `json:\"-\"`\n\tXXX_unrecognized             []byte `json:\"-\"`\n\tXXX_sizecache                int32  `json:\"-\"`\n}\n\nfunc (m *EnumOptions) Reset()         { *m = EnumOptions{} }\nfunc (m *EnumOptions) String() string { return proto.CompactTextString(m) }\nfunc (*EnumOptions) ProtoMessage()    {}\nfunc (*EnumOptions) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_e5baabe45344a177, []int{14}\n}\n\nvar extRange_EnumOptions = []proto.ExtensionRange{\n\t{Start: 1000, End: 536870911},\n}\n\nfunc (*EnumOptions) ExtensionRangeArray() []proto.ExtensionRange {\n\treturn extRange_EnumOptions\n}\n\nfunc (m *EnumOptions) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_EnumOptions.Unmarshal(m, b)\n}\nfunc (m *EnumOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_EnumOptions.Marshal(b, m, deterministic)\n}\nfunc (m *EnumOptions) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_EnumOptions.Merge(m, src)\n}\nfunc (m *EnumOptions) XXX_Size() int {\n\treturn xxx_messageInfo_EnumOptions.Size(m)\n}\nfunc (m *EnumOptions) XXX_DiscardUnknown() {\n\txxx_messageInfo_EnumOptions.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_EnumOptions proto.InternalMessageInfo\n\nconst Default_EnumOptions_Deprecated bool = false\n\nfunc (m *EnumOptions) GetAllowAlias() bool {\n\tif m != nil && m.AllowAlias != nil {\n\t\treturn *m.AllowAlias\n\t}\n\treturn false\n}\n\nfunc (m *EnumOptions) GetDeprecated() bool {\n\tif m != nil && m.Deprecated != nil {\n\t\treturn *m.Deprecated\n\t}\n\treturn Default_EnumOptions_Deprecated\n}\n\nfunc (m *EnumOptions) GetUninterpretedOption() []*UninterpretedOption {\n\tif m != nil {\n\t\treturn m.UninterpretedOption\n\t}\n\treturn nil\n}\n\ntype EnumValueOptions struct {\n\t// Is this enum value deprecated?\n\t// Depending on the target platform, this can emit Deprecated annotations\n\t// for the enum value, or it will be completely ignored; in the very least,\n\t// this is a formalization for deprecating enum values.\n\tDeprecated *bool `protobuf:\"varint,1,opt,name=deprecated,def=0\" json:\"deprecated,omitempty\"`\n\t// The parser stores options it doesn't recognize here. See above.\n\tUninterpretedOption          []*UninterpretedOption `protobuf:\"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption\" json:\"uninterpreted_option,omitempty\"`\n\tXXX_NoUnkeyedLiteral         struct{}               `json:\"-\"`\n\tproto.XXX_InternalExtensions `json:\"-\"`\n\tXXX_unrecognized             []byte `json:\"-\"`\n\tXXX_sizecache                int32  `json:\"-\"`\n}\n\nfunc (m *EnumValueOptions) Reset()         { *m = EnumValueOptions{} }\nfunc (m *EnumValueOptions) String() string { return proto.CompactTextString(m) }\nfunc (*EnumValueOptions) ProtoMessage()    {}\nfunc (*EnumValueOptions) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_e5baabe45344a177, []int{15}\n}\n\nvar extRange_EnumValueOptions = []proto.ExtensionRange{\n\t{Start: 1000, End: 536870911},\n}\n\nfunc (*EnumValueOptions) ExtensionRangeArray() []proto.ExtensionRange {\n\treturn extRange_EnumValueOptions\n}\n\nfunc (m *EnumValueOptions) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_EnumValueOptions.Unmarshal(m, b)\n}\nfunc (m *EnumValueOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_EnumValueOptions.Marshal(b, m, deterministic)\n}\nfunc (m *EnumValueOptions) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_EnumValueOptions.Merge(m, src)\n}\nfunc (m *EnumValueOptions) XXX_Size() int {\n\treturn xxx_messageInfo_EnumValueOptions.Size(m)\n}\nfunc (m *EnumValueOptions) XXX_DiscardUnknown() {\n\txxx_messageInfo_EnumValueOptions.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_EnumValueOptions proto.InternalMessageInfo\n\nconst Default_EnumValueOptions_Deprecated bool = false\n\nfunc (m *EnumValueOptions) GetDeprecated() bool {\n\tif m != nil && m.Deprecated != nil {\n\t\treturn *m.Deprecated\n\t}\n\treturn Default_EnumValueOptions_Deprecated\n}\n\nfunc (m *EnumValueOptions) GetUninterpretedOption() []*UninterpretedOption {\n\tif m != nil {\n\t\treturn m.UninterpretedOption\n\t}\n\treturn nil\n}\n\ntype ServiceOptions struct {\n\t// Is this service deprecated?\n\t// Depending on the target platform, this can emit Deprecated annotations\n\t// for the service, or it will be completely ignored; in the very least,\n\t// this is a formalization for deprecating services.\n\tDeprecated *bool `protobuf:\"varint,33,opt,name=deprecated,def=0\" json:\"deprecated,omitempty\"`\n\t// The parser stores options it doesn't recognize here. See above.\n\tUninterpretedOption          []*UninterpretedOption `protobuf:\"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption\" json:\"uninterpreted_option,omitempty\"`\n\tXXX_NoUnkeyedLiteral         struct{}               `json:\"-\"`\n\tproto.XXX_InternalExtensions `json:\"-\"`\n\tXXX_unrecognized             []byte `json:\"-\"`\n\tXXX_sizecache                int32  `json:\"-\"`\n}\n\nfunc (m *ServiceOptions) Reset()         { *m = ServiceOptions{} }\nfunc (m *ServiceOptions) String() string { return proto.CompactTextString(m) }\nfunc (*ServiceOptions) ProtoMessage()    {}\nfunc (*ServiceOptions) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_e5baabe45344a177, []int{16}\n}\n\nvar extRange_ServiceOptions = []proto.ExtensionRange{\n\t{Start: 1000, End: 536870911},\n}\n\nfunc (*ServiceOptions) ExtensionRangeArray() []proto.ExtensionRange {\n\treturn extRange_ServiceOptions\n}\n\nfunc (m *ServiceOptions) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_ServiceOptions.Unmarshal(m, b)\n}\nfunc (m *ServiceOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_ServiceOptions.Marshal(b, m, deterministic)\n}\nfunc (m *ServiceOptions) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_ServiceOptions.Merge(m, src)\n}\nfunc (m *ServiceOptions) XXX_Size() int {\n\treturn xxx_messageInfo_ServiceOptions.Size(m)\n}\nfunc (m *ServiceOptions) XXX_DiscardUnknown() {\n\txxx_messageInfo_ServiceOptions.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_ServiceOptions proto.InternalMessageInfo\n\nconst Default_ServiceOptions_Deprecated bool = false\n\nfunc (m *ServiceOptions) GetDeprecated() bool {\n\tif m != nil && m.Deprecated != nil {\n\t\treturn *m.Deprecated\n\t}\n\treturn Default_ServiceOptions_Deprecated\n}\n\nfunc (m *ServiceOptions) GetUninterpretedOption() []*UninterpretedOption {\n\tif m != nil {\n\t\treturn m.UninterpretedOption\n\t}\n\treturn nil\n}\n\ntype MethodOptions struct {\n\t// Is this method deprecated?\n\t// Depending on the target platform, this can emit Deprecated annotations\n\t// for the method, or it will be completely ignored; in the very least,\n\t// this is a formalization for deprecating methods.\n\tDeprecated       *bool                           `protobuf:\"varint,33,opt,name=deprecated,def=0\" json:\"deprecated,omitempty\"`\n\tIdempotencyLevel *MethodOptions_IdempotencyLevel `protobuf:\"varint,34,opt,name=idempotency_level,json=idempotencyLevel,enum=google.protobuf.MethodOptions_IdempotencyLevel,def=0\" json:\"idempotency_level,omitempty\"`\n\t// The parser stores options it doesn't recognize here. See above.\n\tUninterpretedOption          []*UninterpretedOption `protobuf:\"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption\" json:\"uninterpreted_option,omitempty\"`\n\tXXX_NoUnkeyedLiteral         struct{}               `json:\"-\"`\n\tproto.XXX_InternalExtensions `json:\"-\"`\n\tXXX_unrecognized             []byte `json:\"-\"`\n\tXXX_sizecache                int32  `json:\"-\"`\n}\n\nfunc (m *MethodOptions) Reset()         { *m = MethodOptions{} }\nfunc (m *MethodOptions) String() string { return proto.CompactTextString(m) }\nfunc (*MethodOptions) ProtoMessage()    {}\nfunc (*MethodOptions) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_e5baabe45344a177, []int{17}\n}\n\nvar extRange_MethodOptions = []proto.ExtensionRange{\n\t{Start: 1000, End: 536870911},\n}\n\nfunc (*MethodOptions) ExtensionRangeArray() []proto.ExtensionRange {\n\treturn extRange_MethodOptions\n}\n\nfunc (m *MethodOptions) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_MethodOptions.Unmarshal(m, b)\n}\nfunc (m *MethodOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_MethodOptions.Marshal(b, m, deterministic)\n}\nfunc (m *MethodOptions) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MethodOptions.Merge(m, src)\n}\nfunc (m *MethodOptions) XXX_Size() int {\n\treturn xxx_messageInfo_MethodOptions.Size(m)\n}\nfunc (m *MethodOptions) XXX_DiscardUnknown() {\n\txxx_messageInfo_MethodOptions.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MethodOptions proto.InternalMessageInfo\n\nconst Default_MethodOptions_Deprecated bool = false\nconst Default_MethodOptions_IdempotencyLevel MethodOptions_IdempotencyLevel = MethodOptions_IDEMPOTENCY_UNKNOWN\n\nfunc (m *MethodOptions) GetDeprecated() bool {\n\tif m != nil && m.Deprecated != nil {\n\t\treturn *m.Deprecated\n\t}\n\treturn Default_MethodOptions_Deprecated\n}\n\nfunc (m *MethodOptions) GetIdempotencyLevel() MethodOptions_IdempotencyLevel {\n\tif m != nil && m.IdempotencyLevel != nil {\n\t\treturn *m.IdempotencyLevel\n\t}\n\treturn Default_MethodOptions_IdempotencyLevel\n}\n\nfunc (m *MethodOptions) GetUninterpretedOption() []*UninterpretedOption {\n\tif m != nil {\n\t\treturn m.UninterpretedOption\n\t}\n\treturn nil\n}\n\n// A message representing a option the parser does not recognize. This only\n// appears in options protos created by the compiler::Parser class.\n// DescriptorPool resolves these when building Descriptor objects. Therefore,\n// options protos in descriptor objects (e.g. returned by Descriptor::options(),\n// or produced by Descriptor::CopyTo()) will never have UninterpretedOptions\n// in them.\ntype UninterpretedOption struct {\n\tName []*UninterpretedOption_NamePart `protobuf:\"bytes,2,rep,name=name\" json:\"name,omitempty\"`\n\t// The value of the uninterpreted option, in whatever type the tokenizer\n\t// identified it as during parsing. Exactly one of these should be set.\n\tIdentifierValue      *string  `protobuf:\"bytes,3,opt,name=identifier_value,json=identifierValue\" json:\"identifier_value,omitempty\"`\n\tPositiveIntValue     *uint64  `protobuf:\"varint,4,opt,name=positive_int_value,json=positiveIntValue\" json:\"positive_int_value,omitempty\"`\n\tNegativeIntValue     *int64   `protobuf:\"varint,5,opt,name=negative_int_value,json=negativeIntValue\" json:\"negative_int_value,omitempty\"`\n\tDoubleValue          *float64 `protobuf:\"fixed64,6,opt,name=double_value,json=doubleValue\" json:\"double_value,omitempty\"`\n\tStringValue          []byte   `protobuf:\"bytes,7,opt,name=string_value,json=stringValue\" json:\"string_value,omitempty\"`\n\tAggregateValue       *string  `protobuf:\"bytes,8,opt,name=aggregate_value,json=aggregateValue\" json:\"aggregate_value,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *UninterpretedOption) Reset()         { *m = UninterpretedOption{} }\nfunc (m *UninterpretedOption) String() string { return proto.CompactTextString(m) }\nfunc (*UninterpretedOption) ProtoMessage()    {}\nfunc (*UninterpretedOption) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_e5baabe45344a177, []int{18}\n}\n\nfunc (m *UninterpretedOption) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_UninterpretedOption.Unmarshal(m, b)\n}\nfunc (m *UninterpretedOption) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_UninterpretedOption.Marshal(b, m, deterministic)\n}\nfunc (m *UninterpretedOption) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_UninterpretedOption.Merge(m, src)\n}\nfunc (m *UninterpretedOption) XXX_Size() int {\n\treturn xxx_messageInfo_UninterpretedOption.Size(m)\n}\nfunc (m *UninterpretedOption) XXX_DiscardUnknown() {\n\txxx_messageInfo_UninterpretedOption.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_UninterpretedOption proto.InternalMessageInfo\n\nfunc (m *UninterpretedOption) GetName() []*UninterpretedOption_NamePart {\n\tif m != nil {\n\t\treturn m.Name\n\t}\n\treturn nil\n}\n\nfunc (m *UninterpretedOption) GetIdentifierValue() string {\n\tif m != nil && m.IdentifierValue != nil {\n\t\treturn *m.IdentifierValue\n\t}\n\treturn \"\"\n}\n\nfunc (m *UninterpretedOption) GetPositiveIntValue() uint64 {\n\tif m != nil && m.PositiveIntValue != nil {\n\t\treturn *m.PositiveIntValue\n\t}\n\treturn 0\n}\n\nfunc (m *UninterpretedOption) GetNegativeIntValue() int64 {\n\tif m != nil && m.NegativeIntValue != nil {\n\t\treturn *m.NegativeIntValue\n\t}\n\treturn 0\n}\n\nfunc (m *UninterpretedOption) GetDoubleValue() float64 {\n\tif m != nil && m.DoubleValue != nil {\n\t\treturn *m.DoubleValue\n\t}\n\treturn 0\n}\n\nfunc (m *UninterpretedOption) GetStringValue() []byte {\n\tif m != nil {\n\t\treturn m.StringValue\n\t}\n\treturn nil\n}\n\nfunc (m *UninterpretedOption) GetAggregateValue() string {\n\tif m != nil && m.AggregateValue != nil {\n\t\treturn *m.AggregateValue\n\t}\n\treturn \"\"\n}\n\n// The name of the uninterpreted option.  Each string represents a segment in\n// a dot-separated name.  is_extension is true iff a segment represents an\n// extension (denoted with parentheses in options specs in .proto files).\n// E.g.,{ [\"foo\", false], [\"bar.baz\", true], [\"qux\", false] } represents\n// \"foo.(bar.baz).qux\".\ntype UninterpretedOption_NamePart struct {\n\tNamePart             *string  `protobuf:\"bytes,1,req,name=name_part,json=namePart\" json:\"name_part,omitempty\"`\n\tIsExtension          *bool    `protobuf:\"varint,2,req,name=is_extension,json=isExtension\" json:\"is_extension,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *UninterpretedOption_NamePart) Reset()         { *m = UninterpretedOption_NamePart{} }\nfunc (m *UninterpretedOption_NamePart) String() string { return proto.CompactTextString(m) }\nfunc (*UninterpretedOption_NamePart) ProtoMessage()    {}\nfunc (*UninterpretedOption_NamePart) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_e5baabe45344a177, []int{18, 0}\n}\n\nfunc (m *UninterpretedOption_NamePart) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_UninterpretedOption_NamePart.Unmarshal(m, b)\n}\nfunc (m *UninterpretedOption_NamePart) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_UninterpretedOption_NamePart.Marshal(b, m, deterministic)\n}\nfunc (m *UninterpretedOption_NamePart) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_UninterpretedOption_NamePart.Merge(m, src)\n}\nfunc (m *UninterpretedOption_NamePart) XXX_Size() int {\n\treturn xxx_messageInfo_UninterpretedOption_NamePart.Size(m)\n}\nfunc (m *UninterpretedOption_NamePart) XXX_DiscardUnknown() {\n\txxx_messageInfo_UninterpretedOption_NamePart.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_UninterpretedOption_NamePart proto.InternalMessageInfo\n\nfunc (m *UninterpretedOption_NamePart) GetNamePart() string {\n\tif m != nil && m.NamePart != nil {\n\t\treturn *m.NamePart\n\t}\n\treturn \"\"\n}\n\nfunc (m *UninterpretedOption_NamePart) GetIsExtension() bool {\n\tif m != nil && m.IsExtension != nil {\n\t\treturn *m.IsExtension\n\t}\n\treturn false\n}\n\n// Encapsulates information about the original source file from which a\n// FileDescriptorProto was generated.\ntype SourceCodeInfo struct {\n\t// A Location identifies a piece of source code in a .proto file which\n\t// corresponds to a particular definition.  This information is intended\n\t// to be useful to IDEs, code indexers, documentation generators, and similar\n\t// tools.\n\t//\n\t// For example, say we have a file like:\n\t//   message Foo {\n\t//     optional string foo = 1;\n\t//   }\n\t// Let's look at just the field definition:\n\t//   optional string foo = 1;\n\t//   ^       ^^     ^^  ^  ^^^\n\t//   a       bc     de  f  ghi\n\t// We have the following locations:\n\t//   span   path               represents\n\t//   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.\n\t//   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).\n\t//   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).\n\t//   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).\n\t//   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).\n\t//\n\t// Notes:\n\t// - A location may refer to a repeated field itself (i.e. not to any\n\t//   particular index within it).  This is used whenever a set of elements are\n\t//   logically enclosed in a single code segment.  For example, an entire\n\t//   extend block (possibly containing multiple extension definitions) will\n\t//   have an outer location whose path refers to the \"extensions\" repeated\n\t//   field without an index.\n\t// - Multiple locations may have the same path.  This happens when a single\n\t//   logical declaration is spread out across multiple places.  The most\n\t//   obvious example is the \"extend\" block again -- there may be multiple\n\t//   extend blocks in the same scope, each of which will have the same path.\n\t// - A location's span is not always a subset of its parent's span.  For\n\t//   example, the \"extendee\" of an extension declaration appears at the\n\t//   beginning of the \"extend\" block and is shared by all extensions within\n\t//   the block.\n\t// - Just because a location's span is a subset of some other location's span\n\t//   does not mean that it is a descendent.  For example, a \"group\" defines\n\t//   both a type and a field in a single declaration.  Thus, the locations\n\t//   corresponding to the type and field and their components will overlap.\n\t// - Code which tries to interpret locations should probably be designed to\n\t//   ignore those that it doesn't understand, as more types of locations could\n\t//   be recorded in the future.\n\tLocation             []*SourceCodeInfo_Location `protobuf:\"bytes,1,rep,name=location\" json:\"location,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}                   `json:\"-\"`\n\tXXX_unrecognized     []byte                     `json:\"-\"`\n\tXXX_sizecache        int32                      `json:\"-\"`\n}\n\nfunc (m *SourceCodeInfo) Reset()         { *m = SourceCodeInfo{} }\nfunc (m *SourceCodeInfo) String() string { return proto.CompactTextString(m) }\nfunc (*SourceCodeInfo) ProtoMessage()    {}\nfunc (*SourceCodeInfo) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_e5baabe45344a177, []int{19}\n}\n\nfunc (m *SourceCodeInfo) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_SourceCodeInfo.Unmarshal(m, b)\n}\nfunc (m *SourceCodeInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_SourceCodeInfo.Marshal(b, m, deterministic)\n}\nfunc (m *SourceCodeInfo) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_SourceCodeInfo.Merge(m, src)\n}\nfunc (m *SourceCodeInfo) XXX_Size() int {\n\treturn xxx_messageInfo_SourceCodeInfo.Size(m)\n}\nfunc (m *SourceCodeInfo) XXX_DiscardUnknown() {\n\txxx_messageInfo_SourceCodeInfo.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_SourceCodeInfo proto.InternalMessageInfo\n\nfunc (m *SourceCodeInfo) GetLocation() []*SourceCodeInfo_Location {\n\tif m != nil {\n\t\treturn m.Location\n\t}\n\treturn nil\n}\n\ntype SourceCodeInfo_Location struct {\n\t// Identifies which part of the FileDescriptorProto was defined at this\n\t// location.\n\t//\n\t// Each element is a field number or an index.  They form a path from\n\t// the root FileDescriptorProto to the place where the definition.  For\n\t// example, this path:\n\t//   [ 4, 3, 2, 7, 1 ]\n\t// refers to:\n\t//   file.message_type(3)  // 4, 3\n\t//       .field(7)         // 2, 7\n\t//       .name()           // 1\n\t// This is because FileDescriptorProto.message_type has field number 4:\n\t//   repeated DescriptorProto message_type = 4;\n\t// and DescriptorProto.field has field number 2:\n\t//   repeated FieldDescriptorProto field = 2;\n\t// and FieldDescriptorProto.name has field number 1:\n\t//   optional string name = 1;\n\t//\n\t// Thus, the above path gives the location of a field name.  If we removed\n\t// the last element:\n\t//   [ 4, 3, 2, 7 ]\n\t// this path refers to the whole field declaration (from the beginning\n\t// of the label to the terminating semicolon).\n\tPath []int32 `protobuf:\"varint,1,rep,packed,name=path\" json:\"path,omitempty\"`\n\t// Always has exactly three or four elements: start line, start column,\n\t// end line (optional, otherwise assumed same as start line), end column.\n\t// These are packed into a single field for efficiency.  Note that line\n\t// and column numbers are zero-based -- typically you will want to add\n\t// 1 to each before displaying to a user.\n\tSpan []int32 `protobuf:\"varint,2,rep,packed,name=span\" json:\"span,omitempty\"`\n\t// If this SourceCodeInfo represents a complete declaration, these are any\n\t// comments appearing before and after the declaration which appear to be\n\t// attached to the declaration.\n\t//\n\t// A series of line comments appearing on consecutive lines, with no other\n\t// tokens appearing on those lines, will be treated as a single comment.\n\t//\n\t// leading_detached_comments will keep paragraphs of comments that appear\n\t// before (but not connected to) the current element. Each paragraph,\n\t// separated by empty lines, will be one comment element in the repeated\n\t// field.\n\t//\n\t// Only the comment content is provided; comment markers (e.g. //) are\n\t// stripped out.  For block comments, leading whitespace and an asterisk\n\t// will be stripped from the beginning of each line other than the first.\n\t// Newlines are included in the output.\n\t//\n\t// Examples:\n\t//\n\t//   optional int32 foo = 1;  // Comment attached to foo.\n\t//   // Comment attached to bar.\n\t//   optional int32 bar = 2;\n\t//\n\t//   optional string baz = 3;\n\t//   // Comment attached to baz.\n\t//   // Another line attached to baz.\n\t//\n\t//   // Comment attached to qux.\n\t//   //\n\t//   // Another line attached to qux.\n\t//   optional double qux = 4;\n\t//\n\t//   // Detached comment for corge. This is not leading or trailing comments\n\t//   // to qux or corge because there are blank lines separating it from\n\t//   // both.\n\t//\n\t//   // Detached comment for corge paragraph 2.\n\t//\n\t//   optional string corge = 5;\n\t//   /* Block comment attached\n\t//    * to corge.  Leading asterisks\n\t//    * will be removed. */\n\t//   /* Block comment attached to\n\t//    * grault. */\n\t//   optional int32 grault = 6;\n\t//\n\t//   // ignored detached comments.\n\tLeadingComments         *string  `protobuf:\"bytes,3,opt,name=leading_comments,json=leadingComments\" json:\"leading_comments,omitempty\"`\n\tTrailingComments        *string  `protobuf:\"bytes,4,opt,name=trailing_comments,json=trailingComments\" json:\"trailing_comments,omitempty\"`\n\tLeadingDetachedComments []string `protobuf:\"bytes,6,rep,name=leading_detached_comments,json=leadingDetachedComments\" json:\"leading_detached_comments,omitempty\"`\n\tXXX_NoUnkeyedLiteral    struct{} `json:\"-\"`\n\tXXX_unrecognized        []byte   `json:\"-\"`\n\tXXX_sizecache           int32    `json:\"-\"`\n}\n\nfunc (m *SourceCodeInfo_Location) Reset()         { *m = SourceCodeInfo_Location{} }\nfunc (m *SourceCodeInfo_Location) String() string { return proto.CompactTextString(m) }\nfunc (*SourceCodeInfo_Location) ProtoMessage()    {}\nfunc (*SourceCodeInfo_Location) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_e5baabe45344a177, []int{19, 0}\n}\n\nfunc (m *SourceCodeInfo_Location) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_SourceCodeInfo_Location.Unmarshal(m, b)\n}\nfunc (m *SourceCodeInfo_Location) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_SourceCodeInfo_Location.Marshal(b, m, deterministic)\n}\nfunc (m *SourceCodeInfo_Location) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_SourceCodeInfo_Location.Merge(m, src)\n}\nfunc (m *SourceCodeInfo_Location) XXX_Size() int {\n\treturn xxx_messageInfo_SourceCodeInfo_Location.Size(m)\n}\nfunc (m *SourceCodeInfo_Location) XXX_DiscardUnknown() {\n\txxx_messageInfo_SourceCodeInfo_Location.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_SourceCodeInfo_Location proto.InternalMessageInfo\n\nfunc (m *SourceCodeInfo_Location) GetPath() []int32 {\n\tif m != nil {\n\t\treturn m.Path\n\t}\n\treturn nil\n}\n\nfunc (m *SourceCodeInfo_Location) GetSpan() []int32 {\n\tif m != nil {\n\t\treturn m.Span\n\t}\n\treturn nil\n}\n\nfunc (m *SourceCodeInfo_Location) GetLeadingComments() string {\n\tif m != nil && m.LeadingComments != nil {\n\t\treturn *m.LeadingComments\n\t}\n\treturn \"\"\n}\n\nfunc (m *SourceCodeInfo_Location) GetTrailingComments() string {\n\tif m != nil && m.TrailingComments != nil {\n\t\treturn *m.TrailingComments\n\t}\n\treturn \"\"\n}\n\nfunc (m *SourceCodeInfo_Location) GetLeadingDetachedComments() []string {\n\tif m != nil {\n\t\treturn m.LeadingDetachedComments\n\t}\n\treturn nil\n}\n\n// Describes the relationship between generated code and its original source\n// file. A GeneratedCodeInfo message is associated with only one generated\n// source file, but may contain references to different source .proto files.\ntype GeneratedCodeInfo struct {\n\t// An Annotation connects some span of text in generated code to an element\n\t// of its generating .proto file.\n\tAnnotation           []*GeneratedCodeInfo_Annotation `protobuf:\"bytes,1,rep,name=annotation\" json:\"annotation,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}                        `json:\"-\"`\n\tXXX_unrecognized     []byte                          `json:\"-\"`\n\tXXX_sizecache        int32                           `json:\"-\"`\n}\n\nfunc (m *GeneratedCodeInfo) Reset()         { *m = GeneratedCodeInfo{} }\nfunc (m *GeneratedCodeInfo) String() string { return proto.CompactTextString(m) }\nfunc (*GeneratedCodeInfo) ProtoMessage()    {}\nfunc (*GeneratedCodeInfo) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_e5baabe45344a177, []int{20}\n}\n\nfunc (m *GeneratedCodeInfo) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_GeneratedCodeInfo.Unmarshal(m, b)\n}\nfunc (m *GeneratedCodeInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_GeneratedCodeInfo.Marshal(b, m, deterministic)\n}\nfunc (m *GeneratedCodeInfo) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_GeneratedCodeInfo.Merge(m, src)\n}\nfunc (m *GeneratedCodeInfo) XXX_Size() int {\n\treturn xxx_messageInfo_GeneratedCodeInfo.Size(m)\n}\nfunc (m *GeneratedCodeInfo) XXX_DiscardUnknown() {\n\txxx_messageInfo_GeneratedCodeInfo.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_GeneratedCodeInfo proto.InternalMessageInfo\n\nfunc (m *GeneratedCodeInfo) GetAnnotation() []*GeneratedCodeInfo_Annotation {\n\tif m != nil {\n\t\treturn m.Annotation\n\t}\n\treturn nil\n}\n\ntype GeneratedCodeInfo_Annotation struct {\n\t// Identifies the element in the original source .proto file. This field\n\t// is formatted the same as SourceCodeInfo.Location.path.\n\tPath []int32 `protobuf:\"varint,1,rep,packed,name=path\" json:\"path,omitempty\"`\n\t// Identifies the filesystem path to the original source .proto.\n\tSourceFile *string `protobuf:\"bytes,2,opt,name=source_file,json=sourceFile\" json:\"source_file,omitempty\"`\n\t// Identifies the starting offset in bytes in the generated code\n\t// that relates to the identified object.\n\tBegin *int32 `protobuf:\"varint,3,opt,name=begin\" json:\"begin,omitempty\"`\n\t// Identifies the ending offset in bytes in the generated code that\n\t// relates to the identified offset. The end offset should be one past\n\t// the last relevant byte (so the length of the text = end - begin).\n\tEnd                  *int32   `protobuf:\"varint,4,opt,name=end\" json:\"end,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *GeneratedCodeInfo_Annotation) Reset()         { *m = GeneratedCodeInfo_Annotation{} }\nfunc (m *GeneratedCodeInfo_Annotation) String() string { return proto.CompactTextString(m) }\nfunc (*GeneratedCodeInfo_Annotation) ProtoMessage()    {}\nfunc (*GeneratedCodeInfo_Annotation) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_e5baabe45344a177, []int{20, 0}\n}\n\nfunc (m *GeneratedCodeInfo_Annotation) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_GeneratedCodeInfo_Annotation.Unmarshal(m, b)\n}\nfunc (m *GeneratedCodeInfo_Annotation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_GeneratedCodeInfo_Annotation.Marshal(b, m, deterministic)\n}\nfunc (m *GeneratedCodeInfo_Annotation) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_GeneratedCodeInfo_Annotation.Merge(m, src)\n}\nfunc (m *GeneratedCodeInfo_Annotation) XXX_Size() int {\n\treturn xxx_messageInfo_GeneratedCodeInfo_Annotation.Size(m)\n}\nfunc (m *GeneratedCodeInfo_Annotation) XXX_DiscardUnknown() {\n\txxx_messageInfo_GeneratedCodeInfo_Annotation.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_GeneratedCodeInfo_Annotation proto.InternalMessageInfo\n\nfunc (m *GeneratedCodeInfo_Annotation) GetPath() []int32 {\n\tif m != nil {\n\t\treturn m.Path\n\t}\n\treturn nil\n}\n\nfunc (m *GeneratedCodeInfo_Annotation) GetSourceFile() string {\n\tif m != nil && m.SourceFile != nil {\n\t\treturn *m.SourceFile\n\t}\n\treturn \"\"\n}\n\nfunc (m *GeneratedCodeInfo_Annotation) GetBegin() int32 {\n\tif m != nil && m.Begin != nil {\n\t\treturn *m.Begin\n\t}\n\treturn 0\n}\n\nfunc (m *GeneratedCodeInfo_Annotation) GetEnd() int32 {\n\tif m != nil && m.End != nil {\n\t\treturn *m.End\n\t}\n\treturn 0\n}\n\nfunc init() {\n\tproto.RegisterEnum(\"google.protobuf.FieldDescriptorProto_Type\", FieldDescriptorProto_Type_name, FieldDescriptorProto_Type_value)\n\tproto.RegisterEnum(\"google.protobuf.FieldDescriptorProto_Label\", FieldDescriptorProto_Label_name, FieldDescriptorProto_Label_value)\n\tproto.RegisterEnum(\"google.protobuf.FileOptions_OptimizeMode\", FileOptions_OptimizeMode_name, FileOptions_OptimizeMode_value)\n\tproto.RegisterEnum(\"google.protobuf.FieldOptions_CType\", FieldOptions_CType_name, FieldOptions_CType_value)\n\tproto.RegisterEnum(\"google.protobuf.FieldOptions_JSType\", FieldOptions_JSType_name, FieldOptions_JSType_value)\n\tproto.RegisterEnum(\"google.protobuf.MethodOptions_IdempotencyLevel\", MethodOptions_IdempotencyLevel_name, MethodOptions_IdempotencyLevel_value)\n\tproto.RegisterType((*FileDescriptorSet)(nil), \"google.protobuf.FileDescriptorSet\")\n\tproto.RegisterType((*FileDescriptorProto)(nil), \"google.protobuf.FileDescriptorProto\")\n\tproto.RegisterType((*DescriptorProto)(nil), \"google.protobuf.DescriptorProto\")\n\tproto.RegisterType((*DescriptorProto_ExtensionRange)(nil), \"google.protobuf.DescriptorProto.ExtensionRange\")\n\tproto.RegisterType((*DescriptorProto_ReservedRange)(nil), \"google.protobuf.DescriptorProto.ReservedRange\")\n\tproto.RegisterType((*ExtensionRangeOptions)(nil), \"google.protobuf.ExtensionRangeOptions\")\n\tproto.RegisterType((*FieldDescriptorProto)(nil), \"google.protobuf.FieldDescriptorProto\")\n\tproto.RegisterType((*OneofDescriptorProto)(nil), \"google.protobuf.OneofDescriptorProto\")\n\tproto.RegisterType((*EnumDescriptorProto)(nil), \"google.protobuf.EnumDescriptorProto\")\n\tproto.RegisterType((*EnumDescriptorProto_EnumReservedRange)(nil), \"google.protobuf.EnumDescriptorProto.EnumReservedRange\")\n\tproto.RegisterType((*EnumValueDescriptorProto)(nil), \"google.protobuf.EnumValueDescriptorProto\")\n\tproto.RegisterType((*ServiceDescriptorProto)(nil), \"google.protobuf.ServiceDescriptorProto\")\n\tproto.RegisterType((*MethodDescriptorProto)(nil), \"google.protobuf.MethodDescriptorProto\")\n\tproto.RegisterType((*FileOptions)(nil), \"google.protobuf.FileOptions\")\n\tproto.RegisterType((*MessageOptions)(nil), \"google.protobuf.MessageOptions\")\n\tproto.RegisterType((*FieldOptions)(nil), \"google.protobuf.FieldOptions\")\n\tproto.RegisterType((*OneofOptions)(nil), \"google.protobuf.OneofOptions\")\n\tproto.RegisterType((*EnumOptions)(nil), \"google.protobuf.EnumOptions\")\n\tproto.RegisterType((*EnumValueOptions)(nil), \"google.protobuf.EnumValueOptions\")\n\tproto.RegisterType((*ServiceOptions)(nil), \"google.protobuf.ServiceOptions\")\n\tproto.RegisterType((*MethodOptions)(nil), \"google.protobuf.MethodOptions\")\n\tproto.RegisterType((*UninterpretedOption)(nil), \"google.protobuf.UninterpretedOption\")\n\tproto.RegisterType((*UninterpretedOption_NamePart)(nil), \"google.protobuf.UninterpretedOption.NamePart\")\n\tproto.RegisterType((*SourceCodeInfo)(nil), \"google.protobuf.SourceCodeInfo\")\n\tproto.RegisterType((*SourceCodeInfo_Location)(nil), \"google.protobuf.SourceCodeInfo.Location\")\n\tproto.RegisterType((*GeneratedCodeInfo)(nil), \"google.protobuf.GeneratedCodeInfo\")\n\tproto.RegisterType((*GeneratedCodeInfo_Annotation)(nil), \"google.protobuf.GeneratedCodeInfo.Annotation\")\n}\n\nfunc init() { proto.RegisterFile(\"google/protobuf/descriptor.proto\", fileDescriptor_e5baabe45344a177) }\n\nvar fileDescriptor_e5baabe45344a177 = []byte{\n\t// 2589 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x59, 0xdd, 0x8e, 0xdb, 0xc6,\n\t0x15, 0x0e, 0xf5, 0xb7, 0xd2, 0x91, 0x56, 0x3b, 0x3b, 0xbb, 0xb1, 0xe9, 0xcd, 0x8f, 0xd7, 0xca,\n\t0x8f, 0xd7, 0x4e, 0xac, 0x0d, 0x1c, 0xdb, 0x71, 0xd6, 0x45, 0x5a, 0xad, 0x44, 0x6f, 0xe4, 0xee,\n\t0x4a, 0x2a, 0xa5, 0x6d, 0x7e, 0x80, 0x82, 0x98, 0x25, 0x47, 0x12, 0x6d, 0x8a, 0x64, 0x48, 0xca,\n\t0xf6, 0x06, 0xbd, 0x30, 0xd0, 0xab, 0x5e, 0x15, 0xe8, 0x55, 0x51, 0x14, 0xbd, 0xe8, 0x4d, 0x80,\n\t0x3e, 0x40, 0x81, 0xde, 0xf5, 0x09, 0x0a, 0xe4, 0x0d, 0x8a, 0xb6, 0x40, 0xfb, 0x08, 0xbd, 0x2c,\n\t0x66, 0x86, 0xa4, 0x48, 0x49, 0x1b, 0x6f, 0x02, 0xc4, 0xb9, 0x92, 0xe6, 0x3b, 0xdf, 0x39, 0x73,\n\t0xe6, 0xcc, 0x99, 0x99, 0x33, 0x43, 0xd8, 0x1e, 0x39, 0xce, 0xc8, 0xa2, 0xbb, 0xae, 0xe7, 0x04,\n\t0xce, 0xc9, 0x74, 0xb8, 0x6b, 0x50, 0x5f, 0xf7, 0x4c, 0x37, 0x70, 0xbc, 0x3a, 0xc7, 0xf0, 0x9a,\n\t0x60, 0xd4, 0x23, 0x46, 0xed, 0x08, 0xd6, 0xef, 0x9b, 0x16, 0x6d, 0xc5, 0xc4, 0x3e, 0x0d, 0xf0,\n\t0x5d, 0xc8, 0x0d, 0x4d, 0x8b, 0xca, 0xd2, 0x76, 0x76, 0xa7, 0x7c, 0xf3, 0xcd, 0xfa, 0x9c, 0x52,\n\t0x3d, 0xad, 0xd1, 0x63, 0xb0, 0xca, 0x35, 0x6a, 0xff, 0xce, 0xc1, 0xc6, 0x12, 0x29, 0xc6, 0x90,\n\t0xb3, 0xc9, 0x84, 0x59, 0x94, 0x76, 0x4a, 0x2a, 0xff, 0x8f, 0x65, 0x58, 0x71, 0x89, 0xfe, 0x88,\n\t0x8c, 0xa8, 0x9c, 0xe1, 0x70, 0xd4, 0xc4, 0xaf, 0x03, 0x18, 0xd4, 0xa5, 0xb6, 0x41, 0x6d, 0xfd,\n\t0x54, 0xce, 0x6e, 0x67, 0x77, 0x4a, 0x6a, 0x02, 0xc1, 0xef, 0xc0, 0xba, 0x3b, 0x3d, 0xb1, 0x4c,\n\t0x5d, 0x4b, 0xd0, 0x60, 0x3b, 0xbb, 0x93, 0x57, 0x91, 0x10, 0xb4, 0x66, 0xe4, 0xab, 0xb0, 0xf6,\n\t0x84, 0x92, 0x47, 0x49, 0x6a, 0x99, 0x53, 0xab, 0x0c, 0x4e, 0x10, 0x9b, 0x50, 0x99, 0x50, 0xdf,\n\t0x27, 0x23, 0xaa, 0x05, 0xa7, 0x2e, 0x95, 0x73, 0x7c, 0xf4, 0xdb, 0x0b, 0xa3, 0x9f, 0x1f, 0x79,\n\t0x39, 0xd4, 0x1a, 0x9c, 0xba, 0x14, 0x37, 0xa0, 0x44, 0xed, 0xe9, 0x44, 0x58, 0xc8, 0x9f, 0x11,\n\t0x3f, 0xc5, 0x9e, 0x4e, 0xe6, 0xad, 0x14, 0x99, 0x5a, 0x68, 0x62, 0xc5, 0xa7, 0xde, 0x63, 0x53,\n\t0xa7, 0x72, 0x81, 0x1b, 0xb8, 0xba, 0x60, 0xa0, 0x2f, 0xe4, 0xf3, 0x36, 0x22, 0x3d, 0xdc, 0x84,\n\t0x12, 0x7d, 0x1a, 0x50, 0xdb, 0x37, 0x1d, 0x5b, 0x5e, 0xe1, 0x46, 0xde, 0x5a, 0x32, 0x8b, 0xd4,\n\t0x32, 0xe6, 0x4d, 0xcc, 0xf4, 0xf0, 0x1d, 0x58, 0x71, 0xdc, 0xc0, 0x74, 0x6c, 0x5f, 0x2e, 0x6e,\n\t0x4b, 0x3b, 0xe5, 0x9b, 0xaf, 0x2e, 0x4d, 0x84, 0xae, 0xe0, 0xa8, 0x11, 0x19, 0xb7, 0x01, 0xf9,\n\t0xce, 0xd4, 0xd3, 0xa9, 0xa6, 0x3b, 0x06, 0xd5, 0x4c, 0x7b, 0xe8, 0xc8, 0x25, 0x6e, 0xe0, 0xf2,\n\t0xe2, 0x40, 0x38, 0xb1, 0xe9, 0x18, 0xb4, 0x6d, 0x0f, 0x1d, 0xb5, 0xea, 0xa7, 0xda, 0xf8, 0x02,\n\t0x14, 0xfc, 0x53, 0x3b, 0x20, 0x4f, 0xe5, 0x0a, 0xcf, 0x90, 0xb0, 0x55, 0xfb, 0x6b, 0x01, 0xd6,\n\t0xce, 0x93, 0x62, 0xf7, 0x20, 0x3f, 0x64, 0xa3, 0x94, 0x33, 0xdf, 0x26, 0x06, 0x42, 0x27, 0x1d,\n\t0xc4, 0xc2, 0x77, 0x0c, 0x62, 0x03, 0xca, 0x36, 0xf5, 0x03, 0x6a, 0x88, 0x8c, 0xc8, 0x9e, 0x33,\n\t0xa7, 0x40, 0x28, 0x2d, 0xa6, 0x54, 0xee, 0x3b, 0xa5, 0xd4, 0xa7, 0xb0, 0x16, 0xbb, 0xa4, 0x79,\n\t0xc4, 0x1e, 0x45, 0xb9, 0xb9, 0xfb, 0x3c, 0x4f, 0xea, 0x4a, 0xa4, 0xa7, 0x32, 0x35, 0xb5, 0x4a,\n\t0x53, 0x6d, 0xdc, 0x02, 0x70, 0x6c, 0xea, 0x0c, 0x35, 0x83, 0xea, 0x96, 0x5c, 0x3c, 0x23, 0x4a,\n\t0x5d, 0x46, 0x59, 0x88, 0x92, 0x23, 0x50, 0xdd, 0xc2, 0x1f, 0xce, 0x52, 0x6d, 0xe5, 0x8c, 0x4c,\n\t0x39, 0x12, 0x8b, 0x6c, 0x21, 0xdb, 0x8e, 0xa1, 0xea, 0x51, 0x96, 0xf7, 0xd4, 0x08, 0x47, 0x56,\n\t0xe2, 0x4e, 0xd4, 0x9f, 0x3b, 0x32, 0x35, 0x54, 0x13, 0x03, 0x5b, 0xf5, 0x92, 0x4d, 0xfc, 0x06,\n\t0xc4, 0x80, 0xc6, 0xd3, 0x0a, 0xf8, 0x2e, 0x54, 0x89, 0xc0, 0x0e, 0x99, 0xd0, 0xad, 0x2f, 0xa1,\n\t0x9a, 0x0e, 0x0f, 0xde, 0x84, 0xbc, 0x1f, 0x10, 0x2f, 0xe0, 0x59, 0x98, 0x57, 0x45, 0x03, 0x23,\n\t0xc8, 0x52, 0xdb, 0xe0, 0xbb, 0x5c, 0x5e, 0x65, 0x7f, 0xf1, 0x4f, 0x66, 0x03, 0xce, 0xf2, 0x01,\n\t0xbf, 0xbd, 0x38, 0xa3, 0x29, 0xcb, 0xf3, 0xe3, 0xde, 0xfa, 0x00, 0x56, 0x53, 0x03, 0x38, 0x6f,\n\t0xd7, 0xb5, 0x5f, 0xc2, 0xcb, 0x4b, 0x4d, 0xe3, 0x4f, 0x61, 0x73, 0x6a, 0x9b, 0x76, 0x40, 0x3d,\n\t0xd7, 0xa3, 0x2c, 0x63, 0x45, 0x57, 0xf2, 0x7f, 0x56, 0xce, 0xc8, 0xb9, 0xe3, 0x24, 0x5b, 0x58,\n\t0x51, 0x37, 0xa6, 0x8b, 0xe0, 0xf5, 0x52, 0xf1, 0xbf, 0x2b, 0xe8, 0xd9, 0xb3, 0x67, 0xcf, 0x32,\n\t0xb5, 0xdf, 0x15, 0x60, 0x73, 0xd9, 0x9a, 0x59, 0xba, 0x7c, 0x2f, 0x40, 0xc1, 0x9e, 0x4e, 0x4e,\n\t0xa8, 0xc7, 0x83, 0x94, 0x57, 0xc3, 0x16, 0x6e, 0x40, 0xde, 0x22, 0x27, 0xd4, 0x92, 0x73, 0xdb,\n\t0xd2, 0x4e, 0xf5, 0xe6, 0x3b, 0xe7, 0x5a, 0x95, 0xf5, 0x43, 0xa6, 0xa2, 0x0a, 0x4d, 0xfc, 0x11,\n\t0xe4, 0xc2, 0x2d, 0x9a, 0x59, 0xb8, 0x7e, 0x3e, 0x0b, 0x6c, 0x2d, 0xa9, 0x5c, 0x0f, 0xbf, 0x02,\n\t0x25, 0xf6, 0x2b, 0x72, 0xa3, 0xc0, 0x7d, 0x2e, 0x32, 0x80, 0xe5, 0x05, 0xde, 0x82, 0x22, 0x5f,\n\t0x26, 0x06, 0x8d, 0x8e, 0xb6, 0xb8, 0xcd, 0x12, 0xcb, 0xa0, 0x43, 0x32, 0xb5, 0x02, 0xed, 0x31,\n\t0xb1, 0xa6, 0x94, 0x27, 0x7c, 0x49, 0xad, 0x84, 0xe0, 0xcf, 0x19, 0x86, 0x2f, 0x43, 0x59, 0xac,\n\t0x2a, 0xd3, 0x36, 0xe8, 0x53, 0xbe, 0x7b, 0xe6, 0x55, 0xb1, 0xd0, 0xda, 0x0c, 0x61, 0xdd, 0x3f,\n\t0xf4, 0x1d, 0x3b, 0x4a, 0x4d, 0xde, 0x05, 0x03, 0x78, 0xf7, 0x1f, 0xcc, 0x6f, 0xdc, 0xaf, 0x2d,\n\t0x1f, 0xde, 0x7c, 0x4e, 0xd5, 0xfe, 0x92, 0x81, 0x1c, 0xdf, 0x2f, 0xd6, 0xa0, 0x3c, 0xf8, 0xac,\n\t0xa7, 0x68, 0xad, 0xee, 0xf1, 0xfe, 0xa1, 0x82, 0x24, 0x5c, 0x05, 0xe0, 0xc0, 0xfd, 0xc3, 0x6e,\n\t0x63, 0x80, 0x32, 0x71, 0xbb, 0xdd, 0x19, 0xdc, 0xb9, 0x85, 0xb2, 0xb1, 0xc2, 0xb1, 0x00, 0x72,\n\t0x49, 0xc2, 0xfb, 0x37, 0x51, 0x1e, 0x23, 0xa8, 0x08, 0x03, 0xed, 0x4f, 0x95, 0xd6, 0x9d, 0x5b,\n\t0xa8, 0x90, 0x46, 0xde, 0xbf, 0x89, 0x56, 0xf0, 0x2a, 0x94, 0x38, 0xb2, 0xdf, 0xed, 0x1e, 0xa2,\n\t0x62, 0x6c, 0xb3, 0x3f, 0x50, 0xdb, 0x9d, 0x03, 0x54, 0x8a, 0x6d, 0x1e, 0xa8, 0xdd, 0xe3, 0x1e,\n\t0x82, 0xd8, 0xc2, 0x91, 0xd2, 0xef, 0x37, 0x0e, 0x14, 0x54, 0x8e, 0x19, 0xfb, 0x9f, 0x0d, 0x94,\n\t0x3e, 0xaa, 0xa4, 0xdc, 0x7a, 0xff, 0x26, 0x5a, 0x8d, 0xbb, 0x50, 0x3a, 0xc7, 0x47, 0xa8, 0x8a,\n\t0xd7, 0x61, 0x55, 0x74, 0x11, 0x39, 0xb1, 0x36, 0x07, 0xdd, 0xb9, 0x85, 0xd0, 0xcc, 0x11, 0x61,\n\t0x65, 0x3d, 0x05, 0xdc, 0xb9, 0x85, 0x70, 0xad, 0x09, 0x79, 0x9e, 0x5d, 0x18, 0x43, 0xf5, 0xb0,\n\t0xb1, 0xaf, 0x1c, 0x6a, 0xdd, 0xde, 0xa0, 0xdd, 0xed, 0x34, 0x0e, 0x91, 0x34, 0xc3, 0x54, 0xe5,\n\t0x67, 0xc7, 0x6d, 0x55, 0x69, 0xa1, 0x4c, 0x12, 0xeb, 0x29, 0x8d, 0x81, 0xd2, 0x42, 0xd9, 0x9a,\n\t0x0e, 0x9b, 0xcb, 0xf6, 0xc9, 0xa5, 0x2b, 0x23, 0x31, 0xc5, 0x99, 0x33, 0xa6, 0x98, 0xdb, 0x5a,\n\t0x98, 0xe2, 0x7f, 0x65, 0x60, 0x63, 0xc9, 0x59, 0xb1, 0xb4, 0x93, 0x1f, 0x43, 0x5e, 0xa4, 0xa8,\n\t0x38, 0x3d, 0xaf, 0x2d, 0x3d, 0x74, 0x78, 0xc2, 0x2e, 0x9c, 0xa0, 0x5c, 0x2f, 0x59, 0x41, 0x64,\n\t0xcf, 0xa8, 0x20, 0x98, 0x89, 0x85, 0x3d, 0xfd, 0x17, 0x0b, 0x7b, 0xba, 0x38, 0xf6, 0xee, 0x9c,\n\t0xe7, 0xd8, 0xe3, 0xd8, 0xb7, 0xdb, 0xdb, 0xf3, 0x4b, 0xf6, 0xf6, 0x7b, 0xb0, 0xbe, 0x60, 0xe8,\n\t0xdc, 0x7b, 0xec, 0xaf, 0x24, 0x90, 0xcf, 0x0a, 0xce, 0x73, 0x76, 0xba, 0x4c, 0x6a, 0xa7, 0xbb,\n\t0x37, 0x1f, 0xc1, 0x2b, 0x67, 0x4f, 0xc2, 0xc2, 0x5c, 0x7f, 0x25, 0xc1, 0x85, 0xe5, 0x95, 0xe2,\n\t0x52, 0x1f, 0x3e, 0x82, 0xc2, 0x84, 0x06, 0x63, 0x27, 0xaa, 0x96, 0xde, 0x5e, 0x72, 0x06, 0x33,\n\t0xf1, 0xfc, 0x64, 0x87, 0x5a, 0xc9, 0x43, 0x3c, 0x7b, 0x56, 0xb9, 0x27, 0xbc, 0x59, 0xf0, 0xf4,\n\t0xd7, 0x19, 0x78, 0x79, 0xa9, 0xf1, 0xa5, 0x8e, 0xbe, 0x06, 0x60, 0xda, 0xee, 0x34, 0x10, 0x15,\n\t0x91, 0xd8, 0x60, 0x4b, 0x1c, 0xe1, 0x9b, 0x17, 0xdb, 0x3c, 0xa7, 0x41, 0x2c, 0xcf, 0x72, 0x39,\n\t0x08, 0x88, 0x13, 0xee, 0xce, 0x1c, 0xcd, 0x71, 0x47, 0x5f, 0x3f, 0x63, 0xa4, 0x0b, 0x89, 0xf9,\n\t0x1e, 0x20, 0xdd, 0x32, 0xa9, 0x1d, 0x68, 0x7e, 0xe0, 0x51, 0x32, 0x31, 0xed, 0x11, 0x3f, 0x41,\n\t0x8a, 0x7b, 0xf9, 0x21, 0xb1, 0x7c, 0xaa, 0xae, 0x09, 0x71, 0x3f, 0x92, 0x32, 0x0d, 0x9e, 0x40,\n\t0x5e, 0x42, 0xa3, 0x90, 0xd2, 0x10, 0xe2, 0x58, 0xa3, 0xf6, 0xdb, 0x12, 0x94, 0x13, 0x75, 0x35,\n\t0xbe, 0x02, 0x95, 0x87, 0xe4, 0x31, 0xd1, 0xa2, 0xbb, 0x92, 0x88, 0x44, 0x99, 0x61, 0xbd, 0xf0,\n\t0xbe, 0xf4, 0x1e, 0x6c, 0x72, 0x8a, 0x33, 0x0d, 0xa8, 0xa7, 0xe9, 0x16, 0xf1, 0x7d, 0x1e, 0xb4,\n\t0x22, 0xa7, 0x62, 0x26, 0xeb, 0x32, 0x51, 0x33, 0x92, 0xe0, 0xdb, 0xb0, 0xc1, 0x35, 0x26, 0x53,\n\t0x2b, 0x30, 0x5d, 0x8b, 0x6a, 0xec, 0xf6, 0xe6, 0xf3, 0x93, 0x24, 0xf6, 0x6c, 0x9d, 0x31, 0x8e,\n\t0x42, 0x02, 0xf3, 0xc8, 0xc7, 0x2d, 0x78, 0x8d, 0xab, 0x8d, 0xa8, 0x4d, 0x3d, 0x12, 0x50, 0x8d,\n\t0x7e, 0x31, 0x25, 0x96, 0xaf, 0x11, 0xdb, 0xd0, 0xc6, 0xc4, 0x1f, 0xcb, 0x9b, 0xcc, 0xc0, 0x7e,\n\t0x46, 0x96, 0xd4, 0x4b, 0x8c, 0x78, 0x10, 0xf2, 0x14, 0x4e, 0x6b, 0xd8, 0xc6, 0xc7, 0xc4, 0x1f,\n\t0xe3, 0x3d, 0xb8, 0xc0, 0xad, 0xf8, 0x81, 0x67, 0xda, 0x23, 0x4d, 0x1f, 0x53, 0xfd, 0x91, 0x36,\n\t0x0d, 0x86, 0x77, 0xe5, 0x57, 0x92, 0xfd, 0x73, 0x0f, 0xfb, 0x9c, 0xd3, 0x64, 0x94, 0xe3, 0x60,\n\t0x78, 0x17, 0xf7, 0xa1, 0xc2, 0x26, 0x63, 0x62, 0x7e, 0x49, 0xb5, 0xa1, 0xe3, 0xf1, 0xa3, 0xb1,\n\t0xba, 0x64, 0x6b, 0x4a, 0x44, 0xb0, 0xde, 0x0d, 0x15, 0x8e, 0x1c, 0x83, 0xee, 0xe5, 0xfb, 0x3d,\n\t0x45, 0x69, 0xa9, 0xe5, 0xc8, 0xca, 0x7d, 0xc7, 0x63, 0x09, 0x35, 0x72, 0xe2, 0x00, 0x97, 0x45,\n\t0x42, 0x8d, 0x9c, 0x28, 0xbc, 0xb7, 0x61, 0x43, 0xd7, 0xc5, 0x98, 0x4d, 0x5d, 0x0b, 0xef, 0x58,\n\t0xbe, 0x8c, 0x52, 0xc1, 0xd2, 0xf5, 0x03, 0x41, 0x08, 0x73, 0xdc, 0xc7, 0x1f, 0xc2, 0xcb, 0xb3,\n\t0x60, 0x25, 0x15, 0xd7, 0x17, 0x46, 0x39, 0xaf, 0x7a, 0x1b, 0x36, 0xdc, 0xd3, 0x45, 0x45, 0x9c,\n\t0xea, 0xd1, 0x3d, 0x9d, 0x57, 0xfb, 0x00, 0x36, 0xdd, 0xb1, 0xbb, 0xa8, 0x77, 0x3d, 0xa9, 0x87,\n\t0xdd, 0xb1, 0x3b, 0xaf, 0xf8, 0x16, 0xbf, 0x70, 0x7b, 0x54, 0x27, 0x01, 0x35, 0xe4, 0x8b, 0x49,\n\t0x7a, 0x42, 0x80, 0x77, 0x01, 0xe9, 0xba, 0x46, 0x6d, 0x72, 0x62, 0x51, 0x8d, 0x78, 0xd4, 0x26,\n\t0xbe, 0x7c, 0x39, 0x49, 0xae, 0xea, 0xba, 0xc2, 0xa5, 0x0d, 0x2e, 0xc4, 0xd7, 0x61, 0xdd, 0x39,\n\t0x79, 0xa8, 0x8b, 0x94, 0xd4, 0x5c, 0x8f, 0x0e, 0xcd, 0xa7, 0xf2, 0x9b, 0x3c, 0xbe, 0x6b, 0x4c,\n\t0xc0, 0x13, 0xb2, 0xc7, 0x61, 0x7c, 0x0d, 0x90, 0xee, 0x8f, 0x89, 0xe7, 0xf2, 0x3d, 0xd9, 0x77,\n\t0x89, 0x4e, 0xe5, 0xb7, 0x04, 0x55, 0xe0, 0x9d, 0x08, 0x66, 0x4b, 0xc2, 0x7f, 0x62, 0x0e, 0x83,\n\t0xc8, 0xe2, 0x55, 0xb1, 0x24, 0x38, 0x16, 0x5a, 0xdb, 0x01, 0xc4, 0x42, 0x91, 0xea, 0x78, 0x87,\n\t0xd3, 0xaa, 0xee, 0xd8, 0x4d, 0xf6, 0xfb, 0x06, 0xac, 0x32, 0xe6, 0xac, 0xd3, 0x6b, 0xa2, 0x20,\n\t0x73, 0xc7, 0x89, 0x1e, 0x6f, 0xc1, 0x05, 0x46, 0x9a, 0xd0, 0x80, 0x18, 0x24, 0x20, 0x09, 0xf6,\n\t0xbb, 0x9c, 0xcd, 0xe2, 0x7e, 0x14, 0x0a, 0x53, 0x7e, 0x7a, 0xd3, 0x93, 0xd3, 0x38, 0xb3, 0x6e,\n\t0x08, 0x3f, 0x19, 0x16, 0xe5, 0xd6, 0xf7, 0x56, 0x74, 0xd7, 0xf6, 0xa0, 0x92, 0x4c, 0x7c, 0x5c,\n\t0x02, 0x91, 0xfa, 0x48, 0x62, 0x55, 0x50, 0xb3, 0xdb, 0x62, 0xf5, 0xcb, 0xe7, 0x0a, 0xca, 0xb0,\n\t0x3a, 0xea, 0xb0, 0x3d, 0x50, 0x34, 0xf5, 0xb8, 0x33, 0x68, 0x1f, 0x29, 0x28, 0x9b, 0x28, 0xd8,\n\t0x1f, 0xe4, 0x8a, 0x6f, 0xa3, 0xab, 0xb5, 0xaf, 0x33, 0x50, 0x4d, 0xdf, 0xc0, 0xf0, 0x8f, 0xe0,\n\t0x62, 0xf4, 0x5c, 0xe2, 0xd3, 0x40, 0x7b, 0x62, 0x7a, 0x7c, 0x45, 0x4e, 0x88, 0x38, 0x1d, 0xe3,\n\t0x9c, 0xd8, 0x0c, 0x59, 0x7d, 0x1a, 0x7c, 0x62, 0x7a, 0x6c, 0xbd, 0x4d, 0x48, 0x80, 0x0f, 0xe1,\n\t0xb2, 0xed, 0x68, 0x7e, 0x40, 0x6c, 0x83, 0x78, 0x86, 0x36, 0x7b, 0xa8, 0xd2, 0x88, 0xae, 0x53,\n\t0xdf, 0x77, 0xc4, 0x49, 0x18, 0x5b, 0x79, 0xd5, 0x76, 0xfa, 0x21, 0x79, 0x76, 0x44, 0x34, 0x42,\n\t0xea, 0x5c, 0xfe, 0x66, 0xcf, 0xca, 0xdf, 0x57, 0xa0, 0x34, 0x21, 0xae, 0x46, 0xed, 0xc0, 0x3b,\n\t0xe5, 0x75, 0x77, 0x51, 0x2d, 0x4e, 0x88, 0xab, 0xb0, 0xf6, 0x0b, 0xb9, 0xfe, 0x3c, 0xc8, 0x15,\n\t0x8b, 0xa8, 0xf4, 0x20, 0x57, 0x2c, 0x21, 0xa8, 0xfd, 0x33, 0x0b, 0x95, 0x64, 0x1d, 0xce, 0xae,\n\t0x35, 0x3a, 0x3f, 0xb2, 0x24, 0xbe, 0xa9, 0xbd, 0xf1, 0x8d, 0x55, 0x7b, 0xbd, 0xc9, 0xce, 0xb2,\n\t0xbd, 0x82, 0xa8, 0x8e, 0x55, 0xa1, 0xc9, 0xea, 0x08, 0x96, 0x6c, 0x54, 0x54, 0x23, 0x45, 0x35,\n\t0x6c, 0xe1, 0x03, 0x28, 0x3c, 0xf4, 0xb9, 0xed, 0x02, 0xb7, 0xfd, 0xe6, 0x37, 0xdb, 0x7e, 0xd0,\n\t0xe7, 0xc6, 0x4b, 0x0f, 0xfa, 0x5a, 0xa7, 0xab, 0x1e, 0x35, 0x0e, 0xd5, 0x50, 0x1d, 0x5f, 0x82,\n\t0x9c, 0x45, 0xbe, 0x3c, 0x4d, 0x9f, 0x7a, 0x1c, 0x3a, 0xef, 0x24, 0x5c, 0x82, 0xdc, 0x13, 0x4a,\n\t0x1e, 0xa5, 0xcf, 0x1a, 0x0e, 0x7d, 0x8f, 0x8b, 0x61, 0x17, 0xf2, 0x3c, 0x5e, 0x18, 0x20, 0x8c,\n\t0x18, 0x7a, 0x09, 0x17, 0x21, 0xd7, 0xec, 0xaa, 0x6c, 0x41, 0x20, 0xa8, 0x08, 0x54, 0xeb, 0xb5,\n\t0x95, 0xa6, 0x82, 0x32, 0xb5, 0xdb, 0x50, 0x10, 0x41, 0x60, 0x8b, 0x25, 0x0e, 0x03, 0x7a, 0x29,\n\t0x6c, 0x86, 0x36, 0xa4, 0x48, 0x7a, 0x7c, 0xb4, 0xaf, 0xa8, 0x28, 0x93, 0x9e, 0xea, 0x1c, 0xca,\n\t0xd7, 0x7c, 0xa8, 0x24, 0x0b, 0xf1, 0x17, 0x73, 0xc9, 0xfe, 0x9b, 0x04, 0xe5, 0x44, 0x61, 0xcd,\n\t0x2a, 0x22, 0x62, 0x59, 0xce, 0x13, 0x8d, 0x58, 0x26, 0xf1, 0xc3, 0xd4, 0x00, 0x0e, 0x35, 0x18,\n\t0x72, 0xde, 0xa9, 0x7b, 0x41, 0x4b, 0x24, 0x8f, 0x0a, 0xb5, 0x3f, 0x4a, 0x80, 0xe6, 0x2b, 0xdb,\n\t0x39, 0x37, 0xa5, 0x1f, 0xd2, 0xcd, 0xda, 0x1f, 0x24, 0xa8, 0xa6, 0xcb, 0xd9, 0x39, 0xf7, 0xae,\n\t0xfc, 0xa0, 0xee, 0xfd, 0x23, 0x03, 0xab, 0xa9, 0x22, 0xf6, 0xbc, 0xde, 0x7d, 0x01, 0xeb, 0xa6,\n\t0x41, 0x27, 0xae, 0x13, 0x50, 0x5b, 0x3f, 0xd5, 0x2c, 0xfa, 0x98, 0x5a, 0x72, 0x8d, 0x6f, 0x1a,\n\t0xbb, 0xdf, 0x5c, 0x26, 0xd7, 0xdb, 0x33, 0xbd, 0x43, 0xa6, 0xb6, 0xb7, 0xd1, 0x6e, 0x29, 0x47,\n\t0xbd, 0xee, 0x40, 0xe9, 0x34, 0x3f, 0xd3, 0x8e, 0x3b, 0x3f, 0xed, 0x74, 0x3f, 0xe9, 0xa8, 0xc8,\n\t0x9c, 0xa3, 0x7d, 0x8f, 0xcb, 0xbe, 0x07, 0x68, 0xde, 0x29, 0x7c, 0x11, 0x96, 0xb9, 0x85, 0x5e,\n\t0xc2, 0x1b, 0xb0, 0xd6, 0xe9, 0x6a, 0xfd, 0x76, 0x4b, 0xd1, 0x94, 0xfb, 0xf7, 0x95, 0xe6, 0xa0,\n\t0x2f, 0x1e, 0x3e, 0x62, 0xf6, 0x20, 0xb5, 0xc0, 0x6b, 0xbf, 0xcf, 0xc2, 0xc6, 0x12, 0x4f, 0x70,\n\t0x23, 0xbc, 0xb2, 0x88, 0x5b, 0xd4, 0x8d, 0xf3, 0x78, 0x5f, 0x67, 0x35, 0x43, 0x8f, 0x78, 0x41,\n\t0x78, 0xc3, 0xb9, 0x06, 0x2c, 0x4a, 0x76, 0x60, 0x0e, 0x4d, 0xea, 0x85, 0xef, 0x44, 0xe2, 0x1e,\n\t0xb3, 0x36, 0xc3, 0xc5, 0x53, 0xd1, 0xbb, 0x80, 0x5d, 0xc7, 0x37, 0x03, 0xf3, 0x31, 0xd5, 0x4c,\n\t0x3b, 0x7a, 0x54, 0x62, 0xf7, 0x9a, 0x9c, 0x8a, 0x22, 0x49, 0xdb, 0x0e, 0x62, 0xb6, 0x4d, 0x47,\n\t0x64, 0x8e, 0xcd, 0x36, 0xf3, 0xac, 0x8a, 0x22, 0x49, 0xcc, 0xbe, 0x02, 0x15, 0xc3, 0x99, 0xb2,\n\t0x62, 0x4f, 0xf0, 0xd8, 0xd9, 0x21, 0xa9, 0x65, 0x81, 0xc5, 0x94, 0xb0, 0x8c, 0x9f, 0xbd, 0x66,\n\t0x55, 0xd4, 0xb2, 0xc0, 0x04, 0xe5, 0x2a, 0xac, 0x91, 0xd1, 0xc8, 0x63, 0xc6, 0x23, 0x43, 0xe2,\n\t0x62, 0x52, 0x8d, 0x61, 0x4e, 0xdc, 0x7a, 0x00, 0xc5, 0x28, 0x0e, 0xec, 0xa8, 0x66, 0x91, 0xd0,\n\t0x5c, 0x71, 0xdb, 0xce, 0xec, 0x94, 0xd4, 0xa2, 0x1d, 0x09, 0xaf, 0x40, 0xc5, 0xf4, 0xb5, 0xd9,\n\t0xe3, 0x7c, 0x66, 0x3b, 0xb3, 0x53, 0x54, 0xcb, 0xa6, 0x1f, 0x3f, 0x6c, 0xd6, 0xbe, 0xca, 0x40,\n\t0x35, 0xfd, 0x71, 0x01, 0xb7, 0xa0, 0x68, 0x39, 0x3a, 0xe1, 0xa9, 0x25, 0xbe, 0x6c, 0xed, 0x3c,\n\t0xe7, 0x7b, 0x44, 0xfd, 0x30, 0xe4, 0xab, 0xb1, 0xe6, 0xd6, 0xdf, 0x25, 0x28, 0x46, 0x30, 0xbe,\n\t0x00, 0x39, 0x97, 0x04, 0x63, 0x6e, 0x2e, 0xbf, 0x9f, 0x41, 0x92, 0xca, 0xdb, 0x0c, 0xf7, 0x5d,\n\t0x62, 0xf3, 0x14, 0x08, 0x71, 0xd6, 0x66, 0xf3, 0x6a, 0x51, 0x62, 0xf0, 0x5b, 0x8f, 0x33, 0x99,\n\t0x50, 0x3b, 0xf0, 0xa3, 0x79, 0x0d, 0xf1, 0x66, 0x08, 0xe3, 0x77, 0x60, 0x3d, 0xf0, 0x88, 0x69,\n\t0xa5, 0xb8, 0x39, 0xce, 0x45, 0x91, 0x20, 0x26, 0xef, 0xc1, 0xa5, 0xc8, 0xae, 0x41, 0x03, 0xa2,\n\t0x8f, 0xa9, 0x31, 0x53, 0x2a, 0xf0, 0xd7, 0x8d, 0x8b, 0x21, 0xa1, 0x15, 0xca, 0x23, 0xdd, 0xda,\n\t0xd7, 0x12, 0xac, 0x47, 0xf7, 0x34, 0x23, 0x0e, 0xd6, 0x11, 0x00, 0xb1, 0x6d, 0x27, 0x48, 0x86,\n\t0x6b, 0x31, 0x95, 0x17, 0xf4, 0xea, 0x8d, 0x58, 0x49, 0x4d, 0x18, 0xd8, 0x9a, 0x00, 0xcc, 0x24,\n\t0x67, 0x86, 0xed, 0x32, 0x94, 0xc3, 0x2f, 0x47, 0xfc, 0xf3, 0xa3, 0xb8, 0xd9, 0x83, 0x80, 0xd8,\n\t0x85, 0x0e, 0x6f, 0x42, 0xfe, 0x84, 0x8e, 0x4c, 0x3b, 0x7c, 0x0f, 0x16, 0x8d, 0xe8, 0xfd, 0x25,\n\t0x17, 0xbf, 0xbf, 0xec, 0xff, 0x46, 0x82, 0x0d, 0xdd, 0x99, 0xcc, 0xfb, 0xbb, 0x8f, 0xe6, 0x9e,\n\t0x17, 0xfc, 0x8f, 0xa5, 0xcf, 0x3f, 0x1a, 0x99, 0xc1, 0x78, 0x7a, 0x52, 0xd7, 0x9d, 0xc9, 0xee,\n\t0xc8, 0xb1, 0x88, 0x3d, 0x9a, 0x7d, 0x3f, 0xe5, 0x7f, 0xf4, 0x1b, 0x23, 0x6a, 0xdf, 0x18, 0x39,\n\t0x89, 0xaf, 0xa9, 0xf7, 0x66, 0x7f, 0xff, 0x27, 0x49, 0x7f, 0xca, 0x64, 0x0f, 0x7a, 0xfb, 0x7f,\n\t0xce, 0x6c, 0x1d, 0x88, 0xee, 0x7a, 0x51, 0x78, 0x54, 0x3a, 0xb4, 0xa8, 0xce, 0x86, 0xfc, 0xff,\n\t0x00, 0x00, 0x00, 0xff, 0xff, 0x3e, 0xe8, 0xef, 0xc4, 0x9b, 0x1d, 0x00, 0x00,\n}\n"
  },
  {
    "path": "vendor/github.com/golang/protobuf/ptypes/any/any.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// source: google/protobuf/any.proto\n\npackage any\n\nimport (\n\tfmt \"fmt\"\n\tproto \"github.com/golang/protobuf/proto\"\n\tmath \"math\"\n)\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar _ = proto.Marshal\nvar _ = fmt.Errorf\nvar _ = math.Inf\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package\n\n// `Any` contains an arbitrary serialized protocol buffer message along with a\n// URL that describes the type of the serialized message.\n//\n// Protobuf library provides support to pack/unpack Any values in the form\n// of utility functions or additional generated methods of the Any type.\n//\n// Example 1: Pack and unpack a message in C++.\n//\n//     Foo foo = ...;\n//     Any any;\n//     any.PackFrom(foo);\n//     ...\n//     if (any.UnpackTo(&foo)) {\n//       ...\n//     }\n//\n// Example 2: Pack and unpack a message in Java.\n//\n//     Foo foo = ...;\n//     Any any = Any.pack(foo);\n//     ...\n//     if (any.is(Foo.class)) {\n//       foo = any.unpack(Foo.class);\n//     }\n//\n//  Example 3: Pack and unpack a message in Python.\n//\n//     foo = Foo(...)\n//     any = Any()\n//     any.Pack(foo)\n//     ...\n//     if any.Is(Foo.DESCRIPTOR):\n//       any.Unpack(foo)\n//       ...\n//\n//  Example 4: Pack and unpack a message in Go\n//\n//      foo := &pb.Foo{...}\n//      any, err := ptypes.MarshalAny(foo)\n//      ...\n//      foo := &pb.Foo{}\n//      if err := ptypes.UnmarshalAny(any, foo); err != nil {\n//        ...\n//      }\n//\n// The pack methods provided by protobuf library will by default use\n// 'type.googleapis.com/full.type.name' as the type URL and the unpack\n// methods only use the fully qualified type name after the last '/'\n// in the type URL, for example \"foo.bar.com/x/y.z\" will yield type\n// name \"y.z\".\n//\n//\n// JSON\n// ====\n// The JSON representation of an `Any` value uses the regular\n// representation of the deserialized, embedded message, with an\n// additional field `@type` which contains the type URL. Example:\n//\n//     package google.profile;\n//     message Person {\n//       string first_name = 1;\n//       string last_name = 2;\n//     }\n//\n//     {\n//       \"@type\": \"type.googleapis.com/google.profile.Person\",\n//       \"firstName\": <string>,\n//       \"lastName\": <string>\n//     }\n//\n// If the embedded message type is well-known and has a custom JSON\n// representation, that representation will be embedded adding a field\n// `value` which holds the custom JSON in addition to the `@type`\n// field. Example (for message [google.protobuf.Duration][]):\n//\n//     {\n//       \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n//       \"value\": \"1.212s\"\n//     }\n//\ntype Any struct {\n\t// A URL/resource name that uniquely identifies the type of the serialized\n\t// protocol buffer message. The last segment of the URL's path must represent\n\t// the fully qualified name of the type (as in\n\t// `path/google.protobuf.Duration`). The name should be in a canonical form\n\t// (e.g., leading \".\" is not accepted).\n\t//\n\t// In practice, teams usually precompile into the binary all types that they\n\t// expect it to use in the context of Any. However, for URLs which use the\n\t// scheme `http`, `https`, or no scheme, one can optionally set up a type\n\t// server that maps type URLs to message definitions as follows:\n\t//\n\t// * If no scheme is provided, `https` is assumed.\n\t// * An HTTP GET on the URL must yield a [google.protobuf.Type][]\n\t//   value in binary format, or produce an error.\n\t// * Applications are allowed to cache lookup results based on the\n\t//   URL, or have them precompiled into a binary to avoid any\n\t//   lookup. Therefore, binary compatibility needs to be preserved\n\t//   on changes to types. (Use versioned type names to manage\n\t//   breaking changes.)\n\t//\n\t// Note: this functionality is not currently available in the official\n\t// protobuf release, and it is not used for type URLs beginning with\n\t// type.googleapis.com.\n\t//\n\t// Schemes other than `http`, `https` (or the empty scheme) might be\n\t// used with implementation specific semantics.\n\t//\n\tTypeUrl string `protobuf:\"bytes,1,opt,name=type_url,json=typeUrl,proto3\" json:\"type_url,omitempty\"`\n\t// Must be a valid serialized protocol buffer of the above specified type.\n\tValue                []byte   `protobuf:\"bytes,2,opt,name=value,proto3\" json:\"value,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *Any) Reset()         { *m = Any{} }\nfunc (m *Any) String() string { return proto.CompactTextString(m) }\nfunc (*Any) ProtoMessage()    {}\nfunc (*Any) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_b53526c13ae22eb4, []int{0}\n}\n\nfunc (*Any) XXX_WellKnownType() string { return \"Any\" }\n\nfunc (m *Any) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_Any.Unmarshal(m, b)\n}\nfunc (m *Any) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_Any.Marshal(b, m, deterministic)\n}\nfunc (m *Any) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Any.Merge(m, src)\n}\nfunc (m *Any) XXX_Size() int {\n\treturn xxx_messageInfo_Any.Size(m)\n}\nfunc (m *Any) XXX_DiscardUnknown() {\n\txxx_messageInfo_Any.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Any proto.InternalMessageInfo\n\nfunc (m *Any) GetTypeUrl() string {\n\tif m != nil {\n\t\treturn m.TypeUrl\n\t}\n\treturn \"\"\n}\n\nfunc (m *Any) GetValue() []byte {\n\tif m != nil {\n\t\treturn m.Value\n\t}\n\treturn nil\n}\n\nfunc init() {\n\tproto.RegisterType((*Any)(nil), \"google.protobuf.Any\")\n}\n\nfunc init() { proto.RegisterFile(\"google/protobuf/any.proto\", fileDescriptor_b53526c13ae22eb4) }\n\nvar fileDescriptor_b53526c13ae22eb4 = []byte{\n\t// 185 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4c, 0xcf, 0xcf, 0x4f,\n\t0xcf, 0x49, 0xd5, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, 0x4f, 0xcc, 0xab, 0xd4,\n\t0x03, 0x73, 0x84, 0xf8, 0x21, 0x52, 0x7a, 0x30, 0x29, 0x25, 0x33, 0x2e, 0x66, 0xc7, 0xbc, 0x4a,\n\t0x21, 0x49, 0x2e, 0x8e, 0x92, 0xca, 0x82, 0xd4, 0xf8, 0xd2, 0xa2, 0x1c, 0x09, 0x46, 0x05, 0x46,\n\t0x0d, 0xce, 0x20, 0x76, 0x10, 0x3f, 0xb4, 0x28, 0x47, 0x48, 0x84, 0x8b, 0xb5, 0x2c, 0x31, 0xa7,\n\t0x34, 0x55, 0x82, 0x49, 0x81, 0x51, 0x83, 0x27, 0x08, 0xc2, 0x71, 0xca, 0xe7, 0x12, 0x4e, 0xce,\n\t0xcf, 0xd5, 0x43, 0x33, 0xce, 0x89, 0xc3, 0x31, 0xaf, 0x32, 0x00, 0xc4, 0x09, 0x60, 0x8c, 0x52,\n\t0x4d, 0xcf, 0x2c, 0xc9, 0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0x4f, 0xcf, 0xcf, 0x49, 0xcc,\n\t0x4b, 0x47, 0xb8, 0xa8, 0x00, 0x64, 0x7a, 0x31, 0xc8, 0x61, 0x8b, 0x98, 0x98, 0xdd, 0x03, 0x9c,\n\t0x56, 0x31, 0xc9, 0xb9, 0x43, 0x8c, 0x0a, 0x80, 0x2a, 0xd1, 0x0b, 0x4f, 0xcd, 0xc9, 0xf1, 0xce,\n\t0xcb, 0x2f, 0xcf, 0x0b, 0x01, 0x29, 0x4d, 0x62, 0x03, 0xeb, 0x35, 0x06, 0x04, 0x00, 0x00, 0xff,\n\t0xff, 0x13, 0xf8, 0xe8, 0x42, 0xdd, 0x00, 0x00, 0x00,\n}\n"
  },
  {
    "path": "vendor/github.com/golang/protobuf/ptypes/any.go",
    "content": "// Go support for Protocol Buffers - Google's data interchange format\n//\n// Copyright 2016 The Go Authors.  All rights reserved.\n// https://github.com/golang/protobuf\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\npackage ptypes\n\n// This file implements functions to marshal proto.Message to/from\n// google.protobuf.Any message.\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\t\"strings\"\n\n\t\"github.com/golang/protobuf/proto\"\n\t\"github.com/golang/protobuf/ptypes/any\"\n)\n\nconst googleApis = \"type.googleapis.com/\"\n\n// AnyMessageName returns the name of the message contained in a google.protobuf.Any message.\n//\n// Note that regular type assertions should be done using the Is\n// function. AnyMessageName is provided for less common use cases like filtering a\n// sequence of Any messages based on a set of allowed message type names.\nfunc AnyMessageName(any *any.Any) (string, error) {\n\tif any == nil {\n\t\treturn \"\", fmt.Errorf(\"message is nil\")\n\t}\n\tslash := strings.LastIndex(any.TypeUrl, \"/\")\n\tif slash < 0 {\n\t\treturn \"\", fmt.Errorf(\"message type url %q is invalid\", any.TypeUrl)\n\t}\n\treturn any.TypeUrl[slash+1:], nil\n}\n\n// MarshalAny takes the protocol buffer and encodes it into google.protobuf.Any.\nfunc MarshalAny(pb proto.Message) (*any.Any, error) {\n\tvalue, err := proto.Marshal(pb)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &any.Any{TypeUrl: googleApis + proto.MessageName(pb), Value: value}, nil\n}\n\n// DynamicAny is a value that can be passed to UnmarshalAny to automatically\n// allocate a proto.Message for the type specified in a google.protobuf.Any\n// message. The allocated message is stored in the embedded proto.Message.\n//\n// Example:\n//\n//   var x ptypes.DynamicAny\n//   if err := ptypes.UnmarshalAny(a, &x); err != nil { ... }\n//   fmt.Printf(\"unmarshaled message: %v\", x.Message)\ntype DynamicAny struct {\n\tproto.Message\n}\n\n// Empty returns a new proto.Message of the type specified in a\n// google.protobuf.Any message. It returns an error if corresponding message\n// type isn't linked in.\nfunc Empty(any *any.Any) (proto.Message, error) {\n\taname, err := AnyMessageName(any)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tt := proto.MessageType(aname)\n\tif t == nil {\n\t\treturn nil, fmt.Errorf(\"any: message type %q isn't linked in\", aname)\n\t}\n\treturn reflect.New(t.Elem()).Interface().(proto.Message), nil\n}\n\n// UnmarshalAny parses the protocol buffer representation in a google.protobuf.Any\n// message and places the decoded result in pb. It returns an error if type of\n// contents of Any message does not match type of pb message.\n//\n// pb can be a proto.Message, or a *DynamicAny.\nfunc UnmarshalAny(any *any.Any, pb proto.Message) error {\n\tif d, ok := pb.(*DynamicAny); ok {\n\t\tif d.Message == nil {\n\t\t\tvar err error\n\t\t\td.Message, err = Empty(any)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t\treturn UnmarshalAny(any, d.Message)\n\t}\n\n\taname, err := AnyMessageName(any)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tmname := proto.MessageName(pb)\n\tif aname != mname {\n\t\treturn fmt.Errorf(\"mismatched message type: got %q want %q\", aname, mname)\n\t}\n\treturn proto.Unmarshal(any.Value, pb)\n}\n\n// Is returns true if any value contains a given message type.\nfunc Is(any *any.Any, pb proto.Message) bool {\n\t// The following is equivalent to AnyMessageName(any) == proto.MessageName(pb),\n\t// but it avoids scanning TypeUrl for the slash.\n\tif any == nil {\n\t\treturn false\n\t}\n\tname := proto.MessageName(pb)\n\tprefix := len(any.TypeUrl) - len(name)\n\treturn prefix >= 1 && any.TypeUrl[prefix-1] == '/' && any.TypeUrl[prefix:] == name\n}\n"
  },
  {
    "path": "vendor/github.com/golang/protobuf/ptypes/doc.go",
    "content": "// Go support for Protocol Buffers - Google's data interchange format\n//\n// Copyright 2016 The Go Authors.  All rights reserved.\n// https://github.com/golang/protobuf\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n/*\nPackage ptypes contains code for interacting with well-known types.\n*/\npackage ptypes\n"
  },
  {
    "path": "vendor/github.com/golang/protobuf/ptypes/duration/duration.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// source: google/protobuf/duration.proto\n\npackage duration\n\nimport (\n\tfmt \"fmt\"\n\tproto \"github.com/golang/protobuf/proto\"\n\tmath \"math\"\n)\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar _ = proto.Marshal\nvar _ = fmt.Errorf\nvar _ = math.Inf\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package\n\n// A Duration represents a signed, fixed-length span of time represented\n// as a count of seconds and fractions of seconds at nanosecond\n// resolution. It is independent of any calendar and concepts like \"day\"\n// or \"month\". It is related to Timestamp in that the difference between\n// two Timestamp values is a Duration and it can be added or subtracted\n// from a Timestamp. Range is approximately +-10,000 years.\n//\n// # Examples\n//\n// Example 1: Compute Duration from two Timestamps in pseudo code.\n//\n//     Timestamp start = ...;\n//     Timestamp end = ...;\n//     Duration duration = ...;\n//\n//     duration.seconds = end.seconds - start.seconds;\n//     duration.nanos = end.nanos - start.nanos;\n//\n//     if (duration.seconds < 0 && duration.nanos > 0) {\n//       duration.seconds += 1;\n//       duration.nanos -= 1000000000;\n//     } else if (durations.seconds > 0 && duration.nanos < 0) {\n//       duration.seconds -= 1;\n//       duration.nanos += 1000000000;\n//     }\n//\n// Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.\n//\n//     Timestamp start = ...;\n//     Duration duration = ...;\n//     Timestamp end = ...;\n//\n//     end.seconds = start.seconds + duration.seconds;\n//     end.nanos = start.nanos + duration.nanos;\n//\n//     if (end.nanos < 0) {\n//       end.seconds -= 1;\n//       end.nanos += 1000000000;\n//     } else if (end.nanos >= 1000000000) {\n//       end.seconds += 1;\n//       end.nanos -= 1000000000;\n//     }\n//\n// Example 3: Compute Duration from datetime.timedelta in Python.\n//\n//     td = datetime.timedelta(days=3, minutes=10)\n//     duration = Duration()\n//     duration.FromTimedelta(td)\n//\n// # JSON Mapping\n//\n// In JSON format, the Duration type is encoded as a string rather than an\n// object, where the string ends in the suffix \"s\" (indicating seconds) and\n// is preceded by the number of seconds, with nanoseconds expressed as\n// fractional seconds. For example, 3 seconds with 0 nanoseconds should be\n// encoded in JSON format as \"3s\", while 3 seconds and 1 nanosecond should\n// be expressed in JSON format as \"3.000000001s\", and 3 seconds and 1\n// microsecond should be expressed in JSON format as \"3.000001s\".\n//\n//\ntype Duration struct {\n\t// Signed seconds of the span of time. Must be from -315,576,000,000\n\t// to +315,576,000,000 inclusive. Note: these bounds are computed from:\n\t// 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years\n\tSeconds int64 `protobuf:\"varint,1,opt,name=seconds,proto3\" json:\"seconds,omitempty\"`\n\t// Signed fractions of a second at nanosecond resolution of the span\n\t// of time. Durations less than one second are represented with a 0\n\t// `seconds` field and a positive or negative `nanos` field. For durations\n\t// of one second or more, a non-zero value for the `nanos` field must be\n\t// of the same sign as the `seconds` field. Must be from -999,999,999\n\t// to +999,999,999 inclusive.\n\tNanos                int32    `protobuf:\"varint,2,opt,name=nanos,proto3\" json:\"nanos,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *Duration) Reset()         { *m = Duration{} }\nfunc (m *Duration) String() string { return proto.CompactTextString(m) }\nfunc (*Duration) ProtoMessage()    {}\nfunc (*Duration) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_23597b2ebd7ac6c5, []int{0}\n}\n\nfunc (*Duration) XXX_WellKnownType() string { return \"Duration\" }\n\nfunc (m *Duration) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_Duration.Unmarshal(m, b)\n}\nfunc (m *Duration) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_Duration.Marshal(b, m, deterministic)\n}\nfunc (m *Duration) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Duration.Merge(m, src)\n}\nfunc (m *Duration) XXX_Size() int {\n\treturn xxx_messageInfo_Duration.Size(m)\n}\nfunc (m *Duration) XXX_DiscardUnknown() {\n\txxx_messageInfo_Duration.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Duration proto.InternalMessageInfo\n\nfunc (m *Duration) GetSeconds() int64 {\n\tif m != nil {\n\t\treturn m.Seconds\n\t}\n\treturn 0\n}\n\nfunc (m *Duration) GetNanos() int32 {\n\tif m != nil {\n\t\treturn m.Nanos\n\t}\n\treturn 0\n}\n\nfunc init() {\n\tproto.RegisterType((*Duration)(nil), \"google.protobuf.Duration\")\n}\n\nfunc init() { proto.RegisterFile(\"google/protobuf/duration.proto\", fileDescriptor_23597b2ebd7ac6c5) }\n\nvar fileDescriptor_23597b2ebd7ac6c5 = []byte{\n\t// 190 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4b, 0xcf, 0xcf, 0x4f,\n\t0xcf, 0x49, 0xd5, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, 0x4f, 0x29, 0x2d, 0x4a,\n\t0x2c, 0xc9, 0xcc, 0xcf, 0xd3, 0x03, 0x8b, 0x08, 0xf1, 0x43, 0xe4, 0xf5, 0x60, 0xf2, 0x4a, 0x56,\n\t0x5c, 0x1c, 0x2e, 0x50, 0x25, 0x42, 0x12, 0x5c, 0xec, 0xc5, 0xa9, 0xc9, 0xf9, 0x79, 0x29, 0xc5,\n\t0x12, 0x8c, 0x0a, 0x8c, 0x1a, 0xcc, 0x41, 0x30, 0xae, 0x90, 0x08, 0x17, 0x6b, 0x5e, 0x62, 0x5e,\n\t0x7e, 0xb1, 0x04, 0x93, 0x02, 0xa3, 0x06, 0x6b, 0x10, 0x84, 0xe3, 0x54, 0xc3, 0x25, 0x9c, 0x9c,\n\t0x9f, 0xab, 0x87, 0x66, 0xa4, 0x13, 0x2f, 0xcc, 0xc0, 0x00, 0x90, 0x48, 0x00, 0x63, 0x94, 0x56,\n\t0x7a, 0x66, 0x49, 0x46, 0x69, 0x92, 0x5e, 0x72, 0x7e, 0xae, 0x7e, 0x7a, 0x7e, 0x4e, 0x62, 0x5e,\n\t0x3a, 0xc2, 0x7d, 0x05, 0x25, 0x95, 0x05, 0xa9, 0xc5, 0x70, 0x67, 0xfe, 0x60, 0x64, 0x5c, 0xc4,\n\t0xc4, 0xec, 0x1e, 0xe0, 0xb4, 0x8a, 0x49, 0xce, 0x1d, 0x62, 0x6e, 0x00, 0x54, 0xa9, 0x5e, 0x78,\n\t0x6a, 0x4e, 0x8e, 0x77, 0x5e, 0x7e, 0x79, 0x5e, 0x08, 0x48, 0x4b, 0x12, 0x1b, 0xd8, 0x0c, 0x63,\n\t0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0xdc, 0x84, 0x30, 0xff, 0xf3, 0x00, 0x00, 0x00,\n}\n"
  },
  {
    "path": "vendor/github.com/golang/protobuf/ptypes/duration.go",
    "content": "// Go support for Protocol Buffers - Google's data interchange format\n//\n// Copyright 2016 The Go Authors.  All rights reserved.\n// https://github.com/golang/protobuf\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\npackage ptypes\n\n// This file implements conversions between google.protobuf.Duration\n// and time.Duration.\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"time\"\n\n\tdurpb \"github.com/golang/protobuf/ptypes/duration\"\n)\n\nconst (\n\t// Range of a durpb.Duration in seconds, as specified in\n\t// google/protobuf/duration.proto. This is about 10,000 years in seconds.\n\tmaxSeconds = int64(10000 * 365.25 * 24 * 60 * 60)\n\tminSeconds = -maxSeconds\n)\n\n// validateDuration determines whether the durpb.Duration is valid according to the\n// definition in google/protobuf/duration.proto. A valid durpb.Duration\n// may still be too large to fit into a time.Duration (the range of durpb.Duration\n// is about 10,000 years, and the range of time.Duration is about 290).\nfunc validateDuration(d *durpb.Duration) error {\n\tif d == nil {\n\t\treturn errors.New(\"duration: nil Duration\")\n\t}\n\tif d.Seconds < minSeconds || d.Seconds > maxSeconds {\n\t\treturn fmt.Errorf(\"duration: %v: seconds out of range\", d)\n\t}\n\tif d.Nanos <= -1e9 || d.Nanos >= 1e9 {\n\t\treturn fmt.Errorf(\"duration: %v: nanos out of range\", d)\n\t}\n\t// Seconds and Nanos must have the same sign, unless d.Nanos is zero.\n\tif (d.Seconds < 0 && d.Nanos > 0) || (d.Seconds > 0 && d.Nanos < 0) {\n\t\treturn fmt.Errorf(\"duration: %v: seconds and nanos have different signs\", d)\n\t}\n\treturn nil\n}\n\n// Duration converts a durpb.Duration to a time.Duration. Duration\n// returns an error if the durpb.Duration is invalid or is too large to be\n// represented in a time.Duration.\nfunc Duration(p *durpb.Duration) (time.Duration, error) {\n\tif err := validateDuration(p); err != nil {\n\t\treturn 0, err\n\t}\n\td := time.Duration(p.Seconds) * time.Second\n\tif int64(d/time.Second) != p.Seconds {\n\t\treturn 0, fmt.Errorf(\"duration: %v is out of range for time.Duration\", p)\n\t}\n\tif p.Nanos != 0 {\n\t\td += time.Duration(p.Nanos) * time.Nanosecond\n\t\tif (d < 0) != (p.Nanos < 0) {\n\t\t\treturn 0, fmt.Errorf(\"duration: %v is out of range for time.Duration\", p)\n\t\t}\n\t}\n\treturn d, nil\n}\n\n// DurationProto converts a time.Duration to a durpb.Duration.\nfunc DurationProto(d time.Duration) *durpb.Duration {\n\tnanos := d.Nanoseconds()\n\tsecs := nanos / 1e9\n\tnanos -= secs * 1e9\n\treturn &durpb.Duration{\n\t\tSeconds: secs,\n\t\tNanos:   int32(nanos),\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/golang/protobuf/ptypes/timestamp/timestamp.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// source: google/protobuf/timestamp.proto\n\npackage timestamp\n\nimport (\n\tfmt \"fmt\"\n\tproto \"github.com/golang/protobuf/proto\"\n\tmath \"math\"\n)\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar _ = proto.Marshal\nvar _ = fmt.Errorf\nvar _ = math.Inf\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package\n\n// A Timestamp represents a point in time independent of any time zone\n// or calendar, represented as seconds and fractions of seconds at\n// nanosecond resolution in UTC Epoch time. It is encoded using the\n// Proleptic Gregorian Calendar which extends the Gregorian calendar\n// backwards to year one. It is encoded assuming all minutes are 60\n// seconds long, i.e. leap seconds are \"smeared\" so that no leap second\n// table is needed for interpretation. Range is from\n// 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z.\n// By restricting to that range, we ensure that we can convert to\n// and from  RFC 3339 date strings.\n// See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt).\n//\n// # Examples\n//\n// Example 1: Compute Timestamp from POSIX `time()`.\n//\n//     Timestamp timestamp;\n//     timestamp.set_seconds(time(NULL));\n//     timestamp.set_nanos(0);\n//\n// Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n//\n//     struct timeval tv;\n//     gettimeofday(&tv, NULL);\n//\n//     Timestamp timestamp;\n//     timestamp.set_seconds(tv.tv_sec);\n//     timestamp.set_nanos(tv.tv_usec * 1000);\n//\n// Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n//\n//     FILETIME ft;\n//     GetSystemTimeAsFileTime(&ft);\n//     UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n//\n//     // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n//     // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n//     Timestamp timestamp;\n//     timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n//     timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n//\n// Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n//\n//     long millis = System.currentTimeMillis();\n//\n//     Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n//         .setNanos((int) ((millis % 1000) * 1000000)).build();\n//\n//\n// Example 5: Compute Timestamp from current time in Python.\n//\n//     timestamp = Timestamp()\n//     timestamp.GetCurrentTime()\n//\n// # JSON Mapping\n//\n// In JSON format, the Timestamp type is encoded as a string in the\n// [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n// format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n// where {year} is always expressed using four digits while {month}, {day},\n// {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n// seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n// are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n// is required. A proto3 JSON serializer should always use UTC (as indicated by\n// \"Z\") when printing the Timestamp type and a proto3 JSON parser should be\n// able to accept both UTC and other timezones (as indicated by an offset).\n//\n// For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n// 01:30 UTC on January 15, 2017.\n//\n// In JavaScript, one can convert a Date object to this format using the\n// standard [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString]\n// method. In Python, a standard `datetime.datetime` object can be converted\n// to this format using [`strftime`](https://docs.python.org/2/library/time.html#time.strftime)\n// with the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one\n// can use the Joda Time's [`ISODateTimeFormat.dateTime()`](\n// http://www.joda.org/joda-time/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime--\n// ) to obtain a formatter capable of generating timestamps in this format.\n//\n//\ntype Timestamp struct {\n\t// Represents seconds of UTC time since Unix epoch\n\t// 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to\n\t// 9999-12-31T23:59:59Z inclusive.\n\tSeconds int64 `protobuf:\"varint,1,opt,name=seconds,proto3\" json:\"seconds,omitempty\"`\n\t// Non-negative fractions of a second at nanosecond resolution. Negative\n\t// second values with fractions must still have non-negative nanos values\n\t// that count forward in time. Must be from 0 to 999,999,999\n\t// inclusive.\n\tNanos                int32    `protobuf:\"varint,2,opt,name=nanos,proto3\" json:\"nanos,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *Timestamp) Reset()         { *m = Timestamp{} }\nfunc (m *Timestamp) String() string { return proto.CompactTextString(m) }\nfunc (*Timestamp) ProtoMessage()    {}\nfunc (*Timestamp) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_292007bbfe81227e, []int{0}\n}\n\nfunc (*Timestamp) XXX_WellKnownType() string { return \"Timestamp\" }\n\nfunc (m *Timestamp) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_Timestamp.Unmarshal(m, b)\n}\nfunc (m *Timestamp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_Timestamp.Marshal(b, m, deterministic)\n}\nfunc (m *Timestamp) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Timestamp.Merge(m, src)\n}\nfunc (m *Timestamp) XXX_Size() int {\n\treturn xxx_messageInfo_Timestamp.Size(m)\n}\nfunc (m *Timestamp) XXX_DiscardUnknown() {\n\txxx_messageInfo_Timestamp.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Timestamp proto.InternalMessageInfo\n\nfunc (m *Timestamp) GetSeconds() int64 {\n\tif m != nil {\n\t\treturn m.Seconds\n\t}\n\treturn 0\n}\n\nfunc (m *Timestamp) GetNanos() int32 {\n\tif m != nil {\n\t\treturn m.Nanos\n\t}\n\treturn 0\n}\n\nfunc init() {\n\tproto.RegisterType((*Timestamp)(nil), \"google.protobuf.Timestamp\")\n}\n\nfunc init() { proto.RegisterFile(\"google/protobuf/timestamp.proto\", fileDescriptor_292007bbfe81227e) }\n\nvar fileDescriptor_292007bbfe81227e = []byte{\n\t// 191 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4f, 0xcf, 0xcf, 0x4f,\n\t0xcf, 0x49, 0xd5, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, 0x2f, 0xc9, 0xcc, 0x4d,\n\t0x2d, 0x2e, 0x49, 0xcc, 0x2d, 0xd0, 0x03, 0x0b, 0x09, 0xf1, 0x43, 0x14, 0xe8, 0xc1, 0x14, 0x28,\n\t0x59, 0x73, 0x71, 0x86, 0xc0, 0xd4, 0x08, 0x49, 0x70, 0xb1, 0x17, 0xa7, 0x26, 0xe7, 0xe7, 0xa5,\n\t0x14, 0x4b, 0x30, 0x2a, 0x30, 0x6a, 0x30, 0x07, 0xc1, 0xb8, 0x42, 0x22, 0x5c, 0xac, 0x79, 0x89,\n\t0x79, 0xf9, 0xc5, 0x12, 0x4c, 0x0a, 0x8c, 0x1a, 0xac, 0x41, 0x10, 0x8e, 0x53, 0x1d, 0x97, 0x70,\n\t0x72, 0x7e, 0xae, 0x1e, 0x9a, 0x99, 0x4e, 0x7c, 0x70, 0x13, 0x03, 0x40, 0x42, 0x01, 0x8c, 0x51,\n\t0xda, 0xe9, 0x99, 0x25, 0x19, 0xa5, 0x49, 0x7a, 0xc9, 0xf9, 0xb9, 0xfa, 0xe9, 0xf9, 0x39, 0x89,\n\t0x79, 0xe9, 0x08, 0x27, 0x16, 0x94, 0x54, 0x16, 0xa4, 0x16, 0x23, 0x5c, 0xfa, 0x83, 0x91, 0x71,\n\t0x11, 0x13, 0xb3, 0x7b, 0x80, 0xd3, 0x2a, 0x26, 0x39, 0x77, 0x88, 0xc9, 0x01, 0x50, 0xb5, 0x7a,\n\t0xe1, 0xa9, 0x39, 0x39, 0xde, 0x79, 0xf9, 0xe5, 0x79, 0x21, 0x20, 0x3d, 0x49, 0x6c, 0x60, 0x43,\n\t0x8c, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xbc, 0x77, 0x4a, 0x07, 0xf7, 0x00, 0x00, 0x00,\n}\n"
  },
  {
    "path": "vendor/github.com/golang/protobuf/ptypes/timestamp.go",
    "content": "// Go support for Protocol Buffers - Google's data interchange format\n//\n// Copyright 2016 The Go Authors.  All rights reserved.\n// https://github.com/golang/protobuf\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\npackage ptypes\n\n// This file implements operations on google.protobuf.Timestamp.\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"time\"\n\n\ttspb \"github.com/golang/protobuf/ptypes/timestamp\"\n)\n\nconst (\n\t// Seconds field of the earliest valid Timestamp.\n\t// This is time.Date(1, 1, 1, 0, 0, 0, 0, time.UTC).Unix().\n\tminValidSeconds = -62135596800\n\t// Seconds field just after the latest valid Timestamp.\n\t// This is time.Date(10000, 1, 1, 0, 0, 0, 0, time.UTC).Unix().\n\tmaxValidSeconds = 253402300800\n)\n\n// validateTimestamp determines whether a Timestamp is valid.\n// A valid timestamp represents a time in the range\n// [0001-01-01, 10000-01-01) and has a Nanos field\n// in the range [0, 1e9).\n//\n// If the Timestamp is valid, validateTimestamp returns nil.\n// Otherwise, it returns an error that describes\n// the problem.\n//\n// Every valid Timestamp can be represented by a time.Time, but the converse is not true.\nfunc validateTimestamp(ts *tspb.Timestamp) error {\n\tif ts == nil {\n\t\treturn errors.New(\"timestamp: nil Timestamp\")\n\t}\n\tif ts.Seconds < minValidSeconds {\n\t\treturn fmt.Errorf(\"timestamp: %v before 0001-01-01\", ts)\n\t}\n\tif ts.Seconds >= maxValidSeconds {\n\t\treturn fmt.Errorf(\"timestamp: %v after 10000-01-01\", ts)\n\t}\n\tif ts.Nanos < 0 || ts.Nanos >= 1e9 {\n\t\treturn fmt.Errorf(\"timestamp: %v: nanos not in range [0, 1e9)\", ts)\n\t}\n\treturn nil\n}\n\n// Timestamp converts a google.protobuf.Timestamp proto to a time.Time.\n// It returns an error if the argument is invalid.\n//\n// Unlike most Go functions, if Timestamp returns an error, the first return value\n// is not the zero time.Time. Instead, it is the value obtained from the\n// time.Unix function when passed the contents of the Timestamp, in the UTC\n// locale. This may or may not be a meaningful time; many invalid Timestamps\n// do map to valid time.Times.\n//\n// A nil Timestamp returns an error. The first return value in that case is\n// undefined.\nfunc Timestamp(ts *tspb.Timestamp) (time.Time, error) {\n\t// Don't return the zero value on error, because corresponds to a valid\n\t// timestamp. Instead return whatever time.Unix gives us.\n\tvar t time.Time\n\tif ts == nil {\n\t\tt = time.Unix(0, 0).UTC() // treat nil like the empty Timestamp\n\t} else {\n\t\tt = time.Unix(ts.Seconds, int64(ts.Nanos)).UTC()\n\t}\n\treturn t, validateTimestamp(ts)\n}\n\n// TimestampNow returns a google.protobuf.Timestamp for the current time.\nfunc TimestampNow() *tspb.Timestamp {\n\tts, err := TimestampProto(time.Now())\n\tif err != nil {\n\t\tpanic(\"ptypes: time.Now() out of Timestamp range\")\n\t}\n\treturn ts\n}\n\n// TimestampProto converts the time.Time to a google.protobuf.Timestamp proto.\n// It returns an error if the resulting Timestamp is invalid.\nfunc TimestampProto(t time.Time) (*tspb.Timestamp, error) {\n\tts := &tspb.Timestamp{\n\t\tSeconds: t.Unix(),\n\t\tNanos:   int32(t.Nanosecond()),\n\t}\n\tif err := validateTimestamp(ts); err != nil {\n\t\treturn nil, err\n\t}\n\treturn ts, nil\n}\n\n// TimestampString returns the RFC 3339 string for valid Timestamps. For invalid\n// Timestamps, it returns an error message in parentheses.\nfunc TimestampString(ts *tspb.Timestamp) string {\n\tt, err := Timestamp(ts)\n\tif err != nil {\n\t\treturn fmt.Sprintf(\"(%v)\", err)\n\t}\n\treturn t.Format(time.RFC3339Nano)\n}\n"
  },
  {
    "path": "vendor/github.com/google/go-cmp/LICENSE",
    "content": "Copyright (c) 2017 The Go Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "vendor/github.com/google/go-cmp/cmp/compare.go",
    "content": "// Copyright 2017, The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE.md file.\n\n// Package cmp determines equality of values.\n//\n// This package is intended to be a more powerful and safer alternative to\n// reflect.DeepEqual for comparing whether two values are semantically equal.\n//\n// The primary features of cmp are:\n//\n// • When the default behavior of equality does not suit the needs of the test,\n// custom equality functions can override the equality operation.\n// For example, an equality function may report floats as equal so long as they\n// are within some tolerance of each other.\n//\n// • Types that have an Equal method may use that method to determine equality.\n// This allows package authors to determine the equality operation for the types\n// that they define.\n//\n// • If no custom equality functions are used and no Equal method is defined,\n// equality is determined by recursively comparing the primitive kinds on both\n// values, much like reflect.DeepEqual. Unlike reflect.DeepEqual, unexported\n// fields are not compared by default; they result in panics unless suppressed\n// by using an Ignore option (see cmpopts.IgnoreUnexported) or explicitly compared\n// using the AllowUnexported option.\npackage cmp\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\t\"strings\"\n\n\t\"github.com/google/go-cmp/cmp/internal/diff\"\n\t\"github.com/google/go-cmp/cmp/internal/flags\"\n\t\"github.com/google/go-cmp/cmp/internal/function\"\n\t\"github.com/google/go-cmp/cmp/internal/value\"\n)\n\n// Equal reports whether x and y are equal by recursively applying the\n// following rules in the given order to x and y and all of their sub-values:\n//\n// • Let S be the set of all Ignore, Transformer, and Comparer options that\n// remain after applying all path filters, value filters, and type filters.\n// If at least one Ignore exists in S, then the comparison is ignored.\n// If the number of Transformer and Comparer options in S is greater than one,\n// then Equal panics because it is ambiguous which option to use.\n// If S contains a single Transformer, then use that to transform the current\n// values and recursively call Equal on the output values.\n// If S contains a single Comparer, then use that to compare the current values.\n// Otherwise, evaluation proceeds to the next rule.\n//\n// • If the values have an Equal method of the form \"(T) Equal(T) bool\" or\n// \"(T) Equal(I) bool\" where T is assignable to I, then use the result of\n// x.Equal(y) even if x or y is nil. Otherwise, no such method exists and\n// evaluation proceeds to the next rule.\n//\n// • Lastly, try to compare x and y based on their basic kinds.\n// Simple kinds like booleans, integers, floats, complex numbers, strings, and\n// channels are compared using the equivalent of the == operator in Go.\n// Functions are only equal if they are both nil, otherwise they are unequal.\n//\n// Structs are equal if recursively calling Equal on all fields report equal.\n// If a struct contains unexported fields, Equal panics unless an Ignore option\n// (e.g., cmpopts.IgnoreUnexported) ignores that field or the AllowUnexported\n// option explicitly permits comparing the unexported field.\n//\n// Slices are equal if they are both nil or both non-nil, where recursively\n// calling Equal on all non-ignored slice or array elements report equal.\n// Empty non-nil slices and nil slices are not equal; to equate empty slices,\n// consider using cmpopts.EquateEmpty.\n//\n// Maps are equal if they are both nil or both non-nil, where recursively\n// calling Equal on all non-ignored map entries report equal.\n// Map keys are equal according to the == operator.\n// To use custom comparisons for map keys, consider using cmpopts.SortMaps.\n// Empty non-nil maps and nil maps are not equal; to equate empty maps,\n// consider using cmpopts.EquateEmpty.\n//\n// Pointers and interfaces are equal if they are both nil or both non-nil,\n// where they have the same underlying concrete type and recursively\n// calling Equal on the underlying values reports equal.\nfunc Equal(x, y interface{}, opts ...Option) bool {\n\tvx := reflect.ValueOf(x)\n\tvy := reflect.ValueOf(y)\n\n\t// If the inputs are different types, auto-wrap them in an empty interface\n\t// so that they have the same parent type.\n\tvar t reflect.Type\n\tif !vx.IsValid() || !vy.IsValid() || vx.Type() != vy.Type() {\n\t\tt = reflect.TypeOf((*interface{})(nil)).Elem()\n\t\tif vx.IsValid() {\n\t\t\tvvx := reflect.New(t).Elem()\n\t\t\tvvx.Set(vx)\n\t\t\tvx = vvx\n\t\t}\n\t\tif vy.IsValid() {\n\t\t\tvvy := reflect.New(t).Elem()\n\t\t\tvvy.Set(vy)\n\t\t\tvy = vvy\n\t\t}\n\t} else {\n\t\tt = vx.Type()\n\t}\n\n\ts := newState(opts)\n\ts.compareAny(&pathStep{t, vx, vy})\n\treturn s.result.Equal()\n}\n\n// Diff returns a human-readable report of the differences between two values.\n// It returns an empty string if and only if Equal returns true for the same\n// input values and options.\n//\n// The output is displayed as a literal in pseudo-Go syntax.\n// At the start of each line, a \"-\" prefix indicates an element removed from x,\n// a \"+\" prefix to indicates an element added to y, and the lack of a prefix\n// indicates an element common to both x and y. If possible, the output\n// uses fmt.Stringer.String or error.Error methods to produce more humanly\n// readable outputs. In such cases, the string is prefixed with either an\n// 's' or 'e' character, respectively, to indicate that the method was called.\n//\n// Do not depend on this output being stable. If you need the ability to\n// programmatically interpret the difference, consider using a custom Reporter.\nfunc Diff(x, y interface{}, opts ...Option) string {\n\tr := new(defaultReporter)\n\teq := Equal(x, y, Options(opts), Reporter(r))\n\td := r.String()\n\tif (d == \"\") != eq {\n\t\tpanic(\"inconsistent difference and equality results\")\n\t}\n\treturn d\n}\n\ntype state struct {\n\t// These fields represent the \"comparison state\".\n\t// Calling statelessCompare must not result in observable changes to these.\n\tresult    diff.Result // The current result of comparison\n\tcurPath   Path        // The current path in the value tree\n\treporters []reporter  // Optional reporters\n\n\t// recChecker checks for infinite cycles applying the same set of\n\t// transformers upon the output of itself.\n\trecChecker recChecker\n\n\t// dynChecker triggers pseudo-random checks for option correctness.\n\t// It is safe for statelessCompare to mutate this value.\n\tdynChecker dynChecker\n\n\t// These fields, once set by processOption, will not change.\n\texporters map[reflect.Type]bool // Set of structs with unexported field visibility\n\topts      Options               // List of all fundamental and filter options\n}\n\nfunc newState(opts []Option) *state {\n\t// Always ensure a validator option exists to validate the inputs.\n\ts := &state{opts: Options{validator{}}}\n\ts.processOption(Options(opts))\n\treturn s\n}\n\nfunc (s *state) processOption(opt Option) {\n\tswitch opt := opt.(type) {\n\tcase nil:\n\tcase Options:\n\t\tfor _, o := range opt {\n\t\t\ts.processOption(o)\n\t\t}\n\tcase coreOption:\n\t\ttype filtered interface {\n\t\t\tisFiltered() bool\n\t\t}\n\t\tif fopt, ok := opt.(filtered); ok && !fopt.isFiltered() {\n\t\t\tpanic(fmt.Sprintf(\"cannot use an unfiltered option: %v\", opt))\n\t\t}\n\t\ts.opts = append(s.opts, opt)\n\tcase visibleStructs:\n\t\tif s.exporters == nil {\n\t\t\ts.exporters = make(map[reflect.Type]bool)\n\t\t}\n\t\tfor t := range opt {\n\t\t\ts.exporters[t] = true\n\t\t}\n\tcase reporter:\n\t\ts.reporters = append(s.reporters, opt)\n\tdefault:\n\t\tpanic(fmt.Sprintf(\"unknown option %T\", opt))\n\t}\n}\n\n// statelessCompare compares two values and returns the result.\n// This function is stateless in that it does not alter the current result,\n// or output to any registered reporters.\nfunc (s *state) statelessCompare(step PathStep) diff.Result {\n\t// We do not save and restore the curPath because all of the compareX\n\t// methods should properly push and pop from the path.\n\t// It is an implementation bug if the contents of curPath differs from\n\t// when calling this function to when returning from it.\n\n\toldResult, oldReporters := s.result, s.reporters\n\ts.result = diff.Result{} // Reset result\n\ts.reporters = nil        // Remove reporters to avoid spurious printouts\n\ts.compareAny(step)\n\tres := s.result\n\ts.result, s.reporters = oldResult, oldReporters\n\treturn res\n}\n\nfunc (s *state) compareAny(step PathStep) {\n\t// Update the path stack.\n\ts.curPath.push(step)\n\tdefer s.curPath.pop()\n\tfor _, r := range s.reporters {\n\t\tr.PushStep(step)\n\t\tdefer r.PopStep()\n\t}\n\ts.recChecker.Check(s.curPath)\n\n\t// Obtain the current type and values.\n\tt := step.Type()\n\tvx, vy := step.Values()\n\n\t// Rule 1: Check whether an option applies on this node in the value tree.\n\tif s.tryOptions(t, vx, vy) {\n\t\treturn\n\t}\n\n\t// Rule 2: Check whether the type has a valid Equal method.\n\tif s.tryMethod(t, vx, vy) {\n\t\treturn\n\t}\n\n\t// Rule 3: Compare based on the underlying kind.\n\tswitch t.Kind() {\n\tcase reflect.Bool:\n\t\ts.report(vx.Bool() == vy.Bool(), 0)\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\ts.report(vx.Int() == vy.Int(), 0)\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:\n\t\ts.report(vx.Uint() == vy.Uint(), 0)\n\tcase reflect.Float32, reflect.Float64:\n\t\ts.report(vx.Float() == vy.Float(), 0)\n\tcase reflect.Complex64, reflect.Complex128:\n\t\ts.report(vx.Complex() == vy.Complex(), 0)\n\tcase reflect.String:\n\t\ts.report(vx.String() == vy.String(), 0)\n\tcase reflect.Chan, reflect.UnsafePointer:\n\t\ts.report(vx.Pointer() == vy.Pointer(), 0)\n\tcase reflect.Func:\n\t\ts.report(vx.IsNil() && vy.IsNil(), 0)\n\tcase reflect.Struct:\n\t\ts.compareStruct(t, vx, vy)\n\tcase reflect.Slice, reflect.Array:\n\t\ts.compareSlice(t, vx, vy)\n\tcase reflect.Map:\n\t\ts.compareMap(t, vx, vy)\n\tcase reflect.Ptr:\n\t\ts.comparePtr(t, vx, vy)\n\tcase reflect.Interface:\n\t\ts.compareInterface(t, vx, vy)\n\tdefault:\n\t\tpanic(fmt.Sprintf(\"%v kind not handled\", t.Kind()))\n\t}\n}\n\nfunc (s *state) tryOptions(t reflect.Type, vx, vy reflect.Value) bool {\n\t// Evaluate all filters and apply the remaining options.\n\tif opt := s.opts.filter(s, t, vx, vy); opt != nil {\n\t\topt.apply(s, vx, vy)\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc (s *state) tryMethod(t reflect.Type, vx, vy reflect.Value) bool {\n\t// Check if this type even has an Equal method.\n\tm, ok := t.MethodByName(\"Equal\")\n\tif !ok || !function.IsType(m.Type, function.EqualAssignable) {\n\t\treturn false\n\t}\n\n\teq := s.callTTBFunc(m.Func, vx, vy)\n\ts.report(eq, reportByMethod)\n\treturn true\n}\n\nfunc (s *state) callTRFunc(f, v reflect.Value, step Transform) reflect.Value {\n\tv = sanitizeValue(v, f.Type().In(0))\n\tif !s.dynChecker.Next() {\n\t\treturn f.Call([]reflect.Value{v})[0]\n\t}\n\n\t// Run the function twice and ensure that we get the same results back.\n\t// We run in goroutines so that the race detector (if enabled) can detect\n\t// unsafe mutations to the input.\n\tc := make(chan reflect.Value)\n\tgo detectRaces(c, f, v)\n\tgot := <-c\n\twant := f.Call([]reflect.Value{v})[0]\n\tif step.vx, step.vy = got, want; !s.statelessCompare(step).Equal() {\n\t\t// To avoid false-positives with non-reflexive equality operations,\n\t\t// we sanity check whether a value is equal to itself.\n\t\tif step.vx, step.vy = want, want; !s.statelessCompare(step).Equal() {\n\t\t\treturn want\n\t\t}\n\t\tpanic(fmt.Sprintf(\"non-deterministic function detected: %s\", function.NameOf(f)))\n\t}\n\treturn want\n}\n\nfunc (s *state) callTTBFunc(f, x, y reflect.Value) bool {\n\tx = sanitizeValue(x, f.Type().In(0))\n\ty = sanitizeValue(y, f.Type().In(1))\n\tif !s.dynChecker.Next() {\n\t\treturn f.Call([]reflect.Value{x, y})[0].Bool()\n\t}\n\n\t// Swapping the input arguments is sufficient to check that\n\t// f is symmetric and deterministic.\n\t// We run in goroutines so that the race detector (if enabled) can detect\n\t// unsafe mutations to the input.\n\tc := make(chan reflect.Value)\n\tgo detectRaces(c, f, y, x)\n\tgot := <-c\n\twant := f.Call([]reflect.Value{x, y})[0].Bool()\n\tif !got.IsValid() || got.Bool() != want {\n\t\tpanic(fmt.Sprintf(\"non-deterministic or non-symmetric function detected: %s\", function.NameOf(f)))\n\t}\n\treturn want\n}\n\nfunc detectRaces(c chan<- reflect.Value, f reflect.Value, vs ...reflect.Value) {\n\tvar ret reflect.Value\n\tdefer func() {\n\t\trecover() // Ignore panics, let the other call to f panic instead\n\t\tc <- ret\n\t}()\n\tret = f.Call(vs)[0]\n}\n\n// sanitizeValue converts nil interfaces of type T to those of type R,\n// assuming that T is assignable to R.\n// Otherwise, it returns the input value as is.\nfunc sanitizeValue(v reflect.Value, t reflect.Type) reflect.Value {\n\t// TODO(dsnet): Workaround for reflect bug (https://golang.org/issue/22143).\n\tif !flags.AtLeastGo110 {\n\t\tif v.Kind() == reflect.Interface && v.IsNil() && v.Type() != t {\n\t\t\treturn reflect.New(t).Elem()\n\t\t}\n\t}\n\treturn v\n}\n\nfunc (s *state) compareStruct(t reflect.Type, vx, vy reflect.Value) {\n\tvar vax, vay reflect.Value // Addressable versions of vx and vy\n\n\tstep := StructField{&structField{}}\n\tfor i := 0; i < t.NumField(); i++ {\n\t\tstep.typ = t.Field(i).Type\n\t\tstep.vx = vx.Field(i)\n\t\tstep.vy = vy.Field(i)\n\t\tstep.name = t.Field(i).Name\n\t\tstep.idx = i\n\t\tstep.unexported = !isExported(step.name)\n\t\tif step.unexported {\n\t\t\tif step.name == \"_\" {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\t// Defer checking of unexported fields until later to give an\n\t\t\t// Ignore a chance to ignore the field.\n\t\t\tif !vax.IsValid() || !vay.IsValid() {\n\t\t\t\t// For retrieveUnexportedField to work, the parent struct must\n\t\t\t\t// be addressable. Create a new copy of the values if\n\t\t\t\t// necessary to make them addressable.\n\t\t\t\tvax = makeAddressable(vx)\n\t\t\t\tvay = makeAddressable(vy)\n\t\t\t}\n\t\t\tstep.mayForce = s.exporters[t]\n\t\t\tstep.pvx = vax\n\t\t\tstep.pvy = vay\n\t\t\tstep.field = t.Field(i)\n\t\t}\n\t\ts.compareAny(step)\n\t}\n}\n\nfunc (s *state) compareSlice(t reflect.Type, vx, vy reflect.Value) {\n\tisSlice := t.Kind() == reflect.Slice\n\tif isSlice && (vx.IsNil() || vy.IsNil()) {\n\t\ts.report(vx.IsNil() && vy.IsNil(), 0)\n\t\treturn\n\t}\n\n\t// TODO: Support cyclic data structures.\n\n\tstep := SliceIndex{&sliceIndex{pathStep: pathStep{typ: t.Elem()}}}\n\twithIndexes := func(ix, iy int) SliceIndex {\n\t\tif ix >= 0 {\n\t\t\tstep.vx, step.xkey = vx.Index(ix), ix\n\t\t} else {\n\t\t\tstep.vx, step.xkey = reflect.Value{}, -1\n\t\t}\n\t\tif iy >= 0 {\n\t\t\tstep.vy, step.ykey = vy.Index(iy), iy\n\t\t} else {\n\t\t\tstep.vy, step.ykey = reflect.Value{}, -1\n\t\t}\n\t\treturn step\n\t}\n\n\t// Ignore options are able to ignore missing elements in a slice.\n\t// However, detecting these reliably requires an optimal differencing\n\t// algorithm, for which diff.Difference is not.\n\t//\n\t// Instead, we first iterate through both slices to detect which elements\n\t// would be ignored if standing alone. The index of non-discarded elements\n\t// are stored in a separate slice, which diffing is then performed on.\n\tvar indexesX, indexesY []int\n\tvar ignoredX, ignoredY []bool\n\tfor ix := 0; ix < vx.Len(); ix++ {\n\t\tignored := s.statelessCompare(withIndexes(ix, -1)).NumDiff == 0\n\t\tif !ignored {\n\t\t\tindexesX = append(indexesX, ix)\n\t\t}\n\t\tignoredX = append(ignoredX, ignored)\n\t}\n\tfor iy := 0; iy < vy.Len(); iy++ {\n\t\tignored := s.statelessCompare(withIndexes(-1, iy)).NumDiff == 0\n\t\tif !ignored {\n\t\t\tindexesY = append(indexesY, iy)\n\t\t}\n\t\tignoredY = append(ignoredY, ignored)\n\t}\n\n\t// Compute an edit-script for slices vx and vy (excluding ignored elements).\n\tedits := diff.Difference(len(indexesX), len(indexesY), func(ix, iy int) diff.Result {\n\t\treturn s.statelessCompare(withIndexes(indexesX[ix], indexesY[iy]))\n\t})\n\n\t// Replay the ignore-scripts and the edit-script.\n\tvar ix, iy int\n\tfor ix < vx.Len() || iy < vy.Len() {\n\t\tvar e diff.EditType\n\t\tswitch {\n\t\tcase ix < len(ignoredX) && ignoredX[ix]:\n\t\t\te = diff.UniqueX\n\t\tcase iy < len(ignoredY) && ignoredY[iy]:\n\t\t\te = diff.UniqueY\n\t\tdefault:\n\t\t\te, edits = edits[0], edits[1:]\n\t\t}\n\t\tswitch e {\n\t\tcase diff.UniqueX:\n\t\t\ts.compareAny(withIndexes(ix, -1))\n\t\t\tix++\n\t\tcase diff.UniqueY:\n\t\t\ts.compareAny(withIndexes(-1, iy))\n\t\t\tiy++\n\t\tdefault:\n\t\t\ts.compareAny(withIndexes(ix, iy))\n\t\t\tix++\n\t\t\tiy++\n\t\t}\n\t}\n}\n\nfunc (s *state) compareMap(t reflect.Type, vx, vy reflect.Value) {\n\tif vx.IsNil() || vy.IsNil() {\n\t\ts.report(vx.IsNil() && vy.IsNil(), 0)\n\t\treturn\n\t}\n\n\t// TODO: Support cyclic data structures.\n\n\t// We combine and sort the two map keys so that we can perform the\n\t// comparisons in a deterministic order.\n\tstep := MapIndex{&mapIndex{pathStep: pathStep{typ: t.Elem()}}}\n\tfor _, k := range value.SortKeys(append(vx.MapKeys(), vy.MapKeys()...)) {\n\t\tstep.vx = vx.MapIndex(k)\n\t\tstep.vy = vy.MapIndex(k)\n\t\tstep.key = k\n\t\tif !step.vx.IsValid() && !step.vy.IsValid() {\n\t\t\t// It is possible for both vx and vy to be invalid if the\n\t\t\t// key contained a NaN value in it.\n\t\t\t//\n\t\t\t// Even with the ability to retrieve NaN keys in Go 1.12,\n\t\t\t// there still isn't a sensible way to compare the values since\n\t\t\t// a NaN key may map to multiple unordered values.\n\t\t\t// The most reasonable way to compare NaNs would be to compare the\n\t\t\t// set of values. However, this is impossible to do efficiently\n\t\t\t// since set equality is provably an O(n^2) operation given only\n\t\t\t// an Equal function. If we had a Less function or Hash function,\n\t\t\t// this could be done in O(n*log(n)) or O(n), respectively.\n\t\t\t//\n\t\t\t// Rather than adding complex logic to deal with NaNs, make it\n\t\t\t// the user's responsibility to compare such obscure maps.\n\t\t\tconst help = \"consider providing a Comparer to compare the map\"\n\t\t\tpanic(fmt.Sprintf(\"%#v has map key with NaNs\\n%s\", s.curPath, help))\n\t\t}\n\t\ts.compareAny(step)\n\t}\n}\n\nfunc (s *state) comparePtr(t reflect.Type, vx, vy reflect.Value) {\n\tif vx.IsNil() || vy.IsNil() {\n\t\ts.report(vx.IsNil() && vy.IsNil(), 0)\n\t\treturn\n\t}\n\n\t// TODO: Support cyclic data structures.\n\n\tvx, vy = vx.Elem(), vy.Elem()\n\ts.compareAny(Indirect{&indirect{pathStep{t.Elem(), vx, vy}}})\n}\n\nfunc (s *state) compareInterface(t reflect.Type, vx, vy reflect.Value) {\n\tif vx.IsNil() || vy.IsNil() {\n\t\ts.report(vx.IsNil() && vy.IsNil(), 0)\n\t\treturn\n\t}\n\tvx, vy = vx.Elem(), vy.Elem()\n\tif vx.Type() != vy.Type() {\n\t\ts.report(false, 0)\n\t\treturn\n\t}\n\ts.compareAny(TypeAssertion{&typeAssertion{pathStep{vx.Type(), vx, vy}}})\n}\n\nfunc (s *state) report(eq bool, rf resultFlags) {\n\tif rf&reportByIgnore == 0 {\n\t\tif eq {\n\t\t\ts.result.NumSame++\n\t\t\trf |= reportEqual\n\t\t} else {\n\t\t\ts.result.NumDiff++\n\t\t\trf |= reportUnequal\n\t\t}\n\t}\n\tfor _, r := range s.reporters {\n\t\tr.Report(Result{flags: rf})\n\t}\n}\n\n// recChecker tracks the state needed to periodically perform checks that\n// user provided transformers are not stuck in an infinitely recursive cycle.\ntype recChecker struct{ next int }\n\n// Check scans the Path for any recursive transformers and panics when any\n// recursive transformers are detected. Note that the presence of a\n// recursive Transformer does not necessarily imply an infinite cycle.\n// As such, this check only activates after some minimal number of path steps.\nfunc (rc *recChecker) Check(p Path) {\n\tconst minLen = 1 << 16\n\tif rc.next == 0 {\n\t\trc.next = minLen\n\t}\n\tif len(p) < rc.next {\n\t\treturn\n\t}\n\trc.next <<= 1\n\n\t// Check whether the same transformer has appeared at least twice.\n\tvar ss []string\n\tm := map[Option]int{}\n\tfor _, ps := range p {\n\t\tif t, ok := ps.(Transform); ok {\n\t\t\tt := t.Option()\n\t\t\tif m[t] == 1 { // Transformer was used exactly once before\n\t\t\t\ttf := t.(*transformer).fnc.Type()\n\t\t\t\tss = append(ss, fmt.Sprintf(\"%v: %v => %v\", t, tf.In(0), tf.Out(0)))\n\t\t\t}\n\t\t\tm[t]++\n\t\t}\n\t}\n\tif len(ss) > 0 {\n\t\tconst warning = \"recursive set of Transformers detected\"\n\t\tconst help = \"consider using cmpopts.AcyclicTransformer\"\n\t\tset := strings.Join(ss, \"\\n\\t\")\n\t\tpanic(fmt.Sprintf(\"%s:\\n\\t%s\\n%s\", warning, set, help))\n\t}\n}\n\n// dynChecker tracks the state needed to periodically perform checks that\n// user provided functions are symmetric and deterministic.\n// The zero value is safe for immediate use.\ntype dynChecker struct{ curr, next int }\n\n// Next increments the state and reports whether a check should be performed.\n//\n// Checks occur every Nth function call, where N is a triangular number:\n//\t0 1 3 6 10 15 21 28 36 45 55 66 78 91 105 120 136 153 171 190 ...\n// See https://en.wikipedia.org/wiki/Triangular_number\n//\n// This sequence ensures that the cost of checks drops significantly as\n// the number of functions calls grows larger.\nfunc (dc *dynChecker) Next() bool {\n\tok := dc.curr == dc.next\n\tif ok {\n\t\tdc.curr = 0\n\t\tdc.next++\n\t}\n\tdc.curr++\n\treturn ok\n}\n\n// makeAddressable returns a value that is always addressable.\n// It returns the input verbatim if it is already addressable,\n// otherwise it creates a new value and returns an addressable copy.\nfunc makeAddressable(v reflect.Value) reflect.Value {\n\tif v.CanAddr() {\n\t\treturn v\n\t}\n\tvc := reflect.New(v.Type()).Elem()\n\tvc.Set(v)\n\treturn vc\n}\n"
  },
  {
    "path": "vendor/github.com/google/go-cmp/cmp/export_panic.go",
    "content": "// Copyright 2017, The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE.md file.\n\n// +build purego\n\npackage cmp\n\nimport \"reflect\"\n\nconst supportAllowUnexported = false\n\nfunc retrieveUnexportedField(reflect.Value, reflect.StructField) reflect.Value {\n\tpanic(\"retrieveUnexportedField is not implemented\")\n}\n"
  },
  {
    "path": "vendor/github.com/google/go-cmp/cmp/export_unsafe.go",
    "content": "// Copyright 2017, The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE.md file.\n\n// +build !purego\n\npackage cmp\n\nimport (\n\t\"reflect\"\n\t\"unsafe\"\n)\n\nconst supportAllowUnexported = true\n\n// retrieveUnexportedField uses unsafe to forcibly retrieve any field from\n// a struct such that the value has read-write permissions.\n//\n// The parent struct, v, must be addressable, while f must be a StructField\n// describing the field to retrieve.\nfunc retrieveUnexportedField(v reflect.Value, f reflect.StructField) reflect.Value {\n\treturn reflect.NewAt(f.Type, unsafe.Pointer(v.UnsafeAddr()+f.Offset)).Elem()\n}\n"
  },
  {
    "path": "vendor/github.com/google/go-cmp/cmp/internal/diff/debug_disable.go",
    "content": "// Copyright 2017, The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE.md file.\n\n// +build !cmp_debug\n\npackage diff\n\nvar debug debugger\n\ntype debugger struct{}\n\nfunc (debugger) Begin(_, _ int, f EqualFunc, _, _ *EditScript) EqualFunc {\n\treturn f\n}\nfunc (debugger) Update() {}\nfunc (debugger) Finish() {}\n"
  },
  {
    "path": "vendor/github.com/google/go-cmp/cmp/internal/diff/debug_enable.go",
    "content": "// Copyright 2017, The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE.md file.\n\n// +build cmp_debug\n\npackage diff\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n\t\"sync\"\n\t\"time\"\n)\n\n// The algorithm can be seen running in real-time by enabling debugging:\n//\tgo test -tags=cmp_debug -v\n//\n// Example output:\n//\t=== RUN   TestDifference/#34\n//\t┌───────────────────────────────┐\n//\t│ \\ · · · · · · · · · · · · · · │\n//\t│ · # · · · · · · · · · · · · · │\n//\t│ · \\ · · · · · · · · · · · · · │\n//\t│ · · \\ · · · · · · · · · · · · │\n//\t│ · · · X # · · · · · · · · · · │\n//\t│ · · · # \\ · · · · · · · · · · │\n//\t│ · · · · · # # · · · · · · · · │\n//\t│ · · · · · # \\ · · · · · · · · │\n//\t│ · · · · · · · \\ · · · · · · · │\n//\t│ · · · · · · · · \\ · · · · · · │\n//\t│ · · · · · · · · · \\ · · · · · │\n//\t│ · · · · · · · · · · \\ · · # · │\n//\t│ · · · · · · · · · · · \\ # # · │\n//\t│ · · · · · · · · · · · # # # · │\n//\t│ · · · · · · · · · · # # # # · │\n//\t│ · · · · · · · · · # # # # # · │\n//\t│ · · · · · · · · · · · · · · \\ │\n//\t└───────────────────────────────┘\n//\t[.Y..M.XY......YXYXY.|]\n//\n// The grid represents the edit-graph where the horizontal axis represents\n// list X and the vertical axis represents list Y. The start of the two lists\n// is the top-left, while the ends are the bottom-right. The '·' represents\n// an unexplored node in the graph. The '\\' indicates that the two symbols\n// from list X and Y are equal. The 'X' indicates that two symbols are similar\n// (but not exactly equal) to each other. The '#' indicates that the two symbols\n// are different (and not similar). The algorithm traverses this graph trying to\n// make the paths starting in the top-left and the bottom-right connect.\n//\n// The series of '.', 'X', 'Y', and 'M' characters at the bottom represents\n// the currently established path from the forward and reverse searches,\n// separated by a '|' character.\n\nconst (\n\tupdateDelay  = 100 * time.Millisecond\n\tfinishDelay  = 500 * time.Millisecond\n\tansiTerminal = true // ANSI escape codes used to move terminal cursor\n)\n\nvar debug debugger\n\ntype debugger struct {\n\tsync.Mutex\n\tp1, p2           EditScript\n\tfwdPath, revPath *EditScript\n\tgrid             []byte\n\tlines            int\n}\n\nfunc (dbg *debugger) Begin(nx, ny int, f EqualFunc, p1, p2 *EditScript) EqualFunc {\n\tdbg.Lock()\n\tdbg.fwdPath, dbg.revPath = p1, p2\n\ttop := \"┌─\" + strings.Repeat(\"──\", nx) + \"┐\\n\"\n\trow := \"│ \" + strings.Repeat(\"· \", nx) + \"│\\n\"\n\tbtm := \"└─\" + strings.Repeat(\"──\", nx) + \"┘\\n\"\n\tdbg.grid = []byte(top + strings.Repeat(row, ny) + btm)\n\tdbg.lines = strings.Count(dbg.String(), \"\\n\")\n\tfmt.Print(dbg)\n\n\t// Wrap the EqualFunc so that we can intercept each result.\n\treturn func(ix, iy int) (r Result) {\n\t\tcell := dbg.grid[len(top)+iy*len(row):][len(\"│ \")+len(\"· \")*ix:][:len(\"·\")]\n\t\tfor i := range cell {\n\t\t\tcell[i] = 0 // Zero out the multiple bytes of UTF-8 middle-dot\n\t\t}\n\t\tswitch r = f(ix, iy); {\n\t\tcase r.Equal():\n\t\t\tcell[0] = '\\\\'\n\t\tcase r.Similar():\n\t\t\tcell[0] = 'X'\n\t\tdefault:\n\t\t\tcell[0] = '#'\n\t\t}\n\t\treturn\n\t}\n}\n\nfunc (dbg *debugger) Update() {\n\tdbg.print(updateDelay)\n}\n\nfunc (dbg *debugger) Finish() {\n\tdbg.print(finishDelay)\n\tdbg.Unlock()\n}\n\nfunc (dbg *debugger) String() string {\n\tdbg.p1, dbg.p2 = *dbg.fwdPath, dbg.p2[:0]\n\tfor i := len(*dbg.revPath) - 1; i >= 0; i-- {\n\t\tdbg.p2 = append(dbg.p2, (*dbg.revPath)[i])\n\t}\n\treturn fmt.Sprintf(\"%s[%v|%v]\\n\\n\", dbg.grid, dbg.p1, dbg.p2)\n}\n\nfunc (dbg *debugger) print(d time.Duration) {\n\tif ansiTerminal {\n\t\tfmt.Printf(\"\\x1b[%dA\", dbg.lines) // Reset terminal cursor\n\t}\n\tfmt.Print(dbg)\n\ttime.Sleep(d)\n}\n"
  },
  {
    "path": "vendor/github.com/google/go-cmp/cmp/internal/diff/diff.go",
    "content": "// Copyright 2017, The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE.md file.\n\n// Package diff implements an algorithm for producing edit-scripts.\n// The edit-script is a sequence of operations needed to transform one list\n// of symbols into another (or vice-versa). The edits allowed are insertions,\n// deletions, and modifications. The summation of all edits is called the\n// Levenshtein distance as this problem is well-known in computer science.\n//\n// This package prioritizes performance over accuracy. That is, the run time\n// is more important than obtaining a minimal Levenshtein distance.\npackage diff\n\n// EditType represents a single operation within an edit-script.\ntype EditType uint8\n\nconst (\n\t// Identity indicates that a symbol pair is identical in both list X and Y.\n\tIdentity EditType = iota\n\t// UniqueX indicates that a symbol only exists in X and not Y.\n\tUniqueX\n\t// UniqueY indicates that a symbol only exists in Y and not X.\n\tUniqueY\n\t// Modified indicates that a symbol pair is a modification of each other.\n\tModified\n)\n\n// EditScript represents the series of differences between two lists.\ntype EditScript []EditType\n\n// String returns a human-readable string representing the edit-script where\n// Identity, UniqueX, UniqueY, and Modified are represented by the\n// '.', 'X', 'Y', and 'M' characters, respectively.\nfunc (es EditScript) String() string {\n\tb := make([]byte, len(es))\n\tfor i, e := range es {\n\t\tswitch e {\n\t\tcase Identity:\n\t\t\tb[i] = '.'\n\t\tcase UniqueX:\n\t\t\tb[i] = 'X'\n\t\tcase UniqueY:\n\t\t\tb[i] = 'Y'\n\t\tcase Modified:\n\t\t\tb[i] = 'M'\n\t\tdefault:\n\t\t\tpanic(\"invalid edit-type\")\n\t\t}\n\t}\n\treturn string(b)\n}\n\n// stats returns a histogram of the number of each type of edit operation.\nfunc (es EditScript) stats() (s struct{ NI, NX, NY, NM int }) {\n\tfor _, e := range es {\n\t\tswitch e {\n\t\tcase Identity:\n\t\t\ts.NI++\n\t\tcase UniqueX:\n\t\t\ts.NX++\n\t\tcase UniqueY:\n\t\t\ts.NY++\n\t\tcase Modified:\n\t\t\ts.NM++\n\t\tdefault:\n\t\t\tpanic(\"invalid edit-type\")\n\t\t}\n\t}\n\treturn\n}\n\n// Dist is the Levenshtein distance and is guaranteed to be 0 if and only if\n// lists X and Y are equal.\nfunc (es EditScript) Dist() int { return len(es) - es.stats().NI }\n\n// LenX is the length of the X list.\nfunc (es EditScript) LenX() int { return len(es) - es.stats().NY }\n\n// LenY is the length of the Y list.\nfunc (es EditScript) LenY() int { return len(es) - es.stats().NX }\n\n// EqualFunc reports whether the symbols at indexes ix and iy are equal.\n// When called by Difference, the index is guaranteed to be within nx and ny.\ntype EqualFunc func(ix int, iy int) Result\n\n// Result is the result of comparison.\n// NumSame is the number of sub-elements that are equal.\n// NumDiff is the number of sub-elements that are not equal.\ntype Result struct{ NumSame, NumDiff int }\n\n// BoolResult returns a Result that is either Equal or not Equal.\nfunc BoolResult(b bool) Result {\n\tif b {\n\t\treturn Result{NumSame: 1} // Equal, Similar\n\t} else {\n\t\treturn Result{NumDiff: 2} // Not Equal, not Similar\n\t}\n}\n\n// Equal indicates whether the symbols are equal. Two symbols are equal\n// if and only if NumDiff == 0. If Equal, then they are also Similar.\nfunc (r Result) Equal() bool { return r.NumDiff == 0 }\n\n// Similar indicates whether two symbols are similar and may be represented\n// by using the Modified type. As a special case, we consider binary comparisons\n// (i.e., those that return Result{1, 0} or Result{0, 1}) to be similar.\n//\n// The exact ratio of NumSame to NumDiff to determine similarity may change.\nfunc (r Result) Similar() bool {\n\t// Use NumSame+1 to offset NumSame so that binary comparisons are similar.\n\treturn r.NumSame+1 >= r.NumDiff\n}\n\n// Difference reports whether two lists of lengths nx and ny are equal\n// given the definition of equality provided as f.\n//\n// This function returns an edit-script, which is a sequence of operations\n// needed to convert one list into the other. The following invariants for\n// the edit-script are maintained:\n//\t• eq == (es.Dist()==0)\n//\t• nx == es.LenX()\n//\t• ny == es.LenY()\n//\n// This algorithm is not guaranteed to be an optimal solution (i.e., one that\n// produces an edit-script with a minimal Levenshtein distance). This algorithm\n// favors performance over optimality. The exact output is not guaranteed to\n// be stable and may change over time.\nfunc Difference(nx, ny int, f EqualFunc) (es EditScript) {\n\t// This algorithm is based on traversing what is known as an \"edit-graph\".\n\t// See Figure 1 from \"An O(ND) Difference Algorithm and Its Variations\"\n\t// by Eugene W. Myers. Since D can be as large as N itself, this is\n\t// effectively O(N^2). Unlike the algorithm from that paper, we are not\n\t// interested in the optimal path, but at least some \"decent\" path.\n\t//\n\t// For example, let X and Y be lists of symbols:\n\t//\tX = [A B C A B B A]\n\t//\tY = [C B A B A C]\n\t//\n\t// The edit-graph can be drawn as the following:\n\t//\t   A B C A B B A\n\t//\t  ┌─────────────┐\n\t//\tC │_|_|\\|_|_|_|_│ 0\n\t//\tB │_|\\|_|_|\\|\\|_│ 1\n\t//\tA │\\|_|_|\\|_|_|\\│ 2\n\t//\tB │_|\\|_|_|\\|\\|_│ 3\n\t//\tA │\\|_|_|\\|_|_|\\│ 4\n\t//\tC │ | |\\| | | | │ 5\n\t//\t  └─────────────┘ 6\n\t//\t   0 1 2 3 4 5 6 7\n\t//\n\t// List X is written along the horizontal axis, while list Y is written\n\t// along the vertical axis. At any point on this grid, if the symbol in\n\t// list X matches the corresponding symbol in list Y, then a '\\' is drawn.\n\t// The goal of any minimal edit-script algorithm is to find a path from the\n\t// top-left corner to the bottom-right corner, while traveling through the\n\t// fewest horizontal or vertical edges.\n\t// A horizontal edge is equivalent to inserting a symbol from list X.\n\t// A vertical edge is equivalent to inserting a symbol from list Y.\n\t// A diagonal edge is equivalent to a matching symbol between both X and Y.\n\n\t// Invariants:\n\t//\t• 0 ≤ fwdPath.X ≤ (fwdFrontier.X, revFrontier.X) ≤ revPath.X ≤ nx\n\t//\t• 0 ≤ fwdPath.Y ≤ (fwdFrontier.Y, revFrontier.Y) ≤ revPath.Y ≤ ny\n\t//\n\t// In general:\n\t//\t• fwdFrontier.X < revFrontier.X\n\t//\t• fwdFrontier.Y < revFrontier.Y\n\t// Unless, it is time for the algorithm to terminate.\n\tfwdPath := path{+1, point{0, 0}, make(EditScript, 0, (nx+ny)/2)}\n\trevPath := path{-1, point{nx, ny}, make(EditScript, 0)}\n\tfwdFrontier := fwdPath.point // Forward search frontier\n\trevFrontier := revPath.point // Reverse search frontier\n\n\t// Search budget bounds the cost of searching for better paths.\n\t// The longest sequence of non-matching symbols that can be tolerated is\n\t// approximately the square-root of the search budget.\n\tsearchBudget := 4 * (nx + ny) // O(n)\n\n\t// The algorithm below is a greedy, meet-in-the-middle algorithm for\n\t// computing sub-optimal edit-scripts between two lists.\n\t//\n\t// The algorithm is approximately as follows:\n\t//\t• Searching for differences switches back-and-forth between\n\t//\ta search that starts at the beginning (the top-left corner), and\n\t//\ta search that starts at the end (the bottom-right corner). The goal of\n\t//\tthe search is connect with the search from the opposite corner.\n\t//\t• As we search, we build a path in a greedy manner, where the first\n\t//\tmatch seen is added to the path (this is sub-optimal, but provides a\n\t//\tdecent result in practice). When matches are found, we try the next pair\n\t//\tof symbols in the lists and follow all matches as far as possible.\n\t//\t• When searching for matches, we search along a diagonal going through\n\t//\tthrough the \"frontier\" point. If no matches are found, we advance the\n\t//\tfrontier towards the opposite corner.\n\t//\t• This algorithm terminates when either the X coordinates or the\n\t//\tY coordinates of the forward and reverse frontier points ever intersect.\n\t//\n\t// This algorithm is correct even if searching only in the forward direction\n\t// or in the reverse direction. We do both because it is commonly observed\n\t// that two lists commonly differ because elements were added to the front\n\t// or end of the other list.\n\t//\n\t// Running the tests with the \"cmp_debug\" build tag prints a visualization\n\t// of the algorithm running in real-time. This is educational for\n\t// understanding how the algorithm works. See debug_enable.go.\n\tf = debug.Begin(nx, ny, f, &fwdPath.es, &revPath.es)\n\tfor {\n\t\t// Forward search from the beginning.\n\t\tif fwdFrontier.X >= revFrontier.X || fwdFrontier.Y >= revFrontier.Y || searchBudget == 0 {\n\t\t\tbreak\n\t\t}\n\t\tfor stop1, stop2, i := false, false, 0; !(stop1 && stop2) && searchBudget > 0; i++ {\n\t\t\t// Search in a diagonal pattern for a match.\n\t\t\tz := zigzag(i)\n\t\t\tp := point{fwdFrontier.X + z, fwdFrontier.Y - z}\n\t\t\tswitch {\n\t\t\tcase p.X >= revPath.X || p.Y < fwdPath.Y:\n\t\t\t\tstop1 = true // Hit top-right corner\n\t\t\tcase p.Y >= revPath.Y || p.X < fwdPath.X:\n\t\t\t\tstop2 = true // Hit bottom-left corner\n\t\t\tcase f(p.X, p.Y).Equal():\n\t\t\t\t// Match found, so connect the path to this point.\n\t\t\t\tfwdPath.connect(p, f)\n\t\t\t\tfwdPath.append(Identity)\n\t\t\t\t// Follow sequence of matches as far as possible.\n\t\t\t\tfor fwdPath.X < revPath.X && fwdPath.Y < revPath.Y {\n\t\t\t\t\tif !f(fwdPath.X, fwdPath.Y).Equal() {\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\tfwdPath.append(Identity)\n\t\t\t\t}\n\t\t\t\tfwdFrontier = fwdPath.point\n\t\t\t\tstop1, stop2 = true, true\n\t\t\tdefault:\n\t\t\t\tsearchBudget-- // Match not found\n\t\t\t}\n\t\t\tdebug.Update()\n\t\t}\n\t\t// Advance the frontier towards reverse point.\n\t\tif revPath.X-fwdFrontier.X >= revPath.Y-fwdFrontier.Y {\n\t\t\tfwdFrontier.X++\n\t\t} else {\n\t\t\tfwdFrontier.Y++\n\t\t}\n\n\t\t// Reverse search from the end.\n\t\tif fwdFrontier.X >= revFrontier.X || fwdFrontier.Y >= revFrontier.Y || searchBudget == 0 {\n\t\t\tbreak\n\t\t}\n\t\tfor stop1, stop2, i := false, false, 0; !(stop1 && stop2) && searchBudget > 0; i++ {\n\t\t\t// Search in a diagonal pattern for a match.\n\t\t\tz := zigzag(i)\n\t\t\tp := point{revFrontier.X - z, revFrontier.Y + z}\n\t\t\tswitch {\n\t\t\tcase fwdPath.X >= p.X || revPath.Y < p.Y:\n\t\t\t\tstop1 = true // Hit bottom-left corner\n\t\t\tcase fwdPath.Y >= p.Y || revPath.X < p.X:\n\t\t\t\tstop2 = true // Hit top-right corner\n\t\t\tcase f(p.X-1, p.Y-1).Equal():\n\t\t\t\t// Match found, so connect the path to this point.\n\t\t\t\trevPath.connect(p, f)\n\t\t\t\trevPath.append(Identity)\n\t\t\t\t// Follow sequence of matches as far as possible.\n\t\t\t\tfor fwdPath.X < revPath.X && fwdPath.Y < revPath.Y {\n\t\t\t\t\tif !f(revPath.X-1, revPath.Y-1).Equal() {\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\trevPath.append(Identity)\n\t\t\t\t}\n\t\t\t\trevFrontier = revPath.point\n\t\t\t\tstop1, stop2 = true, true\n\t\t\tdefault:\n\t\t\t\tsearchBudget-- // Match not found\n\t\t\t}\n\t\t\tdebug.Update()\n\t\t}\n\t\t// Advance the frontier towards forward point.\n\t\tif revFrontier.X-fwdPath.X >= revFrontier.Y-fwdPath.Y {\n\t\t\trevFrontier.X--\n\t\t} else {\n\t\t\trevFrontier.Y--\n\t\t}\n\t}\n\n\t// Join the forward and reverse paths and then append the reverse path.\n\tfwdPath.connect(revPath.point, f)\n\tfor i := len(revPath.es) - 1; i >= 0; i-- {\n\t\tt := revPath.es[i]\n\t\trevPath.es = revPath.es[:i]\n\t\tfwdPath.append(t)\n\t}\n\tdebug.Finish()\n\treturn fwdPath.es\n}\n\ntype path struct {\n\tdir   int // +1 if forward, -1 if reverse\n\tpoint     // Leading point of the EditScript path\n\tes    EditScript\n}\n\n// connect appends any necessary Identity, Modified, UniqueX, or UniqueY types\n// to the edit-script to connect p.point to dst.\nfunc (p *path) connect(dst point, f EqualFunc) {\n\tif p.dir > 0 {\n\t\t// Connect in forward direction.\n\t\tfor dst.X > p.X && dst.Y > p.Y {\n\t\t\tswitch r := f(p.X, p.Y); {\n\t\t\tcase r.Equal():\n\t\t\t\tp.append(Identity)\n\t\t\tcase r.Similar():\n\t\t\t\tp.append(Modified)\n\t\t\tcase dst.X-p.X >= dst.Y-p.Y:\n\t\t\t\tp.append(UniqueX)\n\t\t\tdefault:\n\t\t\t\tp.append(UniqueY)\n\t\t\t}\n\t\t}\n\t\tfor dst.X > p.X {\n\t\t\tp.append(UniqueX)\n\t\t}\n\t\tfor dst.Y > p.Y {\n\t\t\tp.append(UniqueY)\n\t\t}\n\t} else {\n\t\t// Connect in reverse direction.\n\t\tfor p.X > dst.X && p.Y > dst.Y {\n\t\t\tswitch r := f(p.X-1, p.Y-1); {\n\t\t\tcase r.Equal():\n\t\t\t\tp.append(Identity)\n\t\t\tcase r.Similar():\n\t\t\t\tp.append(Modified)\n\t\t\tcase p.Y-dst.Y >= p.X-dst.X:\n\t\t\t\tp.append(UniqueY)\n\t\t\tdefault:\n\t\t\t\tp.append(UniqueX)\n\t\t\t}\n\t\t}\n\t\tfor p.X > dst.X {\n\t\t\tp.append(UniqueX)\n\t\t}\n\t\tfor p.Y > dst.Y {\n\t\t\tp.append(UniqueY)\n\t\t}\n\t}\n}\n\nfunc (p *path) append(t EditType) {\n\tp.es = append(p.es, t)\n\tswitch t {\n\tcase Identity, Modified:\n\t\tp.add(p.dir, p.dir)\n\tcase UniqueX:\n\t\tp.add(p.dir, 0)\n\tcase UniqueY:\n\t\tp.add(0, p.dir)\n\t}\n\tdebug.Update()\n}\n\ntype point struct{ X, Y int }\n\nfunc (p *point) add(dx, dy int) { p.X += dx; p.Y += dy }\n\n// zigzag maps a consecutive sequence of integers to a zig-zag sequence.\n//\t[0 1 2 3 4 5 ...] => [0 -1 +1 -2 +2 ...]\nfunc zigzag(x int) int {\n\tif x&1 != 0 {\n\t\tx = ^x\n\t}\n\treturn x >> 1\n}\n"
  },
  {
    "path": "vendor/github.com/google/go-cmp/cmp/internal/flags/flags.go",
    "content": "// Copyright 2019, The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE.md file.\n\npackage flags\n\n// Deterministic controls whether the output of Diff should be deterministic.\n// This is only used for testing.\nvar Deterministic bool\n"
  },
  {
    "path": "vendor/github.com/google/go-cmp/cmp/internal/flags/toolchain_legacy.go",
    "content": "// Copyright 2019, The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE.md file.\n\n// +build !go1.10\n\npackage flags\n\n// AtLeastGo110 reports whether the Go toolchain is at least Go 1.10.\nconst AtLeastGo110 = false\n"
  },
  {
    "path": "vendor/github.com/google/go-cmp/cmp/internal/flags/toolchain_recent.go",
    "content": "// Copyright 2019, The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE.md file.\n\n// +build go1.10\n\npackage flags\n\n// AtLeastGo110 reports whether the Go toolchain is at least Go 1.10.\nconst AtLeastGo110 = true\n"
  },
  {
    "path": "vendor/github.com/google/go-cmp/cmp/internal/function/func.go",
    "content": "// Copyright 2017, The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE.md file.\n\n// Package function provides functionality for identifying function types.\npackage function\n\nimport (\n\t\"reflect\"\n\t\"regexp\"\n\t\"runtime\"\n\t\"strings\"\n)\n\ntype funcType int\n\nconst (\n\t_ funcType = iota\n\n\ttbFunc  // func(T) bool\n\tttbFunc // func(T, T) bool\n\ttrbFunc // func(T, R) bool\n\ttibFunc // func(T, I) bool\n\ttrFunc  // func(T) R\n\n\tEqual             = ttbFunc // func(T, T) bool\n\tEqualAssignable   = tibFunc // func(T, I) bool; encapsulates func(T, T) bool\n\tTransformer       = trFunc  // func(T) R\n\tValueFilter       = ttbFunc // func(T, T) bool\n\tLess              = ttbFunc // func(T, T) bool\n\tValuePredicate    = tbFunc  // func(T) bool\n\tKeyValuePredicate = trbFunc // func(T, R) bool\n)\n\nvar boolType = reflect.TypeOf(true)\n\n// IsType reports whether the reflect.Type is of the specified function type.\nfunc IsType(t reflect.Type, ft funcType) bool {\n\tif t == nil || t.Kind() != reflect.Func || t.IsVariadic() {\n\t\treturn false\n\t}\n\tni, no := t.NumIn(), t.NumOut()\n\tswitch ft {\n\tcase tbFunc: // func(T) bool\n\t\tif ni == 1 && no == 1 && t.Out(0) == boolType {\n\t\t\treturn true\n\t\t}\n\tcase ttbFunc: // func(T, T) bool\n\t\tif ni == 2 && no == 1 && t.In(0) == t.In(1) && t.Out(0) == boolType {\n\t\t\treturn true\n\t\t}\n\tcase trbFunc: // func(T, R) bool\n\t\tif ni == 2 && no == 1 && t.Out(0) == boolType {\n\t\t\treturn true\n\t\t}\n\tcase tibFunc: // func(T, I) bool\n\t\tif ni == 2 && no == 1 && t.In(0).AssignableTo(t.In(1)) && t.Out(0) == boolType {\n\t\t\treturn true\n\t\t}\n\tcase trFunc: // func(T) R\n\t\tif ni == 1 && no == 1 {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\nvar lastIdentRx = regexp.MustCompile(`[_\\p{L}][_\\p{L}\\p{N}]*$`)\n\n// NameOf returns the name of the function value.\nfunc NameOf(v reflect.Value) string {\n\tfnc := runtime.FuncForPC(v.Pointer())\n\tif fnc == nil {\n\t\treturn \"<unknown>\"\n\t}\n\tfullName := fnc.Name() // e.g., \"long/path/name/mypkg.(*MyType).(long/path/name/mypkg.myMethod)-fm\"\n\n\t// Method closures have a \"-fm\" suffix.\n\tfullName = strings.TrimSuffix(fullName, \"-fm\")\n\n\tvar name string\n\tfor len(fullName) > 0 {\n\t\tinParen := strings.HasSuffix(fullName, \")\")\n\t\tfullName = strings.TrimSuffix(fullName, \")\")\n\n\t\ts := lastIdentRx.FindString(fullName)\n\t\tif s == \"\" {\n\t\t\tbreak\n\t\t}\n\t\tname = s + \".\" + name\n\t\tfullName = strings.TrimSuffix(fullName, s)\n\n\t\tif i := strings.LastIndexByte(fullName, '('); inParen && i >= 0 {\n\t\t\tfullName = fullName[:i]\n\t\t}\n\t\tfullName = strings.TrimSuffix(fullName, \".\")\n\t}\n\treturn strings.TrimSuffix(name, \".\")\n}\n"
  },
  {
    "path": "vendor/github.com/google/go-cmp/cmp/internal/value/pointer_purego.go",
    "content": "// Copyright 2018, The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE.md file.\n\n// +build purego\n\npackage value\n\nimport \"reflect\"\n\n// Pointer is an opaque typed pointer and is guaranteed to be comparable.\ntype Pointer struct {\n\tp uintptr\n\tt reflect.Type\n}\n\n// PointerOf returns a Pointer from v, which must be a\n// reflect.Ptr, reflect.Slice, or reflect.Map.\nfunc PointerOf(v reflect.Value) Pointer {\n\t// NOTE: Storing a pointer as an uintptr is technically incorrect as it\n\t// assumes that the GC implementation does not use a moving collector.\n\treturn Pointer{v.Pointer(), v.Type()}\n}\n"
  },
  {
    "path": "vendor/github.com/google/go-cmp/cmp/internal/value/pointer_unsafe.go",
    "content": "// Copyright 2018, The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE.md file.\n\n// +build !purego\n\npackage value\n\nimport (\n\t\"reflect\"\n\t\"unsafe\"\n)\n\n// Pointer is an opaque typed pointer and is guaranteed to be comparable.\ntype Pointer struct {\n\tp unsafe.Pointer\n\tt reflect.Type\n}\n\n// PointerOf returns a Pointer from v, which must be a\n// reflect.Ptr, reflect.Slice, or reflect.Map.\nfunc PointerOf(v reflect.Value) Pointer {\n\t// The proper representation of a pointer is unsafe.Pointer,\n\t// which is necessary if the GC ever uses a moving collector.\n\treturn Pointer{unsafe.Pointer(v.Pointer()), v.Type()}\n}\n"
  },
  {
    "path": "vendor/github.com/google/go-cmp/cmp/internal/value/sort.go",
    "content": "// Copyright 2017, The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE.md file.\n\npackage value\n\nimport (\n\t\"fmt\"\n\t\"math\"\n\t\"reflect\"\n\t\"sort\"\n)\n\n// SortKeys sorts a list of map keys, deduplicating keys if necessary.\n// The type of each value must be comparable.\nfunc SortKeys(vs []reflect.Value) []reflect.Value {\n\tif len(vs) == 0 {\n\t\treturn vs\n\t}\n\n\t// Sort the map keys.\n\tsort.Slice(vs, func(i, j int) bool { return isLess(vs[i], vs[j]) })\n\n\t// Deduplicate keys (fails for NaNs).\n\tvs2 := vs[:1]\n\tfor _, v := range vs[1:] {\n\t\tif isLess(vs2[len(vs2)-1], v) {\n\t\t\tvs2 = append(vs2, v)\n\t\t}\n\t}\n\treturn vs2\n}\n\n// isLess is a generic function for sorting arbitrary map keys.\n// The inputs must be of the same type and must be comparable.\nfunc isLess(x, y reflect.Value) bool {\n\tswitch x.Type().Kind() {\n\tcase reflect.Bool:\n\t\treturn !x.Bool() && y.Bool()\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\treturn x.Int() < y.Int()\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:\n\t\treturn x.Uint() < y.Uint()\n\tcase reflect.Float32, reflect.Float64:\n\t\tfx, fy := x.Float(), y.Float()\n\t\treturn fx < fy || math.IsNaN(fx) && !math.IsNaN(fy)\n\tcase reflect.Complex64, reflect.Complex128:\n\t\tcx, cy := x.Complex(), y.Complex()\n\t\trx, ix, ry, iy := real(cx), imag(cx), real(cy), imag(cy)\n\t\tif rx == ry || (math.IsNaN(rx) && math.IsNaN(ry)) {\n\t\t\treturn ix < iy || math.IsNaN(ix) && !math.IsNaN(iy)\n\t\t}\n\t\treturn rx < ry || math.IsNaN(rx) && !math.IsNaN(ry)\n\tcase reflect.Ptr, reflect.UnsafePointer, reflect.Chan:\n\t\treturn x.Pointer() < y.Pointer()\n\tcase reflect.String:\n\t\treturn x.String() < y.String()\n\tcase reflect.Array:\n\t\tfor i := 0; i < x.Len(); i++ {\n\t\t\tif isLess(x.Index(i), y.Index(i)) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\tif isLess(y.Index(i), x.Index(i)) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\treturn false\n\tcase reflect.Struct:\n\t\tfor i := 0; i < x.NumField(); i++ {\n\t\t\tif isLess(x.Field(i), y.Field(i)) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\tif isLess(y.Field(i), x.Field(i)) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\treturn false\n\tcase reflect.Interface:\n\t\tvx, vy := x.Elem(), y.Elem()\n\t\tif !vx.IsValid() || !vy.IsValid() {\n\t\t\treturn !vx.IsValid() && vy.IsValid()\n\t\t}\n\t\ttx, ty := vx.Type(), vy.Type()\n\t\tif tx == ty {\n\t\t\treturn isLess(x.Elem(), y.Elem())\n\t\t}\n\t\tif tx.Kind() != ty.Kind() {\n\t\t\treturn vx.Kind() < vy.Kind()\n\t\t}\n\t\tif tx.String() != ty.String() {\n\t\t\treturn tx.String() < ty.String()\n\t\t}\n\t\tif tx.PkgPath() != ty.PkgPath() {\n\t\t\treturn tx.PkgPath() < ty.PkgPath()\n\t\t}\n\t\t// This can happen in rare situations, so we fallback to just comparing\n\t\t// the unique pointer for a reflect.Type. This guarantees deterministic\n\t\t// ordering within a program, but it is obviously not stable.\n\t\treturn reflect.ValueOf(vx.Type()).Pointer() < reflect.ValueOf(vy.Type()).Pointer()\n\tdefault:\n\t\t// Must be Func, Map, or Slice; which are not comparable.\n\t\tpanic(fmt.Sprintf(\"%T is not comparable\", x.Type()))\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/google/go-cmp/cmp/internal/value/zero.go",
    "content": "// Copyright 2017, The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE.md file.\n\npackage value\n\nimport \"reflect\"\n\n// IsZero reports whether v is the zero value.\n// This does not rely on Interface and so can be used on unexported fields.\nfunc IsZero(v reflect.Value) bool {\n\tswitch v.Kind() {\n\tcase reflect.Bool:\n\t\treturn v.Bool() == false\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\treturn v.Int() == 0\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:\n\t\treturn v.Uint() == 0\n\tcase reflect.Float32, reflect.Float64:\n\t\treturn v.Float() == 0\n\tcase reflect.Complex64, reflect.Complex128:\n\t\treturn v.Complex() == 0\n\tcase reflect.String:\n\t\treturn v.String() == \"\"\n\tcase reflect.UnsafePointer:\n\t\treturn v.Pointer() == 0\n\tcase reflect.Chan, reflect.Func, reflect.Interface, reflect.Ptr, reflect.Map, reflect.Slice:\n\t\treturn v.IsNil()\n\tcase reflect.Array:\n\t\tfor i := 0; i < v.Len(); i++ {\n\t\t\tif !IsZero(v.Index(i)) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\treturn true\n\tcase reflect.Struct:\n\t\tfor i := 0; i < v.NumField(); i++ {\n\t\t\tif !IsZero(v.Field(i)) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\treturn true\n\t}\n\treturn false\n}\n"
  },
  {
    "path": "vendor/github.com/google/go-cmp/cmp/options.go",
    "content": "// Copyright 2017, The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE.md file.\n\npackage cmp\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\t\"regexp\"\n\t\"strings\"\n\n\t\"github.com/google/go-cmp/cmp/internal/function\"\n)\n\n// Option configures for specific behavior of Equal and Diff. In particular,\n// the fundamental Option functions (Ignore, Transformer, and Comparer),\n// configure how equality is determined.\n//\n// The fundamental options may be composed with filters (FilterPath and\n// FilterValues) to control the scope over which they are applied.\n//\n// The cmp/cmpopts package provides helper functions for creating options that\n// may be used with Equal and Diff.\ntype Option interface {\n\t// filter applies all filters and returns the option that remains.\n\t// Each option may only read s.curPath and call s.callTTBFunc.\n\t//\n\t// An Options is returned only if multiple comparers or transformers\n\t// can apply simultaneously and will only contain values of those types\n\t// or sub-Options containing values of those types.\n\tfilter(s *state, t reflect.Type, vx, vy reflect.Value) applicableOption\n}\n\n// applicableOption represents the following types:\n//\tFundamental: ignore | validator | *comparer | *transformer\n//\tGrouping:    Options\ntype applicableOption interface {\n\tOption\n\n\t// apply executes the option, which may mutate s or panic.\n\tapply(s *state, vx, vy reflect.Value)\n}\n\n// coreOption represents the following types:\n//\tFundamental: ignore | validator | *comparer | *transformer\n//\tFilters:     *pathFilter | *valuesFilter\ntype coreOption interface {\n\tOption\n\tisCore()\n}\n\ntype core struct{}\n\nfunc (core) isCore() {}\n\n// Options is a list of Option values that also satisfies the Option interface.\n// Helper comparison packages may return an Options value when packing multiple\n// Option values into a single Option. When this package processes an Options,\n// it will be implicitly expanded into a flat list.\n//\n// Applying a filter on an Options is equivalent to applying that same filter\n// on all individual options held within.\ntype Options []Option\n\nfunc (opts Options) filter(s *state, t reflect.Type, vx, vy reflect.Value) (out applicableOption) {\n\tfor _, opt := range opts {\n\t\tswitch opt := opt.filter(s, t, vx, vy); opt.(type) {\n\t\tcase ignore:\n\t\t\treturn ignore{} // Only ignore can short-circuit evaluation\n\t\tcase validator:\n\t\t\tout = validator{} // Takes precedence over comparer or transformer\n\t\tcase *comparer, *transformer, Options:\n\t\t\tswitch out.(type) {\n\t\t\tcase nil:\n\t\t\t\tout = opt\n\t\t\tcase validator:\n\t\t\t\t// Keep validator\n\t\t\tcase *comparer, *transformer, Options:\n\t\t\t\tout = Options{out, opt} // Conflicting comparers or transformers\n\t\t\t}\n\t\t}\n\t}\n\treturn out\n}\n\nfunc (opts Options) apply(s *state, _, _ reflect.Value) {\n\tconst warning = \"ambiguous set of applicable options\"\n\tconst help = \"consider using filters to ensure at most one Comparer or Transformer may apply\"\n\tvar ss []string\n\tfor _, opt := range flattenOptions(nil, opts) {\n\t\tss = append(ss, fmt.Sprint(opt))\n\t}\n\tset := strings.Join(ss, \"\\n\\t\")\n\tpanic(fmt.Sprintf(\"%s at %#v:\\n\\t%s\\n%s\", warning, s.curPath, set, help))\n}\n\nfunc (opts Options) String() string {\n\tvar ss []string\n\tfor _, opt := range opts {\n\t\tss = append(ss, fmt.Sprint(opt))\n\t}\n\treturn fmt.Sprintf(\"Options{%s}\", strings.Join(ss, \", \"))\n}\n\n// FilterPath returns a new Option where opt is only evaluated if filter f\n// returns true for the current Path in the value tree.\n//\n// This filter is called even if a slice element or map entry is missing and\n// provides an opportunity to ignore such cases. The filter function must be\n// symmetric such that the filter result is identical regardless of whether the\n// missing value is from x or y.\n//\n// The option passed in may be an Ignore, Transformer, Comparer, Options, or\n// a previously filtered Option.\nfunc FilterPath(f func(Path) bool, opt Option) Option {\n\tif f == nil {\n\t\tpanic(\"invalid path filter function\")\n\t}\n\tif opt := normalizeOption(opt); opt != nil {\n\t\treturn &pathFilter{fnc: f, opt: opt}\n\t}\n\treturn nil\n}\n\ntype pathFilter struct {\n\tcore\n\tfnc func(Path) bool\n\topt Option\n}\n\nfunc (f pathFilter) filter(s *state, t reflect.Type, vx, vy reflect.Value) applicableOption {\n\tif f.fnc(s.curPath) {\n\t\treturn f.opt.filter(s, t, vx, vy)\n\t}\n\treturn nil\n}\n\nfunc (f pathFilter) String() string {\n\treturn fmt.Sprintf(\"FilterPath(%s, %v)\", function.NameOf(reflect.ValueOf(f.fnc)), f.opt)\n}\n\n// FilterValues returns a new Option where opt is only evaluated if filter f,\n// which is a function of the form \"func(T, T) bool\", returns true for the\n// current pair of values being compared. If either value is invalid or\n// the type of the values is not assignable to T, then this filter implicitly\n// returns false.\n//\n// The filter function must be\n// symmetric (i.e., agnostic to the order of the inputs) and\n// deterministic (i.e., produces the same result when given the same inputs).\n// If T is an interface, it is possible that f is called with two values with\n// different concrete types that both implement T.\n//\n// The option passed in may be an Ignore, Transformer, Comparer, Options, or\n// a previously filtered Option.\nfunc FilterValues(f interface{}, opt Option) Option {\n\tv := reflect.ValueOf(f)\n\tif !function.IsType(v.Type(), function.ValueFilter) || v.IsNil() {\n\t\tpanic(fmt.Sprintf(\"invalid values filter function: %T\", f))\n\t}\n\tif opt := normalizeOption(opt); opt != nil {\n\t\tvf := &valuesFilter{fnc: v, opt: opt}\n\t\tif ti := v.Type().In(0); ti.Kind() != reflect.Interface || ti.NumMethod() > 0 {\n\t\t\tvf.typ = ti\n\t\t}\n\t\treturn vf\n\t}\n\treturn nil\n}\n\ntype valuesFilter struct {\n\tcore\n\ttyp reflect.Type  // T\n\tfnc reflect.Value // func(T, T) bool\n\topt Option\n}\n\nfunc (f valuesFilter) filter(s *state, t reflect.Type, vx, vy reflect.Value) applicableOption {\n\tif !vx.IsValid() || !vx.CanInterface() || !vy.IsValid() || !vy.CanInterface() {\n\t\treturn nil\n\t}\n\tif (f.typ == nil || t.AssignableTo(f.typ)) && s.callTTBFunc(f.fnc, vx, vy) {\n\t\treturn f.opt.filter(s, t, vx, vy)\n\t}\n\treturn nil\n}\n\nfunc (f valuesFilter) String() string {\n\treturn fmt.Sprintf(\"FilterValues(%s, %v)\", function.NameOf(f.fnc), f.opt)\n}\n\n// Ignore is an Option that causes all comparisons to be ignored.\n// This value is intended to be combined with FilterPath or FilterValues.\n// It is an error to pass an unfiltered Ignore option to Equal.\nfunc Ignore() Option { return ignore{} }\n\ntype ignore struct{ core }\n\nfunc (ignore) isFiltered() bool                                                     { return false }\nfunc (ignore) filter(_ *state, _ reflect.Type, _, _ reflect.Value) applicableOption { return ignore{} }\nfunc (ignore) apply(s *state, _, _ reflect.Value)                                   { s.report(true, reportByIgnore) }\nfunc (ignore) String() string                                                       { return \"Ignore()\" }\n\n// validator is a sentinel Option type to indicate that some options could not\n// be evaluated due to unexported fields, missing slice elements, or\n// missing map entries. Both values are validator only for unexported fields.\ntype validator struct{ core }\n\nfunc (validator) filter(_ *state, _ reflect.Type, vx, vy reflect.Value) applicableOption {\n\tif !vx.IsValid() || !vy.IsValid() {\n\t\treturn validator{}\n\t}\n\tif !vx.CanInterface() || !vy.CanInterface() {\n\t\treturn validator{}\n\t}\n\treturn nil\n}\nfunc (validator) apply(s *state, vx, vy reflect.Value) {\n\t// Implies missing slice element or map entry.\n\tif !vx.IsValid() || !vy.IsValid() {\n\t\ts.report(vx.IsValid() == vy.IsValid(), 0)\n\t\treturn\n\t}\n\n\t// Unable to Interface implies unexported field without visibility access.\n\tif !vx.CanInterface() || !vy.CanInterface() {\n\t\tconst help = \"consider using a custom Comparer; if you control the implementation of type, you can also consider AllowUnexported or cmpopts.IgnoreUnexported\"\n\t\tpanic(fmt.Sprintf(\"cannot handle unexported field: %#v\\n%s\", s.curPath, help))\n\t}\n\n\tpanic(\"not reachable\")\n}\n\n// identRx represents a valid identifier according to the Go specification.\nconst identRx = `[_\\p{L}][_\\p{L}\\p{N}]*`\n\nvar identsRx = regexp.MustCompile(`^` + identRx + `(\\.` + identRx + `)*$`)\n\n// Transformer returns an Option that applies a transformation function that\n// converts values of a certain type into that of another.\n//\n// The transformer f must be a function \"func(T) R\" that converts values of\n// type T to those of type R and is implicitly filtered to input values\n// assignable to T. The transformer must not mutate T in any way.\n//\n// To help prevent some cases of infinite recursive cycles applying the\n// same transform to the output of itself (e.g., in the case where the\n// input and output types are the same), an implicit filter is added such that\n// a transformer is applicable only if that exact transformer is not already\n// in the tail of the Path since the last non-Transform step.\n// For situations where the implicit filter is still insufficient,\n// consider using cmpopts.AcyclicTransformer, which adds a filter\n// to prevent the transformer from being recursively applied upon itself.\n//\n// The name is a user provided label that is used as the Transform.Name in the\n// transformation PathStep (and eventually shown in the Diff output).\n// The name must be a valid identifier or qualified identifier in Go syntax.\n// If empty, an arbitrary name is used.\nfunc Transformer(name string, f interface{}) Option {\n\tv := reflect.ValueOf(f)\n\tif !function.IsType(v.Type(), function.Transformer) || v.IsNil() {\n\t\tpanic(fmt.Sprintf(\"invalid transformer function: %T\", f))\n\t}\n\tif name == \"\" {\n\t\tname = function.NameOf(v)\n\t\tif !identsRx.MatchString(name) {\n\t\t\tname = \"λ\" // Lambda-symbol as placeholder name\n\t\t}\n\t} else if !identsRx.MatchString(name) {\n\t\tpanic(fmt.Sprintf(\"invalid name: %q\", name))\n\t}\n\ttr := &transformer{name: name, fnc: reflect.ValueOf(f)}\n\tif ti := v.Type().In(0); ti.Kind() != reflect.Interface || ti.NumMethod() > 0 {\n\t\ttr.typ = ti\n\t}\n\treturn tr\n}\n\ntype transformer struct {\n\tcore\n\tname string\n\ttyp  reflect.Type  // T\n\tfnc  reflect.Value // func(T) R\n}\n\nfunc (tr *transformer) isFiltered() bool { return tr.typ != nil }\n\nfunc (tr *transformer) filter(s *state, t reflect.Type, _, _ reflect.Value) applicableOption {\n\tfor i := len(s.curPath) - 1; i >= 0; i-- {\n\t\tif t, ok := s.curPath[i].(Transform); !ok {\n\t\t\tbreak // Hit most recent non-Transform step\n\t\t} else if tr == t.trans {\n\t\t\treturn nil // Cannot directly use same Transform\n\t\t}\n\t}\n\tif tr.typ == nil || t.AssignableTo(tr.typ) {\n\t\treturn tr\n\t}\n\treturn nil\n}\n\nfunc (tr *transformer) apply(s *state, vx, vy reflect.Value) {\n\tstep := Transform{&transform{pathStep{typ: tr.fnc.Type().Out(0)}, tr}}\n\tvvx := s.callTRFunc(tr.fnc, vx, step)\n\tvvy := s.callTRFunc(tr.fnc, vy, step)\n\tstep.vx, step.vy = vvx, vvy\n\ts.compareAny(step)\n}\n\nfunc (tr transformer) String() string {\n\treturn fmt.Sprintf(\"Transformer(%s, %s)\", tr.name, function.NameOf(tr.fnc))\n}\n\n// Comparer returns an Option that determines whether two values are equal\n// to each other.\n//\n// The comparer f must be a function \"func(T, T) bool\" and is implicitly\n// filtered to input values assignable to T. If T is an interface, it is\n// possible that f is called with two values of different concrete types that\n// both implement T.\n//\n// The equality function must be:\n//\t• Symmetric: equal(x, y) == equal(y, x)\n//\t• Deterministic: equal(x, y) == equal(x, y)\n//\t• Pure: equal(x, y) does not modify x or y\nfunc Comparer(f interface{}) Option {\n\tv := reflect.ValueOf(f)\n\tif !function.IsType(v.Type(), function.Equal) || v.IsNil() {\n\t\tpanic(fmt.Sprintf(\"invalid comparer function: %T\", f))\n\t}\n\tcm := &comparer{fnc: v}\n\tif ti := v.Type().In(0); ti.Kind() != reflect.Interface || ti.NumMethod() > 0 {\n\t\tcm.typ = ti\n\t}\n\treturn cm\n}\n\ntype comparer struct {\n\tcore\n\ttyp reflect.Type  // T\n\tfnc reflect.Value // func(T, T) bool\n}\n\nfunc (cm *comparer) isFiltered() bool { return cm.typ != nil }\n\nfunc (cm *comparer) filter(_ *state, t reflect.Type, _, _ reflect.Value) applicableOption {\n\tif cm.typ == nil || t.AssignableTo(cm.typ) {\n\t\treturn cm\n\t}\n\treturn nil\n}\n\nfunc (cm *comparer) apply(s *state, vx, vy reflect.Value) {\n\teq := s.callTTBFunc(cm.fnc, vx, vy)\n\ts.report(eq, reportByFunc)\n}\n\nfunc (cm comparer) String() string {\n\treturn fmt.Sprintf(\"Comparer(%s)\", function.NameOf(cm.fnc))\n}\n\n// AllowUnexported returns an Option that forcibly allows operations on\n// unexported fields in certain structs, which are specified by passing in a\n// value of each struct type.\n//\n// Users of this option must understand that comparing on unexported fields\n// from external packages is not safe since changes in the internal\n// implementation of some external package may cause the result of Equal\n// to unexpectedly change. However, it may be valid to use this option on types\n// defined in an internal package where the semantic meaning of an unexported\n// field is in the control of the user.\n//\n// In many cases, a custom Comparer should be used instead that defines\n// equality as a function of the public API of a type rather than the underlying\n// unexported implementation.\n//\n// For example, the reflect.Type documentation defines equality to be determined\n// by the == operator on the interface (essentially performing a shallow pointer\n// comparison) and most attempts to compare *regexp.Regexp types are interested\n// in only checking that the regular expression strings are equal.\n// Both of these are accomplished using Comparers:\n//\n//\tComparer(func(x, y reflect.Type) bool { return x == y })\n//\tComparer(func(x, y *regexp.Regexp) bool { return x.String() == y.String() })\n//\n// In other cases, the cmpopts.IgnoreUnexported option can be used to ignore\n// all unexported fields on specified struct types.\nfunc AllowUnexported(types ...interface{}) Option {\n\tif !supportAllowUnexported {\n\t\tpanic(\"AllowUnexported is not supported on purego builds, Google App Engine Standard, or GopherJS\")\n\t}\n\tm := make(map[reflect.Type]bool)\n\tfor _, typ := range types {\n\t\tt := reflect.TypeOf(typ)\n\t\tif t.Kind() != reflect.Struct {\n\t\t\tpanic(fmt.Sprintf(\"invalid struct type: %T\", typ))\n\t\t}\n\t\tm[t] = true\n\t}\n\treturn visibleStructs(m)\n}\n\ntype visibleStructs map[reflect.Type]bool\n\nfunc (visibleStructs) filter(_ *state, _ reflect.Type, _, _ reflect.Value) applicableOption {\n\tpanic(\"not implemented\")\n}\n\n// Result represents the comparison result for a single node and\n// is provided by cmp when calling Result (see Reporter).\ntype Result struct {\n\t_     [0]func() // Make Result incomparable\n\tflags resultFlags\n}\n\n// Equal reports whether the node was determined to be equal or not.\n// As a special case, ignored nodes are considered equal.\nfunc (r Result) Equal() bool {\n\treturn r.flags&(reportEqual|reportByIgnore) != 0\n}\n\n// ByIgnore reports whether the node is equal because it was ignored.\n// This never reports true if Equal reports false.\nfunc (r Result) ByIgnore() bool {\n\treturn r.flags&reportByIgnore != 0\n}\n\n// ByMethod reports whether the Equal method determined equality.\nfunc (r Result) ByMethod() bool {\n\treturn r.flags&reportByMethod != 0\n}\n\n// ByFunc reports whether a Comparer function determined equality.\nfunc (r Result) ByFunc() bool {\n\treturn r.flags&reportByFunc != 0\n}\n\ntype resultFlags uint\n\nconst (\n\t_ resultFlags = (1 << iota) / 2\n\n\treportEqual\n\treportUnequal\n\treportByIgnore\n\treportByMethod\n\treportByFunc\n)\n\n// Reporter is an Option that can be passed to Equal. When Equal traverses\n// the value trees, it calls PushStep as it descends into each node in the\n// tree and PopStep as it ascend out of the node. The leaves of the tree are\n// either compared (determined to be equal or not equal) or ignored and reported\n// as such by calling the Report method.\nfunc Reporter(r interface {\n\t// PushStep is called when a tree-traversal operation is performed.\n\t// The PathStep itself is only valid until the step is popped.\n\t// The PathStep.Values are valid for the duration of the entire traversal\n\t// and must not be mutated.\n\t//\n\t// Equal always calls PushStep at the start to provide an operation-less\n\t// PathStep used to report the root values.\n\t//\n\t// Within a slice, the exact set of inserted, removed, or modified elements\n\t// is unspecified and may change in future implementations.\n\t// The entries of a map are iterated through in an unspecified order.\n\tPushStep(PathStep)\n\n\t// Report is called exactly once on leaf nodes to report whether the\n\t// comparison identified the node as equal, unequal, or ignored.\n\t// A leaf node is one that is immediately preceded by and followed by\n\t// a pair of PushStep and PopStep calls.\n\tReport(Result)\n\n\t// PopStep ascends back up the value tree.\n\t// There is always a matching pop call for every push call.\n\tPopStep()\n}) Option {\n\treturn reporter{r}\n}\n\ntype reporter struct{ reporterIface }\ntype reporterIface interface {\n\tPushStep(PathStep)\n\tReport(Result)\n\tPopStep()\n}\n\nfunc (reporter) filter(_ *state, _ reflect.Type, _, _ reflect.Value) applicableOption {\n\tpanic(\"not implemented\")\n}\n\n// normalizeOption normalizes the input options such that all Options groups\n// are flattened and groups with a single element are reduced to that element.\n// Only coreOptions and Options containing coreOptions are allowed.\nfunc normalizeOption(src Option) Option {\n\tswitch opts := flattenOptions(nil, Options{src}); len(opts) {\n\tcase 0:\n\t\treturn nil\n\tcase 1:\n\t\treturn opts[0]\n\tdefault:\n\t\treturn opts\n\t}\n}\n\n// flattenOptions copies all options in src to dst as a flat list.\n// Only coreOptions and Options containing coreOptions are allowed.\nfunc flattenOptions(dst, src Options) Options {\n\tfor _, opt := range src {\n\t\tswitch opt := opt.(type) {\n\t\tcase nil:\n\t\t\tcontinue\n\t\tcase Options:\n\t\t\tdst = flattenOptions(dst, opt)\n\t\tcase coreOption:\n\t\t\tdst = append(dst, opt)\n\t\tdefault:\n\t\t\tpanic(fmt.Sprintf(\"invalid option type: %T\", opt))\n\t\t}\n\t}\n\treturn dst\n}\n"
  },
  {
    "path": "vendor/github.com/google/go-cmp/cmp/path.go",
    "content": "// Copyright 2017, The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE.md file.\n\npackage cmp\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\t\"strings\"\n\t\"unicode\"\n\t\"unicode/utf8\"\n)\n\n// Path is a list of PathSteps describing the sequence of operations to get\n// from some root type to the current position in the value tree.\n// The first Path element is always an operation-less PathStep that exists\n// simply to identify the initial type.\n//\n// When traversing structs with embedded structs, the embedded struct will\n// always be accessed as a field before traversing the fields of the\n// embedded struct themselves. That is, an exported field from the\n// embedded struct will never be accessed directly from the parent struct.\ntype Path []PathStep\n\n// PathStep is a union-type for specific operations to traverse\n// a value's tree structure. Users of this package never need to implement\n// these types as values of this type will be returned by this package.\n//\n// Implementations of this interface are\n// StructField, SliceIndex, MapIndex, Indirect, TypeAssertion, and Transform.\ntype PathStep interface {\n\tString() string\n\n\t// Type is the resulting type after performing the path step.\n\tType() reflect.Type\n\n\t// Values is the resulting values after performing the path step.\n\t// The type of each valid value is guaranteed to be identical to Type.\n\t//\n\t// In some cases, one or both may be invalid or have restrictions:\n\t//\t• For StructField, both are not interface-able if the current field\n\t//\tis unexported and the struct type is not explicitly permitted by\n\t//\tAllowUnexported to traverse unexported fields.\n\t//\t• For SliceIndex, one may be invalid if an element is missing from\n\t//\teither the x or y slice.\n\t//\t• For MapIndex, one may be invalid if an entry is missing from\n\t//\teither the x or y map.\n\t//\n\t// The provided values must not be mutated.\n\tValues() (vx, vy reflect.Value)\n}\n\nvar (\n\t_ PathStep = StructField{}\n\t_ PathStep = SliceIndex{}\n\t_ PathStep = MapIndex{}\n\t_ PathStep = Indirect{}\n\t_ PathStep = TypeAssertion{}\n\t_ PathStep = Transform{}\n)\n\nfunc (pa *Path) push(s PathStep) {\n\t*pa = append(*pa, s)\n}\n\nfunc (pa *Path) pop() {\n\t*pa = (*pa)[:len(*pa)-1]\n}\n\n// Last returns the last PathStep in the Path.\n// If the path is empty, this returns a non-nil PathStep that reports a nil Type.\nfunc (pa Path) Last() PathStep {\n\treturn pa.Index(-1)\n}\n\n// Index returns the ith step in the Path and supports negative indexing.\n// A negative index starts counting from the tail of the Path such that -1\n// refers to the last step, -2 refers to the second-to-last step, and so on.\n// If index is invalid, this returns a non-nil PathStep that reports a nil Type.\nfunc (pa Path) Index(i int) PathStep {\n\tif i < 0 {\n\t\ti = len(pa) + i\n\t}\n\tif i < 0 || i >= len(pa) {\n\t\treturn pathStep{}\n\t}\n\treturn pa[i]\n}\n\n// String returns the simplified path to a node.\n// The simplified path only contains struct field accesses.\n//\n// For example:\n//\tMyMap.MySlices.MyField\nfunc (pa Path) String() string {\n\tvar ss []string\n\tfor _, s := range pa {\n\t\tif _, ok := s.(StructField); ok {\n\t\t\tss = append(ss, s.String())\n\t\t}\n\t}\n\treturn strings.TrimPrefix(strings.Join(ss, \"\"), \".\")\n}\n\n// GoString returns the path to a specific node using Go syntax.\n//\n// For example:\n//\t(*root.MyMap[\"key\"].(*mypkg.MyStruct).MySlices)[2][3].MyField\nfunc (pa Path) GoString() string {\n\tvar ssPre, ssPost []string\n\tvar numIndirect int\n\tfor i, s := range pa {\n\t\tvar nextStep PathStep\n\t\tif i+1 < len(pa) {\n\t\t\tnextStep = pa[i+1]\n\t\t}\n\t\tswitch s := s.(type) {\n\t\tcase Indirect:\n\t\t\tnumIndirect++\n\t\t\tpPre, pPost := \"(\", \")\"\n\t\t\tswitch nextStep.(type) {\n\t\t\tcase Indirect:\n\t\t\t\tcontinue // Next step is indirection, so let them batch up\n\t\t\tcase StructField:\n\t\t\t\tnumIndirect-- // Automatic indirection on struct fields\n\t\t\tcase nil:\n\t\t\t\tpPre, pPost = \"\", \"\" // Last step; no need for parenthesis\n\t\t\t}\n\t\t\tif numIndirect > 0 {\n\t\t\t\tssPre = append(ssPre, pPre+strings.Repeat(\"*\", numIndirect))\n\t\t\t\tssPost = append(ssPost, pPost)\n\t\t\t}\n\t\t\tnumIndirect = 0\n\t\t\tcontinue\n\t\tcase Transform:\n\t\t\tssPre = append(ssPre, s.trans.name+\"(\")\n\t\t\tssPost = append(ssPost, \")\")\n\t\t\tcontinue\n\t\t}\n\t\tssPost = append(ssPost, s.String())\n\t}\n\tfor i, j := 0, len(ssPre)-1; i < j; i, j = i+1, j-1 {\n\t\tssPre[i], ssPre[j] = ssPre[j], ssPre[i]\n\t}\n\treturn strings.Join(ssPre, \"\") + strings.Join(ssPost, \"\")\n}\n\ntype pathStep struct {\n\ttyp    reflect.Type\n\tvx, vy reflect.Value\n}\n\nfunc (ps pathStep) Type() reflect.Type             { return ps.typ }\nfunc (ps pathStep) Values() (vx, vy reflect.Value) { return ps.vx, ps.vy }\nfunc (ps pathStep) String() string {\n\tif ps.typ == nil {\n\t\treturn \"<nil>\"\n\t}\n\ts := ps.typ.String()\n\tif s == \"\" || strings.ContainsAny(s, \"{}\\n\") {\n\t\treturn \"root\" // Type too simple or complex to print\n\t}\n\treturn fmt.Sprintf(\"{%s}\", s)\n}\n\n// StructField represents a struct field access on a field called Name.\ntype StructField struct{ *structField }\ntype structField struct {\n\tpathStep\n\tname string\n\tidx  int\n\n\t// These fields are used for forcibly accessing an unexported field.\n\t// pvx, pvy, and field are only valid if unexported is true.\n\tunexported bool\n\tmayForce   bool                // Forcibly allow visibility\n\tpvx, pvy   reflect.Value       // Parent values\n\tfield      reflect.StructField // Field information\n}\n\nfunc (sf StructField) Type() reflect.Type { return sf.typ }\nfunc (sf StructField) Values() (vx, vy reflect.Value) {\n\tif !sf.unexported {\n\t\treturn sf.vx, sf.vy // CanInterface reports true\n\t}\n\n\t// Forcibly obtain read-write access to an unexported struct field.\n\tif sf.mayForce {\n\t\tvx = retrieveUnexportedField(sf.pvx, sf.field)\n\t\tvy = retrieveUnexportedField(sf.pvy, sf.field)\n\t\treturn vx, vy // CanInterface reports true\n\t}\n\treturn sf.vx, sf.vy // CanInterface reports false\n}\nfunc (sf StructField) String() string { return fmt.Sprintf(\".%s\", sf.name) }\n\n// Name is the field name.\nfunc (sf StructField) Name() string { return sf.name }\n\n// Index is the index of the field in the parent struct type.\n// See reflect.Type.Field.\nfunc (sf StructField) Index() int { return sf.idx }\n\n// SliceIndex is an index operation on a slice or array at some index Key.\ntype SliceIndex struct{ *sliceIndex }\ntype sliceIndex struct {\n\tpathStep\n\txkey, ykey int\n}\n\nfunc (si SliceIndex) Type() reflect.Type             { return si.typ }\nfunc (si SliceIndex) Values() (vx, vy reflect.Value) { return si.vx, si.vy }\nfunc (si SliceIndex) String() string {\n\tswitch {\n\tcase si.xkey == si.ykey:\n\t\treturn fmt.Sprintf(\"[%d]\", si.xkey)\n\tcase si.ykey == -1:\n\t\t// [5->?] means \"I don't know where X[5] went\"\n\t\treturn fmt.Sprintf(\"[%d->?]\", si.xkey)\n\tcase si.xkey == -1:\n\t\t// [?->3] means \"I don't know where Y[3] came from\"\n\t\treturn fmt.Sprintf(\"[?->%d]\", si.ykey)\n\tdefault:\n\t\t// [5->3] means \"X[5] moved to Y[3]\"\n\t\treturn fmt.Sprintf(\"[%d->%d]\", si.xkey, si.ykey)\n\t}\n}\n\n// Key is the index key; it may return -1 if in a split state\nfunc (si SliceIndex) Key() int {\n\tif si.xkey != si.ykey {\n\t\treturn -1\n\t}\n\treturn si.xkey\n}\n\n// SplitKeys are the indexes for indexing into slices in the\n// x and y values, respectively. These indexes may differ due to the\n// insertion or removal of an element in one of the slices, causing\n// all of the indexes to be shifted. If an index is -1, then that\n// indicates that the element does not exist in the associated slice.\n//\n// Key is guaranteed to return -1 if and only if the indexes returned\n// by SplitKeys are not the same. SplitKeys will never return -1 for\n// both indexes.\nfunc (si SliceIndex) SplitKeys() (ix, iy int) { return si.xkey, si.ykey }\n\n// MapIndex is an index operation on a map at some index Key.\ntype MapIndex struct{ *mapIndex }\ntype mapIndex struct {\n\tpathStep\n\tkey reflect.Value\n}\n\nfunc (mi MapIndex) Type() reflect.Type             { return mi.typ }\nfunc (mi MapIndex) Values() (vx, vy reflect.Value) { return mi.vx, mi.vy }\nfunc (mi MapIndex) String() string                 { return fmt.Sprintf(\"[%#v]\", mi.key) }\n\n// Key is the value of the map key.\nfunc (mi MapIndex) Key() reflect.Value { return mi.key }\n\n// Indirect represents pointer indirection on the parent type.\ntype Indirect struct{ *indirect }\ntype indirect struct {\n\tpathStep\n}\n\nfunc (in Indirect) Type() reflect.Type             { return in.typ }\nfunc (in Indirect) Values() (vx, vy reflect.Value) { return in.vx, in.vy }\nfunc (in Indirect) String() string                 { return \"*\" }\n\n// TypeAssertion represents a type assertion on an interface.\ntype TypeAssertion struct{ *typeAssertion }\ntype typeAssertion struct {\n\tpathStep\n}\n\nfunc (ta TypeAssertion) Type() reflect.Type             { return ta.typ }\nfunc (ta TypeAssertion) Values() (vx, vy reflect.Value) { return ta.vx, ta.vy }\nfunc (ta TypeAssertion) String() string                 { return fmt.Sprintf(\".(%v)\", ta.typ) }\n\n// Transform is a transformation from the parent type to the current type.\ntype Transform struct{ *transform }\ntype transform struct {\n\tpathStep\n\ttrans *transformer\n}\n\nfunc (tf Transform) Type() reflect.Type             { return tf.typ }\nfunc (tf Transform) Values() (vx, vy reflect.Value) { return tf.vx, tf.vy }\nfunc (tf Transform) String() string                 { return fmt.Sprintf(\"%s()\", tf.trans.name) }\n\n// Name is the name of the Transformer.\nfunc (tf Transform) Name() string { return tf.trans.name }\n\n// Func is the function pointer to the transformer function.\nfunc (tf Transform) Func() reflect.Value { return tf.trans.fnc }\n\n// Option returns the originally constructed Transformer option.\n// The == operator can be used to detect the exact option used.\nfunc (tf Transform) Option() Option { return tf.trans }\n\n// isExported reports whether the identifier is exported.\nfunc isExported(id string) bool {\n\tr, _ := utf8.DecodeRuneInString(id)\n\treturn unicode.IsUpper(r)\n}\n"
  },
  {
    "path": "vendor/github.com/google/go-cmp/cmp/report.go",
    "content": "// Copyright 2017, The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE.md file.\n\npackage cmp\n\n// defaultReporter implements the reporter interface.\n//\n// As Equal serially calls the PushStep, Report, and PopStep methods, the\n// defaultReporter constructs a tree-based representation of the compared value\n// and the result of each comparison (see valueNode).\n//\n// When the String method is called, the FormatDiff method transforms the\n// valueNode tree into a textNode tree, which is a tree-based representation\n// of the textual output (see textNode).\n//\n// Lastly, the textNode.String method produces the final report as a string.\ntype defaultReporter struct {\n\troot *valueNode\n\tcurr *valueNode\n}\n\nfunc (r *defaultReporter) PushStep(ps PathStep) {\n\tr.curr = r.curr.PushStep(ps)\n\tif r.root == nil {\n\t\tr.root = r.curr\n\t}\n}\nfunc (r *defaultReporter) Report(rs Result) {\n\tr.curr.Report(rs)\n}\nfunc (r *defaultReporter) PopStep() {\n\tr.curr = r.curr.PopStep()\n}\n\n// String provides a full report of the differences detected as a structured\n// literal in pseudo-Go syntax. String may only be called after the entire tree\n// has been traversed.\nfunc (r *defaultReporter) String() string {\n\tassert(r.root != nil && r.curr == nil)\n\tif r.root.NumDiff == 0 {\n\t\treturn \"\"\n\t}\n\treturn formatOptions{}.FormatDiff(r.root).String()\n}\n\nfunc assert(ok bool) {\n\tif !ok {\n\t\tpanic(\"assertion failure\")\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/google/go-cmp/cmp/report_compare.go",
    "content": "// Copyright 2019, The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE.md file.\n\npackage cmp\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\n\t\"github.com/google/go-cmp/cmp/internal/value\"\n)\n\n// TODO: Enforce limits?\n//\t* Enforce maximum number of records to print per node?\n//\t* Enforce maximum size in bytes allowed?\n//\t* As a heuristic, use less verbosity for equal nodes than unequal nodes.\n// TODO: Enforce unique outputs?\n//\t* Avoid Stringer methods if it results in same output?\n//\t* Print pointer address if outputs still equal?\n\n// numContextRecords is the number of surrounding equal records to print.\nconst numContextRecords = 2\n\ntype diffMode byte\n\nconst (\n\tdiffUnknown   diffMode = 0\n\tdiffIdentical diffMode = ' '\n\tdiffRemoved   diffMode = '-'\n\tdiffInserted  diffMode = '+'\n)\n\ntype typeMode int\n\nconst (\n\t// emitType always prints the type.\n\temitType typeMode = iota\n\t// elideType never prints the type.\n\telideType\n\t// autoType prints the type only for composite kinds\n\t// (i.e., structs, slices, arrays, and maps).\n\tautoType\n)\n\ntype formatOptions struct {\n\t// DiffMode controls the output mode of FormatDiff.\n\t//\n\t// If diffUnknown,   then produce a diff of the x and y values.\n\t// If diffIdentical, then emit values as if they were equal.\n\t// If diffRemoved,   then only emit x values (ignoring y values).\n\t// If diffInserted,  then only emit y values (ignoring x values).\n\tDiffMode diffMode\n\n\t// TypeMode controls whether to print the type for the current node.\n\t//\n\t// As a general rule of thumb, we always print the type of the next node\n\t// after an interface, and always elide the type of the next node after\n\t// a slice or map node.\n\tTypeMode typeMode\n\n\t// formatValueOptions are options specific to printing reflect.Values.\n\tformatValueOptions\n}\n\nfunc (opts formatOptions) WithDiffMode(d diffMode) formatOptions {\n\topts.DiffMode = d\n\treturn opts\n}\nfunc (opts formatOptions) WithTypeMode(t typeMode) formatOptions {\n\topts.TypeMode = t\n\treturn opts\n}\n\n// FormatDiff converts a valueNode tree into a textNode tree, where the later\n// is a textual representation of the differences detected in the former.\nfunc (opts formatOptions) FormatDiff(v *valueNode) textNode {\n\t// Check whether we have specialized formatting for this node.\n\t// This is not necessary, but helpful for producing more readable outputs.\n\tif opts.CanFormatDiffSlice(v) {\n\t\treturn opts.FormatDiffSlice(v)\n\t}\n\n\t// For leaf nodes, format the value based on the reflect.Values alone.\n\tif v.MaxDepth == 0 {\n\t\tswitch opts.DiffMode {\n\t\tcase diffUnknown, diffIdentical:\n\t\t\t// Format Equal.\n\t\t\tif v.NumDiff == 0 {\n\t\t\t\toutx := opts.FormatValue(v.ValueX, visitedPointers{})\n\t\t\t\touty := opts.FormatValue(v.ValueY, visitedPointers{})\n\t\t\t\tif v.NumIgnored > 0 && v.NumSame == 0 {\n\t\t\t\t\treturn textEllipsis\n\t\t\t\t} else if outx.Len() < outy.Len() {\n\t\t\t\t\treturn outx\n\t\t\t\t} else {\n\t\t\t\t\treturn outy\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Format unequal.\n\t\t\tassert(opts.DiffMode == diffUnknown)\n\t\t\tvar list textList\n\t\t\toutx := opts.WithTypeMode(elideType).FormatValue(v.ValueX, visitedPointers{})\n\t\t\touty := opts.WithTypeMode(elideType).FormatValue(v.ValueY, visitedPointers{})\n\t\t\tif outx != nil {\n\t\t\t\tlist = append(list, textRecord{Diff: '-', Value: outx})\n\t\t\t}\n\t\t\tif outy != nil {\n\t\t\t\tlist = append(list, textRecord{Diff: '+', Value: outy})\n\t\t\t}\n\t\t\treturn opts.WithTypeMode(emitType).FormatType(v.Type, list)\n\t\tcase diffRemoved:\n\t\t\treturn opts.FormatValue(v.ValueX, visitedPointers{})\n\t\tcase diffInserted:\n\t\t\treturn opts.FormatValue(v.ValueY, visitedPointers{})\n\t\tdefault:\n\t\t\tpanic(\"invalid diff mode\")\n\t\t}\n\t}\n\n\t// Descend into the child value node.\n\tif v.TransformerName != \"\" {\n\t\tout := opts.WithTypeMode(emitType).FormatDiff(v.Value)\n\t\tout = textWrap{\"Inverse(\" + v.TransformerName + \", \", out, \")\"}\n\t\treturn opts.FormatType(v.Type, out)\n\t} else {\n\t\tswitch k := v.Type.Kind(); k {\n\t\tcase reflect.Struct, reflect.Array, reflect.Slice, reflect.Map:\n\t\t\treturn opts.FormatType(v.Type, opts.formatDiffList(v.Records, k))\n\t\tcase reflect.Ptr:\n\t\t\treturn textWrap{\"&\", opts.FormatDiff(v.Value), \"\"}\n\t\tcase reflect.Interface:\n\t\t\treturn opts.WithTypeMode(emitType).FormatDiff(v.Value)\n\t\tdefault:\n\t\t\tpanic(fmt.Sprintf(\"%v cannot have children\", k))\n\t\t}\n\t}\n}\n\nfunc (opts formatOptions) formatDiffList(recs []reportRecord, k reflect.Kind) textNode {\n\t// Derive record name based on the data structure kind.\n\tvar name string\n\tvar formatKey func(reflect.Value) string\n\tswitch k {\n\tcase reflect.Struct:\n\t\tname = \"field\"\n\t\topts = opts.WithTypeMode(autoType)\n\t\tformatKey = func(v reflect.Value) string { return v.String() }\n\tcase reflect.Slice, reflect.Array:\n\t\tname = \"element\"\n\t\topts = opts.WithTypeMode(elideType)\n\t\tformatKey = func(reflect.Value) string { return \"\" }\n\tcase reflect.Map:\n\t\tname = \"entry\"\n\t\topts = opts.WithTypeMode(elideType)\n\t\tformatKey = formatMapKey\n\t}\n\n\t// Handle unification.\n\tswitch opts.DiffMode {\n\tcase diffIdentical, diffRemoved, diffInserted:\n\t\tvar list textList\n\t\tvar deferredEllipsis bool // Add final \"...\" to indicate records were dropped\n\t\tfor _, r := range recs {\n\t\t\t// Elide struct fields that are zero value.\n\t\t\tif k == reflect.Struct {\n\t\t\t\tvar isZero bool\n\t\t\t\tswitch opts.DiffMode {\n\t\t\t\tcase diffIdentical:\n\t\t\t\t\tisZero = value.IsZero(r.Value.ValueX) || value.IsZero(r.Value.ValueX)\n\t\t\t\tcase diffRemoved:\n\t\t\t\t\tisZero = value.IsZero(r.Value.ValueX)\n\t\t\t\tcase diffInserted:\n\t\t\t\t\tisZero = value.IsZero(r.Value.ValueY)\n\t\t\t\t}\n\t\t\t\tif isZero {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Elide ignored nodes.\n\t\t\tif r.Value.NumIgnored > 0 && r.Value.NumSame+r.Value.NumDiff == 0 {\n\t\t\t\tdeferredEllipsis = !(k == reflect.Slice || k == reflect.Array)\n\t\t\t\tif !deferredEllipsis {\n\t\t\t\t\tlist.AppendEllipsis(diffStats{})\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif out := opts.FormatDiff(r.Value); out != nil {\n\t\t\t\tlist = append(list, textRecord{Key: formatKey(r.Key), Value: out})\n\t\t\t}\n\t\t}\n\t\tif deferredEllipsis {\n\t\t\tlist.AppendEllipsis(diffStats{})\n\t\t}\n\t\treturn textWrap{\"{\", list, \"}\"}\n\tcase diffUnknown:\n\tdefault:\n\t\tpanic(\"invalid diff mode\")\n\t}\n\n\t// Handle differencing.\n\tvar list textList\n\tgroups := coalesceAdjacentRecords(name, recs)\n\tfor i, ds := range groups {\n\t\t// Handle equal records.\n\t\tif ds.NumDiff() == 0 {\n\t\t\t// Compute the number of leading and trailing records to print.\n\t\t\tvar numLo, numHi int\n\t\t\tnumEqual := ds.NumIgnored + ds.NumIdentical\n\t\t\tfor numLo < numContextRecords && numLo+numHi < numEqual && i != 0 {\n\t\t\t\tif r := recs[numLo].Value; r.NumIgnored > 0 && r.NumSame+r.NumDiff == 0 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tnumLo++\n\t\t\t}\n\t\t\tfor numHi < numContextRecords && numLo+numHi < numEqual && i != len(groups)-1 {\n\t\t\t\tif r := recs[numEqual-numHi-1].Value; r.NumIgnored > 0 && r.NumSame+r.NumDiff == 0 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tnumHi++\n\t\t\t}\n\t\t\tif numEqual-(numLo+numHi) == 1 && ds.NumIgnored == 0 {\n\t\t\t\tnumHi++ // Avoid pointless coalescing of a single equal record\n\t\t\t}\n\n\t\t\t// Format the equal values.\n\t\t\tfor _, r := range recs[:numLo] {\n\t\t\t\tout := opts.WithDiffMode(diffIdentical).FormatDiff(r.Value)\n\t\t\t\tlist = append(list, textRecord{Key: formatKey(r.Key), Value: out})\n\t\t\t}\n\t\t\tif numEqual > numLo+numHi {\n\t\t\t\tds.NumIdentical -= numLo + numHi\n\t\t\t\tlist.AppendEllipsis(ds)\n\t\t\t}\n\t\t\tfor _, r := range recs[numEqual-numHi : numEqual] {\n\t\t\t\tout := opts.WithDiffMode(diffIdentical).FormatDiff(r.Value)\n\t\t\t\tlist = append(list, textRecord{Key: formatKey(r.Key), Value: out})\n\t\t\t}\n\t\t\trecs = recs[numEqual:]\n\t\t\tcontinue\n\t\t}\n\n\t\t// Handle unequal records.\n\t\tfor _, r := range recs[:ds.NumDiff()] {\n\t\t\tswitch {\n\t\t\tcase opts.CanFormatDiffSlice(r.Value):\n\t\t\t\tout := opts.FormatDiffSlice(r.Value)\n\t\t\t\tlist = append(list, textRecord{Key: formatKey(r.Key), Value: out})\n\t\t\tcase r.Value.NumChildren == r.Value.MaxDepth:\n\t\t\t\toutx := opts.WithDiffMode(diffRemoved).FormatDiff(r.Value)\n\t\t\t\touty := opts.WithDiffMode(diffInserted).FormatDiff(r.Value)\n\t\t\t\tif outx != nil {\n\t\t\t\t\tlist = append(list, textRecord{Diff: diffRemoved, Key: formatKey(r.Key), Value: outx})\n\t\t\t\t}\n\t\t\t\tif outy != nil {\n\t\t\t\t\tlist = append(list, textRecord{Diff: diffInserted, Key: formatKey(r.Key), Value: outy})\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\tout := opts.FormatDiff(r.Value)\n\t\t\t\tlist = append(list, textRecord{Key: formatKey(r.Key), Value: out})\n\t\t\t}\n\t\t}\n\t\trecs = recs[ds.NumDiff():]\n\t}\n\tassert(len(recs) == 0)\n\treturn textWrap{\"{\", list, \"}\"}\n}\n\n// coalesceAdjacentRecords coalesces the list of records into groups of\n// adjacent equal, or unequal counts.\nfunc coalesceAdjacentRecords(name string, recs []reportRecord) (groups []diffStats) {\n\tvar prevCase int // Arbitrary index into which case last occurred\n\tlastStats := func(i int) *diffStats {\n\t\tif prevCase != i {\n\t\t\tgroups = append(groups, diffStats{Name: name})\n\t\t\tprevCase = i\n\t\t}\n\t\treturn &groups[len(groups)-1]\n\t}\n\tfor _, r := range recs {\n\t\tswitch rv := r.Value; {\n\t\tcase rv.NumIgnored > 0 && rv.NumSame+rv.NumDiff == 0:\n\t\t\tlastStats(1).NumIgnored++\n\t\tcase rv.NumDiff == 0:\n\t\t\tlastStats(1).NumIdentical++\n\t\tcase rv.NumDiff > 0 && !rv.ValueY.IsValid():\n\t\t\tlastStats(2).NumRemoved++\n\t\tcase rv.NumDiff > 0 && !rv.ValueX.IsValid():\n\t\t\tlastStats(2).NumInserted++\n\t\tdefault:\n\t\t\tlastStats(2).NumModified++\n\t\t}\n\t}\n\treturn groups\n}\n"
  },
  {
    "path": "vendor/github.com/google/go-cmp/cmp/report_reflect.go",
    "content": "// Copyright 2019, The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE.md file.\n\npackage cmp\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\t\"strconv\"\n\t\"strings\"\n\t\"unicode\"\n\n\t\"github.com/google/go-cmp/cmp/internal/flags\"\n\t\"github.com/google/go-cmp/cmp/internal/value\"\n)\n\ntype formatValueOptions struct {\n\t// AvoidStringer controls whether to avoid calling custom stringer\n\t// methods like error.Error or fmt.Stringer.String.\n\tAvoidStringer bool\n\n\t// ShallowPointers controls whether to avoid descending into pointers.\n\t// Useful when printing map keys, where pointer comparison is performed\n\t// on the pointer address rather than the pointed-at value.\n\tShallowPointers bool\n\n\t// PrintAddresses controls whether to print the address of all pointers,\n\t// slice elements, and maps.\n\tPrintAddresses bool\n}\n\n// FormatType prints the type as if it were wrapping s.\n// This may return s as-is depending on the current type and TypeMode mode.\nfunc (opts formatOptions) FormatType(t reflect.Type, s textNode) textNode {\n\t// Check whether to emit the type or not.\n\tswitch opts.TypeMode {\n\tcase autoType:\n\t\tswitch t.Kind() {\n\t\tcase reflect.Struct, reflect.Slice, reflect.Array, reflect.Map:\n\t\t\tif s.Equal(textNil) {\n\t\t\t\treturn s\n\t\t\t}\n\t\tdefault:\n\t\t\treturn s\n\t\t}\n\tcase elideType:\n\t\treturn s\n\t}\n\n\t// Determine the type label, applying special handling for unnamed types.\n\ttypeName := t.String()\n\tif t.Name() == \"\" {\n\t\t// According to Go grammar, certain type literals contain symbols that\n\t\t// do not strongly bind to the next lexicographical token (e.g., *T).\n\t\tswitch t.Kind() {\n\t\tcase reflect.Chan, reflect.Func, reflect.Ptr:\n\t\t\ttypeName = \"(\" + typeName + \")\"\n\t\t}\n\t\ttypeName = strings.Replace(typeName, \"struct {\", \"struct{\", -1)\n\t\ttypeName = strings.Replace(typeName, \"interface {\", \"interface{\", -1)\n\t}\n\n\t// Avoid wrap the value in parenthesis if unnecessary.\n\tif s, ok := s.(textWrap); ok {\n\t\thasParens := strings.HasPrefix(s.Prefix, \"(\") && strings.HasSuffix(s.Suffix, \")\")\n\t\thasBraces := strings.HasPrefix(s.Prefix, \"{\") && strings.HasSuffix(s.Suffix, \"}\")\n\t\tif hasParens || hasBraces {\n\t\t\treturn textWrap{typeName, s, \"\"}\n\t\t}\n\t}\n\treturn textWrap{typeName + \"(\", s, \")\"}\n}\n\n// FormatValue prints the reflect.Value, taking extra care to avoid descending\n// into pointers already in m. As pointers are visited, m is also updated.\nfunc (opts formatOptions) FormatValue(v reflect.Value, m visitedPointers) (out textNode) {\n\tif !v.IsValid() {\n\t\treturn nil\n\t}\n\tt := v.Type()\n\n\t// Check whether there is an Error or String method to call.\n\tif !opts.AvoidStringer && v.CanInterface() {\n\t\t// Avoid calling Error or String methods on nil receivers since many\n\t\t// implementations crash when doing so.\n\t\tif (t.Kind() != reflect.Ptr && t.Kind() != reflect.Interface) || !v.IsNil() {\n\t\t\tswitch v := v.Interface().(type) {\n\t\t\tcase error:\n\t\t\t\treturn textLine(\"e\" + formatString(v.Error()))\n\t\t\tcase fmt.Stringer:\n\t\t\t\treturn textLine(\"s\" + formatString(v.String()))\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check whether to explicitly wrap the result with the type.\n\tvar skipType bool\n\tdefer func() {\n\t\tif !skipType {\n\t\t\tout = opts.FormatType(t, out)\n\t\t}\n\t}()\n\n\tvar ptr string\n\tswitch t.Kind() {\n\tcase reflect.Bool:\n\t\treturn textLine(fmt.Sprint(v.Bool()))\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\treturn textLine(fmt.Sprint(v.Int()))\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:\n\t\t// Unnamed uints are usually bytes or words, so use hexadecimal.\n\t\tif t.PkgPath() == \"\" || t.Kind() == reflect.Uintptr {\n\t\t\treturn textLine(formatHex(v.Uint()))\n\t\t}\n\t\treturn textLine(fmt.Sprint(v.Uint()))\n\tcase reflect.Float32, reflect.Float64:\n\t\treturn textLine(fmt.Sprint(v.Float()))\n\tcase reflect.Complex64, reflect.Complex128:\n\t\treturn textLine(fmt.Sprint(v.Complex()))\n\tcase reflect.String:\n\t\treturn textLine(formatString(v.String()))\n\tcase reflect.UnsafePointer, reflect.Chan, reflect.Func:\n\t\treturn textLine(formatPointer(v))\n\tcase reflect.Struct:\n\t\tvar list textList\n\t\tfor i := 0; i < v.NumField(); i++ {\n\t\t\tvv := v.Field(i)\n\t\t\tif value.IsZero(vv) {\n\t\t\t\tcontinue // Elide fields with zero values\n\t\t\t}\n\t\t\ts := opts.WithTypeMode(autoType).FormatValue(vv, m)\n\t\t\tlist = append(list, textRecord{Key: t.Field(i).Name, Value: s})\n\t\t}\n\t\treturn textWrap{\"{\", list, \"}\"}\n\tcase reflect.Slice:\n\t\tif v.IsNil() {\n\t\t\treturn textNil\n\t\t}\n\t\tif opts.PrintAddresses {\n\t\t\tptr = formatPointer(v)\n\t\t}\n\t\tfallthrough\n\tcase reflect.Array:\n\t\tvar list textList\n\t\tfor i := 0; i < v.Len(); i++ {\n\t\t\tvi := v.Index(i)\n\t\t\tif vi.CanAddr() { // Check for cyclic elements\n\t\t\t\tp := vi.Addr()\n\t\t\t\tif m.Visit(p) {\n\t\t\t\t\tvar out textNode\n\t\t\t\t\tout = textLine(formatPointer(p))\n\t\t\t\t\tout = opts.WithTypeMode(emitType).FormatType(p.Type(), out)\n\t\t\t\t\tout = textWrap{\"*\", out, \"\"}\n\t\t\t\t\tlist = append(list, textRecord{Value: out})\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\t\t\ts := opts.WithTypeMode(elideType).FormatValue(vi, m)\n\t\t\tlist = append(list, textRecord{Value: s})\n\t\t}\n\t\treturn textWrap{ptr + \"{\", list, \"}\"}\n\tcase reflect.Map:\n\t\tif v.IsNil() {\n\t\t\treturn textNil\n\t\t}\n\t\tif m.Visit(v) {\n\t\t\treturn textLine(formatPointer(v))\n\t\t}\n\n\t\tvar list textList\n\t\tfor _, k := range value.SortKeys(v.MapKeys()) {\n\t\t\tsk := formatMapKey(k)\n\t\t\tsv := opts.WithTypeMode(elideType).FormatValue(v.MapIndex(k), m)\n\t\t\tlist = append(list, textRecord{Key: sk, Value: sv})\n\t\t}\n\t\tif opts.PrintAddresses {\n\t\t\tptr = formatPointer(v)\n\t\t}\n\t\treturn textWrap{ptr + \"{\", list, \"}\"}\n\tcase reflect.Ptr:\n\t\tif v.IsNil() {\n\t\t\treturn textNil\n\t\t}\n\t\tif m.Visit(v) || opts.ShallowPointers {\n\t\t\treturn textLine(formatPointer(v))\n\t\t}\n\t\tif opts.PrintAddresses {\n\t\t\tptr = formatPointer(v)\n\t\t}\n\t\tskipType = true // Let the underlying value print the type instead\n\t\treturn textWrap{\"&\" + ptr, opts.FormatValue(v.Elem(), m), \"\"}\n\tcase reflect.Interface:\n\t\tif v.IsNil() {\n\t\t\treturn textNil\n\t\t}\n\t\t// Interfaces accept different concrete types,\n\t\t// so configure the underlying value to explicitly print the type.\n\t\tskipType = true // Print the concrete type instead\n\t\treturn opts.WithTypeMode(emitType).FormatValue(v.Elem(), m)\n\tdefault:\n\t\tpanic(fmt.Sprintf(\"%v kind not handled\", v.Kind()))\n\t}\n}\n\n// formatMapKey formats v as if it were a map key.\n// The result is guaranteed to be a single line.\nfunc formatMapKey(v reflect.Value) string {\n\tvar opts formatOptions\n\topts.TypeMode = elideType\n\topts.ShallowPointers = true\n\ts := opts.FormatValue(v, visitedPointers{}).String()\n\treturn strings.TrimSpace(s)\n}\n\n// formatString prints s as a double-quoted or backtick-quoted string.\nfunc formatString(s string) string {\n\t// Use quoted string if it the same length as a raw string literal.\n\t// Otherwise, attempt to use the raw string form.\n\tqs := strconv.Quote(s)\n\tif len(qs) == 1+len(s)+1 {\n\t\treturn qs\n\t}\n\n\t// Disallow newlines to ensure output is a single line.\n\t// Only allow printable runes for readability purposes.\n\trawInvalid := func(r rune) bool {\n\t\treturn r == '`' || r == '\\n' || !(unicode.IsPrint(r) || r == '\\t')\n\t}\n\tif strings.IndexFunc(s, rawInvalid) < 0 {\n\t\treturn \"`\" + s + \"`\"\n\t}\n\treturn qs\n}\n\n// formatHex prints u as a hexadecimal integer in Go notation.\nfunc formatHex(u uint64) string {\n\tvar f string\n\tswitch {\n\tcase u <= 0xff:\n\t\tf = \"0x%02x\"\n\tcase u <= 0xffff:\n\t\tf = \"0x%04x\"\n\tcase u <= 0xffffff:\n\t\tf = \"0x%06x\"\n\tcase u <= 0xffffffff:\n\t\tf = \"0x%08x\"\n\tcase u <= 0xffffffffff:\n\t\tf = \"0x%010x\"\n\tcase u <= 0xffffffffffff:\n\t\tf = \"0x%012x\"\n\tcase u <= 0xffffffffffffff:\n\t\tf = \"0x%014x\"\n\tcase u <= 0xffffffffffffffff:\n\t\tf = \"0x%016x\"\n\t}\n\treturn fmt.Sprintf(f, u)\n}\n\n// formatPointer prints the address of the pointer.\nfunc formatPointer(v reflect.Value) string {\n\tp := v.Pointer()\n\tif flags.Deterministic {\n\t\tp = 0xdeadf00f // Only used for stable testing purposes\n\t}\n\treturn fmt.Sprintf(\"⟪0x%x⟫\", p)\n}\n\ntype visitedPointers map[value.Pointer]struct{}\n\n// Visit inserts pointer v into the visited map and reports whether it had\n// already been visited before.\nfunc (m visitedPointers) Visit(v reflect.Value) bool {\n\tp := value.PointerOf(v)\n\t_, visited := m[p]\n\tm[p] = struct{}{}\n\treturn visited\n}\n"
  },
  {
    "path": "vendor/github.com/google/go-cmp/cmp/report_slices.go",
    "content": "// Copyright 2019, The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE.md file.\n\npackage cmp\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"strings\"\n\t\"unicode\"\n\t\"unicode/utf8\"\n\n\t\"github.com/google/go-cmp/cmp/internal/diff\"\n)\n\n// CanFormatDiffSlice reports whether we support custom formatting for nodes\n// that are slices of primitive kinds or strings.\nfunc (opts formatOptions) CanFormatDiffSlice(v *valueNode) bool {\n\tswitch {\n\tcase opts.DiffMode != diffUnknown:\n\t\treturn false // Must be formatting in diff mode\n\tcase v.NumDiff == 0:\n\t\treturn false // No differences detected\n\tcase v.NumIgnored+v.NumCompared+v.NumTransformed > 0:\n\t\t// TODO: Handle the case where someone uses bytes.Equal on a large slice.\n\t\treturn false // Some custom option was used to determined equality\n\tcase !v.ValueX.IsValid() || !v.ValueY.IsValid():\n\t\treturn false // Both values must be valid\n\t}\n\n\tswitch t := v.Type; t.Kind() {\n\tcase reflect.String:\n\tcase reflect.Array, reflect.Slice:\n\t\t// Only slices of primitive types have specialized handling.\n\t\tswitch t.Elem().Kind() {\n\t\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64,\n\t\t\treflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr,\n\t\t\treflect.Bool, reflect.Float32, reflect.Float64, reflect.Complex64, reflect.Complex128:\n\t\tdefault:\n\t\t\treturn false\n\t\t}\n\n\t\t// If a sufficient number of elements already differ,\n\t\t// use specialized formatting even if length requirement is not met.\n\t\tif v.NumDiff > v.NumSame {\n\t\t\treturn true\n\t\t}\n\tdefault:\n\t\treturn false\n\t}\n\n\t// Use specialized string diffing for longer slices or strings.\n\tconst minLength = 64\n\treturn v.ValueX.Len() >= minLength && v.ValueY.Len() >= minLength\n}\n\n// FormatDiffSlice prints a diff for the slices (or strings) represented by v.\n// This provides custom-tailored logic to make printing of differences in\n// textual strings and slices of primitive kinds more readable.\nfunc (opts formatOptions) FormatDiffSlice(v *valueNode) textNode {\n\tassert(opts.DiffMode == diffUnknown)\n\tt, vx, vy := v.Type, v.ValueX, v.ValueY\n\n\t// Auto-detect the type of the data.\n\tvar isLinedText, isText, isBinary bool\n\tvar sx, sy string\n\tswitch {\n\tcase t.Kind() == reflect.String:\n\t\tsx, sy = vx.String(), vy.String()\n\t\tisText = true // Initial estimate, verify later\n\tcase t.Kind() == reflect.Slice && t.Elem() == reflect.TypeOf(byte(0)):\n\t\tsx, sy = string(vx.Bytes()), string(vy.Bytes())\n\t\tisBinary = true // Initial estimate, verify later\n\tcase t.Kind() == reflect.Array:\n\t\t// Arrays need to be addressable for slice operations to work.\n\t\tvx2, vy2 := reflect.New(t).Elem(), reflect.New(t).Elem()\n\t\tvx2.Set(vx)\n\t\tvy2.Set(vy)\n\t\tvx, vy = vx2, vy2\n\t}\n\tif isText || isBinary {\n\t\tvar numLines, lastLineIdx, maxLineLen int\n\t\tisBinary = false\n\t\tfor i, r := range sx + sy {\n\t\t\tif !(unicode.IsPrint(r) || unicode.IsSpace(r)) || r == utf8.RuneError {\n\t\t\t\tisBinary = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif r == '\\n' {\n\t\t\t\tif maxLineLen < i-lastLineIdx {\n\t\t\t\t\tlastLineIdx = i - lastLineIdx\n\t\t\t\t}\n\t\t\t\tlastLineIdx = i + 1\n\t\t\t\tnumLines++\n\t\t\t}\n\t\t}\n\t\tisText = !isBinary\n\t\tisLinedText = isText && numLines >= 4 && maxLineLen <= 256\n\t}\n\n\t// Format the string into printable records.\n\tvar list textList\n\tvar delim string\n\tswitch {\n\t// If the text appears to be multi-lined text,\n\t// then perform differencing across individual lines.\n\tcase isLinedText:\n\t\tssx := strings.Split(sx, \"\\n\")\n\t\tssy := strings.Split(sy, \"\\n\")\n\t\tlist = opts.formatDiffSlice(\n\t\t\treflect.ValueOf(ssx), reflect.ValueOf(ssy), 1, \"line\",\n\t\t\tfunc(v reflect.Value, d diffMode) textRecord {\n\t\t\t\ts := formatString(v.Index(0).String())\n\t\t\t\treturn textRecord{Diff: d, Value: textLine(s)}\n\t\t\t},\n\t\t)\n\t\tdelim = \"\\n\"\n\t// If the text appears to be single-lined text,\n\t// then perform differencing in approximately fixed-sized chunks.\n\t// The output is printed as quoted strings.\n\tcase isText:\n\t\tlist = opts.formatDiffSlice(\n\t\t\treflect.ValueOf(sx), reflect.ValueOf(sy), 64, \"byte\",\n\t\t\tfunc(v reflect.Value, d diffMode) textRecord {\n\t\t\t\ts := formatString(v.String())\n\t\t\t\treturn textRecord{Diff: d, Value: textLine(s)}\n\t\t\t},\n\t\t)\n\t\tdelim = \"\"\n\t// If the text appears to be binary data,\n\t// then perform differencing in approximately fixed-sized chunks.\n\t// The output is inspired by hexdump.\n\tcase isBinary:\n\t\tlist = opts.formatDiffSlice(\n\t\t\treflect.ValueOf(sx), reflect.ValueOf(sy), 16, \"byte\",\n\t\t\tfunc(v reflect.Value, d diffMode) textRecord {\n\t\t\t\tvar ss []string\n\t\t\t\tfor i := 0; i < v.Len(); i++ {\n\t\t\t\t\tss = append(ss, formatHex(v.Index(i).Uint()))\n\t\t\t\t}\n\t\t\t\ts := strings.Join(ss, \", \")\n\t\t\t\tcomment := commentString(fmt.Sprintf(\"%c|%v|\", d, formatASCII(v.String())))\n\t\t\t\treturn textRecord{Diff: d, Value: textLine(s), Comment: comment}\n\t\t\t},\n\t\t)\n\t// For all other slices of primitive types,\n\t// then perform differencing in approximately fixed-sized chunks.\n\t// The size of each chunk depends on the width of the element kind.\n\tdefault:\n\t\tvar chunkSize int\n\t\tif t.Elem().Kind() == reflect.Bool {\n\t\t\tchunkSize = 16\n\t\t} else {\n\t\t\tswitch t.Elem().Bits() {\n\t\t\tcase 8:\n\t\t\t\tchunkSize = 16\n\t\t\tcase 16:\n\t\t\t\tchunkSize = 12\n\t\t\tcase 32:\n\t\t\t\tchunkSize = 8\n\t\t\tdefault:\n\t\t\t\tchunkSize = 8\n\t\t\t}\n\t\t}\n\t\tlist = opts.formatDiffSlice(\n\t\t\tvx, vy, chunkSize, t.Elem().Kind().String(),\n\t\t\tfunc(v reflect.Value, d diffMode) textRecord {\n\t\t\t\tvar ss []string\n\t\t\t\tfor i := 0; i < v.Len(); i++ {\n\t\t\t\t\tswitch t.Elem().Kind() {\n\t\t\t\t\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\t\t\t\t\tss = append(ss, fmt.Sprint(v.Index(i).Int()))\n\t\t\t\t\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:\n\t\t\t\t\t\tss = append(ss, formatHex(v.Index(i).Uint()))\n\t\t\t\t\tcase reflect.Bool, reflect.Float32, reflect.Float64, reflect.Complex64, reflect.Complex128:\n\t\t\t\t\t\tss = append(ss, fmt.Sprint(v.Index(i).Interface()))\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ts := strings.Join(ss, \", \")\n\t\t\t\treturn textRecord{Diff: d, Value: textLine(s)}\n\t\t\t},\n\t\t)\n\t}\n\n\t// Wrap the output with appropriate type information.\n\tvar out textNode = textWrap{\"{\", list, \"}\"}\n\tif !isText {\n\t\t// The \"{...}\" byte-sequence literal is not valid Go syntax for strings.\n\t\t// Emit the type for extra clarity (e.g. \"string{...}\").\n\t\tif t.Kind() == reflect.String {\n\t\t\topts = opts.WithTypeMode(emitType)\n\t\t}\n\t\treturn opts.FormatType(t, out)\n\t}\n\tswitch t.Kind() {\n\tcase reflect.String:\n\t\tout = textWrap{\"strings.Join(\", out, fmt.Sprintf(\", %q)\", delim)}\n\t\tif t != reflect.TypeOf(string(\"\")) {\n\t\t\tout = opts.FormatType(t, out)\n\t\t}\n\tcase reflect.Slice:\n\t\tout = textWrap{\"bytes.Join(\", out, fmt.Sprintf(\", %q)\", delim)}\n\t\tif t != reflect.TypeOf([]byte(nil)) {\n\t\t\tout = opts.FormatType(t, out)\n\t\t}\n\t}\n\treturn out\n}\n\n// formatASCII formats s as an ASCII string.\n// This is useful for printing binary strings in a semi-legible way.\nfunc formatASCII(s string) string {\n\tb := bytes.Repeat([]byte{'.'}, len(s))\n\tfor i := 0; i < len(s); i++ {\n\t\tif ' ' <= s[i] && s[i] <= '~' {\n\t\t\tb[i] = s[i]\n\t\t}\n\t}\n\treturn string(b)\n}\n\nfunc (opts formatOptions) formatDiffSlice(\n\tvx, vy reflect.Value, chunkSize int, name string,\n\tmakeRec func(reflect.Value, diffMode) textRecord,\n) (list textList) {\n\tes := diff.Difference(vx.Len(), vy.Len(), func(ix int, iy int) diff.Result {\n\t\treturn diff.BoolResult(vx.Index(ix).Interface() == vy.Index(iy).Interface())\n\t})\n\n\tappendChunks := func(v reflect.Value, d diffMode) int {\n\t\tn0 := v.Len()\n\t\tfor v.Len() > 0 {\n\t\t\tn := chunkSize\n\t\t\tif n > v.Len() {\n\t\t\t\tn = v.Len()\n\t\t\t}\n\t\t\tlist = append(list, makeRec(v.Slice(0, n), d))\n\t\t\tv = v.Slice(n, v.Len())\n\t\t}\n\t\treturn n0 - v.Len()\n\t}\n\n\tgroups := coalesceAdjacentEdits(name, es)\n\tgroups = coalesceInterveningIdentical(groups, chunkSize/4)\n\tfor i, ds := range groups {\n\t\t// Print equal.\n\t\tif ds.NumDiff() == 0 {\n\t\t\t// Compute the number of leading and trailing equal bytes to print.\n\t\t\tvar numLo, numHi int\n\t\t\tnumEqual := ds.NumIgnored + ds.NumIdentical\n\t\t\tfor numLo < chunkSize*numContextRecords && numLo+numHi < numEqual && i != 0 {\n\t\t\t\tnumLo++\n\t\t\t}\n\t\t\tfor numHi < chunkSize*numContextRecords && numLo+numHi < numEqual && i != len(groups)-1 {\n\t\t\t\tnumHi++\n\t\t\t}\n\t\t\tif numEqual-(numLo+numHi) <= chunkSize && ds.NumIgnored == 0 {\n\t\t\t\tnumHi = numEqual - numLo // Avoid pointless coalescing of single equal row\n\t\t\t}\n\n\t\t\t// Print the equal bytes.\n\t\t\tappendChunks(vx.Slice(0, numLo), diffIdentical)\n\t\t\tif numEqual > numLo+numHi {\n\t\t\t\tds.NumIdentical -= numLo + numHi\n\t\t\t\tlist.AppendEllipsis(ds)\n\t\t\t}\n\t\t\tappendChunks(vx.Slice(numEqual-numHi, numEqual), diffIdentical)\n\t\t\tvx = vx.Slice(numEqual, vx.Len())\n\t\t\tvy = vy.Slice(numEqual, vy.Len())\n\t\t\tcontinue\n\t\t}\n\n\t\t// Print unequal.\n\t\tnx := appendChunks(vx.Slice(0, ds.NumIdentical+ds.NumRemoved+ds.NumModified), diffRemoved)\n\t\tvx = vx.Slice(nx, vx.Len())\n\t\tny := appendChunks(vy.Slice(0, ds.NumIdentical+ds.NumInserted+ds.NumModified), diffInserted)\n\t\tvy = vy.Slice(ny, vy.Len())\n\t}\n\tassert(vx.Len() == 0 && vy.Len() == 0)\n\treturn list\n}\n\n// coalesceAdjacentEdits coalesces the list of edits into groups of adjacent\n// equal or unequal counts.\nfunc coalesceAdjacentEdits(name string, es diff.EditScript) (groups []diffStats) {\n\tvar prevCase int // Arbitrary index into which case last occurred\n\tlastStats := func(i int) *diffStats {\n\t\tif prevCase != i {\n\t\t\tgroups = append(groups, diffStats{Name: name})\n\t\t\tprevCase = i\n\t\t}\n\t\treturn &groups[len(groups)-1]\n\t}\n\tfor _, e := range es {\n\t\tswitch e {\n\t\tcase diff.Identity:\n\t\t\tlastStats(1).NumIdentical++\n\t\tcase diff.UniqueX:\n\t\t\tlastStats(2).NumRemoved++\n\t\tcase diff.UniqueY:\n\t\t\tlastStats(2).NumInserted++\n\t\tcase diff.Modified:\n\t\t\tlastStats(2).NumModified++\n\t\t}\n\t}\n\treturn groups\n}\n\n// coalesceInterveningIdentical coalesces sufficiently short (<= windowSize)\n// equal groups into adjacent unequal groups that currently result in a\n// dual inserted/removed printout. This acts as a high-pass filter to smooth\n// out high-frequency changes within the windowSize.\nfunc coalesceInterveningIdentical(groups []diffStats, windowSize int) []diffStats {\n\tgroups, groupsOrig := groups[:0], groups\n\tfor i, ds := range groupsOrig {\n\t\tif len(groups) >= 2 && ds.NumDiff() > 0 {\n\t\t\tprev := &groups[len(groups)-2] // Unequal group\n\t\t\tcurr := &groups[len(groups)-1] // Equal group\n\t\t\tnext := &groupsOrig[i]         // Unequal group\n\t\t\thadX, hadY := prev.NumRemoved > 0, prev.NumInserted > 0\n\t\t\thasX, hasY := next.NumRemoved > 0, next.NumInserted > 0\n\t\t\tif ((hadX || hasX) && (hadY || hasY)) && curr.NumIdentical <= windowSize {\n\t\t\t\t*prev = (*prev).Append(*curr).Append(*next)\n\t\t\t\tgroups = groups[:len(groups)-1] // Truncate off equal group\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\t\tgroups = append(groups, ds)\n\t}\n\treturn groups\n}\n"
  },
  {
    "path": "vendor/github.com/google/go-cmp/cmp/report_text.go",
    "content": "// Copyright 2019, The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE.md file.\n\npackage cmp\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"math/rand\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/google/go-cmp/cmp/internal/flags\"\n)\n\nvar randBool = rand.New(rand.NewSource(time.Now().Unix())).Intn(2) == 0\n\ntype indentMode int\n\nfunc (n indentMode) appendIndent(b []byte, d diffMode) []byte {\n\tif flags.Deterministic || randBool {\n\t\t// Use regular spaces (U+0020).\n\t\tswitch d {\n\t\tcase diffUnknown, diffIdentical:\n\t\t\tb = append(b, \"  \"...)\n\t\tcase diffRemoved:\n\t\t\tb = append(b, \"- \"...)\n\t\tcase diffInserted:\n\t\t\tb = append(b, \"+ \"...)\n\t\t}\n\t} else {\n\t\t// Use non-breaking spaces (U+00a0).\n\t\tswitch d {\n\t\tcase diffUnknown, diffIdentical:\n\t\t\tb = append(b, \"  \"...)\n\t\tcase diffRemoved:\n\t\t\tb = append(b, \"- \"...)\n\t\tcase diffInserted:\n\t\t\tb = append(b, \"+ \"...)\n\t\t}\n\t}\n\treturn repeatCount(n).appendChar(b, '\\t')\n}\n\ntype repeatCount int\n\nfunc (n repeatCount) appendChar(b []byte, c byte) []byte {\n\tfor ; n > 0; n-- {\n\t\tb = append(b, c)\n\t}\n\treturn b\n}\n\n// textNode is a simplified tree-based representation of structured text.\n// Possible node types are textWrap, textList, or textLine.\ntype textNode interface {\n\t// Len reports the length in bytes of a single-line version of the tree.\n\t// Nested textRecord.Diff and textRecord.Comment fields are ignored.\n\tLen() int\n\t// Equal reports whether the two trees are structurally identical.\n\t// Nested textRecord.Diff and textRecord.Comment fields are compared.\n\tEqual(textNode) bool\n\t// String returns the string representation of the text tree.\n\t// It is not guaranteed that len(x.String()) == x.Len(),\n\t// nor that x.String() == y.String() implies that x.Equal(y).\n\tString() string\n\n\t// formatCompactTo formats the contents of the tree as a single-line string\n\t// to the provided buffer. Any nested textRecord.Diff and textRecord.Comment\n\t// fields are ignored.\n\t//\n\t// However, not all nodes in the tree should be collapsed as a single-line.\n\t// If a node can be collapsed as a single-line, it is replaced by a textLine\n\t// node. Since the top-level node cannot replace itself, this also returns\n\t// the current node itself.\n\t//\n\t// This does not mutate the receiver.\n\tformatCompactTo([]byte, diffMode) ([]byte, textNode)\n\t// formatExpandedTo formats the contents of the tree as a multi-line string\n\t// to the provided buffer. In order for column alignment to operate well,\n\t// formatCompactTo must be called before calling formatExpandedTo.\n\tformatExpandedTo([]byte, diffMode, indentMode) []byte\n}\n\n// textWrap is a wrapper that concatenates a prefix and/or a suffix\n// to the underlying node.\ntype textWrap struct {\n\tPrefix string   // e.g., \"bytes.Buffer{\"\n\tValue  textNode // textWrap | textList | textLine\n\tSuffix string   // e.g., \"}\"\n}\n\nfunc (s textWrap) Len() int {\n\treturn len(s.Prefix) + s.Value.Len() + len(s.Suffix)\n}\nfunc (s1 textWrap) Equal(s2 textNode) bool {\n\tif s2, ok := s2.(textWrap); ok {\n\t\treturn s1.Prefix == s2.Prefix && s1.Value.Equal(s2.Value) && s1.Suffix == s2.Suffix\n\t}\n\treturn false\n}\nfunc (s textWrap) String() string {\n\tvar d diffMode\n\tvar n indentMode\n\t_, s2 := s.formatCompactTo(nil, d)\n\tb := n.appendIndent(nil, d)      // Leading indent\n\tb = s2.formatExpandedTo(b, d, n) // Main body\n\tb = append(b, '\\n')              // Trailing newline\n\treturn string(b)\n}\nfunc (s textWrap) formatCompactTo(b []byte, d diffMode) ([]byte, textNode) {\n\tn0 := len(b) // Original buffer length\n\tb = append(b, s.Prefix...)\n\tb, s.Value = s.Value.formatCompactTo(b, d)\n\tb = append(b, s.Suffix...)\n\tif _, ok := s.Value.(textLine); ok {\n\t\treturn b, textLine(b[n0:])\n\t}\n\treturn b, s\n}\nfunc (s textWrap) formatExpandedTo(b []byte, d diffMode, n indentMode) []byte {\n\tb = append(b, s.Prefix...)\n\tb = s.Value.formatExpandedTo(b, d, n)\n\tb = append(b, s.Suffix...)\n\treturn b\n}\n\n// textList is a comma-separated list of textWrap or textLine nodes.\n// The list may be formatted as multi-lines or single-line at the discretion\n// of the textList.formatCompactTo method.\ntype textList []textRecord\ntype textRecord struct {\n\tDiff    diffMode     // e.g., 0 or '-' or '+'\n\tKey     string       // e.g., \"MyField\"\n\tValue   textNode     // textWrap | textLine\n\tComment fmt.Stringer // e.g., \"6 identical fields\"\n}\n\n// AppendEllipsis appends a new ellipsis node to the list if none already\n// exists at the end. If cs is non-zero it coalesces the statistics with the\n// previous diffStats.\nfunc (s *textList) AppendEllipsis(ds diffStats) {\n\thasStats := ds != diffStats{}\n\tif len(*s) == 0 || !(*s)[len(*s)-1].Value.Equal(textEllipsis) {\n\t\tif hasStats {\n\t\t\t*s = append(*s, textRecord{Value: textEllipsis, Comment: ds})\n\t\t} else {\n\t\t\t*s = append(*s, textRecord{Value: textEllipsis})\n\t\t}\n\t\treturn\n\t}\n\tif hasStats {\n\t\t(*s)[len(*s)-1].Comment = (*s)[len(*s)-1].Comment.(diffStats).Append(ds)\n\t}\n}\n\nfunc (s textList) Len() (n int) {\n\tfor i, r := range s {\n\t\tn += len(r.Key)\n\t\tif r.Key != \"\" {\n\t\t\tn += len(\": \")\n\t\t}\n\t\tn += r.Value.Len()\n\t\tif i < len(s)-1 {\n\t\t\tn += len(\", \")\n\t\t}\n\t}\n\treturn n\n}\n\nfunc (s1 textList) Equal(s2 textNode) bool {\n\tif s2, ok := s2.(textList); ok {\n\t\tif len(s1) != len(s2) {\n\t\t\treturn false\n\t\t}\n\t\tfor i := range s1 {\n\t\t\tr1, r2 := s1[i], s2[i]\n\t\t\tif !(r1.Diff == r2.Diff && r1.Key == r2.Key && r1.Value.Equal(r2.Value) && r1.Comment == r2.Comment) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc (s textList) String() string {\n\treturn textWrap{\"{\", s, \"}\"}.String()\n}\n\nfunc (s textList) formatCompactTo(b []byte, d diffMode) ([]byte, textNode) {\n\ts = append(textList(nil), s...) // Avoid mutating original\n\n\t// Determine whether we can collapse this list as a single line.\n\tn0 := len(b) // Original buffer length\n\tvar multiLine bool\n\tfor i, r := range s {\n\t\tif r.Diff == diffInserted || r.Diff == diffRemoved {\n\t\t\tmultiLine = true\n\t\t}\n\t\tb = append(b, r.Key...)\n\t\tif r.Key != \"\" {\n\t\t\tb = append(b, \": \"...)\n\t\t}\n\t\tb, s[i].Value = r.Value.formatCompactTo(b, d|r.Diff)\n\t\tif _, ok := s[i].Value.(textLine); !ok {\n\t\t\tmultiLine = true\n\t\t}\n\t\tif r.Comment != nil {\n\t\t\tmultiLine = true\n\t\t}\n\t\tif i < len(s)-1 {\n\t\t\tb = append(b, \", \"...)\n\t\t}\n\t}\n\t// Force multi-lined output when printing a removed/inserted node that\n\t// is sufficiently long.\n\tif (d == diffInserted || d == diffRemoved) && len(b[n0:]) > 80 {\n\t\tmultiLine = true\n\t}\n\tif !multiLine {\n\t\treturn b, textLine(b[n0:])\n\t}\n\treturn b, s\n}\n\nfunc (s textList) formatExpandedTo(b []byte, d diffMode, n indentMode) []byte {\n\talignKeyLens := s.alignLens(\n\t\tfunc(r textRecord) bool {\n\t\t\t_, isLine := r.Value.(textLine)\n\t\t\treturn r.Key == \"\" || !isLine\n\t\t},\n\t\tfunc(r textRecord) int { return len(r.Key) },\n\t)\n\talignValueLens := s.alignLens(\n\t\tfunc(r textRecord) bool {\n\t\t\t_, isLine := r.Value.(textLine)\n\t\t\treturn !isLine || r.Value.Equal(textEllipsis) || r.Comment == nil\n\t\t},\n\t\tfunc(r textRecord) int { return len(r.Value.(textLine)) },\n\t)\n\n\t// Format the list as a multi-lined output.\n\tn++\n\tfor i, r := range s {\n\t\tb = n.appendIndent(append(b, '\\n'), d|r.Diff)\n\t\tif r.Key != \"\" {\n\t\t\tb = append(b, r.Key+\": \"...)\n\t\t}\n\t\tb = alignKeyLens[i].appendChar(b, ' ')\n\n\t\tb = r.Value.formatExpandedTo(b, d|r.Diff, n)\n\t\tif !r.Value.Equal(textEllipsis) {\n\t\t\tb = append(b, ',')\n\t\t}\n\t\tb = alignValueLens[i].appendChar(b, ' ')\n\n\t\tif r.Comment != nil {\n\t\t\tb = append(b, \" // \"+r.Comment.String()...)\n\t\t}\n\t}\n\tn--\n\n\treturn n.appendIndent(append(b, '\\n'), d)\n}\n\nfunc (s textList) alignLens(\n\tskipFunc func(textRecord) bool,\n\tlenFunc func(textRecord) int,\n) []repeatCount {\n\tvar startIdx, endIdx, maxLen int\n\tlens := make([]repeatCount, len(s))\n\tfor i, r := range s {\n\t\tif skipFunc(r) {\n\t\t\tfor j := startIdx; j < endIdx && j < len(s); j++ {\n\t\t\t\tlens[j] = repeatCount(maxLen - lenFunc(s[j]))\n\t\t\t}\n\t\t\tstartIdx, endIdx, maxLen = i+1, i+1, 0\n\t\t} else {\n\t\t\tif maxLen < lenFunc(r) {\n\t\t\t\tmaxLen = lenFunc(r)\n\t\t\t}\n\t\t\tendIdx = i + 1\n\t\t}\n\t}\n\tfor j := startIdx; j < endIdx && j < len(s); j++ {\n\t\tlens[j] = repeatCount(maxLen - lenFunc(s[j]))\n\t}\n\treturn lens\n}\n\n// textLine is a single-line segment of text and is always a leaf node\n// in the textNode tree.\ntype textLine []byte\n\nvar (\n\ttextNil      = textLine(\"nil\")\n\ttextEllipsis = textLine(\"...\")\n)\n\nfunc (s textLine) Len() int {\n\treturn len(s)\n}\nfunc (s1 textLine) Equal(s2 textNode) bool {\n\tif s2, ok := s2.(textLine); ok {\n\t\treturn bytes.Equal([]byte(s1), []byte(s2))\n\t}\n\treturn false\n}\nfunc (s textLine) String() string {\n\treturn string(s)\n}\nfunc (s textLine) formatCompactTo(b []byte, d diffMode) ([]byte, textNode) {\n\treturn append(b, s...), s\n}\nfunc (s textLine) formatExpandedTo(b []byte, _ diffMode, _ indentMode) []byte {\n\treturn append(b, s...)\n}\n\ntype diffStats struct {\n\tName         string\n\tNumIgnored   int\n\tNumIdentical int\n\tNumRemoved   int\n\tNumInserted  int\n\tNumModified  int\n}\n\nfunc (s diffStats) NumDiff() int {\n\treturn s.NumRemoved + s.NumInserted + s.NumModified\n}\n\nfunc (s diffStats) Append(ds diffStats) diffStats {\n\tassert(s.Name == ds.Name)\n\ts.NumIgnored += ds.NumIgnored\n\ts.NumIdentical += ds.NumIdentical\n\ts.NumRemoved += ds.NumRemoved\n\ts.NumInserted += ds.NumInserted\n\ts.NumModified += ds.NumModified\n\treturn s\n}\n\n// String prints a humanly-readable summary of coalesced records.\n//\n// Example:\n//\tdiffStats{Name: \"Field\", NumIgnored: 5}.String() => \"5 ignored fields\"\nfunc (s diffStats) String() string {\n\tvar ss []string\n\tvar sum int\n\tlabels := [...]string{\"ignored\", \"identical\", \"removed\", \"inserted\", \"modified\"}\n\tcounts := [...]int{s.NumIgnored, s.NumIdentical, s.NumRemoved, s.NumInserted, s.NumModified}\n\tfor i, n := range counts {\n\t\tif n > 0 {\n\t\t\tss = append(ss, fmt.Sprintf(\"%d %v\", n, labels[i]))\n\t\t}\n\t\tsum += n\n\t}\n\n\t// Pluralize the name (adjusting for some obscure English grammar rules).\n\tname := s.Name\n\tif sum > 1 {\n\t\tname = name + \"s\"\n\t\tif strings.HasSuffix(name, \"ys\") {\n\t\t\tname = name[:len(name)-2] + \"ies\" // e.g., \"entrys\" => \"entries\"\n\t\t}\n\t}\n\n\t// Format the list according to English grammar (with Oxford comma).\n\tswitch n := len(ss); n {\n\tcase 0:\n\t\treturn \"\"\n\tcase 1, 2:\n\t\treturn strings.Join(ss, \" and \") + \" \" + name\n\tdefault:\n\t\treturn strings.Join(ss[:n-1], \", \") + \", and \" + ss[n-1] + \" \" + name\n\t}\n}\n\ntype commentString string\n\nfunc (s commentString) String() string { return string(s) }\n"
  },
  {
    "path": "vendor/github.com/google/go-cmp/cmp/report_value.go",
    "content": "// Copyright 2019, The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE.md file.\n\npackage cmp\n\nimport \"reflect\"\n\n// valueNode represents a single node within a report, which is a\n// structured representation of the value tree, containing information\n// regarding which nodes are equal or not.\ntype valueNode struct {\n\tparent *valueNode\n\n\tType   reflect.Type\n\tValueX reflect.Value\n\tValueY reflect.Value\n\n\t// NumSame is the number of leaf nodes that are equal.\n\t// All descendants are equal only if NumDiff is 0.\n\tNumSame int\n\t// NumDiff is the number of leaf nodes that are not equal.\n\tNumDiff int\n\t// NumIgnored is the number of leaf nodes that are ignored.\n\tNumIgnored int\n\t// NumCompared is the number of leaf nodes that were compared\n\t// using an Equal method or Comparer function.\n\tNumCompared int\n\t// NumTransformed is the number of non-leaf nodes that were transformed.\n\tNumTransformed int\n\t// NumChildren is the number of transitive descendants of this node.\n\t// This counts from zero; thus, leaf nodes have no descendants.\n\tNumChildren int\n\t// MaxDepth is the maximum depth of the tree. This counts from zero;\n\t// thus, leaf nodes have a depth of zero.\n\tMaxDepth int\n\n\t// Records is a list of struct fields, slice elements, or map entries.\n\tRecords []reportRecord // If populated, implies Value is not populated\n\n\t// Value is the result of a transformation, pointer indirect, of\n\t// type assertion.\n\tValue *valueNode // If populated, implies Records is not populated\n\n\t// TransformerName is the name of the transformer.\n\tTransformerName string // If non-empty, implies Value is populated\n}\ntype reportRecord struct {\n\tKey   reflect.Value // Invalid for slice element\n\tValue *valueNode\n}\n\nfunc (parent *valueNode) PushStep(ps PathStep) (child *valueNode) {\n\tvx, vy := ps.Values()\n\tchild = &valueNode{parent: parent, Type: ps.Type(), ValueX: vx, ValueY: vy}\n\tswitch s := ps.(type) {\n\tcase StructField:\n\t\tassert(parent.Value == nil)\n\t\tparent.Records = append(parent.Records, reportRecord{Key: reflect.ValueOf(s.Name()), Value: child})\n\tcase SliceIndex:\n\t\tassert(parent.Value == nil)\n\t\tparent.Records = append(parent.Records, reportRecord{Value: child})\n\tcase MapIndex:\n\t\tassert(parent.Value == nil)\n\t\tparent.Records = append(parent.Records, reportRecord{Key: s.Key(), Value: child})\n\tcase Indirect:\n\t\tassert(parent.Value == nil && parent.Records == nil)\n\t\tparent.Value = child\n\tcase TypeAssertion:\n\t\tassert(parent.Value == nil && parent.Records == nil)\n\t\tparent.Value = child\n\tcase Transform:\n\t\tassert(parent.Value == nil && parent.Records == nil)\n\t\tparent.Value = child\n\t\tparent.TransformerName = s.Name()\n\t\tparent.NumTransformed++\n\tdefault:\n\t\tassert(parent == nil) // Must be the root step\n\t}\n\treturn child\n}\n\nfunc (r *valueNode) Report(rs Result) {\n\tassert(r.MaxDepth == 0) // May only be called on leaf nodes\n\n\tif rs.ByIgnore() {\n\t\tr.NumIgnored++\n\t} else {\n\t\tif rs.Equal() {\n\t\t\tr.NumSame++\n\t\t} else {\n\t\t\tr.NumDiff++\n\t\t}\n\t}\n\tassert(r.NumSame+r.NumDiff+r.NumIgnored == 1)\n\n\tif rs.ByMethod() {\n\t\tr.NumCompared++\n\t}\n\tif rs.ByFunc() {\n\t\tr.NumCompared++\n\t}\n\tassert(r.NumCompared <= 1)\n}\n\nfunc (child *valueNode) PopStep() (parent *valueNode) {\n\tif child.parent == nil {\n\t\treturn nil\n\t}\n\tparent = child.parent\n\tparent.NumSame += child.NumSame\n\tparent.NumDiff += child.NumDiff\n\tparent.NumIgnored += child.NumIgnored\n\tparent.NumCompared += child.NumCompared\n\tparent.NumTransformed += child.NumTransformed\n\tparent.NumChildren += child.NumChildren + 1\n\tif parent.MaxDepth < child.MaxDepth+1 {\n\t\tparent.MaxDepth = child.MaxDepth + 1\n\t}\n\treturn parent\n}\n"
  },
  {
    "path": "vendor/github.com/googleapis/gax-go/LICENSE",
    "content": "Copyright 2016, Google Inc.\nAll rights reserved.\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "vendor/github.com/googleapis/gax-go/v2/call_option.go",
    "content": "// Copyright 2016, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\npackage gax\n\nimport (\n\t\"math/rand\"\n\t\"time\"\n\n\t\"google.golang.org/grpc\"\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/status\"\n)\n\n// CallOption is an option used by Invoke to control behaviors of RPC calls.\n// CallOption works by modifying relevant fields of CallSettings.\ntype CallOption interface {\n\t// Resolve applies the option by modifying cs.\n\tResolve(cs *CallSettings)\n}\n\n// Retryer is used by Invoke to determine retry behavior.\ntype Retryer interface {\n\t// Retry reports whether a request should be retriedand how long to pause before retrying\n\t// if the previous attempt returned with err. Invoke never calls Retry with nil error.\n\tRetry(err error) (pause time.Duration, shouldRetry bool)\n}\n\ntype retryerOption func() Retryer\n\nfunc (o retryerOption) Resolve(s *CallSettings) {\n\ts.Retry = o\n}\n\n// WithRetry sets CallSettings.Retry to fn.\nfunc WithRetry(fn func() Retryer) CallOption {\n\treturn retryerOption(fn)\n}\n\n// OnCodes returns a Retryer that retries if and only if\n// the previous attempt returns a GRPC error whose error code is stored in cc.\n// Pause times between retries are specified by bo.\n//\n// bo is only used for its parameters; each Retryer has its own copy.\nfunc OnCodes(cc []codes.Code, bo Backoff) Retryer {\n\treturn &boRetryer{\n\t\tbackoff: bo,\n\t\tcodes:   append([]codes.Code(nil), cc...),\n\t}\n}\n\ntype boRetryer struct {\n\tbackoff Backoff\n\tcodes   []codes.Code\n}\n\nfunc (r *boRetryer) Retry(err error) (time.Duration, bool) {\n\tst, ok := status.FromError(err)\n\tif !ok {\n\t\treturn 0, false\n\t}\n\tc := st.Code()\n\tfor _, rc := range r.codes {\n\t\tif c == rc {\n\t\t\treturn r.backoff.Pause(), true\n\t\t}\n\t}\n\treturn 0, false\n}\n\n// Backoff implements exponential backoff.\n// The wait time between retries is a random value between 0 and the \"retry envelope\".\n// The envelope starts at Initial and increases by the factor of Multiplier every retry,\n// but is capped at Max.\ntype Backoff struct {\n\t// Initial is the initial value of the retry envelope, defaults to 1 second.\n\tInitial time.Duration\n\n\t// Max is the maximum value of the retry envelope, defaults to 30 seconds.\n\tMax time.Duration\n\n\t// Multiplier is the factor by which the retry envelope increases.\n\t// It should be greater than 1 and defaults to 2.\n\tMultiplier float64\n\n\t// cur is the current retry envelope\n\tcur time.Duration\n}\n\n// Pause returns the next time.Duration that the caller should use to backoff.\nfunc (bo *Backoff) Pause() time.Duration {\n\tif bo.Initial == 0 {\n\t\tbo.Initial = time.Second\n\t}\n\tif bo.cur == 0 {\n\t\tbo.cur = bo.Initial\n\t}\n\tif bo.Max == 0 {\n\t\tbo.Max = 30 * time.Second\n\t}\n\tif bo.Multiplier < 1 {\n\t\tbo.Multiplier = 2\n\t}\n\t// Select a duration between 1ns and the current max. It might seem\n\t// counterintuitive to have so much jitter, but\n\t// https://www.awsarchitectureblog.com/2015/03/backoff.html argues that\n\t// that is the best strategy.\n\td := time.Duration(1 + rand.Int63n(int64(bo.cur)))\n\tbo.cur = time.Duration(float64(bo.cur) * bo.Multiplier)\n\tif bo.cur > bo.Max {\n\t\tbo.cur = bo.Max\n\t}\n\treturn d\n}\n\ntype grpcOpt []grpc.CallOption\n\nfunc (o grpcOpt) Resolve(s *CallSettings) {\n\ts.GRPC = o\n}\n\n// WithGRPCOptions allows passing gRPC call options during client creation.\nfunc WithGRPCOptions(opt ...grpc.CallOption) CallOption {\n\treturn grpcOpt(append([]grpc.CallOption(nil), opt...))\n}\n\n// CallSettings allow fine-grained control over how calls are made.\ntype CallSettings struct {\n\t// Retry returns a Retryer to be used to control retry logic of a method call.\n\t// If Retry is nil or the returned Retryer is nil, the call will not be retried.\n\tRetry func() Retryer\n\n\t// CallOptions to be forwarded to GRPC.\n\tGRPC []grpc.CallOption\n}\n"
  },
  {
    "path": "vendor/github.com/googleapis/gax-go/v2/gax.go",
    "content": "// Copyright 2016, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n// Package gax contains a set of modules which aid the development of APIs\n// for clients and servers based on gRPC and Google API conventions.\n//\n// Application code will rarely need to use this library directly.\n// However, code generated automatically from API definition files can use it\n// to simplify code generation and to provide more convenient and idiomatic API surfaces.\npackage gax\n\n// Version specifies the gax-go version being used.\nconst Version = \"2.0.4\"\n"
  },
  {
    "path": "vendor/github.com/googleapis/gax-go/v2/header.go",
    "content": "// Copyright 2018, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\npackage gax\n\nimport \"bytes\"\n\n// XGoogHeader is for use by the Google Cloud Libraries only.\n//\n// XGoogHeader formats key-value pairs.\n// The resulting string is suitable for x-goog-api-client header.\nfunc XGoogHeader(keyval ...string) string {\n\tif len(keyval) == 0 {\n\t\treturn \"\"\n\t}\n\tif len(keyval)%2 != 0 {\n\t\tpanic(\"gax.Header: odd argument count\")\n\t}\n\tvar buf bytes.Buffer\n\tfor i := 0; i < len(keyval); i += 2 {\n\t\tbuf.WriteByte(' ')\n\t\tbuf.WriteString(keyval[i])\n\t\tbuf.WriteByte('/')\n\t\tbuf.WriteString(keyval[i+1])\n\t}\n\treturn buf.String()[1:]\n}\n"
  },
  {
    "path": "vendor/github.com/googleapis/gax-go/v2/invoke.go",
    "content": "// Copyright 2016, Google Inc.\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n//     * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n//     * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n//     * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\npackage gax\n\nimport (\n\t\"context\"\n\t\"strings\"\n\t\"time\"\n)\n\n// APICall is a user defined call stub.\ntype APICall func(context.Context, CallSettings) error\n\n// Invoke calls the given APICall,\n// performing retries as specified by opts, if any.\nfunc Invoke(ctx context.Context, call APICall, opts ...CallOption) error {\n\tvar settings CallSettings\n\tfor _, opt := range opts {\n\t\topt.Resolve(&settings)\n\t}\n\treturn invoke(ctx, call, settings, Sleep)\n}\n\n// Sleep is similar to time.Sleep, but it can be interrupted by ctx.Done() closing.\n// If interrupted, Sleep returns ctx.Err().\nfunc Sleep(ctx context.Context, d time.Duration) error {\n\tt := time.NewTimer(d)\n\tselect {\n\tcase <-ctx.Done():\n\t\tt.Stop()\n\t\treturn ctx.Err()\n\tcase <-t.C:\n\t\treturn nil\n\t}\n}\n\ntype sleeper func(ctx context.Context, d time.Duration) error\n\n// invoke implements Invoke, taking an additional sleeper argument for testing.\nfunc invoke(ctx context.Context, call APICall, settings CallSettings, sp sleeper) error {\n\tvar retryer Retryer\n\tfor {\n\t\terr := call(ctx, settings)\n\t\tif err == nil {\n\t\t\treturn nil\n\t\t}\n\t\tif settings.Retry == nil {\n\t\t\treturn err\n\t\t}\n\t\t// Never retry permanent certificate errors. (e.x. if ca-certificates\n\t\t// are not installed). We should only make very few, targeted\n\t\t// exceptions: many (other) status=Unavailable should be retried, such\n\t\t// as if there's a network hiccup, or the internet goes out for a\n\t\t// minute. This is also why here we are doing string parsing instead of\n\t\t// simply making Unavailable a non-retried code elsewhere.\n\t\tif strings.Contains(err.Error(), \"x509: certificate signed by unknown authority\") {\n\t\t\treturn err\n\t\t}\n\t\tif retryer == nil {\n\t\t\tif r := settings.Retry(); r != nil {\n\t\t\t\tretryer = r\n\t\t\t} else {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t\tif d, ok := retryer.Retry(err); !ok {\n\t\t\treturn err\n\t\t} else if err = sp(ctx, d); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/errwrap/LICENSE",
    "content": "Mozilla Public License, version 2.0\n\n1. Definitions\n\n1.1. “Contributor”\n\n     means each individual or legal entity that creates, contributes to the\n     creation of, or owns Covered Software.\n\n1.2. “Contributor Version”\n\n     means the combination of the Contributions of others (if any) used by a\n     Contributor and that particular Contributor’s Contribution.\n\n1.3. “Contribution”\n\n     means Covered Software of a particular Contributor.\n\n1.4. “Covered Software”\n\n     means Source Code Form to which the initial Contributor has attached the\n     notice in Exhibit A, the Executable Form of such Source Code Form, and\n     Modifications of such Source Code Form, in each case including portions\n     thereof.\n\n1.5. “Incompatible With Secondary Licenses”\n     means\n\n     a. that the initial Contributor has attached the notice described in\n        Exhibit B to the Covered Software; or\n\n     b. that the Covered Software was made available under the terms of version\n        1.1 or earlier of the License, but not also under the terms of a\n        Secondary License.\n\n1.6. “Executable Form”\n\n     means any form of the work other than Source Code Form.\n\n1.7. “Larger Work”\n\n     means a work that combines Covered Software with other material, in a separate\n     file or files, that is not Covered Software.\n\n1.8. “License”\n\n     means this document.\n\n1.9. “Licensable”\n\n     means having the right to grant, to the maximum extent possible, whether at the\n     time of the initial grant or subsequently, any and all of the rights conveyed by\n     this License.\n\n1.10. “Modifications”\n\n     means any of the following:\n\n     a. any file in Source Code Form that results from an addition to, deletion\n        from, or modification of the contents of Covered Software; or\n\n     b. any new file in Source Code Form that contains any Covered Software.\n\n1.11. “Patent Claims” of a Contributor\n\n      means any patent claim(s), including without limitation, method, process,\n      and apparatus claims, in any patent Licensable by such Contributor that\n      would be infringed, but for the grant of the License, by the making,\n      using, selling, offering for sale, having made, import, or transfer of\n      either its Contributions or its Contributor Version.\n\n1.12. “Secondary License”\n\n      means either the GNU General Public License, Version 2.0, the GNU Lesser\n      General Public License, Version 2.1, the GNU Affero General Public\n      License, Version 3.0, or any later versions of those licenses.\n\n1.13. “Source Code Form”\n\n      means the form of the work preferred for making modifications.\n\n1.14. “You” (or “Your”)\n\n      means an individual or a legal entity exercising rights under this\n      License. For legal entities, “You” includes any entity that controls, is\n      controlled by, or is under common control with You. For purposes of this\n      definition, “control” means (a) the power, direct or indirect, to cause\n      the direction or management of such entity, whether by contract or\n      otherwise, or (b) ownership of more than fifty percent (50%) of the\n      outstanding shares or beneficial ownership of such entity.\n\n\n2. License Grants and Conditions\n\n2.1. Grants\n\n     Each Contributor hereby grants You a world-wide, royalty-free,\n     non-exclusive license:\n\n     a. under intellectual property rights (other than patent or trademark)\n        Licensable by such Contributor to use, reproduce, make available,\n        modify, display, perform, distribute, and otherwise exploit its\n        Contributions, either on an unmodified basis, with Modifications, or as\n        part of a Larger Work; and\n\n     b. under Patent Claims of such Contributor to make, use, sell, offer for\n        sale, have made, import, and otherwise transfer either its Contributions\n        or its Contributor Version.\n\n2.2. Effective Date\n\n     The licenses granted in Section 2.1 with respect to any Contribution become\n     effective for each Contribution on the date the Contributor first distributes\n     such Contribution.\n\n2.3. Limitations on Grant Scope\n\n     The licenses granted in this Section 2 are the only rights granted under this\n     License. No additional rights or licenses will be implied from the distribution\n     or licensing of Covered Software under this License. Notwithstanding Section\n     2.1(b) above, no patent license is granted by a Contributor:\n\n     a. for any code that a Contributor has removed from Covered Software; or\n\n     b. for infringements caused by: (i) Your and any other third party’s\n        modifications of Covered Software, or (ii) the combination of its\n        Contributions with other software (except as part of its Contributor\n        Version); or\n\n     c. under Patent Claims infringed by Covered Software in the absence of its\n        Contributions.\n\n     This License does not grant any rights in the trademarks, service marks, or\n     logos of any Contributor (except as may be necessary to comply with the\n     notice requirements in Section 3.4).\n\n2.4. Subsequent Licenses\n\n     No Contributor makes additional grants as a result of Your choice to\n     distribute the Covered Software under a subsequent version of this License\n     (see Section 10.2) or under the terms of a Secondary License (if permitted\n     under the terms of Section 3.3).\n\n2.5. Representation\n\n     Each Contributor represents that the Contributor believes its Contributions\n     are its original creation(s) or it has sufficient rights to grant the\n     rights to its Contributions conveyed by this License.\n\n2.6. Fair Use\n\n     This License is not intended to limit any rights You have under applicable\n     copyright doctrines of fair use, fair dealing, or other equivalents.\n\n2.7. Conditions\n\n     Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in\n     Section 2.1.\n\n\n3. Responsibilities\n\n3.1. Distribution of Source Form\n\n     All distribution of Covered Software in Source Code Form, including any\n     Modifications that You create or to which You contribute, must be under the\n     terms of this License. You must inform recipients that the Source Code Form\n     of the Covered Software is governed by the terms of this License, and how\n     they can obtain a copy of this License. You may not attempt to alter or\n     restrict the recipients’ rights in the Source Code Form.\n\n3.2. Distribution of Executable Form\n\n     If You distribute Covered Software in Executable Form then:\n\n     a. such Covered Software must also be made available in Source Code Form,\n        as described in Section 3.1, and You must inform recipients of the\n        Executable Form how they can obtain a copy of such Source Code Form by\n        reasonable means in a timely manner, at a charge no more than the cost\n        of distribution to the recipient; and\n\n     b. You may distribute such Executable Form under the terms of this License,\n        or sublicense it under different terms, provided that the license for\n        the Executable Form does not attempt to limit or alter the recipients’\n        rights in the Source Code Form under this License.\n\n3.3. Distribution of a Larger Work\n\n     You may create and distribute a Larger Work under terms of Your choice,\n     provided that You also comply with the requirements of this License for the\n     Covered Software. If the Larger Work is a combination of Covered Software\n     with a work governed by one or more Secondary Licenses, and the Covered\n     Software is not Incompatible With Secondary Licenses, this License permits\n     You to additionally distribute such Covered Software under the terms of\n     such Secondary License(s), so that the recipient of the Larger Work may, at\n     their option, further distribute the Covered Software under the terms of\n     either this License or such Secondary License(s).\n\n3.4. Notices\n\n     You may not remove or alter the substance of any license notices (including\n     copyright notices, patent notices, disclaimers of warranty, or limitations\n     of liability) contained within the Source Code Form of the Covered\n     Software, except that You may alter any license notices to the extent\n     required to remedy known factual inaccuracies.\n\n3.5. Application of Additional Terms\n\n     You may choose to offer, and to charge a fee for, warranty, support,\n     indemnity or liability obligations to one or more recipients of Covered\n     Software. However, You may do so only on Your own behalf, and not on behalf\n     of any Contributor. You must make it absolutely clear that any such\n     warranty, support, indemnity, or liability obligation is offered by You\n     alone, and You hereby agree to indemnify every Contributor for any\n     liability incurred by such Contributor as a result of warranty, support,\n     indemnity or liability terms You offer. You may include additional\n     disclaimers of warranty and limitations of liability specific to any\n     jurisdiction.\n\n4. Inability to Comply Due to Statute or Regulation\n\n   If it is impossible for You to comply with any of the terms of this License\n   with respect to some or all of the Covered Software due to statute, judicial\n   order, or regulation then You must: (a) comply with the terms of this License\n   to the maximum extent possible; and (b) describe the limitations and the code\n   they affect. Such description must be placed in a text file included with all\n   distributions of the Covered Software under this License. Except to the\n   extent prohibited by statute or regulation, such description must be\n   sufficiently detailed for a recipient of ordinary skill to be able to\n   understand it.\n\n5. Termination\n\n5.1. The rights granted under this License will terminate automatically if You\n     fail to comply with any of its terms. However, if You become compliant,\n     then the rights granted under this License from a particular Contributor\n     are reinstated (a) provisionally, unless and until such Contributor\n     explicitly and finally terminates Your grants, and (b) on an ongoing basis,\n     if such Contributor fails to notify You of the non-compliance by some\n     reasonable means prior to 60 days after You have come back into compliance.\n     Moreover, Your grants from a particular Contributor are reinstated on an\n     ongoing basis if such Contributor notifies You of the non-compliance by\n     some reasonable means, this is the first time You have received notice of\n     non-compliance with this License from such Contributor, and You become\n     compliant prior to 30 days after Your receipt of the notice.\n\n5.2. If You initiate litigation against any entity by asserting a patent\n     infringement claim (excluding declaratory judgment actions, counter-claims,\n     and cross-claims) alleging that a Contributor Version directly or\n     indirectly infringes any patent, then the rights granted to You by any and\n     all Contributors for the Covered Software under Section 2.1 of this License\n     shall terminate.\n\n5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user\n     license agreements (excluding distributors and resellers) which have been\n     validly granted by You or Your distributors under this License prior to\n     termination shall survive termination.\n\n6. Disclaimer of Warranty\n\n   Covered Software is provided under this License on an “as is” basis, without\n   warranty of any kind, either expressed, implied, or statutory, including,\n   without limitation, warranties that the Covered Software is free of defects,\n   merchantable, fit for a particular purpose or non-infringing. The entire\n   risk as to the quality and performance of the Covered Software is with You.\n   Should any Covered Software prove defective in any respect, You (not any\n   Contributor) assume the cost of any necessary servicing, repair, or\n   correction. This disclaimer of warranty constitutes an essential part of this\n   License. No use of  any Covered Software is authorized under this License\n   except under this disclaimer.\n\n7. Limitation of Liability\n\n   Under no circumstances and under no legal theory, whether tort (including\n   negligence), contract, or otherwise, shall any Contributor, or anyone who\n   distributes Covered Software as permitted above, be liable to You for any\n   direct, indirect, special, incidental, or consequential damages of any\n   character including, without limitation, damages for lost profits, loss of\n   goodwill, work stoppage, computer failure or malfunction, or any and all\n   other commercial damages or losses, even if such party shall have been\n   informed of the possibility of such damages. This limitation of liability\n   shall not apply to liability for death or personal injury resulting from such\n   party’s negligence to the extent applicable law prohibits such limitation.\n   Some jurisdictions do not allow the exclusion or limitation of incidental or\n   consequential damages, so this exclusion and limitation may not apply to You.\n\n8. Litigation\n\n   Any litigation relating to this License may be brought only in the courts of\n   a jurisdiction where the defendant maintains its principal place of business\n   and such litigation shall be governed by laws of that jurisdiction, without\n   reference to its conflict-of-law provisions. Nothing in this Section shall\n   prevent a party’s ability to bring cross-claims or counter-claims.\n\n9. Miscellaneous\n\n   This License represents the complete agreement concerning the subject matter\n   hereof. If any provision of this License is held to be unenforceable, such\n   provision shall be reformed only to the extent necessary to make it\n   enforceable. Any law or regulation which provides that the language of a\n   contract shall be construed against the drafter shall not be used to construe\n   this License against a Contributor.\n\n\n10. Versions of the License\n\n10.1. New Versions\n\n      Mozilla Foundation is the license steward. Except as provided in Section\n      10.3, no one other than the license steward has the right to modify or\n      publish new versions of this License. Each version will be given a\n      distinguishing version number.\n\n10.2. Effect of New Versions\n\n      You may distribute the Covered Software under the terms of the version of\n      the License under which You originally received the Covered Software, or\n      under the terms of any subsequent version published by the license\n      steward.\n\n10.3. Modified Versions\n\n      If you create software not governed by this License, and you want to\n      create a new license for such software, you may create and use a modified\n      version of this License if you rename the license and remove any\n      references to the name of the license steward (except to note that such\n      modified license differs from this License).\n\n10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses\n      If You choose to distribute Source Code Form that is Incompatible With\n      Secondary Licenses under the terms of this version of the License, the\n      notice described in Exhibit B of this License must be attached.\n\nExhibit A - Source Code Form License Notice\n\n      This Source Code Form is subject to the\n      terms of the Mozilla Public License, v.\n      2.0. If a copy of the MPL was not\n      distributed with this file, You can\n      obtain one at\n      http://mozilla.org/MPL/2.0/.\n\nIf it is not possible or desirable to put the notice in a particular file, then\nYou may include the notice in a location (such as a LICENSE file in a relevant\ndirectory) where a recipient would be likely to look for such a notice.\n\nYou may add additional accurate notices of copyright ownership.\n\nExhibit B - “Incompatible With Secondary Licenses” Notice\n\n      This Source Code Form is “Incompatible\n      With Secondary Licenses”, as defined by\n      the Mozilla Public License, v. 2.0.\n\n"
  },
  {
    "path": "vendor/github.com/hashicorp/errwrap/errwrap.go",
    "content": "// Package errwrap implements methods to formalize error wrapping in Go.\n//\n// All of the top-level functions that take an `error` are built to be able\n// to take any error, not just wrapped errors. This allows you to use errwrap\n// without having to type-check and type-cast everywhere.\npackage errwrap\n\nimport (\n\t\"errors\"\n\t\"reflect\"\n\t\"strings\"\n)\n\n// WalkFunc is the callback called for Walk.\ntype WalkFunc func(error)\n\n// Wrapper is an interface that can be implemented by custom types to\n// have all the Contains, Get, etc. functions in errwrap work.\n//\n// When Walk reaches a Wrapper, it will call the callback for every\n// wrapped error in addition to the wrapper itself. Since all the top-level\n// functions in errwrap use Walk, this means that all those functions work\n// with your custom type.\ntype Wrapper interface {\n\tWrappedErrors() []error\n}\n\n// Wrap defines that outer wraps inner, returning an error type that\n// can be cleanly used with the other methods in this package, such as\n// Contains, GetAll, etc.\n//\n// This function won't modify the error message at all (the outer message\n// will be used).\nfunc Wrap(outer, inner error) error {\n\treturn &wrappedError{\n\t\tOuter: outer,\n\t\tInner: inner,\n\t}\n}\n\n// Wrapf wraps an error with a formatting message. This is similar to using\n// `fmt.Errorf` to wrap an error. If you're using `fmt.Errorf` to wrap\n// errors, you should replace it with this.\n//\n// format is the format of the error message. The string '{{err}}' will\n// be replaced with the original error message.\nfunc Wrapf(format string, err error) error {\n\touterMsg := \"<nil>\"\n\tif err != nil {\n\t\touterMsg = err.Error()\n\t}\n\n\touter := errors.New(strings.Replace(\n\t\tformat, \"{{err}}\", outerMsg, -1))\n\n\treturn Wrap(outer, err)\n}\n\n// Contains checks if the given error contains an error with the\n// message msg. If err is not a wrapped error, this will always return\n// false unless the error itself happens to match this msg.\nfunc Contains(err error, msg string) bool {\n\treturn len(GetAll(err, msg)) > 0\n}\n\n// ContainsType checks if the given error contains an error with\n// the same concrete type as v. If err is not a wrapped error, this will\n// check the err itself.\nfunc ContainsType(err error, v interface{}) bool {\n\treturn len(GetAllType(err, v)) > 0\n}\n\n// Get is the same as GetAll but returns the deepest matching error.\nfunc Get(err error, msg string) error {\n\tes := GetAll(err, msg)\n\tif len(es) > 0 {\n\t\treturn es[len(es)-1]\n\t}\n\n\treturn nil\n}\n\n// GetType is the same as GetAllType but returns the deepest matching error.\nfunc GetType(err error, v interface{}) error {\n\tes := GetAllType(err, v)\n\tif len(es) > 0 {\n\t\treturn es[len(es)-1]\n\t}\n\n\treturn nil\n}\n\n// GetAll gets all the errors that might be wrapped in err with the\n// given message. The order of the errors is such that the outermost\n// matching error (the most recent wrap) is index zero, and so on.\nfunc GetAll(err error, msg string) []error {\n\tvar result []error\n\n\tWalk(err, func(err error) {\n\t\tif err.Error() == msg {\n\t\t\tresult = append(result, err)\n\t\t}\n\t})\n\n\treturn result\n}\n\n// GetAllType gets all the errors that are the same type as v.\n//\n// The order of the return value is the same as described in GetAll.\nfunc GetAllType(err error, v interface{}) []error {\n\tvar result []error\n\n\tvar search string\n\tif v != nil {\n\t\tsearch = reflect.TypeOf(v).String()\n\t}\n\tWalk(err, func(err error) {\n\t\tvar needle string\n\t\tif err != nil {\n\t\t\tneedle = reflect.TypeOf(err).String()\n\t\t}\n\n\t\tif needle == search {\n\t\t\tresult = append(result, err)\n\t\t}\n\t})\n\n\treturn result\n}\n\n// Walk walks all the wrapped errors in err and calls the callback. If\n// err isn't a wrapped error, this will be called once for err. If err\n// is a wrapped error, the callback will be called for both the wrapper\n// that implements error as well as the wrapped error itself.\nfunc Walk(err error, cb WalkFunc) {\n\tif err == nil {\n\t\treturn\n\t}\n\n\tswitch e := err.(type) {\n\tcase *wrappedError:\n\t\tcb(e.Outer)\n\t\tWalk(e.Inner, cb)\n\tcase Wrapper:\n\t\tcb(err)\n\n\t\tfor _, err := range e.WrappedErrors() {\n\t\t\tWalk(err, cb)\n\t\t}\n\tdefault:\n\t\tcb(err)\n\t}\n}\n\n// wrappedError is an implementation of error that has both the\n// outer and inner errors.\ntype wrappedError struct {\n\tOuter error\n\tInner error\n}\n\nfunc (w *wrappedError) Error() string {\n\treturn w.Outer.Error()\n}\n\nfunc (w *wrappedError) WrappedErrors() []error {\n\treturn []error{w.Outer, w.Inner}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-cleanhttp/LICENSE",
    "content": "Mozilla Public License, version 2.0\n\n1. Definitions\n\n1.1. \"Contributor\"\n\n     means each individual or legal entity that creates, contributes to the\n     creation of, or owns Covered Software.\n\n1.2. \"Contributor Version\"\n\n     means the combination of the Contributions of others (if any) used by a\n     Contributor and that particular Contributor's Contribution.\n\n1.3. \"Contribution\"\n\n     means Covered Software of a particular Contributor.\n\n1.4. \"Covered Software\"\n\n     means Source Code Form to which the initial Contributor has attached the\n     notice in Exhibit A, the Executable Form of such Source Code Form, and\n     Modifications of such Source Code Form, in each case including portions\n     thereof.\n\n1.5. \"Incompatible With Secondary Licenses\"\n     means\n\n     a. that the initial Contributor has attached the notice described in\n        Exhibit B to the Covered Software; or\n\n     b. that the Covered Software was made available under the terms of\n        version 1.1 or earlier of the License, but not also under the terms of\n        a Secondary License.\n\n1.6. \"Executable Form\"\n\n     means any form of the work other than Source Code Form.\n\n1.7. \"Larger Work\"\n\n     means a work that combines Covered Software with other material, in a\n     separate file or files, that is not Covered Software.\n\n1.8. \"License\"\n\n     means this document.\n\n1.9. \"Licensable\"\n\n     means having the right to grant, to the maximum extent possible, whether\n     at the time of the initial grant or subsequently, any and all of the\n     rights conveyed by this License.\n\n1.10. \"Modifications\"\n\n     means any of the following:\n\n     a. any file in Source Code Form that results from an addition to,\n        deletion from, or modification of the contents of Covered Software; or\n\n     b. any new file in Source Code Form that contains any Covered Software.\n\n1.11. \"Patent Claims\" of a Contributor\n\n      means any patent claim(s), including without limitation, method,\n      process, and apparatus claims, in any patent Licensable by such\n      Contributor that would be infringed, but for the grant of the License,\n      by the making, using, selling, offering for sale, having made, import,\n      or transfer of either its Contributions or its Contributor Version.\n\n1.12. \"Secondary License\"\n\n      means either the GNU General Public License, Version 2.0, the GNU Lesser\n      General Public License, Version 2.1, the GNU Affero General Public\n      License, Version 3.0, or any later versions of those licenses.\n\n1.13. \"Source Code Form\"\n\n      means the form of the work preferred for making modifications.\n\n1.14. \"You\" (or \"Your\")\n\n      means an individual or a legal entity exercising rights under this\n      License. For legal entities, \"You\" includes any entity that controls, is\n      controlled by, or is under common control with You. For purposes of this\n      definition, \"control\" means (a) the power, direct or indirect, to cause\n      the direction or management of such entity, whether by contract or\n      otherwise, or (b) ownership of more than fifty percent (50%) of the\n      outstanding shares or beneficial ownership of such entity.\n\n\n2. License Grants and Conditions\n\n2.1. Grants\n\n     Each Contributor hereby grants You a world-wide, royalty-free,\n     non-exclusive license:\n\n     a. under intellectual property rights (other than patent or trademark)\n        Licensable by such Contributor to use, reproduce, make available,\n        modify, display, perform, distribute, and otherwise exploit its\n        Contributions, either on an unmodified basis, with Modifications, or\n        as part of a Larger Work; and\n\n     b. under Patent Claims of such Contributor to make, use, sell, offer for\n        sale, have made, import, and otherwise transfer either its\n        Contributions or its Contributor Version.\n\n2.2. Effective Date\n\n     The licenses granted in Section 2.1 with respect to any Contribution\n     become effective for each Contribution on the date the Contributor first\n     distributes such Contribution.\n\n2.3. Limitations on Grant Scope\n\n     The licenses granted in this Section 2 are the only rights granted under\n     this License. No additional rights or licenses will be implied from the\n     distribution or licensing of Covered Software under this License.\n     Notwithstanding Section 2.1(b) above, no patent license is granted by a\n     Contributor:\n\n     a. for any code that a Contributor has removed from Covered Software; or\n\n     b. for infringements caused by: (i) Your and any other third party's\n        modifications of Covered Software, or (ii) the combination of its\n        Contributions with other software (except as part of its Contributor\n        Version); or\n\n     c. under Patent Claims infringed by Covered Software in the absence of\n        its Contributions.\n\n     This License does not grant any rights in the trademarks, service marks,\n     or logos of any Contributor (except as may be necessary to comply with\n     the notice requirements in Section 3.4).\n\n2.4. Subsequent Licenses\n\n     No Contributor makes additional grants as a result of Your choice to\n     distribute the Covered Software under a subsequent version of this\n     License (see Section 10.2) or under the terms of a Secondary License (if\n     permitted under the terms of Section 3.3).\n\n2.5. Representation\n\n     Each Contributor represents that the Contributor believes its\n     Contributions are its original creation(s) or it has sufficient rights to\n     grant the rights to its Contributions conveyed by this License.\n\n2.6. Fair Use\n\n     This License is not intended to limit any rights You have under\n     applicable copyright doctrines of fair use, fair dealing, or other\n     equivalents.\n\n2.7. Conditions\n\n     Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in\n     Section 2.1.\n\n\n3. Responsibilities\n\n3.1. Distribution of Source Form\n\n     All distribution of Covered Software in Source Code Form, including any\n     Modifications that You create or to which You contribute, must be under\n     the terms of this License. You must inform recipients that the Source\n     Code Form of the Covered Software is governed by the terms of this\n     License, and how they can obtain a copy of this License. You may not\n     attempt to alter or restrict the recipients' rights in the Source Code\n     Form.\n\n3.2. Distribution of Executable Form\n\n     If You distribute Covered Software in Executable Form then:\n\n     a. such Covered Software must also be made available in Source Code Form,\n        as described in Section 3.1, and You must inform recipients of the\n        Executable Form how they can obtain a copy of such Source Code Form by\n        reasonable means in a timely manner, at a charge no more than the cost\n        of distribution to the recipient; and\n\n     b. You may distribute such Executable Form under the terms of this\n        License, or sublicense it under different terms, provided that the\n        license for the Executable Form does not attempt to limit or alter the\n        recipients' rights in the Source Code Form under this License.\n\n3.3. Distribution of a Larger Work\n\n     You may create and distribute a Larger Work under terms of Your choice,\n     provided that You also comply with the requirements of this License for\n     the Covered Software. If the Larger Work is a combination of Covered\n     Software with a work governed by one or more Secondary Licenses, and the\n     Covered Software is not Incompatible With Secondary Licenses, this\n     License permits You to additionally distribute such Covered Software\n     under the terms of such Secondary License(s), so that the recipient of\n     the Larger Work may, at their option, further distribute the Covered\n     Software under the terms of either this License or such Secondary\n     License(s).\n\n3.4. Notices\n\n     You may not remove or alter the substance of any license notices\n     (including copyright notices, patent notices, disclaimers of warranty, or\n     limitations of liability) contained within the Source Code Form of the\n     Covered Software, except that You may alter any license notices to the\n     extent required to remedy known factual inaccuracies.\n\n3.5. Application of Additional Terms\n\n     You may choose to offer, and to charge a fee for, warranty, support,\n     indemnity or liability obligations to one or more recipients of Covered\n     Software. However, You may do so only on Your own behalf, and not on\n     behalf of any Contributor. You must make it absolutely clear that any\n     such warranty, support, indemnity, or liability obligation is offered by\n     You alone, and You hereby agree to indemnify every Contributor for any\n     liability incurred by such Contributor as a result of warranty, support,\n     indemnity or liability terms You offer. You may include additional\n     disclaimers of warranty and limitations of liability specific to any\n     jurisdiction.\n\n4. Inability to Comply Due to Statute or Regulation\n\n   If it is impossible for You to comply with any of the terms of this License\n   with respect to some or all of the Covered Software due to statute,\n   judicial order, or regulation then You must: (a) comply with the terms of\n   this License to the maximum extent possible; and (b) describe the\n   limitations and the code they affect. Such description must be placed in a\n   text file included with all distributions of the Covered Software under\n   this License. Except to the extent prohibited by statute or regulation,\n   such description must be sufficiently detailed for a recipient of ordinary\n   skill to be able to understand it.\n\n5. Termination\n\n5.1. The rights granted under this License will terminate automatically if You\n     fail to comply with any of its terms. However, if You become compliant,\n     then the rights granted under this License from a particular Contributor\n     are reinstated (a) provisionally, unless and until such Contributor\n     explicitly and finally terminates Your grants, and (b) on an ongoing\n     basis, if such Contributor fails to notify You of the non-compliance by\n     some reasonable means prior to 60 days after You have come back into\n     compliance. Moreover, Your grants from a particular Contributor are\n     reinstated on an ongoing basis if such Contributor notifies You of the\n     non-compliance by some reasonable means, this is the first time You have\n     received notice of non-compliance with this License from such\n     Contributor, and You become compliant prior to 30 days after Your receipt\n     of the notice.\n\n5.2. If You initiate litigation against any entity by asserting a patent\n     infringement claim (excluding declaratory judgment actions,\n     counter-claims, and cross-claims) alleging that a Contributor Version\n     directly or indirectly infringes any patent, then the rights granted to\n     You by any and all Contributors for the Covered Software under Section\n     2.1 of this License shall terminate.\n\n5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user\n     license agreements (excluding distributors and resellers) which have been\n     validly granted by You or Your distributors under this License prior to\n     termination shall survive termination.\n\n6. Disclaimer of Warranty\n\n   Covered Software is provided under this License on an \"as is\" basis,\n   without warranty of any kind, either expressed, implied, or statutory,\n   including, without limitation, warranties that the Covered Software is free\n   of defects, merchantable, fit for a particular purpose or non-infringing.\n   The entire risk as to the quality and performance of the Covered Software\n   is with You. Should any Covered Software prove defective in any respect,\n   You (not any Contributor) assume the cost of any necessary servicing,\n   repair, or correction. This disclaimer of warranty constitutes an essential\n   part of this License. No use of  any Covered Software is authorized under\n   this License except under this disclaimer.\n\n7. Limitation of Liability\n\n   Under no circumstances and under no legal theory, whether tort (including\n   negligence), contract, or otherwise, shall any Contributor, or anyone who\n   distributes Covered Software as permitted above, be liable to You for any\n   direct, indirect, special, incidental, or consequential damages of any\n   character including, without limitation, damages for lost profits, loss of\n   goodwill, work stoppage, computer failure or malfunction, or any and all\n   other commercial damages or losses, even if such party shall have been\n   informed of the possibility of such damages. This limitation of liability\n   shall not apply to liability for death or personal injury resulting from\n   such party's negligence to the extent applicable law prohibits such\n   limitation. Some jurisdictions do not allow the exclusion or limitation of\n   incidental or consequential damages, so this exclusion and limitation may\n   not apply to You.\n\n8. Litigation\n\n   Any litigation relating to this License may be brought only in the courts\n   of a jurisdiction where the defendant maintains its principal place of\n   business and such litigation shall be governed by laws of that\n   jurisdiction, without reference to its conflict-of-law provisions. Nothing\n   in this Section shall prevent a party's ability to bring cross-claims or\n   counter-claims.\n\n9. Miscellaneous\n\n   This License represents the complete agreement concerning the subject\n   matter hereof. If any provision of this License is held to be\n   unenforceable, such provision shall be reformed only to the extent\n   necessary to make it enforceable. Any law or regulation which provides that\n   the language of a contract shall be construed against the drafter shall not\n   be used to construe this License against a Contributor.\n\n\n10. Versions of the License\n\n10.1. New Versions\n\n      Mozilla Foundation is the license steward. Except as provided in Section\n      10.3, no one other than the license steward has the right to modify or\n      publish new versions of this License. Each version will be given a\n      distinguishing version number.\n\n10.2. Effect of New Versions\n\n      You may distribute the Covered Software under the terms of the version\n      of the License under which You originally received the Covered Software,\n      or under the terms of any subsequent version published by the license\n      steward.\n\n10.3. Modified Versions\n\n      If you create software not governed by this License, and you want to\n      create a new license for such software, you may create and use a\n      modified version of this License if you rename the license and remove\n      any references to the name of the license steward (except to note that\n      such modified license differs from this License).\n\n10.4. Distributing Source Code Form that is Incompatible With Secondary\n      Licenses If You choose to distribute Source Code Form that is\n      Incompatible With Secondary Licenses under the terms of this version of\n      the License, the notice described in Exhibit B of this License must be\n      attached.\n\nExhibit A - Source Code Form License Notice\n\n      This Source Code Form is subject to the\n      terms of the Mozilla Public License, v.\n      2.0. If a copy of the MPL was not\n      distributed with this file, You can\n      obtain one at\n      http://mozilla.org/MPL/2.0/.\n\nIf it is not possible or desirable to put the notice in a particular file,\nthen You may include the notice in a location (such as a LICENSE file in a\nrelevant directory) where a recipient would be likely to look for such a\nnotice.\n\nYou may add additional accurate notices of copyright ownership.\n\nExhibit B - \"Incompatible With Secondary Licenses\" Notice\n\n      This Source Code Form is \"Incompatible\n      With Secondary Licenses\", as defined by\n      the Mozilla Public License, v. 2.0.\n\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-cleanhttp/cleanhttp.go",
    "content": "package cleanhttp\n\nimport (\n\t\"net\"\n\t\"net/http\"\n\t\"runtime\"\n\t\"time\"\n)\n\n// DefaultTransport returns a new http.Transport with similar default values to\n// http.DefaultTransport, but with idle connections and keepalives disabled.\nfunc DefaultTransport() *http.Transport {\n\ttransport := DefaultPooledTransport()\n\ttransport.DisableKeepAlives = true\n\ttransport.MaxIdleConnsPerHost = -1\n\treturn transport\n}\n\n// DefaultPooledTransport returns a new http.Transport with similar default\n// values to http.DefaultTransport. Do not use this for transient transports as\n// it can leak file descriptors over time. Only use this for transports that\n// will be re-used for the same host(s).\nfunc DefaultPooledTransport() *http.Transport {\n\ttransport := &http.Transport{\n\t\tProxy: http.ProxyFromEnvironment,\n\t\tDialContext: (&net.Dialer{\n\t\t\tTimeout:   30 * time.Second,\n\t\t\tKeepAlive: 30 * time.Second,\n\t\t\tDualStack: true,\n\t\t}).DialContext,\n\t\tMaxIdleConns:          100,\n\t\tIdleConnTimeout:       90 * time.Second,\n\t\tTLSHandshakeTimeout:   10 * time.Second,\n\t\tExpectContinueTimeout: 1 * time.Second,\n\t\tMaxIdleConnsPerHost:   runtime.GOMAXPROCS(0) + 1,\n\t}\n\treturn transport\n}\n\n// DefaultClient returns a new http.Client with similar default values to\n// http.Client, but with a non-shared Transport, idle connections disabled, and\n// keepalives disabled.\nfunc DefaultClient() *http.Client {\n\treturn &http.Client{\n\t\tTransport: DefaultTransport(),\n\t}\n}\n\n// DefaultPooledClient returns a new http.Client with similar default values to\n// http.Client, but with a shared Transport. Do not use this function for\n// transient clients as it can leak file descriptors over time. Only use this\n// for clients that will be re-used for the same host(s).\nfunc DefaultPooledClient() *http.Client {\n\treturn &http.Client{\n\t\tTransport: DefaultPooledTransport(),\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-cleanhttp/doc.go",
    "content": "// Package cleanhttp offers convenience utilities for acquiring \"clean\"\n// http.Transport and http.Client structs.\n//\n// Values set on http.DefaultClient and http.DefaultTransport affect all\n// callers. This can have detrimental effects, esepcially in TLS contexts,\n// where client or root certificates set to talk to multiple endpoints can end\n// up displacing each other, leading to hard-to-debug issues. This package\n// provides non-shared http.Client and http.Transport structs to ensure that\n// the configuration will not be overwritten by other parts of the application\n// or dependencies.\n//\n// The DefaultClient and DefaultTransport functions disable idle connections\n// and keepalives. Without ensuring that idle connections are closed before\n// garbage collection, short-term clients/transports can leak file descriptors,\n// eventually leading to \"too many open files\" errors. If you will be\n// connecting to the same hosts repeatedly from the same client, you can use\n// DefaultPooledClient to receive a client that has connection pooling\n// semantics similar to http.DefaultClient.\n//\npackage cleanhttp\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-cleanhttp/handlers.go",
    "content": "package cleanhttp\n\nimport (\n\t\"net/http\"\n\t\"strings\"\n\t\"unicode\"\n)\n\n// HandlerInput provides input options to cleanhttp's handlers\ntype HandlerInput struct {\n\tErrStatus int\n}\n\n// PrintablePathCheckHandler is a middleware that ensures the request path\n// contains only printable runes.\nfunc PrintablePathCheckHandler(next http.Handler, input *HandlerInput) http.Handler {\n\t// Nil-check on input to make it optional\n\tif input == nil {\n\t\tinput = &HandlerInput{\n\t\t\tErrStatus: http.StatusBadRequest,\n\t\t}\n\t}\n\n\t// Default to http.StatusBadRequest on error\n\tif input.ErrStatus == 0 {\n\t\tinput.ErrStatus = http.StatusBadRequest\n\t}\n\n\treturn http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\n\t\tif r != nil {\n\t\t\t// Check URL path for non-printable characters\n\t\t\tidx := strings.IndexFunc(r.URL.Path, func(c rune) bool {\n\t\t\t\treturn !unicode.IsPrint(c)\n\t\t\t})\n\n\t\t\tif idx != -1 {\n\t\t\t\tw.WriteHeader(input.ErrStatus)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif next != nil {\n\t\t\t\tnext.ServeHTTP(w, r)\n\t\t\t}\n\t\t}\n\n\t\treturn\n\t})\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-getter/LICENSE",
    "content": "Mozilla Public License, version 2.0\n\n1. Definitions\n\n1.1. “Contributor”\n\n     means each individual or legal entity that creates, contributes to the\n     creation of, or owns Covered Software.\n\n1.2. “Contributor Version”\n\n     means the combination of the Contributions of others (if any) used by a\n     Contributor and that particular Contributor’s Contribution.\n\n1.3. “Contribution”\n\n     means Covered Software of a particular Contributor.\n\n1.4. “Covered Software”\n\n     means Source Code Form to which the initial Contributor has attached the\n     notice in Exhibit A, the Executable Form of such Source Code Form, and\n     Modifications of such Source Code Form, in each case including portions\n     thereof.\n\n1.5. “Incompatible With Secondary Licenses”\n     means\n\n     a. that the initial Contributor has attached the notice described in\n        Exhibit B to the Covered Software; or\n\n     b. that the Covered Software was made available under the terms of version\n        1.1 or earlier of the License, but not also under the terms of a\n        Secondary License.\n\n1.6. “Executable Form”\n\n     means any form of the work other than Source Code Form.\n\n1.7. “Larger Work”\n\n     means a work that combines Covered Software with other material, in a separate\n     file or files, that is not Covered Software.\n\n1.8. “License”\n\n     means this document.\n\n1.9. “Licensable”\n\n     means having the right to grant, to the maximum extent possible, whether at the\n     time of the initial grant or subsequently, any and all of the rights conveyed by\n     this License.\n\n1.10. “Modifications”\n\n     means any of the following:\n\n     a. any file in Source Code Form that results from an addition to, deletion\n        from, or modification of the contents of Covered Software; or\n\n     b. any new file in Source Code Form that contains any Covered Software.\n\n1.11. “Patent Claims” of a Contributor\n\n      means any patent claim(s), including without limitation, method, process,\n      and apparatus claims, in any patent Licensable by such Contributor that\n      would be infringed, but for the grant of the License, by the making,\n      using, selling, offering for sale, having made, import, or transfer of\n      either its Contributions or its Contributor Version.\n\n1.12. “Secondary License”\n\n      means either the GNU General Public License, Version 2.0, the GNU Lesser\n      General Public License, Version 2.1, the GNU Affero General Public\n      License, Version 3.0, or any later versions of those licenses.\n\n1.13. “Source Code Form”\n\n      means the form of the work preferred for making modifications.\n\n1.14. “You” (or “Your”)\n\n      means an individual or a legal entity exercising rights under this\n      License. For legal entities, “You” includes any entity that controls, is\n      controlled by, or is under common control with You. For purposes of this\n      definition, “control” means (a) the power, direct or indirect, to cause\n      the direction or management of such entity, whether by contract or\n      otherwise, or (b) ownership of more than fifty percent (50%) of the\n      outstanding shares or beneficial ownership of such entity.\n\n\n2. License Grants and Conditions\n\n2.1. Grants\n\n     Each Contributor hereby grants You a world-wide, royalty-free,\n     non-exclusive license:\n\n     a. under intellectual property rights (other than patent or trademark)\n        Licensable by such Contributor to use, reproduce, make available,\n        modify, display, perform, distribute, and otherwise exploit its\n        Contributions, either on an unmodified basis, with Modifications, or as\n        part of a Larger Work; and\n\n     b. under Patent Claims of such Contributor to make, use, sell, offer for\n        sale, have made, import, and otherwise transfer either its Contributions\n        or its Contributor Version.\n\n2.2. Effective Date\n\n     The licenses granted in Section 2.1 with respect to any Contribution become\n     effective for each Contribution on the date the Contributor first distributes\n     such Contribution.\n\n2.3. Limitations on Grant Scope\n\n     The licenses granted in this Section 2 are the only rights granted under this\n     License. No additional rights or licenses will be implied from the distribution\n     or licensing of Covered Software under this License. Notwithstanding Section\n     2.1(b) above, no patent license is granted by a Contributor:\n\n     a. for any code that a Contributor has removed from Covered Software; or\n\n     b. for infringements caused by: (i) Your and any other third party’s\n        modifications of Covered Software, or (ii) the combination of its\n        Contributions with other software (except as part of its Contributor\n        Version); or\n\n     c. under Patent Claims infringed by Covered Software in the absence of its\n        Contributions.\n\n     This License does not grant any rights in the trademarks, service marks, or\n     logos of any Contributor (except as may be necessary to comply with the\n     notice requirements in Section 3.4).\n\n2.4. Subsequent Licenses\n\n     No Contributor makes additional grants as a result of Your choice to\n     distribute the Covered Software under a subsequent version of this License\n     (see Section 10.2) or under the terms of a Secondary License (if permitted\n     under the terms of Section 3.3).\n\n2.5. Representation\n\n     Each Contributor represents that the Contributor believes its Contributions\n     are its original creation(s) or it has sufficient rights to grant the\n     rights to its Contributions conveyed by this License.\n\n2.6. Fair Use\n\n     This License is not intended to limit any rights You have under applicable\n     copyright doctrines of fair use, fair dealing, or other equivalents.\n\n2.7. Conditions\n\n     Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in\n     Section 2.1.\n\n\n3. Responsibilities\n\n3.1. Distribution of Source Form\n\n     All distribution of Covered Software in Source Code Form, including any\n     Modifications that You create or to which You contribute, must be under the\n     terms of this License. You must inform recipients that the Source Code Form\n     of the Covered Software is governed by the terms of this License, and how\n     they can obtain a copy of this License. You may not attempt to alter or\n     restrict the recipients’ rights in the Source Code Form.\n\n3.2. Distribution of Executable Form\n\n     If You distribute Covered Software in Executable Form then:\n\n     a. such Covered Software must also be made available in Source Code Form,\n        as described in Section 3.1, and You must inform recipients of the\n        Executable Form how they can obtain a copy of such Source Code Form by\n        reasonable means in a timely manner, at a charge no more than the cost\n        of distribution to the recipient; and\n\n     b. You may distribute such Executable Form under the terms of this License,\n        or sublicense it under different terms, provided that the license for\n        the Executable Form does not attempt to limit or alter the recipients’\n        rights in the Source Code Form under this License.\n\n3.3. Distribution of a Larger Work\n\n     You may create and distribute a Larger Work under terms of Your choice,\n     provided that You also comply with the requirements of this License for the\n     Covered Software. If the Larger Work is a combination of Covered Software\n     with a work governed by one or more Secondary Licenses, and the Covered\n     Software is not Incompatible With Secondary Licenses, this License permits\n     You to additionally distribute such Covered Software under the terms of\n     such Secondary License(s), so that the recipient of the Larger Work may, at\n     their option, further distribute the Covered Software under the terms of\n     either this License or such Secondary License(s).\n\n3.4. Notices\n\n     You may not remove or alter the substance of any license notices (including\n     copyright notices, patent notices, disclaimers of warranty, or limitations\n     of liability) contained within the Source Code Form of the Covered\n     Software, except that You may alter any license notices to the extent\n     required to remedy known factual inaccuracies.\n\n3.5. Application of Additional Terms\n\n     You may choose to offer, and to charge a fee for, warranty, support,\n     indemnity or liability obligations to one or more recipients of Covered\n     Software. However, You may do so only on Your own behalf, and not on behalf\n     of any Contributor. You must make it absolutely clear that any such\n     warranty, support, indemnity, or liability obligation is offered by You\n     alone, and You hereby agree to indemnify every Contributor for any\n     liability incurred by such Contributor as a result of warranty, support,\n     indemnity or liability terms You offer. You may include additional\n     disclaimers of warranty and limitations of liability specific to any\n     jurisdiction.\n\n4. Inability to Comply Due to Statute or Regulation\n\n   If it is impossible for You to comply with any of the terms of this License\n   with respect to some or all of the Covered Software due to statute, judicial\n   order, or regulation then You must: (a) comply with the terms of this License\n   to the maximum extent possible; and (b) describe the limitations and the code\n   they affect. Such description must be placed in a text file included with all\n   distributions of the Covered Software under this License. Except to the\n   extent prohibited by statute or regulation, such description must be\n   sufficiently detailed for a recipient of ordinary skill to be able to\n   understand it.\n\n5. Termination\n\n5.1. The rights granted under this License will terminate automatically if You\n     fail to comply with any of its terms. However, if You become compliant,\n     then the rights granted under this License from a particular Contributor\n     are reinstated (a) provisionally, unless and until such Contributor\n     explicitly and finally terminates Your grants, and (b) on an ongoing basis,\n     if such Contributor fails to notify You of the non-compliance by some\n     reasonable means prior to 60 days after You have come back into compliance.\n     Moreover, Your grants from a particular Contributor are reinstated on an\n     ongoing basis if such Contributor notifies You of the non-compliance by\n     some reasonable means, this is the first time You have received notice of\n     non-compliance with this License from such Contributor, and You become\n     compliant prior to 30 days after Your receipt of the notice.\n\n5.2. If You initiate litigation against any entity by asserting a patent\n     infringement claim (excluding declaratory judgment actions, counter-claims,\n     and cross-claims) alleging that a Contributor Version directly or\n     indirectly infringes any patent, then the rights granted to You by any and\n     all Contributors for the Covered Software under Section 2.1 of this License\n     shall terminate.\n\n5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user\n     license agreements (excluding distributors and resellers) which have been\n     validly granted by You or Your distributors under this License prior to\n     termination shall survive termination.\n\n6. Disclaimer of Warranty\n\n   Covered Software is provided under this License on an “as is” basis, without\n   warranty of any kind, either expressed, implied, or statutory, including,\n   without limitation, warranties that the Covered Software is free of defects,\n   merchantable, fit for a particular purpose or non-infringing. The entire\n   risk as to the quality and performance of the Covered Software is with You.\n   Should any Covered Software prove defective in any respect, You (not any\n   Contributor) assume the cost of any necessary servicing, repair, or\n   correction. This disclaimer of warranty constitutes an essential part of this\n   License. No use of  any Covered Software is authorized under this License\n   except under this disclaimer.\n\n7. Limitation of Liability\n\n   Under no circumstances and under no legal theory, whether tort (including\n   negligence), contract, or otherwise, shall any Contributor, or anyone who\n   distributes Covered Software as permitted above, be liable to You for any\n   direct, indirect, special, incidental, or consequential damages of any\n   character including, without limitation, damages for lost profits, loss of\n   goodwill, work stoppage, computer failure or malfunction, or any and all\n   other commercial damages or losses, even if such party shall have been\n   informed of the possibility of such damages. This limitation of liability\n   shall not apply to liability for death or personal injury resulting from such\n   party’s negligence to the extent applicable law prohibits such limitation.\n   Some jurisdictions do not allow the exclusion or limitation of incidental or\n   consequential damages, so this exclusion and limitation may not apply to You.\n\n8. Litigation\n\n   Any litigation relating to this License may be brought only in the courts of\n   a jurisdiction where the defendant maintains its principal place of business\n   and such litigation shall be governed by laws of that jurisdiction, without\n   reference to its conflict-of-law provisions. Nothing in this Section shall\n   prevent a party’s ability to bring cross-claims or counter-claims.\n\n9. Miscellaneous\n\n   This License represents the complete agreement concerning the subject matter\n   hereof. If any provision of this License is held to be unenforceable, such\n   provision shall be reformed only to the extent necessary to make it\n   enforceable. Any law or regulation which provides that the language of a\n   contract shall be construed against the drafter shall not be used to construe\n   this License against a Contributor.\n\n\n10. Versions of the License\n\n10.1. New Versions\n\n      Mozilla Foundation is the license steward. Except as provided in Section\n      10.3, no one other than the license steward has the right to modify or\n      publish new versions of this License. Each version will be given a\n      distinguishing version number.\n\n10.2. Effect of New Versions\n\n      You may distribute the Covered Software under the terms of the version of\n      the License under which You originally received the Covered Software, or\n      under the terms of any subsequent version published by the license\n      steward.\n\n10.3. Modified Versions\n\n      If you create software not governed by this License, and you want to\n      create a new license for such software, you may create and use a modified\n      version of this License if you rename the license and remove any\n      references to the name of the license steward (except to note that such\n      modified license differs from this License).\n\n10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses\n      If You choose to distribute Source Code Form that is Incompatible With\n      Secondary Licenses under the terms of this version of the License, the\n      notice described in Exhibit B of this License must be attached.\n\nExhibit A - Source Code Form License Notice\n\n      This Source Code Form is subject to the\n      terms of the Mozilla Public License, v.\n      2.0. If a copy of the MPL was not\n      distributed with this file, You can\n      obtain one at\n      http://mozilla.org/MPL/2.0/.\n\nIf it is not possible or desirable to put the notice in a particular file, then\nYou may include the notice in a location (such as a LICENSE file in a relevant\ndirectory) where a recipient would be likely to look for such a notice.\n\nYou may add additional accurate notices of copyright ownership.\n\nExhibit B - “Incompatible With Secondary Licenses” Notice\n\n      This Source Code Form is “Incompatible\n      With Secondary Licenses”, as defined by\n      the Mozilla Public License, v. 2.0.\n\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-getter/checksum.go",
    "content": "package getter\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"crypto/md5\"\n\t\"crypto/sha1\"\n\t\"crypto/sha256\"\n\t\"crypto/sha512\"\n\t\"encoding/hex\"\n\t\"fmt\"\n\t\"hash\"\n\t\"io\"\n\t\"net/url\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n\n\turlhelper \"github.com/hashicorp/go-getter/helper/url\"\n)\n\n// fileChecksum helps verifying the checksum for a file.\ntype fileChecksum struct {\n\tType     string\n\tHash     hash.Hash\n\tValue    []byte\n\tFilename string\n}\n\n// A ChecksumError is returned when a checksum differs\ntype ChecksumError struct {\n\tHash     hash.Hash\n\tActual   []byte\n\tExpected []byte\n\tFile     string\n}\n\nfunc (cerr *ChecksumError) Error() string {\n\tif cerr == nil {\n\t\treturn \"<nil>\"\n\t}\n\treturn fmt.Sprintf(\n\t\t\"Checksums did not match for %s.\\nExpected: %s\\nGot: %s\\n%T\",\n\t\tcerr.File,\n\t\thex.EncodeToString(cerr.Expected),\n\t\thex.EncodeToString(cerr.Actual),\n\t\tcerr.Hash, // ex: *sha256.digest\n\t)\n}\n\n// checksum is a simple method to compute the checksum of a source file\n// and compare it to the given expected value.\nfunc (c *fileChecksum) checksum(source string) error {\n\tf, err := os.Open(source)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"Failed to open file for checksum: %s\", err)\n\t}\n\tdefer f.Close()\n\n\tc.Hash.Reset()\n\tif _, err := io.Copy(c.Hash, f); err != nil {\n\t\treturn fmt.Errorf(\"Failed to hash: %s\", err)\n\t}\n\n\tif actual := c.Hash.Sum(nil); !bytes.Equal(actual, c.Value) {\n\t\treturn &ChecksumError{\n\t\t\tHash:     c.Hash,\n\t\t\tActual:   actual,\n\t\t\tExpected: c.Value,\n\t\t\tFile:     source,\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// extractChecksum will return a fileChecksum based on the 'checksum'\n// parameter of u.\n// ex:\n//  http://hashicorp.com/terraform?checksum=<checksumValue>\n//  http://hashicorp.com/terraform?checksum=<checksumType>:<checksumValue>\n//  http://hashicorp.com/terraform?checksum=file:<checksum_url>\n// when checksumming from a file, extractChecksum will go get checksum_url\n// in a temporary directory, parse the content of the file then delete it.\n// Content of files are expected to be BSD style or GNU style.\n//\n// BSD-style checksum:\n//  MD5 (file1) = <checksum>\n//  MD5 (file2) = <checksum>\n//\n// GNU-style:\n//  <checksum>  file1\n//  <checksum> *file2\n//\n// see parseChecksumLine for more detail on checksum file parsing\nfunc (c *Client) extractChecksum(u *url.URL) (*fileChecksum, error) {\n\tq := u.Query()\n\tv := q.Get(\"checksum\")\n\n\tif v == \"\" {\n\t\treturn nil, nil\n\t}\n\n\tvs := strings.SplitN(v, \":\", 2)\n\tswitch len(vs) {\n\tcase 2:\n\t\tbreak // good\n\tdefault:\n\t\t// here, we try to guess the checksum from it's length\n\t\t// if the type was not passed\n\t\treturn newChecksumFromValue(v, filepath.Base(u.EscapedPath()))\n\t}\n\n\tchecksumType, checksumValue := vs[0], vs[1]\n\n\tswitch checksumType {\n\tcase \"file\":\n\t\treturn c.checksumFromFile(checksumValue, u)\n\tdefault:\n\t\treturn newChecksumFromType(checksumType, checksumValue, filepath.Base(u.EscapedPath()))\n\t}\n}\n\nfunc newChecksum(checksumValue, filename string) (*fileChecksum, error) {\n\tc := &fileChecksum{\n\t\tFilename: filename,\n\t}\n\tvar err error\n\tc.Value, err = hex.DecodeString(checksumValue)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"invalid checksum: %s\", err)\n\t}\n\treturn c, nil\n}\n\nfunc newChecksumFromType(checksumType, checksumValue, filename string) (*fileChecksum, error) {\n\tc, err := newChecksum(checksumValue, filename)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tc.Type = strings.ToLower(checksumType)\n\tswitch c.Type {\n\tcase \"md5\":\n\t\tc.Hash = md5.New()\n\tcase \"sha1\":\n\t\tc.Hash = sha1.New()\n\tcase \"sha256\":\n\t\tc.Hash = sha256.New()\n\tcase \"sha512\":\n\t\tc.Hash = sha512.New()\n\tdefault:\n\t\treturn nil, fmt.Errorf(\n\t\t\t\"unsupported checksum type: %s\", checksumType)\n\t}\n\n\treturn c, nil\n}\n\nfunc newChecksumFromValue(checksumValue, filename string) (*fileChecksum, error) {\n\tc, err := newChecksum(checksumValue, filename)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tswitch len(c.Value) {\n\tcase md5.Size:\n\t\tc.Hash = md5.New()\n\t\tc.Type = \"md5\"\n\tcase sha1.Size:\n\t\tc.Hash = sha1.New()\n\t\tc.Type = \"sha1\"\n\tcase sha256.Size:\n\t\tc.Hash = sha256.New()\n\t\tc.Type = \"sha256\"\n\tcase sha512.Size:\n\t\tc.Hash = sha512.New()\n\t\tc.Type = \"sha512\"\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"Unknown type for checksum %s\", checksumValue)\n\t}\n\n\treturn c, nil\n}\n\n// checksumsFromFile will return all the fileChecksums found in file\n//\n// checksumsFromFile will try to guess the hashing algorithm based on content\n// of checksum file\n//\n// checksumsFromFile will only return checksums for files that match file\n// behind src\nfunc (c *Client) checksumFromFile(checksumFile string, src *url.URL) (*fileChecksum, error) {\n\tchecksumFileURL, err := urlhelper.Parse(checksumFile)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\ttempfile, err := tmpFile(\"\", filepath.Base(checksumFileURL.Path))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer os.Remove(tempfile)\n\n\tc2 := &Client{\n\t\tCtx:              c.Ctx,\n\t\tGetters:          c.Getters,\n\t\tDecompressors:    c.Decompressors,\n\t\tDetectors:        c.Detectors,\n\t\tPwd:              c.Pwd,\n\t\tDir:              false,\n\t\tSrc:              checksumFile,\n\t\tDst:              tempfile,\n\t\tProgressListener: c.ProgressListener,\n\t}\n\tif err = c2.Get(); err != nil {\n\t\treturn nil, fmt.Errorf(\n\t\t\t\"Error downloading checksum file: %s\", err)\n\t}\n\n\tfilename := filepath.Base(src.Path)\n\tabsPath, err := filepath.Abs(src.Path)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tchecksumFileDir := filepath.Dir(checksumFileURL.Path)\n\trelpath, err := filepath.Rel(checksumFileDir, absPath)\n\tswitch {\n\tcase err == nil ||\n\t\terr.Error() == \"Rel: can't make \"+absPath+\" relative to \"+checksumFileDir:\n\t\t// ex: on windows C:\\gopath\\...\\content.txt cannot be relative to \\\n\t\t// which is okay, may be another expected path will work.\n\t\tbreak\n\tdefault:\n\t\treturn nil, err\n\t}\n\n\t// possible file identifiers:\n\toptions := []string{\n\t\tfilename,       // ubuntu-14.04.1-server-amd64.iso\n\t\t\"*\" + filename, // *ubuntu-14.04.1-server-amd64.iso  Standard checksum\n\t\t\"?\" + filename, // ?ubuntu-14.04.1-server-amd64.iso  shasum -p\n\t\trelpath,        // dir/ubuntu-14.04.1-server-amd64.iso\n\t\t\"./\" + relpath, // ./dir/ubuntu-14.04.1-server-amd64.iso\n\t\tabsPath,        // fullpath; set if local\n\t}\n\n\tf, err := os.Open(tempfile)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\n\t\t\t\"Error opening downloaded file: %s\", err)\n\t}\n\tdefer f.Close()\n\trd := bufio.NewReader(f)\n\tfor {\n\t\tline, err := rd.ReadString('\\n')\n\t\tif err != nil {\n\t\t\tif err != io.EOF {\n\t\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\t\"Error reading checksum file: %s\", err)\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\t\tchecksum, err := parseChecksumLine(line)\n\t\tif err != nil || checksum == nil {\n\t\t\tcontinue\n\t\t}\n\t\tif checksum.Filename == \"\" {\n\t\t\t// filename not sure, let's try\n\t\t\treturn checksum, nil\n\t\t}\n\t\t// make sure the checksum is for the right file\n\t\tfor _, option := range options {\n\t\t\tif option != \"\" && checksum.Filename == option {\n\t\t\t\t// any checksum will work so we return the first one\n\t\t\t\treturn checksum, nil\n\t\t\t}\n\t\t}\n\t}\n\treturn nil, fmt.Errorf(\"no checksum found in: %s\", checksumFile)\n}\n\n// parseChecksumLine takes a line from a checksum file and returns\n// checksumType, checksumValue and filename parseChecksumLine guesses the style\n// of the checksum BSD vs GNU by splitting the line and by counting the parts.\n// of a line.\n// for BSD type sums parseChecksumLine guesses the hashing algorithm\n// by checking the length of the checksum.\nfunc parseChecksumLine(line string) (*fileChecksum, error) {\n\tparts := strings.Fields(line)\n\n\tswitch len(parts) {\n\tcase 4:\n\t\t// BSD-style checksum:\n\t\t//  MD5 (file1) = <checksum>\n\t\t//  MD5 (file2) = <checksum>\n\t\tif len(parts[1]) <= 2 ||\n\t\t\tparts[1][0] != '(' || parts[1][len(parts[1])-1] != ')' {\n\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\"Unexpected BSD-style-checksum filename format: %s\", line)\n\t\t}\n\t\tfilename := parts[1][1 : len(parts[1])-1]\n\t\treturn newChecksumFromType(parts[0], parts[3], filename)\n\tcase 2:\n\t\t// GNU-style:\n\t\t//  <checksum>  file1\n\t\t//  <checksum> *file2\n\t\treturn newChecksumFromValue(parts[0], parts[1])\n\tcase 0:\n\t\treturn nil, nil // empty line\n\tdefault:\n\t\treturn newChecksumFromValue(parts[0], \"\")\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-getter/client.go",
    "content": "package getter\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strconv\"\n\t\"strings\"\n\n\turlhelper \"github.com/hashicorp/go-getter/helper/url\"\n\tsafetemp \"github.com/hashicorp/go-safetemp\"\n)\n\n// Client is a client for downloading things.\n//\n// Top-level functions such as Get are shortcuts for interacting with a client.\n// Using a client directly allows more fine-grained control over how downloading\n// is done, as well as customizing the protocols supported.\ntype Client struct {\n \t// Ctx for cancellation\n\tCtx context.Context\n\n\t// Src is the source URL to get.\n\t//\n\t// Dst is the path to save the downloaded thing as. If Dir is set to\n\t// true, then this should be a directory. If the directory doesn't exist,\n\t// it will be created for you.\n\t//\n\t// Pwd is the working directory for detection. If this isn't set, some\n\t// detection may fail. Client will not default pwd to the current\n\t// working directory for security reasons.\n\tSrc string\n\tDst string\n\tPwd string\n\n\t// Mode is the method of download the client will use. See ClientMode\n\t// for documentation.\n\tMode ClientMode\n\n\t// Detectors is the list of detectors that are tried on the source.\n\t// If this is nil, then the default Detectors will be used.\n\tDetectors []Detector\n\n\t// Decompressors is the map of decompressors supported by this client.\n\t// If this is nil, then the default value is the Decompressors global.\n\tDecompressors map[string]Decompressor\n\n\t// Getters is the map of protocols supported by this client. If this\n\t// is nil, then the default Getters variable will be used.\n\tGetters map[string]Getter\n\n\t// Dir, if true, tells the Client it is downloading a directory (versus\n\t// a single file). This distinction is necessary since filenames and\n\t// directory names follow the same format so disambiguating is impossible\n\t// without knowing ahead of time.\n\t//\n\t// WARNING: deprecated. If Mode is set, that will take precedence.\n\tDir bool\n\n\t// ProgressListener allows to track file downloads.\n\t// By default a no op progress listener is used.\n\tProgressListener ProgressTracker\n\n\tOptions []ClientOption\n}\n\n// Get downloads the configured source to the destination.\nfunc (c *Client) Get() error {\n\tif err := c.Configure(c.Options...); err != nil {\n\t\treturn err\n\t}\n\n\t// Store this locally since there are cases we swap this\n\tmode := c.Mode\n\tif mode == ClientModeInvalid {\n\t\tif c.Dir {\n\t\t\tmode = ClientModeDir\n\t\t} else {\n\t\t\tmode = ClientModeFile\n\t\t}\n\t}\n\n\tsrc, err := Detect(c.Src, c.Pwd, c.Detectors)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Determine if we have a forced protocol, i.e. \"git::http://...\"\n\tforce, src := getForcedGetter(src)\n\n\t// If there is a subdir component, then we download the root separately\n\t// and then copy over the proper subdir.\n\tvar realDst string\n\tdst := c.Dst\n\tsrc, subDir := SourceDirSubdir(src)\n\tif subDir != \"\" {\n\t\ttd, tdcloser, err := safetemp.Dir(\"\", \"getter\")\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefer tdcloser.Close()\n\n\t\trealDst = dst\n\t\tdst = td\n\t}\n\n\tu, err := urlhelper.Parse(src)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif force == \"\" {\n\t\tforce = u.Scheme\n\t}\n\n\tg, ok := c.Getters[force]\n\tif !ok {\n\t\treturn fmt.Errorf(\n\t\t\t\"download not supported for scheme '%s'\", force)\n\t}\n\n\t// We have magic query parameters that we use to signal different features\n\tq := u.Query()\n\n\t// Determine if we have an archive type\n\tarchiveV := q.Get(\"archive\")\n\tif archiveV != \"\" {\n\t\t// Delete the paramter since it is a magic parameter we don't\n\t\t// want to pass on to the Getter\n\t\tq.Del(\"archive\")\n\t\tu.RawQuery = q.Encode()\n\n\t\t// If we can parse the value as a bool and it is false, then\n\t\t// set the archive to \"-\" which should never map to a decompressor\n\t\tif b, err := strconv.ParseBool(archiveV); err == nil && !b {\n\t\t\tarchiveV = \"-\"\n\t\t}\n\t}\n\tif archiveV == \"\" {\n\t\t// We don't appear to... but is it part of the filename?\n\t\tmatchingLen := 0\n\t\tfor k := range c.Decompressors {\n\t\t\tif strings.HasSuffix(u.Path, \".\"+k) && len(k) > matchingLen {\n\t\t\t\tarchiveV = k\n\t\t\t\tmatchingLen = len(k)\n\t\t\t}\n\t\t}\n\t}\n\n\t// If we have a decompressor, then we need to change the destination\n\t// to download to a temporary path. We unarchive this into the final,\n\t// real path.\n\tvar decompressDst string\n\tvar decompressDir bool\n\tdecompressor := c.Decompressors[archiveV]\n\tif decompressor != nil {\n\t\t// Create a temporary directory to store our archive. We delete\n\t\t// this at the end of everything.\n\t\ttd, err := ioutil.TempDir(\"\", \"getter\")\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\n\t\t\t\t\"Error creating temporary directory for archive: %s\", err)\n\t\t}\n\t\tdefer os.RemoveAll(td)\n\n\t\t// Swap the download directory to be our temporary path and\n\t\t// store the old values.\n\t\tdecompressDst = dst\n\t\tdecompressDir = mode != ClientModeFile\n\t\tdst = filepath.Join(td, \"archive\")\n\t\tmode = ClientModeFile\n\t}\n\n\t// Determine checksum if we have one\n\tchecksum, err := c.extractChecksum(u)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"invalid checksum: %s\", err)\n\t}\n\n\t// Delete the query parameter if we have it.\n\tq.Del(\"checksum\")\n\tu.RawQuery = q.Encode()\n\n\tif mode == ClientModeAny {\n\t\t// Ask the getter which client mode to use\n\t\tmode, err = g.ClientMode(u)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// Destination is the base name of the URL path in \"any\" mode when\n\t\t// a file source is detected.\n\t\tif mode == ClientModeFile {\n\t\t\tfilename := filepath.Base(u.Path)\n\n\t\t\t// Determine if we have a custom file name\n\t\t\tif v := q.Get(\"filename\"); v != \"\" {\n\t\t\t\t// Delete the query parameter if we have it.\n\t\t\t\tq.Del(\"filename\")\n\t\t\t\tu.RawQuery = q.Encode()\n\n\t\t\t\tfilename = v\n\t\t\t}\n\n\t\t\tdst = filepath.Join(dst, filename)\n\t\t}\n\t}\n\n\t// If we're not downloading a directory, then just download the file\n\t// and return.\n\tif mode == ClientModeFile {\n\t\tgetFile := true\n\t\tif checksum != nil {\n\t\t\tif err := checksum.checksum(dst); err == nil {\n\t\t\t\t// don't get the file if the checksum of dst is correct\n\t\t\t\tgetFile = false\n\t\t\t}\n\t\t}\n\t\tif getFile {\n\t\t\terr := g.GetFile(dst, u)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tif checksum != nil {\n\t\t\t\tif err := checksum.checksum(dst); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif decompressor != nil {\n\t\t\t// We have a decompressor, so decompress the current destination\n\t\t\t// into the final destination with the proper mode.\n\t\t\terr := decompressor.Decompress(decompressDst, dst, decompressDir)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\t// Swap the information back\n\t\t\tdst = decompressDst\n\t\t\tif decompressDir {\n\t\t\t\tmode = ClientModeAny\n\t\t\t} else {\n\t\t\t\tmode = ClientModeFile\n\t\t\t}\n\t\t}\n\n\t\t// We check the dir value again because it can be switched back\n\t\t// if we were unarchiving. If we're still only Get-ing a file, then\n\t\t// we're done.\n\t\tif mode == ClientModeFile {\n\t\t\treturn nil\n\t\t}\n\t}\n\n\t// If we're at this point we're either downloading a directory or we've\n\t// downloaded and unarchived a directory and we're just checking subdir.\n\t// In the case we have a decompressor we don't Get because it was Get\n\t// above.\n\tif decompressor == nil {\n\t\t// If we're getting a directory, then this is an error. You cannot\n\t\t// checksum a directory. TODO: test\n\t\tif checksum != nil {\n\t\t\treturn fmt.Errorf(\n\t\t\t\t\"checksum cannot be specified for directory download\")\n\t\t}\n\n\t\t// We're downloading a directory, which might require a bit more work\n\t\t// if we're specifying a subdir.\n\t\terr := g.Get(dst, u)\n\t\tif err != nil {\n\t\t\terr = fmt.Errorf(\"error downloading '%s': %s\", src, err)\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// If we have a subdir, copy that over\n\tif subDir != \"\" {\n\t\tif err := os.RemoveAll(realDst); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif err := os.MkdirAll(realDst, 0755); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// Process any globs\n\t\tsubDir, err := SubdirGlob(dst, subDir)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\treturn copyDir(c.Ctx, realDst, subDir, false)\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-getter/client_mode.go",
    "content": "package getter\n\n// ClientMode is the mode that the client operates in.\ntype ClientMode uint\n\nconst (\n\tClientModeInvalid ClientMode = iota\n\n\t// ClientModeAny downloads anything it can. In this mode, dst must\n\t// be a directory. If src is a file, it is saved into the directory\n\t// with the basename of the URL. If src is a directory or archive,\n\t// it is unpacked directly into dst.\n\tClientModeAny\n\n\t// ClientModeFile downloads a single file. In this mode, dst must\n\t// be a file path (doesn't have to exist). src must point to a single\n\t// file. It is saved as dst.\n\tClientModeFile\n\n\t// ClientModeDir downloads a directory. In this mode, dst must be\n\t// a directory path (doesn't have to exist). src must point to an\n\t// archive or directory (such as in s3).\n\tClientModeDir\n)\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-getter/client_option.go",
    "content": "package getter\n\nimport \"context\"\n\n// A ClientOption allows to configure a client\ntype ClientOption func(*Client) error\n\n// Configure configures a client with options.\nfunc (c *Client) Configure(opts ...ClientOption) error {\n\tif c.Ctx == nil {\n\t\tc.Ctx = context.Background()\n\t}\n\tc.Options = opts\n\tfor _, opt := range opts {\n\t\terr := opt(c)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\t// Default decompressor values\n\tif c.Decompressors == nil {\n\t\tc.Decompressors = Decompressors\n\t}\n\t// Default detector values\n\tif c.Detectors == nil {\n\t\tc.Detectors = Detectors\n\t}\n\t// Default getter values\n\tif c.Getters == nil {\n\t\tc.Getters = Getters\n\t}\n\n\tfor _, getter := range c.Getters {\n\t\tgetter.SetClient(c)\n\t}\n\treturn nil\n}\n\n// WithContext allows to pass a context to operation\n// in order to be able to cancel a download in progress.\nfunc WithContext(ctx context.Context) func(*Client) error {\n\treturn func(c *Client) error {\n\t\tc.Ctx = ctx\n\t\treturn nil\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-getter/client_option_progress.go",
    "content": "package getter\n\nimport (\n\t\"io\"\n)\n\n// WithProgress allows for a user to track\n// the progress of a download.\n// For example by displaying a progress bar with\n// current download.\n// Not all getters have progress support yet.\nfunc WithProgress(pl ProgressTracker) func(*Client) error {\n\treturn func(c *Client) error {\n\t\tc.ProgressListener = pl\n\t\treturn nil\n\t}\n}\n\n// ProgressTracker allows to track the progress of downloads.\ntype ProgressTracker interface {\n\t// TrackProgress should be called when\n\t// a new object is being downloaded.\n\t// src is the location the file is\n\t// downloaded from.\n\t// currentSize is the current size of\n\t// the file in case it is a partial\n\t// download.\n\t// totalSize is the total size in bytes,\n\t// size can be zero if the file size\n\t// is not known.\n\t// stream is the file being downloaded, every\n\t// written byte will add up to processed size.\n\t//\n\t// TrackProgress returns a ReadCloser that wraps the\n\t// download in progress ( stream ).\n\t// When the download is finished, body shall be closed.\n\tTrackProgress(src string, currentSize, totalSize int64, stream io.ReadCloser) (body io.ReadCloser)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-getter/common.go",
    "content": "package getter\n\nimport (\n\t\"io/ioutil\"\n)\n\nfunc tmpFile(dir, pattern string) (string, error) {\n\tf, err := ioutil.TempFile(dir, pattern)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tf.Close()\n\treturn f.Name(), nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-getter/copy_dir.go",
    "content": "package getter\n\nimport (\n\t\"context\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n)\n\n// copyDir copies the src directory contents into dst. Both directories\n// should already exist.\n//\n// If ignoreDot is set to true, then dot-prefixed files/folders are ignored.\nfunc copyDir(ctx context.Context, dst string, src string, ignoreDot bool) error {\n\tsrc, err := filepath.EvalSymlinks(src)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\twalkFn := func(path string, info os.FileInfo, err error) error {\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif path == src {\n\t\t\treturn nil\n\t\t}\n\n\t\tif ignoreDot && strings.HasPrefix(filepath.Base(path), \".\") {\n\t\t\t// Skip any dot files\n\t\t\tif info.IsDir() {\n\t\t\t\treturn filepath.SkipDir\n\t\t\t} else {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t}\n\n\t\t// The \"path\" has the src prefixed to it. We need to join our\n\t\t// destination with the path without the src on it.\n\t\tdstPath := filepath.Join(dst, path[len(src):])\n\n\t\t// If we have a directory, make that subdirectory, then continue\n\t\t// the walk.\n\t\tif info.IsDir() {\n\t\t\tif path == filepath.Join(src, dst) {\n\t\t\t\t// dst is in src; don't walk it.\n\t\t\t\treturn nil\n\t\t\t}\n\n\t\t\tif err := os.MkdirAll(dstPath, 0755); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn nil\n\t\t}\n\n\t\t// If we have a file, copy the contents.\n\t\tsrcF, err := os.Open(path)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefer srcF.Close()\n\n\t\tdstF, err := os.Create(dstPath)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefer dstF.Close()\n\n\t\tif _, err := Copy(ctx, dstF, srcF); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// Chmod it\n\t\treturn os.Chmod(dstPath, info.Mode())\n\t}\n\n\treturn filepath.Walk(src, walkFn)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-getter/decompress.go",
    "content": "package getter\n\nimport (\n\t\"strings\"\n)\n\n// Decompressor defines the interface that must be implemented to add\n// support for decompressing a type.\n//\n// Important: if you're implementing a decompressor, please use the\n// containsDotDot helper in this file to ensure that files can't be\n// decompressed outside of the specified directory.\ntype Decompressor interface {\n\t// Decompress should decompress src to dst. dir specifies whether dst\n\t// is a directory or single file. src is guaranteed to be a single file\n\t// that exists. dst is not guaranteed to exist already.\n\tDecompress(dst, src string, dir bool) error\n}\n\n// Decompressors is the mapping of extension to the Decompressor implementation\n// that will decompress that extension/type.\nvar Decompressors map[string]Decompressor\n\nfunc init() {\n\ttbzDecompressor := new(TarBzip2Decompressor)\n\ttgzDecompressor := new(TarGzipDecompressor)\n\ttxzDecompressor := new(TarXzDecompressor)\n\n\tDecompressors = map[string]Decompressor{\n\t\t\"bz2\":     new(Bzip2Decompressor),\n\t\t\"gz\":      new(GzipDecompressor),\n\t\t\"xz\":      new(XzDecompressor),\n\t\t\"tar.bz2\": tbzDecompressor,\n\t\t\"tar.gz\":  tgzDecompressor,\n\t\t\"tar.xz\":  txzDecompressor,\n\t\t\"tbz2\":    tbzDecompressor,\n\t\t\"tgz\":     tgzDecompressor,\n\t\t\"txz\":     txzDecompressor,\n\t\t\"zip\":     new(ZipDecompressor),\n\t}\n}\n\n// containsDotDot checks if the filepath value v contains a \"..\" entry.\n// This will check filepath components by splitting along / or \\. This\n// function is copied directly from the Go net/http implementation.\nfunc containsDotDot(v string) bool {\n\tif !strings.Contains(v, \"..\") {\n\t\treturn false\n\t}\n\tfor _, ent := range strings.FieldsFunc(v, isSlashRune) {\n\t\tif ent == \"..\" {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\nfunc isSlashRune(r rune) bool { return r == '/' || r == '\\\\' }\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-getter/decompress_bzip2.go",
    "content": "package getter\n\nimport (\n\t\"compress/bzip2\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"path/filepath\"\n)\n\n// Bzip2Decompressor is an implementation of Decompressor that can\n// decompress bz2 files.\ntype Bzip2Decompressor struct{}\n\nfunc (d *Bzip2Decompressor) Decompress(dst, src string, dir bool) error {\n\t// Directory isn't supported at all\n\tif dir {\n\t\treturn fmt.Errorf(\"bzip2-compressed files can only unarchive to a single file\")\n\t}\n\n\t// If we're going into a directory we should make that first\n\tif err := os.MkdirAll(filepath.Dir(dst), 0755); err != nil {\n\t\treturn err\n\t}\n\n\t// File first\n\tf, err := os.Open(src)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer f.Close()\n\n\t// Bzip2 compression is second\n\tbzipR := bzip2.NewReader(f)\n\n\t// Copy it out\n\tdstF, err := os.Create(dst)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer dstF.Close()\n\n\t_, err = io.Copy(dstF, bzipR)\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-getter/decompress_gzip.go",
    "content": "package getter\n\nimport (\n\t\"compress/gzip\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"path/filepath\"\n)\n\n// GzipDecompressor is an implementation of Decompressor that can\n// decompress gzip files.\ntype GzipDecompressor struct{}\n\nfunc (d *GzipDecompressor) Decompress(dst, src string, dir bool) error {\n\t// Directory isn't supported at all\n\tif dir {\n\t\treturn fmt.Errorf(\"gzip-compressed files can only unarchive to a single file\")\n\t}\n\n\t// If we're going into a directory we should make that first\n\tif err := os.MkdirAll(filepath.Dir(dst), 0755); err != nil {\n\t\treturn err\n\t}\n\n\t// File first\n\tf, err := os.Open(src)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer f.Close()\n\n\t// gzip compression is second\n\tgzipR, err := gzip.NewReader(f)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer gzipR.Close()\n\n\t// Copy it out\n\tdstF, err := os.Create(dst)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer dstF.Close()\n\n\t_, err = io.Copy(dstF, gzipR)\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-getter/decompress_tar.go",
    "content": "package getter\n\nimport (\n\t\"archive/tar\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"time\"\n)\n\n// untar is a shared helper for untarring an archive. The reader should provide\n// an uncompressed view of the tar archive.\nfunc untar(input io.Reader, dst, src string, dir bool) error {\n\ttarR := tar.NewReader(input)\n\tdone := false\n\tdirHdrs := []*tar.Header{}\n\tnow := time.Now()\n\tfor {\n\t\thdr, err := tarR.Next()\n\t\tif err == io.EOF {\n\t\t\tif !done {\n\t\t\t\t// Empty archive\n\t\t\t\treturn fmt.Errorf(\"empty archive: %s\", src)\n\t\t\t}\n\n\t\t\tbreak\n\t\t}\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tif hdr.Typeflag == tar.TypeXGlobalHeader || hdr.Typeflag == tar.TypeXHeader {\n\t\t\t// don't unpack extended headers as files\n\t\t\tcontinue\n\t\t}\n\n\t\tpath := dst\n\t\tif dir {\n\t\t\t// Disallow parent traversal\n\t\t\tif containsDotDot(hdr.Name) {\n\t\t\t\treturn fmt.Errorf(\"entry contains '..': %s\", hdr.Name)\n\t\t\t}\n\n\t\t\tpath = filepath.Join(path, hdr.Name)\n\t\t}\n\n\t\tif hdr.FileInfo().IsDir() {\n\t\t\tif !dir {\n\t\t\t\treturn fmt.Errorf(\"expected a single file: %s\", src)\n\t\t\t}\n\n\t\t\t// A directory, just make the directory and continue unarchiving...\n\t\t\tif err := os.MkdirAll(path, 0755); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\t// Record the directory information so that we may set its attributes\n\t\t\t// after all files have been extracted\n\t\t\tdirHdrs = append(dirHdrs, hdr)\n\n\t\t\tcontinue\n\t\t} else {\n\t\t\t// There is no ordering guarantee that a file in a directory is\n\t\t\t// listed before the directory\n\t\t\tdstPath := filepath.Dir(path)\n\n\t\t\t// Check that the directory exists, otherwise create it\n\t\t\tif _, err := os.Stat(dstPath); os.IsNotExist(err) {\n\t\t\t\tif err := os.MkdirAll(dstPath, 0755); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// We have a file. If we already decoded, then it is an error\n\t\tif !dir && done {\n\t\t\treturn fmt.Errorf(\"expected a single file, got multiple: %s\", src)\n\t\t}\n\n\t\t// Mark that we're done so future in single file mode errors\n\t\tdone = true\n\n\t\t// Open the file for writing\n\t\tdstF, err := os.Create(path)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = io.Copy(dstF, tarR)\n\t\tdstF.Close()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// Chmod the file\n\t\tif err := os.Chmod(path, hdr.FileInfo().Mode()); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// Set the access and modification time if valid, otherwise default to current time\n\t\taTime := now\n\t\tmTime := now\n\t\tif hdr.AccessTime.Unix() > 0 {\n\t\t\taTime = hdr.AccessTime\n\t\t}\n\t\tif hdr.ModTime.Unix() > 0 {\n\t\t\tmTime = hdr.ModTime\n\t\t}\n\t\tif err := os.Chtimes(path, aTime, mTime); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// Perform a final pass over extracted directories to update metadata\n\tfor _, dirHdr := range dirHdrs {\n\t\tpath := filepath.Join(dst, dirHdr.Name)\n\t\t// Chmod the directory since they might be created before we know the mode flags\n\t\tif err := os.Chmod(path, dirHdr.FileInfo().Mode()); err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Set the mtime/atime attributes since they would have been changed during extraction\n\t\taTime := now\n\t\tmTime := now\n\t\tif dirHdr.AccessTime.Unix() > 0 {\n\t\t\taTime = dirHdr.AccessTime\n\t\t}\n\t\tif dirHdr.ModTime.Unix() > 0 {\n\t\t\tmTime = dirHdr.ModTime\n\t\t}\n\t\tif err := os.Chtimes(path, aTime, mTime); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// tarDecompressor is an implementation of Decompressor that can\n// unpack tar files.\ntype tarDecompressor struct{}\n\nfunc (d *tarDecompressor) Decompress(dst, src string, dir bool) error {\n\t// If we're going into a directory we should make that first\n\tmkdir := dst\n\tif !dir {\n\t\tmkdir = filepath.Dir(dst)\n\t}\n\tif err := os.MkdirAll(mkdir, 0755); err != nil {\n\t\treturn err\n\t}\n\n\t// File first\n\tf, err := os.Open(src)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer f.Close()\n\n\treturn untar(f, dst, src, dir)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-getter/decompress_tbz2.go",
    "content": "package getter\n\nimport (\n\t\"compress/bzip2\"\n\t\"os\"\n\t\"path/filepath\"\n)\n\n// TarBzip2Decompressor is an implementation of Decompressor that can\n// decompress tar.bz2 files.\ntype TarBzip2Decompressor struct{}\n\nfunc (d *TarBzip2Decompressor) Decompress(dst, src string, dir bool) error {\n\t// If we're going into a directory we should make that first\n\tmkdir := dst\n\tif !dir {\n\t\tmkdir = filepath.Dir(dst)\n\t}\n\tif err := os.MkdirAll(mkdir, 0755); err != nil {\n\t\treturn err\n\t}\n\n\t// File first\n\tf, err := os.Open(src)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer f.Close()\n\n\t// Bzip2 compression is second\n\tbzipR := bzip2.NewReader(f)\n\treturn untar(bzipR, dst, src, dir)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-getter/decompress_testing.go",
    "content": "package getter\n\nimport (\n\t\"crypto/md5\"\n\t\"encoding/hex\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"reflect\"\n\t\"runtime\"\n\t\"sort\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/mitchellh/go-testing-interface\"\n)\n\n// TestDecompressCase is a single test case for testing decompressors\ntype TestDecompressCase struct {\n\tInput   string     // Input is the complete path to the input file\n\tDir     bool       // Dir is whether or not we're testing directory mode\n\tErr     bool       // Err is whether we expect an error or not\n\tDirList []string   // DirList is the list of files for Dir mode\n\tFileMD5 string     // FileMD5 is the expected MD5 for a single file\n\tMtime   *time.Time // Mtime is the optionally expected mtime for a single file (or all files if in Dir mode)\n}\n\n// TestDecompressor is a helper function for testing generic decompressors.\nfunc TestDecompressor(t testing.T, d Decompressor, cases []TestDecompressCase) {\n\tt.Helper()\n\n\tfor _, tc := range cases {\n\t\tt.Logf(\"Testing: %s\", tc.Input)\n\n\t\t// Temporary dir to store stuff\n\t\ttd, err := ioutil.TempDir(\"\", \"getter\")\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"err: %s\", err)\n\t\t}\n\n\t\t// Destination is always joining result so that we have a new path\n\t\tdst := filepath.Join(td, \"subdir\", \"result\")\n\n\t\t// We use a function so defers work\n\t\tfunc() {\n\t\t\tdefer os.RemoveAll(td)\n\n\t\t\t// Decompress\n\t\t\terr := d.Decompress(dst, tc.Input, tc.Dir)\n\t\t\tif (err != nil) != tc.Err {\n\t\t\t\tt.Fatalf(\"err %s: %s\", tc.Input, err)\n\t\t\t}\n\t\t\tif tc.Err {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// If it isn't a directory, then check for a single file\n\t\t\tif !tc.Dir {\n\t\t\t\tfi, err := os.Stat(dst)\n\t\t\t\tif err != nil {\n\t\t\t\t\tt.Fatalf(\"err %s: %s\", tc.Input, err)\n\t\t\t\t}\n\t\t\t\tif fi.IsDir() {\n\t\t\t\t\tt.Fatalf(\"err %s: expected file, got directory\", tc.Input)\n\t\t\t\t}\n\t\t\t\tif tc.FileMD5 != \"\" {\n\t\t\t\t\tactual := testMD5(t, dst)\n\t\t\t\t\texpected := tc.FileMD5\n\t\t\t\t\tif actual != expected {\n\t\t\t\t\t\tt.Fatalf(\"err %s: expected MD5 %s, got %s\", tc.Input, expected, actual)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif tc.Mtime != nil {\n\t\t\t\t\tactual := fi.ModTime()\n\t\t\t\t\tif tc.Mtime.Unix() > 0 {\n\t\t\t\t\t\texpected := *tc.Mtime\n\t\t\t\t\t\tif actual != expected {\n\t\t\t\t\t\t\tt.Fatalf(\"err %s: expected mtime '%s' for %s, got '%s'\", tc.Input, expected.String(), dst, actual.String())\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if actual.Unix() <= 0 {\n\t\t\t\t\t\tt.Fatalf(\"err %s: expected mtime to be > 0, got '%s'\", actual.String())\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Convert expected for windows\n\t\t\texpected := tc.DirList\n\t\t\tif runtime.GOOS == \"windows\" {\n\t\t\t\tfor i, v := range expected {\n\t\t\t\t\texpected[i] = strings.Replace(v, \"/\", \"\\\\\", -1)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Directory, check for the correct contents\n\t\t\tactual := testListDir(t, dst)\n\t\t\tif !reflect.DeepEqual(actual, expected) {\n\t\t\t\tt.Fatalf(\"bad %s\\n\\n%#v\\n\\n%#v\", tc.Input, actual, expected)\n\t\t\t}\n\t\t\t// Check for correct atime/mtime\n\t\t\tfor _, dir := range actual {\n\t\t\t\tpath := filepath.Join(dst, dir)\n\t\t\t\tif tc.Mtime != nil {\n\t\t\t\t\tfi, err := os.Stat(path)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tt.Fatalf(\"err: %s\", err)\n\t\t\t\t\t}\n\t\t\t\t\tactual := fi.ModTime()\n\t\t\t\t\tif tc.Mtime.Unix() > 0 {\n\t\t\t\t\t\texpected := *tc.Mtime\n\t\t\t\t\t\tif actual != expected {\n\t\t\t\t\t\t\tt.Fatalf(\"err %s: expected mtime '%s' for %s, got '%s'\", tc.Input, expected.String(), path, actual.String())\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if actual.Unix() < 0 {\n\t\t\t\t\t\tt.Fatalf(\"err %s: expected mtime to be > 0, got '%s'\", actual.String())\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t}\n\t\t}()\n\t}\n}\n\nfunc testListDir(t testing.T, path string) []string {\n\tvar result []string\n\terr := filepath.Walk(path, func(sub string, info os.FileInfo, err error) error {\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tsub = strings.TrimPrefix(sub, path)\n\t\tif sub == \"\" {\n\t\t\treturn nil\n\t\t}\n\t\tsub = sub[1:] // Trim the leading path sep.\n\n\t\t// If it is a dir, add trailing sep\n\t\tif info.IsDir() {\n\t\t\tsub += string(os.PathSeparator)\n\t\t}\n\n\t\tresult = append(result, sub)\n\t\treturn nil\n\t})\n\tif err != nil {\n\t\tt.Fatalf(\"err: %s\", err)\n\t}\n\n\tsort.Strings(result)\n\treturn result\n}\n\nfunc testMD5(t testing.T, path string) string {\n\tf, err := os.Open(path)\n\tif err != nil {\n\t\tt.Fatalf(\"err: %s\", err)\n\t}\n\tdefer f.Close()\n\n\th := md5.New()\n\t_, err = io.Copy(h, f)\n\tif err != nil {\n\t\tt.Fatalf(\"err: %s\", err)\n\t}\n\n\tresult := h.Sum(nil)\n\treturn hex.EncodeToString(result)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-getter/decompress_tgz.go",
    "content": "package getter\n\nimport (\n\t\"compress/gzip\"\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n)\n\n// TarGzipDecompressor is an implementation of Decompressor that can\n// decompress tar.gzip files.\ntype TarGzipDecompressor struct{}\n\nfunc (d *TarGzipDecompressor) Decompress(dst, src string, dir bool) error {\n\t// If we're going into a directory we should make that first\n\tmkdir := dst\n\tif !dir {\n\t\tmkdir = filepath.Dir(dst)\n\t}\n\tif err := os.MkdirAll(mkdir, 0755); err != nil {\n\t\treturn err\n\t}\n\n\t// File first\n\tf, err := os.Open(src)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer f.Close()\n\n\t// Gzip compression is second\n\tgzipR, err := gzip.NewReader(f)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"Error opening a gzip reader for %s: %s\", src, err)\n\t}\n\tdefer gzipR.Close()\n\n\treturn untar(gzipR, dst, src, dir)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-getter/decompress_txz.go",
    "content": "package getter\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\n\t\"github.com/ulikunitz/xz\"\n)\n\n// TarXzDecompressor is an implementation of Decompressor that can\n// decompress tar.xz files.\ntype TarXzDecompressor struct{}\n\nfunc (d *TarXzDecompressor) Decompress(dst, src string, dir bool) error {\n\t// If we're going into a directory we should make that first\n\tmkdir := dst\n\tif !dir {\n\t\tmkdir = filepath.Dir(dst)\n\t}\n\tif err := os.MkdirAll(mkdir, 0755); err != nil {\n\t\treturn err\n\t}\n\n\t// File first\n\tf, err := os.Open(src)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer f.Close()\n\n\t// xz compression is second\n\ttxzR, err := xz.NewReader(f)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"Error opening an xz reader for %s: %s\", src, err)\n\t}\n\n\treturn untar(txzR, dst, src, dir)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-getter/decompress_xz.go",
    "content": "package getter\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"path/filepath\"\n\n\t\"github.com/ulikunitz/xz\"\n)\n\n// XzDecompressor is an implementation of Decompressor that can\n// decompress xz files.\ntype XzDecompressor struct{}\n\nfunc (d *XzDecompressor) Decompress(dst, src string, dir bool) error {\n\t// Directory isn't supported at all\n\tif dir {\n\t\treturn fmt.Errorf(\"xz-compressed files can only unarchive to a single file\")\n\t}\n\n\t// If we're going into a directory we should make that first\n\tif err := os.MkdirAll(filepath.Dir(dst), 0755); err != nil {\n\t\treturn err\n\t}\n\n\t// File first\n\tf, err := os.Open(src)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer f.Close()\n\n\t// xz compression is second\n\txzR, err := xz.NewReader(f)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Copy it out\n\tdstF, err := os.Create(dst)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer dstF.Close()\n\n\t_, err = io.Copy(dstF, xzR)\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-getter/decompress_zip.go",
    "content": "package getter\n\nimport (\n\t\"archive/zip\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"path/filepath\"\n)\n\n// ZipDecompressor is an implementation of Decompressor that can\n// decompress zip files.\ntype ZipDecompressor struct{}\n\nfunc (d *ZipDecompressor) Decompress(dst, src string, dir bool) error {\n\t// If we're going into a directory we should make that first\n\tmkdir := dst\n\tif !dir {\n\t\tmkdir = filepath.Dir(dst)\n\t}\n\tif err := os.MkdirAll(mkdir, 0755); err != nil {\n\t\treturn err\n\t}\n\n\t// Open the zip\n\tzipR, err := zip.OpenReader(src)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer zipR.Close()\n\n\t// Check the zip integrity\n\tif len(zipR.File) == 0 {\n\t\t// Empty archive\n\t\treturn fmt.Errorf(\"empty archive: %s\", src)\n\t}\n\tif !dir && len(zipR.File) > 1 {\n\t\treturn fmt.Errorf(\"expected a single file: %s\", src)\n\t}\n\n\t// Go through and unarchive\n\tfor _, f := range zipR.File {\n\t\tpath := dst\n\t\tif dir {\n\t\t\t// Disallow parent traversal\n\t\t\tif containsDotDot(f.Name) {\n\t\t\t\treturn fmt.Errorf(\"entry contains '..': %s\", f.Name)\n\t\t\t}\n\n\t\t\tpath = filepath.Join(path, f.Name)\n\t\t}\n\n\t\tif f.FileInfo().IsDir() {\n\t\t\tif !dir {\n\t\t\t\treturn fmt.Errorf(\"expected a single file: %s\", src)\n\t\t\t}\n\n\t\t\t// A directory, just make the directory and continue unarchiving...\n\t\t\tif err := os.MkdirAll(path, 0755); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tcontinue\n\t\t}\n\n\t\t// Create the enclosing directories if we must. ZIP files aren't\n\t\t// required to contain entries for just the directories so this\n\t\t// can happen.\n\t\tif dir {\n\t\t\tif err := os.MkdirAll(filepath.Dir(path), 0755); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\n\t\t// Open the file for reading\n\t\tsrcF, err := f.Open()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// Open the file for writing\n\t\tdstF, err := os.Create(path)\n\t\tif err != nil {\n\t\t\tsrcF.Close()\n\t\t\treturn err\n\t\t}\n\t\t_, err = io.Copy(dstF, srcF)\n\t\tsrcF.Close()\n\t\tdstF.Close()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// Chmod the file\n\t\tif err := os.Chmod(path, f.Mode()); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-getter/detect.go",
    "content": "package getter\n\nimport (\n\t\"fmt\"\n\t\"path/filepath\"\n\n\t\"github.com/hashicorp/go-getter/helper/url\"\n)\n\n// Detector defines the interface that an invalid URL or a URL with a blank\n// scheme is passed through in order to determine if its shorthand for\n// something else well-known.\ntype Detector interface {\n\t// Detect will detect whether the string matches a known pattern to\n\t// turn it into a proper URL.\n\tDetect(string, string) (string, bool, error)\n}\n\n// Detectors is the list of detectors that are tried on an invalid URL.\n// This is also the order they're tried (index 0 is first).\nvar Detectors []Detector\n\nfunc init() {\n\tDetectors = []Detector{\n\t\tnew(GitHubDetector),\n\t\tnew(GitDetector),\n\t\tnew(BitBucketDetector),\n\t\tnew(S3Detector),\n\t\tnew(GCSDetector),\n\t\tnew(FileDetector),\n\t}\n}\n\n// Detect turns a source string into another source string if it is\n// detected to be of a known pattern.\n//\n// The third parameter should be the list of detectors to use in the\n// order to try them. If you don't want to configure this, just use\n// the global Detectors variable.\n//\n// This is safe to be called with an already valid source string: Detect\n// will just return it.\nfunc Detect(src string, pwd string, ds []Detector) (string, error) {\n\tgetForce, getSrc := getForcedGetter(src)\n\n\t// Separate out the subdir if there is one, we don't pass that to detect\n\tgetSrc, subDir := SourceDirSubdir(getSrc)\n\n\tu, err := url.Parse(getSrc)\n\tif err == nil && u.Scheme != \"\" {\n\t\t// Valid URL\n\t\treturn src, nil\n\t}\n\n\tfor _, d := range ds {\n\t\tresult, ok, err := d.Detect(getSrc, pwd)\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\n\t\tvar detectForce string\n\t\tdetectForce, result = getForcedGetter(result)\n\t\tresult, detectSubdir := SourceDirSubdir(result)\n\n\t\t// If we have a subdir from the detection, then prepend it to our\n\t\t// requested subdir.\n\t\tif detectSubdir != \"\" {\n\t\t\tif subDir != \"\" {\n\t\t\t\tsubDir = filepath.Join(detectSubdir, subDir)\n\t\t\t} else {\n\t\t\t\tsubDir = detectSubdir\n\t\t\t}\n\t\t}\n\n\t\tif subDir != \"\" {\n\t\t\tu, err := url.Parse(result)\n\t\t\tif err != nil {\n\t\t\t\treturn \"\", fmt.Errorf(\"Error parsing URL: %s\", err)\n\t\t\t}\n\t\t\tu.Path += \"//\" + subDir\n\n\t\t\t// a subdir may contain wildcards, but in order to support them we\n\t\t\t// have to ensure the path isn't escaped.\n\t\t\tu.RawPath = u.Path\n\n\t\t\tresult = u.String()\n\t\t}\n\n\t\t// Preserve the forced getter if it exists. We try to use the\n\t\t// original set force first, followed by any force set by the\n\t\t// detector.\n\t\tif getForce != \"\" {\n\t\t\tresult = fmt.Sprintf(\"%s::%s\", getForce, result)\n\t\t} else if detectForce != \"\" {\n\t\t\tresult = fmt.Sprintf(\"%s::%s\", detectForce, result)\n\t\t}\n\n\t\treturn result, nil\n\t}\n\n\treturn \"\", fmt.Errorf(\"invalid source string: %s\", src)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-getter/detect_bitbucket.go",
    "content": "package getter\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"strings\"\n)\n\n// BitBucketDetector implements Detector to detect BitBucket URLs and turn\n// them into URLs that the Git or Hg Getter can understand.\ntype BitBucketDetector struct{}\n\nfunc (d *BitBucketDetector) Detect(src, _ string) (string, bool, error) {\n\tif len(src) == 0 {\n\t\treturn \"\", false, nil\n\t}\n\n\tif strings.HasPrefix(src, \"bitbucket.org/\") {\n\t\treturn d.detectHTTP(src)\n\t}\n\n\treturn \"\", false, nil\n}\n\nfunc (d *BitBucketDetector) detectHTTP(src string) (string, bool, error) {\n\tu, err := url.Parse(\"https://\" + src)\n\tif err != nil {\n\t\treturn \"\", true, fmt.Errorf(\"error parsing BitBucket URL: %s\", err)\n\t}\n\n\t// We need to get info on this BitBucket repository to determine whether\n\t// it is Git or Hg.\n\tvar info struct {\n\t\tSCM string `json:\"scm\"`\n\t}\n\tinfoUrl := \"https://api.bitbucket.org/1.0/repositories\" + u.Path\n\tresp, err := http.Get(infoUrl)\n\tif err != nil {\n\t\treturn \"\", true, fmt.Errorf(\"error looking up BitBucket URL: %s\", err)\n\t}\n\tif resp.StatusCode == 403 {\n\t\t// A private repo\n\t\treturn \"\", true, fmt.Errorf(\n\t\t\t\"shorthand BitBucket URL can't be used for private repos, \" +\n\t\t\t\t\"please use a full URL\")\n\t}\n\tdec := json.NewDecoder(resp.Body)\n\tif err := dec.Decode(&info); err != nil {\n\t\treturn \"\", true, fmt.Errorf(\"error looking up BitBucket URL: %s\", err)\n\t}\n\n\tswitch info.SCM {\n\tcase \"git\":\n\t\tif !strings.HasSuffix(u.Path, \".git\") {\n\t\t\tu.Path += \".git\"\n\t\t}\n\n\t\treturn \"git::\" + u.String(), true, nil\n\tcase \"hg\":\n\t\treturn \"hg::\" + u.String(), true, nil\n\tdefault:\n\t\treturn \"\", true, fmt.Errorf(\"unknown BitBucket SCM type: %s\", info.SCM)\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-getter/detect_file.go",
    "content": "package getter\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"runtime\"\n)\n\n// FileDetector implements Detector to detect file paths.\ntype FileDetector struct{}\n\nfunc (d *FileDetector) Detect(src, pwd string) (string, bool, error) {\n\tif len(src) == 0 {\n\t\treturn \"\", false, nil\n\t}\n\n\tif !filepath.IsAbs(src) {\n\t\tif pwd == \"\" {\n\t\t\treturn \"\", true, fmt.Errorf(\n\t\t\t\t\"relative paths require a module with a pwd\")\n\t\t}\n\n\t\t// Stat the pwd to determine if its a symbolic link. If it is,\n\t\t// then the pwd becomes the original directory. Otherwise,\n\t\t// `filepath.Join` below does some weird stuff.\n\t\t//\n\t\t// We just ignore if the pwd doesn't exist. That error will be\n\t\t// caught later when we try to use the URL.\n\t\tif fi, err := os.Lstat(pwd); !os.IsNotExist(err) {\n\t\t\tif err != nil {\n\t\t\t\treturn \"\", true, err\n\t\t\t}\n\t\t\tif fi.Mode()&os.ModeSymlink != 0 {\n\t\t\t\tpwd, err = filepath.EvalSymlinks(pwd)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn \"\", true, err\n\t\t\t\t}\n\n\t\t\t\t// The symlink itself might be a relative path, so we have to\n\t\t\t\t// resolve this to have a correctly rooted URL.\n\t\t\t\tpwd, err = filepath.Abs(pwd)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn \"\", true, err\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tsrc = filepath.Join(pwd, src)\n\t}\n\n\treturn fmtFileURL(src), true, nil\n}\n\nfunc fmtFileURL(path string) string {\n\tif runtime.GOOS == \"windows\" {\n\t\t// Make sure we're using \"/\" on Windows. URLs are \"/\"-based.\n\t\tpath = filepath.ToSlash(path)\n\t\treturn fmt.Sprintf(\"file://%s\", path)\n\t}\n\n\t// Make sure that we don't start with \"/\" since we add that below.\n\tif path[0] == '/' {\n\t\tpath = path[1:]\n\t}\n\treturn fmt.Sprintf(\"file:///%s\", path)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-getter/detect_gcs.go",
    "content": "package getter\n\nimport (\n\t\"fmt\"\n\t\"net/url\"\n\t\"strings\"\n)\n\n// GCSDetector implements Detector to detect GCS URLs and turn\n// them into URLs that the GCSGetter can understand.\ntype GCSDetector struct{}\n\nfunc (d *GCSDetector) Detect(src, _ string) (string, bool, error) {\n\tif len(src) == 0 {\n\t\treturn \"\", false, nil\n\t}\n\n\tif strings.Contains(src, \"googleapis.com/\") {\n\t\treturn d.detectHTTP(src)\n\t}\n\n\treturn \"\", false, nil\n}\n\nfunc (d *GCSDetector) detectHTTP(src string) (string, bool, error) {\n\n\tparts := strings.Split(src, \"/\")\n\tif len(parts) < 5 {\n\t\treturn \"\", false, fmt.Errorf(\n\t\t\t\"URL is not a valid GCS URL\")\n\t}\n\tversion := parts[2]\n\tbucket := parts[3]\n\tobject := strings.Join(parts[4:], \"/\")\n\n\turl, err := url.Parse(fmt.Sprintf(\"https://www.googleapis.com/storage/%s/%s/%s\",\n\t\tversion, bucket, object))\n\tif err != nil {\n\t\treturn \"\", false, fmt.Errorf(\"error parsing GCS URL: %s\", err)\n\t}\n\n\treturn \"gcs::\" + url.String(), true, nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-getter/detect_git.go",
    "content": "package getter\n\n// GitDetector implements Detector to detect Git SSH URLs such as\n// git@host.com:dir1/dir2 and converts them to proper URLs.\ntype GitDetector struct{}\n\nfunc (d *GitDetector) Detect(src, _ string) (string, bool, error) {\n\tif len(src) == 0 {\n\t\treturn \"\", false, nil\n\t}\n\n\tu, err := detectSSH(src)\n\tif err != nil {\n\t\treturn \"\", true, err\n\t}\n\tif u == nil {\n\t\treturn \"\", false, nil\n\t}\n\n\t// We require the username to be \"git\" to assume that this is a Git URL\n\tif u.User.Username() != \"git\" {\n\t\treturn \"\", false, nil\n\t}\n\n\treturn \"git::\" + u.String(), true, nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-getter/detect_github.go",
    "content": "package getter\n\nimport (\n\t\"fmt\"\n\t\"net/url\"\n\t\"strings\"\n)\n\n// GitHubDetector implements Detector to detect GitHub URLs and turn\n// them into URLs that the Git Getter can understand.\ntype GitHubDetector struct{}\n\nfunc (d *GitHubDetector) Detect(src, _ string) (string, bool, error) {\n\tif len(src) == 0 {\n\t\treturn \"\", false, nil\n\t}\n\n\tif strings.HasPrefix(src, \"github.com/\") {\n\t\treturn d.detectHTTP(src)\n\t}\n\n\treturn \"\", false, nil\n}\n\nfunc (d *GitHubDetector) detectHTTP(src string) (string, bool, error) {\n\tparts := strings.Split(src, \"/\")\n\tif len(parts) < 3 {\n\t\treturn \"\", false, fmt.Errorf(\n\t\t\t\"GitHub URLs should be github.com/username/repo\")\n\t}\n\n\turlStr := fmt.Sprintf(\"https://%s\", strings.Join(parts[:3], \"/\"))\n\turl, err := url.Parse(urlStr)\n\tif err != nil {\n\t\treturn \"\", true, fmt.Errorf(\"error parsing GitHub URL: %s\", err)\n\t}\n\n\tif !strings.HasSuffix(url.Path, \".git\") {\n\t\turl.Path += \".git\"\n\t}\n\n\tif len(parts) > 3 {\n\t\turl.Path += \"//\" + strings.Join(parts[3:], \"/\")\n\t}\n\n\treturn \"git::\" + url.String(), true, nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-getter/detect_s3.go",
    "content": "package getter\n\nimport (\n\t\"fmt\"\n\t\"net/url\"\n\t\"strings\"\n)\n\n// S3Detector implements Detector to detect S3 URLs and turn\n// them into URLs that the S3 getter can understand.\ntype S3Detector struct{}\n\nfunc (d *S3Detector) Detect(src, _ string) (string, bool, error) {\n\tif len(src) == 0 {\n\t\treturn \"\", false, nil\n\t}\n\n\tif strings.Contains(src, \".amazonaws.com/\") {\n\t\treturn d.detectHTTP(src)\n\t}\n\n\treturn \"\", false, nil\n}\n\nfunc (d *S3Detector) detectHTTP(src string) (string, bool, error) {\n\tparts := strings.Split(src, \"/\")\n\tif len(parts) < 2 {\n\t\treturn \"\", false, fmt.Errorf(\n\t\t\t\"URL is not a valid S3 URL\")\n\t}\n\n\thostParts := strings.Split(parts[0], \".\")\n\tif len(hostParts) == 3 {\n\t\treturn d.detectPathStyle(hostParts[0], parts[1:])\n\t} else if len(hostParts) == 4 {\n\t\treturn d.detectVhostStyle(hostParts[1], hostParts[0], parts[1:])\n\t} else {\n\t\treturn \"\", false, fmt.Errorf(\n\t\t\t\"URL is not a valid S3 URL\")\n\t}\n}\n\nfunc (d *S3Detector) detectPathStyle(region string, parts []string) (string, bool, error) {\n\turlStr := fmt.Sprintf(\"https://%s.amazonaws.com/%s\", region, strings.Join(parts, \"/\"))\n\turl, err := url.Parse(urlStr)\n\tif err != nil {\n\t\treturn \"\", false, fmt.Errorf(\"error parsing S3 URL: %s\", err)\n\t}\n\n\treturn \"s3::\" + url.String(), true, nil\n}\n\nfunc (d *S3Detector) detectVhostStyle(region, bucket string, parts []string) (string, bool, error) {\n\turlStr := fmt.Sprintf(\"https://%s.amazonaws.com/%s/%s\", region, bucket, strings.Join(parts, \"/\"))\n\turl, err := url.Parse(urlStr)\n\tif err != nil {\n\t\treturn \"\", false, fmt.Errorf(\"error parsing S3 URL: %s\", err)\n\t}\n\n\treturn \"s3::\" + url.String(), true, nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-getter/detect_ssh.go",
    "content": "package getter\n\nimport (\n\t\"fmt\"\n\t\"net/url\"\n\t\"regexp\"\n\t\"strings\"\n)\n\n// Note that we do not have an SSH-getter currently so this file serves\n// only to hold the detectSSH helper that is used by other detectors.\n\n// sshPattern matches SCP-like SSH patterns (user@host:path)\nvar sshPattern = regexp.MustCompile(\"^(?:([^@]+)@)?([^:]+):/?(.+)$\")\n\n// detectSSH determines if the src string matches an SSH-like URL and\n// converts it into a net.URL compatible string. This returns nil if the\n// string doesn't match the SSH pattern.\n//\n// This function is tested indirectly via detect_git_test.go\nfunc detectSSH(src string) (*url.URL, error) {\n\tmatched := sshPattern.FindStringSubmatch(src)\n\tif matched == nil {\n\t\treturn nil, nil\n\t}\n\n\tuser := matched[1]\n\thost := matched[2]\n\tpath := matched[3]\n\tqidx := strings.Index(path, \"?\")\n\tif qidx == -1 {\n\t\tqidx = len(path)\n\t}\n\n\tvar u url.URL\n\tu.Scheme = \"ssh\"\n\tu.User = url.User(user)\n\tu.Host = host\n\tu.Path = path[0:qidx]\n\tif qidx < len(path) {\n\t\tq, err := url.ParseQuery(path[qidx+1:])\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"error parsing GitHub SSH URL: %s\", err)\n\t\t}\n\t\tu.RawQuery = q.Encode()\n\t}\n\n\treturn &u, nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-getter/folder_storage.go",
    "content": "package getter\n\nimport (\n\t\"crypto/md5\"\n\t\"encoding/hex\"\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n)\n\n// FolderStorage is an implementation of the Storage interface that manages\n// modules on the disk.\ntype FolderStorage struct {\n\t// StorageDir is the directory where the modules will be stored.\n\tStorageDir string\n}\n\n// Dir implements Storage.Dir\nfunc (s *FolderStorage) Dir(key string) (d string, e bool, err error) {\n\td = s.dir(key)\n\t_, err = os.Stat(d)\n\tif err == nil {\n\t\t// Directory exists\n\t\te = true\n\t\treturn\n\t}\n\tif os.IsNotExist(err) {\n\t\t// Directory doesn't exist\n\t\td = \"\"\n\t\te = false\n\t\terr = nil\n\t\treturn\n\t}\n\n\t// An error\n\td = \"\"\n\te = false\n\treturn\n}\n\n// Get implements Storage.Get\nfunc (s *FolderStorage) Get(key string, source string, update bool) error {\n\tdir := s.dir(key)\n\tif !update {\n\t\tif _, err := os.Stat(dir); err == nil {\n\t\t\t// If the directory already exists, then we're done since\n\t\t\t// we're not updating.\n\t\t\treturn nil\n\t\t} else if !os.IsNotExist(err) {\n\t\t\t// If the error we got wasn't a file-not-exist error, then\n\t\t\t// something went wrong and we should report it.\n\t\t\treturn fmt.Errorf(\"Error reading module directory: %s\", err)\n\t\t}\n\t}\n\n\t// Get the source. This always forces an update.\n\treturn Get(dir, source)\n}\n\n// dir returns the directory name internally that we'll use to map to\n// internally.\nfunc (s *FolderStorage) dir(key string) string {\n\tsum := md5.Sum([]byte(key))\n\treturn filepath.Join(s.StorageDir, hex.EncodeToString(sum[:]))\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-getter/get.go",
    "content": "// getter is a package for downloading files or directories from a variety of\n// protocols.\n//\n// getter is unique in its ability to download both directories and files.\n// It also detects certain source strings to be protocol-specific URLs. For\n// example, \"github.com/hashicorp/go-getter\" would turn into a Git URL and\n// use the Git protocol.\n//\n// Protocols and detectors are extensible.\n//\n// To get started, see Client.\npackage getter\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"net/url\"\n\t\"os/exec\"\n\t\"regexp\"\n\t\"syscall\"\n\n\tcleanhttp \"github.com/hashicorp/go-cleanhttp\"\n)\n\n// Getter defines the interface that schemes must implement to download\n// things.\ntype Getter interface {\n\t// Get downloads the given URL into the given directory. This always\n\t// assumes that we're updating and gets the latest version that it can.\n\t//\n\t// The directory may already exist (if we're updating). If it is in a\n\t// format that isn't understood, an error should be returned. Get shouldn't\n\t// simply nuke the directory.\n\tGet(string, *url.URL) error\n\n\t// GetFile downloads the give URL into the given path. The URL must\n\t// reference a single file. If possible, the Getter should check if\n\t// the remote end contains the same file and no-op this operation.\n\tGetFile(string, *url.URL) error\n\n\t// ClientMode returns the mode based on the given URL. This is used to\n\t// allow clients to let the getters decide which mode to use.\n\tClientMode(*url.URL) (ClientMode, error)\n\n\t// SetClient allows a getter to know it's client\n\t// in order to access client's Get functions or\n\t// progress tracking.\n\tSetClient(*Client)\n}\n\n// Getters is the mapping of scheme to the Getter implementation that will\n// be used to get a dependency.\nvar Getters map[string]Getter\n\n// forcedRegexp is the regular expression that finds forced getters. This\n// syntax is schema::url, example: git::https://foo.com\nvar forcedRegexp = regexp.MustCompile(`^([A-Za-z0-9]+)::(.+)$`)\n\n// httpClient is the default client to be used by HttpGetters.\nvar httpClient = cleanhttp.DefaultClient()\n\nfunc init() {\n\thttpGetter := &HttpGetter{\n\t\tNetrc: true,\n\t}\n\n\tGetters = map[string]Getter{\n\t\t\"file\":  new(FileGetter),\n\t\t\"git\":   new(GitGetter),\n\t\t\"gcs\":   new(GCSGetter),\n\t\t\"hg\":    new(HgGetter),\n\t\t\"s3\":    new(S3Getter),\n\t\t\"http\":  httpGetter,\n\t\t\"https\": httpGetter,\n\t}\n}\n\n// Get downloads the directory specified by src into the folder specified by\n// dst. If dst already exists, Get will attempt to update it.\n//\n// src is a URL, whereas dst is always just a file path to a folder. This\n// folder doesn't need to exist. It will be created if it doesn't exist.\nfunc Get(dst, src string, opts ...ClientOption) error {\n\treturn (&Client{\n\t\tSrc:     src,\n\t\tDst:     dst,\n\t\tDir:     true,\n\t\tOptions: opts,\n\t}).Get()\n}\n\n// GetAny downloads a URL into the given destination. Unlike Get or\n// GetFile, both directories and files are supported.\n//\n// dst must be a directory. If src is a file, it will be downloaded\n// into dst with the basename of the URL. If src is a directory or\n// archive, it will be unpacked directly into dst.\nfunc GetAny(dst, src string, opts ...ClientOption) error {\n\treturn (&Client{\n\t\tSrc:     src,\n\t\tDst:     dst,\n\t\tMode:    ClientModeAny,\n\t\tOptions: opts,\n\t}).Get()\n}\n\n// GetFile downloads the file specified by src into the path specified by\n// dst.\nfunc GetFile(dst, src string, opts ...ClientOption) error {\n\treturn (&Client{\n\t\tSrc:     src,\n\t\tDst:     dst,\n\t\tDir:     false,\n\t\tOptions: opts,\n\t}).Get()\n}\n\n// getRunCommand is a helper that will run a command and capture the output\n// in the case an error happens.\nfunc getRunCommand(cmd *exec.Cmd) error {\n\tvar buf bytes.Buffer\n\tcmd.Stdout = &buf\n\tcmd.Stderr = &buf\n\terr := cmd.Run()\n\tif err == nil {\n\t\treturn nil\n\t}\n\tif exiterr, ok := err.(*exec.ExitError); ok {\n\t\t// The program has exited with an exit code != 0\n\t\tif status, ok := exiterr.Sys().(syscall.WaitStatus); ok {\n\t\t\treturn fmt.Errorf(\n\t\t\t\t\"%s exited with %d: %s\",\n\t\t\t\tcmd.Path,\n\t\t\t\tstatus.ExitStatus(),\n\t\t\t\tbuf.String())\n\t\t}\n\t}\n\n\treturn fmt.Errorf(\"error running %s: %s\", cmd.Path, buf.String())\n}\n\n// getForcedGetter takes a source and returns the tuple of the forced\n// getter and the raw URL (without the force syntax).\nfunc getForcedGetter(src string) (string, string) {\n\tvar forced string\n\tif ms := forcedRegexp.FindStringSubmatch(src); ms != nil {\n\t\tforced = ms[1]\n\t\tsrc = ms[2]\n\t}\n\n\treturn forced, src\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-getter/get_base.go",
    "content": "package getter\n\nimport \"context\"\n\n// getter is our base getter; it regroups\n// fields all getters have in common.\ntype getter struct {\n\tclient *Client\n}\n\nfunc (g *getter) SetClient(c *Client) { g.client = c }\n\n// Context tries to returns the Contex from the getter's\n// client. otherwise context.Background() is returned.\nfunc (g *getter) Context() context.Context {\n\tif g == nil || g.client == nil {\n\t\treturn context.Background()\n\t}\n\treturn g.client.Ctx\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-getter/get_file.go",
    "content": "package getter\n\nimport (\n\t\"net/url\"\n\t\"os\"\n)\n\n// FileGetter is a Getter implementation that will download a module from\n// a file scheme.\ntype FileGetter struct {\n\tgetter\n\n\t// Copy, if set to true, will copy data instead of using a symlink. If\n\t// false, attempts to symlink to speed up the operation and to lower the\n\t// disk space usage. If the symlink fails, may attempt to copy on windows.\n\tCopy bool\n}\n\nfunc (g *FileGetter) ClientMode(u *url.URL) (ClientMode, error) {\n\tpath := u.Path\n\tif u.RawPath != \"\" {\n\t\tpath = u.RawPath\n\t}\n\n\tfi, err := os.Stat(path)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\t// Check if the source is a directory.\n\tif fi.IsDir() {\n\t\treturn ClientModeDir, nil\n\t}\n\n\treturn ClientModeFile, nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-getter/get_file_copy.go",
    "content": "package getter\n\nimport (\n\t\"context\"\n\t\"io\"\n)\n\n// readerFunc is syntactic sugar for read interface.\ntype readerFunc func(p []byte) (n int, err error)\n\nfunc (rf readerFunc) Read(p []byte) (n int, err error) { return rf(p) }\n\n// Copy is a io.Copy cancellable by context\nfunc Copy(ctx context.Context, dst io.Writer, src io.Reader) (int64, error) {\n\t// Copy will call the Reader and Writer interface multiple time, in order\n\t// to copy by chunk (avoiding loading the whole file in memory).\n\treturn io.Copy(dst, readerFunc(func(p []byte) (int, error) {\n\n\t\tselect {\n\t\tcase <-ctx.Done():\n\t\t\t// context has been canceled\n\t\t\t// stop process and propagate \"context canceled\" error\n\t\t\treturn 0, ctx.Err()\n\t\tdefault:\n\t\t\t// otherwise just run default io.Reader implementation\n\t\t\treturn src.Read(p)\n\t\t}\n\t}))\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-getter/get_file_unix.go",
    "content": "// +build !windows\n\npackage getter\n\nimport (\n\t\"fmt\"\n\t\"net/url\"\n\t\"os\"\n\t\"path/filepath\"\n)\n\nfunc (g *FileGetter) Get(dst string, u *url.URL) error {\n\tpath := u.Path\n\tif u.RawPath != \"\" {\n\t\tpath = u.RawPath\n\t}\n\n\t// The source path must exist and be a directory to be usable.\n\tif fi, err := os.Stat(path); err != nil {\n\t\treturn fmt.Errorf(\"source path error: %s\", err)\n\t} else if !fi.IsDir() {\n\t\treturn fmt.Errorf(\"source path must be a directory\")\n\t}\n\n\tfi, err := os.Lstat(dst)\n\tif err != nil && !os.IsNotExist(err) {\n\t\treturn err\n\t}\n\n\t// If the destination already exists, it must be a symlink\n\tif err == nil {\n\t\tmode := fi.Mode()\n\t\tif mode&os.ModeSymlink == 0 {\n\t\t\treturn fmt.Errorf(\"destination exists and is not a symlink\")\n\t\t}\n\n\t\t// Remove the destination\n\t\tif err := os.Remove(dst); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// Create all the parent directories\n\tif err := os.MkdirAll(filepath.Dir(dst), 0755); err != nil {\n\t\treturn err\n\t}\n\n\treturn os.Symlink(path, dst)\n}\n\nfunc (g *FileGetter) GetFile(dst string, u *url.URL) error {\n\tctx := g.Context()\n\tpath := u.Path\n\tif u.RawPath != \"\" {\n\t\tpath = u.RawPath\n\t}\n\n\t// The source path must exist and be a file to be usable.\n\tif fi, err := os.Stat(path); err != nil {\n\t\treturn fmt.Errorf(\"source path error: %s\", err)\n\t} else if fi.IsDir() {\n\t\treturn fmt.Errorf(\"source path must be a file\")\n\t}\n\n\t_, err := os.Lstat(dst)\n\tif err != nil && !os.IsNotExist(err) {\n\t\treturn err\n\t}\n\n\t// If the destination already exists, it must be a symlink\n\tif err == nil {\n\t\t// Remove the destination\n\t\tif err := os.Remove(dst); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// Create all the parent directories\n\tif err := os.MkdirAll(filepath.Dir(dst), 0755); err != nil {\n\t\treturn err\n\t}\n\n\t// If we're not copying, just symlink and we're done\n\tif !g.Copy {\n\t\treturn os.Symlink(path, dst)\n\t}\n\n\t// Copy\n\tsrcF, err := os.Open(path)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer srcF.Close()\n\n\tdstF, err := os.Create(dst)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer dstF.Close()\n\n\t_, err = Copy(ctx, dstF, srcF)\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-getter/get_file_windows.go",
    "content": "// +build windows\n\npackage getter\n\nimport (\n\t\"fmt\"\n\t\"net/url\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"strings\"\n\t\"syscall\"\n)\n\nfunc (g *FileGetter) Get(dst string, u *url.URL) error {\n\tctx := g.Context()\n\tpath := u.Path\n\tif u.RawPath != \"\" {\n\t\tpath = u.RawPath\n\t}\n\n\t// The source path must exist and be a directory to be usable.\n\tif fi, err := os.Stat(path); err != nil {\n\t\treturn fmt.Errorf(\"source path error: %s\", err)\n\t} else if !fi.IsDir() {\n\t\treturn fmt.Errorf(\"source path must be a directory\")\n\t}\n\n\tfi, err := os.Lstat(dst)\n\tif err != nil && !os.IsNotExist(err) {\n\t\treturn err\n\t}\n\n\t// If the destination already exists, it must be a symlink\n\tif err == nil {\n\t\tmode := fi.Mode()\n\t\tif mode&os.ModeSymlink == 0 {\n\t\t\treturn fmt.Errorf(\"destination exists and is not a symlink\")\n\t\t}\n\n\t\t// Remove the destination\n\t\tif err := os.Remove(dst); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// Create all the parent directories\n\tif err := os.MkdirAll(filepath.Dir(dst), 0755); err != nil {\n\t\treturn err\n\t}\n\n\tsourcePath := toBackslash(path)\n\n\t// Use mklink to create a junction point\n\toutput, err := exec.CommandContext(ctx, \"cmd\", \"/c\", \"mklink\", \"/J\", dst, sourcePath).CombinedOutput()\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to run mklink %v %v: %v %q\", dst, sourcePath, err, output)\n\t}\n\n\treturn nil\n}\n\nfunc (g *FileGetter) GetFile(dst string, u *url.URL) error {\n\tctx := g.Context()\n\tpath := u.Path\n\tif u.RawPath != \"\" {\n\t\tpath = u.RawPath\n\t}\n\n\t// The source path must exist and be a directory to be usable.\n\tif fi, err := os.Stat(path); err != nil {\n\t\treturn fmt.Errorf(\"source path error: %s\", err)\n\t} else if fi.IsDir() {\n\t\treturn fmt.Errorf(\"source path must be a file\")\n\t}\n\n\t_, err := os.Lstat(dst)\n\tif err != nil && !os.IsNotExist(err) {\n\t\treturn err\n\t}\n\n\t// If the destination already exists, it must be a symlink\n\tif err == nil {\n\t\t// Remove the destination\n\t\tif err := os.Remove(dst); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// Create all the parent directories\n\tif err := os.MkdirAll(filepath.Dir(dst), 0755); err != nil {\n\t\treturn err\n\t}\n\n\t// If we're not copying, just symlink and we're done\n\tif !g.Copy {\n\t\tif err = os.Symlink(path, dst); err == nil {\n\t\t\treturn err\n\t\t}\n\t\tlerr, ok := err.(*os.LinkError)\n\t\tif !ok {\n\t\t\treturn err\n\t\t}\n\t\tswitch lerr.Err {\n\t\tcase syscall.ERROR_PRIVILEGE_NOT_HELD:\n\t\t\t// no symlink privilege, let's\n\t\t\t// fallback to a copy to avoid an error.\n\t\t\tbreak\n\t\tdefault:\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// Copy\n\tsrcF, err := os.Open(path)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer srcF.Close()\n\n\tdstF, err := os.Create(dst)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer dstF.Close()\n\n\t_, err = Copy(ctx, dstF, srcF)\n\treturn err\n}\n\n// toBackslash returns the result of replacing each slash character\n// in path with a backslash ('\\') character. Multiple separators are\n// replaced by multiple backslashes.\nfunc toBackslash(path string) string {\n\treturn strings.Replace(path, \"/\", \"\\\\\", -1)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-getter/get_gcs.go",
    "content": "package getter\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"net/url\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n\n\t\"cloud.google.com/go/storage\"\n\t\"google.golang.org/api/iterator\"\n)\n\n// GCSGetter is a Getter implementation that will download a module from\n// a GCS bucket.\ntype GCSGetter struct {\n\tgetter\n}\n\nfunc (g *GCSGetter) ClientMode(u *url.URL) (ClientMode, error) {\n\tctx := g.Context()\n\n\t// Parse URL\n\tbucket, object, err := g.parseURL(u)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\tclient, err := storage.NewClient(ctx)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\titer := client.Bucket(bucket).Objects(ctx, &storage.Query{Prefix: object})\n\tfor {\n\t\tobj, err := iter.Next()\n\t\tif err != nil && err != iterator.Done {\n\t\t\treturn 0, err\n\t\t}\n\n\t\tif err == iterator.Done {\n\t\t\tbreak\n\t\t}\n\t\tif strings.HasSuffix(obj.Name, \"/\") {\n\t\t\t// A directory matched the prefix search, so this must be a directory\n\t\t\treturn ClientModeDir, nil\n\t\t} else if obj.Name != object {\n\t\t\t// A file matched the prefix search and doesn't have the same name\n\t\t\t// as the query, so this must be a directory\n\t\t\treturn ClientModeDir, nil\n\t\t}\n\t}\n\t// There are no directories or subdirectories, and if a match was returned,\n\t// it was exactly equal to the prefix search. So return File mode\n\treturn ClientModeFile, nil\n}\n\nfunc (g *GCSGetter) Get(dst string, u *url.URL) error {\n\tctx := g.Context()\n\n\t// Parse URL\n\tbucket, object, err := g.parseURL(u)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Remove destination if it already exists\n\t_, err = os.Stat(dst)\n\tif err != nil && !os.IsNotExist(err) {\n\t\treturn err\n\t}\n\tif err == nil {\n\t\t// Remove the destination\n\t\tif err := os.RemoveAll(dst); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// Create all the parent directories\n\tif err := os.MkdirAll(filepath.Dir(dst), 0755); err != nil {\n\t\treturn err\n\t}\n\n\tclient, err := storage.NewClient(ctx)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Iterate through all matching objects.\n\titer := client.Bucket(bucket).Objects(ctx, &storage.Query{Prefix: object})\n\tfor {\n\t\tobj, err := iter.Next()\n\t\tif err != nil && err != iterator.Done {\n\t\t\treturn err\n\t\t}\n\t\tif err == iterator.Done {\n\t\t\tbreak\n\t\t}\n\n\t\tif !strings.HasSuffix(obj.Name, \"/\") {\n\t\t\t// Get the object destination path\n\t\t\tobjDst, err := filepath.Rel(object, obj.Name)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tobjDst = filepath.Join(dst, objDst)\n\t\t\t// Download the matching object.\n\t\t\terr = g.getObject(ctx, client, objDst, bucket, obj.Name)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (g *GCSGetter) GetFile(dst string, u *url.URL) error {\n\tctx := g.Context()\n\n\t// Parse URL\n\tbucket, object, err := g.parseURL(u)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tclient, err := storage.NewClient(ctx)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn g.getObject(ctx, client, dst, bucket, object)\n}\n\nfunc (g *GCSGetter) getObject(ctx context.Context, client *storage.Client, dst, bucket, object string) error {\n\trc, err := client.Bucket(bucket).Object(object).NewReader(ctx)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer rc.Close()\n\n\t// Create all the parent directories\n\tif err := os.MkdirAll(filepath.Dir(dst), 0755); err != nil {\n\t\treturn err\n\t}\n\n\tf, err := os.Create(dst)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer f.Close()\n\n\t_, err = Copy(ctx, f, rc)\n\treturn err\n}\n\nfunc (g *GCSGetter) parseURL(u *url.URL) (bucket, path string, err error) {\n\tif strings.Contains(u.Host, \"googleapis.com\") {\n\t\thostParts := strings.Split(u.Host, \".\")\n\t\tif len(hostParts) != 3 {\n\t\t\terr = fmt.Errorf(\"URL is not a valid GCS URL\")\n\t\t\treturn\n\t\t}\n\n\t\tpathParts := strings.SplitN(u.Path, \"/\", 5)\n\t\tif len(pathParts) != 5 {\n\t\t\terr = fmt.Errorf(\"URL is not a valid GCS URL\")\n\t\t\treturn\n\t\t}\n\t\tbucket = pathParts[3]\n\t\tpath = pathParts[4]\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-getter/get_git.go",
    "content": "package getter\n\nimport (\n\t\"context\"\n\t\"encoding/base64\"\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"net/url\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"runtime\"\n\t\"strconv\"\n\t\"strings\"\n\n\turlhelper \"github.com/hashicorp/go-getter/helper/url\"\n\tsafetemp \"github.com/hashicorp/go-safetemp\"\n\tversion \"github.com/hashicorp/go-version\"\n)\n\n// GitGetter is a Getter implementation that will download a module from\n// a git repository.\ntype GitGetter struct {\n\tgetter\n}\n\nfunc (g *GitGetter) ClientMode(_ *url.URL) (ClientMode, error) {\n\treturn ClientModeDir, nil\n}\n\nfunc (g *GitGetter) Get(dst string, u *url.URL) error {\n\tctx := g.Context()\n\tif _, err := exec.LookPath(\"git\"); err != nil {\n\t\treturn fmt.Errorf(\"git must be available and on the PATH\")\n\t}\n\n\t// The port number must be parseable as an integer. If not, the user\n\t// was probably trying to use a scp-style address, in which case the\n\t// ssh:// prefix must be removed to indicate that.\n\tif portStr := u.Port(); portStr != \"\" {\n\t\tif _, err := strconv.ParseUint(portStr, 10, 16); err != nil {\n\t\t\treturn fmt.Errorf(\"invalid port number %q; if using the \\\"scp-like\\\" git address scheme where a colon introduces the path instead, remove the ssh:// portion and use just the git:: prefix\", portStr)\n\t\t}\n\t}\n\n\t// Extract some query parameters we use\n\tvar ref, sshKey string\n\tvar depth int\n\tq := u.Query()\n\tif len(q) > 0 {\n\t\tref = q.Get(\"ref\")\n\t\tq.Del(\"ref\")\n\n\t\tsshKey = q.Get(\"sshkey\")\n\t\tq.Del(\"sshkey\")\n\n\t\tif n, err := strconv.Atoi(q.Get(\"depth\")); err == nil {\n\t\t\tdepth = n\n\t\t}\n\t\tq.Del(\"depth\")\n\n\t\t// Copy the URL\n\t\tvar newU url.URL = *u\n\t\tu = &newU\n\t\tu.RawQuery = q.Encode()\n\t}\n\n\tvar sshKeyFile string\n\tif sshKey != \"\" {\n\t\t// Check that the git version is sufficiently new.\n\t\tif err := checkGitVersion(\"2.3\"); err != nil {\n\t\t\treturn fmt.Errorf(\"Error using ssh key: %v\", err)\n\t\t}\n\n\t\t// We have an SSH key - decode it.\n\t\traw, err := base64.StdEncoding.DecodeString(sshKey)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// Create a temp file for the key and ensure it is removed.\n\t\tfh, err := ioutil.TempFile(\"\", \"go-getter\")\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsshKeyFile = fh.Name()\n\t\tdefer os.Remove(sshKeyFile)\n\n\t\t// Set the permissions prior to writing the key material.\n\t\tif err := os.Chmod(sshKeyFile, 0600); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// Write the raw key into the temp file.\n\t\t_, err = fh.Write(raw)\n\t\tfh.Close()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// Clone or update the repository\n\t_, err := os.Stat(dst)\n\tif err != nil && !os.IsNotExist(err) {\n\t\treturn err\n\t}\n\tif err == nil {\n\t\terr = g.update(ctx, dst, sshKeyFile, ref, depth)\n\t} else {\n\t\terr = g.clone(ctx, dst, sshKeyFile, u, depth)\n\t}\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Next: check out the proper tag/branch if it is specified, and checkout\n\tif ref != \"\" {\n\t\tif err := g.checkout(dst, ref); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// Lastly, download any/all submodules.\n\treturn g.fetchSubmodules(ctx, dst, sshKeyFile, depth)\n}\n\n// GetFile for Git doesn't support updating at this time. It will download\n// the file every time.\nfunc (g *GitGetter) GetFile(dst string, u *url.URL) error {\n\ttd, tdcloser, err := safetemp.Dir(\"\", \"getter\")\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer tdcloser.Close()\n\n\t// Get the filename, and strip the filename from the URL so we can\n\t// just get the repository directly.\n\tfilename := filepath.Base(u.Path)\n\tu.Path = filepath.Dir(u.Path)\n\n\t// Get the full repository\n\tif err := g.Get(td, u); err != nil {\n\t\treturn err\n\t}\n\n\t// Copy the single file\n\tu, err = urlhelper.Parse(fmtFileURL(filepath.Join(td, filename)))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfg := &FileGetter{Copy: true}\n\treturn fg.GetFile(dst, u)\n}\n\nfunc (g *GitGetter) checkout(dst string, ref string) error {\n\tcmd := exec.Command(\"git\", \"checkout\", ref)\n\tcmd.Dir = dst\n\treturn getRunCommand(cmd)\n}\n\nfunc (g *GitGetter) clone(ctx context.Context, dst, sshKeyFile string, u *url.URL, depth int) error {\n\targs := []string{\"clone\"}\n\n\tif depth > 0 {\n\t\targs = append(args, \"--depth\", strconv.Itoa(depth))\n\t}\n\n\targs = append(args, u.String(), dst)\n\tcmd := exec.CommandContext(ctx, \"git\", args...)\n\tsetupGitEnv(cmd, sshKeyFile)\n\treturn getRunCommand(cmd)\n}\n\nfunc (g *GitGetter) update(ctx context.Context, dst, sshKeyFile, ref string, depth int) error {\n\t// Determine if we're a branch. If we're NOT a branch, then we just\n\t// switch to master prior to checking out\n\tcmd := exec.CommandContext(ctx, \"git\", \"show-ref\", \"-q\", \"--verify\", \"refs/heads/\"+ref)\n\tcmd.Dir = dst\n\n\tif getRunCommand(cmd) != nil {\n\t\t// Not a branch, switch to master. This will also catch non-existent\n\t\t// branches, in which case we want to switch to master and then\n\t\t// checkout the proper branch later.\n\t\tref = \"master\"\n\t}\n\n\t// We have to be on a branch to pull\n\tif err := g.checkout(dst, ref); err != nil {\n\t\treturn err\n\t}\n\n\tif depth > 0 {\n\t\tcmd = exec.Command(\"git\", \"pull\", \"--depth\", strconv.Itoa(depth), \"--ff-only\")\n\t} else {\n\t\tcmd = exec.Command(\"git\", \"pull\", \"--ff-only\")\n\t}\n\n\tcmd.Dir = dst\n\tsetupGitEnv(cmd, sshKeyFile)\n\treturn getRunCommand(cmd)\n}\n\n// fetchSubmodules downloads any configured submodules recursively.\nfunc (g *GitGetter) fetchSubmodules(ctx context.Context, dst, sshKeyFile string, depth int) error {\n\targs := []string{\"submodule\", \"update\", \"--init\", \"--recursive\"}\n\tif depth > 0 {\n\t\targs = append(args, \"--depth\", strconv.Itoa(depth))\n\t}\n\tcmd := exec.CommandContext(ctx, \"git\", args...)\n\tcmd.Dir = dst\n\tsetupGitEnv(cmd, sshKeyFile)\n\treturn getRunCommand(cmd)\n}\n\n// setupGitEnv sets up the environment for the given command. This is used to\n// pass configuration data to git and ssh and enables advanced cloning methods.\nfunc setupGitEnv(cmd *exec.Cmd, sshKeyFile string) {\n\tconst gitSSHCommand = \"GIT_SSH_COMMAND=\"\n\tvar sshCmd []string\n\n\t// If we have an existing GIT_SSH_COMMAND, we need to append our options.\n\t// We will also remove our old entry to make sure the behavior is the same\n\t// with versions of Go < 1.9.\n\tenv := os.Environ()\n\tfor i, v := range env {\n\t\tif strings.HasPrefix(v, gitSSHCommand) && len(v) > len(gitSSHCommand) {\n\t\t\tsshCmd = []string{v}\n\n\t\t\tenv[i], env[len(env)-1] = env[len(env)-1], env[i]\n\t\t\tenv = env[:len(env)-1]\n\t\t\tbreak\n\t\t}\n\t}\n\n\tif len(sshCmd) == 0 {\n\t\tsshCmd = []string{gitSSHCommand + \"ssh\"}\n\t}\n\n\tif sshKeyFile != \"\" {\n\t\t// We have an SSH key temp file configured, tell ssh about this.\n\t\tif runtime.GOOS == \"windows\" {\n\t\t\tsshKeyFile = strings.Replace(sshKeyFile, `\\`, `/`, -1)\n\t\t}\n\t\tsshCmd = append(sshCmd, \"-i\", sshKeyFile)\n\t}\n\n\tenv = append(env, strings.Join(sshCmd, \" \"))\n\tcmd.Env = env\n}\n\n// checkGitVersion is used to check the version of git installed on the system\n// against a known minimum version. Returns an error if the installed version\n// is older than the given minimum.\nfunc checkGitVersion(min string) error {\n\twant, err := version.NewVersion(min)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tout, err := exec.Command(\"git\", \"version\").Output()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfields := strings.Fields(string(out))\n\tif len(fields) < 3 {\n\t\treturn fmt.Errorf(\"Unexpected 'git version' output: %q\", string(out))\n\t}\n\tv := fields[2]\n\tif runtime.GOOS == \"windows\" && strings.Contains(v, \".windows.\") {\n\t\t// on windows, git version will return for example:\n\t\t// git version 2.20.1.windows.1\n\t\t// Which does not follow the semantic versionning specs\n\t\t// https://semver.org. We remove that part in order for\n\t\t// go-version to not error.\n\t\tv = v[:strings.Index(v, \".windows.\")]\n\t}\n\n\thave, err := version.NewVersion(v)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif have.LessThan(want) {\n\t\treturn fmt.Errorf(\"Required git version = %s, have %s\", want, have)\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-getter/get_hg.go",
    "content": "package getter\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"net/url\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"runtime\"\n\n\turlhelper \"github.com/hashicorp/go-getter/helper/url\"\n\tsafetemp \"github.com/hashicorp/go-safetemp\"\n)\n\n// HgGetter is a Getter implementation that will download a module from\n// a Mercurial repository.\ntype HgGetter struct {\n\tgetter\n}\n\nfunc (g *HgGetter) ClientMode(_ *url.URL) (ClientMode, error) {\n\treturn ClientModeDir, nil\n}\n\nfunc (g *HgGetter) Get(dst string, u *url.URL) error {\n\tctx := g.Context()\n\tif _, err := exec.LookPath(\"hg\"); err != nil {\n\t\treturn fmt.Errorf(\"hg must be available and on the PATH\")\n\t}\n\n\tnewURL, err := urlhelper.Parse(u.String())\n\tif err != nil {\n\t\treturn err\n\t}\n\tif fixWindowsDrivePath(newURL) {\n\t\t// See valid file path form on http://www.selenic.com/hg/help/urls\n\t\tnewURL.Path = fmt.Sprintf(\"/%s\", newURL.Path)\n\t}\n\n\t// Extract some query parameters we use\n\tvar rev string\n\tq := newURL.Query()\n\tif len(q) > 0 {\n\t\trev = q.Get(\"rev\")\n\t\tq.Del(\"rev\")\n\n\t\tnewURL.RawQuery = q.Encode()\n\t}\n\n\t_, err = os.Stat(dst)\n\tif err != nil && !os.IsNotExist(err) {\n\t\treturn err\n\t}\n\tif err != nil {\n\t\tif err := g.clone(dst, newURL); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tif err := g.pull(dst, newURL); err != nil {\n\t\treturn err\n\t}\n\n\treturn g.update(ctx, dst, newURL, rev)\n}\n\n// GetFile for Hg doesn't support updating at this time. It will download\n// the file every time.\nfunc (g *HgGetter) GetFile(dst string, u *url.URL) error {\n\t// Create a temporary directory to store the full source. This has to be\n\t// a non-existent directory.\n\ttd, tdcloser, err := safetemp.Dir(\"\", \"getter\")\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer tdcloser.Close()\n\n\t// Get the filename, and strip the filename from the URL so we can\n\t// just get the repository directly.\n\tfilename := filepath.Base(u.Path)\n\tu.Path = filepath.ToSlash(filepath.Dir(u.Path))\n\n\t// If we're on Windows, we need to set the host to \"localhost\" for hg\n\tif runtime.GOOS == \"windows\" {\n\t\tu.Host = \"localhost\"\n\t}\n\n\t// Get the full repository\n\tif err := g.Get(td, u); err != nil {\n\t\treturn err\n\t}\n\n\t// Copy the single file\n\tu, err = urlhelper.Parse(fmtFileURL(filepath.Join(td, filename)))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfg := &FileGetter{Copy: true, getter: g.getter}\n\treturn fg.GetFile(dst, u)\n}\n\nfunc (g *HgGetter) clone(dst string, u *url.URL) error {\n\tcmd := exec.Command(\"hg\", \"clone\", \"-U\", u.String(), dst)\n\treturn getRunCommand(cmd)\n}\n\nfunc (g *HgGetter) pull(dst string, u *url.URL) error {\n\tcmd := exec.Command(\"hg\", \"pull\")\n\tcmd.Dir = dst\n\treturn getRunCommand(cmd)\n}\n\nfunc (g *HgGetter) update(ctx context.Context, dst string, u *url.URL, rev string) error {\n\targs := []string{\"update\"}\n\tif rev != \"\" {\n\t\targs = append(args, rev)\n\t}\n\n\tcmd := exec.CommandContext(ctx, \"hg\", args...)\n\tcmd.Dir = dst\n\treturn getRunCommand(cmd)\n}\n\nfunc fixWindowsDrivePath(u *url.URL) bool {\n\t// hg assumes a file:/// prefix for Windows drive letter file paths.\n\t// (e.g. file:///c:/foo/bar)\n\t// If the URL Path does not begin with a '/' character, the resulting URL\n\t// path will have a file:// prefix. (e.g. file://c:/foo/bar)\n\t// See http://www.selenic.com/hg/help/urls and the examples listed in\n\t// http://selenic.com/repo/hg-stable/file/1265a3a71d75/mercurial/util.py#l1936\n\treturn runtime.GOOS == \"windows\" && u.Scheme == \"file\" &&\n\t\tlen(u.Path) > 1 && u.Path[0] != '/' && u.Path[1] == ':'\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-getter/get_http.go",
    "content": "package getter\n\nimport (\n\t\"context\"\n\t\"encoding/xml\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strconv\"\n\t\"strings\"\n\n\tsafetemp \"github.com/hashicorp/go-safetemp\"\n)\n\n// HttpGetter is a Getter implementation that will download from an HTTP\n// endpoint.\n//\n// For file downloads, HTTP is used directly.\n//\n// The protocol for downloading a directory from an HTTP endpoint is as follows:\n//\n// An HTTP GET request is made to the URL with the additional GET parameter\n// \"terraform-get=1\". This lets you handle that scenario specially if you\n// wish. The response must be a 2xx.\n//\n// First, a header is looked for \"X-Terraform-Get\" which should contain\n// a source URL to download.\n//\n// If the header is not present, then a meta tag is searched for named\n// \"terraform-get\" and the content should be a source URL.\n//\n// The source URL, whether from the header or meta tag, must be a fully\n// formed URL. The shorthand syntax of \"github.com/foo/bar\" or relative\n// paths are not allowed.\ntype HttpGetter struct {\n\tgetter\n\n\t// Netrc, if true, will lookup and use auth information found\n\t// in the user's netrc file if available.\n\tNetrc bool\n\n\t// Client is the http.Client to use for Get requests.\n\t// This defaults to a cleanhttp.DefaultClient if left unset.\n\tClient *http.Client\n\n\t// Header contains optional request header fields that should be included\n\t// with every HTTP request. Note that the zero value of this field is nil,\n\t// and as such it needs to be initialized before use, via something like\n\t// make(http.Header).\n\tHeader http.Header\n}\n\nfunc (g *HttpGetter) ClientMode(u *url.URL) (ClientMode, error) {\n\tif strings.HasSuffix(u.Path, \"/\") {\n\t\treturn ClientModeDir, nil\n\t}\n\treturn ClientModeFile, nil\n}\n\nfunc (g *HttpGetter) Get(dst string, u *url.URL) error {\n\tctx := g.Context()\n\t// Copy the URL so we can modify it\n\tvar newU url.URL = *u\n\tu = &newU\n\n\tif g.Netrc {\n\t\t// Add auth from netrc if we can\n\t\tif err := addAuthFromNetrc(u); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tif g.Client == nil {\n\t\tg.Client = httpClient\n\t}\n\n\t// Add terraform-get to the parameter.\n\tq := u.Query()\n\tq.Add(\"terraform-get\", \"1\")\n\tu.RawQuery = q.Encode()\n\n\t// Get the URL\n\treq, err := http.NewRequest(\"GET\", u.String(), nil)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treq.Header = g.Header\n\tresp, err := g.Client.Do(req)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tdefer resp.Body.Close()\n\tif resp.StatusCode < 200 || resp.StatusCode >= 300 {\n\t\treturn fmt.Errorf(\"bad response code: %d\", resp.StatusCode)\n\t}\n\n\t// Extract the source URL\n\tvar source string\n\tif v := resp.Header.Get(\"X-Terraform-Get\"); v != \"\" {\n\t\tsource = v\n\t} else {\n\t\tsource, err = g.parseMeta(resp.Body)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tif source == \"\" {\n\t\treturn fmt.Errorf(\"no source URL was returned\")\n\t}\n\n\t// If there is a subdir component, then we download the root separately\n\t// into a temporary directory, then copy over the proper subdir.\n\tsource, subDir := SourceDirSubdir(source)\n\tif subDir == \"\" {\n\t\tvar opts []ClientOption\n\t\tif g.client != nil {\n\t\t\topts = g.client.Options\n\t\t}\n\t\treturn Get(dst, source, opts...)\n\t}\n\n\t// We have a subdir, time to jump some hoops\n\treturn g.getSubdir(ctx, dst, source, subDir)\n}\n\nfunc (g *HttpGetter) GetFile(dst string, src *url.URL) error {\n\tctx := g.Context()\n\tif g.Netrc {\n\t\t// Add auth from netrc if we can\n\t\tif err := addAuthFromNetrc(src); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// Create all the parent directories if needed\n\tif err := os.MkdirAll(filepath.Dir(dst), 0755); err != nil {\n\t\treturn err\n\t}\n\n\tf, err := os.OpenFile(dst, os.O_RDWR|os.O_CREATE, os.FileMode(0666))\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer f.Close()\n\n\tif g.Client == nil {\n\t\tg.Client = httpClient\n\t}\n\n\tvar currentFileSize int64\n\n\t// We first make a HEAD request so we can check\n\t// if the server supports range queries. If the server/URL doesn't\n\t// support HEAD requests, we just fall back to GET.\n\treq, err := http.NewRequest(\"HEAD\", src.String(), nil)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif g.Header != nil {\n\t\treq.Header = g.Header\n\t}\n\theadResp, err := g.Client.Do(req)\n\tif err == nil && headResp != nil {\n\t\theadResp.Body.Close()\n\t\tif headResp.StatusCode == 200 {\n\t\t\t// If the HEAD request succeeded, then attempt to set the range\n\t\t\t// query if we can.\n\t\t\tif headResp.Header.Get(\"Accept-Ranges\") == \"bytes\" {\n\t\t\t\tif fi, err := f.Stat(); err == nil {\n\t\t\t\t\tif _, err = f.Seek(0, os.SEEK_END); err == nil {\n\t\t\t\t\t\treq.Header.Set(\"Range\", fmt.Sprintf(\"bytes=%d-\", fi.Size()))\n\t\t\t\t\t\tcurrentFileSize = fi.Size()\n\t\t\t\t\t\ttotalFileSize, _ := strconv.ParseInt(headResp.Header.Get(\"Content-Length\"), 10, 64)\n\t\t\t\t\t\tif currentFileSize >= totalFileSize {\n\t\t\t\t\t\t\t// file already present\n\t\t\t\t\t\t\treturn nil\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treq.Method = \"GET\"\n\n\tresp, err := g.Client.Do(req)\n\tif err != nil {\n\t\treturn err\n\t}\n\tswitch resp.StatusCode {\n\tcase http.StatusOK, http.StatusPartialContent:\n\t\t// all good\n\tdefault:\n\t\tresp.Body.Close()\n\t\treturn fmt.Errorf(\"bad response code: %d\", resp.StatusCode)\n\t}\n\n\tbody := resp.Body\n\n\tif g.client != nil && g.client.ProgressListener != nil {\n\t\t// track download\n\t\tfn := filepath.Base(src.EscapedPath())\n\t\tbody = g.client.ProgressListener.TrackProgress(fn, currentFileSize, currentFileSize+resp.ContentLength, resp.Body)\n\t}\n\tdefer body.Close()\n\n\tn, err := Copy(ctx, f, body)\n\tif err == nil && n < resp.ContentLength {\n\t\terr = io.ErrShortWrite\n\t}\n\treturn err\n}\n\n// getSubdir downloads the source into the destination, but with\n// the proper subdir.\nfunc (g *HttpGetter) getSubdir(ctx context.Context, dst, source, subDir string) error {\n\t// Create a temporary directory to store the full source. This has to be\n\t// a non-existent directory.\n\ttd, tdcloser, err := safetemp.Dir(\"\", \"getter\")\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer tdcloser.Close()\n\n\tvar opts []ClientOption\n\tif g.client != nil {\n\t\topts = g.client.Options\n\t}\n\t// Download that into the given directory\n\tif err := Get(td, source, opts...); err != nil {\n\t\treturn err\n\t}\n\n\t// Process any globbing\n\tsourcePath, err := SubdirGlob(td, subDir)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Make sure the subdir path actually exists\n\tif _, err := os.Stat(sourcePath); err != nil {\n\t\treturn fmt.Errorf(\n\t\t\t\"Error downloading %s: %s\", source, err)\n\t}\n\n\t// Copy the subdirectory into our actual destination.\n\tif err := os.RemoveAll(dst); err != nil {\n\t\treturn err\n\t}\n\n\t// Make the final destination\n\tif err := os.MkdirAll(dst, 0755); err != nil {\n\t\treturn err\n\t}\n\n\treturn copyDir(ctx, dst, sourcePath, false)\n}\n\n// parseMeta looks for the first meta tag in the given reader that\n// will give us the source URL.\nfunc (g *HttpGetter) parseMeta(r io.Reader) (string, error) {\n\td := xml.NewDecoder(r)\n\td.CharsetReader = charsetReader\n\td.Strict = false\n\tvar err error\n\tvar t xml.Token\n\tfor {\n\t\tt, err = d.Token()\n\t\tif err != nil {\n\t\t\tif err == io.EOF {\n\t\t\t\terr = nil\n\t\t\t}\n\t\t\treturn \"\", err\n\t\t}\n\t\tif e, ok := t.(xml.StartElement); ok && strings.EqualFold(e.Name.Local, \"body\") {\n\t\t\treturn \"\", nil\n\t\t}\n\t\tif e, ok := t.(xml.EndElement); ok && strings.EqualFold(e.Name.Local, \"head\") {\n\t\t\treturn \"\", nil\n\t\t}\n\t\te, ok := t.(xml.StartElement)\n\t\tif !ok || !strings.EqualFold(e.Name.Local, \"meta\") {\n\t\t\tcontinue\n\t\t}\n\t\tif attrValue(e.Attr, \"name\") != \"terraform-get\" {\n\t\t\tcontinue\n\t\t}\n\t\tif f := attrValue(e.Attr, \"content\"); f != \"\" {\n\t\t\treturn f, nil\n\t\t}\n\t}\n}\n\n// attrValue returns the attribute value for the case-insensitive key\n// `name', or the empty string if nothing is found.\nfunc attrValue(attrs []xml.Attr, name string) string {\n\tfor _, a := range attrs {\n\t\tif strings.EqualFold(a.Name.Local, name) {\n\t\t\treturn a.Value\n\t\t}\n\t}\n\treturn \"\"\n}\n\n// charsetReader returns a reader for the given charset. Currently\n// it only supports UTF-8 and ASCII. Otherwise, it returns a meaningful\n// error which is printed by go get, so the user can find why the package\n// wasn't downloaded if the encoding is not supported. Note that, in\n// order to reduce potential errors, ASCII is treated as UTF-8 (i.e. characters\n// greater than 0x7f are not rejected).\nfunc charsetReader(charset string, input io.Reader) (io.Reader, error) {\n\tswitch strings.ToLower(charset) {\n\tcase \"ascii\":\n\t\treturn input, nil\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"can't decode XML document using charset %q\", charset)\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-getter/get_mock.go",
    "content": "package getter\n\nimport (\n\t\"net/url\"\n)\n\n// MockGetter is an implementation of Getter that can be used for tests.\ntype MockGetter struct {\n\tgetter\n\n\t// Proxy, if set, will be called after recording the calls below.\n\t// If it isn't set, then the *Err values will be returned.\n\tProxy Getter\n\n\tGetCalled bool\n\tGetDst    string\n\tGetURL    *url.URL\n\tGetErr    error\n\n\tGetFileCalled bool\n\tGetFileDst    string\n\tGetFileURL    *url.URL\n\tGetFileErr    error\n}\n\nfunc (g *MockGetter) Get(dst string, u *url.URL) error {\n\tg.GetCalled = true\n\tg.GetDst = dst\n\tg.GetURL = u\n\n\tif g.Proxy != nil {\n\t\treturn g.Proxy.Get(dst, u)\n\t}\n\n\treturn g.GetErr\n}\n\nfunc (g *MockGetter) GetFile(dst string, u *url.URL) error {\n\tg.GetFileCalled = true\n\tg.GetFileDst = dst\n\tg.GetFileURL = u\n\n\tif g.Proxy != nil {\n\t\treturn g.Proxy.GetFile(dst, u)\n\t}\n\treturn g.GetFileErr\n}\n\nfunc (g *MockGetter) ClientMode(u *url.URL) (ClientMode, error) {\n\tif l := len(u.Path); l > 0 && u.Path[l-1:] == \"/\" {\n\t\treturn ClientModeDir, nil\n\t}\n\treturn ClientModeFile, nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-getter/get_s3.go",
    "content": "package getter\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"net/url\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n\n\t\"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-go/aws/credentials\"\n\t\"github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds\"\n\t\"github.com/aws/aws-sdk-go/aws/ec2metadata\"\n\t\"github.com/aws/aws-sdk-go/aws/session\"\n\t\"github.com/aws/aws-sdk-go/service/s3\"\n)\n\n// S3Getter is a Getter implementation that will download a module from\n// a S3 bucket.\ntype S3Getter struct {\n\tgetter\n}\n\nfunc (g *S3Getter) ClientMode(u *url.URL) (ClientMode, error) {\n\t// Parse URL\n\tregion, bucket, path, _, creds, err := g.parseUrl(u)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\t// Create client config\n\tconfig := g.getAWSConfig(region, u, creds)\n\tsess := session.New(config)\n\tclient := s3.New(sess)\n\n\t// List the object(s) at the given prefix\n\treq := &s3.ListObjectsInput{\n\t\tBucket: aws.String(bucket),\n\t\tPrefix: aws.String(path),\n\t}\n\tresp, err := client.ListObjects(req)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\tfor _, o := range resp.Contents {\n\t\t// Use file mode on exact match.\n\t\tif *o.Key == path {\n\t\t\treturn ClientModeFile, nil\n\t\t}\n\n\t\t// Use dir mode if child keys are found.\n\t\tif strings.HasPrefix(*o.Key, path+\"/\") {\n\t\t\treturn ClientModeDir, nil\n\t\t}\n\t}\n\n\t// There was no match, so just return file mode. The download is going\n\t// to fail but we will let S3 return the proper error later.\n\treturn ClientModeFile, nil\n}\n\nfunc (g *S3Getter) Get(dst string, u *url.URL) error {\n\tctx := g.Context()\n\n\t// Parse URL\n\tregion, bucket, path, _, creds, err := g.parseUrl(u)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Remove destination if it already exists\n\t_, err = os.Stat(dst)\n\tif err != nil && !os.IsNotExist(err) {\n\t\treturn err\n\t}\n\n\tif err == nil {\n\t\t// Remove the destination\n\t\tif err := os.RemoveAll(dst); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// Create all the parent directories\n\tif err := os.MkdirAll(filepath.Dir(dst), 0755); err != nil {\n\t\treturn err\n\t}\n\n\tconfig := g.getAWSConfig(region, u, creds)\n\tsess := session.New(config)\n\tclient := s3.New(sess)\n\n\t// List files in path, keep listing until no more objects are found\n\tlastMarker := \"\"\n\thasMore := true\n\tfor hasMore {\n\t\treq := &s3.ListObjectsInput{\n\t\t\tBucket: aws.String(bucket),\n\t\t\tPrefix: aws.String(path),\n\t\t}\n\t\tif lastMarker != \"\" {\n\t\t\treq.Marker = aws.String(lastMarker)\n\t\t}\n\n\t\tresp, err := client.ListObjects(req)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\thasMore = aws.BoolValue(resp.IsTruncated)\n\n\t\t// Get each object storing each file relative to the destination path\n\t\tfor _, object := range resp.Contents {\n\t\t\tlastMarker = aws.StringValue(object.Key)\n\t\t\tobjPath := aws.StringValue(object.Key)\n\n\t\t\t// If the key ends with a backslash assume it is a directory and ignore\n\t\t\tif strings.HasSuffix(objPath, \"/\") {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// Get the object destination path\n\t\t\tobjDst, err := filepath.Rel(path, objPath)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tobjDst = filepath.Join(dst, objDst)\n\n\t\t\tif err := g.getObject(ctx, client, objDst, bucket, objPath, \"\"); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (g *S3Getter) GetFile(dst string, u *url.URL) error {\n\tctx := g.Context()\n\tregion, bucket, path, version, creds, err := g.parseUrl(u)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tconfig := g.getAWSConfig(region, u, creds)\n\tsess := session.New(config)\n\tclient := s3.New(sess)\n\treturn g.getObject(ctx, client, dst, bucket, path, version)\n}\n\nfunc (g *S3Getter) getObject(ctx context.Context, client *s3.S3, dst, bucket, key, version string) error {\n\treq := &s3.GetObjectInput{\n\t\tBucket: aws.String(bucket),\n\t\tKey:    aws.String(key),\n\t}\n\tif version != \"\" {\n\t\treq.VersionId = aws.String(version)\n\t}\n\n\tresp, err := client.GetObject(req)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Create all the parent directories\n\tif err := os.MkdirAll(filepath.Dir(dst), 0755); err != nil {\n\t\treturn err\n\t}\n\n\tf, err := os.Create(dst)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer f.Close()\n\n\t_, err = Copy(ctx, f, resp.Body)\n\treturn err\n}\n\nfunc (g *S3Getter) getAWSConfig(region string, url *url.URL, creds *credentials.Credentials) *aws.Config {\n\tconf := &aws.Config{}\n\tif creds == nil {\n\t\t// Grab the metadata URL\n\t\tmetadataURL := os.Getenv(\"AWS_METADATA_URL\")\n\t\tif metadataURL == \"\" {\n\t\t\tmetadataURL = \"http://169.254.169.254:80/latest\"\n\t\t}\n\n\t\tcreds = credentials.NewChainCredentials(\n\t\t\t[]credentials.Provider{\n\t\t\t\t&credentials.EnvProvider{},\n\t\t\t\t&credentials.SharedCredentialsProvider{Filename: \"\", Profile: \"\"},\n\t\t\t\t&ec2rolecreds.EC2RoleProvider{\n\t\t\t\t\tClient: ec2metadata.New(session.New(&aws.Config{\n\t\t\t\t\t\tEndpoint: aws.String(metadataURL),\n\t\t\t\t\t})),\n\t\t\t\t},\n\t\t\t})\n\t}\n\n\tif creds != nil {\n\t\tconf.Endpoint = &url.Host\n\t\tconf.S3ForcePathStyle = aws.Bool(true)\n\t\tif url.Scheme == \"http\" {\n\t\t\tconf.DisableSSL = aws.Bool(true)\n\t\t}\n\t}\n\n\tconf.Credentials = creds\n\tif region != \"\" {\n\t\tconf.Region = aws.String(region)\n\t}\n\n\treturn conf\n}\n\nfunc (g *S3Getter) parseUrl(u *url.URL) (region, bucket, path, version string, creds *credentials.Credentials, err error) {\n\t// This just check whether we are dealing with S3 or\n\t// any other S3 compliant service. S3 has a predictable\n\t// url as others do not\n\tif strings.Contains(u.Host, \"amazonaws.com\") {\n\t\t// Expected host style: s3.amazonaws.com. They always have 3 parts,\n\t\t// although the first may differ if we're accessing a specific region.\n\t\thostParts := strings.Split(u.Host, \".\")\n\t\tif len(hostParts) != 3 {\n\t\t\terr = fmt.Errorf(\"URL is not a valid S3 URL\")\n\t\t\treturn\n\t\t}\n\n\t\t// Parse the region out of the first part of the host\n\t\tregion = strings.TrimPrefix(strings.TrimPrefix(hostParts[0], \"s3-\"), \"s3\")\n\t\tif region == \"\" {\n\t\t\tregion = \"us-east-1\"\n\t\t}\n\n\t\tpathParts := strings.SplitN(u.Path, \"/\", 3)\n\t\tif len(pathParts) != 3 {\n\t\t\terr = fmt.Errorf(\"URL is not a valid S3 URL\")\n\t\t\treturn\n\t\t}\n\n\t\tbucket = pathParts[1]\n\t\tpath = pathParts[2]\n\t\tversion = u.Query().Get(\"version\")\n\n\t} else {\n\t\tpathParts := strings.SplitN(u.Path, \"/\", 3)\n\t\tif len(pathParts) != 3 {\n\t\t\terr = fmt.Errorf(\"URL is not a valid S3 complaint URL\")\n\t\t\treturn\n\t\t}\n\t\tbucket = pathParts[1]\n\t\tpath = pathParts[2]\n\t\tversion = u.Query().Get(\"version\")\n\t\tregion = u.Query().Get(\"region\")\n\t\tif region == \"\" {\n\t\t\tregion = \"us-east-1\"\n\t\t}\n\t}\n\n\t_, hasAwsId := u.Query()[\"aws_access_key_id\"]\n\t_, hasAwsSecret := u.Query()[\"aws_access_key_secret\"]\n\t_, hasAwsToken := u.Query()[\"aws_access_token\"]\n\tif hasAwsId || hasAwsSecret || hasAwsToken {\n\t\tcreds = credentials.NewStaticCredentials(\n\t\t\tu.Query().Get(\"aws_access_key_id\"),\n\t\t\tu.Query().Get(\"aws_access_key_secret\"),\n\t\t\tu.Query().Get(\"aws_access_token\"),\n\t\t)\n\t}\n\n\treturn\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-getter/helper/url/url.go",
    "content": "package url\n\nimport (\n\t\"net/url\"\n)\n\n// Parse parses rawURL into a URL structure.\n// The rawURL may be relative or absolute.\n//\n// Parse is a wrapper for the Go stdlib net/url Parse function, but returns\n// Windows \"safe\" URLs on Windows platforms.\nfunc Parse(rawURL string) (*url.URL, error) {\n\treturn parse(rawURL)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-getter/helper/url/url_unix.go",
    "content": "// +build !windows\n\npackage url\n\nimport (\n\t\"net/url\"\n)\n\nfunc parse(rawURL string) (*url.URL, error) {\n\treturn url.Parse(rawURL)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-getter/helper/url/url_windows.go",
    "content": "package url\n\nimport (\n\t\"fmt\"\n\t\"net/url\"\n\t\"path/filepath\"\n\t\"strings\"\n)\n\nfunc parse(rawURL string) (*url.URL, error) {\n\t// Make sure we're using \"/\" since URLs are \"/\"-based.\n\trawURL = filepath.ToSlash(rawURL)\n\n\tif len(rawURL) > 1 && rawURL[1] == ':' {\n\t\t// Assume we're dealing with a drive letter. In which case we\n\t\t// force the 'file' scheme to avoid \"net/url\" URL.String() prepending\n\t\t// our url with \"./\".\n\t\trawURL = \"file://\" + rawURL\n\t}\n\n\tu, err := url.Parse(rawURL)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif len(u.Host) > 1 && u.Host[1] == ':' && strings.HasPrefix(rawURL, \"file://\") {\n\t\t// Assume we're dealing with a drive letter file path where the drive\n\t\t// letter has been parsed into the URL Host.\n\t\tu.Path = fmt.Sprintf(\"%s%s\", u.Host, u.Path)\n\t\tu.Host = \"\"\n\t}\n\n\t// Remove leading slash for absolute file paths.\n\tif len(u.Path) > 2 && u.Path[0] == '/' && u.Path[2] == ':' {\n\t\tu.Path = u.Path[1:]\n\t}\n\n\treturn u, err\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-getter/netrc.go",
    "content": "package getter\n\nimport (\n\t\"fmt\"\n\t\"net/url\"\n\t\"os\"\n\t\"runtime\"\n\n\t\"github.com/bgentry/go-netrc/netrc\"\n\t\"github.com/mitchellh/go-homedir\"\n)\n\n// addAuthFromNetrc adds auth information to the URL from the user's\n// netrc file if it can be found. This will only add the auth info\n// if the URL doesn't already have auth info specified and the\n// the username is blank.\nfunc addAuthFromNetrc(u *url.URL) error {\n\t// If the URL already has auth information, do nothing\n\tif u.User != nil && u.User.Username() != \"\" {\n\t\treturn nil\n\t}\n\n\t// Get the netrc file path\n\tpath := os.Getenv(\"NETRC\")\n\tif path == \"\" {\n\t\tfilename := \".netrc\"\n\t\tif runtime.GOOS == \"windows\" {\n\t\t\tfilename = \"_netrc\"\n\t\t}\n\n\t\tvar err error\n\t\tpath, err = homedir.Expand(\"~/\" + filename)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// If the file is not a file, then do nothing\n\tif fi, err := os.Stat(path); err != nil {\n\t\t// File doesn't exist, do nothing\n\t\tif os.IsNotExist(err) {\n\t\t\treturn nil\n\t\t}\n\n\t\t// Some other error!\n\t\treturn err\n\t} else if fi.IsDir() {\n\t\t// File is directory, ignore\n\t\treturn nil\n\t}\n\n\t// Load up the netrc file\n\tnet, err := netrc.ParseFile(path)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"Error parsing netrc file at %q: %s\", path, err)\n\t}\n\n\tmachine := net.FindMachine(u.Host)\n\tif machine == nil {\n\t\t// Machine not found, no problem\n\t\treturn nil\n\t}\n\n\t// Set the user info\n\tu.User = url.UserPassword(machine.Login, machine.Password)\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-getter/source.go",
    "content": "package getter\n\nimport (\n\t\"fmt\"\n\t\"path/filepath\"\n\t\"strings\"\n)\n\n// SourceDirSubdir takes a source URL and returns a tuple of the URL without\n// the subdir and the subdir.\n//\n// ex:\n//   dom.com/path/?q=p               => dom.com/path/?q=p, \"\"\n//   proto://dom.com/path//*?q=p     => proto://dom.com/path?q=p, \"*\"\n//   proto://dom.com/path//path2?q=p => proto://dom.com/path?q=p, \"path2\"\n//\nfunc SourceDirSubdir(src string) (string, string) {\n\n\t// URL might contains another url in query parameters\n\tstop := len(src)\n\tif idx := strings.Index(src, \"?\"); idx > -1 {\n\t\tstop = idx\n\t}\n\n\t// Calculate an offset to avoid accidentally marking the scheme\n\t// as the dir.\n\tvar offset int\n\tif idx := strings.Index(src[:stop], \"://\"); idx > -1 {\n\t\toffset = idx + 3\n\t}\n\n\t// First see if we even have an explicit subdir\n\tidx := strings.Index(src[offset:stop], \"//\")\n\tif idx == -1 {\n\t\treturn src, \"\"\n\t}\n\n\tidx += offset\n\tsubdir := src[idx+2:]\n\tsrc = src[:idx]\n\n\t// Next, check if we have query parameters and push them onto the\n\t// URL.\n\tif idx = strings.Index(subdir, \"?\"); idx > -1 {\n\t\tquery := subdir[idx:]\n\t\tsubdir = subdir[:idx]\n\t\tsrc += query\n\t}\n\n\treturn src, subdir\n}\n\n// SubdirGlob returns the actual subdir with globbing processed.\n//\n// dst should be a destination directory that is already populated (the\n// download is complete) and subDir should be the set subDir. If subDir\n// is an empty string, this returns an empty string.\n//\n// The returned path is the full absolute path.\nfunc SubdirGlob(dst, subDir string) (string, error) {\n\tmatches, err := filepath.Glob(filepath.Join(dst, subDir))\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\tif len(matches) == 0 {\n\t\treturn \"\", fmt.Errorf(\"subdir %q not found\", subDir)\n\t}\n\n\tif len(matches) > 1 {\n\t\treturn \"\", fmt.Errorf(\"subdir %q matches multiple paths\", subDir)\n\t}\n\n\treturn matches[0], nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-getter/storage.go",
    "content": "package getter\n\n// Storage is an interface that knows how to lookup downloaded directories\n// as well as download and update directories from their sources into the\n// proper location.\ntype Storage interface {\n\t// Dir returns the directory on local disk where the directory source\n\t// can be loaded from.\n\tDir(string) (string, bool, error)\n\n\t// Get will download and optionally update the given directory.\n\tGet(string, string, bool) error\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-hclog/LICENSE",
    "content": "MIT License\n\nCopyright (c) 2017 HashiCorp\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-hclog/context.go",
    "content": "package hclog\n\nimport (\n\t\"context\"\n)\n\n// WithContext inserts a logger into the context and is retrievable\n// with FromContext. The optional args can be set with the same syntax as\n// Logger.With to set fields on the inserted logger. This will not modify\n// the logger argument in-place.\nfunc WithContext(ctx context.Context, logger Logger, args ...interface{}) context.Context {\n\t// While we could call logger.With even with zero args, we have this\n\t// check to avoid unnecessary allocations around creating a copy of a\n\t// logger.\n\tif len(args) > 0 {\n\t\tlogger = logger.With(args...)\n\t}\n\n\treturn context.WithValue(ctx, contextKey, logger)\n}\n\n// FromContext returns a logger from the context. This will return L()\n// (the default logger) if no logger is found in the context. Therefore,\n// this will never return a nil value.\nfunc FromContext(ctx context.Context) Logger {\n\tlogger, _ := ctx.Value(contextKey).(Logger)\n\tif logger == nil {\n\t\treturn L()\n\t}\n\n\treturn logger\n}\n\n// Unexported new type so that our context key never collides with another.\ntype contextKeyType struct{}\n\n// contextKey is the key used for the context to store the logger.\nvar contextKey = contextKeyType{}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-hclog/global.go",
    "content": "package hclog\n\nimport (\n\t\"sync\"\n)\n\nvar (\n\tprotect sync.Once\n\tdef     Logger\n\n\t// DefaultOptions is used to create the Default logger. These are read\n\t// only when the Default logger is created, so set them as soon as the\n\t// process starts.\n\tDefaultOptions = &LoggerOptions{\n\t\tLevel:  DefaultLevel,\n\t\tOutput: DefaultOutput,\n\t}\n)\n\n// Default returns a globally held logger. This can be a good starting\n// place, and then you can use .With() and .Name() to create sub-loggers\n// to be used in more specific contexts.\n// The value of the Default logger can be set via SetDefault() or by\n// changing the options in DefaultOptions.\n//\n// This method is goroutine safe, returning a global from memory, but\n// cause should be used if SetDefault() is called it random times\n// in the program as that may result in race conditions and an unexpected\n// Logger being returned.\nfunc Default() Logger {\n\tprotect.Do(func() {\n\t\t// If SetDefault was used before Default() was called, we need to\n\t\t// detect that here.\n\t\tif def == nil {\n\t\t\tdef = New(DefaultOptions)\n\t\t}\n\t})\n\n\treturn def\n}\n\n// L is a short alias for Default().\nfunc L() Logger {\n\treturn Default()\n}\n\n// SetDefault changes the logger to be returned by Default()and L()\n// to the one given. This allows packages to use the default logger\n// and have higher level packages change it to match the execution\n// environment. It returns any old default if there is one.\n//\n// NOTE: This is expected to be called early in the program to setup\n// a default logger. As such, it does not attempt to make itself\n// not racy with regard to the value of the default logger. Ergo\n// if it is called in goroutines, you may experience race conditions\n// with other goroutines retrieving the default logger. Basically,\n// don't do that.\nfunc SetDefault(log Logger) Logger {\n\told := def\n\tdef = log\n\treturn old\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-hclog/intlogger.go",
    "content": "package hclog\n\nimport (\n\t\"bytes\"\n\t\"encoding\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"log\"\n\t\"reflect\"\n\t\"runtime\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\t\"sync/atomic\"\n\t\"time\"\n)\n\n// TimeFormat to use for logging. This is a version of RFC3339 that contains\n// contains millisecond precision\nconst TimeFormat = \"2006-01-02T15:04:05.000Z0700\"\n\n// errJsonUnsupportedTypeMsg is included in log json entries, if an arg cannot be serialized to json\nconst errJsonUnsupportedTypeMsg = \"logging contained values that don't serialize to json\"\n\nvar (\n\t_levelToBracket = map[Level]string{\n\t\tDebug: \"[DEBUG]\",\n\t\tTrace: \"[TRACE]\",\n\t\tInfo:  \"[INFO] \",\n\t\tWarn:  \"[WARN] \",\n\t\tError: \"[ERROR]\",\n\t}\n)\n\n// Make sure that intLogger is a Logger\nvar _ Logger = &intLogger{}\n\n// intLogger is an internal logger implementation. Internal in that it is\n// defined entirely by this package.\ntype intLogger struct {\n\tjson       bool\n\tcaller     bool\n\tname       string\n\ttimeFormat string\n\n\t// This is a pointer so that it's shared by any derived loggers, since\n\t// those derived loggers share the bufio.Writer as well.\n\tmutex  *sync.Mutex\n\twriter *writer\n\tlevel  *int32\n\n\timplied []interface{}\n}\n\n// New returns a configured logger.\nfunc New(opts *LoggerOptions) Logger {\n\tif opts == nil {\n\t\topts = &LoggerOptions{}\n\t}\n\n\toutput := opts.Output\n\tif output == nil {\n\t\toutput = DefaultOutput\n\t}\n\n\tlevel := opts.Level\n\tif level == NoLevel {\n\t\tlevel = DefaultLevel\n\t}\n\n\tmutex := opts.Mutex\n\tif mutex == nil {\n\t\tmutex = new(sync.Mutex)\n\t}\n\n\tl := &intLogger{\n\t\tjson:       opts.JSONFormat,\n\t\tcaller:     opts.IncludeLocation,\n\t\tname:       opts.Name,\n\t\ttimeFormat: TimeFormat,\n\t\tmutex:      mutex,\n\t\twriter:     newWriter(output),\n\t\tlevel:      new(int32),\n\t}\n\n\tif opts.TimeFormat != \"\" {\n\t\tl.timeFormat = opts.TimeFormat\n\t}\n\n\tatomic.StoreInt32(l.level, int32(level))\n\n\treturn l\n}\n\n// Log a message and a set of key/value pairs if the given level is at\n// or more severe that the threshold configured in the Logger.\nfunc (l *intLogger) Log(level Level, msg string, args ...interface{}) {\n\tif level < Level(atomic.LoadInt32(l.level)) {\n\t\treturn\n\t}\n\n\tt := time.Now()\n\n\tl.mutex.Lock()\n\tdefer l.mutex.Unlock()\n\n\tif l.json {\n\t\tl.logJSON(t, level, msg, args...)\n\t} else {\n\t\tl.log(t, level, msg, args...)\n\t}\n\n\tl.writer.Flush(level)\n}\n\n// Cleanup a path by returning the last 2 segments of the path only.\nfunc trimCallerPath(path string) string {\n\t// lovely borrowed from zap\n\t// nb. To make sure we trim the path correctly on Windows too, we\n\t// counter-intuitively need to use '/' and *not* os.PathSeparator here,\n\t// because the path given originates from Go stdlib, specifically\n\t// runtime.Caller() which (as of Mar/17) returns forward slashes even on\n\t// Windows.\n\t//\n\t// See https://github.com/golang/go/issues/3335\n\t// and https://github.com/golang/go/issues/18151\n\t//\n\t// for discussion on the issue on Go side.\n\n\t// Find the last separator.\n\tidx := strings.LastIndexByte(path, '/')\n\tif idx == -1 {\n\t\treturn path\n\t}\n\n\t// Find the penultimate separator.\n\tidx = strings.LastIndexByte(path[:idx], '/')\n\tif idx == -1 {\n\t\treturn path\n\t}\n\n\treturn path[idx+1:]\n}\n\n// Non-JSON logging format function\nfunc (l *intLogger) log(t time.Time, level Level, msg string, args ...interface{}) {\n\tl.writer.WriteString(t.Format(l.timeFormat))\n\tl.writer.WriteByte(' ')\n\n\ts, ok := _levelToBracket[level]\n\tif ok {\n\t\tl.writer.WriteString(s)\n\t} else {\n\t\tl.writer.WriteString(\"[?????]\")\n\t}\n\n\tif l.caller {\n\t\tif _, file, line, ok := runtime.Caller(3); ok {\n\t\t\tl.writer.WriteByte(' ')\n\t\t\tl.writer.WriteString(trimCallerPath(file))\n\t\t\tl.writer.WriteByte(':')\n\t\t\tl.writer.WriteString(strconv.Itoa(line))\n\t\t\tl.writer.WriteByte(':')\n\t\t}\n\t}\n\n\tl.writer.WriteByte(' ')\n\n\tif l.name != \"\" {\n\t\tl.writer.WriteString(l.name)\n\t\tl.writer.WriteString(\": \")\n\t}\n\n\tl.writer.WriteString(msg)\n\n\targs = append(l.implied, args...)\n\n\tvar stacktrace CapturedStacktrace\n\n\tif args != nil && len(args) > 0 {\n\t\tif len(args)%2 != 0 {\n\t\t\tcs, ok := args[len(args)-1].(CapturedStacktrace)\n\t\t\tif ok {\n\t\t\t\targs = args[:len(args)-1]\n\t\t\t\tstacktrace = cs\n\t\t\t} else {\n\t\t\t\targs = append(args, \"<unknown>\")\n\t\t\t}\n\t\t}\n\n\t\tl.writer.WriteByte(':')\n\n\tFOR:\n\t\tfor i := 0; i < len(args); i = i + 2 {\n\t\t\tvar (\n\t\t\t\tval string\n\t\t\t\traw bool\n\t\t\t)\n\n\t\t\tswitch st := args[i+1].(type) {\n\t\t\tcase string:\n\t\t\t\tval = st\n\t\t\tcase int:\n\t\t\t\tval = strconv.FormatInt(int64(st), 10)\n\t\t\tcase int64:\n\t\t\t\tval = strconv.FormatInt(int64(st), 10)\n\t\t\tcase int32:\n\t\t\t\tval = strconv.FormatInt(int64(st), 10)\n\t\t\tcase int16:\n\t\t\t\tval = strconv.FormatInt(int64(st), 10)\n\t\t\tcase int8:\n\t\t\t\tval = strconv.FormatInt(int64(st), 10)\n\t\t\tcase uint:\n\t\t\t\tval = strconv.FormatUint(uint64(st), 10)\n\t\t\tcase uint64:\n\t\t\t\tval = strconv.FormatUint(uint64(st), 10)\n\t\t\tcase uint32:\n\t\t\t\tval = strconv.FormatUint(uint64(st), 10)\n\t\t\tcase uint16:\n\t\t\t\tval = strconv.FormatUint(uint64(st), 10)\n\t\t\tcase uint8:\n\t\t\t\tval = strconv.FormatUint(uint64(st), 10)\n\t\t\tcase CapturedStacktrace:\n\t\t\t\tstacktrace = st\n\t\t\t\tcontinue FOR\n\t\t\tcase Format:\n\t\t\t\tval = fmt.Sprintf(st[0].(string), st[1:]...)\n\t\t\tdefault:\n\t\t\t\tv := reflect.ValueOf(st)\n\t\t\t\tif v.Kind() == reflect.Slice {\n\t\t\t\t\tval = l.renderSlice(v)\n\t\t\t\t\traw = true\n\t\t\t\t} else {\n\t\t\t\t\tval = fmt.Sprintf(\"%v\", st)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tl.writer.WriteByte(' ')\n\t\t\tl.writer.WriteString(args[i].(string))\n\t\t\tl.writer.WriteByte('=')\n\n\t\t\tif !raw && strings.ContainsAny(val, \" \\t\\n\\r\") {\n\t\t\t\tl.writer.WriteByte('\"')\n\t\t\t\tl.writer.WriteString(val)\n\t\t\t\tl.writer.WriteByte('\"')\n\t\t\t} else {\n\t\t\t\tl.writer.WriteString(val)\n\t\t\t}\n\t\t}\n\t}\n\n\tl.writer.WriteString(\"\\n\")\n\n\tif stacktrace != \"\" {\n\t\tl.writer.WriteString(string(stacktrace))\n\t}\n}\n\nfunc (l *intLogger) renderSlice(v reflect.Value) string {\n\tvar buf bytes.Buffer\n\n\tbuf.WriteRune('[')\n\n\tfor i := 0; i < v.Len(); i++ {\n\t\tif i > 0 {\n\t\t\tbuf.WriteString(\", \")\n\t\t}\n\n\t\tsv := v.Index(i)\n\n\t\tvar val string\n\n\t\tswitch sv.Kind() {\n\t\tcase reflect.String:\n\t\t\tval = sv.String()\n\t\tcase reflect.Int, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\t\tval = strconv.FormatInt(sv.Int(), 10)\n\t\tcase reflect.Uint, reflect.Uint16, reflect.Uint32, reflect.Uint64:\n\t\t\tval = strconv.FormatUint(sv.Uint(), 10)\n\t\tdefault:\n\t\t\tval = fmt.Sprintf(\"%v\", sv.Interface())\n\t\t}\n\n\t\tif strings.ContainsAny(val, \" \\t\\n\\r\") {\n\t\t\tbuf.WriteByte('\"')\n\t\t\tbuf.WriteString(val)\n\t\t\tbuf.WriteByte('\"')\n\t\t} else {\n\t\t\tbuf.WriteString(val)\n\t\t}\n\t}\n\n\tbuf.WriteRune(']')\n\n\treturn buf.String()\n}\n\n// JSON logging function\nfunc (l *intLogger) logJSON(t time.Time, level Level, msg string, args ...interface{}) {\n\tvals := l.jsonMapEntry(t, level, msg)\n\targs = append(l.implied, args...)\n\n\tif args != nil && len(args) > 0 {\n\t\tif len(args)%2 != 0 {\n\t\t\tcs, ok := args[len(args)-1].(CapturedStacktrace)\n\t\t\tif ok {\n\t\t\t\targs = args[:len(args)-1]\n\t\t\t\tvals[\"stacktrace\"] = cs\n\t\t\t} else {\n\t\t\t\targs = append(args, \"<unknown>\")\n\t\t\t}\n\t\t}\n\n\t\tfor i := 0; i < len(args); i = i + 2 {\n\t\t\tif _, ok := args[i].(string); !ok {\n\t\t\t\t// As this is the logging function not much we can do here\n\t\t\t\t// without injecting into logs...\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tval := args[i+1]\n\t\t\tswitch sv := val.(type) {\n\t\t\tcase error:\n\t\t\t\t// Check if val is of type error. If error type doesn't\n\t\t\t\t// implement json.Marshaler or encoding.TextMarshaler\n\t\t\t\t// then set val to err.Error() so that it gets marshaled\n\t\t\t\tswitch sv.(type) {\n\t\t\t\tcase json.Marshaler, encoding.TextMarshaler:\n\t\t\t\tdefault:\n\t\t\t\t\tval = sv.Error()\n\t\t\t\t}\n\t\t\tcase Format:\n\t\t\t\tval = fmt.Sprintf(sv[0].(string), sv[1:]...)\n\t\t\t}\n\n\t\t\tvals[args[i].(string)] = val\n\t\t}\n\t}\n\n\terr := json.NewEncoder(l.writer).Encode(vals)\n\tif err != nil {\n\t\tif _, ok := err.(*json.UnsupportedTypeError); ok {\n\t\t\tplainVal := l.jsonMapEntry(t, level, msg)\n\t\t\tplainVal[\"@warn\"] = errJsonUnsupportedTypeMsg\n\n\t\t\tjson.NewEncoder(l.writer).Encode(plainVal)\n\t\t}\n\t}\n}\n\nfunc (l intLogger) jsonMapEntry(t time.Time, level Level, msg string) map[string]interface{} {\n\tvals := map[string]interface{}{\n\t\t\"@message\":   msg,\n\t\t\"@timestamp\": t.Format(\"2006-01-02T15:04:05.000000Z07:00\"),\n\t}\n\n\tvar levelStr string\n\tswitch level {\n\tcase Error:\n\t\tlevelStr = \"error\"\n\tcase Warn:\n\t\tlevelStr = \"warn\"\n\tcase Info:\n\t\tlevelStr = \"info\"\n\tcase Debug:\n\t\tlevelStr = \"debug\"\n\tcase Trace:\n\t\tlevelStr = \"trace\"\n\tdefault:\n\t\tlevelStr = \"all\"\n\t}\n\n\tvals[\"@level\"] = levelStr\n\n\tif l.name != \"\" {\n\t\tvals[\"@module\"] = l.name\n\t}\n\n\tif l.caller {\n\t\tif _, file, line, ok := runtime.Caller(4); ok {\n\t\t\tvals[\"@caller\"] = fmt.Sprintf(\"%s:%d\", file, line)\n\t\t}\n\t}\n\treturn vals\n}\n\n// Emit the message and args at DEBUG level\nfunc (l *intLogger) Debug(msg string, args ...interface{}) {\n\tl.Log(Debug, msg, args...)\n}\n\n// Emit the message and args at TRACE level\nfunc (l *intLogger) Trace(msg string, args ...interface{}) {\n\tl.Log(Trace, msg, args...)\n}\n\n// Emit the message and args at INFO level\nfunc (l *intLogger) Info(msg string, args ...interface{}) {\n\tl.Log(Info, msg, args...)\n}\n\n// Emit the message and args at WARN level\nfunc (l *intLogger) Warn(msg string, args ...interface{}) {\n\tl.Log(Warn, msg, args...)\n}\n\n// Emit the message and args at ERROR level\nfunc (l *intLogger) Error(msg string, args ...interface{}) {\n\tl.Log(Error, msg, args...)\n}\n\n// Indicate that the logger would emit TRACE level logs\nfunc (l *intLogger) IsTrace() bool {\n\treturn Level(atomic.LoadInt32(l.level)) == Trace\n}\n\n// Indicate that the logger would emit DEBUG level logs\nfunc (l *intLogger) IsDebug() bool {\n\treturn Level(atomic.LoadInt32(l.level)) <= Debug\n}\n\n// Indicate that the logger would emit INFO level logs\nfunc (l *intLogger) IsInfo() bool {\n\treturn Level(atomic.LoadInt32(l.level)) <= Info\n}\n\n// Indicate that the logger would emit WARN level logs\nfunc (l *intLogger) IsWarn() bool {\n\treturn Level(atomic.LoadInt32(l.level)) <= Warn\n}\n\n// Indicate that the logger would emit ERROR level logs\nfunc (l *intLogger) IsError() bool {\n\treturn Level(atomic.LoadInt32(l.level)) <= Error\n}\n\n// Return a sub-Logger for which every emitted log message will contain\n// the given key/value pairs. This is used to create a context specific\n// Logger.\nfunc (l *intLogger) With(args ...interface{}) Logger {\n\tif len(args)%2 != 0 {\n\t\tpanic(\"With() call requires paired arguments\")\n\t}\n\n\tsl := *l\n\n\tresult := make(map[string]interface{}, len(l.implied)+len(args))\n\tkeys := make([]string, 0, len(l.implied)+len(args))\n\n\t// Read existing args, store map and key for consistent sorting\n\tfor i := 0; i < len(l.implied); i += 2 {\n\t\tkey := l.implied[i].(string)\n\t\tkeys = append(keys, key)\n\t\tresult[key] = l.implied[i+1]\n\t}\n\t// Read new args, store map and key for consistent sorting\n\tfor i := 0; i < len(args); i += 2 {\n\t\tkey := args[i].(string)\n\t\t_, exists := result[key]\n\t\tif !exists {\n\t\t\tkeys = append(keys, key)\n\t\t}\n\t\tresult[key] = args[i+1]\n\t}\n\n\t// Sort keys to be consistent\n\tsort.Strings(keys)\n\n\tsl.implied = make([]interface{}, 0, len(l.implied)+len(args))\n\tfor _, k := range keys {\n\t\tsl.implied = append(sl.implied, k)\n\t\tsl.implied = append(sl.implied, result[k])\n\t}\n\n\treturn &sl\n}\n\n// Create a new sub-Logger that a name decending from the current name.\n// This is used to create a subsystem specific Logger.\nfunc (l *intLogger) Named(name string) Logger {\n\tsl := *l\n\n\tif sl.name != \"\" {\n\t\tsl.name = sl.name + \".\" + name\n\t} else {\n\t\tsl.name = name\n\t}\n\n\treturn &sl\n}\n\n// Create a new sub-Logger with an explicit name. This ignores the current\n// name. This is used to create a standalone logger that doesn't fall\n// within the normal hierarchy.\nfunc (l *intLogger) ResetNamed(name string) Logger {\n\tsl := *l\n\n\tsl.name = name\n\n\treturn &sl\n}\n\n// Update the logging level on-the-fly. This will affect all subloggers as\n// well.\nfunc (l *intLogger) SetLevel(level Level) {\n\tatomic.StoreInt32(l.level, int32(level))\n}\n\n// Create a *log.Logger that will send it's data through this Logger. This\n// allows packages that expect to be using the standard library log to actually\n// use this logger.\nfunc (l *intLogger) StandardLogger(opts *StandardLoggerOptions) *log.Logger {\n\tif opts == nil {\n\t\topts = &StandardLoggerOptions{}\n\t}\n\n\treturn log.New(l.StandardWriter(opts), \"\", 0)\n}\n\nfunc (l *intLogger) StandardWriter(opts *StandardLoggerOptions) io.Writer {\n\treturn &stdlogAdapter{\n\t\tlog:         l,\n\t\tinferLevels: opts.InferLevels,\n\t\tforceLevel:  opts.ForceLevel,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-hclog/logger.go",
    "content": "package hclog\n\nimport (\n\t\"io\"\n\t\"log\"\n\t\"os\"\n\t\"strings\"\n\t\"sync\"\n)\n\nvar (\n\t//DefaultOutput is used as the default log output.\n\tDefaultOutput io.Writer = os.Stderr\n\n\t// DefaultLevel is used as the default log level.\n\tDefaultLevel = Info\n)\n\n// Level represents a log level.\ntype Level int32\n\nconst (\n\t// NoLevel is a special level used to indicate that no level has been\n\t// set and allow for a default to be used.\n\tNoLevel Level = 0\n\n\t// Trace is the most verbose level. Intended to be used for the tracing\n\t// of actions in code, such as function enters/exits, etc.\n\tTrace Level = 1\n\n\t// Debug information for programmer lowlevel analysis.\n\tDebug Level = 2\n\n\t// Info information about steady state operations.\n\tInfo Level = 3\n\n\t// Warn information about rare but handled events.\n\tWarn Level = 4\n\n\t// Error information about unrecoverable events.\n\tError Level = 5\n)\n\n// Format is a simple convience type for when formatting is required. When\n// processing a value of this type, the logger automatically treats the first\n// argument as a Printf formatting string and passes the rest as the values\n// to be formatted. For example: L.Info(Fmt{\"%d beans/day\", beans}).\ntype Format []interface{}\n\n// Fmt returns a Format type. This is a convience function for creating a Format\n// type.\nfunc Fmt(str string, args ...interface{}) Format {\n\treturn append(Format{str}, args...)\n}\n\n// LevelFromString returns a Level type for the named log level, or \"NoLevel\" if\n// the level string is invalid. This facilitates setting the log level via\n// config or environment variable by name in a predictable way.\nfunc LevelFromString(levelStr string) Level {\n\t// We don't care about case. Accept both \"INFO\" and \"info\".\n\tlevelStr = strings.ToLower(strings.TrimSpace(levelStr))\n\tswitch levelStr {\n\tcase \"trace\":\n\t\treturn Trace\n\tcase \"debug\":\n\t\treturn Debug\n\tcase \"info\":\n\t\treturn Info\n\tcase \"warn\":\n\t\treturn Warn\n\tcase \"error\":\n\t\treturn Error\n\tdefault:\n\t\treturn NoLevel\n\t}\n}\n\n// Logger describes the interface that must be implemeted by all loggers.\ntype Logger interface {\n\t// Args are alternating key, val pairs\n\t// keys must be strings\n\t// vals can be any type, but display is implementation specific\n\t// Emit a message and key/value pairs at the TRACE level\n\tTrace(msg string, args ...interface{})\n\n\t// Emit a message and key/value pairs at the DEBUG level\n\tDebug(msg string, args ...interface{})\n\n\t// Emit a message and key/value pairs at the INFO level\n\tInfo(msg string, args ...interface{})\n\n\t// Emit a message and key/value pairs at the WARN level\n\tWarn(msg string, args ...interface{})\n\n\t// Emit a message and key/value pairs at the ERROR level\n\tError(msg string, args ...interface{})\n\n\t// Indicate if TRACE logs would be emitted. This and the other Is* guards\n\t// are used to elide expensive logging code based on the current level.\n\tIsTrace() bool\n\n\t// Indicate if DEBUG logs would be emitted. This and the other Is* guards\n\tIsDebug() bool\n\n\t// Indicate if INFO logs would be emitted. This and the other Is* guards\n\tIsInfo() bool\n\n\t// Indicate if WARN logs would be emitted. This and the other Is* guards\n\tIsWarn() bool\n\n\t// Indicate if ERROR logs would be emitted. This and the other Is* guards\n\tIsError() bool\n\n\t// Creates a sublogger that will always have the given key/value pairs\n\tWith(args ...interface{}) Logger\n\n\t// Create a logger that will prepend the name string on the front of all messages.\n\t// If the logger already has a name, the new value will be appended to the current\n\t// name. That way, a major subsystem can use this to decorate all it's own logs\n\t// without losing context.\n\tNamed(name string) Logger\n\n\t// Create a logger that will prepend the name string on the front of all messages.\n\t// This sets the name of the logger to the value directly, unlike Named which honor\n\t// the current name as well.\n\tResetNamed(name string) Logger\n\n\t// Updates the level. This should affect all sub-loggers as well. If an\n\t// implementation cannot update the level on the fly, it should no-op.\n\tSetLevel(level Level)\n\n\t// Return a value that conforms to the stdlib log.Logger interface\n\tStandardLogger(opts *StandardLoggerOptions) *log.Logger\n\n\t// Return a value that conforms to io.Writer, which can be passed into log.SetOutput()\n\tStandardWriter(opts *StandardLoggerOptions) io.Writer\n}\n\n// StandardLoggerOptions can be used to configure a new standard logger.\ntype StandardLoggerOptions struct {\n\t// Indicate that some minimal parsing should be done on strings to try\n\t// and detect their level and re-emit them.\n\t// This supports the strings like [ERROR], [ERR] [TRACE], [WARN], [INFO],\n\t// [DEBUG] and strip it off before reapplying it.\n\tInferLevels bool\n\n\t// ForceLevel is used to force all output from the standard logger to be at\n\t// the specified level. Similar to InferLevels, this will strip any level\n\t// prefix contained in the logged string before applying the forced level.\n\t// If set, this override InferLevels.\n\tForceLevel Level\n}\n\n// LoggerOptions can be used to configure a new logger.\ntype LoggerOptions struct {\n\t// Name of the subsystem to prefix logs with\n\tName string\n\n\t// The threshold for the logger. Anything less severe is supressed\n\tLevel Level\n\n\t// Where to write the logs to. Defaults to os.Stderr if nil\n\tOutput io.Writer\n\n\t// An optional mutex pointer in case Output is shared\n\tMutex *sync.Mutex\n\n\t// Control if the output should be in JSON.\n\tJSONFormat bool\n\n\t// Include file and line information in each log line\n\tIncludeLocation bool\n\n\t// The time format to use instead of the default\n\tTimeFormat string\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-hclog/nulllogger.go",
    "content": "package hclog\n\nimport (\n\t\"io\"\n\t\"io/ioutil\"\n\t\"log\"\n)\n\n// NewNullLogger instantiates a Logger for which all calls\n// will succeed without doing anything.\n// Useful for testing purposes.\nfunc NewNullLogger() Logger {\n\treturn &nullLogger{}\n}\n\ntype nullLogger struct{}\n\nfunc (l *nullLogger) Trace(msg string, args ...interface{}) {}\n\nfunc (l *nullLogger) Debug(msg string, args ...interface{}) {}\n\nfunc (l *nullLogger) Info(msg string, args ...interface{}) {}\n\nfunc (l *nullLogger) Warn(msg string, args ...interface{}) {}\n\nfunc (l *nullLogger) Error(msg string, args ...interface{}) {}\n\nfunc (l *nullLogger) IsTrace() bool { return false }\n\nfunc (l *nullLogger) IsDebug() bool { return false }\n\nfunc (l *nullLogger) IsInfo() bool { return false }\n\nfunc (l *nullLogger) IsWarn() bool { return false }\n\nfunc (l *nullLogger) IsError() bool { return false }\n\nfunc (l *nullLogger) With(args ...interface{}) Logger { return l }\n\nfunc (l *nullLogger) Named(name string) Logger { return l }\n\nfunc (l *nullLogger) ResetNamed(name string) Logger { return l }\n\nfunc (l *nullLogger) SetLevel(level Level) {}\n\nfunc (l *nullLogger) StandardLogger(opts *StandardLoggerOptions) *log.Logger {\n\treturn log.New(l.StandardWriter(opts), \"\", log.LstdFlags)\n}\n\nfunc (l *nullLogger) StandardWriter(opts *StandardLoggerOptions) io.Writer {\n\treturn ioutil.Discard\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-hclog/stacktrace.go",
    "content": "// Copyright (c) 2016 Uber Technologies, Inc.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\npackage hclog\n\nimport (\n\t\"bytes\"\n\t\"runtime\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n)\n\nvar (\n\t_stacktraceIgnorePrefixes = []string{\n\t\t\"runtime.goexit\",\n\t\t\"runtime.main\",\n\t}\n\t_stacktracePool = sync.Pool{\n\t\tNew: func() interface{} {\n\t\t\treturn newProgramCounters(64)\n\t\t},\n\t}\n)\n\n// CapturedStacktrace represents a stacktrace captured by a previous call\n// to log.Stacktrace. If passed to a logging function, the stacktrace\n// will be appended.\ntype CapturedStacktrace string\n\n// Stacktrace captures a stacktrace of the current goroutine and returns\n// it to be passed to a logging function.\nfunc Stacktrace() CapturedStacktrace {\n\treturn CapturedStacktrace(takeStacktrace())\n}\n\nfunc takeStacktrace() string {\n\tprogramCounters := _stacktracePool.Get().(*programCounters)\n\tdefer _stacktracePool.Put(programCounters)\n\n\tvar buffer bytes.Buffer\n\n\tfor {\n\t\t// Skip the call to runtime.Counters and takeStacktrace so that the\n\t\t// program counters start at the caller of takeStacktrace.\n\t\tn := runtime.Callers(2, programCounters.pcs)\n\t\tif n < cap(programCounters.pcs) {\n\t\t\tprogramCounters.pcs = programCounters.pcs[:n]\n\t\t\tbreak\n\t\t}\n\t\t// Don't put the too-short counter slice back into the pool; this lets\n\t\t// the pool adjust if we consistently take deep stacktraces.\n\t\tprogramCounters = newProgramCounters(len(programCounters.pcs) * 2)\n\t}\n\n\ti := 0\n\tframes := runtime.CallersFrames(programCounters.pcs)\n\tfor frame, more := frames.Next(); more; frame, more = frames.Next() {\n\t\tif shouldIgnoreStacktraceFunction(frame.Function) {\n\t\t\tcontinue\n\t\t}\n\t\tif i != 0 {\n\t\t\tbuffer.WriteByte('\\n')\n\t\t}\n\t\ti++\n\t\tbuffer.WriteString(frame.Function)\n\t\tbuffer.WriteByte('\\n')\n\t\tbuffer.WriteByte('\\t')\n\t\tbuffer.WriteString(frame.File)\n\t\tbuffer.WriteByte(':')\n\t\tbuffer.WriteString(strconv.Itoa(int(frame.Line)))\n\t}\n\n\treturn buffer.String()\n}\n\nfunc shouldIgnoreStacktraceFunction(function string) bool {\n\tfor _, prefix := range _stacktraceIgnorePrefixes {\n\t\tif strings.HasPrefix(function, prefix) {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\ntype programCounters struct {\n\tpcs []uintptr\n}\n\nfunc newProgramCounters(size int) *programCounters {\n\treturn &programCounters{make([]uintptr, size)}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-hclog/stdlog.go",
    "content": "package hclog\n\nimport (\n\t\"bytes\"\n\t\"strings\"\n)\n\n// Provides a io.Writer to shim the data out of *log.Logger\n// and back into our Logger. This is basically the only way to\n// build upon *log.Logger.\ntype stdlogAdapter struct {\n\tlog         Logger\n\tinferLevels bool\n\tforceLevel  Level\n}\n\n// Take the data, infer the levels if configured, and send it through\n// a regular Logger.\nfunc (s *stdlogAdapter) Write(data []byte) (int, error) {\n\tstr := string(bytes.TrimRight(data, \" \\t\\n\"))\n\n\tif s.forceLevel != NoLevel {\n\t\t// Use pickLevel to strip log levels included in the line since we are\n\t\t// forcing the level\n\t\t_, str := s.pickLevel(str)\n\n\t\t// Log at the forced level\n\t\tswitch s.forceLevel {\n\t\tcase Trace:\n\t\t\ts.log.Trace(str)\n\t\tcase Debug:\n\t\t\ts.log.Debug(str)\n\t\tcase Info:\n\t\t\ts.log.Info(str)\n\t\tcase Warn:\n\t\t\ts.log.Warn(str)\n\t\tcase Error:\n\t\t\ts.log.Error(str)\n\t\tdefault:\n\t\t\ts.log.Info(str)\n\t\t}\n\t} else if s.inferLevels {\n\t\tlevel, str := s.pickLevel(str)\n\t\tswitch level {\n\t\tcase Trace:\n\t\t\ts.log.Trace(str)\n\t\tcase Debug:\n\t\t\ts.log.Debug(str)\n\t\tcase Info:\n\t\t\ts.log.Info(str)\n\t\tcase Warn:\n\t\t\ts.log.Warn(str)\n\t\tcase Error:\n\t\t\ts.log.Error(str)\n\t\tdefault:\n\t\t\ts.log.Info(str)\n\t\t}\n\t} else {\n\t\ts.log.Info(str)\n\t}\n\n\treturn len(data), nil\n}\n\n// Detect, based on conventions, what log level this is.\nfunc (s *stdlogAdapter) pickLevel(str string) (Level, string) {\n\tswitch {\n\tcase strings.HasPrefix(str, \"[DEBUG]\"):\n\t\treturn Debug, strings.TrimSpace(str[7:])\n\tcase strings.HasPrefix(str, \"[TRACE]\"):\n\t\treturn Trace, strings.TrimSpace(str[7:])\n\tcase strings.HasPrefix(str, \"[INFO]\"):\n\t\treturn Info, strings.TrimSpace(str[6:])\n\tcase strings.HasPrefix(str, \"[WARN]\"):\n\t\treturn Warn, strings.TrimSpace(str[7:])\n\tcase strings.HasPrefix(str, \"[ERROR]\"):\n\t\treturn Error, strings.TrimSpace(str[7:])\n\tcase strings.HasPrefix(str, \"[ERR]\"):\n\t\treturn Error, strings.TrimSpace(str[5:])\n\tdefault:\n\t\treturn Info, str\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-hclog/writer.go",
    "content": "package hclog\n\nimport (\n\t\"bytes\"\n\t\"io\"\n)\n\ntype writer struct {\n\tb bytes.Buffer\n\tw io.Writer\n}\n\nfunc newWriter(w io.Writer) *writer {\n\treturn &writer{w: w}\n}\n\nfunc (w *writer) Flush(level Level) (err error) {\n\tif lw, ok := w.w.(LevelWriter); ok {\n\t\t_, err = lw.LevelWrite(level, w.b.Bytes())\n\t} else {\n\t\t_, err = w.w.Write(w.b.Bytes())\n\t}\n\tw.b.Reset()\n\treturn err\n}\n\nfunc (w *writer) Write(p []byte) (int, error) {\n\treturn w.b.Write(p)\n}\n\nfunc (w *writer) WriteByte(c byte) error {\n\treturn w.b.WriteByte(c)\n}\n\nfunc (w *writer) WriteString(s string) (int, error) {\n\treturn w.b.WriteString(s)\n}\n\n// LevelWriter is the interface that wraps the LevelWrite method.\ntype LevelWriter interface {\n\tLevelWrite(level Level, p []byte) (n int, err error)\n}\n\n// LeveledWriter writes all log messages to the standard writer,\n// except for log levels that are defined in the overrides map.\ntype LeveledWriter struct {\n\tstandard  io.Writer\n\toverrides map[Level]io.Writer\n}\n\n// NewLeveledWriter returns an initialized LeveledWriter.\n//\n// standard will be used as the default writer for all log levels,\n// except for log levels that are defined in the overrides map.\nfunc NewLeveledWriter(standard io.Writer, overrides map[Level]io.Writer) *LeveledWriter {\n\treturn &LeveledWriter{\n\t\tstandard:  standard,\n\t\toverrides: overrides,\n\t}\n}\n\n// Write implements io.Writer.\nfunc (lw *LeveledWriter) Write(p []byte) (int, error) {\n\treturn lw.standard.Write(p)\n}\n\n// LevelWrite implements LevelWriter.\nfunc (lw *LeveledWriter) LevelWrite(level Level, p []byte) (int, error) {\n\tw, ok := lw.overrides[level]\n\tif !ok {\n\t\tw = lw.standard\n\t}\n\treturn w.Write(p)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-multierror/LICENSE",
    "content": "Mozilla Public License, version 2.0\n\n1. Definitions\n\n1.1. “Contributor”\n\n     means each individual or legal entity that creates, contributes to the\n     creation of, or owns Covered Software.\n\n1.2. “Contributor Version”\n\n     means the combination of the Contributions of others (if any) used by a\n     Contributor and that particular Contributor’s Contribution.\n\n1.3. “Contribution”\n\n     means Covered Software of a particular Contributor.\n\n1.4. “Covered Software”\n\n     means Source Code Form to which the initial Contributor has attached the\n     notice in Exhibit A, the Executable Form of such Source Code Form, and\n     Modifications of such Source Code Form, in each case including portions\n     thereof.\n\n1.5. “Incompatible With Secondary Licenses”\n     means\n\n     a. that the initial Contributor has attached the notice described in\n        Exhibit B to the Covered Software; or\n\n     b. that the Covered Software was made available under the terms of version\n        1.1 or earlier of the License, but not also under the terms of a\n        Secondary License.\n\n1.6. “Executable Form”\n\n     means any form of the work other than Source Code Form.\n\n1.7. “Larger Work”\n\n     means a work that combines Covered Software with other material, in a separate\n     file or files, that is not Covered Software.\n\n1.8. “License”\n\n     means this document.\n\n1.9. “Licensable”\n\n     means having the right to grant, to the maximum extent possible, whether at the\n     time of the initial grant or subsequently, any and all of the rights conveyed by\n     this License.\n\n1.10. “Modifications”\n\n     means any of the following:\n\n     a. any file in Source Code Form that results from an addition to, deletion\n        from, or modification of the contents of Covered Software; or\n\n     b. any new file in Source Code Form that contains any Covered Software.\n\n1.11. “Patent Claims” of a Contributor\n\n      means any patent claim(s), including without limitation, method, process,\n      and apparatus claims, in any patent Licensable by such Contributor that\n      would be infringed, but for the grant of the License, by the making,\n      using, selling, offering for sale, having made, import, or transfer of\n      either its Contributions or its Contributor Version.\n\n1.12. “Secondary License”\n\n      means either the GNU General Public License, Version 2.0, the GNU Lesser\n      General Public License, Version 2.1, the GNU Affero General Public\n      License, Version 3.0, or any later versions of those licenses.\n\n1.13. “Source Code Form”\n\n      means the form of the work preferred for making modifications.\n\n1.14. “You” (or “Your”)\n\n      means an individual or a legal entity exercising rights under this\n      License. For legal entities, “You” includes any entity that controls, is\n      controlled by, or is under common control with You. For purposes of this\n      definition, “control” means (a) the power, direct or indirect, to cause\n      the direction or management of such entity, whether by contract or\n      otherwise, or (b) ownership of more than fifty percent (50%) of the\n      outstanding shares or beneficial ownership of such entity.\n\n\n2. License Grants and Conditions\n\n2.1. Grants\n\n     Each Contributor hereby grants You a world-wide, royalty-free,\n     non-exclusive license:\n\n     a. under intellectual property rights (other than patent or trademark)\n        Licensable by such Contributor to use, reproduce, make available,\n        modify, display, perform, distribute, and otherwise exploit its\n        Contributions, either on an unmodified basis, with Modifications, or as\n        part of a Larger Work; and\n\n     b. under Patent Claims of such Contributor to make, use, sell, offer for\n        sale, have made, import, and otherwise transfer either its Contributions\n        or its Contributor Version.\n\n2.2. Effective Date\n\n     The licenses granted in Section 2.1 with respect to any Contribution become\n     effective for each Contribution on the date the Contributor first distributes\n     such Contribution.\n\n2.3. Limitations on Grant Scope\n\n     The licenses granted in this Section 2 are the only rights granted under this\n     License. No additional rights or licenses will be implied from the distribution\n     or licensing of Covered Software under this License. Notwithstanding Section\n     2.1(b) above, no patent license is granted by a Contributor:\n\n     a. for any code that a Contributor has removed from Covered Software; or\n\n     b. for infringements caused by: (i) Your and any other third party’s\n        modifications of Covered Software, or (ii) the combination of its\n        Contributions with other software (except as part of its Contributor\n        Version); or\n\n     c. under Patent Claims infringed by Covered Software in the absence of its\n        Contributions.\n\n     This License does not grant any rights in the trademarks, service marks, or\n     logos of any Contributor (except as may be necessary to comply with the\n     notice requirements in Section 3.4).\n\n2.4. Subsequent Licenses\n\n     No Contributor makes additional grants as a result of Your choice to\n     distribute the Covered Software under a subsequent version of this License\n     (see Section 10.2) or under the terms of a Secondary License (if permitted\n     under the terms of Section 3.3).\n\n2.5. Representation\n\n     Each Contributor represents that the Contributor believes its Contributions\n     are its original creation(s) or it has sufficient rights to grant the\n     rights to its Contributions conveyed by this License.\n\n2.6. Fair Use\n\n     This License is not intended to limit any rights You have under applicable\n     copyright doctrines of fair use, fair dealing, or other equivalents.\n\n2.7. Conditions\n\n     Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in\n     Section 2.1.\n\n\n3. Responsibilities\n\n3.1. Distribution of Source Form\n\n     All distribution of Covered Software in Source Code Form, including any\n     Modifications that You create or to which You contribute, must be under the\n     terms of this License. You must inform recipients that the Source Code Form\n     of the Covered Software is governed by the terms of this License, and how\n     they can obtain a copy of this License. You may not attempt to alter or\n     restrict the recipients’ rights in the Source Code Form.\n\n3.2. Distribution of Executable Form\n\n     If You distribute Covered Software in Executable Form then:\n\n     a. such Covered Software must also be made available in Source Code Form,\n        as described in Section 3.1, and You must inform recipients of the\n        Executable Form how they can obtain a copy of such Source Code Form by\n        reasonable means in a timely manner, at a charge no more than the cost\n        of distribution to the recipient; and\n\n     b. You may distribute such Executable Form under the terms of this License,\n        or sublicense it under different terms, provided that the license for\n        the Executable Form does not attempt to limit or alter the recipients’\n        rights in the Source Code Form under this License.\n\n3.3. Distribution of a Larger Work\n\n     You may create and distribute a Larger Work under terms of Your choice,\n     provided that You also comply with the requirements of this License for the\n     Covered Software. If the Larger Work is a combination of Covered Software\n     with a work governed by one or more Secondary Licenses, and the Covered\n     Software is not Incompatible With Secondary Licenses, this License permits\n     You to additionally distribute such Covered Software under the terms of\n     such Secondary License(s), so that the recipient of the Larger Work may, at\n     their option, further distribute the Covered Software under the terms of\n     either this License or such Secondary License(s).\n\n3.4. Notices\n\n     You may not remove or alter the substance of any license notices (including\n     copyright notices, patent notices, disclaimers of warranty, or limitations\n     of liability) contained within the Source Code Form of the Covered\n     Software, except that You may alter any license notices to the extent\n     required to remedy known factual inaccuracies.\n\n3.5. Application of Additional Terms\n\n     You may choose to offer, and to charge a fee for, warranty, support,\n     indemnity or liability obligations to one or more recipients of Covered\n     Software. However, You may do so only on Your own behalf, and not on behalf\n     of any Contributor. You must make it absolutely clear that any such\n     warranty, support, indemnity, or liability obligation is offered by You\n     alone, and You hereby agree to indemnify every Contributor for any\n     liability incurred by such Contributor as a result of warranty, support,\n     indemnity or liability terms You offer. You may include additional\n     disclaimers of warranty and limitations of liability specific to any\n     jurisdiction.\n\n4. Inability to Comply Due to Statute or Regulation\n\n   If it is impossible for You to comply with any of the terms of this License\n   with respect to some or all of the Covered Software due to statute, judicial\n   order, or regulation then You must: (a) comply with the terms of this License\n   to the maximum extent possible; and (b) describe the limitations and the code\n   they affect. Such description must be placed in a text file included with all\n   distributions of the Covered Software under this License. Except to the\n   extent prohibited by statute or regulation, such description must be\n   sufficiently detailed for a recipient of ordinary skill to be able to\n   understand it.\n\n5. Termination\n\n5.1. The rights granted under this License will terminate automatically if You\n     fail to comply with any of its terms. However, if You become compliant,\n     then the rights granted under this License from a particular Contributor\n     are reinstated (a) provisionally, unless and until such Contributor\n     explicitly and finally terminates Your grants, and (b) on an ongoing basis,\n     if such Contributor fails to notify You of the non-compliance by some\n     reasonable means prior to 60 days after You have come back into compliance.\n     Moreover, Your grants from a particular Contributor are reinstated on an\n     ongoing basis if such Contributor notifies You of the non-compliance by\n     some reasonable means, this is the first time You have received notice of\n     non-compliance with this License from such Contributor, and You become\n     compliant prior to 30 days after Your receipt of the notice.\n\n5.2. If You initiate litigation against any entity by asserting a patent\n     infringement claim (excluding declaratory judgment actions, counter-claims,\n     and cross-claims) alleging that a Contributor Version directly or\n     indirectly infringes any patent, then the rights granted to You by any and\n     all Contributors for the Covered Software under Section 2.1 of this License\n     shall terminate.\n\n5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user\n     license agreements (excluding distributors and resellers) which have been\n     validly granted by You or Your distributors under this License prior to\n     termination shall survive termination.\n\n6. Disclaimer of Warranty\n\n   Covered Software is provided under this License on an “as is” basis, without\n   warranty of any kind, either expressed, implied, or statutory, including,\n   without limitation, warranties that the Covered Software is free of defects,\n   merchantable, fit for a particular purpose or non-infringing. The entire\n   risk as to the quality and performance of the Covered Software is with You.\n   Should any Covered Software prove defective in any respect, You (not any\n   Contributor) assume the cost of any necessary servicing, repair, or\n   correction. This disclaimer of warranty constitutes an essential part of this\n   License. No use of  any Covered Software is authorized under this License\n   except under this disclaimer.\n\n7. Limitation of Liability\n\n   Under no circumstances and under no legal theory, whether tort (including\n   negligence), contract, or otherwise, shall any Contributor, or anyone who\n   distributes Covered Software as permitted above, be liable to You for any\n   direct, indirect, special, incidental, or consequential damages of any\n   character including, without limitation, damages for lost profits, loss of\n   goodwill, work stoppage, computer failure or malfunction, or any and all\n   other commercial damages or losses, even if such party shall have been\n   informed of the possibility of such damages. This limitation of liability\n   shall not apply to liability for death or personal injury resulting from such\n   party’s negligence to the extent applicable law prohibits such limitation.\n   Some jurisdictions do not allow the exclusion or limitation of incidental or\n   consequential damages, so this exclusion and limitation may not apply to You.\n\n8. Litigation\n\n   Any litigation relating to this License may be brought only in the courts of\n   a jurisdiction where the defendant maintains its principal place of business\n   and such litigation shall be governed by laws of that jurisdiction, without\n   reference to its conflict-of-law provisions. Nothing in this Section shall\n   prevent a party’s ability to bring cross-claims or counter-claims.\n\n9. Miscellaneous\n\n   This License represents the complete agreement concerning the subject matter\n   hereof. If any provision of this License is held to be unenforceable, such\n   provision shall be reformed only to the extent necessary to make it\n   enforceable. Any law or regulation which provides that the language of a\n   contract shall be construed against the drafter shall not be used to construe\n   this License against a Contributor.\n\n\n10. Versions of the License\n\n10.1. New Versions\n\n      Mozilla Foundation is the license steward. Except as provided in Section\n      10.3, no one other than the license steward has the right to modify or\n      publish new versions of this License. Each version will be given a\n      distinguishing version number.\n\n10.2. Effect of New Versions\n\n      You may distribute the Covered Software under the terms of the version of\n      the License under which You originally received the Covered Software, or\n      under the terms of any subsequent version published by the license\n      steward.\n\n10.3. Modified Versions\n\n      If you create software not governed by this License, and you want to\n      create a new license for such software, you may create and use a modified\n      version of this License if you rename the license and remove any\n      references to the name of the license steward (except to note that such\n      modified license differs from this License).\n\n10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses\n      If You choose to distribute Source Code Form that is Incompatible With\n      Secondary Licenses under the terms of this version of the License, the\n      notice described in Exhibit B of this License must be attached.\n\nExhibit A - Source Code Form License Notice\n\n      This Source Code Form is subject to the\n      terms of the Mozilla Public License, v.\n      2.0. If a copy of the MPL was not\n      distributed with this file, You can\n      obtain one at\n      http://mozilla.org/MPL/2.0/.\n\nIf it is not possible or desirable to put the notice in a particular file, then\nYou may include the notice in a location (such as a LICENSE file in a relevant\ndirectory) where a recipient would be likely to look for such a notice.\n\nYou may add additional accurate notices of copyright ownership.\n\nExhibit B - “Incompatible With Secondary Licenses” Notice\n\n      This Source Code Form is “Incompatible\n      With Secondary Licenses”, as defined by\n      the Mozilla Public License, v. 2.0.\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-multierror/append.go",
    "content": "package multierror\n\n// Append is a helper function that will append more errors\n// onto an Error in order to create a larger multi-error.\n//\n// If err is not a multierror.Error, then it will be turned into\n// one. If any of the errs are multierr.Error, they will be flattened\n// one level into err.\nfunc Append(err error, errs ...error) *Error {\n\tswitch err := err.(type) {\n\tcase *Error:\n\t\t// Typed nils can reach here, so initialize if we are nil\n\t\tif err == nil {\n\t\t\terr = new(Error)\n\t\t}\n\n\t\t// Go through each error and flatten\n\t\tfor _, e := range errs {\n\t\t\tswitch e := e.(type) {\n\t\t\tcase *Error:\n\t\t\t\tif e != nil {\n\t\t\t\t\terr.Errors = append(err.Errors, e.Errors...)\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\tif e != nil {\n\t\t\t\t\terr.Errors = append(err.Errors, e)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn err\n\tdefault:\n\t\tnewErrs := make([]error, 0, len(errs)+1)\n\t\tif err != nil {\n\t\t\tnewErrs = append(newErrs, err)\n\t\t}\n\t\tnewErrs = append(newErrs, errs...)\n\n\t\treturn Append(&Error{}, newErrs...)\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-multierror/flatten.go",
    "content": "package multierror\n\n// Flatten flattens the given error, merging any *Errors together into\n// a single *Error.\nfunc Flatten(err error) error {\n\t// If it isn't an *Error, just return the error as-is\n\tif _, ok := err.(*Error); !ok {\n\t\treturn err\n\t}\n\n\t// Otherwise, make the result and flatten away!\n\tflatErr := new(Error)\n\tflatten(err, flatErr)\n\treturn flatErr\n}\n\nfunc flatten(err error, flatErr *Error) {\n\tswitch err := err.(type) {\n\tcase *Error:\n\t\tfor _, e := range err.Errors {\n\t\t\tflatten(e, flatErr)\n\t\t}\n\tdefault:\n\t\tflatErr.Errors = append(flatErr.Errors, err)\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-multierror/format.go",
    "content": "package multierror\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n)\n\n// ErrorFormatFunc is a function callback that is called by Error to\n// turn the list of errors into a string.\ntype ErrorFormatFunc func([]error) string\n\n// ListFormatFunc is a basic formatter that outputs the number of errors\n// that occurred along with a bullet point list of the errors.\nfunc ListFormatFunc(es []error) string {\n\tif len(es) == 1 {\n\t\treturn fmt.Sprintf(\"1 error occurred:\\n\\t* %s\\n\\n\", es[0])\n\t}\n\n\tpoints := make([]string, len(es))\n\tfor i, err := range es {\n\t\tpoints[i] = fmt.Sprintf(\"* %s\", err)\n\t}\n\n\treturn fmt.Sprintf(\n\t\t\"%d errors occurred:\\n\\t%s\\n\\n\",\n\t\tlen(es), strings.Join(points, \"\\n\\t\"))\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-multierror/multierror.go",
    "content": "package multierror\n\nimport (\n\t\"fmt\"\n)\n\n// Error is an error type to track multiple errors. This is used to\n// accumulate errors in cases and return them as a single \"error\".\ntype Error struct {\n\tErrors      []error\n\tErrorFormat ErrorFormatFunc\n}\n\nfunc (e *Error) Error() string {\n\tfn := e.ErrorFormat\n\tif fn == nil {\n\t\tfn = ListFormatFunc\n\t}\n\n\treturn fn(e.Errors)\n}\n\n// ErrorOrNil returns an error interface if this Error represents\n// a list of errors, or returns nil if the list of errors is empty. This\n// function is useful at the end of accumulation to make sure that the value\n// returned represents the existence of errors.\nfunc (e *Error) ErrorOrNil() error {\n\tif e == nil {\n\t\treturn nil\n\t}\n\tif len(e.Errors) == 0 {\n\t\treturn nil\n\t}\n\n\treturn e\n}\n\nfunc (e *Error) GoString() string {\n\treturn fmt.Sprintf(\"*%#v\", *e)\n}\n\n// WrappedErrors returns the list of errors that this Error is wrapping.\n// It is an implementation of the errwrap.Wrapper interface so that\n// multierror.Error can be used with that library.\n//\n// This method is not safe to be called concurrently and is no different\n// than accessing the Errors field directly. It is implemented only to\n// satisfy the errwrap.Wrapper interface.\nfunc (e *Error) WrappedErrors() []error {\n\treturn e.Errors\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-multierror/prefix.go",
    "content": "package multierror\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/hashicorp/errwrap\"\n)\n\n// Prefix is a helper function that will prefix some text\n// to the given error. If the error is a multierror.Error, then\n// it will be prefixed to each wrapped error.\n//\n// This is useful to use when appending multiple multierrors\n// together in order to give better scoping.\nfunc Prefix(err error, prefix string) error {\n\tif err == nil {\n\t\treturn nil\n\t}\n\n\tformat := fmt.Sprintf(\"%s {{err}}\", prefix)\n\tswitch err := err.(type) {\n\tcase *Error:\n\t\t// Typed nils can reach here, so initialize if we are nil\n\t\tif err == nil {\n\t\t\terr = new(Error)\n\t\t}\n\n\t\t// Wrap each of the errors\n\t\tfor i, e := range err.Errors {\n\t\t\terr.Errors[i] = errwrap.Wrapf(format, e)\n\t\t}\n\n\t\treturn err\n\tdefault:\n\t\treturn errwrap.Wrapf(format, err)\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-multierror/sort.go",
    "content": "package multierror\n\n// Len implements sort.Interface function for length\nfunc (err Error) Len() int {\n\treturn len(err.Errors)\n}\n\n// Swap implements sort.Interface function for swapping elements\nfunc (err Error) Swap(i, j int) {\n\terr.Errors[i], err.Errors[j] = err.Errors[j], err.Errors[i]\n}\n\n// Less implements sort.Interface function for determining order\nfunc (err Error) Less(i, j int) bool {\n\treturn err.Errors[i].Error() < err.Errors[j].Error()\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-plugin/LICENSE",
    "content": "Mozilla Public License, version 2.0\n\n1. Definitions\n\n1.1. “Contributor”\n\n     means each individual or legal entity that creates, contributes to the\n     creation of, or owns Covered Software.\n\n1.2. “Contributor Version”\n\n     means the combination of the Contributions of others (if any) used by a\n     Contributor and that particular Contributor’s Contribution.\n\n1.3. “Contribution”\n\n     means Covered Software of a particular Contributor.\n\n1.4. “Covered Software”\n\n     means Source Code Form to which the initial Contributor has attached the\n     notice in Exhibit A, the Executable Form of such Source Code Form, and\n     Modifications of such Source Code Form, in each case including portions\n     thereof.\n\n1.5. “Incompatible With Secondary Licenses”\n     means\n\n     a. that the initial Contributor has attached the notice described in\n        Exhibit B to the Covered Software; or\n\n     b. that the Covered Software was made available under the terms of version\n        1.1 or earlier of the License, but not also under the terms of a\n        Secondary License.\n\n1.6. “Executable Form”\n\n     means any form of the work other than Source Code Form.\n\n1.7. “Larger Work”\n\n     means a work that combines Covered Software with other material, in a separate\n     file or files, that is not Covered Software.\n\n1.8. “License”\n\n     means this document.\n\n1.9. “Licensable”\n\n     means having the right to grant, to the maximum extent possible, whether at the\n     time of the initial grant or subsequently, any and all of the rights conveyed by\n     this License.\n\n1.10. “Modifications”\n\n     means any of the following:\n\n     a. any file in Source Code Form that results from an addition to, deletion\n        from, or modification of the contents of Covered Software; or\n\n     b. any new file in Source Code Form that contains any Covered Software.\n\n1.11. “Patent Claims” of a Contributor\n\n      means any patent claim(s), including without limitation, method, process,\n      and apparatus claims, in any patent Licensable by such Contributor that\n      would be infringed, but for the grant of the License, by the making,\n      using, selling, offering for sale, having made, import, or transfer of\n      either its Contributions or its Contributor Version.\n\n1.12. “Secondary License”\n\n      means either the GNU General Public License, Version 2.0, the GNU Lesser\n      General Public License, Version 2.1, the GNU Affero General Public\n      License, Version 3.0, or any later versions of those licenses.\n\n1.13. “Source Code Form”\n\n      means the form of the work preferred for making modifications.\n\n1.14. “You” (or “Your”)\n\n      means an individual or a legal entity exercising rights under this\n      License. For legal entities, “You” includes any entity that controls, is\n      controlled by, or is under common control with You. For purposes of this\n      definition, “control” means (a) the power, direct or indirect, to cause\n      the direction or management of such entity, whether by contract or\n      otherwise, or (b) ownership of more than fifty percent (50%) of the\n      outstanding shares or beneficial ownership of such entity.\n\n\n2. License Grants and Conditions\n\n2.1. Grants\n\n     Each Contributor hereby grants You a world-wide, royalty-free,\n     non-exclusive license:\n\n     a. under intellectual property rights (other than patent or trademark)\n        Licensable by such Contributor to use, reproduce, make available,\n        modify, display, perform, distribute, and otherwise exploit its\n        Contributions, either on an unmodified basis, with Modifications, or as\n        part of a Larger Work; and\n\n     b. under Patent Claims of such Contributor to make, use, sell, offer for\n        sale, have made, import, and otherwise transfer either its Contributions\n        or its Contributor Version.\n\n2.2. Effective Date\n\n     The licenses granted in Section 2.1 with respect to any Contribution become\n     effective for each Contribution on the date the Contributor first distributes\n     such Contribution.\n\n2.3. Limitations on Grant Scope\n\n     The licenses granted in this Section 2 are the only rights granted under this\n     License. No additional rights or licenses will be implied from the distribution\n     or licensing of Covered Software under this License. Notwithstanding Section\n     2.1(b) above, no patent license is granted by a Contributor:\n\n     a. for any code that a Contributor has removed from Covered Software; or\n\n     b. for infringements caused by: (i) Your and any other third party’s\n        modifications of Covered Software, or (ii) the combination of its\n        Contributions with other software (except as part of its Contributor\n        Version); or\n\n     c. under Patent Claims infringed by Covered Software in the absence of its\n        Contributions.\n\n     This License does not grant any rights in the trademarks, service marks, or\n     logos of any Contributor (except as may be necessary to comply with the\n     notice requirements in Section 3.4).\n\n2.4. Subsequent Licenses\n\n     No Contributor makes additional grants as a result of Your choice to\n     distribute the Covered Software under a subsequent version of this License\n     (see Section 10.2) or under the terms of a Secondary License (if permitted\n     under the terms of Section 3.3).\n\n2.5. Representation\n\n     Each Contributor represents that the Contributor believes its Contributions\n     are its original creation(s) or it has sufficient rights to grant the\n     rights to its Contributions conveyed by this License.\n\n2.6. Fair Use\n\n     This License is not intended to limit any rights You have under applicable\n     copyright doctrines of fair use, fair dealing, or other equivalents.\n\n2.7. Conditions\n\n     Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in\n     Section 2.1.\n\n\n3. Responsibilities\n\n3.1. Distribution of Source Form\n\n     All distribution of Covered Software in Source Code Form, including any\n     Modifications that You create or to which You contribute, must be under the\n     terms of this License. You must inform recipients that the Source Code Form\n     of the Covered Software is governed by the terms of this License, and how\n     they can obtain a copy of this License. You may not attempt to alter or\n     restrict the recipients’ rights in the Source Code Form.\n\n3.2. Distribution of Executable Form\n\n     If You distribute Covered Software in Executable Form then:\n\n     a. such Covered Software must also be made available in Source Code Form,\n        as described in Section 3.1, and You must inform recipients of the\n        Executable Form how they can obtain a copy of such Source Code Form by\n        reasonable means in a timely manner, at a charge no more than the cost\n        of distribution to the recipient; and\n\n     b. You may distribute such Executable Form under the terms of this License,\n        or sublicense it under different terms, provided that the license for\n        the Executable Form does not attempt to limit or alter the recipients’\n        rights in the Source Code Form under this License.\n\n3.3. Distribution of a Larger Work\n\n     You may create and distribute a Larger Work under terms of Your choice,\n     provided that You also comply with the requirements of this License for the\n     Covered Software. If the Larger Work is a combination of Covered Software\n     with a work governed by one or more Secondary Licenses, and the Covered\n     Software is not Incompatible With Secondary Licenses, this License permits\n     You to additionally distribute such Covered Software under the terms of\n     such Secondary License(s), so that the recipient of the Larger Work may, at\n     their option, further distribute the Covered Software under the terms of\n     either this License or such Secondary License(s).\n\n3.4. Notices\n\n     You may not remove or alter the substance of any license notices (including\n     copyright notices, patent notices, disclaimers of warranty, or limitations\n     of liability) contained within the Source Code Form of the Covered\n     Software, except that You may alter any license notices to the extent\n     required to remedy known factual inaccuracies.\n\n3.5. Application of Additional Terms\n\n     You may choose to offer, and to charge a fee for, warranty, support,\n     indemnity or liability obligations to one or more recipients of Covered\n     Software. However, You may do so only on Your own behalf, and not on behalf\n     of any Contributor. You must make it absolutely clear that any such\n     warranty, support, indemnity, or liability obligation is offered by You\n     alone, and You hereby agree to indemnify every Contributor for any\n     liability incurred by such Contributor as a result of warranty, support,\n     indemnity or liability terms You offer. You may include additional\n     disclaimers of warranty and limitations of liability specific to any\n     jurisdiction.\n\n4. Inability to Comply Due to Statute or Regulation\n\n   If it is impossible for You to comply with any of the terms of this License\n   with respect to some or all of the Covered Software due to statute, judicial\n   order, or regulation then You must: (a) comply with the terms of this License\n   to the maximum extent possible; and (b) describe the limitations and the code\n   they affect. Such description must be placed in a text file included with all\n   distributions of the Covered Software under this License. Except to the\n   extent prohibited by statute or regulation, such description must be\n   sufficiently detailed for a recipient of ordinary skill to be able to\n   understand it.\n\n5. Termination\n\n5.1. The rights granted under this License will terminate automatically if You\n     fail to comply with any of its terms. However, if You become compliant,\n     then the rights granted under this License from a particular Contributor\n     are reinstated (a) provisionally, unless and until such Contributor\n     explicitly and finally terminates Your grants, and (b) on an ongoing basis,\n     if such Contributor fails to notify You of the non-compliance by some\n     reasonable means prior to 60 days after You have come back into compliance.\n     Moreover, Your grants from a particular Contributor are reinstated on an\n     ongoing basis if such Contributor notifies You of the non-compliance by\n     some reasonable means, this is the first time You have received notice of\n     non-compliance with this License from such Contributor, and You become\n     compliant prior to 30 days after Your receipt of the notice.\n\n5.2. If You initiate litigation against any entity by asserting a patent\n     infringement claim (excluding declaratory judgment actions, counter-claims,\n     and cross-claims) alleging that a Contributor Version directly or\n     indirectly infringes any patent, then the rights granted to You by any and\n     all Contributors for the Covered Software under Section 2.1 of this License\n     shall terminate.\n\n5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user\n     license agreements (excluding distributors and resellers) which have been\n     validly granted by You or Your distributors under this License prior to\n     termination shall survive termination.\n\n6. Disclaimer of Warranty\n\n   Covered Software is provided under this License on an “as is” basis, without\n   warranty of any kind, either expressed, implied, or statutory, including,\n   without limitation, warranties that the Covered Software is free of defects,\n   merchantable, fit for a particular purpose or non-infringing. The entire\n   risk as to the quality and performance of the Covered Software is with You.\n   Should any Covered Software prove defective in any respect, You (not any\n   Contributor) assume the cost of any necessary servicing, repair, or\n   correction. This disclaimer of warranty constitutes an essential part of this\n   License. No use of  any Covered Software is authorized under this License\n   except under this disclaimer.\n\n7. Limitation of Liability\n\n   Under no circumstances and under no legal theory, whether tort (including\n   negligence), contract, or otherwise, shall any Contributor, or anyone who\n   distributes Covered Software as permitted above, be liable to You for any\n   direct, indirect, special, incidental, or consequential damages of any\n   character including, without limitation, damages for lost profits, loss of\n   goodwill, work stoppage, computer failure or malfunction, or any and all\n   other commercial damages or losses, even if such party shall have been\n   informed of the possibility of such damages. This limitation of liability\n   shall not apply to liability for death or personal injury resulting from such\n   party’s negligence to the extent applicable law prohibits such limitation.\n   Some jurisdictions do not allow the exclusion or limitation of incidental or\n   consequential damages, so this exclusion and limitation may not apply to You.\n\n8. Litigation\n\n   Any litigation relating to this License may be brought only in the courts of\n   a jurisdiction where the defendant maintains its principal place of business\n   and such litigation shall be governed by laws of that jurisdiction, without\n   reference to its conflict-of-law provisions. Nothing in this Section shall\n   prevent a party’s ability to bring cross-claims or counter-claims.\n\n9. Miscellaneous\n\n   This License represents the complete agreement concerning the subject matter\n   hereof. If any provision of this License is held to be unenforceable, such\n   provision shall be reformed only to the extent necessary to make it\n   enforceable. Any law or regulation which provides that the language of a\n   contract shall be construed against the drafter shall not be used to construe\n   this License against a Contributor.\n\n\n10. Versions of the License\n\n10.1. New Versions\n\n      Mozilla Foundation is the license steward. Except as provided in Section\n      10.3, no one other than the license steward has the right to modify or\n      publish new versions of this License. Each version will be given a\n      distinguishing version number.\n\n10.2. Effect of New Versions\n\n      You may distribute the Covered Software under the terms of the version of\n      the License under which You originally received the Covered Software, or\n      under the terms of any subsequent version published by the license\n      steward.\n\n10.3. Modified Versions\n\n      If you create software not governed by this License, and you want to\n      create a new license for such software, you may create and use a modified\n      version of this License if you rename the license and remove any\n      references to the name of the license steward (except to note that such\n      modified license differs from this License).\n\n10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses\n      If You choose to distribute Source Code Form that is Incompatible With\n      Secondary Licenses under the terms of this version of the License, the\n      notice described in Exhibit B of this License must be attached.\n\nExhibit A - Source Code Form License Notice\n\n      This Source Code Form is subject to the\n      terms of the Mozilla Public License, v.\n      2.0. If a copy of the MPL was not\n      distributed with this file, You can\n      obtain one at\n      http://mozilla.org/MPL/2.0/.\n\nIf it is not possible or desirable to put the notice in a particular file, then\nYou may include the notice in a location (such as a LICENSE file in a relevant\ndirectory) where a recipient would be likely to look for such a notice.\n\nYou may add additional accurate notices of copyright ownership.\n\nExhibit B - “Incompatible With Secondary Licenses” Notice\n\n      This Source Code Form is “Incompatible\n      With Secondary Licenses”, as defined by\n      the Mozilla Public License, v. 2.0.\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-plugin/client.go",
    "content": "package plugin\n\nimport (\n\t\"bufio\"\n\t\"context\"\n\t\"crypto/subtle\"\n\t\"crypto/tls\"\n\t\"crypto/x509\"\n\t\"encoding/base64\"\n\t\"errors\"\n\t\"fmt\"\n\t\"hash\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"net\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\t\"sync/atomic\"\n\t\"time\"\n\n\thclog \"github.com/hashicorp/go-hclog\"\n)\n\n// If this is 1, then we've called CleanupClients. This can be used\n// by plugin RPC implementations to change error behavior since you\n// can expected network connection errors at this point. This should be\n// read by using sync/atomic.\nvar Killed uint32 = 0\n\n// This is a slice of the \"managed\" clients which are cleaned up when\n// calling Cleanup\nvar managedClients = make([]*Client, 0, 5)\nvar managedClientsLock sync.Mutex\n\n// Error types\nvar (\n\t// ErrProcessNotFound is returned when a client is instantiated to\n\t// reattach to an existing process and it isn't found.\n\tErrProcessNotFound = errors.New(\"Reattachment process not found\")\n\n\t// ErrChecksumsDoNotMatch is returned when binary's checksum doesn't match\n\t// the one provided in the SecureConfig.\n\tErrChecksumsDoNotMatch = errors.New(\"checksums did not match\")\n\n\t// ErrSecureNoChecksum is returned when an empty checksum is provided to the\n\t// SecureConfig.\n\tErrSecureConfigNoChecksum = errors.New(\"no checksum provided\")\n\n\t// ErrSecureNoHash is returned when a nil Hash object is provided to the\n\t// SecureConfig.\n\tErrSecureConfigNoHash = errors.New(\"no hash implementation provided\")\n\n\t// ErrSecureConfigAndReattach is returned when both Reattach and\n\t// SecureConfig are set.\n\tErrSecureConfigAndReattach = errors.New(\"only one of Reattach or SecureConfig can be set\")\n)\n\n// Client handles the lifecycle of a plugin application. It launches\n// plugins, connects to them, dispenses interface implementations, and handles\n// killing the process.\n//\n// Plugin hosts should use one Client for each plugin executable. To\n// dispense a plugin type, use the `Client.Client` function, and then\n// cal `Dispense`. This awkward API is mostly historical but is used to split\n// the client that deals with subprocess management and the client that\n// does RPC management.\n//\n// See NewClient and ClientConfig for using a Client.\ntype Client struct {\n\tconfig            *ClientConfig\n\texited            bool\n\tl                 sync.Mutex\n\taddress           net.Addr\n\tprocess           *os.Process\n\tclient            ClientProtocol\n\tprotocol          Protocol\n\tlogger            hclog.Logger\n\tdoneCtx           context.Context\n\tctxCancel         context.CancelFunc\n\tnegotiatedVersion int\n\n\t// clientWaitGroup is used to manage the lifecycle of the plugin management\n\t// goroutines.\n\tclientWaitGroup sync.WaitGroup\n\n\t// processKilled is used for testing only, to flag when the process was\n\t// forcefully killed.\n\tprocessKilled bool\n}\n\n// NegotiatedVersion returns the protocol version negotiated with the server.\n// This is only valid after Start() is called.\nfunc (c *Client) NegotiatedVersion() int {\n\treturn c.negotiatedVersion\n}\n\n// ClientConfig is the configuration used to initialize a new\n// plugin client. After being used to initialize a plugin client,\n// that configuration must not be modified again.\ntype ClientConfig struct {\n\t// HandshakeConfig is the configuration that must match servers.\n\tHandshakeConfig\n\n\t// Plugins are the plugins that can be consumed.\n\t// The implied version of this PluginSet is the Handshake.ProtocolVersion.\n\tPlugins PluginSet\n\n\t// VersionedPlugins is a map of PluginSets for specific protocol versions.\n\t// These can be used to negotiate a compatible version between client and\n\t// server. If this is set, Handshake.ProtocolVersion is not required.\n\tVersionedPlugins map[int]PluginSet\n\n\t// One of the following must be set, but not both.\n\t//\n\t// Cmd is the unstarted subprocess for starting the plugin. If this is\n\t// set, then the Client starts the plugin process on its own and connects\n\t// to it.\n\t//\n\t// Reattach is configuration for reattaching to an existing plugin process\n\t// that is already running. This isn't common.\n\tCmd      *exec.Cmd\n\tReattach *ReattachConfig\n\n\t// SecureConfig is configuration for verifying the integrity of the\n\t// executable. It can not be used with Reattach.\n\tSecureConfig *SecureConfig\n\n\t// TLSConfig is used to enable TLS on the RPC client.\n\tTLSConfig *tls.Config\n\n\t// Managed represents if the client should be managed by the\n\t// plugin package or not. If true, then by calling CleanupClients,\n\t// it will automatically be cleaned up. Otherwise, the client\n\t// user is fully responsible for making sure to Kill all plugin\n\t// clients. By default the client is _not_ managed.\n\tManaged bool\n\n\t// The minimum and maximum port to use for communicating with\n\t// the subprocess. If not set, this defaults to 10,000 and 25,000\n\t// respectively.\n\tMinPort, MaxPort uint\n\n\t// StartTimeout is the timeout to wait for the plugin to say it\n\t// has started successfully.\n\tStartTimeout time.Duration\n\n\t// If non-nil, then the stderr of the client will be written to here\n\t// (as well as the log). This is the original os.Stderr of the subprocess.\n\t// This isn't the output of synced stderr.\n\tStderr io.Writer\n\n\t// SyncStdout, SyncStderr can be set to override the\n\t// respective os.Std* values in the plugin. Care should be taken to\n\t// avoid races here. If these are nil, then this will automatically be\n\t// hooked up to os.Stdin, Stdout, and Stderr, respectively.\n\t//\n\t// If the default values (nil) are used, then this package will not\n\t// sync any of these streams.\n\tSyncStdout io.Writer\n\tSyncStderr io.Writer\n\n\t// AllowedProtocols is a list of allowed protocols. If this isn't set,\n\t// then only netrpc is allowed. This is so that older go-plugin systems\n\t// can show friendly errors if they see a plugin with an unknown\n\t// protocol.\n\t//\n\t// By setting this, you can cause an error immediately on plugin start\n\t// if an unsupported protocol is used with a good error message.\n\t//\n\t// If this isn't set at all (nil value), then only net/rpc is accepted.\n\t// This is done for legacy reasons. You must explicitly opt-in to\n\t// new protocols.\n\tAllowedProtocols []Protocol\n\n\t// Logger is the logger that the client will used. If none is provided,\n\t// it will default to hclog's default logger.\n\tLogger hclog.Logger\n\n\t// AutoMTLS has the client and server automatically negotiate mTLS for\n\t// transport authentication. This ensures that only the original client will\n\t// be allowed to connect to the server, and all other connections will be\n\t// rejected. The client will also refuse to connect to any server that isn't\n\t// the original instance started by the client.\n\t//\n\t// In this mode of operation, the client generates a one-time use tls\n\t// certificate, sends the public x.509 certificate to the new server, and\n\t// the server generates a one-time use tls certificate, and sends the public\n\t// x.509 certificate back to the client. These are used to authenticate all\n\t// rpc connections between the client and server.\n\t//\n\t// Setting AutoMTLS to true implies that the server must support the\n\t// protocol, and correctly negotiate the tls certificates, or a connection\n\t// failure will result.\n\t//\n\t// The client should not set TLSConfig, nor should the server set a\n\t// TLSProvider, because AutoMTLS implies that a new certificate and tls\n\t// configuration will be generated at startup.\n\t//\n\t// You cannot Reattach to a server with this option enabled.\n\tAutoMTLS bool\n}\n\n// ReattachConfig is used to configure a client to reattach to an\n// already-running plugin process. You can retrieve this information by\n// calling ReattachConfig on Client.\ntype ReattachConfig struct {\n\tProtocol Protocol\n\tAddr     net.Addr\n\tPid      int\n}\n\n// SecureConfig is used to configure a client to verify the integrity of an\n// executable before running. It does this by verifying the checksum is\n// expected. Hash is used to specify the hashing method to use when checksumming\n// the file.  The configuration is verified by the client by calling the\n// SecureConfig.Check() function.\n//\n// The host process should ensure the checksum was provided by a trusted and\n// authoritative source. The binary should be installed in such a way that it\n// can not be modified by an unauthorized user between the time of this check\n// and the time of execution.\ntype SecureConfig struct {\n\tChecksum []byte\n\tHash     hash.Hash\n}\n\n// Check takes the filepath to an executable and returns true if the checksum of\n// the file matches the checksum provided in the SecureConfig.\nfunc (s *SecureConfig) Check(filePath string) (bool, error) {\n\tif len(s.Checksum) == 0 {\n\t\treturn false, ErrSecureConfigNoChecksum\n\t}\n\n\tif s.Hash == nil {\n\t\treturn false, ErrSecureConfigNoHash\n\t}\n\n\tfile, err := os.Open(filePath)\n\tif err != nil {\n\t\treturn false, err\n\t}\n\tdefer file.Close()\n\n\t_, err = io.Copy(s.Hash, file)\n\tif err != nil {\n\t\treturn false, err\n\t}\n\n\tsum := s.Hash.Sum(nil)\n\n\treturn subtle.ConstantTimeCompare(sum, s.Checksum) == 1, nil\n}\n\n// This makes sure all the managed subprocesses are killed and properly\n// logged. This should be called before the parent process running the\n// plugins exits.\n//\n// This must only be called _once_.\nfunc CleanupClients() {\n\t// Set the killed to true so that we don't get unexpected panics\n\tatomic.StoreUint32(&Killed, 1)\n\n\t// Kill all the managed clients in parallel and use a WaitGroup\n\t// to wait for them all to finish up.\n\tvar wg sync.WaitGroup\n\tmanagedClientsLock.Lock()\n\tfor _, client := range managedClients {\n\t\twg.Add(1)\n\n\t\tgo func(client *Client) {\n\t\t\tclient.Kill()\n\t\t\twg.Done()\n\t\t}(client)\n\t}\n\tmanagedClientsLock.Unlock()\n\n\twg.Wait()\n}\n\n// Creates a new plugin client which manages the lifecycle of an external\n// plugin and gets the address for the RPC connection.\n//\n// The client must be cleaned up at some point by calling Kill(). If\n// the client is a managed client (created with NewManagedClient) you\n// can just call CleanupClients at the end of your program and they will\n// be properly cleaned.\nfunc NewClient(config *ClientConfig) (c *Client) {\n\tif config.MinPort == 0 && config.MaxPort == 0 {\n\t\tconfig.MinPort = 10000\n\t\tconfig.MaxPort = 25000\n\t}\n\n\tif config.StartTimeout == 0 {\n\t\tconfig.StartTimeout = 1 * time.Minute\n\t}\n\n\tif config.Stderr == nil {\n\t\tconfig.Stderr = ioutil.Discard\n\t}\n\n\tif config.SyncStdout == nil {\n\t\tconfig.SyncStdout = ioutil.Discard\n\t}\n\tif config.SyncStderr == nil {\n\t\tconfig.SyncStderr = ioutil.Discard\n\t}\n\n\tif config.AllowedProtocols == nil {\n\t\tconfig.AllowedProtocols = []Protocol{ProtocolNetRPC}\n\t}\n\n\tif config.Logger == nil {\n\t\tconfig.Logger = hclog.New(&hclog.LoggerOptions{\n\t\t\tOutput: hclog.DefaultOutput,\n\t\t\tLevel:  hclog.Trace,\n\t\t\tName:   \"plugin\",\n\t\t})\n\t}\n\n\tc = &Client{\n\t\tconfig: config,\n\t\tlogger: config.Logger,\n\t}\n\tif config.Managed {\n\t\tmanagedClientsLock.Lock()\n\t\tmanagedClients = append(managedClients, c)\n\t\tmanagedClientsLock.Unlock()\n\t}\n\n\treturn\n}\n\n// Client returns the protocol client for this connection.\n//\n// Subsequent calls to this will return the same client.\nfunc (c *Client) Client() (ClientProtocol, error) {\n\t_, err := c.Start()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tc.l.Lock()\n\tdefer c.l.Unlock()\n\n\tif c.client != nil {\n\t\treturn c.client, nil\n\t}\n\n\tswitch c.protocol {\n\tcase ProtocolNetRPC:\n\t\tc.client, err = newRPCClient(c)\n\n\tcase ProtocolGRPC:\n\t\tc.client, err = newGRPCClient(c.doneCtx, c)\n\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"unknown server protocol: %s\", c.protocol)\n\t}\n\n\tif err != nil {\n\t\tc.client = nil\n\t\treturn nil, err\n\t}\n\n\treturn c.client, nil\n}\n\n// Tells whether or not the underlying process has exited.\nfunc (c *Client) Exited() bool {\n\tc.l.Lock()\n\tdefer c.l.Unlock()\n\treturn c.exited\n}\n\n// killed is used in tests to check if a process failed to exit gracefully, and\n// needed to be killed.\nfunc (c *Client) killed() bool {\n\tc.l.Lock()\n\tdefer c.l.Unlock()\n\treturn c.processKilled\n}\n\n// End the executing subprocess (if it is running) and perform any cleanup\n// tasks necessary such as capturing any remaining logs and so on.\n//\n// This method blocks until the process successfully exits.\n//\n// This method can safely be called multiple times.\nfunc (c *Client) Kill() {\n\t// Grab a lock to read some private fields.\n\tc.l.Lock()\n\tprocess := c.process\n\taddr := c.address\n\tc.l.Unlock()\n\n\t// If there is no process, there is nothing to kill.\n\tif process == nil {\n\t\treturn\n\t}\n\n\tdefer func() {\n\t\t// Wait for the all client goroutines to finish.\n\t\tc.clientWaitGroup.Wait()\n\n\t\t// Make sure there is no reference to the old process after it has been\n\t\t// killed.\n\t\tc.l.Lock()\n\t\tc.process = nil\n\t\tc.l.Unlock()\n\t}()\n\n\t// We need to check for address here. It is possible that the plugin\n\t// started (process != nil) but has no address (addr == nil) if the\n\t// plugin failed at startup. If we do have an address, we need to close\n\t// the plugin net connections.\n\tgraceful := false\n\tif addr != nil {\n\t\t// Close the client to cleanly exit the process.\n\t\tclient, err := c.Client()\n\t\tif err == nil {\n\t\t\terr = client.Close()\n\n\t\t\t// If there is no error, then we attempt to wait for a graceful\n\t\t\t// exit. If there was an error, we assume that graceful cleanup\n\t\t\t// won't happen and just force kill.\n\t\t\tgraceful = err == nil\n\t\t\tif err != nil {\n\t\t\t\t// If there was an error just log it. We're going to force\n\t\t\t\t// kill in a moment anyways.\n\t\t\t\tc.logger.Warn(\"error closing client during Kill\", \"err\", err)\n\t\t\t}\n\t\t} else {\n\t\t\tc.logger.Error(\"client\", \"error\", err)\n\t\t}\n\t}\n\n\t// If we're attempting a graceful exit, then we wait for a short period\n\t// of time to allow that to happen. To wait for this we just wait on the\n\t// doneCh which would be closed if the process exits.\n\tif graceful {\n\t\tselect {\n\t\tcase <-c.doneCtx.Done():\n\t\t\tc.logger.Debug(\"plugin exited\")\n\t\t\treturn\n\t\tcase <-time.After(2 * time.Second):\n\t\t}\n\t}\n\n\t// If graceful exiting failed, just kill it\n\tc.logger.Warn(\"plugin failed to exit gracefully\")\n\tprocess.Kill()\n\n\tc.l.Lock()\n\tc.processKilled = true\n\tc.l.Unlock()\n}\n\n// Starts the underlying subprocess, communicating with it to negotiate\n// a port for RPC connections, and returning the address to connect via RPC.\n//\n// This method is safe to call multiple times. Subsequent calls have no effect.\n// Once a client has been started once, it cannot be started again, even if\n// it was killed.\nfunc (c *Client) Start() (addr net.Addr, err error) {\n\tc.l.Lock()\n\tdefer c.l.Unlock()\n\n\tif c.address != nil {\n\t\treturn c.address, nil\n\t}\n\n\t// If one of cmd or reattach isn't set, then it is an error. We wrap\n\t// this in a {} for scoping reasons, and hopeful that the escape\n\t// analysis will pop the stack here.\n\t{\n\t\tcmdSet := c.config.Cmd != nil\n\t\tattachSet := c.config.Reattach != nil\n\t\tsecureSet := c.config.SecureConfig != nil\n\t\tif cmdSet == attachSet {\n\t\t\treturn nil, fmt.Errorf(\"Only one of Cmd or Reattach must be set\")\n\t\t}\n\n\t\tif secureSet && attachSet {\n\t\t\treturn nil, ErrSecureConfigAndReattach\n\t\t}\n\t}\n\n\tif c.config.Reattach != nil {\n\t\treturn c.reattach()\n\t}\n\n\tif c.config.VersionedPlugins == nil {\n\t\tc.config.VersionedPlugins = make(map[int]PluginSet)\n\t}\n\n\t// handle all plugins as versioned, using the handshake config as the default.\n\tversion := int(c.config.ProtocolVersion)\n\n\t// Make sure we're not overwriting a real version 0. If ProtocolVersion was\n\t// non-zero, then we have to just assume the user made sure that\n\t// VersionedPlugins doesn't conflict.\n\tif _, ok := c.config.VersionedPlugins[version]; !ok && c.config.Plugins != nil {\n\t\tc.config.VersionedPlugins[version] = c.config.Plugins\n\t}\n\n\tvar versionStrings []string\n\tfor v := range c.config.VersionedPlugins {\n\t\tversionStrings = append(versionStrings, strconv.Itoa(v))\n\t}\n\n\tenv := []string{\n\t\tfmt.Sprintf(\"%s=%s\", c.config.MagicCookieKey, c.config.MagicCookieValue),\n\t\tfmt.Sprintf(\"PLUGIN_MIN_PORT=%d\", c.config.MinPort),\n\t\tfmt.Sprintf(\"PLUGIN_MAX_PORT=%d\", c.config.MaxPort),\n\t\tfmt.Sprintf(\"PLUGIN_PROTOCOL_VERSIONS=%s\", strings.Join(versionStrings, \",\")),\n\t}\n\n\tcmd := c.config.Cmd\n\tcmd.Env = append(cmd.Env, os.Environ()...)\n\tcmd.Env = append(cmd.Env, env...)\n\tcmd.Stdin = os.Stdin\n\n\tcmdStdout, err := cmd.StdoutPipe()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tcmdStderr, err := cmd.StderrPipe()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif c.config.SecureConfig != nil {\n\t\tif ok, err := c.config.SecureConfig.Check(cmd.Path); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"error verifying checksum: %s\", err)\n\t\t} else if !ok {\n\t\t\treturn nil, ErrChecksumsDoNotMatch\n\t\t}\n\t}\n\n\t// Setup a temporary certificate for client/server mtls, and send the public\n\t// certificate to the plugin.\n\tif c.config.AutoMTLS {\n\t\tc.logger.Info(\"configuring client automatic mTLS\")\n\t\tcertPEM, keyPEM, err := generateCert()\n\t\tif err != nil {\n\t\t\tc.logger.Error(\"failed to generate client certificate\", \"error\", err)\n\t\t\treturn nil, err\n\t\t}\n\t\tcert, err := tls.X509KeyPair(certPEM, keyPEM)\n\t\tif err != nil {\n\t\t\tc.logger.Error(\"failed to parse client certificate\", \"error\", err)\n\t\t\treturn nil, err\n\t\t}\n\n\t\tcmd.Env = append(cmd.Env, fmt.Sprintf(\"PLUGIN_CLIENT_CERT=%s\", certPEM))\n\n\t\tc.config.TLSConfig = &tls.Config{\n\t\t\tCertificates: []tls.Certificate{cert},\n\t\t\tServerName:   \"localhost\",\n\t\t}\n\t}\n\n\tc.logger.Debug(\"starting plugin\", \"path\", cmd.Path, \"args\", cmd.Args)\n\terr = cmd.Start()\n\tif err != nil {\n\t\treturn\n\t}\n\n\t// Set the process\n\tc.process = cmd.Process\n\tc.logger.Debug(\"plugin started\", \"path\", cmd.Path, \"pid\", c.process.Pid)\n\n\t// Make sure the command is properly cleaned up if there is an error\n\tdefer func() {\n\t\tr := recover()\n\n\t\tif err != nil || r != nil {\n\t\t\tcmd.Process.Kill()\n\t\t}\n\n\t\tif r != nil {\n\t\t\tpanic(r)\n\t\t}\n\t}()\n\n\t// Create a context for when we kill\n\tc.doneCtx, c.ctxCancel = context.WithCancel(context.Background())\n\n\tc.clientWaitGroup.Add(1)\n\tgo func() {\n\t\t// ensure the context is cancelled when we're done\n\t\tdefer c.ctxCancel()\n\n\t\tdefer c.clientWaitGroup.Done()\n\n\t\t// get the cmd info early, since the process information will be removed\n\t\t// in Kill.\n\t\tpid := c.process.Pid\n\t\tpath := cmd.Path\n\n\t\t// Wait for the command to end.\n\t\terr := cmd.Wait()\n\n\t\tdebugMsgArgs := []interface{}{\n\t\t\t\"path\", path,\n\t\t\t\"pid\", pid,\n\t\t}\n\t\tif err != nil {\n\t\t\tdebugMsgArgs = append(debugMsgArgs,\n\t\t\t\t[]interface{}{\"error\", err.Error()}...)\n\t\t}\n\n\t\t// Log and make sure to flush the logs write away\n\t\tc.logger.Debug(\"plugin process exited\", debugMsgArgs...)\n\t\tos.Stderr.Sync()\n\n\t\t// Set that we exited, which takes a lock\n\t\tc.l.Lock()\n\t\tdefer c.l.Unlock()\n\t\tc.exited = true\n\t}()\n\n\t// Start goroutine that logs the stderr\n\tc.clientWaitGroup.Add(1)\n\t// logStderr calls Done()\n\tgo c.logStderr(cmdStderr)\n\n\t// Start a goroutine that is going to be reading the lines\n\t// out of stdout\n\tlinesCh := make(chan string)\n\tc.clientWaitGroup.Add(1)\n\tgo func() {\n\t\tdefer c.clientWaitGroup.Done()\n\t\tdefer close(linesCh)\n\n\t\tscanner := bufio.NewScanner(cmdStdout)\n\t\tfor scanner.Scan() {\n\t\t\tlinesCh <- scanner.Text()\n\t\t}\n\t}()\n\n\t// Make sure after we exit we read the lines from stdout forever\n\t// so they don't block since it is a pipe.\n\t// The scanner goroutine above will close this, but track it with a wait\n\t// group for completeness.\n\tc.clientWaitGroup.Add(1)\n\tdefer func() {\n\t\tgo func() {\n\t\t\tdefer c.clientWaitGroup.Done()\n\t\t\tfor range linesCh {\n\t\t\t}\n\t\t}()\n\t}()\n\n\t// Some channels for the next step\n\ttimeout := time.After(c.config.StartTimeout)\n\n\t// Start looking for the address\n\tc.logger.Debug(\"waiting for RPC address\", \"path\", cmd.Path)\n\tselect {\n\tcase <-timeout:\n\t\terr = errors.New(\"timeout while waiting for plugin to start\")\n\tcase <-c.doneCtx.Done():\n\t\terr = errors.New(\"plugin exited before we could connect\")\n\tcase line := <-linesCh:\n\t\t// Trim the line and split by \"|\" in order to get the parts of\n\t\t// the output.\n\t\tline = strings.TrimSpace(line)\n\t\tparts := strings.SplitN(line, \"|\", 6)\n\t\tif len(parts) < 4 {\n\t\t\terr = fmt.Errorf(\n\t\t\t\t\"Unrecognized remote plugin message: %s\\n\\n\"+\n\t\t\t\t\t\"This usually means that the plugin is either invalid or simply\\n\"+\n\t\t\t\t\t\"needs to be recompiled to support the latest protocol.\", line)\n\t\t\treturn\n\t\t}\n\n\t\t// Check the core protocol. Wrapped in a {} for scoping.\n\t\t{\n\t\t\tvar coreProtocol int64\n\t\t\tcoreProtocol, err = strconv.ParseInt(parts[0], 10, 0)\n\t\t\tif err != nil {\n\t\t\t\terr = fmt.Errorf(\"Error parsing core protocol version: %s\", err)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif int(coreProtocol) != CoreProtocolVersion {\n\t\t\t\terr = fmt.Errorf(\"Incompatible core API version with plugin. \"+\n\t\t\t\t\t\"Plugin version: %s, Core version: %d\\n\\n\"+\n\t\t\t\t\t\"To fix this, the plugin usually only needs to be recompiled.\\n\"+\n\t\t\t\t\t\"Please report this to the plugin author.\", parts[0], CoreProtocolVersion)\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\n\t\t// Test the API version\n\t\tversion, pluginSet, err := c.checkProtoVersion(parts[1])\n\t\tif err != nil {\n\t\t\treturn addr, err\n\t\t}\n\n\t\t// set the Plugins value to the compatible set, so the version\n\t\t// doesn't need to be passed through to the ClientProtocol\n\t\t// implementation.\n\t\tc.config.Plugins = pluginSet\n\t\tc.negotiatedVersion = version\n\t\tc.logger.Debug(\"using plugin\", \"version\", version)\n\n\t\tswitch parts[2] {\n\t\tcase \"tcp\":\n\t\t\taddr, err = net.ResolveTCPAddr(\"tcp\", parts[3])\n\t\tcase \"unix\":\n\t\t\taddr, err = net.ResolveUnixAddr(\"unix\", parts[3])\n\t\tdefault:\n\t\t\terr = fmt.Errorf(\"Unknown address type: %s\", parts[3])\n\t\t}\n\n\t\t// If we have a server type, then record that. We default to net/rpc\n\t\t// for backwards compatibility.\n\t\tc.protocol = ProtocolNetRPC\n\t\tif len(parts) >= 5 {\n\t\t\tc.protocol = Protocol(parts[4])\n\t\t}\n\n\t\tfound := false\n\t\tfor _, p := range c.config.AllowedProtocols {\n\t\t\tif p == c.protocol {\n\t\t\t\tfound = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif !found {\n\t\t\terr = fmt.Errorf(\"Unsupported plugin protocol %q. Supported: %v\",\n\t\t\t\tc.protocol, c.config.AllowedProtocols)\n\t\t\treturn addr, err\n\t\t}\n\n\t\t// See if we have a TLS certificate from the server.\n\t\t// Checking if the length is > 50 rules out catching the unused \"extra\"\n\t\t// data returned from some older implementations.\n\t\tif len(parts) >= 6 && len(parts[5]) > 50 {\n\t\t\terr := c.loadServerCert(parts[5])\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"error parsing server cert: %s\", err)\n\t\t\t}\n\t\t}\n\t}\n\n\tc.address = addr\n\treturn\n}\n\n// loadServerCert is used by AutoMTLS to read an x.509 cert returned by the\n// server, and load it as the RootCA for the client TLSConfig.\nfunc (c *Client) loadServerCert(cert string) error {\n\tcertPool := x509.NewCertPool()\n\n\tasn1, err := base64.RawStdEncoding.DecodeString(cert)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tx509Cert, err := x509.ParseCertificate([]byte(asn1))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tcertPool.AddCert(x509Cert)\n\n\tc.config.TLSConfig.RootCAs = certPool\n\treturn nil\n}\n\nfunc (c *Client) reattach() (net.Addr, error) {\n\t// Verify the process still exists. If not, then it is an error\n\tp, err := os.FindProcess(c.config.Reattach.Pid)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Attempt to connect to the addr since on Unix systems FindProcess\n\t// doesn't actually return an error if it can't find the process.\n\tconn, err := net.Dial(\n\t\tc.config.Reattach.Addr.Network(),\n\t\tc.config.Reattach.Addr.String())\n\tif err != nil {\n\t\tp.Kill()\n\t\treturn nil, ErrProcessNotFound\n\t}\n\tconn.Close()\n\n\t// Create a context for when we kill\n\tc.doneCtx, c.ctxCancel = context.WithCancel(context.Background())\n\n\tc.clientWaitGroup.Add(1)\n\t// Goroutine to mark exit status\n\tgo func(pid int) {\n\t\tdefer c.clientWaitGroup.Done()\n\n\t\t// ensure the context is cancelled when we're done\n\t\tdefer c.ctxCancel()\n\n\t\t// Wait for the process to die\n\t\tpidWait(pid)\n\n\t\t// Log so we can see it\n\t\tc.logger.Debug(\"reattached plugin process exited\")\n\n\t\t// Mark it\n\t\tc.l.Lock()\n\t\tdefer c.l.Unlock()\n\t\tc.exited = true\n\t}(p.Pid)\n\n\t// Set the address and process\n\tc.address = c.config.Reattach.Addr\n\tc.process = p\n\tc.protocol = c.config.Reattach.Protocol\n\tif c.protocol == \"\" {\n\t\t// Default the protocol to net/rpc for backwards compatibility\n\t\tc.protocol = ProtocolNetRPC\n\t}\n\n\treturn c.address, nil\n}\n\n// checkProtoVersion returns the negotiated version and PluginSet.\n// This returns an error if the server returned an incompatible protocol\n// version, or an invalid handshake response.\nfunc (c *Client) checkProtoVersion(protoVersion string) (int, PluginSet, error) {\n\tserverVersion, err := strconv.Atoi(protoVersion)\n\tif err != nil {\n\t\treturn 0, nil, fmt.Errorf(\"Error parsing protocol version %q: %s\", protoVersion, err)\n\t}\n\n\t// record these for the error message\n\tvar clientVersions []int\n\n\t// all versions, including the legacy ProtocolVersion have been added to\n\t// the versions set\n\tfor version, plugins := range c.config.VersionedPlugins {\n\t\tclientVersions = append(clientVersions, version)\n\n\t\tif serverVersion != version {\n\t\t\tcontinue\n\t\t}\n\t\treturn version, plugins, nil\n\t}\n\n\treturn 0, nil, fmt.Errorf(\"Incompatible API version with plugin. \"+\n\t\t\"Plugin version: %d, Client versions: %d\", serverVersion, clientVersions)\n}\n\n// ReattachConfig returns the information that must be provided to NewClient\n// to reattach to the plugin process that this client started. This is\n// useful for plugins that detach from their parent process.\n//\n// If this returns nil then the process hasn't been started yet. Please\n// call Start or Client before calling this.\nfunc (c *Client) ReattachConfig() *ReattachConfig {\n\tc.l.Lock()\n\tdefer c.l.Unlock()\n\n\tif c.address == nil {\n\t\treturn nil\n\t}\n\n\tif c.config.Cmd != nil && c.config.Cmd.Process == nil {\n\t\treturn nil\n\t}\n\n\t// If we connected via reattach, just return the information as-is\n\tif c.config.Reattach != nil {\n\t\treturn c.config.Reattach\n\t}\n\n\treturn &ReattachConfig{\n\t\tProtocol: c.protocol,\n\t\tAddr:     c.address,\n\t\tPid:      c.config.Cmd.Process.Pid,\n\t}\n}\n\n// Protocol returns the protocol of server on the remote end. This will\n// start the plugin process if it isn't already started. Errors from\n// starting the plugin are surpressed and ProtocolInvalid is returned. It\n// is recommended you call Start explicitly before calling Protocol to ensure\n// no errors occur.\nfunc (c *Client) Protocol() Protocol {\n\t_, err := c.Start()\n\tif err != nil {\n\t\treturn ProtocolInvalid\n\t}\n\n\treturn c.protocol\n}\n\nfunc netAddrDialer(addr net.Addr) func(string, time.Duration) (net.Conn, error) {\n\treturn func(_ string, _ time.Duration) (net.Conn, error) {\n\t\t// Connect to the client\n\t\tconn, err := net.Dial(addr.Network(), addr.String())\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif tcpConn, ok := conn.(*net.TCPConn); ok {\n\t\t\t// Make sure to set keep alive so that the connection doesn't die\n\t\t\ttcpConn.SetKeepAlive(true)\n\t\t}\n\n\t\treturn conn, nil\n\t}\n}\n\n// dialer is compatible with grpc.WithDialer and creates the connection\n// to the plugin.\nfunc (c *Client) dialer(_ string, timeout time.Duration) (net.Conn, error) {\n\tconn, err := netAddrDialer(c.address)(\"\", timeout)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// If we have a TLS config we wrap our connection. We only do this\n\t// for net/rpc since gRPC uses its own mechanism for TLS.\n\tif c.protocol == ProtocolNetRPC && c.config.TLSConfig != nil {\n\t\tconn = tls.Client(conn, c.config.TLSConfig)\n\t}\n\n\treturn conn, nil\n}\n\nvar stdErrBufferSize = 64 * 1024\n\nfunc (c *Client) logStderr(r io.Reader) {\n\tdefer c.clientWaitGroup.Done()\n\tl := c.logger.Named(filepath.Base(c.config.Cmd.Path))\n\n\treader := bufio.NewReaderSize(r, stdErrBufferSize)\n\t// continuation indicates the previous line was a prefix\n\tcontinuation := false\n\n\tfor {\n\t\tline, isPrefix, err := reader.ReadLine()\n\t\tswitch {\n\t\tcase err == io.EOF:\n\t\t\treturn\n\t\tcase err != nil:\n\t\t\tl.Error(\"reading plugin stderr\", \"error\", err)\n\t\t\treturn\n\t\t}\n\n\t\tc.config.Stderr.Write(line)\n\n\t\t// The line was longer than our max token size, so it's likely\n\t\t// incomplete and won't unmarshal.\n\t\tif isPrefix || continuation {\n\t\t\tl.Debug(string(line))\n\n\t\t\t// if we're finishing a continued line, add the newline back in\n\t\t\tif !isPrefix {\n\t\t\t\tc.config.Stderr.Write([]byte{'\\n'})\n\t\t\t}\n\n\t\t\tcontinuation = isPrefix\n\t\t\tcontinue\n\t\t}\n\n\t\tc.config.Stderr.Write([]byte{'\\n'})\n\n\t\tentry, err := parseJSON(line)\n\t\t// If output is not JSON format, print directly to Debug\n\t\tif err != nil {\n\t\t\t// Attempt to infer the desired log level from the commonly used\n\t\t\t// string prefixes\n\t\t\tswitch line := string(line); {\n\t\t\tcase strings.HasPrefix(line, \"[TRACE]\"):\n\t\t\t\tl.Trace(line)\n\t\t\tcase strings.HasPrefix(line, \"[DEBUG]\"):\n\t\t\t\tl.Debug(line)\n\t\t\tcase strings.HasPrefix(line, \"[INFO]\"):\n\t\t\t\tl.Info(line)\n\t\t\tcase strings.HasPrefix(line, \"[WARN]\"):\n\t\t\t\tl.Warn(line)\n\t\t\tcase strings.HasPrefix(line, \"[ERROR]\"):\n\t\t\t\tl.Error(line)\n\t\t\tdefault:\n\t\t\t\tl.Debug(line)\n\t\t\t}\n\t\t} else {\n\t\t\tout := flattenKVPairs(entry.KVPairs)\n\n\t\t\tout = append(out, \"timestamp\", entry.Timestamp.Format(hclog.TimeFormat))\n\t\t\tswitch hclog.LevelFromString(entry.Level) {\n\t\t\tcase hclog.Trace:\n\t\t\t\tl.Trace(entry.Message, out...)\n\t\t\tcase hclog.Debug:\n\t\t\t\tl.Debug(entry.Message, out...)\n\t\t\tcase hclog.Info:\n\t\t\t\tl.Info(entry.Message, out...)\n\t\t\tcase hclog.Warn:\n\t\t\t\tl.Warn(entry.Message, out...)\n\t\t\tcase hclog.Error:\n\t\t\t\tl.Error(entry.Message, out...)\n\t\t\tdefault:\n\t\t\t\t// if there was no log level, it's likely this is unexpected\n\t\t\t\t// json from something other than hclog, and we should output\n\t\t\t\t// it verbatim.\n\t\t\t\tl.Debug(string(line))\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-plugin/discover.go",
    "content": "package plugin\n\nimport (\n\t\"path/filepath\"\n)\n\n// Discover discovers plugins that are in a given directory.\n//\n// The directory doesn't need to be absolute. For example, \".\" will work fine.\n//\n// This currently assumes any file matching the glob is a plugin.\n// In the future this may be smarter about checking that a file is\n// executable and so on.\n//\n// TODO: test\nfunc Discover(glob, dir string) ([]string, error) {\n\tvar err error\n\n\t// Make the directory absolute if it isn't already\n\tif !filepath.IsAbs(dir) {\n\t\tdir, err = filepath.Abs(dir)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\treturn filepath.Glob(filepath.Join(dir, glob))\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-plugin/error.go",
    "content": "package plugin\n\n// This is a type that wraps error types so that they can be messaged\n// across RPC channels. Since \"error\" is an interface, we can't always\n// gob-encode the underlying structure. This is a valid error interface\n// implementer that we will push across.\ntype BasicError struct {\n\tMessage string\n}\n\n// NewBasicError is used to create a BasicError.\n//\n// err is allowed to be nil.\nfunc NewBasicError(err error) *BasicError {\n\tif err == nil {\n\t\treturn nil\n\t}\n\n\treturn &BasicError{err.Error()}\n}\n\nfunc (e *BasicError) Error() string {\n\treturn e.Message\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-plugin/grpc_broker.go",
    "content": "package plugin\n\nimport (\n\t\"context\"\n\t\"crypto/tls\"\n\t\"errors\"\n\t\"fmt\"\n\t\"log\"\n\t\"net\"\n\t\"sync\"\n\t\"sync/atomic\"\n\t\"time\"\n\n\t\"github.com/hashicorp/go-plugin/internal/plugin\"\n\n\t\"github.com/oklog/run\"\n\t\"google.golang.org/grpc\"\n\t\"google.golang.org/grpc/credentials\"\n)\n\n// streamer interface is used in the broker to send/receive connection\n// information.\ntype streamer interface {\n\tSend(*plugin.ConnInfo) error\n\tRecv() (*plugin.ConnInfo, error)\n\tClose()\n}\n\n// sendErr is used to pass errors back during a send.\ntype sendErr struct {\n\ti  *plugin.ConnInfo\n\tch chan error\n}\n\n// gRPCBrokerServer is used by the plugin to start a stream and to send\n// connection information to/from the plugin. Implements GRPCBrokerServer and\n// streamer interfaces.\ntype gRPCBrokerServer struct {\n\t// send is used to send connection info to the gRPC stream.\n\tsend chan *sendErr\n\n\t// recv is used to receive connection info from the gRPC stream.\n\trecv chan *plugin.ConnInfo\n\n\t// quit closes down the stream.\n\tquit chan struct{}\n\n\t// o is used to ensure we close the quit channel only once.\n\to sync.Once\n}\n\nfunc newGRPCBrokerServer() *gRPCBrokerServer {\n\treturn &gRPCBrokerServer{\n\t\tsend: make(chan *sendErr),\n\t\trecv: make(chan *plugin.ConnInfo),\n\t\tquit: make(chan struct{}),\n\t}\n}\n\n// StartStream implements the GRPCBrokerServer interface and will block until\n// the quit channel is closed or the context reports Done. The stream will pass\n// connection information to/from the client.\nfunc (s *gRPCBrokerServer) StartStream(stream plugin.GRPCBroker_StartStreamServer) error {\n\tdoneCh := stream.Context().Done()\n\tdefer s.Close()\n\n\t// Proccess send stream\n\tgo func() {\n\t\tfor {\n\t\t\tselect {\n\t\t\tcase <-doneCh:\n\t\t\t\treturn\n\t\t\tcase <-s.quit:\n\t\t\t\treturn\n\t\t\tcase se := <-s.send:\n\t\t\t\terr := stream.Send(se.i)\n\t\t\t\tse.ch <- err\n\t\t\t}\n\t\t}\n\t}()\n\n\t// Process receive stream\n\tfor {\n\t\ti, err := stream.Recv()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tselect {\n\t\tcase <-doneCh:\n\t\t\treturn nil\n\t\tcase <-s.quit:\n\t\t\treturn nil\n\t\tcase s.recv <- i:\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// Send is used by the GRPCBroker to pass connection information into the stream\n// to the client.\nfunc (s *gRPCBrokerServer) Send(i *plugin.ConnInfo) error {\n\tch := make(chan error)\n\tdefer close(ch)\n\n\tselect {\n\tcase <-s.quit:\n\t\treturn errors.New(\"broker closed\")\n\tcase s.send <- &sendErr{\n\t\ti:  i,\n\t\tch: ch,\n\t}:\n\t}\n\n\treturn <-ch\n}\n\n// Recv is used by the GRPCBroker to pass connection information that has been\n// sent from the client from the stream to the broker.\nfunc (s *gRPCBrokerServer) Recv() (*plugin.ConnInfo, error) {\n\tselect {\n\tcase <-s.quit:\n\t\treturn nil, errors.New(\"broker closed\")\n\tcase i := <-s.recv:\n\t\treturn i, nil\n\t}\n}\n\n// Close closes the quit channel, shutting down the stream.\nfunc (s *gRPCBrokerServer) Close() {\n\ts.o.Do(func() {\n\t\tclose(s.quit)\n\t})\n}\n\n// gRPCBrokerClientImpl is used by the client to start a stream and to send\n// connection information to/from the client. Implements GRPCBrokerClient and\n// streamer interfaces.\ntype gRPCBrokerClientImpl struct {\n\t// client is the underlying GRPC client used to make calls to the server.\n\tclient plugin.GRPCBrokerClient\n\n\t// send is used to send connection info to the gRPC stream.\n\tsend chan *sendErr\n\n\t// recv is used to receive connection info from the gRPC stream.\n\trecv chan *plugin.ConnInfo\n\n\t// quit closes down the stream.\n\tquit chan struct{}\n\n\t// o is used to ensure we close the quit channel only once.\n\to sync.Once\n}\n\nfunc newGRPCBrokerClient(conn *grpc.ClientConn) *gRPCBrokerClientImpl {\n\treturn &gRPCBrokerClientImpl{\n\t\tclient: plugin.NewGRPCBrokerClient(conn),\n\t\tsend:   make(chan *sendErr),\n\t\trecv:   make(chan *plugin.ConnInfo),\n\t\tquit:   make(chan struct{}),\n\t}\n}\n\n// StartStream implements the GRPCBrokerClient interface and will block until\n// the quit channel is closed or the context reports Done. The stream will pass\n// connection information to/from the plugin.\nfunc (s *gRPCBrokerClientImpl) StartStream() error {\n\tctx, cancelFunc := context.WithCancel(context.Background())\n\tdefer cancelFunc()\n\tdefer s.Close()\n\n\tstream, err := s.client.StartStream(ctx)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdoneCh := stream.Context().Done()\n\n\tgo func() {\n\t\tfor {\n\t\t\tselect {\n\t\t\tcase <-doneCh:\n\t\t\t\treturn\n\t\t\tcase <-s.quit:\n\t\t\t\treturn\n\t\t\tcase se := <-s.send:\n\t\t\t\terr := stream.Send(se.i)\n\t\t\t\tse.ch <- err\n\t\t\t}\n\t\t}\n\t}()\n\n\tfor {\n\t\ti, err := stream.Recv()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tselect {\n\t\tcase <-doneCh:\n\t\t\treturn nil\n\t\tcase <-s.quit:\n\t\t\treturn nil\n\t\tcase s.recv <- i:\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// Send is used by the GRPCBroker to pass connection information into the stream\n// to the plugin.\nfunc (s *gRPCBrokerClientImpl) Send(i *plugin.ConnInfo) error {\n\tch := make(chan error)\n\tdefer close(ch)\n\n\tselect {\n\tcase <-s.quit:\n\t\treturn errors.New(\"broker closed\")\n\tcase s.send <- &sendErr{\n\t\ti:  i,\n\t\tch: ch,\n\t}:\n\t}\n\n\treturn <-ch\n}\n\n// Recv is used by the GRPCBroker to pass connection information that has been\n// sent from the plugin to the broker.\nfunc (s *gRPCBrokerClientImpl) Recv() (*plugin.ConnInfo, error) {\n\tselect {\n\tcase <-s.quit:\n\t\treturn nil, errors.New(\"broker closed\")\n\tcase i := <-s.recv:\n\t\treturn i, nil\n\t}\n}\n\n// Close closes the quit channel, shutting down the stream.\nfunc (s *gRPCBrokerClientImpl) Close() {\n\ts.o.Do(func() {\n\t\tclose(s.quit)\n\t})\n}\n\n// GRPCBroker is responsible for brokering connections by unique ID.\n//\n// It is used by plugins to create multiple gRPC connections and data\n// streams between the plugin process and the host process.\n//\n// This allows a plugin to request a channel with a specific ID to connect to\n// or accept a connection from, and the broker handles the details of\n// holding these channels open while they're being negotiated.\n//\n// The Plugin interface has access to these for both Server and Client.\n// The broker can be used by either (optionally) to reserve and connect to\n// new streams. This is useful for complex args and return values,\n// or anything else you might need a data stream for.\ntype GRPCBroker struct {\n\tnextId   uint32\n\tstreamer streamer\n\tstreams  map[uint32]*gRPCBrokerPending\n\ttls      *tls.Config\n\tdoneCh   chan struct{}\n\to        sync.Once\n\n\tsync.Mutex\n}\n\ntype gRPCBrokerPending struct {\n\tch     chan *plugin.ConnInfo\n\tdoneCh chan struct{}\n}\n\nfunc newGRPCBroker(s streamer, tls *tls.Config) *GRPCBroker {\n\treturn &GRPCBroker{\n\t\tstreamer: s,\n\t\tstreams:  make(map[uint32]*gRPCBrokerPending),\n\t\ttls:      tls,\n\t\tdoneCh:   make(chan struct{}),\n\t}\n}\n\n// Accept accepts a connection by ID.\n//\n// This should not be called multiple times with the same ID at one time.\nfunc (b *GRPCBroker) Accept(id uint32) (net.Listener, error) {\n\tlistener, err := serverListener()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\terr = b.streamer.Send(&plugin.ConnInfo{\n\t\tServiceId: id,\n\t\tNetwork:   listener.Addr().Network(),\n\t\tAddress:   listener.Addr().String(),\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn listener, nil\n}\n\n// AcceptAndServe is used to accept a specific stream ID and immediately\n// serve a gRPC server on that stream ID. This is used to easily serve\n// complex arguments. Each AcceptAndServe call opens a new listener socket and\n// sends the connection info down the stream to the dialer. Since a new\n// connection is opened every call, these calls should be used sparingly.\n// Multiple gRPC server implementations can be registered to a single\n// AcceptAndServe call.\nfunc (b *GRPCBroker) AcceptAndServe(id uint32, s func([]grpc.ServerOption) *grpc.Server) {\n\tlistener, err := b.Accept(id)\n\tif err != nil {\n\t\tlog.Printf(\"[ERR] plugin: plugin acceptAndServe error: %s\", err)\n\t\treturn\n\t}\n\tdefer listener.Close()\n\n\tvar opts []grpc.ServerOption\n\tif b.tls != nil {\n\t\topts = []grpc.ServerOption{grpc.Creds(credentials.NewTLS(b.tls))}\n\t}\n\n\tserver := s(opts)\n\n\t// Here we use a run group to close this goroutine if the server is shutdown\n\t// or the broker is shutdown.\n\tvar g run.Group\n\t{\n\t\t// Serve on the listener, if shutting down call GracefulStop.\n\t\tg.Add(func() error {\n\t\t\treturn server.Serve(listener)\n\t\t}, func(err error) {\n\t\t\tserver.GracefulStop()\n\t\t})\n\t}\n\t{\n\t\t// block on the closeCh or the doneCh. If we are shutting down close the\n\t\t// closeCh.\n\t\tcloseCh := make(chan struct{})\n\t\tg.Add(func() error {\n\t\t\tselect {\n\t\t\tcase <-b.doneCh:\n\t\t\tcase <-closeCh:\n\t\t\t}\n\t\t\treturn nil\n\t\t}, func(err error) {\n\t\t\tclose(closeCh)\n\t\t})\n\t}\n\n\t// Block until we are done\n\tg.Run()\n}\n\n// Close closes the stream and all servers.\nfunc (b *GRPCBroker) Close() error {\n\tb.streamer.Close()\n\tb.o.Do(func() {\n\t\tclose(b.doneCh)\n\t})\n\treturn nil\n}\n\n// Dial opens a connection by ID.\nfunc (b *GRPCBroker) Dial(id uint32) (conn *grpc.ClientConn, err error) {\n\tvar c *plugin.ConnInfo\n\n\t// Open the stream\n\tp := b.getStream(id)\n\tselect {\n\tcase c = <-p.ch:\n\t\tclose(p.doneCh)\n\tcase <-time.After(5 * time.Second):\n\t\treturn nil, fmt.Errorf(\"timeout waiting for connection info\")\n\t}\n\n\tvar addr net.Addr\n\tswitch c.Network {\n\tcase \"tcp\":\n\t\taddr, err = net.ResolveTCPAddr(\"tcp\", c.Address)\n\tcase \"unix\":\n\t\taddr, err = net.ResolveUnixAddr(\"unix\", c.Address)\n\tdefault:\n\t\terr = fmt.Errorf(\"Unknown address type: %s\", c.Address)\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn dialGRPCConn(b.tls, netAddrDialer(addr))\n}\n\n// NextId returns a unique ID to use next.\n//\n// It is possible for very long-running plugin hosts to wrap this value,\n// though it would require a very large amount of calls. In practice\n// we've never seen it happen.\nfunc (m *GRPCBroker) NextId() uint32 {\n\treturn atomic.AddUint32(&m.nextId, 1)\n}\n\n// Run starts the brokering and should be executed in a goroutine, since it\n// blocks forever, or until the session closes.\n//\n// Uses of GRPCBroker never need to call this. It is called internally by\n// the plugin host/client.\nfunc (m *GRPCBroker) Run() {\n\tfor {\n\t\tstream, err := m.streamer.Recv()\n\t\tif err != nil {\n\t\t\t// Once we receive an error, just exit\n\t\t\tbreak\n\t\t}\n\n\t\t// Initialize the waiter\n\t\tp := m.getStream(stream.ServiceId)\n\t\tselect {\n\t\tcase p.ch <- stream:\n\t\tdefault:\n\t\t}\n\n\t\tgo m.timeoutWait(stream.ServiceId, p)\n\t}\n}\n\nfunc (m *GRPCBroker) getStream(id uint32) *gRPCBrokerPending {\n\tm.Lock()\n\tdefer m.Unlock()\n\n\tp, ok := m.streams[id]\n\tif ok {\n\t\treturn p\n\t}\n\n\tm.streams[id] = &gRPCBrokerPending{\n\t\tch:     make(chan *plugin.ConnInfo, 1),\n\t\tdoneCh: make(chan struct{}),\n\t}\n\treturn m.streams[id]\n}\n\nfunc (m *GRPCBroker) timeoutWait(id uint32, p *gRPCBrokerPending) {\n\t// Wait for the stream to either be picked up and connected, or\n\t// for a timeout.\n\tselect {\n\tcase <-p.doneCh:\n\tcase <-time.After(5 * time.Second):\n\t}\n\n\tm.Lock()\n\tdefer m.Unlock()\n\n\t// Delete the stream so no one else can grab it\n\tdelete(m.streams, id)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-plugin/grpc_client.go",
    "content": "package plugin\n\nimport (\n\t\"crypto/tls\"\n\t\"fmt\"\n\t\"net\"\n\t\"time\"\n\n\t\"github.com/hashicorp/go-plugin/internal/plugin\"\n\t\"golang.org/x/net/context\"\n\t\"google.golang.org/grpc\"\n\t\"google.golang.org/grpc/credentials\"\n\t\"google.golang.org/grpc/health/grpc_health_v1\"\n)\n\nfunc dialGRPCConn(tls *tls.Config, dialer func(string, time.Duration) (net.Conn, error)) (*grpc.ClientConn, error) {\n\t// Build dialing options.\n\topts := make([]grpc.DialOption, 0, 5)\n\n\t// We use a custom dialer so that we can connect over unix domain sockets.\n\topts = append(opts, grpc.WithDialer(dialer))\n\n\t// Fail right away\n\topts = append(opts, grpc.FailOnNonTempDialError(true))\n\n\t// If we have no TLS configuration set, we need to explicitly tell grpc\n\t// that we're connecting with an insecure connection.\n\tif tls == nil {\n\t\topts = append(opts, grpc.WithInsecure())\n\t} else {\n\t\topts = append(opts, grpc.WithTransportCredentials(\n\t\t\tcredentials.NewTLS(tls)))\n\t}\n\n\t// Connect. Note the first parameter is unused because we use a custom\n\t// dialer that has the state to see the address.\n\tconn, err := grpc.Dial(\"unused\", opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn conn, nil\n}\n\n// newGRPCClient creates a new GRPCClient. The Client argument is expected\n// to be successfully started already with a lock held.\nfunc newGRPCClient(doneCtx context.Context, c *Client) (*GRPCClient, error) {\n\tconn, err := dialGRPCConn(c.config.TLSConfig, c.dialer)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Start the broker.\n\tbrokerGRPCClient := newGRPCBrokerClient(conn)\n\tbroker := newGRPCBroker(brokerGRPCClient, c.config.TLSConfig)\n\tgo broker.Run()\n\tgo brokerGRPCClient.StartStream()\n\n\tcl := &GRPCClient{\n\t\tConn:       conn,\n\t\tPlugins:    c.config.Plugins,\n\t\tdoneCtx:    doneCtx,\n\t\tbroker:     broker,\n\t\tcontroller: plugin.NewGRPCControllerClient(conn),\n\t}\n\n\treturn cl, nil\n}\n\n// GRPCClient connects to a GRPCServer over gRPC to dispense plugin types.\ntype GRPCClient struct {\n\tConn    *grpc.ClientConn\n\tPlugins map[string]Plugin\n\n\tdoneCtx context.Context\n\tbroker  *GRPCBroker\n\n\tcontroller plugin.GRPCControllerClient\n}\n\n// ClientProtocol impl.\nfunc (c *GRPCClient) Close() error {\n\tc.broker.Close()\n\tc.controller.Shutdown(c.doneCtx, &plugin.Empty{})\n\treturn c.Conn.Close()\n}\n\n// ClientProtocol impl.\nfunc (c *GRPCClient) Dispense(name string) (interface{}, error) {\n\traw, ok := c.Plugins[name]\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"unknown plugin type: %s\", name)\n\t}\n\n\tp, ok := raw.(GRPCPlugin)\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"plugin %q doesn't support gRPC\", name)\n\t}\n\n\treturn p.GRPCClient(c.doneCtx, c.broker, c.Conn)\n}\n\n// ClientProtocol impl.\nfunc (c *GRPCClient) Ping() error {\n\tclient := grpc_health_v1.NewHealthClient(c.Conn)\n\t_, err := client.Check(context.Background(), &grpc_health_v1.HealthCheckRequest{\n\t\tService: GRPCServiceName,\n\t})\n\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-plugin/grpc_controller.go",
    "content": "package plugin\n\nimport (\n\t\"context\"\n\n\t\"github.com/hashicorp/go-plugin/internal/plugin\"\n)\n\n// GRPCControllerServer handles shutdown calls to terminate the server when the\n// plugin client is closed.\ntype grpcControllerServer struct {\n\tserver *GRPCServer\n}\n\n// Shutdown stops the grpc server. It first will attempt a graceful stop, then a\n// full stop on the server.\nfunc (s *grpcControllerServer) Shutdown(ctx context.Context, _ *plugin.Empty) (*plugin.Empty, error) {\n\tresp := &plugin.Empty{}\n\n\t// TODO: figure out why GracefullStop doesn't work.\n\ts.server.Stop()\n\treturn resp, nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-plugin/grpc_server.go",
    "content": "package plugin\n\nimport (\n\t\"bytes\"\n\t\"crypto/tls\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"net\"\n\n\thclog \"github.com/hashicorp/go-hclog\"\n\t\"github.com/hashicorp/go-plugin/internal/plugin\"\n\t\"google.golang.org/grpc\"\n\t\"google.golang.org/grpc/credentials\"\n\t\"google.golang.org/grpc/health\"\n\t\"google.golang.org/grpc/health/grpc_health_v1\"\n)\n\n// GRPCServiceName is the name of the service that the health check should\n// return as passing.\nconst GRPCServiceName = \"plugin\"\n\n// DefaultGRPCServer can be used with the \"GRPCServer\" field for Server\n// as a default factory method to create a gRPC server with no extra options.\nfunc DefaultGRPCServer(opts []grpc.ServerOption) *grpc.Server {\n\treturn grpc.NewServer(opts...)\n}\n\n// GRPCServer is a ServerType implementation that serves plugins over\n// gRPC. This allows plugins to easily be written for other languages.\n//\n// The GRPCServer outputs a custom configuration as a base64-encoded\n// JSON structure represented by the GRPCServerConfig config structure.\ntype GRPCServer struct {\n\t// Plugins are the list of plugins to serve.\n\tPlugins map[string]Plugin\n\n\t// Server is the actual server that will accept connections. This\n\t// will be used for plugin registration as well.\n\tServer func([]grpc.ServerOption) *grpc.Server\n\n\t// TLS should be the TLS configuration if available. If this is nil,\n\t// the connection will not have transport security.\n\tTLS *tls.Config\n\n\t// DoneCh is the channel that is closed when this server has exited.\n\tDoneCh chan struct{}\n\n\t// Stdout/StderrLis are the readers for stdout/stderr that will be copied\n\t// to the stdout/stderr connection that is output.\n\tStdout io.Reader\n\tStderr io.Reader\n\n\tconfig GRPCServerConfig\n\tserver *grpc.Server\n\tbroker *GRPCBroker\n\n\tlogger hclog.Logger\n}\n\n// ServerProtocol impl.\nfunc (s *GRPCServer) Init() error {\n\t// Create our server\n\tvar opts []grpc.ServerOption\n\tif s.TLS != nil {\n\t\topts = append(opts, grpc.Creds(credentials.NewTLS(s.TLS)))\n\t}\n\ts.server = s.Server(opts)\n\n\t// Register the health service\n\thealthCheck := health.NewServer()\n\thealthCheck.SetServingStatus(\n\t\tGRPCServiceName, grpc_health_v1.HealthCheckResponse_SERVING)\n\tgrpc_health_v1.RegisterHealthServer(s.server, healthCheck)\n\n\t// Register the broker service\n\tbrokerServer := newGRPCBrokerServer()\n\tplugin.RegisterGRPCBrokerServer(s.server, brokerServer)\n\ts.broker = newGRPCBroker(brokerServer, s.TLS)\n\tgo s.broker.Run()\n\n\t// Register the controller\n\tcontrollerServer := &grpcControllerServer{\n\t\tserver: s,\n\t}\n\tplugin.RegisterGRPCControllerServer(s.server, controllerServer)\n\n\t// Register all our plugins onto the gRPC server.\n\tfor k, raw := range s.Plugins {\n\t\tp, ok := raw.(GRPCPlugin)\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"%q is not a GRPC-compatible plugin\", k)\n\t\t}\n\n\t\tif err := p.GRPCServer(s.broker, s.server); err != nil {\n\t\t\treturn fmt.Errorf(\"error registering %q: %s\", k, err)\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// Stop calls Stop on the underlying grpc.Server\nfunc (s *GRPCServer) Stop() {\n\ts.server.Stop()\n}\n\n// GracefulStop calls GracefulStop on the underlying grpc.Server\nfunc (s *GRPCServer) GracefulStop() {\n\ts.server.GracefulStop()\n}\n\n// Config is the GRPCServerConfig encoded as JSON then base64.\nfunc (s *GRPCServer) Config() string {\n\t// Create a buffer that will contain our final contents\n\tvar buf bytes.Buffer\n\n\t// Wrap the base64 encoding with JSON encoding.\n\tif err := json.NewEncoder(&buf).Encode(s.config); err != nil {\n\t\t// We panic since ths shouldn't happen under any scenario. We\n\t\t// carefully control the structure being encoded here and it should\n\t\t// always be successful.\n\t\tpanic(err)\n\t}\n\n\treturn buf.String()\n}\n\nfunc (s *GRPCServer) Serve(lis net.Listener) {\n\tdefer close(s.DoneCh)\n\terr := s.server.Serve(lis)\n\tif err != nil {\n\t\ts.logger.Error(\"grpc server\", \"error\", err)\n\t}\n}\n\n// GRPCServerConfig is the extra configuration passed along for consumers\n// to facilitate using GRPC plugins.\ntype GRPCServerConfig struct {\n\tStdoutAddr string `json:\"stdout_addr\"`\n\tStderrAddr string `json:\"stderr_addr\"`\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-plugin/internal/plugin/gen.go",
    "content": "//go:generate protoc -I ./ ./grpc_broker.proto ./grpc_controller.proto --go_out=plugins=grpc:.\n\npackage plugin\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-plugin/internal/plugin/grpc_broker.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// source: grpc_broker.proto\n\npackage plugin\n\nimport (\n\tfmt \"fmt\"\n\tproto \"github.com/golang/protobuf/proto\"\n\tcontext \"golang.org/x/net/context\"\n\tgrpc \"google.golang.org/grpc\"\n\tmath \"math\"\n)\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar _ = proto.Marshal\nvar _ = fmt.Errorf\nvar _ = math.Inf\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package\n\ntype ConnInfo struct {\n\tServiceId            uint32   `protobuf:\"varint,1,opt,name=service_id,json=serviceId,proto3\" json:\"service_id,omitempty\"`\n\tNetwork              string   `protobuf:\"bytes,2,opt,name=network,proto3\" json:\"network,omitempty\"`\n\tAddress              string   `protobuf:\"bytes,3,opt,name=address,proto3\" json:\"address,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *ConnInfo) Reset()         { *m = ConnInfo{} }\nfunc (m *ConnInfo) String() string { return proto.CompactTextString(m) }\nfunc (*ConnInfo) ProtoMessage()    {}\nfunc (*ConnInfo) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_802e9beed3ec3b28, []int{0}\n}\n\nfunc (m *ConnInfo) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_ConnInfo.Unmarshal(m, b)\n}\nfunc (m *ConnInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_ConnInfo.Marshal(b, m, deterministic)\n}\nfunc (m *ConnInfo) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_ConnInfo.Merge(m, src)\n}\nfunc (m *ConnInfo) XXX_Size() int {\n\treturn xxx_messageInfo_ConnInfo.Size(m)\n}\nfunc (m *ConnInfo) XXX_DiscardUnknown() {\n\txxx_messageInfo_ConnInfo.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_ConnInfo proto.InternalMessageInfo\n\nfunc (m *ConnInfo) GetServiceId() uint32 {\n\tif m != nil {\n\t\treturn m.ServiceId\n\t}\n\treturn 0\n}\n\nfunc (m *ConnInfo) GetNetwork() string {\n\tif m != nil {\n\t\treturn m.Network\n\t}\n\treturn \"\"\n}\n\nfunc (m *ConnInfo) GetAddress() string {\n\tif m != nil {\n\t\treturn m.Address\n\t}\n\treturn \"\"\n}\n\nfunc init() {\n\tproto.RegisterType((*ConnInfo)(nil), \"plugin.ConnInfo\")\n}\n\nfunc init() { proto.RegisterFile(\"grpc_broker.proto\", fileDescriptor_802e9beed3ec3b28) }\n\nvar fileDescriptor_802e9beed3ec3b28 = []byte{\n\t// 175 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0x4c, 0x2f, 0x2a, 0x48,\n\t0x8e, 0x4f, 0x2a, 0xca, 0xcf, 0x4e, 0x2d, 0xd2, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x62, 0x2b,\n\t0xc8, 0x29, 0x4d, 0xcf, 0xcc, 0x53, 0x8a, 0xe5, 0xe2, 0x70, 0xce, 0xcf, 0xcb, 0xf3, 0xcc, 0x4b,\n\t0xcb, 0x17, 0x92, 0xe5, 0xe2, 0x2a, 0x4e, 0x2d, 0x2a, 0xcb, 0x4c, 0x4e, 0x8d, 0xcf, 0x4c, 0x91,\n\t0x60, 0x54, 0x60, 0xd4, 0xe0, 0x0d, 0xe2, 0x84, 0x8a, 0x78, 0xa6, 0x08, 0x49, 0x70, 0xb1, 0xe7,\n\t0xa5, 0x96, 0x94, 0xe7, 0x17, 0x65, 0x4b, 0x30, 0x29, 0x30, 0x6a, 0x70, 0x06, 0xc1, 0xb8, 0x20,\n\t0x99, 0xc4, 0x94, 0x94, 0xa2, 0xd4, 0xe2, 0x62, 0x09, 0x66, 0x88, 0x0c, 0x94, 0x6b, 0xe4, 0xcc,\n\t0xc5, 0xe5, 0x1e, 0x14, 0xe0, 0xec, 0x04, 0xb6, 0x5a, 0xc8, 0x94, 0x8b, 0x3b, 0xb8, 0x24, 0xb1,\n\t0xa8, 0x24, 0xb8, 0xa4, 0x28, 0x35, 0x31, 0x57, 0x48, 0x40, 0x0f, 0xe2, 0x08, 0x3d, 0x98, 0x0b,\n\t0xa4, 0x30, 0x44, 0x34, 0x18, 0x0d, 0x18, 0x9d, 0x38, 0xa2, 0xa0, 0xae, 0x4d, 0x62, 0x03, 0x3b,\n\t0xde, 0x18, 0x10, 0x00, 0x00, 0xff, 0xff, 0x10, 0x15, 0x39, 0x47, 0xd1, 0x00, 0x00, 0x00,\n}\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar _ context.Context\nvar _ grpc.ClientConn\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the grpc package it is being compiled against.\nconst _ = grpc.SupportPackageIsVersion4\n\n// GRPCBrokerClient is the client API for GRPCBroker service.\n//\n// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.\ntype GRPCBrokerClient interface {\n\tStartStream(ctx context.Context, opts ...grpc.CallOption) (GRPCBroker_StartStreamClient, error)\n}\n\ntype gRPCBrokerClient struct {\n\tcc *grpc.ClientConn\n}\n\nfunc NewGRPCBrokerClient(cc *grpc.ClientConn) GRPCBrokerClient {\n\treturn &gRPCBrokerClient{cc}\n}\n\nfunc (c *gRPCBrokerClient) StartStream(ctx context.Context, opts ...grpc.CallOption) (GRPCBroker_StartStreamClient, error) {\n\tstream, err := c.cc.NewStream(ctx, &_GRPCBroker_serviceDesc.Streams[0], \"/plugin.GRPCBroker/StartStream\", opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tx := &gRPCBrokerStartStreamClient{stream}\n\treturn x, nil\n}\n\ntype GRPCBroker_StartStreamClient interface {\n\tSend(*ConnInfo) error\n\tRecv() (*ConnInfo, error)\n\tgrpc.ClientStream\n}\n\ntype gRPCBrokerStartStreamClient struct {\n\tgrpc.ClientStream\n}\n\nfunc (x *gRPCBrokerStartStreamClient) Send(m *ConnInfo) error {\n\treturn x.ClientStream.SendMsg(m)\n}\n\nfunc (x *gRPCBrokerStartStreamClient) Recv() (*ConnInfo, error) {\n\tm := new(ConnInfo)\n\tif err := x.ClientStream.RecvMsg(m); err != nil {\n\t\treturn nil, err\n\t}\n\treturn m, nil\n}\n\n// GRPCBrokerServer is the server API for GRPCBroker service.\ntype GRPCBrokerServer interface {\n\tStartStream(GRPCBroker_StartStreamServer) error\n}\n\nfunc RegisterGRPCBrokerServer(s *grpc.Server, srv GRPCBrokerServer) {\n\ts.RegisterService(&_GRPCBroker_serviceDesc, srv)\n}\n\nfunc _GRPCBroker_StartStream_Handler(srv interface{}, stream grpc.ServerStream) error {\n\treturn srv.(GRPCBrokerServer).StartStream(&gRPCBrokerStartStreamServer{stream})\n}\n\ntype GRPCBroker_StartStreamServer interface {\n\tSend(*ConnInfo) error\n\tRecv() (*ConnInfo, error)\n\tgrpc.ServerStream\n}\n\ntype gRPCBrokerStartStreamServer struct {\n\tgrpc.ServerStream\n}\n\nfunc (x *gRPCBrokerStartStreamServer) Send(m *ConnInfo) error {\n\treturn x.ServerStream.SendMsg(m)\n}\n\nfunc (x *gRPCBrokerStartStreamServer) Recv() (*ConnInfo, error) {\n\tm := new(ConnInfo)\n\tif err := x.ServerStream.RecvMsg(m); err != nil {\n\t\treturn nil, err\n\t}\n\treturn m, nil\n}\n\nvar _GRPCBroker_serviceDesc = grpc.ServiceDesc{\n\tServiceName: \"plugin.GRPCBroker\",\n\tHandlerType: (*GRPCBrokerServer)(nil),\n\tMethods:     []grpc.MethodDesc{},\n\tStreams: []grpc.StreamDesc{\n\t\t{\n\t\t\tStreamName:    \"StartStream\",\n\t\t\tHandler:       _GRPCBroker_StartStream_Handler,\n\t\t\tServerStreams: true,\n\t\t\tClientStreams: true,\n\t\t},\n\t},\n\tMetadata: \"grpc_broker.proto\",\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-plugin/internal/plugin/grpc_controller.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// source: grpc_controller.proto\n\npackage plugin\n\nimport (\n\tfmt \"fmt\"\n\tproto \"github.com/golang/protobuf/proto\"\n\tcontext \"golang.org/x/net/context\"\n\tgrpc \"google.golang.org/grpc\"\n\tmath \"math\"\n)\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar _ = proto.Marshal\nvar _ = fmt.Errorf\nvar _ = math.Inf\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package\n\ntype Empty struct {\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *Empty) Reset()         { *m = Empty{} }\nfunc (m *Empty) String() string { return proto.CompactTextString(m) }\nfunc (*Empty) ProtoMessage()    {}\nfunc (*Empty) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_23c2c7e42feab570, []int{0}\n}\n\nfunc (m *Empty) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_Empty.Unmarshal(m, b)\n}\nfunc (m *Empty) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_Empty.Marshal(b, m, deterministic)\n}\nfunc (m *Empty) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Empty.Merge(m, src)\n}\nfunc (m *Empty) XXX_Size() int {\n\treturn xxx_messageInfo_Empty.Size(m)\n}\nfunc (m *Empty) XXX_DiscardUnknown() {\n\txxx_messageInfo_Empty.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Empty proto.InternalMessageInfo\n\nfunc init() {\n\tproto.RegisterType((*Empty)(nil), \"plugin.Empty\")\n}\n\nfunc init() { proto.RegisterFile(\"grpc_controller.proto\", fileDescriptor_23c2c7e42feab570) }\n\nvar fileDescriptor_23c2c7e42feab570 = []byte{\n\t// 108 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0x4d, 0x2f, 0x2a, 0x48,\n\t0x8e, 0x4f, 0xce, 0xcf, 0x2b, 0x29, 0xca, 0xcf, 0xc9, 0x49, 0x2d, 0xd2, 0x2b, 0x28, 0xca, 0x2f,\n\t0xc9, 0x17, 0x62, 0x2b, 0xc8, 0x29, 0x4d, 0xcf, 0xcc, 0x53, 0x62, 0xe7, 0x62, 0x75, 0xcd, 0x2d,\n\t0x28, 0xa9, 0x34, 0xb2, 0xe2, 0xe2, 0x73, 0x0f, 0x0a, 0x70, 0x76, 0x86, 0x2b, 0x14, 0xd2, 0xe0,\n\t0xe2, 0x08, 0xce, 0x28, 0x2d, 0x49, 0xc9, 0x2f, 0xcf, 0x13, 0xe2, 0xd5, 0x83, 0xa8, 0xd7, 0x03,\n\t0x2b, 0x96, 0x42, 0xe5, 0x3a, 0x71, 0x44, 0x41, 0x8d, 0x4b, 0x62, 0x03, 0x9b, 0x6e, 0x0c, 0x08,\n\t0x00, 0x00, 0xff, 0xff, 0xab, 0x7c, 0x27, 0xe5, 0x76, 0x00, 0x00, 0x00,\n}\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar _ context.Context\nvar _ grpc.ClientConn\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the grpc package it is being compiled against.\nconst _ = grpc.SupportPackageIsVersion4\n\n// GRPCControllerClient is the client API for GRPCController service.\n//\n// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.\ntype GRPCControllerClient interface {\n\tShutdown(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*Empty, error)\n}\n\ntype gRPCControllerClient struct {\n\tcc *grpc.ClientConn\n}\n\nfunc NewGRPCControllerClient(cc *grpc.ClientConn) GRPCControllerClient {\n\treturn &gRPCControllerClient{cc}\n}\n\nfunc (c *gRPCControllerClient) Shutdown(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*Empty, error) {\n\tout := new(Empty)\n\terr := c.cc.Invoke(ctx, \"/plugin.GRPCController/Shutdown\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\n// GRPCControllerServer is the server API for GRPCController service.\ntype GRPCControllerServer interface {\n\tShutdown(context.Context, *Empty) (*Empty, error)\n}\n\nfunc RegisterGRPCControllerServer(s *grpc.Server, srv GRPCControllerServer) {\n\ts.RegisterService(&_GRPCController_serviceDesc, srv)\n}\n\nfunc _GRPCController_Shutdown_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(Empty)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(GRPCControllerServer).Shutdown(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/plugin.GRPCController/Shutdown\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(GRPCControllerServer).Shutdown(ctx, req.(*Empty))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nvar _GRPCController_serviceDesc = grpc.ServiceDesc{\n\tServiceName: \"plugin.GRPCController\",\n\tHandlerType: (*GRPCControllerServer)(nil),\n\tMethods: []grpc.MethodDesc{\n\t\t{\n\t\t\tMethodName: \"Shutdown\",\n\t\t\tHandler:    _GRPCController_Shutdown_Handler,\n\t\t},\n\t},\n\tStreams:  []grpc.StreamDesc{},\n\tMetadata: \"grpc_controller.proto\",\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-plugin/log_entry.go",
    "content": "package plugin\n\nimport (\n\t\"encoding/json\"\n\t\"time\"\n)\n\n// logEntry is the JSON payload that gets sent to Stderr from the plugin to the host\ntype logEntry struct {\n\tMessage   string        `json:\"@message\"`\n\tLevel     string        `json:\"@level\"`\n\tTimestamp time.Time     `json:\"timestamp\"`\n\tKVPairs   []*logEntryKV `json:\"kv_pairs\"`\n}\n\n// logEntryKV is a key value pair within the Output payload\ntype logEntryKV struct {\n\tKey   string      `json:\"key\"`\n\tValue interface{} `json:\"value\"`\n}\n\n// flattenKVPairs is used to flatten KVPair slice into []interface{}\n// for hclog consumption.\nfunc flattenKVPairs(kvs []*logEntryKV) []interface{} {\n\tvar result []interface{}\n\tfor _, kv := range kvs {\n\t\tresult = append(result, kv.Key)\n\t\tresult = append(result, kv.Value)\n\t}\n\n\treturn result\n}\n\n// parseJSON handles parsing JSON output\nfunc parseJSON(input []byte) (*logEntry, error) {\n\tvar raw map[string]interface{}\n\tentry := &logEntry{}\n\n\terr := json.Unmarshal(input, &raw)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Parse hclog-specific objects\n\tif v, ok := raw[\"@message\"]; ok {\n\t\tentry.Message = v.(string)\n\t\tdelete(raw, \"@message\")\n\t}\n\n\tif v, ok := raw[\"@level\"]; ok {\n\t\tentry.Level = v.(string)\n\t\tdelete(raw, \"@level\")\n\t}\n\n\tif v, ok := raw[\"@timestamp\"]; ok {\n\t\tt, err := time.Parse(\"2006-01-02T15:04:05.000000Z07:00\", v.(string))\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tentry.Timestamp = t\n\t\tdelete(raw, \"@timestamp\")\n\t}\n\n\t// Parse dynamic KV args from the hclog payload.\n\tfor k, v := range raw {\n\t\tentry.KVPairs = append(entry.KVPairs, &logEntryKV{\n\t\t\tKey:   k,\n\t\t\tValue: v,\n\t\t})\n\t}\n\n\treturn entry, nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-plugin/mtls.go",
    "content": "package plugin\n\nimport (\n\t\"bytes\"\n\t\"crypto/ecdsa\"\n\t\"crypto/elliptic\"\n\t\"crypto/rand\"\n\t\"crypto/x509\"\n\t\"crypto/x509/pkix\"\n\t\"encoding/pem\"\n\t\"math/big\"\n\t\"time\"\n)\n\n// generateCert generates a temporary certificate for plugin authentication. The\n// certificate and private key are returns in PEM format.\nfunc generateCert() (cert []byte, privateKey []byte, err error) {\n\tkey, err := ecdsa.GenerateKey(elliptic.P521(), rand.Reader)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\tserialNumberLimit := new(big.Int).Lsh(big.NewInt(1), 128)\n\tsn, err := rand.Int(rand.Reader, serialNumberLimit)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\thost := \"localhost\"\n\n\ttemplate := &x509.Certificate{\n\t\tSubject: pkix.Name{\n\t\t\tCommonName:   host,\n\t\t\tOrganization: []string{\"HashiCorp\"},\n\t\t},\n\t\tDNSNames: []string{host},\n\t\tExtKeyUsage: []x509.ExtKeyUsage{\n\t\t\tx509.ExtKeyUsageClientAuth,\n\t\t\tx509.ExtKeyUsageServerAuth,\n\t\t},\n\t\tKeyUsage:              x509.KeyUsageDigitalSignature | x509.KeyUsageKeyEncipherment | x509.KeyUsageKeyAgreement | x509.KeyUsageCertSign,\n\t\tBasicConstraintsValid: true,\n\t\tSerialNumber:          sn,\n\t\tNotBefore:             time.Now().Add(-30 * time.Second),\n\t\tNotAfter:              time.Now().Add(262980 * time.Hour),\n\t\tIsCA:                  true,\n\t}\n\n\tder, err := x509.CreateCertificate(rand.Reader, template, template, key.Public(), key)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\tvar certOut bytes.Buffer\n\tif err := pem.Encode(&certOut, &pem.Block{Type: \"CERTIFICATE\", Bytes: der}); err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\tkeyBytes, err := x509.MarshalECPrivateKey(key)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\tvar keyOut bytes.Buffer\n\tif err := pem.Encode(&keyOut, &pem.Block{Type: \"EC PRIVATE KEY\", Bytes: keyBytes}); err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\tcert = certOut.Bytes()\n\tprivateKey = keyOut.Bytes()\n\n\treturn cert, privateKey, nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-plugin/mux_broker.go",
    "content": "package plugin\n\nimport (\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"log\"\n\t\"net\"\n\t\"sync\"\n\t\"sync/atomic\"\n\t\"time\"\n\n\t\"github.com/hashicorp/yamux\"\n)\n\n// MuxBroker is responsible for brokering multiplexed connections by unique ID.\n//\n// It is used by plugins to multiplex multiple RPC connections and data\n// streams on top of a single connection between the plugin process and the\n// host process.\n//\n// This allows a plugin to request a channel with a specific ID to connect to\n// or accept a connection from, and the broker handles the details of\n// holding these channels open while they're being negotiated.\n//\n// The Plugin interface has access to these for both Server and Client.\n// The broker can be used by either (optionally) to reserve and connect to\n// new multiplexed streams. This is useful for complex args and return values,\n// or anything else you might need a data stream for.\ntype MuxBroker struct {\n\tnextId  uint32\n\tsession *yamux.Session\n\tstreams map[uint32]*muxBrokerPending\n\n\tsync.Mutex\n}\n\ntype muxBrokerPending struct {\n\tch     chan net.Conn\n\tdoneCh chan struct{}\n}\n\nfunc newMuxBroker(s *yamux.Session) *MuxBroker {\n\treturn &MuxBroker{\n\t\tsession: s,\n\t\tstreams: make(map[uint32]*muxBrokerPending),\n\t}\n}\n\n// Accept accepts a connection by ID.\n//\n// This should not be called multiple times with the same ID at one time.\nfunc (m *MuxBroker) Accept(id uint32) (net.Conn, error) {\n\tvar c net.Conn\n\tp := m.getStream(id)\n\tselect {\n\tcase c = <-p.ch:\n\t\tclose(p.doneCh)\n\tcase <-time.After(5 * time.Second):\n\t\tm.Lock()\n\t\tdefer m.Unlock()\n\t\tdelete(m.streams, id)\n\n\t\treturn nil, fmt.Errorf(\"timeout waiting for accept\")\n\t}\n\n\t// Ack our connection\n\tif err := binary.Write(c, binary.LittleEndian, id); err != nil {\n\t\tc.Close()\n\t\treturn nil, err\n\t}\n\n\treturn c, nil\n}\n\n// AcceptAndServe is used to accept a specific stream ID and immediately\n// serve an RPC server on that stream ID. This is used to easily serve\n// complex arguments.\n//\n// The served interface is always registered to the \"Plugin\" name.\nfunc (m *MuxBroker) AcceptAndServe(id uint32, v interface{}) {\n\tconn, err := m.Accept(id)\n\tif err != nil {\n\t\tlog.Printf(\"[ERR] plugin: plugin acceptAndServe error: %s\", err)\n\t\treturn\n\t}\n\n\tserve(conn, \"Plugin\", v)\n}\n\n// Close closes the connection and all sub-connections.\nfunc (m *MuxBroker) Close() error {\n\treturn m.session.Close()\n}\n\n// Dial opens a connection by ID.\nfunc (m *MuxBroker) Dial(id uint32) (net.Conn, error) {\n\t// Open the stream\n\tstream, err := m.session.OpenStream()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Write the stream ID onto the wire.\n\tif err := binary.Write(stream, binary.LittleEndian, id); err != nil {\n\t\tstream.Close()\n\t\treturn nil, err\n\t}\n\n\t// Read the ack that we connected. Then we're off!\n\tvar ack uint32\n\tif err := binary.Read(stream, binary.LittleEndian, &ack); err != nil {\n\t\tstream.Close()\n\t\treturn nil, err\n\t}\n\tif ack != id {\n\t\tstream.Close()\n\t\treturn nil, fmt.Errorf(\"bad ack: %d (expected %d)\", ack, id)\n\t}\n\n\treturn stream, nil\n}\n\n// NextId returns a unique ID to use next.\n//\n// It is possible for very long-running plugin hosts to wrap this value,\n// though it would require a very large amount of RPC calls. In practice\n// we've never seen it happen.\nfunc (m *MuxBroker) NextId() uint32 {\n\treturn atomic.AddUint32(&m.nextId, 1)\n}\n\n// Run starts the brokering and should be executed in a goroutine, since it\n// blocks forever, or until the session closes.\n//\n// Uses of MuxBroker never need to call this. It is called internally by\n// the plugin host/client.\nfunc (m *MuxBroker) Run() {\n\tfor {\n\t\tstream, err := m.session.AcceptStream()\n\t\tif err != nil {\n\t\t\t// Once we receive an error, just exit\n\t\t\tbreak\n\t\t}\n\n\t\t// Read the stream ID from the stream\n\t\tvar id uint32\n\t\tif err := binary.Read(stream, binary.LittleEndian, &id); err != nil {\n\t\t\tstream.Close()\n\t\t\tcontinue\n\t\t}\n\n\t\t// Initialize the waiter\n\t\tp := m.getStream(id)\n\t\tselect {\n\t\tcase p.ch <- stream:\n\t\tdefault:\n\t\t}\n\n\t\t// Wait for a timeout\n\t\tgo m.timeoutWait(id, p)\n\t}\n}\n\nfunc (m *MuxBroker) getStream(id uint32) *muxBrokerPending {\n\tm.Lock()\n\tdefer m.Unlock()\n\n\tp, ok := m.streams[id]\n\tif ok {\n\t\treturn p\n\t}\n\n\tm.streams[id] = &muxBrokerPending{\n\t\tch:     make(chan net.Conn, 1),\n\t\tdoneCh: make(chan struct{}),\n\t}\n\treturn m.streams[id]\n}\n\nfunc (m *MuxBroker) timeoutWait(id uint32, p *muxBrokerPending) {\n\t// Wait for the stream to either be picked up and connected, or\n\t// for a timeout.\n\ttimeout := false\n\tselect {\n\tcase <-p.doneCh:\n\tcase <-time.After(5 * time.Second):\n\t\ttimeout = true\n\t}\n\n\tm.Lock()\n\tdefer m.Unlock()\n\n\t// Delete the stream so no one else can grab it\n\tdelete(m.streams, id)\n\n\t// If we timed out, then check if we have a channel in the buffer,\n\t// and if so, close it.\n\tif timeout {\n\t\tselect {\n\t\tcase s := <-p.ch:\n\t\t\ts.Close()\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-plugin/plugin.go",
    "content": "// The plugin package exposes functions and helpers for communicating to\n// plugins which are implemented as standalone binary applications.\n//\n// plugin.Client fully manages the lifecycle of executing the application,\n// connecting to it, and returning the RPC client for dispensing plugins.\n//\n// plugin.Serve fully manages listeners to expose an RPC server from a binary\n// that plugin.Client can connect to.\npackage plugin\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"net/rpc\"\n\n\t\"google.golang.org/grpc\"\n)\n\n// Plugin is the interface that is implemented to serve/connect to an\n// inteface implementation.\ntype Plugin interface {\n\t// Server should return the RPC server compatible struct to serve\n\t// the methods that the Client calls over net/rpc.\n\tServer(*MuxBroker) (interface{}, error)\n\n\t// Client returns an interface implementation for the plugin you're\n\t// serving that communicates to the server end of the plugin.\n\tClient(*MuxBroker, *rpc.Client) (interface{}, error)\n}\n\n// GRPCPlugin is the interface that is implemented to serve/connect to\n// a plugin over gRPC.\ntype GRPCPlugin interface {\n\t// GRPCServer should register this plugin for serving with the\n\t// given GRPCServer. Unlike Plugin.Server, this is only called once\n\t// since gRPC plugins serve singletons.\n\tGRPCServer(*GRPCBroker, *grpc.Server) error\n\n\t// GRPCClient should return the interface implementation for the plugin\n\t// you're serving via gRPC. The provided context will be canceled by\n\t// go-plugin in the event of the plugin process exiting.\n\tGRPCClient(context.Context, *GRPCBroker, *grpc.ClientConn) (interface{}, error)\n}\n\n// NetRPCUnsupportedPlugin implements Plugin but returns errors for the\n// Server and Client functions. This will effectively disable support for\n// net/rpc based plugins.\n//\n// This struct can be embedded in your struct.\ntype NetRPCUnsupportedPlugin struct{}\n\nfunc (p NetRPCUnsupportedPlugin) Server(*MuxBroker) (interface{}, error) {\n\treturn nil, errors.New(\"net/rpc plugin protocol not supported\")\n}\n\nfunc (p NetRPCUnsupportedPlugin) Client(*MuxBroker, *rpc.Client) (interface{}, error) {\n\treturn nil, errors.New(\"net/rpc plugin protocol not supported\")\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-plugin/process.go",
    "content": "package plugin\n\nimport (\n\t\"time\"\n)\n\n// pidAlive checks whether a pid is alive.\nfunc pidAlive(pid int) bool {\n\treturn _pidAlive(pid)\n}\n\n// pidWait blocks for a process to exit.\nfunc pidWait(pid int) error {\n\tticker := time.NewTicker(1 * time.Second)\n\tdefer ticker.Stop()\n\n\tfor range ticker.C {\n\t\tif !pidAlive(pid) {\n\t\t\tbreak\n\t\t}\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-plugin/process_posix.go",
    "content": "// +build !windows\n\npackage plugin\n\nimport (\n\t\"os\"\n\t\"syscall\"\n)\n\n// _pidAlive tests whether a process is alive or not by sending it Signal 0,\n// since Go otherwise has no way to test this.\nfunc _pidAlive(pid int) bool {\n\tproc, err := os.FindProcess(pid)\n\tif err == nil {\n\t\terr = proc.Signal(syscall.Signal(0))\n\t}\n\n\treturn err == nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-plugin/process_windows.go",
    "content": "package plugin\n\nimport (\n\t\"syscall\"\n)\n\nconst (\n\t// Weird name but matches the MSDN docs\n\texit_STILL_ACTIVE = 259\n\n\tprocessDesiredAccess = syscall.STANDARD_RIGHTS_READ |\n\t\tsyscall.PROCESS_QUERY_INFORMATION |\n\t\tsyscall.SYNCHRONIZE\n)\n\n// _pidAlive tests whether a process is alive or not\nfunc _pidAlive(pid int) bool {\n\th, err := syscall.OpenProcess(processDesiredAccess, false, uint32(pid))\n\tif err != nil {\n\t\treturn false\n\t}\n\n\tvar ec uint32\n\tif e := syscall.GetExitCodeProcess(h, &ec); e != nil {\n\t\treturn false\n\t}\n\n\treturn ec == exit_STILL_ACTIVE\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-plugin/protocol.go",
    "content": "package plugin\n\nimport (\n\t\"io\"\n\t\"net\"\n)\n\n// Protocol is an enum representing the types of protocols.\ntype Protocol string\n\nconst (\n\tProtocolInvalid Protocol = \"\"\n\tProtocolNetRPC  Protocol = \"netrpc\"\n\tProtocolGRPC    Protocol = \"grpc\"\n)\n\n// ServerProtocol is an interface that must be implemented for new plugin\n// protocols to be servers.\ntype ServerProtocol interface {\n\t// Init is called once to configure and initialize the protocol, but\n\t// not start listening. This is the point at which all validation should\n\t// be done and errors returned.\n\tInit() error\n\n\t// Config is extra configuration to be outputted to stdout. This will\n\t// be automatically base64 encoded to ensure it can be parsed properly.\n\t// This can be an empty string if additional configuration is not needed.\n\tConfig() string\n\n\t// Serve is called to serve connections on the given listener. This should\n\t// continue until the listener is closed.\n\tServe(net.Listener)\n}\n\n// ClientProtocol is an interface that must be implemented for new plugin\n// protocols to be clients.\ntype ClientProtocol interface {\n\tio.Closer\n\n\t// Dispense dispenses a new instance of the plugin with the given name.\n\tDispense(string) (interface{}, error)\n\n\t// Ping checks that the client connection is still healthy.\n\tPing() error\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-plugin/rpc_client.go",
    "content": "package plugin\n\nimport (\n\t\"crypto/tls\"\n\t\"fmt\"\n\t\"io\"\n\t\"net\"\n\t\"net/rpc\"\n\n\t\"github.com/hashicorp/yamux\"\n)\n\n// RPCClient connects to an RPCServer over net/rpc to dispense plugin types.\ntype RPCClient struct {\n\tbroker  *MuxBroker\n\tcontrol *rpc.Client\n\tplugins map[string]Plugin\n\n\t// These are the streams used for the various stdout/err overrides\n\tstdout, stderr net.Conn\n}\n\n// newRPCClient creates a new RPCClient. The Client argument is expected\n// to be successfully started already with a lock held.\nfunc newRPCClient(c *Client) (*RPCClient, error) {\n\t// Connect to the client\n\tconn, err := net.Dial(c.address.Network(), c.address.String())\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif tcpConn, ok := conn.(*net.TCPConn); ok {\n\t\t// Make sure to set keep alive so that the connection doesn't die\n\t\ttcpConn.SetKeepAlive(true)\n\t}\n\n\tif c.config.TLSConfig != nil {\n\t\tconn = tls.Client(conn, c.config.TLSConfig)\n\t}\n\n\t// Create the actual RPC client\n\tresult, err := NewRPCClient(conn, c.config.Plugins)\n\tif err != nil {\n\t\tconn.Close()\n\t\treturn nil, err\n\t}\n\n\t// Begin the stream syncing so that stdin, out, err work properly\n\terr = result.SyncStreams(\n\t\tc.config.SyncStdout,\n\t\tc.config.SyncStderr)\n\tif err != nil {\n\t\tresult.Close()\n\t\treturn nil, err\n\t}\n\n\treturn result, nil\n}\n\n// NewRPCClient creates a client from an already-open connection-like value.\n// Dial is typically used instead.\nfunc NewRPCClient(conn io.ReadWriteCloser, plugins map[string]Plugin) (*RPCClient, error) {\n\t// Create the yamux client so we can multiplex\n\tmux, err := yamux.Client(conn, nil)\n\tif err != nil {\n\t\tconn.Close()\n\t\treturn nil, err\n\t}\n\n\t// Connect to the control stream.\n\tcontrol, err := mux.Open()\n\tif err != nil {\n\t\tmux.Close()\n\t\treturn nil, err\n\t}\n\n\t// Connect stdout, stderr streams\n\tstdstream := make([]net.Conn, 2)\n\tfor i, _ := range stdstream {\n\t\tstdstream[i], err = mux.Open()\n\t\tif err != nil {\n\t\t\tmux.Close()\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\t// Create the broker and start it up\n\tbroker := newMuxBroker(mux)\n\tgo broker.Run()\n\n\t// Build the client using our broker and control channel.\n\treturn &RPCClient{\n\t\tbroker:  broker,\n\t\tcontrol: rpc.NewClient(control),\n\t\tplugins: plugins,\n\t\tstdout:  stdstream[0],\n\t\tstderr:  stdstream[1],\n\t}, nil\n}\n\n// SyncStreams should be called to enable syncing of stdout,\n// stderr with the plugin.\n//\n// This will return immediately and the syncing will continue to happen\n// in the background. You do not need to launch this in a goroutine itself.\n//\n// This should never be called multiple times.\nfunc (c *RPCClient) SyncStreams(stdout io.Writer, stderr io.Writer) error {\n\tgo copyStream(\"stdout\", stdout, c.stdout)\n\tgo copyStream(\"stderr\", stderr, c.stderr)\n\treturn nil\n}\n\n// Close closes the connection. The client is no longer usable after this\n// is called.\nfunc (c *RPCClient) Close() error {\n\t// Call the control channel and ask it to gracefully exit. If this\n\t// errors, then we save it so that we always return an error but we\n\t// want to try to close the other channels anyways.\n\tvar empty struct{}\n\treturnErr := c.control.Call(\"Control.Quit\", true, &empty)\n\n\t// Close the other streams we have\n\tif err := c.control.Close(); err != nil {\n\t\treturn err\n\t}\n\tif err := c.stdout.Close(); err != nil {\n\t\treturn err\n\t}\n\tif err := c.stderr.Close(); err != nil {\n\t\treturn err\n\t}\n\tif err := c.broker.Close(); err != nil {\n\t\treturn err\n\t}\n\n\t// Return back the error we got from Control.Quit. This is very important\n\t// since we MUST return non-nil error if this fails so that Client.Kill\n\t// will properly try a process.Kill.\n\treturn returnErr\n}\n\nfunc (c *RPCClient) Dispense(name string) (interface{}, error) {\n\tp, ok := c.plugins[name]\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"unknown plugin type: %s\", name)\n\t}\n\n\tvar id uint32\n\tif err := c.control.Call(\n\t\t\"Dispenser.Dispense\", name, &id); err != nil {\n\t\treturn nil, err\n\t}\n\n\tconn, err := c.broker.Dial(id)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn p.Client(c.broker, rpc.NewClient(conn))\n}\n\n// Ping pings the connection to ensure it is still alive.\n//\n// The error from the RPC call is returned exactly if you want to inspect\n// it for further error analysis. Any error returned from here would indicate\n// that the connection to the plugin is not healthy.\nfunc (c *RPCClient) Ping() error {\n\tvar empty struct{}\n\treturn c.control.Call(\"Control.Ping\", true, &empty)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-plugin/rpc_server.go",
    "content": "package plugin\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"log\"\n\t\"net\"\n\t\"net/rpc\"\n\t\"sync\"\n\n\t\"github.com/hashicorp/yamux\"\n)\n\n// RPCServer listens for network connections and then dispenses interface\n// implementations over net/rpc.\n//\n// After setting the fields below, they shouldn't be read again directly\n// from the structure which may be reading/writing them concurrently.\ntype RPCServer struct {\n\tPlugins map[string]Plugin\n\n\t// Stdout, Stderr are what this server will use instead of the\n\t// normal stdin/out/err. This is because due to the multi-process nature\n\t// of our plugin system, we can't use the normal process values so we\n\t// make our own custom one we pipe across.\n\tStdout io.Reader\n\tStderr io.Reader\n\n\t// DoneCh should be set to a non-nil channel that will be closed\n\t// when the control requests the RPC server to end.\n\tDoneCh chan<- struct{}\n\n\tlock sync.Mutex\n}\n\n// ServerProtocol impl.\nfunc (s *RPCServer) Init() error { return nil }\n\n// ServerProtocol impl.\nfunc (s *RPCServer) Config() string { return \"\" }\n\n// ServerProtocol impl.\nfunc (s *RPCServer) Serve(lis net.Listener) {\n\tfor {\n\t\tconn, err := lis.Accept()\n\t\tif err != nil {\n\t\t\tlog.Printf(\"[ERR] plugin: plugin server: %s\", err)\n\t\t\treturn\n\t\t}\n\n\t\tgo s.ServeConn(conn)\n\t}\n}\n\n// ServeConn runs a single connection.\n//\n// ServeConn blocks, serving the connection until the client hangs up.\nfunc (s *RPCServer) ServeConn(conn io.ReadWriteCloser) {\n\t// First create the yamux server to wrap this connection\n\tmux, err := yamux.Server(conn, nil)\n\tif err != nil {\n\t\tconn.Close()\n\t\tlog.Printf(\"[ERR] plugin: error creating yamux server: %s\", err)\n\t\treturn\n\t}\n\n\t// Accept the control connection\n\tcontrol, err := mux.Accept()\n\tif err != nil {\n\t\tmux.Close()\n\t\tif err != io.EOF {\n\t\t\tlog.Printf(\"[ERR] plugin: error accepting control connection: %s\", err)\n\t\t}\n\n\t\treturn\n\t}\n\n\t// Connect the stdstreams (in, out, err)\n\tstdstream := make([]net.Conn, 2)\n\tfor i, _ := range stdstream {\n\t\tstdstream[i], err = mux.Accept()\n\t\tif err != nil {\n\t\t\tmux.Close()\n\t\t\tlog.Printf(\"[ERR] plugin: accepting stream %d: %s\", i, err)\n\t\t\treturn\n\t\t}\n\t}\n\n\t// Copy std streams out to the proper place\n\tgo copyStream(\"stdout\", stdstream[0], s.Stdout)\n\tgo copyStream(\"stderr\", stdstream[1], s.Stderr)\n\n\t// Create the broker and start it up\n\tbroker := newMuxBroker(mux)\n\tgo broker.Run()\n\n\t// Use the control connection to build the dispenser and serve the\n\t// connection.\n\tserver := rpc.NewServer()\n\tserver.RegisterName(\"Control\", &controlServer{\n\t\tserver: s,\n\t})\n\tserver.RegisterName(\"Dispenser\", &dispenseServer{\n\t\tbroker:  broker,\n\t\tplugins: s.Plugins,\n\t})\n\tserver.ServeConn(control)\n}\n\n// done is called internally by the control server to trigger the\n// doneCh to close which is listened to by the main process to cleanly\n// exit.\nfunc (s *RPCServer) done() {\n\ts.lock.Lock()\n\tdefer s.lock.Unlock()\n\n\tif s.DoneCh != nil {\n\t\tclose(s.DoneCh)\n\t\ts.DoneCh = nil\n\t}\n}\n\n// dispenseServer dispenses variousinterface implementations for Terraform.\ntype controlServer struct {\n\tserver *RPCServer\n}\n\n// Ping can be called to verify the connection (and likely the binary)\n// is still alive to a plugin.\nfunc (c *controlServer) Ping(\n\tnull bool, response *struct{}) error {\n\t*response = struct{}{}\n\treturn nil\n}\n\nfunc (c *controlServer) Quit(\n\tnull bool, response *struct{}) error {\n\t// End the server\n\tc.server.done()\n\n\t// Always return true\n\t*response = struct{}{}\n\n\treturn nil\n}\n\n// dispenseServer dispenses variousinterface implementations for Terraform.\ntype dispenseServer struct {\n\tbroker  *MuxBroker\n\tplugins map[string]Plugin\n}\n\nfunc (d *dispenseServer) Dispense(\n\tname string, response *uint32) error {\n\t// Find the function to create this implementation\n\tp, ok := d.plugins[name]\n\tif !ok {\n\t\treturn fmt.Errorf(\"unknown plugin type: %s\", name)\n\t}\n\n\t// Create the implementation first so we know if there is an error.\n\timpl, err := p.Server(d.broker)\n\tif err != nil {\n\t\t// We turn the error into an errors error so that it works across RPC\n\t\treturn errors.New(err.Error())\n\t}\n\n\t// Reserve an ID for our implementation\n\tid := d.broker.NextId()\n\t*response = id\n\n\t// Run the rest in a goroutine since it can only happen once this RPC\n\t// call returns. We wait for a connection for the plugin implementation\n\t// and serve it.\n\tgo func() {\n\t\tconn, err := d.broker.Accept(id)\n\t\tif err != nil {\n\t\t\tlog.Printf(\"[ERR] go-plugin: plugin dispense error: %s: %s\", name, err)\n\t\t\treturn\n\t\t}\n\n\t\tserve(conn, \"Plugin\", impl)\n\t}()\n\n\treturn nil\n}\n\nfunc serve(conn io.ReadWriteCloser, name string, v interface{}) {\n\tserver := rpc.NewServer()\n\tif err := server.RegisterName(name, v); err != nil {\n\t\tlog.Printf(\"[ERR] go-plugin: plugin dispense error: %s\", err)\n\t\treturn\n\t}\n\n\tserver.ServeConn(conn)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-plugin/server.go",
    "content": "package plugin\n\nimport (\n\t\"crypto/tls\"\n\t\"crypto/x509\"\n\t\"encoding/base64\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"log\"\n\t\"net\"\n\t\"os\"\n\t\"os/signal\"\n\t\"runtime\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync/atomic\"\n\n\t\"github.com/hashicorp/go-hclog\"\n\n\t\"google.golang.org/grpc\"\n)\n\n// CoreProtocolVersion is the ProtocolVersion of the plugin system itself.\n// We will increment this whenever we change any protocol behavior. This\n// will invalidate any prior plugins but will at least allow us to iterate\n// on the core in a safe way. We will do our best to do this very\n// infrequently.\nconst CoreProtocolVersion = 1\n\n// HandshakeConfig is the configuration used by client and servers to\n// handshake before starting a plugin connection. This is embedded by\n// both ServeConfig and ClientConfig.\n//\n// In practice, the plugin host creates a HandshakeConfig that is exported\n// and plugins then can easily consume it.\ntype HandshakeConfig struct {\n\t// ProtocolVersion is the version that clients must match on to\n\t// agree they can communicate. This should match the ProtocolVersion\n\t// set on ClientConfig when using a plugin.\n\t// This field is not required if VersionedPlugins are being used in the\n\t// Client or Server configurations.\n\tProtocolVersion uint\n\n\t// MagicCookieKey and value are used as a very basic verification\n\t// that a plugin is intended to be launched. This is not a security\n\t// measure, just a UX feature. If the magic cookie doesn't match,\n\t// we show human-friendly output.\n\tMagicCookieKey   string\n\tMagicCookieValue string\n}\n\n// PluginSet is a set of plugins provided to be registered in the plugin\n// server.\ntype PluginSet map[string]Plugin\n\n// ServeConfig configures what sorts of plugins are served.\ntype ServeConfig struct {\n\t// HandshakeConfig is the configuration that must match clients.\n\tHandshakeConfig\n\n\t// TLSProvider is a function that returns a configured tls.Config.\n\tTLSProvider func() (*tls.Config, error)\n\n\t// Plugins are the plugins that are served.\n\t// The implied version of this PluginSet is the Handshake.ProtocolVersion.\n\tPlugins PluginSet\n\n\t// VersionedPlugins is a map of PluginSets for specific protocol versions.\n\t// These can be used to negotiate a compatible version between client and\n\t// server. If this is set, Handshake.ProtocolVersion is not required.\n\tVersionedPlugins map[int]PluginSet\n\n\t// GRPCServer should be non-nil to enable serving the plugins over\n\t// gRPC. This is a function to create the server when needed with the\n\t// given server options. The server options populated by go-plugin will\n\t// be for TLS if set. You may modify the input slice.\n\t//\n\t// Note that the grpc.Server will automatically be registered with\n\t// the gRPC health checking service. This is not optional since go-plugin\n\t// relies on this to implement Ping().\n\tGRPCServer func([]grpc.ServerOption) *grpc.Server\n\n\t// Logger is used to pass a logger into the server. If none is provided the\n\t// server will create a default logger.\n\tLogger hclog.Logger\n}\n\n// protocolVersion determines the protocol version and plugin set to be used by\n// the server. In the event that there is no suitable version, the last version\n// in the config is returned leaving the client to report the incompatibility.\nfunc protocolVersion(opts *ServeConfig) (int, Protocol, PluginSet) {\n\tprotoVersion := int(opts.ProtocolVersion)\n\tpluginSet := opts.Plugins\n\tprotoType := ProtocolNetRPC\n\t// Check if the client sent a list of acceptable versions\n\tvar clientVersions []int\n\tif vs := os.Getenv(\"PLUGIN_PROTOCOL_VERSIONS\"); vs != \"\" {\n\t\tfor _, s := range strings.Split(vs, \",\") {\n\t\t\tv, err := strconv.Atoi(s)\n\t\t\tif err != nil {\n\t\t\t\tfmt.Fprintf(os.Stderr, \"server sent invalid plugin version %q\", s)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tclientVersions = append(clientVersions, v)\n\t\t}\n\t}\n\n\t// We want to iterate in reverse order, to ensure we match the newest\n\t// compatible plugin version.\n\tsort.Sort(sort.Reverse(sort.IntSlice(clientVersions)))\n\n\t// set the old un-versioned fields as if they were versioned plugins\n\tif opts.VersionedPlugins == nil {\n\t\topts.VersionedPlugins = make(map[int]PluginSet)\n\t}\n\n\tif pluginSet != nil {\n\t\topts.VersionedPlugins[protoVersion] = pluginSet\n\t}\n\n\t// Sort the version to make sure we match the latest first\n\tvar versions []int\n\tfor v := range opts.VersionedPlugins {\n\t\tversions = append(versions, v)\n\t}\n\n\tsort.Sort(sort.Reverse(sort.IntSlice(versions)))\n\n\t// See if we have multiple versions of Plugins to choose from\n\tfor _, version := range versions {\n\t\t// Record each version, since we guarantee that this returns valid\n\t\t// values even if they are not a protocol match.\n\t\tprotoVersion = version\n\t\tpluginSet = opts.VersionedPlugins[version]\n\n\t\t// If we have a configured gRPC server we should select a protocol\n\t\tif opts.GRPCServer != nil {\n\t\t\t// All plugins in a set must use the same transport, so check the first\n\t\t\t// for the protocol type\n\t\t\tfor _, p := range pluginSet {\n\t\t\t\tswitch p.(type) {\n\t\t\t\tcase GRPCPlugin:\n\t\t\t\t\tprotoType = ProtocolGRPC\n\t\t\t\tdefault:\n\t\t\t\t\tprotoType = ProtocolNetRPC\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\tfor _, clientVersion := range clientVersions {\n\t\t\tif clientVersion == protoVersion {\n\t\t\t\treturn protoVersion, protoType, pluginSet\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the lowest version as the fallback.\n\t// Since we iterated over all the versions in reverse order above, these\n\t// values are from the lowest version number plugins (which may be from\n\t// a combination of the Handshake.ProtocolVersion and ServeConfig.Plugins\n\t// fields). This allows serving the oldest version of our plugins to a\n\t// legacy client that did not send a PLUGIN_PROTOCOL_VERSIONS list.\n\treturn protoVersion, protoType, pluginSet\n}\n\n// Serve serves the plugins given by ServeConfig.\n//\n// Serve doesn't return until the plugin is done being executed. Any\n// errors will be outputted to os.Stderr.\n//\n// This is the method that plugins should call in their main() functions.\nfunc Serve(opts *ServeConfig) {\n\t// Validate the handshake config\n\tif opts.MagicCookieKey == \"\" || opts.MagicCookieValue == \"\" {\n\t\tfmt.Fprintf(os.Stderr,\n\t\t\t\"Misconfigured ServeConfig given to serve this plugin: no magic cookie\\n\"+\n\t\t\t\t\"key or value was set. Please notify the plugin author and report\\n\"+\n\t\t\t\t\"this as a bug.\\n\")\n\t\tos.Exit(1)\n\t}\n\n\t// First check the cookie\n\tif os.Getenv(opts.MagicCookieKey) != opts.MagicCookieValue {\n\t\tfmt.Fprintf(os.Stderr,\n\t\t\t\"This binary is a plugin. These are not meant to be executed directly.\\n\"+\n\t\t\t\t\"Please execute the program that consumes these plugins, which will\\n\"+\n\t\t\t\t\"load any plugins automatically\\n\")\n\t\tos.Exit(1)\n\t}\n\n\t// negotiate the version and plugins\n\t// start with default version in the handshake config\n\tprotoVersion, protoType, pluginSet := protocolVersion(opts)\n\n\t// Logging goes to the original stderr\n\tlog.SetOutput(os.Stderr)\n\n\tlogger := opts.Logger\n\tif logger == nil {\n\t\t// internal logger to os.Stderr\n\t\tlogger = hclog.New(&hclog.LoggerOptions{\n\t\t\tLevel:      hclog.Trace,\n\t\t\tOutput:     os.Stderr,\n\t\t\tJSONFormat: true,\n\t\t})\n\t}\n\n\t// Create our new stdout, stderr files. These will override our built-in\n\t// stdout/stderr so that it works across the stream boundary.\n\tstdout_r, stdout_w, err := os.Pipe()\n\tif err != nil {\n\t\tfmt.Fprintf(os.Stderr, \"Error preparing plugin: %s\\n\", err)\n\t\tos.Exit(1)\n\t}\n\tstderr_r, stderr_w, err := os.Pipe()\n\tif err != nil {\n\t\tfmt.Fprintf(os.Stderr, \"Error preparing plugin: %s\\n\", err)\n\t\tos.Exit(1)\n\t}\n\n\t// Register a listener so we can accept a connection\n\tlistener, err := serverListener()\n\tif err != nil {\n\t\tlogger.Error(\"plugin init error\", \"error\", err)\n\t\treturn\n\t}\n\n\t// Close the listener on return. We wrap this in a func() on purpose\n\t// because the \"listener\" reference may change to TLS.\n\tdefer func() {\n\t\tlistener.Close()\n\t}()\n\n\tvar tlsConfig *tls.Config\n\tif opts.TLSProvider != nil {\n\t\ttlsConfig, err = opts.TLSProvider()\n\t\tif err != nil {\n\t\t\tlogger.Error(\"plugin tls init\", \"error\", err)\n\t\t\treturn\n\t\t}\n\t}\n\n\tvar serverCert string\n\tclientCert := os.Getenv(\"PLUGIN_CLIENT_CERT\")\n\t// If the client is configured using AutoMTLS, the certificate will be here,\n\t// and we need to generate our own in response.\n\tif tlsConfig == nil && clientCert != \"\" {\n\t\tlogger.Info(\"configuring server automatic mTLS\")\n\t\tclientCertPool := x509.NewCertPool()\n\t\tif !clientCertPool.AppendCertsFromPEM([]byte(clientCert)) {\n\t\t\tlogger.Error(\"client cert provided but failed to parse\", \"cert\", clientCert)\n\t\t}\n\n\t\tcertPEM, keyPEM, err := generateCert()\n\t\tif err != nil {\n\t\t\tlogger.Error(\"failed to generate client certificate\", \"error\", err)\n\t\t\tpanic(err)\n\t\t}\n\n\t\tcert, err := tls.X509KeyPair(certPEM, keyPEM)\n\t\tif err != nil {\n\t\t\tlogger.Error(\"failed to parse client certificate\", \"error\", err)\n\t\t\tpanic(err)\n\t\t}\n\n\t\ttlsConfig = &tls.Config{\n\t\t\tCertificates: []tls.Certificate{cert},\n\t\t\tClientAuth:   tls.RequireAndVerifyClientCert,\n\t\t\tClientCAs:    clientCertPool,\n\t\t\tMinVersion:   tls.VersionTLS12,\n\t\t}\n\n\t\t// We send back the raw leaf cert data for the client rather than the\n\t\t// PEM, since the protocol can't handle newlines.\n\t\tserverCert = base64.RawStdEncoding.EncodeToString(cert.Certificate[0])\n\t}\n\n\t// Create the channel to tell us when we're done\n\tdoneCh := make(chan struct{})\n\n\t// Build the server type\n\tvar server ServerProtocol\n\tswitch protoType {\n\tcase ProtocolNetRPC:\n\t\t// If we have a TLS configuration then we wrap the listener\n\t\t// ourselves and do it at that level.\n\t\tif tlsConfig != nil {\n\t\t\tlistener = tls.NewListener(listener, tlsConfig)\n\t\t}\n\n\t\t// Create the RPC server to dispense\n\t\tserver = &RPCServer{\n\t\t\tPlugins: pluginSet,\n\t\t\tStdout:  stdout_r,\n\t\t\tStderr:  stderr_r,\n\t\t\tDoneCh:  doneCh,\n\t\t}\n\n\tcase ProtocolGRPC:\n\t\t// Create the gRPC server\n\t\tserver = &GRPCServer{\n\t\t\tPlugins: pluginSet,\n\t\t\tServer:  opts.GRPCServer,\n\t\t\tTLS:     tlsConfig,\n\t\t\tStdout:  stdout_r,\n\t\t\tStderr:  stderr_r,\n\t\t\tDoneCh:  doneCh,\n\t\t\tlogger:  logger,\n\t\t}\n\n\tdefault:\n\t\tpanic(\"unknown server protocol: \" + protoType)\n\t}\n\n\t// Initialize the servers\n\tif err := server.Init(); err != nil {\n\t\tlogger.Error(\"protocol init\", \"error\", err)\n\t\treturn\n\t}\n\n\tlogger.Debug(\"plugin address\", \"network\", listener.Addr().Network(), \"address\", listener.Addr().String())\n\n\t// Output the address and service name to stdout so that the client can bring it up.\n\tfmt.Printf(\"%d|%d|%s|%s|%s|%s\\n\",\n\t\tCoreProtocolVersion,\n\t\tprotoVersion,\n\t\tlistener.Addr().Network(),\n\t\tlistener.Addr().String(),\n\t\tprotoType,\n\t\tserverCert)\n\tos.Stdout.Sync()\n\n\t// Eat the interrupts\n\tch := make(chan os.Signal, 1)\n\tsignal.Notify(ch, os.Interrupt)\n\tgo func() {\n\t\tvar count int32 = 0\n\t\tfor {\n\t\t\t<-ch\n\t\t\tnewCount := atomic.AddInt32(&count, 1)\n\t\t\tlogger.Debug(\"plugin received interrupt signal, ignoring\", \"count\", newCount)\n\t\t}\n\t}()\n\n\t// Set our new out, err\n\tos.Stdout = stdout_w\n\tos.Stderr = stderr_w\n\n\t// Accept connections and wait for completion\n\tgo server.Serve(listener)\n\t<-doneCh\n}\n\nfunc serverListener() (net.Listener, error) {\n\tif runtime.GOOS == \"windows\" {\n\t\treturn serverListener_tcp()\n\t}\n\n\treturn serverListener_unix()\n}\n\nfunc serverListener_tcp() (net.Listener, error) {\n\tenvMinPort := os.Getenv(\"PLUGIN_MIN_PORT\")\n\tenvMaxPort := os.Getenv(\"PLUGIN_MAX_PORT\")\n\n\tvar minPort, maxPort int64\n\tvar err error\n\n\tswitch {\n\tcase len(envMinPort) == 0:\n\t\tminPort = 0\n\tdefault:\n\t\tminPort, err = strconv.ParseInt(envMinPort, 10, 32)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"Couldn't get value from PLUGIN_MIN_PORT: %v\", err)\n\t\t}\n\t}\n\n\tswitch {\n\tcase len(envMaxPort) == 0:\n\t\tmaxPort = 0\n\tdefault:\n\t\tmaxPort, err = strconv.ParseInt(envMaxPort, 10, 32)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"Couldn't get value from PLUGIN_MAX_PORT: %v\", err)\n\t\t}\n\t}\n\n\tif minPort > maxPort {\n\t\treturn nil, fmt.Errorf(\"ENV_MIN_PORT value of %d is greater than PLUGIN_MAX_PORT value of %d\", minPort, maxPort)\n\t}\n\n\tfor port := minPort; port <= maxPort; port++ {\n\t\taddress := fmt.Sprintf(\"127.0.0.1:%d\", port)\n\t\tlistener, err := net.Listen(\"tcp\", address)\n\t\tif err == nil {\n\t\t\treturn listener, nil\n\t\t}\n\t}\n\n\treturn nil, errors.New(\"Couldn't bind plugin TCP listener\")\n}\n\nfunc serverListener_unix() (net.Listener, error) {\n\ttf, err := ioutil.TempFile(\"\", \"plugin\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tpath := tf.Name()\n\n\t// Close the file and remove it because it has to not exist for\n\t// the domain socket.\n\tif err := tf.Close(); err != nil {\n\t\treturn nil, err\n\t}\n\tif err := os.Remove(path); err != nil {\n\t\treturn nil, err\n\t}\n\n\tl, err := net.Listen(\"unix\", path)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Wrap the listener in rmListener so that the Unix domain socket file\n\t// is removed on close.\n\treturn &rmListener{\n\t\tListener: l,\n\t\tPath:     path,\n\t}, nil\n}\n\n// rmListener is an implementation of net.Listener that forwards most\n// calls to the listener but also removes a file as part of the close. We\n// use this to cleanup the unix domain socket on close.\ntype rmListener struct {\n\tnet.Listener\n\tPath string\n}\n\nfunc (l *rmListener) Close() error {\n\t// Close the listener itself\n\tif err := l.Listener.Close(); err != nil {\n\t\treturn err\n\t}\n\n\t// Remove the file\n\treturn os.Remove(l.Path)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-plugin/server_mux.go",
    "content": "package plugin\n\nimport (\n\t\"fmt\"\n\t\"os\"\n)\n\n// ServeMuxMap is the type that is used to configure ServeMux\ntype ServeMuxMap map[string]*ServeConfig\n\n// ServeMux is like Serve, but serves multiple types of plugins determined\n// by the argument given on the command-line.\n//\n// This command doesn't return until the plugin is done being executed. Any\n// errors are logged or output to stderr.\nfunc ServeMux(m ServeMuxMap) {\n\tif len(os.Args) != 2 {\n\t\tfmt.Fprintf(os.Stderr,\n\t\t\t\"Invoked improperly. This is an internal command that shouldn't\\n\"+\n\t\t\t\t\"be manually invoked.\\n\")\n\t\tos.Exit(1)\n\t}\n\n\topts, ok := m[os.Args[1]]\n\tif !ok {\n\t\tfmt.Fprintf(os.Stderr, \"Unknown plugin: %s\\n\", os.Args[1])\n\t\tos.Exit(1)\n\t}\n\n\tServe(opts)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-plugin/stream.go",
    "content": "package plugin\n\nimport (\n\t\"io\"\n\t\"log\"\n)\n\nfunc copyStream(name string, dst io.Writer, src io.Reader) {\n\tif src == nil {\n\t\tpanic(name + \": src is nil\")\n\t}\n\tif dst == nil {\n\t\tpanic(name + \": dst is nil\")\n\t}\n\tif _, err := io.Copy(dst, src); err != nil && err != io.EOF {\n\t\tlog.Printf(\"[ERR] plugin: stream copy '%s' error: %s\", name, err)\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-plugin/testing.go",
    "content": "package plugin\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"io\"\n\t\"net\"\n\t\"net/rpc\"\n\n\t\"github.com/mitchellh/go-testing-interface\"\n\thclog \"github.com/hashicorp/go-hclog\"\n\t\"github.com/hashicorp/go-plugin/internal/plugin\"\n\t\"google.golang.org/grpc\"\n)\n\n// TestOptions allows specifying options that can affect the behavior of the\n// test functions\ntype TestOptions struct {\n\t//ServerStdout causes the given value to be used in place of a blank buffer\n\t//for RPCServer's Stdout\n\tServerStdout io.ReadCloser\n\n\t//ServerStderr causes the given value to be used in place of a blank buffer\n\t//for RPCServer's Stderr\n\tServerStderr io.ReadCloser\n}\n\n// The testing file contains test helpers that you can use outside of\n// this package for making it easier to test plugins themselves.\n\n// TestConn is a helper function for returning a client and server\n// net.Conn connected to each other.\nfunc TestConn(t testing.T) (net.Conn, net.Conn) {\n\t// Listen to any local port. This listener will be closed\n\t// after a single connection is established.\n\tl, err := net.Listen(\"tcp\", \"127.0.0.1:0\")\n\tif err != nil {\n\t\tt.Fatalf(\"err: %s\", err)\n\t}\n\n\t// Start a goroutine to accept our client connection\n\tvar serverConn net.Conn\n\tdoneCh := make(chan struct{})\n\tgo func() {\n\t\tdefer close(doneCh)\n\t\tdefer l.Close()\n\t\tvar err error\n\t\tserverConn, err = l.Accept()\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"err: %s\", err)\n\t\t}\n\t}()\n\n\t// Connect to the server\n\tclientConn, err := net.Dial(\"tcp\", l.Addr().String())\n\tif err != nil {\n\t\tt.Fatalf(\"err: %s\", err)\n\t}\n\n\t// Wait for the server side to acknowledge it has connected\n\t<-doneCh\n\n\treturn clientConn, serverConn\n}\n\n// TestRPCConn returns a rpc client and server connected to each other.\nfunc TestRPCConn(t testing.T) (*rpc.Client, *rpc.Server) {\n\tclientConn, serverConn := TestConn(t)\n\n\tserver := rpc.NewServer()\n\tgo server.ServeConn(serverConn)\n\n\tclient := rpc.NewClient(clientConn)\n\treturn client, server\n}\n\n// TestPluginRPCConn returns a plugin RPC client and server that are connected\n// together and configured.\nfunc TestPluginRPCConn(t testing.T, ps map[string]Plugin, opts *TestOptions) (*RPCClient, *RPCServer) {\n\t// Create two net.Conns we can use to shuttle our control connection\n\tclientConn, serverConn := TestConn(t)\n\n\t// Start up the server\n\tserver := &RPCServer{Plugins: ps, Stdout: new(bytes.Buffer), Stderr: new(bytes.Buffer)}\n\tif opts != nil {\n\t\tif opts.ServerStdout != nil {\n\t\t\tserver.Stdout = opts.ServerStdout\n\t\t}\n\t\tif opts.ServerStderr != nil {\n\t\t\tserver.Stderr = opts.ServerStderr\n\t\t}\n\t}\n\tgo server.ServeConn(serverConn)\n\n\t// Connect the client to the server\n\tclient, err := NewRPCClient(clientConn, ps)\n\tif err != nil {\n\t\tt.Fatalf(\"err: %s\", err)\n\t}\n\n\treturn client, server\n}\n\n// TestGRPCConn returns a gRPC client conn and grpc server that are connected\n// together and configured. The register function is used to register services\n// prior to the Serve call. This is used to test gRPC connections.\nfunc TestGRPCConn(t testing.T, register func(*grpc.Server)) (*grpc.ClientConn, *grpc.Server) {\n\t// Create a listener\n\tl, err := net.Listen(\"tcp\", \"127.0.0.1:0\")\n\tif err != nil {\n\t\tt.Fatalf(\"err: %s\", err)\n\t}\n\n\tserver := grpc.NewServer()\n\tregister(server)\n\tgo server.Serve(l)\n\n\t// Connect to the server\n\tconn, err := grpc.Dial(\n\t\tl.Addr().String(),\n\t\tgrpc.WithBlock(),\n\t\tgrpc.WithInsecure())\n\tif err != nil {\n\t\tt.Fatalf(\"err: %s\", err)\n\t}\n\n\t// Connection successful, close the listener\n\tl.Close()\n\n\treturn conn, server\n}\n\n// TestPluginGRPCConn returns a plugin gRPC client and server that are connected\n// together and configured. This is used to test gRPC connections.\nfunc TestPluginGRPCConn(t testing.T, ps map[string]Plugin) (*GRPCClient, *GRPCServer) {\n\t// Create a listener\n\tl, err := net.Listen(\"tcp\", \"127.0.0.1:0\")\n\tif err != nil {\n\t\tt.Fatalf(\"err: %s\", err)\n\t}\n\n\t// Start up the server\n\tserver := &GRPCServer{\n\t\tPlugins: ps,\n\t\tDoneCh:  make(chan struct{}),\n\t\tServer:  DefaultGRPCServer,\n\t\tStdout:  new(bytes.Buffer),\n\t\tStderr:  new(bytes.Buffer),\n\t\tlogger:  hclog.Default(),\n\t}\n\tif err := server.Init(); err != nil {\n\t\tt.Fatalf(\"err: %s\", err)\n\t}\n\tgo server.Serve(l)\n\n\t// Connect to the server\n\tconn, err := grpc.Dial(\n\t\tl.Addr().String(),\n\t\tgrpc.WithBlock(),\n\t\tgrpc.WithInsecure())\n\tif err != nil {\n\t\tt.Fatalf(\"err: %s\", err)\n\t}\n\n\tbrokerGRPCClient := newGRPCBrokerClient(conn)\n\tbroker := newGRPCBroker(brokerGRPCClient, nil)\n\tgo broker.Run()\n\tgo brokerGRPCClient.StartStream()\n\n\t// Create the client\n\tclient := &GRPCClient{\n\t\tConn:       conn,\n\t\tPlugins:    ps,\n\t\tbroker:     broker,\n\t\tdoneCtx:    context.Background(),\n\t\tcontroller: plugin.NewGRPCControllerClient(conn),\n\t}\n\n\treturn client, server\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-safetemp/LICENSE",
    "content": "Mozilla Public License, version 2.0\n\n1. Definitions\n\n1.1. \"Contributor\"\n\n     means each individual or legal entity that creates, contributes to the\n     creation of, or owns Covered Software.\n\n1.2. \"Contributor Version\"\n\n     means the combination of the Contributions of others (if any) used by a\n     Contributor and that particular Contributor's Contribution.\n\n1.3. \"Contribution\"\n\n     means Covered Software of a particular Contributor.\n\n1.4. \"Covered Software\"\n\n     means Source Code Form to which the initial Contributor has attached the\n     notice in Exhibit A, the Executable Form of such Source Code Form, and\n     Modifications of such Source Code Form, in each case including portions\n     thereof.\n\n1.5. \"Incompatible With Secondary Licenses\"\n     means\n\n     a. that the initial Contributor has attached the notice described in\n        Exhibit B to the Covered Software; or\n\n     b. that the Covered Software was made available under the terms of\n        version 1.1 or earlier of the License, but not also under the terms of\n        a Secondary License.\n\n1.6. \"Executable Form\"\n\n     means any form of the work other than Source Code Form.\n\n1.7. \"Larger Work\"\n\n     means a work that combines Covered Software with other material, in a\n     separate file or files, that is not Covered Software.\n\n1.8. \"License\"\n\n     means this document.\n\n1.9. \"Licensable\"\n\n     means having the right to grant, to the maximum extent possible, whether\n     at the time of the initial grant or subsequently, any and all of the\n     rights conveyed by this License.\n\n1.10. \"Modifications\"\n\n     means any of the following:\n\n     a. any file in Source Code Form that results from an addition to,\n        deletion from, or modification of the contents of Covered Software; or\n\n     b. any new file in Source Code Form that contains any Covered Software.\n\n1.11. \"Patent Claims\" of a Contributor\n\n      means any patent claim(s), including without limitation, method,\n      process, and apparatus claims, in any patent Licensable by such\n      Contributor that would be infringed, but for the grant of the License,\n      by the making, using, selling, offering for sale, having made, import,\n      or transfer of either its Contributions or its Contributor Version.\n\n1.12. \"Secondary License\"\n\n      means either the GNU General Public License, Version 2.0, the GNU Lesser\n      General Public License, Version 2.1, the GNU Affero General Public\n      License, Version 3.0, or any later versions of those licenses.\n\n1.13. \"Source Code Form\"\n\n      means the form of the work preferred for making modifications.\n\n1.14. \"You\" (or \"Your\")\n\n      means an individual or a legal entity exercising rights under this\n      License. For legal entities, \"You\" includes any entity that controls, is\n      controlled by, or is under common control with You. For purposes of this\n      definition, \"control\" means (a) the power, direct or indirect, to cause\n      the direction or management of such entity, whether by contract or\n      otherwise, or (b) ownership of more than fifty percent (50%) of the\n      outstanding shares or beneficial ownership of such entity.\n\n\n2. License Grants and Conditions\n\n2.1. Grants\n\n     Each Contributor hereby grants You a world-wide, royalty-free,\n     non-exclusive license:\n\n     a. under intellectual property rights (other than patent or trademark)\n        Licensable by such Contributor to use, reproduce, make available,\n        modify, display, perform, distribute, and otherwise exploit its\n        Contributions, either on an unmodified basis, with Modifications, or\n        as part of a Larger Work; and\n\n     b. under Patent Claims of such Contributor to make, use, sell, offer for\n        sale, have made, import, and otherwise transfer either its\n        Contributions or its Contributor Version.\n\n2.2. Effective Date\n\n     The licenses granted in Section 2.1 with respect to any Contribution\n     become effective for each Contribution on the date the Contributor first\n     distributes such Contribution.\n\n2.3. Limitations on Grant Scope\n\n     The licenses granted in this Section 2 are the only rights granted under\n     this License. No additional rights or licenses will be implied from the\n     distribution or licensing of Covered Software under this License.\n     Notwithstanding Section 2.1(b) above, no patent license is granted by a\n     Contributor:\n\n     a. for any code that a Contributor has removed from Covered Software; or\n\n     b. for infringements caused by: (i) Your and any other third party's\n        modifications of Covered Software, or (ii) the combination of its\n        Contributions with other software (except as part of its Contributor\n        Version); or\n\n     c. under Patent Claims infringed by Covered Software in the absence of\n        its Contributions.\n\n     This License does not grant any rights in the trademarks, service marks,\n     or logos of any Contributor (except as may be necessary to comply with\n     the notice requirements in Section 3.4).\n\n2.4. Subsequent Licenses\n\n     No Contributor makes additional grants as a result of Your choice to\n     distribute the Covered Software under a subsequent version of this\n     License (see Section 10.2) or under the terms of a Secondary License (if\n     permitted under the terms of Section 3.3).\n\n2.5. Representation\n\n     Each Contributor represents that the Contributor believes its\n     Contributions are its original creation(s) or it has sufficient rights to\n     grant the rights to its Contributions conveyed by this License.\n\n2.6. Fair Use\n\n     This License is not intended to limit any rights You have under\n     applicable copyright doctrines of fair use, fair dealing, or other\n     equivalents.\n\n2.7. Conditions\n\n     Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in\n     Section 2.1.\n\n\n3. Responsibilities\n\n3.1. Distribution of Source Form\n\n     All distribution of Covered Software in Source Code Form, including any\n     Modifications that You create or to which You contribute, must be under\n     the terms of this License. You must inform recipients that the Source\n     Code Form of the Covered Software is governed by the terms of this\n     License, and how they can obtain a copy of this License. You may not\n     attempt to alter or restrict the recipients' rights in the Source Code\n     Form.\n\n3.2. Distribution of Executable Form\n\n     If You distribute Covered Software in Executable Form then:\n\n     a. such Covered Software must also be made available in Source Code Form,\n        as described in Section 3.1, and You must inform recipients of the\n        Executable Form how they can obtain a copy of such Source Code Form by\n        reasonable means in a timely manner, at a charge no more than the cost\n        of distribution to the recipient; and\n\n     b. You may distribute such Executable Form under the terms of this\n        License, or sublicense it under different terms, provided that the\n        license for the Executable Form does not attempt to limit or alter the\n        recipients' rights in the Source Code Form under this License.\n\n3.3. Distribution of a Larger Work\n\n     You may create and distribute a Larger Work under terms of Your choice,\n     provided that You also comply with the requirements of this License for\n     the Covered Software. If the Larger Work is a combination of Covered\n     Software with a work governed by one or more Secondary Licenses, and the\n     Covered Software is not Incompatible With Secondary Licenses, this\n     License permits You to additionally distribute such Covered Software\n     under the terms of such Secondary License(s), so that the recipient of\n     the Larger Work may, at their option, further distribute the Covered\n     Software under the terms of either this License or such Secondary\n     License(s).\n\n3.4. Notices\n\n     You may not remove or alter the substance of any license notices\n     (including copyright notices, patent notices, disclaimers of warranty, or\n     limitations of liability) contained within the Source Code Form of the\n     Covered Software, except that You may alter any license notices to the\n     extent required to remedy known factual inaccuracies.\n\n3.5. Application of Additional Terms\n\n     You may choose to offer, and to charge a fee for, warranty, support,\n     indemnity or liability obligations to one or more recipients of Covered\n     Software. However, You may do so only on Your own behalf, and not on\n     behalf of any Contributor. You must make it absolutely clear that any\n     such warranty, support, indemnity, or liability obligation is offered by\n     You alone, and You hereby agree to indemnify every Contributor for any\n     liability incurred by such Contributor as a result of warranty, support,\n     indemnity or liability terms You offer. You may include additional\n     disclaimers of warranty and limitations of liability specific to any\n     jurisdiction.\n\n4. Inability to Comply Due to Statute or Regulation\n\n   If it is impossible for You to comply with any of the terms of this License\n   with respect to some or all of the Covered Software due to statute,\n   judicial order, or regulation then You must: (a) comply with the terms of\n   this License to the maximum extent possible; and (b) describe the\n   limitations and the code they affect. Such description must be placed in a\n   text file included with all distributions of the Covered Software under\n   this License. Except to the extent prohibited by statute or regulation,\n   such description must be sufficiently detailed for a recipient of ordinary\n   skill to be able to understand it.\n\n5. Termination\n\n5.1. The rights granted under this License will terminate automatically if You\n     fail to comply with any of its terms. However, if You become compliant,\n     then the rights granted under this License from a particular Contributor\n     are reinstated (a) provisionally, unless and until such Contributor\n     explicitly and finally terminates Your grants, and (b) on an ongoing\n     basis, if such Contributor fails to notify You of the non-compliance by\n     some reasonable means prior to 60 days after You have come back into\n     compliance. Moreover, Your grants from a particular Contributor are\n     reinstated on an ongoing basis if such Contributor notifies You of the\n     non-compliance by some reasonable means, this is the first time You have\n     received notice of non-compliance with this License from such\n     Contributor, and You become compliant prior to 30 days after Your receipt\n     of the notice.\n\n5.2. If You initiate litigation against any entity by asserting a patent\n     infringement claim (excluding declaratory judgment actions,\n     counter-claims, and cross-claims) alleging that a Contributor Version\n     directly or indirectly infringes any patent, then the rights granted to\n     You by any and all Contributors for the Covered Software under Section\n     2.1 of this License shall terminate.\n\n5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user\n     license agreements (excluding distributors and resellers) which have been\n     validly granted by You or Your distributors under this License prior to\n     termination shall survive termination.\n\n6. Disclaimer of Warranty\n\n   Covered Software is provided under this License on an \"as is\" basis,\n   without warranty of any kind, either expressed, implied, or statutory,\n   including, without limitation, warranties that the Covered Software is free\n   of defects, merchantable, fit for a particular purpose or non-infringing.\n   The entire risk as to the quality and performance of the Covered Software\n   is with You. Should any Covered Software prove defective in any respect,\n   You (not any Contributor) assume the cost of any necessary servicing,\n   repair, or correction. This disclaimer of warranty constitutes an essential\n   part of this License. No use of  any Covered Software is authorized under\n   this License except under this disclaimer.\n\n7. Limitation of Liability\n\n   Under no circumstances and under no legal theory, whether tort (including\n   negligence), contract, or otherwise, shall any Contributor, or anyone who\n   distributes Covered Software as permitted above, be liable to You for any\n   direct, indirect, special, incidental, or consequential damages of any\n   character including, without limitation, damages for lost profits, loss of\n   goodwill, work stoppage, computer failure or malfunction, or any and all\n   other commercial damages or losses, even if such party shall have been\n   informed of the possibility of such damages. This limitation of liability\n   shall not apply to liability for death or personal injury resulting from\n   such party's negligence to the extent applicable law prohibits such\n   limitation. Some jurisdictions do not allow the exclusion or limitation of\n   incidental or consequential damages, so this exclusion and limitation may\n   not apply to You.\n\n8. Litigation\n\n   Any litigation relating to this License may be brought only in the courts\n   of a jurisdiction where the defendant maintains its principal place of\n   business and such litigation shall be governed by laws of that\n   jurisdiction, without reference to its conflict-of-law provisions. Nothing\n   in this Section shall prevent a party's ability to bring cross-claims or\n   counter-claims.\n\n9. Miscellaneous\n\n   This License represents the complete agreement concerning the subject\n   matter hereof. If any provision of this License is held to be\n   unenforceable, such provision shall be reformed only to the extent\n   necessary to make it enforceable. Any law or regulation which provides that\n   the language of a contract shall be construed against the drafter shall not\n   be used to construe this License against a Contributor.\n\n\n10. Versions of the License\n\n10.1. New Versions\n\n      Mozilla Foundation is the license steward. Except as provided in Section\n      10.3, no one other than the license steward has the right to modify or\n      publish new versions of this License. Each version will be given a\n      distinguishing version number.\n\n10.2. Effect of New Versions\n\n      You may distribute the Covered Software under the terms of the version\n      of the License under which You originally received the Covered Software,\n      or under the terms of any subsequent version published by the license\n      steward.\n\n10.3. Modified Versions\n\n      If you create software not governed by this License, and you want to\n      create a new license for such software, you may create and use a\n      modified version of this License if you rename the license and remove\n      any references to the name of the license steward (except to note that\n      such modified license differs from this License).\n\n10.4. Distributing Source Code Form that is Incompatible With Secondary\n      Licenses If You choose to distribute Source Code Form that is\n      Incompatible With Secondary Licenses under the terms of this version of\n      the License, the notice described in Exhibit B of this License must be\n      attached.\n\nExhibit A - Source Code Form License Notice\n\n      This Source Code Form is subject to the\n      terms of the Mozilla Public License, v.\n      2.0. If a copy of the MPL was not\n      distributed with this file, You can\n      obtain one at\n      http://mozilla.org/MPL/2.0/.\n\nIf it is not possible or desirable to put the notice in a particular file,\nthen You may include the notice in a location (such as a LICENSE file in a\nrelevant directory) where a recipient would be likely to look for such a\nnotice.\n\nYou may add additional accurate notices of copyright ownership.\n\nExhibit B - \"Incompatible With Secondary Licenses\" Notice\n\n      This Source Code Form is \"Incompatible\n      With Secondary Licenses\", as defined by\n      the Mozilla Public License, v. 2.0.\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-safetemp/safetemp.go",
    "content": "package safetemp\n\nimport (\n\t\"io\"\n\t\"io/ioutil\"\n\t\"os\"\n\t\"path/filepath\"\n)\n\n// Dir creates a new temporary directory that isn't yet created. This\n// can be used with calls that expect a non-existent directory.\n//\n// The directory is created as a child of a temporary directory created\n// within the directory dir starting with prefix. The temporary directory\n// returned is always named \"temp\". The parent directory has the specified\n// prefix.\n//\n// The returned io.Closer should be used to clean up the returned directory.\n// This will properly remove the returned directory and any other temporary\n// files created.\n//\n// If an error is returned, the Closer does not need to be called (and will\n// be nil).\nfunc Dir(dir, prefix string) (string, io.Closer, error) {\n\t// Create the temporary directory\n\ttd, err := ioutil.TempDir(dir, prefix)\n\tif err != nil {\n\t\treturn \"\", nil, err\n\t}\n\n\treturn filepath.Join(td, \"temp\"), pathCloser(td), nil\n}\n\n// pathCloser implements io.Closer to remove the given path on Close.\ntype pathCloser string\n\n// Close deletes this path.\nfunc (p pathCloser) Close() error {\n\treturn os.RemoveAll(string(p))\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-uuid/LICENSE",
    "content": "Mozilla Public License, version 2.0\n\n1. Definitions\n\n1.1. \"Contributor\"\n\n     means each individual or legal entity that creates, contributes to the\n     creation of, or owns Covered Software.\n\n1.2. \"Contributor Version\"\n\n     means the combination of the Contributions of others (if any) used by a\n     Contributor and that particular Contributor's Contribution.\n\n1.3. \"Contribution\"\n\n     means Covered Software of a particular Contributor.\n\n1.4. \"Covered Software\"\n\n     means Source Code Form to which the initial Contributor has attached the\n     notice in Exhibit A, the Executable Form of such Source Code Form, and\n     Modifications of such Source Code Form, in each case including portions\n     thereof.\n\n1.5. \"Incompatible With Secondary Licenses\"\n     means\n\n     a. that the initial Contributor has attached the notice described in\n        Exhibit B to the Covered Software; or\n\n     b. that the Covered Software was made available under the terms of\n        version 1.1 or earlier of the License, but not also under the terms of\n        a Secondary License.\n\n1.6. \"Executable Form\"\n\n     means any form of the work other than Source Code Form.\n\n1.7. \"Larger Work\"\n\n     means a work that combines Covered Software with other material, in a\n     separate file or files, that is not Covered Software.\n\n1.8. \"License\"\n\n     means this document.\n\n1.9. \"Licensable\"\n\n     means having the right to grant, to the maximum extent possible, whether\n     at the time of the initial grant or subsequently, any and all of the\n     rights conveyed by this License.\n\n1.10. \"Modifications\"\n\n     means any of the following:\n\n     a. any file in Source Code Form that results from an addition to,\n        deletion from, or modification of the contents of Covered Software; or\n\n     b. any new file in Source Code Form that contains any Covered Software.\n\n1.11. \"Patent Claims\" of a Contributor\n\n      means any patent claim(s), including without limitation, method,\n      process, and apparatus claims, in any patent Licensable by such\n      Contributor that would be infringed, but for the grant of the License,\n      by the making, using, selling, offering for sale, having made, import,\n      or transfer of either its Contributions or its Contributor Version.\n\n1.12. \"Secondary License\"\n\n      means either the GNU General Public License, Version 2.0, the GNU Lesser\n      General Public License, Version 2.1, the GNU Affero General Public\n      License, Version 3.0, or any later versions of those licenses.\n\n1.13. \"Source Code Form\"\n\n      means the form of the work preferred for making modifications.\n\n1.14. \"You\" (or \"Your\")\n\n      means an individual or a legal entity exercising rights under this\n      License. For legal entities, \"You\" includes any entity that controls, is\n      controlled by, or is under common control with You. For purposes of this\n      definition, \"control\" means (a) the power, direct or indirect, to cause\n      the direction or management of such entity, whether by contract or\n      otherwise, or (b) ownership of more than fifty percent (50%) of the\n      outstanding shares or beneficial ownership of such entity.\n\n\n2. License Grants and Conditions\n\n2.1. Grants\n\n     Each Contributor hereby grants You a world-wide, royalty-free,\n     non-exclusive license:\n\n     a. under intellectual property rights (other than patent or trademark)\n        Licensable by such Contributor to use, reproduce, make available,\n        modify, display, perform, distribute, and otherwise exploit its\n        Contributions, either on an unmodified basis, with Modifications, or\n        as part of a Larger Work; and\n\n     b. under Patent Claims of such Contributor to make, use, sell, offer for\n        sale, have made, import, and otherwise transfer either its\n        Contributions or its Contributor Version.\n\n2.2. Effective Date\n\n     The licenses granted in Section 2.1 with respect to any Contribution\n     become effective for each Contribution on the date the Contributor first\n     distributes such Contribution.\n\n2.3. Limitations on Grant Scope\n\n     The licenses granted in this Section 2 are the only rights granted under\n     this License. No additional rights or licenses will be implied from the\n     distribution or licensing of Covered Software under this License.\n     Notwithstanding Section 2.1(b) above, no patent license is granted by a\n     Contributor:\n\n     a. for any code that a Contributor has removed from Covered Software; or\n\n     b. for infringements caused by: (i) Your and any other third party's\n        modifications of Covered Software, or (ii) the combination of its\n        Contributions with other software (except as part of its Contributor\n        Version); or\n\n     c. under Patent Claims infringed by Covered Software in the absence of\n        its Contributions.\n\n     This License does not grant any rights in the trademarks, service marks,\n     or logos of any Contributor (except as may be necessary to comply with\n     the notice requirements in Section 3.4).\n\n2.4. Subsequent Licenses\n\n     No Contributor makes additional grants as a result of Your choice to\n     distribute the Covered Software under a subsequent version of this\n     License (see Section 10.2) or under the terms of a Secondary License (if\n     permitted under the terms of Section 3.3).\n\n2.5. Representation\n\n     Each Contributor represents that the Contributor believes its\n     Contributions are its original creation(s) or it has sufficient rights to\n     grant the rights to its Contributions conveyed by this License.\n\n2.6. Fair Use\n\n     This License is not intended to limit any rights You have under\n     applicable copyright doctrines of fair use, fair dealing, or other\n     equivalents.\n\n2.7. Conditions\n\n     Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in\n     Section 2.1.\n\n\n3. Responsibilities\n\n3.1. Distribution of Source Form\n\n     All distribution of Covered Software in Source Code Form, including any\n     Modifications that You create or to which You contribute, must be under\n     the terms of this License. You must inform recipients that the Source\n     Code Form of the Covered Software is governed by the terms of this\n     License, and how they can obtain a copy of this License. You may not\n     attempt to alter or restrict the recipients' rights in the Source Code\n     Form.\n\n3.2. Distribution of Executable Form\n\n     If You distribute Covered Software in Executable Form then:\n\n     a. such Covered Software must also be made available in Source Code Form,\n        as described in Section 3.1, and You must inform recipients of the\n        Executable Form how they can obtain a copy of such Source Code Form by\n        reasonable means in a timely manner, at a charge no more than the cost\n        of distribution to the recipient; and\n\n     b. You may distribute such Executable Form under the terms of this\n        License, or sublicense it under different terms, provided that the\n        license for the Executable Form does not attempt to limit or alter the\n        recipients' rights in the Source Code Form under this License.\n\n3.3. Distribution of a Larger Work\n\n     You may create and distribute a Larger Work under terms of Your choice,\n     provided that You also comply with the requirements of this License for\n     the Covered Software. If the Larger Work is a combination of Covered\n     Software with a work governed by one or more Secondary Licenses, and the\n     Covered Software is not Incompatible With Secondary Licenses, this\n     License permits You to additionally distribute such Covered Software\n     under the terms of such Secondary License(s), so that the recipient of\n     the Larger Work may, at their option, further distribute the Covered\n     Software under the terms of either this License or such Secondary\n     License(s).\n\n3.4. Notices\n\n     You may not remove or alter the substance of any license notices\n     (including copyright notices, patent notices, disclaimers of warranty, or\n     limitations of liability) contained within the Source Code Form of the\n     Covered Software, except that You may alter any license notices to the\n     extent required to remedy known factual inaccuracies.\n\n3.5. Application of Additional Terms\n\n     You may choose to offer, and to charge a fee for, warranty, support,\n     indemnity or liability obligations to one or more recipients of Covered\n     Software. However, You may do so only on Your own behalf, and not on\n     behalf of any Contributor. You must make it absolutely clear that any\n     such warranty, support, indemnity, or liability obligation is offered by\n     You alone, and You hereby agree to indemnify every Contributor for any\n     liability incurred by such Contributor as a result of warranty, support,\n     indemnity or liability terms You offer. You may include additional\n     disclaimers of warranty and limitations of liability specific to any\n     jurisdiction.\n\n4. Inability to Comply Due to Statute or Regulation\n\n   If it is impossible for You to comply with any of the terms of this License\n   with respect to some or all of the Covered Software due to statute,\n   judicial order, or regulation then You must: (a) comply with the terms of\n   this License to the maximum extent possible; and (b) describe the\n   limitations and the code they affect. Such description must be placed in a\n   text file included with all distributions of the Covered Software under\n   this License. Except to the extent prohibited by statute or regulation,\n   such description must be sufficiently detailed for a recipient of ordinary\n   skill to be able to understand it.\n\n5. Termination\n\n5.1. The rights granted under this License will terminate automatically if You\n     fail to comply with any of its terms. However, if You become compliant,\n     then the rights granted under this License from a particular Contributor\n     are reinstated (a) provisionally, unless and until such Contributor\n     explicitly and finally terminates Your grants, and (b) on an ongoing\n     basis, if such Contributor fails to notify You of the non-compliance by\n     some reasonable means prior to 60 days after You have come back into\n     compliance. Moreover, Your grants from a particular Contributor are\n     reinstated on an ongoing basis if such Contributor notifies You of the\n     non-compliance by some reasonable means, this is the first time You have\n     received notice of non-compliance with this License from such\n     Contributor, and You become compliant prior to 30 days after Your receipt\n     of the notice.\n\n5.2. If You initiate litigation against any entity by asserting a patent\n     infringement claim (excluding declaratory judgment actions,\n     counter-claims, and cross-claims) alleging that a Contributor Version\n     directly or indirectly infringes any patent, then the rights granted to\n     You by any and all Contributors for the Covered Software under Section\n     2.1 of this License shall terminate.\n\n5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user\n     license agreements (excluding distributors and resellers) which have been\n     validly granted by You or Your distributors under this License prior to\n     termination shall survive termination.\n\n6. Disclaimer of Warranty\n\n   Covered Software is provided under this License on an \"as is\" basis,\n   without warranty of any kind, either expressed, implied, or statutory,\n   including, without limitation, warranties that the Covered Software is free\n   of defects, merchantable, fit for a particular purpose or non-infringing.\n   The entire risk as to the quality and performance of the Covered Software\n   is with You. Should any Covered Software prove defective in any respect,\n   You (not any Contributor) assume the cost of any necessary servicing,\n   repair, or correction. This disclaimer of warranty constitutes an essential\n   part of this License. No use of  any Covered Software is authorized under\n   this License except under this disclaimer.\n\n7. Limitation of Liability\n\n   Under no circumstances and under no legal theory, whether tort (including\n   negligence), contract, or otherwise, shall any Contributor, or anyone who\n   distributes Covered Software as permitted above, be liable to You for any\n   direct, indirect, special, incidental, or consequential damages of any\n   character including, without limitation, damages for lost profits, loss of\n   goodwill, work stoppage, computer failure or malfunction, or any and all\n   other commercial damages or losses, even if such party shall have been\n   informed of the possibility of such damages. This limitation of liability\n   shall not apply to liability for death or personal injury resulting from\n   such party's negligence to the extent applicable law prohibits such\n   limitation. Some jurisdictions do not allow the exclusion or limitation of\n   incidental or consequential damages, so this exclusion and limitation may\n   not apply to You.\n\n8. Litigation\n\n   Any litigation relating to this License may be brought only in the courts\n   of a jurisdiction where the defendant maintains its principal place of\n   business and such litigation shall be governed by laws of that\n   jurisdiction, without reference to its conflict-of-law provisions. Nothing\n   in this Section shall prevent a party's ability to bring cross-claims or\n   counter-claims.\n\n9. Miscellaneous\n\n   This License represents the complete agreement concerning the subject\n   matter hereof. If any provision of this License is held to be\n   unenforceable, such provision shall be reformed only to the extent\n   necessary to make it enforceable. Any law or regulation which provides that\n   the language of a contract shall be construed against the drafter shall not\n   be used to construe this License against a Contributor.\n\n\n10. Versions of the License\n\n10.1. New Versions\n\n      Mozilla Foundation is the license steward. Except as provided in Section\n      10.3, no one other than the license steward has the right to modify or\n      publish new versions of this License. Each version will be given a\n      distinguishing version number.\n\n10.2. Effect of New Versions\n\n      You may distribute the Covered Software under the terms of the version\n      of the License under which You originally received the Covered Software,\n      or under the terms of any subsequent version published by the license\n      steward.\n\n10.3. Modified Versions\n\n      If you create software not governed by this License, and you want to\n      create a new license for such software, you may create and use a\n      modified version of this License if you rename the license and remove\n      any references to the name of the license steward (except to note that\n      such modified license differs from this License).\n\n10.4. Distributing Source Code Form that is Incompatible With Secondary\n      Licenses If You choose to distribute Source Code Form that is\n      Incompatible With Secondary Licenses under the terms of this version of\n      the License, the notice described in Exhibit B of this License must be\n      attached.\n\nExhibit A - Source Code Form License Notice\n\n      This Source Code Form is subject to the\n      terms of the Mozilla Public License, v.\n      2.0. If a copy of the MPL was not\n      distributed with this file, You can\n      obtain one at\n      http://mozilla.org/MPL/2.0/.\n\nIf it is not possible or desirable to put the notice in a particular file,\nthen You may include the notice in a location (such as a LICENSE file in a\nrelevant directory) where a recipient would be likely to look for such a\nnotice.\n\nYou may add additional accurate notices of copyright ownership.\n\nExhibit B - \"Incompatible With Secondary Licenses\" Notice\n\n      This Source Code Form is \"Incompatible\n      With Secondary Licenses\", as defined by\n      the Mozilla Public License, v. 2.0.\n\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-uuid/uuid.go",
    "content": "package uuid\n\nimport (\n\t\"crypto/rand\"\n\t\"encoding/hex\"\n\t\"fmt\"\n)\n\n// GenerateRandomBytes is used to generate random bytes of given size.\nfunc GenerateRandomBytes(size int) ([]byte, error) {\n\tbuf := make([]byte, size)\n\tif _, err := rand.Read(buf); err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to read random bytes: %v\", err)\n\t}\n\treturn buf, nil\n}\n\nconst uuidLen = 16\n\n// GenerateUUID is used to generate a random UUID\nfunc GenerateUUID() (string, error) {\n\tbuf, err := GenerateRandomBytes(uuidLen)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn FormatUUID(buf)\n}\n\nfunc FormatUUID(buf []byte) (string, error) {\n\tif buflen := len(buf); buflen != uuidLen {\n\t\treturn \"\", fmt.Errorf(\"wrong length byte slice (%d)\", buflen)\n\t}\n\n\treturn fmt.Sprintf(\"%x-%x-%x-%x-%x\",\n\t\tbuf[0:4],\n\t\tbuf[4:6],\n\t\tbuf[6:8],\n\t\tbuf[8:10],\n\t\tbuf[10:16]), nil\n}\n\nfunc ParseUUID(uuid string) ([]byte, error) {\n\tif len(uuid) != 2 * uuidLen + 4 {\n\t\treturn nil, fmt.Errorf(\"uuid string is wrong length\")\n\t}\n\n\tif uuid[8] != '-' ||\n\t\tuuid[13] != '-' ||\n\t\tuuid[18] != '-' ||\n\t\tuuid[23] != '-' {\n\t\treturn nil, fmt.Errorf(\"uuid is improperly formatted\")\n\t}\n\n\thexStr := uuid[0:8] + uuid[9:13] + uuid[14:18] + uuid[19:23] + uuid[24:36]\n\n\tret, err := hex.DecodeString(hexStr)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif len(ret) != uuidLen {\n\t\treturn nil, fmt.Errorf(\"decoded hex is the wrong length\")\n\t}\n\n\treturn ret, nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-version/LICENSE",
    "content": "Mozilla Public License, version 2.0\n\n1. Definitions\n\n1.1. “Contributor”\n\n     means each individual or legal entity that creates, contributes to the\n     creation of, or owns Covered Software.\n\n1.2. “Contributor Version”\n\n     means the combination of the Contributions of others (if any) used by a\n     Contributor and that particular Contributor’s Contribution.\n\n1.3. “Contribution”\n\n     means Covered Software of a particular Contributor.\n\n1.4. “Covered Software”\n\n     means Source Code Form to which the initial Contributor has attached the\n     notice in Exhibit A, the Executable Form of such Source Code Form, and\n     Modifications of such Source Code Form, in each case including portions\n     thereof.\n\n1.5. “Incompatible With Secondary Licenses”\n     means\n\n     a. that the initial Contributor has attached the notice described in\n        Exhibit B to the Covered Software; or\n\n     b. that the Covered Software was made available under the terms of version\n        1.1 or earlier of the License, but not also under the terms of a\n        Secondary License.\n\n1.6. “Executable Form”\n\n     means any form of the work other than Source Code Form.\n\n1.7. “Larger Work”\n\n     means a work that combines Covered Software with other material, in a separate\n     file or files, that is not Covered Software.\n\n1.8. “License”\n\n     means this document.\n\n1.9. “Licensable”\n\n     means having the right to grant, to the maximum extent possible, whether at the\n     time of the initial grant or subsequently, any and all of the rights conveyed by\n     this License.\n\n1.10. “Modifications”\n\n     means any of the following:\n\n     a. any file in Source Code Form that results from an addition to, deletion\n        from, or modification of the contents of Covered Software; or\n\n     b. any new file in Source Code Form that contains any Covered Software.\n\n1.11. “Patent Claims” of a Contributor\n\n      means any patent claim(s), including without limitation, method, process,\n      and apparatus claims, in any patent Licensable by such Contributor that\n      would be infringed, but for the grant of the License, by the making,\n      using, selling, offering for sale, having made, import, or transfer of\n      either its Contributions or its Contributor Version.\n\n1.12. “Secondary License”\n\n      means either the GNU General Public License, Version 2.0, the GNU Lesser\n      General Public License, Version 2.1, the GNU Affero General Public\n      License, Version 3.0, or any later versions of those licenses.\n\n1.13. “Source Code Form”\n\n      means the form of the work preferred for making modifications.\n\n1.14. “You” (or “Your”)\n\n      means an individual or a legal entity exercising rights under this\n      License. For legal entities, “You” includes any entity that controls, is\n      controlled by, or is under common control with You. For purposes of this\n      definition, “control” means (a) the power, direct or indirect, to cause\n      the direction or management of such entity, whether by contract or\n      otherwise, or (b) ownership of more than fifty percent (50%) of the\n      outstanding shares or beneficial ownership of such entity.\n\n\n2. License Grants and Conditions\n\n2.1. Grants\n\n     Each Contributor hereby grants You a world-wide, royalty-free,\n     non-exclusive license:\n\n     a. under intellectual property rights (other than patent or trademark)\n        Licensable by such Contributor to use, reproduce, make available,\n        modify, display, perform, distribute, and otherwise exploit its\n        Contributions, either on an unmodified basis, with Modifications, or as\n        part of a Larger Work; and\n\n     b. under Patent Claims of such Contributor to make, use, sell, offer for\n        sale, have made, import, and otherwise transfer either its Contributions\n        or its Contributor Version.\n\n2.2. Effective Date\n\n     The licenses granted in Section 2.1 with respect to any Contribution become\n     effective for each Contribution on the date the Contributor first distributes\n     such Contribution.\n\n2.3. Limitations on Grant Scope\n\n     The licenses granted in this Section 2 are the only rights granted under this\n     License. No additional rights or licenses will be implied from the distribution\n     or licensing of Covered Software under this License. Notwithstanding Section\n     2.1(b) above, no patent license is granted by a Contributor:\n\n     a. for any code that a Contributor has removed from Covered Software; or\n\n     b. for infringements caused by: (i) Your and any other third party’s\n        modifications of Covered Software, or (ii) the combination of its\n        Contributions with other software (except as part of its Contributor\n        Version); or\n\n     c. under Patent Claims infringed by Covered Software in the absence of its\n        Contributions.\n\n     This License does not grant any rights in the trademarks, service marks, or\n     logos of any Contributor (except as may be necessary to comply with the\n     notice requirements in Section 3.4).\n\n2.4. Subsequent Licenses\n\n     No Contributor makes additional grants as a result of Your choice to\n     distribute the Covered Software under a subsequent version of this License\n     (see Section 10.2) or under the terms of a Secondary License (if permitted\n     under the terms of Section 3.3).\n\n2.5. Representation\n\n     Each Contributor represents that the Contributor believes its Contributions\n     are its original creation(s) or it has sufficient rights to grant the\n     rights to its Contributions conveyed by this License.\n\n2.6. Fair Use\n\n     This License is not intended to limit any rights You have under applicable\n     copyright doctrines of fair use, fair dealing, or other equivalents.\n\n2.7. Conditions\n\n     Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in\n     Section 2.1.\n\n\n3. Responsibilities\n\n3.1. Distribution of Source Form\n\n     All distribution of Covered Software in Source Code Form, including any\n     Modifications that You create or to which You contribute, must be under the\n     terms of this License. You must inform recipients that the Source Code Form\n     of the Covered Software is governed by the terms of this License, and how\n     they can obtain a copy of this License. You may not attempt to alter or\n     restrict the recipients’ rights in the Source Code Form.\n\n3.2. Distribution of Executable Form\n\n     If You distribute Covered Software in Executable Form then:\n\n     a. such Covered Software must also be made available in Source Code Form,\n        as described in Section 3.1, and You must inform recipients of the\n        Executable Form how they can obtain a copy of such Source Code Form by\n        reasonable means in a timely manner, at a charge no more than the cost\n        of distribution to the recipient; and\n\n     b. You may distribute such Executable Form under the terms of this License,\n        or sublicense it under different terms, provided that the license for\n        the Executable Form does not attempt to limit or alter the recipients’\n        rights in the Source Code Form under this License.\n\n3.3. Distribution of a Larger Work\n\n     You may create and distribute a Larger Work under terms of Your choice,\n     provided that You also comply with the requirements of this License for the\n     Covered Software. If the Larger Work is a combination of Covered Software\n     with a work governed by one or more Secondary Licenses, and the Covered\n     Software is not Incompatible With Secondary Licenses, this License permits\n     You to additionally distribute such Covered Software under the terms of\n     such Secondary License(s), so that the recipient of the Larger Work may, at\n     their option, further distribute the Covered Software under the terms of\n     either this License or such Secondary License(s).\n\n3.4. Notices\n\n     You may not remove or alter the substance of any license notices (including\n     copyright notices, patent notices, disclaimers of warranty, or limitations\n     of liability) contained within the Source Code Form of the Covered\n     Software, except that You may alter any license notices to the extent\n     required to remedy known factual inaccuracies.\n\n3.5. Application of Additional Terms\n\n     You may choose to offer, and to charge a fee for, warranty, support,\n     indemnity or liability obligations to one or more recipients of Covered\n     Software. However, You may do so only on Your own behalf, and not on behalf\n     of any Contributor. You must make it absolutely clear that any such\n     warranty, support, indemnity, or liability obligation is offered by You\n     alone, and You hereby agree to indemnify every Contributor for any\n     liability incurred by such Contributor as a result of warranty, support,\n     indemnity or liability terms You offer. You may include additional\n     disclaimers of warranty and limitations of liability specific to any\n     jurisdiction.\n\n4. Inability to Comply Due to Statute or Regulation\n\n   If it is impossible for You to comply with any of the terms of this License\n   with respect to some or all of the Covered Software due to statute, judicial\n   order, or regulation then You must: (a) comply with the terms of this License\n   to the maximum extent possible; and (b) describe the limitations and the code\n   they affect. Such description must be placed in a text file included with all\n   distributions of the Covered Software under this License. Except to the\n   extent prohibited by statute or regulation, such description must be\n   sufficiently detailed for a recipient of ordinary skill to be able to\n   understand it.\n\n5. Termination\n\n5.1. The rights granted under this License will terminate automatically if You\n     fail to comply with any of its terms. However, if You become compliant,\n     then the rights granted under this License from a particular Contributor\n     are reinstated (a) provisionally, unless and until such Contributor\n     explicitly and finally terminates Your grants, and (b) on an ongoing basis,\n     if such Contributor fails to notify You of the non-compliance by some\n     reasonable means prior to 60 days after You have come back into compliance.\n     Moreover, Your grants from a particular Contributor are reinstated on an\n     ongoing basis if such Contributor notifies You of the non-compliance by\n     some reasonable means, this is the first time You have received notice of\n     non-compliance with this License from such Contributor, and You become\n     compliant prior to 30 days after Your receipt of the notice.\n\n5.2. If You initiate litigation against any entity by asserting a patent\n     infringement claim (excluding declaratory judgment actions, counter-claims,\n     and cross-claims) alleging that a Contributor Version directly or\n     indirectly infringes any patent, then the rights granted to You by any and\n     all Contributors for the Covered Software under Section 2.1 of this License\n     shall terminate.\n\n5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user\n     license agreements (excluding distributors and resellers) which have been\n     validly granted by You or Your distributors under this License prior to\n     termination shall survive termination.\n\n6. Disclaimer of Warranty\n\n   Covered Software is provided under this License on an “as is” basis, without\n   warranty of any kind, either expressed, implied, or statutory, including,\n   without limitation, warranties that the Covered Software is free of defects,\n   merchantable, fit for a particular purpose or non-infringing. The entire\n   risk as to the quality and performance of the Covered Software is with You.\n   Should any Covered Software prove defective in any respect, You (not any\n   Contributor) assume the cost of any necessary servicing, repair, or\n   correction. This disclaimer of warranty constitutes an essential part of this\n   License. No use of  any Covered Software is authorized under this License\n   except under this disclaimer.\n\n7. Limitation of Liability\n\n   Under no circumstances and under no legal theory, whether tort (including\n   negligence), contract, or otherwise, shall any Contributor, or anyone who\n   distributes Covered Software as permitted above, be liable to You for any\n   direct, indirect, special, incidental, or consequential damages of any\n   character including, without limitation, damages for lost profits, loss of\n   goodwill, work stoppage, computer failure or malfunction, or any and all\n   other commercial damages or losses, even if such party shall have been\n   informed of the possibility of such damages. This limitation of liability\n   shall not apply to liability for death or personal injury resulting from such\n   party’s negligence to the extent applicable law prohibits such limitation.\n   Some jurisdictions do not allow the exclusion or limitation of incidental or\n   consequential damages, so this exclusion and limitation may not apply to You.\n\n8. Litigation\n\n   Any litigation relating to this License may be brought only in the courts of\n   a jurisdiction where the defendant maintains its principal place of business\n   and such litigation shall be governed by laws of that jurisdiction, without\n   reference to its conflict-of-law provisions. Nothing in this Section shall\n   prevent a party’s ability to bring cross-claims or counter-claims.\n\n9. Miscellaneous\n\n   This License represents the complete agreement concerning the subject matter\n   hereof. If any provision of this License is held to be unenforceable, such\n   provision shall be reformed only to the extent necessary to make it\n   enforceable. Any law or regulation which provides that the language of a\n   contract shall be construed against the drafter shall not be used to construe\n   this License against a Contributor.\n\n\n10. Versions of the License\n\n10.1. New Versions\n\n      Mozilla Foundation is the license steward. Except as provided in Section\n      10.3, no one other than the license steward has the right to modify or\n      publish new versions of this License. Each version will be given a\n      distinguishing version number.\n\n10.2. Effect of New Versions\n\n      You may distribute the Covered Software under the terms of the version of\n      the License under which You originally received the Covered Software, or\n      under the terms of any subsequent version published by the license\n      steward.\n\n10.3. Modified Versions\n\n      If you create software not governed by this License, and you want to\n      create a new license for such software, you may create and use a modified\n      version of this License if you rename the license and remove any\n      references to the name of the license steward (except to note that such\n      modified license differs from this License).\n\n10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses\n      If You choose to distribute Source Code Form that is Incompatible With\n      Secondary Licenses under the terms of this version of the License, the\n      notice described in Exhibit B of this License must be attached.\n\nExhibit A - Source Code Form License Notice\n\n      This Source Code Form is subject to the\n      terms of the Mozilla Public License, v.\n      2.0. If a copy of the MPL was not\n      distributed with this file, You can\n      obtain one at\n      http://mozilla.org/MPL/2.0/.\n\nIf it is not possible or desirable to put the notice in a particular file, then\nYou may include the notice in a location (such as a LICENSE file in a relevant\ndirectory) where a recipient would be likely to look for such a notice.\n\nYou may add additional accurate notices of copyright ownership.\n\nExhibit B - “Incompatible With Secondary Licenses” Notice\n\n      This Source Code Form is “Incompatible\n      With Secondary Licenses”, as defined by\n      the Mozilla Public License, v. 2.0.\n\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-version/constraint.go",
    "content": "package version\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\t\"regexp\"\n\t\"strings\"\n)\n\n// Constraint represents a single constraint for a version, such as\n// \">= 1.0\".\ntype Constraint struct {\n\tf        constraintFunc\n\tcheck    *Version\n\toriginal string\n}\n\n// Constraints is a slice of constraints. We make a custom type so that\n// we can add methods to it.\ntype Constraints []*Constraint\n\ntype constraintFunc func(v, c *Version) bool\n\nvar constraintOperators map[string]constraintFunc\n\nvar constraintRegexp *regexp.Regexp\n\nfunc init() {\n\tconstraintOperators = map[string]constraintFunc{\n\t\t\"\":   constraintEqual,\n\t\t\"=\":  constraintEqual,\n\t\t\"!=\": constraintNotEqual,\n\t\t\">\":  constraintGreaterThan,\n\t\t\"<\":  constraintLessThan,\n\t\t\">=\": constraintGreaterThanEqual,\n\t\t\"<=\": constraintLessThanEqual,\n\t\t\"~>\": constraintPessimistic,\n\t}\n\n\tops := make([]string, 0, len(constraintOperators))\n\tfor k := range constraintOperators {\n\t\tops = append(ops, regexp.QuoteMeta(k))\n\t}\n\n\tconstraintRegexp = regexp.MustCompile(fmt.Sprintf(\n\t\t`^\\s*(%s)\\s*(%s)\\s*$`,\n\t\tstrings.Join(ops, \"|\"),\n\t\tVersionRegexpRaw))\n}\n\n// NewConstraint will parse one or more constraints from the given\n// constraint string. The string must be a comma-separated list of\n// constraints.\nfunc NewConstraint(v string) (Constraints, error) {\n\tvs := strings.Split(v, \",\")\n\tresult := make([]*Constraint, len(vs))\n\tfor i, single := range vs {\n\t\tc, err := parseSingle(single)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tresult[i] = c\n\t}\n\n\treturn Constraints(result), nil\n}\n\n// Check tests if a version satisfies all the constraints.\nfunc (cs Constraints) Check(v *Version) bool {\n\tfor _, c := range cs {\n\t\tif !c.Check(v) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\treturn true\n}\n\n// Returns the string format of the constraints\nfunc (cs Constraints) String() string {\n\tcsStr := make([]string, len(cs))\n\tfor i, c := range cs {\n\t\tcsStr[i] = c.String()\n\t}\n\n\treturn strings.Join(csStr, \",\")\n}\n\n// Check tests if a constraint is validated by the given version.\nfunc (c *Constraint) Check(v *Version) bool {\n\treturn c.f(v, c.check)\n}\n\nfunc (c *Constraint) String() string {\n\treturn c.original\n}\n\nfunc parseSingle(v string) (*Constraint, error) {\n\tmatches := constraintRegexp.FindStringSubmatch(v)\n\tif matches == nil {\n\t\treturn nil, fmt.Errorf(\"Malformed constraint: %s\", v)\n\t}\n\n\tcheck, err := NewVersion(matches[2])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &Constraint{\n\t\tf:        constraintOperators[matches[1]],\n\t\tcheck:    check,\n\t\toriginal: v,\n\t}, nil\n}\n\nfunc prereleaseCheck(v, c *Version) bool {\n\tswitch vPre, cPre := v.Prerelease() != \"\", c.Prerelease() != \"\"; {\n\tcase cPre && vPre:\n\t\t// A constraint with a pre-release can only match a pre-release version\n\t\t// with the same base segments.\n\t\treturn reflect.DeepEqual(c.Segments64(), v.Segments64())\n\n\tcase !cPre && vPre:\n\t\t// A constraint without a pre-release can only match a version without a\n\t\t// pre-release.\n\t\treturn false\n\n\tcase cPre && !vPre:\n\t\t// OK, except with the pessimistic operator\n\tcase !cPre && !vPre:\n\t\t// OK\n\t}\n\treturn true\n}\n\n//-------------------------------------------------------------------\n// Constraint functions\n//-------------------------------------------------------------------\n\nfunc constraintEqual(v, c *Version) bool {\n\treturn v.Equal(c)\n}\n\nfunc constraintNotEqual(v, c *Version) bool {\n\treturn !v.Equal(c)\n}\n\nfunc constraintGreaterThan(v, c *Version) bool {\n\treturn prereleaseCheck(v, c) && v.Compare(c) == 1\n}\n\nfunc constraintLessThan(v, c *Version) bool {\n\treturn prereleaseCheck(v, c) && v.Compare(c) == -1\n}\n\nfunc constraintGreaterThanEqual(v, c *Version) bool {\n\treturn prereleaseCheck(v, c) && v.Compare(c) >= 0\n}\n\nfunc constraintLessThanEqual(v, c *Version) bool {\n\treturn prereleaseCheck(v, c) && v.Compare(c) <= 0\n}\n\nfunc constraintPessimistic(v, c *Version) bool {\n\t// Using a pessimistic constraint with a pre-release, restricts versions to pre-releases\n\tif !prereleaseCheck(v, c) || (c.Prerelease() != \"\" && v.Prerelease() == \"\") {\n\t\treturn false\n\t}\n\n\t// If the version being checked is naturally less than the constraint, then there\n\t// is no way for the version to be valid against the constraint\n\tif v.LessThan(c) {\n\t\treturn false\n\t}\n\t// We'll use this more than once, so grab the length now so it's a little cleaner\n\t// to write the later checks\n\tcs := len(c.segments)\n\n\t// If the version being checked has less specificity than the constraint, then there\n\t// is no way for the version to be valid against the constraint\n\tif cs > len(v.segments) {\n\t\treturn false\n\t}\n\n\t// Check the segments in the constraint against those in the version. If the version\n\t// being checked, at any point, does not have the same values in each index of the\n\t// constraints segments, then it cannot be valid against the constraint.\n\tfor i := 0; i < c.si-1; i++ {\n\t\tif v.segments[i] != c.segments[i] {\n\t\t\treturn false\n\t\t}\n\t}\n\n\t// Check the last part of the segment in the constraint. If the version segment at\n\t// this index is less than the constraints segment at this index, then it cannot\n\t// be valid against the constraint\n\tif c.segments[cs-1] > v.segments[cs-1] {\n\t\treturn false\n\t}\n\n\t// If nothing has rejected the version by now, it's valid\n\treturn true\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-version/version.go",
    "content": "package version\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"regexp\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// The compiled regular expression used to test the validity of a version.\nvar (\n\tversionRegexp *regexp.Regexp\n\tsemverRegexp  *regexp.Regexp\n)\n\n// The raw regular expression string used for testing the validity\n// of a version.\nconst (\n\tVersionRegexpRaw string = `v?([0-9]+(\\.[0-9]+)*?)` +\n\t\t`(-([0-9]+[0-9A-Za-z\\-~]*(\\.[0-9A-Za-z\\-~]+)*)|(-?([A-Za-z\\-~]+[0-9A-Za-z\\-~]*(\\.[0-9A-Za-z\\-~]+)*)))?` +\n\t\t`(\\+([0-9A-Za-z\\-~]+(\\.[0-9A-Za-z\\-~]+)*))?` +\n\t\t`?`\n\n\t// SemverRegexpRaw requires a separator between version and prerelease\n\tSemverRegexpRaw string = `v?([0-9]+(\\.[0-9]+)*?)` +\n\t\t`(-([0-9]+[0-9A-Za-z\\-~]*(\\.[0-9A-Za-z\\-~]+)*)|(-([A-Za-z\\-~]+[0-9A-Za-z\\-~]*(\\.[0-9A-Za-z\\-~]+)*)))?` +\n\t\t`(\\+([0-9A-Za-z\\-~]+(\\.[0-9A-Za-z\\-~]+)*))?` +\n\t\t`?`\n)\n\n// Version represents a single version.\ntype Version struct {\n\tmetadata string\n\tpre      string\n\tsegments []int64\n\tsi       int\n\toriginal string\n}\n\nfunc init() {\n\tversionRegexp = regexp.MustCompile(\"^\" + VersionRegexpRaw + \"$\")\n\tsemverRegexp = regexp.MustCompile(\"^\" + SemverRegexpRaw + \"$\")\n}\n\n// NewVersion parses the given version and returns a new\n// Version.\nfunc NewVersion(v string) (*Version, error) {\n\treturn newVersion(v, versionRegexp)\n}\n\n// NewSemver parses the given version and returns a new\n// Version that adheres strictly to SemVer specs\n// https://semver.org/\nfunc NewSemver(v string) (*Version, error) {\n\treturn newVersion(v, semverRegexp)\n}\n\nfunc newVersion(v string, pattern *regexp.Regexp) (*Version, error) {\n\tmatches := pattern.FindStringSubmatch(v)\n\tif matches == nil {\n\t\treturn nil, fmt.Errorf(\"Malformed version: %s\", v)\n\t}\n\tsegmentsStr := strings.Split(matches[1], \".\")\n\tsegments := make([]int64, len(segmentsStr))\n\tsi := 0\n\tfor i, str := range segmentsStr {\n\t\tval, err := strconv.ParseInt(str, 10, 64)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\"Error parsing version: %s\", err)\n\t\t}\n\n\t\tsegments[i] = int64(val)\n\t\tsi++\n\t}\n\n\t// Even though we could support more than three segments, if we\n\t// got less than three, pad it with 0s. This is to cover the basic\n\t// default usecase of semver, which is MAJOR.MINOR.PATCH at the minimum\n\tfor i := len(segments); i < 3; i++ {\n\t\tsegments = append(segments, 0)\n\t}\n\n\tpre := matches[7]\n\tif pre == \"\" {\n\t\tpre = matches[4]\n\t}\n\n\treturn &Version{\n\t\tmetadata: matches[10],\n\t\tpre:      pre,\n\t\tsegments: segments,\n\t\tsi:       si,\n\t\toriginal: v,\n\t}, nil\n}\n\n// Must is a helper that wraps a call to a function returning (*Version, error)\n// and panics if error is non-nil.\nfunc Must(v *Version, err error) *Version {\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\treturn v\n}\n\n// Compare compares this version to another version. This\n// returns -1, 0, or 1 if this version is smaller, equal,\n// or larger than the other version, respectively.\n//\n// If you want boolean results, use the LessThan, Equal,\n// GreaterThan, GreaterThanOrEqual or LessThanOrEqual methods.\nfunc (v *Version) Compare(other *Version) int {\n\t// A quick, efficient equality check\n\tif v.String() == other.String() {\n\t\treturn 0\n\t}\n\n\tsegmentsSelf := v.Segments64()\n\tsegmentsOther := other.Segments64()\n\n\t// If the segments are the same, we must compare on prerelease info\n\tif reflect.DeepEqual(segmentsSelf, segmentsOther) {\n\t\tpreSelf := v.Prerelease()\n\t\tpreOther := other.Prerelease()\n\t\tif preSelf == \"\" && preOther == \"\" {\n\t\t\treturn 0\n\t\t}\n\t\tif preSelf == \"\" {\n\t\t\treturn 1\n\t\t}\n\t\tif preOther == \"\" {\n\t\t\treturn -1\n\t\t}\n\n\t\treturn comparePrereleases(preSelf, preOther)\n\t}\n\n\t// Get the highest specificity (hS), or if they're equal, just use segmentSelf length\n\tlenSelf := len(segmentsSelf)\n\tlenOther := len(segmentsOther)\n\thS := lenSelf\n\tif lenSelf < lenOther {\n\t\thS = lenOther\n\t}\n\t// Compare the segments\n\t// Because a constraint could have more/less specificity than the version it's\n\t// checking, we need to account for a lopsided or jagged comparison\n\tfor i := 0; i < hS; i++ {\n\t\tif i > lenSelf-1 {\n\t\t\t// This means Self had the lower specificity\n\t\t\t// Check to see if the remaining segments in Other are all zeros\n\t\t\tif !allZero(segmentsOther[i:]) {\n\t\t\t\t// if not, it means that Other has to be greater than Self\n\t\t\t\treturn -1\n\t\t\t}\n\t\t\tbreak\n\t\t} else if i > lenOther-1 {\n\t\t\t// this means Other had the lower specificity\n\t\t\t// Check to see if the remaining segments in Self are all zeros -\n\t\t\tif !allZero(segmentsSelf[i:]) {\n\t\t\t\t//if not, it means that Self has to be greater than Other\n\t\t\t\treturn 1\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\t\tlhs := segmentsSelf[i]\n\t\trhs := segmentsOther[i]\n\t\tif lhs == rhs {\n\t\t\tcontinue\n\t\t} else if lhs < rhs {\n\t\t\treturn -1\n\t\t}\n\t\t// Otherwis, rhs was > lhs, they're not equal\n\t\treturn 1\n\t}\n\n\t// if we got this far, they're equal\n\treturn 0\n}\n\nfunc allZero(segs []int64) bool {\n\tfor _, s := range segs {\n\t\tif s != 0 {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\nfunc comparePart(preSelf string, preOther string) int {\n\tif preSelf == preOther {\n\t\treturn 0\n\t}\n\n\tvar selfInt int64\n\tselfNumeric := true\n\tselfInt, err := strconv.ParseInt(preSelf, 10, 64)\n\tif err != nil {\n\t\tselfNumeric = false\n\t}\n\n\tvar otherInt int64\n\totherNumeric := true\n\totherInt, err = strconv.ParseInt(preOther, 10, 64)\n\tif err != nil {\n\t\totherNumeric = false\n\t}\n\n\t// if a part is empty, we use the other to decide\n\tif preSelf == \"\" {\n\t\tif otherNumeric {\n\t\t\treturn -1\n\t\t}\n\t\treturn 1\n\t}\n\n\tif preOther == \"\" {\n\t\tif selfNumeric {\n\t\t\treturn 1\n\t\t}\n\t\treturn -1\n\t}\n\n\tif selfNumeric && !otherNumeric {\n\t\treturn -1\n\t} else if !selfNumeric && otherNumeric {\n\t\treturn 1\n\t} else if !selfNumeric && !otherNumeric && preSelf > preOther {\n\t\treturn 1\n\t} else if selfInt > otherInt {\n\t\treturn 1\n\t}\n\n\treturn -1\n}\n\nfunc comparePrereleases(v string, other string) int {\n\t// the same pre release!\n\tif v == other {\n\t\treturn 0\n\t}\n\n\t// split both pre releases for analyse their parts\n\tselfPreReleaseMeta := strings.Split(v, \".\")\n\totherPreReleaseMeta := strings.Split(other, \".\")\n\n\tselfPreReleaseLen := len(selfPreReleaseMeta)\n\totherPreReleaseLen := len(otherPreReleaseMeta)\n\n\tbiggestLen := otherPreReleaseLen\n\tif selfPreReleaseLen > otherPreReleaseLen {\n\t\tbiggestLen = selfPreReleaseLen\n\t}\n\n\t// loop for parts to find the first difference\n\tfor i := 0; i < biggestLen; i = i + 1 {\n\t\tpartSelfPre := \"\"\n\t\tif i < selfPreReleaseLen {\n\t\t\tpartSelfPre = selfPreReleaseMeta[i]\n\t\t}\n\n\t\tpartOtherPre := \"\"\n\t\tif i < otherPreReleaseLen {\n\t\t\tpartOtherPre = otherPreReleaseMeta[i]\n\t\t}\n\n\t\tcompare := comparePart(partSelfPre, partOtherPre)\n\t\t// if parts are equals, continue the loop\n\t\tif compare != 0 {\n\t\t\treturn compare\n\t\t}\n\t}\n\n\treturn 0\n}\n\n// Equal tests if two versions are equal.\nfunc (v *Version) Equal(o *Version) bool {\n\treturn v.Compare(o) == 0\n}\n\n// GreaterThan tests if this version is greater than another version.\nfunc (v *Version) GreaterThan(o *Version) bool {\n\treturn v.Compare(o) > 0\n}\n\n// GreaterThanOrEqual tests if this version is greater than or equal to another version.\nfunc (v *Version) GreaterThanOrEqual(o *Version) bool {\n\treturn v.Compare(o) >= 0\n}\n\n// LessThan tests if this version is less than another version.\nfunc (v *Version) LessThan(o *Version) bool {\n\treturn v.Compare(o) < 0\n}\n\n// LessThanOrEqual tests if this version is less than or equal to another version.\nfunc (v *Version) LessThanOrEqual(o *Version) bool {\n\treturn v.Compare(o) <= 0\n}\n\n// Metadata returns any metadata that was part of the version\n// string.\n//\n// Metadata is anything that comes after the \"+\" in the version.\n// For example, with \"1.2.3+beta\", the metadata is \"beta\".\nfunc (v *Version) Metadata() string {\n\treturn v.metadata\n}\n\n// Prerelease returns any prerelease data that is part of the version,\n// or blank if there is no prerelease data.\n//\n// Prerelease information is anything that comes after the \"-\" in the\n// version (but before any metadata). For example, with \"1.2.3-beta\",\n// the prerelease information is \"beta\".\nfunc (v *Version) Prerelease() string {\n\treturn v.pre\n}\n\n// Segments returns the numeric segments of the version as a slice of ints.\n//\n// This excludes any metadata or pre-release information. For example,\n// for a version \"1.2.3-beta\", segments will return a slice of\n// 1, 2, 3.\nfunc (v *Version) Segments() []int {\n\tsegmentSlice := make([]int, len(v.segments))\n\tfor i, v := range v.segments {\n\t\tsegmentSlice[i] = int(v)\n\t}\n\treturn segmentSlice\n}\n\n// Segments64 returns the numeric segments of the version as a slice of int64s.\n//\n// This excludes any metadata or pre-release information. For example,\n// for a version \"1.2.3-beta\", segments will return a slice of\n// 1, 2, 3.\nfunc (v *Version) Segments64() []int64 {\n\tresult := make([]int64, len(v.segments))\n\tcopy(result, v.segments)\n\treturn result\n}\n\n// String returns the full version string included pre-release\n// and metadata information.\n//\n// This value is rebuilt according to the parsed segments and other\n// information. Therefore, ambiguities in the version string such as\n// prefixed zeroes (1.04.0 => 1.4.0), `v` prefix (v1.0.0 => 1.0.0), and\n// missing parts (1.0 => 1.0.0) will be made into a canonicalized form\n// as shown in the parenthesized examples.\nfunc (v *Version) String() string {\n\tvar buf bytes.Buffer\n\tfmtParts := make([]string, len(v.segments))\n\tfor i, s := range v.segments {\n\t\t// We can ignore err here since we've pre-parsed the values in segments\n\t\tstr := strconv.FormatInt(s, 10)\n\t\tfmtParts[i] = str\n\t}\n\tfmt.Fprintf(&buf, strings.Join(fmtParts, \".\"))\n\tif v.pre != \"\" {\n\t\tfmt.Fprintf(&buf, \"-%s\", v.pre)\n\t}\n\tif v.metadata != \"\" {\n\t\tfmt.Fprintf(&buf, \"+%s\", v.metadata)\n\t}\n\n\treturn buf.String()\n}\n\n// Original returns the original parsed version as-is, including any\n// potential whitespace, `v` prefix, etc.\nfunc (v *Version) Original() string {\n\treturn v.original\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/go-version/version_collection.go",
    "content": "package version\n\n// Collection is a type that implements the sort.Interface interface\n// so that versions can be sorted.\ntype Collection []*Version\n\nfunc (v Collection) Len() int {\n\treturn len(v)\n}\n\nfunc (v Collection) Less(i, j int) bool {\n\treturn v[i].LessThan(v[j])\n}\n\nfunc (v Collection) Swap(i, j int) {\n\tv[i], v[j] = v[j], v[i]\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/golang-lru/LICENSE",
    "content": "Mozilla Public License, version 2.0\n\n1. Definitions\n\n1.1. \"Contributor\"\n\n     means each individual or legal entity that creates, contributes to the\n     creation of, or owns Covered Software.\n\n1.2. \"Contributor Version\"\n\n     means the combination of the Contributions of others (if any) used by a\n     Contributor and that particular Contributor's Contribution.\n\n1.3. \"Contribution\"\n\n     means Covered Software of a particular Contributor.\n\n1.4. \"Covered Software\"\n\n     means Source Code Form to which the initial Contributor has attached the\n     notice in Exhibit A, the Executable Form of such Source Code Form, and\n     Modifications of such Source Code Form, in each case including portions\n     thereof.\n\n1.5. \"Incompatible With Secondary Licenses\"\n     means\n\n     a. that the initial Contributor has attached the notice described in\n        Exhibit B to the Covered Software; or\n\n     b. that the Covered Software was made available under the terms of\n        version 1.1 or earlier of the License, but not also under the terms of\n        a Secondary License.\n\n1.6. \"Executable Form\"\n\n     means any form of the work other than Source Code Form.\n\n1.7. \"Larger Work\"\n\n     means a work that combines Covered Software with other material, in a\n     separate file or files, that is not Covered Software.\n\n1.8. \"License\"\n\n     means this document.\n\n1.9. \"Licensable\"\n\n     means having the right to grant, to the maximum extent possible, whether\n     at the time of the initial grant or subsequently, any and all of the\n     rights conveyed by this License.\n\n1.10. \"Modifications\"\n\n     means any of the following:\n\n     a. any file in Source Code Form that results from an addition to,\n        deletion from, or modification of the contents of Covered Software; or\n\n     b. any new file in Source Code Form that contains any Covered Software.\n\n1.11. \"Patent Claims\" of a Contributor\n\n      means any patent claim(s), including without limitation, method,\n      process, and apparatus claims, in any patent Licensable by such\n      Contributor that would be infringed, but for the grant of the License,\n      by the making, using, selling, offering for sale, having made, import,\n      or transfer of either its Contributions or its Contributor Version.\n\n1.12. \"Secondary License\"\n\n      means either the GNU General Public License, Version 2.0, the GNU Lesser\n      General Public License, Version 2.1, the GNU Affero General Public\n      License, Version 3.0, or any later versions of those licenses.\n\n1.13. \"Source Code Form\"\n\n      means the form of the work preferred for making modifications.\n\n1.14. \"You\" (or \"Your\")\n\n      means an individual or a legal entity exercising rights under this\n      License. For legal entities, \"You\" includes any entity that controls, is\n      controlled by, or is under common control with You. For purposes of this\n      definition, \"control\" means (a) the power, direct or indirect, to cause\n      the direction or management of such entity, whether by contract or\n      otherwise, or (b) ownership of more than fifty percent (50%) of the\n      outstanding shares or beneficial ownership of such entity.\n\n\n2. License Grants and Conditions\n\n2.1. Grants\n\n     Each Contributor hereby grants You a world-wide, royalty-free,\n     non-exclusive license:\n\n     a. under intellectual property rights (other than patent or trademark)\n        Licensable by such Contributor to use, reproduce, make available,\n        modify, display, perform, distribute, and otherwise exploit its\n        Contributions, either on an unmodified basis, with Modifications, or\n        as part of a Larger Work; and\n\n     b. under Patent Claims of such Contributor to make, use, sell, offer for\n        sale, have made, import, and otherwise transfer either its\n        Contributions or its Contributor Version.\n\n2.2. Effective Date\n\n     The licenses granted in Section 2.1 with respect to any Contribution\n     become effective for each Contribution on the date the Contributor first\n     distributes such Contribution.\n\n2.3. Limitations on Grant Scope\n\n     The licenses granted in this Section 2 are the only rights granted under\n     this License. No additional rights or licenses will be implied from the\n     distribution or licensing of Covered Software under this License.\n     Notwithstanding Section 2.1(b) above, no patent license is granted by a\n     Contributor:\n\n     a. for any code that a Contributor has removed from Covered Software; or\n\n     b. for infringements caused by: (i) Your and any other third party's\n        modifications of Covered Software, or (ii) the combination of its\n        Contributions with other software (except as part of its Contributor\n        Version); or\n\n     c. under Patent Claims infringed by Covered Software in the absence of\n        its Contributions.\n\n     This License does not grant any rights in the trademarks, service marks,\n     or logos of any Contributor (except as may be necessary to comply with\n     the notice requirements in Section 3.4).\n\n2.4. Subsequent Licenses\n\n     No Contributor makes additional grants as a result of Your choice to\n     distribute the Covered Software under a subsequent version of this\n     License (see Section 10.2) or under the terms of a Secondary License (if\n     permitted under the terms of Section 3.3).\n\n2.5. Representation\n\n     Each Contributor represents that the Contributor believes its\n     Contributions are its original creation(s) or it has sufficient rights to\n     grant the rights to its Contributions conveyed by this License.\n\n2.6. Fair Use\n\n     This License is not intended to limit any rights You have under\n     applicable copyright doctrines of fair use, fair dealing, or other\n     equivalents.\n\n2.7. Conditions\n\n     Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in\n     Section 2.1.\n\n\n3. Responsibilities\n\n3.1. Distribution of Source Form\n\n     All distribution of Covered Software in Source Code Form, including any\n     Modifications that You create or to which You contribute, must be under\n     the terms of this License. You must inform recipients that the Source\n     Code Form of the Covered Software is governed by the terms of this\n     License, and how they can obtain a copy of this License. You may not\n     attempt to alter or restrict the recipients' rights in the Source Code\n     Form.\n\n3.2. Distribution of Executable Form\n\n     If You distribute Covered Software in Executable Form then:\n\n     a. such Covered Software must also be made available in Source Code Form,\n        as described in Section 3.1, and You must inform recipients of the\n        Executable Form how they can obtain a copy of such Source Code Form by\n        reasonable means in a timely manner, at a charge no more than the cost\n        of distribution to the recipient; and\n\n     b. You may distribute such Executable Form under the terms of this\n        License, or sublicense it under different terms, provided that the\n        license for the Executable Form does not attempt to limit or alter the\n        recipients' rights in the Source Code Form under this License.\n\n3.3. Distribution of a Larger Work\n\n     You may create and distribute a Larger Work under terms of Your choice,\n     provided that You also comply with the requirements of this License for\n     the Covered Software. If the Larger Work is a combination of Covered\n     Software with a work governed by one or more Secondary Licenses, and the\n     Covered Software is not Incompatible With Secondary Licenses, this\n     License permits You to additionally distribute such Covered Software\n     under the terms of such Secondary License(s), so that the recipient of\n     the Larger Work may, at their option, further distribute the Covered\n     Software under the terms of either this License or such Secondary\n     License(s).\n\n3.4. Notices\n\n     You may not remove or alter the substance of any license notices\n     (including copyright notices, patent notices, disclaimers of warranty, or\n     limitations of liability) contained within the Source Code Form of the\n     Covered Software, except that You may alter any license notices to the\n     extent required to remedy known factual inaccuracies.\n\n3.5. Application of Additional Terms\n\n     You may choose to offer, and to charge a fee for, warranty, support,\n     indemnity or liability obligations to one or more recipients of Covered\n     Software. However, You may do so only on Your own behalf, and not on\n     behalf of any Contributor. You must make it absolutely clear that any\n     such warranty, support, indemnity, or liability obligation is offered by\n     You alone, and You hereby agree to indemnify every Contributor for any\n     liability incurred by such Contributor as a result of warranty, support,\n     indemnity or liability terms You offer. You may include additional\n     disclaimers of warranty and limitations of liability specific to any\n     jurisdiction.\n\n4. Inability to Comply Due to Statute or Regulation\n\n   If it is impossible for You to comply with any of the terms of this License\n   with respect to some or all of the Covered Software due to statute,\n   judicial order, or regulation then You must: (a) comply with the terms of\n   this License to the maximum extent possible; and (b) describe the\n   limitations and the code they affect. Such description must be placed in a\n   text file included with all distributions of the Covered Software under\n   this License. Except to the extent prohibited by statute or regulation,\n   such description must be sufficiently detailed for a recipient of ordinary\n   skill to be able to understand it.\n\n5. Termination\n\n5.1. The rights granted under this License will terminate automatically if You\n     fail to comply with any of its terms. However, if You become compliant,\n     then the rights granted under this License from a particular Contributor\n     are reinstated (a) provisionally, unless and until such Contributor\n     explicitly and finally terminates Your grants, and (b) on an ongoing\n     basis, if such Contributor fails to notify You of the non-compliance by\n     some reasonable means prior to 60 days after You have come back into\n     compliance. Moreover, Your grants from a particular Contributor are\n     reinstated on an ongoing basis if such Contributor notifies You of the\n     non-compliance by some reasonable means, this is the first time You have\n     received notice of non-compliance with this License from such\n     Contributor, and You become compliant prior to 30 days after Your receipt\n     of the notice.\n\n5.2. If You initiate litigation against any entity by asserting a patent\n     infringement claim (excluding declaratory judgment actions,\n     counter-claims, and cross-claims) alleging that a Contributor Version\n     directly or indirectly infringes any patent, then the rights granted to\n     You by any and all Contributors for the Covered Software under Section\n     2.1 of this License shall terminate.\n\n5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user\n     license agreements (excluding distributors and resellers) which have been\n     validly granted by You or Your distributors under this License prior to\n     termination shall survive termination.\n\n6. Disclaimer of Warranty\n\n   Covered Software is provided under this License on an \"as is\" basis,\n   without warranty of any kind, either expressed, implied, or statutory,\n   including, without limitation, warranties that the Covered Software is free\n   of defects, merchantable, fit for a particular purpose or non-infringing.\n   The entire risk as to the quality and performance of the Covered Software\n   is with You. Should any Covered Software prove defective in any respect,\n   You (not any Contributor) assume the cost of any necessary servicing,\n   repair, or correction. This disclaimer of warranty constitutes an essential\n   part of this License. No use of  any Covered Software is authorized under\n   this License except under this disclaimer.\n\n7. Limitation of Liability\n\n   Under no circumstances and under no legal theory, whether tort (including\n   negligence), contract, or otherwise, shall any Contributor, or anyone who\n   distributes Covered Software as permitted above, be liable to You for any\n   direct, indirect, special, incidental, or consequential damages of any\n   character including, without limitation, damages for lost profits, loss of\n   goodwill, work stoppage, computer failure or malfunction, or any and all\n   other commercial damages or losses, even if such party shall have been\n   informed of the possibility of such damages. This limitation of liability\n   shall not apply to liability for death or personal injury resulting from\n   such party's negligence to the extent applicable law prohibits such\n   limitation. Some jurisdictions do not allow the exclusion or limitation of\n   incidental or consequential damages, so this exclusion and limitation may\n   not apply to You.\n\n8. Litigation\n\n   Any litigation relating to this License may be brought only in the courts\n   of a jurisdiction where the defendant maintains its principal place of\n   business and such litigation shall be governed by laws of that\n   jurisdiction, without reference to its conflict-of-law provisions. Nothing\n   in this Section shall prevent a party's ability to bring cross-claims or\n   counter-claims.\n\n9. Miscellaneous\n\n   This License represents the complete agreement concerning the subject\n   matter hereof. If any provision of this License is held to be\n   unenforceable, such provision shall be reformed only to the extent\n   necessary to make it enforceable. Any law or regulation which provides that\n   the language of a contract shall be construed against the drafter shall not\n   be used to construe this License against a Contributor.\n\n\n10. Versions of the License\n\n10.1. New Versions\n\n      Mozilla Foundation is the license steward. Except as provided in Section\n      10.3, no one other than the license steward has the right to modify or\n      publish new versions of this License. Each version will be given a\n      distinguishing version number.\n\n10.2. Effect of New Versions\n\n      You may distribute the Covered Software under the terms of the version\n      of the License under which You originally received the Covered Software,\n      or under the terms of any subsequent version published by the license\n      steward.\n\n10.3. Modified Versions\n\n      If you create software not governed by this License, and you want to\n      create a new license for such software, you may create and use a\n      modified version of this License if you rename the license and remove\n      any references to the name of the license steward (except to note that\n      such modified license differs from this License).\n\n10.4. Distributing Source Code Form that is Incompatible With Secondary\n      Licenses If You choose to distribute Source Code Form that is\n      Incompatible With Secondary Licenses under the terms of this version of\n      the License, the notice described in Exhibit B of this License must be\n      attached.\n\nExhibit A - Source Code Form License Notice\n\n      This Source Code Form is subject to the\n      terms of the Mozilla Public License, v.\n      2.0. If a copy of the MPL was not\n      distributed with this file, You can\n      obtain one at\n      http://mozilla.org/MPL/2.0/.\n\nIf it is not possible or desirable to put the notice in a particular file,\nthen You may include the notice in a location (such as a LICENSE file in a\nrelevant directory) where a recipient would be likely to look for such a\nnotice.\n\nYou may add additional accurate notices of copyright ownership.\n\nExhibit B - \"Incompatible With Secondary Licenses\" Notice\n\n      This Source Code Form is \"Incompatible\n      With Secondary Licenses\", as defined by\n      the Mozilla Public License, v. 2.0.\n"
  },
  {
    "path": "vendor/github.com/hashicorp/golang-lru/simplelru/lru.go",
    "content": "package simplelru\n\nimport (\n\t\"container/list\"\n\t\"errors\"\n)\n\n// EvictCallback is used to get a callback when a cache entry is evicted\ntype EvictCallback func(key interface{}, value interface{})\n\n// LRU implements a non-thread safe fixed size LRU cache\ntype LRU struct {\n\tsize      int\n\tevictList *list.List\n\titems     map[interface{}]*list.Element\n\tonEvict   EvictCallback\n}\n\n// entry is used to hold a value in the evictList\ntype entry struct {\n\tkey   interface{}\n\tvalue interface{}\n}\n\n// NewLRU constructs an LRU of the given size\nfunc NewLRU(size int, onEvict EvictCallback) (*LRU, error) {\n\tif size <= 0 {\n\t\treturn nil, errors.New(\"Must provide a positive size\")\n\t}\n\tc := &LRU{\n\t\tsize:      size,\n\t\tevictList: list.New(),\n\t\titems:     make(map[interface{}]*list.Element),\n\t\tonEvict:   onEvict,\n\t}\n\treturn c, nil\n}\n\n// Purge is used to completely clear the cache.\nfunc (c *LRU) Purge() {\n\tfor k, v := range c.items {\n\t\tif c.onEvict != nil {\n\t\t\tc.onEvict(k, v.Value.(*entry).value)\n\t\t}\n\t\tdelete(c.items, k)\n\t}\n\tc.evictList.Init()\n}\n\n// Add adds a value to the cache.  Returns true if an eviction occurred.\nfunc (c *LRU) Add(key, value interface{}) (evicted bool) {\n\t// Check for existing item\n\tif ent, ok := c.items[key]; ok {\n\t\tc.evictList.MoveToFront(ent)\n\t\tent.Value.(*entry).value = value\n\t\treturn false\n\t}\n\n\t// Add new item\n\tent := &entry{key, value}\n\tentry := c.evictList.PushFront(ent)\n\tc.items[key] = entry\n\n\tevict := c.evictList.Len() > c.size\n\t// Verify size not exceeded\n\tif evict {\n\t\tc.removeOldest()\n\t}\n\treturn evict\n}\n\n// Get looks up a key's value from the cache.\nfunc (c *LRU) Get(key interface{}) (value interface{}, ok bool) {\n\tif ent, ok := c.items[key]; ok {\n\t\tc.evictList.MoveToFront(ent)\n\t\tif ent.Value.(*entry) == nil {\n\t\t\treturn nil, false\n\t\t}\n\t\treturn ent.Value.(*entry).value, true\n\t}\n\treturn\n}\n\n// Contains checks if a key is in the cache, without updating the recent-ness\n// or deleting it for being stale.\nfunc (c *LRU) Contains(key interface{}) (ok bool) {\n\t_, ok = c.items[key]\n\treturn ok\n}\n\n// Peek returns the key value (or undefined if not found) without updating\n// the \"recently used\"-ness of the key.\nfunc (c *LRU) Peek(key interface{}) (value interface{}, ok bool) {\n\tvar ent *list.Element\n\tif ent, ok = c.items[key]; ok {\n\t\treturn ent.Value.(*entry).value, true\n\t}\n\treturn nil, ok\n}\n\n// Remove removes the provided key from the cache, returning if the\n// key was contained.\nfunc (c *LRU) Remove(key interface{}) (present bool) {\n\tif ent, ok := c.items[key]; ok {\n\t\tc.removeElement(ent)\n\t\treturn true\n\t}\n\treturn false\n}\n\n// RemoveOldest removes the oldest item from the cache.\nfunc (c *LRU) RemoveOldest() (key interface{}, value interface{}, ok bool) {\n\tent := c.evictList.Back()\n\tif ent != nil {\n\t\tc.removeElement(ent)\n\t\tkv := ent.Value.(*entry)\n\t\treturn kv.key, kv.value, true\n\t}\n\treturn nil, nil, false\n}\n\n// GetOldest returns the oldest entry\nfunc (c *LRU) GetOldest() (key interface{}, value interface{}, ok bool) {\n\tent := c.evictList.Back()\n\tif ent != nil {\n\t\tkv := ent.Value.(*entry)\n\t\treturn kv.key, kv.value, true\n\t}\n\treturn nil, nil, false\n}\n\n// Keys returns a slice of the keys in the cache, from oldest to newest.\nfunc (c *LRU) Keys() []interface{} {\n\tkeys := make([]interface{}, len(c.items))\n\ti := 0\n\tfor ent := c.evictList.Back(); ent != nil; ent = ent.Prev() {\n\t\tkeys[i] = ent.Value.(*entry).key\n\t\ti++\n\t}\n\treturn keys\n}\n\n// Len returns the number of items in the cache.\nfunc (c *LRU) Len() int {\n\treturn c.evictList.Len()\n}\n\n// removeOldest removes the oldest item from the cache.\nfunc (c *LRU) removeOldest() {\n\tent := c.evictList.Back()\n\tif ent != nil {\n\t\tc.removeElement(ent)\n\t}\n}\n\n// removeElement is used to remove a given list element from the cache\nfunc (c *LRU) removeElement(e *list.Element) {\n\tc.evictList.Remove(e)\n\tkv := e.Value.(*entry)\n\tdelete(c.items, kv.key)\n\tif c.onEvict != nil {\n\t\tc.onEvict(kv.key, kv.value)\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/golang-lru/simplelru/lru_interface.go",
    "content": "package simplelru\n\n// LRUCache is the interface for simple LRU cache.\ntype LRUCache interface {\n\t// Adds a value to the cache, returns true if an eviction occurred and\n\t// updates the \"recently used\"-ness of the key.\n\tAdd(key, value interface{}) bool\n\n\t// Returns key's value from the cache and\n\t// updates the \"recently used\"-ness of the key. #value, isFound\n\tGet(key interface{}) (value interface{}, ok bool)\n\n\t// Checks if a key exists in cache without updating the recent-ness.\n\tContains(key interface{}) (ok bool)\n\n\t// Returns key's value without updating the \"recently used\"-ness of the key.\n\tPeek(key interface{}) (value interface{}, ok bool)\n\n\t// Removes a key from the cache.\n\tRemove(key interface{}) bool\n\n\t// Removes the oldest entry from cache.\n\tRemoveOldest() (interface{}, interface{}, bool)\n\n\t// Returns the oldest entry from the cache. #key, value, isFound\n\tGetOldest() (interface{}, interface{}, bool)\n\n\t// Returns a slice of the keys in the cache, from oldest to newest.\n\tKeys() []interface{}\n\n\t// Returns the number of items in the cache.\n\tLen() int\n\n\t// Clears all cache entries.\n\tPurge()\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl/LICENSE",
    "content": "Mozilla Public License, version 2.0\n\n1. Definitions\n\n1.1. “Contributor”\n\n     means each individual or legal entity that creates, contributes to the\n     creation of, or owns Covered Software.\n\n1.2. “Contributor Version”\n\n     means the combination of the Contributions of others (if any) used by a\n     Contributor and that particular Contributor’s Contribution.\n\n1.3. “Contribution”\n\n     means Covered Software of a particular Contributor.\n\n1.4. “Covered Software”\n\n     means Source Code Form to which the initial Contributor has attached the\n     notice in Exhibit A, the Executable Form of such Source Code Form, and\n     Modifications of such Source Code Form, in each case including portions\n     thereof.\n\n1.5. “Incompatible With Secondary Licenses”\n     means\n\n     a. that the initial Contributor has attached the notice described in\n        Exhibit B to the Covered Software; or\n\n     b. that the Covered Software was made available under the terms of version\n        1.1 or earlier of the License, but not also under the terms of a\n        Secondary License.\n\n1.6. “Executable Form”\n\n     means any form of the work other than Source Code Form.\n\n1.7. “Larger Work”\n\n     means a work that combines Covered Software with other material, in a separate\n     file or files, that is not Covered Software.\n\n1.8. “License”\n\n     means this document.\n\n1.9. “Licensable”\n\n     means having the right to grant, to the maximum extent possible, whether at the\n     time of the initial grant or subsequently, any and all of the rights conveyed by\n     this License.\n\n1.10. “Modifications”\n\n     means any of the following:\n\n     a. any file in Source Code Form that results from an addition to, deletion\n        from, or modification of the contents of Covered Software; or\n\n     b. any new file in Source Code Form that contains any Covered Software.\n\n1.11. “Patent Claims” of a Contributor\n\n      means any patent claim(s), including without limitation, method, process,\n      and apparatus claims, in any patent Licensable by such Contributor that\n      would be infringed, but for the grant of the License, by the making,\n      using, selling, offering for sale, having made, import, or transfer of\n      either its Contributions or its Contributor Version.\n\n1.12. “Secondary License”\n\n      means either the GNU General Public License, Version 2.0, the GNU Lesser\n      General Public License, Version 2.1, the GNU Affero General Public\n      License, Version 3.0, or any later versions of those licenses.\n\n1.13. “Source Code Form”\n\n      means the form of the work preferred for making modifications.\n\n1.14. “You” (or “Your”)\n\n      means an individual or a legal entity exercising rights under this\n      License. For legal entities, “You” includes any entity that controls, is\n      controlled by, or is under common control with You. For purposes of this\n      definition, “control” means (a) the power, direct or indirect, to cause\n      the direction or management of such entity, whether by contract or\n      otherwise, or (b) ownership of more than fifty percent (50%) of the\n      outstanding shares or beneficial ownership of such entity.\n\n\n2. License Grants and Conditions\n\n2.1. Grants\n\n     Each Contributor hereby grants You a world-wide, royalty-free,\n     non-exclusive license:\n\n     a. under intellectual property rights (other than patent or trademark)\n        Licensable by such Contributor to use, reproduce, make available,\n        modify, display, perform, distribute, and otherwise exploit its\n        Contributions, either on an unmodified basis, with Modifications, or as\n        part of a Larger Work; and\n\n     b. under Patent Claims of such Contributor to make, use, sell, offer for\n        sale, have made, import, and otherwise transfer either its Contributions\n        or its Contributor Version.\n\n2.2. Effective Date\n\n     The licenses granted in Section 2.1 with respect to any Contribution become\n     effective for each Contribution on the date the Contributor first distributes\n     such Contribution.\n\n2.3. Limitations on Grant Scope\n\n     The licenses granted in this Section 2 are the only rights granted under this\n     License. No additional rights or licenses will be implied from the distribution\n     or licensing of Covered Software under this License. Notwithstanding Section\n     2.1(b) above, no patent license is granted by a Contributor:\n\n     a. for any code that a Contributor has removed from Covered Software; or\n\n     b. for infringements caused by: (i) Your and any other third party’s\n        modifications of Covered Software, or (ii) the combination of its\n        Contributions with other software (except as part of its Contributor\n        Version); or\n\n     c. under Patent Claims infringed by Covered Software in the absence of its\n        Contributions.\n\n     This License does not grant any rights in the trademarks, service marks, or\n     logos of any Contributor (except as may be necessary to comply with the\n     notice requirements in Section 3.4).\n\n2.4. Subsequent Licenses\n\n     No Contributor makes additional grants as a result of Your choice to\n     distribute the Covered Software under a subsequent version of this License\n     (see Section 10.2) or under the terms of a Secondary License (if permitted\n     under the terms of Section 3.3).\n\n2.5. Representation\n\n     Each Contributor represents that the Contributor believes its Contributions\n     are its original creation(s) or it has sufficient rights to grant the\n     rights to its Contributions conveyed by this License.\n\n2.6. Fair Use\n\n     This License is not intended to limit any rights You have under applicable\n     copyright doctrines of fair use, fair dealing, or other equivalents.\n\n2.7. Conditions\n\n     Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in\n     Section 2.1.\n\n\n3. Responsibilities\n\n3.1. Distribution of Source Form\n\n     All distribution of Covered Software in Source Code Form, including any\n     Modifications that You create or to which You contribute, must be under the\n     terms of this License. You must inform recipients that the Source Code Form\n     of the Covered Software is governed by the terms of this License, and how\n     they can obtain a copy of this License. You may not attempt to alter or\n     restrict the recipients’ rights in the Source Code Form.\n\n3.2. Distribution of Executable Form\n\n     If You distribute Covered Software in Executable Form then:\n\n     a. such Covered Software must also be made available in Source Code Form,\n        as described in Section 3.1, and You must inform recipients of the\n        Executable Form how they can obtain a copy of such Source Code Form by\n        reasonable means in a timely manner, at a charge no more than the cost\n        of distribution to the recipient; and\n\n     b. You may distribute such Executable Form under the terms of this License,\n        or sublicense it under different terms, provided that the license for\n        the Executable Form does not attempt to limit or alter the recipients’\n        rights in the Source Code Form under this License.\n\n3.3. Distribution of a Larger Work\n\n     You may create and distribute a Larger Work under terms of Your choice,\n     provided that You also comply with the requirements of this License for the\n     Covered Software. If the Larger Work is a combination of Covered Software\n     with a work governed by one or more Secondary Licenses, and the Covered\n     Software is not Incompatible With Secondary Licenses, this License permits\n     You to additionally distribute such Covered Software under the terms of\n     such Secondary License(s), so that the recipient of the Larger Work may, at\n     their option, further distribute the Covered Software under the terms of\n     either this License or such Secondary License(s).\n\n3.4. Notices\n\n     You may not remove or alter the substance of any license notices (including\n     copyright notices, patent notices, disclaimers of warranty, or limitations\n     of liability) contained within the Source Code Form of the Covered\n     Software, except that You may alter any license notices to the extent\n     required to remedy known factual inaccuracies.\n\n3.5. Application of Additional Terms\n\n     You may choose to offer, and to charge a fee for, warranty, support,\n     indemnity or liability obligations to one or more recipients of Covered\n     Software. However, You may do so only on Your own behalf, and not on behalf\n     of any Contributor. You must make it absolutely clear that any such\n     warranty, support, indemnity, or liability obligation is offered by You\n     alone, and You hereby agree to indemnify every Contributor for any\n     liability incurred by such Contributor as a result of warranty, support,\n     indemnity or liability terms You offer. You may include additional\n     disclaimers of warranty and limitations of liability specific to any\n     jurisdiction.\n\n4. Inability to Comply Due to Statute or Regulation\n\n   If it is impossible for You to comply with any of the terms of this License\n   with respect to some or all of the Covered Software due to statute, judicial\n   order, or regulation then You must: (a) comply with the terms of this License\n   to the maximum extent possible; and (b) describe the limitations and the code\n   they affect. Such description must be placed in a text file included with all\n   distributions of the Covered Software under this License. Except to the\n   extent prohibited by statute or regulation, such description must be\n   sufficiently detailed for a recipient of ordinary skill to be able to\n   understand it.\n\n5. Termination\n\n5.1. The rights granted under this License will terminate automatically if You\n     fail to comply with any of its terms. However, if You become compliant,\n     then the rights granted under this License from a particular Contributor\n     are reinstated (a) provisionally, unless and until such Contributor\n     explicitly and finally terminates Your grants, and (b) on an ongoing basis,\n     if such Contributor fails to notify You of the non-compliance by some\n     reasonable means prior to 60 days after You have come back into compliance.\n     Moreover, Your grants from a particular Contributor are reinstated on an\n     ongoing basis if such Contributor notifies You of the non-compliance by\n     some reasonable means, this is the first time You have received notice of\n     non-compliance with this License from such Contributor, and You become\n     compliant prior to 30 days after Your receipt of the notice.\n\n5.2. If You initiate litigation against any entity by asserting a patent\n     infringement claim (excluding declaratory judgment actions, counter-claims,\n     and cross-claims) alleging that a Contributor Version directly or\n     indirectly infringes any patent, then the rights granted to You by any and\n     all Contributors for the Covered Software under Section 2.1 of this License\n     shall terminate.\n\n5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user\n     license agreements (excluding distributors and resellers) which have been\n     validly granted by You or Your distributors under this License prior to\n     termination shall survive termination.\n\n6. Disclaimer of Warranty\n\n   Covered Software is provided under this License on an “as is” basis, without\n   warranty of any kind, either expressed, implied, or statutory, including,\n   without limitation, warranties that the Covered Software is free of defects,\n   merchantable, fit for a particular purpose or non-infringing. The entire\n   risk as to the quality and performance of the Covered Software is with You.\n   Should any Covered Software prove defective in any respect, You (not any\n   Contributor) assume the cost of any necessary servicing, repair, or\n   correction. This disclaimer of warranty constitutes an essential part of this\n   License. No use of  any Covered Software is authorized under this License\n   except under this disclaimer.\n\n7. Limitation of Liability\n\n   Under no circumstances and under no legal theory, whether tort (including\n   negligence), contract, or otherwise, shall any Contributor, or anyone who\n   distributes Covered Software as permitted above, be liable to You for any\n   direct, indirect, special, incidental, or consequential damages of any\n   character including, without limitation, damages for lost profits, loss of\n   goodwill, work stoppage, computer failure or malfunction, or any and all\n   other commercial damages or losses, even if such party shall have been\n   informed of the possibility of such damages. This limitation of liability\n   shall not apply to liability for death or personal injury resulting from such\n   party’s negligence to the extent applicable law prohibits such limitation.\n   Some jurisdictions do not allow the exclusion or limitation of incidental or\n   consequential damages, so this exclusion and limitation may not apply to You.\n\n8. Litigation\n\n   Any litigation relating to this License may be brought only in the courts of\n   a jurisdiction where the defendant maintains its principal place of business\n   and such litigation shall be governed by laws of that jurisdiction, without\n   reference to its conflict-of-law provisions. Nothing in this Section shall\n   prevent a party’s ability to bring cross-claims or counter-claims.\n\n9. Miscellaneous\n\n   This License represents the complete agreement concerning the subject matter\n   hereof. If any provision of this License is held to be unenforceable, such\n   provision shall be reformed only to the extent necessary to make it\n   enforceable. Any law or regulation which provides that the language of a\n   contract shall be construed against the drafter shall not be used to construe\n   this License against a Contributor.\n\n\n10. Versions of the License\n\n10.1. New Versions\n\n      Mozilla Foundation is the license steward. Except as provided in Section\n      10.3, no one other than the license steward has the right to modify or\n      publish new versions of this License. Each version will be given a\n      distinguishing version number.\n\n10.2. Effect of New Versions\n\n      You may distribute the Covered Software under the terms of the version of\n      the License under which You originally received the Covered Software, or\n      under the terms of any subsequent version published by the license\n      steward.\n\n10.3. Modified Versions\n\n      If you create software not governed by this License, and you want to\n      create a new license for such software, you may create and use a modified\n      version of this License if you rename the license and remove any\n      references to the name of the license steward (except to note that such\n      modified license differs from this License).\n\n10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses\n      If You choose to distribute Source Code Form that is Incompatible With\n      Secondary Licenses under the terms of this version of the License, the\n      notice described in Exhibit B of this License must be attached.\n\nExhibit A - Source Code Form License Notice\n\n      This Source Code Form is subject to the\n      terms of the Mozilla Public License, v.\n      2.0. If a copy of the MPL was not\n      distributed with this file, You can\n      obtain one at\n      http://mozilla.org/MPL/2.0/.\n\nIf it is not possible or desirable to put the notice in a particular file, then\nYou may include the notice in a location (such as a LICENSE file in a relevant\ndirectory) where a recipient would be likely to look for such a notice.\n\nYou may add additional accurate notices of copyright ownership.\n\nExhibit B - “Incompatible With Secondary Licenses” Notice\n\n      This Source Code Form is “Incompatible\n      With Secondary Licenses”, as defined by\n      the Mozilla Public License, v. 2.0.\n\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl/decoder.go",
    "content": "package hcl\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/hashicorp/hcl/hcl/ast\"\n\t\"github.com/hashicorp/hcl/hcl/parser\"\n\t\"github.com/hashicorp/hcl/hcl/token\"\n)\n\n// This is the tag to use with structures to have settings for HCL\nconst tagName = \"hcl\"\n\nvar (\n\t// nodeType holds a reference to the type of ast.Node\n\tnodeType reflect.Type = findNodeType()\n)\n\n// Unmarshal accepts a byte slice as input and writes the\n// data to the value pointed to by v.\nfunc Unmarshal(bs []byte, v interface{}) error {\n\troot, err := parse(bs)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn DecodeObject(v, root)\n}\n\n// Decode reads the given input and decodes it into the structure\n// given by `out`.\nfunc Decode(out interface{}, in string) error {\n\tobj, err := Parse(in)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn DecodeObject(out, obj)\n}\n\n// DecodeObject is a lower-level version of Decode. It decodes a\n// raw Object into the given output.\nfunc DecodeObject(out interface{}, n ast.Node) error {\n\tval := reflect.ValueOf(out)\n\tif val.Kind() != reflect.Ptr {\n\t\treturn errors.New(\"result must be a pointer\")\n\t}\n\n\t// If we have the file, we really decode the root node\n\tif f, ok := n.(*ast.File); ok {\n\t\tn = f.Node\n\t}\n\n\tvar d decoder\n\treturn d.decode(\"root\", n, val.Elem())\n}\n\ntype decoder struct {\n\tstack []reflect.Kind\n}\n\nfunc (d *decoder) decode(name string, node ast.Node, result reflect.Value) error {\n\tk := result\n\n\t// If we have an interface with a valid value, we use that\n\t// for the check.\n\tif result.Kind() == reflect.Interface {\n\t\telem := result.Elem()\n\t\tif elem.IsValid() {\n\t\t\tk = elem\n\t\t}\n\t}\n\n\t// Push current onto stack unless it is an interface.\n\tif k.Kind() != reflect.Interface {\n\t\td.stack = append(d.stack, k.Kind())\n\n\t\t// Schedule a pop\n\t\tdefer func() {\n\t\t\td.stack = d.stack[:len(d.stack)-1]\n\t\t}()\n\t}\n\n\tswitch k.Kind() {\n\tcase reflect.Bool:\n\t\treturn d.decodeBool(name, node, result)\n\tcase reflect.Float32, reflect.Float64:\n\t\treturn d.decodeFloat(name, node, result)\n\tcase reflect.Int, reflect.Int32, reflect.Int64:\n\t\treturn d.decodeInt(name, node, result)\n\tcase reflect.Interface:\n\t\t// When we see an interface, we make our own thing\n\t\treturn d.decodeInterface(name, node, result)\n\tcase reflect.Map:\n\t\treturn d.decodeMap(name, node, result)\n\tcase reflect.Ptr:\n\t\treturn d.decodePtr(name, node, result)\n\tcase reflect.Slice:\n\t\treturn d.decodeSlice(name, node, result)\n\tcase reflect.String:\n\t\treturn d.decodeString(name, node, result)\n\tcase reflect.Struct:\n\t\treturn d.decodeStruct(name, node, result)\n\tdefault:\n\t\treturn &parser.PosError{\n\t\t\tPos: node.Pos(),\n\t\t\tErr: fmt.Errorf(\"%s: unknown kind to decode into: %s\", name, k.Kind()),\n\t\t}\n\t}\n}\n\nfunc (d *decoder) decodeBool(name string, node ast.Node, result reflect.Value) error {\n\tswitch n := node.(type) {\n\tcase *ast.LiteralType:\n\t\tswitch n.Token.Type {\n\t\tcase token.BOOL, token.STRING, token.NUMBER:\n\t\t\tvar v bool\n\t\t\ts := strings.ToLower(strings.Replace(n.Token.Text, \"\\\"\", \"\", -1))\n\t\t\tswitch s {\n\t\t\tcase \"1\", \"true\":\n\t\t\t\tv = true\n\t\t\tcase \"0\", \"false\":\n\t\t\t\tv = false\n\t\t\tdefault:\n\t\t\t\treturn fmt.Errorf(\"decodeBool: Unknown value for boolean: %s\", n.Token.Text)\n\t\t\t}\n\n\t\t\tresult.Set(reflect.ValueOf(v))\n\t\t\treturn nil\n\t\t}\n\t}\n\n\treturn &parser.PosError{\n\t\tPos: node.Pos(),\n\t\tErr: fmt.Errorf(\"%s: unknown type %T\", name, node),\n\t}\n}\n\nfunc (d *decoder) decodeFloat(name string, node ast.Node, result reflect.Value) error {\n\tswitch n := node.(type) {\n\tcase *ast.LiteralType:\n\t\tif n.Token.Type == token.FLOAT || n.Token.Type == token.NUMBER {\n\t\t\tv, err := strconv.ParseFloat(n.Token.Text, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tresult.Set(reflect.ValueOf(v).Convert(result.Type()))\n\t\t\treturn nil\n\t\t}\n\t}\n\n\treturn &parser.PosError{\n\t\tPos: node.Pos(),\n\t\tErr: fmt.Errorf(\"%s: unknown type %T\", name, node),\n\t}\n}\n\nfunc (d *decoder) decodeInt(name string, node ast.Node, result reflect.Value) error {\n\tswitch n := node.(type) {\n\tcase *ast.LiteralType:\n\t\tswitch n.Token.Type {\n\t\tcase token.NUMBER:\n\t\t\tv, err := strconv.ParseInt(n.Token.Text, 0, 0)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tif result.Kind() == reflect.Interface {\n\t\t\t\tresult.Set(reflect.ValueOf(int(v)))\n\t\t\t} else {\n\t\t\t\tresult.SetInt(v)\n\t\t\t}\n\t\t\treturn nil\n\t\tcase token.STRING:\n\t\t\tv, err := strconv.ParseInt(n.Token.Value().(string), 0, 0)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tif result.Kind() == reflect.Interface {\n\t\t\t\tresult.Set(reflect.ValueOf(int(v)))\n\t\t\t} else {\n\t\t\t\tresult.SetInt(v)\n\t\t\t}\n\t\t\treturn nil\n\t\t}\n\t}\n\n\treturn &parser.PosError{\n\t\tPos: node.Pos(),\n\t\tErr: fmt.Errorf(\"%s: unknown type %T\", name, node),\n\t}\n}\n\nfunc (d *decoder) decodeInterface(name string, node ast.Node, result reflect.Value) error {\n\t// When we see an ast.Node, we retain the value to enable deferred decoding.\n\t// Very useful in situations where we want to preserve ast.Node information\n\t// like Pos\n\tif result.Type() == nodeType && result.CanSet() {\n\t\tresult.Set(reflect.ValueOf(node))\n\t\treturn nil\n\t}\n\n\tvar set reflect.Value\n\tredecode := true\n\n\t// For testing types, ObjectType should just be treated as a list. We\n\t// set this to a temporary var because we want to pass in the real node.\n\ttestNode := node\n\tif ot, ok := node.(*ast.ObjectType); ok {\n\t\ttestNode = ot.List\n\t}\n\n\tswitch n := testNode.(type) {\n\tcase *ast.ObjectList:\n\t\t// If we're at the root or we're directly within a slice, then we\n\t\t// decode objects into map[string]interface{}, otherwise we decode\n\t\t// them into lists.\n\t\tif len(d.stack) == 0 || d.stack[len(d.stack)-1] == reflect.Slice {\n\t\t\tvar temp map[string]interface{}\n\t\t\ttempVal := reflect.ValueOf(temp)\n\t\t\tresult := reflect.MakeMap(\n\t\t\t\treflect.MapOf(\n\t\t\t\t\treflect.TypeOf(\"\"),\n\t\t\t\t\ttempVal.Type().Elem()))\n\n\t\t\tset = result\n\t\t} else {\n\t\t\tvar temp []map[string]interface{}\n\t\t\ttempVal := reflect.ValueOf(temp)\n\t\t\tresult := reflect.MakeSlice(\n\t\t\t\treflect.SliceOf(tempVal.Type().Elem()), 0, len(n.Items))\n\t\t\tset = result\n\t\t}\n\tcase *ast.ObjectType:\n\t\t// If we're at the root or we're directly within a slice, then we\n\t\t// decode objects into map[string]interface{}, otherwise we decode\n\t\t// them into lists.\n\t\tif len(d.stack) == 0 || d.stack[len(d.stack)-1] == reflect.Slice {\n\t\t\tvar temp map[string]interface{}\n\t\t\ttempVal := reflect.ValueOf(temp)\n\t\t\tresult := reflect.MakeMap(\n\t\t\t\treflect.MapOf(\n\t\t\t\t\treflect.TypeOf(\"\"),\n\t\t\t\t\ttempVal.Type().Elem()))\n\n\t\t\tset = result\n\t\t} else {\n\t\t\tvar temp []map[string]interface{}\n\t\t\ttempVal := reflect.ValueOf(temp)\n\t\t\tresult := reflect.MakeSlice(\n\t\t\t\treflect.SliceOf(tempVal.Type().Elem()), 0, 1)\n\t\t\tset = result\n\t\t}\n\tcase *ast.ListType:\n\t\tvar temp []interface{}\n\t\ttempVal := reflect.ValueOf(temp)\n\t\tresult := reflect.MakeSlice(\n\t\t\treflect.SliceOf(tempVal.Type().Elem()), 0, 0)\n\t\tset = result\n\tcase *ast.LiteralType:\n\t\tswitch n.Token.Type {\n\t\tcase token.BOOL:\n\t\t\tvar result bool\n\t\t\tset = reflect.Indirect(reflect.New(reflect.TypeOf(result)))\n\t\tcase token.FLOAT:\n\t\t\tvar result float64\n\t\t\tset = reflect.Indirect(reflect.New(reflect.TypeOf(result)))\n\t\tcase token.NUMBER:\n\t\t\tvar result int\n\t\t\tset = reflect.Indirect(reflect.New(reflect.TypeOf(result)))\n\t\tcase token.STRING, token.HEREDOC:\n\t\t\tset = reflect.Indirect(reflect.New(reflect.TypeOf(\"\")))\n\t\tdefault:\n\t\t\treturn &parser.PosError{\n\t\t\t\tPos: node.Pos(),\n\t\t\t\tErr: fmt.Errorf(\"%s: cannot decode into interface: %T\", name, node),\n\t\t\t}\n\t\t}\n\tdefault:\n\t\treturn fmt.Errorf(\n\t\t\t\"%s: cannot decode into interface: %T\",\n\t\t\tname, node)\n\t}\n\n\t// Set the result to what its supposed to be, then reset\n\t// result so we don't reflect into this method anymore.\n\tresult.Set(set)\n\n\tif redecode {\n\t\t// Revisit the node so that we can use the newly instantiated\n\t\t// thing and populate it.\n\t\tif err := d.decode(name, node, result); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (d *decoder) decodeMap(name string, node ast.Node, result reflect.Value) error {\n\tif item, ok := node.(*ast.ObjectItem); ok {\n\t\tnode = &ast.ObjectList{Items: []*ast.ObjectItem{item}}\n\t}\n\n\tif ot, ok := node.(*ast.ObjectType); ok {\n\t\tnode = ot.List\n\t}\n\n\tn, ok := node.(*ast.ObjectList)\n\tif !ok {\n\t\treturn &parser.PosError{\n\t\t\tPos: node.Pos(),\n\t\t\tErr: fmt.Errorf(\"%s: not an object type for map (%T)\", name, node),\n\t\t}\n\t}\n\n\t// If we have an interface, then we can address the interface,\n\t// but not the slice itself, so get the element but set the interface\n\tset := result\n\tif result.Kind() == reflect.Interface {\n\t\tresult = result.Elem()\n\t}\n\n\tresultType := result.Type()\n\tresultElemType := resultType.Elem()\n\tresultKeyType := resultType.Key()\n\tif resultKeyType.Kind() != reflect.String {\n\t\treturn &parser.PosError{\n\t\t\tPos: node.Pos(),\n\t\t\tErr: fmt.Errorf(\"%s: map must have string keys\", name),\n\t\t}\n\t}\n\n\t// Make a map if it is nil\n\tresultMap := result\n\tif result.IsNil() {\n\t\tresultMap = reflect.MakeMap(\n\t\t\treflect.MapOf(resultKeyType, resultElemType))\n\t}\n\n\t// Go through each element and decode it.\n\tdone := make(map[string]struct{})\n\tfor _, item := range n.Items {\n\t\tif item.Val == nil {\n\t\t\tcontinue\n\t\t}\n\n\t\t// github.com/hashicorp/terraform/issue/5740\n\t\tif len(item.Keys) == 0 {\n\t\t\treturn &parser.PosError{\n\t\t\t\tPos: node.Pos(),\n\t\t\t\tErr: fmt.Errorf(\"%s: map must have string keys\", name),\n\t\t\t}\n\t\t}\n\n\t\t// Get the key we're dealing with, which is the first item\n\t\tkeyStr := item.Keys[0].Token.Value().(string)\n\n\t\t// If we've already processed this key, then ignore it\n\t\tif _, ok := done[keyStr]; ok {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Determine the value. If we have more than one key, then we\n\t\t// get the objectlist of only these keys.\n\t\titemVal := item.Val\n\t\tif len(item.Keys) > 1 {\n\t\t\titemVal = n.Filter(keyStr)\n\t\t\tdone[keyStr] = struct{}{}\n\t\t}\n\n\t\t// Make the field name\n\t\tfieldName := fmt.Sprintf(\"%s.%s\", name, keyStr)\n\n\t\t// Get the key/value as reflection values\n\t\tkey := reflect.ValueOf(keyStr)\n\t\tval := reflect.Indirect(reflect.New(resultElemType))\n\n\t\t// If we have a pre-existing value in the map, use that\n\t\toldVal := resultMap.MapIndex(key)\n\t\tif oldVal.IsValid() {\n\t\t\tval.Set(oldVal)\n\t\t}\n\n\t\t// Decode!\n\t\tif err := d.decode(fieldName, itemVal, val); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// Set the value on the map\n\t\tresultMap.SetMapIndex(key, val)\n\t}\n\n\t// Set the final map if we can\n\tset.Set(resultMap)\n\treturn nil\n}\n\nfunc (d *decoder) decodePtr(name string, node ast.Node, result reflect.Value) error {\n\t// if pointer is not nil, decode into existing value\n\tif !result.IsNil() {\n\t\treturn d.decode(name, node, result.Elem())\n\t}\n\n\t// Create an element of the concrete (non pointer) type and decode\n\t// into that. Then set the value of the pointer to this type.\n\tresultType := result.Type()\n\tresultElemType := resultType.Elem()\n\tval := reflect.New(resultElemType)\n\tif err := d.decode(name, node, reflect.Indirect(val)); err != nil {\n\t\treturn err\n\t}\n\n\tresult.Set(val)\n\treturn nil\n}\n\nfunc (d *decoder) decodeSlice(name string, node ast.Node, result reflect.Value) error {\n\t// If we have an interface, then we can address the interface,\n\t// but not the slice itself, so get the element but set the interface\n\tset := result\n\tif result.Kind() == reflect.Interface {\n\t\tresult = result.Elem()\n\t}\n\t// Create the slice if it isn't nil\n\tresultType := result.Type()\n\tresultElemType := resultType.Elem()\n\tif result.IsNil() {\n\t\tresultSliceType := reflect.SliceOf(resultElemType)\n\t\tresult = reflect.MakeSlice(\n\t\t\tresultSliceType, 0, 0)\n\t}\n\n\t// Figure out the items we'll be copying into the slice\n\tvar items []ast.Node\n\tswitch n := node.(type) {\n\tcase *ast.ObjectList:\n\t\titems = make([]ast.Node, len(n.Items))\n\t\tfor i, item := range n.Items {\n\t\t\titems[i] = item\n\t\t}\n\tcase *ast.ObjectType:\n\t\titems = []ast.Node{n}\n\tcase *ast.ListType:\n\t\titems = n.List\n\tdefault:\n\t\treturn &parser.PosError{\n\t\t\tPos: node.Pos(),\n\t\t\tErr: fmt.Errorf(\"unknown slice type: %T\", node),\n\t\t}\n\t}\n\n\tfor i, item := range items {\n\t\tfieldName := fmt.Sprintf(\"%s[%d]\", name, i)\n\n\t\t// Decode\n\t\tval := reflect.Indirect(reflect.New(resultElemType))\n\n\t\t// if item is an object that was decoded from ambiguous JSON and\n\t\t// flattened, make sure it's expanded if it needs to decode into a\n\t\t// defined structure.\n\t\titem := expandObject(item, val)\n\n\t\tif err := d.decode(fieldName, item, val); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// Append it onto the slice\n\t\tresult = reflect.Append(result, val)\n\t}\n\n\tset.Set(result)\n\treturn nil\n}\n\n// expandObject detects if an ambiguous JSON object was flattened to a List which\n// should be decoded into a struct, and expands the ast to properly deocode.\nfunc expandObject(node ast.Node, result reflect.Value) ast.Node {\n\titem, ok := node.(*ast.ObjectItem)\n\tif !ok {\n\t\treturn node\n\t}\n\n\telemType := result.Type()\n\n\t// our target type must be a struct\n\tswitch elemType.Kind() {\n\tcase reflect.Ptr:\n\t\tswitch elemType.Elem().Kind() {\n\t\tcase reflect.Struct:\n\t\t\t//OK\n\t\tdefault:\n\t\t\treturn node\n\t\t}\n\tcase reflect.Struct:\n\t\t//OK\n\tdefault:\n\t\treturn node\n\t}\n\n\t// A list value will have a key and field name. If it had more fields,\n\t// it wouldn't have been flattened.\n\tif len(item.Keys) != 2 {\n\t\treturn node\n\t}\n\n\tkeyToken := item.Keys[0].Token\n\titem.Keys = item.Keys[1:]\n\n\t// we need to un-flatten the ast enough to decode\n\tnewNode := &ast.ObjectItem{\n\t\tKeys: []*ast.ObjectKey{\n\t\t\t{\n\t\t\t\tToken: keyToken,\n\t\t\t},\n\t\t},\n\t\tVal: &ast.ObjectType{\n\t\t\tList: &ast.ObjectList{\n\t\t\t\tItems: []*ast.ObjectItem{item},\n\t\t\t},\n\t\t},\n\t}\n\n\treturn newNode\n}\n\nfunc (d *decoder) decodeString(name string, node ast.Node, result reflect.Value) error {\n\tswitch n := node.(type) {\n\tcase *ast.LiteralType:\n\t\tswitch n.Token.Type {\n\t\tcase token.NUMBER:\n\t\t\tresult.Set(reflect.ValueOf(n.Token.Text).Convert(result.Type()))\n\t\t\treturn nil\n\t\tcase token.STRING, token.HEREDOC:\n\t\t\tresult.Set(reflect.ValueOf(n.Token.Value()).Convert(result.Type()))\n\t\t\treturn nil\n\t\t}\n\t}\n\n\treturn &parser.PosError{\n\t\tPos: node.Pos(),\n\t\tErr: fmt.Errorf(\"%s: unknown type for string %T\", name, node),\n\t}\n}\n\nfunc (d *decoder) decodeStruct(name string, node ast.Node, result reflect.Value) error {\n\tvar item *ast.ObjectItem\n\tif it, ok := node.(*ast.ObjectItem); ok {\n\t\titem = it\n\t\tnode = it.Val\n\t}\n\n\tif ot, ok := node.(*ast.ObjectType); ok {\n\t\tnode = ot.List\n\t}\n\n\t// Handle the special case where the object itself is a literal. Previously\n\t// the yacc parser would always ensure top-level elements were arrays. The new\n\t// parser does not make the same guarantees, thus we need to convert any\n\t// top-level literal elements into a list.\n\tif _, ok := node.(*ast.LiteralType); ok && item != nil {\n\t\tnode = &ast.ObjectList{Items: []*ast.ObjectItem{item}}\n\t}\n\n\tlist, ok := node.(*ast.ObjectList)\n\tif !ok {\n\t\treturn &parser.PosError{\n\t\t\tPos: node.Pos(),\n\t\t\tErr: fmt.Errorf(\"%s: not an object type for struct (%T)\", name, node),\n\t\t}\n\t}\n\n\t// This slice will keep track of all the structs we'll be decoding.\n\t// There can be more than one struct if there are embedded structs\n\t// that are squashed.\n\tstructs := make([]reflect.Value, 1, 5)\n\tstructs[0] = result\n\n\t// Compile the list of all the fields that we're going to be decoding\n\t// from all the structs.\n\ttype field struct {\n\t\tfield reflect.StructField\n\t\tval   reflect.Value\n\t}\n\tfields := []field{}\n\tfor len(structs) > 0 {\n\t\tstructVal := structs[0]\n\t\tstructs = structs[1:]\n\n\t\tstructType := structVal.Type()\n\t\tfor i := 0; i < structType.NumField(); i++ {\n\t\t\tfieldType := structType.Field(i)\n\t\t\ttagParts := strings.Split(fieldType.Tag.Get(tagName), \",\")\n\n\t\t\t// Ignore fields with tag name \"-\"\n\t\t\tif tagParts[0] == \"-\" {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif fieldType.Anonymous {\n\t\t\t\tfieldKind := fieldType.Type.Kind()\n\t\t\t\tif fieldKind != reflect.Struct {\n\t\t\t\t\treturn &parser.PosError{\n\t\t\t\t\t\tPos: node.Pos(),\n\t\t\t\t\t\tErr: fmt.Errorf(\"%s: unsupported type to struct: %s\",\n\t\t\t\t\t\t\tfieldType.Name, fieldKind),\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// We have an embedded field. We \"squash\" the fields down\n\t\t\t\t// if specified in the tag.\n\t\t\t\tsquash := false\n\t\t\t\tfor _, tag := range tagParts[1:] {\n\t\t\t\t\tif tag == \"squash\" {\n\t\t\t\t\t\tsquash = true\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif squash {\n\t\t\t\t\tstructs = append(\n\t\t\t\t\t\tstructs, result.FieldByName(fieldType.Name))\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Normal struct field, store it away\n\t\t\tfields = append(fields, field{fieldType, structVal.Field(i)})\n\t\t}\n\t}\n\n\tdecodedFields := make([]string, 0, len(fields))\n\tdecodedFieldsVal := make([]reflect.Value, 0)\n\tunusedKeysVal := make([]reflect.Value, 0)\n\n\t// fill unusedNodeKeys with keys from the AST\n\t// a slice because we have to do equals case fold to match Filter\n\tunusedNodeKeys := make([]string, 0)\n\tfor _, item := range list.Items {\n\t\tfor _, k := range item.Keys {\n\t\t\tunusedNodeKeys = append(unusedNodeKeys, k.Token.Value().(string))\n\t\t}\n\t}\n\n\tfor _, f := range fields {\n\t\tfield, fieldValue := f.field, f.val\n\t\tif !fieldValue.IsValid() {\n\t\t\t// This should never happen\n\t\t\tpanic(\"field is not valid\")\n\t\t}\n\n\t\t// If we can't set the field, then it is unexported or something,\n\t\t// and we just continue onwards.\n\t\tif !fieldValue.CanSet() {\n\t\t\tcontinue\n\t\t}\n\n\t\tfieldName := field.Name\n\n\t\ttagValue := field.Tag.Get(tagName)\n\t\ttagParts := strings.SplitN(tagValue, \",\", 2)\n\t\tif len(tagParts) >= 2 {\n\t\t\tswitch tagParts[1] {\n\t\t\tcase \"decodedFields\":\n\t\t\t\tdecodedFieldsVal = append(decodedFieldsVal, fieldValue)\n\t\t\t\tcontinue\n\t\t\tcase \"key\":\n\t\t\t\tif item == nil {\n\t\t\t\t\treturn &parser.PosError{\n\t\t\t\t\t\tPos: node.Pos(),\n\t\t\t\t\t\tErr: fmt.Errorf(\"%s: %s asked for 'key', impossible\",\n\t\t\t\t\t\t\tname, fieldName),\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfieldValue.SetString(item.Keys[0].Token.Value().(string))\n\t\t\t\tcontinue\n\t\t\tcase \"unusedKeys\":\n\t\t\t\tunusedKeysVal = append(unusedKeysVal, fieldValue)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\tif tagParts[0] != \"\" {\n\t\t\tfieldName = tagParts[0]\n\t\t}\n\n\t\t// Determine the element we'll use to decode. If it is a single\n\t\t// match (only object with the field), then we decode it exactly.\n\t\t// If it is a prefix match, then we decode the matches.\n\t\tfilter := list.Filter(fieldName)\n\n\t\tprefixMatches := filter.Children()\n\t\tmatches := filter.Elem()\n\t\tif len(matches.Items) == 0 && len(prefixMatches.Items) == 0 {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Track the used keys\n\t\tunusedNodeKeys = removeCaseFold(unusedNodeKeys, fieldName)\n\n\t\t// Create the field name and decode. We range over the elements\n\t\t// because we actually want the value.\n\t\tfieldName = fmt.Sprintf(\"%s.%s\", name, fieldName)\n\t\tif len(prefixMatches.Items) > 0 {\n\t\t\tif err := d.decode(fieldName, prefixMatches, fieldValue); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t\tfor _, match := range matches.Items {\n\t\t\tvar decodeNode ast.Node = match.Val\n\t\t\tif ot, ok := decodeNode.(*ast.ObjectType); ok {\n\t\t\t\tdecodeNode = &ast.ObjectList{Items: ot.List.Items}\n\t\t\t}\n\n\t\t\tif err := d.decode(fieldName, decodeNode, fieldValue); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\n\t\tdecodedFields = append(decodedFields, field.Name)\n\t}\n\n\tif len(decodedFieldsVal) > 0 {\n\t\t// Sort it so that it is deterministic\n\t\tsort.Strings(decodedFields)\n\n\t\tfor _, v := range decodedFieldsVal {\n\t\t\tv.Set(reflect.ValueOf(decodedFields))\n\t\t}\n\t}\n\n\tif len(unusedNodeKeys) > 0 {\n\t\t// like decodedFields, populated the unusedKeys field(s)\n\t\tsort.Strings(unusedNodeKeys)\n\t\tfor _, v := range unusedKeysVal {\n\t\t\tv.Set(reflect.ValueOf(unusedNodeKeys))\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// findNodeType returns the type of ast.Node\nfunc findNodeType() reflect.Type {\n\tvar nodeContainer struct {\n\t\tNode ast.Node\n\t}\n\tvalue := reflect.ValueOf(nodeContainer).FieldByName(\"Node\")\n\treturn value.Type()\n}\n\nfunc removeCaseFold(xs []string, y string) []string {\n\tfor i, x := range xs {\n\t\tif strings.EqualFold(x, y) {\n\t\t\treturn append(xs[:i], xs[i+1:]...)\n\t\t}\n\t}\n\treturn xs\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl/hcl/ast/ast.go",
    "content": "// Package ast declares the types used to represent syntax trees for HCL\n// (HashiCorp Configuration Language)\npackage ast\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n\n\t\"github.com/hashicorp/hcl/hcl/token\"\n)\n\n// Node is an element in the abstract syntax tree.\ntype Node interface {\n\tnode()\n\tPos() token.Pos\n}\n\nfunc (File) node()         {}\nfunc (ObjectList) node()   {}\nfunc (ObjectKey) node()    {}\nfunc (ObjectItem) node()   {}\nfunc (Comment) node()      {}\nfunc (CommentGroup) node() {}\nfunc (ObjectType) node()   {}\nfunc (LiteralType) node()  {}\nfunc (ListType) node()     {}\n\n// File represents a single HCL file\ntype File struct {\n\tNode     Node            // usually a *ObjectList\n\tComments []*CommentGroup // list of all comments in the source\n}\n\nfunc (f *File) Pos() token.Pos {\n\treturn f.Node.Pos()\n}\n\n// ObjectList represents a list of ObjectItems. An HCL file itself is an\n// ObjectList.\ntype ObjectList struct {\n\tItems []*ObjectItem\n}\n\nfunc (o *ObjectList) Add(item *ObjectItem) {\n\to.Items = append(o.Items, item)\n}\n\n// Filter filters out the objects with the given key list as a prefix.\n//\n// The returned list of objects contain ObjectItems where the keys have\n// this prefix already stripped off. This might result in objects with\n// zero-length key lists if they have no children.\n//\n// If no matches are found, an empty ObjectList (non-nil) is returned.\nfunc (o *ObjectList) Filter(keys ...string) *ObjectList {\n\tvar result ObjectList\n\tfor _, item := range o.Items {\n\t\t// If there aren't enough keys, then ignore this\n\t\tif len(item.Keys) < len(keys) {\n\t\t\tcontinue\n\t\t}\n\n\t\tmatch := true\n\t\tfor i, key := range item.Keys[:len(keys)] {\n\t\t\tkey := key.Token.Value().(string)\n\t\t\tif key != keys[i] && !strings.EqualFold(key, keys[i]) {\n\t\t\t\tmatch = false\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif !match {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Strip off the prefix from the children\n\t\tnewItem := *item\n\t\tnewItem.Keys = newItem.Keys[len(keys):]\n\t\tresult.Add(&newItem)\n\t}\n\n\treturn &result\n}\n\n// Children returns further nested objects (key length > 0) within this\n// ObjectList. This should be used with Filter to get at child items.\nfunc (o *ObjectList) Children() *ObjectList {\n\tvar result ObjectList\n\tfor _, item := range o.Items {\n\t\tif len(item.Keys) > 0 {\n\t\t\tresult.Add(item)\n\t\t}\n\t}\n\n\treturn &result\n}\n\n// Elem returns items in the list that are direct element assignments\n// (key length == 0). This should be used with Filter to get at elements.\nfunc (o *ObjectList) Elem() *ObjectList {\n\tvar result ObjectList\n\tfor _, item := range o.Items {\n\t\tif len(item.Keys) == 0 {\n\t\t\tresult.Add(item)\n\t\t}\n\t}\n\n\treturn &result\n}\n\nfunc (o *ObjectList) Pos() token.Pos {\n\t// always returns the uninitiliazed position\n\treturn o.Items[0].Pos()\n}\n\n// ObjectItem represents a HCL Object Item. An item is represented with a key\n// (or keys). It can be an assignment or an object (both normal and nested)\ntype ObjectItem struct {\n\t// keys is only one length long if it's of type assignment. If it's a\n\t// nested object it can be larger than one. In that case \"assign\" is\n\t// invalid as there is no assignments for a nested object.\n\tKeys []*ObjectKey\n\n\t// assign contains the position of \"=\", if any\n\tAssign token.Pos\n\n\t// val is the item itself. It can be an object,list, number, bool or a\n\t// string. If key length is larger than one, val can be only of type\n\t// Object.\n\tVal Node\n\n\tLeadComment *CommentGroup // associated lead comment\n\tLineComment *CommentGroup // associated line comment\n}\n\nfunc (o *ObjectItem) Pos() token.Pos {\n\t// I'm not entirely sure what causes this, but removing this causes\n\t// a test failure. We should investigate at some point.\n\tif len(o.Keys) == 0 {\n\t\treturn token.Pos{}\n\t}\n\n\treturn o.Keys[0].Pos()\n}\n\n// ObjectKeys are either an identifier or of type string.\ntype ObjectKey struct {\n\tToken token.Token\n}\n\nfunc (o *ObjectKey) Pos() token.Pos {\n\treturn o.Token.Pos\n}\n\n// LiteralType represents a literal of basic type. Valid types are:\n// token.NUMBER, token.FLOAT, token.BOOL and token.STRING\ntype LiteralType struct {\n\tToken token.Token\n\n\t// comment types, only used when in a list\n\tLeadComment *CommentGroup\n\tLineComment *CommentGroup\n}\n\nfunc (l *LiteralType) Pos() token.Pos {\n\treturn l.Token.Pos\n}\n\n// ListStatement represents a HCL List type\ntype ListType struct {\n\tLbrack token.Pos // position of \"[\"\n\tRbrack token.Pos // position of \"]\"\n\tList   []Node    // the elements in lexical order\n}\n\nfunc (l *ListType) Pos() token.Pos {\n\treturn l.Lbrack\n}\n\nfunc (l *ListType) Add(node Node) {\n\tl.List = append(l.List, node)\n}\n\n// ObjectType represents a HCL Object Type\ntype ObjectType struct {\n\tLbrace token.Pos   // position of \"{\"\n\tRbrace token.Pos   // position of \"}\"\n\tList   *ObjectList // the nodes in lexical order\n}\n\nfunc (o *ObjectType) Pos() token.Pos {\n\treturn o.Lbrace\n}\n\n// Comment node represents a single //, # style or /*- style commment\ntype Comment struct {\n\tStart token.Pos // position of / or #\n\tText  string\n}\n\nfunc (c *Comment) Pos() token.Pos {\n\treturn c.Start\n}\n\n// CommentGroup node represents a sequence of comments with no other tokens and\n// no empty lines between.\ntype CommentGroup struct {\n\tList []*Comment // len(List) > 0\n}\n\nfunc (c *CommentGroup) Pos() token.Pos {\n\treturn c.List[0].Pos()\n}\n\n//-------------------------------------------------------------------\n// GoStringer\n//-------------------------------------------------------------------\n\nfunc (o *ObjectKey) GoString() string  { return fmt.Sprintf(\"*%#v\", *o) }\nfunc (o *ObjectList) GoString() string { return fmt.Sprintf(\"*%#v\", *o) }\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl/hcl/ast/walk.go",
    "content": "package ast\n\nimport \"fmt\"\n\n// WalkFunc describes a function to be called for each node during a Walk. The\n// returned node can be used to rewrite the AST. Walking stops the returned\n// bool is false.\ntype WalkFunc func(Node) (Node, bool)\n\n// Walk traverses an AST in depth-first order: It starts by calling fn(node);\n// node must not be nil. If fn returns true, Walk invokes fn recursively for\n// each of the non-nil children of node, followed by a call of fn(nil). The\n// returned node of fn can be used to rewrite the passed node to fn.\nfunc Walk(node Node, fn WalkFunc) Node {\n\trewritten, ok := fn(node)\n\tif !ok {\n\t\treturn rewritten\n\t}\n\n\tswitch n := node.(type) {\n\tcase *File:\n\t\tn.Node = Walk(n.Node, fn)\n\tcase *ObjectList:\n\t\tfor i, item := range n.Items {\n\t\t\tn.Items[i] = Walk(item, fn).(*ObjectItem)\n\t\t}\n\tcase *ObjectKey:\n\t\t// nothing to do\n\tcase *ObjectItem:\n\t\tfor i, k := range n.Keys {\n\t\t\tn.Keys[i] = Walk(k, fn).(*ObjectKey)\n\t\t}\n\n\t\tif n.Val != nil {\n\t\t\tn.Val = Walk(n.Val, fn)\n\t\t}\n\tcase *LiteralType:\n\t\t// nothing to do\n\tcase *ListType:\n\t\tfor i, l := range n.List {\n\t\t\tn.List[i] = Walk(l, fn)\n\t\t}\n\tcase *ObjectType:\n\t\tn.List = Walk(n.List, fn).(*ObjectList)\n\tdefault:\n\t\t// should we panic here?\n\t\tfmt.Printf(\"unknown type: %T\\n\", n)\n\t}\n\n\tfn(nil)\n\treturn rewritten\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl/hcl/parser/error.go",
    "content": "package parser\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/hashicorp/hcl/hcl/token\"\n)\n\n// PosError is a parse error that contains a position.\ntype PosError struct {\n\tPos token.Pos\n\tErr error\n}\n\nfunc (e *PosError) Error() string {\n\treturn fmt.Sprintf(\"At %s: %s\", e.Pos, e.Err)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl/hcl/parser/parser.go",
    "content": "// Package parser implements a parser for HCL (HashiCorp Configuration\n// Language)\npackage parser\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"strings\"\n\n\t\"github.com/hashicorp/hcl/hcl/ast\"\n\t\"github.com/hashicorp/hcl/hcl/scanner\"\n\t\"github.com/hashicorp/hcl/hcl/token\"\n)\n\ntype Parser struct {\n\tsc *scanner.Scanner\n\n\t// Last read token\n\ttok       token.Token\n\tcommaPrev token.Token\n\n\tcomments    []*ast.CommentGroup\n\tleadComment *ast.CommentGroup // last lead comment\n\tlineComment *ast.CommentGroup // last line comment\n\n\tenableTrace bool\n\tindent      int\n\tn           int // buffer size (max = 1)\n}\n\nfunc newParser(src []byte) *Parser {\n\treturn &Parser{\n\t\tsc: scanner.New(src),\n\t}\n}\n\n// Parse returns the fully parsed source and returns the abstract syntax tree.\nfunc Parse(src []byte) (*ast.File, error) {\n\t// normalize all line endings\n\t// since the scanner and output only work with \"\\n\" line endings, we may\n\t// end up with dangling \"\\r\" characters in the parsed data.\n\tsrc = bytes.Replace(src, []byte(\"\\r\\n\"), []byte(\"\\n\"), -1)\n\n\tp := newParser(src)\n\treturn p.Parse()\n}\n\nvar errEofToken = errors.New(\"EOF token found\")\n\n// Parse returns the fully parsed source and returns the abstract syntax tree.\nfunc (p *Parser) Parse() (*ast.File, error) {\n\tf := &ast.File{}\n\tvar err, scerr error\n\tp.sc.Error = func(pos token.Pos, msg string) {\n\t\tscerr = &PosError{Pos: pos, Err: errors.New(msg)}\n\t}\n\n\tf.Node, err = p.objectList(false)\n\tif scerr != nil {\n\t\treturn nil, scerr\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tf.Comments = p.comments\n\treturn f, nil\n}\n\n// objectList parses a list of items within an object (generally k/v pairs).\n// The parameter\" obj\" tells this whether to we are within an object (braces:\n// '{', '}') or just at the top level. If we're within an object, we end\n// at an RBRACE.\nfunc (p *Parser) objectList(obj bool) (*ast.ObjectList, error) {\n\tdefer un(trace(p, \"ParseObjectList\"))\n\tnode := &ast.ObjectList{}\n\n\tfor {\n\t\tif obj {\n\t\t\ttok := p.scan()\n\t\t\tp.unscan()\n\t\t\tif tok.Type == token.RBRACE {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\tn, err := p.objectItem()\n\t\tif err == errEofToken {\n\t\t\tbreak // we are finished\n\t\t}\n\n\t\t// we don't return a nil node, because might want to use already\n\t\t// collected items.\n\t\tif err != nil {\n\t\t\treturn node, err\n\t\t}\n\n\t\tnode.Add(n)\n\n\t\t// object lists can be optionally comma-delimited e.g. when a list of maps\n\t\t// is being expressed, so a comma is allowed here - it's simply consumed\n\t\ttok := p.scan()\n\t\tif tok.Type != token.COMMA {\n\t\t\tp.unscan()\n\t\t}\n\t}\n\treturn node, nil\n}\n\nfunc (p *Parser) consumeComment() (comment *ast.Comment, endline int) {\n\tendline = p.tok.Pos.Line\n\n\t// count the endline if it's multiline comment, ie starting with /*\n\tif len(p.tok.Text) > 1 && p.tok.Text[1] == '*' {\n\t\t// don't use range here - no need to decode Unicode code points\n\t\tfor i := 0; i < len(p.tok.Text); i++ {\n\t\t\tif p.tok.Text[i] == '\\n' {\n\t\t\t\tendline++\n\t\t\t}\n\t\t}\n\t}\n\n\tcomment = &ast.Comment{Start: p.tok.Pos, Text: p.tok.Text}\n\tp.tok = p.sc.Scan()\n\treturn\n}\n\nfunc (p *Parser) consumeCommentGroup(n int) (comments *ast.CommentGroup, endline int) {\n\tvar list []*ast.Comment\n\tendline = p.tok.Pos.Line\n\n\tfor p.tok.Type == token.COMMENT && p.tok.Pos.Line <= endline+n {\n\t\tvar comment *ast.Comment\n\t\tcomment, endline = p.consumeComment()\n\t\tlist = append(list, comment)\n\t}\n\n\t// add comment group to the comments list\n\tcomments = &ast.CommentGroup{List: list}\n\tp.comments = append(p.comments, comments)\n\n\treturn\n}\n\n// objectItem parses a single object item\nfunc (p *Parser) objectItem() (*ast.ObjectItem, error) {\n\tdefer un(trace(p, \"ParseObjectItem\"))\n\n\tkeys, err := p.objectKey()\n\tif len(keys) > 0 && err == errEofToken {\n\t\t// We ignore eof token here since it is an error if we didn't\n\t\t// receive a value (but we did receive a key) for the item.\n\t\terr = nil\n\t}\n\tif len(keys) > 0 && err != nil && p.tok.Type == token.RBRACE {\n\t\t// This is a strange boolean statement, but what it means is:\n\t\t// We have keys with no value, and we're likely in an object\n\t\t// (since RBrace ends an object). For this, we set err to nil so\n\t\t// we continue and get the error below of having the wrong value\n\t\t// type.\n\t\terr = nil\n\n\t\t// Reset the token type so we don't think it completed fine. See\n\t\t// objectType which uses p.tok.Type to check if we're done with\n\t\t// the object.\n\t\tp.tok.Type = token.EOF\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\to := &ast.ObjectItem{\n\t\tKeys: keys,\n\t}\n\n\tif p.leadComment != nil {\n\t\to.LeadComment = p.leadComment\n\t\tp.leadComment = nil\n\t}\n\n\tswitch p.tok.Type {\n\tcase token.ASSIGN:\n\t\to.Assign = p.tok.Pos\n\t\to.Val, err = p.object()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\tcase token.LBRACE:\n\t\to.Val, err = p.objectType()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\tdefault:\n\t\tkeyStr := make([]string, 0, len(keys))\n\t\tfor _, k := range keys {\n\t\t\tkeyStr = append(keyStr, k.Token.Text)\n\t\t}\n\n\t\treturn nil, &PosError{\n\t\t\tPos: p.tok.Pos,\n\t\t\tErr: fmt.Errorf(\n\t\t\t\t\"key '%s' expected start of object ('{') or assignment ('=')\",\n\t\t\t\tstrings.Join(keyStr, \" \")),\n\t\t}\n\t}\n\n\t// key=#comment\n\t// val\n\tif p.lineComment != nil {\n\t\to.LineComment, p.lineComment = p.lineComment, nil\n\t}\n\n\t// do a look-ahead for line comment\n\tp.scan()\n\tif len(keys) > 0 && o.Val.Pos().Line == keys[0].Pos().Line && p.lineComment != nil {\n\t\to.LineComment = p.lineComment\n\t\tp.lineComment = nil\n\t}\n\tp.unscan()\n\treturn o, nil\n}\n\n// objectKey parses an object key and returns a ObjectKey AST\nfunc (p *Parser) objectKey() ([]*ast.ObjectKey, error) {\n\tkeyCount := 0\n\tkeys := make([]*ast.ObjectKey, 0)\n\n\tfor {\n\t\ttok := p.scan()\n\t\tswitch tok.Type {\n\t\tcase token.EOF:\n\t\t\t// It is very important to also return the keys here as well as\n\t\t\t// the error. This is because we need to be able to tell if we\n\t\t\t// did parse keys prior to finding the EOF, or if we just found\n\t\t\t// a bare EOF.\n\t\t\treturn keys, errEofToken\n\t\tcase token.ASSIGN:\n\t\t\t// assignment or object only, but not nested objects. this is not\n\t\t\t// allowed: `foo bar = {}`\n\t\t\tif keyCount > 1 {\n\t\t\t\treturn nil, &PosError{\n\t\t\t\t\tPos: p.tok.Pos,\n\t\t\t\t\tErr: fmt.Errorf(\"nested object expected: LBRACE got: %s\", p.tok.Type),\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif keyCount == 0 {\n\t\t\t\treturn nil, &PosError{\n\t\t\t\t\tPos: p.tok.Pos,\n\t\t\t\t\tErr: errors.New(\"no object keys found!\"),\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn keys, nil\n\t\tcase token.LBRACE:\n\t\t\tvar err error\n\n\t\t\t// If we have no keys, then it is a syntax error. i.e. {{}} is not\n\t\t\t// allowed.\n\t\t\tif len(keys) == 0 {\n\t\t\t\terr = &PosError{\n\t\t\t\t\tPos: p.tok.Pos,\n\t\t\t\t\tErr: fmt.Errorf(\"expected: IDENT | STRING got: %s\", p.tok.Type),\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// object\n\t\t\treturn keys, err\n\t\tcase token.IDENT, token.STRING:\n\t\t\tkeyCount++\n\t\t\tkeys = append(keys, &ast.ObjectKey{Token: p.tok})\n\t\tcase token.ILLEGAL:\n\t\t\treturn keys, &PosError{\n\t\t\t\tPos: p.tok.Pos,\n\t\t\t\tErr: fmt.Errorf(\"illegal character\"),\n\t\t\t}\n\t\tdefault:\n\t\t\treturn keys, &PosError{\n\t\t\t\tPos: p.tok.Pos,\n\t\t\t\tErr: fmt.Errorf(\"expected: IDENT | STRING | ASSIGN | LBRACE got: %s\", p.tok.Type),\n\t\t\t}\n\t\t}\n\t}\n}\n\n// object parses any type of object, such as number, bool, string, object or\n// list.\nfunc (p *Parser) object() (ast.Node, error) {\n\tdefer un(trace(p, \"ParseType\"))\n\ttok := p.scan()\n\n\tswitch tok.Type {\n\tcase token.NUMBER, token.FLOAT, token.BOOL, token.STRING, token.HEREDOC:\n\t\treturn p.literalType()\n\tcase token.LBRACE:\n\t\treturn p.objectType()\n\tcase token.LBRACK:\n\t\treturn p.listType()\n\tcase token.COMMENT:\n\t\t// implement comment\n\tcase token.EOF:\n\t\treturn nil, errEofToken\n\t}\n\n\treturn nil, &PosError{\n\t\tPos: tok.Pos,\n\t\tErr: fmt.Errorf(\"Unknown token: %+v\", tok),\n\t}\n}\n\n// objectType parses an object type and returns a ObjectType AST\nfunc (p *Parser) objectType() (*ast.ObjectType, error) {\n\tdefer un(trace(p, \"ParseObjectType\"))\n\n\t// we assume that the currently scanned token is a LBRACE\n\to := &ast.ObjectType{\n\t\tLbrace: p.tok.Pos,\n\t}\n\n\tl, err := p.objectList(true)\n\n\t// if we hit RBRACE, we are good to go (means we parsed all Items), if it's\n\t// not a RBRACE, it's an syntax error and we just return it.\n\tif err != nil && p.tok.Type != token.RBRACE {\n\t\treturn nil, err\n\t}\n\n\t// No error, scan and expect the ending to be a brace\n\tif tok := p.scan(); tok.Type != token.RBRACE {\n\t\treturn nil, &PosError{\n\t\t\tPos: tok.Pos,\n\t\t\tErr: fmt.Errorf(\"object expected closing RBRACE got: %s\", tok.Type),\n\t\t}\n\t}\n\n\to.List = l\n\to.Rbrace = p.tok.Pos // advanced via parseObjectList\n\treturn o, nil\n}\n\n// listType parses a list type and returns a ListType AST\nfunc (p *Parser) listType() (*ast.ListType, error) {\n\tdefer un(trace(p, \"ParseListType\"))\n\n\t// we assume that the currently scanned token is a LBRACK\n\tl := &ast.ListType{\n\t\tLbrack: p.tok.Pos,\n\t}\n\n\tneedComma := false\n\tfor {\n\t\ttok := p.scan()\n\t\tif needComma {\n\t\t\tswitch tok.Type {\n\t\t\tcase token.COMMA, token.RBRACK:\n\t\t\tdefault:\n\t\t\t\treturn nil, &PosError{\n\t\t\t\t\tPos: tok.Pos,\n\t\t\t\t\tErr: fmt.Errorf(\n\t\t\t\t\t\t\"error parsing list, expected comma or list end, got: %s\",\n\t\t\t\t\t\ttok.Type),\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tswitch tok.Type {\n\t\tcase token.BOOL, token.NUMBER, token.FLOAT, token.STRING, token.HEREDOC:\n\t\t\tnode, err := p.literalType()\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\n\t\t\t// If there is a lead comment, apply it\n\t\t\tif p.leadComment != nil {\n\t\t\t\tnode.LeadComment = p.leadComment\n\t\t\t\tp.leadComment = nil\n\t\t\t}\n\n\t\t\tl.Add(node)\n\t\t\tneedComma = true\n\t\tcase token.COMMA:\n\t\t\t// get next list item or we are at the end\n\t\t\t// do a look-ahead for line comment\n\t\t\tp.scan()\n\t\t\tif p.lineComment != nil && len(l.List) > 0 {\n\t\t\t\tlit, ok := l.List[len(l.List)-1].(*ast.LiteralType)\n\t\t\t\tif ok {\n\t\t\t\t\tlit.LineComment = p.lineComment\n\t\t\t\t\tl.List[len(l.List)-1] = lit\n\t\t\t\t\tp.lineComment = nil\n\t\t\t\t}\n\t\t\t}\n\t\t\tp.unscan()\n\n\t\t\tneedComma = false\n\t\t\tcontinue\n\t\tcase token.LBRACE:\n\t\t\t// Looks like a nested object, so parse it out\n\t\t\tnode, err := p.objectType()\n\t\t\tif err != nil {\n\t\t\t\treturn nil, &PosError{\n\t\t\t\t\tPos: tok.Pos,\n\t\t\t\t\tErr: fmt.Errorf(\n\t\t\t\t\t\t\"error while trying to parse object within list: %s\", err),\n\t\t\t\t}\n\t\t\t}\n\t\t\tl.Add(node)\n\t\t\tneedComma = true\n\t\tcase token.LBRACK:\n\t\t\tnode, err := p.listType()\n\t\t\tif err != nil {\n\t\t\t\treturn nil, &PosError{\n\t\t\t\t\tPos: tok.Pos,\n\t\t\t\t\tErr: fmt.Errorf(\n\t\t\t\t\t\t\"error while trying to parse list within list: %s\", err),\n\t\t\t\t}\n\t\t\t}\n\t\t\tl.Add(node)\n\t\tcase token.RBRACK:\n\t\t\t// finished\n\t\t\tl.Rbrack = p.tok.Pos\n\t\t\treturn l, nil\n\t\tdefault:\n\t\t\treturn nil, &PosError{\n\t\t\t\tPos: tok.Pos,\n\t\t\t\tErr: fmt.Errorf(\"unexpected token while parsing list: %s\", tok.Type),\n\t\t\t}\n\t\t}\n\t}\n}\n\n// literalType parses a literal type and returns a LiteralType AST\nfunc (p *Parser) literalType() (*ast.LiteralType, error) {\n\tdefer un(trace(p, \"ParseLiteral\"))\n\n\treturn &ast.LiteralType{\n\t\tToken: p.tok,\n\t}, nil\n}\n\n// scan returns the next token from the underlying scanner. If a token has\n// been unscanned then read that instead. In the process, it collects any\n// comment groups encountered, and remembers the last lead and line comments.\nfunc (p *Parser) scan() token.Token {\n\t// If we have a token on the buffer, then return it.\n\tif p.n != 0 {\n\t\tp.n = 0\n\t\treturn p.tok\n\t}\n\n\t// Otherwise read the next token from the scanner and Save it to the buffer\n\t// in case we unscan later.\n\tprev := p.tok\n\tp.tok = p.sc.Scan()\n\n\tif p.tok.Type == token.COMMENT {\n\t\tvar comment *ast.CommentGroup\n\t\tvar endline int\n\n\t\t// fmt.Printf(\"p.tok.Pos.Line = %+v prev: %d endline %d \\n\",\n\t\t// p.tok.Pos.Line, prev.Pos.Line, endline)\n\t\tif p.tok.Pos.Line == prev.Pos.Line {\n\t\t\t// The comment is on same line as the previous token; it\n\t\t\t// cannot be a lead comment but may be a line comment.\n\t\t\tcomment, endline = p.consumeCommentGroup(0)\n\t\t\tif p.tok.Pos.Line != endline {\n\t\t\t\t// The next token is on a different line, thus\n\t\t\t\t// the last comment group is a line comment.\n\t\t\t\tp.lineComment = comment\n\t\t\t}\n\t\t}\n\n\t\t// consume successor comments, if any\n\t\tendline = -1\n\t\tfor p.tok.Type == token.COMMENT {\n\t\t\tcomment, endline = p.consumeCommentGroup(1)\n\t\t}\n\n\t\tif endline+1 == p.tok.Pos.Line && p.tok.Type != token.RBRACE {\n\t\t\tswitch p.tok.Type {\n\t\t\tcase token.RBRACE, token.RBRACK:\n\t\t\t\t// Do not count for these cases\n\t\t\tdefault:\n\t\t\t\t// The next token is following on the line immediately after the\n\t\t\t\t// comment group, thus the last comment group is a lead comment.\n\t\t\t\tp.leadComment = comment\n\t\t\t}\n\t\t}\n\n\t}\n\n\treturn p.tok\n}\n\n// unscan pushes the previously read token back onto the buffer.\nfunc (p *Parser) unscan() {\n\tp.n = 1\n}\n\n// ----------------------------------------------------------------------------\n// Parsing support\n\nfunc (p *Parser) printTrace(a ...interface{}) {\n\tif !p.enableTrace {\n\t\treturn\n\t}\n\n\tconst dots = \". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . \"\n\tconst n = len(dots)\n\tfmt.Printf(\"%5d:%3d: \", p.tok.Pos.Line, p.tok.Pos.Column)\n\n\ti := 2 * p.indent\n\tfor i > n {\n\t\tfmt.Print(dots)\n\t\ti -= n\n\t}\n\t// i <= n\n\tfmt.Print(dots[0:i])\n\tfmt.Println(a...)\n}\n\nfunc trace(p *Parser, msg string) *Parser {\n\tp.printTrace(msg, \"(\")\n\tp.indent++\n\treturn p\n}\n\n// Usage pattern: defer un(trace(p, \"...\"))\nfunc un(p *Parser) {\n\tp.indent--\n\tp.printTrace(\")\")\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl/hcl/scanner/scanner.go",
    "content": "// Package scanner implements a scanner for HCL (HashiCorp Configuration\n// Language) source text.\npackage scanner\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"os\"\n\t\"regexp\"\n\t\"unicode\"\n\t\"unicode/utf8\"\n\n\t\"github.com/hashicorp/hcl/hcl/token\"\n)\n\n// eof represents a marker rune for the end of the reader.\nconst eof = rune(0)\n\n// Scanner defines a lexical scanner\ntype Scanner struct {\n\tbuf *bytes.Buffer // Source buffer for advancing and scanning\n\tsrc []byte        // Source buffer for immutable access\n\n\t// Source Position\n\tsrcPos  token.Pos // current position\n\tprevPos token.Pos // previous position, used for peek() method\n\n\tlastCharLen int // length of last character in bytes\n\tlastLineLen int // length of last line in characters (for correct column reporting)\n\n\ttokStart int // token text start position\n\ttokEnd   int // token text end  position\n\n\t// Error is called for each error encountered. If no Error\n\t// function is set, the error is reported to os.Stderr.\n\tError func(pos token.Pos, msg string)\n\n\t// ErrorCount is incremented by one for each error encountered.\n\tErrorCount int\n\n\t// tokPos is the start position of most recently scanned token; set by\n\t// Scan. The Filename field is always left untouched by the Scanner.  If\n\t// an error is reported (via Error) and Position is invalid, the scanner is\n\t// not inside a token.\n\ttokPos token.Pos\n}\n\n// New creates and initializes a new instance of Scanner using src as\n// its source content.\nfunc New(src []byte) *Scanner {\n\t// even though we accept a src, we read from a io.Reader compatible type\n\t// (*bytes.Buffer). So in the future we might easily change it to streaming\n\t// read.\n\tb := bytes.NewBuffer(src)\n\ts := &Scanner{\n\t\tbuf: b,\n\t\tsrc: src,\n\t}\n\n\t// srcPosition always starts with 1\n\ts.srcPos.Line = 1\n\treturn s\n}\n\n// next reads the next rune from the bufferred reader. Returns the rune(0) if\n// an error occurs (or io.EOF is returned).\nfunc (s *Scanner) next() rune {\n\tch, size, err := s.buf.ReadRune()\n\tif err != nil {\n\t\t// advance for error reporting\n\t\ts.srcPos.Column++\n\t\ts.srcPos.Offset += size\n\t\ts.lastCharLen = size\n\t\treturn eof\n\t}\n\n\t// remember last position\n\ts.prevPos = s.srcPos\n\n\ts.srcPos.Column++\n\ts.lastCharLen = size\n\ts.srcPos.Offset += size\n\n\tif ch == utf8.RuneError && size == 1 {\n\t\ts.err(\"illegal UTF-8 encoding\")\n\t\treturn ch\n\t}\n\n\tif ch == '\\n' {\n\t\ts.srcPos.Line++\n\t\ts.lastLineLen = s.srcPos.Column\n\t\ts.srcPos.Column = 0\n\t}\n\n\tif ch == '\\x00' {\n\t\ts.err(\"unexpected null character (0x00)\")\n\t\treturn eof\n\t}\n\n\tif ch == '\\uE123' {\n\t\ts.err(\"unicode code point U+E123 reserved for internal use\")\n\t\treturn utf8.RuneError\n\t}\n\n\t// debug\n\t// fmt.Printf(\"ch: %q, offset:column: %d:%d\\n\", ch, s.srcPos.Offset, s.srcPos.Column)\n\treturn ch\n}\n\n// unread unreads the previous read Rune and updates the source position\nfunc (s *Scanner) unread() {\n\tif err := s.buf.UnreadRune(); err != nil {\n\t\tpanic(err) // this is user fault, we should catch it\n\t}\n\ts.srcPos = s.prevPos // put back last position\n}\n\n// peek returns the next rune without advancing the reader.\nfunc (s *Scanner) peek() rune {\n\tpeek, _, err := s.buf.ReadRune()\n\tif err != nil {\n\t\treturn eof\n\t}\n\n\ts.buf.UnreadRune()\n\treturn peek\n}\n\n// Scan scans the next token and returns the token.\nfunc (s *Scanner) Scan() token.Token {\n\tch := s.next()\n\n\t// skip white space\n\tfor isWhitespace(ch) {\n\t\tch = s.next()\n\t}\n\n\tvar tok token.Type\n\n\t// token text markings\n\ts.tokStart = s.srcPos.Offset - s.lastCharLen\n\n\t// token position, initial next() is moving the offset by one(size of rune\n\t// actually), though we are interested with the starting point\n\ts.tokPos.Offset = s.srcPos.Offset - s.lastCharLen\n\tif s.srcPos.Column > 0 {\n\t\t// common case: last character was not a '\\n'\n\t\ts.tokPos.Line = s.srcPos.Line\n\t\ts.tokPos.Column = s.srcPos.Column\n\t} else {\n\t\t// last character was a '\\n'\n\t\t// (we cannot be at the beginning of the source\n\t\t// since we have called next() at least once)\n\t\ts.tokPos.Line = s.srcPos.Line - 1\n\t\ts.tokPos.Column = s.lastLineLen\n\t}\n\n\tswitch {\n\tcase isLetter(ch):\n\t\ttok = token.IDENT\n\t\tlit := s.scanIdentifier()\n\t\tif lit == \"true\" || lit == \"false\" {\n\t\t\ttok = token.BOOL\n\t\t}\n\tcase isDecimal(ch):\n\t\ttok = s.scanNumber(ch)\n\tdefault:\n\t\tswitch ch {\n\t\tcase eof:\n\t\t\ttok = token.EOF\n\t\tcase '\"':\n\t\t\ttok = token.STRING\n\t\t\ts.scanString()\n\t\tcase '#', '/':\n\t\t\ttok = token.COMMENT\n\t\t\ts.scanComment(ch)\n\t\tcase '.':\n\t\t\ttok = token.PERIOD\n\t\t\tch = s.peek()\n\t\t\tif isDecimal(ch) {\n\t\t\t\ttok = token.FLOAT\n\t\t\t\tch = s.scanMantissa(ch)\n\t\t\t\tch = s.scanExponent(ch)\n\t\t\t}\n\t\tcase '<':\n\t\t\ttok = token.HEREDOC\n\t\t\ts.scanHeredoc()\n\t\tcase '[':\n\t\t\ttok = token.LBRACK\n\t\tcase ']':\n\t\t\ttok = token.RBRACK\n\t\tcase '{':\n\t\t\ttok = token.LBRACE\n\t\tcase '}':\n\t\t\ttok = token.RBRACE\n\t\tcase ',':\n\t\t\ttok = token.COMMA\n\t\tcase '=':\n\t\t\ttok = token.ASSIGN\n\t\tcase '+':\n\t\t\ttok = token.ADD\n\t\tcase '-':\n\t\t\tif isDecimal(s.peek()) {\n\t\t\t\tch := s.next()\n\t\t\t\ttok = s.scanNumber(ch)\n\t\t\t} else {\n\t\t\t\ttok = token.SUB\n\t\t\t}\n\t\tdefault:\n\t\t\ts.err(\"illegal char\")\n\t\t}\n\t}\n\n\t// finish token ending\n\ts.tokEnd = s.srcPos.Offset\n\n\t// create token literal\n\tvar tokenText string\n\tif s.tokStart >= 0 {\n\t\ttokenText = string(s.src[s.tokStart:s.tokEnd])\n\t}\n\ts.tokStart = s.tokEnd // ensure idempotency of tokenText() call\n\n\treturn token.Token{\n\t\tType: tok,\n\t\tPos:  s.tokPos,\n\t\tText: tokenText,\n\t}\n}\n\nfunc (s *Scanner) scanComment(ch rune) {\n\t// single line comments\n\tif ch == '#' || (ch == '/' && s.peek() != '*') {\n\t\tif ch == '/' && s.peek() != '/' {\n\t\t\ts.err(\"expected '/' for comment\")\n\t\t\treturn\n\t\t}\n\n\t\tch = s.next()\n\t\tfor ch != '\\n' && ch >= 0 && ch != eof {\n\t\t\tch = s.next()\n\t\t}\n\t\tif ch != eof && ch >= 0 {\n\t\t\ts.unread()\n\t\t}\n\t\treturn\n\t}\n\n\t// be sure we get the character after /* This allows us to find comment's\n\t// that are not erminated\n\tif ch == '/' {\n\t\ts.next()\n\t\tch = s.next() // read character after \"/*\"\n\t}\n\n\t// look for /* - style comments\n\tfor {\n\t\tif ch < 0 || ch == eof {\n\t\t\ts.err(\"comment not terminated\")\n\t\t\tbreak\n\t\t}\n\n\t\tch0 := ch\n\t\tch = s.next()\n\t\tif ch0 == '*' && ch == '/' {\n\t\t\tbreak\n\t\t}\n\t}\n}\n\n// scanNumber scans a HCL number definition starting with the given rune\nfunc (s *Scanner) scanNumber(ch rune) token.Type {\n\tif ch == '0' {\n\t\t// check for hexadecimal, octal or float\n\t\tch = s.next()\n\t\tif ch == 'x' || ch == 'X' {\n\t\t\t// hexadecimal\n\t\t\tch = s.next()\n\t\t\tfound := false\n\t\t\tfor isHexadecimal(ch) {\n\t\t\t\tch = s.next()\n\t\t\t\tfound = true\n\t\t\t}\n\n\t\t\tif !found {\n\t\t\t\ts.err(\"illegal hexadecimal number\")\n\t\t\t}\n\n\t\t\tif ch != eof {\n\t\t\t\ts.unread()\n\t\t\t}\n\n\t\t\treturn token.NUMBER\n\t\t}\n\n\t\t// now it's either something like: 0421(octal) or 0.1231(float)\n\t\tillegalOctal := false\n\t\tfor isDecimal(ch) {\n\t\t\tch = s.next()\n\t\t\tif ch == '8' || ch == '9' {\n\t\t\t\t// this is just a possibility. For example 0159 is illegal, but\n\t\t\t\t// 0159.23 is valid. So we mark a possible illegal octal. If\n\t\t\t\t// the next character is not a period, we'll print the error.\n\t\t\t\tillegalOctal = true\n\t\t\t}\n\t\t}\n\n\t\tif ch == 'e' || ch == 'E' {\n\t\t\tch = s.scanExponent(ch)\n\t\t\treturn token.FLOAT\n\t\t}\n\n\t\tif ch == '.' {\n\t\t\tch = s.scanFraction(ch)\n\n\t\t\tif ch == 'e' || ch == 'E' {\n\t\t\t\tch = s.next()\n\t\t\t\tch = s.scanExponent(ch)\n\t\t\t}\n\t\t\treturn token.FLOAT\n\t\t}\n\n\t\tif illegalOctal {\n\t\t\ts.err(\"illegal octal number\")\n\t\t}\n\n\t\tif ch != eof {\n\t\t\ts.unread()\n\t\t}\n\t\treturn token.NUMBER\n\t}\n\n\ts.scanMantissa(ch)\n\tch = s.next() // seek forward\n\tif ch == 'e' || ch == 'E' {\n\t\tch = s.scanExponent(ch)\n\t\treturn token.FLOAT\n\t}\n\n\tif ch == '.' {\n\t\tch = s.scanFraction(ch)\n\t\tif ch == 'e' || ch == 'E' {\n\t\t\tch = s.next()\n\t\t\tch = s.scanExponent(ch)\n\t\t}\n\t\treturn token.FLOAT\n\t}\n\n\tif ch != eof {\n\t\ts.unread()\n\t}\n\treturn token.NUMBER\n}\n\n// scanMantissa scans the mantissa beginning from the rune. It returns the next\n// non decimal rune. It's used to determine wheter it's a fraction or exponent.\nfunc (s *Scanner) scanMantissa(ch rune) rune {\n\tscanned := false\n\tfor isDecimal(ch) {\n\t\tch = s.next()\n\t\tscanned = true\n\t}\n\n\tif scanned && ch != eof {\n\t\ts.unread()\n\t}\n\treturn ch\n}\n\n// scanFraction scans the fraction after the '.' rune\nfunc (s *Scanner) scanFraction(ch rune) rune {\n\tif ch == '.' {\n\t\tch = s.peek() // we peek just to see if we can move forward\n\t\tch = s.scanMantissa(ch)\n\t}\n\treturn ch\n}\n\n// scanExponent scans the remaining parts of an exponent after the 'e' or 'E'\n// rune.\nfunc (s *Scanner) scanExponent(ch rune) rune {\n\tif ch == 'e' || ch == 'E' {\n\t\tch = s.next()\n\t\tif ch == '-' || ch == '+' {\n\t\t\tch = s.next()\n\t\t}\n\t\tch = s.scanMantissa(ch)\n\t}\n\treturn ch\n}\n\n// scanHeredoc scans a heredoc string\nfunc (s *Scanner) scanHeredoc() {\n\t// Scan the second '<' in example: '<<EOF'\n\tif s.next() != '<' {\n\t\ts.err(\"heredoc expected second '<', didn't see it\")\n\t\treturn\n\t}\n\n\t// Get the original offset so we can read just the heredoc ident\n\toffs := s.srcPos.Offset\n\n\t// Scan the identifier\n\tch := s.next()\n\n\t// Indented heredoc syntax\n\tif ch == '-' {\n\t\tch = s.next()\n\t}\n\n\tfor isLetter(ch) || isDigit(ch) {\n\t\tch = s.next()\n\t}\n\n\t// If we reached an EOF then that is not good\n\tif ch == eof {\n\t\ts.err(\"heredoc not terminated\")\n\t\treturn\n\t}\n\n\t// Ignore the '\\r' in Windows line endings\n\tif ch == '\\r' {\n\t\tif s.peek() == '\\n' {\n\t\t\tch = s.next()\n\t\t}\n\t}\n\n\t// If we didn't reach a newline then that is also not good\n\tif ch != '\\n' {\n\t\ts.err(\"invalid characters in heredoc anchor\")\n\t\treturn\n\t}\n\n\t// Read the identifier\n\tidentBytes := s.src[offs : s.srcPos.Offset-s.lastCharLen]\n\tif len(identBytes) == 0 || (len(identBytes) == 1 && identBytes[0] == '-') {\n\t\ts.err(\"zero-length heredoc anchor\")\n\t\treturn\n\t}\n\n\tvar identRegexp *regexp.Regexp\n\tif identBytes[0] == '-' {\n\t\tidentRegexp = regexp.MustCompile(fmt.Sprintf(`^[[:space:]]*%s\\r*\\z`, identBytes[1:]))\n\t} else {\n\t\tidentRegexp = regexp.MustCompile(fmt.Sprintf(`^[[:space:]]*%s\\r*\\z`, identBytes))\n\t}\n\n\t// Read the actual string value\n\tlineStart := s.srcPos.Offset\n\tfor {\n\t\tch := s.next()\n\n\t\t// Special newline handling.\n\t\tif ch == '\\n' {\n\t\t\t// Math is fast, so we first compare the byte counts to see if we have a chance\n\t\t\t// of seeing the same identifier - if the length is less than the number of bytes\n\t\t\t// in the identifier, this cannot be a valid terminator.\n\t\t\tlineBytesLen := s.srcPos.Offset - s.lastCharLen - lineStart\n\t\t\tif lineBytesLen >= len(identBytes) && identRegexp.Match(s.src[lineStart:s.srcPos.Offset-s.lastCharLen]) {\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\t// Not an anchor match, record the start of a new line\n\t\t\tlineStart = s.srcPos.Offset\n\t\t}\n\n\t\tif ch == eof {\n\t\t\ts.err(\"heredoc not terminated\")\n\t\t\treturn\n\t\t}\n\t}\n\n\treturn\n}\n\n// scanString scans a quoted string\nfunc (s *Scanner) scanString() {\n\tbraces := 0\n\tfor {\n\t\t// '\"' opening already consumed\n\t\t// read character after quote\n\t\tch := s.next()\n\n\t\tif (ch == '\\n' && braces == 0) || ch < 0 || ch == eof {\n\t\t\ts.err(\"literal not terminated\")\n\t\t\treturn\n\t\t}\n\n\t\tif ch == '\"' && braces == 0 {\n\t\t\tbreak\n\t\t}\n\n\t\t// If we're going into a ${} then we can ignore quotes for awhile\n\t\tif braces == 0 && ch == '$' && s.peek() == '{' {\n\t\t\tbraces++\n\t\t\ts.next()\n\t\t} else if braces > 0 && ch == '{' {\n\t\t\tbraces++\n\t\t}\n\t\tif braces > 0 && ch == '}' {\n\t\t\tbraces--\n\t\t}\n\n\t\tif ch == '\\\\' {\n\t\t\ts.scanEscape()\n\t\t}\n\t}\n\n\treturn\n}\n\n// scanEscape scans an escape sequence\nfunc (s *Scanner) scanEscape() rune {\n\t// http://en.cppreference.com/w/cpp/language/escape\n\tch := s.next() // read character after '/'\n\tswitch ch {\n\tcase 'a', 'b', 'f', 'n', 'r', 't', 'v', '\\\\', '\"':\n\t\t// nothing to do\n\tcase '0', '1', '2', '3', '4', '5', '6', '7':\n\t\t// octal notation\n\t\tch = s.scanDigits(ch, 8, 3)\n\tcase 'x':\n\t\t// hexademical notation\n\t\tch = s.scanDigits(s.next(), 16, 2)\n\tcase 'u':\n\t\t// universal character name\n\t\tch = s.scanDigits(s.next(), 16, 4)\n\tcase 'U':\n\t\t// universal character name\n\t\tch = s.scanDigits(s.next(), 16, 8)\n\tdefault:\n\t\ts.err(\"illegal char escape\")\n\t}\n\treturn ch\n}\n\n// scanDigits scans a rune with the given base for n times. For example an\n// octal notation \\184 would yield in scanDigits(ch, 8, 3)\nfunc (s *Scanner) scanDigits(ch rune, base, n int) rune {\n\tstart := n\n\tfor n > 0 && digitVal(ch) < base {\n\t\tch = s.next()\n\t\tif ch == eof {\n\t\t\t// If we see an EOF, we halt any more scanning of digits\n\t\t\t// immediately.\n\t\t\tbreak\n\t\t}\n\n\t\tn--\n\t}\n\tif n > 0 {\n\t\ts.err(\"illegal char escape\")\n\t}\n\n\tif n != start && ch != eof {\n\t\t// we scanned all digits, put the last non digit char back,\n\t\t// only if we read anything at all\n\t\ts.unread()\n\t}\n\n\treturn ch\n}\n\n// scanIdentifier scans an identifier and returns the literal string\nfunc (s *Scanner) scanIdentifier() string {\n\toffs := s.srcPos.Offset - s.lastCharLen\n\tch := s.next()\n\tfor isLetter(ch) || isDigit(ch) || ch == '-' || ch == '.' {\n\t\tch = s.next()\n\t}\n\n\tif ch != eof {\n\t\ts.unread() // we got identifier, put back latest char\n\t}\n\n\treturn string(s.src[offs:s.srcPos.Offset])\n}\n\n// recentPosition returns the position of the character immediately after the\n// character or token returned by the last call to Scan.\nfunc (s *Scanner) recentPosition() (pos token.Pos) {\n\tpos.Offset = s.srcPos.Offset - s.lastCharLen\n\tswitch {\n\tcase s.srcPos.Column > 0:\n\t\t// common case: last character was not a '\\n'\n\t\tpos.Line = s.srcPos.Line\n\t\tpos.Column = s.srcPos.Column\n\tcase s.lastLineLen > 0:\n\t\t// last character was a '\\n'\n\t\t// (we cannot be at the beginning of the source\n\t\t// since we have called next() at least once)\n\t\tpos.Line = s.srcPos.Line - 1\n\t\tpos.Column = s.lastLineLen\n\tdefault:\n\t\t// at the beginning of the source\n\t\tpos.Line = 1\n\t\tpos.Column = 1\n\t}\n\treturn\n}\n\n// err prints the error of any scanning to s.Error function. If the function is\n// not defined, by default it prints them to os.Stderr\nfunc (s *Scanner) err(msg string) {\n\ts.ErrorCount++\n\tpos := s.recentPosition()\n\n\tif s.Error != nil {\n\t\ts.Error(pos, msg)\n\t\treturn\n\t}\n\n\tfmt.Fprintf(os.Stderr, \"%s: %s\\n\", pos, msg)\n}\n\n// isHexadecimal returns true if the given rune is a letter\nfunc isLetter(ch rune) bool {\n\treturn 'a' <= ch && ch <= 'z' || 'A' <= ch && ch <= 'Z' || ch == '_' || ch >= 0x80 && unicode.IsLetter(ch)\n}\n\n// isDigit returns true if the given rune is a decimal digit\nfunc isDigit(ch rune) bool {\n\treturn '0' <= ch && ch <= '9' || ch >= 0x80 && unicode.IsDigit(ch)\n}\n\n// isDecimal returns true if the given rune is a decimal number\nfunc isDecimal(ch rune) bool {\n\treturn '0' <= ch && ch <= '9'\n}\n\n// isHexadecimal returns true if the given rune is an hexadecimal number\nfunc isHexadecimal(ch rune) bool {\n\treturn '0' <= ch && ch <= '9' || 'a' <= ch && ch <= 'f' || 'A' <= ch && ch <= 'F'\n}\n\n// isWhitespace returns true if the rune is a space, tab, newline or carriage return\nfunc isWhitespace(ch rune) bool {\n\treturn ch == ' ' || ch == '\\t' || ch == '\\n' || ch == '\\r'\n}\n\n// digitVal returns the integer value of a given octal,decimal or hexadecimal rune\nfunc digitVal(ch rune) int {\n\tswitch {\n\tcase '0' <= ch && ch <= '9':\n\t\treturn int(ch - '0')\n\tcase 'a' <= ch && ch <= 'f':\n\t\treturn int(ch - 'a' + 10)\n\tcase 'A' <= ch && ch <= 'F':\n\t\treturn int(ch - 'A' + 10)\n\t}\n\treturn 16 // larger than any legal digit val\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl/hcl/strconv/quote.go",
    "content": "package strconv\n\nimport (\n\t\"errors\"\n\t\"unicode/utf8\"\n)\n\n// ErrSyntax indicates that a value does not have the right syntax for the target type.\nvar ErrSyntax = errors.New(\"invalid syntax\")\n\n// Unquote interprets s as a single-quoted, double-quoted,\n// or backquoted Go string literal, returning the string value\n// that s quotes.  (If s is single-quoted, it would be a Go\n// character literal; Unquote returns the corresponding\n// one-character string.)\nfunc Unquote(s string) (t string, err error) {\n\tn := len(s)\n\tif n < 2 {\n\t\treturn \"\", ErrSyntax\n\t}\n\tquote := s[0]\n\tif quote != s[n-1] {\n\t\treturn \"\", ErrSyntax\n\t}\n\ts = s[1 : n-1]\n\n\tif quote != '\"' {\n\t\treturn \"\", ErrSyntax\n\t}\n\tif !contains(s, '$') && !contains(s, '{') && contains(s, '\\n') {\n\t\treturn \"\", ErrSyntax\n\t}\n\n\t// Is it trivial?  Avoid allocation.\n\tif !contains(s, '\\\\') && !contains(s, quote) && !contains(s, '$') {\n\t\tswitch quote {\n\t\tcase '\"':\n\t\t\treturn s, nil\n\t\tcase '\\'':\n\t\t\tr, size := utf8.DecodeRuneInString(s)\n\t\t\tif size == len(s) && (r != utf8.RuneError || size != 1) {\n\t\t\t\treturn s, nil\n\t\t\t}\n\t\t}\n\t}\n\n\tvar runeTmp [utf8.UTFMax]byte\n\tbuf := make([]byte, 0, 3*len(s)/2) // Try to avoid more allocations.\n\tfor len(s) > 0 {\n\t\t// If we're starting a '${}' then let it through un-unquoted.\n\t\t// Specifically: we don't unquote any characters within the `${}`\n\t\t// section.\n\t\tif s[0] == '$' && len(s) > 1 && s[1] == '{' {\n\t\t\tbuf = append(buf, '$', '{')\n\t\t\ts = s[2:]\n\n\t\t\t// Continue reading until we find the closing brace, copying as-is\n\t\t\tbraces := 1\n\t\t\tfor len(s) > 0 && braces > 0 {\n\t\t\t\tr, size := utf8.DecodeRuneInString(s)\n\t\t\t\tif r == utf8.RuneError {\n\t\t\t\t\treturn \"\", ErrSyntax\n\t\t\t\t}\n\n\t\t\t\ts = s[size:]\n\n\t\t\t\tn := utf8.EncodeRune(runeTmp[:], r)\n\t\t\t\tbuf = append(buf, runeTmp[:n]...)\n\n\t\t\t\tswitch r {\n\t\t\t\tcase '{':\n\t\t\t\t\tbraces++\n\t\t\t\tcase '}':\n\t\t\t\t\tbraces--\n\t\t\t\t}\n\t\t\t}\n\t\t\tif braces != 0 {\n\t\t\t\treturn \"\", ErrSyntax\n\t\t\t}\n\t\t\tif len(s) == 0 {\n\t\t\t\t// If there's no string left, we're done!\n\t\t\t\tbreak\n\t\t\t} else {\n\t\t\t\t// If there's more left, we need to pop back up to the top of the loop\n\t\t\t\t// in case there's another interpolation in this string.\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\tif s[0] == '\\n' {\n\t\t\treturn \"\", ErrSyntax\n\t\t}\n\n\t\tc, multibyte, ss, err := unquoteChar(s, quote)\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\t\ts = ss\n\t\tif c < utf8.RuneSelf || !multibyte {\n\t\t\tbuf = append(buf, byte(c))\n\t\t} else {\n\t\t\tn := utf8.EncodeRune(runeTmp[:], c)\n\t\t\tbuf = append(buf, runeTmp[:n]...)\n\t\t}\n\t\tif quote == '\\'' && len(s) != 0 {\n\t\t\t// single-quoted must be single character\n\t\t\treturn \"\", ErrSyntax\n\t\t}\n\t}\n\treturn string(buf), nil\n}\n\n// contains reports whether the string contains the byte c.\nfunc contains(s string, c byte) bool {\n\tfor i := 0; i < len(s); i++ {\n\t\tif s[i] == c {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\nfunc unhex(b byte) (v rune, ok bool) {\n\tc := rune(b)\n\tswitch {\n\tcase '0' <= c && c <= '9':\n\t\treturn c - '0', true\n\tcase 'a' <= c && c <= 'f':\n\t\treturn c - 'a' + 10, true\n\tcase 'A' <= c && c <= 'F':\n\t\treturn c - 'A' + 10, true\n\t}\n\treturn\n}\n\nfunc unquoteChar(s string, quote byte) (value rune, multibyte bool, tail string, err error) {\n\t// easy cases\n\tswitch c := s[0]; {\n\tcase c == quote && (quote == '\\'' || quote == '\"'):\n\t\terr = ErrSyntax\n\t\treturn\n\tcase c >= utf8.RuneSelf:\n\t\tr, size := utf8.DecodeRuneInString(s)\n\t\treturn r, true, s[size:], nil\n\tcase c != '\\\\':\n\t\treturn rune(s[0]), false, s[1:], nil\n\t}\n\n\t// hard case: c is backslash\n\tif len(s) <= 1 {\n\t\terr = ErrSyntax\n\t\treturn\n\t}\n\tc := s[1]\n\ts = s[2:]\n\n\tswitch c {\n\tcase 'a':\n\t\tvalue = '\\a'\n\tcase 'b':\n\t\tvalue = '\\b'\n\tcase 'f':\n\t\tvalue = '\\f'\n\tcase 'n':\n\t\tvalue = '\\n'\n\tcase 'r':\n\t\tvalue = '\\r'\n\tcase 't':\n\t\tvalue = '\\t'\n\tcase 'v':\n\t\tvalue = '\\v'\n\tcase 'x', 'u', 'U':\n\t\tn := 0\n\t\tswitch c {\n\t\tcase 'x':\n\t\t\tn = 2\n\t\tcase 'u':\n\t\t\tn = 4\n\t\tcase 'U':\n\t\t\tn = 8\n\t\t}\n\t\tvar v rune\n\t\tif len(s) < n {\n\t\t\terr = ErrSyntax\n\t\t\treturn\n\t\t}\n\t\tfor j := 0; j < n; j++ {\n\t\t\tx, ok := unhex(s[j])\n\t\t\tif !ok {\n\t\t\t\terr = ErrSyntax\n\t\t\t\treturn\n\t\t\t}\n\t\t\tv = v<<4 | x\n\t\t}\n\t\ts = s[n:]\n\t\tif c == 'x' {\n\t\t\t// single-byte string, possibly not UTF-8\n\t\t\tvalue = v\n\t\t\tbreak\n\t\t}\n\t\tif v > utf8.MaxRune {\n\t\t\terr = ErrSyntax\n\t\t\treturn\n\t\t}\n\t\tvalue = v\n\t\tmultibyte = true\n\tcase '0', '1', '2', '3', '4', '5', '6', '7':\n\t\tv := rune(c) - '0'\n\t\tif len(s) < 2 {\n\t\t\terr = ErrSyntax\n\t\t\treturn\n\t\t}\n\t\tfor j := 0; j < 2; j++ { // one digit already; two more\n\t\t\tx := rune(s[j]) - '0'\n\t\t\tif x < 0 || x > 7 {\n\t\t\t\terr = ErrSyntax\n\t\t\t\treturn\n\t\t\t}\n\t\t\tv = (v << 3) | x\n\t\t}\n\t\ts = s[2:]\n\t\tif v > 255 {\n\t\t\terr = ErrSyntax\n\t\t\treturn\n\t\t}\n\t\tvalue = v\n\tcase '\\\\':\n\t\tvalue = '\\\\'\n\tcase '\\'', '\"':\n\t\tif c != quote {\n\t\t\terr = ErrSyntax\n\t\t\treturn\n\t\t}\n\t\tvalue = rune(c)\n\tdefault:\n\t\terr = ErrSyntax\n\t\treturn\n\t}\n\ttail = s\n\treturn\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl/hcl/token/position.go",
    "content": "package token\n\nimport \"fmt\"\n\n// Pos describes an arbitrary source position\n// including the file, line, and column location.\n// A Position is valid if the line number is > 0.\ntype Pos struct {\n\tFilename string // filename, if any\n\tOffset   int    // offset, starting at 0\n\tLine     int    // line number, starting at 1\n\tColumn   int    // column number, starting at 1 (character count)\n}\n\n// IsValid returns true if the position is valid.\nfunc (p *Pos) IsValid() bool { return p.Line > 0 }\n\n// String returns a string in one of several forms:\n//\n//\tfile:line:column    valid position with file name\n//\tline:column         valid position without file name\n//\tfile                invalid position with file name\n//\t-                   invalid position without file name\nfunc (p Pos) String() string {\n\ts := p.Filename\n\tif p.IsValid() {\n\t\tif s != \"\" {\n\t\t\ts += \":\"\n\t\t}\n\t\ts += fmt.Sprintf(\"%d:%d\", p.Line, p.Column)\n\t}\n\tif s == \"\" {\n\t\ts = \"-\"\n\t}\n\treturn s\n}\n\n// Before reports whether the position p is before u.\nfunc (p Pos) Before(u Pos) bool {\n\treturn u.Offset > p.Offset || u.Line > p.Line\n}\n\n// After reports whether the position p is after u.\nfunc (p Pos) After(u Pos) bool {\n\treturn u.Offset < p.Offset || u.Line < p.Line\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl/hcl/token/token.go",
    "content": "// Package token defines constants representing the lexical tokens for HCL\n// (HashiCorp Configuration Language)\npackage token\n\nimport (\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n\n\thclstrconv \"github.com/hashicorp/hcl/hcl/strconv\"\n)\n\n// Token defines a single HCL token which can be obtained via the Scanner\ntype Token struct {\n\tType Type\n\tPos  Pos\n\tText string\n\tJSON bool\n}\n\n// Type is the set of lexical tokens of the HCL (HashiCorp Configuration Language)\ntype Type int\n\nconst (\n\t// Special tokens\n\tILLEGAL Type = iota\n\tEOF\n\tCOMMENT\n\n\tidentifier_beg\n\tIDENT // literals\n\tliteral_beg\n\tNUMBER  // 12345\n\tFLOAT   // 123.45\n\tBOOL    // true,false\n\tSTRING  // \"abc\"\n\tHEREDOC // <<FOO\\nbar\\nFOO\n\tliteral_end\n\tidentifier_end\n\n\toperator_beg\n\tLBRACK // [\n\tLBRACE // {\n\tCOMMA  // ,\n\tPERIOD // .\n\n\tRBRACK // ]\n\tRBRACE // }\n\n\tASSIGN // =\n\tADD    // +\n\tSUB    // -\n\toperator_end\n)\n\nvar tokens = [...]string{\n\tILLEGAL: \"ILLEGAL\",\n\n\tEOF:     \"EOF\",\n\tCOMMENT: \"COMMENT\",\n\n\tIDENT:  \"IDENT\",\n\tNUMBER: \"NUMBER\",\n\tFLOAT:  \"FLOAT\",\n\tBOOL:   \"BOOL\",\n\tSTRING: \"STRING\",\n\n\tLBRACK:  \"LBRACK\",\n\tLBRACE:  \"LBRACE\",\n\tCOMMA:   \"COMMA\",\n\tPERIOD:  \"PERIOD\",\n\tHEREDOC: \"HEREDOC\",\n\n\tRBRACK: \"RBRACK\",\n\tRBRACE: \"RBRACE\",\n\n\tASSIGN: \"ASSIGN\",\n\tADD:    \"ADD\",\n\tSUB:    \"SUB\",\n}\n\n// String returns the string corresponding to the token tok.\nfunc (t Type) String() string {\n\ts := \"\"\n\tif 0 <= t && t < Type(len(tokens)) {\n\t\ts = tokens[t]\n\t}\n\tif s == \"\" {\n\t\ts = \"token(\" + strconv.Itoa(int(t)) + \")\"\n\t}\n\treturn s\n}\n\n// IsIdentifier returns true for tokens corresponding to identifiers and basic\n// type literals; it returns false otherwise.\nfunc (t Type) IsIdentifier() bool { return identifier_beg < t && t < identifier_end }\n\n// IsLiteral returns true for tokens corresponding to basic type literals; it\n// returns false otherwise.\nfunc (t Type) IsLiteral() bool { return literal_beg < t && t < literal_end }\n\n// IsOperator returns true for tokens corresponding to operators and\n// delimiters; it returns false otherwise.\nfunc (t Type) IsOperator() bool { return operator_beg < t && t < operator_end }\n\n// String returns the token's literal text. Note that this is only\n// applicable for certain token types, such as token.IDENT,\n// token.STRING, etc..\nfunc (t Token) String() string {\n\treturn fmt.Sprintf(\"%s %s %s\", t.Pos.String(), t.Type.String(), t.Text)\n}\n\n// Value returns the properly typed value for this token. The type of\n// the returned interface{} is guaranteed based on the Type field.\n//\n// This can only be called for literal types. If it is called for any other\n// type, this will panic.\nfunc (t Token) Value() interface{} {\n\tswitch t.Type {\n\tcase BOOL:\n\t\tif t.Text == \"true\" {\n\t\t\treturn true\n\t\t} else if t.Text == \"false\" {\n\t\t\treturn false\n\t\t}\n\n\t\tpanic(\"unknown bool value: \" + t.Text)\n\tcase FLOAT:\n\t\tv, err := strconv.ParseFloat(t.Text, 64)\n\t\tif err != nil {\n\t\t\tpanic(err)\n\t\t}\n\n\t\treturn float64(v)\n\tcase NUMBER:\n\t\tv, err := strconv.ParseInt(t.Text, 0, 64)\n\t\tif err != nil {\n\t\t\tpanic(err)\n\t\t}\n\n\t\treturn int64(v)\n\tcase IDENT:\n\t\treturn t.Text\n\tcase HEREDOC:\n\t\treturn unindentHeredoc(t.Text)\n\tcase STRING:\n\t\t// Determine the Unquote method to use. If it came from JSON,\n\t\t// then we need to use the built-in unquote since we have to\n\t\t// escape interpolations there.\n\t\tf := hclstrconv.Unquote\n\t\tif t.JSON {\n\t\t\tf = strconv.Unquote\n\t\t}\n\n\t\t// This case occurs if json null is used\n\t\tif t.Text == \"\" {\n\t\t\treturn \"\"\n\t\t}\n\n\t\tv, err := f(t.Text)\n\t\tif err != nil {\n\t\t\tpanic(fmt.Sprintf(\"unquote %s err: %s\", t.Text, err))\n\t\t}\n\n\t\treturn v\n\tdefault:\n\t\tpanic(fmt.Sprintf(\"unimplemented Value for type: %s\", t.Type))\n\t}\n}\n\n// unindentHeredoc returns the string content of a HEREDOC if it is started with <<\n// and the content of a HEREDOC with the hanging indent removed if it is started with\n// a <<-, and the terminating line is at least as indented as the least indented line.\nfunc unindentHeredoc(heredoc string) string {\n\t// We need to find the end of the marker\n\tidx := strings.IndexByte(heredoc, '\\n')\n\tif idx == -1 {\n\t\tpanic(\"heredoc doesn't contain newline\")\n\t}\n\n\tunindent := heredoc[2] == '-'\n\n\t// We can optimize if the heredoc isn't marked for indentation\n\tif !unindent {\n\t\treturn string(heredoc[idx+1 : len(heredoc)-idx+1])\n\t}\n\n\t// We need to unindent each line based on the indentation level of the marker\n\tlines := strings.Split(string(heredoc[idx+1:len(heredoc)-idx+2]), \"\\n\")\n\twhitespacePrefix := lines[len(lines)-1]\n\n\tisIndented := true\n\tfor _, v := range lines {\n\t\tif strings.HasPrefix(v, whitespacePrefix) {\n\t\t\tcontinue\n\t\t}\n\n\t\tisIndented = false\n\t\tbreak\n\t}\n\n\t// If all lines are not at least as indented as the terminating mark, return the\n\t// heredoc as is, but trim the leading space from the marker on the final line.\n\tif !isIndented {\n\t\treturn strings.TrimRight(string(heredoc[idx+1:len(heredoc)-idx+1]), \" \\t\")\n\t}\n\n\tunindentedLines := make([]string, len(lines))\n\tfor k, v := range lines {\n\t\tif k == len(lines)-1 {\n\t\t\tunindentedLines[k] = \"\"\n\t\t\tbreak\n\t\t}\n\n\t\tunindentedLines[k] = strings.TrimPrefix(v, whitespacePrefix)\n\t}\n\n\treturn strings.Join(unindentedLines, \"\\n\")\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl/hcl.go",
    "content": "// Package hcl decodes HCL into usable Go structures.\n//\n// hcl input can come in either pure HCL format or JSON format.\n// It can be parsed into an AST, and then decoded into a structure,\n// or it can be decoded directly from a string into a structure.\n//\n// If you choose to parse HCL into a raw AST, the benefit is that you\n// can write custom visitor implementations to implement custom\n// semantic checks. By default, HCL does not perform any semantic\n// checks.\npackage hcl\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl/json/parser/flatten.go",
    "content": "package parser\n\nimport \"github.com/hashicorp/hcl/hcl/ast\"\n\n// flattenObjects takes an AST node, walks it, and flattens\nfunc flattenObjects(node ast.Node) {\n\tast.Walk(node, func(n ast.Node) (ast.Node, bool) {\n\t\t// We only care about lists, because this is what we modify\n\t\tlist, ok := n.(*ast.ObjectList)\n\t\tif !ok {\n\t\t\treturn n, true\n\t\t}\n\n\t\t// Rebuild the item list\n\t\titems := make([]*ast.ObjectItem, 0, len(list.Items))\n\t\tfrontier := make([]*ast.ObjectItem, len(list.Items))\n\t\tcopy(frontier, list.Items)\n\t\tfor len(frontier) > 0 {\n\t\t\t// Pop the current item\n\t\t\tn := len(frontier)\n\t\t\titem := frontier[n-1]\n\t\t\tfrontier = frontier[:n-1]\n\n\t\t\tswitch v := item.Val.(type) {\n\t\t\tcase *ast.ObjectType:\n\t\t\t\titems, frontier = flattenObjectType(v, item, items, frontier)\n\t\t\tcase *ast.ListType:\n\t\t\t\titems, frontier = flattenListType(v, item, items, frontier)\n\t\t\tdefault:\n\t\t\t\titems = append(items, item)\n\t\t\t}\n\t\t}\n\n\t\t// Reverse the list since the frontier model runs things backwards\n\t\tfor i := len(items)/2 - 1; i >= 0; i-- {\n\t\t\topp := len(items) - 1 - i\n\t\t\titems[i], items[opp] = items[opp], items[i]\n\t\t}\n\n\t\t// Done! Set the original items\n\t\tlist.Items = items\n\t\treturn n, true\n\t})\n}\n\nfunc flattenListType(\n\tot *ast.ListType,\n\titem *ast.ObjectItem,\n\titems []*ast.ObjectItem,\n\tfrontier []*ast.ObjectItem) ([]*ast.ObjectItem, []*ast.ObjectItem) {\n\t// If the list is empty, keep the original list\n\tif len(ot.List) == 0 {\n\t\titems = append(items, item)\n\t\treturn items, frontier\n\t}\n\n\t// All the elements of this object must also be objects!\n\tfor _, subitem := range ot.List {\n\t\tif _, ok := subitem.(*ast.ObjectType); !ok {\n\t\t\titems = append(items, item)\n\t\t\treturn items, frontier\n\t\t}\n\t}\n\n\t// Great! We have a match go through all the items and flatten\n\tfor _, elem := range ot.List {\n\t\t// Add it to the frontier so that we can recurse\n\t\tfrontier = append(frontier, &ast.ObjectItem{\n\t\t\tKeys:        item.Keys,\n\t\t\tAssign:      item.Assign,\n\t\t\tVal:         elem,\n\t\t\tLeadComment: item.LeadComment,\n\t\t\tLineComment: item.LineComment,\n\t\t})\n\t}\n\n\treturn items, frontier\n}\n\nfunc flattenObjectType(\n\tot *ast.ObjectType,\n\titem *ast.ObjectItem,\n\titems []*ast.ObjectItem,\n\tfrontier []*ast.ObjectItem) ([]*ast.ObjectItem, []*ast.ObjectItem) {\n\t// If the list has no items we do not have to flatten anything\n\tif ot.List.Items == nil {\n\t\titems = append(items, item)\n\t\treturn items, frontier\n\t}\n\n\t// All the elements of this object must also be objects!\n\tfor _, subitem := range ot.List.Items {\n\t\tif _, ok := subitem.Val.(*ast.ObjectType); !ok {\n\t\t\titems = append(items, item)\n\t\t\treturn items, frontier\n\t\t}\n\t}\n\n\t// Great! We have a match go through all the items and flatten\n\tfor _, subitem := range ot.List.Items {\n\t\t// Copy the new key\n\t\tkeys := make([]*ast.ObjectKey, len(item.Keys)+len(subitem.Keys))\n\t\tcopy(keys, item.Keys)\n\t\tcopy(keys[len(item.Keys):], subitem.Keys)\n\n\t\t// Add it to the frontier so that we can recurse\n\t\tfrontier = append(frontier, &ast.ObjectItem{\n\t\t\tKeys:        keys,\n\t\t\tAssign:      item.Assign,\n\t\t\tVal:         subitem.Val,\n\t\t\tLeadComment: item.LeadComment,\n\t\t\tLineComment: item.LineComment,\n\t\t})\n\t}\n\n\treturn items, frontier\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl/json/parser/parser.go",
    "content": "package parser\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\n\t\"github.com/hashicorp/hcl/hcl/ast\"\n\thcltoken \"github.com/hashicorp/hcl/hcl/token\"\n\t\"github.com/hashicorp/hcl/json/scanner\"\n\t\"github.com/hashicorp/hcl/json/token\"\n)\n\ntype Parser struct {\n\tsc *scanner.Scanner\n\n\t// Last read token\n\ttok       token.Token\n\tcommaPrev token.Token\n\n\tenableTrace bool\n\tindent      int\n\tn           int // buffer size (max = 1)\n}\n\nfunc newParser(src []byte) *Parser {\n\treturn &Parser{\n\t\tsc: scanner.New(src),\n\t}\n}\n\n// Parse returns the fully parsed source and returns the abstract syntax tree.\nfunc Parse(src []byte) (*ast.File, error) {\n\tp := newParser(src)\n\treturn p.Parse()\n}\n\nvar errEofToken = errors.New(\"EOF token found\")\n\n// Parse returns the fully parsed source and returns the abstract syntax tree.\nfunc (p *Parser) Parse() (*ast.File, error) {\n\tf := &ast.File{}\n\tvar err, scerr error\n\tp.sc.Error = func(pos token.Pos, msg string) {\n\t\tscerr = fmt.Errorf(\"%s: %s\", pos, msg)\n\t}\n\n\t// The root must be an object in JSON\n\tobject, err := p.object()\n\tif scerr != nil {\n\t\treturn nil, scerr\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// We make our final node an object list so it is more HCL compatible\n\tf.Node = object.List\n\n\t// Flatten it, which finds patterns and turns them into more HCL-like\n\t// AST trees.\n\tflattenObjects(f.Node)\n\n\treturn f, nil\n}\n\nfunc (p *Parser) objectList() (*ast.ObjectList, error) {\n\tdefer un(trace(p, \"ParseObjectList\"))\n\tnode := &ast.ObjectList{}\n\n\tfor {\n\t\tn, err := p.objectItem()\n\t\tif err == errEofToken {\n\t\t\tbreak // we are finished\n\t\t}\n\n\t\t// we don't return a nil node, because might want to use already\n\t\t// collected items.\n\t\tif err != nil {\n\t\t\treturn node, err\n\t\t}\n\n\t\tnode.Add(n)\n\n\t\t// Check for a followup comma. If it isn't a comma, then we're done\n\t\tif tok := p.scan(); tok.Type != token.COMMA {\n\t\t\tbreak\n\t\t}\n\t}\n\n\treturn node, nil\n}\n\n// objectItem parses a single object item\nfunc (p *Parser) objectItem() (*ast.ObjectItem, error) {\n\tdefer un(trace(p, \"ParseObjectItem\"))\n\n\tkeys, err := p.objectKey()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\to := &ast.ObjectItem{\n\t\tKeys: keys,\n\t}\n\n\tswitch p.tok.Type {\n\tcase token.COLON:\n\t\tpos := p.tok.Pos\n\t\to.Assign = hcltoken.Pos{\n\t\t\tFilename: pos.Filename,\n\t\t\tOffset:   pos.Offset,\n\t\t\tLine:     pos.Line,\n\t\t\tColumn:   pos.Column,\n\t\t}\n\n\t\to.Val, err = p.objectValue()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\treturn o, nil\n}\n\n// objectKey parses an object key and returns a ObjectKey AST\nfunc (p *Parser) objectKey() ([]*ast.ObjectKey, error) {\n\tkeyCount := 0\n\tkeys := make([]*ast.ObjectKey, 0)\n\n\tfor {\n\t\ttok := p.scan()\n\t\tswitch tok.Type {\n\t\tcase token.EOF:\n\t\t\treturn nil, errEofToken\n\t\tcase token.STRING:\n\t\t\tkeyCount++\n\t\t\tkeys = append(keys, &ast.ObjectKey{\n\t\t\t\tToken: p.tok.HCLToken(),\n\t\t\t})\n\t\tcase token.COLON:\n\t\t\t// If we have a zero keycount it means that we never got\n\t\t\t// an object key, i.e. `{ :`. This is a syntax error.\n\t\t\tif keyCount == 0 {\n\t\t\t\treturn nil, fmt.Errorf(\"expected: STRING got: %s\", p.tok.Type)\n\t\t\t}\n\n\t\t\t// Done\n\t\t\treturn keys, nil\n\t\tcase token.ILLEGAL:\n\t\t\treturn nil, errors.New(\"illegal\")\n\t\tdefault:\n\t\t\treturn nil, fmt.Errorf(\"expected: STRING got: %s\", p.tok.Type)\n\t\t}\n\t}\n}\n\n// object parses any type of object, such as number, bool, string, object or\n// list.\nfunc (p *Parser) objectValue() (ast.Node, error) {\n\tdefer un(trace(p, \"ParseObjectValue\"))\n\ttok := p.scan()\n\n\tswitch tok.Type {\n\tcase token.NUMBER, token.FLOAT, token.BOOL, token.NULL, token.STRING:\n\t\treturn p.literalType()\n\tcase token.LBRACE:\n\t\treturn p.objectType()\n\tcase token.LBRACK:\n\t\treturn p.listType()\n\tcase token.EOF:\n\t\treturn nil, errEofToken\n\t}\n\n\treturn nil, fmt.Errorf(\"Expected object value, got unknown token: %+v\", tok)\n}\n\n// object parses any type of object, such as number, bool, string, object or\n// list.\nfunc (p *Parser) object() (*ast.ObjectType, error) {\n\tdefer un(trace(p, \"ParseType\"))\n\ttok := p.scan()\n\n\tswitch tok.Type {\n\tcase token.LBRACE:\n\t\treturn p.objectType()\n\tcase token.EOF:\n\t\treturn nil, errEofToken\n\t}\n\n\treturn nil, fmt.Errorf(\"Expected object, got unknown token: %+v\", tok)\n}\n\n// objectType parses an object type and returns a ObjectType AST\nfunc (p *Parser) objectType() (*ast.ObjectType, error) {\n\tdefer un(trace(p, \"ParseObjectType\"))\n\n\t// we assume that the currently scanned token is a LBRACE\n\to := &ast.ObjectType{}\n\n\tl, err := p.objectList()\n\n\t// if we hit RBRACE, we are good to go (means we parsed all Items), if it's\n\t// not a RBRACE, it's an syntax error and we just return it.\n\tif err != nil && p.tok.Type != token.RBRACE {\n\t\treturn nil, err\n\t}\n\n\to.List = l\n\treturn o, nil\n}\n\n// listType parses a list type and returns a ListType AST\nfunc (p *Parser) listType() (*ast.ListType, error) {\n\tdefer un(trace(p, \"ParseListType\"))\n\n\t// we assume that the currently scanned token is a LBRACK\n\tl := &ast.ListType{}\n\n\tfor {\n\t\ttok := p.scan()\n\t\tswitch tok.Type {\n\t\tcase token.NUMBER, token.FLOAT, token.STRING:\n\t\t\tnode, err := p.literalType()\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\n\t\t\tl.Add(node)\n\t\tcase token.COMMA:\n\t\t\tcontinue\n\t\tcase token.LBRACE:\n\t\t\tnode, err := p.objectType()\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\n\t\t\tl.Add(node)\n\t\tcase token.BOOL:\n\t\t\t// TODO(arslan) should we support? not supported by HCL yet\n\t\tcase token.LBRACK:\n\t\t\t// TODO(arslan) should we support nested lists? Even though it's\n\t\t\t// written in README of HCL, it's not a part of the grammar\n\t\t\t// (not defined in parse.y)\n\t\tcase token.RBRACK:\n\t\t\t// finished\n\t\t\treturn l, nil\n\t\tdefault:\n\t\t\treturn nil, fmt.Errorf(\"unexpected token while parsing list: %s\", tok.Type)\n\t\t}\n\n\t}\n}\n\n// literalType parses a literal type and returns a LiteralType AST\nfunc (p *Parser) literalType() (*ast.LiteralType, error) {\n\tdefer un(trace(p, \"ParseLiteral\"))\n\n\treturn &ast.LiteralType{\n\t\tToken: p.tok.HCLToken(),\n\t}, nil\n}\n\n// scan returns the next token from the underlying scanner. If a token has\n// been unscanned then read that instead.\nfunc (p *Parser) scan() token.Token {\n\t// If we have a token on the buffer, then return it.\n\tif p.n != 0 {\n\t\tp.n = 0\n\t\treturn p.tok\n\t}\n\n\tp.tok = p.sc.Scan()\n\treturn p.tok\n}\n\n// unscan pushes the previously read token back onto the buffer.\nfunc (p *Parser) unscan() {\n\tp.n = 1\n}\n\n// ----------------------------------------------------------------------------\n// Parsing support\n\nfunc (p *Parser) printTrace(a ...interface{}) {\n\tif !p.enableTrace {\n\t\treturn\n\t}\n\n\tconst dots = \". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . \"\n\tconst n = len(dots)\n\tfmt.Printf(\"%5d:%3d: \", p.tok.Pos.Line, p.tok.Pos.Column)\n\n\ti := 2 * p.indent\n\tfor i > n {\n\t\tfmt.Print(dots)\n\t\ti -= n\n\t}\n\t// i <= n\n\tfmt.Print(dots[0:i])\n\tfmt.Println(a...)\n}\n\nfunc trace(p *Parser, msg string) *Parser {\n\tp.printTrace(msg, \"(\")\n\tp.indent++\n\treturn p\n}\n\n// Usage pattern: defer un(trace(p, \"...\"))\nfunc un(p *Parser) {\n\tp.indent--\n\tp.printTrace(\")\")\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl/json/scanner/scanner.go",
    "content": "package scanner\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"os\"\n\t\"unicode\"\n\t\"unicode/utf8\"\n\n\t\"github.com/hashicorp/hcl/json/token\"\n)\n\n// eof represents a marker rune for the end of the reader.\nconst eof = rune(0)\n\n// Scanner defines a lexical scanner\ntype Scanner struct {\n\tbuf *bytes.Buffer // Source buffer for advancing and scanning\n\tsrc []byte        // Source buffer for immutable access\n\n\t// Source Position\n\tsrcPos  token.Pos // current position\n\tprevPos token.Pos // previous position, used for peek() method\n\n\tlastCharLen int // length of last character in bytes\n\tlastLineLen int // length of last line in characters (for correct column reporting)\n\n\ttokStart int // token text start position\n\ttokEnd   int // token text end  position\n\n\t// Error is called for each error encountered. If no Error\n\t// function is set, the error is reported to os.Stderr.\n\tError func(pos token.Pos, msg string)\n\n\t// ErrorCount is incremented by one for each error encountered.\n\tErrorCount int\n\n\t// tokPos is the start position of most recently scanned token; set by\n\t// Scan. The Filename field is always left untouched by the Scanner.  If\n\t// an error is reported (via Error) and Position is invalid, the scanner is\n\t// not inside a token.\n\ttokPos token.Pos\n}\n\n// New creates and initializes a new instance of Scanner using src as\n// its source content.\nfunc New(src []byte) *Scanner {\n\t// even though we accept a src, we read from a io.Reader compatible type\n\t// (*bytes.Buffer). So in the future we might easily change it to streaming\n\t// read.\n\tb := bytes.NewBuffer(src)\n\ts := &Scanner{\n\t\tbuf: b,\n\t\tsrc: src,\n\t}\n\n\t// srcPosition always starts with 1\n\ts.srcPos.Line = 1\n\treturn s\n}\n\n// next reads the next rune from the bufferred reader. Returns the rune(0) if\n// an error occurs (or io.EOF is returned).\nfunc (s *Scanner) next() rune {\n\tch, size, err := s.buf.ReadRune()\n\tif err != nil {\n\t\t// advance for error reporting\n\t\ts.srcPos.Column++\n\t\ts.srcPos.Offset += size\n\t\ts.lastCharLen = size\n\t\treturn eof\n\t}\n\n\tif ch == utf8.RuneError && size == 1 {\n\t\ts.srcPos.Column++\n\t\ts.srcPos.Offset += size\n\t\ts.lastCharLen = size\n\t\ts.err(\"illegal UTF-8 encoding\")\n\t\treturn ch\n\t}\n\n\t// remember last position\n\ts.prevPos = s.srcPos\n\n\ts.srcPos.Column++\n\ts.lastCharLen = size\n\ts.srcPos.Offset += size\n\n\tif ch == '\\n' {\n\t\ts.srcPos.Line++\n\t\ts.lastLineLen = s.srcPos.Column\n\t\ts.srcPos.Column = 0\n\t}\n\n\t// debug\n\t// fmt.Printf(\"ch: %q, offset:column: %d:%d\\n\", ch, s.srcPos.Offset, s.srcPos.Column)\n\treturn ch\n}\n\n// unread unreads the previous read Rune and updates the source position\nfunc (s *Scanner) unread() {\n\tif err := s.buf.UnreadRune(); err != nil {\n\t\tpanic(err) // this is user fault, we should catch it\n\t}\n\ts.srcPos = s.prevPos // put back last position\n}\n\n// peek returns the next rune without advancing the reader.\nfunc (s *Scanner) peek() rune {\n\tpeek, _, err := s.buf.ReadRune()\n\tif err != nil {\n\t\treturn eof\n\t}\n\n\ts.buf.UnreadRune()\n\treturn peek\n}\n\n// Scan scans the next token and returns the token.\nfunc (s *Scanner) Scan() token.Token {\n\tch := s.next()\n\n\t// skip white space\n\tfor isWhitespace(ch) {\n\t\tch = s.next()\n\t}\n\n\tvar tok token.Type\n\n\t// token text markings\n\ts.tokStart = s.srcPos.Offset - s.lastCharLen\n\n\t// token position, initial next() is moving the offset by one(size of rune\n\t// actually), though we are interested with the starting point\n\ts.tokPos.Offset = s.srcPos.Offset - s.lastCharLen\n\tif s.srcPos.Column > 0 {\n\t\t// common case: last character was not a '\\n'\n\t\ts.tokPos.Line = s.srcPos.Line\n\t\ts.tokPos.Column = s.srcPos.Column\n\t} else {\n\t\t// last character was a '\\n'\n\t\t// (we cannot be at the beginning of the source\n\t\t// since we have called next() at least once)\n\t\ts.tokPos.Line = s.srcPos.Line - 1\n\t\ts.tokPos.Column = s.lastLineLen\n\t}\n\n\tswitch {\n\tcase isLetter(ch):\n\t\tlit := s.scanIdentifier()\n\t\tif lit == \"true\" || lit == \"false\" {\n\t\t\ttok = token.BOOL\n\t\t} else if lit == \"null\" {\n\t\t\ttok = token.NULL\n\t\t} else {\n\t\t\ts.err(\"illegal char\")\n\t\t}\n\tcase isDecimal(ch):\n\t\ttok = s.scanNumber(ch)\n\tdefault:\n\t\tswitch ch {\n\t\tcase eof:\n\t\t\ttok = token.EOF\n\t\tcase '\"':\n\t\t\ttok = token.STRING\n\t\t\ts.scanString()\n\t\tcase '.':\n\t\t\ttok = token.PERIOD\n\t\t\tch = s.peek()\n\t\t\tif isDecimal(ch) {\n\t\t\t\ttok = token.FLOAT\n\t\t\t\tch = s.scanMantissa(ch)\n\t\t\t\tch = s.scanExponent(ch)\n\t\t\t}\n\t\tcase '[':\n\t\t\ttok = token.LBRACK\n\t\tcase ']':\n\t\t\ttok = token.RBRACK\n\t\tcase '{':\n\t\t\ttok = token.LBRACE\n\t\tcase '}':\n\t\t\ttok = token.RBRACE\n\t\tcase ',':\n\t\t\ttok = token.COMMA\n\t\tcase ':':\n\t\t\ttok = token.COLON\n\t\tcase '-':\n\t\t\tif isDecimal(s.peek()) {\n\t\t\t\tch := s.next()\n\t\t\t\ttok = s.scanNumber(ch)\n\t\t\t} else {\n\t\t\t\ts.err(\"illegal char\")\n\t\t\t}\n\t\tdefault:\n\t\t\ts.err(\"illegal char: \" + string(ch))\n\t\t}\n\t}\n\n\t// finish token ending\n\ts.tokEnd = s.srcPos.Offset\n\n\t// create token literal\n\tvar tokenText string\n\tif s.tokStart >= 0 {\n\t\ttokenText = string(s.src[s.tokStart:s.tokEnd])\n\t}\n\ts.tokStart = s.tokEnd // ensure idempotency of tokenText() call\n\n\treturn token.Token{\n\t\tType: tok,\n\t\tPos:  s.tokPos,\n\t\tText: tokenText,\n\t}\n}\n\n// scanNumber scans a HCL number definition starting with the given rune\nfunc (s *Scanner) scanNumber(ch rune) token.Type {\n\tzero := ch == '0'\n\tpos := s.srcPos\n\n\ts.scanMantissa(ch)\n\tch = s.next() // seek forward\n\tif ch == 'e' || ch == 'E' {\n\t\tch = s.scanExponent(ch)\n\t\treturn token.FLOAT\n\t}\n\n\tif ch == '.' {\n\t\tch = s.scanFraction(ch)\n\t\tif ch == 'e' || ch == 'E' {\n\t\t\tch = s.next()\n\t\t\tch = s.scanExponent(ch)\n\t\t}\n\t\treturn token.FLOAT\n\t}\n\n\tif ch != eof {\n\t\ts.unread()\n\t}\n\n\t// If we have a larger number and this is zero, error\n\tif zero && pos != s.srcPos {\n\t\ts.err(\"numbers cannot start with 0\")\n\t}\n\n\treturn token.NUMBER\n}\n\n// scanMantissa scans the mantissa beginning from the rune. It returns the next\n// non decimal rune. It's used to determine wheter it's a fraction or exponent.\nfunc (s *Scanner) scanMantissa(ch rune) rune {\n\tscanned := false\n\tfor isDecimal(ch) {\n\t\tch = s.next()\n\t\tscanned = true\n\t}\n\n\tif scanned && ch != eof {\n\t\ts.unread()\n\t}\n\treturn ch\n}\n\n// scanFraction scans the fraction after the '.' rune\nfunc (s *Scanner) scanFraction(ch rune) rune {\n\tif ch == '.' {\n\t\tch = s.peek() // we peek just to see if we can move forward\n\t\tch = s.scanMantissa(ch)\n\t}\n\treturn ch\n}\n\n// scanExponent scans the remaining parts of an exponent after the 'e' or 'E'\n// rune.\nfunc (s *Scanner) scanExponent(ch rune) rune {\n\tif ch == 'e' || ch == 'E' {\n\t\tch = s.next()\n\t\tif ch == '-' || ch == '+' {\n\t\t\tch = s.next()\n\t\t}\n\t\tch = s.scanMantissa(ch)\n\t}\n\treturn ch\n}\n\n// scanString scans a quoted string\nfunc (s *Scanner) scanString() {\n\tbraces := 0\n\tfor {\n\t\t// '\"' opening already consumed\n\t\t// read character after quote\n\t\tch := s.next()\n\n\t\tif ch == '\\n' || ch < 0 || ch == eof {\n\t\t\ts.err(\"literal not terminated\")\n\t\t\treturn\n\t\t}\n\n\t\tif ch == '\"' {\n\t\t\tbreak\n\t\t}\n\n\t\t// If we're going into a ${} then we can ignore quotes for awhile\n\t\tif braces == 0 && ch == '$' && s.peek() == '{' {\n\t\t\tbraces++\n\t\t\ts.next()\n\t\t} else if braces > 0 && ch == '{' {\n\t\t\tbraces++\n\t\t}\n\t\tif braces > 0 && ch == '}' {\n\t\t\tbraces--\n\t\t}\n\n\t\tif ch == '\\\\' {\n\t\t\ts.scanEscape()\n\t\t}\n\t}\n\n\treturn\n}\n\n// scanEscape scans an escape sequence\nfunc (s *Scanner) scanEscape() rune {\n\t// http://en.cppreference.com/w/cpp/language/escape\n\tch := s.next() // read character after '/'\n\tswitch ch {\n\tcase 'a', 'b', 'f', 'n', 'r', 't', 'v', '\\\\', '\"':\n\t\t// nothing to do\n\tcase '0', '1', '2', '3', '4', '5', '6', '7':\n\t\t// octal notation\n\t\tch = s.scanDigits(ch, 8, 3)\n\tcase 'x':\n\t\t// hexademical notation\n\t\tch = s.scanDigits(s.next(), 16, 2)\n\tcase 'u':\n\t\t// universal character name\n\t\tch = s.scanDigits(s.next(), 16, 4)\n\tcase 'U':\n\t\t// universal character name\n\t\tch = s.scanDigits(s.next(), 16, 8)\n\tdefault:\n\t\ts.err(\"illegal char escape\")\n\t}\n\treturn ch\n}\n\n// scanDigits scans a rune with the given base for n times. For example an\n// octal notation \\184 would yield in scanDigits(ch, 8, 3)\nfunc (s *Scanner) scanDigits(ch rune, base, n int) rune {\n\tfor n > 0 && digitVal(ch) < base {\n\t\tch = s.next()\n\t\tn--\n\t}\n\tif n > 0 {\n\t\ts.err(\"illegal char escape\")\n\t}\n\n\t// we scanned all digits, put the last non digit char back\n\ts.unread()\n\treturn ch\n}\n\n// scanIdentifier scans an identifier and returns the literal string\nfunc (s *Scanner) scanIdentifier() string {\n\toffs := s.srcPos.Offset - s.lastCharLen\n\tch := s.next()\n\tfor isLetter(ch) || isDigit(ch) || ch == '-' {\n\t\tch = s.next()\n\t}\n\n\tif ch != eof {\n\t\ts.unread() // we got identifier, put back latest char\n\t}\n\n\treturn string(s.src[offs:s.srcPos.Offset])\n}\n\n// recentPosition returns the position of the character immediately after the\n// character or token returned by the last call to Scan.\nfunc (s *Scanner) recentPosition() (pos token.Pos) {\n\tpos.Offset = s.srcPos.Offset - s.lastCharLen\n\tswitch {\n\tcase s.srcPos.Column > 0:\n\t\t// common case: last character was not a '\\n'\n\t\tpos.Line = s.srcPos.Line\n\t\tpos.Column = s.srcPos.Column\n\tcase s.lastLineLen > 0:\n\t\t// last character was a '\\n'\n\t\t// (we cannot be at the beginning of the source\n\t\t// since we have called next() at least once)\n\t\tpos.Line = s.srcPos.Line - 1\n\t\tpos.Column = s.lastLineLen\n\tdefault:\n\t\t// at the beginning of the source\n\t\tpos.Line = 1\n\t\tpos.Column = 1\n\t}\n\treturn\n}\n\n// err prints the error of any scanning to s.Error function. If the function is\n// not defined, by default it prints them to os.Stderr\nfunc (s *Scanner) err(msg string) {\n\ts.ErrorCount++\n\tpos := s.recentPosition()\n\n\tif s.Error != nil {\n\t\ts.Error(pos, msg)\n\t\treturn\n\t}\n\n\tfmt.Fprintf(os.Stderr, \"%s: %s\\n\", pos, msg)\n}\n\n// isHexadecimal returns true if the given rune is a letter\nfunc isLetter(ch rune) bool {\n\treturn 'a' <= ch && ch <= 'z' || 'A' <= ch && ch <= 'Z' || ch == '_' || ch >= 0x80 && unicode.IsLetter(ch)\n}\n\n// isHexadecimal returns true if the given rune is a decimal digit\nfunc isDigit(ch rune) bool {\n\treturn '0' <= ch && ch <= '9' || ch >= 0x80 && unicode.IsDigit(ch)\n}\n\n// isHexadecimal returns true if the given rune is a decimal number\nfunc isDecimal(ch rune) bool {\n\treturn '0' <= ch && ch <= '9'\n}\n\n// isHexadecimal returns true if the given rune is an hexadecimal number\nfunc isHexadecimal(ch rune) bool {\n\treturn '0' <= ch && ch <= '9' || 'a' <= ch && ch <= 'f' || 'A' <= ch && ch <= 'F'\n}\n\n// isWhitespace returns true if the rune is a space, tab, newline or carriage return\nfunc isWhitespace(ch rune) bool {\n\treturn ch == ' ' || ch == '\\t' || ch == '\\n' || ch == '\\r'\n}\n\n// digitVal returns the integer value of a given octal,decimal or hexadecimal rune\nfunc digitVal(ch rune) int {\n\tswitch {\n\tcase '0' <= ch && ch <= '9':\n\t\treturn int(ch - '0')\n\tcase 'a' <= ch && ch <= 'f':\n\t\treturn int(ch - 'a' + 10)\n\tcase 'A' <= ch && ch <= 'F':\n\t\treturn int(ch - 'A' + 10)\n\t}\n\treturn 16 // larger than any legal digit val\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl/json/token/position.go",
    "content": "package token\n\nimport \"fmt\"\n\n// Pos describes an arbitrary source position\n// including the file, line, and column location.\n// A Position is valid if the line number is > 0.\ntype Pos struct {\n\tFilename string // filename, if any\n\tOffset   int    // offset, starting at 0\n\tLine     int    // line number, starting at 1\n\tColumn   int    // column number, starting at 1 (character count)\n}\n\n// IsValid returns true if the position is valid.\nfunc (p *Pos) IsValid() bool { return p.Line > 0 }\n\n// String returns a string in one of several forms:\n//\n//\tfile:line:column    valid position with file name\n//\tline:column         valid position without file name\n//\tfile                invalid position with file name\n//\t-                   invalid position without file name\nfunc (p Pos) String() string {\n\ts := p.Filename\n\tif p.IsValid() {\n\t\tif s != \"\" {\n\t\t\ts += \":\"\n\t\t}\n\t\ts += fmt.Sprintf(\"%d:%d\", p.Line, p.Column)\n\t}\n\tif s == \"\" {\n\t\ts = \"-\"\n\t}\n\treturn s\n}\n\n// Before reports whether the position p is before u.\nfunc (p Pos) Before(u Pos) bool {\n\treturn u.Offset > p.Offset || u.Line > p.Line\n}\n\n// After reports whether the position p is after u.\nfunc (p Pos) After(u Pos) bool {\n\treturn u.Offset < p.Offset || u.Line < p.Line\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl/json/token/token.go",
    "content": "package token\n\nimport (\n\t\"fmt\"\n\t\"strconv\"\n\n\thcltoken \"github.com/hashicorp/hcl/hcl/token\"\n)\n\n// Token defines a single HCL token which can be obtained via the Scanner\ntype Token struct {\n\tType Type\n\tPos  Pos\n\tText string\n}\n\n// Type is the set of lexical tokens of the HCL (HashiCorp Configuration Language)\ntype Type int\n\nconst (\n\t// Special tokens\n\tILLEGAL Type = iota\n\tEOF\n\n\tidentifier_beg\n\tliteral_beg\n\tNUMBER // 12345\n\tFLOAT  // 123.45\n\tBOOL   // true,false\n\tSTRING // \"abc\"\n\tNULL   // null\n\tliteral_end\n\tidentifier_end\n\n\toperator_beg\n\tLBRACK // [\n\tLBRACE // {\n\tCOMMA  // ,\n\tPERIOD // .\n\tCOLON  // :\n\n\tRBRACK // ]\n\tRBRACE // }\n\n\toperator_end\n)\n\nvar tokens = [...]string{\n\tILLEGAL: \"ILLEGAL\",\n\n\tEOF: \"EOF\",\n\n\tNUMBER: \"NUMBER\",\n\tFLOAT:  \"FLOAT\",\n\tBOOL:   \"BOOL\",\n\tSTRING: \"STRING\",\n\tNULL:   \"NULL\",\n\n\tLBRACK: \"LBRACK\",\n\tLBRACE: \"LBRACE\",\n\tCOMMA:  \"COMMA\",\n\tPERIOD: \"PERIOD\",\n\tCOLON:  \"COLON\",\n\n\tRBRACK: \"RBRACK\",\n\tRBRACE: \"RBRACE\",\n}\n\n// String returns the string corresponding to the token tok.\nfunc (t Type) String() string {\n\ts := \"\"\n\tif 0 <= t && t < Type(len(tokens)) {\n\t\ts = tokens[t]\n\t}\n\tif s == \"\" {\n\t\ts = \"token(\" + strconv.Itoa(int(t)) + \")\"\n\t}\n\treturn s\n}\n\n// IsIdentifier returns true for tokens corresponding to identifiers and basic\n// type literals; it returns false otherwise.\nfunc (t Type) IsIdentifier() bool { return identifier_beg < t && t < identifier_end }\n\n// IsLiteral returns true for tokens corresponding to basic type literals; it\n// returns false otherwise.\nfunc (t Type) IsLiteral() bool { return literal_beg < t && t < literal_end }\n\n// IsOperator returns true for tokens corresponding to operators and\n// delimiters; it returns false otherwise.\nfunc (t Type) IsOperator() bool { return operator_beg < t && t < operator_end }\n\n// String returns the token's literal text. Note that this is only\n// applicable for certain token types, such as token.IDENT,\n// token.STRING, etc..\nfunc (t Token) String() string {\n\treturn fmt.Sprintf(\"%s %s %s\", t.Pos.String(), t.Type.String(), t.Text)\n}\n\n// HCLToken converts this token to an HCL token.\n//\n// The token type must be a literal type or this will panic.\nfunc (t Token) HCLToken() hcltoken.Token {\n\tswitch t.Type {\n\tcase BOOL:\n\t\treturn hcltoken.Token{Type: hcltoken.BOOL, Text: t.Text}\n\tcase FLOAT:\n\t\treturn hcltoken.Token{Type: hcltoken.FLOAT, Text: t.Text}\n\tcase NULL:\n\t\treturn hcltoken.Token{Type: hcltoken.STRING, Text: \"\"}\n\tcase NUMBER:\n\t\treturn hcltoken.Token{Type: hcltoken.NUMBER, Text: t.Text}\n\tcase STRING:\n\t\treturn hcltoken.Token{Type: hcltoken.STRING, Text: t.Text, JSON: true}\n\tdefault:\n\t\tpanic(fmt.Sprintf(\"unimplemented HCLToken for type: %s\", t.Type))\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl/lex.go",
    "content": "package hcl\n\nimport (\n\t\"unicode\"\n\t\"unicode/utf8\"\n)\n\ntype lexModeValue byte\n\nconst (\n\tlexModeUnknown lexModeValue = iota\n\tlexModeHcl\n\tlexModeJson\n)\n\n// lexMode returns whether we're going to be parsing in JSON\n// mode or HCL mode.\nfunc lexMode(v []byte) lexModeValue {\n\tvar (\n\t\tr      rune\n\t\tw      int\n\t\toffset int\n\t)\n\n\tfor {\n\t\tr, w = utf8.DecodeRune(v[offset:])\n\t\toffset += w\n\t\tif unicode.IsSpace(r) {\n\t\t\tcontinue\n\t\t}\n\t\tif r == '{' {\n\t\t\treturn lexModeJson\n\t\t}\n\t\tbreak\n\t}\n\n\treturn lexModeHcl\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl/parse.go",
    "content": "package hcl\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/hashicorp/hcl/hcl/ast\"\n\thclParser \"github.com/hashicorp/hcl/hcl/parser\"\n\tjsonParser \"github.com/hashicorp/hcl/json/parser\"\n)\n\n// ParseBytes accepts as input byte slice and returns ast tree.\n//\n// Input can be either JSON or HCL\nfunc ParseBytes(in []byte) (*ast.File, error) {\n\treturn parse(in)\n}\n\n// ParseString accepts input as a string and returns ast tree.\nfunc ParseString(input string) (*ast.File, error) {\n\treturn parse([]byte(input))\n}\n\nfunc parse(in []byte) (*ast.File, error) {\n\tswitch lexMode(in) {\n\tcase lexModeHcl:\n\t\treturn hclParser.Parse(in)\n\tcase lexModeJson:\n\t\treturn jsonParser.Parse(in)\n\t}\n\n\treturn nil, fmt.Errorf(\"unknown config format\")\n}\n\n// Parse parses the given input and returns the root object.\n//\n// The input format can be either HCL or JSON.\nfunc Parse(input string) (*ast.File, error) {\n\treturn parse([]byte(input))\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/LICENSE",
    "content": "Mozilla Public License, version 2.0\n\n1. Definitions\n\n1.1. “Contributor”\n\n     means each individual or legal entity that creates, contributes to the\n     creation of, or owns Covered Software.\n\n1.2. “Contributor Version”\n\n     means the combination of the Contributions of others (if any) used by a\n     Contributor and that particular Contributor’s Contribution.\n\n1.3. “Contribution”\n\n     means Covered Software of a particular Contributor.\n\n1.4. “Covered Software”\n\n     means Source Code Form to which the initial Contributor has attached the\n     notice in Exhibit A, the Executable Form of such Source Code Form, and\n     Modifications of such Source Code Form, in each case including portions\n     thereof.\n\n1.5. “Incompatible With Secondary Licenses”\n     means\n\n     a. that the initial Contributor has attached the notice described in\n        Exhibit B to the Covered Software; or\n\n     b. that the Covered Software was made available under the terms of version\n        1.1 or earlier of the License, but not also under the terms of a\n        Secondary License.\n\n1.6. “Executable Form”\n\n     means any form of the work other than Source Code Form.\n\n1.7. “Larger Work”\n\n     means a work that combines Covered Software with other material, in a separate\n     file or files, that is not Covered Software.\n\n1.8. “License”\n\n     means this document.\n\n1.9. “Licensable”\n\n     means having the right to grant, to the maximum extent possible, whether at the\n     time of the initial grant or subsequently, any and all of the rights conveyed by\n     this License.\n\n1.10. “Modifications”\n\n     means any of the following:\n\n     a. any file in Source Code Form that results from an addition to, deletion\n        from, or modification of the contents of Covered Software; or\n\n     b. any new file in Source Code Form that contains any Covered Software.\n\n1.11. “Patent Claims” of a Contributor\n\n      means any patent claim(s), including without limitation, method, process,\n      and apparatus claims, in any patent Licensable by such Contributor that\n      would be infringed, but for the grant of the License, by the making,\n      using, selling, offering for sale, having made, import, or transfer of\n      either its Contributions or its Contributor Version.\n\n1.12. “Secondary License”\n\n      means either the GNU General Public License, Version 2.0, the GNU Lesser\n      General Public License, Version 2.1, the GNU Affero General Public\n      License, Version 3.0, or any later versions of those licenses.\n\n1.13. “Source Code Form”\n\n      means the form of the work preferred for making modifications.\n\n1.14. “You” (or “Your”)\n\n      means an individual or a legal entity exercising rights under this\n      License. For legal entities, “You” includes any entity that controls, is\n      controlled by, or is under common control with You. For purposes of this\n      definition, “control” means (a) the power, direct or indirect, to cause\n      the direction or management of such entity, whether by contract or\n      otherwise, or (b) ownership of more than fifty percent (50%) of the\n      outstanding shares or beneficial ownership of such entity.\n\n\n2. License Grants and Conditions\n\n2.1. Grants\n\n     Each Contributor hereby grants You a world-wide, royalty-free,\n     non-exclusive license:\n\n     a. under intellectual property rights (other than patent or trademark)\n        Licensable by such Contributor to use, reproduce, make available,\n        modify, display, perform, distribute, and otherwise exploit its\n        Contributions, either on an unmodified basis, with Modifications, or as\n        part of a Larger Work; and\n\n     b. under Patent Claims of such Contributor to make, use, sell, offer for\n        sale, have made, import, and otherwise transfer either its Contributions\n        or its Contributor Version.\n\n2.2. Effective Date\n\n     The licenses granted in Section 2.1 with respect to any Contribution become\n     effective for each Contribution on the date the Contributor first distributes\n     such Contribution.\n\n2.3. Limitations on Grant Scope\n\n     The licenses granted in this Section 2 are the only rights granted under this\n     License. No additional rights or licenses will be implied from the distribution\n     or licensing of Covered Software under this License. Notwithstanding Section\n     2.1(b) above, no patent license is granted by a Contributor:\n\n     a. for any code that a Contributor has removed from Covered Software; or\n\n     b. for infringements caused by: (i) Your and any other third party’s\n        modifications of Covered Software, or (ii) the combination of its\n        Contributions with other software (except as part of its Contributor\n        Version); or\n\n     c. under Patent Claims infringed by Covered Software in the absence of its\n        Contributions.\n\n     This License does not grant any rights in the trademarks, service marks, or\n     logos of any Contributor (except as may be necessary to comply with the\n     notice requirements in Section 3.4).\n\n2.4. Subsequent Licenses\n\n     No Contributor makes additional grants as a result of Your choice to\n     distribute the Covered Software under a subsequent version of this License\n     (see Section 10.2) or under the terms of a Secondary License (if permitted\n     under the terms of Section 3.3).\n\n2.5. Representation\n\n     Each Contributor represents that the Contributor believes its Contributions\n     are its original creation(s) or it has sufficient rights to grant the\n     rights to its Contributions conveyed by this License.\n\n2.6. Fair Use\n\n     This License is not intended to limit any rights You have under applicable\n     copyright doctrines of fair use, fair dealing, or other equivalents.\n\n2.7. Conditions\n\n     Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in\n     Section 2.1.\n\n\n3. Responsibilities\n\n3.1. Distribution of Source Form\n\n     All distribution of Covered Software in Source Code Form, including any\n     Modifications that You create or to which You contribute, must be under the\n     terms of this License. You must inform recipients that the Source Code Form\n     of the Covered Software is governed by the terms of this License, and how\n     they can obtain a copy of this License. You may not attempt to alter or\n     restrict the recipients’ rights in the Source Code Form.\n\n3.2. Distribution of Executable Form\n\n     If You distribute Covered Software in Executable Form then:\n\n     a. such Covered Software must also be made available in Source Code Form,\n        as described in Section 3.1, and You must inform recipients of the\n        Executable Form how they can obtain a copy of such Source Code Form by\n        reasonable means in a timely manner, at a charge no more than the cost\n        of distribution to the recipient; and\n\n     b. You may distribute such Executable Form under the terms of this License,\n        or sublicense it under different terms, provided that the license for\n        the Executable Form does not attempt to limit or alter the recipients’\n        rights in the Source Code Form under this License.\n\n3.3. Distribution of a Larger Work\n\n     You may create and distribute a Larger Work under terms of Your choice,\n     provided that You also comply with the requirements of this License for the\n     Covered Software. If the Larger Work is a combination of Covered Software\n     with a work governed by one or more Secondary Licenses, and the Covered\n     Software is not Incompatible With Secondary Licenses, this License permits\n     You to additionally distribute such Covered Software under the terms of\n     such Secondary License(s), so that the recipient of the Larger Work may, at\n     their option, further distribute the Covered Software under the terms of\n     either this License or such Secondary License(s).\n\n3.4. Notices\n\n     You may not remove or alter the substance of any license notices (including\n     copyright notices, patent notices, disclaimers of warranty, or limitations\n     of liability) contained within the Source Code Form of the Covered\n     Software, except that You may alter any license notices to the extent\n     required to remedy known factual inaccuracies.\n\n3.5. Application of Additional Terms\n\n     You may choose to offer, and to charge a fee for, warranty, support,\n     indemnity or liability obligations to one or more recipients of Covered\n     Software. However, You may do so only on Your own behalf, and not on behalf\n     of any Contributor. You must make it absolutely clear that any such\n     warranty, support, indemnity, or liability obligation is offered by You\n     alone, and You hereby agree to indemnify every Contributor for any\n     liability incurred by such Contributor as a result of warranty, support,\n     indemnity or liability terms You offer. You may include additional\n     disclaimers of warranty and limitations of liability specific to any\n     jurisdiction.\n\n4. Inability to Comply Due to Statute or Regulation\n\n   If it is impossible for You to comply with any of the terms of this License\n   with respect to some or all of the Covered Software due to statute, judicial\n   order, or regulation then You must: (a) comply with the terms of this License\n   to the maximum extent possible; and (b) describe the limitations and the code\n   they affect. Such description must be placed in a text file included with all\n   distributions of the Covered Software under this License. Except to the\n   extent prohibited by statute or regulation, such description must be\n   sufficiently detailed for a recipient of ordinary skill to be able to\n   understand it.\n\n5. Termination\n\n5.1. The rights granted under this License will terminate automatically if You\n     fail to comply with any of its terms. However, if You become compliant,\n     then the rights granted under this License from a particular Contributor\n     are reinstated (a) provisionally, unless and until such Contributor\n     explicitly and finally terminates Your grants, and (b) on an ongoing basis,\n     if such Contributor fails to notify You of the non-compliance by some\n     reasonable means prior to 60 days after You have come back into compliance.\n     Moreover, Your grants from a particular Contributor are reinstated on an\n     ongoing basis if such Contributor notifies You of the non-compliance by\n     some reasonable means, this is the first time You have received notice of\n     non-compliance with this License from such Contributor, and You become\n     compliant prior to 30 days after Your receipt of the notice.\n\n5.2. If You initiate litigation against any entity by asserting a patent\n     infringement claim (excluding declaratory judgment actions, counter-claims,\n     and cross-claims) alleging that a Contributor Version directly or\n     indirectly infringes any patent, then the rights granted to You by any and\n     all Contributors for the Covered Software under Section 2.1 of this License\n     shall terminate.\n\n5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user\n     license agreements (excluding distributors and resellers) which have been\n     validly granted by You or Your distributors under this License prior to\n     termination shall survive termination.\n\n6. Disclaimer of Warranty\n\n   Covered Software is provided under this License on an “as is” basis, without\n   warranty of any kind, either expressed, implied, or statutory, including,\n   without limitation, warranties that the Covered Software is free of defects,\n   merchantable, fit for a particular purpose or non-infringing. The entire\n   risk as to the quality and performance of the Covered Software is with You.\n   Should any Covered Software prove defective in any respect, You (not any\n   Contributor) assume the cost of any necessary servicing, repair, or\n   correction. This disclaimer of warranty constitutes an essential part of this\n   License. No use of  any Covered Software is authorized under this License\n   except under this disclaimer.\n\n7. Limitation of Liability\n\n   Under no circumstances and under no legal theory, whether tort (including\n   negligence), contract, or otherwise, shall any Contributor, or anyone who\n   distributes Covered Software as permitted above, be liable to You for any\n   direct, indirect, special, incidental, or consequential damages of any\n   character including, without limitation, damages for lost profits, loss of\n   goodwill, work stoppage, computer failure or malfunction, or any and all\n   other commercial damages or losses, even if such party shall have been\n   informed of the possibility of such damages. This limitation of liability\n   shall not apply to liability for death or personal injury resulting from such\n   party’s negligence to the extent applicable law prohibits such limitation.\n   Some jurisdictions do not allow the exclusion or limitation of incidental or\n   consequential damages, so this exclusion and limitation may not apply to You.\n\n8. Litigation\n\n   Any litigation relating to this License may be brought only in the courts of\n   a jurisdiction where the defendant maintains its principal place of business\n   and such litigation shall be governed by laws of that jurisdiction, without\n   reference to its conflict-of-law provisions. Nothing in this Section shall\n   prevent a party’s ability to bring cross-claims or counter-claims.\n\n9. Miscellaneous\n\n   This License represents the complete agreement concerning the subject matter\n   hereof. If any provision of this License is held to be unenforceable, such\n   provision shall be reformed only to the extent necessary to make it\n   enforceable. Any law or regulation which provides that the language of a\n   contract shall be construed against the drafter shall not be used to construe\n   this License against a Contributor.\n\n\n10. Versions of the License\n\n10.1. New Versions\n\n      Mozilla Foundation is the license steward. Except as provided in Section\n      10.3, no one other than the license steward has the right to modify or\n      publish new versions of this License. Each version will be given a\n      distinguishing version number.\n\n10.2. Effect of New Versions\n\n      You may distribute the Covered Software under the terms of the version of\n      the License under which You originally received the Covered Software, or\n      under the terms of any subsequent version published by the license\n      steward.\n\n10.3. Modified Versions\n\n      If you create software not governed by this License, and you want to\n      create a new license for such software, you may create and use a modified\n      version of this License if you rename the license and remove any\n      references to the name of the license steward (except to note that such\n      modified license differs from this License).\n\n10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses\n      If You choose to distribute Source Code Form that is Incompatible With\n      Secondary Licenses under the terms of this version of the License, the\n      notice described in Exhibit B of this License must be attached.\n\nExhibit A - Source Code Form License Notice\n\n      This Source Code Form is subject to the\n      terms of the Mozilla Public License, v.\n      2.0. If a copy of the MPL was not\n      distributed with this file, You can\n      obtain one at\n      http://mozilla.org/MPL/2.0/.\n\nIf it is not possible or desirable to put the notice in a particular file, then\nYou may include the notice in a location (such as a LICENSE file in a relevant\ndirectory) where a recipient would be likely to look for such a notice.\n\nYou may add additional accurate notices of copyright ownership.\n\nExhibit B - “Incompatible With Secondary Licenses” Notice\n\n      This Source Code Form is “Incompatible\n      With Secondary Licenses”, as defined by\n      the Mozilla Public License, v. 2.0.\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/ext/dynblock/expand_body.go",
    "content": "package dynblock\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// expandBody wraps another hcl.Body and expands any \"dynamic\" blocks found\n// inside whenever Content or PartialContent is called.\ntype expandBody struct {\n\toriginal   hcl.Body\n\tforEachCtx *hcl.EvalContext\n\titeration  *iteration // non-nil if we're nested inside another \"dynamic\" block\n\n\t// These are used with PartialContent to produce a \"remaining items\"\n\t// body to return. They are nil on all bodies fresh out of the transformer.\n\t//\n\t// Note that this is re-implemented here rather than delegating to the\n\t// existing support required by the underlying body because we need to\n\t// retain access to the entire original body on subsequent decode operations\n\t// so we can retain any \"dynamic\" blocks for types we didn't take consume\n\t// on the first pass.\n\thiddenAttrs  map[string]struct{}\n\thiddenBlocks map[string]hcl.BlockHeaderSchema\n}\n\nfunc (b *expandBody) Content(schema *hcl.BodySchema) (*hcl.BodyContent, hcl.Diagnostics) {\n\textSchema := b.extendSchema(schema)\n\trawContent, diags := b.original.Content(extSchema)\n\n\tblocks, blockDiags := b.expandBlocks(schema, rawContent.Blocks, false)\n\tdiags = append(diags, blockDiags...)\n\tattrs := b.prepareAttributes(rawContent.Attributes)\n\n\tcontent := &hcl.BodyContent{\n\t\tAttributes:       attrs,\n\t\tBlocks:           blocks,\n\t\tMissingItemRange: b.original.MissingItemRange(),\n\t}\n\n\treturn content, diags\n}\n\nfunc (b *expandBody) PartialContent(schema *hcl.BodySchema) (*hcl.BodyContent, hcl.Body, hcl.Diagnostics) {\n\textSchema := b.extendSchema(schema)\n\trawContent, _, diags := b.original.PartialContent(extSchema)\n\t// We discard the \"remain\" argument above because we're going to construct\n\t// our own remain that also takes into account remaining \"dynamic\" blocks.\n\n\tblocks, blockDiags := b.expandBlocks(schema, rawContent.Blocks, true)\n\tdiags = append(diags, blockDiags...)\n\tattrs := b.prepareAttributes(rawContent.Attributes)\n\n\tcontent := &hcl.BodyContent{\n\t\tAttributes:       attrs,\n\t\tBlocks:           blocks,\n\t\tMissingItemRange: b.original.MissingItemRange(),\n\t}\n\n\tremain := &expandBody{\n\t\toriginal:     b.original,\n\t\tforEachCtx:   b.forEachCtx,\n\t\titeration:    b.iteration,\n\t\thiddenAttrs:  make(map[string]struct{}),\n\t\thiddenBlocks: make(map[string]hcl.BlockHeaderSchema),\n\t}\n\tfor name := range b.hiddenAttrs {\n\t\tremain.hiddenAttrs[name] = struct{}{}\n\t}\n\tfor typeName, blockS := range b.hiddenBlocks {\n\t\tremain.hiddenBlocks[typeName] = blockS\n\t}\n\tfor _, attrS := range schema.Attributes {\n\t\tremain.hiddenAttrs[attrS.Name] = struct{}{}\n\t}\n\tfor _, blockS := range schema.Blocks {\n\t\tremain.hiddenBlocks[blockS.Type] = blockS\n\t}\n\n\treturn content, remain, diags\n}\n\nfunc (b *expandBody) extendSchema(schema *hcl.BodySchema) *hcl.BodySchema {\n\t// We augment the requested schema to also include our special \"dynamic\"\n\t// block type, since then we'll get instances of it interleaved with\n\t// all of the literal child blocks we must also include.\n\textSchema := &hcl.BodySchema{\n\t\tAttributes: schema.Attributes,\n\t\tBlocks:     make([]hcl.BlockHeaderSchema, len(schema.Blocks), len(schema.Blocks)+len(b.hiddenBlocks)+1),\n\t}\n\tcopy(extSchema.Blocks, schema.Blocks)\n\textSchema.Blocks = append(extSchema.Blocks, dynamicBlockHeaderSchema)\n\n\t// If we have any hiddenBlocks then we also need to register those here\n\t// so that a call to \"Content\" on the underlying body won't fail.\n\t// (We'll filter these out again once we process the result of either\n\t// Content or PartialContent.)\n\tfor _, blockS := range b.hiddenBlocks {\n\t\textSchema.Blocks = append(extSchema.Blocks, blockS)\n\t}\n\n\t// If we have any hiddenAttrs then we also need to register these, for\n\t// the same reason as we deal with hiddenBlocks above.\n\tif len(b.hiddenAttrs) != 0 {\n\t\tnewAttrs := make([]hcl.AttributeSchema, len(schema.Attributes), len(schema.Attributes)+len(b.hiddenAttrs))\n\t\tcopy(newAttrs, extSchema.Attributes)\n\t\tfor name := range b.hiddenAttrs {\n\t\t\tnewAttrs = append(newAttrs, hcl.AttributeSchema{\n\t\t\t\tName:     name,\n\t\t\t\tRequired: false,\n\t\t\t})\n\t\t}\n\t\textSchema.Attributes = newAttrs\n\t}\n\n\treturn extSchema\n}\n\nfunc (b *expandBody) prepareAttributes(rawAttrs hcl.Attributes) hcl.Attributes {\n\tif len(b.hiddenAttrs) == 0 && b.iteration == nil {\n\t\t// Easy path: just pass through the attrs from the original body verbatim\n\t\treturn rawAttrs\n\t}\n\n\t// Otherwise we have some work to do: we must filter out any attributes\n\t// that are hidden (since a previous PartialContent call already saw these)\n\t// and wrap the expressions of the inner attributes so that they will\n\t// have access to our iteration variables.\n\tattrs := make(hcl.Attributes, len(rawAttrs))\n\tfor name, rawAttr := range rawAttrs {\n\t\tif _, hidden := b.hiddenAttrs[name]; hidden {\n\t\t\tcontinue\n\t\t}\n\t\tif b.iteration != nil {\n\t\t\tattr := *rawAttr // shallow copy so we can mutate it\n\t\t\tattr.Expr = exprWrap{\n\t\t\t\tExpression: attr.Expr,\n\t\t\t\ti:          b.iteration,\n\t\t\t}\n\t\t\tattrs[name] = &attr\n\t\t} else {\n\t\t\t// If we have no active iteration then no wrapping is required.\n\t\t\tattrs[name] = rawAttr\n\t\t}\n\t}\n\treturn attrs\n}\n\nfunc (b *expandBody) expandBlocks(schema *hcl.BodySchema, rawBlocks hcl.Blocks, partial bool) (hcl.Blocks, hcl.Diagnostics) {\n\tvar blocks hcl.Blocks\n\tvar diags hcl.Diagnostics\n\n\tfor _, rawBlock := range rawBlocks {\n\t\tswitch rawBlock.Type {\n\t\tcase \"dynamic\":\n\t\t\trealBlockType := rawBlock.Labels[0]\n\t\t\tif _, hidden := b.hiddenBlocks[realBlockType]; hidden {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tvar blockS *hcl.BlockHeaderSchema\n\t\t\tfor _, candidate := range schema.Blocks {\n\t\t\t\tif candidate.Type == realBlockType {\n\t\t\t\t\tblockS = &candidate\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif blockS == nil {\n\t\t\t\t// Not a block type that the caller requested.\n\t\t\t\tif !partial {\n\t\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\t\tSummary:  \"Unsupported block type\",\n\t\t\t\t\t\tDetail:   fmt.Sprintf(\"Blocks of type %q are not expected here.\", realBlockType),\n\t\t\t\t\t\tSubject:  &rawBlock.LabelRanges[0],\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tspec, specDiags := b.decodeSpec(blockS, rawBlock)\n\t\t\tdiags = append(diags, specDiags...)\n\t\t\tif specDiags.HasErrors() {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif spec.forEachVal.IsKnown() {\n\t\t\t\tfor it := spec.forEachVal.ElementIterator(); it.Next(); {\n\t\t\t\t\tkey, value := it.Element()\n\t\t\t\t\ti := b.iteration.MakeChild(spec.iteratorName, key, value)\n\n\t\t\t\t\tblock, blockDiags := spec.newBlock(i, b.forEachCtx)\n\t\t\t\t\tdiags = append(diags, blockDiags...)\n\t\t\t\t\tif block != nil {\n\t\t\t\t\t\t// Attach our new iteration context so that attributes\n\t\t\t\t\t\t// and other nested blocks can refer to our iterator.\n\t\t\t\t\t\tblock.Body = b.expandChild(block.Body, i)\n\t\t\t\t\t\tblocks = append(blocks, block)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// If our top-level iteration value isn't known then we're forced\n\t\t\t\t// to compromise since HCL doesn't have any concept of an\n\t\t\t\t// \"unknown block\". In this case then, we'll produce a single\n\t\t\t\t// dynamic block with the iterator values set to DynamicVal,\n\t\t\t\t// which at least makes the potential for a block visible\n\t\t\t\t// in our result, even though it's not represented in a fully-accurate\n\t\t\t\t// way.\n\t\t\t\ti := b.iteration.MakeChild(spec.iteratorName, cty.DynamicVal, cty.DynamicVal)\n\t\t\t\tblock, blockDiags := spec.newBlock(i, b.forEachCtx)\n\t\t\t\tdiags = append(diags, blockDiags...)\n\t\t\t\tif block != nil {\n\t\t\t\t\tblock.Body = b.expandChild(block.Body, i)\n\n\t\t\t\t\t// We additionally force all of the leaf attribute values\n\t\t\t\t\t// in the result to be unknown so the calling application\n\t\t\t\t\t// can, if necessary, use that as a heuristic to detect\n\t\t\t\t\t// when a single nested block might be standing in for\n\t\t\t\t\t// multiple blocks yet to be expanded. This retains the\n\t\t\t\t\t// structure of the generated body but forces all of its\n\t\t\t\t\t// leaf attribute values to be unknown.\n\t\t\t\t\tblock.Body = unknownBody{block.Body}\n\n\t\t\t\t\tblocks = append(blocks, block)\n\t\t\t\t}\n\t\t\t}\n\n\t\tdefault:\n\t\t\tif _, hidden := b.hiddenBlocks[rawBlock.Type]; !hidden {\n\t\t\t\t// A static block doesn't create a new iteration context, but\n\t\t\t\t// it does need to inherit _our own_ iteration context in\n\t\t\t\t// case it contains expressions that refer to our inherited\n\t\t\t\t// iterators, or nested \"dynamic\" blocks.\n\t\t\t\texpandedBlock := *rawBlock // shallow copy\n\t\t\t\texpandedBlock.Body = b.expandChild(rawBlock.Body, b.iteration)\n\t\t\t\tblocks = append(blocks, &expandedBlock)\n\t\t\t}\n\t\t}\n\t}\n\n\treturn blocks, diags\n}\n\nfunc (b *expandBody) expandChild(child hcl.Body, i *iteration) hcl.Body {\n\tchiCtx := i.EvalContext(b.forEachCtx)\n\tret := Expand(child, chiCtx)\n\tret.(*expandBody).iteration = i\n\treturn ret\n}\n\nfunc (b *expandBody) JustAttributes() (hcl.Attributes, hcl.Diagnostics) {\n\t// blocks aren't allowed in JustAttributes mode and this body can\n\t// only produce blocks, so we'll just pass straight through to our\n\t// underlying body here.\n\treturn b.original.JustAttributes()\n}\n\nfunc (b *expandBody) MissingItemRange() hcl.Range {\n\treturn b.original.MissingItemRange()\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/ext/dynblock/expand_spec.go",
    "content": "package dynblock\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/zclconf/go-cty/cty\"\n\t\"github.com/zclconf/go-cty/cty/convert\"\n)\n\ntype expandSpec struct {\n\tblockType      string\n\tblockTypeRange hcl.Range\n\tdefRange       hcl.Range\n\tforEachVal     cty.Value\n\titeratorName   string\n\tlabelExprs     []hcl.Expression\n\tcontentBody    hcl.Body\n\tinherited      map[string]*iteration\n}\n\nfunc (b *expandBody) decodeSpec(blockS *hcl.BlockHeaderSchema, rawSpec *hcl.Block) (*expandSpec, hcl.Diagnostics) {\n\tvar diags hcl.Diagnostics\n\n\tvar schema *hcl.BodySchema\n\tif len(blockS.LabelNames) != 0 {\n\t\tschema = dynamicBlockBodySchemaLabels\n\t} else {\n\t\tschema = dynamicBlockBodySchemaNoLabels\n\t}\n\n\tspecContent, specDiags := rawSpec.Body.Content(schema)\n\tdiags = append(diags, specDiags...)\n\tif specDiags.HasErrors() {\n\t\treturn nil, diags\n\t}\n\n\t//// for_each attribute\n\n\teachAttr := specContent.Attributes[\"for_each\"]\n\teachVal, eachDiags := eachAttr.Expr.Value(b.forEachCtx)\n\tdiags = append(diags, eachDiags...)\n\n\tif !eachVal.CanIterateElements() && eachVal.Type() != cty.DynamicPseudoType {\n\t\t// We skip this error for DynamicPseudoType because that means we either\n\t\t// have a null (which is checked immediately below) or an unknown\n\t\t// (which is handled in the expandBody Content methods).\n\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\tSeverity:    hcl.DiagError,\n\t\t\tSummary:     \"Invalid dynamic for_each value\",\n\t\t\tDetail:      fmt.Sprintf(\"Cannot use a %s value in for_each. An iterable collection is required.\", eachVal.Type().FriendlyName()),\n\t\t\tSubject:     eachAttr.Expr.Range().Ptr(),\n\t\t\tExpression:  eachAttr.Expr,\n\t\t\tEvalContext: b.forEachCtx,\n\t\t})\n\t\treturn nil, diags\n\t}\n\tif eachVal.IsNull() {\n\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\tSeverity:    hcl.DiagError,\n\t\t\tSummary:     \"Invalid dynamic for_each value\",\n\t\t\tDetail:      \"Cannot use a null value in for_each.\",\n\t\t\tSubject:     eachAttr.Expr.Range().Ptr(),\n\t\t\tExpression:  eachAttr.Expr,\n\t\t\tEvalContext: b.forEachCtx,\n\t\t})\n\t\treturn nil, diags\n\t}\n\n\t//// iterator attribute\n\n\titeratorName := blockS.Type\n\tif iteratorAttr := specContent.Attributes[\"iterator\"]; iteratorAttr != nil {\n\t\titTraversal, itDiags := hcl.AbsTraversalForExpr(iteratorAttr.Expr)\n\t\tdiags = append(diags, itDiags...)\n\t\tif itDiags.HasErrors() {\n\t\t\treturn nil, diags\n\t\t}\n\n\t\tif len(itTraversal) != 1 {\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Invalid dynamic iterator name\",\n\t\t\t\tDetail:   \"Dynamic iterator must be a single variable name.\",\n\t\t\t\tSubject:  itTraversal.SourceRange().Ptr(),\n\t\t\t})\n\t\t\treturn nil, diags\n\t\t}\n\n\t\titeratorName = itTraversal.RootName()\n\t}\n\n\tvar labelExprs []hcl.Expression\n\tif labelsAttr := specContent.Attributes[\"labels\"]; labelsAttr != nil {\n\t\tvar labelDiags hcl.Diagnostics\n\t\tlabelExprs, labelDiags = hcl.ExprList(labelsAttr.Expr)\n\t\tdiags = append(diags, labelDiags...)\n\t\tif labelDiags.HasErrors() {\n\t\t\treturn nil, diags\n\t\t}\n\n\t\tif len(labelExprs) > len(blockS.LabelNames) {\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Extraneous dynamic block label\",\n\t\t\t\tDetail:   fmt.Sprintf(\"Blocks of type %q require %d label(s).\", blockS.Type, len(blockS.LabelNames)),\n\t\t\t\tSubject:  labelExprs[len(blockS.LabelNames)].Range().Ptr(),\n\t\t\t})\n\t\t\treturn nil, diags\n\t\t} else if len(labelExprs) < len(blockS.LabelNames) {\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Insufficient dynamic block labels\",\n\t\t\t\tDetail:   fmt.Sprintf(\"Blocks of type %q require %d label(s).\", blockS.Type, len(blockS.LabelNames)),\n\t\t\t\tSubject:  labelsAttr.Expr.Range().Ptr(),\n\t\t\t})\n\t\t\treturn nil, diags\n\t\t}\n\t}\n\n\t// Since our schema requests only blocks of type \"content\", we can assume\n\t// that all entries in specContent.Blocks are content blocks.\n\tif len(specContent.Blocks) == 0 {\n\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Missing dynamic content block\",\n\t\t\tDetail:   \"A dynamic block must have a nested block of type \\\"content\\\" to describe the body of each generated block.\",\n\t\t\tSubject:  &specContent.MissingItemRange,\n\t\t})\n\t\treturn nil, diags\n\t}\n\tif len(specContent.Blocks) > 1 {\n\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Extraneous dynamic content block\",\n\t\t\tDetail:   \"Only one nested content block is allowed for each dynamic block.\",\n\t\t\tSubject:  &specContent.Blocks[1].DefRange,\n\t\t})\n\t\treturn nil, diags\n\t}\n\n\treturn &expandSpec{\n\t\tblockType:      blockS.Type,\n\t\tblockTypeRange: rawSpec.LabelRanges[0],\n\t\tdefRange:       rawSpec.DefRange,\n\t\tforEachVal:     eachVal,\n\t\titeratorName:   iteratorName,\n\t\tlabelExprs:     labelExprs,\n\t\tcontentBody:    specContent.Blocks[0].Body,\n\t}, diags\n}\n\nfunc (s *expandSpec) newBlock(i *iteration, ctx *hcl.EvalContext) (*hcl.Block, hcl.Diagnostics) {\n\tvar diags hcl.Diagnostics\n\tvar labels []string\n\tvar labelRanges []hcl.Range\n\tlCtx := i.EvalContext(ctx)\n\tfor _, labelExpr := range s.labelExprs {\n\t\tlabelVal, labelDiags := labelExpr.Value(lCtx)\n\t\tdiags = append(diags, labelDiags...)\n\t\tif labelDiags.HasErrors() {\n\t\t\treturn nil, diags\n\t\t}\n\n\t\tvar convErr error\n\t\tlabelVal, convErr = convert.Convert(labelVal, cty.String)\n\t\tif convErr != nil {\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity:    hcl.DiagError,\n\t\t\t\tSummary:     \"Invalid dynamic block label\",\n\t\t\t\tDetail:      fmt.Sprintf(\"Cannot use this value as a dynamic block label: %s.\", convErr),\n\t\t\t\tSubject:     labelExpr.Range().Ptr(),\n\t\t\t\tExpression:  labelExpr,\n\t\t\t\tEvalContext: lCtx,\n\t\t\t})\n\t\t\treturn nil, diags\n\t\t}\n\t\tif labelVal.IsNull() {\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity:    hcl.DiagError,\n\t\t\t\tSummary:     \"Invalid dynamic block label\",\n\t\t\t\tDetail:      \"Cannot use a null value as a dynamic block label.\",\n\t\t\t\tSubject:     labelExpr.Range().Ptr(),\n\t\t\t\tExpression:  labelExpr,\n\t\t\t\tEvalContext: lCtx,\n\t\t\t})\n\t\t\treturn nil, diags\n\t\t}\n\t\tif !labelVal.IsKnown() {\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity:    hcl.DiagError,\n\t\t\t\tSummary:     \"Invalid dynamic block label\",\n\t\t\t\tDetail:      \"This value is not yet known. Dynamic block labels must be immediately-known values.\",\n\t\t\t\tSubject:     labelExpr.Range().Ptr(),\n\t\t\t\tExpression:  labelExpr,\n\t\t\t\tEvalContext: lCtx,\n\t\t\t})\n\t\t\treturn nil, diags\n\t\t}\n\n\t\tlabels = append(labels, labelVal.AsString())\n\t\tlabelRanges = append(labelRanges, labelExpr.Range())\n\t}\n\n\tblock := &hcl.Block{\n\t\tType:        s.blockType,\n\t\tTypeRange:   s.blockTypeRange,\n\t\tLabels:      labels,\n\t\tLabelRanges: labelRanges,\n\t\tDefRange:    s.defRange,\n\t\tBody:        s.contentBody,\n\t}\n\n\treturn block, diags\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/ext/dynblock/expr_wrap.go",
    "content": "package dynblock\n\nimport (\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\ntype exprWrap struct {\n\thcl.Expression\n\ti *iteration\n}\n\nfunc (e exprWrap) Variables() []hcl.Traversal {\n\traw := e.Expression.Variables()\n\tret := make([]hcl.Traversal, 0, len(raw))\n\n\t// Filter out traversals that refer to our iterator name or any\n\t// iterator we've inherited; we're going to provide those in\n\t// our Value wrapper, so the caller doesn't need to know about them.\n\tfor _, traversal := range raw {\n\t\trootName := traversal.RootName()\n\t\tif rootName == e.i.IteratorName {\n\t\t\tcontinue\n\t\t}\n\t\tif _, inherited := e.i.Inherited[rootName]; inherited {\n\t\t\tcontinue\n\t\t}\n\t\tret = append(ret, traversal)\n\t}\n\treturn ret\n}\n\nfunc (e exprWrap) Value(ctx *hcl.EvalContext) (cty.Value, hcl.Diagnostics) {\n\textCtx := e.i.EvalContext(ctx)\n\treturn e.Expression.Value(extCtx)\n}\n\n// UnwrapExpression returns the expression being wrapped by this instance.\n// This allows the original expression to be recovered by hcl.UnwrapExpression.\nfunc (e exprWrap) UnwrapExpression() hcl.Expression {\n\treturn e.Expression\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/ext/dynblock/iteration.go",
    "content": "package dynblock\n\nimport (\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\ntype iteration struct {\n\tIteratorName string\n\tKey          cty.Value\n\tValue        cty.Value\n\tInherited    map[string]*iteration\n}\n\nfunc (s *expandSpec) MakeIteration(key, value cty.Value) *iteration {\n\treturn &iteration{\n\t\tIteratorName: s.iteratorName,\n\t\tKey:          key,\n\t\tValue:        value,\n\t\tInherited:    s.inherited,\n\t}\n}\n\nfunc (i *iteration) Object() cty.Value {\n\treturn cty.ObjectVal(map[string]cty.Value{\n\t\t\"key\":   i.Key,\n\t\t\"value\": i.Value,\n\t})\n}\n\nfunc (i *iteration) EvalContext(base *hcl.EvalContext) *hcl.EvalContext {\n\tnew := base.NewChild()\n\n\tif i != nil {\n\t\tnew.Variables = map[string]cty.Value{}\n\t\tfor name, otherIt := range i.Inherited {\n\t\t\tnew.Variables[name] = otherIt.Object()\n\t\t}\n\t\tnew.Variables[i.IteratorName] = i.Object()\n\t}\n\n\treturn new\n}\n\nfunc (i *iteration) MakeChild(iteratorName string, key, value cty.Value) *iteration {\n\tif i == nil {\n\t\t// Create entirely new root iteration, then\n\t\treturn &iteration{\n\t\t\tIteratorName: iteratorName,\n\t\t\tKey:          key,\n\t\t\tValue:        value,\n\t\t}\n\t}\n\n\tinherited := map[string]*iteration{}\n\tfor name, otherIt := range i.Inherited {\n\t\tinherited[name] = otherIt\n\t}\n\tinherited[i.IteratorName] = i\n\treturn &iteration{\n\t\tIteratorName: iteratorName,\n\t\tKey:          key,\n\t\tValue:        value,\n\t\tInherited:    inherited,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/ext/dynblock/public.go",
    "content": "package dynblock\n\nimport (\n\t\"github.com/hashicorp/hcl2/hcl\"\n)\n\n// Expand \"dynamic\" blocks in the given body, returning a new body that\n// has those blocks expanded.\n//\n// The given EvalContext is used when evaluating \"for_each\" and \"labels\"\n// attributes within dynamic blocks, allowing those expressions access to\n// variables and functions beyond the iterator variable created by the\n// iteration.\n//\n// Expand returns no diagnostics because no blocks are actually expanded\n// until a call to Content or PartialContent on the returned body, which\n// will then expand only the blocks selected by the schema.\n//\n// \"dynamic\" blocks are also expanded automatically within nested blocks\n// in the given body, including within other dynamic blocks, thus allowing\n// multi-dimensional iteration. However, it is not possible to\n// dynamically-generate the \"dynamic\" blocks themselves except through nesting.\n//\n//     parent {\n//       dynamic \"child\" {\n//         for_each = child_objs\n//         content {\n//           dynamic \"grandchild\" {\n//             for_each = child.value.children\n//             labels   = [grandchild.key]\n//             content {\n//               parent_key = child.key\n//               value      = grandchild.value\n//             }\n//           }\n//         }\n//       }\n//     }\nfunc Expand(body hcl.Body, ctx *hcl.EvalContext) hcl.Body {\n\treturn &expandBody{\n\t\toriginal:   body,\n\t\tforEachCtx: ctx,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/ext/dynblock/schema.go",
    "content": "package dynblock\n\nimport \"github.com/hashicorp/hcl2/hcl\"\n\nvar dynamicBlockHeaderSchema = hcl.BlockHeaderSchema{\n\tType:       \"dynamic\",\n\tLabelNames: []string{\"type\"},\n}\n\nvar dynamicBlockBodySchemaLabels = &hcl.BodySchema{\n\tAttributes: []hcl.AttributeSchema{\n\t\t{\n\t\t\tName:     \"for_each\",\n\t\t\tRequired: true,\n\t\t},\n\t\t{\n\t\t\tName:     \"iterator\",\n\t\t\tRequired: false,\n\t\t},\n\t\t{\n\t\t\tName:     \"labels\",\n\t\t\tRequired: true,\n\t\t},\n\t},\n\tBlocks: []hcl.BlockHeaderSchema{\n\t\t{\n\t\t\tType:       \"content\",\n\t\t\tLabelNames: nil,\n\t\t},\n\t},\n}\n\nvar dynamicBlockBodySchemaNoLabels = &hcl.BodySchema{\n\tAttributes: []hcl.AttributeSchema{\n\t\t{\n\t\t\tName:     \"for_each\",\n\t\t\tRequired: true,\n\t\t},\n\t\t{\n\t\t\tName:     \"iterator\",\n\t\t\tRequired: false,\n\t\t},\n\t},\n\tBlocks: []hcl.BlockHeaderSchema{\n\t\t{\n\t\t\tType:       \"content\",\n\t\t\tLabelNames: nil,\n\t\t},\n\t},\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/ext/dynblock/unknown_body.go",
    "content": "package dynblock\n\nimport (\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// unknownBody is a funny body that just reports everything inside it as\n// unknown. It uses a given other body as a sort of template for what attributes\n// and blocks are inside -- including source location information -- but\n// subsitutes unknown values of unknown type for all attributes.\n//\n// This rather odd process is used to handle expansion of dynamic blocks whose\n// for_each expression is unknown. Since a block cannot itself be unknown,\n// we instead arrange for everything _inside_ the block to be unknown instead,\n// to give the best possible approximation.\ntype unknownBody struct {\n\ttemplate hcl.Body\n}\n\nvar _ hcl.Body = unknownBody{}\n\nfunc (b unknownBody) Content(schema *hcl.BodySchema) (*hcl.BodyContent, hcl.Diagnostics) {\n\tcontent, diags := b.template.Content(schema)\n\tcontent = b.fixupContent(content)\n\n\t// We're intentionally preserving the diagnostics reported from the\n\t// inner body so that we can still report where the template body doesn't\n\t// match the requested schema.\n\treturn content, diags\n}\n\nfunc (b unknownBody) PartialContent(schema *hcl.BodySchema) (*hcl.BodyContent, hcl.Body, hcl.Diagnostics) {\n\tcontent, remain, diags := b.template.PartialContent(schema)\n\tcontent = b.fixupContent(content)\n\tremain = unknownBody{remain} // remaining content must also be wrapped\n\n\t// We're intentionally preserving the diagnostics reported from the\n\t// inner body so that we can still report where the template body doesn't\n\t// match the requested schema.\n\treturn content, remain, diags\n}\n\nfunc (b unknownBody) JustAttributes() (hcl.Attributes, hcl.Diagnostics) {\n\tattrs, diags := b.template.JustAttributes()\n\tattrs = b.fixupAttrs(attrs)\n\n\t// We're intentionally preserving the diagnostics reported from the\n\t// inner body so that we can still report where the template body doesn't\n\t// match the requested schema.\n\treturn attrs, diags\n}\n\nfunc (b unknownBody) MissingItemRange() hcl.Range {\n\treturn b.template.MissingItemRange()\n}\n\nfunc (b unknownBody) fixupContent(got *hcl.BodyContent) *hcl.BodyContent {\n\tret := &hcl.BodyContent{}\n\tret.Attributes = b.fixupAttrs(got.Attributes)\n\tif len(got.Blocks) > 0 {\n\t\tret.Blocks = make(hcl.Blocks, 0, len(got.Blocks))\n\t\tfor _, gotBlock := range got.Blocks {\n\t\t\tnew := *gotBlock                      // shallow copy\n\t\t\tnew.Body = unknownBody{gotBlock.Body} // nested content must also be marked unknown\n\t\t\tret.Blocks = append(ret.Blocks, &new)\n\t\t}\n\t}\n\n\treturn ret\n}\n\nfunc (b unknownBody) fixupAttrs(got hcl.Attributes) hcl.Attributes {\n\tif len(got) == 0 {\n\t\treturn nil\n\t}\n\tret := make(hcl.Attributes, len(got))\n\tfor name, gotAttr := range got {\n\t\tnew := *gotAttr // shallow copy\n\t\tnew.Expr = hcl.StaticExpr(cty.DynamicVal, gotAttr.Expr.Range())\n\t\tret[name] = &new\n\t}\n\treturn ret\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/ext/dynblock/variables.go",
    "content": "package dynblock\n\nimport (\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// WalkVariables begins the recursive process of walking all expressions and\n// nested blocks in the given body and its child bodies while taking into\n// account any \"dynamic\" blocks.\n//\n// This function requires that the caller walk through the nested block\n// structure in the given body level-by-level so that an appropriate schema\n// can be provided at each level to inform further processing. This workflow\n// is thus easiest to use for calling applications that have some higher-level\n// schema representation available with which to drive this multi-step\n// process. If your application uses the hcldec package, you may be able to\n// use VariablesHCLDec instead for a more automatic approach.\nfunc WalkVariables(body hcl.Body) WalkVariablesNode {\n\treturn WalkVariablesNode{\n\t\tbody:           body,\n\t\tincludeContent: true,\n\t}\n}\n\n// WalkExpandVariables is like Variables but it includes only the variables\n// required for successful block expansion, ignoring any variables referenced\n// inside block contents. The result is the minimal set of all variables\n// required for a call to Expand, excluding variables that would only be\n// needed to subsequently call Content or PartialContent on the expanded\n// body.\nfunc WalkExpandVariables(body hcl.Body) WalkVariablesNode {\n\treturn WalkVariablesNode{\n\t\tbody: body,\n\t}\n}\n\ntype WalkVariablesNode struct {\n\tbody hcl.Body\n\tit   *iteration\n\n\tincludeContent bool\n}\n\ntype WalkVariablesChild struct {\n\tBlockTypeName string\n\tNode          WalkVariablesNode\n}\n\n// Body returns the HCL Body associated with the child node, in case the caller\n// wants to do some sort of inspection of it in order to decide what schema\n// to pass to Visit.\n//\n// Most implementations should just fetch a fixed schema based on the\n// BlockTypeName field and not access this. Deciding on a schema dynamically\n// based on the body is a strange thing to do and generally necessary only if\n// your caller is already doing other bizarre things with HCL bodies.\nfunc (c WalkVariablesChild) Body() hcl.Body {\n\treturn c.Node.body\n}\n\n// Visit returns the variable traversals required for any \"dynamic\" blocks\n// directly in the body associated with this node, and also returns any child\n// nodes that must be visited in order to continue the walk.\n//\n// Each child node has its associated block type name given in its BlockTypeName\n// field, which the calling application should use to determine the appropriate\n// schema for the content of each child node and pass it to the child node's\n// own Visit method to continue the walk recursively.\nfunc (n WalkVariablesNode) Visit(schema *hcl.BodySchema) (vars []hcl.Traversal, children []WalkVariablesChild) {\n\textSchema := n.extendSchema(schema)\n\tcontainer, _, _ := n.body.PartialContent(extSchema)\n\tif container == nil {\n\t\treturn vars, children\n\t}\n\n\tchildren = make([]WalkVariablesChild, 0, len(container.Blocks))\n\n\tif n.includeContent {\n\t\tfor _, attr := range container.Attributes {\n\t\t\tfor _, traversal := range attr.Expr.Variables() {\n\t\t\t\tvar ours, inherited bool\n\t\t\t\tif n.it != nil {\n\t\t\t\t\tours = traversal.RootName() == n.it.IteratorName\n\t\t\t\t\t_, inherited = n.it.Inherited[traversal.RootName()]\n\t\t\t\t}\n\n\t\t\t\tif !(ours || inherited) {\n\t\t\t\t\tvars = append(vars, traversal)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfor _, block := range container.Blocks {\n\t\tswitch block.Type {\n\n\t\tcase \"dynamic\":\n\t\t\tblockTypeName := block.Labels[0]\n\t\t\tinner, _, _ := block.Body.PartialContent(variableDetectionInnerSchema)\n\t\t\tif inner == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\titeratorName := blockTypeName\n\t\t\tif attr, exists := inner.Attributes[\"iterator\"]; exists {\n\t\t\t\titerTraversal, _ := hcl.AbsTraversalForExpr(attr.Expr)\n\t\t\t\tif len(iterTraversal) == 0 {\n\t\t\t\t\t// Ignore this invalid dynamic block, since it'll produce\n\t\t\t\t\t// an error if someone tries to extract content from it\n\t\t\t\t\t// later anyway.\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\titeratorName = iterTraversal.RootName()\n\t\t\t}\n\t\t\tblockIt := n.it.MakeChild(iteratorName, cty.DynamicVal, cty.DynamicVal)\n\n\t\t\tif attr, exists := inner.Attributes[\"for_each\"]; exists {\n\t\t\t\t// Filter out iterator names inherited from parent blocks\n\t\t\t\tfor _, traversal := range attr.Expr.Variables() {\n\t\t\t\t\tif _, inherited := blockIt.Inherited[traversal.RootName()]; !inherited {\n\t\t\t\t\t\tvars = append(vars, traversal)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif attr, exists := inner.Attributes[\"labels\"]; exists {\n\t\t\t\t// Filter out both our own iterator name _and_ those inherited\n\t\t\t\t// from parent blocks, since we provide _both_ of these to the\n\t\t\t\t// label expressions.\n\t\t\t\tfor _, traversal := range attr.Expr.Variables() {\n\t\t\t\t\tours := traversal.RootName() == iteratorName\n\t\t\t\t\t_, inherited := blockIt.Inherited[traversal.RootName()]\n\n\t\t\t\t\tif !(ours || inherited) {\n\t\t\t\t\t\tvars = append(vars, traversal)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor _, contentBlock := range inner.Blocks {\n\t\t\t\t// We only request \"content\" blocks in our schema, so we know\n\t\t\t\t// any blocks we find here will be content blocks. We require\n\t\t\t\t// exactly one content block for actual expansion, but we'll\n\t\t\t\t// be more liberal here so that callers can still collect\n\t\t\t\t// variables from erroneous \"dynamic\" blocks.\n\t\t\t\tchildren = append(children, WalkVariablesChild{\n\t\t\t\t\tBlockTypeName: blockTypeName,\n\t\t\t\t\tNode: WalkVariablesNode{\n\t\t\t\t\t\tbody:           contentBlock.Body,\n\t\t\t\t\t\tit:             blockIt,\n\t\t\t\t\t\tincludeContent: n.includeContent,\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t}\n\n\t\tdefault:\n\t\t\tchildren = append(children, WalkVariablesChild{\n\t\t\t\tBlockTypeName: block.Type,\n\t\t\t\tNode: WalkVariablesNode{\n\t\t\t\t\tbody:           block.Body,\n\t\t\t\t\tit:             n.it,\n\t\t\t\t\tincludeContent: n.includeContent,\n\t\t\t\t},\n\t\t\t})\n\n\t\t}\n\t}\n\n\treturn vars, children\n}\n\nfunc (n WalkVariablesNode) extendSchema(schema *hcl.BodySchema) *hcl.BodySchema {\n\t// We augment the requested schema to also include our special \"dynamic\"\n\t// block type, since then we'll get instances of it interleaved with\n\t// all of the literal child blocks we must also include.\n\textSchema := &hcl.BodySchema{\n\t\tAttributes: schema.Attributes,\n\t\tBlocks:     make([]hcl.BlockHeaderSchema, len(schema.Blocks), len(schema.Blocks)+1),\n\t}\n\tcopy(extSchema.Blocks, schema.Blocks)\n\textSchema.Blocks = append(extSchema.Blocks, dynamicBlockHeaderSchema)\n\n\treturn extSchema\n}\n\n// This is a more relaxed schema than what's in schema.go, since we\n// want to maximize the amount of variables we can find even if there\n// are erroneous blocks.\nvar variableDetectionInnerSchema = &hcl.BodySchema{\n\tAttributes: []hcl.AttributeSchema{\n\t\t{\n\t\t\tName:     \"for_each\",\n\t\t\tRequired: false,\n\t\t},\n\t\t{\n\t\t\tName:     \"labels\",\n\t\t\tRequired: false,\n\t\t},\n\t\t{\n\t\t\tName:     \"iterator\",\n\t\t\tRequired: false,\n\t\t},\n\t},\n\tBlocks: []hcl.BlockHeaderSchema{\n\t\t{\n\t\t\tType: \"content\",\n\t\t},\n\t},\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/ext/dynblock/variables_hcldec.go",
    "content": "package dynblock\n\nimport (\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/hashicorp/hcl2/hcldec\"\n)\n\n// VariablesHCLDec is a wrapper around WalkVariables that uses the given hcldec\n// specification to automatically drive the recursive walk through nested\n// blocks in the given body.\n//\n// This is a drop-in replacement for hcldec.Variables which is able to treat\n// blocks of type \"dynamic\" in the same special way that dynblock.Expand would,\n// exposing both the variables referenced in the \"for_each\" and \"labels\"\n// arguments and variables used in the nested \"content\" block.\nfunc VariablesHCLDec(body hcl.Body, spec hcldec.Spec) []hcl.Traversal {\n\trootNode := WalkVariables(body)\n\treturn walkVariablesWithHCLDec(rootNode, spec)\n}\n\n// ExpandVariablesHCLDec is like VariablesHCLDec but it includes only the\n// minimal set of variables required to call Expand, ignoring variables that\n// are referenced only inside normal block contents. See WalkExpandVariables\n// for more information.\nfunc ExpandVariablesHCLDec(body hcl.Body, spec hcldec.Spec) []hcl.Traversal {\n\trootNode := WalkExpandVariables(body)\n\treturn walkVariablesWithHCLDec(rootNode, spec)\n}\n\nfunc walkVariablesWithHCLDec(node WalkVariablesNode, spec hcldec.Spec) []hcl.Traversal {\n\tvars, children := node.Visit(hcldec.ImpliedSchema(spec))\n\n\tif len(children) > 0 {\n\t\tchildSpecs := hcldec.ChildBlockTypes(spec)\n\t\tfor _, child := range children {\n\t\t\tif childSpec, exists := childSpecs[child.BlockTypeName]; exists {\n\t\t\t\tvars = append(vars, walkVariablesWithHCLDec(child.Node, childSpec)...)\n\t\t\t}\n\t\t}\n\t}\n\n\treturn vars\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/ext/typeexpr/doc.go",
    "content": "// Package typeexpr extends HCL with a convention for describing HCL types\n// within configuration files.\n//\n// The type syntax is processed statically from a hcl.Expression, so it cannot\n// use any of the usual language operators. This is similar to type expressions\n// in statically-typed programming languages.\n//\n//     variable \"example\" {\n//       type = list(string)\n//     }\npackage typeexpr\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/ext/typeexpr/get_type.go",
    "content": "package typeexpr\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\nconst invalidTypeSummary = \"Invalid type specification\"\n\n// getType is the internal implementation of both Type and TypeConstraint,\n// using the passed flag to distinguish. When constraint is false, the \"any\"\n// keyword will produce an error.\nfunc getType(expr hcl.Expression, constraint bool) (cty.Type, hcl.Diagnostics) {\n\t// First we'll try for one of our keywords\n\tkw := hcl.ExprAsKeyword(expr)\n\tswitch kw {\n\tcase \"bool\":\n\t\treturn cty.Bool, nil\n\tcase \"string\":\n\t\treturn cty.String, nil\n\tcase \"number\":\n\t\treturn cty.Number, nil\n\tcase \"any\":\n\t\tif constraint {\n\t\t\treturn cty.DynamicPseudoType, nil\n\t\t}\n\t\treturn cty.DynamicPseudoType, hcl.Diagnostics{{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  invalidTypeSummary,\n\t\t\tDetail:   fmt.Sprintf(\"The keyword %q cannot be used in this type specification: an exact type is required.\", kw),\n\t\t\tSubject:  expr.Range().Ptr(),\n\t\t}}\n\tcase \"list\", \"map\", \"set\":\n\t\treturn cty.DynamicPseudoType, hcl.Diagnostics{{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  invalidTypeSummary,\n\t\t\tDetail:   fmt.Sprintf(\"The %s type constructor requires one argument specifying the element type.\", kw),\n\t\t\tSubject:  expr.Range().Ptr(),\n\t\t}}\n\tcase \"object\":\n\t\treturn cty.DynamicPseudoType, hcl.Diagnostics{{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  invalidTypeSummary,\n\t\t\tDetail:   \"The object type constructor requires one argument specifying the attribute types and values as a map.\",\n\t\t\tSubject:  expr.Range().Ptr(),\n\t\t}}\n\tcase \"tuple\":\n\t\treturn cty.DynamicPseudoType, hcl.Diagnostics{{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  invalidTypeSummary,\n\t\t\tDetail:   \"The tuple type constructor requires one argument specifying the element types as a list.\",\n\t\t\tSubject:  expr.Range().Ptr(),\n\t\t}}\n\tcase \"\":\n\t\t// okay! we'll fall through and try processing as a call, then.\n\tdefault:\n\t\treturn cty.DynamicPseudoType, hcl.Diagnostics{{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  invalidTypeSummary,\n\t\t\tDetail:   fmt.Sprintf(\"The keyword %q is not a valid type specification.\", kw),\n\t\t\tSubject:  expr.Range().Ptr(),\n\t\t}}\n\t}\n\n\t// If we get down here then our expression isn't just a keyword, so we'll\n\t// try to process it as a call instead.\n\tcall, diags := hcl.ExprCall(expr)\n\tif diags.HasErrors() {\n\t\treturn cty.DynamicPseudoType, hcl.Diagnostics{{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  invalidTypeSummary,\n\t\t\tDetail:   \"A type specification is either a primitive type keyword (bool, number, string) or a complex type constructor call, like list(string).\",\n\t\t\tSubject:  expr.Range().Ptr(),\n\t\t}}\n\t}\n\n\tswitch call.Name {\n\tcase \"bool\", \"string\", \"number\", \"any\":\n\t\treturn cty.DynamicPseudoType, hcl.Diagnostics{{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  invalidTypeSummary,\n\t\t\tDetail:   fmt.Sprintf(\"Primitive type keyword %q does not expect arguments.\", call.Name),\n\t\t\tSubject:  &call.ArgsRange,\n\t\t}}\n\t}\n\n\tif len(call.Arguments) != 1 {\n\t\tcontextRange := call.ArgsRange\n\t\tsubjectRange := call.ArgsRange\n\t\tif len(call.Arguments) > 1 {\n\t\t\t// If we have too many arguments (as opposed to too _few_) then\n\t\t\t// we'll highlight the extraneous arguments as the diagnostic\n\t\t\t// subject.\n\t\t\tsubjectRange = hcl.RangeBetween(call.Arguments[1].Range(), call.Arguments[len(call.Arguments)-1].Range())\n\t\t}\n\n\t\tswitch call.Name {\n\t\tcase \"list\", \"set\", \"map\":\n\t\t\treturn cty.DynamicPseudoType, hcl.Diagnostics{{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  invalidTypeSummary,\n\t\t\t\tDetail:   fmt.Sprintf(\"The %s type constructor requires one argument specifying the element type.\", call.Name),\n\t\t\t\tSubject:  &subjectRange,\n\t\t\t\tContext:  &contextRange,\n\t\t\t}}\n\t\tcase \"object\":\n\t\t\treturn cty.DynamicPseudoType, hcl.Diagnostics{{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  invalidTypeSummary,\n\t\t\t\tDetail:   \"The object type constructor requires one argument specifying the attribute types and values as a map.\",\n\t\t\t\tSubject:  &subjectRange,\n\t\t\t\tContext:  &contextRange,\n\t\t\t}}\n\t\tcase \"tuple\":\n\t\t\treturn cty.DynamicPseudoType, hcl.Diagnostics{{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  invalidTypeSummary,\n\t\t\t\tDetail:   \"The tuple type constructor requires one argument specifying the element types as a list.\",\n\t\t\t\tSubject:  &subjectRange,\n\t\t\t\tContext:  &contextRange,\n\t\t\t}}\n\t\t}\n\t}\n\n\tswitch call.Name {\n\n\tcase \"list\":\n\t\tety, diags := getType(call.Arguments[0], constraint)\n\t\treturn cty.List(ety), diags\n\tcase \"set\":\n\t\tety, diags := getType(call.Arguments[0], constraint)\n\t\treturn cty.Set(ety), diags\n\tcase \"map\":\n\t\tety, diags := getType(call.Arguments[0], constraint)\n\t\treturn cty.Map(ety), diags\n\tcase \"object\":\n\t\tattrDefs, diags := hcl.ExprMap(call.Arguments[0])\n\t\tif diags.HasErrors() {\n\t\t\treturn cty.DynamicPseudoType, hcl.Diagnostics{{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  invalidTypeSummary,\n\t\t\t\tDetail:   \"Object type constructor requires a map whose keys are attribute names and whose values are the corresponding attribute types.\",\n\t\t\t\tSubject:  call.Arguments[0].Range().Ptr(),\n\t\t\t\tContext:  expr.Range().Ptr(),\n\t\t\t}}\n\t\t}\n\n\t\tatys := make(map[string]cty.Type)\n\t\tfor _, attrDef := range attrDefs {\n\t\t\tattrName := hcl.ExprAsKeyword(attrDef.Key)\n\t\t\tif attrName == \"\" {\n\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\tSummary:  invalidTypeSummary,\n\t\t\t\t\tDetail:   \"Object constructor map keys must be attribute names.\",\n\t\t\t\t\tSubject:  attrDef.Key.Range().Ptr(),\n\t\t\t\t\tContext:  expr.Range().Ptr(),\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\taty, attrDiags := getType(attrDef.Value, constraint)\n\t\t\tdiags = append(diags, attrDiags...)\n\t\t\tatys[attrName] = aty\n\t\t}\n\t\treturn cty.Object(atys), diags\n\tcase \"tuple\":\n\t\telemDefs, diags := hcl.ExprList(call.Arguments[0])\n\t\tif diags.HasErrors() {\n\t\t\treturn cty.DynamicPseudoType, hcl.Diagnostics{{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  invalidTypeSummary,\n\t\t\t\tDetail:   \"Tuple type constructor requires a list of element types.\",\n\t\t\t\tSubject:  call.Arguments[0].Range().Ptr(),\n\t\t\t\tContext:  expr.Range().Ptr(),\n\t\t\t}}\n\t\t}\n\t\tetys := make([]cty.Type, len(elemDefs))\n\t\tfor i, defExpr := range elemDefs {\n\t\t\tety, elemDiags := getType(defExpr, constraint)\n\t\t\tdiags = append(diags, elemDiags...)\n\t\t\tetys[i] = ety\n\t\t}\n\t\treturn cty.Tuple(etys), diags\n\tdefault:\n\t\t// Can't access call.Arguments in this path because we've not validated\n\t\t// that it contains exactly one expression here.\n\t\treturn cty.DynamicPseudoType, hcl.Diagnostics{{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  invalidTypeSummary,\n\t\t\tDetail:   fmt.Sprintf(\"Keyword %q is not a valid type constructor.\", call.Name),\n\t\t\tSubject:  expr.Range().Ptr(),\n\t\t}}\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/ext/typeexpr/public.go",
    "content": "package typeexpr\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"sort\"\n\n\t\"github.com/hashicorp/hcl2/hcl/hclsyntax\"\n\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// Type attempts to process the given expression as a type expression and, if\n// successful, returns the resulting type. If unsuccessful, error diagnostics\n// are returned.\nfunc Type(expr hcl.Expression) (cty.Type, hcl.Diagnostics) {\n\treturn getType(expr, false)\n}\n\n// TypeConstraint attempts to parse the given expression as a type constraint\n// and, if successful, returns the resulting type. If unsuccessful, error\n// diagnostics are returned.\n//\n// A type constraint has the same structure as a type, but it additionally\n// allows the keyword \"any\" to represent cty.DynamicPseudoType, which is often\n// used as a wildcard in type checking and type conversion operations.\nfunc TypeConstraint(expr hcl.Expression) (cty.Type, hcl.Diagnostics) {\n\treturn getType(expr, true)\n}\n\n// TypeString returns a string rendering of the given type as it would be\n// expected to appear in the HCL native syntax.\n//\n// This is primarily intended for showing types to the user in an application\n// that uses typexpr, where the user can be assumed to be familiar with the\n// type expression syntax. In applications that do not use typeexpr these\n// results may be confusing to the user and so type.FriendlyName may be\n// preferable, even though it's less precise.\n//\n// TypeString produces reasonable results only for types like what would be\n// produced by the Type and TypeConstraint functions. In particular, it cannot\n// support capsule types.\nfunc TypeString(ty cty.Type) string {\n\t// Easy cases first\n\tswitch ty {\n\tcase cty.String:\n\t\treturn \"string\"\n\tcase cty.Bool:\n\t\treturn \"bool\"\n\tcase cty.Number:\n\t\treturn \"number\"\n\tcase cty.DynamicPseudoType:\n\t\treturn \"any\"\n\t}\n\n\tif ty.IsCapsuleType() {\n\t\tpanic(\"TypeString does not support capsule types\")\n\t}\n\n\tif ty.IsCollectionType() {\n\t\tety := ty.ElementType()\n\t\tetyString := TypeString(ety)\n\t\tswitch {\n\t\tcase ty.IsListType():\n\t\t\treturn fmt.Sprintf(\"list(%s)\", etyString)\n\t\tcase ty.IsSetType():\n\t\t\treturn fmt.Sprintf(\"set(%s)\", etyString)\n\t\tcase ty.IsMapType():\n\t\t\treturn fmt.Sprintf(\"map(%s)\", etyString)\n\t\tdefault:\n\t\t\t// Should never happen because the above is exhaustive\n\t\t\tpanic(\"unsupported collection type\")\n\t\t}\n\t}\n\n\tif ty.IsObjectType() {\n\t\tvar buf bytes.Buffer\n\t\tbuf.WriteString(\"object({\")\n\t\tatys := ty.AttributeTypes()\n\t\tnames := make([]string, 0, len(atys))\n\t\tfor name := range atys {\n\t\t\tnames = append(names, name)\n\t\t}\n\t\tsort.Strings(names)\n\t\tfirst := true\n\t\tfor _, name := range names {\n\t\t\taty := atys[name]\n\t\t\tif !first {\n\t\t\t\tbuf.WriteByte(',')\n\t\t\t}\n\t\t\tif !hclsyntax.ValidIdentifier(name) {\n\t\t\t\t// Should never happen for any type produced by this package,\n\t\t\t\t// but we'll do something reasonable here just so we don't\n\t\t\t\t// produce garbage if someone gives us a hand-assembled object\n\t\t\t\t// type that has weird attribute names.\n\t\t\t\t// Using Go-style quoting here isn't perfect, since it doesn't\n\t\t\t\t// exactly match HCL syntax, but it's fine for an edge-case.\n\t\t\t\tbuf.WriteString(fmt.Sprintf(\"%q\", name))\n\t\t\t} else {\n\t\t\t\tbuf.WriteString(name)\n\t\t\t}\n\t\t\tbuf.WriteByte('=')\n\t\t\tbuf.WriteString(TypeString(aty))\n\t\t\tfirst = false\n\t\t}\n\t\tbuf.WriteString(\"})\")\n\t\treturn buf.String()\n\t}\n\n\tif ty.IsTupleType() {\n\t\tvar buf bytes.Buffer\n\t\tbuf.WriteString(\"tuple([\")\n\t\tetys := ty.TupleElementTypes()\n\t\tfirst := true\n\t\tfor _, ety := range etys {\n\t\t\tif !first {\n\t\t\t\tbuf.WriteByte(',')\n\t\t\t}\n\t\t\tbuf.WriteString(TypeString(ety))\n\t\t\tfirst = false\n\t\t}\n\t\tbuf.WriteString(\"])\")\n\t\treturn buf.String()\n\t}\n\n\t// Should never happen because we covered all cases above.\n\tpanic(fmt.Errorf(\"unsupported type %#v\", ty))\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/gohcl/decode.go",
    "content": "package gohcl\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\n\t\"github.com/zclconf/go-cty/cty\"\n\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/zclconf/go-cty/cty/convert\"\n\t\"github.com/zclconf/go-cty/cty/gocty\"\n)\n\n// DecodeBody extracts the configuration within the given body into the given\n// value. This value must be a non-nil pointer to either a struct or\n// a map, where in the former case the configuration will be decoded using\n// struct tags and in the latter case only attributes are allowed and their\n// values are decoded into the map.\n//\n// The given EvalContext is used to resolve any variables or functions in\n// expressions encountered while decoding. This may be nil to require only\n// constant values, for simple applications that do not support variables or\n// functions.\n//\n// The returned diagnostics should be inspected with its HasErrors method to\n// determine if the populated value is valid and complete. If error diagnostics\n// are returned then the given value may have been partially-populated but\n// may still be accessed by a careful caller for static analysis and editor\n// integration use-cases.\nfunc DecodeBody(body hcl.Body, ctx *hcl.EvalContext, val interface{}) hcl.Diagnostics {\n\trv := reflect.ValueOf(val)\n\tif rv.Kind() != reflect.Ptr {\n\t\tpanic(fmt.Sprintf(\"target value must be a pointer, not %s\", rv.Type().String()))\n\t}\n\n\treturn decodeBodyToValue(body, ctx, rv.Elem())\n}\n\nfunc decodeBodyToValue(body hcl.Body, ctx *hcl.EvalContext, val reflect.Value) hcl.Diagnostics {\n\tet := val.Type()\n\tswitch et.Kind() {\n\tcase reflect.Struct:\n\t\treturn decodeBodyToStruct(body, ctx, val)\n\tcase reflect.Map:\n\t\treturn decodeBodyToMap(body, ctx, val)\n\tdefault:\n\t\tpanic(fmt.Sprintf(\"target value must be pointer to struct or map, not %s\", et.String()))\n\t}\n}\n\nfunc decodeBodyToStruct(body hcl.Body, ctx *hcl.EvalContext, val reflect.Value) hcl.Diagnostics {\n\tschema, partial := ImpliedBodySchema(val.Interface())\n\n\tvar content *hcl.BodyContent\n\tvar leftovers hcl.Body\n\tvar diags hcl.Diagnostics\n\tif partial {\n\t\tcontent, leftovers, diags = body.PartialContent(schema)\n\t} else {\n\t\tcontent, diags = body.Content(schema)\n\t}\n\tif content == nil {\n\t\treturn diags\n\t}\n\n\ttags := getFieldTags(val.Type())\n\n\tif tags.Remain != nil {\n\t\tfieldIdx := *tags.Remain\n\t\tfield := val.Type().Field(fieldIdx)\n\t\tfieldV := val.Field(fieldIdx)\n\t\tswitch {\n\t\tcase bodyType.AssignableTo(field.Type):\n\t\t\tfieldV.Set(reflect.ValueOf(leftovers))\n\t\tcase attrsType.AssignableTo(field.Type):\n\t\t\tattrs, attrsDiags := leftovers.JustAttributes()\n\t\t\tif len(attrsDiags) > 0 {\n\t\t\t\tdiags = append(diags, attrsDiags...)\n\t\t\t}\n\t\t\tfieldV.Set(reflect.ValueOf(attrs))\n\t\tdefault:\n\t\t\tdiags = append(diags, decodeBodyToValue(leftovers, ctx, fieldV)...)\n\t\t}\n\t}\n\n\tfor name, fieldIdx := range tags.Attributes {\n\t\tattr := content.Attributes[name]\n\t\tfield := val.Type().Field(fieldIdx)\n\t\tfieldV := val.Field(fieldIdx)\n\n\t\tif attr == nil {\n\t\t\tif !exprType.AssignableTo(field.Type) {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// As a special case, if the target is of type hcl.Expression then\n\t\t\t// we'll assign an actual expression that evalues to a cty null,\n\t\t\t// so the caller can deal with it within the cty realm rather\n\t\t\t// than within the Go realm.\n\t\t\tsynthExpr := hcl.StaticExpr(cty.NullVal(cty.DynamicPseudoType), body.MissingItemRange())\n\t\t\tfieldV.Set(reflect.ValueOf(synthExpr))\n\t\t\tcontinue\n\t\t}\n\n\t\tswitch {\n\t\tcase attrType.AssignableTo(field.Type):\n\t\t\tfieldV.Set(reflect.ValueOf(attr))\n\t\tcase exprType.AssignableTo(field.Type):\n\t\t\tfieldV.Set(reflect.ValueOf(attr.Expr))\n\t\tdefault:\n\t\t\tdiags = append(diags, DecodeExpression(\n\t\t\t\tattr.Expr, ctx, fieldV.Addr().Interface(),\n\t\t\t)...)\n\t\t}\n\t}\n\n\tblocksByType := content.Blocks.ByType()\n\n\tfor typeName, fieldIdx := range tags.Blocks {\n\t\tblocks := blocksByType[typeName]\n\t\tfield := val.Type().Field(fieldIdx)\n\n\t\tty := field.Type\n\t\tisSlice := false\n\t\tisPtr := false\n\t\tif ty.Kind() == reflect.Slice {\n\t\t\tisSlice = true\n\t\t\tty = ty.Elem()\n\t\t}\n\t\tif ty.Kind() == reflect.Ptr {\n\t\t\tisPtr = true\n\t\t\tty = ty.Elem()\n\t\t}\n\n\t\tif len(blocks) > 1 && !isSlice {\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  fmt.Sprintf(\"Duplicate %s block\", typeName),\n\t\t\t\tDetail: fmt.Sprintf(\n\t\t\t\t\t\"Only one %s block is allowed. Another was defined at %s.\",\n\t\t\t\t\ttypeName, blocks[0].DefRange.String(),\n\t\t\t\t),\n\t\t\t\tSubject: &blocks[1].DefRange,\n\t\t\t})\n\t\t\tcontinue\n\t\t}\n\n\t\tif len(blocks) == 0 {\n\t\t\tif isSlice || isPtr {\n\t\t\t\tval.Field(fieldIdx).Set(reflect.Zero(field.Type))\n\t\t\t} else {\n\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\tSummary:  fmt.Sprintf(\"Missing %s block\", typeName),\n\t\t\t\t\tDetail:   fmt.Sprintf(\"A %s block is required.\", typeName),\n\t\t\t\t\tSubject:  body.MissingItemRange().Ptr(),\n\t\t\t\t})\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\tswitch {\n\n\t\tcase isSlice:\n\t\t\telemType := ty\n\t\t\tif isPtr {\n\t\t\t\telemType = reflect.PtrTo(ty)\n\t\t\t}\n\t\t\tsli := reflect.MakeSlice(reflect.SliceOf(elemType), len(blocks), len(blocks))\n\n\t\t\tfor i, block := range blocks {\n\t\t\t\tif isPtr {\n\t\t\t\t\tv := reflect.New(ty)\n\t\t\t\t\tdiags = append(diags, decodeBlockToValue(block, ctx, v.Elem())...)\n\t\t\t\t\tsli.Index(i).Set(v)\n\t\t\t\t} else {\n\t\t\t\t\tdiags = append(diags, decodeBlockToValue(block, ctx, sli.Index(i))...)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tval.Field(fieldIdx).Set(sli)\n\n\t\tdefault:\n\t\t\tblock := blocks[0]\n\t\t\tif isPtr {\n\t\t\t\tv := reflect.New(ty)\n\t\t\t\tdiags = append(diags, decodeBlockToValue(block, ctx, v.Elem())...)\n\t\t\t\tval.Field(fieldIdx).Set(v)\n\t\t\t} else {\n\t\t\t\tdiags = append(diags, decodeBlockToValue(block, ctx, val.Field(fieldIdx))...)\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn diags\n}\n\nfunc decodeBodyToMap(body hcl.Body, ctx *hcl.EvalContext, v reflect.Value) hcl.Diagnostics {\n\tattrs, diags := body.JustAttributes()\n\tif attrs == nil {\n\t\treturn diags\n\t}\n\n\tmv := reflect.MakeMap(v.Type())\n\n\tfor k, attr := range attrs {\n\t\tswitch {\n\t\tcase attrType.AssignableTo(v.Type().Elem()):\n\t\t\tmv.SetMapIndex(reflect.ValueOf(k), reflect.ValueOf(attr))\n\t\tcase exprType.AssignableTo(v.Type().Elem()):\n\t\t\tmv.SetMapIndex(reflect.ValueOf(k), reflect.ValueOf(attr.Expr))\n\t\tdefault:\n\t\t\tev := reflect.New(v.Type().Elem())\n\t\t\tdiags = append(diags, DecodeExpression(attr.Expr, ctx, ev.Interface())...)\n\t\t\tmv.SetMapIndex(reflect.ValueOf(k), ev.Elem())\n\t\t}\n\t}\n\n\tv.Set(mv)\n\n\treturn diags\n}\n\nfunc decodeBlockToValue(block *hcl.Block, ctx *hcl.EvalContext, v reflect.Value) hcl.Diagnostics {\n\tvar diags hcl.Diagnostics\n\n\tty := v.Type()\n\n\tswitch {\n\tcase blockType.AssignableTo(ty):\n\t\tv.Elem().Set(reflect.ValueOf(block))\n\tcase bodyType.AssignableTo(ty):\n\t\tv.Elem().Set(reflect.ValueOf(block.Body))\n\tcase attrsType.AssignableTo(ty):\n\t\tattrs, attrsDiags := block.Body.JustAttributes()\n\t\tif len(attrsDiags) > 0 {\n\t\t\tdiags = append(diags, attrsDiags...)\n\t\t}\n\t\tv.Elem().Set(reflect.ValueOf(attrs))\n\tdefault:\n\t\tdiags = append(diags, decodeBodyToValue(block.Body, ctx, v)...)\n\n\t\tif len(block.Labels) > 0 {\n\t\t\tblockTags := getFieldTags(ty)\n\t\t\tfor li, lv := range block.Labels {\n\t\t\t\tlfieldIdx := blockTags.Labels[li].FieldIndex\n\t\t\t\tv.Field(lfieldIdx).Set(reflect.ValueOf(lv))\n\t\t\t}\n\t\t}\n\n\t}\n\n\treturn diags\n}\n\n// DecodeExpression extracts the value of the given expression into the given\n// value. This value must be something that gocty is able to decode into,\n// since the final decoding is delegated to that package.\n//\n// The given EvalContext is used to resolve any variables or functions in\n// expressions encountered while decoding. This may be nil to require only\n// constant values, for simple applications that do not support variables or\n// functions.\n//\n// The returned diagnostics should be inspected with its HasErrors method to\n// determine if the populated value is valid and complete. If error diagnostics\n// are returned then the given value may have been partially-populated but\n// may still be accessed by a careful caller for static analysis and editor\n// integration use-cases.\nfunc DecodeExpression(expr hcl.Expression, ctx *hcl.EvalContext, val interface{}) hcl.Diagnostics {\n\tsrcVal, diags := expr.Value(ctx)\n\n\tconvTy, err := gocty.ImpliedType(val)\n\tif err != nil {\n\t\tpanic(fmt.Sprintf(\"unsuitable DecodeExpression target: %s\", err))\n\t}\n\n\tsrcVal, err = convert.Convert(srcVal, convTy)\n\tif err != nil {\n\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Unsuitable value type\",\n\t\t\tDetail:   fmt.Sprintf(\"Unsuitable value: %s\", err.Error()),\n\t\t\tSubject:  expr.StartRange().Ptr(),\n\t\t\tContext:  expr.Range().Ptr(),\n\t\t})\n\t\treturn diags\n\t}\n\n\terr = gocty.FromCtyValue(srcVal, val)\n\tif err != nil {\n\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Unsuitable value type\",\n\t\t\tDetail:   fmt.Sprintf(\"Unsuitable value: %s\", err.Error()),\n\t\t\tSubject:  expr.StartRange().Ptr(),\n\t\t\tContext:  expr.Range().Ptr(),\n\t\t})\n\t}\n\n\treturn diags\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/gohcl/doc.go",
    "content": "// Package gohcl allows decoding HCL configurations into Go data structures.\n//\n// It provides a convenient and concise way of describing the schema for\n// configuration and then accessing the resulting data via native Go\n// types.\n//\n// A struct field tag scheme is used, similar to other decoding and\n// unmarshalling libraries. The tags are formatted as in the following example:\n//\n//    ThingType string `hcl:\"thing_type,attr\"`\n//\n// Within each tag there are two comma-separated tokens. The first is the\n// name of the corresponding construct in configuration, while the second\n// is a keyword giving the kind of construct expected. The following\n// kind keywords are supported:\n//\n//    attr (the default) indicates that the value is to be populated from an attribute\n//    block indicates that the value is to populated from a block\n//    label indicates that the value is to populated from a block label\n//    remain indicates that the value is to be populated from the remaining body after populating other fields\n//\n// \"attr\" fields may either be of type *hcl.Expression, in which case the raw\n// expression is assigned, or of any type accepted by gocty, in which case\n// gocty will be used to assign the value to a native Go type.\n//\n// \"block\" fields may be of type *hcl.Block or hcl.Body, in which case the\n// corresponding raw value is assigned, or may be a struct that recursively\n// uses the same tags. Block fields may also be slices of any of these types,\n// in which case multiple blocks of the corresponding type are decoded into\n// the slice.\n//\n// \"label\" fields are considered only in a struct used as the type of a field\n// marked as \"block\", and are used sequentially to capture the labels of\n// the blocks being decoded. In this case, the name token is used only as\n// an identifier for the label in diagnostic messages.\n//\n// \"remain\" can be placed on a single field that may be either of type\n// hcl.Body or hcl.Attributes, in which case any remaining body content is\n// placed into this field for delayed processing. If no \"remain\" field is\n// present then any attributes or blocks not matched by another valid tag\n// will cause an error diagnostic.\n//\n// Only a subset of this tagging/typing vocabulary is supported for the\n// \"Encode\" family of functions. See the EncodeIntoBody docs for full details\n// on the constraints there.\n//\n// Broadly-speaking this package deals with two types of error. The first is\n// errors in the configuration itself, which are returned as diagnostics\n// written with the configuration author as the target audience. The second\n// is bugs in the calling program, such as invalid struct tags, which are\n// surfaced via panics since there can be no useful runtime handling of such\n// errors and they should certainly not be returned to the user as diagnostics.\npackage gohcl\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/gohcl/encode.go",
    "content": "package gohcl\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\t\"sort\"\n\n\t\"github.com/hashicorp/hcl2/hclwrite\"\n\t\"github.com/zclconf/go-cty/cty/gocty\"\n)\n\n// EncodeIntoBody replaces the contents of the given hclwrite Body with\n// attributes and blocks derived from the given value, which must be a\n// struct value or a pointer to a struct value with the struct tags defined\n// in this package.\n//\n// This function can work only with fully-decoded data. It will ignore any\n// fields tagged as \"remain\", any fields that decode attributes into either\n// hcl.Attribute or hcl.Expression values, and any fields that decode blocks\n// into hcl.Attributes values. This function does not have enough information\n// to complete the decoding of these types.\n//\n// Any fields tagged as \"label\" are ignored by this function. Use EncodeAsBlock\n// to produce a whole hclwrite.Block including block labels.\n//\n// As long as a suitable value is given to encode and the destination body\n// is non-nil, this function will always complete. It will panic in case of\n// any errors in the calling program, such as passing an inappropriate type\n// or a nil body.\n//\n// The layout of the resulting HCL source is derived from the ordering of\n// the struct fields, with blank lines around nested blocks of different types.\n// Fields representing attributes should usually precede those representing\n// blocks so that the attributes can group togather in the result. For more\n// control, use the hclwrite API directly.\nfunc EncodeIntoBody(val interface{}, dst *hclwrite.Body) {\n\trv := reflect.ValueOf(val)\n\tty := rv.Type()\n\tif ty.Kind() == reflect.Ptr {\n\t\trv = rv.Elem()\n\t\tty = rv.Type()\n\t}\n\tif ty.Kind() != reflect.Struct {\n\t\tpanic(fmt.Sprintf(\"value is %s, not struct\", ty.Kind()))\n\t}\n\n\ttags := getFieldTags(ty)\n\tpopulateBody(rv, ty, tags, dst)\n}\n\n// EncodeAsBlock creates a new hclwrite.Block populated with the data from\n// the given value, which must be a struct or pointer to struct with the\n// struct tags defined in this package.\n//\n// If the given struct type has fields tagged with \"label\" tags then they\n// will be used in order to annotate the created block with labels.\n//\n// This function has the same constraints as EncodeIntoBody and will panic\n// if they are violated.\nfunc EncodeAsBlock(val interface{}, blockType string) *hclwrite.Block {\n\trv := reflect.ValueOf(val)\n\tty := rv.Type()\n\tif ty.Kind() == reflect.Ptr {\n\t\trv = rv.Elem()\n\t\tty = rv.Type()\n\t}\n\tif ty.Kind() != reflect.Struct {\n\t\tpanic(fmt.Sprintf(\"value is %s, not struct\", ty.Kind()))\n\t}\n\n\ttags := getFieldTags(ty)\n\tlabels := make([]string, len(tags.Labels))\n\tfor i, lf := range tags.Labels {\n\t\tlv := rv.Field(lf.FieldIndex)\n\t\t// We just stringify whatever we find. It should always be a string\n\t\t// but if not then we'll still do something reasonable.\n\t\tlabels[i] = fmt.Sprintf(\"%s\", lv.Interface())\n\t}\n\n\tblock := hclwrite.NewBlock(blockType, labels)\n\tpopulateBody(rv, ty, tags, block.Body())\n\treturn block\n}\n\nfunc populateBody(rv reflect.Value, ty reflect.Type, tags *fieldTags, dst *hclwrite.Body) {\n\tnameIdxs := make(map[string]int, len(tags.Attributes)+len(tags.Blocks))\n\tnamesOrder := make([]string, 0, len(tags.Attributes)+len(tags.Blocks))\n\tfor n, i := range tags.Attributes {\n\t\tnameIdxs[n] = i\n\t\tnamesOrder = append(namesOrder, n)\n\t}\n\tfor n, i := range tags.Blocks {\n\t\tnameIdxs[n] = i\n\t\tnamesOrder = append(namesOrder, n)\n\t}\n\tsort.SliceStable(namesOrder, func(i, j int) bool {\n\t\tni, nj := namesOrder[i], namesOrder[j]\n\t\treturn nameIdxs[ni] < nameIdxs[nj]\n\t})\n\n\tdst.Clear()\n\n\tprevWasBlock := false\n\tfor _, name := range namesOrder {\n\t\tfieldIdx := nameIdxs[name]\n\t\tfield := ty.Field(fieldIdx)\n\t\tfieldTy := field.Type\n\t\tfieldVal := rv.Field(fieldIdx)\n\n\t\tif fieldTy.Kind() == reflect.Ptr {\n\t\t\tfieldTy = fieldTy.Elem()\n\t\t\tfieldVal = fieldVal.Elem()\n\t\t}\n\n\t\tif _, isAttr := tags.Attributes[name]; isAttr {\n\n\t\t\tif exprType.AssignableTo(fieldTy) || attrType.AssignableTo(fieldTy) {\n\t\t\t\tcontinue // ignore undecoded fields\n\t\t\t}\n\t\t\tif !fieldVal.IsValid() {\n\t\t\t\tcontinue // ignore (field value is nil pointer)\n\t\t\t}\n\t\t\tif fieldTy.Kind() == reflect.Ptr && fieldVal.IsNil() {\n\t\t\t\tcontinue // ignore\n\t\t\t}\n\t\t\tif prevWasBlock {\n\t\t\t\tdst.AppendNewline()\n\t\t\t\tprevWasBlock = false\n\t\t\t}\n\n\t\t\tvalTy, err := gocty.ImpliedType(fieldVal.Interface())\n\t\t\tif err != nil {\n\t\t\t\tpanic(fmt.Sprintf(\"cannot encode %T as HCL expression: %s\", fieldVal.Interface(), err))\n\t\t\t}\n\n\t\t\tval, err := gocty.ToCtyValue(fieldVal.Interface(), valTy)\n\t\t\tif err != nil {\n\t\t\t\t// This should never happen, since we should always be able\n\t\t\t\t// to decode into the implied type.\n\t\t\t\tpanic(fmt.Sprintf(\"failed to encode %T as %#v: %s\", fieldVal.Interface(), valTy, err))\n\t\t\t}\n\n\t\t\tdst.SetAttributeValue(name, val)\n\n\t\t} else { // must be a block, then\n\t\t\telemTy := fieldTy\n\t\t\tisSeq := false\n\t\t\tif elemTy.Kind() == reflect.Slice || elemTy.Kind() == reflect.Array {\n\t\t\t\tisSeq = true\n\t\t\t\telemTy = elemTy.Elem()\n\t\t\t}\n\n\t\t\tif bodyType.AssignableTo(elemTy) || attrsType.AssignableTo(elemTy) {\n\t\t\t\tcontinue // ignore undecoded fields\n\t\t\t}\n\t\t\tprevWasBlock = false\n\n\t\t\tif isSeq {\n\t\t\t\tl := fieldVal.Len()\n\t\t\t\tfor i := 0; i < l; i++ {\n\t\t\t\t\telemVal := fieldVal.Index(i)\n\t\t\t\t\tif !elemVal.IsValid() {\n\t\t\t\t\t\tcontinue // ignore (elem value is nil pointer)\n\t\t\t\t\t}\n\t\t\t\t\tif elemTy.Kind() == reflect.Ptr && elemVal.IsNil() {\n\t\t\t\t\t\tcontinue // ignore\n\t\t\t\t\t}\n\t\t\t\t\tblock := EncodeAsBlock(elemVal.Interface(), name)\n\t\t\t\t\tif !prevWasBlock {\n\t\t\t\t\t\tdst.AppendNewline()\n\t\t\t\t\t\tprevWasBlock = true\n\t\t\t\t\t}\n\t\t\t\t\tdst.AppendBlock(block)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif !fieldVal.IsValid() {\n\t\t\t\t\tcontinue // ignore (field value is nil pointer)\n\t\t\t\t}\n\t\t\t\tif elemTy.Kind() == reflect.Ptr && fieldVal.IsNil() {\n\t\t\t\t\tcontinue // ignore\n\t\t\t\t}\n\t\t\t\tblock := EncodeAsBlock(fieldVal.Interface(), name)\n\t\t\t\tif !prevWasBlock {\n\t\t\t\t\tdst.AppendNewline()\n\t\t\t\t\tprevWasBlock = true\n\t\t\t\t}\n\t\t\t\tdst.AppendBlock(block)\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/gohcl/schema.go",
    "content": "package gohcl\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\t\"sort\"\n\t\"strings\"\n\n\t\"github.com/hashicorp/hcl2/hcl\"\n)\n\n// ImpliedBodySchema produces a hcl.BodySchema derived from the type of the\n// given value, which must be a struct value or a pointer to one. If an\n// inappropriate value is passed, this function will panic.\n//\n// The second return argument indicates whether the given struct includes\n// a \"remain\" field, and thus the returned schema is non-exhaustive.\n//\n// This uses the tags on the fields of the struct to discover how each\n// field's value should be expressed within configuration. If an invalid\n// mapping is attempted, this function will panic.\nfunc ImpliedBodySchema(val interface{}) (schema *hcl.BodySchema, partial bool) {\n\tty := reflect.TypeOf(val)\n\n\tif ty.Kind() == reflect.Ptr {\n\t\tty = ty.Elem()\n\t}\n\n\tif ty.Kind() != reflect.Struct {\n\t\tpanic(fmt.Sprintf(\"given value must be struct, not %T\", val))\n\t}\n\n\tvar attrSchemas []hcl.AttributeSchema\n\tvar blockSchemas []hcl.BlockHeaderSchema\n\n\ttags := getFieldTags(ty)\n\n\tattrNames := make([]string, 0, len(tags.Attributes))\n\tfor n := range tags.Attributes {\n\t\tattrNames = append(attrNames, n)\n\t}\n\tsort.Strings(attrNames)\n\tfor _, n := range attrNames {\n\t\tidx := tags.Attributes[n]\n\t\toptional := tags.Optional[n]\n\t\tfield := ty.Field(idx)\n\n\t\tvar required bool\n\n\t\tswitch {\n\t\tcase field.Type.AssignableTo(exprType):\n\t\t\t// If we're decoding to hcl.Expression then absense can be\n\t\t\t// indicated via a null value, so we don't specify that\n\t\t\t// the field is required during decoding.\n\t\t\trequired = false\n\t\tcase field.Type.Kind() != reflect.Ptr && !optional:\n\t\t\trequired = true\n\t\tdefault:\n\t\t\trequired = false\n\t\t}\n\n\t\tattrSchemas = append(attrSchemas, hcl.AttributeSchema{\n\t\t\tName:     n,\n\t\t\tRequired: required,\n\t\t})\n\t}\n\n\tblockNames := make([]string, 0, len(tags.Blocks))\n\tfor n := range tags.Blocks {\n\t\tblockNames = append(blockNames, n)\n\t}\n\tsort.Strings(blockNames)\n\tfor _, n := range blockNames {\n\t\tidx := tags.Blocks[n]\n\t\tfield := ty.Field(idx)\n\t\tfty := field.Type\n\t\tif fty.Kind() == reflect.Slice {\n\t\t\tfty = fty.Elem()\n\t\t}\n\t\tif fty.Kind() == reflect.Ptr {\n\t\t\tfty = fty.Elem()\n\t\t}\n\t\tif fty.Kind() != reflect.Struct {\n\t\t\tpanic(fmt.Sprintf(\n\t\t\t\t\"hcl 'block' tag kind cannot be applied to %s field %s: struct required\", field.Type.String(), field.Name,\n\t\t\t))\n\t\t}\n\t\tftags := getFieldTags(fty)\n\t\tvar labelNames []string\n\t\tif len(ftags.Labels) > 0 {\n\t\t\tlabelNames = make([]string, len(ftags.Labels))\n\t\t\tfor i, l := range ftags.Labels {\n\t\t\t\tlabelNames[i] = l.Name\n\t\t\t}\n\t\t}\n\n\t\tblockSchemas = append(blockSchemas, hcl.BlockHeaderSchema{\n\t\t\tType:       n,\n\t\t\tLabelNames: labelNames,\n\t\t})\n\t}\n\n\tpartial = tags.Remain != nil\n\tschema = &hcl.BodySchema{\n\t\tAttributes: attrSchemas,\n\t\tBlocks:     blockSchemas,\n\t}\n\treturn schema, partial\n}\n\ntype fieldTags struct {\n\tAttributes map[string]int\n\tBlocks     map[string]int\n\tLabels     []labelField\n\tRemain     *int\n\tOptional   map[string]bool\n}\n\ntype labelField struct {\n\tFieldIndex int\n\tName       string\n}\n\nfunc getFieldTags(ty reflect.Type) *fieldTags {\n\tret := &fieldTags{\n\t\tAttributes: map[string]int{},\n\t\tBlocks:     map[string]int{},\n\t\tOptional:   map[string]bool{},\n\t}\n\n\tct := ty.NumField()\n\tfor i := 0; i < ct; i++ {\n\t\tfield := ty.Field(i)\n\t\ttag := field.Tag.Get(\"hcl\")\n\t\tif tag == \"\" {\n\t\t\tcontinue\n\t\t}\n\n\t\tcomma := strings.Index(tag, \",\")\n\t\tvar name, kind string\n\t\tif comma != -1 {\n\t\t\tname = tag[:comma]\n\t\t\tkind = tag[comma+1:]\n\t\t} else {\n\t\t\tname = tag\n\t\t\tkind = \"attr\"\n\t\t}\n\n\t\tswitch kind {\n\t\tcase \"attr\":\n\t\t\tret.Attributes[name] = i\n\t\tcase \"block\":\n\t\t\tret.Blocks[name] = i\n\t\tcase \"label\":\n\t\t\tret.Labels = append(ret.Labels, labelField{\n\t\t\t\tFieldIndex: i,\n\t\t\t\tName:       name,\n\t\t\t})\n\t\tcase \"remain\":\n\t\t\tif ret.Remain != nil {\n\t\t\t\tpanic(\"only one 'remain' tag is permitted\")\n\t\t\t}\n\t\t\tidx := i // copy, because this loop will continue assigning to i\n\t\t\tret.Remain = &idx\n\t\tcase \"optional\":\n\t\t\tret.Attributes[name] = i\n\t\t\tret.Optional[name] = true\n\t\tdefault:\n\t\t\tpanic(fmt.Sprintf(\"invalid hcl field tag kind %q on %s %q\", kind, field.Type.String(), field.Name))\n\t\t}\n\t}\n\n\treturn ret\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/gohcl/types.go",
    "content": "package gohcl\n\nimport (\n\t\"reflect\"\n\n\t\"github.com/hashicorp/hcl2/hcl\"\n)\n\nvar victimExpr hcl.Expression\nvar victimBody hcl.Body\n\nvar exprType = reflect.TypeOf(&victimExpr).Elem()\nvar bodyType = reflect.TypeOf(&victimBody).Elem()\nvar blockType = reflect.TypeOf((*hcl.Block)(nil))\nvar attrType = reflect.TypeOf((*hcl.Attribute)(nil))\nvar attrsType = reflect.TypeOf(hcl.Attributes(nil))\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcl/diagnostic.go",
    "content": "package hcl\n\nimport (\n\t\"fmt\"\n)\n\n// DiagnosticSeverity represents the severity of a diagnostic.\ntype DiagnosticSeverity int\n\nconst (\n\t// DiagInvalid is the invalid zero value of DiagnosticSeverity\n\tDiagInvalid DiagnosticSeverity = iota\n\n\t// DiagError indicates that the problem reported by a diagnostic prevents\n\t// further progress in parsing and/or evaluating the subject.\n\tDiagError\n\n\t// DiagWarning indicates that the problem reported by a diagnostic warrants\n\t// user attention but does not prevent further progress. It is most\n\t// commonly used for showing deprecation notices.\n\tDiagWarning\n)\n\n// Diagnostic represents information to be presented to a user about an\n// error or anomoly in parsing or evaluating configuration.\ntype Diagnostic struct {\n\tSeverity DiagnosticSeverity\n\n\t// Summary and Detail contain the English-language description of the\n\t// problem. Summary is a terse description of the general problem and\n\t// detail is a more elaborate, often-multi-sentence description of\n\t// the probem and what might be done to solve it.\n\tSummary string\n\tDetail  string\n\n\t// Subject and Context are both source ranges relating to the diagnostic.\n\t//\n\t// Subject is a tight range referring to exactly the construct that\n\t// is problematic, while Context is an optional broader range (which should\n\t// fully contain Subject) that ought to be shown around Subject when\n\t// generating isolated source-code snippets in diagnostic messages.\n\t// If Context is nil, the Subject is also the Context.\n\t//\n\t// Some diagnostics have no source ranges at all. If Context is set then\n\t// Subject should always also be set.\n\tSubject *Range\n\tContext *Range\n\n\t// For diagnostics that occur when evaluating an expression, Expression\n\t// may refer to that expression and EvalContext may point to the\n\t// EvalContext that was active when evaluating it. This may allow for the\n\t// inclusion of additional useful information when rendering a diagnostic\n\t// message to the user.\n\t//\n\t// It is not always possible to select a single EvalContext for a\n\t// diagnostic, and so in some cases this field may be nil even when an\n\t// expression causes a problem.\n\t//\n\t// EvalContexts form a tree, so the given EvalContext may refer to a parent\n\t// which in turn refers to another parent, etc. For a full picture of all\n\t// of the active variables and functions the caller must walk up this\n\t// chain, preferring definitions that are \"closer\" to the expression in\n\t// case of colliding names.\n\tExpression  Expression\n\tEvalContext *EvalContext\n}\n\n// Diagnostics is a list of Diagnostic instances.\ntype Diagnostics []*Diagnostic\n\n// error implementation, so that diagnostics can be returned via APIs\n// that normally deal in vanilla Go errors.\n//\n// This presents only minimal context about the error, for compatibility\n// with usual expectations about how errors will present as strings.\nfunc (d *Diagnostic) Error() string {\n\treturn fmt.Sprintf(\"%s: %s; %s\", d.Subject, d.Summary, d.Detail)\n}\n\n// error implementation, so that sets of diagnostics can be returned via\n// APIs that normally deal in vanilla Go errors.\nfunc (d Diagnostics) Error() string {\n\tcount := len(d)\n\tswitch {\n\tcase count == 0:\n\t\treturn \"no diagnostics\"\n\tcase count == 1:\n\t\treturn d[0].Error()\n\tdefault:\n\t\treturn fmt.Sprintf(\"%s, and %d other diagnostic(s)\", d[0].Error(), count-1)\n\t}\n}\n\n// Append appends a new error to a Diagnostics and return the whole Diagnostics.\n//\n// This is provided as a convenience for returning from a function that\n// collects and then returns a set of diagnostics:\n//\n//     return nil, diags.Append(&hcl.Diagnostic{ ... })\n//\n// Note that this modifies the array underlying the diagnostics slice, so\n// must be used carefully within a single codepath. It is incorrect (and rude)\n// to extend a diagnostics created by a different subsystem.\nfunc (d Diagnostics) Append(diag *Diagnostic) Diagnostics {\n\treturn append(d, diag)\n}\n\n// Extend concatenates the given Diagnostics with the receiver and returns\n// the whole new Diagnostics.\n//\n// This is similar to Append but accepts multiple diagnostics to add. It has\n// all the same caveats and constraints.\nfunc (d Diagnostics) Extend(diags Diagnostics) Diagnostics {\n\treturn append(d, diags...)\n}\n\n// HasErrors returns true if the receiver contains any diagnostics of\n// severity DiagError.\nfunc (d Diagnostics) HasErrors() bool {\n\tfor _, diag := range d {\n\t\tif diag.Severity == DiagError {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\nfunc (d Diagnostics) Errs() []error {\n\tvar errs []error\n\tfor _, diag := range d {\n\t\tif diag.Severity == DiagError {\n\t\t\terrs = append(errs, diag)\n\t\t}\n\t}\n\n\treturn errs\n}\n\n// A DiagnosticWriter emits diagnostics somehow.\ntype DiagnosticWriter interface {\n\tWriteDiagnostic(*Diagnostic) error\n\tWriteDiagnostics(Diagnostics) error\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcl/diagnostic_text.go",
    "content": "package hcl\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"sort\"\n\n\twordwrap \"github.com/mitchellh/go-wordwrap\"\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\ntype diagnosticTextWriter struct {\n\tfiles map[string]*File\n\twr    io.Writer\n\twidth uint\n\tcolor bool\n}\n\n// NewDiagnosticTextWriter creates a DiagnosticWriter that writes diagnostics\n// to the given writer as formatted text.\n//\n// It is designed to produce text appropriate to print in a monospaced font\n// in a terminal of a particular width, or optionally with no width limit.\n//\n// The given width may be zero to disable word-wrapping of the detail text\n// and truncation of source code snippets.\n//\n// If color is set to true, the output will include VT100 escape sequences to\n// color-code the severity indicators. It is suggested to turn this off if\n// the target writer is not a terminal.\nfunc NewDiagnosticTextWriter(wr io.Writer, files map[string]*File, width uint, color bool) DiagnosticWriter {\n\treturn &diagnosticTextWriter{\n\t\tfiles: files,\n\t\twr:    wr,\n\t\twidth: width,\n\t\tcolor: color,\n\t}\n}\n\nfunc (w *diagnosticTextWriter) WriteDiagnostic(diag *Diagnostic) error {\n\tif diag == nil {\n\t\treturn errors.New(\"nil diagnostic\")\n\t}\n\n\tvar colorCode, highlightCode, resetCode string\n\tif w.color {\n\t\tswitch diag.Severity {\n\t\tcase DiagError:\n\t\t\tcolorCode = \"\\x1b[31m\"\n\t\tcase DiagWarning:\n\t\t\tcolorCode = \"\\x1b[33m\"\n\t\t}\n\t\tresetCode = \"\\x1b[0m\"\n\t\thighlightCode = \"\\x1b[1;4m\"\n\t}\n\n\tvar severityStr string\n\tswitch diag.Severity {\n\tcase DiagError:\n\t\tseverityStr = \"Error\"\n\tcase DiagWarning:\n\t\tseverityStr = \"Warning\"\n\tdefault:\n\t\t// should never happen\n\t\tseverityStr = \"???????\"\n\t}\n\n\tfmt.Fprintf(w.wr, \"%s%s%s: %s\\n\\n\", colorCode, severityStr, resetCode, diag.Summary)\n\n\tif diag.Subject != nil {\n\t\tsnipRange := *diag.Subject\n\t\thighlightRange := snipRange\n\t\tif diag.Context != nil {\n\t\t\t// Show enough of the source code to include both the subject\n\t\t\t// and context ranges, which overlap in all reasonable\n\t\t\t// situations.\n\t\t\tsnipRange = RangeOver(snipRange, *diag.Context)\n\t\t}\n\t\t// We can't illustrate an empty range, so we'll turn such ranges into\n\t\t// single-character ranges, which might not be totally valid (may point\n\t\t// off the end of a line, or off the end of the file) but are good\n\t\t// enough for the bounds checks we do below.\n\t\tif snipRange.Empty() {\n\t\t\tsnipRange.End.Byte++\n\t\t\tsnipRange.End.Column++\n\t\t}\n\t\tif highlightRange.Empty() {\n\t\t\thighlightRange.End.Byte++\n\t\t\thighlightRange.End.Column++\n\t\t}\n\n\t\tfile := w.files[diag.Subject.Filename]\n\t\tif file == nil || file.Bytes == nil {\n\t\t\tfmt.Fprintf(w.wr, \"  on %s line %d:\\n  (source code not available)\\n\\n\", diag.Subject.Filename, diag.Subject.Start.Line)\n\t\t} else {\n\n\t\t\tvar contextLine string\n\t\t\tif diag.Subject != nil {\n\t\t\t\tcontextLine = contextString(file, diag.Subject.Start.Byte)\n\t\t\t\tif contextLine != \"\" {\n\t\t\t\t\tcontextLine = \", in \" + contextLine\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfmt.Fprintf(w.wr, \"  on %s line %d%s:\\n\", diag.Subject.Filename, diag.Subject.Start.Line, contextLine)\n\n\t\t\tsrc := file.Bytes\n\t\t\tsc := NewRangeScanner(src, diag.Subject.Filename, bufio.ScanLines)\n\n\t\t\tfor sc.Scan() {\n\t\t\t\tlineRange := sc.Range()\n\t\t\t\tif !lineRange.Overlaps(snipRange) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tbeforeRange, highlightedRange, afterRange := lineRange.PartitionAround(highlightRange)\n\t\t\t\tif highlightedRange.Empty() {\n\t\t\t\t\tfmt.Fprintf(w.wr, \"%4d: %s\\n\", lineRange.Start.Line, sc.Bytes())\n\t\t\t\t} else {\n\t\t\t\t\tbefore := beforeRange.SliceBytes(src)\n\t\t\t\t\thighlighted := highlightedRange.SliceBytes(src)\n\t\t\t\t\tafter := afterRange.SliceBytes(src)\n\t\t\t\t\tfmt.Fprintf(\n\t\t\t\t\t\tw.wr, \"%4d: %s%s%s%s%s\\n\",\n\t\t\t\t\t\tlineRange.Start.Line,\n\t\t\t\t\t\tbefore,\n\t\t\t\t\t\thighlightCode, highlighted, resetCode,\n\t\t\t\t\t\tafter,\n\t\t\t\t\t)\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tw.wr.Write([]byte{'\\n'})\n\t\t}\n\n\t\tif diag.Expression != nil && diag.EvalContext != nil {\n\t\t\t// We will attempt to render the values for any variables\n\t\t\t// referenced in the given expression as additional context, for\n\t\t\t// situations where the same expression is evaluated multiple\n\t\t\t// times in different scopes.\n\t\t\texpr := diag.Expression\n\t\t\tctx := diag.EvalContext\n\n\t\t\tvars := expr.Variables()\n\t\t\tstmts := make([]string, 0, len(vars))\n\t\t\tseen := make(map[string]struct{}, len(vars))\n\t\t\tfor _, traversal := range vars {\n\t\t\t\tval, diags := traversal.TraverseAbs(ctx)\n\t\t\t\tif diags.HasErrors() {\n\t\t\t\t\t// Skip anything that generates errors, since we probably\n\t\t\t\t\t// already have the same error in our diagnostics set\n\t\t\t\t\t// already.\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\ttraversalStr := w.traversalStr(traversal)\n\t\t\t\tif _, exists := seen[traversalStr]; exists {\n\t\t\t\t\tcontinue // don't show duplicates when the same variable is referenced multiple times\n\t\t\t\t}\n\t\t\t\tswitch {\n\t\t\t\tcase !val.IsKnown():\n\t\t\t\t\t// Can't say anything about this yet, then.\n\t\t\t\t\tcontinue\n\t\t\t\tcase val.IsNull():\n\t\t\t\t\tstmts = append(stmts, fmt.Sprintf(\"%s set to null\", traversalStr))\n\t\t\t\tdefault:\n\t\t\t\t\tstmts = append(stmts, fmt.Sprintf(\"%s as %s\", traversalStr, w.valueStr(val)))\n\t\t\t\t}\n\t\t\t\tseen[traversalStr] = struct{}{}\n\t\t\t}\n\n\t\t\tsort.Strings(stmts) // FIXME: Should maybe use a traversal-aware sort that can sort numeric indexes properly?\n\t\t\tlast := len(stmts) - 1\n\n\t\t\tfor i, stmt := range stmts {\n\t\t\t\tswitch i {\n\t\t\t\tcase 0:\n\t\t\t\t\tw.wr.Write([]byte{'w', 'i', 't', 'h', ' '})\n\t\t\t\tdefault:\n\t\t\t\t\tw.wr.Write([]byte{' ', ' ', ' ', ' ', ' '})\n\t\t\t\t}\n\t\t\t\tw.wr.Write([]byte(stmt))\n\t\t\t\tswitch i {\n\t\t\t\tcase last:\n\t\t\t\t\tw.wr.Write([]byte{'.', '\\n', '\\n'})\n\t\t\t\tdefault:\n\t\t\t\t\tw.wr.Write([]byte{',', '\\n'})\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif diag.Detail != \"\" {\n\t\tdetail := diag.Detail\n\t\tif w.width != 0 {\n\t\t\tdetail = wordwrap.WrapString(detail, w.width)\n\t\t}\n\t\tfmt.Fprintf(w.wr, \"%s\\n\\n\", detail)\n\t}\n\n\treturn nil\n}\n\nfunc (w *diagnosticTextWriter) WriteDiagnostics(diags Diagnostics) error {\n\tfor _, diag := range diags {\n\t\terr := w.WriteDiagnostic(diag)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (w *diagnosticTextWriter) traversalStr(traversal Traversal) string {\n\t// This is a specialized subset of traversal rendering tailored to\n\t// producing helpful contextual messages in diagnostics. It is not\n\t// comprehensive nor intended to be used for other purposes.\n\n\tvar buf bytes.Buffer\n\tfor _, step := range traversal {\n\t\tswitch tStep := step.(type) {\n\t\tcase TraverseRoot:\n\t\t\tbuf.WriteString(tStep.Name)\n\t\tcase TraverseAttr:\n\t\t\tbuf.WriteByte('.')\n\t\t\tbuf.WriteString(tStep.Name)\n\t\tcase TraverseIndex:\n\t\t\tbuf.WriteByte('[')\n\t\t\tif keyTy := tStep.Key.Type(); keyTy.IsPrimitiveType() {\n\t\t\t\tbuf.WriteString(w.valueStr(tStep.Key))\n\t\t\t} else {\n\t\t\t\t// We'll just use a placeholder for more complex values,\n\t\t\t\t// since otherwise our result could grow ridiculously long.\n\t\t\t\tbuf.WriteString(\"...\")\n\t\t\t}\n\t\t\tbuf.WriteByte(']')\n\t\t}\n\t}\n\treturn buf.String()\n}\n\nfunc (w *diagnosticTextWriter) valueStr(val cty.Value) string {\n\t// This is a specialized subset of value rendering tailored to producing\n\t// helpful but concise messages in diagnostics. It is not comprehensive\n\t// nor intended to be used for other purposes.\n\n\tty := val.Type()\n\tswitch {\n\tcase val.IsNull():\n\t\treturn \"null\"\n\tcase !val.IsKnown():\n\t\t// Should never happen here because we should filter before we get\n\t\t// in here, but we'll do something reasonable rather than panic.\n\t\treturn \"(not yet known)\"\n\tcase ty == cty.Bool:\n\t\tif val.True() {\n\t\t\treturn \"true\"\n\t\t}\n\t\treturn \"false\"\n\tcase ty == cty.Number:\n\t\tbf := val.AsBigFloat()\n\t\treturn bf.Text('g', 10)\n\tcase ty == cty.String:\n\t\t// Go string syntax is not exactly the same as HCL native string syntax,\n\t\t// but we'll accept the minor edge-cases where this is different here\n\t\t// for now, just to get something reasonable here.\n\t\treturn fmt.Sprintf(\"%q\", val.AsString())\n\tcase ty.IsCollectionType() || ty.IsTupleType():\n\t\tl := val.LengthInt()\n\t\tswitch l {\n\t\tcase 0:\n\t\t\treturn \"empty \" + ty.FriendlyName()\n\t\tcase 1:\n\t\t\treturn ty.FriendlyName() + \" with 1 element\"\n\t\tdefault:\n\t\t\treturn fmt.Sprintf(\"%s with %d elements\", ty.FriendlyName(), l)\n\t\t}\n\tcase ty.IsObjectType():\n\t\tatys := ty.AttributeTypes()\n\t\tl := len(atys)\n\t\tswitch l {\n\t\tcase 0:\n\t\t\treturn \"object with no attributes\"\n\t\tcase 1:\n\t\t\tvar name string\n\t\t\tfor k := range atys {\n\t\t\t\tname = k\n\t\t\t}\n\t\t\treturn fmt.Sprintf(\"object with 1 attribute %q\", name)\n\t\tdefault:\n\t\t\treturn fmt.Sprintf(\"object with %d attributes\", l)\n\t\t}\n\tdefault:\n\t\treturn ty.FriendlyName()\n\t}\n}\n\nfunc contextString(file *File, offset int) string {\n\ttype contextStringer interface {\n\t\tContextString(offset int) string\n\t}\n\n\tif cser, ok := file.Nav.(contextStringer); ok {\n\t\treturn cser.ContextString(offset)\n\t}\n\treturn \"\"\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcl/didyoumean.go",
    "content": "package hcl\n\nimport (\n\t\"github.com/agext/levenshtein\"\n)\n\n// nameSuggestion tries to find a name from the given slice of suggested names\n// that is close to the given name and returns it if found. If no suggestion\n// is close enough, returns the empty string.\n//\n// The suggestions are tried in order, so earlier suggestions take precedence\n// if the given string is similar to two or more suggestions.\n//\n// This function is intended to be used with a relatively-small number of\n// suggestions. It's not optimized for hundreds or thousands of them.\nfunc nameSuggestion(given string, suggestions []string) string {\n\tfor _, suggestion := range suggestions {\n\t\tdist := levenshtein.Distance(given, suggestion, nil)\n\t\tif dist < 3 { // threshold determined experimentally\n\t\t\treturn suggestion\n\t\t}\n\t}\n\treturn \"\"\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcl/doc.go",
    "content": "package hcl\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcl/eval_context.go",
    "content": "package hcl\n\nimport (\n\t\"github.com/zclconf/go-cty/cty\"\n\t\"github.com/zclconf/go-cty/cty/function\"\n)\n\n// An EvalContext provides the variables and functions that should be used\n// to evaluate an expression.\ntype EvalContext struct {\n\tVariables map[string]cty.Value\n\tFunctions map[string]function.Function\n\tparent    *EvalContext\n}\n\n// NewChild returns a new EvalContext that is a child of the receiver.\nfunc (ctx *EvalContext) NewChild() *EvalContext {\n\treturn &EvalContext{parent: ctx}\n}\n\n// Parent returns the parent of the receiver, or nil if the receiver has\n// no parent.\nfunc (ctx *EvalContext) Parent() *EvalContext {\n\treturn ctx.parent\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcl/expr_call.go",
    "content": "package hcl\n\n// ExprCall tests if the given expression is a function call and,\n// if so, extracts the function name and the expressions that represent\n// the arguments. If the given expression is not statically a function call,\n// error diagnostics are returned.\n//\n// A particular Expression implementation can support this function by\n// offering a method called ExprCall that takes no arguments and returns\n// *StaticCall. This method should return nil if a static call cannot\n// be extracted.  Alternatively, an implementation can support\n// UnwrapExpression to delegate handling of this function to a wrapped\n// Expression object.\nfunc ExprCall(expr Expression) (*StaticCall, Diagnostics) {\n\ttype exprCall interface {\n\t\tExprCall() *StaticCall\n\t}\n\n\tphysExpr := UnwrapExpressionUntil(expr, func(expr Expression) bool {\n\t\t_, supported := expr.(exprCall)\n\t\treturn supported\n\t})\n\n\tif exC, supported := physExpr.(exprCall); supported {\n\t\tif call := exC.ExprCall(); call != nil {\n\t\t\treturn call, nil\n\t\t}\n\t}\n\treturn nil, Diagnostics{\n\t\t&Diagnostic{\n\t\t\tSeverity: DiagError,\n\t\t\tSummary:  \"Invalid expression\",\n\t\t\tDetail:   \"A static function call is required.\",\n\t\t\tSubject:  expr.StartRange().Ptr(),\n\t\t},\n\t}\n}\n\n// StaticCall represents a function call that was extracted statically from\n// an expression using ExprCall.\ntype StaticCall struct {\n\tName      string\n\tNameRange Range\n\tArguments []Expression\n\tArgsRange Range\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcl/expr_list.go",
    "content": "package hcl\n\n// ExprList tests if the given expression is a static list construct and,\n// if so, extracts the expressions that represent the list elements.\n// If the given expression is not a static list, error diagnostics are\n// returned.\n//\n// A particular Expression implementation can support this function by\n// offering a method called ExprList that takes no arguments and returns\n// []Expression. This method should return nil if a static list cannot\n// be extracted.  Alternatively, an implementation can support\n// UnwrapExpression to delegate handling of this function to a wrapped\n// Expression object.\nfunc ExprList(expr Expression) ([]Expression, Diagnostics) {\n\ttype exprList interface {\n\t\tExprList() []Expression\n\t}\n\n\tphysExpr := UnwrapExpressionUntil(expr, func(expr Expression) bool {\n\t\t_, supported := expr.(exprList)\n\t\treturn supported\n\t})\n\n\tif exL, supported := physExpr.(exprList); supported {\n\t\tif list := exL.ExprList(); list != nil {\n\t\t\treturn list, nil\n\t\t}\n\t}\n\treturn nil, Diagnostics{\n\t\t&Diagnostic{\n\t\t\tSeverity: DiagError,\n\t\t\tSummary:  \"Invalid expression\",\n\t\t\tDetail:   \"A static list expression is required.\",\n\t\t\tSubject:  expr.StartRange().Ptr(),\n\t\t},\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcl/expr_map.go",
    "content": "package hcl\n\n// ExprMap tests if the given expression is a static map construct and,\n// if so, extracts the expressions that represent the map elements.\n// If the given expression is not a static map, error diagnostics are\n// returned.\n//\n// A particular Expression implementation can support this function by\n// offering a method called ExprMap that takes no arguments and returns\n// []KeyValuePair. This method should return nil if a static map cannot\n// be extracted.  Alternatively, an implementation can support\n// UnwrapExpression to delegate handling of this function to a wrapped\n// Expression object.\nfunc ExprMap(expr Expression) ([]KeyValuePair, Diagnostics) {\n\ttype exprMap interface {\n\t\tExprMap() []KeyValuePair\n\t}\n\n\tphysExpr := UnwrapExpressionUntil(expr, func(expr Expression) bool {\n\t\t_, supported := expr.(exprMap)\n\t\treturn supported\n\t})\n\n\tif exM, supported := physExpr.(exprMap); supported {\n\t\tif pairs := exM.ExprMap(); pairs != nil {\n\t\t\treturn pairs, nil\n\t\t}\n\t}\n\treturn nil, Diagnostics{\n\t\t&Diagnostic{\n\t\t\tSeverity: DiagError,\n\t\t\tSummary:  \"Invalid expression\",\n\t\t\tDetail:   \"A static map expression is required.\",\n\t\t\tSubject:  expr.StartRange().Ptr(),\n\t\t},\n\t}\n}\n\n// KeyValuePair represents a pair of expressions that serve as a single item\n// within a map or object definition construct.\ntype KeyValuePair struct {\n\tKey   Expression\n\tValue Expression\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcl/expr_unwrap.go",
    "content": "package hcl\n\ntype unwrapExpression interface {\n\tUnwrapExpression() Expression\n}\n\n// UnwrapExpression removes any \"wrapper\" expressions from the given expression,\n// to recover the representation of the physical expression given in source\n// code.\n//\n// Sometimes wrapping expressions are used to modify expression behavior, e.g.\n// in extensions that need to make some local variables available to certain\n// sub-trees of the configuration. This can make it difficult to reliably\n// type-assert on the physical AST types used by the underlying syntax.\n//\n// Unwrapping an expression may modify its behavior by stripping away any\n// additional constraints or capabilities being applied to the Value and\n// Variables methods, so this function should generally only be used prior\n// to operations that concern themselves with the static syntax of the input\n// configuration, and not with the effective value of the expression.\n//\n// Wrapper expression types must support unwrapping by implementing a method\n// called UnwrapExpression that takes no arguments and returns the embedded\n// Expression. Implementations of this method should peel away only one level\n// of wrapping, if multiple are present. This method may return nil to\n// indicate _dynamically_ that no wrapped expression is available, for\n// expression types that might only behave as wrappers in certain cases.\nfunc UnwrapExpression(expr Expression) Expression {\n\tfor {\n\t\tunwrap, wrapped := expr.(unwrapExpression)\n\t\tif !wrapped {\n\t\t\treturn expr\n\t\t}\n\t\tinnerExpr := unwrap.UnwrapExpression()\n\t\tif innerExpr == nil {\n\t\t\treturn expr\n\t\t}\n\t\texpr = innerExpr\n\t}\n}\n\n// UnwrapExpressionUntil is similar to UnwrapExpression except it gives the\n// caller an opportunity to test each level of unwrapping to see each a\n// particular expression is accepted.\n//\n// This could be used, for example, to unwrap until a particular other\n// interface is satisfied, regardless of wrap wrapping level it is satisfied\n// at.\n//\n// The given callback function must return false to continue wrapping, or\n// true to accept and return the proposed expression given. If the callback\n// function rejects even the final, physical expression then the result of\n// this function is nil.\nfunc UnwrapExpressionUntil(expr Expression, until func(Expression) bool) Expression {\n\tfor {\n\t\tif until(expr) {\n\t\t\treturn expr\n\t\t}\n\t\tunwrap, wrapped := expr.(unwrapExpression)\n\t\tif !wrapped {\n\t\t\treturn nil\n\t\t}\n\t\texpr = unwrap.UnwrapExpression()\n\t\tif expr == nil {\n\t\t\treturn nil\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcl/hclsyntax/diagnostics.go",
    "content": "package hclsyntax\n\nimport (\n\t\"github.com/hashicorp/hcl2/hcl\"\n)\n\n// setDiagEvalContext is an internal helper that will impose a particular\n// EvalContext on a set of diagnostics in-place, for any diagnostic that\n// does not already have an EvalContext set.\n//\n// We generally expect diagnostics to be immutable, but this is safe to use\n// on any Diagnostics where none of the contained Diagnostic objects have yet\n// been seen by a caller. Its purpose is to apply additional context to a\n// set of diagnostics produced by a \"deeper\" component as the stack unwinds\n// during expression evaluation.\nfunc setDiagEvalContext(diags hcl.Diagnostics, expr hcl.Expression, ctx *hcl.EvalContext) {\n\tfor _, diag := range diags {\n\t\tif diag.Expression == nil {\n\t\t\tdiag.Expression = expr\n\t\t\tdiag.EvalContext = ctx\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcl/hclsyntax/didyoumean.go",
    "content": "package hclsyntax\n\nimport (\n\t\"github.com/agext/levenshtein\"\n)\n\n// nameSuggestion tries to find a name from the given slice of suggested names\n// that is close to the given name and returns it if found. If no suggestion\n// is close enough, returns the empty string.\n//\n// The suggestions are tried in order, so earlier suggestions take precedence\n// if the given string is similar to two or more suggestions.\n//\n// This function is intended to be used with a relatively-small number of\n// suggestions. It's not optimized for hundreds or thousands of them.\nfunc nameSuggestion(given string, suggestions []string) string {\n\tfor _, suggestion := range suggestions {\n\t\tdist := levenshtein.Distance(given, suggestion, nil)\n\t\tif dist < 3 { // threshold determined experimentally\n\t\t\treturn suggestion\n\t\t}\n\t}\n\treturn \"\"\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcl/hclsyntax/doc.go",
    "content": "// Package hclsyntax contains the parser, AST, etc for HCL's native language,\n// as opposed to the JSON variant.\n//\n// In normal use applications should rarely depend on this package directly,\n// instead preferring the higher-level interface of the main hcl package and\n// its companion package hclparse.\npackage hclsyntax\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcl/hclsyntax/expression.go",
    "content": "package hclsyntax\n\nimport (\n\t\"fmt\"\n\t\"sync\"\n\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/zclconf/go-cty/cty\"\n\t\"github.com/zclconf/go-cty/cty/convert\"\n\t\"github.com/zclconf/go-cty/cty/function\"\n)\n\n// Expression is the abstract type for nodes that behave as HCL expressions.\ntype Expression interface {\n\tNode\n\n\t// The hcl.Expression methods are duplicated here, rather than simply\n\t// embedded, because both Node and hcl.Expression have a Range method\n\t// and so they conflict.\n\n\tValue(ctx *hcl.EvalContext) (cty.Value, hcl.Diagnostics)\n\tVariables() []hcl.Traversal\n\tStartRange() hcl.Range\n}\n\n// Assert that Expression implements hcl.Expression\nvar assertExprImplExpr hcl.Expression = Expression(nil)\n\n// LiteralValueExpr is an expression that just always returns a given value.\ntype LiteralValueExpr struct {\n\tVal      cty.Value\n\tSrcRange hcl.Range\n}\n\nfunc (e *LiteralValueExpr) walkChildNodes(w internalWalkFunc) {\n\t// Literal values have no child nodes\n}\n\nfunc (e *LiteralValueExpr) Value(ctx *hcl.EvalContext) (cty.Value, hcl.Diagnostics) {\n\treturn e.Val, nil\n}\n\nfunc (e *LiteralValueExpr) Range() hcl.Range {\n\treturn e.SrcRange\n}\n\nfunc (e *LiteralValueExpr) StartRange() hcl.Range {\n\treturn e.SrcRange\n}\n\n// Implementation for hcl.AbsTraversalForExpr.\nfunc (e *LiteralValueExpr) AsTraversal() hcl.Traversal {\n\t// This one's a little weird: the contract for AsTraversal is to interpret\n\t// an expression as if it were traversal syntax, and traversal syntax\n\t// doesn't have the special keywords \"null\", \"true\", and \"false\" so these\n\t// are expected to be treated like variables in that case.\n\t// Since our parser already turned them into LiteralValueExpr by the time\n\t// we get here, we need to undo this and infer the name that would've\n\t// originally led to our value.\n\t// We don't do anything for any other values, since they don't overlap\n\t// with traversal roots.\n\n\tif e.Val.IsNull() {\n\t\t// In practice the parser only generates null values of the dynamic\n\t\t// pseudo-type for literals, so we can safely assume that any null\n\t\t// was orignally the keyword \"null\".\n\t\treturn hcl.Traversal{\n\t\t\thcl.TraverseRoot{\n\t\t\t\tName:     \"null\",\n\t\t\t\tSrcRange: e.SrcRange,\n\t\t\t},\n\t\t}\n\t}\n\n\tswitch e.Val {\n\tcase cty.True:\n\t\treturn hcl.Traversal{\n\t\t\thcl.TraverseRoot{\n\t\t\t\tName:     \"true\",\n\t\t\t\tSrcRange: e.SrcRange,\n\t\t\t},\n\t\t}\n\tcase cty.False:\n\t\treturn hcl.Traversal{\n\t\t\thcl.TraverseRoot{\n\t\t\t\tName:     \"false\",\n\t\t\t\tSrcRange: e.SrcRange,\n\t\t\t},\n\t\t}\n\tdefault:\n\t\t// No traversal is possible for any other value.\n\t\treturn nil\n\t}\n}\n\n// ScopeTraversalExpr is an Expression that retrieves a value from the scope\n// using a traversal.\ntype ScopeTraversalExpr struct {\n\tTraversal hcl.Traversal\n\tSrcRange  hcl.Range\n}\n\nfunc (e *ScopeTraversalExpr) walkChildNodes(w internalWalkFunc) {\n\t// Scope traversals have no child nodes\n}\n\nfunc (e *ScopeTraversalExpr) Value(ctx *hcl.EvalContext) (cty.Value, hcl.Diagnostics) {\n\tval, diags := e.Traversal.TraverseAbs(ctx)\n\tsetDiagEvalContext(diags, e, ctx)\n\treturn val, diags\n}\n\nfunc (e *ScopeTraversalExpr) Range() hcl.Range {\n\treturn e.SrcRange\n}\n\nfunc (e *ScopeTraversalExpr) StartRange() hcl.Range {\n\treturn e.SrcRange\n}\n\n// Implementation for hcl.AbsTraversalForExpr.\nfunc (e *ScopeTraversalExpr) AsTraversal() hcl.Traversal {\n\treturn e.Traversal\n}\n\n// RelativeTraversalExpr is an Expression that retrieves a value from another\n// value using a _relative_ traversal.\ntype RelativeTraversalExpr struct {\n\tSource    Expression\n\tTraversal hcl.Traversal\n\tSrcRange  hcl.Range\n}\n\nfunc (e *RelativeTraversalExpr) walkChildNodes(w internalWalkFunc) {\n\tw(e.Source)\n}\n\nfunc (e *RelativeTraversalExpr) Value(ctx *hcl.EvalContext) (cty.Value, hcl.Diagnostics) {\n\tsrc, diags := e.Source.Value(ctx)\n\tret, travDiags := e.Traversal.TraverseRel(src)\n\tsetDiagEvalContext(travDiags, e, ctx)\n\tdiags = append(diags, travDiags...)\n\treturn ret, diags\n}\n\nfunc (e *RelativeTraversalExpr) Range() hcl.Range {\n\treturn e.SrcRange\n}\n\nfunc (e *RelativeTraversalExpr) StartRange() hcl.Range {\n\treturn e.SrcRange\n}\n\n// Implementation for hcl.AbsTraversalForExpr.\nfunc (e *RelativeTraversalExpr) AsTraversal() hcl.Traversal {\n\t// We can produce a traversal only if our source can.\n\tst, diags := hcl.AbsTraversalForExpr(e.Source)\n\tif diags.HasErrors() {\n\t\treturn nil\n\t}\n\n\tret := make(hcl.Traversal, len(st)+len(e.Traversal))\n\tcopy(ret, st)\n\tcopy(ret[len(st):], e.Traversal)\n\treturn ret\n}\n\n// FunctionCallExpr is an Expression that calls a function from the EvalContext\n// and returns its result.\ntype FunctionCallExpr struct {\n\tName string\n\tArgs []Expression\n\n\t// If true, the final argument should be a tuple, list or set which will\n\t// expand to be one argument per element.\n\tExpandFinal bool\n\n\tNameRange       hcl.Range\n\tOpenParenRange  hcl.Range\n\tCloseParenRange hcl.Range\n}\n\nfunc (e *FunctionCallExpr) walkChildNodes(w internalWalkFunc) {\n\tfor _, arg := range e.Args {\n\t\tw(arg)\n\t}\n}\n\nfunc (e *FunctionCallExpr) Value(ctx *hcl.EvalContext) (cty.Value, hcl.Diagnostics) {\n\tvar diags hcl.Diagnostics\n\n\tvar f function.Function\n\texists := false\n\thasNonNilMap := false\n\tthisCtx := ctx\n\tfor thisCtx != nil {\n\t\tif thisCtx.Functions == nil {\n\t\t\tthisCtx = thisCtx.Parent()\n\t\t\tcontinue\n\t\t}\n\t\thasNonNilMap = true\n\t\tf, exists = thisCtx.Functions[e.Name]\n\t\tif exists {\n\t\t\tbreak\n\t\t}\n\t\tthisCtx = thisCtx.Parent()\n\t}\n\n\tif !exists {\n\t\tif !hasNonNilMap {\n\t\t\treturn cty.DynamicVal, hcl.Diagnostics{\n\t\t\t\t{\n\t\t\t\t\tSeverity:    hcl.DiagError,\n\t\t\t\t\tSummary:     \"Function calls not allowed\",\n\t\t\t\t\tDetail:      \"Functions may not be called here.\",\n\t\t\t\t\tSubject:     e.Range().Ptr(),\n\t\t\t\t\tExpression:  e,\n\t\t\t\t\tEvalContext: ctx,\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\n\t\tavail := make([]string, 0, len(ctx.Functions))\n\t\tfor name := range ctx.Functions {\n\t\t\tavail = append(avail, name)\n\t\t}\n\t\tsuggestion := nameSuggestion(e.Name, avail)\n\t\tif suggestion != \"\" {\n\t\t\tsuggestion = fmt.Sprintf(\" Did you mean %q?\", suggestion)\n\t\t}\n\n\t\treturn cty.DynamicVal, hcl.Diagnostics{\n\t\t\t{\n\t\t\t\tSeverity:    hcl.DiagError,\n\t\t\t\tSummary:     \"Call to unknown function\",\n\t\t\t\tDetail:      fmt.Sprintf(\"There is no function named %q.%s\", e.Name, suggestion),\n\t\t\t\tSubject:     &e.NameRange,\n\t\t\t\tContext:     e.Range().Ptr(),\n\t\t\t\tExpression:  e,\n\t\t\t\tEvalContext: ctx,\n\t\t\t},\n\t\t}\n\t}\n\n\tparams := f.Params()\n\tvarParam := f.VarParam()\n\n\targs := e.Args\n\tif e.ExpandFinal {\n\t\tif len(args) < 1 {\n\t\t\t// should never happen if the parser is behaving\n\t\t\tpanic(\"ExpandFinal set on function call with no arguments\")\n\t\t}\n\t\texpandExpr := args[len(args)-1]\n\t\texpandVal, expandDiags := expandExpr.Value(ctx)\n\t\tdiags = append(diags, expandDiags...)\n\t\tif expandDiags.HasErrors() {\n\t\t\treturn cty.DynamicVal, diags\n\t\t}\n\n\t\tswitch {\n\t\tcase expandVal.Type().IsTupleType() || expandVal.Type().IsListType() || expandVal.Type().IsSetType():\n\t\t\tif expandVal.IsNull() {\n\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\tSeverity:    hcl.DiagError,\n\t\t\t\t\tSummary:     \"Invalid expanding argument value\",\n\t\t\t\t\tDetail:      \"The expanding argument (indicated by ...) must not be null.\",\n\t\t\t\t\tSubject:     expandExpr.Range().Ptr(),\n\t\t\t\t\tContext:     e.Range().Ptr(),\n\t\t\t\t\tExpression:  expandExpr,\n\t\t\t\t\tEvalContext: ctx,\n\t\t\t\t})\n\t\t\t\treturn cty.DynamicVal, diags\n\t\t\t}\n\t\t\tif !expandVal.IsKnown() {\n\t\t\t\treturn cty.DynamicVal, diags\n\t\t\t}\n\n\t\t\tnewArgs := make([]Expression, 0, (len(args)-1)+expandVal.LengthInt())\n\t\t\tnewArgs = append(newArgs, args[:len(args)-1]...)\n\t\t\tit := expandVal.ElementIterator()\n\t\t\tfor it.Next() {\n\t\t\t\t_, val := it.Element()\n\t\t\t\tnewArgs = append(newArgs, &LiteralValueExpr{\n\t\t\t\t\tVal:      val,\n\t\t\t\t\tSrcRange: expandExpr.Range(),\n\t\t\t\t})\n\t\t\t}\n\t\t\targs = newArgs\n\t\tdefault:\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity:    hcl.DiagError,\n\t\t\t\tSummary:     \"Invalid expanding argument value\",\n\t\t\t\tDetail:      \"The expanding argument (indicated by ...) must be of a tuple, list, or set type.\",\n\t\t\t\tSubject:     expandExpr.Range().Ptr(),\n\t\t\t\tContext:     e.Range().Ptr(),\n\t\t\t\tExpression:  expandExpr,\n\t\t\t\tEvalContext: ctx,\n\t\t\t})\n\t\t\treturn cty.DynamicVal, diags\n\t\t}\n\t}\n\n\tif len(args) < len(params) {\n\t\tmissing := params[len(args)]\n\t\tqual := \"\"\n\t\tif varParam != nil {\n\t\t\tqual = \" at least\"\n\t\t}\n\t\treturn cty.DynamicVal, hcl.Diagnostics{\n\t\t\t{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Not enough function arguments\",\n\t\t\t\tDetail: fmt.Sprintf(\n\t\t\t\t\t\"Function %q expects%s %d argument(s). Missing value for %q.\",\n\t\t\t\t\te.Name, qual, len(params), missing.Name,\n\t\t\t\t),\n\t\t\t\tSubject:     &e.CloseParenRange,\n\t\t\t\tContext:     e.Range().Ptr(),\n\t\t\t\tExpression:  e,\n\t\t\t\tEvalContext: ctx,\n\t\t\t},\n\t\t}\n\t}\n\n\tif varParam == nil && len(args) > len(params) {\n\t\treturn cty.DynamicVal, hcl.Diagnostics{\n\t\t\t{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Too many function arguments\",\n\t\t\t\tDetail: fmt.Sprintf(\n\t\t\t\t\t\"Function %q expects only %d argument(s).\",\n\t\t\t\t\te.Name, len(params),\n\t\t\t\t),\n\t\t\t\tSubject:     args[len(params)].StartRange().Ptr(),\n\t\t\t\tContext:     e.Range().Ptr(),\n\t\t\t\tExpression:  e,\n\t\t\t\tEvalContext: ctx,\n\t\t\t},\n\t\t}\n\t}\n\n\targVals := make([]cty.Value, len(args))\n\n\tfor i, argExpr := range args {\n\t\tvar param *function.Parameter\n\t\tif i < len(params) {\n\t\t\tparam = &params[i]\n\t\t} else {\n\t\t\tparam = varParam\n\t\t}\n\n\t\tval, argDiags := argExpr.Value(ctx)\n\t\tif len(argDiags) > 0 {\n\t\t\tdiags = append(diags, argDiags...)\n\t\t}\n\n\t\t// Try to convert our value to the parameter type\n\t\tval, err := convert.Convert(val, param.Type)\n\t\tif err != nil {\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Invalid function argument\",\n\t\t\t\tDetail: fmt.Sprintf(\n\t\t\t\t\t\"Invalid value for %q parameter: %s.\",\n\t\t\t\t\tparam.Name, err,\n\t\t\t\t),\n\t\t\t\tSubject:     argExpr.StartRange().Ptr(),\n\t\t\t\tContext:     e.Range().Ptr(),\n\t\t\t\tExpression:  argExpr,\n\t\t\t\tEvalContext: ctx,\n\t\t\t})\n\t\t}\n\n\t\targVals[i] = val\n\t}\n\n\tif diags.HasErrors() {\n\t\t// Don't try to execute the function if we already have errors with\n\t\t// the arguments, because the result will probably be a confusing\n\t\t// error message.\n\t\treturn cty.DynamicVal, diags\n\t}\n\n\tresultVal, err := f.Call(argVals)\n\tif err != nil {\n\t\tswitch terr := err.(type) {\n\t\tcase function.ArgError:\n\t\t\ti := terr.Index\n\t\t\tvar param *function.Parameter\n\t\t\tif i < len(params) {\n\t\t\t\tparam = &params[i]\n\t\t\t} else {\n\t\t\t\tparam = varParam\n\t\t\t}\n\t\t\targExpr := e.Args[i]\n\n\t\t\t// TODO: we should also unpick a PathError here and show the\n\t\t\t// path to the deep value where the error was detected.\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Invalid function argument\",\n\t\t\t\tDetail: fmt.Sprintf(\n\t\t\t\t\t\"Invalid value for %q parameter: %s.\",\n\t\t\t\t\tparam.Name, err,\n\t\t\t\t),\n\t\t\t\tSubject:     argExpr.StartRange().Ptr(),\n\t\t\t\tContext:     e.Range().Ptr(),\n\t\t\t\tExpression:  argExpr,\n\t\t\t\tEvalContext: ctx,\n\t\t\t})\n\n\t\tdefault:\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Error in function call\",\n\t\t\t\tDetail: fmt.Sprintf(\n\t\t\t\t\t\"Call to function %q failed: %s.\",\n\t\t\t\t\te.Name, err,\n\t\t\t\t),\n\t\t\t\tSubject:     e.StartRange().Ptr(),\n\t\t\t\tContext:     e.Range().Ptr(),\n\t\t\t\tExpression:  e,\n\t\t\t\tEvalContext: ctx,\n\t\t\t})\n\t\t}\n\n\t\treturn cty.DynamicVal, diags\n\t}\n\n\treturn resultVal, diags\n}\n\nfunc (e *FunctionCallExpr) Range() hcl.Range {\n\treturn hcl.RangeBetween(e.NameRange, e.CloseParenRange)\n}\n\nfunc (e *FunctionCallExpr) StartRange() hcl.Range {\n\treturn hcl.RangeBetween(e.NameRange, e.OpenParenRange)\n}\n\n// Implementation for hcl.ExprCall.\nfunc (e *FunctionCallExpr) ExprCall() *hcl.StaticCall {\n\tret := &hcl.StaticCall{\n\t\tName:      e.Name,\n\t\tNameRange: e.NameRange,\n\t\tArguments: make([]hcl.Expression, len(e.Args)),\n\t\tArgsRange: hcl.RangeBetween(e.OpenParenRange, e.CloseParenRange),\n\t}\n\t// Need to convert our own Expression objects into hcl.Expression.\n\tfor i, arg := range e.Args {\n\t\tret.Arguments[i] = arg\n\t}\n\treturn ret\n}\n\ntype ConditionalExpr struct {\n\tCondition   Expression\n\tTrueResult  Expression\n\tFalseResult Expression\n\n\tSrcRange hcl.Range\n}\n\nfunc (e *ConditionalExpr) walkChildNodes(w internalWalkFunc) {\n\tw(e.Condition)\n\tw(e.TrueResult)\n\tw(e.FalseResult)\n}\n\nfunc (e *ConditionalExpr) Value(ctx *hcl.EvalContext) (cty.Value, hcl.Diagnostics) {\n\ttrueResult, trueDiags := e.TrueResult.Value(ctx)\n\tfalseResult, falseDiags := e.FalseResult.Value(ctx)\n\tvar diags hcl.Diagnostics\n\n\t// Try to find a type that both results can be converted to.\n\tresultType, convs := convert.UnifyUnsafe([]cty.Type{trueResult.Type(), falseResult.Type()})\n\tif resultType == cty.NilType {\n\t\treturn cty.DynamicVal, hcl.Diagnostics{\n\t\t\t{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Inconsistent conditional result types\",\n\t\t\t\tDetail: fmt.Sprintf(\n\t\t\t\t\t// FIXME: Need a helper function for showing natural-language type diffs,\n\t\t\t\t\t// since this will generate some useless messages in some cases, like\n\t\t\t\t\t// \"These expressions are object and object respectively\" if the\n\t\t\t\t\t// object types don't exactly match.\n\t\t\t\t\t\"The true and false result expressions must have consistent types. The given expressions are %s and %s, respectively.\",\n\t\t\t\t\ttrueResult.Type().FriendlyName(), falseResult.Type().FriendlyName(),\n\t\t\t\t),\n\t\t\t\tSubject:     hcl.RangeBetween(e.TrueResult.Range(), e.FalseResult.Range()).Ptr(),\n\t\t\t\tContext:     &e.SrcRange,\n\t\t\t\tExpression:  e,\n\t\t\t\tEvalContext: ctx,\n\t\t\t},\n\t\t}\n\t}\n\n\tcondResult, condDiags := e.Condition.Value(ctx)\n\tdiags = append(diags, condDiags...)\n\tif condResult.IsNull() {\n\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\tSeverity:    hcl.DiagError,\n\t\t\tSummary:     \"Null condition\",\n\t\t\tDetail:      \"The condition value is null. Conditions must either be true or false.\",\n\t\t\tSubject:     e.Condition.Range().Ptr(),\n\t\t\tContext:     &e.SrcRange,\n\t\t\tExpression:  e.Condition,\n\t\t\tEvalContext: ctx,\n\t\t})\n\t\treturn cty.UnknownVal(resultType), diags\n\t}\n\tif !condResult.IsKnown() {\n\t\treturn cty.UnknownVal(resultType), diags\n\t}\n\tcondResult, err := convert.Convert(condResult, cty.Bool)\n\tif err != nil {\n\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\tSeverity:    hcl.DiagError,\n\t\t\tSummary:     \"Incorrect condition type\",\n\t\t\tDetail:      fmt.Sprintf(\"The condition expression must be of type bool.\"),\n\t\t\tSubject:     e.Condition.Range().Ptr(),\n\t\t\tContext:     &e.SrcRange,\n\t\t\tExpression:  e.Condition,\n\t\t\tEvalContext: ctx,\n\t\t})\n\t\treturn cty.UnknownVal(resultType), diags\n\t}\n\n\tif condResult.True() {\n\t\tdiags = append(diags, trueDiags...)\n\t\tif convs[0] != nil {\n\t\t\tvar err error\n\t\t\ttrueResult, err = convs[0](trueResult)\n\t\t\tif err != nil {\n\t\t\t\t// Unsafe conversion failed with the concrete result value\n\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\tSummary:  \"Inconsistent conditional result types\",\n\t\t\t\t\tDetail: fmt.Sprintf(\n\t\t\t\t\t\t\"The true result value has the wrong type: %s.\",\n\t\t\t\t\t\terr.Error(),\n\t\t\t\t\t),\n\t\t\t\t\tSubject:     e.TrueResult.Range().Ptr(),\n\t\t\t\t\tContext:     &e.SrcRange,\n\t\t\t\t\tExpression:  e.TrueResult,\n\t\t\t\t\tEvalContext: ctx,\n\t\t\t\t})\n\t\t\t\ttrueResult = cty.UnknownVal(resultType)\n\t\t\t}\n\t\t}\n\t\treturn trueResult, diags\n\t} else {\n\t\tdiags = append(diags, falseDiags...)\n\t\tif convs[1] != nil {\n\t\t\tvar err error\n\t\t\tfalseResult, err = convs[1](falseResult)\n\t\t\tif err != nil {\n\t\t\t\t// Unsafe conversion failed with the concrete result value\n\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\tSummary:  \"Inconsistent conditional result types\",\n\t\t\t\t\tDetail: fmt.Sprintf(\n\t\t\t\t\t\t\"The false result value has the wrong type: %s.\",\n\t\t\t\t\t\terr.Error(),\n\t\t\t\t\t),\n\t\t\t\t\tSubject:     e.FalseResult.Range().Ptr(),\n\t\t\t\t\tContext:     &e.SrcRange,\n\t\t\t\t\tExpression:  e.FalseResult,\n\t\t\t\t\tEvalContext: ctx,\n\t\t\t\t})\n\t\t\t\tfalseResult = cty.UnknownVal(resultType)\n\t\t\t}\n\t\t}\n\t\treturn falseResult, diags\n\t}\n}\n\nfunc (e *ConditionalExpr) Range() hcl.Range {\n\treturn e.SrcRange\n}\n\nfunc (e *ConditionalExpr) StartRange() hcl.Range {\n\treturn e.Condition.StartRange()\n}\n\ntype IndexExpr struct {\n\tCollection Expression\n\tKey        Expression\n\n\tSrcRange  hcl.Range\n\tOpenRange hcl.Range\n}\n\nfunc (e *IndexExpr) walkChildNodes(w internalWalkFunc) {\n\tw(e.Collection)\n\tw(e.Key)\n}\n\nfunc (e *IndexExpr) Value(ctx *hcl.EvalContext) (cty.Value, hcl.Diagnostics) {\n\tvar diags hcl.Diagnostics\n\tcoll, collDiags := e.Collection.Value(ctx)\n\tkey, keyDiags := e.Key.Value(ctx)\n\tdiags = append(diags, collDiags...)\n\tdiags = append(diags, keyDiags...)\n\n\tval, indexDiags := hcl.Index(coll, key, &e.SrcRange)\n\tsetDiagEvalContext(indexDiags, e, ctx)\n\tdiags = append(diags, indexDiags...)\n\treturn val, diags\n}\n\nfunc (e *IndexExpr) Range() hcl.Range {\n\treturn e.SrcRange\n}\n\nfunc (e *IndexExpr) StartRange() hcl.Range {\n\treturn e.OpenRange\n}\n\ntype TupleConsExpr struct {\n\tExprs []Expression\n\n\tSrcRange  hcl.Range\n\tOpenRange hcl.Range\n}\n\nfunc (e *TupleConsExpr) walkChildNodes(w internalWalkFunc) {\n\tfor _, expr := range e.Exprs {\n\t\tw(expr)\n\t}\n}\n\nfunc (e *TupleConsExpr) Value(ctx *hcl.EvalContext) (cty.Value, hcl.Diagnostics) {\n\tvar vals []cty.Value\n\tvar diags hcl.Diagnostics\n\n\tvals = make([]cty.Value, len(e.Exprs))\n\tfor i, expr := range e.Exprs {\n\t\tval, valDiags := expr.Value(ctx)\n\t\tvals[i] = val\n\t\tdiags = append(diags, valDiags...)\n\t}\n\n\treturn cty.TupleVal(vals), diags\n}\n\nfunc (e *TupleConsExpr) Range() hcl.Range {\n\treturn e.SrcRange\n}\n\nfunc (e *TupleConsExpr) StartRange() hcl.Range {\n\treturn e.OpenRange\n}\n\n// Implementation for hcl.ExprList\nfunc (e *TupleConsExpr) ExprList() []hcl.Expression {\n\tret := make([]hcl.Expression, len(e.Exprs))\n\tfor i, expr := range e.Exprs {\n\t\tret[i] = expr\n\t}\n\treturn ret\n}\n\ntype ObjectConsExpr struct {\n\tItems []ObjectConsItem\n\n\tSrcRange  hcl.Range\n\tOpenRange hcl.Range\n}\n\ntype ObjectConsItem struct {\n\tKeyExpr   Expression\n\tValueExpr Expression\n}\n\nfunc (e *ObjectConsExpr) walkChildNodes(w internalWalkFunc) {\n\tfor _, item := range e.Items {\n\t\tw(item.KeyExpr)\n\t\tw(item.ValueExpr)\n\t}\n}\n\nfunc (e *ObjectConsExpr) Value(ctx *hcl.EvalContext) (cty.Value, hcl.Diagnostics) {\n\tvar vals map[string]cty.Value\n\tvar diags hcl.Diagnostics\n\n\t// This will get set to true if we fail to produce any of our keys,\n\t// either because they are actually unknown or if the evaluation produces\n\t// errors. In all of these case we must return DynamicPseudoType because\n\t// we're unable to know the full set of keys our object has, and thus\n\t// we can't produce a complete value of the intended type.\n\t//\n\t// We still evaluate all of the item keys and values to make sure that we\n\t// get as complete as possible a set of diagnostics.\n\tknown := true\n\n\tvals = make(map[string]cty.Value, len(e.Items))\n\tfor _, item := range e.Items {\n\t\tkey, keyDiags := item.KeyExpr.Value(ctx)\n\t\tdiags = append(diags, keyDiags...)\n\n\t\tval, valDiags := item.ValueExpr.Value(ctx)\n\t\tdiags = append(diags, valDiags...)\n\n\t\tif keyDiags.HasErrors() {\n\t\t\tknown = false\n\t\t\tcontinue\n\t\t}\n\n\t\tif key.IsNull() {\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity:    hcl.DiagError,\n\t\t\t\tSummary:     \"Null value as key\",\n\t\t\t\tDetail:      \"Can't use a null value as a key.\",\n\t\t\t\tSubject:     item.ValueExpr.Range().Ptr(),\n\t\t\t\tExpression:  item.KeyExpr,\n\t\t\t\tEvalContext: ctx,\n\t\t\t})\n\t\t\tknown = false\n\t\t\tcontinue\n\t\t}\n\n\t\tvar err error\n\t\tkey, err = convert.Convert(key, cty.String)\n\t\tif err != nil {\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity:    hcl.DiagError,\n\t\t\t\tSummary:     \"Incorrect key type\",\n\t\t\t\tDetail:      fmt.Sprintf(\"Can't use this value as a key: %s.\", err.Error()),\n\t\t\t\tSubject:     item.KeyExpr.Range().Ptr(),\n\t\t\t\tExpression:  item.KeyExpr,\n\t\t\t\tEvalContext: ctx,\n\t\t\t})\n\t\t\tknown = false\n\t\t\tcontinue\n\t\t}\n\n\t\tif !key.IsKnown() {\n\t\t\tknown = false\n\t\t\tcontinue\n\t\t}\n\n\t\tkeyStr := key.AsString()\n\n\t\tvals[keyStr] = val\n\t}\n\n\tif !known {\n\t\treturn cty.DynamicVal, diags\n\t}\n\n\treturn cty.ObjectVal(vals), diags\n}\n\nfunc (e *ObjectConsExpr) Range() hcl.Range {\n\treturn e.SrcRange\n}\n\nfunc (e *ObjectConsExpr) StartRange() hcl.Range {\n\treturn e.OpenRange\n}\n\n// Implementation for hcl.ExprMap\nfunc (e *ObjectConsExpr) ExprMap() []hcl.KeyValuePair {\n\tret := make([]hcl.KeyValuePair, len(e.Items))\n\tfor i, item := range e.Items {\n\t\tret[i] = hcl.KeyValuePair{\n\t\t\tKey:   item.KeyExpr,\n\t\t\tValue: item.ValueExpr,\n\t\t}\n\t}\n\treturn ret\n}\n\n// ObjectConsKeyExpr is a special wrapper used only for ObjectConsExpr keys,\n// which deals with the special case that a naked identifier in that position\n// must be interpreted as a literal string rather than evaluated directly.\ntype ObjectConsKeyExpr struct {\n\tWrapped Expression\n}\n\nfunc (e *ObjectConsKeyExpr) literalName() string {\n\t// This is our logic for deciding whether to behave like a literal string.\n\t// We lean on our AbsTraversalForExpr implementation here, which already\n\t// deals with some awkward cases like the expression being the result\n\t// of the keywords \"null\", \"true\" and \"false\" which we'd want to interpret\n\t// as keys here too.\n\treturn hcl.ExprAsKeyword(e.Wrapped)\n}\n\nfunc (e *ObjectConsKeyExpr) walkChildNodes(w internalWalkFunc) {\n\t// We only treat our wrapped expression as a real expression if we're\n\t// not going to interpret it as a literal.\n\tif e.literalName() == \"\" {\n\t\tw(e.Wrapped)\n\t}\n}\n\nfunc (e *ObjectConsKeyExpr) Value(ctx *hcl.EvalContext) (cty.Value, hcl.Diagnostics) {\n\t// Because we accept a naked identifier as a literal key rather than a\n\t// reference, it's confusing to accept a traversal containing periods\n\t// here since we can't tell if the user intends to create a key with\n\t// periods or actually reference something. To avoid confusing downstream\n\t// errors we'll just prohibit a naked multi-step traversal here and\n\t// require the user to state their intent more clearly.\n\t// (This is handled at evaluation time rather than parse time because\n\t// an application using static analysis _can_ accept a naked multi-step\n\t// traversal here, if desired.)\n\tif travExpr, isTraversal := e.Wrapped.(*ScopeTraversalExpr); isTraversal && len(travExpr.Traversal) > 1 {\n\t\tvar diags hcl.Diagnostics\n\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Ambiguous attribute key\",\n\t\t\tDetail:   \"If this expression is intended to be a reference, wrap it in parentheses. If it's instead intended as a literal name containing periods, wrap it in quotes to create a string literal.\",\n\t\t\tSubject:  e.Range().Ptr(),\n\t\t})\n\t\treturn cty.DynamicVal, diags\n\t}\n\n\tif ln := e.literalName(); ln != \"\" {\n\t\treturn cty.StringVal(ln), nil\n\t}\n\treturn e.Wrapped.Value(ctx)\n}\n\nfunc (e *ObjectConsKeyExpr) Range() hcl.Range {\n\treturn e.Wrapped.Range()\n}\n\nfunc (e *ObjectConsKeyExpr) StartRange() hcl.Range {\n\treturn e.Wrapped.StartRange()\n}\n\n// Implementation for hcl.AbsTraversalForExpr.\nfunc (e *ObjectConsKeyExpr) AsTraversal() hcl.Traversal {\n\t// We can produce a traversal only if our wrappee can.\n\tst, diags := hcl.AbsTraversalForExpr(e.Wrapped)\n\tif diags.HasErrors() {\n\t\treturn nil\n\t}\n\n\treturn st\n}\n\nfunc (e *ObjectConsKeyExpr) UnwrapExpression() Expression {\n\treturn e.Wrapped\n}\n\n// ForExpr represents iteration constructs:\n//\n//     tuple = [for i, v in list: upper(v) if i > 2]\n//     object = {for k, v in map: k => upper(v)}\n//     object_of_tuples = {for v in list: v.key: v...}\ntype ForExpr struct {\n\tKeyVar string // empty if ignoring the key\n\tValVar string\n\n\tCollExpr Expression\n\n\tKeyExpr  Expression // nil when producing a tuple\n\tValExpr  Expression\n\tCondExpr Expression // null if no \"if\" clause is present\n\n\tGroup bool // set if the ellipsis is used on the value in an object for\n\n\tSrcRange   hcl.Range\n\tOpenRange  hcl.Range\n\tCloseRange hcl.Range\n}\n\nfunc (e *ForExpr) Value(ctx *hcl.EvalContext) (cty.Value, hcl.Diagnostics) {\n\tvar diags hcl.Diagnostics\n\n\tcollVal, collDiags := e.CollExpr.Value(ctx)\n\tdiags = append(diags, collDiags...)\n\n\tif collVal.IsNull() {\n\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\tSeverity:    hcl.DiagError,\n\t\t\tSummary:     \"Iteration over null value\",\n\t\t\tDetail:      \"A null value cannot be used as the collection in a 'for' expression.\",\n\t\t\tSubject:     e.CollExpr.Range().Ptr(),\n\t\t\tContext:     &e.SrcRange,\n\t\t\tExpression:  e.CollExpr,\n\t\t\tEvalContext: ctx,\n\t\t})\n\t\treturn cty.DynamicVal, diags\n\t}\n\tif collVal.Type() == cty.DynamicPseudoType {\n\t\treturn cty.DynamicVal, diags\n\t}\n\tif !collVal.CanIterateElements() {\n\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Iteration over non-iterable value\",\n\t\t\tDetail: fmt.Sprintf(\n\t\t\t\t\"A value of type %s cannot be used as the collection in a 'for' expression.\",\n\t\t\t\tcollVal.Type().FriendlyName(),\n\t\t\t),\n\t\t\tSubject:     e.CollExpr.Range().Ptr(),\n\t\t\tContext:     &e.SrcRange,\n\t\t\tExpression:  e.CollExpr,\n\t\t\tEvalContext: ctx,\n\t\t})\n\t\treturn cty.DynamicVal, diags\n\t}\n\tif !collVal.IsKnown() {\n\t\treturn cty.DynamicVal, diags\n\t}\n\n\t// Before we start we'll do an early check to see if any CondExpr we've\n\t// been given is of the wrong type. This isn't 100% reliable (it may\n\t// be DynamicVal until real values are given) but it should catch some\n\t// straightforward cases and prevent a barrage of repeated errors.\n\tif e.CondExpr != nil {\n\t\tchildCtx := ctx.NewChild()\n\t\tchildCtx.Variables = map[string]cty.Value{}\n\t\tif e.KeyVar != \"\" {\n\t\t\tchildCtx.Variables[e.KeyVar] = cty.DynamicVal\n\t\t}\n\t\tchildCtx.Variables[e.ValVar] = cty.DynamicVal\n\n\t\tresult, condDiags := e.CondExpr.Value(childCtx)\n\t\tdiags = append(diags, condDiags...)\n\t\tif result.IsNull() {\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity:    hcl.DiagError,\n\t\t\t\tSummary:     \"Condition is null\",\n\t\t\t\tDetail:      \"The value of the 'if' clause must not be null.\",\n\t\t\t\tSubject:     e.CondExpr.Range().Ptr(),\n\t\t\t\tContext:     &e.SrcRange,\n\t\t\t\tExpression:  e.CondExpr,\n\t\t\t\tEvalContext: ctx,\n\t\t\t})\n\t\t\treturn cty.DynamicVal, diags\n\t\t}\n\t\t_, err := convert.Convert(result, cty.Bool)\n\t\tif err != nil {\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity:    hcl.DiagError,\n\t\t\t\tSummary:     \"Invalid 'for' condition\",\n\t\t\t\tDetail:      fmt.Sprintf(\"The 'if' clause value is invalid: %s.\", err.Error()),\n\t\t\t\tSubject:     e.CondExpr.Range().Ptr(),\n\t\t\t\tContext:     &e.SrcRange,\n\t\t\t\tExpression:  e.CondExpr,\n\t\t\t\tEvalContext: ctx,\n\t\t\t})\n\t\t\treturn cty.DynamicVal, diags\n\t\t}\n\t\tif condDiags.HasErrors() {\n\t\t\treturn cty.DynamicVal, diags\n\t\t}\n\t}\n\n\tif e.KeyExpr != nil {\n\t\t// Producing an object\n\t\tvar vals map[string]cty.Value\n\t\tvar groupVals map[string][]cty.Value\n\t\tif e.Group {\n\t\t\tgroupVals = map[string][]cty.Value{}\n\t\t} else {\n\t\t\tvals = map[string]cty.Value{}\n\t\t}\n\n\t\tit := collVal.ElementIterator()\n\n\t\tknown := true\n\t\tfor it.Next() {\n\t\t\tk, v := it.Element()\n\t\t\tchildCtx := ctx.NewChild()\n\t\t\tchildCtx.Variables = map[string]cty.Value{}\n\t\t\tif e.KeyVar != \"\" {\n\t\t\t\tchildCtx.Variables[e.KeyVar] = k\n\t\t\t}\n\t\t\tchildCtx.Variables[e.ValVar] = v\n\n\t\t\tif e.CondExpr != nil {\n\t\t\t\tincludeRaw, condDiags := e.CondExpr.Value(childCtx)\n\t\t\t\tdiags = append(diags, condDiags...)\n\t\t\t\tif includeRaw.IsNull() {\n\t\t\t\t\tif known {\n\t\t\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\t\t\tSeverity:    hcl.DiagError,\n\t\t\t\t\t\t\tSummary:     \"Invalid 'for' condition\",\n\t\t\t\t\t\t\tDetail:      \"The value of the 'if' clause must not be null.\",\n\t\t\t\t\t\t\tSubject:     e.CondExpr.Range().Ptr(),\n\t\t\t\t\t\t\tContext:     &e.SrcRange,\n\t\t\t\t\t\t\tExpression:  e.CondExpr,\n\t\t\t\t\t\t\tEvalContext: childCtx,\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t\tknown = false\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tinclude, err := convert.Convert(includeRaw, cty.Bool)\n\t\t\t\tif err != nil {\n\t\t\t\t\tif known {\n\t\t\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\t\t\tSeverity:    hcl.DiagError,\n\t\t\t\t\t\t\tSummary:     \"Invalid 'for' condition\",\n\t\t\t\t\t\t\tDetail:      fmt.Sprintf(\"The 'if' clause value is invalid: %s.\", err.Error()),\n\t\t\t\t\t\t\tSubject:     e.CondExpr.Range().Ptr(),\n\t\t\t\t\t\t\tContext:     &e.SrcRange,\n\t\t\t\t\t\t\tExpression:  e.CondExpr,\n\t\t\t\t\t\t\tEvalContext: childCtx,\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t\tknown = false\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif !include.IsKnown() {\n\t\t\t\t\tknown = false\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tif include.False() {\n\t\t\t\t\t// Skip this element\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tkeyRaw, keyDiags := e.KeyExpr.Value(childCtx)\n\t\t\tdiags = append(diags, keyDiags...)\n\t\t\tif keyRaw.IsNull() {\n\t\t\t\tif known {\n\t\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\t\tSeverity:    hcl.DiagError,\n\t\t\t\t\t\tSummary:     \"Invalid object key\",\n\t\t\t\t\t\tDetail:      \"Key expression in 'for' expression must not produce a null value.\",\n\t\t\t\t\t\tSubject:     e.KeyExpr.Range().Ptr(),\n\t\t\t\t\t\tContext:     &e.SrcRange,\n\t\t\t\t\t\tExpression:  e.KeyExpr,\n\t\t\t\t\t\tEvalContext: childCtx,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tknown = false\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif !keyRaw.IsKnown() {\n\t\t\t\tknown = false\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tkey, err := convert.Convert(keyRaw, cty.String)\n\t\t\tif err != nil {\n\t\t\t\tif known {\n\t\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\t\tSeverity:    hcl.DiagError,\n\t\t\t\t\t\tSummary:     \"Invalid object key\",\n\t\t\t\t\t\tDetail:      fmt.Sprintf(\"The key expression produced an invalid result: %s.\", err.Error()),\n\t\t\t\t\t\tSubject:     e.KeyExpr.Range().Ptr(),\n\t\t\t\t\t\tContext:     &e.SrcRange,\n\t\t\t\t\t\tExpression:  e.KeyExpr,\n\t\t\t\t\t\tEvalContext: childCtx,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tknown = false\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tval, valDiags := e.ValExpr.Value(childCtx)\n\t\t\tdiags = append(diags, valDiags...)\n\n\t\t\tif e.Group {\n\t\t\t\tk := key.AsString()\n\t\t\t\tgroupVals[k] = append(groupVals[k], val)\n\t\t\t} else {\n\t\t\t\tk := key.AsString()\n\t\t\t\tif _, exists := vals[k]; exists {\n\t\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\t\tSummary:  \"Duplicate object key\",\n\t\t\t\t\t\tDetail: fmt.Sprintf(\n\t\t\t\t\t\t\t\"Two different items produced the key %q in this 'for' expression. If duplicates are expected, use the ellipsis (...) after the value expression to enable grouping by key.\",\n\t\t\t\t\t\t\tk,\n\t\t\t\t\t\t),\n\t\t\t\t\t\tSubject:     e.KeyExpr.Range().Ptr(),\n\t\t\t\t\t\tContext:     &e.SrcRange,\n\t\t\t\t\t\tExpression:  e.KeyExpr,\n\t\t\t\t\t\tEvalContext: childCtx,\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\tvals[key.AsString()] = val\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif !known {\n\t\t\treturn cty.DynamicVal, diags\n\t\t}\n\n\t\tif e.Group {\n\t\t\tvals = map[string]cty.Value{}\n\t\t\tfor k, gvs := range groupVals {\n\t\t\t\tvals[k] = cty.TupleVal(gvs)\n\t\t\t}\n\t\t}\n\n\t\treturn cty.ObjectVal(vals), diags\n\n\t} else {\n\t\t// Producing a tuple\n\t\tvals := []cty.Value{}\n\n\t\tit := collVal.ElementIterator()\n\n\t\tknown := true\n\t\tfor it.Next() {\n\t\t\tk, v := it.Element()\n\t\t\tchildCtx := ctx.NewChild()\n\t\t\tchildCtx.Variables = map[string]cty.Value{}\n\t\t\tif e.KeyVar != \"\" {\n\t\t\t\tchildCtx.Variables[e.KeyVar] = k\n\t\t\t}\n\t\t\tchildCtx.Variables[e.ValVar] = v\n\n\t\t\tif e.CondExpr != nil {\n\t\t\t\tincludeRaw, condDiags := e.CondExpr.Value(childCtx)\n\t\t\t\tdiags = append(diags, condDiags...)\n\t\t\t\tif includeRaw.IsNull() {\n\t\t\t\t\tif known {\n\t\t\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\t\t\tSeverity:    hcl.DiagError,\n\t\t\t\t\t\t\tSummary:     \"Invalid 'for' condition\",\n\t\t\t\t\t\t\tDetail:      \"The value of the 'if' clause must not be null.\",\n\t\t\t\t\t\t\tSubject:     e.CondExpr.Range().Ptr(),\n\t\t\t\t\t\t\tContext:     &e.SrcRange,\n\t\t\t\t\t\t\tExpression:  e.CondExpr,\n\t\t\t\t\t\t\tEvalContext: childCtx,\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t\tknown = false\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif !includeRaw.IsKnown() {\n\t\t\t\t\t// We will eventually return DynamicVal, but we'll continue\n\t\t\t\t\t// iterating in case there are other diagnostics to gather\n\t\t\t\t\t// for later elements.\n\t\t\t\t\tknown = false\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tinclude, err := convert.Convert(includeRaw, cty.Bool)\n\t\t\t\tif err != nil {\n\t\t\t\t\tif known {\n\t\t\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\t\t\tSeverity:    hcl.DiagError,\n\t\t\t\t\t\t\tSummary:     \"Invalid 'for' condition\",\n\t\t\t\t\t\t\tDetail:      fmt.Sprintf(\"The 'if' clause value is invalid: %s.\", err.Error()),\n\t\t\t\t\t\t\tSubject:     e.CondExpr.Range().Ptr(),\n\t\t\t\t\t\t\tContext:     &e.SrcRange,\n\t\t\t\t\t\t\tExpression:  e.CondExpr,\n\t\t\t\t\t\t\tEvalContext: childCtx,\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t\tknown = false\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tif include.False() {\n\t\t\t\t\t// Skip this element\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tval, valDiags := e.ValExpr.Value(childCtx)\n\t\t\tdiags = append(diags, valDiags...)\n\t\t\tvals = append(vals, val)\n\t\t}\n\n\t\tif !known {\n\t\t\treturn cty.DynamicVal, diags\n\t\t}\n\n\t\treturn cty.TupleVal(vals), diags\n\t}\n}\n\nfunc (e *ForExpr) walkChildNodes(w internalWalkFunc) {\n\tw(e.CollExpr)\n\n\tscopeNames := map[string]struct{}{}\n\tif e.KeyVar != \"\" {\n\t\tscopeNames[e.KeyVar] = struct{}{}\n\t}\n\tif e.ValVar != \"\" {\n\t\tscopeNames[e.ValVar] = struct{}{}\n\t}\n\n\tif e.KeyExpr != nil {\n\t\tw(ChildScope{\n\t\t\tLocalNames: scopeNames,\n\t\t\tExpr:       e.KeyExpr,\n\t\t})\n\t}\n\tw(ChildScope{\n\t\tLocalNames: scopeNames,\n\t\tExpr:       e.ValExpr,\n\t})\n\tif e.CondExpr != nil {\n\t\tw(ChildScope{\n\t\t\tLocalNames: scopeNames,\n\t\t\tExpr:       e.CondExpr,\n\t\t})\n\t}\n}\n\nfunc (e *ForExpr) Range() hcl.Range {\n\treturn e.SrcRange\n}\n\nfunc (e *ForExpr) StartRange() hcl.Range {\n\treturn e.OpenRange\n}\n\ntype SplatExpr struct {\n\tSource Expression\n\tEach   Expression\n\tItem   *AnonSymbolExpr\n\n\tSrcRange    hcl.Range\n\tMarkerRange hcl.Range\n}\n\nfunc (e *SplatExpr) Value(ctx *hcl.EvalContext) (cty.Value, hcl.Diagnostics) {\n\tsourceVal, diags := e.Source.Value(ctx)\n\tif diags.HasErrors() {\n\t\t// We'll evaluate our \"Each\" expression here just to see if it\n\t\t// produces any more diagnostics we can report. Since we're not\n\t\t// assigning a value to our AnonSymbolExpr here it will return\n\t\t// DynamicVal, which should short-circuit any use of it.\n\t\t_, itemDiags := e.Item.Value(ctx)\n\t\tdiags = append(diags, itemDiags...)\n\t\treturn cty.DynamicVal, diags\n\t}\n\n\tsourceTy := sourceVal.Type()\n\tif sourceTy == cty.DynamicPseudoType {\n\t\t// If we don't even know the _type_ of our source value yet then\n\t\t// we'll need to defer all processing, since we can't decide our\n\t\t// result type either.\n\t\treturn cty.DynamicVal, diags\n\t}\n\n\t// A \"special power\" of splat expressions is that they can be applied\n\t// both to tuples/lists and to other values, and in the latter case\n\t// the value will be treated as an implicit single-item tuple, or as\n\t// an empty tuple if the value is null.\n\tautoUpgrade := !(sourceTy.IsTupleType() || sourceTy.IsListType() || sourceTy.IsSetType())\n\n\tif sourceVal.IsNull() {\n\t\tif autoUpgrade {\n\t\t\treturn cty.EmptyTupleVal, diags\n\t\t}\n\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\tSeverity:    hcl.DiagError,\n\t\t\tSummary:     \"Splat of null value\",\n\t\t\tDetail:      \"Splat expressions (with the * symbol) cannot be applied to null sequences.\",\n\t\t\tSubject:     e.Source.Range().Ptr(),\n\t\t\tContext:     hcl.RangeBetween(e.Source.Range(), e.MarkerRange).Ptr(),\n\t\t\tExpression:  e.Source,\n\t\t\tEvalContext: ctx,\n\t\t})\n\t\treturn cty.DynamicVal, diags\n\t}\n\n\tif autoUpgrade {\n\t\tsourceVal = cty.TupleVal([]cty.Value{sourceVal})\n\t\tsourceTy = sourceVal.Type()\n\t}\n\n\t// We'll compute our result type lazily if we need it. In the normal case\n\t// it's inferred automatically from the value we construct.\n\tresultTy := func() (cty.Type, hcl.Diagnostics) {\n\t\tchiCtx := ctx.NewChild()\n\t\tvar diags hcl.Diagnostics\n\t\tswitch {\n\t\tcase sourceTy.IsListType() || sourceTy.IsSetType():\n\t\t\tety := sourceTy.ElementType()\n\t\t\te.Item.setValue(chiCtx, cty.UnknownVal(ety))\n\t\t\tval, itemDiags := e.Each.Value(chiCtx)\n\t\t\tdiags = append(diags, itemDiags...)\n\t\t\te.Item.clearValue(chiCtx) // clean up our temporary value\n\t\t\treturn cty.List(val.Type()), diags\n\t\tcase sourceTy.IsTupleType():\n\t\t\tetys := sourceTy.TupleElementTypes()\n\t\t\tresultTys := make([]cty.Type, 0, len(etys))\n\t\t\tfor _, ety := range etys {\n\t\t\t\te.Item.setValue(chiCtx, cty.UnknownVal(ety))\n\t\t\t\tval, itemDiags := e.Each.Value(chiCtx)\n\t\t\t\tdiags = append(diags, itemDiags...)\n\t\t\t\te.Item.clearValue(chiCtx) // clean up our temporary value\n\t\t\t\tresultTys = append(resultTys, val.Type())\n\t\t\t}\n\t\t\treturn cty.Tuple(resultTys), diags\n\t\tdefault:\n\t\t\t// Should never happen because of our promotion to list above.\n\t\t\treturn cty.DynamicPseudoType, diags\n\t\t}\n\t}\n\n\tif !sourceVal.IsKnown() {\n\t\t// We can't produce a known result in this case, but we'll still\n\t\t// indicate what the result type would be, allowing any downstream type\n\t\t// checking to proceed.\n\t\tty, tyDiags := resultTy()\n\t\tdiags = append(diags, tyDiags...)\n\t\treturn cty.UnknownVal(ty), diags\n\t}\n\n\tvals := make([]cty.Value, 0, sourceVal.LengthInt())\n\tit := sourceVal.ElementIterator()\n\tif ctx == nil {\n\t\t// we need a context to use our AnonSymbolExpr, so we'll just\n\t\t// make an empty one here to use as a placeholder.\n\t\tctx = ctx.NewChild()\n\t}\n\tisKnown := true\n\tfor it.Next() {\n\t\t_, sourceItem := it.Element()\n\t\te.Item.setValue(ctx, sourceItem)\n\t\tnewItem, itemDiags := e.Each.Value(ctx)\n\t\tdiags = append(diags, itemDiags...)\n\t\tif itemDiags.HasErrors() {\n\t\t\tisKnown = false\n\t\t}\n\t\tvals = append(vals, newItem)\n\t}\n\te.Item.clearValue(ctx) // clean up our temporary value\n\n\tif !isKnown {\n\t\t// We'll ingore the resultTy diagnostics in this case since they\n\t\t// will just be the same errors we saw while iterating above.\n\t\tty, _ := resultTy()\n\t\treturn cty.UnknownVal(ty), diags\n\t}\n\n\tswitch {\n\tcase sourceTy.IsListType() || sourceTy.IsSetType():\n\t\tif len(vals) == 0 {\n\t\t\tty, tyDiags := resultTy()\n\t\t\tdiags = append(diags, tyDiags...)\n\t\t\treturn cty.ListValEmpty(ty.ElementType()), diags\n\t\t}\n\t\treturn cty.ListVal(vals), diags\n\tdefault:\n\t\treturn cty.TupleVal(vals), diags\n\t}\n}\n\nfunc (e *SplatExpr) walkChildNodes(w internalWalkFunc) {\n\tw(e.Source)\n\tw(e.Each)\n}\n\nfunc (e *SplatExpr) Range() hcl.Range {\n\treturn e.SrcRange\n}\n\nfunc (e *SplatExpr) StartRange() hcl.Range {\n\treturn e.MarkerRange\n}\n\n// AnonSymbolExpr is used as a placeholder for a value in an expression that\n// can be applied dynamically to any value at runtime.\n//\n// This is a rather odd, synthetic expression. It is used as part of the\n// representation of splat expressions as a placeholder for the current item\n// being visited in the splat evaluation.\n//\n// AnonSymbolExpr cannot be evaluated in isolation. If its Value is called\n// directly then cty.DynamicVal will be returned. Instead, it is evaluated\n// in terms of another node (i.e. a splat expression) which temporarily\n// assigns it a value.\ntype AnonSymbolExpr struct {\n\tSrcRange hcl.Range\n\n\t// values and its associated lock are used to isolate concurrent\n\t// evaluations of a symbol from one another. It is the calling application's\n\t// responsibility to ensure that the same splat expression is not evalauted\n\t// concurrently within the _same_ EvalContext, but it is fine and safe to\n\t// do cuncurrent evaluations with distinct EvalContexts.\n\tvalues     map[*hcl.EvalContext]cty.Value\n\tvaluesLock sync.RWMutex\n}\n\nfunc (e *AnonSymbolExpr) Value(ctx *hcl.EvalContext) (cty.Value, hcl.Diagnostics) {\n\tif ctx == nil {\n\t\treturn cty.DynamicVal, nil\n\t}\n\n\te.valuesLock.RLock()\n\tdefer e.valuesLock.RUnlock()\n\n\tval, exists := e.values[ctx]\n\tif !exists {\n\t\treturn cty.DynamicVal, nil\n\t}\n\treturn val, nil\n}\n\n// setValue sets a temporary local value for the expression when evaluated\n// in the given context, which must be non-nil.\nfunc (e *AnonSymbolExpr) setValue(ctx *hcl.EvalContext, val cty.Value) {\n\te.valuesLock.Lock()\n\tdefer e.valuesLock.Unlock()\n\n\tif e.values == nil {\n\t\te.values = make(map[*hcl.EvalContext]cty.Value)\n\t}\n\tif ctx == nil {\n\t\tpanic(\"can't setValue for a nil EvalContext\")\n\t}\n\te.values[ctx] = val\n}\n\nfunc (e *AnonSymbolExpr) clearValue(ctx *hcl.EvalContext) {\n\te.valuesLock.Lock()\n\tdefer e.valuesLock.Unlock()\n\n\tif e.values == nil {\n\t\treturn\n\t}\n\tif ctx == nil {\n\t\tpanic(\"can't clearValue for a nil EvalContext\")\n\t}\n\tdelete(e.values, ctx)\n}\n\nfunc (e *AnonSymbolExpr) walkChildNodes(w internalWalkFunc) {\n\t// AnonSymbolExpr is a leaf node in the tree\n}\n\nfunc (e *AnonSymbolExpr) Range() hcl.Range {\n\treturn e.SrcRange\n}\n\nfunc (e *AnonSymbolExpr) StartRange() hcl.Range {\n\treturn e.SrcRange\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcl/hclsyntax/expression_ops.go",
    "content": "package hclsyntax\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/zclconf/go-cty/cty\"\n\t\"github.com/zclconf/go-cty/cty/convert\"\n\t\"github.com/zclconf/go-cty/cty/function\"\n\t\"github.com/zclconf/go-cty/cty/function/stdlib\"\n)\n\ntype Operation struct {\n\tImpl function.Function\n\tType cty.Type\n}\n\nvar (\n\tOpLogicalOr = &Operation{\n\t\tImpl: stdlib.OrFunc,\n\t\tType: cty.Bool,\n\t}\n\tOpLogicalAnd = &Operation{\n\t\tImpl: stdlib.AndFunc,\n\t\tType: cty.Bool,\n\t}\n\tOpLogicalNot = &Operation{\n\t\tImpl: stdlib.NotFunc,\n\t\tType: cty.Bool,\n\t}\n\n\tOpEqual = &Operation{\n\t\tImpl: stdlib.EqualFunc,\n\t\tType: cty.Bool,\n\t}\n\tOpNotEqual = &Operation{\n\t\tImpl: stdlib.NotEqualFunc,\n\t\tType: cty.Bool,\n\t}\n\n\tOpGreaterThan = &Operation{\n\t\tImpl: stdlib.GreaterThanFunc,\n\t\tType: cty.Bool,\n\t}\n\tOpGreaterThanOrEqual = &Operation{\n\t\tImpl: stdlib.GreaterThanOrEqualToFunc,\n\t\tType: cty.Bool,\n\t}\n\tOpLessThan = &Operation{\n\t\tImpl: stdlib.LessThanFunc,\n\t\tType: cty.Bool,\n\t}\n\tOpLessThanOrEqual = &Operation{\n\t\tImpl: stdlib.LessThanOrEqualToFunc,\n\t\tType: cty.Bool,\n\t}\n\n\tOpAdd = &Operation{\n\t\tImpl: stdlib.AddFunc,\n\t\tType: cty.Number,\n\t}\n\tOpSubtract = &Operation{\n\t\tImpl: stdlib.SubtractFunc,\n\t\tType: cty.Number,\n\t}\n\tOpMultiply = &Operation{\n\t\tImpl: stdlib.MultiplyFunc,\n\t\tType: cty.Number,\n\t}\n\tOpDivide = &Operation{\n\t\tImpl: stdlib.DivideFunc,\n\t\tType: cty.Number,\n\t}\n\tOpModulo = &Operation{\n\t\tImpl: stdlib.ModuloFunc,\n\t\tType: cty.Number,\n\t}\n\tOpNegate = &Operation{\n\t\tImpl: stdlib.NegateFunc,\n\t\tType: cty.Number,\n\t}\n)\n\nvar binaryOps []map[TokenType]*Operation\n\nfunc init() {\n\t// This operation table maps from the operator's token type\n\t// to the AST operation type. All expressions produced from\n\t// binary operators are BinaryOp nodes.\n\t//\n\t// Binary operator groups are listed in order of precedence, with\n\t// the *lowest* precedence first. Operators within the same group\n\t// have left-to-right associativity.\n\tbinaryOps = []map[TokenType]*Operation{\n\t\t{\n\t\t\tTokenOr: OpLogicalOr,\n\t\t},\n\t\t{\n\t\t\tTokenAnd: OpLogicalAnd,\n\t\t},\n\t\t{\n\t\t\tTokenEqualOp:  OpEqual,\n\t\t\tTokenNotEqual: OpNotEqual,\n\t\t},\n\t\t{\n\t\t\tTokenGreaterThan:   OpGreaterThan,\n\t\t\tTokenGreaterThanEq: OpGreaterThanOrEqual,\n\t\t\tTokenLessThan:      OpLessThan,\n\t\t\tTokenLessThanEq:    OpLessThanOrEqual,\n\t\t},\n\t\t{\n\t\t\tTokenPlus:  OpAdd,\n\t\t\tTokenMinus: OpSubtract,\n\t\t},\n\t\t{\n\t\t\tTokenStar:    OpMultiply,\n\t\t\tTokenSlash:   OpDivide,\n\t\t\tTokenPercent: OpModulo,\n\t\t},\n\t}\n}\n\ntype BinaryOpExpr struct {\n\tLHS Expression\n\tOp  *Operation\n\tRHS Expression\n\n\tSrcRange hcl.Range\n}\n\nfunc (e *BinaryOpExpr) walkChildNodes(w internalWalkFunc) {\n\tw(e.LHS)\n\tw(e.RHS)\n}\n\nfunc (e *BinaryOpExpr) Value(ctx *hcl.EvalContext) (cty.Value, hcl.Diagnostics) {\n\timpl := e.Op.Impl // assumed to be a function taking exactly two arguments\n\tparams := impl.Params()\n\tlhsParam := params[0]\n\trhsParam := params[1]\n\n\tvar diags hcl.Diagnostics\n\n\tgivenLHSVal, lhsDiags := e.LHS.Value(ctx)\n\tgivenRHSVal, rhsDiags := e.RHS.Value(ctx)\n\tdiags = append(diags, lhsDiags...)\n\tdiags = append(diags, rhsDiags...)\n\n\tlhsVal, err := convert.Convert(givenLHSVal, lhsParam.Type)\n\tif err != nil {\n\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\tSeverity:    hcl.DiagError,\n\t\t\tSummary:     \"Invalid operand\",\n\t\t\tDetail:      fmt.Sprintf(\"Unsuitable value for left operand: %s.\", err),\n\t\t\tSubject:     e.LHS.Range().Ptr(),\n\t\t\tContext:     &e.SrcRange,\n\t\t\tExpression:  e.LHS,\n\t\t\tEvalContext: ctx,\n\t\t})\n\t}\n\trhsVal, err := convert.Convert(givenRHSVal, rhsParam.Type)\n\tif err != nil {\n\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\tSeverity:    hcl.DiagError,\n\t\t\tSummary:     \"Invalid operand\",\n\t\t\tDetail:      fmt.Sprintf(\"Unsuitable value for right operand: %s.\", err),\n\t\t\tSubject:     e.RHS.Range().Ptr(),\n\t\t\tContext:     &e.SrcRange,\n\t\t\tExpression:  e.RHS,\n\t\t\tEvalContext: ctx,\n\t\t})\n\t}\n\n\tif diags.HasErrors() {\n\t\t// Don't actually try the call if we have errors already, since the\n\t\t// this will probably just produce a confusing duplicative diagnostic.\n\t\treturn cty.UnknownVal(e.Op.Type), diags\n\t}\n\n\targs := []cty.Value{lhsVal, rhsVal}\n\tresult, err := impl.Call(args)\n\tif err != nil {\n\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t// FIXME: This diagnostic is useless.\n\t\t\tSeverity:    hcl.DiagError,\n\t\t\tSummary:     \"Operation failed\",\n\t\t\tDetail:      fmt.Sprintf(\"Error during operation: %s.\", err),\n\t\t\tSubject:     &e.SrcRange,\n\t\t\tExpression:  e,\n\t\t\tEvalContext: ctx,\n\t\t})\n\t\treturn cty.UnknownVal(e.Op.Type), diags\n\t}\n\n\treturn result, diags\n}\n\nfunc (e *BinaryOpExpr) Range() hcl.Range {\n\treturn e.SrcRange\n}\n\nfunc (e *BinaryOpExpr) StartRange() hcl.Range {\n\treturn e.LHS.StartRange()\n}\n\ntype UnaryOpExpr struct {\n\tOp  *Operation\n\tVal Expression\n\n\tSrcRange    hcl.Range\n\tSymbolRange hcl.Range\n}\n\nfunc (e *UnaryOpExpr) walkChildNodes(w internalWalkFunc) {\n\tw(e.Val)\n}\n\nfunc (e *UnaryOpExpr) Value(ctx *hcl.EvalContext) (cty.Value, hcl.Diagnostics) {\n\timpl := e.Op.Impl // assumed to be a function taking exactly one argument\n\tparams := impl.Params()\n\tparam := params[0]\n\n\tgivenVal, diags := e.Val.Value(ctx)\n\n\tval, err := convert.Convert(givenVal, param.Type)\n\tif err != nil {\n\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\tSeverity:    hcl.DiagError,\n\t\t\tSummary:     \"Invalid operand\",\n\t\t\tDetail:      fmt.Sprintf(\"Unsuitable value for unary operand: %s.\", err),\n\t\t\tSubject:     e.Val.Range().Ptr(),\n\t\t\tContext:     &e.SrcRange,\n\t\t\tExpression:  e.Val,\n\t\t\tEvalContext: ctx,\n\t\t})\n\t}\n\n\tif diags.HasErrors() {\n\t\t// Don't actually try the call if we have errors already, since the\n\t\t// this will probably just produce a confusing duplicative diagnostic.\n\t\treturn cty.UnknownVal(e.Op.Type), diags\n\t}\n\n\targs := []cty.Value{val}\n\tresult, err := impl.Call(args)\n\tif err != nil {\n\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t// FIXME: This diagnostic is useless.\n\t\t\tSeverity:    hcl.DiagError,\n\t\t\tSummary:     \"Operation failed\",\n\t\t\tDetail:      fmt.Sprintf(\"Error during operation: %s.\", err),\n\t\t\tSubject:     &e.SrcRange,\n\t\t\tExpression:  e,\n\t\t\tEvalContext: ctx,\n\t\t})\n\t\treturn cty.UnknownVal(e.Op.Type), diags\n\t}\n\n\treturn result, diags\n}\n\nfunc (e *UnaryOpExpr) Range() hcl.Range {\n\treturn e.SrcRange\n}\n\nfunc (e *UnaryOpExpr) StartRange() hcl.Range {\n\treturn e.SymbolRange\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcl/hclsyntax/expression_template.go",
    "content": "package hclsyntax\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/zclconf/go-cty/cty\"\n\t\"github.com/zclconf/go-cty/cty/convert\"\n)\n\ntype TemplateExpr struct {\n\tParts []Expression\n\n\tSrcRange hcl.Range\n}\n\nfunc (e *TemplateExpr) walkChildNodes(w internalWalkFunc) {\n\tfor _, part := range e.Parts {\n\t\tw(part)\n\t}\n}\n\nfunc (e *TemplateExpr) Value(ctx *hcl.EvalContext) (cty.Value, hcl.Diagnostics) {\n\tbuf := &bytes.Buffer{}\n\tvar diags hcl.Diagnostics\n\tisKnown := true\n\n\tfor _, part := range e.Parts {\n\t\tpartVal, partDiags := part.Value(ctx)\n\t\tdiags = append(diags, partDiags...)\n\n\t\tif partVal.IsNull() {\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Invalid template interpolation value\",\n\t\t\t\tDetail: fmt.Sprintf(\n\t\t\t\t\t\"The expression result is null. Cannot include a null value in a string template.\",\n\t\t\t\t),\n\t\t\t\tSubject:     part.Range().Ptr(),\n\t\t\t\tContext:     &e.SrcRange,\n\t\t\t\tExpression:  part,\n\t\t\t\tEvalContext: ctx,\n\t\t\t})\n\t\t\tcontinue\n\t\t}\n\n\t\tif !partVal.IsKnown() {\n\t\t\t// If any part is unknown then the result as a whole must be\n\t\t\t// unknown too. We'll keep on processing the rest of the parts\n\t\t\t// anyway, because we want to still emit any diagnostics resulting\n\t\t\t// from evaluating those.\n\t\t\tisKnown = false\n\t\t\tcontinue\n\t\t}\n\n\t\tstrVal, err := convert.Convert(partVal, cty.String)\n\t\tif err != nil {\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Invalid template interpolation value\",\n\t\t\t\tDetail: fmt.Sprintf(\n\t\t\t\t\t\"Cannot include the given value in a string template: %s.\",\n\t\t\t\t\terr.Error(),\n\t\t\t\t),\n\t\t\t\tSubject:     part.Range().Ptr(),\n\t\t\t\tContext:     &e.SrcRange,\n\t\t\t\tExpression:  part,\n\t\t\t\tEvalContext: ctx,\n\t\t\t})\n\t\t\tcontinue\n\t\t}\n\n\t\tbuf.WriteString(strVal.AsString())\n\t}\n\n\tif !isKnown {\n\t\treturn cty.UnknownVal(cty.String), diags\n\t}\n\n\treturn cty.StringVal(buf.String()), diags\n}\n\nfunc (e *TemplateExpr) Range() hcl.Range {\n\treturn e.SrcRange\n}\n\nfunc (e *TemplateExpr) StartRange() hcl.Range {\n\treturn e.Parts[0].StartRange()\n}\n\n// TemplateJoinExpr is used to convert tuples of strings produced by template\n// constructs (i.e. for loops) into flat strings, by converting the values\n// tos strings and joining them. This AST node is not used directly; it's\n// produced as part of the AST of a \"for\" loop in a template.\ntype TemplateJoinExpr struct {\n\tTuple Expression\n}\n\nfunc (e *TemplateJoinExpr) walkChildNodes(w internalWalkFunc) {\n\tw(e.Tuple)\n}\n\nfunc (e *TemplateJoinExpr) Value(ctx *hcl.EvalContext) (cty.Value, hcl.Diagnostics) {\n\ttuple, diags := e.Tuple.Value(ctx)\n\n\tif tuple.IsNull() {\n\t\t// This indicates a bug in the code that constructed the AST.\n\t\tpanic(\"TemplateJoinExpr got null tuple\")\n\t}\n\tif tuple.Type() == cty.DynamicPseudoType {\n\t\treturn cty.UnknownVal(cty.String), diags\n\t}\n\tif !tuple.Type().IsTupleType() {\n\t\t// This indicates a bug in the code that constructed the AST.\n\t\tpanic(\"TemplateJoinExpr got non-tuple tuple\")\n\t}\n\tif !tuple.IsKnown() {\n\t\treturn cty.UnknownVal(cty.String), diags\n\t}\n\n\tbuf := &bytes.Buffer{}\n\tit := tuple.ElementIterator()\n\tfor it.Next() {\n\t\t_, val := it.Element()\n\n\t\tif val.IsNull() {\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Invalid template interpolation value\",\n\t\t\t\tDetail: fmt.Sprintf(\n\t\t\t\t\t\"An iteration result is null. Cannot include a null value in a string template.\",\n\t\t\t\t),\n\t\t\t\tSubject:     e.Range().Ptr(),\n\t\t\t\tExpression:  e,\n\t\t\t\tEvalContext: ctx,\n\t\t\t})\n\t\t\tcontinue\n\t\t}\n\t\tif val.Type() == cty.DynamicPseudoType {\n\t\t\treturn cty.UnknownVal(cty.String), diags\n\t\t}\n\t\tstrVal, err := convert.Convert(val, cty.String)\n\t\tif err != nil {\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Invalid template interpolation value\",\n\t\t\t\tDetail: fmt.Sprintf(\n\t\t\t\t\t\"Cannot include one of the interpolation results into the string template: %s.\",\n\t\t\t\t\terr.Error(),\n\t\t\t\t),\n\t\t\t\tSubject:     e.Range().Ptr(),\n\t\t\t\tExpression:  e,\n\t\t\t\tEvalContext: ctx,\n\t\t\t})\n\t\t\tcontinue\n\t\t}\n\t\tif !val.IsKnown() {\n\t\t\treturn cty.UnknownVal(cty.String), diags\n\t\t}\n\n\t\tbuf.WriteString(strVal.AsString())\n\t}\n\n\treturn cty.StringVal(buf.String()), diags\n}\n\nfunc (e *TemplateJoinExpr) Range() hcl.Range {\n\treturn e.Tuple.Range()\n}\n\nfunc (e *TemplateJoinExpr) StartRange() hcl.Range {\n\treturn e.Tuple.StartRange()\n}\n\n// TemplateWrapExpr is used instead of a TemplateExpr when a template\n// consists _only_ of a single interpolation sequence. In that case, the\n// template's result is the single interpolation's result, verbatim with\n// no type conversions.\ntype TemplateWrapExpr struct {\n\tWrapped Expression\n\n\tSrcRange hcl.Range\n}\n\nfunc (e *TemplateWrapExpr) walkChildNodes(w internalWalkFunc) {\n\tw(e.Wrapped)\n}\n\nfunc (e *TemplateWrapExpr) Value(ctx *hcl.EvalContext) (cty.Value, hcl.Diagnostics) {\n\treturn e.Wrapped.Value(ctx)\n}\n\nfunc (e *TemplateWrapExpr) Range() hcl.Range {\n\treturn e.SrcRange\n}\n\nfunc (e *TemplateWrapExpr) StartRange() hcl.Range {\n\treturn e.SrcRange\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcl/hclsyntax/expression_vars.go",
    "content": "package hclsyntax\n\n// Generated by expression_vars_get.go. DO NOT EDIT.\n// Run 'go generate' on this package to update the set of functions here.\n\nimport (\n\t\"github.com/hashicorp/hcl2/hcl\"\n)\n\nfunc (e *AnonSymbolExpr) Variables() []hcl.Traversal {\n\treturn Variables(e)\n}\n\nfunc (e *BinaryOpExpr) Variables() []hcl.Traversal {\n\treturn Variables(e)\n}\n\nfunc (e *ConditionalExpr) Variables() []hcl.Traversal {\n\treturn Variables(e)\n}\n\nfunc (e *ForExpr) Variables() []hcl.Traversal {\n\treturn Variables(e)\n}\n\nfunc (e *FunctionCallExpr) Variables() []hcl.Traversal {\n\treturn Variables(e)\n}\n\nfunc (e *IndexExpr) Variables() []hcl.Traversal {\n\treturn Variables(e)\n}\n\nfunc (e *LiteralValueExpr) Variables() []hcl.Traversal {\n\treturn Variables(e)\n}\n\nfunc (e *ObjectConsExpr) Variables() []hcl.Traversal {\n\treturn Variables(e)\n}\n\nfunc (e *ObjectConsKeyExpr) Variables() []hcl.Traversal {\n\treturn Variables(e)\n}\n\nfunc (e *RelativeTraversalExpr) Variables() []hcl.Traversal {\n\treturn Variables(e)\n}\n\nfunc (e *ScopeTraversalExpr) Variables() []hcl.Traversal {\n\treturn Variables(e)\n}\n\nfunc (e *SplatExpr) Variables() []hcl.Traversal {\n\treturn Variables(e)\n}\n\nfunc (e *TemplateExpr) Variables() []hcl.Traversal {\n\treturn Variables(e)\n}\n\nfunc (e *TemplateJoinExpr) Variables() []hcl.Traversal {\n\treturn Variables(e)\n}\n\nfunc (e *TemplateWrapExpr) Variables() []hcl.Traversal {\n\treturn Variables(e)\n}\n\nfunc (e *TupleConsExpr) Variables() []hcl.Traversal {\n\treturn Variables(e)\n}\n\nfunc (e *UnaryOpExpr) Variables() []hcl.Traversal {\n\treturn Variables(e)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcl/hclsyntax/expression_vars_gen.go",
    "content": "// This is a 'go generate'-oriented program for producing the \"Variables\"\n// method on every Expression implementation found within this package.\n// All expressions share the same implementation for this method, which\n// just wraps the package-level function \"Variables\" and uses an AST walk\n// to do its work.\n\n// +build ignore\n\npackage main\n\nimport (\n\t\"fmt\"\n\t\"go/ast\"\n\t\"go/parser\"\n\t\"go/token\"\n\t\"os\"\n\t\"sort\"\n)\n\nfunc main() {\n\tfs := token.NewFileSet()\n\tpkgs, err := parser.ParseDir(fs, \".\", nil, 0)\n\tif err != nil {\n\t\tfmt.Fprintf(os.Stderr, \"error while parsing: %s\\n\", err)\n\t\tos.Exit(1)\n\t}\n\tpkg := pkgs[\"hclsyntax\"]\n\n\t// Walk all the files and collect the receivers of any \"Value\" methods\n\t// that look like they are trying to implement Expression.\n\tvar recvs []string\n\tfor _, f := range pkg.Files {\n\t\tfor _, decl := range f.Decls {\n\t\t\tfd, ok := decl.(*ast.FuncDecl)\n\t\t\tif !ok {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif fd.Name.Name != \"Value\" {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tresults := fd.Type.Results.List\n\t\t\tif len(results) != 2 {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tvalResult := fd.Type.Results.List[0].Type.(*ast.SelectorExpr).X.(*ast.Ident)\n\t\t\tdiagsResult := fd.Type.Results.List[1].Type.(*ast.SelectorExpr).X.(*ast.Ident)\n\n\t\t\tif valResult.Name != \"cty\" && diagsResult.Name != \"hcl\" {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// If we have a method called Value and it returns something in\n\t\t\t// \"cty\" followed by something in \"hcl\" then that's specific enough\n\t\t\t// for now, even though this is not 100% exact as a correct\n\t\t\t// implementation of Value.\n\n\t\t\trecvTy := fd.Recv.List[0].Type\n\n\t\t\tswitch rtt := recvTy.(type) {\n\t\t\tcase *ast.StarExpr:\n\t\t\t\tname := rtt.X.(*ast.Ident).Name\n\t\t\t\trecvs = append(recvs, fmt.Sprintf(\"*%s\", name))\n\t\t\tdefault:\n\t\t\t\tfmt.Fprintf(os.Stderr, \"don't know what to do with a %T receiver\\n\", recvTy)\n\t\t\t}\n\n\t\t}\n\t}\n\n\tsort.Strings(recvs)\n\n\tof, err := os.OpenFile(\"expression_vars.go\", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, os.ModePerm)\n\tif err != nil {\n\t\tfmt.Fprintf(os.Stderr, \"failed to open output file: %s\\n\", err)\n\t\tos.Exit(1)\n\t}\n\n\tfmt.Fprint(of, outputPreamble)\n\tfor _, recv := range recvs {\n\t\tfmt.Fprintf(of, outputMethodFmt, recv)\n\t}\n\tfmt.Fprint(of, \"\\n\")\n\n}\n\nconst outputPreamble = `package hclsyntax\n\n// Generated by expression_vars_get.go. DO NOT EDIT.\n// Run 'go generate' on this package to update the set of functions here.\n\nimport (\n\t\"github.com/hashicorp/hcl2/hcl\"\n)`\n\nconst outputMethodFmt = `\n\nfunc (e %s) Variables() []hcl.Traversal {\n\treturn Variables(e)\n}`\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcl/hclsyntax/file.go",
    "content": "package hclsyntax\n\nimport (\n\t\"github.com/hashicorp/hcl2/hcl\"\n)\n\n// File is the top-level object resulting from parsing a configuration file.\ntype File struct {\n\tBody  *Body\n\tBytes []byte\n}\n\nfunc (f *File) AsHCLFile() *hcl.File {\n\treturn &hcl.File{\n\t\tBody:  f.Body,\n\t\tBytes: f.Bytes,\n\n\t\t// TODO: The Nav object, once we have an implementation of it\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcl/hclsyntax/generate.go",
    "content": "package hclsyntax\n\n//go:generate go run expression_vars_gen.go\n//go:generate ruby unicode2ragel.rb --url=http://www.unicode.org/Public/9.0.0/ucd/DerivedCoreProperties.txt -m UnicodeDerived -p ID_Start,ID_Continue -o unicode_derived.rl\n//go:generate ragel -Z scan_tokens.rl\n//go:generate gofmt -w scan_tokens.go\n//go:generate ragel -Z scan_string_lit.rl\n//go:generate gofmt -w scan_string_lit.go\n//go:generate stringer -type TokenType -output token_type_string.go\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcl/hclsyntax/keywords.go",
    "content": "package hclsyntax\n\nimport (\n\t\"bytes\"\n)\n\ntype Keyword []byte\n\nvar forKeyword = Keyword([]byte{'f', 'o', 'r'})\nvar inKeyword = Keyword([]byte{'i', 'n'})\nvar ifKeyword = Keyword([]byte{'i', 'f'})\nvar elseKeyword = Keyword([]byte{'e', 'l', 's', 'e'})\nvar endifKeyword = Keyword([]byte{'e', 'n', 'd', 'i', 'f'})\nvar endforKeyword = Keyword([]byte{'e', 'n', 'd', 'f', 'o', 'r'})\n\nfunc (kw Keyword) TokenMatches(token Token) bool {\n\tif token.Type != TokenIdent {\n\t\treturn false\n\t}\n\treturn bytes.Equal([]byte(kw), token.Bytes)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcl/hclsyntax/navigation.go",
    "content": "package hclsyntax\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\n\t\"github.com/hashicorp/hcl2/hcl\"\n)\n\ntype navigation struct {\n\troot *Body\n}\n\n// Implementation of hcled.ContextString\nfunc (n navigation) ContextString(offset int) string {\n\t// We will walk our top-level blocks until we find one that contains\n\t// the given offset, and then construct a representation of the header\n\t// of the block.\n\n\tvar block *Block\n\tfor _, candidate := range n.root.Blocks {\n\t\tif candidate.Range().ContainsOffset(offset) {\n\t\t\tblock = candidate\n\t\t\tbreak\n\t\t}\n\t}\n\n\tif block == nil {\n\t\treturn \"\"\n\t}\n\n\tif len(block.Labels) == 0 {\n\t\t// Easy case!\n\t\treturn block.Type\n\t}\n\n\tbuf := &bytes.Buffer{}\n\tbuf.WriteString(block.Type)\n\tfor _, label := range block.Labels {\n\t\tfmt.Fprintf(buf, \" %q\", label)\n\t}\n\treturn buf.String()\n}\n\nfunc (n navigation) ContextDefRange(offset int) hcl.Range {\n\tvar block *Block\n\tfor _, candidate := range n.root.Blocks {\n\t\tif candidate.Range().ContainsOffset(offset) {\n\t\t\tblock = candidate\n\t\t\tbreak\n\t\t}\n\t}\n\n\tif block == nil {\n\t\treturn hcl.Range{}\n\t}\n\n\treturn block.DefRange()\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcl/hclsyntax/node.go",
    "content": "package hclsyntax\n\nimport (\n\t\"github.com/hashicorp/hcl2/hcl\"\n)\n\n// Node is the abstract type that every AST node implements.\n//\n// This is a closed interface, so it cannot be implemented from outside of\n// this package.\ntype Node interface {\n\t// This is the mechanism by which the public-facing walk functions\n\t// are implemented. Implementations should call the given function\n\t// for each child node and then replace that node with its return value.\n\t// The return value might just be the same node, for non-transforming\n\t// walks.\n\twalkChildNodes(w internalWalkFunc)\n\n\tRange() hcl.Range\n}\n\ntype internalWalkFunc func(Node)\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcl/hclsyntax/parser.go",
    "content": "package hclsyntax\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"strconv\"\n\t\"unicode/utf8\"\n\n\t\"github.com/apparentlymart/go-textseg/textseg\"\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\ntype parser struct {\n\t*peeker\n\n\t// set to true if any recovery is attempted. The parser can use this\n\t// to attempt to reduce error noise by suppressing \"bad token\" errors\n\t// in recovery mode, assuming that the recovery heuristics have failed\n\t// in this case and left the peeker in a wrong place.\n\trecovery bool\n}\n\nfunc (p *parser) ParseBody(end TokenType) (*Body, hcl.Diagnostics) {\n\tattrs := Attributes{}\n\tblocks := Blocks{}\n\tvar diags hcl.Diagnostics\n\n\tstartRange := p.PrevRange()\n\tvar endRange hcl.Range\n\nToken:\n\tfor {\n\t\tnext := p.Peek()\n\t\tif next.Type == end {\n\t\t\tendRange = p.NextRange()\n\t\t\tp.Read()\n\t\t\tbreak Token\n\t\t}\n\n\t\tswitch next.Type {\n\t\tcase TokenNewline:\n\t\t\tp.Read()\n\t\t\tcontinue\n\t\tcase TokenIdent:\n\t\t\titem, itemDiags := p.ParseBodyItem()\n\t\t\tdiags = append(diags, itemDiags...)\n\t\t\tswitch titem := item.(type) {\n\t\t\tcase *Block:\n\t\t\t\tblocks = append(blocks, titem)\n\t\t\tcase *Attribute:\n\t\t\t\tif existing, exists := attrs[titem.Name]; exists {\n\t\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\t\tSummary:  \"Attribute redefined\",\n\t\t\t\t\t\tDetail: fmt.Sprintf(\n\t\t\t\t\t\t\t\"The argument %q was already set at %s. Each argument may be set only once.\",\n\t\t\t\t\t\t\ttitem.Name, existing.NameRange.String(),\n\t\t\t\t\t\t),\n\t\t\t\t\t\tSubject: &titem.NameRange,\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\tattrs[titem.Name] = titem\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\t// This should never happen for valid input, but may if a\n\t\t\t\t// syntax error was detected in ParseBodyItem that prevented\n\t\t\t\t// it from even producing a partially-broken item. In that\n\t\t\t\t// case, it would've left at least one error in the diagnostics\n\t\t\t\t// slice we already dealt with above.\n\t\t\t\t//\n\t\t\t\t// We'll assume ParseBodyItem attempted recovery to leave\n\t\t\t\t// us in a reasonable position to try parsing the next item.\n\t\t\t\tcontinue\n\t\t\t}\n\t\tdefault:\n\t\t\tbad := p.Read()\n\t\t\tif !p.recovery {\n\t\t\t\tif bad.Type == TokenOQuote {\n\t\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\t\tSummary:  \"Invalid argument name\",\n\t\t\t\t\t\tDetail:   \"Argument names must not be quoted.\",\n\t\t\t\t\t\tSubject:  &bad.Range,\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\t\tSummary:  \"Argument or block definition required\",\n\t\t\t\t\t\tDetail:   \"An argument or block definition is required here.\",\n\t\t\t\t\t\tSubject:  &bad.Range,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t\tendRange = p.PrevRange() // arbitrary, but somewhere inside the body means better diagnostics\n\n\t\t\tp.recover(end) // attempt to recover to the token after the end of this body\n\t\t\tbreak Token\n\t\t}\n\t}\n\n\treturn &Body{\n\t\tAttributes: attrs,\n\t\tBlocks:     blocks,\n\n\t\tSrcRange: hcl.RangeBetween(startRange, endRange),\n\t\tEndRange: hcl.Range{\n\t\t\tFilename: endRange.Filename,\n\t\t\tStart:    endRange.End,\n\t\t\tEnd:      endRange.End,\n\t\t},\n\t}, diags\n}\n\nfunc (p *parser) ParseBodyItem() (Node, hcl.Diagnostics) {\n\tident := p.Read()\n\tif ident.Type != TokenIdent {\n\t\tp.recoverAfterBodyItem()\n\t\treturn nil, hcl.Diagnostics{\n\t\t\t{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Argument or block definition required\",\n\t\t\t\tDetail:   \"An argument or block definition is required here.\",\n\t\t\t\tSubject:  &ident.Range,\n\t\t\t},\n\t\t}\n\t}\n\n\tnext := p.Peek()\n\n\tswitch next.Type {\n\tcase TokenEqual:\n\t\treturn p.finishParsingBodyAttribute(ident, false)\n\tcase TokenOQuote, TokenOBrace, TokenIdent:\n\t\treturn p.finishParsingBodyBlock(ident)\n\tdefault:\n\t\tp.recoverAfterBodyItem()\n\t\treturn nil, hcl.Diagnostics{\n\t\t\t{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Argument or block definition required\",\n\t\t\t\tDetail:   \"An argument or block definition is required here. To set an argument, use the equals sign \\\"=\\\" to introduce the argument value.\",\n\t\t\t\tSubject:  &ident.Range,\n\t\t\t},\n\t\t}\n\t}\n\n\treturn nil, nil\n}\n\n// parseSingleAttrBody is a weird variant of ParseBody that deals with the\n// body of a nested block containing only one attribute value all on a single\n// line, like foo { bar = baz } . It expects to find a single attribute item\n// immediately followed by the end token type with no intervening newlines.\nfunc (p *parser) parseSingleAttrBody(end TokenType) (*Body, hcl.Diagnostics) {\n\tident := p.Read()\n\tif ident.Type != TokenIdent {\n\t\tp.recoverAfterBodyItem()\n\t\treturn nil, hcl.Diagnostics{\n\t\t\t{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Argument or block definition required\",\n\t\t\t\tDetail:   \"An argument or block definition is required here.\",\n\t\t\t\tSubject:  &ident.Range,\n\t\t\t},\n\t\t}\n\t}\n\n\tvar attr *Attribute\n\tvar diags hcl.Diagnostics\n\n\tnext := p.Peek()\n\n\tswitch next.Type {\n\tcase TokenEqual:\n\t\tnode, attrDiags := p.finishParsingBodyAttribute(ident, true)\n\t\tdiags = append(diags, attrDiags...)\n\t\tattr = node.(*Attribute)\n\tcase TokenOQuote, TokenOBrace, TokenIdent:\n\t\tp.recoverAfterBodyItem()\n\t\treturn nil, hcl.Diagnostics{\n\t\t\t{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Argument definition required\",\n\t\t\t\tDetail:   fmt.Sprintf(\"A single-line block definition can contain only a single argument. If you meant to define argument %q, use an equals sign to assign it a value. To define a nested block, place it on a line of its own within its parent block.\", ident.Bytes),\n\t\t\t\tSubject:  hcl.RangeBetween(ident.Range, next.Range).Ptr(),\n\t\t\t},\n\t\t}\n\tdefault:\n\t\tp.recoverAfterBodyItem()\n\t\treturn nil, hcl.Diagnostics{\n\t\t\t{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Argument or block definition required\",\n\t\t\t\tDetail:   \"An argument or block definition is required here. To set an argument, use the equals sign \\\"=\\\" to introduce the argument value.\",\n\t\t\t\tSubject:  &ident.Range,\n\t\t\t},\n\t\t}\n\t}\n\n\treturn &Body{\n\t\tAttributes: Attributes{\n\t\t\tstring(ident.Bytes): attr,\n\t\t},\n\n\t\tSrcRange: attr.SrcRange,\n\t\tEndRange: hcl.Range{\n\t\t\tFilename: attr.SrcRange.Filename,\n\t\t\tStart:    attr.SrcRange.End,\n\t\t\tEnd:      attr.SrcRange.End,\n\t\t},\n\t}, diags\n\n}\n\nfunc (p *parser) finishParsingBodyAttribute(ident Token, singleLine bool) (Node, hcl.Diagnostics) {\n\teqTok := p.Read() // eat equals token\n\tif eqTok.Type != TokenEqual {\n\t\t// should never happen if caller behaves\n\t\tpanic(\"finishParsingBodyAttribute called with next not equals\")\n\t}\n\n\tvar endRange hcl.Range\n\n\texpr, diags := p.ParseExpression()\n\tif p.recovery && diags.HasErrors() {\n\t\t// recovery within expressions tends to be tricky, so we've probably\n\t\t// landed somewhere weird. We'll try to reset to the start of a body\n\t\t// item so parsing can continue.\n\t\tendRange = p.PrevRange()\n\t\tp.recoverAfterBodyItem()\n\t} else {\n\t\tendRange = p.PrevRange()\n\t\tif !singleLine {\n\t\t\tend := p.Peek()\n\t\t\tif end.Type != TokenNewline && end.Type != TokenEOF {\n\t\t\t\tif !p.recovery {\n\t\t\t\t\tsummary := \"Missing newline after argument\"\n\t\t\t\t\tdetail := \"An argument definition must end with a newline.\"\n\n\t\t\t\t\tif end.Type == TokenComma {\n\t\t\t\t\t\tsummary = \"Unexpected comma after argument\"\n\t\t\t\t\t\tdetail = \"Argument definitions must be separated by newlines, not commas. \" + detail\n\t\t\t\t\t}\n\n\t\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\t\tSummary:  summary,\n\t\t\t\t\t\tDetail:   detail,\n\t\t\t\t\t\tSubject:  &end.Range,\n\t\t\t\t\t\tContext:  hcl.RangeBetween(ident.Range, end.Range).Ptr(),\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tendRange = p.PrevRange()\n\t\t\t\tp.recoverAfterBodyItem()\n\t\t\t} else {\n\t\t\t\tendRange = p.PrevRange()\n\t\t\t\tp.Read() // eat newline\n\t\t\t}\n\t\t}\n\t}\n\n\treturn &Attribute{\n\t\tName: string(ident.Bytes),\n\t\tExpr: expr,\n\n\t\tSrcRange:    hcl.RangeBetween(ident.Range, endRange),\n\t\tNameRange:   ident.Range,\n\t\tEqualsRange: eqTok.Range,\n\t}, diags\n}\n\nfunc (p *parser) finishParsingBodyBlock(ident Token) (Node, hcl.Diagnostics) {\n\tvar blockType = string(ident.Bytes)\n\tvar diags hcl.Diagnostics\n\tvar labels []string\n\tvar labelRanges []hcl.Range\n\n\tvar oBrace Token\n\nToken:\n\tfor {\n\t\ttok := p.Peek()\n\n\t\tswitch tok.Type {\n\n\t\tcase TokenOBrace:\n\t\t\toBrace = p.Read()\n\t\t\tbreak Token\n\n\t\tcase TokenOQuote:\n\t\t\tlabel, labelRange, labelDiags := p.parseQuotedStringLiteral()\n\t\t\tdiags = append(diags, labelDiags...)\n\t\t\tlabels = append(labels, label)\n\t\t\tlabelRanges = append(labelRanges, labelRange)\n\t\t\t// parseQuoteStringLiteral recovers up to the closing quote\n\t\t\t// if it encounters problems, so we can continue looking for\n\t\t\t// more labels and eventually the block body even.\n\n\t\tcase TokenIdent:\n\t\t\ttok = p.Read() // eat token\n\t\t\tlabel, labelRange := string(tok.Bytes), tok.Range\n\t\t\tlabels = append(labels, label)\n\t\t\tlabelRanges = append(labelRanges, labelRange)\n\n\t\tdefault:\n\t\t\tswitch tok.Type {\n\t\t\tcase TokenEqual:\n\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\tSummary:  \"Invalid block definition\",\n\t\t\t\t\tDetail:   \"The equals sign \\\"=\\\" indicates an argument definition, and must not be used when defining a block.\",\n\t\t\t\t\tSubject:  &tok.Range,\n\t\t\t\t\tContext:  hcl.RangeBetween(ident.Range, tok.Range).Ptr(),\n\t\t\t\t})\n\t\t\tcase TokenNewline:\n\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\tSummary:  \"Invalid block definition\",\n\t\t\t\t\tDetail:   \"A block definition must have block content delimited by \\\"{\\\" and \\\"}\\\", starting on the same line as the block header.\",\n\t\t\t\t\tSubject:  &tok.Range,\n\t\t\t\t\tContext:  hcl.RangeBetween(ident.Range, tok.Range).Ptr(),\n\t\t\t\t})\n\t\t\tdefault:\n\t\t\t\tif !p.recovery {\n\t\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\t\tSummary:  \"Invalid block definition\",\n\t\t\t\t\t\tDetail:   \"Either a quoted string block label or an opening brace (\\\"{\\\") is expected here.\",\n\t\t\t\t\t\tSubject:  &tok.Range,\n\t\t\t\t\t\tContext:  hcl.RangeBetween(ident.Range, tok.Range).Ptr(),\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tp.recoverAfterBodyItem()\n\n\t\t\treturn &Block{\n\t\t\t\tType:   blockType,\n\t\t\t\tLabels: labels,\n\t\t\t\tBody: &Body{\n\t\t\t\t\tSrcRange: ident.Range,\n\t\t\t\t\tEndRange: ident.Range,\n\t\t\t\t},\n\n\t\t\t\tTypeRange:       ident.Range,\n\t\t\t\tLabelRanges:     labelRanges,\n\t\t\t\tOpenBraceRange:  ident.Range, // placeholder\n\t\t\t\tCloseBraceRange: ident.Range, // placeholder\n\t\t\t}, diags\n\t\t}\n\t}\n\n\t// Once we fall out here, the peeker is pointed just after our opening\n\t// brace, so we can begin our nested body parsing.\n\tvar body *Body\n\tvar bodyDiags hcl.Diagnostics\n\tswitch p.Peek().Type {\n\tcase TokenNewline, TokenEOF, TokenCBrace:\n\t\tbody, bodyDiags = p.ParseBody(TokenCBrace)\n\tdefault:\n\t\t// Special one-line, single-attribute block parsing mode.\n\t\tbody, bodyDiags = p.parseSingleAttrBody(TokenCBrace)\n\t\tswitch p.Peek().Type {\n\t\tcase TokenCBrace:\n\t\t\tp.Read() // the happy path - just consume the closing brace\n\t\tcase TokenComma:\n\t\t\t// User seems to be trying to use the object-constructor\n\t\t\t// comma-separated style, which isn't permitted for blocks.\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Invalid single-argument block definition\",\n\t\t\t\tDetail:   \"Single-line block syntax can include only one argument definition. To define multiple arguments, use the multi-line block syntax with one argument definition per line.\",\n\t\t\t\tSubject:  p.Peek().Range.Ptr(),\n\t\t\t})\n\t\t\tp.recover(TokenCBrace)\n\t\tcase TokenNewline:\n\t\t\t// We don't allow weird mixtures of single and multi-line syntax.\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Invalid single-argument block definition\",\n\t\t\t\tDetail:   \"An argument definition on the same line as its containing block creates a single-line block definition, which must also be closed on the same line. Place the block's closing brace immediately after the argument definition.\",\n\t\t\t\tSubject:  p.Peek().Range.Ptr(),\n\t\t\t})\n\t\t\tp.recover(TokenCBrace)\n\t\tdefault:\n\t\t\t// Some other weird thing is going on. Since we can't guess a likely\n\t\t\t// user intent for this one, we'll skip it if we're already in\n\t\t\t// recovery mode.\n\t\t\tif !p.recovery {\n\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\tSummary:  \"Invalid single-argument block definition\",\n\t\t\t\t\tDetail:   \"A single-line block definition must end with a closing brace immediately after its single argument definition.\",\n\t\t\t\t\tSubject:  p.Peek().Range.Ptr(),\n\t\t\t\t})\n\t\t\t}\n\t\t\tp.recover(TokenCBrace)\n\t\t}\n\t}\n\tdiags = append(diags, bodyDiags...)\n\tcBraceRange := p.PrevRange()\n\n\teol := p.Peek()\n\tif eol.Type == TokenNewline || eol.Type == TokenEOF {\n\t\tp.Read() // eat newline\n\t} else {\n\t\tif !p.recovery {\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Missing newline after block definition\",\n\t\t\t\tDetail:   \"A block definition must end with a newline.\",\n\t\t\t\tSubject:  &eol.Range,\n\t\t\t\tContext:  hcl.RangeBetween(ident.Range, eol.Range).Ptr(),\n\t\t\t})\n\t\t}\n\t\tp.recoverAfterBodyItem()\n\t}\n\n\t// We must never produce a nil body, since the caller may attempt to\n\t// do analysis of a partial result when there's an error, so we'll\n\t// insert a placeholder if we otherwise failed to produce a valid\n\t// body due to one of the syntax error paths above.\n\tif body == nil && diags.HasErrors() {\n\t\tbody = &Body{\n\t\t\tSrcRange: hcl.RangeBetween(oBrace.Range, cBraceRange),\n\t\t\tEndRange: cBraceRange,\n\t\t}\n\t}\n\n\treturn &Block{\n\t\tType:   blockType,\n\t\tLabels: labels,\n\t\tBody:   body,\n\n\t\tTypeRange:       ident.Range,\n\t\tLabelRanges:     labelRanges,\n\t\tOpenBraceRange:  oBrace.Range,\n\t\tCloseBraceRange: cBraceRange,\n\t}, diags\n}\n\nfunc (p *parser) ParseExpression() (Expression, hcl.Diagnostics) {\n\treturn p.parseTernaryConditional()\n}\n\nfunc (p *parser) parseTernaryConditional() (Expression, hcl.Diagnostics) {\n\t// The ternary conditional operator (.. ? .. : ..) behaves somewhat\n\t// like a binary operator except that the \"symbol\" is itself\n\t// an expression enclosed in two punctuation characters.\n\t// The middle expression is parsed as if the ? and : symbols\n\t// were parentheses. The \"rhs\" (the \"false expression\") is then\n\t// treated right-associatively so it behaves similarly to the\n\t// middle in terms of precedence.\n\n\tstartRange := p.NextRange()\n\tvar condExpr, trueExpr, falseExpr Expression\n\tvar diags hcl.Diagnostics\n\n\tcondExpr, condDiags := p.parseBinaryOps(binaryOps)\n\tdiags = append(diags, condDiags...)\n\tif p.recovery && condDiags.HasErrors() {\n\t\treturn condExpr, diags\n\t}\n\n\tquestionMark := p.Peek()\n\tif questionMark.Type != TokenQuestion {\n\t\treturn condExpr, diags\n\t}\n\n\tp.Read() // eat question mark\n\n\ttrueExpr, trueDiags := p.ParseExpression()\n\tdiags = append(diags, trueDiags...)\n\tif p.recovery && trueDiags.HasErrors() {\n\t\treturn condExpr, diags\n\t}\n\n\tcolon := p.Peek()\n\tif colon.Type != TokenColon {\n\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Missing false expression in conditional\",\n\t\t\tDetail:   \"The conditional operator (...?...:...) requires a false expression, delimited by a colon.\",\n\t\t\tSubject:  &colon.Range,\n\t\t\tContext:  hcl.RangeBetween(startRange, colon.Range).Ptr(),\n\t\t})\n\t\treturn condExpr, diags\n\t}\n\n\tp.Read() // eat colon\n\n\tfalseExpr, falseDiags := p.ParseExpression()\n\tdiags = append(diags, falseDiags...)\n\tif p.recovery && falseDiags.HasErrors() {\n\t\treturn condExpr, diags\n\t}\n\n\treturn &ConditionalExpr{\n\t\tCondition:   condExpr,\n\t\tTrueResult:  trueExpr,\n\t\tFalseResult: falseExpr,\n\n\t\tSrcRange: hcl.RangeBetween(startRange, falseExpr.Range()),\n\t}, diags\n}\n\n// parseBinaryOps calls itself recursively to work through all of the\n// operator precedence groups, and then eventually calls parseExpressionTerm\n// for each operand.\nfunc (p *parser) parseBinaryOps(ops []map[TokenType]*Operation) (Expression, hcl.Diagnostics) {\n\tif len(ops) == 0 {\n\t\t// We've run out of operators, so now we'll just try to parse a term.\n\t\treturn p.parseExpressionWithTraversals()\n\t}\n\n\tthisLevel := ops[0]\n\tremaining := ops[1:]\n\n\tvar lhs, rhs Expression\n\tvar operation *Operation\n\tvar diags hcl.Diagnostics\n\n\t// Parse a term that might be the first operand of a binary\n\t// operation or it might just be a standalone term.\n\t// We won't know until we've parsed it and can look ahead\n\t// to see if there's an operator token for this level.\n\tlhs, lhsDiags := p.parseBinaryOps(remaining)\n\tdiags = append(diags, lhsDiags...)\n\tif p.recovery && lhsDiags.HasErrors() {\n\t\treturn lhs, diags\n\t}\n\n\t// We'll keep eating up operators until we run out, so that operators\n\t// with the same precedence will combine in a left-associative manner:\n\t// a+b+c => (a+b)+c, not a+(b+c)\n\t//\n\t// Should we later want to have right-associative operators, a way\n\t// to achieve that would be to call back up to ParseExpression here\n\t// instead of iteratively parsing only the remaining operators.\n\tfor {\n\t\tnext := p.Peek()\n\t\tvar newOp *Operation\n\t\tvar ok bool\n\t\tif newOp, ok = thisLevel[next.Type]; !ok {\n\t\t\tbreak\n\t\t}\n\n\t\t// Are we extending an expression started on the previous iteration?\n\t\tif operation != nil {\n\t\t\tlhs = &BinaryOpExpr{\n\t\t\t\tLHS: lhs,\n\t\t\t\tOp:  operation,\n\t\t\t\tRHS: rhs,\n\n\t\t\t\tSrcRange: hcl.RangeBetween(lhs.Range(), rhs.Range()),\n\t\t\t}\n\t\t}\n\n\t\toperation = newOp\n\t\tp.Read() // eat operator token\n\t\tvar rhsDiags hcl.Diagnostics\n\t\trhs, rhsDiags = p.parseBinaryOps(remaining)\n\t\tdiags = append(diags, rhsDiags...)\n\t\tif p.recovery && rhsDiags.HasErrors() {\n\t\t\treturn lhs, diags\n\t\t}\n\t}\n\n\tif operation == nil {\n\t\treturn lhs, diags\n\t}\n\n\treturn &BinaryOpExpr{\n\t\tLHS: lhs,\n\t\tOp:  operation,\n\t\tRHS: rhs,\n\n\t\tSrcRange: hcl.RangeBetween(lhs.Range(), rhs.Range()),\n\t}, diags\n}\n\nfunc (p *parser) parseExpressionWithTraversals() (Expression, hcl.Diagnostics) {\n\tterm, diags := p.parseExpressionTerm()\n\tret, moreDiags := p.parseExpressionTraversals(term)\n\tdiags = append(diags, moreDiags...)\n\treturn ret, diags\n}\n\nfunc (p *parser) parseExpressionTraversals(from Expression) (Expression, hcl.Diagnostics) {\n\tvar diags hcl.Diagnostics\n\tret := from\n\nTraversal:\n\tfor {\n\t\tnext := p.Peek()\n\n\t\tswitch next.Type {\n\t\tcase TokenDot:\n\t\t\t// Attribute access or splat\n\t\t\tdot := p.Read()\n\t\t\tattrTok := p.Peek()\n\n\t\t\tswitch attrTok.Type {\n\t\t\tcase TokenIdent:\n\t\t\t\tattrTok = p.Read() // eat token\n\t\t\t\tname := string(attrTok.Bytes)\n\t\t\t\trng := hcl.RangeBetween(dot.Range, attrTok.Range)\n\t\t\t\tstep := hcl.TraverseAttr{\n\t\t\t\t\tName:     name,\n\t\t\t\t\tSrcRange: rng,\n\t\t\t\t}\n\n\t\t\t\tret = makeRelativeTraversal(ret, step, rng)\n\n\t\t\tcase TokenNumberLit:\n\t\t\t\t// This is a weird form we inherited from HIL, allowing numbers\n\t\t\t\t// to be used as attributes as a weird way of writing [n].\n\t\t\t\t// This was never actually a first-class thing in HIL, but\n\t\t\t\t// HIL tolerated sequences like .0. in its variable names and\n\t\t\t\t// calling applications like Terraform exploited that to\n\t\t\t\t// introduce indexing syntax where none existed.\n\t\t\t\tnumTok := p.Read() // eat token\n\t\t\t\tattrTok = numTok\n\n\t\t\t\t// This syntax is ambiguous if multiple indices are used in\n\t\t\t\t// succession, like foo.0.1.baz: that actually parses as\n\t\t\t\t// a fractional number 0.1. Since we're only supporting this\n\t\t\t\t// syntax for compatibility with legacy Terraform\n\t\t\t\t// configurations, and Terraform does not tend to have lists\n\t\t\t\t// of lists, we'll choose to reject that here with a helpful\n\t\t\t\t// error message, rather than failing later because the index\n\t\t\t\t// isn't a whole number.\n\t\t\t\tif dotIdx := bytes.IndexByte(numTok.Bytes, '.'); dotIdx >= 0 {\n\t\t\t\t\tfirst := numTok.Bytes[:dotIdx]\n\t\t\t\t\tsecond := numTok.Bytes[dotIdx+1:]\n\t\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\t\tSummary:  \"Invalid legacy index syntax\",\n\t\t\t\t\t\tDetail:   fmt.Sprintf(\"When using the legacy index syntax, chaining two indexes together is not permitted. Use the proper index syntax instead, like [%s][%s].\", first, second),\n\t\t\t\t\t\tSubject:  &attrTok.Range,\n\t\t\t\t\t})\n\t\t\t\t\trng := hcl.RangeBetween(dot.Range, numTok.Range)\n\t\t\t\t\tstep := hcl.TraverseIndex{\n\t\t\t\t\t\tKey:      cty.DynamicVal,\n\t\t\t\t\t\tSrcRange: rng,\n\t\t\t\t\t}\n\t\t\t\t\tret = makeRelativeTraversal(ret, step, rng)\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tnumVal, numDiags := p.numberLitValue(numTok)\n\t\t\t\tdiags = append(diags, numDiags...)\n\n\t\t\t\trng := hcl.RangeBetween(dot.Range, numTok.Range)\n\t\t\t\tstep := hcl.TraverseIndex{\n\t\t\t\t\tKey:      numVal,\n\t\t\t\t\tSrcRange: rng,\n\t\t\t\t}\n\n\t\t\t\tret = makeRelativeTraversal(ret, step, rng)\n\n\t\t\tcase TokenStar:\n\t\t\t\t// \"Attribute-only\" splat expression.\n\t\t\t\t// (This is a kinda weird construct inherited from HIL, which\n\t\t\t\t// behaves a bit like a [*] splat except that it is only able\n\t\t\t\t// to do attribute traversals into each of its elements,\n\t\t\t\t// whereas foo[*] can support _any_ traversal.\n\t\t\t\tmarker := p.Read() // eat star\n\t\t\t\ttrav := make(hcl.Traversal, 0, 1)\n\t\t\t\tvar firstRange, lastRange hcl.Range\n\t\t\t\tfirstRange = p.NextRange()\n\t\t\t\tfor p.Peek().Type == TokenDot {\n\t\t\t\t\tdot := p.Read()\n\n\t\t\t\t\tif p.Peek().Type == TokenNumberLit {\n\t\t\t\t\t\t// Continuing the \"weird stuff inherited from HIL\"\n\t\t\t\t\t\t// theme, we also allow numbers as attribute names\n\t\t\t\t\t\t// inside splats and interpret them as indexing\n\t\t\t\t\t\t// into a list, for expressions like:\n\t\t\t\t\t\t// foo.bar.*.baz.0.foo\n\t\t\t\t\t\tnumTok := p.Read()\n\n\t\t\t\t\t\t// Weird special case if the user writes something\n\t\t\t\t\t\t// like foo.bar.*.baz.0.0.foo, where 0.0 parses\n\t\t\t\t\t\t// as a number.\n\t\t\t\t\t\tif dotIdx := bytes.IndexByte(numTok.Bytes, '.'); dotIdx >= 0 {\n\t\t\t\t\t\t\tfirst := numTok.Bytes[:dotIdx]\n\t\t\t\t\t\t\tsecond := numTok.Bytes[dotIdx+1:]\n\t\t\t\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\t\t\t\tSummary:  \"Invalid legacy index syntax\",\n\t\t\t\t\t\t\t\tDetail:   fmt.Sprintf(\"When using the legacy index syntax, chaining two indexes together is not permitted. Use the proper index syntax with a full splat expression [*] instead, like [%s][%s].\", first, second),\n\t\t\t\t\t\t\t\tSubject:  &attrTok.Range,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\ttrav = append(trav, hcl.TraverseIndex{\n\t\t\t\t\t\t\t\tKey:      cty.DynamicVal,\n\t\t\t\t\t\t\t\tSrcRange: hcl.RangeBetween(dot.Range, numTok.Range),\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\tlastRange = numTok.Range\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tnumVal, numDiags := p.numberLitValue(numTok)\n\t\t\t\t\t\tdiags = append(diags, numDiags...)\n\t\t\t\t\t\ttrav = append(trav, hcl.TraverseIndex{\n\t\t\t\t\t\t\tKey:      numVal,\n\t\t\t\t\t\t\tSrcRange: hcl.RangeBetween(dot.Range, numTok.Range),\n\t\t\t\t\t\t})\n\t\t\t\t\t\tlastRange = numTok.Range\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\n\t\t\t\t\tif p.Peek().Type != TokenIdent {\n\t\t\t\t\t\tif !p.recovery {\n\t\t\t\t\t\t\tif p.Peek().Type == TokenStar {\n\t\t\t\t\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\t\t\t\t\tSummary:  \"Nested splat expression not allowed\",\n\t\t\t\t\t\t\t\t\tDetail:   \"A splat expression (*) cannot be used inside another attribute-only splat expression.\",\n\t\t\t\t\t\t\t\t\tSubject:  p.Peek().Range.Ptr(),\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\t\t\t\t\tSummary:  \"Invalid attribute name\",\n\t\t\t\t\t\t\t\t\tDetail:   \"An attribute name is required after a dot.\",\n\t\t\t\t\t\t\t\t\tSubject:  &attrTok.Range,\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tp.setRecovery()\n\t\t\t\t\t\tcontinue Traversal\n\t\t\t\t\t}\n\n\t\t\t\t\tattrTok := p.Read()\n\t\t\t\t\ttrav = append(trav, hcl.TraverseAttr{\n\t\t\t\t\t\tName:     string(attrTok.Bytes),\n\t\t\t\t\t\tSrcRange: hcl.RangeBetween(dot.Range, attrTok.Range),\n\t\t\t\t\t})\n\t\t\t\t\tlastRange = attrTok.Range\n\t\t\t\t}\n\n\t\t\t\titemExpr := &AnonSymbolExpr{\n\t\t\t\t\tSrcRange: hcl.RangeBetween(dot.Range, marker.Range),\n\t\t\t\t}\n\t\t\t\tvar travExpr Expression\n\t\t\t\tif len(trav) == 0 {\n\t\t\t\t\ttravExpr = itemExpr\n\t\t\t\t} else {\n\t\t\t\t\ttravExpr = &RelativeTraversalExpr{\n\t\t\t\t\t\tSource:    itemExpr,\n\t\t\t\t\t\tTraversal: trav,\n\t\t\t\t\t\tSrcRange:  hcl.RangeBetween(firstRange, lastRange),\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tret = &SplatExpr{\n\t\t\t\t\tSource: ret,\n\t\t\t\t\tEach:   travExpr,\n\t\t\t\t\tItem:   itemExpr,\n\n\t\t\t\t\tSrcRange:    hcl.RangeBetween(dot.Range, lastRange),\n\t\t\t\t\tMarkerRange: hcl.RangeBetween(dot.Range, marker.Range),\n\t\t\t\t}\n\n\t\t\tdefault:\n\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\tSummary:  \"Invalid attribute name\",\n\t\t\t\t\tDetail:   \"An attribute name is required after a dot.\",\n\t\t\t\t\tSubject:  &attrTok.Range,\n\t\t\t\t})\n\t\t\t\t// This leaves the peeker in a bad place, so following items\n\t\t\t\t// will probably be misparsed until we hit something that\n\t\t\t\t// allows us to re-sync.\n\t\t\t\t//\n\t\t\t\t// We will probably need to do something better here eventually\n\t\t\t\t// in order to support autocomplete triggered by typing a\n\t\t\t\t// period.\n\t\t\t\tp.setRecovery()\n\t\t\t}\n\n\t\tcase TokenOBrack:\n\t\t\t// Indexing of a collection.\n\t\t\t// This may or may not be a hcl.Traverser, depending on whether\n\t\t\t// the key value is something constant.\n\n\t\t\topen := p.Read()\n\t\t\tswitch p.Peek().Type {\n\t\t\tcase TokenStar:\n\t\t\t\t// This is a full splat expression, like foo[*], which consumes\n\t\t\t\t// the rest of the traversal steps after it using a recursive\n\t\t\t\t// call to this function.\n\t\t\t\tp.Read() // consume star\n\t\t\t\tclose := p.Read()\n\t\t\t\tif close.Type != TokenCBrack && !p.recovery {\n\t\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\t\tSummary:  \"Missing close bracket on splat index\",\n\t\t\t\t\t\tDetail:   \"The star for a full splat operator must be immediately followed by a closing bracket (\\\"]\\\").\",\n\t\t\t\t\t\tSubject:  &close.Range,\n\t\t\t\t\t})\n\t\t\t\t\tclose = p.recover(TokenCBrack)\n\t\t\t\t}\n\t\t\t\t// Splat expressions use a special \"anonymous symbol\"  as a\n\t\t\t\t// placeholder in an expression to be evaluated once for each\n\t\t\t\t// item in the source expression.\n\t\t\t\titemExpr := &AnonSymbolExpr{\n\t\t\t\t\tSrcRange: hcl.RangeBetween(open.Range, close.Range),\n\t\t\t\t}\n\t\t\t\t// Now we'll recursively call this same function to eat any\n\t\t\t\t// remaining traversal steps against the anonymous symbol.\n\t\t\t\ttravExpr, nestedDiags := p.parseExpressionTraversals(itemExpr)\n\t\t\t\tdiags = append(diags, nestedDiags...)\n\n\t\t\t\tret = &SplatExpr{\n\t\t\t\t\tSource: ret,\n\t\t\t\t\tEach:   travExpr,\n\t\t\t\t\tItem:   itemExpr,\n\n\t\t\t\t\tSrcRange:    hcl.RangeBetween(open.Range, travExpr.Range()),\n\t\t\t\t\tMarkerRange: hcl.RangeBetween(open.Range, close.Range),\n\t\t\t\t}\n\n\t\t\tdefault:\n\n\t\t\t\tvar close Token\n\t\t\t\tp.PushIncludeNewlines(false) // arbitrary newlines allowed in brackets\n\t\t\t\tkeyExpr, keyDiags := p.ParseExpression()\n\t\t\t\tdiags = append(diags, keyDiags...)\n\t\t\t\tif p.recovery && keyDiags.HasErrors() {\n\t\t\t\t\tclose = p.recover(TokenCBrack)\n\t\t\t\t} else {\n\t\t\t\t\tclose = p.Read()\n\t\t\t\t\tif close.Type != TokenCBrack && !p.recovery {\n\t\t\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\t\t\tSummary:  \"Missing close bracket on index\",\n\t\t\t\t\t\t\tDetail:   \"The index operator must end with a closing bracket (\\\"]\\\").\",\n\t\t\t\t\t\t\tSubject:  &close.Range,\n\t\t\t\t\t\t})\n\t\t\t\t\t\tclose = p.recover(TokenCBrack)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tp.PopIncludeNewlines()\n\n\t\t\t\tif lit, isLit := keyExpr.(*LiteralValueExpr); isLit {\n\t\t\t\t\tlitKey, _ := lit.Value(nil)\n\t\t\t\t\trng := hcl.RangeBetween(open.Range, close.Range)\n\t\t\t\t\tstep := hcl.TraverseIndex{\n\t\t\t\t\t\tKey:      litKey,\n\t\t\t\t\t\tSrcRange: rng,\n\t\t\t\t\t}\n\t\t\t\t\tret = makeRelativeTraversal(ret, step, rng)\n\t\t\t\t} else {\n\t\t\t\t\trng := hcl.RangeBetween(open.Range, close.Range)\n\t\t\t\t\tret = &IndexExpr{\n\t\t\t\t\t\tCollection: ret,\n\t\t\t\t\t\tKey:        keyExpr,\n\n\t\t\t\t\t\tSrcRange:  rng,\n\t\t\t\t\t\tOpenRange: open.Range,\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\tdefault:\n\t\t\tbreak Traversal\n\t\t}\n\t}\n\n\treturn ret, diags\n}\n\n// makeRelativeTraversal takes an expression and a traverser and returns\n// a traversal expression that combines the two. If the given expression\n// is already a traversal, it is extended in place (mutating it) and\n// returned. If it isn't, a new RelativeTraversalExpr is created and returned.\nfunc makeRelativeTraversal(expr Expression, next hcl.Traverser, rng hcl.Range) Expression {\n\tswitch texpr := expr.(type) {\n\tcase *ScopeTraversalExpr:\n\t\ttexpr.Traversal = append(texpr.Traversal, next)\n\t\ttexpr.SrcRange = hcl.RangeBetween(texpr.SrcRange, rng)\n\t\treturn texpr\n\tcase *RelativeTraversalExpr:\n\t\ttexpr.Traversal = append(texpr.Traversal, next)\n\t\ttexpr.SrcRange = hcl.RangeBetween(texpr.SrcRange, rng)\n\t\treturn texpr\n\tdefault:\n\t\treturn &RelativeTraversalExpr{\n\t\t\tSource:    expr,\n\t\t\tTraversal: hcl.Traversal{next},\n\t\t\tSrcRange:  rng,\n\t\t}\n\t}\n}\n\nfunc (p *parser) parseExpressionTerm() (Expression, hcl.Diagnostics) {\n\tstart := p.Peek()\n\n\tswitch start.Type {\n\tcase TokenOParen:\n\t\tp.Read() // eat open paren\n\n\t\tp.PushIncludeNewlines(false)\n\n\t\texpr, diags := p.ParseExpression()\n\t\tif diags.HasErrors() {\n\t\t\t// attempt to place the peeker after our closing paren\n\t\t\t// before we return, so that the next parser has some\n\t\t\t// chance of finding a valid expression.\n\t\t\tp.recover(TokenCParen)\n\t\t\tp.PopIncludeNewlines()\n\t\t\treturn expr, diags\n\t\t}\n\n\t\tclose := p.Peek()\n\t\tif close.Type != TokenCParen {\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Unbalanced parentheses\",\n\t\t\t\tDetail:   \"Expected a closing parenthesis to terminate the expression.\",\n\t\t\t\tSubject:  &close.Range,\n\t\t\t\tContext:  hcl.RangeBetween(start.Range, close.Range).Ptr(),\n\t\t\t})\n\t\t\tp.setRecovery()\n\t\t}\n\n\t\tp.Read() // eat closing paren\n\t\tp.PopIncludeNewlines()\n\n\t\treturn expr, diags\n\n\tcase TokenNumberLit:\n\t\ttok := p.Read() // eat number token\n\n\t\tnumVal, diags := p.numberLitValue(tok)\n\t\treturn &LiteralValueExpr{\n\t\t\tVal:      numVal,\n\t\t\tSrcRange: tok.Range,\n\t\t}, diags\n\n\tcase TokenIdent:\n\t\ttok := p.Read() // eat identifier token\n\n\t\tif p.Peek().Type == TokenOParen {\n\t\t\treturn p.finishParsingFunctionCall(tok)\n\t\t}\n\n\t\tname := string(tok.Bytes)\n\t\tswitch name {\n\t\tcase \"true\":\n\t\t\treturn &LiteralValueExpr{\n\t\t\t\tVal:      cty.True,\n\t\t\t\tSrcRange: tok.Range,\n\t\t\t}, nil\n\t\tcase \"false\":\n\t\t\treturn &LiteralValueExpr{\n\t\t\t\tVal:      cty.False,\n\t\t\t\tSrcRange: tok.Range,\n\t\t\t}, nil\n\t\tcase \"null\":\n\t\t\treturn &LiteralValueExpr{\n\t\t\t\tVal:      cty.NullVal(cty.DynamicPseudoType),\n\t\t\t\tSrcRange: tok.Range,\n\t\t\t}, nil\n\t\tdefault:\n\t\t\treturn &ScopeTraversalExpr{\n\t\t\t\tTraversal: hcl.Traversal{\n\t\t\t\t\thcl.TraverseRoot{\n\t\t\t\t\t\tName:     name,\n\t\t\t\t\t\tSrcRange: tok.Range,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tSrcRange: tok.Range,\n\t\t\t}, nil\n\t\t}\n\n\tcase TokenOQuote, TokenOHeredoc:\n\t\topen := p.Read() // eat opening marker\n\t\tcloser := p.oppositeBracket(open.Type)\n\t\texprs, passthru, _, diags := p.parseTemplateInner(closer, tokenOpensFlushHeredoc(open))\n\n\t\tcloseRange := p.PrevRange()\n\n\t\tif passthru {\n\t\t\tif len(exprs) != 1 {\n\t\t\t\tpanic(\"passthru set with len(exprs) != 1\")\n\t\t\t}\n\t\t\treturn &TemplateWrapExpr{\n\t\t\t\tWrapped:  exprs[0],\n\t\t\t\tSrcRange: hcl.RangeBetween(open.Range, closeRange),\n\t\t\t}, diags\n\t\t}\n\n\t\treturn &TemplateExpr{\n\t\t\tParts:    exprs,\n\t\t\tSrcRange: hcl.RangeBetween(open.Range, closeRange),\n\t\t}, diags\n\n\tcase TokenMinus:\n\t\ttok := p.Read() // eat minus token\n\n\t\t// Important to use parseExpressionWithTraversals rather than parseExpression\n\t\t// here, otherwise we can capture a following binary expression into\n\t\t// our negation.\n\t\t// e.g. -46+5 should parse as (-46)+5, not -(46+5)\n\t\toperand, diags := p.parseExpressionWithTraversals()\n\t\treturn &UnaryOpExpr{\n\t\t\tOp:  OpNegate,\n\t\t\tVal: operand,\n\n\t\t\tSrcRange:    hcl.RangeBetween(tok.Range, operand.Range()),\n\t\t\tSymbolRange: tok.Range,\n\t\t}, diags\n\n\tcase TokenBang:\n\t\ttok := p.Read() // eat bang token\n\n\t\t// Important to use parseExpressionWithTraversals rather than parseExpression\n\t\t// here, otherwise we can capture a following binary expression into\n\t\t// our negation.\n\t\toperand, diags := p.parseExpressionWithTraversals()\n\t\treturn &UnaryOpExpr{\n\t\t\tOp:  OpLogicalNot,\n\t\t\tVal: operand,\n\n\t\t\tSrcRange:    hcl.RangeBetween(tok.Range, operand.Range()),\n\t\t\tSymbolRange: tok.Range,\n\t\t}, diags\n\n\tcase TokenOBrack:\n\t\treturn p.parseTupleCons()\n\n\tcase TokenOBrace:\n\t\treturn p.parseObjectCons()\n\n\tdefault:\n\t\tvar diags hcl.Diagnostics\n\t\tif !p.recovery {\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Invalid expression\",\n\t\t\t\tDetail:   \"Expected the start of an expression, but found an invalid expression token.\",\n\t\t\t\tSubject:  &start.Range,\n\t\t\t})\n\t\t}\n\t\tp.setRecovery()\n\n\t\t// Return a placeholder so that the AST is still structurally sound\n\t\t// even in the presence of parse errors.\n\t\treturn &LiteralValueExpr{\n\t\t\tVal:      cty.DynamicVal,\n\t\t\tSrcRange: start.Range,\n\t\t}, diags\n\t}\n}\n\nfunc (p *parser) numberLitValue(tok Token) (cty.Value, hcl.Diagnostics) {\n\t// The cty.ParseNumberVal is always the same behavior as converting a\n\t// string to a number, ensuring we always interpret decimal numbers in\n\t// the same way.\n\tnumVal, err := cty.ParseNumberVal(string(tok.Bytes))\n\tif err != nil {\n\t\tret := cty.UnknownVal(cty.Number)\n\t\treturn ret, hcl.Diagnostics{\n\t\t\t{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Invalid number literal\",\n\t\t\t\t// FIXME: not a very good error message, but convert only\n\t\t\t\t// gives us \"a number is required\", so not much help either.\n\t\t\t\tDetail:  \"Failed to recognize the value of this number literal.\",\n\t\t\t\tSubject: &tok.Range,\n\t\t\t},\n\t\t}\n\t}\n\treturn numVal, nil\n}\n\n// finishParsingFunctionCall parses a function call assuming that the function\n// name was already read, and so the peeker should be pointing at the opening\n// parenthesis after the name.\nfunc (p *parser) finishParsingFunctionCall(name Token) (Expression, hcl.Diagnostics) {\n\topenTok := p.Read()\n\tif openTok.Type != TokenOParen {\n\t\t// should never happen if callers behave\n\t\tpanic(\"finishParsingFunctionCall called with non-parenthesis as next token\")\n\t}\n\n\tvar args []Expression\n\tvar diags hcl.Diagnostics\n\tvar expandFinal bool\n\tvar closeTok Token\n\n\t// Arbitrary newlines are allowed inside the function call parentheses.\n\tp.PushIncludeNewlines(false)\n\nToken:\n\tfor {\n\t\ttok := p.Peek()\n\n\t\tif tok.Type == TokenCParen {\n\t\t\tcloseTok = p.Read() // eat closing paren\n\t\t\tbreak Token\n\t\t}\n\n\t\targ, argDiags := p.ParseExpression()\n\t\targs = append(args, arg)\n\t\tdiags = append(diags, argDiags...)\n\t\tif p.recovery && argDiags.HasErrors() {\n\t\t\t// if there was a parse error in the argument then we've\n\t\t\t// probably been left in a weird place in the token stream,\n\t\t\t// so we'll bail out with a partial argument list.\n\t\t\tp.recover(TokenCParen)\n\t\t\tbreak Token\n\t\t}\n\n\t\tsep := p.Read()\n\t\tif sep.Type == TokenCParen {\n\t\t\tcloseTok = sep\n\t\t\tbreak Token\n\t\t}\n\n\t\tif sep.Type == TokenEllipsis {\n\t\t\texpandFinal = true\n\n\t\t\tif p.Peek().Type != TokenCParen {\n\t\t\t\tif !p.recovery {\n\t\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\t\tSummary:  \"Missing closing parenthesis\",\n\t\t\t\t\t\tDetail:   \"An expanded function argument (with ...) must be immediately followed by closing parentheses.\",\n\t\t\t\t\t\tSubject:  &sep.Range,\n\t\t\t\t\t\tContext:  hcl.RangeBetween(name.Range, sep.Range).Ptr(),\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tcloseTok = p.recover(TokenCParen)\n\t\t\t} else {\n\t\t\t\tcloseTok = p.Read() // eat closing paren\n\t\t\t}\n\t\t\tbreak Token\n\t\t}\n\n\t\tif sep.Type != TokenComma {\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Missing argument separator\",\n\t\t\t\tDetail:   \"A comma is required to separate each function argument from the next.\",\n\t\t\t\tSubject:  &sep.Range,\n\t\t\t\tContext:  hcl.RangeBetween(name.Range, sep.Range).Ptr(),\n\t\t\t})\n\t\t\tcloseTok = p.recover(TokenCParen)\n\t\t\tbreak Token\n\t\t}\n\n\t\tif p.Peek().Type == TokenCParen {\n\t\t\t// A trailing comma after the last argument gets us in here.\n\t\t\tcloseTok = p.Read() // eat closing paren\n\t\t\tbreak Token\n\t\t}\n\n\t}\n\n\tp.PopIncludeNewlines()\n\n\treturn &FunctionCallExpr{\n\t\tName: string(name.Bytes),\n\t\tArgs: args,\n\n\t\tExpandFinal: expandFinal,\n\n\t\tNameRange:       name.Range,\n\t\tOpenParenRange:  openTok.Range,\n\t\tCloseParenRange: closeTok.Range,\n\t}, diags\n}\n\nfunc (p *parser) parseTupleCons() (Expression, hcl.Diagnostics) {\n\topen := p.Read()\n\tif open.Type != TokenOBrack {\n\t\t// Should never happen if callers are behaving\n\t\tpanic(\"parseTupleCons called without peeker pointing to open bracket\")\n\t}\n\n\tp.PushIncludeNewlines(false)\n\tdefer p.PopIncludeNewlines()\n\n\tif forKeyword.TokenMatches(p.Peek()) {\n\t\treturn p.finishParsingForExpr(open)\n\t}\n\n\tvar close Token\n\n\tvar diags hcl.Diagnostics\n\tvar exprs []Expression\n\n\tfor {\n\t\tnext := p.Peek()\n\t\tif next.Type == TokenCBrack {\n\t\t\tclose = p.Read() // eat closer\n\t\t\tbreak\n\t\t}\n\n\t\texpr, exprDiags := p.ParseExpression()\n\t\texprs = append(exprs, expr)\n\t\tdiags = append(diags, exprDiags...)\n\n\t\tif p.recovery && exprDiags.HasErrors() {\n\t\t\t// If expression parsing failed then we are probably in a strange\n\t\t\t// place in the token stream, so we'll bail out and try to reset\n\t\t\t// to after our closing bracket to allow parsing to continue.\n\t\t\tclose = p.recover(TokenCBrack)\n\t\t\tbreak\n\t\t}\n\n\t\tnext = p.Peek()\n\t\tif next.Type == TokenCBrack {\n\t\t\tclose = p.Read() // eat closer\n\t\t\tbreak\n\t\t}\n\n\t\tif next.Type != TokenComma {\n\t\t\tif !p.recovery {\n\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\tSummary:  \"Missing item separator\",\n\t\t\t\t\tDetail:   \"Expected a comma to mark the beginning of the next item.\",\n\t\t\t\t\tSubject:  &next.Range,\n\t\t\t\t\tContext:  hcl.RangeBetween(open.Range, next.Range).Ptr(),\n\t\t\t\t})\n\t\t\t}\n\t\t\tclose = p.recover(TokenCBrack)\n\t\t\tbreak\n\t\t}\n\n\t\tp.Read() // eat comma\n\n\t}\n\n\treturn &TupleConsExpr{\n\t\tExprs: exprs,\n\n\t\tSrcRange:  hcl.RangeBetween(open.Range, close.Range),\n\t\tOpenRange: open.Range,\n\t}, diags\n}\n\nfunc (p *parser) parseObjectCons() (Expression, hcl.Diagnostics) {\n\topen := p.Read()\n\tif open.Type != TokenOBrace {\n\t\t// Should never happen if callers are behaving\n\t\tpanic(\"parseObjectCons called without peeker pointing to open brace\")\n\t}\n\n\t// We must temporarily stop looking at newlines here while we check for\n\t// a \"for\" keyword, since for expressions are _not_ newline-sensitive,\n\t// even though object constructors are.\n\tp.PushIncludeNewlines(false)\n\tisFor := forKeyword.TokenMatches(p.Peek())\n\tp.PopIncludeNewlines()\n\tif isFor {\n\t\treturn p.finishParsingForExpr(open)\n\t}\n\n\tp.PushIncludeNewlines(true)\n\tdefer p.PopIncludeNewlines()\n\n\tvar close Token\n\n\tvar diags hcl.Diagnostics\n\tvar items []ObjectConsItem\n\n\tfor {\n\t\tnext := p.Peek()\n\t\tif next.Type == TokenNewline {\n\t\t\tp.Read() // eat newline\n\t\t\tcontinue\n\t\t}\n\n\t\tif next.Type == TokenCBrace {\n\t\t\tclose = p.Read() // eat closer\n\t\t\tbreak\n\t\t}\n\n\t\tvar key Expression\n\t\tvar keyDiags hcl.Diagnostics\n\t\tkey, keyDiags = p.ParseExpression()\n\t\tdiags = append(diags, keyDiags...)\n\n\t\tif p.recovery && keyDiags.HasErrors() {\n\t\t\t// If expression parsing failed then we are probably in a strange\n\t\t\t// place in the token stream, so we'll bail out and try to reset\n\t\t\t// to after our closing brace to allow parsing to continue.\n\t\t\tclose = p.recover(TokenCBrace)\n\t\t\tbreak\n\t\t}\n\n\t\t// We wrap up the key expression in a special wrapper that deals\n\t\t// with our special case that naked identifiers as object keys\n\t\t// are interpreted as literal strings.\n\t\tkey = &ObjectConsKeyExpr{Wrapped: key}\n\n\t\tnext = p.Peek()\n\t\tif next.Type != TokenEqual && next.Type != TokenColon {\n\t\t\tif !p.recovery {\n\t\t\t\tswitch next.Type {\n\t\t\t\tcase TokenNewline, TokenComma:\n\t\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\t\tSummary:  \"Missing attribute value\",\n\t\t\t\t\t\tDetail:   \"Expected an attribute value, introduced by an equals sign (\\\"=\\\").\",\n\t\t\t\t\t\tSubject:  &next.Range,\n\t\t\t\t\t\tContext:  hcl.RangeBetween(open.Range, next.Range).Ptr(),\n\t\t\t\t\t})\n\t\t\t\tcase TokenIdent:\n\t\t\t\t\t// Although this might just be a plain old missing equals\n\t\t\t\t\t// sign before a reference, one way to get here is to try\n\t\t\t\t\t// to write an attribute name containing a period followed\n\t\t\t\t\t// by a digit, which was valid in HCL1, like this:\n\t\t\t\t\t//     foo1.2_bar = \"baz\"\n\t\t\t\t\t// We can't know exactly what the user intended here, but\n\t\t\t\t\t// we'll augment our message with an extra hint in this case\n\t\t\t\t\t// in case it is helpful.\n\t\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\t\tSummary:  \"Missing key/value separator\",\n\t\t\t\t\t\tDetail:   \"Expected an equals sign (\\\"=\\\") to mark the beginning of the attribute value. If you intended to given an attribute name containing periods or spaces, write the name in quotes to create a string literal.\",\n\t\t\t\t\t\tSubject:  &next.Range,\n\t\t\t\t\t\tContext:  hcl.RangeBetween(open.Range, next.Range).Ptr(),\n\t\t\t\t\t})\n\t\t\t\tdefault:\n\t\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\t\tSummary:  \"Missing key/value separator\",\n\t\t\t\t\t\tDetail:   \"Expected an equals sign (\\\"=\\\") to mark the beginning of the attribute value.\",\n\t\t\t\t\t\tSubject:  &next.Range,\n\t\t\t\t\t\tContext:  hcl.RangeBetween(open.Range, next.Range).Ptr(),\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t\tclose = p.recover(TokenCBrace)\n\t\t\tbreak\n\t\t}\n\n\t\tp.Read() // eat equals sign or colon\n\n\t\tvalue, valueDiags := p.ParseExpression()\n\t\tdiags = append(diags, valueDiags...)\n\n\t\tif p.recovery && valueDiags.HasErrors() {\n\t\t\t// If expression parsing failed then we are probably in a strange\n\t\t\t// place in the token stream, so we'll bail out and try to reset\n\t\t\t// to after our closing brace to allow parsing to continue.\n\t\t\tclose = p.recover(TokenCBrace)\n\t\t\tbreak\n\t\t}\n\n\t\titems = append(items, ObjectConsItem{\n\t\t\tKeyExpr:   key,\n\t\t\tValueExpr: value,\n\t\t})\n\n\t\tnext = p.Peek()\n\t\tif next.Type == TokenCBrace {\n\t\t\tclose = p.Read() // eat closer\n\t\t\tbreak\n\t\t}\n\n\t\tif next.Type != TokenComma && next.Type != TokenNewline {\n\t\t\tif !p.recovery {\n\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\tSummary:  \"Missing attribute separator\",\n\t\t\t\t\tDetail:   \"Expected a newline or comma to mark the beginning of the next attribute.\",\n\t\t\t\t\tSubject:  &next.Range,\n\t\t\t\t\tContext:  hcl.RangeBetween(open.Range, next.Range).Ptr(),\n\t\t\t\t})\n\t\t\t}\n\t\t\tclose = p.recover(TokenCBrace)\n\t\t\tbreak\n\t\t}\n\n\t\tp.Read() // eat comma or newline\n\n\t}\n\n\treturn &ObjectConsExpr{\n\t\tItems: items,\n\n\t\tSrcRange:  hcl.RangeBetween(open.Range, close.Range),\n\t\tOpenRange: open.Range,\n\t}, diags\n}\n\nfunc (p *parser) finishParsingForExpr(open Token) (Expression, hcl.Diagnostics) {\n\tp.PushIncludeNewlines(false)\n\tdefer p.PopIncludeNewlines()\n\tintroducer := p.Read()\n\tif !forKeyword.TokenMatches(introducer) {\n\t\t// Should never happen if callers are behaving\n\t\tpanic(\"finishParsingForExpr called without peeker pointing to 'for' identifier\")\n\t}\n\n\tvar makeObj bool\n\tvar closeType TokenType\n\tswitch open.Type {\n\tcase TokenOBrace:\n\t\tmakeObj = true\n\t\tcloseType = TokenCBrace\n\tcase TokenOBrack:\n\t\tmakeObj = false // making a tuple\n\t\tcloseType = TokenCBrack\n\tdefault:\n\t\t// Should never happen if callers are behaving\n\t\tpanic(\"finishParsingForExpr called with invalid open token\")\n\t}\n\n\tvar diags hcl.Diagnostics\n\tvar keyName, valName string\n\n\tif p.Peek().Type != TokenIdent {\n\t\tif !p.recovery {\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Invalid 'for' expression\",\n\t\t\t\tDetail:   \"For expression requires variable name after 'for'.\",\n\t\t\t\tSubject:  p.Peek().Range.Ptr(),\n\t\t\t\tContext:  hcl.RangeBetween(open.Range, p.Peek().Range).Ptr(),\n\t\t\t})\n\t\t}\n\t\tclose := p.recover(closeType)\n\t\treturn &LiteralValueExpr{\n\t\t\tVal:      cty.DynamicVal,\n\t\t\tSrcRange: hcl.RangeBetween(open.Range, close.Range),\n\t\t}, diags\n\t}\n\n\tvalName = string(p.Read().Bytes)\n\n\tif p.Peek().Type == TokenComma {\n\t\t// What we just read was actually the key, then.\n\t\tkeyName = valName\n\t\tp.Read() // eat comma\n\n\t\tif p.Peek().Type != TokenIdent {\n\t\t\tif !p.recovery {\n\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\tSummary:  \"Invalid 'for' expression\",\n\t\t\t\t\tDetail:   \"For expression requires value variable name after comma.\",\n\t\t\t\t\tSubject:  p.Peek().Range.Ptr(),\n\t\t\t\t\tContext:  hcl.RangeBetween(open.Range, p.Peek().Range).Ptr(),\n\t\t\t\t})\n\t\t\t}\n\t\t\tclose := p.recover(closeType)\n\t\t\treturn &LiteralValueExpr{\n\t\t\t\tVal:      cty.DynamicVal,\n\t\t\t\tSrcRange: hcl.RangeBetween(open.Range, close.Range),\n\t\t\t}, diags\n\t\t}\n\n\t\tvalName = string(p.Read().Bytes)\n\t}\n\n\tif !inKeyword.TokenMatches(p.Peek()) {\n\t\tif !p.recovery {\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Invalid 'for' expression\",\n\t\t\t\tDetail:   \"For expression requires the 'in' keyword after its name declarations.\",\n\t\t\t\tSubject:  p.Peek().Range.Ptr(),\n\t\t\t\tContext:  hcl.RangeBetween(open.Range, p.Peek().Range).Ptr(),\n\t\t\t})\n\t\t}\n\t\tclose := p.recover(closeType)\n\t\treturn &LiteralValueExpr{\n\t\t\tVal:      cty.DynamicVal,\n\t\t\tSrcRange: hcl.RangeBetween(open.Range, close.Range),\n\t\t}, diags\n\t}\n\tp.Read() // eat 'in' keyword\n\n\tcollExpr, collDiags := p.ParseExpression()\n\tdiags = append(diags, collDiags...)\n\tif p.recovery && collDiags.HasErrors() {\n\t\tclose := p.recover(closeType)\n\t\treturn &LiteralValueExpr{\n\t\t\tVal:      cty.DynamicVal,\n\t\t\tSrcRange: hcl.RangeBetween(open.Range, close.Range),\n\t\t}, diags\n\t}\n\n\tif p.Peek().Type != TokenColon {\n\t\tif !p.recovery {\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Invalid 'for' expression\",\n\t\t\t\tDetail:   \"For expression requires a colon after the collection expression.\",\n\t\t\t\tSubject:  p.Peek().Range.Ptr(),\n\t\t\t\tContext:  hcl.RangeBetween(open.Range, p.Peek().Range).Ptr(),\n\t\t\t})\n\t\t}\n\t\tclose := p.recover(closeType)\n\t\treturn &LiteralValueExpr{\n\t\t\tVal:      cty.DynamicVal,\n\t\t\tSrcRange: hcl.RangeBetween(open.Range, close.Range),\n\t\t}, diags\n\t}\n\tp.Read() // eat colon\n\n\tvar keyExpr, valExpr Expression\n\tvar keyDiags, valDiags hcl.Diagnostics\n\tvalExpr, valDiags = p.ParseExpression()\n\tif p.Peek().Type == TokenFatArrow {\n\t\t// What we just parsed was actually keyExpr\n\t\tp.Read() // eat the fat arrow\n\t\tkeyExpr, keyDiags = valExpr, valDiags\n\n\t\tvalExpr, valDiags = p.ParseExpression()\n\t}\n\tdiags = append(diags, keyDiags...)\n\tdiags = append(diags, valDiags...)\n\tif p.recovery && (keyDiags.HasErrors() || valDiags.HasErrors()) {\n\t\tclose := p.recover(closeType)\n\t\treturn &LiteralValueExpr{\n\t\t\tVal:      cty.DynamicVal,\n\t\t\tSrcRange: hcl.RangeBetween(open.Range, close.Range),\n\t\t}, diags\n\t}\n\n\tgroup := false\n\tvar ellipsis Token\n\tif p.Peek().Type == TokenEllipsis {\n\t\tellipsis = p.Read()\n\t\tgroup = true\n\t}\n\n\tvar condExpr Expression\n\tvar condDiags hcl.Diagnostics\n\tif ifKeyword.TokenMatches(p.Peek()) {\n\t\tp.Read() // eat \"if\"\n\t\tcondExpr, condDiags = p.ParseExpression()\n\t\tdiags = append(diags, condDiags...)\n\t\tif p.recovery && condDiags.HasErrors() {\n\t\t\tclose := p.recover(p.oppositeBracket(open.Type))\n\t\t\treturn &LiteralValueExpr{\n\t\t\t\tVal:      cty.DynamicVal,\n\t\t\t\tSrcRange: hcl.RangeBetween(open.Range, close.Range),\n\t\t\t}, diags\n\t\t}\n\t}\n\n\tvar close Token\n\tif p.Peek().Type == closeType {\n\t\tclose = p.Read()\n\t} else {\n\t\tif !p.recovery {\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Invalid 'for' expression\",\n\t\t\t\tDetail:   \"Extra characters after the end of the 'for' expression.\",\n\t\t\t\tSubject:  p.Peek().Range.Ptr(),\n\t\t\t\tContext:  hcl.RangeBetween(open.Range, p.Peek().Range).Ptr(),\n\t\t\t})\n\t\t}\n\t\tclose = p.recover(closeType)\n\t}\n\n\tif !makeObj {\n\t\tif keyExpr != nil {\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Invalid 'for' expression\",\n\t\t\t\tDetail:   \"Key expression is not valid when building a tuple.\",\n\t\t\t\tSubject:  keyExpr.Range().Ptr(),\n\t\t\t\tContext:  hcl.RangeBetween(open.Range, close.Range).Ptr(),\n\t\t\t})\n\t\t}\n\n\t\tif group {\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Invalid 'for' expression\",\n\t\t\t\tDetail:   \"Grouping ellipsis (...) cannot be used when building a tuple.\",\n\t\t\t\tSubject:  &ellipsis.Range,\n\t\t\t\tContext:  hcl.RangeBetween(open.Range, close.Range).Ptr(),\n\t\t\t})\n\t\t}\n\t} else {\n\t\tif keyExpr == nil {\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Invalid 'for' expression\",\n\t\t\t\tDetail:   \"Key expression is required when building an object.\",\n\t\t\t\tSubject:  valExpr.Range().Ptr(),\n\t\t\t\tContext:  hcl.RangeBetween(open.Range, close.Range).Ptr(),\n\t\t\t})\n\t\t}\n\t}\n\n\treturn &ForExpr{\n\t\tKeyVar:   keyName,\n\t\tValVar:   valName,\n\t\tCollExpr: collExpr,\n\t\tKeyExpr:  keyExpr,\n\t\tValExpr:  valExpr,\n\t\tCondExpr: condExpr,\n\t\tGroup:    group,\n\n\t\tSrcRange:   hcl.RangeBetween(open.Range, close.Range),\n\t\tOpenRange:  open.Range,\n\t\tCloseRange: close.Range,\n\t}, diags\n}\n\n// parseQuotedStringLiteral is a helper for parsing quoted strings that\n// aren't allowed to contain any interpolations, such as block labels.\nfunc (p *parser) parseQuotedStringLiteral() (string, hcl.Range, hcl.Diagnostics) {\n\toQuote := p.Read()\n\tif oQuote.Type != TokenOQuote {\n\t\treturn \"\", oQuote.Range, hcl.Diagnostics{\n\t\t\t{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Invalid string literal\",\n\t\t\t\tDetail:   \"A quoted string is required here.\",\n\t\t\t\tSubject:  &oQuote.Range,\n\t\t\t},\n\t\t}\n\t}\n\n\tvar diags hcl.Diagnostics\n\tret := &bytes.Buffer{}\n\tvar cQuote Token\n\nToken:\n\tfor {\n\t\ttok := p.Read()\n\t\tswitch tok.Type {\n\n\t\tcase TokenCQuote:\n\t\t\tcQuote = tok\n\t\t\tbreak Token\n\n\t\tcase TokenQuotedLit:\n\t\t\ts, sDiags := p.decodeStringLit(tok)\n\t\t\tdiags = append(diags, sDiags...)\n\t\t\tret.WriteString(s)\n\n\t\tcase TokenTemplateControl, TokenTemplateInterp:\n\t\t\twhich := \"$\"\n\t\t\tif tok.Type == TokenTemplateControl {\n\t\t\t\twhich = \"%\"\n\t\t\t}\n\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Invalid string literal\",\n\t\t\t\tDetail: fmt.Sprintf(\n\t\t\t\t\t\"Template sequences are not allowed in this string. To include a literal %q, double it (as \\\"%s%s\\\") to escape it.\",\n\t\t\t\t\twhich, which, which,\n\t\t\t\t),\n\t\t\t\tSubject: &tok.Range,\n\t\t\t\tContext: hcl.RangeBetween(oQuote.Range, tok.Range).Ptr(),\n\t\t\t})\n\n\t\t\t// Now that we're returning an error callers won't attempt to use\n\t\t\t// the result for any real operations, but they might try to use\n\t\t\t// the partial AST for other analyses, so we'll leave a marker\n\t\t\t// to indicate that there was something invalid in the string to\n\t\t\t// help avoid misinterpretation of the partial result\n\t\t\tret.WriteString(which)\n\t\t\tret.WriteString(\"{ ... }\")\n\n\t\t\tp.recover(TokenTemplateSeqEnd) // we'll try to keep parsing after the sequence ends\n\n\t\tcase TokenEOF:\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Unterminated string literal\",\n\t\t\t\tDetail:   \"Unable to find the closing quote mark before the end of the file.\",\n\t\t\t\tSubject:  &tok.Range,\n\t\t\t\tContext:  hcl.RangeBetween(oQuote.Range, tok.Range).Ptr(),\n\t\t\t})\n\t\t\tbreak Token\n\n\t\tdefault:\n\t\t\t// Should never happen, as long as the scanner is behaving itself\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Invalid string literal\",\n\t\t\t\tDetail:   \"This item is not valid in a string literal.\",\n\t\t\t\tSubject:  &tok.Range,\n\t\t\t\tContext:  hcl.RangeBetween(oQuote.Range, tok.Range).Ptr(),\n\t\t\t})\n\t\t\tp.recover(TokenCQuote)\n\t\t\tbreak Token\n\n\t\t}\n\n\t}\n\n\treturn ret.String(), hcl.RangeBetween(oQuote.Range, cQuote.Range), diags\n}\n\n// decodeStringLit processes the given token, which must be either a\n// TokenQuotedLit or a TokenStringLit, returning the string resulting from\n// resolving any escape sequences.\n//\n// If any error diagnostics are returned, the returned string may be incomplete\n// or otherwise invalid.\nfunc (p *parser) decodeStringLit(tok Token) (string, hcl.Diagnostics) {\n\tvar quoted bool\n\tswitch tok.Type {\n\tcase TokenQuotedLit:\n\t\tquoted = true\n\tcase TokenStringLit:\n\t\tquoted = false\n\tdefault:\n\t\tpanic(\"decodeQuotedLit can only be used with TokenStringLit and TokenQuotedLit tokens\")\n\t}\n\tvar diags hcl.Diagnostics\n\n\tret := make([]byte, 0, len(tok.Bytes))\n\tslices := scanStringLit(tok.Bytes, quoted)\n\n\t// We will mutate rng constantly as we walk through our token slices below.\n\t// Any diagnostics must take a copy of this rng rather than simply pointing\n\t// to it, e.g. by using rng.Ptr() rather than &rng.\n\trng := tok.Range\n\trng.End = rng.Start\n\nSlices:\n\tfor _, slice := range slices {\n\t\tif len(slice) == 0 {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Advance the start of our range to where the previous token ended\n\t\trng.Start = rng.End\n\n\t\t// Advance the end of our range to after our token.\n\t\tb := slice\n\t\tfor len(b) > 0 {\n\t\t\tadv, ch, _ := textseg.ScanGraphemeClusters(b, true)\n\t\t\trng.End.Byte += adv\n\t\t\tswitch ch[0] {\n\t\t\tcase '\\r', '\\n':\n\t\t\t\trng.End.Line++\n\t\t\t\trng.End.Column = 1\n\t\t\tdefault:\n\t\t\t\trng.End.Column++\n\t\t\t}\n\t\t\tb = b[adv:]\n\t\t}\n\n\tTokenType:\n\t\tswitch slice[0] {\n\t\tcase '\\\\':\n\t\t\tif !quoted {\n\t\t\t\t// If we're not in quoted mode then just treat this token as\n\t\t\t\t// normal. (Slices can still start with backslash even if we're\n\t\t\t\t// not specifically looking for backslash sequences.)\n\t\t\t\tbreak TokenType\n\t\t\t}\n\t\t\tif len(slice) < 2 {\n\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\tSummary:  \"Invalid escape sequence\",\n\t\t\t\t\tDetail:   \"Backslash must be followed by an escape sequence selector character.\",\n\t\t\t\t\tSubject:  rng.Ptr(),\n\t\t\t\t})\n\t\t\t\tbreak TokenType\n\t\t\t}\n\n\t\t\tswitch slice[1] {\n\n\t\t\tcase 'n':\n\t\t\t\tret = append(ret, '\\n')\n\t\t\t\tcontinue Slices\n\t\t\tcase 'r':\n\t\t\t\tret = append(ret, '\\r')\n\t\t\t\tcontinue Slices\n\t\t\tcase 't':\n\t\t\t\tret = append(ret, '\\t')\n\t\t\t\tcontinue Slices\n\t\t\tcase '\"':\n\t\t\t\tret = append(ret, '\"')\n\t\t\t\tcontinue Slices\n\t\t\tcase '\\\\':\n\t\t\t\tret = append(ret, '\\\\')\n\t\t\t\tcontinue Slices\n\t\t\tcase 'u', 'U':\n\t\t\t\tif slice[1] == 'u' && len(slice) != 6 {\n\t\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\t\tSummary:  \"Invalid escape sequence\",\n\t\t\t\t\t\tDetail:   \"The \\\\u escape sequence must be followed by four hexadecimal digits.\",\n\t\t\t\t\t\tSubject:  rng.Ptr(),\n\t\t\t\t\t})\n\t\t\t\t\tbreak TokenType\n\t\t\t\t} else if slice[1] == 'U' && len(slice) != 10 {\n\t\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\t\tSummary:  \"Invalid escape sequence\",\n\t\t\t\t\t\tDetail:   \"The \\\\U escape sequence must be followed by eight hexadecimal digits.\",\n\t\t\t\t\t\tSubject:  rng.Ptr(),\n\t\t\t\t\t})\n\t\t\t\t\tbreak TokenType\n\t\t\t\t}\n\n\t\t\t\tnumHex := string(slice[2:])\n\t\t\t\tnum, err := strconv.ParseUint(numHex, 16, 32)\n\t\t\t\tif err != nil {\n\t\t\t\t\t// Should never happen because the scanner won't match\n\t\t\t\t\t// a sequence of digits that isn't valid.\n\t\t\t\t\tpanic(err)\n\t\t\t\t}\n\n\t\t\t\tr := rune(num)\n\t\t\t\tl := utf8.RuneLen(r)\n\t\t\t\tif l == -1 {\n\t\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\t\tSummary:  \"Invalid escape sequence\",\n\t\t\t\t\t\tDetail:   fmt.Sprintf(\"Cannot encode character U+%04x in UTF-8.\", num),\n\t\t\t\t\t\tSubject:  rng.Ptr(),\n\t\t\t\t\t})\n\t\t\t\t\tbreak TokenType\n\t\t\t\t}\n\t\t\t\tfor i := 0; i < l; i++ {\n\t\t\t\t\tret = append(ret, 0)\n\t\t\t\t}\n\t\t\t\trb := ret[len(ret)-l:]\n\t\t\t\tutf8.EncodeRune(rb, r)\n\n\t\t\t\tcontinue Slices\n\n\t\t\tdefault:\n\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\tSummary:  \"Invalid escape sequence\",\n\t\t\t\t\tDetail:   fmt.Sprintf(\"The symbol %q is not a valid escape sequence selector.\", slice[1:]),\n\t\t\t\t\tSubject:  rng.Ptr(),\n\t\t\t\t})\n\t\t\t\tret = append(ret, slice[1:]...)\n\t\t\t\tcontinue Slices\n\t\t\t}\n\n\t\tcase '$', '%':\n\t\t\tif len(slice) != 3 {\n\t\t\t\t// Not long enough to be our escape sequence, so it's literal.\n\t\t\t\tbreak TokenType\n\t\t\t}\n\n\t\t\tif slice[1] == slice[0] && slice[2] == '{' {\n\t\t\t\tret = append(ret, slice[0])\n\t\t\t\tret = append(ret, '{')\n\t\t\t\tcontinue Slices\n\t\t\t}\n\n\t\t\tbreak TokenType\n\t\t}\n\n\t\t// If we fall out here or break out of here from the switch above\n\t\t// then this slice is just a literal.\n\t\tret = append(ret, slice...)\n\t}\n\n\treturn string(ret), diags\n}\n\n// setRecovery turns on recovery mode without actually doing any recovery.\n// This can be used when a parser knowingly leaves the peeker in a useless\n// place and wants to suppress errors that might result from that decision.\nfunc (p *parser) setRecovery() {\n\tp.recovery = true\n}\n\n// recover seeks forward in the token stream until it finds TokenType \"end\",\n// then returns with the peeker pointed at the following token.\n//\n// If the given token type is a bracketer, this function will additionally\n// count nested instances of the brackets to try to leave the peeker at\n// the end of the _current_ instance of that bracketer, skipping over any\n// nested instances. This is a best-effort operation and may have\n// unpredictable results on input with bad bracketer nesting.\nfunc (p *parser) recover(end TokenType) Token {\n\tstart := p.oppositeBracket(end)\n\tp.recovery = true\n\n\tnest := 0\n\tfor {\n\t\ttok := p.Read()\n\t\tty := tok.Type\n\t\tif end == TokenTemplateSeqEnd && ty == TokenTemplateControl {\n\t\t\t// normalize so that our matching behavior can work, since\n\t\t\t// TokenTemplateControl/TokenTemplateInterp are asymmetrical\n\t\t\t// with TokenTemplateSeqEnd and thus we need to count both\n\t\t\t// openers if that's the closer we're looking for.\n\t\t\tty = TokenTemplateInterp\n\t\t}\n\n\t\tswitch ty {\n\t\tcase start:\n\t\t\tnest++\n\t\tcase end:\n\t\t\tif nest < 1 {\n\t\t\t\treturn tok\n\t\t\t}\n\n\t\t\tnest--\n\t\tcase TokenEOF:\n\t\t\treturn tok\n\t\t}\n\t}\n}\n\n// recoverOver seeks forward in the token stream until it finds a block\n// starting with TokenType \"start\", then finds the corresponding end token,\n// leaving the peeker pointed at the token after that end token.\n//\n// The given token type _must_ be a bracketer. For example, if the given\n// start token is TokenOBrace then the parser will be left at the _end_ of\n// the next brace-delimited block encountered, or at EOF if no such block\n// is found or it is unclosed.\nfunc (p *parser) recoverOver(start TokenType) {\n\tend := p.oppositeBracket(start)\n\n\t// find the opening bracket first\nToken:\n\tfor {\n\t\ttok := p.Read()\n\t\tswitch tok.Type {\n\t\tcase start, TokenEOF:\n\t\t\tbreak Token\n\t\t}\n\t}\n\n\t// Now use our existing recover function to locate the _end_ of the\n\t// container we've found.\n\tp.recover(end)\n}\n\nfunc (p *parser) recoverAfterBodyItem() {\n\tp.recovery = true\n\tvar open []TokenType\n\nToken:\n\tfor {\n\t\ttok := p.Read()\n\n\t\tswitch tok.Type {\n\n\t\tcase TokenNewline:\n\t\t\tif len(open) == 0 {\n\t\t\t\tbreak Token\n\t\t\t}\n\n\t\tcase TokenEOF:\n\t\t\tbreak Token\n\n\t\tcase TokenOBrace, TokenOBrack, TokenOParen, TokenOQuote, TokenOHeredoc, TokenTemplateInterp, TokenTemplateControl:\n\t\t\topen = append(open, tok.Type)\n\n\t\tcase TokenCBrace, TokenCBrack, TokenCParen, TokenCQuote, TokenCHeredoc:\n\t\t\topener := p.oppositeBracket(tok.Type)\n\t\t\tfor len(open) > 0 && open[len(open)-1] != opener {\n\t\t\t\topen = open[:len(open)-1]\n\t\t\t}\n\t\t\tif len(open) > 0 {\n\t\t\t\topen = open[:len(open)-1]\n\t\t\t}\n\n\t\tcase TokenTemplateSeqEnd:\n\t\t\tfor len(open) > 0 && open[len(open)-1] != TokenTemplateInterp && open[len(open)-1] != TokenTemplateControl {\n\t\t\t\topen = open[:len(open)-1]\n\t\t\t}\n\t\t\tif len(open) > 0 {\n\t\t\t\topen = open[:len(open)-1]\n\t\t\t}\n\n\t\t}\n\t}\n}\n\n// oppositeBracket finds the bracket that opposes the given bracketer, or\n// NilToken if the given token isn't a bracketer.\n//\n// \"Bracketer\", for the sake of this function, is one end of a matching\n// open/close set of tokens that establish a bracketing context.\nfunc (p *parser) oppositeBracket(ty TokenType) TokenType {\n\tswitch ty {\n\n\tcase TokenOBrace:\n\t\treturn TokenCBrace\n\tcase TokenOBrack:\n\t\treturn TokenCBrack\n\tcase TokenOParen:\n\t\treturn TokenCParen\n\tcase TokenOQuote:\n\t\treturn TokenCQuote\n\tcase TokenOHeredoc:\n\t\treturn TokenCHeredoc\n\n\tcase TokenCBrace:\n\t\treturn TokenOBrace\n\tcase TokenCBrack:\n\t\treturn TokenOBrack\n\tcase TokenCParen:\n\t\treturn TokenOParen\n\tcase TokenCQuote:\n\t\treturn TokenOQuote\n\tcase TokenCHeredoc:\n\t\treturn TokenOHeredoc\n\n\tcase TokenTemplateControl:\n\t\treturn TokenTemplateSeqEnd\n\tcase TokenTemplateInterp:\n\t\treturn TokenTemplateSeqEnd\n\tcase TokenTemplateSeqEnd:\n\t\t// This is ambigous, but we return Interp here because that's\n\t\t// what's assumed by the \"recover\" method.\n\t\treturn TokenTemplateInterp\n\n\tdefault:\n\t\treturn TokenNil\n\t}\n}\n\nfunc errPlaceholderExpr(rng hcl.Range) Expression {\n\treturn &LiteralValueExpr{\n\t\tVal:      cty.DynamicVal,\n\t\tSrcRange: rng,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcl/hclsyntax/parser_template.go",
    "content": "package hclsyntax\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n\t\"unicode\"\n\n\t\"github.com/apparentlymart/go-textseg/textseg\"\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\nfunc (p *parser) ParseTemplate() (Expression, hcl.Diagnostics) {\n\treturn p.parseTemplate(TokenEOF, false)\n}\n\nfunc (p *parser) parseTemplate(end TokenType, flushHeredoc bool) (Expression, hcl.Diagnostics) {\n\texprs, passthru, rng, diags := p.parseTemplateInner(end, flushHeredoc)\n\n\tif passthru {\n\t\tif len(exprs) != 1 {\n\t\t\tpanic(\"passthru set with len(exprs) != 1\")\n\t\t}\n\t\treturn &TemplateWrapExpr{\n\t\t\tWrapped:  exprs[0],\n\t\t\tSrcRange: rng,\n\t\t}, diags\n\t}\n\n\treturn &TemplateExpr{\n\t\tParts:    exprs,\n\t\tSrcRange: rng,\n\t}, diags\n}\n\nfunc (p *parser) parseTemplateInner(end TokenType, flushHeredoc bool) ([]Expression, bool, hcl.Range, hcl.Diagnostics) {\n\tparts, diags := p.parseTemplateParts(end)\n\tif flushHeredoc {\n\t\tflushHeredocTemplateParts(parts) // Trim off leading spaces on lines per the flush heredoc spec\n\t}\n\ttp := templateParser{\n\t\tTokens:   parts.Tokens,\n\t\tSrcRange: parts.SrcRange,\n\t}\n\texprs, exprsDiags := tp.parseRoot()\n\tdiags = append(diags, exprsDiags...)\n\n\tpassthru := false\n\tif len(parts.Tokens) == 2 { // one real token and one synthetic \"end\" token\n\t\tif _, isInterp := parts.Tokens[0].(*templateInterpToken); isInterp {\n\t\t\tpassthru = true\n\t\t}\n\t}\n\n\treturn exprs, passthru, parts.SrcRange, diags\n}\n\ntype templateParser struct {\n\tTokens   []templateToken\n\tSrcRange hcl.Range\n\n\tpos int\n}\n\nfunc (p *templateParser) parseRoot() ([]Expression, hcl.Diagnostics) {\n\tvar exprs []Expression\n\tvar diags hcl.Diagnostics\n\n\tfor {\n\t\tnext := p.Peek()\n\t\tif _, isEnd := next.(*templateEndToken); isEnd {\n\t\t\tbreak\n\t\t}\n\n\t\texpr, exprDiags := p.parseExpr()\n\t\tdiags = append(diags, exprDiags...)\n\t\texprs = append(exprs, expr)\n\t}\n\n\treturn exprs, diags\n}\n\nfunc (p *templateParser) parseExpr() (Expression, hcl.Diagnostics) {\n\tnext := p.Peek()\n\tswitch tok := next.(type) {\n\n\tcase *templateLiteralToken:\n\t\tp.Read() // eat literal\n\t\treturn &LiteralValueExpr{\n\t\t\tVal:      cty.StringVal(tok.Val),\n\t\t\tSrcRange: tok.SrcRange,\n\t\t}, nil\n\n\tcase *templateInterpToken:\n\t\tp.Read() // eat interp\n\t\treturn tok.Expr, nil\n\n\tcase *templateIfToken:\n\t\treturn p.parseIf()\n\n\tcase *templateForToken:\n\t\treturn p.parseFor()\n\n\tcase *templateEndToken:\n\t\tp.Read() // eat erroneous token\n\t\treturn errPlaceholderExpr(tok.SrcRange), hcl.Diagnostics{\n\t\t\t{\n\t\t\t\t// This is a particularly unhelpful diagnostic, so callers\n\t\t\t\t// should attempt to pre-empt it and produce a more helpful\n\t\t\t\t// diagnostic that is context-aware.\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Unexpected end of template\",\n\t\t\t\tDetail:   \"The control directives within this template are unbalanced.\",\n\t\t\t\tSubject:  &tok.SrcRange,\n\t\t\t},\n\t\t}\n\n\tcase *templateEndCtrlToken:\n\t\tp.Read() // eat erroneous token\n\t\treturn errPlaceholderExpr(tok.SrcRange), hcl.Diagnostics{\n\t\t\t{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  fmt.Sprintf(\"Unexpected %s directive\", tok.Name()),\n\t\t\t\tDetail:   \"The control directives within this template are unbalanced.\",\n\t\t\t\tSubject:  &tok.SrcRange,\n\t\t\t},\n\t\t}\n\n\tdefault:\n\t\t// should never happen, because above should be exhaustive\n\t\tpanic(fmt.Sprintf(\"unhandled template token type %T\", next))\n\t}\n}\n\nfunc (p *templateParser) parseIf() (Expression, hcl.Diagnostics) {\n\topen := p.Read()\n\topenIf, isIf := open.(*templateIfToken)\n\tif !isIf {\n\t\t// should never happen if caller is behaving\n\t\tpanic(\"parseIf called with peeker not pointing at if token\")\n\t}\n\n\tvar ifExprs, elseExprs []Expression\n\tvar diags hcl.Diagnostics\n\tvar endifRange hcl.Range\n\n\tcurrentExprs := &ifExprs\nToken:\n\tfor {\n\t\tnext := p.Peek()\n\t\tif end, isEnd := next.(*templateEndToken); isEnd {\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Unexpected end of template\",\n\t\t\t\tDetail: fmt.Sprintf(\n\t\t\t\t\t\"The if directive at %s is missing its corresponding endif directive.\",\n\t\t\t\t\topenIf.SrcRange,\n\t\t\t\t),\n\t\t\t\tSubject: &end.SrcRange,\n\t\t\t})\n\t\t\treturn errPlaceholderExpr(end.SrcRange), diags\n\t\t}\n\t\tif end, isCtrlEnd := next.(*templateEndCtrlToken); isCtrlEnd {\n\t\t\tp.Read() // eat end directive\n\n\t\t\tswitch end.Type {\n\n\t\t\tcase templateElse:\n\t\t\t\tif currentExprs == &ifExprs {\n\t\t\t\t\tcurrentExprs = &elseExprs\n\t\t\t\t\tcontinue Token\n\t\t\t\t}\n\n\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\tSummary:  \"Unexpected else directive\",\n\t\t\t\t\tDetail: fmt.Sprintf(\n\t\t\t\t\t\t\"Already in the else clause for the if started at %s.\",\n\t\t\t\t\t\topenIf.SrcRange,\n\t\t\t\t\t),\n\t\t\t\t\tSubject: &end.SrcRange,\n\t\t\t\t})\n\n\t\t\tcase templateEndIf:\n\t\t\t\tendifRange = end.SrcRange\n\t\t\t\tbreak Token\n\n\t\t\tdefault:\n\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\tSummary:  fmt.Sprintf(\"Unexpected %s directive\", end.Name()),\n\t\t\t\t\tDetail: fmt.Sprintf(\n\t\t\t\t\t\t\"Expecting an endif directive for the if started at %s.\",\n\t\t\t\t\t\topenIf.SrcRange,\n\t\t\t\t\t),\n\t\t\t\t\tSubject: &end.SrcRange,\n\t\t\t\t})\n\t\t\t}\n\n\t\t\treturn errPlaceholderExpr(end.SrcRange), diags\n\t\t}\n\n\t\texpr, exprDiags := p.parseExpr()\n\t\tdiags = append(diags, exprDiags...)\n\t\t*currentExprs = append(*currentExprs, expr)\n\t}\n\n\tif len(ifExprs) == 0 {\n\t\tifExprs = append(ifExprs, &LiteralValueExpr{\n\t\t\tVal: cty.StringVal(\"\"),\n\t\t\tSrcRange: hcl.Range{\n\t\t\t\tFilename: openIf.SrcRange.Filename,\n\t\t\t\tStart:    openIf.SrcRange.End,\n\t\t\t\tEnd:      openIf.SrcRange.End,\n\t\t\t},\n\t\t})\n\t}\n\tif len(elseExprs) == 0 {\n\t\telseExprs = append(elseExprs, &LiteralValueExpr{\n\t\t\tVal: cty.StringVal(\"\"),\n\t\t\tSrcRange: hcl.Range{\n\t\t\t\tFilename: endifRange.Filename,\n\t\t\t\tStart:    endifRange.Start,\n\t\t\t\tEnd:      endifRange.Start,\n\t\t\t},\n\t\t})\n\t}\n\n\ttrueExpr := &TemplateExpr{\n\t\tParts:    ifExprs,\n\t\tSrcRange: hcl.RangeBetween(ifExprs[0].Range(), ifExprs[len(ifExprs)-1].Range()),\n\t}\n\tfalseExpr := &TemplateExpr{\n\t\tParts:    elseExprs,\n\t\tSrcRange: hcl.RangeBetween(elseExprs[0].Range(), elseExprs[len(elseExprs)-1].Range()),\n\t}\n\n\treturn &ConditionalExpr{\n\t\tCondition:   openIf.CondExpr,\n\t\tTrueResult:  trueExpr,\n\t\tFalseResult: falseExpr,\n\n\t\tSrcRange: hcl.RangeBetween(openIf.SrcRange, endifRange),\n\t}, diags\n}\n\nfunc (p *templateParser) parseFor() (Expression, hcl.Diagnostics) {\n\topen := p.Read()\n\topenFor, isFor := open.(*templateForToken)\n\tif !isFor {\n\t\t// should never happen if caller is behaving\n\t\tpanic(\"parseFor called with peeker not pointing at for token\")\n\t}\n\n\tvar contentExprs []Expression\n\tvar diags hcl.Diagnostics\n\tvar endforRange hcl.Range\n\nToken:\n\tfor {\n\t\tnext := p.Peek()\n\t\tif end, isEnd := next.(*templateEndToken); isEnd {\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Unexpected end of template\",\n\t\t\t\tDetail: fmt.Sprintf(\n\t\t\t\t\t\"The for directive at %s is missing its corresponding endfor directive.\",\n\t\t\t\t\topenFor.SrcRange,\n\t\t\t\t),\n\t\t\t\tSubject: &end.SrcRange,\n\t\t\t})\n\t\t\treturn errPlaceholderExpr(end.SrcRange), diags\n\t\t}\n\t\tif end, isCtrlEnd := next.(*templateEndCtrlToken); isCtrlEnd {\n\t\t\tp.Read() // eat end directive\n\n\t\t\tswitch end.Type {\n\n\t\t\tcase templateElse:\n\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\tSummary:  \"Unexpected else directive\",\n\t\t\t\t\tDetail:   \"An else clause is not expected for a for directive.\",\n\t\t\t\t\tSubject:  &end.SrcRange,\n\t\t\t\t})\n\n\t\t\tcase templateEndFor:\n\t\t\t\tendforRange = end.SrcRange\n\t\t\t\tbreak Token\n\n\t\t\tdefault:\n\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\tSummary:  fmt.Sprintf(\"Unexpected %s directive\", end.Name()),\n\t\t\t\t\tDetail: fmt.Sprintf(\n\t\t\t\t\t\t\"Expecting an endfor directive corresponding to the for directive at %s.\",\n\t\t\t\t\t\topenFor.SrcRange,\n\t\t\t\t\t),\n\t\t\t\t\tSubject: &end.SrcRange,\n\t\t\t\t})\n\t\t\t}\n\n\t\t\treturn errPlaceholderExpr(end.SrcRange), diags\n\t\t}\n\n\t\texpr, exprDiags := p.parseExpr()\n\t\tdiags = append(diags, exprDiags...)\n\t\tcontentExprs = append(contentExprs, expr)\n\t}\n\n\tif len(contentExprs) == 0 {\n\t\tcontentExprs = append(contentExprs, &LiteralValueExpr{\n\t\t\tVal: cty.StringVal(\"\"),\n\t\t\tSrcRange: hcl.Range{\n\t\t\t\tFilename: openFor.SrcRange.Filename,\n\t\t\t\tStart:    openFor.SrcRange.End,\n\t\t\t\tEnd:      openFor.SrcRange.End,\n\t\t\t},\n\t\t})\n\t}\n\n\tcontentExpr := &TemplateExpr{\n\t\tParts:    contentExprs,\n\t\tSrcRange: hcl.RangeBetween(contentExprs[0].Range(), contentExprs[len(contentExprs)-1].Range()),\n\t}\n\n\tforExpr := &ForExpr{\n\t\tKeyVar: openFor.KeyVar,\n\t\tValVar: openFor.ValVar,\n\n\t\tCollExpr: openFor.CollExpr,\n\t\tValExpr:  contentExpr,\n\n\t\tSrcRange:   hcl.RangeBetween(openFor.SrcRange, endforRange),\n\t\tOpenRange:  openFor.SrcRange,\n\t\tCloseRange: endforRange,\n\t}\n\n\treturn &TemplateJoinExpr{\n\t\tTuple: forExpr,\n\t}, diags\n}\n\nfunc (p *templateParser) Peek() templateToken {\n\treturn p.Tokens[p.pos]\n}\n\nfunc (p *templateParser) Read() templateToken {\n\tret := p.Peek()\n\tif _, end := ret.(*templateEndToken); !end {\n\t\tp.pos++\n\t}\n\treturn ret\n}\n\n// parseTemplateParts produces a flat sequence of \"template tokens\", which are\n// either literal values (with any \"trimming\" already applied), interpolation\n// sequences, or control flow markers.\n//\n// A further pass is required on the result to turn it into an AST.\nfunc (p *parser) parseTemplateParts(end TokenType) (*templateParts, hcl.Diagnostics) {\n\tvar parts []templateToken\n\tvar diags hcl.Diagnostics\n\n\tstartRange := p.NextRange()\n\tltrimNext := false\n\tnextCanTrimPrev := false\n\tvar endRange hcl.Range\n\nToken:\n\tfor {\n\t\tnext := p.Read()\n\t\tif next.Type == end {\n\t\t\t// all done!\n\t\t\tendRange = next.Range\n\t\t\tbreak\n\t\t}\n\n\t\tltrim := ltrimNext\n\t\tltrimNext = false\n\t\tcanTrimPrev := nextCanTrimPrev\n\t\tnextCanTrimPrev = false\n\n\t\tswitch next.Type {\n\t\tcase TokenStringLit, TokenQuotedLit:\n\t\t\tstr, strDiags := p.decodeStringLit(next)\n\t\t\tdiags = append(diags, strDiags...)\n\n\t\t\tif ltrim {\n\t\t\t\tstr = strings.TrimLeftFunc(str, unicode.IsSpace)\n\t\t\t}\n\n\t\t\tparts = append(parts, &templateLiteralToken{\n\t\t\t\tVal:      str,\n\t\t\t\tSrcRange: next.Range,\n\t\t\t})\n\t\t\tnextCanTrimPrev = true\n\n\t\tcase TokenTemplateInterp:\n\t\t\t// if the opener is ${~ then we want to eat any trailing whitespace\n\t\t\t// in the preceding literal token, assuming it is indeed a literal\n\t\t\t// token.\n\t\t\tif canTrimPrev && len(next.Bytes) == 3 && next.Bytes[2] == '~' && len(parts) > 0 {\n\t\t\t\tprevExpr := parts[len(parts)-1]\n\t\t\t\tif lexpr, ok := prevExpr.(*templateLiteralToken); ok {\n\t\t\t\t\tlexpr.Val = strings.TrimRightFunc(lexpr.Val, unicode.IsSpace)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tp.PushIncludeNewlines(false)\n\t\t\texpr, exprDiags := p.ParseExpression()\n\t\t\tdiags = append(diags, exprDiags...)\n\t\t\tclose := p.Peek()\n\t\t\tif close.Type != TokenTemplateSeqEnd {\n\t\t\t\tif !p.recovery {\n\t\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\t\tSummary:  \"Extra characters after interpolation expression\",\n\t\t\t\t\t\tDetail:   \"Expected a closing brace to end the interpolation expression, but found extra characters.\",\n\t\t\t\t\t\tSubject:  &close.Range,\n\t\t\t\t\t\tContext:  hcl.RangeBetween(startRange, close.Range).Ptr(),\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tp.recover(TokenTemplateSeqEnd)\n\t\t\t} else {\n\t\t\t\tp.Read() // eat closing brace\n\n\t\t\t\t// If the closer is ~} then we want to eat any leading\n\t\t\t\t// whitespace on the next token, if it turns out to be a\n\t\t\t\t// literal token.\n\t\t\t\tif len(close.Bytes) == 2 && close.Bytes[0] == '~' {\n\t\t\t\t\tltrimNext = true\n\t\t\t\t}\n\t\t\t}\n\t\t\tp.PopIncludeNewlines()\n\t\t\tparts = append(parts, &templateInterpToken{\n\t\t\t\tExpr:     expr,\n\t\t\t\tSrcRange: hcl.RangeBetween(next.Range, close.Range),\n\t\t\t})\n\n\t\tcase TokenTemplateControl:\n\t\t\t// if the opener is %{~ then we want to eat any trailing whitespace\n\t\t\t// in the preceding literal token, assuming it is indeed a literal\n\t\t\t// token.\n\t\t\tif canTrimPrev && len(next.Bytes) == 3 && next.Bytes[2] == '~' && len(parts) > 0 {\n\t\t\t\tprevExpr := parts[len(parts)-1]\n\t\t\t\tif lexpr, ok := prevExpr.(*templateLiteralToken); ok {\n\t\t\t\t\tlexpr.Val = strings.TrimRightFunc(lexpr.Val, unicode.IsSpace)\n\t\t\t\t}\n\t\t\t}\n\t\t\tp.PushIncludeNewlines(false)\n\n\t\t\tkw := p.Peek()\n\t\t\tif kw.Type != TokenIdent {\n\t\t\t\tif !p.recovery {\n\t\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\t\tSummary:  \"Invalid template directive\",\n\t\t\t\t\t\tDetail:   \"A template directive keyword (\\\"if\\\", \\\"for\\\", etc) is expected at the beginning of a %{ sequence.\",\n\t\t\t\t\t\tSubject:  &kw.Range,\n\t\t\t\t\t\tContext:  hcl.RangeBetween(next.Range, kw.Range).Ptr(),\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tp.recover(TokenTemplateSeqEnd)\n\t\t\t\tp.PopIncludeNewlines()\n\t\t\t\tcontinue Token\n\t\t\t}\n\t\t\tp.Read() // eat keyword token\n\n\t\t\tswitch {\n\n\t\t\tcase ifKeyword.TokenMatches(kw):\n\t\t\t\tcondExpr, exprDiags := p.ParseExpression()\n\t\t\t\tdiags = append(diags, exprDiags...)\n\t\t\t\tparts = append(parts, &templateIfToken{\n\t\t\t\t\tCondExpr: condExpr,\n\t\t\t\t\tSrcRange: hcl.RangeBetween(next.Range, p.NextRange()),\n\t\t\t\t})\n\n\t\t\tcase elseKeyword.TokenMatches(kw):\n\t\t\t\tparts = append(parts, &templateEndCtrlToken{\n\t\t\t\t\tType:     templateElse,\n\t\t\t\t\tSrcRange: hcl.RangeBetween(next.Range, p.NextRange()),\n\t\t\t\t})\n\n\t\t\tcase endifKeyword.TokenMatches(kw):\n\t\t\t\tparts = append(parts, &templateEndCtrlToken{\n\t\t\t\t\tType:     templateEndIf,\n\t\t\t\t\tSrcRange: hcl.RangeBetween(next.Range, p.NextRange()),\n\t\t\t\t})\n\n\t\t\tcase forKeyword.TokenMatches(kw):\n\t\t\t\tvar keyName, valName string\n\t\t\t\tif p.Peek().Type != TokenIdent {\n\t\t\t\t\tif !p.recovery {\n\t\t\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\t\t\tSummary:  \"Invalid 'for' directive\",\n\t\t\t\t\t\t\tDetail:   \"For directive requires variable name after 'for'.\",\n\t\t\t\t\t\t\tSubject:  p.Peek().Range.Ptr(),\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t\tp.recover(TokenTemplateSeqEnd)\n\t\t\t\t\tp.PopIncludeNewlines()\n\t\t\t\t\tcontinue Token\n\t\t\t\t}\n\n\t\t\t\tvalName = string(p.Read().Bytes)\n\n\t\t\t\tif p.Peek().Type == TokenComma {\n\t\t\t\t\t// What we just read was actually the key, then.\n\t\t\t\t\tkeyName = valName\n\t\t\t\t\tp.Read() // eat comma\n\n\t\t\t\t\tif p.Peek().Type != TokenIdent {\n\t\t\t\t\t\tif !p.recovery {\n\t\t\t\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\t\t\t\tSummary:  \"Invalid 'for' directive\",\n\t\t\t\t\t\t\t\tDetail:   \"For directive requires value variable name after comma.\",\n\t\t\t\t\t\t\t\tSubject:  p.Peek().Range.Ptr(),\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t\tp.recover(TokenTemplateSeqEnd)\n\t\t\t\t\t\tp.PopIncludeNewlines()\n\t\t\t\t\t\tcontinue Token\n\t\t\t\t\t}\n\n\t\t\t\t\tvalName = string(p.Read().Bytes)\n\t\t\t\t}\n\n\t\t\t\tif !inKeyword.TokenMatches(p.Peek()) {\n\t\t\t\t\tif !p.recovery {\n\t\t\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\t\t\tSummary:  \"Invalid 'for' directive\",\n\t\t\t\t\t\t\tDetail:   \"For directive requires 'in' keyword after names.\",\n\t\t\t\t\t\t\tSubject:  p.Peek().Range.Ptr(),\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t\tp.recover(TokenTemplateSeqEnd)\n\t\t\t\t\tp.PopIncludeNewlines()\n\t\t\t\t\tcontinue Token\n\t\t\t\t}\n\t\t\t\tp.Read() // eat 'in' keyword\n\n\t\t\t\tcollExpr, collDiags := p.ParseExpression()\n\t\t\t\tdiags = append(diags, collDiags...)\n\t\t\t\tparts = append(parts, &templateForToken{\n\t\t\t\t\tKeyVar:   keyName,\n\t\t\t\t\tValVar:   valName,\n\t\t\t\t\tCollExpr: collExpr,\n\n\t\t\t\t\tSrcRange: hcl.RangeBetween(next.Range, p.NextRange()),\n\t\t\t\t})\n\n\t\t\tcase endforKeyword.TokenMatches(kw):\n\t\t\t\tparts = append(parts, &templateEndCtrlToken{\n\t\t\t\t\tType:     templateEndFor,\n\t\t\t\t\tSrcRange: hcl.RangeBetween(next.Range, p.NextRange()),\n\t\t\t\t})\n\n\t\t\tdefault:\n\t\t\t\tif !p.recovery {\n\t\t\t\t\tsuggestions := []string{\"if\", \"for\", \"else\", \"endif\", \"endfor\"}\n\t\t\t\t\tgiven := string(kw.Bytes)\n\t\t\t\t\tsuggestion := nameSuggestion(given, suggestions)\n\t\t\t\t\tif suggestion != \"\" {\n\t\t\t\t\t\tsuggestion = fmt.Sprintf(\" Did you mean %q?\", suggestion)\n\t\t\t\t\t}\n\n\t\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\t\tSummary:  \"Invalid template control keyword\",\n\t\t\t\t\t\tDetail:   fmt.Sprintf(\"%q is not a valid template control keyword.%s\", given, suggestion),\n\t\t\t\t\t\tSubject:  &kw.Range,\n\t\t\t\t\t\tContext:  hcl.RangeBetween(next.Range, kw.Range).Ptr(),\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tp.recover(TokenTemplateSeqEnd)\n\t\t\t\tp.PopIncludeNewlines()\n\t\t\t\tcontinue Token\n\n\t\t\t}\n\n\t\t\tclose := p.Peek()\n\t\t\tif close.Type != TokenTemplateSeqEnd {\n\t\t\t\tif !p.recovery {\n\t\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\t\tSummary:  fmt.Sprintf(\"Extra characters in %s marker\", kw.Bytes),\n\t\t\t\t\t\tDetail:   \"Expected a closing brace to end the sequence, but found extra characters.\",\n\t\t\t\t\t\tSubject:  &close.Range,\n\t\t\t\t\t\tContext:  hcl.RangeBetween(startRange, close.Range).Ptr(),\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tp.recover(TokenTemplateSeqEnd)\n\t\t\t} else {\n\t\t\t\tp.Read() // eat closing brace\n\n\t\t\t\t// If the closer is ~} then we want to eat any leading\n\t\t\t\t// whitespace on the next token, if it turns out to be a\n\t\t\t\t// literal token.\n\t\t\t\tif len(close.Bytes) == 2 && close.Bytes[0] == '~' {\n\t\t\t\t\tltrimNext = true\n\t\t\t\t}\n\t\t\t}\n\t\t\tp.PopIncludeNewlines()\n\n\t\tdefault:\n\t\t\tif !p.recovery {\n\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\tSummary:  \"Unterminated template string\",\n\t\t\t\t\tDetail:   \"No closing marker was found for the string.\",\n\t\t\t\t\tSubject:  &next.Range,\n\t\t\t\t\tContext:  hcl.RangeBetween(startRange, next.Range).Ptr(),\n\t\t\t\t})\n\t\t\t}\n\t\t\tfinal := p.recover(end)\n\t\t\tendRange = final.Range\n\t\t\tbreak Token\n\t\t}\n\t}\n\n\tif len(parts) == 0 {\n\t\t// If a sequence has no content, we'll treat it as if it had an\n\t\t// empty string in it because that's what the user probably means\n\t\t// if they write \"\" in configuration.\n\t\tparts = append(parts, &templateLiteralToken{\n\t\t\tVal: \"\",\n\t\t\tSrcRange: hcl.Range{\n\t\t\t\t// Range is the zero-character span immediately after the\n\t\t\t\t// opening quote.\n\t\t\t\tFilename: startRange.Filename,\n\t\t\t\tStart:    startRange.End,\n\t\t\t\tEnd:      startRange.End,\n\t\t\t},\n\t\t})\n\t}\n\n\t// Always end with an end token, so the parser can produce diagnostics\n\t// about unclosed items with proper position information.\n\tparts = append(parts, &templateEndToken{\n\t\tSrcRange: endRange,\n\t})\n\n\tret := &templateParts{\n\t\tTokens:   parts,\n\t\tSrcRange: hcl.RangeBetween(startRange, endRange),\n\t}\n\n\treturn ret, diags\n}\n\n// flushHeredocTemplateParts modifies in-place the line-leading literal strings\n// to apply the flush heredoc processing rule: find the line with the smallest\n// number of whitespace characters as prefix and then trim that number of\n// characters from all of the lines.\n//\n// This rule is applied to static tokens rather than to the rendered result,\n// so interpolating a string with leading whitespace cannot affect the chosen\n// prefix length.\nfunc flushHeredocTemplateParts(parts *templateParts) {\n\tif len(parts.Tokens) == 0 {\n\t\t// Nothing to do\n\t\treturn\n\t}\n\n\tconst maxInt = int((^uint(0)) >> 1)\n\n\tminSpaces := maxInt\n\tnewline := true\n\tvar adjust []*templateLiteralToken\n\tfor _, ttok := range parts.Tokens {\n\t\tif newline {\n\t\t\tnewline = false\n\t\t\tvar spaces int\n\t\t\tif lit, ok := ttok.(*templateLiteralToken); ok {\n\t\t\t\torig := lit.Val\n\t\t\t\ttrimmed := strings.TrimLeftFunc(orig, unicode.IsSpace)\n\t\t\t\t// If a token is entirely spaces and ends with a newline\n\t\t\t\t// then it's a \"blank line\" and thus not considered for\n\t\t\t\t// space-prefix-counting purposes.\n\t\t\t\tif len(trimmed) == 0 && strings.HasSuffix(orig, \"\\n\") {\n\t\t\t\t\tspaces = maxInt\n\t\t\t\t} else {\n\t\t\t\t\tspaceBytes := len(lit.Val) - len(trimmed)\n\t\t\t\t\tspaces, _ = textseg.TokenCount([]byte(orig[:spaceBytes]), textseg.ScanGraphemeClusters)\n\t\t\t\t\tadjust = append(adjust, lit)\n\t\t\t\t}\n\t\t\t} else if _, ok := ttok.(*templateEndToken); ok {\n\t\t\t\tbreak // don't process the end token since it never has spaces before it\n\t\t\t}\n\t\t\tif spaces < minSpaces {\n\t\t\t\tminSpaces = spaces\n\t\t\t}\n\t\t}\n\t\tif lit, ok := ttok.(*templateLiteralToken); ok {\n\t\t\tif strings.HasSuffix(lit.Val, \"\\n\") {\n\t\t\t\tnewline = true // The following token, if any, begins a new line\n\t\t\t}\n\t\t}\n\t}\n\n\tfor _, lit := range adjust {\n\t\t// Since we want to count space _characters_ rather than space _bytes_,\n\t\t// we can't just do a straightforward slice operation here and instead\n\t\t// need to hunt for the split point with a scanner.\n\t\tvalBytes := []byte(lit.Val)\n\t\tspaceByteCount := 0\n\t\tfor i := 0; i < minSpaces; i++ {\n\t\t\tadv, _, _ := textseg.ScanGraphemeClusters(valBytes, true)\n\t\t\tspaceByteCount += adv\n\t\t\tvalBytes = valBytes[adv:]\n\t\t}\n\t\tlit.Val = lit.Val[spaceByteCount:]\n\t\tlit.SrcRange.Start.Column += minSpaces\n\t\tlit.SrcRange.Start.Byte += spaceByteCount\n\t}\n}\n\ntype templateParts struct {\n\tTokens   []templateToken\n\tSrcRange hcl.Range\n}\n\n// templateToken is a higher-level token that represents a single atom within\n// the template language. Our template parsing first raises the raw token\n// stream to a sequence of templateToken, and then transforms the result into\n// an expression tree.\ntype templateToken interface {\n\ttemplateToken() templateToken\n}\n\ntype templateLiteralToken struct {\n\tVal      string\n\tSrcRange hcl.Range\n\tisTemplateToken\n}\n\ntype templateInterpToken struct {\n\tExpr     Expression\n\tSrcRange hcl.Range\n\tisTemplateToken\n}\n\ntype templateIfToken struct {\n\tCondExpr Expression\n\tSrcRange hcl.Range\n\tisTemplateToken\n}\n\ntype templateForToken struct {\n\tKeyVar   string // empty if ignoring key\n\tValVar   string\n\tCollExpr Expression\n\tSrcRange hcl.Range\n\tisTemplateToken\n}\n\ntype templateEndCtrlType int\n\nconst (\n\ttemplateEndIf templateEndCtrlType = iota\n\ttemplateElse\n\ttemplateEndFor\n)\n\ntype templateEndCtrlToken struct {\n\tType     templateEndCtrlType\n\tSrcRange hcl.Range\n\tisTemplateToken\n}\n\nfunc (t *templateEndCtrlToken) Name() string {\n\tswitch t.Type {\n\tcase templateEndIf:\n\t\treturn \"endif\"\n\tcase templateElse:\n\t\treturn \"else\"\n\tcase templateEndFor:\n\t\treturn \"endfor\"\n\tdefault:\n\t\t// should never happen\n\t\tpanic(\"invalid templateEndCtrlType\")\n\t}\n}\n\ntype templateEndToken struct {\n\tSrcRange hcl.Range\n\tisTemplateToken\n}\n\ntype isTemplateToken [0]int\n\nfunc (t isTemplateToken) templateToken() templateToken {\n\treturn t\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcl/hclsyntax/parser_traversal.go",
    "content": "package hclsyntax\n\nimport (\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// ParseTraversalAbs parses an absolute traversal that is assumed to consume\n// all of the remaining tokens in the peeker. The usual parser recovery\n// behavior is not supported here because traversals are not expected to\n// be parsed as part of a larger program.\nfunc (p *parser) ParseTraversalAbs() (hcl.Traversal, hcl.Diagnostics) {\n\tvar ret hcl.Traversal\n\tvar diags hcl.Diagnostics\n\n\t// Absolute traversal must always begin with a variable name\n\tvarTok := p.Read()\n\tif varTok.Type != TokenIdent {\n\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Variable name required\",\n\t\t\tDetail:   \"Must begin with a variable name.\",\n\t\t\tSubject:  &varTok.Range,\n\t\t})\n\t\treturn ret, diags\n\t}\n\n\tvarName := string(varTok.Bytes)\n\tret = append(ret, hcl.TraverseRoot{\n\t\tName:     varName,\n\t\tSrcRange: varTok.Range,\n\t})\n\n\tfor {\n\t\tnext := p.Peek()\n\n\t\tif next.Type == TokenEOF {\n\t\t\treturn ret, diags\n\t\t}\n\n\t\tswitch next.Type {\n\t\tcase TokenDot:\n\t\t\t// Attribute access\n\t\t\tdot := p.Read() // eat dot\n\t\t\tnameTok := p.Read()\n\t\t\tif nameTok.Type != TokenIdent {\n\t\t\t\tif nameTok.Type == TokenStar {\n\t\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\t\tSummary:  \"Attribute name required\",\n\t\t\t\t\t\tDetail:   \"Splat expressions (.*) may not be used here.\",\n\t\t\t\t\t\tSubject:  &nameTok.Range,\n\t\t\t\t\t\tContext:  hcl.RangeBetween(varTok.Range, nameTok.Range).Ptr(),\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\t\tSummary:  \"Attribute name required\",\n\t\t\t\t\t\tDetail:   \"Dot must be followed by attribute name.\",\n\t\t\t\t\t\tSubject:  &nameTok.Range,\n\t\t\t\t\t\tContext:  hcl.RangeBetween(varTok.Range, nameTok.Range).Ptr(),\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\treturn ret, diags\n\t\t\t}\n\n\t\t\tattrName := string(nameTok.Bytes)\n\t\t\tret = append(ret, hcl.TraverseAttr{\n\t\t\t\tName:     attrName,\n\t\t\t\tSrcRange: hcl.RangeBetween(dot.Range, nameTok.Range),\n\t\t\t})\n\t\tcase TokenOBrack:\n\t\t\t// Index\n\t\t\topen := p.Read() // eat open bracket\n\t\t\tnext := p.Peek()\n\n\t\t\tswitch next.Type {\n\t\t\tcase TokenNumberLit:\n\t\t\t\ttok := p.Read() // eat number\n\t\t\t\tnumVal, numDiags := p.numberLitValue(tok)\n\t\t\t\tdiags = append(diags, numDiags...)\n\n\t\t\t\tclose := p.Read()\n\t\t\t\tif close.Type != TokenCBrack {\n\t\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\t\tSummary:  \"Unclosed index brackets\",\n\t\t\t\t\t\tDetail:   \"Index key must be followed by a closing bracket.\",\n\t\t\t\t\t\tSubject:  &close.Range,\n\t\t\t\t\t\tContext:  hcl.RangeBetween(open.Range, close.Range).Ptr(),\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tret = append(ret, hcl.TraverseIndex{\n\t\t\t\t\tKey:      numVal,\n\t\t\t\t\tSrcRange: hcl.RangeBetween(open.Range, close.Range),\n\t\t\t\t})\n\n\t\t\t\tif diags.HasErrors() {\n\t\t\t\t\treturn ret, diags\n\t\t\t\t}\n\n\t\t\tcase TokenOQuote:\n\t\t\t\tstr, _, strDiags := p.parseQuotedStringLiteral()\n\t\t\t\tdiags = append(diags, strDiags...)\n\n\t\t\t\tclose := p.Read()\n\t\t\t\tif close.Type != TokenCBrack {\n\t\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\t\tSummary:  \"Unclosed index brackets\",\n\t\t\t\t\t\tDetail:   \"Index key must be followed by a closing bracket.\",\n\t\t\t\t\t\tSubject:  &close.Range,\n\t\t\t\t\t\tContext:  hcl.RangeBetween(open.Range, close.Range).Ptr(),\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tret = append(ret, hcl.TraverseIndex{\n\t\t\t\t\tKey:      cty.StringVal(str),\n\t\t\t\t\tSrcRange: hcl.RangeBetween(open.Range, close.Range),\n\t\t\t\t})\n\n\t\t\t\tif diags.HasErrors() {\n\t\t\t\t\treturn ret, diags\n\t\t\t\t}\n\n\t\t\tdefault:\n\t\t\t\tif next.Type == TokenStar {\n\t\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\t\tSummary:  \"Attribute name required\",\n\t\t\t\t\t\tDetail:   \"Splat expressions ([*]) may not be used here.\",\n\t\t\t\t\t\tSubject:  &next.Range,\n\t\t\t\t\t\tContext:  hcl.RangeBetween(varTok.Range, next.Range).Ptr(),\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\t\tSummary:  \"Index value required\",\n\t\t\t\t\t\tDetail:   \"Index brackets must contain either a literal number or a literal string.\",\n\t\t\t\t\t\tSubject:  &next.Range,\n\t\t\t\t\t\tContext:  hcl.RangeBetween(varTok.Range, next.Range).Ptr(),\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\treturn ret, diags\n\t\t\t}\n\n\t\tdefault:\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Invalid character\",\n\t\t\t\tDetail:   \"Expected an attribute access or an index operator.\",\n\t\t\t\tSubject:  &next.Range,\n\t\t\t\tContext:  hcl.RangeBetween(varTok.Range, next.Range).Ptr(),\n\t\t\t})\n\t\t\treturn ret, diags\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcl/hclsyntax/peeker.go",
    "content": "package hclsyntax\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"path/filepath\"\n\t\"runtime\"\n\t\"strings\"\n\n\t\"github.com/hashicorp/hcl2/hcl\"\n)\n\n// This is set to true at init() time in tests, to enable more useful output\n// if a stack discipline error is detected. It should not be enabled in\n// normal mode since there is a performance penalty from accessing the\n// runtime stack to produce the traces, but could be temporarily set to\n// true for debugging if desired.\nvar tracePeekerNewlinesStack = false\n\ntype peeker struct {\n\tTokens    Tokens\n\tNextIndex int\n\n\tIncludeComments      bool\n\tIncludeNewlinesStack []bool\n\n\t// used only when tracePeekerNewlinesStack is set\n\tnewlineStackChanges []peekerNewlineStackChange\n}\n\n// for use in debugging the stack usage only\ntype peekerNewlineStackChange struct {\n\tPushing bool // if false, then popping\n\tFrame   runtime.Frame\n\tInclude bool\n}\n\nfunc newPeeker(tokens Tokens, includeComments bool) *peeker {\n\treturn &peeker{\n\t\tTokens:          tokens,\n\t\tIncludeComments: includeComments,\n\n\t\tIncludeNewlinesStack: []bool{true},\n\t}\n}\n\nfunc (p *peeker) Peek() Token {\n\tret, _ := p.nextToken()\n\treturn ret\n}\n\nfunc (p *peeker) Read() Token {\n\tret, nextIdx := p.nextToken()\n\tp.NextIndex = nextIdx\n\treturn ret\n}\n\nfunc (p *peeker) NextRange() hcl.Range {\n\treturn p.Peek().Range\n}\n\nfunc (p *peeker) PrevRange() hcl.Range {\n\tif p.NextIndex == 0 {\n\t\treturn p.NextRange()\n\t}\n\n\treturn p.Tokens[p.NextIndex-1].Range\n}\n\nfunc (p *peeker) nextToken() (Token, int) {\n\tfor i := p.NextIndex; i < len(p.Tokens); i++ {\n\t\ttok := p.Tokens[i]\n\t\tswitch tok.Type {\n\t\tcase TokenComment:\n\t\t\tif !p.IncludeComments {\n\t\t\t\t// Single-line comment tokens, starting with # or //, absorb\n\t\t\t\t// the trailing newline that terminates them as part of their\n\t\t\t\t// bytes. When we're filtering out comments, we must as a\n\t\t\t\t// special case transform these to newline tokens in order\n\t\t\t\t// to properly parse newline-terminated block items.\n\n\t\t\t\tif p.includingNewlines() {\n\t\t\t\t\tif len(tok.Bytes) > 0 && tok.Bytes[len(tok.Bytes)-1] == '\\n' {\n\t\t\t\t\t\tfakeNewline := Token{\n\t\t\t\t\t\t\tType:  TokenNewline,\n\t\t\t\t\t\t\tBytes: tok.Bytes[len(tok.Bytes)-1 : len(tok.Bytes)],\n\n\t\t\t\t\t\t\t// We use the whole token range as the newline\n\t\t\t\t\t\t\t// range, even though that's a little... weird,\n\t\t\t\t\t\t\t// because otherwise we'd need to go count\n\t\t\t\t\t\t\t// characters again in order to figure out the\n\t\t\t\t\t\t\t// column of the newline, and that complexity\n\t\t\t\t\t\t\t// isn't justified when ranges of newlines are\n\t\t\t\t\t\t\t// so rarely printed anyway.\n\t\t\t\t\t\t\tRange: tok.Range,\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn fakeNewline, i + 1\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcontinue\n\t\t\t}\n\t\tcase TokenNewline:\n\t\t\tif !p.includingNewlines() {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\treturn tok, i + 1\n\t}\n\n\t// if we fall out here then we'll return the EOF token, and leave\n\t// our index pointed off the end of the array so we'll keep\n\t// returning EOF in future too.\n\treturn p.Tokens[len(p.Tokens)-1], len(p.Tokens)\n}\n\nfunc (p *peeker) includingNewlines() bool {\n\treturn p.IncludeNewlinesStack[len(p.IncludeNewlinesStack)-1]\n}\n\nfunc (p *peeker) PushIncludeNewlines(include bool) {\n\tif tracePeekerNewlinesStack {\n\t\t// Record who called us so that we can more easily track down any\n\t\t// mismanagement of the stack in the parser.\n\t\tcallers := []uintptr{0}\n\t\truntime.Callers(2, callers)\n\t\tframes := runtime.CallersFrames(callers)\n\t\tframe, _ := frames.Next()\n\t\tp.newlineStackChanges = append(p.newlineStackChanges, peekerNewlineStackChange{\n\t\t\ttrue, frame, include,\n\t\t})\n\t}\n\n\tp.IncludeNewlinesStack = append(p.IncludeNewlinesStack, include)\n}\n\nfunc (p *peeker) PopIncludeNewlines() bool {\n\tstack := p.IncludeNewlinesStack\n\tremain, ret := stack[:len(stack)-1], stack[len(stack)-1]\n\tp.IncludeNewlinesStack = remain\n\n\tif tracePeekerNewlinesStack {\n\t\t// Record who called us so that we can more easily track down any\n\t\t// mismanagement of the stack in the parser.\n\t\tcallers := []uintptr{0}\n\t\truntime.Callers(2, callers)\n\t\tframes := runtime.CallersFrames(callers)\n\t\tframe, _ := frames.Next()\n\t\tp.newlineStackChanges = append(p.newlineStackChanges, peekerNewlineStackChange{\n\t\t\tfalse, frame, ret,\n\t\t})\n\t}\n\n\treturn ret\n}\n\n// AssertEmptyNewlinesStack checks if the IncludeNewlinesStack is empty, doing\n// panicking if it is not. This can be used to catch stack mismanagement that\n// might otherwise just cause confusing downstream errors.\n//\n// This function is a no-op if the stack is empty when called.\n//\n// If newlines stack tracing is enabled by setting the global variable\n// tracePeekerNewlinesStack at init time, a full log of all of the push/pop\n// calls will be produced to help identify which caller in the parser is\n// misbehaving.\nfunc (p *peeker) AssertEmptyIncludeNewlinesStack() {\n\tif len(p.IncludeNewlinesStack) != 1 {\n\t\t// Should never happen; indicates mismanagement of the stack inside\n\t\t// the parser.\n\t\tif p.newlineStackChanges != nil { // only if traceNewlinesStack is enabled above\n\t\t\tpanic(fmt.Errorf(\n\t\t\t\t\"non-empty IncludeNewlinesStack after parse with %d calls unaccounted for:\\n%s\",\n\t\t\t\tlen(p.IncludeNewlinesStack)-1,\n\t\t\t\tformatPeekerNewlineStackChanges(p.newlineStackChanges),\n\t\t\t))\n\t\t} else {\n\t\t\tpanic(fmt.Errorf(\"non-empty IncludeNewlinesStack after parse: %#v\", p.IncludeNewlinesStack))\n\t\t}\n\t}\n}\n\nfunc formatPeekerNewlineStackChanges(changes []peekerNewlineStackChange) string {\n\tindent := 0\n\tvar buf bytes.Buffer\n\tfor _, change := range changes {\n\t\tfuncName := change.Frame.Function\n\t\tif idx := strings.LastIndexByte(funcName, '.'); idx != -1 {\n\t\t\tfuncName = funcName[idx+1:]\n\t\t}\n\t\tfilename := change.Frame.File\n\t\tif idx := strings.LastIndexByte(filename, filepath.Separator); idx != -1 {\n\t\t\tfilename = filename[idx+1:]\n\t\t}\n\n\t\tswitch change.Pushing {\n\n\t\tcase true:\n\t\t\tbuf.WriteString(strings.Repeat(\"    \", indent))\n\t\t\tfmt.Fprintf(&buf, \"PUSH %#v (%s at %s:%d)\\n\", change.Include, funcName, filename, change.Frame.Line)\n\t\t\tindent++\n\n\t\tcase false:\n\t\t\tindent--\n\t\t\tbuf.WriteString(strings.Repeat(\"    \", indent))\n\t\t\tfmt.Fprintf(&buf, \"POP %#v (%s at %s:%d)\\n\", change.Include, funcName, filename, change.Frame.Line)\n\n\t\t}\n\t}\n\treturn buf.String()\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcl/hclsyntax/public.go",
    "content": "package hclsyntax\n\nimport (\n\t\"github.com/hashicorp/hcl2/hcl\"\n)\n\n// ParseConfig parses the given buffer as a whole HCL config file, returning\n// a *hcl.File representing its contents. If HasErrors called on the returned\n// diagnostics returns true, the returned body is likely to be incomplete\n// and should therefore be used with care.\n//\n// The body in the returned file has dynamic type *hclsyntax.Body, so callers\n// may freely type-assert this to get access to the full hclsyntax API in\n// situations where detailed access is required. However, most common use-cases\n// should be served using the hcl.Body interface to ensure compatibility with\n// other configurationg syntaxes, such as JSON.\nfunc ParseConfig(src []byte, filename string, start hcl.Pos) (*hcl.File, hcl.Diagnostics) {\n\ttokens, diags := LexConfig(src, filename, start)\n\tpeeker := newPeeker(tokens, false)\n\tparser := &parser{peeker: peeker}\n\tbody, parseDiags := parser.ParseBody(TokenEOF)\n\tdiags = append(diags, parseDiags...)\n\n\t// Panic if the parser uses incorrect stack discipline with the peeker's\n\t// newlines stack, since otherwise it will produce confusing downstream\n\t// errors.\n\tpeeker.AssertEmptyIncludeNewlinesStack()\n\n\treturn &hcl.File{\n\t\tBody:  body,\n\t\tBytes: src,\n\n\t\tNav: navigation{\n\t\t\troot: body,\n\t\t},\n\t}, diags\n}\n\n// ParseExpression parses the given buffer as a standalone HCL expression,\n// returning it as an instance of Expression.\nfunc ParseExpression(src []byte, filename string, start hcl.Pos) (Expression, hcl.Diagnostics) {\n\ttokens, diags := LexExpression(src, filename, start)\n\tpeeker := newPeeker(tokens, false)\n\tparser := &parser{peeker: peeker}\n\n\t// Bare expressions are always parsed in  \"ignore newlines\" mode, as if\n\t// they were wrapped in parentheses.\n\tparser.PushIncludeNewlines(false)\n\n\texpr, parseDiags := parser.ParseExpression()\n\tdiags = append(diags, parseDiags...)\n\n\tnext := parser.Peek()\n\tif next.Type != TokenEOF && !parser.recovery {\n\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Extra characters after expression\",\n\t\t\tDetail:   \"An expression was successfully parsed, but extra characters were found after it.\",\n\t\t\tSubject:  &next.Range,\n\t\t})\n\t}\n\n\tparser.PopIncludeNewlines()\n\n\t// Panic if the parser uses incorrect stack discipline with the peeker's\n\t// newlines stack, since otherwise it will produce confusing downstream\n\t// errors.\n\tpeeker.AssertEmptyIncludeNewlinesStack()\n\n\treturn expr, diags\n}\n\n// ParseTemplate parses the given buffer as a standalone HCL template,\n// returning it as an instance of Expression.\nfunc ParseTemplate(src []byte, filename string, start hcl.Pos) (Expression, hcl.Diagnostics) {\n\ttokens, diags := LexTemplate(src, filename, start)\n\tpeeker := newPeeker(tokens, false)\n\tparser := &parser{peeker: peeker}\n\texpr, parseDiags := parser.ParseTemplate()\n\tdiags = append(diags, parseDiags...)\n\n\t// Panic if the parser uses incorrect stack discipline with the peeker's\n\t// newlines stack, since otherwise it will produce confusing downstream\n\t// errors.\n\tpeeker.AssertEmptyIncludeNewlinesStack()\n\n\treturn expr, diags\n}\n\n// ParseTraversalAbs parses the given buffer as a standalone absolute traversal.\n//\n// Parsing as a traversal is more limited than parsing as an expession since\n// it allows only attribute and indexing operations on variables. Traverals\n// are useful as a syntax for referring to objects without necessarily\n// evaluating them.\nfunc ParseTraversalAbs(src []byte, filename string, start hcl.Pos) (hcl.Traversal, hcl.Diagnostics) {\n\ttokens, diags := LexExpression(src, filename, start)\n\tpeeker := newPeeker(tokens, false)\n\tparser := &parser{peeker: peeker}\n\n\t// Bare traverals are always parsed in  \"ignore newlines\" mode, as if\n\t// they were wrapped in parentheses.\n\tparser.PushIncludeNewlines(false)\n\n\texpr, parseDiags := parser.ParseTraversalAbs()\n\tdiags = append(diags, parseDiags...)\n\n\tparser.PopIncludeNewlines()\n\n\t// Panic if the parser uses incorrect stack discipline with the peeker's\n\t// newlines stack, since otherwise it will produce confusing downstream\n\t// errors.\n\tpeeker.AssertEmptyIncludeNewlinesStack()\n\n\treturn expr, diags\n}\n\n// LexConfig performs lexical analysis on the given buffer, treating it as a\n// whole HCL config file, and returns the resulting tokens.\n//\n// Only minimal validation is done during lexical analysis, so the returned\n// diagnostics may include errors about lexical issues such as bad character\n// encodings or unrecognized characters, but full parsing is required to\n// detect _all_ syntax errors.\nfunc LexConfig(src []byte, filename string, start hcl.Pos) (Tokens, hcl.Diagnostics) {\n\ttokens := scanTokens(src, filename, start, scanNormal)\n\tdiags := checkInvalidTokens(tokens)\n\treturn tokens, diags\n}\n\n// LexExpression performs lexical analysis on the given buffer, treating it as\n// a standalone HCL expression, and returns the resulting tokens.\n//\n// Only minimal validation is done during lexical analysis, so the returned\n// diagnostics may include errors about lexical issues such as bad character\n// encodings or unrecognized characters, but full parsing is required to\n// detect _all_ syntax errors.\nfunc LexExpression(src []byte, filename string, start hcl.Pos) (Tokens, hcl.Diagnostics) {\n\t// This is actually just the same thing as LexConfig, since configs\n\t// and expressions lex in the same way.\n\ttokens := scanTokens(src, filename, start, scanNormal)\n\tdiags := checkInvalidTokens(tokens)\n\treturn tokens, diags\n}\n\n// LexTemplate performs lexical analysis on the given buffer, treating it as a\n// standalone HCL template, and returns the resulting tokens.\n//\n// Only minimal validation is done during lexical analysis, so the returned\n// diagnostics may include errors about lexical issues such as bad character\n// encodings or unrecognized characters, but full parsing is required to\n// detect _all_ syntax errors.\nfunc LexTemplate(src []byte, filename string, start hcl.Pos) (Tokens, hcl.Diagnostics) {\n\ttokens := scanTokens(src, filename, start, scanTemplate)\n\tdiags := checkInvalidTokens(tokens)\n\treturn tokens, diags\n}\n\n// ValidIdentifier tests if the given string could be a valid identifier in\n// a native syntax expression.\n//\n// This is useful when accepting names from the user that will be used as\n// variable or attribute names in the scope, to ensure that any name chosen\n// will be traversable using the variable or attribute traversal syntax.\nfunc ValidIdentifier(s string) bool {\n\t// This is a kinda-expensive way to do something pretty simple, but it\n\t// is easiest to do with our existing scanner-related infrastructure here\n\t// and nobody should be validating identifiers in a tight loop.\n\ttokens := scanTokens([]byte(s), \"\", hcl.Pos{}, scanIdentOnly)\n\treturn len(tokens) == 2 && tokens[0].Type == TokenIdent && tokens[1].Type == TokenEOF\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcl/hclsyntax/scan_string_lit.go",
    "content": "//line scan_string_lit.rl:1\n\npackage hclsyntax\n\n// This file is generated from scan_string_lit.rl. DO NOT EDIT.\n\n//line scan_string_lit.go:9\nvar _hclstrtok_actions []byte = []byte{\n\t0, 1, 0, 1, 1, 2, 1, 0,\n}\n\nvar _hclstrtok_key_offsets []byte = []byte{\n\t0, 0, 2, 4, 6, 10, 14, 18,\n\t22, 27, 31, 36, 41, 46, 51, 57,\n\t62, 74, 85, 96, 107, 118, 129, 140,\n\t151,\n}\n\nvar _hclstrtok_trans_keys []byte = []byte{\n\t128, 191, 128, 191, 128, 191, 10, 13,\n\t36, 37, 10, 13, 36, 37, 10, 13,\n\t36, 37, 10, 13, 36, 37, 10, 13,\n\t36, 37, 123, 10, 13, 36, 37, 10,\n\t13, 36, 37, 92, 10, 13, 36, 37,\n\t92, 10, 13, 36, 37, 92, 10, 13,\n\t36, 37, 92, 10, 13, 36, 37, 92,\n\t123, 10, 13, 36, 37, 92, 85, 117,\n\t128, 191, 192, 223, 224, 239, 240, 247,\n\t248, 255, 10, 13, 36, 37, 92, 48,\n\t57, 65, 70, 97, 102, 10, 13, 36,\n\t37, 92, 48, 57, 65, 70, 97, 102,\n\t10, 13, 36, 37, 92, 48, 57, 65,\n\t70, 97, 102, 10, 13, 36, 37, 92,\n\t48, 57, 65, 70, 97, 102, 10, 13,\n\t36, 37, 92, 48, 57, 65, 70, 97,\n\t102, 10, 13, 36, 37, 92, 48, 57,\n\t65, 70, 97, 102, 10, 13, 36, 37,\n\t92, 48, 57, 65, 70, 97, 102, 10,\n\t13, 36, 37, 92, 48, 57, 65, 70,\n\t97, 102,\n}\n\nvar _hclstrtok_single_lengths []byte = []byte{\n\t0, 0, 0, 0, 4, 4, 4, 4,\n\t5, 4, 5, 5, 5, 5, 6, 5,\n\t2, 5, 5, 5, 5, 5, 5, 5,\n\t5,\n}\n\nvar _hclstrtok_range_lengths []byte = []byte{\n\t0, 1, 1, 1, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t5, 3, 3, 3, 3, 3, 3, 3,\n\t3,\n}\n\nvar _hclstrtok_index_offsets []byte = []byte{\n\t0, 0, 2, 4, 6, 11, 16, 21,\n\t26, 32, 37, 43, 49, 55, 61, 68,\n\t74, 82, 91, 100, 109, 118, 127, 136,\n\t145,\n}\n\nvar _hclstrtok_indicies []byte = []byte{\n\t0, 1, 2, 1, 3, 1, 5, 6,\n\t7, 8, 4, 10, 11, 12, 13, 9,\n\t14, 11, 12, 13, 9, 10, 11, 15,\n\t13, 9, 10, 11, 12, 13, 14, 9,\n\t10, 11, 12, 15, 9, 17, 18, 19,\n\t20, 21, 16, 23, 24, 25, 26, 27,\n\t22, 0, 24, 25, 26, 27, 22, 23,\n\t24, 28, 26, 27, 22, 23, 24, 25,\n\t26, 27, 0, 22, 23, 24, 25, 28,\n\t27, 22, 29, 30, 22, 2, 3, 31,\n\t22, 0, 23, 24, 25, 26, 27, 32,\n\t32, 32, 22, 23, 24, 25, 26, 27,\n\t33, 33, 33, 22, 23, 24, 25, 26,\n\t27, 34, 34, 34, 22, 23, 24, 25,\n\t26, 27, 30, 30, 30, 22, 23, 24,\n\t25, 26, 27, 35, 35, 35, 22, 23,\n\t24, 25, 26, 27, 36, 36, 36, 22,\n\t23, 24, 25, 26, 27, 37, 37, 37,\n\t22, 23, 24, 25, 26, 27, 0, 0,\n\t0, 22,\n}\n\nvar _hclstrtok_trans_targs []byte = []byte{\n\t11, 0, 1, 2, 4, 5, 6, 7,\n\t9, 4, 5, 6, 7, 9, 5, 8,\n\t10, 11, 12, 13, 15, 16, 10, 11,\n\t12, 13, 15, 16, 14, 17, 21, 3,\n\t18, 19, 20, 22, 23, 24,\n}\n\nvar _hclstrtok_trans_actions []byte = []byte{\n\t0, 0, 0, 0, 0, 1, 1, 1,\n\t1, 3, 5, 5, 5, 5, 0, 0,\n\t0, 1, 1, 1, 1, 1, 3, 5,\n\t5, 5, 5, 5, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0,\n}\n\nvar _hclstrtok_eof_actions []byte = []byte{\n\t0, 0, 0, 0, 0, 3, 3, 3,\n\t3, 3, 0, 3, 3, 3, 3, 3,\n\t3, 3, 3, 3, 3, 3, 3, 3,\n\t3,\n}\n\nconst hclstrtok_start int = 4\nconst hclstrtok_first_final int = 4\nconst hclstrtok_error int = 0\n\nconst hclstrtok_en_quoted int = 10\nconst hclstrtok_en_unquoted int = 4\n\n//line scan_string_lit.rl:10\n\nfunc scanStringLit(data []byte, quoted bool) [][]byte {\n\tvar ret [][]byte\n\n//line scan_string_lit.rl:61\n\n\t// Ragel state\n\tp := 0          // \"Pointer\" into data\n\tpe := len(data) // End-of-data \"pointer\"\n\tts := 0\n\tte := 0\n\teof := pe\n\n\tvar cs int // current state\n\tswitch {\n\tcase quoted:\n\t\tcs = hclstrtok_en_quoted\n\tdefault:\n\t\tcs = hclstrtok_en_unquoted\n\t}\n\n\t// Make Go compiler happy\n\t_ = ts\n\t_ = eof\n\n\t/*token := func () {\n\t    ret = append(ret, data[ts:te])\n\t}*/\n\n//line scan_string_lit.go:154\n\t{\n\t}\n\n//line scan_string_lit.go:158\n\t{\n\t\tvar _klen int\n\t\tvar _trans int\n\t\tvar _acts int\n\t\tvar _nacts uint\n\t\tvar _keys int\n\t\tif p == pe {\n\t\t\tgoto _test_eof\n\t\t}\n\t\tif cs == 0 {\n\t\t\tgoto _out\n\t\t}\n\t_resume:\n\t\t_keys = int(_hclstrtok_key_offsets[cs])\n\t\t_trans = int(_hclstrtok_index_offsets[cs])\n\n\t\t_klen = int(_hclstrtok_single_lengths[cs])\n\t\tif _klen > 0 {\n\t\t\t_lower := int(_keys)\n\t\t\tvar _mid int\n\t\t\t_upper := int(_keys + _klen - 1)\n\t\t\tfor {\n\t\t\t\tif _upper < _lower {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\t_mid = _lower + ((_upper - _lower) >> 1)\n\t\t\t\tswitch {\n\t\t\t\tcase data[p] < _hclstrtok_trans_keys[_mid]:\n\t\t\t\t\t_upper = _mid - 1\n\t\t\t\tcase data[p] > _hclstrtok_trans_keys[_mid]:\n\t\t\t\t\t_lower = _mid + 1\n\t\t\t\tdefault:\n\t\t\t\t\t_trans += int(_mid - int(_keys))\n\t\t\t\t\tgoto _match\n\t\t\t\t}\n\t\t\t}\n\t\t\t_keys += _klen\n\t\t\t_trans += _klen\n\t\t}\n\n\t\t_klen = int(_hclstrtok_range_lengths[cs])\n\t\tif _klen > 0 {\n\t\t\t_lower := int(_keys)\n\t\t\tvar _mid int\n\t\t\t_upper := int(_keys + (_klen << 1) - 2)\n\t\t\tfor {\n\t\t\t\tif _upper < _lower {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\t_mid = _lower + (((_upper - _lower) >> 1) & ^1)\n\t\t\t\tswitch {\n\t\t\t\tcase data[p] < _hclstrtok_trans_keys[_mid]:\n\t\t\t\t\t_upper = _mid - 2\n\t\t\t\tcase data[p] > _hclstrtok_trans_keys[_mid+1]:\n\t\t\t\t\t_lower = _mid + 2\n\t\t\t\tdefault:\n\t\t\t\t\t_trans += int((_mid - int(_keys)) >> 1)\n\t\t\t\t\tgoto _match\n\t\t\t\t}\n\t\t\t}\n\t\t\t_trans += _klen\n\t\t}\n\n\t_match:\n\t\t_trans = int(_hclstrtok_indicies[_trans])\n\t\tcs = int(_hclstrtok_trans_targs[_trans])\n\n\t\tif _hclstrtok_trans_actions[_trans] == 0 {\n\t\t\tgoto _again\n\t\t}\n\n\t\t_acts = int(_hclstrtok_trans_actions[_trans])\n\t\t_nacts = uint(_hclstrtok_actions[_acts])\n\t\t_acts++\n\t\tfor ; _nacts > 0; _nacts-- {\n\t\t\t_acts++\n\t\t\tswitch _hclstrtok_actions[_acts-1] {\n\t\t\tcase 0:\n//line scan_string_lit.rl:40\n\n\t\t\t\t// If te is behind p then we've skipped over some literal\n\t\t\t\t// characters which we must now return.\n\t\t\t\tif te < p {\n\t\t\t\t\tret = append(ret, data[te:p])\n\t\t\t\t}\n\t\t\t\tts = p\n\n\t\t\tcase 1:\n//line scan_string_lit.rl:48\n\n\t\t\t\tte = p\n\t\t\t\tret = append(ret, data[ts:te])\n\n//line scan_string_lit.go:253\n\t\t\t}\n\t\t}\n\n\t_again:\n\t\tif cs == 0 {\n\t\t\tgoto _out\n\t\t}\n\t\tp++\n\t\tif p != pe {\n\t\t\tgoto _resume\n\t\t}\n\t_test_eof:\n\t\t{\n\t\t}\n\t\tif p == eof {\n\t\t\t__acts := _hclstrtok_eof_actions[cs]\n\t\t\t__nacts := uint(_hclstrtok_actions[__acts])\n\t\t\t__acts++\n\t\t\tfor ; __nacts > 0; __nacts-- {\n\t\t\t\t__acts++\n\t\t\t\tswitch _hclstrtok_actions[__acts-1] {\n\t\t\t\tcase 1:\n//line scan_string_lit.rl:48\n\n\t\t\t\t\tte = p\n\t\t\t\t\tret = append(ret, data[ts:te])\n\n//line scan_string_lit.go:278\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t_out:\n\t\t{\n\t\t}\n\t}\n\n//line scan_string_lit.rl:89\n\n\tif te < p {\n\t\t// Collect any leftover literal characters at the end of the input\n\t\tret = append(ret, data[te:p])\n\t}\n\n\t// If we fall out here without being in a final state then we've\n\t// encountered something that the scanner can't match, which should\n\t// be impossible (the scanner matches all bytes _somehow_) but we'll\n\t// tolerate it and let the caller deal with it.\n\tif cs < hclstrtok_first_final {\n\t\tret = append(ret, data[p:len(data)])\n\t}\n\n\treturn ret\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcl/hclsyntax/scan_tokens.go",
    "content": "//line scan_tokens.rl:1\n\npackage hclsyntax\n\nimport (\n\t\"bytes\"\n\n\t\"github.com/hashicorp/hcl2/hcl\"\n)\n\n// This file is generated from scan_tokens.rl. DO NOT EDIT.\n\n//line scan_tokens.go:15\nvar _hcltok_actions []byte = []byte{\n\t0, 1, 0, 1, 1, 1, 3, 1, 4,\n\t1, 7, 1, 8, 1, 9, 1, 10,\n\t1, 11, 1, 12, 1, 13, 1, 14,\n\t1, 15, 1, 16, 1, 17, 1, 18,\n\t1, 19, 1, 20, 1, 23, 1, 24,\n\t1, 25, 1, 26, 1, 27, 1, 28,\n\t1, 29, 1, 30, 1, 31, 1, 32,\n\t1, 35, 1, 36, 1, 37, 1, 38,\n\t1, 39, 1, 40, 1, 41, 1, 42,\n\t1, 43, 1, 44, 1, 47, 1, 48,\n\t1, 49, 1, 50, 1, 51, 1, 52,\n\t1, 53, 1, 56, 1, 57, 1, 58,\n\t1, 59, 1, 60, 1, 61, 1, 62,\n\t1, 63, 1, 64, 1, 65, 1, 66,\n\t1, 67, 1, 68, 1, 69, 1, 70,\n\t1, 71, 1, 72, 1, 73, 1, 74,\n\t1, 75, 1, 76, 1, 77, 1, 78,\n\t1, 79, 1, 80, 1, 81, 1, 82,\n\t1, 83, 1, 84, 1, 85, 2, 0,\n\t14, 2, 0, 25, 2, 0, 29, 2,\n\t0, 37, 2, 0, 41, 2, 1, 2,\n\t2, 4, 5, 2, 4, 6, 2, 4,\n\t21, 2, 4, 22, 2, 4, 33, 2,\n\t4, 34, 2, 4, 45, 2, 4, 46,\n\t2, 4, 54, 2, 4, 55,\n}\n\nvar _hcltok_key_offsets []int16 = []int16{\n\t0, 0, 1, 2, 4, 9, 13, 15,\n\t57, 98, 144, 145, 149, 155, 155, 157,\n\t159, 168, 174, 181, 182, 185, 186, 190,\n\t195, 204, 208, 212, 220, 222, 224, 226,\n\t229, 261, 263, 265, 269, 273, 276, 287,\n\t300, 319, 332, 348, 360, 376, 391, 412,\n\t422, 434, 445, 459, 474, 484, 496, 505,\n\t517, 519, 523, 544, 553, 563, 569, 575,\n\t576, 625, 627, 631, 633, 639, 646, 654,\n\t661, 664, 670, 674, 678, 680, 684, 688,\n\t692, 698, 706, 714, 720, 722, 726, 728,\n\t734, 738, 742, 746, 750, 755, 762, 768,\n\t770, 772, 776, 778, 784, 788, 792, 802,\n\t807, 821, 836, 838, 846, 848, 853, 867,\n\t872, 874, 878, 879, 883, 889, 895, 905,\n\t915, 926, 934, 937, 940, 944, 948, 950,\n\t953, 953, 956, 958, 988, 990, 992, 996,\n\t1001, 1005, 1010, 1012, 1014, 1016, 1025, 1029,\n\t1033, 1039, 1041, 1049, 1057, 1069, 1072, 1078,\n\t1082, 1084, 1088, 1108, 1110, 1112, 1123, 1129,\n\t1131, 1133, 1135, 1139, 1145, 1151, 1153, 1158,\n\t1162, 1164, 1172, 1190, 1230, 1240, 1244, 1246,\n\t1248, 1249, 1253, 1257, 1261, 1265, 1269, 1274,\n\t1278, 1282, 1286, 1288, 1290, 1294, 1304, 1308,\n\t1310, 1314, 1318, 1322, 1335, 1337, 1339, 1343,\n\t1345, 1349, 1351, 1353, 1383, 1387, 1391, 1395,\n\t1398, 1405, 1410, 1421, 1425, 1441, 1455, 1459,\n\t1464, 1468, 1472, 1478, 1480, 1486, 1488, 1492,\n\t1494, 1500, 1505, 1510, 1520, 1522, 1524, 1528,\n\t1532, 1534, 1547, 1549, 1553, 1557, 1565, 1567,\n\t1571, 1573, 1574, 1577, 1582, 1584, 1586, 1590,\n\t1592, 1596, 1602, 1622, 1628, 1634, 1636, 1637,\n\t1647, 1648, 1656, 1663, 1665, 1668, 1670, 1672,\n\t1674, 1679, 1683, 1687, 1692, 1702, 1712, 1716,\n\t1720, 1734, 1760, 1770, 1772, 1774, 1777, 1779,\n\t1782, 1784, 1788, 1790, 1791, 1795, 1797, 1800,\n\t1807, 1815, 1817, 1819, 1823, 1825, 1831, 1842,\n\t1845, 1847, 1851, 1856, 1886, 1891, 1893, 1896,\n\t1901, 1915, 1922, 1936, 1941, 1954, 1958, 1971,\n\t1976, 1994, 1995, 2004, 2008, 2020, 2025, 2032,\n\t2039, 2046, 2048, 2052, 2074, 2079, 2080, 2084,\n\t2086, 2136, 2139, 2150, 2154, 2156, 2162, 2168,\n\t2170, 2175, 2177, 2181, 2183, 2184, 2186, 2188,\n\t2194, 2196, 2198, 2202, 2208, 2221, 2223, 2229,\n\t2233, 2241, 2252, 2260, 2263, 2293, 2299, 2302,\n\t2307, 2309, 2313, 2317, 2321, 2323, 2330, 2332,\n\t2341, 2348, 2356, 2358, 2378, 2390, 2394, 2396,\n\t2414, 2453, 2455, 2459, 2461, 2468, 2472, 2500,\n\t2502, 2504, 2506, 2508, 2511, 2513, 2517, 2521,\n\t2523, 2526, 2528, 2530, 2533, 2535, 2537, 2538,\n\t2540, 2542, 2546, 2550, 2553, 2566, 2568, 2574,\n\t2578, 2580, 2584, 2588, 2602, 2605, 2614, 2616,\n\t2620, 2626, 2626, 2628, 2630, 2639, 2645, 2652,\n\t2653, 2656, 2657, 2661, 2666, 2675, 2679, 2683,\n\t2691, 2693, 2695, 2697, 2700, 2732, 2734, 2736,\n\t2740, 2744, 2747, 2758, 2771, 2790, 2803, 2819,\n\t2831, 2847, 2862, 2883, 2893, 2905, 2916, 2930,\n\t2945, 2955, 2967, 2976, 2988, 2990, 2994, 3015,\n\t3024, 3034, 3040, 3046, 3047, 3096, 3098, 3102,\n\t3104, 3110, 3117, 3125, 3132, 3135, 3141, 3145,\n\t3149, 3151, 3155, 3159, 3163, 3169, 3177, 3185,\n\t3191, 3193, 3197, 3199, 3205, 3209, 3213, 3217,\n\t3221, 3226, 3233, 3239, 3241, 3243, 3247, 3249,\n\t3255, 3259, 3263, 3273, 3278, 3292, 3307, 3309,\n\t3317, 3319, 3324, 3338, 3343, 3345, 3349, 3350,\n\t3354, 3360, 3366, 3376, 3386, 3397, 3405, 3408,\n\t3411, 3415, 3419, 3421, 3424, 3424, 3427, 3429,\n\t3459, 3461, 3463, 3467, 3472, 3476, 3481, 3483,\n\t3485, 3487, 3496, 3500, 3504, 3510, 3512, 3520,\n\t3528, 3540, 3543, 3549, 3553, 3555, 3559, 3579,\n\t3581, 3583, 3594, 3600, 3602, 3604, 3606, 3610,\n\t3616, 3622, 3624, 3629, 3633, 3635, 3643, 3661,\n\t3701, 3711, 3715, 3717, 3719, 3720, 3724, 3728,\n\t3732, 3736, 3740, 3745, 3749, 3753, 3757, 3759,\n\t3761, 3765, 3775, 3779, 3781, 3785, 3789, 3793,\n\t3806, 3808, 3810, 3814, 3816, 3820, 3822, 3824,\n\t3854, 3858, 3862, 3866, 3869, 3876, 3881, 3892,\n\t3896, 3912, 3926, 3930, 3935, 3939, 3943, 3949,\n\t3951, 3957, 3959, 3963, 3965, 3971, 3976, 3981,\n\t3991, 3993, 3995, 3999, 4003, 4005, 4018, 4020,\n\t4024, 4028, 4036, 4038, 4042, 4044, 4045, 4048,\n\t4053, 4055, 4057, 4061, 4063, 4067, 4073, 4093,\n\t4099, 4105, 4107, 4108, 4118, 4119, 4127, 4134,\n\t4136, 4139, 4141, 4143, 4145, 4150, 4154, 4158,\n\t4163, 4173, 4183, 4187, 4191, 4205, 4231, 4241,\n\t4243, 4245, 4248, 4250, 4253, 4255, 4259, 4261,\n\t4262, 4266, 4268, 4270, 4277, 4281, 4288, 4295,\n\t4304, 4320, 4332, 4350, 4361, 4373, 4381, 4399,\n\t4407, 4437, 4440, 4450, 4460, 4472, 4483, 4492,\n\t4505, 4517, 4521, 4527, 4554, 4563, 4566, 4571,\n\t4577, 4582, 4603, 4607, 4613, 4613, 4620, 4629,\n\t4637, 4640, 4644, 4650, 4656, 4659, 4663, 4670,\n\t4676, 4685, 4694, 4698, 4702, 4706, 4710, 4717,\n\t4721, 4725, 4735, 4741, 4745, 4751, 4755, 4758,\n\t4764, 4770, 4782, 4786, 4790, 4800, 4804, 4815,\n\t4817, 4819, 4823, 4835, 4840, 4864, 4868, 4874,\n\t4896, 4905, 4909, 4912, 4913, 4921, 4929, 4935,\n\t4945, 4952, 4970, 4973, 4976, 4984, 4990, 4994,\n\t4998, 5002, 5008, 5016, 5021, 5027, 5031, 5039,\n\t5046, 5050, 5057, 5063, 5071, 5079, 5085, 5091,\n\t5102, 5106, 5118, 5127, 5144, 5161, 5164, 5168,\n\t5170, 5176, 5178, 5182, 5197, 5201, 5205, 5209,\n\t5213, 5217, 5219, 5225, 5230, 5234, 5240, 5247,\n\t5250, 5268, 5270, 5315, 5321, 5327, 5331, 5335,\n\t5341, 5345, 5351, 5357, 5364, 5366, 5372, 5378,\n\t5382, 5386, 5394, 5407, 5413, 5420, 5428, 5434,\n\t5443, 5449, 5453, 5458, 5462, 5470, 5474, 5478,\n\t5508, 5514, 5520, 5526, 5532, 5539, 5545, 5552,\n\t5557, 5567, 5571, 5578, 5584, 5588, 5595, 5599,\n\t5605, 5608, 5612, 5616, 5620, 5624, 5629, 5634,\n\t5638, 5649, 5653, 5657, 5663, 5671, 5675, 5692,\n\t5696, 5702, 5712, 5718, 5724, 5727, 5732, 5741,\n\t5745, 5749, 5755, 5759, 5765, 5773, 5791, 5792,\n\t5802, 5803, 5812, 5820, 5822, 5825, 5827, 5829,\n\t5831, 5836, 5849, 5853, 5868, 5897, 5908, 5910,\n\t5914, 5918, 5923, 5927, 5929, 5936, 5940, 5948,\n\t5952, 5964, 5966, 5968, 5970, 5972, 5974, 5975,\n\t5977, 5979, 5981, 5983, 5985, 5986, 5988, 5990,\n\t5992, 5994, 5996, 6000, 6006, 6006, 6008, 6010,\n\t6019, 6025, 6032, 6033, 6036, 6037, 6041, 6046,\n\t6055, 6059, 6063, 6071, 6073, 6075, 6077, 6080,\n\t6112, 6114, 6116, 6120, 6124, 6127, 6138, 6151,\n\t6170, 6183, 6199, 6211, 6227, 6242, 6263, 6273,\n\t6285, 6296, 6310, 6325, 6335, 6347, 6356, 6368,\n\t6370, 6374, 6395, 6404, 6414, 6420, 6426, 6427,\n\t6476, 6478, 6482, 6484, 6490, 6497, 6505, 6512,\n\t6515, 6521, 6525, 6529, 6531, 6535, 6539, 6543,\n\t6549, 6557, 6565, 6571, 6573, 6577, 6579, 6585,\n\t6589, 6593, 6597, 6601, 6606, 6613, 6619, 6621,\n\t6623, 6627, 6629, 6635, 6639, 6643, 6653, 6658,\n\t6672, 6687, 6689, 6697, 6699, 6704, 6718, 6723,\n\t6725, 6729, 6730, 6734, 6740, 6746, 6756, 6766,\n\t6777, 6785, 6788, 6791, 6795, 6799, 6801, 6804,\n\t6804, 6807, 6809, 6839, 6841, 6843, 6847, 6852,\n\t6856, 6861, 6863, 6865, 6867, 6876, 6880, 6884,\n\t6890, 6892, 6900, 6908, 6920, 6923, 6929, 6933,\n\t6935, 6939, 6959, 6961, 6963, 6974, 6980, 6982,\n\t6984, 6986, 6990, 6996, 7002, 7004, 7009, 7013,\n\t7015, 7023, 7041, 7081, 7091, 7095, 7097, 7099,\n\t7100, 7104, 7108, 7112, 7116, 7120, 7125, 7129,\n\t7133, 7137, 7139, 7141, 7145, 7155, 7159, 7161,\n\t7165, 7169, 7173, 7186, 7188, 7190, 7194, 7196,\n\t7200, 7202, 7204, 7234, 7238, 7242, 7246, 7249,\n\t7256, 7261, 7272, 7276, 7292, 7306, 7310, 7315,\n\t7319, 7323, 7329, 7331, 7337, 7339, 7343, 7345,\n\t7351, 7356, 7361, 7371, 7373, 7375, 7379, 7383,\n\t7385, 7398, 7400, 7404, 7408, 7416, 7418, 7422,\n\t7424, 7425, 7428, 7433, 7435, 7437, 7441, 7443,\n\t7447, 7453, 7473, 7479, 7485, 7487, 7488, 7498,\n\t7499, 7507, 7514, 7516, 7519, 7521, 7523, 7525,\n\t7530, 7534, 7538, 7543, 7553, 7563, 7567, 7571,\n\t7585, 7611, 7621, 7623, 7625, 7628, 7630, 7633,\n\t7635, 7639, 7641, 7642, 7646, 7648, 7650, 7657,\n\t7661, 7668, 7675, 7684, 7700, 7712, 7730, 7741,\n\t7753, 7761, 7779, 7787, 7817, 7820, 7830, 7840,\n\t7852, 7863, 7872, 7885, 7897, 7901, 7907, 7934,\n\t7943, 7946, 7951, 7957, 7962, 7983, 7987, 7993,\n\t7993, 8000, 8009, 8017, 8020, 8024, 8030, 8036,\n\t8039, 8043, 8050, 8056, 8065, 8074, 8078, 8082,\n\t8086, 8090, 8097, 8101, 8105, 8115, 8121, 8125,\n\t8131, 8135, 8138, 8144, 8150, 8162, 8166, 8170,\n\t8180, 8184, 8195, 8197, 8199, 8203, 8215, 8220,\n\t8244, 8248, 8254, 8276, 8285, 8289, 8292, 8293,\n\t8301, 8309, 8315, 8325, 8332, 8350, 8353, 8356,\n\t8364, 8370, 8374, 8378, 8382, 8388, 8396, 8401,\n\t8407, 8411, 8419, 8426, 8430, 8437, 8443, 8451,\n\t8459, 8465, 8471, 8482, 8486, 8498, 8507, 8524,\n\t8541, 8544, 8548, 8550, 8556, 8558, 8562, 8577,\n\t8581, 8585, 8589, 8593, 8597, 8599, 8605, 8610,\n\t8614, 8620, 8627, 8630, 8648, 8650, 8695, 8701,\n\t8707, 8711, 8715, 8721, 8725, 8731, 8737, 8744,\n\t8746, 8752, 8758, 8762, 8766, 8774, 8787, 8793,\n\t8800, 8808, 8814, 8823, 8829, 8833, 8838, 8842,\n\t8850, 8854, 8858, 8888, 8894, 8900, 8906, 8912,\n\t8919, 8925, 8932, 8937, 8947, 8951, 8958, 8964,\n\t8968, 8975, 8979, 8985, 8988, 8992, 8996, 9000,\n\t9004, 9009, 9014, 9018, 9029, 9033, 9037, 9043,\n\t9051, 9055, 9072, 9076, 9082, 9092, 9098, 9104,\n\t9107, 9112, 9121, 9125, 9129, 9135, 9139, 9145,\n\t9153, 9171, 9172, 9182, 9183, 9192, 9200, 9202,\n\t9205, 9207, 9209, 9211, 9216, 9229, 9233, 9248,\n\t9277, 9288, 9290, 9294, 9298, 9303, 9307, 9309,\n\t9316, 9320, 9328, 9332, 9407, 9409, 9410, 9411,\n\t9412, 9413, 9414, 9416, 9421, 9423, 9425, 9426,\n\t9470, 9471, 9472, 9474, 9479, 9483, 9483, 9485,\n\t9487, 9498, 9508, 9516, 9517, 9519, 9520, 9524,\n\t9528, 9538, 9542, 9549, 9560, 9567, 9571, 9577,\n\t9588, 9620, 9669, 9684, 9699, 9704, 9706, 9711,\n\t9743, 9751, 9753, 9775, 9797, 9799, 9815, 9831,\n\t9833, 9835, 9835, 9836, 9837, 9838, 9840, 9841,\n\t9853, 9855, 9857, 9859, 9873, 9887, 9889, 9892,\n\t9895, 9897, 9898, 9899, 9901, 9903, 9905, 9919,\n\t9933, 9935, 9938, 9941, 9943, 9944, 9945, 9947,\n\t9949, 9951, 10000, 10044, 10046, 10051, 10055, 10055,\n\t10057, 10059, 10070, 10080, 10088, 10089, 10091, 10092,\n\t10096, 10100, 10110, 10114, 10121, 10132, 10139, 10143,\n\t10149, 10160, 10192, 10241, 10256, 10271, 10276, 10278,\n\t10283, 10315, 10323, 10325, 10347, 10369,\n}\n\nvar _hcltok_trans_keys []byte = []byte{\n\t46, 42, 42, 47, 46, 69, 101, 48,\n\t57, 43, 45, 48, 57, 48, 57, 45,\n\t95, 194, 195, 198, 199, 203, 205, 206,\n\t207, 210, 212, 213, 214, 215, 216, 217,\n\t219, 220, 221, 222, 223, 224, 225, 226,\n\t227, 228, 233, 234, 237, 239, 240, 65,\n\t90, 97, 122, 196, 202, 208, 218, 229,\n\t236, 95, 194, 195, 198, 199, 203, 205,\n\t206, 207, 210, 212, 213, 214, 215, 216,\n\t217, 219, 220, 221, 222, 223, 224, 225,\n\t226, 227, 228, 233, 234, 237, 239, 240,\n\t65, 90, 97, 122, 196, 202, 208, 218,\n\t229, 236, 10, 13, 45, 95, 194, 195,\n\t198, 199, 203, 204, 205, 206, 207, 210,\n\t212, 213, 214, 215, 216, 217, 219, 220,\n\t221, 222, 223, 224, 225, 226, 227, 228,\n\t233, 234, 237, 239, 240, 243, 48, 57,\n\t65, 90, 97, 122, 196, 218, 229, 236,\n\t10, 170, 181, 183, 186, 128, 150, 152,\n\t182, 184, 255, 192, 255, 128, 255, 173,\n\t130, 133, 146, 159, 165, 171, 175, 255,\n\t181, 190, 184, 185, 192, 255, 140, 134,\n\t138, 142, 161, 163, 255, 182, 130, 136,\n\t137, 176, 151, 152, 154, 160, 190, 136,\n\t144, 192, 255, 135, 129, 130, 132, 133,\n\t144, 170, 176, 178, 144, 154, 160, 191,\n\t128, 169, 174, 255, 148, 169, 157, 158,\n\t189, 190, 192, 255, 144, 255, 139, 140,\n\t178, 255, 186, 128, 181, 160, 161, 162,\n\t163, 164, 165, 166, 167, 168, 169, 170,\n\t171, 172, 173, 174, 175, 176, 177, 178,\n\t179, 180, 181, 182, 183, 184, 185, 186,\n\t187, 188, 189, 190, 191, 128, 173, 128,\n\t155, 160, 180, 182, 189, 148, 161, 163,\n\t255, 176, 164, 165, 132, 169, 177, 141,\n\t142, 145, 146, 179, 181, 186, 187, 158,\n\t133, 134, 137, 138, 143, 150, 152, 155,\n\t164, 165, 178, 255, 188, 129, 131, 133,\n\t138, 143, 144, 147, 168, 170, 176, 178,\n\t179, 181, 182, 184, 185, 190, 255, 157,\n\t131, 134, 137, 138, 142, 144, 146, 152,\n\t159, 165, 182, 255, 129, 131, 133, 141,\n\t143, 145, 147, 168, 170, 176, 178, 179,\n\t181, 185, 188, 255, 134, 138, 142, 143,\n\t145, 159, 164, 165, 176, 184, 186, 255,\n\t129, 131, 133, 140, 143, 144, 147, 168,\n\t170, 176, 178, 179, 181, 185, 188, 191,\n\t177, 128, 132, 135, 136, 139, 141, 150,\n\t151, 156, 157, 159, 163, 166, 175, 156,\n\t130, 131, 133, 138, 142, 144, 146, 149,\n\t153, 154, 158, 159, 163, 164, 168, 170,\n\t174, 185, 190, 191, 144, 151, 128, 130,\n\t134, 136, 138, 141, 166, 175, 128, 131,\n\t133, 140, 142, 144, 146, 168, 170, 185,\n\t189, 255, 133, 137, 151, 142, 148, 155,\n\t159, 164, 165, 176, 255, 128, 131, 133,\n\t140, 142, 144, 146, 168, 170, 179, 181,\n\t185, 188, 191, 158, 128, 132, 134, 136,\n\t138, 141, 149, 150, 160, 163, 166, 175,\n\t177, 178, 129, 131, 133, 140, 142, 144,\n\t146, 186, 189, 255, 133, 137, 143, 147,\n\t152, 158, 164, 165, 176, 185, 192, 255,\n\t189, 130, 131, 133, 150, 154, 177, 179,\n\t187, 138, 150, 128, 134, 143, 148, 152,\n\t159, 166, 175, 178, 179, 129, 186, 128,\n\t142, 144, 153, 132, 138, 141, 165, 167,\n\t129, 130, 135, 136, 148, 151, 153, 159,\n\t161, 163, 170, 171, 173, 185, 187, 189,\n\t134, 128, 132, 136, 141, 144, 153, 156,\n\t159, 128, 181, 183, 185, 152, 153, 160,\n\t169, 190, 191, 128, 135, 137, 172, 177,\n\t191, 128, 132, 134, 151, 153, 188, 134,\n\t128, 129, 130, 131, 137, 138, 139, 140,\n\t141, 142, 143, 144, 153, 154, 155, 156,\n\t157, 158, 159, 160, 161, 162, 163, 164,\n\t165, 166, 167, 168, 169, 170, 173, 175,\n\t176, 177, 178, 179, 181, 182, 183, 188,\n\t189, 190, 191, 132, 152, 172, 184, 185,\n\t187, 128, 191, 128, 137, 144, 255, 158,\n\t159, 134, 187, 136, 140, 142, 143, 137,\n\t151, 153, 142, 143, 158, 159, 137, 177,\n\t142, 143, 182, 183, 191, 255, 128, 130,\n\t133, 136, 150, 152, 255, 145, 150, 151,\n\t155, 156, 160, 168, 178, 255, 128, 143,\n\t160, 255, 182, 183, 190, 255, 129, 255,\n\t173, 174, 192, 255, 129, 154, 160, 255,\n\t171, 173, 185, 255, 128, 140, 142, 148,\n\t160, 180, 128, 147, 160, 172, 174, 176,\n\t178, 179, 148, 150, 152, 155, 158, 159,\n\t170, 255, 139, 141, 144, 153, 160, 255,\n\t184, 255, 128, 170, 176, 255, 182, 255,\n\t128, 158, 160, 171, 176, 187, 134, 173,\n\t176, 180, 128, 171, 176, 255, 138, 143,\n\t155, 255, 128, 155, 160, 255, 159, 189,\n\t190, 192, 255, 167, 128, 137, 144, 153,\n\t176, 189, 140, 143, 154, 170, 180, 255,\n\t180, 255, 128, 183, 128, 137, 141, 189,\n\t128, 136, 144, 146, 148, 182, 184, 185,\n\t128, 181, 187, 191, 150, 151, 158, 159,\n\t152, 154, 156, 158, 134, 135, 142, 143,\n\t190, 255, 190, 128, 180, 182, 188, 130,\n\t132, 134, 140, 144, 147, 150, 155, 160,\n\t172, 178, 180, 182, 188, 128, 129, 130,\n\t131, 132, 133, 134, 176, 177, 178, 179,\n\t180, 181, 182, 183, 191, 255, 129, 147,\n\t149, 176, 178, 190, 192, 255, 144, 156,\n\t161, 144, 156, 165, 176, 130, 135, 149,\n\t164, 166, 168, 138, 147, 152, 157, 170,\n\t185, 188, 191, 142, 133, 137, 160, 255,\n\t137, 255, 128, 174, 176, 255, 159, 165,\n\t170, 180, 255, 167, 173, 128, 165, 176,\n\t255, 168, 174, 176, 190, 192, 255, 128,\n\t150, 160, 166, 168, 174, 176, 182, 184,\n\t190, 128, 134, 136, 142, 144, 150, 152,\n\t158, 160, 191, 128, 129, 130, 131, 132,\n\t133, 134, 135, 144, 145, 255, 133, 135,\n\t161, 175, 177, 181, 184, 188, 160, 151,\n\t152, 187, 192, 255, 133, 173, 177, 255,\n\t143, 159, 187, 255, 176, 191, 182, 183,\n\t184, 191, 192, 255, 150, 255, 128, 146,\n\t147, 148, 152, 153, 154, 155, 156, 158,\n\t159, 160, 161, 162, 163, 164, 165, 166,\n\t167, 168, 169, 170, 171, 172, 173, 174,\n\t175, 176, 129, 255, 141, 255, 144, 189,\n\t141, 143, 172, 255, 191, 128, 175, 180,\n\t189, 151, 159, 162, 255, 175, 137, 138,\n\t184, 255, 183, 255, 168, 255, 128, 179,\n\t188, 134, 143, 154, 159, 184, 186, 190,\n\t255, 128, 173, 176, 255, 148, 159, 189,\n\t255, 129, 142, 154, 159, 191, 255, 128,\n\t182, 128, 141, 144, 153, 160, 182, 186,\n\t255, 128, 130, 155, 157, 160, 175, 178,\n\t182, 129, 134, 137, 142, 145, 150, 160,\n\t166, 168, 174, 176, 255, 155, 166, 175,\n\t128, 170, 172, 173, 176, 185, 158, 159,\n\t160, 255, 164, 175, 135, 138, 188, 255,\n\t164, 169, 171, 172, 173, 174, 175, 180,\n\t181, 182, 183, 184, 185, 187, 188, 189,\n\t190, 191, 165, 186, 174, 175, 154, 255,\n\t190, 128, 134, 147, 151, 157, 168, 170,\n\t182, 184, 188, 128, 129, 131, 132, 134,\n\t255, 147, 255, 190, 255, 144, 145, 136,\n\t175, 188, 255, 128, 143, 160, 175, 179,\n\t180, 141, 143, 176, 180, 182, 255, 189,\n\t255, 191, 144, 153, 161, 186, 129, 154,\n\t166, 255, 191, 255, 130, 135, 138, 143,\n\t146, 151, 154, 156, 144, 145, 146, 147,\n\t148, 150, 151, 152, 155, 157, 158, 160,\n\t170, 171, 172, 175, 161, 169, 128, 129,\n\t130, 131, 133, 135, 138, 139, 140, 141,\n\t142, 143, 144, 145, 146, 147, 148, 149,\n\t152, 156, 157, 160, 161, 162, 163, 164,\n\t166, 168, 169, 170, 171, 172, 173, 174,\n\t176, 177, 153, 155, 178, 179, 128, 139,\n\t141, 166, 168, 186, 188, 189, 191, 255,\n\t142, 143, 158, 255, 187, 255, 128, 180,\n\t189, 128, 156, 160, 255, 145, 159, 161,\n\t255, 128, 159, 176, 255, 139, 143, 187,\n\t255, 128, 157, 160, 255, 144, 132, 135,\n\t150, 255, 158, 159, 170, 175, 148, 151,\n\t188, 255, 128, 167, 176, 255, 164, 255,\n\t183, 255, 128, 149, 160, 167, 136, 188,\n\t128, 133, 138, 181, 183, 184, 191, 255,\n\t150, 159, 183, 255, 128, 158, 160, 178,\n\t180, 181, 128, 149, 160, 185, 128, 183,\n\t190, 191, 191, 128, 131, 133, 134, 140,\n\t147, 149, 151, 153, 179, 184, 186, 160,\n\t188, 128, 156, 128, 135, 137, 166, 128,\n\t181, 128, 149, 160, 178, 128, 145, 128,\n\t178, 129, 130, 131, 132, 133, 135, 136,\n\t138, 139, 140, 141, 144, 145, 146, 147,\n\t150, 151, 152, 153, 154, 155, 156, 162,\n\t163, 171, 176, 177, 178, 128, 134, 135,\n\t165, 176, 190, 144, 168, 176, 185, 128,\n\t180, 182, 191, 182, 144, 179, 155, 133,\n\t137, 141, 143, 157, 255, 190, 128, 145,\n\t147, 183, 136, 128, 134, 138, 141, 143,\n\t157, 159, 168, 176, 255, 171, 175, 186,\n\t255, 128, 131, 133, 140, 143, 144, 147,\n\t168, 170, 176, 178, 179, 181, 185, 188,\n\t191, 144, 151, 128, 132, 135, 136, 139,\n\t141, 157, 163, 166, 172, 176, 180, 128,\n\t138, 144, 153, 134, 136, 143, 154, 255,\n\t128, 181, 184, 255, 129, 151, 158, 255,\n\t129, 131, 133, 143, 154, 255, 128, 137,\n\t128, 153, 157, 171, 176, 185, 160, 255,\n\t170, 190, 192, 255, 128, 184, 128, 136,\n\t138, 182, 184, 191, 128, 144, 153, 178,\n\t255, 168, 144, 145, 183, 255, 128, 142,\n\t145, 149, 129, 141, 144, 146, 147, 148,\n\t175, 255, 132, 255, 128, 144, 129, 143,\n\t144, 153, 145, 152, 135, 255, 160, 168,\n\t169, 171, 172, 173, 174, 188, 189, 190,\n\t191, 161, 167, 185, 255, 128, 158, 160,\n\t169, 144, 173, 176, 180, 128, 131, 144,\n\t153, 163, 183, 189, 255, 144, 255, 133,\n\t143, 191, 255, 143, 159, 160, 128, 129,\n\t255, 159, 160, 171, 172, 255, 173, 255,\n\t179, 255, 128, 176, 177, 178, 128, 129,\n\t171, 175, 189, 255, 128, 136, 144, 153,\n\t157, 158, 133, 134, 137, 144, 145, 146,\n\t147, 148, 149, 154, 155, 156, 157, 158,\n\t159, 168, 169, 170, 150, 153, 165, 169,\n\t173, 178, 187, 255, 131, 132, 140, 169,\n\t174, 255, 130, 132, 149, 157, 173, 186,\n\t188, 160, 161, 163, 164, 167, 168, 132,\n\t134, 149, 157, 186, 139, 140, 191, 255,\n\t134, 128, 132, 138, 144, 146, 255, 166,\n\t167, 129, 155, 187, 149, 181, 143, 175,\n\t137, 169, 131, 140, 141, 192, 255, 128,\n\t182, 187, 255, 173, 180, 182, 255, 132,\n\t155, 159, 161, 175, 128, 160, 163, 164,\n\t165, 184, 185, 186, 161, 162, 128, 134,\n\t136, 152, 155, 161, 163, 164, 166, 170,\n\t133, 143, 151, 255, 139, 143, 154, 255,\n\t164, 167, 185, 187, 128, 131, 133, 159,\n\t161, 162, 169, 178, 180, 183, 130, 135,\n\t137, 139, 148, 151, 153, 155, 157, 159,\n\t164, 190, 141, 143, 145, 146, 161, 162,\n\t167, 170, 172, 178, 180, 183, 185, 188,\n\t128, 137, 139, 155, 161, 163, 165, 169,\n\t171, 187, 155, 156, 151, 255, 156, 157,\n\t160, 181, 255, 186, 187, 255, 162, 255,\n\t160, 168, 161, 167, 158, 255, 160, 132,\n\t135, 133, 134, 176, 255, 170, 181, 186,\n\t191, 176, 180, 182, 183, 186, 189, 134,\n\t140, 136, 138, 142, 161, 163, 255, 130,\n\t137, 136, 255, 144, 170, 176, 178, 160,\n\t191, 128, 138, 174, 175, 177, 255, 148,\n\t150, 164, 167, 173, 176, 185, 189, 190,\n\t192, 255, 144, 146, 175, 141, 255, 166,\n\t176, 178, 255, 186, 138, 170, 180, 181,\n\t160, 161, 162, 164, 165, 166, 167, 168,\n\t169, 170, 171, 172, 173, 174, 175, 176,\n\t177, 178, 179, 180, 181, 182, 184, 186,\n\t187, 188, 189, 190, 183, 185, 154, 164,\n\t168, 128, 149, 128, 152, 189, 132, 185,\n\t144, 152, 161, 177, 255, 169, 177, 129,\n\t132, 141, 142, 145, 146, 179, 181, 186,\n\t188, 190, 255, 142, 156, 157, 159, 161,\n\t176, 177, 133, 138, 143, 144, 147, 168,\n\t170, 176, 178, 179, 181, 182, 184, 185,\n\t158, 153, 156, 178, 180, 189, 133, 141,\n\t143, 145, 147, 168, 170, 176, 178, 179,\n\t181, 185, 144, 185, 160, 161, 189, 133,\n\t140, 143, 144, 147, 168, 170, 176, 178,\n\t179, 181, 185, 177, 156, 157, 159, 161,\n\t131, 156, 133, 138, 142, 144, 146, 149,\n\t153, 154, 158, 159, 163, 164, 168, 170,\n\t174, 185, 144, 189, 133, 140, 142, 144,\n\t146, 168, 170, 185, 152, 154, 160, 161,\n\t128, 189, 133, 140, 142, 144, 146, 168,\n\t170, 179, 181, 185, 158, 160, 161, 177,\n\t178, 189, 133, 140, 142, 144, 146, 186,\n\t142, 148, 150, 159, 161, 186, 191, 189,\n\t133, 150, 154, 177, 179, 187, 128, 134,\n\t129, 176, 178, 179, 132, 138, 141, 165,\n\t167, 189, 129, 130, 135, 136, 148, 151,\n\t153, 159, 161, 163, 170, 171, 173, 176,\n\t178, 179, 134, 128, 132, 156, 159, 128,\n\t128, 135, 137, 172, 136, 140, 128, 129,\n\t130, 131, 137, 138, 139, 140, 141, 142,\n\t143, 144, 153, 154, 155, 156, 157, 158,\n\t159, 160, 161, 162, 163, 164, 165, 166,\n\t167, 168, 169, 170, 172, 173, 174, 175,\n\t176, 177, 178, 179, 180, 181, 182, 184,\n\t188, 189, 190, 191, 132, 152, 185, 187,\n\t191, 128, 170, 161, 144, 149, 154, 157,\n\t165, 166, 174, 176, 181, 255, 130, 141,\n\t143, 159, 155, 255, 128, 140, 142, 145,\n\t160, 177, 128, 145, 160, 172, 174, 176,\n\t151, 156, 170, 128, 168, 176, 255, 138,\n\t255, 128, 150, 160, 255, 149, 255, 167,\n\t133, 179, 133, 139, 131, 160, 174, 175,\n\t186, 255, 166, 255, 128, 163, 141, 143,\n\t154, 189, 169, 172, 174, 177, 181, 182,\n\t129, 130, 132, 133, 134, 176, 177, 178,\n\t179, 180, 181, 182, 183, 177, 191, 165,\n\t170, 175, 177, 180, 255, 168, 174, 176,\n\t255, 128, 134, 136, 142, 144, 150, 152,\n\t158, 128, 129, 130, 131, 132, 133, 134,\n\t135, 144, 145, 255, 133, 135, 161, 169,\n\t177, 181, 184, 188, 160, 151, 154, 128,\n\t146, 147, 148, 152, 153, 154, 155, 156,\n\t158, 159, 160, 161, 162, 163, 164, 165,\n\t166, 167, 168, 169, 170, 171, 172, 173,\n\t174, 175, 176, 129, 255, 141, 143, 160,\n\t169, 172, 255, 191, 128, 174, 130, 134,\n\t139, 163, 255, 130, 179, 187, 189, 178,\n\t183, 138, 165, 176, 255, 135, 159, 189,\n\t255, 132, 178, 143, 160, 164, 166, 175,\n\t186, 190, 128, 168, 186, 128, 130, 132,\n\t139, 160, 182, 190, 255, 176, 178, 180,\n\t183, 184, 190, 255, 128, 130, 155, 157,\n\t160, 170, 178, 180, 128, 162, 164, 169,\n\t171, 172, 173, 174, 175, 180, 181, 182,\n\t183, 185, 186, 187, 188, 189, 190, 191,\n\t165, 179, 157, 190, 128, 134, 147, 151,\n\t159, 168, 170, 182, 184, 188, 176, 180,\n\t182, 255, 161, 186, 144, 145, 146, 147,\n\t148, 150, 151, 152, 155, 157, 158, 160,\n\t170, 171, 172, 175, 161, 169, 128, 129,\n\t130, 131, 133, 138, 139, 140, 141, 142,\n\t143, 144, 145, 146, 147, 148, 149, 152,\n\t156, 157, 160, 161, 162, 163, 164, 166,\n\t168, 169, 170, 171, 172, 173, 174, 176,\n\t177, 153, 155, 178, 179, 145, 255, 139,\n\t143, 182, 255, 158, 175, 128, 144, 147,\n\t149, 151, 153, 179, 128, 135, 137, 164,\n\t128, 130, 131, 132, 133, 134, 135, 136,\n\t138, 139, 140, 141, 144, 145, 146, 147,\n\t150, 151, 152, 153, 154, 156, 162, 163,\n\t171, 176, 177, 178, 131, 183, 131, 175,\n\t144, 168, 131, 166, 182, 144, 178, 131,\n\t178, 154, 156, 129, 132, 128, 145, 147,\n\t171, 159, 255, 144, 157, 161, 135, 138,\n\t128, 175, 135, 132, 133, 128, 174, 152,\n\t155, 132, 128, 170, 128, 153, 160, 190,\n\t192, 255, 128, 136, 138, 174, 128, 178,\n\t255, 160, 168, 169, 171, 172, 173, 174,\n\t188, 189, 190, 191, 161, 167, 144, 173,\n\t128, 131, 163, 183, 189, 255, 133, 143,\n\t145, 255, 147, 159, 128, 176, 177, 178,\n\t128, 136, 144, 153, 144, 145, 146, 147,\n\t148, 149, 154, 155, 156, 157, 158, 159,\n\t150, 153, 131, 140, 255, 160, 163, 164,\n\t165, 184, 185, 186, 161, 162, 133, 255,\n\t170, 181, 183, 186, 128, 150, 152, 182,\n\t184, 255, 192, 255, 128, 255, 173, 130,\n\t133, 146, 159, 165, 171, 175, 255, 181,\n\t190, 184, 185, 192, 255, 140, 134, 138,\n\t142, 161, 163, 255, 182, 130, 136, 137,\n\t176, 151, 152, 154, 160, 190, 136, 144,\n\t192, 255, 135, 129, 130, 132, 133, 144,\n\t170, 176, 178, 144, 154, 160, 191, 128,\n\t169, 174, 255, 148, 169, 157, 158, 189,\n\t190, 192, 255, 144, 255, 139, 140, 178,\n\t255, 186, 128, 181, 160, 161, 162, 163,\n\t164, 165, 166, 167, 168, 169, 170, 171,\n\t172, 173, 174, 175, 176, 177, 178, 179,\n\t180, 181, 182, 183, 184, 185, 186, 187,\n\t188, 189, 190, 191, 128, 173, 128, 155,\n\t160, 180, 182, 189, 148, 161, 163, 255,\n\t176, 164, 165, 132, 169, 177, 141, 142,\n\t145, 146, 179, 181, 186, 187, 158, 133,\n\t134, 137, 138, 143, 150, 152, 155, 164,\n\t165, 178, 255, 188, 129, 131, 133, 138,\n\t143, 144, 147, 168, 170, 176, 178, 179,\n\t181, 182, 184, 185, 190, 255, 157, 131,\n\t134, 137, 138, 142, 144, 146, 152, 159,\n\t165, 182, 255, 129, 131, 133, 141, 143,\n\t145, 147, 168, 170, 176, 178, 179, 181,\n\t185, 188, 255, 134, 138, 142, 143, 145,\n\t159, 164, 165, 176, 184, 186, 255, 129,\n\t131, 133, 140, 143, 144, 147, 168, 170,\n\t176, 178, 179, 181, 185, 188, 191, 177,\n\t128, 132, 135, 136, 139, 141, 150, 151,\n\t156, 157, 159, 163, 166, 175, 156, 130,\n\t131, 133, 138, 142, 144, 146, 149, 153,\n\t154, 158, 159, 163, 164, 168, 170, 174,\n\t185, 190, 191, 144, 151, 128, 130, 134,\n\t136, 138, 141, 166, 175, 128, 131, 133,\n\t140, 142, 144, 146, 168, 170, 185, 189,\n\t255, 133, 137, 151, 142, 148, 155, 159,\n\t164, 165, 176, 255, 128, 131, 133, 140,\n\t142, 144, 146, 168, 170, 179, 181, 185,\n\t188, 191, 158, 128, 132, 134, 136, 138,\n\t141, 149, 150, 160, 163, 166, 175, 177,\n\t178, 129, 131, 133, 140, 142, 144, 146,\n\t186, 189, 255, 133, 137, 143, 147, 152,\n\t158, 164, 165, 176, 185, 192, 255, 189,\n\t130, 131, 133, 150, 154, 177, 179, 187,\n\t138, 150, 128, 134, 143, 148, 152, 159,\n\t166, 175, 178, 179, 129, 186, 128, 142,\n\t144, 153, 132, 138, 141, 165, 167, 129,\n\t130, 135, 136, 148, 151, 153, 159, 161,\n\t163, 170, 171, 173, 185, 187, 189, 134,\n\t128, 132, 136, 141, 144, 153, 156, 159,\n\t128, 181, 183, 185, 152, 153, 160, 169,\n\t190, 191, 128, 135, 137, 172, 177, 191,\n\t128, 132, 134, 151, 153, 188, 134, 128,\n\t129, 130, 131, 137, 138, 139, 140, 141,\n\t142, 143, 144, 153, 154, 155, 156, 157,\n\t158, 159, 160, 161, 162, 163, 164, 165,\n\t166, 167, 168, 169, 170, 173, 175, 176,\n\t177, 178, 179, 181, 182, 183, 188, 189,\n\t190, 191, 132, 152, 172, 184, 185, 187,\n\t128, 191, 128, 137, 144, 255, 158, 159,\n\t134, 187, 136, 140, 142, 143, 137, 151,\n\t153, 142, 143, 158, 159, 137, 177, 142,\n\t143, 182, 183, 191, 255, 128, 130, 133,\n\t136, 150, 152, 255, 145, 150, 151, 155,\n\t156, 160, 168, 178, 255, 128, 143, 160,\n\t255, 182, 183, 190, 255, 129, 255, 173,\n\t174, 192, 255, 129, 154, 160, 255, 171,\n\t173, 185, 255, 128, 140, 142, 148, 160,\n\t180, 128, 147, 160, 172, 174, 176, 178,\n\t179, 148, 150, 152, 155, 158, 159, 170,\n\t255, 139, 141, 144, 153, 160, 255, 184,\n\t255, 128, 170, 176, 255, 182, 255, 128,\n\t158, 160, 171, 176, 187, 134, 173, 176,\n\t180, 128, 171, 176, 255, 138, 143, 155,\n\t255, 128, 155, 160, 255, 159, 189, 190,\n\t192, 255, 167, 128, 137, 144, 153, 176,\n\t189, 140, 143, 154, 170, 180, 255, 180,\n\t255, 128, 183, 128, 137, 141, 189, 128,\n\t136, 144, 146, 148, 182, 184, 185, 128,\n\t181, 187, 191, 150, 151, 158, 159, 152,\n\t154, 156, 158, 134, 135, 142, 143, 190,\n\t255, 190, 128, 180, 182, 188, 130, 132,\n\t134, 140, 144, 147, 150, 155, 160, 172,\n\t178, 180, 182, 188, 128, 129, 130, 131,\n\t132, 133, 134, 176, 177, 178, 179, 180,\n\t181, 182, 183, 191, 255, 129, 147, 149,\n\t176, 178, 190, 192, 255, 144, 156, 161,\n\t144, 156, 165, 176, 130, 135, 149, 164,\n\t166, 168, 138, 147, 152, 157, 170, 185,\n\t188, 191, 142, 133, 137, 160, 255, 137,\n\t255, 128, 174, 176, 255, 159, 165, 170,\n\t180, 255, 167, 173, 128, 165, 176, 255,\n\t168, 174, 176, 190, 192, 255, 128, 150,\n\t160, 166, 168, 174, 176, 182, 184, 190,\n\t128, 134, 136, 142, 144, 150, 152, 158,\n\t160, 191, 128, 129, 130, 131, 132, 133,\n\t134, 135, 144, 145, 255, 133, 135, 161,\n\t175, 177, 181, 184, 188, 160, 151, 152,\n\t187, 192, 255, 133, 173, 177, 255, 143,\n\t159, 187, 255, 176, 191, 182, 183, 184,\n\t191, 192, 255, 150, 255, 128, 146, 147,\n\t148, 152, 153, 154, 155, 156, 158, 159,\n\t160, 161, 162, 163, 164, 165, 166, 167,\n\t168, 169, 170, 171, 172, 173, 174, 175,\n\t176, 129, 255, 141, 255, 144, 189, 141,\n\t143, 172, 255, 191, 128, 175, 180, 189,\n\t151, 159, 162, 255, 175, 137, 138, 184,\n\t255, 183, 255, 168, 255, 128, 179, 188,\n\t134, 143, 154, 159, 184, 186, 190, 255,\n\t128, 173, 176, 255, 148, 159, 189, 255,\n\t129, 142, 154, 159, 191, 255, 128, 182,\n\t128, 141, 144, 153, 160, 182, 186, 255,\n\t128, 130, 155, 157, 160, 175, 178, 182,\n\t129, 134, 137, 142, 145, 150, 160, 166,\n\t168, 174, 176, 255, 155, 166, 175, 128,\n\t170, 172, 173, 176, 185, 158, 159, 160,\n\t255, 164, 175, 135, 138, 188, 255, 164,\n\t169, 171, 172, 173, 174, 175, 180, 181,\n\t182, 183, 184, 185, 187, 188, 189, 190,\n\t191, 165, 186, 174, 175, 154, 255, 190,\n\t128, 134, 147, 151, 157, 168, 170, 182,\n\t184, 188, 128, 129, 131, 132, 134, 255,\n\t147, 255, 190, 255, 144, 145, 136, 175,\n\t188, 255, 128, 143, 160, 175, 179, 180,\n\t141, 143, 176, 180, 182, 255, 189, 255,\n\t191, 144, 153, 161, 186, 129, 154, 166,\n\t255, 191, 255, 130, 135, 138, 143, 146,\n\t151, 154, 156, 144, 145, 146, 147, 148,\n\t150, 151, 152, 155, 157, 158, 160, 170,\n\t171, 172, 175, 161, 169, 128, 129, 130,\n\t131, 133, 135, 138, 139, 140, 141, 142,\n\t143, 144, 145, 146, 147, 148, 149, 152,\n\t156, 157, 160, 161, 162, 163, 164, 166,\n\t168, 169, 170, 171, 172, 173, 174, 176,\n\t177, 153, 155, 178, 179, 128, 139, 141,\n\t166, 168, 186, 188, 189, 191, 255, 142,\n\t143, 158, 255, 187, 255, 128, 180, 189,\n\t128, 156, 160, 255, 145, 159, 161, 255,\n\t128, 159, 176, 255, 139, 143, 187, 255,\n\t128, 157, 160, 255, 144, 132, 135, 150,\n\t255, 158, 159, 170, 175, 148, 151, 188,\n\t255, 128, 167, 176, 255, 164, 255, 183,\n\t255, 128, 149, 160, 167, 136, 188, 128,\n\t133, 138, 181, 183, 184, 191, 255, 150,\n\t159, 183, 255, 128, 158, 160, 178, 180,\n\t181, 128, 149, 160, 185, 128, 183, 190,\n\t191, 191, 128, 131, 133, 134, 140, 147,\n\t149, 151, 153, 179, 184, 186, 160, 188,\n\t128, 156, 128, 135, 137, 166, 128, 181,\n\t128, 149, 160, 178, 128, 145, 128, 178,\n\t129, 130, 131, 132, 133, 135, 136, 138,\n\t139, 140, 141, 144, 145, 146, 147, 150,\n\t151, 152, 153, 154, 155, 156, 162, 163,\n\t171, 176, 177, 178, 128, 134, 135, 165,\n\t176, 190, 144, 168, 176, 185, 128, 180,\n\t182, 191, 182, 144, 179, 155, 133, 137,\n\t141, 143, 157, 255, 190, 128, 145, 147,\n\t183, 136, 128, 134, 138, 141, 143, 157,\n\t159, 168, 176, 255, 171, 175, 186, 255,\n\t128, 131, 133, 140, 143, 144, 147, 168,\n\t170, 176, 178, 179, 181, 185, 188, 191,\n\t144, 151, 128, 132, 135, 136, 139, 141,\n\t157, 163, 166, 172, 176, 180, 128, 138,\n\t144, 153, 134, 136, 143, 154, 255, 128,\n\t181, 184, 255, 129, 151, 158, 255, 129,\n\t131, 133, 143, 154, 255, 128, 137, 128,\n\t153, 157, 171, 176, 185, 160, 255, 170,\n\t190, 192, 255, 128, 184, 128, 136, 138,\n\t182, 184, 191, 128, 144, 153, 178, 255,\n\t168, 144, 145, 183, 255, 128, 142, 145,\n\t149, 129, 141, 144, 146, 147, 148, 175,\n\t255, 132, 255, 128, 144, 129, 143, 144,\n\t153, 145, 152, 135, 255, 160, 168, 169,\n\t171, 172, 173, 174, 188, 189, 190, 191,\n\t161, 167, 185, 255, 128, 158, 160, 169,\n\t144, 173, 176, 180, 128, 131, 144, 153,\n\t163, 183, 189, 255, 144, 255, 133, 143,\n\t191, 255, 143, 159, 160, 128, 129, 255,\n\t159, 160, 171, 172, 255, 173, 255, 179,\n\t255, 128, 176, 177, 178, 128, 129, 171,\n\t175, 189, 255, 128, 136, 144, 153, 157,\n\t158, 133, 134, 137, 144, 145, 146, 147,\n\t148, 149, 154, 155, 156, 157, 158, 159,\n\t168, 169, 170, 150, 153, 165, 169, 173,\n\t178, 187, 255, 131, 132, 140, 169, 174,\n\t255, 130, 132, 149, 157, 173, 186, 188,\n\t160, 161, 163, 164, 167, 168, 132, 134,\n\t149, 157, 186, 139, 140, 191, 255, 134,\n\t128, 132, 138, 144, 146, 255, 166, 167,\n\t129, 155, 187, 149, 181, 143, 175, 137,\n\t169, 131, 140, 141, 192, 255, 128, 182,\n\t187, 255, 173, 180, 182, 255, 132, 155,\n\t159, 161, 175, 128, 160, 163, 164, 165,\n\t184, 185, 186, 161, 162, 128, 134, 136,\n\t152, 155, 161, 163, 164, 166, 170, 133,\n\t143, 151, 255, 139, 143, 154, 255, 164,\n\t167, 185, 187, 128, 131, 133, 159, 161,\n\t162, 169, 178, 180, 183, 130, 135, 137,\n\t139, 148, 151, 153, 155, 157, 159, 164,\n\t190, 141, 143, 145, 146, 161, 162, 167,\n\t170, 172, 178, 180, 183, 185, 188, 128,\n\t137, 139, 155, 161, 163, 165, 169, 171,\n\t187, 155, 156, 151, 255, 156, 157, 160,\n\t181, 255, 186, 187, 255, 162, 255, 160,\n\t168, 161, 167, 158, 255, 160, 132, 135,\n\t133, 134, 176, 255, 128, 191, 154, 164,\n\t168, 128, 149, 150, 191, 128, 152, 153,\n\t191, 181, 128, 159, 160, 189, 190, 191,\n\t189, 128, 131, 132, 185, 186, 191, 144,\n\t128, 151, 152, 161, 162, 176, 177, 255,\n\t169, 177, 129, 132, 141, 142, 145, 146,\n\t179, 181, 186, 188, 190, 191, 192, 255,\n\t142, 158, 128, 155, 156, 161, 162, 175,\n\t176, 177, 178, 191, 169, 177, 180, 183,\n\t128, 132, 133, 138, 139, 142, 143, 144,\n\t145, 146, 147, 185, 186, 191, 157, 128,\n\t152, 153, 158, 159, 177, 178, 180, 181,\n\t191, 142, 146, 169, 177, 180, 189, 128,\n\t132, 133, 185, 186, 191, 144, 185, 128,\n\t159, 160, 161, 162, 191, 169, 177, 180,\n\t189, 128, 132, 133, 140, 141, 142, 143,\n\t144, 145, 146, 147, 185, 186, 191, 158,\n\t177, 128, 155, 156, 161, 162, 191, 131,\n\t145, 155, 157, 128, 132, 133, 138, 139,\n\t141, 142, 149, 150, 152, 153, 159, 160,\n\t162, 163, 164, 165, 167, 168, 170, 171,\n\t173, 174, 185, 186, 191, 144, 128, 191,\n\t141, 145, 169, 189, 128, 132, 133, 185,\n\t186, 191, 128, 151, 152, 154, 155, 159,\n\t160, 161, 162, 191, 128, 141, 145, 169,\n\t180, 189, 129, 132, 133, 185, 186, 191,\n\t158, 128, 159, 160, 161, 162, 176, 177,\n\t178, 179, 191, 141, 145, 189, 128, 132,\n\t133, 186, 187, 191, 142, 128, 147, 148,\n\t150, 151, 158, 159, 161, 162, 185, 186,\n\t191, 178, 188, 128, 132, 133, 150, 151,\n\t153, 154, 189, 190, 191, 128, 134, 135,\n\t191, 128, 177, 129, 179, 180, 191, 128,\n\t131, 137, 141, 152, 160, 164, 166, 172,\n\t177, 189, 129, 132, 133, 134, 135, 138,\n\t139, 147, 148, 167, 168, 169, 170, 179,\n\t180, 191, 133, 128, 134, 135, 155, 156,\n\t159, 160, 191, 128, 129, 191, 136, 128,\n\t172, 173, 191, 128, 135, 136, 140, 141,\n\t191, 191, 128, 170, 171, 190, 161, 128,\n\t143, 144, 149, 150, 153, 154, 157, 158,\n\t164, 165, 166, 167, 173, 174, 176, 177,\n\t180, 181, 255, 130, 141, 143, 159, 134,\n\t187, 136, 140, 142, 143, 137, 151, 153,\n\t142, 143, 158, 159, 137, 177, 191, 142,\n\t143, 182, 183, 192, 255, 129, 151, 128,\n\t133, 134, 135, 136, 255, 145, 150, 151,\n\t155, 191, 192, 255, 128, 143, 144, 159,\n\t160, 255, 182, 183, 190, 191, 192, 255,\n\t128, 129, 255, 173, 174, 192, 255, 128,\n\t129, 154, 155, 159, 160, 255, 171, 173,\n\t185, 191, 192, 255, 141, 128, 145, 146,\n\t159, 160, 177, 178, 191, 173, 128, 145,\n\t146, 159, 160, 176, 177, 191, 128, 179,\n\t180, 191, 151, 156, 128, 191, 128, 159,\n\t160, 255, 184, 191, 192, 255, 169, 128,\n\t170, 171, 175, 176, 255, 182, 191, 192,\n\t255, 128, 158, 159, 191, 128, 143, 144,\n\t173, 174, 175, 176, 180, 181, 191, 128,\n\t171, 172, 175, 176, 255, 138, 191, 192,\n\t255, 128, 150, 151, 159, 160, 255, 149,\n\t191, 192, 255, 167, 128, 191, 128, 132,\n\t133, 179, 180, 191, 128, 132, 133, 139,\n\t140, 191, 128, 130, 131, 160, 161, 173,\n\t174, 175, 176, 185, 186, 255, 166, 191,\n\t192, 255, 128, 163, 164, 191, 128, 140,\n\t141, 143, 144, 153, 154, 189, 190, 191,\n\t128, 136, 137, 191, 173, 128, 168, 169,\n\t177, 178, 180, 181, 182, 183, 191, 0,\n\t127, 192, 255, 150, 151, 158, 159, 152,\n\t154, 156, 158, 134, 135, 142, 143, 190,\n\t191, 192, 255, 181, 189, 191, 128, 190,\n\t133, 181, 128, 129, 130, 140, 141, 143,\n\t144, 147, 148, 149, 150, 155, 156, 159,\n\t160, 172, 173, 177, 178, 188, 189, 191,\n\t177, 191, 128, 190, 128, 143, 144, 156,\n\t157, 191, 130, 135, 148, 164, 166, 168,\n\t128, 137, 138, 149, 150, 151, 152, 157,\n\t158, 169, 170, 185, 186, 187, 188, 191,\n\t142, 128, 132, 133, 137, 138, 159, 160,\n\t255, 137, 191, 192, 255, 175, 128, 255,\n\t159, 165, 170, 175, 177, 180, 191, 192,\n\t255, 166, 173, 128, 167, 168, 175, 176,\n\t255, 168, 174, 176, 191, 192, 255, 167,\n\t175, 183, 191, 128, 150, 151, 159, 160,\n\t190, 135, 143, 151, 128, 158, 159, 191,\n\t128, 132, 133, 135, 136, 160, 161, 169,\n\t170, 176, 177, 181, 182, 183, 184, 188,\n\t189, 191, 160, 151, 154, 187, 192, 255,\n\t128, 132, 133, 173, 174, 176, 177, 255,\n\t143, 159, 187, 191, 192, 255, 128, 175,\n\t176, 191, 150, 191, 192, 255, 141, 191,\n\t192, 255, 128, 143, 144, 189, 190, 191,\n\t141, 143, 160, 169, 172, 191, 192, 255,\n\t191, 128, 174, 175, 190, 128, 157, 158,\n\t159, 160, 255, 176, 191, 192, 255, 128,\n\t150, 151, 159, 160, 161, 162, 255, 175,\n\t137, 138, 184, 191, 192, 255, 128, 182,\n\t183, 255, 130, 134, 139, 163, 191, 192,\n\t255, 128, 129, 130, 179, 180, 191, 187,\n\t189, 128, 177, 178, 183, 184, 191, 128,\n\t137, 138, 165, 166, 175, 176, 255, 135,\n\t159, 189, 191, 192, 255, 128, 131, 132,\n\t178, 179, 191, 143, 165, 191, 128, 159,\n\t160, 175, 176, 185, 186, 190, 128, 168,\n\t169, 191, 131, 186, 128, 139, 140, 159,\n\t160, 182, 183, 189, 190, 255, 176, 178,\n\t180, 183, 184, 190, 191, 192, 255, 129,\n\t128, 130, 131, 154, 155, 157, 158, 159,\n\t160, 170, 171, 177, 178, 180, 181, 191,\n\t128, 167, 175, 129, 134, 135, 136, 137,\n\t142, 143, 144, 145, 150, 151, 159, 160,\n\t255, 155, 166, 175, 128, 162, 163, 191,\n\t164, 175, 135, 138, 188, 191, 192, 255,\n\t174, 175, 154, 191, 192, 255, 157, 169,\n\t183, 189, 191, 128, 134, 135, 146, 147,\n\t151, 152, 158, 159, 190, 130, 133, 128,\n\t255, 178, 191, 192, 255, 128, 146, 147,\n\t255, 190, 191, 192, 255, 128, 143, 144,\n\t255, 144, 145, 136, 175, 188, 191, 192,\n\t255, 181, 128, 175, 176, 255, 189, 191,\n\t192, 255, 128, 160, 161, 186, 187, 191,\n\t128, 129, 154, 155, 165, 166, 255, 191,\n\t192, 255, 128, 129, 130, 135, 136, 137,\n\t138, 143, 144, 145, 146, 151, 152, 153,\n\t154, 156, 157, 191, 128, 191, 128, 129,\n\t130, 131, 133, 138, 139, 140, 141, 142,\n\t143, 144, 145, 146, 147, 148, 149, 152,\n\t156, 157, 160, 161, 162, 163, 164, 166,\n\t168, 169, 170, 171, 172, 173, 174, 176,\n\t177, 132, 151, 153, 155, 158, 175, 178,\n\t179, 180, 191, 140, 167, 187, 190, 128,\n\t255, 142, 143, 158, 191, 192, 255, 187,\n\t191, 192, 255, 128, 180, 181, 191, 128,\n\t156, 157, 159, 160, 255, 145, 191, 192,\n\t255, 128, 159, 160, 175, 176, 255, 139,\n\t143, 182, 191, 192, 255, 144, 132, 135,\n\t150, 191, 192, 255, 158, 175, 148, 151,\n\t188, 191, 192, 255, 128, 167, 168, 175,\n\t176, 255, 164, 191, 192, 255, 183, 191,\n\t192, 255, 128, 149, 150, 159, 160, 167,\n\t168, 191, 136, 182, 188, 128, 133, 134,\n\t137, 138, 184, 185, 190, 191, 255, 150,\n\t159, 183, 191, 192, 255, 179, 128, 159,\n\t160, 181, 182, 191, 128, 149, 150, 159,\n\t160, 185, 186, 191, 128, 183, 184, 189,\n\t190, 191, 128, 148, 152, 129, 143, 144,\n\t179, 180, 191, 128, 159, 160, 188, 189,\n\t191, 128, 156, 157, 191, 136, 128, 164,\n\t165, 191, 128, 181, 182, 191, 128, 149,\n\t150, 159, 160, 178, 179, 191, 128, 145,\n\t146, 191, 128, 178, 179, 191, 128, 130,\n\t131, 132, 133, 134, 135, 136, 138, 139,\n\t140, 141, 144, 145, 146, 147, 150, 151,\n\t152, 153, 154, 156, 162, 163, 171, 176,\n\t177, 178, 129, 191, 128, 130, 131, 183,\n\t184, 191, 128, 130, 131, 175, 176, 191,\n\t128, 143, 144, 168, 169, 191, 128, 130,\n\t131, 166, 167, 191, 182, 128, 143, 144,\n\t178, 179, 191, 128, 130, 131, 178, 179,\n\t191, 128, 154, 156, 129, 132, 133, 191,\n\t146, 128, 171, 172, 191, 135, 137, 142,\n\t158, 128, 168, 169, 175, 176, 255, 159,\n\t191, 192, 255, 144, 128, 156, 157, 161,\n\t162, 191, 128, 134, 135, 138, 139, 191,\n\t128, 175, 176, 191, 134, 128, 131, 132,\n\t135, 136, 191, 128, 174, 175, 191, 128,\n\t151, 152, 155, 156, 191, 132, 128, 191,\n\t128, 170, 171, 191, 128, 153, 154, 191,\n\t160, 190, 192, 255, 128, 184, 185, 191,\n\t137, 128, 174, 175, 191, 128, 129, 177,\n\t178, 255, 144, 191, 192, 255, 128, 142,\n\t143, 144, 145, 146, 149, 129, 148, 150,\n\t191, 175, 191, 192, 255, 132, 191, 192,\n\t255, 128, 144, 129, 143, 145, 191, 144,\n\t153, 128, 143, 145, 152, 154, 191, 135,\n\t191, 192, 255, 160, 168, 169, 171, 172,\n\t173, 174, 188, 189, 190, 191, 128, 159,\n\t161, 167, 170, 187, 185, 191, 192, 255,\n\t128, 143, 144, 173, 174, 191, 128, 131,\n\t132, 162, 163, 183, 184, 188, 189, 255,\n\t133, 143, 145, 191, 192, 255, 128, 146,\n\t147, 159, 160, 191, 160, 128, 191, 128,\n\t129, 191, 192, 255, 159, 160, 171, 128,\n\t170, 172, 191, 192, 255, 173, 191, 192,\n\t255, 179, 191, 192, 255, 128, 176, 177,\n\t178, 129, 191, 128, 129, 130, 191, 171,\n\t175, 189, 191, 192, 255, 128, 136, 137,\n\t143, 144, 153, 154, 191, 144, 145, 146,\n\t147, 148, 149, 154, 155, 156, 157, 158,\n\t159, 128, 143, 150, 153, 160, 191, 149,\n\t157, 173, 186, 188, 160, 161, 163, 164,\n\t167, 168, 132, 134, 149, 157, 186, 191,\n\t139, 140, 192, 255, 133, 145, 128, 134,\n\t135, 137, 138, 255, 166, 167, 129, 155,\n\t187, 149, 181, 143, 175, 137, 169, 131,\n\t140, 191, 192, 255, 160, 163, 164, 165,\n\t184, 185, 186, 128, 159, 161, 162, 166,\n\t191, 133, 191, 192, 255, 132, 160, 163,\n\t167, 179, 184, 186, 128, 164, 165, 168,\n\t169, 187, 188, 191, 130, 135, 137, 139,\n\t144, 147, 151, 153, 155, 157, 159, 163,\n\t171, 179, 184, 189, 191, 128, 140, 141,\n\t148, 149, 160, 161, 164, 165, 166, 167,\n\t190, 138, 164, 170, 128, 155, 156, 160,\n\t161, 187, 188, 191, 128, 191, 155, 156,\n\t128, 191, 151, 191, 192, 255, 156, 157,\n\t160, 128, 191, 181, 191, 192, 255, 158,\n\t159, 186, 128, 185, 187, 191, 192, 255,\n\t162, 191, 192, 255, 160, 168, 128, 159,\n\t161, 167, 169, 191, 158, 191, 192, 255,\n\t10, 13, 128, 191, 192, 223, 224, 239,\n\t240, 247, 248, 255, 128, 191, 128, 191,\n\t128, 191, 128, 191, 128, 191, 10, 128,\n\t191, 128, 191, 128, 191, 36, 123, 37,\n\t123, 10, 128, 191, 128, 191, 128, 191,\n\t36, 123, 37, 123, 170, 181, 183, 186,\n\t128, 150, 152, 182, 184, 255, 192, 255,\n\t128, 255, 173, 130, 133, 146, 159, 165,\n\t171, 175, 255, 181, 190, 184, 185, 192,\n\t255, 140, 134, 138, 142, 161, 163, 255,\n\t182, 130, 136, 137, 176, 151, 152, 154,\n\t160, 190, 136, 144, 192, 255, 135, 129,\n\t130, 132, 133, 144, 170, 176, 178, 144,\n\t154, 160, 191, 128, 169, 174, 255, 148,\n\t169, 157, 158, 189, 190, 192, 255, 144,\n\t255, 139, 140, 178, 255, 186, 128, 181,\n\t160, 161, 162, 163, 164, 165, 166, 167,\n\t168, 169, 170, 171, 172, 173, 174, 175,\n\t176, 177, 178, 179, 180, 181, 182, 183,\n\t184, 185, 186, 187, 188, 189, 190, 191,\n\t128, 173, 128, 155, 160, 180, 182, 189,\n\t148, 161, 163, 255, 176, 164, 165, 132,\n\t169, 177, 141, 142, 145, 146, 179, 181,\n\t186, 187, 158, 133, 134, 137, 138, 143,\n\t150, 152, 155, 164, 165, 178, 255, 188,\n\t129, 131, 133, 138, 143, 144, 147, 168,\n\t170, 176, 178, 179, 181, 182, 184, 185,\n\t190, 255, 157, 131, 134, 137, 138, 142,\n\t144, 146, 152, 159, 165, 182, 255, 129,\n\t131, 133, 141, 143, 145, 147, 168, 170,\n\t176, 178, 179, 181, 185, 188, 255, 134,\n\t138, 142, 143, 145, 159, 164, 165, 176,\n\t184, 186, 255, 129, 131, 133, 140, 143,\n\t144, 147, 168, 170, 176, 178, 179, 181,\n\t185, 188, 191, 177, 128, 132, 135, 136,\n\t139, 141, 150, 151, 156, 157, 159, 163,\n\t166, 175, 156, 130, 131, 133, 138, 142,\n\t144, 146, 149, 153, 154, 158, 159, 163,\n\t164, 168, 170, 174, 185, 190, 191, 144,\n\t151, 128, 130, 134, 136, 138, 141, 166,\n\t175, 128, 131, 133, 140, 142, 144, 146,\n\t168, 170, 185, 189, 255, 133, 137, 151,\n\t142, 148, 155, 159, 164, 165, 176, 255,\n\t128, 131, 133, 140, 142, 144, 146, 168,\n\t170, 179, 181, 185, 188, 191, 158, 128,\n\t132, 134, 136, 138, 141, 149, 150, 160,\n\t163, 166, 175, 177, 178, 129, 131, 133,\n\t140, 142, 144, 146, 186, 189, 255, 133,\n\t137, 143, 147, 152, 158, 164, 165, 176,\n\t185, 192, 255, 189, 130, 131, 133, 150,\n\t154, 177, 179, 187, 138, 150, 128, 134,\n\t143, 148, 152, 159, 166, 175, 178, 179,\n\t129, 186, 128, 142, 144, 153, 132, 138,\n\t141, 165, 167, 129, 130, 135, 136, 148,\n\t151, 153, 159, 161, 163, 170, 171, 173,\n\t185, 187, 189, 134, 128, 132, 136, 141,\n\t144, 153, 156, 159, 128, 181, 183, 185,\n\t152, 153, 160, 169, 190, 191, 128, 135,\n\t137, 172, 177, 191, 128, 132, 134, 151,\n\t153, 188, 134, 128, 129, 130, 131, 137,\n\t138, 139, 140, 141, 142, 143, 144, 153,\n\t154, 155, 156, 157, 158, 159, 160, 161,\n\t162, 163, 164, 165, 166, 167, 168, 169,\n\t170, 173, 175, 176, 177, 178, 179, 181,\n\t182, 183, 188, 189, 190, 191, 132, 152,\n\t172, 184, 185, 187, 128, 191, 128, 137,\n\t144, 255, 158, 159, 134, 187, 136, 140,\n\t142, 143, 137, 151, 153, 142, 143, 158,\n\t159, 137, 177, 142, 143, 182, 183, 191,\n\t255, 128, 130, 133, 136, 150, 152, 255,\n\t145, 150, 151, 155, 156, 160, 168, 178,\n\t255, 128, 143, 160, 255, 182, 183, 190,\n\t255, 129, 255, 173, 174, 192, 255, 129,\n\t154, 160, 255, 171, 173, 185, 255, 128,\n\t140, 142, 148, 160, 180, 128, 147, 160,\n\t172, 174, 176, 178, 179, 148, 150, 152,\n\t155, 158, 159, 170, 255, 139, 141, 144,\n\t153, 160, 255, 184, 255, 128, 170, 176,\n\t255, 182, 255, 128, 158, 160, 171, 176,\n\t187, 134, 173, 176, 180, 128, 171, 176,\n\t255, 138, 143, 155, 255, 128, 155, 160,\n\t255, 159, 189, 190, 192, 255, 167, 128,\n\t137, 144, 153, 176, 189, 140, 143, 154,\n\t170, 180, 255, 180, 255, 128, 183, 128,\n\t137, 141, 189, 128, 136, 144, 146, 148,\n\t182, 184, 185, 128, 181, 187, 191, 150,\n\t151, 158, 159, 152, 154, 156, 158, 134,\n\t135, 142, 143, 190, 255, 190, 128, 180,\n\t182, 188, 130, 132, 134, 140, 144, 147,\n\t150, 155, 160, 172, 178, 180, 182, 188,\n\t128, 129, 130, 131, 132, 133, 134, 176,\n\t177, 178, 179, 180, 181, 182, 183, 191,\n\t255, 129, 147, 149, 176, 178, 190, 192,\n\t255, 144, 156, 161, 144, 156, 165, 176,\n\t130, 135, 149, 164, 166, 168, 138, 147,\n\t152, 157, 170, 185, 188, 191, 142, 133,\n\t137, 160, 255, 137, 255, 128, 174, 176,\n\t255, 159, 165, 170, 180, 255, 167, 173,\n\t128, 165, 176, 255, 168, 174, 176, 190,\n\t192, 255, 128, 150, 160, 166, 168, 174,\n\t176, 182, 184, 190, 128, 134, 136, 142,\n\t144, 150, 152, 158, 160, 191, 128, 129,\n\t130, 131, 132, 133, 134, 135, 144, 145,\n\t255, 133, 135, 161, 175, 177, 181, 184,\n\t188, 160, 151, 152, 187, 192, 255, 133,\n\t173, 177, 255, 143, 159, 187, 255, 176,\n\t191, 182, 183, 184, 191, 192, 255, 150,\n\t255, 128, 146, 147, 148, 152, 153, 154,\n\t155, 156, 158, 159, 160, 161, 162, 163,\n\t164, 165, 166, 167, 168, 169, 170, 171,\n\t172, 173, 174, 175, 176, 129, 255, 141,\n\t255, 144, 189, 141, 143, 172, 255, 191,\n\t128, 175, 180, 189, 151, 159, 162, 255,\n\t175, 137, 138, 184, 255, 183, 255, 168,\n\t255, 128, 179, 188, 134, 143, 154, 159,\n\t184, 186, 190, 255, 128, 173, 176, 255,\n\t148, 159, 189, 255, 129, 142, 154, 159,\n\t191, 255, 128, 182, 128, 141, 144, 153,\n\t160, 182, 186, 255, 128, 130, 155, 157,\n\t160, 175, 178, 182, 129, 134, 137, 142,\n\t145, 150, 160, 166, 168, 174, 176, 255,\n\t155, 166, 175, 128, 170, 172, 173, 176,\n\t185, 158, 159, 160, 255, 164, 175, 135,\n\t138, 188, 255, 164, 169, 171, 172, 173,\n\t174, 175, 180, 181, 182, 183, 184, 185,\n\t187, 188, 189, 190, 191, 165, 186, 174,\n\t175, 154, 255, 190, 128, 134, 147, 151,\n\t157, 168, 170, 182, 184, 188, 128, 129,\n\t131, 132, 134, 255, 147, 255, 190, 255,\n\t144, 145, 136, 175, 188, 255, 128, 143,\n\t160, 175, 179, 180, 141, 143, 176, 180,\n\t182, 255, 189, 255, 191, 144, 153, 161,\n\t186, 129, 154, 166, 255, 191, 255, 130,\n\t135, 138, 143, 146, 151, 154, 156, 144,\n\t145, 146, 147, 148, 150, 151, 152, 155,\n\t157, 158, 160, 170, 171, 172, 175, 161,\n\t169, 128, 129, 130, 131, 133, 135, 138,\n\t139, 140, 141, 142, 143, 144, 145, 146,\n\t147, 148, 149, 152, 156, 157, 160, 161,\n\t162, 163, 164, 166, 168, 169, 170, 171,\n\t172, 173, 174, 176, 177, 153, 155, 178,\n\t179, 128, 139, 141, 166, 168, 186, 188,\n\t189, 191, 255, 142, 143, 158, 255, 187,\n\t255, 128, 180, 189, 128, 156, 160, 255,\n\t145, 159, 161, 255, 128, 159, 176, 255,\n\t139, 143, 187, 255, 128, 157, 160, 255,\n\t144, 132, 135, 150, 255, 158, 159, 170,\n\t175, 148, 151, 188, 255, 128, 167, 176,\n\t255, 164, 255, 183, 255, 128, 149, 160,\n\t167, 136, 188, 128, 133, 138, 181, 183,\n\t184, 191, 255, 150, 159, 183, 255, 128,\n\t158, 160, 178, 180, 181, 128, 149, 160,\n\t185, 128, 183, 190, 191, 191, 128, 131,\n\t133, 134, 140, 147, 149, 151, 153, 179,\n\t184, 186, 160, 188, 128, 156, 128, 135,\n\t137, 166, 128, 181, 128, 149, 160, 178,\n\t128, 145, 128, 178, 129, 130, 131, 132,\n\t133, 135, 136, 138, 139, 140, 141, 144,\n\t145, 146, 147, 150, 151, 152, 153, 154,\n\t155, 156, 162, 163, 171, 176, 177, 178,\n\t128, 134, 135, 165, 176, 190, 144, 168,\n\t176, 185, 128, 180, 182, 191, 182, 144,\n\t179, 155, 133, 137, 141, 143, 157, 255,\n\t190, 128, 145, 147, 183, 136, 128, 134,\n\t138, 141, 143, 157, 159, 168, 176, 255,\n\t171, 175, 186, 255, 128, 131, 133, 140,\n\t143, 144, 147, 168, 170, 176, 178, 179,\n\t181, 185, 188, 191, 144, 151, 128, 132,\n\t135, 136, 139, 141, 157, 163, 166, 172,\n\t176, 180, 128, 138, 144, 153, 134, 136,\n\t143, 154, 255, 128, 181, 184, 255, 129,\n\t151, 158, 255, 129, 131, 133, 143, 154,\n\t255, 128, 137, 128, 153, 157, 171, 176,\n\t185, 160, 255, 170, 190, 192, 255, 128,\n\t184, 128, 136, 138, 182, 184, 191, 128,\n\t144, 153, 178, 255, 168, 144, 145, 183,\n\t255, 128, 142, 145, 149, 129, 141, 144,\n\t146, 147, 148, 175, 255, 132, 255, 128,\n\t144, 129, 143, 144, 153, 145, 152, 135,\n\t255, 160, 168, 169, 171, 172, 173, 174,\n\t188, 189, 190, 191, 161, 167, 185, 255,\n\t128, 158, 160, 169, 144, 173, 176, 180,\n\t128, 131, 144, 153, 163, 183, 189, 255,\n\t144, 255, 133, 143, 191, 255, 143, 159,\n\t160, 128, 129, 255, 159, 160, 171, 172,\n\t255, 173, 255, 179, 255, 128, 176, 177,\n\t178, 128, 129, 171, 175, 189, 255, 128,\n\t136, 144, 153, 157, 158, 133, 134, 137,\n\t144, 145, 146, 147, 148, 149, 154, 155,\n\t156, 157, 158, 159, 168, 169, 170, 150,\n\t153, 165, 169, 173, 178, 187, 255, 131,\n\t132, 140, 169, 174, 255, 130, 132, 149,\n\t157, 173, 186, 188, 160, 161, 163, 164,\n\t167, 168, 132, 134, 149, 157, 186, 139,\n\t140, 191, 255, 134, 128, 132, 138, 144,\n\t146, 255, 166, 167, 129, 155, 187, 149,\n\t181, 143, 175, 137, 169, 131, 140, 141,\n\t192, 255, 128, 182, 187, 255, 173, 180,\n\t182, 255, 132, 155, 159, 161, 175, 128,\n\t160, 163, 164, 165, 184, 185, 186, 161,\n\t162, 128, 134, 136, 152, 155, 161, 163,\n\t164, 166, 170, 133, 143, 151, 255, 139,\n\t143, 154, 255, 164, 167, 185, 187, 128,\n\t131, 133, 159, 161, 162, 169, 178, 180,\n\t183, 130, 135, 137, 139, 148, 151, 153,\n\t155, 157, 159, 164, 190, 141, 143, 145,\n\t146, 161, 162, 167, 170, 172, 178, 180,\n\t183, 185, 188, 128, 137, 139, 155, 161,\n\t163, 165, 169, 171, 187, 155, 156, 151,\n\t255, 156, 157, 160, 181, 255, 186, 187,\n\t255, 162, 255, 160, 168, 161, 167, 158,\n\t255, 160, 132, 135, 133, 134, 176, 255,\n\t128, 191, 154, 164, 168, 128, 149, 150,\n\t191, 128, 152, 153, 191, 181, 128, 159,\n\t160, 189, 190, 191, 189, 128, 131, 132,\n\t185, 186, 191, 144, 128, 151, 152, 161,\n\t162, 176, 177, 255, 169, 177, 129, 132,\n\t141, 142, 145, 146, 179, 181, 186, 188,\n\t190, 191, 192, 255, 142, 158, 128, 155,\n\t156, 161, 162, 175, 176, 177, 178, 191,\n\t169, 177, 180, 183, 128, 132, 133, 138,\n\t139, 142, 143, 144, 145, 146, 147, 185,\n\t186, 191, 157, 128, 152, 153, 158, 159,\n\t177, 178, 180, 181, 191, 142, 146, 169,\n\t177, 180, 189, 128, 132, 133, 185, 186,\n\t191, 144, 185, 128, 159, 160, 161, 162,\n\t191, 169, 177, 180, 189, 128, 132, 133,\n\t140, 141, 142, 143, 144, 145, 146, 147,\n\t185, 186, 191, 158, 177, 128, 155, 156,\n\t161, 162, 191, 131, 145, 155, 157, 128,\n\t132, 133, 138, 139, 141, 142, 149, 150,\n\t152, 153, 159, 160, 162, 163, 164, 165,\n\t167, 168, 170, 171, 173, 174, 185, 186,\n\t191, 144, 128, 191, 141, 145, 169, 189,\n\t128, 132, 133, 185, 186, 191, 128, 151,\n\t152, 154, 155, 159, 160, 161, 162, 191,\n\t128, 141, 145, 169, 180, 189, 129, 132,\n\t133, 185, 186, 191, 158, 128, 159, 160,\n\t161, 162, 176, 177, 178, 179, 191, 141,\n\t145, 189, 128, 132, 133, 186, 187, 191,\n\t142, 128, 147, 148, 150, 151, 158, 159,\n\t161, 162, 185, 186, 191, 178, 188, 128,\n\t132, 133, 150, 151, 153, 154, 189, 190,\n\t191, 128, 134, 135, 191, 128, 177, 129,\n\t179, 180, 191, 128, 131, 137, 141, 152,\n\t160, 164, 166, 172, 177, 189, 129, 132,\n\t133, 134, 135, 138, 139, 147, 148, 167,\n\t168, 169, 170, 179, 180, 191, 133, 128,\n\t134, 135, 155, 156, 159, 160, 191, 128,\n\t129, 191, 136, 128, 172, 173, 191, 128,\n\t135, 136, 140, 141, 191, 191, 128, 170,\n\t171, 190, 161, 128, 143, 144, 149, 150,\n\t153, 154, 157, 158, 164, 165, 166, 167,\n\t173, 174, 176, 177, 180, 181, 255, 130,\n\t141, 143, 159, 134, 187, 136, 140, 142,\n\t143, 137, 151, 153, 142, 143, 158, 159,\n\t137, 177, 191, 142, 143, 182, 183, 192,\n\t255, 129, 151, 128, 133, 134, 135, 136,\n\t255, 145, 150, 151, 155, 191, 192, 255,\n\t128, 143, 144, 159, 160, 255, 182, 183,\n\t190, 191, 192, 255, 128, 129, 255, 173,\n\t174, 192, 255, 128, 129, 154, 155, 159,\n\t160, 255, 171, 173, 185, 191, 192, 255,\n\t141, 128, 145, 146, 159, 160, 177, 178,\n\t191, 173, 128, 145, 146, 159, 160, 176,\n\t177, 191, 128, 179, 180, 191, 151, 156,\n\t128, 191, 128, 159, 160, 255, 184, 191,\n\t192, 255, 169, 128, 170, 171, 175, 176,\n\t255, 182, 191, 192, 255, 128, 158, 159,\n\t191, 128, 143, 144, 173, 174, 175, 176,\n\t180, 181, 191, 128, 171, 172, 175, 176,\n\t255, 138, 191, 192, 255, 128, 150, 151,\n\t159, 160, 255, 149, 191, 192, 255, 167,\n\t128, 191, 128, 132, 133, 179, 180, 191,\n\t128, 132, 133, 139, 140, 191, 128, 130,\n\t131, 160, 161, 173, 174, 175, 176, 185,\n\t186, 255, 166, 191, 192, 255, 128, 163,\n\t164, 191, 128, 140, 141, 143, 144, 153,\n\t154, 189, 190, 191, 128, 136, 137, 191,\n\t173, 128, 168, 169, 177, 178, 180, 181,\n\t182, 183, 191, 0, 127, 192, 255, 150,\n\t151, 158, 159, 152, 154, 156, 158, 134,\n\t135, 142, 143, 190, 191, 192, 255, 181,\n\t189, 191, 128, 190, 133, 181, 128, 129,\n\t130, 140, 141, 143, 144, 147, 148, 149,\n\t150, 155, 156, 159, 160, 172, 173, 177,\n\t178, 188, 189, 191, 177, 191, 128, 190,\n\t128, 143, 144, 156, 157, 191, 130, 135,\n\t148, 164, 166, 168, 128, 137, 138, 149,\n\t150, 151, 152, 157, 158, 169, 170, 185,\n\t186, 187, 188, 191, 142, 128, 132, 133,\n\t137, 138, 159, 160, 255, 137, 191, 192,\n\t255, 175, 128, 255, 159, 165, 170, 175,\n\t177, 180, 191, 192, 255, 166, 173, 128,\n\t167, 168, 175, 176, 255, 168, 174, 176,\n\t191, 192, 255, 167, 175, 183, 191, 128,\n\t150, 151, 159, 160, 190, 135, 143, 151,\n\t128, 158, 159, 191, 128, 132, 133, 135,\n\t136, 160, 161, 169, 170, 176, 177, 181,\n\t182, 183, 184, 188, 189, 191, 160, 151,\n\t154, 187, 192, 255, 128, 132, 133, 173,\n\t174, 176, 177, 255, 143, 159, 187, 191,\n\t192, 255, 128, 175, 176, 191, 150, 191,\n\t192, 255, 141, 191, 192, 255, 128, 143,\n\t144, 189, 190, 191, 141, 143, 160, 169,\n\t172, 191, 192, 255, 191, 128, 174, 175,\n\t190, 128, 157, 158, 159, 160, 255, 176,\n\t191, 192, 255, 128, 150, 151, 159, 160,\n\t161, 162, 255, 175, 137, 138, 184, 191,\n\t192, 255, 128, 182, 183, 255, 130, 134,\n\t139, 163, 191, 192, 255, 128, 129, 130,\n\t179, 180, 191, 187, 189, 128, 177, 178,\n\t183, 184, 191, 128, 137, 138, 165, 166,\n\t175, 176, 255, 135, 159, 189, 191, 192,\n\t255, 128, 131, 132, 178, 179, 191, 143,\n\t165, 191, 128, 159, 160, 175, 176, 185,\n\t186, 190, 128, 168, 169, 191, 131, 186,\n\t128, 139, 140, 159, 160, 182, 183, 189,\n\t190, 255, 176, 178, 180, 183, 184, 190,\n\t191, 192, 255, 129, 128, 130, 131, 154,\n\t155, 157, 158, 159, 160, 170, 171, 177,\n\t178, 180, 181, 191, 128, 167, 175, 129,\n\t134, 135, 136, 137, 142, 143, 144, 145,\n\t150, 151, 159, 160, 255, 155, 166, 175,\n\t128, 162, 163, 191, 164, 175, 135, 138,\n\t188, 191, 192, 255, 174, 175, 154, 191,\n\t192, 255, 157, 169, 183, 189, 191, 128,\n\t134, 135, 146, 147, 151, 152, 158, 159,\n\t190, 130, 133, 128, 255, 178, 191, 192,\n\t255, 128, 146, 147, 255, 190, 191, 192,\n\t255, 128, 143, 144, 255, 144, 145, 136,\n\t175, 188, 191, 192, 255, 181, 128, 175,\n\t176, 255, 189, 191, 192, 255, 128, 160,\n\t161, 186, 187, 191, 128, 129, 154, 155,\n\t165, 166, 255, 191, 192, 255, 128, 129,\n\t130, 135, 136, 137, 138, 143, 144, 145,\n\t146, 151, 152, 153, 154, 156, 157, 191,\n\t128, 191, 128, 129, 130, 131, 133, 138,\n\t139, 140, 141, 142, 143, 144, 145, 146,\n\t147, 148, 149, 152, 156, 157, 160, 161,\n\t162, 163, 164, 166, 168, 169, 170, 171,\n\t172, 173, 174, 176, 177, 132, 151, 153,\n\t155, 158, 175, 178, 179, 180, 191, 140,\n\t167, 187, 190, 128, 255, 142, 143, 158,\n\t191, 192, 255, 187, 191, 192, 255, 128,\n\t180, 181, 191, 128, 156, 157, 159, 160,\n\t255, 145, 191, 192, 255, 128, 159, 160,\n\t175, 176, 255, 139, 143, 182, 191, 192,\n\t255, 144, 132, 135, 150, 191, 192, 255,\n\t158, 175, 148, 151, 188, 191, 192, 255,\n\t128, 167, 168, 175, 176, 255, 164, 191,\n\t192, 255, 183, 191, 192, 255, 128, 149,\n\t150, 159, 160, 167, 168, 191, 136, 182,\n\t188, 128, 133, 134, 137, 138, 184, 185,\n\t190, 191, 255, 150, 159, 183, 191, 192,\n\t255, 179, 128, 159, 160, 181, 182, 191,\n\t128, 149, 150, 159, 160, 185, 186, 191,\n\t128, 183, 184, 189, 190, 191, 128, 148,\n\t152, 129, 143, 144, 179, 180, 191, 128,\n\t159, 160, 188, 189, 191, 128, 156, 157,\n\t191, 136, 128, 164, 165, 191, 128, 181,\n\t182, 191, 128, 149, 150, 159, 160, 178,\n\t179, 191, 128, 145, 146, 191, 128, 178,\n\t179, 191, 128, 130, 131, 132, 133, 134,\n\t135, 136, 138, 139, 140, 141, 144, 145,\n\t146, 147, 150, 151, 152, 153, 154, 156,\n\t162, 163, 171, 176, 177, 178, 129, 191,\n\t128, 130, 131, 183, 184, 191, 128, 130,\n\t131, 175, 176, 191, 128, 143, 144, 168,\n\t169, 191, 128, 130, 131, 166, 167, 191,\n\t182, 128, 143, 144, 178, 179, 191, 128,\n\t130, 131, 178, 179, 191, 128, 154, 156,\n\t129, 132, 133, 191, 146, 128, 171, 172,\n\t191, 135, 137, 142, 158, 128, 168, 169,\n\t175, 176, 255, 159, 191, 192, 255, 144,\n\t128, 156, 157, 161, 162, 191, 128, 134,\n\t135, 138, 139, 191, 128, 175, 176, 191,\n\t134, 128, 131, 132, 135, 136, 191, 128,\n\t174, 175, 191, 128, 151, 152, 155, 156,\n\t191, 132, 128, 191, 128, 170, 171, 191,\n\t128, 153, 154, 191, 160, 190, 192, 255,\n\t128, 184, 185, 191, 137, 128, 174, 175,\n\t191, 128, 129, 177, 178, 255, 144, 191,\n\t192, 255, 128, 142, 143, 144, 145, 146,\n\t149, 129, 148, 150, 191, 175, 191, 192,\n\t255, 132, 191, 192, 255, 128, 144, 129,\n\t143, 145, 191, 144, 153, 128, 143, 145,\n\t152, 154, 191, 135, 191, 192, 255, 160,\n\t168, 169, 171, 172, 173, 174, 188, 189,\n\t190, 191, 128, 159, 161, 167, 170, 187,\n\t185, 191, 192, 255, 128, 143, 144, 173,\n\t174, 191, 128, 131, 132, 162, 163, 183,\n\t184, 188, 189, 255, 133, 143, 145, 191,\n\t192, 255, 128, 146, 147, 159, 160, 191,\n\t160, 128, 191, 128, 129, 191, 192, 255,\n\t159, 160, 171, 128, 170, 172, 191, 192,\n\t255, 173, 191, 192, 255, 179, 191, 192,\n\t255, 128, 176, 177, 178, 129, 191, 128,\n\t129, 130, 191, 171, 175, 189, 191, 192,\n\t255, 128, 136, 137, 143, 144, 153, 154,\n\t191, 144, 145, 146, 147, 148, 149, 154,\n\t155, 156, 157, 158, 159, 128, 143, 150,\n\t153, 160, 191, 149, 157, 173, 186, 188,\n\t160, 161, 163, 164, 167, 168, 132, 134,\n\t149, 157, 186, 191, 139, 140, 192, 255,\n\t133, 145, 128, 134, 135, 137, 138, 255,\n\t166, 167, 129, 155, 187, 149, 181, 143,\n\t175, 137, 169, 131, 140, 191, 192, 255,\n\t160, 163, 164, 165, 184, 185, 186, 128,\n\t159, 161, 162, 166, 191, 133, 191, 192,\n\t255, 132, 160, 163, 167, 179, 184, 186,\n\t128, 164, 165, 168, 169, 187, 188, 191,\n\t130, 135, 137, 139, 144, 147, 151, 153,\n\t155, 157, 159, 163, 171, 179, 184, 189,\n\t191, 128, 140, 141, 148, 149, 160, 161,\n\t164, 165, 166, 167, 190, 138, 164, 170,\n\t128, 155, 156, 160, 161, 187, 188, 191,\n\t128, 191, 155, 156, 128, 191, 151, 191,\n\t192, 255, 156, 157, 160, 128, 191, 181,\n\t191, 192, 255, 158, 159, 186, 128, 185,\n\t187, 191, 192, 255, 162, 191, 192, 255,\n\t160, 168, 128, 159, 161, 167, 169, 191,\n\t158, 191, 192, 255, 9, 10, 13, 32,\n\t33, 34, 35, 38, 46, 47, 60, 61,\n\t62, 64, 92, 95, 123, 124, 125, 126,\n\t127, 194, 195, 198, 199, 203, 204, 205,\n\t206, 207, 210, 212, 213, 214, 215, 216,\n\t217, 219, 220, 221, 222, 223, 224, 225,\n\t226, 227, 228, 233, 234, 237, 238, 239,\n\t240, 0, 36, 37, 45, 48, 57, 58,\n\t63, 65, 90, 91, 96, 97, 122, 192,\n\t193, 196, 218, 229, 236, 241, 247, 9,\n\t32, 10, 61, 10, 38, 46, 42, 47,\n\t46, 69, 101, 48, 57, 60, 61, 61,\n\t62, 61, 45, 95, 194, 195, 198, 199,\n\t203, 204, 205, 206, 207, 210, 212, 213,\n\t214, 215, 216, 217, 219, 220, 221, 222,\n\t223, 224, 225, 226, 227, 228, 233, 234,\n\t237, 239, 240, 243, 48, 57, 65, 90,\n\t97, 122, 196, 218, 229, 236, 124, 125,\n\t128, 191, 170, 181, 186, 128, 191, 151,\n\t183, 128, 255, 192, 255, 0, 127, 173,\n\t130, 133, 146, 159, 165, 171, 175, 191,\n\t192, 255, 181, 190, 128, 175, 176, 183,\n\t184, 185, 186, 191, 134, 139, 141, 162,\n\t128, 135, 136, 255, 182, 130, 137, 176,\n\t151, 152, 154, 160, 136, 191, 192, 255,\n\t128, 143, 144, 170, 171, 175, 176, 178,\n\t179, 191, 128, 159, 160, 191, 176, 128,\n\t138, 139, 173, 174, 255, 148, 150, 164,\n\t167, 173, 176, 185, 189, 190, 192, 255,\n\t144, 128, 145, 146, 175, 176, 191, 128,\n\t140, 141, 255, 166, 176, 178, 191, 192,\n\t255, 186, 128, 137, 138, 170, 171, 179,\n\t180, 181, 182, 191, 160, 161, 162, 164,\n\t165, 166, 167, 168, 169, 170, 171, 172,\n\t173, 174, 175, 176, 177, 178, 179, 180,\n\t181, 182, 183, 184, 185, 186, 187, 188,\n\t189, 190, 128, 191, 128, 129, 130, 131,\n\t137, 138, 139, 140, 141, 142, 143, 144,\n\t153, 154, 155, 156, 157, 158, 159, 160,\n\t161, 162, 163, 164, 165, 166, 167, 168,\n\t169, 170, 171, 172, 173, 174, 175, 176,\n\t177, 178, 179, 180, 182, 183, 184, 188,\n\t189, 190, 191, 132, 187, 129, 130, 132,\n\t133, 134, 176, 177, 178, 179, 180, 181,\n\t182, 183, 128, 191, 128, 129, 130, 131,\n\t132, 133, 134, 135, 144, 136, 143, 145,\n\t191, 192, 255, 182, 183, 184, 128, 191,\n\t128, 191, 191, 128, 190, 192, 255, 128,\n\t146, 147, 148, 152, 153, 154, 155, 156,\n\t158, 159, 160, 161, 162, 163, 164, 165,\n\t166, 167, 168, 169, 170, 171, 172, 173,\n\t174, 175, 176, 129, 191, 192, 255, 158,\n\t159, 128, 157, 160, 191, 192, 255, 128,\n\t191, 164, 169, 171, 172, 173, 174, 175,\n\t180, 181, 182, 183, 184, 185, 187, 188,\n\t189, 190, 191, 128, 163, 165, 186, 144,\n\t145, 146, 147, 148, 150, 151, 152, 155,\n\t157, 158, 160, 170, 171, 172, 175, 128,\n\t159, 161, 169, 173, 191, 128, 191, 10,\n\t13, 34, 36, 37, 92, 128, 191, 192,\n\t223, 224, 239, 240, 247, 248, 255, 10,\n\t13, 34, 92, 36, 37, 128, 191, 192,\n\t223, 224, 239, 240, 247, 248, 255, 10,\n\t13, 36, 123, 123, 126, 126, 37, 123,\n\t126, 10, 13, 128, 191, 192, 223, 224,\n\t239, 240, 247, 248, 255, 128, 191, 128,\n\t191, 128, 191, 10, 13, 36, 37, 128,\n\t191, 192, 223, 224, 239, 240, 247, 248,\n\t255, 10, 13, 36, 37, 128, 191, 192,\n\t223, 224, 239, 240, 247, 248, 255, 10,\n\t13, 10, 13, 123, 10, 13, 126, 10,\n\t13, 126, 126, 128, 191, 128, 191, 128,\n\t191, 10, 13, 36, 37, 128, 191, 192,\n\t223, 224, 239, 240, 247, 248, 255, 10,\n\t13, 36, 37, 128, 191, 192, 223, 224,\n\t239, 240, 247, 248, 255, 10, 13, 10,\n\t13, 123, 10, 13, 126, 10, 13, 126,\n\t126, 128, 191, 128, 191, 128, 191, 95,\n\t194, 195, 198, 199, 203, 204, 205, 206,\n\t207, 210, 212, 213, 214, 215, 216, 217,\n\t219, 220, 221, 222, 223, 224, 225, 226,\n\t227, 228, 233, 234, 237, 238, 239, 240,\n\t65, 90, 97, 122, 128, 191, 192, 193,\n\t196, 218, 229, 236, 241, 247, 248, 255,\n\t45, 95, 194, 195, 198, 199, 203, 204,\n\t205, 206, 207, 210, 212, 213, 214, 215,\n\t216, 217, 219, 220, 221, 222, 223, 224,\n\t225, 226, 227, 228, 233, 234, 237, 239,\n\t240, 243, 48, 57, 65, 90, 97, 122,\n\t196, 218, 229, 236, 128, 191, 170, 181,\n\t186, 128, 191, 151, 183, 128, 255, 192,\n\t255, 0, 127, 173, 130, 133, 146, 159,\n\t165, 171, 175, 191, 192, 255, 181, 190,\n\t128, 175, 176, 183, 184, 185, 186, 191,\n\t134, 139, 141, 162, 128, 135, 136, 255,\n\t182, 130, 137, 176, 151, 152, 154, 160,\n\t136, 191, 192, 255, 128, 143, 144, 170,\n\t171, 175, 176, 178, 179, 191, 128, 159,\n\t160, 191, 176, 128, 138, 139, 173, 174,\n\t255, 148, 150, 164, 167, 173, 176, 185,\n\t189, 190, 192, 255, 144, 128, 145, 146,\n\t175, 176, 191, 128, 140, 141, 255, 166,\n\t176, 178, 191, 192, 255, 186, 128, 137,\n\t138, 170, 171, 179, 180, 181, 182, 191,\n\t160, 161, 162, 164, 165, 166, 167, 168,\n\t169, 170, 171, 172, 173, 174, 175, 176,\n\t177, 178, 179, 180, 181, 182, 183, 184,\n\t185, 186, 187, 188, 189, 190, 128, 191,\n\t128, 129, 130, 131, 137, 138, 139, 140,\n\t141, 142, 143, 144, 153, 154, 155, 156,\n\t157, 158, 159, 160, 161, 162, 163, 164,\n\t165, 166, 167, 168, 169, 170, 171, 172,\n\t173, 174, 175, 176, 177, 178, 179, 180,\n\t182, 183, 184, 188, 189, 190, 191, 132,\n\t187, 129, 130, 132, 133, 134, 176, 177,\n\t178, 179, 180, 181, 182, 183, 128, 191,\n\t128, 129, 130, 131, 132, 133, 134, 135,\n\t144, 136, 143, 145, 191, 192, 255, 182,\n\t183, 184, 128, 191, 128, 191, 191, 128,\n\t190, 192, 255, 128, 146, 147, 148, 152,\n\t153, 154, 155, 156, 158, 159, 160, 161,\n\t162, 163, 164, 165, 166, 167, 168, 169,\n\t170, 171, 172, 173, 174, 175, 176, 129,\n\t191, 192, 255, 158, 159, 128, 157, 160,\n\t191, 192, 255, 128, 191, 164, 169, 171,\n\t172, 173, 174, 175, 180, 181, 182, 183,\n\t184, 185, 187, 188, 189, 190, 191, 128,\n\t163, 165, 186, 144, 145, 146, 147, 148,\n\t150, 151, 152, 155, 157, 158, 160, 170,\n\t171, 172, 175, 128, 159, 161, 169, 173,\n\t191, 128, 191,\n}\n\nvar _hcltok_single_lengths []byte = []byte{\n\t0, 1, 1, 2, 3, 2, 0, 32,\n\t31, 36, 1, 4, 0, 0, 0, 0,\n\t1, 2, 1, 1, 1, 1, 0, 1,\n\t1, 0, 0, 2, 0, 0, 0, 1,\n\t32, 0, 0, 0, 0, 1, 3, 1,\n\t1, 1, 0, 2, 0, 1, 1, 2,\n\t0, 3, 0, 1, 0, 2, 1, 2,\n\t0, 0, 5, 1, 4, 0, 0, 1,\n\t43, 0, 0, 0, 2, 3, 2, 1,\n\t1, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 1, 1, 0, 0,\n\t0, 0, 0, 0, 0, 0, 4, 1,\n\t0, 15, 0, 0, 0, 1, 6, 1,\n\t0, 0, 1, 0, 2, 0, 0, 0,\n\t9, 0, 1, 1, 0, 0, 0, 3,\n\t0, 1, 0, 28, 0, 0, 0, 1,\n\t0, 1, 0, 0, 0, 1, 0, 0,\n\t0, 0, 0, 0, 0, 1, 0, 2,\n\t0, 0, 18, 0, 0, 1, 0, 0,\n\t0, 0, 0, 0, 0, 0, 1, 0,\n\t0, 0, 16, 36, 0, 0, 0, 0,\n\t1, 0, 0, 0, 0, 0, 1, 0,\n\t0, 0, 0, 0, 0, 2, 0, 0,\n\t0, 0, 0, 1, 0, 0, 0, 0,\n\t0, 0, 0, 28, 0, 0, 0, 1,\n\t1, 1, 1, 0, 0, 2, 0, 1,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 1, 1, 4, 0, 0, 2, 2,\n\t0, 11, 0, 0, 0, 0, 0, 0,\n\t0, 1, 1, 3, 0, 0, 4, 0,\n\t0, 0, 18, 0, 0, 0, 1, 4,\n\t1, 4, 1, 0, 3, 2, 2, 2,\n\t1, 0, 0, 1, 8, 0, 0, 0,\n\t4, 12, 0, 2, 0, 3, 0, 1,\n\t0, 2, 0, 1, 2, 0, 3, 1,\n\t2, 0, 0, 0, 0, 0, 1, 1,\n\t0, 0, 1, 28, 3, 0, 1, 1,\n\t2, 1, 0, 1, 1, 2, 1, 1,\n\t2, 1, 1, 0, 2, 1, 1, 1,\n\t1, 0, 0, 6, 1, 1, 0, 0,\n\t46, 1, 1, 0, 0, 0, 0, 2,\n\t1, 0, 0, 0, 1, 0, 0, 0,\n\t0, 0, 0, 0, 13, 2, 0, 0,\n\t0, 9, 0, 1, 28, 0, 1, 3,\n\t0, 2, 0, 0, 0, 1, 0, 1,\n\t1, 2, 0, 18, 2, 0, 0, 16,\n\t35, 0, 0, 0, 1, 0, 28, 0,\n\t0, 0, 0, 1, 0, 2, 0, 0,\n\t1, 0, 0, 1, 0, 0, 1, 0,\n\t0, 0, 0, 1, 11, 0, 0, 0,\n\t0, 4, 0, 12, 1, 7, 0, 4,\n\t0, 0, 0, 0, 1, 2, 1, 1,\n\t1, 1, 0, 1, 1, 0, 0, 2,\n\t0, 0, 0, 1, 32, 0, 0, 0,\n\t0, 1, 3, 1, 1, 1, 0, 2,\n\t0, 1, 1, 2, 0, 3, 0, 1,\n\t0, 2, 1, 2, 0, 0, 5, 1,\n\t4, 0, 0, 1, 43, 0, 0, 0,\n\t2, 3, 2, 1, 1, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t1, 1, 0, 0, 0, 0, 0, 0,\n\t0, 0, 4, 1, 0, 15, 0, 0,\n\t0, 1, 6, 1, 0, 0, 1, 0,\n\t2, 0, 0, 0, 9, 0, 1, 1,\n\t0, 0, 0, 3, 0, 1, 0, 28,\n\t0, 0, 0, 1, 0, 1, 0, 0,\n\t0, 1, 0, 0, 0, 0, 0, 0,\n\t0, 1, 0, 2, 0, 0, 18, 0,\n\t0, 1, 0, 0, 0, 0, 0, 0,\n\t0, 0, 1, 0, 0, 0, 16, 36,\n\t0, 0, 0, 0, 1, 0, 0, 0,\n\t0, 0, 1, 0, 0, 0, 0, 0,\n\t0, 2, 0, 0, 0, 0, 0, 1,\n\t0, 0, 0, 0, 0, 0, 0, 28,\n\t0, 0, 0, 1, 1, 1, 1, 0,\n\t0, 2, 0, 1, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 1, 1, 4,\n\t0, 0, 2, 2, 0, 11, 0, 0,\n\t0, 0, 0, 0, 0, 1, 1, 3,\n\t0, 0, 4, 0, 0, 0, 18, 0,\n\t0, 0, 1, 4, 1, 4, 1, 0,\n\t3, 2, 2, 2, 1, 0, 0, 1,\n\t8, 0, 0, 0, 4, 12, 0, 2,\n\t0, 3, 0, 1, 0, 2, 0, 1,\n\t2, 0, 0, 3, 0, 1, 1, 1,\n\t2, 2, 4, 1, 6, 2, 4, 2,\n\t4, 1, 4, 0, 6, 1, 3, 1,\n\t2, 0, 2, 11, 1, 1, 1, 0,\n\t1, 1, 0, 2, 0, 3, 3, 2,\n\t1, 0, 0, 0, 1, 0, 1, 0,\n\t1, 1, 0, 2, 0, 0, 1, 0,\n\t0, 0, 0, 0, 0, 0, 1, 0,\n\t0, 0, 0, 0, 0, 0, 1, 0,\n\t0, 0, 4, 3, 2, 2, 0, 6,\n\t1, 0, 1, 1, 0, 2, 0, 4,\n\t3, 0, 1, 1, 0, 0, 0, 0,\n\t0, 0, 0, 1, 0, 0, 0, 1,\n\t0, 3, 0, 2, 0, 0, 0, 3,\n\t0, 2, 1, 1, 3, 1, 0, 0,\n\t0, 0, 0, 5, 2, 0, 0, 0,\n\t0, 0, 0, 1, 0, 0, 1, 1,\n\t0, 0, 35, 4, 0, 0, 0, 0,\n\t0, 0, 0, 1, 0, 0, 0, 0,\n\t0, 0, 3, 0, 1, 0, 0, 3,\n\t0, 0, 1, 0, 0, 0, 0, 28,\n\t0, 0, 0, 0, 1, 0, 3, 1,\n\t4, 0, 1, 0, 0, 1, 0, 0,\n\t1, 0, 0, 0, 0, 1, 1, 0,\n\t7, 0, 0, 2, 2, 0, 11, 0,\n\t0, 0, 0, 0, 1, 1, 3, 0,\n\t0, 4, 0, 0, 0, 12, 1, 4,\n\t1, 5, 2, 0, 3, 2, 2, 2,\n\t1, 7, 0, 7, 17, 3, 0, 2,\n\t0, 3, 0, 0, 1, 0, 2, 0,\n\t2, 0, 0, 0, 0, 0, 1, 0,\n\t0, 0, 2, 2, 1, 0, 0, 0,\n\t2, 2, 4, 0, 0, 0, 0, 1,\n\t2, 1, 1, 1, 1, 0, 1, 1,\n\t0, 0, 2, 0, 0, 0, 1, 32,\n\t0, 0, 0, 0, 1, 3, 1, 1,\n\t1, 0, 2, 0, 1, 1, 2, 0,\n\t3, 0, 1, 0, 2, 1, 2, 0,\n\t0, 5, 1, 4, 0, 0, 1, 43,\n\t0, 0, 0, 2, 3, 2, 1, 1,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 1, 1, 0, 0, 0,\n\t0, 0, 0, 0, 0, 4, 1, 0,\n\t15, 0, 0, 0, 1, 6, 1, 0,\n\t0, 1, 0, 2, 0, 0, 0, 9,\n\t0, 1, 1, 0, 0, 0, 3, 0,\n\t1, 0, 28, 0, 0, 0, 1, 0,\n\t1, 0, 0, 0, 1, 0, 0, 0,\n\t0, 0, 0, 0, 1, 0, 2, 0,\n\t0, 18, 0, 0, 1, 0, 0, 0,\n\t0, 0, 0, 0, 0, 1, 0, 0,\n\t0, 16, 36, 0, 0, 0, 0, 1,\n\t0, 0, 0, 0, 0, 1, 0, 0,\n\t0, 0, 0, 0, 2, 0, 0, 0,\n\t0, 0, 1, 0, 0, 0, 0, 0,\n\t0, 0, 28, 0, 0, 0, 1, 1,\n\t1, 1, 0, 0, 2, 0, 1, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t1, 1, 4, 0, 0, 2, 2, 0,\n\t11, 0, 0, 0, 0, 0, 0, 0,\n\t1, 1, 3, 0, 0, 4, 0, 0,\n\t0, 18, 0, 0, 0, 1, 4, 1,\n\t4, 1, 0, 3, 2, 2, 2, 1,\n\t0, 0, 1, 8, 0, 0, 0, 4,\n\t12, 0, 2, 0, 3, 0, 1, 0,\n\t2, 0, 1, 2, 0, 0, 3, 0,\n\t1, 1, 1, 2, 2, 4, 1, 6,\n\t2, 4, 2, 4, 1, 4, 0, 6,\n\t1, 3, 1, 2, 0, 2, 11, 1,\n\t1, 1, 0, 1, 1, 0, 2, 0,\n\t3, 3, 2, 1, 0, 0, 0, 1,\n\t0, 1, 0, 1, 1, 0, 2, 0,\n\t0, 1, 0, 0, 0, 0, 0, 0,\n\t0, 1, 0, 0, 0, 0, 0, 0,\n\t0, 1, 0, 0, 0, 4, 3, 2,\n\t2, 0, 6, 1, 0, 1, 1, 0,\n\t2, 0, 4, 3, 0, 1, 1, 0,\n\t0, 0, 0, 0, 0, 0, 1, 0,\n\t0, 0, 1, 0, 3, 0, 2, 0,\n\t0, 0, 3, 0, 2, 1, 1, 3,\n\t1, 0, 0, 0, 0, 0, 5, 2,\n\t0, 0, 0, 0, 0, 0, 1, 0,\n\t0, 1, 1, 0, 0, 35, 4, 0,\n\t0, 0, 0, 0, 0, 0, 1, 0,\n\t0, 0, 0, 0, 0, 3, 0, 1,\n\t0, 0, 3, 0, 0, 1, 0, 0,\n\t0, 0, 28, 0, 0, 0, 0, 1,\n\t0, 3, 1, 4, 0, 1, 0, 0,\n\t1, 0, 0, 1, 0, 0, 0, 0,\n\t1, 1, 0, 7, 0, 0, 2, 2,\n\t0, 11, 0, 0, 0, 0, 0, 1,\n\t1, 3, 0, 0, 4, 0, 0, 0,\n\t12, 1, 4, 1, 5, 2, 0, 3,\n\t2, 2, 2, 1, 7, 0, 7, 17,\n\t3, 0, 2, 0, 3, 0, 0, 1,\n\t0, 2, 0, 53, 2, 1, 1, 1,\n\t1, 1, 2, 3, 2, 2, 1, 34,\n\t1, 1, 0, 3, 2, 0, 0, 0,\n\t1, 2, 4, 1, 0, 1, 0, 0,\n\t0, 0, 1, 1, 1, 0, 0, 1,\n\t30, 47, 13, 9, 3, 0, 1, 28,\n\t2, 0, 18, 16, 0, 6, 4, 2,\n\t2, 0, 1, 1, 1, 2, 1, 2,\n\t0, 0, 0, 4, 2, 2, 3, 3,\n\t2, 1, 1, 0, 0, 0, 4, 2,\n\t2, 3, 3, 2, 1, 1, 0, 0,\n\t0, 33, 34, 0, 3, 2, 0, 0,\n\t0, 1, 2, 4, 1, 0, 1, 0,\n\t0, 0, 0, 1, 1, 1, 0, 0,\n\t1, 30, 47, 13, 9, 3, 0, 1,\n\t28, 2, 0, 18, 16, 0,\n}\n\nvar _hcltok_range_lengths []byte = []byte{\n\t0, 0, 0, 0, 1, 1, 1, 5,\n\t5, 5, 0, 0, 3, 0, 1, 1,\n\t4, 2, 3, 0, 1, 0, 2, 2,\n\t4, 2, 2, 3, 1, 1, 1, 1,\n\t0, 1, 1, 2, 2, 1, 4, 6,\n\t9, 6, 8, 5, 8, 7, 10, 4,\n\t6, 4, 7, 7, 5, 5, 4, 5,\n\t1, 2, 8, 4, 3, 3, 3, 0,\n\t3, 1, 2, 1, 2, 2, 3, 3,\n\t1, 3, 2, 2, 1, 2, 2, 2,\n\t3, 4, 4, 3, 1, 2, 1, 3,\n\t2, 2, 2, 2, 2, 3, 3, 1,\n\t1, 2, 1, 3, 2, 2, 3, 2,\n\t7, 0, 1, 4, 1, 2, 4, 2,\n\t1, 2, 0, 2, 2, 3, 5, 5,\n\t1, 4, 1, 1, 2, 2, 1, 0,\n\t0, 1, 1, 1, 1, 1, 2, 2,\n\t2, 2, 1, 1, 1, 4, 2, 2,\n\t3, 1, 4, 4, 6, 1, 3, 1,\n\t1, 2, 1, 1, 1, 5, 3, 1,\n\t1, 1, 2, 3, 3, 1, 2, 2,\n\t1, 4, 1, 2, 5, 2, 1, 1,\n\t0, 2, 2, 2, 2, 2, 2, 2,\n\t2, 2, 1, 1, 2, 4, 2, 1,\n\t2, 2, 2, 6, 1, 1, 2, 1,\n\t2, 1, 1, 1, 2, 2, 2, 1,\n\t3, 2, 5, 2, 8, 6, 2, 2,\n\t2, 2, 3, 1, 3, 1, 2, 1,\n\t3, 2, 2, 3, 1, 1, 1, 1,\n\t1, 1, 1, 2, 2, 4, 1, 2,\n\t1, 0, 1, 1, 1, 1, 0, 1,\n\t2, 3, 1, 3, 3, 1, 0, 3,\n\t0, 2, 3, 1, 0, 0, 0, 0,\n\t2, 2, 2, 2, 1, 5, 2, 2,\n\t5, 7, 5, 0, 1, 0, 1, 1,\n\t1, 1, 1, 0, 1, 1, 0, 3,\n\t3, 1, 1, 2, 1, 3, 5, 1,\n\t1, 2, 2, 1, 1, 1, 1, 2,\n\t6, 3, 7, 2, 6, 1, 6, 2,\n\t8, 0, 4, 2, 5, 2, 3, 3,\n\t3, 1, 2, 8, 2, 0, 2, 1,\n\t2, 1, 5, 2, 1, 3, 3, 0,\n\t2, 1, 2, 1, 0, 1, 1, 3,\n\t1, 1, 2, 3, 0, 0, 3, 2,\n\t4, 1, 4, 1, 1, 3, 1, 1,\n\t1, 1, 2, 2, 1, 3, 1, 4,\n\t3, 3, 1, 1, 5, 2, 1, 1,\n\t2, 1, 2, 1, 3, 2, 0, 1,\n\t1, 1, 1, 1, 1, 1, 2, 1,\n\t1, 1, 1, 1, 1, 1, 0, 1,\n\t1, 2, 2, 1, 1, 1, 3, 2,\n\t1, 0, 2, 1, 1, 1, 1, 0,\n\t3, 0, 1, 1, 4, 2, 3, 0,\n\t1, 0, 2, 2, 4, 2, 2, 3,\n\t1, 1, 1, 1, 0, 1, 1, 2,\n\t2, 1, 4, 6, 9, 6, 8, 5,\n\t8, 7, 10, 4, 6, 4, 7, 7,\n\t5, 5, 4, 5, 1, 2, 8, 4,\n\t3, 3, 3, 0, 3, 1, 2, 1,\n\t2, 2, 3, 3, 1, 3, 2, 2,\n\t1, 2, 2, 2, 3, 4, 4, 3,\n\t1, 2, 1, 3, 2, 2, 2, 2,\n\t2, 3, 3, 1, 1, 2, 1, 3,\n\t2, 2, 3, 2, 7, 0, 1, 4,\n\t1, 2, 4, 2, 1, 2, 0, 2,\n\t2, 3, 5, 5, 1, 4, 1, 1,\n\t2, 2, 1, 0, 0, 1, 1, 1,\n\t1, 1, 2, 2, 2, 2, 1, 1,\n\t1, 4, 2, 2, 3, 1, 4, 4,\n\t6, 1, 3, 1, 1, 2, 1, 1,\n\t1, 5, 3, 1, 1, 1, 2, 3,\n\t3, 1, 2, 2, 1, 4, 1, 2,\n\t5, 2, 1, 1, 0, 2, 2, 2,\n\t2, 2, 2, 2, 2, 2, 1, 1,\n\t2, 4, 2, 1, 2, 2, 2, 6,\n\t1, 1, 2, 1, 2, 1, 1, 1,\n\t2, 2, 2, 1, 3, 2, 5, 2,\n\t8, 6, 2, 2, 2, 2, 3, 1,\n\t3, 1, 2, 1, 3, 2, 2, 3,\n\t1, 1, 1, 1, 1, 1, 1, 2,\n\t2, 4, 1, 2, 1, 0, 1, 1,\n\t1, 1, 0, 1, 2, 3, 1, 3,\n\t3, 1, 0, 3, 0, 2, 3, 1,\n\t0, 0, 0, 0, 2, 2, 2, 2,\n\t1, 5, 2, 2, 5, 7, 5, 0,\n\t1, 0, 1, 1, 1, 1, 1, 0,\n\t1, 1, 1, 2, 2, 3, 3, 4,\n\t7, 5, 7, 5, 3, 3, 7, 3,\n\t13, 1, 3, 5, 3, 5, 3, 6,\n\t5, 2, 2, 8, 4, 1, 2, 3,\n\t2, 10, 2, 2, 0, 2, 3, 3,\n\t1, 2, 3, 3, 1, 2, 3, 3,\n\t4, 4, 2, 1, 2, 2, 3, 2,\n\t2, 5, 3, 2, 3, 2, 1, 3,\n\t3, 6, 2, 2, 5, 2, 5, 1,\n\t1, 2, 4, 1, 11, 1, 3, 8,\n\t4, 2, 1, 0, 4, 3, 3, 3,\n\t2, 9, 1, 1, 4, 3, 2, 2,\n\t2, 3, 4, 2, 3, 2, 4, 3,\n\t2, 2, 3, 3, 4, 3, 3, 4,\n\t2, 5, 4, 8, 7, 1, 2, 1,\n\t3, 1, 2, 5, 1, 2, 2, 2,\n\t2, 1, 3, 2, 2, 3, 3, 1,\n\t9, 1, 5, 1, 3, 2, 2, 3,\n\t2, 3, 3, 3, 1, 3, 3, 2,\n\t2, 4, 5, 3, 3, 4, 3, 3,\n\t3, 2, 2, 2, 4, 2, 2, 1,\n\t3, 3, 3, 3, 3, 3, 2, 2,\n\t3, 2, 3, 3, 2, 3, 2, 3,\n\t1, 2, 2, 2, 2, 2, 2, 2,\n\t2, 2, 2, 2, 3, 2, 3, 2,\n\t3, 5, 3, 3, 1, 2, 3, 2,\n\t2, 1, 2, 3, 4, 3, 0, 3,\n\t0, 2, 3, 1, 0, 0, 0, 0,\n\t2, 3, 2, 4, 6, 4, 1, 1,\n\t2, 1, 2, 1, 3, 2, 3, 2,\n\t5, 1, 1, 1, 1, 1, 0, 1,\n\t1, 1, 0, 0, 0, 1, 1, 1,\n\t0, 0, 0, 3, 0, 1, 1, 4,\n\t2, 3, 0, 1, 0, 2, 2, 4,\n\t2, 2, 3, 1, 1, 1, 1, 0,\n\t1, 1, 2, 2, 1, 4, 6, 9,\n\t6, 8, 5, 8, 7, 10, 4, 6,\n\t4, 7, 7, 5, 5, 4, 5, 1,\n\t2, 8, 4, 3, 3, 3, 0, 3,\n\t1, 2, 1, 2, 2, 3, 3, 1,\n\t3, 2, 2, 1, 2, 2, 2, 3,\n\t4, 4, 3, 1, 2, 1, 3, 2,\n\t2, 2, 2, 2, 3, 3, 1, 1,\n\t2, 1, 3, 2, 2, 3, 2, 7,\n\t0, 1, 4, 1, 2, 4, 2, 1,\n\t2, 0, 2, 2, 3, 5, 5, 1,\n\t4, 1, 1, 2, 2, 1, 0, 0,\n\t1, 1, 1, 1, 1, 2, 2, 2,\n\t2, 1, 1, 1, 4, 2, 2, 3,\n\t1, 4, 4, 6, 1, 3, 1, 1,\n\t2, 1, 1, 1, 5, 3, 1, 1,\n\t1, 2, 3, 3, 1, 2, 2, 1,\n\t4, 1, 2, 5, 2, 1, 1, 0,\n\t2, 2, 2, 2, 2, 2, 2, 2,\n\t2, 1, 1, 2, 4, 2, 1, 2,\n\t2, 2, 6, 1, 1, 2, 1, 2,\n\t1, 1, 1, 2, 2, 2, 1, 3,\n\t2, 5, 2, 8, 6, 2, 2, 2,\n\t2, 3, 1, 3, 1, 2, 1, 3,\n\t2, 2, 3, 1, 1, 1, 1, 1,\n\t1, 1, 2, 2, 4, 1, 2, 1,\n\t0, 1, 1, 1, 1, 0, 1, 2,\n\t3, 1, 3, 3, 1, 0, 3, 0,\n\t2, 3, 1, 0, 0, 0, 0, 2,\n\t2, 2, 2, 1, 5, 2, 2, 5,\n\t7, 5, 0, 1, 0, 1, 1, 1,\n\t1, 1, 0, 1, 1, 1, 2, 2,\n\t3, 3, 4, 7, 5, 7, 5, 3,\n\t3, 7, 3, 13, 1, 3, 5, 3,\n\t5, 3, 6, 5, 2, 2, 8, 4,\n\t1, 2, 3, 2, 10, 2, 2, 0,\n\t2, 3, 3, 1, 2, 3, 3, 1,\n\t2, 3, 3, 4, 4, 2, 1, 2,\n\t2, 3, 2, 2, 5, 3, 2, 3,\n\t2, 1, 3, 3, 6, 2, 2, 5,\n\t2, 5, 1, 1, 2, 4, 1, 11,\n\t1, 3, 8, 4, 2, 1, 0, 4,\n\t3, 3, 3, 2, 9, 1, 1, 4,\n\t3, 2, 2, 2, 3, 4, 2, 3,\n\t2, 4, 3, 2, 2, 3, 3, 4,\n\t3, 3, 4, 2, 5, 4, 8, 7,\n\t1, 2, 1, 3, 1, 2, 5, 1,\n\t2, 2, 2, 2, 1, 3, 2, 2,\n\t3, 3, 1, 9, 1, 5, 1, 3,\n\t2, 2, 3, 2, 3, 3, 3, 1,\n\t3, 3, 2, 2, 4, 5, 3, 3,\n\t4, 3, 3, 3, 2, 2, 2, 4,\n\t2, 2, 1, 3, 3, 3, 3, 3,\n\t3, 2, 2, 3, 2, 3, 3, 2,\n\t3, 2, 3, 1, 2, 2, 2, 2,\n\t2, 2, 2, 2, 2, 2, 2, 3,\n\t2, 3, 2, 3, 5, 3, 3, 1,\n\t2, 3, 2, 2, 1, 2, 3, 4,\n\t3, 0, 3, 0, 2, 3, 1, 0,\n\t0, 0, 0, 2, 3, 2, 4, 6,\n\t4, 1, 1, 2, 1, 2, 1, 3,\n\t2, 3, 2, 11, 0, 0, 0, 0,\n\t0, 0, 0, 1, 0, 0, 0, 5,\n\t0, 0, 1, 1, 1, 0, 1, 1,\n\t5, 4, 2, 0, 1, 0, 2, 2,\n\t5, 2, 3, 5, 3, 2, 3, 5,\n\t1, 1, 1, 3, 1, 1, 2, 2,\n\t3, 1, 2, 3, 1, 5, 6, 0,\n\t0, 0, 0, 0, 0, 0, 0, 5,\n\t1, 1, 1, 5, 6, 0, 0, 0,\n\t0, 0, 0, 1, 1, 1, 5, 6,\n\t0, 0, 0, 0, 0, 0, 1, 1,\n\t1, 8, 5, 1, 1, 1, 0, 1,\n\t1, 5, 4, 2, 0, 1, 0, 2,\n\t2, 5, 2, 3, 5, 3, 2, 3,\n\t5, 1, 1, 1, 3, 1, 1, 2,\n\t2, 3, 1, 2, 3, 1,\n}\n\nvar _hcltok_index_offsets []int16 = []int16{\n\t0, 0, 2, 4, 7, 12, 16, 18,\n\t56, 93, 135, 137, 142, 146, 147, 149,\n\t151, 157, 162, 167, 169, 172, 174, 177,\n\t181, 187, 190, 193, 199, 201, 203, 205,\n\t208, 241, 243, 245, 248, 251, 254, 262,\n\t270, 281, 289, 298, 306, 315, 324, 336,\n\t343, 350, 358, 366, 375, 381, 389, 395,\n\t403, 405, 408, 422, 428, 436, 440, 444,\n\t446, 493, 495, 498, 500, 505, 511, 517,\n\t522, 525, 529, 532, 535, 537, 540, 543,\n\t546, 550, 555, 560, 564, 566, 569, 571,\n\t575, 578, 581, 584, 587, 591, 596, 600,\n\t602, 604, 607, 609, 613, 616, 619, 627,\n\t631, 639, 655, 657, 662, 664, 668, 679,\n\t683, 685, 688, 690, 693, 698, 702, 708,\n\t714, 725, 730, 733, 736, 739, 742, 744,\n\t748, 749, 752, 754, 784, 786, 788, 791,\n\t795, 798, 802, 804, 806, 808, 814, 817,\n\t820, 824, 826, 831, 836, 843, 846, 850,\n\t854, 856, 859, 879, 881, 883, 890, 894,\n\t896, 898, 900, 903, 907, 911, 913, 917,\n\t920, 922, 927, 945, 984, 990, 993, 995,\n\t997, 999, 1002, 1005, 1008, 1011, 1014, 1018,\n\t1021, 1024, 1027, 1029, 1031, 1034, 1041, 1044,\n\t1046, 1049, 1052, 1055, 1063, 1065, 1067, 1070,\n\t1072, 1075, 1077, 1079, 1109, 1112, 1115, 1118,\n\t1121, 1126, 1130, 1137, 1140, 1149, 1158, 1161,\n\t1165, 1168, 1171, 1175, 1177, 1181, 1183, 1186,\n\t1188, 1192, 1196, 1200, 1208, 1210, 1212, 1216,\n\t1220, 1222, 1235, 1237, 1240, 1243, 1248, 1250,\n\t1253, 1255, 1257, 1260, 1265, 1267, 1269, 1274,\n\t1276, 1279, 1283, 1303, 1307, 1311, 1313, 1315,\n\t1323, 1325, 1332, 1337, 1339, 1343, 1346, 1349,\n\t1352, 1356, 1359, 1362, 1366, 1376, 1382, 1385,\n\t1388, 1398, 1418, 1424, 1427, 1429, 1433, 1435,\n\t1438, 1440, 1444, 1446, 1448, 1452, 1454, 1458,\n\t1463, 1469, 1471, 1473, 1476, 1478, 1482, 1489,\n\t1492, 1494, 1497, 1501, 1531, 1536, 1538, 1541,\n\t1545, 1554, 1559, 1567, 1571, 1579, 1583, 1591,\n\t1595, 1606, 1608, 1614, 1617, 1625, 1629, 1634,\n\t1639, 1644, 1646, 1649, 1664, 1668, 1670, 1673,\n\t1675, 1724, 1727, 1734, 1737, 1739, 1743, 1747,\n\t1750, 1754, 1756, 1759, 1761, 1763, 1765, 1767,\n\t1771, 1773, 1775, 1778, 1782, 1796, 1799, 1803,\n\t1806, 1811, 1822, 1827, 1830, 1860, 1864, 1867,\n\t1872, 1874, 1878, 1881, 1884, 1886, 1891, 1893,\n\t1899, 1904, 1910, 1912, 1932, 1940, 1943, 1945,\n\t1963, 2001, 2003, 2006, 2008, 2013, 2016, 2045,\n\t2047, 2049, 2051, 2053, 2056, 2058, 2062, 2065,\n\t2067, 2070, 2072, 2074, 2077, 2079, 2081, 2083,\n\t2085, 2087, 2090, 2093, 2096, 2109, 2111, 2115,\n\t2118, 2120, 2125, 2128, 2142, 2145, 2154, 2156,\n\t2161, 2165, 2166, 2168, 2170, 2176, 2181, 2186,\n\t2188, 2191, 2193, 2196, 2200, 2206, 2209, 2212,\n\t2218, 2220, 2222, 2224, 2227, 2260, 2262, 2264,\n\t2267, 2270, 2273, 2281, 2289, 2300, 2308, 2317,\n\t2325, 2334, 2343, 2355, 2362, 2369, 2377, 2385,\n\t2394, 2400, 2408, 2414, 2422, 2424, 2427, 2441,\n\t2447, 2455, 2459, 2463, 2465, 2512, 2514, 2517,\n\t2519, 2524, 2530, 2536, 2541, 2544, 2548, 2551,\n\t2554, 2556, 2559, 2562, 2565, 2569, 2574, 2579,\n\t2583, 2585, 2588, 2590, 2594, 2597, 2600, 2603,\n\t2606, 2610, 2615, 2619, 2621, 2623, 2626, 2628,\n\t2632, 2635, 2638, 2646, 2650, 2658, 2674, 2676,\n\t2681, 2683, 2687, 2698, 2702, 2704, 2707, 2709,\n\t2712, 2717, 2721, 2727, 2733, 2744, 2749, 2752,\n\t2755, 2758, 2761, 2763, 2767, 2768, 2771, 2773,\n\t2803, 2805, 2807, 2810, 2814, 2817, 2821, 2823,\n\t2825, 2827, 2833, 2836, 2839, 2843, 2845, 2850,\n\t2855, 2862, 2865, 2869, 2873, 2875, 2878, 2898,\n\t2900, 2902, 2909, 2913, 2915, 2917, 2919, 2922,\n\t2926, 2930, 2932, 2936, 2939, 2941, 2946, 2964,\n\t3003, 3009, 3012, 3014, 3016, 3018, 3021, 3024,\n\t3027, 3030, 3033, 3037, 3040, 3043, 3046, 3048,\n\t3050, 3053, 3060, 3063, 3065, 3068, 3071, 3074,\n\t3082, 3084, 3086, 3089, 3091, 3094, 3096, 3098,\n\t3128, 3131, 3134, 3137, 3140, 3145, 3149, 3156,\n\t3159, 3168, 3177, 3180, 3184, 3187, 3190, 3194,\n\t3196, 3200, 3202, 3205, 3207, 3211, 3215, 3219,\n\t3227, 3229, 3231, 3235, 3239, 3241, 3254, 3256,\n\t3259, 3262, 3267, 3269, 3272, 3274, 3276, 3279,\n\t3284, 3286, 3288, 3293, 3295, 3298, 3302, 3322,\n\t3326, 3330, 3332, 3334, 3342, 3344, 3351, 3356,\n\t3358, 3362, 3365, 3368, 3371, 3375, 3378, 3381,\n\t3385, 3395, 3401, 3404, 3407, 3417, 3437, 3443,\n\t3446, 3448, 3452, 3454, 3457, 3459, 3463, 3465,\n\t3467, 3471, 3473, 3475, 3481, 3484, 3489, 3494,\n\t3500, 3510, 3518, 3530, 3537, 3547, 3553, 3565,\n\t3571, 3589, 3592, 3600, 3606, 3616, 3623, 3630,\n\t3638, 3646, 3649, 3654, 3674, 3680, 3683, 3687,\n\t3691, 3695, 3707, 3710, 3715, 3716, 3722, 3729,\n\t3735, 3738, 3741, 3745, 3749, 3752, 3755, 3760,\n\t3764, 3770, 3776, 3779, 3783, 3786, 3789, 3794,\n\t3797, 3800, 3806, 3810, 3813, 3817, 3820, 3823,\n\t3827, 3831, 3838, 3841, 3844, 3850, 3853, 3860,\n\t3862, 3864, 3867, 3876, 3881, 3895, 3899, 3903,\n\t3918, 3924, 3927, 3930, 3932, 3937, 3943, 3947,\n\t3955, 3961, 3971, 3974, 3977, 3982, 3986, 3989,\n\t3992, 3995, 3999, 4004, 4008, 4012, 4015, 4020,\n\t4025, 4028, 4034, 4038, 4044, 4049, 4053, 4057,\n\t4065, 4068, 4076, 4082, 4092, 4103, 4106, 4109,\n\t4111, 4115, 4117, 4120, 4131, 4135, 4138, 4141,\n\t4144, 4147, 4149, 4153, 4157, 4160, 4164, 4169,\n\t4172, 4182, 4184, 4225, 4231, 4235, 4238, 4241,\n\t4245, 4248, 4252, 4256, 4261, 4263, 4267, 4271,\n\t4274, 4277, 4282, 4291, 4295, 4300, 4305, 4309,\n\t4316, 4320, 4323, 4327, 4330, 4335, 4338, 4341,\n\t4371, 4375, 4379, 4383, 4387, 4392, 4396, 4402,\n\t4406, 4414, 4417, 4422, 4426, 4429, 4434, 4437,\n\t4441, 4444, 4447, 4450, 4453, 4456, 4460, 4464,\n\t4467, 4477, 4480, 4483, 4488, 4494, 4497, 4512,\n\t4515, 4519, 4525, 4529, 4533, 4536, 4540, 4547,\n\t4550, 4553, 4559, 4562, 4566, 4571, 4587, 4589,\n\t4597, 4599, 4607, 4613, 4615, 4619, 4622, 4625,\n\t4628, 4632, 4643, 4646, 4658, 4682, 4690, 4692,\n\t4696, 4699, 4704, 4707, 4709, 4714, 4717, 4723,\n\t4726, 4734, 4736, 4738, 4740, 4742, 4744, 4746,\n\t4748, 4750, 4752, 4755, 4758, 4760, 4762, 4764,\n\t4766, 4769, 4772, 4777, 4781, 4782, 4784, 4786,\n\t4792, 4797, 4802, 4804, 4807, 4809, 4812, 4816,\n\t4822, 4825, 4828, 4834, 4836, 4838, 4840, 4843,\n\t4876, 4878, 4880, 4883, 4886, 4889, 4897, 4905,\n\t4916, 4924, 4933, 4941, 4950, 4959, 4971, 4978,\n\t4985, 4993, 5001, 5010, 5016, 5024, 5030, 5038,\n\t5040, 5043, 5057, 5063, 5071, 5075, 5079, 5081,\n\t5128, 5130, 5133, 5135, 5140, 5146, 5152, 5157,\n\t5160, 5164, 5167, 5170, 5172, 5175, 5178, 5181,\n\t5185, 5190, 5195, 5199, 5201, 5204, 5206, 5210,\n\t5213, 5216, 5219, 5222, 5226, 5231, 5235, 5237,\n\t5239, 5242, 5244, 5248, 5251, 5254, 5262, 5266,\n\t5274, 5290, 5292, 5297, 5299, 5303, 5314, 5318,\n\t5320, 5323, 5325, 5328, 5333, 5337, 5343, 5349,\n\t5360, 5365, 5368, 5371, 5374, 5377, 5379, 5383,\n\t5384, 5387, 5389, 5419, 5421, 5423, 5426, 5430,\n\t5433, 5437, 5439, 5441, 5443, 5449, 5452, 5455,\n\t5459, 5461, 5466, 5471, 5478, 5481, 5485, 5489,\n\t5491, 5494, 5514, 5516, 5518, 5525, 5529, 5531,\n\t5533, 5535, 5538, 5542, 5546, 5548, 5552, 5555,\n\t5557, 5562, 5580, 5619, 5625, 5628, 5630, 5632,\n\t5634, 5637, 5640, 5643, 5646, 5649, 5653, 5656,\n\t5659, 5662, 5664, 5666, 5669, 5676, 5679, 5681,\n\t5684, 5687, 5690, 5698, 5700, 5702, 5705, 5707,\n\t5710, 5712, 5714, 5744, 5747, 5750, 5753, 5756,\n\t5761, 5765, 5772, 5775, 5784, 5793, 5796, 5800,\n\t5803, 5806, 5810, 5812, 5816, 5818, 5821, 5823,\n\t5827, 5831, 5835, 5843, 5845, 5847, 5851, 5855,\n\t5857, 5870, 5872, 5875, 5878, 5883, 5885, 5888,\n\t5890, 5892, 5895, 5900, 5902, 5904, 5909, 5911,\n\t5914, 5918, 5938, 5942, 5946, 5948, 5950, 5958,\n\t5960, 5967, 5972, 5974, 5978, 5981, 5984, 5987,\n\t5991, 5994, 5997, 6001, 6011, 6017, 6020, 6023,\n\t6033, 6053, 6059, 6062, 6064, 6068, 6070, 6073,\n\t6075, 6079, 6081, 6083, 6087, 6089, 6091, 6097,\n\t6100, 6105, 6110, 6116, 6126, 6134, 6146, 6153,\n\t6163, 6169, 6181, 6187, 6205, 6208, 6216, 6222,\n\t6232, 6239, 6246, 6254, 6262, 6265, 6270, 6290,\n\t6296, 6299, 6303, 6307, 6311, 6323, 6326, 6331,\n\t6332, 6338, 6345, 6351, 6354, 6357, 6361, 6365,\n\t6368, 6371, 6376, 6380, 6386, 6392, 6395, 6399,\n\t6402, 6405, 6410, 6413, 6416, 6422, 6426, 6429,\n\t6433, 6436, 6439, 6443, 6447, 6454, 6457, 6460,\n\t6466, 6469, 6476, 6478, 6480, 6483, 6492, 6497,\n\t6511, 6515, 6519, 6534, 6540, 6543, 6546, 6548,\n\t6553, 6559, 6563, 6571, 6577, 6587, 6590, 6593,\n\t6598, 6602, 6605, 6608, 6611, 6615, 6620, 6624,\n\t6628, 6631, 6636, 6641, 6644, 6650, 6654, 6660,\n\t6665, 6669, 6673, 6681, 6684, 6692, 6698, 6708,\n\t6719, 6722, 6725, 6727, 6731, 6733, 6736, 6747,\n\t6751, 6754, 6757, 6760, 6763, 6765, 6769, 6773,\n\t6776, 6780, 6785, 6788, 6798, 6800, 6841, 6847,\n\t6851, 6854, 6857, 6861, 6864, 6868, 6872, 6877,\n\t6879, 6883, 6887, 6890, 6893, 6898, 6907, 6911,\n\t6916, 6921, 6925, 6932, 6936, 6939, 6943, 6946,\n\t6951, 6954, 6957, 6987, 6991, 6995, 6999, 7003,\n\t7008, 7012, 7018, 7022, 7030, 7033, 7038, 7042,\n\t7045, 7050, 7053, 7057, 7060, 7063, 7066, 7069,\n\t7072, 7076, 7080, 7083, 7093, 7096, 7099, 7104,\n\t7110, 7113, 7128, 7131, 7135, 7141, 7145, 7149,\n\t7152, 7156, 7163, 7166, 7169, 7175, 7178, 7182,\n\t7187, 7203, 7205, 7213, 7215, 7223, 7229, 7231,\n\t7235, 7238, 7241, 7244, 7248, 7259, 7262, 7274,\n\t7298, 7306, 7308, 7312, 7315, 7320, 7323, 7325,\n\t7330, 7333, 7339, 7342, 7407, 7410, 7412, 7414,\n\t7416, 7418, 7420, 7423, 7428, 7431, 7434, 7436,\n\t7476, 7478, 7480, 7482, 7487, 7491, 7492, 7494,\n\t7496, 7503, 7510, 7517, 7519, 7521, 7523, 7526,\n\t7529, 7535, 7538, 7543, 7550, 7555, 7558, 7562,\n\t7569, 7601, 7650, 7665, 7678, 7683, 7685, 7689,\n\t7720, 7726, 7728, 7749, 7769, 7771, 7783, 7794,\n\t7797, 7800, 7801, 7803, 7805, 7807, 7810, 7812,\n\t7820, 7822, 7824, 7826, 7836, 7845, 7848, 7852,\n\t7856, 7859, 7861, 7863, 7865, 7867, 7869, 7879,\n\t7888, 7891, 7895, 7899, 7902, 7904, 7906, 7908,\n\t7910, 7912, 7954, 7994, 7996, 8001, 8005, 8006,\n\t8008, 8010, 8017, 8024, 8031, 8033, 8035, 8037,\n\t8040, 8043, 8049, 8052, 8057, 8064, 8069, 8072,\n\t8076, 8083, 8115, 8164, 8179, 8192, 8197, 8199,\n\t8203, 8234, 8240, 8242, 8263, 8283,\n}\n\nvar _hcltok_indicies []int16 = []int16{\n\t1, 0, 3, 2, 3, 4, 2, 6,\n\t8, 8, 7, 5, 9, 9, 7, 5,\n\t7, 5, 10, 11, 12, 13, 15, 16,\n\t17, 18, 19, 20, 21, 22, 23, 24,\n\t25, 26, 27, 28, 29, 30, 31, 32,\n\t33, 34, 35, 36, 37, 39, 40, 41,\n\t42, 43, 11, 11, 14, 14, 38, 0,\n\t11, 12, 13, 15, 16, 17, 18, 19,\n\t20, 21, 22, 23, 24, 25, 26, 27,\n\t28, 29, 30, 31, 32, 33, 34, 35,\n\t36, 37, 39, 40, 41, 42, 43, 11,\n\t11, 14, 14, 38, 0, 44, 45, 11,\n\t11, 46, 13, 15, 16, 17, 16, 47,\n\t48, 20, 49, 22, 23, 50, 51, 52,\n\t53, 54, 55, 56, 57, 58, 59, 60,\n\t61, 62, 37, 39, 63, 41, 64, 65,\n\t66, 11, 11, 11, 14, 38, 0, 44,\n\t0, 11, 11, 11, 11, 0, 11, 11,\n\t11, 0, 11, 0, 11, 11, 0, 0,\n\t0, 0, 0, 0, 11, 0, 0, 0,\n\t0, 11, 11, 11, 11, 11, 0, 0,\n\t11, 0, 0, 11, 0, 11, 0, 0,\n\t11, 0, 0, 0, 11, 11, 11, 11,\n\t11, 11, 0, 11, 11, 0, 11, 11,\n\t0, 0, 0, 0, 0, 0, 11, 11,\n\t0, 0, 11, 0, 11, 11, 11, 0,\n\t67, 68, 69, 70, 14, 71, 72, 73,\n\t74, 75, 76, 77, 78, 79, 80, 81,\n\t82, 83, 84, 85, 86, 87, 88, 89,\n\t90, 91, 92, 93, 94, 95, 96, 97,\n\t0, 11, 0, 11, 0, 11, 11, 0,\n\t11, 11, 0, 0, 0, 11, 0, 0,\n\t0, 0, 0, 0, 0, 11, 0, 0,\n\t0, 0, 0, 0, 0, 11, 11, 11,\n\t11, 11, 11, 11, 11, 11, 11, 11,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t11, 11, 11, 11, 11, 11, 11, 11,\n\t11, 0, 0, 0, 0, 0, 0, 0,\n\t0, 11, 11, 11, 11, 11, 11, 11,\n\t11, 11, 0, 11, 11, 11, 11, 11,\n\t11, 11, 11, 0, 11, 11, 11, 11,\n\t11, 11, 11, 11, 11, 11, 11, 0,\n\t11, 11, 11, 11, 11, 11, 0, 11,\n\t11, 11, 11, 11, 11, 0, 0, 0,\n\t0, 0, 0, 0, 0, 11, 11, 11,\n\t11, 11, 11, 11, 11, 0, 11, 11,\n\t11, 11, 11, 11, 11, 11, 0, 11,\n\t11, 11, 11, 11, 0, 0, 0, 0,\n\t0, 0, 0, 0, 11, 11, 11, 11,\n\t11, 11, 0, 11, 11, 11, 11, 11,\n\t11, 11, 0, 11, 0, 11, 11, 0,\n\t11, 11, 11, 11, 11, 11, 11, 11,\n\t11, 11, 11, 11, 11, 0, 11, 11,\n\t11, 11, 11, 0, 11, 11, 11, 11,\n\t11, 11, 11, 0, 11, 11, 11, 0,\n\t11, 11, 11, 0, 11, 0, 98, 99,\n\t100, 101, 102, 103, 104, 105, 106, 107,\n\t108, 109, 110, 111, 112, 113, 114, 16,\n\t115, 116, 117, 118, 119, 120, 121, 122,\n\t123, 124, 125, 126, 127, 128, 129, 130,\n\t131, 132, 14, 15, 133, 134, 135, 136,\n\t137, 14, 16, 14, 0, 11, 0, 11,\n\t11, 0, 0, 11, 0, 0, 0, 0,\n\t11, 0, 0, 0, 0, 0, 11, 0,\n\t0, 0, 0, 0, 11, 11, 11, 11,\n\t11, 0, 0, 0, 11, 0, 0, 0,\n\t11, 11, 11, 0, 0, 0, 11, 11,\n\t0, 0, 0, 11, 11, 11, 0, 0,\n\t0, 11, 11, 11, 11, 0, 11, 11,\n\t11, 11, 0, 0, 0, 0, 0, 11,\n\t11, 11, 11, 0, 0, 11, 11, 11,\n\t0, 0, 11, 11, 11, 11, 0, 11,\n\t11, 0, 11, 11, 0, 0, 0, 11,\n\t11, 11, 0, 0, 0, 0, 11, 11,\n\t11, 11, 11, 0, 0, 0, 0, 11,\n\t0, 11, 11, 0, 11, 11, 0, 11,\n\t0, 11, 11, 11, 0, 11, 11, 0,\n\t0, 0, 11, 0, 0, 0, 0, 0,\n\t0, 0, 11, 11, 11, 11, 0, 11,\n\t11, 11, 11, 11, 11, 11, 0, 138,\n\t139, 140, 141, 142, 143, 144, 145, 146,\n\t14, 147, 148, 149, 150, 151, 0, 11,\n\t0, 0, 0, 0, 0, 11, 11, 0,\n\t11, 11, 11, 0, 11, 11, 11, 11,\n\t11, 11, 11, 11, 11, 11, 0, 11,\n\t11, 11, 0, 0, 11, 11, 11, 0,\n\t0, 11, 0, 0, 11, 11, 11, 11,\n\t11, 0, 0, 0, 0, 11, 11, 11,\n\t11, 11, 11, 0, 11, 11, 11, 11,\n\t11, 0, 152, 109, 153, 154, 155, 14,\n\t156, 157, 16, 14, 0, 11, 11, 11,\n\t11, 0, 0, 0, 11, 0, 0, 11,\n\t11, 11, 0, 0, 0, 11, 11, 0,\n\t119, 0, 16, 14, 14, 158, 0, 14,\n\t0, 11, 16, 159, 160, 16, 161, 162,\n\t16, 57, 163, 164, 165, 166, 167, 16,\n\t168, 169, 170, 16, 171, 172, 173, 15,\n\t174, 175, 176, 15, 177, 16, 14, 0,\n\t0, 11, 11, 0, 0, 0, 11, 11,\n\t11, 11, 0, 11, 11, 0, 0, 0,\n\t0, 11, 11, 0, 0, 11, 11, 0,\n\t0, 0, 0, 0, 0, 11, 11, 11,\n\t0, 0, 0, 11, 0, 0, 0, 11,\n\t11, 0, 11, 11, 11, 11, 0, 11,\n\t11, 11, 11, 0, 11, 11, 11, 11,\n\t11, 11, 0, 0, 0, 11, 11, 11,\n\t11, 0, 178, 179, 0, 14, 0, 11,\n\t0, 0, 11, 16, 180, 181, 182, 183,\n\t57, 184, 185, 55, 186, 187, 188, 189,\n\t190, 191, 192, 193, 194, 14, 0, 0,\n\t11, 0, 11, 11, 11, 11, 11, 11,\n\t11, 0, 11, 11, 11, 0, 11, 0,\n\t0, 11, 0, 11, 0, 0, 11, 11,\n\t11, 11, 0, 11, 11, 11, 0, 0,\n\t11, 11, 11, 11, 0, 11, 11, 0,\n\t0, 11, 11, 11, 11, 11, 0, 195,\n\t196, 197, 198, 199, 200, 201, 202, 203,\n\t204, 205, 201, 206, 207, 208, 209, 38,\n\t0, 210, 211, 16, 212, 213, 214, 215,\n\t216, 217, 218, 219, 220, 16, 14, 221,\n\t222, 223, 224, 16, 225, 226, 227, 228,\n\t229, 230, 231, 232, 233, 234, 235, 236,\n\t237, 238, 239, 16, 144, 14, 240, 0,\n\t11, 11, 11, 11, 11, 0, 0, 0,\n\t11, 0, 11, 11, 0, 11, 0, 11,\n\t11, 0, 0, 0, 11, 11, 11, 0,\n\t0, 0, 11, 11, 11, 0, 0, 0,\n\t0, 11, 0, 0, 11, 0, 0, 11,\n\t11, 11, 0, 0, 11, 0, 11, 11,\n\t11, 0, 11, 11, 11, 11, 11, 11,\n\t0, 0, 0, 11, 11, 0, 11, 11,\n\t0, 11, 11, 0, 11, 11, 0, 11,\n\t11, 11, 11, 11, 11, 11, 0, 11,\n\t0, 11, 0, 11, 11, 0, 11, 0,\n\t11, 11, 0, 11, 0, 11, 0, 241,\n\t212, 242, 243, 244, 245, 246, 247, 248,\n\t249, 250, 98, 251, 16, 252, 253, 254,\n\t16, 255, 129, 256, 257, 258, 259, 260,\n\t261, 262, 263, 16, 0, 0, 0, 11,\n\t11, 11, 0, 11, 11, 0, 11, 11,\n\t0, 0, 0, 0, 0, 11, 11, 11,\n\t11, 0, 11, 11, 11, 11, 11, 11,\n\t0, 0, 0, 11, 11, 11, 11, 11,\n\t11, 11, 11, 11, 0, 11, 11, 11,\n\t11, 11, 11, 11, 11, 0, 11, 11,\n\t0, 0, 0, 0, 11, 11, 11, 0,\n\t0, 0, 11, 0, 0, 0, 11, 11,\n\t0, 11, 11, 11, 0, 11, 0, 0,\n\t0, 11, 11, 0, 11, 11, 11, 0,\n\t11, 11, 11, 0, 0, 0, 0, 11,\n\t16, 181, 264, 265, 14, 16, 14, 0,\n\t0, 11, 0, 11, 16, 264, 14, 0,\n\t16, 266, 14, 0, 0, 11, 16, 267,\n\t268, 269, 172, 270, 271, 16, 272, 273,\n\t274, 14, 0, 0, 11, 11, 11, 0,\n\t11, 11, 0, 11, 11, 11, 11, 0,\n\t0, 11, 0, 0, 11, 11, 0, 11,\n\t0, 16, 14, 0, 275, 16, 276, 0,\n\t14, 0, 11, 0, 11, 277, 16, 278,\n\t279, 0, 11, 0, 0, 0, 11, 11,\n\t11, 11, 0, 280, 281, 282, 16, 283,\n\t284, 285, 286, 287, 288, 289, 290, 291,\n\t292, 293, 294, 295, 296, 14, 0, 11,\n\t11, 11, 0, 0, 0, 0, 11, 11,\n\t0, 0, 11, 0, 0, 0, 0, 0,\n\t0, 0, 11, 0, 11, 0, 0, 0,\n\t0, 0, 0, 11, 11, 11, 11, 11,\n\t0, 0, 11, 0, 0, 0, 11, 0,\n\t0, 11, 0, 0, 11, 0, 0, 11,\n\t0, 0, 0, 11, 11, 11, 0, 0,\n\t0, 11, 11, 11, 11, 0, 297, 16,\n\t298, 16, 299, 300, 301, 302, 14, 0,\n\t11, 11, 11, 11, 11, 0, 0, 0,\n\t11, 0, 0, 11, 11, 11, 11, 11,\n\t11, 11, 11, 11, 11, 0, 11, 11,\n\t11, 11, 11, 11, 11, 11, 11, 11,\n\t11, 11, 11, 11, 11, 11, 11, 11,\n\t11, 0, 11, 11, 11, 11, 11, 0,\n\t303, 16, 14, 0, 11, 304, 16, 100,\n\t14, 0, 11, 305, 0, 14, 0, 11,\n\t16, 306, 14, 0, 0, 11, 307, 0,\n\t16, 308, 14, 0, 0, 11, 11, 11,\n\t11, 0, 11, 11, 11, 11, 0, 11,\n\t11, 11, 11, 11, 0, 0, 11, 0,\n\t11, 11, 11, 0, 11, 0, 11, 11,\n\t11, 0, 0, 0, 0, 0, 0, 0,\n\t11, 11, 11, 0, 11, 0, 0, 0,\n\t11, 11, 11, 11, 0, 309, 310, 69,\n\t311, 312, 313, 314, 315, 316, 317, 318,\n\t319, 320, 321, 322, 323, 324, 325, 326,\n\t327, 328, 329, 331, 332, 333, 334, 335,\n\t336, 330, 0, 11, 11, 11, 11, 0,\n\t11, 0, 11, 11, 0, 11, 11, 11,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 11, 11, 11, 11, 11, 0, 11,\n\t11, 11, 11, 11, 11, 11, 0, 11,\n\t11, 11, 0, 11, 11, 11, 11, 11,\n\t11, 11, 0, 11, 11, 11, 0, 11,\n\t11, 11, 11, 11, 11, 11, 0, 11,\n\t11, 11, 0, 11, 11, 11, 11, 11,\n\t11, 11, 11, 11, 11, 0, 11, 0,\n\t11, 11, 11, 11, 11, 0, 11, 11,\n\t0, 11, 11, 11, 11, 11, 11, 11,\n\t0, 11, 11, 11, 0, 11, 11, 11,\n\t11, 0, 11, 11, 11, 11, 0, 11,\n\t11, 11, 11, 0, 11, 0, 11, 11,\n\t0, 11, 11, 11, 11, 11, 11, 11,\n\t11, 11, 11, 11, 11, 11, 11, 0,\n\t11, 11, 11, 0, 11, 0, 11, 11,\n\t0, 11, 0, 337, 338, 339, 101, 102,\n\t103, 104, 105, 340, 107, 108, 109, 110,\n\t111, 112, 341, 342, 167, 343, 258, 117,\n\t344, 119, 229, 269, 122, 345, 346, 347,\n\t348, 349, 350, 351, 352, 353, 354, 131,\n\t355, 16, 14, 15, 16, 134, 135, 136,\n\t137, 14, 14, 0, 11, 11, 0, 11,\n\t11, 11, 11, 11, 11, 0, 0, 0,\n\t11, 0, 11, 11, 11, 11, 0, 11,\n\t11, 11, 0, 11, 11, 0, 11, 11,\n\t11, 0, 0, 11, 11, 11, 0, 0,\n\t11, 11, 0, 11, 0, 11, 0, 11,\n\t11, 11, 0, 0, 11, 11, 0, 11,\n\t11, 0, 11, 11, 11, 0, 356, 140,\n\t142, 143, 144, 145, 146, 14, 357, 148,\n\t358, 150, 359, 0, 11, 11, 0, 0,\n\t0, 0, 11, 0, 0, 11, 11, 11,\n\t11, 11, 0, 360, 109, 361, 154, 155,\n\t14, 156, 157, 16, 14, 0, 11, 11,\n\t11, 11, 0, 0, 0, 11, 16, 159,\n\t160, 16, 362, 363, 219, 308, 163, 164,\n\t165, 364, 167, 365, 366, 367, 368, 369,\n\t370, 371, 372, 373, 374, 175, 176, 15,\n\t375, 16, 14, 0, 0, 0, 0, 11,\n\t11, 11, 0, 0, 0, 0, 0, 11,\n\t11, 0, 11, 11, 11, 0, 11, 11,\n\t0, 0, 0, 11, 11, 0, 11, 11,\n\t11, 11, 0, 11, 0, 11, 11, 11,\n\t11, 11, 0, 0, 0, 0, 0, 11,\n\t11, 11, 11, 11, 11, 0, 11, 0,\n\t16, 180, 181, 376, 183, 57, 184, 185,\n\t55, 186, 187, 377, 14, 190, 378, 192,\n\t193, 194, 14, 0, 11, 11, 11, 11,\n\t11, 11, 11, 0, 11, 11, 0, 11,\n\t0, 379, 380, 197, 198, 199, 381, 201,\n\t202, 382, 383, 384, 201, 206, 207, 208,\n\t209, 38, 0, 210, 211, 16, 212, 213,\n\t215, 385, 217, 386, 219, 220, 16, 14,\n\t387, 222, 223, 224, 16, 225, 226, 227,\n\t228, 229, 230, 231, 232, 388, 234, 235,\n\t389, 237, 238, 239, 16, 144, 14, 240,\n\t0, 0, 11, 0, 0, 11, 0, 11,\n\t11, 11, 11, 11, 0, 11, 11, 0,\n\t390, 391, 392, 393, 394, 395, 396, 397,\n\t247, 398, 319, 399, 213, 400, 401, 402,\n\t403, 404, 401, 405, 406, 407, 258, 408,\n\t260, 409, 410, 271, 0, 11, 0, 11,\n\t0, 11, 0, 11, 0, 11, 11, 0,\n\t11, 0, 11, 11, 11, 0, 11, 11,\n\t0, 0, 11, 11, 11, 0, 11, 0,\n\t11, 0, 11, 11, 0, 11, 0, 11,\n\t0, 11, 0, 11, 0, 11, 0, 0,\n\t0, 11, 11, 11, 0, 11, 11, 0,\n\t16, 267, 229, 411, 401, 412, 271, 16,\n\t413, 414, 274, 14, 0, 11, 0, 11,\n\t11, 11, 0, 0, 0, 11, 11, 0,\n\t277, 16, 278, 415, 0, 11, 11, 0,\n\t16, 283, 284, 285, 286, 287, 288, 289,\n\t290, 291, 292, 416, 14, 0, 0, 0,\n\t11, 16, 417, 16, 265, 300, 301, 302,\n\t14, 0, 0, 11, 419, 419, 419, 419,\n\t418, 419, 419, 419, 418, 419, 418, 419,\n\t419, 418, 418, 418, 418, 418, 418, 419,\n\t418, 418, 418, 418, 419, 419, 419, 419,\n\t419, 418, 418, 419, 418, 418, 419, 418,\n\t419, 418, 418, 419, 418, 418, 418, 419,\n\t419, 419, 419, 419, 419, 418, 419, 419,\n\t418, 419, 419, 418, 418, 418, 418, 418,\n\t418, 419, 419, 418, 418, 419, 418, 419,\n\t419, 419, 418, 421, 422, 423, 424, 425,\n\t426, 427, 428, 429, 430, 431, 432, 433,\n\t434, 435, 436, 437, 438, 439, 440, 441,\n\t442, 443, 444, 445, 446, 447, 448, 449,\n\t450, 451, 452, 418, 419, 418, 419, 418,\n\t419, 419, 418, 419, 419, 418, 418, 418,\n\t419, 418, 418, 418, 418, 418, 418, 418,\n\t419, 418, 418, 418, 418, 418, 418, 418,\n\t419, 419, 419, 419, 419, 419, 419, 419,\n\t419, 419, 419, 418, 418, 418, 418, 418,\n\t418, 418, 418, 419, 419, 419, 419, 419,\n\t419, 419, 419, 419, 418, 418, 418, 418,\n\t418, 418, 418, 418, 419, 419, 419, 419,\n\t419, 419, 419, 419, 419, 418, 419, 419,\n\t419, 419, 419, 419, 419, 419, 418, 419,\n\t419, 419, 419, 419, 419, 419, 419, 419,\n\t419, 419, 418, 419, 419, 419, 419, 419,\n\t419, 418, 419, 419, 419, 419, 419, 419,\n\t418, 418, 418, 418, 418, 418, 418, 418,\n\t419, 419, 419, 419, 419, 419, 419, 419,\n\t418, 419, 419, 419, 419, 419, 419, 419,\n\t419, 418, 419, 419, 419, 419, 419, 418,\n\t418, 418, 418, 418, 418, 418, 418, 419,\n\t419, 419, 419, 419, 419, 418, 419, 419,\n\t419, 419, 419, 419, 419, 418, 419, 418,\n\t419, 419, 418, 419, 419, 419, 419, 419,\n\t419, 419, 419, 419, 419, 419, 419, 419,\n\t418, 419, 419, 419, 419, 419, 418, 419,\n\t419, 419, 419, 419, 419, 419, 418, 419,\n\t419, 419, 418, 419, 419, 419, 418, 419,\n\t418, 453, 454, 455, 456, 457, 458, 459,\n\t460, 461, 462, 463, 464, 465, 466, 467,\n\t468, 469, 470, 471, 472, 473, 474, 475,\n\t476, 477, 478, 479, 480, 481, 482, 483,\n\t484, 485, 486, 487, 488, 425, 489, 490,\n\t491, 492, 493, 494, 425, 470, 425, 418,\n\t419, 418, 419, 419, 418, 418, 419, 418,\n\t418, 418, 418, 419, 418, 418, 418, 418,\n\t418, 419, 418, 418, 418, 418, 418, 419,\n\t419, 419, 419, 419, 418, 418, 418, 419,\n\t418, 418, 418, 419, 419, 419, 418, 418,\n\t418, 419, 419, 418, 418, 418, 419, 419,\n\t419, 418, 418, 418, 419, 419, 419, 419,\n\t418, 419, 419, 419, 419, 418, 418, 418,\n\t418, 418, 419, 419, 419, 419, 418, 418,\n\t419, 419, 419, 418, 418, 419, 419, 419,\n\t419, 418, 419, 419, 418, 419, 419, 418,\n\t418, 418, 419, 419, 419, 418, 418, 418,\n\t418, 419, 419, 419, 419, 419, 418, 418,\n\t418, 418, 419, 418, 419, 419, 418, 419,\n\t419, 418, 419, 418, 419, 419, 419, 418,\n\t419, 419, 418, 418, 418, 419, 418, 418,\n\t418, 418, 418, 418, 418, 419, 419, 419,\n\t419, 418, 419, 419, 419, 419, 419, 419,\n\t419, 418, 495, 496, 497, 498, 499, 500,\n\t501, 502, 503, 425, 504, 505, 506, 507,\n\t508, 418, 419, 418, 418, 418, 418, 418,\n\t419, 419, 418, 419, 419, 419, 418, 419,\n\t419, 419, 419, 419, 419, 419, 419, 419,\n\t419, 418, 419, 419, 419, 418, 418, 419,\n\t419, 419, 418, 418, 419, 418, 418, 419,\n\t419, 419, 419, 419, 418, 418, 418, 418,\n\t419, 419, 419, 419, 419, 419, 418, 419,\n\t419, 419, 419, 419, 418, 509, 464, 510,\n\t511, 512, 425, 513, 514, 470, 425, 418,\n\t419, 419, 419, 419, 418, 418, 418, 419,\n\t418, 418, 419, 419, 419, 418, 418, 418,\n\t419, 419, 418, 475, 418, 470, 425, 425,\n\t515, 418, 425, 418, 419, 470, 516, 517,\n\t470, 518, 519, 470, 520, 521, 522, 523,\n\t524, 525, 470, 526, 527, 528, 470, 529,\n\t530, 531, 489, 532, 533, 534, 489, 535,\n\t470, 425, 418, 418, 419, 419, 418, 418,\n\t418, 419, 419, 419, 419, 418, 419, 419,\n\t418, 418, 418, 418, 419, 419, 418, 418,\n\t419, 419, 418, 418, 418, 418, 418, 418,\n\t419, 419, 419, 418, 418, 418, 419, 418,\n\t418, 418, 419, 419, 418, 419, 419, 419,\n\t419, 418, 419, 419, 419, 419, 418, 419,\n\t419, 419, 419, 419, 419, 418, 418, 418,\n\t419, 419, 419, 419, 418, 536, 537, 418,\n\t425, 418, 419, 418, 418, 419, 470, 538,\n\t539, 540, 541, 520, 542, 543, 544, 545,\n\t546, 547, 548, 549, 550, 551, 552, 553,\n\t425, 418, 418, 419, 418, 419, 419, 419,\n\t419, 419, 419, 419, 418, 419, 419, 419,\n\t418, 419, 418, 418, 419, 418, 419, 418,\n\t418, 419, 419, 419, 419, 418, 419, 419,\n\t419, 418, 418, 419, 419, 419, 419, 418,\n\t419, 419, 418, 418, 419, 419, 419, 419,\n\t419, 418, 554, 555, 556, 557, 558, 559,\n\t560, 561, 562, 563, 564, 560, 566, 567,\n\t568, 569, 565, 418, 570, 571, 470, 572,\n\t573, 574, 575, 576, 577, 578, 579, 580,\n\t470, 425, 581, 582, 583, 584, 470, 585,\n\t586, 587, 588, 589, 590, 591, 592, 593,\n\t594, 595, 596, 597, 598, 599, 470, 501,\n\t425, 600, 418, 419, 419, 419, 419, 419,\n\t418, 418, 418, 419, 418, 419, 419, 418,\n\t419, 418, 419, 419, 418, 418, 418, 419,\n\t419, 419, 418, 418, 418, 419, 419, 419,\n\t418, 418, 418, 418, 419, 418, 418, 419,\n\t418, 418, 419, 419, 419, 418, 418, 419,\n\t418, 419, 419, 419, 418, 419, 419, 419,\n\t419, 419, 419, 418, 418, 418, 419, 419,\n\t418, 419, 419, 418, 419, 419, 418, 419,\n\t419, 418, 419, 419, 419, 419, 419, 419,\n\t419, 418, 419, 418, 419, 418, 419, 419,\n\t418, 419, 418, 419, 419, 418, 419, 418,\n\t419, 418, 601, 572, 602, 603, 604, 605,\n\t606, 607, 608, 609, 610, 453, 611, 470,\n\t612, 613, 614, 470, 615, 485, 616, 617,\n\t618, 619, 620, 621, 622, 623, 470, 418,\n\t418, 418, 419, 419, 419, 418, 419, 419,\n\t418, 419, 419, 418, 418, 418, 418, 418,\n\t419, 419, 419, 419, 418, 419, 419, 419,\n\t419, 419, 419, 418, 418, 418, 419, 419,\n\t419, 419, 419, 419, 419, 419, 419, 418,\n\t419, 419, 419, 419, 419, 419, 419, 419,\n\t418, 419, 419, 418, 418, 418, 418, 419,\n\t419, 419, 418, 418, 418, 419, 418, 418,\n\t418, 419, 419, 418, 419, 419, 419, 418,\n\t419, 418, 418, 418, 419, 419, 418, 419,\n\t419, 419, 418, 419, 419, 419, 418, 418,\n\t418, 418, 419, 470, 539, 624, 625, 425,\n\t470, 425, 418, 418, 419, 418, 419, 470,\n\t624, 425, 418, 470, 626, 425, 418, 418,\n\t419, 470, 627, 628, 629, 530, 630, 631,\n\t470, 632, 633, 634, 425, 418, 418, 419,\n\t419, 419, 418, 419, 419, 418, 419, 419,\n\t419, 419, 418, 418, 419, 418, 418, 419,\n\t419, 418, 419, 418, 470, 425, 418, 635,\n\t470, 636, 418, 425, 418, 419, 418, 419,\n\t637, 470, 638, 639, 418, 419, 418, 418,\n\t418, 419, 419, 419, 419, 418, 640, 641,\n\t642, 470, 643, 644, 645, 646, 647, 648,\n\t649, 650, 651, 652, 653, 654, 655, 656,\n\t425, 418, 419, 419, 419, 418, 418, 418,\n\t418, 419, 419, 418, 418, 419, 418, 418,\n\t418, 418, 418, 418, 418, 419, 418, 419,\n\t418, 418, 418, 418, 418, 418, 419, 419,\n\t419, 419, 419, 418, 418, 419, 418, 418,\n\t418, 419, 418, 418, 419, 418, 418, 419,\n\t418, 418, 419, 418, 418, 418, 419, 419,\n\t419, 418, 418, 418, 419, 419, 419, 419,\n\t418, 657, 470, 658, 470, 659, 660, 661,\n\t662, 425, 418, 419, 419, 419, 419, 419,\n\t418, 418, 418, 419, 418, 418, 419, 419,\n\t419, 419, 419, 419, 419, 419, 419, 419,\n\t418, 419, 419, 419, 419, 419, 419, 419,\n\t419, 419, 419, 419, 419, 419, 419, 419,\n\t419, 419, 419, 419, 418, 419, 419, 419,\n\t419, 419, 418, 663, 470, 425, 418, 419,\n\t664, 470, 455, 425, 418, 419, 665, 418,\n\t425, 418, 419, 470, 666, 425, 418, 418,\n\t419, 667, 418, 470, 668, 425, 418, 418,\n\t419, 670, 669, 419, 419, 419, 419, 670,\n\t669, 419, 670, 669, 670, 670, 419, 670,\n\t669, 419, 670, 419, 670, 669, 419, 670,\n\t419, 670, 419, 669, 670, 670, 670, 670,\n\t670, 670, 670, 670, 669, 419, 419, 670,\n\t670, 419, 670, 419, 670, 669, 670, 670,\n\t670, 670, 670, 419, 670, 419, 670, 419,\n\t670, 669, 670, 670, 419, 670, 419, 670,\n\t669, 670, 670, 670, 670, 670, 419, 670,\n\t419, 670, 669, 419, 419, 670, 419, 670,\n\t669, 670, 670, 670, 419, 670, 419, 670,\n\t419, 670, 419, 670, 669, 670, 419, 670,\n\t419, 670, 669, 419, 670, 670, 670, 670,\n\t419, 670, 419, 670, 419, 670, 419, 670,\n\t419, 670, 419, 670, 669, 419, 670, 669,\n\t670, 670, 670, 419, 670, 419, 670, 669,\n\t670, 419, 670, 419, 670, 669, 419, 670,\n\t670, 670, 670, 419, 670, 419, 670, 669,\n\t419, 670, 419, 670, 419, 670, 669, 670,\n\t670, 419, 670, 419, 670, 669, 419, 670,\n\t419, 670, 419, 670, 419, 669, 670, 670,\n\t670, 419, 670, 419, 670, 669, 419, 670,\n\t669, 670, 670, 419, 670, 669, 670, 670,\n\t670, 419, 670, 670, 670, 670, 670, 670,\n\t419, 419, 670, 419, 670, 419, 670, 419,\n\t670, 669, 670, 419, 670, 419, 670, 669,\n\t419, 670, 669, 670, 419, 670, 669, 670,\n\t419, 670, 669, 419, 419, 670, 669, 419,\n\t670, 419, 670, 419, 670, 419, 670, 419,\n\t670, 419, 669, 670, 670, 419, 670, 670,\n\t670, 670, 419, 419, 670, 670, 670, 670,\n\t670, 419, 670, 670, 670, 670, 670, 669,\n\t419, 670, 670, 419, 670, 419, 669, 670,\n\t670, 419, 670, 669, 419, 419, 670, 419,\n\t669, 670, 670, 669, 419, 670, 419, 669,\n\t670, 669, 419, 670, 419, 670, 419, 669,\n\t670, 670, 669, 419, 670, 419, 670, 419,\n\t670, 669, 670, 419, 670, 419, 670, 669,\n\t419, 670, 669, 419, 419, 670, 669, 670,\n\t419, 669, 670, 669, 419, 670, 419, 670,\n\t419, 669, 670, 669, 419, 419, 670, 669,\n\t670, 419, 670, 419, 670, 669, 419, 670,\n\t419, 669, 670, 669, 419, 419, 670, 419,\n\t669, 670, 669, 419, 419, 670, 669, 670,\n\t419, 670, 669, 670, 419, 670, 669, 670,\n\t419, 670, 419, 670, 419, 669, 670, 669,\n\t419, 419, 670, 669, 670, 419, 670, 419,\n\t670, 669, 419, 670, 669, 670, 670, 419,\n\t670, 419, 670, 669, 669, 419, 669, 419,\n\t670, 670, 419, 670, 670, 670, 670, 670,\n\t670, 670, 669, 419, 670, 670, 670, 419,\n\t669, 670, 670, 670, 419, 670, 419, 670,\n\t419, 670, 419, 670, 419, 670, 669, 419,\n\t419, 670, 669, 670, 419, 670, 669, 419,\n\t419, 670, 419, 419, 419, 670, 419, 670,\n\t419, 670, 419, 670, 419, 669, 419, 670,\n\t419, 670, 419, 669, 670, 669, 419, 670,\n\t419, 669, 670, 419, 670, 670, 670, 669,\n\t419, 670, 419, 419, 670, 419, 669, 670,\n\t670, 669, 419, 670, 670, 670, 670, 419,\n\t670, 419, 669, 670, 670, 670, 419, 670,\n\t669, 670, 419, 670, 419, 670, 419, 670,\n\t419, 670, 669, 670, 670, 419, 670, 669,\n\t419, 670, 419, 670, 419, 669, 670, 670,\n\t669, 419, 670, 419, 669, 670, 669, 419,\n\t670, 669, 419, 670, 419, 670, 669, 670,\n\t670, 670, 669, 419, 419, 419, 670, 669,\n\t419, 670, 419, 669, 670, 669, 419, 670,\n\t419, 670, 419, 669, 670, 670, 670, 669,\n\t419, 670, 419, 669, 670, 670, 670, 670,\n\t669, 419, 670, 419, 670, 669, 419, 419,\n\t670, 419, 670, 669, 670, 419, 670, 419,\n\t669, 670, 670, 669, 419, 670, 419, 670,\n\t669, 419, 670, 670, 670, 419, 670, 419,\n\t669, 419, 670, 669, 670, 419, 419, 670,\n\t419, 670, 419, 669, 670, 670, 670, 670,\n\t669, 419, 670, 419, 670, 419, 670, 419,\n\t670, 419, 670, 669, 670, 670, 670, 419,\n\t670, 419, 670, 419, 670, 419, 669, 670,\n\t670, 419, 419, 670, 669, 670, 419, 670,\n\t670, 669, 419, 670, 419, 670, 669, 419,\n\t419, 670, 670, 670, 670, 419, 670, 419,\n\t670, 419, 669, 670, 670, 419, 669, 670,\n\t669, 419, 670, 419, 669, 670, 669, 419,\n\t670, 419, 669, 670, 419, 670, 670, 669,\n\t419, 670, 670, 419, 669, 670, 669, 419,\n\t670, 419, 670, 669, 670, 419, 670, 419,\n\t669, 670, 669, 419, 670, 419, 670, 419,\n\t670, 419, 670, 419, 670, 669, 671, 669,\n\t672, 673, 674, 675, 676, 677, 678, 679,\n\t680, 681, 682, 674, 683, 684, 685, 686,\n\t687, 674, 688, 689, 690, 691, 692, 693,\n\t694, 695, 696, 697, 698, 699, 700, 701,\n\t702, 674, 703, 671, 683, 671, 704, 671,\n\t669, 670, 670, 670, 670, 419, 669, 670,\n\t670, 669, 419, 670, 669, 419, 419, 670,\n\t669, 419, 670, 419, 669, 670, 669, 419,\n\t419, 670, 419, 669, 670, 670, 669, 419,\n\t670, 670, 670, 669, 419, 670, 419, 670,\n\t670, 669, 419, 419, 670, 419, 669, 670,\n\t669, 419, 670, 669, 419, 419, 670, 419,\n\t670, 669, 419, 670, 419, 419, 670, 419,\n\t670, 419, 669, 670, 670, 669, 419, 670,\n\t670, 419, 670, 669, 419, 670, 419, 670,\n\t669, 419, 670, 419, 669, 419, 670, 670,\n\t670, 419, 670, 669, 670, 419, 670, 669,\n\t419, 670, 669, 670, 419, 670, 669, 419,\n\t670, 669, 419, 670, 419, 670, 669, 419,\n\t670, 669, 419, 670, 669, 705, 706, 707,\n\t708, 709, 710, 711, 712, 713, 714, 715,\n\t716, 676, 717, 718, 719, 720, 721, 718,\n\t722, 723, 724, 725, 726, 727, 728, 729,\n\t730, 671, 669, 670, 419, 670, 669, 670,\n\t419, 670, 669, 670, 419, 670, 669, 670,\n\t419, 670, 669, 419, 670, 419, 670, 669,\n\t670, 419, 670, 669, 670, 419, 419, 419,\n\t670, 669, 670, 419, 670, 669, 670, 670,\n\t670, 670, 419, 670, 419, 669, 670, 669,\n\t419, 419, 670, 419, 670, 669, 670, 419,\n\t670, 669, 419, 670, 669, 670, 670, 419,\n\t670, 669, 419, 670, 669, 670, 419, 670,\n\t669, 419, 670, 669, 419, 670, 669, 419,\n\t670, 669, 670, 669, 419, 419, 670, 669,\n\t670, 419, 670, 669, 419, 670, 419, 669,\n\t670, 669, 419, 674, 731, 671, 674, 732,\n\t674, 733, 683, 671, 669, 670, 669, 419,\n\t670, 669, 419, 674, 732, 683, 671, 669,\n\t674, 734, 671, 683, 671, 669, 670, 669,\n\t419, 674, 735, 692, 736, 718, 737, 730,\n\t674, 738, 739, 740, 671, 683, 671, 669,\n\t670, 669, 419, 670, 419, 670, 669, 419,\n\t670, 419, 670, 419, 669, 670, 670, 669,\n\t419, 670, 419, 670, 669, 419, 670, 669,\n\t674, 683, 425, 669, 741, 674, 742, 683,\n\t671, 669, 425, 670, 669, 419, 670, 669,\n\t419, 743, 674, 744, 745, 671, 669, 419,\n\t670, 669, 670, 670, 669, 419, 419, 670,\n\t419, 670, 669, 674, 746, 747, 748, 749,\n\t750, 751, 752, 753, 754, 755, 756, 671,\n\t683, 671, 669, 670, 419, 670, 670, 670,\n\t670, 670, 670, 670, 419, 670, 419, 670,\n\t670, 670, 670, 670, 670, 669, 419, 670,\n\t670, 419, 670, 419, 669, 670, 419, 670,\n\t670, 670, 419, 670, 670, 419, 670, 670,\n\t419, 670, 670, 419, 670, 670, 669, 419,\n\t674, 757, 674, 733, 758, 759, 760, 671,\n\t683, 671, 669, 670, 669, 419, 670, 670,\n\t670, 419, 670, 670, 670, 419, 670, 419,\n\t670, 669, 419, 419, 419, 419, 670, 670,\n\t419, 419, 419, 419, 419, 670, 670, 670,\n\t670, 670, 670, 670, 419, 670, 419, 670,\n\t419, 669, 670, 670, 670, 419, 670, 419,\n\t670, 669, 683, 425, 761, 674, 683, 425,\n\t670, 669, 419, 762, 674, 763, 683, 425,\n\t670, 669, 419, 670, 419, 764, 683, 671,\n\t669, 425, 670, 669, 419, 674, 765, 671,\n\t683, 671, 669, 670, 669, 419, 766, 766,\n\t766, 768, 769, 770, 766, 767, 767, 771,\n\t768, 771, 769, 771, 767, 772, 773, 772,\n\t775, 774, 776, 774, 777, 774, 779, 778,\n\t781, 782, 780, 781, 783, 780, 785, 784,\n\t786, 784, 787, 784, 789, 788, 791, 792,\n\t790, 791, 793, 790, 795, 795, 795, 795,\n\t794, 795, 795, 795, 794, 795, 794, 795,\n\t795, 794, 794, 794, 794, 794, 794, 795,\n\t794, 794, 794, 794, 795, 795, 795, 795,\n\t795, 794, 794, 795, 794, 794, 795, 794,\n\t795, 794, 794, 795, 794, 794, 794, 795,\n\t795, 795, 795, 795, 795, 794, 795, 795,\n\t794, 795, 795, 794, 794, 794, 794, 794,\n\t794, 795, 795, 794, 794, 795, 794, 795,\n\t795, 795, 794, 797, 798, 799, 800, 801,\n\t802, 803, 804, 805, 806, 807, 808, 809,\n\t810, 811, 812, 813, 814, 815, 816, 817,\n\t818, 819, 820, 821, 822, 823, 824, 825,\n\t826, 827, 828, 794, 795, 794, 795, 794,\n\t795, 795, 794, 795, 795, 794, 794, 794,\n\t795, 794, 794, 794, 794, 794, 794, 794,\n\t795, 794, 794, 794, 794, 794, 794, 794,\n\t795, 795, 795, 795, 795, 795, 795, 795,\n\t795, 795, 795, 794, 794, 794, 794, 794,\n\t794, 794, 794, 795, 795, 795, 795, 795,\n\t795, 795, 795, 795, 794, 794, 794, 794,\n\t794, 794, 794, 794, 795, 795, 795, 795,\n\t795, 795, 795, 795, 795, 794, 795, 795,\n\t795, 795, 795, 795, 795, 795, 794, 795,\n\t795, 795, 795, 795, 795, 795, 795, 795,\n\t795, 795, 794, 795, 795, 795, 795, 795,\n\t795, 794, 795, 795, 795, 795, 795, 795,\n\t794, 794, 794, 794, 794, 794, 794, 794,\n\t795, 795, 795, 795, 795, 795, 795, 795,\n\t794, 795, 795, 795, 795, 795, 795, 795,\n\t795, 794, 795, 795, 795, 795, 795, 794,\n\t794, 794, 794, 794, 794, 794, 794, 795,\n\t795, 795, 795, 795, 795, 794, 795, 795,\n\t795, 795, 795, 795, 795, 794, 795, 794,\n\t795, 795, 794, 795, 795, 795, 795, 795,\n\t795, 795, 795, 795, 795, 795, 795, 795,\n\t794, 795, 795, 795, 795, 795, 794, 795,\n\t795, 795, 795, 795, 795, 795, 794, 795,\n\t795, 795, 794, 795, 795, 795, 794, 795,\n\t794, 829, 830, 831, 832, 833, 834, 835,\n\t836, 837, 838, 839, 840, 841, 842, 843,\n\t844, 845, 846, 847, 848, 849, 850, 851,\n\t852, 853, 854, 855, 856, 857, 858, 859,\n\t860, 861, 862, 863, 864, 801, 865, 866,\n\t867, 868, 869, 870, 801, 846, 801, 794,\n\t795, 794, 795, 795, 794, 794, 795, 794,\n\t794, 794, 794, 795, 794, 794, 794, 794,\n\t794, 795, 794, 794, 794, 794, 794, 795,\n\t795, 795, 795, 795, 794, 794, 794, 795,\n\t794, 794, 794, 795, 795, 795, 794, 794,\n\t794, 795, 795, 794, 794, 794, 795, 795,\n\t795, 794, 794, 794, 795, 795, 795, 795,\n\t794, 795, 795, 795, 795, 794, 794, 794,\n\t794, 794, 795, 795, 795, 795, 794, 794,\n\t795, 795, 795, 794, 794, 795, 795, 795,\n\t795, 794, 795, 795, 794, 795, 795, 794,\n\t794, 794, 795, 795, 795, 794, 794, 794,\n\t794, 795, 795, 795, 795, 795, 794, 794,\n\t794, 794, 795, 794, 795, 795, 794, 795,\n\t795, 794, 795, 794, 795, 795, 795, 794,\n\t795, 795, 794, 794, 794, 795, 794, 794,\n\t794, 794, 794, 794, 794, 795, 795, 795,\n\t795, 794, 795, 795, 795, 795, 795, 795,\n\t795, 794, 871, 872, 873, 874, 875, 876,\n\t877, 878, 879, 801, 880, 881, 882, 883,\n\t884, 794, 795, 794, 794, 794, 794, 794,\n\t795, 795, 794, 795, 795, 795, 794, 795,\n\t795, 795, 795, 795, 795, 795, 795, 795,\n\t795, 794, 795, 795, 795, 794, 794, 795,\n\t795, 795, 794, 794, 795, 794, 794, 795,\n\t795, 795, 795, 795, 794, 794, 794, 794,\n\t795, 795, 795, 795, 795, 795, 794, 795,\n\t795, 795, 795, 795, 794, 885, 840, 886,\n\t887, 888, 801, 889, 890, 846, 801, 794,\n\t795, 795, 795, 795, 794, 794, 794, 795,\n\t794, 794, 795, 795, 795, 794, 794, 794,\n\t795, 795, 794, 851, 794, 846, 801, 801,\n\t891, 794, 801, 794, 795, 846, 892, 893,\n\t846, 894, 895, 846, 896, 897, 898, 899,\n\t900, 901, 846, 902, 903, 904, 846, 905,\n\t906, 907, 865, 908, 909, 910, 865, 911,\n\t846, 801, 794, 794, 795, 795, 794, 794,\n\t794, 795, 795, 795, 795, 794, 795, 795,\n\t794, 794, 794, 794, 795, 795, 794, 794,\n\t795, 795, 794, 794, 794, 794, 794, 794,\n\t795, 795, 795, 794, 794, 794, 795, 794,\n\t794, 794, 795, 795, 794, 795, 795, 795,\n\t795, 794, 795, 795, 795, 795, 794, 795,\n\t795, 795, 795, 795, 795, 794, 794, 794,\n\t795, 795, 795, 795, 794, 912, 913, 794,\n\t801, 794, 795, 794, 794, 795, 846, 914,\n\t915, 916, 917, 896, 918, 919, 920, 921,\n\t922, 923, 924, 925, 926, 927, 928, 929,\n\t801, 794, 794, 795, 794, 795, 795, 795,\n\t795, 795, 795, 795, 794, 795, 795, 795,\n\t794, 795, 794, 794, 795, 794, 795, 794,\n\t794, 795, 795, 795, 795, 794, 795, 795,\n\t795, 794, 794, 795, 795, 795, 795, 794,\n\t795, 795, 794, 794, 795, 795, 795, 795,\n\t795, 794, 930, 931, 932, 933, 934, 935,\n\t936, 937, 938, 939, 940, 936, 942, 943,\n\t944, 945, 941, 794, 946, 947, 846, 948,\n\t949, 950, 951, 952, 953, 954, 955, 956,\n\t846, 801, 957, 958, 959, 960, 846, 961,\n\t962, 963, 964, 965, 966, 967, 968, 969,\n\t970, 971, 972, 973, 974, 975, 846, 877,\n\t801, 976, 794, 795, 795, 795, 795, 795,\n\t794, 794, 794, 795, 794, 795, 795, 794,\n\t795, 794, 795, 795, 794, 794, 794, 795,\n\t795, 795, 794, 794, 794, 795, 795, 795,\n\t794, 794, 794, 794, 795, 794, 794, 795,\n\t794, 794, 795, 795, 795, 794, 794, 795,\n\t794, 795, 795, 795, 794, 795, 795, 795,\n\t795, 795, 795, 794, 794, 794, 795, 795,\n\t794, 795, 795, 794, 795, 795, 794, 795,\n\t795, 794, 795, 795, 795, 795, 795, 795,\n\t795, 794, 795, 794, 795, 794, 795, 795,\n\t794, 795, 794, 795, 795, 794, 795, 794,\n\t795, 794, 977, 948, 978, 979, 980, 981,\n\t982, 983, 984, 985, 986, 829, 987, 846,\n\t988, 989, 990, 846, 991, 861, 992, 993,\n\t994, 995, 996, 997, 998, 999, 846, 794,\n\t794, 794, 795, 795, 795, 794, 795, 795,\n\t794, 795, 795, 794, 794, 794, 794, 794,\n\t795, 795, 795, 795, 794, 795, 795, 795,\n\t795, 795, 795, 794, 794, 794, 795, 795,\n\t795, 795, 795, 795, 795, 795, 795, 794,\n\t795, 795, 795, 795, 795, 795, 795, 795,\n\t794, 795, 795, 794, 794, 794, 794, 795,\n\t795, 795, 794, 794, 794, 795, 794, 794,\n\t794, 795, 795, 794, 795, 795, 795, 794,\n\t795, 794, 794, 794, 795, 795, 794, 795,\n\t795, 795, 794, 795, 795, 795, 794, 794,\n\t794, 794, 795, 846, 915, 1000, 1001, 801,\n\t846, 801, 794, 794, 795, 794, 795, 846,\n\t1000, 801, 794, 846, 1002, 801, 794, 794,\n\t795, 846, 1003, 1004, 1005, 906, 1006, 1007,\n\t846, 1008, 1009, 1010, 801, 794, 794, 795,\n\t795, 795, 794, 795, 795, 794, 795, 795,\n\t795, 795, 794, 794, 795, 794, 794, 795,\n\t795, 794, 795, 794, 846, 801, 794, 1011,\n\t846, 1012, 794, 801, 794, 795, 794, 795,\n\t1013, 846, 1014, 1015, 794, 795, 794, 794,\n\t794, 795, 795, 795, 795, 794, 1016, 1017,\n\t1018, 846, 1019, 1020, 1021, 1022, 1023, 1024,\n\t1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032,\n\t801, 794, 795, 795, 795, 794, 794, 794,\n\t794, 795, 795, 794, 794, 795, 794, 794,\n\t794, 794, 794, 794, 794, 795, 794, 795,\n\t794, 794, 794, 794, 794, 794, 795, 795,\n\t795, 795, 795, 794, 794, 795, 794, 794,\n\t794, 795, 794, 794, 795, 794, 794, 795,\n\t794, 794, 795, 794, 794, 794, 795, 795,\n\t795, 794, 794, 794, 795, 795, 795, 795,\n\t794, 1033, 846, 1034, 846, 1035, 1036, 1037,\n\t1038, 801, 794, 795, 795, 795, 795, 795,\n\t794, 794, 794, 795, 794, 794, 795, 795,\n\t795, 795, 795, 795, 795, 795, 795, 795,\n\t794, 795, 795, 795, 795, 795, 795, 795,\n\t795, 795, 795, 795, 795, 795, 795, 795,\n\t795, 795, 795, 795, 794, 795, 795, 795,\n\t795, 795, 794, 1039, 846, 801, 794, 795,\n\t1040, 846, 831, 801, 794, 795, 1041, 794,\n\t801, 794, 795, 846, 1042, 801, 794, 794,\n\t795, 1043, 794, 846, 1044, 801, 794, 794,\n\t795, 1046, 1045, 795, 795, 795, 795, 1046,\n\t1045, 795, 1046, 1045, 1046, 1046, 795, 1046,\n\t1045, 795, 1046, 795, 1046, 1045, 795, 1046,\n\t795, 1046, 795, 1045, 1046, 1046, 1046, 1046,\n\t1046, 1046, 1046, 1046, 1045, 795, 795, 1046,\n\t1046, 795, 1046, 795, 1046, 1045, 1046, 1046,\n\t1046, 1046, 1046, 795, 1046, 795, 1046, 795,\n\t1046, 1045, 1046, 1046, 795, 1046, 795, 1046,\n\t1045, 1046, 1046, 1046, 1046, 1046, 795, 1046,\n\t795, 1046, 1045, 795, 795, 1046, 795, 1046,\n\t1045, 1046, 1046, 1046, 795, 1046, 795, 1046,\n\t795, 1046, 795, 1046, 1045, 1046, 795, 1046,\n\t795, 1046, 1045, 795, 1046, 1046, 1046, 1046,\n\t795, 1046, 795, 1046, 795, 1046, 795, 1046,\n\t795, 1046, 795, 1046, 1045, 795, 1046, 1045,\n\t1046, 1046, 1046, 795, 1046, 795, 1046, 1045,\n\t1046, 795, 1046, 795, 1046, 1045, 795, 1046,\n\t1046, 1046, 1046, 795, 1046, 795, 1046, 1045,\n\t795, 1046, 795, 1046, 795, 1046, 1045, 1046,\n\t1046, 795, 1046, 795, 1046, 1045, 795, 1046,\n\t795, 1046, 795, 1046, 795, 1045, 1046, 1046,\n\t1046, 795, 1046, 795, 1046, 1045, 795, 1046,\n\t1045, 1046, 1046, 795, 1046, 1045, 1046, 1046,\n\t1046, 795, 1046, 1046, 1046, 1046, 1046, 1046,\n\t795, 795, 1046, 795, 1046, 795, 1046, 795,\n\t1046, 1045, 1046, 795, 1046, 795, 1046, 1045,\n\t795, 1046, 1045, 1046, 795, 1046, 1045, 1046,\n\t795, 1046, 1045, 795, 795, 1046, 1045, 795,\n\t1046, 795, 1046, 795, 1046, 795, 1046, 795,\n\t1046, 795, 1045, 1046, 1046, 795, 1046, 1046,\n\t1046, 1046, 795, 795, 1046, 1046, 1046, 1046,\n\t1046, 795, 1046, 1046, 1046, 1046, 1046, 1045,\n\t795, 1046, 1046, 795, 1046, 795, 1045, 1046,\n\t1046, 795, 1046, 1045, 795, 795, 1046, 795,\n\t1045, 1046, 1046, 1045, 795, 1046, 795, 1045,\n\t1046, 1045, 795, 1046, 795, 1046, 795, 1045,\n\t1046, 1046, 1045, 795, 1046, 795, 1046, 795,\n\t1046, 1045, 1046, 795, 1046, 795, 1046, 1045,\n\t795, 1046, 1045, 795, 795, 1046, 1045, 1046,\n\t795, 1045, 1046, 1045, 795, 1046, 795, 1046,\n\t795, 1045, 1046, 1045, 795, 795, 1046, 1045,\n\t1046, 795, 1046, 795, 1046, 1045, 795, 1046,\n\t795, 1045, 1046, 1045, 795, 795, 1046, 795,\n\t1045, 1046, 1045, 795, 795, 1046, 1045, 1046,\n\t795, 1046, 1045, 1046, 795, 1046, 1045, 1046,\n\t795, 1046, 795, 1046, 795, 1045, 1046, 1045,\n\t795, 795, 1046, 1045, 1046, 795, 1046, 795,\n\t1046, 1045, 795, 1046, 1045, 1046, 1046, 795,\n\t1046, 795, 1046, 1045, 1045, 795, 1045, 795,\n\t1046, 1046, 795, 1046, 1046, 1046, 1046, 1046,\n\t1046, 1046, 1045, 795, 1046, 1046, 1046, 795,\n\t1045, 1046, 1046, 1046, 795, 1046, 795, 1046,\n\t795, 1046, 795, 1046, 795, 1046, 1045, 795,\n\t795, 1046, 1045, 1046, 795, 1046, 1045, 795,\n\t795, 1046, 795, 795, 795, 1046, 795, 1046,\n\t795, 1046, 795, 1046, 795, 1045, 795, 1046,\n\t795, 1046, 795, 1045, 1046, 1045, 795, 1046,\n\t795, 1045, 1046, 795, 1046, 1046, 1046, 1045,\n\t795, 1046, 795, 795, 1046, 795, 1045, 1046,\n\t1046, 1045, 795, 1046, 1046, 1046, 1046, 795,\n\t1046, 795, 1045, 1046, 1046, 1046, 795, 1046,\n\t1045, 1046, 795, 1046, 795, 1046, 795, 1046,\n\t795, 1046, 1045, 1046, 1046, 795, 1046, 1045,\n\t795, 1046, 795, 1046, 795, 1045, 1046, 1046,\n\t1045, 795, 1046, 795, 1045, 1046, 1045, 795,\n\t1046, 1045, 795, 1046, 795, 1046, 1045, 1046,\n\t1046, 1046, 1045, 795, 795, 795, 1046, 1045,\n\t795, 1046, 795, 1045, 1046, 1045, 795, 1046,\n\t795, 1046, 795, 1045, 1046, 1046, 1046, 1045,\n\t795, 1046, 795, 1045, 1046, 1046, 1046, 1046,\n\t1045, 795, 1046, 795, 1046, 1045, 795, 795,\n\t1046, 795, 1046, 1045, 1046, 795, 1046, 795,\n\t1045, 1046, 1046, 1045, 795, 1046, 795, 1046,\n\t1045, 795, 1046, 1046, 1046, 795, 1046, 795,\n\t1045, 795, 1046, 1045, 1046, 795, 795, 1046,\n\t795, 1046, 795, 1045, 1046, 1046, 1046, 1046,\n\t1045, 795, 1046, 795, 1046, 795, 1046, 795,\n\t1046, 795, 1046, 1045, 1046, 1046, 1046, 795,\n\t1046, 795, 1046, 795, 1046, 795, 1045, 1046,\n\t1046, 795, 795, 1046, 1045, 1046, 795, 1046,\n\t1046, 1045, 795, 1046, 795, 1046, 1045, 795,\n\t795, 1046, 1046, 1046, 1046, 795, 1046, 795,\n\t1046, 795, 1045, 1046, 1046, 795, 1045, 1046,\n\t1045, 795, 1046, 795, 1045, 1046, 1045, 795,\n\t1046, 795, 1045, 1046, 795, 1046, 1046, 1045,\n\t795, 1046, 1046, 795, 1045, 1046, 1045, 795,\n\t1046, 795, 1046, 1045, 1046, 795, 1046, 795,\n\t1045, 1046, 1045, 795, 1046, 795, 1046, 795,\n\t1046, 795, 1046, 795, 1046, 1045, 1047, 1045,\n\t1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055,\n\t1056, 1057, 1058, 1050, 1059, 1060, 1061, 1062,\n\t1063, 1050, 1064, 1065, 1066, 1067, 1068, 1069,\n\t1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077,\n\t1078, 1050, 1079, 1047, 1059, 1047, 1080, 1047,\n\t1045, 1046, 1046, 1046, 1046, 795, 1045, 1046,\n\t1046, 1045, 795, 1046, 1045, 795, 795, 1046,\n\t1045, 795, 1046, 795, 1045, 1046, 1045, 795,\n\t795, 1046, 795, 1045, 1046, 1046, 1045, 795,\n\t1046, 1046, 1046, 1045, 795, 1046, 795, 1046,\n\t1046, 1045, 795, 795, 1046, 795, 1045, 1046,\n\t1045, 795, 1046, 1045, 795, 795, 1046, 795,\n\t1046, 1045, 795, 1046, 795, 795, 1046, 795,\n\t1046, 795, 1045, 1046, 1046, 1045, 795, 1046,\n\t1046, 795, 1046, 1045, 795, 1046, 795, 1046,\n\t1045, 795, 1046, 795, 1045, 795, 1046, 1046,\n\t1046, 795, 1046, 1045, 1046, 795, 1046, 1045,\n\t795, 1046, 1045, 1046, 795, 1046, 1045, 795,\n\t1046, 1045, 795, 1046, 795, 1046, 1045, 795,\n\t1046, 1045, 795, 1046, 1045, 1081, 1082, 1083,\n\t1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091,\n\t1092, 1052, 1093, 1094, 1095, 1096, 1097, 1094,\n\t1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105,\n\t1106, 1047, 1045, 1046, 795, 1046, 1045, 1046,\n\t795, 1046, 1045, 1046, 795, 1046, 1045, 1046,\n\t795, 1046, 1045, 795, 1046, 795, 1046, 1045,\n\t1046, 795, 1046, 1045, 1046, 795, 795, 795,\n\t1046, 1045, 1046, 795, 1046, 1045, 1046, 1046,\n\t1046, 1046, 795, 1046, 795, 1045, 1046, 1045,\n\t795, 795, 1046, 795, 1046, 1045, 1046, 795,\n\t1046, 1045, 795, 1046, 1045, 1046, 1046, 795,\n\t1046, 1045, 795, 1046, 1045, 1046, 795, 1046,\n\t1045, 795, 1046, 1045, 795, 1046, 1045, 795,\n\t1046, 1045, 1046, 1045, 795, 795, 1046, 1045,\n\t1046, 795, 1046, 1045, 795, 1046, 795, 1045,\n\t1046, 1045, 795, 1050, 1107, 1047, 1050, 1108,\n\t1050, 1109, 1059, 1047, 1045, 1046, 1045, 795,\n\t1046, 1045, 795, 1050, 1108, 1059, 1047, 1045,\n\t1050, 1110, 1047, 1059, 1047, 1045, 1046, 1045,\n\t795, 1050, 1111, 1068, 1112, 1094, 1113, 1106,\n\t1050, 1114, 1115, 1116, 1047, 1059, 1047, 1045,\n\t1046, 1045, 795, 1046, 795, 1046, 1045, 795,\n\t1046, 795, 1046, 795, 1045, 1046, 1046, 1045,\n\t795, 1046, 795, 1046, 1045, 795, 1046, 1045,\n\t1050, 1059, 801, 1045, 1117, 1050, 1118, 1059,\n\t1047, 1045, 801, 1046, 1045, 795, 1046, 1045,\n\t795, 1119, 1050, 1120, 1121, 1047, 1045, 795,\n\t1046, 1045, 1046, 1046, 1045, 795, 795, 1046,\n\t795, 1046, 1045, 1050, 1122, 1123, 1124, 1125,\n\t1126, 1127, 1128, 1129, 1130, 1131, 1132, 1047,\n\t1059, 1047, 1045, 1046, 795, 1046, 1046, 1046,\n\t1046, 1046, 1046, 1046, 795, 1046, 795, 1046,\n\t1046, 1046, 1046, 1046, 1046, 1045, 795, 1046,\n\t1046, 795, 1046, 795, 1045, 1046, 795, 1046,\n\t1046, 1046, 795, 1046, 1046, 795, 1046, 1046,\n\t795, 1046, 1046, 795, 1046, 1046, 1045, 795,\n\t1050, 1133, 1050, 1109, 1134, 1135, 1136, 1047,\n\t1059, 1047, 1045, 1046, 1045, 795, 1046, 1046,\n\t1046, 795, 1046, 1046, 1046, 795, 1046, 795,\n\t1046, 1045, 795, 795, 795, 795, 1046, 1046,\n\t795, 795, 795, 795, 795, 1046, 1046, 1046,\n\t1046, 1046, 1046, 1046, 795, 1046, 795, 1046,\n\t795, 1045, 1046, 1046, 1046, 795, 1046, 795,\n\t1046, 1045, 1059, 801, 1137, 1050, 1059, 801,\n\t1046, 1045, 795, 1138, 1050, 1139, 1059, 801,\n\t1046, 1045, 795, 1046, 795, 1140, 1059, 1047,\n\t1045, 801, 1046, 1045, 795, 1050, 1141, 1047,\n\t1059, 1047, 1045, 1046, 1045, 795, 1142, 1143,\n\t1144, 1142, 1145, 1146, 1147, 1149, 1150, 1151,\n\t1152, 1153, 1154, 670, 670, 419, 1155, 1156,\n\t1157, 1158, 670, 1161, 1162, 1164, 1165, 1166,\n\t1160, 1167, 1168, 1169, 1170, 1171, 1172, 1173,\n\t1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181,\n\t1182, 1183, 1184, 1185, 1186, 1188, 1189, 1190,\n\t1191, 1192, 1193, 670, 1148, 7, 1148, 419,\n\t1148, 419, 1160, 1163, 1187, 1194, 1159, 1142,\n\t1142, 1195, 1143, 1196, 1198, 1197, 4, 1147,\n\t1200, 1197, 1201, 1197, 2, 1147, 1197, 6,\n\t8, 8, 7, 1202, 1203, 1204, 1197, 1205,\n\t1206, 1197, 1207, 1197, 419, 419, 1209, 1210,\n\t489, 470, 1211, 470, 1212, 1213, 1214, 1215,\n\t1216, 1217, 1218, 1219, 1220, 1221, 1222, 544,\n\t1223, 520, 1224, 1225, 1226, 1227, 1228, 1229,\n\t1230, 1231, 1232, 1233, 1234, 1235, 419, 419,\n\t419, 425, 565, 1208, 1236, 1197, 1237, 1197,\n\t670, 1238, 419, 419, 419, 670, 1238, 670,\n\t670, 419, 1238, 419, 1238, 419, 1238, 419,\n\t670, 670, 670, 670, 670, 1238, 419, 670,\n\t670, 670, 419, 670, 419, 1238, 419, 670,\n\t670, 670, 670, 419, 1238, 670, 419, 670,\n\t419, 670, 419, 670, 670, 419, 670, 1238,\n\t419, 670, 419, 670, 419, 670, 1238, 670,\n\t419, 1238, 670, 419, 670, 419, 1238, 670,\n\t670, 670, 670, 670, 1238, 419, 419, 670,\n\t419, 670, 1238, 670, 419, 1238, 670, 670,\n\t1238, 419, 419, 670, 419, 670, 419, 670,\n\t1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245,\n\t1246, 1247, 1248, 1249, 715, 1250, 1251, 1252,\n\t1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260,\n\t1261, 1260, 1262, 1263, 1264, 1265, 1266, 671,\n\t1238, 1267, 1268, 1269, 1270, 1271, 1272, 1273,\n\t1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281,\n\t1282, 1283, 1284, 1285, 725, 1286, 1287, 1288,\n\t692, 1289, 1290, 1291, 1292, 1293, 1294, 671,\n\t1295, 1296, 1297, 1298, 1299, 1300, 1301, 1302,\n\t674, 1303, 671, 674, 1304, 1305, 1306, 1307,\n\t683, 1238, 1308, 1309, 1310, 1311, 703, 1312,\n\t1313, 683, 1314, 1315, 1316, 1317, 1318, 671,\n\t1238, 1319, 1278, 1320, 1321, 1322, 683, 1323,\n\t1324, 674, 671, 683, 425, 1238, 1288, 671,\n\t674, 683, 425, 683, 425, 1325, 683, 1238,\n\t425, 674, 1326, 1327, 674, 1328, 1329, 681,\n\t1330, 1331, 1332, 1333, 1334, 1284, 1335, 1336,\n\t1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344,\n\t1345, 1346, 1303, 1347, 674, 683, 425, 1238,\n\t1348, 1349, 683, 671, 1238, 425, 671, 1238,\n\t674, 1350, 731, 1351, 1352, 1353, 1354, 1355,\n\t1356, 1357, 1358, 671, 1359, 1360, 1361, 1362,\n\t1363, 1364, 671, 683, 1238, 1366, 1367, 1368,\n\t1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376,\n\t1372, 1378, 1379, 1380, 1381, 1365, 1377, 1365,\n\t1238, 1365, 1238, 1382, 1382, 1383, 1384, 1385,\n\t1386, 1387, 1388, 1389, 1390, 1387, 767, 1391,\n\t1391, 1391, 1392, 1391, 1391, 768, 769, 770,\n\t1391, 767, 1382, 1382, 1393, 1396, 1397, 1395,\n\t1398, 1399, 1398, 1400, 1391, 1402, 1401, 1396,\n\t1403, 1395, 1405, 1404, 1394, 1394, 1394, 768,\n\t769, 770, 1394, 767, 767, 1406, 773, 1406,\n\t1407, 1406, 775, 1408, 1409, 1410, 1411, 1412,\n\t1413, 1414, 1411, 776, 775, 1408, 1415, 1415,\n\t777, 779, 1416, 1415, 776, 1418, 1419, 1417,\n\t1418, 1419, 1420, 1417, 775, 1408, 1421, 1415,\n\t775, 1408, 1415, 1423, 1422, 1425, 1424, 776,\n\t1426, 777, 1426, 779, 1426, 785, 1427, 1428,\n\t1429, 1430, 1431, 1432, 1433, 1430, 786, 785,\n\t1427, 1434, 1434, 787, 789, 1435, 1434, 786,\n\t1437, 1438, 1436, 1437, 1438, 1439, 1436, 785,\n\t1427, 1440, 1434, 785, 1427, 1434, 1442, 1441,\n\t1444, 1443, 786, 1445, 787, 1445, 789, 1445,\n\t795, 1448, 1449, 1451, 1452, 1453, 1447, 1454,\n\t1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462,\n\t1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470,\n\t1471, 1472, 1473, 1475, 1476, 1477, 1478, 1479,\n\t1480, 795, 795, 1446, 1447, 1450, 1474, 1481,\n\t1446, 1046, 795, 795, 1483, 1484, 865, 846,\n\t1485, 846, 1486, 1487, 1488, 1489, 1490, 1491,\n\t1492, 1493, 1494, 1495, 1496, 920, 1497, 896,\n\t1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505,\n\t1506, 1507, 1508, 1509, 795, 795, 795, 801,\n\t941, 1482, 1046, 1510, 795, 795, 795, 1046,\n\t1510, 1046, 1046, 795, 1510, 795, 1510, 795,\n\t1510, 795, 1046, 1046, 1046, 1046, 1046, 1510,\n\t795, 1046, 1046, 1046, 795, 1046, 795, 1510,\n\t795, 1046, 1046, 1046, 1046, 795, 1510, 1046,\n\t795, 1046, 795, 1046, 795, 1046, 1046, 795,\n\t1046, 1510, 795, 1046, 795, 1046, 795, 1046,\n\t1510, 1046, 795, 1510, 1046, 795, 1046, 795,\n\t1510, 1046, 1046, 1046, 1046, 1046, 1510, 795,\n\t795, 1046, 795, 1046, 1510, 1046, 795, 1510,\n\t1046, 1046, 1510, 795, 795, 1046, 795, 1046,\n\t795, 1046, 1510, 1511, 1512, 1513, 1514, 1515,\n\t1516, 1517, 1518, 1519, 1520, 1521, 1091, 1522,\n\t1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530,\n\t1531, 1532, 1533, 1532, 1534, 1535, 1536, 1537,\n\t1538, 1047, 1510, 1539, 1540, 1541, 1542, 1543,\n\t1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551,\n\t1552, 1553, 1554, 1555, 1556, 1557, 1101, 1558,\n\t1559, 1560, 1068, 1561, 1562, 1563, 1564, 1565,\n\t1566, 1047, 1567, 1568, 1569, 1570, 1571, 1572,\n\t1573, 1574, 1050, 1575, 1047, 1050, 1576, 1577,\n\t1578, 1579, 1059, 1510, 1580, 1581, 1582, 1583,\n\t1079, 1584, 1585, 1059, 1586, 1587, 1588, 1589,\n\t1590, 1047, 1510, 1591, 1550, 1592, 1593, 1594,\n\t1059, 1595, 1596, 1050, 1047, 1059, 801, 1510,\n\t1560, 1047, 1050, 1059, 801, 1059, 801, 1597,\n\t1059, 1510, 801, 1050, 1598, 1599, 1050, 1600,\n\t1601, 1057, 1602, 1603, 1604, 1605, 1606, 1556,\n\t1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614,\n\t1615, 1616, 1617, 1618, 1575, 1619, 1050, 1059,\n\t801, 1510, 1620, 1621, 1059, 1047, 1510, 801,\n\t1047, 1510, 1050, 1622, 1107, 1623, 1624, 1625,\n\t1626, 1627, 1628, 1629, 1630, 1047, 1631, 1632,\n\t1633, 1634, 1635, 1636, 1047, 1059, 1510, 1638,\n\t1639, 1640, 1641, 1642, 1643, 1644, 1645, 1646,\n\t1647, 1648, 1644, 1650, 1651, 1652, 1653, 1637,\n\t1649, 1637, 1510, 1637, 1510,\n}\n\nvar _hcltok_trans_targs []int16 = []int16{\n\t1459, 1459, 2, 3, 1459, 1459, 4, 1467,\n\t5, 6, 8, 9, 286, 12, 13, 14,\n\t15, 16, 287, 288, 19, 289, 21, 22,\n\t290, 291, 292, 293, 294, 295, 296, 297,\n\t298, 299, 328, 348, 353, 127, 128, 129,\n\t356, 151, 371, 375, 1459, 10, 11, 17,\n\t18, 20, 23, 24, 25, 26, 27, 28,\n\t29, 30, 31, 32, 64, 105, 120, 131,\n\t154, 170, 283, 33, 34, 35, 36, 37,\n\t38, 39, 40, 41, 42, 43, 44, 45,\n\t46, 47, 48, 49, 50, 51, 52, 53,\n\t54, 55, 56, 57, 58, 59, 60, 61,\n\t62, 63, 65, 66, 67, 68, 69, 70,\n\t71, 72, 73, 74, 75, 76, 77, 78,\n\t79, 80, 81, 82, 83, 84, 85, 86,\n\t87, 88, 89, 90, 91, 92, 93, 94,\n\t95, 96, 97, 98, 99, 100, 101, 102,\n\t103, 104, 106, 107, 108, 109, 110, 111,\n\t112, 113, 114, 115, 116, 117, 118, 119,\n\t121, 122, 123, 124, 125, 126, 130, 132,\n\t133, 134, 135, 136, 137, 138, 139, 140,\n\t141, 142, 143, 144, 145, 146, 147, 148,\n\t149, 150, 152, 153, 155, 156, 157, 158,\n\t159, 160, 161, 162, 163, 164, 165, 166,\n\t167, 168, 169, 171, 203, 227, 230, 231,\n\t233, 242, 243, 246, 250, 268, 275, 277,\n\t279, 281, 172, 173, 174, 175, 176, 177,\n\t178, 179, 180, 181, 182, 183, 184, 185,\n\t186, 187, 188, 189, 190, 191, 192, 193,\n\t194, 195, 196, 197, 198, 199, 200, 201,\n\t202, 204, 205, 206, 207, 208, 209, 210,\n\t211, 212, 213, 214, 215, 216, 217, 218,\n\t219, 220, 221, 222, 223, 224, 225, 226,\n\t228, 229, 232, 234, 235, 236, 237, 238,\n\t239, 240, 241, 244, 245, 247, 248, 249,\n\t251, 252, 253, 254, 255, 256, 257, 258,\n\t259, 260, 261, 262, 263, 264, 265, 266,\n\t267, 269, 270, 271, 272, 273, 274, 276,\n\t278, 280, 282, 284, 285, 300, 301, 302,\n\t303, 304, 305, 306, 307, 308, 309, 310,\n\t311, 312, 313, 314, 315, 316, 317, 318,\n\t319, 320, 321, 322, 323, 324, 325, 326,\n\t327, 329, 330, 331, 332, 333, 334, 335,\n\t336, 337, 338, 339, 340, 341, 342, 343,\n\t344, 345, 346, 347, 349, 350, 351, 352,\n\t354, 355, 357, 358, 359, 360, 361, 362,\n\t363, 364, 365, 366, 367, 368, 369, 370,\n\t372, 373, 374, 376, 382, 404, 409, 411,\n\t413, 377, 378, 379, 380, 381, 383, 384,\n\t385, 386, 387, 388, 389, 390, 391, 392,\n\t393, 394, 395, 396, 397, 398, 399, 400,\n\t401, 402, 403, 405, 406, 407, 408, 410,\n\t412, 414, 1459, 1471, 1459, 437, 438, 439,\n\t440, 417, 441, 442, 443, 444, 445, 446,\n\t447, 448, 449, 450, 451, 452, 453, 454,\n\t455, 456, 457, 458, 459, 460, 461, 462,\n\t463, 464, 465, 466, 467, 469, 470, 471,\n\t472, 473, 474, 475, 476, 477, 478, 479,\n\t480, 481, 482, 483, 484, 485, 419, 486,\n\t487, 488, 489, 490, 491, 492, 493, 494,\n\t495, 496, 497, 498, 499, 500, 501, 502,\n\t503, 418, 504, 505, 506, 507, 508, 510,\n\t511, 512, 513, 514, 515, 516, 517, 518,\n\t519, 520, 521, 522, 523, 525, 526, 527,\n\t528, 529, 530, 534, 536, 537, 538, 539,\n\t434, 540, 541, 542, 543, 544, 545, 546,\n\t547, 548, 549, 550, 551, 552, 553, 554,\n\t556, 557, 559, 560, 561, 562, 563, 564,\n\t432, 565, 566, 567, 568, 569, 570, 571,\n\t572, 573, 575, 607, 631, 634, 635, 637,\n\t646, 647, 650, 654, 672, 532, 679, 681,\n\t683, 685, 576, 577, 578, 579, 580, 581,\n\t582, 583, 584, 585, 586, 587, 588, 589,\n\t590, 591, 592, 593, 594, 595, 596, 597,\n\t598, 599, 600, 601, 602, 603, 604, 605,\n\t606, 608, 609, 610, 611, 612, 613, 614,\n\t615, 616, 617, 618, 619, 620, 621, 622,\n\t623, 624, 625, 626, 627, 628, 629, 630,\n\t632, 633, 636, 638, 639, 640, 641, 642,\n\t643, 644, 645, 648, 649, 651, 652, 653,\n\t655, 656, 657, 658, 659, 660, 661, 662,\n\t663, 664, 665, 666, 667, 668, 669, 670,\n\t671, 673, 674, 675, 676, 677, 678, 680,\n\t682, 684, 686, 688, 689, 1459, 1459, 690,\n\t827, 828, 759, 829, 830, 831, 832, 833,\n\t834, 788, 835, 724, 836, 837, 838, 839,\n\t840, 841, 842, 843, 744, 844, 845, 846,\n\t847, 848, 849, 850, 851, 852, 853, 769,\n\t854, 856, 857, 858, 859, 860, 861, 862,\n\t863, 864, 865, 702, 866, 867, 868, 869,\n\t870, 871, 872, 873, 874, 740, 875, 876,\n\t877, 878, 879, 810, 881, 882, 885, 887,\n\t888, 889, 890, 891, 892, 895, 896, 898,\n\t899, 900, 902, 903, 904, 905, 906, 907,\n\t908, 909, 910, 911, 912, 914, 915, 916,\n\t917, 920, 922, 923, 925, 927, 1509, 1510,\n\t929, 930, 931, 1509, 1509, 932, 1523, 1523,\n\t1524, 935, 1523, 936, 1525, 1526, 1529, 1530,\n\t1534, 1534, 1535, 941, 1534, 942, 1536, 1537,\n\t1540, 1541, 1545, 1546, 1545, 968, 969, 970,\n\t971, 948, 972, 973, 974, 975, 976, 977,\n\t978, 979, 980, 981, 982, 983, 984, 985,\n\t986, 987, 988, 989, 990, 991, 992, 993,\n\t994, 995, 996, 997, 998, 1000, 1001, 1002,\n\t1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010,\n\t1011, 1012, 1013, 1014, 1015, 1016, 950, 1017,\n\t1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025,\n\t1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033,\n\t1034, 949, 1035, 1036, 1037, 1038, 1039, 1041,\n\t1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049,\n\t1050, 1051, 1052, 1053, 1054, 1056, 1057, 1058,\n\t1059, 1060, 1061, 1065, 1067, 1068, 1069, 1070,\n\t965, 1071, 1072, 1073, 1074, 1075, 1076, 1077,\n\t1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085,\n\t1087, 1088, 1090, 1091, 1092, 1093, 1094, 1095,\n\t963, 1096, 1097, 1098, 1099, 1100, 1101, 1102,\n\t1103, 1104, 1106, 1138, 1162, 1165, 1166, 1168,\n\t1177, 1178, 1181, 1185, 1203, 1063, 1210, 1212,\n\t1214, 1216, 1107, 1108, 1109, 1110, 1111, 1112,\n\t1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120,\n\t1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128,\n\t1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136,\n\t1137, 1139, 1140, 1141, 1142, 1143, 1144, 1145,\n\t1146, 1147, 1148, 1149, 1150, 1151, 1152, 1153,\n\t1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161,\n\t1163, 1164, 1167, 1169, 1170, 1171, 1172, 1173,\n\t1174, 1175, 1176, 1179, 1180, 1182, 1183, 1184,\n\t1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193,\n\t1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201,\n\t1202, 1204, 1205, 1206, 1207, 1208, 1209, 1211,\n\t1213, 1215, 1217, 1219, 1220, 1545, 1545, 1221,\n\t1358, 1359, 1290, 1360, 1361, 1362, 1363, 1364,\n\t1365, 1319, 1366, 1255, 1367, 1368, 1369, 1370,\n\t1371, 1372, 1373, 1374, 1275, 1375, 1376, 1377,\n\t1378, 1379, 1380, 1381, 1382, 1383, 1384, 1300,\n\t1385, 1387, 1388, 1389, 1390, 1391, 1392, 1393,\n\t1394, 1395, 1396, 1233, 1397, 1398, 1399, 1400,\n\t1401, 1402, 1403, 1404, 1405, 1271, 1406, 1407,\n\t1408, 1409, 1410, 1341, 1412, 1413, 1416, 1418,\n\t1419, 1420, 1421, 1422, 1423, 1426, 1427, 1429,\n\t1430, 1431, 1433, 1434, 1435, 1436, 1437, 1438,\n\t1439, 1440, 1441, 1442, 1443, 1445, 1446, 1447,\n\t1448, 1451, 1453, 1454, 1456, 1458, 1460, 1459,\n\t1461, 1462, 1459, 1463, 1459, 1464, 1465, 1466,\n\t1468, 1469, 1470, 1459, 1472, 1459, 1473, 1459,\n\t1474, 1475, 1476, 1477, 1478, 1479, 1480, 1481,\n\t1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489,\n\t1490, 1491, 1492, 1493, 1494, 1495, 1496, 1497,\n\t1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505,\n\t1506, 1507, 1508, 1459, 1459, 1459, 1459, 1459,\n\t1459, 1, 1459, 7, 1459, 1459, 1459, 1459,\n\t1459, 415, 416, 420, 421, 422, 423, 424,\n\t425, 426, 427, 428, 429, 430, 431, 433,\n\t435, 436, 468, 509, 524, 531, 533, 535,\n\t555, 558, 574, 687, 1459, 1459, 1459, 691,\n\t692, 693, 694, 695, 696, 697, 698, 699,\n\t700, 701, 703, 704, 705, 706, 707, 708,\n\t709, 710, 711, 712, 713, 714, 715, 716,\n\t717, 718, 719, 720, 721, 722, 723, 725,\n\t726, 727, 728, 729, 730, 731, 732, 733,\n\t734, 735, 736, 737, 738, 739, 741, 742,\n\t743, 745, 746, 747, 748, 749, 750, 751,\n\t752, 753, 754, 755, 756, 757, 758, 760,\n\t761, 762, 763, 764, 765, 766, 767, 768,\n\t770, 771, 772, 773, 774, 775, 776, 777,\n\t778, 779, 780, 781, 782, 783, 784, 785,\n\t786, 787, 789, 790, 791, 792, 793, 794,\n\t795, 796, 797, 798, 799, 800, 801, 802,\n\t803, 804, 805, 806, 807, 808, 809, 811,\n\t812, 813, 814, 815, 816, 817, 818, 819,\n\t820, 821, 822, 823, 824, 825, 826, 855,\n\t880, 883, 884, 886, 893, 894, 897, 901,\n\t913, 918, 919, 921, 924, 926, 1511, 1509,\n\t1512, 1517, 1519, 1509, 1520, 1521, 1522, 1509,\n\t928, 1509, 1509, 1513, 1514, 1516, 1509, 1515,\n\t1509, 1509, 1509, 1518, 1509, 1509, 1509, 933,\n\t934, 938, 939, 1523, 1531, 1532, 1533, 1523,\n\t937, 1523, 1523, 934, 1527, 1528, 1523, 1523,\n\t1523, 1523, 1523, 940, 944, 945, 1534, 1542,\n\t1543, 1544, 1534, 943, 1534, 1534, 940, 1538,\n\t1539, 1534, 1534, 1534, 1534, 1534, 1545, 1547,\n\t1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555,\n\t1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563,\n\t1564, 1565, 1566, 1567, 1568, 1569, 1570, 1571,\n\t1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579,\n\t1580, 1581, 1545, 946, 947, 951, 952, 953,\n\t954, 955, 956, 957, 958, 959, 960, 961,\n\t962, 964, 966, 967, 999, 1040, 1055, 1062,\n\t1064, 1066, 1086, 1089, 1105, 1218, 1545, 1222,\n\t1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230,\n\t1231, 1232, 1234, 1235, 1236, 1237, 1238, 1239,\n\t1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247,\n\t1248, 1249, 1250, 1251, 1252, 1253, 1254, 1256,\n\t1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264,\n\t1265, 1266, 1267, 1268, 1269, 1270, 1272, 1273,\n\t1274, 1276, 1277, 1278, 1279, 1280, 1281, 1282,\n\t1283, 1284, 1285, 1286, 1287, 1288, 1289, 1291,\n\t1292, 1293, 1294, 1295, 1296, 1297, 1298, 1299,\n\t1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308,\n\t1309, 1310, 1311, 1312, 1313, 1314, 1315, 1316,\n\t1317, 1318, 1320, 1321, 1322, 1323, 1324, 1325,\n\t1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333,\n\t1334, 1335, 1336, 1337, 1338, 1339, 1340, 1342,\n\t1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350,\n\t1351, 1352, 1353, 1354, 1355, 1356, 1357, 1386,\n\t1411, 1414, 1415, 1417, 1424, 1425, 1428, 1432,\n\t1444, 1449, 1450, 1452, 1455, 1457,\n}\n\nvar _hcltok_trans_actions []byte = []byte{\n\t145, 107, 0, 0, 91, 141, 0, 7,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 121, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 143, 193, 149, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 147, 125, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 31, 169,\n\t0, 0, 0, 35, 33, 0, 55, 41,\n\t175, 0, 53, 0, 175, 175, 0, 0,\n\t75, 61, 181, 0, 73, 0, 181, 181,\n\t0, 0, 85, 187, 89, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 87, 79, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 93,\n\t0, 0, 119, 0, 111, 0, 7, 7,\n\t7, 0, 0, 113, 0, 115, 0, 123,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 7, 7,\n\t7, 196, 196, 196, 196, 196, 196, 7,\n\t7, 196, 7, 127, 139, 135, 97, 133,\n\t103, 0, 129, 0, 101, 95, 109, 99,\n\t131, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 105, 117, 137, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 13,\n\t0, 0, 172, 17, 0, 7, 7, 23,\n\t0, 25, 27, 0, 0, 0, 151, 0,\n\t15, 19, 9, 0, 21, 11, 29, 0,\n\t0, 0, 0, 43, 0, 178, 178, 49,\n\t0, 157, 154, 1, 175, 175, 45, 37,\n\t47, 39, 51, 0, 0, 0, 63, 0,\n\t184, 184, 69, 0, 163, 160, 1, 181,\n\t181, 65, 57, 67, 59, 71, 77, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 7, 7, 7,\n\t190, 190, 190, 190, 190, 190, 7, 7,\n\t190, 7, 81, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 83, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0,\n}\n\nvar _hcltok_to_state_actions []byte = []byte{\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 3, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 3, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 166, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 166, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 3, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0,\n}\n\nvar _hcltok_from_state_actions []byte = []byte{\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 5, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 5, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 5, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 5, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 5, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0, 0, 0,\n\t0, 0, 0, 0, 0, 0,\n}\n\nvar _hcltok_eof_trans []int16 = []int16{\n\t0, 1, 1, 1, 6, 6, 6, 1,\n\t1, 1, 1, 1, 1, 1, 1, 1,\n\t1, 1, 1, 1, 1, 1, 1, 1,\n\t1, 1, 1, 1, 1, 1, 1, 1,\n\t1, 1, 1, 1, 1, 1, 1, 1,\n\t1, 1, 1, 1, 1, 1, 1, 1,\n\t1, 1, 1, 1, 1, 1, 1, 1,\n\t1, 1, 1, 1, 1, 1, 1, 1,\n\t1, 1, 1, 1, 1, 1, 1, 1,\n\t1, 1, 1, 1, 1, 1, 1, 1,\n\t1, 1, 1, 1, 1, 1, 1, 1,\n\t1, 1, 1, 1, 1, 1, 1, 1,\n\t1, 1, 1, 1, 1, 1, 1, 1,\n\t1, 1, 1, 1, 1, 1, 1, 1,\n\t1, 1, 1, 1, 1, 1, 1, 1,\n\t1, 1, 1, 1, 1, 1, 1, 1,\n\t1, 1, 1, 1, 1, 1, 1, 1,\n\t1, 1, 1, 1, 1, 1, 1, 1,\n\t1, 1, 1, 1, 1, 1, 1, 1,\n\t1, 1, 1, 1, 1, 1, 1, 1,\n\t1, 1, 1, 1, 1, 1, 1, 1,\n\t1, 1, 1, 1, 1, 1, 1, 1,\n\t1, 1, 1, 1, 1, 1, 1, 1,\n\t1, 1, 1, 1, 1, 1, 1, 1,\n\t1, 1, 1, 1, 1, 1, 1, 1,\n\t1, 1, 1, 1, 1, 1, 1, 1,\n\t1, 1, 1, 1, 1, 1, 1, 1,\n\t1, 1, 1, 1, 1, 1, 1, 1,\n\t1, 1, 1, 1, 1, 1, 1, 1,\n\t1, 1, 1, 1, 1, 1, 1, 1,\n\t1, 1, 1, 1, 1, 1, 1, 1,\n\t1, 1, 1, 1, 1, 1, 1, 1,\n\t1, 1, 1, 1, 1, 1, 1, 1,\n\t1, 1, 1, 1, 1, 1, 1, 1,\n\t1, 1, 1, 1, 1, 1, 1, 1,\n\t1, 1, 1, 1, 1, 1, 1, 1,\n\t1, 1, 1, 1, 1, 1, 1, 1,\n\t1, 1, 1, 1, 1, 1, 1, 1,\n\t1, 1, 1, 1, 1, 1, 1, 1,\n\t1, 1, 1, 1, 1, 1, 1, 1,\n\t1, 1, 1, 1, 1, 1, 1, 1,\n\t1, 1, 1, 1, 1, 1, 1, 1,\n\t1, 1, 1, 1, 1, 1, 1, 1,\n\t1, 1, 1, 1, 1, 1, 1, 1,\n\t1, 1, 1, 1, 1, 1, 1, 1,\n\t1, 1, 1, 1, 1, 1, 1, 1,\n\t1, 1, 1, 1, 1, 1, 1, 1,\n\t1, 1, 1, 1, 1, 1, 1, 1,\n\t1, 1, 1, 1, 1, 1, 1, 1,\n\t1, 1, 1, 1, 1, 1, 1, 1,\n\t1, 1, 1, 1, 1, 1, 1, 1,\n\t1, 1, 1, 1, 1, 1, 1, 419,\n\t419, 421, 419, 419, 419, 419, 419, 419,\n\t419, 419, 419, 419, 419, 419, 419, 419,\n\t419, 419, 419, 419, 419, 419, 419, 419,\n\t419, 419, 419, 419, 419, 419, 419, 419,\n\t419, 419, 419, 419, 419, 419, 419, 419,\n\t419, 419, 419, 419, 419, 419, 419, 419,\n\t419, 419, 419, 419, 419, 419, 419, 419,\n\t419, 419, 419, 419, 419, 419, 419, 419,\n\t419, 419, 419, 419, 419, 419, 419, 419,\n\t419, 419, 419, 419, 419, 419, 419, 419,\n\t419, 419, 419, 419, 419, 419, 419, 419,\n\t419, 419, 419, 419, 419, 419, 419, 419,\n\t419, 419, 419, 419, 419, 419, 419, 419,\n\t419, 419, 419, 419, 419, 419, 419, 419,\n\t419, 419, 419, 419, 419, 419, 419, 419,\n\t419, 419, 419, 419, 419, 419, 419, 419,\n\t419, 419, 419, 419, 419, 419, 419, 419,\n\t419, 419, 419, 419, 419, 419, 419, 419,\n\t419, 419, 419, 419, 419, 419, 419, 419,\n\t419, 419, 419, 419, 419, 419, 419, 419,\n\t419, 419, 419, 419, 419, 419, 419, 419,\n\t419, 419, 419, 419, 419, 419, 419, 419,\n\t419, 419, 419, 419, 419, 419, 419, 419,\n\t419, 419, 419, 419, 419, 419, 419, 419,\n\t419, 419, 419, 419, 419, 419, 419, 419,\n\t419, 419, 419, 419, 419, 419, 419, 419,\n\t419, 419, 419, 419, 419, 419, 419, 419,\n\t419, 419, 419, 419, 419, 419, 419, 419,\n\t419, 419, 419, 419, 419, 419, 419, 419,\n\t419, 419, 419, 419, 419, 419, 419, 419,\n\t419, 419, 419, 419, 419, 419, 419, 419,\n\t419, 419, 419, 419, 419, 419, 419, 419,\n\t419, 419, 419, 419, 419, 419, 419, 419,\n\t419, 419, 419, 419, 419, 419, 419, 419,\n\t419, 419, 670, 670, 670, 670, 670, 670,\n\t670, 670, 670, 670, 670, 670, 670, 670,\n\t670, 670, 670, 670, 670, 670, 670, 670,\n\t670, 670, 670, 670, 670, 670, 670, 670,\n\t670, 670, 670, 670, 670, 670, 670, 670,\n\t670, 670, 670, 670, 670, 670, 670, 670,\n\t670, 670, 670, 670, 670, 670, 670, 670,\n\t670, 670, 670, 670, 670, 670, 670, 670,\n\t670, 670, 670, 670, 670, 670, 670, 670,\n\t670, 670, 670, 670, 670, 670, 670, 670,\n\t670, 670, 670, 670, 670, 670, 670, 670,\n\t670, 670, 670, 670, 670, 670, 670, 670,\n\t670, 670, 670, 670, 670, 670, 670, 670,\n\t670, 670, 670, 670, 670, 670, 670, 670,\n\t670, 670, 670, 670, 670, 670, 670, 670,\n\t670, 670, 670, 670, 670, 670, 670, 670,\n\t670, 670, 670, 670, 670, 670, 670, 670,\n\t670, 670, 670, 670, 670, 670, 670, 670,\n\t670, 670, 670, 670, 670, 670, 670, 670,\n\t670, 670, 670, 670, 670, 670, 670, 670,\n\t670, 670, 670, 670, 670, 670, 670, 670,\n\t670, 670, 670, 670, 670, 670, 670, 670,\n\t670, 670, 670, 670, 670, 670, 670, 670,\n\t670, 670, 670, 670, 670, 670, 670, 670,\n\t670, 670, 670, 670, 670, 670, 670, 670,\n\t670, 670, 670, 670, 670, 670, 670, 670,\n\t670, 670, 670, 670, 670, 670, 670, 670,\n\t670, 670, 670, 670, 670, 670, 670, 670,\n\t670, 670, 670, 670, 670, 670, 670, 670,\n\t670, 670, 670, 670, 670, 670, 670, 670,\n\t767, 772, 772, 772, 773, 773, 775, 775,\n\t775, 779, 0, 0, 785, 785, 785, 789,\n\t0, 0, 795, 795, 797, 795, 795, 795,\n\t795, 795, 795, 795, 795, 795, 795, 795,\n\t795, 795, 795, 795, 795, 795, 795, 795,\n\t795, 795, 795, 795, 795, 795, 795, 795,\n\t795, 795, 795, 795, 795, 795, 795, 795,\n\t795, 795, 795, 795, 795, 795, 795, 795,\n\t795, 795, 795, 795, 795, 795, 795, 795,\n\t795, 795, 795, 795, 795, 795, 795, 795,\n\t795, 795, 795, 795, 795, 795, 795, 795,\n\t795, 795, 795, 795, 795, 795, 795, 795,\n\t795, 795, 795, 795, 795, 795, 795, 795,\n\t795, 795, 795, 795, 795, 795, 795, 795,\n\t795, 795, 795, 795, 795, 795, 795, 795,\n\t795, 795, 795, 795, 795, 795, 795, 795,\n\t795, 795, 795, 795, 795, 795, 795, 795,\n\t795, 795, 795, 795, 795, 795, 795, 795,\n\t795, 795, 795, 795, 795, 795, 795, 795,\n\t795, 795, 795, 795, 795, 795, 795, 795,\n\t795, 795, 795, 795, 795, 795, 795, 795,\n\t795, 795, 795, 795, 795, 795, 795, 795,\n\t795, 795, 795, 795, 795, 795, 795, 795,\n\t795, 795, 795, 795, 795, 795, 795, 795,\n\t795, 795, 795, 795, 795, 795, 795, 795,\n\t795, 795, 795, 795, 795, 795, 795, 795,\n\t795, 795, 795, 795, 795, 795, 795, 795,\n\t795, 795, 795, 795, 795, 795, 795, 795,\n\t795, 795, 795, 795, 795, 795, 795, 795,\n\t795, 795, 795, 795, 795, 795, 795, 795,\n\t795, 795, 795, 795, 795, 795, 795, 795,\n\t795, 795, 795, 795, 795, 795, 795, 795,\n\t795, 795, 795, 795, 795, 795, 795, 795,\n\t795, 795, 795, 795, 795, 795, 795, 795,\n\t795, 795, 795, 795, 795, 795, 795, 795,\n\t795, 795, 795, 795, 795, 795, 795, 795,\n\t795, 795, 795, 795, 795, 1046, 1046, 1046,\n\t1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,\n\t1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,\n\t1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,\n\t1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,\n\t1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,\n\t1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,\n\t1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,\n\t1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,\n\t1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,\n\t1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,\n\t1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,\n\t1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,\n\t1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,\n\t1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,\n\t1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,\n\t1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,\n\t1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,\n\t1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,\n\t1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,\n\t1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,\n\t1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,\n\t1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,\n\t1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,\n\t1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,\n\t1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,\n\t1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,\n\t1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,\n\t1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,\n\t1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,\n\t1046, 1046, 1046, 0, 1196, 1197, 1198, 1200,\n\t1198, 1198, 1198, 1203, 1198, 1198, 1198, 1209,\n\t1198, 1198, 1239, 1239, 1239, 1239, 1239, 1239,\n\t1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,\n\t1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,\n\t1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239,\n\t1239, 1239, 1239, 1239, 1239, 0, 1392, 1394,\n\t1395, 1399, 1399, 1392, 1402, 1395, 1405, 1395,\n\t1407, 1407, 1407, 0, 1416, 1418, 1418, 1416,\n\t1416, 1423, 1425, 1427, 1427, 1427, 0, 1435,\n\t1437, 1437, 1435, 1435, 1442, 1444, 1446, 1446,\n\t1446, 0, 1483, 1511, 1511, 1511, 1511, 1511,\n\t1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,\n\t1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,\n\t1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511,\n\t1511, 1511, 1511, 1511, 1511, 1511,\n}\n\nconst hcltok_start int = 1459\nconst hcltok_first_final int = 1459\nconst hcltok_error int = 0\n\nconst hcltok_en_stringTemplate int = 1509\nconst hcltok_en_heredocTemplate int = 1523\nconst hcltok_en_bareTemplate int = 1534\nconst hcltok_en_identOnly int = 1545\nconst hcltok_en_main int = 1459\n\n//line scan_tokens.rl:16\n\nfunc scanTokens(data []byte, filename string, start hcl.Pos, mode scanMode) []Token {\n\tstripData := stripUTF8BOM(data)\n\tstart.Byte += len(data) - len(stripData)\n\tdata = stripData\n\n\tf := &tokenAccum{\n\t\tFilename:  filename,\n\t\tBytes:     data,\n\t\tPos:       start,\n\t\tStartByte: start.Byte,\n\t}\n\n//line scan_tokens.rl:305\n\n\t// Ragel state\n\tp := 0          // \"Pointer\" into data\n\tpe := len(data) // End-of-data \"pointer\"\n\tts := 0\n\tte := 0\n\tact := 0\n\teof := pe\n\tvar stack []int\n\tvar top int\n\n\tvar cs int // current state\n\tswitch mode {\n\tcase scanNormal:\n\t\tcs = hcltok_en_main\n\tcase scanTemplate:\n\t\tcs = hcltok_en_bareTemplate\n\tcase scanIdentOnly:\n\t\tcs = hcltok_en_identOnly\n\tdefault:\n\t\tpanic(\"invalid scanMode\")\n\t}\n\n\tbraces := 0\n\tvar retBraces []int              // stack of brace levels that cause us to use fret\n\tvar heredocs []heredocInProgress // stack of heredocs we're currently processing\n\n//line scan_tokens.rl:340\n\n\t// Make Go compiler happy\n\t_ = ts\n\t_ = te\n\t_ = act\n\t_ = eof\n\n\ttoken := func(ty TokenType) {\n\t\tf.emitToken(ty, ts, te)\n\t}\n\tselfToken := func() {\n\t\tb := data[ts:te]\n\t\tif len(b) != 1 {\n\t\t\t// should never happen\n\t\t\tpanic(\"selfToken only works for single-character tokens\")\n\t\t}\n\t\tf.emitToken(TokenType(b[0]), ts, te)\n\t}\n\n//line scan_tokens.go:4289\n\t{\n\t\ttop = 0\n\t\tts = 0\n\t\tte = 0\n\t\tact = 0\n\t}\n\n//line scan_tokens.go:4297\n\t{\n\t\tvar _klen int\n\t\tvar _trans int\n\t\tvar _acts int\n\t\tvar _nacts uint\n\t\tvar _keys int\n\t\tif p == pe {\n\t\t\tgoto _test_eof\n\t\t}\n\t\tif cs == 0 {\n\t\t\tgoto _out\n\t\t}\n\t_resume:\n\t\t_acts = int(_hcltok_from_state_actions[cs])\n\t\t_nacts = uint(_hcltok_actions[_acts])\n\t\t_acts++\n\t\tfor ; _nacts > 0; _nacts-- {\n\t\t\t_acts++\n\t\t\tswitch _hcltok_actions[_acts-1] {\n\t\t\tcase 3:\n//line NONE:1\n\t\t\t\tts = p\n\n//line scan_tokens.go:4320\n\t\t\t}\n\t\t}\n\n\t\t_keys = int(_hcltok_key_offsets[cs])\n\t\t_trans = int(_hcltok_index_offsets[cs])\n\n\t\t_klen = int(_hcltok_single_lengths[cs])\n\t\tif _klen > 0 {\n\t\t\t_lower := int(_keys)\n\t\t\tvar _mid int\n\t\t\t_upper := int(_keys + _klen - 1)\n\t\t\tfor {\n\t\t\t\tif _upper < _lower {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\t_mid = _lower + ((_upper - _lower) >> 1)\n\t\t\t\tswitch {\n\t\t\t\tcase data[p] < _hcltok_trans_keys[_mid]:\n\t\t\t\t\t_upper = _mid - 1\n\t\t\t\tcase data[p] > _hcltok_trans_keys[_mid]:\n\t\t\t\t\t_lower = _mid + 1\n\t\t\t\tdefault:\n\t\t\t\t\t_trans += int(_mid - int(_keys))\n\t\t\t\t\tgoto _match\n\t\t\t\t}\n\t\t\t}\n\t\t\t_keys += _klen\n\t\t\t_trans += _klen\n\t\t}\n\n\t\t_klen = int(_hcltok_range_lengths[cs])\n\t\tif _klen > 0 {\n\t\t\t_lower := int(_keys)\n\t\t\tvar _mid int\n\t\t\t_upper := int(_keys + (_klen << 1) - 2)\n\t\t\tfor {\n\t\t\t\tif _upper < _lower {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\t_mid = _lower + (((_upper - _lower) >> 1) & ^1)\n\t\t\t\tswitch {\n\t\t\t\tcase data[p] < _hcltok_trans_keys[_mid]:\n\t\t\t\t\t_upper = _mid - 2\n\t\t\t\tcase data[p] > _hcltok_trans_keys[_mid+1]:\n\t\t\t\t\t_lower = _mid + 2\n\t\t\t\tdefault:\n\t\t\t\t\t_trans += int((_mid - int(_keys)) >> 1)\n\t\t\t\t\tgoto _match\n\t\t\t\t}\n\t\t\t}\n\t\t\t_trans += _klen\n\t\t}\n\n\t_match:\n\t\t_trans = int(_hcltok_indicies[_trans])\n\t_eof_trans:\n\t\tcs = int(_hcltok_trans_targs[_trans])\n\n\t\tif _hcltok_trans_actions[_trans] == 0 {\n\t\t\tgoto _again\n\t\t}\n\n\t\t_acts = int(_hcltok_trans_actions[_trans])\n\t\t_nacts = uint(_hcltok_actions[_acts])\n\t\t_acts++\n\t\tfor ; _nacts > 0; _nacts-- {\n\t\t\t_acts++\n\t\t\tswitch _hcltok_actions[_acts-1] {\n\t\t\tcase 0:\n//line scan_tokens.rl:224\n\t\t\t\tp--\n\n\t\t\tcase 4:\n//line NONE:1\n\t\t\t\tte = p + 1\n\n\t\t\tcase 5:\n//line scan_tokens.rl:248\n\t\t\t\tact = 4\n\t\t\tcase 6:\n//line scan_tokens.rl:250\n\t\t\t\tact = 6\n\t\t\tcase 7:\n//line scan_tokens.rl:160\n\t\t\t\tte = p + 1\n\t\t\t\t{\n\t\t\t\t\ttoken(TokenTemplateInterp)\n\t\t\t\t\tbraces++\n\t\t\t\t\tretBraces = append(retBraces, braces)\n\t\t\t\t\tif len(heredocs) > 0 {\n\t\t\t\t\t\theredocs[len(heredocs)-1].StartOfLine = false\n\t\t\t\t\t}\n\t\t\t\t\t{\n\t\t\t\t\t\tstack = append(stack, 0)\n\t\t\t\t\t\tstack[top] = cs\n\t\t\t\t\t\ttop++\n\t\t\t\t\t\tcs = 1459\n\t\t\t\t\t\tgoto _again\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tcase 8:\n//line scan_tokens.rl:170\n\t\t\t\tte = p + 1\n\t\t\t\t{\n\t\t\t\t\ttoken(TokenTemplateControl)\n\t\t\t\t\tbraces++\n\t\t\t\t\tretBraces = append(retBraces, braces)\n\t\t\t\t\tif len(heredocs) > 0 {\n\t\t\t\t\t\theredocs[len(heredocs)-1].StartOfLine = false\n\t\t\t\t\t}\n\t\t\t\t\t{\n\t\t\t\t\t\tstack = append(stack, 0)\n\t\t\t\t\t\tstack[top] = cs\n\t\t\t\t\t\ttop++\n\t\t\t\t\t\tcs = 1459\n\t\t\t\t\t\tgoto _again\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tcase 9:\n//line scan_tokens.rl:84\n\t\t\t\tte = p + 1\n\t\t\t\t{\n\t\t\t\t\ttoken(TokenCQuote)\n\t\t\t\t\ttop--\n\t\t\t\t\tcs = stack[top]\n\t\t\t\t\t{\n\t\t\t\t\t\tstack = stack[:len(stack)-1]\n\t\t\t\t\t}\n\t\t\t\t\tgoto _again\n\n\t\t\t\t}\n\t\t\tcase 10:\n//line scan_tokens.rl:248\n\t\t\t\tte = p + 1\n\t\t\t\t{\n\t\t\t\t\ttoken(TokenQuotedLit)\n\t\t\t\t}\n\t\t\tcase 11:\n//line scan_tokens.rl:251\n\t\t\t\tte = p + 1\n\t\t\t\t{\n\t\t\t\t\ttoken(TokenBadUTF8)\n\t\t\t\t}\n\t\t\tcase 12:\n//line scan_tokens.rl:160\n\t\t\t\tte = p\n\t\t\t\tp--\n\t\t\t\t{\n\t\t\t\t\ttoken(TokenTemplateInterp)\n\t\t\t\t\tbraces++\n\t\t\t\t\tretBraces = append(retBraces, braces)\n\t\t\t\t\tif len(heredocs) > 0 {\n\t\t\t\t\t\theredocs[len(heredocs)-1].StartOfLine = false\n\t\t\t\t\t}\n\t\t\t\t\t{\n\t\t\t\t\t\tstack = append(stack, 0)\n\t\t\t\t\t\tstack[top] = cs\n\t\t\t\t\t\ttop++\n\t\t\t\t\t\tcs = 1459\n\t\t\t\t\t\tgoto _again\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tcase 13:\n//line scan_tokens.rl:170\n\t\t\t\tte = p\n\t\t\t\tp--\n\t\t\t\t{\n\t\t\t\t\ttoken(TokenTemplateControl)\n\t\t\t\t\tbraces++\n\t\t\t\t\tretBraces = append(retBraces, braces)\n\t\t\t\t\tif len(heredocs) > 0 {\n\t\t\t\t\t\theredocs[len(heredocs)-1].StartOfLine = false\n\t\t\t\t\t}\n\t\t\t\t\t{\n\t\t\t\t\t\tstack = append(stack, 0)\n\t\t\t\t\t\tstack[top] = cs\n\t\t\t\t\t\ttop++\n\t\t\t\t\t\tcs = 1459\n\t\t\t\t\t\tgoto _again\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tcase 14:\n//line scan_tokens.rl:248\n\t\t\t\tte = p\n\t\t\t\tp--\n\t\t\t\t{\n\t\t\t\t\ttoken(TokenQuotedLit)\n\t\t\t\t}\n\t\t\tcase 15:\n//line scan_tokens.rl:249\n\t\t\t\tte = p\n\t\t\t\tp--\n\t\t\t\t{\n\t\t\t\t\ttoken(TokenQuotedNewline)\n\t\t\t\t}\n\t\t\tcase 16:\n//line scan_tokens.rl:250\n\t\t\t\tte = p\n\t\t\t\tp--\n\t\t\t\t{\n\t\t\t\t\ttoken(TokenInvalid)\n\t\t\t\t}\n\t\t\tcase 17:\n//line scan_tokens.rl:251\n\t\t\t\tte = p\n\t\t\t\tp--\n\t\t\t\t{\n\t\t\t\t\ttoken(TokenBadUTF8)\n\t\t\t\t}\n\t\t\tcase 18:\n//line scan_tokens.rl:248\n\t\t\t\tp = (te) - 1\n\t\t\t\t{\n\t\t\t\t\ttoken(TokenQuotedLit)\n\t\t\t\t}\n\t\t\tcase 19:\n//line scan_tokens.rl:251\n\t\t\t\tp = (te) - 1\n\t\t\t\t{\n\t\t\t\t\ttoken(TokenBadUTF8)\n\t\t\t\t}\n\t\t\tcase 20:\n//line NONE:1\n\t\t\t\tswitch act {\n\t\t\t\tcase 4:\n\t\t\t\t\t{\n\t\t\t\t\t\tp = (te) - 1\n\t\t\t\t\t\ttoken(TokenQuotedLit)\n\t\t\t\t\t}\n\t\t\t\tcase 6:\n\t\t\t\t\t{\n\t\t\t\t\t\tp = (te) - 1\n\t\t\t\t\t\ttoken(TokenInvalid)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\tcase 21:\n//line scan_tokens.rl:148\n\t\t\t\tact = 11\n\t\t\tcase 22:\n//line scan_tokens.rl:259\n\t\t\t\tact = 12\n\t\t\tcase 23:\n//line scan_tokens.rl:160\n\t\t\t\tte = p + 1\n\t\t\t\t{\n\t\t\t\t\ttoken(TokenTemplateInterp)\n\t\t\t\t\tbraces++\n\t\t\t\t\tretBraces = append(retBraces, braces)\n\t\t\t\t\tif len(heredocs) > 0 {\n\t\t\t\t\t\theredocs[len(heredocs)-1].StartOfLine = false\n\t\t\t\t\t}\n\t\t\t\t\t{\n\t\t\t\t\t\tstack = append(stack, 0)\n\t\t\t\t\t\tstack[top] = cs\n\t\t\t\t\t\ttop++\n\t\t\t\t\t\tcs = 1459\n\t\t\t\t\t\tgoto _again\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tcase 24:\n//line scan_tokens.rl:170\n\t\t\t\tte = p + 1\n\t\t\t\t{\n\t\t\t\t\ttoken(TokenTemplateControl)\n\t\t\t\t\tbraces++\n\t\t\t\t\tretBraces = append(retBraces, braces)\n\t\t\t\t\tif len(heredocs) > 0 {\n\t\t\t\t\t\theredocs[len(heredocs)-1].StartOfLine = false\n\t\t\t\t\t}\n\t\t\t\t\t{\n\t\t\t\t\t\tstack = append(stack, 0)\n\t\t\t\t\t\tstack[top] = cs\n\t\t\t\t\t\ttop++\n\t\t\t\t\t\tcs = 1459\n\t\t\t\t\t\tgoto _again\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tcase 25:\n//line scan_tokens.rl:111\n\t\t\t\tte = p + 1\n\t\t\t\t{\n\t\t\t\t\t// This action is called specificially when a heredoc literal\n\t\t\t\t\t// ends with a newline character.\n\n\t\t\t\t\t// This might actually be our end marker.\n\t\t\t\t\ttopdoc := &heredocs[len(heredocs)-1]\n\t\t\t\t\tif topdoc.StartOfLine {\n\t\t\t\t\t\tmaybeMarker := bytes.TrimSpace(data[ts:te])\n\t\t\t\t\t\tif bytes.Equal(maybeMarker, topdoc.Marker) {\n\t\t\t\t\t\t\t// We actually emit two tokens here: the end-of-heredoc\n\t\t\t\t\t\t\t// marker first, and then separately the newline that\n\t\t\t\t\t\t\t// follows it. This then avoids issues with the closing\n\t\t\t\t\t\t\t// marker consuming a newline that would normally be used\n\t\t\t\t\t\t\t// to mark the end of an attribute definition.\n\t\t\t\t\t\t\t// We might have either a \\n sequence or an \\r\\n sequence\n\t\t\t\t\t\t\t// here, so we must handle both.\n\t\t\t\t\t\t\tnls := te - 1\n\t\t\t\t\t\t\tnle := te\n\t\t\t\t\t\t\tte--\n\t\t\t\t\t\t\tif data[te-1] == '\\r' {\n\t\t\t\t\t\t\t\t// back up one more byte\n\t\t\t\t\t\t\t\tnls--\n\t\t\t\t\t\t\t\tte--\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttoken(TokenCHeredoc)\n\t\t\t\t\t\t\tts = nls\n\t\t\t\t\t\t\tte = nle\n\t\t\t\t\t\t\ttoken(TokenNewline)\n\t\t\t\t\t\t\theredocs = heredocs[:len(heredocs)-1]\n\t\t\t\t\t\t\ttop--\n\t\t\t\t\t\t\tcs = stack[top]\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tstack = stack[:len(stack)-1]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tgoto _again\n\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\ttopdoc.StartOfLine = true\n\t\t\t\t\ttoken(TokenStringLit)\n\t\t\t\t}\n\t\t\tcase 26:\n//line scan_tokens.rl:259\n\t\t\t\tte = p + 1\n\t\t\t\t{\n\t\t\t\t\ttoken(TokenBadUTF8)\n\t\t\t\t}\n\t\t\tcase 27:\n//line scan_tokens.rl:160\n\t\t\t\tte = p\n\t\t\t\tp--\n\t\t\t\t{\n\t\t\t\t\ttoken(TokenTemplateInterp)\n\t\t\t\t\tbraces++\n\t\t\t\t\tretBraces = append(retBraces, braces)\n\t\t\t\t\tif len(heredocs) > 0 {\n\t\t\t\t\t\theredocs[len(heredocs)-1].StartOfLine = false\n\t\t\t\t\t}\n\t\t\t\t\t{\n\t\t\t\t\t\tstack = append(stack, 0)\n\t\t\t\t\t\tstack[top] = cs\n\t\t\t\t\t\ttop++\n\t\t\t\t\t\tcs = 1459\n\t\t\t\t\t\tgoto _again\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tcase 28:\n//line scan_tokens.rl:170\n\t\t\t\tte = p\n\t\t\t\tp--\n\t\t\t\t{\n\t\t\t\t\ttoken(TokenTemplateControl)\n\t\t\t\t\tbraces++\n\t\t\t\t\tretBraces = append(retBraces, braces)\n\t\t\t\t\tif len(heredocs) > 0 {\n\t\t\t\t\t\theredocs[len(heredocs)-1].StartOfLine = false\n\t\t\t\t\t}\n\t\t\t\t\t{\n\t\t\t\t\t\tstack = append(stack, 0)\n\t\t\t\t\t\tstack[top] = cs\n\t\t\t\t\t\ttop++\n\t\t\t\t\t\tcs = 1459\n\t\t\t\t\t\tgoto _again\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tcase 29:\n//line scan_tokens.rl:148\n\t\t\t\tte = p\n\t\t\t\tp--\n\t\t\t\t{\n\t\t\t\t\t// This action is called when a heredoc literal _doesn't_ end\n\t\t\t\t\t// with a newline character, e.g. because we're about to enter\n\t\t\t\t\t// an interpolation sequence.\n\t\t\t\t\theredocs[len(heredocs)-1].StartOfLine = false\n\t\t\t\t\ttoken(TokenStringLit)\n\t\t\t\t}\n\t\t\tcase 30:\n//line scan_tokens.rl:259\n\t\t\t\tte = p\n\t\t\t\tp--\n\t\t\t\t{\n\t\t\t\t\ttoken(TokenBadUTF8)\n\t\t\t\t}\n\t\t\tcase 31:\n//line scan_tokens.rl:148\n\t\t\t\tp = (te) - 1\n\t\t\t\t{\n\t\t\t\t\t// This action is called when a heredoc literal _doesn't_ end\n\t\t\t\t\t// with a newline character, e.g. because we're about to enter\n\t\t\t\t\t// an interpolation sequence.\n\t\t\t\t\theredocs[len(heredocs)-1].StartOfLine = false\n\t\t\t\t\ttoken(TokenStringLit)\n\t\t\t\t}\n\t\t\tcase 32:\n//line NONE:1\n\t\t\t\tswitch act {\n\t\t\t\tcase 0:\n\t\t\t\t\t{\n\t\t\t\t\t\tcs = 0\n\t\t\t\t\t\tgoto _again\n\t\t\t\t\t}\n\t\t\t\tcase 11:\n\t\t\t\t\t{\n\t\t\t\t\t\tp = (te) - 1\n\n\t\t\t\t\t\t// This action is called when a heredoc literal _doesn't_ end\n\t\t\t\t\t\t// with a newline character, e.g. because we're about to enter\n\t\t\t\t\t\t// an interpolation sequence.\n\t\t\t\t\t\theredocs[len(heredocs)-1].StartOfLine = false\n\t\t\t\t\t\ttoken(TokenStringLit)\n\t\t\t\t\t}\n\t\t\t\tcase 12:\n\t\t\t\t\t{\n\t\t\t\t\t\tp = (te) - 1\n\t\t\t\t\t\ttoken(TokenBadUTF8)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\tcase 33:\n//line scan_tokens.rl:156\n\t\t\t\tact = 15\n\t\t\tcase 34:\n//line scan_tokens.rl:266\n\t\t\t\tact = 16\n\t\t\tcase 35:\n//line scan_tokens.rl:160\n\t\t\t\tte = p + 1\n\t\t\t\t{\n\t\t\t\t\ttoken(TokenTemplateInterp)\n\t\t\t\t\tbraces++\n\t\t\t\t\tretBraces = append(retBraces, braces)\n\t\t\t\t\tif len(heredocs) > 0 {\n\t\t\t\t\t\theredocs[len(heredocs)-1].StartOfLine = false\n\t\t\t\t\t}\n\t\t\t\t\t{\n\t\t\t\t\t\tstack = append(stack, 0)\n\t\t\t\t\t\tstack[top] = cs\n\t\t\t\t\t\ttop++\n\t\t\t\t\t\tcs = 1459\n\t\t\t\t\t\tgoto _again\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tcase 36:\n//line scan_tokens.rl:170\n\t\t\t\tte = p + 1\n\t\t\t\t{\n\t\t\t\t\ttoken(TokenTemplateControl)\n\t\t\t\t\tbraces++\n\t\t\t\t\tretBraces = append(retBraces, braces)\n\t\t\t\t\tif len(heredocs) > 0 {\n\t\t\t\t\t\theredocs[len(heredocs)-1].StartOfLine = false\n\t\t\t\t\t}\n\t\t\t\t\t{\n\t\t\t\t\t\tstack = append(stack, 0)\n\t\t\t\t\t\tstack[top] = cs\n\t\t\t\t\t\ttop++\n\t\t\t\t\t\tcs = 1459\n\t\t\t\t\t\tgoto _again\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tcase 37:\n//line scan_tokens.rl:156\n\t\t\t\tte = p + 1\n\t\t\t\t{\n\t\t\t\t\ttoken(TokenStringLit)\n\t\t\t\t}\n\t\t\tcase 38:\n//line scan_tokens.rl:266\n\t\t\t\tte = p + 1\n\t\t\t\t{\n\t\t\t\t\ttoken(TokenBadUTF8)\n\t\t\t\t}\n\t\t\tcase 39:\n//line scan_tokens.rl:160\n\t\t\t\tte = p\n\t\t\t\tp--\n\t\t\t\t{\n\t\t\t\t\ttoken(TokenTemplateInterp)\n\t\t\t\t\tbraces++\n\t\t\t\t\tretBraces = append(retBraces, braces)\n\t\t\t\t\tif len(heredocs) > 0 {\n\t\t\t\t\t\theredocs[len(heredocs)-1].StartOfLine = false\n\t\t\t\t\t}\n\t\t\t\t\t{\n\t\t\t\t\t\tstack = append(stack, 0)\n\t\t\t\t\t\tstack[top] = cs\n\t\t\t\t\t\ttop++\n\t\t\t\t\t\tcs = 1459\n\t\t\t\t\t\tgoto _again\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tcase 40:\n//line scan_tokens.rl:170\n\t\t\t\tte = p\n\t\t\t\tp--\n\t\t\t\t{\n\t\t\t\t\ttoken(TokenTemplateControl)\n\t\t\t\t\tbraces++\n\t\t\t\t\tretBraces = append(retBraces, braces)\n\t\t\t\t\tif len(heredocs) > 0 {\n\t\t\t\t\t\theredocs[len(heredocs)-1].StartOfLine = false\n\t\t\t\t\t}\n\t\t\t\t\t{\n\t\t\t\t\t\tstack = append(stack, 0)\n\t\t\t\t\t\tstack[top] = cs\n\t\t\t\t\t\ttop++\n\t\t\t\t\t\tcs = 1459\n\t\t\t\t\t\tgoto _again\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tcase 41:\n//line scan_tokens.rl:156\n\t\t\t\tte = p\n\t\t\t\tp--\n\t\t\t\t{\n\t\t\t\t\ttoken(TokenStringLit)\n\t\t\t\t}\n\t\t\tcase 42:\n//line scan_tokens.rl:266\n\t\t\t\tte = p\n\t\t\t\tp--\n\t\t\t\t{\n\t\t\t\t\ttoken(TokenBadUTF8)\n\t\t\t\t}\n\t\t\tcase 43:\n//line scan_tokens.rl:156\n\t\t\t\tp = (te) - 1\n\t\t\t\t{\n\t\t\t\t\ttoken(TokenStringLit)\n\t\t\t\t}\n\t\t\tcase 44:\n//line NONE:1\n\t\t\t\tswitch act {\n\t\t\t\tcase 0:\n\t\t\t\t\t{\n\t\t\t\t\t\tcs = 0\n\t\t\t\t\t\tgoto _again\n\t\t\t\t\t}\n\t\t\t\tcase 15:\n\t\t\t\t\t{\n\t\t\t\t\t\tp = (te) - 1\n\n\t\t\t\t\t\ttoken(TokenStringLit)\n\t\t\t\t\t}\n\t\t\t\tcase 16:\n\t\t\t\t\t{\n\t\t\t\t\t\tp = (te) - 1\n\t\t\t\t\t\ttoken(TokenBadUTF8)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\tcase 45:\n//line scan_tokens.rl:270\n\t\t\t\tact = 17\n\t\t\tcase 46:\n//line scan_tokens.rl:271\n\t\t\t\tact = 18\n\t\t\tcase 47:\n//line scan_tokens.rl:271\n\t\t\t\tte = p + 1\n\t\t\t\t{\n\t\t\t\t\ttoken(TokenBadUTF8)\n\t\t\t\t}\n\t\t\tcase 48:\n//line scan_tokens.rl:272\n\t\t\t\tte = p + 1\n\t\t\t\t{\n\t\t\t\t\ttoken(TokenInvalid)\n\t\t\t\t}\n\t\t\tcase 49:\n//line scan_tokens.rl:270\n\t\t\t\tte = p\n\t\t\t\tp--\n\t\t\t\t{\n\t\t\t\t\ttoken(TokenIdent)\n\t\t\t\t}\n\t\t\tcase 50:\n//line scan_tokens.rl:271\n\t\t\t\tte = p\n\t\t\t\tp--\n\t\t\t\t{\n\t\t\t\t\ttoken(TokenBadUTF8)\n\t\t\t\t}\n\t\t\tcase 51:\n//line scan_tokens.rl:270\n\t\t\t\tp = (te) - 1\n\t\t\t\t{\n\t\t\t\t\ttoken(TokenIdent)\n\t\t\t\t}\n\t\t\tcase 52:\n//line scan_tokens.rl:271\n\t\t\t\tp = (te) - 1\n\t\t\t\t{\n\t\t\t\t\ttoken(TokenBadUTF8)\n\t\t\t\t}\n\t\t\tcase 53:\n//line NONE:1\n\t\t\t\tswitch act {\n\t\t\t\tcase 17:\n\t\t\t\t\t{\n\t\t\t\t\t\tp = (te) - 1\n\t\t\t\t\t\ttoken(TokenIdent)\n\t\t\t\t\t}\n\t\t\t\tcase 18:\n\t\t\t\t\t{\n\t\t\t\t\t\tp = (te) - 1\n\t\t\t\t\t\ttoken(TokenBadUTF8)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\tcase 54:\n//line scan_tokens.rl:278\n\t\t\t\tact = 22\n\t\t\tcase 55:\n//line scan_tokens.rl:301\n\t\t\t\tact = 39\n\t\t\tcase 56:\n//line scan_tokens.rl:280\n\t\t\t\tte = p + 1\n\t\t\t\t{\n\t\t\t\t\ttoken(TokenComment)\n\t\t\t\t}\n\t\t\tcase 57:\n//line scan_tokens.rl:281\n\t\t\t\tte = p + 1\n\t\t\t\t{\n\t\t\t\t\ttoken(TokenNewline)\n\t\t\t\t}\n\t\t\tcase 58:\n//line scan_tokens.rl:283\n\t\t\t\tte = p + 1\n\t\t\t\t{\n\t\t\t\t\ttoken(TokenEqualOp)\n\t\t\t\t}\n\t\t\tcase 59:\n//line scan_tokens.rl:284\n\t\t\t\tte = p + 1\n\t\t\t\t{\n\t\t\t\t\ttoken(TokenNotEqual)\n\t\t\t\t}\n\t\t\tcase 60:\n//line scan_tokens.rl:285\n\t\t\t\tte = p + 1\n\t\t\t\t{\n\t\t\t\t\ttoken(TokenGreaterThanEq)\n\t\t\t\t}\n\t\t\tcase 61:\n//line scan_tokens.rl:286\n\t\t\t\tte = p + 1\n\t\t\t\t{\n\t\t\t\t\ttoken(TokenLessThanEq)\n\t\t\t\t}\n\t\t\tcase 62:\n//line scan_tokens.rl:287\n\t\t\t\tte = p + 1\n\t\t\t\t{\n\t\t\t\t\ttoken(TokenAnd)\n\t\t\t\t}\n\t\t\tcase 63:\n//line scan_tokens.rl:288\n\t\t\t\tte = p + 1\n\t\t\t\t{\n\t\t\t\t\ttoken(TokenOr)\n\t\t\t\t}\n\t\t\tcase 64:\n//line scan_tokens.rl:289\n\t\t\t\tte = p + 1\n\t\t\t\t{\n\t\t\t\t\ttoken(TokenEllipsis)\n\t\t\t\t}\n\t\t\tcase 65:\n//line scan_tokens.rl:290\n\t\t\t\tte = p + 1\n\t\t\t\t{\n\t\t\t\t\ttoken(TokenFatArrow)\n\t\t\t\t}\n\t\t\tcase 66:\n//line scan_tokens.rl:291\n\t\t\t\tte = p + 1\n\t\t\t\t{\n\t\t\t\t\tselfToken()\n\t\t\t\t}\n\t\t\tcase 67:\n//line scan_tokens.rl:180\n\t\t\t\tte = p + 1\n\t\t\t\t{\n\t\t\t\t\ttoken(TokenOBrace)\n\t\t\t\t\tbraces++\n\t\t\t\t}\n\t\t\tcase 68:\n//line scan_tokens.rl:185\n\t\t\t\tte = p + 1\n\t\t\t\t{\n\t\t\t\t\tif len(retBraces) > 0 && retBraces[len(retBraces)-1] == braces {\n\t\t\t\t\t\ttoken(TokenTemplateSeqEnd)\n\t\t\t\t\t\tbraces--\n\t\t\t\t\t\tretBraces = retBraces[0 : len(retBraces)-1]\n\t\t\t\t\t\ttop--\n\t\t\t\t\t\tcs = stack[top]\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tstack = stack[:len(stack)-1]\n\t\t\t\t\t\t}\n\t\t\t\t\t\tgoto _again\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttoken(TokenCBrace)\n\t\t\t\t\t\tbraces--\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tcase 69:\n//line scan_tokens.rl:197\n\t\t\t\tte = p + 1\n\t\t\t\t{\n\t\t\t\t\t// Only consume from the retBraces stack and return if we are at\n\t\t\t\t\t// a suitable brace nesting level, otherwise things will get\n\t\t\t\t\t// confused. (Not entering this branch indicates a syntax error,\n\t\t\t\t\t// which we will catch in the parser.)\n\t\t\t\t\tif len(retBraces) > 0 && retBraces[len(retBraces)-1] == braces {\n\t\t\t\t\t\ttoken(TokenTemplateSeqEnd)\n\t\t\t\t\t\tbraces--\n\t\t\t\t\t\tretBraces = retBraces[0 : len(retBraces)-1]\n\t\t\t\t\t\ttop--\n\t\t\t\t\t\tcs = stack[top]\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tstack = stack[:len(stack)-1]\n\t\t\t\t\t\t}\n\t\t\t\t\t\tgoto _again\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// We intentionally generate a TokenTemplateSeqEnd here,\n\t\t\t\t\t\t// even though the user apparently wanted a brace, because\n\t\t\t\t\t\t// we want to allow the parser to catch the incorrect use\n\t\t\t\t\t\t// of a ~} to balance a generic opening brace, rather than\n\t\t\t\t\t\t// a template sequence.\n\t\t\t\t\t\ttoken(TokenTemplateSeqEnd)\n\t\t\t\t\t\tbraces--\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tcase 70:\n//line scan_tokens.rl:79\n\t\t\t\tte = p + 1\n\t\t\t\t{\n\t\t\t\t\ttoken(TokenOQuote)\n\t\t\t\t\t{\n\t\t\t\t\t\tstack = append(stack, 0)\n\t\t\t\t\t\tstack[top] = cs\n\t\t\t\t\t\ttop++\n\t\t\t\t\t\tcs = 1509\n\t\t\t\t\t\tgoto _again\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tcase 71:\n//line scan_tokens.rl:89\n\t\t\t\tte = p + 1\n\t\t\t\t{\n\t\t\t\t\ttoken(TokenOHeredoc)\n\t\t\t\t\t// the token is currently the whole heredoc introducer, like\n\t\t\t\t\t// <<EOT or <<-EOT, followed by a newline. We want to extract\n\t\t\t\t\t// just the \"EOT\" portion that we'll use as the closing marker.\n\n\t\t\t\t\tmarker := data[ts+2 : te-1]\n\t\t\t\t\tif marker[0] == '-' {\n\t\t\t\t\t\tmarker = marker[1:]\n\t\t\t\t\t}\n\t\t\t\t\tif marker[len(marker)-1] == '\\r' {\n\t\t\t\t\t\tmarker = marker[:len(marker)-1]\n\t\t\t\t\t}\n\n\t\t\t\t\theredocs = append(heredocs, heredocInProgress{\n\t\t\t\t\t\tMarker:      marker,\n\t\t\t\t\t\tStartOfLine: true,\n\t\t\t\t\t})\n\n\t\t\t\t\t{\n\t\t\t\t\t\tstack = append(stack, 0)\n\t\t\t\t\t\tstack[top] = cs\n\t\t\t\t\t\ttop++\n\t\t\t\t\t\tcs = 1523\n\t\t\t\t\t\tgoto _again\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tcase 72:\n//line scan_tokens.rl:301\n\t\t\t\tte = p + 1\n\t\t\t\t{\n\t\t\t\t\ttoken(TokenBadUTF8)\n\t\t\t\t}\n\t\t\tcase 73:\n//line scan_tokens.rl:302\n\t\t\t\tte = p + 1\n\t\t\t\t{\n\t\t\t\t\ttoken(TokenInvalid)\n\t\t\t\t}\n\t\t\tcase 74:\n//line scan_tokens.rl:276\n\t\t\t\tte = p\n\t\t\t\tp--\n\n\t\t\tcase 75:\n//line scan_tokens.rl:277\n\t\t\t\tte = p\n\t\t\t\tp--\n\t\t\t\t{\n\t\t\t\t\ttoken(TokenNumberLit)\n\t\t\t\t}\n\t\t\tcase 76:\n//line scan_tokens.rl:278\n\t\t\t\tte = p\n\t\t\t\tp--\n\t\t\t\t{\n\t\t\t\t\ttoken(TokenIdent)\n\t\t\t\t}\n\t\t\tcase 77:\n//line scan_tokens.rl:280\n\t\t\t\tte = p\n\t\t\t\tp--\n\t\t\t\t{\n\t\t\t\t\ttoken(TokenComment)\n\t\t\t\t}\n\t\t\tcase 78:\n//line scan_tokens.rl:291\n\t\t\t\tte = p\n\t\t\t\tp--\n\t\t\t\t{\n\t\t\t\t\tselfToken()\n\t\t\t\t}\n\t\t\tcase 79:\n//line scan_tokens.rl:301\n\t\t\t\tte = p\n\t\t\t\tp--\n\t\t\t\t{\n\t\t\t\t\ttoken(TokenBadUTF8)\n\t\t\t\t}\n\t\t\tcase 80:\n//line scan_tokens.rl:302\n\t\t\t\tte = p\n\t\t\t\tp--\n\t\t\t\t{\n\t\t\t\t\ttoken(TokenInvalid)\n\t\t\t\t}\n\t\t\tcase 81:\n//line scan_tokens.rl:277\n\t\t\t\tp = (te) - 1\n\t\t\t\t{\n\t\t\t\t\ttoken(TokenNumberLit)\n\t\t\t\t}\n\t\t\tcase 82:\n//line scan_tokens.rl:278\n\t\t\t\tp = (te) - 1\n\t\t\t\t{\n\t\t\t\t\ttoken(TokenIdent)\n\t\t\t\t}\n\t\t\tcase 83:\n//line scan_tokens.rl:291\n\t\t\t\tp = (te) - 1\n\t\t\t\t{\n\t\t\t\t\tselfToken()\n\t\t\t\t}\n\t\t\tcase 84:\n//line scan_tokens.rl:301\n\t\t\t\tp = (te) - 1\n\t\t\t\t{\n\t\t\t\t\ttoken(TokenBadUTF8)\n\t\t\t\t}\n\t\t\tcase 85:\n//line NONE:1\n\t\t\t\tswitch act {\n\t\t\t\tcase 22:\n\t\t\t\t\t{\n\t\t\t\t\t\tp = (te) - 1\n\t\t\t\t\t\ttoken(TokenIdent)\n\t\t\t\t\t}\n\t\t\t\tcase 39:\n\t\t\t\t\t{\n\t\t\t\t\t\tp = (te) - 1\n\t\t\t\t\t\ttoken(TokenBadUTF8)\n\t\t\t\t\t}\n\t\t\t\t}\n\n//line scan_tokens.go:5055\n\t\t\t}\n\t\t}\n\n\t_again:\n\t\t_acts = int(_hcltok_to_state_actions[cs])\n\t\t_nacts = uint(_hcltok_actions[_acts])\n\t\t_acts++\n\t\tfor ; _nacts > 0; _nacts-- {\n\t\t\t_acts++\n\t\t\tswitch _hcltok_actions[_acts-1] {\n\t\t\tcase 1:\n//line NONE:1\n\t\t\t\tts = 0\n\n\t\t\tcase 2:\n//line NONE:1\n\t\t\t\tact = 0\n\n//line scan_tokens.go:5073\n\t\t\t}\n\t\t}\n\n\t\tif cs == 0 {\n\t\t\tgoto _out\n\t\t}\n\t\tp++\n\t\tif p != pe {\n\t\t\tgoto _resume\n\t\t}\n\t_test_eof:\n\t\t{\n\t\t}\n\t\tif p == eof {\n\t\t\tif _hcltok_eof_trans[cs] > 0 {\n\t\t\t\t_trans = int(_hcltok_eof_trans[cs] - 1)\n\t\t\t\tgoto _eof_trans\n\t\t\t}\n\t\t}\n\n\t_out:\n\t\t{\n\t\t}\n\t}\n\n//line scan_tokens.rl:363\n\n\t// If we fall out here without being in a final state then we've\n\t// encountered something that the scanner can't match, which we'll\n\t// deal with as an invalid.\n\tif cs < hcltok_first_final {\n\t\tif mode == scanTemplate && len(stack) == 0 {\n\t\t\t// If we're scanning a bare template then any straggling\n\t\t\t// top-level stuff is actually literal string, rather than\n\t\t\t// invalid. This handles the case where the template ends\n\t\t\t// with a single \"$\" or \"%\", which trips us up because we\n\t\t\t// want to see another character to decide if it's a sequence\n\t\t\t// or an escape.\n\t\t\tf.emitToken(TokenStringLit, ts, len(data))\n\t\t} else {\n\t\t\tf.emitToken(TokenInvalid, ts, len(data))\n\t\t}\n\t}\n\n\t// We always emit a synthetic EOF token at the end, since it gives the\n\t// parser position information for an \"unexpected EOF\" diagnostic.\n\tf.emitToken(TokenEOF, len(data), len(data))\n\n\treturn f.Tokens\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcl/hclsyntax/structure.go",
    "content": "package hclsyntax\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n\n\t\"github.com/hashicorp/hcl2/hcl\"\n)\n\n// AsHCLBlock returns the block data expressed as a *hcl.Block.\nfunc (b *Block) AsHCLBlock() *hcl.Block {\n\tif b == nil {\n\t\treturn nil\n\t}\n\n\tlastHeaderRange := b.TypeRange\n\tif len(b.LabelRanges) > 0 {\n\t\tlastHeaderRange = b.LabelRanges[len(b.LabelRanges)-1]\n\t}\n\n\treturn &hcl.Block{\n\t\tType:   b.Type,\n\t\tLabels: b.Labels,\n\t\tBody:   b.Body,\n\n\t\tDefRange:    hcl.RangeBetween(b.TypeRange, lastHeaderRange),\n\t\tTypeRange:   b.TypeRange,\n\t\tLabelRanges: b.LabelRanges,\n\t}\n}\n\n// Body is the implementation of hcl.Body for the HCL native syntax.\ntype Body struct {\n\tAttributes Attributes\n\tBlocks     Blocks\n\n\t// These are used with PartialContent to produce a \"remaining items\"\n\t// body to return. They are nil on all bodies fresh out of the parser.\n\thiddenAttrs  map[string]struct{}\n\thiddenBlocks map[string]struct{}\n\n\tSrcRange hcl.Range\n\tEndRange hcl.Range // Final token of the body, for reporting missing items\n}\n\n// Assert that *Body implements hcl.Body\nvar assertBodyImplBody hcl.Body = &Body{}\n\nfunc (b *Body) walkChildNodes(w internalWalkFunc) {\n\tw(b.Attributes)\n\tw(b.Blocks)\n}\n\nfunc (b *Body) Range() hcl.Range {\n\treturn b.SrcRange\n}\n\nfunc (b *Body) Content(schema *hcl.BodySchema) (*hcl.BodyContent, hcl.Diagnostics) {\n\tcontent, remainHCL, diags := b.PartialContent(schema)\n\n\t// No we'll see if anything actually remains, to produce errors about\n\t// extraneous items.\n\tremain := remainHCL.(*Body)\n\n\tfor name, attr := range b.Attributes {\n\t\tif _, hidden := remain.hiddenAttrs[name]; !hidden {\n\t\t\tvar suggestions []string\n\t\t\tfor _, attrS := range schema.Attributes {\n\t\t\t\tif _, defined := content.Attributes[attrS.Name]; defined {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tsuggestions = append(suggestions, attrS.Name)\n\t\t\t}\n\t\t\tsuggestion := nameSuggestion(name, suggestions)\n\t\t\tif suggestion != \"\" {\n\t\t\t\tsuggestion = fmt.Sprintf(\" Did you mean %q?\", suggestion)\n\t\t\t} else {\n\t\t\t\t// Is there a block of the same name?\n\t\t\t\tfor _, blockS := range schema.Blocks {\n\t\t\t\t\tif blockS.Type == name {\n\t\t\t\t\t\tsuggestion = fmt.Sprintf(\" Did you mean to define a block of type %q?\", name)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Unsupported argument\",\n\t\t\t\tDetail:   fmt.Sprintf(\"An argument named %q is not expected here.%s\", name, suggestion),\n\t\t\t\tSubject:  &attr.NameRange,\n\t\t\t})\n\t\t}\n\t}\n\n\tfor _, block := range b.Blocks {\n\t\tblockTy := block.Type\n\t\tif _, hidden := remain.hiddenBlocks[blockTy]; !hidden {\n\t\t\tvar suggestions []string\n\t\t\tfor _, blockS := range schema.Blocks {\n\t\t\t\tsuggestions = append(suggestions, blockS.Type)\n\t\t\t}\n\t\t\tsuggestion := nameSuggestion(blockTy, suggestions)\n\t\t\tif suggestion != \"\" {\n\t\t\t\tsuggestion = fmt.Sprintf(\" Did you mean %q?\", suggestion)\n\t\t\t} else {\n\t\t\t\t// Is there an attribute of the same name?\n\t\t\t\tfor _, attrS := range schema.Attributes {\n\t\t\t\t\tif attrS.Name == blockTy {\n\t\t\t\t\t\tsuggestion = fmt.Sprintf(\" Did you mean to define argument %q? If so, use the equals sign to assign it a value.\", blockTy)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Unsupported block type\",\n\t\t\t\tDetail:   fmt.Sprintf(\"Blocks of type %q are not expected here.%s\", blockTy, suggestion),\n\t\t\t\tSubject:  &block.TypeRange,\n\t\t\t})\n\t\t}\n\t}\n\n\treturn content, diags\n}\n\nfunc (b *Body) PartialContent(schema *hcl.BodySchema) (*hcl.BodyContent, hcl.Body, hcl.Diagnostics) {\n\tattrs := make(hcl.Attributes)\n\tvar blocks hcl.Blocks\n\tvar diags hcl.Diagnostics\n\thiddenAttrs := make(map[string]struct{})\n\thiddenBlocks := make(map[string]struct{})\n\n\tif b.hiddenAttrs != nil {\n\t\tfor k, v := range b.hiddenAttrs {\n\t\t\thiddenAttrs[k] = v\n\t\t}\n\t}\n\tif b.hiddenBlocks != nil {\n\t\tfor k, v := range b.hiddenBlocks {\n\t\t\thiddenBlocks[k] = v\n\t\t}\n\t}\n\n\tfor _, attrS := range schema.Attributes {\n\t\tname := attrS.Name\n\t\tattr, exists := b.Attributes[name]\n\t\t_, hidden := hiddenAttrs[name]\n\t\tif hidden || !exists {\n\t\t\tif attrS.Required {\n\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\tSummary:  \"Missing required argument\",\n\t\t\t\t\tDetail:   fmt.Sprintf(\"The argument %q is required, but no definition was found.\", attrS.Name),\n\t\t\t\t\tSubject:  b.MissingItemRange().Ptr(),\n\t\t\t\t})\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\thiddenAttrs[name] = struct{}{}\n\t\tattrs[name] = attr.AsHCLAttribute()\n\t}\n\n\tblocksWanted := make(map[string]hcl.BlockHeaderSchema)\n\tfor _, blockS := range schema.Blocks {\n\t\tblocksWanted[blockS.Type] = blockS\n\t}\n\n\tfor _, block := range b.Blocks {\n\t\tif _, hidden := hiddenBlocks[block.Type]; hidden {\n\t\t\tcontinue\n\t\t}\n\t\tblockS, wanted := blocksWanted[block.Type]\n\t\tif !wanted {\n\t\t\tcontinue\n\t\t}\n\n\t\tif len(block.Labels) > len(blockS.LabelNames) {\n\t\t\tname := block.Type\n\t\t\tif len(blockS.LabelNames) == 0 {\n\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\tSummary:  fmt.Sprintf(\"Extraneous label for %s\", name),\n\t\t\t\t\tDetail: fmt.Sprintf(\n\t\t\t\t\t\t\"No labels are expected for %s blocks.\", name,\n\t\t\t\t\t),\n\t\t\t\t\tSubject: block.LabelRanges[0].Ptr(),\n\t\t\t\t\tContext: hcl.RangeBetween(block.TypeRange, block.OpenBraceRange).Ptr(),\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\tSummary:  fmt.Sprintf(\"Extraneous label for %s\", name),\n\t\t\t\t\tDetail: fmt.Sprintf(\n\t\t\t\t\t\t\"Only %d labels (%s) are expected for %s blocks.\",\n\t\t\t\t\t\tlen(blockS.LabelNames), strings.Join(blockS.LabelNames, \", \"), name,\n\t\t\t\t\t),\n\t\t\t\t\tSubject: block.LabelRanges[len(blockS.LabelNames)].Ptr(),\n\t\t\t\t\tContext: hcl.RangeBetween(block.TypeRange, block.OpenBraceRange).Ptr(),\n\t\t\t\t})\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\tif len(block.Labels) < len(blockS.LabelNames) {\n\t\t\tname := block.Type\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  fmt.Sprintf(\"Missing %s for %s\", blockS.LabelNames[len(block.Labels)], name),\n\t\t\t\tDetail: fmt.Sprintf(\n\t\t\t\t\t\"All %s blocks must have %d labels (%s).\",\n\t\t\t\t\tname, len(blockS.LabelNames), strings.Join(blockS.LabelNames, \", \"),\n\t\t\t\t),\n\t\t\t\tSubject: &block.OpenBraceRange,\n\t\t\t\tContext: hcl.RangeBetween(block.TypeRange, block.OpenBraceRange).Ptr(),\n\t\t\t})\n\t\t\tcontinue\n\t\t}\n\n\t\tblocks = append(blocks, block.AsHCLBlock())\n\t}\n\n\t// We hide blocks only after we've processed all of them, since otherwise\n\t// we can't process more than one of the same type.\n\tfor _, blockS := range schema.Blocks {\n\t\thiddenBlocks[blockS.Type] = struct{}{}\n\t}\n\n\tremain := &Body{\n\t\tAttributes: b.Attributes,\n\t\tBlocks:     b.Blocks,\n\n\t\thiddenAttrs:  hiddenAttrs,\n\t\thiddenBlocks: hiddenBlocks,\n\n\t\tSrcRange: b.SrcRange,\n\t\tEndRange: b.EndRange,\n\t}\n\n\treturn &hcl.BodyContent{\n\t\tAttributes: attrs,\n\t\tBlocks:     blocks,\n\n\t\tMissingItemRange: b.MissingItemRange(),\n\t}, remain, diags\n}\n\nfunc (b *Body) JustAttributes() (hcl.Attributes, hcl.Diagnostics) {\n\tattrs := make(hcl.Attributes)\n\tvar diags hcl.Diagnostics\n\n\tif len(b.Blocks) > 0 {\n\t\texample := b.Blocks[0]\n\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  fmt.Sprintf(\"Unexpected %q block\", example.Type),\n\t\t\tDetail:   \"Blocks are not allowed here.\",\n\t\t\tSubject:  &example.TypeRange,\n\t\t})\n\t\t// we will continue processing anyway, and return the attributes\n\t\t// we are able to find so that certain analyses can still be done\n\t\t// in the face of errors.\n\t}\n\n\tif b.Attributes == nil {\n\t\treturn attrs, diags\n\t}\n\n\tfor name, attr := range b.Attributes {\n\t\tif _, hidden := b.hiddenAttrs[name]; hidden {\n\t\t\tcontinue\n\t\t}\n\t\tattrs[name] = attr.AsHCLAttribute()\n\t}\n\n\treturn attrs, diags\n}\n\nfunc (b *Body) MissingItemRange() hcl.Range {\n\treturn hcl.Range{\n\t\tFilename: b.SrcRange.Filename,\n\t\tStart:    b.SrcRange.Start,\n\t\tEnd:      b.SrcRange.Start,\n\t}\n}\n\n// Attributes is the collection of attribute definitions within a body.\ntype Attributes map[string]*Attribute\n\nfunc (a Attributes) walkChildNodes(w internalWalkFunc) {\n\tfor _, attr := range a {\n\t\tw(attr)\n\t}\n}\n\n// Range returns the range of some arbitrary point within the set of\n// attributes, or an invalid range if there are no attributes.\n//\n// This is provided only to complete the Node interface, but has no practical\n// use.\nfunc (a Attributes) Range() hcl.Range {\n\t// An attributes doesn't really have a useful range to report, since\n\t// it's just a grouping construct. So we'll arbitrarily take the\n\t// range of one of the attributes, or produce an invalid range if we have\n\t// none. In practice, there's little reason to ask for the range of\n\t// an Attributes.\n\tfor _, attr := range a {\n\t\treturn attr.Range()\n\t}\n\treturn hcl.Range{\n\t\tFilename: \"<unknown>\",\n\t}\n}\n\n// Attribute represents a single attribute definition within a body.\ntype Attribute struct {\n\tName string\n\tExpr Expression\n\n\tSrcRange    hcl.Range\n\tNameRange   hcl.Range\n\tEqualsRange hcl.Range\n}\n\nfunc (a *Attribute) walkChildNodes(w internalWalkFunc) {\n\tw(a.Expr)\n}\n\nfunc (a *Attribute) Range() hcl.Range {\n\treturn a.SrcRange\n}\n\n// AsHCLAttribute returns the block data expressed as a *hcl.Attribute.\nfunc (a *Attribute) AsHCLAttribute() *hcl.Attribute {\n\tif a == nil {\n\t\treturn nil\n\t}\n\treturn &hcl.Attribute{\n\t\tName: a.Name,\n\t\tExpr: a.Expr,\n\n\t\tRange:     a.SrcRange,\n\t\tNameRange: a.NameRange,\n\t}\n}\n\n// Blocks is the list of nested blocks within a body.\ntype Blocks []*Block\n\nfunc (bs Blocks) walkChildNodes(w internalWalkFunc) {\n\tfor _, block := range bs {\n\t\tw(block)\n\t}\n}\n\n// Range returns the range of some arbitrary point within the list of\n// blocks, or an invalid range if there are no blocks.\n//\n// This is provided only to complete the Node interface, but has no practical\n// use.\nfunc (bs Blocks) Range() hcl.Range {\n\tif len(bs) > 0 {\n\t\treturn bs[0].Range()\n\t}\n\treturn hcl.Range{\n\t\tFilename: \"<unknown>\",\n\t}\n}\n\n// Block represents a nested block structure\ntype Block struct {\n\tType   string\n\tLabels []string\n\tBody   *Body\n\n\tTypeRange       hcl.Range\n\tLabelRanges     []hcl.Range\n\tOpenBraceRange  hcl.Range\n\tCloseBraceRange hcl.Range\n}\n\nfunc (b *Block) walkChildNodes(w internalWalkFunc) {\n\tw(b.Body)\n}\n\nfunc (b *Block) Range() hcl.Range {\n\treturn hcl.RangeBetween(b.TypeRange, b.CloseBraceRange)\n}\n\nfunc (b *Block) DefRange() hcl.Range {\n\treturn hcl.RangeBetween(b.TypeRange, b.OpenBraceRange)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcl/hclsyntax/structure_at_pos.go",
    "content": "package hclsyntax\n\nimport (\n\t\"github.com/hashicorp/hcl2/hcl\"\n)\n\n// -----------------------------------------------------------------------------\n// The methods in this file are all optional extension methods that serve to\n// implement the methods of the same name on *hcl.File when its root body\n// is provided by this package.\n// -----------------------------------------------------------------------------\n\n// BlocksAtPos implements the method of the same name for an *hcl.File that\n// is backed by a *Body.\nfunc (b *Body) BlocksAtPos(pos hcl.Pos) []*hcl.Block {\n\tlist, _ := b.blocksAtPos(pos, true)\n\treturn list\n}\n\n// InnermostBlockAtPos implements the method of the same name for an *hcl.File\n// that is backed by a *Body.\nfunc (b *Body) InnermostBlockAtPos(pos hcl.Pos) *hcl.Block {\n\t_, innermost := b.blocksAtPos(pos, false)\n\treturn innermost.AsHCLBlock()\n}\n\n// OutermostBlockAtPos implements the method of the same name for an *hcl.File\n// that is backed by a *Body.\nfunc (b *Body) OutermostBlockAtPos(pos hcl.Pos) *hcl.Block {\n\treturn b.outermostBlockAtPos(pos).AsHCLBlock()\n}\n\n// blocksAtPos is the internal engine of both BlocksAtPos and\n// InnermostBlockAtPos, which both need to do the same logic but return a\n// differently-shaped result.\n//\n// list is nil if makeList is false, avoiding an allocation. Innermost is\n// always set, and if the returned list is non-nil it will always match the\n// final element from that list.\nfunc (b *Body) blocksAtPos(pos hcl.Pos, makeList bool) (list []*hcl.Block, innermost *Block) {\n\tcurrent := b\n\nBlocks:\n\tfor current != nil {\n\t\tfor _, block := range current.Blocks {\n\t\t\twholeRange := hcl.RangeBetween(block.TypeRange, block.CloseBraceRange)\n\t\t\tif wholeRange.ContainsPos(pos) {\n\t\t\t\tinnermost = block\n\t\t\t\tif makeList {\n\t\t\t\t\tlist = append(list, innermost.AsHCLBlock())\n\t\t\t\t}\n\t\t\t\tcurrent = block.Body\n\t\t\t\tcontinue Blocks\n\t\t\t}\n\t\t}\n\n\t\t// If we fall out here then none of the current body's nested blocks\n\t\t// contain the position we are looking for, and so we're done.\n\t\tbreak\n\t}\n\n\treturn\n}\n\n// outermostBlockAtPos is the internal version of OutermostBlockAtPos that\n// returns a hclsyntax.Block rather than an hcl.Block, allowing for further\n// analysis if necessary.\nfunc (b *Body) outermostBlockAtPos(pos hcl.Pos) *Block {\n\t// This is similar to blocksAtPos, but simpler because we know it only\n\t// ever needs to search the first level of nested blocks.\n\n\tfor _, block := range b.Blocks {\n\t\twholeRange := hcl.RangeBetween(block.TypeRange, block.CloseBraceRange)\n\t\tif wholeRange.ContainsPos(pos) {\n\t\t\treturn block\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// AttributeAtPos implements the method of the same name for an *hcl.File\n// that is backed by a *Body.\nfunc (b *Body) AttributeAtPos(pos hcl.Pos) *hcl.Attribute {\n\treturn b.attributeAtPos(pos).AsHCLAttribute()\n}\n\n// attributeAtPos is the internal version of AttributeAtPos that returns a\n// hclsyntax.Block rather than an hcl.Block, allowing for further analysis if\n// necessary.\nfunc (b *Body) attributeAtPos(pos hcl.Pos) *Attribute {\n\tsearchBody := b\n\t_, block := b.blocksAtPos(pos, false)\n\tif block != nil {\n\t\tsearchBody = block.Body\n\t}\n\n\tfor _, attr := range searchBody.Attributes {\n\t\tif attr.SrcRange.ContainsPos(pos) {\n\t\t\treturn attr\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// OutermostExprAtPos implements the method of the same name for an *hcl.File\n// that is backed by a *Body.\nfunc (b *Body) OutermostExprAtPos(pos hcl.Pos) hcl.Expression {\n\tattr := b.attributeAtPos(pos)\n\tif attr == nil {\n\t\treturn nil\n\t}\n\tif !attr.Expr.Range().ContainsPos(pos) {\n\t\treturn nil\n\t}\n\treturn attr.Expr\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcl/hclsyntax/token.go",
    "content": "package hclsyntax\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\n\t\"github.com/apparentlymart/go-textseg/textseg\"\n\t\"github.com/hashicorp/hcl2/hcl\"\n)\n\n// Token represents a sequence of bytes from some HCL code that has been\n// tagged with a type and its range within the source file.\ntype Token struct {\n\tType  TokenType\n\tBytes []byte\n\tRange hcl.Range\n}\n\n// Tokens is a slice of Token.\ntype Tokens []Token\n\n// TokenType is an enumeration used for the Type field on Token.\ntype TokenType rune\n\nconst (\n\t// Single-character tokens are represented by their own character, for\n\t// convenience in producing these within the scanner. However, the values\n\t// are otherwise arbitrary and just intended to be mnemonic for humans\n\t// who might see them in debug output.\n\n\tTokenOBrace   TokenType = '{'\n\tTokenCBrace   TokenType = '}'\n\tTokenOBrack   TokenType = '['\n\tTokenCBrack   TokenType = ']'\n\tTokenOParen   TokenType = '('\n\tTokenCParen   TokenType = ')'\n\tTokenOQuote   TokenType = '«'\n\tTokenCQuote   TokenType = '»'\n\tTokenOHeredoc TokenType = 'H'\n\tTokenCHeredoc TokenType = 'h'\n\n\tTokenStar    TokenType = '*'\n\tTokenSlash   TokenType = '/'\n\tTokenPlus    TokenType = '+'\n\tTokenMinus   TokenType = '-'\n\tTokenPercent TokenType = '%'\n\n\tTokenEqual         TokenType = '='\n\tTokenEqualOp       TokenType = '≔'\n\tTokenNotEqual      TokenType = '≠'\n\tTokenLessThan      TokenType = '<'\n\tTokenLessThanEq    TokenType = '≤'\n\tTokenGreaterThan   TokenType = '>'\n\tTokenGreaterThanEq TokenType = '≥'\n\n\tTokenAnd  TokenType = '∧'\n\tTokenOr   TokenType = '∨'\n\tTokenBang TokenType = '!'\n\n\tTokenDot   TokenType = '.'\n\tTokenComma TokenType = ','\n\n\tTokenEllipsis TokenType = '…'\n\tTokenFatArrow TokenType = '⇒'\n\n\tTokenQuestion TokenType = '?'\n\tTokenColon    TokenType = ':'\n\n\tTokenTemplateInterp  TokenType = '∫'\n\tTokenTemplateControl TokenType = 'λ'\n\tTokenTemplateSeqEnd  TokenType = '∎'\n\n\tTokenQuotedLit TokenType = 'Q' // might contain backslash escapes\n\tTokenStringLit TokenType = 'S' // cannot contain backslash escapes\n\tTokenNumberLit TokenType = 'N'\n\tTokenIdent     TokenType = 'I'\n\n\tTokenComment TokenType = 'C'\n\n\tTokenNewline TokenType = '\\n'\n\tTokenEOF     TokenType = '␄'\n\n\t// The rest are not used in the language but recognized by the scanner so\n\t// we can generate good diagnostics in the parser when users try to write\n\t// things that might work in other languages they are familiar with, or\n\t// simply make incorrect assumptions about the HCL language.\n\n\tTokenBitwiseAnd    TokenType = '&'\n\tTokenBitwiseOr     TokenType = '|'\n\tTokenBitwiseNot    TokenType = '~'\n\tTokenBitwiseXor    TokenType = '^'\n\tTokenStarStar      TokenType = '➚'\n\tTokenApostrophe    TokenType = '\\''\n\tTokenBacktick      TokenType = '`'\n\tTokenSemicolon     TokenType = ';'\n\tTokenTabs          TokenType = '␉'\n\tTokenInvalid       TokenType = '�'\n\tTokenBadUTF8       TokenType = '💩'\n\tTokenQuotedNewline TokenType = '␤'\n\n\t// TokenNil is a placeholder for when a token is required but none is\n\t// available, e.g. when reporting errors. The scanner will never produce\n\t// this as part of a token stream.\n\tTokenNil TokenType = '\\x00'\n)\n\nfunc (t TokenType) GoString() string {\n\treturn fmt.Sprintf(\"hclsyntax.%s\", t.String())\n}\n\ntype scanMode int\n\nconst (\n\tscanNormal scanMode = iota\n\tscanTemplate\n\tscanIdentOnly\n)\n\ntype tokenAccum struct {\n\tFilename  string\n\tBytes     []byte\n\tPos       hcl.Pos\n\tTokens    []Token\n\tStartByte int\n}\n\nfunc (f *tokenAccum) emitToken(ty TokenType, startOfs, endOfs int) {\n\t// Walk through our buffer to figure out how much we need to adjust\n\t// the start pos to get our end pos.\n\n\tstart := f.Pos\n\tstart.Column += startOfs + f.StartByte - f.Pos.Byte // Safe because only ASCII spaces can be in the offset\n\tstart.Byte = startOfs + f.StartByte\n\n\tend := start\n\tend.Byte = endOfs + f.StartByte\n\tb := f.Bytes[startOfs:endOfs]\n\tfor len(b) > 0 {\n\t\tadvance, seq, _ := textseg.ScanGraphemeClusters(b, true)\n\t\tif (len(seq) == 1 && seq[0] == '\\n') || (len(seq) == 2 && seq[0] == '\\r' && seq[1] == '\\n') {\n\t\t\tend.Line++\n\t\t\tend.Column = 1\n\t\t} else {\n\t\t\tend.Column++\n\t\t}\n\t\tb = b[advance:]\n\t}\n\n\tf.Pos = end\n\n\tf.Tokens = append(f.Tokens, Token{\n\t\tType:  ty,\n\t\tBytes: f.Bytes[startOfs:endOfs],\n\t\tRange: hcl.Range{\n\t\t\tFilename: f.Filename,\n\t\t\tStart:    start,\n\t\t\tEnd:      end,\n\t\t},\n\t})\n}\n\ntype heredocInProgress struct {\n\tMarker      []byte\n\tStartOfLine bool\n}\n\nfunc tokenOpensFlushHeredoc(tok Token) bool {\n\tif tok.Type != TokenOHeredoc {\n\t\treturn false\n\t}\n\treturn bytes.HasPrefix(tok.Bytes, []byte{'<', '<', '-'})\n}\n\n// checkInvalidTokens does a simple pass across the given tokens and generates\n// diagnostics for tokens that should _never_ appear in HCL source. This\n// is intended to avoid the need for the parser to have special support\n// for them all over.\n//\n// Returns a diagnostics with no errors if everything seems acceptable.\n// Otherwise, returns zero or more error diagnostics, though tries to limit\n// repetition of the same information.\nfunc checkInvalidTokens(tokens Tokens) hcl.Diagnostics {\n\tvar diags hcl.Diagnostics\n\n\ttoldBitwise := 0\n\ttoldExponent := 0\n\ttoldBacktick := 0\n\ttoldApostrophe := 0\n\ttoldSemicolon := 0\n\ttoldTabs := 0\n\ttoldBadUTF8 := 0\n\n\tfor _, tok := range tokens {\n\t\t// copy token so it's safe to point to it\n\t\ttok := tok\n\n\t\tswitch tok.Type {\n\t\tcase TokenBitwiseAnd, TokenBitwiseOr, TokenBitwiseXor, TokenBitwiseNot:\n\t\t\tif toldBitwise < 4 {\n\t\t\t\tvar suggestion string\n\t\t\t\tswitch tok.Type {\n\t\t\t\tcase TokenBitwiseAnd:\n\t\t\t\t\tsuggestion = \" Did you mean boolean AND (\\\"&&\\\")?\"\n\t\t\t\tcase TokenBitwiseOr:\n\t\t\t\t\tsuggestion = \" Did you mean boolean OR (\\\"&&\\\")?\"\n\t\t\t\tcase TokenBitwiseNot:\n\t\t\t\t\tsuggestion = \" Did you mean boolean NOT (\\\"!\\\")?\"\n\t\t\t\t}\n\n\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\tSummary:  \"Unsupported operator\",\n\t\t\t\t\tDetail:   fmt.Sprintf(\"Bitwise operators are not supported.%s\", suggestion),\n\t\t\t\t\tSubject:  &tok.Range,\n\t\t\t\t})\n\t\t\t\ttoldBitwise++\n\t\t\t}\n\t\tcase TokenStarStar:\n\t\t\tif toldExponent < 1 {\n\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\tSummary:  \"Unsupported operator\",\n\t\t\t\t\tDetail:   \"\\\"**\\\" is not a supported operator. Exponentiation is not supported as an operator.\",\n\t\t\t\t\tSubject:  &tok.Range,\n\t\t\t\t})\n\n\t\t\t\ttoldExponent++\n\t\t\t}\n\t\tcase TokenBacktick:\n\t\t\t// Only report for alternating (even) backticks, so we won't report both start and ends of the same\n\t\t\t// backtick-quoted string.\n\t\t\tif (toldBacktick % 2) == 0 {\n\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\tSummary:  \"Invalid character\",\n\t\t\t\t\tDetail:   \"The \\\"`\\\" character is not valid. To create a multi-line string, use the \\\"heredoc\\\" syntax, like \\\"<<EOT\\\".\",\n\t\t\t\t\tSubject:  &tok.Range,\n\t\t\t\t})\n\t\t\t}\n\t\t\tif toldBacktick <= 2 {\n\t\t\t\ttoldBacktick++\n\t\t\t}\n\t\tcase TokenApostrophe:\n\t\t\tif (toldApostrophe % 2) == 0 {\n\t\t\t\tnewDiag := &hcl.Diagnostic{\n\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\tSummary:  \"Invalid character\",\n\t\t\t\t\tDetail:   \"Single quotes are not valid. Use double quotes (\\\") to enclose strings.\",\n\t\t\t\t\tSubject:  &tok.Range,\n\t\t\t\t}\n\t\t\t\tdiags = append(diags, newDiag)\n\t\t\t}\n\t\t\tif toldApostrophe <= 2 {\n\t\t\t\ttoldApostrophe++\n\t\t\t}\n\t\tcase TokenSemicolon:\n\t\t\tif toldSemicolon < 1 {\n\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\tSummary:  \"Invalid character\",\n\t\t\t\t\tDetail:   \"The \\\";\\\" character is not valid. Use newlines to separate arguments and blocks, and commas to separate items in collection values.\",\n\t\t\t\t\tSubject:  &tok.Range,\n\t\t\t\t})\n\n\t\t\t\ttoldSemicolon++\n\t\t\t}\n\t\tcase TokenTabs:\n\t\t\tif toldTabs < 1 {\n\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\tSummary:  \"Invalid character\",\n\t\t\t\t\tDetail:   \"Tab characters may not be used. The recommended indentation style is two spaces per indent.\",\n\t\t\t\t\tSubject:  &tok.Range,\n\t\t\t\t})\n\n\t\t\t\ttoldTabs++\n\t\t\t}\n\t\tcase TokenBadUTF8:\n\t\t\tif toldBadUTF8 < 1 {\n\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\tSummary:  \"Invalid character encoding\",\n\t\t\t\t\tDetail:   \"All input files must be UTF-8 encoded. Ensure that UTF-8 encoding is selected in your editor.\",\n\t\t\t\t\tSubject:  &tok.Range,\n\t\t\t\t})\n\n\t\t\t\ttoldBadUTF8++\n\t\t\t}\n\t\tcase TokenQuotedNewline:\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Invalid multi-line string\",\n\t\t\t\tDetail:   \"Quoted strings may not be split over multiple lines. To produce a multi-line string, either use the \\\\n escape to represent a newline character or use the \\\"heredoc\\\" multi-line template syntax.\",\n\t\t\t\tSubject:  &tok.Range,\n\t\t\t})\n\t\tcase TokenInvalid:\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Invalid character\",\n\t\t\t\tDetail:   \"This character is not used within the language.\",\n\t\t\t\tSubject:  &tok.Range,\n\t\t\t})\n\t\t}\n\t}\n\treturn diags\n}\n\nvar utf8BOM = []byte{0xef, 0xbb, 0xbf}\n\n// stripUTF8BOM checks whether the given buffer begins with a UTF-8 byte order\n// mark (0xEF 0xBB 0xBF) and, if so, returns a truncated slice with the same\n// backing array but with the BOM skipped.\n//\n// If there is no BOM present, the given slice is returned verbatim.\nfunc stripUTF8BOM(src []byte) []byte {\n\tif bytes.HasPrefix(src, utf8BOM) {\n\t\treturn src[3:]\n\t}\n\treturn src\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcl/hclsyntax/token_type_string.go",
    "content": "// Code generated by \"stringer -type TokenType -output token_type_string.go\"; DO NOT EDIT.\n\npackage hclsyntax\n\nimport \"strconv\"\n\nfunc _() {\n\t// An \"invalid array index\" compiler error signifies that the constant values have changed.\n\t// Re-run the stringer command to generate them again.\n\tvar x [1]struct{}\n\t_ = x[TokenOBrace-123]\n\t_ = x[TokenCBrace-125]\n\t_ = x[TokenOBrack-91]\n\t_ = x[TokenCBrack-93]\n\t_ = x[TokenOParen-40]\n\t_ = x[TokenCParen-41]\n\t_ = x[TokenOQuote-171]\n\t_ = x[TokenCQuote-187]\n\t_ = x[TokenOHeredoc-72]\n\t_ = x[TokenCHeredoc-104]\n\t_ = x[TokenStar-42]\n\t_ = x[TokenSlash-47]\n\t_ = x[TokenPlus-43]\n\t_ = x[TokenMinus-45]\n\t_ = x[TokenPercent-37]\n\t_ = x[TokenEqual-61]\n\t_ = x[TokenEqualOp-8788]\n\t_ = x[TokenNotEqual-8800]\n\t_ = x[TokenLessThan-60]\n\t_ = x[TokenLessThanEq-8804]\n\t_ = x[TokenGreaterThan-62]\n\t_ = x[TokenGreaterThanEq-8805]\n\t_ = x[TokenAnd-8743]\n\t_ = x[TokenOr-8744]\n\t_ = x[TokenBang-33]\n\t_ = x[TokenDot-46]\n\t_ = x[TokenComma-44]\n\t_ = x[TokenEllipsis-8230]\n\t_ = x[TokenFatArrow-8658]\n\t_ = x[TokenQuestion-63]\n\t_ = x[TokenColon-58]\n\t_ = x[TokenTemplateInterp-8747]\n\t_ = x[TokenTemplateControl-955]\n\t_ = x[TokenTemplateSeqEnd-8718]\n\t_ = x[TokenQuotedLit-81]\n\t_ = x[TokenStringLit-83]\n\t_ = x[TokenNumberLit-78]\n\t_ = x[TokenIdent-73]\n\t_ = x[TokenComment-67]\n\t_ = x[TokenNewline-10]\n\t_ = x[TokenEOF-9220]\n\t_ = x[TokenBitwiseAnd-38]\n\t_ = x[TokenBitwiseOr-124]\n\t_ = x[TokenBitwiseNot-126]\n\t_ = x[TokenBitwiseXor-94]\n\t_ = x[TokenStarStar-10138]\n\t_ = x[TokenApostrophe-39]\n\t_ = x[TokenBacktick-96]\n\t_ = x[TokenSemicolon-59]\n\t_ = x[TokenTabs-9225]\n\t_ = x[TokenInvalid-65533]\n\t_ = x[TokenBadUTF8-128169]\n\t_ = x[TokenQuotedNewline-9252]\n\t_ = x[TokenNil-0]\n}\n\nconst _TokenType_name = \"TokenNilTokenNewlineTokenBangTokenPercentTokenBitwiseAndTokenApostropheTokenOParenTokenCParenTokenStarTokenPlusTokenCommaTokenMinusTokenDotTokenSlashTokenColonTokenSemicolonTokenLessThanTokenEqualTokenGreaterThanTokenQuestionTokenCommentTokenOHeredocTokenIdentTokenNumberLitTokenQuotedLitTokenStringLitTokenOBrackTokenCBrackTokenBitwiseXorTokenBacktickTokenCHeredocTokenOBraceTokenBitwiseOrTokenCBraceTokenBitwiseNotTokenOQuoteTokenCQuoteTokenTemplateControlTokenEllipsisTokenFatArrowTokenTemplateSeqEndTokenAndTokenOrTokenTemplateInterpTokenEqualOpTokenNotEqualTokenLessThanEqTokenGreaterThanEqTokenEOFTokenTabsTokenQuotedNewlineTokenStarStarTokenInvalidTokenBadUTF8\"\n\nvar _TokenType_map = map[TokenType]string{\n\t0:      _TokenType_name[0:8],\n\t10:     _TokenType_name[8:20],\n\t33:     _TokenType_name[20:29],\n\t37:     _TokenType_name[29:41],\n\t38:     _TokenType_name[41:56],\n\t39:     _TokenType_name[56:71],\n\t40:     _TokenType_name[71:82],\n\t41:     _TokenType_name[82:93],\n\t42:     _TokenType_name[93:102],\n\t43:     _TokenType_name[102:111],\n\t44:     _TokenType_name[111:121],\n\t45:     _TokenType_name[121:131],\n\t46:     _TokenType_name[131:139],\n\t47:     _TokenType_name[139:149],\n\t58:     _TokenType_name[149:159],\n\t59:     _TokenType_name[159:173],\n\t60:     _TokenType_name[173:186],\n\t61:     _TokenType_name[186:196],\n\t62:     _TokenType_name[196:212],\n\t63:     _TokenType_name[212:225],\n\t67:     _TokenType_name[225:237],\n\t72:     _TokenType_name[237:250],\n\t73:     _TokenType_name[250:260],\n\t78:     _TokenType_name[260:274],\n\t81:     _TokenType_name[274:288],\n\t83:     _TokenType_name[288:302],\n\t91:     _TokenType_name[302:313],\n\t93:     _TokenType_name[313:324],\n\t94:     _TokenType_name[324:339],\n\t96:     _TokenType_name[339:352],\n\t104:    _TokenType_name[352:365],\n\t123:    _TokenType_name[365:376],\n\t124:    _TokenType_name[376:390],\n\t125:    _TokenType_name[390:401],\n\t126:    _TokenType_name[401:416],\n\t171:    _TokenType_name[416:427],\n\t187:    _TokenType_name[427:438],\n\t955:    _TokenType_name[438:458],\n\t8230:   _TokenType_name[458:471],\n\t8658:   _TokenType_name[471:484],\n\t8718:   _TokenType_name[484:503],\n\t8743:   _TokenType_name[503:511],\n\t8744:   _TokenType_name[511:518],\n\t8747:   _TokenType_name[518:537],\n\t8788:   _TokenType_name[537:549],\n\t8800:   _TokenType_name[549:562],\n\t8804:   _TokenType_name[562:577],\n\t8805:   _TokenType_name[577:595],\n\t9220:   _TokenType_name[595:603],\n\t9225:   _TokenType_name[603:612],\n\t9252:   _TokenType_name[612:630],\n\t10138:  _TokenType_name[630:643],\n\t65533:  _TokenType_name[643:655],\n\t128169: _TokenType_name[655:667],\n}\n\nfunc (i TokenType) String() string {\n\tif str, ok := _TokenType_map[i]; ok {\n\t\treturn str\n\t}\n\treturn \"TokenType(\" + strconv.FormatInt(int64(i), 10) + \")\"\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcl/hclsyntax/variables.go",
    "content": "package hclsyntax\n\nimport (\n\t\"github.com/hashicorp/hcl2/hcl\"\n)\n\n// Variables returns all of the variables referenced within a given experssion.\n//\n// This is the implementation of the \"Variables\" method on every native\n// expression.\nfunc Variables(expr Expression) []hcl.Traversal {\n\tvar vars []hcl.Traversal\n\n\twalker := &variablesWalker{\n\t\tCallback: func(t hcl.Traversal) {\n\t\t\tvars = append(vars, t)\n\t\t},\n\t}\n\n\tWalk(expr, walker)\n\n\treturn vars\n}\n\n// variablesWalker is a Walker implementation that calls its callback for any\n// root scope traversal found while walking.\ntype variablesWalker struct {\n\tCallback    func(hcl.Traversal)\n\tlocalScopes []map[string]struct{}\n}\n\nfunc (w *variablesWalker) Enter(n Node) hcl.Diagnostics {\n\tswitch tn := n.(type) {\n\tcase *ScopeTraversalExpr:\n\t\tt := tn.Traversal\n\n\t\t// Check if the given root name appears in any of the active\n\t\t// local scopes. We don't want to return local variables here, since\n\t\t// the goal of walking variables is to tell the calling application\n\t\t// which names it needs to populate in the _root_ scope.\n\t\tname := t.RootName()\n\t\tfor _, names := range w.localScopes {\n\t\t\tif _, localized := names[name]; localized {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t}\n\n\t\tw.Callback(t)\n\tcase ChildScope:\n\t\tw.localScopes = append(w.localScopes, tn.LocalNames)\n\t}\n\treturn nil\n}\n\nfunc (w *variablesWalker) Exit(n Node) hcl.Diagnostics {\n\tswitch n.(type) {\n\tcase ChildScope:\n\t\t// pop the latest local scope, assuming that the walker will\n\t\t// behave symmetrically as promised.\n\t\tw.localScopes = w.localScopes[:len(w.localScopes)-1]\n\t}\n\treturn nil\n}\n\n// ChildScope is a synthetic AST node that is visited during a walk to\n// indicate that its descendent will be evaluated in a child scope, which\n// may mask certain variables from the parent scope as locals.\n//\n// ChildScope nodes don't really exist in the AST, but are rather synthesized\n// on the fly during walk. Therefore it doesn't do any good to transform them;\n// instead, transform either parent node that created a scope or the expression\n// that the child scope struct wraps.\ntype ChildScope struct {\n\tLocalNames map[string]struct{}\n\tExpr       Expression\n}\n\nfunc (e ChildScope) walkChildNodes(w internalWalkFunc) {\n\tw(e.Expr)\n}\n\n// Range returns the range of the expression that the ChildScope is\n// encapsulating. It isn't really very useful to call Range on a ChildScope.\nfunc (e ChildScope) Range() hcl.Range {\n\treturn e.Expr.Range()\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcl/hclsyntax/walk.go",
    "content": "package hclsyntax\n\nimport (\n\t\"github.com/hashicorp/hcl2/hcl\"\n)\n\n// VisitFunc is the callback signature for VisitAll.\ntype VisitFunc func(node Node) hcl.Diagnostics\n\n// VisitAll is a basic way to traverse the AST beginning with a particular\n// node. The given function will be called once for each AST node in\n// depth-first order, but no context is provided about the shape of the tree.\n//\n// The VisitFunc may return diagnostics, in which case they will be accumulated\n// and returned as a single set.\nfunc VisitAll(node Node, f VisitFunc) hcl.Diagnostics {\n\tdiags := f(node)\n\tnode.walkChildNodes(func(node Node) {\n\t\tdiags = append(diags, VisitAll(node, f)...)\n\t})\n\treturn diags\n}\n\n// Walker is an interface used with Walk.\ntype Walker interface {\n\tEnter(node Node) hcl.Diagnostics\n\tExit(node Node) hcl.Diagnostics\n}\n\n// Walk is a more complex way to traverse the AST starting with a particular\n// node, which provides information about the tree structure via separate\n// Enter and Exit functions.\nfunc Walk(node Node, w Walker) hcl.Diagnostics {\n\tdiags := w.Enter(node)\n\tnode.walkChildNodes(func(node Node) {\n\t\tdiags = append(diags, Walk(node, w)...)\n\t})\n\tmoreDiags := w.Exit(node)\n\tdiags = append(diags, moreDiags...)\n\treturn diags\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcl/json/ast.go",
    "content": "package json\n\nimport (\n\t\"math/big\"\n\n\t\"github.com/hashicorp/hcl2/hcl\"\n)\n\ntype node interface {\n\tRange() hcl.Range\n\tStartRange() hcl.Range\n}\n\ntype objectVal struct {\n\tAttrs      []*objectAttr\n\tSrcRange   hcl.Range // range of the entire object, brace-to-brace\n\tOpenRange  hcl.Range // range of the opening brace\n\tCloseRange hcl.Range // range of the closing brace\n}\n\nfunc (n *objectVal) Range() hcl.Range {\n\treturn n.SrcRange\n}\n\nfunc (n *objectVal) StartRange() hcl.Range {\n\treturn n.OpenRange\n}\n\ntype objectAttr struct {\n\tName      string\n\tValue     node\n\tNameRange hcl.Range // range of the name string\n}\n\nfunc (n *objectAttr) Range() hcl.Range {\n\treturn n.NameRange\n}\n\nfunc (n *objectAttr) StartRange() hcl.Range {\n\treturn n.NameRange\n}\n\ntype arrayVal struct {\n\tValues    []node\n\tSrcRange  hcl.Range // range of the entire object, bracket-to-bracket\n\tOpenRange hcl.Range // range of the opening bracket\n}\n\nfunc (n *arrayVal) Range() hcl.Range {\n\treturn n.SrcRange\n}\n\nfunc (n *arrayVal) StartRange() hcl.Range {\n\treturn n.OpenRange\n}\n\ntype booleanVal struct {\n\tValue    bool\n\tSrcRange hcl.Range\n}\n\nfunc (n *booleanVal) Range() hcl.Range {\n\treturn n.SrcRange\n}\n\nfunc (n *booleanVal) StartRange() hcl.Range {\n\treturn n.SrcRange\n}\n\ntype numberVal struct {\n\tValue    *big.Float\n\tSrcRange hcl.Range\n}\n\nfunc (n *numberVal) Range() hcl.Range {\n\treturn n.SrcRange\n}\n\nfunc (n *numberVal) StartRange() hcl.Range {\n\treturn n.SrcRange\n}\n\ntype stringVal struct {\n\tValue    string\n\tSrcRange hcl.Range\n}\n\nfunc (n *stringVal) Range() hcl.Range {\n\treturn n.SrcRange\n}\n\nfunc (n *stringVal) StartRange() hcl.Range {\n\treturn n.SrcRange\n}\n\ntype nullVal struct {\n\tSrcRange hcl.Range\n}\n\nfunc (n *nullVal) Range() hcl.Range {\n\treturn n.SrcRange\n}\n\nfunc (n *nullVal) StartRange() hcl.Range {\n\treturn n.SrcRange\n}\n\n// invalidVal is used as a placeholder where a value is needed for a valid\n// parse tree but the input was invalid enough to prevent one from being\n// created.\ntype invalidVal struct {\n\tSrcRange hcl.Range\n}\n\nfunc (n invalidVal) Range() hcl.Range {\n\treturn n.SrcRange\n}\n\nfunc (n invalidVal) StartRange() hcl.Range {\n\treturn n.SrcRange\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcl/json/didyoumean.go",
    "content": "package json\n\nimport (\n\t\"github.com/agext/levenshtein\"\n)\n\nvar keywords = []string{\"false\", \"true\", \"null\"}\n\n// keywordSuggestion tries to find a valid JSON keyword that is close to the\n// given string and returns it if found. If no keyword is close enough, returns\n// the empty string.\nfunc keywordSuggestion(given string) string {\n\treturn nameSuggestion(given, keywords)\n}\n\n// nameSuggestion tries to find a name from the given slice of suggested names\n// that is close to the given name and returns it if found. If no suggestion\n// is close enough, returns the empty string.\n//\n// The suggestions are tried in order, so earlier suggestions take precedence\n// if the given string is similar to two or more suggestions.\n//\n// This function is intended to be used with a relatively-small number of\n// suggestions. It's not optimized for hundreds or thousands of them.\nfunc nameSuggestion(given string, suggestions []string) string {\n\tfor _, suggestion := range suggestions {\n\t\tdist := levenshtein.Distance(given, suggestion, nil)\n\t\tif dist < 3 { // threshold determined experimentally\n\t\t\treturn suggestion\n\t\t}\n\t}\n\treturn \"\"\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcl/json/doc.go",
    "content": "// Package json is the JSON parser for HCL. It parses JSON files and returns\n// implementations of the core HCL structural interfaces in terms of the\n// JSON data inside.\n//\n// This is not a generic JSON parser. Instead, it deals with the mapping from\n// the JSON information model to the HCL information model, using a number\n// of hard-coded structural conventions.\npackage json\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcl/json/navigation.go",
    "content": "package json\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n)\n\ntype navigation struct {\n\troot node\n}\n\n// Implementation of hcled.ContextString\nfunc (n navigation) ContextString(offset int) string {\n\tsteps := navigationStepsRev(n.root, offset)\n\tif steps == nil {\n\t\treturn \"\"\n\t}\n\n\t// We built our slice backwards, so we'll reverse it in-place now.\n\thalf := len(steps) / 2 // integer division\n\tfor i := 0; i < half; i++ {\n\t\tsteps[i], steps[len(steps)-1-i] = steps[len(steps)-1-i], steps[i]\n\t}\n\n\tret := strings.Join(steps, \"\")\n\tif len(ret) > 0 && ret[0] == '.' {\n\t\tret = ret[1:]\n\t}\n\treturn ret\n}\n\nfunc navigationStepsRev(v node, offset int) []string {\n\tswitch tv := v.(type) {\n\tcase *objectVal:\n\t\t// Do any of our properties have an object that contains the target\n\t\t// offset?\n\t\tfor _, attr := range tv.Attrs {\n\t\t\tk := attr.Name\n\t\t\tav := attr.Value\n\n\t\t\tswitch av.(type) {\n\t\t\tcase *objectVal, *arrayVal:\n\t\t\t\t// okay\n\t\t\tdefault:\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif av.Range().ContainsOffset(offset) {\n\t\t\t\treturn append(navigationStepsRev(av, offset), \".\"+k)\n\t\t\t}\n\t\t}\n\tcase *arrayVal:\n\t\t// Do any of our elements contain the target offset?\n\t\tfor i, elem := range tv.Values {\n\n\t\t\tswitch elem.(type) {\n\t\t\tcase *objectVal, *arrayVal:\n\t\t\t\t// okay\n\t\t\tdefault:\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif elem.Range().ContainsOffset(offset) {\n\t\t\t\treturn append(navigationStepsRev(elem, offset), fmt.Sprintf(\"[%d]\", i))\n\t\t\t}\n\t\t}\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcl/json/parser.go",
    "content": "package json\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\nfunc parseFileContent(buf []byte, filename string) (node, hcl.Diagnostics) {\n\ttokens := scan(buf, pos{\n\t\tFilename: filename,\n\t\tPos: hcl.Pos{\n\t\t\tByte:   0,\n\t\t\tLine:   1,\n\t\t\tColumn: 1,\n\t\t},\n\t})\n\tp := newPeeker(tokens)\n\tnode, diags := parseValue(p)\n\tif len(diags) == 0 && p.Peek().Type != tokenEOF {\n\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Extraneous data after value\",\n\t\t\tDetail:   \"Extra characters appear after the JSON value.\",\n\t\t\tSubject:  p.Peek().Range.Ptr(),\n\t\t})\n\t}\n\treturn node, diags\n}\n\nfunc parseValue(p *peeker) (node, hcl.Diagnostics) {\n\ttok := p.Peek()\n\n\twrapInvalid := func(n node, diags hcl.Diagnostics) (node, hcl.Diagnostics) {\n\t\tif n != nil {\n\t\t\treturn n, diags\n\t\t}\n\t\treturn invalidVal{tok.Range}, diags\n\t}\n\n\tswitch tok.Type {\n\tcase tokenBraceO:\n\t\treturn wrapInvalid(parseObject(p))\n\tcase tokenBrackO:\n\t\treturn wrapInvalid(parseArray(p))\n\tcase tokenNumber:\n\t\treturn wrapInvalid(parseNumber(p))\n\tcase tokenString:\n\t\treturn wrapInvalid(parseString(p))\n\tcase tokenKeyword:\n\t\treturn wrapInvalid(parseKeyword(p))\n\tcase tokenBraceC:\n\t\treturn wrapInvalid(nil, hcl.Diagnostics{\n\t\t\t{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Missing JSON value\",\n\t\t\t\tDetail:   \"A JSON value must start with a brace, a bracket, a number, a string, or a keyword.\",\n\t\t\t\tSubject:  &tok.Range,\n\t\t\t},\n\t\t})\n\tcase tokenBrackC:\n\t\treturn wrapInvalid(nil, hcl.Diagnostics{\n\t\t\t{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Missing array element value\",\n\t\t\t\tDetail:   \"A JSON value must start with a brace, a bracket, a number, a string, or a keyword.\",\n\t\t\t\tSubject:  &tok.Range,\n\t\t\t},\n\t\t})\n\tcase tokenEOF:\n\t\treturn wrapInvalid(nil, hcl.Diagnostics{\n\t\t\t{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Missing value\",\n\t\t\t\tDetail:   \"The JSON data ends prematurely.\",\n\t\t\t\tSubject:  &tok.Range,\n\t\t\t},\n\t\t})\n\tdefault:\n\t\treturn wrapInvalid(nil, hcl.Diagnostics{\n\t\t\t{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Invalid start of value\",\n\t\t\t\tDetail:   \"A JSON value must start with a brace, a bracket, a number, a string, or a keyword.\",\n\t\t\t\tSubject:  &tok.Range,\n\t\t\t},\n\t\t})\n\t}\n}\n\nfunc tokenCanStartValue(tok token) bool {\n\tswitch tok.Type {\n\tcase tokenBraceO, tokenBrackO, tokenNumber, tokenString, tokenKeyword:\n\t\treturn true\n\tdefault:\n\t\treturn false\n\t}\n}\n\nfunc parseObject(p *peeker) (node, hcl.Diagnostics) {\n\tvar diags hcl.Diagnostics\n\n\topen := p.Read()\n\tattrs := []*objectAttr{}\n\n\t// recover is used to shift the peeker to what seems to be the end of\n\t// our object, so that when we encounter an error we leave the peeker\n\t// at a reasonable point in the token stream to continue parsing.\n\trecover := func(tok token) {\n\t\topen := 1\n\t\tfor {\n\t\t\tswitch tok.Type {\n\t\t\tcase tokenBraceO:\n\t\t\t\topen++\n\t\t\tcase tokenBraceC:\n\t\t\t\topen--\n\t\t\t\tif open <= 1 {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\tcase tokenEOF:\n\t\t\t\t// Ran out of source before we were able to recover,\n\t\t\t\t// so we'll bail here and let the caller deal with it.\n\t\t\t\treturn\n\t\t\t}\n\t\t\ttok = p.Read()\n\t\t}\n\t}\n\nToken:\n\tfor {\n\t\tif p.Peek().Type == tokenBraceC {\n\t\t\tbreak Token\n\t\t}\n\n\t\tkeyNode, keyDiags := parseValue(p)\n\t\tdiags = diags.Extend(keyDiags)\n\t\tif keyNode == nil {\n\t\t\treturn nil, diags\n\t\t}\n\n\t\tkeyStrNode, ok := keyNode.(*stringVal)\n\t\tif !ok {\n\t\t\treturn nil, diags.Append(&hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Invalid object property name\",\n\t\t\t\tDetail:   \"A JSON object property name must be a string\",\n\t\t\t\tSubject:  keyNode.StartRange().Ptr(),\n\t\t\t})\n\t\t}\n\n\t\tkey := keyStrNode.Value\n\n\t\tcolon := p.Read()\n\t\tif colon.Type != tokenColon {\n\t\t\trecover(colon)\n\n\t\t\tif colon.Type == tokenBraceC || colon.Type == tokenComma {\n\t\t\t\t// Catch common mistake of using braces instead of brackets\n\t\t\t\t// for an object.\n\t\t\t\treturn nil, diags.Append(&hcl.Diagnostic{\n\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\tSummary:  \"Missing object value\",\n\t\t\t\t\tDetail:   \"A JSON object attribute must have a value, introduced by a colon.\",\n\t\t\t\t\tSubject:  &colon.Range,\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tif colon.Type == tokenEquals {\n\t\t\t\t// Possible confusion with native HCL syntax.\n\t\t\t\treturn nil, diags.Append(&hcl.Diagnostic{\n\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\tSummary:  \"Missing property value colon\",\n\t\t\t\t\tDetail:   \"JSON uses a colon as its name/value delimiter, not an equals sign.\",\n\t\t\t\t\tSubject:  &colon.Range,\n\t\t\t\t})\n\t\t\t}\n\n\t\t\treturn nil, diags.Append(&hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Missing property value colon\",\n\t\t\t\tDetail:   \"A colon must appear between an object property's name and its value.\",\n\t\t\t\tSubject:  &colon.Range,\n\t\t\t})\n\t\t}\n\n\t\tvalNode, valDiags := parseValue(p)\n\t\tdiags = diags.Extend(valDiags)\n\t\tif valNode == nil {\n\t\t\treturn nil, diags\n\t\t}\n\n\t\tattrs = append(attrs, &objectAttr{\n\t\t\tName:      key,\n\t\t\tValue:     valNode,\n\t\t\tNameRange: keyStrNode.SrcRange,\n\t\t})\n\n\t\tswitch p.Peek().Type {\n\t\tcase tokenComma:\n\t\t\tcomma := p.Read()\n\t\t\tif p.Peek().Type == tokenBraceC {\n\t\t\t\t// Special error message for this common mistake\n\t\t\t\treturn nil, diags.Append(&hcl.Diagnostic{\n\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\tSummary:  \"Trailing comma in object\",\n\t\t\t\t\tDetail:   \"JSON does not permit a trailing comma after the final property in an object.\",\n\t\t\t\t\tSubject:  &comma.Range,\n\t\t\t\t})\n\t\t\t}\n\t\t\tcontinue Token\n\t\tcase tokenEOF:\n\t\t\treturn nil, diags.Append(&hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Unclosed object\",\n\t\t\t\tDetail:   \"No closing brace was found for this JSON object.\",\n\t\t\t\tSubject:  &open.Range,\n\t\t\t})\n\t\tcase tokenBrackC:\n\t\t\t// Consume the bracket anyway, so that we don't return with the peeker\n\t\t\t// at a strange place.\n\t\t\tp.Read()\n\t\t\treturn nil, diags.Append(&hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Mismatched braces\",\n\t\t\t\tDetail:   \"A JSON object must be closed with a brace, not a bracket.\",\n\t\t\t\tSubject:  p.Peek().Range.Ptr(),\n\t\t\t})\n\t\tcase tokenBraceC:\n\t\t\tbreak Token\n\t\tdefault:\n\t\t\trecover(p.Read())\n\t\t\treturn nil, diags.Append(&hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Missing attribute seperator comma\",\n\t\t\t\tDetail:   \"A comma must appear between each property definition in an object.\",\n\t\t\t\tSubject:  p.Peek().Range.Ptr(),\n\t\t\t})\n\t\t}\n\n\t}\n\n\tclose := p.Read()\n\treturn &objectVal{\n\t\tAttrs:      attrs,\n\t\tSrcRange:   hcl.RangeBetween(open.Range, close.Range),\n\t\tOpenRange:  open.Range,\n\t\tCloseRange: close.Range,\n\t}, diags\n}\n\nfunc parseArray(p *peeker) (node, hcl.Diagnostics) {\n\tvar diags hcl.Diagnostics\n\n\topen := p.Read()\n\tvals := []node{}\n\n\t// recover is used to shift the peeker to what seems to be the end of\n\t// our array, so that when we encounter an error we leave the peeker\n\t// at a reasonable point in the token stream to continue parsing.\n\trecover := func(tok token) {\n\t\topen := 1\n\t\tfor {\n\t\t\tswitch tok.Type {\n\t\t\tcase tokenBrackO:\n\t\t\t\topen++\n\t\t\tcase tokenBrackC:\n\t\t\t\topen--\n\t\t\t\tif open <= 1 {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\tcase tokenEOF:\n\t\t\t\t// Ran out of source before we were able to recover,\n\t\t\t\t// so we'll bail here and let the caller deal with it.\n\t\t\t\treturn\n\t\t\t}\n\t\t\ttok = p.Read()\n\t\t}\n\t}\n\nToken:\n\tfor {\n\t\tif p.Peek().Type == tokenBrackC {\n\t\t\tbreak Token\n\t\t}\n\n\t\tvalNode, valDiags := parseValue(p)\n\t\tdiags = diags.Extend(valDiags)\n\t\tif valNode == nil {\n\t\t\treturn nil, diags\n\t\t}\n\n\t\tvals = append(vals, valNode)\n\n\t\tswitch p.Peek().Type {\n\t\tcase tokenComma:\n\t\t\tcomma := p.Read()\n\t\t\tif p.Peek().Type == tokenBrackC {\n\t\t\t\t// Special error message for this common mistake\n\t\t\t\treturn nil, diags.Append(&hcl.Diagnostic{\n\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\tSummary:  \"Trailing comma in array\",\n\t\t\t\t\tDetail:   \"JSON does not permit a trailing comma after the final value in an array.\",\n\t\t\t\t\tSubject:  &comma.Range,\n\t\t\t\t})\n\t\t\t}\n\t\t\tcontinue Token\n\t\tcase tokenColon:\n\t\t\trecover(p.Read())\n\t\t\treturn nil, diags.Append(&hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Invalid array value\",\n\t\t\t\tDetail:   \"A colon is not used to introduce values in a JSON array.\",\n\t\t\t\tSubject:  p.Peek().Range.Ptr(),\n\t\t\t})\n\t\tcase tokenEOF:\n\t\t\trecover(p.Read())\n\t\t\treturn nil, diags.Append(&hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Unclosed object\",\n\t\t\t\tDetail:   \"No closing bracket was found for this JSON array.\",\n\t\t\t\tSubject:  &open.Range,\n\t\t\t})\n\t\tcase tokenBraceC:\n\t\t\trecover(p.Read())\n\t\t\treturn nil, diags.Append(&hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Mismatched brackets\",\n\t\t\t\tDetail:   \"A JSON array must be closed with a bracket, not a brace.\",\n\t\t\t\tSubject:  p.Peek().Range.Ptr(),\n\t\t\t})\n\t\tcase tokenBrackC:\n\t\t\tbreak Token\n\t\tdefault:\n\t\t\trecover(p.Read())\n\t\t\treturn nil, diags.Append(&hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Missing attribute seperator comma\",\n\t\t\t\tDetail:   \"A comma must appear between each value in an array.\",\n\t\t\t\tSubject:  p.Peek().Range.Ptr(),\n\t\t\t})\n\t\t}\n\n\t}\n\n\tclose := p.Read()\n\treturn &arrayVal{\n\t\tValues:    vals,\n\t\tSrcRange:  hcl.RangeBetween(open.Range, close.Range),\n\t\tOpenRange: open.Range,\n\t}, diags\n}\n\nfunc parseNumber(p *peeker) (node, hcl.Diagnostics) {\n\ttok := p.Read()\n\n\t// Use encoding/json to validate the number syntax.\n\t// TODO: Do this more directly to produce better diagnostics.\n\tvar num json.Number\n\terr := json.Unmarshal(tok.Bytes, &num)\n\tif err != nil {\n\t\treturn nil, hcl.Diagnostics{\n\t\t\t{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Invalid JSON number\",\n\t\t\t\tDetail:   fmt.Sprintf(\"There is a syntax error in the given JSON number.\"),\n\t\t\t\tSubject:  &tok.Range,\n\t\t\t},\n\t\t}\n\t}\n\n\t// We want to guarantee that we parse numbers the same way as cty (and thus\n\t// native syntax HCL) would here, so we'll use the cty parser even though\n\t// in most other cases we don't actually introduce cty concepts until\n\t// decoding time. We'll unwrap the parsed float immediately afterwards, so\n\t// the cty value is just a temporary helper.\n\tnv, err := cty.ParseNumberVal(string(num))\n\tif err != nil {\n\t\t// Should never happen if above passed, since JSON numbers are a subset\n\t\t// of what cty can parse...\n\t\treturn nil, hcl.Diagnostics{\n\t\t\t{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Invalid JSON number\",\n\t\t\t\tDetail:   fmt.Sprintf(\"There is a syntax error in the given JSON number.\"),\n\t\t\t\tSubject:  &tok.Range,\n\t\t\t},\n\t\t}\n\t}\n\n\treturn &numberVal{\n\t\tValue:    nv.AsBigFloat(),\n\t\tSrcRange: tok.Range,\n\t}, nil\n}\n\nfunc parseString(p *peeker) (node, hcl.Diagnostics) {\n\ttok := p.Read()\n\tvar str string\n\terr := json.Unmarshal(tok.Bytes, &str)\n\n\tif err != nil {\n\t\tvar errRange hcl.Range\n\t\tif serr, ok := err.(*json.SyntaxError); ok {\n\t\t\terrOfs := serr.Offset\n\t\t\terrPos := tok.Range.Start\n\t\t\terrPos.Byte += int(errOfs)\n\n\t\t\t// TODO: Use the byte offset to properly count unicode\n\t\t\t// characters for the column, and mark the whole of the\n\t\t\t// character that was wrong as part of our range.\n\t\t\terrPos.Column += int(errOfs)\n\n\t\t\terrEndPos := errPos\n\t\t\terrEndPos.Byte++\n\t\t\terrEndPos.Column++\n\n\t\t\terrRange = hcl.Range{\n\t\t\t\tFilename: tok.Range.Filename,\n\t\t\t\tStart:    errPos,\n\t\t\t\tEnd:      errEndPos,\n\t\t\t}\n\t\t} else {\n\t\t\terrRange = tok.Range\n\t\t}\n\n\t\tvar contextRange *hcl.Range\n\t\tif errRange != tok.Range {\n\t\t\tcontextRange = &tok.Range\n\t\t}\n\n\t\t// FIXME: Eventually we should parse strings directly here so\n\t\t// we can produce a more useful error message in the face fo things\n\t\t// such as invalid escapes, etc.\n\t\treturn nil, hcl.Diagnostics{\n\t\t\t{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Invalid JSON string\",\n\t\t\t\tDetail:   fmt.Sprintf(\"There is a syntax error in the given JSON string.\"),\n\t\t\t\tSubject:  &errRange,\n\t\t\t\tContext:  contextRange,\n\t\t\t},\n\t\t}\n\t}\n\n\treturn &stringVal{\n\t\tValue:    str,\n\t\tSrcRange: tok.Range,\n\t}, nil\n}\n\nfunc parseKeyword(p *peeker) (node, hcl.Diagnostics) {\n\ttok := p.Read()\n\ts := string(tok.Bytes)\n\n\tswitch s {\n\tcase \"true\":\n\t\treturn &booleanVal{\n\t\t\tValue:    true,\n\t\t\tSrcRange: tok.Range,\n\t\t}, nil\n\tcase \"false\":\n\t\treturn &booleanVal{\n\t\t\tValue:    false,\n\t\t\tSrcRange: tok.Range,\n\t\t}, nil\n\tcase \"null\":\n\t\treturn &nullVal{\n\t\t\tSrcRange: tok.Range,\n\t\t}, nil\n\tcase \"undefined\", \"NaN\", \"Infinity\":\n\t\treturn nil, hcl.Diagnostics{\n\t\t\t{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Invalid JSON keyword\",\n\t\t\t\tDetail:   fmt.Sprintf(\"The JavaScript identifier %q cannot be used in JSON.\", s),\n\t\t\t\tSubject:  &tok.Range,\n\t\t\t},\n\t\t}\n\tdefault:\n\t\tvar dym string\n\t\tif suggest := keywordSuggestion(s); suggest != \"\" {\n\t\t\tdym = fmt.Sprintf(\" Did you mean %q?\", suggest)\n\t\t}\n\n\t\treturn nil, hcl.Diagnostics{\n\t\t\t{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Invalid JSON keyword\",\n\t\t\t\tDetail:   fmt.Sprintf(\"%q is not a valid JSON keyword.%s\", s, dym),\n\t\t\t\tSubject:  &tok.Range,\n\t\t\t},\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcl/json/peeker.go",
    "content": "package json\n\ntype peeker struct {\n\ttokens []token\n\tpos    int\n}\n\nfunc newPeeker(tokens []token) *peeker {\n\treturn &peeker{\n\t\ttokens: tokens,\n\t\tpos:    0,\n\t}\n}\n\nfunc (p *peeker) Peek() token {\n\treturn p.tokens[p.pos]\n}\n\nfunc (p *peeker) Read() token {\n\tret := p.tokens[p.pos]\n\tif ret.Type != tokenEOF {\n\t\tp.pos++\n\t}\n\treturn ret\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcl/json/public.go",
    "content": "package json\n\nimport (\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"os\"\n\n\t\"github.com/hashicorp/hcl2/hcl\"\n)\n\n// Parse attempts to parse the given buffer as JSON and, if successful, returns\n// a hcl.File for the HCL configuration represented by it.\n//\n// This is not a generic JSON parser. Instead, it deals only with the profile\n// of JSON used to express HCL configuration.\n//\n// The returned file is valid only if the returned diagnostics returns false\n// from its HasErrors method. If HasErrors returns true, the file represents\n// the subset of data that was able to be parsed, which may be none.\nfunc Parse(src []byte, filename string) (*hcl.File, hcl.Diagnostics) {\n\trootNode, diags := parseFileContent(src, filename)\n\n\tswitch rootNode.(type) {\n\tcase *objectVal, *arrayVal:\n\t\t// okay\n\tdefault:\n\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Root value must be object\",\n\t\t\tDetail:   \"The root value in a JSON-based configuration must be either a JSON object or a JSON array of objects.\",\n\t\t\tSubject:  rootNode.StartRange().Ptr(),\n\t\t})\n\n\t\t// Since we've already produced an error message for this being\n\t\t// invalid, we'll return an empty placeholder here so that trying to\n\t\t// extract content from our root body won't produce a redundant\n\t\t// error saying the same thing again in more general terms.\n\t\tfakePos := hcl.Pos{\n\t\t\tByte:   0,\n\t\t\tLine:   1,\n\t\t\tColumn: 1,\n\t\t}\n\t\tfakeRange := hcl.Range{\n\t\t\tFilename: filename,\n\t\t\tStart:    fakePos,\n\t\t\tEnd:      fakePos,\n\t\t}\n\t\trootNode = &objectVal{\n\t\t\tAttrs:     []*objectAttr{},\n\t\t\tSrcRange:  fakeRange,\n\t\t\tOpenRange: fakeRange,\n\t\t}\n\t}\n\n\tfile := &hcl.File{\n\t\tBody: &body{\n\t\t\tval: rootNode,\n\t\t},\n\t\tBytes: src,\n\t\tNav:   navigation{rootNode},\n\t}\n\treturn file, diags\n}\n\n// ParseFile is a convenience wrapper around Parse that first attempts to load\n// data from the given filename, passing the result to Parse if successful.\n//\n// If the file cannot be read, an error diagnostic with nil context is returned.\nfunc ParseFile(filename string) (*hcl.File, hcl.Diagnostics) {\n\tf, err := os.Open(filename)\n\tif err != nil {\n\t\treturn nil, hcl.Diagnostics{\n\t\t\t{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Failed to open file\",\n\t\t\t\tDetail:   fmt.Sprintf(\"The file %q could not be opened.\", filename),\n\t\t\t},\n\t\t}\n\t}\n\tdefer f.Close()\n\n\tsrc, err := ioutil.ReadAll(f)\n\tif err != nil {\n\t\treturn nil, hcl.Diagnostics{\n\t\t\t{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Failed to read file\",\n\t\t\t\tDetail:   fmt.Sprintf(\"The file %q was opened, but an error occured while reading it.\", filename),\n\t\t\t},\n\t\t}\n\t}\n\n\treturn Parse(src, filename)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcl/json/scanner.go",
    "content": "package json\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/apparentlymart/go-textseg/textseg\"\n\t\"github.com/hashicorp/hcl2/hcl\"\n)\n\n//go:generate stringer -type tokenType scanner.go\ntype tokenType rune\n\nconst (\n\ttokenBraceO  tokenType = '{'\n\ttokenBraceC  tokenType = '}'\n\ttokenBrackO  tokenType = '['\n\ttokenBrackC  tokenType = ']'\n\ttokenComma   tokenType = ','\n\ttokenColon   tokenType = ':'\n\ttokenKeyword tokenType = 'K'\n\ttokenString  tokenType = 'S'\n\ttokenNumber  tokenType = 'N'\n\ttokenEOF     tokenType = '␄'\n\ttokenInvalid tokenType = 0\n\ttokenEquals  tokenType = '=' // used only for reminding the user of JSON syntax\n)\n\ntype token struct {\n\tType  tokenType\n\tBytes []byte\n\tRange hcl.Range\n}\n\n// scan returns the primary tokens for the given JSON buffer in sequence.\n//\n// The responsibility of this pass is to just mark the slices of the buffer\n// as being of various types. It is lax in how it interprets the multi-byte\n// token types keyword, string and number, preferring to capture erroneous\n// extra bytes that we presume the user intended to be part of the token\n// so that we can generate more helpful diagnostics in the parser.\nfunc scan(buf []byte, start pos) []token {\n\tvar tokens []token\n\tp := start\n\tfor {\n\t\tif len(buf) == 0 {\n\t\t\ttokens = append(tokens, token{\n\t\t\t\tType:  tokenEOF,\n\t\t\t\tBytes: nil,\n\t\t\t\tRange: posRange(p, p),\n\t\t\t})\n\t\t\treturn tokens\n\t\t}\n\n\t\tbuf, p = skipWhitespace(buf, p)\n\n\t\tif len(buf) == 0 {\n\t\t\ttokens = append(tokens, token{\n\t\t\t\tType:  tokenEOF,\n\t\t\t\tBytes: nil,\n\t\t\t\tRange: posRange(p, p),\n\t\t\t})\n\t\t\treturn tokens\n\t\t}\n\n\t\tstart = p\n\n\t\tfirst := buf[0]\n\t\tswitch {\n\t\tcase first == '{' || first == '}' || first == '[' || first == ']' || first == ',' || first == ':' || first == '=':\n\t\t\tp.Pos.Column++\n\t\t\tp.Pos.Byte++\n\t\t\ttokens = append(tokens, token{\n\t\t\t\tType:  tokenType(first),\n\t\t\t\tBytes: buf[0:1],\n\t\t\t\tRange: posRange(start, p),\n\t\t\t})\n\t\t\tbuf = buf[1:]\n\t\tcase first == '\"':\n\t\t\tvar tokBuf []byte\n\t\t\ttokBuf, buf, p = scanString(buf, p)\n\t\t\ttokens = append(tokens, token{\n\t\t\t\tType:  tokenString,\n\t\t\t\tBytes: tokBuf,\n\t\t\t\tRange: posRange(start, p),\n\t\t\t})\n\t\tcase byteCanStartNumber(first):\n\t\t\tvar tokBuf []byte\n\t\t\ttokBuf, buf, p = scanNumber(buf, p)\n\t\t\ttokens = append(tokens, token{\n\t\t\t\tType:  tokenNumber,\n\t\t\t\tBytes: tokBuf,\n\t\t\t\tRange: posRange(start, p),\n\t\t\t})\n\t\tcase byteCanStartKeyword(first):\n\t\t\tvar tokBuf []byte\n\t\t\ttokBuf, buf, p = scanKeyword(buf, p)\n\t\t\ttokens = append(tokens, token{\n\t\t\t\tType:  tokenKeyword,\n\t\t\t\tBytes: tokBuf,\n\t\t\t\tRange: posRange(start, p),\n\t\t\t})\n\t\tdefault:\n\t\t\ttokens = append(tokens, token{\n\t\t\t\tType:  tokenInvalid,\n\t\t\t\tBytes: buf[:1],\n\t\t\t\tRange: start.Range(1, 1),\n\t\t\t})\n\t\t\t// If we've encountered an invalid then we might as well stop\n\t\t\t// scanning since the parser won't proceed beyond this point.\n\t\t\treturn tokens\n\t\t}\n\t}\n}\n\nfunc byteCanStartNumber(b byte) bool {\n\tswitch b {\n\t// We are slightly more tolerant than JSON requires here since we\n\t// expect the parser will make a stricter interpretation of the\n\t// number bytes, but we specifically don't allow 'e' or 'E' here\n\t// since we want the scanner to treat that as the start of an\n\t// invalid keyword instead, to produce more intelligible error messages.\n\tcase '-', '+', '.', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':\n\t\treturn true\n\tdefault:\n\t\treturn false\n\t}\n}\n\nfunc scanNumber(buf []byte, start pos) ([]byte, []byte, pos) {\n\t// The scanner doesn't check that the sequence of digit-ish bytes is\n\t// in a valid order. The parser must do this when decoding a number\n\t// token.\n\tvar i int\n\tp := start\nByte:\n\tfor i = 0; i < len(buf); i++ {\n\t\tswitch buf[i] {\n\t\tcase '-', '+', '.', 'e', 'E', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':\n\t\t\tp.Pos.Byte++\n\t\t\tp.Pos.Column++\n\t\tdefault:\n\t\t\tbreak Byte\n\t\t}\n\t}\n\treturn buf[:i], buf[i:], p\n}\n\nfunc byteCanStartKeyword(b byte) bool {\n\tswitch {\n\t// We allow any sequence of alphabetical characters here, even though\n\t// JSON is more constrained, so that we can collect what we presume\n\t// the user intended to be a single keyword and then check its validity\n\t// in the parser, where we can generate better diagnostics.\n\t// So e.g. we want to be able to say:\n\t//   unrecognized keyword \"True\". Did you mean \"true\"?\n\tcase isAlphabetical(b):\n\t\treturn true\n\tdefault:\n\t\treturn false\n\t}\n}\n\nfunc scanKeyword(buf []byte, start pos) ([]byte, []byte, pos) {\n\tvar i int\n\tp := start\nByte:\n\tfor i = 0; i < len(buf); i++ {\n\t\tb := buf[i]\n\t\tswitch {\n\t\tcase isAlphabetical(b) || b == '_':\n\t\t\tp.Pos.Byte++\n\t\t\tp.Pos.Column++\n\t\tdefault:\n\t\t\tbreak Byte\n\t\t}\n\t}\n\treturn buf[:i], buf[i:], p\n}\n\nfunc scanString(buf []byte, start pos) ([]byte, []byte, pos) {\n\t// The scanner doesn't validate correct use of escapes, etc. It pays\n\t// attention to escapes only for the purpose of identifying the closing\n\t// quote character. It's the parser's responsibility to do proper\n\t// validation.\n\t//\n\t// The scanner also doesn't specifically detect unterminated string\n\t// literals, though they can be identified in the parser by checking if\n\t// the final byte in a string token is the double-quote character.\n\n\t// Skip the opening quote symbol\n\ti := 1\n\tp := start\n\tp.Pos.Byte++\n\tp.Pos.Column++\n\tescaping := false\nByte:\n\tfor i < len(buf) {\n\t\tb := buf[i]\n\n\t\tswitch {\n\t\tcase b == '\\\\':\n\t\t\tescaping = !escaping\n\t\t\tp.Pos.Byte++\n\t\t\tp.Pos.Column++\n\t\t\ti++\n\t\tcase b == '\"':\n\t\t\tp.Pos.Byte++\n\t\t\tp.Pos.Column++\n\t\t\ti++\n\t\t\tif !escaping {\n\t\t\t\tbreak Byte\n\t\t\t}\n\t\t\tescaping = false\n\t\tcase b < 32:\n\t\t\tbreak Byte\n\t\tdefault:\n\t\t\t// Advance by one grapheme cluster, so that we consider each\n\t\t\t// grapheme to be a \"column\".\n\t\t\t// Ignoring error because this scanner cannot produce errors.\n\t\t\tadvance, _, _ := textseg.ScanGraphemeClusters(buf[i:], true)\n\n\t\t\tp.Pos.Byte += advance\n\t\t\tp.Pos.Column++\n\t\t\ti += advance\n\n\t\t\tescaping = false\n\t\t}\n\t}\n\treturn buf[:i], buf[i:], p\n}\n\nfunc skipWhitespace(buf []byte, start pos) ([]byte, pos) {\n\tvar i int\n\tp := start\nByte:\n\tfor i = 0; i < len(buf); i++ {\n\t\tswitch buf[i] {\n\t\tcase ' ':\n\t\t\tp.Pos.Byte++\n\t\t\tp.Pos.Column++\n\t\tcase '\\n':\n\t\t\tp.Pos.Byte++\n\t\t\tp.Pos.Column = 1\n\t\t\tp.Pos.Line++\n\t\tcase '\\r':\n\t\t\t// For the purpose of line/column counting we consider a\n\t\t\t// carriage return to take up no space, assuming that it will\n\t\t\t// be paired up with a newline (on Windows, for example) that\n\t\t\t// will account for both of them.\n\t\t\tp.Pos.Byte++\n\t\tcase '\\t':\n\t\t\t// We arbitrarily count a tab as if it were two spaces, because\n\t\t\t// we need to choose _some_ number here. This means any system\n\t\t\t// that renders code on-screen with markers must itself treat\n\t\t\t// tabs as a pair of spaces for rendering purposes, or instead\n\t\t\t// use the byte offset and back into its own column position.\n\t\t\tp.Pos.Byte++\n\t\t\tp.Pos.Column += 2\n\t\tdefault:\n\t\t\tbreak Byte\n\t\t}\n\t}\n\treturn buf[i:], p\n}\n\ntype pos struct {\n\tFilename string\n\tPos      hcl.Pos\n}\n\nfunc (p *pos) Range(byteLen, charLen int) hcl.Range {\n\tstart := p.Pos\n\tend := p.Pos\n\tend.Byte += byteLen\n\tend.Column += charLen\n\treturn hcl.Range{\n\t\tFilename: p.Filename,\n\t\tStart:    start,\n\t\tEnd:      end,\n\t}\n}\n\nfunc posRange(start, end pos) hcl.Range {\n\treturn hcl.Range{\n\t\tFilename: start.Filename,\n\t\tStart:    start.Pos,\n\t\tEnd:      end.Pos,\n\t}\n}\n\nfunc (t token) GoString() string {\n\treturn fmt.Sprintf(\"json.token{json.%s, []byte(%q), %#v}\", t.Type, t.Bytes, t.Range)\n}\n\nfunc isAlphabetical(b byte) bool {\n\treturn (b >= 'a' && b <= 'z') || (b >= 'A' && b <= 'Z')\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcl/json/structure.go",
    "content": "package json\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/hashicorp/hcl2/hcl/hclsyntax\"\n\t\"github.com/zclconf/go-cty/cty\"\n\t\"github.com/zclconf/go-cty/cty/convert\"\n)\n\n// body is the implementation of \"Body\" used for files processed with the JSON\n// parser.\ntype body struct {\n\tval node\n\n\t// If non-nil, the keys of this map cause the corresponding attributes to\n\t// be treated as non-existing. This is used when Body.PartialContent is\n\t// called, to produce the \"remaining content\" Body.\n\thiddenAttrs map[string]struct{}\n}\n\n// expression is the implementation of \"Expression\" used for files processed\n// with the JSON parser.\ntype expression struct {\n\tsrc node\n}\n\nfunc (b *body) Content(schema *hcl.BodySchema) (*hcl.BodyContent, hcl.Diagnostics) {\n\tcontent, newBody, diags := b.PartialContent(schema)\n\n\thiddenAttrs := newBody.(*body).hiddenAttrs\n\n\tvar nameSuggestions []string\n\tfor _, attrS := range schema.Attributes {\n\t\tif _, ok := hiddenAttrs[attrS.Name]; !ok {\n\t\t\t// Only suggest an attribute name if we didn't use it already.\n\t\t\tnameSuggestions = append(nameSuggestions, attrS.Name)\n\t\t}\n\t}\n\tfor _, blockS := range schema.Blocks {\n\t\t// Blocks can appear multiple times, so we'll suggest their type\n\t\t// names regardless of whether they've already been used.\n\t\tnameSuggestions = append(nameSuggestions, blockS.Type)\n\t}\n\n\tjsonAttrs, attrDiags := b.collectDeepAttrs(b.val, nil)\n\tdiags = append(diags, attrDiags...)\n\n\tfor _, attr := range jsonAttrs {\n\t\tk := attr.Name\n\t\tif k == \"//\" {\n\t\t\t// Ignore \"//\" keys in objects representing bodies, to allow\n\t\t\t// their use as comments.\n\t\t\tcontinue\n\t\t}\n\n\t\tif _, ok := hiddenAttrs[k]; !ok {\n\t\t\tsuggestion := nameSuggestion(k, nameSuggestions)\n\t\t\tif suggestion != \"\" {\n\t\t\t\tsuggestion = fmt.Sprintf(\" Did you mean %q?\", suggestion)\n\t\t\t}\n\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Extraneous JSON object property\",\n\t\t\t\tDetail:   fmt.Sprintf(\"No argument or block type is named %q.%s\", k, suggestion),\n\t\t\t\tSubject:  &attr.NameRange,\n\t\t\t\tContext:  attr.Range().Ptr(),\n\t\t\t})\n\t\t}\n\t}\n\n\treturn content, diags\n}\n\nfunc (b *body) PartialContent(schema *hcl.BodySchema) (*hcl.BodyContent, hcl.Body, hcl.Diagnostics) {\n\tvar diags hcl.Diagnostics\n\n\tjsonAttrs, attrDiags := b.collectDeepAttrs(b.val, nil)\n\tdiags = append(diags, attrDiags...)\n\n\tusedNames := map[string]struct{}{}\n\tif b.hiddenAttrs != nil {\n\t\tfor k := range b.hiddenAttrs {\n\t\t\tusedNames[k] = struct{}{}\n\t\t}\n\t}\n\n\tcontent := &hcl.BodyContent{\n\t\tAttributes: map[string]*hcl.Attribute{},\n\t\tBlocks:     nil,\n\n\t\tMissingItemRange: b.MissingItemRange(),\n\t}\n\n\t// Create some more convenient data structures for our work below.\n\tattrSchemas := map[string]hcl.AttributeSchema{}\n\tblockSchemas := map[string]hcl.BlockHeaderSchema{}\n\tfor _, attrS := range schema.Attributes {\n\t\tattrSchemas[attrS.Name] = attrS\n\t}\n\tfor _, blockS := range schema.Blocks {\n\t\tblockSchemas[blockS.Type] = blockS\n\t}\n\n\tfor _, jsonAttr := range jsonAttrs {\n\t\tattrName := jsonAttr.Name\n\t\tif _, used := b.hiddenAttrs[attrName]; used {\n\t\t\tcontinue\n\t\t}\n\n\t\tif attrS, defined := attrSchemas[attrName]; defined {\n\t\t\tif existing, exists := content.Attributes[attrName]; exists {\n\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\tSummary:  \"Duplicate argument\",\n\t\t\t\t\tDetail:   fmt.Sprintf(\"The argument %q was already set at %s.\", attrName, existing.Range),\n\t\t\t\t\tSubject:  &jsonAttr.NameRange,\n\t\t\t\t\tContext:  jsonAttr.Range().Ptr(),\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tcontent.Attributes[attrS.Name] = &hcl.Attribute{\n\t\t\t\tName:      attrS.Name,\n\t\t\t\tExpr:      &expression{src: jsonAttr.Value},\n\t\t\t\tRange:     hcl.RangeBetween(jsonAttr.NameRange, jsonAttr.Value.Range()),\n\t\t\t\tNameRange: jsonAttr.NameRange,\n\t\t\t}\n\t\t\tusedNames[attrName] = struct{}{}\n\n\t\t} else if blockS, defined := blockSchemas[attrName]; defined {\n\t\t\tbv := jsonAttr.Value\n\t\t\tblockDiags := b.unpackBlock(bv, blockS.Type, &jsonAttr.NameRange, blockS.LabelNames, nil, nil, &content.Blocks)\n\t\t\tdiags = append(diags, blockDiags...)\n\t\t\tusedNames[attrName] = struct{}{}\n\t\t}\n\n\t\t// We ignore anything that isn't defined because that's the\n\t\t// PartialContent contract. The Content method will catch leftovers.\n\t}\n\n\t// Make sure we got all the required attributes.\n\tfor _, attrS := range schema.Attributes {\n\t\tif !attrS.Required {\n\t\t\tcontinue\n\t\t}\n\t\tif _, defined := content.Attributes[attrS.Name]; !defined {\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Missing required argument\",\n\t\t\t\tDetail:   fmt.Sprintf(\"The argument %q is required, but no definition was found.\", attrS.Name),\n\t\t\t\tSubject:  b.MissingItemRange().Ptr(),\n\t\t\t})\n\t\t}\n\t}\n\n\tunusedBody := &body{\n\t\tval:         b.val,\n\t\thiddenAttrs: usedNames,\n\t}\n\n\treturn content, unusedBody, diags\n}\n\n// JustAttributes for JSON bodies interprets all properties of the wrapped\n// JSON object as attributes and returns them.\nfunc (b *body) JustAttributes() (hcl.Attributes, hcl.Diagnostics) {\n\tvar diags hcl.Diagnostics\n\tattrs := make(map[string]*hcl.Attribute)\n\n\tobj, ok := b.val.(*objectVal)\n\tif !ok {\n\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Incorrect JSON value type\",\n\t\t\tDetail:   \"A JSON object is required here, setting the arguments for this block.\",\n\t\t\tSubject:  b.val.StartRange().Ptr(),\n\t\t})\n\t\treturn attrs, diags\n\t}\n\n\tfor _, jsonAttr := range obj.Attrs {\n\t\tname := jsonAttr.Name\n\t\tif name == \"//\" {\n\t\t\t// Ignore \"//\" keys in objects representing bodies, to allow\n\t\t\t// their use as comments.\n\t\t\tcontinue\n\t\t}\n\n\t\tif _, hidden := b.hiddenAttrs[name]; hidden {\n\t\t\tcontinue\n\t\t}\n\n\t\tif existing, exists := attrs[name]; exists {\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Duplicate attribute definition\",\n\t\t\t\tDetail:   fmt.Sprintf(\"The argument %q was already set at %s.\", name, existing.Range),\n\t\t\t\tSubject:  &jsonAttr.NameRange,\n\t\t\t})\n\t\t\tcontinue\n\t\t}\n\n\t\tattrs[name] = &hcl.Attribute{\n\t\t\tName:      name,\n\t\t\tExpr:      &expression{src: jsonAttr.Value},\n\t\t\tRange:     hcl.RangeBetween(jsonAttr.NameRange, jsonAttr.Value.Range()),\n\t\t\tNameRange: jsonAttr.NameRange,\n\t\t}\n\t}\n\n\t// No diagnostics possible here, since the parser already took care of\n\t// finding duplicates and every JSON value can be a valid attribute value.\n\treturn attrs, diags\n}\n\nfunc (b *body) MissingItemRange() hcl.Range {\n\tswitch tv := b.val.(type) {\n\tcase *objectVal:\n\t\treturn tv.CloseRange\n\tcase *arrayVal:\n\t\treturn tv.OpenRange\n\tdefault:\n\t\t// Should not happen in correct operation, but might show up if the\n\t\t// input is invalid and we are producing partial results.\n\t\treturn tv.StartRange()\n\t}\n}\n\nfunc (b *body) unpackBlock(v node, typeName string, typeRange *hcl.Range, labelsLeft []string, labelsUsed []string, labelRanges []hcl.Range, blocks *hcl.Blocks) (diags hcl.Diagnostics) {\n\tif len(labelsLeft) > 0 {\n\t\tlabelName := labelsLeft[0]\n\t\tjsonAttrs, attrDiags := b.collectDeepAttrs(v, &labelName)\n\t\tdiags = append(diags, attrDiags...)\n\n\t\tif len(jsonAttrs) == 0 {\n\t\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Missing block label\",\n\t\t\t\tDetail:   fmt.Sprintf(\"At least one object property is required, whose name represents the %s block's %s.\", typeName, labelName),\n\t\t\t\tSubject:  v.StartRange().Ptr(),\n\t\t\t})\n\t\t\treturn\n\t\t}\n\t\tlabelsUsed := append(labelsUsed, \"\")\n\t\tlabelRanges := append(labelRanges, hcl.Range{})\n\t\tfor _, p := range jsonAttrs {\n\t\t\tpk := p.Name\n\t\t\tlabelsUsed[len(labelsUsed)-1] = pk\n\t\t\tlabelRanges[len(labelRanges)-1] = p.NameRange\n\t\t\tdiags = append(diags, b.unpackBlock(p.Value, typeName, typeRange, labelsLeft[1:], labelsUsed, labelRanges, blocks)...)\n\t\t}\n\t\treturn\n\t}\n\n\t// By the time we get here, we've peeled off all the labels and we're ready\n\t// to deal with the block's actual content.\n\n\t// need to copy the label slices because their underlying arrays will\n\t// continue to be mutated after we return.\n\tlabels := make([]string, len(labelsUsed))\n\tcopy(labels, labelsUsed)\n\tlabelR := make([]hcl.Range, len(labelRanges))\n\tcopy(labelR, labelRanges)\n\n\tswitch tv := v.(type) {\n\tcase *nullVal:\n\t\t// There is no block content, e.g the value is null.\n\t\treturn\n\tcase *objectVal:\n\t\t// Single instance of the block\n\t\t*blocks = append(*blocks, &hcl.Block{\n\t\t\tType:   typeName,\n\t\t\tLabels: labels,\n\t\t\tBody: &body{\n\t\t\t\tval: tv,\n\t\t\t},\n\n\t\t\tDefRange:    tv.OpenRange,\n\t\t\tTypeRange:   *typeRange,\n\t\t\tLabelRanges: labelR,\n\t\t})\n\tcase *arrayVal:\n\t\t// Multiple instances of the block\n\t\tfor _, av := range tv.Values {\n\t\t\t*blocks = append(*blocks, &hcl.Block{\n\t\t\t\tType:   typeName,\n\t\t\t\tLabels: labels,\n\t\t\t\tBody: &body{\n\t\t\t\t\tval: av, // might be mistyped; we'll find out when content is requested for this body\n\t\t\t\t},\n\n\t\t\t\tDefRange:    tv.OpenRange,\n\t\t\t\tTypeRange:   *typeRange,\n\t\t\t\tLabelRanges: labelR,\n\t\t\t})\n\t\t}\n\tdefault:\n\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Incorrect JSON value type\",\n\t\t\tDetail:   fmt.Sprintf(\"Either a JSON object or a JSON array is required, representing the contents of one or more %q blocks.\", typeName),\n\t\t\tSubject:  v.StartRange().Ptr(),\n\t\t})\n\t}\n\treturn\n}\n\n// collectDeepAttrs takes either a single object or an array of objects and\n// flattens it into a list of object attributes, collecting attributes from\n// all of the objects in a given array.\n//\n// Ordering is preserved, so a list of objects that each have one property\n// will result in those properties being returned in the same order as the\n// objects appeared in the array.\n//\n// This is appropriate for use only for objects representing bodies or labels\n// within a block.\n//\n// The labelName argument, if non-null, is used to tailor returned error\n// messages to refer to block labels rather than attributes and child blocks.\n// It has no other effect.\nfunc (b *body) collectDeepAttrs(v node, labelName *string) ([]*objectAttr, hcl.Diagnostics) {\n\tvar diags hcl.Diagnostics\n\tvar attrs []*objectAttr\n\n\tswitch tv := v.(type) {\n\tcase *nullVal:\n\t\t// If a value is null, then we don't return any attributes or return an error.\n\n\tcase *objectVal:\n\t\tattrs = append(attrs, tv.Attrs...)\n\n\tcase *arrayVal:\n\t\tfor _, ev := range tv.Values {\n\t\t\tswitch tev := ev.(type) {\n\t\t\tcase *objectVal:\n\t\t\t\tattrs = append(attrs, tev.Attrs...)\n\t\t\tdefault:\n\t\t\t\tif labelName != nil {\n\t\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\t\tSummary:  \"Incorrect JSON value type\",\n\t\t\t\t\t\tDetail:   fmt.Sprintf(\"A JSON object is required here, to specify %s labels for this block.\", *labelName),\n\t\t\t\t\t\tSubject:  ev.StartRange().Ptr(),\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\t\tSummary:  \"Incorrect JSON value type\",\n\t\t\t\t\t\tDetail:   \"A JSON object is required here, to define arguments and child blocks.\",\n\t\t\t\t\t\tSubject:  ev.StartRange().Ptr(),\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\tdefault:\n\t\tif labelName != nil {\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Incorrect JSON value type\",\n\t\t\t\tDetail:   fmt.Sprintf(\"Either a JSON object or JSON array of objects is required here, to specify %s labels for this block.\", *labelName),\n\t\t\t\tSubject:  v.StartRange().Ptr(),\n\t\t\t})\n\t\t} else {\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Incorrect JSON value type\",\n\t\t\t\tDetail:   \"Either a JSON object or JSON array of objects is required here, to define arguments and child blocks.\",\n\t\t\t\tSubject:  v.StartRange().Ptr(),\n\t\t\t})\n\t\t}\n\t}\n\n\treturn attrs, diags\n}\n\nfunc (e *expression) Value(ctx *hcl.EvalContext) (cty.Value, hcl.Diagnostics) {\n\tswitch v := e.src.(type) {\n\tcase *stringVal:\n\t\tif ctx != nil {\n\t\t\t// Parse string contents as a HCL native language expression.\n\t\t\t// We only do this if we have a context, so passing a nil context\n\t\t\t// is how the caller specifies that interpolations are not allowed\n\t\t\t// and that the string should just be returned verbatim.\n\t\t\ttemplateSrc := v.Value\n\t\t\texpr, diags := hclsyntax.ParseTemplate(\n\t\t\t\t[]byte(templateSrc),\n\t\t\t\tv.SrcRange.Filename,\n\n\t\t\t\t// This won't produce _exactly_ the right result, since\n\t\t\t\t// the hclsyntax parser can't \"see\" any escapes we removed\n\t\t\t\t// while parsing JSON, but it's better than nothing.\n\t\t\t\thcl.Pos{\n\t\t\t\t\tLine: v.SrcRange.Start.Line,\n\n\t\t\t\t\t// skip over the opening quote mark\n\t\t\t\t\tByte:   v.SrcRange.Start.Byte + 1,\n\t\t\t\t\tColumn: v.SrcRange.Start.Column + 1,\n\t\t\t\t},\n\t\t\t)\n\t\t\tif diags.HasErrors() {\n\t\t\t\treturn cty.DynamicVal, diags\n\t\t\t}\n\t\t\tval, evalDiags := expr.Value(ctx)\n\t\t\tdiags = append(diags, evalDiags...)\n\t\t\treturn val, diags\n\t\t}\n\n\t\treturn cty.StringVal(v.Value), nil\n\tcase *numberVal:\n\t\treturn cty.NumberVal(v.Value), nil\n\tcase *booleanVal:\n\t\treturn cty.BoolVal(v.Value), nil\n\tcase *arrayVal:\n\t\tvals := []cty.Value{}\n\t\tfor _, jsonVal := range v.Values {\n\t\t\tval, _ := (&expression{src: jsonVal}).Value(ctx)\n\t\t\tvals = append(vals, val)\n\t\t}\n\t\treturn cty.TupleVal(vals), nil\n\tcase *objectVal:\n\t\tvar diags hcl.Diagnostics\n\t\tattrs := map[string]cty.Value{}\n\t\tattrRanges := map[string]hcl.Range{}\n\t\tknown := true\n\t\tfor _, jsonAttr := range v.Attrs {\n\t\t\t// In this one context we allow keys to contain interpolation\n\t\t\t// expressions too, assuming we're evaluating in interpolation\n\t\t\t// mode. This achieves parity with the native syntax where\n\t\t\t// object expressions can have dynamic keys, while block contents\n\t\t\t// may not.\n\t\t\tname, nameDiags := (&expression{src: &stringVal{\n\t\t\t\tValue:    jsonAttr.Name,\n\t\t\t\tSrcRange: jsonAttr.NameRange,\n\t\t\t}}).Value(ctx)\n\t\t\tvalExpr := &expression{src: jsonAttr.Value}\n\t\t\tval, valDiags := valExpr.Value(ctx)\n\t\t\tdiags = append(diags, nameDiags...)\n\t\t\tdiags = append(diags, valDiags...)\n\n\t\t\tvar err error\n\t\t\tname, err = convert.Convert(name, cty.String)\n\t\t\tif err != nil {\n\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\tSeverity:    hcl.DiagError,\n\t\t\t\t\tSummary:     \"Invalid object key expression\",\n\t\t\t\t\tDetail:      fmt.Sprintf(\"Cannot use this expression as an object key: %s.\", err),\n\t\t\t\t\tSubject:     &jsonAttr.NameRange,\n\t\t\t\t\tExpression:  valExpr,\n\t\t\t\t\tEvalContext: ctx,\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif name.IsNull() {\n\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\tSeverity:    hcl.DiagError,\n\t\t\t\t\tSummary:     \"Invalid object key expression\",\n\t\t\t\t\tDetail:      \"Cannot use null value as an object key.\",\n\t\t\t\t\tSubject:     &jsonAttr.NameRange,\n\t\t\t\t\tExpression:  valExpr,\n\t\t\t\t\tEvalContext: ctx,\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif !name.IsKnown() {\n\t\t\t\t// This is a bit of a weird case, since our usual rules require\n\t\t\t\t// us to tolerate unknowns and just represent the result as\n\t\t\t\t// best we can but if we don't know the key then we can't\n\t\t\t\t// know the type of our object at all, and thus we must turn\n\t\t\t\t// the whole thing into cty.DynamicVal. This is consistent with\n\t\t\t\t// how this situation is handled in the native syntax.\n\t\t\t\t// We'll keep iterating so we can collect other errors in\n\t\t\t\t// subsequent attributes.\n\t\t\t\tknown = false\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tnameStr := name.AsString()\n\t\t\tif _, defined := attrs[nameStr]; defined {\n\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\tSeverity:    hcl.DiagError,\n\t\t\t\t\tSummary:     \"Duplicate object attribute\",\n\t\t\t\t\tDetail:      fmt.Sprintf(\"An attribute named %q was already defined at %s.\", nameStr, attrRanges[nameStr]),\n\t\t\t\t\tSubject:     &jsonAttr.NameRange,\n\t\t\t\t\tExpression:  e,\n\t\t\t\t\tEvalContext: ctx,\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tattrs[nameStr] = val\n\t\t\tattrRanges[nameStr] = jsonAttr.NameRange\n\t\t}\n\t\tif !known {\n\t\t\t// We encountered an unknown key somewhere along the way, so\n\t\t\t// we can't know what our type will eventually be.\n\t\t\treturn cty.DynamicVal, diags\n\t\t}\n\t\treturn cty.ObjectVal(attrs), diags\n\tcase *nullVal:\n\t\treturn cty.NullVal(cty.DynamicPseudoType), nil\n\tdefault:\n\t\t// Default to DynamicVal so that ASTs containing invalid nodes can\n\t\t// still be partially-evaluated.\n\t\treturn cty.DynamicVal, nil\n\t}\n}\n\nfunc (e *expression) Variables() []hcl.Traversal {\n\tvar vars []hcl.Traversal\n\n\tswitch v := e.src.(type) {\n\tcase *stringVal:\n\t\ttemplateSrc := v.Value\n\t\texpr, diags := hclsyntax.ParseTemplate(\n\t\t\t[]byte(templateSrc),\n\t\t\tv.SrcRange.Filename,\n\n\t\t\t// This won't produce _exactly_ the right result, since\n\t\t\t// the hclsyntax parser can't \"see\" any escapes we removed\n\t\t\t// while parsing JSON, but it's better than nothing.\n\t\t\thcl.Pos{\n\t\t\t\tLine: v.SrcRange.Start.Line,\n\n\t\t\t\t// skip over the opening quote mark\n\t\t\t\tByte:   v.SrcRange.Start.Byte + 1,\n\t\t\t\tColumn: v.SrcRange.Start.Column + 1,\n\t\t\t},\n\t\t)\n\t\tif diags.HasErrors() {\n\t\t\treturn vars\n\t\t}\n\t\treturn expr.Variables()\n\n\tcase *arrayVal:\n\t\tfor _, jsonVal := range v.Values {\n\t\t\tvars = append(vars, (&expression{src: jsonVal}).Variables()...)\n\t\t}\n\tcase *objectVal:\n\t\tfor _, jsonAttr := range v.Attrs {\n\t\t\tkeyExpr := &stringVal{ // we're going to treat key as an expression in this context\n\t\t\t\tValue:    jsonAttr.Name,\n\t\t\t\tSrcRange: jsonAttr.NameRange,\n\t\t\t}\n\t\t\tvars = append(vars, (&expression{src: keyExpr}).Variables()...)\n\t\t\tvars = append(vars, (&expression{src: jsonAttr.Value}).Variables()...)\n\t\t}\n\t}\n\n\treturn vars\n}\n\nfunc (e *expression) Range() hcl.Range {\n\treturn e.src.Range()\n}\n\nfunc (e *expression) StartRange() hcl.Range {\n\treturn e.src.StartRange()\n}\n\n// Implementation for hcl.AbsTraversalForExpr.\nfunc (e *expression) AsTraversal() hcl.Traversal {\n\t// In JSON-based syntax a traversal is given as a string containing\n\t// traversal syntax as defined by hclsyntax.ParseTraversalAbs.\n\n\tswitch v := e.src.(type) {\n\tcase *stringVal:\n\t\ttraversal, diags := hclsyntax.ParseTraversalAbs([]byte(v.Value), v.SrcRange.Filename, v.SrcRange.Start)\n\t\tif diags.HasErrors() {\n\t\t\treturn nil\n\t\t}\n\t\treturn traversal\n\tdefault:\n\t\treturn nil\n\t}\n}\n\n// Implementation for hcl.ExprCall.\nfunc (e *expression) ExprCall() *hcl.StaticCall {\n\t// In JSON-based syntax a static call is given as a string containing\n\t// an expression in the native syntax that also supports ExprCall.\n\n\tswitch v := e.src.(type) {\n\tcase *stringVal:\n\t\texpr, diags := hclsyntax.ParseExpression([]byte(v.Value), v.SrcRange.Filename, v.SrcRange.Start)\n\t\tif diags.HasErrors() {\n\t\t\treturn nil\n\t\t}\n\n\t\tcall, diags := hcl.ExprCall(expr)\n\t\tif diags.HasErrors() {\n\t\t\treturn nil\n\t\t}\n\n\t\treturn call\n\tdefault:\n\t\treturn nil\n\t}\n}\n\n// Implementation for hcl.ExprList.\nfunc (e *expression) ExprList() []hcl.Expression {\n\tswitch v := e.src.(type) {\n\tcase *arrayVal:\n\t\tret := make([]hcl.Expression, len(v.Values))\n\t\tfor i, node := range v.Values {\n\t\t\tret[i] = &expression{src: node}\n\t\t}\n\t\treturn ret\n\tdefault:\n\t\treturn nil\n\t}\n}\n\n// Implementation for hcl.ExprMap.\nfunc (e *expression) ExprMap() []hcl.KeyValuePair {\n\tswitch v := e.src.(type) {\n\tcase *objectVal:\n\t\tret := make([]hcl.KeyValuePair, len(v.Attrs))\n\t\tfor i, jsonAttr := range v.Attrs {\n\t\t\tret[i] = hcl.KeyValuePair{\n\t\t\t\tKey: &expression{src: &stringVal{\n\t\t\t\t\tValue:    jsonAttr.Name,\n\t\t\t\t\tSrcRange: jsonAttr.NameRange,\n\t\t\t\t}},\n\t\t\t\tValue: &expression{src: jsonAttr.Value},\n\t\t\t}\n\t\t}\n\t\treturn ret\n\tdefault:\n\t\treturn nil\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcl/json/tokentype_string.go",
    "content": "// Code generated by \"stringer -type tokenType scanner.go\"; DO NOT EDIT.\n\npackage json\n\nimport \"strconv\"\n\nconst _tokenType_name = \"tokenInvalidtokenCommatokenColontokenEqualstokenKeywordtokenNumbertokenStringtokenBrackOtokenBrackCtokenBraceOtokenBraceCtokenEOF\"\n\nvar _tokenType_map = map[tokenType]string{\n\t0:    _tokenType_name[0:12],\n\t44:   _tokenType_name[12:22],\n\t58:   _tokenType_name[22:32],\n\t61:   _tokenType_name[32:43],\n\t75:   _tokenType_name[43:55],\n\t78:   _tokenType_name[55:66],\n\t83:   _tokenType_name[66:77],\n\t91:   _tokenType_name[77:88],\n\t93:   _tokenType_name[88:99],\n\t123:  _tokenType_name[99:110],\n\t125:  _tokenType_name[110:121],\n\t9220: _tokenType_name[121:129],\n}\n\nfunc (i tokenType) String() string {\n\tif str, ok := _tokenType_map[i]; ok {\n\t\treturn str\n\t}\n\treturn \"tokenType(\" + strconv.FormatInt(int64(i), 10) + \")\"\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcl/merged.go",
    "content": "package hcl\n\nimport (\n\t\"fmt\"\n)\n\n// MergeFiles combines the given files to produce a single body that contains\n// configuration from all of the given files.\n//\n// The ordering of the given files decides the order in which contained\n// elements will be returned. If any top-level attributes are defined with\n// the same name across multiple files, a diagnostic will be produced from\n// the Content and PartialContent methods describing this error in a\n// user-friendly way.\nfunc MergeFiles(files []*File) Body {\n\tvar bodies []Body\n\tfor _, file := range files {\n\t\tbodies = append(bodies, file.Body)\n\t}\n\treturn MergeBodies(bodies)\n}\n\n// MergeBodies is like MergeFiles except it deals directly with bodies, rather\n// than with entire files.\nfunc MergeBodies(bodies []Body) Body {\n\tif len(bodies) == 0 {\n\t\t// Swap out for our singleton empty body, to reduce the number of\n\t\t// empty slices we have hanging around.\n\t\treturn emptyBody\n\t}\n\n\t// If any of the given bodies are already merged bodies, we'll unpack\n\t// to flatten to a single mergedBodies, since that's conceptually simpler.\n\t// This also, as a side-effect, eliminates any empty bodies, since\n\t// empties are merged bodies with no inner bodies.\n\tvar newLen int\n\tvar flatten bool\n\tfor _, body := range bodies {\n\t\tif children, merged := body.(mergedBodies); merged {\n\t\t\tnewLen += len(children)\n\t\t\tflatten = true\n\t\t} else {\n\t\t\tnewLen++\n\t\t}\n\t}\n\n\tif !flatten { // not just newLen == len, because we might have mergedBodies with single bodies inside\n\t\treturn mergedBodies(bodies)\n\t}\n\n\tif newLen == 0 {\n\t\t// Don't allocate a new empty when we already have one\n\t\treturn emptyBody\n\t}\n\n\tnew := make([]Body, 0, newLen)\n\tfor _, body := range bodies {\n\t\tif children, merged := body.(mergedBodies); merged {\n\t\t\tnew = append(new, children...)\n\t\t} else {\n\t\t\tnew = append(new, body)\n\t\t}\n\t}\n\treturn mergedBodies(new)\n}\n\nvar emptyBody = mergedBodies([]Body{})\n\n// EmptyBody returns a body with no content. This body can be used as a\n// placeholder when a body is required but no body content is available.\nfunc EmptyBody() Body {\n\treturn emptyBody\n}\n\ntype mergedBodies []Body\n\n// Content returns the content produced by applying the given schema to all\n// of the merged bodies and merging the result.\n//\n// Although required attributes _are_ supported, they should be used sparingly\n// with merged bodies since in this case there is no contextual information\n// with which to return good diagnostics. Applications working with merged\n// bodies may wish to mark all attributes as optional and then check for\n// required attributes afterwards, to produce better diagnostics.\nfunc (mb mergedBodies) Content(schema *BodySchema) (*BodyContent, Diagnostics) {\n\t// the returned body will always be empty in this case, because mergedContent\n\t// will only ever call Content on the child bodies.\n\tcontent, _, diags := mb.mergedContent(schema, false)\n\treturn content, diags\n}\n\nfunc (mb mergedBodies) PartialContent(schema *BodySchema) (*BodyContent, Body, Diagnostics) {\n\treturn mb.mergedContent(schema, true)\n}\n\nfunc (mb mergedBodies) JustAttributes() (Attributes, Diagnostics) {\n\tattrs := make(map[string]*Attribute)\n\tvar diags Diagnostics\n\n\tfor _, body := range mb {\n\t\tthisAttrs, thisDiags := body.JustAttributes()\n\n\t\tif len(thisDiags) != 0 {\n\t\t\tdiags = append(diags, thisDiags...)\n\t\t}\n\n\t\tif thisAttrs != nil {\n\t\t\tfor name, attr := range thisAttrs {\n\t\t\t\tif existing := attrs[name]; existing != nil {\n\t\t\t\t\tdiags = diags.Append(&Diagnostic{\n\t\t\t\t\t\tSeverity: DiagError,\n\t\t\t\t\t\tSummary:  \"Duplicate argument\",\n\t\t\t\t\t\tDetail: fmt.Sprintf(\n\t\t\t\t\t\t\t\"Argument %q was already set at %s\",\n\t\t\t\t\t\t\tname, existing.NameRange.String(),\n\t\t\t\t\t\t),\n\t\t\t\t\t\tSubject: &attr.NameRange,\n\t\t\t\t\t})\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tattrs[name] = attr\n\t\t\t}\n\t\t}\n\t}\n\n\treturn attrs, diags\n}\n\nfunc (mb mergedBodies) MissingItemRange() Range {\n\tif len(mb) == 0 {\n\t\t// Nothing useful to return here, so we'll return some garbage.\n\t\treturn Range{\n\t\t\tFilename: \"<empty>\",\n\t\t}\n\t}\n\n\t// arbitrarily use the first body's missing item range\n\treturn mb[0].MissingItemRange()\n}\n\nfunc (mb mergedBodies) mergedContent(schema *BodySchema, partial bool) (*BodyContent, Body, Diagnostics) {\n\t// We need to produce a new schema with none of the attributes marked as\n\t// required, since _any one_ of our bodies can contribute an attribute value.\n\t// We'll separately check that all required attributes are present at\n\t// the end.\n\tmergedSchema := &BodySchema{\n\t\tBlocks: schema.Blocks,\n\t}\n\tfor _, attrS := range schema.Attributes {\n\t\tmergedAttrS := attrS\n\t\tmergedAttrS.Required = false\n\t\tmergedSchema.Attributes = append(mergedSchema.Attributes, mergedAttrS)\n\t}\n\n\tvar mergedLeftovers []Body\n\tcontent := &BodyContent{\n\t\tAttributes: map[string]*Attribute{},\n\t}\n\n\tvar diags Diagnostics\n\tfor _, body := range mb {\n\t\tvar thisContent *BodyContent\n\t\tvar thisLeftovers Body\n\t\tvar thisDiags Diagnostics\n\n\t\tif partial {\n\t\t\tthisContent, thisLeftovers, thisDiags = body.PartialContent(mergedSchema)\n\t\t} else {\n\t\t\tthisContent, thisDiags = body.Content(mergedSchema)\n\t\t}\n\n\t\tif thisLeftovers != nil {\n\t\t\tmergedLeftovers = append(mergedLeftovers, thisLeftovers)\n\t\t}\n\t\tif len(thisDiags) != 0 {\n\t\t\tdiags = append(diags, thisDiags...)\n\t\t}\n\n\t\tif thisContent.Attributes != nil {\n\t\t\tfor name, attr := range thisContent.Attributes {\n\t\t\t\tif existing := content.Attributes[name]; existing != nil {\n\t\t\t\t\tdiags = diags.Append(&Diagnostic{\n\t\t\t\t\t\tSeverity: DiagError,\n\t\t\t\t\t\tSummary:  \"Duplicate argument\",\n\t\t\t\t\t\tDetail: fmt.Sprintf(\n\t\t\t\t\t\t\t\"Argument %q was already set at %s\",\n\t\t\t\t\t\t\tname, existing.NameRange.String(),\n\t\t\t\t\t\t),\n\t\t\t\t\t\tSubject: &attr.NameRange,\n\t\t\t\t\t})\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tcontent.Attributes[name] = attr\n\t\t\t}\n\t\t}\n\n\t\tif len(thisContent.Blocks) != 0 {\n\t\t\tcontent.Blocks = append(content.Blocks, thisContent.Blocks...)\n\t\t}\n\t}\n\n\t// Finally, we check for required attributes.\n\tfor _, attrS := range schema.Attributes {\n\t\tif !attrS.Required {\n\t\t\tcontinue\n\t\t}\n\n\t\tif content.Attributes[attrS.Name] == nil {\n\t\t\t// We don't have any context here to produce a good diagnostic,\n\t\t\t// which is why we warn in the Content docstring to minimize the\n\t\t\t// use of required attributes on merged bodies.\n\t\t\tdiags = diags.Append(&Diagnostic{\n\t\t\t\tSeverity: DiagError,\n\t\t\t\tSummary:  \"Missing required argument\",\n\t\t\t\tDetail: fmt.Sprintf(\n\t\t\t\t\t\"The argument %q is required, but was not set.\",\n\t\t\t\t\tattrS.Name,\n\t\t\t\t),\n\t\t\t})\n\t\t}\n\t}\n\n\tleftoverBody := MergeBodies(mergedLeftovers)\n\treturn content, leftoverBody, diags\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcl/ops.go",
    "content": "package hcl\n\nimport (\n\t\"fmt\"\n\t\"math/big\"\n\n\t\"github.com/zclconf/go-cty/cty\"\n\t\"github.com/zclconf/go-cty/cty/convert\"\n)\n\n// Index is a helper function that performs the same operation as the index\n// operator in the HCL expression language. That is, the result is the\n// same as it would be for collection[key] in a configuration expression.\n//\n// This is exported so that applications can perform indexing in a manner\n// consistent with how the language does it, including handling of null and\n// unknown values, etc.\n//\n// Diagnostics are produced if the given combination of values is not valid.\n// Therefore a pointer to a source range must be provided to use in diagnostics,\n// though nil can be provided if the calling application is going to\n// ignore the subject of the returned diagnostics anyway.\nfunc Index(collection, key cty.Value, srcRange *Range) (cty.Value, Diagnostics) {\n\tif collection.IsNull() {\n\t\treturn cty.DynamicVal, Diagnostics{\n\t\t\t{\n\t\t\t\tSeverity: DiagError,\n\t\t\t\tSummary:  \"Attempt to index null value\",\n\t\t\t\tDetail:   \"This value is null, so it does not have any indices.\",\n\t\t\t\tSubject:  srcRange,\n\t\t\t},\n\t\t}\n\t}\n\tif key.IsNull() {\n\t\treturn cty.DynamicVal, Diagnostics{\n\t\t\t{\n\t\t\t\tSeverity: DiagError,\n\t\t\t\tSummary:  \"Invalid index\",\n\t\t\t\tDetail:   \"Can't use a null value as an indexing key.\",\n\t\t\t\tSubject:  srcRange,\n\t\t\t},\n\t\t}\n\t}\n\tty := collection.Type()\n\tkty := key.Type()\n\tif kty == cty.DynamicPseudoType || ty == cty.DynamicPseudoType {\n\t\treturn cty.DynamicVal, nil\n\t}\n\n\tswitch {\n\n\tcase ty.IsListType() || ty.IsTupleType() || ty.IsMapType():\n\t\tvar wantType cty.Type\n\t\tswitch {\n\t\tcase ty.IsListType() || ty.IsTupleType():\n\t\t\twantType = cty.Number\n\t\tcase ty.IsMapType():\n\t\t\twantType = cty.String\n\t\tdefault:\n\t\t\t// should never happen\n\t\t\tpanic(\"don't know what key type we want\")\n\t\t}\n\n\t\tkey, keyErr := convert.Convert(key, wantType)\n\t\tif keyErr != nil {\n\t\t\treturn cty.DynamicVal, Diagnostics{\n\t\t\t\t{\n\t\t\t\t\tSeverity: DiagError,\n\t\t\t\t\tSummary:  \"Invalid index\",\n\t\t\t\t\tDetail: fmt.Sprintf(\n\t\t\t\t\t\t\"The given key does not identify an element in this collection value: %s.\",\n\t\t\t\t\t\tkeyErr.Error(),\n\t\t\t\t\t),\n\t\t\t\t\tSubject: srcRange,\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\n\t\thas := collection.HasIndex(key)\n\t\tif !has.IsKnown() {\n\t\t\tif ty.IsTupleType() {\n\t\t\t\treturn cty.DynamicVal, nil\n\t\t\t} else {\n\t\t\t\treturn cty.UnknownVal(ty.ElementType()), nil\n\t\t\t}\n\t\t}\n\t\tif has.False() {\n\t\t\t// We have a more specialized error message for the situation of\n\t\t\t// using a fractional number to index into a sequence, because\n\t\t\t// that will tend to happen if the user is trying to use division\n\t\t\t// to calculate an index and not realizing that HCL does float\n\t\t\t// division rather than integer division.\n\t\t\tif (ty.IsListType() || ty.IsTupleType()) && key.Type().Equals(cty.Number) {\n\t\t\t\tif key.IsKnown() && !key.IsNull() {\n\t\t\t\t\tbf := key.AsBigFloat()\n\t\t\t\t\tif _, acc := bf.Int(nil); acc != big.Exact {\n\t\t\t\t\t\treturn cty.DynamicVal, Diagnostics{\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tSeverity: DiagError,\n\t\t\t\t\t\t\t\tSummary:  \"Invalid index\",\n\t\t\t\t\t\t\t\tDetail:   fmt.Sprintf(\"The given key does not identify an element in this collection value: indexing a sequence requires a whole number, but the given index (%g) has a fractional part.\", bf),\n\t\t\t\t\t\t\t\tSubject:  srcRange,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn cty.DynamicVal, Diagnostics{\n\t\t\t\t{\n\t\t\t\t\tSeverity: DiagError,\n\t\t\t\t\tSummary:  \"Invalid index\",\n\t\t\t\t\tDetail:   \"The given key does not identify an element in this collection value.\",\n\t\t\t\t\tSubject:  srcRange,\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\n\t\treturn collection.Index(key), nil\n\n\tcase ty.IsObjectType():\n\t\tkey, keyErr := convert.Convert(key, cty.String)\n\t\tif keyErr != nil {\n\t\t\treturn cty.DynamicVal, Diagnostics{\n\t\t\t\t{\n\t\t\t\t\tSeverity: DiagError,\n\t\t\t\t\tSummary:  \"Invalid index\",\n\t\t\t\t\tDetail: fmt.Sprintf(\n\t\t\t\t\t\t\"The given key does not identify an element in this collection value: %s.\",\n\t\t\t\t\t\tkeyErr.Error(),\n\t\t\t\t\t),\n\t\t\t\t\tSubject: srcRange,\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\t\tif !collection.IsKnown() {\n\t\t\treturn cty.DynamicVal, nil\n\t\t}\n\t\tif !key.IsKnown() {\n\t\t\treturn cty.DynamicVal, nil\n\t\t}\n\n\t\tattrName := key.AsString()\n\n\t\tif !ty.HasAttribute(attrName) {\n\t\t\treturn cty.DynamicVal, Diagnostics{\n\t\t\t\t{\n\t\t\t\t\tSeverity: DiagError,\n\t\t\t\t\tSummary:  \"Invalid index\",\n\t\t\t\t\tDetail:   \"The given key does not identify an element in this collection value.\",\n\t\t\t\t\tSubject:  srcRange,\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\n\t\treturn collection.GetAttr(attrName), nil\n\n\tdefault:\n\t\treturn cty.DynamicVal, Diagnostics{\n\t\t\t{\n\t\t\t\tSeverity: DiagError,\n\t\t\t\tSummary:  \"Invalid index\",\n\t\t\t\tDetail:   \"This value does not have any indices.\",\n\t\t\t\tSubject:  srcRange,\n\t\t\t},\n\t\t}\n\t}\n\n}\n\n// GetAttr is a helper function that performs the same operation as the\n// attribute access in the HCL expression language. That is, the result is the\n// same as it would be for obj.attr in a configuration expression.\n//\n// This is exported so that applications can access attributes in a manner\n// consistent with how the language does it, including handling of null and\n// unknown values, etc.\n//\n// Diagnostics are produced if the given combination of values is not valid.\n// Therefore a pointer to a source range must be provided to use in diagnostics,\n// though nil can be provided if the calling application is going to\n// ignore the subject of the returned diagnostics anyway.\nfunc GetAttr(obj cty.Value, attrName string, srcRange *Range) (cty.Value, Diagnostics) {\n\tif obj.IsNull() {\n\t\treturn cty.DynamicVal, Diagnostics{\n\t\t\t{\n\t\t\t\tSeverity: DiagError,\n\t\t\t\tSummary:  \"Attempt to get attribute from null value\",\n\t\t\t\tDetail:   \"This value is null, so it does not have any attributes.\",\n\t\t\t\tSubject:  srcRange,\n\t\t\t},\n\t\t}\n\t}\n\n\tty := obj.Type()\n\tswitch {\n\tcase ty.IsObjectType():\n\t\tif !ty.HasAttribute(attrName) {\n\t\t\treturn cty.DynamicVal, Diagnostics{\n\t\t\t\t{\n\t\t\t\t\tSeverity: DiagError,\n\t\t\t\t\tSummary:  \"Unsupported attribute\",\n\t\t\t\t\tDetail:   fmt.Sprintf(\"This object does not have an attribute named %q.\", attrName),\n\t\t\t\t\tSubject:  srcRange,\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\n\t\tif !obj.IsKnown() {\n\t\t\treturn cty.UnknownVal(ty.AttributeType(attrName)), nil\n\t\t}\n\n\t\treturn obj.GetAttr(attrName), nil\n\tcase ty.IsMapType():\n\t\tif !obj.IsKnown() {\n\t\t\treturn cty.UnknownVal(ty.ElementType()), nil\n\t\t}\n\n\t\tidx := cty.StringVal(attrName)\n\t\tif obj.HasIndex(idx).False() {\n\t\t\treturn cty.DynamicVal, Diagnostics{\n\t\t\t\t{\n\t\t\t\t\tSeverity: DiagError,\n\t\t\t\t\tSummary:  \"Missing map element\",\n\t\t\t\t\tDetail:   fmt.Sprintf(\"This map does not have an element with the key %q.\", attrName),\n\t\t\t\t\tSubject:  srcRange,\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\n\t\treturn obj.Index(idx), nil\n\tcase ty == cty.DynamicPseudoType:\n\t\treturn cty.DynamicVal, nil\n\tdefault:\n\t\treturn cty.DynamicVal, Diagnostics{\n\t\t\t{\n\t\t\t\tSeverity: DiagError,\n\t\t\t\tSummary:  \"Unsupported attribute\",\n\t\t\t\tDetail:   \"This value does not have any attributes.\",\n\t\t\t\tSubject:  srcRange,\n\t\t\t},\n\t\t}\n\t}\n\n}\n\n// ApplyPath is a helper function that applies a cty.Path to a value using the\n// indexing and attribute access operations from HCL.\n//\n// This is similar to calling the path's own Apply method, but ApplyPath uses\n// the more relaxed typing rules that apply to these operations in HCL, rather\n// than cty's relatively-strict rules. ApplyPath is implemented in terms of\n// Index and GetAttr, and so it has the same behavior for individual steps\n// but will stop and return any errors returned by intermediate steps.\n//\n// Diagnostics are produced if the given path cannot be applied to the given\n// value. Therefore a pointer to a source range must be provided to use in\n// diagnostics, though nil can be provided if the calling application is going\n// to ignore the subject of the returned diagnostics anyway.\nfunc ApplyPath(val cty.Value, path cty.Path, srcRange *Range) (cty.Value, Diagnostics) {\n\tvar diags Diagnostics\n\n\tfor _, step := range path {\n\t\tvar stepDiags Diagnostics\n\t\tswitch ts := step.(type) {\n\t\tcase cty.IndexStep:\n\t\t\tval, stepDiags = Index(val, ts.Key, srcRange)\n\t\tcase cty.GetAttrStep:\n\t\t\tval, stepDiags = GetAttr(val, ts.Name, srcRange)\n\t\tdefault:\n\t\t\t// Should never happen because the above are all of the step types.\n\t\t\tdiags = diags.Append(&Diagnostic{\n\t\t\t\tSeverity: DiagError,\n\t\t\t\tSummary:  \"Invalid path step\",\n\t\t\t\tDetail:   fmt.Sprintf(\"Go type %T is not a valid path step. This is a bug in this program.\", step),\n\t\t\t\tSubject:  srcRange,\n\t\t\t})\n\t\t\treturn cty.DynamicVal, diags\n\t\t}\n\n\t\tdiags = append(diags, stepDiags...)\n\t\tif stepDiags.HasErrors() {\n\t\t\treturn cty.DynamicVal, diags\n\t\t}\n\t}\n\n\treturn val, diags\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcl/pos.go",
    "content": "package hcl\n\nimport \"fmt\"\n\n// Pos represents a single position in a source file, by addressing the\n// start byte of a unicode character encoded in UTF-8.\n//\n// Pos is generally used only in the context of a Range, which then defines\n// which source file the position is within.\ntype Pos struct {\n\t// Line is the source code line where this position points. Lines are\n\t// counted starting at 1 and incremented for each newline character\n\t// encountered.\n\tLine int\n\n\t// Column is the source code column where this position points, in\n\t// unicode characters, with counting starting at 1.\n\t//\n\t// Column counts characters as they appear visually, so for example a\n\t// latin letter with a combining diacritic mark counts as one character.\n\t// This is intended for rendering visual markers against source code in\n\t// contexts where these diacritics would be rendered in a single character\n\t// cell. Technically speaking, Column is counting grapheme clusters as\n\t// used in unicode normalization.\n\tColumn int\n\n\t// Byte is the byte offset into the file where the indicated character\n\t// begins. This is a zero-based offset to the first byte of the first\n\t// UTF-8 codepoint sequence in the character, and thus gives a position\n\t// that can be resolved _without_ awareness of Unicode characters.\n\tByte int\n}\n\n// InitialPos is a suitable position to use to mark the start of a file.\nvar InitialPos = Pos{Byte: 0, Line: 1, Column: 1}\n\n// Range represents a span of characters between two positions in a source\n// file.\n//\n// This struct is usually used by value in types that represent AST nodes,\n// but by pointer in types that refer to the positions of other objects,\n// such as in diagnostics.\ntype Range struct {\n\t// Filename is the name of the file into which this range's positions\n\t// point.\n\tFilename string\n\n\t// Start and End represent the bounds of this range. Start is inclusive\n\t// and End is exclusive.\n\tStart, End Pos\n}\n\n// RangeBetween returns a new range that spans from the beginning of the\n// start range to the end of the end range.\n//\n// The result is meaningless if the two ranges do not belong to the same\n// source file or if the end range appears before the start range.\nfunc RangeBetween(start, end Range) Range {\n\treturn Range{\n\t\tFilename: start.Filename,\n\t\tStart:    start.Start,\n\t\tEnd:      end.End,\n\t}\n}\n\n// RangeOver returns a new range that covers both of the given ranges and\n// possibly additional content between them if the two ranges do not overlap.\n//\n// If either range is empty then it is ignored. The result is empty if both\n// given ranges are empty.\n//\n// The result is meaningless if the two ranges to not belong to the same\n// source file.\nfunc RangeOver(a, b Range) Range {\n\tif a.Empty() {\n\t\treturn b\n\t}\n\tif b.Empty() {\n\t\treturn a\n\t}\n\n\tvar start, end Pos\n\tif a.Start.Byte < b.Start.Byte {\n\t\tstart = a.Start\n\t} else {\n\t\tstart = b.Start\n\t}\n\tif a.End.Byte > b.End.Byte {\n\t\tend = a.End\n\t} else {\n\t\tend = b.End\n\t}\n\treturn Range{\n\t\tFilename: a.Filename,\n\t\tStart:    start,\n\t\tEnd:      end,\n\t}\n}\n\n// ContainsPos returns true if and only if the given position is contained within\n// the receiving range.\n//\n// In the unlikely case that the line/column information disagree with the byte\n// offset information in the given position or receiving range, the byte\n// offsets are given priority.\nfunc (r Range) ContainsPos(pos Pos) bool {\n\treturn r.ContainsOffset(pos.Byte)\n}\n\n// ContainsOffset returns true if and only if the given byte offset is within\n// the receiving Range.\nfunc (r Range) ContainsOffset(offset int) bool {\n\treturn offset >= r.Start.Byte && offset < r.End.Byte\n}\n\n// Ptr returns a pointer to a copy of the receiver. This is a convenience when\n// ranges in places where pointers are required, such as in Diagnostic, but\n// the range in question is returned from a method. Go would otherwise not\n// allow one to take the address of a function call.\nfunc (r Range) Ptr() *Range {\n\treturn &r\n}\n\n// String returns a compact string representation of the receiver.\n// Callers should generally prefer to present a range more visually,\n// e.g. via markers directly on the relevant portion of source code.\nfunc (r Range) String() string {\n\tif r.Start.Line == r.End.Line {\n\t\treturn fmt.Sprintf(\n\t\t\t\"%s:%d,%d-%d\",\n\t\t\tr.Filename,\n\t\t\tr.Start.Line, r.Start.Column,\n\t\t\tr.End.Column,\n\t\t)\n\t} else {\n\t\treturn fmt.Sprintf(\n\t\t\t\"%s:%d,%d-%d,%d\",\n\t\t\tr.Filename,\n\t\t\tr.Start.Line, r.Start.Column,\n\t\t\tr.End.Line, r.End.Column,\n\t\t)\n\t}\n}\n\nfunc (r Range) Empty() bool {\n\treturn r.Start.Byte == r.End.Byte\n}\n\n// CanSliceBytes returns true if SliceBytes could return an accurate\n// sub-slice of the given slice.\n//\n// This effectively tests whether the start and end offsets of the range\n// are within the bounds of the slice, and thus whether SliceBytes can be\n// trusted to produce an accurate start and end position within that slice.\nfunc (r Range) CanSliceBytes(b []byte) bool {\n\tswitch {\n\tcase r.Start.Byte < 0 || r.Start.Byte > len(b):\n\t\treturn false\n\tcase r.End.Byte < 0 || r.End.Byte > len(b):\n\t\treturn false\n\tcase r.End.Byte < r.Start.Byte:\n\t\treturn false\n\tdefault:\n\t\treturn true\n\t}\n}\n\n// SliceBytes returns a sub-slice of the given slice that is covered by the\n// receiving range, assuming that the given slice is the source code of the\n// file indicated by r.Filename.\n//\n// If the receiver refers to any byte offsets that are outside of the slice\n// then the result is constrained to the overlapping portion only, to avoid\n// a panic. Use CanSliceBytes to determine if the result is guaranteed to\n// be an accurate span of the requested range.\nfunc (r Range) SliceBytes(b []byte) []byte {\n\tstart := r.Start.Byte\n\tend := r.End.Byte\n\tif start < 0 {\n\t\tstart = 0\n\t} else if start > len(b) {\n\t\tstart = len(b)\n\t}\n\tif end < 0 {\n\t\tend = 0\n\t} else if end > len(b) {\n\t\tend = len(b)\n\t}\n\tif end < start {\n\t\tend = start\n\t}\n\treturn b[start:end]\n}\n\n// Overlaps returns true if the receiver and the other given range share any\n// characters in common.\nfunc (r Range) Overlaps(other Range) bool {\n\tswitch {\n\tcase r.Filename != other.Filename:\n\t\t// If the ranges are in different files then they can't possibly overlap\n\t\treturn false\n\tcase r.Empty() || other.Empty():\n\t\t// Empty ranges can never overlap\n\t\treturn false\n\tcase r.ContainsOffset(other.Start.Byte) || r.ContainsOffset(other.End.Byte):\n\t\treturn true\n\tcase other.ContainsOffset(r.Start.Byte) || other.ContainsOffset(r.End.Byte):\n\t\treturn true\n\tdefault:\n\t\treturn false\n\t}\n}\n\n// Overlap finds a range that is either identical to or a sub-range of both\n// the receiver and the other given range. It returns an empty range\n// within the receiver if there is no overlap between the two ranges.\n//\n// A non-empty result is either identical to or a subset of the receiver.\nfunc (r Range) Overlap(other Range) Range {\n\tif !r.Overlaps(other) {\n\t\t// Start == End indicates an empty range\n\t\treturn Range{\n\t\t\tFilename: r.Filename,\n\t\t\tStart:    r.Start,\n\t\t\tEnd:      r.Start,\n\t\t}\n\t}\n\n\tvar start, end Pos\n\tif r.Start.Byte > other.Start.Byte {\n\t\tstart = r.Start\n\t} else {\n\t\tstart = other.Start\n\t}\n\tif r.End.Byte < other.End.Byte {\n\t\tend = r.End\n\t} else {\n\t\tend = other.End\n\t}\n\n\treturn Range{\n\t\tFilename: r.Filename,\n\t\tStart:    start,\n\t\tEnd:      end,\n\t}\n}\n\n// PartitionAround finds the portion of the given range that overlaps with\n// the reciever and returns three ranges: the portion of the reciever that\n// precedes the overlap, the overlap itself, and then the portion of the\n// reciever that comes after the overlap.\n//\n// If the two ranges do not overlap then all three returned ranges are empty.\n//\n// If the given range aligns with or extends beyond either extent of the\n// reciever then the corresponding outer range will be empty.\nfunc (r Range) PartitionAround(other Range) (before, overlap, after Range) {\n\toverlap = r.Overlap(other)\n\tif overlap.Empty() {\n\t\treturn overlap, overlap, overlap\n\t}\n\n\tbefore = Range{\n\t\tFilename: r.Filename,\n\t\tStart:    r.Start,\n\t\tEnd:      overlap.Start,\n\t}\n\tafter = Range{\n\t\tFilename: r.Filename,\n\t\tStart:    overlap.End,\n\t\tEnd:      r.End,\n\t}\n\n\treturn before, overlap, after\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcl/pos_scanner.go",
    "content": "package hcl\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\n\t\"github.com/apparentlymart/go-textseg/textseg\"\n)\n\n// RangeScanner is a helper that will scan over a buffer using a bufio.SplitFunc\n// and visit a source range for each token matched.\n//\n// For example, this can be used with bufio.ScanLines to find the source range\n// for each line in the file, skipping over the actual newline characters, which\n// may be useful when printing source code snippets as part of diagnostic\n// messages.\n//\n// The line and column information in the returned ranges is produced by\n// counting newline characters and grapheme clusters respectively, which\n// mimics the behavior we expect from a parser when producing ranges.\ntype RangeScanner struct {\n\tfilename string\n\tb        []byte\n\tcb       bufio.SplitFunc\n\n\tpos Pos    // position of next byte to process in b\n\tcur Range  // latest range\n\ttok []byte // slice of b that is covered by cur\n\terr error  // error from last scan, if any\n}\n\n// NewRangeScanner creates a new RangeScanner for the given buffer, producing\n// ranges for the given filename.\n//\n// Since ranges have grapheme-cluster granularity rather than byte granularity,\n// the scanner will produce incorrect results if the given SplitFunc creates\n// tokens between grapheme cluster boundaries. In particular, it is incorrect\n// to use RangeScanner with bufio.ScanRunes because it will produce tokens\n// around individual UTF-8 sequences, which will split any multi-sequence\n// grapheme clusters.\nfunc NewRangeScanner(b []byte, filename string, cb bufio.SplitFunc) *RangeScanner {\n\treturn NewRangeScannerFragment(b, filename, InitialPos, cb)\n}\n\n// NewRangeScannerFragment is like NewRangeScanner but the ranges it produces\n// will be offset by the given starting position, which is appropriate for\n// sub-slices of a file, whereas NewRangeScanner assumes it is scanning an\n// entire file.\nfunc NewRangeScannerFragment(b []byte, filename string, start Pos, cb bufio.SplitFunc) *RangeScanner {\n\treturn &RangeScanner{\n\t\tfilename: filename,\n\t\tb:        b,\n\t\tcb:       cb,\n\t\tpos:      start,\n\t}\n}\n\nfunc (sc *RangeScanner) Scan() bool {\n\tif sc.pos.Byte >= len(sc.b) || sc.err != nil {\n\t\t// All done\n\t\treturn false\n\t}\n\n\t// Since we're operating on an in-memory buffer, we always pass the whole\n\t// remainder of the buffer to our SplitFunc and set isEOF to let it know\n\t// that it has the whole thing.\n\tadvance, token, err := sc.cb(sc.b[sc.pos.Byte:], true)\n\n\t// Since we are setting isEOF to true this should never happen, but\n\t// if it does we will just abort and assume the SplitFunc is misbehaving.\n\tif advance == 0 && token == nil && err == nil {\n\t\treturn false\n\t}\n\n\tif err != nil {\n\t\tsc.err = err\n\t\tsc.cur = Range{\n\t\t\tFilename: sc.filename,\n\t\t\tStart:    sc.pos,\n\t\t\tEnd:      sc.pos,\n\t\t}\n\t\tsc.tok = nil\n\t\treturn false\n\t}\n\n\tsc.tok = token\n\tstart := sc.pos\n\tend := sc.pos\n\tnew := sc.pos\n\n\t// adv is similar to token but it also includes any subsequent characters\n\t// we're being asked to skip over by the SplitFunc.\n\t// adv is a slice covering any additional bytes we are skipping over, based\n\t// on what the SplitFunc told us to do with advance.\n\tadv := sc.b[sc.pos.Byte : sc.pos.Byte+advance]\n\n\t// We now need to scan over our token to count the grapheme clusters\n\t// so we can correctly advance Column, and count the newlines so we\n\t// can correctly advance Line.\n\tadvR := bytes.NewReader(adv)\n\tgsc := bufio.NewScanner(advR)\n\tadvanced := 0\n\tgsc.Split(textseg.ScanGraphemeClusters)\n\tfor gsc.Scan() {\n\t\tgr := gsc.Bytes()\n\t\tnew.Byte += len(gr)\n\t\tnew.Column++\n\n\t\t// We rely here on the fact that \\r\\n is considered a grapheme cluster\n\t\t// and so we don't need to worry about miscounting additional lines\n\t\t// on files with Windows-style line endings.\n\t\tif len(gr) != 0 && (gr[0] == '\\r' || gr[0] == '\\n') {\n\t\t\tnew.Column = 1\n\t\t\tnew.Line++\n\t\t}\n\n\t\tif advanced < len(token) {\n\t\t\t// If we've not yet found the end of our token then we'll\n\t\t\t// also push our \"end\" marker along.\n\t\t\t// (if advance > len(token) then we'll stop moving \"end\" early\n\t\t\t// so that the caller only sees the range covered by token.)\n\t\t\tend = new\n\t\t}\n\t\tadvanced += len(gr)\n\t}\n\n\tsc.cur = Range{\n\t\tFilename: sc.filename,\n\t\tStart:    start,\n\t\tEnd:      end,\n\t}\n\tsc.pos = new\n\treturn true\n}\n\n// Range returns a range that covers the latest token obtained after a call\n// to Scan returns true.\nfunc (sc *RangeScanner) Range() Range {\n\treturn sc.cur\n}\n\n// Bytes returns the slice of the input buffer that is covered by the range\n// that would be returned by Range.\nfunc (sc *RangeScanner) Bytes() []byte {\n\treturn sc.tok\n}\n\n// Err can be called after Scan returns false to determine if the latest read\n// resulted in an error, and obtain that error if so.\nfunc (sc *RangeScanner) Err() error {\n\treturn sc.err\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcl/schema.go",
    "content": "package hcl\n\n// BlockHeaderSchema represents the shape of a block header, and is\n// used for matching blocks within bodies.\ntype BlockHeaderSchema struct {\n\tType       string\n\tLabelNames []string\n}\n\n// AttributeSchema represents the requirements for an attribute, and is used\n// for matching attributes within bodies.\ntype AttributeSchema struct {\n\tName     string\n\tRequired bool\n}\n\n// BodySchema represents the desired shallow structure of a body.\ntype BodySchema struct {\n\tAttributes []AttributeSchema\n\tBlocks     []BlockHeaderSchema\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcl/static_expr.go",
    "content": "package hcl\n\nimport (\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\ntype staticExpr struct {\n\tval cty.Value\n\trng Range\n}\n\n// StaticExpr returns an Expression that always evaluates to the given value.\n//\n// This is useful to substitute default values for expressions that are\n// not explicitly given in configuration and thus would otherwise have no\n// Expression to return.\n//\n// Since expressions are expected to have a source range, the caller must\n// provide one. Ideally this should be a real source range, but it can\n// be a synthetic one (with an empty-string filename) if no suitable range\n// is available.\nfunc StaticExpr(val cty.Value, rng Range) Expression {\n\treturn staticExpr{val, rng}\n}\n\nfunc (e staticExpr) Value(ctx *EvalContext) (cty.Value, Diagnostics) {\n\treturn e.val, nil\n}\n\nfunc (e staticExpr) Variables() []Traversal {\n\treturn nil\n}\n\nfunc (e staticExpr) Range() Range {\n\treturn e.rng\n}\n\nfunc (e staticExpr) StartRange() Range {\n\treturn e.rng\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcl/structure.go",
    "content": "package hcl\n\nimport (\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// File is the top-level node that results from parsing a HCL file.\ntype File struct {\n\tBody  Body\n\tBytes []byte\n\n\t// Nav is used to integrate with the \"hcled\" editor integration package,\n\t// and with diagnostic information formatters. It is not for direct use\n\t// by a calling application.\n\tNav interface{}\n}\n\n// Block represents a nested block within a Body.\ntype Block struct {\n\tType   string\n\tLabels []string\n\tBody   Body\n\n\tDefRange    Range   // Range that can be considered the \"definition\" for seeking in an editor\n\tTypeRange   Range   // Range for the block type declaration specifically.\n\tLabelRanges []Range // Ranges for the label values specifically.\n}\n\n// Blocks is a sequence of Block.\ntype Blocks []*Block\n\n// Attributes is a set of attributes keyed by their names.\ntype Attributes map[string]*Attribute\n\n// Body is a container for attributes and blocks. It serves as the primary\n// unit of heirarchical structure within configuration.\n//\n// The content of a body cannot be meaningfully intepreted without a schema,\n// so Body represents the raw body content and has methods that allow the\n// content to be extracted in terms of a given schema.\ntype Body interface {\n\t// Content verifies that the entire body content conforms to the given\n\t// schema and then returns it, and/or returns diagnostics. The returned\n\t// body content is valid if non-nil, regardless of whether Diagnostics\n\t// are provided, but diagnostics should still be eventually shown to\n\t// the user.\n\tContent(schema *BodySchema) (*BodyContent, Diagnostics)\n\n\t// PartialContent is like Content except that it permits the configuration\n\t// to contain additional blocks or attributes not specified in the\n\t// schema. If any are present, the returned Body is non-nil and contains\n\t// the remaining items from the body that were not selected by the schema.\n\tPartialContent(schema *BodySchema) (*BodyContent, Body, Diagnostics)\n\n\t// JustAttributes attempts to interpret all of the contents of the body\n\t// as attributes, allowing for the contents to be accessed without a priori\n\t// knowledge of the structure.\n\t//\n\t// The behavior of this method depends on the body's source language.\n\t// Some languages, like JSON, can't distinguish between attributes and\n\t// blocks without schema hints, but for languages that _can_ error\n\t// diagnostics will be generated if any blocks are present in the body.\n\t//\n\t// Diagnostics may be produced for other reasons too, such as duplicate\n\t// declarations of the same attribute.\n\tJustAttributes() (Attributes, Diagnostics)\n\n\t// MissingItemRange returns a range that represents where a missing item\n\t// might hypothetically be inserted. This is used when producing\n\t// diagnostics about missing required attributes or blocks. Not all bodies\n\t// will have an obvious single insertion point, so the result here may\n\t// be rather arbitrary.\n\tMissingItemRange() Range\n}\n\n// BodyContent is the result of applying a BodySchema to a Body.\ntype BodyContent struct {\n\tAttributes Attributes\n\tBlocks     Blocks\n\n\tMissingItemRange Range\n}\n\n// Attribute represents an attribute from within a body.\ntype Attribute struct {\n\tName string\n\tExpr Expression\n\n\tRange     Range\n\tNameRange Range\n}\n\n// Expression is a literal value or an expression provided in the\n// configuration, which can be evaluated within a scope to produce a value.\ntype Expression interface {\n\t// Value returns the value resulting from evaluating the expression\n\t// in the given evaluation context.\n\t//\n\t// The context may be nil, in which case the expression may contain\n\t// only constants and diagnostics will be produced for any non-constant\n\t// sub-expressions. (The exact definition of this depends on the source\n\t// language.)\n\t//\n\t// The context may instead be set but have either its Variables or\n\t// Functions maps set to nil, in which case only use of these features\n\t// will return diagnostics.\n\t//\n\t// Different diagnostics are provided depending on whether the given\n\t// context maps are nil or empty. In the former case, the message\n\t// tells the user that variables/functions are not permitted at all,\n\t// while in the latter case usage will produce a \"not found\" error for\n\t// the specific symbol in question.\n\tValue(ctx *EvalContext) (cty.Value, Diagnostics)\n\n\t// Variables returns a list of variables referenced in the receiving\n\t// expression. These are expressed as absolute Traversals, so may include\n\t// additional information about how the variable is used, such as\n\t// attribute lookups, which the calling application can potentially use\n\t// to only selectively populate the scope.\n\tVariables() []Traversal\n\n\tRange() Range\n\tStartRange() Range\n}\n\n// OfType filters the receiving block sequence by block type name,\n// returning a new block sequence including only the blocks of the\n// requested type.\nfunc (els Blocks) OfType(typeName string) Blocks {\n\tret := make(Blocks, 0)\n\tfor _, el := range els {\n\t\tif el.Type == typeName {\n\t\t\tret = append(ret, el)\n\t\t}\n\t}\n\treturn ret\n}\n\n// ByType transforms the receiving block sequence into a map from type\n// name to block sequences of only that type.\nfunc (els Blocks) ByType() map[string]Blocks {\n\tret := make(map[string]Blocks)\n\tfor _, el := range els {\n\t\tty := el.Type\n\t\tif ret[ty] == nil {\n\t\t\tret[ty] = make(Blocks, 0, 1)\n\t\t}\n\t\tret[ty] = append(ret[ty], el)\n\t}\n\treturn ret\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcl/structure_at_pos.go",
    "content": "package hcl\n\n// -----------------------------------------------------------------------------\n// The methods in this file all have the general pattern of making a best-effort\n// to find one or more constructs that contain a given source position.\n//\n// These all operate by delegating to an optional method of the same name and\n// signature on the file's root body, allowing each syntax to potentially\n// provide its own implementations of these. For syntaxes that don't implement\n// them, the result is always nil.\n// -----------------------------------------------------------------------------\n\n// BlocksAtPos attempts to find all of the blocks that contain the given\n// position, ordered so that the outermost block is first and the innermost\n// block is last. This is a best-effort method that may not be able to produce\n// a complete result for all positions or for all HCL syntaxes.\n//\n// If the returned slice is non-empty, the first element is guaranteed to\n// represent the same block as would be the result of OutermostBlockAtPos and\n// the last element the result of InnermostBlockAtPos. However, the\n// implementation may return two different objects describing the same block,\n// so comparison by pointer identity is not possible.\n//\n// The result is nil if no blocks at all contain the given position.\nfunc (f *File) BlocksAtPos(pos Pos) []*Block {\n\t// The root body of the file must implement this interface in order\n\t// to support BlocksAtPos.\n\ttype Interface interface {\n\t\tBlocksAtPos(pos Pos) []*Block\n\t}\n\n\timpl, ok := f.Body.(Interface)\n\tif !ok {\n\t\treturn nil\n\t}\n\treturn impl.BlocksAtPos(pos)\n}\n\n// OutermostBlockAtPos attempts to find a top-level block in the receiving file\n// that contains the given position. This is a best-effort method that may not\n// be able to produce a result for all positions or for all HCL syntaxes.\n//\n// The result is nil if no single block could be selected for any reason.\nfunc (f *File) OutermostBlockAtPos(pos Pos) *Block {\n\t// The root body of the file must implement this interface in order\n\t// to support OutermostBlockAtPos.\n\ttype Interface interface {\n\t\tOutermostBlockAtPos(pos Pos) *Block\n\t}\n\n\timpl, ok := f.Body.(Interface)\n\tif !ok {\n\t\treturn nil\n\t}\n\treturn impl.OutermostBlockAtPos(pos)\n}\n\n// InnermostBlockAtPos attempts to find the most deeply-nested block in the\n// receiving file that contains the given position. This is a best-effort\n// method that may not be able to produce a result for all positions or for\n// all HCL syntaxes.\n//\n// The result is nil if no single block could be selected for any reason.\nfunc (f *File) InnermostBlockAtPos(pos Pos) *Block {\n\t// The root body of the file must implement this interface in order\n\t// to support InnermostBlockAtPos.\n\ttype Interface interface {\n\t\tInnermostBlockAtPos(pos Pos) *Block\n\t}\n\n\timpl, ok := f.Body.(Interface)\n\tif !ok {\n\t\treturn nil\n\t}\n\treturn impl.InnermostBlockAtPos(pos)\n}\n\n// OutermostExprAtPos attempts to find an expression in the receiving file\n// that contains the given position. This is a best-effort method that may not\n// be able to produce a result for all positions or for all HCL syntaxes.\n//\n// Since expressions are often nested inside one another, this method returns\n// the outermost \"root\" expression that is not contained by any other.\n//\n// The result is nil if no single expression could be selected for any reason.\nfunc (f *File) OutermostExprAtPos(pos Pos) Expression {\n\t// The root body of the file must implement this interface in order\n\t// to support OutermostExprAtPos.\n\ttype Interface interface {\n\t\tOutermostExprAtPos(pos Pos) Expression\n\t}\n\n\timpl, ok := f.Body.(Interface)\n\tif !ok {\n\t\treturn nil\n\t}\n\treturn impl.OutermostExprAtPos(pos)\n}\n\n// AttributeAtPos attempts to find an attribute definition in the receiving\n// file that contains the given position. This is a best-effort method that may\n// not be able to produce a result for all positions or for all HCL syntaxes.\n//\n// The result is nil if no single attribute could be selected for any reason.\nfunc (f *File) AttributeAtPos(pos Pos) *Attribute {\n\t// The root body of the file must implement this interface in order\n\t// to support OutermostExprAtPos.\n\ttype Interface interface {\n\t\tAttributeAtPos(pos Pos) *Attribute\n\t}\n\n\timpl, ok := f.Body.(Interface)\n\tif !ok {\n\t\treturn nil\n\t}\n\treturn impl.AttributeAtPos(pos)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcl/traversal.go",
    "content": "package hcl\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// A Traversal is a description of traversing through a value through a\n// series of operations such as attribute lookup, index lookup, etc.\n//\n// It is used to look up values in scopes, for example.\n//\n// The traversal operations are implementations of interface Traverser.\n// This is a closed set of implementations, so the interface cannot be\n// implemented from outside this package.\n//\n// A traversal can be absolute (its first value is a symbol name) or relative\n// (starts from an existing value).\ntype Traversal []Traverser\n\n// TraversalJoin appends a relative traversal to an absolute traversal to\n// produce a new absolute traversal.\nfunc TraversalJoin(abs Traversal, rel Traversal) Traversal {\n\tif abs.IsRelative() {\n\t\tpanic(\"first argument to TraversalJoin must be absolute\")\n\t}\n\tif !rel.IsRelative() {\n\t\tpanic(\"second argument to TraversalJoin must be relative\")\n\t}\n\n\tret := make(Traversal, len(abs)+len(rel))\n\tcopy(ret, abs)\n\tcopy(ret[len(abs):], rel)\n\treturn ret\n}\n\n// TraverseRel applies the receiving traversal to the given value, returning\n// the resulting value. This is supported only for relative traversals,\n// and will panic if applied to an absolute traversal.\nfunc (t Traversal) TraverseRel(val cty.Value) (cty.Value, Diagnostics) {\n\tif !t.IsRelative() {\n\t\tpanic(\"can't use TraverseRel on an absolute traversal\")\n\t}\n\n\tcurrent := val\n\tvar diags Diagnostics\n\tfor _, tr := range t {\n\t\tvar newDiags Diagnostics\n\t\tcurrent, newDiags = tr.TraversalStep(current)\n\t\tdiags = append(diags, newDiags...)\n\t\tif newDiags.HasErrors() {\n\t\t\treturn cty.DynamicVal, diags\n\t\t}\n\t}\n\treturn current, diags\n}\n\n// TraverseAbs applies the receiving traversal to the given eval context,\n// returning the resulting value. This is supported only for absolute\n// traversals, and will panic if applied to a relative traversal.\nfunc (t Traversal) TraverseAbs(ctx *EvalContext) (cty.Value, Diagnostics) {\n\tif t.IsRelative() {\n\t\tpanic(\"can't use TraverseAbs on a relative traversal\")\n\t}\n\n\tsplit := t.SimpleSplit()\n\troot := split.Abs[0].(TraverseRoot)\n\tname := root.Name\n\n\tthisCtx := ctx\n\thasNonNil := false\n\tfor thisCtx != nil {\n\t\tif thisCtx.Variables == nil {\n\t\t\tthisCtx = thisCtx.parent\n\t\t\tcontinue\n\t\t}\n\t\thasNonNil = true\n\t\tval, exists := thisCtx.Variables[name]\n\t\tif exists {\n\t\t\treturn split.Rel.TraverseRel(val)\n\t\t}\n\t\tthisCtx = thisCtx.parent\n\t}\n\n\tif !hasNonNil {\n\t\treturn cty.DynamicVal, Diagnostics{\n\t\t\t{\n\t\t\t\tSeverity: DiagError,\n\t\t\t\tSummary:  \"Variables not allowed\",\n\t\t\t\tDetail:   \"Variables may not be used here.\",\n\t\t\t\tSubject:  &root.SrcRange,\n\t\t\t},\n\t\t}\n\t}\n\n\tsuggestions := make([]string, 0, len(ctx.Variables))\n\tthisCtx = ctx\n\tfor thisCtx != nil {\n\t\tfor k := range thisCtx.Variables {\n\t\t\tsuggestions = append(suggestions, k)\n\t\t}\n\t\tthisCtx = thisCtx.parent\n\t}\n\tsuggestion := nameSuggestion(name, suggestions)\n\tif suggestion != \"\" {\n\t\tsuggestion = fmt.Sprintf(\" Did you mean %q?\", suggestion)\n\t}\n\n\treturn cty.DynamicVal, Diagnostics{\n\t\t{\n\t\t\tSeverity: DiagError,\n\t\t\tSummary:  \"Unknown variable\",\n\t\t\tDetail:   fmt.Sprintf(\"There is no variable named %q.%s\", name, suggestion),\n\t\t\tSubject:  &root.SrcRange,\n\t\t},\n\t}\n}\n\n// IsRelative returns true if the receiver is a relative traversal, or false\n// otherwise.\nfunc (t Traversal) IsRelative() bool {\n\tif len(t) == 0 {\n\t\treturn true\n\t}\n\tif _, firstIsRoot := t[0].(TraverseRoot); firstIsRoot {\n\t\treturn false\n\t}\n\treturn true\n}\n\n// SimpleSplit returns a TraversalSplit where the name lookup is the absolute\n// part and the remainder is the relative part. Supported only for\n// absolute traversals, and will panic if applied to a relative traversal.\n//\n// This can be used by applications that have a relatively-simple variable\n// namespace where only the top-level is directly populated in the scope, with\n// everything else handled by relative lookups from those initial values.\nfunc (t Traversal) SimpleSplit() TraversalSplit {\n\tif t.IsRelative() {\n\t\tpanic(\"can't use SimpleSplit on a relative traversal\")\n\t}\n\treturn TraversalSplit{\n\t\tAbs: t[0:1],\n\t\tRel: t[1:],\n\t}\n}\n\n// RootName returns the root name for a absolute traversal. Will panic if\n// called on a relative traversal.\nfunc (t Traversal) RootName() string {\n\tif t.IsRelative() {\n\t\tpanic(\"can't use RootName on a relative traversal\")\n\n\t}\n\treturn t[0].(TraverseRoot).Name\n}\n\n// SourceRange returns the source range for the traversal.\nfunc (t Traversal) SourceRange() Range {\n\tif len(t) == 0 {\n\t\t// Nothing useful to return here, but we'll return something\n\t\t// that's correctly-typed at least.\n\t\treturn Range{}\n\t}\n\n\treturn RangeBetween(t[0].SourceRange(), t[len(t)-1].SourceRange())\n}\n\n// TraversalSplit represents a pair of traversals, the first of which is\n// an absolute traversal and the second of which is relative to the first.\n//\n// This is used by calling applications that only populate prefixes of the\n// traversals in the scope, with Abs representing the part coming from the\n// scope and Rel representing the remaining steps once that part is\n// retrieved.\ntype TraversalSplit struct {\n\tAbs Traversal\n\tRel Traversal\n}\n\n// TraverseAbs traverses from a scope to the value resulting from the\n// absolute traversal.\nfunc (t TraversalSplit) TraverseAbs(ctx *EvalContext) (cty.Value, Diagnostics) {\n\treturn t.Abs.TraverseAbs(ctx)\n}\n\n// TraverseRel traverses from a given value, assumed to be the result of\n// TraverseAbs on some scope, to a final result for the entire split traversal.\nfunc (t TraversalSplit) TraverseRel(val cty.Value) (cty.Value, Diagnostics) {\n\treturn t.Rel.TraverseRel(val)\n}\n\n// Traverse is a convenience function to apply TraverseAbs followed by\n// TraverseRel.\nfunc (t TraversalSplit) Traverse(ctx *EvalContext) (cty.Value, Diagnostics) {\n\tv1, diags := t.TraverseAbs(ctx)\n\tif diags.HasErrors() {\n\t\treturn cty.DynamicVal, diags\n\t}\n\tv2, newDiags := t.TraverseRel(v1)\n\tdiags = append(diags, newDiags...)\n\treturn v2, diags\n}\n\n// Join concatenates together the Abs and Rel parts to produce a single\n// absolute traversal.\nfunc (t TraversalSplit) Join() Traversal {\n\treturn TraversalJoin(t.Abs, t.Rel)\n}\n\n// RootName returns the root name for the absolute part of the split.\nfunc (t TraversalSplit) RootName() string {\n\treturn t.Abs.RootName()\n}\n\n// A Traverser is a step within a Traversal.\ntype Traverser interface {\n\tTraversalStep(cty.Value) (cty.Value, Diagnostics)\n\tSourceRange() Range\n\tisTraverserSigil() isTraverser\n}\n\n// Embed this in a struct to declare it as a Traverser\ntype isTraverser struct {\n}\n\nfunc (tr isTraverser) isTraverserSigil() isTraverser {\n\treturn isTraverser{}\n}\n\n// TraverseRoot looks up a root name in a scope. It is used as the first step\n// of an absolute Traversal, and cannot itself be traversed directly.\ntype TraverseRoot struct {\n\tisTraverser\n\tName     string\n\tSrcRange Range\n}\n\n// TraversalStep on a TraverseName immediately panics, because absolute\n// traversals cannot be directly traversed.\nfunc (tn TraverseRoot) TraversalStep(cty.Value) (cty.Value, Diagnostics) {\n\tpanic(\"Cannot traverse an absolute traversal\")\n}\n\nfunc (tn TraverseRoot) SourceRange() Range {\n\treturn tn.SrcRange\n}\n\n// TraverseAttr looks up an attribute in its initial value.\ntype TraverseAttr struct {\n\tisTraverser\n\tName     string\n\tSrcRange Range\n}\n\nfunc (tn TraverseAttr) TraversalStep(val cty.Value) (cty.Value, Diagnostics) {\n\treturn GetAttr(val, tn.Name, &tn.SrcRange)\n}\n\nfunc (tn TraverseAttr) SourceRange() Range {\n\treturn tn.SrcRange\n}\n\n// TraverseIndex applies the index operation to its initial value.\ntype TraverseIndex struct {\n\tisTraverser\n\tKey      cty.Value\n\tSrcRange Range\n}\n\nfunc (tn TraverseIndex) TraversalStep(val cty.Value) (cty.Value, Diagnostics) {\n\treturn Index(val, tn.Key, &tn.SrcRange)\n}\n\nfunc (tn TraverseIndex) SourceRange() Range {\n\treturn tn.SrcRange\n}\n\n// TraverseSplat applies the splat operation to its initial value.\ntype TraverseSplat struct {\n\tisTraverser\n\tEach     Traversal\n\tSrcRange Range\n}\n\nfunc (tn TraverseSplat) TraversalStep(val cty.Value) (cty.Value, Diagnostics) {\n\tpanic(\"TraverseSplat not yet implemented\")\n}\n\nfunc (tn TraverseSplat) SourceRange() Range {\n\treturn tn.SrcRange\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcl/traversal_for_expr.go",
    "content": "package hcl\n\n// AbsTraversalForExpr attempts to interpret the given expression as\n// an absolute traversal, or returns error diagnostic(s) if that is\n// not possible for the given expression.\n//\n// A particular Expression implementation can support this function by\n// offering a method called AsTraversal that takes no arguments and\n// returns either a valid absolute traversal or nil to indicate that\n// no traversal is possible. Alternatively, an implementation can support\n// UnwrapExpression to delegate handling of this function to a wrapped\n// Expression object.\n//\n// In most cases the calling application is interested in the value\n// that results from an expression, but in rarer cases the application\n// needs to see the the name of the variable and subsequent\n// attributes/indexes itself, for example to allow users to give references\n// to the variables themselves rather than to their values. An implementer\n// of this function should at least support attribute and index steps.\nfunc AbsTraversalForExpr(expr Expression) (Traversal, Diagnostics) {\n\ttype asTraversal interface {\n\t\tAsTraversal() Traversal\n\t}\n\n\tphysExpr := UnwrapExpressionUntil(expr, func(expr Expression) bool {\n\t\t_, supported := expr.(asTraversal)\n\t\treturn supported\n\t})\n\n\tif asT, supported := physExpr.(asTraversal); supported {\n\t\tif traversal := asT.AsTraversal(); traversal != nil {\n\t\t\treturn traversal, nil\n\t\t}\n\t}\n\treturn nil, Diagnostics{\n\t\t&Diagnostic{\n\t\t\tSeverity: DiagError,\n\t\t\tSummary:  \"Invalid expression\",\n\t\t\tDetail:   \"A static variable reference is required.\",\n\t\t\tSubject:  expr.Range().Ptr(),\n\t\t},\n\t}\n}\n\n// RelTraversalForExpr is similar to AbsTraversalForExpr but it returns\n// a relative traversal instead. Due to the nature of HCL expressions, the\n// first element of the returned traversal is always a TraverseAttr, and\n// then it will be followed by zero or more other expressions.\n//\n// Any expression accepted by AbsTraversalForExpr is also accepted by\n// RelTraversalForExpr.\nfunc RelTraversalForExpr(expr Expression) (Traversal, Diagnostics) {\n\ttraversal, diags := AbsTraversalForExpr(expr)\n\tif len(traversal) > 0 {\n\t\tret := make(Traversal, len(traversal))\n\t\tcopy(ret, traversal)\n\t\troot := traversal[0].(TraverseRoot)\n\t\tret[0] = TraverseAttr{\n\t\t\tName:     root.Name,\n\t\t\tSrcRange: root.SrcRange,\n\t\t}\n\t\treturn ret, diags\n\t}\n\treturn traversal, diags\n}\n\n// ExprAsKeyword attempts to interpret the given expression as a static keyword,\n// returning the keyword string if possible, and the empty string if not.\n//\n// A static keyword, for the sake of this function, is a single identifier.\n// For example, the following attribute has an expression that would produce\n// the keyword \"foo\":\n//\n//     example = foo\n//\n// This function is a variant of AbsTraversalForExpr, which uses the same\n// interface on the given expression. This helper constrains the result\n// further by requiring only a single root identifier.\n//\n// This function is intended to be used with the following idiom, to recognize\n// situations where one of a fixed set of keywords is required and arbitrary\n// expressions are not allowed:\n//\n//     switch hcl.ExprAsKeyword(expr) {\n//     case \"allow\":\n//         // (take suitable action for keyword \"allow\")\n//     case \"deny\":\n//         // (take suitable action for keyword \"deny\")\n//     default:\n//         diags = append(diags, &hcl.Diagnostic{\n//             // ... \"invalid keyword\" diagnostic message ...\n//         })\n//     }\n//\n// The above approach will generate the same message for both the use of an\n// unrecognized keyword and for not using a keyword at all, which is usually\n// reasonable if the message specifies that the given value must be a keyword\n// from that fixed list.\n//\n// Note that in the native syntax the keywords \"true\", \"false\", and \"null\" are\n// recognized as literal values during parsing and so these reserved words\n// cannot not be accepted as keywords by this function.\n//\n// Since interpreting an expression as a keyword bypasses usual expression\n// evaluation, it should be used sparingly for situations where e.g. one of\n// a fixed set of keywords is used in a structural way in a special attribute\n// to affect the further processing of a block.\nfunc ExprAsKeyword(expr Expression) string {\n\ttype asTraversal interface {\n\t\tAsTraversal() Traversal\n\t}\n\n\tphysExpr := UnwrapExpressionUntil(expr, func(expr Expression) bool {\n\t\t_, supported := expr.(asTraversal)\n\t\treturn supported\n\t})\n\n\tif asT, supported := physExpr.(asTraversal); supported {\n\t\tif traversal := asT.AsTraversal(); len(traversal) == 1 {\n\t\t\treturn traversal.RootName()\n\t\t}\n\t}\n\treturn \"\"\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcldec/block_labels.go",
    "content": "package hcldec\n\nimport (\n\t\"github.com/hashicorp/hcl2/hcl\"\n)\n\ntype blockLabel struct {\n\tValue string\n\tRange hcl.Range\n}\n\nfunc labelsForBlock(block *hcl.Block) []blockLabel {\n\tret := make([]blockLabel, len(block.Labels))\n\tfor i := range block.Labels {\n\t\tret[i] = blockLabel{\n\t\t\tValue: block.Labels[i],\n\t\t\tRange: block.LabelRanges[i],\n\t\t}\n\t}\n\treturn ret\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcldec/decode.go",
    "content": "package hcldec\n\nimport (\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\nfunc decode(body hcl.Body, blockLabels []blockLabel, ctx *hcl.EvalContext, spec Spec, partial bool) (cty.Value, hcl.Body, hcl.Diagnostics) {\n\tschema := ImpliedSchema(spec)\n\n\tvar content *hcl.BodyContent\n\tvar diags hcl.Diagnostics\n\tvar leftovers hcl.Body\n\n\tif partial {\n\t\tcontent, leftovers, diags = body.PartialContent(schema)\n\t} else {\n\t\tcontent, diags = body.Content(schema)\n\t}\n\n\tval, valDiags := spec.decode(content, blockLabels, ctx)\n\tdiags = append(diags, valDiags...)\n\n\treturn val, leftovers, diags\n}\n\nfunc impliedType(spec Spec) cty.Type {\n\treturn spec.impliedType()\n}\n\nfunc sourceRange(body hcl.Body, blockLabels []blockLabel, spec Spec) hcl.Range {\n\tschema := ImpliedSchema(spec)\n\tcontent, _, _ := body.PartialContent(schema)\n\n\treturn spec.sourceRange(content, blockLabels)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcldec/doc.go",
    "content": "// Package hcldec provides a higher-level API for unpacking the content of\n// HCL bodies, implemented in terms of the low-level \"Content\" API exposed\n// by the bodies themselves.\n//\n// It allows decoding an entire nested configuration in a single operation\n// by providing a description of the intended structure.\n//\n// For some applications it may be more convenient to use the \"gohcl\"\n// package, which has a similar purpose but decodes directly into native\n// Go data types. hcldec instead targets the cty type system, and thus allows\n// a cty-driven application to remain within that type system.\npackage hcldec\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcldec/gob.go",
    "content": "package hcldec\n\nimport (\n\t\"encoding/gob\"\n)\n\nfunc init() {\n\t// Every Spec implementation should be registered with gob, so that\n\t// specs can be sent over gob channels, such as using\n\t// github.com/hashicorp/go-plugin with plugins that need to describe\n\t// what shape of configuration they are expecting.\n\tgob.Register(ObjectSpec(nil))\n\tgob.Register(TupleSpec(nil))\n\tgob.Register((*AttrSpec)(nil))\n\tgob.Register((*LiteralSpec)(nil))\n\tgob.Register((*ExprSpec)(nil))\n\tgob.Register((*BlockSpec)(nil))\n\tgob.Register((*BlockListSpec)(nil))\n\tgob.Register((*BlockSetSpec)(nil))\n\tgob.Register((*BlockMapSpec)(nil))\n\tgob.Register((*BlockLabelSpec)(nil))\n\tgob.Register((*DefaultSpec)(nil))\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcldec/public.go",
    "content": "package hcldec\n\nimport (\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// Decode interprets the given body using the given specification and returns\n// the resulting value. If the given body is not valid per the spec, error\n// diagnostics are returned and the returned value is likely to be incomplete.\n//\n// The ctx argument may be nil, in which case any references to variables or\n// functions will produce error diagnostics.\nfunc Decode(body hcl.Body, spec Spec, ctx *hcl.EvalContext) (cty.Value, hcl.Diagnostics) {\n\tval, _, diags := decode(body, nil, ctx, spec, false)\n\treturn val, diags\n}\n\n// PartialDecode is like Decode except that it permits \"leftover\" items in\n// the top-level body, which are returned as a new body to allow for\n// further processing.\n//\n// Any descendent block bodies are _not_ decoded partially and thus must\n// be fully described by the given specification.\nfunc PartialDecode(body hcl.Body, spec Spec, ctx *hcl.EvalContext) (cty.Value, hcl.Body, hcl.Diagnostics) {\n\treturn decode(body, nil, ctx, spec, true)\n}\n\n// ImpliedType returns the value type that should result from decoding the\n// given spec.\nfunc ImpliedType(spec Spec) cty.Type {\n\treturn impliedType(spec)\n}\n\n// SourceRange interprets the given body using the given specification and\n// then returns the source range of the value that would be used to\n// fulfill the spec.\n//\n// This can be used if application-level validation detects value errors, to\n// obtain a reasonable SourceRange to use for generated diagnostics. It works\n// best when applied to specific body items (e.g. using AttrSpec, BlockSpec, ...)\n// as opposed to entire bodies using ObjectSpec, TupleSpec. The result will\n// be less useful the broader the specification, so e.g. a spec that returns\n// the entirety of all of the blocks of a given type is likely to be\n// _particularly_ arbitrary and useless.\n//\n// If the given body is not valid per the given spec, the result is best-effort\n// and may not actually be something ideal. It's expected that an application\n// will already have used Decode or PartialDecode earlier and thus had an\n// opportunity to detect and report spec violations.\nfunc SourceRange(body hcl.Body, spec Spec) hcl.Range {\n\treturn sourceRange(body, nil, spec)\n}\n\n// ChildBlockTypes returns a map of all of the child block types declared\n// by the given spec, with block type names as keys and the associated\n// nested body specs as values.\nfunc ChildBlockTypes(spec Spec) map[string]Spec {\n\tret := map[string]Spec{}\n\n\t// visitSameBodyChildren walks through the spec structure, calling\n\t// the given callback for each descendent spec encountered. We are\n\t// interested in the specs that reference attributes and blocks.\n\tvar visit visitFunc\n\tvisit = func(s Spec) {\n\t\tif bs, ok := s.(blockSpec); ok {\n\t\t\tfor _, blockS := range bs.blockHeaderSchemata() {\n\t\t\t\tnested := bs.nestedSpec()\n\t\t\t\tif nested != nil { // nil can be returned to dynamically opt out of this interface\n\t\t\t\t\tret[blockS.Type] = nested\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\ts.visitSameBodyChildren(visit)\n\t}\n\n\tvisit(spec)\n\n\treturn ret\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcldec/schema.go",
    "content": "package hcldec\n\nimport (\n\t\"github.com/hashicorp/hcl2/hcl\"\n)\n\n// ImpliedSchema returns the *hcl.BodySchema implied by the given specification.\n// This is the schema that the Decode function will use internally to\n// access the content of a given body.\nfunc ImpliedSchema(spec Spec) *hcl.BodySchema {\n\tvar attrs []hcl.AttributeSchema\n\tvar blocks []hcl.BlockHeaderSchema\n\n\t// visitSameBodyChildren walks through the spec structure, calling\n\t// the given callback for each descendent spec encountered. We are\n\t// interested in the specs that reference attributes and blocks.\n\tvar visit visitFunc\n\tvisit = func(s Spec) {\n\t\tif as, ok := s.(attrSpec); ok {\n\t\t\tattrs = append(attrs, as.attrSchemata()...)\n\t\t}\n\n\t\tif bs, ok := s.(blockSpec); ok {\n\t\t\tblocks = append(blocks, bs.blockHeaderSchemata()...)\n\t\t}\n\n\t\ts.visitSameBodyChildren(visit)\n\t}\n\n\tvisit(spec)\n\n\treturn &hcl.BodySchema{\n\t\tAttributes: attrs,\n\t\tBlocks:     blocks,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcldec/spec.go",
    "content": "package hcldec\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"sort\"\n\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/zclconf/go-cty/cty\"\n\t\"github.com/zclconf/go-cty/cty/convert\"\n\t\"github.com/zclconf/go-cty/cty/function\"\n)\n\n// A Spec is a description of how to decode a hcl.Body to a cty.Value.\n//\n// The various other types in this package whose names end in \"Spec\" are\n// the spec implementations. The most common top-level spec is ObjectSpec,\n// which decodes body content into a cty.Value of an object type.\ntype Spec interface {\n\t// Perform the decode operation on the given body, in the context of\n\t// the given block (which might be null), using the given eval context.\n\t//\n\t// \"block\" is provided only by the nested calls performed by the spec\n\t// types that work on block bodies.\n\tdecode(content *hcl.BodyContent, blockLabels []blockLabel, ctx *hcl.EvalContext) (cty.Value, hcl.Diagnostics)\n\n\t// Return the cty.Type that should be returned when decoding a body with\n\t// this spec.\n\timpliedType() cty.Type\n\n\t// Call the given callback once for each of the nested specs that would\n\t// get decoded with the same body and block as the receiver. This should\n\t// not descend into the nested specs used when decoding blocks.\n\tvisitSameBodyChildren(cb visitFunc)\n\n\t// Determine the source range of the value that would be returned for the\n\t// spec in the given content, in the context of the given block\n\t// (which might be null). If the corresponding item is missing, return\n\t// a place where it might be inserted.\n\tsourceRange(content *hcl.BodyContent, blockLabels []blockLabel) hcl.Range\n}\n\ntype visitFunc func(spec Spec)\n\n// An ObjectSpec is a Spec that produces a cty.Value of an object type whose\n// attributes correspond to the keys of the spec map.\ntype ObjectSpec map[string]Spec\n\n// attrSpec is implemented by specs that require attributes from the body.\ntype attrSpec interface {\n\tattrSchemata() []hcl.AttributeSchema\n}\n\n// blockSpec is implemented by specs that require blocks from the body.\ntype blockSpec interface {\n\tblockHeaderSchemata() []hcl.BlockHeaderSchema\n\tnestedSpec() Spec\n}\n\n// specNeedingVariables is implemented by specs that can use variables\n// from the EvalContext, to declare which variables they need.\ntype specNeedingVariables interface {\n\tvariablesNeeded(content *hcl.BodyContent) []hcl.Traversal\n}\n\nfunc (s ObjectSpec) visitSameBodyChildren(cb visitFunc) {\n\tfor _, c := range s {\n\t\tcb(c)\n\t}\n}\n\nfunc (s ObjectSpec) decode(content *hcl.BodyContent, blockLabels []blockLabel, ctx *hcl.EvalContext) (cty.Value, hcl.Diagnostics) {\n\tvals := make(map[string]cty.Value, len(s))\n\tvar diags hcl.Diagnostics\n\n\tfor k, spec := range s {\n\t\tvar kd hcl.Diagnostics\n\t\tvals[k], kd = spec.decode(content, blockLabels, ctx)\n\t\tdiags = append(diags, kd...)\n\t}\n\n\treturn cty.ObjectVal(vals), diags\n}\n\nfunc (s ObjectSpec) impliedType() cty.Type {\n\tif len(s) == 0 {\n\t\treturn cty.EmptyObject\n\t}\n\n\tattrTypes := make(map[string]cty.Type)\n\tfor k, childSpec := range s {\n\t\tattrTypes[k] = childSpec.impliedType()\n\t}\n\treturn cty.Object(attrTypes)\n}\n\nfunc (s ObjectSpec) sourceRange(content *hcl.BodyContent, blockLabels []blockLabel) hcl.Range {\n\t// This is not great, but the best we can do. In practice, it's rather\n\t// strange to ask for the source range of an entire top-level body, since\n\t// that's already readily available to the caller.\n\treturn content.MissingItemRange\n}\n\n// A TupleSpec is a Spec that produces a cty.Value of a tuple type whose\n// elements correspond to the elements of the spec slice.\ntype TupleSpec []Spec\n\nfunc (s TupleSpec) visitSameBodyChildren(cb visitFunc) {\n\tfor _, c := range s {\n\t\tcb(c)\n\t}\n}\n\nfunc (s TupleSpec) decode(content *hcl.BodyContent, blockLabels []blockLabel, ctx *hcl.EvalContext) (cty.Value, hcl.Diagnostics) {\n\tvals := make([]cty.Value, len(s))\n\tvar diags hcl.Diagnostics\n\n\tfor i, spec := range s {\n\t\tvar ed hcl.Diagnostics\n\t\tvals[i], ed = spec.decode(content, blockLabels, ctx)\n\t\tdiags = append(diags, ed...)\n\t}\n\n\treturn cty.TupleVal(vals), diags\n}\n\nfunc (s TupleSpec) impliedType() cty.Type {\n\tif len(s) == 0 {\n\t\treturn cty.EmptyTuple\n\t}\n\n\tattrTypes := make([]cty.Type, len(s))\n\tfor i, childSpec := range s {\n\t\tattrTypes[i] = childSpec.impliedType()\n\t}\n\treturn cty.Tuple(attrTypes)\n}\n\nfunc (s TupleSpec) sourceRange(content *hcl.BodyContent, blockLabels []blockLabel) hcl.Range {\n\t// This is not great, but the best we can do. In practice, it's rather\n\t// strange to ask for the source range of an entire top-level body, since\n\t// that's already readily available to the caller.\n\treturn content.MissingItemRange\n}\n\n// An AttrSpec is a Spec that evaluates a particular attribute expression in\n// the body and returns its resulting value converted to the requested type,\n// or produces a diagnostic if the type is incorrect.\ntype AttrSpec struct {\n\tName     string\n\tType     cty.Type\n\tRequired bool\n}\n\nfunc (s *AttrSpec) visitSameBodyChildren(cb visitFunc) {\n\t// leaf node\n}\n\n// specNeedingVariables implementation\nfunc (s *AttrSpec) variablesNeeded(content *hcl.BodyContent) []hcl.Traversal {\n\tattr, exists := content.Attributes[s.Name]\n\tif !exists {\n\t\treturn nil\n\t}\n\n\treturn attr.Expr.Variables()\n}\n\n// attrSpec implementation\nfunc (s *AttrSpec) attrSchemata() []hcl.AttributeSchema {\n\treturn []hcl.AttributeSchema{\n\t\t{\n\t\t\tName:     s.Name,\n\t\t\tRequired: s.Required,\n\t\t},\n\t}\n}\n\nfunc (s *AttrSpec) sourceRange(content *hcl.BodyContent, blockLabels []blockLabel) hcl.Range {\n\tattr, exists := content.Attributes[s.Name]\n\tif !exists {\n\t\treturn content.MissingItemRange\n\t}\n\n\treturn attr.Expr.Range()\n}\n\nfunc (s *AttrSpec) decode(content *hcl.BodyContent, blockLabels []blockLabel, ctx *hcl.EvalContext) (cty.Value, hcl.Diagnostics) {\n\tattr, exists := content.Attributes[s.Name]\n\tif !exists {\n\t\t// We don't need to check required and emit a diagnostic here, because\n\t\t// that would already have happened when building \"content\".\n\t\treturn cty.NullVal(s.Type), nil\n\t}\n\n\tval, diags := attr.Expr.Value(ctx)\n\n\tconvVal, err := convert.Convert(val, s.Type)\n\tif err != nil {\n\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Incorrect attribute value type\",\n\t\t\tDetail: fmt.Sprintf(\n\t\t\t\t\"Inappropriate value for attribute %q: %s.\",\n\t\t\t\ts.Name, err.Error(),\n\t\t\t),\n\t\t\tSubject: attr.Expr.StartRange().Ptr(),\n\t\t\tContext: hcl.RangeBetween(attr.NameRange, attr.Expr.StartRange()).Ptr(),\n\t\t})\n\t\t// We'll return an unknown value of the _correct_ type so that the\n\t\t// incomplete result can still be used for some analysis use-cases.\n\t\tval = cty.UnknownVal(s.Type)\n\t} else {\n\t\tval = convVal\n\t}\n\n\treturn val, diags\n}\n\nfunc (s *AttrSpec) impliedType() cty.Type {\n\treturn s.Type\n}\n\n// A LiteralSpec is a Spec that produces the given literal value, ignoring\n// the given body.\ntype LiteralSpec struct {\n\tValue cty.Value\n}\n\nfunc (s *LiteralSpec) visitSameBodyChildren(cb visitFunc) {\n\t// leaf node\n}\n\nfunc (s *LiteralSpec) decode(content *hcl.BodyContent, blockLabels []blockLabel, ctx *hcl.EvalContext) (cty.Value, hcl.Diagnostics) {\n\treturn s.Value, nil\n}\n\nfunc (s *LiteralSpec) impliedType() cty.Type {\n\treturn s.Value.Type()\n}\n\nfunc (s *LiteralSpec) sourceRange(content *hcl.BodyContent, blockLabels []blockLabel) hcl.Range {\n\t// No sensible range to return for a literal, so the caller had better\n\t// ensure it doesn't cause any diagnostics.\n\treturn hcl.Range{\n\t\tFilename: \"<unknown>\",\n\t}\n}\n\n// An ExprSpec is a Spec that evaluates the given expression, ignoring the\n// given body.\ntype ExprSpec struct {\n\tExpr hcl.Expression\n}\n\nfunc (s *ExprSpec) visitSameBodyChildren(cb visitFunc) {\n\t// leaf node\n}\n\n// specNeedingVariables implementation\nfunc (s *ExprSpec) variablesNeeded(content *hcl.BodyContent) []hcl.Traversal {\n\treturn s.Expr.Variables()\n}\n\nfunc (s *ExprSpec) decode(content *hcl.BodyContent, blockLabels []blockLabel, ctx *hcl.EvalContext) (cty.Value, hcl.Diagnostics) {\n\treturn s.Expr.Value(ctx)\n}\n\nfunc (s *ExprSpec) impliedType() cty.Type {\n\t// We can't know the type of our expression until we evaluate it\n\treturn cty.DynamicPseudoType\n}\n\nfunc (s *ExprSpec) sourceRange(content *hcl.BodyContent, blockLabels []blockLabel) hcl.Range {\n\treturn s.Expr.Range()\n}\n\n// A BlockSpec is a Spec that produces a cty.Value by decoding the contents\n// of a single nested block of a given type, using a nested spec.\n//\n// If the Required flag is not set, the nested block may be omitted, in which\n// case a null value is produced. If it _is_ set, an error diagnostic is\n// produced if there are no nested blocks of the given type.\ntype BlockSpec struct {\n\tTypeName string\n\tNested   Spec\n\tRequired bool\n}\n\nfunc (s *BlockSpec) visitSameBodyChildren(cb visitFunc) {\n\t// leaf node (\"Nested\" does not use the same body)\n}\n\n// blockSpec implementation\nfunc (s *BlockSpec) blockHeaderSchemata() []hcl.BlockHeaderSchema {\n\treturn []hcl.BlockHeaderSchema{\n\t\t{\n\t\t\tType:       s.TypeName,\n\t\t\tLabelNames: findLabelSpecs(s.Nested),\n\t\t},\n\t}\n}\n\n// blockSpec implementation\nfunc (s *BlockSpec) nestedSpec() Spec {\n\treturn s.Nested\n}\n\n// specNeedingVariables implementation\nfunc (s *BlockSpec) variablesNeeded(content *hcl.BodyContent) []hcl.Traversal {\n\tvar childBlock *hcl.Block\n\tfor _, candidate := range content.Blocks {\n\t\tif candidate.Type != s.TypeName {\n\t\t\tcontinue\n\t\t}\n\n\t\tchildBlock = candidate\n\t\tbreak\n\t}\n\n\tif childBlock == nil {\n\t\treturn nil\n\t}\n\n\treturn Variables(childBlock.Body, s.Nested)\n}\n\nfunc (s *BlockSpec) decode(content *hcl.BodyContent, blockLabels []blockLabel, ctx *hcl.EvalContext) (cty.Value, hcl.Diagnostics) {\n\tvar diags hcl.Diagnostics\n\n\tvar childBlock *hcl.Block\n\tfor _, candidate := range content.Blocks {\n\t\tif candidate.Type != s.TypeName {\n\t\t\tcontinue\n\t\t}\n\n\t\tif childBlock != nil {\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  fmt.Sprintf(\"Duplicate %s block\", s.TypeName),\n\t\t\t\tDetail: fmt.Sprintf(\n\t\t\t\t\t\"Only one block of type %q is allowed. Previous definition was at %s.\",\n\t\t\t\t\ts.TypeName, childBlock.DefRange.String(),\n\t\t\t\t),\n\t\t\t\tSubject: &candidate.DefRange,\n\t\t\t})\n\t\t\tbreak\n\t\t}\n\n\t\tchildBlock = candidate\n\t}\n\n\tif childBlock == nil {\n\t\tif s.Required {\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  fmt.Sprintf(\"Missing %s block\", s.TypeName),\n\t\t\t\tDetail: fmt.Sprintf(\n\t\t\t\t\t\"A block of type %q is required here.\", s.TypeName,\n\t\t\t\t),\n\t\t\t\tSubject: &content.MissingItemRange,\n\t\t\t})\n\t\t}\n\t\treturn cty.NullVal(s.Nested.impliedType()), diags\n\t}\n\n\tif s.Nested == nil {\n\t\tpanic(\"BlockSpec with no Nested Spec\")\n\t}\n\tval, _, childDiags := decode(childBlock.Body, labelsForBlock(childBlock), ctx, s.Nested, false)\n\tdiags = append(diags, childDiags...)\n\treturn val, diags\n}\n\nfunc (s *BlockSpec) impliedType() cty.Type {\n\treturn s.Nested.impliedType()\n}\n\nfunc (s *BlockSpec) sourceRange(content *hcl.BodyContent, blockLabels []blockLabel) hcl.Range {\n\tvar childBlock *hcl.Block\n\tfor _, candidate := range content.Blocks {\n\t\tif candidate.Type != s.TypeName {\n\t\t\tcontinue\n\t\t}\n\n\t\tchildBlock = candidate\n\t\tbreak\n\t}\n\n\tif childBlock == nil {\n\t\treturn content.MissingItemRange\n\t}\n\n\treturn sourceRange(childBlock.Body, labelsForBlock(childBlock), s.Nested)\n}\n\n// A BlockListSpec is a Spec that produces a cty list of the results of\n// decoding all of the nested blocks of a given type, using a nested spec.\ntype BlockListSpec struct {\n\tTypeName string\n\tNested   Spec\n\tMinItems int\n\tMaxItems int\n}\n\nfunc (s *BlockListSpec) visitSameBodyChildren(cb visitFunc) {\n\t// leaf node (\"Nested\" does not use the same body)\n}\n\n// blockSpec implementation\nfunc (s *BlockListSpec) blockHeaderSchemata() []hcl.BlockHeaderSchema {\n\treturn []hcl.BlockHeaderSchema{\n\t\t{\n\t\t\tType:       s.TypeName,\n\t\t\tLabelNames: findLabelSpecs(s.Nested),\n\t\t},\n\t}\n}\n\n// blockSpec implementation\nfunc (s *BlockListSpec) nestedSpec() Spec {\n\treturn s.Nested\n}\n\n// specNeedingVariables implementation\nfunc (s *BlockListSpec) variablesNeeded(content *hcl.BodyContent) []hcl.Traversal {\n\tvar ret []hcl.Traversal\n\n\tfor _, childBlock := range content.Blocks {\n\t\tif childBlock.Type != s.TypeName {\n\t\t\tcontinue\n\t\t}\n\n\t\tret = append(ret, Variables(childBlock.Body, s.Nested)...)\n\t}\n\n\treturn ret\n}\n\nfunc (s *BlockListSpec) decode(content *hcl.BodyContent, blockLabels []blockLabel, ctx *hcl.EvalContext) (cty.Value, hcl.Diagnostics) {\n\tvar diags hcl.Diagnostics\n\n\tif s.Nested == nil {\n\t\tpanic(\"BlockListSpec with no Nested Spec\")\n\t}\n\n\tvar elems []cty.Value\n\tvar sourceRanges []hcl.Range\n\tfor _, childBlock := range content.Blocks {\n\t\tif childBlock.Type != s.TypeName {\n\t\t\tcontinue\n\t\t}\n\n\t\tval, _, childDiags := decode(childBlock.Body, labelsForBlock(childBlock), ctx, s.Nested, false)\n\t\tdiags = append(diags, childDiags...)\n\t\telems = append(elems, val)\n\t\tsourceRanges = append(sourceRanges, sourceRange(childBlock.Body, labelsForBlock(childBlock), s.Nested))\n\t}\n\n\tif len(elems) < s.MinItems {\n\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  fmt.Sprintf(\"Insufficient %s blocks\", s.TypeName),\n\t\t\tDetail:   fmt.Sprintf(\"At least %d %q blocks are required.\", s.MinItems, s.TypeName),\n\t\t\tSubject:  &content.MissingItemRange,\n\t\t})\n\t} else if s.MaxItems > 0 && len(elems) > s.MaxItems {\n\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  fmt.Sprintf(\"Too many %s blocks\", s.TypeName),\n\t\t\tDetail:   fmt.Sprintf(\"No more than %d %q blocks are allowed\", s.MaxItems, s.TypeName),\n\t\t\tSubject:  &sourceRanges[s.MaxItems],\n\t\t})\n\t}\n\n\tvar ret cty.Value\n\n\tif len(elems) == 0 {\n\t\tret = cty.ListValEmpty(s.Nested.impliedType())\n\t} else {\n\t\t// Since our target is a list, all of the decoded elements must have the\n\t\t// same type or cty.ListVal will panic below. Different types can arise\n\t\t// if there is an attribute spec of type cty.DynamicPseudoType in the\n\t\t// nested spec; all given values must be convertable to a single type\n\t\t// in order for the result to be considered valid.\n\t\tetys := make([]cty.Type, len(elems))\n\t\tfor i, v := range elems {\n\t\t\tetys[i] = v.Type()\n\t\t}\n\t\tety, convs := convert.UnifyUnsafe(etys)\n\t\tif ety == cty.NilType {\n\t\t\t// FIXME: This is a pretty terrible error message.\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  fmt.Sprintf(\"Unconsistent argument types in %s blocks\", s.TypeName),\n\t\t\t\tDetail:   \"Corresponding attributes in all blocks of this type must be the same.\",\n\t\t\t\tSubject:  &sourceRanges[0],\n\t\t\t})\n\t\t\treturn cty.DynamicVal, diags\n\t\t}\n\t\tfor i, v := range elems {\n\t\t\tif convs[i] != nil {\n\t\t\t\tnewV, err := convs[i](v)\n\t\t\t\tif err != nil {\n\t\t\t\t\t// FIXME: This is a pretty terrible error message.\n\t\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\t\tSummary:  fmt.Sprintf(\"Unconsistent argument types in %s blocks\", s.TypeName),\n\t\t\t\t\t\tDetail:   fmt.Sprintf(\"Block with index %d has inconsistent argument types: %s.\", i, err),\n\t\t\t\t\t\tSubject:  &sourceRanges[i],\n\t\t\t\t\t})\n\t\t\t\t\t// Bail early here so we won't panic below in cty.ListVal\n\t\t\t\t\treturn cty.DynamicVal, diags\n\t\t\t\t}\n\t\t\t\telems[i] = newV\n\t\t\t}\n\t\t}\n\n\t\tret = cty.ListVal(elems)\n\t}\n\n\treturn ret, diags\n}\n\nfunc (s *BlockListSpec) impliedType() cty.Type {\n\treturn cty.List(s.Nested.impliedType())\n}\n\nfunc (s *BlockListSpec) sourceRange(content *hcl.BodyContent, blockLabels []blockLabel) hcl.Range {\n\t// We return the source range of the _first_ block of the given type,\n\t// since they are not guaranteed to form a contiguous range.\n\n\tvar childBlock *hcl.Block\n\tfor _, candidate := range content.Blocks {\n\t\tif candidate.Type != s.TypeName {\n\t\t\tcontinue\n\t\t}\n\n\t\tchildBlock = candidate\n\t\tbreak\n\t}\n\n\tif childBlock == nil {\n\t\treturn content.MissingItemRange\n\t}\n\n\treturn sourceRange(childBlock.Body, labelsForBlock(childBlock), s.Nested)\n}\n\n// A BlockTupleSpec is a Spec that produces a cty tuple of the results of\n// decoding all of the nested blocks of a given type, using a nested spec.\n//\n// This is similar to BlockListSpec, but it permits the nested blocks to have\n// different result types in situations where cty.DynamicPseudoType attributes\n// are present.\ntype BlockTupleSpec struct {\n\tTypeName string\n\tNested   Spec\n\tMinItems int\n\tMaxItems int\n}\n\nfunc (s *BlockTupleSpec) visitSameBodyChildren(cb visitFunc) {\n\t// leaf node (\"Nested\" does not use the same body)\n}\n\n// blockSpec implementation\nfunc (s *BlockTupleSpec) blockHeaderSchemata() []hcl.BlockHeaderSchema {\n\treturn []hcl.BlockHeaderSchema{\n\t\t{\n\t\t\tType:       s.TypeName,\n\t\t\tLabelNames: findLabelSpecs(s.Nested),\n\t\t},\n\t}\n}\n\n// blockSpec implementation\nfunc (s *BlockTupleSpec) nestedSpec() Spec {\n\treturn s.Nested\n}\n\n// specNeedingVariables implementation\nfunc (s *BlockTupleSpec) variablesNeeded(content *hcl.BodyContent) []hcl.Traversal {\n\tvar ret []hcl.Traversal\n\n\tfor _, childBlock := range content.Blocks {\n\t\tif childBlock.Type != s.TypeName {\n\t\t\tcontinue\n\t\t}\n\n\t\tret = append(ret, Variables(childBlock.Body, s.Nested)...)\n\t}\n\n\treturn ret\n}\n\nfunc (s *BlockTupleSpec) decode(content *hcl.BodyContent, blockLabels []blockLabel, ctx *hcl.EvalContext) (cty.Value, hcl.Diagnostics) {\n\tvar diags hcl.Diagnostics\n\n\tif s.Nested == nil {\n\t\tpanic(\"BlockListSpec with no Nested Spec\")\n\t}\n\n\tvar elems []cty.Value\n\tvar sourceRanges []hcl.Range\n\tfor _, childBlock := range content.Blocks {\n\t\tif childBlock.Type != s.TypeName {\n\t\t\tcontinue\n\t\t}\n\n\t\tval, _, childDiags := decode(childBlock.Body, labelsForBlock(childBlock), ctx, s.Nested, false)\n\t\tdiags = append(diags, childDiags...)\n\t\telems = append(elems, val)\n\t\tsourceRanges = append(sourceRanges, sourceRange(childBlock.Body, labelsForBlock(childBlock), s.Nested))\n\t}\n\n\tif len(elems) < s.MinItems {\n\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  fmt.Sprintf(\"Insufficient %s blocks\", s.TypeName),\n\t\t\tDetail:   fmt.Sprintf(\"At least %d %q blocks are required.\", s.MinItems, s.TypeName),\n\t\t\tSubject:  &content.MissingItemRange,\n\t\t})\n\t} else if s.MaxItems > 0 && len(elems) > s.MaxItems {\n\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  fmt.Sprintf(\"Too many %s blocks\", s.TypeName),\n\t\t\tDetail:   fmt.Sprintf(\"No more than %d %q blocks are allowed\", s.MaxItems, s.TypeName),\n\t\t\tSubject:  &sourceRanges[s.MaxItems],\n\t\t})\n\t}\n\n\tvar ret cty.Value\n\n\tif len(elems) == 0 {\n\t\tret = cty.EmptyTupleVal\n\t} else {\n\t\tret = cty.TupleVal(elems)\n\t}\n\n\treturn ret, diags\n}\n\nfunc (s *BlockTupleSpec) impliedType() cty.Type {\n\t// We can't predict our type, because we don't know how many blocks\n\t// there will be until we decode.\n\treturn cty.DynamicPseudoType\n}\n\nfunc (s *BlockTupleSpec) sourceRange(content *hcl.BodyContent, blockLabels []blockLabel) hcl.Range {\n\t// We return the source range of the _first_ block of the given type,\n\t// since they are not guaranteed to form a contiguous range.\n\n\tvar childBlock *hcl.Block\n\tfor _, candidate := range content.Blocks {\n\t\tif candidate.Type != s.TypeName {\n\t\t\tcontinue\n\t\t}\n\n\t\tchildBlock = candidate\n\t\tbreak\n\t}\n\n\tif childBlock == nil {\n\t\treturn content.MissingItemRange\n\t}\n\n\treturn sourceRange(childBlock.Body, labelsForBlock(childBlock), s.Nested)\n}\n\n// A BlockSetSpec is a Spec that produces a cty set of the results of\n// decoding all of the nested blocks of a given type, using a nested spec.\ntype BlockSetSpec struct {\n\tTypeName string\n\tNested   Spec\n\tMinItems int\n\tMaxItems int\n}\n\nfunc (s *BlockSetSpec) visitSameBodyChildren(cb visitFunc) {\n\t// leaf node (\"Nested\" does not use the same body)\n}\n\n// blockSpec implementation\nfunc (s *BlockSetSpec) blockHeaderSchemata() []hcl.BlockHeaderSchema {\n\treturn []hcl.BlockHeaderSchema{\n\t\t{\n\t\t\tType:       s.TypeName,\n\t\t\tLabelNames: findLabelSpecs(s.Nested),\n\t\t},\n\t}\n}\n\n// blockSpec implementation\nfunc (s *BlockSetSpec) nestedSpec() Spec {\n\treturn s.Nested\n}\n\n// specNeedingVariables implementation\nfunc (s *BlockSetSpec) variablesNeeded(content *hcl.BodyContent) []hcl.Traversal {\n\tvar ret []hcl.Traversal\n\n\tfor _, childBlock := range content.Blocks {\n\t\tif childBlock.Type != s.TypeName {\n\t\t\tcontinue\n\t\t}\n\n\t\tret = append(ret, Variables(childBlock.Body, s.Nested)...)\n\t}\n\n\treturn ret\n}\n\nfunc (s *BlockSetSpec) decode(content *hcl.BodyContent, blockLabels []blockLabel, ctx *hcl.EvalContext) (cty.Value, hcl.Diagnostics) {\n\tvar diags hcl.Diagnostics\n\n\tif s.Nested == nil {\n\t\tpanic(\"BlockSetSpec with no Nested Spec\")\n\t}\n\n\tvar elems []cty.Value\n\tvar sourceRanges []hcl.Range\n\tfor _, childBlock := range content.Blocks {\n\t\tif childBlock.Type != s.TypeName {\n\t\t\tcontinue\n\t\t}\n\n\t\tval, _, childDiags := decode(childBlock.Body, labelsForBlock(childBlock), ctx, s.Nested, false)\n\t\tdiags = append(diags, childDiags...)\n\t\telems = append(elems, val)\n\t\tsourceRanges = append(sourceRanges, sourceRange(childBlock.Body, labelsForBlock(childBlock), s.Nested))\n\t}\n\n\tif len(elems) < s.MinItems {\n\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  fmt.Sprintf(\"Insufficient %s blocks\", s.TypeName),\n\t\t\tDetail:   fmt.Sprintf(\"At least %d %q blocks are required.\", s.MinItems, s.TypeName),\n\t\t\tSubject:  &content.MissingItemRange,\n\t\t})\n\t} else if s.MaxItems > 0 && len(elems) > s.MaxItems {\n\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  fmt.Sprintf(\"Too many %s blocks\", s.TypeName),\n\t\t\tDetail:   fmt.Sprintf(\"No more than %d %q blocks are allowed\", s.MaxItems, s.TypeName),\n\t\t\tSubject:  &sourceRanges[s.MaxItems],\n\t\t})\n\t}\n\n\tvar ret cty.Value\n\n\tif len(elems) == 0 {\n\t\tret = cty.SetValEmpty(s.Nested.impliedType())\n\t} else {\n\t\t// Since our target is a set, all of the decoded elements must have the\n\t\t// same type or cty.SetVal will panic below. Different types can arise\n\t\t// if there is an attribute spec of type cty.DynamicPseudoType in the\n\t\t// nested spec; all given values must be convertable to a single type\n\t\t// in order for the result to be considered valid.\n\t\tetys := make([]cty.Type, len(elems))\n\t\tfor i, v := range elems {\n\t\t\tetys[i] = v.Type()\n\t\t}\n\t\tety, convs := convert.UnifyUnsafe(etys)\n\t\tif ety == cty.NilType {\n\t\t\t// FIXME: This is a pretty terrible error message.\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  fmt.Sprintf(\"Unconsistent argument types in %s blocks\", s.TypeName),\n\t\t\t\tDetail:   \"Corresponding attributes in all blocks of this type must be the same.\",\n\t\t\t\tSubject:  &sourceRanges[0],\n\t\t\t})\n\t\t\treturn cty.DynamicVal, diags\n\t\t}\n\t\tfor i, v := range elems {\n\t\t\tif convs[i] != nil {\n\t\t\t\tnewV, err := convs[i](v)\n\t\t\t\tif err != nil {\n\t\t\t\t\t// FIXME: This is a pretty terrible error message.\n\t\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\t\tSummary:  fmt.Sprintf(\"Unconsistent argument types in %s blocks\", s.TypeName),\n\t\t\t\t\t\tDetail:   fmt.Sprintf(\"Block with index %d has inconsistent argument types: %s.\", i, err),\n\t\t\t\t\t\tSubject:  &sourceRanges[i],\n\t\t\t\t\t})\n\t\t\t\t\t// Bail early here so we won't panic below in cty.ListVal\n\t\t\t\t\treturn cty.DynamicVal, diags\n\t\t\t\t}\n\t\t\t\telems[i] = newV\n\t\t\t}\n\t\t}\n\n\t\tret = cty.SetVal(elems)\n\t}\n\n\treturn ret, diags\n}\n\nfunc (s *BlockSetSpec) impliedType() cty.Type {\n\treturn cty.Set(s.Nested.impliedType())\n}\n\nfunc (s *BlockSetSpec) sourceRange(content *hcl.BodyContent, blockLabels []blockLabel) hcl.Range {\n\t// We return the source range of the _first_ block of the given type,\n\t// since they are not guaranteed to form a contiguous range.\n\n\tvar childBlock *hcl.Block\n\tfor _, candidate := range content.Blocks {\n\t\tif candidate.Type != s.TypeName {\n\t\t\tcontinue\n\t\t}\n\n\t\tchildBlock = candidate\n\t\tbreak\n\t}\n\n\tif childBlock == nil {\n\t\treturn content.MissingItemRange\n\t}\n\n\treturn sourceRange(childBlock.Body, labelsForBlock(childBlock), s.Nested)\n}\n\n// A BlockMapSpec is a Spec that produces a cty map of the results of\n// decoding all of the nested blocks of a given type, using a nested spec.\n//\n// One level of map structure is created for each of the given label names.\n// There must be at least one given label name.\ntype BlockMapSpec struct {\n\tTypeName   string\n\tLabelNames []string\n\tNested     Spec\n}\n\nfunc (s *BlockMapSpec) visitSameBodyChildren(cb visitFunc) {\n\t// leaf node (\"Nested\" does not use the same body)\n}\n\n// blockSpec implementation\nfunc (s *BlockMapSpec) blockHeaderSchemata() []hcl.BlockHeaderSchema {\n\treturn []hcl.BlockHeaderSchema{\n\t\t{\n\t\t\tType:       s.TypeName,\n\t\t\tLabelNames: append(s.LabelNames, findLabelSpecs(s.Nested)...),\n\t\t},\n\t}\n}\n\n// blockSpec implementation\nfunc (s *BlockMapSpec) nestedSpec() Spec {\n\treturn s.Nested\n}\n\n// specNeedingVariables implementation\nfunc (s *BlockMapSpec) variablesNeeded(content *hcl.BodyContent) []hcl.Traversal {\n\tvar ret []hcl.Traversal\n\n\tfor _, childBlock := range content.Blocks {\n\t\tif childBlock.Type != s.TypeName {\n\t\t\tcontinue\n\t\t}\n\n\t\tret = append(ret, Variables(childBlock.Body, s.Nested)...)\n\t}\n\n\treturn ret\n}\n\nfunc (s *BlockMapSpec) decode(content *hcl.BodyContent, blockLabels []blockLabel, ctx *hcl.EvalContext) (cty.Value, hcl.Diagnostics) {\n\tvar diags hcl.Diagnostics\n\n\tif s.Nested == nil {\n\t\tpanic(\"BlockMapSpec with no Nested Spec\")\n\t}\n\tif ImpliedType(s).HasDynamicTypes() {\n\t\tpanic(\"cty.DynamicPseudoType attributes may not be used inside a BlockMapSpec\")\n\t}\n\n\telems := map[string]interface{}{}\n\tfor _, childBlock := range content.Blocks {\n\t\tif childBlock.Type != s.TypeName {\n\t\t\tcontinue\n\t\t}\n\n\t\tchildLabels := labelsForBlock(childBlock)\n\t\tval, _, childDiags := decode(childBlock.Body, childLabels[len(s.LabelNames):], ctx, s.Nested, false)\n\t\ttargetMap := elems\n\t\tfor _, key := range childBlock.Labels[:len(s.LabelNames)-1] {\n\t\t\tif _, exists := targetMap[key]; !exists {\n\t\t\t\ttargetMap[key] = make(map[string]interface{})\n\t\t\t}\n\t\t\ttargetMap = targetMap[key].(map[string]interface{})\n\t\t}\n\n\t\tdiags = append(diags, childDiags...)\n\n\t\tkey := childBlock.Labels[len(s.LabelNames)-1]\n\t\tif _, exists := targetMap[key]; exists {\n\t\t\tlabelsBuf := bytes.Buffer{}\n\t\t\tfor _, label := range childBlock.Labels {\n\t\t\t\tfmt.Fprintf(&labelsBuf, \" %q\", label)\n\t\t\t}\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  fmt.Sprintf(\"Duplicate %s block\", s.TypeName),\n\t\t\t\tDetail: fmt.Sprintf(\n\t\t\t\t\t\"A block for %s%s was already defined. The %s labels must be unique.\",\n\t\t\t\t\ts.TypeName, labelsBuf.String(), s.TypeName,\n\t\t\t\t),\n\t\t\t\tSubject: &childBlock.DefRange,\n\t\t\t})\n\t\t\tcontinue\n\t\t}\n\n\t\ttargetMap[key] = val\n\t}\n\n\tif len(elems) == 0 {\n\t\treturn cty.MapValEmpty(s.Nested.impliedType()), diags\n\t}\n\n\tvar ctyMap func(map[string]interface{}, int) cty.Value\n\tctyMap = func(raw map[string]interface{}, depth int) cty.Value {\n\t\tvals := make(map[string]cty.Value, len(raw))\n\t\tif depth == 1 {\n\t\t\tfor k, v := range raw {\n\t\t\t\tvals[k] = v.(cty.Value)\n\t\t\t}\n\t\t} else {\n\t\t\tfor k, v := range raw {\n\t\t\t\tvals[k] = ctyMap(v.(map[string]interface{}), depth-1)\n\t\t\t}\n\t\t}\n\t\treturn cty.MapVal(vals)\n\t}\n\n\treturn ctyMap(elems, len(s.LabelNames)), diags\n}\n\nfunc (s *BlockMapSpec) impliedType() cty.Type {\n\tret := s.Nested.impliedType()\n\tfor _ = range s.LabelNames {\n\t\tret = cty.Map(ret)\n\t}\n\treturn ret\n}\n\nfunc (s *BlockMapSpec) sourceRange(content *hcl.BodyContent, blockLabels []blockLabel) hcl.Range {\n\t// We return the source range of the _first_ block of the given type,\n\t// since they are not guaranteed to form a contiguous range.\n\n\tvar childBlock *hcl.Block\n\tfor _, candidate := range content.Blocks {\n\t\tif candidate.Type != s.TypeName {\n\t\t\tcontinue\n\t\t}\n\n\t\tchildBlock = candidate\n\t\tbreak\n\t}\n\n\tif childBlock == nil {\n\t\treturn content.MissingItemRange\n\t}\n\n\treturn sourceRange(childBlock.Body, labelsForBlock(childBlock), s.Nested)\n}\n\n// A BlockObjectSpec is a Spec that produces a cty object of the results of\n// decoding all of the nested blocks of a given type, using a nested spec.\n//\n// One level of object structure is created for each of the given label names.\n// There must be at least one given label name.\n//\n// This is similar to BlockMapSpec, but it permits the nested blocks to have\n// different result types in situations where cty.DynamicPseudoType attributes\n// are present.\ntype BlockObjectSpec struct {\n\tTypeName   string\n\tLabelNames []string\n\tNested     Spec\n}\n\nfunc (s *BlockObjectSpec) visitSameBodyChildren(cb visitFunc) {\n\t// leaf node (\"Nested\" does not use the same body)\n}\n\n// blockSpec implementation\nfunc (s *BlockObjectSpec) blockHeaderSchemata() []hcl.BlockHeaderSchema {\n\treturn []hcl.BlockHeaderSchema{\n\t\t{\n\t\t\tType:       s.TypeName,\n\t\t\tLabelNames: append(s.LabelNames, findLabelSpecs(s.Nested)...),\n\t\t},\n\t}\n}\n\n// blockSpec implementation\nfunc (s *BlockObjectSpec) nestedSpec() Spec {\n\treturn s.Nested\n}\n\n// specNeedingVariables implementation\nfunc (s *BlockObjectSpec) variablesNeeded(content *hcl.BodyContent) []hcl.Traversal {\n\tvar ret []hcl.Traversal\n\n\tfor _, childBlock := range content.Blocks {\n\t\tif childBlock.Type != s.TypeName {\n\t\t\tcontinue\n\t\t}\n\n\t\tret = append(ret, Variables(childBlock.Body, s.Nested)...)\n\t}\n\n\treturn ret\n}\n\nfunc (s *BlockObjectSpec) decode(content *hcl.BodyContent, blockLabels []blockLabel, ctx *hcl.EvalContext) (cty.Value, hcl.Diagnostics) {\n\tvar diags hcl.Diagnostics\n\n\tif s.Nested == nil {\n\t\tpanic(\"BlockObjectSpec with no Nested Spec\")\n\t}\n\n\telems := map[string]interface{}{}\n\tfor _, childBlock := range content.Blocks {\n\t\tif childBlock.Type != s.TypeName {\n\t\t\tcontinue\n\t\t}\n\n\t\tchildLabels := labelsForBlock(childBlock)\n\t\tval, _, childDiags := decode(childBlock.Body, childLabels[len(s.LabelNames):], ctx, s.Nested, false)\n\t\ttargetMap := elems\n\t\tfor _, key := range childBlock.Labels[:len(s.LabelNames)-1] {\n\t\t\tif _, exists := targetMap[key]; !exists {\n\t\t\t\ttargetMap[key] = make(map[string]interface{})\n\t\t\t}\n\t\t\ttargetMap = targetMap[key].(map[string]interface{})\n\t\t}\n\n\t\tdiags = append(diags, childDiags...)\n\n\t\tkey := childBlock.Labels[len(s.LabelNames)-1]\n\t\tif _, exists := targetMap[key]; exists {\n\t\t\tlabelsBuf := bytes.Buffer{}\n\t\t\tfor _, label := range childBlock.Labels {\n\t\t\t\tfmt.Fprintf(&labelsBuf, \" %q\", label)\n\t\t\t}\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  fmt.Sprintf(\"Duplicate %s block\", s.TypeName),\n\t\t\t\tDetail: fmt.Sprintf(\n\t\t\t\t\t\"A block for %s%s was already defined. The %s labels must be unique.\",\n\t\t\t\t\ts.TypeName, labelsBuf.String(), s.TypeName,\n\t\t\t\t),\n\t\t\t\tSubject: &childBlock.DefRange,\n\t\t\t})\n\t\t\tcontinue\n\t\t}\n\n\t\ttargetMap[key] = val\n\t}\n\n\tif len(elems) == 0 {\n\t\treturn cty.EmptyObjectVal, diags\n\t}\n\n\tvar ctyObj func(map[string]interface{}, int) cty.Value\n\tctyObj = func(raw map[string]interface{}, depth int) cty.Value {\n\t\tvals := make(map[string]cty.Value, len(raw))\n\t\tif depth == 1 {\n\t\t\tfor k, v := range raw {\n\t\t\t\tvals[k] = v.(cty.Value)\n\t\t\t}\n\t\t} else {\n\t\t\tfor k, v := range raw {\n\t\t\t\tvals[k] = ctyObj(v.(map[string]interface{}), depth-1)\n\t\t\t}\n\t\t}\n\t\treturn cty.ObjectVal(vals)\n\t}\n\n\treturn ctyObj(elems, len(s.LabelNames)), diags\n}\n\nfunc (s *BlockObjectSpec) impliedType() cty.Type {\n\t// We can't predict our type, since we don't know how many blocks are\n\t// present and what labels they have until we decode.\n\treturn cty.DynamicPseudoType\n}\n\nfunc (s *BlockObjectSpec) sourceRange(content *hcl.BodyContent, blockLabels []blockLabel) hcl.Range {\n\t// We return the source range of the _first_ block of the given type,\n\t// since they are not guaranteed to form a contiguous range.\n\n\tvar childBlock *hcl.Block\n\tfor _, candidate := range content.Blocks {\n\t\tif candidate.Type != s.TypeName {\n\t\t\tcontinue\n\t\t}\n\n\t\tchildBlock = candidate\n\t\tbreak\n\t}\n\n\tif childBlock == nil {\n\t\treturn content.MissingItemRange\n\t}\n\n\treturn sourceRange(childBlock.Body, labelsForBlock(childBlock), s.Nested)\n}\n\n// A BlockAttrsSpec is a Spec that interprets a single block as if it were\n// a map of some element type. That is, each attribute within the block\n// becomes a key in the resulting map and the attribute's value becomes the\n// element value, after conversion to the given element type. The resulting\n// value is a cty.Map of the given element type.\n//\n// This spec imposes a validation constraint that there be exactly one block\n// of the given type name and that this block may contain only attributes. The\n// block does not accept any labels.\n//\n// This is an alternative to an AttrSpec of a map type for situations where\n// block syntax is desired. Note that block syntax does not permit dynamic\n// keys, construction of the result via a \"for\" expression, etc. In most cases\n// an AttrSpec is preferred if the desired result is a map whose keys are\n// chosen by the user rather than by schema.\ntype BlockAttrsSpec struct {\n\tTypeName    string\n\tElementType cty.Type\n\tRequired    bool\n}\n\nfunc (s *BlockAttrsSpec) visitSameBodyChildren(cb visitFunc) {\n\t// leaf node\n}\n\n// blockSpec implementation\nfunc (s *BlockAttrsSpec) blockHeaderSchemata() []hcl.BlockHeaderSchema {\n\treturn []hcl.BlockHeaderSchema{\n\t\t{\n\t\t\tType:       s.TypeName,\n\t\t\tLabelNames: nil,\n\t\t},\n\t}\n}\n\n// blockSpec implementation\nfunc (s *BlockAttrsSpec) nestedSpec() Spec {\n\t// This is an odd case: we aren't actually going to apply a nested spec\n\t// in this case, since we're going to interpret the body directly as\n\t// attributes, but we need to return something non-nil so that the\n\t// decoder will recognize this as a block spec. We won't actually be\n\t// using this for anything at decode time.\n\treturn noopSpec{}\n}\n\n// specNeedingVariables implementation\nfunc (s *BlockAttrsSpec) variablesNeeded(content *hcl.BodyContent) []hcl.Traversal {\n\n\tblock, _ := s.findBlock(content)\n\tif block == nil {\n\t\treturn nil\n\t}\n\n\tvar vars []hcl.Traversal\n\n\tattrs, diags := block.Body.JustAttributes()\n\tif diags.HasErrors() {\n\t\treturn nil\n\t}\n\n\tfor _, attr := range attrs {\n\t\tvars = append(vars, attr.Expr.Variables()...)\n\t}\n\n\t// We'll return the variables references in source order so that any\n\t// error messages that result are also in source order.\n\tsort.Slice(vars, func(i, j int) bool {\n\t\treturn vars[i].SourceRange().Start.Byte < vars[j].SourceRange().Start.Byte\n\t})\n\n\treturn vars\n}\n\nfunc (s *BlockAttrsSpec) decode(content *hcl.BodyContent, blockLabels []blockLabel, ctx *hcl.EvalContext) (cty.Value, hcl.Diagnostics) {\n\tvar diags hcl.Diagnostics\n\n\tblock, other := s.findBlock(content)\n\tif block == nil {\n\t\tif s.Required {\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  fmt.Sprintf(\"Missing %s block\", s.TypeName),\n\t\t\t\tDetail: fmt.Sprintf(\n\t\t\t\t\t\"A block of type %q is required here.\", s.TypeName,\n\t\t\t\t),\n\t\t\t\tSubject: &content.MissingItemRange,\n\t\t\t})\n\t\t}\n\t\treturn cty.NullVal(cty.Map(s.ElementType)), diags\n\t}\n\tif other != nil {\n\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  fmt.Sprintf(\"Duplicate %s block\", s.TypeName),\n\t\t\tDetail: fmt.Sprintf(\n\t\t\t\t\"Only one block of type %q is allowed. Previous definition was at %s.\",\n\t\t\t\ts.TypeName, block.DefRange.String(),\n\t\t\t),\n\t\t\tSubject: &other.DefRange,\n\t\t})\n\t}\n\n\tattrs, attrDiags := block.Body.JustAttributes()\n\tdiags = append(diags, attrDiags...)\n\n\tif len(attrs) == 0 {\n\t\treturn cty.MapValEmpty(s.ElementType), diags\n\t}\n\n\tvals := make(map[string]cty.Value, len(attrs))\n\tfor name, attr := range attrs {\n\t\tattrVal, attrDiags := attr.Expr.Value(ctx)\n\t\tdiags = append(diags, attrDiags...)\n\n\t\tattrVal, err := convert.Convert(attrVal, s.ElementType)\n\t\tif err != nil {\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Invalid attribute value\",\n\t\t\t\tDetail:   fmt.Sprintf(\"Invalid value for attribute of %q block: %s.\", s.TypeName, err),\n\t\t\t\tSubject:  attr.Expr.Range().Ptr(),\n\t\t\t})\n\t\t\tattrVal = cty.UnknownVal(s.ElementType)\n\t\t}\n\n\t\tvals[name] = attrVal\n\t}\n\n\treturn cty.MapVal(vals), diags\n}\n\nfunc (s *BlockAttrsSpec) impliedType() cty.Type {\n\treturn cty.Map(s.ElementType)\n}\n\nfunc (s *BlockAttrsSpec) sourceRange(content *hcl.BodyContent, blockLabels []blockLabel) hcl.Range {\n\tblock, _ := s.findBlock(content)\n\tif block == nil {\n\t\treturn content.MissingItemRange\n\t}\n\treturn block.DefRange\n}\n\nfunc (s *BlockAttrsSpec) findBlock(content *hcl.BodyContent) (block *hcl.Block, other *hcl.Block) {\n\tfor _, candidate := range content.Blocks {\n\t\tif candidate.Type != s.TypeName {\n\t\t\tcontinue\n\t\t}\n\t\tif block != nil {\n\t\t\treturn block, candidate\n\t\t}\n\t\tblock = candidate\n\t}\n\n\treturn block, nil\n}\n\n// A BlockLabelSpec is a Spec that returns a cty.String representing the\n// label of the block its given body belongs to, if indeed its given body\n// belongs to a block. It is a programming error to use this in a non-block\n// context, so this spec will panic in that case.\n//\n// This spec only works in the nested spec within a BlockSpec, BlockListSpec,\n// BlockSetSpec or BlockMapSpec.\n//\n// The full set of label specs used against a particular block must have a\n// consecutive set of indices starting at zero. The maximum index found\n// defines how many labels the corresponding blocks must have in cty source.\ntype BlockLabelSpec struct {\n\tIndex int\n\tName  string\n}\n\nfunc (s *BlockLabelSpec) visitSameBodyChildren(cb visitFunc) {\n\t// leaf node\n}\n\nfunc (s *BlockLabelSpec) decode(content *hcl.BodyContent, blockLabels []blockLabel, ctx *hcl.EvalContext) (cty.Value, hcl.Diagnostics) {\n\tif s.Index >= len(blockLabels) {\n\t\tpanic(\"BlockListSpec used in non-block context\")\n\t}\n\n\treturn cty.StringVal(blockLabels[s.Index].Value), nil\n}\n\nfunc (s *BlockLabelSpec) impliedType() cty.Type {\n\treturn cty.String // labels are always strings\n}\n\nfunc (s *BlockLabelSpec) sourceRange(content *hcl.BodyContent, blockLabels []blockLabel) hcl.Range {\n\tif s.Index >= len(blockLabels) {\n\t\tpanic(\"BlockListSpec used in non-block context\")\n\t}\n\n\treturn blockLabels[s.Index].Range\n}\n\nfunc findLabelSpecs(spec Spec) []string {\n\tmaxIdx := -1\n\tvar names map[int]string\n\n\tvar visit visitFunc\n\tvisit = func(s Spec) {\n\t\tif ls, ok := s.(*BlockLabelSpec); ok {\n\t\t\tif maxIdx < ls.Index {\n\t\t\t\tmaxIdx = ls.Index\n\t\t\t}\n\t\t\tif names == nil {\n\t\t\t\tnames = make(map[int]string)\n\t\t\t}\n\t\t\tnames[ls.Index] = ls.Name\n\t\t}\n\t\ts.visitSameBodyChildren(visit)\n\t}\n\n\tvisit(spec)\n\n\tif maxIdx < 0 {\n\t\treturn nil // no labels at all\n\t}\n\n\tret := make([]string, maxIdx+1)\n\tfor i := range ret {\n\t\tname := names[i]\n\t\tif name == \"\" {\n\t\t\t// Should never happen if the spec is conformant, since we require\n\t\t\t// consecutive indices starting at zero.\n\t\t\tname = fmt.Sprintf(\"missing%02d\", i)\n\t\t}\n\t\tret[i] = name\n\t}\n\n\treturn ret\n}\n\n// DefaultSpec is a spec that wraps two specs, evaluating the primary first\n// and then evaluating the default if the primary returns a null value.\n//\n// The two specifications must have the same implied result type for correct\n// operation. If not, the result is undefined.\n//\n// Any requirements imposed by the \"Default\" spec apply even if \"Primary\" does\n// not return null. For example, if the \"Default\" spec is for a required\n// attribute then that attribute is always required, regardless of the result\n// of the \"Primary\" spec.\n//\n// The \"Default\" spec must not describe a nested block, since otherwise the\n// result of ChildBlockTypes would not be decidable without evaluation. If\n// the default spec _does_ describe a nested block then the result is\n// undefined.\ntype DefaultSpec struct {\n\tPrimary Spec\n\tDefault Spec\n}\n\nfunc (s *DefaultSpec) visitSameBodyChildren(cb visitFunc) {\n\tcb(s.Primary)\n\tcb(s.Default)\n}\n\nfunc (s *DefaultSpec) decode(content *hcl.BodyContent, blockLabels []blockLabel, ctx *hcl.EvalContext) (cty.Value, hcl.Diagnostics) {\n\tval, diags := s.Primary.decode(content, blockLabels, ctx)\n\tif val.IsNull() {\n\t\tvar moreDiags hcl.Diagnostics\n\t\tval, moreDiags = s.Default.decode(content, blockLabels, ctx)\n\t\tdiags = append(diags, moreDiags...)\n\t}\n\treturn val, diags\n}\n\nfunc (s *DefaultSpec) impliedType() cty.Type {\n\treturn s.Primary.impliedType()\n}\n\n// attrSpec implementation\nfunc (s *DefaultSpec) attrSchemata() []hcl.AttributeSchema {\n\t// We must pass through the union of both of our nested specs so that\n\t// we'll have both values available in the result.\n\tvar ret []hcl.AttributeSchema\n\tif as, ok := s.Primary.(attrSpec); ok {\n\t\tret = append(ret, as.attrSchemata()...)\n\t}\n\tif as, ok := s.Default.(attrSpec); ok {\n\t\tret = append(ret, as.attrSchemata()...)\n\t}\n\treturn ret\n}\n\n// blockSpec implementation\nfunc (s *DefaultSpec) blockHeaderSchemata() []hcl.BlockHeaderSchema {\n\t// Only the primary spec may describe a block, since otherwise\n\t// our nestedSpec method below can't know which to return.\n\tif bs, ok := s.Primary.(blockSpec); ok {\n\t\treturn bs.blockHeaderSchemata()\n\t}\n\treturn nil\n}\n\n// blockSpec implementation\nfunc (s *DefaultSpec) nestedSpec() Spec {\n\tif bs, ok := s.Primary.(blockSpec); ok {\n\t\treturn bs.nestedSpec()\n\t}\n\treturn nil\n}\n\nfunc (s *DefaultSpec) sourceRange(content *hcl.BodyContent, blockLabels []blockLabel) hcl.Range {\n\t// We can't tell from here which of the two specs will ultimately be used\n\t// in our result, so we'll just assume the first. This is usually the right\n\t// choice because the default is often a literal spec that doesn't have a\n\t// reasonable source range to return anyway.\n\treturn s.Primary.sourceRange(content, blockLabels)\n}\n\n// TransformExprSpec is a spec that wraps another and then evaluates a given\n// hcl.Expression on the result.\n//\n// The implied type of this spec is determined by evaluating the expression\n// with an unknown value of the nested spec's implied type, which may cause\n// the result to be imprecise. This spec should not be used in situations where\n// precise result type information is needed.\ntype TransformExprSpec struct {\n\tWrapped      Spec\n\tExpr         hcl.Expression\n\tTransformCtx *hcl.EvalContext\n\tVarName      string\n}\n\nfunc (s *TransformExprSpec) visitSameBodyChildren(cb visitFunc) {\n\tcb(s.Wrapped)\n}\n\nfunc (s *TransformExprSpec) decode(content *hcl.BodyContent, blockLabels []blockLabel, ctx *hcl.EvalContext) (cty.Value, hcl.Diagnostics) {\n\twrappedVal, diags := s.Wrapped.decode(content, blockLabels, ctx)\n\tif diags.HasErrors() {\n\t\t// We won't try to run our function in this case, because it'll probably\n\t\t// generate confusing additional errors that will distract from the\n\t\t// root cause.\n\t\treturn cty.UnknownVal(s.impliedType()), diags\n\t}\n\n\tchiCtx := s.TransformCtx.NewChild()\n\tchiCtx.Variables = map[string]cty.Value{\n\t\ts.VarName: wrappedVal,\n\t}\n\tresultVal, resultDiags := s.Expr.Value(chiCtx)\n\tdiags = append(diags, resultDiags...)\n\treturn resultVal, diags\n}\n\nfunc (s *TransformExprSpec) impliedType() cty.Type {\n\twrappedTy := s.Wrapped.impliedType()\n\tchiCtx := s.TransformCtx.NewChild()\n\tchiCtx.Variables = map[string]cty.Value{\n\t\ts.VarName: cty.UnknownVal(wrappedTy),\n\t}\n\tresultVal, _ := s.Expr.Value(chiCtx)\n\treturn resultVal.Type()\n}\n\nfunc (s *TransformExprSpec) sourceRange(content *hcl.BodyContent, blockLabels []blockLabel) hcl.Range {\n\t// We'll just pass through our wrapped range here, even though that's\n\t// not super-accurate, because there's nothing better to return.\n\treturn s.Wrapped.sourceRange(content, blockLabels)\n}\n\n// TransformFuncSpec is a spec that wraps another and then evaluates a given\n// cty function with the result. The given function must expect exactly one\n// argument, where the result of the wrapped spec will be passed.\n//\n// The implied type of this spec is determined by type-checking the function\n// with an unknown value of the nested spec's implied type, which may cause\n// the result to be imprecise. This spec should not be used in situations where\n// precise result type information is needed.\n//\n// If the given function produces an error when run, this spec will produce\n// a non-user-actionable diagnostic message. It's the caller's responsibility\n// to ensure that the given function cannot fail for any non-error result\n// of the wrapped spec.\ntype TransformFuncSpec struct {\n\tWrapped Spec\n\tFunc    function.Function\n}\n\nfunc (s *TransformFuncSpec) visitSameBodyChildren(cb visitFunc) {\n\tcb(s.Wrapped)\n}\n\nfunc (s *TransformFuncSpec) decode(content *hcl.BodyContent, blockLabels []blockLabel, ctx *hcl.EvalContext) (cty.Value, hcl.Diagnostics) {\n\twrappedVal, diags := s.Wrapped.decode(content, blockLabels, ctx)\n\tif diags.HasErrors() {\n\t\t// We won't try to run our function in this case, because it'll probably\n\t\t// generate confusing additional errors that will distract from the\n\t\t// root cause.\n\t\treturn cty.UnknownVal(s.impliedType()), diags\n\t}\n\n\tresultVal, err := s.Func.Call([]cty.Value{wrappedVal})\n\tif err != nil {\n\t\t// This is not a good example of a diagnostic because it is reporting\n\t\t// a programming error in the calling application, rather than something\n\t\t// an end-user could act on.\n\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Transform function failed\",\n\t\t\tDetail:   fmt.Sprintf(\"Decoder transform returned an error: %s\", err),\n\t\t\tSubject:  s.sourceRange(content, blockLabels).Ptr(),\n\t\t})\n\t\treturn cty.UnknownVal(s.impliedType()), diags\n\t}\n\n\treturn resultVal, diags\n}\n\nfunc (s *TransformFuncSpec) impliedType() cty.Type {\n\twrappedTy := s.Wrapped.impliedType()\n\tresultTy, err := s.Func.ReturnType([]cty.Type{wrappedTy})\n\tif err != nil {\n\t\t// Should never happen with a correctly-configured spec\n\t\treturn cty.DynamicPseudoType\n\t}\n\n\treturn resultTy\n}\n\nfunc (s *TransformFuncSpec) sourceRange(content *hcl.BodyContent, blockLabels []blockLabel) hcl.Range {\n\t// We'll just pass through our wrapped range here, even though that's\n\t// not super-accurate, because there's nothing better to return.\n\treturn s.Wrapped.sourceRange(content, blockLabels)\n}\n\n// noopSpec is a placeholder spec that does nothing, used in situations where\n// a non-nil placeholder spec is required. It is not exported because there is\n// no reason to use it directly; it is always an implementation detail only.\ntype noopSpec struct {\n}\n\nfunc (s noopSpec) decode(content *hcl.BodyContent, blockLabels []blockLabel, ctx *hcl.EvalContext) (cty.Value, hcl.Diagnostics) {\n\treturn cty.NullVal(cty.DynamicPseudoType), nil\n}\n\nfunc (s noopSpec) impliedType() cty.Type {\n\treturn cty.DynamicPseudoType\n}\n\nfunc (s noopSpec) visitSameBodyChildren(cb visitFunc) {\n\t// nothing to do\n}\n\nfunc (s noopSpec) sourceRange(content *hcl.BodyContent, blockLabels []blockLabel) hcl.Range {\n\t// No useful range for a noopSpec, and nobody should be calling this anyway.\n\treturn hcl.Range{\n\t\tFilename: \"noopSpec\",\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcldec/variables.go",
    "content": "package hcldec\n\nimport (\n\t\"github.com/hashicorp/hcl2/hcl\"\n)\n\n// Variables processes the given body with the given spec and returns a\n// list of the variable traversals that would be required to decode\n// the same pairing of body and spec.\n//\n// This can be used to conditionally populate the variables in the EvalContext\n// passed to Decode, for applications where a static scope is insufficient.\n//\n// If the given body is not compliant with the given schema, the result may\n// be incomplete, but that's assumed to be okay because the eventual call\n// to Decode will produce error diagnostics anyway.\nfunc Variables(body hcl.Body, spec Spec) []hcl.Traversal {\n\tvar vars []hcl.Traversal\n\tschema := ImpliedSchema(spec)\n\tcontent, _, _ := body.PartialContent(schema)\n\n\tif vs, ok := spec.(specNeedingVariables); ok {\n\t\tvars = append(vars, vs.variablesNeeded(content)...)\n\t}\n\n\tvar visitFn visitFunc\n\tvisitFn = func(s Spec) {\n\t\tif vs, ok := s.(specNeedingVariables); ok {\n\t\t\tvars = append(vars, vs.variablesNeeded(content)...)\n\t\t}\n\t\ts.visitSameBodyChildren(visitFn)\n\t}\n\tspec.visitSameBodyChildren(visitFn)\n\n\treturn vars\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcled/doc.go",
    "content": "// Package hcled provides functionality intended to help an application\n// that embeds HCL to deliver relevant information to a text editor or IDE\n// for navigating around and analyzing configuration files.\npackage hcled\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hcled/navigation.go",
    "content": "package hcled\n\nimport (\n\t\"github.com/hashicorp/hcl2/hcl\"\n)\n\ntype contextStringer interface {\n\tContextString(offset int) string\n}\n\n// ContextString returns a string describing the context of the given byte\n// offset, if available. An empty string is returned if no such information\n// is available, or otherwise the returned string is in a form that depends\n// on the language used to write the referenced file.\nfunc ContextString(file *hcl.File, offset int) string {\n\tif cser, ok := file.Nav.(contextStringer); ok {\n\t\treturn cser.ContextString(offset)\n\t}\n\treturn \"\"\n}\n\ntype contextDefRanger interface {\n\tContextDefRange(offset int) hcl.Range\n}\n\nfunc ContextDefRange(file *hcl.File, offset int) hcl.Range {\n\tif cser, ok := file.Nav.(contextDefRanger); ok {\n\t\tdefRange := cser.ContextDefRange(offset)\n\t\tif !defRange.Empty() {\n\t\t\treturn defRange\n\t\t}\n\t}\n\treturn file.Body.MissingItemRange()\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hclparse/parser.go",
    "content": "package hclparse\n\nimport (\n\t\"fmt\"\n\t\"io/ioutil\"\n\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/hashicorp/hcl2/hcl/hclsyntax\"\n\t\"github.com/hashicorp/hcl2/hcl/json\"\n)\n\n// NOTE: This is the public interface for parsing. The actual parsers are\n// in other packages alongside this one, with this package just wrapping them\n// to provide a unified interface for the caller across all supported formats.\n\n// Parser is the main interface for parsing configuration files. As well as\n// parsing files, a parser also retains a registry of all of the files it\n// has parsed so that multiple attempts to parse the same file will return\n// the same object and so the collected files can be used when printing\n// diagnostics.\n//\n// Any diagnostics for parsing a file are only returned once on the first\n// call to parse that file. Callers are expected to collect up diagnostics\n// and present them together, so returning diagnostics for the same file\n// multiple times would create a confusing result.\ntype Parser struct {\n\tfiles map[string]*hcl.File\n}\n\n// NewParser creates a new parser, ready to parse configuration files.\nfunc NewParser() *Parser {\n\treturn &Parser{\n\t\tfiles: map[string]*hcl.File{},\n\t}\n}\n\n// ParseHCL parses the given buffer (which is assumed to have been loaded from\n// the given filename) as a native-syntax configuration file and returns the\n// hcl.File object representing it.\nfunc (p *Parser) ParseHCL(src []byte, filename string) (*hcl.File, hcl.Diagnostics) {\n\tif existing := p.files[filename]; existing != nil {\n\t\treturn existing, nil\n\t}\n\n\tfile, diags := hclsyntax.ParseConfig(src, filename, hcl.Pos{Byte: 0, Line: 1, Column: 1})\n\tp.files[filename] = file\n\treturn file, diags\n}\n\n// ParseHCLFile reads the given filename and parses it as a native-syntax HCL\n// configuration file. An error diagnostic is returned if the given file\n// cannot be read.\nfunc (p *Parser) ParseHCLFile(filename string) (*hcl.File, hcl.Diagnostics) {\n\tif existing := p.files[filename]; existing != nil {\n\t\treturn existing, nil\n\t}\n\n\tsrc, err := ioutil.ReadFile(filename)\n\tif err != nil {\n\t\treturn nil, hcl.Diagnostics{\n\t\t\t{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Failed to read file\",\n\t\t\t\tDetail:   fmt.Sprintf(\"The configuration file %q could not be read.\", filename),\n\t\t\t},\n\t\t}\n\t}\n\n\treturn p.ParseHCL(src, filename)\n}\n\n// ParseJSON parses the given JSON buffer (which is assumed to have been loaded\n// from the given filename) and returns the hcl.File object representing it.\nfunc (p *Parser) ParseJSON(src []byte, filename string) (*hcl.File, hcl.Diagnostics) {\n\tif existing := p.files[filename]; existing != nil {\n\t\treturn existing, nil\n\t}\n\n\tfile, diags := json.Parse(src, filename)\n\tp.files[filename] = file\n\treturn file, diags\n}\n\n// ParseJSONFile reads the given filename and parses it as JSON, similarly to\n// ParseJSON. An error diagnostic is returned if the given file cannot be read.\nfunc (p *Parser) ParseJSONFile(filename string) (*hcl.File, hcl.Diagnostics) {\n\tif existing := p.files[filename]; existing != nil {\n\t\treturn existing, nil\n\t}\n\n\tfile, diags := json.ParseFile(filename)\n\tp.files[filename] = file\n\treturn file, diags\n}\n\n// AddFile allows a caller to record in a parser a file that was parsed some\n// other way, thus allowing it to be included in the registry of sources.\nfunc (p *Parser) AddFile(filename string, file *hcl.File) {\n\tp.files[filename] = file\n}\n\n// Sources returns a map from filenames to the raw source code that was\n// read from them. This is intended to be used, for example, to print\n// diagnostics with contextual information.\n//\n// The arrays underlying the returned slices should not be modified.\nfunc (p *Parser) Sources() map[string][]byte {\n\tret := make(map[string][]byte)\n\tfor fn, f := range p.files {\n\t\tret[fn] = f.Bytes\n\t}\n\treturn ret\n}\n\n// Files returns a map from filenames to the File objects produced from them.\n// This is intended to be used, for example, to print diagnostics with\n// contextual information.\n//\n// The returned map and all of the objects it refers to directly or indirectly\n// must not be modified.\nfunc (p *Parser) Files() map[string]*hcl.File {\n\treturn p.files\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hclwrite/ast.go",
    "content": "package hclwrite\n\nimport (\n\t\"bytes\"\n\t\"io\"\n)\n\ntype File struct {\n\tinTree\n\n\tsrcBytes []byte\n\tbody     *node\n}\n\n// NewEmptyFile constructs a new file with no content, ready to be mutated\n// by other calls that append to its body.\nfunc NewEmptyFile() *File {\n\tf := &File{\n\t\tinTree: newInTree(),\n\t}\n\tbody := newBody()\n\tf.body = f.children.Append(body)\n\treturn f\n}\n\n// Body returns the root body of the file, which contains the top-level\n// attributes and blocks.\nfunc (f *File) Body() *Body {\n\treturn f.body.content.(*Body)\n}\n\n// WriteTo writes the tokens underlying the receiving file to the given writer.\n//\n// The tokens first have a simple formatting pass applied that adjusts only\n// the spaces between them.\nfunc (f *File) WriteTo(wr io.Writer) (int64, error) {\n\ttokens := f.inTree.children.BuildTokens(nil)\n\tformat(tokens)\n\treturn tokens.WriteTo(wr)\n}\n\n// Bytes returns a buffer containing the source code resulting from the\n// tokens underlying the receiving file. If any updates have been made via\n// the AST API, these will be reflected in the result.\nfunc (f *File) Bytes() []byte {\n\tbuf := &bytes.Buffer{}\n\tf.WriteTo(buf)\n\treturn buf.Bytes()\n}\n\ntype comments struct {\n\tleafNode\n\n\tparent *node\n\ttokens Tokens\n}\n\nfunc newComments(tokens Tokens) *comments {\n\treturn &comments{\n\t\ttokens: tokens,\n\t}\n}\n\nfunc (c *comments) BuildTokens(to Tokens) Tokens {\n\treturn c.tokens.BuildTokens(to)\n}\n\ntype identifier struct {\n\tleafNode\n\n\tparent *node\n\ttoken  *Token\n}\n\nfunc newIdentifier(token *Token) *identifier {\n\treturn &identifier{\n\t\ttoken: token,\n\t}\n}\n\nfunc (i *identifier) BuildTokens(to Tokens) Tokens {\n\treturn append(to, i.token)\n}\n\nfunc (i *identifier) hasName(name string) bool {\n\treturn name == string(i.token.Bytes)\n}\n\ntype number struct {\n\tleafNode\n\n\tparent *node\n\ttoken  *Token\n}\n\nfunc newNumber(token *Token) *number {\n\treturn &number{\n\t\ttoken: token,\n\t}\n}\n\nfunc (n *number) BuildTokens(to Tokens) Tokens {\n\treturn append(to, n.token)\n}\n\ntype quoted struct {\n\tleafNode\n\n\tparent *node\n\ttokens Tokens\n}\n\nfunc newQuoted(tokens Tokens) *quoted {\n\treturn &quoted{\n\t\ttokens: tokens,\n\t}\n}\n\nfunc (q *quoted) BuildTokens(to Tokens) Tokens {\n\treturn q.tokens.BuildTokens(to)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hclwrite/ast_attribute.go",
    "content": "package hclwrite\n\nimport (\n\t\"github.com/hashicorp/hcl2/hcl/hclsyntax\"\n)\n\ntype Attribute struct {\n\tinTree\n\n\tleadComments *node\n\tname         *node\n\texpr         *node\n\tlineComments *node\n}\n\nfunc newAttribute() *Attribute {\n\treturn &Attribute{\n\t\tinTree: newInTree(),\n\t}\n}\n\nfunc (a *Attribute) init(name string, expr *Expression) {\n\texpr.assertUnattached()\n\n\tnameTok := newIdentToken(name)\n\tnameObj := newIdentifier(nameTok)\n\ta.leadComments = a.children.Append(newComments(nil))\n\ta.name = a.children.Append(nameObj)\n\ta.children.AppendUnstructuredTokens(Tokens{\n\t\t{\n\t\t\tType:  hclsyntax.TokenEqual,\n\t\t\tBytes: []byte{'='},\n\t\t},\n\t})\n\ta.expr = a.children.Append(expr)\n\ta.expr.list = a.children\n\ta.lineComments = a.children.Append(newComments(nil))\n\ta.children.AppendUnstructuredTokens(Tokens{\n\t\t{\n\t\t\tType:  hclsyntax.TokenNewline,\n\t\t\tBytes: []byte{'\\n'},\n\t\t},\n\t})\n}\n\nfunc (a *Attribute) Expr() *Expression {\n\treturn a.expr.content.(*Expression)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hclwrite/ast_block.go",
    "content": "package hclwrite\n\nimport (\n\t\"github.com/hashicorp/hcl2/hcl/hclsyntax\"\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\ntype Block struct {\n\tinTree\n\n\tleadComments *node\n\ttypeName     *node\n\tlabels       nodeSet\n\topen         *node\n\tbody         *node\n\tclose        *node\n}\n\nfunc newBlock() *Block {\n\treturn &Block{\n\t\tinTree: newInTree(),\n\t\tlabels: newNodeSet(),\n\t}\n}\n\n// NewBlock constructs a new, empty block with the given type name and labels.\nfunc NewBlock(typeName string, labels []string) *Block {\n\tblock := newBlock()\n\tblock.init(typeName, labels)\n\treturn block\n}\n\nfunc (b *Block) init(typeName string, labels []string) {\n\tnameTok := newIdentToken(typeName)\n\tnameObj := newIdentifier(nameTok)\n\tb.leadComments = b.children.Append(newComments(nil))\n\tb.typeName = b.children.Append(nameObj)\n\tfor _, label := range labels {\n\t\tlabelToks := TokensForValue(cty.StringVal(label))\n\t\tlabelObj := newQuoted(labelToks)\n\t\tlabelNode := b.children.Append(labelObj)\n\t\tb.labels.Add(labelNode)\n\t}\n\tb.open = b.children.AppendUnstructuredTokens(Tokens{\n\t\t{\n\t\t\tType:  hclsyntax.TokenOBrace,\n\t\t\tBytes: []byte{'{'},\n\t\t},\n\t\t{\n\t\t\tType:  hclsyntax.TokenNewline,\n\t\t\tBytes: []byte{'\\n'},\n\t\t},\n\t})\n\tbody := newBody() // initially totally empty; caller can append to it subsequently\n\tb.body = b.children.Append(body)\n\tb.close = b.children.AppendUnstructuredTokens(Tokens{\n\t\t{\n\t\t\tType:  hclsyntax.TokenCBrace,\n\t\t\tBytes: []byte{'}'},\n\t\t},\n\t\t{\n\t\t\tType:  hclsyntax.TokenNewline,\n\t\t\tBytes: []byte{'\\n'},\n\t\t},\n\t})\n}\n\n// Body returns the body that represents the content of the receiving block.\n//\n// Appending to or otherwise modifying this body will make changes to the\n// tokens that are generated between the blocks open and close braces.\nfunc (b *Block) Body() *Body {\n\treturn b.body.content.(*Body)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hclwrite/ast_body.go",
    "content": "package hclwrite\n\nimport (\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/hashicorp/hcl2/hcl/hclsyntax\"\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\ntype Body struct {\n\tinTree\n\n\titems nodeSet\n}\n\nfunc newBody() *Body {\n\treturn &Body{\n\t\tinTree: newInTree(),\n\t\titems:  newNodeSet(),\n\t}\n}\n\nfunc (b *Body) appendItem(c nodeContent) *node {\n\tnn := b.children.Append(c)\n\tb.items.Add(nn)\n\treturn nn\n}\n\nfunc (b *Body) appendItemNode(nn *node) *node {\n\tnn.assertUnattached()\n\tb.children.AppendNode(nn)\n\tb.items.Add(nn)\n\treturn nn\n}\n\n// Clear removes all of the items from the body, making it empty.\nfunc (b *Body) Clear() {\n\tb.children.Clear()\n}\n\nfunc (b *Body) AppendUnstructuredTokens(ts Tokens) {\n\tb.inTree.children.Append(ts)\n}\n\n// Attributes returns a new map of all of the attributes in the body, with\n// the attribute names as the keys.\nfunc (b *Body) Attributes() map[string]*Attribute {\n\tret := make(map[string]*Attribute)\n\tfor n := range b.items {\n\t\tif attr, isAttr := n.content.(*Attribute); isAttr {\n\t\t\tnameObj := attr.name.content.(*identifier)\n\t\t\tname := string(nameObj.token.Bytes)\n\t\t\tret[name] = attr\n\t\t}\n\t}\n\treturn ret\n}\n\n// Blocks returns a new slice of all the blocks in the body.\nfunc (b *Body) Blocks() []*Block {\n\tret := make([]*Block, 0, len(b.items))\n\tfor n := range b.items {\n\t\tif block, isBlock := n.content.(*Block); isBlock {\n\t\t\tret = append(ret, block)\n\t\t}\n\t}\n\treturn ret\n}\n\n// GetAttribute returns the attribute from the body that has the given name,\n// or returns nil if there is currently no matching attribute.\nfunc (b *Body) GetAttribute(name string) *Attribute {\n\tfor n := range b.items {\n\t\tif attr, isAttr := n.content.(*Attribute); isAttr {\n\t\t\tnameObj := attr.name.content.(*identifier)\n\t\t\tif nameObj.hasName(name) {\n\t\t\t\t// We've found it!\n\t\t\t\treturn attr\n\t\t\t}\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// SetAttributeValue either replaces the expression of an existing attribute\n// of the given name or adds a new attribute definition to the end of the block.\n//\n// The value is given as a cty.Value, and must therefore be a literal. To set\n// a variable reference or other traversal, use SetAttributeTraversal.\n//\n// The return value is the attribute that was either modified in-place or\n// created.\nfunc (b *Body) SetAttributeValue(name string, val cty.Value) *Attribute {\n\tattr := b.GetAttribute(name)\n\texpr := NewExpressionLiteral(val)\n\tif attr != nil {\n\t\tattr.expr = attr.expr.ReplaceWith(expr)\n\t} else {\n\t\tattr := newAttribute()\n\t\tattr.init(name, expr)\n\t\tb.appendItem(attr)\n\t}\n\treturn attr\n}\n\n// SetAttributeTraversal either replaces the expression of an existing attribute\n// of the given name or adds a new attribute definition to the end of the body.\n//\n// The new expression is given as a hcl.Traversal, which must be an absolute\n// traversal. To set a literal value, use SetAttributeValue.\n//\n// The return value is the attribute that was either modified in-place or\n// created.\nfunc (b *Body) SetAttributeTraversal(name string, traversal hcl.Traversal) *Attribute {\n\tattr := b.GetAttribute(name)\n\texpr := NewExpressionAbsTraversal(traversal)\n\tif attr != nil {\n\t\tattr.expr = attr.expr.ReplaceWith(expr)\n\t} else {\n\t\tattr := newAttribute()\n\t\tattr.init(name, expr)\n\t\tb.appendItem(attr)\n\t}\n\treturn attr\n}\n\n// AppendBlock appends an existing block (which must not be already attached\n// to a body) to the end of the receiving body.\nfunc (b *Body) AppendBlock(block *Block) *Block {\n\tb.appendItem(block)\n\treturn block\n}\n\n// AppendNewBlock appends a new nested block to the end of the receiving body\n// with the given type name and labels.\nfunc (b *Body) AppendNewBlock(typeName string, labels []string) *Block {\n\tblock := newBlock()\n\tblock.init(typeName, labels)\n\tb.appendItem(block)\n\treturn block\n}\n\n// AppendNewline appends a newline token to th end of the receiving body,\n// which generally serves as a separator between different sets of body\n// contents.\nfunc (b *Body) AppendNewline() {\n\tb.AppendUnstructuredTokens(Tokens{\n\t\t{\n\t\t\tType:  hclsyntax.TokenNewline,\n\t\t\tBytes: []byte{'\\n'},\n\t\t},\n\t})\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hclwrite/ast_expression.go",
    "content": "package hclwrite\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/hashicorp/hcl2/hcl/hclsyntax\"\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\ntype Expression struct {\n\tinTree\n\n\tabsTraversals nodeSet\n}\n\nfunc newExpression() *Expression {\n\treturn &Expression{\n\t\tinTree:        newInTree(),\n\t\tabsTraversals: newNodeSet(),\n\t}\n}\n\n// NewExpressionLiteral constructs an an expression that represents the given\n// literal value.\n//\n// Since an unknown value cannot be represented in source code, this function\n// will panic if the given value is unknown or contains a nested unknown value.\n// Use val.IsWhollyKnown before calling to be sure.\n//\n// HCL native syntax does not directly represent lists, maps, and sets, and\n// instead relies on the automatic conversions to those collection types from\n// either list or tuple constructor syntax. Therefore converting collection\n// values to source code and re-reading them will lose type information, and\n// the reader must provide a suitable type at decode time to recover the\n// original value.\nfunc NewExpressionLiteral(val cty.Value) *Expression {\n\ttoks := TokensForValue(val)\n\texpr := newExpression()\n\texpr.children.AppendUnstructuredTokens(toks)\n\treturn expr\n}\n\n// NewExpressionAbsTraversal constructs an expression that represents the\n// given traversal, which must be absolute or this function will panic.\nfunc NewExpressionAbsTraversal(traversal hcl.Traversal) *Expression {\n\tif traversal.IsRelative() {\n\t\tpanic(\"can't construct expression from relative traversal\")\n\t}\n\n\tphysT := newTraversal()\n\trootName := traversal.RootName()\n\tsteps := traversal[1:]\n\n\t{\n\t\ttn := newTraverseName()\n\t\ttn.name = tn.children.Append(newIdentifier(&Token{\n\t\t\tType:  hclsyntax.TokenIdent,\n\t\t\tBytes: []byte(rootName),\n\t\t}))\n\t\tphysT.steps.Add(physT.children.Append(tn))\n\t}\n\n\tfor _, step := range steps {\n\t\tswitch ts := step.(type) {\n\t\tcase hcl.TraverseAttr:\n\t\t\ttn := newTraverseName()\n\t\t\ttn.children.AppendUnstructuredTokens(Tokens{\n\t\t\t\t{\n\t\t\t\t\tType:  hclsyntax.TokenDot,\n\t\t\t\t\tBytes: []byte{'.'},\n\t\t\t\t},\n\t\t\t})\n\t\t\ttn.name = tn.children.Append(newIdentifier(&Token{\n\t\t\t\tType:  hclsyntax.TokenIdent,\n\t\t\t\tBytes: []byte(ts.Name),\n\t\t\t}))\n\t\t\tphysT.steps.Add(physT.children.Append(tn))\n\t\tcase hcl.TraverseIndex:\n\t\t\tti := newTraverseIndex()\n\t\t\tti.children.AppendUnstructuredTokens(Tokens{\n\t\t\t\t{\n\t\t\t\t\tType:  hclsyntax.TokenOBrack,\n\t\t\t\t\tBytes: []byte{'['},\n\t\t\t\t},\n\t\t\t})\n\t\t\tindexExpr := NewExpressionLiteral(ts.Key)\n\t\t\tti.key = ti.children.Append(indexExpr)\n\t\t\tti.children.AppendUnstructuredTokens(Tokens{\n\t\t\t\t{\n\t\t\t\t\tType:  hclsyntax.TokenCBrack,\n\t\t\t\t\tBytes: []byte{']'},\n\t\t\t\t},\n\t\t\t})\n\t\t\tphysT.steps.Add(physT.children.Append(ti))\n\t\t}\n\t}\n\n\texpr := newExpression()\n\texpr.absTraversals.Add(expr.children.Append(physT))\n\treturn expr\n}\n\n// Variables returns the absolute traversals that exist within the receiving\n// expression.\nfunc (e *Expression) Variables() []*Traversal {\n\tnodes := e.absTraversals.List()\n\tret := make([]*Traversal, len(nodes))\n\tfor i, node := range nodes {\n\t\tret[i] = node.content.(*Traversal)\n\t}\n\treturn ret\n}\n\n// RenameVariablePrefix examines each of the absolute traversals in the\n// receiving expression to see if they have the given sequence of names as\n// a prefix prefix. If so, they are updated in place to have the given\n// replacement names instead of that prefix.\n//\n// This can be used to implement symbol renaming. The calling application can\n// visit all relevant expressions in its input and apply the same renaming\n// to implement a global symbol rename.\n//\n// The search and replacement traversals must be the same length, or this\n// method will panic. Only attribute access operations can be matched and\n// replaced. Index steps never match the prefix.\nfunc (e *Expression) RenameVariablePrefix(search, replacement []string) {\n\tif len(search) != len(replacement) {\n\t\tpanic(fmt.Sprintf(\"search and replacement length mismatch (%d and %d)\", len(search), len(replacement)))\n\t}\nTraversals:\n\tfor node := range e.absTraversals {\n\t\ttraversal := node.content.(*Traversal)\n\t\tif len(traversal.steps) < len(search) {\n\t\t\t// If it's shorter then it can't have our prefix\n\t\t\tcontinue\n\t\t}\n\n\t\tstepNodes := traversal.steps.List()\n\t\tfor i, name := range search {\n\t\t\tstep, isName := stepNodes[i].content.(*TraverseName)\n\t\t\tif !isName {\n\t\t\t\tcontinue Traversals // only name nodes can match\n\t\t\t}\n\t\t\tfoundNameBytes := step.name.content.(*identifier).token.Bytes\n\t\t\tif len(foundNameBytes) != len(name) {\n\t\t\t\tcontinue Traversals\n\t\t\t}\n\t\t\tif string(foundNameBytes) != name {\n\t\t\t\tcontinue Traversals\n\t\t\t}\n\t\t}\n\n\t\t// If we get here then the prefix matched, so now we'll swap in\n\t\t// the replacement strings.\n\t\tfor i, name := range replacement {\n\t\t\tstep := stepNodes[i].content.(*TraverseName)\n\t\t\ttoken := step.name.content.(*identifier).token\n\t\t\ttoken.Bytes = []byte(name)\n\t\t}\n\t}\n}\n\n// Traversal represents a sequence of variable, attribute, and/or index\n// operations.\ntype Traversal struct {\n\tinTree\n\n\tsteps nodeSet\n}\n\nfunc newTraversal() *Traversal {\n\treturn &Traversal{\n\t\tinTree: newInTree(),\n\t\tsteps:  newNodeSet(),\n\t}\n}\n\ntype TraverseName struct {\n\tinTree\n\n\tname *node\n}\n\nfunc newTraverseName() *TraverseName {\n\treturn &TraverseName{\n\t\tinTree: newInTree(),\n\t}\n}\n\ntype TraverseIndex struct {\n\tinTree\n\n\tkey *node\n}\n\nfunc newTraverseIndex() *TraverseIndex {\n\treturn &TraverseIndex{\n\t\tinTree: newInTree(),\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hclwrite/doc.go",
    "content": "// Package hclwrite deals with the problem of generating HCL configuration\n// and of making specific surgical changes to existing HCL configurations.\n//\n// It operates at a different level of abstraction than the main HCL parser\n// and AST, since details such as the placement of comments and newlines\n// are preserved when unchanged.\n//\n// The hclwrite API follows a similar principle to XML/HTML DOM, allowing nodes\n// to be read out, created and inserted, etc. Nodes represent syntax constructs\n// rather than semantic concepts.\npackage hclwrite\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hclwrite/format.go",
    "content": "package hclwrite\n\nimport (\n\t\"github.com/hashicorp/hcl2/hcl/hclsyntax\"\n)\n\nvar inKeyword = hclsyntax.Keyword([]byte{'i', 'n'})\n\n// placeholder token used when we don't have a token but we don't want\n// to pass a real \"nil\" and complicate things with nil pointer checks\nvar nilToken = &Token{\n\tType:         hclsyntax.TokenNil,\n\tBytes:        []byte{},\n\tSpacesBefore: 0,\n}\n\n// format rewrites tokens within the given sequence, in-place, to adjust the\n// whitespace around their content to achieve canonical formatting.\nfunc format(tokens Tokens) {\n\t// Formatting is a multi-pass process. More details on the passes below,\n\t// but this is the overview:\n\t// - adjust the leading space on each line to create appropriate\n\t//   indentation\n\t// - adjust spaces between tokens in a single cell using a set of rules\n\t// - adjust the leading space in the \"assign\" and \"comment\" cells on each\n\t//   line to vertically align with neighboring lines.\n\t// All of these steps operate in-place on the given tokens, so a caller\n\t// may collect a flat sequence of all of the tokens underlying an AST\n\t// and pass it here and we will then indirectly modify the AST itself.\n\t// Formatting must change only whitespace. Specifically, that means\n\t// changing the SpacesBefore attribute on a token while leaving the\n\t// other token attributes unchanged.\n\n\tlines := linesForFormat(tokens)\n\tformatIndent(lines)\n\tformatSpaces(lines)\n\tformatCells(lines)\n}\n\nfunc formatIndent(lines []formatLine) {\n\t// Our methodology for indents is to take the input one line at a time\n\t// and count the bracketing delimiters on each line. If a line has a net\n\t// increase in open brackets, we increase the indent level by one and\n\t// remember how many new openers we had. If the line has a net _decrease_,\n\t// we'll compare it to the most recent number of openers and decrease the\n\t// dedent level by one each time we pass an indent level remembered\n\t// earlier.\n\t// The \"indent stack\" used here allows for us to recognize degenerate\n\t// input where brackets are not symmetrical within lines and avoid\n\t// pushing things too far left or right, creating confusion.\n\n\t// We'll start our indent stack at a reasonable capacity to minimize the\n\t// chance of us needing to grow it; 10 here means 10 levels of indent,\n\t// which should be more than enough for reasonable HCL uses.\n\tindents := make([]int, 0, 10)\n\n\tinHeredoc := false\n\tfor i := range lines {\n\t\tline := &lines[i]\n\t\tif len(line.lead) == 0 {\n\t\t\tcontinue\n\t\t}\n\n\t\tif inHeredoc {\n\t\t\tfor _, token := range line.lead {\n\t\t\t\tif token.Type == hclsyntax.TokenCHeredoc {\n\t\t\t\t\tinHeredoc = false\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontinue // don't touch indentation inside heredocs\n\t\t}\n\n\t\tif line.lead[0].Type == hclsyntax.TokenNewline {\n\t\t\t// Never place spaces before a newline\n\t\t\tline.lead[0].SpacesBefore = 0\n\t\t\tcontinue\n\t\t}\n\n\t\tnetBrackets := 0\n\t\tfor _, token := range line.lead {\n\t\t\tnetBrackets += tokenBracketChange(token)\n\t\t\tif token.Type == hclsyntax.TokenOHeredoc {\n\t\t\t\tinHeredoc = true\n\t\t\t}\n\t\t}\n\t\tfor _, token := range line.assign {\n\t\t\tnetBrackets += tokenBracketChange(token)\n\t\t}\n\n\t\tswitch {\n\t\tcase netBrackets > 0:\n\t\t\tline.lead[0].SpacesBefore = 2 * len(indents)\n\t\t\tindents = append(indents, netBrackets)\n\t\tcase netBrackets < 0:\n\t\t\tclosed := -netBrackets\n\t\t\tfor closed > 0 && len(indents) > 0 {\n\t\t\t\tswitch {\n\n\t\t\t\tcase closed > indents[len(indents)-1]:\n\t\t\t\t\tclosed -= indents[len(indents)-1]\n\t\t\t\t\tindents = indents[:len(indents)-1]\n\n\t\t\t\tcase closed < indents[len(indents)-1]:\n\t\t\t\t\tindents[len(indents)-1] -= closed\n\t\t\t\t\tclosed = 0\n\n\t\t\t\tdefault:\n\t\t\t\t\tindents = indents[:len(indents)-1]\n\t\t\t\t\tclosed = 0\n\t\t\t\t}\n\t\t\t}\n\t\t\tline.lead[0].SpacesBefore = 2 * len(indents)\n\t\tdefault:\n\t\t\tline.lead[0].SpacesBefore = 2 * len(indents)\n\t\t}\n\t}\n}\n\nfunc formatSpaces(lines []formatLine) {\n\tfor _, line := range lines {\n\t\tfor i, token := range line.lead {\n\t\t\tvar before, after *Token\n\t\t\tif i > 0 {\n\t\t\t\tbefore = line.lead[i-1]\n\t\t\t} else {\n\t\t\t\tbefore = nilToken\n\t\t\t}\n\t\t\tif i < (len(line.lead) - 1) {\n\t\t\t\tafter = line.lead[i+1]\n\t\t\t} else {\n\t\t\t\tafter = nilToken\n\t\t\t}\n\t\t\tif spaceAfterToken(token, before, after) {\n\t\t\t\tafter.SpacesBefore = 1\n\t\t\t} else {\n\t\t\t\tafter.SpacesBefore = 0\n\t\t\t}\n\t\t}\n\t\tfor i, token := range line.assign {\n\t\t\tif i == 0 {\n\t\t\t\t// first token in \"assign\" always has one space before to\n\t\t\t\t// separate the equals sign from what it's assigning.\n\t\t\t\ttoken.SpacesBefore = 1\n\t\t\t}\n\n\t\t\tvar before, after *Token\n\t\t\tif i > 0 {\n\t\t\t\tbefore = line.assign[i-1]\n\t\t\t} else {\n\t\t\t\tbefore = nilToken\n\t\t\t}\n\t\t\tif i < (len(line.assign) - 1) {\n\t\t\t\tafter = line.assign[i+1]\n\t\t\t} else {\n\t\t\t\tafter = nilToken\n\t\t\t}\n\t\t\tif spaceAfterToken(token, before, after) {\n\t\t\t\tafter.SpacesBefore = 1\n\t\t\t} else {\n\t\t\t\tafter.SpacesBefore = 0\n\t\t\t}\n\t\t}\n\n\t}\n}\n\nfunc formatCells(lines []formatLine) {\n\n\tchainStart := -1\n\tmaxColumns := 0\n\n\t// We'll deal with the \"assign\" cell first, since moving that will\n\t// also impact the \"comment\" cell.\n\tcloseAssignChain := func(i int) {\n\t\tfor _, chainLine := range lines[chainStart:i] {\n\t\t\tcolumns := chainLine.lead.Columns()\n\t\t\tspaces := (maxColumns - columns) + 1\n\t\t\tchainLine.assign[0].SpacesBefore = spaces\n\t\t}\n\t\tchainStart = -1\n\t\tmaxColumns = 0\n\t}\n\tfor i, line := range lines {\n\t\tif line.assign == nil {\n\t\t\tif chainStart != -1 {\n\t\t\t\tcloseAssignChain(i)\n\t\t\t}\n\t\t} else {\n\t\t\tif chainStart == -1 {\n\t\t\t\tchainStart = i\n\t\t\t}\n\t\t\tcolumns := line.lead.Columns()\n\t\t\tif columns > maxColumns {\n\t\t\t\tmaxColumns = columns\n\t\t\t}\n\t\t}\n\t}\n\tif chainStart != -1 {\n\t\tcloseAssignChain(len(lines))\n\t}\n\n\t// Now we'll deal with the comments\n\tcloseCommentChain := func(i int) {\n\t\tfor _, chainLine := range lines[chainStart:i] {\n\t\t\tcolumns := chainLine.lead.Columns() + chainLine.assign.Columns()\n\t\t\tspaces := (maxColumns - columns) + 1\n\t\t\tchainLine.comment[0].SpacesBefore = spaces\n\t\t}\n\t\tchainStart = -1\n\t\tmaxColumns = 0\n\t}\n\tfor i, line := range lines {\n\t\tif line.comment == nil {\n\t\t\tif chainStart != -1 {\n\t\t\t\tcloseCommentChain(i)\n\t\t\t}\n\t\t} else {\n\t\t\tif chainStart == -1 {\n\t\t\t\tchainStart = i\n\t\t\t}\n\t\t\tcolumns := line.lead.Columns() + line.assign.Columns()\n\t\t\tif columns > maxColumns {\n\t\t\t\tmaxColumns = columns\n\t\t\t}\n\t\t}\n\t}\n\tif chainStart != -1 {\n\t\tcloseCommentChain(len(lines))\n\t}\n\n}\n\n// spaceAfterToken decides whether a particular subject token should have a\n// space after it when surrounded by the given before and after tokens.\n// \"before\" can be TokenNil, if the subject token is at the start of a sequence.\nfunc spaceAfterToken(subject, before, after *Token) bool {\n\tswitch {\n\n\tcase after.Type == hclsyntax.TokenNewline || after.Type == hclsyntax.TokenNil:\n\t\t// Never add spaces before a newline\n\t\treturn false\n\n\tcase subject.Type == hclsyntax.TokenIdent && after.Type == hclsyntax.TokenOParen:\n\t\t// Don't split a function name from open paren in a call\n\t\treturn false\n\n\tcase subject.Type == hclsyntax.TokenDot || after.Type == hclsyntax.TokenDot:\n\t\t// Don't use spaces around attribute access dots\n\t\treturn false\n\n\tcase after.Type == hclsyntax.TokenComma || after.Type == hclsyntax.TokenEllipsis:\n\t\t// No space right before a comma or ... in an argument list\n\t\treturn false\n\n\tcase subject.Type == hclsyntax.TokenComma:\n\t\t// Always a space after a comma\n\t\treturn true\n\n\tcase subject.Type == hclsyntax.TokenQuotedLit || subject.Type == hclsyntax.TokenStringLit || subject.Type == hclsyntax.TokenOQuote || subject.Type == hclsyntax.TokenOHeredoc || after.Type == hclsyntax.TokenQuotedLit || after.Type == hclsyntax.TokenStringLit || after.Type == hclsyntax.TokenCQuote || after.Type == hclsyntax.TokenCHeredoc:\n\t\t// No extra spaces within templates\n\t\treturn false\n\n\tcase inKeyword.TokenMatches(subject.asHCLSyntax()) && before.Type == hclsyntax.TokenIdent:\n\t\t// This is a special case for inside for expressions where a user\n\t\t// might want to use a literal tuple constructor:\n\t\t// [for x in [foo]: x]\n\t\t// ... in that case, we would normally produce in[foo] thinking that\n\t\t// in is a reference, but we'll recognize it as a keyword here instead\n\t\t// to make the result less confusing.\n\t\treturn true\n\n\tcase after.Type == hclsyntax.TokenOBrack && (subject.Type == hclsyntax.TokenIdent || subject.Type == hclsyntax.TokenNumberLit || tokenBracketChange(subject) < 0):\n\t\treturn false\n\n\tcase subject.Type == hclsyntax.TokenMinus:\n\t\t// Since a minus can either be subtraction or negation, and the latter\n\t\t// should _not_ have a space after it, we need to use some heuristics\n\t\t// to decide which case this is.\n\t\t// We guess that we have a negation if the token before doesn't look\n\t\t// like it could be the end of an expression.\n\n\t\tswitch before.Type {\n\n\t\tcase hclsyntax.TokenNil:\n\t\t\t// Minus at the start of input must be a negation\n\t\t\treturn false\n\n\t\tcase hclsyntax.TokenOParen, hclsyntax.TokenOBrace, hclsyntax.TokenOBrack, hclsyntax.TokenEqual, hclsyntax.TokenColon, hclsyntax.TokenComma, hclsyntax.TokenQuestion:\n\t\t\t// Minus immediately after an opening bracket or separator must be a negation.\n\t\t\treturn false\n\n\t\tcase hclsyntax.TokenPlus, hclsyntax.TokenStar, hclsyntax.TokenSlash, hclsyntax.TokenPercent, hclsyntax.TokenMinus:\n\t\t\t// Minus immediately after another arithmetic operator must be negation.\n\t\t\treturn false\n\n\t\tcase hclsyntax.TokenEqualOp, hclsyntax.TokenNotEqual, hclsyntax.TokenGreaterThan, hclsyntax.TokenGreaterThanEq, hclsyntax.TokenLessThan, hclsyntax.TokenLessThanEq:\n\t\t\t// Minus immediately after another comparison operator must be negation.\n\t\t\treturn false\n\n\t\tcase hclsyntax.TokenAnd, hclsyntax.TokenOr, hclsyntax.TokenBang:\n\t\t\t// Minus immediately after logical operator doesn't make sense but probably intended as negation.\n\t\t\treturn false\n\n\t\tdefault:\n\t\t\treturn true\n\t\t}\n\n\tcase subject.Type == hclsyntax.TokenOBrace || after.Type == hclsyntax.TokenCBrace:\n\t\t// Unlike other bracket types, braces have spaces on both sides of them,\n\t\t// both in single-line nested blocks foo { bar = baz } and in object\n\t\t// constructor expressions foo = { bar = baz }.\n\t\tif subject.Type == hclsyntax.TokenOBrace && after.Type == hclsyntax.TokenCBrace {\n\t\t\t// An open brace followed by a close brace is an exception, however.\n\t\t\t// e.g. foo {} rather than foo { }\n\t\t\treturn false\n\t\t}\n\t\treturn true\n\n\t// In the unlikely event that an interpolation expression is just\n\t// a single object constructor, we'll put a space between the ${ and\n\t// the following { to make this more obvious, and then the same\n\t// thing for the two braces at the end.\n\tcase (subject.Type == hclsyntax.TokenTemplateInterp || subject.Type == hclsyntax.TokenTemplateControl) && after.Type == hclsyntax.TokenOBrace:\n\t\treturn true\n\tcase subject.Type == hclsyntax.TokenCBrace && after.Type == hclsyntax.TokenTemplateSeqEnd:\n\t\treturn true\n\n\t// Don't add spaces between interpolated items\n\tcase subject.Type == hclsyntax.TokenTemplateSeqEnd && after.Type == hclsyntax.TokenTemplateInterp:\n\t\treturn false\n\n\tcase tokenBracketChange(subject) > 0:\n\t\t// No spaces after open brackets\n\t\treturn false\n\n\tcase tokenBracketChange(after) < 0:\n\t\t// No spaces before close brackets\n\t\treturn false\n\n\tdefault:\n\t\t// Most tokens are space-separated\n\t\treturn true\n\n\t}\n}\n\nfunc linesForFormat(tokens Tokens) []formatLine {\n\tif len(tokens) == 0 {\n\t\treturn make([]formatLine, 0)\n\t}\n\n\t// first we'll count our lines, so we can allocate the array for them in\n\t// a single block. (We want to minimize memory pressure in this codepath,\n\t// so it can be run somewhat-frequently by editor integrations.)\n\tlineCount := 1 // if there are zero newlines then there is one line\n\tfor _, tok := range tokens {\n\t\tif tokenIsNewline(tok) {\n\t\t\tlineCount++\n\t\t}\n\t}\n\n\t// To start, we'll just put everything in the \"lead\" cell on each line,\n\t// and then do another pass over the lines afterwards to adjust.\n\tlines := make([]formatLine, lineCount)\n\tli := 0\n\tlineStart := 0\n\tfor i, tok := range tokens {\n\t\tif tok.Type == hclsyntax.TokenEOF {\n\t\t\t// The EOF token doesn't belong to any line, and terminates the\n\t\t\t// token sequence.\n\t\t\tlines[li].lead = tokens[lineStart:i]\n\t\t\tbreak\n\t\t}\n\n\t\tif tokenIsNewline(tok) {\n\t\t\tlines[li].lead = tokens[lineStart : i+1]\n\t\t\tlineStart = i + 1\n\t\t\tli++\n\t\t}\n\t}\n\n\t// If a set of tokens doesn't end in TokenEOF (e.g. because it's a\n\t// fragment of tokens from the middle of a file) then we might fall\n\t// out here with a line still pending.\n\tif lineStart < len(tokens) {\n\t\tlines[li].lead = tokens[lineStart:]\n\t\tif lines[li].lead[len(lines[li].lead)-1].Type == hclsyntax.TokenEOF {\n\t\t\tlines[li].lead = lines[li].lead[:len(lines[li].lead)-1]\n\t\t}\n\t}\n\n\t// Now we'll pick off any trailing comments and attribute assignments\n\t// to shuffle off into the \"comment\" and \"assign\" cells.\n\tinHeredoc := false\n\tfor i := range lines {\n\t\tline := &lines[i]\n\t\tif len(line.lead) == 0 {\n\t\t\t// if the line is empty then there's nothing for us to do\n\t\t\t// (this should happen only for the final line, because all other\n\t\t\t// lines would have a newline token of some kind)\n\t\t\tcontinue\n\t\t}\n\n\t\tif inHeredoc {\n\t\t\tfor _, tok := range line.lead {\n\t\t\t\tif tok.Type == hclsyntax.TokenCHeredoc {\n\t\t\t\t\tinHeredoc = false\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Inside a heredoc everything is \"lead\", even if there's a\n\t\t\t// template interpolation embedded in there that might otherwise\n\t\t\t// confuse our logic below.\n\t\t\tcontinue\n\t\t}\n\n\t\tfor _, tok := range line.lead {\n\t\t\tif tok.Type == hclsyntax.TokenOHeredoc {\n\t\t\t\tinHeredoc = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\tif len(line.lead) > 1 && line.lead[len(line.lead)-1].Type == hclsyntax.TokenComment {\n\t\t\tline.comment = line.lead[len(line.lead)-1:]\n\t\t\tline.lead = line.lead[:len(line.lead)-1]\n\t\t}\n\n\t\tfor i, tok := range line.lead {\n\t\t\tif i > 0 && tok.Type == hclsyntax.TokenEqual {\n\t\t\t\t// We only move the tokens into \"assign\" if the RHS seems to\n\t\t\t\t// be a whole expression, which we determine by counting\n\t\t\t\t// brackets. If there's a net positive number of brackets\n\t\t\t\t// then that suggests we're introducing a multi-line expression.\n\t\t\t\tnetBrackets := 0\n\t\t\t\tfor _, token := range line.lead[i:] {\n\t\t\t\t\tnetBrackets += tokenBracketChange(token)\n\t\t\t\t}\n\n\t\t\t\tif netBrackets == 0 {\n\t\t\t\t\tline.assign = line.lead[i:]\n\t\t\t\t\tline.lead = line.lead[:i]\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\n\treturn lines\n}\n\nfunc tokenIsNewline(tok *Token) bool {\n\tif tok.Type == hclsyntax.TokenNewline {\n\t\treturn true\n\t} else if tok.Type == hclsyntax.TokenComment {\n\t\t// Single line tokens (# and //) consume their terminating newline,\n\t\t// so we need to treat them as newline tokens as well.\n\t\tif len(tok.Bytes) > 0 && tok.Bytes[len(tok.Bytes)-1] == '\\n' {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\nfunc tokenBracketChange(tok *Token) int {\n\tswitch tok.Type {\n\tcase hclsyntax.TokenOBrace, hclsyntax.TokenOBrack, hclsyntax.TokenOParen, hclsyntax.TokenTemplateControl, hclsyntax.TokenTemplateInterp:\n\t\treturn 1\n\tcase hclsyntax.TokenCBrace, hclsyntax.TokenCBrack, hclsyntax.TokenCParen, hclsyntax.TokenTemplateSeqEnd:\n\t\treturn -1\n\tdefault:\n\t\treturn 0\n\t}\n}\n\n// formatLine represents a single line of source code for formatting purposes,\n// splitting its tokens into up to three \"cells\":\n//\n// lead: always present, representing everything up to one of the others\n// assign: if line contains an attribute assignment, represents the tokens\n//    starting at (and including) the equals symbol\n// comment: if line contains any non-comment tokens and ends with a\n//    single-line comment token, represents the comment.\n//\n// When formatting, the leading spaces of the first tokens in each of these\n// cells is adjusted to align vertically their occurences on consecutive\n// rows.\ntype formatLine struct {\n\tlead    Tokens\n\tassign  Tokens\n\tcomment Tokens\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hclwrite/generate.go",
    "content": "package hclwrite\n\nimport (\n\t\"fmt\"\n\t\"unicode\"\n\t\"unicode/utf8\"\n\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/hashicorp/hcl2/hcl/hclsyntax\"\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// TokensForValue returns a sequence of tokens that represents the given\n// constant value.\n//\n// This function only supports types that are used by HCL. In particular, it\n// does not support capsule types and will panic if given one.\n//\n// It is not possible to express an unknown value in source code, so this\n// function will panic if the given value is unknown or contains any unknown\n// values. A caller can call the value's IsWhollyKnown method to verify that\n// no unknown values are present before calling TokensForValue.\nfunc TokensForValue(val cty.Value) Tokens {\n\ttoks := appendTokensForValue(val, nil)\n\tformat(toks) // fiddle with the SpacesBefore field to get canonical spacing\n\treturn toks\n}\n\n// TokensForTraversal returns a sequence of tokens that represents the given\n// traversal.\n//\n// If the traversal is absolute then the result is a self-contained, valid\n// reference expression. If the traversal is relative then the returned tokens\n// could be appended to some other expression tokens to traverse into the\n// represented expression.\nfunc TokensForTraversal(traversal hcl.Traversal) Tokens {\n\ttoks := appendTokensForTraversal(traversal, nil)\n\tformat(toks) // fiddle with the SpacesBefore field to get canonical spacing\n\treturn toks\n}\n\nfunc appendTokensForValue(val cty.Value, toks Tokens) Tokens {\n\tswitch {\n\n\tcase !val.IsKnown():\n\t\tpanic(\"cannot produce tokens for unknown value\")\n\n\tcase val.IsNull():\n\t\ttoks = append(toks, &Token{\n\t\t\tType:  hclsyntax.TokenIdent,\n\t\t\tBytes: []byte(`null`),\n\t\t})\n\n\tcase val.Type() == cty.Bool:\n\t\tvar src []byte\n\t\tif val.True() {\n\t\t\tsrc = []byte(`true`)\n\t\t} else {\n\t\t\tsrc = []byte(`false`)\n\t\t}\n\t\ttoks = append(toks, &Token{\n\t\t\tType:  hclsyntax.TokenIdent,\n\t\t\tBytes: src,\n\t\t})\n\n\tcase val.Type() == cty.Number:\n\t\tbf := val.AsBigFloat()\n\t\tsrcStr := bf.Text('f', -1)\n\t\ttoks = append(toks, &Token{\n\t\t\tType:  hclsyntax.TokenNumberLit,\n\t\t\tBytes: []byte(srcStr),\n\t\t})\n\n\tcase val.Type() == cty.String:\n\t\t// TODO: If it's a multi-line string ending in a newline, format\n\t\t// it as a HEREDOC instead.\n\t\tsrc := escapeQuotedStringLit(val.AsString())\n\t\ttoks = append(toks, &Token{\n\t\t\tType:  hclsyntax.TokenOQuote,\n\t\t\tBytes: []byte{'\"'},\n\t\t})\n\t\tif len(src) > 0 {\n\t\t\ttoks = append(toks, &Token{\n\t\t\t\tType:  hclsyntax.TokenQuotedLit,\n\t\t\t\tBytes: src,\n\t\t\t})\n\t\t}\n\t\ttoks = append(toks, &Token{\n\t\t\tType:  hclsyntax.TokenCQuote,\n\t\t\tBytes: []byte{'\"'},\n\t\t})\n\n\tcase val.Type().IsListType() || val.Type().IsSetType() || val.Type().IsTupleType():\n\t\ttoks = append(toks, &Token{\n\t\t\tType:  hclsyntax.TokenOBrack,\n\t\t\tBytes: []byte{'['},\n\t\t})\n\n\t\ti := 0\n\t\tfor it := val.ElementIterator(); it.Next(); {\n\t\t\tif i > 0 {\n\t\t\t\ttoks = append(toks, &Token{\n\t\t\t\t\tType:  hclsyntax.TokenComma,\n\t\t\t\t\tBytes: []byte{','},\n\t\t\t\t})\n\t\t\t}\n\t\t\t_, eVal := it.Element()\n\t\t\ttoks = appendTokensForValue(eVal, toks)\n\t\t\ti++\n\t\t}\n\n\t\ttoks = append(toks, &Token{\n\t\t\tType:  hclsyntax.TokenCBrack,\n\t\t\tBytes: []byte{']'},\n\t\t})\n\n\tcase val.Type().IsMapType() || val.Type().IsObjectType():\n\t\ttoks = append(toks, &Token{\n\t\t\tType:  hclsyntax.TokenOBrace,\n\t\t\tBytes: []byte{'{'},\n\t\t})\n\n\t\ti := 0\n\t\tfor it := val.ElementIterator(); it.Next(); {\n\t\t\tif i > 0 {\n\t\t\t\ttoks = append(toks, &Token{\n\t\t\t\t\tType:  hclsyntax.TokenComma,\n\t\t\t\t\tBytes: []byte{','},\n\t\t\t\t})\n\t\t\t}\n\t\t\teKey, eVal := it.Element()\n\t\t\tif hclsyntax.ValidIdentifier(eKey.AsString()) {\n\t\t\t\ttoks = append(toks, &Token{\n\t\t\t\t\tType:  hclsyntax.TokenIdent,\n\t\t\t\t\tBytes: []byte(eKey.AsString()),\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\ttoks = appendTokensForValue(eKey, toks)\n\t\t\t}\n\t\t\ttoks = append(toks, &Token{\n\t\t\t\tType:  hclsyntax.TokenEqual,\n\t\t\t\tBytes: []byte{'='},\n\t\t\t})\n\t\t\ttoks = appendTokensForValue(eVal, toks)\n\t\t\ti++\n\t\t}\n\n\t\ttoks = append(toks, &Token{\n\t\t\tType:  hclsyntax.TokenCBrace,\n\t\t\tBytes: []byte{'}'},\n\t\t})\n\n\tdefault:\n\t\tpanic(fmt.Sprintf(\"cannot produce tokens for %#v\", val))\n\t}\n\n\treturn toks\n}\n\nfunc appendTokensForTraversal(traversal hcl.Traversal, toks Tokens) Tokens {\n\tfor _, step := range traversal {\n\t\tappendTokensForTraversalStep(step, toks)\n\t}\n\treturn toks\n}\n\nfunc appendTokensForTraversalStep(step hcl.Traverser, toks Tokens) {\n\tswitch ts := step.(type) {\n\tcase hcl.TraverseRoot:\n\t\ttoks = append(toks, &Token{\n\t\t\tType:  hclsyntax.TokenIdent,\n\t\t\tBytes: []byte(ts.Name),\n\t\t})\n\tcase hcl.TraverseAttr:\n\t\ttoks = append(\n\t\t\ttoks,\n\t\t\t&Token{\n\t\t\t\tType:  hclsyntax.TokenDot,\n\t\t\t\tBytes: []byte{'.'},\n\t\t\t},\n\t\t\t&Token{\n\t\t\t\tType:  hclsyntax.TokenIdent,\n\t\t\t\tBytes: []byte(ts.Name),\n\t\t\t},\n\t\t)\n\tcase hcl.TraverseIndex:\n\t\ttoks = append(toks, &Token{\n\t\t\tType:  hclsyntax.TokenOBrack,\n\t\t\tBytes: []byte{'['},\n\t\t})\n\t\tappendTokensForValue(ts.Key, toks)\n\t\ttoks = append(toks, &Token{\n\t\t\tType:  hclsyntax.TokenCBrack,\n\t\t\tBytes: []byte{']'},\n\t\t})\n\tdefault:\n\t\tpanic(fmt.Sprintf(\"unsupported traversal step type %T\", step))\n\t}\n}\n\nfunc escapeQuotedStringLit(s string) []byte {\n\tif len(s) == 0 {\n\t\treturn nil\n\t}\n\tbuf := make([]byte, 0, len(s))\n\tfor i, r := range s {\n\t\tswitch r {\n\t\tcase '\\n':\n\t\t\tbuf = append(buf, '\\\\', 'n')\n\t\tcase '\\r':\n\t\t\tbuf = append(buf, '\\\\', 'r')\n\t\tcase '\\t':\n\t\t\tbuf = append(buf, '\\\\', 't')\n\t\tcase '\"':\n\t\t\tbuf = append(buf, '\\\\', '\"')\n\t\tcase '\\\\':\n\t\t\tbuf = append(buf, '\\\\', '\\\\')\n\t\tcase '$', '%':\n\t\t\tbuf = appendRune(buf, r)\n\t\t\tremain := s[i+1:]\n\t\t\tif len(remain) > 0 && remain[0] == '{' {\n\t\t\t\t// Double up our template introducer symbol to escape it.\n\t\t\t\tbuf = appendRune(buf, r)\n\t\t\t}\n\t\tdefault:\n\t\t\tif !unicode.IsPrint(r) {\n\t\t\t\tvar fmted string\n\t\t\t\tif r < 65536 {\n\t\t\t\t\tfmted = fmt.Sprintf(\"\\\\u%04x\", r)\n\t\t\t\t} else {\n\t\t\t\t\tfmted = fmt.Sprintf(\"\\\\U%08x\", r)\n\t\t\t\t}\n\t\t\t\tbuf = append(buf, fmted...)\n\t\t\t} else {\n\t\t\t\tbuf = appendRune(buf, r)\n\t\t\t}\n\t\t}\n\t}\n\treturn buf\n}\n\nfunc appendRune(b []byte, r rune) []byte {\n\tl := utf8.RuneLen(r)\n\tfor i := 0; i < l; i++ {\n\t\tb = append(b, 0) // make room at the end of our buffer\n\t}\n\tch := b[len(b)-l:]\n\tutf8.EncodeRune(ch, r)\n\treturn b\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hclwrite/native_node_sorter.go",
    "content": "package hclwrite\n\nimport (\n\t\"github.com/hashicorp/hcl2/hcl/hclsyntax\"\n)\n\ntype nativeNodeSorter struct {\n\tNodes []hclsyntax.Node\n}\n\nfunc (s nativeNodeSorter) Len() int {\n\treturn len(s.Nodes)\n}\n\nfunc (s nativeNodeSorter) Less(i, j int) bool {\n\trangeI := s.Nodes[i].Range()\n\trangeJ := s.Nodes[j].Range()\n\treturn rangeI.Start.Byte < rangeJ.Start.Byte\n}\n\nfunc (s nativeNodeSorter) Swap(i, j int) {\n\ts.Nodes[i], s.Nodes[j] = s.Nodes[j], s.Nodes[i]\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hclwrite/node.go",
    "content": "package hclwrite\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/google/go-cmp/cmp\"\n)\n\n// node represents a node in the AST.\ntype node struct {\n\tcontent nodeContent\n\n\tlist          *nodes\n\tbefore, after *node\n}\n\nfunc newNode(c nodeContent) *node {\n\treturn &node{\n\t\tcontent: c,\n\t}\n}\n\nfunc (n *node) Equal(other *node) bool {\n\treturn cmp.Equal(n.content, other.content)\n}\n\nfunc (n *node) BuildTokens(to Tokens) Tokens {\n\treturn n.content.BuildTokens(to)\n}\n\n// Detach removes the receiver from the list it currently belongs to. If the\n// node is not currently in a list, this is a no-op.\nfunc (n *node) Detach() {\n\tif n.list == nil {\n\t\treturn\n\t}\n\tif n.before != nil {\n\t\tn.before.after = n.after\n\t}\n\tif n.after != nil {\n\t\tn.after.before = n.before\n\t}\n\tif n.list.first == n {\n\t\tn.list.first = n.after\n\t}\n\tif n.list.last == n {\n\t\tn.list.last = n.before\n\t}\n\tn.list = nil\n\tn.before = nil\n\tn.after = nil\n}\n\n// ReplaceWith removes the receiver from the list it currently belongs to and\n// inserts a new node with the given content in its place. If the node is not\n// currently in a list, this function will panic.\n//\n// The return value is the newly-constructed node, containing the given content.\n// After this function returns, the reciever is no longer attached to a list.\nfunc (n *node) ReplaceWith(c nodeContent) *node {\n\tif n.list == nil {\n\t\tpanic(\"can't replace node that is not in a list\")\n\t}\n\n\tbefore := n.before\n\tafter := n.after\n\tlist := n.list\n\tn.before, n.after, n.list = nil, nil, nil\n\n\tnn := newNode(c)\n\tnn.before = before\n\tnn.after = after\n\tnn.list = list\n\tif before != nil {\n\t\tbefore.after = nn\n\t}\n\tif after != nil {\n\t\tafter.before = nn\n\t}\n\treturn nn\n}\n\nfunc (n *node) assertUnattached() {\n\tif n.list != nil {\n\t\tpanic(fmt.Sprintf(\"attempt to attach already-attached node %#v\", n))\n\t}\n}\n\n// nodeContent is the interface type implemented by all AST content types.\ntype nodeContent interface {\n\twalkChildNodes(w internalWalkFunc)\n\tBuildTokens(to Tokens) Tokens\n}\n\n// nodes is a list of nodes.\ntype nodes struct {\n\tfirst, last *node\n}\n\nfunc (ns *nodes) BuildTokens(to Tokens) Tokens {\n\tfor n := ns.first; n != nil; n = n.after {\n\t\tto = n.BuildTokens(to)\n\t}\n\treturn to\n}\n\nfunc (ns *nodes) Clear() {\n\tns.first = nil\n\tns.last = nil\n}\n\nfunc (ns *nodes) Append(c nodeContent) *node {\n\tn := &node{\n\t\tcontent: c,\n\t}\n\tns.AppendNode(n)\n\tn.list = ns\n\treturn n\n}\n\nfunc (ns *nodes) AppendNode(n *node) {\n\tif ns.last != nil {\n\t\tn.before = ns.last\n\t\tns.last.after = n\n\t}\n\tn.list = ns\n\tns.last = n\n\tif ns.first == nil {\n\t\tns.first = n\n\t}\n}\n\nfunc (ns *nodes) AppendUnstructuredTokens(tokens Tokens) *node {\n\tif len(tokens) == 0 {\n\t\treturn nil\n\t}\n\tn := newNode(tokens)\n\tns.AppendNode(n)\n\tn.list = ns\n\treturn n\n}\n\n// nodeSet is an unordered set of nodes. It is used to describe a set of nodes\n// that all belong to the same list that have some role or characteristic\n// in common.\ntype nodeSet map[*node]struct{}\n\nfunc newNodeSet() nodeSet {\n\treturn make(nodeSet)\n}\n\nfunc (ns nodeSet) Has(n *node) bool {\n\tif ns == nil {\n\t\treturn false\n\t}\n\t_, exists := ns[n]\n\treturn exists\n}\n\nfunc (ns nodeSet) Add(n *node) {\n\tns[n] = struct{}{}\n}\n\nfunc (ns nodeSet) Remove(n *node) {\n\tdelete(ns, n)\n}\n\nfunc (ns nodeSet) List() []*node {\n\tif len(ns) == 0 {\n\t\treturn nil\n\t}\n\n\tret := make([]*node, 0, len(ns))\n\n\t// Determine which list we are working with. We assume here that all of\n\t// the nodes belong to the same list, since that is part of the contract\n\t// for nodeSet.\n\tvar list *nodes\n\tfor n := range ns {\n\t\tlist = n.list\n\t\tbreak\n\t}\n\n\t// We recover the order by iterating over the whole list. This is not\n\t// the most efficient way to do it, but our node lists should always be\n\t// small so not worth making things more complex.\n\tfor n := list.first; n != nil; n = n.after {\n\t\tif ns.Has(n) {\n\t\t\tret = append(ret, n)\n\t\t}\n\t}\n\treturn ret\n}\n\ntype internalWalkFunc func(*node)\n\n// inTree can be embedded into a content struct that has child nodes to get\n// a standard implementation of the NodeContent interface and a record of\n// a potential parent node.\ntype inTree struct {\n\tparent   *node\n\tchildren *nodes\n}\n\nfunc newInTree() inTree {\n\treturn inTree{\n\t\tchildren: &nodes{},\n\t}\n}\n\nfunc (it *inTree) assertUnattached() {\n\tif it.parent != nil {\n\t\tpanic(fmt.Sprintf(\"node is already attached to %T\", it.parent.content))\n\t}\n}\n\nfunc (it *inTree) walkChildNodes(w internalWalkFunc) {\n\tfor n := it.children.first; n != nil; n = n.after {\n\t\tw(n)\n\t}\n}\n\nfunc (it *inTree) BuildTokens(to Tokens) Tokens {\n\tfor n := it.children.first; n != nil; n = n.after {\n\t\tto = n.BuildTokens(to)\n\t}\n\treturn to\n}\n\n// leafNode can be embedded into a content struct to give it a do-nothing\n// implementation of walkChildNodes\ntype leafNode struct {\n}\n\nfunc (n *leafNode) walkChildNodes(w internalWalkFunc) {\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hclwrite/parser.go",
    "content": "package hclwrite\n\nimport (\n\t\"fmt\"\n\t\"sort\"\n\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/hashicorp/hcl2/hcl/hclsyntax\"\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// Our \"parser\" here is actually not doing any parsing of its own. Instead,\n// it leans on the native parser in hclsyntax, and then uses the source ranges\n// from the AST to partition the raw token sequence to match the raw tokens\n// up to AST nodes.\n//\n// This strategy feels somewhat counter-intuitive, since most of the work the\n// parser does is thrown away here, but this strategy is chosen because the\n// normal parsing work done by hclsyntax is considered to be the \"main case\",\n// while modifying and re-printing source is more of an edge case, used only\n// in ancillary tools, and so it's good to keep all the main parsing logic\n// with the main case but keep all of the extra complexity of token wrangling\n// out of the main parser, which is already rather complex just serving the\n// use-cases it already serves.\n//\n// If the parsing step produces any errors, the returned File is nil because\n// we can't reliably extract tokens from the partial AST produced by an\n// erroneous parse.\nfunc parse(src []byte, filename string, start hcl.Pos) (*File, hcl.Diagnostics) {\n\tfile, diags := hclsyntax.ParseConfig(src, filename, start)\n\tif diags.HasErrors() {\n\t\treturn nil, diags\n\t}\n\n\t// To do our work here, we use the \"native\" tokens (those from hclsyntax)\n\t// to match against source ranges in the AST, but ultimately produce\n\t// slices from our sequence of \"writer\" tokens, which contain only\n\t// *relative* position information that is more appropriate for\n\t// transformation/writing use-cases.\n\tnativeTokens, diags := hclsyntax.LexConfig(src, filename, start)\n\tif diags.HasErrors() {\n\t\t// should never happen, since we would've caught these diags in\n\t\t// the first call above.\n\t\treturn nil, diags\n\t}\n\twriterTokens := writerTokens(nativeTokens)\n\n\tfrom := inputTokens{\n\t\tnativeTokens: nativeTokens,\n\t\twriterTokens: writerTokens,\n\t}\n\n\tbefore, root, after := parseBody(file.Body.(*hclsyntax.Body), from)\n\tret := &File{\n\t\tinTree: newInTree(),\n\n\t\tsrcBytes: src,\n\t\tbody:     root,\n\t}\n\n\tnodes := ret.inTree.children\n\tnodes.Append(before.Tokens())\n\tnodes.AppendNode(root)\n\tnodes.Append(after.Tokens())\n\n\treturn ret, diags\n}\n\ntype inputTokens struct {\n\tnativeTokens hclsyntax.Tokens\n\twriterTokens Tokens\n}\n\nfunc (it inputTokens) Partition(rng hcl.Range) (before, within, after inputTokens) {\n\tstart, end := partitionTokens(it.nativeTokens, rng)\n\tbefore = it.Slice(0, start)\n\twithin = it.Slice(start, end)\n\tafter = it.Slice(end, len(it.nativeTokens))\n\treturn\n}\n\nfunc (it inputTokens) PartitionType(ty hclsyntax.TokenType) (before, within, after inputTokens) {\n\tfor i, t := range it.writerTokens {\n\t\tif t.Type == ty {\n\t\t\treturn it.Slice(0, i), it.Slice(i, i+1), it.Slice(i+1, len(it.nativeTokens))\n\t\t}\n\t}\n\tpanic(fmt.Sprintf(\"didn't find any token of type %s\", ty))\n}\n\nfunc (it inputTokens) PartitionTypeSingle(ty hclsyntax.TokenType) (before inputTokens, found *Token, after inputTokens) {\n\tbefore, within, after := it.PartitionType(ty)\n\tif within.Len() != 1 {\n\t\tpanic(\"PartitionType found more than one token\")\n\t}\n\treturn before, within.Tokens()[0], after\n}\n\n// PartitionIncludeComments is like Partition except the returned \"within\"\n// range includes any lead and line comments associated with the range.\nfunc (it inputTokens) PartitionIncludingComments(rng hcl.Range) (before, within, after inputTokens) {\n\tstart, end := partitionTokens(it.nativeTokens, rng)\n\tstart = partitionLeadCommentTokens(it.nativeTokens[:start])\n\t_, afterNewline := partitionLineEndTokens(it.nativeTokens[end:])\n\tend += afterNewline\n\n\tbefore = it.Slice(0, start)\n\twithin = it.Slice(start, end)\n\tafter = it.Slice(end, len(it.nativeTokens))\n\treturn\n\n}\n\n// PartitionBlockItem is similar to PartitionIncludeComments but it returns\n// the comments as separate token sequences so that they can be captured into\n// AST attributes. It makes assumptions that apply only to block items, so\n// should not be used for other constructs.\nfunc (it inputTokens) PartitionBlockItem(rng hcl.Range) (before, leadComments, within, lineComments, newline, after inputTokens) {\n\tbefore, within, after = it.Partition(rng)\n\tbefore, leadComments = before.PartitionLeadComments()\n\tlineComments, newline, after = after.PartitionLineEndTokens()\n\treturn\n}\n\nfunc (it inputTokens) PartitionLeadComments() (before, within inputTokens) {\n\tstart := partitionLeadCommentTokens(it.nativeTokens)\n\tbefore = it.Slice(0, start)\n\twithin = it.Slice(start, len(it.nativeTokens))\n\treturn\n}\n\nfunc (it inputTokens) PartitionLineEndTokens() (comments, newline, after inputTokens) {\n\tafterComments, afterNewline := partitionLineEndTokens(it.nativeTokens)\n\tcomments = it.Slice(0, afterComments)\n\tnewline = it.Slice(afterComments, afterNewline)\n\tafter = it.Slice(afterNewline, len(it.nativeTokens))\n\treturn\n}\n\nfunc (it inputTokens) Slice(start, end int) inputTokens {\n\t// When we slice, we create a new slice with no additional capacity because\n\t// we expect that these slices will be mutated in order to insert\n\t// new code into the AST, and we want to ensure that a new underlying\n\t// array gets allocated in that case, rather than writing into some\n\t// following slice and corrupting it.\n\treturn inputTokens{\n\t\tnativeTokens: it.nativeTokens[start:end:end],\n\t\twriterTokens: it.writerTokens[start:end:end],\n\t}\n}\n\nfunc (it inputTokens) Len() int {\n\treturn len(it.nativeTokens)\n}\n\nfunc (it inputTokens) Tokens() Tokens {\n\treturn it.writerTokens\n}\n\nfunc (it inputTokens) Types() []hclsyntax.TokenType {\n\tret := make([]hclsyntax.TokenType, len(it.nativeTokens))\n\tfor i, tok := range it.nativeTokens {\n\t\tret[i] = tok.Type\n\t}\n\treturn ret\n}\n\n// parseBody locates the given body within the given input tokens and returns\n// the resulting *Body object as well as the tokens that appeared before and\n// after it.\nfunc parseBody(nativeBody *hclsyntax.Body, from inputTokens) (inputTokens, *node, inputTokens) {\n\tbefore, within, after := from.PartitionIncludingComments(nativeBody.SrcRange)\n\n\t// The main AST doesn't retain the original source ordering of the\n\t// body items, so we need to reconstruct that ordering by inspecting\n\t// their source ranges.\n\tnativeItems := make([]hclsyntax.Node, 0, len(nativeBody.Attributes)+len(nativeBody.Blocks))\n\tfor _, nativeAttr := range nativeBody.Attributes {\n\t\tnativeItems = append(nativeItems, nativeAttr)\n\t}\n\tfor _, nativeBlock := range nativeBody.Blocks {\n\t\tnativeItems = append(nativeItems, nativeBlock)\n\t}\n\tsort.Sort(nativeNodeSorter{nativeItems})\n\n\tbody := &Body{\n\t\tinTree: newInTree(),\n\t\titems:  newNodeSet(),\n\t}\n\n\tremain := within\n\tfor _, nativeItem := range nativeItems {\n\t\tbeforeItem, item, afterItem := parseBodyItem(nativeItem, remain)\n\n\t\tif beforeItem.Len() > 0 {\n\t\t\tbody.AppendUnstructuredTokens(beforeItem.Tokens())\n\t\t}\n\t\tbody.appendItemNode(item)\n\n\t\tremain = afterItem\n\t}\n\n\tif remain.Len() > 0 {\n\t\tbody.AppendUnstructuredTokens(remain.Tokens())\n\t}\n\n\treturn before, newNode(body), after\n}\n\nfunc parseBodyItem(nativeItem hclsyntax.Node, from inputTokens) (inputTokens, *node, inputTokens) {\n\tbefore, leadComments, within, lineComments, newline, after := from.PartitionBlockItem(nativeItem.Range())\n\n\tvar item *node\n\n\tswitch tItem := nativeItem.(type) {\n\tcase *hclsyntax.Attribute:\n\t\titem = parseAttribute(tItem, within, leadComments, lineComments, newline)\n\tcase *hclsyntax.Block:\n\t\titem = parseBlock(tItem, within, leadComments, lineComments, newline)\n\tdefault:\n\t\t// should never happen if caller is behaving\n\t\tpanic(\"unsupported native item type\")\n\t}\n\n\treturn before, item, after\n}\n\nfunc parseAttribute(nativeAttr *hclsyntax.Attribute, from, leadComments, lineComments, newline inputTokens) *node {\n\tattr := &Attribute{\n\t\tinTree: newInTree(),\n\t}\n\tchildren := attr.inTree.children\n\n\t{\n\t\tcn := newNode(newComments(leadComments.Tokens()))\n\t\tattr.leadComments = cn\n\t\tchildren.AppendNode(cn)\n\t}\n\n\tbefore, nameTokens, from := from.Partition(nativeAttr.NameRange)\n\t{\n\t\tchildren.AppendUnstructuredTokens(before.Tokens())\n\t\tif nameTokens.Len() != 1 {\n\t\t\t// Should never happen with valid input\n\t\t\tpanic(\"attribute name is not exactly one token\")\n\t\t}\n\t\ttoken := nameTokens.Tokens()[0]\n\t\tin := newNode(newIdentifier(token))\n\t\tattr.name = in\n\t\tchildren.AppendNode(in)\n\t}\n\n\tbefore, equalsTokens, from := from.Partition(nativeAttr.EqualsRange)\n\tchildren.AppendUnstructuredTokens(before.Tokens())\n\tchildren.AppendUnstructuredTokens(equalsTokens.Tokens())\n\n\tbefore, exprTokens, from := from.Partition(nativeAttr.Expr.Range())\n\t{\n\t\tchildren.AppendUnstructuredTokens(before.Tokens())\n\t\texprNode := parseExpression(nativeAttr.Expr, exprTokens)\n\t\tattr.expr = exprNode\n\t\tchildren.AppendNode(exprNode)\n\t}\n\n\t{\n\t\tcn := newNode(newComments(lineComments.Tokens()))\n\t\tattr.lineComments = cn\n\t\tchildren.AppendNode(cn)\n\t}\n\n\tchildren.AppendUnstructuredTokens(newline.Tokens())\n\n\t// Collect any stragglers, though there shouldn't be any\n\tchildren.AppendUnstructuredTokens(from.Tokens())\n\n\treturn newNode(attr)\n}\n\nfunc parseBlock(nativeBlock *hclsyntax.Block, from, leadComments, lineComments, newline inputTokens) *node {\n\tblock := &Block{\n\t\tinTree: newInTree(),\n\t\tlabels: newNodeSet(),\n\t}\n\tchildren := block.inTree.children\n\n\t{\n\t\tcn := newNode(newComments(leadComments.Tokens()))\n\t\tblock.leadComments = cn\n\t\tchildren.AppendNode(cn)\n\t}\n\n\tbefore, typeTokens, from := from.Partition(nativeBlock.TypeRange)\n\t{\n\t\tchildren.AppendUnstructuredTokens(before.Tokens())\n\t\tif typeTokens.Len() != 1 {\n\t\t\t// Should never happen with valid input\n\t\t\tpanic(\"block type name is not exactly one token\")\n\t\t}\n\t\ttoken := typeTokens.Tokens()[0]\n\t\tin := newNode(newIdentifier(token))\n\t\tblock.typeName = in\n\t\tchildren.AppendNode(in)\n\t}\n\n\tfor _, rng := range nativeBlock.LabelRanges {\n\t\tvar labelTokens inputTokens\n\t\tbefore, labelTokens, from = from.Partition(rng)\n\t\tchildren.AppendUnstructuredTokens(before.Tokens())\n\t\ttokens := labelTokens.Tokens()\n\t\tln := newNode(newQuoted(tokens))\n\t\tblock.labels.Add(ln)\n\t\tchildren.AppendNode(ln)\n\t}\n\n\tbefore, oBrace, from := from.Partition(nativeBlock.OpenBraceRange)\n\tchildren.AppendUnstructuredTokens(before.Tokens())\n\tchildren.AppendUnstructuredTokens(oBrace.Tokens())\n\n\t// We go a bit out of order here: we go hunting for the closing brace\n\t// so that we have a delimited body, but then we'll deal with the body\n\t// before we actually append the closing brace and any straggling tokens\n\t// that appear after it.\n\tbodyTokens, cBrace, from := from.Partition(nativeBlock.CloseBraceRange)\n\tbefore, body, after := parseBody(nativeBlock.Body, bodyTokens)\n\tchildren.AppendUnstructuredTokens(before.Tokens())\n\tblock.body = body\n\tchildren.AppendNode(body)\n\tchildren.AppendUnstructuredTokens(after.Tokens())\n\n\tchildren.AppendUnstructuredTokens(cBrace.Tokens())\n\n\t// stragglers\n\tchildren.AppendUnstructuredTokens(from.Tokens())\n\tif lineComments.Len() > 0 {\n\t\t// blocks don't actually have line comments, so we'll just treat\n\t\t// them as extra stragglers\n\t\tchildren.AppendUnstructuredTokens(lineComments.Tokens())\n\t}\n\tchildren.AppendUnstructuredTokens(newline.Tokens())\n\n\treturn newNode(block)\n}\n\nfunc parseExpression(nativeExpr hclsyntax.Expression, from inputTokens) *node {\n\texpr := newExpression()\n\tchildren := expr.inTree.children\n\n\tnativeVars := nativeExpr.Variables()\n\n\tfor _, nativeTraversal := range nativeVars {\n\t\tbefore, traversal, after := parseTraversal(nativeTraversal, from)\n\t\tchildren.AppendUnstructuredTokens(before.Tokens())\n\t\tchildren.AppendNode(traversal)\n\t\texpr.absTraversals.Add(traversal)\n\t\tfrom = after\n\t}\n\t// Attach any stragglers that don't belong to a traversal to the expression\n\t// itself. In an expression with no traversals at all, this is just the\n\t// entirety of \"from\".\n\tchildren.AppendUnstructuredTokens(from.Tokens())\n\n\treturn newNode(expr)\n}\n\nfunc parseTraversal(nativeTraversal hcl.Traversal, from inputTokens) (before inputTokens, n *node, after inputTokens) {\n\ttraversal := newTraversal()\n\tchildren := traversal.inTree.children\n\tbefore, from, after = from.Partition(nativeTraversal.SourceRange())\n\n\tstepAfter := from\n\tfor _, nativeStep := range nativeTraversal {\n\t\tbefore, step, after := parseTraversalStep(nativeStep, stepAfter)\n\t\tchildren.AppendUnstructuredTokens(before.Tokens())\n\t\tchildren.AppendNode(step)\n\t\ttraversal.steps.Add(step)\n\t\tstepAfter = after\n\t}\n\n\treturn before, newNode(traversal), after\n}\n\nfunc parseTraversalStep(nativeStep hcl.Traverser, from inputTokens) (before inputTokens, n *node, after inputTokens) {\n\tvar children *nodes\n\tswitch tNativeStep := nativeStep.(type) {\n\n\tcase hcl.TraverseRoot, hcl.TraverseAttr:\n\t\tstep := newTraverseName()\n\t\tchildren = step.inTree.children\n\t\tbefore, from, after = from.Partition(nativeStep.SourceRange())\n\t\tinBefore, token, inAfter := from.PartitionTypeSingle(hclsyntax.TokenIdent)\n\t\tname := newIdentifier(token)\n\t\tchildren.AppendUnstructuredTokens(inBefore.Tokens())\n\t\tstep.name = children.Append(name)\n\t\tchildren.AppendUnstructuredTokens(inAfter.Tokens())\n\t\treturn before, newNode(step), after\n\n\tcase hcl.TraverseIndex:\n\t\tstep := newTraverseIndex()\n\t\tchildren = step.inTree.children\n\t\tbefore, from, after = from.Partition(nativeStep.SourceRange())\n\n\t\tvar inBefore, oBrack, keyTokens, cBrack inputTokens\n\t\tinBefore, oBrack, from = from.PartitionType(hclsyntax.TokenOBrack)\n\t\tchildren.AppendUnstructuredTokens(inBefore.Tokens())\n\t\tchildren.AppendUnstructuredTokens(oBrack.Tokens())\n\t\tkeyTokens, cBrack, from = from.PartitionType(hclsyntax.TokenCBrack)\n\n\t\tkeyVal := tNativeStep.Key\n\t\tswitch keyVal.Type() {\n\t\tcase cty.String:\n\t\t\tkey := newQuoted(keyTokens.Tokens())\n\t\t\tstep.key = children.Append(key)\n\t\tcase cty.Number:\n\t\t\tvalBefore, valToken, valAfter := keyTokens.PartitionTypeSingle(hclsyntax.TokenNumberLit)\n\t\t\tchildren.AppendUnstructuredTokens(valBefore.Tokens())\n\t\t\tkey := newNumber(valToken)\n\t\t\tstep.key = children.Append(key)\n\t\t\tchildren.AppendUnstructuredTokens(valAfter.Tokens())\n\t\t}\n\n\t\tchildren.AppendUnstructuredTokens(cBrack.Tokens())\n\t\tchildren.AppendUnstructuredTokens(from.Tokens())\n\n\t\treturn before, newNode(step), after\n\tdefault:\n\t\tpanic(fmt.Sprintf(\"unsupported traversal step type %T\", nativeStep))\n\t}\n\n}\n\n// writerTokens takes a sequence of tokens as produced by the main hclsyntax\n// package and transforms it into an equivalent sequence of tokens using\n// this package's own token model.\n//\n// The resulting list contains the same number of tokens and uses the same\n// indices as the input, allowing the two sets of tokens to be correlated\n// by index.\nfunc writerTokens(nativeTokens hclsyntax.Tokens) Tokens {\n\t// Ultimately we want a slice of token _pointers_, but since we can\n\t// predict how much memory we're going to devote to tokens we'll allocate\n\t// it all as a single flat buffer and thus give the GC less work to do.\n\ttokBuf := make([]Token, len(nativeTokens))\n\tvar lastByteOffset int\n\tfor i, mainToken := range nativeTokens {\n\t\t// Create a copy of the bytes so that we can mutate without\n\t\t// corrupting the original token stream.\n\t\tbytes := make([]byte, len(mainToken.Bytes))\n\t\tcopy(bytes, mainToken.Bytes)\n\n\t\ttokBuf[i] = Token{\n\t\t\tType:  mainToken.Type,\n\t\t\tBytes: bytes,\n\n\t\t\t// We assume here that spaces are always ASCII spaces, since\n\t\t\t// that's what the scanner also assumes, and thus the number\n\t\t\t// of bytes skipped is also the number of space characters.\n\t\t\tSpacesBefore: mainToken.Range.Start.Byte - lastByteOffset,\n\t\t}\n\n\t\tlastByteOffset = mainToken.Range.End.Byte\n\t}\n\n\t// Now make a slice of pointers into the previous slice.\n\tret := make(Tokens, len(tokBuf))\n\tfor i := range ret {\n\t\tret[i] = &tokBuf[i]\n\t}\n\n\treturn ret\n}\n\n// partitionTokens takes a sequence of tokens and a hcl.Range and returns\n// two indices within the token sequence that correspond with the range\n// boundaries, such that the slice operator could be used to produce\n// three token sequences for before, within, and after respectively:\n//\n//     start, end := partitionTokens(toks, rng)\n//     before := toks[:start]\n//     within := toks[start:end]\n//     after := toks[end:]\n//\n// This works best when the range is aligned with token boundaries (e.g.\n// because it was produced in terms of the scanner's result) but if that isn't\n// true then it will make a best effort that may produce strange results at\n// the boundaries.\n//\n// Native hclsyntax tokens are used here, because they contain the necessary\n// absolute position information. However, since writerTokens produces a\n// correlatable sequence of writer tokens, the resulting indices can be\n// used also to index into its result, allowing the partitioning of writer\n// tokens to be driven by the partitioning of native tokens.\n//\n// The tokens are assumed to be in source order and non-overlapping, which\n// will be true if the token sequence from the scanner is used directly.\nfunc partitionTokens(toks hclsyntax.Tokens, rng hcl.Range) (start, end int) {\n\t// We us a linear search here because we assume tha in most cases our\n\t// target range is close to the beginning of the sequence, and the seqences\n\t// are generally small for most reasonable files anyway.\n\tfor i := 0; ; i++ {\n\t\tif i >= len(toks) {\n\t\t\t// No tokens for the given range at all!\n\t\t\treturn len(toks), len(toks)\n\t\t}\n\n\t\tif toks[i].Range.Start.Byte >= rng.Start.Byte {\n\t\t\tstart = i\n\t\t\tbreak\n\t\t}\n\t}\n\n\tfor i := start; ; i++ {\n\t\tif i >= len(toks) {\n\t\t\t// The range \"hangs off\" the end of the token sequence\n\t\t\treturn start, len(toks)\n\t\t}\n\n\t\tif toks[i].Range.Start.Byte >= rng.End.Byte {\n\t\t\tend = i // end marker is exclusive\n\t\t\tbreak\n\t\t}\n\t}\n\n\treturn start, end\n}\n\n// partitionLeadCommentTokens takes a sequence of tokens that is assumed\n// to immediately precede a construct that can have lead comment tokens,\n// and returns the index into that sequence where the lead comments begin.\n//\n// Lead comments are defined as whole lines containing only comment tokens\n// with no blank lines between. If no such lines are found, the returned\n// index will be len(toks).\nfunc partitionLeadCommentTokens(toks hclsyntax.Tokens) int {\n\t// single-line comments (which is what we're interested in here)\n\t// consume their trailing newline, so we can just walk backwards\n\t// until we stop seeing comment tokens.\n\tfor i := len(toks) - 1; i >= 0; i-- {\n\t\tif toks[i].Type != hclsyntax.TokenComment {\n\t\t\treturn i + 1\n\t\t}\n\t}\n\treturn 0\n}\n\n// partitionLineEndTokens takes a sequence of tokens that is assumed\n// to immediately follow a construct that can have a line comment, and\n// returns first the index where any line comments end and then second\n// the index immediately after the trailing newline.\n//\n// Line comments are defined as comments that appear immediately after\n// a construct on the same line where its significant tokens ended.\n//\n// Since single-line comment tokens (# and //) include the newline that\n// terminates them, in the presence of these the two returned indices\n// will be the same since the comment itself serves as the line end.\nfunc partitionLineEndTokens(toks hclsyntax.Tokens) (afterComment, afterNewline int) {\n\tfor i := 0; i < len(toks); i++ {\n\t\ttok := toks[i]\n\t\tif tok.Type != hclsyntax.TokenComment {\n\t\t\tswitch tok.Type {\n\t\t\tcase hclsyntax.TokenNewline:\n\t\t\t\treturn i, i + 1\n\t\t\tcase hclsyntax.TokenEOF:\n\t\t\t\t// Although this is valid, we mustn't include the EOF\n\t\t\t\t// itself as our \"newline\" or else strange things will\n\t\t\t\t// happen when we try to append new items.\n\t\t\t\treturn i, i\n\t\t\tdefault:\n\t\t\t\t// If we have well-formed input here then nothing else should be\n\t\t\t\t// possible. This path should never happen, because we only try\n\t\t\t\t// to extract tokens from the sequence if the parser succeeded,\n\t\t\t\t// and it should catch this problem itself.\n\t\t\t\tpanic(\"malformed line trailers: expected only comments and newlines\")\n\t\t\t}\n\t\t}\n\n\t\tif len(tok.Bytes) > 0 && tok.Bytes[len(tok.Bytes)-1] == '\\n' {\n\t\t\t// Newline at the end of a single-line comment serves both as\n\t\t\t// the end of comments *and* the end of the line.\n\t\t\treturn i + 1, i + 1\n\t\t}\n\t}\n\treturn len(toks), len(toks)\n}\n\n// lexConfig uses the hclsyntax scanner to get a token stream and then\n// rewrites it into this package's token model.\n//\n// Any errors produced during scanning are ignored, so the results of this\n// function should be used with care.\nfunc lexConfig(src []byte) Tokens {\n\tmainTokens, _ := hclsyntax.LexConfig(src, \"\", hcl.Pos{Byte: 0, Line: 1, Column: 1})\n\treturn writerTokens(mainTokens)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hclwrite/public.go",
    "content": "package hclwrite\n\nimport (\n\t\"bytes\"\n\n\t\"github.com/hashicorp/hcl2/hcl\"\n)\n\n// NewFile creates a new file object that is empty and ready to have constructs\n// added t it.\nfunc NewFile() *File {\n\tbody := &Body{\n\t\tinTree: newInTree(),\n\t\titems:  newNodeSet(),\n\t}\n\tfile := &File{\n\t\tinTree: newInTree(),\n\t}\n\tfile.body = file.inTree.children.Append(body)\n\treturn file\n}\n\n// ParseConfig interprets the given source bytes into a *hclwrite.File. The\n// resulting AST can be used to perform surgical edits on the source code\n// before turning it back into bytes again.\nfunc ParseConfig(src []byte, filename string, start hcl.Pos) (*File, hcl.Diagnostics) {\n\treturn parse(src, filename, start)\n}\n\n// Format takes source code and performs simple whitespace changes to transform\n// it to a canonical layout style.\n//\n// Format skips constructing an AST and works directly with tokens, so it\n// is less expensive than formatting via the AST for situations where no other\n// changes will be made. It also ignores syntax errors and can thus be applied\n// to partial source code, although the result in that case may not be\n// desirable.\nfunc Format(src []byte) []byte {\n\ttokens := lexConfig(src)\n\tformat(tokens)\n\tbuf := &bytes.Buffer{}\n\ttokens.WriteTo(buf)\n\treturn buf.Bytes()\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hcl2/hclwrite/tokens.go",
    "content": "package hclwrite\n\nimport (\n\t\"bytes\"\n\t\"io\"\n\n\t\"github.com/apparentlymart/go-textseg/textseg\"\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/hashicorp/hcl2/hcl/hclsyntax\"\n)\n\n// Token is a single sequence of bytes annotated with a type. It is similar\n// in purpose to hclsyntax.Token, but discards the source position information\n// since that is not useful in code generation.\ntype Token struct {\n\tType  hclsyntax.TokenType\n\tBytes []byte\n\n\t// We record the number of spaces before each token so that we can\n\t// reproduce the exact layout of the original file when we're making\n\t// surgical changes in-place. When _new_ code is created it will always\n\t// be in the canonical style, but we preserve layout of existing code.\n\tSpacesBefore int\n}\n\n// asHCLSyntax returns the receiver expressed as an incomplete hclsyntax.Token.\n// A complete token is not possible since we don't have source location\n// information here, and so this method is unexported so we can be sure it will\n// only be used for internal purposes where we know the range isn't important.\n//\n// This is primarily intended to allow us to re-use certain functionality from\n// hclsyntax rather than re-implementing it against our own token type here.\nfunc (t *Token) asHCLSyntax() hclsyntax.Token {\n\treturn hclsyntax.Token{\n\t\tType:  t.Type,\n\t\tBytes: t.Bytes,\n\t\tRange: hcl.Range{\n\t\t\tFilename: \"<invalid>\",\n\t\t},\n\t}\n}\n\n// Tokens is a flat list of tokens.\ntype Tokens []*Token\n\nfunc (ts Tokens) Bytes() []byte {\n\tbuf := &bytes.Buffer{}\n\tts.WriteTo(buf)\n\treturn buf.Bytes()\n}\n\nfunc (ts Tokens) testValue() string {\n\treturn string(ts.Bytes())\n}\n\n// Columns returns the number of columns (grapheme clusters) the token sequence\n// occupies. The result is not meaningful if there are newline or single-line\n// comment tokens in the sequence.\nfunc (ts Tokens) Columns() int {\n\tret := 0\n\tfor _, token := range ts {\n\t\tret += token.SpacesBefore // spaces are always worth one column each\n\t\tct, _ := textseg.TokenCount(token.Bytes, textseg.ScanGraphemeClusters)\n\t\tret += ct\n\t}\n\treturn ret\n}\n\n// WriteTo takes an io.Writer and writes the bytes for each token to it,\n// along with the spacing that separates each token. In other words, this\n// allows serializing the tokens to a file or other such byte stream.\nfunc (ts Tokens) WriteTo(wr io.Writer) (int64, error) {\n\t// We know we're going to be writing a lot of small chunks of repeated\n\t// space characters, so we'll prepare a buffer of these that we can\n\t// easily pass to wr.Write without any further allocation.\n\tspaces := make([]byte, 40)\n\tfor i := range spaces {\n\t\tspaces[i] = ' '\n\t}\n\n\tvar n int64\n\tvar err error\n\tfor _, token := range ts {\n\t\tif err != nil {\n\t\t\treturn n, err\n\t\t}\n\n\t\tfor spacesBefore := token.SpacesBefore; spacesBefore > 0; spacesBefore -= len(spaces) {\n\t\t\tthisChunk := spacesBefore\n\t\t\tif thisChunk > len(spaces) {\n\t\t\t\tthisChunk = len(spaces)\n\t\t\t}\n\t\t\tvar thisN int\n\t\t\tthisN, err = wr.Write(spaces[:thisChunk])\n\t\t\tn += int64(thisN)\n\t\t\tif err != nil {\n\t\t\t\treturn n, err\n\t\t\t}\n\t\t}\n\n\t\tvar thisN int\n\t\tthisN, err = wr.Write(token.Bytes)\n\t\tn += int64(thisN)\n\t}\n\n\treturn n, err\n}\n\nfunc (ts Tokens) walkChildNodes(w internalWalkFunc) {\n\t// Unstructured tokens have no child nodes\n}\n\nfunc (ts Tokens) BuildTokens(to Tokens) Tokens {\n\treturn append(to, ts...)\n}\n\nfunc newIdentToken(name string) *Token {\n\treturn &Token{\n\t\tType:  hclsyntax.TokenIdent,\n\t\tBytes: []byte(name),\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hil/LICENSE",
    "content": "Mozilla Public License, version 2.0\n\n1. Definitions\n\n1.1. “Contributor”\n\n     means each individual or legal entity that creates, contributes to the\n     creation of, or owns Covered Software.\n\n1.2. “Contributor Version”\n\n     means the combination of the Contributions of others (if any) used by a\n     Contributor and that particular Contributor’s Contribution.\n\n1.3. “Contribution”\n\n     means Covered Software of a particular Contributor.\n\n1.4. “Covered Software”\n\n     means Source Code Form to which the initial Contributor has attached the\n     notice in Exhibit A, the Executable Form of such Source Code Form, and\n     Modifications of such Source Code Form, in each case including portions\n     thereof.\n\n1.5. “Incompatible With Secondary Licenses”\n     means\n\n     a. that the initial Contributor has attached the notice described in\n        Exhibit B to the Covered Software; or\n\n     b. that the Covered Software was made available under the terms of version\n        1.1 or earlier of the License, but not also under the terms of a\n        Secondary License.\n\n1.6. “Executable Form”\n\n     means any form of the work other than Source Code Form.\n\n1.7. “Larger Work”\n\n     means a work that combines Covered Software with other material, in a separate\n     file or files, that is not Covered Software.\n\n1.8. “License”\n\n     means this document.\n\n1.9. “Licensable”\n\n     means having the right to grant, to the maximum extent possible, whether at the\n     time of the initial grant or subsequently, any and all of the rights conveyed by\n     this License.\n\n1.10. “Modifications”\n\n     means any of the following:\n\n     a. any file in Source Code Form that results from an addition to, deletion\n        from, or modification of the contents of Covered Software; or\n\n     b. any new file in Source Code Form that contains any Covered Software.\n\n1.11. “Patent Claims” of a Contributor\n\n      means any patent claim(s), including without limitation, method, process,\n      and apparatus claims, in any patent Licensable by such Contributor that\n      would be infringed, but for the grant of the License, by the making,\n      using, selling, offering for sale, having made, import, or transfer of\n      either its Contributions or its Contributor Version.\n\n1.12. “Secondary License”\n\n      means either the GNU General Public License, Version 2.0, the GNU Lesser\n      General Public License, Version 2.1, the GNU Affero General Public\n      License, Version 3.0, or any later versions of those licenses.\n\n1.13. “Source Code Form”\n\n      means the form of the work preferred for making modifications.\n\n1.14. “You” (or “Your”)\n\n      means an individual or a legal entity exercising rights under this\n      License. For legal entities, “You” includes any entity that controls, is\n      controlled by, or is under common control with You. For purposes of this\n      definition, “control” means (a) the power, direct or indirect, to cause\n      the direction or management of such entity, whether by contract or\n      otherwise, or (b) ownership of more than fifty percent (50%) of the\n      outstanding shares or beneficial ownership of such entity.\n\n\n2. License Grants and Conditions\n\n2.1. Grants\n\n     Each Contributor hereby grants You a world-wide, royalty-free,\n     non-exclusive license:\n\n     a. under intellectual property rights (other than patent or trademark)\n        Licensable by such Contributor to use, reproduce, make available,\n        modify, display, perform, distribute, and otherwise exploit its\n        Contributions, either on an unmodified basis, with Modifications, or as\n        part of a Larger Work; and\n\n     b. under Patent Claims of such Contributor to make, use, sell, offer for\n        sale, have made, import, and otherwise transfer either its Contributions\n        or its Contributor Version.\n\n2.2. Effective Date\n\n     The licenses granted in Section 2.1 with respect to any Contribution become\n     effective for each Contribution on the date the Contributor first distributes\n     such Contribution.\n\n2.3. Limitations on Grant Scope\n\n     The licenses granted in this Section 2 are the only rights granted under this\n     License. No additional rights or licenses will be implied from the distribution\n     or licensing of Covered Software under this License. Notwithstanding Section\n     2.1(b) above, no patent license is granted by a Contributor:\n\n     a. for any code that a Contributor has removed from Covered Software; or\n\n     b. for infringements caused by: (i) Your and any other third party’s\n        modifications of Covered Software, or (ii) the combination of its\n        Contributions with other software (except as part of its Contributor\n        Version); or\n\n     c. under Patent Claims infringed by Covered Software in the absence of its\n        Contributions.\n\n     This License does not grant any rights in the trademarks, service marks, or\n     logos of any Contributor (except as may be necessary to comply with the\n     notice requirements in Section 3.4).\n\n2.4. Subsequent Licenses\n\n     No Contributor makes additional grants as a result of Your choice to\n     distribute the Covered Software under a subsequent version of this License\n     (see Section 10.2) or under the terms of a Secondary License (if permitted\n     under the terms of Section 3.3).\n\n2.5. Representation\n\n     Each Contributor represents that the Contributor believes its Contributions\n     are its original creation(s) or it has sufficient rights to grant the\n     rights to its Contributions conveyed by this License.\n\n2.6. Fair Use\n\n     This License is not intended to limit any rights You have under applicable\n     copyright doctrines of fair use, fair dealing, or other equivalents.\n\n2.7. Conditions\n\n     Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in\n     Section 2.1.\n\n\n3. Responsibilities\n\n3.1. Distribution of Source Form\n\n     All distribution of Covered Software in Source Code Form, including any\n     Modifications that You create or to which You contribute, must be under the\n     terms of this License. You must inform recipients that the Source Code Form\n     of the Covered Software is governed by the terms of this License, and how\n     they can obtain a copy of this License. You may not attempt to alter or\n     restrict the recipients’ rights in the Source Code Form.\n\n3.2. Distribution of Executable Form\n\n     If You distribute Covered Software in Executable Form then:\n\n     a. such Covered Software must also be made available in Source Code Form,\n        as described in Section 3.1, and You must inform recipients of the\n        Executable Form how they can obtain a copy of such Source Code Form by\n        reasonable means in a timely manner, at a charge no more than the cost\n        of distribution to the recipient; and\n\n     b. You may distribute such Executable Form under the terms of this License,\n        or sublicense it under different terms, provided that the license for\n        the Executable Form does not attempt to limit or alter the recipients’\n        rights in the Source Code Form under this License.\n\n3.3. Distribution of a Larger Work\n\n     You may create and distribute a Larger Work under terms of Your choice,\n     provided that You also comply with the requirements of this License for the\n     Covered Software. If the Larger Work is a combination of Covered Software\n     with a work governed by one or more Secondary Licenses, and the Covered\n     Software is not Incompatible With Secondary Licenses, this License permits\n     You to additionally distribute such Covered Software under the terms of\n     such Secondary License(s), so that the recipient of the Larger Work may, at\n     their option, further distribute the Covered Software under the terms of\n     either this License or such Secondary License(s).\n\n3.4. Notices\n\n     You may not remove or alter the substance of any license notices (including\n     copyright notices, patent notices, disclaimers of warranty, or limitations\n     of liability) contained within the Source Code Form of the Covered\n     Software, except that You may alter any license notices to the extent\n     required to remedy known factual inaccuracies.\n\n3.5. Application of Additional Terms\n\n     You may choose to offer, and to charge a fee for, warranty, support,\n     indemnity or liability obligations to one or more recipients of Covered\n     Software. However, You may do so only on Your own behalf, and not on behalf\n     of any Contributor. You must make it absolutely clear that any such\n     warranty, support, indemnity, or liability obligation is offered by You\n     alone, and You hereby agree to indemnify every Contributor for any\n     liability incurred by such Contributor as a result of warranty, support,\n     indemnity or liability terms You offer. You may include additional\n     disclaimers of warranty and limitations of liability specific to any\n     jurisdiction.\n\n4. Inability to Comply Due to Statute or Regulation\n\n   If it is impossible for You to comply with any of the terms of this License\n   with respect to some or all of the Covered Software due to statute, judicial\n   order, or regulation then You must: (a) comply with the terms of this License\n   to the maximum extent possible; and (b) describe the limitations and the code\n   they affect. Such description must be placed in a text file included with all\n   distributions of the Covered Software under this License. Except to the\n   extent prohibited by statute or regulation, such description must be\n   sufficiently detailed for a recipient of ordinary skill to be able to\n   understand it.\n\n5. Termination\n\n5.1. The rights granted under this License will terminate automatically if You\n     fail to comply with any of its terms. However, if You become compliant,\n     then the rights granted under this License from a particular Contributor\n     are reinstated (a) provisionally, unless and until such Contributor\n     explicitly and finally terminates Your grants, and (b) on an ongoing basis,\n     if such Contributor fails to notify You of the non-compliance by some\n     reasonable means prior to 60 days after You have come back into compliance.\n     Moreover, Your grants from a particular Contributor are reinstated on an\n     ongoing basis if such Contributor notifies You of the non-compliance by\n     some reasonable means, this is the first time You have received notice of\n     non-compliance with this License from such Contributor, and You become\n     compliant prior to 30 days after Your receipt of the notice.\n\n5.2. If You initiate litigation against any entity by asserting a patent\n     infringement claim (excluding declaratory judgment actions, counter-claims,\n     and cross-claims) alleging that a Contributor Version directly or\n     indirectly infringes any patent, then the rights granted to You by any and\n     all Contributors for the Covered Software under Section 2.1 of this License\n     shall terminate.\n\n5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user\n     license agreements (excluding distributors and resellers) which have been\n     validly granted by You or Your distributors under this License prior to\n     termination shall survive termination.\n\n6. Disclaimer of Warranty\n\n   Covered Software is provided under this License on an “as is” basis, without\n   warranty of any kind, either expressed, implied, or statutory, including,\n   without limitation, warranties that the Covered Software is free of defects,\n   merchantable, fit for a particular purpose or non-infringing. The entire\n   risk as to the quality and performance of the Covered Software is with You.\n   Should any Covered Software prove defective in any respect, You (not any\n   Contributor) assume the cost of any necessary servicing, repair, or\n   correction. This disclaimer of warranty constitutes an essential part of this\n   License. No use of  any Covered Software is authorized under this License\n   except under this disclaimer.\n\n7. Limitation of Liability\n\n   Under no circumstances and under no legal theory, whether tort (including\n   negligence), contract, or otherwise, shall any Contributor, or anyone who\n   distributes Covered Software as permitted above, be liable to You for any\n   direct, indirect, special, incidental, or consequential damages of any\n   character including, without limitation, damages for lost profits, loss of\n   goodwill, work stoppage, computer failure or malfunction, or any and all\n   other commercial damages or losses, even if such party shall have been\n   informed of the possibility of such damages. This limitation of liability\n   shall not apply to liability for death or personal injury resulting from such\n   party’s negligence to the extent applicable law prohibits such limitation.\n   Some jurisdictions do not allow the exclusion or limitation of incidental or\n   consequential damages, so this exclusion and limitation may not apply to You.\n\n8. Litigation\n\n   Any litigation relating to this License may be brought only in the courts of\n   a jurisdiction where the defendant maintains its principal place of business\n   and such litigation shall be governed by laws of that jurisdiction, without\n   reference to its conflict-of-law provisions. Nothing in this Section shall\n   prevent a party’s ability to bring cross-claims or counter-claims.\n\n9. Miscellaneous\n\n   This License represents the complete agreement concerning the subject matter\n   hereof. If any provision of this License is held to be unenforceable, such\n   provision shall be reformed only to the extent necessary to make it\n   enforceable. Any law or regulation which provides that the language of a\n   contract shall be construed against the drafter shall not be used to construe\n   this License against a Contributor.\n\n\n10. Versions of the License\n\n10.1. New Versions\n\n      Mozilla Foundation is the license steward. Except as provided in Section\n      10.3, no one other than the license steward has the right to modify or\n      publish new versions of this License. Each version will be given a\n      distinguishing version number.\n\n10.2. Effect of New Versions\n\n      You may distribute the Covered Software under the terms of the version of\n      the License under which You originally received the Covered Software, or\n      under the terms of any subsequent version published by the license\n      steward.\n\n10.3. Modified Versions\n\n      If you create software not governed by this License, and you want to\n      create a new license for such software, you may create and use a modified\n      version of this License if you rename the license and remove any\n      references to the name of the license steward (except to note that such\n      modified license differs from this License).\n\n10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses\n      If You choose to distribute Source Code Form that is Incompatible With\n      Secondary Licenses under the terms of this version of the License, the\n      notice described in Exhibit B of this License must be attached.\n\nExhibit A - Source Code Form License Notice\n\n      This Source Code Form is subject to the\n      terms of the Mozilla Public License, v.\n      2.0. If a copy of the MPL was not\n      distributed with this file, You can\n      obtain one at\n      http://mozilla.org/MPL/2.0/.\n\nIf it is not possible or desirable to put the notice in a particular file, then\nYou may include the notice in a location (such as a LICENSE file in a relevant\ndirectory) where a recipient would be likely to look for such a notice.\n\nYou may add additional accurate notices of copyright ownership.\n\nExhibit B - “Incompatible With Secondary Licenses” Notice\n\n      This Source Code Form is “Incompatible\n      With Secondary Licenses”, as defined by\n      the Mozilla Public License, v. 2.0.\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hil/ast/arithmetic.go",
    "content": "package ast\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n)\n\n// Arithmetic represents a node where the result is arithmetic of\n// two or more operands in the order given.\ntype Arithmetic struct {\n\tOp    ArithmeticOp\n\tExprs []Node\n\tPosx  Pos\n}\n\nfunc (n *Arithmetic) Accept(v Visitor) Node {\n\tfor i, expr := range n.Exprs {\n\t\tn.Exprs[i] = expr.Accept(v)\n\t}\n\n\treturn v(n)\n}\n\nfunc (n *Arithmetic) Pos() Pos {\n\treturn n.Posx\n}\n\nfunc (n *Arithmetic) GoString() string {\n\treturn fmt.Sprintf(\"*%#v\", *n)\n}\n\nfunc (n *Arithmetic) String() string {\n\tvar b bytes.Buffer\n\tfor _, expr := range n.Exprs {\n\t\tb.WriteString(fmt.Sprintf(\"%s\", expr))\n\t}\n\n\treturn b.String()\n}\n\nfunc (n *Arithmetic) Type(Scope) (Type, error) {\n\treturn TypeInt, nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hil/ast/arithmetic_op.go",
    "content": "package ast\n\n// ArithmeticOp is the operation to use for the math.\ntype ArithmeticOp int\n\nconst (\n\tArithmeticOpInvalid ArithmeticOp = 0\n\n\tArithmeticOpAdd ArithmeticOp = iota\n\tArithmeticOpSub\n\tArithmeticOpMul\n\tArithmeticOpDiv\n\tArithmeticOpMod\n\n\tArithmeticOpLogicalAnd\n\tArithmeticOpLogicalOr\n\n\tArithmeticOpEqual\n\tArithmeticOpNotEqual\n\tArithmeticOpLessThan\n\tArithmeticOpLessThanOrEqual\n\tArithmeticOpGreaterThan\n\tArithmeticOpGreaterThanOrEqual\n)\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hil/ast/ast.go",
    "content": "package ast\n\nimport (\n\t\"fmt\"\n)\n\n// Node is the interface that all AST nodes must implement.\ntype Node interface {\n\t// Accept is called to dispatch to the visitors. It must return the\n\t// resulting Node (which might be different in an AST transform).\n\tAccept(Visitor) Node\n\n\t// Pos returns the position of this node in some source.\n\tPos() Pos\n\n\t// Type returns the type of this node for the given context.\n\tType(Scope) (Type, error)\n}\n\n// Pos is the starting position of an AST node\ntype Pos struct {\n\tColumn, Line int    // Column/Line number, starting at 1\n\tFilename     string // Optional source filename, if known\n}\n\nfunc (p Pos) String() string {\n\tif p.Filename == \"\" {\n\t\treturn fmt.Sprintf(\"%d:%d\", p.Line, p.Column)\n\t} else {\n\t\treturn fmt.Sprintf(\"%s:%d:%d\", p.Filename, p.Line, p.Column)\n\t}\n}\n\n// InitPos is an initiaial position value. This should be used as\n// the starting position (presets the column and line to 1).\nvar InitPos = Pos{Column: 1, Line: 1}\n\n// Visitors are just implementations of this function.\n//\n// The function must return the Node to replace this node with. \"nil\" is\n// _not_ a valid return value. If there is no replacement, the original node\n// should be returned. We build this replacement directly into the visitor\n// pattern since AST transformations are a common and useful tool and\n// building it into the AST itself makes it required for future Node\n// implementations and very easy to do.\n//\n// Note that this isn't a true implementation of the visitor pattern, which\n// generally requires proper type dispatch on the function. However,\n// implementing this basic visitor pattern style is still very useful even\n// if you have to type switch.\ntype Visitor func(Node) Node\n\n//go:generate stringer -type=Type\n\n// Type is the type of any value.\ntype Type uint32\n\nconst (\n\tTypeInvalid Type = 0\n\tTypeAny     Type = 1 << iota\n\tTypeBool\n\tTypeString\n\tTypeInt\n\tTypeFloat\n\tTypeList\n\tTypeMap\n\n\t// This is a special type used by Terraform to mark \"unknown\" values.\n\t// It is impossible for this type to be introduced into your HIL programs\n\t// unless you explicitly set a variable to this value. In that case,\n\t// any operation including the variable will return \"TypeUnknown\" as the\n\t// type.\n\tTypeUnknown\n)\n\nfunc (t Type) Printable() string {\n\tswitch t {\n\tcase TypeInvalid:\n\t\treturn \"invalid type\"\n\tcase TypeAny:\n\t\treturn \"any type\"\n\tcase TypeBool:\n\t\treturn \"type bool\"\n\tcase TypeString:\n\t\treturn \"type string\"\n\tcase TypeInt:\n\t\treturn \"type int\"\n\tcase TypeFloat:\n\t\treturn \"type float\"\n\tcase TypeList:\n\t\treturn \"type list\"\n\tcase TypeMap:\n\t\treturn \"type map\"\n\tcase TypeUnknown:\n\t\treturn \"type unknown\"\n\tdefault:\n\t\treturn \"unknown type\"\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hil/ast/call.go",
    "content": "package ast\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n)\n\n// Call represents a function call.\ntype Call struct {\n\tFunc string\n\tArgs []Node\n\tPosx Pos\n}\n\nfunc (n *Call) Accept(v Visitor) Node {\n\tfor i, a := range n.Args {\n\t\tn.Args[i] = a.Accept(v)\n\t}\n\n\treturn v(n)\n}\n\nfunc (n *Call) Pos() Pos {\n\treturn n.Posx\n}\n\nfunc (n *Call) String() string {\n\targs := make([]string, len(n.Args))\n\tfor i, arg := range n.Args {\n\t\targs[i] = fmt.Sprintf(\"%s\", arg)\n\t}\n\n\treturn fmt.Sprintf(\"Call(%s, %s)\", n.Func, strings.Join(args, \", \"))\n}\n\nfunc (n *Call) Type(s Scope) (Type, error) {\n\tf, ok := s.LookupFunc(n.Func)\n\tif !ok {\n\t\treturn TypeInvalid, fmt.Errorf(\"unknown function: %s\", n.Func)\n\t}\n\n\treturn f.ReturnType, nil\n}\n\nfunc (n *Call) GoString() string {\n\treturn fmt.Sprintf(\"*%#v\", *n)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hil/ast/conditional.go",
    "content": "package ast\n\nimport (\n\t\"fmt\"\n)\n\ntype Conditional struct {\n\tCondExpr  Node\n\tTrueExpr  Node\n\tFalseExpr Node\n\tPosx      Pos\n}\n\n// Accept passes the given visitor to the child nodes in this order:\n// CondExpr, TrueExpr, FalseExpr. It then finally passes itself to the visitor.\nfunc (n *Conditional) Accept(v Visitor) Node {\n\tn.CondExpr = n.CondExpr.Accept(v)\n\tn.TrueExpr = n.TrueExpr.Accept(v)\n\tn.FalseExpr = n.FalseExpr.Accept(v)\n\n\treturn v(n)\n}\n\nfunc (n *Conditional) Pos() Pos {\n\treturn n.Posx\n}\n\nfunc (n *Conditional) Type(Scope) (Type, error) {\n\t// This is not actually a useful value; the type checker ignores\n\t// this function when analyzing conditionals, just as with Arithmetic.\n\treturn TypeInt, nil\n}\n\nfunc (n *Conditional) GoString() string {\n\treturn fmt.Sprintf(\"*%#v\", *n)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hil/ast/index.go",
    "content": "package ast\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n)\n\n// Index represents an indexing operation into another data structure\ntype Index struct {\n\tTarget Node\n\tKey    Node\n\tPosx   Pos\n}\n\nfunc (n *Index) Accept(v Visitor) Node {\n\tn.Target = n.Target.Accept(v)\n\tn.Key = n.Key.Accept(v)\n\treturn v(n)\n}\n\nfunc (n *Index) Pos() Pos {\n\treturn n.Posx\n}\n\nfunc (n *Index) String() string {\n\treturn fmt.Sprintf(\"Index(%s, %s)\", n.Target, n.Key)\n}\n\nfunc (n *Index) Type(s Scope) (Type, error) {\n\tvariableAccess, ok := n.Target.(*VariableAccess)\n\tif !ok {\n\t\treturn TypeInvalid, fmt.Errorf(\"target is not a variable\")\n\t}\n\n\tvariable, ok := s.LookupVar(variableAccess.Name)\n\tif !ok {\n\t\treturn TypeInvalid, fmt.Errorf(\"unknown variable accessed: %s\", variableAccess.Name)\n\t}\n\n\tswitch variable.Type {\n\tcase TypeList:\n\t\treturn n.typeList(variable, variableAccess.Name)\n\tcase TypeMap:\n\t\treturn n.typeMap(variable, variableAccess.Name)\n\tdefault:\n\t\treturn TypeInvalid, fmt.Errorf(\"invalid index operation into non-indexable type: %s\", variable.Type)\n\t}\n}\n\nfunc (n *Index) typeList(variable Variable, variableName string) (Type, error) {\n\t// We assume type checking has already determined that this is a list\n\tlist := variable.Value.([]Variable)\n\n\treturn VariableListElementTypesAreHomogenous(variableName, list)\n}\n\nfunc (n *Index) typeMap(variable Variable, variableName string) (Type, error) {\n\t// We assume type checking has already determined that this is a map\n\tvmap := variable.Value.(map[string]Variable)\n\n\treturn VariableMapValueTypesAreHomogenous(variableName, vmap)\n}\n\nfunc reportTypes(typesFound map[Type]struct{}) string {\n\tstringTypes := make([]string, len(typesFound))\n\ti := 0\n\tfor k, _ := range typesFound {\n\t\tstringTypes[0] = k.String()\n\t\ti++\n\t}\n\treturn strings.Join(stringTypes, \", \")\n}\n\nfunc (n *Index) GoString() string {\n\treturn fmt.Sprintf(\"*%#v\", *n)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hil/ast/literal.go",
    "content": "package ast\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n)\n\n// LiteralNode represents a single literal value, such as \"foo\" or\n// 42 or 3.14159. Based on the Type, the Value can be safely cast.\ntype LiteralNode struct {\n\tValue interface{}\n\tTypex Type\n\tPosx  Pos\n}\n\n// NewLiteralNode returns a new literal node representing the given\n// literal Go value, which must correspond to one of the primitive types\n// supported by HIL. Lists and maps cannot currently be constructed via\n// this function.\n//\n// If an inappropriately-typed value is provided, this function will\n// return an error. The main intended use of this function is to produce\n// \"synthetic\" literals from constants in code, where the value type is\n// well known at compile time. To easily store these in global variables,\n// see also MustNewLiteralNode.\nfunc NewLiteralNode(value interface{}, pos Pos) (*LiteralNode, error) {\n\tgoType := reflect.TypeOf(value)\n\tvar hilType Type\n\n\tswitch goType.Kind() {\n\tcase reflect.Bool:\n\t\thilType = TypeBool\n\tcase reflect.Int:\n\t\thilType = TypeInt\n\tcase reflect.Float64:\n\t\thilType = TypeFloat\n\tcase reflect.String:\n\t\thilType = TypeString\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"unsupported literal node type: %T\", value)\n\t}\n\n\treturn &LiteralNode{\n\t\tValue: value,\n\t\tTypex: hilType,\n\t\tPosx:  pos,\n\t}, nil\n}\n\n// MustNewLiteralNode wraps NewLiteralNode and panics if an error is\n// returned, thus allowing valid literal nodes to be easily assigned to\n// global variables.\nfunc MustNewLiteralNode(value interface{}, pos Pos) *LiteralNode {\n\tnode, err := NewLiteralNode(value, pos)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn node\n}\n\nfunc (n *LiteralNode) Accept(v Visitor) Node {\n\treturn v(n)\n}\n\nfunc (n *LiteralNode) Pos() Pos {\n\treturn n.Posx\n}\n\nfunc (n *LiteralNode) GoString() string {\n\treturn fmt.Sprintf(\"*%#v\", *n)\n}\n\nfunc (n *LiteralNode) String() string {\n\treturn fmt.Sprintf(\"Literal(%s, %v)\", n.Typex, n.Value)\n}\n\nfunc (n *LiteralNode) Type(Scope) (Type, error) {\n\treturn n.Typex, nil\n}\n\n// IsUnknown returns true either if the node's value is itself unknown\n// of if it is a collection containing any unknown elements, deeply.\nfunc (n *LiteralNode) IsUnknown() bool {\n\treturn IsUnknown(Variable{\n\t\tType:  n.Typex,\n\t\tValue: n.Value,\n\t})\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hil/ast/output.go",
    "content": "package ast\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n)\n\n// Output represents the root node of all interpolation evaluations. If the\n// output only has one expression which is either a TypeList or TypeMap, the\n// Output can be type-asserted to []interface{} or map[string]interface{}\n// respectively. Otherwise the Output evaluates as a string, and concatenates\n// the evaluation of each expression.\ntype Output struct {\n\tExprs []Node\n\tPosx  Pos\n}\n\nfunc (n *Output) Accept(v Visitor) Node {\n\tfor i, expr := range n.Exprs {\n\t\tn.Exprs[i] = expr.Accept(v)\n\t}\n\n\treturn v(n)\n}\n\nfunc (n *Output) Pos() Pos {\n\treturn n.Posx\n}\n\nfunc (n *Output) GoString() string {\n\treturn fmt.Sprintf(\"*%#v\", *n)\n}\n\nfunc (n *Output) String() string {\n\tvar b bytes.Buffer\n\tfor _, expr := range n.Exprs {\n\t\tb.WriteString(fmt.Sprintf(\"%s\", expr))\n\t}\n\n\treturn b.String()\n}\n\nfunc (n *Output) Type(s Scope) (Type, error) {\n\t// Special case no expressions for backward compatibility\n\tif len(n.Exprs) == 0 {\n\t\treturn TypeString, nil\n\t}\n\n\t// Special case a single expression of types list or map\n\tif len(n.Exprs) == 1 {\n\t\texprType, err := n.Exprs[0].Type(s)\n\t\tif err != nil {\n\t\t\treturn TypeInvalid, err\n\t\t}\n\t\tswitch exprType {\n\t\tcase TypeList:\n\t\t\treturn TypeList, nil\n\t\tcase TypeMap:\n\t\t\treturn TypeMap, nil\n\t\t}\n\t}\n\n\t// Otherwise ensure all our expressions are strings\n\tfor index, expr := range n.Exprs {\n\t\texprType, err := expr.Type(s)\n\t\tif err != nil {\n\t\t\treturn TypeInvalid, err\n\t\t}\n\t\t// We only look for things we know we can't coerce with an implicit conversion func\n\t\tif exprType == TypeList || exprType == TypeMap {\n\t\t\treturn TypeInvalid, fmt.Errorf(\n\t\t\t\t\"multi-expression HIL outputs may only have string inputs: %d is type %s\",\n\t\t\t\tindex, exprType)\n\t\t}\n\t}\n\n\treturn TypeString, nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hil/ast/scope.go",
    "content": "package ast\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n)\n\n// Scope is the interface used to look up variables and functions while\n// evaluating. How these functions/variables are defined are up to the caller.\ntype Scope interface {\n\tLookupFunc(string) (Function, bool)\n\tLookupVar(string) (Variable, bool)\n}\n\n// Variable is a variable value for execution given as input to the engine.\n// It records the value of a variables along with their type.\ntype Variable struct {\n\tValue interface{}\n\tType  Type\n}\n\n// NewVariable creates a new Variable for the given value. This will\n// attempt to infer the correct type. If it can't, an error will be returned.\nfunc NewVariable(v interface{}) (result Variable, err error) {\n\tswitch v := reflect.ValueOf(v); v.Kind() {\n\tcase reflect.String:\n\t\tresult.Type = TypeString\n\tdefault:\n\t\terr = fmt.Errorf(\"Unknown type: %s\", v.Kind())\n\t}\n\n\tresult.Value = v\n\treturn\n}\n\n// String implements Stringer on Variable, displaying the type and value\n// of the Variable.\nfunc (v Variable) String() string {\n\treturn fmt.Sprintf(\"{Variable (%s): %+v}\", v.Type, v.Value)\n}\n\n// Function defines a function that can be executed by the engine.\n// The type checker will validate that the proper types will be called\n// to the callback.\ntype Function struct {\n\t// ArgTypes is the list of types in argument order. These are the\n\t// required arguments.\n\t//\n\t// ReturnType is the type of the returned value. The Callback MUST\n\t// return this type.\n\tArgTypes   []Type\n\tReturnType Type\n\n\t// Variadic, if true, says that this function is variadic, meaning\n\t// it takes a variable number of arguments. In this case, the\n\t// VariadicType must be set.\n\tVariadic     bool\n\tVariadicType Type\n\n\t// Callback is the function called for a function. The argument\n\t// types are guaranteed to match the spec above by the type checker.\n\t// The length of the args is strictly == len(ArgTypes) unless Varidiac\n\t// is true, in which case its >= len(ArgTypes).\n\tCallback func([]interface{}) (interface{}, error)\n}\n\n// BasicScope is a simple scope that looks up variables and functions\n// using a map.\ntype BasicScope struct {\n\tFuncMap map[string]Function\n\tVarMap  map[string]Variable\n}\n\nfunc (s *BasicScope) LookupFunc(n string) (Function, bool) {\n\tif s == nil {\n\t\treturn Function{}, false\n\t}\n\n\tv, ok := s.FuncMap[n]\n\treturn v, ok\n}\n\nfunc (s *BasicScope) LookupVar(n string) (Variable, bool) {\n\tif s == nil {\n\t\treturn Variable{}, false\n\t}\n\n\tv, ok := s.VarMap[n]\n\treturn v, ok\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hil/ast/stack.go",
    "content": "package ast\n\n// Stack is a stack of Node.\ntype Stack struct {\n\tstack []Node\n}\n\nfunc (s *Stack) Len() int {\n\treturn len(s.stack)\n}\n\nfunc (s *Stack) Push(n Node) {\n\ts.stack = append(s.stack, n)\n}\n\nfunc (s *Stack) Pop() Node {\n\tx := s.stack[len(s.stack)-1]\n\ts.stack[len(s.stack)-1] = nil\n\ts.stack = s.stack[:len(s.stack)-1]\n\treturn x\n}\n\nfunc (s *Stack) Reset() {\n\ts.stack = nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hil/ast/type_string.go",
    "content": "// Code generated by \"stringer -type=Type\"; DO NOT EDIT\n\npackage ast\n\nimport \"fmt\"\n\nconst (\n\t_Type_name_0 = \"TypeInvalid\"\n\t_Type_name_1 = \"TypeAny\"\n\t_Type_name_2 = \"TypeBool\"\n\t_Type_name_3 = \"TypeString\"\n\t_Type_name_4 = \"TypeInt\"\n\t_Type_name_5 = \"TypeFloat\"\n\t_Type_name_6 = \"TypeList\"\n\t_Type_name_7 = \"TypeMap\"\n\t_Type_name_8 = \"TypeUnknown\"\n)\n\nvar (\n\t_Type_index_0 = [...]uint8{0, 11}\n\t_Type_index_1 = [...]uint8{0, 7}\n\t_Type_index_2 = [...]uint8{0, 8}\n\t_Type_index_3 = [...]uint8{0, 10}\n\t_Type_index_4 = [...]uint8{0, 7}\n\t_Type_index_5 = [...]uint8{0, 9}\n\t_Type_index_6 = [...]uint8{0, 8}\n\t_Type_index_7 = [...]uint8{0, 7}\n\t_Type_index_8 = [...]uint8{0, 11}\n)\n\nfunc (i Type) String() string {\n\tswitch {\n\tcase i == 0:\n\t\treturn _Type_name_0\n\tcase i == 2:\n\t\treturn _Type_name_1\n\tcase i == 4:\n\t\treturn _Type_name_2\n\tcase i == 8:\n\t\treturn _Type_name_3\n\tcase i == 16:\n\t\treturn _Type_name_4\n\tcase i == 32:\n\t\treturn _Type_name_5\n\tcase i == 64:\n\t\treturn _Type_name_6\n\tcase i == 128:\n\t\treturn _Type_name_7\n\tcase i == 256:\n\t\treturn _Type_name_8\n\tdefault:\n\t\treturn fmt.Sprintf(\"Type(%d)\", i)\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hil/ast/unknown.go",
    "content": "package ast\n\n// IsUnknown reports whether a variable is unknown or contains any value\n// that is unknown. This will recurse into lists and maps and so on.\nfunc IsUnknown(v Variable) bool {\n\t// If it is unknown itself, return true\n\tif v.Type == TypeUnknown {\n\t\treturn true\n\t}\n\n\t// If it is a container type, check the values\n\tswitch v.Type {\n\tcase TypeList:\n\t\tfor _, el := range v.Value.([]Variable) {\n\t\t\tif IsUnknown(el) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\tcase TypeMap:\n\t\tfor _, el := range v.Value.(map[string]Variable) {\n\t\t\tif IsUnknown(el) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\tdefault:\n\t}\n\n\t// Not a container type or survive the above checks\n\treturn false\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hil/ast/variable_access.go",
    "content": "package ast\n\nimport (\n\t\"fmt\"\n)\n\n// VariableAccess represents a variable access.\ntype VariableAccess struct {\n\tName string\n\tPosx Pos\n}\n\nfunc (n *VariableAccess) Accept(v Visitor) Node {\n\treturn v(n)\n}\n\nfunc (n *VariableAccess) Pos() Pos {\n\treturn n.Posx\n}\n\nfunc (n *VariableAccess) GoString() string {\n\treturn fmt.Sprintf(\"*%#v\", *n)\n}\n\nfunc (n *VariableAccess) String() string {\n\treturn fmt.Sprintf(\"Variable(%s)\", n.Name)\n}\n\nfunc (n *VariableAccess) Type(s Scope) (Type, error) {\n\tv, ok := s.LookupVar(n.Name)\n\tif !ok {\n\t\treturn TypeInvalid, fmt.Errorf(\"unknown variable: %s\", n.Name)\n\t}\n\n\treturn v.Type, nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hil/ast/variables_helper.go",
    "content": "package ast\n\nimport \"fmt\"\n\nfunc VariableListElementTypesAreHomogenous(variableName string, list []Variable) (Type, error) {\n\tif len(list) == 0 {\n\t\treturn TypeInvalid, fmt.Errorf(\"list %q does not have any elements so cannot determine type.\", variableName)\n\t}\n\n\telemType := TypeUnknown\n\tfor _, v := range list {\n\t\tif v.Type == TypeUnknown {\n\t\t\tcontinue\n\t\t}\n\n\t\tif elemType == TypeUnknown {\n\t\t\telemType = v.Type\n\t\t\tcontinue\n\t\t}\n\n\t\tif v.Type != elemType {\n\t\t\treturn TypeInvalid, fmt.Errorf(\n\t\t\t\t\"list %q does not have homogenous types. found %s and then %s\",\n\t\t\t\tvariableName,\n\t\t\t\telemType, v.Type,\n\t\t\t)\n\t\t}\n\n\t\telemType = v.Type\n\t}\n\n\treturn elemType, nil\n}\n\nfunc VariableMapValueTypesAreHomogenous(variableName string, vmap map[string]Variable) (Type, error) {\n\tif len(vmap) == 0 {\n\t\treturn TypeInvalid, fmt.Errorf(\"map %q does not have any elements so cannot determine type.\", variableName)\n\t}\n\n\telemType := TypeUnknown\n\tfor _, v := range vmap {\n\t\tif v.Type == TypeUnknown {\n\t\t\tcontinue\n\t\t}\n\n\t\tif elemType == TypeUnknown {\n\t\t\telemType = v.Type\n\t\t\tcontinue\n\t\t}\n\n\t\tif v.Type != elemType {\n\t\t\treturn TypeInvalid, fmt.Errorf(\n\t\t\t\t\"map %q does not have homogenous types. found %s and then %s\",\n\t\t\t\tvariableName,\n\t\t\t\telemType, v.Type,\n\t\t\t)\n\t\t}\n\n\t\telemType = v.Type\n\t}\n\n\treturn elemType, nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hil/builtins.go",
    "content": "package hil\n\nimport (\n\t\"errors\"\n\t\"strconv\"\n\n\t\"github.com/hashicorp/hil/ast\"\n)\n\n// NOTE: All builtins are tested in engine_test.go\n\nfunc registerBuiltins(scope *ast.BasicScope) *ast.BasicScope {\n\tif scope == nil {\n\t\tscope = new(ast.BasicScope)\n\t}\n\tif scope.FuncMap == nil {\n\t\tscope.FuncMap = make(map[string]ast.Function)\n\t}\n\n\t// Implicit conversions\n\tscope.FuncMap[\"__builtin_BoolToString\"] = builtinBoolToString()\n\tscope.FuncMap[\"__builtin_FloatToInt\"] = builtinFloatToInt()\n\tscope.FuncMap[\"__builtin_FloatToString\"] = builtinFloatToString()\n\tscope.FuncMap[\"__builtin_IntToFloat\"] = builtinIntToFloat()\n\tscope.FuncMap[\"__builtin_IntToString\"] = builtinIntToString()\n\tscope.FuncMap[\"__builtin_StringToInt\"] = builtinStringToInt()\n\tscope.FuncMap[\"__builtin_StringToFloat\"] = builtinStringToFloat()\n\tscope.FuncMap[\"__builtin_StringToBool\"] = builtinStringToBool()\n\n\t// Math operations\n\tscope.FuncMap[\"__builtin_IntMath\"] = builtinIntMath()\n\tscope.FuncMap[\"__builtin_FloatMath\"] = builtinFloatMath()\n\tscope.FuncMap[\"__builtin_BoolCompare\"] = builtinBoolCompare()\n\tscope.FuncMap[\"__builtin_FloatCompare\"] = builtinFloatCompare()\n\tscope.FuncMap[\"__builtin_IntCompare\"] = builtinIntCompare()\n\tscope.FuncMap[\"__builtin_StringCompare\"] = builtinStringCompare()\n\tscope.FuncMap[\"__builtin_Logical\"] = builtinLogical()\n\treturn scope\n}\n\nfunc builtinFloatMath() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:     []ast.Type{ast.TypeInt},\n\t\tVariadic:     true,\n\t\tVariadicType: ast.TypeFloat,\n\t\tReturnType:   ast.TypeFloat,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\top := args[0].(ast.ArithmeticOp)\n\t\t\tresult := args[1].(float64)\n\t\t\tfor _, raw := range args[2:] {\n\t\t\t\targ := raw.(float64)\n\t\t\t\tswitch op {\n\t\t\t\tcase ast.ArithmeticOpAdd:\n\t\t\t\t\tresult += arg\n\t\t\t\tcase ast.ArithmeticOpSub:\n\t\t\t\t\tresult -= arg\n\t\t\t\tcase ast.ArithmeticOpMul:\n\t\t\t\t\tresult *= arg\n\t\t\t\tcase ast.ArithmeticOpDiv:\n\t\t\t\t\tresult /= arg\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn result, nil\n\t\t},\n\t}\n}\n\nfunc builtinIntMath() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:     []ast.Type{ast.TypeInt},\n\t\tVariadic:     true,\n\t\tVariadicType: ast.TypeInt,\n\t\tReturnType:   ast.TypeInt,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\top := args[0].(ast.ArithmeticOp)\n\t\t\tresult := args[1].(int)\n\t\t\tfor _, raw := range args[2:] {\n\t\t\t\targ := raw.(int)\n\t\t\t\tswitch op {\n\t\t\t\tcase ast.ArithmeticOpAdd:\n\t\t\t\t\tresult += arg\n\t\t\t\tcase ast.ArithmeticOpSub:\n\t\t\t\t\tresult -= arg\n\t\t\t\tcase ast.ArithmeticOpMul:\n\t\t\t\t\tresult *= arg\n\t\t\t\tcase ast.ArithmeticOpDiv:\n\t\t\t\t\tif arg == 0 {\n\t\t\t\t\t\treturn nil, errors.New(\"divide by zero\")\n\t\t\t\t\t}\n\n\t\t\t\t\tresult /= arg\n\t\t\t\tcase ast.ArithmeticOpMod:\n\t\t\t\t\tif arg == 0 {\n\t\t\t\t\t\treturn nil, errors.New(\"divide by zero\")\n\t\t\t\t\t}\n\n\t\t\t\t\tresult = result % arg\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn result, nil\n\t\t},\n\t}\n}\n\nfunc builtinBoolCompare() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:   []ast.Type{ast.TypeInt, ast.TypeBool, ast.TypeBool},\n\t\tVariadic:   false,\n\t\tReturnType: ast.TypeBool,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\top := args[0].(ast.ArithmeticOp)\n\t\t\tlhs := args[1].(bool)\n\t\t\trhs := args[2].(bool)\n\n\t\t\tswitch op {\n\t\t\tcase ast.ArithmeticOpEqual:\n\t\t\t\treturn lhs == rhs, nil\n\t\t\tcase ast.ArithmeticOpNotEqual:\n\t\t\t\treturn lhs != rhs, nil\n\t\t\tdefault:\n\t\t\t\treturn nil, errors.New(\"invalid comparison operation\")\n\t\t\t}\n\t\t},\n\t}\n}\n\nfunc builtinFloatCompare() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:   []ast.Type{ast.TypeInt, ast.TypeFloat, ast.TypeFloat},\n\t\tVariadic:   false,\n\t\tReturnType: ast.TypeBool,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\top := args[0].(ast.ArithmeticOp)\n\t\t\tlhs := args[1].(float64)\n\t\t\trhs := args[2].(float64)\n\n\t\t\tswitch op {\n\t\t\tcase ast.ArithmeticOpEqual:\n\t\t\t\treturn lhs == rhs, nil\n\t\t\tcase ast.ArithmeticOpNotEqual:\n\t\t\t\treturn lhs != rhs, nil\n\t\t\tcase ast.ArithmeticOpLessThan:\n\t\t\t\treturn lhs < rhs, nil\n\t\t\tcase ast.ArithmeticOpLessThanOrEqual:\n\t\t\t\treturn lhs <= rhs, nil\n\t\t\tcase ast.ArithmeticOpGreaterThan:\n\t\t\t\treturn lhs > rhs, nil\n\t\t\tcase ast.ArithmeticOpGreaterThanOrEqual:\n\t\t\t\treturn lhs >= rhs, nil\n\t\t\tdefault:\n\t\t\t\treturn nil, errors.New(\"invalid comparison operation\")\n\t\t\t}\n\t\t},\n\t}\n}\n\nfunc builtinIntCompare() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:   []ast.Type{ast.TypeInt, ast.TypeInt, ast.TypeInt},\n\t\tVariadic:   false,\n\t\tReturnType: ast.TypeBool,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\top := args[0].(ast.ArithmeticOp)\n\t\t\tlhs := args[1].(int)\n\t\t\trhs := args[2].(int)\n\n\t\t\tswitch op {\n\t\t\tcase ast.ArithmeticOpEqual:\n\t\t\t\treturn lhs == rhs, nil\n\t\t\tcase ast.ArithmeticOpNotEqual:\n\t\t\t\treturn lhs != rhs, nil\n\t\t\tcase ast.ArithmeticOpLessThan:\n\t\t\t\treturn lhs < rhs, nil\n\t\t\tcase ast.ArithmeticOpLessThanOrEqual:\n\t\t\t\treturn lhs <= rhs, nil\n\t\t\tcase ast.ArithmeticOpGreaterThan:\n\t\t\t\treturn lhs > rhs, nil\n\t\t\tcase ast.ArithmeticOpGreaterThanOrEqual:\n\t\t\t\treturn lhs >= rhs, nil\n\t\t\tdefault:\n\t\t\t\treturn nil, errors.New(\"invalid comparison operation\")\n\t\t\t}\n\t\t},\n\t}\n}\n\nfunc builtinStringCompare() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:   []ast.Type{ast.TypeInt, ast.TypeString, ast.TypeString},\n\t\tVariadic:   false,\n\t\tReturnType: ast.TypeBool,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\top := args[0].(ast.ArithmeticOp)\n\t\t\tlhs := args[1].(string)\n\t\t\trhs := args[2].(string)\n\n\t\t\tswitch op {\n\t\t\tcase ast.ArithmeticOpEqual:\n\t\t\t\treturn lhs == rhs, nil\n\t\t\tcase ast.ArithmeticOpNotEqual:\n\t\t\t\treturn lhs != rhs, nil\n\t\t\tdefault:\n\t\t\t\treturn nil, errors.New(\"invalid comparison operation\")\n\t\t\t}\n\t\t},\n\t}\n}\n\nfunc builtinLogical() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:     []ast.Type{ast.TypeInt},\n\t\tVariadic:     true,\n\t\tVariadicType: ast.TypeBool,\n\t\tReturnType:   ast.TypeBool,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\top := args[0].(ast.ArithmeticOp)\n\t\t\tresult := args[1].(bool)\n\t\t\tfor _, raw := range args[2:] {\n\t\t\t\targ := raw.(bool)\n\t\t\t\tswitch op {\n\t\t\t\tcase ast.ArithmeticOpLogicalOr:\n\t\t\t\t\tresult = result || arg\n\t\t\t\tcase ast.ArithmeticOpLogicalAnd:\n\t\t\t\t\tresult = result && arg\n\t\t\t\tdefault:\n\t\t\t\t\treturn nil, errors.New(\"invalid logical operator\")\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn result, nil\n\t\t},\n\t}\n}\n\nfunc builtinFloatToInt() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:   []ast.Type{ast.TypeFloat},\n\t\tReturnType: ast.TypeInt,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\treturn int(args[0].(float64)), nil\n\t\t},\n\t}\n}\n\nfunc builtinFloatToString() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:   []ast.Type{ast.TypeFloat},\n\t\tReturnType: ast.TypeString,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\treturn strconv.FormatFloat(\n\t\t\t\targs[0].(float64), 'g', -1, 64), nil\n\t\t},\n\t}\n}\n\nfunc builtinIntToFloat() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:   []ast.Type{ast.TypeInt},\n\t\tReturnType: ast.TypeFloat,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\treturn float64(args[0].(int)), nil\n\t\t},\n\t}\n}\n\nfunc builtinIntToString() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:   []ast.Type{ast.TypeInt},\n\t\tReturnType: ast.TypeString,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\treturn strconv.FormatInt(int64(args[0].(int)), 10), nil\n\t\t},\n\t}\n}\n\nfunc builtinStringToInt() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:   []ast.Type{ast.TypeInt},\n\t\tReturnType: ast.TypeString,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\tv, err := strconv.ParseInt(args[0].(string), 0, 0)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\n\t\t\treturn int(v), nil\n\t\t},\n\t}\n}\n\nfunc builtinStringToFloat() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:   []ast.Type{ast.TypeString},\n\t\tReturnType: ast.TypeFloat,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\tv, err := strconv.ParseFloat(args[0].(string), 64)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\n\t\t\treturn v, nil\n\t\t},\n\t}\n}\n\nfunc builtinBoolToString() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:   []ast.Type{ast.TypeBool},\n\t\tReturnType: ast.TypeString,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\treturn strconv.FormatBool(args[0].(bool)), nil\n\t\t},\n\t}\n}\n\nfunc builtinStringToBool() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:   []ast.Type{ast.TypeString},\n\t\tReturnType: ast.TypeBool,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\tv, err := strconv.ParseBool(args[0].(string))\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\n\t\t\treturn v, nil\n\t\t},\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hil/check_identifier.go",
    "content": "package hil\n\nimport (\n\t\"fmt\"\n\t\"sync\"\n\n\t\"github.com/hashicorp/hil/ast\"\n)\n\n// IdentifierCheck is a SemanticCheck that checks that all identifiers\n// resolve properly and that the right number of arguments are passed\n// to functions.\ntype IdentifierCheck struct {\n\tScope ast.Scope\n\n\terr  error\n\tlock sync.Mutex\n}\n\nfunc (c *IdentifierCheck) Visit(root ast.Node) error {\n\tc.lock.Lock()\n\tdefer c.lock.Unlock()\n\tdefer c.reset()\n\troot.Accept(c.visit)\n\treturn c.err\n}\n\nfunc (c *IdentifierCheck) visit(raw ast.Node) ast.Node {\n\tif c.err != nil {\n\t\treturn raw\n\t}\n\n\tswitch n := raw.(type) {\n\tcase *ast.Call:\n\t\tc.visitCall(n)\n\tcase *ast.VariableAccess:\n\t\tc.visitVariableAccess(n)\n\tcase *ast.Output:\n\t\t// Ignore\n\tcase *ast.LiteralNode:\n\t\t// Ignore\n\tdefault:\n\t\t// Ignore\n\t}\n\n\t// We never do replacement with this visitor\n\treturn raw\n}\n\nfunc (c *IdentifierCheck) visitCall(n *ast.Call) {\n\t// Look up the function in the map\n\tfunction, ok := c.Scope.LookupFunc(n.Func)\n\tif !ok {\n\t\tc.createErr(n, fmt.Sprintf(\"unknown function called: %s\", n.Func))\n\t\treturn\n\t}\n\n\t// Break up the args into what is variadic and what is required\n\targs := n.Args\n\tif function.Variadic && len(args) > len(function.ArgTypes) {\n\t\targs = n.Args[:len(function.ArgTypes)]\n\t}\n\n\t// Verify the number of arguments\n\tif len(args) != len(function.ArgTypes) {\n\t\tc.createErr(n, fmt.Sprintf(\n\t\t\t\"%s: expected %d arguments, got %d\",\n\t\t\tn.Func, len(function.ArgTypes), len(n.Args)))\n\t\treturn\n\t}\n}\n\nfunc (c *IdentifierCheck) visitVariableAccess(n *ast.VariableAccess) {\n\t// Look up the variable in the map\n\tif _, ok := c.Scope.LookupVar(n.Name); !ok {\n\t\tc.createErr(n, fmt.Sprintf(\n\t\t\t\"unknown variable accessed: %s\", n.Name))\n\t\treturn\n\t}\n}\n\nfunc (c *IdentifierCheck) createErr(n ast.Node, str string) {\n\tc.err = fmt.Errorf(\"%s: %s\", n.Pos(), str)\n}\n\nfunc (c *IdentifierCheck) reset() {\n\tc.err = nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hil/check_types.go",
    "content": "package hil\n\nimport (\n\t\"fmt\"\n\t\"sync\"\n\n\t\"github.com/hashicorp/hil/ast\"\n)\n\n// TypeCheck implements ast.Visitor for type checking an AST tree.\n// It requires some configuration to look up the type of nodes.\n//\n// It also optionally will not type error and will insert an implicit\n// type conversions for specific types if specified by the Implicit\n// field. Note that this is kind of organizationally weird to put into\n// this structure but we'd rather do that than duplicate the type checking\n// logic multiple times.\ntype TypeCheck struct {\n\tScope ast.Scope\n\n\t// Implicit is a map of implicit type conversions that we can do,\n\t// and that shouldn't error. The key of the first map is the from type,\n\t// the key of the second map is the to type, and the final string\n\t// value is the function to call (which must be registered in the Scope).\n\tImplicit map[ast.Type]map[ast.Type]string\n\n\t// Stack of types. This shouldn't be used directly except by implementations\n\t// of TypeCheckNode.\n\tStack []ast.Type\n\n\terr  error\n\tlock sync.Mutex\n}\n\n// TypeCheckNode is the interface that must be implemented by any\n// ast.Node that wants to support type-checking. If the type checker\n// encounters a node that doesn't implement this, it will error.\ntype TypeCheckNode interface {\n\tTypeCheck(*TypeCheck) (ast.Node, error)\n}\n\nfunc (v *TypeCheck) Visit(root ast.Node) error {\n\tv.lock.Lock()\n\tdefer v.lock.Unlock()\n\tdefer v.reset()\n\troot.Accept(v.visit)\n\n\t// If the resulting type is unknown, then just let the whole thing go.\n\tif v.err == errExitUnknown {\n\t\tv.err = nil\n\t}\n\n\treturn v.err\n}\n\nfunc (v *TypeCheck) visit(raw ast.Node) ast.Node {\n\tif v.err != nil {\n\t\treturn raw\n\t}\n\n\tvar result ast.Node\n\tvar err error\n\tswitch n := raw.(type) {\n\tcase *ast.Arithmetic:\n\t\ttc := &typeCheckArithmetic{n}\n\t\tresult, err = tc.TypeCheck(v)\n\tcase *ast.Call:\n\t\ttc := &typeCheckCall{n}\n\t\tresult, err = tc.TypeCheck(v)\n\tcase *ast.Conditional:\n\t\ttc := &typeCheckConditional{n}\n\t\tresult, err = tc.TypeCheck(v)\n\tcase *ast.Index:\n\t\ttc := &typeCheckIndex{n}\n\t\tresult, err = tc.TypeCheck(v)\n\tcase *ast.Output:\n\t\ttc := &typeCheckOutput{n}\n\t\tresult, err = tc.TypeCheck(v)\n\tcase *ast.LiteralNode:\n\t\ttc := &typeCheckLiteral{n}\n\t\tresult, err = tc.TypeCheck(v)\n\tcase *ast.VariableAccess:\n\t\ttc := &typeCheckVariableAccess{n}\n\t\tresult, err = tc.TypeCheck(v)\n\tdefault:\n\t\ttc, ok := raw.(TypeCheckNode)\n\t\tif !ok {\n\t\t\terr = fmt.Errorf(\"unknown node for type check: %#v\", raw)\n\t\t\tbreak\n\t\t}\n\n\t\tresult, err = tc.TypeCheck(v)\n\t}\n\n\tif err != nil {\n\t\tpos := raw.Pos()\n\t\tv.err = fmt.Errorf(\"At column %d, line %d: %s\",\n\t\t\tpos.Column, pos.Line, err)\n\t}\n\n\treturn result\n}\n\ntype typeCheckArithmetic struct {\n\tn *ast.Arithmetic\n}\n\nfunc (tc *typeCheckArithmetic) TypeCheck(v *TypeCheck) (ast.Node, error) {\n\t// The arguments are on the stack in reverse order, so pop them off.\n\texprs := make([]ast.Type, len(tc.n.Exprs))\n\tfor i, _ := range tc.n.Exprs {\n\t\texprs[len(tc.n.Exprs)-1-i] = v.StackPop()\n\t}\n\n\t// If any operand is unknown then our result is automatically unknown\n\tfor _, ty := range exprs {\n\t\tif ty == ast.TypeUnknown {\n\t\t\tv.StackPush(ast.TypeUnknown)\n\t\t\treturn tc.n, nil\n\t\t}\n\t}\n\n\tswitch tc.n.Op {\n\tcase ast.ArithmeticOpLogicalAnd, ast.ArithmeticOpLogicalOr:\n\t\treturn tc.checkLogical(v, exprs)\n\tcase ast.ArithmeticOpEqual, ast.ArithmeticOpNotEqual,\n\t\tast.ArithmeticOpLessThan, ast.ArithmeticOpGreaterThan,\n\t\tast.ArithmeticOpGreaterThanOrEqual, ast.ArithmeticOpLessThanOrEqual:\n\t\treturn tc.checkComparison(v, exprs)\n\tdefault:\n\t\treturn tc.checkNumeric(v, exprs)\n\t}\n\n}\n\nfunc (tc *typeCheckArithmetic) checkNumeric(v *TypeCheck, exprs []ast.Type) (ast.Node, error) {\n\t// Determine the resulting type we want. We do this by going over\n\t// every expression until we find one with a type we recognize.\n\t// We do this because the first expr might be a string (\"var.foo\")\n\t// and we need to know what to implicit to.\n\tmathFunc := \"__builtin_IntMath\"\n\tmathType := ast.TypeInt\n\tfor _, v := range exprs {\n\t\t// We assume int math but if we find ANY float, the entire\n\t\t// expression turns into floating point math.\n\t\tif v == ast.TypeFloat {\n\t\t\tmathFunc = \"__builtin_FloatMath\"\n\t\t\tmathType = v\n\t\t\tbreak\n\t\t}\n\t}\n\n\t// Verify the args\n\tfor i, arg := range exprs {\n\t\tif arg != mathType {\n\t\t\tcn := v.ImplicitConversion(exprs[i], mathType, tc.n.Exprs[i])\n\t\t\tif cn != nil {\n\t\t\t\ttc.n.Exprs[i] = cn\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\"operand %d should be %s, got %s\",\n\t\t\t\ti+1, mathType, arg)\n\t\t}\n\t}\n\n\t// Modulo doesn't work for floats\n\tif mathType == ast.TypeFloat && tc.n.Op == ast.ArithmeticOpMod {\n\t\treturn nil, fmt.Errorf(\"modulo cannot be used with floats\")\n\t}\n\n\t// Return type\n\tv.StackPush(mathType)\n\n\t// Replace our node with a call to the proper function. This isn't\n\t// type checked but we already verified types.\n\targs := make([]ast.Node, len(tc.n.Exprs)+1)\n\targs[0] = &ast.LiteralNode{\n\t\tValue: tc.n.Op,\n\t\tTypex: ast.TypeInt,\n\t\tPosx:  tc.n.Pos(),\n\t}\n\tcopy(args[1:], tc.n.Exprs)\n\treturn &ast.Call{\n\t\tFunc: mathFunc,\n\t\tArgs: args,\n\t\tPosx: tc.n.Pos(),\n\t}, nil\n}\n\nfunc (tc *typeCheckArithmetic) checkComparison(v *TypeCheck, exprs []ast.Type) (ast.Node, error) {\n\tif len(exprs) != 2 {\n\t\t// This should never happen, because the parser never produces\n\t\t// nodes that violate this.\n\t\treturn nil, fmt.Errorf(\n\t\t\t\"comparison operators must have exactly two operands\",\n\t\t)\n\t}\n\n\t// The first operand always dictates the type for a comparison.\n\tcompareFunc := \"\"\n\tcompareType := exprs[0]\n\tswitch compareType {\n\tcase ast.TypeBool:\n\t\tcompareFunc = \"__builtin_BoolCompare\"\n\tcase ast.TypeFloat:\n\t\tcompareFunc = \"__builtin_FloatCompare\"\n\tcase ast.TypeInt:\n\t\tcompareFunc = \"__builtin_IntCompare\"\n\tcase ast.TypeString:\n\t\tcompareFunc = \"__builtin_StringCompare\"\n\tdefault:\n\t\treturn nil, fmt.Errorf(\n\t\t\t\"comparison operators apply only to bool, float, int, and string\",\n\t\t)\n\t}\n\n\t// For non-equality comparisons, we will do implicit conversions to\n\t// integer types if possible. In this case, we need to go through and\n\t// determine the type of comparison we're doing to enable the implicit\n\t// conversion.\n\tif tc.n.Op != ast.ArithmeticOpEqual && tc.n.Op != ast.ArithmeticOpNotEqual {\n\t\tcompareFunc = \"__builtin_IntCompare\"\n\t\tcompareType = ast.TypeInt\n\t\tfor _, expr := range exprs {\n\t\t\tif expr == ast.TypeFloat {\n\t\t\t\tcompareFunc = \"__builtin_FloatCompare\"\n\t\t\t\tcompareType = ast.TypeFloat\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\n\t// Verify (and possibly, convert) the args\n\tfor i, arg := range exprs {\n\t\tif arg != compareType {\n\t\t\tcn := v.ImplicitConversion(exprs[i], compareType, tc.n.Exprs[i])\n\t\t\tif cn != nil {\n\t\t\t\ttc.n.Exprs[i] = cn\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\"operand %d should be %s, got %s\",\n\t\t\t\ti+1, compareType, arg,\n\t\t\t)\n\t\t}\n\t}\n\n\t// Only ints and floats can have the <, >, <= and >= operators applied\n\tswitch tc.n.Op {\n\tcase ast.ArithmeticOpEqual, ast.ArithmeticOpNotEqual:\n\t\t// anything goes\n\tdefault:\n\t\tswitch compareType {\n\t\tcase ast.TypeFloat, ast.TypeInt:\n\t\t\t// fine\n\t\tdefault:\n\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\"<, >, <= and >= may apply only to int and float values\",\n\t\t\t)\n\t\t}\n\t}\n\n\t// Comparison operators always return bool\n\tv.StackPush(ast.TypeBool)\n\n\t// Replace our node with a call to the proper function. This isn't\n\t// type checked but we already verified types.\n\targs := make([]ast.Node, len(tc.n.Exprs)+1)\n\targs[0] = &ast.LiteralNode{\n\t\tValue: tc.n.Op,\n\t\tTypex: ast.TypeInt,\n\t\tPosx:  tc.n.Pos(),\n\t}\n\tcopy(args[1:], tc.n.Exprs)\n\treturn &ast.Call{\n\t\tFunc: compareFunc,\n\t\tArgs: args,\n\t\tPosx: tc.n.Pos(),\n\t}, nil\n}\n\nfunc (tc *typeCheckArithmetic) checkLogical(v *TypeCheck, exprs []ast.Type) (ast.Node, error) {\n\tfor i, t := range exprs {\n\t\tif t != ast.TypeBool {\n\t\t\tcn := v.ImplicitConversion(t, ast.TypeBool, tc.n.Exprs[i])\n\t\t\tif cn == nil {\n\t\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\t\"logical operators require boolean operands, not %s\",\n\t\t\t\t\tt,\n\t\t\t\t)\n\t\t\t}\n\t\t\ttc.n.Exprs[i] = cn\n\t\t}\n\t}\n\n\t// Return type is always boolean\n\tv.StackPush(ast.TypeBool)\n\n\t// Arithmetic nodes are replaced with a call to a built-in function\n\targs := make([]ast.Node, len(tc.n.Exprs)+1)\n\targs[0] = &ast.LiteralNode{\n\t\tValue: tc.n.Op,\n\t\tTypex: ast.TypeInt,\n\t\tPosx:  tc.n.Pos(),\n\t}\n\tcopy(args[1:], tc.n.Exprs)\n\treturn &ast.Call{\n\t\tFunc: \"__builtin_Logical\",\n\t\tArgs: args,\n\t\tPosx: tc.n.Pos(),\n\t}, nil\n}\n\ntype typeCheckCall struct {\n\tn *ast.Call\n}\n\nfunc (tc *typeCheckCall) TypeCheck(v *TypeCheck) (ast.Node, error) {\n\t// Look up the function in the map\n\tfunction, ok := v.Scope.LookupFunc(tc.n.Func)\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"unknown function called: %s\", tc.n.Func)\n\t}\n\n\t// The arguments are on the stack in reverse order, so pop them off.\n\targs := make([]ast.Type, len(tc.n.Args))\n\tfor i, _ := range tc.n.Args {\n\t\targs[len(tc.n.Args)-1-i] = v.StackPop()\n\t}\n\n\t// Verify the args\n\tfor i, expected := range function.ArgTypes {\n\t\tif expected == ast.TypeAny {\n\t\t\tcontinue\n\t\t}\n\n\t\tif args[i] == ast.TypeUnknown {\n\t\t\tv.StackPush(ast.TypeUnknown)\n\t\t\treturn tc.n, nil\n\t\t}\n\n\t\tif args[i] != expected {\n\t\t\tcn := v.ImplicitConversion(args[i], expected, tc.n.Args[i])\n\t\t\tif cn != nil {\n\t\t\t\ttc.n.Args[i] = cn\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\"%s: argument %d should be %s, got %s\",\n\t\t\t\ttc.n.Func, i+1, expected.Printable(), args[i].Printable())\n\t\t}\n\t}\n\n\t// If we're variadic, then verify the types there\n\tif function.Variadic && function.VariadicType != ast.TypeAny {\n\t\targs = args[len(function.ArgTypes):]\n\t\tfor i, t := range args {\n\t\t\tif t == ast.TypeUnknown {\n\t\t\t\tv.StackPush(ast.TypeUnknown)\n\t\t\t\treturn tc.n, nil\n\t\t\t}\n\n\t\t\tif t != function.VariadicType {\n\t\t\t\trealI := i + len(function.ArgTypes)\n\t\t\t\tcn := v.ImplicitConversion(\n\t\t\t\t\tt, function.VariadicType, tc.n.Args[realI])\n\t\t\t\tif cn != nil {\n\t\t\t\t\ttc.n.Args[realI] = cn\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\t\"%s: argument %d should be %s, got %s\",\n\t\t\t\t\ttc.n.Func, realI,\n\t\t\t\t\tfunction.VariadicType.Printable(), t.Printable())\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return type\n\tv.StackPush(function.ReturnType)\n\n\treturn tc.n, nil\n}\n\ntype typeCheckConditional struct {\n\tn *ast.Conditional\n}\n\nfunc (tc *typeCheckConditional) TypeCheck(v *TypeCheck) (ast.Node, error) {\n\t// On the stack we have the types of the condition, true and false\n\t// expressions, but they are in reverse order.\n\tfalseType := v.StackPop()\n\ttrueType := v.StackPop()\n\tcondType := v.StackPop()\n\n\tif condType == ast.TypeUnknown {\n\t\tv.StackPush(ast.TypeUnknown)\n\t\treturn tc.n, nil\n\t}\n\n\tif condType != ast.TypeBool {\n\t\tcn := v.ImplicitConversion(condType, ast.TypeBool, tc.n.CondExpr)\n\t\tif cn == nil {\n\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\"condition must be type bool, not %s\", condType.Printable(),\n\t\t\t)\n\t\t}\n\t\ttc.n.CondExpr = cn\n\t}\n\n\t// The types of the true and false expression must match\n\tif trueType != falseType && trueType != ast.TypeUnknown && falseType != ast.TypeUnknown {\n\n\t\t// Since passing around stringified versions of other types is\n\t\t// common, we pragmatically allow the false expression to dictate\n\t\t// the result type when the true expression is a string.\n\t\tif trueType == ast.TypeString {\n\t\t\tcn := v.ImplicitConversion(trueType, falseType, tc.n.TrueExpr)\n\t\t\tif cn == nil {\n\t\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\t\"true and false expression types must match; have %s and %s\",\n\t\t\t\t\ttrueType.Printable(), falseType.Printable(),\n\t\t\t\t)\n\t\t\t}\n\t\t\ttc.n.TrueExpr = cn\n\t\t\ttrueType = falseType\n\t\t} else {\n\t\t\tcn := v.ImplicitConversion(falseType, trueType, tc.n.FalseExpr)\n\t\t\tif cn == nil {\n\t\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\t\"true and false expression types must match; have %s and %s\",\n\t\t\t\t\ttrueType.Printable(), falseType.Printable(),\n\t\t\t\t)\n\t\t\t}\n\t\t\ttc.n.FalseExpr = cn\n\t\t\tfalseType = trueType\n\t\t}\n\t}\n\n\t// Currently list and map types cannot be used, because we cannot\n\t// generally assert that their element types are consistent.\n\t// Such support might be added later, either by improving the type\n\t// system or restricting usage to only variable and literal expressions,\n\t// but for now this is simply prohibited because it doesn't seem to\n\t// be a common enough case to be worth the complexity.\n\tswitch trueType {\n\tcase ast.TypeList:\n\t\treturn nil, fmt.Errorf(\n\t\t\t\"conditional operator cannot be used with list values\",\n\t\t)\n\tcase ast.TypeMap:\n\t\treturn nil, fmt.Errorf(\n\t\t\t\"conditional operator cannot be used with map values\",\n\t\t)\n\t}\n\n\t// Result type (guaranteed to also match falseType due to the above)\n\tif trueType == ast.TypeUnknown {\n\t\t// falseType may also be unknown, but that's okay because two\n\t\t// unknowns means our result is unknown anyway.\n\t\tv.StackPush(falseType)\n\t} else {\n\t\tv.StackPush(trueType)\n\t}\n\n\treturn tc.n, nil\n}\n\ntype typeCheckOutput struct {\n\tn *ast.Output\n}\n\nfunc (tc *typeCheckOutput) TypeCheck(v *TypeCheck) (ast.Node, error) {\n\tn := tc.n\n\ttypes := make([]ast.Type, len(n.Exprs))\n\tfor i, _ := range n.Exprs {\n\t\ttypes[len(n.Exprs)-1-i] = v.StackPop()\n\t}\n\n\tfor _, ty := range types {\n\t\tif ty == ast.TypeUnknown {\n\t\t\tv.StackPush(ast.TypeUnknown)\n\t\t\treturn tc.n, nil\n\t\t}\n\t}\n\n\t// If there is only one argument and it is a list, we evaluate to a list\n\tif len(types) == 1 {\n\t\tswitch t := types[0]; t {\n\t\tcase ast.TypeList:\n\t\t\tfallthrough\n\t\tcase ast.TypeMap:\n\t\t\tv.StackPush(t)\n\t\t\treturn n, nil\n\t\t}\n\t}\n\n\t// Otherwise, all concat args must be strings, so validate that\n\tresultType := ast.TypeString\n\tfor i, t := range types {\n\n\t\tif t == ast.TypeUnknown {\n\t\t\tresultType = ast.TypeUnknown\n\t\t\tcontinue\n\t\t}\n\n\t\tif t != ast.TypeString {\n\t\t\tcn := v.ImplicitConversion(t, ast.TypeString, n.Exprs[i])\n\t\t\tif cn != nil {\n\t\t\t\tn.Exprs[i] = cn\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\"output of an HIL expression must be a string, or a single list (argument %d is %s)\", i+1, t)\n\t\t}\n\t}\n\n\t// This always results in type string, unless there are unknowns\n\tv.StackPush(resultType)\n\n\treturn n, nil\n}\n\ntype typeCheckLiteral struct {\n\tn *ast.LiteralNode\n}\n\nfunc (tc *typeCheckLiteral) TypeCheck(v *TypeCheck) (ast.Node, error) {\n\tv.StackPush(tc.n.Typex)\n\treturn tc.n, nil\n}\n\ntype typeCheckVariableAccess struct {\n\tn *ast.VariableAccess\n}\n\nfunc (tc *typeCheckVariableAccess) TypeCheck(v *TypeCheck) (ast.Node, error) {\n\t// Look up the variable in the map\n\tvariable, ok := v.Scope.LookupVar(tc.n.Name)\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\n\t\t\t\"unknown variable accessed: %s\", tc.n.Name)\n\t}\n\n\t// Add the type to the stack\n\tv.StackPush(variable.Type)\n\n\treturn tc.n, nil\n}\n\ntype typeCheckIndex struct {\n\tn *ast.Index\n}\n\nfunc (tc *typeCheckIndex) TypeCheck(v *TypeCheck) (ast.Node, error) {\n\tkeyType := v.StackPop()\n\ttargetType := v.StackPop()\n\n\tif keyType == ast.TypeUnknown || targetType == ast.TypeUnknown {\n\t\tv.StackPush(ast.TypeUnknown)\n\t\treturn tc.n, nil\n\t}\n\n\t// Ensure we have a VariableAccess as the target\n\tvarAccessNode, ok := tc.n.Target.(*ast.VariableAccess)\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\n\t\t\t\"target of an index must be a VariableAccess node, was %T\", tc.n.Target)\n\t}\n\n\t// Get the variable\n\tvariable, ok := v.Scope.LookupVar(varAccessNode.Name)\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\n\t\t\t\"unknown variable accessed: %s\", varAccessNode.Name)\n\t}\n\n\tswitch targetType {\n\tcase ast.TypeList:\n\t\tif keyType != ast.TypeInt {\n\t\t\ttc.n.Key = v.ImplicitConversion(keyType, ast.TypeInt, tc.n.Key)\n\t\t\tif tc.n.Key == nil {\n\t\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\t\"key of an index must be an int, was %s\", keyType)\n\t\t\t}\n\t\t}\n\n\t\tvalType, err := ast.VariableListElementTypesAreHomogenous(\n\t\t\tvarAccessNode.Name, variable.Value.([]ast.Variable))\n\t\tif err != nil {\n\t\t\treturn tc.n, err\n\t\t}\n\n\t\tv.StackPush(valType)\n\t\treturn tc.n, nil\n\tcase ast.TypeMap:\n\t\tif keyType != ast.TypeString {\n\t\t\ttc.n.Key = v.ImplicitConversion(keyType, ast.TypeString, tc.n.Key)\n\t\t\tif tc.n.Key == nil {\n\t\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\t\"key of an index must be a string, was %s\", keyType)\n\t\t\t}\n\t\t}\n\n\t\tvalType, err := ast.VariableMapValueTypesAreHomogenous(\n\t\t\tvarAccessNode.Name, variable.Value.(map[string]ast.Variable))\n\t\tif err != nil {\n\t\t\treturn tc.n, err\n\t\t}\n\n\t\tv.StackPush(valType)\n\t\treturn tc.n, nil\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"invalid index operation into non-indexable type: %s\", variable.Type)\n\t}\n}\n\nfunc (v *TypeCheck) ImplicitConversion(\n\tactual ast.Type, expected ast.Type, n ast.Node) ast.Node {\n\tif v.Implicit == nil {\n\t\treturn nil\n\t}\n\n\tfromMap, ok := v.Implicit[actual]\n\tif !ok {\n\t\treturn nil\n\t}\n\n\ttoFunc, ok := fromMap[expected]\n\tif !ok {\n\t\treturn nil\n\t}\n\n\treturn &ast.Call{\n\t\tFunc: toFunc,\n\t\tArgs: []ast.Node{n},\n\t\tPosx: n.Pos(),\n\t}\n}\n\nfunc (v *TypeCheck) reset() {\n\tv.Stack = nil\n\tv.err = nil\n}\n\nfunc (v *TypeCheck) StackPush(t ast.Type) {\n\tv.Stack = append(v.Stack, t)\n}\n\nfunc (v *TypeCheck) StackPop() ast.Type {\n\tvar x ast.Type\n\tx, v.Stack = v.Stack[len(v.Stack)-1], v.Stack[:len(v.Stack)-1]\n\treturn x\n}\n\nfunc (v *TypeCheck) StackPeek() ast.Type {\n\tif len(v.Stack) == 0 {\n\t\treturn ast.TypeInvalid\n\t}\n\n\treturn v.Stack[len(v.Stack)-1]\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hil/convert.go",
    "content": "package hil\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\n\t\"github.com/hashicorp/hil/ast\"\n\t\"github.com/mitchellh/mapstructure\"\n)\n\n// UnknownValue is a sentinel value that can be used to denote\n// that a value of a variable (or map element, list element, etc.)\n// is unknown. This will always have the type ast.TypeUnknown.\nconst UnknownValue = \"74D93920-ED26-11E3-AC10-0800200C9A66\"\n\nvar hilMapstructureDecodeHookSlice []interface{}\nvar hilMapstructureDecodeHookStringSlice []string\nvar hilMapstructureDecodeHookMap map[string]interface{}\n\n// hilMapstructureWeakDecode behaves in the same way as mapstructure.WeakDecode\n// but has a DecodeHook which defeats the backward compatibility mode of mapstructure\n// which WeakDecodes []interface{}{} into an empty map[string]interface{}. This\n// allows us to use WeakDecode (desirable), but not fail on empty lists.\nfunc hilMapstructureWeakDecode(m interface{}, rawVal interface{}) error {\n\tconfig := &mapstructure.DecoderConfig{\n\t\tDecodeHook: func(source reflect.Type, target reflect.Type, val interface{}) (interface{}, error) {\n\t\t\tsliceType := reflect.TypeOf(hilMapstructureDecodeHookSlice)\n\t\t\tstringSliceType := reflect.TypeOf(hilMapstructureDecodeHookStringSlice)\n\t\t\tmapType := reflect.TypeOf(hilMapstructureDecodeHookMap)\n\n\t\t\tif (source == sliceType || source == stringSliceType) && target == mapType {\n\t\t\t\treturn nil, fmt.Errorf(\"Cannot convert %s into a %s\", source, target)\n\t\t\t}\n\n\t\t\treturn val, nil\n\t\t},\n\t\tWeaklyTypedInput: true,\n\t\tResult:           rawVal,\n\t}\n\n\tdecoder, err := mapstructure.NewDecoder(config)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn decoder.Decode(m)\n}\n\nfunc InterfaceToVariable(input interface{}) (ast.Variable, error) {\n\tif iv, ok := input.(ast.Variable); ok {\n\t\treturn iv, nil\n\t}\n\n\t// This is just to maintain backward compatibility\n\t// after https://github.com/mitchellh/mapstructure/pull/98\n\tif v, ok := input.([]ast.Variable); ok {\n\t\treturn ast.Variable{\n\t\t\tType:  ast.TypeList,\n\t\t\tValue: v,\n\t\t}, nil\n\t}\n\tif v, ok := input.(map[string]ast.Variable); ok {\n\t\treturn ast.Variable{\n\t\t\tType:  ast.TypeMap,\n\t\t\tValue: v,\n\t\t}, nil\n\t}\n\n\tvar stringVal string\n\tif err := hilMapstructureWeakDecode(input, &stringVal); err == nil {\n\t\t// Special case the unknown value to turn into \"unknown\"\n\t\tif stringVal == UnknownValue {\n\t\t\treturn ast.Variable{Value: UnknownValue, Type: ast.TypeUnknown}, nil\n\t\t}\n\n\t\t// Otherwise return the string value\n\t\treturn ast.Variable{\n\t\t\tType:  ast.TypeString,\n\t\t\tValue: stringVal,\n\t\t}, nil\n\t}\n\n\tvar mapVal map[string]interface{}\n\tif err := hilMapstructureWeakDecode(input, &mapVal); err == nil {\n\t\telements := make(map[string]ast.Variable)\n\t\tfor i, element := range mapVal {\n\t\t\tvarElement, err := InterfaceToVariable(element)\n\t\t\tif err != nil {\n\t\t\t\treturn ast.Variable{}, err\n\t\t\t}\n\t\t\telements[i] = varElement\n\t\t}\n\n\t\treturn ast.Variable{\n\t\t\tType:  ast.TypeMap,\n\t\t\tValue: elements,\n\t\t}, nil\n\t}\n\n\tvar sliceVal []interface{}\n\tif err := hilMapstructureWeakDecode(input, &sliceVal); err == nil {\n\t\telements := make([]ast.Variable, len(sliceVal))\n\t\tfor i, element := range sliceVal {\n\t\t\tvarElement, err := InterfaceToVariable(element)\n\t\t\tif err != nil {\n\t\t\t\treturn ast.Variable{}, err\n\t\t\t}\n\t\t\telements[i] = varElement\n\t\t}\n\n\t\treturn ast.Variable{\n\t\t\tType:  ast.TypeList,\n\t\t\tValue: elements,\n\t\t}, nil\n\t}\n\n\treturn ast.Variable{}, fmt.Errorf(\"value for conversion must be a string, interface{} or map[string]interface: got %T\", input)\n}\n\nfunc VariableToInterface(input ast.Variable) (interface{}, error) {\n\tif input.Type == ast.TypeString {\n\t\tif inputStr, ok := input.Value.(string); ok {\n\t\t\treturn inputStr, nil\n\t\t} else {\n\t\t\treturn nil, fmt.Errorf(\"ast.Variable with type string has value which is not a string\")\n\t\t}\n\t}\n\n\tif input.Type == ast.TypeList {\n\t\tinputList, ok := input.Value.([]ast.Variable)\n\t\tif !ok {\n\t\t\treturn nil, fmt.Errorf(\"ast.Variable with type list has value which is not a []ast.Variable\")\n\t\t}\n\n\t\tresult := make([]interface{}, 0)\n\t\tif len(inputList) == 0 {\n\t\t\treturn result, nil\n\t\t}\n\n\t\tfor _, element := range inputList {\n\t\t\tif convertedElement, err := VariableToInterface(element); err == nil {\n\t\t\t\tresult = append(result, convertedElement)\n\t\t\t} else {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t}\n\n\t\treturn result, nil\n\t}\n\n\tif input.Type == ast.TypeMap {\n\t\tinputMap, ok := input.Value.(map[string]ast.Variable)\n\t\tif !ok {\n\t\t\treturn nil, fmt.Errorf(\"ast.Variable with type map has value which is not a map[string]ast.Variable\")\n\t\t}\n\n\t\tresult := make(map[string]interface{}, 0)\n\t\tif len(inputMap) == 0 {\n\t\t\treturn result, nil\n\t\t}\n\n\t\tfor key, value := range inputMap {\n\t\t\tif convertedValue, err := VariableToInterface(value); err == nil {\n\t\t\t\tresult[key] = convertedValue\n\t\t\t} else {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t}\n\n\t\treturn result, nil\n\t}\n\n\treturn nil, fmt.Errorf(\"unknown input type: %s\", input.Type)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hil/eval.go",
    "content": "package hil\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"sync\"\n\n\t\"github.com/hashicorp/hil/ast\"\n)\n\n// EvalConfig is the configuration for evaluating.\ntype EvalConfig struct {\n\t// GlobalScope is the global scope of execution for evaluation.\n\tGlobalScope *ast.BasicScope\n\n\t// SemanticChecks is a list of additional semantic checks that will be run\n\t// on the tree prior to evaluating it. The type checker, identifier checker,\n\t// etc. will be run before these automatically.\n\tSemanticChecks []SemanticChecker\n}\n\n// SemanticChecker is the type that must be implemented to do a\n// semantic check on an AST tree. This will be called with the root node.\ntype SemanticChecker func(ast.Node) error\n\n// EvaluationResult is a struct returned from the hil.Eval function,\n// representing the result of an interpolation. Results are returned in their\n// \"natural\" Go structure rather than in terms of the HIL AST.  For the types\n// currently implemented, this means that the Value field can be interpreted as\n// the following Go types:\n//     TypeInvalid: undefined\n//     TypeString:  string\n//     TypeList:    []interface{}\n//     TypeMap:     map[string]interface{}\n//     TypBool:     bool\ntype EvaluationResult struct {\n\tType  EvalType\n\tValue interface{}\n}\n\n// InvalidResult is a structure representing the result of a HIL interpolation\n// which has invalid syntax, missing variables, or some other type of error.\n// The error is described out of band in the accompanying error return value.\nvar InvalidResult = EvaluationResult{Type: TypeInvalid, Value: nil}\n\n// errExitUnknown is an internal error that when returned means the result\n// is an unknown value. We use this for early exit.\nvar errExitUnknown = errors.New(\"unknown value\")\n\nfunc Eval(root ast.Node, config *EvalConfig) (EvaluationResult, error) {\n\toutput, outputType, err := internalEval(root, config)\n\tif err != nil {\n\t\treturn InvalidResult, err\n\t}\n\n\t// If the result contains any nested unknowns then the result as a whole\n\t// is unknown, so that callers only have to deal with \"entirely known\"\n\t// or \"entirely unknown\" as outcomes.\n\tif ast.IsUnknown(ast.Variable{Type: outputType, Value: output}) {\n\t\toutputType = ast.TypeUnknown\n\t\toutput = UnknownValue\n\t}\n\n\tswitch outputType {\n\tcase ast.TypeList:\n\t\tval, err := VariableToInterface(ast.Variable{\n\t\t\tType:  ast.TypeList,\n\t\t\tValue: output,\n\t\t})\n\t\treturn EvaluationResult{\n\t\t\tType:  TypeList,\n\t\t\tValue: val,\n\t\t}, err\n\tcase ast.TypeMap:\n\t\tval, err := VariableToInterface(ast.Variable{\n\t\t\tType:  ast.TypeMap,\n\t\t\tValue: output,\n\t\t})\n\t\treturn EvaluationResult{\n\t\t\tType:  TypeMap,\n\t\t\tValue: val,\n\t\t}, err\n\tcase ast.TypeString:\n\t\treturn EvaluationResult{\n\t\t\tType:  TypeString,\n\t\t\tValue: output,\n\t\t}, nil\n\tcase ast.TypeBool:\n\t\treturn EvaluationResult{\n\t\t\tType:  TypeBool,\n\t\t\tValue: output,\n\t\t}, nil\n\tcase ast.TypeUnknown:\n\t\treturn EvaluationResult{\n\t\t\tType:  TypeUnknown,\n\t\t\tValue: UnknownValue,\n\t\t}, nil\n\tdefault:\n\t\treturn InvalidResult, fmt.Errorf(\"unknown type %s as interpolation output\", outputType)\n\t}\n}\n\n// Eval evaluates the given AST tree and returns its output value, the type\n// of the output, and any error that occurred.\nfunc internalEval(root ast.Node, config *EvalConfig) (interface{}, ast.Type, error) {\n\t// Copy the scope so we can add our builtins\n\tif config == nil {\n\t\tconfig = new(EvalConfig)\n\t}\n\tscope := registerBuiltins(config.GlobalScope)\n\timplicitMap := map[ast.Type]map[ast.Type]string{\n\t\tast.TypeFloat: {\n\t\t\tast.TypeInt:    \"__builtin_FloatToInt\",\n\t\t\tast.TypeString: \"__builtin_FloatToString\",\n\t\t},\n\t\tast.TypeInt: {\n\t\t\tast.TypeFloat:  \"__builtin_IntToFloat\",\n\t\t\tast.TypeString: \"__builtin_IntToString\",\n\t\t},\n\t\tast.TypeString: {\n\t\t\tast.TypeInt:   \"__builtin_StringToInt\",\n\t\t\tast.TypeFloat: \"__builtin_StringToFloat\",\n\t\t\tast.TypeBool:  \"__builtin_StringToBool\",\n\t\t},\n\t\tast.TypeBool: {\n\t\t\tast.TypeString: \"__builtin_BoolToString\",\n\t\t},\n\t}\n\n\t// Build our own semantic checks that we always run\n\ttv := &TypeCheck{Scope: scope, Implicit: implicitMap}\n\tic := &IdentifierCheck{Scope: scope}\n\n\t// Build up the semantic checks for execution\n\tchecks := make(\n\t\t[]SemanticChecker,\n\t\tlen(config.SemanticChecks),\n\t\tlen(config.SemanticChecks)+2)\n\tcopy(checks, config.SemanticChecks)\n\tchecks = append(checks, ic.Visit)\n\tchecks = append(checks, tv.Visit)\n\n\t// Run the semantic checks\n\tfor _, check := range checks {\n\t\tif err := check(root); err != nil {\n\t\t\treturn nil, ast.TypeInvalid, err\n\t\t}\n\t}\n\n\t// Execute\n\tv := &evalVisitor{Scope: scope}\n\treturn v.Visit(root)\n}\n\n// EvalNode is the interface that must be implemented by any ast.Node\n// to support evaluation. This will be called in visitor pattern order.\n// The result of each call to Eval is automatically pushed onto the\n// stack as a LiteralNode. Pop elements off the stack to get child\n// values.\ntype EvalNode interface {\n\tEval(ast.Scope, *ast.Stack) (interface{}, ast.Type, error)\n}\n\ntype evalVisitor struct {\n\tScope ast.Scope\n\tStack ast.Stack\n\n\terr  error\n\tlock sync.Mutex\n}\n\nfunc (v *evalVisitor) Visit(root ast.Node) (interface{}, ast.Type, error) {\n\t// Run the actual visitor pattern\n\troot.Accept(v.visit)\n\n\t// Get our result and clear out everything else\n\tvar result *ast.LiteralNode\n\tif v.Stack.Len() > 0 {\n\t\tresult = v.Stack.Pop().(*ast.LiteralNode)\n\t} else {\n\t\tresult = new(ast.LiteralNode)\n\t}\n\tresultErr := v.err\n\tif resultErr == errExitUnknown {\n\t\t// This means the return value is unknown and we used the error\n\t\t// as an early exit mechanism. Reset since the value on the stack\n\t\t// should be the unknown value.\n\t\tresultErr = nil\n\t}\n\n\t// Clear everything else so we aren't just dangling\n\tv.Stack.Reset()\n\tv.err = nil\n\n\tt, err := result.Type(v.Scope)\n\tif err != nil {\n\t\treturn nil, ast.TypeInvalid, err\n\t}\n\n\treturn result.Value, t, resultErr\n}\n\nfunc (v *evalVisitor) visit(raw ast.Node) ast.Node {\n\tif v.err != nil {\n\t\treturn raw\n\t}\n\n\ten, err := evalNode(raw)\n\tif err != nil {\n\t\tv.err = err\n\t\treturn raw\n\t}\n\n\tout, outType, err := en.Eval(v.Scope, &v.Stack)\n\tif err != nil {\n\t\tv.err = err\n\t\treturn raw\n\t}\n\n\tv.Stack.Push(&ast.LiteralNode{\n\t\tValue: out,\n\t\tTypex: outType,\n\t})\n\n\tif outType == ast.TypeUnknown {\n\t\t// Halt immediately\n\t\tv.err = errExitUnknown\n\t\treturn raw\n\t}\n\n\treturn raw\n}\n\n// evalNode is a private function that returns an EvalNode for built-in\n// types as well as any other EvalNode implementations.\nfunc evalNode(raw ast.Node) (EvalNode, error) {\n\tswitch n := raw.(type) {\n\tcase *ast.Index:\n\t\treturn &evalIndex{n}, nil\n\tcase *ast.Call:\n\t\treturn &evalCall{n}, nil\n\tcase *ast.Conditional:\n\t\treturn &evalConditional{n}, nil\n\tcase *ast.Output:\n\t\treturn &evalOutput{n}, nil\n\tcase *ast.LiteralNode:\n\t\treturn &evalLiteralNode{n}, nil\n\tcase *ast.VariableAccess:\n\t\treturn &evalVariableAccess{n}, nil\n\tdefault:\n\t\ten, ok := n.(EvalNode)\n\t\tif !ok {\n\t\t\treturn nil, fmt.Errorf(\"node doesn't support evaluation: %#v\", raw)\n\t\t}\n\n\t\treturn en, nil\n\t}\n}\n\ntype evalCall struct{ *ast.Call }\n\nfunc (v *evalCall) Eval(s ast.Scope, stack *ast.Stack) (interface{}, ast.Type, error) {\n\t// Look up the function in the map\n\tfunction, ok := s.LookupFunc(v.Func)\n\tif !ok {\n\t\treturn nil, ast.TypeInvalid, fmt.Errorf(\n\t\t\t\"unknown function called: %s\", v.Func)\n\t}\n\n\t// The arguments are on the stack in reverse order, so pop them off.\n\targs := make([]interface{}, len(v.Args))\n\tfor i, _ := range v.Args {\n\t\tnode := stack.Pop().(*ast.LiteralNode)\n\t\tif node.IsUnknown() {\n\t\t\t// If any arguments are unknown then the result is automatically unknown\n\t\t\treturn UnknownValue, ast.TypeUnknown, nil\n\t\t}\n\t\targs[len(v.Args)-1-i] = node.Value\n\t}\n\n\t// Call the function\n\tresult, err := function.Callback(args)\n\tif err != nil {\n\t\treturn nil, ast.TypeInvalid, fmt.Errorf(\"%s: %s\", v.Func, err)\n\t}\n\n\treturn result, function.ReturnType, nil\n}\n\ntype evalConditional struct{ *ast.Conditional }\n\nfunc (v *evalConditional) Eval(s ast.Scope, stack *ast.Stack) (interface{}, ast.Type, error) {\n\t// On the stack we have literal nodes representing the resulting values\n\t// of the condition, true and false expressions, but they are in reverse\n\t// order.\n\tfalseLit := stack.Pop().(*ast.LiteralNode)\n\ttrueLit := stack.Pop().(*ast.LiteralNode)\n\tcondLit := stack.Pop().(*ast.LiteralNode)\n\n\tif condLit.IsUnknown() {\n\t\t// If our conditional is unknown then our result is also unknown\n\t\treturn UnknownValue, ast.TypeUnknown, nil\n\t}\n\n\tif condLit.Value.(bool) {\n\t\treturn trueLit.Value, trueLit.Typex, nil\n\t} else {\n\t\treturn falseLit.Value, trueLit.Typex, nil\n\t}\n}\n\ntype evalIndex struct{ *ast.Index }\n\nfunc (v *evalIndex) Eval(scope ast.Scope, stack *ast.Stack) (interface{}, ast.Type, error) {\n\tkey := stack.Pop().(*ast.LiteralNode)\n\ttarget := stack.Pop().(*ast.LiteralNode)\n\n\tvariableName := v.Index.Target.(*ast.VariableAccess).Name\n\n\tif key.IsUnknown() {\n\t\t// If our key is unknown then our result is also unknown\n\t\treturn UnknownValue, ast.TypeUnknown, nil\n\t}\n\n\t// For target, we'll accept collections containing unknown values but\n\t// we still need to catch when the collection itself is unknown, shallowly.\n\tif target.Typex == ast.TypeUnknown {\n\t\treturn UnknownValue, ast.TypeUnknown, nil\n\t}\n\n\tswitch target.Typex {\n\tcase ast.TypeList:\n\t\treturn v.evalListIndex(variableName, target.Value, key.Value)\n\tcase ast.TypeMap:\n\t\treturn v.evalMapIndex(variableName, target.Value, key.Value)\n\tdefault:\n\t\treturn nil, ast.TypeInvalid, fmt.Errorf(\n\t\t\t\"target %q for indexing must be ast.TypeList or ast.TypeMap, is %s\",\n\t\t\tvariableName, target.Typex)\n\t}\n}\n\nfunc (v *evalIndex) evalListIndex(variableName string, target interface{}, key interface{}) (interface{}, ast.Type, error) {\n\t// We assume type checking was already done and we can assume that target\n\t// is a list and key is an int\n\tlist, ok := target.([]ast.Variable)\n\tif !ok {\n\t\treturn nil, ast.TypeInvalid, fmt.Errorf(\n\t\t\t\"cannot cast target to []Variable, is: %T\", target)\n\t}\n\n\tkeyInt, ok := key.(int)\n\tif !ok {\n\t\treturn nil, ast.TypeInvalid, fmt.Errorf(\n\t\t\t\"cannot cast key to int, is: %T\", key)\n\t}\n\n\tif len(list) == 0 {\n\t\treturn nil, ast.TypeInvalid, fmt.Errorf(\"list is empty\")\n\t}\n\n\tif keyInt < 0 || len(list) < keyInt+1 {\n\t\treturn nil, ast.TypeInvalid, fmt.Errorf(\n\t\t\t\"index %d out of range for list %s (max %d)\",\n\t\t\tkeyInt, variableName, len(list))\n\t}\n\n\treturnVal := list[keyInt].Value\n\treturnType := list[keyInt].Type\n\treturn returnVal, returnType, nil\n}\n\nfunc (v *evalIndex) evalMapIndex(variableName string, target interface{}, key interface{}) (interface{}, ast.Type, error) {\n\t// We assume type checking was already done and we can assume that target\n\t// is a map and key is a string\n\tvmap, ok := target.(map[string]ast.Variable)\n\tif !ok {\n\t\treturn nil, ast.TypeInvalid, fmt.Errorf(\n\t\t\t\"cannot cast target to map[string]Variable, is: %T\", target)\n\t}\n\n\tkeyString, ok := key.(string)\n\tif !ok {\n\t\treturn nil, ast.TypeInvalid, fmt.Errorf(\n\t\t\t\"cannot cast key to string, is: %T\", key)\n\t}\n\n\tif len(vmap) == 0 {\n\t\treturn nil, ast.TypeInvalid, fmt.Errorf(\"map is empty\")\n\t}\n\n\tvalue, ok := vmap[keyString]\n\tif !ok {\n\t\treturn nil, ast.TypeInvalid, fmt.Errorf(\n\t\t\t\"key %q does not exist in map %s\", keyString, variableName)\n\t}\n\n\treturn value.Value, value.Type, nil\n}\n\ntype evalOutput struct{ *ast.Output }\n\nfunc (v *evalOutput) Eval(s ast.Scope, stack *ast.Stack) (interface{}, ast.Type, error) {\n\t// The expressions should all be on the stack in reverse\n\t// order. So pop them off, reverse their order, and concatenate.\n\tnodes := make([]*ast.LiteralNode, 0, len(v.Exprs))\n\thaveUnknown := false\n\tfor range v.Exprs {\n\t\tn := stack.Pop().(*ast.LiteralNode)\n\t\tnodes = append(nodes, n)\n\n\t\t// If we have any unknowns then the whole result is unknown\n\t\t// (we must deal with this first, because the type checker can\n\t\t// skip type conversions in the presence of unknowns, and thus\n\t\t// any of our other nodes may be incorrectly typed.)\n\t\tif n.IsUnknown() {\n\t\t\thaveUnknown = true\n\t\t}\n\t}\n\n\tif haveUnknown {\n\t\treturn UnknownValue, ast.TypeUnknown, nil\n\t}\n\n\t// Special case the single list and map\n\tif len(nodes) == 1 {\n\t\tswitch t := nodes[0].Typex; t {\n\t\tcase ast.TypeList:\n\t\t\tfallthrough\n\t\tcase ast.TypeMap:\n\t\t\tfallthrough\n\t\tcase ast.TypeUnknown:\n\t\t\treturn nodes[0].Value, t, nil\n\t\t}\n\t}\n\n\t// Otherwise concatenate the strings\n\tvar buf bytes.Buffer\n\tfor i := len(nodes) - 1; i >= 0; i-- {\n\t\tif nodes[i].Typex != ast.TypeString {\n\t\t\treturn nil, ast.TypeInvalid, fmt.Errorf(\n\t\t\t\t\"invalid output with %s value at index %d: %#v\",\n\t\t\t\tnodes[i].Typex,\n\t\t\t\ti,\n\t\t\t\tnodes[i].Value,\n\t\t\t)\n\t\t}\n\t\tbuf.WriteString(nodes[i].Value.(string))\n\t}\n\n\treturn buf.String(), ast.TypeString, nil\n}\n\ntype evalLiteralNode struct{ *ast.LiteralNode }\n\nfunc (v *evalLiteralNode) Eval(ast.Scope, *ast.Stack) (interface{}, ast.Type, error) {\n\treturn v.Value, v.Typex, nil\n}\n\ntype evalVariableAccess struct{ *ast.VariableAccess }\n\nfunc (v *evalVariableAccess) Eval(scope ast.Scope, _ *ast.Stack) (interface{}, ast.Type, error) {\n\t// Look up the variable in the map\n\tvariable, ok := scope.LookupVar(v.Name)\n\tif !ok {\n\t\treturn nil, ast.TypeInvalid, fmt.Errorf(\n\t\t\t\"unknown variable accessed: %s\", v.Name)\n\t}\n\n\treturn variable.Value, variable.Type, nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hil/eval_type.go",
    "content": "package hil\n\n//go:generate stringer -type=EvalType eval_type.go\n\n// EvalType represents the type of the output returned from a HIL\n// evaluation.\ntype EvalType uint32\n\nconst (\n\tTypeInvalid EvalType = 0\n\tTypeString  EvalType = 1 << iota\n\tTypeBool\n\tTypeList\n\tTypeMap\n\tTypeUnknown\n)\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hil/evaltype_string.go",
    "content": "// Code generated by \"stringer -type=EvalType eval_type.go\"; DO NOT EDIT\n\npackage hil\n\nimport \"fmt\"\n\nconst (\n\t_EvalType_name_0 = \"TypeInvalid\"\n\t_EvalType_name_1 = \"TypeString\"\n\t_EvalType_name_2 = \"TypeBool\"\n\t_EvalType_name_3 = \"TypeList\"\n\t_EvalType_name_4 = \"TypeMap\"\n\t_EvalType_name_5 = \"TypeUnknown\"\n)\n\nvar (\n\t_EvalType_index_0 = [...]uint8{0, 11}\n\t_EvalType_index_1 = [...]uint8{0, 10}\n\t_EvalType_index_2 = [...]uint8{0, 8}\n\t_EvalType_index_3 = [...]uint8{0, 8}\n\t_EvalType_index_4 = [...]uint8{0, 7}\n\t_EvalType_index_5 = [...]uint8{0, 11}\n)\n\nfunc (i EvalType) String() string {\n\tswitch {\n\tcase i == 0:\n\t\treturn _EvalType_name_0\n\tcase i == 2:\n\t\treturn _EvalType_name_1\n\tcase i == 4:\n\t\treturn _EvalType_name_2\n\tcase i == 8:\n\t\treturn _EvalType_name_3\n\tcase i == 16:\n\t\treturn _EvalType_name_4\n\tcase i == 32:\n\t\treturn _EvalType_name_5\n\tdefault:\n\t\treturn fmt.Sprintf(\"EvalType(%d)\", i)\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hil/parse.go",
    "content": "package hil\n\nimport (\n\t\"github.com/hashicorp/hil/ast\"\n\t\"github.com/hashicorp/hil/parser\"\n\t\"github.com/hashicorp/hil/scanner\"\n)\n\n// Parse parses the given program and returns an executable AST tree.\n//\n// Syntax errors are returned with error having the dynamic type\n// *parser.ParseError, which gives the caller access to the source position\n// where the error was found, which allows (for example) combining it with\n// a known source filename to add context to the error message.\nfunc Parse(v string) (ast.Node, error) {\n\treturn ParseWithPosition(v, ast.Pos{Line: 1, Column: 1})\n}\n\n// ParseWithPosition is like Parse except that it overrides the source\n// row and column position of the first character in the string, which should\n// be 1-based.\n//\n// This can be used when HIL is embedded in another language and the outer\n// parser knows the row and column where the HIL expression started within\n// the overall source file.\nfunc ParseWithPosition(v string, pos ast.Pos) (ast.Node, error) {\n\tch := scanner.Scan(v, pos)\n\treturn parser.Parse(ch)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hil/parser/binary_op.go",
    "content": "package parser\n\nimport (\n\t\"github.com/hashicorp/hil/ast\"\n\t\"github.com/hashicorp/hil/scanner\"\n)\n\nvar binaryOps []map[scanner.TokenType]ast.ArithmeticOp\n\nfunc init() {\n\t// This operation table maps from the operator's scanner token type\n\t// to the AST arithmetic operation. All expressions produced from\n\t// binary operators are *ast.Arithmetic nodes.\n\t//\n\t// Binary operator groups are listed in order of precedence, with\n\t// the *lowest* precedence first. Operators within the same group\n\t// have left-to-right associativity.\n\tbinaryOps = []map[scanner.TokenType]ast.ArithmeticOp{\n\t\t{\n\t\t\tscanner.OR: ast.ArithmeticOpLogicalOr,\n\t\t},\n\t\t{\n\t\t\tscanner.AND: ast.ArithmeticOpLogicalAnd,\n\t\t},\n\t\t{\n\t\t\tscanner.EQUAL:    ast.ArithmeticOpEqual,\n\t\t\tscanner.NOTEQUAL: ast.ArithmeticOpNotEqual,\n\t\t},\n\t\t{\n\t\t\tscanner.GT:  ast.ArithmeticOpGreaterThan,\n\t\t\tscanner.GTE: ast.ArithmeticOpGreaterThanOrEqual,\n\t\t\tscanner.LT:  ast.ArithmeticOpLessThan,\n\t\t\tscanner.LTE: ast.ArithmeticOpLessThanOrEqual,\n\t\t},\n\t\t{\n\t\t\tscanner.PLUS:  ast.ArithmeticOpAdd,\n\t\t\tscanner.MINUS: ast.ArithmeticOpSub,\n\t\t},\n\t\t{\n\t\t\tscanner.STAR:    ast.ArithmeticOpMul,\n\t\t\tscanner.SLASH:   ast.ArithmeticOpDiv,\n\t\t\tscanner.PERCENT: ast.ArithmeticOpMod,\n\t\t},\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hil/parser/error.go",
    "content": "package parser\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/hashicorp/hil/ast\"\n\t\"github.com/hashicorp/hil/scanner\"\n)\n\ntype ParseError struct {\n\tMessage string\n\tPos     ast.Pos\n}\n\nfunc Errorf(pos ast.Pos, format string, args ...interface{}) error {\n\treturn &ParseError{\n\t\tMessage: fmt.Sprintf(format, args...),\n\t\tPos:     pos,\n\t}\n}\n\n// TokenErrorf is a convenient wrapper around Errorf that uses the\n// position of the given token.\nfunc TokenErrorf(token *scanner.Token, format string, args ...interface{}) error {\n\treturn Errorf(token.Pos, format, args...)\n}\n\nfunc ExpectationError(wanted string, got *scanner.Token) error {\n\treturn TokenErrorf(got, \"expected %s but found %s\", wanted, got)\n}\n\nfunc (e *ParseError) Error() string {\n\treturn fmt.Sprintf(\"parse error at %s: %s\", e.Pos, e.Message)\n}\n\nfunc (e *ParseError) String() string {\n\treturn e.Error()\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hil/parser/fuzz.go",
    "content": "// +build gofuzz\n\npackage parser\n\nimport (\n\t\"github.com/hashicorp/hil/ast\"\n\t\"github.com/hashicorp/hil/scanner\"\n)\n\n// This is a fuzz testing function designed to be used with go-fuzz:\n//    https://github.com/dvyukov/go-fuzz\n//\n// It's not included in a normal build due to the gofuzz build tag above.\n//\n// There are some input files that you can use as a seed corpus for go-fuzz\n// in the directory ./fuzz-corpus .\n\nfunc Fuzz(data []byte) int {\n\tstr := string(data)\n\n\tch := scanner.Scan(str, ast.Pos{Line: 1, Column: 1})\n\t_, err := Parse(ch)\n\tif err != nil {\n\t\treturn 0\n\t}\n\n\treturn 1\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hil/parser/parser.go",
    "content": "package parser\n\nimport (\n\t\"strconv\"\n\t\"unicode/utf8\"\n\n\t\"github.com/hashicorp/hil/ast\"\n\t\"github.com/hashicorp/hil/scanner\"\n)\n\nfunc Parse(ch <-chan *scanner.Token) (ast.Node, error) {\n\tpeeker := scanner.NewPeeker(ch)\n\tparser := &parser{peeker}\n\toutput, err := parser.ParseTopLevel()\n\tpeeker.Close()\n\treturn output, err\n}\n\ntype parser struct {\n\tpeeker *scanner.Peeker\n}\n\nfunc (p *parser) ParseTopLevel() (ast.Node, error) {\n\treturn p.parseInterpolationSeq(false)\n}\n\nfunc (p *parser) ParseQuoted() (ast.Node, error) {\n\treturn p.parseInterpolationSeq(true)\n}\n\n// parseInterpolationSeq parses either the top-level sequence of literals\n// and interpolation expressions or a similar sequence within a quoted\n// string inside an interpolation expression. The latter case is requested\n// by setting 'quoted' to true.\nfunc (p *parser) parseInterpolationSeq(quoted bool) (ast.Node, error) {\n\tliteralType := scanner.LITERAL\n\tendType := scanner.EOF\n\tif quoted {\n\t\t// exceptions for quoted sequences\n\t\tliteralType = scanner.STRING\n\t\tendType = scanner.CQUOTE\n\t}\n\n\tstartPos := p.peeker.Peek().Pos\n\n\tif quoted {\n\t\ttok := p.peeker.Read()\n\t\tif tok.Type != scanner.OQUOTE {\n\t\t\treturn nil, ExpectationError(\"open quote\", tok)\n\t\t}\n\t}\n\n\tvar exprs []ast.Node\n\tfor {\n\t\ttok := p.peeker.Read()\n\n\t\tif tok.Type == endType {\n\t\t\tbreak\n\t\t}\n\n\t\tswitch tok.Type {\n\t\tcase literalType:\n\t\t\tval, err := p.parseStringToken(tok)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\texprs = append(exprs, &ast.LiteralNode{\n\t\t\t\tValue: val,\n\t\t\t\tTypex: ast.TypeString,\n\t\t\t\tPosx:  tok.Pos,\n\t\t\t})\n\t\tcase scanner.BEGIN:\n\t\t\texpr, err := p.ParseInterpolation()\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\texprs = append(exprs, expr)\n\t\tdefault:\n\t\t\treturn nil, ExpectationError(`\"${\"`, tok)\n\t\t}\n\t}\n\n\tif len(exprs) == 0 {\n\t\t// If we have no parts at all then the input must've\n\t\t// been an empty string.\n\t\texprs = append(exprs, &ast.LiteralNode{\n\t\t\tValue: \"\",\n\t\t\tTypex: ast.TypeString,\n\t\t\tPosx:  startPos,\n\t\t})\n\t}\n\n\t// As a special case, if our \"Output\" contains only one expression\n\t// and it's a literal string then we'll hoist it up to be our\n\t// direct return value, so callers can easily recognize a string\n\t// that has no interpolations at all.\n\tif len(exprs) == 1 {\n\t\tif lit, ok := exprs[0].(*ast.LiteralNode); ok {\n\t\t\tif lit.Typex == ast.TypeString {\n\t\t\t\treturn lit, nil\n\t\t\t}\n\t\t}\n\t}\n\n\treturn &ast.Output{\n\t\tExprs: exprs,\n\t\tPosx:  startPos,\n\t}, nil\n}\n\n// parseStringToken takes a token of either LITERAL or STRING type and\n// returns the interpreted string, after processing any relevant\n// escape sequences.\nfunc (p *parser) parseStringToken(tok *scanner.Token) (string, error) {\n\tvar backslashes bool\n\tswitch tok.Type {\n\tcase scanner.LITERAL:\n\t\tbackslashes = false\n\tcase scanner.STRING:\n\t\tbackslashes = true\n\tdefault:\n\t\tpanic(\"unsupported string token type\")\n\t}\n\n\traw := []byte(tok.Content)\n\tbuf := make([]byte, 0, len(raw))\n\n\tfor i := 0; i < len(raw); i++ {\n\t\tb := raw[i]\n\t\tmore := len(raw) > (i + 1)\n\n\t\tif b == '$' {\n\t\t\tif more && raw[i+1] == '$' {\n\t\t\t\t// skip over the second dollar sign\n\t\t\t\ti++\n\t\t\t}\n\t\t} else if backslashes && b == '\\\\' {\n\t\t\tif !more {\n\t\t\t\treturn \"\", Errorf(\n\t\t\t\t\tast.Pos{\n\t\t\t\t\t\tColumn: tok.Pos.Column + utf8.RuneCount(raw[:i]),\n\t\t\t\t\t\tLine:   tok.Pos.Line,\n\t\t\t\t\t},\n\t\t\t\t\t`unfinished backslash escape sequence`,\n\t\t\t\t)\n\t\t\t}\n\t\t\tescapeType := raw[i+1]\n\t\t\tswitch escapeType {\n\t\t\tcase '\\\\':\n\t\t\t\t// skip over the second slash\n\t\t\t\ti++\n\t\t\tcase 'n':\n\t\t\t\tb = '\\n'\n\t\t\t\ti++\n\t\t\tcase '\"':\n\t\t\t\tb = '\"'\n\t\t\t\ti++\n\t\t\tdefault:\n\t\t\t\treturn \"\", Errorf(\n\t\t\t\t\tast.Pos{\n\t\t\t\t\t\tColumn: tok.Pos.Column + utf8.RuneCount(raw[:i]),\n\t\t\t\t\t\tLine:   tok.Pos.Line,\n\t\t\t\t\t},\n\t\t\t\t\t`invalid backslash escape sequence`,\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\n\t\tbuf = append(buf, b)\n\t}\n\n\treturn string(buf), nil\n}\n\nfunc (p *parser) ParseInterpolation() (ast.Node, error) {\n\t// By the time we're called, we're already \"inside\" the ${ sequence\n\t// because the caller consumed the ${ token.\n\n\texpr, err := p.ParseExpression()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\terr = p.requireTokenType(scanner.END, `\"}\"`)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn expr, nil\n}\n\nfunc (p *parser) ParseExpression() (ast.Node, error) {\n\treturn p.parseTernaryCond()\n}\n\nfunc (p *parser) parseTernaryCond() (ast.Node, error) {\n\t// The ternary condition operator (.. ? .. : ..) behaves somewhat\n\t// like a binary operator except that the \"operator\" is itself\n\t// an expression enclosed in two punctuation characters.\n\t// The middle expression is parsed as if the ? and : symbols\n\t// were parentheses. The \"rhs\" (the \"false expression\") is then\n\t// treated right-associatively so it behaves similarly to the\n\t// middle in terms of precedence.\n\n\tstartPos := p.peeker.Peek().Pos\n\n\tvar cond, trueExpr, falseExpr ast.Node\n\tvar err error\n\n\tcond, err = p.parseBinaryOps(binaryOps)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tnext := p.peeker.Peek()\n\tif next.Type != scanner.QUESTION {\n\t\treturn cond, nil\n\t}\n\n\tp.peeker.Read() // eat question mark\n\n\ttrueExpr, err = p.ParseExpression()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tcolon := p.peeker.Read()\n\tif colon.Type != scanner.COLON {\n\t\treturn nil, ExpectationError(\":\", colon)\n\t}\n\n\tfalseExpr, err = p.ParseExpression()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &ast.Conditional{\n\t\tCondExpr:  cond,\n\t\tTrueExpr:  trueExpr,\n\t\tFalseExpr: falseExpr,\n\t\tPosx:      startPos,\n\t}, nil\n}\n\n// parseBinaryOps calls itself recursively to work through all of the\n// operator precedence groups, and then eventually calls ParseExpressionTerm\n// for each operand.\nfunc (p *parser) parseBinaryOps(ops []map[scanner.TokenType]ast.ArithmeticOp) (ast.Node, error) {\n\tif len(ops) == 0 {\n\t\t// We've run out of operators, so now we'll just try to parse a term.\n\t\treturn p.ParseExpressionTerm()\n\t}\n\n\tthisLevel := ops[0]\n\tremaining := ops[1:]\n\n\tstartPos := p.peeker.Peek().Pos\n\n\tvar lhs, rhs ast.Node\n\toperator := ast.ArithmeticOpInvalid\n\tvar err error\n\n\t// parse a term that might be the first operand of a binary\n\t// expression or it might just be a standalone term, but\n\t// we won't know until we've parsed it and can look ahead\n\t// to see if there's an operator token.\n\tlhs, err = p.parseBinaryOps(remaining)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// We'll keep eating up arithmetic operators until we run\n\t// out, so that operators with the same precedence will combine in a\n\t// left-associative manner:\n\t// a+b+c => (a+b)+c, not a+(b+c)\n\t//\n\t// Should we later want to have right-associative operators, a way\n\t// to achieve that would be to call back up to ParseExpression here\n\t// instead of iteratively parsing only the remaining operators.\n\tfor {\n\t\tnext := p.peeker.Peek()\n\t\tvar newOperator ast.ArithmeticOp\n\t\tvar ok bool\n\t\tif newOperator, ok = thisLevel[next.Type]; !ok {\n\t\t\tbreak\n\t\t}\n\n\t\t// Are we extending an expression started on\n\t\t// the previous iteration?\n\t\tif operator != ast.ArithmeticOpInvalid {\n\t\t\tlhs = &ast.Arithmetic{\n\t\t\t\tOp:    operator,\n\t\t\t\tExprs: []ast.Node{lhs, rhs},\n\t\t\t\tPosx:  startPos,\n\t\t\t}\n\t\t}\n\n\t\toperator = newOperator\n\t\tp.peeker.Read() // eat operator token\n\t\trhs, err = p.parseBinaryOps(remaining)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\tif operator != ast.ArithmeticOpInvalid {\n\t\treturn &ast.Arithmetic{\n\t\t\tOp:    operator,\n\t\t\tExprs: []ast.Node{lhs, rhs},\n\t\t\tPosx:  startPos,\n\t\t}, nil\n\t} else {\n\t\treturn lhs, nil\n\t}\n}\n\nfunc (p *parser) ParseExpressionTerm() (ast.Node, error) {\n\n\tnext := p.peeker.Peek()\n\n\tswitch next.Type {\n\n\tcase scanner.OPAREN:\n\t\tp.peeker.Read()\n\t\texpr, err := p.ParseExpression()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\terr = p.requireTokenType(scanner.CPAREN, `\")\"`)\n\t\treturn expr, err\n\n\tcase scanner.OQUOTE:\n\t\treturn p.ParseQuoted()\n\n\tcase scanner.INTEGER:\n\t\ttok := p.peeker.Read()\n\t\tval, err := strconv.Atoi(tok.Content)\n\t\tif err != nil {\n\t\t\treturn nil, TokenErrorf(tok, \"invalid integer: %s\", err)\n\t\t}\n\t\treturn &ast.LiteralNode{\n\t\t\tValue: val,\n\t\t\tTypex: ast.TypeInt,\n\t\t\tPosx:  tok.Pos,\n\t\t}, nil\n\n\tcase scanner.FLOAT:\n\t\ttok := p.peeker.Read()\n\t\tval, err := strconv.ParseFloat(tok.Content, 64)\n\t\tif err != nil {\n\t\t\treturn nil, TokenErrorf(tok, \"invalid float: %s\", err)\n\t\t}\n\t\treturn &ast.LiteralNode{\n\t\t\tValue: val,\n\t\t\tTypex: ast.TypeFloat,\n\t\t\tPosx:  tok.Pos,\n\t\t}, nil\n\n\tcase scanner.BOOL:\n\t\ttok := p.peeker.Read()\n\t\t// the scanner guarantees that tok.Content is either \"true\" or \"false\"\n\t\tvar val bool\n\t\tif tok.Content[0] == 't' {\n\t\t\tval = true\n\t\t} else {\n\t\t\tval = false\n\t\t}\n\t\treturn &ast.LiteralNode{\n\t\t\tValue: val,\n\t\t\tTypex: ast.TypeBool,\n\t\t\tPosx:  tok.Pos,\n\t\t}, nil\n\n\tcase scanner.MINUS:\n\t\topTok := p.peeker.Read()\n\t\t// important to use ParseExpressionTerm rather than ParseExpression\n\t\t// here, otherwise we can capture a following binary expression into\n\t\t// our negation.\n\t\t// e.g. -46+5 should parse as (0-46)+5, not 0-(46+5)\n\t\toperand, err := p.ParseExpressionTerm()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\t// The AST currently represents negative numbers as\n\t\t// a binary subtraction of the number from zero.\n\t\treturn &ast.Arithmetic{\n\t\t\tOp: ast.ArithmeticOpSub,\n\t\t\tExprs: []ast.Node{\n\t\t\t\t&ast.LiteralNode{\n\t\t\t\t\tValue: 0,\n\t\t\t\t\tTypex: ast.TypeInt,\n\t\t\t\t\tPosx:  opTok.Pos,\n\t\t\t\t},\n\t\t\t\toperand,\n\t\t\t},\n\t\t\tPosx: opTok.Pos,\n\t\t}, nil\n\n\tcase scanner.BANG:\n\t\topTok := p.peeker.Read()\n\t\t// important to use ParseExpressionTerm rather than ParseExpression\n\t\t// here, otherwise we can capture a following binary expression into\n\t\t// our negation.\n\t\toperand, err := p.ParseExpressionTerm()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\t// The AST currently represents binary negation as an equality\n\t\t// test with \"false\".\n\t\treturn &ast.Arithmetic{\n\t\t\tOp: ast.ArithmeticOpEqual,\n\t\t\tExprs: []ast.Node{\n\t\t\t\t&ast.LiteralNode{\n\t\t\t\t\tValue: false,\n\t\t\t\t\tTypex: ast.TypeBool,\n\t\t\t\t\tPosx:  opTok.Pos,\n\t\t\t\t},\n\t\t\t\toperand,\n\t\t\t},\n\t\t\tPosx: opTok.Pos,\n\t\t}, nil\n\n\tcase scanner.IDENTIFIER:\n\t\treturn p.ParseScopeInteraction()\n\n\tdefault:\n\t\treturn nil, ExpectationError(\"expression\", next)\n\t}\n}\n\n// ParseScopeInteraction parses the expression types that interact\n// with the evaluation scope: variable access, function calls, and\n// indexing.\n//\n// Indexing should actually be a distinct operator in its own right,\n// so that e.g. it can be applied to the result of a function call,\n// but for now we're preserving the behavior of the older yacc-based\n// parser.\nfunc (p *parser) ParseScopeInteraction() (ast.Node, error) {\n\tfirst := p.peeker.Read()\n\tstartPos := first.Pos\n\tif first.Type != scanner.IDENTIFIER {\n\t\treturn nil, ExpectationError(\"identifier\", first)\n\t}\n\n\tnext := p.peeker.Peek()\n\tif next.Type == scanner.OPAREN {\n\t\t// function call\n\t\tfuncName := first.Content\n\t\tp.peeker.Read() // eat paren\n\t\tvar args []ast.Node\n\n\t\tfor {\n\t\t\tif p.peeker.Peek().Type == scanner.CPAREN {\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\targ, err := p.ParseExpression()\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\n\t\t\targs = append(args, arg)\n\n\t\t\tif p.peeker.Peek().Type == scanner.COMMA {\n\t\t\t\tp.peeker.Read() // eat comma\n\t\t\t\tcontinue\n\t\t\t} else {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\terr := p.requireTokenType(scanner.CPAREN, `\")\"`)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\treturn &ast.Call{\n\t\t\tFunc: funcName,\n\t\t\tArgs: args,\n\t\t\tPosx: startPos,\n\t\t}, nil\n\t}\n\n\tvarNode := &ast.VariableAccess{\n\t\tName: first.Content,\n\t\tPosx: startPos,\n\t}\n\n\tif p.peeker.Peek().Type == scanner.OBRACKET {\n\t\t// index operator\n\t\tstartPos := p.peeker.Read().Pos // eat bracket\n\t\tindexExpr, err := p.ParseExpression()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\terr = p.requireTokenType(scanner.CBRACKET, `\"]\"`)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn &ast.Index{\n\t\t\tTarget: varNode,\n\t\t\tKey:    indexExpr,\n\t\t\tPosx:   startPos,\n\t\t}, nil\n\t}\n\n\treturn varNode, nil\n}\n\n// requireTokenType consumes the next token an returns an error if its\n// type does not match the given type. nil is returned if the type matches.\n//\n// This is a helper around peeker.Read() for situations where the parser just\n// wants to assert that a particular token type must be present.\nfunc (p *parser) requireTokenType(wantType scanner.TokenType, wantName string) error {\n\ttoken := p.peeker.Read()\n\tif token.Type != wantType {\n\t\treturn ExpectationError(wantName, token)\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hil/scanner/peeker.go",
    "content": "package scanner\n\n// Peeker is a utility that wraps a token channel returned by Scan and\n// provides an interface that allows a caller (e.g. the parser) to\n// work with the token stream in a mode that allows one token of lookahead,\n// and provides utilities for more convenient processing of the stream.\ntype Peeker struct {\n\tch     <-chan *Token\n\tpeeked *Token\n}\n\nfunc NewPeeker(ch <-chan *Token) *Peeker {\n\treturn &Peeker{\n\t\tch: ch,\n\t}\n}\n\n// Peek returns the next token in the stream without consuming it. A\n// subsequent call to Read will return the same token.\nfunc (p *Peeker) Peek() *Token {\n\tif p.peeked == nil {\n\t\tp.peeked = <-p.ch\n\t}\n\treturn p.peeked\n}\n\n// Read consumes the next token in the stream and returns it.\nfunc (p *Peeker) Read() *Token {\n\ttoken := p.Peek()\n\n\t// As a special case, we will produce the EOF token forever once\n\t// it is reached.\n\tif token.Type != EOF {\n\t\tp.peeked = nil\n\t}\n\n\treturn token\n}\n\n// Close ensures that the token stream has been exhausted, to prevent\n// the goroutine in the underlying scanner from leaking.\n//\n// It's not necessary to call this if the caller reads the token stream\n// to EOF, since that implicitly closes the scanner.\nfunc (p *Peeker) Close() {\n\tfor _ = range p.ch {\n\t\t// discard\n\t}\n\t// Install a synthetic EOF token in 'peeked' in case someone\n\t// erroneously calls Peek() or Read() after we've closed.\n\tp.peeked = &Token{\n\t\tType:    EOF,\n\t\tContent: \"\",\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hil/scanner/scanner.go",
    "content": "package scanner\n\nimport (\n\t\"unicode\"\n\t\"unicode/utf8\"\n\n\t\"github.com/hashicorp/hil/ast\"\n)\n\n// Scan returns a channel that recieves Tokens from the given input string.\n//\n// The scanner's job is just to partition the string into meaningful parts.\n// It doesn't do any transformation of the raw input string, so the caller\n// must deal with any further interpretation required, such as parsing INTEGER\n// tokens into real ints, or dealing with escape sequences in LITERAL or\n// STRING tokens.\n//\n// Strings in the returned tokens are slices from the original string.\n//\n// startPos should be set to ast.InitPos unless the caller knows that\n// this interpolation string is part of a larger file and knows the position\n// of the first character in that larger file.\nfunc Scan(s string, startPos ast.Pos) <-chan *Token {\n\tch := make(chan *Token)\n\tgo scan(s, ch, startPos)\n\treturn ch\n}\n\nfunc scan(s string, ch chan<- *Token, pos ast.Pos) {\n\t// 'remain' starts off as the whole string but we gradually\n\t// slice of the front of it as we work our way through.\n\tremain := s\n\n\t// nesting keeps track of how many ${ .. } sequences we are\n\t// inside, so we can recognize the minor differences in syntax\n\t// between outer string literals (LITERAL tokens) and quoted\n\t// string literals (STRING tokens).\n\tnesting := 0\n\n\t// We're going to flip back and forth between parsing literals/strings\n\t// and parsing interpolation sequences ${ .. } until we reach EOF or\n\t// some INVALID token.\nAll:\n\tfor {\n\t\tstartPos := pos\n\t\t// Literal string processing first, since the beginning of\n\t\t// a string is always outside of an interpolation sequence.\n\t\tliteralVal, terminator := scanLiteral(remain, pos, nesting > 0)\n\n\t\tif len(literalVal) > 0 {\n\t\t\tlitType := LITERAL\n\t\t\tif nesting > 0 {\n\t\t\t\tlitType = STRING\n\t\t\t}\n\t\t\tch <- &Token{\n\t\t\t\tType:    litType,\n\t\t\t\tContent: literalVal,\n\t\t\t\tPos:     startPos,\n\t\t\t}\n\t\t\tremain = remain[len(literalVal):]\n\t\t}\n\n\t\tch <- terminator\n\t\tremain = remain[len(terminator.Content):]\n\t\tpos = terminator.Pos\n\t\t// Safe to use len() here because none of the terminator tokens\n\t\t// can contain UTF-8 sequences.\n\t\tpos.Column = pos.Column + len(terminator.Content)\n\n\t\tswitch terminator.Type {\n\t\tcase INVALID:\n\t\t\t// Synthetic EOF after invalid token, since further scanning\n\t\t\t// is likely to just produce more garbage.\n\t\t\tch <- &Token{\n\t\t\t\tType:    EOF,\n\t\t\t\tContent: \"\",\n\t\t\t\tPos:     pos,\n\t\t\t}\n\t\t\tbreak All\n\t\tcase EOF:\n\t\t\t// All done!\n\t\t\tbreak All\n\t\tcase BEGIN:\n\t\t\tnesting++\n\t\tcase CQUOTE:\n\t\t\t// nothing special to do\n\t\tdefault:\n\t\t\t// Should never happen\n\t\t\tpanic(\"invalid string/literal terminator\")\n\t\t}\n\n\t\t// Now we do the processing of the insides of ${ .. } sequences.\n\t\t// This loop terminates when we encounter either a closing } or\n\t\t// an opening \", which will cause us to return to literal processing.\n\tInterpolation:\n\t\tfor {\n\n\t\t\ttoken, size, newPos := scanInterpolationToken(remain, pos)\n\t\t\tch <- token\n\t\t\tremain = remain[size:]\n\t\t\tpos = newPos\n\n\t\t\tswitch token.Type {\n\t\t\tcase INVALID:\n\t\t\t\t// Synthetic EOF after invalid token, since further scanning\n\t\t\t\t// is likely to just produce more garbage.\n\t\t\t\tch <- &Token{\n\t\t\t\t\tType:    EOF,\n\t\t\t\t\tContent: \"\",\n\t\t\t\t\tPos:     pos,\n\t\t\t\t}\n\t\t\t\tbreak All\n\t\t\tcase EOF:\n\t\t\t\t// All done\n\t\t\t\t// (though a syntax error that we'll catch in the parser)\n\t\t\t\tbreak All\n\t\t\tcase END:\n\t\t\t\tnesting--\n\t\t\t\tif nesting < 0 {\n\t\t\t\t\t// Can happen if there are unbalanced ${ and } sequences\n\t\t\t\t\t// in the input, which we'll catch in the parser.\n\t\t\t\t\tnesting = 0\n\t\t\t\t}\n\t\t\t\tbreak Interpolation\n\t\t\tcase OQUOTE:\n\t\t\t\t// Beginning of nested quoted string\n\t\t\t\tbreak Interpolation\n\t\t\t}\n\t\t}\n\t}\n\n\tclose(ch)\n}\n\n// Returns the token found at the start of the given string, followed by\n// the number of bytes that were consumed from the string and the adjusted\n// source position.\n//\n// Note that the number of bytes consumed can be more than the length of\n// the returned token contents if the string begins with whitespace, since\n// it will be silently consumed before reading the token.\nfunc scanInterpolationToken(s string, startPos ast.Pos) (*Token, int, ast.Pos) {\n\tpos := startPos\n\tsize := 0\n\n\t// Consume whitespace, if any\n\tfor len(s) > 0 && byteIsSpace(s[0]) {\n\t\tif s[0] == '\\n' {\n\t\t\tpos.Column = 1\n\t\t\tpos.Line++\n\t\t} else {\n\t\t\tpos.Column++\n\t\t}\n\t\tsize++\n\t\ts = s[1:]\n\t}\n\n\t// Unexpected EOF during sequence\n\tif len(s) == 0 {\n\t\treturn &Token{\n\t\t\tType:    EOF,\n\t\t\tContent: \"\",\n\t\t\tPos:     pos,\n\t\t}, size, pos\n\t}\n\n\tnext := s[0]\n\tvar token *Token\n\n\tswitch next {\n\tcase '(', ')', '[', ']', ',', '.', '+', '-', '*', '/', '%', '?', ':':\n\t\t// Easy punctuation symbols that don't have any special meaning\n\t\t// during scanning, and that stand for themselves in the\n\t\t// TokenType enumeration.\n\t\ttoken = &Token{\n\t\t\tType:    TokenType(next),\n\t\t\tContent: s[:1],\n\t\t\tPos:     pos,\n\t\t}\n\tcase '}':\n\t\ttoken = &Token{\n\t\t\tType:    END,\n\t\t\tContent: s[:1],\n\t\t\tPos:     pos,\n\t\t}\n\tcase '\"':\n\t\ttoken = &Token{\n\t\t\tType:    OQUOTE,\n\t\t\tContent: s[:1],\n\t\t\tPos:     pos,\n\t\t}\n\tcase '!':\n\t\tif len(s) >= 2 && s[:2] == \"!=\" {\n\t\t\ttoken = &Token{\n\t\t\t\tType:    NOTEQUAL,\n\t\t\t\tContent: s[:2],\n\t\t\t\tPos:     pos,\n\t\t\t}\n\t\t} else {\n\t\t\ttoken = &Token{\n\t\t\t\tType:    BANG,\n\t\t\t\tContent: s[:1],\n\t\t\t\tPos:     pos,\n\t\t\t}\n\t\t}\n\tcase '<':\n\t\tif len(s) >= 2 && s[:2] == \"<=\" {\n\t\t\ttoken = &Token{\n\t\t\t\tType:    LTE,\n\t\t\t\tContent: s[:2],\n\t\t\t\tPos:     pos,\n\t\t\t}\n\t\t} else {\n\t\t\ttoken = &Token{\n\t\t\t\tType:    LT,\n\t\t\t\tContent: s[:1],\n\t\t\t\tPos:     pos,\n\t\t\t}\n\t\t}\n\tcase '>':\n\t\tif len(s) >= 2 && s[:2] == \">=\" {\n\t\t\ttoken = &Token{\n\t\t\t\tType:    GTE,\n\t\t\t\tContent: s[:2],\n\t\t\t\tPos:     pos,\n\t\t\t}\n\t\t} else {\n\t\t\ttoken = &Token{\n\t\t\t\tType:    GT,\n\t\t\t\tContent: s[:1],\n\t\t\t\tPos:     pos,\n\t\t\t}\n\t\t}\n\tcase '=':\n\t\tif len(s) >= 2 && s[:2] == \"==\" {\n\t\t\ttoken = &Token{\n\t\t\t\tType:    EQUAL,\n\t\t\t\tContent: s[:2],\n\t\t\t\tPos:     pos,\n\t\t\t}\n\t\t} else {\n\t\t\t// A single equals is not a valid operator\n\t\t\ttoken = &Token{\n\t\t\t\tType:    INVALID,\n\t\t\t\tContent: s[:1],\n\t\t\t\tPos:     pos,\n\t\t\t}\n\t\t}\n\tcase '&':\n\t\tif len(s) >= 2 && s[:2] == \"&&\" {\n\t\t\ttoken = &Token{\n\t\t\t\tType:    AND,\n\t\t\t\tContent: s[:2],\n\t\t\t\tPos:     pos,\n\t\t\t}\n\t\t} else {\n\t\t\ttoken = &Token{\n\t\t\t\tType:    INVALID,\n\t\t\t\tContent: s[:1],\n\t\t\t\tPos:     pos,\n\t\t\t}\n\t\t}\n\tcase '|':\n\t\tif len(s) >= 2 && s[:2] == \"||\" {\n\t\t\ttoken = &Token{\n\t\t\t\tType:    OR,\n\t\t\t\tContent: s[:2],\n\t\t\t\tPos:     pos,\n\t\t\t}\n\t\t} else {\n\t\t\ttoken = &Token{\n\t\t\t\tType:    INVALID,\n\t\t\t\tContent: s[:1],\n\t\t\t\tPos:     pos,\n\t\t\t}\n\t\t}\n\tdefault:\n\t\tif next >= '0' && next <= '9' {\n\t\t\tnum, numType := scanNumber(s)\n\t\t\ttoken = &Token{\n\t\t\t\tType:    numType,\n\t\t\t\tContent: num,\n\t\t\t\tPos:     pos,\n\t\t\t}\n\t\t} else if stringStartsWithIdentifier(s) {\n\t\t\tident, runeLen := scanIdentifier(s)\n\t\t\ttokenType := IDENTIFIER\n\t\t\tif ident == \"true\" || ident == \"false\" {\n\t\t\t\ttokenType = BOOL\n\t\t\t}\n\t\t\ttoken = &Token{\n\t\t\t\tType:    tokenType,\n\t\t\t\tContent: ident,\n\t\t\t\tPos:     pos,\n\t\t\t}\n\t\t\t// Skip usual token handling because it doesn't\n\t\t\t// know how to deal with UTF-8 sequences.\n\t\t\tpos.Column = pos.Column + runeLen\n\t\t\treturn token, size + len(ident), pos\n\t\t} else {\n\t\t\t_, byteLen := utf8.DecodeRuneInString(s)\n\t\t\ttoken = &Token{\n\t\t\t\tType:    INVALID,\n\t\t\t\tContent: s[:byteLen],\n\t\t\t\tPos:     pos,\n\t\t\t}\n\t\t\t// Skip usual token handling because it doesn't\n\t\t\t// know how to deal with UTF-8 sequences.\n\t\t\tpos.Column = pos.Column + 1\n\t\t\treturn token, size + byteLen, pos\n\t\t}\n\t}\n\n\t// Here we assume that the token content contains no UTF-8 sequences,\n\t// because we dealt with UTF-8 characters as a special case where\n\t// necessary above.\n\tsize = size + len(token.Content)\n\tpos.Column = pos.Column + len(token.Content)\n\n\treturn token, size, pos\n}\n\n// Returns the (possibly-empty) prefix of the given string that represents\n// a literal, followed by the token that marks the end of the literal.\nfunc scanLiteral(s string, startPos ast.Pos, nested bool) (string, *Token) {\n\tlitLen := 0\n\tpos := startPos\n\tvar terminator *Token\n\tfor {\n\n\t\tif litLen >= len(s) {\n\t\t\tif nested {\n\t\t\t\t// We've ended in the middle of a quoted string,\n\t\t\t\t// which means this token is actually invalid.\n\t\t\t\treturn \"\", &Token{\n\t\t\t\t\tType:    INVALID,\n\t\t\t\t\tContent: s,\n\t\t\t\t\tPos:     startPos,\n\t\t\t\t}\n\t\t\t}\n\t\t\tterminator = &Token{\n\t\t\t\tType:    EOF,\n\t\t\t\tContent: \"\",\n\t\t\t\tPos:     pos,\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\n\t\tnext := s[litLen]\n\n\t\tif next == '$' && len(s) > litLen+1 {\n\t\t\tfollow := s[litLen+1]\n\n\t\t\tif follow == '{' {\n\t\t\t\tterminator = &Token{\n\t\t\t\t\tType:    BEGIN,\n\t\t\t\t\tContent: s[litLen : litLen+2],\n\t\t\t\t\tPos:     pos,\n\t\t\t\t}\n\t\t\t\tpos.Column = pos.Column + 2\n\t\t\t\tbreak\n\t\t\t} else if follow == '$' {\n\t\t\t\t// Double-$ escapes the special processing of $,\n\t\t\t\t// so we will consume both characters here.\n\t\t\t\tpos.Column = pos.Column + 2\n\t\t\t\tlitLen = litLen + 2\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\t// special handling that applies only to quoted strings\n\t\tif nested {\n\t\t\tif next == '\"' {\n\t\t\t\tterminator = &Token{\n\t\t\t\t\tType:    CQUOTE,\n\t\t\t\t\tContent: s[litLen : litLen+1],\n\t\t\t\t\tPos:     pos,\n\t\t\t\t}\n\t\t\t\tpos.Column = pos.Column + 1\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\t// Escaped quote marks do not terminate the string.\n\t\t\t//\n\t\t\t// All we do here in the scanner is avoid terminating a string\n\t\t\t// due to an escaped quote. The parser is responsible for the\n\t\t\t// full handling of escape sequences, since it's able to produce\n\t\t\t// better error messages than we can produce in here.\n\t\t\tif next == '\\\\' && len(s) > litLen+1 {\n\t\t\t\tfollow := s[litLen+1]\n\n\t\t\t\tif follow == '\"' {\n\t\t\t\t\t// \\\" escapes the special processing of \",\n\t\t\t\t\t// so we will consume both characters here.\n\t\t\t\t\tpos.Column = pos.Column + 2\n\t\t\t\t\tlitLen = litLen + 2\n\t\t\t\t\tcontinue\n\t\t\t\t} else if follow == '\\\\' {\n\t\t\t\t\t// \\\\ escapes \\\n\t\t\t\t\t// so we will consume both characters here.\n\t\t\t\t\tpos.Column = pos.Column + 2\n\t\t\t\t\tlitLen = litLen + 2\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif next == '\\n' {\n\t\t\tpos.Column = 1\n\t\t\tpos.Line++\n\t\t\tlitLen++\n\t\t} else {\n\t\t\tpos.Column++\n\n\t\t\t// \"Column\" measures runes, so we need to actually consume\n\t\t\t// a valid UTF-8 character here.\n\t\t\t_, size := utf8.DecodeRuneInString(s[litLen:])\n\t\t\tlitLen = litLen + size\n\t\t}\n\n\t}\n\n\treturn s[:litLen], terminator\n}\n\n// scanNumber returns the extent of the prefix of the string that represents\n// a valid number, along with what type of number it represents: INT or FLOAT.\n//\n// scanNumber does only basic character analysis: numbers consist of digits\n// and periods, with at least one period signalling a FLOAT. It's the parser's\n// responsibility to validate the form and range of the number, such as ensuring\n// that a FLOAT actually contains only one period, etc.\nfunc scanNumber(s string) (string, TokenType) {\n\tperiod := -1\n\tbyteLen := 0\n\tnumType := INTEGER\n\tfor {\n\t\tif byteLen >= len(s) {\n\t\t\tbreak\n\t\t}\n\n\t\tnext := s[byteLen]\n\t\tif next != '.' && (next < '0' || next > '9') {\n\t\t\t// If our last value was a period, then we're not a float,\n\t\t\t// we're just an integer that ends in a period.\n\t\t\tif period == byteLen-1 {\n\t\t\t\tbyteLen--\n\t\t\t\tnumType = INTEGER\n\t\t\t}\n\n\t\t\tbreak\n\t\t}\n\n\t\tif next == '.' {\n\t\t\t// If we've already seen a period, break out\n\t\t\tif period >= 0 {\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\tperiod = byteLen\n\t\t\tnumType = FLOAT\n\t\t}\n\n\t\tbyteLen++\n\t}\n\n\treturn s[:byteLen], numType\n}\n\n// scanIdentifier returns the extent of the prefix of the string that\n// represents a valid identifier, along with the length of that prefix\n// in runes.\n//\n// Identifiers may contain utf8-encoded non-Latin letters, which will\n// cause the returned \"rune length\" to be shorter than the byte length\n// of the returned string.\nfunc scanIdentifier(s string) (string, int) {\n\tbyteLen := 0\n\truneLen := 0\n\tfor {\n\t\tif byteLen >= len(s) {\n\t\t\tbreak\n\t\t}\n\n\t\tnextRune, size := utf8.DecodeRuneInString(s[byteLen:])\n\t\tif !(nextRune == '_' ||\n\t\t\tnextRune == '-' ||\n\t\t\tnextRune == '.' ||\n\t\t\tnextRune == '*' ||\n\t\t\tunicode.IsNumber(nextRune) ||\n\t\t\tunicode.IsLetter(nextRune) ||\n\t\t\tunicode.IsMark(nextRune)) {\n\t\t\tbreak\n\t\t}\n\n\t\t// If we reach a star, it must be between periods to be part\n\t\t// of the same identifier.\n\t\tif nextRune == '*' && s[byteLen-1] != '.' {\n\t\t\tbreak\n\t\t}\n\n\t\t// If our previous character was a star, then the current must\n\t\t// be period. Otherwise, undo that and exit.\n\t\tif byteLen > 0 && s[byteLen-1] == '*' && nextRune != '.' {\n\t\t\tbyteLen--\n\t\t\tif s[byteLen-1] == '.' {\n\t\t\t\tbyteLen--\n\t\t\t}\n\n\t\t\tbreak\n\t\t}\n\n\t\tbyteLen = byteLen + size\n\t\truneLen = runeLen + 1\n\t}\n\n\treturn s[:byteLen], runeLen\n}\n\n// byteIsSpace implements a restrictive interpretation of spaces that includes\n// only what's valid inside interpolation sequences: spaces, tabs, newlines.\nfunc byteIsSpace(b byte) bool {\n\tswitch b {\n\tcase ' ', '\\t', '\\r', '\\n':\n\t\treturn true\n\tdefault:\n\t\treturn false\n\t}\n}\n\n// stringStartsWithIdentifier returns true if the given string begins with\n// a character that is a legal start of an identifier: an underscore or\n// any character that Unicode considers to be a letter.\nfunc stringStartsWithIdentifier(s string) bool {\n\tif len(s) == 0 {\n\t\treturn false\n\t}\n\n\tfirst := s[0]\n\n\t// Easy ASCII cases first\n\tif (first >= 'a' && first <= 'z') || (first >= 'A' && first <= 'Z') || first == '_' {\n\t\treturn true\n\t}\n\n\t// If our first byte begins a UTF-8 sequence then the sequence might\n\t// be a unicode letter.\n\tif utf8.RuneStart(first) {\n\t\tfirstRune, _ := utf8.DecodeRuneInString(s)\n\t\tif unicode.IsLetter(firstRune) {\n\t\t\treturn true\n\t\t}\n\t}\n\n\treturn false\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hil/scanner/token.go",
    "content": "package scanner\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/hashicorp/hil/ast\"\n)\n\ntype Token struct {\n\tType    TokenType\n\tContent string\n\tPos     ast.Pos\n}\n\n//go:generate stringer -type=TokenType\ntype TokenType rune\n\nconst (\n\t// Raw string data outside of ${ .. } sequences\n\tLITERAL TokenType = 'o'\n\n\t// STRING is like a LITERAL but it's inside a quoted string\n\t// within a ${ ... } sequence, and so it can contain backslash\n\t// escaping.\n\tSTRING TokenType = 'S'\n\n\t// Other Literals\n\tINTEGER TokenType = 'I'\n\tFLOAT   TokenType = 'F'\n\tBOOL    TokenType = 'B'\n\n\tBEGIN    TokenType = '$' // actually \"${\"\n\tEND      TokenType = '}'\n\tOQUOTE   TokenType = '“' // Opening quote of a nested quoted sequence\n\tCQUOTE   TokenType = '”' // Closing quote of a nested quoted sequence\n\tOPAREN   TokenType = '('\n\tCPAREN   TokenType = ')'\n\tOBRACKET TokenType = '['\n\tCBRACKET TokenType = ']'\n\tCOMMA    TokenType = ','\n\n\tIDENTIFIER TokenType = 'i'\n\n\tPERIOD  TokenType = '.'\n\tPLUS    TokenType = '+'\n\tMINUS   TokenType = '-'\n\tSTAR    TokenType = '*'\n\tSLASH   TokenType = '/'\n\tPERCENT TokenType = '%'\n\n\tAND  TokenType = '∧'\n\tOR   TokenType = '∨'\n\tBANG TokenType = '!'\n\n\tEQUAL    TokenType = '='\n\tNOTEQUAL TokenType = '≠'\n\tGT       TokenType = '>'\n\tLT       TokenType = '<'\n\tGTE      TokenType = '≥'\n\tLTE      TokenType = '≤'\n\n\tQUESTION TokenType = '?'\n\tCOLON    TokenType = ':'\n\n\tEOF TokenType = '␄'\n\n\t// Produced for sequences that cannot be understood as valid tokens\n\t// e.g. due to use of unrecognized punctuation.\n\tINVALID TokenType = '�'\n)\n\nfunc (t *Token) String() string {\n\tswitch t.Type {\n\tcase EOF:\n\t\treturn \"end of string\"\n\tcase INVALID:\n\t\treturn fmt.Sprintf(\"invalid sequence %q\", t.Content)\n\tcase INTEGER:\n\t\treturn fmt.Sprintf(\"integer %s\", t.Content)\n\tcase FLOAT:\n\t\treturn fmt.Sprintf(\"float %s\", t.Content)\n\tcase STRING:\n\t\treturn fmt.Sprintf(\"string %q\", t.Content)\n\tcase LITERAL:\n\t\treturn fmt.Sprintf(\"literal %q\", t.Content)\n\tcase OQUOTE:\n\t\treturn fmt.Sprintf(\"opening quote\")\n\tcase CQUOTE:\n\t\treturn fmt.Sprintf(\"closing quote\")\n\tcase AND:\n\t\treturn \"&&\"\n\tcase OR:\n\t\treturn \"||\"\n\tcase NOTEQUAL:\n\t\treturn \"!=\"\n\tcase GTE:\n\t\treturn \">=\"\n\tcase LTE:\n\t\treturn \"<=\"\n\tdefault:\n\t\t// The remaining token types have content that\n\t\t// speaks for itself.\n\t\treturn fmt.Sprintf(\"%q\", t.Content)\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hil/scanner/tokentype_string.go",
    "content": "// Code generated by \"stringer -type=TokenType\"; DO NOT EDIT\n\npackage scanner\n\nimport \"fmt\"\n\nconst _TokenType_name = \"BANGBEGINPERCENTOPARENCPARENSTARPLUSCOMMAMINUSPERIODSLASHCOLONLTEQUALGTQUESTIONBOOLFLOATINTEGERSTRINGOBRACKETCBRACKETIDENTIFIERLITERALENDOQUOTECQUOTEANDORNOTEQUALLTEGTEEOFINVALID\"\n\nvar _TokenType_map = map[TokenType]string{\n\t33:    _TokenType_name[0:4],\n\t36:    _TokenType_name[4:9],\n\t37:    _TokenType_name[9:16],\n\t40:    _TokenType_name[16:22],\n\t41:    _TokenType_name[22:28],\n\t42:    _TokenType_name[28:32],\n\t43:    _TokenType_name[32:36],\n\t44:    _TokenType_name[36:41],\n\t45:    _TokenType_name[41:46],\n\t46:    _TokenType_name[46:52],\n\t47:    _TokenType_name[52:57],\n\t58:    _TokenType_name[57:62],\n\t60:    _TokenType_name[62:64],\n\t61:    _TokenType_name[64:69],\n\t62:    _TokenType_name[69:71],\n\t63:    _TokenType_name[71:79],\n\t66:    _TokenType_name[79:83],\n\t70:    _TokenType_name[83:88],\n\t73:    _TokenType_name[88:95],\n\t83:    _TokenType_name[95:101],\n\t91:    _TokenType_name[101:109],\n\t93:    _TokenType_name[109:117],\n\t105:   _TokenType_name[117:127],\n\t111:   _TokenType_name[127:134],\n\t125:   _TokenType_name[134:137],\n\t8220:  _TokenType_name[137:143],\n\t8221:  _TokenType_name[143:149],\n\t8743:  _TokenType_name[149:152],\n\t8744:  _TokenType_name[152:154],\n\t8800:  _TokenType_name[154:162],\n\t8804:  _TokenType_name[162:165],\n\t8805:  _TokenType_name[165:168],\n\t9220:  _TokenType_name[168:171],\n\t65533: _TokenType_name[171:178],\n}\n\nfunc (i TokenType) String() string {\n\tif str, ok := _TokenType_map[i]; ok {\n\t\treturn str\n\t}\n\treturn fmt.Sprintf(\"TokenType(%d)\", i)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hil/transform_fixed.go",
    "content": "package hil\n\nimport (\n\t\"github.com/hashicorp/hil/ast\"\n)\n\n// FixedValueTransform transforms an AST to return a fixed value for\n// all interpolations. i.e. you can make \"hi ${anything}\" always\n// turn into \"hi foo\".\n//\n// The primary use case for this is for config validations where you can\n// verify that interpolations result in a certain type of string.\nfunc FixedValueTransform(root ast.Node, Value *ast.LiteralNode) ast.Node {\n\t// We visit the nodes in top-down order\n\tresult := root\n\tswitch n := result.(type) {\n\tcase *ast.Output:\n\t\tfor i, v := range n.Exprs {\n\t\t\tn.Exprs[i] = FixedValueTransform(v, Value)\n\t\t}\n\tcase *ast.LiteralNode:\n\t\t// We keep it as-is\n\tdefault:\n\t\t// Anything else we replace\n\t\tresult = Value\n\t}\n\n\treturn result\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/hil/walk.go",
    "content": "package hil\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\t\"strings\"\n\n\t\"github.com/hashicorp/hil/ast\"\n\t\"github.com/mitchellh/reflectwalk\"\n)\n\n// WalkFn is the type of function to pass to Walk. Modify fields within\n// WalkData to control whether replacement happens.\ntype WalkFn func(*WalkData) error\n\n// WalkData is the structure passed to the callback of the Walk function.\n//\n// This structure contains data passed in as well as fields that are expected\n// to be written by the caller as a result. Please see the documentation for\n// each field for more information.\ntype WalkData struct {\n\t// Root is the parsed root of this HIL program\n\tRoot ast.Node\n\n\t// Location is the location within the structure where this\n\t// value was found. This can be used to modify behavior within\n\t// slices and so on.\n\tLocation reflectwalk.Location\n\n\t// The below two values must be set by the callback to have any effect.\n\t//\n\t// Replace, if true, will replace the value in the structure with\n\t// ReplaceValue. It is up to the caller to make sure this is a string.\n\tReplace      bool\n\tReplaceValue string\n}\n\n// Walk will walk an arbitrary Go structure and parse any string as an\n// HIL program and call the callback cb to determine what to replace it\n// with.\n//\n// This function is very useful for arbitrary HIL program interpolation\n// across a complex configuration structure. Due to the heavy use of\n// reflection in this function, it is recommend to write many unit tests\n// with your typical configuration structures to hilp mitigate the risk\n// of panics.\nfunc Walk(v interface{}, cb WalkFn) error {\n\twalker := &interpolationWalker{F: cb}\n\treturn reflectwalk.Walk(v, walker)\n}\n\n// interpolationWalker implements interfaces for the reflectwalk package\n// (github.com/mitchellh/reflectwalk) that can be used to automatically\n// execute a callback for an interpolation.\ntype interpolationWalker struct {\n\tF WalkFn\n\n\tkey         []string\n\tlastValue   reflect.Value\n\tloc         reflectwalk.Location\n\tcs          []reflect.Value\n\tcsKey       []reflect.Value\n\tcsData      interface{}\n\tsliceIndex  int\n\tunknownKeys []string\n}\n\nfunc (w *interpolationWalker) Enter(loc reflectwalk.Location) error {\n\tw.loc = loc\n\treturn nil\n}\n\nfunc (w *interpolationWalker) Exit(loc reflectwalk.Location) error {\n\tw.loc = reflectwalk.None\n\n\tswitch loc {\n\tcase reflectwalk.Map:\n\t\tw.cs = w.cs[:len(w.cs)-1]\n\tcase reflectwalk.MapValue:\n\t\tw.key = w.key[:len(w.key)-1]\n\t\tw.csKey = w.csKey[:len(w.csKey)-1]\n\tcase reflectwalk.Slice:\n\t\t// Split any values that need to be split\n\t\tw.splitSlice()\n\t\tw.cs = w.cs[:len(w.cs)-1]\n\tcase reflectwalk.SliceElem:\n\t\tw.csKey = w.csKey[:len(w.csKey)-1]\n\t}\n\n\treturn nil\n}\n\nfunc (w *interpolationWalker) Map(m reflect.Value) error {\n\tw.cs = append(w.cs, m)\n\treturn nil\n}\n\nfunc (w *interpolationWalker) MapElem(m, k, v reflect.Value) error {\n\tw.csData = k\n\tw.csKey = append(w.csKey, k)\n\tw.key = append(w.key, k.String())\n\tw.lastValue = v\n\treturn nil\n}\n\nfunc (w *interpolationWalker) Slice(s reflect.Value) error {\n\tw.cs = append(w.cs, s)\n\treturn nil\n}\n\nfunc (w *interpolationWalker) SliceElem(i int, elem reflect.Value) error {\n\tw.csKey = append(w.csKey, reflect.ValueOf(i))\n\tw.sliceIndex = i\n\treturn nil\n}\n\nfunc (w *interpolationWalker) Primitive(v reflect.Value) error {\n\tsetV := v\n\n\t// We only care about strings\n\tif v.Kind() == reflect.Interface {\n\t\tsetV = v\n\t\tv = v.Elem()\n\t}\n\tif v.Kind() != reflect.String {\n\t\treturn nil\n\t}\n\n\tastRoot, err := Parse(v.String())\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// If the AST we got is just a literal string value with the same\n\t// value then we ignore it. We have to check if its the same value\n\t// because it is possible to input a string, get out a string, and\n\t// have it be different. For example: \"foo-$${bar}\" turns into\n\t// \"foo-${bar}\"\n\tif n, ok := astRoot.(*ast.LiteralNode); ok {\n\t\tif s, ok := n.Value.(string); ok && s == v.String() {\n\t\t\treturn nil\n\t\t}\n\t}\n\n\tif w.F == nil {\n\t\treturn nil\n\t}\n\n\tdata := WalkData{Root: astRoot, Location: w.loc}\n\tif err := w.F(&data); err != nil {\n\t\treturn fmt.Errorf(\n\t\t\t\"%s in:\\n\\n%s\",\n\t\t\terr, v.String())\n\t}\n\n\tif data.Replace {\n\t\t/*\n\t\t\tif remove {\n\t\t\t\tw.removeCurrent()\n\t\t\t\treturn nil\n\t\t\t}\n\t\t*/\n\n\t\tresultVal := reflect.ValueOf(data.ReplaceValue)\n\t\tswitch w.loc {\n\t\tcase reflectwalk.MapKey:\n\t\t\tm := w.cs[len(w.cs)-1]\n\n\t\t\t// Delete the old value\n\t\t\tvar zero reflect.Value\n\t\t\tm.SetMapIndex(w.csData.(reflect.Value), zero)\n\n\t\t\t// Set the new key with the existing value\n\t\t\tm.SetMapIndex(resultVal, w.lastValue)\n\n\t\t\t// Set the key to be the new key\n\t\t\tw.csData = resultVal\n\t\tcase reflectwalk.MapValue:\n\t\t\t// If we're in a map, then the only way to set a map value is\n\t\t\t// to set it directly.\n\t\t\tm := w.cs[len(w.cs)-1]\n\t\t\tmk := w.csData.(reflect.Value)\n\t\t\tm.SetMapIndex(mk, resultVal)\n\t\tdefault:\n\t\t\t// Otherwise, we should be addressable\n\t\t\tsetV.Set(resultVal)\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (w *interpolationWalker) removeCurrent() {\n\t// Append the key to the unknown keys\n\tw.unknownKeys = append(w.unknownKeys, strings.Join(w.key, \".\"))\n\n\tfor i := 1; i <= len(w.cs); i++ {\n\t\tc := w.cs[len(w.cs)-i]\n\t\tswitch c.Kind() {\n\t\tcase reflect.Map:\n\t\t\t// Zero value so that we delete the map key\n\t\t\tvar val reflect.Value\n\n\t\t\t// Get the key and delete it\n\t\t\tk := w.csData.(reflect.Value)\n\t\t\tc.SetMapIndex(k, val)\n\t\t\treturn\n\t\t}\n\t}\n\n\tpanic(\"No container found for removeCurrent\")\n}\n\nfunc (w *interpolationWalker) replaceCurrent(v reflect.Value) {\n\tc := w.cs[len(w.cs)-2]\n\tswitch c.Kind() {\n\tcase reflect.Map:\n\t\t// Get the key and delete it\n\t\tk := w.csKey[len(w.csKey)-1]\n\t\tc.SetMapIndex(k, v)\n\t}\n}\n\nfunc (w *interpolationWalker) splitSlice() {\n\t// Get the []interface{} slice so we can do some operations on\n\t// it without dealing with reflection. We'll document each step\n\t// here to be clear.\n\tvar s []interface{}\n\traw := w.cs[len(w.cs)-1]\n\tswitch v := raw.Interface().(type) {\n\tcase []interface{}:\n\t\ts = v\n\tcase []map[string]interface{}:\n\t\treturn\n\tdefault:\n\t\tpanic(\"Unknown kind: \" + raw.Kind().String())\n\t}\n\n\t// Check if we have any elements that we need to split. If not, then\n\t// just return since we're done.\n\tsplit := false\n\tif !split {\n\t\treturn\n\t}\n\n\t// Make a new result slice that is twice the capacity to fit our growth.\n\tresult := make([]interface{}, 0, len(s)*2)\n\n\t// Go over each element of the original slice and start building up\n\t// the resulting slice by splitting where we have to.\n\tfor _, v := range s {\n\t\tsv, ok := v.(string)\n\t\tif !ok {\n\t\t\t// Not a string, so just set it\n\t\t\tresult = append(result, v)\n\t\t\tcontinue\n\t\t}\n\n\t\t// Not a string list, so just set it\n\t\tresult = append(result, sv)\n\t}\n\n\t// Our slice is now done, we have to replace the slice now\n\t// with this new one that we have.\n\tw.replaceCurrent(reflect.ValueOf(result))\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/logutils/LICENSE",
    "content": "Mozilla Public License, version 2.0\n\n1. Definitions\n\n1.1. “Contributor”\n\n     means each individual or legal entity that creates, contributes to the\n     creation of, or owns Covered Software.\n\n1.2. “Contributor Version”\n\n     means the combination of the Contributions of others (if any) used by a\n     Contributor and that particular Contributor’s Contribution.\n\n1.3. “Contribution”\n\n     means Covered Software of a particular Contributor.\n\n1.4. “Covered Software”\n\n     means Source Code Form to which the initial Contributor has attached the\n     notice in Exhibit A, the Executable Form of such Source Code Form, and\n     Modifications of such Source Code Form, in each case including portions\n     thereof.\n\n1.5. “Incompatible With Secondary Licenses”\n     means\n\n     a. that the initial Contributor has attached the notice described in\n        Exhibit B to the Covered Software; or\n\n     b. that the Covered Software was made available under the terms of version\n        1.1 or earlier of the License, but not also under the terms of a\n        Secondary License.\n\n1.6. “Executable Form”\n\n     means any form of the work other than Source Code Form.\n\n1.7. “Larger Work”\n\n     means a work that combines Covered Software with other material, in a separate\n     file or files, that is not Covered Software.\n\n1.8. “License”\n\n     means this document.\n\n1.9. “Licensable”\n\n     means having the right to grant, to the maximum extent possible, whether at the\n     time of the initial grant or subsequently, any and all of the rights conveyed by\n     this License.\n\n1.10. “Modifications”\n\n     means any of the following:\n\n     a. any file in Source Code Form that results from an addition to, deletion\n        from, or modification of the contents of Covered Software; or\n\n     b. any new file in Source Code Form that contains any Covered Software.\n\n1.11. “Patent Claims” of a Contributor\n\n      means any patent claim(s), including without limitation, method, process,\n      and apparatus claims, in any patent Licensable by such Contributor that\n      would be infringed, but for the grant of the License, by the making,\n      using, selling, offering for sale, having made, import, or transfer of\n      either its Contributions or its Contributor Version.\n\n1.12. “Secondary License”\n\n      means either the GNU General Public License, Version 2.0, the GNU Lesser\n      General Public License, Version 2.1, the GNU Affero General Public\n      License, Version 3.0, or any later versions of those licenses.\n\n1.13. “Source Code Form”\n\n      means the form of the work preferred for making modifications.\n\n1.14. “You” (or “Your”)\n\n      means an individual or a legal entity exercising rights under this\n      License. For legal entities, “You” includes any entity that controls, is\n      controlled by, or is under common control with You. For purposes of this\n      definition, “control” means (a) the power, direct or indirect, to cause\n      the direction or management of such entity, whether by contract or\n      otherwise, or (b) ownership of more than fifty percent (50%) of the\n      outstanding shares or beneficial ownership of such entity.\n\n\n2. License Grants and Conditions\n\n2.1. Grants\n\n     Each Contributor hereby grants You a world-wide, royalty-free,\n     non-exclusive license:\n\n     a. under intellectual property rights (other than patent or trademark)\n        Licensable by such Contributor to use, reproduce, make available,\n        modify, display, perform, distribute, and otherwise exploit its\n        Contributions, either on an unmodified basis, with Modifications, or as\n        part of a Larger Work; and\n\n     b. under Patent Claims of such Contributor to make, use, sell, offer for\n        sale, have made, import, and otherwise transfer either its Contributions\n        or its Contributor Version.\n\n2.2. Effective Date\n\n     The licenses granted in Section 2.1 with respect to any Contribution become\n     effective for each Contribution on the date the Contributor first distributes\n     such Contribution.\n\n2.3. Limitations on Grant Scope\n\n     The licenses granted in this Section 2 are the only rights granted under this\n     License. No additional rights or licenses will be implied from the distribution\n     or licensing of Covered Software under this License. Notwithstanding Section\n     2.1(b) above, no patent license is granted by a Contributor:\n\n     a. for any code that a Contributor has removed from Covered Software; or\n\n     b. for infringements caused by: (i) Your and any other third party’s\n        modifications of Covered Software, or (ii) the combination of its\n        Contributions with other software (except as part of its Contributor\n        Version); or\n\n     c. under Patent Claims infringed by Covered Software in the absence of its\n        Contributions.\n\n     This License does not grant any rights in the trademarks, service marks, or\n     logos of any Contributor (except as may be necessary to comply with the\n     notice requirements in Section 3.4).\n\n2.4. Subsequent Licenses\n\n     No Contributor makes additional grants as a result of Your choice to\n     distribute the Covered Software under a subsequent version of this License\n     (see Section 10.2) or under the terms of a Secondary License (if permitted\n     under the terms of Section 3.3).\n\n2.5. Representation\n\n     Each Contributor represents that the Contributor believes its Contributions\n     are its original creation(s) or it has sufficient rights to grant the\n     rights to its Contributions conveyed by this License.\n\n2.6. Fair Use\n\n     This License is not intended to limit any rights You have under applicable\n     copyright doctrines of fair use, fair dealing, or other equivalents.\n\n2.7. Conditions\n\n     Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in\n     Section 2.1.\n\n\n3. Responsibilities\n\n3.1. Distribution of Source Form\n\n     All distribution of Covered Software in Source Code Form, including any\n     Modifications that You create or to which You contribute, must be under the\n     terms of this License. You must inform recipients that the Source Code Form\n     of the Covered Software is governed by the terms of this License, and how\n     they can obtain a copy of this License. You may not attempt to alter or\n     restrict the recipients’ rights in the Source Code Form.\n\n3.2. Distribution of Executable Form\n\n     If You distribute Covered Software in Executable Form then:\n\n     a. such Covered Software must also be made available in Source Code Form,\n        as described in Section 3.1, and You must inform recipients of the\n        Executable Form how they can obtain a copy of such Source Code Form by\n        reasonable means in a timely manner, at a charge no more than the cost\n        of distribution to the recipient; and\n\n     b. You may distribute such Executable Form under the terms of this License,\n        or sublicense it under different terms, provided that the license for\n        the Executable Form does not attempt to limit or alter the recipients’\n        rights in the Source Code Form under this License.\n\n3.3. Distribution of a Larger Work\n\n     You may create and distribute a Larger Work under terms of Your choice,\n     provided that You also comply with the requirements of this License for the\n     Covered Software. If the Larger Work is a combination of Covered Software\n     with a work governed by one or more Secondary Licenses, and the Covered\n     Software is not Incompatible With Secondary Licenses, this License permits\n     You to additionally distribute such Covered Software under the terms of\n     such Secondary License(s), so that the recipient of the Larger Work may, at\n     their option, further distribute the Covered Software under the terms of\n     either this License or such Secondary License(s).\n\n3.4. Notices\n\n     You may not remove or alter the substance of any license notices (including\n     copyright notices, patent notices, disclaimers of warranty, or limitations\n     of liability) contained within the Source Code Form of the Covered\n     Software, except that You may alter any license notices to the extent\n     required to remedy known factual inaccuracies.\n\n3.5. Application of Additional Terms\n\n     You may choose to offer, and to charge a fee for, warranty, support,\n     indemnity or liability obligations to one or more recipients of Covered\n     Software. However, You may do so only on Your own behalf, and not on behalf\n     of any Contributor. You must make it absolutely clear that any such\n     warranty, support, indemnity, or liability obligation is offered by You\n     alone, and You hereby agree to indemnify every Contributor for any\n     liability incurred by such Contributor as a result of warranty, support,\n     indemnity or liability terms You offer. You may include additional\n     disclaimers of warranty and limitations of liability specific to any\n     jurisdiction.\n\n4. Inability to Comply Due to Statute or Regulation\n\n   If it is impossible for You to comply with any of the terms of this License\n   with respect to some or all of the Covered Software due to statute, judicial\n   order, or regulation then You must: (a) comply with the terms of this License\n   to the maximum extent possible; and (b) describe the limitations and the code\n   they affect. Such description must be placed in a text file included with all\n   distributions of the Covered Software under this License. Except to the\n   extent prohibited by statute or regulation, such description must be\n   sufficiently detailed for a recipient of ordinary skill to be able to\n   understand it.\n\n5. Termination\n\n5.1. The rights granted under this License will terminate automatically if You\n     fail to comply with any of its terms. However, if You become compliant,\n     then the rights granted under this License from a particular Contributor\n     are reinstated (a) provisionally, unless and until such Contributor\n     explicitly and finally terminates Your grants, and (b) on an ongoing basis,\n     if such Contributor fails to notify You of the non-compliance by some\n     reasonable means prior to 60 days after You have come back into compliance.\n     Moreover, Your grants from a particular Contributor are reinstated on an\n     ongoing basis if such Contributor notifies You of the non-compliance by\n     some reasonable means, this is the first time You have received notice of\n     non-compliance with this License from such Contributor, and You become\n     compliant prior to 30 days after Your receipt of the notice.\n\n5.2. If You initiate litigation against any entity by asserting a patent\n     infringement claim (excluding declaratory judgment actions, counter-claims,\n     and cross-claims) alleging that a Contributor Version directly or\n     indirectly infringes any patent, then the rights granted to You by any and\n     all Contributors for the Covered Software under Section 2.1 of this License\n     shall terminate.\n\n5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user\n     license agreements (excluding distributors and resellers) which have been\n     validly granted by You or Your distributors under this License prior to\n     termination shall survive termination.\n\n6. Disclaimer of Warranty\n\n   Covered Software is provided under this License on an “as is” basis, without\n   warranty of any kind, either expressed, implied, or statutory, including,\n   without limitation, warranties that the Covered Software is free of defects,\n   merchantable, fit for a particular purpose or non-infringing. The entire\n   risk as to the quality and performance of the Covered Software is with You.\n   Should any Covered Software prove defective in any respect, You (not any\n   Contributor) assume the cost of any necessary servicing, repair, or\n   correction. This disclaimer of warranty constitutes an essential part of this\n   License. No use of  any Covered Software is authorized under this License\n   except under this disclaimer.\n\n7. Limitation of Liability\n\n   Under no circumstances and under no legal theory, whether tort (including\n   negligence), contract, or otherwise, shall any Contributor, or anyone who\n   distributes Covered Software as permitted above, be liable to You for any\n   direct, indirect, special, incidental, or consequential damages of any\n   character including, without limitation, damages for lost profits, loss of\n   goodwill, work stoppage, computer failure or malfunction, or any and all\n   other commercial damages or losses, even if such party shall have been\n   informed of the possibility of such damages. This limitation of liability\n   shall not apply to liability for death or personal injury resulting from such\n   party’s negligence to the extent applicable law prohibits such limitation.\n   Some jurisdictions do not allow the exclusion or limitation of incidental or\n   consequential damages, so this exclusion and limitation may not apply to You.\n\n8. Litigation\n\n   Any litigation relating to this License may be brought only in the courts of\n   a jurisdiction where the defendant maintains its principal place of business\n   and such litigation shall be governed by laws of that jurisdiction, without\n   reference to its conflict-of-law provisions. Nothing in this Section shall\n   prevent a party’s ability to bring cross-claims or counter-claims.\n\n9. Miscellaneous\n\n   This License represents the complete agreement concerning the subject matter\n   hereof. If any provision of this License is held to be unenforceable, such\n   provision shall be reformed only to the extent necessary to make it\n   enforceable. Any law or regulation which provides that the language of a\n   contract shall be construed against the drafter shall not be used to construe\n   this License against a Contributor.\n\n\n10. Versions of the License\n\n10.1. New Versions\n\n      Mozilla Foundation is the license steward. Except as provided in Section\n      10.3, no one other than the license steward has the right to modify or\n      publish new versions of this License. Each version will be given a\n      distinguishing version number.\n\n10.2. Effect of New Versions\n\n      You may distribute the Covered Software under the terms of the version of\n      the License under which You originally received the Covered Software, or\n      under the terms of any subsequent version published by the license\n      steward.\n\n10.3. Modified Versions\n\n      If you create software not governed by this License, and you want to\n      create a new license for such software, you may create and use a modified\n      version of this License if you rename the license and remove any\n      references to the name of the license steward (except to note that such\n      modified license differs from this License).\n\n10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses\n      If You choose to distribute Source Code Form that is Incompatible With\n      Secondary Licenses under the terms of this version of the License, the\n      notice described in Exhibit B of this License must be attached.\n\nExhibit A - Source Code Form License Notice\n\n      This Source Code Form is subject to the\n      terms of the Mozilla Public License, v.\n      2.0. If a copy of the MPL was not\n      distributed with this file, You can\n      obtain one at\n      http://mozilla.org/MPL/2.0/.\n\nIf it is not possible or desirable to put the notice in a particular file, then\nYou may include the notice in a location (such as a LICENSE file in a relevant\ndirectory) where a recipient would be likely to look for such a notice.\n\nYou may add additional accurate notices of copyright ownership.\n\nExhibit B - “Incompatible With Secondary Licenses” Notice\n\n      This Source Code Form is “Incompatible\n      With Secondary Licenses”, as defined by\n      the Mozilla Public License, v. 2.0.\n\n"
  },
  {
    "path": "vendor/github.com/hashicorp/logutils/level.go",
    "content": "// Package logutils augments the standard log package with levels.\npackage logutils\n\nimport (\n\t\"bytes\"\n\t\"io\"\n\t\"sync\"\n)\n\ntype LogLevel string\n\n// LevelFilter is an io.Writer that can be used with a logger that\n// will filter out log messages that aren't at least a certain level.\n//\n// Once the filter is in use somewhere, it is not safe to modify\n// the structure.\ntype LevelFilter struct {\n\t// Levels is the list of log levels, in increasing order of\n\t// severity. Example might be: {\"DEBUG\", \"WARN\", \"ERROR\"}.\n\tLevels []LogLevel\n\n\t// MinLevel is the minimum level allowed through\n\tMinLevel LogLevel\n\n\t// The underlying io.Writer where log messages that pass the filter\n\t// will be set.\n\tWriter io.Writer\n\n\tbadLevels map[LogLevel]struct{}\n\tonce      sync.Once\n}\n\n// Check will check a given line if it would be included in the level\n// filter.\nfunc (f *LevelFilter) Check(line []byte) bool {\n\tf.once.Do(f.init)\n\n\t// Check for a log level\n\tvar level LogLevel\n\tx := bytes.IndexByte(line, '[')\n\tif x >= 0 {\n\t\ty := bytes.IndexByte(line[x:], ']')\n\t\tif y >= 0 {\n\t\t\tlevel = LogLevel(line[x+1 : x+y])\n\t\t}\n\t}\n\n\t_, ok := f.badLevels[level]\n\treturn !ok\n}\n\nfunc (f *LevelFilter) Write(p []byte) (n int, err error) {\n\t// Note in general that io.Writer can receive any byte sequence\n\t// to write, but the \"log\" package always guarantees that we only\n\t// get a single line. We use that as a slight optimization within\n\t// this method, assuming we're dealing with a single, complete line\n\t// of log data.\n\n\tif !f.Check(p) {\n\t\treturn len(p), nil\n\t}\n\n\treturn f.Writer.Write(p)\n}\n\n// SetMinLevel is used to update the minimum log level\nfunc (f *LevelFilter) SetMinLevel(min LogLevel) {\n\tf.MinLevel = min\n\tf.init()\n}\n\nfunc (f *LevelFilter) init() {\n\tbadLevels := make(map[LogLevel]struct{})\n\tfor _, level := range f.Levels {\n\t\tif level == f.MinLevel {\n\t\t\tbreak\n\t\t}\n\t\tbadLevels[level] = struct{}{}\n\t}\n\tf.badLevels = badLevels\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/LICENSE",
    "content": "Mozilla Public License, version 2.0\n\n1. Definitions\n\n1.1. “Contributor”\n\n     means each individual or legal entity that creates, contributes to the\n     creation of, or owns Covered Software.\n\n1.2. “Contributor Version”\n\n     means the combination of the Contributions of others (if any) used by a\n     Contributor and that particular Contributor’s Contribution.\n\n1.3. “Contribution”\n\n     means Covered Software of a particular Contributor.\n\n1.4. “Covered Software”\n\n     means Source Code Form to which the initial Contributor has attached the\n     notice in Exhibit A, the Executable Form of such Source Code Form, and\n     Modifications of such Source Code Form, in each case including portions\n     thereof.\n\n1.5. “Incompatible With Secondary Licenses”\n     means\n\n     a. that the initial Contributor has attached the notice described in\n        Exhibit B to the Covered Software; or\n\n     b. that the Covered Software was made available under the terms of version\n        1.1 or earlier of the License, but not also under the terms of a\n        Secondary License.\n\n1.6. “Executable Form”\n\n     means any form of the work other than Source Code Form.\n\n1.7. “Larger Work”\n\n     means a work that combines Covered Software with other material, in a separate\n     file or files, that is not Covered Software.\n\n1.8. “License”\n\n     means this document.\n\n1.9. “Licensable”\n\n     means having the right to grant, to the maximum extent possible, whether at the\n     time of the initial grant or subsequently, any and all of the rights conveyed by\n     this License.\n\n1.10. “Modifications”\n\n     means any of the following:\n\n     a. any file in Source Code Form that results from an addition to, deletion\n        from, or modification of the contents of Covered Software; or\n\n     b. any new file in Source Code Form that contains any Covered Software.\n\n1.11. “Patent Claims” of a Contributor\n\n      means any patent claim(s), including without limitation, method, process,\n      and apparatus claims, in any patent Licensable by such Contributor that\n      would be infringed, but for the grant of the License, by the making,\n      using, selling, offering for sale, having made, import, or transfer of\n      either its Contributions or its Contributor Version.\n\n1.12. “Secondary License”\n\n      means either the GNU General Public License, Version 2.0, the GNU Lesser\n      General Public License, Version 2.1, the GNU Affero General Public\n      License, Version 3.0, or any later versions of those licenses.\n\n1.13. “Source Code Form”\n\n      means the form of the work preferred for making modifications.\n\n1.14. “You” (or “Your”)\n\n      means an individual or a legal entity exercising rights under this\n      License. For legal entities, “You” includes any entity that controls, is\n      controlled by, or is under common control with You. For purposes of this\n      definition, “control” means (a) the power, direct or indirect, to cause\n      the direction or management of such entity, whether by contract or\n      otherwise, or (b) ownership of more than fifty percent (50%) of the\n      outstanding shares or beneficial ownership of such entity.\n\n\n2. License Grants and Conditions\n\n2.1. Grants\n\n     Each Contributor hereby grants You a world-wide, royalty-free,\n     non-exclusive license:\n\n     a. under intellectual property rights (other than patent or trademark)\n        Licensable by such Contributor to use, reproduce, make available,\n        modify, display, perform, distribute, and otherwise exploit its\n        Contributions, either on an unmodified basis, with Modifications, or as\n        part of a Larger Work; and\n\n     b. under Patent Claims of such Contributor to make, use, sell, offer for\n        sale, have made, import, and otherwise transfer either its Contributions\n        or its Contributor Version.\n\n2.2. Effective Date\n\n     The licenses granted in Section 2.1 with respect to any Contribution become\n     effective for each Contribution on the date the Contributor first distributes\n     such Contribution.\n\n2.3. Limitations on Grant Scope\n\n     The licenses granted in this Section 2 are the only rights granted under this\n     License. No additional rights or licenses will be implied from the distribution\n     or licensing of Covered Software under this License. Notwithstanding Section\n     2.1(b) above, no patent license is granted by a Contributor:\n\n     a. for any code that a Contributor has removed from Covered Software; or\n\n     b. for infringements caused by: (i) Your and any other third party’s\n        modifications of Covered Software, or (ii) the combination of its\n        Contributions with other software (except as part of its Contributor\n        Version); or\n\n     c. under Patent Claims infringed by Covered Software in the absence of its\n        Contributions.\n\n     This License does not grant any rights in the trademarks, service marks, or\n     logos of any Contributor (except as may be necessary to comply with the\n     notice requirements in Section 3.4).\n\n2.4. Subsequent Licenses\n\n     No Contributor makes additional grants as a result of Your choice to\n     distribute the Covered Software under a subsequent version of this License\n     (see Section 10.2) or under the terms of a Secondary License (if permitted\n     under the terms of Section 3.3).\n\n2.5. Representation\n\n     Each Contributor represents that the Contributor believes its Contributions\n     are its original creation(s) or it has sufficient rights to grant the\n     rights to its Contributions conveyed by this License.\n\n2.6. Fair Use\n\n     This License is not intended to limit any rights You have under applicable\n     copyright doctrines of fair use, fair dealing, or other equivalents.\n\n2.7. Conditions\n\n     Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in\n     Section 2.1.\n\n\n3. Responsibilities\n\n3.1. Distribution of Source Form\n\n     All distribution of Covered Software in Source Code Form, including any\n     Modifications that You create or to which You contribute, must be under the\n     terms of this License. You must inform recipients that the Source Code Form\n     of the Covered Software is governed by the terms of this License, and how\n     they can obtain a copy of this License. You may not attempt to alter or\n     restrict the recipients’ rights in the Source Code Form.\n\n3.2. Distribution of Executable Form\n\n     If You distribute Covered Software in Executable Form then:\n\n     a. such Covered Software must also be made available in Source Code Form,\n        as described in Section 3.1, and You must inform recipients of the\n        Executable Form how they can obtain a copy of such Source Code Form by\n        reasonable means in a timely manner, at a charge no more than the cost\n        of distribution to the recipient; and\n\n     b. You may distribute such Executable Form under the terms of this License,\n        or sublicense it under different terms, provided that the license for\n        the Executable Form does not attempt to limit or alter the recipients’\n        rights in the Source Code Form under this License.\n\n3.3. Distribution of a Larger Work\n\n     You may create and distribute a Larger Work under terms of Your choice,\n     provided that You also comply with the requirements of this License for the\n     Covered Software. If the Larger Work is a combination of Covered Software\n     with a work governed by one or more Secondary Licenses, and the Covered\n     Software is not Incompatible With Secondary Licenses, this License permits\n     You to additionally distribute such Covered Software under the terms of\n     such Secondary License(s), so that the recipient of the Larger Work may, at\n     their option, further distribute the Covered Software under the terms of\n     either this License or such Secondary License(s).\n\n3.4. Notices\n\n     You may not remove or alter the substance of any license notices (including\n     copyright notices, patent notices, disclaimers of warranty, or limitations\n     of liability) contained within the Source Code Form of the Covered\n     Software, except that You may alter any license notices to the extent\n     required to remedy known factual inaccuracies.\n\n3.5. Application of Additional Terms\n\n     You may choose to offer, and to charge a fee for, warranty, support,\n     indemnity or liability obligations to one or more recipients of Covered\n     Software. However, You may do so only on Your own behalf, and not on behalf\n     of any Contributor. You must make it absolutely clear that any such\n     warranty, support, indemnity, or liability obligation is offered by You\n     alone, and You hereby agree to indemnify every Contributor for any\n     liability incurred by such Contributor as a result of warranty, support,\n     indemnity or liability terms You offer. You may include additional\n     disclaimers of warranty and limitations of liability specific to any\n     jurisdiction.\n\n4. Inability to Comply Due to Statute or Regulation\n\n   If it is impossible for You to comply with any of the terms of this License\n   with respect to some or all of the Covered Software due to statute, judicial\n   order, or regulation then You must: (a) comply with the terms of this License\n   to the maximum extent possible; and (b) describe the limitations and the code\n   they affect. Such description must be placed in a text file included with all\n   distributions of the Covered Software under this License. Except to the\n   extent prohibited by statute or regulation, such description must be\n   sufficiently detailed for a recipient of ordinary skill to be able to\n   understand it.\n\n5. Termination\n\n5.1. The rights granted under this License will terminate automatically if You\n     fail to comply with any of its terms. However, if You become compliant,\n     then the rights granted under this License from a particular Contributor\n     are reinstated (a) provisionally, unless and until such Contributor\n     explicitly and finally terminates Your grants, and (b) on an ongoing basis,\n     if such Contributor fails to notify You of the non-compliance by some\n     reasonable means prior to 60 days after You have come back into compliance.\n     Moreover, Your grants from a particular Contributor are reinstated on an\n     ongoing basis if such Contributor notifies You of the non-compliance by\n     some reasonable means, this is the first time You have received notice of\n     non-compliance with this License from such Contributor, and You become\n     compliant prior to 30 days after Your receipt of the notice.\n\n5.2. If You initiate litigation against any entity by asserting a patent\n     infringement claim (excluding declaratory judgment actions, counter-claims,\n     and cross-claims) alleging that a Contributor Version directly or\n     indirectly infringes any patent, then the rights granted to You by any and\n     all Contributors for the Covered Software under Section 2.1 of this License\n     shall terminate.\n\n5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user\n     license agreements (excluding distributors and resellers) which have been\n     validly granted by You or Your distributors under this License prior to\n     termination shall survive termination.\n\n6. Disclaimer of Warranty\n\n   Covered Software is provided under this License on an “as is” basis, without\n   warranty of any kind, either expressed, implied, or statutory, including,\n   without limitation, warranties that the Covered Software is free of defects,\n   merchantable, fit for a particular purpose or non-infringing. The entire\n   risk as to the quality and performance of the Covered Software is with You.\n   Should any Covered Software prove defective in any respect, You (not any\n   Contributor) assume the cost of any necessary servicing, repair, or\n   correction. This disclaimer of warranty constitutes an essential part of this\n   License. No use of  any Covered Software is authorized under this License\n   except under this disclaimer.\n\n7. Limitation of Liability\n\n   Under no circumstances and under no legal theory, whether tort (including\n   negligence), contract, or otherwise, shall any Contributor, or anyone who\n   distributes Covered Software as permitted above, be liable to You for any\n   direct, indirect, special, incidental, or consequential damages of any\n   character including, without limitation, damages for lost profits, loss of\n   goodwill, work stoppage, computer failure or malfunction, or any and all\n   other commercial damages or losses, even if such party shall have been\n   informed of the possibility of such damages. This limitation of liability\n   shall not apply to liability for death or personal injury resulting from such\n   party’s negligence to the extent applicable law prohibits such limitation.\n   Some jurisdictions do not allow the exclusion or limitation of incidental or\n   consequential damages, so this exclusion and limitation may not apply to You.\n\n8. Litigation\n\n   Any litigation relating to this License may be brought only in the courts of\n   a jurisdiction where the defendant maintains its principal place of business\n   and such litigation shall be governed by laws of that jurisdiction, without\n   reference to its conflict-of-law provisions. Nothing in this Section shall\n   prevent a party’s ability to bring cross-claims or counter-claims.\n\n9. Miscellaneous\n\n   This License represents the complete agreement concerning the subject matter\n   hereof. If any provision of this License is held to be unenforceable, such\n   provision shall be reformed only to the extent necessary to make it\n   enforceable. Any law or regulation which provides that the language of a\n   contract shall be construed against the drafter shall not be used to construe\n   this License against a Contributor.\n\n\n10. Versions of the License\n\n10.1. New Versions\n\n      Mozilla Foundation is the license steward. Except as provided in Section\n      10.3, no one other than the license steward has the right to modify or\n      publish new versions of this License. Each version will be given a\n      distinguishing version number.\n\n10.2. Effect of New Versions\n\n      You may distribute the Covered Software under the terms of the version of\n      the License under which You originally received the Covered Software, or\n      under the terms of any subsequent version published by the license\n      steward.\n\n10.3. Modified Versions\n\n      If you create software not governed by this License, and you want to\n      create a new license for such software, you may create and use a modified\n      version of this License if you rename the license and remove any\n      references to the name of the license steward (except to note that such\n      modified license differs from this License).\n\n10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses\n      If You choose to distribute Source Code Form that is Incompatible With\n      Secondary Licenses under the terms of this version of the License, the\n      notice described in Exhibit B of this License must be attached.\n\nExhibit A - Source Code Form License Notice\n\n      This Source Code Form is subject to the\n      terms of the Mozilla Public License, v.\n      2.0. If a copy of the MPL was not\n      distributed with this file, You can\n      obtain one at\n      http://mozilla.org/MPL/2.0/.\n\nIf it is not possible or desirable to put the notice in a particular file, then\nYou may include the notice in a location (such as a LICENSE file in a relevant\ndirectory) where a recipient would be likely to look for such a notice.\n\nYou may add additional accurate notices of copyright ownership.\n\nExhibit B - “Incompatible With Secondary Licenses” Notice\n\n      This Source Code Form is “Incompatible\n      With Secondary Licenses”, as defined by\n      the Mozilla Public License, v. 2.0.\n\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/addrs/count_attr.go",
    "content": "package addrs\n\n// CountAttr is the address of an attribute of the \"count\" object in\n// the interpolation scope, like \"count.index\".\ntype CountAttr struct {\n\treferenceable\n\tName string\n}\n\nfunc (ca CountAttr) String() string {\n\treturn \"count.\" + ca.Name\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/addrs/doc.go",
    "content": "// Package addrs contains types that represent \"addresses\", which are\n// references to specific objects within a Terraform configuration or\n// state.\n//\n// All addresses have string representations based on HCL traversal syntax\n// which should be used in the user-interface, and also in-memory\n// representations that can be used internally.\n//\n// For object types that exist within Terraform modules a pair of types is\n// used. The \"local\" part of the address is represented by a type, and then\n// an absolute path to that object in the context of its module is represented\n// by a type of the same name with an \"Abs\" prefix added, for \"absolute\".\n//\n// All types within this package should be treated as immutable, even if this\n// is not enforced by the Go compiler. It is always an implementation error\n// to modify an address object in-place after it is initially constructed.\npackage addrs\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/addrs/input_variable.go",
    "content": "package addrs\n\nimport (\n\t\"fmt\"\n)\n\n// InputVariable is the address of an input variable.\ntype InputVariable struct {\n\treferenceable\n\tName string\n}\n\nfunc (v InputVariable) String() string {\n\treturn \"var.\" + v.Name\n}\n\n// AbsInputVariableInstance is the address of an input variable within a\n// particular module instance.\ntype AbsInputVariableInstance struct {\n\tModule   ModuleInstance\n\tVariable InputVariable\n}\n\n// InputVariable returns the absolute address of the input variable of the\n// given name inside the receiving module instance.\nfunc (m ModuleInstance) InputVariable(name string) AbsInputVariableInstance {\n\treturn AbsInputVariableInstance{\n\t\tModule: m,\n\t\tVariable: InputVariable{\n\t\t\tName: name,\n\t\t},\n\t}\n}\n\nfunc (v AbsInputVariableInstance) String() string {\n\tif len(v.Module) == 0 {\n\t\treturn v.String()\n\t}\n\n\treturn fmt.Sprintf(\"%s.%s\", v.Module.String(), v.Variable.String())\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/addrs/instance_key.go",
    "content": "package addrs\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/zclconf/go-cty/cty\"\n\t\"github.com/zclconf/go-cty/cty/gocty\"\n)\n\n// InstanceKey represents the key of an instance within an object that\n// contains multiple instances due to using \"count\" or \"for_each\" arguments\n// in configuration.\n//\n// IntKey and StringKey are the two implementations of this type. No other\n// implementations are allowed. The single instance of an object that _isn't_\n// using \"count\" or \"for_each\" is represented by NoKey, which is a nil\n// InstanceKey.\ntype InstanceKey interface {\n\tinstanceKeySigil()\n\tString() string\n}\n\n// ParseInstanceKey returns the instance key corresponding to the given value,\n// which must be known and non-null.\n//\n// If an unknown or null value is provided then this function will panic. This\n// function is intended to deal with the values that would naturally be found\n// in a hcl.TraverseIndex, which (when parsed from source, at least) can never\n// contain unknown or null values.\nfunc ParseInstanceKey(key cty.Value) (InstanceKey, error) {\n\tswitch key.Type() {\n\tcase cty.String:\n\t\treturn StringKey(key.AsString()), nil\n\tcase cty.Number:\n\t\tvar idx int\n\t\terr := gocty.FromCtyValue(key, &idx)\n\t\treturn IntKey(idx), err\n\tdefault:\n\t\treturn NoKey, fmt.Errorf(\"either a string or an integer is required\")\n\t}\n}\n\n// NoKey represents the absense of an InstanceKey, for the single instance\n// of a configuration object that does not use \"count\" or \"for_each\" at all.\nvar NoKey InstanceKey\n\n// IntKey is the InstanceKey representation representing integer indices, as\n// used when the \"count\" argument is specified or if for_each is used with\n// a sequence type.\ntype IntKey int\n\nfunc (k IntKey) instanceKeySigil() {\n}\n\nfunc (k IntKey) String() string {\n\treturn fmt.Sprintf(\"[%d]\", int(k))\n}\n\n// StringKey is the InstanceKey representation representing string indices, as\n// used when the \"for_each\" argument is specified with a map or object type.\ntype StringKey string\n\nfunc (k StringKey) instanceKeySigil() {\n}\n\nfunc (k StringKey) String() string {\n\t// FIXME: This isn't _quite_ right because Go's quoted string syntax is\n\t// slightly different than HCL's, but we'll accept it for now.\n\treturn fmt.Sprintf(\"[%q]\", string(k))\n}\n\n// InstanceKeyLess returns true if the first given instance key i should sort\n// before the second key j, and false otherwise.\nfunc InstanceKeyLess(i, j InstanceKey) bool {\n\tiTy := instanceKeyType(i)\n\tjTy := instanceKeyType(j)\n\n\tswitch {\n\tcase i == j:\n\t\treturn false\n\tcase i == NoKey:\n\t\treturn true\n\tcase j == NoKey:\n\t\treturn false\n\tcase iTy != jTy:\n\t\t// The ordering here is arbitrary except that we want NoKeyType\n\t\t// to sort before the others, so we'll just use the enum values\n\t\t// of InstanceKeyType here (where NoKey is zero, sorting before\n\t\t// any other).\n\t\treturn uint32(iTy) < uint32(jTy)\n\tcase iTy == IntKeyType:\n\t\treturn int(i.(IntKey)) < int(j.(IntKey))\n\tcase iTy == StringKeyType:\n\t\treturn string(i.(StringKey)) < string(j.(StringKey))\n\tdefault:\n\t\t// Shouldn't be possible to get down here in practice, since the\n\t\t// above is exhaustive.\n\t\treturn false\n\t}\n}\n\nfunc instanceKeyType(k InstanceKey) InstanceKeyType {\n\tif _, ok := k.(StringKey); ok {\n\t\treturn StringKeyType\n\t}\n\tif _, ok := k.(IntKey); ok {\n\t\treturn IntKeyType\n\t}\n\treturn NoKeyType\n}\n\n// InstanceKeyType represents the different types of instance key that are\n// supported. Usually it is sufficient to simply type-assert an InstanceKey\n// value to either IntKey or StringKey, but this type and its values can be\n// used to represent the types themselves, rather than specific values\n// of those types.\ntype InstanceKeyType rune\n\nconst (\n\tNoKeyType     InstanceKeyType = 0\n\tIntKeyType    InstanceKeyType = 'I'\n\tStringKeyType InstanceKeyType = 'S'\n)\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/addrs/local_value.go",
    "content": "package addrs\n\nimport (\n\t\"fmt\"\n)\n\n// LocalValue is the address of a local value.\ntype LocalValue struct {\n\treferenceable\n\tName string\n}\n\nfunc (v LocalValue) String() string {\n\treturn \"local.\" + v.Name\n}\n\n// Absolute converts the receiver into an absolute address within the given\n// module instance.\nfunc (v LocalValue) Absolute(m ModuleInstance) AbsLocalValue {\n\treturn AbsLocalValue{\n\t\tModule:     m,\n\t\tLocalValue: v,\n\t}\n}\n\n// AbsLocalValue is the absolute address of a local value within a module instance.\ntype AbsLocalValue struct {\n\tModule     ModuleInstance\n\tLocalValue LocalValue\n}\n\n// LocalValue returns the absolute address of a local value of the given\n// name within the receiving module instance.\nfunc (m ModuleInstance) LocalValue(name string) AbsLocalValue {\n\treturn AbsLocalValue{\n\t\tModule: m,\n\t\tLocalValue: LocalValue{\n\t\t\tName: name,\n\t\t},\n\t}\n}\n\nfunc (v AbsLocalValue) String() string {\n\tif len(v.Module) == 0 {\n\t\treturn v.LocalValue.String()\n\t}\n\treturn fmt.Sprintf(\"%s.%s\", v.Module.String(), v.LocalValue.String())\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/addrs/module.go",
    "content": "package addrs\n\nimport (\n\t\"strings\"\n)\n\n// Module is an address for a module call within configuration. This is\n// the static counterpart of ModuleInstance, representing a traversal through\n// the static module call tree in configuration and does not take into account\n// the potentially-multiple instances of a module that might be created by\n// \"count\" and \"for_each\" arguments within those calls.\n//\n// This type should be used only in very specialized cases when working with\n// the static module call tree. Type ModuleInstance is appropriate in more cases.\n//\n// Although Module is a slice, it should be treated as immutable after creation.\ntype Module []string\n\n// RootModule is the module address representing the root of the static module\n// call tree, which is also the zero value of Module.\n//\n// Note that this is not the root of the dynamic module tree, which is instead\n// represented by RootModuleInstance.\nvar RootModule Module\n\n// IsRoot returns true if the receiver is the address of the root module,\n// or false otherwise.\nfunc (m Module) IsRoot() bool {\n\treturn len(m) == 0\n}\n\nfunc (m Module) String() string {\n\tif len(m) == 0 {\n\t\treturn \"\"\n\t}\n\treturn strings.Join([]string(m), \".\")\n}\n\n// Child returns the address of a child call in the receiver, identified by the\n// given name.\nfunc (m Module) Child(name string) Module {\n\tret := make(Module, 0, len(m)+1)\n\tret = append(ret, m...)\n\treturn append(ret, name)\n}\n\n// Parent returns the address of the parent module of the receiver, or the\n// receiver itself if there is no parent (if it's the root module address).\nfunc (m Module) Parent() Module {\n\tif len(m) == 0 {\n\t\treturn m\n\t}\n\treturn m[:len(m)-1]\n}\n\n// Call returns the module call address that corresponds to the given module\n// instance, along with the address of the module that contains it.\n//\n// There is no call for the root module, so this method will panic if called\n// on the root module address.\n//\n// In practice, this just turns the last element of the receiver into a\n// ModuleCall and then returns a slice of the receiever that excludes that\n// last part. This is just a convenience for situations where a call address\n// is required, such as when dealing with *Reference and Referencable values.\nfunc (m Module) Call() (Module, ModuleCall) {\n\tif len(m) == 0 {\n\t\tpanic(\"cannot produce ModuleCall for root module\")\n\t}\n\n\tcaller, callName := m[:len(m)-1], m[len(m)-1]\n\treturn caller, ModuleCall{\n\t\tName: callName,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/addrs/module_call.go",
    "content": "package addrs\n\nimport (\n\t\"fmt\"\n)\n\n// ModuleCall is the address of a call from the current module to a child\n// module.\n//\n// There is no \"Abs\" version of ModuleCall because an absolute module path\n// is represented by ModuleInstance.\ntype ModuleCall struct {\n\treferenceable\n\tName string\n}\n\nfunc (c ModuleCall) String() string {\n\treturn \"module.\" + c.Name\n}\n\n// Instance returns the address of an instance of the receiver identified by\n// the given key.\nfunc (c ModuleCall) Instance(key InstanceKey) ModuleCallInstance {\n\treturn ModuleCallInstance{\n\t\tCall: c,\n\t\tKey:  key,\n\t}\n}\n\n// ModuleCallInstance is the address of one instance of a module created from\n// a module call, which might create multiple instances using \"count\" or\n// \"for_each\" arguments.\ntype ModuleCallInstance struct {\n\treferenceable\n\tCall ModuleCall\n\tKey  InstanceKey\n}\n\nfunc (c ModuleCallInstance) String() string {\n\tif c.Key == NoKey {\n\t\treturn c.Call.String()\n\t}\n\treturn fmt.Sprintf(\"module.%s%s\", c.Call.Name, c.Key)\n}\n\n// ModuleInstance returns the address of the module instance that corresponds\n// to the receiving call instance when resolved in the given calling module.\n// In other words, it returns the child module instance that the receving\n// call instance creates.\nfunc (c ModuleCallInstance) ModuleInstance(caller ModuleInstance) ModuleInstance {\n\treturn caller.Child(c.Call.Name, c.Key)\n}\n\n// Output returns the address of an output of the receiver identified by its\n// name.\nfunc (c ModuleCallInstance) Output(name string) ModuleCallOutput {\n\treturn ModuleCallOutput{\n\t\tCall: c,\n\t\tName: name,\n\t}\n}\n\n// ModuleCallOutput is the address of a particular named output produced by\n// an instance of a module call.\ntype ModuleCallOutput struct {\n\treferenceable\n\tCall ModuleCallInstance\n\tName string\n}\n\nfunc (co ModuleCallOutput) String() string {\n\treturn fmt.Sprintf(\"%s.%s\", co.Call.String(), co.Name)\n}\n\n// AbsOutputValue returns the absolute output value address that corresponds\n// to the receving module call output address, once resolved in the given\n// calling module.\nfunc (co ModuleCallOutput) AbsOutputValue(caller ModuleInstance) AbsOutputValue {\n\tmoduleAddr := co.Call.ModuleInstance(caller)\n\treturn moduleAddr.OutputValue(co.Name)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/addrs/module_instance.go",
    "content": "package addrs\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/hashicorp/hcl2/hcl/hclsyntax\"\n\t\"github.com/zclconf/go-cty/cty\"\n\t\"github.com/zclconf/go-cty/cty/gocty\"\n\n\t\"github.com/hashicorp/terraform/tfdiags\"\n)\n\n// ModuleInstance is an address for a particular module instance within the\n// dynamic module tree. This is an extension of the static traversals\n// represented by type Module that deals with the possibility of a single\n// module call producing multiple instances via the \"count\" and \"for_each\"\n// arguments.\n//\n// Although ModuleInstance is a slice, it should be treated as immutable after\n// creation.\ntype ModuleInstance []ModuleInstanceStep\n\nvar (\n\t_ Targetable = ModuleInstance(nil)\n)\n\nfunc ParseModuleInstance(traversal hcl.Traversal) (ModuleInstance, tfdiags.Diagnostics) {\n\tmi, remain, diags := parseModuleInstancePrefix(traversal)\n\tif len(remain) != 0 {\n\t\tif len(remain) == len(traversal) {\n\t\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Invalid module instance address\",\n\t\t\t\tDetail:   \"A module instance address must begin with \\\"module.\\\".\",\n\t\t\t\tSubject:  remain.SourceRange().Ptr(),\n\t\t\t})\n\t\t} else {\n\t\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Invalid module instance address\",\n\t\t\t\tDetail:   \"The module instance address is followed by additional invalid content.\",\n\t\t\t\tSubject:  remain.SourceRange().Ptr(),\n\t\t\t})\n\t\t}\n\t}\n\treturn mi, diags\n}\n\n// ParseModuleInstanceStr is a helper wrapper around ParseModuleInstance\n// that takes a string and parses it with the HCL native syntax traversal parser\n// before interpreting it.\n//\n// This should be used only in specialized situations since it will cause the\n// created references to not have any meaningful source location information.\n// If a reference string is coming from a source that should be identified in\n// error messages then the caller should instead parse it directly using a\n// suitable function from the HCL API and pass the traversal itself to\n// ParseProviderConfigCompact.\n//\n// Error diagnostics are returned if either the parsing fails or the analysis\n// of the traversal fails. There is no way for the caller to distinguish the\n// two kinds of diagnostics programmatically. If error diagnostics are returned\n// then the returned address is invalid.\nfunc ParseModuleInstanceStr(str string) (ModuleInstance, tfdiags.Diagnostics) {\n\tvar diags tfdiags.Diagnostics\n\n\ttraversal, parseDiags := hclsyntax.ParseTraversalAbs([]byte(str), \"\", hcl.Pos{Line: 1, Column: 1})\n\tdiags = diags.Append(parseDiags)\n\tif parseDiags.HasErrors() {\n\t\treturn nil, diags\n\t}\n\n\taddr, addrDiags := ParseModuleInstance(traversal)\n\tdiags = diags.Append(addrDiags)\n\treturn addr, diags\n}\n\nfunc parseModuleInstancePrefix(traversal hcl.Traversal) (ModuleInstance, hcl.Traversal, tfdiags.Diagnostics) {\n\tremain := traversal\n\tvar mi ModuleInstance\n\tvar diags tfdiags.Diagnostics\n\n\tfor len(remain) > 0 {\n\t\tvar next string\n\t\tswitch tt := remain[0].(type) {\n\t\tcase hcl.TraverseRoot:\n\t\t\tnext = tt.Name\n\t\tcase hcl.TraverseAttr:\n\t\t\tnext = tt.Name\n\t\tdefault:\n\t\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Invalid address operator\",\n\t\t\t\tDetail:   \"Module address prefix must be followed by dot and then a name.\",\n\t\t\t\tSubject:  remain[0].SourceRange().Ptr(),\n\t\t\t})\n\t\t\tbreak\n\t\t}\n\n\t\tif next != \"module\" {\n\t\t\tbreak\n\t\t}\n\n\t\tkwRange := remain[0].SourceRange()\n\t\tremain = remain[1:]\n\t\t// If we have the prefix \"module\" then we should be followed by an\n\t\t// module call name, as an attribute, and then optionally an index step\n\t\t// giving the instance key.\n\t\tif len(remain) == 0 {\n\t\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Invalid address operator\",\n\t\t\t\tDetail:   \"Prefix \\\"module.\\\" must be followed by a module name.\",\n\t\t\t\tSubject:  &kwRange,\n\t\t\t})\n\t\t\tbreak\n\t\t}\n\n\t\tvar moduleName string\n\t\tswitch tt := remain[0].(type) {\n\t\tcase hcl.TraverseAttr:\n\t\t\tmoduleName = tt.Name\n\t\tdefault:\n\t\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Invalid address operator\",\n\t\t\t\tDetail:   \"Prefix \\\"module.\\\" must be followed by a module name.\",\n\t\t\t\tSubject:  remain[0].SourceRange().Ptr(),\n\t\t\t})\n\t\t\tbreak\n\t\t}\n\t\tremain = remain[1:]\n\t\tstep := ModuleInstanceStep{\n\t\t\tName: moduleName,\n\t\t}\n\n\t\tif len(remain) > 0 {\n\t\t\tif idx, ok := remain[0].(hcl.TraverseIndex); ok {\n\t\t\t\tremain = remain[1:]\n\n\t\t\t\tswitch idx.Key.Type() {\n\t\t\t\tcase cty.String:\n\t\t\t\t\tstep.InstanceKey = StringKey(idx.Key.AsString())\n\t\t\t\tcase cty.Number:\n\t\t\t\t\tvar idxInt int\n\t\t\t\t\terr := gocty.FromCtyValue(idx.Key, &idxInt)\n\t\t\t\t\tif err == nil {\n\t\t\t\t\t\tstep.InstanceKey = IntKey(idxInt)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\t\t\tSummary:  \"Invalid address operator\",\n\t\t\t\t\t\t\tDetail:   fmt.Sprintf(\"Invalid module index: %s.\", err),\n\t\t\t\t\t\t\tSubject:  idx.SourceRange().Ptr(),\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\t// Should never happen, because no other types are allowed in traversal indices.\n\t\t\t\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\t\tSummary:  \"Invalid address operator\",\n\t\t\t\t\t\tDetail:   \"Invalid module key: must be either a string or an integer.\",\n\t\t\t\t\t\tSubject:  idx.SourceRange().Ptr(),\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tmi = append(mi, step)\n\t}\n\n\tvar retRemain hcl.Traversal\n\tif len(remain) > 0 {\n\t\tretRemain = make(hcl.Traversal, len(remain))\n\t\tcopy(retRemain, remain)\n\t\t// The first element here might be either a TraverseRoot or a\n\t\t// TraverseAttr, depending on whether we had a module address on the\n\t\t// front. To make life easier for callers, we'll normalize to always\n\t\t// start with a TraverseRoot.\n\t\tif tt, ok := retRemain[0].(hcl.TraverseAttr); ok {\n\t\t\tretRemain[0] = hcl.TraverseRoot{\n\t\t\t\tName:     tt.Name,\n\t\t\t\tSrcRange: tt.SrcRange,\n\t\t\t}\n\t\t}\n\t}\n\n\treturn mi, retRemain, diags\n}\n\n// UnkeyedInstanceShim is a shim method for converting a Module address to the\n// equivalent ModuleInstance address that assumes that no modules have\n// keyed instances.\n//\n// This is a temporary allowance for the fact that Terraform does not presently\n// support \"count\" and \"for_each\" on modules, and thus graph building code that\n// derives graph nodes from configuration must just assume unkeyed modules\n// in order to construct the graph. At a later time when \"count\" and \"for_each\"\n// support is added for modules, all callers of this method will need to be\n// reworked to allow for keyed module instances.\nfunc (m Module) UnkeyedInstanceShim() ModuleInstance {\n\tpath := make(ModuleInstance, len(m))\n\tfor i, name := range m {\n\t\tpath[i] = ModuleInstanceStep{Name: name}\n\t}\n\treturn path\n}\n\n// ModuleInstanceStep is a single traversal step through the dynamic module\n// tree. It is used only as part of ModuleInstance.\ntype ModuleInstanceStep struct {\n\tName        string\n\tInstanceKey InstanceKey\n}\n\n// RootModuleInstance is the module instance address representing the root\n// module, which is also the zero value of ModuleInstance.\nvar RootModuleInstance ModuleInstance\n\n// IsRoot returns true if the receiver is the address of the root module instance,\n// or false otherwise.\nfunc (m ModuleInstance) IsRoot() bool {\n\treturn len(m) == 0\n}\n\n// Child returns the address of a child module instance of the receiver,\n// identified by the given name and key.\nfunc (m ModuleInstance) Child(name string, key InstanceKey) ModuleInstance {\n\tret := make(ModuleInstance, 0, len(m)+1)\n\tret = append(ret, m...)\n\treturn append(ret, ModuleInstanceStep{\n\t\tName:        name,\n\t\tInstanceKey: key,\n\t})\n}\n\n// Parent returns the address of the parent module instance of the receiver, or\n// the receiver itself if there is no parent (if it's the root module address).\nfunc (m ModuleInstance) Parent() ModuleInstance {\n\tif len(m) == 0 {\n\t\treturn m\n\t}\n\treturn m[:len(m)-1]\n}\n\n// String returns a string representation of the receiver, in the format used\n// within e.g. user-provided resource addresses.\n//\n// The address of the root module has the empty string as its representation.\nfunc (m ModuleInstance) String() string {\n\tvar buf bytes.Buffer\n\tsep := \"\"\n\tfor _, step := range m {\n\t\tbuf.WriteString(sep)\n\t\tbuf.WriteString(\"module.\")\n\t\tbuf.WriteString(step.Name)\n\t\tif step.InstanceKey != NoKey {\n\t\t\tbuf.WriteString(step.InstanceKey.String())\n\t\t}\n\t\tsep = \".\"\n\t}\n\treturn buf.String()\n}\n\n// Equal returns true if the receiver and the given other value\n// contains the exact same parts.\nfunc (m ModuleInstance) Equal(o ModuleInstance) bool {\n\treturn m.String() == o.String()\n}\n\n// Less returns true if the receiver should sort before the given other value\n// in a sorted list of addresses.\nfunc (m ModuleInstance) Less(o ModuleInstance) bool {\n\tif len(m) != len(o) {\n\t\t// Shorter path sorts first.\n\t\treturn len(m) < len(o)\n\t}\n\n\tfor i := range m {\n\t\tmS, oS := m[i], o[i]\n\t\tswitch {\n\t\tcase mS.Name != oS.Name:\n\t\t\treturn mS.Name < oS.Name\n\t\tcase mS.InstanceKey != oS.InstanceKey:\n\t\t\treturn InstanceKeyLess(mS.InstanceKey, oS.InstanceKey)\n\t\t}\n\t}\n\n\treturn false\n}\n\n// Ancestors returns a slice containing the receiver and all of its ancestor\n// module instances, all the way up to (and including) the root module.\n// The result is ordered by depth, with the root module always first.\n//\n// Since the result always includes the root module, a caller may choose to\n// ignore it by slicing the result with [1:].\nfunc (m ModuleInstance) Ancestors() []ModuleInstance {\n\tret := make([]ModuleInstance, 0, len(m)+1)\n\tfor i := 0; i <= len(m); i++ {\n\t\tret = append(ret, m[:i])\n\t}\n\treturn ret\n}\n\n// IsAncestor returns true if the receiver is an ancestor of the given\n// other value.\nfunc (m ModuleInstance) IsAncestor(o ModuleInstance) bool {\n\t// Longer or equal sized paths means the receiver cannot\n\t// be an ancestor of the given module insatnce.\n\tif len(m) >= len(o) {\n\t\treturn false\n\t}\n\n\tfor i, ms := range m {\n\t\tif ms.Name != o[i].Name {\n\t\t\treturn false\n\t\t}\n\t\tif ms.InstanceKey != NoKey && ms.InstanceKey != o[i].InstanceKey {\n\t\t\treturn false\n\t\t}\n\t}\n\n\treturn true\n}\n\n// Call returns the module call address that corresponds to the given module\n// instance, along with the address of the module instance that contains it.\n//\n// There is no call for the root module, so this method will panic if called\n// on the root module address.\n//\n// A single module call can produce potentially many module instances, so the\n// result discards any instance key that might be present on the last step\n// of the instance. To retain this, use CallInstance instead.\n//\n// In practice, this just turns the last element of the receiver into a\n// ModuleCall and then returns a slice of the receiever that excludes that\n// last part. This is just a convenience for situations where a call address\n// is required, such as when dealing with *Reference and Referencable values.\nfunc (m ModuleInstance) Call() (ModuleInstance, ModuleCall) {\n\tif len(m) == 0 {\n\t\tpanic(\"cannot produce ModuleCall for root module\")\n\t}\n\n\tinst, lastStep := m[:len(m)-1], m[len(m)-1]\n\treturn inst, ModuleCall{\n\t\tName: lastStep.Name,\n\t}\n}\n\n// CallInstance returns the module call instance address that corresponds to\n// the given module instance, along with the address of the module instance\n// that contains it.\n//\n// There is no call for the root module, so this method will panic if called\n// on the root module address.\n//\n// In practice, this just turns the last element of the receiver into a\n// ModuleCallInstance and then returns a slice of the receiever that excludes\n// that last part. This is just a convenience for situations where a call\\\n// address is required, such as when dealing with *Reference and Referencable\n// values.\nfunc (m ModuleInstance) CallInstance() (ModuleInstance, ModuleCallInstance) {\n\tif len(m) == 0 {\n\t\tpanic(\"cannot produce ModuleCallInstance for root module\")\n\t}\n\n\tinst, lastStep := m[:len(m)-1], m[len(m)-1]\n\treturn inst, ModuleCallInstance{\n\t\tCall: ModuleCall{\n\t\t\tName: lastStep.Name,\n\t\t},\n\t\tKey: lastStep.InstanceKey,\n\t}\n}\n\n// TargetContains implements Targetable by returning true if the given other\n// address either matches the receiver, is a sub-module-instance of the\n// receiver, or is a targetable absolute address within a module that\n// is contained within the reciever.\nfunc (m ModuleInstance) TargetContains(other Targetable) bool {\n\tswitch to := other.(type) {\n\n\tcase ModuleInstance:\n\t\tif len(to) < len(m) {\n\t\t\t// Can't be contained if the path is shorter\n\t\t\treturn false\n\t\t}\n\t\t// Other is contained if its steps match for the length of our own path.\n\t\tfor i, ourStep := range m {\n\t\t\totherStep := to[i]\n\t\t\tif ourStep != otherStep {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\t// If we fall out here then the prefixed matched, so it's contained.\n\t\treturn true\n\n\tcase AbsResource:\n\t\treturn m.TargetContains(to.Module)\n\n\tcase AbsResourceInstance:\n\t\treturn m.TargetContains(to.Module)\n\n\tdefault:\n\t\treturn false\n\t}\n}\n\nfunc (m ModuleInstance) targetableSigil() {\n\t// ModuleInstance is targetable\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/addrs/output_value.go",
    "content": "package addrs\n\nimport (\n\t\"fmt\"\n)\n\n// OutputValue is the address of an output value, in the context of the module\n// that is defining it.\n//\n// This is related to but separate from ModuleCallOutput, which represents\n// a module output from the perspective of its parent module. Since output\n// values cannot be represented from the module where they are defined,\n// OutputValue is not Referenceable, while ModuleCallOutput is.\ntype OutputValue struct {\n\tName string\n}\n\nfunc (v OutputValue) String() string {\n\treturn \"output.\" + v.Name\n}\n\n// Absolute converts the receiver into an absolute address within the given\n// module instance.\nfunc (v OutputValue) Absolute(m ModuleInstance) AbsOutputValue {\n\treturn AbsOutputValue{\n\t\tModule:      m,\n\t\tOutputValue: v,\n\t}\n}\n\n// AbsOutputValue is the absolute address of an output value within a module instance.\n//\n// This represents an output globally within the namespace of a particular\n// configuration. It is related to but separate from ModuleCallOutput, which\n// represents a module output from the perspective of its parent module.\ntype AbsOutputValue struct {\n\tModule      ModuleInstance\n\tOutputValue OutputValue\n}\n\n// OutputValue returns the absolute address of an output value of the given\n// name within the receiving module instance.\nfunc (m ModuleInstance) OutputValue(name string) AbsOutputValue {\n\treturn AbsOutputValue{\n\t\tModule: m,\n\t\tOutputValue: OutputValue{\n\t\t\tName: name,\n\t\t},\n\t}\n}\n\nfunc (v AbsOutputValue) String() string {\n\tif v.Module.IsRoot() {\n\t\treturn v.OutputValue.String()\n\t}\n\treturn fmt.Sprintf(\"%s.%s\", v.Module.String(), v.OutputValue.String())\n}\n\n// ModuleCallOutput converts an AbsModuleOutput into a ModuleCallOutput,\n// returning also the module instance that the ModuleCallOutput is relative\n// to.\n//\n// The root module does not have a call, and so this method cannot be used\n// with outputs in the root module, and will panic in that case.\nfunc (v AbsOutputValue) ModuleCallOutput() (ModuleInstance, ModuleCallOutput) {\n\tif v.Module.IsRoot() {\n\t\tpanic(\"ReferenceFromCall used with root module output\")\n\t}\n\n\tcaller, call := v.Module.CallInstance()\n\treturn caller, ModuleCallOutput{\n\t\tCall: call,\n\t\tName: v.OutputValue.Name,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/addrs/parse_ref.go",
    "content": "package addrs\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/hashicorp/hcl2/hcl/hclsyntax\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n)\n\n// Reference describes a reference to an address with source location\n// information.\ntype Reference struct {\n\tSubject     Referenceable\n\tSourceRange tfdiags.SourceRange\n\tRemaining   hcl.Traversal\n}\n\n// ParseRef attempts to extract a referencable address from the prefix of the\n// given traversal, which must be an absolute traversal or this function\n// will panic.\n//\n// If no error diagnostics are returned, the returned reference includes the\n// address that was extracted, the source range it was extracted from, and any\n// remaining relative traversal that was not consumed as part of the\n// reference.\n//\n// If error diagnostics are returned then the Reference value is invalid and\n// must not be used.\nfunc ParseRef(traversal hcl.Traversal) (*Reference, tfdiags.Diagnostics) {\n\tref, diags := parseRef(traversal)\n\n\t// Normalize a little to make life easier for callers.\n\tif ref != nil {\n\t\tif len(ref.Remaining) == 0 {\n\t\t\tref.Remaining = nil\n\t\t}\n\t}\n\n\treturn ref, diags\n}\n\n// ParseRefStr is a helper wrapper around ParseRef that takes a string\n// and parses it with the HCL native syntax traversal parser before\n// interpreting it.\n//\n// This should be used only in specialized situations since it will cause the\n// created references to not have any meaningful source location information.\n// If a reference string is coming from a source that should be identified in\n// error messages then the caller should instead parse it directly using a\n// suitable function from the HCL API and pass the traversal itself to\n// ParseRef.\n//\n// Error diagnostics are returned if either the parsing fails or the analysis\n// of the traversal fails. There is no way for the caller to distinguish the\n// two kinds of diagnostics programmatically. If error diagnostics are returned\n// the returned reference may be nil or incomplete.\nfunc ParseRefStr(str string) (*Reference, tfdiags.Diagnostics) {\n\tvar diags tfdiags.Diagnostics\n\n\ttraversal, parseDiags := hclsyntax.ParseTraversalAbs([]byte(str), \"\", hcl.Pos{Line: 1, Column: 1})\n\tdiags = diags.Append(parseDiags)\n\tif parseDiags.HasErrors() {\n\t\treturn nil, diags\n\t}\n\n\tref, targetDiags := ParseRef(traversal)\n\tdiags = diags.Append(targetDiags)\n\treturn ref, diags\n}\n\nfunc parseRef(traversal hcl.Traversal) (*Reference, tfdiags.Diagnostics) {\n\tvar diags tfdiags.Diagnostics\n\n\troot := traversal.RootName()\n\trootRange := traversal[0].SourceRange()\n\n\tswitch root {\n\n\tcase \"count\":\n\t\tname, rng, remain, diags := parseSingleAttrRef(traversal)\n\t\treturn &Reference{\n\t\t\tSubject:     CountAttr{Name: name},\n\t\t\tSourceRange: tfdiags.SourceRangeFromHCL(rng),\n\t\t\tRemaining:   remain,\n\t\t}, diags\n\n\tcase \"data\":\n\t\tif len(traversal) < 3 {\n\t\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Invalid reference\",\n\t\t\t\tDetail:   `The \"data\" object must be followed by two attribute names: the data source type and the resource name.`,\n\t\t\t\tSubject:  traversal.SourceRange().Ptr(),\n\t\t\t})\n\t\t\treturn nil, diags\n\t\t}\n\t\tremain := traversal[1:] // trim off \"data\" so we can use our shared resource reference parser\n\t\treturn parseResourceRef(DataResourceMode, rootRange, remain)\n\n\tcase \"local\":\n\t\tname, rng, remain, diags := parseSingleAttrRef(traversal)\n\t\treturn &Reference{\n\t\t\tSubject:     LocalValue{Name: name},\n\t\t\tSourceRange: tfdiags.SourceRangeFromHCL(rng),\n\t\t\tRemaining:   remain,\n\t\t}, diags\n\n\tcase \"module\":\n\t\tcallName, callRange, remain, diags := parseSingleAttrRef(traversal)\n\t\tif diags.HasErrors() {\n\t\t\treturn nil, diags\n\t\t}\n\n\t\t// A traversal starting with \"module\" can either be a reference to\n\t\t// an entire module instance or to a single output from a module\n\t\t// instance, depending on what we find after this introducer.\n\n\t\tcallInstance := ModuleCallInstance{\n\t\t\tCall: ModuleCall{\n\t\t\t\tName: callName,\n\t\t\t},\n\t\t\tKey: NoKey,\n\t\t}\n\n\t\tif len(remain) == 0 {\n\t\t\t// Reference to an entire module instance. Might alternatively\n\t\t\t// be a reference to a collection of instances of a particular\n\t\t\t// module, but the caller will need to deal with that ambiguity\n\t\t\t// since we don't have enough context here.\n\t\t\treturn &Reference{\n\t\t\t\tSubject:     callInstance,\n\t\t\t\tSourceRange: tfdiags.SourceRangeFromHCL(callRange),\n\t\t\t\tRemaining:   remain,\n\t\t\t}, diags\n\t\t}\n\n\t\tif idxTrav, ok := remain[0].(hcl.TraverseIndex); ok {\n\t\t\tvar err error\n\t\t\tcallInstance.Key, err = ParseInstanceKey(idxTrav.Key)\n\t\t\tif err != nil {\n\t\t\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\tSummary:  \"Invalid index key\",\n\t\t\t\t\tDetail:   fmt.Sprintf(\"Invalid index for module instance: %s.\", err),\n\t\t\t\t\tSubject:  &idxTrav.SrcRange,\n\t\t\t\t})\n\t\t\t\treturn nil, diags\n\t\t\t}\n\t\t\tremain = remain[1:]\n\n\t\t\tif len(remain) == 0 {\n\t\t\t\t// Also a reference to an entire module instance, but we have a key\n\t\t\t\t// now.\n\t\t\t\treturn &Reference{\n\t\t\t\t\tSubject:     callInstance,\n\t\t\t\t\tSourceRange: tfdiags.SourceRangeFromHCL(hcl.RangeBetween(callRange, idxTrav.SrcRange)),\n\t\t\t\t\tRemaining:   remain,\n\t\t\t\t}, diags\n\t\t\t}\n\t\t}\n\n\t\tif attrTrav, ok := remain[0].(hcl.TraverseAttr); ok {\n\t\t\tremain = remain[1:]\n\t\t\treturn &Reference{\n\t\t\t\tSubject: ModuleCallOutput{\n\t\t\t\t\tName: attrTrav.Name,\n\t\t\t\t\tCall: callInstance,\n\t\t\t\t},\n\t\t\t\tSourceRange: tfdiags.SourceRangeFromHCL(hcl.RangeBetween(callRange, attrTrav.SrcRange)),\n\t\t\t\tRemaining:   remain,\n\t\t\t}, diags\n\t\t}\n\n\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Invalid reference\",\n\t\t\tDetail:   \"Module instance objects do not support this operation.\",\n\t\t\tSubject:  remain[0].SourceRange().Ptr(),\n\t\t})\n\t\treturn nil, diags\n\n\tcase \"path\":\n\t\tname, rng, remain, diags := parseSingleAttrRef(traversal)\n\t\treturn &Reference{\n\t\t\tSubject:     PathAttr{Name: name},\n\t\t\tSourceRange: tfdiags.SourceRangeFromHCL(rng),\n\t\t\tRemaining:   remain,\n\t\t}, diags\n\n\tcase \"self\":\n\t\treturn &Reference{\n\t\t\tSubject:     Self,\n\t\t\tSourceRange: tfdiags.SourceRangeFromHCL(rootRange),\n\t\t\tRemaining:   traversal[1:],\n\t\t}, diags\n\n\tcase \"terraform\":\n\t\tname, rng, remain, diags := parseSingleAttrRef(traversal)\n\t\treturn &Reference{\n\t\t\tSubject:     TerraformAttr{Name: name},\n\t\t\tSourceRange: tfdiags.SourceRangeFromHCL(rng),\n\t\t\tRemaining:   remain,\n\t\t}, diags\n\n\tcase \"var\":\n\t\tname, rng, remain, diags := parseSingleAttrRef(traversal)\n\t\treturn &Reference{\n\t\t\tSubject:     InputVariable{Name: name},\n\t\t\tSourceRange: tfdiags.SourceRangeFromHCL(rng),\n\t\t\tRemaining:   remain,\n\t\t}, diags\n\n\tdefault:\n\t\treturn parseResourceRef(ManagedResourceMode, rootRange, traversal)\n\t}\n}\n\nfunc parseResourceRef(mode ResourceMode, startRange hcl.Range, traversal hcl.Traversal) (*Reference, tfdiags.Diagnostics) {\n\tvar diags tfdiags.Diagnostics\n\n\tif len(traversal) < 2 {\n\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Invalid reference\",\n\t\t\tDetail:   `A reference to a resource type must be followed by at least one attribute access, specifying the resource name.`,\n\t\t\tSubject:  hcl.RangeBetween(traversal[0].SourceRange(), traversal[len(traversal)-1].SourceRange()).Ptr(),\n\t\t})\n\t\treturn nil, diags\n\t}\n\n\tvar typeName, name string\n\tswitch tt := traversal[0].(type) { // Could be either root or attr, depending on our resource mode\n\tcase hcl.TraverseRoot:\n\t\ttypeName = tt.Name\n\tcase hcl.TraverseAttr:\n\t\ttypeName = tt.Name\n\tdefault:\n\t\t// If it isn't a TraverseRoot then it must be a \"data\" reference.\n\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Invalid reference\",\n\t\t\tDetail:   `The \"data\" object does not support this operation.`,\n\t\t\tSubject:  traversal[0].SourceRange().Ptr(),\n\t\t})\n\t\treturn nil, diags\n\t}\n\n\tattrTrav, ok := traversal[1].(hcl.TraverseAttr)\n\tif !ok {\n\t\tvar what string\n\t\tswitch mode {\n\t\tcase DataResourceMode:\n\t\t\twhat = \"data source\"\n\t\tdefault:\n\t\t\twhat = \"resource type\"\n\t\t}\n\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Invalid reference\",\n\t\t\tDetail:   fmt.Sprintf(`A reference to a %s must be followed by at least one attribute access, specifying the resource name.`, what),\n\t\t\tSubject:  traversal[1].SourceRange().Ptr(),\n\t\t})\n\t\treturn nil, diags\n\t}\n\tname = attrTrav.Name\n\trng := hcl.RangeBetween(startRange, attrTrav.SrcRange)\n\tremain := traversal[2:]\n\n\tresourceAddr := Resource{\n\t\tMode: mode,\n\t\tType: typeName,\n\t\tName: name,\n\t}\n\tresourceInstAddr := ResourceInstance{\n\t\tResource: resourceAddr,\n\t\tKey:      NoKey,\n\t}\n\n\tif len(remain) == 0 {\n\t\t// This might actually be a reference to the collection of all instances\n\t\t// of the resource, but we don't have enough context here to decide\n\t\t// so we'll let the caller resolve that ambiguity.\n\t\treturn &Reference{\n\t\t\tSubject:     resourceInstAddr,\n\t\t\tSourceRange: tfdiags.SourceRangeFromHCL(rng),\n\t\t}, diags\n\t}\n\n\tif idxTrav, ok := remain[0].(hcl.TraverseIndex); ok {\n\t\tvar err error\n\t\tresourceInstAddr.Key, err = ParseInstanceKey(idxTrav.Key)\n\t\tif err != nil {\n\t\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Invalid index key\",\n\t\t\t\tDetail:   fmt.Sprintf(\"Invalid index for resource instance: %s.\", err),\n\t\t\t\tSubject:  &idxTrav.SrcRange,\n\t\t\t})\n\t\t\treturn nil, diags\n\t\t}\n\t\tremain = remain[1:]\n\t\trng = hcl.RangeBetween(rng, idxTrav.SrcRange)\n\t}\n\n\treturn &Reference{\n\t\tSubject:     resourceInstAddr,\n\t\tSourceRange: tfdiags.SourceRangeFromHCL(rng),\n\t\tRemaining:   remain,\n\t}, diags\n}\n\nfunc parseSingleAttrRef(traversal hcl.Traversal) (string, hcl.Range, hcl.Traversal, tfdiags.Diagnostics) {\n\tvar diags tfdiags.Diagnostics\n\n\troot := traversal.RootName()\n\trootRange := traversal[0].SourceRange()\n\n\tif len(traversal) < 2 {\n\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Invalid reference\",\n\t\t\tDetail:   fmt.Sprintf(\"The %q object cannot be accessed directly. Instead, access one of its attributes.\", root),\n\t\t\tSubject:  &rootRange,\n\t\t})\n\t\treturn \"\", hcl.Range{}, nil, diags\n\t}\n\tif attrTrav, ok := traversal[1].(hcl.TraverseAttr); ok {\n\t\treturn attrTrav.Name, hcl.RangeBetween(rootRange, attrTrav.SrcRange), traversal[2:], diags\n\t}\n\tdiags = diags.Append(&hcl.Diagnostic{\n\t\tSeverity: hcl.DiagError,\n\t\tSummary:  \"Invalid reference\",\n\t\tDetail:   fmt.Sprintf(\"The %q object does not support this operation.\", root),\n\t\tSubject:  traversal[1].SourceRange().Ptr(),\n\t})\n\treturn \"\", hcl.Range{}, nil, diags\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/addrs/parse_target.go",
    "content": "package addrs\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/hashicorp/hcl2/hcl/hclsyntax\"\n\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n)\n\n// Target describes a targeted address with source location information.\ntype Target struct {\n\tSubject     Targetable\n\tSourceRange tfdiags.SourceRange\n}\n\n// ParseTarget attempts to interpret the given traversal as a targetable\n// address. The given traversal must be absolute, or this function will\n// panic.\n//\n// If no error diagnostics are returned, the returned target includes the\n// address that was extracted and the source range it was extracted from.\n//\n// If error diagnostics are returned then the Target value is invalid and\n// must not be used.\nfunc ParseTarget(traversal hcl.Traversal) (*Target, tfdiags.Diagnostics) {\n\tpath, remain, diags := parseModuleInstancePrefix(traversal)\n\tif diags.HasErrors() {\n\t\treturn nil, diags\n\t}\n\n\trng := tfdiags.SourceRangeFromHCL(traversal.SourceRange())\n\n\tif len(remain) == 0 {\n\t\treturn &Target{\n\t\t\tSubject:     path,\n\t\t\tSourceRange: rng,\n\t\t}, diags\n\t}\n\n\tmode := ManagedResourceMode\n\tif remain.RootName() == \"data\" {\n\t\tmode = DataResourceMode\n\t\tremain = remain[1:]\n\t}\n\n\tif len(remain) < 2 {\n\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Invalid address\",\n\t\t\tDetail:   \"Resource specification must include a resource type and name.\",\n\t\t\tSubject:  remain.SourceRange().Ptr(),\n\t\t})\n\t\treturn nil, diags\n\t}\n\n\tvar typeName, name string\n\tswitch tt := remain[0].(type) {\n\tcase hcl.TraverseRoot:\n\t\ttypeName = tt.Name\n\tcase hcl.TraverseAttr:\n\t\ttypeName = tt.Name\n\tdefault:\n\t\tswitch mode {\n\t\tcase ManagedResourceMode:\n\t\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Invalid address\",\n\t\t\t\tDetail:   \"A resource type name is required.\",\n\t\t\t\tSubject:  remain[0].SourceRange().Ptr(),\n\t\t\t})\n\t\tcase DataResourceMode:\n\t\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Invalid address\",\n\t\t\t\tDetail:   \"A data source name is required.\",\n\t\t\t\tSubject:  remain[0].SourceRange().Ptr(),\n\t\t\t})\n\t\tdefault:\n\t\t\tpanic(\"unknown mode\")\n\t\t}\n\t\treturn nil, diags\n\t}\n\n\tswitch tt := remain[1].(type) {\n\tcase hcl.TraverseAttr:\n\t\tname = tt.Name\n\tdefault:\n\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Invalid address\",\n\t\t\tDetail:   \"A resource name is required.\",\n\t\t\tSubject:  remain[1].SourceRange().Ptr(),\n\t\t})\n\t\treturn nil, diags\n\t}\n\n\tvar subject Targetable\n\tremain = remain[2:]\n\tswitch len(remain) {\n\tcase 0:\n\t\tsubject = path.Resource(mode, typeName, name)\n\tcase 1:\n\t\tif tt, ok := remain[0].(hcl.TraverseIndex); ok {\n\t\t\tkey, err := ParseInstanceKey(tt.Key)\n\t\t\tif err != nil {\n\t\t\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\tSummary:  \"Invalid address\",\n\t\t\t\t\tDetail:   fmt.Sprintf(\"Invalid resource instance key: %s.\", err),\n\t\t\t\t\tSubject:  remain[0].SourceRange().Ptr(),\n\t\t\t\t})\n\t\t\t\treturn nil, diags\n\t\t\t}\n\n\t\t\tsubject = path.ResourceInstance(mode, typeName, name, key)\n\t\t} else {\n\t\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Invalid address\",\n\t\t\t\tDetail:   \"Resource instance key must be given in square brackets.\",\n\t\t\t\tSubject:  remain[0].SourceRange().Ptr(),\n\t\t\t})\n\t\t\treturn nil, diags\n\t\t}\n\tdefault:\n\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Invalid address\",\n\t\t\tDetail:   \"Unexpected extra operators after address.\",\n\t\t\tSubject:  remain[1].SourceRange().Ptr(),\n\t\t})\n\t\treturn nil, diags\n\t}\n\n\treturn &Target{\n\t\tSubject:     subject,\n\t\tSourceRange: rng,\n\t}, diags\n}\n\n// ParseTargetStr is a helper wrapper around ParseTarget that takes a string\n// and parses it with the HCL native syntax traversal parser before\n// interpreting it.\n//\n// This should be used only in specialized situations since it will cause the\n// created references to not have any meaningful source location information.\n// If a target string is coming from a source that should be identified in\n// error messages then the caller should instead parse it directly using a\n// suitable function from the HCL API and pass the traversal itself to\n// ParseTarget.\n//\n// Error diagnostics are returned if either the parsing fails or the analysis\n// of the traversal fails. There is no way for the caller to distinguish the\n// two kinds of diagnostics programmatically. If error diagnostics are returned\n// the returned target may be nil or incomplete.\nfunc ParseTargetStr(str string) (*Target, tfdiags.Diagnostics) {\n\tvar diags tfdiags.Diagnostics\n\n\ttraversal, parseDiags := hclsyntax.ParseTraversalAbs([]byte(str), \"\", hcl.Pos{Line: 1, Column: 1})\n\tdiags = diags.Append(parseDiags)\n\tif parseDiags.HasErrors() {\n\t\treturn nil, diags\n\t}\n\n\ttarget, targetDiags := ParseTarget(traversal)\n\tdiags = diags.Append(targetDiags)\n\treturn target, diags\n}\n\n// ParseAbsResource attempts to interpret the given traversal as an absolute\n// resource address, using the same syntax as expected by ParseTarget.\n//\n// If no error diagnostics are returned, the returned target includes the\n// address that was extracted and the source range it was extracted from.\n//\n// If error diagnostics are returned then the AbsResource value is invalid and\n// must not be used.\nfunc ParseAbsResource(traversal hcl.Traversal) (AbsResource, tfdiags.Diagnostics) {\n\taddr, diags := ParseTarget(traversal)\n\tif diags.HasErrors() {\n\t\treturn AbsResource{}, diags\n\t}\n\n\tswitch tt := addr.Subject.(type) {\n\n\tcase AbsResource:\n\t\treturn tt, diags\n\n\tcase AbsResourceInstance: // Catch likely user error with specialized message\n\t\t// Assume that the last element of the traversal must be the index,\n\t\t// since that's required for a valid resource instance address.\n\t\tindexStep := traversal[len(traversal)-1]\n\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Invalid address\",\n\t\t\tDetail:   \"A resource address is required. This instance key identifies a specific resource instance, which is not expected here.\",\n\t\t\tSubject:  indexStep.SourceRange().Ptr(),\n\t\t})\n\t\treturn AbsResource{}, diags\n\n\tcase ModuleInstance: // Catch likely user error with specialized message\n\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Invalid address\",\n\t\t\tDetail:   \"A resource address is required here. The module path must be followed by a resource specification.\",\n\t\t\tSubject:  traversal.SourceRange().Ptr(),\n\t\t})\n\t\treturn AbsResource{}, diags\n\n\tdefault: // Generic message for other address types\n\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Invalid address\",\n\t\t\tDetail:   \"A resource address is required here.\",\n\t\t\tSubject:  traversal.SourceRange().Ptr(),\n\t\t})\n\t\treturn AbsResource{}, diags\n\n\t}\n}\n\n// ParseAbsResourceStr is a helper wrapper around ParseAbsResource that takes a\n// string and parses it with the HCL native syntax traversal parser before\n// interpreting it.\n//\n// Error diagnostics are returned if either the parsing fails or the analysis\n// of the traversal fails. There is no way for the caller to distinguish the\n// two kinds of diagnostics programmatically. If error diagnostics are returned\n// the returned address may be incomplete.\n//\n// Since this function has no context about the source of the given string,\n// any returned diagnostics will not have meaningful source location\n// information.\nfunc ParseAbsResourceStr(str string) (AbsResource, tfdiags.Diagnostics) {\n\tvar diags tfdiags.Diagnostics\n\n\ttraversal, parseDiags := hclsyntax.ParseTraversalAbs([]byte(str), \"\", hcl.Pos{Line: 1, Column: 1})\n\tdiags = diags.Append(parseDiags)\n\tif parseDiags.HasErrors() {\n\t\treturn AbsResource{}, diags\n\t}\n\n\taddr, addrDiags := ParseAbsResource(traversal)\n\tdiags = diags.Append(addrDiags)\n\treturn addr, diags\n}\n\n// ParseAbsResourceInstance attempts to interpret the given traversal as an\n// absolute resource instance address, using the same syntax as expected by\n// ParseTarget.\n//\n// If no error diagnostics are returned, the returned target includes the\n// address that was extracted and the source range it was extracted from.\n//\n// If error diagnostics are returned then the AbsResource value is invalid and\n// must not be used.\nfunc ParseAbsResourceInstance(traversal hcl.Traversal) (AbsResourceInstance, tfdiags.Diagnostics) {\n\taddr, diags := ParseTarget(traversal)\n\tif diags.HasErrors() {\n\t\treturn AbsResourceInstance{}, diags\n\t}\n\n\tswitch tt := addr.Subject.(type) {\n\n\tcase AbsResource:\n\t\treturn tt.Instance(NoKey), diags\n\n\tcase AbsResourceInstance:\n\t\treturn tt, diags\n\n\tcase ModuleInstance: // Catch likely user error with specialized message\n\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Invalid address\",\n\t\t\tDetail:   \"A resource instance address is required here. The module path must be followed by a resource instance specification.\",\n\t\t\tSubject:  traversal.SourceRange().Ptr(),\n\t\t})\n\t\treturn AbsResourceInstance{}, diags\n\n\tdefault: // Generic message for other address types\n\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Invalid address\",\n\t\t\tDetail:   \"A resource address is required here.\",\n\t\t\tSubject:  traversal.SourceRange().Ptr(),\n\t\t})\n\t\treturn AbsResourceInstance{}, diags\n\n\t}\n}\n\n// ParseAbsResourceInstanceStr is a helper wrapper around\n// ParseAbsResourceInstance that takes a string and parses it with the HCL\n// native syntax traversal parser before interpreting it.\n//\n// Error diagnostics are returned if either the parsing fails or the analysis\n// of the traversal fails. There is no way for the caller to distinguish the\n// two kinds of diagnostics programmatically. If error diagnostics are returned\n// the returned address may be incomplete.\n//\n// Since this function has no context about the source of the given string,\n// any returned diagnostics will not have meaningful source location\n// information.\nfunc ParseAbsResourceInstanceStr(str string) (AbsResourceInstance, tfdiags.Diagnostics) {\n\tvar diags tfdiags.Diagnostics\n\n\ttraversal, parseDiags := hclsyntax.ParseTraversalAbs([]byte(str), \"\", hcl.Pos{Line: 1, Column: 1})\n\tdiags = diags.Append(parseDiags)\n\tif parseDiags.HasErrors() {\n\t\treturn AbsResourceInstance{}, diags\n\t}\n\n\taddr, addrDiags := ParseAbsResourceInstance(traversal)\n\tdiags = diags.Append(addrDiags)\n\treturn addr, diags\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/addrs/path_attr.go",
    "content": "package addrs\n\n// PathAttr is the address of an attribute of the \"path\" object in\n// the interpolation scope, like \"path.module\".\ntype PathAttr struct {\n\treferenceable\n\tName string\n}\n\nfunc (pa PathAttr) String() string {\n\treturn \"path.\" + pa.Name\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/addrs/provider_config.go",
    "content": "package addrs\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/hashicorp/terraform/tfdiags\"\n\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/hashicorp/hcl2/hcl/hclsyntax\"\n)\n\n// ProviderConfig is the address of a provider configuration.\ntype ProviderConfig struct {\n\tType string\n\n\t// If not empty, Alias identifies which non-default (aliased) provider\n\t// configuration this address refers to.\n\tAlias string\n}\n\n// NewDefaultProviderConfig returns the address of the default (un-aliased)\n// configuration for the provider with the given type name.\nfunc NewDefaultProviderConfig(typeName string) ProviderConfig {\n\treturn ProviderConfig{\n\t\tType: typeName,\n\t}\n}\n\n// ParseProviderConfigCompact parses the given absolute traversal as a relative\n// provider address in compact form. The following are examples of traversals\n// that can be successfully parsed as compact relative provider configuration\n// addresses:\n//\n//     aws\n//     aws.foo\n//\n// This function will panic if given a relative traversal.\n//\n// If the returned diagnostics contains errors then the result value is invalid\n// and must not be used.\nfunc ParseProviderConfigCompact(traversal hcl.Traversal) (ProviderConfig, tfdiags.Diagnostics) {\n\tvar diags tfdiags.Diagnostics\n\tret := ProviderConfig{\n\t\tType: traversal.RootName(),\n\t}\n\n\tif len(traversal) < 2 {\n\t\t// Just a type name, then.\n\t\treturn ret, diags\n\t}\n\n\taliasStep := traversal[1]\n\tswitch ts := aliasStep.(type) {\n\tcase hcl.TraverseAttr:\n\t\tret.Alias = ts.Name\n\t\treturn ret, diags\n\tdefault:\n\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Invalid provider configuration address\",\n\t\t\tDetail:   \"The provider type name must either stand alone or be followed by an alias name separated with a dot.\",\n\t\t\tSubject:  aliasStep.SourceRange().Ptr(),\n\t\t})\n\t}\n\n\tif len(traversal) > 2 {\n\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Invalid provider configuration address\",\n\t\t\tDetail:   \"Extraneous extra operators after provider configuration address.\",\n\t\t\tSubject:  traversal[2:].SourceRange().Ptr(),\n\t\t})\n\t}\n\n\treturn ret, diags\n}\n\n// ParseProviderConfigCompactStr is a helper wrapper around ParseProviderConfigCompact\n// that takes a string and parses it with the HCL native syntax traversal parser\n// before interpreting it.\n//\n// This should be used only in specialized situations since it will cause the\n// created references to not have any meaningful source location information.\n// If a reference string is coming from a source that should be identified in\n// error messages then the caller should instead parse it directly using a\n// suitable function from the HCL API and pass the traversal itself to\n// ParseProviderConfigCompact.\n//\n// Error diagnostics are returned if either the parsing fails or the analysis\n// of the traversal fails. There is no way for the caller to distinguish the\n// two kinds of diagnostics programmatically. If error diagnostics are returned\n// then the returned address is invalid.\nfunc ParseProviderConfigCompactStr(str string) (ProviderConfig, tfdiags.Diagnostics) {\n\tvar diags tfdiags.Diagnostics\n\n\ttraversal, parseDiags := hclsyntax.ParseTraversalAbs([]byte(str), \"\", hcl.Pos{Line: 1, Column: 1})\n\tdiags = diags.Append(parseDiags)\n\tif parseDiags.HasErrors() {\n\t\treturn ProviderConfig{}, diags\n\t}\n\n\taddr, addrDiags := ParseProviderConfigCompact(traversal)\n\tdiags = diags.Append(addrDiags)\n\treturn addr, diags\n}\n\n// Absolute returns an AbsProviderConfig from the receiver and the given module\n// instance address.\nfunc (pc ProviderConfig) Absolute(module ModuleInstance) AbsProviderConfig {\n\treturn AbsProviderConfig{\n\t\tModule:         module,\n\t\tProviderConfig: pc,\n\t}\n}\n\nfunc (pc ProviderConfig) String() string {\n\tif pc.Type == \"\" {\n\t\t// Should never happen; always indicates a bug\n\t\treturn \"provider.<invalid>\"\n\t}\n\n\tif pc.Alias != \"\" {\n\t\treturn fmt.Sprintf(\"provider.%s.%s\", pc.Type, pc.Alias)\n\t}\n\n\treturn \"provider.\" + pc.Type\n}\n\n// StringCompact is an alternative to String that returns the form that can\n// be parsed by ParseProviderConfigCompact, without the \"provider.\" prefix.\nfunc (pc ProviderConfig) StringCompact() string {\n\tif pc.Alias != \"\" {\n\t\treturn fmt.Sprintf(\"%s.%s\", pc.Type, pc.Alias)\n\t}\n\treturn pc.Type\n}\n\n// AbsProviderConfig is the absolute address of a provider configuration\n// within a particular module instance.\ntype AbsProviderConfig struct {\n\tModule         ModuleInstance\n\tProviderConfig ProviderConfig\n}\n\n// ParseAbsProviderConfig parses the given traversal as an absolute provider\n// address. The following are examples of traversals that can be successfully\n// parsed as absolute provider configuration addresses:\n//\n//     provider.aws\n//     provider.aws.foo\n//     module.bar.provider.aws\n//     module.bar.module.baz.provider.aws.foo\n//     module.foo[1].provider.aws.foo\n//\n// This type of address is used, for example, to record the relationships\n// between resources and provider configurations in the state structure.\n// This type of address is not generally used in the UI, except in error\n// messages that refer to provider configurations.\nfunc ParseAbsProviderConfig(traversal hcl.Traversal) (AbsProviderConfig, tfdiags.Diagnostics) {\n\tmodInst, remain, diags := parseModuleInstancePrefix(traversal)\n\tret := AbsProviderConfig{\n\t\tModule: modInst,\n\t}\n\tif len(remain) < 2 || remain.RootName() != \"provider\" {\n\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Invalid provider configuration address\",\n\t\t\tDetail:   \"Provider address must begin with \\\"provider.\\\", followed by a provider type name.\",\n\t\t\tSubject:  remain.SourceRange().Ptr(),\n\t\t})\n\t\treturn ret, diags\n\t}\n\tif len(remain) > 3 {\n\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Invalid provider configuration address\",\n\t\t\tDetail:   \"Extraneous operators after provider configuration alias.\",\n\t\t\tSubject:  hcl.Traversal(remain[3:]).SourceRange().Ptr(),\n\t\t})\n\t\treturn ret, diags\n\t}\n\n\tif tt, ok := remain[1].(hcl.TraverseAttr); ok {\n\t\tret.ProviderConfig.Type = tt.Name\n\t} else {\n\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Invalid provider configuration address\",\n\t\t\tDetail:   \"The prefix \\\"provider.\\\" must be followed by a provider type name.\",\n\t\t\tSubject:  remain[1].SourceRange().Ptr(),\n\t\t})\n\t\treturn ret, diags\n\t}\n\n\tif len(remain) == 3 {\n\t\tif tt, ok := remain[2].(hcl.TraverseAttr); ok {\n\t\t\tret.ProviderConfig.Alias = tt.Name\n\t\t} else {\n\t\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Invalid provider configuration address\",\n\t\t\t\tDetail:   \"Provider type name must be followed by a configuration alias name.\",\n\t\t\t\tSubject:  remain[2].SourceRange().Ptr(),\n\t\t\t})\n\t\t\treturn ret, diags\n\t\t}\n\t}\n\n\treturn ret, diags\n}\n\n// ParseAbsProviderConfigStr is a helper wrapper around ParseAbsProviderConfig\n// that takes a string and parses it with the HCL native syntax traversal parser\n// before interpreting it.\n//\n// This should be used only in specialized situations since it will cause the\n// created references to not have any meaningful source location information.\n// If a reference string is coming from a source that should be identified in\n// error messages then the caller should instead parse it directly using a\n// suitable function from the HCL API and pass the traversal itself to\n// ParseAbsProviderConfig.\n//\n// Error diagnostics are returned if either the parsing fails or the analysis\n// of the traversal fails. There is no way for the caller to distinguish the\n// two kinds of diagnostics programmatically. If error diagnostics are returned\n// the returned address is invalid.\nfunc ParseAbsProviderConfigStr(str string) (AbsProviderConfig, tfdiags.Diagnostics) {\n\tvar diags tfdiags.Diagnostics\n\n\ttraversal, parseDiags := hclsyntax.ParseTraversalAbs([]byte(str), \"\", hcl.Pos{Line: 1, Column: 1})\n\tdiags = diags.Append(parseDiags)\n\tif parseDiags.HasErrors() {\n\t\treturn AbsProviderConfig{}, diags\n\t}\n\n\taddr, addrDiags := ParseAbsProviderConfig(traversal)\n\tdiags = diags.Append(addrDiags)\n\treturn addr, diags\n}\n\n// ProviderConfigDefault returns the address of the default provider config\n// of the given type inside the recieving module instance.\nfunc (m ModuleInstance) ProviderConfigDefault(name string) AbsProviderConfig {\n\treturn AbsProviderConfig{\n\t\tModule: m,\n\t\tProviderConfig: ProviderConfig{\n\t\t\tType: name,\n\t\t},\n\t}\n}\n\n// ProviderConfigAliased returns the address of an aliased provider config\n// of with given type and alias inside the recieving module instance.\nfunc (m ModuleInstance) ProviderConfigAliased(name, alias string) AbsProviderConfig {\n\treturn AbsProviderConfig{\n\t\tModule: m,\n\t\tProviderConfig: ProviderConfig{\n\t\t\tType:  name,\n\t\t\tAlias: alias,\n\t\t},\n\t}\n}\n\n// Inherited returns an address that the receiving configuration address might\n// inherit from in a parent module. The second bool return value indicates if\n// such inheritance is possible, and thus whether the returned address is valid.\n//\n// Inheritance is possible only for default (un-aliased) providers in modules\n// other than the root module. Even if a valid address is returned, inheritence\n// may not be performed for other reasons, such as if the calling module\n// provided explicit provider configurations within the call for this module.\n// The ProviderTransformer graph transform in the main terraform module has\n// the authoritative logic for provider inheritance, and this method is here\n// mainly just for its benefit.\nfunc (pc AbsProviderConfig) Inherited() (AbsProviderConfig, bool) {\n\t// Can't inherit if we're already in the root.\n\tif len(pc.Module) == 0 {\n\t\treturn AbsProviderConfig{}, false\n\t}\n\n\t// Can't inherit if we have an alias.\n\tif pc.ProviderConfig.Alias != \"\" {\n\t\treturn AbsProviderConfig{}, false\n\t}\n\n\t// Otherwise, we might inherit from a configuration with the same\n\t// provider name in the parent module instance.\n\tparentMod := pc.Module.Parent()\n\treturn pc.ProviderConfig.Absolute(parentMod), true\n}\n\nfunc (pc AbsProviderConfig) String() string {\n\tif len(pc.Module) == 0 {\n\t\treturn pc.ProviderConfig.String()\n\t}\n\treturn fmt.Sprintf(\"%s.%s\", pc.Module.String(), pc.ProviderConfig.String())\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/addrs/referenceable.go",
    "content": "package addrs\n\n// Referenceable is an interface implemented by all address types that can\n// appear as references in configuration language expressions.\ntype Referenceable interface {\n\t// All implementations of this interface must be covered by the type switch\n\t// in lang.Scope.buildEvalContext.\n\treferenceableSigil()\n\n\t// String produces a string representation of the address that could be\n\t// parsed as a HCL traversal and passed to ParseRef to produce an identical\n\t// result.\n\tString() string\n}\n\ntype referenceable struct {\n}\n\nfunc (r referenceable) referenceableSigil() {\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/addrs/resource.go",
    "content": "package addrs\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n)\n\n// Resource is an address for a resource block within configuration, which\n// contains potentially-multiple resource instances if that configuration\n// block uses \"count\" or \"for_each\".\ntype Resource struct {\n\treferenceable\n\tMode ResourceMode\n\tType string\n\tName string\n}\n\nfunc (r Resource) String() string {\n\tswitch r.Mode {\n\tcase ManagedResourceMode:\n\t\treturn fmt.Sprintf(\"%s.%s\", r.Type, r.Name)\n\tcase DataResourceMode:\n\t\treturn fmt.Sprintf(\"data.%s.%s\", r.Type, r.Name)\n\tdefault:\n\t\t// Should never happen, but we'll return a string here rather than\n\t\t// crashing just in case it does.\n\t\treturn fmt.Sprintf(\"<invalid>.%s.%s\", r.Type, r.Name)\n\t}\n}\n\nfunc (r Resource) Equal(o Resource) bool {\n\treturn r.String() == o.String()\n}\n\n// Instance produces the address for a specific instance of the receiver\n// that is idenfied by the given key.\nfunc (r Resource) Instance(key InstanceKey) ResourceInstance {\n\treturn ResourceInstance{\n\t\tResource: r,\n\t\tKey:      key,\n\t}\n}\n\n// Absolute returns an AbsResource from the receiver and the given module\n// instance address.\nfunc (r Resource) Absolute(module ModuleInstance) AbsResource {\n\treturn AbsResource{\n\t\tModule:   module,\n\t\tResource: r,\n\t}\n}\n\n// DefaultProviderConfig returns the address of the provider configuration\n// that should be used for the resource identified by the reciever if it\n// does not have a provider configuration address explicitly set in\n// configuration.\n//\n// This method is not able to verify that such a configuration exists, nor\n// represent the behavior of automatically inheriting certain provider\n// configurations from parent modules. It just does a static analysis of the\n// receiving address and returns an address to start from, relative to the\n// same module that contains the resource.\nfunc (r Resource) DefaultProviderConfig() ProviderConfig {\n\ttypeName := r.Type\n\tif under := strings.Index(typeName, \"_\"); under != -1 {\n\t\ttypeName = typeName[:under]\n\t}\n\treturn ProviderConfig{\n\t\tType: typeName,\n\t}\n}\n\n// ResourceInstance is an address for a specific instance of a resource.\n// When a resource is defined in configuration with \"count\" or \"for_each\" it\n// produces zero or more instances, which can be addressed using this type.\ntype ResourceInstance struct {\n\treferenceable\n\tResource Resource\n\tKey      InstanceKey\n}\n\nfunc (r ResourceInstance) ContainingResource() Resource {\n\treturn r.Resource\n}\n\nfunc (r ResourceInstance) String() string {\n\tif r.Key == NoKey {\n\t\treturn r.Resource.String()\n\t}\n\treturn r.Resource.String() + r.Key.String()\n}\n\nfunc (r ResourceInstance) Equal(o ResourceInstance) bool {\n\treturn r.String() == o.String()\n}\n\n// Absolute returns an AbsResourceInstance from the receiver and the given module\n// instance address.\nfunc (r ResourceInstance) Absolute(module ModuleInstance) AbsResourceInstance {\n\treturn AbsResourceInstance{\n\t\tModule:   module,\n\t\tResource: r,\n\t}\n}\n\n// AbsResource is an absolute address for a resource under a given module path.\ntype AbsResource struct {\n\ttargetable\n\tModule   ModuleInstance\n\tResource Resource\n}\n\n// Resource returns the address of a particular resource within the receiver.\nfunc (m ModuleInstance) Resource(mode ResourceMode, typeName string, name string) AbsResource {\n\treturn AbsResource{\n\t\tModule: m,\n\t\tResource: Resource{\n\t\t\tMode: mode,\n\t\t\tType: typeName,\n\t\t\tName: name,\n\t\t},\n\t}\n}\n\n// Instance produces the address for a specific instance of the receiver\n// that is idenfied by the given key.\nfunc (r AbsResource) Instance(key InstanceKey) AbsResourceInstance {\n\treturn AbsResourceInstance{\n\t\tModule:   r.Module,\n\t\tResource: r.Resource.Instance(key),\n\t}\n}\n\n// TargetContains implements Targetable by returning true if the given other\n// address is either equal to the receiver or is an instance of the\n// receiver.\nfunc (r AbsResource) TargetContains(other Targetable) bool {\n\tswitch to := other.(type) {\n\n\tcase AbsResource:\n\t\t// We'll use our stringification as a cheat-ish way to test for equality.\n\t\treturn to.String() == r.String()\n\n\tcase AbsResourceInstance:\n\t\treturn r.TargetContains(to.ContainingResource())\n\n\tdefault:\n\t\treturn false\n\n\t}\n}\n\nfunc (r AbsResource) String() string {\n\tif len(r.Module) == 0 {\n\t\treturn r.Resource.String()\n\t}\n\treturn fmt.Sprintf(\"%s.%s\", r.Module.String(), r.Resource.String())\n}\n\nfunc (r AbsResource) Equal(o AbsResource) bool {\n\treturn r.String() == o.String()\n}\n\n// AbsResourceInstance is an absolute address for a resource instance under a\n// given module path.\ntype AbsResourceInstance struct {\n\ttargetable\n\tModule   ModuleInstance\n\tResource ResourceInstance\n}\n\n// ResourceInstance returns the address of a particular resource instance within the receiver.\nfunc (m ModuleInstance) ResourceInstance(mode ResourceMode, typeName string, name string, key InstanceKey) AbsResourceInstance {\n\treturn AbsResourceInstance{\n\t\tModule: m,\n\t\tResource: ResourceInstance{\n\t\t\tResource: Resource{\n\t\t\t\tMode: mode,\n\t\t\t\tType: typeName,\n\t\t\t\tName: name,\n\t\t\t},\n\t\t\tKey: key,\n\t\t},\n\t}\n}\n\n// ContainingResource returns the address of the resource that contains the\n// receving resource instance. In other words, it discards the key portion\n// of the address to produce an AbsResource value.\nfunc (r AbsResourceInstance) ContainingResource() AbsResource {\n\treturn AbsResource{\n\t\tModule:   r.Module,\n\t\tResource: r.Resource.ContainingResource(),\n\t}\n}\n\n// TargetContains implements Targetable by returning true if the given other\n// address is equal to the receiver.\nfunc (r AbsResourceInstance) TargetContains(other Targetable) bool {\n\tswitch to := other.(type) {\n\n\tcase AbsResourceInstance:\n\t\t// We'll use our stringification as a cheat-ish way to test for equality.\n\t\treturn to.String() == r.String()\n\n\tdefault:\n\t\treturn false\n\n\t}\n}\n\nfunc (r AbsResourceInstance) String() string {\n\tif len(r.Module) == 0 {\n\t\treturn r.Resource.String()\n\t}\n\treturn fmt.Sprintf(\"%s.%s\", r.Module.String(), r.Resource.String())\n}\n\nfunc (r AbsResourceInstance) Equal(o AbsResourceInstance) bool {\n\treturn r.String() == o.String()\n}\n\n// Less returns true if the receiver should sort before the given other value\n// in a sorted list of addresses.\nfunc (r AbsResourceInstance) Less(o AbsResourceInstance) bool {\n\tswitch {\n\n\tcase len(r.Module) != len(o.Module):\n\t\treturn len(r.Module) < len(o.Module)\n\n\tcase r.Module.String() != o.Module.String():\n\t\treturn r.Module.Less(o.Module)\n\n\tcase r.Resource.Resource.Mode != o.Resource.Resource.Mode:\n\t\treturn r.Resource.Resource.Mode == DataResourceMode\n\n\tcase r.Resource.Resource.Type != o.Resource.Resource.Type:\n\t\treturn r.Resource.Resource.Type < o.Resource.Resource.Type\n\n\tcase r.Resource.Resource.Name != o.Resource.Resource.Name:\n\t\treturn r.Resource.Resource.Name < o.Resource.Resource.Name\n\n\tcase r.Resource.Key != o.Resource.Key:\n\t\treturn InstanceKeyLess(r.Resource.Key, o.Resource.Key)\n\n\tdefault:\n\t\treturn false\n\n\t}\n}\n\n// ResourceMode defines which lifecycle applies to a given resource. Each\n// resource lifecycle has a slightly different address format.\ntype ResourceMode rune\n\n//go:generate stringer -type ResourceMode\n\nconst (\n\t// InvalidResourceMode is the zero value of ResourceMode and is not\n\t// a valid resource mode.\n\tInvalidResourceMode ResourceMode = 0\n\n\t// ManagedResourceMode indicates a managed resource, as defined by\n\t// \"resource\" blocks in configuration.\n\tManagedResourceMode ResourceMode = 'M'\n\n\t// DataResourceMode indicates a data resource, as defined by\n\t// \"data\" blocks in configuration.\n\tDataResourceMode ResourceMode = 'D'\n)\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/addrs/resource_phase.go",
    "content": "package addrs\n\nimport \"fmt\"\n\n// ResourceInstancePhase is a special kind of reference used only internally\n// during graph building to represent resource instances that are in a\n// non-primary state.\n//\n// Graph nodes can declare themselves referenceable via an instance phase\n// or can declare that they reference an instance phase in order to accomodate\n// secondary graph nodes dealing with, for example, destroy actions.\n//\n// This special reference type cannot be accessed directly by end-users, and\n// should never be shown in the UI.\ntype ResourceInstancePhase struct {\n\treferenceable\n\tResourceInstance ResourceInstance\n\tPhase            ResourceInstancePhaseType\n}\n\nvar _ Referenceable = ResourceInstancePhase{}\n\n// Phase returns a special \"phase address\" for the receving instance. See the\n// documentation of ResourceInstancePhase for the limited situations where this\n// is intended to be used.\nfunc (r ResourceInstance) Phase(rpt ResourceInstancePhaseType) ResourceInstancePhase {\n\treturn ResourceInstancePhase{\n\t\tResourceInstance: r,\n\t\tPhase:            rpt,\n\t}\n}\n\n// ContainingResource returns an address for the same phase of the resource\n// that this instance belongs to.\nfunc (rp ResourceInstancePhase) ContainingResource() ResourcePhase {\n\treturn rp.ResourceInstance.Resource.Phase(rp.Phase)\n}\n\nfunc (rp ResourceInstancePhase) String() string {\n\t// We use a different separator here than usual to ensure that we'll\n\t// never conflict with any non-phased resource instance string. This\n\t// is intentionally something that would fail parsing with ParseRef,\n\t// because this special address type should never be exposed in the UI.\n\treturn fmt.Sprintf(\"%s#%s\", rp.ResourceInstance, rp.Phase)\n}\n\n// ResourceInstancePhaseType is an enumeration used with ResourceInstancePhase.\ntype ResourceInstancePhaseType string\n\nconst (\n\t// ResourceInstancePhaseDestroy represents the \"destroy\" phase of a\n\t// resource instance.\n\tResourceInstancePhaseDestroy ResourceInstancePhaseType = \"destroy\"\n\n\t// ResourceInstancePhaseDestroyCBD is similar to ResourceInstancePhaseDestroy\n\t// but is used for resources that have \"create_before_destroy\" set, thus\n\t// requiring a different dependency ordering.\n\tResourceInstancePhaseDestroyCBD ResourceInstancePhaseType = \"destroy-cbd\"\n)\n\nfunc (rpt ResourceInstancePhaseType) String() string {\n\treturn string(rpt)\n}\n\n// ResourcePhase is a special kind of reference used only internally\n// during graph building to represent resources that are in a\n// non-primary state.\n//\n// Graph nodes can declare themselves referenceable via a resource phase\n// or can declare that they reference a resource phase in order to accomodate\n// secondary graph nodes dealing with, for example, destroy actions.\n//\n// Since resources (as opposed to instances) aren't actually phased, this\n// address type is used only as an approximation during initial construction\n// of the resource-oriented plan graph, under the assumption that resource\n// instances with ResourceInstancePhase addresses will be created in dynamic\n// subgraphs during the graph walk.\n//\n// This special reference type cannot be accessed directly by end-users, and\n// should never be shown in the UI.\ntype ResourcePhase struct {\n\treferenceable\n\tResource Resource\n\tPhase    ResourceInstancePhaseType\n}\n\nvar _ Referenceable = ResourcePhase{}\n\n// Phase returns a special \"phase address\" for the receving instance. See the\n// documentation of ResourceInstancePhase for the limited situations where this\n// is intended to be used.\nfunc (r Resource) Phase(rpt ResourceInstancePhaseType) ResourcePhase {\n\treturn ResourcePhase{\n\t\tResource: r,\n\t\tPhase:    rpt,\n\t}\n}\n\nfunc (rp ResourcePhase) String() string {\n\t// We use a different separator here than usual to ensure that we'll\n\t// never conflict with any non-phased resource instance string. This\n\t// is intentionally something that would fail parsing with ParseRef,\n\t// because this special address type should never be exposed in the UI.\n\treturn fmt.Sprintf(\"%s#%s\", rp.Resource, rp.Phase)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/addrs/resourcemode_string.go",
    "content": "// Code generated by \"stringer -type ResourceMode\"; DO NOT EDIT.\n\npackage addrs\n\nimport \"strconv\"\n\nfunc _() {\n\t// An \"invalid array index\" compiler error signifies that the constant values have changed.\n\t// Re-run the stringer command to generate them again.\n\tvar x [1]struct{}\n\t_ = x[InvalidResourceMode-0]\n\t_ = x[ManagedResourceMode-77]\n\t_ = x[DataResourceMode-68]\n}\n\nconst (\n\t_ResourceMode_name_0 = \"InvalidResourceMode\"\n\t_ResourceMode_name_1 = \"DataResourceMode\"\n\t_ResourceMode_name_2 = \"ManagedResourceMode\"\n)\n\nfunc (i ResourceMode) String() string {\n\tswitch {\n\tcase i == 0:\n\t\treturn _ResourceMode_name_0\n\tcase i == 68:\n\t\treturn _ResourceMode_name_1\n\tcase i == 77:\n\t\treturn _ResourceMode_name_2\n\tdefault:\n\t\treturn \"ResourceMode(\" + strconv.FormatInt(int64(i), 10) + \")\"\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/addrs/self.go",
    "content": "package addrs\n\n// Self is the address of the special object \"self\" that behaves as an alias\n// for a containing object currently in scope.\nconst Self selfT = 0\n\ntype selfT int\n\nfunc (s selfT) referenceableSigil() {\n}\n\nfunc (s selfT) String() string {\n\treturn \"self\"\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/addrs/targetable.go",
    "content": "package addrs\n\n// Targetable is an interface implemented by all address types that can be\n// used as \"targets\" for selecting sub-graphs of a graph.\ntype Targetable interface {\n\ttargetableSigil()\n\n\t// TargetContains returns true if the receiver is considered to contain\n\t// the given other address. Containment, for the purpose of targeting,\n\t// means that if a container address is targeted then all of the\n\t// addresses within it are also implicitly targeted.\n\t//\n\t// A targetable address always contains at least itself.\n\tTargetContains(other Targetable) bool\n\n\t// String produces a string representation of the address that could be\n\t// parsed as a HCL traversal and passed to ParseTarget to produce an\n\t// identical result.\n\tString() string\n}\n\ntype targetable struct {\n}\n\nfunc (r targetable) targetableSigil() {\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/addrs/terraform_attr.go",
    "content": "package addrs\n\n// TerraformAttr is the address of an attribute of the \"terraform\" object in\n// the interpolation scope, like \"terraform.workspace\".\ntype TerraformAttr struct {\n\treferenceable\n\tName string\n}\n\nfunc (ta TerraformAttr) String() string {\n\treturn \"terraform.\" + ta.Name\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/command/format/diagnostic.go",
    "content": "package format\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"fmt\"\n\t\"sort\"\n\t\"strings\"\n\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/hashicorp/hcl2/hcled\"\n\t\"github.com/hashicorp/hcl2/hclparse\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n\t\"github.com/mitchellh/colorstring\"\n\twordwrap \"github.com/mitchellh/go-wordwrap\"\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// Diagnostic formats a single diagnostic message.\n//\n// The width argument specifies at what column the diagnostic messages will\n// be wrapped. If set to zero, messages will not be wrapped by this function\n// at all. Although the long-form text parts of the message are wrapped,\n// not all aspects of the message are guaranteed to fit within the specified\n// terminal width.\nfunc Diagnostic(diag tfdiags.Diagnostic, sources map[string][]byte, color *colorstring.Colorize, width int) string {\n\tif diag == nil {\n\t\t// No good reason to pass a nil diagnostic in here...\n\t\treturn \"\"\n\t}\n\n\tvar buf bytes.Buffer\n\n\tswitch diag.Severity() {\n\tcase tfdiags.Error:\n\t\tbuf.WriteString(color.Color(\"\\n[bold][red]Error: [reset]\"))\n\tcase tfdiags.Warning:\n\t\tbuf.WriteString(color.Color(\"\\n[bold][yellow]Warning: [reset]\"))\n\tdefault:\n\t\t// Clear out any coloring that might be applied by Terraform's UI helper,\n\t\t// so our result is not context-sensitive.\n\t\tbuf.WriteString(color.Color(\"\\n[reset]\"))\n\t}\n\n\tdesc := diag.Description()\n\tsourceRefs := diag.Source()\n\n\t// We don't wrap the summary, since we expect it to be terse, and since\n\t// this is where we put the text of a native Go error it may not always\n\t// be pure text that lends itself well to word-wrapping.\n\tfmt.Fprintf(&buf, color.Color(\"[bold]%s[reset]\\n\\n\"), desc.Summary)\n\n\tif sourceRefs.Subject != nil {\n\t\t// We'll borrow HCL's range implementation here, because it has some\n\t\t// handy features to help us produce a nice source code snippet.\n\t\thighlightRange := sourceRefs.Subject.ToHCL()\n\t\tsnippetRange := highlightRange\n\t\tif sourceRefs.Context != nil {\n\t\t\tsnippetRange = sourceRefs.Context.ToHCL()\n\t\t}\n\n\t\t// Make sure the snippet includes the highlight. This should be true\n\t\t// for any reasonable diagnostic, but we'll make sure.\n\t\tsnippetRange = hcl.RangeOver(snippetRange, highlightRange)\n\t\tif snippetRange.Empty() {\n\t\t\tsnippetRange.End.Byte++\n\t\t\tsnippetRange.End.Column++\n\t\t}\n\t\tif highlightRange.Empty() {\n\t\t\thighlightRange.End.Byte++\n\t\t\thighlightRange.End.Column++\n\t\t}\n\n\t\tvar src []byte\n\t\tif sources != nil {\n\t\t\tsrc = sources[snippetRange.Filename]\n\t\t}\n\t\tif src == nil {\n\t\t\t// This should generally not happen, as long as sources are always\n\t\t\t// loaded through the main loader. We may load things in other\n\t\t\t// ways in weird cases, so we'll tolerate it at the expense of\n\t\t\t// a not-so-helpful error message.\n\t\t\tfmt.Fprintf(&buf, \"  on %s line %d:\\n  (source code not available)\\n\", highlightRange.Filename, highlightRange.Start.Line)\n\t\t} else {\n\t\t\tfile, offset := parseRange(src, highlightRange)\n\n\t\t\theaderRange := highlightRange\n\n\t\t\tcontextStr := hcled.ContextString(file, offset-1)\n\t\t\tif contextStr != \"\" {\n\t\t\t\tcontextStr = \", in \" + contextStr\n\t\t\t}\n\n\t\t\tfmt.Fprintf(&buf, \"  on %s line %d%s:\\n\", headerRange.Filename, headerRange.Start.Line, contextStr)\n\n\t\t\t// Config snippet rendering\n\t\t\tsc := hcl.NewRangeScanner(src, highlightRange.Filename, bufio.ScanLines)\n\t\t\tfor sc.Scan() {\n\t\t\t\tlineRange := sc.Range()\n\t\t\t\tif !lineRange.Overlaps(snippetRange) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tbeforeRange, highlightedRange, afterRange := lineRange.PartitionAround(highlightRange)\n\t\t\t\tbefore := beforeRange.SliceBytes(src)\n\t\t\t\thighlighted := highlightedRange.SliceBytes(src)\n\t\t\t\tafter := afterRange.SliceBytes(src)\n\t\t\t\tfmt.Fprintf(\n\t\t\t\t\t&buf, color.Color(\"%4d: %s[underline]%s[reset]%s\\n\"),\n\t\t\t\t\tlineRange.Start.Line,\n\t\t\t\t\tbefore, highlighted, after,\n\t\t\t\t)\n\t\t\t}\n\n\t\t}\n\n\t\tif fromExpr := diag.FromExpr(); fromExpr != nil {\n\t\t\t// We may also be able to generate information about the dynamic\n\t\t\t// values of relevant variables at the point of evaluation, then.\n\t\t\t// This is particularly useful for expressions that get evaluated\n\t\t\t// multiple times with different values, such as blocks using\n\t\t\t// \"count\" and \"for_each\", or within \"for\" expressions.\n\t\t\texpr := fromExpr.Expression\n\t\t\tctx := fromExpr.EvalContext\n\t\t\tvars := expr.Variables()\n\t\t\tstmts := make([]string, 0, len(vars))\n\t\t\tseen := make(map[string]struct{}, len(vars))\n\t\tTraversals:\n\t\t\tfor _, traversal := range vars {\n\t\t\t\tfor len(traversal) > 1 {\n\t\t\t\t\tval, diags := traversal.TraverseAbs(ctx)\n\t\t\t\t\tif diags.HasErrors() {\n\t\t\t\t\t\t// Skip anything that generates errors, since we probably\n\t\t\t\t\t\t// already have the same error in our diagnostics set\n\t\t\t\t\t\t// already.\n\t\t\t\t\t\ttraversal = traversal[:len(traversal)-1]\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\n\t\t\t\t\ttraversalStr := traversalStr(traversal)\n\t\t\t\t\tif _, exists := seen[traversalStr]; exists {\n\t\t\t\t\t\tcontinue Traversals // don't show duplicates when the same variable is referenced multiple times\n\t\t\t\t\t}\n\t\t\t\t\tswitch {\n\t\t\t\t\tcase !val.IsKnown():\n\t\t\t\t\t\t// Can't say anything about this yet, then.\n\t\t\t\t\t\tcontinue Traversals\n\t\t\t\t\tcase val.IsNull():\n\t\t\t\t\t\tstmts = append(stmts, fmt.Sprintf(color.Color(\"[bold]%s[reset] is null\"), traversalStr))\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tstmts = append(stmts, fmt.Sprintf(color.Color(\"[bold]%s[reset] is %s\"), traversalStr, compactValueStr(val)))\n\t\t\t\t\t}\n\t\t\t\t\tseen[traversalStr] = struct{}{}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tsort.Strings(stmts) // FIXME: Should maybe use a traversal-aware sort that can sort numeric indexes properly?\n\n\t\t\tif len(stmts) > 0 {\n\t\t\t\tfmt.Fprint(&buf, color.Color(\"    [dark_gray]|----------------[reset]\\n\"))\n\t\t\t}\n\t\t\tfor _, stmt := range stmts {\n\t\t\t\tfmt.Fprintf(&buf, color.Color(\"    [dark_gray]|[reset] %s\\n\"), stmt)\n\t\t\t}\n\t\t}\n\n\t\tbuf.WriteByte('\\n')\n\t}\n\n\tif desc.Detail != \"\" {\n\t\tdetail := desc.Detail\n\t\tif width != 0 {\n\t\t\tdetail = wordwrap.WrapString(detail, uint(width))\n\t\t}\n\t\tfmt.Fprintf(&buf, \"%s\\n\", detail)\n\t}\n\n\treturn buf.String()\n}\n\nfunc parseRange(src []byte, rng hcl.Range) (*hcl.File, int) {\n\tfilename := rng.Filename\n\toffset := rng.Start.Byte\n\n\t// We need to re-parse here to get a *hcl.File we can interrogate. This\n\t// is not awesome since we presumably already parsed the file earlier too,\n\t// but this re-parsing is architecturally simpler than retaining all of\n\t// the hcl.File objects and we only do this in the case of an error anyway\n\t// so the overhead here is not a big problem.\n\tparser := hclparse.NewParser()\n\tvar file *hcl.File\n\tvar diags hcl.Diagnostics\n\tif strings.HasSuffix(filename, \".json\") {\n\t\tfile, diags = parser.ParseJSON(src, filename)\n\t} else {\n\t\tfile, diags = parser.ParseHCL(src, filename)\n\t}\n\tif diags.HasErrors() {\n\t\treturn file, offset\n\t}\n\n\treturn file, offset\n}\n\n// traversalStr produces a representation of an HCL traversal that is compact,\n// resembles HCL native syntax, and is suitable for display in the UI.\nfunc traversalStr(traversal hcl.Traversal) string {\n\t// This is a specialized subset of traversal rendering tailored to\n\t// producing helpful contextual messages in diagnostics. It is not\n\t// comprehensive nor intended to be used for other purposes.\n\n\tvar buf bytes.Buffer\n\tfor _, step := range traversal {\n\t\tswitch tStep := step.(type) {\n\t\tcase hcl.TraverseRoot:\n\t\t\tbuf.WriteString(tStep.Name)\n\t\tcase hcl.TraverseAttr:\n\t\t\tbuf.WriteByte('.')\n\t\t\tbuf.WriteString(tStep.Name)\n\t\tcase hcl.TraverseIndex:\n\t\t\tbuf.WriteByte('[')\n\t\t\tif keyTy := tStep.Key.Type(); keyTy.IsPrimitiveType() {\n\t\t\t\tbuf.WriteString(compactValueStr(tStep.Key))\n\t\t\t} else {\n\t\t\t\t// We'll just use a placeholder for more complex values,\n\t\t\t\t// since otherwise our result could grow ridiculously long.\n\t\t\t\tbuf.WriteString(\"...\")\n\t\t\t}\n\t\t\tbuf.WriteByte(']')\n\t\t}\n\t}\n\treturn buf.String()\n}\n\n// compactValueStr produces a compact, single-line summary of a given value\n// that is suitable for display in the UI.\n//\n// For primitives it returns a full representation, while for more complex\n// types it instead summarizes the type, size, etc to produce something\n// that is hopefully still somewhat useful but not as verbose as a rendering\n// of the entire data structure.\nfunc compactValueStr(val cty.Value) string {\n\t// This is a specialized subset of value rendering tailored to producing\n\t// helpful but concise messages in diagnostics. It is not comprehensive\n\t// nor intended to be used for other purposes.\n\n\tty := val.Type()\n\tswitch {\n\tcase val.IsNull():\n\t\treturn \"null\"\n\tcase !val.IsKnown():\n\t\t// Should never happen here because we should filter before we get\n\t\t// in here, but we'll do something reasonable rather than panic.\n\t\treturn \"(not yet known)\"\n\tcase ty == cty.Bool:\n\t\tif val.True() {\n\t\t\treturn \"true\"\n\t\t}\n\t\treturn \"false\"\n\tcase ty == cty.Number:\n\t\tbf := val.AsBigFloat()\n\t\treturn bf.Text('g', 10)\n\tcase ty == cty.String:\n\t\t// Go string syntax is not exactly the same as HCL native string syntax,\n\t\t// but we'll accept the minor edge-cases where this is different here\n\t\t// for now, just to get something reasonable here.\n\t\treturn fmt.Sprintf(\"%q\", val.AsString())\n\tcase ty.IsCollectionType() || ty.IsTupleType():\n\t\tl := val.LengthInt()\n\t\tswitch l {\n\t\tcase 0:\n\t\t\treturn \"empty \" + ty.FriendlyName()\n\t\tcase 1:\n\t\t\treturn ty.FriendlyName() + \" with 1 element\"\n\t\tdefault:\n\t\t\treturn fmt.Sprintf(\"%s with %d elements\", ty.FriendlyName(), l)\n\t\t}\n\tcase ty.IsObjectType():\n\t\tatys := ty.AttributeTypes()\n\t\tl := len(atys)\n\t\tswitch l {\n\t\tcase 0:\n\t\t\treturn \"object with no attributes\"\n\t\tcase 1:\n\t\t\tvar name string\n\t\t\tfor k := range atys {\n\t\t\t\tname = k\n\t\t\t}\n\t\t\treturn fmt.Sprintf(\"object with 1 attribute %q\", name)\n\t\tdefault:\n\t\t\treturn fmt.Sprintf(\"object with %d attributes\", l)\n\t\t}\n\tdefault:\n\t\treturn ty.FriendlyName()\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/command/format/diff.go",
    "content": "package format\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"fmt\"\n\t\"sort\"\n\t\"strings\"\n\n\t\"github.com/mitchellh/colorstring\"\n\t\"github.com/zclconf/go-cty/cty\"\n\tctyjson \"github.com/zclconf/go-cty/cty/json\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/configs/configschema\"\n\t\"github.com/hashicorp/terraform/plans\"\n\t\"github.com/hashicorp/terraform/plans/objchange\"\n\t\"github.com/hashicorp/terraform/states\"\n)\n\n// ResourceChange returns a string representation of a change to a particular\n// resource, for inclusion in user-facing plan output.\n//\n// The resource schema must be provided along with the change so that the\n// formatted change can reflect the configuration structure for the associated\n// resource.\n//\n// If \"color\" is non-nil, it will be used to color the result. Otherwise,\n// no color codes will be included.\nfunc ResourceChange(\n\tchange *plans.ResourceInstanceChangeSrc,\n\ttainted bool,\n\tschema *configschema.Block,\n\tcolor *colorstring.Colorize,\n) string {\n\taddr := change.Addr\n\tvar buf bytes.Buffer\n\n\tif color == nil {\n\t\tcolor = &colorstring.Colorize{\n\t\t\tColors:  colorstring.DefaultColors,\n\t\t\tDisable: true,\n\t\t\tReset:   false,\n\t\t}\n\t}\n\n\tdispAddr := addr.String()\n\tif change.DeposedKey != states.NotDeposed {\n\t\tdispAddr = fmt.Sprintf(\"%s (deposed object %s)\", dispAddr, change.DeposedKey)\n\t}\n\n\tswitch change.Action {\n\tcase plans.Create:\n\t\tbuf.WriteString(color.Color(fmt.Sprintf(\"[bold]  # %s[reset] will be created\", dispAddr)))\n\tcase plans.Read:\n\t\tbuf.WriteString(color.Color(fmt.Sprintf(\"[bold]  # %s[reset] will be read during apply\\n  # (config refers to values not yet known)\", dispAddr)))\n\tcase plans.Update:\n\t\tbuf.WriteString(color.Color(fmt.Sprintf(\"[bold]  # %s[reset] will be updated in-place\", dispAddr)))\n\tcase plans.CreateThenDelete, plans.DeleteThenCreate:\n\t\tif tainted {\n\t\t\tbuf.WriteString(color.Color(fmt.Sprintf(\"[bold]  # %s[reset] is tainted, so must be [bold][red]replaced\", dispAddr)))\n\t\t} else {\n\t\t\tbuf.WriteString(color.Color(fmt.Sprintf(\"[bold]  # %s[reset] must be [bold][red]replaced\", dispAddr)))\n\t\t}\n\tcase plans.Delete:\n\t\tbuf.WriteString(color.Color(fmt.Sprintf(\"[bold]  # %s[reset] will be [bold][red]destroyed\", dispAddr)))\n\tdefault:\n\t\t// should never happen, since the above is exhaustive\n\t\tbuf.WriteString(fmt.Sprintf(\"%s has an action the plan renderer doesn't support (this is a bug)\", dispAddr))\n\t}\n\tbuf.WriteString(color.Color(\"[reset]\\n\"))\n\n\tswitch change.Action {\n\tcase plans.Create:\n\t\tbuf.WriteString(color.Color(\"[green]  +[reset] \"))\n\tcase plans.Read:\n\t\tbuf.WriteString(color.Color(\"[cyan] <=[reset] \"))\n\tcase plans.Update:\n\t\tbuf.WriteString(color.Color(\"[yellow]  ~[reset] \"))\n\tcase plans.DeleteThenCreate:\n\t\tbuf.WriteString(color.Color(\"[red]-[reset]/[green]+[reset] \"))\n\tcase plans.CreateThenDelete:\n\t\tbuf.WriteString(color.Color(\"[green]+[reset]/[red]-[reset] \"))\n\tcase plans.Delete:\n\t\tbuf.WriteString(color.Color(\"[red]  -[reset] \"))\n\tdefault:\n\t\tbuf.WriteString(color.Color(\"??? \"))\n\t}\n\n\tswitch addr.Resource.Resource.Mode {\n\tcase addrs.ManagedResourceMode:\n\t\tbuf.WriteString(fmt.Sprintf(\n\t\t\t\"resource %q %q\",\n\t\t\taddr.Resource.Resource.Type,\n\t\t\taddr.Resource.Resource.Name,\n\t\t))\n\tcase addrs.DataResourceMode:\n\t\tbuf.WriteString(fmt.Sprintf(\n\t\t\t\"data %q %q \",\n\t\t\taddr.Resource.Resource.Type,\n\t\t\taddr.Resource.Resource.Name,\n\t\t))\n\tdefault:\n\t\t// should never happen, since the above is exhaustive\n\t\tbuf.WriteString(addr.String())\n\t}\n\n\tbuf.WriteString(\" {\")\n\n\tp := blockBodyDiffPrinter{\n\t\tbuf:             &buf,\n\t\tcolor:           color,\n\t\taction:          change.Action,\n\t\trequiredReplace: change.RequiredReplace,\n\t}\n\n\t// Most commonly-used resources have nested blocks that result in us\n\t// going at least three traversals deep while we recurse here, so we'll\n\t// start with that much capacity and then grow as needed for deeper\n\t// structures.\n\tpath := make(cty.Path, 0, 3)\n\n\tchangeV, err := change.Decode(schema.ImpliedType())\n\tif err != nil {\n\t\t// Should never happen in here, since we've already been through\n\t\t// loads of layers of encode/decode of the planned changes before now.\n\t\tpanic(fmt.Sprintf(\"failed to decode plan for %s while rendering diff: %s\", addr, err))\n\t}\n\n\t// We currently have an opt-out that permits the legacy SDK to return values\n\t// that defy our usual conventions around handling of nesting blocks. To\n\t// avoid the rendering code from needing to handle all of these, we'll\n\t// normalize first.\n\t// (Ideally we'd do this as part of the SDK opt-out implementation in core,\n\t// but we've added it here for now to reduce risk of unexpected impacts\n\t// on other code in core.)\n\tchangeV.Change.Before = objchange.NormalizeObjectFromLegacySDK(changeV.Change.Before, schema)\n\tchangeV.Change.After = objchange.NormalizeObjectFromLegacySDK(changeV.Change.After, schema)\n\n\tbodyWritten := p.writeBlockBodyDiff(schema, changeV.Before, changeV.After, 6, path)\n\tif bodyWritten {\n\t\tbuf.WriteString(\"\\n\")\n\t\tbuf.WriteString(strings.Repeat(\" \", 4))\n\t}\n\tbuf.WriteString(\"}\\n\")\n\n\treturn buf.String()\n}\n\ntype blockBodyDiffPrinter struct {\n\tbuf             *bytes.Buffer\n\tcolor           *colorstring.Colorize\n\taction          plans.Action\n\trequiredReplace cty.PathSet\n}\n\nconst forcesNewResourceCaption = \" [red]# forces replacement[reset]\"\n\n// writeBlockBodyDiff writes attribute or block differences\n// and returns true if any differences were found and written\nfunc (p *blockBodyDiffPrinter) writeBlockBodyDiff(schema *configschema.Block, old, new cty.Value, indent int, path cty.Path) bool {\n\tpath = ctyEnsurePathCapacity(path, 1)\n\n\tbodyWritten := false\n\tblankBeforeBlocks := false\n\t{\n\t\tattrNames := make([]string, 0, len(schema.Attributes))\n\t\tattrNameLen := 0\n\t\tfor name := range schema.Attributes {\n\t\t\toldVal := ctyGetAttrMaybeNull(old, name)\n\t\t\tnewVal := ctyGetAttrMaybeNull(new, name)\n\t\t\tif oldVal.IsNull() && newVal.IsNull() {\n\t\t\t\t// Skip attributes where both old and new values are null\n\t\t\t\t// (we do this early here so that we'll do our value alignment\n\t\t\t\t// based on the longest attribute name that has a change, rather\n\t\t\t\t// than the longest attribute name in the full set.)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tattrNames = append(attrNames, name)\n\t\t\tif len(name) > attrNameLen {\n\t\t\t\tattrNameLen = len(name)\n\t\t\t}\n\t\t}\n\t\tsort.Strings(attrNames)\n\t\tif len(attrNames) > 0 {\n\t\t\tblankBeforeBlocks = true\n\t\t}\n\n\t\tfor _, name := range attrNames {\n\t\t\tattrS := schema.Attributes[name]\n\t\t\toldVal := ctyGetAttrMaybeNull(old, name)\n\t\t\tnewVal := ctyGetAttrMaybeNull(new, name)\n\n\t\t\tbodyWritten = true\n\t\t\tp.writeAttrDiff(name, attrS, oldVal, newVal, attrNameLen, indent, path)\n\t\t}\n\t}\n\n\t{\n\t\tblockTypeNames := make([]string, 0, len(schema.BlockTypes))\n\t\tfor name := range schema.BlockTypes {\n\t\t\tblockTypeNames = append(blockTypeNames, name)\n\t\t}\n\t\tsort.Strings(blockTypeNames)\n\n\t\tfor _, name := range blockTypeNames {\n\t\t\tblockS := schema.BlockTypes[name]\n\t\t\toldVal := ctyGetAttrMaybeNull(old, name)\n\t\t\tnewVal := ctyGetAttrMaybeNull(new, name)\n\n\t\t\tbodyWritten = true\n\t\t\tp.writeNestedBlockDiffs(name, blockS, oldVal, newVal, blankBeforeBlocks, indent, path)\n\n\t\t\t// Always include a blank for any subsequent block types.\n\t\t\tblankBeforeBlocks = true\n\t\t}\n\t}\n\n\treturn bodyWritten\n}\n\nfunc (p *blockBodyDiffPrinter) writeAttrDiff(name string, attrS *configschema.Attribute, old, new cty.Value, nameLen, indent int, path cty.Path) {\n\tpath = append(path, cty.GetAttrStep{Name: name})\n\tp.buf.WriteString(\"\\n\")\n\tp.buf.WriteString(strings.Repeat(\" \", indent))\n\tshowJustNew := false\n\tvar action plans.Action\n\tswitch {\n\tcase old.IsNull():\n\t\taction = plans.Create\n\t\tshowJustNew = true\n\tcase new.IsNull():\n\t\taction = plans.Delete\n\tcase ctyEqualWithUnknown(old, new):\n\t\taction = plans.NoOp\n\t\tshowJustNew = true\n\tdefault:\n\t\taction = plans.Update\n\t}\n\n\tp.writeActionSymbol(action)\n\n\tp.buf.WriteString(p.color.Color(\"[bold]\"))\n\tp.buf.WriteString(name)\n\tp.buf.WriteString(p.color.Color(\"[reset]\"))\n\tp.buf.WriteString(strings.Repeat(\" \", nameLen-len(name)))\n\tp.buf.WriteString(\" = \")\n\n\tif attrS.Sensitive {\n\t\tp.buf.WriteString(\"(sensitive value)\")\n\t} else {\n\t\tswitch {\n\t\tcase showJustNew:\n\t\t\tp.writeValue(new, action, indent+2)\n\t\t\tif p.pathForcesNewResource(path) {\n\t\t\t\tp.buf.WriteString(p.color.Color(forcesNewResourceCaption))\n\t\t\t}\n\t\tdefault:\n\t\t\t// We show new even if it is null to emphasize the fact\n\t\t\t// that it is being unset, since otherwise it is easy to\n\t\t\t// misunderstand that the value is still set to the old value.\n\t\t\tp.writeValueDiff(old, new, indent+2, path)\n\t\t}\n\t}\n}\n\nfunc (p *blockBodyDiffPrinter) writeNestedBlockDiffs(name string, blockS *configschema.NestedBlock, old, new cty.Value, blankBefore bool, indent int, path cty.Path) {\n\tpath = append(path, cty.GetAttrStep{Name: name})\n\tif old.IsNull() && new.IsNull() {\n\t\t// Nothing to do if both old and new is null\n\t\treturn\n\t}\n\n\t// Where old/new are collections representing a nesting mode other than\n\t// NestingSingle, we assume the collection value can never be unknown\n\t// since we always produce the container for the nested objects, even if\n\t// the objects within are computed.\n\n\tswitch blockS.Nesting {\n\tcase configschema.NestingSingle, configschema.NestingGroup:\n\t\tvar action plans.Action\n\t\teqV := new.Equals(old)\n\t\tswitch {\n\t\tcase old.IsNull():\n\t\t\taction = plans.Create\n\t\tcase new.IsNull():\n\t\t\taction = plans.Delete\n\t\tcase !new.IsWhollyKnown() || !old.IsWhollyKnown():\n\t\t\t// \"old\" should actually always be known due to our contract\n\t\t\t// that old values must never be unknown, but we'll allow it\n\t\t\t// anyway to be robust.\n\t\t\taction = plans.Update\n\t\tcase !eqV.IsKnown() || !eqV.True():\n\t\t\taction = plans.Update\n\t\t}\n\n\t\tif blankBefore {\n\t\t\tp.buf.WriteRune('\\n')\n\t\t}\n\t\tp.writeNestedBlockDiff(name, nil, &blockS.Block, action, old, new, indent, path)\n\tcase configschema.NestingList:\n\t\t// For the sake of handling nested blocks, we'll treat a null list\n\t\t// the same as an empty list since the config language doesn't\n\t\t// distinguish these anyway.\n\t\told = ctyNullBlockListAsEmpty(old)\n\t\tnew = ctyNullBlockListAsEmpty(new)\n\n\t\toldItems := ctyCollectionValues(old)\n\t\tnewItems := ctyCollectionValues(new)\n\n\t\t// Here we intentionally preserve the index-based correspondance\n\t\t// between old and new, rather than trying to detect insertions\n\t\t// and removals in the list, because this more accurately reflects\n\t\t// how Terraform Core and providers will understand the change,\n\t\t// particularly when the nested block contains computed attributes\n\t\t// that will themselves maintain correspondance by index.\n\n\t\t// commonLen is number of elements that exist in both lists, which\n\t\t// will be presented as updates (~). Any additional items in one\n\t\t// of the lists will be presented as either creates (+) or deletes (-)\n\t\t// depending on which list they belong to.\n\t\tvar commonLen int\n\t\tswitch {\n\t\tcase len(oldItems) < len(newItems):\n\t\t\tcommonLen = len(oldItems)\n\t\tdefault:\n\t\t\tcommonLen = len(newItems)\n\t\t}\n\n\t\tif blankBefore && (len(oldItems) > 0 || len(newItems) > 0) {\n\t\t\tp.buf.WriteRune('\\n')\n\t\t}\n\n\t\tfor i := 0; i < commonLen; i++ {\n\t\t\tpath := append(path, cty.IndexStep{Key: cty.NumberIntVal(int64(i))})\n\t\t\toldItem := oldItems[i]\n\t\t\tnewItem := newItems[i]\n\t\t\taction := plans.Update\n\t\t\tif oldItem.RawEquals(newItem) {\n\t\t\t\taction = plans.NoOp\n\t\t\t}\n\t\t\tp.writeNestedBlockDiff(name, nil, &blockS.Block, action, oldItem, newItem, indent, path)\n\t\t}\n\t\tfor i := commonLen; i < len(oldItems); i++ {\n\t\t\tpath := append(path, cty.IndexStep{Key: cty.NumberIntVal(int64(i))})\n\t\t\toldItem := oldItems[i]\n\t\t\tnewItem := cty.NullVal(oldItem.Type())\n\t\t\tp.writeNestedBlockDiff(name, nil, &blockS.Block, plans.Delete, oldItem, newItem, indent, path)\n\t\t}\n\t\tfor i := commonLen; i < len(newItems); i++ {\n\t\t\tpath := append(path, cty.IndexStep{Key: cty.NumberIntVal(int64(i))})\n\t\t\tnewItem := newItems[i]\n\t\t\toldItem := cty.NullVal(newItem.Type())\n\t\t\tp.writeNestedBlockDiff(name, nil, &blockS.Block, plans.Create, oldItem, newItem, indent, path)\n\t\t}\n\tcase configschema.NestingSet:\n\t\t// For the sake of handling nested blocks, we'll treat a null set\n\t\t// the same as an empty set since the config language doesn't\n\t\t// distinguish these anyway.\n\t\told = ctyNullBlockSetAsEmpty(old)\n\t\tnew = ctyNullBlockSetAsEmpty(new)\n\n\t\toldItems := ctyCollectionValues(old)\n\t\tnewItems := ctyCollectionValues(new)\n\n\t\tif (len(oldItems) + len(newItems)) == 0 {\n\t\t\t// Nothing to do if both sets are empty\n\t\t\treturn\n\t\t}\n\n\t\tallItems := make([]cty.Value, 0, len(oldItems)+len(newItems))\n\t\tallItems = append(allItems, oldItems...)\n\t\tallItems = append(allItems, newItems...)\n\t\tall := cty.SetVal(allItems)\n\n\t\tif blankBefore {\n\t\t\tp.buf.WriteRune('\\n')\n\t\t}\n\n\t\tfor it := all.ElementIterator(); it.Next(); {\n\t\t\t_, val := it.Element()\n\t\t\tvar action plans.Action\n\t\t\tvar oldValue, newValue cty.Value\n\t\t\tswitch {\n\t\t\tcase !val.IsKnown():\n\t\t\t\taction = plans.Update\n\t\t\t\tnewValue = val\n\t\t\tcase !old.HasElement(val).True():\n\t\t\t\taction = plans.Create\n\t\t\t\toldValue = cty.NullVal(val.Type())\n\t\t\t\tnewValue = val\n\t\t\tcase !new.HasElement(val).True():\n\t\t\t\taction = plans.Delete\n\t\t\t\toldValue = val\n\t\t\t\tnewValue = cty.NullVal(val.Type())\n\t\t\tdefault:\n\t\t\t\taction = plans.NoOp\n\t\t\t\toldValue = val\n\t\t\t\tnewValue = val\n\t\t\t}\n\t\t\tpath := append(path, cty.IndexStep{Key: val})\n\t\t\tp.writeNestedBlockDiff(name, nil, &blockS.Block, action, oldValue, newValue, indent, path)\n\t\t}\n\n\tcase configschema.NestingMap:\n\t\t// For the sake of handling nested blocks, we'll treat a null map\n\t\t// the same as an empty map since the config language doesn't\n\t\t// distinguish these anyway.\n\t\told = ctyNullBlockMapAsEmpty(old)\n\t\tnew = ctyNullBlockMapAsEmpty(new)\n\n\t\toldItems := old.AsValueMap()\n\t\tnewItems := new.AsValueMap()\n\t\tif (len(oldItems) + len(newItems)) == 0 {\n\t\t\t// Nothing to do if both maps are empty\n\t\t\treturn\n\t\t}\n\n\t\tallKeys := make(map[string]bool)\n\t\tfor k := range oldItems {\n\t\t\tallKeys[k] = true\n\t\t}\n\t\tfor k := range newItems {\n\t\t\tallKeys[k] = true\n\t\t}\n\t\tallKeysOrder := make([]string, 0, len(allKeys))\n\t\tfor k := range allKeys {\n\t\t\tallKeysOrder = append(allKeysOrder, k)\n\t\t}\n\t\tsort.Strings(allKeysOrder)\n\n\t\tif blankBefore {\n\t\t\tp.buf.WriteRune('\\n')\n\t\t}\n\n\t\tfor _, k := range allKeysOrder {\n\t\t\tvar action plans.Action\n\t\t\toldValue := oldItems[k]\n\t\t\tnewValue := newItems[k]\n\t\t\tswitch {\n\t\t\tcase oldValue == cty.NilVal:\n\t\t\t\toldValue = cty.NullVal(newValue.Type())\n\t\t\t\taction = plans.Create\n\t\t\tcase newValue == cty.NilVal:\n\t\t\t\tnewValue = cty.NullVal(oldValue.Type())\n\t\t\t\taction = plans.Delete\n\t\t\tcase !newValue.RawEquals(oldValue):\n\t\t\t\taction = plans.Update\n\t\t\tdefault:\n\t\t\t\taction = plans.NoOp\n\t\t\t}\n\n\t\t\tpath := append(path, cty.IndexStep{Key: cty.StringVal(k)})\n\t\t\tp.writeNestedBlockDiff(name, &k, &blockS.Block, action, oldValue, newValue, indent, path)\n\t\t}\n\t}\n}\n\nfunc (p *blockBodyDiffPrinter) writeNestedBlockDiff(name string, label *string, blockS *configschema.Block, action plans.Action, old, new cty.Value, indent int, path cty.Path) {\n\tp.buf.WriteString(\"\\n\")\n\tp.buf.WriteString(strings.Repeat(\" \", indent))\n\tp.writeActionSymbol(action)\n\n\tif label != nil {\n\t\tfmt.Fprintf(p.buf, \"%s %q {\", name, *label)\n\t} else {\n\t\tfmt.Fprintf(p.buf, \"%s {\", name)\n\t}\n\n\tif action != plans.NoOp && (p.pathForcesNewResource(path) || p.pathForcesNewResource(path[:len(path)-1])) {\n\t\tp.buf.WriteString(p.color.Color(forcesNewResourceCaption))\n\t}\n\n\tbodyWritten := p.writeBlockBodyDiff(blockS, old, new, indent+4, path)\n\tif bodyWritten {\n\t\tp.buf.WriteString(\"\\n\")\n\t\tp.buf.WriteString(strings.Repeat(\" \", indent+2))\n\t}\n\tp.buf.WriteString(\"}\")\n}\n\nfunc (p *blockBodyDiffPrinter) writeValue(val cty.Value, action plans.Action, indent int) {\n\tif !val.IsKnown() {\n\t\tp.buf.WriteString(\"(known after apply)\")\n\t\treturn\n\t}\n\tif val.IsNull() {\n\t\tp.buf.WriteString(p.color.Color(\"[dark_gray]null[reset]\"))\n\t\treturn\n\t}\n\n\tty := val.Type()\n\n\tswitch {\n\tcase ty.IsPrimitiveType():\n\t\tswitch ty {\n\t\tcase cty.String:\n\t\t\t{\n\t\t\t\t// Special behavior for JSON strings containing array or object\n\t\t\t\tsrc := []byte(val.AsString())\n\t\t\t\tty, err := ctyjson.ImpliedType(src)\n\t\t\t\t// check for the special case of \"null\", which decodes to nil,\n\t\t\t\t// and just allow it to be printed out directly\n\t\t\t\tif err == nil && !ty.IsPrimitiveType() && val.AsString() != \"null\" {\n\t\t\t\t\tjv, err := ctyjson.Unmarshal(src, ty)\n\t\t\t\t\tif err == nil {\n\t\t\t\t\t\tp.buf.WriteString(\"jsonencode(\")\n\t\t\t\t\t\tif jv.LengthInt() == 0 {\n\t\t\t\t\t\t\tp.writeValue(jv, action, 0)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tp.buf.WriteByte('\\n')\n\t\t\t\t\t\t\tp.buf.WriteString(strings.Repeat(\" \", indent+4))\n\t\t\t\t\t\t\tp.writeValue(jv, action, indent+4)\n\t\t\t\t\t\t\tp.buf.WriteByte('\\n')\n\t\t\t\t\t\t\tp.buf.WriteString(strings.Repeat(\" \", indent))\n\t\t\t\t\t\t}\n\t\t\t\t\t\tp.buf.WriteByte(')')\n\t\t\t\t\t\tbreak // don't *also* do the normal behavior below\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tfmt.Fprintf(p.buf, \"%q\", val.AsString())\n\t\tcase cty.Bool:\n\t\t\tif val.True() {\n\t\t\t\tp.buf.WriteString(\"true\")\n\t\t\t} else {\n\t\t\t\tp.buf.WriteString(\"false\")\n\t\t\t}\n\t\tcase cty.Number:\n\t\t\tbf := val.AsBigFloat()\n\t\t\tp.buf.WriteString(bf.Text('f', -1))\n\t\tdefault:\n\t\t\t// should never happen, since the above is exhaustive\n\t\t\tfmt.Fprintf(p.buf, \"%#v\", val)\n\t\t}\n\tcase ty.IsListType() || ty.IsSetType() || ty.IsTupleType():\n\t\tp.buf.WriteString(\"[\")\n\n\t\tit := val.ElementIterator()\n\t\tfor it.Next() {\n\t\t\t_, val := it.Element()\n\n\t\t\tp.buf.WriteString(\"\\n\")\n\t\t\tp.buf.WriteString(strings.Repeat(\" \", indent+2))\n\t\t\tp.writeActionSymbol(action)\n\t\t\tp.writeValue(val, action, indent+4)\n\t\t\tp.buf.WriteString(\",\")\n\t\t}\n\n\t\tif val.LengthInt() > 0 {\n\t\t\tp.buf.WriteString(\"\\n\")\n\t\t\tp.buf.WriteString(strings.Repeat(\" \", indent))\n\t\t}\n\t\tp.buf.WriteString(\"]\")\n\tcase ty.IsMapType():\n\t\tp.buf.WriteString(\"{\")\n\n\t\tkeyLen := 0\n\t\tfor it := val.ElementIterator(); it.Next(); {\n\t\t\tkey, _ := it.Element()\n\t\t\tif keyStr := key.AsString(); len(keyStr) > keyLen {\n\t\t\t\tkeyLen = len(keyStr)\n\t\t\t}\n\t\t}\n\n\t\tfor it := val.ElementIterator(); it.Next(); {\n\t\t\tkey, val := it.Element()\n\n\t\t\tp.buf.WriteString(\"\\n\")\n\t\t\tp.buf.WriteString(strings.Repeat(\" \", indent+2))\n\t\t\tp.writeActionSymbol(action)\n\t\t\tp.writeValue(key, action, indent+4)\n\t\t\tp.buf.WriteString(strings.Repeat(\" \", keyLen-len(key.AsString())))\n\t\t\tp.buf.WriteString(\" = \")\n\t\t\tp.writeValue(val, action, indent+4)\n\t\t}\n\n\t\tif val.LengthInt() > 0 {\n\t\t\tp.buf.WriteString(\"\\n\")\n\t\t\tp.buf.WriteString(strings.Repeat(\" \", indent))\n\t\t}\n\t\tp.buf.WriteString(\"}\")\n\tcase ty.IsObjectType():\n\t\tp.buf.WriteString(\"{\")\n\n\t\tatys := ty.AttributeTypes()\n\t\tattrNames := make([]string, 0, len(atys))\n\t\tnameLen := 0\n\t\tfor attrName := range atys {\n\t\t\tattrNames = append(attrNames, attrName)\n\t\t\tif len(attrName) > nameLen {\n\t\t\t\tnameLen = len(attrName)\n\t\t\t}\n\t\t}\n\t\tsort.Strings(attrNames)\n\n\t\tfor _, attrName := range attrNames {\n\t\t\tval := val.GetAttr(attrName)\n\n\t\t\tp.buf.WriteString(\"\\n\")\n\t\t\tp.buf.WriteString(strings.Repeat(\" \", indent+2))\n\t\t\tp.writeActionSymbol(action)\n\t\t\tp.buf.WriteString(attrName)\n\t\t\tp.buf.WriteString(strings.Repeat(\" \", nameLen-len(attrName)))\n\t\t\tp.buf.WriteString(\" = \")\n\t\t\tp.writeValue(val, action, indent+4)\n\t\t}\n\n\t\tif len(attrNames) > 0 {\n\t\t\tp.buf.WriteString(\"\\n\")\n\t\t\tp.buf.WriteString(strings.Repeat(\" \", indent))\n\t\t}\n\t\tp.buf.WriteString(\"}\")\n\t}\n}\n\nfunc (p *blockBodyDiffPrinter) writeValueDiff(old, new cty.Value, indent int, path cty.Path) {\n\tty := old.Type()\n\ttypesEqual := ctyTypesEqual(ty, new.Type())\n\n\t// We have some specialized diff implementations for certain complex\n\t// values where it's useful to see a visualization of the diff of\n\t// the nested elements rather than just showing the entire old and\n\t// new values verbatim.\n\t// However, these specialized implementations can apply only if both\n\t// values are known and non-null.\n\tif old.IsKnown() && new.IsKnown() && !old.IsNull() && !new.IsNull() && typesEqual {\n\t\tswitch {\n\t\tcase ty == cty.String:\n\t\t\t// We have special behavior for both multi-line strings in general\n\t\t\t// and for strings that can parse as JSON. For the JSON handling\n\t\t\t// to apply, both old and new must be valid JSON.\n\t\t\t// For single-line strings that don't parse as JSON we just fall\n\t\t\t// out of this switch block and do the default old -> new rendering.\n\t\t\toldS := old.AsString()\n\t\t\tnewS := new.AsString()\n\n\t\t\t{\n\t\t\t\t// Special behavior for JSON strings containing object or\n\t\t\t\t// list values.\n\t\t\t\toldBytes := []byte(oldS)\n\t\t\t\tnewBytes := []byte(newS)\n\t\t\t\toldType, oldErr := ctyjson.ImpliedType(oldBytes)\n\t\t\t\tnewType, newErr := ctyjson.ImpliedType(newBytes)\n\t\t\t\tif oldErr == nil && newErr == nil && !(oldType.IsPrimitiveType() && newType.IsPrimitiveType()) {\n\t\t\t\t\toldJV, oldErr := ctyjson.Unmarshal(oldBytes, oldType)\n\t\t\t\t\tnewJV, newErr := ctyjson.Unmarshal(newBytes, newType)\n\t\t\t\t\tif oldErr == nil && newErr == nil {\n\t\t\t\t\t\tif !oldJV.RawEquals(newJV) { // two JSON values may differ only in insignificant whitespace\n\t\t\t\t\t\t\tp.buf.WriteString(\"jsonencode(\")\n\t\t\t\t\t\t\tp.buf.WriteByte('\\n')\n\t\t\t\t\t\t\tp.buf.WriteString(strings.Repeat(\" \", indent+2))\n\t\t\t\t\t\t\tp.writeActionSymbol(plans.Update)\n\t\t\t\t\t\t\tp.writeValueDiff(oldJV, newJV, indent+4, path)\n\t\t\t\t\t\t\tp.buf.WriteByte('\\n')\n\t\t\t\t\t\t\tp.buf.WriteString(strings.Repeat(\" \", indent))\n\t\t\t\t\t\t\tp.buf.WriteByte(')')\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// if they differ only in insigificant whitespace\n\t\t\t\t\t\t\t// then we'll note that but still expand out the\n\t\t\t\t\t\t\t// effective value.\n\t\t\t\t\t\t\tif p.pathForcesNewResource(path) {\n\t\t\t\t\t\t\t\tp.buf.WriteString(p.color.Color(\"jsonencode( [red]# whitespace changes force replacement[reset]\"))\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tp.buf.WriteString(p.color.Color(\"jsonencode( [dim]# whitespace changes[reset]\"))\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tp.buf.WriteByte('\\n')\n\t\t\t\t\t\t\tp.buf.WriteString(strings.Repeat(\" \", indent+4))\n\t\t\t\t\t\t\tp.writeValue(oldJV, plans.NoOp, indent+4)\n\t\t\t\t\t\t\tp.buf.WriteByte('\\n')\n\t\t\t\t\t\t\tp.buf.WriteString(strings.Repeat(\" \", indent))\n\t\t\t\t\t\t\tp.buf.WriteByte(')')\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif strings.Index(oldS, \"\\n\") < 0 && strings.Index(newS, \"\\n\") < 0 {\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\tp.buf.WriteString(\"<<~EOT\")\n\t\t\tif p.pathForcesNewResource(path) {\n\t\t\t\tp.buf.WriteString(p.color.Color(forcesNewResourceCaption))\n\t\t\t}\n\t\t\tp.buf.WriteString(\"\\n\")\n\n\t\t\tvar oldLines, newLines []cty.Value\n\t\t\t{\n\t\t\t\tr := strings.NewReader(oldS)\n\t\t\t\tsc := bufio.NewScanner(r)\n\t\t\t\tfor sc.Scan() {\n\t\t\t\t\toldLines = append(oldLines, cty.StringVal(sc.Text()))\n\t\t\t\t}\n\t\t\t}\n\t\t\t{\n\t\t\t\tr := strings.NewReader(newS)\n\t\t\t\tsc := bufio.NewScanner(r)\n\t\t\t\tfor sc.Scan() {\n\t\t\t\t\tnewLines = append(newLines, cty.StringVal(sc.Text()))\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdiffLines := ctySequenceDiff(oldLines, newLines)\n\t\t\tfor _, diffLine := range diffLines {\n\t\t\t\tp.buf.WriteString(strings.Repeat(\" \", indent+2))\n\t\t\t\tp.writeActionSymbol(diffLine.Action)\n\n\t\t\t\tswitch diffLine.Action {\n\t\t\t\tcase plans.NoOp, plans.Delete:\n\t\t\t\t\tp.buf.WriteString(diffLine.Before.AsString())\n\t\t\t\tcase plans.Create:\n\t\t\t\t\tp.buf.WriteString(diffLine.After.AsString())\n\t\t\t\tdefault:\n\t\t\t\t\t// Should never happen since the above covers all\n\t\t\t\t\t// actions that ctySequenceDiff can return for strings\n\t\t\t\t\tp.buf.WriteString(diffLine.After.AsString())\n\n\t\t\t\t}\n\t\t\t\tp.buf.WriteString(\"\\n\")\n\t\t\t}\n\n\t\t\tp.buf.WriteString(strings.Repeat(\" \", indent)) // +4 here because there's no symbol\n\t\t\tp.buf.WriteString(\"EOT\")\n\n\t\t\treturn\n\n\t\tcase ty.IsSetType():\n\t\t\tp.buf.WriteString(\"[\")\n\t\t\tif p.pathForcesNewResource(path) {\n\t\t\t\tp.buf.WriteString(p.color.Color(forcesNewResourceCaption))\n\t\t\t}\n\t\t\tp.buf.WriteString(\"\\n\")\n\n\t\t\tvar addedVals, removedVals, allVals []cty.Value\n\t\t\tfor it := old.ElementIterator(); it.Next(); {\n\t\t\t\t_, val := it.Element()\n\t\t\t\tallVals = append(allVals, val)\n\t\t\t\tif new.HasElement(val).False() {\n\t\t\t\t\tremovedVals = append(removedVals, val)\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor it := new.ElementIterator(); it.Next(); {\n\t\t\t\t_, val := it.Element()\n\t\t\t\tallVals = append(allVals, val)\n\t\t\t\tif val.IsKnown() && old.HasElement(val).False() {\n\t\t\t\t\taddedVals = append(addedVals, val)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar all, added, removed cty.Value\n\t\t\tif len(allVals) > 0 {\n\t\t\t\tall = cty.SetVal(allVals)\n\t\t\t} else {\n\t\t\t\tall = cty.SetValEmpty(ty.ElementType())\n\t\t\t}\n\t\t\tif len(addedVals) > 0 {\n\t\t\t\tadded = cty.SetVal(addedVals)\n\t\t\t} else {\n\t\t\t\tadded = cty.SetValEmpty(ty.ElementType())\n\t\t\t}\n\t\t\tif len(removedVals) > 0 {\n\t\t\t\tremoved = cty.SetVal(removedVals)\n\t\t\t} else {\n\t\t\t\tremoved = cty.SetValEmpty(ty.ElementType())\n\t\t\t}\n\n\t\t\tfor it := all.ElementIterator(); it.Next(); {\n\t\t\t\t_, val := it.Element()\n\n\t\t\t\tp.buf.WriteString(strings.Repeat(\" \", indent+2))\n\n\t\t\t\tvar action plans.Action\n\t\t\t\tswitch {\n\t\t\t\tcase !val.IsKnown():\n\t\t\t\t\taction = plans.Update\n\t\t\t\tcase added.HasElement(val).True():\n\t\t\t\t\taction = plans.Create\n\t\t\t\tcase removed.HasElement(val).True():\n\t\t\t\t\taction = plans.Delete\n\t\t\t\tdefault:\n\t\t\t\t\taction = plans.NoOp\n\t\t\t\t}\n\n\t\t\t\tp.writeActionSymbol(action)\n\t\t\t\tp.writeValue(val, action, indent+4)\n\t\t\t\tp.buf.WriteString(\",\\n\")\n\t\t\t}\n\n\t\t\tp.buf.WriteString(strings.Repeat(\" \", indent))\n\t\t\tp.buf.WriteString(\"]\")\n\t\t\treturn\n\t\tcase ty.IsListType() || ty.IsTupleType():\n\t\t\tp.buf.WriteString(\"[\")\n\t\t\tif p.pathForcesNewResource(path) {\n\t\t\t\tp.buf.WriteString(p.color.Color(forcesNewResourceCaption))\n\t\t\t}\n\t\t\tp.buf.WriteString(\"\\n\")\n\n\t\t\telemDiffs := ctySequenceDiff(old.AsValueSlice(), new.AsValueSlice())\n\t\t\tfor _, elemDiff := range elemDiffs {\n\t\t\t\tp.buf.WriteString(strings.Repeat(\" \", indent+2))\n\t\t\t\tp.writeActionSymbol(elemDiff.Action)\n\t\t\t\tswitch elemDiff.Action {\n\t\t\t\tcase plans.NoOp, plans.Delete:\n\t\t\t\t\tp.writeValue(elemDiff.Before, elemDiff.Action, indent+4)\n\t\t\t\tcase plans.Update:\n\t\t\t\t\tp.writeValueDiff(elemDiff.Before, elemDiff.After, indent+4, path)\n\t\t\t\tcase plans.Create:\n\t\t\t\t\tp.writeValue(elemDiff.After, elemDiff.Action, indent+4)\n\t\t\t\tdefault:\n\t\t\t\t\t// Should never happen since the above covers all\n\t\t\t\t\t// actions that ctySequenceDiff can return.\n\t\t\t\t\tp.writeValue(elemDiff.After, elemDiff.Action, indent+4)\n\t\t\t\t}\n\n\t\t\t\tp.buf.WriteString(\",\\n\")\n\t\t\t}\n\n\t\t\tp.buf.WriteString(strings.Repeat(\" \", indent))\n\t\t\tp.buf.WriteString(\"]\")\n\t\t\treturn\n\n\t\tcase ty.IsMapType():\n\t\t\tp.buf.WriteString(\"{\")\n\t\t\tif p.pathForcesNewResource(path) {\n\t\t\t\tp.buf.WriteString(p.color.Color(forcesNewResourceCaption))\n\t\t\t}\n\t\t\tp.buf.WriteString(\"\\n\")\n\n\t\t\tvar allKeys []string\n\t\t\tkeyLen := 0\n\t\t\tfor it := old.ElementIterator(); it.Next(); {\n\t\t\t\tk, _ := it.Element()\n\t\t\t\tkeyStr := k.AsString()\n\t\t\t\tallKeys = append(allKeys, keyStr)\n\t\t\t\tif len(keyStr) > keyLen {\n\t\t\t\t\tkeyLen = len(keyStr)\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor it := new.ElementIterator(); it.Next(); {\n\t\t\t\tk, _ := it.Element()\n\t\t\t\tkeyStr := k.AsString()\n\t\t\t\tallKeys = append(allKeys, keyStr)\n\t\t\t\tif len(keyStr) > keyLen {\n\t\t\t\t\tkeyLen = len(keyStr)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tsort.Strings(allKeys)\n\n\t\t\tlastK := \"\"\n\t\t\tfor i, k := range allKeys {\n\t\t\t\tif i > 0 && lastK == k {\n\t\t\t\t\tcontinue // skip duplicates (list is sorted)\n\t\t\t\t}\n\t\t\t\tlastK = k\n\n\t\t\t\tp.buf.WriteString(strings.Repeat(\" \", indent+2))\n\t\t\t\tkV := cty.StringVal(k)\n\t\t\t\tvar action plans.Action\n\t\t\t\tif old.HasIndex(kV).False() {\n\t\t\t\t\taction = plans.Create\n\t\t\t\t} else if new.HasIndex(kV).False() {\n\t\t\t\t\taction = plans.Delete\n\t\t\t\t} else if eqV := old.Index(kV).Equals(new.Index(kV)); eqV.IsKnown() && eqV.True() {\n\t\t\t\t\taction = plans.NoOp\n\t\t\t\t} else {\n\t\t\t\t\taction = plans.Update\n\t\t\t\t}\n\n\t\t\t\tpath := append(path, cty.IndexStep{Key: kV})\n\n\t\t\t\tp.writeActionSymbol(action)\n\t\t\t\tp.writeValue(kV, action, indent+4)\n\t\t\t\tp.buf.WriteString(strings.Repeat(\" \", keyLen-len(k)))\n\t\t\t\tp.buf.WriteString(\" = \")\n\t\t\t\tswitch action {\n\t\t\t\tcase plans.Create, plans.NoOp:\n\t\t\t\t\tv := new.Index(kV)\n\t\t\t\t\tp.writeValue(v, action, indent+4)\n\t\t\t\tcase plans.Delete:\n\t\t\t\t\toldV := old.Index(kV)\n\t\t\t\t\tnewV := cty.NullVal(oldV.Type())\n\t\t\t\t\tp.writeValueDiff(oldV, newV, indent+4, path)\n\t\t\t\tdefault:\n\t\t\t\t\toldV := old.Index(kV)\n\t\t\t\t\tnewV := new.Index(kV)\n\t\t\t\t\tp.writeValueDiff(oldV, newV, indent+4, path)\n\t\t\t\t}\n\n\t\t\t\tp.buf.WriteByte('\\n')\n\t\t\t}\n\n\t\t\tp.buf.WriteString(strings.Repeat(\" \", indent))\n\t\t\tp.buf.WriteString(\"}\")\n\t\t\treturn\n\t\tcase ty.IsObjectType():\n\t\t\tp.buf.WriteString(\"{\")\n\t\t\tp.buf.WriteString(\"\\n\")\n\n\t\t\tforcesNewResource := p.pathForcesNewResource(path)\n\n\t\t\tvar allKeys []string\n\t\t\tkeyLen := 0\n\t\t\tfor it := old.ElementIterator(); it.Next(); {\n\t\t\t\tk, _ := it.Element()\n\t\t\t\tkeyStr := k.AsString()\n\t\t\t\tallKeys = append(allKeys, keyStr)\n\t\t\t\tif len(keyStr) > keyLen {\n\t\t\t\t\tkeyLen = len(keyStr)\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor it := new.ElementIterator(); it.Next(); {\n\t\t\t\tk, _ := it.Element()\n\t\t\t\tkeyStr := k.AsString()\n\t\t\t\tallKeys = append(allKeys, keyStr)\n\t\t\t\tif len(keyStr) > keyLen {\n\t\t\t\t\tkeyLen = len(keyStr)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tsort.Strings(allKeys)\n\n\t\t\tlastK := \"\"\n\t\t\tfor i, k := range allKeys {\n\t\t\t\tif i > 0 && lastK == k {\n\t\t\t\t\tcontinue // skip duplicates (list is sorted)\n\t\t\t\t}\n\t\t\t\tlastK = k\n\n\t\t\t\tp.buf.WriteString(strings.Repeat(\" \", indent+2))\n\t\t\t\tkV := k\n\t\t\t\tvar action plans.Action\n\t\t\t\tif !old.Type().HasAttribute(kV) {\n\t\t\t\t\taction = plans.Create\n\t\t\t\t} else if !new.Type().HasAttribute(kV) {\n\t\t\t\t\taction = plans.Delete\n\t\t\t\t} else if eqV := old.GetAttr(kV).Equals(new.GetAttr(kV)); eqV.IsKnown() && eqV.True() {\n\t\t\t\t\taction = plans.NoOp\n\t\t\t\t} else {\n\t\t\t\t\taction = plans.Update\n\t\t\t\t}\n\n\t\t\t\tpath := append(path, cty.GetAttrStep{Name: kV})\n\n\t\t\t\tp.writeActionSymbol(action)\n\t\t\t\tp.buf.WriteString(k)\n\t\t\t\tp.buf.WriteString(strings.Repeat(\" \", keyLen-len(k)))\n\t\t\t\tp.buf.WriteString(\" = \")\n\n\t\t\t\tswitch action {\n\t\t\t\tcase plans.Create, plans.NoOp:\n\t\t\t\t\tv := new.GetAttr(kV)\n\t\t\t\t\tp.writeValue(v, action, indent+4)\n\t\t\t\tcase plans.Delete:\n\t\t\t\t\toldV := old.GetAttr(kV)\n\t\t\t\t\tnewV := cty.NullVal(oldV.Type())\n\t\t\t\t\tp.writeValueDiff(oldV, newV, indent+4, path)\n\t\t\t\tdefault:\n\t\t\t\t\toldV := old.GetAttr(kV)\n\t\t\t\t\tnewV := new.GetAttr(kV)\n\t\t\t\t\tp.writeValueDiff(oldV, newV, indent+4, path)\n\t\t\t\t}\n\n\t\t\t\tp.buf.WriteString(\"\\n\")\n\t\t\t}\n\n\t\t\tp.buf.WriteString(strings.Repeat(\" \", indent))\n\t\t\tp.buf.WriteString(\"}\")\n\n\t\t\tif forcesNewResource {\n\t\t\t\tp.buf.WriteString(p.color.Color(forcesNewResourceCaption))\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t}\n\n\t// In all other cases, we just show the new and old values as-is\n\tp.writeValue(old, plans.Delete, indent)\n\tif new.IsNull() {\n\t\tp.buf.WriteString(p.color.Color(\" [dark_gray]->[reset] \"))\n\t} else {\n\t\tp.buf.WriteString(p.color.Color(\" [yellow]->[reset] \"))\n\t}\n\n\tp.writeValue(new, plans.Create, indent)\n\tif p.pathForcesNewResource(path) {\n\t\tp.buf.WriteString(p.color.Color(forcesNewResourceCaption))\n\t}\n}\n\n// writeActionSymbol writes a symbol to represent the given action, followed\n// by a space.\n//\n// It only supports the actions that can be represented with a single character:\n// Create, Delete, Update and NoAction.\nfunc (p *blockBodyDiffPrinter) writeActionSymbol(action plans.Action) {\n\tswitch action {\n\tcase plans.Create:\n\t\tp.buf.WriteString(p.color.Color(\"[green]+[reset] \"))\n\tcase plans.Delete:\n\t\tp.buf.WriteString(p.color.Color(\"[red]-[reset] \"))\n\tcase plans.Update:\n\t\tp.buf.WriteString(p.color.Color(\"[yellow]~[reset] \"))\n\tcase plans.NoOp:\n\t\tp.buf.WriteString(\"  \")\n\tdefault:\n\t\t// Should never happen\n\t\tp.buf.WriteString(p.color.Color(\"? \"))\n\t}\n}\n\nfunc (p *blockBodyDiffPrinter) pathForcesNewResource(path cty.Path) bool {\n\tif !p.action.IsReplace() {\n\t\t// \"requiredReplace\" only applies when the instance is being replaced\n\t\treturn false\n\t}\n\treturn p.requiredReplace.Has(path)\n}\n\nfunc ctyEmptyString(value cty.Value) bool {\n\tif !value.IsNull() && value.IsKnown() {\n\t\tvalueType := value.Type()\n\t\tif valueType == cty.String && value.AsString() == \"\" {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\nfunc ctyGetAttrMaybeNull(val cty.Value, name string) cty.Value {\n\tattrType := val.Type().AttributeType(name)\n\n\tif val.IsNull() {\n\t\treturn cty.NullVal(attrType)\n\t}\n\n\t// We treat \"\" as null here\n\t// as existing SDK doesn't support null yet.\n\t// This allows us to avoid spurious diffs\n\t// until we introduce null to the SDK.\n\tattrValue := val.GetAttr(name)\n\tif ctyEmptyString(attrValue) {\n\t\treturn cty.NullVal(attrType)\n\t}\n\n\treturn attrValue\n}\n\nfunc ctyCollectionValues(val cty.Value) []cty.Value {\n\tif !val.IsKnown() || val.IsNull() {\n\t\treturn nil\n\t}\n\n\tret := make([]cty.Value, 0, val.LengthInt())\n\tfor it := val.ElementIterator(); it.Next(); {\n\t\t_, value := it.Element()\n\t\tret = append(ret, value)\n\t}\n\treturn ret\n}\n\n// ctySequenceDiff returns differences between given sequences of cty.Value(s)\n// in the form of Create, Delete, or Update actions (for objects).\nfunc ctySequenceDiff(old, new []cty.Value) []*plans.Change {\n\tvar ret []*plans.Change\n\tlcs := objchange.LongestCommonSubsequence(old, new)\n\tvar oldI, newI, lcsI int\n\tfor oldI < len(old) || newI < len(new) || lcsI < len(lcs) {\n\t\tfor oldI < len(old) && (lcsI >= len(lcs) || !old[oldI].RawEquals(lcs[lcsI])) {\n\t\t\tisObjectDiff := old[oldI].Type().IsObjectType() && (newI >= len(new) || new[newI].Type().IsObjectType())\n\t\t\tif isObjectDiff && newI < len(new) {\n\t\t\t\tret = append(ret, &plans.Change{\n\t\t\t\t\tAction: plans.Update,\n\t\t\t\t\tBefore: old[oldI],\n\t\t\t\t\tAfter:  new[newI],\n\t\t\t\t})\n\t\t\t\toldI++\n\t\t\t\tnewI++ // we also consume the next \"new\" in this case\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tret = append(ret, &plans.Change{\n\t\t\t\tAction: plans.Delete,\n\t\t\t\tBefore: old[oldI],\n\t\t\t\tAfter:  cty.NullVal(old[oldI].Type()),\n\t\t\t})\n\t\t\toldI++\n\t\t}\n\t\tfor newI < len(new) && (lcsI >= len(lcs) || !new[newI].RawEquals(lcs[lcsI])) {\n\t\t\tret = append(ret, &plans.Change{\n\t\t\t\tAction: plans.Create,\n\t\t\t\tBefore: cty.NullVal(new[newI].Type()),\n\t\t\t\tAfter:  new[newI],\n\t\t\t})\n\t\t\tnewI++\n\t\t}\n\t\tif lcsI < len(lcs) {\n\t\t\tret = append(ret, &plans.Change{\n\t\t\t\tAction: plans.NoOp,\n\t\t\t\tBefore: lcs[lcsI],\n\t\t\t\tAfter:  lcs[lcsI],\n\t\t\t})\n\n\t\t\t// All of our indexes advance together now, since the line\n\t\t\t// is common to all three sequences.\n\t\t\tlcsI++\n\t\t\toldI++\n\t\t\tnewI++\n\t\t}\n\t}\n\treturn ret\n}\n\nfunc ctyEqualWithUnknown(old, new cty.Value) bool {\n\tif !old.IsWhollyKnown() || !new.IsWhollyKnown() {\n\t\treturn false\n\t}\n\treturn old.Equals(new).True()\n}\n\n// ctyTypesEqual checks equality of two types more loosely\n// by avoiding checks of object/tuple elements\n// as we render differences on element-by-element basis anyway\nfunc ctyTypesEqual(oldT, newT cty.Type) bool {\n\tif oldT.IsObjectType() && newT.IsObjectType() {\n\t\treturn true\n\t}\n\tif oldT.IsTupleType() && newT.IsTupleType() {\n\t\treturn true\n\t}\n\treturn oldT.Equals(newT)\n}\n\nfunc ctyEnsurePathCapacity(path cty.Path, minExtra int) cty.Path {\n\tif cap(path)-len(path) >= minExtra {\n\t\treturn path\n\t}\n\tnewCap := cap(path) * 2\n\tif newCap < (len(path) + minExtra) {\n\t\tnewCap = len(path) + minExtra\n\t}\n\tnewPath := make(cty.Path, len(path), newCap)\n\tcopy(newPath, path)\n\treturn newPath\n}\n\n// ctyNullBlockListAsEmpty either returns the given value verbatim if it is non-nil\n// or returns an empty value of a suitable type to serve as a placeholder for it.\n//\n// In particular, this function handles the special situation where a \"list\" is\n// actually represented as a tuple type where nested blocks contain\n// dynamically-typed values.\nfunc ctyNullBlockListAsEmpty(in cty.Value) cty.Value {\n\tif !in.IsNull() {\n\t\treturn in\n\t}\n\tif ty := in.Type(); ty.IsListType() {\n\t\treturn cty.ListValEmpty(ty.ElementType())\n\t}\n\treturn cty.EmptyTupleVal // must need a tuple, then\n}\n\n// ctyNullBlockMapAsEmpty either returns the given value verbatim if it is non-nil\n// or returns an empty value of a suitable type to serve as a placeholder for it.\n//\n// In particular, this function handles the special situation where a \"map\" is\n// actually represented as an object type where nested blocks contain\n// dynamically-typed values.\nfunc ctyNullBlockMapAsEmpty(in cty.Value) cty.Value {\n\tif !in.IsNull() {\n\t\treturn in\n\t}\n\tif ty := in.Type(); ty.IsMapType() {\n\t\treturn cty.MapValEmpty(ty.ElementType())\n\t}\n\treturn cty.EmptyObjectVal // must need an object, then\n}\n\n// ctyNullBlockSetAsEmpty either returns the given value verbatim if it is non-nil\n// or returns an empty value of a suitable type to serve as a placeholder for it.\nfunc ctyNullBlockSetAsEmpty(in cty.Value) cty.Value {\n\tif !in.IsNull() {\n\t\treturn in\n\t}\n\t// Dynamically-typed attributes are not supported inside blocks backed by\n\t// sets, so our result here is always a set.\n\treturn cty.SetValEmpty(in.Type().ElementType())\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/command/format/format.go",
    "content": "// Package format contains helpers for formatting various Terraform\n// structures for human-readabout output.\n//\n// This package is used by the official Terraform CLI in formatting any\n// output and is exported to encourage non-official frontends to mimic the\n// output formatting as much as possible so that text formats of Terraform\n// structures have a consistent look and feel.\npackage format\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/command/format/object_id.go",
    "content": "package format\n\nimport (\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// ObjectValueID takes a value that is assumed to be an object representation\n// of some resource instance object and attempts to heuristically find an\n// attribute of it that is likely to be a unique identifier in the remote\n// system that it belongs to which will be useful to the user.\n//\n// If such an attribute is found, its name and string value intended for\n// display are returned. Both returned strings are empty if no such attribute\n// exists, in which case the caller should assume that the resource instance\n// address within the Terraform configuration is the best available identifier.\n//\n// This is only a best-effort sort of thing, relying on naming conventions in\n// our resource type schemas. The result is not guaranteed to be unique, but\n// should generally be suitable for display to an end-user anyway.\n//\n// This function will panic if the given value is not of an object type.\nfunc ObjectValueID(obj cty.Value) (k, v string) {\n\tif obj.IsNull() || !obj.IsKnown() {\n\t\treturn \"\", \"\"\n\t}\n\n\tatys := obj.Type().AttributeTypes()\n\n\tswitch {\n\n\tcase atys[\"id\"] == cty.String:\n\t\tv := obj.GetAttr(\"id\")\n\t\tif v.IsKnown() && !v.IsNull() {\n\t\t\treturn \"id\", v.AsString()\n\t\t}\n\n\tcase atys[\"name\"] == cty.String:\n\t\t// \"name\" isn't always globally unique, but if there isn't also an\n\t\t// \"id\" then it _often_ is, in practice.\n\t\tv := obj.GetAttr(\"name\")\n\t\tif v.IsKnown() && !v.IsNull() {\n\t\t\treturn \"name\", v.AsString()\n\t\t}\n\t}\n\n\treturn \"\", \"\"\n}\n\n// ObjectValueName takes a value that is assumed to be an object representation\n// of some resource instance object and attempts to heuristically find an\n// attribute of it that is likely to be a human-friendly name in the remote\n// system that it belongs to which will be useful to the user.\n//\n// If such an attribute is found, its name and string value intended for\n// display are returned. Both returned strings are empty if no such attribute\n// exists, in which case the caller should assume that the resource instance\n// address within the Terraform configuration is the best available identifier.\n//\n// This is only a best-effort sort of thing, relying on naming conventions in\n// our resource type schemas. The result is not guaranteed to be unique, but\n// should generally be suitable for display to an end-user anyway.\n//\n// Callers that use both ObjectValueName and ObjectValueID at the same time\n// should be prepared to get the same attribute key and value from both in\n// some cases, since there is overlap betweek the id-extraction and\n// name-extraction heuristics.\n//\n// This function will panic if the given value is not of an object type.\nfunc ObjectValueName(obj cty.Value) (k, v string) {\n\tif obj.IsNull() || !obj.IsKnown() {\n\t\treturn \"\", \"\"\n\t}\n\n\tatys := obj.Type().AttributeTypes()\n\n\tswitch {\n\n\tcase atys[\"name\"] == cty.String:\n\t\tv := obj.GetAttr(\"name\")\n\t\tif v.IsKnown() && !v.IsNull() {\n\t\t\treturn \"name\", v.AsString()\n\t\t}\n\n\tcase atys[\"tags\"].IsMapType() && atys[\"tags\"].ElementType() == cty.String:\n\t\ttags := obj.GetAttr(\"tags\")\n\t\tif tags.IsNull() || !tags.IsWhollyKnown() {\n\t\t\tbreak\n\t\t}\n\n\t\tswitch {\n\t\tcase tags.HasIndex(cty.StringVal(\"name\")).RawEquals(cty.True):\n\t\t\tv := tags.Index(cty.StringVal(\"name\"))\n\t\t\tif v.IsKnown() && !v.IsNull() {\n\t\t\t\treturn \"tags.name\", v.AsString()\n\t\t\t}\n\t\tcase tags.HasIndex(cty.StringVal(\"Name\")).RawEquals(cty.True):\n\t\t\t// AWS-style naming convention\n\t\t\tv := tags.Index(cty.StringVal(\"Name\"))\n\t\t\tif v.IsKnown() && !v.IsNull() {\n\t\t\t\treturn \"tags.Name\", v.AsString()\n\t\t\t}\n\t\t}\n\t}\n\n\treturn \"\", \"\"\n}\n\n// ObjectValueIDOrName is a convenience wrapper around both ObjectValueID\n// and ObjectValueName (in that preference order) to try to extract some sort\n// of human-friendly descriptive string value for an object as additional\n// context about an object when it is being displayed in a compact way (where\n// not all of the attributes are visible.)\n//\n// Just as with the two functions it wraps, it is a best-effort and may return\n// two empty strings if no suitable attribute can be found for a given object.\nfunc ObjectValueIDOrName(obj cty.Value) (k, v string) {\n\tk, v = ObjectValueID(obj)\n\tif k != \"\" {\n\t\treturn\n\t}\n\tk, v = ObjectValueName(obj)\n\treturn\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/command/format/plan.go",
    "content": "package format\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"log\"\n\t\"sort\"\n\t\"strings\"\n\n\t\"github.com/mitchellh/colorstring\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/plans\"\n\t\"github.com/hashicorp/terraform/states\"\n\t\"github.com/hashicorp/terraform/terraform\"\n)\n\n// Plan is a representation of a plan optimized for display to\n// an end-user, as opposed to terraform.Plan which is for internal use.\n//\n// DisplayPlan excludes implementation details that may otherwise appear\n// in the main plan, such as destroy actions on data sources (which are\n// there only to clean up the state).\ntype Plan struct {\n\tResources []*InstanceDiff\n}\n\n// InstanceDiff is a representation of an instance diff optimized\n// for display, in conjunction with DisplayPlan.\ntype InstanceDiff struct {\n\tAddr   *terraform.ResourceAddress\n\tAction plans.Action\n\n\t// Attributes describes changes to the attributes of the instance.\n\t//\n\t// For destroy diffs this is always nil.\n\tAttributes []*AttributeDiff\n\n\tTainted bool\n\tDeposed bool\n}\n\n// AttributeDiff is a representation of an attribute diff optimized\n// for display, in conjunction with DisplayInstanceDiff.\ntype AttributeDiff struct {\n\t// Path is a dot-delimited traversal through possibly many levels of list and map structure,\n\t// intended for display purposes only.\n\tPath string\n\n\tAction plans.Action\n\n\tOldValue string\n\tNewValue string\n\n\tNewComputed bool\n\tSensitive   bool\n\tForcesNew   bool\n}\n\n// PlanStats gives summary counts for a Plan.\ntype PlanStats struct {\n\tToAdd, ToChange, ToDestroy int\n}\n\n// NewPlan produces a display-oriented Plan from a terraform.Plan.\nfunc NewPlan(changes *plans.Changes) *Plan {\n\tlog.Printf(\"[TRACE] NewPlan for %#v\", changes)\n\tret := &Plan{}\n\tif changes == nil {\n\t\t// Nothing to do!\n\t\treturn ret\n\t}\n\n\tfor _, rc := range changes.Resources {\n\t\taddr := rc.Addr\n\t\tlog.Printf(\"[TRACE] NewPlan found %s (%s)\", addr, rc.Action)\n\t\tdataSource := addr.Resource.Resource.Mode == addrs.DataResourceMode\n\n\t\t// We create \"delete\" actions for data resources so we can clean\n\t\t// up their entries in state, but this is an implementation detail\n\t\t// that users shouldn't see.\n\t\tif dataSource && rc.Action == plans.Delete {\n\t\t\tcontinue\n\t\t}\n\n\t\t// For now we'll shim this to work with our old types.\n\t\t// TODO: Update for the new plan types, ideally also switching over to\n\t\t// a structural diff renderer instead of a flat renderer.\n\t\tdid := &InstanceDiff{\n\t\t\tAddr:   terraform.NewLegacyResourceInstanceAddress(addr),\n\t\t\tAction: rc.Action,\n\t\t}\n\n\t\tif rc.DeposedKey != states.NotDeposed {\n\t\t\tdid.Deposed = true\n\t\t}\n\n\t\t// Since this is just a temporary stub implementation on the way\n\t\t// to us replacing this with the structural diff renderer, we currently\n\t\t// don't include any attributes here.\n\t\t// FIXME: Implement the structural diff renderer to replace this\n\t\t// codepath altogether.\n\n\t\tret.Resources = append(ret.Resources, did)\n\t}\n\n\t// Sort the instance diffs by their addresses for display.\n\tsort.Slice(ret.Resources, func(i, j int) bool {\n\t\tiAddr := ret.Resources[i].Addr\n\t\tjAddr := ret.Resources[j].Addr\n\t\treturn iAddr.Less(jAddr)\n\t})\n\n\treturn ret\n}\n\n// Format produces and returns a text representation of the receiving plan\n// intended for display in a terminal.\n//\n// If color is not nil, it is used to colorize the output.\nfunc (p *Plan) Format(color *colorstring.Colorize) string {\n\tif p.Empty() {\n\t\treturn \"This plan does nothing.\"\n\t}\n\n\tif color == nil {\n\t\tcolor = &colorstring.Colorize{\n\t\t\tColors: colorstring.DefaultColors,\n\t\t\tReset:  false,\n\t\t}\n\t}\n\n\t// Find the longest path length of all the paths that are changing,\n\t// so we can align them all.\n\tkeyLen := 0\n\tfor _, r := range p.Resources {\n\t\tfor _, attr := range r.Attributes {\n\t\t\tkey := attr.Path\n\n\t\t\tif len(key) > keyLen {\n\t\t\t\tkeyLen = len(key)\n\t\t\t}\n\t\t}\n\t}\n\n\tbuf := new(bytes.Buffer)\n\tfor _, r := range p.Resources {\n\t\tformatPlanInstanceDiff(buf, r, keyLen, color)\n\t}\n\n\treturn strings.TrimSpace(buf.String())\n}\n\n// Stats returns statistics about the plan\nfunc (p *Plan) Stats() PlanStats {\n\tvar ret PlanStats\n\tfor _, r := range p.Resources {\n\t\tswitch r.Action {\n\t\tcase plans.Create:\n\t\t\tret.ToAdd++\n\t\tcase plans.Update:\n\t\t\tret.ToChange++\n\t\tcase plans.DeleteThenCreate, plans.CreateThenDelete:\n\t\t\tret.ToAdd++\n\t\t\tret.ToDestroy++\n\t\tcase plans.Delete:\n\t\t\tret.ToDestroy++\n\t\t}\n\t}\n\treturn ret\n}\n\n// ActionCounts returns the number of diffs for each action type\nfunc (p *Plan) ActionCounts() map[plans.Action]int {\n\tret := map[plans.Action]int{}\n\tfor _, r := range p.Resources {\n\t\tret[r.Action]++\n\t}\n\treturn ret\n}\n\n// Empty returns true if there is at least one resource diff in the receiving plan.\nfunc (p *Plan) Empty() bool {\n\treturn len(p.Resources) == 0\n}\n\n// DiffActionSymbol returns a string that, once passed through a\n// colorstring.Colorize, will produce a result that can be written\n// to a terminal to produce a symbol made of three printable\n// characters, possibly interspersed with VT100 color codes.\nfunc DiffActionSymbol(action plans.Action) string {\n\tswitch action {\n\tcase plans.DeleteThenCreate:\n\t\treturn \"[red]-[reset]/[green]+[reset]\"\n\tcase plans.CreateThenDelete:\n\t\treturn \"[green]+[reset]/[red]-[reset]\"\n\tcase plans.Create:\n\t\treturn \"  [green]+[reset]\"\n\tcase plans.Delete:\n\t\treturn \"  [red]-[reset]\"\n\tcase plans.Read:\n\t\treturn \" [cyan]<=[reset]\"\n\tcase plans.Update:\n\t\treturn \"  [yellow]~[reset]\"\n\tdefault:\n\t\treturn \"  ?\"\n\t}\n}\n\n// formatPlanInstanceDiff writes the text representation of the given instance diff\n// to the given buffer, using the given colorizer.\nfunc formatPlanInstanceDiff(buf *bytes.Buffer, r *InstanceDiff, keyLen int, colorizer *colorstring.Colorize) {\n\taddrStr := r.Addr.String()\n\n\t// Determine the color for the text (green for adding, yellow\n\t// for change, red for delete), and symbol, and output the\n\t// resource header.\n\tcolor := \"yellow\"\n\tsymbol := DiffActionSymbol(r.Action)\n\toldValues := true\n\tswitch r.Action {\n\tcase plans.DeleteThenCreate, plans.CreateThenDelete:\n\t\tcolor = \"yellow\"\n\tcase plans.Create:\n\t\tcolor = \"green\"\n\t\toldValues = false\n\tcase plans.Delete:\n\t\tcolor = \"red\"\n\tcase plans.Read:\n\t\tcolor = \"cyan\"\n\t\toldValues = false\n\t}\n\n\tvar extraStr string\n\tif r.Tainted {\n\t\textraStr = extraStr + \" (tainted)\"\n\t}\n\tif r.Deposed {\n\t\textraStr = extraStr + \" (deposed)\"\n\t}\n\tif r.Action.IsReplace() {\n\t\textraStr = extraStr + colorizer.Color(\" [red][bold](new resource required)\")\n\t}\n\n\tbuf.WriteString(\n\t\tcolorizer.Color(fmt.Sprintf(\n\t\t\t\"[%s]%s [%s]%s%s\\n\",\n\t\t\tcolor, symbol, color, addrStr, extraStr,\n\t\t)),\n\t)\n\n\tfor _, attr := range r.Attributes {\n\n\t\tv := attr.NewValue\n\t\tvar dispV string\n\t\tswitch {\n\t\tcase v == \"\" && attr.NewComputed:\n\t\t\tdispV = \"<computed>\"\n\t\tcase attr.Sensitive:\n\t\t\tdispV = \"<sensitive>\"\n\t\tdefault:\n\t\t\tdispV = fmt.Sprintf(\"%q\", v)\n\t\t}\n\n\t\tupdateMsg := \"\"\n\t\tswitch {\n\t\tcase attr.ForcesNew && r.Action.IsReplace():\n\t\t\tupdateMsg = colorizer.Color(\" [red](forces new resource)\")\n\t\tcase attr.Sensitive && oldValues:\n\t\t\tupdateMsg = colorizer.Color(\" [yellow](attribute changed)\")\n\t\t}\n\n\t\tif oldValues {\n\t\t\tu := attr.OldValue\n\t\t\tvar dispU string\n\t\t\tswitch {\n\t\t\tcase attr.Sensitive:\n\t\t\t\tdispU = \"<sensitive>\"\n\t\t\tdefault:\n\t\t\t\tdispU = fmt.Sprintf(\"%q\", u)\n\t\t\t}\n\t\t\tbuf.WriteString(fmt.Sprintf(\n\t\t\t\t\"      %s:%s %s => %s%s\\n\",\n\t\t\t\tattr.Path,\n\t\t\t\tstrings.Repeat(\" \", keyLen-len(attr.Path)),\n\t\t\t\tdispU, dispV,\n\t\t\t\tupdateMsg,\n\t\t\t))\n\t\t} else {\n\t\t\tbuf.WriteString(fmt.Sprintf(\n\t\t\t\t\"      %s:%s %s%s\\n\",\n\t\t\t\tattr.Path,\n\t\t\t\tstrings.Repeat(\" \", keyLen-len(attr.Path)),\n\t\t\t\tdispV,\n\t\t\t\tupdateMsg,\n\t\t\t))\n\t\t}\n\t}\n\n\t// Write the reset color so we don't bleed color into later text\n\tbuf.WriteString(colorizer.Color(\"[reset]\\n\"))\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/command/format/state.go",
    "content": "package format\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"sort\"\n\t\"strings\"\n\n\t\"github.com/zclconf/go-cty/cty\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/configs/configschema\"\n\t\"github.com/hashicorp/terraform/plans\"\n\t\"github.com/hashicorp/terraform/states\"\n\t\"github.com/hashicorp/terraform/terraform\"\n\t\"github.com/mitchellh/colorstring\"\n)\n\n// StateOpts are the options for formatting a state.\ntype StateOpts struct {\n\t// State is the state to format. This is required.\n\tState *states.State\n\n\t// Schemas are used to decode attributes. This is required.\n\tSchemas *terraform.Schemas\n\n\t// Color is the colorizer. This is optional.\n\tColor *colorstring.Colorize\n}\n\n// State takes a state and returns a string\nfunc State(opts *StateOpts) string {\n\tif opts.Color == nil {\n\t\tpanic(\"colorize not given\")\n\t}\n\n\tif opts.Schemas == nil {\n\t\tpanic(\"schemas not given\")\n\t}\n\n\ts := opts.State\n\tif len(s.Modules) == 0 {\n\t\treturn \"The state file is empty. No resources are represented.\"\n\t}\n\n\tbuf := bytes.NewBufferString(\"[reset]\")\n\tp := blockBodyDiffPrinter{\n\t\tbuf:    buf,\n\t\tcolor:  opts.Color,\n\t\taction: plans.NoOp,\n\t}\n\n\t// Format all the modules\n\tfor _, m := range s.Modules {\n\t\tformatStateModule(p, m, opts.Schemas)\n\t}\n\n\t// Write the outputs for the root module\n\tm := s.RootModule()\n\n\tif m.OutputValues != nil {\n\t\tif len(m.OutputValues) > 0 {\n\t\t\tp.buf.WriteString(\"Outputs:\\n\\n\")\n\t\t}\n\n\t\t// Sort the outputs\n\t\tks := make([]string, 0, len(m.OutputValues))\n\t\tfor k := range m.OutputValues {\n\t\t\tks = append(ks, k)\n\t\t}\n\t\tsort.Strings(ks)\n\n\t\t// Output each output k/v pair\n\t\tfor _, k := range ks {\n\t\t\tv := m.OutputValues[k]\n\t\t\tp.buf.WriteString(fmt.Sprintf(\"%s = \", k))\n\t\t\tp.writeValue(v.Value, plans.NoOp, 0)\n\t\t\tp.buf.WriteString(\"\\n\\n\")\n\t\t}\n\t}\n\n\treturn opts.Color.Color(strings.TrimSpace(p.buf.String()))\n\n}\n\nfunc formatStateModule(p blockBodyDiffPrinter, m *states.Module, schemas *terraform.Schemas) {\n\t// First get the names of all the resources so we can show them\n\t// in alphabetical order.\n\tnames := make([]string, 0, len(m.Resources))\n\tfor name := range m.Resources {\n\t\tnames = append(names, name)\n\t}\n\tsort.Strings(names)\n\n\t// Go through each resource and begin building up the output.\n\tfor _, key := range names {\n\t\tfor k, v := range m.Resources[key].Instances {\n\t\t\taddr := m.Resources[key].Addr\n\n\t\t\ttaintStr := \"\"\n\t\t\tif v.Current.Status == 'T' {\n\t\t\t\ttaintStr = \"(tainted)\"\n\t\t\t}\n\t\t\tp.buf.WriteString(fmt.Sprintf(\"# %s: %s\\n\", addr.Absolute(m.Addr).Instance(k), taintStr))\n\n\t\t\tvar schema *configschema.Block\n\t\t\tprovider := m.Resources[key].ProviderConfig.ProviderConfig.StringCompact()\n\t\t\tif _, exists := schemas.Providers[provider]; !exists {\n\t\t\t\t// This should never happen in normal use because we should've\n\t\t\t\t// loaded all of the schemas and checked things prior to this\n\t\t\t\t// point. We can't return errors here, but since this is UI code\n\t\t\t\t// we will try to do _something_ reasonable.\n\t\t\t\tp.buf.WriteString(fmt.Sprintf(\"# missing schema for provider %q\\n\\n\", provider))\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tswitch addr.Mode {\n\t\t\tcase addrs.ManagedResourceMode:\n\t\t\t\tschema, _ = schemas.ResourceTypeConfig(\n\t\t\t\t\tprovider,\n\t\t\t\t\taddr.Mode,\n\t\t\t\t\taddr.Type,\n\t\t\t\t)\n\t\t\t\tif schema == nil {\n\t\t\t\t\tp.buf.WriteString(fmt.Sprintf(\n\t\t\t\t\t\t\"# missing schema for provider %q resource type %s\\n\\n\", provider, addr.Type))\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tp.buf.WriteString(fmt.Sprintf(\n\t\t\t\t\t\"resource %q %q {\",\n\t\t\t\t\taddr.Type,\n\t\t\t\t\taddr.Name,\n\t\t\t\t))\n\t\t\tcase addrs.DataResourceMode:\n\t\t\t\tschema, _ = schemas.ResourceTypeConfig(\n\t\t\t\t\tprovider,\n\t\t\t\t\taddr.Mode,\n\t\t\t\t\taddr.Type,\n\t\t\t\t)\n\t\t\t\tif schema == nil {\n\t\t\t\t\tp.buf.WriteString(fmt.Sprintf(\n\t\t\t\t\t\t\"# missing schema for provider %q data source %s\\n\\n\", provider, addr.Type))\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tp.buf.WriteString(fmt.Sprintf(\n\t\t\t\t\t\"data %q %q {\",\n\t\t\t\t\taddr.Type,\n\t\t\t\t\taddr.Name,\n\t\t\t\t))\n\t\t\tdefault:\n\t\t\t\t// should never happen, since the above is exhaustive\n\t\t\t\tp.buf.WriteString(addr.String())\n\t\t\t}\n\n\t\t\tval, err := v.Current.Decode(schema.ImpliedType())\n\t\t\tif err != nil {\n\t\t\t\tfmt.Println(err.Error())\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\tpath := make(cty.Path, 0, 3)\n\t\t\tbodyWritten := p.writeBlockBodyDiff(schema, val.Value, val.Value, 2, path)\n\t\t\tif bodyWritten {\n\t\t\t\tp.buf.WriteString(\"\\n\")\n\t\t\t}\n\n\t\t\tp.buf.WriteString(\"}\\n\\n\")\n\t\t}\n\t}\n\tp.buf.WriteString(\"[reset]\\n\")\n}\n\nfunc formatNestedList(indent string, outputList []interface{}) string {\n\toutputBuf := new(bytes.Buffer)\n\toutputBuf.WriteString(fmt.Sprintf(\"%s[\", indent))\n\n\tlastIdx := len(outputList) - 1\n\n\tfor i, value := range outputList {\n\t\toutputBuf.WriteString(fmt.Sprintf(\"\\n%s%s%s\", indent, \"    \", value))\n\t\tif i != lastIdx {\n\t\t\toutputBuf.WriteString(\",\")\n\t\t}\n\t}\n\n\toutputBuf.WriteString(fmt.Sprintf(\"\\n%s]\", indent))\n\treturn strings.TrimPrefix(outputBuf.String(), \"\\n\")\n}\n\nfunc formatListOutput(indent, outputName string, outputList []interface{}) string {\n\tkeyIndent := \"\"\n\n\toutputBuf := new(bytes.Buffer)\n\n\tif outputName != \"\" {\n\t\toutputBuf.WriteString(fmt.Sprintf(\"%s%s = [\", indent, outputName))\n\t\tkeyIndent = \"    \"\n\t}\n\n\tlastIdx := len(outputList) - 1\n\n\tfor i, value := range outputList {\n\t\tswitch typedValue := value.(type) {\n\t\tcase string:\n\t\t\toutputBuf.WriteString(fmt.Sprintf(\"\\n%s%s%s\", indent, keyIndent, value))\n\t\tcase []interface{}:\n\t\t\toutputBuf.WriteString(fmt.Sprintf(\"\\n%s%s\", indent,\n\t\t\t\tformatNestedList(indent+keyIndent, typedValue)))\n\t\tcase map[string]interface{}:\n\t\t\toutputBuf.WriteString(fmt.Sprintf(\"\\n%s%s\", indent,\n\t\t\t\tformatNestedMap(indent+keyIndent, typedValue)))\n\t\t}\n\n\t\tif lastIdx != i {\n\t\t\toutputBuf.WriteString(\",\")\n\t\t}\n\t}\n\n\tif outputName != \"\" {\n\t\tif len(outputList) > 0 {\n\t\t\toutputBuf.WriteString(fmt.Sprintf(\"\\n%s]\", indent))\n\t\t} else {\n\t\t\toutputBuf.WriteString(\"]\")\n\t\t}\n\t}\n\n\treturn strings.TrimPrefix(outputBuf.String(), \"\\n\")\n}\n\nfunc formatNestedMap(indent string, outputMap map[string]interface{}) string {\n\tks := make([]string, 0, len(outputMap))\n\tfor k, _ := range outputMap {\n\t\tks = append(ks, k)\n\t}\n\tsort.Strings(ks)\n\n\toutputBuf := new(bytes.Buffer)\n\toutputBuf.WriteString(fmt.Sprintf(\"%s{\", indent))\n\n\tlastIdx := len(outputMap) - 1\n\tfor i, k := range ks {\n\t\tv := outputMap[k]\n\t\toutputBuf.WriteString(fmt.Sprintf(\"\\n%s%s = %v\", indent+\"    \", k, v))\n\n\t\tif lastIdx != i {\n\t\t\toutputBuf.WriteString(\",\")\n\t\t}\n\t}\n\n\toutputBuf.WriteString(fmt.Sprintf(\"\\n%s}\", indent))\n\n\treturn strings.TrimPrefix(outputBuf.String(), \"\\n\")\n}\n\nfunc formatMapOutput(indent, outputName string, outputMap map[string]interface{}) string {\n\tks := make([]string, 0, len(outputMap))\n\tfor k, _ := range outputMap {\n\t\tks = append(ks, k)\n\t}\n\tsort.Strings(ks)\n\n\tkeyIndent := \"\"\n\n\toutputBuf := new(bytes.Buffer)\n\tif outputName != \"\" {\n\t\toutputBuf.WriteString(fmt.Sprintf(\"%s%s = {\", indent, outputName))\n\t\tkeyIndent = \"  \"\n\t}\n\n\tfor _, k := range ks {\n\t\tv := outputMap[k]\n\t\toutputBuf.WriteString(fmt.Sprintf(\"\\n%s%s%s = %v\", indent, keyIndent, k, v))\n\t}\n\n\tif outputName != \"\" {\n\t\tif len(outputMap) > 0 {\n\t\t\toutputBuf.WriteString(fmt.Sprintf(\"\\n%s}\", indent))\n\t\t} else {\n\t\t\toutputBuf.WriteString(\"}\")\n\t\t}\n\t}\n\n\treturn strings.TrimPrefix(outputBuf.String(), \"\\n\")\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/config/append.go",
    "content": "package config\n\n// Append appends one configuration to another.\n//\n// Append assumes that both configurations will not have\n// conflicting variables, resources, etc. If they do, the\n// problems will be caught in the validation phase.\n//\n// It is possible that c1, c2 on their own are not valid. For\n// example, a resource in c2 may reference a variable in c1. But\n// together, they would be valid.\nfunc Append(c1, c2 *Config) (*Config, error) {\n\tc := new(Config)\n\n\t// Append unknown keys, but keep them unique since it is a set\n\tunknowns := make(map[string]struct{})\n\tfor _, k := range c1.unknownKeys {\n\t\t_, present := unknowns[k]\n\t\tif !present {\n\t\t\tunknowns[k] = struct{}{}\n\t\t\tc.unknownKeys = append(c.unknownKeys, k)\n\t\t}\n\t}\n\n\tfor _, k := range c2.unknownKeys {\n\t\t_, present := unknowns[k]\n\t\tif !present {\n\t\t\tunknowns[k] = struct{}{}\n\t\t\tc.unknownKeys = append(c.unknownKeys, k)\n\t\t}\n\t}\n\n\tc.Atlas = c1.Atlas\n\tif c2.Atlas != nil {\n\t\tc.Atlas = c2.Atlas\n\t}\n\n\t// merge Terraform blocks\n\tif c1.Terraform != nil {\n\t\tc.Terraform = c1.Terraform\n\t\tif c2.Terraform != nil {\n\t\t\tc.Terraform.Merge(c2.Terraform)\n\t\t}\n\t} else {\n\t\tc.Terraform = c2.Terraform\n\t}\n\n\tif len(c1.Modules) > 0 || len(c2.Modules) > 0 {\n\t\tc.Modules = make(\n\t\t\t[]*Module, 0, len(c1.Modules)+len(c2.Modules))\n\t\tc.Modules = append(c.Modules, c1.Modules...)\n\t\tc.Modules = append(c.Modules, c2.Modules...)\n\t}\n\n\tif len(c1.Outputs) > 0 || len(c2.Outputs) > 0 {\n\t\tc.Outputs = make(\n\t\t\t[]*Output, 0, len(c1.Outputs)+len(c2.Outputs))\n\t\tc.Outputs = append(c.Outputs, c1.Outputs...)\n\t\tc.Outputs = append(c.Outputs, c2.Outputs...)\n\t}\n\n\tif len(c1.ProviderConfigs) > 0 || len(c2.ProviderConfigs) > 0 {\n\t\tc.ProviderConfigs = make(\n\t\t\t[]*ProviderConfig,\n\t\t\t0, len(c1.ProviderConfigs)+len(c2.ProviderConfigs))\n\t\tc.ProviderConfigs = append(c.ProviderConfigs, c1.ProviderConfigs...)\n\t\tc.ProviderConfigs = append(c.ProviderConfigs, c2.ProviderConfigs...)\n\t}\n\n\tif len(c1.Resources) > 0 || len(c2.Resources) > 0 {\n\t\tc.Resources = make(\n\t\t\t[]*Resource,\n\t\t\t0, len(c1.Resources)+len(c2.Resources))\n\t\tc.Resources = append(c.Resources, c1.Resources...)\n\t\tc.Resources = append(c.Resources, c2.Resources...)\n\t}\n\n\tif len(c1.Variables) > 0 || len(c2.Variables) > 0 {\n\t\tc.Variables = make(\n\t\t\t[]*Variable, 0, len(c1.Variables)+len(c2.Variables))\n\t\tc.Variables = append(c.Variables, c1.Variables...)\n\t\tc.Variables = append(c.Variables, c2.Variables...)\n\t}\n\n\tif len(c1.Locals) > 0 || len(c2.Locals) > 0 {\n\t\tc.Locals = make([]*Local, 0, len(c1.Locals)+len(c2.Locals))\n\t\tc.Locals = append(c.Locals, c1.Locals...)\n\t\tc.Locals = append(c.Locals, c2.Locals...)\n\t}\n\n\treturn c, nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/config/config.go",
    "content": "// The config package is responsible for loading and validating the\n// configuration.\npackage config\n\nimport (\n\t\"fmt\"\n\t\"regexp\"\n\t\"strconv\"\n\t\"strings\"\n\n\thcl2 \"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/hashicorp/hil/ast\"\n\t\"github.com/hashicorp/terraform/helper/hilmapstructure\"\n\t\"github.com/hashicorp/terraform/plugin/discovery\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n\t\"github.com/mitchellh/reflectwalk\"\n)\n\n// NameRegexp is the regular expression that all names (modules, providers,\n// resources, etc.) must follow.\nvar NameRegexp = regexp.MustCompile(`(?i)\\A[A-Z0-9_][A-Z0-9\\-\\_]*\\z`)\n\n// Config is the configuration that comes from loading a collection\n// of Terraform templates.\ntype Config struct {\n\t// Dir is the path to the directory where this configuration was\n\t// loaded from. If it is blank, this configuration wasn't loaded from\n\t// any meaningful directory.\n\tDir string\n\n\tTerraform       *Terraform\n\tAtlas           *AtlasConfig\n\tModules         []*Module\n\tProviderConfigs []*ProviderConfig\n\tResources       []*Resource\n\tVariables       []*Variable\n\tLocals          []*Local\n\tOutputs         []*Output\n\n\t// The fields below can be filled in by loaders for validation\n\t// purposes.\n\tunknownKeys []string\n}\n\n// AtlasConfig is the configuration for building in HashiCorp's Atlas.\ntype AtlasConfig struct {\n\tName    string\n\tInclude []string\n\tExclude []string\n}\n\n// Module is a module used within a configuration.\n//\n// This does not represent a module itself, this represents a module\n// call-site within an existing configuration.\ntype Module struct {\n\tName      string\n\tSource    string\n\tVersion   string\n\tProviders map[string]string\n\tRawConfig *RawConfig\n}\n\n// ProviderConfig is the configuration for a resource provider.\n//\n// For example, Terraform needs to set the AWS access keys for the AWS\n// resource provider.\ntype ProviderConfig struct {\n\tName      string\n\tAlias     string\n\tVersion   string\n\tRawConfig *RawConfig\n}\n\n// A resource represents a single Terraform resource in the configuration.\n// A Terraform resource is something that supports some or all of the\n// usual \"create, read, update, delete\" operations, depending on\n// the given Mode.\ntype Resource struct {\n\tMode         ResourceMode // which operations the resource supports\n\tName         string\n\tType         string\n\tRawCount     *RawConfig\n\tRawConfig    *RawConfig\n\tProvisioners []*Provisioner\n\tProvider     string\n\tDependsOn    []string\n\tLifecycle    ResourceLifecycle\n}\n\n// Copy returns a copy of this Resource. Helpful for avoiding shared\n// config pointers across multiple pieces of the graph that need to do\n// interpolation.\nfunc (r *Resource) Copy() *Resource {\n\tn := &Resource{\n\t\tMode:         r.Mode,\n\t\tName:         r.Name,\n\t\tType:         r.Type,\n\t\tRawCount:     r.RawCount.Copy(),\n\t\tRawConfig:    r.RawConfig.Copy(),\n\t\tProvisioners: make([]*Provisioner, 0, len(r.Provisioners)),\n\t\tProvider:     r.Provider,\n\t\tDependsOn:    make([]string, len(r.DependsOn)),\n\t\tLifecycle:    *r.Lifecycle.Copy(),\n\t}\n\tfor _, p := range r.Provisioners {\n\t\tn.Provisioners = append(n.Provisioners, p.Copy())\n\t}\n\tcopy(n.DependsOn, r.DependsOn)\n\treturn n\n}\n\n// ResourceLifecycle is used to store the lifecycle tuning parameters\n// to allow customized behavior\ntype ResourceLifecycle struct {\n\tCreateBeforeDestroy bool     `mapstructure:\"create_before_destroy\"`\n\tPreventDestroy      bool     `mapstructure:\"prevent_destroy\"`\n\tIgnoreChanges       []string `mapstructure:\"ignore_changes\"`\n}\n\n// Copy returns a copy of this ResourceLifecycle\nfunc (r *ResourceLifecycle) Copy() *ResourceLifecycle {\n\tn := &ResourceLifecycle{\n\t\tCreateBeforeDestroy: r.CreateBeforeDestroy,\n\t\tPreventDestroy:      r.PreventDestroy,\n\t\tIgnoreChanges:       make([]string, len(r.IgnoreChanges)),\n\t}\n\tcopy(n.IgnoreChanges, r.IgnoreChanges)\n\treturn n\n}\n\n// Provisioner is a configured provisioner step on a resource.\ntype Provisioner struct {\n\tType      string\n\tRawConfig *RawConfig\n\tConnInfo  *RawConfig\n\n\tWhen      ProvisionerWhen\n\tOnFailure ProvisionerOnFailure\n}\n\n// Copy returns a copy of this Provisioner\nfunc (p *Provisioner) Copy() *Provisioner {\n\treturn &Provisioner{\n\t\tType:      p.Type,\n\t\tRawConfig: p.RawConfig.Copy(),\n\t\tConnInfo:  p.ConnInfo.Copy(),\n\t\tWhen:      p.When,\n\t\tOnFailure: p.OnFailure,\n\t}\n}\n\n// Variable is a module argument defined within the configuration.\ntype Variable struct {\n\tName         string\n\tDeclaredType string `mapstructure:\"type\"`\n\tDefault      interface{}\n\tDescription  string\n}\n\n// Local is a local value defined within the configuration.\ntype Local struct {\n\tName      string\n\tRawConfig *RawConfig\n}\n\n// Output is an output defined within the configuration. An output is\n// resulting data that is highlighted by Terraform when finished. An\n// output marked Sensitive will be output in a masked form following\n// application, but will still be available in state.\ntype Output struct {\n\tName        string\n\tDependsOn   []string\n\tDescription string\n\tSensitive   bool\n\tRawConfig   *RawConfig\n}\n\n// VariableType is the type of value a variable is holding, and returned\n// by the Type() function on variables.\ntype VariableType byte\n\nconst (\n\tVariableTypeUnknown VariableType = iota\n\tVariableTypeString\n\tVariableTypeList\n\tVariableTypeMap\n)\n\nfunc (v VariableType) Printable() string {\n\tswitch v {\n\tcase VariableTypeString:\n\t\treturn \"string\"\n\tcase VariableTypeMap:\n\t\treturn \"map\"\n\tcase VariableTypeList:\n\t\treturn \"list\"\n\tdefault:\n\t\treturn \"unknown\"\n\t}\n}\n\n// ProviderConfigName returns the name of the provider configuration in\n// the given mapping that maps to the proper provider configuration\n// for this resource.\nfunc ProviderConfigName(t string, pcs []*ProviderConfig) string {\n\tlk := \"\"\n\tfor _, v := range pcs {\n\t\tk := v.Name\n\t\tif strings.HasPrefix(t, k) && len(k) > len(lk) {\n\t\t\tlk = k\n\t\t}\n\t}\n\n\treturn lk\n}\n\n// A unique identifier for this module.\nfunc (r *Module) Id() string {\n\treturn fmt.Sprintf(\"%s\", r.Name)\n}\n\n// Count returns the count of this resource.\nfunc (r *Resource) Count() (int, error) {\n\traw := r.RawCount.Value()\n\tcount, ok := r.RawCount.Value().(string)\n\tif !ok {\n\t\treturn 0, fmt.Errorf(\n\t\t\t\"expected count to be a string or int, got %T\", raw)\n\t}\n\n\tv, err := strconv.ParseInt(count, 0, 0)\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\n\t\t\t\"cannot parse %q as an integer\",\n\t\t\tcount,\n\t\t)\n\t}\n\n\treturn int(v), nil\n}\n\n// A unique identifier for this resource.\nfunc (r *Resource) Id() string {\n\tswitch r.Mode {\n\tcase ManagedResourceMode:\n\t\treturn fmt.Sprintf(\"%s.%s\", r.Type, r.Name)\n\tcase DataResourceMode:\n\t\treturn fmt.Sprintf(\"data.%s.%s\", r.Type, r.Name)\n\tdefault:\n\t\tpanic(fmt.Errorf(\"unknown resource mode %s\", r.Mode))\n\t}\n}\n\n// ProviderFullName returns the full name of the provider for this resource,\n// which may either be specified explicitly using the \"provider\" meta-argument\n// or implied by the prefix on the resource type name.\nfunc (r *Resource) ProviderFullName() string {\n\treturn ResourceProviderFullName(r.Type, r.Provider)\n}\n\n// ResourceProviderFullName returns the full (dependable) name of the\n// provider for a hypothetical resource with the given resource type and\n// explicit provider string. If the explicit provider string is empty then\n// the provider name is inferred from the resource type name.\nfunc ResourceProviderFullName(resourceType, explicitProvider string) string {\n\tif explicitProvider != \"\" {\n\t\t// check for an explicit provider name, or return the original\n\t\tparts := strings.SplitAfter(explicitProvider, \"provider.\")\n\t\treturn parts[len(parts)-1]\n\t}\n\n\tidx := strings.IndexRune(resourceType, '_')\n\tif idx == -1 {\n\t\t// If no underscores, the resource name is assumed to be\n\t\t// also the provider name, e.g. if the provider exposes\n\t\t// only a single resource of each type.\n\t\treturn resourceType\n\t}\n\n\treturn resourceType[:idx]\n}\n\n// Validate does some basic semantic checking of the configuration.\nfunc (c *Config) Validate() tfdiags.Diagnostics {\n\tif c == nil {\n\t\treturn nil\n\t}\n\n\tvar diags tfdiags.Diagnostics\n\n\tfor _, k := range c.unknownKeys {\n\t\tdiags = diags.Append(\n\t\t\tfmt.Errorf(\"Unknown root level key: %s\", k),\n\t\t)\n\t}\n\n\t// Validate the Terraform config\n\tif tf := c.Terraform; tf != nil {\n\t\terrs := c.Terraform.Validate()\n\t\tfor _, err := range errs {\n\t\t\tdiags = diags.Append(err)\n\t\t}\n\t}\n\n\tvars := c.InterpolatedVariables()\n\tvarMap := make(map[string]*Variable)\n\tfor _, v := range c.Variables {\n\t\tif _, ok := varMap[v.Name]; ok {\n\t\t\tdiags = diags.Append(fmt.Errorf(\n\t\t\t\t\"Variable '%s': duplicate found. Variable names must be unique.\",\n\t\t\t\tv.Name,\n\t\t\t))\n\t\t}\n\n\t\tvarMap[v.Name] = v\n\t}\n\n\tfor k, _ := range varMap {\n\t\tif !NameRegexp.MatchString(k) {\n\t\t\tdiags = diags.Append(fmt.Errorf(\n\t\t\t\t\"variable %q: variable name must match regular expression %s\",\n\t\t\t\tk, NameRegexp,\n\t\t\t))\n\t\t}\n\t}\n\n\tfor _, v := range c.Variables {\n\t\tif v.Type() == VariableTypeUnknown {\n\t\t\tdiags = diags.Append(fmt.Errorf(\n\t\t\t\t\"Variable '%s': must be a string or a map\",\n\t\t\t\tv.Name,\n\t\t\t))\n\t\t\tcontinue\n\t\t}\n\n\t\tinterp := false\n\t\tfn := func(n ast.Node) (interface{}, error) {\n\t\t\t// LiteralNode is a literal string (outside of a ${ ... } sequence).\n\t\t\t// interpolationWalker skips most of these. but in particular it\n\t\t\t// visits those that have escaped sequences (like $${foo}) as a\n\t\t\t// signal that *some* processing is required on this string. For\n\t\t\t// our purposes here though, this is fine and not an interpolation.\n\t\t\tif _, ok := n.(*ast.LiteralNode); !ok {\n\t\t\t\tinterp = true\n\t\t\t}\n\t\t\treturn \"\", nil\n\t\t}\n\n\t\tw := &interpolationWalker{F: fn}\n\t\tif v.Default != nil {\n\t\t\tif err := reflectwalk.Walk(v.Default, w); err == nil {\n\t\t\t\tif interp {\n\t\t\t\t\tdiags = diags.Append(fmt.Errorf(\n\t\t\t\t\t\t\"variable %q: default may not contain interpolations\",\n\t\t\t\t\t\tv.Name,\n\t\t\t\t\t))\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check for references to user variables that do not actually\n\t// exist and record those errors.\n\tfor source, vs := range vars {\n\t\tfor _, v := range vs {\n\t\t\tuv, ok := v.(*UserVariable)\n\t\t\tif !ok {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif _, ok := varMap[uv.Name]; !ok {\n\t\t\t\tdiags = diags.Append(fmt.Errorf(\n\t\t\t\t\t\"%s: unknown variable referenced: '%s'; define it with a 'variable' block\",\n\t\t\t\t\tsource,\n\t\t\t\t\tuv.Name,\n\t\t\t\t))\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check that all count variables are valid.\n\tfor source, vs := range vars {\n\t\tfor _, rawV := range vs {\n\t\t\tswitch v := rawV.(type) {\n\t\t\tcase *CountVariable:\n\t\t\t\tif v.Type == CountValueInvalid {\n\t\t\t\t\tdiags = diags.Append(fmt.Errorf(\n\t\t\t\t\t\t\"%s: invalid count variable: %s\",\n\t\t\t\t\t\tsource,\n\t\t\t\t\t\tv.FullKey(),\n\t\t\t\t\t))\n\t\t\t\t}\n\t\t\tcase *PathVariable:\n\t\t\t\tif v.Type == PathValueInvalid {\n\t\t\t\t\tdiags = diags.Append(fmt.Errorf(\n\t\t\t\t\t\t\"%s: invalid path variable: %s\",\n\t\t\t\t\t\tsource,\n\t\t\t\t\t\tv.FullKey(),\n\t\t\t\t\t))\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check that providers aren't declared multiple times and that their\n\t// version constraints, where present, are syntactically valid.\n\tproviderSet := make(map[string]bool)\n\tfor _, p := range c.ProviderConfigs {\n\t\tname := p.FullName()\n\t\tif _, ok := providerSet[name]; ok {\n\t\t\tdiags = diags.Append(fmt.Errorf(\n\t\t\t\t\"provider.%s: multiple configurations present; only one configuration is allowed per provider\",\n\t\t\t\tname,\n\t\t\t))\n\t\t\tcontinue\n\t\t}\n\n\t\tif p.Version != \"\" {\n\t\t\t_, err := discovery.ConstraintStr(p.Version).Parse()\n\t\t\tif err != nil {\n\t\t\t\tdiags = diags.Append(&hcl2.Diagnostic{\n\t\t\t\t\tSeverity: hcl2.DiagError,\n\t\t\t\t\tSummary:  \"Invalid provider version constraint\",\n\t\t\t\t\tDetail: fmt.Sprintf(\n\t\t\t\t\t\t\"The value %q given for provider.%s is not a valid version constraint.\",\n\t\t\t\t\t\tp.Version, name,\n\t\t\t\t\t),\n\t\t\t\t\t// TODO: include a \"Subject\" source reference in here,\n\t\t\t\t\t// once the config loader is able to retain source\n\t\t\t\t\t// location information.\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\tproviderSet[name] = true\n\t}\n\n\t// Check that all references to modules are valid\n\tmodules := make(map[string]*Module)\n\tdupped := make(map[string]struct{})\n\tfor _, m := range c.Modules {\n\t\t// Check for duplicates\n\t\tif _, ok := modules[m.Id()]; ok {\n\t\t\tif _, ok := dupped[m.Id()]; !ok {\n\t\t\t\tdupped[m.Id()] = struct{}{}\n\n\t\t\t\tdiags = diags.Append(fmt.Errorf(\n\t\t\t\t\t\"module %q: module repeated multiple times\",\n\t\t\t\t\tm.Id(),\n\t\t\t\t))\n\t\t\t}\n\n\t\t\t// Already seen this module, just skip it\n\t\t\tcontinue\n\t\t}\n\n\t\tmodules[m.Id()] = m\n\n\t\t// Check that the source has no interpolations\n\t\trc, err := NewRawConfig(map[string]interface{}{\n\t\t\t\"root\": m.Source,\n\t\t})\n\t\tif err != nil {\n\t\t\tdiags = diags.Append(fmt.Errorf(\n\t\t\t\t\"module %q: module source error: %s\",\n\t\t\t\tm.Id(), err,\n\t\t\t))\n\t\t} else if len(rc.Interpolations) > 0 {\n\t\t\tdiags = diags.Append(fmt.Errorf(\n\t\t\t\t\"module %q: module source cannot contain interpolations\",\n\t\t\t\tm.Id(),\n\t\t\t))\n\t\t}\n\n\t\t// Check that the name matches our regexp\n\t\tif !NameRegexp.Match([]byte(m.Name)) {\n\t\t\tdiags = diags.Append(fmt.Errorf(\n\t\t\t\t\"module %q: module name must be a letter or underscore followed by only letters, numbers, dashes, and underscores\",\n\t\t\t\tm.Id(),\n\t\t\t))\n\t\t}\n\n\t\t// Check that the configuration can all be strings, lists or maps\n\t\traw := make(map[string]interface{})\n\t\tfor k, v := range m.RawConfig.Raw {\n\t\t\tvar strVal string\n\t\t\tif err := hilmapstructure.WeakDecode(v, &strVal); err == nil {\n\t\t\t\traw[k] = strVal\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tvar mapVal map[string]interface{}\n\t\t\tif err := hilmapstructure.WeakDecode(v, &mapVal); err == nil {\n\t\t\t\traw[k] = mapVal\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tvar sliceVal []interface{}\n\t\t\tif err := hilmapstructure.WeakDecode(v, &sliceVal); err == nil {\n\t\t\t\traw[k] = sliceVal\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tdiags = diags.Append(fmt.Errorf(\n\t\t\t\t\"module %q: argument %s must have a string, list, or map value\",\n\t\t\t\tm.Id(), k,\n\t\t\t))\n\t\t}\n\n\t\t// Check for invalid count variables\n\t\tfor _, v := range m.RawConfig.Variables {\n\t\t\tswitch v.(type) {\n\t\t\tcase *CountVariable:\n\t\t\t\tdiags = diags.Append(fmt.Errorf(\n\t\t\t\t\t\"module %q: count variables are only valid within resources\",\n\t\t\t\t\tm.Name,\n\t\t\t\t))\n\t\t\tcase *SelfVariable:\n\t\t\t\tdiags = diags.Append(fmt.Errorf(\n\t\t\t\t\t\"module %q: self variables are only valid within resources\",\n\t\t\t\t\tm.Name,\n\t\t\t\t))\n\t\t\t}\n\t\t}\n\n\t\t// Update the raw configuration to only contain the string values\n\t\tm.RawConfig, err = NewRawConfig(raw)\n\t\tif err != nil {\n\t\t\tdiags = diags.Append(fmt.Errorf(\n\t\t\t\t\"%s: can't initialize configuration: %s\",\n\t\t\t\tm.Id(), err,\n\t\t\t))\n\t\t}\n\n\t\t// check that all named providers actually exist\n\t\tfor _, p := range m.Providers {\n\t\t\tif !providerSet[p] {\n\t\t\t\tdiags = diags.Append(fmt.Errorf(\n\t\t\t\t\t\"module %q: cannot pass non-existent provider %q\",\n\t\t\t\t\tm.Name, p,\n\t\t\t\t))\n\t\t\t}\n\t\t}\n\n\t}\n\tdupped = nil\n\n\t// Check that all variables for modules reference modules that\n\t// exist.\n\tfor source, vs := range vars {\n\t\tfor _, v := range vs {\n\t\t\tmv, ok := v.(*ModuleVariable)\n\t\t\tif !ok {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif _, ok := modules[mv.Name]; !ok {\n\t\t\t\tdiags = diags.Append(fmt.Errorf(\n\t\t\t\t\t\"%s: unknown module referenced: %s\",\n\t\t\t\t\tsource, mv.Name,\n\t\t\t\t))\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check that all references to resources are valid\n\tresources := make(map[string]*Resource)\n\tdupped = make(map[string]struct{})\n\tfor _, r := range c.Resources {\n\t\tif _, ok := resources[r.Id()]; ok {\n\t\t\tif _, ok := dupped[r.Id()]; !ok {\n\t\t\t\tdupped[r.Id()] = struct{}{}\n\n\t\t\t\tdiags = diags.Append(fmt.Errorf(\n\t\t\t\t\t\"%s: resource repeated multiple times\",\n\t\t\t\t\tr.Id(),\n\t\t\t\t))\n\t\t\t}\n\t\t}\n\n\t\tresources[r.Id()] = r\n\t}\n\tdupped = nil\n\n\t// Validate resources\n\tfor n, r := range resources {\n\t\t// Verify count variables\n\t\tfor _, v := range r.RawCount.Variables {\n\t\t\tswitch v.(type) {\n\t\t\tcase *CountVariable:\n\t\t\t\tdiags = diags.Append(fmt.Errorf(\n\t\t\t\t\t\"%s: resource count can't reference count variable: %s\",\n\t\t\t\t\tn, v.FullKey(),\n\t\t\t\t))\n\t\t\tcase *SimpleVariable:\n\t\t\t\tdiags = diags.Append(fmt.Errorf(\n\t\t\t\t\t\"%s: resource count can't reference variable: %s\",\n\t\t\t\t\tn, v.FullKey(),\n\t\t\t\t))\n\n\t\t\t// Good\n\t\t\tcase *ModuleVariable:\n\t\t\tcase *ResourceVariable:\n\t\t\tcase *TerraformVariable:\n\t\t\tcase *UserVariable:\n\t\t\tcase *LocalVariable:\n\n\t\t\tdefault:\n\t\t\t\tdiags = diags.Append(fmt.Errorf(\n\t\t\t\t\t\"Internal error. Unknown type in count var in %s: %T\",\n\t\t\t\t\tn, v,\n\t\t\t\t))\n\t\t\t}\n\t\t}\n\n\t\tif !r.RawCount.couldBeInteger() {\n\t\t\tdiags = diags.Append(fmt.Errorf(\n\t\t\t\t\"%s: resource count must be an integer\", n,\n\t\t\t))\n\t\t}\n\t\tr.RawCount.init()\n\n\t\t// Validate DependsOn\n\t\tfor _, err := range c.validateDependsOn(n, r.DependsOn, resources, modules) {\n\t\t\tdiags = diags.Append(err)\n\t\t}\n\n\t\t// Verify provisioners\n\t\tfor _, p := range r.Provisioners {\n\t\t\t// This validation checks that there are no splat variables\n\t\t\t// referencing ourself. This currently is not allowed.\n\n\t\t\tfor _, v := range p.ConnInfo.Variables {\n\t\t\t\trv, ok := v.(*ResourceVariable)\n\t\t\t\tif !ok {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tif rv.Multi && rv.Index == -1 && rv.Type == r.Type && rv.Name == r.Name {\n\t\t\t\t\tdiags = diags.Append(fmt.Errorf(\n\t\t\t\t\t\t\"%s: connection info cannot contain splat variable referencing itself\",\n\t\t\t\t\t\tn,\n\t\t\t\t\t))\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor _, v := range p.RawConfig.Variables {\n\t\t\t\trv, ok := v.(*ResourceVariable)\n\t\t\t\tif !ok {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tif rv.Multi && rv.Index == -1 && rv.Type == r.Type && rv.Name == r.Name {\n\t\t\t\t\tdiags = diags.Append(fmt.Errorf(\n\t\t\t\t\t\t\"%s: connection info cannot contain splat variable referencing itself\",\n\t\t\t\t\t\tn,\n\t\t\t\t\t))\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Check for invalid when/onFailure values, though this should be\n\t\t\t// picked up by the loader we check here just in case.\n\t\t\tif p.When == ProvisionerWhenInvalid {\n\t\t\t\tdiags = diags.Append(fmt.Errorf(\n\t\t\t\t\t\"%s: provisioner 'when' value is invalid\", n,\n\t\t\t\t))\n\t\t\t}\n\t\t\tif p.OnFailure == ProvisionerOnFailureInvalid {\n\t\t\t\tdiags = diags.Append(fmt.Errorf(\n\t\t\t\t\t\"%s: provisioner 'on_failure' value is invalid\", n,\n\t\t\t\t))\n\t\t\t}\n\t\t}\n\n\t\t// Verify ignore_changes contains valid entries\n\t\tfor _, v := range r.Lifecycle.IgnoreChanges {\n\t\t\tif strings.Contains(v, \"*\") && v != \"*\" {\n\t\t\t\tdiags = diags.Append(fmt.Errorf(\n\t\t\t\t\t\"%s: ignore_changes does not support using a partial string together with a wildcard: %s\",\n\t\t\t\t\tn, v,\n\t\t\t\t))\n\t\t\t}\n\t\t}\n\n\t\t// Verify ignore_changes has no interpolations\n\t\trc, err := NewRawConfig(map[string]interface{}{\n\t\t\t\"root\": r.Lifecycle.IgnoreChanges,\n\t\t})\n\t\tif err != nil {\n\t\t\tdiags = diags.Append(fmt.Errorf(\n\t\t\t\t\"%s: lifecycle ignore_changes error: %s\",\n\t\t\t\tn, err,\n\t\t\t))\n\t\t} else if len(rc.Interpolations) > 0 {\n\t\t\tdiags = diags.Append(fmt.Errorf(\n\t\t\t\t\"%s: lifecycle ignore_changes cannot contain interpolations\",\n\t\t\t\tn,\n\t\t\t))\n\t\t}\n\n\t\t// If it is a data source then it can't have provisioners\n\t\tif r.Mode == DataResourceMode {\n\t\t\tif _, ok := r.RawConfig.Raw[\"provisioner\"]; ok {\n\t\t\t\tdiags = diags.Append(fmt.Errorf(\n\t\t\t\t\t\"%s: data sources cannot have provisioners\",\n\t\t\t\t\tn,\n\t\t\t\t))\n\t\t\t}\n\t\t}\n\t}\n\n\tfor source, vs := range vars {\n\t\tfor _, v := range vs {\n\t\t\trv, ok := v.(*ResourceVariable)\n\t\t\tif !ok {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tid := rv.ResourceId()\n\t\t\tif _, ok := resources[id]; !ok {\n\t\t\t\tdiags = diags.Append(fmt.Errorf(\n\t\t\t\t\t\"%s: unknown resource '%s' referenced in variable %s\",\n\t\t\t\t\tsource,\n\t\t\t\t\tid,\n\t\t\t\t\trv.FullKey(),\n\t\t\t\t))\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check that all locals are valid\n\t{\n\t\tfound := make(map[string]struct{})\n\t\tfor _, l := range c.Locals {\n\t\t\tif _, ok := found[l.Name]; ok {\n\t\t\t\tdiags = diags.Append(fmt.Errorf(\n\t\t\t\t\t\"%s: duplicate local. local value names must be unique\",\n\t\t\t\t\tl.Name,\n\t\t\t\t))\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tfound[l.Name] = struct{}{}\n\n\t\t\tfor _, v := range l.RawConfig.Variables {\n\t\t\t\tif _, ok := v.(*CountVariable); ok {\n\t\t\t\t\tdiags = diags.Append(fmt.Errorf(\n\t\t\t\t\t\t\"local %s: count variables are only valid within resources\", l.Name,\n\t\t\t\t\t))\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check that all outputs are valid\n\t{\n\t\tfound := make(map[string]struct{})\n\t\tfor _, o := range c.Outputs {\n\t\t\t// Verify the output is new\n\t\t\tif _, ok := found[o.Name]; ok {\n\t\t\t\tdiags = diags.Append(fmt.Errorf(\n\t\t\t\t\t\"output %q: an output of this name was already defined\",\n\t\t\t\t\to.Name,\n\t\t\t\t))\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tfound[o.Name] = struct{}{}\n\n\t\t\tvar invalidKeys []string\n\t\t\tvalueKeyFound := false\n\t\t\tfor k := range o.RawConfig.Raw {\n\t\t\t\tif k == \"value\" {\n\t\t\t\t\tvalueKeyFound = true\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif k == \"sensitive\" {\n\t\t\t\t\tif sensitive, ok := o.RawConfig.config[k].(bool); ok {\n\t\t\t\t\t\tif sensitive {\n\t\t\t\t\t\t\to.Sensitive = true\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\n\t\t\t\t\tdiags = diags.Append(fmt.Errorf(\n\t\t\t\t\t\t\"output %q: value for 'sensitive' must be boolean\",\n\t\t\t\t\t\to.Name,\n\t\t\t\t\t))\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif k == \"description\" {\n\t\t\t\t\tif desc, ok := o.RawConfig.config[k].(string); ok {\n\t\t\t\t\t\to.Description = desc\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\n\t\t\t\t\tdiags = diags.Append(fmt.Errorf(\n\t\t\t\t\t\t\"output %q: value for 'description' must be string\",\n\t\t\t\t\t\to.Name,\n\t\t\t\t\t))\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tinvalidKeys = append(invalidKeys, k)\n\t\t\t}\n\t\t\tif len(invalidKeys) > 0 {\n\t\t\t\tdiags = diags.Append(fmt.Errorf(\n\t\t\t\t\t\"output %q: invalid keys: %s\",\n\t\t\t\t\to.Name, strings.Join(invalidKeys, \", \"),\n\t\t\t\t))\n\t\t\t}\n\t\t\tif !valueKeyFound {\n\t\t\t\tdiags = diags.Append(fmt.Errorf(\n\t\t\t\t\t\"output %q: missing required 'value' argument\", o.Name,\n\t\t\t\t))\n\t\t\t}\n\n\t\t\tfor _, v := range o.RawConfig.Variables {\n\t\t\t\tif _, ok := v.(*CountVariable); ok {\n\t\t\t\t\tdiags = diags.Append(fmt.Errorf(\n\t\t\t\t\t\t\"output %q: count variables are only valid within resources\",\n\t\t\t\t\t\to.Name,\n\t\t\t\t\t))\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Detect a common mistake of using a \"count\"ed resource in\n\t\t\t// an output value without using the splat or index form.\n\t\t\t// Prior to 0.11 this error was silently ignored, but outputs\n\t\t\t// now have their errors checked like all other contexts.\n\t\t\t//\n\t\t\t// TODO: Remove this in 0.12.\n\t\t\tfor _, v := range o.RawConfig.Variables {\n\t\t\t\trv, ok := v.(*ResourceVariable)\n\t\t\t\tif !ok {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\t// If the variable seems to be treating the referenced\n\t\t\t\t// resource as a singleton (no count specified) then\n\t\t\t\t// we'll check to make sure it is indeed a singleton.\n\t\t\t\t// It's a warning if not.\n\n\t\t\t\tif rv.Multi || rv.Index != 0 {\n\t\t\t\t\t// This reference is treating the resource as a\n\t\t\t\t\t// multi-resource, so the warning doesn't apply.\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tfor _, r := range c.Resources {\n\t\t\t\t\tif r.Id() != rv.ResourceId() {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\n\t\t\t\t\t// We test specifically for the raw string \"1\" here\n\t\t\t\t\t// because we _do_ want to generate this warning if\n\t\t\t\t\t// the user has provided an expression that happens\n\t\t\t\t\t// to return 1 right now, to catch situations where\n\t\t\t\t\t// a count might dynamically be set to something\n\t\t\t\t\t// other than 1 and thus splat syntax is still needed\n\t\t\t\t\t// to be safe.\n\t\t\t\t\tif r.RawCount != nil && r.RawCount.Raw != nil && r.RawCount.Raw[\"count\"] != \"1\" && rv.Field != \"count\" {\n\t\t\t\t\t\tdiags = diags.Append(tfdiags.SimpleWarning(fmt.Sprintf(\n\t\t\t\t\t\t\t\"output %q: must use splat syntax to access %s attribute %q, because it has \\\"count\\\" set; use %s.*.%s to obtain a list of the attributes across all instances\",\n\t\t\t\t\t\t\to.Name,\n\t\t\t\t\t\t\tr.Id(), rv.Field,\n\t\t\t\t\t\t\tr.Id(), rv.Field,\n\t\t\t\t\t\t)))\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Validate the self variable\n\tfor source, rc := range c.rawConfigs() {\n\t\t// Ignore provisioners. This is a pretty brittle way to do this,\n\t\t// but better than also repeating all the resources.\n\t\tif strings.Contains(source, \"provision\") {\n\t\t\tcontinue\n\t\t}\n\n\t\tfor _, v := range rc.Variables {\n\t\t\tif _, ok := v.(*SelfVariable); ok {\n\t\t\t\tdiags = diags.Append(fmt.Errorf(\n\t\t\t\t\t\"%s: cannot contain self-reference %s\",\n\t\t\t\t\tsource, v.FullKey(),\n\t\t\t\t))\n\t\t\t}\n\t\t}\n\t}\n\n\treturn diags\n}\n\n// InterpolatedVariables is a helper that returns a mapping of all the interpolated\n// variables within the configuration. This is used to verify references\n// are valid in the Validate step.\nfunc (c *Config) InterpolatedVariables() map[string][]InterpolatedVariable {\n\tresult := make(map[string][]InterpolatedVariable)\n\tfor source, rc := range c.rawConfigs() {\n\t\tfor _, v := range rc.Variables {\n\t\t\tresult[source] = append(result[source], v)\n\t\t}\n\t}\n\treturn result\n}\n\n// rawConfigs returns all of the RawConfigs that are available keyed by\n// a human-friendly source.\nfunc (c *Config) rawConfigs() map[string]*RawConfig {\n\tresult := make(map[string]*RawConfig)\n\tfor _, m := range c.Modules {\n\t\tsource := fmt.Sprintf(\"module '%s'\", m.Name)\n\t\tresult[source] = m.RawConfig\n\t}\n\n\tfor _, pc := range c.ProviderConfigs {\n\t\tsource := fmt.Sprintf(\"provider config '%s'\", pc.Name)\n\t\tresult[source] = pc.RawConfig\n\t}\n\n\tfor _, rc := range c.Resources {\n\t\tsource := fmt.Sprintf(\"resource '%s'\", rc.Id())\n\t\tresult[source+\" count\"] = rc.RawCount\n\t\tresult[source+\" config\"] = rc.RawConfig\n\n\t\tfor i, p := range rc.Provisioners {\n\t\t\tsubsource := fmt.Sprintf(\n\t\t\t\t\"%s provisioner %s (#%d)\",\n\t\t\t\tsource, p.Type, i+1)\n\t\t\tresult[subsource] = p.RawConfig\n\t\t}\n\t}\n\n\tfor _, o := range c.Outputs {\n\t\tsource := fmt.Sprintf(\"output '%s'\", o.Name)\n\t\tresult[source] = o.RawConfig\n\t}\n\n\treturn result\n}\n\nfunc (c *Config) validateDependsOn(\n\tn string,\n\tv []string,\n\tresources map[string]*Resource,\n\tmodules map[string]*Module) []error {\n\t// Verify depends on points to resources that all exist\n\tvar errs []error\n\tfor _, d := range v {\n\t\t// Check if we contain interpolations\n\t\trc, err := NewRawConfig(map[string]interface{}{\n\t\t\t\"value\": d,\n\t\t})\n\t\tif err == nil && len(rc.Variables) > 0 {\n\t\t\terrs = append(errs, fmt.Errorf(\n\t\t\t\t\"%s: depends on value cannot contain interpolations: %s\",\n\t\t\t\tn, d))\n\t\t\tcontinue\n\t\t}\n\n\t\t// If it is a module, verify it is a module\n\t\tif strings.HasPrefix(d, \"module.\") {\n\t\t\tname := d[len(\"module.\"):]\n\t\t\tif _, ok := modules[name]; !ok {\n\t\t\t\terrs = append(errs, fmt.Errorf(\n\t\t\t\t\t\"%s: resource depends on non-existent module '%s'\",\n\t\t\t\t\tn, name))\n\t\t\t}\n\n\t\t\tcontinue\n\t\t}\n\n\t\t// Check resources\n\t\tif _, ok := resources[d]; !ok {\n\t\t\terrs = append(errs, fmt.Errorf(\n\t\t\t\t\"%s: resource depends on non-existent resource '%s'\",\n\t\t\t\tn, d))\n\t\t}\n\t}\n\n\treturn errs\n}\n\nfunc (m *Module) mergerName() string {\n\treturn m.Id()\n}\n\nfunc (m *Module) mergerMerge(other merger) merger {\n\tm2 := other.(*Module)\n\n\tresult := *m\n\tresult.Name = m2.Name\n\tresult.RawConfig = result.RawConfig.merge(m2.RawConfig)\n\n\tif m2.Source != \"\" {\n\t\tresult.Source = m2.Source\n\t}\n\n\treturn &result\n}\n\nfunc (o *Output) mergerName() string {\n\treturn o.Name\n}\n\nfunc (o *Output) mergerMerge(m merger) merger {\n\to2 := m.(*Output)\n\n\tresult := *o\n\tresult.Name = o2.Name\n\tresult.Description = o2.Description\n\tresult.RawConfig = result.RawConfig.merge(o2.RawConfig)\n\tresult.Sensitive = o2.Sensitive\n\tresult.DependsOn = o2.DependsOn\n\n\treturn &result\n}\n\nfunc (c *ProviderConfig) GoString() string {\n\treturn fmt.Sprintf(\"*%#v\", *c)\n}\n\nfunc (c *ProviderConfig) FullName() string {\n\tif c.Alias == \"\" {\n\t\treturn c.Name\n\t}\n\n\treturn fmt.Sprintf(\"%s.%s\", c.Name, c.Alias)\n}\n\nfunc (c *ProviderConfig) mergerName() string {\n\treturn c.Name\n}\n\nfunc (c *ProviderConfig) mergerMerge(m merger) merger {\n\tc2 := m.(*ProviderConfig)\n\n\tresult := *c\n\tresult.Name = c2.Name\n\tresult.RawConfig = result.RawConfig.merge(c2.RawConfig)\n\n\tif c2.Alias != \"\" {\n\t\tresult.Alias = c2.Alias\n\t}\n\n\treturn &result\n}\n\nfunc (r *Resource) mergerName() string {\n\treturn r.Id()\n}\n\nfunc (r *Resource) mergerMerge(m merger) merger {\n\tr2 := m.(*Resource)\n\n\tresult := *r\n\tresult.Mode = r2.Mode\n\tresult.Name = r2.Name\n\tresult.Type = r2.Type\n\tresult.RawConfig = result.RawConfig.merge(r2.RawConfig)\n\n\tif r2.RawCount.Value() != \"1\" {\n\t\tresult.RawCount = r2.RawCount\n\t}\n\n\tif len(r2.Provisioners) > 0 {\n\t\tresult.Provisioners = r2.Provisioners\n\t}\n\n\treturn &result\n}\n\n// Merge merges two variables to create a new third variable.\nfunc (v *Variable) Merge(v2 *Variable) *Variable {\n\t// Shallow copy the variable\n\tresult := *v\n\n\t// The names should be the same, but the second name always wins.\n\tresult.Name = v2.Name\n\n\tif v2.DeclaredType != \"\" {\n\t\tresult.DeclaredType = v2.DeclaredType\n\t}\n\tif v2.Default != nil {\n\t\tresult.Default = v2.Default\n\t}\n\tif v2.Description != \"\" {\n\t\tresult.Description = v2.Description\n\t}\n\n\treturn &result\n}\n\nvar typeStringMap = map[string]VariableType{\n\t\"string\": VariableTypeString,\n\t\"map\":    VariableTypeMap,\n\t\"list\":   VariableTypeList,\n}\n\n// Type returns the type of variable this is.\nfunc (v *Variable) Type() VariableType {\n\tif v.DeclaredType != \"\" {\n\t\tdeclaredType, ok := typeStringMap[v.DeclaredType]\n\t\tif !ok {\n\t\t\treturn VariableTypeUnknown\n\t\t}\n\n\t\treturn declaredType\n\t}\n\n\treturn v.inferTypeFromDefault()\n}\n\n// ValidateTypeAndDefault ensures that default variable value is compatible\n// with the declared type (if one exists), and that the type is one which is\n// known to Terraform\nfunc (v *Variable) ValidateTypeAndDefault() error {\n\t// If an explicit type is declared, ensure it is valid\n\tif v.DeclaredType != \"\" {\n\t\tif _, ok := typeStringMap[v.DeclaredType]; !ok {\n\t\t\tvalidTypes := []string{}\n\t\t\tfor k := range typeStringMap {\n\t\t\t\tvalidTypes = append(validTypes, k)\n\t\t\t}\n\t\t\treturn fmt.Errorf(\n\t\t\t\t\"Variable '%s' type must be one of [%s] - '%s' is not a valid type\",\n\t\t\t\tv.Name,\n\t\t\t\tstrings.Join(validTypes, \", \"),\n\t\t\t\tv.DeclaredType,\n\t\t\t)\n\t\t}\n\t}\n\n\tif v.DeclaredType == \"\" || v.Default == nil {\n\t\treturn nil\n\t}\n\n\tif v.inferTypeFromDefault() != v.Type() {\n\t\treturn fmt.Errorf(\"'%s' has a default value which is not of type '%s' (got '%s')\",\n\t\t\tv.Name, v.DeclaredType, v.inferTypeFromDefault().Printable())\n\t}\n\n\treturn nil\n}\n\nfunc (v *Variable) mergerName() string {\n\treturn v.Name\n}\n\nfunc (v *Variable) mergerMerge(m merger) merger {\n\treturn v.Merge(m.(*Variable))\n}\n\n// Required tests whether a variable is required or not.\nfunc (v *Variable) Required() bool {\n\treturn v.Default == nil\n}\n\n// inferTypeFromDefault contains the logic for the old method of inferring\n// variable types - we can also use this for validating that the declared\n// type matches the type of the default value\nfunc (v *Variable) inferTypeFromDefault() VariableType {\n\tif v.Default == nil {\n\t\treturn VariableTypeString\n\t}\n\n\tvar s string\n\tif err := hilmapstructure.WeakDecode(v.Default, &s); err == nil {\n\t\tv.Default = s\n\t\treturn VariableTypeString\n\t}\n\n\tvar m map[string]interface{}\n\tif err := hilmapstructure.WeakDecode(v.Default, &m); err == nil {\n\t\tv.Default = m\n\t\treturn VariableTypeMap\n\t}\n\n\tvar l []interface{}\n\tif err := hilmapstructure.WeakDecode(v.Default, &l); err == nil {\n\t\tv.Default = l\n\t\treturn VariableTypeList\n\t}\n\n\treturn VariableTypeUnknown\n}\n\nfunc (m ResourceMode) Taintable() bool {\n\tswitch m {\n\tcase ManagedResourceMode:\n\t\treturn true\n\tcase DataResourceMode:\n\t\treturn false\n\tdefault:\n\t\tpanic(fmt.Errorf(\"unsupported ResourceMode value %s\", m))\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/config/config_string.go",
    "content": "package config\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"sort\"\n\t\"strings\"\n)\n\n// TestString is a Stringer-like function that outputs a string that can\n// be used to easily compare multiple Config structures in unit tests.\n//\n// This function has no practical use outside of unit tests and debugging.\nfunc (c *Config) TestString() string {\n\tif c == nil {\n\t\treturn \"<nil config>\"\n\t}\n\n\tvar buf bytes.Buffer\n\tif len(c.Modules) > 0 {\n\t\tbuf.WriteString(\"Modules:\\n\\n\")\n\t\tbuf.WriteString(modulesStr(c.Modules))\n\t\tbuf.WriteString(\"\\n\\n\")\n\t}\n\n\tif len(c.Variables) > 0 {\n\t\tbuf.WriteString(\"Variables:\\n\\n\")\n\t\tbuf.WriteString(variablesStr(c.Variables))\n\t\tbuf.WriteString(\"\\n\\n\")\n\t}\n\n\tif len(c.ProviderConfigs) > 0 {\n\t\tbuf.WriteString(\"Provider Configs:\\n\\n\")\n\t\tbuf.WriteString(providerConfigsStr(c.ProviderConfigs))\n\t\tbuf.WriteString(\"\\n\\n\")\n\t}\n\n\tif len(c.Resources) > 0 {\n\t\tbuf.WriteString(\"Resources:\\n\\n\")\n\t\tbuf.WriteString(resourcesStr(c.Resources))\n\t\tbuf.WriteString(\"\\n\\n\")\n\t}\n\n\tif len(c.Outputs) > 0 {\n\t\tbuf.WriteString(\"Outputs:\\n\\n\")\n\t\tbuf.WriteString(outputsStr(c.Outputs))\n\t\tbuf.WriteString(\"\\n\")\n\t}\n\n\treturn strings.TrimSpace(buf.String())\n}\n\nfunc terraformStr(t *Terraform) string {\n\tresult := \"\"\n\n\tif b := t.Backend; b != nil {\n\t\tresult += fmt.Sprintf(\"backend (%s)\\n\", b.Type)\n\n\t\tkeys := make([]string, 0, len(b.RawConfig.Raw))\n\t\tfor k, _ := range b.RawConfig.Raw {\n\t\t\tkeys = append(keys, k)\n\t\t}\n\t\tsort.Strings(keys)\n\n\t\tfor _, k := range keys {\n\t\t\tresult += fmt.Sprintf(\"  %s\\n\", k)\n\t\t}\n\t}\n\n\treturn strings.TrimSpace(result)\n}\n\nfunc modulesStr(ms []*Module) string {\n\tresult := \"\"\n\torder := make([]int, 0, len(ms))\n\tks := make([]string, 0, len(ms))\n\tmapping := make(map[string]int)\n\tfor i, m := range ms {\n\t\tk := m.Id()\n\t\tks = append(ks, k)\n\t\tmapping[k] = i\n\t}\n\tsort.Strings(ks)\n\tfor _, k := range ks {\n\t\torder = append(order, mapping[k])\n\t}\n\n\tfor _, i := range order {\n\t\tm := ms[i]\n\t\tresult += fmt.Sprintf(\"%s\\n\", m.Id())\n\n\t\tks := make([]string, 0, len(m.RawConfig.Raw))\n\t\tfor k, _ := range m.RawConfig.Raw {\n\t\t\tks = append(ks, k)\n\t\t}\n\t\tsort.Strings(ks)\n\n\t\tresult += fmt.Sprintf(\"  source = %s\\n\", m.Source)\n\n\t\tfor _, k := range ks {\n\t\t\tresult += fmt.Sprintf(\"  %s\\n\", k)\n\t\t}\n\t}\n\n\treturn strings.TrimSpace(result)\n}\n\nfunc outputsStr(os []*Output) string {\n\tns := make([]string, 0, len(os))\n\tm := make(map[string]*Output)\n\tfor _, o := range os {\n\t\tns = append(ns, o.Name)\n\t\tm[o.Name] = o\n\t}\n\tsort.Strings(ns)\n\n\tresult := \"\"\n\tfor _, n := range ns {\n\t\to := m[n]\n\n\t\tresult += fmt.Sprintf(\"%s\\n\", n)\n\n\t\tif len(o.DependsOn) > 0 {\n\t\t\tresult += fmt.Sprintf(\"  dependsOn\\n\")\n\t\t\tfor _, d := range o.DependsOn {\n\t\t\t\tresult += fmt.Sprintf(\"    %s\\n\", d)\n\t\t\t}\n\t\t}\n\n\t\tif len(o.RawConfig.Variables) > 0 {\n\t\t\tresult += fmt.Sprintf(\"  vars\\n\")\n\t\t\tfor _, rawV := range o.RawConfig.Variables {\n\t\t\t\tkind := \"unknown\"\n\t\t\t\tstr := rawV.FullKey()\n\n\t\t\t\tswitch rawV.(type) {\n\t\t\t\tcase *ResourceVariable:\n\t\t\t\t\tkind = \"resource\"\n\t\t\t\tcase *UserVariable:\n\t\t\t\t\tkind = \"user\"\n\t\t\t\t}\n\n\t\t\t\tresult += fmt.Sprintf(\"    %s: %s\\n\", kind, str)\n\t\t\t}\n\t\t}\n\n\t\tif o.Description != \"\" {\n\t\t\tresult += fmt.Sprintf(\"  description\\n    %s\\n\", o.Description)\n\t\t}\n\t}\n\n\treturn strings.TrimSpace(result)\n}\n\nfunc localsStr(ls []*Local) string {\n\tns := make([]string, 0, len(ls))\n\tm := make(map[string]*Local)\n\tfor _, l := range ls {\n\t\tns = append(ns, l.Name)\n\t\tm[l.Name] = l\n\t}\n\tsort.Strings(ns)\n\n\tresult := \"\"\n\tfor _, n := range ns {\n\t\tl := m[n]\n\n\t\tresult += fmt.Sprintf(\"%s\\n\", n)\n\n\t\tif len(l.RawConfig.Variables) > 0 {\n\t\t\tresult += fmt.Sprintf(\"  vars\\n\")\n\t\t\tfor _, rawV := range l.RawConfig.Variables {\n\t\t\t\tkind := \"unknown\"\n\t\t\t\tstr := rawV.FullKey()\n\n\t\t\t\tswitch rawV.(type) {\n\t\t\t\tcase *ResourceVariable:\n\t\t\t\t\tkind = \"resource\"\n\t\t\t\tcase *UserVariable:\n\t\t\t\t\tkind = \"user\"\n\t\t\t\t}\n\n\t\t\t\tresult += fmt.Sprintf(\"    %s: %s\\n\", kind, str)\n\t\t\t}\n\t\t}\n\t}\n\n\treturn strings.TrimSpace(result)\n}\n\n// This helper turns a provider configs field into a deterministic\n// string value for comparison in tests.\nfunc providerConfigsStr(pcs []*ProviderConfig) string {\n\tresult := \"\"\n\n\tns := make([]string, 0, len(pcs))\n\tm := make(map[string]*ProviderConfig)\n\tfor _, n := range pcs {\n\t\tns = append(ns, n.Name)\n\t\tm[n.Name] = n\n\t}\n\tsort.Strings(ns)\n\n\tfor _, n := range ns {\n\t\tpc := m[n]\n\n\t\tresult += fmt.Sprintf(\"%s\\n\", n)\n\n\t\tkeys := make([]string, 0, len(pc.RawConfig.Raw))\n\t\tfor k, _ := range pc.RawConfig.Raw {\n\t\t\tkeys = append(keys, k)\n\t\t}\n\t\tsort.Strings(keys)\n\n\t\tfor _, k := range keys {\n\t\t\tresult += fmt.Sprintf(\"  %s\\n\", k)\n\t\t}\n\n\t\tif len(pc.RawConfig.Variables) > 0 {\n\t\t\tresult += fmt.Sprintf(\"  vars\\n\")\n\t\t\tfor _, rawV := range pc.RawConfig.Variables {\n\t\t\t\tkind := \"unknown\"\n\t\t\t\tstr := rawV.FullKey()\n\n\t\t\t\tswitch rawV.(type) {\n\t\t\t\tcase *ResourceVariable:\n\t\t\t\t\tkind = \"resource\"\n\t\t\t\tcase *UserVariable:\n\t\t\t\t\tkind = \"user\"\n\t\t\t\t}\n\n\t\t\t\tresult += fmt.Sprintf(\"    %s: %s\\n\", kind, str)\n\t\t\t}\n\t\t}\n\t}\n\n\treturn strings.TrimSpace(result)\n}\n\n// This helper turns a resources field into a deterministic\n// string value for comparison in tests.\nfunc resourcesStr(rs []*Resource) string {\n\tresult := \"\"\n\torder := make([]int, 0, len(rs))\n\tks := make([]string, 0, len(rs))\n\tmapping := make(map[string]int)\n\tfor i, r := range rs {\n\t\tk := r.Id()\n\t\tks = append(ks, k)\n\t\tmapping[k] = i\n\t}\n\tsort.Strings(ks)\n\tfor _, k := range ks {\n\t\torder = append(order, mapping[k])\n\t}\n\n\tfor _, i := range order {\n\t\tr := rs[i]\n\t\tresult += fmt.Sprintf(\n\t\t\t\"%s (x%s)\\n\",\n\t\t\tr.Id(),\n\t\t\tr.RawCount.Value())\n\n\t\tks := make([]string, 0, len(r.RawConfig.Raw))\n\t\tfor k, _ := range r.RawConfig.Raw {\n\t\t\tks = append(ks, k)\n\t\t}\n\t\tsort.Strings(ks)\n\n\t\tfor _, k := range ks {\n\t\t\tresult += fmt.Sprintf(\"  %s\\n\", k)\n\t\t}\n\n\t\tif len(r.Provisioners) > 0 {\n\t\t\tresult += fmt.Sprintf(\"  provisioners\\n\")\n\t\t\tfor _, p := range r.Provisioners {\n\t\t\t\twhen := \"\"\n\t\t\t\tif p.When != ProvisionerWhenCreate {\n\t\t\t\t\twhen = fmt.Sprintf(\" (%s)\", p.When.String())\n\t\t\t\t}\n\n\t\t\t\tresult += fmt.Sprintf(\"    %s%s\\n\", p.Type, when)\n\n\t\t\t\tif p.OnFailure != ProvisionerOnFailureFail {\n\t\t\t\t\tresult += fmt.Sprintf(\"      on_failure = %s\\n\", p.OnFailure.String())\n\t\t\t\t}\n\n\t\t\t\tks := make([]string, 0, len(p.RawConfig.Raw))\n\t\t\t\tfor k, _ := range p.RawConfig.Raw {\n\t\t\t\t\tks = append(ks, k)\n\t\t\t\t}\n\t\t\t\tsort.Strings(ks)\n\n\t\t\t\tfor _, k := range ks {\n\t\t\t\t\tresult += fmt.Sprintf(\"      %s\\n\", k)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif len(r.DependsOn) > 0 {\n\t\t\tresult += fmt.Sprintf(\"  dependsOn\\n\")\n\t\t\tfor _, d := range r.DependsOn {\n\t\t\t\tresult += fmt.Sprintf(\"    %s\\n\", d)\n\t\t\t}\n\t\t}\n\n\t\tif len(r.RawConfig.Variables) > 0 {\n\t\t\tresult += fmt.Sprintf(\"  vars\\n\")\n\n\t\t\tks := make([]string, 0, len(r.RawConfig.Variables))\n\t\t\tfor k, _ := range r.RawConfig.Variables {\n\t\t\t\tks = append(ks, k)\n\t\t\t}\n\t\t\tsort.Strings(ks)\n\n\t\t\tfor _, k := range ks {\n\t\t\t\trawV := r.RawConfig.Variables[k]\n\t\t\t\tkind := \"unknown\"\n\t\t\t\tstr := rawV.FullKey()\n\n\t\t\t\tswitch rawV.(type) {\n\t\t\t\tcase *ResourceVariable:\n\t\t\t\t\tkind = \"resource\"\n\t\t\t\tcase *UserVariable:\n\t\t\t\t\tkind = \"user\"\n\t\t\t\t}\n\n\t\t\t\tresult += fmt.Sprintf(\"    %s: %s\\n\", kind, str)\n\t\t\t}\n\t\t}\n\t}\n\n\treturn strings.TrimSpace(result)\n}\n\n// This helper turns a variables field into a deterministic\n// string value for comparison in tests.\nfunc variablesStr(vs []*Variable) string {\n\tresult := \"\"\n\tks := make([]string, 0, len(vs))\n\tm := make(map[string]*Variable)\n\tfor _, v := range vs {\n\t\tks = append(ks, v.Name)\n\t\tm[v.Name] = v\n\t}\n\tsort.Strings(ks)\n\n\tfor _, k := range ks {\n\t\tv := m[k]\n\n\t\trequired := \"\"\n\t\tif v.Required() {\n\t\t\trequired = \" (required)\"\n\t\t}\n\n\t\tdeclaredType := \"\"\n\t\tif v.DeclaredType != \"\" {\n\t\t\tdeclaredType = fmt.Sprintf(\" (%s)\", v.DeclaredType)\n\t\t}\n\n\t\tif v.Default == nil || v.Default == \"\" {\n\t\t\tv.Default = \"<>\"\n\t\t}\n\t\tif v.Description == \"\" {\n\t\t\tv.Description = \"<>\"\n\t\t}\n\n\t\tresult += fmt.Sprintf(\n\t\t\t\"%s%s%s\\n  %v\\n  %s\\n\",\n\t\t\tk,\n\t\t\trequired,\n\t\t\tdeclaredType,\n\t\t\tv.Default,\n\t\t\tv.Description)\n\t}\n\n\treturn strings.TrimSpace(result)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/config/config_terraform.go",
    "content": "package config\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n\n\t\"github.com/hashicorp/go-version\"\n\t\"github.com/mitchellh/hashstructure\"\n)\n\n// Terraform is the Terraform meta-configuration that can be present\n// in configuration files for configuring Terraform itself.\ntype Terraform struct {\n\tRequiredVersion string   `hcl:\"required_version\"` // Required Terraform version (constraint)\n\tBackend         *Backend // See Backend struct docs\n}\n\n// Validate performs the validation for just the Terraform configuration.\nfunc (t *Terraform) Validate() []error {\n\tvar errs []error\n\n\tif raw := t.RequiredVersion; raw != \"\" {\n\t\t// Check that the value has no interpolations\n\t\trc, err := NewRawConfig(map[string]interface{}{\n\t\t\t\"root\": raw,\n\t\t})\n\t\tif err != nil {\n\t\t\terrs = append(errs, fmt.Errorf(\n\t\t\t\t\"terraform.required_version: %s\", err))\n\t\t} else if len(rc.Interpolations) > 0 {\n\t\t\terrs = append(errs, fmt.Errorf(\n\t\t\t\t\"terraform.required_version: cannot contain interpolations\"))\n\t\t} else {\n\t\t\t// Check it is valid\n\t\t\t_, err := version.NewConstraint(raw)\n\t\t\tif err != nil {\n\t\t\t\terrs = append(errs, fmt.Errorf(\n\t\t\t\t\t\"terraform.required_version: invalid syntax: %s\", err))\n\t\t\t}\n\t\t}\n\t}\n\n\tif t.Backend != nil {\n\t\terrs = append(errs, t.Backend.Validate()...)\n\t}\n\n\treturn errs\n}\n\n// Merge t with t2.\n// Any conflicting fields are overwritten by t2.\nfunc (t *Terraform) Merge(t2 *Terraform) {\n\tif t2.RequiredVersion != \"\" {\n\t\tt.RequiredVersion = t2.RequiredVersion\n\t}\n\n\tif t2.Backend != nil {\n\t\tt.Backend = t2.Backend\n\t}\n}\n\n// Backend is the configuration for the \"backend\" to use with Terraform.\n// A backend is responsible for all major behavior of Terraform's core.\n// The abstraction layer above the core (the \"backend\") allows for behavior\n// such as remote operation.\ntype Backend struct {\n\tType      string\n\tRawConfig *RawConfig\n\n\t// Hash is a unique hash code representing the original configuration\n\t// of the backend. This won't be recomputed unless Rehash is called.\n\tHash uint64\n}\n\n// Rehash returns a unique content hash for this backend's configuration\n// as a uint64 value.\nfunc (b *Backend) Rehash() uint64 {\n\t// If we have no backend, the value is zero\n\tif b == nil {\n\t\treturn 0\n\t}\n\n\t// Use hashstructure to hash only our type with the config.\n\tcode, err := hashstructure.Hash(map[string]interface{}{\n\t\t\"type\":   b.Type,\n\t\t\"config\": b.RawConfig.Raw,\n\t}, nil)\n\n\t// This should never happen since we have just some basic primitives\n\t// so panic if there is an error.\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\treturn code\n}\n\nfunc (b *Backend) Validate() []error {\n\tif len(b.RawConfig.Interpolations) > 0 {\n\t\treturn []error{fmt.Errorf(strings.TrimSpace(errBackendInterpolations))}\n\t}\n\n\treturn nil\n}\n\nconst errBackendInterpolations = `\nterraform.backend: configuration cannot contain interpolations\n\nThe backend configuration is loaded by Terraform extremely early, before\nthe core of Terraform can be initialized. This is necessary because the backend\ndictates the behavior of that core. The core is what handles interpolation\nprocessing. Because of this, interpolations cannot be used in backend\nconfiguration.\n\nIf you'd like to parameterize backend configuration, we recommend using\npartial configuration with the \"-backend-config\" flag to \"terraform init\".\n`\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/config/config_tree.go",
    "content": "package config\n\n// configTree represents a tree of configurations where the root is the\n// first file and its children are the configurations it has imported.\ntype configTree struct {\n\tPath     string\n\tConfig   *Config\n\tChildren []*configTree\n}\n\n// Flatten flattens the entire tree down to a single merged Config\n// structure.\nfunc (t *configTree) Flatten() (*Config, error) {\n\t// No children is easy: we're already merged!\n\tif len(t.Children) == 0 {\n\t\treturn t.Config, nil\n\t}\n\n\t// Depth-first, merge all the children first.\n\tchildConfigs := make([]*Config, len(t.Children))\n\tfor i, ct := range t.Children {\n\t\tc, err := ct.Flatten()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tchildConfigs[i] = c\n\t}\n\n\t// Merge all the children in order\n\tconfig := childConfigs[0]\n\tchildConfigs = childConfigs[1:]\n\tfor _, config2 := range childConfigs {\n\t\tvar err error\n\t\tconfig, err = Merge(config, config2)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\t// Merge the final merged child config with our own\n\treturn Merge(config, t.Config)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/config/hcl2_shim_util.go",
    "content": "package config\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/zclconf/go-cty/cty/function/stdlib\"\n\n\t\"github.com/hashicorp/hil/ast\"\n\t\"github.com/hashicorp/terraform/config/hcl2shim\"\n\n\thcl2 \"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/zclconf/go-cty/cty\"\n\t\"github.com/zclconf/go-cty/cty/convert\"\n\t\"github.com/zclconf/go-cty/cty/function\"\n)\n\n// ---------------------------------------------------------------------------\n// This file contains some helper functions that are used to shim between\n// HCL2 concepts and HCL/HIL concepts, to help us mostly preserve the existing\n// public API that was built around HCL/HIL-oriented approaches.\n// ---------------------------------------------------------------------------\n\nfunc hcl2InterpolationFuncs() map[string]function.Function {\n\thcl2Funcs := map[string]function.Function{}\n\n\tfor name, hilFunc := range Funcs() {\n\t\thcl2Funcs[name] = hcl2InterpolationFuncShim(hilFunc)\n\t}\n\n\t// Some functions in the old world are dealt with inside langEvalConfig\n\t// due to their legacy reliance on direct access to the symbol table.\n\t// Since 0.7 they don't actually need it anymore and just ignore it,\n\t// so we're cheating a bit here and exploiting that detail by passing nil.\n\thcl2Funcs[\"lookup\"] = hcl2InterpolationFuncShim(interpolationFuncLookup(nil))\n\thcl2Funcs[\"keys\"] = hcl2InterpolationFuncShim(interpolationFuncKeys(nil))\n\thcl2Funcs[\"values\"] = hcl2InterpolationFuncShim(interpolationFuncValues(nil))\n\n\t// As a bonus, we'll provide the JSON-handling functions from the cty\n\t// function library since its \"jsonencode\" is more complete (doesn't force\n\t// weird type conversions) and HIL's type system can't represent\n\t// \"jsondecode\" at all. The result of jsondecode will eventually be forced\n\t// to conform to the HIL type system on exit into the rest of Terraform due\n\t// to our shimming right now, but it should be usable for decoding _within_\n\t// an expression.\n\thcl2Funcs[\"jsonencode\"] = stdlib.JSONEncodeFunc\n\thcl2Funcs[\"jsondecode\"] = stdlib.JSONDecodeFunc\n\n\treturn hcl2Funcs\n}\n\nfunc hcl2InterpolationFuncShim(hilFunc ast.Function) function.Function {\n\tspec := &function.Spec{}\n\n\tfor i, hilArgType := range hilFunc.ArgTypes {\n\t\tspec.Params = append(spec.Params, function.Parameter{\n\t\t\tType: hcl2shim.HCL2TypeForHILType(hilArgType),\n\t\t\tName: fmt.Sprintf(\"arg%d\", i+1), // HIL args don't have names, so we'll fudge it\n\t\t})\n\t}\n\n\tif hilFunc.Variadic {\n\t\tspec.VarParam = &function.Parameter{\n\t\t\tType: hcl2shim.HCL2TypeForHILType(hilFunc.VariadicType),\n\t\t\tName: \"varargs\", // HIL args don't have names, so we'll fudge it\n\t\t}\n\t}\n\n\tspec.Type = func(args []cty.Value) (cty.Type, error) {\n\t\treturn hcl2shim.HCL2TypeForHILType(hilFunc.ReturnType), nil\n\t}\n\tspec.Impl = func(args []cty.Value, retType cty.Type) (cty.Value, error) {\n\t\thilArgs := make([]interface{}, len(args))\n\t\tfor i, arg := range args {\n\t\t\thilV := hcl2shim.HILVariableFromHCL2Value(arg)\n\n\t\t\t// Although the cty function system does automatic type conversions\n\t\t\t// to match the argument types, cty doesn't distinguish int and\n\t\t\t// float and so we may need to adjust here to ensure that the\n\t\t\t// wrapped function gets exactly the Go type it was expecting.\n\t\t\tvar wantType ast.Type\n\t\t\tif i < len(hilFunc.ArgTypes) {\n\t\t\t\twantType = hilFunc.ArgTypes[i]\n\t\t\t} else {\n\t\t\t\twantType = hilFunc.VariadicType\n\t\t\t}\n\t\t\tswitch {\n\t\t\tcase hilV.Type == ast.TypeInt && wantType == ast.TypeFloat:\n\t\t\t\thilV.Type = wantType\n\t\t\t\thilV.Value = float64(hilV.Value.(int))\n\t\t\tcase hilV.Type == ast.TypeFloat && wantType == ast.TypeInt:\n\t\t\t\thilV.Type = wantType\n\t\t\t\thilV.Value = int(hilV.Value.(float64))\n\t\t\t}\n\n\t\t\t// HIL functions actually expect to have the outermost variable\n\t\t\t// \"peeled\" but any nested values (in lists or maps) will\n\t\t\t// still have their ast.Variable wrapping.\n\t\t\thilArgs[i] = hilV.Value\n\t\t}\n\n\t\thilResult, err := hilFunc.Callback(hilArgs)\n\t\tif err != nil {\n\t\t\treturn cty.DynamicVal, err\n\t\t}\n\n\t\t// Just as on the way in, we get back a partially-peeled ast.Variable\n\t\t// which we need to re-wrap in order to convert it back into what\n\t\t// we're calling a \"config value\".\n\t\trv := hcl2shim.HCL2ValueFromHILVariable(ast.Variable{\n\t\t\tType:  hilFunc.ReturnType,\n\t\t\tValue: hilResult,\n\t\t})\n\n\t\treturn convert.Convert(rv, retType) // if result is unknown we'll force the correct type here\n\t}\n\treturn function.New(spec)\n}\n\nfunc hcl2EvalWithUnknownVars(expr hcl2.Expression) (cty.Value, hcl2.Diagnostics) {\n\ttrs := expr.Variables()\n\tvars := map[string]cty.Value{}\n\tval := cty.DynamicVal\n\n\tfor _, tr := range trs {\n\t\tname := tr.RootName()\n\t\tvars[name] = val\n\t}\n\n\tctx := &hcl2.EvalContext{\n\t\tVariables: vars,\n\t\tFunctions: hcl2InterpolationFuncs(),\n\t}\n\treturn expr.Value(ctx)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/config/hcl2shim/flatmap.go",
    "content": "package hcl2shim\n\nimport (\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/zclconf/go-cty/cty/convert\"\n\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// FlatmapValueFromHCL2 converts a value from HCL2 (really, from the cty dynamic\n// types library that HCL2 uses) to a map compatible with what would be\n// produced by the \"flatmap\" package.\n//\n// The type of the given value informs the structure of the resulting map.\n// The value must be of an object type or this function will panic.\n//\n// Flatmap values can only represent maps when they are of primitive types,\n// so the given value must not have any maps of complex types or the result\n// is undefined.\nfunc FlatmapValueFromHCL2(v cty.Value) map[string]string {\n\tif v.IsNull() {\n\t\treturn nil\n\t}\n\n\tif !v.Type().IsObjectType() {\n\t\tpanic(fmt.Sprintf(\"HCL2ValueFromFlatmap called on %#v\", v.Type()))\n\t}\n\n\tm := make(map[string]string)\n\tflatmapValueFromHCL2Map(m, \"\", v)\n\treturn m\n}\n\nfunc flatmapValueFromHCL2Value(m map[string]string, key string, val cty.Value) {\n\tty := val.Type()\n\tswitch {\n\tcase ty.IsPrimitiveType() || ty == cty.DynamicPseudoType:\n\t\tflatmapValueFromHCL2Primitive(m, key, val)\n\tcase ty.IsObjectType() || ty.IsMapType():\n\t\tflatmapValueFromHCL2Map(m, key+\".\", val)\n\tcase ty.IsTupleType() || ty.IsListType() || ty.IsSetType():\n\t\tflatmapValueFromHCL2Seq(m, key+\".\", val)\n\tdefault:\n\t\tpanic(fmt.Sprintf(\"cannot encode %s to flatmap\", ty.FriendlyName()))\n\t}\n}\n\nfunc flatmapValueFromHCL2Primitive(m map[string]string, key string, val cty.Value) {\n\tif !val.IsKnown() {\n\t\tm[key] = UnknownVariableValue\n\t\treturn\n\t}\n\tif val.IsNull() {\n\t\t// Omit entirely\n\t\treturn\n\t}\n\n\tvar err error\n\tval, err = convert.Convert(val, cty.String)\n\tif err != nil {\n\t\t// Should not be possible, since all primitive types can convert to string.\n\t\tpanic(fmt.Sprintf(\"invalid primitive encoding to flatmap: %s\", err))\n\t}\n\tm[key] = val.AsString()\n}\n\nfunc flatmapValueFromHCL2Map(m map[string]string, prefix string, val cty.Value) {\n\tif val.IsNull() {\n\t\t// Omit entirely\n\t\treturn\n\t}\n\tif !val.IsKnown() {\n\t\tswitch {\n\t\tcase val.Type().IsObjectType():\n\t\t\t// Whole objects can't be unknown in flatmap, so instead we'll\n\t\t\t// just write all of the attribute values out as unknown.\n\t\t\tfor name, aty := range val.Type().AttributeTypes() {\n\t\t\t\tflatmapValueFromHCL2Value(m, prefix+name, cty.UnknownVal(aty))\n\t\t\t}\n\t\tdefault:\n\t\t\tm[prefix+\"%\"] = UnknownVariableValue\n\t\t}\n\t\treturn\n\t}\n\n\tlen := 0\n\tfor it := val.ElementIterator(); it.Next(); {\n\t\tak, av := it.Element()\n\t\tname := ak.AsString()\n\t\tflatmapValueFromHCL2Value(m, prefix+name, av)\n\t\tlen++\n\t}\n\tif !val.Type().IsObjectType() { // objects don't have an explicit count included, since their attribute count is fixed\n\t\tm[prefix+\"%\"] = strconv.Itoa(len)\n\t}\n}\n\nfunc flatmapValueFromHCL2Seq(m map[string]string, prefix string, val cty.Value) {\n\tif val.IsNull() {\n\t\t// Omit entirely\n\t\treturn\n\t}\n\tif !val.IsKnown() {\n\t\tm[prefix+\"#\"] = UnknownVariableValue\n\t\treturn\n\t}\n\n\t// For sets this won't actually generate exactly what helper/schema would've\n\t// generated, because we don't have access to the set key function it\n\t// would've used. However, in practice it doesn't actually matter what the\n\t// keys are as long as they are unique, so we'll just generate sequential\n\t// indexes for them as if it were a list.\n\t//\n\t// An important implication of this, however, is that the set ordering will\n\t// not be consistent across mutations and so different keys may be assigned\n\t// to the same value when round-tripping. Since this shim is intended to\n\t// be short-lived and not used for round-tripping, we accept this.\n\ti := 0\n\tfor it := val.ElementIterator(); it.Next(); {\n\t\t_, av := it.Element()\n\t\tkey := prefix + strconv.Itoa(i)\n\t\tflatmapValueFromHCL2Value(m, key, av)\n\t\ti++\n\t}\n\tm[prefix+\"#\"] = strconv.Itoa(i)\n}\n\n// HCL2ValueFromFlatmap converts a map compatible with what would be produced\n// by the \"flatmap\" package to a HCL2 (really, the cty dynamic types library\n// that HCL2 uses) object type.\n//\n// The intended result type must be provided in order to guide how the\n// map contents are decoded. This must be an object type or this function\n// will panic.\n//\n// Flatmap values can only represent maps when they are of primitive types,\n// so the given type must not have any maps of complex types or the result\n// is undefined.\n//\n// The result may contain null values if the given map does not contain keys\n// for all of the different key paths implied by the given type.\nfunc HCL2ValueFromFlatmap(m map[string]string, ty cty.Type) (cty.Value, error) {\n\tif m == nil {\n\t\treturn cty.NullVal(ty), nil\n\t}\n\tif !ty.IsObjectType() {\n\t\tpanic(fmt.Sprintf(\"HCL2ValueFromFlatmap called on %#v\", ty))\n\t}\n\n\treturn hcl2ValueFromFlatmapObject(m, \"\", ty.AttributeTypes())\n}\n\nfunc hcl2ValueFromFlatmapValue(m map[string]string, key string, ty cty.Type) (cty.Value, error) {\n\tvar val cty.Value\n\tvar err error\n\tswitch {\n\tcase ty.IsPrimitiveType():\n\t\tval, err = hcl2ValueFromFlatmapPrimitive(m, key, ty)\n\tcase ty.IsObjectType():\n\t\tval, err = hcl2ValueFromFlatmapObject(m, key+\".\", ty.AttributeTypes())\n\tcase ty.IsTupleType():\n\t\tval, err = hcl2ValueFromFlatmapTuple(m, key+\".\", ty.TupleElementTypes())\n\tcase ty.IsMapType():\n\t\tval, err = hcl2ValueFromFlatmapMap(m, key+\".\", ty)\n\tcase ty.IsListType():\n\t\tval, err = hcl2ValueFromFlatmapList(m, key+\".\", ty)\n\tcase ty.IsSetType():\n\t\tval, err = hcl2ValueFromFlatmapSet(m, key+\".\", ty)\n\tdefault:\n\t\terr = fmt.Errorf(\"cannot decode %s from flatmap\", ty.FriendlyName())\n\t}\n\n\tif err != nil {\n\t\treturn cty.DynamicVal, err\n\t}\n\treturn val, nil\n}\n\nfunc hcl2ValueFromFlatmapPrimitive(m map[string]string, key string, ty cty.Type) (cty.Value, error) {\n\trawVal, exists := m[key]\n\tif !exists {\n\t\treturn cty.NullVal(ty), nil\n\t}\n\tif rawVal == UnknownVariableValue {\n\t\treturn cty.UnknownVal(ty), nil\n\t}\n\n\tvar err error\n\tval := cty.StringVal(rawVal)\n\tval, err = convert.Convert(val, ty)\n\tif err != nil {\n\t\t// This should never happen for _valid_ input, but flatmap data might\n\t\t// be tampered with by the user and become invalid.\n\t\treturn cty.DynamicVal, fmt.Errorf(\"invalid value for %q in state: %s\", key, err)\n\t}\n\n\treturn val, nil\n}\n\nfunc hcl2ValueFromFlatmapObject(m map[string]string, prefix string, atys map[string]cty.Type) (cty.Value, error) {\n\tvals := make(map[string]cty.Value)\n\tfor name, aty := range atys {\n\t\tval, err := hcl2ValueFromFlatmapValue(m, prefix+name, aty)\n\t\tif err != nil {\n\t\t\treturn cty.DynamicVal, err\n\t\t}\n\t\tvals[name] = val\n\t}\n\treturn cty.ObjectVal(vals), nil\n}\n\nfunc hcl2ValueFromFlatmapTuple(m map[string]string, prefix string, etys []cty.Type) (cty.Value, error) {\n\tvar vals []cty.Value\n\n\t// if the container is unknown, there is no count string\n\tlistName := strings.TrimRight(prefix, \".\")\n\tif m[listName] == UnknownVariableValue {\n\t\treturn cty.UnknownVal(cty.Tuple(etys)), nil\n\t}\n\n\tcountStr, exists := m[prefix+\"#\"]\n\tif !exists {\n\t\treturn cty.NullVal(cty.Tuple(etys)), nil\n\t}\n\tif countStr == UnknownVariableValue {\n\t\treturn cty.UnknownVal(cty.Tuple(etys)), nil\n\t}\n\n\tcount, err := strconv.Atoi(countStr)\n\tif err != nil {\n\t\treturn cty.DynamicVal, fmt.Errorf(\"invalid count value for %q in state: %s\", prefix, err)\n\t}\n\tif count != len(etys) {\n\t\treturn cty.DynamicVal, fmt.Errorf(\"wrong number of values for %q in state: got %d, but need %d\", prefix, count, len(etys))\n\t}\n\n\tvals = make([]cty.Value, len(etys))\n\tfor i, ety := range etys {\n\t\tkey := prefix + strconv.Itoa(i)\n\t\tval, err := hcl2ValueFromFlatmapValue(m, key, ety)\n\t\tif err != nil {\n\t\t\treturn cty.DynamicVal, err\n\t\t}\n\t\tvals[i] = val\n\t}\n\treturn cty.TupleVal(vals), nil\n}\n\nfunc hcl2ValueFromFlatmapMap(m map[string]string, prefix string, ty cty.Type) (cty.Value, error) {\n\tvals := make(map[string]cty.Value)\n\tety := ty.ElementType()\n\n\t// if the container is unknown, there is no count string\n\tlistName := strings.TrimRight(prefix, \".\")\n\tif m[listName] == UnknownVariableValue {\n\t\treturn cty.UnknownVal(ty), nil\n\t}\n\n\t// We actually don't really care about the \"count\" of a map for our\n\t// purposes here, but we do need to check if it _exists_ in order to\n\t// recognize the difference between null (not set at all) and empty.\n\tif strCount, exists := m[prefix+\"%\"]; !exists {\n\t\treturn cty.NullVal(ty), nil\n\t} else if strCount == UnknownVariableValue {\n\t\treturn cty.UnknownVal(ty), nil\n\t}\n\n\tfor fullKey := range m {\n\t\tif !strings.HasPrefix(fullKey, prefix) {\n\t\t\tcontinue\n\t\t}\n\n\t\t// The flatmap format doesn't allow us to distinguish between keys\n\t\t// that contain periods and nested objects, so by convention a\n\t\t// map is only ever of primitive type in flatmap, and we just assume\n\t\t// that the remainder of the raw key (dots and all) is the key we\n\t\t// want in the result value.\n\t\tkey := fullKey[len(prefix):]\n\t\tif key == \"%\" {\n\t\t\t// Ignore the \"count\" key\n\t\t\tcontinue\n\t\t}\n\n\t\tval, err := hcl2ValueFromFlatmapValue(m, fullKey, ety)\n\t\tif err != nil {\n\t\t\treturn cty.DynamicVal, err\n\t\t}\n\t\tvals[key] = val\n\t}\n\n\tif len(vals) == 0 {\n\t\treturn cty.MapValEmpty(ety), nil\n\t}\n\treturn cty.MapVal(vals), nil\n}\n\nfunc hcl2ValueFromFlatmapList(m map[string]string, prefix string, ty cty.Type) (cty.Value, error) {\n\tvar vals []cty.Value\n\n\t// if the container is unknown, there is no count string\n\tlistName := strings.TrimRight(prefix, \".\")\n\tif m[listName] == UnknownVariableValue {\n\t\treturn cty.UnknownVal(ty), nil\n\t}\n\n\tcountStr, exists := m[prefix+\"#\"]\n\tif !exists {\n\t\treturn cty.NullVal(ty), nil\n\t}\n\tif countStr == UnknownVariableValue {\n\t\treturn cty.UnknownVal(ty), nil\n\t}\n\n\tcount, err := strconv.Atoi(countStr)\n\tif err != nil {\n\t\treturn cty.DynamicVal, fmt.Errorf(\"invalid count value for %q in state: %s\", prefix, err)\n\t}\n\n\tety := ty.ElementType()\n\tif count == 0 {\n\t\treturn cty.ListValEmpty(ety), nil\n\t}\n\n\tvals = make([]cty.Value, count)\n\tfor i := 0; i < count; i++ {\n\t\tkey := prefix + strconv.Itoa(i)\n\t\tval, err := hcl2ValueFromFlatmapValue(m, key, ety)\n\t\tif err != nil {\n\t\t\treturn cty.DynamicVal, err\n\t\t}\n\t\tvals[i] = val\n\t}\n\n\treturn cty.ListVal(vals), nil\n}\n\nfunc hcl2ValueFromFlatmapSet(m map[string]string, prefix string, ty cty.Type) (cty.Value, error) {\n\tvar vals []cty.Value\n\tety := ty.ElementType()\n\n\t// if the container is unknown, there is no count string\n\tlistName := strings.TrimRight(prefix, \".\")\n\tif m[listName] == UnknownVariableValue {\n\t\treturn cty.UnknownVal(ty), nil\n\t}\n\n\tstrCount, exists := m[prefix+\"#\"]\n\tif !exists {\n\t\treturn cty.NullVal(ty), nil\n\t} else if strCount == UnknownVariableValue {\n\t\treturn cty.UnknownVal(ty), nil\n\t}\n\n\t// Keep track of keys we've seen, se we don't add the same set value\n\t// multiple times. The cty.Set will normally de-duplicate values, but we may\n\t// have unknown values that would not show as equivalent.\n\tseen := map[string]bool{}\n\n\tfor fullKey := range m {\n\t\tif !strings.HasPrefix(fullKey, prefix) {\n\t\t\tcontinue\n\t\t}\n\t\tsubKey := fullKey[len(prefix):]\n\t\tif subKey == \"#\" {\n\t\t\t// Ignore the \"count\" key\n\t\t\tcontinue\n\t\t}\n\t\tkey := fullKey\n\t\tif dot := strings.IndexByte(subKey, '.'); dot != -1 {\n\t\t\tkey = fullKey[:dot+len(prefix)]\n\t\t}\n\n\t\tif seen[key] {\n\t\t\tcontinue\n\t\t}\n\n\t\tseen[key] = true\n\n\t\t// The flatmap format doesn't allow us to distinguish between keys\n\t\t// that contain periods and nested objects, so by convention a\n\t\t// map is only ever of primitive type in flatmap, and we just assume\n\t\t// that the remainder of the raw key (dots and all) is the key we\n\t\t// want in the result value.\n\n\t\tval, err := hcl2ValueFromFlatmapValue(m, key, ety)\n\t\tif err != nil {\n\t\t\treturn cty.DynamicVal, err\n\t\t}\n\t\tvals = append(vals, val)\n\t}\n\n\tif len(vals) == 0 && strCount == \"1\" {\n\t\t// An empty set wouldn't be represented in the flatmap, so this must be\n\t\t// a single empty object since the count is actually 1.\n\t\t// Add an appropriately typed null value to the set.\n\t\tvar val cty.Value\n\t\tswitch {\n\t\tcase ety.IsMapType():\n\t\t\tval = cty.MapValEmpty(ety)\n\t\tcase ety.IsListType():\n\t\t\tval = cty.ListValEmpty(ety)\n\t\tcase ety.IsSetType():\n\t\t\tval = cty.SetValEmpty(ety)\n\t\tcase ety.IsObjectType():\n\t\t\t// TODO: cty.ObjectValEmpty\n\t\t\tobjectMap := map[string]cty.Value{}\n\t\t\tfor attr, ty := range ety.AttributeTypes() {\n\t\t\t\tobjectMap[attr] = cty.NullVal(ty)\n\t\t\t}\n\t\t\tval = cty.ObjectVal(objectMap)\n\t\tdefault:\n\t\t\tval = cty.NullVal(ety)\n\t\t}\n\t\tvals = append(vals, val)\n\n\t} else if len(vals) == 0 {\n\t\treturn cty.SetValEmpty(ety), nil\n\t}\n\n\treturn cty.SetVal(vals), nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/config/hcl2shim/paths.go",
    "content": "package hcl2shim\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// RequiresReplace takes a list of flatmapped paths from a\n// InstanceDiff.Attributes along with the corresponding cty.Type, and returns\n// the list of the cty.Paths that are flagged as causing the resource\n// replacement (RequiresNew).\n// This will filter out redundant paths, paths that refer to flatmapped indexes\n// (e.g. \"#\", \"%\"), and will return any changes within a set as the path to the\n// set itself.\nfunc RequiresReplace(attrs []string, ty cty.Type) ([]cty.Path, error) {\n\tvar paths []cty.Path\n\n\tfor _, attr := range attrs {\n\t\tp, err := requiresReplacePath(attr, ty)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tpaths = append(paths, p)\n\t}\n\n\t// now trim off any trailing paths that aren't GetAttrSteps, since only an\n\t// attribute itself can require replacement\n\tpaths = trimPaths(paths)\n\n\t// There may be redundant paths due to set elements or index attributes\n\t// Do some ugly n^2 filtering, but these are always fairly small sets.\n\tfor i := 0; i < len(paths)-1; i++ {\n\t\tfor j := i + 1; j < len(paths); j++ {\n\t\t\tif reflect.DeepEqual(paths[i], paths[j]) {\n\t\t\t\t// swap the tail and slice it off\n\t\t\t\tpaths[j], paths[len(paths)-1] = paths[len(paths)-1], paths[j]\n\t\t\t\tpaths = paths[:len(paths)-1]\n\t\t\t\tj--\n\t\t\t}\n\t\t}\n\t}\n\n\treturn paths, nil\n}\n\n// trimPaths removes any trailing steps that aren't of type GetAttrSet, since\n// only an attribute itself can require replacement\nfunc trimPaths(paths []cty.Path) []cty.Path {\n\tvar trimmed []cty.Path\n\tfor _, path := range paths {\n\t\tpath = trimPath(path)\n\t\tif len(path) > 0 {\n\t\t\ttrimmed = append(trimmed, path)\n\t\t}\n\t}\n\treturn trimmed\n}\n\nfunc trimPath(path cty.Path) cty.Path {\n\tfor len(path) > 0 {\n\t\t_, isGetAttr := path[len(path)-1].(cty.GetAttrStep)\n\t\tif isGetAttr {\n\t\t\tbreak\n\t\t}\n\t\tpath = path[:len(path)-1]\n\t}\n\treturn path\n}\n\n// requiresReplacePath takes a key from a flatmap along with the cty.Type\n// describing the structure, and returns the cty.Path that would be used to\n// reference the nested value in the data structure.\n// This is used specifically to record the RequiresReplace attributes from a\n// ResourceInstanceDiff.\nfunc requiresReplacePath(k string, ty cty.Type) (cty.Path, error) {\n\tif k == \"\" {\n\t\treturn nil, nil\n\t}\n\tif !ty.IsObjectType() {\n\t\tpanic(fmt.Sprintf(\"requires replace path on non-object type: %#v\", ty))\n\t}\n\n\tpath, err := pathFromFlatmapKeyObject(k, ty.AttributeTypes())\n\tif err != nil {\n\t\treturn path, fmt.Errorf(\"[%s] %s\", k, err)\n\t}\n\treturn path, nil\n}\n\nfunc pathSplit(p string) (string, string) {\n\tparts := strings.SplitN(p, \".\", 2)\n\thead := parts[0]\n\trest := \"\"\n\tif len(parts) > 1 {\n\t\trest = parts[1]\n\t}\n\treturn head, rest\n}\n\nfunc pathFromFlatmapKeyObject(key string, atys map[string]cty.Type) (cty.Path, error) {\n\tk, rest := pathSplit(key)\n\n\tpath := cty.Path{cty.GetAttrStep{Name: k}}\n\n\tty, ok := atys[k]\n\tif !ok {\n\t\treturn path, fmt.Errorf(\"attribute %q not found\", k)\n\t}\n\n\tif rest == \"\" {\n\t\treturn path, nil\n\t}\n\n\tp, err := pathFromFlatmapKeyValue(rest, ty)\n\tif err != nil {\n\t\treturn path, err\n\t}\n\n\treturn append(path, p...), nil\n}\n\nfunc pathFromFlatmapKeyValue(key string, ty cty.Type) (cty.Path, error) {\n\tvar path cty.Path\n\tvar err error\n\n\tswitch {\n\tcase ty.IsPrimitiveType():\n\t\terr = fmt.Errorf(\"invalid step %q with type %#v\", key, ty)\n\tcase ty.IsObjectType():\n\t\tpath, err = pathFromFlatmapKeyObject(key, ty.AttributeTypes())\n\tcase ty.IsTupleType():\n\t\tpath, err = pathFromFlatmapKeyTuple(key, ty.TupleElementTypes())\n\tcase ty.IsMapType():\n\t\tpath, err = pathFromFlatmapKeyMap(key, ty)\n\tcase ty.IsListType():\n\t\tpath, err = pathFromFlatmapKeyList(key, ty)\n\tcase ty.IsSetType():\n\t\tpath, err = pathFromFlatmapKeySet(key, ty)\n\tdefault:\n\t\terr = fmt.Errorf(\"unrecognized type: %s\", ty.FriendlyName())\n\t}\n\n\tif err != nil {\n\t\treturn path, err\n\t}\n\n\treturn path, nil\n}\n\nfunc pathFromFlatmapKeyTuple(key string, etys []cty.Type) (cty.Path, error) {\n\tvar path cty.Path\n\tvar err error\n\n\tk, rest := pathSplit(key)\n\n\t// we don't need to convert the index keys to paths\n\tif k == \"#\" {\n\t\treturn path, nil\n\t}\n\n\tidx, err := strconv.Atoi(k)\n\tif err != nil {\n\t\treturn path, err\n\t}\n\n\tpath = cty.Path{cty.IndexStep{Key: cty.NumberIntVal(int64(idx))}}\n\n\tif idx >= len(etys) {\n\t\treturn path, fmt.Errorf(\"index %s out of range in %#v\", key, etys)\n\t}\n\n\tif rest == \"\" {\n\t\treturn path, nil\n\t}\n\n\tty := etys[idx]\n\n\tp, err := pathFromFlatmapKeyValue(rest, ty.ElementType())\n\tif err != nil {\n\t\treturn path, err\n\t}\n\n\treturn append(path, p...), nil\n}\n\nfunc pathFromFlatmapKeyMap(key string, ty cty.Type) (cty.Path, error) {\n\tvar path cty.Path\n\tvar err error\n\n\tk, rest := key, \"\"\n\tif !ty.ElementType().IsPrimitiveType() {\n\t\tk, rest = pathSplit(key)\n\t}\n\n\t// we don't need to convert the index keys to paths\n\tif k == \"%\" {\n\t\treturn path, nil\n\t}\n\n\tpath = cty.Path{cty.IndexStep{Key: cty.StringVal(k)}}\n\n\tif rest == \"\" {\n\t\treturn path, nil\n\t}\n\n\tp, err := pathFromFlatmapKeyValue(rest, ty.ElementType())\n\tif err != nil {\n\t\treturn path, err\n\t}\n\n\treturn append(path, p...), nil\n}\n\nfunc pathFromFlatmapKeyList(key string, ty cty.Type) (cty.Path, error) {\n\tvar path cty.Path\n\tvar err error\n\n\tk, rest := pathSplit(key)\n\n\t// we don't need to convert the index keys to paths\n\tif key == \"#\" {\n\t\treturn path, nil\n\t}\n\n\tidx, err := strconv.Atoi(k)\n\tif err != nil {\n\t\treturn path, err\n\t}\n\n\tpath = cty.Path{cty.IndexStep{Key: cty.NumberIntVal(int64(idx))}}\n\n\tif rest == \"\" {\n\t\treturn path, nil\n\t}\n\n\tp, err := pathFromFlatmapKeyValue(rest, ty.ElementType())\n\tif err != nil {\n\t\treturn path, err\n\t}\n\n\treturn append(path, p...), nil\n}\n\nfunc pathFromFlatmapKeySet(key string, ty cty.Type) (cty.Path, error) {\n\t// once we hit a set, we can't return consistent paths, so just mark the\n\t// set as a whole changed.\n\treturn nil, nil\n}\n\n// FlatmapKeyFromPath returns the flatmap equivalent of the given cty.Path for\n// use in generating legacy style diffs.\nfunc FlatmapKeyFromPath(path cty.Path) string {\n\tvar parts []string\n\n\tfor _, step := range path {\n\t\tswitch step := step.(type) {\n\t\tcase cty.GetAttrStep:\n\t\t\tparts = append(parts, step.Name)\n\t\tcase cty.IndexStep:\n\t\t\tswitch ty := step.Key.Type(); {\n\t\t\tcase ty == cty.String:\n\t\t\t\tparts = append(parts, step.Key.AsString())\n\t\t\tcase ty == cty.Number:\n\t\t\t\ti, _ := step.Key.AsBigFloat().Int64()\n\t\t\t\tparts = append(parts, strconv.Itoa(int(i)))\n\t\t\t}\n\t\t}\n\t}\n\n\treturn strings.Join(parts, \".\")\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/config/hcl2shim/single_attr_body.go",
    "content": "package hcl2shim\n\nimport (\n\t\"fmt\"\n\n\thcl2 \"github.com/hashicorp/hcl2/hcl\"\n)\n\n// SingleAttrBody is a weird implementation of hcl2.Body that acts as if\n// it has a single attribute whose value is the given expression.\n//\n// This is used to shim Resource.RawCount and Output.RawConfig to behave\n// more like they do in the old HCL loader.\ntype SingleAttrBody struct {\n\tName string\n\tExpr hcl2.Expression\n}\n\nvar _ hcl2.Body = SingleAttrBody{}\n\nfunc (b SingleAttrBody) Content(schema *hcl2.BodySchema) (*hcl2.BodyContent, hcl2.Diagnostics) {\n\tcontent, all, diags := b.content(schema)\n\tif !all {\n\t\t// This should never happen because this body implementation should only\n\t\t// be used by code that is aware that it's using a single-attr body.\n\t\tdiags = append(diags, &hcl2.Diagnostic{\n\t\t\tSeverity: hcl2.DiagError,\n\t\t\tSummary:  \"Invalid attribute\",\n\t\t\tDetail:   fmt.Sprintf(\"The correct attribute name is %q.\", b.Name),\n\t\t\tSubject:  b.Expr.Range().Ptr(),\n\t\t})\n\t}\n\treturn content, diags\n}\n\nfunc (b SingleAttrBody) PartialContent(schema *hcl2.BodySchema) (*hcl2.BodyContent, hcl2.Body, hcl2.Diagnostics) {\n\tcontent, all, diags := b.content(schema)\n\tvar remain hcl2.Body\n\tif all {\n\t\t// If the request matched the one attribute we represent, then the\n\t\t// remaining body is empty.\n\t\tremain = hcl2.EmptyBody()\n\t} else {\n\t\tremain = b\n\t}\n\treturn content, remain, diags\n}\n\nfunc (b SingleAttrBody) content(schema *hcl2.BodySchema) (*hcl2.BodyContent, bool, hcl2.Diagnostics) {\n\tret := &hcl2.BodyContent{}\n\tall := false\n\tvar diags hcl2.Diagnostics\n\n\tfor _, attrS := range schema.Attributes {\n\t\tif attrS.Name == b.Name {\n\t\t\tattrs, _ := b.JustAttributes()\n\t\t\tret.Attributes = attrs\n\t\t\tall = true\n\t\t} else if attrS.Required {\n\t\t\tdiags = append(diags, &hcl2.Diagnostic{\n\t\t\t\tSeverity: hcl2.DiagError,\n\t\t\t\tSummary:  \"Missing attribute\",\n\t\t\t\tDetail:   fmt.Sprintf(\"The attribute %q is required.\", attrS.Name),\n\t\t\t\tSubject:  b.Expr.Range().Ptr(),\n\t\t\t})\n\t\t}\n\t}\n\n\treturn ret, all, diags\n}\n\nfunc (b SingleAttrBody) JustAttributes() (hcl2.Attributes, hcl2.Diagnostics) {\n\treturn hcl2.Attributes{\n\t\tb.Name: {\n\t\t\tExpr:      b.Expr,\n\t\t\tName:      b.Name,\n\t\t\tNameRange: b.Expr.Range(),\n\t\t\tRange:     b.Expr.Range(),\n\t\t},\n\t}, nil\n}\n\nfunc (b SingleAttrBody) MissingItemRange() hcl2.Range {\n\treturn b.Expr.Range()\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/config/hcl2shim/values.go",
    "content": "package hcl2shim\n\nimport (\n\t\"fmt\"\n\t\"math/big\"\n\n\t\"github.com/hashicorp/hil/ast\"\n\t\"github.com/zclconf/go-cty/cty\"\n\n\t\"github.com/hashicorp/terraform/configs/configschema\"\n)\n\n// UnknownVariableValue is a sentinel value that can be used\n// to denote that the value of a variable is unknown at this time.\n// RawConfig uses this information to build up data about\n// unknown keys.\nconst UnknownVariableValue = \"74D93920-ED26-11E3-AC10-0800200C9A66\"\n\n// ConfigValueFromHCL2Block is like ConfigValueFromHCL2 but it works only for\n// known object values and uses the provided block schema to perform some\n// additional normalization to better mimic the shape of value that the old\n// HCL1/HIL-based codepaths would've produced.\n//\n// In particular, it discards the collections that we use to represent nested\n// blocks (other than NestingSingle) if they are empty, which better mimics\n// the HCL1 behavior because HCL1 had no knowledge of the schema and so didn't\n// know that an unspecified block _could_ exist.\n//\n// The given object value must conform to the schema's implied type or this\n// function will panic or produce incorrect results.\n//\n// This is primarily useful for the final transition from new-style values to\n// terraform.ResourceConfig before calling to a legacy provider, since\n// helper/schema (the old provider SDK) is particularly sensitive to these\n// subtle differences within its validation code.\nfunc ConfigValueFromHCL2Block(v cty.Value, schema *configschema.Block) map[string]interface{} {\n\tif v.IsNull() {\n\t\treturn nil\n\t}\n\tif !v.IsKnown() {\n\t\tpanic(\"ConfigValueFromHCL2Block used with unknown value\")\n\t}\n\tif !v.Type().IsObjectType() {\n\t\tpanic(fmt.Sprintf(\"ConfigValueFromHCL2Block used with non-object value %#v\", v))\n\t}\n\n\tatys := v.Type().AttributeTypes()\n\tret := make(map[string]interface{})\n\n\tfor name := range schema.Attributes {\n\t\tif _, exists := atys[name]; !exists {\n\t\t\tcontinue\n\t\t}\n\n\t\tav := v.GetAttr(name)\n\t\tif av.IsNull() {\n\t\t\t// Skip nulls altogether, to better mimic how HCL1 would behave\n\t\t\tcontinue\n\t\t}\n\t\tret[name] = ConfigValueFromHCL2(av)\n\t}\n\n\tfor name, blockS := range schema.BlockTypes {\n\t\tif _, exists := atys[name]; !exists {\n\t\t\tcontinue\n\t\t}\n\t\tbv := v.GetAttr(name)\n\t\tif !bv.IsKnown() {\n\t\t\tret[name] = UnknownVariableValue\n\t\t\tcontinue\n\t\t}\n\t\tif bv.IsNull() {\n\t\t\tcontinue\n\t\t}\n\n\t\tswitch blockS.Nesting {\n\n\t\tcase configschema.NestingSingle, configschema.NestingGroup:\n\t\t\tret[name] = ConfigValueFromHCL2Block(bv, &blockS.Block)\n\n\t\tcase configschema.NestingList, configschema.NestingSet:\n\t\t\tl := bv.LengthInt()\n\t\t\tif l == 0 {\n\t\t\t\t// skip empty collections to better mimic how HCL1 would behave\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\telems := make([]interface{}, 0, l)\n\t\t\tfor it := bv.ElementIterator(); it.Next(); {\n\t\t\t\t_, ev := it.Element()\n\t\t\t\tif !ev.IsKnown() {\n\t\t\t\t\telems = append(elems, UnknownVariableValue)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\telems = append(elems, ConfigValueFromHCL2Block(ev, &blockS.Block))\n\t\t\t}\n\t\t\tret[name] = elems\n\n\t\tcase configschema.NestingMap:\n\t\t\tif bv.LengthInt() == 0 {\n\t\t\t\t// skip empty collections to better mimic how HCL1 would behave\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\telems := make(map[string]interface{})\n\t\t\tfor it := bv.ElementIterator(); it.Next(); {\n\t\t\t\tek, ev := it.Element()\n\t\t\t\tif !ev.IsKnown() {\n\t\t\t\t\telems[ek.AsString()] = UnknownVariableValue\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\telems[ek.AsString()] = ConfigValueFromHCL2Block(ev, &blockS.Block)\n\t\t\t}\n\t\t\tret[name] = elems\n\t\t}\n\t}\n\n\treturn ret\n}\n\n// ConfigValueFromHCL2 converts a value from HCL2 (really, from the cty dynamic\n// types library that HCL2 uses) to a value type that matches what would've\n// been produced from the HCL-based interpolator for an equivalent structure.\n//\n// This function will transform a cty null value into a Go nil value, which\n// isn't a possible outcome of the HCL/HIL-based decoder and so callers may\n// need to detect and reject any null values.\nfunc ConfigValueFromHCL2(v cty.Value) interface{} {\n\tif !v.IsKnown() {\n\t\treturn UnknownVariableValue\n\t}\n\tif v.IsNull() {\n\t\treturn nil\n\t}\n\n\tswitch v.Type() {\n\tcase cty.Bool:\n\t\treturn v.True() // like HCL.BOOL\n\tcase cty.String:\n\t\treturn v.AsString() // like HCL token.STRING or token.HEREDOC\n\tcase cty.Number:\n\t\t// We can't match HCL _exactly_ here because it distinguishes between\n\t\t// int and float values, but we'll get as close as we can by using\n\t\t// an int if the number is exactly representable, and a float if not.\n\t\t// The conversion to float will force precision to that of a float64,\n\t\t// which is potentially losing information from the specific number\n\t\t// given, but no worse than what HCL would've done in its own conversion\n\t\t// to float.\n\n\t\tf := v.AsBigFloat()\n\t\tif i, acc := f.Int64(); acc == big.Exact {\n\t\t\t// if we're on a 32-bit system and the number is too big for 32-bit\n\t\t\t// int then we'll fall through here and use a float64.\n\t\t\tconst MaxInt = int(^uint(0) >> 1)\n\t\t\tconst MinInt = -MaxInt - 1\n\t\t\tif i <= int64(MaxInt) && i >= int64(MinInt) {\n\t\t\t\treturn int(i) // Like HCL token.NUMBER\n\t\t\t}\n\t\t}\n\n\t\tf64, _ := f.Float64()\n\t\treturn f64 // like HCL token.FLOAT\n\t}\n\n\tif v.Type().IsListType() || v.Type().IsSetType() || v.Type().IsTupleType() {\n\t\tl := make([]interface{}, 0, v.LengthInt())\n\t\tit := v.ElementIterator()\n\t\tfor it.Next() {\n\t\t\t_, ev := it.Element()\n\t\t\tl = append(l, ConfigValueFromHCL2(ev))\n\t\t}\n\t\treturn l\n\t}\n\n\tif v.Type().IsMapType() || v.Type().IsObjectType() {\n\t\tl := make(map[string]interface{})\n\t\tit := v.ElementIterator()\n\t\tfor it.Next() {\n\t\t\tek, ev := it.Element()\n\t\t\tcv := ConfigValueFromHCL2(ev)\n\t\t\tif cv != nil {\n\t\t\t\tl[ek.AsString()] = cv\n\t\t\t}\n\t\t}\n\t\treturn l\n\t}\n\n\t// If we fall out here then we have some weird type that we haven't\n\t// accounted for. This should never happen unless the caller is using\n\t// capsule types, and we don't currently have any such types defined.\n\tpanic(fmt.Errorf(\"can't convert %#v to config value\", v))\n}\n\n// HCL2ValueFromConfigValue is the opposite of configValueFromHCL2: it takes\n// a value as would be returned from the old interpolator and turns it into\n// a cty.Value so it can be used within, for example, an HCL2 EvalContext.\nfunc HCL2ValueFromConfigValue(v interface{}) cty.Value {\n\tif v == nil {\n\t\treturn cty.NullVal(cty.DynamicPseudoType)\n\t}\n\tif v == UnknownVariableValue {\n\t\treturn cty.DynamicVal\n\t}\n\n\tswitch tv := v.(type) {\n\tcase bool:\n\t\treturn cty.BoolVal(tv)\n\tcase string:\n\t\treturn cty.StringVal(tv)\n\tcase int:\n\t\treturn cty.NumberIntVal(int64(tv))\n\tcase float64:\n\t\treturn cty.NumberFloatVal(tv)\n\tcase []interface{}:\n\t\tvals := make([]cty.Value, len(tv))\n\t\tfor i, ev := range tv {\n\t\t\tvals[i] = HCL2ValueFromConfigValue(ev)\n\t\t}\n\t\treturn cty.TupleVal(vals)\n\tcase map[string]interface{}:\n\t\tvals := map[string]cty.Value{}\n\t\tfor k, ev := range tv {\n\t\t\tvals[k] = HCL2ValueFromConfigValue(ev)\n\t\t}\n\t\treturn cty.ObjectVal(vals)\n\tdefault:\n\t\t// HCL/HIL should never generate anything that isn't caught by\n\t\t// the above, so if we get here something has gone very wrong.\n\t\tpanic(fmt.Errorf(\"can't convert %#v to cty.Value\", v))\n\t}\n}\n\nfunc HILVariableFromHCL2Value(v cty.Value) ast.Variable {\n\tif v.IsNull() {\n\t\t// Caller should guarantee/check this before calling\n\t\tpanic(\"Null values cannot be represented in HIL\")\n\t}\n\tif !v.IsKnown() {\n\t\treturn ast.Variable{\n\t\t\tType:  ast.TypeUnknown,\n\t\t\tValue: UnknownVariableValue,\n\t\t}\n\t}\n\n\tswitch v.Type() {\n\tcase cty.Bool:\n\t\treturn ast.Variable{\n\t\t\tType:  ast.TypeBool,\n\t\t\tValue: v.True(),\n\t\t}\n\tcase cty.Number:\n\t\tv := ConfigValueFromHCL2(v)\n\t\tswitch tv := v.(type) {\n\t\tcase int:\n\t\t\treturn ast.Variable{\n\t\t\t\tType:  ast.TypeInt,\n\t\t\t\tValue: tv,\n\t\t\t}\n\t\tcase float64:\n\t\t\treturn ast.Variable{\n\t\t\t\tType:  ast.TypeFloat,\n\t\t\t\tValue: tv,\n\t\t\t}\n\t\tdefault:\n\t\t\t// should never happen\n\t\t\tpanic(\"invalid return value for configValueFromHCL2\")\n\t\t}\n\tcase cty.String:\n\t\treturn ast.Variable{\n\t\t\tType:  ast.TypeString,\n\t\t\tValue: v.AsString(),\n\t\t}\n\t}\n\n\tif v.Type().IsListType() || v.Type().IsSetType() || v.Type().IsTupleType() {\n\t\tl := make([]ast.Variable, 0, v.LengthInt())\n\t\tit := v.ElementIterator()\n\t\tfor it.Next() {\n\t\t\t_, ev := it.Element()\n\t\t\tl = append(l, HILVariableFromHCL2Value(ev))\n\t\t}\n\t\t// If we were given a tuple then this could actually produce an invalid\n\t\t// list with non-homogenous types, which we expect to be caught inside\n\t\t// HIL just like a user-supplied non-homogenous list would be.\n\t\treturn ast.Variable{\n\t\t\tType:  ast.TypeList,\n\t\t\tValue: l,\n\t\t}\n\t}\n\n\tif v.Type().IsMapType() || v.Type().IsObjectType() {\n\t\tl := make(map[string]ast.Variable)\n\t\tit := v.ElementIterator()\n\t\tfor it.Next() {\n\t\t\tek, ev := it.Element()\n\t\t\tl[ek.AsString()] = HILVariableFromHCL2Value(ev)\n\t\t}\n\t\t// If we were given an object then this could actually produce an invalid\n\t\t// map with non-homogenous types, which we expect to be caught inside\n\t\t// HIL just like a user-supplied non-homogenous map would be.\n\t\treturn ast.Variable{\n\t\t\tType:  ast.TypeMap,\n\t\t\tValue: l,\n\t\t}\n\t}\n\n\t// If we fall out here then we have some weird type that we haven't\n\t// accounted for. This should never happen unless the caller is using\n\t// capsule types, and we don't currently have any such types defined.\n\tpanic(fmt.Errorf(\"can't convert %#v to HIL variable\", v))\n}\n\nfunc HCL2ValueFromHILVariable(v ast.Variable) cty.Value {\n\tswitch v.Type {\n\tcase ast.TypeList:\n\t\tvals := make([]cty.Value, len(v.Value.([]ast.Variable)))\n\t\tfor i, ev := range v.Value.([]ast.Variable) {\n\t\t\tvals[i] = HCL2ValueFromHILVariable(ev)\n\t\t}\n\t\treturn cty.TupleVal(vals)\n\tcase ast.TypeMap:\n\t\tvals := make(map[string]cty.Value, len(v.Value.(map[string]ast.Variable)))\n\t\tfor k, ev := range v.Value.(map[string]ast.Variable) {\n\t\t\tvals[k] = HCL2ValueFromHILVariable(ev)\n\t\t}\n\t\treturn cty.ObjectVal(vals)\n\tdefault:\n\t\treturn HCL2ValueFromConfigValue(v.Value)\n\t}\n}\n\nfunc HCL2TypeForHILType(hilType ast.Type) cty.Type {\n\tswitch hilType {\n\tcase ast.TypeAny:\n\t\treturn cty.DynamicPseudoType\n\tcase ast.TypeUnknown:\n\t\treturn cty.DynamicPseudoType\n\tcase ast.TypeBool:\n\t\treturn cty.Bool\n\tcase ast.TypeInt:\n\t\treturn cty.Number\n\tcase ast.TypeFloat:\n\t\treturn cty.Number\n\tcase ast.TypeString:\n\t\treturn cty.String\n\tcase ast.TypeList:\n\t\treturn cty.List(cty.DynamicPseudoType)\n\tcase ast.TypeMap:\n\t\treturn cty.Map(cty.DynamicPseudoType)\n\tdefault:\n\t\treturn cty.NilType // equilvalent to ast.TypeInvalid\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/config/hcl2shim/values_equiv.go",
    "content": "package hcl2shim\n\nimport (\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// ValuesSDKEquivalent returns true if both of the given values seem equivalent\n// as far as the legacy SDK diffing code would be concerned.\n//\n// Since SDK diffing is a fuzzy, inexact operation, this function is also\n// fuzzy and inexact. It will err on the side of returning false if it\n// encounters an ambiguous situation. Ambiguity is most common in the presence\n// of sets because in practice it is impossible to exactly correlate\n// nonequal-but-equivalent set elements because they have no identity separate\n// from their value.\n//\n// This must be used _only_ for comparing values for equivalence within the\n// SDK planning code. It is only meaningful to compare the \"prior state\"\n// provided by Terraform Core with the \"planned new state\" produced by the\n// legacy SDK code via shims. In particular it is not valid to use this\n// function with their the config value or the \"proposed new state\" value\n// because they contain only the subset of data that Terraform Core itself is\n// able to determine.\nfunc ValuesSDKEquivalent(a, b cty.Value) bool {\n\tif a == cty.NilVal || b == cty.NilVal {\n\t\t// We don't generally expect nils to appear, but we'll allow them\n\t\t// for robustness since the data structures produced by legacy SDK code\n\t\t// can sometimes be non-ideal.\n\t\treturn a == b // equivalent if they are _both_ nil\n\t}\n\tif a.RawEquals(b) {\n\t\t// Easy case. We use RawEquals because we want two unknowns to be\n\t\t// considered equal here, whereas \"Equals\" would return unknown.\n\t\treturn true\n\t}\n\tif !a.IsKnown() || !b.IsKnown() {\n\t\t// Two unknown values are equivalent regardless of type. A known is\n\t\t// never equivalent to an unknown.\n\t\treturn a.IsKnown() == b.IsKnown()\n\t}\n\tif aZero, bZero := valuesSDKEquivalentIsNullOrZero(a), valuesSDKEquivalentIsNullOrZero(b); aZero || bZero {\n\t\t// Two null/zero values are equivalent regardless of type. A non-zero is\n\t\t// never equivalent to a zero.\n\t\treturn aZero == bZero\n\t}\n\n\t// If we get down here then we are guaranteed that both a and b are known,\n\t// non-null values.\n\n\taTy := a.Type()\n\tbTy := b.Type()\n\tswitch {\n\tcase aTy.IsSetType() && bTy.IsSetType():\n\t\treturn valuesSDKEquivalentSets(a, b)\n\tcase aTy.IsListType() && bTy.IsListType():\n\t\treturn valuesSDKEquivalentSequences(a, b)\n\tcase aTy.IsTupleType() && bTy.IsTupleType():\n\t\treturn valuesSDKEquivalentSequences(a, b)\n\tcase aTy.IsMapType() && bTy.IsMapType():\n\t\treturn valuesSDKEquivalentMappings(a, b)\n\tcase aTy.IsObjectType() && bTy.IsObjectType():\n\t\treturn valuesSDKEquivalentMappings(a, b)\n\tcase aTy == cty.Number && bTy == cty.Number:\n\t\treturn valuesSDKEquivalentNumbers(a, b)\n\tdefault:\n\t\t// We've now covered all the interesting cases, so anything that falls\n\t\t// down here cannot be equivalent.\n\t\treturn false\n\t}\n}\n\n// valuesSDKEquivalentIsNullOrZero returns true if the given value is either\n// null or is the \"zero value\" (in the SDK/Go sense) for its type.\nfunc valuesSDKEquivalentIsNullOrZero(v cty.Value) bool {\n\tif v == cty.NilVal {\n\t\treturn true\n\t}\n\n\tty := v.Type()\n\tswitch {\n\tcase !v.IsKnown():\n\t\treturn false\n\tcase v.IsNull():\n\t\treturn true\n\n\t// After this point, v is always known and non-null\n\tcase ty.IsListType() || ty.IsSetType() || ty.IsMapType() || ty.IsObjectType() || ty.IsTupleType():\n\t\treturn v.LengthInt() == 0\n\tcase ty == cty.String:\n\t\treturn v.RawEquals(cty.StringVal(\"\"))\n\tcase ty == cty.Number:\n\t\treturn v.RawEquals(cty.Zero)\n\tcase ty == cty.Bool:\n\t\treturn v.RawEquals(cty.False)\n\tdefault:\n\t\t// The above is exhaustive, but for robustness we'll consider anything\n\t\t// else to _not_ be zero unless it is null.\n\t\treturn false\n\t}\n}\n\n// valuesSDKEquivalentSets returns true only if each of the elements in a can\n// be correlated with at least one equivalent element in b and vice-versa.\n// This is a fuzzy operation that prefers to signal non-equivalence if it cannot\n// be certain that all elements are accounted for.\nfunc valuesSDKEquivalentSets(a, b cty.Value) bool {\n\tif aLen, bLen := a.LengthInt(), b.LengthInt(); aLen != bLen {\n\t\treturn false\n\t}\n\n\t// Our methodology here is a little tricky, to deal with the fact that\n\t// it's impossible to directly correlate two non-equal set elements because\n\t// they don't have identities separate from their values.\n\t// The approach is to count the number of equivalent elements each element\n\t// of a has in b and vice-versa, and then return true only if each element\n\t// in both sets has at least one equivalent.\n\tas := a.AsValueSlice()\n\tbs := b.AsValueSlice()\n\taeqs := make([]bool, len(as))\n\tbeqs := make([]bool, len(bs))\n\tfor ai, av := range as {\n\t\tfor bi, bv := range bs {\n\t\t\tif ValuesSDKEquivalent(av, bv) {\n\t\t\t\taeqs[ai] = true\n\t\t\t\tbeqs[bi] = true\n\t\t\t}\n\t\t}\n\t}\n\n\tfor _, eq := range aeqs {\n\t\tif !eq {\n\t\t\treturn false\n\t\t}\n\t}\n\tfor _, eq := range beqs {\n\t\tif !eq {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\n// valuesSDKEquivalentSequences decides equivalence for two sequence values\n// (lists or tuples).\nfunc valuesSDKEquivalentSequences(a, b cty.Value) bool {\n\tas := a.AsValueSlice()\n\tbs := b.AsValueSlice()\n\tif len(as) != len(bs) {\n\t\treturn false\n\t}\n\n\tfor i := range as {\n\t\tif !ValuesSDKEquivalent(as[i], bs[i]) {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\n// valuesSDKEquivalentMappings decides equivalence for two mapping values\n// (maps or objects).\nfunc valuesSDKEquivalentMappings(a, b cty.Value) bool {\n\tas := a.AsValueMap()\n\tbs := b.AsValueMap()\n\tif len(as) != len(bs) {\n\t\treturn false\n\t}\n\n\tfor k, av := range as {\n\t\tbv, ok := bs[k]\n\t\tif !ok {\n\t\t\treturn false\n\t\t}\n\t\tif !ValuesSDKEquivalent(av, bv) {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\n// valuesSDKEquivalentNumbers decides equivalence for two number values based\n// on the fact that the SDK uses int and float64 representations while\n// cty (and thus Terraform Core) uses big.Float, and so we expect to lose\n// precision in the round-trip.\n//\n// This does _not_ attempt to allow for an epsilon difference that may be\n// caused by accumulated innacuracy in a float calculation, under the\n// expectation that providers generally do not actually do compuations on\n// floats and instead just pass string representations of them on verbatim\n// to remote APIs. A remote API _itself_ may introduce inaccuracy, but that's\n// a problem for the provider itself to deal with, based on its knowledge of\n// the remote system, e.g. using DiffSuppressFunc.\nfunc valuesSDKEquivalentNumbers(a, b cty.Value) bool {\n\tif a.RawEquals(b) {\n\t\treturn true // easy\n\t}\n\n\taf := a.AsBigFloat()\n\tbf := b.AsBigFloat()\n\n\tif af.IsInt() != bf.IsInt() {\n\t\treturn false\n\t}\n\tif af.IsInt() && bf.IsInt() {\n\t\treturn false // a.RawEquals(b) test above is good enough for integers\n\t}\n\n\t// The SDK supports only int and float64, so if it's not an integer\n\t// we know that only a float64-level of precision can possibly be\n\t// significant.\n\taf64, _ := af.Float64()\n\tbf64, _ := bf.Float64()\n\treturn af64 == bf64\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/config/import_tree.go",
    "content": "package config\n\nimport (\n\t\"bufio\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\n\t\"github.com/hashicorp/errwrap\"\n)\n\n// configurable is an interface that must be implemented by any configuration\n// formats of Terraform in order to return a *Config.\ntype configurable interface {\n\tConfig() (*Config, error)\n}\n\n// importTree is the result of the first-pass load of the configuration\n// files. It is a tree of raw configurables and then any children (their\n// imports).\n//\n// An importTree can be turned into a configTree.\ntype importTree struct {\n\tPath     string\n\tRaw      configurable\n\tChildren []*importTree\n}\n\n// This is the function type that must be implemented by the configuration\n// file loader to turn a single file into a configurable and any additional\n// imports.\ntype fileLoaderFunc func(path string) (configurable, []string, error)\n\n// Set this to a non-empty value at link time to enable the HCL2 experiment.\n// This is not currently enabled for release builds.\n//\n// For example:\n//    go install -ldflags=\"-X github.com/hashicorp/terraform/config.enableHCL2Experiment=true\" github.com/hashicorp/terraform\nvar enableHCL2Experiment = \"\"\n\n// loadTree takes a single file and loads the entire importTree for that\n// file. This function detects what kind of configuration file it is an\n// executes the proper fileLoaderFunc.\nfunc loadTree(root string) (*importTree, error) {\n\tvar f fileLoaderFunc\n\n\t// HCL2 experiment is currently activated at build time via the linker.\n\t// See the comment on this variable for more information.\n\tif enableHCL2Experiment == \"\" {\n\t\t// Main-line behavior: always use the original HCL parser\n\t\tswitch ext(root) {\n\t\tcase \".tf\", \".tf.json\":\n\t\t\tf = loadFileHcl\n\t\tdefault:\n\t\t}\n\t} else {\n\t\t// Experimental behavior: use the HCL2 parser if the opt-in comment\n\t\t// is present.\n\t\tswitch ext(root) {\n\t\tcase \".tf\":\n\t\t\t// We need to sniff the file for the opt-in comment line to decide\n\t\t\t// if the file is participating in the HCL2 experiment.\n\t\t\tcf, err := os.Open(root)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tsc := bufio.NewScanner(cf)\n\t\t\tfor sc.Scan() {\n\t\t\t\tif sc.Text() == \"#terraform:hcl2\" {\n\t\t\t\t\tf = globalHCL2Loader.loadFile\n\t\t\t\t}\n\t\t\t}\n\t\t\tif f == nil {\n\t\t\t\tf = loadFileHcl\n\t\t\t}\n\t\tcase \".tf.json\":\n\t\t\tf = loadFileHcl\n\t\tdefault:\n\t\t}\n\t}\n\n\tif f == nil {\n\t\treturn nil, fmt.Errorf(\n\t\t\t\"%s: unknown configuration format. Use '.tf' or '.tf.json' extension\",\n\t\t\troot)\n\t}\n\n\tc, imps, err := f(root)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tchildren := make([]*importTree, len(imps))\n\tfor i, imp := range imps {\n\t\tt, err := loadTree(imp)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tchildren[i] = t\n\t}\n\n\treturn &importTree{\n\t\tPath:     root,\n\t\tRaw:      c,\n\t\tChildren: children,\n\t}, nil\n}\n\n// Close releases any resources we might be holding open for the importTree.\n//\n// This can safely be called even while ConfigTree results are alive. The\n// importTree is not bound to these.\nfunc (t *importTree) Close() error {\n\tif c, ok := t.Raw.(io.Closer); ok {\n\t\tc.Close()\n\t}\n\tfor _, ct := range t.Children {\n\t\tct.Close()\n\t}\n\n\treturn nil\n}\n\n// ConfigTree traverses the importTree and turns each node into a *Config\n// object, ultimately returning a *configTree.\nfunc (t *importTree) ConfigTree() (*configTree, error) {\n\tconfig, err := t.Raw.Config()\n\tif err != nil {\n\t\treturn nil, errwrap.Wrapf(fmt.Sprintf(\"Error loading %s: {{err}}\", t.Path), err)\n\t}\n\n\t// Build our result\n\tresult := &configTree{\n\t\tPath:   t.Path,\n\t\tConfig: config,\n\t}\n\n\t// Build the config trees for the children\n\tresult.Children = make([]*configTree, len(t.Children))\n\tfor i, ct := range t.Children {\n\t\tt, err := ct.ConfigTree()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tresult.Children[i] = t\n\t}\n\n\treturn result, nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/config/interpolate.go",
    "content": "package config\n\nimport (\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/hashicorp/terraform/tfdiags\"\n\n\t\"github.com/hashicorp/hil/ast\"\n)\n\n// An InterpolatedVariable is a variable reference within an interpolation.\n//\n// Implementations of this interface represents various sources where\n// variables can come from: user variables, resources, etc.\ntype InterpolatedVariable interface {\n\tFullKey() string\n\tSourceRange() tfdiags.SourceRange\n}\n\n// varRange can be embedded into an InterpolatedVariable implementation to\n// implement the SourceRange method.\ntype varRange struct {\n\trng tfdiags.SourceRange\n}\n\nfunc (r varRange) SourceRange() tfdiags.SourceRange {\n\treturn r.rng\n}\n\nfunc makeVarRange(rng tfdiags.SourceRange) varRange {\n\treturn varRange{rng}\n}\n\n// CountVariable is a variable for referencing information about\n// the count.\ntype CountVariable struct {\n\tType CountValueType\n\tkey  string\n\tvarRange\n}\n\n// CountValueType is the type of the count variable that is referenced.\ntype CountValueType byte\n\nconst (\n\tCountValueInvalid CountValueType = iota\n\tCountValueIndex\n)\n\n// A ModuleVariable is a variable that is referencing the output\n// of a module, such as \"${module.foo.bar}\"\ntype ModuleVariable struct {\n\tName  string\n\tField string\n\tkey   string\n\tvarRange\n}\n\n// A PathVariable is a variable that references path information about the\n// module.\ntype PathVariable struct {\n\tType PathValueType\n\tkey  string\n\tvarRange\n}\n\ntype PathValueType byte\n\nconst (\n\tPathValueInvalid PathValueType = iota\n\tPathValueCwd\n\tPathValueModule\n\tPathValueRoot\n)\n\n// A ResourceVariable is a variable that is referencing the field\n// of a resource, such as \"${aws_instance.foo.ami}\"\ntype ResourceVariable struct {\n\tMode  ResourceMode\n\tType  string // Resource type, i.e. \"aws_instance\"\n\tName  string // Resource name\n\tField string // Resource field\n\n\tMulti bool // True if multi-variable: aws_instance.foo.*.id\n\tIndex int  // Index for multi-variable: aws_instance.foo.1.id == 1\n\n\tkey string\n\tvarRange\n}\n\n// SelfVariable is a variable that is referencing the same resource\n// it is running on: \"${self.address}\"\ntype SelfVariable struct {\n\tField string\n\n\tkey string\n\tvarRange\n}\n\n// SimpleVariable is an unprefixed variable, which can show up when users have\n// strings they are passing down to resources that use interpolation\n// internally. The template_file resource is an example of this.\ntype SimpleVariable struct {\n\tKey string\n\tvarRange\n}\n\n// TerraformVariable is a \"terraform.\"-prefixed variable used to access\n// metadata about the Terraform run.\ntype TerraformVariable struct {\n\tField string\n\tkey   string\n\tvarRange\n}\n\n// A UserVariable is a variable that is referencing a user variable\n// that is inputted from outside the configuration. This looks like\n// \"${var.foo}\"\ntype UserVariable struct {\n\tName string\n\tElem string\n\n\tkey string\n\tvarRange\n}\n\n// A LocalVariable is a variable that references a local value defined within\n// the current module, via a \"locals\" block. This looks like \"${local.foo}\".\ntype LocalVariable struct {\n\tName string\n\tvarRange\n}\n\nfunc NewInterpolatedVariable(v string) (InterpolatedVariable, error) {\n\tif strings.HasPrefix(v, \"count.\") {\n\t\treturn NewCountVariable(v)\n\t} else if strings.HasPrefix(v, \"path.\") {\n\t\treturn NewPathVariable(v)\n\t} else if strings.HasPrefix(v, \"self.\") {\n\t\treturn NewSelfVariable(v)\n\t} else if strings.HasPrefix(v, \"terraform.\") {\n\t\treturn NewTerraformVariable(v)\n\t} else if strings.HasPrefix(v, \"var.\") {\n\t\treturn NewUserVariable(v)\n\t} else if strings.HasPrefix(v, \"local.\") {\n\t\treturn NewLocalVariable(v)\n\t} else if strings.HasPrefix(v, \"module.\") {\n\t\treturn NewModuleVariable(v)\n\t} else if !strings.ContainsRune(v, '.') {\n\t\treturn NewSimpleVariable(v)\n\t} else {\n\t\treturn NewResourceVariable(v)\n\t}\n}\n\nfunc NewCountVariable(key string) (*CountVariable, error) {\n\tvar fieldType CountValueType\n\tparts := strings.SplitN(key, \".\", 2)\n\tswitch parts[1] {\n\tcase \"index\":\n\t\tfieldType = CountValueIndex\n\t}\n\n\treturn &CountVariable{\n\t\tType: fieldType,\n\t\tkey:  key,\n\t}, nil\n}\n\nfunc (c *CountVariable) FullKey() string {\n\treturn c.key\n}\n\nfunc NewModuleVariable(key string) (*ModuleVariable, error) {\n\tparts := strings.SplitN(key, \".\", 3)\n\tif len(parts) < 3 {\n\t\treturn nil, fmt.Errorf(\n\t\t\t\"%s: module variables must be three parts: module.name.attr\",\n\t\t\tkey)\n\t}\n\n\treturn &ModuleVariable{\n\t\tName:  parts[1],\n\t\tField: parts[2],\n\t\tkey:   key,\n\t}, nil\n}\n\nfunc (v *ModuleVariable) FullKey() string {\n\treturn v.key\n}\n\nfunc (v *ModuleVariable) GoString() string {\n\treturn fmt.Sprintf(\"*%#v\", *v)\n}\n\nfunc NewPathVariable(key string) (*PathVariable, error) {\n\tvar fieldType PathValueType\n\tparts := strings.SplitN(key, \".\", 2)\n\tswitch parts[1] {\n\tcase \"cwd\":\n\t\tfieldType = PathValueCwd\n\tcase \"module\":\n\t\tfieldType = PathValueModule\n\tcase \"root\":\n\t\tfieldType = PathValueRoot\n\t}\n\n\treturn &PathVariable{\n\t\tType: fieldType,\n\t\tkey:  key,\n\t}, nil\n}\n\nfunc (v *PathVariable) FullKey() string {\n\treturn v.key\n}\n\nfunc NewResourceVariable(key string) (*ResourceVariable, error) {\n\tvar mode ResourceMode\n\tvar parts []string\n\tif strings.HasPrefix(key, \"data.\") {\n\t\tmode = DataResourceMode\n\t\tparts = strings.SplitN(key, \".\", 4)\n\t\tif len(parts) < 4 {\n\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\"%s: data variables must be four parts: data.TYPE.NAME.ATTR\",\n\t\t\t\tkey)\n\t\t}\n\n\t\t// Don't actually need the \"data.\" prefix for parsing, since it's\n\t\t// always constant.\n\t\tparts = parts[1:]\n\t} else {\n\t\tmode = ManagedResourceMode\n\t\tparts = strings.SplitN(key, \".\", 3)\n\t\tif len(parts) < 3 {\n\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\"%s: resource variables must be three parts: TYPE.NAME.ATTR\",\n\t\t\t\tkey)\n\t\t}\n\t}\n\n\tfield := parts[2]\n\tmulti := false\n\tvar index int\n\n\tif idx := strings.Index(field, \".\"); idx != -1 {\n\t\tindexStr := field[:idx]\n\t\tmulti = indexStr == \"*\"\n\t\tindex = -1\n\n\t\tif !multi {\n\t\t\tindexInt, err := strconv.ParseInt(indexStr, 0, 0)\n\t\t\tif err == nil {\n\t\t\t\tmulti = true\n\t\t\t\tindex = int(indexInt)\n\t\t\t}\n\t\t}\n\n\t\tif multi {\n\t\t\tfield = field[idx+1:]\n\t\t}\n\t}\n\n\treturn &ResourceVariable{\n\t\tMode:  mode,\n\t\tType:  parts[0],\n\t\tName:  parts[1],\n\t\tField: field,\n\t\tMulti: multi,\n\t\tIndex: index,\n\t\tkey:   key,\n\t}, nil\n}\n\nfunc (v *ResourceVariable) ResourceId() string {\n\tswitch v.Mode {\n\tcase ManagedResourceMode:\n\t\treturn fmt.Sprintf(\"%s.%s\", v.Type, v.Name)\n\tcase DataResourceMode:\n\t\treturn fmt.Sprintf(\"data.%s.%s\", v.Type, v.Name)\n\tdefault:\n\t\tpanic(fmt.Errorf(\"unknown resource mode %s\", v.Mode))\n\t}\n}\n\nfunc (v *ResourceVariable) FullKey() string {\n\treturn v.key\n}\n\nfunc NewSelfVariable(key string) (*SelfVariable, error) {\n\tfield := key[len(\"self.\"):]\n\n\treturn &SelfVariable{\n\t\tField: field,\n\n\t\tkey: key,\n\t}, nil\n}\n\nfunc (v *SelfVariable) FullKey() string {\n\treturn v.key\n}\n\nfunc (v *SelfVariable) GoString() string {\n\treturn fmt.Sprintf(\"*%#v\", *v)\n}\n\nfunc NewSimpleVariable(key string) (*SimpleVariable, error) {\n\treturn &SimpleVariable{Key: key}, nil\n}\n\nfunc (v *SimpleVariable) FullKey() string {\n\treturn v.Key\n}\n\nfunc (v *SimpleVariable) GoString() string {\n\treturn fmt.Sprintf(\"*%#v\", *v)\n}\n\nfunc NewTerraformVariable(key string) (*TerraformVariable, error) {\n\tfield := key[len(\"terraform.\"):]\n\treturn &TerraformVariable{\n\t\tField: field,\n\t\tkey:   key,\n\t}, nil\n}\n\nfunc (v *TerraformVariable) FullKey() string {\n\treturn v.key\n}\n\nfunc (v *TerraformVariable) GoString() string {\n\treturn fmt.Sprintf(\"*%#v\", *v)\n}\n\nfunc NewUserVariable(key string) (*UserVariable, error) {\n\tname := key[len(\"var.\"):]\n\telem := \"\"\n\tif idx := strings.Index(name, \".\"); idx > -1 {\n\t\telem = name[idx+1:]\n\t\tname = name[:idx]\n\t}\n\n\tif len(elem) > 0 {\n\t\treturn nil, fmt.Errorf(\"Invalid dot index found: 'var.%s.%s'. Values in maps and lists can be referenced using square bracket indexing, like: 'var.mymap[\\\"key\\\"]' or 'var.mylist[1]'.\", name, elem)\n\t}\n\n\treturn &UserVariable{\n\t\tkey: key,\n\n\t\tName: name,\n\t\tElem: elem,\n\t}, nil\n}\n\nfunc (v *UserVariable) FullKey() string {\n\treturn v.key\n}\n\nfunc (v *UserVariable) GoString() string {\n\treturn fmt.Sprintf(\"*%#v\", *v)\n}\n\nfunc NewLocalVariable(key string) (*LocalVariable, error) {\n\tname := key[len(\"local.\"):]\n\tif idx := strings.Index(name, \".\"); idx > -1 {\n\t\treturn nil, fmt.Errorf(\"Can't use dot (.) attribute access in local.%s; use square bracket indexing\", name)\n\t}\n\n\treturn &LocalVariable{\n\t\tName: name,\n\t}, nil\n}\n\nfunc (v *LocalVariable) FullKey() string {\n\treturn fmt.Sprintf(\"local.%s\", v.Name)\n}\n\nfunc (v *LocalVariable) GoString() string {\n\treturn fmt.Sprintf(\"*%#v\", *v)\n}\n\n// DetectVariables takes an AST root and returns all the interpolated\n// variables that are detected in the AST tree.\nfunc DetectVariables(root ast.Node) ([]InterpolatedVariable, error) {\n\tvar result []InterpolatedVariable\n\tvar resultErr error\n\n\t// Visitor callback\n\tfn := func(n ast.Node) ast.Node {\n\t\tif resultErr != nil {\n\t\t\treturn n\n\t\t}\n\n\t\tswitch vn := n.(type) {\n\t\tcase *ast.VariableAccess:\n\t\t\tv, err := NewInterpolatedVariable(vn.Name)\n\t\t\tif err != nil {\n\t\t\t\tresultErr = err\n\t\t\t\treturn n\n\t\t\t}\n\t\t\tresult = append(result, v)\n\t\tcase *ast.Index:\n\t\t\tif va, ok := vn.Target.(*ast.VariableAccess); ok {\n\t\t\t\tv, err := NewInterpolatedVariable(va.Name)\n\t\t\t\tif err != nil {\n\t\t\t\t\tresultErr = err\n\t\t\t\t\treturn n\n\t\t\t\t}\n\t\t\t\tresult = append(result, v)\n\t\t\t}\n\t\t\tif va, ok := vn.Key.(*ast.VariableAccess); ok {\n\t\t\t\tv, err := NewInterpolatedVariable(va.Name)\n\t\t\t\tif err != nil {\n\t\t\t\t\tresultErr = err\n\t\t\t\t\treturn n\n\t\t\t\t}\n\t\t\t\tresult = append(result, v)\n\t\t\t}\n\t\tdefault:\n\t\t\treturn n\n\t\t}\n\n\t\treturn n\n\t}\n\n\t// Visitor pattern\n\troot.Accept(fn)\n\n\tif resultErr != nil {\n\t\treturn nil, resultErr\n\t}\n\n\treturn result, nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/config/interpolate_funcs.go",
    "content": "package config\n\nimport (\n\t\"bytes\"\n\t\"compress/gzip\"\n\t\"crypto/md5\"\n\t\"crypto/rsa\"\n\t\"crypto/sha1\"\n\t\"crypto/sha256\"\n\t\"crypto/sha512\"\n\t\"crypto/x509\"\n\t\"encoding/base64\"\n\t\"encoding/hex\"\n\t\"encoding/json\"\n\t\"encoding/pem\"\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"math\"\n\t\"net\"\n\t\"net/url\"\n\t\"path/filepath\"\n\t\"regexp\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/apparentlymart/go-cidr/cidr\"\n\t\"github.com/hashicorp/go-uuid\"\n\t\"github.com/hashicorp/hil\"\n\t\"github.com/hashicorp/hil/ast\"\n\t\"github.com/mitchellh/go-homedir\"\n\t\"golang.org/x/crypto/bcrypt\"\n)\n\n// stringSliceToVariableValue converts a string slice into the value\n// required to be returned from interpolation functions which return\n// TypeList.\nfunc stringSliceToVariableValue(values []string) []ast.Variable {\n\toutput := make([]ast.Variable, len(values))\n\tfor index, value := range values {\n\t\toutput[index] = ast.Variable{\n\t\t\tType:  ast.TypeString,\n\t\t\tValue: value,\n\t\t}\n\t}\n\treturn output\n}\n\n// listVariableSliceToVariableValue converts a list of lists into the value\n// required to be returned from interpolation functions which return TypeList.\nfunc listVariableSliceToVariableValue(values [][]ast.Variable) []ast.Variable {\n\toutput := make([]ast.Variable, len(values))\n\n\tfor index, value := range values {\n\t\toutput[index] = ast.Variable{\n\t\t\tType:  ast.TypeList,\n\t\t\tValue: value,\n\t\t}\n\t}\n\treturn output\n}\n\nfunc listVariableValueToStringSlice(values []ast.Variable) ([]string, error) {\n\toutput := make([]string, len(values))\n\tfor index, value := range values {\n\t\tif value.Type != ast.TypeString {\n\t\t\treturn []string{}, fmt.Errorf(\"list has non-string element (%T)\", value.Type.String())\n\t\t}\n\t\toutput[index] = value.Value.(string)\n\t}\n\treturn output, nil\n}\n\n// Funcs is the mapping of built-in functions for configuration.\nfunc Funcs() map[string]ast.Function {\n\treturn map[string]ast.Function{\n\t\t\"abs\":          interpolationFuncAbs(),\n\t\t\"basename\":     interpolationFuncBasename(),\n\t\t\"base64decode\": interpolationFuncBase64Decode(),\n\t\t\"base64encode\": interpolationFuncBase64Encode(),\n\t\t\"base64gzip\":   interpolationFuncBase64Gzip(),\n\t\t\"base64sha256\": interpolationFuncBase64Sha256(),\n\t\t\"base64sha512\": interpolationFuncBase64Sha512(),\n\t\t\"bcrypt\":       interpolationFuncBcrypt(),\n\t\t\"ceil\":         interpolationFuncCeil(),\n\t\t\"chomp\":        interpolationFuncChomp(),\n\t\t\"cidrhost\":     interpolationFuncCidrHost(),\n\t\t\"cidrnetmask\":  interpolationFuncCidrNetmask(),\n\t\t\"cidrsubnet\":   interpolationFuncCidrSubnet(),\n\t\t\"coalesce\":     interpolationFuncCoalesce(),\n\t\t\"coalescelist\": interpolationFuncCoalesceList(),\n\t\t\"compact\":      interpolationFuncCompact(),\n\t\t\"concat\":       interpolationFuncConcat(),\n\t\t\"contains\":     interpolationFuncContains(),\n\t\t\"dirname\":      interpolationFuncDirname(),\n\t\t\"distinct\":     interpolationFuncDistinct(),\n\t\t\"element\":      interpolationFuncElement(),\n\t\t\"chunklist\":    interpolationFuncChunklist(),\n\t\t\"file\":         interpolationFuncFile(),\n\t\t\"matchkeys\":    interpolationFuncMatchKeys(),\n\t\t\"flatten\":      interpolationFuncFlatten(),\n\t\t\"floor\":        interpolationFuncFloor(),\n\t\t\"format\":       interpolationFuncFormat(),\n\t\t\"formatlist\":   interpolationFuncFormatList(),\n\t\t\"indent\":       interpolationFuncIndent(),\n\t\t\"index\":        interpolationFuncIndex(),\n\t\t\"join\":         interpolationFuncJoin(),\n\t\t\"jsonencode\":   interpolationFuncJSONEncode(),\n\t\t\"length\":       interpolationFuncLength(),\n\t\t\"list\":         interpolationFuncList(),\n\t\t\"log\":          interpolationFuncLog(),\n\t\t\"lower\":        interpolationFuncLower(),\n\t\t\"map\":          interpolationFuncMap(),\n\t\t\"max\":          interpolationFuncMax(),\n\t\t\"md5\":          interpolationFuncMd5(),\n\t\t\"merge\":        interpolationFuncMerge(),\n\t\t\"min\":          interpolationFuncMin(),\n\t\t\"pathexpand\":   interpolationFuncPathExpand(),\n\t\t\"pow\":          interpolationFuncPow(),\n\t\t\"uuid\":         interpolationFuncUUID(),\n\t\t\"replace\":      interpolationFuncReplace(),\n\t\t\"reverse\":      interpolationFuncReverse(),\n\t\t\"rsadecrypt\":   interpolationFuncRsaDecrypt(),\n\t\t\"sha1\":         interpolationFuncSha1(),\n\t\t\"sha256\":       interpolationFuncSha256(),\n\t\t\"sha512\":       interpolationFuncSha512(),\n\t\t\"signum\":       interpolationFuncSignum(),\n\t\t\"slice\":        interpolationFuncSlice(),\n\t\t\"sort\":         interpolationFuncSort(),\n\t\t\"split\":        interpolationFuncSplit(),\n\t\t\"substr\":       interpolationFuncSubstr(),\n\t\t\"timestamp\":    interpolationFuncTimestamp(),\n\t\t\"timeadd\":      interpolationFuncTimeAdd(),\n\t\t\"title\":        interpolationFuncTitle(),\n\t\t\"transpose\":    interpolationFuncTranspose(),\n\t\t\"trimspace\":    interpolationFuncTrimSpace(),\n\t\t\"upper\":        interpolationFuncUpper(),\n\t\t\"urlencode\":    interpolationFuncURLEncode(),\n\t\t\"zipmap\":       interpolationFuncZipMap(),\n\t}\n}\n\n// interpolationFuncList creates a list from the parameters passed\n// to it.\nfunc interpolationFuncList() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:     []ast.Type{},\n\t\tReturnType:   ast.TypeList,\n\t\tVariadic:     true,\n\t\tVariadicType: ast.TypeAny,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\tvar outputList []ast.Variable\n\n\t\t\tfor i, val := range args {\n\t\t\t\tswitch v := val.(type) {\n\t\t\t\tcase string:\n\t\t\t\t\toutputList = append(outputList, ast.Variable{Type: ast.TypeString, Value: v})\n\t\t\t\tcase []ast.Variable:\n\t\t\t\t\toutputList = append(outputList, ast.Variable{Type: ast.TypeList, Value: v})\n\t\t\t\tcase map[string]ast.Variable:\n\t\t\t\t\toutputList = append(outputList, ast.Variable{Type: ast.TypeMap, Value: v})\n\t\t\t\tdefault:\n\t\t\t\t\treturn nil, fmt.Errorf(\"unexpected type %T for argument %d in list\", v, i)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// we don't support heterogeneous types, so make sure all types match the first\n\t\t\tif len(outputList) > 0 {\n\t\t\t\tfirstType := outputList[0].Type\n\t\t\t\tfor i, v := range outputList[1:] {\n\t\t\t\t\tif v.Type != firstType {\n\t\t\t\t\t\treturn nil, fmt.Errorf(\"unexpected type %s for argument %d in list\", v.Type, i+1)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn outputList, nil\n\t\t},\n\t}\n}\n\n// interpolationFuncMap creates a map from the parameters passed\n// to it.\nfunc interpolationFuncMap() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:     []ast.Type{},\n\t\tReturnType:   ast.TypeMap,\n\t\tVariadic:     true,\n\t\tVariadicType: ast.TypeAny,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\toutputMap := make(map[string]ast.Variable)\n\n\t\t\tif len(args)%2 != 0 {\n\t\t\t\treturn nil, fmt.Errorf(\"requires an even number of arguments, got %d\", len(args))\n\t\t\t}\n\n\t\t\tvar firstType *ast.Type\n\t\t\tfor i := 0; i < len(args); i += 2 {\n\t\t\t\tkey, ok := args[i].(string)\n\t\t\t\tif !ok {\n\t\t\t\t\treturn nil, fmt.Errorf(\"argument %d represents a key, so it must be a string\", i+1)\n\t\t\t\t}\n\t\t\t\tval := args[i+1]\n\t\t\t\tvariable, err := hil.InterfaceToVariable(val)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\t// Enforce map type homogeneity\n\t\t\t\tif firstType == nil {\n\t\t\t\t\tfirstType = &variable.Type\n\t\t\t\t} else if variable.Type != *firstType {\n\t\t\t\t\treturn nil, fmt.Errorf(\"all map values must have the same type, got %s then %s\", firstType.Printable(), variable.Type.Printable())\n\t\t\t\t}\n\t\t\t\t// Check for duplicate keys\n\t\t\t\tif _, ok := outputMap[key]; ok {\n\t\t\t\t\treturn nil, fmt.Errorf(\"argument %d is a duplicate key: %q\", i+1, key)\n\t\t\t\t}\n\t\t\t\toutputMap[key] = variable\n\t\t\t}\n\n\t\t\treturn outputMap, nil\n\t\t},\n\t}\n}\n\n// interpolationFuncCompact strips a list of multi-variable values\n// (e.g. as returned by \"split\") of any empty strings.\nfunc interpolationFuncCompact() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:   []ast.Type{ast.TypeList},\n\t\tReturnType: ast.TypeList,\n\t\tVariadic:   false,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\tinputList := args[0].([]ast.Variable)\n\n\t\t\tvar outputList []string\n\t\t\tfor _, val := range inputList {\n\t\t\t\tstrVal, ok := val.Value.(string)\n\t\t\t\tif !ok {\n\t\t\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\t\t\"compact() may only be used with flat lists, this list contains elements of %s\",\n\t\t\t\t\t\tval.Type.Printable())\n\t\t\t\t}\n\t\t\t\tif strVal == \"\" {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\toutputList = append(outputList, strVal)\n\t\t\t}\n\t\t\treturn stringSliceToVariableValue(outputList), nil\n\t\t},\n\t}\n}\n\n// interpolationFuncCidrHost implements the \"cidrhost\" function that\n// fills in the host part of a CIDR range address to create a single\n// host address\nfunc interpolationFuncCidrHost() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes: []ast.Type{\n\t\t\tast.TypeString, // starting CIDR mask\n\t\t\tast.TypeInt,    // host number to insert\n\t\t},\n\t\tReturnType: ast.TypeString,\n\t\tVariadic:   false,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\thostNum := args[1].(int)\n\t\t\t_, network, err := net.ParseCIDR(args[0].(string))\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"invalid CIDR expression: %s\", err)\n\t\t\t}\n\n\t\t\tip, err := cidr.Host(network, hostNum)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\n\t\t\treturn ip.String(), nil\n\t\t},\n\t}\n}\n\n// interpolationFuncCidrNetmask implements the \"cidrnetmask\" function\n// that returns the subnet mask in IP address notation.\nfunc interpolationFuncCidrNetmask() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes: []ast.Type{\n\t\t\tast.TypeString, // CIDR mask\n\t\t},\n\t\tReturnType: ast.TypeString,\n\t\tVariadic:   false,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\t_, network, err := net.ParseCIDR(args[0].(string))\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"invalid CIDR expression: %s\", err)\n\t\t\t}\n\n\t\t\treturn net.IP(network.Mask).String(), nil\n\t\t},\n\t}\n}\n\n// interpolationFuncCidrSubnet implements the \"cidrsubnet\" function that\n// adds an additional subnet of the given length onto an existing\n// IP block expressed in CIDR notation.\nfunc interpolationFuncCidrSubnet() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes: []ast.Type{\n\t\t\tast.TypeString, // starting CIDR mask\n\t\t\tast.TypeInt,    // number of bits to extend the prefix\n\t\t\tast.TypeInt,    // network number to append to the prefix\n\t\t},\n\t\tReturnType: ast.TypeString,\n\t\tVariadic:   false,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\textraBits := args[1].(int)\n\t\t\tsubnetNum := args[2].(int)\n\t\t\t_, network, err := net.ParseCIDR(args[0].(string))\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"invalid CIDR expression: %s\", err)\n\t\t\t}\n\n\t\t\t// For portability with 32-bit systems where the subnet number\n\t\t\t// will be a 32-bit int, we only allow extension of 32 bits in\n\t\t\t// one call even if we're running on a 64-bit machine.\n\t\t\t// (Of course, this is significant only for IPv6.)\n\t\t\tif extraBits > 32 {\n\t\t\t\treturn nil, fmt.Errorf(\"may not extend prefix by more than 32 bits\")\n\t\t\t}\n\n\t\t\tnewNetwork, err := cidr.Subnet(network, extraBits, subnetNum)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\n\t\t\treturn newNetwork.String(), nil\n\t\t},\n\t}\n}\n\n// interpolationFuncCoalesce implements the \"coalesce\" function that\n// returns the first non null / empty string from the provided input\nfunc interpolationFuncCoalesce() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:     []ast.Type{ast.TypeString},\n\t\tReturnType:   ast.TypeString,\n\t\tVariadic:     true,\n\t\tVariadicType: ast.TypeString,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\tif len(args) < 2 {\n\t\t\t\treturn nil, fmt.Errorf(\"must provide at least two arguments\")\n\t\t\t}\n\t\t\tfor _, arg := range args {\n\t\t\t\targument := arg.(string)\n\n\t\t\t\tif argument != \"\" {\n\t\t\t\t\treturn argument, nil\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn \"\", nil\n\t\t},\n\t}\n}\n\n// interpolationFuncCoalesceList implements the \"coalescelist\" function that\n// returns the first non empty list from the provided input\nfunc interpolationFuncCoalesceList() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:     []ast.Type{ast.TypeList},\n\t\tReturnType:   ast.TypeList,\n\t\tVariadic:     true,\n\t\tVariadicType: ast.TypeList,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\tif len(args) < 2 {\n\t\t\t\treturn nil, fmt.Errorf(\"must provide at least two arguments\")\n\t\t\t}\n\t\t\tfor _, arg := range args {\n\t\t\t\targument := arg.([]ast.Variable)\n\n\t\t\t\tif len(argument) > 0 {\n\t\t\t\t\treturn argument, nil\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn make([]ast.Variable, 0), nil\n\t\t},\n\t}\n}\n\n// interpolationFuncContains returns true if an element is in the list\n// and return false otherwise\nfunc interpolationFuncContains() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:   []ast.Type{ast.TypeList, ast.TypeString},\n\t\tReturnType: ast.TypeBool,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\t_, err := interpolationFuncIndex().Callback(args)\n\t\t\tif err != nil {\n\t\t\t\treturn false, nil\n\t\t\t}\n\t\t\treturn true, nil\n\t\t},\n\t}\n}\n\n// interpolationFuncConcat implements the \"concat\" function that concatenates\n// multiple lists.\nfunc interpolationFuncConcat() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:     []ast.Type{ast.TypeList},\n\t\tReturnType:   ast.TypeList,\n\t\tVariadic:     true,\n\t\tVariadicType: ast.TypeList,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\tvar outputList []ast.Variable\n\n\t\t\tfor _, arg := range args {\n\t\t\t\tfor _, v := range arg.([]ast.Variable) {\n\t\t\t\t\tswitch v.Type {\n\t\t\t\t\tcase ast.TypeString:\n\t\t\t\t\t\toutputList = append(outputList, v)\n\t\t\t\t\tcase ast.TypeList:\n\t\t\t\t\t\toutputList = append(outputList, v)\n\t\t\t\t\tcase ast.TypeMap:\n\t\t\t\t\t\toutputList = append(outputList, v)\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn nil, fmt.Errorf(\"concat() does not support lists of %s\", v.Type.Printable())\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// we don't support heterogeneous types, so make sure all types match the first\n\t\t\tif len(outputList) > 0 {\n\t\t\t\tfirstType := outputList[0].Type\n\t\t\t\tfor _, v := range outputList[1:] {\n\t\t\t\t\tif v.Type != firstType {\n\t\t\t\t\t\treturn nil, fmt.Errorf(\"unexpected %s in list of %s\", v.Type.Printable(), firstType.Printable())\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn outputList, nil\n\t\t},\n\t}\n}\n\n// interpolationFuncPow returns base x exponential of y.\nfunc interpolationFuncPow() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:   []ast.Type{ast.TypeFloat, ast.TypeFloat},\n\t\tReturnType: ast.TypeFloat,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\treturn math.Pow(args[0].(float64), args[1].(float64)), nil\n\t\t},\n\t}\n}\n\n// interpolationFuncFile implements the \"file\" function that allows\n// loading contents from a file.\nfunc interpolationFuncFile() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:   []ast.Type{ast.TypeString},\n\t\tReturnType: ast.TypeString,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\tpath, err := homedir.Expand(args[0].(string))\n\t\t\tif err != nil {\n\t\t\t\treturn \"\", err\n\t\t\t}\n\t\t\tdata, err := ioutil.ReadFile(path)\n\t\t\tif err != nil {\n\t\t\t\treturn \"\", err\n\t\t\t}\n\n\t\t\treturn string(data), nil\n\t\t},\n\t}\n}\n\n// interpolationFuncFormat implements the \"format\" function that does\n// string formatting.\nfunc interpolationFuncFormat() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:     []ast.Type{ast.TypeString},\n\t\tVariadic:     true,\n\t\tVariadicType: ast.TypeAny,\n\t\tReturnType:   ast.TypeString,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\tformat := args[0].(string)\n\t\t\treturn fmt.Sprintf(format, args[1:]...), nil\n\t\t},\n\t}\n}\n\n// interpolationFuncMax returns the maximum of the numeric arguments\nfunc interpolationFuncMax() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:     []ast.Type{ast.TypeFloat},\n\t\tReturnType:   ast.TypeFloat,\n\t\tVariadic:     true,\n\t\tVariadicType: ast.TypeFloat,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\tmax := args[0].(float64)\n\n\t\t\tfor i := 1; i < len(args); i++ {\n\t\t\t\tmax = math.Max(max, args[i].(float64))\n\t\t\t}\n\n\t\t\treturn max, nil\n\t\t},\n\t}\n}\n\n// interpolationFuncMin returns the minimum of the numeric arguments\nfunc interpolationFuncMin() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:     []ast.Type{ast.TypeFloat},\n\t\tReturnType:   ast.TypeFloat,\n\t\tVariadic:     true,\n\t\tVariadicType: ast.TypeFloat,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\tmin := args[0].(float64)\n\n\t\t\tfor i := 1; i < len(args); i++ {\n\t\t\t\tmin = math.Min(min, args[i].(float64))\n\t\t\t}\n\n\t\t\treturn min, nil\n\t\t},\n\t}\n}\n\n// interpolationFuncPathExpand will expand any `~`'s found with the full file path\nfunc interpolationFuncPathExpand() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:   []ast.Type{ast.TypeString},\n\t\tReturnType: ast.TypeString,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\treturn homedir.Expand(args[0].(string))\n\t\t},\n\t}\n}\n\n// interpolationFuncCeil returns the the least integer value greater than or equal to the argument\nfunc interpolationFuncCeil() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:   []ast.Type{ast.TypeFloat},\n\t\tReturnType: ast.TypeInt,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\treturn int(math.Ceil(args[0].(float64))), nil\n\t\t},\n\t}\n}\n\n// interpolationFuncLog returns the logarithnm.\nfunc interpolationFuncLog() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:   []ast.Type{ast.TypeFloat, ast.TypeFloat},\n\t\tReturnType: ast.TypeFloat,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\treturn math.Log(args[0].(float64)) / math.Log(args[1].(float64)), nil\n\t\t},\n\t}\n}\n\n// interpolationFuncChomp removes trailing newlines from the given string\nfunc interpolationFuncChomp() ast.Function {\n\tnewlines := regexp.MustCompile(`(?:\\r\\n?|\\n)*\\z`)\n\treturn ast.Function{\n\t\tArgTypes:   []ast.Type{ast.TypeString},\n\t\tReturnType: ast.TypeString,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\treturn newlines.ReplaceAllString(args[0].(string), \"\"), nil\n\t\t},\n\t}\n}\n\n// interpolationFuncFloorreturns returns the greatest integer value less than or equal to the argument\nfunc interpolationFuncFloor() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:   []ast.Type{ast.TypeFloat},\n\t\tReturnType: ast.TypeInt,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\treturn int(math.Floor(args[0].(float64))), nil\n\t\t},\n\t}\n}\n\nfunc interpolationFuncZipMap() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes: []ast.Type{\n\t\t\tast.TypeList, // Keys\n\t\t\tast.TypeList, // Values\n\t\t},\n\t\tReturnType: ast.TypeMap,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\tkeys := args[0].([]ast.Variable)\n\t\t\tvalues := args[1].([]ast.Variable)\n\n\t\t\tif len(keys) != len(values) {\n\t\t\t\treturn nil, fmt.Errorf(\"count of keys (%d) does not match count of values (%d)\",\n\t\t\t\t\tlen(keys), len(values))\n\t\t\t}\n\n\t\t\tfor i, val := range keys {\n\t\t\t\tif val.Type != ast.TypeString {\n\t\t\t\t\treturn nil, fmt.Errorf(\"keys must be strings. value at position %d is %s\",\n\t\t\t\t\t\ti, val.Type.Printable())\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tresult := map[string]ast.Variable{}\n\t\t\tfor i := 0; i < len(keys); i++ {\n\t\t\t\tresult[keys[i].Value.(string)] = values[i]\n\t\t\t}\n\n\t\t\treturn result, nil\n\t\t},\n\t}\n}\n\n// interpolationFuncFormatList implements the \"formatlist\" function that does\n// string formatting on lists.\nfunc interpolationFuncFormatList() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:     []ast.Type{ast.TypeAny},\n\t\tVariadic:     true,\n\t\tVariadicType: ast.TypeAny,\n\t\tReturnType:   ast.TypeList,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\t// Make a copy of the variadic part of args\n\t\t\t// to avoid modifying the original.\n\t\t\tvarargs := make([]interface{}, len(args)-1)\n\t\t\tcopy(varargs, args[1:])\n\n\t\t\t// Verify we have some arguments\n\t\t\tif len(varargs) == 0 {\n\t\t\t\treturn nil, fmt.Errorf(\"no arguments to formatlist\")\n\t\t\t}\n\n\t\t\t// Convert arguments that are lists into slices.\n\t\t\t// Confirm along the way that all lists have the same length (n).\n\t\t\tvar n int\n\t\t\tlistSeen := false\n\t\t\tfor i := 1; i < len(args); i++ {\n\t\t\t\ts, ok := args[i].([]ast.Variable)\n\t\t\t\tif !ok {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\t// Mark that we've seen at least one list\n\t\t\t\tlistSeen = true\n\n\t\t\t\t// Convert the ast.Variable to a slice of strings\n\t\t\t\tparts, err := listVariableValueToStringSlice(s)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\n\t\t\t\t// otherwise the list is sent down to be indexed\n\t\t\t\tvarargs[i-1] = parts\n\n\t\t\t\t// Check length\n\t\t\t\tif n == 0 {\n\t\t\t\t\t// first list we've seen\n\t\t\t\t\tn = len(parts)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif n != len(parts) {\n\t\t\t\t\treturn nil, fmt.Errorf(\"format: mismatched list lengths: %d != %d\", n, len(parts))\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// If we didn't see a list this is an error because we\n\t\t\t// can't determine the return value length.\n\t\t\tif !listSeen {\n\t\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\t\"formatlist requires at least one list argument\")\n\t\t\t}\n\n\t\t\t// Do the formatting.\n\t\t\tformat := args[0].(string)\n\n\t\t\t// Generate a list of formatted strings.\n\t\t\tlist := make([]string, n)\n\t\t\tfmtargs := make([]interface{}, len(varargs))\n\t\t\tfor i := 0; i < n; i++ {\n\t\t\t\tfor j, arg := range varargs {\n\t\t\t\t\tswitch arg := arg.(type) {\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tfmtargs[j] = arg\n\t\t\t\t\tcase []string:\n\t\t\t\t\t\tfmtargs[j] = arg[i]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tlist[i] = fmt.Sprintf(format, fmtargs...)\n\t\t\t}\n\t\t\treturn stringSliceToVariableValue(list), nil\n\t\t},\n\t}\n}\n\n// interpolationFuncIndent indents a multi-line string with the\n// specified number of spaces\nfunc interpolationFuncIndent() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:   []ast.Type{ast.TypeInt, ast.TypeString},\n\t\tReturnType: ast.TypeString,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\tspaces := args[0].(int)\n\t\t\tdata := args[1].(string)\n\t\t\tpad := strings.Repeat(\" \", spaces)\n\t\t\treturn strings.Replace(data, \"\\n\", \"\\n\"+pad, -1), nil\n\t\t},\n\t}\n}\n\n// interpolationFuncIndex implements the \"index\" function that allows one to\n// find the index of a specific element in a list\nfunc interpolationFuncIndex() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:   []ast.Type{ast.TypeList, ast.TypeString},\n\t\tReturnType: ast.TypeInt,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\thaystack := args[0].([]ast.Variable)\n\t\t\tneedle := args[1].(string)\n\t\t\tfor index, element := range haystack {\n\t\t\t\tif needle == element.Value {\n\t\t\t\t\treturn index, nil\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn nil, fmt.Errorf(\"Could not find '%s' in '%s'\", needle, haystack)\n\t\t},\n\t}\n}\n\n// interpolationFuncBasename implements the \"dirname\" function.\nfunc interpolationFuncDirname() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:   []ast.Type{ast.TypeString},\n\t\tReturnType: ast.TypeString,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\treturn filepath.Dir(args[0].(string)), nil\n\t\t},\n\t}\n}\n\n// interpolationFuncDistinct implements the \"distinct\" function that\n// removes duplicate elements from a list.\nfunc interpolationFuncDistinct() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:     []ast.Type{ast.TypeList},\n\t\tReturnType:   ast.TypeList,\n\t\tVariadic:     true,\n\t\tVariadicType: ast.TypeList,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\tvar list []string\n\n\t\t\tif len(args) != 1 {\n\t\t\t\treturn nil, fmt.Errorf(\"accepts only one argument.\")\n\t\t\t}\n\n\t\t\tif argument, ok := args[0].([]ast.Variable); ok {\n\t\t\t\tfor _, element := range argument {\n\t\t\t\t\tif element.Type != ast.TypeString {\n\t\t\t\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\t\t\t\"only works for flat lists, this list contains elements of %s\",\n\t\t\t\t\t\t\telement.Type.Printable())\n\t\t\t\t\t}\n\t\t\t\t\tlist = appendIfMissing(list, element.Value.(string))\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn stringSliceToVariableValue(list), nil\n\t\t},\n\t}\n}\n\n// helper function to add an element to a list, if it does not already exsit\nfunc appendIfMissing(slice []string, element string) []string {\n\tfor _, ele := range slice {\n\t\tif ele == element {\n\t\t\treturn slice\n\t\t}\n\t}\n\treturn append(slice, element)\n}\n\n// for two lists `keys` and `values` of equal length, returns all elements\n// from `values` where the corresponding element from `keys` is in `searchset`.\nfunc interpolationFuncMatchKeys() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:   []ast.Type{ast.TypeList, ast.TypeList, ast.TypeList},\n\t\tReturnType: ast.TypeList,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\toutput := make([]ast.Variable, 0)\n\n\t\t\tvalues, _ := args[0].([]ast.Variable)\n\t\t\tkeys, _ := args[1].([]ast.Variable)\n\t\t\tsearchset, _ := args[2].([]ast.Variable)\n\n\t\t\tif len(keys) != len(values) {\n\t\t\t\treturn nil, fmt.Errorf(\"length of keys and values should be equal\")\n\t\t\t}\n\n\t\t\tfor i, key := range keys {\n\t\t\t\tfor _, search := range searchset {\n\t\t\t\t\tif res, err := compareSimpleVariables(key, search); err != nil {\n\t\t\t\t\t\treturn nil, err\n\t\t\t\t\t} else if res == true {\n\t\t\t\t\t\toutput = append(output, values[i])\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// if searchset is empty, then output is an empty list as well.\n\t\t\t// if we haven't matched any key, then output is an empty list.\n\t\t\treturn output, nil\n\t\t},\n\t}\n}\n\n// compare two variables of the same type, i.e. non complex one, such as TypeList or TypeMap\nfunc compareSimpleVariables(a, b ast.Variable) (bool, error) {\n\tif a.Type != b.Type {\n\t\treturn false, fmt.Errorf(\n\t\t\t\"won't compare items of different types %s and %s\",\n\t\t\ta.Type.Printable(), b.Type.Printable())\n\t}\n\tswitch a.Type {\n\tcase ast.TypeString:\n\t\treturn a.Value.(string) == b.Value.(string), nil\n\tdefault:\n\t\treturn false, fmt.Errorf(\n\t\t\t\"can't compare items of type %s\",\n\t\t\ta.Type.Printable())\n\t}\n}\n\n// interpolationFuncJoin implements the \"join\" function that allows\n// multi-variable values to be joined by some character.\nfunc interpolationFuncJoin() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:     []ast.Type{ast.TypeString},\n\t\tVariadic:     true,\n\t\tVariadicType: ast.TypeList,\n\t\tReturnType:   ast.TypeString,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\tvar list []string\n\n\t\t\tif len(args) < 2 {\n\t\t\t\treturn nil, fmt.Errorf(\"not enough arguments to join()\")\n\t\t\t}\n\n\t\t\tfor _, arg := range args[1:] {\n\t\t\t\tfor _, part := range arg.([]ast.Variable) {\n\t\t\t\t\tif part.Type != ast.TypeString {\n\t\t\t\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\t\t\t\"only works on flat lists, this list contains elements of %s\",\n\t\t\t\t\t\t\tpart.Type.Printable())\n\t\t\t\t\t}\n\t\t\t\t\tlist = append(list, part.Value.(string))\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn strings.Join(list, args[0].(string)), nil\n\t\t},\n\t}\n}\n\n// interpolationFuncJSONEncode implements the \"jsonencode\" function that encodes\n// a string, list, or map as its JSON representation.\nfunc interpolationFuncJSONEncode() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:   []ast.Type{ast.TypeAny},\n\t\tReturnType: ast.TypeString,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\tvar toEncode interface{}\n\n\t\t\tswitch typedArg := args[0].(type) {\n\t\t\tcase string:\n\t\t\t\ttoEncode = typedArg\n\n\t\t\tcase []ast.Variable:\n\t\t\t\tstrings := make([]string, len(typedArg))\n\n\t\t\t\tfor i, v := range typedArg {\n\t\t\t\t\tif v.Type != ast.TypeString {\n\t\t\t\t\t\tvariable, _ := hil.InterfaceToVariable(typedArg)\n\t\t\t\t\t\ttoEncode, _ = hil.VariableToInterface(variable)\n\n\t\t\t\t\t\tjEnc, err := json.Marshal(toEncode)\n\t\t\t\t\t\tif err != nil {\n\t\t\t\t\t\t\treturn \"\", fmt.Errorf(\"failed to encode JSON data '%s'\", toEncode)\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn string(jEnc), nil\n\n\t\t\t\t\t}\n\t\t\t\t\tstrings[i] = v.Value.(string)\n\t\t\t\t}\n\t\t\t\ttoEncode = strings\n\n\t\t\tcase map[string]ast.Variable:\n\t\t\t\tstringMap := make(map[string]string)\n\t\t\t\tfor k, v := range typedArg {\n\t\t\t\t\tif v.Type != ast.TypeString {\n\t\t\t\t\t\tvariable, _ := hil.InterfaceToVariable(typedArg)\n\t\t\t\t\t\ttoEncode, _ = hil.VariableToInterface(variable)\n\n\t\t\t\t\t\tjEnc, err := json.Marshal(toEncode)\n\t\t\t\t\t\tif err != nil {\n\t\t\t\t\t\t\treturn \"\", fmt.Errorf(\"failed to encode JSON data '%s'\", toEncode)\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn string(jEnc), nil\n\t\t\t\t\t}\n\t\t\t\t\tstringMap[k] = v.Value.(string)\n\t\t\t\t}\n\t\t\t\ttoEncode = stringMap\n\n\t\t\tdefault:\n\t\t\t\treturn \"\", fmt.Errorf(\"unknown type for JSON encoding: %T\", args[0])\n\t\t\t}\n\n\t\t\tjEnc, err := json.Marshal(toEncode)\n\t\t\tif err != nil {\n\t\t\t\treturn \"\", fmt.Errorf(\"failed to encode JSON data '%s'\", toEncode)\n\t\t\t}\n\t\t\treturn string(jEnc), nil\n\t\t},\n\t}\n}\n\n// interpolationFuncReplace implements the \"replace\" function that does\n// string replacement.\nfunc interpolationFuncReplace() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:   []ast.Type{ast.TypeString, ast.TypeString, ast.TypeString},\n\t\tReturnType: ast.TypeString,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\ts := args[0].(string)\n\t\t\tsearch := args[1].(string)\n\t\t\treplace := args[2].(string)\n\n\t\t\t// We search/replace using a regexp if the string is surrounded\n\t\t\t// in forward slashes.\n\t\t\tif len(search) > 1 && search[0] == '/' && search[len(search)-1] == '/' {\n\t\t\t\tre, err := regexp.Compile(search[1 : len(search)-1])\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\n\t\t\t\treturn re.ReplaceAllString(s, replace), nil\n\t\t\t}\n\n\t\t\treturn strings.Replace(s, search, replace, -1), nil\n\t\t},\n\t}\n}\n\n// interpolationFuncReverse implements the \"reverse\" function that does list reversal\nfunc interpolationFuncReverse() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:   []ast.Type{ast.TypeList},\n\t\tReturnType: ast.TypeList,\n\t\tVariadic:   false,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\tinputList := args[0].([]ast.Variable)\n\n\t\t\treversedList := make([]ast.Variable, len(inputList))\n\t\t\tfor idx := range inputList {\n\t\t\t\treversedList[len(inputList)-1-idx] = inputList[idx]\n\t\t\t}\n\n\t\t\treturn reversedList, nil\n\t\t},\n\t}\n}\n\nfunc interpolationFuncLength() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:   []ast.Type{ast.TypeAny},\n\t\tReturnType: ast.TypeInt,\n\t\tVariadic:   false,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\tsubject := args[0]\n\n\t\t\tswitch typedSubject := subject.(type) {\n\t\t\tcase string:\n\t\t\t\treturn len(typedSubject), nil\n\t\t\tcase []ast.Variable:\n\t\t\t\treturn len(typedSubject), nil\n\t\t\tcase map[string]ast.Variable:\n\t\t\t\treturn len(typedSubject), nil\n\t\t\t}\n\n\t\t\treturn 0, fmt.Errorf(\"arguments to length() must be a string, list, or map\")\n\t\t},\n\t}\n}\n\nfunc interpolationFuncSignum() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:   []ast.Type{ast.TypeInt},\n\t\tReturnType: ast.TypeInt,\n\t\tVariadic:   false,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\tnum := args[0].(int)\n\t\t\tswitch {\n\t\t\tcase num < 0:\n\t\t\t\treturn -1, nil\n\t\t\tcase num > 0:\n\t\t\t\treturn +1, nil\n\t\t\tdefault:\n\t\t\t\treturn 0, nil\n\t\t\t}\n\t\t},\n\t}\n}\n\n// interpolationFuncSlice returns a portion of the input list between from, inclusive and to, exclusive.\nfunc interpolationFuncSlice() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes: []ast.Type{\n\t\t\tast.TypeList, // inputList\n\t\t\tast.TypeInt,  // from\n\t\t\tast.TypeInt,  // to\n\t\t},\n\t\tReturnType: ast.TypeList,\n\t\tVariadic:   false,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\tinputList := args[0].([]ast.Variable)\n\t\t\tfrom := args[1].(int)\n\t\t\tto := args[2].(int)\n\n\t\t\tif from < 0 {\n\t\t\t\treturn nil, fmt.Errorf(\"from index must be >= 0\")\n\t\t\t}\n\t\t\tif to > len(inputList) {\n\t\t\t\treturn nil, fmt.Errorf(\"to index must be <= length of the input list\")\n\t\t\t}\n\t\t\tif from > to {\n\t\t\t\treturn nil, fmt.Errorf(\"from index must be <= to index\")\n\t\t\t}\n\n\t\t\tvar outputList []ast.Variable\n\t\t\tfor i, val := range inputList {\n\t\t\t\tif i >= from && i < to {\n\t\t\t\t\toutputList = append(outputList, val)\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn outputList, nil\n\t\t},\n\t}\n}\n\n// interpolationFuncSort sorts a list of a strings lexographically\nfunc interpolationFuncSort() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:   []ast.Type{ast.TypeList},\n\t\tReturnType: ast.TypeList,\n\t\tVariadic:   false,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\tinputList := args[0].([]ast.Variable)\n\n\t\t\t// Ensure that all the list members are strings and\n\t\t\t// create a string slice from them\n\t\t\tmembers := make([]string, len(inputList))\n\t\t\tfor i, val := range inputList {\n\t\t\t\tif val.Type != ast.TypeString {\n\t\t\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\t\t\"sort() may only be used with lists of strings - %s at index %d\",\n\t\t\t\t\t\tval.Type.String(), i)\n\t\t\t\t}\n\n\t\t\t\tmembers[i] = val.Value.(string)\n\t\t\t}\n\n\t\t\tsort.Strings(members)\n\t\t\treturn stringSliceToVariableValue(members), nil\n\t\t},\n\t}\n}\n\n// interpolationFuncSplit implements the \"split\" function that allows\n// strings to split into multi-variable values\nfunc interpolationFuncSplit() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:   []ast.Type{ast.TypeString, ast.TypeString},\n\t\tReturnType: ast.TypeList,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\tsep := args[0].(string)\n\t\t\ts := args[1].(string)\n\t\t\telements := strings.Split(s, sep)\n\t\t\treturn stringSliceToVariableValue(elements), nil\n\t\t},\n\t}\n}\n\n// interpolationFuncLookup implements the \"lookup\" function that allows\n// dynamic lookups of map types within a Terraform configuration.\nfunc interpolationFuncLookup(vs map[string]ast.Variable) ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:     []ast.Type{ast.TypeMap, ast.TypeString},\n\t\tReturnType:   ast.TypeString,\n\t\tVariadic:     true,\n\t\tVariadicType: ast.TypeString,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\tdefaultValue := \"\"\n\t\t\tdefaultValueSet := false\n\t\t\tif len(args) > 2 {\n\t\t\t\tdefaultValue = args[2].(string)\n\t\t\t\tdefaultValueSet = true\n\t\t\t}\n\t\t\tif len(args) > 3 {\n\t\t\t\treturn \"\", fmt.Errorf(\"lookup() takes no more than three arguments\")\n\t\t\t}\n\t\t\tindex := args[1].(string)\n\t\t\tmapVar := args[0].(map[string]ast.Variable)\n\n\t\t\tv, ok := mapVar[index]\n\t\t\tif !ok {\n\t\t\t\tif defaultValueSet {\n\t\t\t\t\treturn defaultValue, nil\n\t\t\t\t} else {\n\t\t\t\t\treturn \"\", fmt.Errorf(\n\t\t\t\t\t\t\"lookup failed to find '%s'\",\n\t\t\t\t\t\targs[1].(string))\n\t\t\t\t}\n\t\t\t}\n\t\t\tif v.Type != ast.TypeString {\n\t\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\t\"lookup() may only be used with flat maps, this map contains elements of %s\",\n\t\t\t\t\tv.Type.Printable())\n\t\t\t}\n\n\t\t\treturn v.Value.(string), nil\n\t\t},\n\t}\n}\n\n// interpolationFuncElement implements the \"element\" function that allows\n// a specific index to be looked up in a multi-variable value. Note that this will\n// wrap if the index is larger than the number of elements in the multi-variable value.\nfunc interpolationFuncElement() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:   []ast.Type{ast.TypeList, ast.TypeString},\n\t\tReturnType: ast.TypeString,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\tlist := args[0].([]ast.Variable)\n\t\t\tif len(list) == 0 {\n\t\t\t\treturn nil, fmt.Errorf(\"element() may not be used with an empty list\")\n\t\t\t}\n\n\t\t\tindex, err := strconv.Atoi(args[1].(string))\n\t\t\tif err != nil || index < 0 {\n\t\t\t\treturn \"\", fmt.Errorf(\n\t\t\t\t\t\"invalid number for index, got %s\", args[1])\n\t\t\t}\n\n\t\t\tresolvedIndex := index % len(list)\n\n\t\t\tv := list[resolvedIndex]\n\t\t\tif v.Type != ast.TypeString {\n\t\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\t\"element() may only be used with flat lists, this list contains elements of %s\",\n\t\t\t\t\tv.Type.Printable())\n\t\t\t}\n\t\t\treturn v.Value, nil\n\t\t},\n\t}\n}\n\n// returns the `list` items chunked by `size`.\nfunc interpolationFuncChunklist() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes: []ast.Type{\n\t\t\tast.TypeList, // inputList\n\t\t\tast.TypeInt,  // size\n\t\t},\n\t\tReturnType: ast.TypeList,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\toutput := make([]ast.Variable, 0)\n\n\t\t\tvalues, _ := args[0].([]ast.Variable)\n\t\t\tsize, _ := args[1].(int)\n\n\t\t\t// errors if size is negative\n\t\t\tif size < 0 {\n\t\t\t\treturn nil, fmt.Errorf(\"The size argument must be positive\")\n\t\t\t}\n\n\t\t\t// if size is 0, returns a list made of the initial list\n\t\t\tif size == 0 {\n\t\t\t\toutput = append(output, ast.Variable{\n\t\t\t\t\tType:  ast.TypeList,\n\t\t\t\t\tValue: values,\n\t\t\t\t})\n\t\t\t\treturn output, nil\n\t\t\t}\n\n\t\t\tvariables := make([]ast.Variable, 0)\n\t\t\tchunk := ast.Variable{\n\t\t\t\tType:  ast.TypeList,\n\t\t\t\tValue: variables,\n\t\t\t}\n\t\t\tl := len(values)\n\t\t\tfor i, v := range values {\n\t\t\t\tvariables = append(variables, v)\n\n\t\t\t\t// Chunk when index isn't 0, or when reaching the values's length\n\t\t\t\tif (i+1)%size == 0 || (i+1) == l {\n\t\t\t\t\tchunk.Value = variables\n\t\t\t\t\toutput = append(output, chunk)\n\t\t\t\t\tvariables = make([]ast.Variable, 0)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn output, nil\n\t\t},\n\t}\n}\n\n// interpolationFuncKeys implements the \"keys\" function that yields a list of\n// keys of map types within a Terraform configuration.\nfunc interpolationFuncKeys(vs map[string]ast.Variable) ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:   []ast.Type{ast.TypeMap},\n\t\tReturnType: ast.TypeList,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\tmapVar := args[0].(map[string]ast.Variable)\n\t\t\tkeys := make([]string, 0)\n\n\t\t\tfor k, _ := range mapVar {\n\t\t\t\tkeys = append(keys, k)\n\t\t\t}\n\n\t\t\tsort.Strings(keys)\n\n\t\t\t// Keys are guaranteed to be strings\n\t\t\treturn stringSliceToVariableValue(keys), nil\n\t\t},\n\t}\n}\n\n// interpolationFuncValues implements the \"values\" function that yields a list of\n// keys of map types within a Terraform configuration.\nfunc interpolationFuncValues(vs map[string]ast.Variable) ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:   []ast.Type{ast.TypeMap},\n\t\tReturnType: ast.TypeList,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\tmapVar := args[0].(map[string]ast.Variable)\n\t\t\tkeys := make([]string, 0)\n\n\t\t\tfor k, _ := range mapVar {\n\t\t\t\tkeys = append(keys, k)\n\t\t\t}\n\n\t\t\tsort.Strings(keys)\n\n\t\t\tvalues := make([]string, len(keys))\n\t\t\tfor index, key := range keys {\n\t\t\t\tif value, ok := mapVar[key].Value.(string); ok {\n\t\t\t\t\tvalues[index] = value\n\t\t\t\t} else {\n\t\t\t\t\treturn \"\", fmt.Errorf(\"values(): %q has element with bad type %s\",\n\t\t\t\t\t\tkey, mapVar[key].Type)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvariable, err := hil.InterfaceToVariable(values)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\n\t\t\treturn variable.Value, nil\n\t\t},\n\t}\n}\n\n// interpolationFuncBasename implements the \"basename\" function.\nfunc interpolationFuncBasename() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:   []ast.Type{ast.TypeString},\n\t\tReturnType: ast.TypeString,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\treturn filepath.Base(args[0].(string)), nil\n\t\t},\n\t}\n}\n\n// interpolationFuncBase64Encode implements the \"base64encode\" function that\n// allows Base64 encoding.\nfunc interpolationFuncBase64Encode() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:   []ast.Type{ast.TypeString},\n\t\tReturnType: ast.TypeString,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\ts := args[0].(string)\n\t\t\treturn base64.StdEncoding.EncodeToString([]byte(s)), nil\n\t\t},\n\t}\n}\n\n// interpolationFuncBase64Decode implements the \"base64decode\" function that\n// allows Base64 decoding.\nfunc interpolationFuncBase64Decode() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:   []ast.Type{ast.TypeString},\n\t\tReturnType: ast.TypeString,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\ts := args[0].(string)\n\t\t\tsDec, err := base64.StdEncoding.DecodeString(s)\n\t\t\tif err != nil {\n\t\t\t\treturn \"\", fmt.Errorf(\"failed to decode base64 data '%s'\", s)\n\t\t\t}\n\t\t\treturn string(sDec), nil\n\t\t},\n\t}\n}\n\n// interpolationFuncBase64Gzip implements the \"gzip\" function that allows gzip\n// compression encoding the result using base64\nfunc interpolationFuncBase64Gzip() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:   []ast.Type{ast.TypeString},\n\t\tReturnType: ast.TypeString,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\ts := args[0].(string)\n\n\t\t\tvar b bytes.Buffer\n\t\t\tgz := gzip.NewWriter(&b)\n\t\t\tif _, err := gz.Write([]byte(s)); err != nil {\n\t\t\t\treturn \"\", fmt.Errorf(\"failed to write gzip raw data: '%s'\", s)\n\t\t\t}\n\t\t\tif err := gz.Flush(); err != nil {\n\t\t\t\treturn \"\", fmt.Errorf(\"failed to flush gzip writer: '%s'\", s)\n\t\t\t}\n\t\t\tif err := gz.Close(); err != nil {\n\t\t\t\treturn \"\", fmt.Errorf(\"failed to close gzip writer: '%s'\", s)\n\t\t\t}\n\n\t\t\treturn base64.StdEncoding.EncodeToString(b.Bytes()), nil\n\t\t},\n\t}\n}\n\n// interpolationFuncLower implements the \"lower\" function that does\n// string lower casing.\nfunc interpolationFuncLower() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:   []ast.Type{ast.TypeString},\n\t\tReturnType: ast.TypeString,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\ttoLower := args[0].(string)\n\t\t\treturn strings.ToLower(toLower), nil\n\t\t},\n\t}\n}\n\nfunc interpolationFuncMd5() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:   []ast.Type{ast.TypeString},\n\t\tReturnType: ast.TypeString,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\ts := args[0].(string)\n\t\t\th := md5.New()\n\t\t\th.Write([]byte(s))\n\t\t\thash := hex.EncodeToString(h.Sum(nil))\n\t\t\treturn hash, nil\n\t\t},\n\t}\n}\n\nfunc interpolationFuncMerge() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:     []ast.Type{ast.TypeMap},\n\t\tReturnType:   ast.TypeMap,\n\t\tVariadic:     true,\n\t\tVariadicType: ast.TypeMap,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\toutputMap := make(map[string]ast.Variable)\n\n\t\t\tfor _, arg := range args {\n\t\t\t\tfor k, v := range arg.(map[string]ast.Variable) {\n\t\t\t\t\toutputMap[k] = v\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn outputMap, nil\n\t\t},\n\t}\n}\n\n// interpolationFuncUpper implements the \"upper\" function that does\n// string upper casing.\nfunc interpolationFuncUpper() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:   []ast.Type{ast.TypeString},\n\t\tReturnType: ast.TypeString,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\ttoUpper := args[0].(string)\n\t\t\treturn strings.ToUpper(toUpper), nil\n\t\t},\n\t}\n}\n\nfunc interpolationFuncSha1() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:   []ast.Type{ast.TypeString},\n\t\tReturnType: ast.TypeString,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\ts := args[0].(string)\n\t\t\th := sha1.New()\n\t\t\th.Write([]byte(s))\n\t\t\thash := hex.EncodeToString(h.Sum(nil))\n\t\t\treturn hash, nil\n\t\t},\n\t}\n}\n\n// hexadecimal representation of sha256 sum\nfunc interpolationFuncSha256() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:   []ast.Type{ast.TypeString},\n\t\tReturnType: ast.TypeString,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\ts := args[0].(string)\n\t\t\th := sha256.New()\n\t\t\th.Write([]byte(s))\n\t\t\thash := hex.EncodeToString(h.Sum(nil))\n\t\t\treturn hash, nil\n\t\t},\n\t}\n}\n\nfunc interpolationFuncSha512() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:   []ast.Type{ast.TypeString},\n\t\tReturnType: ast.TypeString,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\ts := args[0].(string)\n\t\t\th := sha512.New()\n\t\t\th.Write([]byte(s))\n\t\t\thash := hex.EncodeToString(h.Sum(nil))\n\t\t\treturn hash, nil\n\t\t},\n\t}\n}\n\nfunc interpolationFuncTrimSpace() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:   []ast.Type{ast.TypeString},\n\t\tReturnType: ast.TypeString,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\ttrimSpace := args[0].(string)\n\t\t\treturn strings.TrimSpace(trimSpace), nil\n\t\t},\n\t}\n}\n\nfunc interpolationFuncBase64Sha256() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:   []ast.Type{ast.TypeString},\n\t\tReturnType: ast.TypeString,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\ts := args[0].(string)\n\t\t\th := sha256.New()\n\t\t\th.Write([]byte(s))\n\t\t\tshaSum := h.Sum(nil)\n\t\t\tencoded := base64.StdEncoding.EncodeToString(shaSum[:])\n\t\t\treturn encoded, nil\n\t\t},\n\t}\n}\n\nfunc interpolationFuncBase64Sha512() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:   []ast.Type{ast.TypeString},\n\t\tReturnType: ast.TypeString,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\ts := args[0].(string)\n\t\t\th := sha512.New()\n\t\t\th.Write([]byte(s))\n\t\t\tshaSum := h.Sum(nil)\n\t\t\tencoded := base64.StdEncoding.EncodeToString(shaSum[:])\n\t\t\treturn encoded, nil\n\t\t},\n\t}\n}\n\nfunc interpolationFuncBcrypt() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:     []ast.Type{ast.TypeString},\n\t\tVariadic:     true,\n\t\tVariadicType: ast.TypeString,\n\t\tReturnType:   ast.TypeString,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\tdefaultCost := 10\n\n\t\t\tif len(args) > 1 {\n\t\t\t\tcostStr := args[1].(string)\n\t\t\t\tcost, err := strconv.Atoi(costStr)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn \"\", err\n\t\t\t\t}\n\n\t\t\t\tdefaultCost = cost\n\t\t\t}\n\n\t\t\tif len(args) > 2 {\n\t\t\t\treturn \"\", fmt.Errorf(\"bcrypt() takes no more than two arguments\")\n\t\t\t}\n\n\t\t\tinput := args[0].(string)\n\t\t\tout, err := bcrypt.GenerateFromPassword([]byte(input), defaultCost)\n\t\t\tif err != nil {\n\t\t\t\treturn \"\", fmt.Errorf(\"error occured generating password %s\", err.Error())\n\t\t\t}\n\n\t\t\treturn string(out), nil\n\t\t},\n\t}\n}\n\nfunc interpolationFuncUUID() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:   []ast.Type{},\n\t\tReturnType: ast.TypeString,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\treturn uuid.GenerateUUID()\n\t\t},\n\t}\n}\n\n// interpolationFuncTimestamp\nfunc interpolationFuncTimestamp() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:   []ast.Type{},\n\t\tReturnType: ast.TypeString,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\treturn time.Now().UTC().Format(time.RFC3339), nil\n\t\t},\n\t}\n}\n\nfunc interpolationFuncTimeAdd() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes: []ast.Type{\n\t\t\tast.TypeString, // input timestamp string in RFC3339 format\n\t\t\tast.TypeString, // duration to add to input timestamp that should be parsable by time.ParseDuration\n\t\t},\n\t\tReturnType: ast.TypeString,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\n\t\t\tts, err := time.Parse(time.RFC3339, args[0].(string))\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tduration, err := time.ParseDuration(args[1].(string))\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\n\t\t\treturn ts.Add(duration).Format(time.RFC3339), nil\n\t\t},\n\t}\n}\n\n// interpolationFuncTitle implements the \"title\" function that returns a copy of the\n// string in which first characters of all the words are capitalized.\nfunc interpolationFuncTitle() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:   []ast.Type{ast.TypeString},\n\t\tReturnType: ast.TypeString,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\ttoTitle := args[0].(string)\n\t\t\treturn strings.Title(toTitle), nil\n\t\t},\n\t}\n}\n\n// interpolationFuncSubstr implements the \"substr\" function that allows strings\n// to be truncated.\nfunc interpolationFuncSubstr() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes: []ast.Type{\n\t\t\tast.TypeString, // input string\n\t\t\tast.TypeInt,    // offset\n\t\t\tast.TypeInt,    // length\n\t\t},\n\t\tReturnType: ast.TypeString,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\tstr := args[0].(string)\n\t\t\toffset := args[1].(int)\n\t\t\tlength := args[2].(int)\n\n\t\t\t// Interpret a negative offset as being equivalent to a positive\n\t\t\t// offset taken from the end of the string.\n\t\t\tif offset < 0 {\n\t\t\t\toffset += len(str)\n\t\t\t}\n\n\t\t\t// Interpret a length of `-1` as indicating that the substring\n\t\t\t// should start at `offset` and continue until the end of the\n\t\t\t// string. Any other negative length (other than `-1`) is invalid.\n\t\t\tif length == -1 {\n\t\t\t\tlength = len(str)\n\t\t\t} else if length >= 0 {\n\t\t\t\tlength += offset\n\t\t\t} else {\n\t\t\t\treturn nil, fmt.Errorf(\"length should be a non-negative integer\")\n\t\t\t}\n\n\t\t\tif offset > len(str) || offset < 0 {\n\t\t\t\treturn nil, fmt.Errorf(\"offset cannot be larger than the length of the string\")\n\t\t\t}\n\n\t\t\tif length > len(str) {\n\t\t\t\treturn nil, fmt.Errorf(\"'offset + length' cannot be larger than the length of the string\")\n\t\t\t}\n\n\t\t\treturn str[offset:length], nil\n\t\t},\n\t}\n}\n\n// Flatten until it's not ast.TypeList\nfunc flattener(finalList []ast.Variable, flattenList []ast.Variable) []ast.Variable {\n\tfor _, val := range flattenList {\n\t\tif val.Type == ast.TypeList {\n\t\t\tfinalList = flattener(finalList, val.Value.([]ast.Variable))\n\t\t} else {\n\t\t\tfinalList = append(finalList, val)\n\t\t}\n\t}\n\treturn finalList\n}\n\n// Flatten to single list\nfunc interpolationFuncFlatten() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:   []ast.Type{ast.TypeList},\n\t\tReturnType: ast.TypeList,\n\t\tVariadic:   false,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\tinputList := args[0].([]ast.Variable)\n\n\t\t\tvar outputList []ast.Variable\n\t\t\treturn flattener(outputList, inputList), nil\n\t\t},\n\t}\n}\n\nfunc interpolationFuncURLEncode() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:   []ast.Type{ast.TypeString},\n\t\tReturnType: ast.TypeString,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\ts := args[0].(string)\n\t\t\treturn url.QueryEscape(s), nil\n\t\t},\n\t}\n}\n\n// interpolationFuncTranspose implements the \"transpose\" function\n// that converts a map (string,list) to a map (string,list) where\n// the unique values of the original lists become the keys of the\n// new map and the keys of the original map become values for the\n// corresponding new keys.\nfunc interpolationFuncTranspose() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:   []ast.Type{ast.TypeMap},\n\t\tReturnType: ast.TypeMap,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\n\t\t\tinputMap := args[0].(map[string]ast.Variable)\n\t\t\toutputMap := make(map[string]ast.Variable)\n\t\t\ttmpMap := make(map[string][]string)\n\n\t\t\tfor inKey, inVal := range inputMap {\n\t\t\t\tif inVal.Type != ast.TypeList {\n\t\t\t\t\treturn nil, fmt.Errorf(\"transpose requires a map of lists of strings\")\n\t\t\t\t}\n\t\t\t\tvalues := inVal.Value.([]ast.Variable)\n\t\t\t\tfor _, listVal := range values {\n\t\t\t\t\tif listVal.Type != ast.TypeString {\n\t\t\t\t\t\treturn nil, fmt.Errorf(\"transpose requires the given map values to be lists of strings\")\n\t\t\t\t\t}\n\t\t\t\t\toutKey := listVal.Value.(string)\n\t\t\t\t\tif _, ok := tmpMap[outKey]; !ok {\n\t\t\t\t\t\ttmpMap[outKey] = make([]string, 0)\n\t\t\t\t\t}\n\t\t\t\t\toutVal := tmpMap[outKey]\n\t\t\t\t\toutVal = append(outVal, inKey)\n\t\t\t\t\tsort.Strings(outVal)\n\t\t\t\t\ttmpMap[outKey] = outVal\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor outKey, outVal := range tmpMap {\n\t\t\t\tvalues := make([]ast.Variable, 0)\n\t\t\t\tfor _, v := range outVal {\n\t\t\t\t\tvalues = append(values, ast.Variable{Type: ast.TypeString, Value: v})\n\t\t\t\t}\n\t\t\t\toutputMap[outKey] = ast.Variable{Type: ast.TypeList, Value: values}\n\t\t\t}\n\t\t\treturn outputMap, nil\n\t\t},\n\t}\n}\n\n// interpolationFuncAbs returns the absolute value of a given float.\nfunc interpolationFuncAbs() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:   []ast.Type{ast.TypeFloat},\n\t\tReturnType: ast.TypeFloat,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\treturn math.Abs(args[0].(float64)), nil\n\t\t},\n\t}\n}\n\n// interpolationFuncRsaDecrypt implements the \"rsadecrypt\" function that does\n// RSA decryption.\nfunc interpolationFuncRsaDecrypt() ast.Function {\n\treturn ast.Function{\n\t\tArgTypes:   []ast.Type{ast.TypeString, ast.TypeString},\n\t\tReturnType: ast.TypeString,\n\t\tCallback: func(args []interface{}) (interface{}, error) {\n\t\t\ts := args[0].(string)\n\t\t\tkey := args[1].(string)\n\n\t\t\tb, err := base64.StdEncoding.DecodeString(s)\n\t\t\tif err != nil {\n\t\t\t\treturn \"\", fmt.Errorf(\"Failed to decode input %q: cipher text must be base64-encoded\", s)\n\t\t\t}\n\n\t\t\tblock, _ := pem.Decode([]byte(key))\n\t\t\tif block == nil {\n\t\t\t\treturn \"\", fmt.Errorf(\"Failed to read key %q: no key found\", key)\n\t\t\t}\n\t\t\tif block.Headers[\"Proc-Type\"] == \"4,ENCRYPTED\" {\n\t\t\t\treturn \"\", fmt.Errorf(\n\t\t\t\t\t\"Failed to read key %q: password protected keys are\\n\"+\n\t\t\t\t\t\t\"not supported. Please decrypt the key prior to use.\", key)\n\t\t\t}\n\n\t\t\tx509Key, err := x509.ParsePKCS1PrivateKey(block.Bytes)\n\t\t\tif err != nil {\n\t\t\t\treturn \"\", err\n\t\t\t}\n\n\t\t\tout, err := rsa.DecryptPKCS1v15(nil, x509Key, b)\n\t\t\tif err != nil {\n\t\t\t\treturn \"\", err\n\t\t\t}\n\n\t\t\treturn string(out), nil\n\t\t},\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/config/interpolate_walk.go",
    "content": "package config\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\t\"strings\"\n\n\t\"github.com/hashicorp/hil\"\n\t\"github.com/hashicorp/hil/ast\"\n\t\"github.com/mitchellh/reflectwalk\"\n)\n\n// interpolationWalker implements interfaces for the reflectwalk package\n// (github.com/mitchellh/reflectwalk) that can be used to automatically\n// execute a callback for an interpolation.\ntype interpolationWalker struct {\n\t// F is the function to call for every interpolation. It can be nil.\n\t//\n\t// If Replace is true, then the return value of F will be used to\n\t// replace the interpolation.\n\tF       interpolationWalkerFunc\n\tReplace bool\n\n\t// ContextF is an advanced version of F that also receives the\n\t// location of where it is in the structure. This lets you do\n\t// context-aware validation.\n\tContextF interpolationWalkerContextFunc\n\n\tkey         []string\n\tlastValue   reflect.Value\n\tloc         reflectwalk.Location\n\tcs          []reflect.Value\n\tcsKey       []reflect.Value\n\tcsData      interface{}\n\tsliceIndex  []int\n\tunknownKeys []string\n}\n\n// interpolationWalkerFunc is the callback called by interpolationWalk.\n// It is called with any interpolation found. It should return a value\n// to replace the interpolation with, along with any errors.\n//\n// If Replace is set to false in interpolationWalker, then the replace\n// value can be anything as it will have no effect.\ntype interpolationWalkerFunc func(ast.Node) (interface{}, error)\n\n// interpolationWalkerContextFunc is called by interpolationWalk if\n// ContextF is set. This receives both the interpolation and the location\n// where the interpolation is.\n//\n// This callback can be used to validate the location of the interpolation\n// within the configuration.\ntype interpolationWalkerContextFunc func(reflectwalk.Location, ast.Node)\n\nfunc (w *interpolationWalker) Enter(loc reflectwalk.Location) error {\n\tw.loc = loc\n\treturn nil\n}\n\nfunc (w *interpolationWalker) Exit(loc reflectwalk.Location) error {\n\tw.loc = reflectwalk.None\n\n\tswitch loc {\n\tcase reflectwalk.Map:\n\t\tw.cs = w.cs[:len(w.cs)-1]\n\tcase reflectwalk.MapValue:\n\t\tw.key = w.key[:len(w.key)-1]\n\t\tw.csKey = w.csKey[:len(w.csKey)-1]\n\tcase reflectwalk.Slice:\n\t\t// Split any values that need to be split\n\t\tw.splitSlice()\n\t\tw.cs = w.cs[:len(w.cs)-1]\n\tcase reflectwalk.SliceElem:\n\t\tw.csKey = w.csKey[:len(w.csKey)-1]\n\t\tw.sliceIndex = w.sliceIndex[:len(w.sliceIndex)-1]\n\t}\n\n\treturn nil\n}\n\nfunc (w *interpolationWalker) Map(m reflect.Value) error {\n\tw.cs = append(w.cs, m)\n\treturn nil\n}\n\nfunc (w *interpolationWalker) MapElem(m, k, v reflect.Value) error {\n\tw.csData = k\n\tw.csKey = append(w.csKey, k)\n\n\tif l := len(w.sliceIndex); l > 0 {\n\t\tw.key = append(w.key, fmt.Sprintf(\"%d.%s\", w.sliceIndex[l-1], k.String()))\n\t} else {\n\t\tw.key = append(w.key, k.String())\n\t}\n\n\tw.lastValue = v\n\treturn nil\n}\n\nfunc (w *interpolationWalker) Slice(s reflect.Value) error {\n\tw.cs = append(w.cs, s)\n\treturn nil\n}\n\nfunc (w *interpolationWalker) SliceElem(i int, elem reflect.Value) error {\n\tw.csKey = append(w.csKey, reflect.ValueOf(i))\n\tw.sliceIndex = append(w.sliceIndex, i)\n\treturn nil\n}\n\nfunc (w *interpolationWalker) Primitive(v reflect.Value) error {\n\tsetV := v\n\n\t// We only care about strings\n\tif v.Kind() == reflect.Interface {\n\t\tsetV = v\n\t\tv = v.Elem()\n\t}\n\tif v.Kind() != reflect.String {\n\t\treturn nil\n\t}\n\n\tastRoot, err := hil.Parse(v.String())\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// If the AST we got is just a literal string value with the same\n\t// value then we ignore it. We have to check if its the same value\n\t// because it is possible to input a string, get out a string, and\n\t// have it be different. For example: \"foo-$${bar}\" turns into\n\t// \"foo-${bar}\"\n\tif n, ok := astRoot.(*ast.LiteralNode); ok {\n\t\tif s, ok := n.Value.(string); ok && s == v.String() {\n\t\t\treturn nil\n\t\t}\n\t}\n\n\tif w.ContextF != nil {\n\t\tw.ContextF(w.loc, astRoot)\n\t}\n\n\tif w.F == nil {\n\t\treturn nil\n\t}\n\n\treplaceVal, err := w.F(astRoot)\n\tif err != nil {\n\t\treturn fmt.Errorf(\n\t\t\t\"%s in:\\n\\n%s\",\n\t\t\terr, v.String())\n\t}\n\n\tif w.Replace {\n\t\t// We need to determine if we need to remove this element\n\t\t// if the result contains any \"UnknownVariableValue\" which is\n\t\t// set if it is computed. This behavior is different if we're\n\t\t// splitting (in a SliceElem) or not.\n\t\tremove := false\n\t\tif w.loc == reflectwalk.SliceElem {\n\t\t\tswitch typedReplaceVal := replaceVal.(type) {\n\t\t\tcase string:\n\t\t\t\tif typedReplaceVal == UnknownVariableValue {\n\t\t\t\t\tremove = true\n\t\t\t\t}\n\t\t\tcase []interface{}:\n\t\t\t\tif hasUnknownValue(typedReplaceVal) {\n\t\t\t\t\tremove = true\n\t\t\t\t}\n\t\t\t}\n\t\t} else if replaceVal == UnknownVariableValue {\n\t\t\tremove = true\n\t\t}\n\n\t\tif remove {\n\t\t\tw.unknownKeys = append(w.unknownKeys, strings.Join(w.key, \".\"))\n\t\t}\n\n\t\tresultVal := reflect.ValueOf(replaceVal)\n\t\tswitch w.loc {\n\t\tcase reflectwalk.MapKey:\n\t\t\tm := w.cs[len(w.cs)-1]\n\n\t\t\t// Delete the old value\n\t\t\tvar zero reflect.Value\n\t\t\tm.SetMapIndex(w.csData.(reflect.Value), zero)\n\n\t\t\t// Set the new key with the existing value\n\t\t\tm.SetMapIndex(resultVal, w.lastValue)\n\n\t\t\t// Set the key to be the new key\n\t\t\tw.csData = resultVal\n\t\tcase reflectwalk.MapValue:\n\t\t\t// If we're in a map, then the only way to set a map value is\n\t\t\t// to set it directly.\n\t\t\tm := w.cs[len(w.cs)-1]\n\t\t\tmk := w.csData.(reflect.Value)\n\t\t\tm.SetMapIndex(mk, resultVal)\n\t\tdefault:\n\t\t\t// Otherwise, we should be addressable\n\t\t\tsetV.Set(resultVal)\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (w *interpolationWalker) replaceCurrent(v reflect.Value) {\n\t// if we don't have at least 2 values, we're not going to find a map, but\n\t// we could panic.\n\tif len(w.cs) < 2 {\n\t\treturn\n\t}\n\n\tc := w.cs[len(w.cs)-2]\n\tswitch c.Kind() {\n\tcase reflect.Map:\n\t\t// Get the key and delete it\n\t\tk := w.csKey[len(w.csKey)-1]\n\t\tc.SetMapIndex(k, v)\n\t}\n}\n\nfunc hasUnknownValue(variable []interface{}) bool {\n\tfor _, value := range variable {\n\t\tif strVal, ok := value.(string); ok {\n\t\t\tif strVal == UnknownVariableValue {\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\t}\n\treturn false\n}\n\nfunc (w *interpolationWalker) splitSlice() {\n\traw := w.cs[len(w.cs)-1]\n\n\tvar s []interface{}\n\tswitch v := raw.Interface().(type) {\n\tcase []interface{}:\n\t\ts = v\n\tcase []map[string]interface{}:\n\t\treturn\n\t}\n\n\tsplit := false\n\tfor _, val := range s {\n\t\tif varVal, ok := val.(ast.Variable); ok && varVal.Type == ast.TypeList {\n\t\t\tsplit = true\n\t\t}\n\t\tif _, ok := val.([]interface{}); ok {\n\t\t\tsplit = true\n\t\t}\n\t}\n\n\tif !split {\n\t\treturn\n\t}\n\n\tresult := make([]interface{}, 0)\n\tfor _, v := range s {\n\t\tswitch val := v.(type) {\n\t\tcase ast.Variable:\n\t\t\tswitch val.Type {\n\t\t\tcase ast.TypeList:\n\t\t\t\telements := val.Value.([]ast.Variable)\n\t\t\t\tfor _, element := range elements {\n\t\t\t\t\tresult = append(result, element.Value)\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\tresult = append(result, val.Value)\n\t\t\t}\n\t\tcase []interface{}:\n\t\t\tresult = append(result, val...)\n\t\tdefault:\n\t\t\tresult = append(result, v)\n\t\t}\n\t}\n\n\tw.replaceCurrent(reflect.ValueOf(result))\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/config/lang.go",
    "content": "package config\n\nimport (\n\t\"github.com/hashicorp/hil/ast\"\n)\n\ntype noopNode struct{}\n\nfunc (n *noopNode) Accept(ast.Visitor) ast.Node      { return n }\nfunc (n *noopNode) Pos() ast.Pos                     { return ast.Pos{} }\nfunc (n *noopNode) Type(ast.Scope) (ast.Type, error) { return ast.TypeString, nil }\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/config/loader.go",
    "content": "package config\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"sort\"\n\t\"strings\"\n\n\t\"github.com/hashicorp/hcl\"\n)\n\n// ErrNoConfigsFound is the error returned by LoadDir if no\n// Terraform configuration files were found in the given directory.\ntype ErrNoConfigsFound struct {\n\tDir string\n}\n\nfunc (e ErrNoConfigsFound) Error() string {\n\treturn fmt.Sprintf(\n\t\t\"No Terraform configuration files found in directory: %s\",\n\t\te.Dir)\n}\n\n// LoadJSON loads a single Terraform configuration from a given JSON document.\n//\n// The document must be a complete Terraform configuration. This function will\n// NOT try to load any additional modules so only the given document is loaded.\nfunc LoadJSON(raw json.RawMessage) (*Config, error) {\n\tobj, err := hcl.Parse(string(raw))\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\n\t\t\t\"Error parsing JSON document as HCL: %s\", err)\n\t}\n\n\t// Start building the result\n\thclConfig := &hclConfigurable{\n\t\tRoot: obj,\n\t}\n\n\treturn hclConfig.Config()\n}\n\n// LoadFile loads the Terraform configuration from a given file.\n//\n// This file can be any format that Terraform recognizes, and import any\n// other format that Terraform recognizes.\nfunc LoadFile(path string) (*Config, error) {\n\timportTree, err := loadTree(path)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tconfigTree, err := importTree.ConfigTree()\n\n\t// Close the importTree now so that we can clear resources as quickly\n\t// as possible.\n\timportTree.Close()\n\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn configTree.Flatten()\n}\n\n// LoadDir loads all the Terraform configuration files in a single\n// directory and appends them together.\n//\n// Special files known as \"override files\" can also be present, which\n// are merged into the loaded configuration. That is, the non-override\n// files are loaded first to create the configuration. Then, the overrides\n// are merged into the configuration to create the final configuration.\n//\n// Files are loaded in lexical order.\nfunc LoadDir(root string) (*Config, error) {\n\tfiles, overrides, err := dirFiles(root)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif len(files) == 0 && len(overrides) == 0 {\n\t\treturn nil, &ErrNoConfigsFound{Dir: root}\n\t}\n\n\t// Determine the absolute path to the directory.\n\trootAbs, err := filepath.Abs(root)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar result *Config\n\n\t// Sort the files and overrides so we have a deterministic order\n\tsort.Strings(files)\n\tsort.Strings(overrides)\n\n\t// Load all the regular files, append them to each other.\n\tfor _, f := range files {\n\t\tc, err := LoadFile(f)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tif result != nil {\n\t\t\tresult, err = Append(result, c)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t} else {\n\t\t\tresult = c\n\t\t}\n\t}\n\tif len(files) == 0 {\n\t\tresult = &Config{}\n\t}\n\n\t// Load all the overrides, and merge them into the config\n\tfor _, f := range overrides {\n\t\tc, err := LoadFile(f)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tresult, err = Merge(result, c)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\t// Mark the directory\n\tresult.Dir = rootAbs\n\n\treturn result, nil\n}\n\n// IsEmptyDir returns true if the directory given has no Terraform\n// configuration files.\nfunc IsEmptyDir(root string) (bool, error) {\n\tif _, err := os.Stat(root); err != nil && os.IsNotExist(err) {\n\t\treturn true, nil\n\t}\n\n\tfs, os, err := dirFiles(root)\n\tif err != nil {\n\t\treturn false, err\n\t}\n\n\treturn len(fs) == 0 && len(os) == 0, nil\n}\n\n// Ext returns the Terraform configuration extension of the given\n// path, or a blank string if it is an invalid function.\nfunc ext(path string) string {\n\tif strings.HasSuffix(path, \".tf\") {\n\t\treturn \".tf\"\n\t} else if strings.HasSuffix(path, \".tf.json\") {\n\t\treturn \".tf.json\"\n\t} else {\n\t\treturn \"\"\n\t}\n}\n\nfunc dirFiles(dir string) ([]string, []string, error) {\n\tf, err := os.Open(dir)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\tdefer f.Close()\n\n\tfi, err := f.Stat()\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\tif !fi.IsDir() {\n\t\treturn nil, nil, fmt.Errorf(\n\t\t\t\"configuration path must be a directory: %s\",\n\t\t\tdir)\n\t}\n\n\tvar files, overrides []string\n\terr = nil\n\tfor err != io.EOF {\n\t\tvar fis []os.FileInfo\n\t\tfis, err = f.Readdir(128)\n\t\tif err != nil && err != io.EOF {\n\t\t\treturn nil, nil, err\n\t\t}\n\n\t\tfor _, fi := range fis {\n\t\t\t// Ignore directories\n\t\t\tif fi.IsDir() {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// Only care about files that are valid to load\n\t\t\tname := fi.Name()\n\t\t\textValue := ext(name)\n\t\t\tif extValue == \"\" || IsIgnoredFile(name) {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// Determine if we're dealing with an override\n\t\t\tnameNoExt := name[:len(name)-len(extValue)]\n\t\t\toverride := nameNoExt == \"override\" ||\n\t\t\t\tstrings.HasSuffix(nameNoExt, \"_override\")\n\n\t\t\tpath := filepath.Join(dir, name)\n\t\t\tif override {\n\t\t\t\toverrides = append(overrides, path)\n\t\t\t} else {\n\t\t\t\tfiles = append(files, path)\n\t\t\t}\n\t\t}\n\t}\n\n\treturn files, overrides, nil\n}\n\n// IsIgnoredFile returns true or false depending on whether the\n// provided file name is a file that should be ignored.\nfunc IsIgnoredFile(name string) bool {\n\treturn strings.HasPrefix(name, \".\") || // Unix-like hidden files\n\t\tstrings.HasSuffix(name, \"~\") || // vim\n\t\tstrings.HasPrefix(name, \"#\") && strings.HasSuffix(name, \"#\") // emacs\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/config/loader_hcl.go",
    "content": "package config\n\nimport (\n\t\"fmt\"\n\t\"io/ioutil\"\n\n\t\"github.com/hashicorp/go-multierror\"\n\t\"github.com/hashicorp/hcl\"\n\t\"github.com/hashicorp/hcl/hcl/ast\"\n\t\"github.com/mitchellh/mapstructure\"\n)\n\n// hclConfigurable is an implementation of configurable that knows\n// how to turn HCL configuration into a *Config object.\ntype hclConfigurable struct {\n\tFile string\n\tRoot *ast.File\n}\n\nvar ReservedDataSourceFields = []string{\n\t\"connection\",\n\t\"count\",\n\t\"depends_on\",\n\t\"lifecycle\",\n\t\"provider\",\n\t\"provisioner\",\n}\n\nvar ReservedResourceFields = []string{\n\t\"connection\",\n\t\"count\",\n\t\"depends_on\",\n\t\"id\",\n\t\"lifecycle\",\n\t\"provider\",\n\t\"provisioner\",\n}\n\nvar ReservedProviderFields = []string{\n\t\"alias\",\n\t\"version\",\n}\n\nfunc (t *hclConfigurable) Config() (*Config, error) {\n\tvalidKeys := map[string]struct{}{\n\t\t\"atlas\":     struct{}{},\n\t\t\"data\":      struct{}{},\n\t\t\"locals\":    struct{}{},\n\t\t\"module\":    struct{}{},\n\t\t\"output\":    struct{}{},\n\t\t\"provider\":  struct{}{},\n\t\t\"resource\":  struct{}{},\n\t\t\"terraform\": struct{}{},\n\t\t\"variable\":  struct{}{},\n\t}\n\n\t// Top-level item should be the object list\n\tlist, ok := t.Root.Node.(*ast.ObjectList)\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"error parsing: file doesn't contain a root object\")\n\t}\n\n\t// Start building up the actual configuration.\n\tconfig := new(Config)\n\n\t// Terraform config\n\tif o := list.Filter(\"terraform\"); len(o.Items) > 0 {\n\t\tvar err error\n\t\tconfig.Terraform, err = loadTerraformHcl(o)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\t// Build the variables\n\tif vars := list.Filter(\"variable\"); len(vars.Items) > 0 {\n\t\tvar err error\n\t\tconfig.Variables, err = loadVariablesHcl(vars)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\t// Build local values\n\tif locals := list.Filter(\"locals\"); len(locals.Items) > 0 {\n\t\tvar err error\n\t\tconfig.Locals, err = loadLocalsHcl(locals)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\t// Get Atlas configuration\n\tif atlas := list.Filter(\"atlas\"); len(atlas.Items) > 0 {\n\t\tvar err error\n\t\tconfig.Atlas, err = loadAtlasHcl(atlas)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\t// Build the modules\n\tif modules := list.Filter(\"module\"); len(modules.Items) > 0 {\n\t\tvar err error\n\t\tconfig.Modules, err = loadModulesHcl(modules)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\t// Build the provider configs\n\tif providers := list.Filter(\"provider\"); len(providers.Items) > 0 {\n\t\tvar err error\n\t\tconfig.ProviderConfigs, err = loadProvidersHcl(providers)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\t// Build the resources\n\t{\n\t\tvar err error\n\t\tmanagedResourceConfigs := list.Filter(\"resource\")\n\t\tdataResourceConfigs := list.Filter(\"data\")\n\n\t\tconfig.Resources = make(\n\t\t\t[]*Resource, 0,\n\t\t\tlen(managedResourceConfigs.Items)+len(dataResourceConfigs.Items),\n\t\t)\n\n\t\tmanagedResources, err := loadManagedResourcesHcl(managedResourceConfigs)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tdataResources, err := loadDataResourcesHcl(dataResourceConfigs)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tconfig.Resources = append(config.Resources, dataResources...)\n\t\tconfig.Resources = append(config.Resources, managedResources...)\n\t}\n\n\t// Build the outputs\n\tif outputs := list.Filter(\"output\"); len(outputs.Items) > 0 {\n\t\tvar err error\n\t\tconfig.Outputs, err = loadOutputsHcl(outputs)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\t// Check for invalid keys\n\tfor _, item := range list.Items {\n\t\tif len(item.Keys) == 0 {\n\t\t\t// Not sure how this would happen, but let's avoid a panic\n\t\t\tcontinue\n\t\t}\n\n\t\tk := item.Keys[0].Token.Value().(string)\n\t\tif _, ok := validKeys[k]; ok {\n\t\t\tcontinue\n\t\t}\n\n\t\tconfig.unknownKeys = append(config.unknownKeys, k)\n\t}\n\n\treturn config, nil\n}\n\n// loadFileHcl is a fileLoaderFunc that knows how to read HCL\n// files and turn them into hclConfigurables.\nfunc loadFileHcl(root string) (configurable, []string, error) {\n\t// Read the HCL file and prepare for parsing\n\td, err := ioutil.ReadFile(root)\n\tif err != nil {\n\t\treturn nil, nil, fmt.Errorf(\n\t\t\t\"Error reading %s: %s\", root, err)\n\t}\n\n\t// Parse it\n\thclRoot, err := hcl.Parse(string(d))\n\tif err != nil {\n\t\treturn nil, nil, fmt.Errorf(\n\t\t\t\"Error parsing %s: %s\", root, err)\n\t}\n\n\t// Start building the result\n\tresult := &hclConfigurable{\n\t\tFile: root,\n\t\tRoot: hclRoot,\n\t}\n\n\t// Dive in, find the imports. This is disabled for now since\n\t// imports were removed prior to Terraform 0.1. The code is\n\t// remaining here commented for historical purposes.\n\t/*\n\t\timports := obj.Get(\"import\")\n\t\tif imports == nil {\n\t\t\tresult.Object.Ref()\n\t\t\treturn result, nil, nil\n\t\t}\n\n\t\tif imports.Type() != libucl.ObjectTypeString {\n\t\t\timports.Close()\n\n\t\t\treturn nil, nil, fmt.Errorf(\n\t\t\t\t\"Error in %s: all 'import' declarations should be in the format\\n\"+\n\t\t\t\t\t\"`import \\\"foo\\\"` (Got type %s)\",\n\t\t\t\troot,\n\t\t\t\timports.Type())\n\t\t}\n\n\t\t// Gather all the import paths\n\t\timportPaths := make([]string, 0, imports.Len())\n\t\titer := imports.Iterate(false)\n\t\tfor imp := iter.Next(); imp != nil; imp = iter.Next() {\n\t\t\tpath := imp.ToString()\n\t\t\tif !filepath.IsAbs(path) {\n\t\t\t\t// Relative paths are relative to the Terraform file itself\n\t\t\t\tdir := filepath.Dir(root)\n\t\t\t\tpath = filepath.Join(dir, path)\n\t\t\t}\n\n\t\t\timportPaths = append(importPaths, path)\n\t\t\timp.Close()\n\t\t}\n\t\titer.Close()\n\t\timports.Close()\n\n\t\tresult.Object.Ref()\n\t*/\n\n\treturn result, nil, nil\n}\n\n// Given a handle to a HCL object, this transforms it into the Terraform config\nfunc loadTerraformHcl(list *ast.ObjectList) (*Terraform, error) {\n\tif len(list.Items) > 1 {\n\t\treturn nil, fmt.Errorf(\"only one 'terraform' block allowed per module\")\n\t}\n\n\t// Get our one item\n\titem := list.Items[0]\n\n\t// This block should have an empty top level ObjectItem.  If there are keys\n\t// here, it's likely because we have a flattened JSON object, and we can\n\t// lift this into a nested ObjectList to decode properly.\n\tif len(item.Keys) > 0 {\n\t\titem = &ast.ObjectItem{\n\t\t\tVal: &ast.ObjectType{\n\t\t\t\tList: &ast.ObjectList{\n\t\t\t\t\tItems: []*ast.ObjectItem{item},\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t}\n\n\t// We need the item value as an ObjectList\n\tvar listVal *ast.ObjectList\n\tif ot, ok := item.Val.(*ast.ObjectType); ok {\n\t\tlistVal = ot.List\n\t} else {\n\t\treturn nil, fmt.Errorf(\"terraform block: should be an object\")\n\t}\n\n\t// NOTE: We purposely don't validate unknown HCL keys here so that\n\t// we can potentially read _future_ Terraform version config (to\n\t// still be able to validate the required version).\n\t//\n\t// We should still keep track of unknown keys to validate later, but\n\t// HCL doesn't currently support that.\n\n\tvar config Terraform\n\tif err := hcl.DecodeObject(&config, item.Val); err != nil {\n\t\treturn nil, fmt.Errorf(\n\t\t\t\"Error reading terraform config: %s\",\n\t\t\terr)\n\t}\n\n\t// If we have provisioners, then parse those out\n\tif os := listVal.Filter(\"backend\"); len(os.Items) > 0 {\n\t\tvar err error\n\t\tconfig.Backend, err = loadTerraformBackendHcl(os)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\"Error reading backend config for terraform block: %s\",\n\t\t\t\terr)\n\t\t}\n\t}\n\n\treturn &config, nil\n}\n\n// Loads the Backend configuration from an object list.\nfunc loadTerraformBackendHcl(list *ast.ObjectList) (*Backend, error) {\n\tif len(list.Items) > 1 {\n\t\treturn nil, fmt.Errorf(\"only one 'backend' block allowed\")\n\t}\n\n\t// Get our one item\n\titem := list.Items[0]\n\n\t// Verify the keys\n\tif len(item.Keys) != 1 {\n\t\treturn nil, fmt.Errorf(\n\t\t\t\"position %s: 'backend' must be followed by exactly one string: a type\",\n\t\t\titem.Pos())\n\t}\n\n\ttyp := item.Keys[0].Token.Value().(string)\n\n\t// Decode the raw config\n\tvar config map[string]interface{}\n\tif err := hcl.DecodeObject(&config, item.Val); err != nil {\n\t\treturn nil, fmt.Errorf(\n\t\t\t\"Error reading backend config: %s\",\n\t\t\terr)\n\t}\n\n\trawConfig, err := NewRawConfig(config)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\n\t\t\t\"Error reading backend config: %s\",\n\t\t\terr)\n\t}\n\n\tb := &Backend{\n\t\tType:      typ,\n\t\tRawConfig: rawConfig,\n\t}\n\tb.Hash = b.Rehash()\n\n\treturn b, nil\n}\n\n// Given a handle to a HCL object, this transforms it into the Atlas\n// configuration.\nfunc loadAtlasHcl(list *ast.ObjectList) (*AtlasConfig, error) {\n\tif len(list.Items) > 1 {\n\t\treturn nil, fmt.Errorf(\"only one 'atlas' block allowed\")\n\t}\n\n\t// Get our one item\n\titem := list.Items[0]\n\n\tvar config AtlasConfig\n\tif err := hcl.DecodeObject(&config, item.Val); err != nil {\n\t\treturn nil, fmt.Errorf(\n\t\t\t\"Error reading atlas config: %s\",\n\t\t\terr)\n\t}\n\n\treturn &config, nil\n}\n\n// Given a handle to a HCL object, this recurses into the structure\n// and pulls out a list of modules.\n//\n// The resulting modules may not be unique, but each module\n// represents exactly one module definition in the HCL configuration.\n// We leave it up to another pass to merge them together.\nfunc loadModulesHcl(list *ast.ObjectList) ([]*Module, error) {\n\tif err := assertAllBlocksHaveNames(\"module\", list); err != nil {\n\t\treturn nil, err\n\t}\n\n\tlist = list.Children()\n\tif len(list.Items) == 0 {\n\t\treturn nil, nil\n\t}\n\n\t// Where all the results will go\n\tvar result []*Module\n\n\t// Now go over all the types and their children in order to get\n\t// all of the actual resources.\n\tfor _, item := range list.Items {\n\t\tk := item.Keys[0].Token.Value().(string)\n\n\t\tvar listVal *ast.ObjectList\n\t\tif ot, ok := item.Val.(*ast.ObjectType); ok {\n\t\t\tlistVal = ot.List\n\t\t} else {\n\t\t\treturn nil, fmt.Errorf(\"module '%s': should be an object\", k)\n\t\t}\n\n\t\tvar config map[string]interface{}\n\t\tif err := hcl.DecodeObject(&config, item.Val); err != nil {\n\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\"Error reading config for %s: %s\",\n\t\t\t\tk,\n\t\t\t\terr)\n\t\t}\n\n\t\trawConfig, err := NewRawConfig(config)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\"Error reading config for %s: %s\",\n\t\t\t\tk,\n\t\t\t\terr)\n\t\t}\n\n\t\t// Remove the fields we handle specially\n\t\tdelete(config, \"source\")\n\t\tdelete(config, \"version\")\n\t\tdelete(config, \"providers\")\n\n\t\tvar source string\n\t\tif o := listVal.Filter(\"source\"); len(o.Items) > 0 {\n\t\t\terr = hcl.DecodeObject(&source, o.Items[0].Val)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\t\"Error parsing source for %s: %s\",\n\t\t\t\t\tk,\n\t\t\t\t\terr)\n\t\t\t}\n\t\t}\n\n\t\tvar version string\n\t\tif o := listVal.Filter(\"version\"); len(o.Items) > 0 {\n\t\t\terr = hcl.DecodeObject(&version, o.Items[0].Val)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\t\"Error parsing version for %s: %s\",\n\t\t\t\t\tk,\n\t\t\t\t\terr)\n\t\t\t}\n\t\t}\n\n\t\tvar providers map[string]string\n\t\tif o := listVal.Filter(\"providers\"); len(o.Items) > 0 {\n\t\t\terr = hcl.DecodeObject(&providers, o.Items[0].Val)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\t\"Error parsing providers for %s: %s\",\n\t\t\t\t\tk,\n\t\t\t\t\terr)\n\t\t\t}\n\t\t}\n\n\t\tresult = append(result, &Module{\n\t\t\tName:      k,\n\t\t\tSource:    source,\n\t\t\tVersion:   version,\n\t\t\tProviders: providers,\n\t\t\tRawConfig: rawConfig,\n\t\t})\n\t}\n\n\treturn result, nil\n}\n\n// loadLocalsHcl recurses into the given HCL object turns it into\n// a list of locals.\nfunc loadLocalsHcl(list *ast.ObjectList) ([]*Local, error) {\n\n\tresult := make([]*Local, 0, len(list.Items))\n\n\tfor _, block := range list.Items {\n\t\tif len(block.Keys) > 0 {\n\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\"locals block at %s should not have label %q\",\n\t\t\t\tblock.Pos(), block.Keys[0].Token.Value(),\n\t\t\t)\n\t\t}\n\n\t\tblockObj, ok := block.Val.(*ast.ObjectType)\n\t\tif !ok {\n\t\t\treturn nil, fmt.Errorf(\"locals value at %s should be a block\", block.Val.Pos())\n\t\t}\n\n\t\t// blockObj now contains directly our local decls\n\t\tfor _, item := range blockObj.List.Items {\n\t\t\tif len(item.Keys) != 1 {\n\t\t\t\treturn nil, fmt.Errorf(\"local declaration at %s may not be a block\", item.Val.Pos())\n\t\t\t}\n\n\t\t\t// By the time we get here there can only be one item left, but\n\t\t\t// we'll decode into a map anyway because it's a convenient way\n\t\t\t// to extract both the key and the value robustly.\n\t\t\tkv := map[string]interface{}{}\n\t\t\thcl.DecodeObject(&kv, item)\n\t\t\tfor k, v := range kv {\n\t\t\t\trawConfig, err := NewRawConfig(map[string]interface{}{\n\t\t\t\t\t\"value\": v,\n\t\t\t\t})\n\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\t\t\"error parsing local value %q at %s: %s\",\n\t\t\t\t\t\tk, item.Val.Pos(), err,\n\t\t\t\t\t)\n\t\t\t\t}\n\n\t\t\t\tresult = append(result, &Local{\n\t\t\t\t\tName:      k,\n\t\t\t\t\tRawConfig: rawConfig,\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result, nil\n}\n\n// LoadOutputsHcl recurses into the given HCL object and turns\n// it into a mapping of outputs.\nfunc loadOutputsHcl(list *ast.ObjectList) ([]*Output, error) {\n\tif err := assertAllBlocksHaveNames(\"output\", list); err != nil {\n\t\treturn nil, err\n\t}\n\n\tlist = list.Children()\n\n\t// Go through each object and turn it into an actual result.\n\tresult := make([]*Output, 0, len(list.Items))\n\tfor _, item := range list.Items {\n\t\tn := item.Keys[0].Token.Value().(string)\n\n\t\tvar listVal *ast.ObjectList\n\t\tif ot, ok := item.Val.(*ast.ObjectType); ok {\n\t\t\tlistVal = ot.List\n\t\t} else {\n\t\t\treturn nil, fmt.Errorf(\"output '%s': should be an object\", n)\n\t\t}\n\n\t\tvar config map[string]interface{}\n\t\tif err := hcl.DecodeObject(&config, item.Val); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\t// Delete special keys\n\t\tdelete(config, \"depends_on\")\n\t\tdelete(config, \"description\")\n\n\t\trawConfig, err := NewRawConfig(config)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\"Error reading config for output %s: %s\",\n\t\t\t\tn,\n\t\t\t\terr)\n\t\t}\n\n\t\t// If we have depends fields, then add those in\n\t\tvar dependsOn []string\n\t\tif o := listVal.Filter(\"depends_on\"); len(o.Items) > 0 {\n\t\t\terr := hcl.DecodeObject(&dependsOn, o.Items[0].Val)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\t\"Error reading depends_on for output %q: %s\",\n\t\t\t\t\tn,\n\t\t\t\t\terr)\n\t\t\t}\n\t\t}\n\n\t\t// If we have a description field, then filter that\n\t\tvar description string\n\t\tif o := listVal.Filter(\"description\"); len(o.Items) > 0 {\n\t\t\terr := hcl.DecodeObject(&description, o.Items[0].Val)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\t\"Error reading description for output %q: %s\",\n\t\t\t\t\tn,\n\t\t\t\t\terr)\n\t\t\t}\n\t\t}\n\n\t\tresult = append(result, &Output{\n\t\t\tName:        n,\n\t\t\tRawConfig:   rawConfig,\n\t\t\tDependsOn:   dependsOn,\n\t\t\tDescription: description,\n\t\t})\n\t}\n\n\treturn result, nil\n}\n\n// LoadVariablesHcl recurses into the given HCL object and turns\n// it into a list of variables.\nfunc loadVariablesHcl(list *ast.ObjectList) ([]*Variable, error) {\n\tif err := assertAllBlocksHaveNames(\"variable\", list); err != nil {\n\t\treturn nil, err\n\t}\n\n\tlist = list.Children()\n\n\t// hclVariable is the structure each variable is decoded into\n\ttype hclVariable struct {\n\t\tDeclaredType string `hcl:\"type\"`\n\t\tDefault      interface{}\n\t\tDescription  string\n\t\tFields       []string `hcl:\",decodedFields\"`\n\t}\n\n\t// Go through each object and turn it into an actual result.\n\tresult := make([]*Variable, 0, len(list.Items))\n\tfor _, item := range list.Items {\n\t\t// Clean up items from JSON\n\t\tunwrapHCLObjectKeysFromJSON(item, 1)\n\n\t\t// Verify the keys\n\t\tif len(item.Keys) != 1 {\n\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\"position %s: 'variable' must be followed by exactly one strings: a name\",\n\t\t\t\titem.Pos())\n\t\t}\n\n\t\tn := item.Keys[0].Token.Value().(string)\n\t\tif !NameRegexp.MatchString(n) {\n\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\"position %s: 'variable' name must match regular expression: %s\",\n\t\t\t\titem.Pos(), NameRegexp)\n\t\t}\n\n\t\t// Check for invalid keys\n\t\tvalid := []string{\"type\", \"default\", \"description\"}\n\t\tif err := checkHCLKeys(item.Val, valid); err != nil {\n\t\t\treturn nil, multierror.Prefix(err, fmt.Sprintf(\n\t\t\t\t\"variable[%s]:\", n))\n\t\t}\n\n\t\t// Decode into hclVariable to get typed values\n\t\tvar hclVar hclVariable\n\t\tif err := hcl.DecodeObject(&hclVar, item.Val); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\t// Defaults turn into a slice of map[string]interface{} and\n\t\t// we need to make sure to convert that down into the\n\t\t// proper type for Config.\n\t\tif ms, ok := hclVar.Default.([]map[string]interface{}); ok {\n\t\t\tdef := make(map[string]interface{})\n\t\t\tfor _, m := range ms {\n\t\t\t\tfor k, v := range m {\n\t\t\t\t\tdef[k] = v\n\t\t\t\t}\n\t\t\t}\n\n\t\t\thclVar.Default = def\n\t\t}\n\n\t\t// Build the new variable and do some basic validation\n\t\tnewVar := &Variable{\n\t\t\tName:         n,\n\t\t\tDeclaredType: hclVar.DeclaredType,\n\t\t\tDefault:      hclVar.Default,\n\t\t\tDescription:  hclVar.Description,\n\t\t}\n\t\tif err := newVar.ValidateTypeAndDefault(); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tresult = append(result, newVar)\n\t}\n\n\treturn result, nil\n}\n\n// LoadProvidersHcl recurses into the given HCL object and turns\n// it into a mapping of provider configs.\nfunc loadProvidersHcl(list *ast.ObjectList) ([]*ProviderConfig, error) {\n\tif err := assertAllBlocksHaveNames(\"provider\", list); err != nil {\n\t\treturn nil, err\n\t}\n\n\tlist = list.Children()\n\tif len(list.Items) == 0 {\n\t\treturn nil, nil\n\t}\n\n\t// Go through each object and turn it into an actual result.\n\tresult := make([]*ProviderConfig, 0, len(list.Items))\n\tfor _, item := range list.Items {\n\t\tn := item.Keys[0].Token.Value().(string)\n\n\t\tvar listVal *ast.ObjectList\n\t\tif ot, ok := item.Val.(*ast.ObjectType); ok {\n\t\t\tlistVal = ot.List\n\t\t} else {\n\t\t\treturn nil, fmt.Errorf(\"module '%s': should be an object\", n)\n\t\t}\n\n\t\tvar config map[string]interface{}\n\t\tif err := hcl.DecodeObject(&config, item.Val); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tdelete(config, \"alias\")\n\t\tdelete(config, \"version\")\n\n\t\trawConfig, err := NewRawConfig(config)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\"Error reading config for provider config %s: %s\",\n\t\t\t\tn,\n\t\t\t\terr)\n\t\t}\n\n\t\t// If we have an alias field, then add those in\n\t\tvar alias string\n\t\tif a := listVal.Filter(\"alias\"); len(a.Items) > 0 {\n\t\t\terr := hcl.DecodeObject(&alias, a.Items[0].Val)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\t\"Error reading alias for provider[%s]: %s\",\n\t\t\t\t\tn,\n\t\t\t\t\terr)\n\t\t\t}\n\t\t}\n\n\t\t// If we have a version field then extract it\n\t\tvar version string\n\t\tif a := listVal.Filter(\"version\"); len(a.Items) > 0 {\n\t\t\terr := hcl.DecodeObject(&version, a.Items[0].Val)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\t\"Error reading version for provider[%s]: %s\",\n\t\t\t\t\tn,\n\t\t\t\t\terr)\n\t\t\t}\n\t\t}\n\n\t\tresult = append(result, &ProviderConfig{\n\t\t\tName:      n,\n\t\t\tAlias:     alias,\n\t\t\tVersion:   version,\n\t\t\tRawConfig: rawConfig,\n\t\t})\n\t}\n\n\treturn result, nil\n}\n\n// Given a handle to a HCL object, this recurses into the structure\n// and pulls out a list of data sources.\n//\n// The resulting data sources may not be unique, but each one\n// represents exactly one data definition in the HCL configuration.\n// We leave it up to another pass to merge them together.\nfunc loadDataResourcesHcl(list *ast.ObjectList) ([]*Resource, error) {\n\tif err := assertAllBlocksHaveNames(\"data\", list); err != nil {\n\t\treturn nil, err\n\t}\n\n\tlist = list.Children()\n\tif len(list.Items) == 0 {\n\t\treturn nil, nil\n\t}\n\n\t// Where all the results will go\n\tvar result []*Resource\n\n\t// Now go over all the types and their children in order to get\n\t// all of the actual resources.\n\tfor _, item := range list.Items {\n\t\tif len(item.Keys) != 2 {\n\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\"position %s: 'data' must be followed by exactly two strings: a type and a name\",\n\t\t\t\titem.Pos())\n\t\t}\n\n\t\tt := item.Keys[0].Token.Value().(string)\n\t\tk := item.Keys[1].Token.Value().(string)\n\n\t\tvar listVal *ast.ObjectList\n\t\tif ot, ok := item.Val.(*ast.ObjectType); ok {\n\t\t\tlistVal = ot.List\n\t\t} else {\n\t\t\treturn nil, fmt.Errorf(\"data sources %s[%s]: should be an object\", t, k)\n\t\t}\n\n\t\tvar config map[string]interface{}\n\t\tif err := hcl.DecodeObject(&config, item.Val); err != nil {\n\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\"Error reading config for %s[%s]: %s\",\n\t\t\t\tt,\n\t\t\t\tk,\n\t\t\t\terr)\n\t\t}\n\n\t\t// Remove the fields we handle specially\n\t\tdelete(config, \"depends_on\")\n\t\tdelete(config, \"provider\")\n\t\tdelete(config, \"count\")\n\n\t\trawConfig, err := NewRawConfig(config)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\"Error reading config for %s[%s]: %s\",\n\t\t\t\tt,\n\t\t\t\tk,\n\t\t\t\terr)\n\t\t}\n\n\t\t// If we have a count, then figure it out\n\t\tvar count string = \"1\"\n\t\tif o := listVal.Filter(\"count\"); len(o.Items) > 0 {\n\t\t\terr = hcl.DecodeObject(&count, o.Items[0].Val)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\t\"Error parsing count for %s[%s]: %s\",\n\t\t\t\t\tt,\n\t\t\t\t\tk,\n\t\t\t\t\terr)\n\t\t\t}\n\t\t}\n\t\tcountConfig, err := NewRawConfig(map[string]interface{}{\n\t\t\t\"count\": count,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tcountConfig.Key = \"count\"\n\n\t\t// If we have depends fields, then add those in\n\t\tvar dependsOn []string\n\t\tif o := listVal.Filter(\"depends_on\"); len(o.Items) > 0 {\n\t\t\terr := hcl.DecodeObject(&dependsOn, o.Items[0].Val)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\t\"Error reading depends_on for %s[%s]: %s\",\n\t\t\t\t\tt,\n\t\t\t\t\tk,\n\t\t\t\t\terr)\n\t\t\t}\n\t\t}\n\n\t\t// If we have a provider, then parse it out\n\t\tvar provider string\n\t\tif o := listVal.Filter(\"provider\"); len(o.Items) > 0 {\n\t\t\terr := hcl.DecodeObject(&provider, o.Items[0].Val)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\t\"Error reading provider for %s[%s]: %s\",\n\t\t\t\t\tt,\n\t\t\t\t\tk,\n\t\t\t\t\terr)\n\t\t\t}\n\t\t}\n\n\t\tresult = append(result, &Resource{\n\t\t\tMode:         DataResourceMode,\n\t\t\tName:         k,\n\t\t\tType:         t,\n\t\t\tRawCount:     countConfig,\n\t\t\tRawConfig:    rawConfig,\n\t\t\tProvider:     provider,\n\t\t\tProvisioners: []*Provisioner{},\n\t\t\tDependsOn:    dependsOn,\n\t\t\tLifecycle:    ResourceLifecycle{},\n\t\t})\n\t}\n\n\treturn result, nil\n}\n\n// Given a handle to a HCL object, this recurses into the structure\n// and pulls out a list of managed resources.\n//\n// The resulting resources may not be unique, but each resource\n// represents exactly one \"resource\" block in the HCL configuration.\n// We leave it up to another pass to merge them together.\nfunc loadManagedResourcesHcl(list *ast.ObjectList) ([]*Resource, error) {\n\tlist = list.Children()\n\tif len(list.Items) == 0 {\n\t\treturn nil, nil\n\t}\n\n\t// Where all the results will go\n\tvar result []*Resource\n\n\t// Now go over all the types and their children in order to get\n\t// all of the actual resources.\n\tfor _, item := range list.Items {\n\t\t// GH-4385: We detect a pure provisioner resource and give the user\n\t\t// an error about how to do it cleanly.\n\t\tif len(item.Keys) == 4 && item.Keys[2].Token.Value().(string) == \"provisioner\" {\n\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\"position %s: provisioners in a resource should be wrapped in a list\\n\\n\"+\n\t\t\t\t\t\"Example: \\\"provisioner\\\": [ { \\\"local-exec\\\": ... } ]\",\n\t\t\t\titem.Pos())\n\t\t}\n\n\t\t// Fix up JSON input\n\t\tunwrapHCLObjectKeysFromJSON(item, 2)\n\n\t\tif len(item.Keys) != 2 {\n\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\"position %s: resource must be followed by exactly two strings, a type and a name\",\n\t\t\t\titem.Pos())\n\t\t}\n\n\t\tt := item.Keys[0].Token.Value().(string)\n\t\tk := item.Keys[1].Token.Value().(string)\n\n\t\tvar listVal *ast.ObjectList\n\t\tif ot, ok := item.Val.(*ast.ObjectType); ok {\n\t\t\tlistVal = ot.List\n\t\t} else {\n\t\t\treturn nil, fmt.Errorf(\"resources %s[%s]: should be an object\", t, k)\n\t\t}\n\n\t\tvar config map[string]interface{}\n\t\tif err := hcl.DecodeObject(&config, item.Val); err != nil {\n\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\"Error reading config for %s[%s]: %s\",\n\t\t\t\tt,\n\t\t\t\tk,\n\t\t\t\terr)\n\t\t}\n\n\t\t// Remove the fields we handle specially\n\t\tdelete(config, \"connection\")\n\t\tdelete(config, \"count\")\n\t\tdelete(config, \"depends_on\")\n\t\tdelete(config, \"provisioner\")\n\t\tdelete(config, \"provider\")\n\t\tdelete(config, \"lifecycle\")\n\n\t\trawConfig, err := NewRawConfig(config)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\"Error reading config for %s[%s]: %s\",\n\t\t\t\tt,\n\t\t\t\tk,\n\t\t\t\terr)\n\t\t}\n\n\t\t// If we have a count, then figure it out\n\t\tvar count string = \"1\"\n\t\tif o := listVal.Filter(\"count\"); len(o.Items) > 0 {\n\t\t\terr = hcl.DecodeObject(&count, o.Items[0].Val)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\t\"Error parsing count for %s[%s]: %s\",\n\t\t\t\t\tt,\n\t\t\t\t\tk,\n\t\t\t\t\terr)\n\t\t\t}\n\t\t}\n\t\tcountConfig, err := NewRawConfig(map[string]interface{}{\n\t\t\t\"count\": count,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tcountConfig.Key = \"count\"\n\n\t\t// If we have depends fields, then add those in\n\t\tvar dependsOn []string\n\t\tif o := listVal.Filter(\"depends_on\"); len(o.Items) > 0 {\n\t\t\terr := hcl.DecodeObject(&dependsOn, o.Items[0].Val)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\t\"Error reading depends_on for %s[%s]: %s\",\n\t\t\t\t\tt,\n\t\t\t\t\tk,\n\t\t\t\t\terr)\n\t\t\t}\n\t\t}\n\n\t\t// If we have connection info, then parse those out\n\t\tvar connInfo map[string]interface{}\n\t\tif o := listVal.Filter(\"connection\"); len(o.Items) > 0 {\n\t\t\terr := hcl.DecodeObject(&connInfo, o.Items[0].Val)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\t\"Error reading connection info for %s[%s]: %s\",\n\t\t\t\t\tt,\n\t\t\t\t\tk,\n\t\t\t\t\terr)\n\t\t\t}\n\t\t}\n\n\t\t// If we have provisioners, then parse those out\n\t\tvar provisioners []*Provisioner\n\t\tif os := listVal.Filter(\"provisioner\"); len(os.Items) > 0 {\n\t\t\tvar err error\n\t\t\tprovisioners, err = loadProvisionersHcl(os, connInfo)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\t\"Error reading provisioners for %s[%s]: %s\",\n\t\t\t\t\tt,\n\t\t\t\t\tk,\n\t\t\t\t\terr)\n\t\t\t}\n\t\t}\n\n\t\t// If we have a provider, then parse it out\n\t\tvar provider string\n\t\tif o := listVal.Filter(\"provider\"); len(o.Items) > 0 {\n\t\t\terr := hcl.DecodeObject(&provider, o.Items[0].Val)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\t\"Error reading provider for %s[%s]: %s\",\n\t\t\t\t\tt,\n\t\t\t\t\tk,\n\t\t\t\t\terr)\n\t\t\t}\n\t\t}\n\n\t\t// Check if the resource should be re-created before\n\t\t// destroying the existing instance\n\t\tvar lifecycle ResourceLifecycle\n\t\tif o := listVal.Filter(\"lifecycle\"); len(o.Items) > 0 {\n\t\t\tif len(o.Items) > 1 {\n\t\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\t\"%s[%s]: Multiple lifecycle blocks found, expected one\",\n\t\t\t\t\tt, k)\n\t\t\t}\n\n\t\t\t// Check for invalid keys\n\t\t\tvalid := []string{\"create_before_destroy\", \"ignore_changes\", \"prevent_destroy\"}\n\t\t\tif err := checkHCLKeys(o.Items[0].Val, valid); err != nil {\n\t\t\t\treturn nil, multierror.Prefix(err, fmt.Sprintf(\n\t\t\t\t\t\"%s[%s]:\", t, k))\n\t\t\t}\n\n\t\t\tvar raw map[string]interface{}\n\t\t\tif err = hcl.DecodeObject(&raw, o.Items[0].Val); err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\t\"Error parsing lifecycle for %s[%s]: %s\",\n\t\t\t\t\tt,\n\t\t\t\t\tk,\n\t\t\t\t\terr)\n\t\t\t}\n\n\t\t\tif err := mapstructure.WeakDecode(raw, &lifecycle); err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\t\"Error parsing lifecycle for %s[%s]: %s\",\n\t\t\t\t\tt,\n\t\t\t\t\tk,\n\t\t\t\t\terr)\n\t\t\t}\n\t\t}\n\n\t\tresult = append(result, &Resource{\n\t\t\tMode:         ManagedResourceMode,\n\t\t\tName:         k,\n\t\t\tType:         t,\n\t\t\tRawCount:     countConfig,\n\t\t\tRawConfig:    rawConfig,\n\t\t\tProvisioners: provisioners,\n\t\t\tProvider:     provider,\n\t\t\tDependsOn:    dependsOn,\n\t\t\tLifecycle:    lifecycle,\n\t\t})\n\t}\n\n\treturn result, nil\n}\n\nfunc loadProvisionersHcl(list *ast.ObjectList, connInfo map[string]interface{}) ([]*Provisioner, error) {\n\tif err := assertAllBlocksHaveNames(\"provisioner\", list); err != nil {\n\t\treturn nil, err\n\t}\n\n\tlist = list.Children()\n\tif len(list.Items) == 0 {\n\t\treturn nil, nil\n\t}\n\n\t// Go through each object and turn it into an actual result.\n\tresult := make([]*Provisioner, 0, len(list.Items))\n\tfor _, item := range list.Items {\n\t\tn := item.Keys[0].Token.Value().(string)\n\n\t\tvar listVal *ast.ObjectList\n\t\tif ot, ok := item.Val.(*ast.ObjectType); ok {\n\t\t\tlistVal = ot.List\n\t\t} else {\n\t\t\treturn nil, fmt.Errorf(\"provisioner '%s': should be an object\", n)\n\t\t}\n\n\t\tvar config map[string]interface{}\n\t\tif err := hcl.DecodeObject(&config, item.Val); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\t// Parse the \"when\" value\n\t\twhen := ProvisionerWhenCreate\n\t\tif v, ok := config[\"when\"]; ok {\n\t\t\tswitch v {\n\t\t\tcase \"create\":\n\t\t\t\twhen = ProvisionerWhenCreate\n\t\t\tcase \"destroy\":\n\t\t\t\twhen = ProvisionerWhenDestroy\n\t\t\tdefault:\n\t\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\t\"position %s: 'provisioner' when must be 'create' or 'destroy'\",\n\t\t\t\t\titem.Pos())\n\t\t\t}\n\t\t}\n\n\t\t// Parse the \"on_failure\" value\n\t\tonFailure := ProvisionerOnFailureFail\n\t\tif v, ok := config[\"on_failure\"]; ok {\n\t\t\tswitch v {\n\t\t\tcase \"continue\":\n\t\t\t\tonFailure = ProvisionerOnFailureContinue\n\t\t\tcase \"fail\":\n\t\t\t\tonFailure = ProvisionerOnFailureFail\n\t\t\tdefault:\n\t\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\t\"position %s: 'provisioner' on_failure must be 'continue' or 'fail'\",\n\t\t\t\t\titem.Pos())\n\t\t\t}\n\t\t}\n\n\t\t// Delete fields we special case\n\t\tdelete(config, \"connection\")\n\t\tdelete(config, \"when\")\n\t\tdelete(config, \"on_failure\")\n\n\t\trawConfig, err := NewRawConfig(config)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\t// Check if we have a provisioner-level connection\n\t\t// block that overrides the resource-level\n\t\tvar subConnInfo map[string]interface{}\n\t\tif o := listVal.Filter(\"connection\"); len(o.Items) > 0 {\n\t\t\terr := hcl.DecodeObject(&subConnInfo, o.Items[0].Val)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t}\n\n\t\t// Inherit from the resource connInfo any keys\n\t\t// that are not explicitly overriden.\n\t\tif connInfo != nil && subConnInfo != nil {\n\t\t\tfor k, v := range connInfo {\n\t\t\t\tif _, ok := subConnInfo[k]; !ok {\n\t\t\t\t\tsubConnInfo[k] = v\n\t\t\t\t}\n\t\t\t}\n\t\t} else if subConnInfo == nil {\n\t\t\tsubConnInfo = connInfo\n\t\t}\n\n\t\t// Parse the connInfo\n\t\tconnRaw, err := NewRawConfig(subConnInfo)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tresult = append(result, &Provisioner{\n\t\t\tType:      n,\n\t\t\tRawConfig: rawConfig,\n\t\t\tConnInfo:  connRaw,\n\t\t\tWhen:      when,\n\t\t\tOnFailure: onFailure,\n\t\t})\n\t}\n\n\treturn result, nil\n}\n\n/*\nfunc hclObjectMap(os *hclobj.Object) map[string]ast.ListNode {\n\tobjects := make(map[string][]*hclobj.Object)\n\n\tfor _, o := range os.Elem(false) {\n\t\tfor _, elem := range o.Elem(true) {\n\t\t\tval, ok := objects[elem.Key]\n\t\t\tif !ok {\n\t\t\t\tval = make([]*hclobj.Object, 0, 1)\n\t\t\t}\n\n\t\t\tval = append(val, elem)\n\t\t\tobjects[elem.Key] = val\n\t\t}\n\t}\n\n\treturn objects\n}\n*/\n\n// assertAllBlocksHaveNames returns an error if any of the items in\n// the given object list are blocks without keys (like \"module {}\")\n// or simple assignments (like \"module = 1\"). It returns nil if\n// neither of these things are true.\n//\n// The given name is used in any generated error messages, and should\n// be the name of the block we're dealing with. The given list should\n// be the result of calling .Filter on an object list with that same\n// name.\nfunc assertAllBlocksHaveNames(name string, list *ast.ObjectList) error {\n\tif elem := list.Elem(); len(elem.Items) != 0 {\n\t\tswitch et := elem.Items[0].Val.(type) {\n\t\tcase *ast.ObjectType:\n\t\t\tpos := et.Lbrace\n\t\t\treturn fmt.Errorf(\"%s: %q must be followed by a name\", pos, name)\n\t\tdefault:\n\t\t\tpos := elem.Items[0].Val.Pos()\n\t\t\treturn fmt.Errorf(\"%s: %q must be a configuration block\", pos, name)\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc checkHCLKeys(node ast.Node, valid []string) error {\n\tvar list *ast.ObjectList\n\tswitch n := node.(type) {\n\tcase *ast.ObjectList:\n\t\tlist = n\n\tcase *ast.ObjectType:\n\t\tlist = n.List\n\tdefault:\n\t\treturn fmt.Errorf(\"cannot check HCL keys of type %T\", n)\n\t}\n\n\tvalidMap := make(map[string]struct{}, len(valid))\n\tfor _, v := range valid {\n\t\tvalidMap[v] = struct{}{}\n\t}\n\n\tvar result error\n\tfor _, item := range list.Items {\n\t\tkey := item.Keys[0].Token.Value().(string)\n\t\tif _, ok := validMap[key]; !ok {\n\t\t\tresult = multierror.Append(result, fmt.Errorf(\n\t\t\t\t\"invalid key: %s\", key))\n\t\t}\n\t}\n\n\treturn result\n}\n\n// unwrapHCLObjectKeysFromJSON cleans up an edge case that can occur when\n// parsing JSON as input: if we're parsing JSON then directly nested\n// items will show up as additional \"keys\".\n//\n// For objects that expect a fixed number of keys, this breaks the\n// decoding process. This function unwraps the object into what it would've\n// looked like if it came directly from HCL by specifying the number of keys\n// you expect.\n//\n// Example:\n//\n// { \"foo\": { \"baz\": {} } }\n//\n// Will show up with Keys being: []string{\"foo\", \"baz\"}\n// when we really just want the first two. This function will fix this.\nfunc unwrapHCLObjectKeysFromJSON(item *ast.ObjectItem, depth int) {\n\tif len(item.Keys) > depth && item.Keys[0].Token.JSON {\n\t\tfor len(item.Keys) > depth {\n\t\t\t// Pop off the last key\n\t\t\tn := len(item.Keys)\n\t\t\tkey := item.Keys[n-1]\n\t\t\titem.Keys[n-1] = nil\n\t\t\titem.Keys = item.Keys[:n-1]\n\n\t\t\t// Wrap our value in a list\n\t\t\titem.Val = &ast.ObjectType{\n\t\t\t\tList: &ast.ObjectList{\n\t\t\t\t\tItems: []*ast.ObjectItem{\n\t\t\t\t\t\t&ast.ObjectItem{\n\t\t\t\t\t\t\tKeys: []*ast.ObjectKey{key},\n\t\t\t\t\t\t\tVal:  item.Val,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/config/loader_hcl2.go",
    "content": "package config\n\nimport (\n\t\"fmt\"\n\t\"sort\"\n\t\"strings\"\n\n\tgohcl2 \"github.com/hashicorp/hcl2/gohcl\"\n\thcl2 \"github.com/hashicorp/hcl2/hcl\"\n\thcl2parse \"github.com/hashicorp/hcl2/hclparse\"\n\t\"github.com/hashicorp/terraform/config/hcl2shim\"\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// hcl2Configurable is an implementation of configurable that knows\n// how to turn a HCL Body into a *Config object.\ntype hcl2Configurable struct {\n\tSourceFilename string\n\tBody           hcl2.Body\n}\n\n// hcl2Loader is a wrapper around a HCL parser that provides a fileLoaderFunc.\ntype hcl2Loader struct {\n\tParser *hcl2parse.Parser\n}\n\n// For the moment we'll just have a global loader since we don't have anywhere\n// better to stash this.\n// TODO: refactor the loader API so that it uses some sort of object we can\n// stash the parser inside.\nvar globalHCL2Loader = newHCL2Loader()\n\n// newHCL2Loader creates a new hcl2Loader containing a new HCL Parser.\n//\n// HCL parsers retain information about files that are loaded to aid in\n// producing diagnostic messages, so all files within a single configuration\n// should be loaded with the same parser to ensure the availability of\n// full diagnostic information.\nfunc newHCL2Loader() hcl2Loader {\n\treturn hcl2Loader{\n\t\tParser: hcl2parse.NewParser(),\n\t}\n}\n\n// loadFile is a fileLoaderFunc that knows how to read a HCL2 file and turn it\n// into a hcl2Configurable.\nfunc (l hcl2Loader) loadFile(filename string) (configurable, []string, error) {\n\tvar f *hcl2.File\n\tvar diags hcl2.Diagnostics\n\tif strings.HasSuffix(filename, \".json\") {\n\t\tf, diags = l.Parser.ParseJSONFile(filename)\n\t} else {\n\t\tf, diags = l.Parser.ParseHCLFile(filename)\n\t}\n\tif diags.HasErrors() {\n\t\t// Return diagnostics as an error; callers may type-assert this to\n\t\t// recover the original diagnostics, if it doesn't end up wrapped\n\t\t// in another error.\n\t\treturn nil, nil, diags\n\t}\n\n\treturn &hcl2Configurable{\n\t\tSourceFilename: filename,\n\t\tBody:           f.Body,\n\t}, nil, nil\n}\n\nfunc (t *hcl2Configurable) Config() (*Config, error) {\n\tconfig := &Config{}\n\n\t// these structs are used only for the initial shallow decoding; we'll\n\t// expand this into the main, public-facing config structs afterwards.\n\ttype atlas struct {\n\t\tName    string    `hcl:\"name\"`\n\t\tInclude *[]string `hcl:\"include\"`\n\t\tExclude *[]string `hcl:\"exclude\"`\n\t}\n\ttype provider struct {\n\t\tName    string    `hcl:\"name,label\"`\n\t\tAlias   *string   `hcl:\"alias,attr\"`\n\t\tVersion *string   `hcl:\"version,attr\"`\n\t\tConfig  hcl2.Body `hcl:\",remain\"`\n\t}\n\ttype module struct {\n\t\tName      string             `hcl:\"name,label\"`\n\t\tSource    string             `hcl:\"source,attr\"`\n\t\tVersion   *string            `hcl:\"version,attr\"`\n\t\tProviders *map[string]string `hcl:\"providers,attr\"`\n\t\tConfig    hcl2.Body          `hcl:\",remain\"`\n\t}\n\ttype resourceLifecycle struct {\n\t\tCreateBeforeDestroy *bool     `hcl:\"create_before_destroy,attr\"`\n\t\tPreventDestroy      *bool     `hcl:\"prevent_destroy,attr\"`\n\t\tIgnoreChanges       *[]string `hcl:\"ignore_changes,attr\"`\n\t}\n\ttype connection struct {\n\t\tConfig hcl2.Body `hcl:\",remain\"`\n\t}\n\ttype provisioner struct {\n\t\tType string `hcl:\"type,label\"`\n\n\t\tWhen      *string `hcl:\"when,attr\"`\n\t\tOnFailure *string `hcl:\"on_failure,attr\"`\n\n\t\tConnection *connection `hcl:\"connection,block\"`\n\t\tConfig     hcl2.Body   `hcl:\",remain\"`\n\t}\n\ttype managedResource struct {\n\t\tType string `hcl:\"type,label\"`\n\t\tName string `hcl:\"name,label\"`\n\n\t\tCountExpr hcl2.Expression `hcl:\"count,attr\"`\n\t\tProvider  *string         `hcl:\"provider,attr\"`\n\t\tDependsOn *[]string       `hcl:\"depends_on,attr\"`\n\n\t\tLifecycle    *resourceLifecycle `hcl:\"lifecycle,block\"`\n\t\tProvisioners []provisioner      `hcl:\"provisioner,block\"`\n\t\tConnection   *connection        `hcl:\"connection,block\"`\n\n\t\tConfig hcl2.Body `hcl:\",remain\"`\n\t}\n\ttype dataResource struct {\n\t\tType string `hcl:\"type,label\"`\n\t\tName string `hcl:\"name,label\"`\n\n\t\tCountExpr hcl2.Expression `hcl:\"count,attr\"`\n\t\tProvider  *string         `hcl:\"provider,attr\"`\n\t\tDependsOn *[]string       `hcl:\"depends_on,attr\"`\n\n\t\tConfig hcl2.Body `hcl:\",remain\"`\n\t}\n\ttype variable struct {\n\t\tName string `hcl:\"name,label\"`\n\n\t\tDeclaredType *string    `hcl:\"type,attr\"`\n\t\tDefault      *cty.Value `hcl:\"default,attr\"`\n\t\tDescription  *string    `hcl:\"description,attr\"`\n\t\tSensitive    *bool      `hcl:\"sensitive,attr\"`\n\t}\n\ttype output struct {\n\t\tName string `hcl:\"name,label\"`\n\n\t\tValueExpr   hcl2.Expression `hcl:\"value,attr\"`\n\t\tDependsOn   *[]string       `hcl:\"depends_on,attr\"`\n\t\tDescription *string         `hcl:\"description,attr\"`\n\t\tSensitive   *bool           `hcl:\"sensitive,attr\"`\n\t}\n\ttype locals struct {\n\t\tDefinitions hcl2.Attributes `hcl:\",remain\"`\n\t}\n\ttype backend struct {\n\t\tType   string    `hcl:\"type,label\"`\n\t\tConfig hcl2.Body `hcl:\",remain\"`\n\t}\n\ttype terraform struct {\n\t\tRequiredVersion *string  `hcl:\"required_version,attr\"`\n\t\tBackend         *backend `hcl:\"backend,block\"`\n\t}\n\ttype topLevel struct {\n\t\tAtlas     *atlas            `hcl:\"atlas,block\"`\n\t\tDatas     []dataResource    `hcl:\"data,block\"`\n\t\tModules   []module          `hcl:\"module,block\"`\n\t\tOutputs   []output          `hcl:\"output,block\"`\n\t\tProviders []provider        `hcl:\"provider,block\"`\n\t\tResources []managedResource `hcl:\"resource,block\"`\n\t\tTerraform *terraform        `hcl:\"terraform,block\"`\n\t\tVariables []variable        `hcl:\"variable,block\"`\n\t\tLocals    []*locals         `hcl:\"locals,block\"`\n\t}\n\n\tvar raw topLevel\n\tdiags := gohcl2.DecodeBody(t.Body, nil, &raw)\n\tif diags.HasErrors() {\n\t\t// Do some minimal decoding to see if we can at least get the\n\t\t// required Terraform version, which might help explain why we\n\t\t// couldn't parse the rest.\n\t\tif raw.Terraform != nil && raw.Terraform.RequiredVersion != nil {\n\t\t\tconfig.Terraform = &Terraform{\n\t\t\t\tRequiredVersion: *raw.Terraform.RequiredVersion,\n\t\t\t}\n\t\t}\n\n\t\t// We return the diags as an implementation of error, which the\n\t\t// caller than then type-assert if desired to recover the individual\n\t\t// diagnostics.\n\t\t// FIXME: The current API gives us no way to return warnings in the\n\t\t// absense of any errors.\n\t\treturn config, diags\n\t}\n\n\tif raw.Terraform != nil {\n\t\tvar reqdVersion string\n\t\tvar backend *Backend\n\n\t\tif raw.Terraform.RequiredVersion != nil {\n\t\t\treqdVersion = *raw.Terraform.RequiredVersion\n\t\t}\n\t\tif raw.Terraform.Backend != nil {\n\t\t\tbackend = new(Backend)\n\t\t\tbackend.Type = raw.Terraform.Backend.Type\n\n\t\t\t// We don't permit interpolations or nested blocks inside the\n\t\t\t// backend config, so we can decode the config early here and\n\t\t\t// get direct access to the values, which is important for the\n\t\t\t// config hashing to work as expected.\n\t\t\tvar config map[string]string\n\t\t\tconfigDiags := gohcl2.DecodeBody(raw.Terraform.Backend.Config, nil, &config)\n\t\t\tdiags = append(diags, configDiags...)\n\n\t\t\traw := make(map[string]interface{}, len(config))\n\t\t\tfor k, v := range config {\n\t\t\t\traw[k] = v\n\t\t\t}\n\n\t\t\tvar err error\n\t\t\tbackend.RawConfig, err = NewRawConfig(raw)\n\t\t\tif err != nil {\n\t\t\t\tdiags = append(diags, &hcl2.Diagnostic{\n\t\t\t\t\tSeverity: hcl2.DiagError,\n\t\t\t\t\tSummary:  \"Invalid backend configuration\",\n\t\t\t\t\tDetail:   fmt.Sprintf(\"Error in backend configuration: %s\", err),\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\tconfig.Terraform = &Terraform{\n\t\t\tRequiredVersion: reqdVersion,\n\t\t\tBackend:         backend,\n\t\t}\n\t}\n\n\tif raw.Atlas != nil {\n\t\tvar include, exclude []string\n\t\tif raw.Atlas.Include != nil {\n\t\t\tinclude = *raw.Atlas.Include\n\t\t}\n\t\tif raw.Atlas.Exclude != nil {\n\t\t\texclude = *raw.Atlas.Exclude\n\t\t}\n\t\tconfig.Atlas = &AtlasConfig{\n\t\t\tName:    raw.Atlas.Name,\n\t\t\tInclude: include,\n\t\t\tExclude: exclude,\n\t\t}\n\t}\n\n\tfor _, rawM := range raw.Modules {\n\t\tm := &Module{\n\t\t\tName:      rawM.Name,\n\t\t\tSource:    rawM.Source,\n\t\t\tRawConfig: NewRawConfigHCL2(rawM.Config),\n\t\t}\n\n\t\tif rawM.Version != nil {\n\t\t\tm.Version = *rawM.Version\n\t\t}\n\n\t\tif rawM.Providers != nil {\n\t\t\tm.Providers = *rawM.Providers\n\t\t}\n\n\t\tconfig.Modules = append(config.Modules, m)\n\t}\n\n\tfor _, rawV := range raw.Variables {\n\t\tv := &Variable{\n\t\t\tName: rawV.Name,\n\t\t}\n\t\tif rawV.DeclaredType != nil {\n\t\t\tv.DeclaredType = *rawV.DeclaredType\n\t\t}\n\t\tif rawV.Default != nil {\n\t\t\tv.Default = hcl2shim.ConfigValueFromHCL2(*rawV.Default)\n\t\t}\n\t\tif rawV.Description != nil {\n\t\t\tv.Description = *rawV.Description\n\t\t}\n\n\t\tconfig.Variables = append(config.Variables, v)\n\t}\n\n\tfor _, rawO := range raw.Outputs {\n\t\to := &Output{\n\t\t\tName: rawO.Name,\n\t\t}\n\n\t\tif rawO.Description != nil {\n\t\t\to.Description = *rawO.Description\n\t\t}\n\t\tif rawO.DependsOn != nil {\n\t\t\to.DependsOn = *rawO.DependsOn\n\t\t}\n\t\tif rawO.Sensitive != nil {\n\t\t\to.Sensitive = *rawO.Sensitive\n\t\t}\n\n\t\t// The result is expected to be a map like map[string]interface{}{\"value\": something},\n\t\t// so we'll fake that with our hcl2shim.SingleAttrBody shim.\n\t\to.RawConfig = NewRawConfigHCL2(hcl2shim.SingleAttrBody{\n\t\t\tName: \"value\",\n\t\t\tExpr: rawO.ValueExpr,\n\t\t})\n\n\t\tconfig.Outputs = append(config.Outputs, o)\n\t}\n\n\tfor _, rawR := range raw.Resources {\n\t\tr := &Resource{\n\t\t\tMode: ManagedResourceMode,\n\t\t\tType: rawR.Type,\n\t\t\tName: rawR.Name,\n\t\t}\n\t\tif rawR.Lifecycle != nil {\n\t\t\tvar l ResourceLifecycle\n\t\t\tif rawR.Lifecycle.CreateBeforeDestroy != nil {\n\t\t\t\tl.CreateBeforeDestroy = *rawR.Lifecycle.CreateBeforeDestroy\n\t\t\t}\n\t\t\tif rawR.Lifecycle.PreventDestroy != nil {\n\t\t\t\tl.PreventDestroy = *rawR.Lifecycle.PreventDestroy\n\t\t\t}\n\t\t\tif rawR.Lifecycle.IgnoreChanges != nil {\n\t\t\t\tl.IgnoreChanges = *rawR.Lifecycle.IgnoreChanges\n\t\t\t}\n\t\t\tr.Lifecycle = l\n\t\t}\n\t\tif rawR.Provider != nil {\n\t\t\tr.Provider = *rawR.Provider\n\t\t}\n\t\tif rawR.DependsOn != nil {\n\t\t\tr.DependsOn = *rawR.DependsOn\n\t\t}\n\n\t\tvar defaultConnInfo *RawConfig\n\t\tif rawR.Connection != nil {\n\t\t\tdefaultConnInfo = NewRawConfigHCL2(rawR.Connection.Config)\n\t\t}\n\n\t\tfor _, rawP := range rawR.Provisioners {\n\t\t\tp := &Provisioner{\n\t\t\t\tType: rawP.Type,\n\t\t\t}\n\n\t\t\tswitch {\n\t\t\tcase rawP.When == nil:\n\t\t\t\tp.When = ProvisionerWhenCreate\n\t\t\tcase *rawP.When == \"create\":\n\t\t\t\tp.When = ProvisionerWhenCreate\n\t\t\tcase *rawP.When == \"destroy\":\n\t\t\t\tp.When = ProvisionerWhenDestroy\n\t\t\tdefault:\n\t\t\t\tp.When = ProvisionerWhenInvalid\n\t\t\t}\n\n\t\t\tswitch {\n\t\t\tcase rawP.OnFailure == nil:\n\t\t\t\tp.OnFailure = ProvisionerOnFailureFail\n\t\t\tcase *rawP.When == \"fail\":\n\t\t\t\tp.OnFailure = ProvisionerOnFailureFail\n\t\t\tcase *rawP.When == \"continue\":\n\t\t\t\tp.OnFailure = ProvisionerOnFailureContinue\n\t\t\tdefault:\n\t\t\t\tp.OnFailure = ProvisionerOnFailureInvalid\n\t\t\t}\n\n\t\t\tif rawP.Connection != nil {\n\t\t\t\tp.ConnInfo = NewRawConfigHCL2(rawP.Connection.Config)\n\t\t\t} else {\n\t\t\t\tp.ConnInfo = defaultConnInfo\n\t\t\t}\n\n\t\t\tp.RawConfig = NewRawConfigHCL2(rawP.Config)\n\n\t\t\tr.Provisioners = append(r.Provisioners, p)\n\t\t}\n\n\t\t// The old loader records the count expression as a weird RawConfig with\n\t\t// a single-element map inside. Since the rest of the world is assuming\n\t\t// that, we'll mimic it here.\n\t\t{\n\t\t\tcountBody := hcl2shim.SingleAttrBody{\n\t\t\t\tName: \"count\",\n\t\t\t\tExpr: rawR.CountExpr,\n\t\t\t}\n\n\t\t\tr.RawCount = NewRawConfigHCL2(countBody)\n\t\t\tr.RawCount.Key = \"count\"\n\t\t}\n\n\t\tr.RawConfig = NewRawConfigHCL2(rawR.Config)\n\n\t\tconfig.Resources = append(config.Resources, r)\n\n\t}\n\n\tfor _, rawR := range raw.Datas {\n\t\tr := &Resource{\n\t\t\tMode: DataResourceMode,\n\t\t\tType: rawR.Type,\n\t\t\tName: rawR.Name,\n\t\t}\n\n\t\tif rawR.Provider != nil {\n\t\t\tr.Provider = *rawR.Provider\n\t\t}\n\t\tif rawR.DependsOn != nil {\n\t\t\tr.DependsOn = *rawR.DependsOn\n\t\t}\n\n\t\t// The old loader records the count expression as a weird RawConfig with\n\t\t// a single-element map inside. Since the rest of the world is assuming\n\t\t// that, we'll mimic it here.\n\t\t{\n\t\t\tcountBody := hcl2shim.SingleAttrBody{\n\t\t\t\tName: \"count\",\n\t\t\t\tExpr: rawR.CountExpr,\n\t\t\t}\n\n\t\t\tr.RawCount = NewRawConfigHCL2(countBody)\n\t\t\tr.RawCount.Key = \"count\"\n\t\t}\n\n\t\tr.RawConfig = NewRawConfigHCL2(rawR.Config)\n\n\t\tconfig.Resources = append(config.Resources, r)\n\t}\n\n\tfor _, rawP := range raw.Providers {\n\t\tp := &ProviderConfig{\n\t\t\tName: rawP.Name,\n\t\t}\n\n\t\tif rawP.Alias != nil {\n\t\t\tp.Alias = *rawP.Alias\n\t\t}\n\t\tif rawP.Version != nil {\n\t\t\tp.Version = *rawP.Version\n\t\t}\n\n\t\t// The result is expected to be a map like map[string]interface{}{\"value\": something},\n\t\t// so we'll fake that with our hcl2shim.SingleAttrBody shim.\n\t\tp.RawConfig = NewRawConfigHCL2(rawP.Config)\n\n\t\tconfig.ProviderConfigs = append(config.ProviderConfigs, p)\n\t}\n\n\tfor _, rawL := range raw.Locals {\n\t\tnames := make([]string, 0, len(rawL.Definitions))\n\t\tfor n := range rawL.Definitions {\n\t\t\tnames = append(names, n)\n\t\t}\n\t\tsort.Strings(names)\n\t\tfor _, n := range names {\n\t\t\tattr := rawL.Definitions[n]\n\t\t\tl := &Local{\n\t\t\t\tName: n,\n\t\t\t\tRawConfig: NewRawConfigHCL2(hcl2shim.SingleAttrBody{\n\t\t\t\t\tName: \"value\",\n\t\t\t\t\tExpr: attr.Expr,\n\t\t\t\t}),\n\t\t\t}\n\t\t\tconfig.Locals = append(config.Locals, l)\n\t\t}\n\t}\n\n\t// FIXME: The current API gives us no way to return warnings in the\n\t// absense of any errors.\n\tvar err error\n\tif diags.HasErrors() {\n\t\terr = diags\n\t}\n\n\treturn config, err\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/config/merge.go",
    "content": "package config\n\n// Merge merges two configurations into a single configuration.\n//\n// Merge allows for the two configurations to have duplicate resources,\n// because the resources will be merged. This differs from a single\n// Config which must only have unique resources.\nfunc Merge(c1, c2 *Config) (*Config, error) {\n\tc := new(Config)\n\n\t// Merge unknown keys\n\tunknowns := make(map[string]struct{})\n\tfor _, k := range c1.unknownKeys {\n\t\t_, present := unknowns[k]\n\t\tif !present {\n\t\t\tunknowns[k] = struct{}{}\n\t\t\tc.unknownKeys = append(c.unknownKeys, k)\n\t\t}\n\t}\n\tfor _, k := range c2.unknownKeys {\n\t\t_, present := unknowns[k]\n\t\tif !present {\n\t\t\tunknowns[k] = struct{}{}\n\t\t\tc.unknownKeys = append(c.unknownKeys, k)\n\t\t}\n\t}\n\n\t// Merge Atlas configuration. This is a dumb one overrides the other\n\t// sort of merge.\n\tc.Atlas = c1.Atlas\n\tif c2.Atlas != nil {\n\t\tc.Atlas = c2.Atlas\n\t}\n\n\t// Merge the Terraform configuration\n\tif c1.Terraform != nil {\n\t\tc.Terraform = c1.Terraform\n\t\tif c2.Terraform != nil {\n\t\t\tc.Terraform.Merge(c2.Terraform)\n\t\t}\n\t} else {\n\t\tc.Terraform = c2.Terraform\n\t}\n\n\t// NOTE: Everything below is pretty gross. Due to the lack of generics\n\t// in Go, there is some hoop-jumping involved to make this merging a\n\t// little more test-friendly and less repetitive. Ironically, making it\n\t// less repetitive involves being a little repetitive, but I prefer to\n\t// be repetitive with things that are less error prone than things that\n\t// are more error prone (more logic). Type conversions to an interface\n\t// are pretty low-error.\n\n\tvar m1, m2, mresult []merger\n\n\t// Modules\n\tm1 = make([]merger, 0, len(c1.Modules))\n\tm2 = make([]merger, 0, len(c2.Modules))\n\tfor _, v := range c1.Modules {\n\t\tm1 = append(m1, v)\n\t}\n\tfor _, v := range c2.Modules {\n\t\tm2 = append(m2, v)\n\t}\n\tmresult = mergeSlice(m1, m2)\n\tif len(mresult) > 0 {\n\t\tc.Modules = make([]*Module, len(mresult))\n\t\tfor i, v := range mresult {\n\t\t\tc.Modules[i] = v.(*Module)\n\t\t}\n\t}\n\n\t// Outputs\n\tm1 = make([]merger, 0, len(c1.Outputs))\n\tm2 = make([]merger, 0, len(c2.Outputs))\n\tfor _, v := range c1.Outputs {\n\t\tm1 = append(m1, v)\n\t}\n\tfor _, v := range c2.Outputs {\n\t\tm2 = append(m2, v)\n\t}\n\tmresult = mergeSlice(m1, m2)\n\tif len(mresult) > 0 {\n\t\tc.Outputs = make([]*Output, len(mresult))\n\t\tfor i, v := range mresult {\n\t\t\tc.Outputs[i] = v.(*Output)\n\t\t}\n\t}\n\n\t// Provider Configs\n\tm1 = make([]merger, 0, len(c1.ProviderConfigs))\n\tm2 = make([]merger, 0, len(c2.ProviderConfigs))\n\tfor _, v := range c1.ProviderConfigs {\n\t\tm1 = append(m1, v)\n\t}\n\tfor _, v := range c2.ProviderConfigs {\n\t\tm2 = append(m2, v)\n\t}\n\tmresult = mergeSlice(m1, m2)\n\tif len(mresult) > 0 {\n\t\tc.ProviderConfigs = make([]*ProviderConfig, len(mresult))\n\t\tfor i, v := range mresult {\n\t\t\tc.ProviderConfigs[i] = v.(*ProviderConfig)\n\t\t}\n\t}\n\n\t// Resources\n\tm1 = make([]merger, 0, len(c1.Resources))\n\tm2 = make([]merger, 0, len(c2.Resources))\n\tfor _, v := range c1.Resources {\n\t\tm1 = append(m1, v)\n\t}\n\tfor _, v := range c2.Resources {\n\t\tm2 = append(m2, v)\n\t}\n\tmresult = mergeSlice(m1, m2)\n\tif len(mresult) > 0 {\n\t\tc.Resources = make([]*Resource, len(mresult))\n\t\tfor i, v := range mresult {\n\t\t\tc.Resources[i] = v.(*Resource)\n\t\t}\n\t}\n\n\t// Variables\n\tm1 = make([]merger, 0, len(c1.Variables))\n\tm2 = make([]merger, 0, len(c2.Variables))\n\tfor _, v := range c1.Variables {\n\t\tm1 = append(m1, v)\n\t}\n\tfor _, v := range c2.Variables {\n\t\tm2 = append(m2, v)\n\t}\n\tmresult = mergeSlice(m1, m2)\n\tif len(mresult) > 0 {\n\t\tc.Variables = make([]*Variable, len(mresult))\n\t\tfor i, v := range mresult {\n\t\t\tc.Variables[i] = v.(*Variable)\n\t\t}\n\t}\n\n\t// Local Values\n\t// These are simpler than the other config elements because they are just\n\t// flat values and so no deep merging is required.\n\tif localsCount := len(c1.Locals) + len(c2.Locals); localsCount != 0 {\n\t\t// Explicit length check above because we want c.Locals to remain\n\t\t// nil if the result would be empty.\n\t\tc.Locals = make([]*Local, 0, len(c1.Locals)+len(c2.Locals))\n\t\tc.Locals = append(c.Locals, c1.Locals...)\n\t\tc.Locals = append(c.Locals, c2.Locals...)\n\t}\n\n\treturn c, nil\n}\n\n// merger is an interface that must be implemented by types that are\n// merge-able. This simplifies the implementation of Merge for the various\n// components of a Config.\ntype merger interface {\n\tmergerName() string\n\tmergerMerge(merger) merger\n}\n\n// mergeSlice merges a slice of mergers.\nfunc mergeSlice(m1, m2 []merger) []merger {\n\tr := make([]merger, len(m1), len(m1)+len(m2))\n\tcopy(r, m1)\n\n\tm := map[string]struct{}{}\n\tfor _, v2 := range m2 {\n\t\t// If we already saw it, just append it because its a\n\t\t// duplicate and invalid...\n\t\tname := v2.mergerName()\n\t\tif _, ok := m[name]; ok {\n\t\t\tr = append(r, v2)\n\t\t\tcontinue\n\t\t}\n\t\tm[name] = struct{}{}\n\n\t\t// Find an original to override\n\t\tvar original merger\n\t\toriginalIndex := -1\n\t\tfor i, v := range m1 {\n\t\t\tif v.mergerName() == name {\n\t\t\t\toriginalIndex = i\n\t\t\t\toriginal = v\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\tvar v merger\n\t\tif original == nil {\n\t\t\tv = v2\n\t\t} else {\n\t\t\tv = original.mergerMerge(v2)\n\t\t}\n\n\t\tif originalIndex == -1 {\n\t\t\tr = append(r, v)\n\t\t} else {\n\t\t\tr[originalIndex] = v\n\t\t}\n\t}\n\n\treturn r\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/config/module/copy_dir.go",
    "content": "package module\n\nimport (\n\t\"io\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n)\n\n// copyDir copies the src directory contents into dst. Both directories\n// should already exist.\nfunc copyDir(dst, src string) error {\n\tsrc, err := filepath.EvalSymlinks(src)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\twalkFn := func(path string, info os.FileInfo, err error) error {\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tif path == src {\n\t\t\treturn nil\n\t\t}\n\n\t\tif strings.HasPrefix(filepath.Base(path), \".\") {\n\t\t\t// Skip any dot files\n\t\t\tif info.IsDir() {\n\t\t\t\treturn filepath.SkipDir\n\t\t\t} else {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t}\n\n\t\t// The \"path\" has the src prefixed to it. We need to join our\n\t\t// destination with the path without the src on it.\n\t\tdstPath := filepath.Join(dst, path[len(src):])\n\n\t\t// we don't want to try and copy the same file over itself.\n\t\tif eq, err := sameFile(path, dstPath); eq {\n\t\t\treturn nil\n\t\t} else if err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// If we have a directory, make that subdirectory, then continue\n\t\t// the walk.\n\t\tif info.IsDir() {\n\t\t\tif path == filepath.Join(src, dst) {\n\t\t\t\t// dst is in src; don't walk it.\n\t\t\t\treturn nil\n\t\t\t}\n\n\t\t\tif err := os.MkdirAll(dstPath, 0755); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn nil\n\t\t}\n\n\t\t// If we have a file, copy the contents.\n\t\tsrcF, err := os.Open(path)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefer srcF.Close()\n\n\t\tdstF, err := os.Create(dstPath)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefer dstF.Close()\n\n\t\tif _, err := io.Copy(dstF, srcF); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// Chmod it\n\t\treturn os.Chmod(dstPath, info.Mode())\n\t}\n\n\treturn filepath.Walk(src, walkFn)\n}\n\n// sameFile tried to determine if to paths are the same file.\n// If the paths don't match, we lookup the inode on supported systems.\nfunc sameFile(a, b string) (bool, error) {\n\tif a == b {\n\t\treturn true, nil\n\t}\n\n\taIno, err := inode(a)\n\tif err != nil {\n\t\tif os.IsNotExist(err) {\n\t\t\treturn false, nil\n\t\t}\n\t\treturn false, err\n\t}\n\n\tbIno, err := inode(b)\n\tif err != nil {\n\t\tif os.IsNotExist(err) {\n\t\t\treturn false, nil\n\t\t}\n\t\treturn false, err\n\t}\n\n\tif aIno > 0 && aIno == bIno {\n\t\treturn true, nil\n\t}\n\n\treturn false, nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/config/module/get.go",
    "content": "package module\n\nimport (\n\t\"io/ioutil\"\n\t\"os\"\n\t\"path/filepath\"\n\n\t\"github.com/hashicorp/go-getter\"\n)\n\n// GetMode is an enum that describes how modules are loaded.\n//\n// GetModeLoad says that modules will not be downloaded or updated, they will\n// only be loaded from the storage.\n//\n// GetModeGet says that modules can be initially downloaded if they don't\n// exist, but otherwise to just load from the current version in storage.\n//\n// GetModeUpdate says that modules should be checked for updates and\n// downloaded prior to loading. If there are no updates, we load the version\n// from disk, otherwise we download first and then load.\ntype GetMode byte\n\nconst (\n\tGetModeNone GetMode = iota\n\tGetModeGet\n\tGetModeUpdate\n)\n\n// GetCopy is the same as Get except that it downloads a copy of the\n// module represented by source.\n//\n// This copy will omit and dot-prefixed files (such as .git/, .hg/) and\n// can't be updated on its own.\nfunc GetCopy(dst, src string) error {\n\t// Create the temporary directory to do the real Get to\n\ttmpDir, err := ioutil.TempDir(\"\", \"tf\")\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer os.RemoveAll(tmpDir)\n\n\ttmpDir = filepath.Join(tmpDir, \"module\")\n\n\t// Get to that temporary dir\n\tif err := getter.Get(tmpDir, src); err != nil {\n\t\treturn err\n\t}\n\n\t// Make sure the destination exists\n\tif err := os.MkdirAll(dst, 0755); err != nil {\n\t\treturn err\n\t}\n\n\t// Copy to the final location\n\treturn copyDir(dst, tmpDir)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/config/module/inode.go",
    "content": "// +build linux darwin openbsd netbsd solaris dragonfly\n\npackage module\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"syscall\"\n)\n\n// lookup the inode of a file on posix systems\nfunc inode(path string) (uint64, error) {\n\tstat, err := os.Stat(path)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tif st, ok := stat.Sys().(*syscall.Stat_t); ok {\n\t\treturn st.Ino, nil\n\t}\n\treturn 0, fmt.Errorf(\"could not determine file inode\")\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/config/module/inode_freebsd.go",
    "content": "// +build freebsd\n\npackage module\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"syscall\"\n)\n\n// lookup the inode of a file on posix systems\nfunc inode(path string) (uint64, error) {\n\tstat, err := os.Stat(path)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tif st, ok := stat.Sys().(*syscall.Stat_t); ok {\n\t\treturn uint64(st.Ino), nil\n\t}\n\treturn 0, fmt.Errorf(\"could not determine file inode\")\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/config/module/inode_windows.go",
    "content": "// +build windows\n\npackage module\n\n// no syscall.Stat_t on windows, return 0 for inodes\nfunc inode(path string) (uint64, error) {\n\treturn 0, nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/config/module/module.go",
    "content": "package module\n\n// Module represents the metadata for a single module.\ntype Module struct {\n\tName      string\n\tSource    string\n\tVersion   string\n\tProviders map[string]string\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/config/module/storage.go",
    "content": "package module\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"log\"\n\t\"os\"\n\t\"path/filepath\"\n\n\tgetter \"github.com/hashicorp/go-getter\"\n\t\"github.com/hashicorp/terraform/registry\"\n\t\"github.com/hashicorp/terraform/registry/regsrc\"\n\t\"github.com/hashicorp/terraform/svchost/disco\"\n\t\"github.com/mitchellh/cli\"\n)\n\nconst manifestName = \"modules.json\"\n\n// moduleManifest is the serialization structure used to record the stored\n// module's metadata.\ntype moduleManifest struct {\n\tModules []moduleRecord\n}\n\n// moduleRecords represents the stored module's metadata.\n// This is compared for equality using '==', so all fields needs to remain\n// comparable.\ntype moduleRecord struct {\n\t// Source is the module source string from the config, minus any\n\t// subdirectory.\n\tSource string\n\n\t// Key is the locally unique identifier for this module.\n\tKey string\n\n\t// Version is the exact version string for the stored module.\n\tVersion string\n\n\t// Dir is the directory name returned by the FileStorage. This is what\n\t// allows us to correlate a particular module version with the location on\n\t// disk.\n\tDir string\n\n\t// Root is the root directory containing the module. If the module is\n\t// unpacked from an archive, and not located in the root directory, this is\n\t// used to direct the loader to the correct subdirectory. This is\n\t// independent from any subdirectory in the original source string, which\n\t// may traverse further into the module tree.\n\tRoot string\n\n\t// url is the location of the module source\n\turl string\n\n\t// Registry is true if this module is sourced from a registry\n\tregistry bool\n}\n\n// Storage implements methods to manage the storage of modules.\n// This is used by Tree.Load to query registries, authenticate requests, and\n// store modules locally.\ntype Storage struct {\n\t// StorageDir is the full path to the directory where all modules will be\n\t// stored.\n\tStorageDir string\n\n\t// Ui is an optional cli.Ui for user output\n\tUi cli.Ui\n\n\t// Mode is the GetMode that will be used for various operations.\n\tMode GetMode\n\n\tregistry *registry.Client\n}\n\n// NewStorage returns a new initialized Storage object.\nfunc NewStorage(dir string, services *disco.Disco) *Storage {\n\tregClient := registry.NewClient(services, nil)\n\n\treturn &Storage{\n\t\tStorageDir: dir,\n\t\tregistry:   regClient,\n\t}\n}\n\n// loadManifest returns the moduleManifest file from the parent directory.\nfunc (s Storage) loadManifest() (moduleManifest, error) {\n\tmanifest := moduleManifest{}\n\n\tmanifestPath := filepath.Join(s.StorageDir, manifestName)\n\tdata, err := ioutil.ReadFile(manifestPath)\n\tif err != nil && !os.IsNotExist(err) {\n\t\treturn manifest, err\n\t}\n\n\tif len(data) == 0 {\n\t\treturn manifest, nil\n\t}\n\n\tif err := json.Unmarshal(data, &manifest); err != nil {\n\t\treturn manifest, err\n\t}\n\treturn manifest, nil\n}\n\n// Store the location of the module, along with the version used and the module\n// root directory. The storage method loads the entire file and rewrites it\n// each time. This is only done a few times during init, so efficiency is\n// not a concern.\nfunc (s Storage) recordModule(rec moduleRecord) error {\n\tmanifest, err := s.loadManifest()\n\tif err != nil {\n\t\t// if there was a problem with the file, we will attempt to write a new\n\t\t// one. Any non-data related error should surface there.\n\t\tlog.Printf(\"[WARN] error reading module manifest: %s\", err)\n\t}\n\n\t// do nothing if we already have the exact module\n\tfor i, stored := range manifest.Modules {\n\t\tif rec == stored {\n\t\t\treturn nil\n\t\t}\n\n\t\t// they are not equal, but if the storage path is the same we need to\n\t\t// remove this rec to be replaced.\n\t\tif rec.Dir == stored.Dir {\n\t\t\tmanifest.Modules[i] = manifest.Modules[len(manifest.Modules)-1]\n\t\t\tmanifest.Modules = manifest.Modules[:len(manifest.Modules)-1]\n\t\t\tbreak\n\t\t}\n\t}\n\n\tmanifest.Modules = append(manifest.Modules, rec)\n\n\tjs, err := json.Marshal(manifest)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tmanifestPath := filepath.Join(s.StorageDir, manifestName)\n\treturn ioutil.WriteFile(manifestPath, js, 0644)\n}\n\n// load the manifest from dir, and return all module versions matching the\n// provided source. Records with no version info will be skipped, as they need\n// to be uniquely identified by other means.\nfunc (s Storage) moduleVersions(source string) ([]moduleRecord, error) {\n\tmanifest, err := s.loadManifest()\n\tif err != nil {\n\t\treturn manifest.Modules, err\n\t}\n\n\tvar matching []moduleRecord\n\n\tfor _, m := range manifest.Modules {\n\t\tif m.Source == source && m.Version != \"\" {\n\t\t\tlog.Printf(\"[DEBUG] found local version %q for module %s\", m.Version, m.Source)\n\t\t\tmatching = append(matching, m)\n\t\t}\n\t}\n\n\treturn matching, nil\n}\n\nfunc (s Storage) moduleDir(key string) (string, error) {\n\tmanifest, err := s.loadManifest()\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\tfor _, m := range manifest.Modules {\n\t\tif m.Key == key {\n\t\t\treturn m.Dir, nil\n\t\t}\n\t}\n\n\treturn \"\", nil\n}\n\n// return only the root directory of the module stored in dir.\nfunc (s Storage) getModuleRoot(dir string) (string, error) {\n\tmanifest, err := s.loadManifest()\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\tfor _, mod := range manifest.Modules {\n\t\tif mod.Dir == dir {\n\t\t\treturn mod.Root, nil\n\t\t}\n\t}\n\treturn \"\", nil\n}\n\n// record only the Root directory for the module stored at dir.\nfunc (s Storage) recordModuleRoot(dir, root string) error {\n\trec := moduleRecord{\n\t\tDir:  dir,\n\t\tRoot: root,\n\t}\n\n\treturn s.recordModule(rec)\n}\n\nfunc (s Storage) output(msg string) {\n\tif s.Ui == nil || s.Mode == GetModeNone {\n\t\treturn\n\t}\n\ts.Ui.Output(msg)\n}\n\nfunc (s Storage) getStorage(key string, src string) (string, bool, error) {\n\tstorage := &getter.FolderStorage{\n\t\tStorageDir: s.StorageDir,\n\t}\n\n\tlog.Printf(\"[DEBUG] fetching module from %s\", src)\n\n\t// Get the module with the level specified if we were told to.\n\tif s.Mode > GetModeNone {\n\t\tlog.Printf(\"[DEBUG] fetching %q with key %q\", src, key)\n\t\tif err := storage.Get(key, src, s.Mode == GetModeUpdate); err != nil {\n\t\t\treturn \"\", false, err\n\t\t}\n\t}\n\n\t// Get the directory where the module is.\n\tdir, found, err := storage.Dir(key)\n\tlog.Printf(\"[DEBUG] found %q in %q: %t\", src, dir, found)\n\treturn dir, found, err\n}\n\n// find a stored module that's not from a registry\nfunc (s Storage) findModule(key string) (string, error) {\n\tif s.Mode == GetModeUpdate {\n\t\treturn \"\", nil\n\t}\n\n\treturn s.moduleDir(key)\n}\n\n// GetModule fetches a module source into the specified directory. This is used\n// as a convenience function by the CLI to initialize a configuration.\nfunc (s Storage) GetModule(dst, src string) error {\n\t// reset this in case the caller was going to re-use it\n\tmode := s.Mode\n\ts.Mode = GetModeUpdate\n\tdefer func() {\n\t\ts.Mode = mode\n\t}()\n\n\trec, err := s.findRegistryModule(src, anyVersion)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tpwd, err := os.Getwd()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tsource := rec.url\n\tif source == \"\" {\n\t\tsource, err = getter.Detect(src, pwd, getter.Detectors)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"module %s: %s\", src, err)\n\t\t}\n\t}\n\n\tif source == \"\" {\n\t\treturn fmt.Errorf(\"module %q not found\", src)\n\t}\n\n\treturn GetCopy(dst, source)\n}\n\n// find a registry module\nfunc (s Storage) findRegistryModule(mSource, constraint string) (moduleRecord, error) {\n\trec := moduleRecord{\n\t\tSource: mSource,\n\t}\n\t// detect if we have a registry source\n\tmod, err := regsrc.ParseModuleSource(mSource)\n\tswitch err {\n\tcase nil:\n\t\t//ok\n\tcase regsrc.ErrInvalidModuleSource:\n\t\treturn rec, nil\n\tdefault:\n\t\treturn rec, err\n\t}\n\trec.registry = true\n\n\tlog.Printf(\"[TRACE] %q is a registry module\", mod.Display())\n\n\tversions, err := s.moduleVersions(mod.String())\n\tif err != nil {\n\t\tlog.Printf(\"[ERROR] error looking up versions for %q: %s\", mod.Display(), err)\n\t\treturn rec, err\n\t}\n\n\tmatch, err := newestRecord(versions, constraint)\n\tif err != nil {\n\t\tlog.Printf(\"[INFO] no matching version for %q<%s>, %s\", mod.Display(), constraint, err)\n\t}\n\tlog.Printf(\"[DEBUG] matched %q version %s for %s\", mod, match.Version, constraint)\n\n\trec.Dir = match.Dir\n\trec.Version = match.Version\n\tfound := rec.Dir != \"\"\n\n\t// we need to lookup available versions\n\t// Only on Get if it's not found, on unconditionally on Update\n\tif (s.Mode == GetModeGet && !found) || (s.Mode == GetModeUpdate) {\n\t\tresp, err := s.registry.ModuleVersions(mod)\n\t\tif err != nil {\n\t\t\treturn rec, err\n\t\t}\n\n\t\tif len(resp.Modules) == 0 {\n\t\t\treturn rec, fmt.Errorf(\"module %q not found in registry\", mod.Display())\n\t\t}\n\n\t\tmatch, err := newestVersion(resp.Modules[0].Versions, constraint)\n\t\tif err != nil {\n\t\t\treturn rec, err\n\t\t}\n\n\t\tif match == nil {\n\t\t\treturn rec, fmt.Errorf(\"no versions for %q found matching %q\", mod.Display(), constraint)\n\t\t}\n\n\t\trec.Version = match.Version\n\n\t\trec.url, err = s.registry.ModuleLocation(mod, rec.Version)\n\t\tif err != nil {\n\t\t\treturn rec, err\n\t\t}\n\n\t\t// we've already validated this by now\n\t\thost, _ := mod.SvcHost()\n\t\ts.output(fmt.Sprintf(\"  Found version %s of %s on %s\", rec.Version, mod.Module(), host.ForDisplay()))\n\n\t}\n\treturn rec, nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/config/module/testing.go",
    "content": "package module\n\nimport (\n\t\"io/ioutil\"\n\t\"os\"\n\t\"testing\"\n)\n\n// TestTree loads a module at the given path and returns the tree as well\n// as a function that should be deferred to clean up resources.\nfunc TestTree(t *testing.T, path string) (*Tree, func()) {\n\t// Create a temporary directory for module storage\n\tdir, err := ioutil.TempDir(\"\", \"tf\")\n\tif err != nil {\n\t\tt.Fatalf(\"err: %s\", err)\n\t\treturn nil, nil\n\t}\n\n\t// Load the module\n\tmod, err := NewTreeModule(\"\", path)\n\tif err != nil {\n\t\tt.Fatalf(\"err: %s\", err)\n\t\treturn nil, nil\n\t}\n\n\t// Get the child modules\n\ts := &Storage{StorageDir: dir, Mode: GetModeGet}\n\tif err := mod.Load(s); err != nil {\n\t\tt.Fatalf(\"err: %s\", err)\n\t\treturn nil, nil\n\t}\n\n\treturn mod, func() {\n\t\tos.RemoveAll(dir)\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/config/module/tree.go",
    "content": "package module\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"fmt\"\n\t\"log\"\n\t\"path/filepath\"\n\t\"strings\"\n\t\"sync\"\n\n\t\"github.com/hashicorp/terraform/tfdiags\"\n\n\tgetter \"github.com/hashicorp/go-getter\"\n\t\"github.com/hashicorp/terraform/config\"\n)\n\n// RootName is the name of the root tree.\nconst RootName = \"root\"\n\n// Tree represents the module import tree of configurations.\n//\n// This Tree structure can be used to get (download) new modules, load\n// all the modules without getting, flatten the tree into something\n// Terraform can use, etc.\ntype Tree struct {\n\tname     string\n\tconfig   *config.Config\n\tchildren map[string]*Tree\n\tpath     []string\n\tlock     sync.RWMutex\n\n\t// version is the final version of the config loaded for the Tree's module\n\tversion string\n\t// source is the \"source\" string used to load this module. It's possible\n\t// for a module source to change, but the path remains the same, preventing\n\t// it from being reloaded.\n\tsource string\n\t// parent allows us to walk back up the tree and determine if there are any\n\t// versioned ancestor modules which may effect the stored location of\n\t// submodules\n\tparent *Tree\n}\n\n// NewTree returns a new Tree for the given config structure.\nfunc NewTree(name string, c *config.Config) *Tree {\n\treturn &Tree{config: c, name: name}\n}\n\n// NewEmptyTree returns a new tree that is empty (contains no configuration).\nfunc NewEmptyTree() *Tree {\n\tt := &Tree{config: &config.Config{}}\n\n\t// We do this dummy load so that the tree is marked as \"loaded\". It\n\t// should never fail because this is just about a no-op. If it does fail\n\t// we panic so we can know its a bug.\n\tif err := t.Load(&Storage{Mode: GetModeGet}); err != nil {\n\t\tpanic(err)\n\t}\n\n\treturn t\n}\n\n// NewTreeModule is like NewTree except it parses the configuration in\n// the directory and gives it a specific name. Use a blank name \"\" to specify\n// the root module.\nfunc NewTreeModule(name, dir string) (*Tree, error) {\n\tc, err := config.LoadDir(dir)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn NewTree(name, c), nil\n}\n\n// Config returns the configuration for this module.\nfunc (t *Tree) Config() *config.Config {\n\treturn t.config\n}\n\n// Child returns the child with the given path (by name).\nfunc (t *Tree) Child(path []string) *Tree {\n\tif t == nil {\n\t\treturn nil\n\t}\n\n\tif len(path) == 0 {\n\t\treturn t\n\t}\n\n\tc := t.Children()[path[0]]\n\tif c == nil {\n\t\treturn nil\n\t}\n\n\treturn c.Child(path[1:])\n}\n\n// Children returns the children of this tree (the modules that are\n// imported by this root).\n//\n// This will only return a non-nil value after Load is called.\nfunc (t *Tree) Children() map[string]*Tree {\n\tt.lock.RLock()\n\tdefer t.lock.RUnlock()\n\treturn t.children\n}\n\n// DeepEach calls the provided callback for the receiver and then all of\n// its descendents in the tree, allowing an operation to be performed on\n// all modules in the tree.\n//\n// Parents will be visited before their children but otherwise the order is\n// not defined.\nfunc (t *Tree) DeepEach(cb func(*Tree)) {\n\tt.lock.RLock()\n\tdefer t.lock.RUnlock()\n\tt.deepEach(cb)\n}\n\nfunc (t *Tree) deepEach(cb func(*Tree)) {\n\tcb(t)\n\tfor _, c := range t.children {\n\t\tc.deepEach(cb)\n\t}\n}\n\n// Loaded says whether or not this tree has been loaded or not yet.\nfunc (t *Tree) Loaded() bool {\n\tt.lock.RLock()\n\tdefer t.lock.RUnlock()\n\treturn t.children != nil\n}\n\n// Modules returns the list of modules that this tree imports.\n//\n// This is only the imports of _this_ level of the tree. To retrieve the\n// full nested imports, you'll have to traverse the tree.\nfunc (t *Tree) Modules() []*Module {\n\tresult := make([]*Module, len(t.config.Modules))\n\tfor i, m := range t.config.Modules {\n\t\tresult[i] = &Module{\n\t\t\tName:      m.Name,\n\t\t\tVersion:   m.Version,\n\t\t\tSource:    m.Source,\n\t\t\tProviders: m.Providers,\n\t\t}\n\t}\n\n\treturn result\n}\n\n// Name returns the name of the tree. This will be \"<root>\" for the root\n// tree and then the module name given for any children.\nfunc (t *Tree) Name() string {\n\tif t.name == \"\" {\n\t\treturn RootName\n\t}\n\n\treturn t.name\n}\n\n// Load loads the configuration of the entire tree.\n//\n// The parameters are used to tell the tree where to find modules and\n// whether it can download/update modules along the way.\n//\n// Calling this multiple times will reload the tree.\n//\n// Various semantic-like checks are made along the way of loading since\n// module trees inherently require the configuration to be in a reasonably\n// sane state: no circular dependencies, proper module sources, etc. A full\n// suite of validations can be done by running Validate (after loading).\nfunc (t *Tree) Load(s *Storage) error {\n\tt.lock.Lock()\n\tdefer t.lock.Unlock()\n\n\tchildren, err := t.getChildren(s)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Go through all the children and load them.\n\tfor _, c := range children {\n\t\tif err := c.Load(s); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// Set our tree up\n\tt.children = children\n\n\treturn nil\n}\n\nfunc (t *Tree) getChildren(s *Storage) (map[string]*Tree, error) {\n\tchildren := make(map[string]*Tree)\n\n\t// Go through all the modules and get the directory for them.\n\tfor _, m := range t.Modules() {\n\t\tif _, ok := children[m.Name]; ok {\n\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\"module %s: duplicated. module names must be unique\", m.Name)\n\t\t}\n\n\t\t// Determine the path to this child\n\t\tmodPath := make([]string, len(t.path), len(t.path)+1)\n\t\tcopy(modPath, t.path)\n\t\tmodPath = append(modPath, m.Name)\n\n\t\tlog.Printf(\"[TRACE] module source: %q\", m.Source)\n\n\t\t// add the module path to help indicate where modules with relative\n\t\t// paths are being loaded from\n\t\ts.output(fmt.Sprintf(\"- module.%s\", strings.Join(modPath, \".\")))\n\n\t\t// Lookup the local location of the module.\n\t\t// dir is the local directory where the module is stored\n\t\tmod, err := s.findRegistryModule(m.Source, m.Version)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\t// The key is the string that will be used to uniquely id the Source in\n\t\t// the local storage.  The prefix digit can be incremented to\n\t\t// invalidate the local module storage.\n\t\tkey := \"1.\" + t.versionedPathKey(m)\n\t\tif mod.Version != \"\" {\n\t\t\tkey += \".\" + mod.Version\n\t\t}\n\n\t\t// Check for the exact key if it's not a registry module\n\t\tif !mod.registry {\n\t\t\tmod.Dir, err = s.findModule(key)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t}\n\n\t\tif mod.Dir != \"\" && s.Mode != GetModeUpdate {\n\t\t\t// We found it locally, but in order to load the Tree we need to\n\t\t\t// find out if there was another subDir stored from detection.\n\t\t\tsubDir, err := s.getModuleRoot(mod.Dir)\n\t\t\tif err != nil {\n\t\t\t\t// If there's a problem with the subdir record, we'll let the\n\t\t\t\t// recordSubdir method fix it up.  Any other filesystem errors\n\t\t\t\t// will turn up again below.\n\t\t\t\tlog.Println(\"[WARN] error reading subdir record:\", err)\n\t\t\t}\n\n\t\t\tfullDir := filepath.Join(mod.Dir, subDir)\n\n\t\t\tchild, err := NewTreeModule(m.Name, fullDir)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"module %s: %s\", m.Name, err)\n\t\t\t}\n\t\t\tchild.path = modPath\n\t\t\tchild.parent = t\n\t\t\tchild.version = mod.Version\n\t\t\tchild.source = m.Source\n\t\t\tchildren[m.Name] = child\n\t\t\tcontinue\n\t\t}\n\n\t\t// Split out the subdir if we have one.\n\t\t// Terraform keeps the entire requested tree, so that modules can\n\t\t// reference sibling modules from the same archive or repo.\n\t\trawSource, subDir := getter.SourceDirSubdir(m.Source)\n\n\t\t// we haven't found a source, so fallback to the go-getter detectors\n\t\tsource := mod.url\n\t\tif source == \"\" {\n\t\t\tsource, err = getter.Detect(rawSource, t.config.Dir, getter.Detectors)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"module %s: %s\", m.Name, err)\n\t\t\t}\n\t\t}\n\n\t\tlog.Printf(\"[TRACE] detected module source %q\", source)\n\n\t\t// Check if the detector introduced something new.\n\t\t// For example, the registry always adds a subdir of `//*`,\n\t\t// indicating that we need to strip off the first component from the\n\t\t// tar archive, though we may not yet know what it is called.\n\t\tsource, detectedSubDir := getter.SourceDirSubdir(source)\n\t\tif detectedSubDir != \"\" {\n\t\t\tsubDir = filepath.Join(detectedSubDir, subDir)\n\t\t}\n\n\t\toutput := \"\"\n\t\tswitch s.Mode {\n\t\tcase GetModeUpdate:\n\t\t\toutput = fmt.Sprintf(\"  Updating source %q\", m.Source)\n\t\tdefault:\n\t\t\toutput = fmt.Sprintf(\"  Getting source %q\", m.Source)\n\t\t}\n\t\ts.output(output)\n\n\t\tdir, ok, err := s.getStorage(key, source)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif !ok {\n\t\t\treturn nil, fmt.Errorf(\"module %s: not found, may need to run 'terraform init'\", m.Name)\n\t\t}\n\n\t\tlog.Printf(\"[TRACE] %q stored in %q\", source, dir)\n\n\t\t// expand and record the subDir for later\n\t\tfullDir := dir\n\t\tif subDir != \"\" {\n\t\t\tfullDir, err = getter.SubdirGlob(dir, subDir)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\n\t\t\t// +1 to account for the pathsep\n\t\t\tif len(dir)+1 > len(fullDir) {\n\t\t\t\treturn nil, fmt.Errorf(\"invalid module storage path %q\", fullDir)\n\t\t\t}\n\t\t\tsubDir = fullDir[len(dir)+1:]\n\t\t}\n\n\t\t// add new info to the module record\n\t\tmod.Key = key\n\t\tmod.Dir = dir\n\t\tmod.Root = subDir\n\n\t\t// record the module in our manifest\n\t\tif err := s.recordModule(mod); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tchild, err := NewTreeModule(m.Name, fullDir)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"module %s: %s\", m.Name, err)\n\t\t}\n\t\tchild.path = modPath\n\t\tchild.parent = t\n\t\tchild.version = mod.Version\n\t\tchild.source = m.Source\n\t\tchildren[m.Name] = child\n\t}\n\n\treturn children, nil\n}\n\n// Path is the full path to this tree.\nfunc (t *Tree) Path() []string {\n\treturn t.path\n}\n\n// String gives a nice output to describe the tree.\nfunc (t *Tree) String() string {\n\tvar result bytes.Buffer\n\tpath := strings.Join(t.path, \", \")\n\tif path != \"\" {\n\t\tpath = fmt.Sprintf(\" (path: %s)\", path)\n\t}\n\tresult.WriteString(t.Name() + path + \"\\n\")\n\n\tcs := t.Children()\n\tif cs == nil {\n\t\tresult.WriteString(\"  not loaded\")\n\t} else {\n\t\t// Go through each child and get its string value, then indent it\n\t\t// by two.\n\t\tfor _, c := range cs {\n\t\t\tr := strings.NewReader(c.String())\n\t\t\tscanner := bufio.NewScanner(r)\n\t\t\tfor scanner.Scan() {\n\t\t\t\tresult.WriteString(\"  \")\n\t\t\t\tresult.WriteString(scanner.Text())\n\t\t\t\tresult.WriteString(\"\\n\")\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result.String()\n}\n\n// Validate does semantic checks on the entire tree of configurations.\n//\n// This will call the respective config.Config.Validate() functions as well\n// as verifying things such as parameters/outputs between the various modules.\n//\n// Load must be called prior to calling Validate or an error will be returned.\nfunc (t *Tree) Validate() tfdiags.Diagnostics {\n\tvar diags tfdiags.Diagnostics\n\n\tif !t.Loaded() {\n\t\tdiags = diags.Append(fmt.Errorf(\n\t\t\t\"tree must be loaded before calling Validate\",\n\t\t))\n\t\treturn diags\n\t}\n\n\t// Terraform core does not handle root module children named \"root\".\n\t// We plan to fix this in the future but this bug was brought up in\n\t// the middle of a release and we don't want to introduce wide-sweeping\n\t// changes at that time.\n\tif len(t.path) == 1 && t.name == \"root\" {\n\t\tdiags = diags.Append(fmt.Errorf(\n\t\t\t\"root module cannot contain module named 'root'\",\n\t\t))\n\t\treturn diags\n\t}\n\n\t// Validate our configuration first.\n\tdiags = diags.Append(t.config.Validate())\n\n\t// If we're the root, we do extra validation. This validation usually\n\t// requires the entire tree (since children don't have parent pointers).\n\tif len(t.path) == 0 {\n\t\tif err := t.validateProviderAlias(); err != nil {\n\t\t\tdiags = diags.Append(err)\n\t\t}\n\t}\n\n\t// Get the child trees\n\tchildren := t.Children()\n\n\t// Validate all our children\n\tfor _, c := range children {\n\t\tchildDiags := c.Validate()\n\t\tdiags = diags.Append(childDiags)\n\t\tif diags.HasErrors() {\n\t\t\tcontinue\n\t\t}\n\t}\n\n\t// Go over all the modules and verify that any parameters are valid\n\t// variables into the module in question.\n\tfor _, m := range t.config.Modules {\n\t\ttree, ok := children[m.Name]\n\t\tif !ok {\n\t\t\t// This should never happen because Load watches us\n\t\t\tpanic(\"module not found in children: \" + m.Name)\n\t\t}\n\n\t\t// Build the variables that the module defines\n\t\trequiredMap := make(map[string]struct{})\n\t\tvarMap := make(map[string]struct{})\n\t\tfor _, v := range tree.config.Variables {\n\t\t\tvarMap[v.Name] = struct{}{}\n\n\t\t\tif v.Required() {\n\t\t\t\trequiredMap[v.Name] = struct{}{}\n\t\t\t}\n\t\t}\n\n\t\t// Compare to the keys in our raw config for the module\n\t\tfor k, _ := range m.RawConfig.Raw {\n\t\t\tif _, ok := varMap[k]; !ok {\n\t\t\t\tdiags = diags.Append(fmt.Errorf(\n\t\t\t\t\t\"module %q: %q is not a valid argument\",\n\t\t\t\t\tm.Name, k,\n\t\t\t\t))\n\t\t\t}\n\n\t\t\t// Remove the required\n\t\t\tdelete(requiredMap, k)\n\t\t}\n\n\t\t// If we have any required left over, they aren't set.\n\t\tfor k, _ := range requiredMap {\n\t\t\tdiags = diags.Append(fmt.Errorf(\n\t\t\t\t\"module %q: missing required argument %q\",\n\t\t\t\tm.Name, k,\n\t\t\t))\n\t\t}\n\t}\n\n\t// Go over all the variables used and make sure that any module\n\t// variables represent outputs properly.\n\tfor source, vs := range t.config.InterpolatedVariables() {\n\t\tfor _, v := range vs {\n\t\t\tmv, ok := v.(*config.ModuleVariable)\n\t\t\tif !ok {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\ttree, ok := children[mv.Name]\n\t\t\tif !ok {\n\t\t\t\tdiags = diags.Append(fmt.Errorf(\n\t\t\t\t\t\"%s: reference to undefined module %q\",\n\t\t\t\t\tsource, mv.Name,\n\t\t\t\t))\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tfound := false\n\t\t\tfor _, o := range tree.config.Outputs {\n\t\t\t\tif o.Name == mv.Field {\n\t\t\t\t\tfound = true\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif !found {\n\t\t\t\tdiags = diags.Append(fmt.Errorf(\n\t\t\t\t\t\"%s: %q is not a valid output for module %q\",\n\t\t\t\t\tsource, mv.Field, mv.Name,\n\t\t\t\t))\n\t\t\t}\n\t\t}\n\t}\n\n\treturn diags\n}\n\n// versionedPathKey returns a path string with every levels full name, version\n// and source encoded. This is to provide a unique key for our module storage,\n// since submodules need to know which versions of their ancestor modules they\n// are loaded from.\n// For example, if module A has a subdirectory B, if module A's source or\n// version is updated B's storage key must reflect this change in order for the\n// correct version of B's source to be loaded.\nfunc (t *Tree) versionedPathKey(m *Module) string {\n\tpath := make([]string, len(t.path)+1)\n\tpath[len(path)-1] = m.Name + \";\" + m.Source\n\t// We're going to load these in order for easier reading and debugging, but\n\t// in practice they only need to be unique and consistent.\n\n\tp := t\n\ti := len(path) - 2\n\tfor ; i >= 0; i-- {\n\t\tif p == nil {\n\t\t\tbreak\n\t\t}\n\t\t// we may have been loaded under a blank Tree, so always check for a name\n\t\t// too.\n\t\tif p.name == \"\" {\n\t\t\tbreak\n\t\t}\n\t\tseg := p.name\n\t\tif p.version != \"\" {\n\t\t\tseg += \"#\" + p.version\n\t\t}\n\n\t\tif p.source != \"\" {\n\t\t\tseg += \";\" + p.source\n\t\t}\n\n\t\tpath[i] = seg\n\t\tp = p.parent\n\t}\n\n\tkey := strings.Join(path, \"|\")\n\treturn key\n}\n\n// treeError is an error use by Tree.Validate to accumulates all\n// validation errors.\ntype treeError struct {\n\tName     []string\n\tErrs     []error\n\tChildren []*treeError\n}\n\nfunc (e *treeError) Add(err error) {\n\te.Errs = append(e.Errs, err)\n}\n\nfunc (e *treeError) AddChild(err *treeError) {\n\te.Children = append(e.Children, err)\n}\n\nfunc (e *treeError) ErrOrNil() error {\n\tif len(e.Errs) > 0 || len(e.Children) > 0 {\n\t\treturn e\n\t}\n\treturn nil\n}\n\nfunc (e *treeError) Error() string {\n\tname := strings.Join(e.Name, \".\")\n\tvar out bytes.Buffer\n\tfmt.Fprintf(&out, \"module %s: \", name)\n\n\tif len(e.Errs) == 1 {\n\t\t// single like error\n\t\tout.WriteString(e.Errs[0].Error())\n\t} else {\n\t\t// multi-line error\n\t\tfor _, err := range e.Errs {\n\t\t\tfmt.Fprintf(&out, \"\\n    %s\", err)\n\t\t}\n\t}\n\n\tif len(e.Children) > 0 {\n\t\t// start the next error on a new line\n\t\tout.WriteString(\"\\n  \")\n\t}\n\tfor _, child := range e.Children {\n\t\tout.WriteString(child.Error())\n\t}\n\n\treturn out.String()\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/config/module/tree_gob.go",
    "content": "package module\n\nimport (\n\t\"bytes\"\n\t\"encoding/gob\"\n\n\t\"github.com/hashicorp/terraform/config\"\n)\n\nfunc (t *Tree) GobDecode(bs []byte) error {\n\tt.lock.Lock()\n\tdefer t.lock.Unlock()\n\n\t// Decode the gob data\n\tvar data treeGob\n\tdec := gob.NewDecoder(bytes.NewReader(bs))\n\tif err := dec.Decode(&data); err != nil {\n\t\treturn err\n\t}\n\n\t// Set the fields\n\tt.name = data.Name\n\tt.config = data.Config\n\tt.children = data.Children\n\tt.path = data.Path\n\n\treturn nil\n}\n\nfunc (t *Tree) GobEncode() ([]byte, error) {\n\tdata := &treeGob{\n\t\tConfig:   t.config,\n\t\tChildren: t.children,\n\t\tName:     t.name,\n\t\tPath:     t.path,\n\t}\n\n\tvar buf bytes.Buffer\n\tenc := gob.NewEncoder(&buf)\n\tif err := enc.Encode(data); err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn buf.Bytes(), nil\n}\n\n// treeGob is used as a structure to Gob encode a tree.\n//\n// This structure is private so it can't be referenced but the fields are\n// public, allowing Gob to properly encode this. When we decode this, we are\n// able to turn it into a Tree.\ntype treeGob struct {\n\tConfig   *config.Config\n\tChildren map[string]*Tree\n\tName     string\n\tPath     []string\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/config/module/validate_provider_alias.go",
    "content": "package module\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n\n\t\"github.com/hashicorp/go-multierror\"\n\t\"github.com/hashicorp/terraform/dag\"\n)\n\n// validateProviderAlias validates that all provider alias references are\n// defined at some point in the parent tree. This improves UX by catching\n// alias typos at the slight cost of requiring a declaration of usage. This\n// is usually a good tradeoff since not many aliases are used.\nfunc (t *Tree) validateProviderAlias() error {\n\t// If we're not the root, don't perform this validation. We must be the\n\t// root since we require full tree visibilty.\n\tif len(t.path) != 0 {\n\t\treturn nil\n\t}\n\n\t// We'll use a graph to keep track of defined aliases at each level.\n\t// As long as a parent defines an alias, it is okay.\n\tvar g dag.AcyclicGraph\n\tt.buildProviderAliasGraph(&g, nil)\n\n\t// Go through the graph and check that the usage is all good.\n\tvar err error\n\tfor _, v := range g.Vertices() {\n\t\tpv, ok := v.(*providerAliasVertex)\n\t\tif !ok {\n\t\t\t// This shouldn't happen, just ignore it.\n\t\t\tcontinue\n\t\t}\n\n\t\t// If we're not using any aliases, fast track and just continue\n\t\tif len(pv.Used) == 0 {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Grab the ancestors since we're going to have to check if our\n\t\t// parents define any of our aliases.\n\t\tvar parents []*providerAliasVertex\n\t\tancestors, _ := g.Ancestors(v)\n\t\tfor _, raw := range ancestors.List() {\n\t\t\tif pv, ok := raw.(*providerAliasVertex); ok {\n\t\t\t\tparents = append(parents, pv)\n\t\t\t}\n\t\t}\n\t\tfor k, _ := range pv.Used {\n\t\t\t// Check if we define this\n\t\t\tif _, ok := pv.Defined[k]; ok {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// Check for a parent\n\t\t\tfound := false\n\t\t\tfor _, parent := range parents {\n\t\t\t\t_, found = parent.Defined[k]\n\t\t\t\tif found {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif found {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// We didn't find the alias, error!\n\t\t\terr = multierror.Append(err, fmt.Errorf(\n\t\t\t\t\"module %s: provider alias must be defined by the module: %s\",\n\t\t\t\tstrings.Join(pv.Path, \".\"), k))\n\t\t}\n\t}\n\n\treturn err\n}\n\nfunc (t *Tree) buildProviderAliasGraph(g *dag.AcyclicGraph, parent dag.Vertex) {\n\t// Add all our defined aliases\n\tdefined := make(map[string]struct{})\n\tfor _, p := range t.config.ProviderConfigs {\n\t\tdefined[p.FullName()] = struct{}{}\n\t}\n\n\t// Add all our used aliases\n\tused := make(map[string]struct{})\n\tfor _, r := range t.config.Resources {\n\t\tif r.Provider != \"\" {\n\t\t\tused[r.Provider] = struct{}{}\n\t\t}\n\t}\n\n\t// Add it to the graph\n\tvertex := &providerAliasVertex{\n\t\tPath:    t.Path(),\n\t\tDefined: defined,\n\t\tUsed:    used,\n\t}\n\tg.Add(vertex)\n\n\t// Connect to our parent if we have one\n\tif parent != nil {\n\t\tg.Connect(dag.BasicEdge(vertex, parent))\n\t}\n\n\t// Build all our children\n\tfor _, c := range t.Children() {\n\t\tc.buildProviderAliasGraph(g, vertex)\n\t}\n}\n\n// providerAliasVertex is the vertex for the graph that keeps track of\n// defined provider aliases.\ntype providerAliasVertex struct {\n\tPath    []string\n\tDefined map[string]struct{}\n\tUsed    map[string]struct{}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/config/module/versions.go",
    "content": "package module\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"sort\"\n\n\tversion \"github.com/hashicorp/go-version\"\n\t\"github.com/hashicorp/terraform/registry/response\"\n)\n\nconst anyVersion = \">=0.0.0\"\n\n// return the newest version that satisfies the provided constraint\nfunc newest(versions []string, constraint string) (string, error) {\n\tif constraint == \"\" {\n\t\tconstraint = anyVersion\n\t}\n\tcs, err := version.NewConstraint(constraint)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\tswitch len(versions) {\n\tcase 0:\n\t\treturn \"\", errors.New(\"no versions found\")\n\tcase 1:\n\t\tv, err := version.NewVersion(versions[0])\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\n\t\tif !cs.Check(v) {\n\t\t\treturn \"\", fmt.Errorf(\"no version found matching constraint %q\", constraint)\n\t\t}\n\t\treturn versions[0], nil\n\t}\n\n\tsort.Slice(versions, func(i, j int) bool {\n\t\t// versions should have already been validated\n\t\t// sort invalid version strings to the end\n\t\tiv, err := version.NewVersion(versions[i])\n\t\tif err != nil {\n\t\t\treturn true\n\t\t}\n\t\tjv, err := version.NewVersion(versions[j])\n\t\tif err != nil {\n\t\t\treturn true\n\t\t}\n\t\treturn iv.GreaterThan(jv)\n\t})\n\n\t// versions are now in order, so just find the first which satisfies the\n\t// constraint\n\tfor i := range versions {\n\t\tv, err := version.NewVersion(versions[i])\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\t\tif cs.Check(v) {\n\t\t\treturn versions[i], nil\n\t\t}\n\t}\n\n\treturn \"\", nil\n}\n\n// return the newest *moduleVersion that matches the given constraint\n// TODO: reconcile these two types and newest* functions\nfunc newestVersion(moduleVersions []*response.ModuleVersion, constraint string) (*response.ModuleVersion, error) {\n\tvar versions []string\n\tmodules := make(map[string]*response.ModuleVersion)\n\n\tfor _, m := range moduleVersions {\n\t\tversions = append(versions, m.Version)\n\t\tmodules[m.Version] = m\n\t}\n\n\tmatch, err := newest(versions, constraint)\n\treturn modules[match], err\n}\n\n// return the newest moduleRecord that matches the given constraint\nfunc newestRecord(moduleVersions []moduleRecord, constraint string) (moduleRecord, error) {\n\tvar versions []string\n\tmodules := make(map[string]moduleRecord)\n\n\tfor _, m := range moduleVersions {\n\t\tversions = append(versions, m.Version)\n\t\tmodules[m.Version] = m\n\t}\n\n\tmatch, err := newest(versions, constraint)\n\treturn modules[match], err\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/config/providers.go",
    "content": "package config\n\nimport \"github.com/blang/semver\"\n\n// ProviderVersionConstraint presents a constraint for a particular\n// provider, identified by its full name.\ntype ProviderVersionConstraint struct {\n\tConstraint   string\n\tProviderType string\n}\n\n// ProviderVersionConstraints is a map from provider full name to its associated\n// ProviderVersionConstraint, as produced by Config.RequiredProviders.\ntype ProviderVersionConstraints map[string]ProviderVersionConstraint\n\n// RequiredProviders returns the ProviderVersionConstraints for this\n// module.\n//\n// This includes both providers that are explicitly requested by provider\n// blocks and those that are used implicitly by instantiating one of their\n// resource types. In the latter case, the returned semver Range will\n// accept any version of the provider.\nfunc (c *Config) RequiredProviders() ProviderVersionConstraints {\n\tret := make(ProviderVersionConstraints, len(c.ProviderConfigs))\n\n\tconfigs := c.ProviderConfigsByFullName()\n\n\t// In order to find the *implied* dependencies (those without explicit\n\t// \"provider\" blocks) we need to walk over all of the resources and\n\t// cross-reference with the provider configs.\n\tfor _, rc := range c.Resources {\n\t\tproviderName := rc.ProviderFullName()\n\t\tvar providerType string\n\n\t\t// Default to (effectively) no constraint whatsoever, but we might\n\t\t// override if there's an explicit constraint in config.\n\t\tconstraint := \">=0.0.0\"\n\n\t\tconfig, ok := configs[providerName]\n\t\tif ok {\n\t\t\tif config.Version != \"\" {\n\t\t\t\tconstraint = config.Version\n\t\t\t}\n\t\t\tproviderType = config.Name\n\t\t} else {\n\t\t\tproviderType = providerName\n\t\t}\n\n\t\tret[providerName] = ProviderVersionConstraint{\n\t\t\tProviderType: providerType,\n\t\t\tConstraint:   constraint,\n\t\t}\n\t}\n\n\treturn ret\n}\n\n// RequiredRanges returns a semver.Range for each distinct provider type in\n// the constraint map. If the same provider type appears more than once\n// (e.g. because aliases are in use) then their respective constraints are\n// combined such that they must *all* apply.\n//\n// The result of this method can be passed to the\n// PluginMetaSet.ConstrainVersions method within the plugin/discovery\n// package in order to filter down the available plugins to those which\n// satisfy the given constraints.\n//\n// This function will panic if any of the constraints within cannot be\n// parsed as semver ranges. This is guaranteed to never happen for a\n// constraint set that was built from a configuration that passed validation.\nfunc (cons ProviderVersionConstraints) RequiredRanges() map[string]semver.Range {\n\tret := make(map[string]semver.Range, len(cons))\n\n\tfor _, con := range cons {\n\t\tspec := semver.MustParseRange(con.Constraint)\n\t\tif existing, exists := ret[con.ProviderType]; exists {\n\t\t\tret[con.ProviderType] = existing.AND(spec)\n\t\t} else {\n\t\t\tret[con.ProviderType] = spec\n\t\t}\n\t}\n\n\treturn ret\n}\n\n// ProviderConfigsByFullName returns a map from provider full names (as\n// returned by ProviderConfig.FullName()) to the corresponding provider\n// configs.\n//\n// This function returns no new information than what's already in\n// c.ProviderConfigs, but returns it in a more convenient shape. If there\n// is more than one provider config with the same full name then the result\n// is undefined, but that is guaranteed not to happen for any config that\n// has passed validation.\nfunc (c *Config) ProviderConfigsByFullName() map[string]*ProviderConfig {\n\tret := make(map[string]*ProviderConfig, len(c.ProviderConfigs))\n\n\tfor _, pc := range c.ProviderConfigs {\n\t\tret[pc.FullName()] = pc\n\t}\n\n\treturn ret\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/config/provisioner_enums.go",
    "content": "package config\n\n// ProvisionerWhen is an enum for valid values for when to run provisioners.\ntype ProvisionerWhen int\n\nconst (\n\tProvisionerWhenInvalid ProvisionerWhen = iota\n\tProvisionerWhenCreate\n\tProvisionerWhenDestroy\n)\n\nvar provisionerWhenStrs = map[ProvisionerWhen]string{\n\tProvisionerWhenInvalid: \"invalid\",\n\tProvisionerWhenCreate:  \"create\",\n\tProvisionerWhenDestroy: \"destroy\",\n}\n\nfunc (v ProvisionerWhen) String() string {\n\treturn provisionerWhenStrs[v]\n}\n\n// ProvisionerOnFailure is an enum for valid values for on_failure options\n// for provisioners.\ntype ProvisionerOnFailure int\n\nconst (\n\tProvisionerOnFailureInvalid ProvisionerOnFailure = iota\n\tProvisionerOnFailureContinue\n\tProvisionerOnFailureFail\n)\n\nvar provisionerOnFailureStrs = map[ProvisionerOnFailure]string{\n\tProvisionerOnFailureInvalid:  \"invalid\",\n\tProvisionerOnFailureContinue: \"continue\",\n\tProvisionerOnFailureFail:     \"fail\",\n}\n\nfunc (v ProvisionerOnFailure) String() string {\n\treturn provisionerOnFailureStrs[v]\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/config/raw_config.go",
    "content": "package config\n\nimport (\n\t\"bytes\"\n\t\"encoding/gob\"\n\t\"errors\"\n\t\"strconv\"\n\t\"sync\"\n\n\t\"github.com/zclconf/go-cty/cty\"\n\t\"github.com/zclconf/go-cty/cty/convert\"\n\n\thcl2 \"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/hashicorp/hil\"\n\t\"github.com/hashicorp/hil/ast\"\n\t\"github.com/mitchellh/copystructure\"\n\t\"github.com/mitchellh/reflectwalk\"\n)\n\n// UnknownVariableValue is a sentinel value that can be used\n// to denote that the value of a variable is unknown at this time.\n// RawConfig uses this information to build up data about\n// unknown keys.\nconst UnknownVariableValue = \"74D93920-ED26-11E3-AC10-0800200C9A66\"\n\n// RawConfig is a structure that holds a piece of configuration\n// where the overall structure is unknown since it will be used\n// to configure a plugin or some other similar external component.\n//\n// RawConfigs can be interpolated with variables that come from\n// other resources, user variables, etc.\n//\n// RawConfig supports a query-like interface to request\n// information from deep within the structure.\ntype RawConfig struct {\n\tKey string\n\n\t// Only _one_ of Raw and Body may be populated at a time.\n\t//\n\t// In the normal case, Raw is populated and Body is nil.\n\t//\n\t// When the experimental HCL2 parsing mode is enabled, \"Body\"\n\t// is populated and RawConfig serves only to transport the hcl2.Body\n\t// through the rest of Terraform core so we can ultimately decode it\n\t// once its schema is known.\n\t//\n\t// Once we transition to HCL2 as the primary representation, RawConfig\n\t// should be removed altogether and the hcl2.Body should be passed\n\t// around directly.\n\n\tRaw  map[string]interface{}\n\tBody hcl2.Body\n\n\tInterpolations []ast.Node\n\tVariables      map[string]InterpolatedVariable\n\n\tlock        sync.Mutex\n\tconfig      map[string]interface{}\n\tunknownKeys []string\n}\n\n// NewRawConfig creates a new RawConfig structure and populates the\n// publicly readable struct fields.\nfunc NewRawConfig(raw map[string]interface{}) (*RawConfig, error) {\n\tresult := &RawConfig{Raw: raw}\n\tif err := result.init(); err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn result, nil\n}\n\n// NewRawConfigHCL2 creates a new RawConfig that is serving as a capsule\n// to transport a hcl2.Body. In this mode, the publicly-readable struct\n// fields are not populated since all operations should instead be diverted\n// to the HCL2 body.\n//\n// For a RawConfig object constructed with this function, the only valid use\n// is to later retrieve the Body value and call its own methods. Callers\n// may choose to set and then later handle the Key field, in a manner\n// consistent with how it is handled by the Value method, but the Value\n// method itself must not be used.\n//\n// This is an experimental codepath to be used only by the HCL2 config loader.\n// Non-experimental parsing should _always_ use NewRawConfig to produce a\n// fully-functional RawConfig object.\nfunc NewRawConfigHCL2(body hcl2.Body) *RawConfig {\n\treturn &RawConfig{\n\t\tBody: body,\n\t}\n}\n\n// RawMap returns a copy of the RawConfig.Raw map.\nfunc (r *RawConfig) RawMap() map[string]interface{} {\n\tr.lock.Lock()\n\tdefer r.lock.Unlock()\n\n\tm := make(map[string]interface{})\n\tfor k, v := range r.Raw {\n\t\tm[k] = v\n\t}\n\treturn m\n}\n\n// Copy returns a copy of this RawConfig, uninterpolated.\nfunc (r *RawConfig) Copy() *RawConfig {\n\tif r == nil {\n\t\treturn nil\n\t}\n\n\tr.lock.Lock()\n\tdefer r.lock.Unlock()\n\n\tif r.Body != nil {\n\t\treturn NewRawConfigHCL2(r.Body)\n\t}\n\n\tnewRaw := make(map[string]interface{})\n\tfor k, v := range r.Raw {\n\t\tnewRaw[k] = v\n\t}\n\n\tresult, err := NewRawConfig(newRaw)\n\tif err != nil {\n\t\tpanic(\"copy failed: \" + err.Error())\n\t}\n\n\tresult.Key = r.Key\n\treturn result\n}\n\n// Value returns the value of the configuration if this configuration\n// has a Key set. If this does not have a Key set, nil will be returned.\nfunc (r *RawConfig) Value() interface{} {\n\tif c := r.Config(); c != nil {\n\t\tif v, ok := c[r.Key]; ok {\n\t\t\treturn v\n\t\t}\n\t}\n\n\tr.lock.Lock()\n\tdefer r.lock.Unlock()\n\treturn r.Raw[r.Key]\n}\n\n// Config returns the entire configuration with the variables\n// interpolated from any call to Interpolate.\n//\n// If any interpolated variables are unknown (value set to\n// UnknownVariableValue), the first non-container (map, slice, etc.) element\n// will be removed from the config. The keys of unknown variables\n// can be found using the UnknownKeys function.\n//\n// By pruning out unknown keys from the configuration, the raw\n// structure will always successfully decode into its ultimate\n// structure using something like mapstructure.\nfunc (r *RawConfig) Config() map[string]interface{} {\n\tr.lock.Lock()\n\tdefer r.lock.Unlock()\n\treturn r.config\n}\n\n// Interpolate uses the given mapping of variable values and uses\n// those as the values to replace any variables in this raw\n// configuration.\n//\n// Any prior calls to Interpolate are replaced with this one.\n//\n// If a variable key is missing, this will panic.\nfunc (r *RawConfig) Interpolate(vs map[string]ast.Variable) error {\n\tr.lock.Lock()\n\tdefer r.lock.Unlock()\n\n\tconfig := langEvalConfig(vs)\n\treturn r.interpolate(func(root ast.Node) (interface{}, error) {\n\t\t// None of the variables we need are computed, meaning we should\n\t\t// be able to properly evaluate.\n\t\tresult, err := hil.Eval(root, config)\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\n\t\treturn result.Value, nil\n\t})\n}\n\n// Merge merges another RawConfig into this one (overriding any conflicting\n// values in this config) and returns a new config. The original config\n// is not modified.\nfunc (r *RawConfig) Merge(other *RawConfig) *RawConfig {\n\tr.lock.Lock()\n\tdefer r.lock.Unlock()\n\n\t// Merge the raw configurations\n\traw := make(map[string]interface{})\n\tfor k, v := range r.Raw {\n\t\traw[k] = v\n\t}\n\tfor k, v := range other.Raw {\n\t\traw[k] = v\n\t}\n\n\t// Create the result\n\tresult, err := NewRawConfig(raw)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\t// Merge the interpolated results\n\tresult.config = make(map[string]interface{})\n\tfor k, v := range r.config {\n\t\tresult.config[k] = v\n\t}\n\tfor k, v := range other.config {\n\t\tresult.config[k] = v\n\t}\n\n\t// Build the unknown keys\n\tif len(r.unknownKeys) > 0 || len(other.unknownKeys) > 0 {\n\t\tunknownKeys := make(map[string]struct{})\n\t\tfor _, k := range r.unknownKeys {\n\t\t\tunknownKeys[k] = struct{}{}\n\t\t}\n\t\tfor _, k := range other.unknownKeys {\n\t\t\tunknownKeys[k] = struct{}{}\n\t\t}\n\n\t\tresult.unknownKeys = make([]string, 0, len(unknownKeys))\n\t\tfor k, _ := range unknownKeys {\n\t\t\tresult.unknownKeys = append(result.unknownKeys, k)\n\t\t}\n\t}\n\n\treturn result\n}\n\nfunc (r *RawConfig) init() error {\n\tr.lock.Lock()\n\tdefer r.lock.Unlock()\n\n\tr.config = r.Raw\n\tr.Interpolations = nil\n\tr.Variables = nil\n\n\tfn := func(node ast.Node) (interface{}, error) {\n\t\tr.Interpolations = append(r.Interpolations, node)\n\t\tvars, err := DetectVariables(node)\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\n\t\tfor _, v := range vars {\n\t\t\tif r.Variables == nil {\n\t\t\t\tr.Variables = make(map[string]InterpolatedVariable)\n\t\t\t}\n\n\t\t\tr.Variables[v.FullKey()] = v\n\t\t}\n\n\t\treturn \"\", nil\n\t}\n\n\twalker := &interpolationWalker{F: fn}\n\tif err := reflectwalk.Walk(r.Raw, walker); err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\nfunc (r *RawConfig) interpolate(fn interpolationWalkerFunc) error {\n\tif r.Body != nil {\n\t\t// For RawConfigs created for the HCL2 experiement, callers must\n\t\t// use the HCL2 Body API directly rather than interpolating via\n\t\t// the RawConfig.\n\t\treturn errors.New(\"this feature is not yet supported under the HCL2 experiment\")\n\t}\n\n\tconfig, err := copystructure.Copy(r.Raw)\n\tif err != nil {\n\t\treturn err\n\t}\n\tr.config = config.(map[string]interface{})\n\n\tw := &interpolationWalker{F: fn, Replace: true}\n\terr = reflectwalk.Walk(r.config, w)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tr.unknownKeys = w.unknownKeys\n\treturn nil\n}\n\nfunc (r *RawConfig) merge(r2 *RawConfig) *RawConfig {\n\tif r == nil && r2 == nil {\n\t\treturn nil\n\t}\n\n\tif r == nil {\n\t\tr = &RawConfig{}\n\t}\n\n\trawRaw, err := copystructure.Copy(r.Raw)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\traw := rawRaw.(map[string]interface{})\n\tif r2 != nil {\n\t\tfor k, v := range r2.Raw {\n\t\t\traw[k] = v\n\t\t}\n\t}\n\n\tresult, err := NewRawConfig(raw)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\treturn result\n}\n\n// couldBeInteger is a helper that determines if the represented value could\n// result in an integer.\n//\n// This function only works for RawConfigs that have \"Key\" set, meaning that\n// a single result can be produced. Calling this function will overwrite\n// the Config and Value results to be a test value.\n//\n// This function is conservative. If there is some doubt about whether the\n// result could be an integer -- for example, if it depends on a variable\n// whose type we don't know yet -- it will still return true.\nfunc (r *RawConfig) couldBeInteger() bool {\n\tif r.Key == \"\" {\n\t\t// un-keyed RawConfigs can never produce numbers\n\t\treturn false\n\t}\n\tif r.Body == nil {\n\t\t// Normal path: using the interpolator in this package\n\t\t// Interpolate with a fixed number to verify that its a number.\n\t\tr.interpolate(func(root ast.Node) (interface{}, error) {\n\t\t\t// Execute the node but transform the AST so that it returns\n\t\t\t// a fixed value of \"5\" for all interpolations.\n\t\t\tresult, err := hil.Eval(\n\t\t\t\thil.FixedValueTransform(\n\t\t\t\t\troot, &ast.LiteralNode{Value: \"5\", Typex: ast.TypeString}),\n\t\t\t\tnil)\n\t\t\tif err != nil {\n\t\t\t\treturn \"\", err\n\t\t\t}\n\n\t\t\treturn result.Value, nil\n\t\t})\n\t\t_, err := strconv.ParseInt(r.Value().(string), 0, 0)\n\t\treturn err == nil\n\t} else {\n\t\t// HCL2 experiment path: using the HCL2 API via shims\n\t\t//\n\t\t// This path catches fewer situations because we have to assume all\n\t\t// variables are entirely unknown in HCL2, rather than the assumption\n\t\t// above that all variables can be numbers because names like \"var.foo\"\n\t\t// are considered a single variable rather than an attribute access.\n\t\t// This is fine in practice, because we get a definitive answer\n\t\t// during the graph walk when we have real values to work with.\n\t\tattrs, diags := r.Body.JustAttributes()\n\t\tif diags.HasErrors() {\n\t\t\t// This body is not just a single attribute with a value, so\n\t\t\t// this can't be a number.\n\t\t\treturn false\n\t\t}\n\t\tattr, hasAttr := attrs[r.Key]\n\t\tif !hasAttr {\n\t\t\treturn false\n\t\t}\n\t\tresult, diags := hcl2EvalWithUnknownVars(attr.Expr)\n\t\tif diags.HasErrors() {\n\t\t\t// We'll conservatively assume that this error is a result of\n\t\t\t// us not being ready to fully-populate the scope, and catch\n\t\t\t// any further problems during the main graph walk.\n\t\t\treturn true\n\t\t}\n\n\t\t// If the result is convertable to number then we'll allow it.\n\t\t// We do this because an unknown string is optimistically convertable\n\t\t// to number (might be \"5\") but a _known_ string \"hello\" is not.\n\t\t_, err := convert.Convert(result, cty.Number)\n\t\treturn err == nil\n\t}\n}\n\n// UnknownKeys returns the keys of the configuration that are unknown\n// because they had interpolated variables that must be computed.\nfunc (r *RawConfig) UnknownKeys() []string {\n\tr.lock.Lock()\n\tdefer r.lock.Unlock()\n\treturn r.unknownKeys\n}\n\n// See GobEncode\nfunc (r *RawConfig) GobDecode(b []byte) error {\n\tvar data gobRawConfig\n\terr := gob.NewDecoder(bytes.NewReader(b)).Decode(&data)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tr.Key = data.Key\n\tr.Raw = data.Raw\n\n\treturn r.init()\n}\n\n// GobEncode is a custom Gob encoder to use so that we only include the\n// raw configuration. Interpolated variables and such are lost and the\n// tree of interpolated variables is recomputed on decode, since it is\n// referentially transparent.\nfunc (r *RawConfig) GobEncode() ([]byte, error) {\n\tr.lock.Lock()\n\tdefer r.lock.Unlock()\n\n\tdata := gobRawConfig{\n\t\tKey: r.Key,\n\t\tRaw: r.Raw,\n\t}\n\n\tvar buf bytes.Buffer\n\tif err := gob.NewEncoder(&buf).Encode(data); err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn buf.Bytes(), nil\n}\n\ntype gobRawConfig struct {\n\tKey string\n\tRaw map[string]interface{}\n}\n\n// langEvalConfig returns the evaluation configuration we use to execute.\nfunc langEvalConfig(vs map[string]ast.Variable) *hil.EvalConfig {\n\tfuncMap := make(map[string]ast.Function)\n\tfor k, v := range Funcs() {\n\t\tfuncMap[k] = v\n\t}\n\tfuncMap[\"lookup\"] = interpolationFuncLookup(vs)\n\tfuncMap[\"keys\"] = interpolationFuncKeys(vs)\n\tfuncMap[\"values\"] = interpolationFuncValues(vs)\n\n\treturn &hil.EvalConfig{\n\t\tGlobalScope: &ast.BasicScope{\n\t\t\tVarMap:  vs,\n\t\t\tFuncMap: funcMap,\n\t\t},\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/config/resource_mode.go",
    "content": "package config\n\n//go:generate stringer -type=ResourceMode -output=resource_mode_string.go resource_mode.go\ntype ResourceMode int\n\nconst (\n\tManagedResourceMode ResourceMode = iota\n\tDataResourceMode\n)\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/config/resource_mode_string.go",
    "content": "// Code generated by \"stringer -type=ResourceMode -output=resource_mode_string.go resource_mode.go\"; DO NOT EDIT.\n\npackage config\n\nimport \"strconv\"\n\nfunc _() {\n\t// An \"invalid array index\" compiler error signifies that the constant values have changed.\n\t// Re-run the stringer command to generate them again.\n\tvar x [1]struct{}\n\t_ = x[ManagedResourceMode-0]\n\t_ = x[DataResourceMode-1]\n}\n\nconst _ResourceMode_name = \"ManagedResourceModeDataResourceMode\"\n\nvar _ResourceMode_index = [...]uint8{0, 19, 35}\n\nfunc (i ResourceMode) String() string {\n\tif i < 0 || i >= ResourceMode(len(_ResourceMode_index)-1) {\n\t\treturn \"ResourceMode(\" + strconv.FormatInt(int64(i), 10) + \")\"\n\t}\n\treturn _ResourceMode_name[_ResourceMode_index[i]:_ResourceMode_index[i+1]]\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/config/testing.go",
    "content": "package config\n\nimport (\n\t\"testing\"\n)\n\n// TestRawConfig is used to create a RawConfig for testing.\nfunc TestRawConfig(t *testing.T, c map[string]interface{}) *RawConfig {\n\tt.Helper()\n\n\tcfg, err := NewRawConfig(c)\n\tif err != nil {\n\t\tt.Fatalf(\"err: %s\", err)\n\t}\n\n\treturn cfg\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/configs/backend.go",
    "content": "package configs\n\nimport (\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/hashicorp/hcl2/hcldec\"\n\t\"github.com/hashicorp/terraform/configs/configschema\"\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// Backend represents a \"backend\" block inside a \"terraform\" block in a module\n// or file.\ntype Backend struct {\n\tType   string\n\tConfig hcl.Body\n\n\tTypeRange hcl.Range\n\tDeclRange hcl.Range\n}\n\nfunc decodeBackendBlock(block *hcl.Block) (*Backend, hcl.Diagnostics) {\n\treturn &Backend{\n\t\tType:      block.Labels[0],\n\t\tTypeRange: block.LabelRanges[0],\n\t\tConfig:    block.Body,\n\t\tDeclRange: block.DefRange,\n\t}, nil\n}\n\n// Hash produces a hash value for the reciever that covers the type and the\n// portions of the config that conform to the given schema.\n//\n// If the config does not conform to the schema then the result is not\n// meaningful for comparison since it will be based on an incomplete result.\n//\n// As an exception, required attributes in the schema are treated as optional\n// for the purpose of hashing, so that an incomplete configuration can still\n// be hashed. Other errors, such as extraneous attributes, have no such special\n// case.\nfunc (b *Backend) Hash(schema *configschema.Block) int {\n\t// Don't fail if required attributes are not set. Instead, we'll just\n\t// hash them as nulls.\n\tschema = schema.NoneRequired()\n\tspec := schema.DecoderSpec()\n\tval, _ := hcldec.Decode(b.Config, spec, nil)\n\tif val == cty.NilVal {\n\t\tval = cty.UnknownVal(schema.ImpliedType())\n\t}\n\n\ttoHash := cty.TupleVal([]cty.Value{\n\t\tcty.StringVal(b.Type),\n\t\tval,\n\t})\n\n\treturn toHash.Hash()\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/configs/compat_shim.go",
    "content": "package configs\n\nimport (\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/hashicorp/hcl2/hcl/hclsyntax\"\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// -------------------------------------------------------------------------\n// Functions in this file are compatibility shims intended to ease conversion\n// from the old configuration loader. Any use of these functions that makes\n// a change should generate a deprecation warning explaining to the user how\n// to update their code for new patterns.\n//\n// Shims are particularly important for any patterns that have been widely\n// documented in books, tutorials, etc. Users will still be starting from\n// these examples and we want to help them adopt the latest patterns rather\n// than leave them stranded.\n// -------------------------------------------------------------------------\n\n// shimTraversalInString takes any arbitrary expression and checks if it is\n// a quoted string in the native syntax. If it _is_, then it is parsed as a\n// traversal and re-wrapped into a synthetic traversal expression and a\n// warning is generated. Otherwise, the given expression is just returned\n// verbatim.\n//\n// This function has no effect on expressions from the JSON syntax, since\n// traversals in strings are the required pattern in that syntax.\n//\n// If wantKeyword is set, the generated warning diagnostic will talk about\n// keywords rather than references. The behavior is otherwise unchanged, and\n// the caller remains responsible for checking that the result is indeed\n// a keyword, e.g. using hcl.ExprAsKeyword.\nfunc shimTraversalInString(expr hcl.Expression, wantKeyword bool) (hcl.Expression, hcl.Diagnostics) {\n\t// ObjectConsKeyExpr is a special wrapper type used for keys on object\n\t// constructors to deal with the fact that naked identifiers are normally\n\t// handled as \"bareword\" strings rather than as variable references. Since\n\t// we know we're interpreting as a traversal anyway (and thus it won't\n\t// matter whether it's a string or an identifier) we can safely just unwrap\n\t// here and then process whatever we find inside as normal.\n\tif ocke, ok := expr.(*hclsyntax.ObjectConsKeyExpr); ok {\n\t\texpr = ocke.Wrapped\n\t}\n\n\tif !exprIsNativeQuotedString(expr) {\n\t\treturn expr, nil\n\t}\n\n\tstrVal, diags := expr.Value(nil)\n\tif diags.HasErrors() || strVal.IsNull() || !strVal.IsKnown() {\n\t\t// Since we're not even able to attempt a shim here, we'll discard\n\t\t// the diagnostics we saw so far and let the caller's own error\n\t\t// handling take care of reporting the invalid expression.\n\t\treturn expr, nil\n\t}\n\n\t// The position handling here isn't _quite_ right because it won't\n\t// take into account any escape sequences in the literal string, but\n\t// it should be close enough for any error reporting to make sense.\n\tsrcRange := expr.Range()\n\tstartPos := srcRange.Start // copy\n\tstartPos.Column++          // skip initial quote\n\tstartPos.Byte++            // skip initial quote\n\n\ttraversal, tDiags := hclsyntax.ParseTraversalAbs(\n\t\t[]byte(strVal.AsString()),\n\t\tsrcRange.Filename,\n\t\tstartPos,\n\t)\n\tdiags = append(diags, tDiags...)\n\n\t// For initial release our deprecation warnings are disabled to allow\n\t// a period where modules can be compatible with both old and new\n\t// conventions.\n\t// FIXME: Re-enable these deprecation warnings in a release prior to\n\t// Terraform 0.13 and then remove the shims altogether for 0.13.\n\t/*\n\t\tif wantKeyword {\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagWarning,\n\t\t\t\tSummary:  \"Quoted keywords are deprecated\",\n\t\t\t\tDetail:   \"In this context, keywords are expected literally rather than in quotes. Previous versions of Terraform required quotes, but that usage is now deprecated. Remove the quotes surrounding this keyword to silence this warning.\",\n\t\t\t\tSubject:  &srcRange,\n\t\t\t})\n\t\t} else {\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagWarning,\n\t\t\t\tSummary:  \"Quoted references are deprecated\",\n\t\t\t\tDetail:   \"In this context, references are expected literally rather than in quotes. Previous versions of Terraform required quotes, but that usage is now deprecated. Remove the quotes surrounding this reference to silence this warning.\",\n\t\t\t\tSubject:  &srcRange,\n\t\t\t})\n\t\t}\n\t*/\n\n\treturn &hclsyntax.ScopeTraversalExpr{\n\t\tTraversal: traversal,\n\t\tSrcRange:  srcRange,\n\t}, diags\n}\n\n// shimIsIgnoreChangesStar returns true if the given expression seems to be\n// a string literal whose value is \"*\". This is used to support a legacy\n// form of ignore_changes = all .\n//\n// This function does not itself emit any diagnostics, so it's the caller's\n// responsibility to emit a warning diagnostic when this function returns true.\nfunc shimIsIgnoreChangesStar(expr hcl.Expression) bool {\n\tval, valDiags := expr.Value(nil)\n\tif valDiags.HasErrors() {\n\t\treturn false\n\t}\n\tif val.Type() != cty.String || val.IsNull() || !val.IsKnown() {\n\t\treturn false\n\t}\n\treturn val.AsString() == \"*\"\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/configs/config.go",
    "content": "package configs\n\nimport (\n\t\"sort\"\n\n\tversion \"github.com/hashicorp/go-version\"\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/hashicorp/terraform/addrs\"\n)\n\n// A Config is a node in the tree of modules within a configuration.\n//\n// The module tree is constructed by following ModuleCall instances recursively\n// through the root module transitively into descendent modules.\n//\n// A module tree described in *this* package represents the static tree\n// represented by configuration. During evaluation a static ModuleNode may\n// expand into zero or more module instances depending on the use of count and\n// for_each configuration attributes within each call.\ntype Config struct {\n\t// RootModule points to the Config for the root module within the same\n\t// module tree as this module. If this module _is_ the root module then\n\t// this is self-referential.\n\tRoot *Config\n\n\t// ParentModule points to the Config for the module that directly calls\n\t// this module. If this is the root module then this field is nil.\n\tParent *Config\n\n\t// Path is a sequence of module logical names that traverse from the root\n\t// module to this config. Path is empty for the root module.\n\t//\n\t// This should only be used to display paths to the end-user in rare cases\n\t// where we are talking about the static module tree, before module calls\n\t// have been resolved. In most cases, an addrs.ModuleInstance describing\n\t// a node in the dynamic module tree is better, since it will then include\n\t// any keys resulting from evaluating \"count\" and \"for_each\" arguments.\n\tPath addrs.Module\n\n\t// ChildModules points to the Config for each of the direct child modules\n\t// called from this module. The keys in this map match the keys in\n\t// Module.ModuleCalls.\n\tChildren map[string]*Config\n\n\t// Module points to the object describing the configuration for the\n\t// various elements (variables, resources, etc) defined by this module.\n\tModule *Module\n\n\t// CallRange is the source range for the header of the module block that\n\t// requested this module.\n\t//\n\t// This field is meaningless for the root module, where its contents are undefined.\n\tCallRange hcl.Range\n\n\t// SourceAddr is the source address that the referenced module was requested\n\t// from, as specified in configuration.\n\t//\n\t// This field is meaningless for the root module, where its contents are undefined.\n\tSourceAddr string\n\n\t// SourceAddrRange is the location in the configuration source where the\n\t// SourceAddr value was set, for use in diagnostic messages.\n\t//\n\t// This field is meaningless for the root module, where its contents are undefined.\n\tSourceAddrRange hcl.Range\n\n\t// Version is the specific version that was selected for this module,\n\t// based on version constraints given in configuration.\n\t//\n\t// This field is nil if the module was loaded from a non-registry source,\n\t// since versions are not supported for other sources.\n\t//\n\t// This field is meaningless for the root module, where it will always\n\t// be nil.\n\tVersion *version.Version\n}\n\n// NewEmptyConfig constructs a single-node configuration tree with an empty\n// root module. This is generally a pretty useless thing to do, so most callers\n// should instead use BuildConfig.\nfunc NewEmptyConfig() *Config {\n\tret := &Config{}\n\tret.Root = ret\n\tret.Children = make(map[string]*Config)\n\tret.Module = &Module{}\n\treturn ret\n}\n\n// Depth returns the number of \"hops\" the receiver is from the root of its\n// module tree, with the root module having a depth of zero.\nfunc (c *Config) Depth() int {\n\tret := 0\n\tthis := c\n\tfor this.Parent != nil {\n\t\tret++\n\t\tthis = this.Parent\n\t}\n\treturn ret\n}\n\n// DeepEach calls the given function once for each module in the tree, starting\n// with the receiver.\n//\n// A parent is always called before its children and children of a particular\n// node are visited in lexicographic order by their names.\nfunc (c *Config) DeepEach(cb func(c *Config)) {\n\tcb(c)\n\n\tnames := make([]string, 0, len(c.Children))\n\tfor name := range c.Children {\n\t\tnames = append(names, name)\n\t}\n\n\tfor _, name := range names {\n\t\tc.Children[name].DeepEach(cb)\n\t}\n}\n\n// AllModules returns a slice of all the receiver and all of its descendent\n// nodes in the module tree, in the same order they would be visited by\n// DeepEach.\nfunc (c *Config) AllModules() []*Config {\n\tvar ret []*Config\n\tc.DeepEach(func(c *Config) {\n\t\tret = append(ret, c)\n\t})\n\treturn ret\n}\n\n// Descendent returns the descendent config that has the given path beneath\n// the receiver, or nil if there is no such module.\n//\n// The path traverses the static module tree, prior to any expansion to handle\n// count and for_each arguments.\n//\n// An empty path will just return the receiver, and is therefore pointless.\nfunc (c *Config) Descendent(path addrs.Module) *Config {\n\tcurrent := c\n\tfor _, name := range path {\n\t\tcurrent = current.Children[name]\n\t\tif current == nil {\n\t\t\treturn nil\n\t\t}\n\t}\n\treturn current\n}\n\n// DescendentForInstance is like Descendent except that it accepts a path\n// to a particular module instance in the dynamic module graph, returning\n// the node from the static module graph that corresponds to it.\n//\n// All instances created by a particular module call share the same\n// configuration, so the keys within the given path are disregarded.\nfunc (c *Config) DescendentForInstance(path addrs.ModuleInstance) *Config {\n\tcurrent := c\n\tfor _, step := range path {\n\t\tcurrent = current.Children[step.Name]\n\t\tif current == nil {\n\t\t\treturn nil\n\t\t}\n\t}\n\treturn current\n}\n\n// ProviderTypes returns the names of each distinct provider type referenced\n// in the receiving configuration.\n//\n// This is a helper for easily determining which provider types are required\n// to fully interpret the configuration, though it does not include version\n// information and so callers are expected to have already dealt with\n// provider version selection in an earlier step and have identified suitable\n// versions for each provider.\nfunc (c *Config) ProviderTypes() []string {\n\tm := make(map[string]struct{})\n\tc.gatherProviderTypes(m)\n\n\tret := make([]string, 0, len(m))\n\tfor k := range m {\n\t\tret = append(ret, k)\n\t}\n\tsort.Strings(ret)\n\treturn ret\n}\nfunc (c *Config) gatherProviderTypes(m map[string]struct{}) {\n\tif c == nil {\n\t\treturn\n\t}\n\n\tfor _, pc := range c.Module.ProviderConfigs {\n\t\tm[pc.Name] = struct{}{}\n\t}\n\tfor _, rc := range c.Module.ManagedResources {\n\t\tproviderAddr := rc.ProviderConfigAddr()\n\t\tm[providerAddr.Type] = struct{}{}\n\t}\n\tfor _, rc := range c.Module.DataResources {\n\t\tproviderAddr := rc.ProviderConfigAddr()\n\t\tm[providerAddr.Type] = struct{}{}\n\t}\n\n\t// Must also visit our child modules, recursively.\n\tfor _, cc := range c.Children {\n\t\tcc.gatherProviderTypes(m)\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/configs/config_build.go",
    "content": "package configs\n\nimport (\n\t\"sort\"\n\n\tversion \"github.com/hashicorp/go-version\"\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/hashicorp/terraform/addrs\"\n)\n\n// BuildConfig constructs a Config from a root module by loading all of its\n// descendent modules via the given ModuleWalker.\n//\n// The result is a module tree that has so far only had basic module- and\n// file-level invariants validated. If the returned diagnostics contains errors,\n// the returned module tree may be incomplete but can still be used carefully\n// for static analysis.\nfunc BuildConfig(root *Module, walker ModuleWalker) (*Config, hcl.Diagnostics) {\n\tvar diags hcl.Diagnostics\n\tcfg := &Config{\n\t\tModule: root,\n\t}\n\tcfg.Root = cfg // Root module is self-referential.\n\tcfg.Children, diags = buildChildModules(cfg, walker)\n\treturn cfg, diags\n}\n\nfunc buildChildModules(parent *Config, walker ModuleWalker) (map[string]*Config, hcl.Diagnostics) {\n\tvar diags hcl.Diagnostics\n\tret := map[string]*Config{}\n\n\tcalls := parent.Module.ModuleCalls\n\n\t// We'll sort the calls by their local names so that they'll appear in a\n\t// predictable order in any logging that's produced during the walk.\n\tcallNames := make([]string, 0, len(calls))\n\tfor k := range calls {\n\t\tcallNames = append(callNames, k)\n\t}\n\tsort.Strings(callNames)\n\n\tfor _, callName := range callNames {\n\t\tcall := calls[callName]\n\t\tpath := make([]string, len(parent.Path)+1)\n\t\tcopy(path, parent.Path)\n\t\tpath[len(path)-1] = call.Name\n\n\t\treq := ModuleRequest{\n\t\t\tName:              call.Name,\n\t\t\tPath:              path,\n\t\t\tSourceAddr:        call.SourceAddr,\n\t\t\tSourceAddrRange:   call.SourceAddrRange,\n\t\t\tVersionConstraint: call.Version,\n\t\t\tParent:            parent,\n\t\t\tCallRange:         call.DeclRange,\n\t\t}\n\n\t\tmod, ver, modDiags := walker.LoadModule(&req)\n\t\tdiags = append(diags, modDiags...)\n\t\tif mod == nil {\n\t\t\t// nil can be returned if the source address was invalid and so\n\t\t\t// nothing could be loaded whatsoever. LoadModule should've\n\t\t\t// returned at least one error diagnostic in that case.\n\t\t\tcontinue\n\t\t}\n\n\t\tchild := &Config{\n\t\t\tParent:          parent,\n\t\t\tRoot:            parent.Root,\n\t\t\tPath:            path,\n\t\t\tModule:          mod,\n\t\t\tCallRange:       call.DeclRange,\n\t\t\tSourceAddr:      call.SourceAddr,\n\t\t\tSourceAddrRange: call.SourceAddrRange,\n\t\t\tVersion:         ver,\n\t\t}\n\n\t\tchild.Children, modDiags = buildChildModules(child, walker)\n\n\t\tret[call.Name] = child\n\t}\n\n\treturn ret, diags\n}\n\n// A ModuleWalker knows how to find and load a child module given details about\n// the module to be loaded and a reference to its partially-loaded parent\n// Config.\ntype ModuleWalker interface {\n\t// LoadModule finds and loads a requested child module.\n\t//\n\t// If errors are detected during loading, implementations should return them\n\t// in the diagnostics object. If the diagnostics object contains any errors\n\t// then the caller will tolerate the returned module being nil or incomplete.\n\t// If no errors are returned, it should be non-nil and complete.\n\t//\n\t// Full validation need not have been performed but an implementation should\n\t// ensure that the basic file- and module-validations performed by the\n\t// LoadConfigDir function (valid syntax, no namespace collisions, etc) have\n\t// been performed before returning a module.\n\tLoadModule(req *ModuleRequest) (*Module, *version.Version, hcl.Diagnostics)\n}\n\n// ModuleWalkerFunc is an implementation of ModuleWalker that directly wraps\n// a callback function, for more convenient use of that interface.\ntype ModuleWalkerFunc func(req *ModuleRequest) (*Module, *version.Version, hcl.Diagnostics)\n\n// LoadModule implements ModuleWalker.\nfunc (f ModuleWalkerFunc) LoadModule(req *ModuleRequest) (*Module, *version.Version, hcl.Diagnostics) {\n\treturn f(req)\n}\n\n// ModuleRequest is used with the ModuleWalker interface to describe a child\n// module that must be loaded.\ntype ModuleRequest struct {\n\t// Name is the \"logical name\" of the module call within configuration.\n\t// This is provided in case the name is used as part of a storage key\n\t// for the module, but implementations must otherwise treat it as an\n\t// opaque string. It is guaranteed to have already been validated as an\n\t// HCL identifier and UTF-8 encoded.\n\tName string\n\n\t// Path is a list of logical names that traverse from the root module to\n\t// this module. This can be used, for example, to form a lookup key for\n\t// each distinct module call in a configuration, allowing for multiple\n\t// calls with the same name at different points in the tree.\n\tPath addrs.Module\n\n\t// SourceAddr is the source address string provided by the user in\n\t// configuration.\n\tSourceAddr string\n\n\t// SourceAddrRange is the source range for the SourceAddr value as it\n\t// was provided in configuration. This can and should be used to generate\n\t// diagnostics about the source address having invalid syntax, referring\n\t// to a non-existent object, etc.\n\tSourceAddrRange hcl.Range\n\n\t// VersionConstraint is the version constraint applied to the module in\n\t// configuration. This data structure includes the source range for\n\t// the constraint, which can and should be used to generate diagnostics\n\t// about constraint-related issues, such as constraints that eliminate all\n\t// available versions of a module whose source is otherwise valid.\n\tVersionConstraint VersionConstraint\n\n\t// Parent is the partially-constructed module tree node that the loaded\n\t// module will be added to. Callers may refer to any field of this\n\t// structure except Children, which is still under construction when\n\t// ModuleRequest objects are created and thus has undefined content.\n\t// The main reason this is provided is so that full module paths can\n\t// be constructed for uniqueness.\n\tParent *Config\n\n\t// CallRange is the source range for the header of the \"module\" block\n\t// in configuration that prompted this request. This can be used as the\n\t// subject of an error diagnostic that relates to the module call itself,\n\t// rather than to either its source address or its version number.\n\tCallRange hcl.Range\n}\n\n// DisabledModuleWalker is a ModuleWalker that doesn't support\n// child modules at all, and so will return an error if asked to load one.\n//\n// This is provided primarily for testing. There is no good reason to use this\n// in the main application.\nvar DisabledModuleWalker ModuleWalker\n\nfunc init() {\n\tDisabledModuleWalker = ModuleWalkerFunc(func(req *ModuleRequest) (*Module, *version.Version, hcl.Diagnostics) {\n\t\treturn nil, nil, hcl.Diagnostics{\n\t\t\t{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Child modules are not supported\",\n\t\t\t\tDetail:   \"Child module calls are not allowed in this context.\",\n\t\t\t\tSubject:  &req.CallRange,\n\t\t\t},\n\t\t}\n\t})\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/configs/configload/copy_dir.go",
    "content": "package configload\n\nimport (\n\t\"io\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n)\n\n// copyDir copies the src directory contents into dst. Both directories\n// should already exist.\nfunc copyDir(dst, src string) error {\n\tsrc, err := filepath.EvalSymlinks(src)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\twalkFn := func(path string, info os.FileInfo, err error) error {\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tif path == src {\n\t\t\treturn nil\n\t\t}\n\n\t\tif strings.HasPrefix(filepath.Base(path), \".\") {\n\t\t\t// Skip any dot files\n\t\t\tif info.IsDir() {\n\t\t\t\treturn filepath.SkipDir\n\t\t\t} else {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t}\n\n\t\t// The \"path\" has the src prefixed to it. We need to join our\n\t\t// destination with the path without the src on it.\n\t\tdstPath := filepath.Join(dst, path[len(src):])\n\n\t\t// we don't want to try and copy the same file over itself.\n\t\tif eq, err := sameFile(path, dstPath); eq {\n\t\t\treturn nil\n\t\t} else if err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// If we have a directory, make that subdirectory, then continue\n\t\t// the walk.\n\t\tif info.IsDir() {\n\t\t\tif path == filepath.Join(src, dst) {\n\t\t\t\t// dst is in src; don't walk it.\n\t\t\t\treturn nil\n\t\t\t}\n\n\t\t\tif err := os.MkdirAll(dstPath, 0755); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn nil\n\t\t}\n\n\t\t// If the current path is a symlink, recreate the symlink relative to\n\t\t// the dst directory\n\t\tif info.Mode()&os.ModeSymlink == os.ModeSymlink {\n\t\t\ttarget, err := os.Readlink(path)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn os.Symlink(target, dstPath)\n\t\t}\n\n\t\t// If we have a file, copy the contents.\n\t\tsrcF, err := os.Open(path)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefer srcF.Close()\n\n\t\tdstF, err := os.Create(dstPath)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefer dstF.Close()\n\n\t\tif _, err := io.Copy(dstF, srcF); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// Chmod it\n\t\treturn os.Chmod(dstPath, info.Mode())\n\t}\n\n\treturn filepath.Walk(src, walkFn)\n}\n\n// sameFile tried to determine if to paths are the same file.\n// If the paths don't match, we lookup the inode on supported systems.\nfunc sameFile(a, b string) (bool, error) {\n\tif a == b {\n\t\treturn true, nil\n\t}\n\n\taIno, err := inode(a)\n\tif err != nil {\n\t\tif os.IsNotExist(err) {\n\t\t\treturn false, nil\n\t\t}\n\t\treturn false, err\n\t}\n\n\tbIno, err := inode(b)\n\tif err != nil {\n\t\tif os.IsNotExist(err) {\n\t\t\treturn false, nil\n\t\t}\n\t\treturn false, err\n\t}\n\n\tif aIno > 0 && aIno == bIno {\n\t\treturn true, nil\n\t}\n\n\treturn false, nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/configs/configload/doc.go",
    "content": "// Package configload knows how to install modules into the .terraform/modules\n// directory and to load modules from those installed locations. It is used\n// in conjunction with the LoadConfig function in the parent package.\npackage configload\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/configs/configload/getter.go",
    "content": "package configload\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\t\"path/filepath\"\n\n\tcleanhttp \"github.com/hashicorp/go-cleanhttp\"\n\tgetter \"github.com/hashicorp/go-getter\"\n)\n\n// We configure our own go-getter detector and getter sets here, because\n// the set of sources we support is part of Terraform's documentation and\n// so we don't want any new sources introduced in go-getter to sneak in here\n// and work even though they aren't documented. This also insulates us from\n// any meddling that might be done by other go-getter callers linked into our\n// executable.\n\nvar goGetterDetectors = []getter.Detector{\n\tnew(getter.GitHubDetector),\n\tnew(getter.BitBucketDetector),\n\tnew(getter.S3Detector),\n\tnew(getter.FileDetector),\n}\n\nvar goGetterNoDetectors = []getter.Detector{}\n\nvar goGetterDecompressors = map[string]getter.Decompressor{\n\t\"bz2\": new(getter.Bzip2Decompressor),\n\t\"gz\":  new(getter.GzipDecompressor),\n\t\"xz\":  new(getter.XzDecompressor),\n\t\"zip\": new(getter.ZipDecompressor),\n\n\t\"tar.bz2\":  new(getter.TarBzip2Decompressor),\n\t\"tar.tbz2\": new(getter.TarBzip2Decompressor),\n\n\t\"tar.gz\": new(getter.TarGzipDecompressor),\n\t\"tgz\":    new(getter.TarGzipDecompressor),\n\n\t\"tar.xz\": new(getter.TarXzDecompressor),\n\t\"txz\":    new(getter.TarXzDecompressor),\n}\n\nvar goGetterGetters = map[string]getter.Getter{\n\t\"file\":  new(getter.FileGetter),\n\t\"git\":   new(getter.GitGetter),\n\t\"hg\":    new(getter.HgGetter),\n\t\"s3\":    new(getter.S3Getter),\n\t\"http\":  getterHTTPGetter,\n\t\"https\": getterHTTPGetter,\n}\n\nvar getterHTTPClient = cleanhttp.DefaultClient()\n\nvar getterHTTPGetter = &getter.HttpGetter{\n\tClient: getterHTTPClient,\n\tNetrc:  true,\n}\n\n// A reusingGetter is a helper for the module installer that remembers\n// the final resolved addresses of all of the sources it has already been\n// asked to install, and will copy from a prior installation directory if\n// it has the same resolved source address.\n//\n// The keys in a reusingGetter are resolved and trimmed source addresses\n// (with a scheme always present, and without any \"subdir\" component),\n// and the values are the paths where each source was previously installed.\ntype reusingGetter map[string]string\n\n// getWithGoGetter retrieves the package referenced in the given address\n// into the installation path and then returns the full path to any subdir\n// indicated in the address.\n//\n// The errors returned by this function are those surfaced by the underlying\n// go-getter library, which have very inconsistent quality as\n// end-user-actionable error messages. At this time we do not have any\n// reasonable way to improve these error messages at this layer because\n// the underlying errors are not separatelyr recognizable.\nfunc (g reusingGetter) getWithGoGetter(instPath, addr string) (string, error) {\n\tpackageAddr, subDir := splitAddrSubdir(addr)\n\n\tlog.Printf(\"[DEBUG] will download %q to %s\", packageAddr, instPath)\n\n\trealAddr, err := getter.Detect(packageAddr, instPath, getter.Detectors)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\tvar realSubDir string\n\trealAddr, realSubDir = splitAddrSubdir(realAddr)\n\tif realSubDir != \"\" {\n\t\tsubDir = filepath.Join(realSubDir, subDir)\n\t}\n\n\tif realAddr != packageAddr {\n\t\tlog.Printf(\"[TRACE] go-getter detectors rewrote %q to %q\", packageAddr, realAddr)\n\t}\n\n\tif prevDir, exists := g[realAddr]; exists {\n\t\tlog.Printf(\"[TRACE] copying previous install %s to %s\", prevDir, instPath)\n\t\terr := os.Mkdir(instPath, os.ModePerm)\n\t\tif err != nil {\n\t\t\treturn \"\", fmt.Errorf(\"failed to create directory %s: %s\", instPath, err)\n\t\t}\n\t\terr = copyDir(instPath, prevDir)\n\t\tif err != nil {\n\t\t\treturn \"\", fmt.Errorf(\"failed to copy from %s to %s: %s\", prevDir, instPath, err)\n\t\t}\n\t} else {\n\t\tlog.Printf(\"[TRACE] fetching %q to %q\", realAddr, instPath)\n\t\tclient := getter.Client{\n\t\t\tSrc: realAddr,\n\t\t\tDst: instPath,\n\t\t\tPwd: instPath,\n\n\t\t\tMode: getter.ClientModeDir,\n\n\t\t\tDetectors:     goGetterNoDetectors, // we already did detection above\n\t\t\tDecompressors: goGetterDecompressors,\n\t\t\tGetters:       goGetterGetters,\n\t\t}\n\t\terr = client.Get()\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\t\t// Remember where we installed this so we might reuse this directory\n\t\t// on subsequent calls to avoid re-downloading.\n\t\tg[realAddr] = instPath\n\t}\n\n\t// Our subDir string can contain wildcards until this point, so that\n\t// e.g. a subDir of * can expand to one top-level directory in a .tar.gz\n\t// archive. Now that we've expanded the archive successfully we must\n\t// resolve that into a concrete path.\n\tvar finalDir string\n\tif subDir != \"\" {\n\t\tfinalDir, err = getter.SubdirGlob(instPath, subDir)\n\t\tlog.Printf(\"[TRACE] expanded %q to %q\", subDir, finalDir)\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\t} else {\n\t\tfinalDir = instPath\n\t}\n\n\t// If we got this far then we have apparently succeeded in downloading\n\t// the requested object!\n\treturn filepath.Clean(finalDir), nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/configs/configload/inode.go",
    "content": "// +build linux darwin openbsd netbsd solaris dragonfly\n\npackage configload\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"syscall\"\n)\n\n// lookup the inode of a file on posix systems\nfunc inode(path string) (uint64, error) {\n\tstat, err := os.Stat(path)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tif st, ok := stat.Sys().(*syscall.Stat_t); ok {\n\t\treturn st.Ino, nil\n\t}\n\treturn 0, fmt.Errorf(\"could not determine file inode\")\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/configs/configload/inode_freebsd.go",
    "content": "// +build freebsd\n\npackage configload\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"syscall\"\n)\n\n// lookup the inode of a file on posix systems\nfunc inode(path string) (uint64, error) {\n\tstat, err := os.Stat(path)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tif st, ok := stat.Sys().(*syscall.Stat_t); ok {\n\t\treturn uint64(st.Ino), nil\n\t}\n\treturn 0, fmt.Errorf(\"could not determine file inode\")\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/configs/configload/inode_windows.go",
    "content": "// +build windows\n\npackage configload\n\n// no syscall.Stat_t on windows, return 0 for inodes\nfunc inode(path string) (uint64, error) {\n\treturn 0, nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/configs/configload/loader.go",
    "content": "package configload\n\nimport (\n\t\"fmt\"\n\t\"path/filepath\"\n\n\t\"github.com/hashicorp/terraform/configs\"\n\t\"github.com/hashicorp/terraform/registry\"\n\t\"github.com/hashicorp/terraform/svchost/disco\"\n\t\"github.com/spf13/afero\"\n)\n\n// A Loader instance is the main entry-point for loading configurations via\n// this package.\n//\n// It extends the general config-loading functionality in the parent package\n// \"configs\" to support installation of modules from remote sources and\n// loading full configurations using modules that were previously installed.\ntype Loader struct {\n\t// parser is used to read configuration\n\tparser *configs.Parser\n\n\t// modules is used to install and locate descendent modules that are\n\t// referenced (directly or indirectly) from the root module.\n\tmodules moduleMgr\n}\n\n// Config is used with NewLoader to specify configuration arguments for the\n// loader.\ntype Config struct {\n\t// ModulesDir is a path to a directory where descendent modules are\n\t// (or should be) installed. (This is usually the\n\t// .terraform/modules directory, in the common case where this package\n\t// is being loaded from the main Terraform CLI package.)\n\tModulesDir string\n\n\t// Services is the service discovery client to use when locating remote\n\t// module registry endpoints. If this is nil then registry sources are\n\t// not supported, which should be true only in specialized circumstances\n\t// such as in tests.\n\tServices *disco.Disco\n}\n\n// NewLoader creates and returns a loader that reads configuration from the\n// real OS filesystem.\n//\n// The loader has some internal state about the modules that are currently\n// installed, which is read from disk as part of this function. If that\n// manifest cannot be read then an error will be returned.\nfunc NewLoader(config *Config) (*Loader, error) {\n\tfs := afero.NewOsFs()\n\tparser := configs.NewParser(fs)\n\treg := registry.NewClient(config.Services, nil)\n\n\tret := &Loader{\n\t\tparser: parser,\n\t\tmodules: moduleMgr{\n\t\t\tFS:         afero.Afero{Fs: fs},\n\t\t\tCanInstall: true,\n\t\t\tDir:        config.ModulesDir,\n\t\t\tServices:   config.Services,\n\t\t\tRegistry:   reg,\n\t\t},\n\t}\n\n\terr := ret.modules.readModuleManifestSnapshot()\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to read module manifest: %s\", err)\n\t}\n\n\treturn ret, nil\n}\n\n// ModulesDir returns the path to the directory where the loader will look for\n// the local cache of remote module packages.\nfunc (l *Loader) ModulesDir() string {\n\treturn l.modules.Dir\n}\n\n// RefreshModules updates the in-memory cache of the module manifest from the\n// module manifest file on disk. This is not necessary in normal use because\n// module installation and configuration loading are separate steps, but it\n// can be useful in tests where module installation is done as a part of\n// configuration loading by a helper function.\n//\n// Call this function after any module installation where an existing loader\n// is already alive and may be used again later.\n//\n// An error is returned if the manifest file cannot be read.\nfunc (l *Loader) RefreshModules() error {\n\tif l == nil {\n\t\t// Nothing to do, then.\n\t\treturn nil\n\t}\n\treturn l.modules.readModuleManifestSnapshot()\n}\n\n// Parser returns the underlying parser for this loader.\n//\n// This is useful for loading other sorts of files than the module directories\n// that a loader deals with, since then they will share the source code cache\n// for this loader and can thus be shown as snippets in diagnostic messages.\nfunc (l *Loader) Parser() *configs.Parser {\n\treturn l.parser\n}\n\n// Sources returns the source code cache for the underlying parser of this\n// loader. This is a shorthand for l.Parser().Sources().\nfunc (l *Loader) Sources() map[string][]byte {\n\treturn l.parser.Sources()\n}\n\n// IsConfigDir returns true if and only if the given directory contains at\n// least one Terraform configuration file. This is a wrapper around calling\n// the same method name on the loader's parser.\nfunc (l *Loader) IsConfigDir(path string) bool {\n\treturn l.parser.IsConfigDir(path)\n}\n\n// ImportSources writes into the receiver's source code the given source\n// code buffers.\n//\n// This is useful in the situation where an ancillary loader is created for\n// some reason (e.g. loading config from a plan file) but the cached source\n// code from that loader must be imported into the \"main\" loader in order\n// to return source code snapshots in diagnostic messages.\n//\n//     loader.ImportSources(otherLoader.Sources())\nfunc (l *Loader) ImportSources(sources map[string][]byte) {\n\tp := l.Parser()\n\tfor name, src := range sources {\n\t\tp.ForceFileSource(name, src)\n\t}\n}\n\n// ImportSourcesFromSnapshot writes into the receiver's source code the\n// source files from the given snapshot.\n//\n// This is similar to ImportSources but knows how to unpack and flatten a\n// snapshot data structure to get the corresponding flat source file map.\nfunc (l *Loader) ImportSourcesFromSnapshot(snap *Snapshot) {\n\tp := l.Parser()\n\tfor _, m := range snap.Modules {\n\t\tbaseDir := m.Dir\n\t\tfor fn, src := range m.Files {\n\t\t\tfullPath := filepath.Join(baseDir, fn)\n\t\t\tp.ForceFileSource(fullPath, src)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/configs/configload/loader_load.go",
    "content": "package configload\n\nimport (\n\t\"fmt\"\n\n\tversion \"github.com/hashicorp/go-version\"\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/hashicorp/terraform/configs\"\n)\n\n// LoadConfig reads the Terraform module in the given directory and uses it as the\n// root module to build the static module tree that represents a configuration,\n// assuming that all required descendent modules have already been installed.\n//\n// If error diagnostics are returned, the returned configuration may be either\n// nil or incomplete. In the latter case, cautious static analysis is possible\n// in spite of the errors.\n//\n// LoadConfig performs the basic syntax and uniqueness validations that are\n// required to process the individual modules, and also detects\nfunc (l *Loader) LoadConfig(rootDir string) (*configs.Config, hcl.Diagnostics) {\n\trootMod, diags := l.parser.LoadConfigDir(rootDir)\n\tif rootMod == nil {\n\t\treturn nil, diags\n\t}\n\n\tcfg, cDiags := configs.BuildConfig(rootMod, configs.ModuleWalkerFunc(l.moduleWalkerLoad))\n\tdiags = append(diags, cDiags...)\n\n\treturn cfg, diags\n}\n\n// moduleWalkerLoad is a configs.ModuleWalkerFunc for loading modules that\n// are presumed to have already been installed. A different function\n// (moduleWalkerInstall) is used for installation.\nfunc (l *Loader) moduleWalkerLoad(req *configs.ModuleRequest) (*configs.Module, *version.Version, hcl.Diagnostics) {\n\t// Since we're just loading here, we expect that all referenced modules\n\t// will be already installed and described in our manifest. However, we\n\t// do verify that the manifest and the configuration are in agreement\n\t// so that we can prompt the user to run \"terraform init\" if not.\n\n\tkey := l.modules.manifest.ModuleKey(req.Path)\n\trecord, exists := l.modules.manifest[key]\n\n\tif !exists {\n\t\treturn nil, nil, hcl.Diagnostics{\n\t\t\t{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Module not installed\",\n\t\t\t\tDetail:   \"This module is not yet installed. Run \\\"terraform init\\\" to install all modules required by this configuration.\",\n\t\t\t\tSubject:  &req.CallRange,\n\t\t\t},\n\t\t}\n\t}\n\n\tvar diags hcl.Diagnostics\n\n\t// Check for inconsistencies between manifest and config\n\tif req.SourceAddr != record.SourceAddr {\n\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Module source has changed\",\n\t\t\tDetail:   \"The source address was changed since this module was installed. Run \\\"terraform init\\\" to install all modules required by this configuration.\",\n\t\t\tSubject:  &req.SourceAddrRange,\n\t\t})\n\t}\n\tif len(req.VersionConstraint.Required) > 0 && record.Version == nil {\n\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Module version requirements have changed\",\n\t\t\tDetail:   \"The version requirements have changed since this module was installed and the installed version is no longer acceptable. Run \\\"terraform init\\\" to install all modules required by this configuration.\",\n\t\t\tSubject:  &req.SourceAddrRange,\n\t\t})\n\t}\n\tif record.Version != nil && !req.VersionConstraint.Required.Check(record.Version) {\n\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Module version requirements have changed\",\n\t\t\tDetail: fmt.Sprintf(\n\t\t\t\t\"The version requirements have changed since this module was installed and the installed version (%s) is no longer acceptable. Run \\\"terraform init\\\" to install all modules required by this configuration.\",\n\t\t\t\trecord.Version,\n\t\t\t),\n\t\t\tSubject: &req.SourceAddrRange,\n\t\t})\n\t}\n\n\tmod, mDiags := l.parser.LoadConfigDir(record.Dir)\n\tdiags = append(diags, mDiags...)\n\tif mod == nil {\n\t\t// nil specifically indicates that the directory does not exist or\n\t\t// cannot be read, so in this case we'll discard any generic diagnostics\n\t\t// returned from LoadConfigDir and produce our own context-sensitive\n\t\t// error message.\n\t\treturn nil, nil, hcl.Diagnostics{\n\t\t\t{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Module not installed\",\n\t\t\t\tDetail:   fmt.Sprintf(\"This module's local cache directory %s could not be read. Run \\\"terraform init\\\" to install all modules required by this configuration.\", record.Dir),\n\t\t\t\tSubject:  &req.CallRange,\n\t\t\t},\n\t\t}\n\t}\n\n\treturn mod, record.Version, diags\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/configs/configload/loader_snapshot.go",
    "content": "package configload\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"sort\"\n\t\"time\"\n\n\tversion \"github.com/hashicorp/go-version\"\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/hashicorp/terraform/configs\"\n\t\"github.com/hashicorp/terraform/internal/modsdir\"\n\t\"github.com/spf13/afero\"\n)\n\n// LoadConfigWithSnapshot is a variant of LoadConfig that also simultaneously\n// creates an in-memory snapshot of the configuration files used, which can\n// be later used to create a loader that may read only from this snapshot.\nfunc (l *Loader) LoadConfigWithSnapshot(rootDir string) (*configs.Config, *Snapshot, hcl.Diagnostics) {\n\trootMod, diags := l.parser.LoadConfigDir(rootDir)\n\tif rootMod == nil {\n\t\treturn nil, nil, diags\n\t}\n\n\tsnap := &Snapshot{\n\t\tModules: map[string]*SnapshotModule{},\n\t}\n\twalker := l.makeModuleWalkerSnapshot(snap)\n\tcfg, cDiags := configs.BuildConfig(rootMod, walker)\n\tdiags = append(diags, cDiags...)\n\n\taddDiags := l.addModuleToSnapshot(snap, \"\", rootDir, \"\", nil)\n\tdiags = append(diags, addDiags...)\n\n\treturn cfg, snap, diags\n}\n\n// NewLoaderFromSnapshot creates a Loader that reads files only from the\n// given snapshot.\n//\n// A snapshot-based loader cannot install modules, so calling InstallModules\n// on the return value will cause a panic.\n//\n// A snapshot-based loader also has access only to configuration files. Its\n// underlying parser does not have access to other files in the native\n// filesystem, such as values files. For those, either use a normal loader\n// (created by NewLoader) or use the configs.Parser API directly.\nfunc NewLoaderFromSnapshot(snap *Snapshot) *Loader {\n\tfs := snapshotFS{snap}\n\tparser := configs.NewParser(fs)\n\n\tret := &Loader{\n\t\tparser: parser,\n\t\tmodules: moduleMgr{\n\t\t\tFS:         afero.Afero{Fs: fs},\n\t\t\tCanInstall: false,\n\t\t\tmanifest:   snap.moduleManifest(),\n\t\t},\n\t}\n\n\treturn ret\n}\n\n// Snapshot is an in-memory representation of the source files from a\n// configuration, which can be used as an alternative configurations source\n// for a loader with NewLoaderFromSnapshot.\n//\n// The primary purpose of a Snapshot is to build the configuration portion\n// of a plan file (see ../../plans/planfile) so that it can later be reloaded\n// and used to recover the exact configuration that the plan was built from.\ntype Snapshot struct {\n\t// Modules is a map from opaque module keys (suitable for use as directory\n\t// names on all supported operating systems) to the snapshot information\n\t// about each module.\n\tModules map[string]*SnapshotModule\n}\n\n// NewEmptySnapshot constructs and returns a snapshot containing only an empty\n// root module. This is not useful for anything except placeholders in tests.\nfunc NewEmptySnapshot() *Snapshot {\n\treturn &Snapshot{\n\t\tModules: map[string]*SnapshotModule{\n\t\t\t\"\": &SnapshotModule{\n\t\t\t\tFiles: map[string][]byte{},\n\t\t\t},\n\t\t},\n\t}\n}\n\n// SnapshotModule represents a single module within a Snapshot.\ntype SnapshotModule struct {\n\t// Dir is the path, relative to the root directory given when the\n\t// snapshot was created, where the module appears in the snapshot's\n\t// virtual filesystem.\n\tDir string\n\n\t// Files is a map from each configuration file filename for the\n\t// module to a raw byte representation of the source file contents.\n\tFiles map[string][]byte\n\n\t// SourceAddr is the source address given for this module in configuration.\n\tSourceAddr string `json:\"Source\"`\n\n\t// Version is the version of the module that is installed, or nil if\n\t// the module is installed from a source that does not support versions.\n\tVersion *version.Version `json:\"-\"`\n}\n\n// moduleManifest constructs a module manifest based on the contents of\n// the receiving snapshot.\nfunc (s *Snapshot) moduleManifest() modsdir.Manifest {\n\tret := make(modsdir.Manifest)\n\n\tfor k, modSnap := range s.Modules {\n\t\tret[k] = modsdir.Record{\n\t\t\tKey:        k,\n\t\t\tDir:        modSnap.Dir,\n\t\t\tSourceAddr: modSnap.SourceAddr,\n\t\t\tVersion:    modSnap.Version,\n\t\t}\n\t}\n\n\treturn ret\n}\n\n// makeModuleWalkerSnapshot creates a configs.ModuleWalker that will exhibit\n// the same lookup behaviors as l.moduleWalkerLoad but will additionally write\n// source files from the referenced modules into the given snapshot.\nfunc (l *Loader) makeModuleWalkerSnapshot(snap *Snapshot) configs.ModuleWalker {\n\treturn configs.ModuleWalkerFunc(\n\t\tfunc(req *configs.ModuleRequest) (*configs.Module, *version.Version, hcl.Diagnostics) {\n\t\t\tmod, v, diags := l.moduleWalkerLoad(req)\n\t\t\tif diags.HasErrors() {\n\t\t\t\treturn mod, v, diags\n\t\t\t}\n\n\t\t\tkey := l.modules.manifest.ModuleKey(req.Path)\n\t\t\trecord, exists := l.modules.manifest[key]\n\n\t\t\tif !exists {\n\t\t\t\t// Should never happen, since otherwise moduleWalkerLoader would've\n\t\t\t\t// returned an error and we would've returned already.\n\t\t\t\tpanic(fmt.Sprintf(\"module %s is not present in manifest\", key))\n\t\t\t}\n\n\t\t\taddDiags := l.addModuleToSnapshot(snap, key, record.Dir, record.SourceAddr, record.Version)\n\t\t\tdiags = append(diags, addDiags...)\n\n\t\t\treturn mod, v, diags\n\t\t},\n\t)\n}\n\nfunc (l *Loader) addModuleToSnapshot(snap *Snapshot, key string, dir string, sourceAddr string, v *version.Version) hcl.Diagnostics {\n\tvar diags hcl.Diagnostics\n\n\tprimaryFiles, overrideFiles, moreDiags := l.parser.ConfigDirFiles(dir)\n\tif moreDiags.HasErrors() {\n\t\t// Any diagnostics we get here should be already present\n\t\t// in diags, so it's weird if we get here but we'll allow it\n\t\t// and return a general error message in that case.\n\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Failed to read directory for module\",\n\t\t\tDetail:   fmt.Sprintf(\"The source directory %s could not be read\", dir),\n\t\t})\n\t\treturn diags\n\t}\n\n\tsnapMod := &SnapshotModule{\n\t\tDir:        dir,\n\t\tFiles:      map[string][]byte{},\n\t\tSourceAddr: sourceAddr,\n\t\tVersion:    v,\n\t}\n\n\tfiles := make([]string, 0, len(primaryFiles)+len(overrideFiles))\n\tfiles = append(files, primaryFiles...)\n\tfiles = append(files, overrideFiles...)\n\tsources := l.Sources() // should be populated with all the files we need by now\n\tfor _, filePath := range files {\n\t\tfilename := filepath.Base(filePath)\n\t\tsrc, exists := sources[filePath]\n\t\tif !exists {\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Missing source file for snapshot\",\n\t\t\t\tDetail:   fmt.Sprintf(\"The source code for file %s could not be found to produce a configuration snapshot.\", filePath),\n\t\t\t})\n\t\t\tcontinue\n\t\t}\n\t\tsnapMod.Files[filepath.Clean(filename)] = src\n\t}\n\n\tsnap.Modules[key] = snapMod\n\n\treturn diags\n}\n\n// snapshotFS is an implementation of afero.Fs that reads from a snapshot.\n//\n// This is not intended as a general-purpose filesystem implementation. Instead,\n// it just supports the minimal functionality required to support the\n// configuration loader and parser as an implementation detail of creating\n// a loader from a snapshot.\ntype snapshotFS struct {\n\tsnap *Snapshot\n}\n\nvar _ afero.Fs = snapshotFS{}\n\nfunc (fs snapshotFS) Create(name string) (afero.File, error) {\n\treturn nil, fmt.Errorf(\"cannot create file inside configuration snapshot\")\n}\n\nfunc (fs snapshotFS) Mkdir(name string, perm os.FileMode) error {\n\treturn fmt.Errorf(\"cannot create directory inside configuration snapshot\")\n}\n\nfunc (fs snapshotFS) MkdirAll(name string, perm os.FileMode) error {\n\treturn fmt.Errorf(\"cannot create directories inside configuration snapshot\")\n}\n\nfunc (fs snapshotFS) Open(name string) (afero.File, error) {\n\n\t// Our \"filesystem\" is sparsely populated only with the directories\n\t// mentioned by modules in our snapshot, so the high-level process\n\t// for opening a file is:\n\t// - Find the module snapshot corresponding to the containing directory\n\t// - Find the file within that snapshot\n\t// - Wrap the resulting byte slice in a snapshotFile to return\n\t//\n\t// The other possibility handled here is if the given name is for the\n\t// module directory itself, in which case we'll return a snapshotDir\n\t// instead.\n\t//\n\t// This function doesn't try to be incredibly robust in supporting\n\t// different permutations of paths, etc because in practice we only\n\t// need to support the path forms that our own loader and parser will\n\t// generate.\n\n\tdir := filepath.Dir(name)\n\tfn := filepath.Base(name)\n\tdirectDir := filepath.Clean(name)\n\n\t// First we'll check to see if this is an exact path for a module directory.\n\t// We need to do this first (rather than as part of the next loop below)\n\t// because a module in a child directory of another module can otherwise\n\t// appear to be a file in that parent directory.\n\tfor _, candidate := range fs.snap.Modules {\n\t\tmodDir := filepath.Clean(candidate.Dir)\n\t\tif modDir == directDir {\n\t\t\t// We've matched the module directory itself\n\t\t\tfilenames := make([]string, 0, len(candidate.Files))\n\t\t\tfor n := range candidate.Files {\n\t\t\t\tfilenames = append(filenames, n)\n\t\t\t}\n\t\t\tsort.Strings(filenames)\n\t\t\treturn snapshotDir{\n\t\t\t\tfilenames: filenames,\n\t\t\t}, nil\n\t\t}\n\t}\n\n\t// If we get here then the given path isn't a module directory exactly, so\n\t// we'll treat it as a file path and try to find a module directory it\n\t// could be located in.\n\tvar modSnap *SnapshotModule\n\tfor _, candidate := range fs.snap.Modules {\n\t\tmodDir := filepath.Clean(candidate.Dir)\n\t\tif modDir == dir {\n\t\t\tmodSnap = candidate\n\t\t\tbreak\n\t\t}\n\t}\n\tif modSnap == nil {\n\t\treturn nil, os.ErrNotExist\n\t}\n\n\tsrc, exists := modSnap.Files[fn]\n\tif !exists {\n\t\treturn nil, os.ErrNotExist\n\t}\n\n\treturn &snapshotFile{\n\t\tsrc: src,\n\t}, nil\n}\n\nfunc (fs snapshotFS) OpenFile(name string, flag int, perm os.FileMode) (afero.File, error) {\n\treturn fs.Open(name)\n}\n\nfunc (fs snapshotFS) Remove(name string) error {\n\treturn fmt.Errorf(\"cannot remove file inside configuration snapshot\")\n}\n\nfunc (fs snapshotFS) RemoveAll(path string) error {\n\treturn fmt.Errorf(\"cannot remove files inside configuration snapshot\")\n}\n\nfunc (fs snapshotFS) Rename(old, new string) error {\n\treturn fmt.Errorf(\"cannot rename file inside configuration snapshot\")\n}\n\nfunc (fs snapshotFS) Stat(name string) (os.FileInfo, error) {\n\tf, err := fs.Open(name)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\t_, isDir := f.(snapshotDir)\n\treturn snapshotFileInfo{\n\t\tname:  filepath.Base(name),\n\t\tisDir: isDir,\n\t}, nil\n}\n\nfunc (fs snapshotFS) Name() string {\n\treturn \"ConfigSnapshotFS\"\n}\n\nfunc (fs snapshotFS) Chmod(name string, mode os.FileMode) error {\n\treturn fmt.Errorf(\"cannot set file mode inside configuration snapshot\")\n}\n\nfunc (fs snapshotFS) Chtimes(name string, atime, mtime time.Time) error {\n\treturn fmt.Errorf(\"cannot set file times inside configuration snapshot\")\n}\n\ntype snapshotFile struct {\n\tsnapshotFileStub\n\tsrc []byte\n\tat  int64\n}\n\nvar _ afero.File = (*snapshotFile)(nil)\n\nfunc (f *snapshotFile) Read(p []byte) (n int, err error) {\n\tif len(p) > 0 && f.at == int64(len(f.src)) {\n\t\treturn 0, io.EOF\n\t}\n\tif f.at > int64(len(f.src)) {\n\t\treturn 0, io.ErrUnexpectedEOF\n\t}\n\tif int64(len(f.src))-f.at >= int64(len(p)) {\n\t\tn = len(p)\n\t} else {\n\t\tn = int(int64(len(f.src)) - f.at)\n\t}\n\tcopy(p, f.src[f.at:f.at+int64(n)])\n\tf.at += int64(n)\n\treturn\n}\n\nfunc (f *snapshotFile) ReadAt(p []byte, off int64) (n int, err error) {\n\tf.at = off\n\treturn f.Read(p)\n}\n\nfunc (f *snapshotFile) Seek(offset int64, whence int) (int64, error) {\n\tswitch whence {\n\tcase 0:\n\t\tf.at = offset\n\tcase 1:\n\t\tf.at += offset\n\tcase 2:\n\t\tf.at = int64(len(f.src)) + offset\n\t}\n\treturn f.at, nil\n}\n\ntype snapshotDir struct {\n\tsnapshotFileStub\n\tfilenames []string\n\tat        int\n}\n\nvar _ afero.File = snapshotDir{}\n\nfunc (f snapshotDir) Readdir(count int) ([]os.FileInfo, error) {\n\tnames, err := f.Readdirnames(count)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tret := make([]os.FileInfo, len(names))\n\tfor i, name := range names {\n\t\tret[i] = snapshotFileInfo{\n\t\t\tname:  name,\n\t\t\tisDir: false,\n\t\t}\n\t}\n\treturn ret, nil\n}\n\nfunc (f snapshotDir) Readdirnames(count int) ([]string, error) {\n\tvar outLen int\n\tnames := f.filenames[f.at:]\n\tif count > 0 {\n\t\tif len(names) < count {\n\t\t\toutLen = len(names)\n\t\t} else {\n\t\t\toutLen = count\n\t\t}\n\t\tif len(names) == 0 {\n\t\t\treturn nil, io.EOF\n\t\t}\n\t} else {\n\t\toutLen = len(names)\n\t}\n\tf.at += outLen\n\n\treturn names[:outLen], nil\n}\n\n// snapshotFileInfo is a minimal implementation of os.FileInfo to support our\n// virtual filesystem from snapshots.\ntype snapshotFileInfo struct {\n\tname  string\n\tisDir bool\n}\n\nvar _ os.FileInfo = snapshotFileInfo{}\n\nfunc (fi snapshotFileInfo) Name() string {\n\treturn fi.name\n}\n\nfunc (fi snapshotFileInfo) Size() int64 {\n\t// In practice, our parser and loader never call Size\n\treturn -1\n}\n\nfunc (fi snapshotFileInfo) Mode() os.FileMode {\n\treturn os.ModePerm\n}\n\nfunc (fi snapshotFileInfo) ModTime() time.Time {\n\treturn time.Now()\n}\n\nfunc (fi snapshotFileInfo) IsDir() bool {\n\treturn fi.isDir\n}\n\nfunc (fi snapshotFileInfo) Sys() interface{} {\n\treturn nil\n}\n\ntype snapshotFileStub struct{}\n\nfunc (f snapshotFileStub) Close() error {\n\treturn nil\n}\n\nfunc (f snapshotFileStub) Read(p []byte) (n int, err error) {\n\treturn 0, fmt.Errorf(\"cannot read\")\n}\n\nfunc (f snapshotFileStub) ReadAt(p []byte, off int64) (n int, err error) {\n\treturn 0, fmt.Errorf(\"cannot read\")\n}\n\nfunc (f snapshotFileStub) Seek(offset int64, whence int) (int64, error) {\n\treturn 0, fmt.Errorf(\"cannot seek\")\n}\n\nfunc (f snapshotFileStub) Write(p []byte) (n int, err error) {\n\treturn f.WriteAt(p, 0)\n}\n\nfunc (f snapshotFileStub) WriteAt(p []byte, off int64) (n int, err error) {\n\treturn 0, fmt.Errorf(\"cannot write to file in snapshot\")\n}\n\nfunc (f snapshotFileStub) WriteString(s string) (n int, err error) {\n\treturn 0, fmt.Errorf(\"cannot write to file in snapshot\")\n}\n\nfunc (f snapshotFileStub) Name() string {\n\t// in practice, the loader and parser never use this\n\treturn \"<unimplemented>\"\n}\n\nfunc (f snapshotFileStub) Readdir(count int) ([]os.FileInfo, error) {\n\treturn nil, fmt.Errorf(\"cannot use Readdir on a file\")\n}\n\nfunc (f snapshotFileStub) Readdirnames(count int) ([]string, error) {\n\treturn nil, fmt.Errorf(\"cannot use Readdir on a file\")\n}\n\nfunc (f snapshotFileStub) Stat() (os.FileInfo, error) {\n\treturn nil, fmt.Errorf(\"cannot stat\")\n}\n\nfunc (f snapshotFileStub) Sync() error {\n\treturn nil\n}\n\nfunc (f snapshotFileStub) Truncate(size int64) error {\n\treturn fmt.Errorf(\"cannot write to file in snapshot\")\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/configs/configload/module_mgr.go",
    "content": "package configload\n\nimport (\n\t\"os\"\n\t\"path/filepath\"\n\n\t\"github.com/hashicorp/terraform/internal/modsdir\"\n\t\"github.com/hashicorp/terraform/registry\"\n\t\"github.com/hashicorp/terraform/svchost/disco\"\n\t\"github.com/spf13/afero\"\n)\n\ntype moduleMgr struct {\n\tFS afero.Afero\n\n\t// CanInstall is true for a module manager that can support installation.\n\t//\n\t// This must be set only if FS is an afero.OsFs, because the installer\n\t// (which uses go-getter) is not aware of the virtual filesystem\n\t// abstraction and will always write into the \"real\" filesystem.\n\tCanInstall bool\n\n\t// Dir is the path where descendent modules are (or will be) installed.\n\tDir string\n\n\t// Services is a service discovery client that will be used to find\n\t// remote module registry endpoints. This object may be pre-loaded with\n\t// cached discovery information.\n\tServices *disco.Disco\n\n\t// Registry is a client for the module registry protocol, which is used\n\t// when a module is requested from a registry source.\n\tRegistry *registry.Client\n\n\t// manifest tracks the currently-installed modules for this manager.\n\t//\n\t// The loader may read this. Only the installer may write to it, and\n\t// after a set of updates are completed the installer must call\n\t// writeModuleManifestSnapshot to persist a snapshot of the manifest\n\t// to disk for use on subsequent runs.\n\tmanifest modsdir.Manifest\n}\n\nfunc (m *moduleMgr) manifestSnapshotPath() string {\n\treturn filepath.Join(m.Dir, modsdir.ManifestSnapshotFilename)\n}\n\n// readModuleManifestSnapshot loads a manifest snapshot from the filesystem.\nfunc (m *moduleMgr) readModuleManifestSnapshot() error {\n\tr, err := m.FS.Open(m.manifestSnapshotPath())\n\tif err != nil {\n\t\tif os.IsNotExist(err) {\n\t\t\t// We'll treat a missing file as an empty manifest\n\t\t\tm.manifest = make(modsdir.Manifest)\n\t\t\treturn nil\n\t\t}\n\t\treturn err\n\t}\n\n\tm.manifest, err = modsdir.ReadManifestSnapshot(r)\n\treturn err\n}\n\n// writeModuleManifestSnapshot writes a snapshot of the current manifest\n// to the filesystem.\n//\n// The caller must guarantee no concurrent modifications of the manifest for\n// the duration of a call to this function, or the behavior is undefined.\nfunc (m *moduleMgr) writeModuleManifestSnapshot() error {\n\tw, err := m.FS.Create(m.manifestSnapshotPath())\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn m.manifest.WriteSnapshot(w)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/configs/configload/source_addr.go",
    "content": "package configload\n\nimport (\n\t\"strings\"\n\n\t\"github.com/hashicorp/go-getter\"\n\n\t\"github.com/hashicorp/terraform/registry/regsrc\"\n)\n\nvar localSourcePrefixes = []string{\n\t\"./\",\n\t\"../\",\n\t\".\\\\\",\n\t\"..\\\\\",\n}\n\nfunc isLocalSourceAddr(addr string) bool {\n\tfor _, prefix := range localSourcePrefixes {\n\t\tif strings.HasPrefix(addr, prefix) {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\nfunc isRegistrySourceAddr(addr string) bool {\n\t_, err := regsrc.ParseModuleSource(addr)\n\treturn err == nil\n}\n\n// splitAddrSubdir splits the given address (which is assumed to be a\n// registry address or go-getter-style address) into a package portion\n// and a sub-directory portion.\n//\n// The package portion defines what should be downloaded and then the\n// sub-directory portion, if present, specifies a sub-directory within\n// the downloaded object (an archive, VCS repository, etc) that contains\n// the module's configuration files.\n//\n// The subDir portion will be returned as empty if no subdir separator\n// (\"//\") is present in the address.\nfunc splitAddrSubdir(addr string) (packageAddr, subDir string) {\n\treturn getter.SourceDirSubdir(addr)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/configs/configload/testing.go",
    "content": "package configload\n\nimport (\n\t\"io/ioutil\"\n\t\"os\"\n\t\"testing\"\n)\n\n// NewLoaderForTests is a variant of NewLoader that is intended to be more\n// convenient for unit tests.\n//\n// The loader's modules directory is a separate temporary directory created\n// for each call. Along with the created loader, this function returns a\n// cleanup function that should be called before the test completes in order\n// to remove that temporary directory.\n//\n// In the case of any errors, t.Fatal (or similar) will be called to halt\n// execution of the test, so the calling test does not need to handle errors\n// itself.\nfunc NewLoaderForTests(t *testing.T) (*Loader, func()) {\n\tt.Helper()\n\n\tmodulesDir, err := ioutil.TempDir(\"\", \"tf-configs\")\n\tif err != nil {\n\t\tt.Fatalf(\"failed to create temporary modules dir: %s\", err)\n\t\treturn nil, func() {}\n\t}\n\n\tcleanup := func() {\n\t\tos.RemoveAll(modulesDir)\n\t}\n\n\tloader, err := NewLoader(&Config{\n\t\tModulesDir: modulesDir,\n\t})\n\tif err != nil {\n\t\tcleanup()\n\t\tt.Fatalf(\"failed to create config loader: %s\", err)\n\t\treturn nil, func() {}\n\t}\n\n\treturn loader, cleanup\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/configs/configschema/coerce_value.go",
    "content": "package configschema\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/zclconf/go-cty/cty\"\n\t\"github.com/zclconf/go-cty/cty/convert\"\n)\n\n// CoerceValue attempts to force the given value to conform to the type\n// implied by the receiever, while also applying the same validation and\n// transformation rules that would be applied by the decoder specification\n// returned by method DecoderSpec.\n//\n// This is useful in situations where a configuration must be derived from\n// an already-decoded value. It is always better to decode directly from\n// configuration where possible since then source location information is\n// still available to produce diagnostics, but in special situations this\n// function allows a compatible result to be obtained even if the\n// configuration objects are not available.\n//\n// If the given value cannot be converted to conform to the receiving schema\n// then an error is returned describing one of possibly many problems. This\n// error may be a cty.PathError indicating a position within the nested\n// data structure where the problem applies.\nfunc (b *Block) CoerceValue(in cty.Value) (cty.Value, error) {\n\tvar path cty.Path\n\treturn b.coerceValue(in, path)\n}\n\nfunc (b *Block) coerceValue(in cty.Value, path cty.Path) (cty.Value, error) {\n\tswitch {\n\tcase in.IsNull():\n\t\treturn cty.NullVal(b.ImpliedType()), nil\n\tcase !in.IsKnown():\n\t\treturn cty.UnknownVal(b.ImpliedType()), nil\n\t}\n\n\tty := in.Type()\n\tif !ty.IsObjectType() {\n\t\treturn cty.UnknownVal(b.ImpliedType()), path.NewErrorf(\"an object is required\")\n\t}\n\n\tfor name := range ty.AttributeTypes() {\n\t\tif _, defined := b.Attributes[name]; defined {\n\t\t\tcontinue\n\t\t}\n\t\tif _, defined := b.BlockTypes[name]; defined {\n\t\t\tcontinue\n\t\t}\n\t\treturn cty.UnknownVal(b.ImpliedType()), path.NewErrorf(\"unexpected attribute %q\", name)\n\t}\n\n\tattrs := make(map[string]cty.Value)\n\n\tfor name, attrS := range b.Attributes {\n\t\tvar val cty.Value\n\t\tswitch {\n\t\tcase ty.HasAttribute(name):\n\t\t\tval = in.GetAttr(name)\n\t\tcase attrS.Computed || attrS.Optional:\n\t\t\tval = cty.NullVal(attrS.Type)\n\t\tdefault:\n\t\t\treturn cty.UnknownVal(b.ImpliedType()), path.NewErrorf(\"attribute %q is required\", name)\n\t\t}\n\n\t\tval, err := attrS.coerceValue(val, append(path, cty.GetAttrStep{Name: name}))\n\t\tif err != nil {\n\t\t\treturn cty.UnknownVal(b.ImpliedType()), err\n\t\t}\n\n\t\tattrs[name] = val\n\t}\n\tfor typeName, blockS := range b.BlockTypes {\n\t\tswitch blockS.Nesting {\n\n\t\tcase NestingSingle, NestingGroup:\n\t\t\tswitch {\n\t\t\tcase ty.HasAttribute(typeName):\n\t\t\t\tvar err error\n\t\t\t\tval := in.GetAttr(typeName)\n\t\t\t\tattrs[typeName], err = blockS.coerceValue(val, append(path, cty.GetAttrStep{Name: typeName}))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn cty.UnknownVal(b.ImpliedType()), err\n\t\t\t\t}\n\t\t\tcase blockS.MinItems != 1 && blockS.MaxItems != 1:\n\t\t\t\tif blockS.Nesting == NestingGroup {\n\t\t\t\t\tattrs[typeName] = blockS.EmptyValue()\n\t\t\t\t} else {\n\t\t\t\t\tattrs[typeName] = cty.NullVal(blockS.ImpliedType())\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\t// We use the word \"attribute\" here because we're talking about\n\t\t\t\t// the cty sense of that word rather than the HCL sense.\n\t\t\t\treturn cty.UnknownVal(b.ImpliedType()), path.NewErrorf(\"attribute %q is required\", typeName)\n\t\t\t}\n\n\t\tcase NestingList:\n\t\t\tswitch {\n\t\t\tcase ty.HasAttribute(typeName):\n\t\t\t\tcoll := in.GetAttr(typeName)\n\n\t\t\t\tswitch {\n\t\t\t\tcase coll.IsNull():\n\t\t\t\t\tattrs[typeName] = cty.NullVal(cty.List(blockS.ImpliedType()))\n\t\t\t\t\tcontinue\n\t\t\t\tcase !coll.IsKnown():\n\t\t\t\t\tattrs[typeName] = cty.UnknownVal(cty.List(blockS.ImpliedType()))\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tif !coll.CanIterateElements() {\n\t\t\t\t\treturn cty.UnknownVal(b.ImpliedType()), path.NewErrorf(\"must be a list\")\n\t\t\t\t}\n\t\t\t\tl := coll.LengthInt()\n\t\t\t\tif l < blockS.MinItems {\n\t\t\t\t\treturn cty.UnknownVal(b.ImpliedType()), path.NewErrorf(\"insufficient items for attribute %q; must have at least %d\", typeName, blockS.MinItems)\n\t\t\t\t}\n\t\t\t\tif l > blockS.MaxItems && blockS.MaxItems > 0 {\n\t\t\t\t\treturn cty.UnknownVal(b.ImpliedType()), path.NewErrorf(\"too many items for attribute %q; cannot have more than %d\", typeName, blockS.MaxItems)\n\t\t\t\t}\n\t\t\t\tif l == 0 {\n\t\t\t\t\tattrs[typeName] = cty.ListValEmpty(blockS.ImpliedType())\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\telems := make([]cty.Value, 0, l)\n\t\t\t\t{\n\t\t\t\t\tpath = append(path, cty.GetAttrStep{Name: typeName})\n\t\t\t\t\tfor it := coll.ElementIterator(); it.Next(); {\n\t\t\t\t\t\tvar err error\n\t\t\t\t\t\tidx, val := it.Element()\n\t\t\t\t\t\tval, err = blockS.coerceValue(val, append(path, cty.IndexStep{Key: idx}))\n\t\t\t\t\t\tif err != nil {\n\t\t\t\t\t\t\treturn cty.UnknownVal(b.ImpliedType()), err\n\t\t\t\t\t\t}\n\t\t\t\t\t\telems = append(elems, val)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tattrs[typeName] = cty.ListVal(elems)\n\t\t\tcase blockS.MinItems == 0:\n\t\t\t\tattrs[typeName] = cty.ListValEmpty(blockS.ImpliedType())\n\t\t\tdefault:\n\t\t\t\treturn cty.UnknownVal(b.ImpliedType()), path.NewErrorf(\"attribute %q is required\", typeName)\n\t\t\t}\n\n\t\tcase NestingSet:\n\t\t\tswitch {\n\t\t\tcase ty.HasAttribute(typeName):\n\t\t\t\tcoll := in.GetAttr(typeName)\n\n\t\t\t\tswitch {\n\t\t\t\tcase coll.IsNull():\n\t\t\t\t\tattrs[typeName] = cty.NullVal(cty.Set(blockS.ImpliedType()))\n\t\t\t\t\tcontinue\n\t\t\t\tcase !coll.IsKnown():\n\t\t\t\t\tattrs[typeName] = cty.UnknownVal(cty.Set(blockS.ImpliedType()))\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tif !coll.CanIterateElements() {\n\t\t\t\t\treturn cty.UnknownVal(b.ImpliedType()), path.NewErrorf(\"must be a set\")\n\t\t\t\t}\n\t\t\t\tl := coll.LengthInt()\n\t\t\t\tif l < blockS.MinItems {\n\t\t\t\t\treturn cty.UnknownVal(b.ImpliedType()), path.NewErrorf(\"insufficient items for attribute %q; must have at least %d\", typeName, blockS.MinItems)\n\t\t\t\t}\n\t\t\t\tif l > blockS.MaxItems && blockS.MaxItems > 0 {\n\t\t\t\t\treturn cty.UnknownVal(b.ImpliedType()), path.NewErrorf(\"too many items for attribute %q; cannot have more than %d\", typeName, blockS.MaxItems)\n\t\t\t\t}\n\t\t\t\tif l == 0 {\n\t\t\t\t\tattrs[typeName] = cty.SetValEmpty(blockS.ImpliedType())\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\telems := make([]cty.Value, 0, l)\n\t\t\t\t{\n\t\t\t\t\tpath = append(path, cty.GetAttrStep{Name: typeName})\n\t\t\t\t\tfor it := coll.ElementIterator(); it.Next(); {\n\t\t\t\t\t\tvar err error\n\t\t\t\t\t\tidx, val := it.Element()\n\t\t\t\t\t\tval, err = blockS.coerceValue(val, append(path, cty.IndexStep{Key: idx}))\n\t\t\t\t\t\tif err != nil {\n\t\t\t\t\t\t\treturn cty.UnknownVal(b.ImpliedType()), err\n\t\t\t\t\t\t}\n\t\t\t\t\t\telems = append(elems, val)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tattrs[typeName] = cty.SetVal(elems)\n\t\t\tcase blockS.MinItems == 0:\n\t\t\t\tattrs[typeName] = cty.SetValEmpty(blockS.ImpliedType())\n\t\t\tdefault:\n\t\t\t\treturn cty.UnknownVal(b.ImpliedType()), path.NewErrorf(\"attribute %q is required\", typeName)\n\t\t\t}\n\n\t\tcase NestingMap:\n\t\t\tswitch {\n\t\t\tcase ty.HasAttribute(typeName):\n\t\t\t\tcoll := in.GetAttr(typeName)\n\n\t\t\t\tswitch {\n\t\t\t\tcase coll.IsNull():\n\t\t\t\t\tattrs[typeName] = cty.NullVal(cty.Map(blockS.ImpliedType()))\n\t\t\t\t\tcontinue\n\t\t\t\tcase !coll.IsKnown():\n\t\t\t\t\tattrs[typeName] = cty.UnknownVal(cty.Map(blockS.ImpliedType()))\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tif !coll.CanIterateElements() {\n\t\t\t\t\treturn cty.UnknownVal(b.ImpliedType()), path.NewErrorf(\"must be a map\")\n\t\t\t\t}\n\t\t\t\tl := coll.LengthInt()\n\t\t\t\tif l == 0 {\n\t\t\t\t\tattrs[typeName] = cty.MapValEmpty(blockS.ImpliedType())\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\telems := make(map[string]cty.Value)\n\t\t\t\t{\n\t\t\t\t\tpath = append(path, cty.GetAttrStep{Name: typeName})\n\t\t\t\t\tfor it := coll.ElementIterator(); it.Next(); {\n\t\t\t\t\t\tvar err error\n\t\t\t\t\t\tkey, val := it.Element()\n\t\t\t\t\t\tif key.Type() != cty.String || key.IsNull() || !key.IsKnown() {\n\t\t\t\t\t\t\treturn cty.UnknownVal(b.ImpliedType()), path.NewErrorf(\"must be a map\")\n\t\t\t\t\t\t}\n\t\t\t\t\t\tval, err = blockS.coerceValue(val, append(path, cty.IndexStep{Key: key}))\n\t\t\t\t\t\tif err != nil {\n\t\t\t\t\t\t\treturn cty.UnknownVal(b.ImpliedType()), err\n\t\t\t\t\t\t}\n\t\t\t\t\t\telems[key.AsString()] = val\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// If the attribute values here contain any DynamicPseudoTypes,\n\t\t\t\t// the concrete type must be an object.\n\t\t\t\tuseObject := false\n\t\t\t\tswitch {\n\t\t\t\tcase coll.Type().IsObjectType():\n\t\t\t\t\tuseObject = true\n\t\t\t\tdefault:\n\t\t\t\t\t// It's possible that we were given a map, and need to coerce it to an object\n\t\t\t\t\tety := coll.Type().ElementType()\n\t\t\t\t\tfor _, v := range elems {\n\t\t\t\t\t\tif !v.Type().Equals(ety) {\n\t\t\t\t\t\t\tuseObject = true\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif useObject {\n\t\t\t\t\tattrs[typeName] = cty.ObjectVal(elems)\n\t\t\t\t} else {\n\t\t\t\t\tattrs[typeName] = cty.MapVal(elems)\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\tattrs[typeName] = cty.MapValEmpty(blockS.ImpliedType())\n\t\t\t}\n\n\t\tdefault:\n\t\t\t// should never happen because above is exhaustive\n\t\t\tpanic(fmt.Errorf(\"unsupported nesting mode %#v\", blockS.Nesting))\n\t\t}\n\t}\n\n\treturn cty.ObjectVal(attrs), nil\n}\n\nfunc (a *Attribute) coerceValue(in cty.Value, path cty.Path) (cty.Value, error) {\n\tval, err := convert.Convert(in, a.Type)\n\tif err != nil {\n\t\treturn cty.UnknownVal(a.Type), path.NewError(err)\n\t}\n\treturn val, nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/configs/configschema/decoder_spec.go",
    "content": "package configschema\n\nimport (\n\t\"github.com/hashicorp/hcl2/hcldec\"\n)\n\nvar mapLabelNames = []string{\"key\"}\n\n// DecoderSpec returns a hcldec.Spec that can be used to decode a HCL Body\n// using the facilities in the hcldec package.\n//\n// The returned specification is guaranteed to return a value of the same type\n// returned by method ImpliedType, but it may contain null values if any of the\n// block attributes are defined as optional and/or computed respectively.\nfunc (b *Block) DecoderSpec() hcldec.Spec {\n\tret := hcldec.ObjectSpec{}\n\tif b == nil {\n\t\treturn ret\n\t}\n\n\tfor name, attrS := range b.Attributes {\n\t\tret[name] = attrS.decoderSpec(name)\n\t}\n\n\tfor name, blockS := range b.BlockTypes {\n\t\tif _, exists := ret[name]; exists {\n\t\t\t// This indicates an invalid schema, since it's not valid to\n\t\t\t// define both an attribute and a block type of the same name.\n\t\t\t// However, we don't raise this here since it's checked by\n\t\t\t// InternalValidate.\n\t\t\tcontinue\n\t\t}\n\n\t\tchildSpec := blockS.Block.DecoderSpec()\n\n\t\tswitch blockS.Nesting {\n\t\tcase NestingSingle, NestingGroup:\n\t\t\tret[name] = &hcldec.BlockSpec{\n\t\t\t\tTypeName: name,\n\t\t\t\tNested:   childSpec,\n\t\t\t\tRequired: blockS.MinItems == 1 && blockS.MaxItems >= 1,\n\t\t\t}\n\t\t\tif blockS.Nesting == NestingGroup {\n\t\t\t\tret[name] = &hcldec.DefaultSpec{\n\t\t\t\t\tPrimary: ret[name],\n\t\t\t\t\tDefault: &hcldec.LiteralSpec{\n\t\t\t\t\t\tValue: blockS.EmptyValue(),\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t}\n\t\tcase NestingList:\n\t\t\t// We prefer to use a list where possible, since it makes our\n\t\t\t// implied type more complete, but if there are any\n\t\t\t// dynamically-typed attributes inside we must use a tuple\n\t\t\t// instead, at the expense of our type then not being predictable.\n\t\t\tif blockS.Block.ImpliedType().HasDynamicTypes() {\n\t\t\t\tret[name] = &hcldec.BlockTupleSpec{\n\t\t\t\t\tTypeName: name,\n\t\t\t\t\tNested:   childSpec,\n\t\t\t\t\tMinItems: blockS.MinItems,\n\t\t\t\t\tMaxItems: blockS.MaxItems,\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tret[name] = &hcldec.BlockListSpec{\n\t\t\t\t\tTypeName: name,\n\t\t\t\t\tNested:   childSpec,\n\t\t\t\t\tMinItems: blockS.MinItems,\n\t\t\t\t\tMaxItems: blockS.MaxItems,\n\t\t\t\t}\n\t\t\t}\n\t\tcase NestingSet:\n\t\t\t// We forbid dynamically-typed attributes inside NestingSet in\n\t\t\t// InternalValidate, so we don't do anything special to handle\n\t\t\t// that here. (There is no set analog to tuple and object types,\n\t\t\t// because cty's set implementation depends on knowing the static\n\t\t\t// type in order to properly compute its internal hashes.)\n\t\t\tret[name] = &hcldec.BlockSetSpec{\n\t\t\t\tTypeName: name,\n\t\t\t\tNested:   childSpec,\n\t\t\t\tMinItems: blockS.MinItems,\n\t\t\t\tMaxItems: blockS.MaxItems,\n\t\t\t}\n\t\tcase NestingMap:\n\t\t\t// We prefer to use a list where possible, since it makes our\n\t\t\t// implied type more complete, but if there are any\n\t\t\t// dynamically-typed attributes inside we must use a tuple\n\t\t\t// instead, at the expense of our type then not being predictable.\n\t\t\tif blockS.Block.ImpliedType().HasDynamicTypes() {\n\t\t\t\tret[name] = &hcldec.BlockObjectSpec{\n\t\t\t\t\tTypeName:   name,\n\t\t\t\t\tNested:     childSpec,\n\t\t\t\t\tLabelNames: mapLabelNames,\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tret[name] = &hcldec.BlockMapSpec{\n\t\t\t\t\tTypeName:   name,\n\t\t\t\t\tNested:     childSpec,\n\t\t\t\t\tLabelNames: mapLabelNames,\n\t\t\t\t}\n\t\t\t}\n\t\tdefault:\n\t\t\t// Invalid nesting type is just ignored. It's checked by\n\t\t\t// InternalValidate.\n\t\t\tcontinue\n\t\t}\n\t}\n\n\treturn ret\n}\n\nfunc (a *Attribute) decoderSpec(name string) hcldec.Spec {\n\treturn &hcldec.AttrSpec{\n\t\tName:     name,\n\t\tType:     a.Type,\n\t\tRequired: a.Required,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/configs/configschema/doc.go",
    "content": "// Package configschema contains types for describing the expected structure\n// of a configuration block whose shape is not known until runtime.\n//\n// For example, this is used to describe the expected contents of a resource\n// configuration block, which is defined by the corresponding provider plugin\n// and thus not compiled into Terraform core.\n//\n// A configschema primarily describes the shape of configuration, but it is\n// also suitable for use with other structures derived from the configuration,\n// such as the cached state of a resource or a resource diff.\n//\n// This package should not be confused with the package helper/schema, which\n// is the higher-level helper library used to implement providers themselves.\npackage configschema\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/configs/configschema/empty_value.go",
    "content": "package configschema\n\nimport (\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// EmptyValue returns the \"empty value\" for the recieving block, which for\n// a block type is a non-null object where all of the attribute values are\n// the empty values of the block's attributes and nested block types.\n//\n// In other words, it returns the value that would be returned if an empty\n// block were decoded against the recieving schema, assuming that no required\n// attribute or block constraints were honored.\nfunc (b *Block) EmptyValue() cty.Value {\n\tvals := make(map[string]cty.Value)\n\tfor name, attrS := range b.Attributes {\n\t\tvals[name] = attrS.EmptyValue()\n\t}\n\tfor name, blockS := range b.BlockTypes {\n\t\tvals[name] = blockS.EmptyValue()\n\t}\n\treturn cty.ObjectVal(vals)\n}\n\n// EmptyValue returns the \"empty value\" for the receiving attribute, which is\n// the value that would be returned if there were no definition of the attribute\n// at all, ignoring any required constraint.\nfunc (a *Attribute) EmptyValue() cty.Value {\n\treturn cty.NullVal(a.Type)\n}\n\n// EmptyValue returns the \"empty value\" for when there are zero nested blocks\n// present of the receiving type.\nfunc (b *NestedBlock) EmptyValue() cty.Value {\n\tswitch b.Nesting {\n\tcase NestingSingle:\n\t\treturn cty.NullVal(b.Block.ImpliedType())\n\tcase NestingGroup:\n\t\treturn b.Block.EmptyValue()\n\tcase NestingList:\n\t\tif ty := b.Block.ImpliedType(); ty.HasDynamicTypes() {\n\t\t\treturn cty.EmptyTupleVal\n\t\t} else {\n\t\t\treturn cty.ListValEmpty(ty)\n\t\t}\n\tcase NestingMap:\n\t\tif ty := b.Block.ImpliedType(); ty.HasDynamicTypes() {\n\t\t\treturn cty.EmptyObjectVal\n\t\t} else {\n\t\t\treturn cty.MapValEmpty(ty)\n\t\t}\n\tcase NestingSet:\n\t\treturn cty.SetValEmpty(b.Block.ImpliedType())\n\tdefault:\n\t\t// Should never get here because the above is intended to be exhaustive,\n\t\t// but we'll be robust and return a result nonetheless.\n\t\treturn cty.NullVal(cty.DynamicPseudoType)\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/configs/configschema/implied_type.go",
    "content": "package configschema\n\nimport (\n\t\"github.com/hashicorp/hcl2/hcldec\"\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// ImpliedType returns the cty.Type that would result from decoding a\n// configuration block using the receiving block schema.\n//\n// ImpliedType always returns a result, even if the given schema is\n// inconsistent. Code that creates configschema.Block objects should be\n// tested using the InternalValidate method to detect any inconsistencies\n// that would cause this method to fall back on defaults and assumptions.\nfunc (b *Block) ImpliedType() cty.Type {\n\tif b == nil {\n\t\treturn cty.EmptyObject\n\t}\n\n\treturn hcldec.ImpliedType(b.DecoderSpec())\n}\n\n// ContainsSensitive returns true if any of the attributes of the receiving\n// block or any of its descendent blocks are marked as sensitive.\n//\n// Blocks themselves cannot be sensitive as a whole -- sensitivity is a\n// per-attribute idea -- but sometimes we want to include a whole object\n// decoded from a block in some UI output, and that is safe to do only if\n// none of the contained attributes are sensitive.\nfunc (b *Block) ContainsSensitive() bool {\n\tfor _, attrS := range b.Attributes {\n\t\tif attrS.Sensitive {\n\t\t\treturn true\n\t\t}\n\t}\n\tfor _, blockS := range b.BlockTypes {\n\t\tif blockS.ContainsSensitive() {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/configs/configschema/internal_validate.go",
    "content": "package configschema\n\nimport (\n\t\"fmt\"\n\t\"regexp\"\n\n\t\"github.com/zclconf/go-cty/cty\"\n\n\tmultierror \"github.com/hashicorp/go-multierror\"\n)\n\nvar validName = regexp.MustCompile(`^[a-z0-9_]+$`)\n\n// InternalValidate returns an error if the receiving block and its child\n// schema definitions have any consistencies with the documented rules for\n// valid schema.\n//\n// This is intended to be used within unit tests to detect when a given\n// schema is invalid.\nfunc (b *Block) InternalValidate() error {\n\tif b == nil {\n\t\treturn fmt.Errorf(\"top-level block schema is nil\")\n\t}\n\treturn b.internalValidate(\"\", nil)\n\n}\n\nfunc (b *Block) internalValidate(prefix string, err error) error {\n\tfor name, attrS := range b.Attributes {\n\t\tif attrS == nil {\n\t\t\terr = multierror.Append(err, fmt.Errorf(\"%s%s: attribute schema is nil\", prefix, name))\n\t\t\tcontinue\n\t\t}\n\t\tif !validName.MatchString(name) {\n\t\t\terr = multierror.Append(err, fmt.Errorf(\"%s%s: name may contain only lowercase letters, digits and underscores\", prefix, name))\n\t\t}\n\t\tif attrS.Optional == false && attrS.Required == false && attrS.Computed == false {\n\t\t\terr = multierror.Append(err, fmt.Errorf(\"%s%s: must set Optional, Required or Computed\", prefix, name))\n\t\t}\n\t\tif attrS.Optional && attrS.Required {\n\t\t\terr = multierror.Append(err, fmt.Errorf(\"%s%s: cannot set both Optional and Required\", prefix, name))\n\t\t}\n\t\tif attrS.Computed && attrS.Required {\n\t\t\terr = multierror.Append(err, fmt.Errorf(\"%s%s: cannot set both Computed and Required\", prefix, name))\n\t\t}\n\t\tif attrS.Type == cty.NilType {\n\t\t\terr = multierror.Append(err, fmt.Errorf(\"%s%s: Type must be set to something other than cty.NilType\", prefix, name))\n\t\t}\n\t}\n\n\tfor name, blockS := range b.BlockTypes {\n\t\tif blockS == nil {\n\t\t\terr = multierror.Append(err, fmt.Errorf(\"%s%s: block schema is nil\", prefix, name))\n\t\t\tcontinue\n\t\t}\n\n\t\tif _, isAttr := b.Attributes[name]; isAttr {\n\t\t\terr = multierror.Append(err, fmt.Errorf(\"%s%s: name defined as both attribute and child block type\", prefix, name))\n\t\t} else if !validName.MatchString(name) {\n\t\t\terr = multierror.Append(err, fmt.Errorf(\"%s%s: name may contain only lowercase letters, digits and underscores\", prefix, name))\n\t\t}\n\n\t\tif blockS.MinItems < 0 || blockS.MaxItems < 0 {\n\t\t\terr = multierror.Append(err, fmt.Errorf(\"%s%s: MinItems and MaxItems must both be greater than zero\", prefix, name))\n\t\t}\n\n\t\tswitch blockS.Nesting {\n\t\tcase NestingSingle:\n\t\t\tswitch {\n\t\t\tcase blockS.MinItems != blockS.MaxItems:\n\t\t\t\terr = multierror.Append(err, fmt.Errorf(\"%s%s: MinItems and MaxItems must match in NestingSingle mode\", prefix, name))\n\t\t\tcase blockS.MinItems < 0 || blockS.MinItems > 1:\n\t\t\t\terr = multierror.Append(err, fmt.Errorf(\"%s%s: MinItems and MaxItems must be set to either 0 or 1 in NestingSingle mode\", prefix, name))\n\t\t\t}\n\t\tcase NestingGroup:\n\t\t\tif blockS.MinItems != 0 || blockS.MaxItems != 0 {\n\t\t\t\terr = multierror.Append(err, fmt.Errorf(\"%s%s: MinItems and MaxItems cannot be used in NestingGroup mode\", prefix, name))\n\t\t\t}\n\t\tcase NestingList, NestingSet:\n\t\t\tif blockS.MinItems > blockS.MaxItems && blockS.MaxItems != 0 {\n\t\t\t\terr = multierror.Append(err, fmt.Errorf(\"%s%s: MinItems must be less than or equal to MaxItems in %s mode\", prefix, name, blockS.Nesting))\n\t\t\t}\n\t\t\tif blockS.Nesting == NestingSet {\n\t\t\t\tety := blockS.Block.ImpliedType()\n\t\t\t\tif ety.HasDynamicTypes() {\n\t\t\t\t\t// This is not permitted because the HCL (cty) set implementation\n\t\t\t\t\t// needs to know the exact type of set elements in order to\n\t\t\t\t\t// properly hash them, and so can't support mixed types.\n\t\t\t\t\terr = multierror.Append(err, fmt.Errorf(\"%s%s: NestingSet blocks may not contain attributes of cty.DynamicPseudoType\", prefix, name))\n\t\t\t\t}\n\t\t\t}\n\t\tcase NestingMap:\n\t\t\tif blockS.MinItems != 0 || blockS.MaxItems != 0 {\n\t\t\t\terr = multierror.Append(err, fmt.Errorf(\"%s%s: MinItems and MaxItems must both be 0 in NestingMap mode\", prefix, name))\n\t\t\t}\n\t\tdefault:\n\t\t\terr = multierror.Append(err, fmt.Errorf(\"%s%s: invalid nesting mode %s\", prefix, name, blockS.Nesting))\n\t\t}\n\n\t\tsubPrefix := prefix + name + \".\"\n\t\terr = blockS.Block.internalValidate(subPrefix, err)\n\t}\n\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/configs/configschema/nestingmode_string.go",
    "content": "// Code generated by \"stringer -type=NestingMode\"; DO NOT EDIT.\n\npackage configschema\n\nimport \"strconv\"\n\nfunc _() {\n\t// An \"invalid array index\" compiler error signifies that the constant values have changed.\n\t// Re-run the stringer command to generate them again.\n\tvar x [1]struct{}\n\t_ = x[nestingModeInvalid-0]\n\t_ = x[NestingSingle-1]\n\t_ = x[NestingGroup-2]\n\t_ = x[NestingList-3]\n\t_ = x[NestingSet-4]\n\t_ = x[NestingMap-5]\n}\n\nconst _NestingMode_name = \"nestingModeInvalidNestingSingleNestingGroupNestingListNestingSetNestingMap\"\n\nvar _NestingMode_index = [...]uint8{0, 18, 31, 43, 54, 64, 74}\n\nfunc (i NestingMode) String() string {\n\tif i < 0 || i >= NestingMode(len(_NestingMode_index)-1) {\n\t\treturn \"NestingMode(\" + strconv.FormatInt(int64(i), 10) + \")\"\n\t}\n\treturn _NestingMode_name[_NestingMode_index[i]:_NestingMode_index[i+1]]\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/configs/configschema/none_required.go",
    "content": "package configschema\n\n// NoneRequired returns a deep copy of the receiver with any required\n// attributes translated to optional.\nfunc (b *Block) NoneRequired() *Block {\n\tret := &Block{}\n\n\tif b.Attributes != nil {\n\t\tret.Attributes = make(map[string]*Attribute, len(b.Attributes))\n\t}\n\tfor name, attrS := range b.Attributes {\n\t\tret.Attributes[name] = attrS.forceOptional()\n\t}\n\n\tif b.BlockTypes != nil {\n\t\tret.BlockTypes = make(map[string]*NestedBlock, len(b.BlockTypes))\n\t}\n\tfor name, blockS := range b.BlockTypes {\n\t\tret.BlockTypes[name] = blockS.noneRequired()\n\t}\n\n\treturn ret\n}\n\nfunc (b *NestedBlock) noneRequired() *NestedBlock {\n\tret := *b\n\tret.Block = *(ret.Block.NoneRequired())\n\tret.MinItems = 0\n\tret.MaxItems = 0\n\treturn &ret\n}\n\nfunc (a *Attribute) forceOptional() *Attribute {\n\tret := *a\n\tret.Optional = true\n\tret.Required = false\n\treturn &ret\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/configs/configschema/schema.go",
    "content": "package configschema\n\nimport (\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// Block represents a configuration block.\n//\n// \"Block\" here is a logical grouping construct, though it happens to map\n// directly onto the physical block syntax of Terraform's native configuration\n// syntax. It may be a more a matter of convention in other syntaxes, such as\n// JSON.\n//\n// When converted to a value, a Block always becomes an instance of an object\n// type derived from its defined attributes and nested blocks\ntype Block struct {\n\t// Attributes describes any attributes that may appear directly inside\n\t// the block.\n\tAttributes map[string]*Attribute\n\n\t// BlockTypes describes any nested block types that may appear directly\n\t// inside the block.\n\tBlockTypes map[string]*NestedBlock\n}\n\n// Attribute represents a configuration attribute, within a block.\ntype Attribute struct {\n\t// Type is a type specification that the attribute's value must conform to.\n\tType cty.Type\n\n\t// Description is an English-language description of the purpose and\n\t// usage of the attribute. A description should be concise and use only\n\t// one or two sentences, leaving full definition to longer-form\n\t// documentation defined elsewhere.\n\tDescription string\n\n\t// Required, if set to true, specifies that an omitted or null value is\n\t// not permitted.\n\tRequired bool\n\n\t// Optional, if set to true, specifies that an omitted or null value is\n\t// permitted. This field conflicts with Required.\n\tOptional bool\n\n\t// Computed, if set to true, specifies that the value comes from the\n\t// provider rather than from configuration. If combined with Optional,\n\t// then the config may optionally provide an overridden value.\n\tComputed bool\n\n\t// Sensitive, if set to true, indicates that an attribute may contain\n\t// sensitive information.\n\t//\n\t// At present nothing is done with this information, but callers are\n\t// encouraged to set it where appropriate so that it may be used in the\n\t// future to help Terraform mask sensitive information. (Terraform\n\t// currently achieves this in a limited sense via other mechanisms.)\n\tSensitive bool\n}\n\n// NestedBlock represents the embedding of one block within another.\ntype NestedBlock struct {\n\t// Block is the description of the block that's nested.\n\tBlock\n\n\t// Nesting provides the nesting mode for the child block, which determines\n\t// how many instances of the block are allowed, how many labels it expects,\n\t// and how the resulting data will be converted into a data structure.\n\tNesting NestingMode\n\n\t// MinItems and MaxItems set, for the NestingList and NestingSet nesting\n\t// modes, lower and upper limits on the number of child blocks allowed\n\t// of the given type. If both are left at zero, no limit is applied.\n\t//\n\t// As a special case, both values can be set to 1 for NestingSingle in\n\t// order to indicate that a particular single block is required.\n\t//\n\t// These fields are ignored for other nesting modes and must both be left\n\t// at zero.\n\tMinItems, MaxItems int\n}\n\n// NestingMode is an enumeration of modes for nesting blocks inside other\n// blocks.\ntype NestingMode int\n\n//go:generate stringer -type=NestingMode\n\nconst (\n\tnestingModeInvalid NestingMode = iota\n\n\t// NestingSingle indicates that only a single instance of a given\n\t// block type is permitted, with no labels, and its content should be\n\t// provided directly as an object value.\n\tNestingSingle\n\n\t// NestingGroup is similar to NestingSingle in that it calls for only a\n\t// single instance of a given block type with no labels, but it additonally\n\t// guarantees that its result will never be null, even if the block is\n\t// absent, and instead the nested attributes and blocks will be treated\n\t// as absent in that case. (Any required attributes or blocks within the\n\t// nested block are not enforced unless the block is explicitly present\n\t// in the configuration, so they are all effectively optional when the\n\t// block is not present.)\n\t//\n\t// This is useful for the situation where a remote API has a feature that\n\t// is always enabled but has a group of settings related to that feature\n\t// that themselves have default values. By using NestingGroup instead of\n\t// NestingSingle in that case, generated plans will show the block as\n\t// present even when not present in configuration, thus allowing any\n\t// default values within to be displayed to the user.\n\tNestingGroup\n\n\t// NestingList indicates that multiple blocks of the given type are\n\t// permitted, with no labels, and that their corresponding objects should\n\t// be provided in a list.\n\tNestingList\n\n\t// NestingSet indicates that multiple blocks of the given type are\n\t// permitted, with no labels, and that their corresponding objects should\n\t// be provided in a set.\n\tNestingSet\n\n\t// NestingMap indicates that multiple blocks of the given type are\n\t// permitted, each with a single label, and that their corresponding\n\t// objects should be provided in a map whose keys are the labels.\n\t//\n\t// It's an error, therefore, to use the same label value on multiple\n\t// blocks.\n\tNestingMap\n)\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/configs/configschema/validate_traversal.go",
    "content": "package configschema\n\nimport (\n\t\"fmt\"\n\t\"sort\"\n\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/hashicorp/hcl2/hcl/hclsyntax\"\n\t\"github.com/zclconf/go-cty/cty\"\n\n\t\"github.com/hashicorp/terraform/helper/didyoumean\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n)\n\n// StaticValidateTraversal checks whether the given traversal (which must be\n// relative) refers to a construct in the receiving schema, returning error\n// diagnostics if any problems are found.\n//\n// This method is \"optimistic\" in that it will not return errors for possible\n// problems that cannot be detected statically. It is possible that an\n// traversal which passed static validation will still fail when evaluated.\nfunc (b *Block) StaticValidateTraversal(traversal hcl.Traversal) tfdiags.Diagnostics {\n\tif !traversal.IsRelative() {\n\t\tpanic(\"StaticValidateTraversal on absolute traversal\")\n\t}\n\tif len(traversal) == 0 {\n\t\treturn nil\n\t}\n\n\tvar diags tfdiags.Diagnostics\n\n\tnext := traversal[0]\n\tafter := traversal[1:]\n\n\tvar name string\n\tswitch step := next.(type) {\n\tcase hcl.TraverseAttr:\n\t\tname = step.Name\n\tcase hcl.TraverseIndex:\n\t\t// No other traversal step types are allowed directly at a block.\n\t\t// If it looks like the user was trying to use index syntax to\n\t\t// access an attribute then we'll produce a specialized message.\n\t\tkey := step.Key\n\t\tif key.Type() == cty.String && key.IsKnown() && !key.IsNull() {\n\t\t\tmaybeName := key.AsString()\n\t\t\tif hclsyntax.ValidIdentifier(maybeName) {\n\t\t\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\tSummary:  `Invalid index operation`,\n\t\t\t\t\tDetail:   fmt.Sprintf(`Only attribute access is allowed here. Did you mean to access attribute %q using the dot operator?`, maybeName),\n\t\t\t\t\tSubject:  &step.SrcRange,\n\t\t\t\t})\n\t\t\t\treturn diags\n\t\t\t}\n\t\t}\n\t\t// If it looks like some other kind of index then we'll use a generic error.\n\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  `Invalid index operation`,\n\t\t\tDetail:   `Only attribute access is allowed here, using the dot operator.`,\n\t\t\tSubject:  &step.SrcRange,\n\t\t})\n\t\treturn diags\n\tdefault:\n\t\t// No other traversal types should appear in a normal valid traversal,\n\t\t// but we'll handle this with a generic error anyway to be robust.\n\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  `Invalid operation`,\n\t\t\tDetail:   `Only attribute access is allowed here, using the dot operator.`,\n\t\t\tSubject:  next.SourceRange().Ptr(),\n\t\t})\n\t\treturn diags\n\t}\n\n\tif attrS, exists := b.Attributes[name]; exists {\n\t\t// For attribute validation we will just apply the rest of the\n\t\t// traversal to an unknown value of the attribute type and pass\n\t\t// through HCL's own errors, since we don't want to replicate all of\n\t\t// HCL's type checking rules here.\n\t\tval := cty.UnknownVal(attrS.Type)\n\t\t_, hclDiags := after.TraverseRel(val)\n\t\tdiags = diags.Append(hclDiags)\n\t\treturn diags\n\t}\n\n\tif blockS, exists := b.BlockTypes[name]; exists {\n\t\tmoreDiags := blockS.staticValidateTraversal(name, after)\n\t\tdiags = diags.Append(moreDiags)\n\t\treturn diags\n\t}\n\n\t// If we get here then the name isn't valid at all. We'll collect up\n\t// all of the names that _are_ valid to use as suggestions.\n\tvar suggestions []string\n\tfor name := range b.Attributes {\n\t\tsuggestions = append(suggestions, name)\n\t}\n\tfor name := range b.BlockTypes {\n\t\tsuggestions = append(suggestions, name)\n\t}\n\tsort.Strings(suggestions)\n\tsuggestion := didyoumean.NameSuggestion(name, suggestions)\n\tif suggestion != \"\" {\n\t\tsuggestion = fmt.Sprintf(\" Did you mean %q?\", suggestion)\n\t}\n\tdiags = diags.Append(&hcl.Diagnostic{\n\t\tSeverity: hcl.DiagError,\n\t\tSummary:  `Unsupported attribute`,\n\t\tDetail:   fmt.Sprintf(`This object has no argument, nested block, or exported attribute named %q.%s`, name, suggestion),\n\t\tSubject:  next.SourceRange().Ptr(),\n\t})\n\n\treturn diags\n}\n\nfunc (b *NestedBlock) staticValidateTraversal(typeName string, traversal hcl.Traversal) tfdiags.Diagnostics {\n\tif b.Nesting == NestingSingle || b.Nesting == NestingGroup {\n\t\t// Single blocks are easy: just pass right through.\n\t\treturn b.Block.StaticValidateTraversal(traversal)\n\t}\n\n\tif len(traversal) == 0 {\n\t\t// It's always valid to access a nested block's attribute directly.\n\t\treturn nil\n\t}\n\n\tvar diags tfdiags.Diagnostics\n\tnext := traversal[0]\n\tafter := traversal[1:]\n\n\tswitch b.Nesting {\n\n\tcase NestingSet:\n\t\t// Can't traverse into a set at all, since it does not have any keys\n\t\t// to index with.\n\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  `Cannot index a set value`,\n\t\t\tDetail:   fmt.Sprintf(`Block type %q is represented by a set of objects, and set elements do not have addressable keys. To find elements matching specific criteria, use a \"for\" expression with an \"if\" clause.`, typeName),\n\t\t\tSubject:  next.SourceRange().Ptr(),\n\t\t})\n\t\treturn diags\n\n\tcase NestingList:\n\t\tif _, ok := next.(hcl.TraverseIndex); ok {\n\t\t\tmoreDiags := b.Block.StaticValidateTraversal(after)\n\t\t\tdiags = diags.Append(moreDiags)\n\t\t} else {\n\t\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  `Invalid operation`,\n\t\t\t\tDetail:   fmt.Sprintf(`Block type %q is represented by a list of objects, so it must be indexed using a numeric key, like .%s[0].`, typeName, typeName),\n\t\t\t\tSubject:  next.SourceRange().Ptr(),\n\t\t\t})\n\t\t}\n\t\treturn diags\n\n\tcase NestingMap:\n\t\t// Both attribute and index steps are valid for maps, so we'll just\n\t\t// pass through here and let normal evaluation catch an\n\t\t// incorrectly-typed index key later, if present.\n\t\tmoreDiags := b.Block.StaticValidateTraversal(after)\n\t\tdiags = diags.Append(moreDiags)\n\t\treturn diags\n\n\tdefault:\n\t\t// Invalid nesting type is just ignored. It's checked by\n\t\t// InternalValidate. (Note that we handled NestingSingle separately\n\t\t// back at the start of this function.)\n\t\treturn nil\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/configs/depends_on.go",
    "content": "package configs\n\nimport (\n\t\"github.com/hashicorp/hcl2/hcl\"\n)\n\nfunc decodeDependsOn(attr *hcl.Attribute) ([]hcl.Traversal, hcl.Diagnostics) {\n\tvar ret []hcl.Traversal\n\texprs, diags := hcl.ExprList(attr.Expr)\n\n\tfor _, expr := range exprs {\n\t\texpr, shimDiags := shimTraversalInString(expr, false)\n\t\tdiags = append(diags, shimDiags...)\n\n\t\ttraversal, travDiags := hcl.AbsTraversalForExpr(expr)\n\t\tdiags = append(diags, travDiags...)\n\t\tif len(traversal) != 0 {\n\t\t\tret = append(ret, traversal)\n\t\t}\n\t}\n\n\treturn ret, diags\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/configs/doc.go",
    "content": "// Package configs contains types that represent Terraform configurations and\n// the different elements thereof.\n//\n// The functionality in this package can be used for some static analyses of\n// Terraform configurations, but this package generally exposes representations\n// of the configuration source code rather than the result of evaluating these\n// objects. The sibling package \"lang\" deals with evaluation of structures\n// and expressions in the configuration.\n//\n// Due to its close relationship with HCL, this package makes frequent use\n// of types from the HCL API, including raw HCL diagnostic messages. Such\n// diagnostics can be converted into Terraform-flavored diagnostics, if needed,\n// using functions in the sibling package tfdiags.\n//\n// The Parser type is the main entry-point into this package. The LoadConfigDir\n// method can be used to load a single module directory, and then a full\n// configuration (including any descendent modules) can be produced using\n// the top-level BuildConfig method.\npackage configs\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/configs/module.go",
    "content": "package configs\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/hashicorp/hcl2/hcl\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n)\n\n// Module is a container for a set of configuration constructs that are\n// evaluated within a common namespace.\ntype Module struct {\n\t// SourceDir is the filesystem directory that the module was loaded from.\n\t//\n\t// This is populated automatically only for configurations loaded with\n\t// LoadConfigDir. If the parser is using a virtual filesystem then the\n\t// path here will be in terms of that virtual filesystem.\n\n\t// Any other caller that constructs a module directly with NewModule may\n\t// assign a suitable value to this attribute before using it for other\n\t// purposes. It should be treated as immutable by all consumers of Module\n\t// values.\n\tSourceDir string\n\n\tCoreVersionConstraints []VersionConstraint\n\n\tBackend              *Backend\n\tProviderConfigs      map[string]*Provider\n\tProviderRequirements map[string][]VersionConstraint\n\n\tVariables map[string]*Variable\n\tLocals    map[string]*Local\n\tOutputs   map[string]*Output\n\n\tModuleCalls map[string]*ModuleCall\n\n\tManagedResources map[string]*Resource\n\tDataResources    map[string]*Resource\n}\n\n// File describes the contents of a single configuration file.\n//\n// Individual files are not usually used alone, but rather combined together\n// with other files (conventionally, those in the same directory) to produce\n// a *Module, using NewModule.\n//\n// At the level of an individual file we represent directly the structural\n// elements present in the file, without any attempt to detect conflicting\n// declarations. A File object can therefore be used for some basic static\n// analysis of individual elements, but must be built into a Module to detect\n// duplicate declarations.\ntype File struct {\n\tCoreVersionConstraints []VersionConstraint\n\n\tBackends             []*Backend\n\tProviderConfigs      []*Provider\n\tProviderRequirements []*ProviderRequirement\n\n\tVariables []*Variable\n\tLocals    []*Local\n\tOutputs   []*Output\n\n\tModuleCalls []*ModuleCall\n\n\tManagedResources []*Resource\n\tDataResources    []*Resource\n}\n\n// NewModule takes a list of primary files and a list of override files and\n// produces a *Module by combining the files together.\n//\n// If there are any conflicting declarations in the given files -- for example,\n// if the same variable name is defined twice -- then the resulting module\n// will be incomplete and error diagnostics will be returned. Careful static\n// analysis of the returned Module is still possible in this case, but the\n// module will probably not be semantically valid.\nfunc NewModule(primaryFiles, overrideFiles []*File) (*Module, hcl.Diagnostics) {\n\tvar diags hcl.Diagnostics\n\tmod := &Module{\n\t\tProviderConfigs:      map[string]*Provider{},\n\t\tProviderRequirements: map[string][]VersionConstraint{},\n\t\tVariables:            map[string]*Variable{},\n\t\tLocals:               map[string]*Local{},\n\t\tOutputs:              map[string]*Output{},\n\t\tModuleCalls:          map[string]*ModuleCall{},\n\t\tManagedResources:     map[string]*Resource{},\n\t\tDataResources:        map[string]*Resource{},\n\t}\n\n\tfor _, file := range primaryFiles {\n\t\tfileDiags := mod.appendFile(file)\n\t\tdiags = append(diags, fileDiags...)\n\t}\n\n\tfor _, file := range overrideFiles {\n\t\tfileDiags := mod.mergeFile(file)\n\t\tdiags = append(diags, fileDiags...)\n\t}\n\n\treturn mod, diags\n}\n\n// ResourceByAddr returns the configuration for the resource with the given\n// address, or nil if there is no such resource.\nfunc (m *Module) ResourceByAddr(addr addrs.Resource) *Resource {\n\tkey := addr.String()\n\tswitch addr.Mode {\n\tcase addrs.ManagedResourceMode:\n\t\treturn m.ManagedResources[key]\n\tcase addrs.DataResourceMode:\n\t\treturn m.DataResources[key]\n\tdefault:\n\t\treturn nil\n\t}\n}\n\nfunc (m *Module) appendFile(file *File) hcl.Diagnostics {\n\tvar diags hcl.Diagnostics\n\n\tfor _, constraint := range file.CoreVersionConstraints {\n\t\t// If there are any conflicting requirements then we'll catch them\n\t\t// when we actually check these constraints.\n\t\tm.CoreVersionConstraints = append(m.CoreVersionConstraints, constraint)\n\t}\n\n\tfor _, b := range file.Backends {\n\t\tif m.Backend != nil {\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Duplicate backend configuration\",\n\t\t\t\tDetail:   fmt.Sprintf(\"A module may have only one backend configuration. The backend was previously configured at %s.\", m.Backend.DeclRange),\n\t\t\t\tSubject:  &b.DeclRange,\n\t\t\t})\n\t\t\tcontinue\n\t\t}\n\t\tm.Backend = b\n\t}\n\n\tfor _, pc := range file.ProviderConfigs {\n\t\tkey := pc.moduleUniqueKey()\n\t\tif existing, exists := m.ProviderConfigs[key]; exists {\n\t\t\tif existing.Alias == \"\" {\n\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\tSummary:  \"Duplicate provider configuration\",\n\t\t\t\t\tDetail:   fmt.Sprintf(\"A default (non-aliased) provider configuration for %q was already given at %s. If multiple configurations are required, set the \\\"alias\\\" argument for alternative configurations.\", existing.Name, existing.DeclRange),\n\t\t\t\t\tSubject:  &pc.DeclRange,\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\tSummary:  \"Duplicate provider configuration\",\n\t\t\t\t\tDetail:   fmt.Sprintf(\"A provider configuration for %q with alias %q was already given at %s. Each configuration for the same provider must have a distinct alias.\", existing.Name, existing.Alias, existing.DeclRange),\n\t\t\t\t\tSubject:  &pc.DeclRange,\n\t\t\t\t})\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\tm.ProviderConfigs[key] = pc\n\t}\n\n\tfor _, reqd := range file.ProviderRequirements {\n\t\tm.ProviderRequirements[reqd.Name] = append(m.ProviderRequirements[reqd.Name], reqd.Requirement)\n\t}\n\n\tfor _, v := range file.Variables {\n\t\tif existing, exists := m.Variables[v.Name]; exists {\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Duplicate variable declaration\",\n\t\t\t\tDetail:   fmt.Sprintf(\"A variable named %q was already declared at %s. Variable names must be unique within a module.\", existing.Name, existing.DeclRange),\n\t\t\t\tSubject:  &v.DeclRange,\n\t\t\t})\n\t\t}\n\t\tm.Variables[v.Name] = v\n\t}\n\n\tfor _, l := range file.Locals {\n\t\tif existing, exists := m.Locals[l.Name]; exists {\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Duplicate local value definition\",\n\t\t\t\tDetail:   fmt.Sprintf(\"A local value named %q was already defined at %s. Local value names must be unique within a module.\", existing.Name, existing.DeclRange),\n\t\t\t\tSubject:  &l.DeclRange,\n\t\t\t})\n\t\t}\n\t\tm.Locals[l.Name] = l\n\t}\n\n\tfor _, o := range file.Outputs {\n\t\tif existing, exists := m.Outputs[o.Name]; exists {\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Duplicate output definition\",\n\t\t\t\tDetail:   fmt.Sprintf(\"An output named %q was already defined at %s. Output names must be unique within a module.\", existing.Name, existing.DeclRange),\n\t\t\t\tSubject:  &o.DeclRange,\n\t\t\t})\n\t\t}\n\t\tm.Outputs[o.Name] = o\n\t}\n\n\tfor _, mc := range file.ModuleCalls {\n\t\tif existing, exists := m.ModuleCalls[mc.Name]; exists {\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Duplicate module call\",\n\t\t\t\tDetail:   fmt.Sprintf(\"An module call named %q was already defined at %s. Module calls must have unique names within a module.\", existing.Name, existing.DeclRange),\n\t\t\t\tSubject:  &mc.DeclRange,\n\t\t\t})\n\t\t}\n\t\tm.ModuleCalls[mc.Name] = mc\n\t}\n\n\tfor _, r := range file.ManagedResources {\n\t\tkey := r.moduleUniqueKey()\n\t\tif existing, exists := m.ManagedResources[key]; exists {\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  fmt.Sprintf(\"Duplicate resource %q configuration\", existing.Type),\n\t\t\t\tDetail:   fmt.Sprintf(\"A %s resource named %q was already declared at %s. Resource names must be unique per type in each module.\", existing.Type, existing.Name, existing.DeclRange),\n\t\t\t\tSubject:  &r.DeclRange,\n\t\t\t})\n\t\t\tcontinue\n\t\t}\n\t\tm.ManagedResources[key] = r\n\t}\n\n\tfor _, r := range file.DataResources {\n\t\tkey := r.moduleUniqueKey()\n\t\tif existing, exists := m.DataResources[key]; exists {\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  fmt.Sprintf(\"Duplicate data %q configuration\", existing.Type),\n\t\t\t\tDetail:   fmt.Sprintf(\"A %s data resource named %q was already declared at %s. Resource names must be unique per type in each module.\", existing.Type, existing.Name, existing.DeclRange),\n\t\t\t\tSubject:  &r.DeclRange,\n\t\t\t})\n\t\t\tcontinue\n\t\t}\n\t\tm.DataResources[key] = r\n\t}\n\n\treturn diags\n}\n\nfunc (m *Module) mergeFile(file *File) hcl.Diagnostics {\n\tvar diags hcl.Diagnostics\n\n\tif len(file.CoreVersionConstraints) != 0 {\n\t\t// This is a bit of a strange case for overriding since we normally\n\t\t// would union together across multiple files anyway, but we'll\n\t\t// allow it and have each override file clobber any existing list.\n\t\tm.CoreVersionConstraints = nil\n\t\tfor _, constraint := range file.CoreVersionConstraints {\n\t\t\tm.CoreVersionConstraints = append(m.CoreVersionConstraints, constraint)\n\t\t}\n\t}\n\n\tif len(file.Backends) != 0 {\n\t\tswitch len(file.Backends) {\n\t\tcase 1:\n\t\t\tm.Backend = file.Backends[0]\n\t\tdefault:\n\t\t\t// An override file with multiple backends is still invalid, even\n\t\t\t// though it can override backends from _other_ files.\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Duplicate backend configuration\",\n\t\t\t\tDetail:   fmt.Sprintf(\"Each override file may have only one backend configuration. A backend was previously configured at %s.\", file.Backends[0].DeclRange),\n\t\t\t\tSubject:  &file.Backends[1].DeclRange,\n\t\t\t})\n\t\t}\n\t}\n\n\tfor _, pc := range file.ProviderConfigs {\n\t\tkey := pc.moduleUniqueKey()\n\t\texisting, exists := m.ProviderConfigs[key]\n\t\tif pc.Alias == \"\" {\n\t\t\t// We allow overriding a non-existing _default_ provider configuration\n\t\t\t// because the user model is that an absent provider configuration\n\t\t\t// implies an empty provider configuration, which is what the user\n\t\t\t// is therefore overriding here.\n\t\t\tif exists {\n\t\t\t\tmergeDiags := existing.merge(pc)\n\t\t\t\tdiags = append(diags, mergeDiags...)\n\t\t\t} else {\n\t\t\t\tm.ProviderConfigs[key] = pc\n\t\t\t}\n\t\t} else {\n\t\t\t// For aliased providers, there must be a base configuration to\n\t\t\t// override. This allows us to detect and report alias typos\n\t\t\t// that might otherwise cause the override to not apply.\n\t\t\tif !exists {\n\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\tSummary:  \"Missing base provider configuration for override\",\n\t\t\t\t\tDetail:   fmt.Sprintf(\"There is no %s provider configuration with the alias %q. An override file can only override an aliased provider configuration that was already defined in a primary configuration file.\", pc.Name, pc.Alias),\n\t\t\t\t\tSubject:  &pc.DeclRange,\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tmergeDiags := existing.merge(pc)\n\t\t\tdiags = append(diags, mergeDiags...)\n\t\t}\n\t}\n\n\tif len(file.ProviderRequirements) != 0 {\n\t\tmergeProviderVersionConstraints(m.ProviderRequirements, file.ProviderRequirements)\n\t}\n\n\tfor _, v := range file.Variables {\n\t\texisting, exists := m.Variables[v.Name]\n\t\tif !exists {\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Missing base variable declaration to override\",\n\t\t\t\tDetail:   fmt.Sprintf(\"There is no variable named %q. An override file can only override a variable that was already declared in a primary configuration file.\", v.Name),\n\t\t\t\tSubject:  &v.DeclRange,\n\t\t\t})\n\t\t\tcontinue\n\t\t}\n\t\tmergeDiags := existing.merge(v)\n\t\tdiags = append(diags, mergeDiags...)\n\t}\n\n\tfor _, l := range file.Locals {\n\t\texisting, exists := m.Locals[l.Name]\n\t\tif !exists {\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Missing base local value definition to override\",\n\t\t\t\tDetail:   fmt.Sprintf(\"There is no local value named %q. An override file can only override a local value that was already defined in a primary configuration file.\", l.Name),\n\t\t\t\tSubject:  &l.DeclRange,\n\t\t\t})\n\t\t\tcontinue\n\t\t}\n\t\tmergeDiags := existing.merge(l)\n\t\tdiags = append(diags, mergeDiags...)\n\t}\n\n\tfor _, o := range file.Outputs {\n\t\texisting, exists := m.Outputs[o.Name]\n\t\tif !exists {\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Missing base output definition to override\",\n\t\t\t\tDetail:   fmt.Sprintf(\"There is no output named %q. An override file can only override an output that was already defined in a primary configuration file.\", o.Name),\n\t\t\t\tSubject:  &o.DeclRange,\n\t\t\t})\n\t\t\tcontinue\n\t\t}\n\t\tmergeDiags := existing.merge(o)\n\t\tdiags = append(diags, mergeDiags...)\n\t}\n\n\tfor _, mc := range file.ModuleCalls {\n\t\texisting, exists := m.ModuleCalls[mc.Name]\n\t\tif !exists {\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Missing module call to override\",\n\t\t\t\tDetail:   fmt.Sprintf(\"There is no module call named %q. An override file can only override a module call that was defined in a primary configuration file.\", mc.Name),\n\t\t\t\tSubject:  &mc.DeclRange,\n\t\t\t})\n\t\t\tcontinue\n\t\t}\n\t\tmergeDiags := existing.merge(mc)\n\t\tdiags = append(diags, mergeDiags...)\n\t}\n\n\tfor _, r := range file.ManagedResources {\n\t\tkey := r.moduleUniqueKey()\n\t\texisting, exists := m.ManagedResources[key]\n\t\tif !exists {\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Missing resource to override\",\n\t\t\t\tDetail:   fmt.Sprintf(\"There is no %s resource named %q. An override file can only override a resource block defined in a primary configuration file.\", r.Type, r.Name),\n\t\t\t\tSubject:  &r.DeclRange,\n\t\t\t})\n\t\t\tcontinue\n\t\t}\n\t\tmergeDiags := existing.merge(r)\n\t\tdiags = append(diags, mergeDiags...)\n\t}\n\n\tfor _, r := range file.DataResources {\n\t\tkey := r.moduleUniqueKey()\n\t\texisting, exists := m.DataResources[key]\n\t\tif !exists {\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Missing data resource to override\",\n\t\t\t\tDetail:   fmt.Sprintf(\"There is no %s data resource named %q. An override file can only override a data block defined in a primary configuration file.\", r.Type, r.Name),\n\t\t\t\tSubject:  &r.DeclRange,\n\t\t\t})\n\t\t\tcontinue\n\t\t}\n\t\tmergeDiags := existing.merge(r)\n\t\tdiags = append(diags, mergeDiags...)\n\t}\n\n\treturn diags\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/configs/module_call.go",
    "content": "package configs\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/hashicorp/hcl2/gohcl\"\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/hashicorp/hcl2/hcl/hclsyntax\"\n)\n\n// ModuleCall represents a \"module\" block in a module or file.\ntype ModuleCall struct {\n\tName string\n\n\tSourceAddr      string\n\tSourceAddrRange hcl.Range\n\tSourceSet       bool\n\n\tConfig hcl.Body\n\n\tVersion VersionConstraint\n\n\tCount   hcl.Expression\n\tForEach hcl.Expression\n\n\tProviders []PassedProviderConfig\n\n\tDependsOn []hcl.Traversal\n\n\tDeclRange hcl.Range\n}\n\nfunc decodeModuleBlock(block *hcl.Block, override bool) (*ModuleCall, hcl.Diagnostics) {\n\tmc := &ModuleCall{\n\t\tName:      block.Labels[0],\n\t\tDeclRange: block.DefRange,\n\t}\n\n\tschema := moduleBlockSchema\n\tif override {\n\t\tschema = schemaForOverrides(schema)\n\t}\n\n\tcontent, remain, diags := block.Body.PartialContent(schema)\n\tmc.Config = remain\n\n\tif !hclsyntax.ValidIdentifier(mc.Name) {\n\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Invalid module instance name\",\n\t\t\tDetail:   badIdentifierDetail,\n\t\t\tSubject:  &block.LabelRanges[0],\n\t\t})\n\t}\n\n\tif attr, exists := content.Attributes[\"source\"]; exists {\n\t\tvalDiags := gohcl.DecodeExpression(attr.Expr, nil, &mc.SourceAddr)\n\t\tdiags = append(diags, valDiags...)\n\t\tmc.SourceAddrRange = attr.Expr.Range()\n\t\tmc.SourceSet = true\n\t}\n\n\tif attr, exists := content.Attributes[\"version\"]; exists {\n\t\tvar versionDiags hcl.Diagnostics\n\t\tmc.Version, versionDiags = decodeVersionConstraint(attr)\n\t\tdiags = append(diags, versionDiags...)\n\t}\n\n\tif attr, exists := content.Attributes[\"count\"]; exists {\n\t\tmc.Count = attr.Expr\n\n\t\t// We currently parse this, but don't yet do anything with it.\n\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Reserved argument name in module block\",\n\t\t\tDetail:   fmt.Sprintf(\"The name %q is reserved for use in a future version of Terraform.\", attr.Name),\n\t\t\tSubject:  &attr.NameRange,\n\t\t})\n\t}\n\n\tif attr, exists := content.Attributes[\"for_each\"]; exists {\n\t\tmc.ForEach = attr.Expr\n\n\t\t// We currently parse this, but don't yet do anything with it.\n\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Reserved argument name in module block\",\n\t\t\tDetail:   fmt.Sprintf(\"The name %q is reserved for use in a future version of Terraform.\", attr.Name),\n\t\t\tSubject:  &attr.NameRange,\n\t\t})\n\t}\n\n\tif attr, exists := content.Attributes[\"depends_on\"]; exists {\n\t\tdeps, depsDiags := decodeDependsOn(attr)\n\t\tdiags = append(diags, depsDiags...)\n\t\tmc.DependsOn = append(mc.DependsOn, deps...)\n\n\t\t// We currently parse this, but don't yet do anything with it.\n\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Reserved argument name in module block\",\n\t\t\tDetail:   fmt.Sprintf(\"The name %q is reserved for use in a future version of Terraform.\", attr.Name),\n\t\t\tSubject:  &attr.NameRange,\n\t\t})\n\t}\n\n\tif attr, exists := content.Attributes[\"providers\"]; exists {\n\t\tseen := make(map[string]hcl.Range)\n\t\tpairs, pDiags := hcl.ExprMap(attr.Expr)\n\t\tdiags = append(diags, pDiags...)\n\t\tfor _, pair := range pairs {\n\t\t\tkey, keyDiags := decodeProviderConfigRef(pair.Key, \"providers\")\n\t\t\tdiags = append(diags, keyDiags...)\n\t\t\tvalue, valueDiags := decodeProviderConfigRef(pair.Value, \"providers\")\n\t\t\tdiags = append(diags, valueDiags...)\n\t\t\tif keyDiags.HasErrors() || valueDiags.HasErrors() {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tmatchKey := key.String()\n\t\t\tif prev, exists := seen[matchKey]; exists {\n\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\tSummary:  \"Duplicate provider address\",\n\t\t\t\t\tDetail:   fmt.Sprintf(\"A provider configuration was already passed to %s at %s. Each child provider configuration can be assigned only once.\", matchKey, prev),\n\t\t\t\t\tSubject:  pair.Value.Range().Ptr(),\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\trng := hcl.RangeBetween(pair.Key.Range(), pair.Value.Range())\n\t\t\tseen[matchKey] = rng\n\t\t\tmc.Providers = append(mc.Providers, PassedProviderConfig{\n\t\t\t\tInChild:  key,\n\t\t\t\tInParent: value,\n\t\t\t})\n\t\t}\n\t}\n\n\t// Reserved block types (all of them)\n\tfor _, block := range content.Blocks {\n\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Reserved block type name in module block\",\n\t\t\tDetail:   fmt.Sprintf(\"The block type name %q is reserved for use by Terraform in a future version.\", block.Type),\n\t\t\tSubject:  &block.TypeRange,\n\t\t})\n\t}\n\n\treturn mc, diags\n}\n\n// PassedProviderConfig represents a provider config explicitly passed down to\n// a child module, possibly giving it a new local address in the process.\ntype PassedProviderConfig struct {\n\tInChild  *ProviderConfigRef\n\tInParent *ProviderConfigRef\n}\n\nvar moduleBlockSchema = &hcl.BodySchema{\n\tAttributes: []hcl.AttributeSchema{\n\t\t{\n\t\t\tName:     \"source\",\n\t\t\tRequired: true,\n\t\t},\n\t\t{\n\t\t\tName: \"version\",\n\t\t},\n\t\t{\n\t\t\tName: \"count\",\n\t\t},\n\t\t{\n\t\t\tName: \"for_each\",\n\t\t},\n\t\t{\n\t\t\tName: \"depends_on\",\n\t\t},\n\t\t{\n\t\t\tName: \"providers\",\n\t\t},\n\t},\n\tBlocks: []hcl.BlockHeaderSchema{\n\t\t// These are all reserved for future use.\n\t\t{Type: \"lifecycle\"},\n\t\t{Type: \"locals\"},\n\t\t{Type: \"provider\", LabelNames: []string{\"type\"}},\n\t},\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/configs/module_merge.go",
    "content": "package configs\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/zclconf/go-cty/cty\"\n\t\"github.com/zclconf/go-cty/cty/convert\"\n)\n\n// The methods in this file are used by Module.mergeFile to apply overrides\n// to our different configuration elements. These methods all follow the\n// pattern of mutating the receiver to incorporate settings from the parameter,\n// returning error diagnostics if any aspect of the parameter cannot be merged\n// into the receiver for some reason.\n//\n// User expectation is that anything _explicitly_ set in the given object\n// should take precedence over the corresponding settings in the receiver,\n// but that anything omitted in the given object should be left unchanged.\n// In some cases it may be reasonable to do a \"deep merge\" of certain nested\n// features, if it is possible to unambiguously correlate the nested elements\n// and their behaviors are orthogonal to each other.\n\nfunc (p *Provider) merge(op *Provider) hcl.Diagnostics {\n\tvar diags hcl.Diagnostics\n\n\tif op.Version.Required != nil {\n\t\tp.Version = op.Version\n\t}\n\n\tp.Config = MergeBodies(p.Config, op.Config)\n\n\treturn diags\n}\n\nfunc mergeProviderVersionConstraints(recv map[string][]VersionConstraint, ovrd []*ProviderRequirement) {\n\t// Any provider name that's mentioned in the override gets nilled out in\n\t// our map so that we'll rebuild it below. Any provider not mentioned is\n\t// left unchanged.\n\tfor _, reqd := range ovrd {\n\t\tdelete(recv, reqd.Name)\n\t}\n\tfor _, reqd := range ovrd {\n\t\trecv[reqd.Name] = append(recv[reqd.Name], reqd.Requirement)\n\t}\n}\n\nfunc (v *Variable) merge(ov *Variable) hcl.Diagnostics {\n\tvar diags hcl.Diagnostics\n\n\tif ov.DescriptionSet {\n\t\tv.Description = ov.Description\n\t\tv.DescriptionSet = ov.DescriptionSet\n\t}\n\tif ov.Default != cty.NilVal {\n\t\tv.Default = ov.Default\n\t}\n\tif ov.Type != cty.NilType {\n\t\tv.Type = ov.Type\n\t}\n\tif ov.ParsingMode != 0 {\n\t\tv.ParsingMode = ov.ParsingMode\n\t}\n\n\t// If the override file overrode type without default or vice-versa then\n\t// it may have created an invalid situation, which we'll catch now by\n\t// attempting to re-convert the value.\n\t//\n\t// Note that here we may be re-converting an already-converted base value\n\t// from the base config. This will be a no-op if the type was not changed,\n\t// but in particular might be user-observable in the edge case where the\n\t// literal value in config could've been converted to the overridden type\n\t// constraint but the converted value cannot. In practice, this situation\n\t// should be rare since most of our conversions are interchangable.\n\tif v.Default != cty.NilVal {\n\t\tval, err := convert.Convert(v.Default, v.Type)\n\t\tif err != nil {\n\t\t\t// What exactly we'll say in the error message here depends on whether\n\t\t\t// it was Default or Type that was overridden here.\n\t\t\tswitch {\n\t\t\tcase ov.Type != cty.NilType && ov.Default == cty.NilVal:\n\t\t\t\t// If only the type was overridden\n\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\tSummary:  \"Invalid default value for variable\",\n\t\t\t\t\tDetail:   fmt.Sprintf(\"Overriding this variable's type constraint has made its default value invalid: %s.\", err),\n\t\t\t\t\tSubject:  &ov.DeclRange,\n\t\t\t\t})\n\t\t\tcase ov.Type == cty.NilType && ov.Default != cty.NilVal:\n\t\t\t\t// Only the default was overridden\n\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\tSummary:  \"Invalid default value for variable\",\n\t\t\t\t\tDetail:   fmt.Sprintf(\"The overridden default value for this variable is not compatible with the variable's type constraint: %s.\", err),\n\t\t\t\t\tSubject:  &ov.DeclRange,\n\t\t\t\t})\n\t\t\tdefault:\n\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\tSummary:  \"Invalid default value for variable\",\n\t\t\t\t\tDetail:   fmt.Sprintf(\"This variable's default value is not compatible with its type constraint: %s.\", err),\n\t\t\t\t\tSubject:  &ov.DeclRange,\n\t\t\t\t})\n\t\t\t}\n\t\t} else {\n\t\t\tv.Default = val\n\t\t}\n\t}\n\n\treturn diags\n}\n\nfunc (l *Local) merge(ol *Local) hcl.Diagnostics {\n\tvar diags hcl.Diagnostics\n\n\t// Since a local is just a single expression in configuration, the\n\t// override definition entirely replaces the base definition, including\n\t// the source range so that we'll send the user to the right place if\n\t// there is an error.\n\tl.Expr = ol.Expr\n\tl.DeclRange = ol.DeclRange\n\n\treturn diags\n}\n\nfunc (o *Output) merge(oo *Output) hcl.Diagnostics {\n\tvar diags hcl.Diagnostics\n\n\tif oo.Description != \"\" {\n\t\to.Description = oo.Description\n\t}\n\tif oo.Expr != nil {\n\t\to.Expr = oo.Expr\n\t}\n\tif oo.SensitiveSet {\n\t\to.Sensitive = oo.Sensitive\n\t\to.SensitiveSet = oo.SensitiveSet\n\t}\n\n\t// We don't allow depends_on to be overridden because that is likely to\n\t// cause confusing misbehavior.\n\tif len(oo.DependsOn) != 0 {\n\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Unsupported override\",\n\t\t\tDetail:   \"The depends_on argument may not be overridden.\",\n\t\t\tSubject:  oo.DependsOn[0].SourceRange().Ptr(), // the first item is the closest range we have\n\t\t})\n\t}\n\n\treturn diags\n}\n\nfunc (mc *ModuleCall) merge(omc *ModuleCall) hcl.Diagnostics {\n\tvar diags hcl.Diagnostics\n\n\tif omc.SourceSet {\n\t\tmc.SourceAddr = omc.SourceAddr\n\t\tmc.SourceAddrRange = omc.SourceAddrRange\n\t\tmc.SourceSet = omc.SourceSet\n\t}\n\n\tif omc.Count != nil {\n\t\tmc.Count = omc.Count\n\t}\n\n\tif omc.ForEach != nil {\n\t\tmc.ForEach = omc.ForEach\n\t}\n\n\tif len(omc.Version.Required) != 0 {\n\t\tmc.Version = omc.Version\n\t}\n\n\tmc.Config = MergeBodies(mc.Config, omc.Config)\n\n\t// We don't allow depends_on to be overridden because that is likely to\n\t// cause confusing misbehavior.\n\tif len(mc.DependsOn) != 0 {\n\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Unsupported override\",\n\t\t\tDetail:   \"The depends_on argument may not be overridden.\",\n\t\t\tSubject:  mc.DependsOn[0].SourceRange().Ptr(), // the first item is the closest range we have\n\t\t})\n\t}\n\n\treturn diags\n}\n\nfunc (r *Resource) merge(or *Resource) hcl.Diagnostics {\n\tvar diags hcl.Diagnostics\n\n\tif r.Mode != or.Mode {\n\t\t// This is always a programming error, since managed and data resources\n\t\t// are kept in separate maps in the configuration structures.\n\t\tpanic(fmt.Errorf(\"can't merge %s into %s\", or.Mode, r.Mode))\n\t}\n\n\tif or.Count != nil {\n\t\tr.Count = or.Count\n\t}\n\tif or.ForEach != nil {\n\t\tr.ForEach = or.ForEach\n\t}\n\tif or.ProviderConfigRef != nil {\n\t\tr.ProviderConfigRef = or.ProviderConfigRef\n\t}\n\tif r.Mode == addrs.ManagedResourceMode {\n\t\t// or.Managed is always non-nil for managed resource mode\n\n\t\tif or.Managed.Connection != nil {\n\t\t\tr.Managed.Connection = or.Managed.Connection\n\t\t}\n\t\tif or.Managed.CreateBeforeDestroySet {\n\t\t\tr.Managed.CreateBeforeDestroy = or.Managed.CreateBeforeDestroy\n\t\t\tr.Managed.CreateBeforeDestroySet = or.Managed.CreateBeforeDestroySet\n\t\t}\n\t\tif len(or.Managed.IgnoreChanges) != 0 {\n\t\t\tr.Managed.IgnoreChanges = or.Managed.IgnoreChanges\n\t\t}\n\t\tif or.Managed.PreventDestroySet {\n\t\t\tr.Managed.PreventDestroy = or.Managed.PreventDestroy\n\t\t\tr.Managed.PreventDestroySet = or.Managed.PreventDestroySet\n\t\t}\n\t\tif len(or.Managed.Provisioners) != 0 {\n\t\t\tr.Managed.Provisioners = or.Managed.Provisioners\n\t\t}\n\t}\n\n\tr.Config = MergeBodies(r.Config, or.Config)\n\n\t// We don't allow depends_on to be overridden because that is likely to\n\t// cause confusing misbehavior.\n\tif len(or.DependsOn) != 0 {\n\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Unsupported override\",\n\t\t\tDetail:   \"The depends_on argument may not be overridden.\",\n\t\t\tSubject:  or.DependsOn[0].SourceRange().Ptr(), // the first item is the closest range we have\n\t\t})\n\t}\n\n\treturn diags\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/configs/module_merge_body.go",
    "content": "package configs\n\nimport (\n\t\"github.com/hashicorp/hcl2/hcl\"\n)\n\n// MergeBodies creates a new HCL body that contains a combination of the\n// given base and override bodies. Attributes and blocks defined in the\n// override body take precedence over those of the same name defined in\n// the base body.\n//\n// If any block of a particular type appears in \"override\" then it will\n// replace _all_ of the blocks of the same type in \"base\" in the new\n// body.\nfunc MergeBodies(base, override hcl.Body) hcl.Body {\n\treturn mergeBody{\n\t\tBase:     base,\n\t\tOverride: override,\n\t}\n}\n\n// mergeBody is a hcl.Body implementation that wraps a pair of other bodies\n// and allows attributes and blocks within the override to take precedence\n// over those defined in the base body.\n//\n// This is used to deal with dynamically-processed bodies in Module.mergeFile.\n// It uses a shallow-only merging strategy where direct attributes defined\n// in Override will override attributes of the same name in Base, while any\n// blocks defined in Override will hide all blocks of the same type in Base.\n//\n// This cannot possibly \"do the right thing\" in all cases, because we don't\n// have enough information about user intent. However, this behavior is intended\n// to be reasonable for simple overriding use-cases.\ntype mergeBody struct {\n\tBase     hcl.Body\n\tOverride hcl.Body\n}\n\nvar _ hcl.Body = mergeBody{}\n\nfunc (b mergeBody) Content(schema *hcl.BodySchema) (*hcl.BodyContent, hcl.Diagnostics) {\n\tvar diags hcl.Diagnostics\n\tbaseSchema := schemaWithDynamic(schema)\n\toverrideSchema := schemaWithDynamic(schemaForOverrides(schema))\n\n\tbaseContent, _, cDiags := b.Base.PartialContent(baseSchema)\n\tdiags = append(diags, cDiags...)\n\toverrideContent, _, cDiags := b.Override.PartialContent(overrideSchema)\n\tdiags = append(diags, cDiags...)\n\n\tcontent := b.prepareContent(baseContent, overrideContent)\n\n\treturn content, diags\n}\n\nfunc (b mergeBody) PartialContent(schema *hcl.BodySchema) (*hcl.BodyContent, hcl.Body, hcl.Diagnostics) {\n\tvar diags hcl.Diagnostics\n\tbaseSchema := schemaWithDynamic(schema)\n\toverrideSchema := schemaWithDynamic(schemaForOverrides(schema))\n\n\tbaseContent, baseRemain, cDiags := b.Base.PartialContent(baseSchema)\n\tdiags = append(diags, cDiags...)\n\toverrideContent, overrideRemain, cDiags := b.Override.PartialContent(overrideSchema)\n\tdiags = append(diags, cDiags...)\n\n\tcontent := b.prepareContent(baseContent, overrideContent)\n\n\tremain := MergeBodies(baseRemain, overrideRemain)\n\n\treturn content, remain, diags\n}\n\nfunc (b mergeBody) prepareContent(base *hcl.BodyContent, override *hcl.BodyContent) *hcl.BodyContent {\n\tcontent := &hcl.BodyContent{\n\t\tAttributes: make(hcl.Attributes),\n\t}\n\n\t// For attributes we just assign from each map in turn and let the override\n\t// map clobber any matching entries from base.\n\tfor k, a := range base.Attributes {\n\t\tcontent.Attributes[k] = a\n\t}\n\tfor k, a := range override.Attributes {\n\t\tcontent.Attributes[k] = a\n\t}\n\n\t// Things are a little more interesting for blocks because they arrive\n\t// as a flat list. Our merging semantics call for us to suppress blocks\n\t// from base if at least one block of the same type appears in override.\n\t// We explicitly do not try to correlate and deeply merge nested blocks,\n\t// since we don't have enough context here to infer user intent.\n\n\toverriddenBlockTypes := make(map[string]bool)\n\tfor _, block := range override.Blocks {\n\t\tif block.Type == \"dynamic\" {\n\t\t\toverriddenBlockTypes[block.Labels[0]] = true\n\t\t\tcontinue\n\t\t}\n\t\toverriddenBlockTypes[block.Type] = true\n\t}\n\tfor _, block := range base.Blocks {\n\t\t// We skip over dynamic blocks whose type label is an overridden type\n\t\t// but note that below we do still leave them as dynamic blocks in\n\t\t// the result because expanding the dynamic blocks that are left is\n\t\t// done much later during the core graph walks, where we can safely\n\t\t// evaluate the expressions.\n\t\tif block.Type == \"dynamic\" && overriddenBlockTypes[block.Labels[0]] {\n\t\t\tcontinue\n\t\t}\n\t\tif overriddenBlockTypes[block.Type] {\n\t\t\tcontinue\n\t\t}\n\t\tcontent.Blocks = append(content.Blocks, block)\n\t}\n\tfor _, block := range override.Blocks {\n\t\tcontent.Blocks = append(content.Blocks, block)\n\t}\n\n\treturn content\n}\n\nfunc (b mergeBody) JustAttributes() (hcl.Attributes, hcl.Diagnostics) {\n\tvar diags hcl.Diagnostics\n\tret := make(hcl.Attributes)\n\n\tbaseAttrs, aDiags := b.Base.JustAttributes()\n\tdiags = append(diags, aDiags...)\n\toverrideAttrs, aDiags := b.Override.JustAttributes()\n\tdiags = append(diags, aDiags...)\n\n\tfor k, a := range baseAttrs {\n\t\tret[k] = a\n\t}\n\tfor k, a := range overrideAttrs {\n\t\tret[k] = a\n\t}\n\n\treturn ret, diags\n}\n\nfunc (b mergeBody) MissingItemRange() hcl.Range {\n\treturn b.Base.MissingItemRange()\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/configs/named_values.go",
    "content": "package configs\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/hashicorp/hcl2/ext/typeexpr\"\n\t\"github.com/hashicorp/hcl2/gohcl\"\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/hashicorp/hcl2/hcl/hclsyntax\"\n\t\"github.com/zclconf/go-cty/cty\"\n\t\"github.com/zclconf/go-cty/cty/convert\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n)\n\n// A consistent detail message for all \"not a valid identifier\" diagnostics.\nconst badIdentifierDetail = \"A name must start with a letter and may contain only letters, digits, underscores, and dashes.\"\n\n// Variable represents a \"variable\" block in a module or file.\ntype Variable struct {\n\tName        string\n\tDescription string\n\tDefault     cty.Value\n\tType        cty.Type\n\tParsingMode VariableParsingMode\n\n\tDescriptionSet bool\n\n\tDeclRange hcl.Range\n}\n\nfunc decodeVariableBlock(block *hcl.Block, override bool) (*Variable, hcl.Diagnostics) {\n\tv := &Variable{\n\t\tName:      block.Labels[0],\n\t\tDeclRange: block.DefRange,\n\t}\n\n\t// Unless we're building an override, we'll set some defaults\n\t// which we might override with attributes below. We leave these\n\t// as zero-value in the override case so we can recognize whether\n\t// or not they are set when we merge.\n\tif !override {\n\t\tv.Type = cty.DynamicPseudoType\n\t\tv.ParsingMode = VariableParseLiteral\n\t}\n\n\tcontent, diags := block.Body.Content(variableBlockSchema)\n\n\tif !hclsyntax.ValidIdentifier(v.Name) {\n\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Invalid variable name\",\n\t\t\tDetail:   badIdentifierDetail,\n\t\t\tSubject:  &block.LabelRanges[0],\n\t\t})\n\t}\n\n\t// Don't allow declaration of variables that would conflict with the\n\t// reserved attribute and block type names in a \"module\" block, since\n\t// these won't be usable for child modules.\n\tfor _, attr := range moduleBlockSchema.Attributes {\n\t\tif attr.Name == v.Name {\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Invalid variable name\",\n\t\t\t\tDetail:   fmt.Sprintf(\"The variable name %q is reserved due to its special meaning inside module blocks.\", attr.Name),\n\t\t\t\tSubject:  &block.LabelRanges[0],\n\t\t\t})\n\t\t}\n\t}\n\tfor _, blockS := range moduleBlockSchema.Blocks {\n\t\tif blockS.Type == v.Name {\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Invalid variable name\",\n\t\t\t\tDetail:   fmt.Sprintf(\"The variable name %q is reserved due to its special meaning inside module blocks.\", blockS.Type),\n\t\t\t\tSubject:  &block.LabelRanges[0],\n\t\t\t})\n\t\t}\n\t}\n\n\tif attr, exists := content.Attributes[\"description\"]; exists {\n\t\tvalDiags := gohcl.DecodeExpression(attr.Expr, nil, &v.Description)\n\t\tdiags = append(diags, valDiags...)\n\t\tv.DescriptionSet = true\n\t}\n\n\tif attr, exists := content.Attributes[\"type\"]; exists {\n\t\tty, parseMode, tyDiags := decodeVariableType(attr.Expr)\n\t\tdiags = append(diags, tyDiags...)\n\t\tv.Type = ty\n\t\tv.ParsingMode = parseMode\n\t}\n\n\tif attr, exists := content.Attributes[\"default\"]; exists {\n\t\tval, valDiags := attr.Expr.Value(nil)\n\t\tdiags = append(diags, valDiags...)\n\n\t\t// Convert the default to the expected type so we can catch invalid\n\t\t// defaults early and allow later code to assume validity.\n\t\t// Note that this depends on us having already processed any \"type\"\n\t\t// attribute above.\n\t\t// However, we can't do this if we're in an override file where\n\t\t// the type might not be set; we'll catch that during merge.\n\t\tif v.Type != cty.NilType {\n\t\t\tvar err error\n\t\t\tval, err = convert.Convert(val, v.Type)\n\t\t\tif err != nil {\n\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\tSummary:  \"Invalid default value for variable\",\n\t\t\t\t\tDetail:   fmt.Sprintf(\"This default value is not compatible with the variable's type constraint: %s.\", err),\n\t\t\t\t\tSubject:  attr.Expr.Range().Ptr(),\n\t\t\t\t})\n\t\t\t\tval = cty.DynamicVal\n\t\t\t}\n\t\t}\n\n\t\tv.Default = val\n\t}\n\n\treturn v, diags\n}\n\nfunc decodeVariableType(expr hcl.Expression) (cty.Type, VariableParsingMode, hcl.Diagnostics) {\n\tif exprIsNativeQuotedString(expr) {\n\t\t// Here we're accepting the pre-0.12 form of variable type argument where\n\t\t// the string values \"string\", \"list\" and \"map\" are accepted has a hint\n\t\t// about the type used primarily for deciding how to parse values\n\t\t// given on the command line and in environment variables.\n\t\t// Only the native syntax ends up in this codepath; we handle the\n\t\t// JSON syntax (which is, of course, quoted even in the new format)\n\t\t// in the normal codepath below.\n\t\tval, diags := expr.Value(nil)\n\t\tif diags.HasErrors() {\n\t\t\treturn cty.DynamicPseudoType, VariableParseHCL, diags\n\t\t}\n\t\tstr := val.AsString()\n\t\tswitch str {\n\t\tcase \"string\":\n\t\t\treturn cty.String, VariableParseLiteral, diags\n\t\tcase \"list\":\n\t\t\treturn cty.List(cty.DynamicPseudoType), VariableParseHCL, diags\n\t\tcase \"map\":\n\t\t\treturn cty.Map(cty.DynamicPseudoType), VariableParseHCL, diags\n\t\tdefault:\n\t\t\treturn cty.DynamicPseudoType, VariableParseHCL, hcl.Diagnostics{{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Invalid legacy variable type hint\",\n\t\t\t\tDetail:   `The legacy variable type hint form, using a quoted string, allows only the values \"string\", \"list\", and \"map\". To provide a full type expression, remove the surrounding quotes and give the type expression directly.`,\n\t\t\t\tSubject:  expr.Range().Ptr(),\n\t\t\t}}\n\t\t}\n\t}\n\n\t// First we'll deal with some shorthand forms that the HCL-level type\n\t// expression parser doesn't include. These both emulate pre-0.12 behavior\n\t// of allowing a list or map of any element type as long as all of the\n\t// elements are consistent. This is the same as list(any) or map(any).\n\tswitch hcl.ExprAsKeyword(expr) {\n\tcase \"list\":\n\t\treturn cty.List(cty.DynamicPseudoType), VariableParseHCL, nil\n\tcase \"map\":\n\t\treturn cty.Map(cty.DynamicPseudoType), VariableParseHCL, nil\n\t}\n\n\tty, diags := typeexpr.TypeConstraint(expr)\n\tif diags.HasErrors() {\n\t\treturn cty.DynamicPseudoType, VariableParseHCL, diags\n\t}\n\n\tswitch {\n\tcase ty.IsPrimitiveType():\n\t\t// Primitive types use literal parsing.\n\t\treturn ty, VariableParseLiteral, diags\n\tdefault:\n\t\t// Everything else uses HCL parsing\n\t\treturn ty, VariableParseHCL, diags\n\t}\n}\n\n// VariableParsingMode defines how values of a particular variable given by\n// text-only mechanisms (command line arguments and environment variables)\n// should be parsed to produce the final value.\ntype VariableParsingMode rune\n\n// VariableParseLiteral is a variable parsing mode that just takes the given\n// string directly as a cty.String value.\nconst VariableParseLiteral VariableParsingMode = 'L'\n\n// VariableParseHCL is a variable parsing mode that attempts to parse the given\n// string as an HCL expression and returns the result.\nconst VariableParseHCL VariableParsingMode = 'H'\n\n// Parse uses the receiving parsing mode to process the given variable value\n// string, returning the result along with any diagnostics.\n//\n// A VariableParsingMode does not know the expected type of the corresponding\n// variable, so it's the caller's responsibility to attempt to convert the\n// result to the appropriate type and return to the user any diagnostics that\n// conversion may produce.\n//\n// The given name is used to create a synthetic filename in case any diagnostics\n// must be generated about the given string value. This should be the name\n// of the root module variable whose value will be populated from the given\n// string.\n//\n// If the returned diagnostics has errors, the returned value may not be\n// valid.\nfunc (m VariableParsingMode) Parse(name, value string) (cty.Value, hcl.Diagnostics) {\n\tswitch m {\n\tcase VariableParseLiteral:\n\t\treturn cty.StringVal(value), nil\n\tcase VariableParseHCL:\n\t\tfakeFilename := fmt.Sprintf(\"<value for var.%s>\", name)\n\t\texpr, diags := hclsyntax.ParseExpression([]byte(value), fakeFilename, hcl.Pos{Line: 1, Column: 1})\n\t\tif diags.HasErrors() {\n\t\t\treturn cty.DynamicVal, diags\n\t\t}\n\t\tval, valDiags := expr.Value(nil)\n\t\tdiags = append(diags, valDiags...)\n\t\treturn val, diags\n\tdefault:\n\t\t// Should never happen\n\t\tpanic(fmt.Errorf(\"Parse called on invalid VariableParsingMode %#v\", m))\n\t}\n}\n\n// Output represents an \"output\" block in a module or file.\ntype Output struct {\n\tName        string\n\tDescription string\n\tExpr        hcl.Expression\n\tDependsOn   []hcl.Traversal\n\tSensitive   bool\n\n\tDescriptionSet bool\n\tSensitiveSet   bool\n\n\tDeclRange hcl.Range\n}\n\nfunc decodeOutputBlock(block *hcl.Block, override bool) (*Output, hcl.Diagnostics) {\n\to := &Output{\n\t\tName:      block.Labels[0],\n\t\tDeclRange: block.DefRange,\n\t}\n\n\tschema := outputBlockSchema\n\tif override {\n\t\tschema = schemaForOverrides(schema)\n\t}\n\n\tcontent, diags := block.Body.Content(schema)\n\n\tif !hclsyntax.ValidIdentifier(o.Name) {\n\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Invalid output name\",\n\t\t\tDetail:   badIdentifierDetail,\n\t\t\tSubject:  &block.LabelRanges[0],\n\t\t})\n\t}\n\n\tif attr, exists := content.Attributes[\"description\"]; exists {\n\t\tvalDiags := gohcl.DecodeExpression(attr.Expr, nil, &o.Description)\n\t\tdiags = append(diags, valDiags...)\n\t\to.DescriptionSet = true\n\t}\n\n\tif attr, exists := content.Attributes[\"value\"]; exists {\n\t\to.Expr = attr.Expr\n\t}\n\n\tif attr, exists := content.Attributes[\"sensitive\"]; exists {\n\t\tvalDiags := gohcl.DecodeExpression(attr.Expr, nil, &o.Sensitive)\n\t\tdiags = append(diags, valDiags...)\n\t\to.SensitiveSet = true\n\t}\n\n\tif attr, exists := content.Attributes[\"depends_on\"]; exists {\n\t\tdeps, depsDiags := decodeDependsOn(attr)\n\t\tdiags = append(diags, depsDiags...)\n\t\to.DependsOn = append(o.DependsOn, deps...)\n\t}\n\n\treturn o, diags\n}\n\n// Local represents a single entry from a \"locals\" block in a module or file.\n// The \"locals\" block itself is not represented, because it serves only to\n// provide context for us to interpret its contents.\ntype Local struct {\n\tName string\n\tExpr hcl.Expression\n\n\tDeclRange hcl.Range\n}\n\nfunc decodeLocalsBlock(block *hcl.Block) ([]*Local, hcl.Diagnostics) {\n\tattrs, diags := block.Body.JustAttributes()\n\tif len(attrs) == 0 {\n\t\treturn nil, diags\n\t}\n\n\tlocals := make([]*Local, 0, len(attrs))\n\tfor name, attr := range attrs {\n\t\tif !hclsyntax.ValidIdentifier(name) {\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Invalid local value name\",\n\t\t\t\tDetail:   badIdentifierDetail,\n\t\t\t\tSubject:  &attr.NameRange,\n\t\t\t})\n\t\t}\n\n\t\tlocals = append(locals, &Local{\n\t\t\tName:      name,\n\t\t\tExpr:      attr.Expr,\n\t\t\tDeclRange: attr.Range,\n\t\t})\n\t}\n\treturn locals, diags\n}\n\n// Addr returns the address of the local value declared by the receiver,\n// relative to its containing module.\nfunc (l *Local) Addr() addrs.LocalValue {\n\treturn addrs.LocalValue{\n\t\tName: l.Name,\n\t}\n}\n\nvar variableBlockSchema = &hcl.BodySchema{\n\tAttributes: []hcl.AttributeSchema{\n\t\t{\n\t\t\tName: \"description\",\n\t\t},\n\t\t{\n\t\t\tName: \"default\",\n\t\t},\n\t\t{\n\t\t\tName: \"type\",\n\t\t},\n\t},\n}\n\nvar outputBlockSchema = &hcl.BodySchema{\n\tAttributes: []hcl.AttributeSchema{\n\t\t{\n\t\t\tName: \"description\",\n\t\t},\n\t\t{\n\t\t\tName:     \"value\",\n\t\t\tRequired: true,\n\t\t},\n\t\t{\n\t\t\tName: \"depends_on\",\n\t\t},\n\t\t{\n\t\t\tName: \"sensitive\",\n\t\t},\n\t},\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/configs/parser.go",
    "content": "package configs\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/hashicorp/hcl2/hclparse\"\n\t\"github.com/spf13/afero\"\n)\n\n// Parser is the main interface to read configuration files and other related\n// files from disk.\n//\n// It retains a cache of all files that are loaded so that they can be used\n// to create source code snippets in diagnostics, etc.\ntype Parser struct {\n\tfs afero.Afero\n\tp  *hclparse.Parser\n}\n\n// NewParser creates and returns a new Parser that reads files from the given\n// filesystem. If a nil filesystem is passed then the system's \"real\" filesystem\n// will be used, via afero.OsFs.\nfunc NewParser(fs afero.Fs) *Parser {\n\tif fs == nil {\n\t\tfs = afero.OsFs{}\n\t}\n\n\treturn &Parser{\n\t\tfs: afero.Afero{Fs: fs},\n\t\tp:  hclparse.NewParser(),\n\t}\n}\n\n// LoadHCLFile is a low-level method that reads the file at the given path,\n// parses it, and returns the hcl.Body representing its root. In many cases\n// it is better to use one of the other Load*File methods on this type,\n// which additionally decode the root body in some way and return a higher-level\n// construct.\n//\n// If the file cannot be read at all -- e.g. because it does not exist -- then\n// this method will return a nil body and error diagnostics. In this case\n// callers may wish to ignore the provided error diagnostics and produce\n// a more context-sensitive error instead.\n//\n// The file will be parsed using the HCL native syntax unless the filename\n// ends with \".json\", in which case the HCL JSON syntax will be used.\nfunc (p *Parser) LoadHCLFile(path string) (hcl.Body, hcl.Diagnostics) {\n\tsrc, err := p.fs.ReadFile(path)\n\n\tif err != nil {\n\t\treturn nil, hcl.Diagnostics{\n\t\t\t{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Failed to read file\",\n\t\t\t\tDetail:   fmt.Sprintf(\"The file %q could not be read.\", path),\n\t\t\t},\n\t\t}\n\t}\n\n\tvar file *hcl.File\n\tvar diags hcl.Diagnostics\n\tswitch {\n\tcase strings.HasSuffix(path, \".json\"):\n\t\tfile, diags = p.p.ParseJSON(src, path)\n\tdefault:\n\t\tfile, diags = p.p.ParseHCL(src, path)\n\t}\n\n\t// If the returned file or body is nil, then we'll return a non-nil empty\n\t// body so we'll meet our contract that nil means an error reading the file.\n\tif file == nil || file.Body == nil {\n\t\treturn hcl.EmptyBody(), diags\n\t}\n\n\treturn file.Body, diags\n}\n\n// Sources returns a map of the cached source buffers for all files that\n// have been loaded through this parser, with source filenames (as requested\n// when each file was opened) as the keys.\nfunc (p *Parser) Sources() map[string][]byte {\n\treturn p.p.Sources()\n}\n\n// ForceFileSource artificially adds source code to the cache of file sources,\n// as if it had been loaded from the given filename.\n//\n// This should be used only in special situations where configuration is loaded\n// some other way. Most callers should load configuration via methods of\n// Parser, which will update the sources cache automatically.\nfunc (p *Parser) ForceFileSource(filename string, src []byte) {\n\t// We'll make a synthetic hcl.File here just so we can reuse the\n\t// existing cache.\n\tp.p.AddFile(filename, &hcl.File{\n\t\tBody:  hcl.EmptyBody(),\n\t\tBytes: src,\n\t})\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/configs/parser_config.go",
    "content": "package configs\n\nimport (\n\t\"github.com/hashicorp/hcl2/hcl\"\n)\n\n// LoadConfigFile reads the file at the given path and parses it as a config\n// file.\n//\n// If the file cannot be read -- for example, if it does not exist -- then\n// a nil *File will be returned along with error diagnostics. Callers may wish\n// to disregard the returned diagnostics in this case and instead generate\n// their own error message(s) with additional context.\n//\n// If the returned diagnostics has errors when a non-nil map is returned\n// then the map may be incomplete but should be valid enough for careful\n// static analysis.\n//\n// This method wraps LoadHCLFile, and so it inherits the syntax selection\n// behaviors documented for that method.\nfunc (p *Parser) LoadConfigFile(path string) (*File, hcl.Diagnostics) {\n\treturn p.loadConfigFile(path, false)\n}\n\n// LoadConfigFileOverride is the same as LoadConfigFile except that it relaxes\n// certain required attribute constraints in order to interpret the given\n// file as an overrides file.\nfunc (p *Parser) LoadConfigFileOverride(path string) (*File, hcl.Diagnostics) {\n\treturn p.loadConfigFile(path, true)\n}\n\nfunc (p *Parser) loadConfigFile(path string, override bool) (*File, hcl.Diagnostics) {\n\n\tbody, diags := p.LoadHCLFile(path)\n\tif body == nil {\n\t\treturn nil, diags\n\t}\n\n\tfile := &File{}\n\n\tvar reqDiags hcl.Diagnostics\n\tfile.CoreVersionConstraints, reqDiags = sniffCoreVersionRequirements(body)\n\tdiags = append(diags, reqDiags...)\n\n\tcontent, contentDiags := body.Content(configFileSchema)\n\tdiags = append(diags, contentDiags...)\n\n\tfor _, block := range content.Blocks {\n\t\tswitch block.Type {\n\n\t\tcase \"terraform\":\n\t\t\tcontent, contentDiags := block.Body.Content(terraformBlockSchema)\n\t\t\tdiags = append(diags, contentDiags...)\n\n\t\t\t// We ignore the \"terraform_version\" attribute here because\n\t\t\t// sniffCoreVersionRequirements already dealt with that above.\n\n\t\t\tfor _, innerBlock := range content.Blocks {\n\t\t\t\tswitch innerBlock.Type {\n\n\t\t\t\tcase \"backend\":\n\t\t\t\t\tbackendCfg, cfgDiags := decodeBackendBlock(innerBlock)\n\t\t\t\t\tdiags = append(diags, cfgDiags...)\n\t\t\t\t\tif backendCfg != nil {\n\t\t\t\t\t\tfile.Backends = append(file.Backends, backendCfg)\n\t\t\t\t\t}\n\n\t\t\t\tcase \"required_providers\":\n\t\t\t\t\treqs, reqsDiags := decodeRequiredProvidersBlock(innerBlock)\n\t\t\t\t\tdiags = append(diags, reqsDiags...)\n\t\t\t\t\tfile.ProviderRequirements = append(file.ProviderRequirements, reqs...)\n\n\t\t\t\tdefault:\n\t\t\t\t\t// Should never happen because the above cases should be exhaustive\n\t\t\t\t\t// for all block type names in our schema.\n\t\t\t\t\tcontinue\n\n\t\t\t\t}\n\t\t\t}\n\n\t\tcase \"provider\":\n\t\t\tcfg, cfgDiags := decodeProviderBlock(block)\n\t\t\tdiags = append(diags, cfgDiags...)\n\t\t\tif cfg != nil {\n\t\t\t\tfile.ProviderConfigs = append(file.ProviderConfigs, cfg)\n\t\t\t}\n\n\t\tcase \"variable\":\n\t\t\tcfg, cfgDiags := decodeVariableBlock(block, override)\n\t\t\tdiags = append(diags, cfgDiags...)\n\t\t\tif cfg != nil {\n\t\t\t\tfile.Variables = append(file.Variables, cfg)\n\t\t\t}\n\n\t\tcase \"locals\":\n\t\t\tdefs, defsDiags := decodeLocalsBlock(block)\n\t\t\tdiags = append(diags, defsDiags...)\n\t\t\tfile.Locals = append(file.Locals, defs...)\n\n\t\tcase \"output\":\n\t\t\tcfg, cfgDiags := decodeOutputBlock(block, override)\n\t\t\tdiags = append(diags, cfgDiags...)\n\t\t\tif cfg != nil {\n\t\t\t\tfile.Outputs = append(file.Outputs, cfg)\n\t\t\t}\n\n\t\tcase \"module\":\n\t\t\tcfg, cfgDiags := decodeModuleBlock(block, override)\n\t\t\tdiags = append(diags, cfgDiags...)\n\t\t\tif cfg != nil {\n\t\t\t\tfile.ModuleCalls = append(file.ModuleCalls, cfg)\n\t\t\t}\n\n\t\tcase \"resource\":\n\t\t\tcfg, cfgDiags := decodeResourceBlock(block)\n\t\t\tdiags = append(diags, cfgDiags...)\n\t\t\tif cfg != nil {\n\t\t\t\tfile.ManagedResources = append(file.ManagedResources, cfg)\n\t\t\t}\n\n\t\tcase \"data\":\n\t\t\tcfg, cfgDiags := decodeDataBlock(block)\n\t\t\tdiags = append(diags, cfgDiags...)\n\t\t\tif cfg != nil {\n\t\t\t\tfile.DataResources = append(file.DataResources, cfg)\n\t\t\t}\n\n\t\tdefault:\n\t\t\t// Should never happen because the above cases should be exhaustive\n\t\t\t// for all block type names in our schema.\n\t\t\tcontinue\n\n\t\t}\n\t}\n\n\treturn file, diags\n}\n\n// sniffCoreVersionRequirements does minimal parsing of the given body for\n// \"terraform\" blocks with \"required_version\" attributes, returning the\n// requirements found.\n//\n// This is intended to maximize the chance that we'll be able to read the\n// requirements (syntax errors notwithstanding) even if the config file contains\n// constructs that might've been added in future Terraform versions\n//\n// This is a \"best effort\" sort of method which will return constraints it is\n// able to find, but may return no constraints at all if the given body is\n// so invalid that it cannot be decoded at all.\nfunc sniffCoreVersionRequirements(body hcl.Body) ([]VersionConstraint, hcl.Diagnostics) {\n\trootContent, _, diags := body.PartialContent(configFileVersionSniffRootSchema)\n\n\tvar constraints []VersionConstraint\n\n\tfor _, block := range rootContent.Blocks {\n\t\tcontent, _, blockDiags := block.Body.PartialContent(configFileVersionSniffBlockSchema)\n\t\tdiags = append(diags, blockDiags...)\n\n\t\tattr, exists := content.Attributes[\"required_version\"]\n\t\tif !exists {\n\t\t\tcontinue\n\t\t}\n\n\t\tconstraint, constraintDiags := decodeVersionConstraint(attr)\n\t\tdiags = append(diags, constraintDiags...)\n\t\tif !constraintDiags.HasErrors() {\n\t\t\tconstraints = append(constraints, constraint)\n\t\t}\n\t}\n\n\treturn constraints, diags\n}\n\n// configFileSchema is the schema for the top-level of a config file. We use\n// the low-level HCL API for this level so we can easily deal with each\n// block type separately with its own decoding logic.\nvar configFileSchema = &hcl.BodySchema{\n\tBlocks: []hcl.BlockHeaderSchema{\n\t\t{\n\t\t\tType: \"terraform\",\n\t\t},\n\t\t{\n\t\t\tType:       \"provider\",\n\t\t\tLabelNames: []string{\"name\"},\n\t\t},\n\t\t{\n\t\t\tType:       \"variable\",\n\t\t\tLabelNames: []string{\"name\"},\n\t\t},\n\t\t{\n\t\t\tType: \"locals\",\n\t\t},\n\t\t{\n\t\t\tType:       \"output\",\n\t\t\tLabelNames: []string{\"name\"},\n\t\t},\n\t\t{\n\t\t\tType:       \"module\",\n\t\t\tLabelNames: []string{\"name\"},\n\t\t},\n\t\t{\n\t\t\tType:       \"resource\",\n\t\t\tLabelNames: []string{\"type\", \"name\"},\n\t\t},\n\t\t{\n\t\t\tType:       \"data\",\n\t\t\tLabelNames: []string{\"type\", \"name\"},\n\t\t},\n\t},\n}\n\n// terraformBlockSchema is the schema for a top-level \"terraform\" block in\n// a configuration file.\nvar terraformBlockSchema = &hcl.BodySchema{\n\tAttributes: []hcl.AttributeSchema{\n\t\t{\n\t\t\tName: \"required_version\",\n\t\t},\n\t},\n\tBlocks: []hcl.BlockHeaderSchema{\n\t\t{\n\t\t\tType:       \"backend\",\n\t\t\tLabelNames: []string{\"type\"},\n\t\t},\n\t\t{\n\t\t\tType: \"required_providers\",\n\t\t},\n\t},\n}\n\n// configFileVersionSniffRootSchema is a schema for sniffCoreVersionRequirements\nvar configFileVersionSniffRootSchema = &hcl.BodySchema{\n\tBlocks: []hcl.BlockHeaderSchema{\n\t\t{\n\t\t\tType: \"terraform\",\n\t\t},\n\t},\n}\n\n// configFileVersionSniffBlockSchema is a schema for sniffCoreVersionRequirements\nvar configFileVersionSniffBlockSchema = &hcl.BodySchema{\n\tAttributes: []hcl.AttributeSchema{\n\t\t{\n\t\t\tName: \"required_version\",\n\t\t},\n\t},\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/configs/parser_config_dir.go",
    "content": "package configs\n\nimport (\n\t\"fmt\"\n\t\"path/filepath\"\n\t\"strings\"\n\n\t\"github.com/hashicorp/hcl2/hcl\"\n)\n\n// LoadConfigDir reads the .tf and .tf.json files in the given directory\n// as config files (using LoadConfigFile) and then combines these files into\n// a single Module.\n//\n// If this method returns nil, that indicates that the given directory does not\n// exist at all or could not be opened for some reason. Callers may wish to\n// detect this case and ignore the returned diagnostics so that they can\n// produce a more context-aware error message in that case.\n//\n// If this method returns a non-nil module while error diagnostics are returned\n// then the module may be incomplete but can be used carefully for static\n// analysis.\n//\n// This file does not consider a directory with no files to be an error, and\n// will simply return an empty module in that case. Callers should first call\n// Parser.IsConfigDir if they wish to recognize that situation.\n//\n// .tf files are parsed using the HCL native syntax while .tf.json files are\n// parsed using the HCL JSON syntax.\nfunc (p *Parser) LoadConfigDir(path string) (*Module, hcl.Diagnostics) {\n\tprimaryPaths, overridePaths, diags := p.dirFiles(path)\n\tif diags.HasErrors() {\n\t\treturn nil, diags\n\t}\n\n\tprimary, fDiags := p.loadFiles(primaryPaths, false)\n\tdiags = append(diags, fDiags...)\n\toverride, fDiags := p.loadFiles(overridePaths, true)\n\tdiags = append(diags, fDiags...)\n\n\tmod, modDiags := NewModule(primary, override)\n\tdiags = append(diags, modDiags...)\n\n\tmod.SourceDir = path\n\n\treturn mod, diags\n}\n\n// ConfigDirFiles returns lists of the primary and override files configuration\n// files in the given directory.\n//\n// If the given directory does not exist or cannot be read, error diagnostics\n// are returned. If errors are returned, the resulting lists may be incomplete.\nfunc (p Parser) ConfigDirFiles(dir string) (primary, override []string, diags hcl.Diagnostics) {\n\treturn p.dirFiles(dir)\n}\n\n// IsConfigDir determines whether the given path refers to a directory that\n// exists and contains at least one Terraform config file (with a .tf or\n// .tf.json extension.)\nfunc (p *Parser) IsConfigDir(path string) bool {\n\tprimaryPaths, overridePaths, _ := p.dirFiles(path)\n\treturn (len(primaryPaths) + len(overridePaths)) > 0\n}\n\nfunc (p *Parser) loadFiles(paths []string, override bool) ([]*File, hcl.Diagnostics) {\n\tvar files []*File\n\tvar diags hcl.Diagnostics\n\n\tfor _, path := range paths {\n\t\tvar f *File\n\t\tvar fDiags hcl.Diagnostics\n\t\tif override {\n\t\t\tf, fDiags = p.LoadConfigFileOverride(path)\n\t\t} else {\n\t\t\tf, fDiags = p.LoadConfigFile(path)\n\t\t}\n\t\tdiags = append(diags, fDiags...)\n\t\tif f != nil {\n\t\t\tfiles = append(files, f)\n\t\t}\n\t}\n\n\treturn files, diags\n}\n\nfunc (p *Parser) dirFiles(dir string) (primary, override []string, diags hcl.Diagnostics) {\n\tinfos, err := p.fs.ReadDir(dir)\n\tif err != nil {\n\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Failed to read module directory\",\n\t\t\tDetail:   fmt.Sprintf(\"Module directory %s does not exist or cannot be read.\", dir),\n\t\t})\n\t\treturn\n\t}\n\n\tfor _, info := range infos {\n\t\tif info.IsDir() {\n\t\t\t// We only care about files\n\t\t\tcontinue\n\t\t}\n\n\t\tname := info.Name()\n\t\text := fileExt(name)\n\t\tif ext == \"\" || IsIgnoredFile(name) {\n\t\t\tcontinue\n\t\t}\n\n\t\tbaseName := name[:len(name)-len(ext)] // strip extension\n\t\tisOverride := baseName == \"override\" || strings.HasSuffix(baseName, \"_override\")\n\n\t\tfullPath := filepath.Join(dir, name)\n\t\tif isOverride {\n\t\t\toverride = append(override, fullPath)\n\t\t} else {\n\t\t\tprimary = append(primary, fullPath)\n\t\t}\n\t}\n\n\treturn\n}\n\n// fileExt returns the Terraform configuration extension of the given\n// path, or a blank string if it is not a recognized extension.\nfunc fileExt(path string) string {\n\tif strings.HasSuffix(path, \".tf\") {\n\t\treturn \".tf\"\n\t} else if strings.HasSuffix(path, \".tf.json\") {\n\t\treturn \".tf.json\"\n\t} else {\n\t\treturn \"\"\n\t}\n}\n\n// IsIgnoredFile returns true if the given filename (which must not have a\n// directory path ahead of it) should be ignored as e.g. an editor swap file.\nfunc IsIgnoredFile(name string) bool {\n\treturn strings.HasPrefix(name, \".\") || // Unix-like hidden files\n\t\tstrings.HasSuffix(name, \"~\") || // vim\n\t\tstrings.HasPrefix(name, \"#\") && strings.HasSuffix(name, \"#\") // emacs\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/configs/parser_values.go",
    "content": "package configs\n\nimport (\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// LoadValuesFile reads the file at the given path and parses it as a \"values\n// file\", which is an HCL config file whose top-level attributes are treated\n// as arbitrary key.value pairs.\n//\n// If the file cannot be read -- for example, if it does not exist -- then\n// a nil map will be returned along with error diagnostics. Callers may wish\n// to disregard the returned diagnostics in this case and instead generate\n// their own error message(s) with additional context.\n//\n// If the returned diagnostics has errors when a non-nil map is returned\n// then the map may be incomplete but should be valid enough for careful\n// static analysis.\n//\n// This method wraps LoadHCLFile, and so it inherits the syntax selection\n// behaviors documented for that method.\nfunc (p *Parser) LoadValuesFile(path string) (map[string]cty.Value, hcl.Diagnostics) {\n\tbody, diags := p.LoadHCLFile(path)\n\tif body == nil {\n\t\treturn nil, diags\n\t}\n\n\tvals := make(map[string]cty.Value)\n\tattrs, attrDiags := body.JustAttributes()\n\tdiags = append(diags, attrDiags...)\n\tif attrs == nil {\n\t\treturn vals, diags\n\t}\n\n\tfor name, attr := range attrs {\n\t\tval, valDiags := attr.Expr.Value(nil)\n\t\tdiags = append(diags, valDiags...)\n\t\tvals[name] = val\n\t}\n\n\treturn vals, diags\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/configs/provider.go",
    "content": "package configs\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/hashicorp/hcl2/gohcl\"\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/hashicorp/hcl2/hcl/hclsyntax\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n)\n\n// Provider represents a \"provider\" block in a module or file. A provider\n// block is a provider configuration, and there can be zero or more\n// configurations for each actual provider.\ntype Provider struct {\n\tName       string\n\tNameRange  hcl.Range\n\tAlias      string\n\tAliasRange *hcl.Range // nil if no alias set\n\n\tVersion VersionConstraint\n\n\tConfig hcl.Body\n\n\tDeclRange hcl.Range\n}\n\nfunc decodeProviderBlock(block *hcl.Block) (*Provider, hcl.Diagnostics) {\n\tcontent, config, diags := block.Body.PartialContent(providerBlockSchema)\n\n\tprovider := &Provider{\n\t\tName:      block.Labels[0],\n\t\tNameRange: block.LabelRanges[0],\n\t\tConfig:    config,\n\t\tDeclRange: block.DefRange,\n\t}\n\n\tif attr, exists := content.Attributes[\"alias\"]; exists {\n\t\tvalDiags := gohcl.DecodeExpression(attr.Expr, nil, &provider.Alias)\n\t\tdiags = append(diags, valDiags...)\n\t\tprovider.AliasRange = attr.Expr.Range().Ptr()\n\n\t\tif !hclsyntax.ValidIdentifier(provider.Alias) {\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Invalid provider configuration alias\",\n\t\t\t\tDetail:   fmt.Sprintf(\"An alias must be a valid name. %s\", badIdentifierDetail),\n\t\t\t})\n\t\t}\n\t}\n\n\tif attr, exists := content.Attributes[\"version\"]; exists {\n\t\tvar versionDiags hcl.Diagnostics\n\t\tprovider.Version, versionDiags = decodeVersionConstraint(attr)\n\t\tdiags = append(diags, versionDiags...)\n\t}\n\n\t// Reserved attribute names\n\tfor _, name := range []string{\"count\", \"depends_on\", \"for_each\", \"source\"} {\n\t\tif attr, exists := content.Attributes[name]; exists {\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Reserved argument name in provider block\",\n\t\t\t\tDetail:   fmt.Sprintf(\"The provider argument name %q is reserved for use by Terraform in a future version.\", name),\n\t\t\t\tSubject:  &attr.NameRange,\n\t\t\t})\n\t\t}\n\t}\n\n\t// Reserved block types (all of them)\n\tfor _, block := range content.Blocks {\n\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Reserved block type name in provider block\",\n\t\t\tDetail:   fmt.Sprintf(\"The block type name %q is reserved for use by Terraform in a future version.\", block.Type),\n\t\t\tSubject:  &block.TypeRange,\n\t\t})\n\t}\n\n\treturn provider, diags\n}\n\n// Addr returns the address of the receiving provider configuration, relative\n// to its containing module.\nfunc (p *Provider) Addr() addrs.ProviderConfig {\n\treturn addrs.ProviderConfig{\n\t\tType:  p.Name,\n\t\tAlias: p.Alias,\n\t}\n}\n\nfunc (p *Provider) moduleUniqueKey() string {\n\tif p.Alias != \"\" {\n\t\treturn fmt.Sprintf(\"%s.%s\", p.Name, p.Alias)\n\t}\n\treturn p.Name\n}\n\n// ProviderRequirement represents a declaration of a dependency on a particular\n// provider version without actually configuring that provider. This is used in\n// child modules that expect a provider to be passed in from their parent.\ntype ProviderRequirement struct {\n\tName        string\n\tRequirement VersionConstraint\n}\n\nfunc decodeRequiredProvidersBlock(block *hcl.Block) ([]*ProviderRequirement, hcl.Diagnostics) {\n\tattrs, diags := block.Body.JustAttributes()\n\tvar reqs []*ProviderRequirement\n\tfor name, attr := range attrs {\n\t\treq, reqDiags := decodeVersionConstraint(attr)\n\t\tdiags = append(diags, reqDiags...)\n\t\tif !diags.HasErrors() {\n\t\t\treqs = append(reqs, &ProviderRequirement{\n\t\t\t\tName:        name,\n\t\t\t\tRequirement: req,\n\t\t\t})\n\t\t}\n\t}\n\treturn reqs, diags\n}\n\nvar providerBlockSchema = &hcl.BodySchema{\n\tAttributes: []hcl.AttributeSchema{\n\t\t{\n\t\t\tName: \"alias\",\n\t\t},\n\t\t{\n\t\t\tName: \"version\",\n\t\t},\n\n\t\t// Attribute names reserved for future expansion.\n\t\t{Name: \"count\"},\n\t\t{Name: \"depends_on\"},\n\t\t{Name: \"for_each\"},\n\t\t{Name: \"source\"},\n\t},\n\tBlocks: []hcl.BlockHeaderSchema{\n\t\t// _All_ of these are reserved for future expansion.\n\t\t{Type: \"lifecycle\"},\n\t\t{Type: \"locals\"},\n\t},\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/configs/provisioner.go",
    "content": "package configs\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/hashicorp/hcl2/hcl\"\n)\n\n// Provisioner represents a \"provisioner\" block when used within a\n// \"resource\" block in a module or file.\ntype Provisioner struct {\n\tType       string\n\tConfig     hcl.Body\n\tConnection *Connection\n\tWhen       ProvisionerWhen\n\tOnFailure  ProvisionerOnFailure\n\n\tDeclRange hcl.Range\n\tTypeRange hcl.Range\n}\n\nfunc decodeProvisionerBlock(block *hcl.Block) (*Provisioner, hcl.Diagnostics) {\n\tpv := &Provisioner{\n\t\tType:      block.Labels[0],\n\t\tTypeRange: block.LabelRanges[0],\n\t\tDeclRange: block.DefRange,\n\t\tWhen:      ProvisionerWhenCreate,\n\t\tOnFailure: ProvisionerOnFailureFail,\n\t}\n\n\tcontent, config, diags := block.Body.PartialContent(provisionerBlockSchema)\n\tpv.Config = config\n\n\tif attr, exists := content.Attributes[\"when\"]; exists {\n\t\texpr, shimDiags := shimTraversalInString(attr.Expr, true)\n\t\tdiags = append(diags, shimDiags...)\n\n\t\tswitch hcl.ExprAsKeyword(expr) {\n\t\tcase \"create\":\n\t\t\tpv.When = ProvisionerWhenCreate\n\t\tcase \"destroy\":\n\t\t\tpv.When = ProvisionerWhenDestroy\n\t\tdefault:\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Invalid \\\"when\\\" keyword\",\n\t\t\t\tDetail:   \"The \\\"when\\\" argument requires one of the following keywords: create or destroy.\",\n\t\t\t\tSubject:  expr.Range().Ptr(),\n\t\t\t})\n\t\t}\n\t}\n\n\tif attr, exists := content.Attributes[\"on_failure\"]; exists {\n\t\texpr, shimDiags := shimTraversalInString(attr.Expr, true)\n\t\tdiags = append(diags, shimDiags...)\n\n\t\tswitch hcl.ExprAsKeyword(expr) {\n\t\tcase \"continue\":\n\t\t\tpv.OnFailure = ProvisionerOnFailureContinue\n\t\tcase \"fail\":\n\t\t\tpv.OnFailure = ProvisionerOnFailureFail\n\t\tdefault:\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Invalid \\\"on_failure\\\" keyword\",\n\t\t\t\tDetail:   \"The \\\"on_failure\\\" argument requires one of the following keywords: continue or fail.\",\n\t\t\t\tSubject:  attr.Expr.Range().Ptr(),\n\t\t\t})\n\t\t}\n\t}\n\n\tvar seenConnection *hcl.Block\n\tfor _, block := range content.Blocks {\n\t\tswitch block.Type {\n\n\t\tcase \"connection\":\n\t\t\tif seenConnection != nil {\n\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\tSummary:  \"Duplicate connection block\",\n\t\t\t\t\tDetail:   fmt.Sprintf(\"This provisioner already has a connection block at %s.\", seenConnection.DefRange),\n\t\t\t\t\tSubject:  &block.DefRange,\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tseenConnection = block\n\n\t\t\t//conn, connDiags := decodeConnectionBlock(block)\n\t\t\t//diags = append(diags, connDiags...)\n\t\t\tpv.Connection = &Connection{\n\t\t\t\tConfig:    block.Body,\n\t\t\t\tDeclRange: block.DefRange,\n\t\t\t}\n\n\t\tdefault:\n\t\t\t// Any other block types are ones we've reserved for future use,\n\t\t\t// so they get a generic message.\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Reserved block type name in provisioner block\",\n\t\t\t\tDetail:   fmt.Sprintf(\"The block type name %q is reserved for use by Terraform in a future version.\", block.Type),\n\t\t\t\tSubject:  &block.TypeRange,\n\t\t\t})\n\t\t}\n\t}\n\n\treturn pv, diags\n}\n\n// Connection represents a \"connection\" block when used within either a\n// \"resource\" or \"provisioner\" block in a module or file.\ntype Connection struct {\n\tConfig hcl.Body\n\n\tDeclRange hcl.Range\n}\n\n// ProvisionerWhen is an enum for valid values for when to run provisioners.\ntype ProvisionerWhen int\n\n//go:generate stringer -type ProvisionerWhen\n\nconst (\n\tProvisionerWhenInvalid ProvisionerWhen = iota\n\tProvisionerWhenCreate\n\tProvisionerWhenDestroy\n)\n\n// ProvisionerOnFailure is an enum for valid values for on_failure options\n// for provisioners.\ntype ProvisionerOnFailure int\n\n//go:generate stringer -type ProvisionerOnFailure\n\nconst (\n\tProvisionerOnFailureInvalid ProvisionerOnFailure = iota\n\tProvisionerOnFailureContinue\n\tProvisionerOnFailureFail\n)\n\nvar provisionerBlockSchema = &hcl.BodySchema{\n\tAttributes: []hcl.AttributeSchema{\n\t\t{Name: \"when\"},\n\t\t{Name: \"on_failure\"},\n\t},\n\tBlocks: []hcl.BlockHeaderSchema{\n\t\t{Type: \"connection\"},\n\t\t{Type: \"lifecycle\"}, // reserved for future use\n\t},\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/configs/provisioneronfailure_string.go",
    "content": "// Code generated by \"stringer -type ProvisionerOnFailure\"; DO NOT EDIT.\n\npackage configs\n\nimport \"strconv\"\n\nfunc _() {\n\t// An \"invalid array index\" compiler error signifies that the constant values have changed.\n\t// Re-run the stringer command to generate them again.\n\tvar x [1]struct{}\n\t_ = x[ProvisionerOnFailureInvalid-0]\n\t_ = x[ProvisionerOnFailureContinue-1]\n\t_ = x[ProvisionerOnFailureFail-2]\n}\n\nconst _ProvisionerOnFailure_name = \"ProvisionerOnFailureInvalidProvisionerOnFailureContinueProvisionerOnFailureFail\"\n\nvar _ProvisionerOnFailure_index = [...]uint8{0, 27, 55, 79}\n\nfunc (i ProvisionerOnFailure) String() string {\n\tif i < 0 || i >= ProvisionerOnFailure(len(_ProvisionerOnFailure_index)-1) {\n\t\treturn \"ProvisionerOnFailure(\" + strconv.FormatInt(int64(i), 10) + \")\"\n\t}\n\treturn _ProvisionerOnFailure_name[_ProvisionerOnFailure_index[i]:_ProvisionerOnFailure_index[i+1]]\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/configs/provisionerwhen_string.go",
    "content": "// Code generated by \"stringer -type ProvisionerWhen\"; DO NOT EDIT.\n\npackage configs\n\nimport \"strconv\"\n\nfunc _() {\n\t// An \"invalid array index\" compiler error signifies that the constant values have changed.\n\t// Re-run the stringer command to generate them again.\n\tvar x [1]struct{}\n\t_ = x[ProvisionerWhenInvalid-0]\n\t_ = x[ProvisionerWhenCreate-1]\n\t_ = x[ProvisionerWhenDestroy-2]\n}\n\nconst _ProvisionerWhen_name = \"ProvisionerWhenInvalidProvisionerWhenCreateProvisionerWhenDestroy\"\n\nvar _ProvisionerWhen_index = [...]uint8{0, 22, 43, 65}\n\nfunc (i ProvisionerWhen) String() string {\n\tif i < 0 || i >= ProvisionerWhen(len(_ProvisionerWhen_index)-1) {\n\t\treturn \"ProvisionerWhen(\" + strconv.FormatInt(int64(i), 10) + \")\"\n\t}\n\treturn _ProvisionerWhen_name[_ProvisionerWhen_index[i]:_ProvisionerWhen_index[i+1]]\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/configs/resource.go",
    "content": "package configs\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/hashicorp/hcl2/gohcl\"\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/hashicorp/hcl2/hcl/hclsyntax\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n)\n\n// Resource represents a \"resource\" or \"data\" block in a module or file.\ntype Resource struct {\n\tMode    addrs.ResourceMode\n\tName    string\n\tType    string\n\tConfig  hcl.Body\n\tCount   hcl.Expression\n\tForEach hcl.Expression\n\n\tProviderConfigRef *ProviderConfigRef\n\n\tDependsOn []hcl.Traversal\n\n\t// Managed is populated only for Mode = addrs.ManagedResourceMode,\n\t// containing the additional fields that apply to managed resources.\n\t// For all other resource modes, this field is nil.\n\tManaged *ManagedResource\n\n\tDeclRange hcl.Range\n\tTypeRange hcl.Range\n}\n\n// ManagedResource represents a \"resource\" block in a module or file.\ntype ManagedResource struct {\n\tConnection   *Connection\n\tProvisioners []*Provisioner\n\n\tCreateBeforeDestroy bool\n\tPreventDestroy      bool\n\tIgnoreChanges       []hcl.Traversal\n\tIgnoreAllChanges    bool\n\n\tCreateBeforeDestroySet bool\n\tPreventDestroySet      bool\n}\n\nfunc (r *Resource) moduleUniqueKey() string {\n\treturn r.Addr().String()\n}\n\n// Addr returns a resource address for the receiver that is relative to the\n// resource's containing module.\nfunc (r *Resource) Addr() addrs.Resource {\n\treturn addrs.Resource{\n\t\tMode: r.Mode,\n\t\tType: r.Type,\n\t\tName: r.Name,\n\t}\n}\n\n// ProviderConfigAddr returns the address for the provider configuration\n// that should be used for this resource. This function implements the\n// default behavior of extracting the type from the resource type name if\n// an explicit \"provider\" argument was not provided.\nfunc (r *Resource) ProviderConfigAddr() addrs.ProviderConfig {\n\tif r.ProviderConfigRef == nil {\n\t\treturn r.Addr().DefaultProviderConfig()\n\t}\n\n\treturn addrs.ProviderConfig{\n\t\tType:  r.ProviderConfigRef.Name,\n\t\tAlias: r.ProviderConfigRef.Alias,\n\t}\n}\n\nfunc decodeResourceBlock(block *hcl.Block) (*Resource, hcl.Diagnostics) {\n\tr := &Resource{\n\t\tMode:      addrs.ManagedResourceMode,\n\t\tType:      block.Labels[0],\n\t\tName:      block.Labels[1],\n\t\tDeclRange: block.DefRange,\n\t\tTypeRange: block.LabelRanges[0],\n\t\tManaged:   &ManagedResource{},\n\t}\n\n\tcontent, remain, diags := block.Body.PartialContent(resourceBlockSchema)\n\tr.Config = remain\n\n\tif !hclsyntax.ValidIdentifier(r.Type) {\n\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Invalid resource type name\",\n\t\t\tDetail:   badIdentifierDetail,\n\t\t\tSubject:  &block.LabelRanges[0],\n\t\t})\n\t}\n\tif !hclsyntax.ValidIdentifier(r.Name) {\n\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Invalid resource name\",\n\t\t\tDetail:   badIdentifierDetail,\n\t\t\tSubject:  &block.LabelRanges[1],\n\t\t})\n\t}\n\n\tif attr, exists := content.Attributes[\"count\"]; exists {\n\t\tr.Count = attr.Expr\n\t}\n\n\tif attr, exists := content.Attributes[\"for_each\"]; exists {\n\t\tr.ForEach = attr.Expr\n\t\t// We currently parse this, but don't yet do anything with it.\n\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Reserved argument name in resource block\",\n\t\t\tDetail:   fmt.Sprintf(\"The name %q is reserved for use in a future version of Terraform.\", attr.Name),\n\t\t\tSubject:  &attr.NameRange,\n\t\t})\n\t}\n\n\tif attr, exists := content.Attributes[\"provider\"]; exists {\n\t\tvar providerDiags hcl.Diagnostics\n\t\tr.ProviderConfigRef, providerDiags = decodeProviderConfigRef(attr.Expr, \"provider\")\n\t\tdiags = append(diags, providerDiags...)\n\t}\n\n\tif attr, exists := content.Attributes[\"depends_on\"]; exists {\n\t\tdeps, depsDiags := decodeDependsOn(attr)\n\t\tdiags = append(diags, depsDiags...)\n\t\tr.DependsOn = append(r.DependsOn, deps...)\n\t}\n\n\tvar seenLifecycle *hcl.Block\n\tvar seenConnection *hcl.Block\n\tfor _, block := range content.Blocks {\n\t\tswitch block.Type {\n\t\tcase \"lifecycle\":\n\t\t\tif seenLifecycle != nil {\n\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\tSummary:  \"Duplicate lifecycle block\",\n\t\t\t\t\tDetail:   fmt.Sprintf(\"This resource already has a lifecycle block at %s.\", seenLifecycle.DefRange),\n\t\t\t\t\tSubject:  &block.DefRange,\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tseenLifecycle = block\n\n\t\t\tlcContent, lcDiags := block.Body.Content(resourceLifecycleBlockSchema)\n\t\t\tdiags = append(diags, lcDiags...)\n\n\t\t\tif attr, exists := lcContent.Attributes[\"create_before_destroy\"]; exists {\n\t\t\t\tvalDiags := gohcl.DecodeExpression(attr.Expr, nil, &r.Managed.CreateBeforeDestroy)\n\t\t\t\tdiags = append(diags, valDiags...)\n\t\t\t\tr.Managed.CreateBeforeDestroySet = true\n\t\t\t}\n\n\t\t\tif attr, exists := lcContent.Attributes[\"prevent_destroy\"]; exists {\n\t\t\t\tvalDiags := gohcl.DecodeExpression(attr.Expr, nil, &r.Managed.PreventDestroy)\n\t\t\t\tdiags = append(diags, valDiags...)\n\t\t\t\tr.Managed.PreventDestroySet = true\n\t\t\t}\n\n\t\t\tif attr, exists := lcContent.Attributes[\"ignore_changes\"]; exists {\n\n\t\t\t\t// ignore_changes can either be a list of relative traversals\n\t\t\t\t// or it can be just the keyword \"all\" to ignore changes to this\n\t\t\t\t// resource entirely.\n\t\t\t\t//   ignore_changes = [ami, instance_type]\n\t\t\t\t//   ignore_changes = all\n\t\t\t\t// We also allow two legacy forms for compatibility with earlier\n\t\t\t\t// versions:\n\t\t\t\t//   ignore_changes = [\"ami\", \"instance_type\"]\n\t\t\t\t//   ignore_changes = [\"*\"]\n\n\t\t\t\tkw := hcl.ExprAsKeyword(attr.Expr)\n\n\t\t\t\tswitch {\n\t\t\t\tcase kw == \"all\":\n\t\t\t\t\tr.Managed.IgnoreAllChanges = true\n\t\t\t\tdefault:\n\t\t\t\t\texprs, listDiags := hcl.ExprList(attr.Expr)\n\t\t\t\t\tdiags = append(diags, listDiags...)\n\n\t\t\t\t\tvar ignoreAllRange hcl.Range\n\n\t\t\t\t\tfor _, expr := range exprs {\n\n\t\t\t\t\t\t// our expr might be the literal string \"*\", which\n\t\t\t\t\t\t// we accept as a deprecated way of saying \"all\".\n\t\t\t\t\t\tif shimIsIgnoreChangesStar(expr) {\n\t\t\t\t\t\t\tr.Managed.IgnoreAllChanges = true\n\t\t\t\t\t\t\tignoreAllRange = expr.Range()\n\t\t\t\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\t\t\t\tSeverity: hcl.DiagWarning,\n\t\t\t\t\t\t\t\tSummary:  \"Deprecated ignore_changes wildcard\",\n\t\t\t\t\t\t\t\tDetail:   \"The [\\\"*\\\"] form of ignore_changes wildcard is deprecated. Use \\\"ignore_changes = all\\\" to ignore changes to all attributes.\",\n\t\t\t\t\t\t\t\tSubject:  attr.Expr.Range().Ptr(),\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\texpr, shimDiags := shimTraversalInString(expr, false)\n\t\t\t\t\t\tdiags = append(diags, shimDiags...)\n\n\t\t\t\t\t\ttraversal, travDiags := hcl.RelTraversalForExpr(expr)\n\t\t\t\t\t\tdiags = append(diags, travDiags...)\n\t\t\t\t\t\tif len(traversal) != 0 {\n\t\t\t\t\t\t\tr.Managed.IgnoreChanges = append(r.Managed.IgnoreChanges, traversal)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif r.Managed.IgnoreAllChanges && len(r.Managed.IgnoreChanges) != 0 {\n\t\t\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\t\t\tSummary:  \"Invalid ignore_changes ruleset\",\n\t\t\t\t\t\t\tDetail:   \"Cannot mix wildcard string \\\"*\\\" with non-wildcard references.\",\n\t\t\t\t\t\t\tSubject:  &ignoreAllRange,\n\t\t\t\t\t\t\tContext:  attr.Expr.Range().Ptr(),\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\tcase \"connection\":\n\t\t\tif seenConnection != nil {\n\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\tSummary:  \"Duplicate connection block\",\n\t\t\t\t\tDetail:   fmt.Sprintf(\"This resource already has a connection block at %s.\", seenConnection.DefRange),\n\t\t\t\t\tSubject:  &block.DefRange,\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tseenConnection = block\n\n\t\t\tr.Managed.Connection = &Connection{\n\t\t\t\tConfig:    block.Body,\n\t\t\t\tDeclRange: block.DefRange,\n\t\t\t}\n\n\t\tcase \"provisioner\":\n\t\t\tpv, pvDiags := decodeProvisionerBlock(block)\n\t\t\tdiags = append(diags, pvDiags...)\n\t\t\tif pv != nil {\n\t\t\t\tr.Managed.Provisioners = append(r.Managed.Provisioners, pv)\n\t\t\t}\n\n\t\tdefault:\n\t\t\t// Any other block types are ones we've reserved for future use,\n\t\t\t// so they get a generic message.\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Reserved block type name in resource block\",\n\t\t\t\tDetail:   fmt.Sprintf(\"The block type name %q is reserved for use by Terraform in a future version.\", block.Type),\n\t\t\t\tSubject:  &block.TypeRange,\n\t\t\t})\n\t\t}\n\t}\n\n\treturn r, diags\n}\n\nfunc decodeDataBlock(block *hcl.Block) (*Resource, hcl.Diagnostics) {\n\tr := &Resource{\n\t\tMode:      addrs.DataResourceMode,\n\t\tType:      block.Labels[0],\n\t\tName:      block.Labels[1],\n\t\tDeclRange: block.DefRange,\n\t\tTypeRange: block.LabelRanges[0],\n\t}\n\n\tcontent, remain, diags := block.Body.PartialContent(dataBlockSchema)\n\tr.Config = remain\n\n\tif !hclsyntax.ValidIdentifier(r.Type) {\n\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Invalid data source name\",\n\t\t\tDetail:   badIdentifierDetail,\n\t\t\tSubject:  &block.LabelRanges[0],\n\t\t})\n\t}\n\tif !hclsyntax.ValidIdentifier(r.Name) {\n\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Invalid data resource name\",\n\t\t\tDetail:   badIdentifierDetail,\n\t\t\tSubject:  &block.LabelRanges[1],\n\t\t})\n\t}\n\n\tif attr, exists := content.Attributes[\"count\"]; exists {\n\t\tr.Count = attr.Expr\n\t}\n\n\tif attr, exists := content.Attributes[\"for_each\"]; exists {\n\t\tr.ForEach = attr.Expr\n\t\t// We currently parse this, but don't yet do anything with it.\n\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Reserved argument name in module block\",\n\t\t\tDetail:   fmt.Sprintf(\"The name %q is reserved for use in a future version of Terraform.\", attr.Name),\n\t\t\tSubject:  &attr.NameRange,\n\t\t})\n\t}\n\n\tif attr, exists := content.Attributes[\"provider\"]; exists {\n\t\tvar providerDiags hcl.Diagnostics\n\t\tr.ProviderConfigRef, providerDiags = decodeProviderConfigRef(attr.Expr, \"provider\")\n\t\tdiags = append(diags, providerDiags...)\n\t}\n\n\tif attr, exists := content.Attributes[\"depends_on\"]; exists {\n\t\tdeps, depsDiags := decodeDependsOn(attr)\n\t\tdiags = append(diags, depsDiags...)\n\t\tr.DependsOn = append(r.DependsOn, deps...)\n\t}\n\n\tfor _, block := range content.Blocks {\n\t\t// All of the block types we accept are just reserved for future use, but some get a specialized error message.\n\t\tswitch block.Type {\n\t\tcase \"lifecycle\":\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Unsupported lifecycle block\",\n\t\t\t\tDetail:   \"Data resources do not have lifecycle settings, so a lifecycle block is not allowed.\",\n\t\t\t\tSubject:  &block.DefRange,\n\t\t\t})\n\t\tdefault:\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Reserved block type name in data block\",\n\t\t\t\tDetail:   fmt.Sprintf(\"The block type name %q is reserved for use by Terraform in a future version.\", block.Type),\n\t\t\t\tSubject:  &block.TypeRange,\n\t\t\t})\n\t\t}\n\t}\n\n\treturn r, diags\n}\n\ntype ProviderConfigRef struct {\n\tName       string\n\tNameRange  hcl.Range\n\tAlias      string\n\tAliasRange *hcl.Range // nil if alias not set\n}\n\nfunc decodeProviderConfigRef(expr hcl.Expression, argName string) (*ProviderConfigRef, hcl.Diagnostics) {\n\tvar diags hcl.Diagnostics\n\n\tvar shimDiags hcl.Diagnostics\n\texpr, shimDiags = shimTraversalInString(expr, false)\n\tdiags = append(diags, shimDiags...)\n\n\ttraversal, travDiags := hcl.AbsTraversalForExpr(expr)\n\n\t// AbsTraversalForExpr produces only generic errors, so we'll discard\n\t// the errors given and produce our own with extra context. If we didn't\n\t// get any errors then we might still have warnings, though.\n\tif !travDiags.HasErrors() {\n\t\tdiags = append(diags, travDiags...)\n\t}\n\n\tif len(traversal) < 1 || len(traversal) > 2 {\n\t\t// A provider reference was given as a string literal in the legacy\n\t\t// configuration language and there are lots of examples out there\n\t\t// showing that usage, so we'll sniff for that situation here and\n\t\t// produce a specialized error message for it to help users find\n\t\t// the new correct form.\n\t\tif exprIsNativeQuotedString(expr) {\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Invalid provider configuration reference\",\n\t\t\t\tDetail:   \"A provider configuration reference must not be given in quotes.\",\n\t\t\t\tSubject:  expr.Range().Ptr(),\n\t\t\t})\n\t\t\treturn nil, diags\n\t\t}\n\n\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Invalid provider configuration reference\",\n\t\t\tDetail:   fmt.Sprintf(\"The %s argument requires a provider type name, optionally followed by a period and then a configuration alias.\", argName),\n\t\t\tSubject:  expr.Range().Ptr(),\n\t\t})\n\t\treturn nil, diags\n\t}\n\n\tret := &ProviderConfigRef{\n\t\tName:      traversal.RootName(),\n\t\tNameRange: traversal[0].SourceRange(),\n\t}\n\n\tif len(traversal) > 1 {\n\t\taliasStep, ok := traversal[1].(hcl.TraverseAttr)\n\t\tif !ok {\n\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Invalid provider configuration reference\",\n\t\t\t\tDetail:   \"Provider name must either stand alone or be followed by a period and then a configuration alias.\",\n\t\t\t\tSubject:  traversal[1].SourceRange().Ptr(),\n\t\t\t})\n\t\t\treturn ret, diags\n\t\t}\n\n\t\tret.Alias = aliasStep.Name\n\t\tret.AliasRange = aliasStep.SourceRange().Ptr()\n\t}\n\n\treturn ret, diags\n}\n\n// Addr returns the provider config address corresponding to the receiving\n// config reference.\n//\n// This is a trivial conversion, essentially just discarding the source\n// location information and keeping just the addressing information.\nfunc (r *ProviderConfigRef) Addr() addrs.ProviderConfig {\n\treturn addrs.ProviderConfig{\n\t\tType:  r.Name,\n\t\tAlias: r.Alias,\n\t}\n}\n\nfunc (r *ProviderConfigRef) String() string {\n\tif r == nil {\n\t\treturn \"<nil>\"\n\t}\n\tif r.Alias != \"\" {\n\t\treturn fmt.Sprintf(\"%s.%s\", r.Name, r.Alias)\n\t}\n\treturn r.Name\n}\n\nvar commonResourceAttributes = []hcl.AttributeSchema{\n\t{\n\t\tName: \"count\",\n\t},\n\t{\n\t\tName: \"for_each\",\n\t},\n\t{\n\t\tName: \"provider\",\n\t},\n\t{\n\t\tName: \"depends_on\",\n\t},\n}\n\nvar resourceBlockSchema = &hcl.BodySchema{\n\tAttributes: commonResourceAttributes,\n\tBlocks: []hcl.BlockHeaderSchema{\n\t\t{Type: \"locals\"}, // reserved for future use\n\t\t{Type: \"lifecycle\"},\n\t\t{Type: \"connection\"},\n\t\t{Type: \"provisioner\", LabelNames: []string{\"type\"}},\n\t},\n}\n\nvar dataBlockSchema = &hcl.BodySchema{\n\tAttributes: commonResourceAttributes,\n\tBlocks: []hcl.BlockHeaderSchema{\n\t\t{Type: \"lifecycle\"}, // reserved for future use\n\t\t{Type: \"locals\"},    // reserved for future use\n\t},\n}\n\nvar resourceLifecycleBlockSchema = &hcl.BodySchema{\n\tAttributes: []hcl.AttributeSchema{\n\t\t{\n\t\t\tName: \"create_before_destroy\",\n\t\t},\n\t\t{\n\t\t\tName: \"prevent_destroy\",\n\t\t},\n\t\t{\n\t\t\tName: \"ignore_changes\",\n\t\t},\n\t},\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/configs/synth_body.go",
    "content": "package configs\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/hashicorp/hcl2/hcl/hclsyntax\"\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// SynthBody produces a synthetic hcl.Body that behaves as if it had attributes\n// corresponding to the elements given in the values map.\n//\n// This is useful in situations where, for example, values provided on the\n// command line can override values given in configuration, using MergeBodies.\n//\n// The given filename is used in case any diagnostics are returned. Since\n// the created body is synthetic, it is likely that this will not be a \"real\"\n// filename. For example, if from a command line argument it could be\n// a representation of that argument's name, such as \"-var=...\".\nfunc SynthBody(filename string, values map[string]cty.Value) hcl.Body {\n\treturn synthBody{\n\t\tFilename: filename,\n\t\tValues:   values,\n\t}\n}\n\ntype synthBody struct {\n\tFilename string\n\tValues   map[string]cty.Value\n}\n\nfunc (b synthBody) Content(schema *hcl.BodySchema) (*hcl.BodyContent, hcl.Diagnostics) {\n\tcontent, remain, diags := b.PartialContent(schema)\n\tremainS := remain.(synthBody)\n\tfor name := range remainS.Values {\n\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Unsupported attribute\",\n\t\t\tDetail:   fmt.Sprintf(\"An attribute named %q is not expected here.\", name),\n\t\t\tSubject:  b.synthRange().Ptr(),\n\t\t})\n\t}\n\treturn content, diags\n}\n\nfunc (b synthBody) PartialContent(schema *hcl.BodySchema) (*hcl.BodyContent, hcl.Body, hcl.Diagnostics) {\n\tvar diags hcl.Diagnostics\n\tcontent := &hcl.BodyContent{\n\t\tAttributes:       make(hcl.Attributes),\n\t\tMissingItemRange: b.synthRange(),\n\t}\n\n\tremainValues := make(map[string]cty.Value)\n\tfor attrName, val := range b.Values {\n\t\tremainValues[attrName] = val\n\t}\n\n\tfor _, attrS := range schema.Attributes {\n\t\tdelete(remainValues, attrS.Name)\n\t\tval, defined := b.Values[attrS.Name]\n\t\tif !defined {\n\t\t\tif attrS.Required {\n\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\tSummary:  \"Missing required attribute\",\n\t\t\t\t\tDetail:   fmt.Sprintf(\"The attribute %q is required, but no definition was found.\", attrS.Name),\n\t\t\t\t\tSubject:  b.synthRange().Ptr(),\n\t\t\t\t})\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\tcontent.Attributes[attrS.Name] = b.synthAttribute(attrS.Name, val)\n\t}\n\n\t// We just ignore blocks altogether, because this body type never has\n\t// nested blocks.\n\n\tremain := synthBody{\n\t\tFilename: b.Filename,\n\t\tValues:   remainValues,\n\t}\n\n\treturn content, remain, diags\n}\n\nfunc (b synthBody) JustAttributes() (hcl.Attributes, hcl.Diagnostics) {\n\tret := make(hcl.Attributes)\n\tfor name, val := range b.Values {\n\t\tret[name] = b.synthAttribute(name, val)\n\t}\n\treturn ret, nil\n}\n\nfunc (b synthBody) MissingItemRange() hcl.Range {\n\treturn b.synthRange()\n}\n\nfunc (b synthBody) synthAttribute(name string, val cty.Value) *hcl.Attribute {\n\trng := b.synthRange()\n\treturn &hcl.Attribute{\n\t\tName: name,\n\t\tExpr: &hclsyntax.LiteralValueExpr{\n\t\t\tVal:      val,\n\t\t\tSrcRange: rng,\n\t\t},\n\t\tNameRange: rng,\n\t\tRange:     rng,\n\t}\n}\n\nfunc (b synthBody) synthRange() hcl.Range {\n\treturn hcl.Range{\n\t\tFilename: b.Filename,\n\t\tStart:    hcl.Pos{Line: 1, Column: 1},\n\t\tEnd:      hcl.Pos{Line: 1, Column: 1},\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/configs/util.go",
    "content": "package configs\n\nimport (\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/hashicorp/hcl2/hcl/hclsyntax\"\n)\n\n// exprIsNativeQuotedString determines whether the given expression looks like\n// it's a quoted string in the HCL native syntax.\n//\n// This should be used sparingly only for situations where our legacy HCL\n// decoding would've expected a keyword or reference in quotes but our new\n// decoding expects the keyword or reference to be provided directly as\n// an identifier-based expression.\nfunc exprIsNativeQuotedString(expr hcl.Expression) bool {\n\t_, ok := expr.(*hclsyntax.TemplateExpr)\n\treturn ok\n}\n\n// schemaForOverrides takes a *hcl.BodySchema and produces a new one that is\n// equivalent except that any required attributes are forced to not be required.\n//\n// This is useful for dealing with \"override\" config files, which are allowed\n// to omit things that they don't wish to override from the main configuration.\n//\n// The returned schema may have some pointers in common with the given schema,\n// so neither the given schema nor the returned schema should be modified after\n// using this function in order to avoid confusion.\n//\n// Overrides are rarely used, so it's recommended to just create the override\n// schema on the fly only when it's needed, rather than storing it in a global\n// variable as we tend to do for a primary schema.\nfunc schemaForOverrides(schema *hcl.BodySchema) *hcl.BodySchema {\n\tret := &hcl.BodySchema{\n\t\tAttributes: make([]hcl.AttributeSchema, len(schema.Attributes)),\n\t\tBlocks:     schema.Blocks,\n\t}\n\n\tfor i, attrS := range schema.Attributes {\n\t\tret.Attributes[i] = attrS\n\t\tret.Attributes[i].Required = false\n\t}\n\n\treturn ret\n}\n\n// schemaWithDynamic takes a *hcl.BodySchema and produces a new one that\n// is equivalent except that it accepts an additional block type \"dynamic\" with\n// a single label, used to recognize usage of the HCL dynamic block extension.\nfunc schemaWithDynamic(schema *hcl.BodySchema) *hcl.BodySchema {\n\tret := &hcl.BodySchema{\n\t\tAttributes: schema.Attributes,\n\t\tBlocks:     make([]hcl.BlockHeaderSchema, len(schema.Blocks), len(schema.Blocks)+1),\n\t}\n\n\tcopy(ret.Blocks, schema.Blocks)\n\tret.Blocks = append(ret.Blocks, hcl.BlockHeaderSchema{\n\t\tType:       \"dynamic\",\n\t\tLabelNames: []string{\"type\"},\n\t})\n\n\treturn ret\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/configs/variable_type_hint.go",
    "content": "package configs\n\n// VariableTypeHint is an enumeration used for the Variable.TypeHint field,\n// which is an incompletely-specified type for the variable which is used\n// as a hint for whether a value provided in an ambiguous context (on the\n// command line or in an environment variable) should be taken literally as a\n// string or parsed as an HCL expression to produce a data structure.\n//\n// The type hint is applied to runtime values as well, but since it does not\n// accurately describe a precise type it is not fully-sufficient to infer\n// the dynamic type of a value passed through a variable.\n//\n// These hints use inaccurate terminology for historical reasons. Full details\n// are in the documentation for each constant in this enumeration, but in\n// summary:\n//\n//     TypeHintString requires a primitive type\n//     TypeHintList requires a type that could be converted to a tuple\n//     TypeHintMap requires a type that could be converted to an object\ntype VariableTypeHint rune\n\n//go:generate stringer -type VariableTypeHint\n\n// TypeHintNone indicates the absense of a type hint. Values specified in\n// ambiguous contexts will be treated as literal strings, as if TypeHintString\n// were selected, but no runtime value checks will be applied. This is reasonable\n// type hint for a module that is never intended to be used at the top-level\n// of a configuration, since descendent modules never recieve values from\n// ambiguous contexts.\nconst TypeHintNone VariableTypeHint = 0\n\n// TypeHintString spec indicates that a value provided in an ambiguous context\n// should be treated as a literal string, and additionally requires that the\n// runtime value for the variable is of a primitive type (string, number, bool).\nconst TypeHintString VariableTypeHint = 'S'\n\n// TypeHintList indicates that a value provided in an ambiguous context should\n// be treated as an HCL expression, and additionally requires that the\n// runtime value for the variable is of an tuple, list, or set type.\nconst TypeHintList VariableTypeHint = 'L'\n\n// TypeHintMap indicates that a value provided in an ambiguous context should\n// be treated as an HCL expression, and additionally requires that the\n// runtime value for the variable is of an object or map type.\nconst TypeHintMap VariableTypeHint = 'M'\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/configs/variabletypehint_string.go",
    "content": "// Code generated by \"stringer -type VariableTypeHint\"; DO NOT EDIT.\n\npackage configs\n\nimport \"strconv\"\n\nfunc _() {\n\t// An \"invalid array index\" compiler error signifies that the constant values have changed.\n\t// Re-run the stringer command to generate them again.\n\tvar x [1]struct{}\n\t_ = x[TypeHintNone-0]\n\t_ = x[TypeHintString-83]\n\t_ = x[TypeHintList-76]\n\t_ = x[TypeHintMap-77]\n}\n\nconst (\n\t_VariableTypeHint_name_0 = \"TypeHintNone\"\n\t_VariableTypeHint_name_1 = \"TypeHintListTypeHintMap\"\n\t_VariableTypeHint_name_2 = \"TypeHintString\"\n)\n\nvar (\n\t_VariableTypeHint_index_1 = [...]uint8{0, 12, 23}\n)\n\nfunc (i VariableTypeHint) String() string {\n\tswitch {\n\tcase i == 0:\n\t\treturn _VariableTypeHint_name_0\n\tcase 76 <= i && i <= 77:\n\t\ti -= 76\n\t\treturn _VariableTypeHint_name_1[_VariableTypeHint_index_1[i]:_VariableTypeHint_index_1[i+1]]\n\tcase i == 83:\n\t\treturn _VariableTypeHint_name_2\n\tdefault:\n\t\treturn \"VariableTypeHint(\" + strconv.FormatInt(int64(i), 10) + \")\"\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/configs/version_constraint.go",
    "content": "package configs\n\nimport (\n\t\"fmt\"\n\n\tversion \"github.com/hashicorp/go-version\"\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/zclconf/go-cty/cty\"\n\t\"github.com/zclconf/go-cty/cty/convert\"\n)\n\n// VersionConstraint represents a version constraint on some resource\n// (e.g. Terraform Core, a provider, a module, ...) that carries with it\n// a source range so that a helpful diagnostic can be printed in the event\n// that a particular constraint does not match.\ntype VersionConstraint struct {\n\tRequired  version.Constraints\n\tDeclRange hcl.Range\n}\n\nfunc decodeVersionConstraint(attr *hcl.Attribute) (VersionConstraint, hcl.Diagnostics) {\n\tret := VersionConstraint{\n\t\tDeclRange: attr.Range,\n\t}\n\n\tval, diags := attr.Expr.Value(nil)\n\tif diags.HasErrors() {\n\t\treturn ret, diags\n\t}\n\tvar err error\n\tval, err = convert.Convert(val, cty.String)\n\tif err != nil {\n\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Invalid version constraint\",\n\t\t\tDetail:   fmt.Sprintf(\"A string value is required for %s.\", attr.Name),\n\t\t\tSubject:  attr.Expr.Range().Ptr(),\n\t\t})\n\t\treturn ret, diags\n\t}\n\n\tif val.IsNull() {\n\t\t// A null version constraint is strange, but we'll just treat it\n\t\t// like an empty constraint set.\n\t\treturn ret, diags\n\t}\n\n\tconstraintStr := val.AsString()\n\tconstraints, err := version.NewConstraint(constraintStr)\n\tif err != nil {\n\t\t// NewConstraint doesn't return user-friendly errors, so we'll just\n\t\t// ignore the provided error and produce our own generic one.\n\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Invalid version constraint\",\n\t\t\tDetail:   \"This string does not use correct version constraint syntax.\", // Not very actionable :(\n\t\t\tSubject:  attr.Expr.Range().Ptr(),\n\t\t})\n\t\treturn ret, diags\n\t}\n\n\tret.Required = constraints\n\treturn ret, diags\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/dag/dag.go",
    "content": "package dag\n\nimport (\n\t\"fmt\"\n\t\"sort\"\n\t\"strings\"\n\n\t\"github.com/hashicorp/terraform/tfdiags\"\n\n\t\"github.com/hashicorp/go-multierror\"\n)\n\n// AcyclicGraph is a specialization of Graph that cannot have cycles. With\n// this property, we get the property of sane graph traversal.\ntype AcyclicGraph struct {\n\tGraph\n}\n\n// WalkFunc is the callback used for walking the graph.\ntype WalkFunc func(Vertex) tfdiags.Diagnostics\n\n// DepthWalkFunc is a walk function that also receives the current depth of the\n// walk as an argument\ntype DepthWalkFunc func(Vertex, int) error\n\nfunc (g *AcyclicGraph) DirectedGraph() Grapher {\n\treturn g\n}\n\n// Returns a Set that includes every Vertex yielded by walking down from the\n// provided starting Vertex v.\nfunc (g *AcyclicGraph) Ancestors(v Vertex) (*Set, error) {\n\ts := new(Set)\n\tstart := AsVertexList(g.DownEdges(v))\n\tmemoFunc := func(v Vertex, d int) error {\n\t\ts.Add(v)\n\t\treturn nil\n\t}\n\n\tif err := g.DepthFirstWalk(start, memoFunc); err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn s, nil\n}\n\n// Returns a Set that includes every Vertex yielded by walking up from the\n// provided starting Vertex v.\nfunc (g *AcyclicGraph) Descendents(v Vertex) (*Set, error) {\n\ts := new(Set)\n\tstart := AsVertexList(g.UpEdges(v))\n\tmemoFunc := func(v Vertex, d int) error {\n\t\ts.Add(v)\n\t\treturn nil\n\t}\n\n\tif err := g.ReverseDepthFirstWalk(start, memoFunc); err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn s, nil\n}\n\n// Root returns the root of the DAG, or an error.\n//\n// Complexity: O(V)\nfunc (g *AcyclicGraph) Root() (Vertex, error) {\n\troots := make([]Vertex, 0, 1)\n\tfor _, v := range g.Vertices() {\n\t\tif g.UpEdges(v).Len() == 0 {\n\t\t\troots = append(roots, v)\n\t\t}\n\t}\n\n\tif len(roots) > 1 {\n\t\t// TODO(mitchellh): make this error message a lot better\n\t\treturn nil, fmt.Errorf(\"multiple roots: %#v\", roots)\n\t}\n\n\tif len(roots) == 0 {\n\t\treturn nil, fmt.Errorf(\"no roots found\")\n\t}\n\n\treturn roots[0], nil\n}\n\n// TransitiveReduction performs the transitive reduction of graph g in place.\n// The transitive reduction of a graph is a graph with as few edges as\n// possible with the same reachability as the original graph. This means\n// that if there are three nodes A => B => C, and A connects to both\n// B and C, and B connects to C, then the transitive reduction is the\n// same graph with only a single edge between A and B, and a single edge\n// between B and C.\n//\n// The graph must be valid for this operation to behave properly. If\n// Validate() returns an error, the behavior is undefined and the results\n// will likely be unexpected.\n//\n// Complexity: O(V(V+E)), or asymptotically O(VE)\nfunc (g *AcyclicGraph) TransitiveReduction() {\n\t// For each vertex u in graph g, do a DFS starting from each vertex\n\t// v such that the edge (u,v) exists (v is a direct descendant of u).\n\t//\n\t// For each v-prime reachable from v, remove the edge (u, v-prime).\n\tdefer g.debug.BeginOperation(\"TransitiveReduction\", \"\").End(\"\")\n\n\tfor _, u := range g.Vertices() {\n\t\tuTargets := g.DownEdges(u)\n\t\tvs := AsVertexList(g.DownEdges(u))\n\n\t\tg.depthFirstWalk(vs, false, func(v Vertex, d int) error {\n\t\t\tshared := uTargets.Intersection(g.DownEdges(v))\n\t\t\tfor _, vPrime := range AsVertexList(shared) {\n\t\t\t\tg.RemoveEdge(BasicEdge(u, vPrime))\n\t\t\t}\n\n\t\t\treturn nil\n\t\t})\n\t}\n}\n\n// Validate validates the DAG. A DAG is valid if it has a single root\n// with no cycles.\nfunc (g *AcyclicGraph) Validate() error {\n\tif _, err := g.Root(); err != nil {\n\t\treturn err\n\t}\n\n\t// Look for cycles of more than 1 component\n\tvar err error\n\tcycles := g.Cycles()\n\tif len(cycles) > 0 {\n\t\tfor _, cycle := range cycles {\n\t\t\tcycleStr := make([]string, len(cycle))\n\t\t\tfor j, vertex := range cycle {\n\t\t\t\tcycleStr[j] = VertexName(vertex)\n\t\t\t}\n\n\t\t\terr = multierror.Append(err, fmt.Errorf(\n\t\t\t\t\"Cycle: %s\", strings.Join(cycleStr, \", \")))\n\t\t}\n\t}\n\n\t// Look for cycles to self\n\tfor _, e := range g.Edges() {\n\t\tif e.Source() == e.Target() {\n\t\t\terr = multierror.Append(err, fmt.Errorf(\n\t\t\t\t\"Self reference: %s\", VertexName(e.Source())))\n\t\t}\n\t}\n\n\treturn err\n}\n\nfunc (g *AcyclicGraph) Cycles() [][]Vertex {\n\tvar cycles [][]Vertex\n\tfor _, cycle := range StronglyConnected(&g.Graph) {\n\t\tif len(cycle) > 1 {\n\t\t\tcycles = append(cycles, cycle)\n\t\t}\n\t}\n\treturn cycles\n}\n\n// Walk walks the graph, calling your callback as each node is visited.\n// This will walk nodes in parallel if it can. The resulting diagnostics\n// contains problems from all graphs visited, in no particular order.\nfunc (g *AcyclicGraph) Walk(cb WalkFunc) tfdiags.Diagnostics {\n\tdefer g.debug.BeginOperation(typeWalk, \"\").End(\"\")\n\n\tw := &Walker{Callback: cb, Reverse: true}\n\tw.Update(g)\n\treturn w.Wait()\n}\n\n// simple convenience helper for converting a dag.Set to a []Vertex\nfunc AsVertexList(s *Set) []Vertex {\n\trawList := s.List()\n\tvertexList := make([]Vertex, len(rawList))\n\tfor i, raw := range rawList {\n\t\tvertexList[i] = raw.(Vertex)\n\t}\n\treturn vertexList\n}\n\ntype vertexAtDepth struct {\n\tVertex Vertex\n\tDepth  int\n}\n\n// depthFirstWalk does a depth-first walk of the graph starting from\n// the vertices in start.\nfunc (g *AcyclicGraph) DepthFirstWalk(start []Vertex, f DepthWalkFunc) error {\n\treturn g.depthFirstWalk(start, true, f)\n}\n\n// This internal method provides the option of not sorting the vertices during\n// the walk, which we use for the Transitive reduction.\n// Some configurations can lead to fully-connected subgraphs, which makes our\n// transitive reduction algorithm O(n^3). This is still passable for the size\n// of our graphs, but the additional n^2 sort operations would make this\n// uncomputable in a reasonable amount of time.\nfunc (g *AcyclicGraph) depthFirstWalk(start []Vertex, sorted bool, f DepthWalkFunc) error {\n\tdefer g.debug.BeginOperation(typeDepthFirstWalk, \"\").End(\"\")\n\n\tseen := make(map[Vertex]struct{})\n\tfrontier := make([]*vertexAtDepth, len(start))\n\tfor i, v := range start {\n\t\tfrontier[i] = &vertexAtDepth{\n\t\t\tVertex: v,\n\t\t\tDepth:  0,\n\t\t}\n\t}\n\tfor len(frontier) > 0 {\n\t\t// Pop the current vertex\n\t\tn := len(frontier)\n\t\tcurrent := frontier[n-1]\n\t\tfrontier = frontier[:n-1]\n\n\t\t// Check if we've seen this already and return...\n\t\tif _, ok := seen[current.Vertex]; ok {\n\t\t\tcontinue\n\t\t}\n\t\tseen[current.Vertex] = struct{}{}\n\n\t\t// Visit the current node\n\t\tif err := f(current.Vertex, current.Depth); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// Visit targets of this in a consistent order.\n\t\ttargets := AsVertexList(g.DownEdges(current.Vertex))\n\n\t\tif sorted {\n\t\t\tsort.Sort(byVertexName(targets))\n\t\t}\n\n\t\tfor _, t := range targets {\n\t\t\tfrontier = append(frontier, &vertexAtDepth{\n\t\t\t\tVertex: t,\n\t\t\t\tDepth:  current.Depth + 1,\n\t\t\t})\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// reverseDepthFirstWalk does a depth-first walk _up_ the graph starting from\n// the vertices in start.\nfunc (g *AcyclicGraph) ReverseDepthFirstWalk(start []Vertex, f DepthWalkFunc) error {\n\tdefer g.debug.BeginOperation(typeReverseDepthFirstWalk, \"\").End(\"\")\n\n\tseen := make(map[Vertex]struct{})\n\tfrontier := make([]*vertexAtDepth, len(start))\n\tfor i, v := range start {\n\t\tfrontier[i] = &vertexAtDepth{\n\t\t\tVertex: v,\n\t\t\tDepth:  0,\n\t\t}\n\t}\n\tfor len(frontier) > 0 {\n\t\t// Pop the current vertex\n\t\tn := len(frontier)\n\t\tcurrent := frontier[n-1]\n\t\tfrontier = frontier[:n-1]\n\n\t\t// Check if we've seen this already and return...\n\t\tif _, ok := seen[current.Vertex]; ok {\n\t\t\tcontinue\n\t\t}\n\t\tseen[current.Vertex] = struct{}{}\n\n\t\t// Add next set of targets in a consistent order.\n\t\ttargets := AsVertexList(g.UpEdges(current.Vertex))\n\t\tsort.Sort(byVertexName(targets))\n\t\tfor _, t := range targets {\n\t\t\tfrontier = append(frontier, &vertexAtDepth{\n\t\t\t\tVertex: t,\n\t\t\t\tDepth:  current.Depth + 1,\n\t\t\t})\n\t\t}\n\n\t\t// Visit the current node\n\t\tif err := f(current.Vertex, current.Depth); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// byVertexName implements sort.Interface so a list of Vertices can be sorted\n// consistently by their VertexName\ntype byVertexName []Vertex\n\nfunc (b byVertexName) Len() int      { return len(b) }\nfunc (b byVertexName) Swap(i, j int) { b[i], b[j] = b[j], b[i] }\nfunc (b byVertexName) Less(i, j int) bool {\n\treturn VertexName(b[i]) < VertexName(b[j])\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/dag/dot.go",
    "content": "package dag\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"sort\"\n\t\"strings\"\n)\n\n// DotOpts are the options for generating a dot formatted Graph.\ntype DotOpts struct {\n\t// Allows some nodes to decide to only show themselves when the user has\n\t// requested the \"verbose\" graph.\n\tVerbose bool\n\n\t// Highlight Cycles\n\tDrawCycles bool\n\n\t// How many levels to expand modules as we draw\n\tMaxDepth int\n\n\t// use this to keep the cluster_ naming convention from the previous dot writer\n\tcluster bool\n}\n\n// GraphNodeDotter can be implemented by a node to cause it to be included\n// in the dot graph. The Dot method will be called which is expected to\n// return a representation of this node.\ntype GraphNodeDotter interface {\n\t// Dot is called to return the dot formatting for the node.\n\t// The first parameter is the title of the node.\n\t// The second parameter includes user-specified options that affect the dot\n\t// graph. See GraphDotOpts below for details.\n\tDotNode(string, *DotOpts) *DotNode\n}\n\n// DotNode provides a structure for Vertices to return in order to specify their\n// dot format.\ntype DotNode struct {\n\tName  string\n\tAttrs map[string]string\n}\n\n// Returns the DOT representation of this Graph.\nfunc (g *marshalGraph) Dot(opts *DotOpts) []byte {\n\tif opts == nil {\n\t\topts = &DotOpts{\n\t\t\tDrawCycles: true,\n\t\t\tMaxDepth:   -1,\n\t\t\tVerbose:    true,\n\t\t}\n\t}\n\n\tvar w indentWriter\n\tw.WriteString(\"digraph {\\n\")\n\tw.Indent()\n\n\t// some dot defaults\n\tw.WriteString(`compound = \"true\"` + \"\\n\")\n\tw.WriteString(`newrank = \"true\"` + \"\\n\")\n\n\t// the top level graph is written as the first subgraph\n\tw.WriteString(`subgraph \"root\" {` + \"\\n\")\n\tg.writeBody(opts, &w)\n\n\t// cluster isn't really used other than for naming purposes in some graphs\n\topts.cluster = opts.MaxDepth != 0\n\tmaxDepth := opts.MaxDepth\n\tif maxDepth == 0 {\n\t\tmaxDepth = -1\n\t}\n\n\tfor _, s := range g.Subgraphs {\n\t\tg.writeSubgraph(s, opts, maxDepth, &w)\n\t}\n\n\tw.Unindent()\n\tw.WriteString(\"}\\n\")\n\treturn w.Bytes()\n}\n\nfunc (v *marshalVertex) dot(g *marshalGraph, opts *DotOpts) []byte {\n\tvar buf bytes.Buffer\n\tgraphName := g.Name\n\tif graphName == \"\" {\n\t\tgraphName = \"root\"\n\t}\n\n\tname := v.Name\n\tattrs := v.Attrs\n\tif v.graphNodeDotter != nil {\n\t\tnode := v.graphNodeDotter.DotNode(name, opts)\n\t\tif node == nil {\n\t\t\treturn []byte{}\n\t\t}\n\n\t\tnewAttrs := make(map[string]string)\n\t\tfor k, v := range attrs {\n\t\t\tnewAttrs[k] = v\n\t\t}\n\t\tfor k, v := range node.Attrs {\n\t\t\tnewAttrs[k] = v\n\t\t}\n\n\t\tname = node.Name\n\t\tattrs = newAttrs\n\t}\n\n\tbuf.WriteString(fmt.Sprintf(`\"[%s] %s\"`, graphName, name))\n\twriteAttrs(&buf, attrs)\n\tbuf.WriteByte('\\n')\n\n\treturn buf.Bytes()\n}\n\nfunc (e *marshalEdge) dot(g *marshalGraph) string {\n\tvar buf bytes.Buffer\n\tgraphName := g.Name\n\tif graphName == \"\" {\n\t\tgraphName = \"root\"\n\t}\n\n\tsourceName := g.vertexByID(e.Source).Name\n\ttargetName := g.vertexByID(e.Target).Name\n\ts := fmt.Sprintf(`\"[%s] %s\" -> \"[%s] %s\"`, graphName, sourceName, graphName, targetName)\n\tbuf.WriteString(s)\n\twriteAttrs(&buf, e.Attrs)\n\n\treturn buf.String()\n}\n\nfunc cycleDot(e *marshalEdge, g *marshalGraph) string {\n\treturn e.dot(g) + ` [color = \"red\", penwidth = \"2.0\"]`\n}\n\n// Write the subgraph body. The is recursive, and the depth argument is used to\n// record the current depth of iteration.\nfunc (g *marshalGraph) writeSubgraph(sg *marshalGraph, opts *DotOpts, depth int, w *indentWriter) {\n\tif depth == 0 {\n\t\treturn\n\t}\n\tdepth--\n\n\tname := sg.Name\n\tif opts.cluster {\n\t\t// we prefix with cluster_ to match the old dot output\n\t\tname = \"cluster_\" + name\n\t\tsg.Attrs[\"label\"] = sg.Name\n\t}\n\tw.WriteString(fmt.Sprintf(\"subgraph %q {\\n\", name))\n\tsg.writeBody(opts, w)\n\n\tfor _, sg := range sg.Subgraphs {\n\t\tg.writeSubgraph(sg, opts, depth, w)\n\t}\n}\n\nfunc (g *marshalGraph) writeBody(opts *DotOpts, w *indentWriter) {\n\tw.Indent()\n\n\tfor _, as := range attrStrings(g.Attrs) {\n\t\tw.WriteString(as + \"\\n\")\n\t}\n\n\t// list of Vertices that aren't to be included in the dot output\n\tskip := map[string]bool{}\n\n\tfor _, v := range g.Vertices {\n\t\tif v.graphNodeDotter == nil {\n\t\t\tskip[v.ID] = true\n\t\t\tcontinue\n\t\t}\n\n\t\tw.Write(v.dot(g, opts))\n\t}\n\n\tvar dotEdges []string\n\n\tif opts.DrawCycles {\n\t\tfor _, c := range g.Cycles {\n\t\t\tif len(c) < 2 {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tfor i, j := 0, 1; i < len(c); i, j = i+1, j+1 {\n\t\t\t\tif j >= len(c) {\n\t\t\t\t\tj = 0\n\t\t\t\t}\n\t\t\t\tsrc := c[i]\n\t\t\t\ttgt := c[j]\n\n\t\t\t\tif skip[src.ID] || skip[tgt.ID] {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\te := &marshalEdge{\n\t\t\t\t\tName:   fmt.Sprintf(\"%s|%s\", src.Name, tgt.Name),\n\t\t\t\t\tSource: src.ID,\n\t\t\t\t\tTarget: tgt.ID,\n\t\t\t\t\tAttrs:  make(map[string]string),\n\t\t\t\t}\n\n\t\t\t\tdotEdges = append(dotEdges, cycleDot(e, g))\n\t\t\t\tsrc = tgt\n\t\t\t}\n\t\t}\n\t}\n\n\tfor _, e := range g.Edges {\n\t\tdotEdges = append(dotEdges, e.dot(g))\n\t}\n\n\t// srot these again to match the old output\n\tsort.Strings(dotEdges)\n\n\tfor _, e := range dotEdges {\n\t\tw.WriteString(e + \"\\n\")\n\t}\n\n\tw.Unindent()\n\tw.WriteString(\"}\\n\")\n}\n\nfunc writeAttrs(buf *bytes.Buffer, attrs map[string]string) {\n\tif len(attrs) > 0 {\n\t\tbuf.WriteString(\" [\")\n\t\tbuf.WriteString(strings.Join(attrStrings(attrs), \", \"))\n\t\tbuf.WriteString(\"]\")\n\t}\n}\n\nfunc attrStrings(attrs map[string]string) []string {\n\tstrings := make([]string, 0, len(attrs))\n\tfor k, v := range attrs {\n\t\tstrings = append(strings, fmt.Sprintf(\"%s = %q\", k, v))\n\t}\n\tsort.Strings(strings)\n\treturn strings\n}\n\n// Provide a bytes.Buffer like structure, which will indent when starting a\n// newline.\ntype indentWriter struct {\n\tbytes.Buffer\n\tlevel int\n}\n\nfunc (w *indentWriter) indent() {\n\tnewline := []byte(\"\\n\")\n\tif !bytes.HasSuffix(w.Bytes(), newline) {\n\t\treturn\n\t}\n\tfor i := 0; i < w.level; i++ {\n\t\tw.Buffer.WriteString(\"\\t\")\n\t}\n}\n\n// Indent increases indentation by 1\nfunc (w *indentWriter) Indent() { w.level++ }\n\n// Unindent decreases indentation by 1\nfunc (w *indentWriter) Unindent() { w.level-- }\n\n// the following methods intercecpt the byte.Buffer writes and insert the\n// indentation when starting a new line.\nfunc (w *indentWriter) Write(b []byte) (int, error) {\n\tw.indent()\n\treturn w.Buffer.Write(b)\n}\n\nfunc (w *indentWriter) WriteString(s string) (int, error) {\n\tw.indent()\n\treturn w.Buffer.WriteString(s)\n}\nfunc (w *indentWriter) WriteByte(b byte) error {\n\tw.indent()\n\treturn w.Buffer.WriteByte(b)\n}\nfunc (w *indentWriter) WriteRune(r rune) (int, error) {\n\tw.indent()\n\treturn w.Buffer.WriteRune(r)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/dag/edge.go",
    "content": "package dag\n\nimport (\n\t\"fmt\"\n)\n\n// Edge represents an edge in the graph, with a source and target vertex.\ntype Edge interface {\n\tSource() Vertex\n\tTarget() Vertex\n\n\tHashable\n}\n\n// BasicEdge returns an Edge implementation that simply tracks the source\n// and target given as-is.\nfunc BasicEdge(source, target Vertex) Edge {\n\treturn &basicEdge{S: source, T: target}\n}\n\n// basicEdge is a basic implementation of Edge that has the source and\n// target vertex.\ntype basicEdge struct {\n\tS, T Vertex\n}\n\nfunc (e *basicEdge) Hashcode() interface{} {\n\treturn fmt.Sprintf(\"%p-%p\", e.S, e.T)\n}\n\nfunc (e *basicEdge) Source() Vertex {\n\treturn e.S\n}\n\nfunc (e *basicEdge) Target() Vertex {\n\treturn e.T\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/dag/graph.go",
    "content": "package dag\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"sort\"\n)\n\n// Graph is used to represent a dependency graph.\ntype Graph struct {\n\tvertices  *Set\n\tedges     *Set\n\tdownEdges map[interface{}]*Set\n\tupEdges   map[interface{}]*Set\n\n\t// JSON encoder for recording debug information\n\tdebug *encoder\n}\n\n// Subgrapher allows a Vertex to be a Graph itself, by returning a Grapher.\ntype Subgrapher interface {\n\tSubgraph() Grapher\n}\n\n// A Grapher is any type that returns a Grapher, mainly used to identify\n// dag.Graph and dag.AcyclicGraph.  In the case of Graph and AcyclicGraph, they\n// return themselves.\ntype Grapher interface {\n\tDirectedGraph() Grapher\n}\n\n// Vertex of the graph.\ntype Vertex interface{}\n\n// NamedVertex is an optional interface that can be implemented by Vertex\n// to give it a human-friendly name that is used for outputting the graph.\ntype NamedVertex interface {\n\tVertex\n\tName() string\n}\n\nfunc (g *Graph) DirectedGraph() Grapher {\n\treturn g\n}\n\n// Vertices returns the list of all the vertices in the graph.\nfunc (g *Graph) Vertices() []Vertex {\n\tlist := g.vertices.List()\n\tresult := make([]Vertex, len(list))\n\tfor i, v := range list {\n\t\tresult[i] = v.(Vertex)\n\t}\n\n\treturn result\n}\n\n// Edges returns the list of all the edges in the graph.\nfunc (g *Graph) Edges() []Edge {\n\tlist := g.edges.List()\n\tresult := make([]Edge, len(list))\n\tfor i, v := range list {\n\t\tresult[i] = v.(Edge)\n\t}\n\n\treturn result\n}\n\n// EdgesFrom returns the list of edges from the given source.\nfunc (g *Graph) EdgesFrom(v Vertex) []Edge {\n\tvar result []Edge\n\tfrom := hashcode(v)\n\tfor _, e := range g.Edges() {\n\t\tif hashcode(e.Source()) == from {\n\t\t\tresult = append(result, e)\n\t\t}\n\t}\n\n\treturn result\n}\n\n// EdgesTo returns the list of edges to the given target.\nfunc (g *Graph) EdgesTo(v Vertex) []Edge {\n\tvar result []Edge\n\tsearch := hashcode(v)\n\tfor _, e := range g.Edges() {\n\t\tif hashcode(e.Target()) == search {\n\t\t\tresult = append(result, e)\n\t\t}\n\t}\n\n\treturn result\n}\n\n// HasVertex checks if the given Vertex is present in the graph.\nfunc (g *Graph) HasVertex(v Vertex) bool {\n\treturn g.vertices.Include(v)\n}\n\n// HasEdge checks if the given Edge is present in the graph.\nfunc (g *Graph) HasEdge(e Edge) bool {\n\treturn g.edges.Include(e)\n}\n\n// Add adds a vertex to the graph. This is safe to call multiple time with\n// the same Vertex.\nfunc (g *Graph) Add(v Vertex) Vertex {\n\tg.init()\n\tg.vertices.Add(v)\n\tg.debug.Add(v)\n\treturn v\n}\n\n// Remove removes a vertex from the graph. This will also remove any\n// edges with this vertex as a source or target.\nfunc (g *Graph) Remove(v Vertex) Vertex {\n\t// Delete the vertex itself\n\tg.vertices.Delete(v)\n\tg.debug.Remove(v)\n\n\t// Delete the edges to non-existent things\n\tfor _, target := range g.DownEdges(v).List() {\n\t\tg.RemoveEdge(BasicEdge(v, target))\n\t}\n\tfor _, source := range g.UpEdges(v).List() {\n\t\tg.RemoveEdge(BasicEdge(source, v))\n\t}\n\n\treturn nil\n}\n\n// Replace replaces the original Vertex with replacement. If the original\n// does not exist within the graph, then false is returned. Otherwise, true\n// is returned.\nfunc (g *Graph) Replace(original, replacement Vertex) bool {\n\t// If we don't have the original, we can't do anything\n\tif !g.vertices.Include(original) {\n\t\treturn false\n\t}\n\n\tdefer g.debug.BeginOperation(\"Replace\", \"\").End(\"\")\n\n\t// If they're the same, then don't do anything\n\tif original == replacement {\n\t\treturn true\n\t}\n\n\t// Add our new vertex, then copy all the edges\n\tg.Add(replacement)\n\tfor _, target := range g.DownEdges(original).List() {\n\t\tg.Connect(BasicEdge(replacement, target))\n\t}\n\tfor _, source := range g.UpEdges(original).List() {\n\t\tg.Connect(BasicEdge(source, replacement))\n\t}\n\n\t// Remove our old vertex, which will also remove all the edges\n\tg.Remove(original)\n\n\treturn true\n}\n\n// RemoveEdge removes an edge from the graph.\nfunc (g *Graph) RemoveEdge(edge Edge) {\n\tg.init()\n\tg.debug.RemoveEdge(edge)\n\n\t// Delete the edge from the set\n\tg.edges.Delete(edge)\n\n\t// Delete the up/down edges\n\tif s, ok := g.downEdges[hashcode(edge.Source())]; ok {\n\t\ts.Delete(edge.Target())\n\t}\n\tif s, ok := g.upEdges[hashcode(edge.Target())]; ok {\n\t\ts.Delete(edge.Source())\n\t}\n}\n\n// DownEdges returns the outward edges from the source Vertex v.\nfunc (g *Graph) DownEdges(v Vertex) *Set {\n\tg.init()\n\treturn g.downEdges[hashcode(v)]\n}\n\n// UpEdges returns the inward edges to the destination Vertex v.\nfunc (g *Graph) UpEdges(v Vertex) *Set {\n\tg.init()\n\treturn g.upEdges[hashcode(v)]\n}\n\n// Connect adds an edge with the given source and target. This is safe to\n// call multiple times with the same value. Note that the same value is\n// verified through pointer equality of the vertices, not through the\n// value of the edge itself.\nfunc (g *Graph) Connect(edge Edge) {\n\tg.init()\n\tg.debug.Connect(edge)\n\n\tsource := edge.Source()\n\ttarget := edge.Target()\n\tsourceCode := hashcode(source)\n\ttargetCode := hashcode(target)\n\n\t// Do we have this already? If so, don't add it again.\n\tif s, ok := g.downEdges[sourceCode]; ok && s.Include(target) {\n\t\treturn\n\t}\n\n\t// Add the edge to the set\n\tg.edges.Add(edge)\n\n\t// Add the down edge\n\ts, ok := g.downEdges[sourceCode]\n\tif !ok {\n\t\ts = new(Set)\n\t\tg.downEdges[sourceCode] = s\n\t}\n\ts.Add(target)\n\n\t// Add the up edge\n\ts, ok = g.upEdges[targetCode]\n\tif !ok {\n\t\ts = new(Set)\n\t\tg.upEdges[targetCode] = s\n\t}\n\ts.Add(source)\n}\n\n// String outputs some human-friendly output for the graph structure.\nfunc (g *Graph) StringWithNodeTypes() string {\n\tvar buf bytes.Buffer\n\n\t// Build the list of node names and a mapping so that we can more\n\t// easily alphabetize the output to remain deterministic.\n\tvertices := g.Vertices()\n\tnames := make([]string, 0, len(vertices))\n\tmapping := make(map[string]Vertex, len(vertices))\n\tfor _, v := range vertices {\n\t\tname := VertexName(v)\n\t\tnames = append(names, name)\n\t\tmapping[name] = v\n\t}\n\tsort.Strings(names)\n\n\t// Write each node in order...\n\tfor _, name := range names {\n\t\tv := mapping[name]\n\t\ttargets := g.downEdges[hashcode(v)]\n\n\t\tbuf.WriteString(fmt.Sprintf(\"%s - %T\\n\", name, v))\n\n\t\t// Alphabetize dependencies\n\t\tdeps := make([]string, 0, targets.Len())\n\t\ttargetNodes := make(map[string]Vertex)\n\t\tfor _, target := range targets.List() {\n\t\t\tdep := VertexName(target)\n\t\t\tdeps = append(deps, dep)\n\t\t\ttargetNodes[dep] = target\n\t\t}\n\t\tsort.Strings(deps)\n\n\t\t// Write dependencies\n\t\tfor _, d := range deps {\n\t\t\tbuf.WriteString(fmt.Sprintf(\"  %s - %T\\n\", d, targetNodes[d]))\n\t\t}\n\t}\n\n\treturn buf.String()\n}\n\n// String outputs some human-friendly output for the graph structure.\nfunc (g *Graph) String() string {\n\tvar buf bytes.Buffer\n\n\t// Build the list of node names and a mapping so that we can more\n\t// easily alphabetize the output to remain deterministic.\n\tvertices := g.Vertices()\n\tnames := make([]string, 0, len(vertices))\n\tmapping := make(map[string]Vertex, len(vertices))\n\tfor _, v := range vertices {\n\t\tname := VertexName(v)\n\t\tnames = append(names, name)\n\t\tmapping[name] = v\n\t}\n\tsort.Strings(names)\n\n\t// Write each node in order...\n\tfor _, name := range names {\n\t\tv := mapping[name]\n\t\ttargets := g.downEdges[hashcode(v)]\n\n\t\tbuf.WriteString(fmt.Sprintf(\"%s\\n\", name))\n\n\t\t// Alphabetize dependencies\n\t\tdeps := make([]string, 0, targets.Len())\n\t\tfor _, target := range targets.List() {\n\t\t\tdeps = append(deps, VertexName(target))\n\t\t}\n\t\tsort.Strings(deps)\n\n\t\t// Write dependencies\n\t\tfor _, d := range deps {\n\t\t\tbuf.WriteString(fmt.Sprintf(\"  %s\\n\", d))\n\t\t}\n\t}\n\n\treturn buf.String()\n}\n\nfunc (g *Graph) init() {\n\tif g.vertices == nil {\n\t\tg.vertices = new(Set)\n\t}\n\tif g.edges == nil {\n\t\tg.edges = new(Set)\n\t}\n\tif g.downEdges == nil {\n\t\tg.downEdges = make(map[interface{}]*Set)\n\t}\n\tif g.upEdges == nil {\n\t\tg.upEdges = make(map[interface{}]*Set)\n\t}\n}\n\n// Dot returns a dot-formatted representation of the Graph.\nfunc (g *Graph) Dot(opts *DotOpts) []byte {\n\treturn newMarshalGraph(\"\", g).Dot(opts)\n}\n\n// MarshalJSON returns a JSON representation of the entire Graph.\nfunc (g *Graph) MarshalJSON() ([]byte, error) {\n\tdg := newMarshalGraph(\"root\", g)\n\treturn json.MarshalIndent(dg, \"\", \"  \")\n}\n\n// SetDebugWriter sets the io.Writer where the Graph will record debug\n// information. After this is set, the graph will immediately encode itself to\n// the stream, and continue to record all subsequent operations.\nfunc (g *Graph) SetDebugWriter(w io.Writer) {\n\tg.debug = &encoder{w: w}\n\tg.debug.Encode(newMarshalGraph(\"root\", g))\n}\n\n// DebugVertexInfo encodes arbitrary information about a vertex in the graph\n// debug logs.\nfunc (g *Graph) DebugVertexInfo(v Vertex, info string) {\n\tva := newVertexInfo(typeVertexInfo, v, info)\n\tg.debug.Encode(va)\n}\n\n// DebugEdgeInfo encodes arbitrary information about an edge in the graph debug\n// logs.\nfunc (g *Graph) DebugEdgeInfo(e Edge, info string) {\n\tea := newEdgeInfo(typeEdgeInfo, e, info)\n\tg.debug.Encode(ea)\n}\n\n// DebugVisitInfo records a visit to a Vertex during a walk operation.\nfunc (g *Graph) DebugVisitInfo(v Vertex, info string) {\n\tvi := newVertexInfo(typeVisitInfo, v, info)\n\tg.debug.Encode(vi)\n}\n\n// DebugOperation marks the start of a set of graph transformations in\n// the debug log, and returns a DebugOperationEnd func, which marks the end of\n// the operation in the log. Additional information can be added to the log via\n// the info parameter.\n//\n// The returned func's End method allows this method to be called from a single\n// defer statement:\n//     defer g.DebugOperationBegin(\"OpName\", \"operating\").End(\"\")\n//\n// The returned function must be called to properly close the logical operation\n// in the logs.\nfunc (g *Graph) DebugOperation(operation string, info string) DebugOperationEnd {\n\treturn g.debug.BeginOperation(operation, info)\n}\n\n// VertexName returns the name of a vertex.\nfunc VertexName(raw Vertex) string {\n\tswitch v := raw.(type) {\n\tcase NamedVertex:\n\t\treturn v.Name()\n\tcase fmt.Stringer:\n\t\treturn fmt.Sprintf(\"%s\", v)\n\tdefault:\n\t\treturn fmt.Sprintf(\"%v\", v)\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/dag/marshal.go",
    "content": "package dag\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"log\"\n\t\"reflect\"\n\t\"sort\"\n\t\"strconv\"\n\t\"sync\"\n)\n\nconst (\n\ttypeOperation             = \"Operation\"\n\ttypeTransform             = \"Transform\"\n\ttypeWalk                  = \"Walk\"\n\ttypeDepthFirstWalk        = \"DepthFirstWalk\"\n\ttypeReverseDepthFirstWalk = \"ReverseDepthFirstWalk\"\n\ttypeTransitiveReduction   = \"TransitiveReduction\"\n\ttypeEdgeInfo              = \"EdgeInfo\"\n\ttypeVertexInfo            = \"VertexInfo\"\n\ttypeVisitInfo             = \"VisitInfo\"\n)\n\n// the marshal* structs are for serialization of the graph data.\ntype marshalGraph struct {\n\t// Type is always \"Graph\", for identification as a top level object in the\n\t// JSON stream.\n\tType string\n\n\t// Each marshal structure requires a unique ID so that it can be referenced\n\t// by other structures.\n\tID string `json:\",omitempty\"`\n\n\t// Human readable name for this graph.\n\tName string `json:\",omitempty\"`\n\n\t// Arbitrary attributes that can be added to the output.\n\tAttrs map[string]string `json:\",omitempty\"`\n\n\t// List of graph vertices, sorted by ID.\n\tVertices []*marshalVertex `json:\",omitempty\"`\n\n\t// List of edges, sorted by Source ID.\n\tEdges []*marshalEdge `json:\",omitempty\"`\n\n\t// Any number of subgraphs. A subgraph itself is considered a vertex, and\n\t// may be referenced by either end of an edge.\n\tSubgraphs []*marshalGraph `json:\",omitempty\"`\n\n\t// Any lists of vertices that are included in cycles.\n\tCycles [][]*marshalVertex `json:\",omitempty\"`\n}\n\n// The add, remove, connect, removeEdge methods mirror the basic Graph\n// manipulations to reconstruct a marshalGraph from a debug log.\nfunc (g *marshalGraph) add(v *marshalVertex) {\n\tg.Vertices = append(g.Vertices, v)\n\tsort.Sort(vertices(g.Vertices))\n}\n\nfunc (g *marshalGraph) remove(v *marshalVertex) {\n\tfor i, existing := range g.Vertices {\n\t\tif v.ID == existing.ID {\n\t\t\tg.Vertices = append(g.Vertices[:i], g.Vertices[i+1:]...)\n\t\t\treturn\n\t\t}\n\t}\n}\n\nfunc (g *marshalGraph) connect(e *marshalEdge) {\n\tg.Edges = append(g.Edges, e)\n\tsort.Sort(edges(g.Edges))\n}\n\nfunc (g *marshalGraph) removeEdge(e *marshalEdge) {\n\tfor i, existing := range g.Edges {\n\t\tif e.Source == existing.Source && e.Target == existing.Target {\n\t\t\tg.Edges = append(g.Edges[:i], g.Edges[i+1:]...)\n\t\t\treturn\n\t\t}\n\t}\n}\n\nfunc (g *marshalGraph) vertexByID(id string) *marshalVertex {\n\tfor _, v := range g.Vertices {\n\t\tif id == v.ID {\n\t\t\treturn v\n\t\t}\n\t}\n\treturn nil\n}\n\ntype marshalVertex struct {\n\t// Unique ID, used to reference this vertex from other structures.\n\tID string\n\n\t// Human readable name\n\tName string `json:\",omitempty\"`\n\n\tAttrs map[string]string `json:\",omitempty\"`\n\n\t// This is to help transition from the old Dot interfaces. We record if the\n\t// node was a GraphNodeDotter here, so we can call it to get attributes.\n\tgraphNodeDotter GraphNodeDotter\n}\n\nfunc newMarshalVertex(v Vertex) *marshalVertex {\n\tdn, ok := v.(GraphNodeDotter)\n\tif !ok {\n\t\tdn = nil\n\t}\n\n\treturn &marshalVertex{\n\t\tID:              marshalVertexID(v),\n\t\tName:            VertexName(v),\n\t\tAttrs:           make(map[string]string),\n\t\tgraphNodeDotter: dn,\n\t}\n}\n\n// vertices is a sort.Interface implementation for sorting vertices by ID\ntype vertices []*marshalVertex\n\nfunc (v vertices) Less(i, j int) bool { return v[i].Name < v[j].Name }\nfunc (v vertices) Len() int           { return len(v) }\nfunc (v vertices) Swap(i, j int)      { v[i], v[j] = v[j], v[i] }\n\ntype marshalEdge struct {\n\t// Human readable name\n\tName string\n\n\t// Source and Target Vertices by ID\n\tSource string\n\tTarget string\n\n\tAttrs map[string]string `json:\",omitempty\"`\n}\n\nfunc newMarshalEdge(e Edge) *marshalEdge {\n\treturn &marshalEdge{\n\t\tName:   fmt.Sprintf(\"%s|%s\", VertexName(e.Source()), VertexName(e.Target())),\n\t\tSource: marshalVertexID(e.Source()),\n\t\tTarget: marshalVertexID(e.Target()),\n\t\tAttrs:  make(map[string]string),\n\t}\n}\n\n// edges is a sort.Interface implementation for sorting edges by Source ID\ntype edges []*marshalEdge\n\nfunc (e edges) Less(i, j int) bool { return e[i].Name < e[j].Name }\nfunc (e edges) Len() int           { return len(e) }\nfunc (e edges) Swap(i, j int)      { e[i], e[j] = e[j], e[i] }\n\n// build a marshalGraph structure from a *Graph\nfunc newMarshalGraph(name string, g *Graph) *marshalGraph {\n\tmg := &marshalGraph{\n\t\tType:  \"Graph\",\n\t\tName:  name,\n\t\tAttrs: make(map[string]string),\n\t}\n\n\tfor _, v := range g.Vertices() {\n\t\tid := marshalVertexID(v)\n\t\tif sg, ok := marshalSubgrapher(v); ok {\n\t\t\tsmg := newMarshalGraph(VertexName(v), sg)\n\t\t\tsmg.ID = id\n\t\t\tmg.Subgraphs = append(mg.Subgraphs, smg)\n\t\t}\n\n\t\tmv := newMarshalVertex(v)\n\t\tmg.Vertices = append(mg.Vertices, mv)\n\t}\n\n\tsort.Sort(vertices(mg.Vertices))\n\n\tfor _, e := range g.Edges() {\n\t\tmg.Edges = append(mg.Edges, newMarshalEdge(e))\n\t}\n\n\tsort.Sort(edges(mg.Edges))\n\n\tfor _, c := range (&AcyclicGraph{*g}).Cycles() {\n\t\tvar cycle []*marshalVertex\n\t\tfor _, v := range c {\n\t\t\tmv := newMarshalVertex(v)\n\t\t\tcycle = append(cycle, mv)\n\t\t}\n\t\tmg.Cycles = append(mg.Cycles, cycle)\n\t}\n\n\treturn mg\n}\n\n// Attempt to return a unique ID for any vertex.\nfunc marshalVertexID(v Vertex) string {\n\tval := reflect.ValueOf(v)\n\tswitch val.Kind() {\n\tcase reflect.Chan, reflect.Func, reflect.Map, reflect.Ptr, reflect.Slice, reflect.UnsafePointer:\n\t\treturn strconv.Itoa(int(val.Pointer()))\n\tcase reflect.Interface:\n\t\treturn strconv.Itoa(int(val.InterfaceData()[1]))\n\t}\n\n\tif v, ok := v.(Hashable); ok {\n\t\th := v.Hashcode()\n\t\tif h, ok := h.(string); ok {\n\t\t\treturn h\n\t\t}\n\t}\n\n\t// fallback to a name, which we hope is unique.\n\treturn VertexName(v)\n\n\t// we could try harder by attempting to read the arbitrary value from the\n\t// interface, but we shouldn't get here from terraform right now.\n}\n\n// check for a Subgrapher, and return the underlying *Graph.\nfunc marshalSubgrapher(v Vertex) (*Graph, bool) {\n\tsg, ok := v.(Subgrapher)\n\tif !ok {\n\t\treturn nil, false\n\t}\n\n\tswitch g := sg.Subgraph().DirectedGraph().(type) {\n\tcase *Graph:\n\t\treturn g, true\n\tcase *AcyclicGraph:\n\t\treturn &g.Graph, true\n\t}\n\n\treturn nil, false\n}\n\n// The DebugOperationEnd func type provides a way to call an End function via a\n// method call, allowing for the chaining of methods in a defer statement.\ntype DebugOperationEnd func(string)\n\n// End calls function e with the info parameter, marking the end of this\n// operation in the logs.\nfunc (e DebugOperationEnd) End(info string) { e(info) }\n\n// encoder provides methods to write debug data to an io.Writer, and is a noop\n// when no writer is present\ntype encoder struct {\n\tsync.Mutex\n\tw io.Writer\n}\n\n// Encode is analogous to json.Encoder.Encode\nfunc (e *encoder) Encode(i interface{}) {\n\tif e == nil || e.w == nil {\n\t\treturn\n\t}\n\te.Lock()\n\tdefer e.Unlock()\n\n\tjs, err := json.Marshal(i)\n\tif err != nil {\n\t\tlog.Println(\"[ERROR] dag:\", err)\n\t\treturn\n\t}\n\tjs = append(js, '\\n')\n\n\t_, err = e.w.Write(js)\n\tif err != nil {\n\t\tlog.Println(\"[ERROR] dag:\", err)\n\t\treturn\n\t}\n}\n\nfunc (e *encoder) Add(v Vertex) {\n\tif e == nil {\n\t\treturn\n\t}\n\te.Encode(marshalTransform{\n\t\tType:      typeTransform,\n\t\tAddVertex: newMarshalVertex(v),\n\t})\n}\n\n// Remove records the removal of Vertex v.\nfunc (e *encoder) Remove(v Vertex) {\n\tif e == nil {\n\t\treturn\n\t}\n\te.Encode(marshalTransform{\n\t\tType:         typeTransform,\n\t\tRemoveVertex: newMarshalVertex(v),\n\t})\n}\n\nfunc (e *encoder) Connect(edge Edge) {\n\tif e == nil {\n\t\treturn\n\t}\n\te.Encode(marshalTransform{\n\t\tType:    typeTransform,\n\t\tAddEdge: newMarshalEdge(edge),\n\t})\n}\n\nfunc (e *encoder) RemoveEdge(edge Edge) {\n\tif e == nil {\n\t\treturn\n\t}\n\te.Encode(marshalTransform{\n\t\tType:       typeTransform,\n\t\tRemoveEdge: newMarshalEdge(edge),\n\t})\n}\n\n// BeginOperation marks the start of set of graph transformations, and returns\n// an EndDebugOperation func to be called once the opration is complete.\nfunc (e *encoder) BeginOperation(op string, info string) DebugOperationEnd {\n\tif e == nil {\n\t\treturn func(string) {}\n\t}\n\n\te.Encode(marshalOperation{\n\t\tType:  typeOperation,\n\t\tBegin: op,\n\t\tInfo:  info,\n\t})\n\n\treturn func(info string) {\n\t\te.Encode(marshalOperation{\n\t\t\tType: typeOperation,\n\t\t\tEnd:  op,\n\t\t\tInfo: info,\n\t\t})\n\t}\n}\n\n// structure for recording graph transformations\ntype marshalTransform struct {\n\t// Type: \"Transform\"\n\tType         string\n\tAddEdge      *marshalEdge   `json:\",omitempty\"`\n\tRemoveEdge   *marshalEdge   `json:\",omitempty\"`\n\tAddVertex    *marshalVertex `json:\",omitempty\"`\n\tRemoveVertex *marshalVertex `json:\",omitempty\"`\n}\n\nfunc (t marshalTransform) Transform(g *marshalGraph) {\n\tswitch {\n\tcase t.AddEdge != nil:\n\t\tg.connect(t.AddEdge)\n\tcase t.RemoveEdge != nil:\n\t\tg.removeEdge(t.RemoveEdge)\n\tcase t.AddVertex != nil:\n\t\tg.add(t.AddVertex)\n\tcase t.RemoveVertex != nil:\n\t\tg.remove(t.RemoveVertex)\n\t}\n}\n\n// this structure allows us to decode any object in the json stream for\n// inspection, then re-decode it into a proper struct if needed.\ntype streamDecode struct {\n\tType string\n\tMap  map[string]interface{}\n\tJSON []byte\n}\n\nfunc (s *streamDecode) UnmarshalJSON(d []byte) error {\n\ts.JSON = d\n\terr := json.Unmarshal(d, &s.Map)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif t, ok := s.Map[\"Type\"]; ok {\n\t\ts.Type, _ = t.(string)\n\t}\n\treturn nil\n}\n\n// structure for recording the beginning and end of any multi-step\n// transformations. These are informational, and not required to reproduce the\n// graph state.\ntype marshalOperation struct {\n\tType  string\n\tBegin string `json:\",omitempty\"`\n\tEnd   string `json:\",omitempty\"`\n\tInfo  string `json:\",omitempty\"`\n}\n\n// decodeGraph decodes a marshalGraph from an encoded graph stream.\nfunc decodeGraph(r io.Reader) (*marshalGraph, error) {\n\tdec := json.NewDecoder(r)\n\n\t// a stream should always start with a graph\n\tg := &marshalGraph{}\n\n\terr := dec.Decode(g)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// now replay any operations that occurred on the original graph\n\tfor dec.More() {\n\t\ts := &streamDecode{}\n\t\terr := dec.Decode(s)\n\t\tif err != nil {\n\t\t\treturn g, err\n\t\t}\n\n\t\t// the only Type we're concerned with here is Transform to complete the\n\t\t// Graph\n\t\tif s.Type != typeTransform {\n\t\t\tcontinue\n\t\t}\n\n\t\tt := &marshalTransform{}\n\t\terr = json.Unmarshal(s.JSON, t)\n\t\tif err != nil {\n\t\t\treturn g, err\n\t\t}\n\t\tt.Transform(g)\n\t}\n\treturn g, nil\n}\n\n// marshalVertexInfo allows encoding arbitrary information about the a single\n// Vertex in the logs. These are accumulated for informational display while\n// rebuilding the graph.\ntype marshalVertexInfo struct {\n\tType   string\n\tVertex *marshalVertex\n\tInfo   string\n}\n\nfunc newVertexInfo(infoType string, v Vertex, info string) *marshalVertexInfo {\n\treturn &marshalVertexInfo{\n\t\tType:   infoType,\n\t\tVertex: newMarshalVertex(v),\n\t\tInfo:   info,\n\t}\n}\n\n// marshalEdgeInfo allows encoding arbitrary information about the a single\n// Edge in the logs. These are accumulated for informational display while\n// rebuilding the graph.\ntype marshalEdgeInfo struct {\n\tType string\n\tEdge *marshalEdge\n\tInfo string\n}\n\nfunc newEdgeInfo(infoType string, e Edge, info string) *marshalEdgeInfo {\n\treturn &marshalEdgeInfo{\n\t\tType: infoType,\n\t\tEdge: newMarshalEdge(e),\n\t\tInfo: info,\n\t}\n}\n\n// JSON2Dot reads a Graph debug log from and io.Reader, and converts the final\n// graph dot format.\n//\n// TODO: Allow returning the output at a certain point during decode.\n//       Encode extra information from the json log into the Dot.\nfunc JSON2Dot(r io.Reader) ([]byte, error) {\n\tg, err := decodeGraph(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn g.Dot(nil), nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/dag/set.go",
    "content": "package dag\n\nimport (\n\t\"sync\"\n)\n\n// Set is a set data structure.\ntype Set struct {\n\tm    map[interface{}]interface{}\n\tonce sync.Once\n}\n\n// Hashable is the interface used by set to get the hash code of a value.\n// If this isn't given, then the value of the item being added to the set\n// itself is used as the comparison value.\ntype Hashable interface {\n\tHashcode() interface{}\n}\n\n// hashcode returns the hashcode used for set elements.\nfunc hashcode(v interface{}) interface{} {\n\tif h, ok := v.(Hashable); ok {\n\t\treturn h.Hashcode()\n\t}\n\n\treturn v\n}\n\n// Add adds an item to the set\nfunc (s *Set) Add(v interface{}) {\n\ts.once.Do(s.init)\n\ts.m[hashcode(v)] = v\n}\n\n// Delete removes an item from the set.\nfunc (s *Set) Delete(v interface{}) {\n\ts.once.Do(s.init)\n\tdelete(s.m, hashcode(v))\n}\n\n// Include returns true/false of whether a value is in the set.\nfunc (s *Set) Include(v interface{}) bool {\n\ts.once.Do(s.init)\n\t_, ok := s.m[hashcode(v)]\n\treturn ok\n}\n\n// Intersection computes the set intersection with other.\nfunc (s *Set) Intersection(other *Set) *Set {\n\tresult := new(Set)\n\tif s == nil {\n\t\treturn result\n\t}\n\tif other != nil {\n\t\tfor _, v := range s.m {\n\t\t\tif other.Include(v) {\n\t\t\t\tresult.Add(v)\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result\n}\n\n// Difference returns a set with the elements that s has but\n// other doesn't.\nfunc (s *Set) Difference(other *Set) *Set {\n\tresult := new(Set)\n\tif s != nil {\n\t\tfor k, v := range s.m {\n\t\t\tvar ok bool\n\t\t\tif other != nil {\n\t\t\t\t_, ok = other.m[k]\n\t\t\t}\n\t\t\tif !ok {\n\t\t\t\tresult.Add(v)\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result\n}\n\n// Filter returns a set that contains the elements from the receiver\n// where the given callback returns true.\nfunc (s *Set) Filter(cb func(interface{}) bool) *Set {\n\tresult := new(Set)\n\n\tfor _, v := range s.m {\n\t\tif cb(v) {\n\t\t\tresult.Add(v)\n\t\t}\n\t}\n\n\treturn result\n}\n\n// Len is the number of items in the set.\nfunc (s *Set) Len() int {\n\tif s == nil {\n\t\treturn 0\n\t}\n\n\treturn len(s.m)\n}\n\n// List returns the list of set elements.\nfunc (s *Set) List() []interface{} {\n\tif s == nil {\n\t\treturn nil\n\t}\n\n\tr := make([]interface{}, 0, len(s.m))\n\tfor _, v := range s.m {\n\t\tr = append(r, v)\n\t}\n\n\treturn r\n}\n\nfunc (s *Set) init() {\n\ts.m = make(map[interface{}]interface{})\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/dag/tarjan.go",
    "content": "package dag\n\n// StronglyConnected returns the list of strongly connected components\n// within the Graph g. This information is primarily used by this package\n// for cycle detection, but strongly connected components have widespread\n// use.\nfunc StronglyConnected(g *Graph) [][]Vertex {\n\tvs := g.Vertices()\n\tacct := sccAcct{\n\t\tNextIndex:   1,\n\t\tVertexIndex: make(map[Vertex]int, len(vs)),\n\t}\n\tfor _, v := range vs {\n\t\t// Recurse on any non-visited nodes\n\t\tif acct.VertexIndex[v] == 0 {\n\t\t\tstronglyConnected(&acct, g, v)\n\t\t}\n\t}\n\treturn acct.SCC\n}\n\nfunc stronglyConnected(acct *sccAcct, g *Graph, v Vertex) int {\n\t// Initial vertex visit\n\tindex := acct.visit(v)\n\tminIdx := index\n\n\tfor _, raw := range g.DownEdges(v).List() {\n\t\ttarget := raw.(Vertex)\n\t\ttargetIdx := acct.VertexIndex[target]\n\n\t\t// Recurse on successor if not yet visited\n\t\tif targetIdx == 0 {\n\t\t\tminIdx = min(minIdx, stronglyConnected(acct, g, target))\n\t\t} else if acct.inStack(target) {\n\t\t\t// Check if the vertex is in the stack\n\t\t\tminIdx = min(minIdx, targetIdx)\n\t\t}\n\t}\n\n\t// Pop the strongly connected components off the stack if\n\t// this is a root vertex\n\tif index == minIdx {\n\t\tvar scc []Vertex\n\t\tfor {\n\t\t\tv2 := acct.pop()\n\t\t\tscc = append(scc, v2)\n\t\t\tif v2 == v {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\tacct.SCC = append(acct.SCC, scc)\n\t}\n\n\treturn minIdx\n}\n\nfunc min(a, b int) int {\n\tif a <= b {\n\t\treturn a\n\t}\n\treturn b\n}\n\n// sccAcct is used ot pass around accounting information for\n// the StronglyConnectedComponents algorithm\ntype sccAcct struct {\n\tNextIndex   int\n\tVertexIndex map[Vertex]int\n\tStack       []Vertex\n\tSCC         [][]Vertex\n}\n\n// visit assigns an index and pushes a vertex onto the stack\nfunc (s *sccAcct) visit(v Vertex) int {\n\tidx := s.NextIndex\n\ts.VertexIndex[v] = idx\n\ts.NextIndex++\n\ts.push(v)\n\treturn idx\n}\n\n// push adds a vertex to the stack\nfunc (s *sccAcct) push(n Vertex) {\n\ts.Stack = append(s.Stack, n)\n}\n\n// pop removes a vertex from the stack\nfunc (s *sccAcct) pop() Vertex {\n\tn := len(s.Stack)\n\tif n == 0 {\n\t\treturn nil\n\t}\n\tvertex := s.Stack[n-1]\n\ts.Stack = s.Stack[:n-1]\n\treturn vertex\n}\n\n// inStack checks if a vertex is in the stack\nfunc (s *sccAcct) inStack(needle Vertex) bool {\n\tfor _, n := range s.Stack {\n\t\tif n == needle {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/dag/walk.go",
    "content": "package dag\n\nimport (\n\t\"errors\"\n\t\"log\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/hashicorp/terraform/tfdiags\"\n)\n\n// Walker is used to walk every vertex of a graph in parallel.\n//\n// A vertex will only be walked when the dependencies of that vertex have\n// been walked. If two vertices can be walked at the same time, they will be.\n//\n// Update can be called to update the graph. This can be called even during\n// a walk, cahnging vertices/edges mid-walk. This should be done carefully.\n// If a vertex is removed but has already been executed, the result of that\n// execution (any error) is still returned by Wait. Changing or re-adding\n// a vertex that has already executed has no effect. Changing edges of\n// a vertex that has already executed has no effect.\n//\n// Non-parallelism can be enforced by introducing a lock in your callback\n// function. However, the goroutine overhead of a walk will remain.\n// Walker will create V*2 goroutines (one for each vertex, and dependency\n// waiter for each vertex). In general this should be of no concern unless\n// there are a huge number of vertices.\n//\n// The walk is depth first by default. This can be changed with the Reverse\n// option.\n//\n// A single walker is only valid for one graph walk. After the walk is complete\n// you must construct a new walker to walk again. State for the walk is never\n// deleted in case vertices or edges are changed.\ntype Walker struct {\n\t// Callback is what is called for each vertex\n\tCallback WalkFunc\n\n\t// Reverse, if true, causes the source of an edge to depend on a target.\n\t// When false (default), the target depends on the source.\n\tReverse bool\n\n\t// changeLock must be held to modify any of the fields below. Only Update\n\t// should modify these fields. Modifying them outside of Update can cause\n\t// serious problems.\n\tchangeLock sync.Mutex\n\tvertices   Set\n\tedges      Set\n\tvertexMap  map[Vertex]*walkerVertex\n\n\t// wait is done when all vertices have executed. It may become \"undone\"\n\t// if new vertices are added.\n\twait sync.WaitGroup\n\n\t// diagsMap contains the diagnostics recorded so far for execution,\n\t// and upstreamFailed contains all the vertices whose problems were\n\t// caused by upstream failures, and thus whose diagnostics should be\n\t// excluded from the final set.\n\t//\n\t// Readers and writers of either map must hold diagsLock.\n\tdiagsMap       map[Vertex]tfdiags.Diagnostics\n\tupstreamFailed map[Vertex]struct{}\n\tdiagsLock      sync.Mutex\n}\n\ntype walkerVertex struct {\n\t// These should only be set once on initialization and never written again.\n\t// They are not protected by a lock since they don't need to be since\n\t// they are write-once.\n\n\t// DoneCh is closed when this vertex has completed execution, regardless\n\t// of success.\n\t//\n\t// CancelCh is closed when the vertex should cancel execution. If execution\n\t// is already complete (DoneCh is closed), this has no effect. Otherwise,\n\t// execution is cancelled as quickly as possible.\n\tDoneCh   chan struct{}\n\tCancelCh chan struct{}\n\n\t// Dependency information. Any changes to any of these fields requires\n\t// holding DepsLock.\n\t//\n\t// DepsCh is sent a single value that denotes whether the upstream deps\n\t// were successful (no errors). Any value sent means that the upstream\n\t// dependencies are complete. No other values will ever be sent again.\n\t//\n\t// DepsUpdateCh is closed when there is a new DepsCh set.\n\tDepsCh       chan bool\n\tDepsUpdateCh chan struct{}\n\tDepsLock     sync.Mutex\n\n\t// Below is not safe to read/write in parallel. This behavior is\n\t// enforced by changes only happening in Update. Nothing else should\n\t// ever modify these.\n\tdeps         map[Vertex]chan struct{}\n\tdepsCancelCh chan struct{}\n}\n\n// errWalkUpstream is used in the errMap of a walk to note that an upstream\n// dependency failed so this vertex wasn't run. This is not shown in the final\n// user-returned error.\nvar errWalkUpstream = errors.New(\"upstream dependency failed\")\n\n// Wait waits for the completion of the walk and returns diagnostics describing\n// any problems that arose. Update should be called to populate the walk with\n// vertices and edges prior to calling this.\n//\n// Wait will return as soon as all currently known vertices are complete.\n// If you plan on calling Update with more vertices in the future, you\n// should not call Wait until after this is done.\nfunc (w *Walker) Wait() tfdiags.Diagnostics {\n\t// Wait for completion\n\tw.wait.Wait()\n\n\tvar diags tfdiags.Diagnostics\n\tw.diagsLock.Lock()\n\tfor v, vDiags := range w.diagsMap {\n\t\tif _, upstream := w.upstreamFailed[v]; upstream {\n\t\t\t// Ignore diagnostics for nodes that had failed upstreams, since\n\t\t\t// the downstream diagnostics are likely to be redundant.\n\t\t\tcontinue\n\t\t}\n\t\tdiags = diags.Append(vDiags)\n\t}\n\tw.diagsLock.Unlock()\n\n\treturn diags\n}\n\n// Update updates the currently executing walk with the given graph.\n// This will perform a diff of the vertices and edges and update the walker.\n// Already completed vertices remain completed (including any errors during\n// their execution).\n//\n// This returns immediately once the walker is updated; it does not wait\n// for completion of the walk.\n//\n// Multiple Updates can be called in parallel. Update can be called at any\n// time during a walk.\nfunc (w *Walker) Update(g *AcyclicGraph) {\n\tlog.Print(\"[TRACE] dag/walk: updating graph\")\n\tvar v, e *Set\n\tif g != nil {\n\t\tv, e = g.vertices, g.edges\n\t}\n\n\t// Grab the change lock so no more updates happen but also so that\n\t// no new vertices are executed during this time since we may be\n\t// removing them.\n\tw.changeLock.Lock()\n\tdefer w.changeLock.Unlock()\n\n\t// Initialize fields\n\tif w.vertexMap == nil {\n\t\tw.vertexMap = make(map[Vertex]*walkerVertex)\n\t}\n\n\t// Calculate all our sets\n\tnewEdges := e.Difference(&w.edges)\n\toldEdges := w.edges.Difference(e)\n\tnewVerts := v.Difference(&w.vertices)\n\toldVerts := w.vertices.Difference(v)\n\n\t// Add the new vertices\n\tfor _, raw := range newVerts.List() {\n\t\tv := raw.(Vertex)\n\n\t\t// Add to the waitgroup so our walk is not done until everything finishes\n\t\tw.wait.Add(1)\n\n\t\t// Add to our own set so we know about it already\n\t\tlog.Printf(\"[TRACE] dag/walk: added new vertex: %q\", VertexName(v))\n\t\tw.vertices.Add(raw)\n\n\t\t// Initialize the vertex info\n\t\tinfo := &walkerVertex{\n\t\t\tDoneCh:   make(chan struct{}),\n\t\t\tCancelCh: make(chan struct{}),\n\t\t\tdeps:     make(map[Vertex]chan struct{}),\n\t\t}\n\n\t\t// Add it to the map and kick off the walk\n\t\tw.vertexMap[v] = info\n\t}\n\n\t// Remove the old vertices\n\tfor _, raw := range oldVerts.List() {\n\t\tv := raw.(Vertex)\n\n\t\t// Get the vertex info so we can cancel it\n\t\tinfo, ok := w.vertexMap[v]\n\t\tif !ok {\n\t\t\t// This vertex for some reason was never in our map. This\n\t\t\t// shouldn't be possible.\n\t\t\tcontinue\n\t\t}\n\n\t\t// Cancel the vertex\n\t\tclose(info.CancelCh)\n\n\t\t// Delete it out of the map\n\t\tdelete(w.vertexMap, v)\n\n\t\tlog.Printf(\"[TRACE] dag/walk: removed vertex: %q\", VertexName(v))\n\t\tw.vertices.Delete(raw)\n\t}\n\n\t// Add the new edges\n\tvar changedDeps Set\n\tfor _, raw := range newEdges.List() {\n\t\tedge := raw.(Edge)\n\t\twaiter, dep := w.edgeParts(edge)\n\n\t\t// Get the info for the waiter\n\t\twaiterInfo, ok := w.vertexMap[waiter]\n\t\tif !ok {\n\t\t\t// Vertex doesn't exist... shouldn't be possible but ignore.\n\t\t\tcontinue\n\t\t}\n\n\t\t// Get the info for the dep\n\t\tdepInfo, ok := w.vertexMap[dep]\n\t\tif !ok {\n\t\t\t// Vertex doesn't exist... shouldn't be possible but ignore.\n\t\t\tcontinue\n\t\t}\n\n\t\t// Add the dependency to our waiter\n\t\twaiterInfo.deps[dep] = depInfo.DoneCh\n\n\t\t// Record that the deps changed for this waiter\n\t\tchangedDeps.Add(waiter)\n\n\t\tlog.Printf(\n\t\t\t\"[TRACE] dag/walk: added edge: %q waiting on %q\",\n\t\t\tVertexName(waiter), VertexName(dep))\n\t\tw.edges.Add(raw)\n\t}\n\n\t// Process reoved edges\n\tfor _, raw := range oldEdges.List() {\n\t\tedge := raw.(Edge)\n\t\twaiter, dep := w.edgeParts(edge)\n\n\t\t// Get the info for the waiter\n\t\twaiterInfo, ok := w.vertexMap[waiter]\n\t\tif !ok {\n\t\t\t// Vertex doesn't exist... shouldn't be possible but ignore.\n\t\t\tcontinue\n\t\t}\n\n\t\t// Delete the dependency from the waiter\n\t\tdelete(waiterInfo.deps, dep)\n\n\t\t// Record that the deps changed for this waiter\n\t\tchangedDeps.Add(waiter)\n\n\t\tlog.Printf(\n\t\t\t\"[TRACE] dag/walk: removed edge: %q waiting on %q\",\n\t\t\tVertexName(waiter), VertexName(dep))\n\t\tw.edges.Delete(raw)\n\t}\n\n\t// For each vertex with changed dependencies, we need to kick off\n\t// a new waiter and notify the vertex of the changes.\n\tfor _, raw := range changedDeps.List() {\n\t\tv := raw.(Vertex)\n\t\tinfo, ok := w.vertexMap[v]\n\t\tif !ok {\n\t\t\t// Vertex doesn't exist... shouldn't be possible but ignore.\n\t\t\tcontinue\n\t\t}\n\n\t\t// Create a new done channel\n\t\tdoneCh := make(chan bool, 1)\n\n\t\t// Create the channel we close for cancellation\n\t\tcancelCh := make(chan struct{})\n\n\t\t// Build a new deps copy\n\t\tdeps := make(map[Vertex]<-chan struct{})\n\t\tfor k, v := range info.deps {\n\t\t\tdeps[k] = v\n\t\t}\n\n\t\t// Update the update channel\n\t\tinfo.DepsLock.Lock()\n\t\tif info.DepsUpdateCh != nil {\n\t\t\tclose(info.DepsUpdateCh)\n\t\t}\n\t\tinfo.DepsCh = doneCh\n\t\tinfo.DepsUpdateCh = make(chan struct{})\n\t\tinfo.DepsLock.Unlock()\n\n\t\t// Cancel the older waiter\n\t\tif info.depsCancelCh != nil {\n\t\t\tclose(info.depsCancelCh)\n\t\t}\n\t\tinfo.depsCancelCh = cancelCh\n\n\t\tlog.Printf(\n\t\t\t\"[TRACE] dag/walk: dependencies changed for %q, sending new deps\",\n\t\t\tVertexName(v))\n\n\t\t// Start the waiter\n\t\tgo w.waitDeps(v, deps, doneCh, cancelCh)\n\t}\n\n\t// Start all the new vertices. We do this at the end so that all\n\t// the edge waiters and changes are setup above.\n\tfor _, raw := range newVerts.List() {\n\t\tv := raw.(Vertex)\n\t\tgo w.walkVertex(v, w.vertexMap[v])\n\t}\n}\n\n// edgeParts returns the waiter and the dependency, in that order.\n// The waiter is waiting on the dependency.\nfunc (w *Walker) edgeParts(e Edge) (Vertex, Vertex) {\n\tif w.Reverse {\n\t\treturn e.Source(), e.Target()\n\t}\n\n\treturn e.Target(), e.Source()\n}\n\n// walkVertex walks a single vertex, waiting for any dependencies before\n// executing the callback.\nfunc (w *Walker) walkVertex(v Vertex, info *walkerVertex) {\n\t// When we're done executing, lower the waitgroup count\n\tdefer w.wait.Done()\n\n\t// When we're done, always close our done channel\n\tdefer close(info.DoneCh)\n\n\t// Wait for our dependencies. We create a [closed] deps channel so\n\t// that we can immediately fall through to load our actual DepsCh.\n\tvar depsSuccess bool\n\tvar depsUpdateCh chan struct{}\n\tdepsCh := make(chan bool, 1)\n\tdepsCh <- true\n\tclose(depsCh)\n\tfor {\n\t\tselect {\n\t\tcase <-info.CancelCh:\n\t\t\t// Cancel\n\t\t\treturn\n\n\t\tcase depsSuccess = <-depsCh:\n\t\t\t// Deps complete! Mark as nil to trigger completion handling.\n\t\t\tdepsCh = nil\n\n\t\tcase <-depsUpdateCh:\n\t\t\t// New deps, reloop\n\t\t}\n\n\t\t// Check if we have updated dependencies. This can happen if the\n\t\t// dependencies were satisfied exactly prior to an Update occurring.\n\t\t// In that case, we'd like to take into account new dependencies\n\t\t// if possible.\n\t\tinfo.DepsLock.Lock()\n\t\tif info.DepsCh != nil {\n\t\t\tdepsCh = info.DepsCh\n\t\t\tinfo.DepsCh = nil\n\t\t}\n\t\tif info.DepsUpdateCh != nil {\n\t\t\tdepsUpdateCh = info.DepsUpdateCh\n\t\t}\n\t\tinfo.DepsLock.Unlock()\n\n\t\t// If we still have no deps channel set, then we're done!\n\t\tif depsCh == nil {\n\t\t\tbreak\n\t\t}\n\t}\n\n\t// If we passed dependencies, we just want to check once more that\n\t// we're not cancelled, since this can happen just as dependencies pass.\n\tselect {\n\tcase <-info.CancelCh:\n\t\t// Cancelled during an update while dependencies completed.\n\t\treturn\n\tdefault:\n\t}\n\n\t// Run our callback or note that our upstream failed\n\tvar diags tfdiags.Diagnostics\n\tvar upstreamFailed bool\n\tif depsSuccess {\n\t\tlog.Printf(\"[TRACE] dag/walk: visiting %q\", VertexName(v))\n\t\tdiags = w.Callback(v)\n\t} else {\n\t\tlog.Printf(\"[TRACE] dag/walk: upstream of %q errored, so skipping\", VertexName(v))\n\t\t// This won't be displayed to the user because we'll set upstreamFailed,\n\t\t// but we need to ensure there's at least one error in here so that\n\t\t// the failures will cascade downstream.\n\t\tdiags = diags.Append(errors.New(\"upstream dependencies failed\"))\n\t\tupstreamFailed = true\n\t}\n\n\t// Record the result (we must do this after execution because we mustn't\n\t// hold diagsLock while visiting a vertex.)\n\tw.diagsLock.Lock()\n\tif w.diagsMap == nil {\n\t\tw.diagsMap = make(map[Vertex]tfdiags.Diagnostics)\n\t}\n\tw.diagsMap[v] = diags\n\tif w.upstreamFailed == nil {\n\t\tw.upstreamFailed = make(map[Vertex]struct{})\n\t}\n\tif upstreamFailed {\n\t\tw.upstreamFailed[v] = struct{}{}\n\t}\n\tw.diagsLock.Unlock()\n}\n\nfunc (w *Walker) waitDeps(\n\tv Vertex,\n\tdeps map[Vertex]<-chan struct{},\n\tdoneCh chan<- bool,\n\tcancelCh <-chan struct{}) {\n\n\t// For each dependency given to us, wait for it to complete\n\tfor dep, depCh := range deps {\n\tDepSatisfied:\n\t\tfor {\n\t\t\tselect {\n\t\t\tcase <-depCh:\n\t\t\t\t// Dependency satisfied!\n\t\t\t\tbreak DepSatisfied\n\n\t\t\tcase <-cancelCh:\n\t\t\t\t// Wait cancelled. Note that we didn't satisfy dependencies\n\t\t\t\t// so that anything waiting on us also doesn't run.\n\t\t\t\tdoneCh <- false\n\t\t\t\treturn\n\n\t\t\tcase <-time.After(time.Second * 5):\n\t\t\t\tlog.Printf(\"[TRACE] dag/walk: vertex %q is waiting for %q\",\n\t\t\t\t\tVertexName(v), VertexName(dep))\n\t\t\t}\n\t\t}\n\t}\n\n\t// Dependencies satisfied! We need to check if any errored\n\tw.diagsLock.Lock()\n\tdefer w.diagsLock.Unlock()\n\tfor dep := range deps {\n\t\tif w.diagsMap[dep].HasErrors() {\n\t\t\t// One of our dependencies failed, so return false\n\t\t\tdoneCh <- false\n\t\t\treturn\n\t\t}\n\t}\n\n\t// All dependencies satisfied and successful\n\tdoneCh <- true\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/flatmap/expand.go",
    "content": "package flatmap\n\nimport (\n\t\"fmt\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/hashicorp/hil\"\n)\n\n// Expand takes a map and a key (prefix) and expands that value into\n// a more complex structure. This is the reverse of the Flatten operation.\nfunc Expand(m map[string]string, key string) interface{} {\n\t// If the key is exactly a key in the map, just return it\n\tif v, ok := m[key]; ok {\n\t\tif v == \"true\" {\n\t\t\treturn true\n\t\t} else if v == \"false\" {\n\t\t\treturn false\n\t\t}\n\n\t\treturn v\n\t}\n\n\t// Check if the key is an array, and if so, expand the array\n\tif v, ok := m[key+\".#\"]; ok {\n\t\t// If the count of the key is unknown, then just put the unknown\n\t\t// value in the value itself. This will be detected by Terraform\n\t\t// core later.\n\t\tif v == hil.UnknownValue {\n\t\t\treturn v\n\t\t}\n\n\t\treturn expandArray(m, key)\n\t}\n\n\t// Check if this is a prefix in the map\n\tprefix := key + \".\"\n\tfor k := range m {\n\t\tif strings.HasPrefix(k, prefix) {\n\t\t\treturn expandMap(m, prefix)\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc expandArray(m map[string]string, prefix string) []interface{} {\n\tnum, err := strconv.ParseInt(m[prefix+\".#\"], 0, 0)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\t// If the number of elements in this array is 0, then return an\n\t// empty slice as there is nothing to expand. Trying to expand it\n\t// anyway could lead to crashes as any child maps, arrays or sets\n\t// that no longer exist are still shown as empty with a count of 0.\n\tif num == 0 {\n\t\treturn []interface{}{}\n\t}\n\n\t// NOTE: \"num\" is not necessarily accurate, e.g. if a user tampers\n\t// with state, so the following code should not crash when given a\n\t// number of items more or less than what's given in num. The\n\t// num key is mainly just a hint that this is a list or set.\n\n\t// The Schema \"Set\" type stores its values in an array format, but\n\t// using numeric hash values instead of ordinal keys. Take the set\n\t// of keys regardless of value, and expand them in numeric order.\n\t// See GH-11042 for more details.\n\tkeySet := map[int]bool{}\n\tcomputed := map[string]bool{}\n\tfor k := range m {\n\t\tif !strings.HasPrefix(k, prefix+\".\") {\n\t\t\tcontinue\n\t\t}\n\n\t\tkey := k[len(prefix)+1:]\n\t\tidx := strings.Index(key, \".\")\n\t\tif idx != -1 {\n\t\t\tkey = key[:idx]\n\t\t}\n\n\t\t// skip the count value\n\t\tif key == \"#\" {\n\t\t\tcontinue\n\t\t}\n\n\t\t// strip the computed flag if there is one\n\t\tif strings.HasPrefix(key, \"~\") {\n\t\t\tkey = key[1:]\n\t\t\tcomputed[key] = true\n\t\t}\n\n\t\tk, err := strconv.Atoi(key)\n\t\tif err != nil {\n\t\t\tpanic(err)\n\t\t}\n\t\tkeySet[int(k)] = true\n\t}\n\n\tkeysList := make([]int, 0, num)\n\tfor key := range keySet {\n\t\tkeysList = append(keysList, key)\n\t}\n\tsort.Ints(keysList)\n\n\tresult := make([]interface{}, len(keysList))\n\tfor i, key := range keysList {\n\t\tkeyString := strconv.Itoa(key)\n\t\tif computed[keyString] {\n\t\t\tkeyString = \"~\" + keyString\n\t\t}\n\t\tresult[i] = Expand(m, fmt.Sprintf(\"%s.%s\", prefix, keyString))\n\t}\n\n\treturn result\n}\n\nfunc expandMap(m map[string]string, prefix string) map[string]interface{} {\n\t// Submaps may not have a '%' key, so we can't count on this value being\n\t// here. If we don't have a count, just proceed as if we have have a map.\n\tif count, ok := m[prefix+\"%\"]; ok && count == \"0\" {\n\t\treturn map[string]interface{}{}\n\t}\n\n\tresult := make(map[string]interface{})\n\tfor k := range m {\n\t\tif !strings.HasPrefix(k, prefix) {\n\t\t\tcontinue\n\t\t}\n\n\t\tkey := k[len(prefix):]\n\t\tidx := strings.Index(key, \".\")\n\t\tif idx != -1 {\n\t\t\tkey = key[:idx]\n\t\t}\n\t\tif _, ok := result[key]; ok {\n\t\t\tcontinue\n\t\t}\n\n\t\t// skip the map count value\n\t\tif key == \"%\" {\n\t\t\tcontinue\n\t\t}\n\n\t\tresult[key] = Expand(m, k[:len(prefix)+len(key)])\n\t}\n\n\treturn result\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/flatmap/flatten.go",
    "content": "package flatmap\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n)\n\n// Flatten takes a structure and turns into a flat map[string]string.\n//\n// Within the \"thing\" parameter, only primitive values are allowed. Structs are\n// not supported. Therefore, it can only be slices, maps, primitives, and\n// any combination of those together.\n//\n// See the tests for examples of what inputs are turned into.\nfunc Flatten(thing map[string]interface{}) Map {\n\tresult := make(map[string]string)\n\n\tfor k, raw := range thing {\n\t\tflatten(result, k, reflect.ValueOf(raw))\n\t}\n\n\treturn Map(result)\n}\n\nfunc flatten(result map[string]string, prefix string, v reflect.Value) {\n\tif v.Kind() == reflect.Interface {\n\t\tv = v.Elem()\n\t}\n\n\tswitch v.Kind() {\n\tcase reflect.Bool:\n\t\tif v.Bool() {\n\t\t\tresult[prefix] = \"true\"\n\t\t} else {\n\t\t\tresult[prefix] = \"false\"\n\t\t}\n\tcase reflect.Int:\n\t\tresult[prefix] = fmt.Sprintf(\"%d\", v.Int())\n\tcase reflect.Map:\n\t\tflattenMap(result, prefix, v)\n\tcase reflect.Slice:\n\t\tflattenSlice(result, prefix, v)\n\tcase reflect.String:\n\t\tresult[prefix] = v.String()\n\tdefault:\n\t\tpanic(fmt.Sprintf(\"Unknown: %s\", v))\n\t}\n}\n\nfunc flattenMap(result map[string]string, prefix string, v reflect.Value) {\n\tfor _, k := range v.MapKeys() {\n\t\tif k.Kind() == reflect.Interface {\n\t\t\tk = k.Elem()\n\t\t}\n\n\t\tif k.Kind() != reflect.String {\n\t\t\tpanic(fmt.Sprintf(\"%s: map key is not string: %s\", prefix, k))\n\t\t}\n\n\t\tflatten(result, fmt.Sprintf(\"%s.%s\", prefix, k.String()), v.MapIndex(k))\n\t}\n}\n\nfunc flattenSlice(result map[string]string, prefix string, v reflect.Value) {\n\tprefix = prefix + \".\"\n\n\tresult[prefix+\"#\"] = fmt.Sprintf(\"%d\", v.Len())\n\tfor i := 0; i < v.Len(); i++ {\n\t\tflatten(result, fmt.Sprintf(\"%s%d\", prefix, i), v.Index(i))\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/flatmap/map.go",
    "content": "package flatmap\n\nimport (\n\t\"strings\"\n)\n\n// Map is a wrapper around map[string]string that provides some helpers\n// above it that assume the map is in the format that flatmap expects\n// (the result of Flatten).\n//\n// All modifying functions such as Delete are done in-place unless\n// otherwise noted.\ntype Map map[string]string\n\n// Contains returns true if the map contains the given key.\nfunc (m Map) Contains(key string) bool {\n\tfor _, k := range m.Keys() {\n\t\tif k == key {\n\t\t\treturn true\n\t\t}\n\t}\n\n\treturn false\n}\n\n// Delete deletes a key out of the map with the given prefix.\nfunc (m Map) Delete(prefix string) {\n\tfor k, _ := range m {\n\t\tmatch := k == prefix\n\t\tif !match {\n\t\t\tif !strings.HasPrefix(k, prefix) {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif k[len(prefix):len(prefix)+1] != \".\" {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\tdelete(m, k)\n\t}\n}\n\n// Keys returns all of the top-level keys in this map\nfunc (m Map) Keys() []string {\n\tks := make(map[string]struct{})\n\tfor k, _ := range m {\n\t\tidx := strings.Index(k, \".\")\n\t\tif idx == -1 {\n\t\t\tidx = len(k)\n\t\t}\n\n\t\tks[k[:idx]] = struct{}{}\n\t}\n\n\tresult := make([]string, 0, len(ks))\n\tfor k, _ := range ks {\n\t\tresult = append(result, k)\n\t}\n\n\treturn result\n}\n\n// Merge merges the contents of the other Map into this one.\n//\n// This merge is smarter than a simple map iteration because it\n// will fully replace arrays and other complex structures that\n// are present in this map with the other map's. For example, if\n// this map has a 3 element \"foo\" list, and m2 has a 2 element \"foo\"\n// list, then the result will be that m has a 2 element \"foo\"\n// list.\nfunc (m Map) Merge(m2 Map) {\n\tfor _, prefix := range m2.Keys() {\n\t\tm.Delete(prefix)\n\n\t\tfor k, v := range m2 {\n\t\t\tif strings.HasPrefix(k, prefix) {\n\t\t\t\tm[k] = v\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/helper/config/decode.go",
    "content": "package config\n\nimport (\n\t\"github.com/mitchellh/mapstructure\"\n)\n\nfunc Decode(target interface{}, raws ...interface{}) (*mapstructure.Metadata, error) {\n\tvar md mapstructure.Metadata\n\tdecoderConfig := &mapstructure.DecoderConfig{\n\t\tMetadata:         &md,\n\t\tResult:           target,\n\t\tWeaklyTypedInput: true,\n\t}\n\n\tdecoder, err := mapstructure.NewDecoder(decoderConfig)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tfor _, raw := range raws {\n\t\terr := decoder.Decode(raw)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\treturn &md, nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/helper/config/validator.go",
    "content": "package config\n\nimport (\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/hashicorp/terraform/flatmap\"\n\t\"github.com/hashicorp/terraform/terraform\"\n)\n\n// Validator is a helper that helps you validate the configuration\n// of your resource, resource provider, etc.\n//\n// At the most basic level, set the Required and Optional lists to be\n// specifiers of keys that are required or optional. If a key shows up\n// that isn't in one of these two lists, then an error is generated.\n//\n// The \"specifiers\" allowed in this is a fairly rich syntax to help\n// describe the format of your configuration:\n//\n//   * Basic keys are just strings. For example: \"foo\" will match the\n//       \"foo\" key.\n//\n//   * Nested structure keys can be matched by doing\n//       \"listener.*.foo\". This will verify that there is at least one\n//       listener element that has the \"foo\" key set.\n//\n//   * The existence of a nested structure can be checked by simply\n//       doing \"listener.*\" which will verify that there is at least\n//       one element in the \"listener\" structure. This is NOT\n//       validating that \"listener\" is an array. It is validating\n//       that it is a nested structure in the configuration.\n//\ntype Validator struct {\n\tRequired []string\n\tOptional []string\n}\n\nfunc (v *Validator) Validate(\n\tc *terraform.ResourceConfig) (ws []string, es []error) {\n\t// Flatten the configuration so it is easier to reason about\n\tflat := flatmap.Flatten(c.Raw)\n\n\tkeySet := make(map[string]validatorKey)\n\tfor i, vs := range [][]string{v.Required, v.Optional} {\n\t\treq := i == 0\n\t\tfor _, k := range vs {\n\t\t\tvk, err := newValidatorKey(k, req)\n\t\t\tif err != nil {\n\t\t\t\tes = append(es, err)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tkeySet[k] = vk\n\t\t}\n\t}\n\n\tpurged := make([]string, 0)\n\tfor _, kv := range keySet {\n\t\tp, w, e := kv.Validate(flat)\n\t\tif len(w) > 0 {\n\t\t\tws = append(ws, w...)\n\t\t}\n\t\tif len(e) > 0 {\n\t\t\tes = append(es, e...)\n\t\t}\n\n\t\tpurged = append(purged, p...)\n\t}\n\n\t// Delete all the keys we processed in order to find\n\t// the unknown keys.\n\tfor _, p := range purged {\n\t\tdelete(flat, p)\n\t}\n\n\t// The rest are unknown\n\tfor k, _ := range flat {\n\t\tes = append(es, fmt.Errorf(\"Unknown configuration: %s\", k))\n\t}\n\n\treturn\n}\n\ntype validatorKey interface {\n\t// Validate validates the given configuration and returns viewed keys,\n\t// warnings, and errors.\n\tValidate(map[string]string) ([]string, []string, []error)\n}\n\nfunc newValidatorKey(k string, req bool) (validatorKey, error) {\n\tvar result validatorKey\n\n\tparts := strings.Split(k, \".\")\n\tif len(parts) > 1 && parts[1] == \"*\" {\n\t\tresult = &nestedValidatorKey{\n\t\t\tParts:    parts,\n\t\t\tRequired: req,\n\t\t}\n\t} else {\n\t\tresult = &basicValidatorKey{\n\t\t\tKey:      k,\n\t\t\tRequired: req,\n\t\t}\n\t}\n\n\treturn result, nil\n}\n\n// basicValidatorKey validates keys that are basic such as \"foo\"\ntype basicValidatorKey struct {\n\tKey      string\n\tRequired bool\n}\n\nfunc (v *basicValidatorKey) Validate(\n\tm map[string]string) ([]string, []string, []error) {\n\tfor k, _ := range m {\n\t\t// If we have the exact key its a match\n\t\tif k == v.Key {\n\t\t\treturn []string{k}, nil, nil\n\t\t}\n\t}\n\n\tif !v.Required {\n\t\treturn nil, nil, nil\n\t}\n\n\treturn nil, nil, []error{fmt.Errorf(\n\t\t\"Key not found: %s\", v.Key)}\n}\n\ntype nestedValidatorKey struct {\n\tParts    []string\n\tRequired bool\n}\n\nfunc (v *nestedValidatorKey) validate(\n\tm map[string]string,\n\tprefix string,\n\toffset int) ([]string, []string, []error) {\n\tif offset >= len(v.Parts) {\n\t\t// We're at the end. Look for a specific key.\n\t\tv2 := &basicValidatorKey{Key: prefix, Required: v.Required}\n\t\treturn v2.Validate(m)\n\t}\n\n\tcurrent := v.Parts[offset]\n\n\t// If we're at offset 0, special case to start at the next one.\n\tif offset == 0 {\n\t\treturn v.validate(m, current, offset+1)\n\t}\n\n\t// Determine if we're doing a \"for all\" or a specific key\n\tif current != \"*\" {\n\t\t// We're looking at a specific key, continue on.\n\t\treturn v.validate(m, prefix+\".\"+current, offset+1)\n\t}\n\n\t// We're doing a \"for all\", so we loop over.\n\tcountStr, ok := m[prefix+\".#\"]\n\tif !ok {\n\t\tif !v.Required {\n\t\t\t// It wasn't required, so its no problem.\n\t\t\treturn nil, nil, nil\n\t\t}\n\n\t\treturn nil, nil, []error{fmt.Errorf(\n\t\t\t\"Key not found: %s\", prefix)}\n\t}\n\n\tcount, err := strconv.ParseInt(countStr, 0, 0)\n\tif err != nil {\n\t\t// This shouldn't happen if flatmap works properly\n\t\tpanic(\"invalid flatmap array\")\n\t}\n\n\tvar e []error\n\tvar w []string\n\tu := make([]string, 1, count+1)\n\tu[0] = prefix + \".#\"\n\tfor i := 0; i < int(count); i++ {\n\t\tprefix := fmt.Sprintf(\"%s.%d\", prefix, i)\n\n\t\t// Mark that we saw this specific key\n\t\tu = append(u, prefix)\n\n\t\t// Mark all prefixes of this\n\t\tfor k, _ := range m {\n\t\t\tif !strings.HasPrefix(k, prefix+\".\") {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tu = append(u, k)\n\t\t}\n\n\t\t// If we have more parts, then validate deeper\n\t\tif offset+1 < len(v.Parts) {\n\t\t\tu2, w2, e2 := v.validate(m, prefix, offset+1)\n\n\t\t\tu = append(u, u2...)\n\t\t\tw = append(w, w2...)\n\t\t\te = append(e, e2...)\n\t\t}\n\t}\n\n\treturn u, w, e\n}\n\nfunc (v *nestedValidatorKey) Validate(\n\tm map[string]string) ([]string, []string, []error) {\n\treturn v.validate(m, \"\", 0)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/helper/didyoumean/name_suggestion.go",
    "content": "package didyoumean\n\nimport (\n\t\"github.com/agext/levenshtein\"\n)\n\n// NameSuggestion tries to find a name from the given slice of suggested names\n// that is close to the given name and returns it if found. If no suggestion\n// is close enough, returns the empty string.\n//\n// The suggestions are tried in order, so earlier suggestions take precedence\n// if the given string is similar to two or more suggestions.\n//\n// This function is intended to be used with a relatively-small number of\n// suggestions. It's not optimized for hundreds or thousands of them.\nfunc NameSuggestion(given string, suggestions []string) string {\n\tfor _, suggestion := range suggestions {\n\t\tdist := levenshtein.Distance(given, suggestion, nil)\n\t\tif dist < 3 { // threshold determined experimentally\n\t\t\treturn suggestion\n\t\t}\n\t}\n\treturn \"\"\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/helper/hashcode/hashcode.go",
    "content": "package hashcode\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"hash/crc32\"\n)\n\n// String hashes a string to a unique hashcode.\n//\n// crc32 returns a uint32, but for our use we need\n// and non negative integer. Here we cast to an integer\n// and invert it if the result is negative.\nfunc String(s string) int {\n\tv := int(crc32.ChecksumIEEE([]byte(s)))\n\tif v >= 0 {\n\t\treturn v\n\t}\n\tif -v >= 0 {\n\t\treturn -v\n\t}\n\t// v == MinInt\n\treturn 0\n}\n\n// Strings hashes a list of strings to a unique hashcode.\nfunc Strings(strings []string) string {\n\tvar buf bytes.Buffer\n\n\tfor _, s := range strings {\n\t\tbuf.WriteString(fmt.Sprintf(\"%s-\", s))\n\t}\n\n\treturn fmt.Sprintf(\"%d\", String(buf.String()))\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/helper/hilmapstructure/hilmapstructure.go",
    "content": "package hilmapstructure\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\n\t\"github.com/mitchellh/mapstructure\"\n)\n\nvar hilMapstructureDecodeHookEmptySlice []interface{}\nvar hilMapstructureDecodeHookStringSlice []string\nvar hilMapstructureDecodeHookEmptyMap map[string]interface{}\n\n// WeakDecode behaves in the same way as mapstructure.WeakDecode but has a\n// DecodeHook which defeats the backward compatibility mode of mapstructure\n// which WeakDecodes []interface{}{} into an empty map[string]interface{}. This\n// allows us to use WeakDecode (desirable), but not fail on empty lists.\nfunc WeakDecode(m interface{}, rawVal interface{}) error {\n\tconfig := &mapstructure.DecoderConfig{\n\t\tDecodeHook: func(source reflect.Type, target reflect.Type, val interface{}) (interface{}, error) {\n\t\t\tsliceType := reflect.TypeOf(hilMapstructureDecodeHookEmptySlice)\n\t\t\tstringSliceType := reflect.TypeOf(hilMapstructureDecodeHookStringSlice)\n\t\t\tmapType := reflect.TypeOf(hilMapstructureDecodeHookEmptyMap)\n\n\t\t\tif (source == sliceType || source == stringSliceType) && target == mapType {\n\t\t\t\treturn nil, fmt.Errorf(\"Cannot convert a []interface{} into a map[string]interface{}\")\n\t\t\t}\n\n\t\t\treturn val, nil\n\t\t},\n\t\tWeaklyTypedInput: true,\n\t\tResult:           rawVal,\n\t}\n\n\tdecoder, err := mapstructure.NewDecoder(config)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn decoder.Decode(m)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/helper/logging/logging.go",
    "content": "package logging\n\nimport (\n\t\"io\"\n\t\"io/ioutil\"\n\t\"log\"\n\t\"os\"\n\t\"strings\"\n\t\"syscall\"\n\n\t\"github.com/hashicorp/logutils\"\n)\n\n// These are the environmental variables that determine if we log, and if\n// we log whether or not the log should go to a file.\nconst (\n\tEnvLog     = \"TF_LOG\"      // Set to True\n\tEnvLogFile = \"TF_LOG_PATH\" // Set to a file\n)\n\nvar ValidLevels = []logutils.LogLevel{\"TRACE\", \"DEBUG\", \"INFO\", \"WARN\", \"ERROR\"}\n\n// LogOutput determines where we should send logs (if anywhere) and the log level.\nfunc LogOutput() (logOutput io.Writer, err error) {\n\tlogOutput = ioutil.Discard\n\n\tlogLevel := LogLevel()\n\tif logLevel == \"\" {\n\t\treturn\n\t}\n\n\tlogOutput = os.Stderr\n\tif logPath := os.Getenv(EnvLogFile); logPath != \"\" {\n\t\tvar err error\n\t\tlogOutput, err = os.OpenFile(logPath, syscall.O_CREAT|syscall.O_RDWR|syscall.O_APPEND, 0666)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\t// This was the default since the beginning\n\tlogOutput = &logutils.LevelFilter{\n\t\tLevels:   ValidLevels,\n\t\tMinLevel: logutils.LogLevel(logLevel),\n\t\tWriter:   logOutput,\n\t}\n\n\treturn\n}\n\n// SetOutput checks for a log destination with LogOutput, and calls\n// log.SetOutput with the result. If LogOutput returns nil, SetOutput uses\n// ioutil.Discard. Any error from LogOutout is fatal.\nfunc SetOutput() {\n\tout, err := LogOutput()\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\n\tif out == nil {\n\t\tout = ioutil.Discard\n\t}\n\n\tlog.SetOutput(out)\n}\n\n// LogLevel returns the current log level string based the environment vars\nfunc LogLevel() string {\n\tenvLevel := os.Getenv(EnvLog)\n\tif envLevel == \"\" {\n\t\treturn \"\"\n\t}\n\n\tlogLevel := \"TRACE\"\n\tif isValidLogLevel(envLevel) {\n\t\t// allow following for better ux: info, Info or INFO\n\t\tlogLevel = strings.ToUpper(envLevel)\n\t} else {\n\t\tlog.Printf(\"[WARN] Invalid log level: %q. Defaulting to level: TRACE. Valid levels are: %+v\",\n\t\t\tenvLevel, ValidLevels)\n\t}\n\n\treturn logLevel\n}\n\n// IsDebugOrHigher returns whether or not the current log level is debug or trace\nfunc IsDebugOrHigher() bool {\n\tlevel := string(LogLevel())\n\treturn level == \"DEBUG\" || level == \"TRACE\"\n}\n\nfunc isValidLogLevel(level string) bool {\n\tfor _, l := range ValidLevels {\n\t\tif strings.ToUpper(level) == string(l) {\n\t\t\treturn true\n\t\t}\n\t}\n\n\treturn false\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/helper/logging/transport.go",
    "content": "package logging\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"log\"\n\t\"net/http\"\n\t\"net/http/httputil\"\n\t\"strings\"\n)\n\ntype transport struct {\n\tname      string\n\ttransport http.RoundTripper\n}\n\nfunc (t *transport) RoundTrip(req *http.Request) (*http.Response, error) {\n\tif IsDebugOrHigher() {\n\t\treqData, err := httputil.DumpRequestOut(req, true)\n\t\tif err == nil {\n\t\t\tlog.Printf(\"[DEBUG] \"+logReqMsg, t.name, prettyPrintJsonLines(reqData))\n\t\t} else {\n\t\t\tlog.Printf(\"[ERROR] %s API Request error: %#v\", t.name, err)\n\t\t}\n\t}\n\n\tresp, err := t.transport.RoundTrip(req)\n\tif err != nil {\n\t\treturn resp, err\n\t}\n\n\tif IsDebugOrHigher() {\n\t\trespData, err := httputil.DumpResponse(resp, true)\n\t\tif err == nil {\n\t\t\tlog.Printf(\"[DEBUG] \"+logRespMsg, t.name, prettyPrintJsonLines(respData))\n\t\t} else {\n\t\t\tlog.Printf(\"[ERROR] %s API Response error: %#v\", t.name, err)\n\t\t}\n\t}\n\n\treturn resp, nil\n}\n\nfunc NewTransport(name string, t http.RoundTripper) *transport {\n\treturn &transport{name, t}\n}\n\n// prettyPrintJsonLines iterates through a []byte line-by-line,\n// transforming any lines that are complete json into pretty-printed json.\nfunc prettyPrintJsonLines(b []byte) string {\n\tparts := strings.Split(string(b), \"\\n\")\n\tfor i, p := range parts {\n\t\tif b := []byte(p); json.Valid(b) {\n\t\t\tvar out bytes.Buffer\n\t\t\tjson.Indent(&out, b, \"\", \" \")\n\t\t\tparts[i] = out.String()\n\t\t}\n\t}\n\treturn strings.Join(parts, \"\\n\")\n}\n\nconst logReqMsg = `%s API Request Details:\n---[ REQUEST ]---------------------------------------\n%s\n-----------------------------------------------------`\n\nconst logRespMsg = `%s API Response Details:\n---[ RESPONSE ]--------------------------------------\n%s\n-----------------------------------------------------`\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/helper/mutexkv/mutexkv.go",
    "content": "package mutexkv\n\nimport (\n\t\"log\"\n\t\"sync\"\n)\n\n// MutexKV is a simple key/value store for arbitrary mutexes. It can be used to\n// serialize changes across arbitrary collaborators that share knowledge of the\n// keys they must serialize on.\n//\n// The initial use case is to let aws_security_group_rule resources serialize\n// their access to individual security groups based on SG ID.\ntype MutexKV struct {\n\tlock  sync.Mutex\n\tstore map[string]*sync.Mutex\n}\n\n// Locks the mutex for the given key. Caller is responsible for calling Unlock\n// for the same key\nfunc (m *MutexKV) Lock(key string) {\n\tlog.Printf(\"[DEBUG] Locking %q\", key)\n\tm.get(key).Lock()\n\tlog.Printf(\"[DEBUG] Locked %q\", key)\n}\n\n// Unlock the mutex for the given key. Caller must have called Lock for the same key first\nfunc (m *MutexKV) Unlock(key string) {\n\tlog.Printf(\"[DEBUG] Unlocking %q\", key)\n\tm.get(key).Unlock()\n\tlog.Printf(\"[DEBUG] Unlocked %q\", key)\n}\n\n// Returns a mutex for the given key, no guarantee of its lock status\nfunc (m *MutexKV) get(key string) *sync.Mutex {\n\tm.lock.Lock()\n\tdefer m.lock.Unlock()\n\tmutex, ok := m.store[key]\n\tif !ok {\n\t\tmutex = &sync.Mutex{}\n\t\tm.store[key] = mutex\n\t}\n\treturn mutex\n}\n\n// Returns a properly initalized MutexKV\nfunc NewMutexKV() *MutexKV {\n\treturn &MutexKV{\n\t\tstore: make(map[string]*sync.Mutex),\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/helper/plugin/doc.go",
    "content": "// Package plugin contains types and functions to help Terraform plugins\n// implement the plugin rpc interface.\n// The primary Provider type will be responsible for converting from the grpc\n// wire protocol to the types and methods known to the provider\n// implementations.\npackage plugin\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/helper/plugin/grpc_provider.go",
    "content": "package plugin\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"log\"\n\t\"strconv\"\n\n\t\"github.com/zclconf/go-cty/cty\"\n\tctyconvert \"github.com/zclconf/go-cty/cty/convert\"\n\t\"github.com/zclconf/go-cty/cty/msgpack\"\n\tcontext \"golang.org/x/net/context\"\n\n\t\"github.com/hashicorp/terraform/config/hcl2shim\"\n\t\"github.com/hashicorp/terraform/configs/configschema\"\n\t\"github.com/hashicorp/terraform/helper/schema\"\n\tproto \"github.com/hashicorp/terraform/internal/tfplugin5\"\n\t\"github.com/hashicorp/terraform/plugin/convert\"\n\t\"github.com/hashicorp/terraform/terraform\"\n)\n\nconst newExtraKey = \"_new_extra_shim\"\n\n// NewGRPCProviderServerShim wraps a terraform.ResourceProvider in a\n// proto.ProviderServer implementation. If the provided provider is not a\n// *schema.Provider, this will return nil,\nfunc NewGRPCProviderServerShim(p terraform.ResourceProvider) *GRPCProviderServer {\n\tsp, ok := p.(*schema.Provider)\n\tif !ok {\n\t\treturn nil\n\t}\n\n\treturn &GRPCProviderServer{\n\t\tprovider: sp,\n\t}\n}\n\n// GRPCProviderServer handles the server, or plugin side of the rpc connection.\ntype GRPCProviderServer struct {\n\tprovider *schema.Provider\n}\n\nfunc (s *GRPCProviderServer) GetSchema(_ context.Context, req *proto.GetProviderSchema_Request) (*proto.GetProviderSchema_Response, error) {\n\t// Here we are certain that the provider is being called through grpc, so\n\t// make sure the feature flag for helper/schema is set\n\tschema.SetProto5()\n\n\tresp := &proto.GetProviderSchema_Response{\n\t\tResourceSchemas:   make(map[string]*proto.Schema),\n\t\tDataSourceSchemas: make(map[string]*proto.Schema),\n\t}\n\n\tresp.Provider = &proto.Schema{\n\t\tBlock: convert.ConfigSchemaToProto(s.getProviderSchemaBlock()),\n\t}\n\n\tfor typ, res := range s.provider.ResourcesMap {\n\t\tresp.ResourceSchemas[typ] = &proto.Schema{\n\t\t\tVersion: int64(res.SchemaVersion),\n\t\t\tBlock:   convert.ConfigSchemaToProto(res.CoreConfigSchema()),\n\t\t}\n\t}\n\n\tfor typ, dat := range s.provider.DataSourcesMap {\n\t\tresp.DataSourceSchemas[typ] = &proto.Schema{\n\t\t\tVersion: int64(dat.SchemaVersion),\n\t\t\tBlock:   convert.ConfigSchemaToProto(dat.CoreConfigSchema()),\n\t\t}\n\t}\n\n\treturn resp, nil\n}\n\nfunc (s *GRPCProviderServer) getProviderSchemaBlock() *configschema.Block {\n\treturn schema.InternalMap(s.provider.Schema).CoreConfigSchema()\n}\n\nfunc (s *GRPCProviderServer) getResourceSchemaBlock(name string) *configschema.Block {\n\tres := s.provider.ResourcesMap[name]\n\treturn res.CoreConfigSchema()\n}\n\nfunc (s *GRPCProviderServer) getDatasourceSchemaBlock(name string) *configschema.Block {\n\tdat := s.provider.DataSourcesMap[name]\n\treturn dat.CoreConfigSchema()\n}\n\nfunc (s *GRPCProviderServer) PrepareProviderConfig(_ context.Context, req *proto.PrepareProviderConfig_Request) (*proto.PrepareProviderConfig_Response, error) {\n\tresp := &proto.PrepareProviderConfig_Response{}\n\n\tschemaBlock := s.getProviderSchemaBlock()\n\n\tconfigVal, err := msgpack.Unmarshal(req.Config.Msgpack, schemaBlock.ImpliedType())\n\tif err != nil {\n\t\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)\n\t\treturn resp, nil\n\t}\n\n\t// lookup any required, top-level attributes that are Null, and see if we\n\t// have a Default value available.\n\tconfigVal, err = cty.Transform(configVal, func(path cty.Path, val cty.Value) (cty.Value, error) {\n\t\t// we're only looking for top-level attributes\n\t\tif len(path) != 1 {\n\t\t\treturn val, nil\n\t\t}\n\n\t\t// nothing to do if we already have a value\n\t\tif !val.IsNull() {\n\t\t\treturn val, nil\n\t\t}\n\n\t\t// get the Schema definition for this attribute\n\t\tgetAttr, ok := path[0].(cty.GetAttrStep)\n\t\t// these should all exist, but just ignore anything strange\n\t\tif !ok {\n\t\t\treturn val, nil\n\t\t}\n\n\t\tattrSchema := s.provider.Schema[getAttr.Name]\n\t\t// continue to ignore anything that doesn't match\n\t\tif attrSchema == nil {\n\t\t\treturn val, nil\n\t\t}\n\n\t\t// this is deprecated, so don't set it\n\t\tif attrSchema.Deprecated != \"\" || attrSchema.Removed != \"\" {\n\t\t\treturn val, nil\n\t\t}\n\n\t\t// find a default value if it exists\n\t\tdef, err := attrSchema.DefaultValue()\n\t\tif err != nil {\n\t\t\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, fmt.Errorf(\"error getting default for %q: %s\", getAttr.Name, err))\n\t\t\treturn val, err\n\t\t}\n\n\t\t// no default\n\t\tif def == nil {\n\t\t\treturn val, nil\n\t\t}\n\n\t\t// create a cty.Value and make sure it's the correct type\n\t\ttmpVal := hcl2shim.HCL2ValueFromConfigValue(def)\n\n\t\t// helper/schema used to allow setting \"\" to a bool\n\t\tif val.Type() == cty.Bool && tmpVal.RawEquals(cty.StringVal(\"\")) {\n\t\t\t// return a warning about the conversion\n\t\t\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, \"provider set empty string as default value for bool \"+getAttr.Name)\n\t\t\ttmpVal = cty.False\n\t\t}\n\n\t\tval, err = ctyconvert.Convert(tmpVal, val.Type())\n\t\tif err != nil {\n\t\t\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, fmt.Errorf(\"error setting default for %q: %s\", getAttr.Name, err))\n\t\t}\n\n\t\treturn val, err\n\t})\n\tif err != nil {\n\t\t// any error here was already added to the diagnostics\n\t\treturn resp, nil\n\t}\n\n\tconfigVal, err = schemaBlock.CoerceValue(configVal)\n\tif err != nil {\n\t\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)\n\t\treturn resp, nil\n\t}\n\n\t// Ensure there are no nulls that will cause helper/schema to panic.\n\tif err := validateConfigNulls(configVal, nil); err != nil {\n\t\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)\n\t\treturn resp, nil\n\t}\n\n\tconfig := terraform.NewResourceConfigShimmed(configVal, schemaBlock)\n\n\twarns, errs := s.provider.Validate(config)\n\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, convert.WarnsAndErrsToProto(warns, errs))\n\n\tpreparedConfigMP, err := msgpack.Marshal(configVal, schemaBlock.ImpliedType())\n\tif err != nil {\n\t\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)\n\t\treturn resp, nil\n\t}\n\n\tresp.PreparedConfig = &proto.DynamicValue{Msgpack: preparedConfigMP}\n\n\treturn resp, nil\n}\n\nfunc (s *GRPCProviderServer) ValidateResourceTypeConfig(_ context.Context, req *proto.ValidateResourceTypeConfig_Request) (*proto.ValidateResourceTypeConfig_Response, error) {\n\tresp := &proto.ValidateResourceTypeConfig_Response{}\n\n\tschemaBlock := s.getResourceSchemaBlock(req.TypeName)\n\n\tconfigVal, err := msgpack.Unmarshal(req.Config.Msgpack, schemaBlock.ImpliedType())\n\tif err != nil {\n\t\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)\n\t\treturn resp, nil\n\t}\n\n\tconfig := terraform.NewResourceConfigShimmed(configVal, schemaBlock)\n\n\twarns, errs := s.provider.ValidateResource(req.TypeName, config)\n\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, convert.WarnsAndErrsToProto(warns, errs))\n\n\treturn resp, nil\n}\n\nfunc (s *GRPCProviderServer) ValidateDataSourceConfig(_ context.Context, req *proto.ValidateDataSourceConfig_Request) (*proto.ValidateDataSourceConfig_Response, error) {\n\tresp := &proto.ValidateDataSourceConfig_Response{}\n\n\tschemaBlock := s.getDatasourceSchemaBlock(req.TypeName)\n\n\tconfigVal, err := msgpack.Unmarshal(req.Config.Msgpack, schemaBlock.ImpliedType())\n\tif err != nil {\n\t\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)\n\t\treturn resp, nil\n\t}\n\n\t// Ensure there are no nulls that will cause helper/schema to panic.\n\tif err := validateConfigNulls(configVal, nil); err != nil {\n\t\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)\n\t\treturn resp, nil\n\t}\n\n\tconfig := terraform.NewResourceConfigShimmed(configVal, schemaBlock)\n\n\twarns, errs := s.provider.ValidateDataSource(req.TypeName, config)\n\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, convert.WarnsAndErrsToProto(warns, errs))\n\n\treturn resp, nil\n}\n\nfunc (s *GRPCProviderServer) UpgradeResourceState(_ context.Context, req *proto.UpgradeResourceState_Request) (*proto.UpgradeResourceState_Response, error) {\n\tresp := &proto.UpgradeResourceState_Response{}\n\n\tres := s.provider.ResourcesMap[req.TypeName]\n\tschemaBlock := s.getResourceSchemaBlock(req.TypeName)\n\n\tversion := int(req.Version)\n\n\tjsonMap := map[string]interface{}{}\n\tvar err error\n\n\tswitch {\n\t// We first need to upgrade a flatmap state if it exists.\n\t// There should never be both a JSON and Flatmap state in the request.\n\tcase len(req.RawState.Flatmap) > 0:\n\t\tjsonMap, version, err = s.upgradeFlatmapState(version, req.RawState.Flatmap, res)\n\t\tif err != nil {\n\t\t\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)\n\t\t\treturn resp, nil\n\t\t}\n\t// if there's a JSON state, we need to decode it.\n\tcase len(req.RawState.Json) > 0:\n\t\terr = json.Unmarshal(req.RawState.Json, &jsonMap)\n\t\tif err != nil {\n\t\t\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)\n\t\t\treturn resp, nil\n\t\t}\n\tdefault:\n\t\tlog.Println(\"[DEBUG] no state provided to upgrade\")\n\t\treturn resp, nil\n\t}\n\n\t// complete the upgrade of the JSON states\n\tjsonMap, err = s.upgradeJSONState(version, jsonMap, res)\n\tif err != nil {\n\t\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)\n\t\treturn resp, nil\n\t}\n\n\t// The provider isn't required to clean out removed fields\n\ts.removeAttributes(jsonMap, schemaBlock.ImpliedType())\n\n\t// now we need to turn the state into the default json representation, so\n\t// that it can be re-decoded using the actual schema.\n\tval, err := schema.JSONMapToStateValue(jsonMap, schemaBlock)\n\tif err != nil {\n\t\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)\n\t\treturn resp, nil\n\t}\n\n\t// encode the final state to the expected msgpack format\n\tnewStateMP, err := msgpack.Marshal(val, schemaBlock.ImpliedType())\n\tif err != nil {\n\t\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)\n\t\treturn resp, nil\n\t}\n\n\tresp.UpgradedState = &proto.DynamicValue{Msgpack: newStateMP}\n\treturn resp, nil\n}\n\n// upgradeFlatmapState takes a legacy flatmap state, upgrades it using Migrate\n// state if necessary, and converts it to the new JSON state format decoded as a\n// map[string]interface{}.\n// upgradeFlatmapState returns the json map along with the corresponding schema\n// version.\nfunc (s *GRPCProviderServer) upgradeFlatmapState(version int, m map[string]string, res *schema.Resource) (map[string]interface{}, int, error) {\n\t// this will be the version we've upgraded so, defaulting to the given\n\t// version in case no migration was called.\n\tupgradedVersion := version\n\n\t// first determine if we need to call the legacy MigrateState func\n\trequiresMigrate := version < res.SchemaVersion\n\n\tschemaType := res.CoreConfigSchema().ImpliedType()\n\n\t// if there are any StateUpgraders, then we need to only compare\n\t// against the first version there\n\tif len(res.StateUpgraders) > 0 {\n\t\trequiresMigrate = version < res.StateUpgraders[0].Version\n\t}\n\n\tif requiresMigrate {\n\t\tif res.MigrateState == nil {\n\t\t\treturn nil, 0, errors.New(\"cannot upgrade state, missing MigrateState function\")\n\t\t}\n\n\t\tis := &terraform.InstanceState{\n\t\t\tID:         m[\"id\"],\n\t\t\tAttributes: m,\n\t\t\tMeta: map[string]interface{}{\n\t\t\t\t\"schema_version\": strconv.Itoa(version),\n\t\t\t},\n\t\t}\n\n\t\tis, err := res.MigrateState(version, is, s.provider.Meta())\n\t\tif err != nil {\n\t\t\treturn nil, 0, err\n\t\t}\n\n\t\t// re-assign the map in case there was a copy made, making sure to keep\n\t\t// the ID\n\t\tm := is.Attributes\n\t\tm[\"id\"] = is.ID\n\n\t\t// if there are further upgraders, then we've only updated that far\n\t\tif len(res.StateUpgraders) > 0 {\n\t\t\tschemaType = res.StateUpgraders[0].Type\n\t\t\tupgradedVersion = res.StateUpgraders[0].Version\n\t\t}\n\t} else {\n\t\t// the schema version may be newer than the MigrateState functions\n\t\t// handled and older than the current, but still stored in the flatmap\n\t\t// form. If that's the case, we need to find the correct schema type to\n\t\t// convert the state.\n\t\tfor _, upgrader := range res.StateUpgraders {\n\t\t\tif upgrader.Version == version {\n\t\t\t\tschemaType = upgrader.Type\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\n\t// now we know the state is up to the latest version that handled the\n\t// flatmap format state. Now we can upgrade the format and continue from\n\t// there.\n\tnewConfigVal, err := hcl2shim.HCL2ValueFromFlatmap(m, schemaType)\n\tif err != nil {\n\t\treturn nil, 0, err\n\t}\n\n\tjsonMap, err := schema.StateValueToJSONMap(newConfigVal, schemaType)\n\treturn jsonMap, upgradedVersion, err\n}\n\nfunc (s *GRPCProviderServer) upgradeJSONState(version int, m map[string]interface{}, res *schema.Resource) (map[string]interface{}, error) {\n\tvar err error\n\n\tfor _, upgrader := range res.StateUpgraders {\n\t\tif version != upgrader.Version {\n\t\t\tcontinue\n\t\t}\n\n\t\tm, err = upgrader.Upgrade(m, s.provider.Meta())\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tversion++\n\t}\n\n\treturn m, nil\n}\n\n// Remove any attributes no longer present in the schema, so that the json can\n// be correctly decoded.\nfunc (s *GRPCProviderServer) removeAttributes(v interface{}, ty cty.Type) {\n\t// we're only concerned with finding maps that corespond to object\n\t// attributes\n\tswitch v := v.(type) {\n\tcase []interface{}:\n\t\t// If these aren't blocks the next call will be a noop\n\t\tif ty.IsListType() || ty.IsSetType() {\n\t\t\teTy := ty.ElementType()\n\t\t\tfor _, eV := range v {\n\t\t\t\ts.removeAttributes(eV, eTy)\n\t\t\t}\n\t\t}\n\t\treturn\n\tcase map[string]interface{}:\n\t\t// map blocks aren't yet supported, but handle this just in case\n\t\tif ty.IsMapType() {\n\t\t\teTy := ty.ElementType()\n\t\t\tfor _, eV := range v {\n\t\t\t\ts.removeAttributes(eV, eTy)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\n\t\tif ty == cty.DynamicPseudoType {\n\t\t\tlog.Printf(\"[DEBUG] ignoring dynamic block: %#v\\n\", v)\n\t\t\treturn\n\t\t}\n\n\t\tif !ty.IsObjectType() {\n\t\t\t// This shouldn't happen, and will fail to decode further on, so\n\t\t\t// there's no need to handle it here.\n\t\t\tlog.Printf(\"[WARN] unexpected type %#v for map in json state\", ty)\n\t\t\treturn\n\t\t}\n\n\t\tattrTypes := ty.AttributeTypes()\n\t\tfor attr, attrV := range v {\n\t\t\tattrTy, ok := attrTypes[attr]\n\t\t\tif !ok {\n\t\t\t\tlog.Printf(\"[DEBUG] attribute %q no longer present in schema\", attr)\n\t\t\t\tdelete(v, attr)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\ts.removeAttributes(attrV, attrTy)\n\t\t}\n\t}\n}\n\nfunc (s *GRPCProviderServer) Stop(_ context.Context, _ *proto.Stop_Request) (*proto.Stop_Response, error) {\n\tresp := &proto.Stop_Response{}\n\n\terr := s.provider.Stop()\n\tif err != nil {\n\t\tresp.Error = err.Error()\n\t}\n\n\treturn resp, nil\n}\n\nfunc (s *GRPCProviderServer) Configure(_ context.Context, req *proto.Configure_Request) (*proto.Configure_Response, error) {\n\tresp := &proto.Configure_Response{}\n\n\tschemaBlock := s.getProviderSchemaBlock()\n\n\tconfigVal, err := msgpack.Unmarshal(req.Config.Msgpack, schemaBlock.ImpliedType())\n\tif err != nil {\n\t\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)\n\t\treturn resp, nil\n\t}\n\n\ts.provider.TerraformVersion = req.TerraformVersion\n\n\t// Ensure there are no nulls that will cause helper/schema to panic.\n\tif err := validateConfigNulls(configVal, nil); err != nil {\n\t\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)\n\t\treturn resp, nil\n\t}\n\n\tconfig := terraform.NewResourceConfigShimmed(configVal, schemaBlock)\n\terr = s.provider.Configure(config)\n\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)\n\n\treturn resp, nil\n}\n\nfunc (s *GRPCProviderServer) ReadResource(_ context.Context, req *proto.ReadResource_Request) (*proto.ReadResource_Response, error) {\n\tresp := &proto.ReadResource_Response{}\n\n\tres := s.provider.ResourcesMap[req.TypeName]\n\tschemaBlock := s.getResourceSchemaBlock(req.TypeName)\n\n\tstateVal, err := msgpack.Unmarshal(req.CurrentState.Msgpack, schemaBlock.ImpliedType())\n\tif err != nil {\n\t\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)\n\t\treturn resp, nil\n\t}\n\n\tinstanceState, err := res.ShimInstanceStateFromValue(stateVal)\n\tif err != nil {\n\t\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)\n\t\treturn resp, nil\n\t}\n\n\tnewInstanceState, err := res.RefreshWithoutUpgrade(instanceState, s.provider.Meta())\n\tif err != nil {\n\t\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)\n\t\treturn resp, nil\n\t}\n\n\tif newInstanceState == nil || newInstanceState.ID == \"\" {\n\t\t// The old provider API used an empty id to signal that the remote\n\t\t// object appears to have been deleted, but our new protocol expects\n\t\t// to see a null value (in the cty sense) in that case.\n\t\tnewStateMP, err := msgpack.Marshal(cty.NullVal(schemaBlock.ImpliedType()), schemaBlock.ImpliedType())\n\t\tif err != nil {\n\t\t\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)\n\t\t}\n\t\tresp.NewState = &proto.DynamicValue{\n\t\t\tMsgpack: newStateMP,\n\t\t}\n\t\treturn resp, nil\n\t}\n\n\t// helper/schema should always copy the ID over, but do it again just to be safe\n\tnewInstanceState.Attributes[\"id\"] = newInstanceState.ID\n\n\tnewStateVal, err := hcl2shim.HCL2ValueFromFlatmap(newInstanceState.Attributes, schemaBlock.ImpliedType())\n\tif err != nil {\n\t\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)\n\t\treturn resp, nil\n\t}\n\n\tnewStateVal = normalizeNullValues(newStateVal, stateVal, false)\n\tnewStateVal = copyTimeoutValues(newStateVal, stateVal)\n\n\tnewStateMP, err := msgpack.Marshal(newStateVal, schemaBlock.ImpliedType())\n\tif err != nil {\n\t\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)\n\t\treturn resp, nil\n\t}\n\n\tresp.NewState = &proto.DynamicValue{\n\t\tMsgpack: newStateMP,\n\t}\n\n\treturn resp, nil\n}\n\nfunc (s *GRPCProviderServer) PlanResourceChange(_ context.Context, req *proto.PlanResourceChange_Request) (*proto.PlanResourceChange_Response, error) {\n\tresp := &proto.PlanResourceChange_Response{}\n\n\t// This is a signal to Terraform Core that we're doing the best we can to\n\t// shim the legacy type system of the SDK onto the Terraform type system\n\t// but we need it to cut us some slack. This setting should not be taken\n\t// forward to any new SDK implementations, since setting it prevents us\n\t// from catching certain classes of provider bug that can lead to\n\t// confusing downstream errors.\n\tresp.LegacyTypeSystem = true\n\n\tres := s.provider.ResourcesMap[req.TypeName]\n\tschemaBlock := s.getResourceSchemaBlock(req.TypeName)\n\n\tpriorStateVal, err := msgpack.Unmarshal(req.PriorState.Msgpack, schemaBlock.ImpliedType())\n\tif err != nil {\n\t\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)\n\t\treturn resp, nil\n\t}\n\n\tcreate := priorStateVal.IsNull()\n\n\tproposedNewStateVal, err := msgpack.Unmarshal(req.ProposedNewState.Msgpack, schemaBlock.ImpliedType())\n\tif err != nil {\n\t\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)\n\t\treturn resp, nil\n\t}\n\n\t// We don't usually plan destroys, but this can return early in any case.\n\tif proposedNewStateVal.IsNull() {\n\t\tresp.PlannedState = req.ProposedNewState\n\t\treturn resp, nil\n\t}\n\n\tinfo := &terraform.InstanceInfo{\n\t\tType: req.TypeName,\n\t}\n\n\tpriorState, err := res.ShimInstanceStateFromValue(priorStateVal)\n\tif err != nil {\n\t\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)\n\t\treturn resp, nil\n\t}\n\tpriorPrivate := make(map[string]interface{})\n\tif len(req.PriorPrivate) > 0 {\n\t\tif err := json.Unmarshal(req.PriorPrivate, &priorPrivate); err != nil {\n\t\t\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)\n\t\t\treturn resp, nil\n\t\t}\n\t}\n\n\tpriorState.Meta = priorPrivate\n\n\t// Ensure there are no nulls that will cause helper/schema to panic.\n\tif err := validateConfigNulls(proposedNewStateVal, nil); err != nil {\n\t\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)\n\t\treturn resp, nil\n\t}\n\n\t// turn the proposed state into a legacy configuration\n\tcfg := terraform.NewResourceConfigShimmed(proposedNewStateVal, schemaBlock)\n\n\tdiff, err := s.provider.SimpleDiff(info, priorState, cfg)\n\tif err != nil {\n\t\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)\n\t\treturn resp, nil\n\t}\n\n\t// if this is a new instance, we need to make sure ID is going to be computed\n\tif create {\n\t\tif diff == nil {\n\t\t\tdiff = terraform.NewInstanceDiff()\n\t\t}\n\n\t\tdiff.Attributes[\"id\"] = &terraform.ResourceAttrDiff{\n\t\t\tNewComputed: true,\n\t\t}\n\t}\n\n\tif diff == nil || len(diff.Attributes) == 0 {\n\t\t// schema.Provider.Diff returns nil if it ends up making a diff with no\n\t\t// changes, but our new interface wants us to return an actual change\n\t\t// description that _shows_ there are no changes. This is always the\n\t\t// prior state, because we force a diff above if this is a new instance.\n\t\tresp.PlannedState = req.PriorState\n\t\treturn resp, nil\n\t}\n\n\tif priorState == nil {\n\t\tpriorState = &terraform.InstanceState{}\n\t}\n\n\t// now we need to apply the diff to the prior state, so get the planned state\n\tplannedAttrs, err := diff.Apply(priorState.Attributes, schemaBlock)\n\n\tplannedStateVal, err := hcl2shim.HCL2ValueFromFlatmap(plannedAttrs, schemaBlock.ImpliedType())\n\tif err != nil {\n\t\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)\n\t\treturn resp, nil\n\t}\n\n\tplannedStateVal, err = schemaBlock.CoerceValue(plannedStateVal)\n\tif err != nil {\n\t\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)\n\t\treturn resp, nil\n\t}\n\n\tplannedStateVal = normalizeNullValues(plannedStateVal, proposedNewStateVal, false)\n\n\tif err != nil {\n\t\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)\n\t\treturn resp, nil\n\t}\n\n\tplannedStateVal = copyTimeoutValues(plannedStateVal, proposedNewStateVal)\n\n\t// The old SDK code has some imprecisions that cause it to sometimes\n\t// generate differences that the SDK itself does not consider significant\n\t// but Terraform Core would. To avoid producing weird do-nothing diffs\n\t// in that case, we'll check if the provider as produced something we\n\t// think is \"equivalent\" to the prior state and just return the prior state\n\t// itself if so, thus ensuring that Terraform Core will treat this as\n\t// a no-op. See the docs for ValuesSDKEquivalent for some caveats on its\n\t// accuracy.\n\tforceNoChanges := false\n\tif hcl2shim.ValuesSDKEquivalent(priorStateVal, plannedStateVal) {\n\t\tplannedStateVal = priorStateVal\n\t\tforceNoChanges = true\n\t}\n\n\t// if this was creating the resource, we need to set any remaining computed\n\t// fields\n\tif create {\n\t\tplannedStateVal = SetUnknowns(plannedStateVal, schemaBlock)\n\t}\n\n\tplannedMP, err := msgpack.Marshal(plannedStateVal, schemaBlock.ImpliedType())\n\tif err != nil {\n\t\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)\n\t\treturn resp, nil\n\t}\n\tresp.PlannedState = &proto.DynamicValue{\n\t\tMsgpack: plannedMP,\n\t}\n\n\t// Now we need to store any NewExtra values, which are where any actual\n\t// StateFunc modified config fields are hidden.\n\tprivateMap := diff.Meta\n\tif privateMap == nil {\n\t\tprivateMap = map[string]interface{}{}\n\t}\n\n\tnewExtra := map[string]interface{}{}\n\n\tfor k, v := range diff.Attributes {\n\t\tif v.NewExtra != nil {\n\t\t\tnewExtra[k] = v.NewExtra\n\t\t}\n\t}\n\tprivateMap[newExtraKey] = newExtra\n\n\t// the Meta field gets encoded into PlannedPrivate\n\tplannedPrivate, err := json.Marshal(privateMap)\n\tif err != nil {\n\t\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)\n\t\treturn resp, nil\n\t}\n\tresp.PlannedPrivate = plannedPrivate\n\n\t// collect the attributes that require instance replacement, and convert\n\t// them to cty.Paths.\n\tvar requiresNew []string\n\tif !forceNoChanges {\n\t\tfor attr, d := range diff.Attributes {\n\t\t\tif d.RequiresNew {\n\t\t\t\trequiresNew = append(requiresNew, attr)\n\t\t\t}\n\t\t}\n\t}\n\n\t// If anything requires a new resource already, or the \"id\" field indicates\n\t// that we will be creating a new resource, then we need to add that to\n\t// RequiresReplace so that core can tell if the instance is being replaced\n\t// even if changes are being suppressed via \"ignore_changes\".\n\tid := plannedStateVal.GetAttr(\"id\")\n\tif len(requiresNew) > 0 || id.IsNull() || !id.IsKnown() {\n\t\trequiresNew = append(requiresNew, \"id\")\n\t}\n\n\trequiresReplace, err := hcl2shim.RequiresReplace(requiresNew, schemaBlock.ImpliedType())\n\tif err != nil {\n\t\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)\n\t\treturn resp, nil\n\t}\n\n\t// convert these to the protocol structures\n\tfor _, p := range requiresReplace {\n\t\tresp.RequiresReplace = append(resp.RequiresReplace, pathToAttributePath(p))\n\t}\n\n\treturn resp, nil\n}\n\nfunc (s *GRPCProviderServer) ApplyResourceChange(_ context.Context, req *proto.ApplyResourceChange_Request) (*proto.ApplyResourceChange_Response, error) {\n\tresp := &proto.ApplyResourceChange_Response{\n\t\t// Start with the existing state as a fallback\n\t\tNewState: req.PriorState,\n\t}\n\n\tres := s.provider.ResourcesMap[req.TypeName]\n\tschemaBlock := s.getResourceSchemaBlock(req.TypeName)\n\n\tpriorStateVal, err := msgpack.Unmarshal(req.PriorState.Msgpack, schemaBlock.ImpliedType())\n\tif err != nil {\n\t\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)\n\t\treturn resp, nil\n\t}\n\n\tplannedStateVal, err := msgpack.Unmarshal(req.PlannedState.Msgpack, schemaBlock.ImpliedType())\n\tif err != nil {\n\t\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)\n\t\treturn resp, nil\n\t}\n\n\tinfo := &terraform.InstanceInfo{\n\t\tType: req.TypeName,\n\t}\n\n\tpriorState, err := res.ShimInstanceStateFromValue(priorStateVal)\n\tif err != nil {\n\t\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)\n\t\treturn resp, nil\n\t}\n\n\tprivate := make(map[string]interface{})\n\tif len(req.PlannedPrivate) > 0 {\n\t\tif err := json.Unmarshal(req.PlannedPrivate, &private); err != nil {\n\t\t\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)\n\t\t\treturn resp, nil\n\t\t}\n\t}\n\n\tvar diff *terraform.InstanceDiff\n\tdestroy := false\n\n\t// a null state means we are destroying the instance\n\tif plannedStateVal.IsNull() {\n\t\tdestroy = true\n\t\tdiff = &terraform.InstanceDiff{\n\t\t\tAttributes: make(map[string]*terraform.ResourceAttrDiff),\n\t\t\tMeta:       make(map[string]interface{}),\n\t\t\tDestroy:    true,\n\t\t}\n\t} else {\n\t\tdiff, err = schema.DiffFromValues(priorStateVal, plannedStateVal, stripResourceModifiers(res))\n\t\tif err != nil {\n\t\t\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)\n\t\t\treturn resp, nil\n\t\t}\n\t}\n\n\tif diff == nil {\n\t\tdiff = &terraform.InstanceDiff{\n\t\t\tAttributes: make(map[string]*terraform.ResourceAttrDiff),\n\t\t\tMeta:       make(map[string]interface{}),\n\t\t}\n\t}\n\n\t// add NewExtra Fields that may have been stored in the private data\n\tif newExtra := private[newExtraKey]; newExtra != nil {\n\t\tfor k, v := range newExtra.(map[string]interface{}) {\n\t\t\td := diff.Attributes[k]\n\n\t\t\tif d == nil {\n\t\t\t\td = &terraform.ResourceAttrDiff{}\n\t\t\t}\n\n\t\t\td.NewExtra = v\n\t\t\tdiff.Attributes[k] = d\n\t\t}\n\t}\n\n\tif private != nil {\n\t\tdiff.Meta = private\n\t}\n\n\tfor k, d := range diff.Attributes {\n\t\t// We need to turn off any RequiresNew. There could be attributes\n\t\t// without changes in here inserted by helper/schema, but if they have\n\t\t// RequiresNew then the state will be dropped from the ResourceData.\n\t\td.RequiresNew = false\n\n\t\t// Check that any \"removed\" attributes that don't actually exist in the\n\t\t// prior state, or helper/schema will confuse itself\n\t\tif d.NewRemoved {\n\t\t\tif _, ok := priorState.Attributes[k]; !ok {\n\t\t\t\tdelete(diff.Attributes, k)\n\t\t\t}\n\t\t}\n\t}\n\n\tnewInstanceState, err := s.provider.Apply(info, priorState, diff)\n\t// we record the error here, but continue processing any returned state.\n\tif err != nil {\n\t\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)\n\t}\n\tnewStateVal := cty.NullVal(schemaBlock.ImpliedType())\n\n\t// Always return a null value for destroy.\n\t// While this is usually indicated by a nil state, check for missing ID or\n\t// attributes in the case of a provider failure.\n\tif destroy || newInstanceState == nil || newInstanceState.Attributes == nil || newInstanceState.ID == \"\" {\n\t\tnewStateMP, err := msgpack.Marshal(newStateVal, schemaBlock.ImpliedType())\n\t\tif err != nil {\n\t\t\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)\n\t\t\treturn resp, nil\n\t\t}\n\t\tresp.NewState = &proto.DynamicValue{\n\t\t\tMsgpack: newStateMP,\n\t\t}\n\t\treturn resp, nil\n\t}\n\n\t// We keep the null val if we destroyed the resource, otherwise build the\n\t// entire object, even if the new state was nil.\n\tnewStateVal, err = schema.StateValueFromInstanceState(newInstanceState, schemaBlock.ImpliedType())\n\tif err != nil {\n\t\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)\n\t\treturn resp, nil\n\t}\n\n\tnewStateVal = normalizeNullValues(newStateVal, plannedStateVal, true)\n\n\tnewStateVal = copyTimeoutValues(newStateVal, plannedStateVal)\n\n\tnewStateMP, err := msgpack.Marshal(newStateVal, schemaBlock.ImpliedType())\n\tif err != nil {\n\t\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)\n\t\treturn resp, nil\n\t}\n\tresp.NewState = &proto.DynamicValue{\n\t\tMsgpack: newStateMP,\n\t}\n\n\tmeta, err := json.Marshal(newInstanceState.Meta)\n\tif err != nil {\n\t\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)\n\t\treturn resp, nil\n\t}\n\tresp.Private = meta\n\n\t// This is a signal to Terraform Core that we're doing the best we can to\n\t// shim the legacy type system of the SDK onto the Terraform type system\n\t// but we need it to cut us some slack. This setting should not be taken\n\t// forward to any new SDK implementations, since setting it prevents us\n\t// from catching certain classes of provider bug that can lead to\n\t// confusing downstream errors.\n\tresp.LegacyTypeSystem = true\n\n\treturn resp, nil\n}\n\nfunc (s *GRPCProviderServer) ImportResourceState(_ context.Context, req *proto.ImportResourceState_Request) (*proto.ImportResourceState_Response, error) {\n\tresp := &proto.ImportResourceState_Response{}\n\n\tinfo := &terraform.InstanceInfo{\n\t\tType: req.TypeName,\n\t}\n\n\tnewInstanceStates, err := s.provider.ImportState(info, req.Id)\n\tif err != nil {\n\t\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)\n\t\treturn resp, nil\n\t}\n\n\tfor _, is := range newInstanceStates {\n\t\t// copy the ID again just to be sure it wasn't missed\n\t\tis.Attributes[\"id\"] = is.ID\n\n\t\tresourceType := is.Ephemeral.Type\n\t\tif resourceType == \"\" {\n\t\t\tresourceType = req.TypeName\n\t\t}\n\n\t\tschemaBlock := s.getResourceSchemaBlock(resourceType)\n\t\tnewStateVal, err := hcl2shim.HCL2ValueFromFlatmap(is.Attributes, schemaBlock.ImpliedType())\n\t\tif err != nil {\n\t\t\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)\n\t\t\treturn resp, nil\n\t\t}\n\n\t\tnewStateMP, err := msgpack.Marshal(newStateVal, schemaBlock.ImpliedType())\n\t\tif err != nil {\n\t\t\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)\n\t\t\treturn resp, nil\n\t\t}\n\n\t\tmeta, err := json.Marshal(is.Meta)\n\t\tif err != nil {\n\t\t\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)\n\t\t\treturn resp, nil\n\t\t}\n\n\t\timportedResource := &proto.ImportResourceState_ImportedResource{\n\t\t\tTypeName: resourceType,\n\t\t\tState: &proto.DynamicValue{\n\t\t\t\tMsgpack: newStateMP,\n\t\t\t},\n\t\t\tPrivate: meta,\n\t\t}\n\n\t\tresp.ImportedResources = append(resp.ImportedResources, importedResource)\n\t}\n\n\treturn resp, nil\n}\n\nfunc (s *GRPCProviderServer) ReadDataSource(_ context.Context, req *proto.ReadDataSource_Request) (*proto.ReadDataSource_Response, error) {\n\tresp := &proto.ReadDataSource_Response{}\n\n\tschemaBlock := s.getDatasourceSchemaBlock(req.TypeName)\n\n\tconfigVal, err := msgpack.Unmarshal(req.Config.Msgpack, schemaBlock.ImpliedType())\n\tif err != nil {\n\t\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)\n\t\treturn resp, nil\n\t}\n\n\tinfo := &terraform.InstanceInfo{\n\t\tType: req.TypeName,\n\t}\n\n\t// Ensure there are no nulls that will cause helper/schema to panic.\n\tif err := validateConfigNulls(configVal, nil); err != nil {\n\t\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)\n\t\treturn resp, nil\n\t}\n\n\tconfig := terraform.NewResourceConfigShimmed(configVal, schemaBlock)\n\n\t// we need to still build the diff separately with the Read method to match\n\t// the old behavior\n\tdiff, err := s.provider.ReadDataDiff(info, config)\n\tif err != nil {\n\t\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)\n\t\treturn resp, nil\n\t}\n\n\t// now we can get the new complete data source\n\tnewInstanceState, err := s.provider.ReadDataApply(info, diff)\n\tif err != nil {\n\t\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)\n\t\treturn resp, nil\n\t}\n\n\tnewStateVal, err := schema.StateValueFromInstanceState(newInstanceState, schemaBlock.ImpliedType())\n\tif err != nil {\n\t\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)\n\t\treturn resp, nil\n\t}\n\n\tnewStateVal = copyTimeoutValues(newStateVal, configVal)\n\n\tnewStateMP, err := msgpack.Marshal(newStateVal, schemaBlock.ImpliedType())\n\tif err != nil {\n\t\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)\n\t\treturn resp, nil\n\t}\n\tresp.State = &proto.DynamicValue{\n\t\tMsgpack: newStateMP,\n\t}\n\treturn resp, nil\n}\n\nfunc pathToAttributePath(path cty.Path) *proto.AttributePath {\n\tvar steps []*proto.AttributePath_Step\n\n\tfor _, step := range path {\n\t\tswitch s := step.(type) {\n\t\tcase cty.GetAttrStep:\n\t\t\tsteps = append(steps, &proto.AttributePath_Step{\n\t\t\t\tSelector: &proto.AttributePath_Step_AttributeName{\n\t\t\t\t\tAttributeName: s.Name,\n\t\t\t\t},\n\t\t\t})\n\t\tcase cty.IndexStep:\n\t\t\tty := s.Key.Type()\n\t\t\tswitch ty {\n\t\t\tcase cty.Number:\n\t\t\t\ti, _ := s.Key.AsBigFloat().Int64()\n\t\t\t\tsteps = append(steps, &proto.AttributePath_Step{\n\t\t\t\t\tSelector: &proto.AttributePath_Step_ElementKeyInt{\n\t\t\t\t\t\tElementKeyInt: i,\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\tcase cty.String:\n\t\t\t\tsteps = append(steps, &proto.AttributePath_Step{\n\t\t\t\t\tSelector: &proto.AttributePath_Step_ElementKeyString{\n\t\t\t\t\t\tElementKeyString: s.Key.AsString(),\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t}\n\n\treturn &proto.AttributePath{Steps: steps}\n}\n\n// helper/schema throws away timeout values from the config and stores them in\n// the Private/Meta fields. we need to copy those values into the planned state\n// so that core doesn't see a perpetual diff with the timeout block.\nfunc copyTimeoutValues(to cty.Value, from cty.Value) cty.Value {\n\t// if `to` is null we are planning to remove it altogether.\n\tif to.IsNull() {\n\t\treturn to\n\t}\n\ttoAttrs := to.AsValueMap()\n\t// We need to remove the key since the hcl2shims will add a non-null block\n\t// because we can't determine if a single block was null from the flatmapped\n\t// values. This needs to conform to the correct schema for marshaling, so\n\t// change the value to null rather than deleting it from the object map.\n\ttimeouts, ok := toAttrs[schema.TimeoutsConfigKey]\n\tif ok {\n\t\ttoAttrs[schema.TimeoutsConfigKey] = cty.NullVal(timeouts.Type())\n\t}\n\n\t// if from is null then there are no timeouts to copy\n\tif from.IsNull() {\n\t\treturn cty.ObjectVal(toAttrs)\n\t}\n\n\tfromAttrs := from.AsValueMap()\n\ttimeouts, ok = fromAttrs[schema.TimeoutsConfigKey]\n\n\t// timeouts shouldn't be unknown, but don't copy possibly invalid values either\n\tif !ok || timeouts.IsNull() || !timeouts.IsWhollyKnown() {\n\t\t// no timeouts block to copy\n\t\treturn cty.ObjectVal(toAttrs)\n\t}\n\n\ttoAttrs[schema.TimeoutsConfigKey] = timeouts\n\n\treturn cty.ObjectVal(toAttrs)\n}\n\n// stripResourceModifiers takes a *schema.Resource and returns a deep copy with all\n// StateFuncs and CustomizeDiffs removed. This will be used during apply to\n// create a diff from a planned state where the diff modifications have already\n// been applied.\nfunc stripResourceModifiers(r *schema.Resource) *schema.Resource {\n\tif r == nil {\n\t\treturn nil\n\t}\n\t// start with a shallow copy\n\tnewResource := new(schema.Resource)\n\t*newResource = *r\n\n\tnewResource.CustomizeDiff = nil\n\tnewResource.Schema = map[string]*schema.Schema{}\n\n\tfor k, s := range r.Schema {\n\t\tnewResource.Schema[k] = stripSchema(s)\n\t}\n\n\treturn newResource\n}\n\nfunc stripSchema(s *schema.Schema) *schema.Schema {\n\tif s == nil {\n\t\treturn nil\n\t}\n\t// start with a shallow copy\n\tnewSchema := new(schema.Schema)\n\t*newSchema = *s\n\n\tnewSchema.StateFunc = nil\n\n\tswitch e := newSchema.Elem.(type) {\n\tcase *schema.Schema:\n\t\tnewSchema.Elem = stripSchema(e)\n\tcase *schema.Resource:\n\t\tnewSchema.Elem = stripResourceModifiers(e)\n\t}\n\n\treturn newSchema\n}\n\n// Zero values and empty containers may be interchanged by the apply process.\n// When there is a discrepency between src and dst value being null or empty,\n// prefer the src value. This takes a little more liberty with set types, since\n// we can't correlate modified set values. In the case of sets, if the src set\n// was wholly known we assume the value was correctly applied and copy that\n// entirely to the new value.\n// While apply prefers the src value, during plan we prefer dst whenever there\n// is an unknown or a set is involved, since the plan can alter the value\n// however it sees fit. This however means that a CustomizeDiffFunction may not\n// be able to change a null to an empty value or vice versa, but that should be\n// very uncommon nor was it reliable before 0.12 either.\nfunc normalizeNullValues(dst, src cty.Value, apply bool) cty.Value {\n\tty := dst.Type()\n\tif !src.IsNull() && !src.IsKnown() {\n\t\t// Return src during plan to retain unknown interpolated placeholders,\n\t\t// which could be lost if we're only updating a resource. If this is a\n\t\t// read scenario, then there shouldn't be any unknowns at all.\n\t\tif dst.IsNull() && !apply {\n\t\t\treturn src\n\t\t}\n\t\treturn dst\n\t}\n\n\t// Handle null/empty changes for collections during apply.\n\t// A change between null and empty values prefers src to make sure the state\n\t// is consistent between plan and apply.\n\tif ty.IsCollectionType() && apply {\n\t\tdstEmpty := !dst.IsNull() && dst.IsKnown() && dst.LengthInt() == 0\n\t\tsrcEmpty := !src.IsNull() && src.IsKnown() && src.LengthInt() == 0\n\n\t\tif (src.IsNull() && dstEmpty) || (srcEmpty && dst.IsNull()) {\n\t\t\treturn src\n\t\t}\n\t}\n\n\tif src.IsNull() || !src.IsKnown() || !dst.IsKnown() {\n\t\treturn dst\n\t}\n\n\tswitch {\n\tcase ty.IsMapType(), ty.IsObjectType():\n\t\tvar dstMap map[string]cty.Value\n\t\tif !dst.IsNull() {\n\t\t\tdstMap = dst.AsValueMap()\n\t\t}\n\t\tif dstMap == nil {\n\t\t\tdstMap = map[string]cty.Value{}\n\t\t}\n\n\t\tsrcMap := src.AsValueMap()\n\t\tfor key, v := range srcMap {\n\t\t\tdstVal, ok := dstMap[key]\n\t\t\tif !ok && apply && ty.IsMapType() {\n\t\t\t\t// don't transfer old map values to dst during apply\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif dstVal == cty.NilVal {\n\t\t\t\tif !apply && ty.IsMapType() {\n\t\t\t\t\t// let plan shape this map however it wants\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tdstVal = cty.NullVal(v.Type())\n\t\t\t}\n\n\t\t\tdstMap[key] = normalizeNullValues(dstVal, v, apply)\n\t\t}\n\n\t\t// you can't call MapVal/ObjectVal with empty maps, but nothing was\n\t\t// copied in anyway. If the dst is nil, and the src is known, assume the\n\t\t// src is correct.\n\t\tif len(dstMap) == 0 {\n\t\t\tif dst.IsNull() && src.IsWhollyKnown() && apply {\n\t\t\t\treturn src\n\t\t\t}\n\t\t\treturn dst\n\t\t}\n\n\t\tif ty.IsMapType() {\n\t\t\t// helper/schema will populate an optional+computed map with\n\t\t\t// unknowns which we have to fixup here.\n\t\t\t// It would be preferable to simply prevent any known value from\n\t\t\t// becoming unknown, but concessions have to be made to retain the\n\t\t\t// broken legacy behavior when possible.\n\t\t\tfor k, srcVal := range srcMap {\n\t\t\t\tif !srcVal.IsNull() && srcVal.IsKnown() {\n\t\t\t\t\tdstVal, ok := dstMap[k]\n\t\t\t\t\tif !ok {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\n\t\t\t\t\tif !dstVal.IsNull() && !dstVal.IsKnown() {\n\t\t\t\t\t\tdstMap[k] = srcVal\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn cty.MapVal(dstMap)\n\t\t}\n\n\t\treturn cty.ObjectVal(dstMap)\n\n\tcase ty.IsSetType():\n\t\t// If the original was wholly known, then we expect that is what the\n\t\t// provider applied. The apply process loses too much information to\n\t\t// reliably re-create the set.\n\t\tif src.IsWhollyKnown() && apply {\n\t\t\treturn src\n\t\t}\n\n\tcase ty.IsListType(), ty.IsTupleType():\n\t\t// If the dst is null, and the src is known, then we lost an empty value\n\t\t// so take the original.\n\t\tif dst.IsNull() {\n\t\t\tif src.IsWhollyKnown() && src.LengthInt() == 0 && apply {\n\t\t\t\treturn src\n\t\t\t}\n\n\t\t\t// if dst is null and src only contains unknown values, then we lost\n\t\t\t// those during a read or plan.\n\t\t\tif !apply && !src.IsNull() {\n\t\t\t\tallUnknown := true\n\t\t\t\tfor _, v := range src.AsValueSlice() {\n\t\t\t\t\tif v.IsKnown() {\n\t\t\t\t\t\tallUnknown = false\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif allUnknown {\n\t\t\t\t\treturn src\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn dst\n\t\t}\n\n\t\t// if the lengths are identical, then iterate over each element in succession.\n\t\tsrcLen := src.LengthInt()\n\t\tdstLen := dst.LengthInt()\n\t\tif srcLen == dstLen && srcLen > 0 {\n\t\t\tsrcs := src.AsValueSlice()\n\t\t\tdsts := dst.AsValueSlice()\n\n\t\t\tfor i := 0; i < srcLen; i++ {\n\t\t\t\tdsts[i] = normalizeNullValues(dsts[i], srcs[i], apply)\n\t\t\t}\n\n\t\t\tif ty.IsTupleType() {\n\t\t\t\treturn cty.TupleVal(dsts)\n\t\t\t}\n\t\t\treturn cty.ListVal(dsts)\n\t\t}\n\n\tcase ty.IsPrimitiveType():\n\t\tif dst.IsNull() && src.IsWhollyKnown() && apply {\n\t\t\treturn src\n\t\t}\n\t}\n\n\treturn dst\n}\n\n// validateConfigNulls checks a config value for unsupported nulls before\n// attempting to shim the value. While null values can mostly be ignored in the\n// configuration, since they're not supported in HCL1, the case where a null\n// appears in a list-like attribute (list, set, tuple) will present a nil value\n// to helper/schema which can panic. Return an error to the user in this case,\n// indicating the attribute with the null value.\nfunc validateConfigNulls(v cty.Value, path cty.Path) []*proto.Diagnostic {\n\tvar diags []*proto.Diagnostic\n\tif v.IsNull() || !v.IsKnown() {\n\t\treturn diags\n\t}\n\n\tswitch {\n\tcase v.Type().IsListType() || v.Type().IsSetType() || v.Type().IsTupleType():\n\t\tit := v.ElementIterator()\n\t\tfor it.Next() {\n\t\t\tkv, ev := it.Element()\n\t\t\tif ev.IsNull() {\n\t\t\t\tdiags = append(diags, &proto.Diagnostic{\n\t\t\t\t\tSeverity:  proto.Diagnostic_ERROR,\n\t\t\t\t\tSummary:   \"Null value found in list\",\n\t\t\t\t\tDetail:    \"Null values are not allowed for this attribute value.\",\n\t\t\t\t\tAttribute: convert.PathToAttributePath(append(path, cty.IndexStep{Key: kv})),\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\td := validateConfigNulls(ev, append(path, cty.IndexStep{Key: kv}))\n\t\t\tdiags = convert.AppendProtoDiag(diags, d)\n\t\t}\n\n\tcase v.Type().IsMapType() || v.Type().IsObjectType():\n\t\tit := v.ElementIterator()\n\t\tfor it.Next() {\n\t\t\tkv, ev := it.Element()\n\t\t\tvar step cty.PathStep\n\t\t\tswitch {\n\t\t\tcase v.Type().IsMapType():\n\t\t\t\tstep = cty.IndexStep{Key: kv}\n\t\t\tcase v.Type().IsObjectType():\n\t\t\t\tstep = cty.GetAttrStep{Name: kv.AsString()}\n\t\t\t}\n\t\t\td := validateConfigNulls(ev, append(path, step))\n\t\t\tdiags = convert.AppendProtoDiag(diags, d)\n\t\t}\n\t}\n\n\treturn diags\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/helper/plugin/grpc_provisioner.go",
    "content": "package plugin\n\nimport (\n\t\"log\"\n\n\t\"github.com/hashicorp/terraform/helper/schema\"\n\tproto \"github.com/hashicorp/terraform/internal/tfplugin5\"\n\t\"github.com/hashicorp/terraform/plugin/convert\"\n\t\"github.com/hashicorp/terraform/terraform\"\n\t\"github.com/zclconf/go-cty/cty\"\n\tctyconvert \"github.com/zclconf/go-cty/cty/convert\"\n\t\"github.com/zclconf/go-cty/cty/msgpack\"\n\tcontext \"golang.org/x/net/context\"\n)\n\n// NewGRPCProvisionerServerShim wraps a terraform.ResourceProvisioner in a\n// proto.ProvisionerServer implementation. If the provided provisioner is not a\n// *schema.Provisioner, this will return nil,\nfunc NewGRPCProvisionerServerShim(p terraform.ResourceProvisioner) *GRPCProvisionerServer {\n\tsp, ok := p.(*schema.Provisioner)\n\tif !ok {\n\t\treturn nil\n\t}\n\treturn &GRPCProvisionerServer{\n\t\tprovisioner: sp,\n\t}\n}\n\ntype GRPCProvisionerServer struct {\n\tprovisioner *schema.Provisioner\n}\n\nfunc (s *GRPCProvisionerServer) GetSchema(_ context.Context, req *proto.GetProvisionerSchema_Request) (*proto.GetProvisionerSchema_Response, error) {\n\tresp := &proto.GetProvisionerSchema_Response{}\n\n\tresp.Provisioner = &proto.Schema{\n\t\tBlock: convert.ConfigSchemaToProto(schema.InternalMap(s.provisioner.Schema).CoreConfigSchema()),\n\t}\n\n\treturn resp, nil\n}\n\nfunc (s *GRPCProvisionerServer) ValidateProvisionerConfig(_ context.Context, req *proto.ValidateProvisionerConfig_Request) (*proto.ValidateProvisionerConfig_Response, error) {\n\tresp := &proto.ValidateProvisionerConfig_Response{}\n\n\tcfgSchema := schema.InternalMap(s.provisioner.Schema).CoreConfigSchema()\n\n\tconfigVal, err := msgpack.Unmarshal(req.Config.Msgpack, cfgSchema.ImpliedType())\n\tif err != nil {\n\t\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, err)\n\t\treturn resp, nil\n\t}\n\n\tconfig := terraform.NewResourceConfigShimmed(configVal, cfgSchema)\n\n\twarns, errs := s.provisioner.Validate(config)\n\tresp.Diagnostics = convert.AppendProtoDiag(resp.Diagnostics, convert.WarnsAndErrsToProto(warns, errs))\n\n\treturn resp, nil\n}\n\n// stringMapFromValue converts a cty.Value to a map[stirng]string.\n// This will panic if the val is not a cty.Map(cty.String).\nfunc stringMapFromValue(val cty.Value) map[string]string {\n\tm := map[string]string{}\n\tif val.IsNull() || !val.IsKnown() {\n\t\treturn m\n\t}\n\n\tfor it := val.ElementIterator(); it.Next(); {\n\t\tak, av := it.Element()\n\t\tname := ak.AsString()\n\n\t\tif !av.IsKnown() || av.IsNull() {\n\t\t\tcontinue\n\t\t}\n\n\t\tav, _ = ctyconvert.Convert(av, cty.String)\n\t\tm[name] = av.AsString()\n\t}\n\n\treturn m\n}\n\n// uiOutput implements the terraform.UIOutput interface to adapt the grpc\n// stream to the legacy Provisioner.Apply method.\ntype uiOutput struct {\n\tsrv proto.Provisioner_ProvisionResourceServer\n}\n\nfunc (o uiOutput) Output(s string) {\n\terr := o.srv.Send(&proto.ProvisionResource_Response{\n\t\tOutput: s,\n\t})\n\tif err != nil {\n\t\tlog.Printf(\"[ERROR] %s\", err)\n\t}\n}\n\nfunc (s *GRPCProvisionerServer) ProvisionResource(req *proto.ProvisionResource_Request, srv proto.Provisioner_ProvisionResourceServer) error {\n\t// We send back a diagnostics over the stream if there was a\n\t// provisioner-side problem.\n\tsrvResp := &proto.ProvisionResource_Response{}\n\n\tcfgSchema := schema.InternalMap(s.provisioner.Schema).CoreConfigSchema()\n\tcfgVal, err := msgpack.Unmarshal(req.Config.Msgpack, cfgSchema.ImpliedType())\n\tif err != nil {\n\t\tsrvResp.Diagnostics = convert.AppendProtoDiag(srvResp.Diagnostics, err)\n\t\tsrv.Send(srvResp)\n\t\treturn nil\n\t}\n\tresourceConfig := terraform.NewResourceConfigShimmed(cfgVal, cfgSchema)\n\n\tconnVal, err := msgpack.Unmarshal(req.Connection.Msgpack, cty.Map(cty.String))\n\tif err != nil {\n\t\tsrvResp.Diagnostics = convert.AppendProtoDiag(srvResp.Diagnostics, err)\n\t\tsrv.Send(srvResp)\n\t\treturn nil\n\t}\n\n\tconn := stringMapFromValue(connVal)\n\n\tinstanceState := &terraform.InstanceState{\n\t\tEphemeral: terraform.EphemeralState{\n\t\t\tConnInfo: conn,\n\t\t},\n\t\tMeta: make(map[string]interface{}),\n\t}\n\n\terr = s.provisioner.Apply(uiOutput{srv}, instanceState, resourceConfig)\n\tif err != nil {\n\t\tsrvResp.Diagnostics = convert.AppendProtoDiag(srvResp.Diagnostics, err)\n\t\tsrv.Send(srvResp)\n\t}\n\treturn nil\n}\n\nfunc (s *GRPCProvisionerServer) Stop(_ context.Context, req *proto.Stop_Request) (*proto.Stop_Response, error) {\n\tresp := &proto.Stop_Response{}\n\n\terr := s.provisioner.Stop()\n\tif err != nil {\n\t\tresp.Error = err.Error()\n\t}\n\n\treturn resp, nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/helper/plugin/unknown.go",
    "content": "package plugin\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/hashicorp/terraform/configs/configschema\"\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// SetUnknowns takes a cty.Value, and compares it to the schema setting any null\n// values which are computed to unknown.\nfunc SetUnknowns(val cty.Value, schema *configschema.Block) cty.Value {\n\tif !val.IsKnown() {\n\t\treturn val\n\t}\n\n\t// If the object was null, we still need to handle the top level attributes\n\t// which might be computed, but we don't need to expand the blocks.\n\tif val.IsNull() {\n\t\tobjMap := map[string]cty.Value{}\n\t\tallNull := true\n\t\tfor name, attr := range schema.Attributes {\n\t\t\tswitch {\n\t\t\tcase attr.Computed:\n\t\t\t\tobjMap[name] = cty.UnknownVal(attr.Type)\n\t\t\t\tallNull = false\n\t\t\tdefault:\n\t\t\t\tobjMap[name] = cty.NullVal(attr.Type)\n\t\t\t}\n\t\t}\n\n\t\t// If this object has no unknown attributes, then we can leave it null.\n\t\tif allNull {\n\t\t\treturn val\n\t\t}\n\n\t\treturn cty.ObjectVal(objMap)\n\t}\n\n\tvalMap := val.AsValueMap()\n\tnewVals := make(map[string]cty.Value)\n\n\tfor name, attr := range schema.Attributes {\n\t\tv := valMap[name]\n\n\t\tif attr.Computed && v.IsNull() {\n\t\t\tnewVals[name] = cty.UnknownVal(attr.Type)\n\t\t\tcontinue\n\t\t}\n\n\t\tnewVals[name] = v\n\t}\n\n\tfor name, blockS := range schema.BlockTypes {\n\t\tblockVal := valMap[name]\n\t\tif blockVal.IsNull() || !blockVal.IsKnown() {\n\t\t\tnewVals[name] = blockVal\n\t\t\tcontinue\n\t\t}\n\n\t\tblockValType := blockVal.Type()\n\t\tblockElementType := blockS.Block.ImpliedType()\n\n\t\t// This switches on the value type here, so we can correctly switch\n\t\t// between Tuples/Lists and Maps/Objects.\n\t\tswitch {\n\t\tcase blockS.Nesting == configschema.NestingSingle || blockS.Nesting == configschema.NestingGroup:\n\t\t\t// NestingSingle is the only exception here, where we treat the\n\t\t\t// block directly as an object\n\t\t\tnewVals[name] = SetUnknowns(blockVal, &blockS.Block)\n\n\t\tcase blockValType.IsSetType(), blockValType.IsListType(), blockValType.IsTupleType():\n\t\t\tlistVals := blockVal.AsValueSlice()\n\t\t\tnewListVals := make([]cty.Value, 0, len(listVals))\n\n\t\t\tfor _, v := range listVals {\n\t\t\t\tnewListVals = append(newListVals, SetUnknowns(v, &blockS.Block))\n\t\t\t}\n\n\t\t\tswitch {\n\t\t\tcase blockValType.IsSetType():\n\t\t\t\tswitch len(newListVals) {\n\t\t\t\tcase 0:\n\t\t\t\t\tnewVals[name] = cty.SetValEmpty(blockElementType)\n\t\t\t\tdefault:\n\t\t\t\t\tnewVals[name] = cty.SetVal(newListVals)\n\t\t\t\t}\n\t\t\tcase blockValType.IsListType():\n\t\t\t\tswitch len(newListVals) {\n\t\t\t\tcase 0:\n\t\t\t\t\tnewVals[name] = cty.ListValEmpty(blockElementType)\n\t\t\t\tdefault:\n\t\t\t\t\tnewVals[name] = cty.ListVal(newListVals)\n\t\t\t\t}\n\t\t\tcase blockValType.IsTupleType():\n\t\t\t\tnewVals[name] = cty.TupleVal(newListVals)\n\t\t\t}\n\n\t\tcase blockValType.IsMapType(), blockValType.IsObjectType():\n\t\t\tmapVals := blockVal.AsValueMap()\n\t\t\tnewMapVals := make(map[string]cty.Value)\n\n\t\t\tfor k, v := range mapVals {\n\t\t\t\tnewMapVals[k] = SetUnknowns(v, &blockS.Block)\n\t\t\t}\n\n\t\t\tswitch {\n\t\t\tcase blockValType.IsMapType():\n\t\t\t\tswitch len(newMapVals) {\n\t\t\t\tcase 0:\n\t\t\t\t\tnewVals[name] = cty.MapValEmpty(blockElementType)\n\t\t\t\tdefault:\n\t\t\t\t\tnewVals[name] = cty.MapVal(newMapVals)\n\t\t\t\t}\n\t\t\tcase blockValType.IsObjectType():\n\t\t\t\tif len(newMapVals) == 0 {\n\t\t\t\t\t// We need to populate empty values to make a valid object.\n\t\t\t\t\tfor attr, ty := range blockElementType.AttributeTypes() {\n\t\t\t\t\t\tnewMapVals[attr] = cty.NullVal(ty)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tnewVals[name] = cty.ObjectVal(newMapVals)\n\t\t\t}\n\n\t\tdefault:\n\t\t\tpanic(fmt.Sprintf(\"failed to set unknown values for nested block %q:%#v\", name, blockValType))\n\t\t}\n\t}\n\n\treturn cty.ObjectVal(newVals)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/helper/resource/error.go",
    "content": "package resource\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n\t\"time\"\n)\n\ntype NotFoundError struct {\n\tLastError    error\n\tLastRequest  interface{}\n\tLastResponse interface{}\n\tMessage      string\n\tRetries      int\n}\n\nfunc (e *NotFoundError) Error() string {\n\tif e.Message != \"\" {\n\t\treturn e.Message\n\t}\n\n\tif e.Retries > 0 {\n\t\treturn fmt.Sprintf(\"couldn't find resource (%d retries)\", e.Retries)\n\t}\n\n\treturn \"couldn't find resource\"\n}\n\n// UnexpectedStateError is returned when Refresh returns a state that's neither in Target nor Pending\ntype UnexpectedStateError struct {\n\tLastError     error\n\tState         string\n\tExpectedState []string\n}\n\nfunc (e *UnexpectedStateError) Error() string {\n\treturn fmt.Sprintf(\n\t\t\"unexpected state '%s', wanted target '%s'. last error: %s\",\n\t\te.State,\n\t\tstrings.Join(e.ExpectedState, \", \"),\n\t\te.LastError,\n\t)\n}\n\n// TimeoutError is returned when WaitForState times out\ntype TimeoutError struct {\n\tLastError     error\n\tLastState     string\n\tTimeout       time.Duration\n\tExpectedState []string\n}\n\nfunc (e *TimeoutError) Error() string {\n\texpectedState := \"resource to be gone\"\n\tif len(e.ExpectedState) > 0 {\n\t\texpectedState = fmt.Sprintf(\"state to become '%s'\", strings.Join(e.ExpectedState, \", \"))\n\t}\n\n\textraInfo := make([]string, 0)\n\tif e.LastState != \"\" {\n\t\textraInfo = append(extraInfo, fmt.Sprintf(\"last state: '%s'\", e.LastState))\n\t}\n\tif e.Timeout > 0 {\n\t\textraInfo = append(extraInfo, fmt.Sprintf(\"timeout: %s\", e.Timeout.String()))\n\t}\n\n\tsuffix := \"\"\n\tif len(extraInfo) > 0 {\n\t\tsuffix = fmt.Sprintf(\" (%s)\", strings.Join(extraInfo, \", \"))\n\t}\n\n\tif e.LastError != nil {\n\t\treturn fmt.Sprintf(\"timeout while waiting for %s%s: %s\",\n\t\t\texpectedState, suffix, e.LastError)\n\t}\n\n\treturn fmt.Sprintf(\"timeout while waiting for %s%s\",\n\t\texpectedState, suffix)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/helper/resource/grpc_test_provider.go",
    "content": "package resource\n\nimport (\n\t\"context\"\n\t\"net\"\n\t\"time\"\n\n\t\"github.com/hashicorp/terraform/helper/plugin\"\n\tproto \"github.com/hashicorp/terraform/internal/tfplugin5\"\n\ttfplugin \"github.com/hashicorp/terraform/plugin\"\n\t\"github.com/hashicorp/terraform/providers\"\n\t\"github.com/hashicorp/terraform/terraform\"\n\t\"google.golang.org/grpc\"\n\t\"google.golang.org/grpc/test/bufconn\"\n)\n\n// GRPCTestProvider takes a legacy ResourceProvider, wraps it in the new GRPC\n// shim and starts it in a grpc server using an inmem connection. It returns a\n// GRPCClient for this new server to test the shimmed resource provider.\nfunc GRPCTestProvider(rp terraform.ResourceProvider) providers.Interface {\n\tlistener := bufconn.Listen(256 * 1024)\n\tgrpcServer := grpc.NewServer()\n\n\tp := plugin.NewGRPCProviderServerShim(rp)\n\tproto.RegisterProviderServer(grpcServer, p)\n\n\tgo grpcServer.Serve(listener)\n\n\tconn, err := grpc.Dial(\"\", grpc.WithDialer(func(string, time.Duration) (net.Conn, error) {\n\t\treturn listener.Dial()\n\t}), grpc.WithInsecure())\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tvar pp tfplugin.GRPCProviderPlugin\n\tclient, _ := pp.GRPCClient(context.Background(), nil, conn)\n\n\tgrpcClient := client.(*tfplugin.GRPCProvider)\n\tgrpcClient.TestServer = grpcServer\n\n\treturn grpcClient\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/helper/resource/id.go",
    "content": "package resource\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n\t\"sync\"\n\t\"time\"\n)\n\nconst UniqueIdPrefix = `terraform-`\n\n// idCounter is a monotonic counter for generating ordered unique ids.\nvar idMutex sync.Mutex\nvar idCounter uint32\n\n// Helper for a resource to generate a unique identifier w/ default prefix\nfunc UniqueId() string {\n\treturn PrefixedUniqueId(UniqueIdPrefix)\n}\n\n// UniqueIDSuffixLength is the string length of the suffix generated by\n// PrefixedUniqueId. This can be used by length validation functions to\n// ensure prefixes are the correct length for the target field.\nconst UniqueIDSuffixLength = 26\n\n// Helper for a resource to generate a unique identifier w/ given prefix\n//\n// After the prefix, the ID consists of an incrementing 26 digit value (to match\n// previous timestamp output).  After the prefix, the ID consists of a timestamp\n// and an incrementing 8 hex digit value The timestamp means that multiple IDs\n// created with the same prefix will sort in the order of their creation, even\n// across multiple terraform executions, as long as the clock is not turned back\n// between calls, and as long as any given terraform execution generates fewer\n// than 4 billion IDs.\nfunc PrefixedUniqueId(prefix string) string {\n\t// Be precise to 4 digits of fractional seconds, but remove the dot before the\n\t// fractional seconds.\n\ttimestamp := strings.Replace(\n\t\ttime.Now().UTC().Format(\"20060102150405.0000\"), \".\", \"\", 1)\n\n\tidMutex.Lock()\n\tdefer idMutex.Unlock()\n\tidCounter++\n\treturn fmt.Sprintf(\"%s%s%08x\", prefix, timestamp, idCounter)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/helper/resource/map.go",
    "content": "package resource\n\nimport (\n\t\"fmt\"\n\t\"sort\"\n\n\t\"github.com/hashicorp/terraform/terraform\"\n)\n\n// Map is a map of resources that are supported, and provides helpers for\n// more easily implementing a ResourceProvider.\ntype Map struct {\n\tMapping map[string]Resource\n}\n\nfunc (m *Map) Validate(\n\tt string, c *terraform.ResourceConfig) ([]string, []error) {\n\tr, ok := m.Mapping[t]\n\tif !ok {\n\t\treturn nil, []error{fmt.Errorf(\"Unknown resource type: %s\", t)}\n\t}\n\n\t// If there is no validator set, then it is valid\n\tif r.ConfigValidator == nil {\n\t\treturn nil, nil\n\t}\n\n\treturn r.ConfigValidator.Validate(c)\n}\n\n// Apply performs a create or update depending on the diff, and calls\n// the proper function on the matching Resource.\nfunc (m *Map) Apply(\n\tinfo *terraform.InstanceInfo,\n\ts *terraform.InstanceState,\n\td *terraform.InstanceDiff,\n\tmeta interface{}) (*terraform.InstanceState, error) {\n\tr, ok := m.Mapping[info.Type]\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"Unknown resource type: %s\", info.Type)\n\t}\n\n\tif d.Destroy || d.RequiresNew() {\n\t\tif s.ID != \"\" {\n\t\t\t// Destroy the resource if it is created\n\t\t\terr := r.Destroy(s, meta)\n\t\t\tif err != nil {\n\t\t\t\treturn s, err\n\t\t\t}\n\n\t\t\ts.ID = \"\"\n\t\t}\n\n\t\t// If we're only destroying, and not creating, then return now.\n\t\t// Otherwise, we continue so that we can create a new resource.\n\t\tif !d.RequiresNew() {\n\t\t\treturn nil, nil\n\t\t}\n\t}\n\n\tvar result *terraform.InstanceState\n\tvar err error\n\tif s.ID == \"\" {\n\t\tresult, err = r.Create(s, d, meta)\n\t} else {\n\t\tif r.Update == nil {\n\t\t\treturn s, fmt.Errorf(\n\t\t\t\t\"Resource type '%s' doesn't support update\",\n\t\t\t\tinfo.Type)\n\t\t}\n\n\t\tresult, err = r.Update(s, d, meta)\n\t}\n\tif result != nil {\n\t\tif result.Attributes == nil {\n\t\t\tresult.Attributes = make(map[string]string)\n\t\t}\n\n\t\tresult.Attributes[\"id\"] = result.ID\n\t}\n\n\treturn result, err\n}\n\n// Diff performs a diff on the proper resource type.\nfunc (m *Map) Diff(\n\tinfo *terraform.InstanceInfo,\n\ts *terraform.InstanceState,\n\tc *terraform.ResourceConfig,\n\tmeta interface{}) (*terraform.InstanceDiff, error) {\n\tr, ok := m.Mapping[info.Type]\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"Unknown resource type: %s\", info.Type)\n\t}\n\n\treturn r.Diff(s, c, meta)\n}\n\n// Refresh performs a Refresh on the proper resource type.\n//\n// Refresh on the Resource won't be called if the state represents a\n// non-created resource (ID is blank).\n//\n// An error is returned if the resource isn't registered.\nfunc (m *Map) Refresh(\n\tinfo *terraform.InstanceInfo,\n\ts *terraform.InstanceState,\n\tmeta interface{}) (*terraform.InstanceState, error) {\n\t// If the resource isn't created, don't refresh.\n\tif s.ID == \"\" {\n\t\treturn s, nil\n\t}\n\n\tr, ok := m.Mapping[info.Type]\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"Unknown resource type: %s\", info.Type)\n\t}\n\n\treturn r.Refresh(s, meta)\n}\n\n// Resources returns all the resources that are supported by this\n// resource map and can be used to satisfy the Resources method of\n// a ResourceProvider.\nfunc (m *Map) Resources() []terraform.ResourceType {\n\tks := make([]string, 0, len(m.Mapping))\n\tfor k, _ := range m.Mapping {\n\t\tks = append(ks, k)\n\t}\n\tsort.Strings(ks)\n\n\trs := make([]terraform.ResourceType, 0, len(m.Mapping))\n\tfor _, k := range ks {\n\t\trs = append(rs, terraform.ResourceType{\n\t\t\tName: k,\n\t\t})\n\t}\n\n\treturn rs\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/helper/resource/resource.go",
    "content": "package resource\n\nimport (\n\t\"github.com/hashicorp/terraform/helper/config\"\n\t\"github.com/hashicorp/terraform/terraform\"\n)\n\ntype Resource struct {\n\tConfigValidator *config.Validator\n\tCreate          CreateFunc\n\tDestroy         DestroyFunc\n\tDiff            DiffFunc\n\tRefresh         RefreshFunc\n\tUpdate          UpdateFunc\n}\n\n// CreateFunc is a function that creates a resource that didn't previously\n// exist.\ntype CreateFunc func(\n\t*terraform.InstanceState,\n\t*terraform.InstanceDiff,\n\tinterface{}) (*terraform.InstanceState, error)\n\n// DestroyFunc is a function that destroys a resource that previously\n// exists using the state.\ntype DestroyFunc func(\n\t*terraform.InstanceState,\n\tinterface{}) error\n\n// DiffFunc is a function that performs a diff of a resource.\ntype DiffFunc func(\n\t*terraform.InstanceState,\n\t*terraform.ResourceConfig,\n\tinterface{}) (*terraform.InstanceDiff, error)\n\n// RefreshFunc is a function that performs a refresh of a specific type\n// of resource.\ntype RefreshFunc func(\n\t*terraform.InstanceState,\n\tinterface{}) (*terraform.InstanceState, error)\n\n// UpdateFunc is a function that is called to update a resource that\n// previously existed. The difference between this and CreateFunc is that\n// the diff is guaranteed to only contain attributes that don't require\n// a new resource.\ntype UpdateFunc func(\n\t*terraform.InstanceState,\n\t*terraform.InstanceDiff,\n\tinterface{}) (*terraform.InstanceState, error)\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/helper/resource/state.go",
    "content": "package resource\n\nimport (\n\t\"log\"\n\t\"time\"\n)\n\nvar refreshGracePeriod = 30 * time.Second\n\n// StateRefreshFunc is a function type used for StateChangeConf that is\n// responsible for refreshing the item being watched for a state change.\n//\n// It returns three results. `result` is any object that will be returned\n// as the final object after waiting for state change. This allows you to\n// return the final updated object, for example an EC2 instance after refreshing\n// it.\n//\n// `state` is the latest state of that object. And `err` is any error that\n// may have happened while refreshing the state.\ntype StateRefreshFunc func() (result interface{}, state string, err error)\n\n// StateChangeConf is the configuration struct used for `WaitForState`.\ntype StateChangeConf struct {\n\tDelay          time.Duration    // Wait this time before starting checks\n\tPending        []string         // States that are \"allowed\" and will continue trying\n\tRefresh        StateRefreshFunc // Refreshes the current state\n\tTarget         []string         // Target state\n\tTimeout        time.Duration    // The amount of time to wait before timeout\n\tMinTimeout     time.Duration    // Smallest time to wait before refreshes\n\tPollInterval   time.Duration    // Override MinTimeout/backoff and only poll this often\n\tNotFoundChecks int              // Number of times to allow not found\n\n\t// This is to work around inconsistent APIs\n\tContinuousTargetOccurence int // Number of times the Target state has to occur continuously\n}\n\n// WaitForState watches an object and waits for it to achieve the state\n// specified in the configuration using the specified Refresh() func,\n// waiting the number of seconds specified in the timeout configuration.\n//\n// If the Refresh function returns an error, exit immediately with that error.\n//\n// If the Refresh function returns a state other than the Target state or one\n// listed in Pending, return immediately with an error.\n//\n// If the Timeout is exceeded before reaching the Target state, return an\n// error.\n//\n// Otherwise, the result is the result of the first call to the Refresh function to\n// reach the target state.\nfunc (conf *StateChangeConf) WaitForState() (interface{}, error) {\n\tlog.Printf(\"[DEBUG] Waiting for state to become: %s\", conf.Target)\n\n\tnotfoundTick := 0\n\ttargetOccurence := 0\n\n\t// Set a default for times to check for not found\n\tif conf.NotFoundChecks == 0 {\n\t\tconf.NotFoundChecks = 20\n\t}\n\n\tif conf.ContinuousTargetOccurence == 0 {\n\t\tconf.ContinuousTargetOccurence = 1\n\t}\n\n\ttype Result struct {\n\t\tResult interface{}\n\t\tState  string\n\t\tError  error\n\t\tDone   bool\n\t}\n\n\t// Read every result from the refresh loop, waiting for a positive result.Done.\n\tresCh := make(chan Result, 1)\n\t// cancellation channel for the refresh loop\n\tcancelCh := make(chan struct{})\n\n\tresult := Result{}\n\n\tgo func() {\n\t\tdefer close(resCh)\n\n\t\ttime.Sleep(conf.Delay)\n\n\t\t// start with 0 delay for the first loop\n\t\tvar wait time.Duration\n\n\t\tfor {\n\t\t\t// store the last result\n\t\t\tresCh <- result\n\n\t\t\t// wait and watch for cancellation\n\t\t\tselect {\n\t\t\tcase <-cancelCh:\n\t\t\t\treturn\n\t\t\tcase <-time.After(wait):\n\t\t\t\t// first round had no wait\n\t\t\t\tif wait == 0 {\n\t\t\t\t\twait = 100 * time.Millisecond\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tres, currentState, err := conf.Refresh()\n\t\t\tresult = Result{\n\t\t\t\tResult: res,\n\t\t\t\tState:  currentState,\n\t\t\t\tError:  err,\n\t\t\t}\n\n\t\t\tif err != nil {\n\t\t\t\tresCh <- result\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// If we're waiting for the absence of a thing, then return\n\t\t\tif res == nil && len(conf.Target) == 0 {\n\t\t\t\ttargetOccurence++\n\t\t\t\tif conf.ContinuousTargetOccurence == targetOccurence {\n\t\t\t\t\tresult.Done = true\n\t\t\t\t\tresCh <- result\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif res == nil {\n\t\t\t\t// If we didn't find the resource, check if we have been\n\t\t\t\t// not finding it for awhile, and if so, report an error.\n\t\t\t\tnotfoundTick++\n\t\t\t\tif notfoundTick > conf.NotFoundChecks {\n\t\t\t\t\tresult.Error = &NotFoundError{\n\t\t\t\t\t\tLastError: err,\n\t\t\t\t\t\tRetries:   notfoundTick,\n\t\t\t\t\t}\n\t\t\t\t\tresCh <- result\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Reset the counter for when a resource isn't found\n\t\t\t\tnotfoundTick = 0\n\t\t\t\tfound := false\n\n\t\t\t\tfor _, allowed := range conf.Target {\n\t\t\t\t\tif currentState == allowed {\n\t\t\t\t\t\tfound = true\n\t\t\t\t\t\ttargetOccurence++\n\t\t\t\t\t\tif conf.ContinuousTargetOccurence == targetOccurence {\n\t\t\t\t\t\t\tresult.Done = true\n\t\t\t\t\t\t\tresCh <- result\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfor _, allowed := range conf.Pending {\n\t\t\t\t\tif currentState == allowed {\n\t\t\t\t\t\tfound = true\n\t\t\t\t\t\ttargetOccurence = 0\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif !found && len(conf.Pending) > 0 {\n\t\t\t\t\tresult.Error = &UnexpectedStateError{\n\t\t\t\t\t\tLastError:     err,\n\t\t\t\t\t\tState:         result.State,\n\t\t\t\t\t\tExpectedState: conf.Target,\n\t\t\t\t\t}\n\t\t\t\t\tresCh <- result\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Wait between refreshes using exponential backoff, except when\n\t\t\t// waiting for the target state to reoccur.\n\t\t\tif targetOccurence == 0 {\n\t\t\t\twait *= 2\n\t\t\t}\n\n\t\t\t// If a poll interval has been specified, choose that interval.\n\t\t\t// Otherwise bound the default value.\n\t\t\tif conf.PollInterval > 0 && conf.PollInterval < 180*time.Second {\n\t\t\t\twait = conf.PollInterval\n\t\t\t} else {\n\t\t\t\tif wait < conf.MinTimeout {\n\t\t\t\t\twait = conf.MinTimeout\n\t\t\t\t} else if wait > 10*time.Second {\n\t\t\t\t\twait = 10 * time.Second\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlog.Printf(\"[TRACE] Waiting %s before next try\", wait)\n\t\t}\n\t}()\n\n\t// store the last value result from the refresh loop\n\tlastResult := Result{}\n\n\ttimeout := time.After(conf.Timeout)\n\tfor {\n\t\tselect {\n\t\tcase r, ok := <-resCh:\n\t\t\t// channel closed, so return the last result\n\t\t\tif !ok {\n\t\t\t\treturn lastResult.Result, lastResult.Error\n\t\t\t}\n\n\t\t\t// we reached the intended state\n\t\t\tif r.Done {\n\t\t\t\treturn r.Result, r.Error\n\t\t\t}\n\n\t\t\t// still waiting, store the last result\n\t\t\tlastResult = r\n\n\t\tcase <-timeout:\n\t\t\tlog.Printf(\"[WARN] WaitForState timeout after %s\", conf.Timeout)\n\t\t\tlog.Printf(\"[WARN] WaitForState starting %s refresh grace period\", refreshGracePeriod)\n\n\t\t\t// cancel the goroutine and start our grace period timer\n\t\t\tclose(cancelCh)\n\t\t\ttimeout := time.After(refreshGracePeriod)\n\n\t\t\t// we need a for loop and a label to break on, because we may have\n\t\t\t// an extra response value to read, but still want to wait for the\n\t\t\t// channel to close.\n\t\tforSelect:\n\t\t\tfor {\n\t\t\t\tselect {\n\t\t\t\tcase r, ok := <-resCh:\n\t\t\t\t\tif r.Done {\n\t\t\t\t\t\t// the last refresh loop reached the desired state\n\t\t\t\t\t\treturn r.Result, r.Error\n\t\t\t\t\t}\n\n\t\t\t\t\tif !ok {\n\t\t\t\t\t\t// the goroutine returned\n\t\t\t\t\t\tbreak forSelect\n\t\t\t\t\t}\n\n\t\t\t\t\t// target state not reached, save the result for the\n\t\t\t\t\t// TimeoutError and wait for the channel to close\n\t\t\t\t\tlastResult = r\n\t\t\t\tcase <-timeout:\n\t\t\t\t\tlog.Println(\"[ERROR] WaitForState exceeded refresh grace period\")\n\t\t\t\t\tbreak forSelect\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn nil, &TimeoutError{\n\t\t\t\tLastError:     lastResult.Error,\n\t\t\t\tLastState:     lastResult.State,\n\t\t\t\tTimeout:       conf.Timeout,\n\t\t\t\tExpectedState: conf.Target,\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/helper/resource/state_shim.go",
    "content": "package resource\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/zclconf/go-cty/cty\"\n\n\t\"github.com/hashicorp/terraform/config/hcl2shim\"\n\t\"github.com/hashicorp/terraform/helper/schema\"\n\n\t\"github.com/hashicorp/terraform/states\"\n\t\"github.com/hashicorp/terraform/terraform\"\n)\n\n// shimState takes a new *states.State and reverts it to a legacy state for the provider ACC tests\nfunc shimNewState(newState *states.State, providers map[string]terraform.ResourceProvider) (*terraform.State, error) {\n\tstate := terraform.NewState()\n\n\t// in the odd case of a nil state, let the helper packages handle it\n\tif newState == nil {\n\t\treturn nil, nil\n\t}\n\n\tfor _, newMod := range newState.Modules {\n\t\tmod := state.AddModule(newMod.Addr)\n\n\t\tfor name, out := range newMod.OutputValues {\n\t\t\toutputType := \"\"\n\t\t\tval := hcl2shim.ConfigValueFromHCL2(out.Value)\n\t\t\tty := out.Value.Type()\n\t\t\tswitch {\n\t\t\tcase ty == cty.String:\n\t\t\t\toutputType = \"string\"\n\t\t\tcase ty.IsTupleType() || ty.IsListType():\n\t\t\t\toutputType = \"list\"\n\t\t\tcase ty.IsMapType():\n\t\t\t\toutputType = \"map\"\n\t\t\t}\n\n\t\t\tmod.Outputs[name] = &terraform.OutputState{\n\t\t\t\tType:      outputType,\n\t\t\t\tValue:     val,\n\t\t\t\tSensitive: out.Sensitive,\n\t\t\t}\n\t\t}\n\n\t\tfor _, res := range newMod.Resources {\n\t\t\tresType := res.Addr.Type\n\t\t\tproviderType := res.ProviderConfig.ProviderConfig.Type\n\n\t\t\tresource := getResource(providers, providerType, res.Addr)\n\n\t\t\tfor key, i := range res.Instances {\n\t\t\t\tflatmap, err := shimmedAttributes(i.Current, resource)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, fmt.Errorf(\"error decoding state for %q: %s\", resType, err)\n\t\t\t\t}\n\n\t\t\t\tresState := &terraform.ResourceState{\n\t\t\t\t\tType: resType,\n\t\t\t\t\tPrimary: &terraform.InstanceState{\n\t\t\t\t\t\tID:         flatmap[\"id\"],\n\t\t\t\t\t\tAttributes: flatmap,\n\t\t\t\t\t\tTainted:    i.Current.Status == states.ObjectTainted,\n\t\t\t\t\t},\n\t\t\t\t\tProvider: res.ProviderConfig.String(),\n\t\t\t\t}\n\t\t\t\tif i.Current.SchemaVersion != 0 {\n\t\t\t\t\tresState.Primary.Meta = map[string]interface{}{\n\t\t\t\t\t\t\"schema_version\": i.Current.SchemaVersion,\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfor _, dep := range i.Current.Dependencies {\n\t\t\t\t\tresState.Dependencies = append(resState.Dependencies, dep.String())\n\t\t\t\t}\n\n\t\t\t\t// convert the indexes to the old style flapmap indexes\n\t\t\t\tidx := \"\"\n\t\t\t\tswitch key.(type) {\n\t\t\t\tcase addrs.IntKey:\n\t\t\t\t\t// don't add numeric index values to resources with a count of 0\n\t\t\t\t\tif len(res.Instances) > 1 {\n\t\t\t\t\t\tidx = fmt.Sprintf(\".%d\", key)\n\t\t\t\t\t}\n\t\t\t\tcase addrs.StringKey:\n\t\t\t\t\tidx = \".\" + key.String()\n\t\t\t\t}\n\n\t\t\t\tmod.Resources[res.Addr.String()+idx] = resState\n\n\t\t\t\t// add any deposed instances\n\t\t\t\tfor _, dep := range i.Deposed {\n\t\t\t\t\tflatmap, err := shimmedAttributes(dep, resource)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn nil, fmt.Errorf(\"error decoding deposed state for %q: %s\", resType, err)\n\t\t\t\t\t}\n\n\t\t\t\t\tdeposed := &terraform.InstanceState{\n\t\t\t\t\t\tID:         flatmap[\"id\"],\n\t\t\t\t\t\tAttributes: flatmap,\n\t\t\t\t\t\tTainted:    dep.Status == states.ObjectTainted,\n\t\t\t\t\t}\n\t\t\t\t\tif dep.SchemaVersion != 0 {\n\t\t\t\t\t\tdeposed.Meta = map[string]interface{}{\n\t\t\t\t\t\t\t\"schema_version\": dep.SchemaVersion,\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tresState.Deposed = append(resState.Deposed, deposed)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn state, nil\n}\n\nfunc getResource(providers map[string]terraform.ResourceProvider, providerName string, addr addrs.Resource) *schema.Resource {\n\tp := providers[providerName]\n\tif p == nil {\n\t\tpanic(fmt.Sprintf(\"provider %q not found in test step\", providerName))\n\t}\n\n\t// this is only for tests, so should only see schema.Providers\n\tprovider := p.(*schema.Provider)\n\n\tswitch addr.Mode {\n\tcase addrs.ManagedResourceMode:\n\t\tresource := provider.ResourcesMap[addr.Type]\n\t\tif resource != nil {\n\t\t\treturn resource\n\t\t}\n\tcase addrs.DataResourceMode:\n\t\tresource := provider.DataSourcesMap[addr.Type]\n\t\tif resource != nil {\n\t\t\treturn resource\n\t\t}\n\t}\n\n\tpanic(fmt.Sprintf(\"resource %s not found in test step\", addr.Type))\n}\n\nfunc shimmedAttributes(instance *states.ResourceInstanceObjectSrc, res *schema.Resource) (map[string]string, error) {\n\tflatmap := instance.AttrsFlat\n\tif flatmap != nil {\n\t\treturn flatmap, nil\n\t}\n\n\t// if we have json attrs, they need to be decoded\n\trio, err := instance.Decode(res.CoreConfigSchema().ImpliedType())\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tinstanceState, err := res.ShimInstanceStateFromValue(rio.Value)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn instanceState.Attributes, nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/helper/resource/testing.go",
    "content": "package resource\n\nimport (\n\t\"bytes\"\n\t\"flag\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"log\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"reflect\"\n\t\"regexp\"\n\t\"strings\"\n\t\"syscall\"\n\t\"testing\"\n\n\t\"github.com/davecgh/go-spew/spew\"\n\t\"github.com/hashicorp/errwrap\"\n\t\"github.com/hashicorp/go-multierror\"\n\t\"github.com/hashicorp/logutils\"\n\t\"github.com/mitchellh/colorstring\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/command/format\"\n\t\"github.com/hashicorp/terraform/configs\"\n\t\"github.com/hashicorp/terraform/configs/configload\"\n\t\"github.com/hashicorp/terraform/helper/logging\"\n\t\"github.com/hashicorp/terraform/internal/initwd\"\n\t\"github.com/hashicorp/terraform/providers\"\n\t\"github.com/hashicorp/terraform/states\"\n\t\"github.com/hashicorp/terraform/terraform\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n)\n\n// flagSweep is a flag available when running tests on the command line. It\n// contains a comma seperated list of regions to for the sweeper functions to\n// run in.  This flag bypasses the normal Test path and instead runs functions designed to\n// clean up any leaked resources a testing environment could have created. It is\n// a best effort attempt, and relies on Provider authors to implement \"Sweeper\"\n// methods for resources.\n\n// Adding Sweeper methods with AddTestSweepers will\n// construct a list of sweeper funcs to be called here. We iterate through\n// regions provided by the sweep flag, and for each region we iterate through the\n// tests, and exit on any errors. At time of writing, sweepers are ran\n// sequentially, however they can list dependencies to be ran first. We track\n// the sweepers that have been ran, so as to not run a sweeper twice for a given\n// region.\n//\n// WARNING:\n// Sweepers are designed to be destructive. You should not use the -sweep flag\n// in any environment that is not strictly a test environment. Resources will be\n// destroyed.\n\nvar flagSweep = flag.String(\"sweep\", \"\", \"List of Regions to run available Sweepers\")\nvar flagSweepRun = flag.String(\"sweep-run\", \"\", \"Comma seperated list of Sweeper Tests to run\")\nvar sweeperFuncs map[string]*Sweeper\n\n// map of sweepers that have ran, and the success/fail status based on any error\n// raised\nvar sweeperRunList map[string]bool\n\n// type SweeperFunc is a signature for a function that acts as a sweeper. It\n// accepts a string for the region that the sweeper is to be ran in. This\n// function must be able to construct a valid client for that region.\ntype SweeperFunc func(r string) error\n\ntype Sweeper struct {\n\t// Name for sweeper. Must be unique to be ran by the Sweeper Runner\n\tName string\n\n\t// Dependencies list the const names of other Sweeper functions that must be ran\n\t// prior to running this Sweeper. This is an ordered list that will be invoked\n\t// recursively at the helper/resource level\n\tDependencies []string\n\n\t// Sweeper function that when invoked sweeps the Provider of specific\n\t// resources\n\tF SweeperFunc\n}\n\nfunc init() {\n\tsweeperFuncs = make(map[string]*Sweeper)\n}\n\n// AddTestSweepers function adds a given name and Sweeper configuration\n// pair to the internal sweeperFuncs map. Invoke this function to register a\n// resource sweeper to be available for running when the -sweep flag is used\n// with `go test`. Sweeper names must be unique to help ensure a given sweeper\n// is only ran once per run.\nfunc AddTestSweepers(name string, s *Sweeper) {\n\tif _, ok := sweeperFuncs[name]; ok {\n\t\tlog.Fatalf(\"[ERR] Error adding (%s) to sweeperFuncs: function already exists in map\", name)\n\t}\n\n\tsweeperFuncs[name] = s\n}\n\nfunc TestMain(m *testing.M) {\n\tflag.Parse()\n\tif *flagSweep != \"\" {\n\t\t// parse flagSweep contents for regions to run\n\t\tregions := strings.Split(*flagSweep, \",\")\n\n\t\t// get filtered list of sweepers to run based on sweep-run flag\n\t\tsweepers := filterSweepers(*flagSweepRun, sweeperFuncs)\n\t\tfor _, region := range regions {\n\t\t\tregion = strings.TrimSpace(region)\n\t\t\t// reset sweeperRunList for each region\n\t\t\tsweeperRunList = map[string]bool{}\n\n\t\t\tlog.Printf(\"[DEBUG] Running Sweepers for region (%s):\\n\", region)\n\t\t\tfor _, sweeper := range sweepers {\n\t\t\t\tif err := runSweeperWithRegion(region, sweeper); err != nil {\n\t\t\t\t\tlog.Fatalf(\"[ERR] error running (%s): %s\", sweeper.Name, err)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlog.Printf(\"Sweeper Tests ran:\\n\")\n\t\t\tfor s, _ := range sweeperRunList {\n\t\t\t\tfmt.Printf(\"\\t- %s\\n\", s)\n\t\t\t}\n\t\t}\n\t} else {\n\t\tos.Exit(m.Run())\n\t}\n}\n\n// filterSweepers takes a comma seperated string listing the names of sweepers\n// to be ran, and returns a filtered set from the list of all of sweepers to\n// run based on the names given.\nfunc filterSweepers(f string, source map[string]*Sweeper) map[string]*Sweeper {\n\tfilterSlice := strings.Split(strings.ToLower(f), \",\")\n\tif len(filterSlice) == 1 && filterSlice[0] == \"\" {\n\t\t// if the filter slice is a single element of \"\" then no sweeper list was\n\t\t// given, so just return the full list\n\t\treturn source\n\t}\n\n\tsweepers := make(map[string]*Sweeper)\n\tfor name, sweeper := range source {\n\t\tfor _, s := range filterSlice {\n\t\t\tif strings.Contains(strings.ToLower(name), s) {\n\t\t\t\tsweepers[name] = sweeper\n\t\t\t}\n\t\t}\n\t}\n\treturn sweepers\n}\n\n// runSweeperWithRegion recieves a sweeper and a region, and recursively calls\n// itself with that region for every dependency found for that sweeper. If there\n// are no dependencies, invoke the contained sweeper fun with the region, and\n// add the success/fail status to the sweeperRunList.\nfunc runSweeperWithRegion(region string, s *Sweeper) error {\n\tfor _, dep := range s.Dependencies {\n\t\tif depSweeper, ok := sweeperFuncs[dep]; ok {\n\t\t\tlog.Printf(\"[DEBUG] Sweeper (%s) has dependency (%s), running..\", s.Name, dep)\n\t\t\tif err := runSweeperWithRegion(region, depSweeper); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t} else {\n\t\t\tlog.Printf(\"[DEBUG] Sweeper (%s) has dependency (%s), but that sweeper was not found\", s.Name, dep)\n\t\t}\n\t}\n\n\tif _, ok := sweeperRunList[s.Name]; ok {\n\t\tlog.Printf(\"[DEBUG] Sweeper (%s) already ran in region (%s)\", s.Name, region)\n\t\treturn nil\n\t}\n\n\trunE := s.F(region)\n\tif runE == nil {\n\t\tsweeperRunList[s.Name] = true\n\t} else {\n\t\tsweeperRunList[s.Name] = false\n\t}\n\n\treturn runE\n}\n\nconst TestEnvVar = \"TF_ACC\"\n\n// TestProvider can be implemented by any ResourceProvider to provide custom\n// reset functionality at the start of an acceptance test.\n// The helper/schema Provider implements this interface.\ntype TestProvider interface {\n\tTestReset() error\n}\n\n// TestCheckFunc is the callback type used with acceptance tests to check\n// the state of a resource. The state passed in is the latest state known,\n// or in the case of being after a destroy, it is the last known state when\n// it was created.\ntype TestCheckFunc func(*terraform.State) error\n\n// ImportStateCheckFunc is the check function for ImportState tests\ntype ImportStateCheckFunc func([]*terraform.InstanceState) error\n\n// ImportStateIdFunc is an ID generation function to help with complex ID\n// generation for ImportState tests.\ntype ImportStateIdFunc func(*terraform.State) (string, error)\n\n// TestCase is a single acceptance test case used to test the apply/destroy\n// lifecycle of a resource in a specific configuration.\n//\n// When the destroy plan is executed, the config from the last TestStep\n// is used to plan it.\ntype TestCase struct {\n\t// IsUnitTest allows a test to run regardless of the TF_ACC\n\t// environment variable. This should be used with care - only for\n\t// fast tests on local resources (e.g. remote state with a local\n\t// backend) but can be used to increase confidence in correct\n\t// operation of Terraform without waiting for a full acctest run.\n\tIsUnitTest bool\n\n\t// PreCheck, if non-nil, will be called before any test steps are\n\t// executed. It will only be executed in the case that the steps\n\t// would run, so it can be used for some validation before running\n\t// acceptance tests, such as verifying that keys are setup.\n\tPreCheck func()\n\n\t// Providers is the ResourceProvider that will be under test.\n\t//\n\t// Alternately, ProviderFactories can be specified for the providers\n\t// that are valid. This takes priority over Providers.\n\t//\n\t// The end effect of each is the same: specifying the providers that\n\t// are used within the tests.\n\tProviders         map[string]terraform.ResourceProvider\n\tProviderFactories map[string]terraform.ResourceProviderFactory\n\n\t// PreventPostDestroyRefresh can be set to true for cases where data sources\n\t// are tested alongside real resources\n\tPreventPostDestroyRefresh bool\n\n\t// CheckDestroy is called after the resource is finally destroyed\n\t// to allow the tester to test that the resource is truly gone.\n\tCheckDestroy TestCheckFunc\n\n\t// Steps are the apply sequences done within the context of the\n\t// same state. Each step can have its own check to verify correctness.\n\tSteps []TestStep\n\n\t// The settings below control the \"ID-only refresh test.\" This is\n\t// an enabled-by-default test that tests that a refresh can be\n\t// refreshed with only an ID to result in the same attributes.\n\t// This validates completeness of Refresh.\n\t//\n\t// IDRefreshName is the name of the resource to check. This will\n\t// default to the first non-nil primary resource in the state.\n\t//\n\t// IDRefreshIgnore is a list of configuration keys that will be ignored.\n\tIDRefreshName   string\n\tIDRefreshIgnore []string\n}\n\n// TestStep is a single apply sequence of a test, done within the\n// context of a state.\n//\n// Multiple TestSteps can be sequenced in a Test to allow testing\n// potentially complex update logic. In general, simply create/destroy\n// tests will only need one step.\ntype TestStep struct {\n\t// ResourceName should be set to the name of the resource\n\t// that is being tested. Example: \"aws_instance.foo\". Various test\n\t// modes use this to auto-detect state information.\n\t//\n\t// This is only required if the test mode settings below say it is\n\t// for the mode you're using.\n\tResourceName string\n\n\t// PreConfig is called before the Config is applied to perform any per-step\n\t// setup that needs to happen. This is called regardless of \"test mode\"\n\t// below.\n\tPreConfig func()\n\n\t// Taint is a list of resource addresses to taint prior to the execution of\n\t// the step. Be sure to only include this at a step where the referenced\n\t// address will be present in state, as it will fail the test if the resource\n\t// is missing.\n\t//\n\t// This option is ignored on ImportState tests, and currently only works for\n\t// resources in the root module path.\n\tTaint []string\n\n\t//---------------------------------------------------------------\n\t// Test modes. One of the following groups of settings must be\n\t// set to determine what the test step will do. Ideally we would've\n\t// used Go interfaces here but there are now hundreds of tests we don't\n\t// want to re-type so instead we just determine which step logic\n\t// to run based on what settings below are set.\n\t//---------------------------------------------------------------\n\n\t//---------------------------------------------------------------\n\t// Plan, Apply testing\n\t//---------------------------------------------------------------\n\n\t// Config a string of the configuration to give to Terraform. If this\n\t// is set, then the TestCase will execute this step with the same logic\n\t// as a `terraform apply`.\n\tConfig string\n\n\t// Check is called after the Config is applied. Use this step to\n\t// make your own API calls to check the status of things, and to\n\t// inspect the format of the ResourceState itself.\n\t//\n\t// If an error is returned, the test will fail. In this case, a\n\t// destroy plan will still be attempted.\n\t//\n\t// If this is nil, no check is done on this step.\n\tCheck TestCheckFunc\n\n\t// Destroy will create a destroy plan if set to true.\n\tDestroy bool\n\n\t// ExpectNonEmptyPlan can be set to true for specific types of tests that are\n\t// looking to verify that a diff occurs\n\tExpectNonEmptyPlan bool\n\n\t// ExpectError allows the construction of test cases that we expect to fail\n\t// with an error. The specified regexp must match against the error for the\n\t// test to pass.\n\tExpectError *regexp.Regexp\n\n\t// PlanOnly can be set to only run `plan` with this configuration, and not\n\t// actually apply it. This is useful for ensuring config changes result in\n\t// no-op plans\n\tPlanOnly bool\n\n\t// PreventDiskCleanup can be set to true for testing terraform modules which\n\t// require access to disk at runtime. Note that this will leave files in the\n\t// temp folder\n\tPreventDiskCleanup bool\n\n\t// PreventPostDestroyRefresh can be set to true for cases where data sources\n\t// are tested alongside real resources\n\tPreventPostDestroyRefresh bool\n\n\t// SkipFunc is called before applying config, but after PreConfig\n\t// This is useful for defining test steps with platform-dependent checks\n\tSkipFunc func() (bool, error)\n\n\t//---------------------------------------------------------------\n\t// ImportState testing\n\t//---------------------------------------------------------------\n\n\t// ImportState, if true, will test the functionality of ImportState\n\t// by importing the resource with ResourceName (must be set) and the\n\t// ID of that resource.\n\tImportState bool\n\n\t// ImportStateId is the ID to perform an ImportState operation with.\n\t// This is optional. If it isn't set, then the resource ID is automatically\n\t// determined by inspecting the state for ResourceName's ID.\n\tImportStateId string\n\n\t// ImportStateIdPrefix is the prefix added in front of ImportStateId.\n\t// This can be useful in complex import cases, where more than one\n\t// attribute needs to be passed on as the Import ID. Mainly in cases\n\t// where the ID is not known, and a known prefix needs to be added to\n\t// the unset ImportStateId field.\n\tImportStateIdPrefix string\n\n\t// ImportStateIdFunc is a function that can be used to dynamically generate\n\t// the ID for the ImportState tests. It is sent the state, which can be\n\t// checked to derive the attributes necessary and generate the string in the\n\t// desired format.\n\tImportStateIdFunc ImportStateIdFunc\n\n\t// ImportStateCheck checks the results of ImportState. It should be\n\t// used to verify that the resulting value of ImportState has the\n\t// proper resources, IDs, and attributes.\n\tImportStateCheck ImportStateCheckFunc\n\n\t// ImportStateVerify, if true, will also check that the state values\n\t// that are finally put into the state after import match for all the\n\t// IDs returned by the Import.\n\t//\n\t// ImportStateVerifyIgnore are fields that should not be verified to\n\t// be equal. These can be set to ephemeral fields or fields that can't\n\t// be refreshed and don't matter.\n\tImportStateVerify       bool\n\tImportStateVerifyIgnore []string\n\n\t// provider s is used internally to maintain a reference to the\n\t// underlying providers during the tests\n\tproviders map[string]terraform.ResourceProvider\n}\n\n// Set to a file mask in sprintf format where %s is test name\nconst EnvLogPathMask = \"TF_LOG_PATH_MASK\"\n\nfunc LogOutput(t TestT) (logOutput io.Writer, err error) {\n\tlogOutput = ioutil.Discard\n\n\tlogLevel := logging.LogLevel()\n\tif logLevel == \"\" {\n\t\treturn\n\t}\n\n\tlogOutput = os.Stderr\n\n\tif logPath := os.Getenv(logging.EnvLogFile); logPath != \"\" {\n\t\tvar err error\n\t\tlogOutput, err = os.OpenFile(logPath, syscall.O_CREAT|syscall.O_RDWR|syscall.O_APPEND, 0666)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\tif logPathMask := os.Getenv(EnvLogPathMask); logPathMask != \"\" {\n\t\t// Escape special characters which may appear if we have subtests\n\t\ttestName := strings.Replace(t.Name(), \"/\", \"__\", -1)\n\n\t\tlogPath := fmt.Sprintf(logPathMask, testName)\n\t\tvar err error\n\t\tlogOutput, err = os.OpenFile(logPath, syscall.O_CREAT|syscall.O_RDWR|syscall.O_APPEND, 0666)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\t// This was the default since the beginning\n\tlogOutput = &logutils.LevelFilter{\n\t\tLevels:   logging.ValidLevels,\n\t\tMinLevel: logutils.LogLevel(logLevel),\n\t\tWriter:   logOutput,\n\t}\n\n\treturn\n}\n\n// ParallelTest performs an acceptance test on a resource, allowing concurrency\n// with other ParallelTest.\n//\n// Tests will fail if they do not properly handle conditions to allow multiple\n// tests to occur against the same resource or service (e.g. random naming).\n// All other requirements of the Test function also apply to this function.\nfunc ParallelTest(t TestT, c TestCase) {\n\tt.Parallel()\n\tTest(t, c)\n}\n\n// Test performs an acceptance test on a resource.\n//\n// Tests are not run unless an environmental variable \"TF_ACC\" is\n// set to some non-empty value. This is to avoid test cases surprising\n// a user by creating real resources.\n//\n// Tests will fail unless the verbose flag (`go test -v`, or explicitly\n// the \"-test.v\" flag) is set. Because some acceptance tests take quite\n// long, we require the verbose flag so users are able to see progress\n// output.\nfunc Test(t TestT, c TestCase) {\n\t// We only run acceptance tests if an env var is set because they're\n\t// slow and generally require some outside configuration. You can opt out\n\t// of this with OverrideEnvVar on individual TestCases.\n\tif os.Getenv(TestEnvVar) == \"\" && !c.IsUnitTest {\n\t\tt.Skip(fmt.Sprintf(\n\t\t\t\"Acceptance tests skipped unless env '%s' set\",\n\t\t\tTestEnvVar))\n\t\treturn\n\t}\n\n\tlogWriter, err := LogOutput(t)\n\tif err != nil {\n\t\tt.Error(fmt.Errorf(\"error setting up logging: %s\", err))\n\t}\n\tlog.SetOutput(logWriter)\n\n\t// We require verbose mode so that the user knows what is going on.\n\tif !testTesting && !testing.Verbose() && !c.IsUnitTest {\n\t\tt.Fatal(\"Acceptance tests must be run with the -v flag on tests\")\n\t\treturn\n\t}\n\n\t// Run the PreCheck if we have it\n\tif c.PreCheck != nil {\n\t\tc.PreCheck()\n\t}\n\n\t// get instances of all providers, so we can use the individual\n\t// resources to shim the state during the tests.\n\tproviders := make(map[string]terraform.ResourceProvider)\n\tfor name, pf := range testProviderFactories(c) {\n\t\tp, err := pf()\n\t\tif err != nil {\n\t\t\tt.Fatal(err)\n\t\t}\n\t\tproviders[name] = p\n\t}\n\n\tproviderResolver, err := testProviderResolver(c)\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\topts := terraform.ContextOpts{ProviderResolver: providerResolver}\n\n\t// A single state variable to track the lifecycle, starting with no state\n\tvar state *terraform.State\n\n\t// Go through each step and run it\n\tvar idRefreshCheck *terraform.ResourceState\n\tidRefresh := c.IDRefreshName != \"\"\n\terrored := false\n\tfor i, step := range c.Steps {\n\t\t// insert the providers into the step so we can get the resources for\n\t\t// shimming the state\n\t\tstep.providers = providers\n\n\t\tvar err error\n\t\tlog.Printf(\"[DEBUG] Test: Executing step %d\", i)\n\n\t\tif step.SkipFunc != nil {\n\t\t\tskip, err := step.SkipFunc()\n\t\t\tif err != nil {\n\t\t\t\tt.Fatal(err)\n\t\t\t}\n\t\t\tif skip {\n\t\t\t\tlog.Printf(\"[WARN] Skipping step %d\", i)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\tif step.Config == \"\" && !step.ImportState {\n\t\t\terr = fmt.Errorf(\n\t\t\t\t\"unknown test mode for step. Please see TestStep docs\\n\\n%#v\",\n\t\t\t\tstep)\n\t\t} else {\n\t\t\tif step.ImportState {\n\t\t\t\tif step.Config == \"\" {\n\t\t\t\t\tstep.Config = testProviderConfig(c)\n\t\t\t\t}\n\n\t\t\t\t// Can optionally set step.Config in addition to\n\t\t\t\t// step.ImportState, to provide config for the import.\n\t\t\t\tstate, err = testStepImportState(opts, state, step)\n\t\t\t} else {\n\t\t\t\tstate, err = testStepConfig(opts, state, step)\n\t\t\t}\n\t\t}\n\n\t\t// If we expected an error, but did not get one, fail\n\t\tif err == nil && step.ExpectError != nil {\n\t\t\terrored = true\n\t\t\tt.Error(fmt.Sprintf(\n\t\t\t\t\"Step %d, no error received, but expected a match to:\\n\\n%s\\n\\n\",\n\t\t\t\ti, step.ExpectError))\n\t\t\tbreak\n\t\t}\n\n\t\t// If there was an error, exit\n\t\tif err != nil {\n\t\t\t// Perhaps we expected an error? Check if it matches\n\t\t\tif step.ExpectError != nil {\n\t\t\t\tif !step.ExpectError.MatchString(err.Error()) {\n\t\t\t\t\terrored = true\n\t\t\t\t\tt.Error(fmt.Sprintf(\n\t\t\t\t\t\t\"Step %d, expected error:\\n\\n%s\\n\\nTo match:\\n\\n%s\\n\\n\",\n\t\t\t\t\t\ti, err, step.ExpectError))\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\terrored = true\n\t\t\t\tt.Error(fmt.Sprintf(\"Step %d error: %s\", i, detailedErrorMessage(err)))\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\t// If we've never checked an id-only refresh and our state isn't\n\t\t// empty, find the first resource and test it.\n\t\tif idRefresh && idRefreshCheck == nil && !state.Empty() {\n\t\t\t// Find the first non-nil resource in the state\n\t\t\tfor _, m := range state.Modules {\n\t\t\t\tif len(m.Resources) > 0 {\n\t\t\t\t\tif v, ok := m.Resources[c.IDRefreshName]; ok {\n\t\t\t\t\t\tidRefreshCheck = v\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// If we have an instance to check for refreshes, do it\n\t\t\t// immediately. We do it in the middle of another test\n\t\t\t// because it shouldn't affect the overall state (refresh\n\t\t\t// is read-only semantically) and we want to fail early if\n\t\t\t// this fails. If refresh isn't read-only, then this will have\n\t\t\t// caught a different bug.\n\t\t\tif idRefreshCheck != nil {\n\t\t\t\tlog.Printf(\n\t\t\t\t\t\"[WARN] Test: Running ID-only refresh check on %s\",\n\t\t\t\t\tidRefreshCheck.Primary.ID)\n\t\t\t\tif err := testIDOnlyRefresh(c, opts, step, idRefreshCheck); err != nil {\n\t\t\t\t\tlog.Printf(\"[ERROR] Test: ID-only test failed: %s\", err)\n\t\t\t\t\tt.Error(fmt.Sprintf(\n\t\t\t\t\t\t\"[ERROR] Test: ID-only test failed: %s\", err))\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// If we never checked an id-only refresh, it is a failure.\n\tif idRefresh {\n\t\tif !errored && len(c.Steps) > 0 && idRefreshCheck == nil {\n\t\t\tt.Error(\"ID-only refresh check never ran.\")\n\t\t}\n\t}\n\n\t// If we have a state, then run the destroy\n\tif state != nil {\n\t\tlastStep := c.Steps[len(c.Steps)-1]\n\t\tdestroyStep := TestStep{\n\t\t\tConfig:                    lastStep.Config,\n\t\t\tCheck:                     c.CheckDestroy,\n\t\t\tDestroy:                   true,\n\t\t\tPreventDiskCleanup:        lastStep.PreventDiskCleanup,\n\t\t\tPreventPostDestroyRefresh: c.PreventPostDestroyRefresh,\n\t\t\tproviders:                 providers,\n\t\t}\n\n\t\tlog.Printf(\"[WARN] Test: Executing destroy step\")\n\t\tstate, err := testStep(opts, state, destroyStep)\n\t\tif err != nil {\n\t\t\tt.Error(fmt.Sprintf(\n\t\t\t\t\"Error destroying resource! WARNING: Dangling resources\\n\"+\n\t\t\t\t\t\"may exist. The full state and error is shown below.\\n\\n\"+\n\t\t\t\t\t\"Error: %s\\n\\nState: %s\",\n\t\t\t\terr,\n\t\t\t\tstate))\n\t\t}\n\t} else {\n\t\tlog.Printf(\"[WARN] Skipping destroy test since there is no state.\")\n\t}\n}\n\n// testProviderConfig takes the list of Providers in a TestCase and returns a\n// config with only empty provider blocks. This is useful for Import, where no\n// config is provided, but the providers must be defined.\nfunc testProviderConfig(c TestCase) string {\n\tvar lines []string\n\tfor p := range c.Providers {\n\t\tlines = append(lines, fmt.Sprintf(\"provider %q {}\\n\", p))\n\t}\n\n\treturn strings.Join(lines, \"\")\n}\n\n// testProviderFactories combines the fixed Providers and\n// ResourceProviderFactory functions into a single map of\n// ResourceProviderFactory functions.\nfunc testProviderFactories(c TestCase) map[string]terraform.ResourceProviderFactory {\n\tctxProviders := make(map[string]terraform.ResourceProviderFactory)\n\tfor k, pf := range c.ProviderFactories {\n\t\tctxProviders[k] = pf\n\t}\n\n\t// add any fixed providers\n\tfor k, p := range c.Providers {\n\t\tctxProviders[k] = terraform.ResourceProviderFactoryFixed(p)\n\t}\n\treturn ctxProviders\n}\n\n// testProviderResolver is a helper to build a ResourceProviderResolver\n// with pre instantiated ResourceProviders, so that we can reset them for the\n// test, while only calling the factory function once.\n// Any errors are stored so that they can be returned by the factory in\n// terraform to match non-test behavior.\nfunc testProviderResolver(c TestCase) (providers.Resolver, error) {\n\tctxProviders := testProviderFactories(c)\n\n\t// wrap the old provider factories in the test grpc server so they can be\n\t// called from terraform.\n\tnewProviders := make(map[string]providers.Factory)\n\n\tfor k, pf := range ctxProviders {\n\t\tfactory := pf // must copy to ensure each closure sees its own value\n\t\tnewProviders[k] = func() (providers.Interface, error) {\n\t\t\tp, err := factory()\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\n\t\t\t// The provider is wrapped in a GRPCTestProvider so that it can be\n\t\t\t// passed back to terraform core as a providers.Interface, rather\n\t\t\t// than the legacy ResourceProvider.\n\t\t\treturn GRPCTestProvider(p), nil\n\t\t}\n\t}\n\n\treturn providers.ResolverFixed(newProviders), nil\n}\n\n// UnitTest is a helper to force the acceptance testing harness to run in the\n// normal unit test suite. This should only be used for resource that don't\n// have any external dependencies.\nfunc UnitTest(t TestT, c TestCase) {\n\tc.IsUnitTest = true\n\tTest(t, c)\n}\n\nfunc testIDOnlyRefresh(c TestCase, opts terraform.ContextOpts, step TestStep, r *terraform.ResourceState) error {\n\t// TODO: We guard by this right now so master doesn't explode. We\n\t// need to remove this eventually to make this part of the normal tests.\n\tif os.Getenv(\"TF_ACC_IDONLY\") == \"\" {\n\t\treturn nil\n\t}\n\n\taddr := addrs.Resource{\n\t\tMode: addrs.ManagedResourceMode,\n\t\tType: r.Type,\n\t\tName: \"foo\",\n\t}.Instance(addrs.NoKey)\n\tabsAddr := addr.Absolute(addrs.RootModuleInstance)\n\n\t// Build the state. The state is just the resource with an ID. There\n\t// are no attributes. We only set what is needed to perform a refresh.\n\tstate := states.NewState()\n\tstate.RootModule().SetResourceInstanceCurrent(\n\t\taddr,\n\t\t&states.ResourceInstanceObjectSrc{\n\t\t\tAttrsFlat: r.Primary.Attributes,\n\t\t\tStatus:    states.ObjectReady,\n\t\t},\n\t\taddrs.ProviderConfig{Type: \"placeholder\"}.Absolute(addrs.RootModuleInstance),\n\t)\n\n\t// Create the config module. We use the full config because Refresh\n\t// doesn't have access to it and we may need things like provider\n\t// configurations. The initial implementation of id-only checks used\n\t// an empty config module, but that caused the aforementioned problems.\n\tcfg, err := testConfig(opts, step)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Initialize the context\n\topts.Config = cfg\n\topts.State = state\n\tctx, ctxDiags := terraform.NewContext(&opts)\n\tif ctxDiags.HasErrors() {\n\t\treturn ctxDiags.Err()\n\t}\n\tif diags := ctx.Validate(); len(diags) > 0 {\n\t\tif diags.HasErrors() {\n\t\t\treturn errwrap.Wrapf(\"config is invalid: {{err}}\", diags.Err())\n\t\t}\n\n\t\tlog.Printf(\"[WARN] Config warnings:\\n%s\", diags.Err().Error())\n\t}\n\n\t// Refresh!\n\tstate, refreshDiags := ctx.Refresh()\n\tif refreshDiags.HasErrors() {\n\t\treturn refreshDiags.Err()\n\t}\n\n\t// Verify attribute equivalence.\n\tactualR := state.ResourceInstance(absAddr)\n\tif actualR == nil {\n\t\treturn fmt.Errorf(\"Resource gone!\")\n\t}\n\tif actualR.Current == nil {\n\t\treturn fmt.Errorf(\"Resource has no primary instance\")\n\t}\n\tactual := actualR.Current.AttrsFlat\n\texpected := r.Primary.Attributes\n\t// Remove fields we're ignoring\n\tfor _, v := range c.IDRefreshIgnore {\n\t\tfor k, _ := range actual {\n\t\t\tif strings.HasPrefix(k, v) {\n\t\t\t\tdelete(actual, k)\n\t\t\t}\n\t\t}\n\t\tfor k, _ := range expected {\n\t\t\tif strings.HasPrefix(k, v) {\n\t\t\t\tdelete(expected, k)\n\t\t\t}\n\t\t}\n\t}\n\n\tif !reflect.DeepEqual(actual, expected) {\n\t\t// Determine only the different attributes\n\t\tfor k, v := range expected {\n\t\t\tif av, ok := actual[k]; ok && v == av {\n\t\t\t\tdelete(expected, k)\n\t\t\t\tdelete(actual, k)\n\t\t\t}\n\t\t}\n\n\t\tspewConf := spew.NewDefaultConfig()\n\t\tspewConf.SortKeys = true\n\t\treturn fmt.Errorf(\n\t\t\t\"Attributes not equivalent. Difference is shown below. Top is actual, bottom is expected.\"+\n\t\t\t\t\"\\n\\n%s\\n\\n%s\",\n\t\t\tspewConf.Sdump(actual), spewConf.Sdump(expected))\n\t}\n\n\treturn nil\n}\n\nfunc testConfig(opts terraform.ContextOpts, step TestStep) (*configs.Config, error) {\n\tif step.PreConfig != nil {\n\t\tstep.PreConfig()\n\t}\n\n\tcfgPath, err := ioutil.TempDir(\"\", \"tf-test\")\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"Error creating temporary directory for config: %s\", err)\n\t}\n\n\tif step.PreventDiskCleanup {\n\t\tlog.Printf(\"[INFO] Skipping defer os.RemoveAll call\")\n\t} else {\n\t\tdefer os.RemoveAll(cfgPath)\n\t}\n\n\t// Write the main configuration file\n\terr = ioutil.WriteFile(filepath.Join(cfgPath, \"main.tf\"), []byte(step.Config), os.ModePerm)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"Error creating temporary file for config: %s\", err)\n\t}\n\n\t// Create directory for our child modules, if any.\n\tmodulesDir := filepath.Join(cfgPath, \".modules\")\n\terr = os.Mkdir(modulesDir, os.ModePerm)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"Error creating child modules directory: %s\", err)\n\t}\n\n\tinst := initwd.NewModuleInstaller(modulesDir, nil)\n\t_, installDiags := inst.InstallModules(cfgPath, true, initwd.ModuleInstallHooksImpl{})\n\tif installDiags.HasErrors() {\n\t\treturn nil, installDiags.Err()\n\t}\n\n\tloader, err := configload.NewLoader(&configload.Config{\n\t\tModulesDir: modulesDir,\n\t})\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to create config loader: %s\", err)\n\t}\n\n\tconfig, configDiags := loader.LoadConfig(cfgPath)\n\tif configDiags.HasErrors() {\n\t\treturn nil, configDiags\n\t}\n\n\treturn config, nil\n}\n\nfunc testResource(c TestStep, state *terraform.State) (*terraform.ResourceState, error) {\n\tif c.ResourceName == \"\" {\n\t\treturn nil, fmt.Errorf(\"ResourceName must be set in TestStep\")\n\t}\n\n\tfor _, m := range state.Modules {\n\t\tif len(m.Resources) > 0 {\n\t\t\tif v, ok := m.Resources[c.ResourceName]; ok {\n\t\t\t\treturn v, nil\n\t\t\t}\n\t\t}\n\t}\n\n\treturn nil, fmt.Errorf(\n\t\t\"Resource specified by ResourceName couldn't be found: %s\", c.ResourceName)\n}\n\n// ComposeTestCheckFunc lets you compose multiple TestCheckFuncs into\n// a single TestCheckFunc.\n//\n// As a user testing their provider, this lets you decompose your checks\n// into smaller pieces more easily.\nfunc ComposeTestCheckFunc(fs ...TestCheckFunc) TestCheckFunc {\n\treturn func(s *terraform.State) error {\n\t\tfor i, f := range fs {\n\t\t\tif err := f(s); err != nil {\n\t\t\t\treturn fmt.Errorf(\"Check %d/%d error: %s\", i+1, len(fs), err)\n\t\t\t}\n\t\t}\n\n\t\treturn nil\n\t}\n}\n\n// ComposeAggregateTestCheckFunc lets you compose multiple TestCheckFuncs into\n// a single TestCheckFunc.\n//\n// As a user testing their provider, this lets you decompose your checks\n// into smaller pieces more easily.\n//\n// Unlike ComposeTestCheckFunc, ComposeAggergateTestCheckFunc runs _all_ of the\n// TestCheckFuncs and aggregates failures.\nfunc ComposeAggregateTestCheckFunc(fs ...TestCheckFunc) TestCheckFunc {\n\treturn func(s *terraform.State) error {\n\t\tvar result *multierror.Error\n\n\t\tfor i, f := range fs {\n\t\t\tif err := f(s); err != nil {\n\t\t\t\tresult = multierror.Append(result, fmt.Errorf(\"Check %d/%d error: %s\", i+1, len(fs), err))\n\t\t\t}\n\t\t}\n\n\t\treturn result.ErrorOrNil()\n\t}\n}\n\n// TestCheckResourceAttrSet is a TestCheckFunc which ensures a value\n// exists in state for the given name/key combination. It is useful when\n// testing that computed values were set, when it is not possible to\n// know ahead of time what the values will be.\nfunc TestCheckResourceAttrSet(name, key string) TestCheckFunc {\n\treturn func(s *terraform.State) error {\n\t\tis, err := primaryInstanceState(s, name)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\treturn testCheckResourceAttrSet(is, name, key)\n\t}\n}\n\n// TestCheckModuleResourceAttrSet - as per TestCheckResourceAttrSet but with\n// support for non-root modules\nfunc TestCheckModuleResourceAttrSet(mp []string, name string, key string) TestCheckFunc {\n\tmpt := addrs.Module(mp).UnkeyedInstanceShim()\n\treturn func(s *terraform.State) error {\n\t\tis, err := modulePathPrimaryInstanceState(s, mpt, name)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\treturn testCheckResourceAttrSet(is, name, key)\n\t}\n}\n\nfunc testCheckResourceAttrSet(is *terraform.InstanceState, name string, key string) error {\n\tif val, ok := is.Attributes[key]; !ok || val == \"\" {\n\t\treturn fmt.Errorf(\"%s: Attribute '%s' expected to be set\", name, key)\n\t}\n\n\treturn nil\n}\n\n// TestCheckResourceAttr is a TestCheckFunc which validates\n// the value in state for the given name/key combination.\nfunc TestCheckResourceAttr(name, key, value string) TestCheckFunc {\n\treturn func(s *terraform.State) error {\n\t\tis, err := primaryInstanceState(s, name)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\treturn testCheckResourceAttr(is, name, key, value)\n\t}\n}\n\n// TestCheckModuleResourceAttr - as per TestCheckResourceAttr but with\n// support for non-root modules\nfunc TestCheckModuleResourceAttr(mp []string, name string, key string, value string) TestCheckFunc {\n\tmpt := addrs.Module(mp).UnkeyedInstanceShim()\n\treturn func(s *terraform.State) error {\n\t\tis, err := modulePathPrimaryInstanceState(s, mpt, name)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\treturn testCheckResourceAttr(is, name, key, value)\n\t}\n}\n\nfunc testCheckResourceAttr(is *terraform.InstanceState, name string, key string, value string) error {\n\t// Empty containers may be elided from the state.\n\t// If the intent here is to check for an empty container, allow the key to\n\t// also be non-existent.\n\temptyCheck := false\n\tif value == \"0\" && (strings.HasSuffix(key, \".#\") || strings.HasSuffix(key, \".%\")) {\n\t\temptyCheck = true\n\t}\n\n\tif v, ok := is.Attributes[key]; !ok || v != value {\n\t\tif emptyCheck && !ok {\n\t\t\treturn nil\n\t\t}\n\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"%s: Attribute '%s' not found\", name, key)\n\t\t}\n\n\t\treturn fmt.Errorf(\n\t\t\t\"%s: Attribute '%s' expected %#v, got %#v\",\n\t\t\tname,\n\t\t\tkey,\n\t\t\tvalue,\n\t\t\tv)\n\t}\n\treturn nil\n}\n\n// TestCheckNoResourceAttr is a TestCheckFunc which ensures that\n// NO value exists in state for the given name/key combination.\nfunc TestCheckNoResourceAttr(name, key string) TestCheckFunc {\n\treturn func(s *terraform.State) error {\n\t\tis, err := primaryInstanceState(s, name)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\treturn testCheckNoResourceAttr(is, name, key)\n\t}\n}\n\n// TestCheckModuleNoResourceAttr - as per TestCheckNoResourceAttr but with\n// support for non-root modules\nfunc TestCheckModuleNoResourceAttr(mp []string, name string, key string) TestCheckFunc {\n\tmpt := addrs.Module(mp).UnkeyedInstanceShim()\n\treturn func(s *terraform.State) error {\n\t\tis, err := modulePathPrimaryInstanceState(s, mpt, name)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\treturn testCheckNoResourceAttr(is, name, key)\n\t}\n}\n\nfunc testCheckNoResourceAttr(is *terraform.InstanceState, name string, key string) error {\n\t// Empty containers may sometimes be included in the state.\n\t// If the intent here is to check for an empty container, allow the value to\n\t// also be \"0\".\n\temptyCheck := false\n\tif strings.HasSuffix(key, \".#\") || strings.HasSuffix(key, \".%\") {\n\t\temptyCheck = true\n\t}\n\n\tval, exists := is.Attributes[key]\n\tif emptyCheck && val == \"0\" {\n\t\treturn nil\n\t}\n\n\tif exists {\n\t\treturn fmt.Errorf(\"%s: Attribute '%s' found when not expected\", name, key)\n\t}\n\n\treturn nil\n}\n\n// TestMatchResourceAttr is a TestCheckFunc which checks that the value\n// in state for the given name/key combination matches the given regex.\nfunc TestMatchResourceAttr(name, key string, r *regexp.Regexp) TestCheckFunc {\n\treturn func(s *terraform.State) error {\n\t\tis, err := primaryInstanceState(s, name)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\treturn testMatchResourceAttr(is, name, key, r)\n\t}\n}\n\n// TestModuleMatchResourceAttr - as per TestMatchResourceAttr but with\n// support for non-root modules\nfunc TestModuleMatchResourceAttr(mp []string, name string, key string, r *regexp.Regexp) TestCheckFunc {\n\tmpt := addrs.Module(mp).UnkeyedInstanceShim()\n\treturn func(s *terraform.State) error {\n\t\tis, err := modulePathPrimaryInstanceState(s, mpt, name)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\treturn testMatchResourceAttr(is, name, key, r)\n\t}\n}\n\nfunc testMatchResourceAttr(is *terraform.InstanceState, name string, key string, r *regexp.Regexp) error {\n\tif !r.MatchString(is.Attributes[key]) {\n\t\treturn fmt.Errorf(\n\t\t\t\"%s: Attribute '%s' didn't match %q, got %#v\",\n\t\t\tname,\n\t\t\tkey,\n\t\t\tr.String(),\n\t\t\tis.Attributes[key])\n\t}\n\n\treturn nil\n}\n\n// TestCheckResourceAttrPtr is like TestCheckResourceAttr except the\n// value is a pointer so that it can be updated while the test is running.\n// It will only be dereferenced at the point this step is run.\nfunc TestCheckResourceAttrPtr(name string, key string, value *string) TestCheckFunc {\n\treturn func(s *terraform.State) error {\n\t\treturn TestCheckResourceAttr(name, key, *value)(s)\n\t}\n}\n\n// TestCheckModuleResourceAttrPtr - as per TestCheckResourceAttrPtr but with\n// support for non-root modules\nfunc TestCheckModuleResourceAttrPtr(mp []string, name string, key string, value *string) TestCheckFunc {\n\treturn func(s *terraform.State) error {\n\t\treturn TestCheckModuleResourceAttr(mp, name, key, *value)(s)\n\t}\n}\n\n// TestCheckResourceAttrPair is a TestCheckFunc which validates that the values\n// in state for a pair of name/key combinations are equal.\nfunc TestCheckResourceAttrPair(nameFirst, keyFirst, nameSecond, keySecond string) TestCheckFunc {\n\treturn func(s *terraform.State) error {\n\t\tisFirst, err := primaryInstanceState(s, nameFirst)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tisSecond, err := primaryInstanceState(s, nameSecond)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\treturn testCheckResourceAttrPair(isFirst, nameFirst, keyFirst, isSecond, nameSecond, keySecond)\n\t}\n}\n\n// TestCheckModuleResourceAttrPair - as per TestCheckResourceAttrPair but with\n// support for non-root modules\nfunc TestCheckModuleResourceAttrPair(mpFirst []string, nameFirst string, keyFirst string, mpSecond []string, nameSecond string, keySecond string) TestCheckFunc {\n\tmptFirst := addrs.Module(mpFirst).UnkeyedInstanceShim()\n\tmptSecond := addrs.Module(mpSecond).UnkeyedInstanceShim()\n\treturn func(s *terraform.State) error {\n\t\tisFirst, err := modulePathPrimaryInstanceState(s, mptFirst, nameFirst)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tisSecond, err := modulePathPrimaryInstanceState(s, mptSecond, nameSecond)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\treturn testCheckResourceAttrPair(isFirst, nameFirst, keyFirst, isSecond, nameSecond, keySecond)\n\t}\n}\n\nfunc testCheckResourceAttrPair(isFirst *terraform.InstanceState, nameFirst string, keyFirst string, isSecond *terraform.InstanceState, nameSecond string, keySecond string) error {\n\tvFirst, okFirst := isFirst.Attributes[keyFirst]\n\tvSecond, okSecond := isSecond.Attributes[keySecond]\n\n\t// Container count values of 0 should not be relied upon, and not reliably\n\t// maintained by helper/schema. For the purpose of tests, consider unset and\n\t// 0 to be equal.\n\tif len(keyFirst) > 2 && len(keySecond) > 2 && keyFirst[len(keyFirst)-2:] == keySecond[len(keySecond)-2:] &&\n\t\t(strings.HasSuffix(keyFirst, \".#\") || strings.HasSuffix(keyFirst, \".%\")) {\n\t\t// they have the same suffix, and it is a collection count key.\n\t\tif vFirst == \"0\" || vFirst == \"\" {\n\t\t\tokFirst = false\n\t\t}\n\t\tif vSecond == \"0\" || vSecond == \"\" {\n\t\t\tokSecond = false\n\t\t}\n\t}\n\n\tif okFirst != okSecond {\n\t\tif !okFirst {\n\t\t\treturn fmt.Errorf(\"%s: Attribute %q not set, but %q is set in %s as %q\", nameFirst, keyFirst, keySecond, nameSecond, vSecond)\n\t\t}\n\t\treturn fmt.Errorf(\"%s: Attribute %q is %q, but %q is not set in %s\", nameFirst, keyFirst, vFirst, keySecond, nameSecond)\n\t}\n\tif !(okFirst || okSecond) {\n\t\t// If they both don't exist then they are equally unset, so that's okay.\n\t\treturn nil\n\t}\n\n\tif vFirst != vSecond {\n\t\treturn fmt.Errorf(\n\t\t\t\"%s: Attribute '%s' expected %#v, got %#v\",\n\t\t\tnameFirst,\n\t\t\tkeyFirst,\n\t\t\tvSecond,\n\t\t\tvFirst)\n\t}\n\n\treturn nil\n}\n\n// TestCheckOutput checks an output in the Terraform configuration\nfunc TestCheckOutput(name, value string) TestCheckFunc {\n\treturn func(s *terraform.State) error {\n\t\tms := s.RootModule()\n\t\trs, ok := ms.Outputs[name]\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"Not found: %s\", name)\n\t\t}\n\n\t\tif rs.Value != value {\n\t\t\treturn fmt.Errorf(\n\t\t\t\t\"Output '%s': expected %#v, got %#v\",\n\t\t\t\tname,\n\t\t\t\tvalue,\n\t\t\t\trs)\n\t\t}\n\n\t\treturn nil\n\t}\n}\n\nfunc TestMatchOutput(name string, r *regexp.Regexp) TestCheckFunc {\n\treturn func(s *terraform.State) error {\n\t\tms := s.RootModule()\n\t\trs, ok := ms.Outputs[name]\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"Not found: %s\", name)\n\t\t}\n\n\t\tif !r.MatchString(rs.Value.(string)) {\n\t\t\treturn fmt.Errorf(\n\t\t\t\t\"Output '%s': %#v didn't match %q\",\n\t\t\t\tname,\n\t\t\t\trs,\n\t\t\t\tr.String())\n\t\t}\n\n\t\treturn nil\n\t}\n}\n\n// TestT is the interface used to handle the test lifecycle of a test.\n//\n// Users should just use a *testing.T object, which implements this.\ntype TestT interface {\n\tError(args ...interface{})\n\tFatal(args ...interface{})\n\tSkip(args ...interface{})\n\tName() string\n\tParallel()\n}\n\n// This is set to true by unit tests to alter some behavior\nvar testTesting = false\n\n// modulePrimaryInstanceState returns the instance state for the given resource\n// name in a ModuleState\nfunc modulePrimaryInstanceState(s *terraform.State, ms *terraform.ModuleState, name string) (*terraform.InstanceState, error) {\n\trs, ok := ms.Resources[name]\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"Not found: %s in %s\", name, ms.Path)\n\t}\n\n\tis := rs.Primary\n\tif is == nil {\n\t\treturn nil, fmt.Errorf(\"No primary instance: %s in %s\", name, ms.Path)\n\t}\n\n\treturn is, nil\n}\n\n// modulePathPrimaryInstanceState returns the primary instance state for the\n// given resource name in a given module path.\nfunc modulePathPrimaryInstanceState(s *terraform.State, mp addrs.ModuleInstance, name string) (*terraform.InstanceState, error) {\n\tms := s.ModuleByPath(mp)\n\tif ms == nil {\n\t\treturn nil, fmt.Errorf(\"No module found at: %s\", mp)\n\t}\n\n\treturn modulePrimaryInstanceState(s, ms, name)\n}\n\n// primaryInstanceState returns the primary instance state for the given\n// resource name in the root module.\nfunc primaryInstanceState(s *terraform.State, name string) (*terraform.InstanceState, error) {\n\tms := s.RootModule()\n\treturn modulePrimaryInstanceState(s, ms, name)\n}\n\n// operationError is a specialized implementation of error used to describe\n// failures during one of the several operations performed for a particular\n// test case.\ntype operationError struct {\n\tOpName string\n\tDiags  tfdiags.Diagnostics\n}\n\nfunc newOperationError(opName string, diags tfdiags.Diagnostics) error {\n\treturn operationError{opName, diags}\n}\n\n// Error returns a terse error string containing just the basic diagnostic\n// messages, for situations where normal Go error behavior is appropriate.\nfunc (err operationError) Error() string {\n\treturn fmt.Sprintf(\"errors during %s: %s\", err.OpName, err.Diags.Err().Error())\n}\n\n// ErrorDetail is like Error except it includes verbosely-rendered diagnostics\n// similar to what would come from a normal Terraform run, which include\n// additional context not included in Error().\nfunc (err operationError) ErrorDetail() string {\n\tvar buf bytes.Buffer\n\tfmt.Fprintf(&buf, \"errors during %s:\", err.OpName)\n\tclr := &colorstring.Colorize{Disable: true, Colors: colorstring.DefaultColors}\n\tfor _, diag := range err.Diags {\n\t\tdiagStr := format.Diagnostic(diag, nil, clr, 78)\n\t\tbuf.WriteByte('\\n')\n\t\tbuf.WriteString(diagStr)\n\t}\n\treturn buf.String()\n}\n\n// detailedErrorMessage is a helper for calling ErrorDetail on an error if\n// it is an operationError or just taking Error otherwise.\nfunc detailedErrorMessage(err error) string {\n\tswitch tErr := err.(type) {\n\tcase operationError:\n\t\treturn tErr.ErrorDetail()\n\tdefault:\n\t\treturn err.Error()\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/helper/resource/testing_config.go",
    "content": "package resource\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"log\"\n\t\"sort\"\n\t\"strings\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/config\"\n\t\"github.com/hashicorp/terraform/config/hcl2shim\"\n\t\"github.com/hashicorp/terraform/states\"\n\n\t\"github.com/hashicorp/errwrap\"\n\t\"github.com/hashicorp/terraform/plans\"\n\t\"github.com/hashicorp/terraform/terraform\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n)\n\n// testStepConfig runs a config-mode test step\nfunc testStepConfig(\n\topts terraform.ContextOpts,\n\tstate *terraform.State,\n\tstep TestStep) (*terraform.State, error) {\n\treturn testStep(opts, state, step)\n}\n\nfunc testStep(opts terraform.ContextOpts, state *terraform.State, step TestStep) (*terraform.State, error) {\n\tif !step.Destroy {\n\t\tif err := testStepTaint(state, step); err != nil {\n\t\t\treturn state, err\n\t\t}\n\t}\n\n\tcfg, err := testConfig(opts, step)\n\tif err != nil {\n\t\treturn state, err\n\t}\n\n\tvar stepDiags tfdiags.Diagnostics\n\n\t// Build the context\n\topts.Config = cfg\n\topts.State, err = terraform.ShimLegacyState(state)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\topts.Destroy = step.Destroy\n\tctx, stepDiags := terraform.NewContext(&opts)\n\tif stepDiags.HasErrors() {\n\t\treturn state, fmt.Errorf(\"Error initializing context: %s\", stepDiags.Err())\n\t}\n\tif stepDiags := ctx.Validate(); len(stepDiags) > 0 {\n\t\tif stepDiags.HasErrors() {\n\t\t\treturn state, errwrap.Wrapf(\"config is invalid: {{err}}\", stepDiags.Err())\n\t\t}\n\n\t\tlog.Printf(\"[WARN] Config warnings:\\n%s\", stepDiags)\n\t}\n\n\t// Refresh!\n\tnewState, stepDiags := ctx.Refresh()\n\t// shim the state first so the test can check the state on errors\n\n\tstate, err = shimNewState(newState, step.providers)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif stepDiags.HasErrors() {\n\t\treturn state, newOperationError(\"refresh\", stepDiags)\n\t}\n\n\t// If this step is a PlanOnly step, skip over this first Plan and subsequent\n\t// Apply, and use the follow up Plan that checks for perpetual diffs\n\tif !step.PlanOnly {\n\t\t// Plan!\n\t\tif p, stepDiags := ctx.Plan(); stepDiags.HasErrors() {\n\t\t\treturn state, newOperationError(\"plan\", stepDiags)\n\t\t} else {\n\t\t\tlog.Printf(\"[WARN] Test: Step plan: %s\", legacyPlanComparisonString(newState, p.Changes))\n\t\t}\n\n\t\t// We need to keep a copy of the state prior to destroying\n\t\t// such that destroy steps can verify their behavior in the check\n\t\t// function\n\t\tstateBeforeApplication := state.DeepCopy()\n\n\t\t// Apply the diff, creating real resources.\n\t\tnewState, stepDiags = ctx.Apply()\n\t\t// shim the state first so the test can check the state on errors\n\t\tstate, err = shimNewState(newState, step.providers)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif stepDiags.HasErrors() {\n\t\t\treturn state, newOperationError(\"apply\", stepDiags)\n\t\t}\n\n\t\t// Run any configured checks\n\t\tif step.Check != nil {\n\t\t\tif step.Destroy {\n\t\t\t\tif err := step.Check(stateBeforeApplication); err != nil {\n\t\t\t\t\treturn state, fmt.Errorf(\"Check failed: %s\", err)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif err := step.Check(state); err != nil {\n\t\t\t\t\treturn state, fmt.Errorf(\"Check failed: %s\", err)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Now, verify that Plan is now empty and we don't have a perpetual diff issue\n\t// We do this with TWO plans. One without a refresh.\n\tvar p *plans.Plan\n\tif p, stepDiags = ctx.Plan(); stepDiags.HasErrors() {\n\t\treturn state, newOperationError(\"follow-up plan\", stepDiags)\n\t}\n\tif !p.Changes.Empty() {\n\t\tif step.ExpectNonEmptyPlan {\n\t\t\tlog.Printf(\"[INFO] Got non-empty plan, as expected:\\n\\n%s\", legacyPlanComparisonString(newState, p.Changes))\n\t\t} else {\n\t\t\treturn state, fmt.Errorf(\n\t\t\t\t\"After applying this step, the plan was not empty:\\n\\n%s\", legacyPlanComparisonString(newState, p.Changes))\n\t\t}\n\t}\n\n\t// And another after a Refresh.\n\tif !step.Destroy || (step.Destroy && !step.PreventPostDestroyRefresh) {\n\t\tnewState, stepDiags = ctx.Refresh()\n\t\tif stepDiags.HasErrors() {\n\t\t\treturn state, newOperationError(\"follow-up refresh\", stepDiags)\n\t\t}\n\n\t\tstate, err = shimNewState(newState, step.providers)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\tif p, stepDiags = ctx.Plan(); stepDiags.HasErrors() {\n\t\treturn state, newOperationError(\"second follow-up refresh\", stepDiags)\n\t}\n\tempty := p.Changes.Empty()\n\n\t// Data resources are tricky because they legitimately get instantiated\n\t// during refresh so that they will be already populated during the\n\t// plan walk. Because of this, if we have any data resources in the\n\t// config we'll end up wanting to destroy them again here. This is\n\t// acceptable and expected, and we'll treat it as \"empty\" for the\n\t// sake of this testing.\n\tif step.Destroy && !empty {\n\t\tempty = true\n\t\tfor _, change := range p.Changes.Resources {\n\t\t\tif change.Addr.Resource.Resource.Mode != addrs.DataResourceMode {\n\t\t\t\tempty = false\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\n\tif !empty {\n\t\tif step.ExpectNonEmptyPlan {\n\t\t\tlog.Printf(\"[INFO] Got non-empty plan, as expected:\\n\\n%s\", legacyPlanComparisonString(newState, p.Changes))\n\t\t} else {\n\t\t\treturn state, fmt.Errorf(\n\t\t\t\t\"After applying this step and refreshing, \"+\n\t\t\t\t\t\"the plan was not empty:\\n\\n%s\", legacyPlanComparisonString(newState, p.Changes))\n\t\t}\n\t}\n\n\t// Made it here, but expected a non-empty plan, fail!\n\tif step.ExpectNonEmptyPlan && empty {\n\t\treturn state, fmt.Errorf(\"Expected a non-empty plan, but got an empty plan!\")\n\t}\n\n\t// Made it here? Good job test step!\n\treturn state, nil\n}\n\n// legacyPlanComparisonString produces a string representation of the changes\n// from a plan and a given state togther, as was formerly produced by the\n// String method of terraform.Plan.\n//\n// This is here only for compatibility with existing tests that predate our\n// new plan and state types, and should not be used in new tests. Instead, use\n// a library like \"cmp\" to do a deep equality  and diff on the two\n// data structures.\nfunc legacyPlanComparisonString(state *states.State, changes *plans.Changes) string {\n\treturn fmt.Sprintf(\n\t\t\"DIFF:\\n\\n%s\\n\\nSTATE:\\n\\n%s\",\n\t\tlegacyDiffComparisonString(changes),\n\t\tstate.String(),\n\t)\n}\n\n// legacyDiffComparisonString produces a string representation of the changes\n// from a planned changes object, as was formerly produced by the String method\n// of terraform.Diff.\n//\n// This is here only for compatibility with existing tests that predate our\n// new plan types, and should not be used in new tests. Instead, use a library\n// like \"cmp\" to do a deep equality check and diff on the two data structures.\nfunc legacyDiffComparisonString(changes *plans.Changes) string {\n\t// The old string representation of a plan was grouped by module, but\n\t// our new plan structure is not grouped in that way and so we'll need\n\t// to preprocess it in order to produce that grouping.\n\ttype ResourceChanges struct {\n\t\tCurrent *plans.ResourceInstanceChangeSrc\n\t\tDeposed map[states.DeposedKey]*plans.ResourceInstanceChangeSrc\n\t}\n\tbyModule := map[string]map[string]*ResourceChanges{}\n\tresourceKeys := map[string][]string{}\n\trequiresReplace := map[string][]string{}\n\tvar moduleKeys []string\n\tfor _, rc := range changes.Resources {\n\t\tif rc.Action == plans.NoOp {\n\t\t\t// We won't mention no-op changes here at all, since the old plan\n\t\t\t// model we are emulating here didn't have such a concept.\n\t\t\tcontinue\n\t\t}\n\t\tmoduleKey := rc.Addr.Module.String()\n\t\tif _, exists := byModule[moduleKey]; !exists {\n\t\t\tmoduleKeys = append(moduleKeys, moduleKey)\n\t\t\tbyModule[moduleKey] = make(map[string]*ResourceChanges)\n\t\t}\n\t\tresourceKey := rc.Addr.Resource.String()\n\t\tif _, exists := byModule[moduleKey][resourceKey]; !exists {\n\t\t\tresourceKeys[moduleKey] = append(resourceKeys[moduleKey], resourceKey)\n\t\t\tbyModule[moduleKey][resourceKey] = &ResourceChanges{\n\t\t\t\tDeposed: make(map[states.DeposedKey]*plans.ResourceInstanceChangeSrc),\n\t\t\t}\n\t\t}\n\n\t\tif rc.DeposedKey == states.NotDeposed {\n\t\t\tbyModule[moduleKey][resourceKey].Current = rc\n\t\t} else {\n\t\t\tbyModule[moduleKey][resourceKey].Deposed[rc.DeposedKey] = rc\n\t\t}\n\n\t\trr := []string{}\n\t\tfor _, p := range rc.RequiredReplace.List() {\n\t\t\trr = append(rr, hcl2shim.FlatmapKeyFromPath(p))\n\t\t}\n\t\trequiresReplace[resourceKey] = rr\n\t}\n\tsort.Strings(moduleKeys)\n\tfor _, ks := range resourceKeys {\n\t\tsort.Strings(ks)\n\t}\n\n\tvar buf bytes.Buffer\n\n\tfor _, moduleKey := range moduleKeys {\n\t\trcs := byModule[moduleKey]\n\t\tvar mBuf bytes.Buffer\n\n\t\tfor _, resourceKey := range resourceKeys[moduleKey] {\n\t\t\trc := rcs[resourceKey]\n\n\t\t\tforceNewAttrs := requiresReplace[resourceKey]\n\n\t\t\tcrud := \"UPDATE\"\n\t\t\tif rc.Current != nil {\n\t\t\t\tswitch rc.Current.Action {\n\t\t\t\tcase plans.DeleteThenCreate:\n\t\t\t\t\tcrud = \"DESTROY/CREATE\"\n\t\t\t\tcase plans.CreateThenDelete:\n\t\t\t\t\tcrud = \"CREATE/DESTROY\"\n\t\t\t\tcase plans.Delete:\n\t\t\t\t\tcrud = \"DESTROY\"\n\t\t\t\tcase plans.Create:\n\t\t\t\t\tcrud = \"CREATE\"\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// We must be working on a deposed object then, in which\n\t\t\t\t// case destroying is the only possible action.\n\t\t\t\tcrud = \"DESTROY\"\n\t\t\t}\n\n\t\t\textra := \"\"\n\t\t\tif rc.Current == nil && len(rc.Deposed) > 0 {\n\t\t\t\textra = \" (deposed only)\"\n\t\t\t}\n\n\t\t\tfmt.Fprintf(\n\t\t\t\t&mBuf, \"%s: %s%s\\n\",\n\t\t\t\tcrud, resourceKey, extra,\n\t\t\t)\n\n\t\t\tattrNames := map[string]bool{}\n\t\t\tvar oldAttrs map[string]string\n\t\t\tvar newAttrs map[string]string\n\t\t\tif rc.Current != nil {\n\t\t\t\tif before := rc.Current.Before; before != nil {\n\t\t\t\t\tty, err := before.ImpliedType()\n\t\t\t\t\tif err == nil {\n\t\t\t\t\t\tval, err := before.Decode(ty)\n\t\t\t\t\t\tif err == nil {\n\t\t\t\t\t\t\toldAttrs = hcl2shim.FlatmapValueFromHCL2(val)\n\t\t\t\t\t\t\tfor k := range oldAttrs {\n\t\t\t\t\t\t\t\tattrNames[k] = true\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif after := rc.Current.After; after != nil {\n\t\t\t\t\tty, err := after.ImpliedType()\n\t\t\t\t\tif err == nil {\n\t\t\t\t\t\tval, err := after.Decode(ty)\n\t\t\t\t\t\tif err == nil {\n\t\t\t\t\t\t\tnewAttrs = hcl2shim.FlatmapValueFromHCL2(val)\n\t\t\t\t\t\t\tfor k := range newAttrs {\n\t\t\t\t\t\t\t\tattrNames[k] = true\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif oldAttrs == nil {\n\t\t\t\toldAttrs = make(map[string]string)\n\t\t\t}\n\t\t\tif newAttrs == nil {\n\t\t\t\tnewAttrs = make(map[string]string)\n\t\t\t}\n\n\t\t\tattrNamesOrder := make([]string, 0, len(attrNames))\n\t\t\tkeyLen := 0\n\t\t\tfor n := range attrNames {\n\t\t\t\tattrNamesOrder = append(attrNamesOrder, n)\n\t\t\t\tif len(n) > keyLen {\n\t\t\t\t\tkeyLen = len(n)\n\t\t\t\t}\n\t\t\t}\n\t\t\tsort.Strings(attrNamesOrder)\n\n\t\t\tfor _, attrK := range attrNamesOrder {\n\t\t\t\tv := newAttrs[attrK]\n\t\t\t\tu := oldAttrs[attrK]\n\n\t\t\t\tif v == config.UnknownVariableValue {\n\t\t\t\t\tv = \"<computed>\"\n\t\t\t\t}\n\t\t\t\t// NOTE: we don't support <sensitive> here because we would\n\t\t\t\t// need schema to do that. Excluding sensitive values\n\t\t\t\t// is now done at the UI layer, and so should not be tested\n\t\t\t\t// at the core layer.\n\n\t\t\t\tupdateMsg := \"\"\n\n\t\t\t\t// This may not be as precise as in the old diff, as it matches\n\t\t\t\t// everything under the attribute that was originally marked as\n\t\t\t\t// ForceNew, but should help make it easier to determine what\n\t\t\t\t// caused replacement here.\n\t\t\t\tfor _, k := range forceNewAttrs {\n\t\t\t\t\tif strings.HasPrefix(attrK, k) {\n\t\t\t\t\t\tupdateMsg = \" (forces new resource)\"\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfmt.Fprintf(\n\t\t\t\t\t&mBuf, \"  %s:%s %#v => %#v%s\\n\",\n\t\t\t\t\tattrK,\n\t\t\t\t\tstrings.Repeat(\" \", keyLen-len(attrK)),\n\t\t\t\t\tu, v,\n\t\t\t\t\tupdateMsg,\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\n\t\tif moduleKey == \"\" { // root module\n\t\t\tbuf.Write(mBuf.Bytes())\n\t\t\tbuf.WriteByte('\\n')\n\t\t\tcontinue\n\t\t}\n\n\t\tfmt.Fprintf(&buf, \"%s:\\n\", moduleKey)\n\t\ts := bufio.NewScanner(&mBuf)\n\t\tfor s.Scan() {\n\t\t\tbuf.WriteString(fmt.Sprintf(\"  %s\\n\", s.Text()))\n\t\t}\n\t}\n\n\treturn buf.String()\n}\n\nfunc testStepTaint(state *terraform.State, step TestStep) error {\n\tfor _, p := range step.Taint {\n\t\tm := state.RootModule()\n\t\tif m == nil {\n\t\t\treturn errors.New(\"no state\")\n\t\t}\n\t\trs, ok := m.Resources[p]\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"resource %q not found in state\", p)\n\t\t}\n\t\tlog.Printf(\"[WARN] Test: Explicitly tainting resource %q\", p)\n\t\trs.Taint()\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/helper/resource/testing_import_state.go",
    "content": "package resource\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"reflect\"\n\t\"strings\"\n\n\t\"github.com/davecgh/go-spew/spew\"\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/hashicorp/hcl2/hcl/hclsyntax\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/helper/schema\"\n\t\"github.com/hashicorp/terraform/states\"\n\t\"github.com/hashicorp/terraform/terraform\"\n)\n\n// testStepImportState runs an imort state test step\nfunc testStepImportState(\n\topts terraform.ContextOpts,\n\tstate *terraform.State,\n\tstep TestStep) (*terraform.State, error) {\n\n\t// Determine the ID to import\n\tvar importId string\n\tswitch {\n\tcase step.ImportStateIdFunc != nil:\n\t\tvar err error\n\t\timportId, err = step.ImportStateIdFunc(state)\n\t\tif err != nil {\n\t\t\treturn state, err\n\t\t}\n\tcase step.ImportStateId != \"\":\n\t\timportId = step.ImportStateId\n\tdefault:\n\t\tresource, err := testResource(step, state)\n\t\tif err != nil {\n\t\t\treturn state, err\n\t\t}\n\t\timportId = resource.Primary.ID\n\t}\n\n\timportPrefix := step.ImportStateIdPrefix\n\tif importPrefix != \"\" {\n\t\timportId = fmt.Sprintf(\"%s%s\", importPrefix, importId)\n\t}\n\n\t// Setup the context. We initialize with an empty state. We use the\n\t// full config for provider configurations.\n\tcfg, err := testConfig(opts, step)\n\tif err != nil {\n\t\treturn state, err\n\t}\n\n\topts.Config = cfg\n\n\t// import tests start with empty state\n\topts.State = states.NewState()\n\n\tctx, stepDiags := terraform.NewContext(&opts)\n\tif stepDiags.HasErrors() {\n\t\treturn state, stepDiags.Err()\n\t}\n\n\t// The test step provides the resource address as a string, so we need\n\t// to parse it to get an addrs.AbsResourceAddress to pass in to the\n\t// import method.\n\ttraversal, hclDiags := hclsyntax.ParseTraversalAbs([]byte(step.ResourceName), \"\", hcl.Pos{})\n\tif hclDiags.HasErrors() {\n\t\treturn nil, hclDiags\n\t}\n\timportAddr, stepDiags := addrs.ParseAbsResourceInstance(traversal)\n\tif stepDiags.HasErrors() {\n\t\treturn nil, stepDiags.Err()\n\t}\n\n\t// Do the import\n\timportedState, stepDiags := ctx.Import(&terraform.ImportOpts{\n\t\t// Set the module so that any provider config is loaded\n\t\tConfig: cfg,\n\n\t\tTargets: []*terraform.ImportTarget{\n\t\t\t&terraform.ImportTarget{\n\t\t\t\tAddr: importAddr,\n\t\t\t\tID:   importId,\n\t\t\t},\n\t\t},\n\t})\n\tif stepDiags.HasErrors() {\n\t\tlog.Printf(\"[ERROR] Test: ImportState failure: %s\", stepDiags.Err())\n\t\treturn state, stepDiags.Err()\n\t}\n\n\tnewState, err := shimNewState(importedState, step.providers)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Go through the new state and verify\n\tif step.ImportStateCheck != nil {\n\t\tvar states []*terraform.InstanceState\n\t\tfor _, r := range newState.RootModule().Resources {\n\t\t\tif r.Primary != nil {\n\t\t\t\tis := r.Primary.DeepCopy()\n\t\t\t\tis.Ephemeral.Type = r.Type // otherwise the check function cannot see the type\n\t\t\t\tstates = append(states, is)\n\t\t\t}\n\t\t}\n\t\tif err := step.ImportStateCheck(states); err != nil {\n\t\t\treturn state, err\n\t\t}\n\t}\n\n\t// Verify that all the states match\n\tif step.ImportStateVerify {\n\t\tnew := newState.RootModule().Resources\n\t\told := state.RootModule().Resources\n\t\tfor _, r := range new {\n\t\t\t// Find the existing resource\n\t\t\tvar oldR *terraform.ResourceState\n\t\t\tfor _, r2 := range old {\n\t\t\t\tif r2.Primary != nil && r2.Primary.ID == r.Primary.ID && r2.Type == r.Type {\n\t\t\t\t\toldR = r2\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif oldR == nil {\n\t\t\t\treturn state, fmt.Errorf(\n\t\t\t\t\t\"Failed state verification, resource with ID %s not found\",\n\t\t\t\t\tr.Primary.ID)\n\t\t\t}\n\n\t\t\t// We'll try our best to find the schema for this resource type\n\t\t\t// so we can ignore Removed fields during validation. If we fail\n\t\t\t// to find the schema then we won't ignore them and so the test\n\t\t\t// will need to rely on explicit ImportStateVerifyIgnore, though\n\t\t\t// this shouldn't happen in any reasonable case.\n\t\t\tvar rsrcSchema *schema.Resource\n\t\t\tif providerAddr, diags := addrs.ParseAbsProviderConfigStr(r.Provider); !diags.HasErrors() {\n\t\t\t\tproviderType := providerAddr.ProviderConfig.Type\n\t\t\t\tif provider, ok := step.providers[providerType]; ok {\n\t\t\t\t\tif provider, ok := provider.(*schema.Provider); ok {\n\t\t\t\t\t\trsrcSchema = provider.ResourcesMap[r.Type]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// don't add empty flatmapped containers, so we can more easily\n\t\t\t// compare the attributes\n\t\t\tskipEmpty := func(k, v string) bool {\n\t\t\t\tif strings.HasSuffix(k, \".#\") || strings.HasSuffix(k, \".%\") {\n\t\t\t\t\tif v == \"0\" {\n\t\t\t\t\t\treturn true\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\t// Compare their attributes\n\t\t\tactual := make(map[string]string)\n\t\t\tfor k, v := range r.Primary.Attributes {\n\t\t\t\tif skipEmpty(k, v) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tactual[k] = v\n\t\t\t}\n\n\t\t\texpected := make(map[string]string)\n\t\t\tfor k, v := range oldR.Primary.Attributes {\n\t\t\t\tif skipEmpty(k, v) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\texpected[k] = v\n\t\t\t}\n\n\t\t\t// Remove fields we're ignoring\n\t\t\tfor _, v := range step.ImportStateVerifyIgnore {\n\t\t\t\tfor k := range actual {\n\t\t\t\t\tif strings.HasPrefix(k, v) {\n\t\t\t\t\t\tdelete(actual, k)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor k := range expected {\n\t\t\t\t\tif strings.HasPrefix(k, v) {\n\t\t\t\t\t\tdelete(expected, k)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Also remove any attributes that are marked as \"Removed\" in the\n\t\t\t// schema, if we have a schema to check that against.\n\t\t\tif rsrcSchema != nil {\n\t\t\t\tfor k := range actual {\n\t\t\t\t\tfor _, schema := range rsrcSchema.SchemasForFlatmapPath(k) {\n\t\t\t\t\t\tif schema.Removed != \"\" {\n\t\t\t\t\t\t\tdelete(actual, k)\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor k := range expected {\n\t\t\t\t\tfor _, schema := range rsrcSchema.SchemasForFlatmapPath(k) {\n\t\t\t\t\t\tif schema.Removed != \"\" {\n\t\t\t\t\t\t\tdelete(expected, k)\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif !reflect.DeepEqual(actual, expected) {\n\t\t\t\t// Determine only the different attributes\n\t\t\t\tfor k, v := range expected {\n\t\t\t\t\tif av, ok := actual[k]; ok && v == av {\n\t\t\t\t\t\tdelete(expected, k)\n\t\t\t\t\t\tdelete(actual, k)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tspewConf := spew.NewDefaultConfig()\n\t\t\t\tspewConf.SortKeys = true\n\t\t\t\treturn state, fmt.Errorf(\n\t\t\t\t\t\"ImportStateVerify attributes not equivalent. Difference is shown below. Top is actual, bottom is expected.\"+\n\t\t\t\t\t\t\"\\n\\n%s\\n\\n%s\",\n\t\t\t\t\tspewConf.Sdump(actual), spewConf.Sdump(expected))\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the old state (non-imported) so we don't change anything.\n\treturn state, nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/helper/resource/wait.go",
    "content": "package resource\n\nimport (\n\t\"sync\"\n\t\"time\"\n)\n\n// Retry is a basic wrapper around StateChangeConf that will just retry\n// a function until it no longer returns an error.\nfunc Retry(timeout time.Duration, f RetryFunc) error {\n\t// These are used to pull the error out of the function; need a mutex to\n\t// avoid a data race.\n\tvar resultErr error\n\tvar resultErrMu sync.Mutex\n\n\tc := &StateChangeConf{\n\t\tPending:    []string{\"retryableerror\"},\n\t\tTarget:     []string{\"success\"},\n\t\tTimeout:    timeout,\n\t\tMinTimeout: 500 * time.Millisecond,\n\t\tRefresh: func() (interface{}, string, error) {\n\t\t\trerr := f()\n\n\t\t\tresultErrMu.Lock()\n\t\t\tdefer resultErrMu.Unlock()\n\n\t\t\tif rerr == nil {\n\t\t\t\tresultErr = nil\n\t\t\t\treturn 42, \"success\", nil\n\t\t\t}\n\n\t\t\tresultErr = rerr.Err\n\n\t\t\tif rerr.Retryable {\n\t\t\t\treturn 42, \"retryableerror\", nil\n\t\t\t}\n\t\t\treturn nil, \"quit\", rerr.Err\n\t\t},\n\t}\n\n\t_, waitErr := c.WaitForState()\n\n\t// Need to acquire the lock here to be able to avoid race using resultErr as\n\t// the return value\n\tresultErrMu.Lock()\n\tdefer resultErrMu.Unlock()\n\n\t// resultErr may be nil because the wait timed out and resultErr was never\n\t// set; this is still an error\n\tif resultErr == nil {\n\t\treturn waitErr\n\t}\n\t// resultErr takes precedence over waitErr if both are set because it is\n\t// more likely to be useful\n\treturn resultErr\n}\n\n// RetryFunc is the function retried until it succeeds.\ntype RetryFunc func() *RetryError\n\n// RetryError is the required return type of RetryFunc. It forces client code\n// to choose whether or not a given error is retryable.\ntype RetryError struct {\n\tErr       error\n\tRetryable bool\n}\n\n// RetryableError is a helper to create a RetryError that's retryable from a\n// given error.\nfunc RetryableError(err error) *RetryError {\n\tif err == nil {\n\t\treturn nil\n\t}\n\treturn &RetryError{Err: err, Retryable: true}\n}\n\n// NonRetryableError is a helper to create a RetryError that's _not_ retryable\n// from a given error.\nfunc NonRetryableError(err error) *RetryError {\n\tif err == nil {\n\t\treturn nil\n\t}\n\treturn &RetryError{Err: err, Retryable: false}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/helper/schema/backend.go",
    "content": "package schema\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/hashicorp/terraform/tfdiags\"\n\t\"github.com/zclconf/go-cty/cty\"\n\n\t\"github.com/hashicorp/terraform/config/hcl2shim\"\n\t\"github.com/hashicorp/terraform/configs/configschema\"\n\t\"github.com/hashicorp/terraform/terraform\"\n\tctyconvert \"github.com/zclconf/go-cty/cty/convert\"\n)\n\n// Backend represents a partial backend.Backend implementation and simplifies\n// the creation of configuration loading and validation.\n//\n// Unlike other schema structs such as Provider, this struct is meant to be\n// embedded within your actual implementation. It provides implementations\n// only for Input and Configure and gives you a method for accessing the\n// configuration in the form of a ResourceData that you're expected to call\n// from the other implementation funcs.\ntype Backend struct {\n\t// Schema is the schema for the configuration of this backend. If this\n\t// Backend has no configuration this can be omitted.\n\tSchema map[string]*Schema\n\n\t// ConfigureFunc is called to configure the backend. Use the\n\t// FromContext* methods to extract information from the context.\n\t// This can be nil, in which case nothing will be called but the\n\t// config will still be stored.\n\tConfigureFunc func(context.Context) error\n\n\tconfig *ResourceData\n}\n\nvar (\n\tbackendConfigKey = contextKey(\"backend config\")\n)\n\n// FromContextBackendConfig extracts a ResourceData with the configuration\n// from the context. This should only be called by Backend functions.\nfunc FromContextBackendConfig(ctx context.Context) *ResourceData {\n\treturn ctx.Value(backendConfigKey).(*ResourceData)\n}\n\nfunc (b *Backend) ConfigSchema() *configschema.Block {\n\t// This is an alias of CoreConfigSchema just to implement the\n\t// backend.Backend interface.\n\treturn b.CoreConfigSchema()\n}\n\nfunc (b *Backend) PrepareConfig(configVal cty.Value) (cty.Value, tfdiags.Diagnostics) {\n\tif b == nil {\n\t\treturn configVal, nil\n\t}\n\tvar diags tfdiags.Diagnostics\n\tvar err error\n\n\t// In order to use Transform below, this needs to be filled out completely\n\t// according the schema.\n\tconfigVal, err = b.CoreConfigSchema().CoerceValue(configVal)\n\tif err != nil {\n\t\treturn configVal, diags.Append(err)\n\t}\n\n\t// lookup any required, top-level attributes that are Null, and see if we\n\t// have a Default value available.\n\tconfigVal, err = cty.Transform(configVal, func(path cty.Path, val cty.Value) (cty.Value, error) {\n\t\t// we're only looking for top-level attributes\n\t\tif len(path) != 1 {\n\t\t\treturn val, nil\n\t\t}\n\n\t\t// nothing to do if we already have a value\n\t\tif !val.IsNull() {\n\t\t\treturn val, nil\n\t\t}\n\n\t\t// get the Schema definition for this attribute\n\t\tgetAttr, ok := path[0].(cty.GetAttrStep)\n\t\t// these should all exist, but just ignore anything strange\n\t\tif !ok {\n\t\t\treturn val, nil\n\t\t}\n\n\t\tattrSchema := b.Schema[getAttr.Name]\n\t\t// continue to ignore anything that doesn't match\n\t\tif attrSchema == nil {\n\t\t\treturn val, nil\n\t\t}\n\n\t\t// this is deprecated, so don't set it\n\t\tif attrSchema.Deprecated != \"\" || attrSchema.Removed != \"\" {\n\t\t\treturn val, nil\n\t\t}\n\n\t\t// find a default value if it exists\n\t\tdef, err := attrSchema.DefaultValue()\n\t\tif err != nil {\n\t\t\tdiags = diags.Append(fmt.Errorf(\"error getting default for %q: %s\", getAttr.Name, err))\n\t\t\treturn val, err\n\t\t}\n\n\t\t// no default\n\t\tif def == nil {\n\t\t\treturn val, nil\n\t\t}\n\n\t\t// create a cty.Value and make sure it's the correct type\n\t\ttmpVal := hcl2shim.HCL2ValueFromConfigValue(def)\n\n\t\t// helper/schema used to allow setting \"\" to a bool\n\t\tif val.Type() == cty.Bool && tmpVal.RawEquals(cty.StringVal(\"\")) {\n\t\t\t// return a warning about the conversion\n\t\t\tdiags = diags.Append(\"provider set empty string as default value for bool \" + getAttr.Name)\n\t\t\ttmpVal = cty.False\n\t\t}\n\n\t\tval, err = ctyconvert.Convert(tmpVal, val.Type())\n\t\tif err != nil {\n\t\t\tdiags = diags.Append(fmt.Errorf(\"error setting default for %q: %s\", getAttr.Name, err))\n\t\t}\n\n\t\treturn val, err\n\t})\n\tif err != nil {\n\t\t// any error here was already added to the diagnostics\n\t\treturn configVal, diags\n\t}\n\n\tshimRC := b.shimConfig(configVal)\n\twarns, errs := schemaMap(b.Schema).Validate(shimRC)\n\tfor _, warn := range warns {\n\t\tdiags = diags.Append(tfdiags.SimpleWarning(warn))\n\t}\n\tfor _, err := range errs {\n\t\tdiags = diags.Append(err)\n\t}\n\treturn configVal, diags\n}\n\nfunc (b *Backend) Configure(obj cty.Value) tfdiags.Diagnostics {\n\tif b == nil {\n\t\treturn nil\n\t}\n\n\tvar diags tfdiags.Diagnostics\n\tsm := schemaMap(b.Schema)\n\tshimRC := b.shimConfig(obj)\n\n\t// Get a ResourceData for this configuration. To do this, we actually\n\t// generate an intermediary \"diff\" although that is never exposed.\n\tdiff, err := sm.Diff(nil, shimRC, nil, nil, true)\n\tif err != nil {\n\t\tdiags = diags.Append(err)\n\t\treturn diags\n\t}\n\n\tdata, err := sm.Data(nil, diff)\n\tif err != nil {\n\t\tdiags = diags.Append(err)\n\t\treturn diags\n\t}\n\tb.config = data\n\n\tif b.ConfigureFunc != nil {\n\t\terr = b.ConfigureFunc(context.WithValue(\n\t\t\tcontext.Background(), backendConfigKey, data))\n\t\tif err != nil {\n\t\t\tdiags = diags.Append(err)\n\t\t\treturn diags\n\t\t}\n\t}\n\n\treturn diags\n}\n\n// shimConfig turns a new-style cty.Value configuration (which must be of\n// an object type) into a minimal old-style *terraform.ResourceConfig object\n// that should be populated enough to appease the not-yet-updated functionality\n// in this package. This should be removed once everything is updated.\nfunc (b *Backend) shimConfig(obj cty.Value) *terraform.ResourceConfig {\n\tshimMap, ok := hcl2shim.ConfigValueFromHCL2(obj).(map[string]interface{})\n\tif !ok {\n\t\t// If the configVal was nil, we still want a non-nil map here.\n\t\tshimMap = map[string]interface{}{}\n\t}\n\treturn &terraform.ResourceConfig{\n\t\tConfig: shimMap,\n\t\tRaw:    shimMap,\n\t}\n}\n\n// Config returns the configuration. This is available after Configure is\n// called.\nfunc (b *Backend) Config() *ResourceData {\n\treturn b.config\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/helper/schema/core_schema.go",
    "content": "package schema\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/hashicorp/terraform/configs/configschema\"\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// The functions and methods in this file are concerned with the conversion\n// of this package's schema model into the slightly-lower-level schema model\n// used by Terraform core for configuration parsing.\n\n// CoreConfigSchema lowers the receiver to the schema model expected by\n// Terraform core.\n//\n// This lower-level model has fewer features than the schema in this package,\n// describing only the basic structure of configuration and state values we\n// expect. The full schemaMap from this package is still required for full\n// validation, handling of default values, etc.\n//\n// This method presumes a schema that passes InternalValidate, and so may\n// panic or produce an invalid result if given an invalid schemaMap.\nfunc (m schemaMap) CoreConfigSchema() *configschema.Block {\n\tif len(m) == 0 {\n\t\t// We return an actual (empty) object here, rather than a nil,\n\t\t// because a nil result would mean that we don't have a schema at\n\t\t// all, rather than that we have an empty one.\n\t\treturn &configschema.Block{}\n\t}\n\n\tret := &configschema.Block{\n\t\tAttributes: map[string]*configschema.Attribute{},\n\t\tBlockTypes: map[string]*configschema.NestedBlock{},\n\t}\n\n\tfor name, schema := range m {\n\t\tif schema.Elem == nil {\n\t\t\tret.Attributes[name] = schema.coreConfigSchemaAttribute()\n\t\t\tcontinue\n\t\t}\n\t\tif schema.Type == TypeMap {\n\t\t\t// For TypeMap in particular, it isn't valid for Elem to be a\n\t\t\t// *Resource (since that would be ambiguous in flatmap) and\n\t\t\t// so Elem is treated as a TypeString schema if so. This matches\n\t\t\t// how the field readers treat this situation, for compatibility\n\t\t\t// with configurations targeting Terraform 0.11 and earlier.\n\t\t\tif _, isResource := schema.Elem.(*Resource); isResource {\n\t\t\t\tsch := *schema // shallow copy\n\t\t\t\tsch.Elem = &Schema{\n\t\t\t\t\tType: TypeString,\n\t\t\t\t}\n\t\t\t\tret.Attributes[name] = sch.coreConfigSchemaAttribute()\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\t\tswitch schema.ConfigMode {\n\t\tcase SchemaConfigModeAttr:\n\t\t\tret.Attributes[name] = schema.coreConfigSchemaAttribute()\n\t\tcase SchemaConfigModeBlock:\n\t\t\tret.BlockTypes[name] = schema.coreConfigSchemaBlock()\n\t\tdefault: // SchemaConfigModeAuto, or any other invalid value\n\t\t\tif schema.Computed && !schema.Optional {\n\t\t\t\t// Computed-only schemas are always handled as attributes,\n\t\t\t\t// because they never appear in configuration.\n\t\t\t\tret.Attributes[name] = schema.coreConfigSchemaAttribute()\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tswitch schema.Elem.(type) {\n\t\t\tcase *Schema, ValueType:\n\t\t\t\tret.Attributes[name] = schema.coreConfigSchemaAttribute()\n\t\t\tcase *Resource:\n\t\t\t\tret.BlockTypes[name] = schema.coreConfigSchemaBlock()\n\t\t\tdefault:\n\t\t\t\t// Should never happen for a valid schema\n\t\t\t\tpanic(fmt.Errorf(\"invalid Schema.Elem %#v; need *Schema or *Resource\", schema.Elem))\n\t\t\t}\n\t\t}\n\t}\n\n\treturn ret\n}\n\n// coreConfigSchemaAttribute prepares a configschema.Attribute representation\n// of a schema. This is appropriate only for primitives or collections whose\n// Elem is an instance of Schema. Use coreConfigSchemaBlock for collections\n// whose elem is a whole resource.\nfunc (s *Schema) coreConfigSchemaAttribute() *configschema.Attribute {\n\t// The Schema.DefaultFunc capability adds some extra weirdness here since\n\t// it can be combined with \"Required: true\" to create a sitution where\n\t// required-ness is conditional. Terraform Core doesn't share this concept,\n\t// so we must sniff for this possibility here and conditionally turn\n\t// off the \"Required\" flag if it looks like the DefaultFunc is going\n\t// to provide a value.\n\t// This is not 100% true to the original interface of DefaultFunc but\n\t// works well enough for the EnvDefaultFunc and MultiEnvDefaultFunc\n\t// situations, which are the main cases we care about.\n\t//\n\t// Note that this also has a consequence for commands that return schema\n\t// information for documentation purposes: running those for certain\n\t// providers will produce different results depending on which environment\n\t// variables are set. We accept that weirdness in order to keep this\n\t// interface to core otherwise simple.\n\treqd := s.Required\n\topt := s.Optional\n\tif reqd && s.DefaultFunc != nil {\n\t\tv, err := s.DefaultFunc()\n\t\t// We can't report errors from here, so we'll instead just force\n\t\t// \"Required\" to false and let the provider try calling its\n\t\t// DefaultFunc again during the validate step, where it can then\n\t\t// return the error.\n\t\tif err != nil || (err == nil && v != nil) {\n\t\t\treqd = false\n\t\t\topt = true\n\t\t}\n\t}\n\n\treturn &configschema.Attribute{\n\t\tType:        s.coreConfigSchemaType(),\n\t\tOptional:    opt,\n\t\tRequired:    reqd,\n\t\tComputed:    s.Computed,\n\t\tSensitive:   s.Sensitive,\n\t\tDescription: s.Description,\n\t}\n}\n\n// coreConfigSchemaBlock prepares a configschema.NestedBlock representation of\n// a schema. This is appropriate only for collections whose Elem is an instance\n// of Resource, and will panic otherwise.\nfunc (s *Schema) coreConfigSchemaBlock() *configschema.NestedBlock {\n\tret := &configschema.NestedBlock{}\n\tif nested := s.Elem.(*Resource).coreConfigSchema(); nested != nil {\n\t\tret.Block = *nested\n\t}\n\tswitch s.Type {\n\tcase TypeList:\n\t\tret.Nesting = configschema.NestingList\n\tcase TypeSet:\n\t\tret.Nesting = configschema.NestingSet\n\tcase TypeMap:\n\t\tret.Nesting = configschema.NestingMap\n\tdefault:\n\t\t// Should never happen for a valid schema\n\t\tpanic(fmt.Errorf(\"invalid s.Type %s for s.Elem being resource\", s.Type))\n\t}\n\n\tret.MinItems = s.MinItems\n\tret.MaxItems = s.MaxItems\n\n\tif s.Required && s.MinItems == 0 {\n\t\t// configschema doesn't have a \"required\" representation for nested\n\t\t// blocks, but we can fake it by requiring at least one item.\n\t\tret.MinItems = 1\n\t}\n\tif s.Optional && s.MinItems > 0 {\n\t\t// Historically helper/schema would ignore MinItems if Optional were\n\t\t// set, so we must mimic this behavior here to ensure that providers\n\t\t// relying on that undocumented behavior can continue to operate as\n\t\t// they did before.\n\t\tret.MinItems = 0\n\t}\n\tif s.Computed && !s.Optional {\n\t\t// MinItems/MaxItems are meaningless for computed nested blocks, since\n\t\t// they are never set by the user anyway. This ensures that we'll never\n\t\t// generate weird errors about them.\n\t\tret.MinItems = 0\n\t\tret.MaxItems = 0\n\t}\n\n\treturn ret\n}\n\n// coreConfigSchemaType determines the core config schema type that corresponds\n// to a particular schema's type.\nfunc (s *Schema) coreConfigSchemaType() cty.Type {\n\tswitch s.Type {\n\tcase TypeString:\n\t\treturn cty.String\n\tcase TypeBool:\n\t\treturn cty.Bool\n\tcase TypeInt, TypeFloat:\n\t\t// configschema doesn't distinguish int and float, so helper/schema\n\t\t// will deal with this as an additional validation step after\n\t\t// configuration has been parsed and decoded.\n\t\treturn cty.Number\n\tcase TypeList, TypeSet, TypeMap:\n\t\tvar elemType cty.Type\n\t\tswitch set := s.Elem.(type) {\n\t\tcase *Schema:\n\t\t\telemType = set.coreConfigSchemaType()\n\t\tcase ValueType:\n\t\t\t// This represents a mistake in the provider code, but it's a\n\t\t\t// common one so we'll just shim it.\n\t\t\telemType = (&Schema{Type: set}).coreConfigSchemaType()\n\t\tcase *Resource:\n\t\t\t// By default we construct a NestedBlock in this case, but this\n\t\t\t// behavior is selected either for computed-only schemas or\n\t\t\t// when ConfigMode is explicitly SchemaConfigModeBlock.\n\t\t\t// See schemaMap.CoreConfigSchema for the exact rules.\n\t\t\telemType = set.coreConfigSchema().ImpliedType()\n\t\tdefault:\n\t\t\tif set != nil {\n\t\t\t\t// Should never happen for a valid schema\n\t\t\t\tpanic(fmt.Errorf(\"invalid Schema.Elem %#v; need *Schema or *Resource\", s.Elem))\n\t\t\t}\n\t\t\t// Some pre-existing schemas assume string as default, so we need\n\t\t\t// to be compatible with them.\n\t\t\telemType = cty.String\n\t\t}\n\t\tswitch s.Type {\n\t\tcase TypeList:\n\t\t\treturn cty.List(elemType)\n\t\tcase TypeSet:\n\t\t\treturn cty.Set(elemType)\n\t\tcase TypeMap:\n\t\t\treturn cty.Map(elemType)\n\t\tdefault:\n\t\t\t// can never get here in practice, due to the case we're inside\n\t\t\tpanic(\"invalid collection type\")\n\t\t}\n\tdefault:\n\t\t// should never happen for a valid schema\n\t\tpanic(fmt.Errorf(\"invalid Schema.Type %s\", s.Type))\n\t}\n}\n\n// CoreConfigSchema is a convenient shortcut for calling CoreConfigSchema on\n// the resource's schema. CoreConfigSchema adds the implicitly required \"id\"\n// attribute for top level resources if it doesn't exist.\nfunc (r *Resource) CoreConfigSchema() *configschema.Block {\n\tblock := r.coreConfigSchema()\n\n\tif block.Attributes == nil {\n\t\tblock.Attributes = map[string]*configschema.Attribute{}\n\t}\n\n\t// Add the implicitly required \"id\" field if it doesn't exist\n\tif block.Attributes[\"id\"] == nil {\n\t\tblock.Attributes[\"id\"] = &configschema.Attribute{\n\t\t\tType:     cty.String,\n\t\t\tOptional: true,\n\t\t\tComputed: true,\n\t\t}\n\t}\n\n\t_, timeoutsAttr := block.Attributes[TimeoutsConfigKey]\n\t_, timeoutsBlock := block.BlockTypes[TimeoutsConfigKey]\n\n\t// Insert configured timeout values into the schema, as long as the schema\n\t// didn't define anything else by that name.\n\tif r.Timeouts != nil && !timeoutsAttr && !timeoutsBlock {\n\t\ttimeouts := configschema.Block{\n\t\t\tAttributes: map[string]*configschema.Attribute{},\n\t\t}\n\n\t\tif r.Timeouts.Create != nil {\n\t\t\ttimeouts.Attributes[TimeoutCreate] = &configschema.Attribute{\n\t\t\t\tType:     cty.String,\n\t\t\t\tOptional: true,\n\t\t\t}\n\t\t}\n\n\t\tif r.Timeouts.Read != nil {\n\t\t\ttimeouts.Attributes[TimeoutRead] = &configschema.Attribute{\n\t\t\t\tType:     cty.String,\n\t\t\t\tOptional: true,\n\t\t\t}\n\t\t}\n\n\t\tif r.Timeouts.Update != nil {\n\t\t\ttimeouts.Attributes[TimeoutUpdate] = &configschema.Attribute{\n\t\t\t\tType:     cty.String,\n\t\t\t\tOptional: true,\n\t\t\t}\n\t\t}\n\n\t\tif r.Timeouts.Delete != nil {\n\t\t\ttimeouts.Attributes[TimeoutDelete] = &configschema.Attribute{\n\t\t\t\tType:     cty.String,\n\t\t\t\tOptional: true,\n\t\t\t}\n\t\t}\n\n\t\tif r.Timeouts.Default != nil {\n\t\t\ttimeouts.Attributes[TimeoutDefault] = &configschema.Attribute{\n\t\t\t\tType:     cty.String,\n\t\t\t\tOptional: true,\n\t\t\t}\n\t\t}\n\n\t\tblock.BlockTypes[TimeoutsConfigKey] = &configschema.NestedBlock{\n\t\t\tNesting: configschema.NestingSingle,\n\t\t\tBlock:   timeouts,\n\t\t}\n\t}\n\n\treturn block\n}\n\nfunc (r *Resource) coreConfigSchema() *configschema.Block {\n\treturn schemaMap(r.Schema).CoreConfigSchema()\n}\n\n// CoreConfigSchema is a convenient shortcut for calling CoreConfigSchema\n// on the backends's schema.\nfunc (r *Backend) CoreConfigSchema() *configschema.Block {\n\treturn schemaMap(r.Schema).CoreConfigSchema()\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/helper/schema/data_source_resource_shim.go",
    "content": "package schema\n\nimport (\n\t\"fmt\"\n)\n\n// DataSourceResourceShim takes a Resource instance describing a data source\n// (with a Read implementation and a Schema, at least) and returns a new\n// Resource instance with additional Create and Delete implementations that\n// allow the data source to be used as a resource.\n//\n// This is a backward-compatibility layer for data sources that were formerly\n// read-only resources before the data source concept was added. It should not\n// be used for any *new* data sources.\n//\n// The Read function for the data source *must* call d.SetId with a non-empty\n// id in order for this shim to function as expected.\n//\n// The provided Resource instance, and its schema, will be modified in-place\n// to make it suitable for use as a full resource.\nfunc DataSourceResourceShim(name string, dataSource *Resource) *Resource {\n\t// Recursively, in-place adjust the schema so that it has ForceNew\n\t// on any user-settable resource.\n\tdataSourceResourceShimAdjustSchema(dataSource.Schema)\n\n\tdataSource.Create = CreateFunc(dataSource.Read)\n\tdataSource.Delete = func(d *ResourceData, meta interface{}) error {\n\t\td.SetId(\"\")\n\t\treturn nil\n\t}\n\tdataSource.Update = nil // should already be nil, but let's make sure\n\n\t// FIXME: Link to some further docs either on the website or in the\n\t// changelog, once such a thing exists.\n\tdataSource.DeprecationMessage = fmt.Sprintf(\n\t\t\"using %s as a resource is deprecated; consider using the data source instead\",\n\t\tname,\n\t)\n\n\treturn dataSource\n}\n\nfunc dataSourceResourceShimAdjustSchema(schema map[string]*Schema) {\n\tfor _, s := range schema {\n\t\t// If the attribute is configurable then it must be ForceNew,\n\t\t// since we have no Update implementation.\n\t\tif s.Required || s.Optional {\n\t\t\ts.ForceNew = true\n\t\t}\n\n\t\t// If the attribute is a nested resource, we need to recursively\n\t\t// apply these same adjustments to it.\n\t\tif s.Elem != nil {\n\t\t\tif r, ok := s.Elem.(*Resource); ok {\n\t\t\t\tdataSourceResourceShimAdjustSchema(r.Schema)\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/helper/schema/equal.go",
    "content": "package schema\n\n// Equal is an interface that checks for deep equality between two objects.\ntype Equal interface {\n\tEqual(interface{}) bool\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/helper/schema/field_reader.go",
    "content": "package schema\n\nimport (\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// FieldReaders are responsible for decoding fields out of data into\n// the proper typed representation. ResourceData uses this to query data\n// out of multiple sources: config, state, diffs, etc.\ntype FieldReader interface {\n\tReadField([]string) (FieldReadResult, error)\n}\n\n// FieldReadResult encapsulates all the resulting data from reading\n// a field.\ntype FieldReadResult struct {\n\t// Value is the actual read value. NegValue is the _negative_ value\n\t// or the items that should be removed (if they existed). NegValue\n\t// doesn't make sense for primitives but is important for any\n\t// container types such as maps, sets, lists.\n\tValue          interface{}\n\tValueProcessed interface{}\n\n\t// Exists is true if the field was found in the data. False means\n\t// it wasn't found if there was no error.\n\tExists bool\n\n\t// Computed is true if the field was found but the value\n\t// is computed.\n\tComputed bool\n}\n\n// ValueOrZero returns the value of this result or the zero value of the\n// schema type, ensuring a consistent non-nil return value.\nfunc (r *FieldReadResult) ValueOrZero(s *Schema) interface{} {\n\tif r.Value != nil {\n\t\treturn r.Value\n\t}\n\n\treturn s.ZeroValue()\n}\n\n// SchemasForFlatmapPath tries its best to find a sequence of schemas that\n// the given dot-delimited attribute path traverses through.\nfunc SchemasForFlatmapPath(path string, schemaMap map[string]*Schema) []*Schema {\n\tparts := strings.Split(path, \".\")\n\treturn addrToSchema(parts, schemaMap)\n}\n\n// addrToSchema finds the final element schema for the given address\n// and the given schema. It returns all the schemas that led to the final\n// schema. These are in order of the address (out to in).\nfunc addrToSchema(addr []string, schemaMap map[string]*Schema) []*Schema {\n\tcurrent := &Schema{\n\t\tType: typeObject,\n\t\tElem: schemaMap,\n\t}\n\n\t// If we aren't given an address, then the user is requesting the\n\t// full object, so we return the special value which is the full object.\n\tif len(addr) == 0 {\n\t\treturn []*Schema{current}\n\t}\n\n\tresult := make([]*Schema, 0, len(addr))\n\tfor len(addr) > 0 {\n\t\tk := addr[0]\n\t\taddr = addr[1:]\n\n\tREPEAT:\n\t\t// We want to trim off the first \"typeObject\" since its not a\n\t\t// real lookup that people do. i.e. []string{\"foo\"} in a structure\n\t\t// isn't {typeObject, typeString}, its just a {typeString}.\n\t\tif len(result) > 0 || current.Type != typeObject {\n\t\t\tresult = append(result, current)\n\t\t}\n\n\t\tswitch t := current.Type; t {\n\t\tcase TypeBool, TypeInt, TypeFloat, TypeString:\n\t\t\tif len(addr) > 0 {\n\t\t\t\treturn nil\n\t\t\t}\n\t\tcase TypeList, TypeSet:\n\t\t\tisIndex := len(addr) > 0 && addr[0] == \"#\"\n\n\t\t\tswitch v := current.Elem.(type) {\n\t\t\tcase *Resource:\n\t\t\t\tcurrent = &Schema{\n\t\t\t\t\tType: typeObject,\n\t\t\t\t\tElem: v.Schema,\n\t\t\t\t}\n\t\t\tcase *Schema:\n\t\t\t\tcurrent = v\n\t\t\tcase ValueType:\n\t\t\t\tcurrent = &Schema{Type: v}\n\t\t\tdefault:\n\t\t\t\t// we may not know the Elem type and are just looking for the\n\t\t\t\t// index\n\t\t\t\tif isIndex {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tif len(addr) == 0 {\n\t\t\t\t\t// we've processed the address, so return what we've\n\t\t\t\t\t// collected\n\t\t\t\t\treturn result\n\t\t\t\t}\n\n\t\t\t\tif len(addr) == 1 {\n\t\t\t\t\tif _, err := strconv.Atoi(addr[0]); err == nil {\n\t\t\t\t\t\t// we're indexing a value without a schema. This can\n\t\t\t\t\t\t// happen if the list is nested in another schema type.\n\t\t\t\t\t\t// Default to a TypeString like we do with a map\n\t\t\t\t\t\tcurrent = &Schema{Type: TypeString}\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn nil\n\t\t\t}\n\n\t\t\t// If we only have one more thing and the next thing\n\t\t\t// is a #, then we're accessing the index which is always\n\t\t\t// an int.\n\t\t\tif isIndex {\n\t\t\t\tcurrent = &Schema{Type: TypeInt}\n\t\t\t\tbreak\n\t\t\t}\n\n\t\tcase TypeMap:\n\t\t\tif len(addr) > 0 {\n\t\t\t\tswitch v := current.Elem.(type) {\n\t\t\t\tcase ValueType:\n\t\t\t\t\tcurrent = &Schema{Type: v}\n\t\t\t\tcase *Schema:\n\t\t\t\t\tcurrent, _ = current.Elem.(*Schema)\n\t\t\t\tdefault:\n\t\t\t\t\t// maps default to string values. This is all we can have\n\t\t\t\t\t// if this is nested in another list or map.\n\t\t\t\t\tcurrent = &Schema{Type: TypeString}\n\t\t\t\t}\n\t\t\t}\n\t\tcase typeObject:\n\t\t\t// If we're already in the object, then we want to handle Sets\n\t\t\t// and Lists specially. Basically, their next key is the lookup\n\t\t\t// key (the set value or the list element). For these scenarios,\n\t\t\t// we just want to skip it and move to the next element if there\n\t\t\t// is one.\n\t\t\tif len(result) > 0 {\n\t\t\t\tlastType := result[len(result)-2].Type\n\t\t\t\tif lastType == TypeSet || lastType == TypeList {\n\t\t\t\t\tif len(addr) == 0 {\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\n\t\t\t\t\tk = addr[0]\n\t\t\t\t\taddr = addr[1:]\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tm := current.Elem.(map[string]*Schema)\n\t\t\tval, ok := m[k]\n\t\t\tif !ok {\n\t\t\t\treturn nil\n\t\t\t}\n\n\t\t\tcurrent = val\n\t\t\tgoto REPEAT\n\t\t}\n\t}\n\n\treturn result\n}\n\n// readListField is a generic method for reading a list field out of a\n// a FieldReader. It does this based on the assumption that there is a key\n// \"foo.#\" for a list \"foo\" and that the indexes are \"foo.0\", \"foo.1\", etc.\n// after that point.\nfunc readListField(\n\tr FieldReader, addr []string, schema *Schema) (FieldReadResult, error) {\n\taddrPadded := make([]string, len(addr)+1)\n\tcopy(addrPadded, addr)\n\taddrPadded[len(addrPadded)-1] = \"#\"\n\n\t// Get the number of elements in the list\n\tcountResult, err := r.ReadField(addrPadded)\n\tif err != nil {\n\t\treturn FieldReadResult{}, err\n\t}\n\tif !countResult.Exists {\n\t\t// No count, means we have no list\n\t\tcountResult.Value = 0\n\t}\n\n\t// If we have an empty list, then return an empty list\n\tif countResult.Computed || countResult.Value.(int) == 0 {\n\t\treturn FieldReadResult{\n\t\t\tValue:    []interface{}{},\n\t\t\tExists:   countResult.Exists,\n\t\t\tComputed: countResult.Computed,\n\t\t}, nil\n\t}\n\n\t// Go through each count, and get the item value out of it\n\tresult := make([]interface{}, countResult.Value.(int))\n\tfor i, _ := range result {\n\t\tis := strconv.FormatInt(int64(i), 10)\n\t\taddrPadded[len(addrPadded)-1] = is\n\t\trawResult, err := r.ReadField(addrPadded)\n\t\tif err != nil {\n\t\t\treturn FieldReadResult{}, err\n\t\t}\n\t\tif !rawResult.Exists {\n\t\t\t// This should never happen, because by the time the data\n\t\t\t// gets to the FieldReaders, all the defaults should be set by\n\t\t\t// Schema.\n\t\t\trawResult.Value = nil\n\t\t}\n\n\t\tresult[i] = rawResult.Value\n\t}\n\n\treturn FieldReadResult{\n\t\tValue:  result,\n\t\tExists: true,\n\t}, nil\n}\n\n// readObjectField is a generic method for reading objects out of FieldReaders\n// based on the assumption that building an address of []string{k, FIELD}\n// will result in the proper field data.\nfunc readObjectField(\n\tr FieldReader,\n\taddr []string,\n\tschema map[string]*Schema) (FieldReadResult, error) {\n\tresult := make(map[string]interface{})\n\texists := false\n\tfor field, s := range schema {\n\t\taddrRead := make([]string, len(addr), len(addr)+1)\n\t\tcopy(addrRead, addr)\n\t\taddrRead = append(addrRead, field)\n\t\trawResult, err := r.ReadField(addrRead)\n\t\tif err != nil {\n\t\t\treturn FieldReadResult{}, err\n\t\t}\n\t\tif rawResult.Exists {\n\t\t\texists = true\n\t\t}\n\n\t\tresult[field] = rawResult.ValueOrZero(s)\n\t}\n\n\treturn FieldReadResult{\n\t\tValue:  result,\n\t\tExists: exists,\n\t}, nil\n}\n\n// convert map values to the proper primitive type based on schema.Elem\nfunc mapValuesToPrimitive(k string, m map[string]interface{}, schema *Schema) error {\n\telemType, err := getValueType(k, schema)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tswitch elemType {\n\tcase TypeInt, TypeFloat, TypeBool:\n\t\tfor k, v := range m {\n\t\t\tvs, ok := v.(string)\n\t\t\tif !ok {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tv, err := stringToPrimitive(vs, false, &Schema{Type: elemType})\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tm[k] = v\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc stringToPrimitive(\n\tvalue string, computed bool, schema *Schema) (interface{}, error) {\n\tvar returnVal interface{}\n\tswitch schema.Type {\n\tcase TypeBool:\n\t\tif value == \"\" {\n\t\t\treturnVal = false\n\t\t\tbreak\n\t\t}\n\t\tif computed {\n\t\t\tbreak\n\t\t}\n\n\t\tv, err := strconv.ParseBool(value)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\treturnVal = v\n\tcase TypeFloat:\n\t\tif value == \"\" {\n\t\t\treturnVal = 0.0\n\t\t\tbreak\n\t\t}\n\t\tif computed {\n\t\t\tbreak\n\t\t}\n\n\t\tv, err := strconv.ParseFloat(value, 64)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\treturnVal = v\n\tcase TypeInt:\n\t\tif value == \"\" {\n\t\t\treturnVal = 0\n\t\t\tbreak\n\t\t}\n\t\tif computed {\n\t\t\tbreak\n\t\t}\n\n\t\tv, err := strconv.ParseInt(value, 0, 0)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\treturnVal = int(v)\n\tcase TypeString:\n\t\treturnVal = value\n\tdefault:\n\t\tpanic(fmt.Sprintf(\"Unknown type: %s\", schema.Type))\n\t}\n\n\treturn returnVal, nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/helper/schema/field_reader_config.go",
    "content": "package schema\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\n\t\"github.com/hashicorp/terraform/terraform\"\n\t\"github.com/mitchellh/mapstructure\"\n)\n\n// ConfigFieldReader reads fields out of an untyped map[string]string to the\n// best of its ability. It also applies defaults from the Schema. (The other\n// field readers do not need default handling because they source fully\n// populated data structures.)\ntype ConfigFieldReader struct {\n\tConfig *terraform.ResourceConfig\n\tSchema map[string]*Schema\n\n\tindexMaps map[string]map[string]int\n\tonce      sync.Once\n}\n\nfunc (r *ConfigFieldReader) ReadField(address []string) (FieldReadResult, error) {\n\tr.once.Do(func() { r.indexMaps = make(map[string]map[string]int) })\n\treturn r.readField(address, false)\n}\n\nfunc (r *ConfigFieldReader) readField(\n\taddress []string, nested bool) (FieldReadResult, error) {\n\tschemaList := addrToSchema(address, r.Schema)\n\tif len(schemaList) == 0 {\n\t\treturn FieldReadResult{}, nil\n\t}\n\n\tif !nested {\n\t\t// If we have a set anywhere in the address, then we need to\n\t\t// read that set out in order and actually replace that part of\n\t\t// the address with the real list index. i.e. set.50 might actually\n\t\t// map to set.12 in the config, since it is in list order in the\n\t\t// config, not indexed by set value.\n\t\tfor i, v := range schemaList {\n\t\t\t// Sets are the only thing that cause this issue.\n\t\t\tif v.Type != TypeSet {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// If we're at the end of the list, then we don't have to worry\n\t\t\t// about this because we're just requesting the whole set.\n\t\t\tif i == len(schemaList)-1 {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// If we're looking for the count, then ignore...\n\t\t\tif address[i+1] == \"#\" {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tindexMap, ok := r.indexMaps[strings.Join(address[:i+1], \".\")]\n\t\t\tif !ok {\n\t\t\t\t// Get the set so we can get the index map that tells us the\n\t\t\t\t// mapping of the hash code to the list index\n\t\t\t\t_, err := r.readSet(address[:i+1], v)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn FieldReadResult{}, err\n\t\t\t\t}\n\t\t\t\tindexMap = r.indexMaps[strings.Join(address[:i+1], \".\")]\n\t\t\t}\n\n\t\t\tindex, ok := indexMap[address[i+1]]\n\t\t\tif !ok {\n\t\t\t\treturn FieldReadResult{}, nil\n\t\t\t}\n\n\t\t\taddress[i+1] = strconv.FormatInt(int64(index), 10)\n\t\t}\n\t}\n\n\tk := strings.Join(address, \".\")\n\tschema := schemaList[len(schemaList)-1]\n\n\t// If we're getting the single element of a promoted list, then\n\t// check to see if we have a single element we need to promote.\n\tif address[len(address)-1] == \"0\" && len(schemaList) > 1 {\n\t\tlastSchema := schemaList[len(schemaList)-2]\n\t\tif lastSchema.Type == TypeList && lastSchema.PromoteSingle {\n\t\t\tk := strings.Join(address[:len(address)-1], \".\")\n\t\t\tresult, err := r.readPrimitive(k, schema)\n\t\t\tif err == nil {\n\t\t\t\treturn result, nil\n\t\t\t}\n\t\t}\n\t}\n\n\tif protoVersion5 {\n\t\tswitch schema.Type {\n\t\tcase TypeList, TypeSet, TypeMap, typeObject:\n\t\t\t// Check if the value itself is unknown.\n\t\t\t// The new protocol shims will add unknown values to this list of\n\t\t\t// ComputedKeys. This is the only way we have to indicate that a\n\t\t\t// collection is unknown in the config\n\t\t\tfor _, unknown := range r.Config.ComputedKeys {\n\t\t\t\tif k == unknown {\n\t\t\t\t\tlog.Printf(\"[DEBUG] setting computed for %q from ComputedKeys\", k)\n\t\t\t\t\treturn FieldReadResult{Computed: true, Exists: true}, nil\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tswitch schema.Type {\n\tcase TypeBool, TypeFloat, TypeInt, TypeString:\n\t\treturn r.readPrimitive(k, schema)\n\tcase TypeList:\n\t\t// If we support promotion then we first check if we have a lone\n\t\t// value that we must promote.\n\t\t// a value that is alone.\n\t\tif schema.PromoteSingle {\n\t\t\tresult, err := r.readPrimitive(k, schema.Elem.(*Schema))\n\t\t\tif err == nil && result.Exists {\n\t\t\t\tresult.Value = []interface{}{result.Value}\n\t\t\t\treturn result, nil\n\t\t\t}\n\t\t}\n\n\t\treturn readListField(&nestedConfigFieldReader{r}, address, schema)\n\tcase TypeMap:\n\t\treturn r.readMap(k, schema)\n\tcase TypeSet:\n\t\treturn r.readSet(address, schema)\n\tcase typeObject:\n\t\treturn readObjectField(\n\t\t\t&nestedConfigFieldReader{r},\n\t\t\taddress, schema.Elem.(map[string]*Schema))\n\tdefault:\n\t\tpanic(fmt.Sprintf(\"Unknown type: %s\", schema.Type))\n\t}\n}\n\nfunc (r *ConfigFieldReader) readMap(k string, schema *Schema) (FieldReadResult, error) {\n\t// We want both the raw value and the interpolated. We use the interpolated\n\t// to store actual values and we use the raw one to check for\n\t// computed keys. Actual values are obtained in the switch, depending on\n\t// the type of the raw value.\n\tmraw, ok := r.Config.GetRaw(k)\n\tif !ok {\n\t\t// check if this is from an interpolated field by seeing if it exists\n\t\t// in the config\n\t\t_, ok := r.Config.Get(k)\n\t\tif !ok {\n\t\t\t// this really doesn't exist\n\t\t\treturn FieldReadResult{}, nil\n\t\t}\n\n\t\t// We couldn't fetch the value from a nested data structure, so treat the\n\t\t// raw value as an interpolation string. The mraw value is only used\n\t\t// for the type switch below.\n\t\tmraw = \"${INTERPOLATED}\"\n\t}\n\n\tresult := make(map[string]interface{})\n\tcomputed := false\n\tswitch m := mraw.(type) {\n\tcase string:\n\t\t// This is a map which has come out of an interpolated variable, so we\n\t\t// can just get the value directly from config. Values cannot be computed\n\t\t// currently.\n\t\tv, _ := r.Config.Get(k)\n\n\t\t// If this isn't a map[string]interface, it must be computed.\n\t\tmapV, ok := v.(map[string]interface{})\n\t\tif !ok {\n\t\t\treturn FieldReadResult{\n\t\t\t\tExists:   true,\n\t\t\t\tComputed: true,\n\t\t\t}, nil\n\t\t}\n\n\t\t// Otherwise we can proceed as usual.\n\t\tfor i, iv := range mapV {\n\t\t\tresult[i] = iv\n\t\t}\n\tcase []interface{}:\n\t\tfor i, innerRaw := range m {\n\t\t\tfor ik := range innerRaw.(map[string]interface{}) {\n\t\t\t\tkey := fmt.Sprintf(\"%s.%d.%s\", k, i, ik)\n\t\t\t\tif r.Config.IsComputed(key) {\n\t\t\t\t\tcomputed = true\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tv, _ := r.Config.Get(key)\n\t\t\t\tresult[ik] = v\n\t\t\t}\n\t\t}\n\tcase []map[string]interface{}:\n\t\tfor i, innerRaw := range m {\n\t\t\tfor ik := range innerRaw {\n\t\t\t\tkey := fmt.Sprintf(\"%s.%d.%s\", k, i, ik)\n\t\t\t\tif r.Config.IsComputed(key) {\n\t\t\t\t\tcomputed = true\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tv, _ := r.Config.Get(key)\n\t\t\t\tresult[ik] = v\n\t\t\t}\n\t\t}\n\tcase map[string]interface{}:\n\t\tfor ik := range m {\n\t\t\tkey := fmt.Sprintf(\"%s.%s\", k, ik)\n\t\t\tif r.Config.IsComputed(key) {\n\t\t\t\tcomputed = true\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\tv, _ := r.Config.Get(key)\n\t\t\tresult[ik] = v\n\t\t}\n\tdefault:\n\t\tpanic(fmt.Sprintf(\"unknown type: %#v\", mraw))\n\t}\n\n\terr := mapValuesToPrimitive(k, result, schema)\n\tif err != nil {\n\t\treturn FieldReadResult{}, nil\n\t}\n\n\tvar value interface{}\n\tif !computed {\n\t\tvalue = result\n\t}\n\n\treturn FieldReadResult{\n\t\tValue:    value,\n\t\tExists:   true,\n\t\tComputed: computed,\n\t}, nil\n}\n\nfunc (r *ConfigFieldReader) readPrimitive(\n\tk string, schema *Schema) (FieldReadResult, error) {\n\traw, ok := r.Config.Get(k)\n\tif !ok {\n\t\t// Nothing in config, but we might still have a default from the schema\n\t\tvar err error\n\t\traw, err = schema.DefaultValue()\n\t\tif err != nil {\n\t\t\treturn FieldReadResult{}, fmt.Errorf(\"%s, error loading default: %s\", k, err)\n\t\t}\n\n\t\tif raw == nil {\n\t\t\treturn FieldReadResult{}, nil\n\t\t}\n\t}\n\n\tvar result string\n\tif err := mapstructure.WeakDecode(raw, &result); err != nil {\n\t\treturn FieldReadResult{}, err\n\t}\n\n\tcomputed := r.Config.IsComputed(k)\n\treturnVal, err := stringToPrimitive(result, computed, schema)\n\tif err != nil {\n\t\treturn FieldReadResult{}, err\n\t}\n\n\treturn FieldReadResult{\n\t\tValue:    returnVal,\n\t\tExists:   true,\n\t\tComputed: computed,\n\t}, nil\n}\n\nfunc (r *ConfigFieldReader) readSet(\n\taddress []string, schema *Schema) (FieldReadResult, error) {\n\tindexMap := make(map[string]int)\n\t// Create the set that will be our result\n\tset := schema.ZeroValue().(*Set)\n\n\traw, err := readListField(&nestedConfigFieldReader{r}, address, schema)\n\tif err != nil {\n\t\treturn FieldReadResult{}, err\n\t}\n\tif !raw.Exists {\n\t\treturn FieldReadResult{Value: set}, nil\n\t}\n\n\t// If the list is computed, the set is necessarilly computed\n\tif raw.Computed {\n\t\treturn FieldReadResult{\n\t\t\tValue:    set,\n\t\t\tExists:   true,\n\t\t\tComputed: raw.Computed,\n\t\t}, nil\n\t}\n\n\t// Build up the set from the list elements\n\tfor i, v := range raw.Value.([]interface{}) {\n\t\t// Check if any of the keys in this item are computed\n\t\tcomputed := r.hasComputedSubKeys(\n\t\t\tfmt.Sprintf(\"%s.%d\", strings.Join(address, \".\"), i), schema)\n\n\t\tcode := set.add(v, computed)\n\t\tindexMap[code] = i\n\t}\n\n\tr.indexMaps[strings.Join(address, \".\")] = indexMap\n\n\treturn FieldReadResult{\n\t\tValue:  set,\n\t\tExists: true,\n\t}, nil\n}\n\n// hasComputedSubKeys walks through a schema and returns whether or not the\n// given key contains any subkeys that are computed.\nfunc (r *ConfigFieldReader) hasComputedSubKeys(key string, schema *Schema) bool {\n\tprefix := key + \".\"\n\n\tswitch t := schema.Elem.(type) {\n\tcase *Resource:\n\t\tfor k, schema := range t.Schema {\n\t\t\tif r.Config.IsComputed(prefix + k) {\n\t\t\t\treturn true\n\t\t\t}\n\n\t\t\tif r.hasComputedSubKeys(prefix+k, schema) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\t}\n\n\treturn false\n}\n\n// nestedConfigFieldReader is a funny little thing that just wraps a\n// ConfigFieldReader to call readField when ReadField is called so that\n// we don't recalculate the set rewrites in the address, which leads to\n// an infinite loop.\ntype nestedConfigFieldReader struct {\n\tReader *ConfigFieldReader\n}\n\nfunc (r *nestedConfigFieldReader) ReadField(\n\taddress []string) (FieldReadResult, error) {\n\treturn r.Reader.readField(address, true)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/helper/schema/field_reader_diff.go",
    "content": "package schema\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n\n\t\"github.com/hashicorp/terraform/terraform\"\n\t\"github.com/mitchellh/mapstructure\"\n)\n\n// DiffFieldReader reads fields out of a diff structures.\n//\n// It also requires access to a Reader that reads fields from the structure\n// that the diff was derived from. This is usually the state. This is required\n// because a diff on its own doesn't have complete data about full objects\n// such as maps.\n//\n// The Source MUST be the data that the diff was derived from. If it isn't,\n// the behavior of this struct is undefined.\n//\n// Reading fields from a DiffFieldReader is identical to reading from\n// Source except the diff will be applied to the end result.\n//\n// The \"Exists\" field on the result will be set to true if the complete\n// field exists whether its from the source, diff, or a combination of both.\n// It cannot be determined whether a retrieved value is composed of\n// diff elements.\ntype DiffFieldReader struct {\n\tDiff   *terraform.InstanceDiff\n\tSource FieldReader\n\tSchema map[string]*Schema\n\n\t// cache for memoizing ReadField calls.\n\tcache map[string]cachedFieldReadResult\n}\n\ntype cachedFieldReadResult struct {\n\tval FieldReadResult\n\terr error\n}\n\nfunc (r *DiffFieldReader) ReadField(address []string) (FieldReadResult, error) {\n\tif r.cache == nil {\n\t\tr.cache = make(map[string]cachedFieldReadResult)\n\t}\n\n\t// Create the cache key by joining around a value that isn't a valid part\n\t// of an address. This assumes that the Source and Schema are not changed\n\t// for the life of this DiffFieldReader.\n\tcacheKey := strings.Join(address, \"|\")\n\tif cached, ok := r.cache[cacheKey]; ok {\n\t\treturn cached.val, cached.err\n\t}\n\n\tschemaList := addrToSchema(address, r.Schema)\n\tif len(schemaList) == 0 {\n\t\tr.cache[cacheKey] = cachedFieldReadResult{}\n\t\treturn FieldReadResult{}, nil\n\t}\n\n\tvar res FieldReadResult\n\tvar err error\n\n\tschema := schemaList[len(schemaList)-1]\n\tswitch schema.Type {\n\tcase TypeBool, TypeInt, TypeFloat, TypeString:\n\t\tres, err = r.readPrimitive(address, schema)\n\tcase TypeList:\n\t\tres, err = readListField(r, address, schema)\n\tcase TypeMap:\n\t\tres, err = r.readMap(address, schema)\n\tcase TypeSet:\n\t\tres, err = r.readSet(address, schema)\n\tcase typeObject:\n\t\tres, err = readObjectField(r, address, schema.Elem.(map[string]*Schema))\n\tdefault:\n\t\tpanic(fmt.Sprintf(\"Unknown type: %#v\", schema.Type))\n\t}\n\n\tr.cache[cacheKey] = cachedFieldReadResult{\n\t\tval: res,\n\t\terr: err,\n\t}\n\treturn res, err\n}\n\nfunc (r *DiffFieldReader) readMap(\n\taddress []string, schema *Schema) (FieldReadResult, error) {\n\tresult := make(map[string]interface{})\n\tresultSet := false\n\n\t// First read the map from the underlying source\n\tsource, err := r.Source.ReadField(address)\n\tif err != nil {\n\t\treturn FieldReadResult{}, err\n\t}\n\tif source.Exists {\n\t\tresult = source.Value.(map[string]interface{})\n\t\tresultSet = true\n\t}\n\n\t// Next, read all the elements we have in our diff, and apply\n\t// the diff to our result.\n\tprefix := strings.Join(address, \".\") + \".\"\n\tfor k, v := range r.Diff.Attributes {\n\t\tif !strings.HasPrefix(k, prefix) {\n\t\t\tcontinue\n\t\t}\n\t\tif strings.HasPrefix(k, prefix+\"%\") {\n\t\t\t// Ignore the count field\n\t\t\tcontinue\n\t\t}\n\n\t\tresultSet = true\n\n\t\tk = k[len(prefix):]\n\t\tif v.NewRemoved {\n\t\t\tdelete(result, k)\n\t\t\tcontinue\n\t\t}\n\n\t\tresult[k] = v.New\n\t}\n\n\tkey := address[len(address)-1]\n\terr = mapValuesToPrimitive(key, result, schema)\n\tif err != nil {\n\t\treturn FieldReadResult{}, nil\n\t}\n\n\tvar resultVal interface{}\n\tif resultSet {\n\t\tresultVal = result\n\t}\n\n\treturn FieldReadResult{\n\t\tValue:  resultVal,\n\t\tExists: resultSet,\n\t}, nil\n}\n\nfunc (r *DiffFieldReader) readPrimitive(\n\taddress []string, schema *Schema) (FieldReadResult, error) {\n\tresult, err := r.Source.ReadField(address)\n\tif err != nil {\n\t\treturn FieldReadResult{}, err\n\t}\n\n\tattrD, ok := r.Diff.Attributes[strings.Join(address, \".\")]\n\tif !ok {\n\t\treturn result, nil\n\t}\n\n\tvar resultVal string\n\tif !attrD.NewComputed {\n\t\tresultVal = attrD.New\n\t\tif attrD.NewExtra != nil {\n\t\t\tresult.ValueProcessed = resultVal\n\t\t\tif err := mapstructure.WeakDecode(attrD.NewExtra, &resultVal); err != nil {\n\t\t\t\treturn FieldReadResult{}, err\n\t\t\t}\n\t\t}\n\t}\n\n\tresult.Computed = attrD.NewComputed\n\tresult.Exists = true\n\tresult.Value, err = stringToPrimitive(resultVal, false, schema)\n\tif err != nil {\n\t\treturn FieldReadResult{}, err\n\t}\n\n\treturn result, nil\n}\n\nfunc (r *DiffFieldReader) readSet(\n\taddress []string, schema *Schema) (FieldReadResult, error) {\n\t// copy address to ensure we don't modify the argument\n\taddress = append([]string(nil), address...)\n\n\tprefix := strings.Join(address, \".\") + \".\"\n\n\t// Create the set that will be our result\n\tset := schema.ZeroValue().(*Set)\n\n\t// Go through the map and find all the set items\n\tfor k, d := range r.Diff.Attributes {\n\t\tif d.NewRemoved {\n\t\t\t// If the field is removed, we always ignore it\n\t\t\tcontinue\n\t\t}\n\t\tif !strings.HasPrefix(k, prefix) {\n\t\t\tcontinue\n\t\t}\n\t\tif strings.HasSuffix(k, \"#\") {\n\t\t\t// Ignore any count field\n\t\t\tcontinue\n\t\t}\n\n\t\t// Split the key, since it might be a sub-object like \"idx.field\"\n\t\tparts := strings.Split(k[len(prefix):], \".\")\n\t\tidx := parts[0]\n\n\t\traw, err := r.ReadField(append(address, idx))\n\t\tif err != nil {\n\t\t\treturn FieldReadResult{}, err\n\t\t}\n\t\tif !raw.Exists {\n\t\t\t// This shouldn't happen because we just verified it does exist\n\t\t\tpanic(\"missing field in set: \" + k + \".\" + idx)\n\t\t}\n\n\t\tset.Add(raw.Value)\n\t}\n\n\t// Determine if the set \"exists\". It exists if there are items or if\n\t// the diff explicitly wanted it empty.\n\texists := set.Len() > 0\n\tif !exists {\n\t\t// We could check if the diff value is \"0\" here but I think the\n\t\t// existence of \"#\" on its own is enough to show it existed. This\n\t\t// protects us in the future from the zero value changing from\n\t\t// \"0\" to \"\" breaking us (if that were to happen).\n\t\tif _, ok := r.Diff.Attributes[prefix+\"#\"]; ok {\n\t\t\texists = true\n\t\t}\n\t}\n\n\tif !exists {\n\t\tresult, err := r.Source.ReadField(address)\n\t\tif err != nil {\n\t\t\treturn FieldReadResult{}, err\n\t\t}\n\t\tif result.Exists {\n\t\t\treturn result, nil\n\t\t}\n\t}\n\n\treturn FieldReadResult{\n\t\tValue:  set,\n\t\tExists: exists,\n\t}, nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/helper/schema/field_reader_map.go",
    "content": "package schema\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n)\n\n// MapFieldReader reads fields out of an untyped map[string]string to\n// the best of its ability.\ntype MapFieldReader struct {\n\tMap    MapReader\n\tSchema map[string]*Schema\n}\n\nfunc (r *MapFieldReader) ReadField(address []string) (FieldReadResult, error) {\n\tk := strings.Join(address, \".\")\n\tschemaList := addrToSchema(address, r.Schema)\n\tif len(schemaList) == 0 {\n\t\treturn FieldReadResult{}, nil\n\t}\n\n\tschema := schemaList[len(schemaList)-1]\n\tswitch schema.Type {\n\tcase TypeBool, TypeInt, TypeFloat, TypeString:\n\t\treturn r.readPrimitive(address, schema)\n\tcase TypeList:\n\t\treturn readListField(r, address, schema)\n\tcase TypeMap:\n\t\treturn r.readMap(k, schema)\n\tcase TypeSet:\n\t\treturn r.readSet(address, schema)\n\tcase typeObject:\n\t\treturn readObjectField(r, address, schema.Elem.(map[string]*Schema))\n\tdefault:\n\t\tpanic(fmt.Sprintf(\"Unknown type: %s\", schema.Type))\n\t}\n}\n\nfunc (r *MapFieldReader) readMap(k string, schema *Schema) (FieldReadResult, error) {\n\tresult := make(map[string]interface{})\n\tresultSet := false\n\n\t// If the name of the map field is directly in the map with an\n\t// empty string, it means that the map is being deleted, so mark\n\t// that is is set.\n\tif v, ok := r.Map.Access(k); ok && v == \"\" {\n\t\tresultSet = true\n\t}\n\n\tprefix := k + \".\"\n\tr.Map.Range(func(k, v string) bool {\n\t\tif strings.HasPrefix(k, prefix) {\n\t\t\tresultSet = true\n\n\t\t\tkey := k[len(prefix):]\n\t\t\tif key != \"%\" && key != \"#\" {\n\t\t\t\tresult[key] = v\n\t\t\t}\n\t\t}\n\n\t\treturn true\n\t})\n\n\terr := mapValuesToPrimitive(k, result, schema)\n\tif err != nil {\n\t\treturn FieldReadResult{}, nil\n\t}\n\n\tvar resultVal interface{}\n\tif resultSet {\n\t\tresultVal = result\n\t}\n\n\treturn FieldReadResult{\n\t\tValue:  resultVal,\n\t\tExists: resultSet,\n\t}, nil\n}\n\nfunc (r *MapFieldReader) readPrimitive(\n\taddress []string, schema *Schema) (FieldReadResult, error) {\n\tk := strings.Join(address, \".\")\n\tresult, ok := r.Map.Access(k)\n\tif !ok {\n\t\treturn FieldReadResult{}, nil\n\t}\n\n\treturnVal, err := stringToPrimitive(result, false, schema)\n\tif err != nil {\n\t\treturn FieldReadResult{}, err\n\t}\n\n\treturn FieldReadResult{\n\t\tValue:  returnVal,\n\t\tExists: true,\n\t}, nil\n}\n\nfunc (r *MapFieldReader) readSet(\n\taddress []string, schema *Schema) (FieldReadResult, error) {\n\t// copy address to ensure we don't modify the argument\n\taddress = append([]string(nil), address...)\n\n\t// Get the number of elements in the list\n\tcountRaw, err := r.readPrimitive(\n\t\tappend(address, \"#\"), &Schema{Type: TypeInt})\n\tif err != nil {\n\t\treturn FieldReadResult{}, err\n\t}\n\tif !countRaw.Exists {\n\t\t// No count, means we have no list\n\t\tcountRaw.Value = 0\n\t}\n\n\t// Create the set that will be our result\n\tset := schema.ZeroValue().(*Set)\n\n\t// If we have an empty list, then return an empty list\n\tif countRaw.Computed || countRaw.Value.(int) == 0 {\n\t\treturn FieldReadResult{\n\t\t\tValue:    set,\n\t\t\tExists:   countRaw.Exists,\n\t\t\tComputed: countRaw.Computed,\n\t\t}, nil\n\t}\n\n\t// Go through the map and find all the set items\n\tprefix := strings.Join(address, \".\") + \".\"\n\tcountExpected := countRaw.Value.(int)\n\tcountActual := make(map[string]struct{})\n\tcompleted := r.Map.Range(func(k, _ string) bool {\n\t\tif !strings.HasPrefix(k, prefix) {\n\t\t\treturn true\n\t\t}\n\t\tif strings.HasPrefix(k, prefix+\"#\") {\n\t\t\t// Ignore the count field\n\t\t\treturn true\n\t\t}\n\n\t\t// Split the key, since it might be a sub-object like \"idx.field\"\n\t\tparts := strings.Split(k[len(prefix):], \".\")\n\t\tidx := parts[0]\n\n\t\tvar raw FieldReadResult\n\t\traw, err = r.ReadField(append(address, idx))\n\t\tif err != nil {\n\t\t\treturn false\n\t\t}\n\t\tif !raw.Exists {\n\t\t\t// This shouldn't happen because we just verified it does exist\n\t\t\tpanic(\"missing field in set: \" + k + \".\" + idx)\n\t\t}\n\n\t\tset.Add(raw.Value)\n\n\t\t// Due to the way multimap readers work, if we've seen the number\n\t\t// of fields we expect, then exit so that we don't read later values.\n\t\t// For example: the \"set\" map might have \"ports.#\", \"ports.0\", and\n\t\t// \"ports.1\", but the \"state\" map might have those plus \"ports.2\".\n\t\t// We don't want \"ports.2\"\n\t\tcountActual[idx] = struct{}{}\n\t\tif len(countActual) >= countExpected {\n\t\t\treturn false\n\t\t}\n\n\t\treturn true\n\t})\n\tif !completed && err != nil {\n\t\treturn FieldReadResult{}, err\n\t}\n\n\treturn FieldReadResult{\n\t\tValue:  set,\n\t\tExists: true,\n\t}, nil\n}\n\n// MapReader is an interface that is given to MapFieldReader for accessing\n// a \"map\". This can be used to have alternate implementations. For a basic\n// map[string]string, use BasicMapReader.\ntype MapReader interface {\n\tAccess(string) (string, bool)\n\tRange(func(string, string) bool) bool\n}\n\n// BasicMapReader implements MapReader for a single map.\ntype BasicMapReader map[string]string\n\nfunc (r BasicMapReader) Access(k string) (string, bool) {\n\tv, ok := r[k]\n\treturn v, ok\n}\n\nfunc (r BasicMapReader) Range(f func(string, string) bool) bool {\n\tfor k, v := range r {\n\t\tif cont := f(k, v); !cont {\n\t\t\treturn false\n\t\t}\n\t}\n\n\treturn true\n}\n\n// MultiMapReader reads over multiple maps, preferring keys that are\n// founder earlier (lower number index) vs. later (higher number index)\ntype MultiMapReader []map[string]string\n\nfunc (r MultiMapReader) Access(k string) (string, bool) {\n\tfor _, m := range r {\n\t\tif v, ok := m[k]; ok {\n\t\t\treturn v, ok\n\t\t}\n\t}\n\n\treturn \"\", false\n}\n\nfunc (r MultiMapReader) Range(f func(string, string) bool) bool {\n\tdone := make(map[string]struct{})\n\tfor _, m := range r {\n\t\tfor k, v := range m {\n\t\t\tif _, ok := done[k]; ok {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif cont := f(k, v); !cont {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tdone[k] = struct{}{}\n\t\t}\n\t}\n\n\treturn true\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/helper/schema/field_reader_multi.go",
    "content": "package schema\n\nimport (\n\t\"fmt\"\n)\n\n// MultiLevelFieldReader reads from other field readers,\n// merging their results along the way in a specific order. You can specify\n// \"levels\" and name them in order to read only an exact level or up to\n// a specific level.\n//\n// This is useful for saying things such as \"read the field from the state\n// and config and merge them\" or \"read the latest value of the field\".\ntype MultiLevelFieldReader struct {\n\tReaders map[string]FieldReader\n\tLevels  []string\n}\n\nfunc (r *MultiLevelFieldReader) ReadField(address []string) (FieldReadResult, error) {\n\treturn r.ReadFieldMerge(address, r.Levels[len(r.Levels)-1])\n}\n\nfunc (r *MultiLevelFieldReader) ReadFieldExact(\n\taddress []string, level string) (FieldReadResult, error) {\n\treader, ok := r.Readers[level]\n\tif !ok {\n\t\treturn FieldReadResult{}, fmt.Errorf(\n\t\t\t\"Unknown reader level: %s\", level)\n\t}\n\n\tresult, err := reader.ReadField(address)\n\tif err != nil {\n\t\treturn FieldReadResult{}, fmt.Errorf(\n\t\t\t\"Error reading level %s: %s\", level, err)\n\t}\n\n\treturn result, nil\n}\n\nfunc (r *MultiLevelFieldReader) ReadFieldMerge(\n\taddress []string, level string) (FieldReadResult, error) {\n\tvar result FieldReadResult\n\tfor _, l := range r.Levels {\n\t\tif r, ok := r.Readers[l]; ok {\n\t\t\tout, err := r.ReadField(address)\n\t\t\tif err != nil {\n\t\t\t\treturn FieldReadResult{}, fmt.Errorf(\n\t\t\t\t\t\"Error reading level %s: %s\", l, err)\n\t\t\t}\n\n\t\t\t// TODO: computed\n\t\t\tif out.Exists {\n\t\t\t\tresult = out\n\t\t\t}\n\t\t}\n\n\t\tif l == level {\n\t\t\tbreak\n\t\t}\n\t}\n\n\treturn result, nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/helper/schema/field_writer.go",
    "content": "package schema\n\n// FieldWriters are responsible for writing fields by address into\n// a proper typed representation. ResourceData uses this to write new data\n// into existing sources.\ntype FieldWriter interface {\n\tWriteField([]string, interface{}) error\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/helper/schema/field_writer_map.go",
    "content": "package schema\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\n\t\"github.com/mitchellh/mapstructure\"\n)\n\n// MapFieldWriter writes data into a single map[string]string structure.\ntype MapFieldWriter struct {\n\tSchema map[string]*Schema\n\n\tlock   sync.Mutex\n\tresult map[string]string\n}\n\n// Map returns the underlying map that is being written to.\nfunc (w *MapFieldWriter) Map() map[string]string {\n\tw.lock.Lock()\n\tdefer w.lock.Unlock()\n\tif w.result == nil {\n\t\tw.result = make(map[string]string)\n\t}\n\n\treturn w.result\n}\n\nfunc (w *MapFieldWriter) unsafeWriteField(addr string, value string) {\n\tw.lock.Lock()\n\tdefer w.lock.Unlock()\n\tif w.result == nil {\n\t\tw.result = make(map[string]string)\n\t}\n\n\tw.result[addr] = value\n}\n\n// clearTree clears a field and any sub-fields of the given address out of the\n// map. This should be used to reset some kind of complex structures (namely\n// sets) before writing to make sure that any conflicting data is removed (for\n// example, if the set was previously written to the writer's layer).\nfunc (w *MapFieldWriter) clearTree(addr []string) {\n\tprefix := strings.Join(addr, \".\") + \".\"\n\tfor k := range w.result {\n\t\tif strings.HasPrefix(k, prefix) {\n\t\t\tdelete(w.result, k)\n\t\t}\n\t}\n}\n\nfunc (w *MapFieldWriter) WriteField(addr []string, value interface{}) error {\n\tw.lock.Lock()\n\tdefer w.lock.Unlock()\n\tif w.result == nil {\n\t\tw.result = make(map[string]string)\n\t}\n\n\tschemaList := addrToSchema(addr, w.Schema)\n\tif len(schemaList) == 0 {\n\t\treturn fmt.Errorf(\"Invalid address to set: %#v\", addr)\n\t}\n\n\t// If we're setting anything other than a list root or set root,\n\t// then disallow it.\n\tfor _, schema := range schemaList[:len(schemaList)-1] {\n\t\tif schema.Type == TypeList {\n\t\t\treturn fmt.Errorf(\n\t\t\t\t\"%s: can only set full list\",\n\t\t\t\tstrings.Join(addr, \".\"))\n\t\t}\n\n\t\tif schema.Type == TypeMap {\n\t\t\treturn fmt.Errorf(\n\t\t\t\t\"%s: can only set full map\",\n\t\t\t\tstrings.Join(addr, \".\"))\n\t\t}\n\n\t\tif schema.Type == TypeSet {\n\t\t\treturn fmt.Errorf(\n\t\t\t\t\"%s: can only set full set\",\n\t\t\t\tstrings.Join(addr, \".\"))\n\t\t}\n\t}\n\n\treturn w.set(addr, value)\n}\n\nfunc (w *MapFieldWriter) set(addr []string, value interface{}) error {\n\tschemaList := addrToSchema(addr, w.Schema)\n\tif len(schemaList) == 0 {\n\t\treturn fmt.Errorf(\"Invalid address to set: %#v\", addr)\n\t}\n\n\tschema := schemaList[len(schemaList)-1]\n\tswitch schema.Type {\n\tcase TypeBool, TypeInt, TypeFloat, TypeString:\n\t\treturn w.setPrimitive(addr, value, schema)\n\tcase TypeList:\n\t\treturn w.setList(addr, value, schema)\n\tcase TypeMap:\n\t\treturn w.setMap(addr, value, schema)\n\tcase TypeSet:\n\t\treturn w.setSet(addr, value, schema)\n\tcase typeObject:\n\t\treturn w.setObject(addr, value, schema)\n\tdefault:\n\t\tpanic(fmt.Sprintf(\"Unknown type: %#v\", schema.Type))\n\t}\n}\n\nfunc (w *MapFieldWriter) setList(\n\taddr []string,\n\tv interface{},\n\tschema *Schema) error {\n\tk := strings.Join(addr, \".\")\n\tsetElement := func(idx string, value interface{}) error {\n\t\taddrCopy := make([]string, len(addr), len(addr)+1)\n\t\tcopy(addrCopy, addr)\n\t\treturn w.set(append(addrCopy, idx), value)\n\t}\n\n\tvar vs []interface{}\n\tif err := mapstructure.Decode(v, &vs); err != nil {\n\t\treturn fmt.Errorf(\"%s: %s\", k, err)\n\t}\n\n\t// Wipe the set from the current writer prior to writing if it exists.\n\t// Multiple writes to the same layer is a lot safer for lists than sets due\n\t// to the fact that indexes are always deterministic and the length will\n\t// always be updated with the current length on the last write, but making\n\t// sure we have a clean namespace removes any chance for edge cases to pop up\n\t// and ensures that the last write to the set is the correct value.\n\tw.clearTree(addr)\n\n\t// Set the entire list.\n\tvar err error\n\tfor i, elem := range vs {\n\t\tis := strconv.FormatInt(int64(i), 10)\n\t\terr = setElement(is, elem)\n\t\tif err != nil {\n\t\t\tbreak\n\t\t}\n\t}\n\tif err != nil {\n\t\tfor i, _ := range vs {\n\t\t\tis := strconv.FormatInt(int64(i), 10)\n\t\t\tsetElement(is, nil)\n\t\t}\n\n\t\treturn err\n\t}\n\n\tw.result[k+\".#\"] = strconv.FormatInt(int64(len(vs)), 10)\n\treturn nil\n}\n\nfunc (w *MapFieldWriter) setMap(\n\taddr []string,\n\tvalue interface{},\n\tschema *Schema) error {\n\tk := strings.Join(addr, \".\")\n\tv := reflect.ValueOf(value)\n\tvs := make(map[string]interface{})\n\n\tif value == nil {\n\t\t// The empty string here means the map is removed.\n\t\tw.result[k] = \"\"\n\t\treturn nil\n\t}\n\n\tif v.Kind() != reflect.Map {\n\t\treturn fmt.Errorf(\"%s: must be a map\", k)\n\t}\n\tif v.Type().Key().Kind() != reflect.String {\n\t\treturn fmt.Errorf(\"%s: keys must strings\", k)\n\t}\n\tfor _, mk := range v.MapKeys() {\n\t\tmv := v.MapIndex(mk)\n\t\tvs[mk.String()] = mv.Interface()\n\t}\n\n\t// Wipe this address tree. The contents of the map should always reflect the\n\t// last write made to it.\n\tw.clearTree(addr)\n\n\t// Remove the pure key since we're setting the full map value\n\tdelete(w.result, k)\n\n\t// Set each subkey\n\taddrCopy := make([]string, len(addr), len(addr)+1)\n\tcopy(addrCopy, addr)\n\tfor subKey, v := range vs {\n\t\tif err := w.set(append(addrCopy, subKey), v); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// Set the count\n\tw.result[k+\".%\"] = strconv.Itoa(len(vs))\n\n\treturn nil\n}\n\nfunc (w *MapFieldWriter) setObject(\n\taddr []string,\n\tvalue interface{},\n\tschema *Schema) error {\n\t// Set the entire object. First decode into a proper structure\n\tvar v map[string]interface{}\n\tif err := mapstructure.Decode(value, &v); err != nil {\n\t\treturn fmt.Errorf(\"%s: %s\", strings.Join(addr, \".\"), err)\n\t}\n\n\t// Make space for additional elements in the address\n\taddrCopy := make([]string, len(addr), len(addr)+1)\n\tcopy(addrCopy, addr)\n\n\t// Set each element in turn\n\tvar err error\n\tfor k1, v1 := range v {\n\t\tif err = w.set(append(addrCopy, k1), v1); err != nil {\n\t\t\tbreak\n\t\t}\n\t}\n\tif err != nil {\n\t\tfor k1, _ := range v {\n\t\t\tw.set(append(addrCopy, k1), nil)\n\t\t}\n\t}\n\n\treturn err\n}\n\nfunc (w *MapFieldWriter) setPrimitive(\n\taddr []string,\n\tv interface{},\n\tschema *Schema) error {\n\tk := strings.Join(addr, \".\")\n\n\tif v == nil {\n\t\t// The empty string here means the value is removed.\n\t\tw.result[k] = \"\"\n\t\treturn nil\n\t}\n\n\tvar set string\n\tswitch schema.Type {\n\tcase TypeBool:\n\t\tvar b bool\n\t\tif err := mapstructure.Decode(v, &b); err != nil {\n\t\t\treturn fmt.Errorf(\"%s: %s\", k, err)\n\t\t}\n\n\t\tset = strconv.FormatBool(b)\n\tcase TypeString:\n\t\tif err := mapstructure.Decode(v, &set); err != nil {\n\t\t\treturn fmt.Errorf(\"%s: %s\", k, err)\n\t\t}\n\tcase TypeInt:\n\t\tvar n int\n\t\tif err := mapstructure.Decode(v, &n); err != nil {\n\t\t\treturn fmt.Errorf(\"%s: %s\", k, err)\n\t\t}\n\t\tset = strconv.FormatInt(int64(n), 10)\n\tcase TypeFloat:\n\t\tvar n float64\n\t\tif err := mapstructure.Decode(v, &n); err != nil {\n\t\t\treturn fmt.Errorf(\"%s: %s\", k, err)\n\t\t}\n\t\tset = strconv.FormatFloat(float64(n), 'G', -1, 64)\n\tdefault:\n\t\treturn fmt.Errorf(\"Unknown type: %#v\", schema.Type)\n\t}\n\n\tw.result[k] = set\n\treturn nil\n}\n\nfunc (w *MapFieldWriter) setSet(\n\taddr []string,\n\tvalue interface{},\n\tschema *Schema) error {\n\taddrCopy := make([]string, len(addr), len(addr)+1)\n\tcopy(addrCopy, addr)\n\tk := strings.Join(addr, \".\")\n\n\tif value == nil {\n\t\tw.result[k+\".#\"] = \"0\"\n\t\treturn nil\n\t}\n\n\t// If it is a slice, then we have to turn it into a *Set so that\n\t// we get the proper order back based on the hash code.\n\tif v := reflect.ValueOf(value); v.Kind() == reflect.Slice {\n\t\t// Build a temp *ResourceData to use for the conversion\n\t\ttempAddr := addr[len(addr)-1:]\n\t\ttempSchema := *schema\n\t\ttempSchema.Type = TypeList\n\t\ttempSchemaMap := map[string]*Schema{tempAddr[0]: &tempSchema}\n\t\ttempW := &MapFieldWriter{Schema: tempSchemaMap}\n\n\t\t// Set the entire list, this lets us get sane values out of it\n\t\tif err := tempW.WriteField(tempAddr, value); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// Build the set by going over the list items in order and\n\t\t// hashing them into the set. The reason we go over the list and\n\t\t// not the `value` directly is because this forces all types\n\t\t// to become []interface{} (generic) instead of []string, which\n\t\t// most hash functions are expecting.\n\t\ts := schema.ZeroValue().(*Set)\n\t\ttempR := &MapFieldReader{\n\t\t\tMap:    BasicMapReader(tempW.Map()),\n\t\t\tSchema: tempSchemaMap,\n\t\t}\n\t\tfor i := 0; i < v.Len(); i++ {\n\t\t\tis := strconv.FormatInt(int64(i), 10)\n\t\t\tresult, err := tempR.ReadField(append(tempAddr, is))\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif !result.Exists {\n\t\t\t\tpanic(\"set item just set doesn't exist\")\n\t\t\t}\n\n\t\t\ts.Add(result.Value)\n\t\t}\n\n\t\tvalue = s\n\t}\n\n\t// Clear any keys that match the set address first. This is necessary because\n\t// it's always possible and sometimes may be necessary to write to a certain\n\t// writer layer more than once with different set data each time, which will\n\t// lead to different keys being inserted, which can lead to determinism\n\t// problems when the old data isn't wiped first.\n\tw.clearTree(addr)\n\n\tif value.(*Set) == nil {\n\t\tw.result[k+\".#\"] = \"0\"\n\t\treturn nil\n\t}\n\n\tfor code, elem := range value.(*Set).m {\n\t\tif err := w.set(append(addrCopy, code), elem); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tw.result[k+\".#\"] = strconv.Itoa(value.(*Set).Len())\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/helper/schema/getsource_string.go",
    "content": "// Code generated by \"stringer -type=getSource resource_data_get_source.go\"; DO NOT EDIT.\n\npackage schema\n\nimport \"strconv\"\n\nfunc _() {\n\t// An \"invalid array index\" compiler error signifies that the constant values have changed.\n\t// Re-run the stringer command to generate them again.\n\tvar x [1]struct{}\n\t_ = x[getSourceState-1]\n\t_ = x[getSourceConfig-2]\n\t_ = x[getSourceDiff-4]\n\t_ = x[getSourceSet-8]\n\t_ = x[getSourceExact-16]\n\t_ = x[getSourceLevelMask-15]\n}\n\nconst (\n\t_getSource_name_0 = \"getSourceStategetSourceConfig\"\n\t_getSource_name_1 = \"getSourceDiff\"\n\t_getSource_name_2 = \"getSourceSet\"\n\t_getSource_name_3 = \"getSourceLevelMaskgetSourceExact\"\n)\n\nvar (\n\t_getSource_index_0 = [...]uint8{0, 14, 29}\n\t_getSource_index_3 = [...]uint8{0, 18, 32}\n)\n\nfunc (i getSource) String() string {\n\tswitch {\n\tcase 1 <= i && i <= 2:\n\t\ti -= 1\n\t\treturn _getSource_name_0[_getSource_index_0[i]:_getSource_index_0[i+1]]\n\tcase i == 4:\n\t\treturn _getSource_name_1\n\tcase i == 8:\n\t\treturn _getSource_name_2\n\tcase 15 <= i && i <= 16:\n\t\ti -= 15\n\t\treturn _getSource_name_3[_getSource_index_3[i]:_getSource_index_3[i+1]]\n\tdefault:\n\t\treturn \"getSource(\" + strconv.FormatInt(int64(i), 10) + \")\"\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/helper/schema/provider.go",
    "content": "package schema\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"sort\"\n\t\"sync\"\n\n\t\"github.com/hashicorp/go-multierror\"\n\t\"github.com/hashicorp/terraform/config\"\n\t\"github.com/hashicorp/terraform/configs/configschema\"\n\t\"github.com/hashicorp/terraform/terraform\"\n)\n\n// Provider represents a resource provider in Terraform, and properly\n// implements all of the ResourceProvider API.\n//\n// By defining a schema for the configuration of the provider, the\n// map of supporting resources, and a configuration function, the schema\n// framework takes over and handles all the provider operations for you.\n//\n// After defining the provider structure, it is unlikely that you'll require any\n// of the methods on Provider itself.\ntype Provider struct {\n\t// Schema is the schema for the configuration of this provider. If this\n\t// provider has no configuration, this can be omitted.\n\t//\n\t// The keys of this map are the configuration keys, and the value is\n\t// the schema describing the value of the configuration.\n\tSchema map[string]*Schema\n\n\t// ResourcesMap is the list of available resources that this provider\n\t// can manage, along with their Resource structure defining their\n\t// own schemas and CRUD operations.\n\t//\n\t// Provider automatically handles routing operations such as Apply,\n\t// Diff, etc. to the proper resource.\n\tResourcesMap map[string]*Resource\n\n\t// DataSourcesMap is the collection of available data sources that\n\t// this provider implements, with a Resource instance defining\n\t// the schema and Read operation of each.\n\t//\n\t// Resource instances for data sources must have a Read function\n\t// and must *not* implement Create, Update or Delete.\n\tDataSourcesMap map[string]*Resource\n\n\t// ConfigureFunc is a function for configuring the provider. If the\n\t// provider doesn't need to be configured, this can be omitted.\n\t//\n\t// See the ConfigureFunc documentation for more information.\n\tConfigureFunc ConfigureFunc\n\n\t// MetaReset is called by TestReset to reset any state stored in the meta\n\t// interface.  This is especially important if the StopContext is stored by\n\t// the provider.\n\tMetaReset func() error\n\n\tmeta interface{}\n\n\t// a mutex is required because TestReset can directly replace the stopCtx\n\tstopMu        sync.Mutex\n\tstopCtx       context.Context\n\tstopCtxCancel context.CancelFunc\n\tstopOnce      sync.Once\n\n\tTerraformVersion string\n}\n\n// ConfigureFunc is the function used to configure a Provider.\n//\n// The interface{} value returned by this function is stored and passed into\n// the subsequent resources as the meta parameter. This return value is\n// usually used to pass along a configured API client, a configuration\n// structure, etc.\ntype ConfigureFunc func(*ResourceData) (interface{}, error)\n\n// InternalValidate should be called to validate the structure\n// of the provider.\n//\n// This should be called in a unit test for any provider to verify\n// before release that a provider is properly configured for use with\n// this library.\nfunc (p *Provider) InternalValidate() error {\n\tif p == nil {\n\t\treturn errors.New(\"provider is nil\")\n\t}\n\n\tvar validationErrors error\n\tsm := schemaMap(p.Schema)\n\tif err := sm.InternalValidate(sm); err != nil {\n\t\tvalidationErrors = multierror.Append(validationErrors, err)\n\t}\n\n\t// Provider-specific checks\n\tfor k, _ := range sm {\n\t\tif isReservedProviderFieldName(k) {\n\t\t\treturn fmt.Errorf(\"%s is a reserved field name for a provider\", k)\n\t\t}\n\t}\n\n\tfor k, r := range p.ResourcesMap {\n\t\tif err := r.InternalValidate(nil, true); err != nil {\n\t\t\tvalidationErrors = multierror.Append(validationErrors, fmt.Errorf(\"resource %s: %s\", k, err))\n\t\t}\n\t}\n\n\tfor k, r := range p.DataSourcesMap {\n\t\tif err := r.InternalValidate(nil, false); err != nil {\n\t\t\tvalidationErrors = multierror.Append(validationErrors, fmt.Errorf(\"data source %s: %s\", k, err))\n\t\t}\n\t}\n\n\treturn validationErrors\n}\n\nfunc isReservedProviderFieldName(name string) bool {\n\tfor _, reservedName := range config.ReservedProviderFields {\n\t\tif name == reservedName {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// Meta returns the metadata associated with this provider that was\n// returned by the Configure call. It will be nil until Configure is called.\nfunc (p *Provider) Meta() interface{} {\n\treturn p.meta\n}\n\n// SetMeta can be used to forcefully set the Meta object of the provider.\n// Note that if Configure is called the return value will override anything\n// set here.\nfunc (p *Provider) SetMeta(v interface{}) {\n\tp.meta = v\n}\n\n// Stopped reports whether the provider has been stopped or not.\nfunc (p *Provider) Stopped() bool {\n\tctx := p.StopContext()\n\tselect {\n\tcase <-ctx.Done():\n\t\treturn true\n\tdefault:\n\t\treturn false\n\t}\n}\n\n// StopCh returns a channel that is closed once the provider is stopped.\nfunc (p *Provider) StopContext() context.Context {\n\tp.stopOnce.Do(p.stopInit)\n\n\tp.stopMu.Lock()\n\tdefer p.stopMu.Unlock()\n\n\treturn p.stopCtx\n}\n\nfunc (p *Provider) stopInit() {\n\tp.stopMu.Lock()\n\tdefer p.stopMu.Unlock()\n\n\tp.stopCtx, p.stopCtxCancel = context.WithCancel(context.Background())\n}\n\n// Stop implementation of terraform.ResourceProvider interface.\nfunc (p *Provider) Stop() error {\n\tp.stopOnce.Do(p.stopInit)\n\n\tp.stopMu.Lock()\n\tdefer p.stopMu.Unlock()\n\n\tp.stopCtxCancel()\n\treturn nil\n}\n\n// TestReset resets any state stored in the Provider, and will call TestReset\n// on Meta if it implements the TestProvider interface.\n// This may be used to reset the schema.Provider at the start of a test, and is\n// automatically called by resource.Test.\nfunc (p *Provider) TestReset() error {\n\tp.stopInit()\n\tif p.MetaReset != nil {\n\t\treturn p.MetaReset()\n\t}\n\treturn nil\n}\n\n// GetSchema implementation of terraform.ResourceProvider interface\nfunc (p *Provider) GetSchema(req *terraform.ProviderSchemaRequest) (*terraform.ProviderSchema, error) {\n\tresourceTypes := map[string]*configschema.Block{}\n\tdataSources := map[string]*configschema.Block{}\n\n\tfor _, name := range req.ResourceTypes {\n\t\tif r, exists := p.ResourcesMap[name]; exists {\n\t\t\tresourceTypes[name] = r.CoreConfigSchema()\n\t\t}\n\t}\n\tfor _, name := range req.DataSources {\n\t\tif r, exists := p.DataSourcesMap[name]; exists {\n\t\t\tdataSources[name] = r.CoreConfigSchema()\n\t\t}\n\t}\n\n\treturn &terraform.ProviderSchema{\n\t\tProvider:      schemaMap(p.Schema).CoreConfigSchema(),\n\t\tResourceTypes: resourceTypes,\n\t\tDataSources:   dataSources,\n\t}, nil\n}\n\n// Input implementation of terraform.ResourceProvider interface.\nfunc (p *Provider) Input(\n\tinput terraform.UIInput,\n\tc *terraform.ResourceConfig) (*terraform.ResourceConfig, error) {\n\treturn schemaMap(p.Schema).Input(input, c)\n}\n\n// Validate implementation of terraform.ResourceProvider interface.\nfunc (p *Provider) Validate(c *terraform.ResourceConfig) ([]string, []error) {\n\tif err := p.InternalValidate(); err != nil {\n\t\treturn nil, []error{fmt.Errorf(\n\t\t\t\"Internal validation of the provider failed! This is always a bug\\n\"+\n\t\t\t\t\"with the provider itself, and not a user issue. Please report\\n\"+\n\t\t\t\t\"this bug:\\n\\n%s\", err)}\n\t}\n\n\treturn schemaMap(p.Schema).Validate(c)\n}\n\n// ValidateResource implementation of terraform.ResourceProvider interface.\nfunc (p *Provider) ValidateResource(\n\tt string, c *terraform.ResourceConfig) ([]string, []error) {\n\tr, ok := p.ResourcesMap[t]\n\tif !ok {\n\t\treturn nil, []error{fmt.Errorf(\n\t\t\t\"Provider doesn't support resource: %s\", t)}\n\t}\n\n\treturn r.Validate(c)\n}\n\n// Configure implementation of terraform.ResourceProvider interface.\nfunc (p *Provider) Configure(c *terraform.ResourceConfig) error {\n\t// No configuration\n\tif p.ConfigureFunc == nil {\n\t\treturn nil\n\t}\n\n\tsm := schemaMap(p.Schema)\n\n\t// Get a ResourceData for this configuration. To do this, we actually\n\t// generate an intermediary \"diff\" although that is never exposed.\n\tdiff, err := sm.Diff(nil, c, nil, p.meta, true)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tdata, err := sm.Data(nil, diff)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tmeta, err := p.ConfigureFunc(data)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tp.meta = meta\n\treturn nil\n}\n\n// Apply implementation of terraform.ResourceProvider interface.\nfunc (p *Provider) Apply(\n\tinfo *terraform.InstanceInfo,\n\ts *terraform.InstanceState,\n\td *terraform.InstanceDiff) (*terraform.InstanceState, error) {\n\tr, ok := p.ResourcesMap[info.Type]\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"unknown resource type: %s\", info.Type)\n\t}\n\n\treturn r.Apply(s, d, p.meta)\n}\n\n// Diff implementation of terraform.ResourceProvider interface.\nfunc (p *Provider) Diff(\n\tinfo *terraform.InstanceInfo,\n\ts *terraform.InstanceState,\n\tc *terraform.ResourceConfig) (*terraform.InstanceDiff, error) {\n\tr, ok := p.ResourcesMap[info.Type]\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"unknown resource type: %s\", info.Type)\n\t}\n\n\treturn r.Diff(s, c, p.meta)\n}\n\n// SimpleDiff is used by the new protocol wrappers to get a diff that doesn't\n// attempt to calculate ignore_changes.\nfunc (p *Provider) SimpleDiff(\n\tinfo *terraform.InstanceInfo,\n\ts *terraform.InstanceState,\n\tc *terraform.ResourceConfig) (*terraform.InstanceDiff, error) {\n\tr, ok := p.ResourcesMap[info.Type]\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"unknown resource type: %s\", info.Type)\n\t}\n\n\treturn r.simpleDiff(s, c, p.meta)\n}\n\n// Refresh implementation of terraform.ResourceProvider interface.\nfunc (p *Provider) Refresh(\n\tinfo *terraform.InstanceInfo,\n\ts *terraform.InstanceState) (*terraform.InstanceState, error) {\n\tr, ok := p.ResourcesMap[info.Type]\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"unknown resource type: %s\", info.Type)\n\t}\n\n\treturn r.Refresh(s, p.meta)\n}\n\n// Resources implementation of terraform.ResourceProvider interface.\nfunc (p *Provider) Resources() []terraform.ResourceType {\n\tkeys := make([]string, 0, len(p.ResourcesMap))\n\tfor k := range p.ResourcesMap {\n\t\tkeys = append(keys, k)\n\t}\n\tsort.Strings(keys)\n\n\tresult := make([]terraform.ResourceType, 0, len(keys))\n\tfor _, k := range keys {\n\t\tresource := p.ResourcesMap[k]\n\n\t\t// This isn't really possible (it'd fail InternalValidate), but\n\t\t// we do it anyways to avoid a panic.\n\t\tif resource == nil {\n\t\t\tresource = &Resource{}\n\t\t}\n\n\t\tresult = append(result, terraform.ResourceType{\n\t\t\tName:       k,\n\t\t\tImportable: resource.Importer != nil,\n\n\t\t\t// Indicates that a provider is compiled against a new enough\n\t\t\t// version of core to support the GetSchema method.\n\t\t\tSchemaAvailable: true,\n\t\t})\n\t}\n\n\treturn result\n}\n\nfunc (p *Provider) ImportState(\n\tinfo *terraform.InstanceInfo,\n\tid string) ([]*terraform.InstanceState, error) {\n\t// Find the resource\n\tr, ok := p.ResourcesMap[info.Type]\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"unknown resource type: %s\", info.Type)\n\t}\n\n\t// If it doesn't support import, error\n\tif r.Importer == nil {\n\t\treturn nil, fmt.Errorf(\"resource %s doesn't support import\", info.Type)\n\t}\n\n\t// Create the data\n\tdata := r.Data(nil)\n\tdata.SetId(id)\n\tdata.SetType(info.Type)\n\n\t// Call the import function\n\tresults := []*ResourceData{data}\n\tif r.Importer.State != nil {\n\t\tvar err error\n\t\tresults, err = r.Importer.State(data, p.meta)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\t// Convert the results to InstanceState values and return it\n\tstates := make([]*terraform.InstanceState, len(results))\n\tfor i, r := range results {\n\t\tstates[i] = r.State()\n\t}\n\n\t// Verify that all are non-nil. If there are any nil the error\n\t// isn't obvious so we circumvent that with a friendlier error.\n\tfor _, s := range states {\n\t\tif s == nil {\n\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\"nil entry in ImportState results. This is always a bug with\\n\" +\n\t\t\t\t\t\"the resource that is being imported. Please report this as\\n\" +\n\t\t\t\t\t\"a bug to Terraform.\")\n\t\t}\n\t}\n\n\treturn states, nil\n}\n\n// ValidateDataSource implementation of terraform.ResourceProvider interface.\nfunc (p *Provider) ValidateDataSource(\n\tt string, c *terraform.ResourceConfig) ([]string, []error) {\n\tr, ok := p.DataSourcesMap[t]\n\tif !ok {\n\t\treturn nil, []error{fmt.Errorf(\n\t\t\t\"Provider doesn't support data source: %s\", t)}\n\t}\n\n\treturn r.Validate(c)\n}\n\n// ReadDataDiff implementation of terraform.ResourceProvider interface.\nfunc (p *Provider) ReadDataDiff(\n\tinfo *terraform.InstanceInfo,\n\tc *terraform.ResourceConfig) (*terraform.InstanceDiff, error) {\n\n\tr, ok := p.DataSourcesMap[info.Type]\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"unknown data source: %s\", info.Type)\n\t}\n\n\treturn r.Diff(nil, c, p.meta)\n}\n\n// RefreshData implementation of terraform.ResourceProvider interface.\nfunc (p *Provider) ReadDataApply(\n\tinfo *terraform.InstanceInfo,\n\td *terraform.InstanceDiff) (*terraform.InstanceState, error) {\n\n\tr, ok := p.DataSourcesMap[info.Type]\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"unknown data source: %s\", info.Type)\n\t}\n\n\treturn r.ReadDataApply(d, p.meta)\n}\n\n// DataSources implementation of terraform.ResourceProvider interface.\nfunc (p *Provider) DataSources() []terraform.DataSource {\n\tkeys := make([]string, 0, len(p.DataSourcesMap))\n\tfor k, _ := range p.DataSourcesMap {\n\t\tkeys = append(keys, k)\n\t}\n\tsort.Strings(keys)\n\n\tresult := make([]terraform.DataSource, 0, len(keys))\n\tfor _, k := range keys {\n\t\tresult = append(result, terraform.DataSource{\n\t\t\tName: k,\n\n\t\t\t// Indicates that a provider is compiled against a new enough\n\t\t\t// version of core to support the GetSchema method.\n\t\t\tSchemaAvailable: true,\n\t\t})\n\t}\n\n\treturn result\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/helper/schema/provisioner.go",
    "content": "package schema\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"sync\"\n\n\t\"github.com/hashicorp/go-multierror\"\n\t\"github.com/hashicorp/terraform/config\"\n\t\"github.com/hashicorp/terraform/configs/configschema\"\n\t\"github.com/hashicorp/terraform/terraform\"\n)\n\n// Provisioner represents a resource provisioner in Terraform and properly\n// implements all of the ResourceProvisioner API.\n//\n// This higher level structure makes it much easier to implement a new or\n// custom provisioner for Terraform.\n//\n// The function callbacks for this structure are all passed a context object.\n// This context object has a number of pre-defined values that can be accessed\n// via the global functions defined in context.go.\ntype Provisioner struct {\n\t// ConnSchema is the schema for the connection settings for this\n\t// provisioner.\n\t//\n\t// The keys of this map are the configuration keys, and the value is\n\t// the schema describing the value of the configuration.\n\t//\n\t// NOTE: The value of connection keys can only be strings for now.\n\tConnSchema map[string]*Schema\n\n\t// Schema is the schema for the usage of this provisioner.\n\t//\n\t// The keys of this map are the configuration keys, and the value is\n\t// the schema describing the value of the configuration.\n\tSchema map[string]*Schema\n\n\t// ApplyFunc is the function for executing the provisioner. This is required.\n\t// It is given a context. See the Provisioner struct docs for more\n\t// information.\n\tApplyFunc func(ctx context.Context) error\n\n\t// ValidateFunc is a function for extended validation. This is optional\n\t// and should be used when individual field validation is not enough.\n\tValidateFunc func(*terraform.ResourceConfig) ([]string, []error)\n\n\tstopCtx       context.Context\n\tstopCtxCancel context.CancelFunc\n\tstopOnce      sync.Once\n}\n\n// Keys that can be used to access data in the context parameters for\n// Provisioners.\nvar (\n\tconnDataInvalid = contextKey(\"data invalid\")\n\n\t// This returns a *ResourceData for the connection information.\n\t// Guaranteed to never be nil.\n\tProvConnDataKey = contextKey(\"provider conn data\")\n\n\t// This returns a *ResourceData for the config information.\n\t// Guaranteed to never be nil.\n\tProvConfigDataKey = contextKey(\"provider config data\")\n\n\t// This returns a terraform.UIOutput. Guaranteed to never be nil.\n\tProvOutputKey = contextKey(\"provider output\")\n\n\t// This returns the raw InstanceState passed to Apply. Guaranteed to\n\t// be set, but may be nil.\n\tProvRawStateKey = contextKey(\"provider raw state\")\n)\n\n// InternalValidate should be called to validate the structure\n// of the provisioner.\n//\n// This should be called in a unit test to verify before release that this\n// structure is properly configured for use.\nfunc (p *Provisioner) InternalValidate() error {\n\tif p == nil {\n\t\treturn errors.New(\"provisioner is nil\")\n\t}\n\n\tvar validationErrors error\n\t{\n\t\tsm := schemaMap(p.ConnSchema)\n\t\tif err := sm.InternalValidate(sm); err != nil {\n\t\t\tvalidationErrors = multierror.Append(validationErrors, err)\n\t\t}\n\t}\n\n\t{\n\t\tsm := schemaMap(p.Schema)\n\t\tif err := sm.InternalValidate(sm); err != nil {\n\t\t\tvalidationErrors = multierror.Append(validationErrors, err)\n\t\t}\n\t}\n\n\tif p.ApplyFunc == nil {\n\t\tvalidationErrors = multierror.Append(validationErrors, fmt.Errorf(\n\t\t\t\"ApplyFunc must not be nil\"))\n\t}\n\n\treturn validationErrors\n}\n\n// StopContext returns a context that checks whether a provisioner is stopped.\nfunc (p *Provisioner) StopContext() context.Context {\n\tp.stopOnce.Do(p.stopInit)\n\treturn p.stopCtx\n}\n\nfunc (p *Provisioner) stopInit() {\n\tp.stopCtx, p.stopCtxCancel = context.WithCancel(context.Background())\n}\n\n// Stop implementation of terraform.ResourceProvisioner interface.\nfunc (p *Provisioner) Stop() error {\n\tp.stopOnce.Do(p.stopInit)\n\tp.stopCtxCancel()\n\treturn nil\n}\n\n// GetConfigSchema implementation of terraform.ResourceProvisioner interface.\nfunc (p *Provisioner) GetConfigSchema() (*configschema.Block, error) {\n\treturn schemaMap(p.Schema).CoreConfigSchema(), nil\n}\n\n// Apply implementation of terraform.ResourceProvisioner interface.\nfunc (p *Provisioner) Apply(\n\to terraform.UIOutput,\n\ts *terraform.InstanceState,\n\tc *terraform.ResourceConfig) error {\n\tvar connData, configData *ResourceData\n\n\t{\n\t\t// We first need to turn the connection information into a\n\t\t// terraform.ResourceConfig so that we can use that type to more\n\t\t// easily build a ResourceData structure. We do this by simply treating\n\t\t// the conn info as configuration input.\n\t\traw := make(map[string]interface{})\n\t\tif s != nil {\n\t\t\tfor k, v := range s.Ephemeral.ConnInfo {\n\t\t\t\traw[k] = v\n\t\t\t}\n\t\t}\n\n\t\tc, err := config.NewRawConfig(raw)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tsm := schemaMap(p.ConnSchema)\n\t\tdiff, err := sm.Diff(nil, terraform.NewResourceConfig(c), nil, nil, true)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tconnData, err = sm.Data(nil, diff)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t{\n\t\t// Build the configuration data. Doing this requires making a \"diff\"\n\t\t// even though that's never used. We use that just to get the correct types.\n\t\tconfigMap := schemaMap(p.Schema)\n\t\tdiff, err := configMap.Diff(nil, c, nil, nil, true)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tconfigData, err = configMap.Data(nil, diff)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// Build the context and call the function\n\tctx := p.StopContext()\n\tctx = context.WithValue(ctx, ProvConnDataKey, connData)\n\tctx = context.WithValue(ctx, ProvConfigDataKey, configData)\n\tctx = context.WithValue(ctx, ProvOutputKey, o)\n\tctx = context.WithValue(ctx, ProvRawStateKey, s)\n\treturn p.ApplyFunc(ctx)\n}\n\n// Validate implements the terraform.ResourceProvisioner interface.\nfunc (p *Provisioner) Validate(c *terraform.ResourceConfig) (ws []string, es []error) {\n\tif err := p.InternalValidate(); err != nil {\n\t\treturn nil, []error{fmt.Errorf(\n\t\t\t\"Internal validation of the provisioner failed! This is always a bug\\n\"+\n\t\t\t\t\"with the provisioner itself, and not a user issue. Please report\\n\"+\n\t\t\t\t\"this bug:\\n\\n%s\", err)}\n\t}\n\n\tif p.Schema != nil {\n\t\tw, e := schemaMap(p.Schema).Validate(c)\n\t\tws = append(ws, w...)\n\t\tes = append(es, e...)\n\t}\n\n\tif p.ValidateFunc != nil {\n\t\tw, e := p.ValidateFunc(c)\n\t\tws = append(ws, w...)\n\t\tes = append(es, e...)\n\t}\n\n\treturn ws, es\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/helper/schema/resource.go",
    "content": "package schema\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"log\"\n\t\"strconv\"\n\n\t\"github.com/hashicorp/terraform/config\"\n\t\"github.com/hashicorp/terraform/terraform\"\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// Resource represents a thing in Terraform that has a set of configurable\n// attributes and a lifecycle (create, read, update, delete).\n//\n// The Resource schema is an abstraction that allows provider writers to\n// worry only about CRUD operations while off-loading validation, diff\n// generation, etc. to this higher level library.\n//\n// In spite of the name, this struct is not used only for terraform resources,\n// but also for data sources. In the case of data sources, the Create,\n// Update and Delete functions must not be provided.\ntype Resource struct {\n\t// Schema is the schema for the configuration of this resource.\n\t//\n\t// The keys of this map are the configuration keys, and the values\n\t// describe the schema of the configuration value.\n\t//\n\t// The schema is used to represent both configurable data as well\n\t// as data that might be computed in the process of creating this\n\t// resource.\n\tSchema map[string]*Schema\n\n\t// SchemaVersion is the version number for this resource's Schema\n\t// definition. The current SchemaVersion stored in the state for each\n\t// resource. Provider authors can increment this version number\n\t// when Schema semantics change. If the State's SchemaVersion is less than\n\t// the current SchemaVersion, the InstanceState is yielded to the\n\t// MigrateState callback, where the provider can make whatever changes it\n\t// needs to update the state to be compatible to the latest version of the\n\t// Schema.\n\t//\n\t// When unset, SchemaVersion defaults to 0, so provider authors can start\n\t// their Versioning at any integer >= 1\n\tSchemaVersion int\n\n\t// MigrateState is deprecated and any new changes to a resource's schema\n\t// should be handled by StateUpgraders. Existing MigrateState implementations\n\t// should remain for compatibility with existing state. MigrateState will\n\t// still be called if the stored SchemaVersion is less than the\n\t// first version of the StateUpgraders.\n\t//\n\t// MigrateState is responsible for updating an InstanceState with an old\n\t// version to the format expected by the current version of the Schema.\n\t//\n\t// It is called during Refresh if the State's stored SchemaVersion is less\n\t// than the current SchemaVersion of the Resource.\n\t//\n\t// The function is yielded the state's stored SchemaVersion and a pointer to\n\t// the InstanceState that needs updating, as well as the configured\n\t// provider's configured meta interface{}, in case the migration process\n\t// needs to make any remote API calls.\n\tMigrateState StateMigrateFunc\n\n\t// StateUpgraders contains the functions responsible for upgrading an\n\t// existing state with an old schema version to a newer schema. It is\n\t// called specifically by Terraform when the stored schema version is less\n\t// than the current SchemaVersion of the Resource.\n\t//\n\t// StateUpgraders map specific schema versions to a StateUpgrader\n\t// function. The registered versions are expected to be ordered,\n\t// consecutive values. The initial value may be greater than 0 to account\n\t// for legacy schemas that weren't recorded and can be handled by\n\t// MigrateState.\n\tStateUpgraders []StateUpgrader\n\n\t// The functions below are the CRUD operations for this resource.\n\t//\n\t// The only optional operation is Update. If Update is not implemented,\n\t// then updates will not be supported for this resource.\n\t//\n\t// The ResourceData parameter in the functions below are used to\n\t// query configuration and changes for the resource as well as to set\n\t// the ID, computed data, etc.\n\t//\n\t// The interface{} parameter is the result of the ConfigureFunc in\n\t// the provider for this resource. If the provider does not define\n\t// a ConfigureFunc, this will be nil. This parameter should be used\n\t// to store API clients, configuration structures, etc.\n\t//\n\t// If any errors occur during each of the operation, an error should be\n\t// returned. If a resource was partially updated, be careful to enable\n\t// partial state mode for ResourceData and use it accordingly.\n\t//\n\t// Exists is a function that is called to check if a resource still\n\t// exists. If this returns false, then this will affect the diff\n\t// accordingly. If this function isn't set, it will not be called. It\n\t// is highly recommended to set it. The *ResourceData passed to Exists\n\t// should _not_ be modified.\n\tCreate CreateFunc\n\tRead   ReadFunc\n\tUpdate UpdateFunc\n\tDelete DeleteFunc\n\tExists ExistsFunc\n\n\t// CustomizeDiff is a custom function for working with the diff that\n\t// Terraform has created for this resource - it can be used to customize the\n\t// diff that has been created, diff values not controlled by configuration,\n\t// or even veto the diff altogether and abort the plan. It is passed a\n\t// *ResourceDiff, a structure similar to ResourceData but lacking most write\n\t// functions like Set, while introducing new functions that work with the\n\t// diff such as SetNew, SetNewComputed, and ForceNew.\n\t//\n\t// The phases Terraform runs this in, and the state available via functions\n\t// like Get and GetChange, are as follows:\n\t//\n\t//  * New resource: One run with no state\n\t//  * Existing resource: One run with state\n\t//   * Existing resource, forced new: One run with state (before ForceNew),\n\t//     then one run without state (as if new resource)\n\t//  * Tainted resource: No runs (custom diff logic is skipped)\n\t//  * Destroy: No runs (standard diff logic is skipped on destroy diffs)\n\t//\n\t// This function needs to be resilient to support all scenarios.\n\t//\n\t// If this function needs to access external API resources, remember to flag\n\t// the RequiresRefresh attribute mentioned below to ensure that\n\t// -refresh=false is blocked when running plan or apply, as this means that\n\t// this resource requires refresh-like behaviour to work effectively.\n\t//\n\t// For the most part, only computed fields can be customized by this\n\t// function.\n\t//\n\t// This function is only allowed on regular resources (not data sources).\n\tCustomizeDiff CustomizeDiffFunc\n\n\t// Importer is the ResourceImporter implementation for this resource.\n\t// If this is nil, then this resource does not support importing. If\n\t// this is non-nil, then it supports importing and ResourceImporter\n\t// must be validated. The validity of ResourceImporter is verified\n\t// by InternalValidate on Resource.\n\tImporter *ResourceImporter\n\n\t// If non-empty, this string is emitted as a warning during Validate.\n\tDeprecationMessage string\n\n\t// Timeouts allow users to specify specific time durations in which an\n\t// operation should time out, to allow them to extend an action to suit their\n\t// usage. For example, a user may specify a large Creation timeout for their\n\t// AWS RDS Instance due to it's size, or restoring from a snapshot.\n\t// Resource implementors must enable Timeout support by adding the allowed\n\t// actions (Create, Read, Update, Delete, Default) to the Resource struct, and\n\t// accessing them in the matching methods.\n\tTimeouts *ResourceTimeout\n}\n\n// ShimInstanceStateFromValue converts a cty.Value to a\n// terraform.InstanceState.\nfunc (r *Resource) ShimInstanceStateFromValue(state cty.Value) (*terraform.InstanceState, error) {\n\t// Get the raw shimmed value. While this is correct, the set hashes don't\n\t// match those from the Schema.\n\ts := terraform.NewInstanceStateShimmedFromValue(state, r.SchemaVersion)\n\n\t// We now rebuild the state through the ResourceData, so that the set indexes\n\t// match what helper/schema expects.\n\tdata, err := schemaMap(r.Schema).Data(s, nil)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\ts = data.State()\n\tif s == nil {\n\t\ts = &terraform.InstanceState{}\n\t}\n\treturn s, nil\n}\n\n// See Resource documentation.\ntype CreateFunc func(*ResourceData, interface{}) error\n\n// See Resource documentation.\ntype ReadFunc func(*ResourceData, interface{}) error\n\n// See Resource documentation.\ntype UpdateFunc func(*ResourceData, interface{}) error\n\n// See Resource documentation.\ntype DeleteFunc func(*ResourceData, interface{}) error\n\n// See Resource documentation.\ntype ExistsFunc func(*ResourceData, interface{}) (bool, error)\n\n// See Resource documentation.\ntype StateMigrateFunc func(\n\tint, *terraform.InstanceState, interface{}) (*terraform.InstanceState, error)\n\ntype StateUpgrader struct {\n\t// Version is the version schema that this Upgrader will handle, converting\n\t// it to Version+1.\n\tVersion int\n\n\t// Type describes the schema that this function can upgrade. Type is\n\t// required to decode the schema if the state was stored in a legacy\n\t// flatmap format.\n\tType cty.Type\n\n\t// Upgrade takes the JSON encoded state and the provider meta value, and\n\t// upgrades the state one single schema version. The provided state is\n\t// deocded into the default json types using a map[string]interface{}. It\n\t// is up to the StateUpgradeFunc to ensure that the returned value can be\n\t// encoded using the new schema.\n\tUpgrade StateUpgradeFunc\n}\n\n// See StateUpgrader\ntype StateUpgradeFunc func(rawState map[string]interface{}, meta interface{}) (map[string]interface{}, error)\n\n// See Resource documentation.\ntype CustomizeDiffFunc func(*ResourceDiff, interface{}) error\n\n// Apply creates, updates, and/or deletes a resource.\nfunc (r *Resource) Apply(\n\ts *terraform.InstanceState,\n\td *terraform.InstanceDiff,\n\tmeta interface{}) (*terraform.InstanceState, error) {\n\tdata, err := schemaMap(r.Schema).Data(s, d)\n\tif err != nil {\n\t\treturn s, err\n\t}\n\n\t// Instance Diff shoould have the timeout info, need to copy it over to the\n\t// ResourceData meta\n\trt := ResourceTimeout{}\n\tif _, ok := d.Meta[TimeoutKey]; ok {\n\t\tif err := rt.DiffDecode(d); err != nil {\n\t\t\tlog.Printf(\"[ERR] Error decoding ResourceTimeout: %s\", err)\n\t\t}\n\t} else if s != nil {\n\t\tif _, ok := s.Meta[TimeoutKey]; ok {\n\t\t\tif err := rt.StateDecode(s); err != nil {\n\t\t\t\tlog.Printf(\"[ERR] Error decoding ResourceTimeout: %s\", err)\n\t\t\t}\n\t\t}\n\t} else {\n\t\tlog.Printf(\"[DEBUG] No meta timeoutkey found in Apply()\")\n\t}\n\tdata.timeouts = &rt\n\n\tif s == nil {\n\t\t// The Terraform API dictates that this should never happen, but\n\t\t// it doesn't hurt to be safe in this case.\n\t\ts = new(terraform.InstanceState)\n\t}\n\n\tif d.Destroy || d.RequiresNew() {\n\t\tif s.ID != \"\" {\n\t\t\t// Destroy the resource since it is created\n\t\t\tif err := r.Delete(data, meta); err != nil {\n\t\t\t\treturn r.recordCurrentSchemaVersion(data.State()), err\n\t\t\t}\n\n\t\t\t// Make sure the ID is gone.\n\t\t\tdata.SetId(\"\")\n\t\t}\n\n\t\t// If we're only destroying, and not creating, then return\n\t\t// now since we're done!\n\t\tif !d.RequiresNew() {\n\t\t\treturn nil, nil\n\t\t}\n\n\t\t// Reset the data to be stateless since we just destroyed\n\t\tdata, err = schemaMap(r.Schema).Data(nil, d)\n\t\t// data was reset, need to re-apply the parsed timeouts\n\t\tdata.timeouts = &rt\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\terr = nil\n\tif data.Id() == \"\" {\n\t\t// We're creating, it is a new resource.\n\t\tdata.MarkNewResource()\n\t\terr = r.Create(data, meta)\n\t} else {\n\t\tif r.Update == nil {\n\t\t\treturn s, fmt.Errorf(\"doesn't support update\")\n\t\t}\n\n\t\terr = r.Update(data, meta)\n\t}\n\n\treturn r.recordCurrentSchemaVersion(data.State()), err\n}\n\n// Diff returns a diff of this resource.\nfunc (r *Resource) Diff(\n\ts *terraform.InstanceState,\n\tc *terraform.ResourceConfig,\n\tmeta interface{}) (*terraform.InstanceDiff, error) {\n\n\tt := &ResourceTimeout{}\n\terr := t.ConfigDecode(r, c)\n\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"[ERR] Error decoding timeout: %s\", err)\n\t}\n\n\tinstanceDiff, err := schemaMap(r.Schema).Diff(s, c, r.CustomizeDiff, meta, true)\n\tif err != nil {\n\t\treturn instanceDiff, err\n\t}\n\n\tif instanceDiff != nil {\n\t\tif err := t.DiffEncode(instanceDiff); err != nil {\n\t\t\tlog.Printf(\"[ERR] Error encoding timeout to instance diff: %s\", err)\n\t\t}\n\t} else {\n\t\tlog.Printf(\"[DEBUG] Instance Diff is nil in Diff()\")\n\t}\n\n\treturn instanceDiff, err\n}\n\nfunc (r *Resource) simpleDiff(\n\ts *terraform.InstanceState,\n\tc *terraform.ResourceConfig,\n\tmeta interface{}) (*terraform.InstanceDiff, error) {\n\n\tt := &ResourceTimeout{}\n\terr := t.ConfigDecode(r, c)\n\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"[ERR] Error decoding timeout: %s\", err)\n\t}\n\n\tinstanceDiff, err := schemaMap(r.Schema).Diff(s, c, r.CustomizeDiff, meta, false)\n\tif err != nil {\n\t\treturn instanceDiff, err\n\t}\n\n\tif instanceDiff == nil {\n\t\tlog.Printf(\"[DEBUG] Instance Diff is nil in SimpleDiff()\")\n\t\treturn nil, err\n\t}\n\n\t// Make sure the old value is set in each of the instance diffs.\n\t// This was done by the RequiresNew logic in the full legacy Diff.\n\tfor k, attr := range instanceDiff.Attributes {\n\t\tif attr == nil {\n\t\t\tcontinue\n\t\t}\n\t\tif s != nil {\n\t\t\tattr.Old = s.Attributes[k]\n\t\t}\n\t}\n\n\tif err := t.DiffEncode(instanceDiff); err != nil {\n\t\tlog.Printf(\"[ERR] Error encoding timeout to instance diff: %s\", err)\n\t}\n\treturn instanceDiff, err\n}\n\n// Validate validates the resource configuration against the schema.\nfunc (r *Resource) Validate(c *terraform.ResourceConfig) ([]string, []error) {\n\twarns, errs := schemaMap(r.Schema).Validate(c)\n\n\tif r.DeprecationMessage != \"\" {\n\t\twarns = append(warns, r.DeprecationMessage)\n\t}\n\n\treturn warns, errs\n}\n\n// ReadDataApply loads the data for a data source, given a diff that\n// describes the configuration arguments and desired computed attributes.\nfunc (r *Resource) ReadDataApply(\n\td *terraform.InstanceDiff,\n\tmeta interface{},\n) (*terraform.InstanceState, error) {\n\t// Data sources are always built completely from scratch\n\t// on each read, so the source state is always nil.\n\tdata, err := schemaMap(r.Schema).Data(nil, d)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\terr = r.Read(data, meta)\n\tstate := data.State()\n\tif state != nil && state.ID == \"\" {\n\t\t// Data sources can set an ID if they want, but they aren't\n\t\t// required to; we'll provide a placeholder if they don't,\n\t\t// to preserve the invariant that all resources have non-empty\n\t\t// ids.\n\t\tstate.ID = \"-\"\n\t}\n\n\treturn r.recordCurrentSchemaVersion(state), err\n}\n\n// RefreshWithoutUpgrade reads the instance state, but does not call\n// MigrateState or the StateUpgraders, since those are now invoked in a\n// separate API call.\n// RefreshWithoutUpgrade is part of the new plugin shims.\nfunc (r *Resource) RefreshWithoutUpgrade(\n\ts *terraform.InstanceState,\n\tmeta interface{}) (*terraform.InstanceState, error) {\n\t// If the ID is already somehow blank, it doesn't exist\n\tif s.ID == \"\" {\n\t\treturn nil, nil\n\t}\n\n\trt := ResourceTimeout{}\n\tif _, ok := s.Meta[TimeoutKey]; ok {\n\t\tif err := rt.StateDecode(s); err != nil {\n\t\t\tlog.Printf(\"[ERR] Error decoding ResourceTimeout: %s\", err)\n\t\t}\n\t}\n\n\tif r.Exists != nil {\n\t\t// Make a copy of data so that if it is modified it doesn't\n\t\t// affect our Read later.\n\t\tdata, err := schemaMap(r.Schema).Data(s, nil)\n\t\tdata.timeouts = &rt\n\n\t\tif err != nil {\n\t\t\treturn s, err\n\t\t}\n\n\t\texists, err := r.Exists(data, meta)\n\t\tif err != nil {\n\t\t\treturn s, err\n\t\t}\n\t\tif !exists {\n\t\t\treturn nil, nil\n\t\t}\n\t}\n\n\tdata, err := schemaMap(r.Schema).Data(s, nil)\n\tdata.timeouts = &rt\n\tif err != nil {\n\t\treturn s, err\n\t}\n\n\terr = r.Read(data, meta)\n\tstate := data.State()\n\tif state != nil && state.ID == \"\" {\n\t\tstate = nil\n\t}\n\n\treturn r.recordCurrentSchemaVersion(state), err\n}\n\n// Refresh refreshes the state of the resource.\nfunc (r *Resource) Refresh(\n\ts *terraform.InstanceState,\n\tmeta interface{}) (*terraform.InstanceState, error) {\n\t// If the ID is already somehow blank, it doesn't exist\n\tif s.ID == \"\" {\n\t\treturn nil, nil\n\t}\n\n\trt := ResourceTimeout{}\n\tif _, ok := s.Meta[TimeoutKey]; ok {\n\t\tif err := rt.StateDecode(s); err != nil {\n\t\t\tlog.Printf(\"[ERR] Error decoding ResourceTimeout: %s\", err)\n\t\t}\n\t}\n\n\tif r.Exists != nil {\n\t\t// Make a copy of data so that if it is modified it doesn't\n\t\t// affect our Read later.\n\t\tdata, err := schemaMap(r.Schema).Data(s, nil)\n\t\tdata.timeouts = &rt\n\n\t\tif err != nil {\n\t\t\treturn s, err\n\t\t}\n\n\t\texists, err := r.Exists(data, meta)\n\t\tif err != nil {\n\t\t\treturn s, err\n\t\t}\n\t\tif !exists {\n\t\t\treturn nil, nil\n\t\t}\n\t}\n\n\t// there may be new StateUpgraders that need to be run\n\ts, err := r.upgradeState(s, meta)\n\tif err != nil {\n\t\treturn s, err\n\t}\n\n\tdata, err := schemaMap(r.Schema).Data(s, nil)\n\tdata.timeouts = &rt\n\tif err != nil {\n\t\treturn s, err\n\t}\n\n\terr = r.Read(data, meta)\n\tstate := data.State()\n\tif state != nil && state.ID == \"\" {\n\t\tstate = nil\n\t}\n\n\treturn r.recordCurrentSchemaVersion(state), err\n}\n\nfunc (r *Resource) upgradeState(s *terraform.InstanceState, meta interface{}) (*terraform.InstanceState, error) {\n\tvar err error\n\n\tneedsMigration, stateSchemaVersion := r.checkSchemaVersion(s)\n\tmigrate := needsMigration && r.MigrateState != nil\n\n\tif migrate {\n\t\ts, err = r.MigrateState(stateSchemaVersion, s, meta)\n\t\tif err != nil {\n\t\t\treturn s, err\n\t\t}\n\t}\n\n\tif len(r.StateUpgraders) == 0 {\n\t\treturn s, nil\n\t}\n\n\t// If we ran MigrateState, then the stateSchemaVersion value is no longer\n\t// correct. We can expect the first upgrade function to be the correct\n\t// schema type version.\n\tif migrate {\n\t\tstateSchemaVersion = r.StateUpgraders[0].Version\n\t}\n\n\tschemaType := r.CoreConfigSchema().ImpliedType()\n\t// find the expected type to convert the state\n\tfor _, upgrader := range r.StateUpgraders {\n\t\tif stateSchemaVersion == upgrader.Version {\n\t\t\tschemaType = upgrader.Type\n\t\t}\n\t}\n\n\t// StateUpgraders only operate on the new JSON format state, so the state\n\t// need to be converted.\n\tstateVal, err := StateValueFromInstanceState(s, schemaType)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tjsonState, err := StateValueToJSONMap(stateVal, schemaType)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tfor _, upgrader := range r.StateUpgraders {\n\t\tif stateSchemaVersion != upgrader.Version {\n\t\t\tcontinue\n\t\t}\n\n\t\tjsonState, err = upgrader.Upgrade(jsonState, meta)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tstateSchemaVersion++\n\t}\n\n\t// now we need to re-flatmap the new state\n\tstateVal, err = JSONMapToStateValue(jsonState, r.CoreConfigSchema())\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn r.ShimInstanceStateFromValue(stateVal)\n}\n\n// InternalValidate should be called to validate the structure\n// of the resource.\n//\n// This should be called in a unit test for any resource to verify\n// before release that a resource is properly configured for use with\n// this library.\n//\n// Provider.InternalValidate() will automatically call this for all of\n// the resources it manages, so you don't need to call this manually if it\n// is part of a Provider.\nfunc (r *Resource) InternalValidate(topSchemaMap schemaMap, writable bool) error {\n\tif r == nil {\n\t\treturn errors.New(\"resource is nil\")\n\t}\n\n\tif !writable {\n\t\tif r.Create != nil || r.Update != nil || r.Delete != nil {\n\t\t\treturn fmt.Errorf(\"must not implement Create, Update or Delete\")\n\t\t}\n\n\t\t// CustomizeDiff cannot be defined for read-only resources\n\t\tif r.CustomizeDiff != nil {\n\t\t\treturn fmt.Errorf(\"cannot implement CustomizeDiff\")\n\t\t}\n\t}\n\n\ttsm := topSchemaMap\n\n\tif r.isTopLevel() && writable {\n\t\t// All non-Computed attributes must be ForceNew if Update is not defined\n\t\tif r.Update == nil {\n\t\t\tnonForceNewAttrs := make([]string, 0)\n\t\t\tfor k, v := range r.Schema {\n\t\t\t\tif !v.ForceNew && !v.Computed {\n\t\t\t\t\tnonForceNewAttrs = append(nonForceNewAttrs, k)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif len(nonForceNewAttrs) > 0 {\n\t\t\t\treturn fmt.Errorf(\n\t\t\t\t\t\"No Update defined, must set ForceNew on: %#v\", nonForceNewAttrs)\n\t\t\t}\n\t\t} else {\n\t\t\tnonUpdateableAttrs := make([]string, 0)\n\t\t\tfor k, v := range r.Schema {\n\t\t\t\tif v.ForceNew || v.Computed && !v.Optional {\n\t\t\t\t\tnonUpdateableAttrs = append(nonUpdateableAttrs, k)\n\t\t\t\t}\n\t\t\t}\n\t\t\tupdateableAttrs := len(r.Schema) - len(nonUpdateableAttrs)\n\t\t\tif updateableAttrs == 0 {\n\t\t\t\treturn fmt.Errorf(\n\t\t\t\t\t\"All fields are ForceNew or Computed w/out Optional, Update is superfluous\")\n\t\t\t}\n\t\t}\n\n\t\ttsm = schemaMap(r.Schema)\n\n\t\t// Destroy, and Read are required\n\t\tif r.Read == nil {\n\t\t\treturn fmt.Errorf(\"Read must be implemented\")\n\t\t}\n\t\tif r.Delete == nil {\n\t\t\treturn fmt.Errorf(\"Delete must be implemented\")\n\t\t}\n\n\t\t// If we have an importer, we need to verify the importer.\n\t\tif r.Importer != nil {\n\t\t\tif err := r.Importer.InternalValidate(); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\n\t\tfor k, f := range tsm {\n\t\t\tif isReservedResourceFieldName(k, f) {\n\t\t\t\treturn fmt.Errorf(\"%s is a reserved field name\", k)\n\t\t\t}\n\t\t}\n\t}\n\n\tlastVersion := -1\n\tfor _, u := range r.StateUpgraders {\n\t\tif lastVersion >= 0 && u.Version-lastVersion > 1 {\n\t\t\treturn fmt.Errorf(\"missing schema version between %d and %d\", lastVersion, u.Version)\n\t\t}\n\n\t\tif u.Version >= r.SchemaVersion {\n\t\t\treturn fmt.Errorf(\"StateUpgrader version %d is >= current version %d\", u.Version, r.SchemaVersion)\n\t\t}\n\n\t\tif !u.Type.IsObjectType() {\n\t\t\treturn fmt.Errorf(\"StateUpgrader %d type is not cty.Object\", u.Version)\n\t\t}\n\n\t\tif u.Upgrade == nil {\n\t\t\treturn fmt.Errorf(\"StateUpgrader %d missing StateUpgradeFunc\", u.Version)\n\t\t}\n\n\t\tlastVersion = u.Version\n\t}\n\n\tif lastVersion >= 0 && lastVersion != r.SchemaVersion-1 {\n\t\treturn fmt.Errorf(\"missing StateUpgrader between %d and %d\", lastVersion, r.SchemaVersion)\n\t}\n\n\t// Data source\n\tif r.isTopLevel() && !writable {\n\t\ttsm = schemaMap(r.Schema)\n\t\tfor k, _ := range tsm {\n\t\t\tif isReservedDataSourceFieldName(k) {\n\t\t\t\treturn fmt.Errorf(\"%s is a reserved field name\", k)\n\t\t\t}\n\t\t}\n\t}\n\n\treturn schemaMap(r.Schema).InternalValidate(tsm)\n}\n\nfunc isReservedDataSourceFieldName(name string) bool {\n\tfor _, reservedName := range config.ReservedDataSourceFields {\n\t\tif name == reservedName {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\nfunc isReservedResourceFieldName(name string, s *Schema) bool {\n\t// Allow phasing out \"id\"\n\t// See https://github.com/terraform-providers/terraform-provider-aws/pull/1626#issuecomment-328881415\n\tif name == \"id\" && (s.Deprecated != \"\" || s.Removed != \"\") {\n\t\treturn false\n\t}\n\n\tfor _, reservedName := range config.ReservedResourceFields {\n\t\tif name == reservedName {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// Data returns a ResourceData struct for this Resource. Each return value\n// is a separate copy and can be safely modified differently.\n//\n// The data returned from this function has no actual affect on the Resource\n// itself (including the state given to this function).\n//\n// This function is useful for unit tests and ResourceImporter functions.\nfunc (r *Resource) Data(s *terraform.InstanceState) *ResourceData {\n\tresult, err := schemaMap(r.Schema).Data(s, nil)\n\tif err != nil {\n\t\t// At the time of writing, this isn't possible (Data never returns\n\t\t// non-nil errors). We panic to find this in the future if we have to.\n\t\t// I don't see a reason for Data to ever return an error.\n\t\tpanic(err)\n\t}\n\n\t// load the Resource timeouts\n\tresult.timeouts = r.Timeouts\n\tif result.timeouts == nil {\n\t\tresult.timeouts = &ResourceTimeout{}\n\t}\n\n\t// Set the schema version to latest by default\n\tresult.meta = map[string]interface{}{\n\t\t\"schema_version\": strconv.Itoa(r.SchemaVersion),\n\t}\n\n\treturn result\n}\n\n// TestResourceData Yields a ResourceData filled with this resource's schema for use in unit testing\n//\n// TODO: May be able to be removed with the above ResourceData function.\nfunc (r *Resource) TestResourceData() *ResourceData {\n\treturn &ResourceData{\n\t\tschema: r.Schema,\n\t}\n}\n\n// SchemasForFlatmapPath tries its best to find a sequence of schemas that\n// the given dot-delimited attribute path traverses through in the schema\n// of the receiving Resource.\nfunc (r *Resource) SchemasForFlatmapPath(path string) []*Schema {\n\treturn SchemasForFlatmapPath(path, r.Schema)\n}\n\n// Returns true if the resource is \"top level\" i.e. not a sub-resource.\nfunc (r *Resource) isTopLevel() bool {\n\t// TODO: This is a heuristic; replace with a definitive attribute?\n\treturn (r.Create != nil || r.Read != nil)\n}\n\n// Determines if a given InstanceState needs to be migrated by checking the\n// stored version number with the current SchemaVersion\nfunc (r *Resource) checkSchemaVersion(is *terraform.InstanceState) (bool, int) {\n\t// Get the raw interface{} value for the schema version. If it doesn't\n\t// exist or is nil then set it to zero.\n\traw := is.Meta[\"schema_version\"]\n\tif raw == nil {\n\t\traw = \"0\"\n\t}\n\n\t// Try to convert it to a string. If it isn't a string then we pretend\n\t// that it isn't set at all. It should never not be a string unless it\n\t// was manually tampered with.\n\trawString, ok := raw.(string)\n\tif !ok {\n\t\trawString = \"0\"\n\t}\n\n\tstateSchemaVersion, _ := strconv.Atoi(rawString)\n\n\t// Don't run MigrateState if the version is handled by a StateUpgrader,\n\t// since StateMigrateFuncs are not required to handle unknown versions\n\tmaxVersion := r.SchemaVersion\n\tif len(r.StateUpgraders) > 0 {\n\t\tmaxVersion = r.StateUpgraders[0].Version\n\t}\n\n\treturn stateSchemaVersion < maxVersion, stateSchemaVersion\n}\n\nfunc (r *Resource) recordCurrentSchemaVersion(\n\tstate *terraform.InstanceState) *terraform.InstanceState {\n\tif state != nil && r.SchemaVersion > 0 {\n\t\tif state.Meta == nil {\n\t\t\tstate.Meta = make(map[string]interface{})\n\t\t}\n\t\tstate.Meta[\"schema_version\"] = strconv.Itoa(r.SchemaVersion)\n\t}\n\treturn state\n}\n\n// Noop is a convenience implementation of resource function which takes\n// no action and returns no error.\nfunc Noop(*ResourceData, interface{}) error {\n\treturn nil\n}\n\n// RemoveFromState is a convenience implementation of a resource function\n// which sets the resource ID to empty string (to remove it from state)\n// and returns no error.\nfunc RemoveFromState(d *ResourceData, _ interface{}) error {\n\td.SetId(\"\")\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/helper/schema/resource_data.go",
    "content": "package schema\n\nimport (\n\t\"log\"\n\t\"reflect\"\n\t\"strings\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/hashicorp/terraform/terraform\"\n)\n\n// ResourceData is used to query and set the attributes of a resource.\n//\n// ResourceData is the primary argument received for CRUD operations on\n// a resource as well as configuration of a provider. It is a powerful\n// structure that can be used to not only query data, but check for changes,\n// define partial state updates, etc.\n//\n// The most relevant methods to take a look at are Get, Set, and Partial.\ntype ResourceData struct {\n\t// Settable (internally)\n\tschema   map[string]*Schema\n\tconfig   *terraform.ResourceConfig\n\tstate    *terraform.InstanceState\n\tdiff     *terraform.InstanceDiff\n\tmeta     map[string]interface{}\n\ttimeouts *ResourceTimeout\n\n\t// Don't set\n\tmultiReader *MultiLevelFieldReader\n\tsetWriter   *MapFieldWriter\n\tnewState    *terraform.InstanceState\n\tpartial     bool\n\tpartialMap  map[string]struct{}\n\tonce        sync.Once\n\tisNew       bool\n\n\tpanicOnError bool\n}\n\n// getResult is the internal structure that is generated when a Get\n// is called that contains some extra data that might be used.\ntype getResult struct {\n\tValue          interface{}\n\tValueProcessed interface{}\n\tComputed       bool\n\tExists         bool\n\tSchema         *Schema\n}\n\n// UnsafeSetFieldRaw allows setting arbitrary values in state to arbitrary\n// values, bypassing schema. This MUST NOT be used in normal circumstances -\n// it exists only to support the remote_state data source.\n//\n// Deprecated: Fully define schema attributes and use Set() instead.\nfunc (d *ResourceData) UnsafeSetFieldRaw(key string, value string) {\n\td.once.Do(d.init)\n\n\td.setWriter.unsafeWriteField(key, value)\n}\n\n// Get returns the data for the given key, or nil if the key doesn't exist\n// in the schema.\n//\n// If the key does exist in the schema but doesn't exist in the configuration,\n// then the default value for that type will be returned. For strings, this is\n// \"\", for numbers it is 0, etc.\n//\n// If you want to test if something is set at all in the configuration,\n// use GetOk.\nfunc (d *ResourceData) Get(key string) interface{} {\n\tv, _ := d.GetOk(key)\n\treturn v\n}\n\n// GetChange returns the old and new value for a given key.\n//\n// HasChange should be used to check if a change exists. It is possible\n// that both the old and new value are the same if the old value was not\n// set and the new value is. This is common, for example, for boolean\n// fields which have a zero value of false.\nfunc (d *ResourceData) GetChange(key string) (interface{}, interface{}) {\n\to, n := d.getChange(key, getSourceState, getSourceDiff)\n\treturn o.Value, n.Value\n}\n\n// GetOk returns the data for the given key and whether or not the key\n// has been set to a non-zero value at some point.\n//\n// The first result will not necessarilly be nil if the value doesn't exist.\n// The second result should be checked to determine this information.\nfunc (d *ResourceData) GetOk(key string) (interface{}, bool) {\n\tr := d.getRaw(key, getSourceSet)\n\texists := r.Exists && !r.Computed\n\tif exists {\n\t\t// If it exists, we also want to verify it is not the zero-value.\n\t\tvalue := r.Value\n\t\tzero := r.Schema.Type.Zero()\n\n\t\tif eq, ok := value.(Equal); ok {\n\t\t\texists = !eq.Equal(zero)\n\t\t} else {\n\t\t\texists = !reflect.DeepEqual(value, zero)\n\t\t}\n\t}\n\n\treturn r.Value, exists\n}\n\n// GetOkExists returns the data for a given key and whether or not the key\n// has been set to a non-zero value. This is only useful for determining\n// if boolean attributes have been set, if they are Optional but do not\n// have a Default value.\n//\n// This is nearly the same function as GetOk, yet it does not check\n// for the zero value of the attribute's type. This allows for attributes\n// without a default, to fully check for a literal assignment, regardless\n// of the zero-value for that type.\n// This should only be used if absolutely required/needed.\nfunc (d *ResourceData) GetOkExists(key string) (interface{}, bool) {\n\tr := d.getRaw(key, getSourceSet)\n\texists := r.Exists && !r.Computed\n\treturn r.Value, exists\n}\n\nfunc (d *ResourceData) getRaw(key string, level getSource) getResult {\n\tvar parts []string\n\tif key != \"\" {\n\t\tparts = strings.Split(key, \".\")\n\t}\n\n\treturn d.get(parts, level)\n}\n\n// HasChange returns whether or not the given key has been changed.\nfunc (d *ResourceData) HasChange(key string) bool {\n\to, n := d.GetChange(key)\n\n\t// If the type implements the Equal interface, then call that\n\t// instead of just doing a reflect.DeepEqual. An example where this is\n\t// needed is *Set\n\tif eq, ok := o.(Equal); ok {\n\t\treturn !eq.Equal(n)\n\t}\n\n\treturn !reflect.DeepEqual(o, n)\n}\n\n// Partial turns partial state mode on/off.\n//\n// When partial state mode is enabled, then only key prefixes specified\n// by SetPartial will be in the final state. This allows providers to return\n// partial states for partially applied resources (when errors occur).\nfunc (d *ResourceData) Partial(on bool) {\n\td.partial = on\n\tif on {\n\t\tif d.partialMap == nil {\n\t\t\td.partialMap = make(map[string]struct{})\n\t\t}\n\t} else {\n\t\td.partialMap = nil\n\t}\n}\n\n// Set sets the value for the given key.\n//\n// If the key is invalid or the value is not a correct type, an error\n// will be returned.\nfunc (d *ResourceData) Set(key string, value interface{}) error {\n\td.once.Do(d.init)\n\n\t// If the value is a pointer to a non-struct, get its value and\n\t// use that. This allows Set to take a pointer to primitives to\n\t// simplify the interface.\n\treflectVal := reflect.ValueOf(value)\n\tif reflectVal.Kind() == reflect.Ptr {\n\t\tif reflectVal.IsNil() {\n\t\t\t// If the pointer is nil, then the value is just nil\n\t\t\tvalue = nil\n\t\t} else {\n\t\t\t// Otherwise, we dereference the pointer as long as its not\n\t\t\t// a pointer to a struct, since struct pointers are allowed.\n\t\t\treflectVal = reflect.Indirect(reflectVal)\n\t\t\tif reflectVal.Kind() != reflect.Struct {\n\t\t\t\tvalue = reflectVal.Interface()\n\t\t\t}\n\t\t}\n\t}\n\n\terr := d.setWriter.WriteField(strings.Split(key, \".\"), value)\n\tif err != nil && d.panicOnError {\n\t\tpanic(err)\n\t}\n\treturn err\n}\n\n// SetPartial adds the key to the final state output while\n// in partial state mode. The key must be a root key in the schema (i.e.\n// it cannot be \"list.0\").\n//\n// If partial state mode is disabled, then this has no effect. Additionally,\n// whenever partial state mode is toggled, the partial data is cleared.\nfunc (d *ResourceData) SetPartial(k string) {\n\tif d.partial {\n\t\td.partialMap[k] = struct{}{}\n\t}\n}\n\nfunc (d *ResourceData) MarkNewResource() {\n\td.isNew = true\n}\n\nfunc (d *ResourceData) IsNewResource() bool {\n\treturn d.isNew\n}\n\n// Id returns the ID of the resource.\nfunc (d *ResourceData) Id() string {\n\tvar result string\n\n\tif d.state != nil {\n\t\tresult = d.state.ID\n\t\tif result == \"\" {\n\t\t\tresult = d.state.Attributes[\"id\"]\n\t\t}\n\t}\n\n\tif d.newState != nil {\n\t\tresult = d.newState.ID\n\t\tif result == \"\" {\n\t\t\tresult = d.newState.Attributes[\"id\"]\n\t\t}\n\t}\n\n\treturn result\n}\n\n// ConnInfo returns the connection info for this resource.\nfunc (d *ResourceData) ConnInfo() map[string]string {\n\tif d.newState != nil {\n\t\treturn d.newState.Ephemeral.ConnInfo\n\t}\n\n\tif d.state != nil {\n\t\treturn d.state.Ephemeral.ConnInfo\n\t}\n\n\treturn nil\n}\n\n// SetId sets the ID of the resource. If the value is blank, then the\n// resource is destroyed.\nfunc (d *ResourceData) SetId(v string) {\n\td.once.Do(d.init)\n\td.newState.ID = v\n\n\t// once we transition away from the legacy state types, \"id\" will no longer\n\t// be a special field, and will become a normal attribute.\n\t// set the attribute normally\n\td.setWriter.unsafeWriteField(\"id\", v)\n\n\t// Make sure the newState is also set, otherwise the old value\n\t// may get precedence.\n\tif d.newState.Attributes == nil {\n\t\td.newState.Attributes = map[string]string{}\n\t}\n\td.newState.Attributes[\"id\"] = v\n}\n\n// SetConnInfo sets the connection info for a resource.\nfunc (d *ResourceData) SetConnInfo(v map[string]string) {\n\td.once.Do(d.init)\n\td.newState.Ephemeral.ConnInfo = v\n}\n\n// SetType sets the ephemeral type for the data. This is only required\n// for importing.\nfunc (d *ResourceData) SetType(t string) {\n\td.once.Do(d.init)\n\td.newState.Ephemeral.Type = t\n}\n\n// State returns the new InstanceState after the diff and any Set\n// calls.\nfunc (d *ResourceData) State() *terraform.InstanceState {\n\tvar result terraform.InstanceState\n\tresult.ID = d.Id()\n\tresult.Meta = d.meta\n\n\t// If we have no ID, then this resource doesn't exist and we just\n\t// return nil.\n\tif result.ID == \"\" {\n\t\treturn nil\n\t}\n\n\tif d.timeouts != nil {\n\t\tif err := d.timeouts.StateEncode(&result); err != nil {\n\t\t\tlog.Printf(\"[ERR] Error encoding Timeout meta to Instance State: %s\", err)\n\t\t}\n\t}\n\n\t// Look for a magic key in the schema that determines we skip the\n\t// integrity check of fields existing in the schema, allowing dynamic\n\t// keys to be created.\n\thasDynamicAttributes := false\n\tfor k, _ := range d.schema {\n\t\tif k == \"__has_dynamic_attributes\" {\n\t\t\thasDynamicAttributes = true\n\t\t\tlog.Printf(\"[INFO] Resource %s has dynamic attributes\", result.ID)\n\t\t}\n\t}\n\n\t// In order to build the final state attributes, we read the full\n\t// attribute set as a map[string]interface{}, write it to a MapFieldWriter,\n\t// and then use that map.\n\trawMap := make(map[string]interface{})\n\tfor k := range d.schema {\n\t\tsource := getSourceSet\n\t\tif d.partial {\n\t\t\tsource = getSourceState\n\t\t\tif _, ok := d.partialMap[k]; ok {\n\t\t\t\tsource = getSourceSet\n\t\t\t}\n\t\t}\n\n\t\traw := d.get([]string{k}, source)\n\t\tif raw.Exists && !raw.Computed {\n\t\t\trawMap[k] = raw.Value\n\t\t\tif raw.ValueProcessed != nil {\n\t\t\t\trawMap[k] = raw.ValueProcessed\n\t\t\t}\n\t\t}\n\t}\n\n\tmapW := &MapFieldWriter{Schema: d.schema}\n\tif err := mapW.WriteField(nil, rawMap); err != nil {\n\t\tlog.Printf(\"[ERR] Error writing fields: %s\", err)\n\t\treturn nil\n\t}\n\n\tresult.Attributes = mapW.Map()\n\n\tif hasDynamicAttributes {\n\t\t// If we have dynamic attributes, just copy the attributes map\n\t\t// one for one into the result attributes.\n\t\tfor k, v := range d.setWriter.Map() {\n\t\t\t// Don't clobber schema values. This limits usage of dynamic\n\t\t\t// attributes to names which _do not_ conflict with schema\n\t\t\t// keys!\n\t\t\tif _, ok := result.Attributes[k]; !ok {\n\t\t\t\tresult.Attributes[k] = v\n\t\t\t}\n\t\t}\n\t}\n\n\tif d.newState != nil {\n\t\tresult.Ephemeral = d.newState.Ephemeral\n\t}\n\n\t// TODO: This is hacky and we can remove this when we have a proper\n\t// state writer. We should instead have a proper StateFieldWriter\n\t// and use that.\n\tfor k, schema := range d.schema {\n\t\tif schema.Type != TypeMap {\n\t\t\tcontinue\n\t\t}\n\n\t\tif result.Attributes[k] == \"\" {\n\t\t\tdelete(result.Attributes, k)\n\t\t}\n\t}\n\n\tif v := d.Id(); v != \"\" {\n\t\tresult.Attributes[\"id\"] = d.Id()\n\t}\n\n\tif d.state != nil {\n\t\tresult.Tainted = d.state.Tainted\n\t}\n\n\treturn &result\n}\n\n// Timeout returns the data for the given timeout key\n// Returns a duration of 20 minutes for any key not found, or not found and no default.\nfunc (d *ResourceData) Timeout(key string) time.Duration {\n\tkey = strings.ToLower(key)\n\n\t// System default of 20 minutes\n\tdefaultTimeout := 20 * time.Minute\n\n\tif d.timeouts == nil {\n\t\treturn defaultTimeout\n\t}\n\n\tvar timeout *time.Duration\n\tswitch key {\n\tcase TimeoutCreate:\n\t\ttimeout = d.timeouts.Create\n\tcase TimeoutRead:\n\t\ttimeout = d.timeouts.Read\n\tcase TimeoutUpdate:\n\t\ttimeout = d.timeouts.Update\n\tcase TimeoutDelete:\n\t\ttimeout = d.timeouts.Delete\n\t}\n\n\tif timeout != nil {\n\t\treturn *timeout\n\t}\n\n\tif d.timeouts.Default != nil {\n\t\treturn *d.timeouts.Default\n\t}\n\n\treturn defaultTimeout\n}\n\nfunc (d *ResourceData) init() {\n\t// Initialize the field that will store our new state\n\tvar copyState terraform.InstanceState\n\tif d.state != nil {\n\t\tcopyState = *d.state.DeepCopy()\n\t}\n\td.newState = &copyState\n\n\t// Initialize the map for storing set data\n\td.setWriter = &MapFieldWriter{Schema: d.schema}\n\n\t// Initialize the reader for getting data from the\n\t// underlying sources (config, diff, etc.)\n\treaders := make(map[string]FieldReader)\n\tvar stateAttributes map[string]string\n\tif d.state != nil {\n\t\tstateAttributes = d.state.Attributes\n\t\treaders[\"state\"] = &MapFieldReader{\n\t\t\tSchema: d.schema,\n\t\t\tMap:    BasicMapReader(stateAttributes),\n\t\t}\n\t}\n\tif d.config != nil {\n\t\treaders[\"config\"] = &ConfigFieldReader{\n\t\t\tSchema: d.schema,\n\t\t\tConfig: d.config,\n\t\t}\n\t}\n\tif d.diff != nil {\n\t\treaders[\"diff\"] = &DiffFieldReader{\n\t\t\tSchema: d.schema,\n\t\t\tDiff:   d.diff,\n\t\t\tSource: &MultiLevelFieldReader{\n\t\t\t\tLevels:  []string{\"state\", \"config\"},\n\t\t\t\tReaders: readers,\n\t\t\t},\n\t\t}\n\t}\n\treaders[\"set\"] = &MapFieldReader{\n\t\tSchema: d.schema,\n\t\tMap:    BasicMapReader(d.setWriter.Map()),\n\t}\n\td.multiReader = &MultiLevelFieldReader{\n\t\tLevels: []string{\n\t\t\t\"state\",\n\t\t\t\"config\",\n\t\t\t\"diff\",\n\t\t\t\"set\",\n\t\t},\n\n\t\tReaders: readers,\n\t}\n}\n\nfunc (d *ResourceData) diffChange(\n\tk string) (interface{}, interface{}, bool, bool, bool) {\n\t// Get the change between the state and the config.\n\to, n := d.getChange(k, getSourceState, getSourceConfig|getSourceExact)\n\tif !o.Exists {\n\t\to.Value = nil\n\t}\n\tif !n.Exists {\n\t\tn.Value = nil\n\t}\n\n\t// Return the old, new, and whether there is a change\n\treturn o.Value, n.Value, !reflect.DeepEqual(o.Value, n.Value), n.Computed, false\n}\n\nfunc (d *ResourceData) getChange(\n\tk string,\n\toldLevel getSource,\n\tnewLevel getSource) (getResult, getResult) {\n\tvar parts, parts2 []string\n\tif k != \"\" {\n\t\tparts = strings.Split(k, \".\")\n\t\tparts2 = strings.Split(k, \".\")\n\t}\n\n\to := d.get(parts, oldLevel)\n\tn := d.get(parts2, newLevel)\n\treturn o, n\n}\n\nfunc (d *ResourceData) get(addr []string, source getSource) getResult {\n\td.once.Do(d.init)\n\n\tlevel := \"set\"\n\tflags := source & ^getSourceLevelMask\n\texact := flags&getSourceExact != 0\n\tsource = source & getSourceLevelMask\n\tif source >= getSourceSet {\n\t\tlevel = \"set\"\n\t} else if source >= getSourceDiff {\n\t\tlevel = \"diff\"\n\t} else if source >= getSourceConfig {\n\t\tlevel = \"config\"\n\t} else {\n\t\tlevel = \"state\"\n\t}\n\n\tvar result FieldReadResult\n\tvar err error\n\tif exact {\n\t\tresult, err = d.multiReader.ReadFieldExact(addr, level)\n\t} else {\n\t\tresult, err = d.multiReader.ReadFieldMerge(addr, level)\n\t}\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\t// If the result doesn't exist, then we set the value to the zero value\n\tvar schema *Schema\n\tif schemaL := addrToSchema(addr, d.schema); len(schemaL) > 0 {\n\t\tschema = schemaL[len(schemaL)-1]\n\t}\n\n\tif result.Value == nil && schema != nil {\n\t\tresult.Value = result.ValueOrZero(schema)\n\t}\n\n\t// Transform the FieldReadResult into a getResult. It might be worth\n\t// merging these two structures one day.\n\treturn getResult{\n\t\tValue:          result.Value,\n\t\tValueProcessed: result.ValueProcessed,\n\t\tComputed:       result.Computed,\n\t\tExists:         result.Exists,\n\t\tSchema:         schema,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/helper/schema/resource_data_get_source.go",
    "content": "package schema\n\n//go:generate stringer -type=getSource resource_data_get_source.go\n\n// getSource represents the level we want to get for a value (internally).\n// Any source less than or equal to the level will be loaded (whichever\n// has a value first).\ntype getSource byte\n\nconst (\n\tgetSourceState getSource = 1 << iota\n\tgetSourceConfig\n\tgetSourceDiff\n\tgetSourceSet\n\tgetSourceExact               // Only get from the _exact_ level\n\tgetSourceLevelMask getSource = getSourceState | getSourceConfig | getSourceDiff | getSourceSet\n)\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/helper/schema/resource_diff.go",
    "content": "package schema\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"strings\"\n\t\"sync\"\n\n\t\"github.com/hashicorp/terraform/terraform\"\n)\n\n// newValueWriter is a minor re-implementation of MapFieldWriter to include\n// keys that should be marked as computed, to represent the new part of a\n// pseudo-diff.\ntype newValueWriter struct {\n\t*MapFieldWriter\n\n\t// A list of keys that should be marked as computed.\n\tcomputedKeys map[string]bool\n\n\t// A lock to prevent races on writes. The underlying writer will have one as\n\t// well - this is for computed keys.\n\tlock sync.Mutex\n\n\t// To be used with init.\n\tonce sync.Once\n}\n\n// init performs any initialization tasks for the newValueWriter.\nfunc (w *newValueWriter) init() {\n\tif w.computedKeys == nil {\n\t\tw.computedKeys = make(map[string]bool)\n\t}\n}\n\n// WriteField overrides MapValueWriter's WriteField, adding the ability to flag\n// the address as computed.\nfunc (w *newValueWriter) WriteField(address []string, value interface{}, computed bool) error {\n\t// Fail the write if we have a non-nil value and computed is true.\n\t// NewComputed values should not have a value when written.\n\tif value != nil && computed {\n\t\treturn errors.New(\"Non-nil value with computed set\")\n\t}\n\n\tif err := w.MapFieldWriter.WriteField(address, value); err != nil {\n\t\treturn err\n\t}\n\n\tw.once.Do(w.init)\n\n\tw.lock.Lock()\n\tdefer w.lock.Unlock()\n\tif computed {\n\t\tw.computedKeys[strings.Join(address, \".\")] = true\n\t}\n\treturn nil\n}\n\n// ComputedKeysMap returns the underlying computed keys map.\nfunc (w *newValueWriter) ComputedKeysMap() map[string]bool {\n\tw.once.Do(w.init)\n\treturn w.computedKeys\n}\n\n// newValueReader is a minor re-implementation of MapFieldReader and is the\n// read counterpart to MapValueWriter, allowing the read of keys flagged as\n// computed to accommodate the diff override logic in ResourceDiff.\ntype newValueReader struct {\n\t*MapFieldReader\n\n\t// The list of computed keys from a newValueWriter.\n\tcomputedKeys map[string]bool\n}\n\n// ReadField reads the values from the underlying writer, returning the\n// computed value if it is found as well.\nfunc (r *newValueReader) ReadField(address []string) (FieldReadResult, error) {\n\taddrKey := strings.Join(address, \".\")\n\tv, err := r.MapFieldReader.ReadField(address)\n\tif err != nil {\n\t\treturn FieldReadResult{}, err\n\t}\n\tfor computedKey := range r.computedKeys {\n\t\tif childAddrOf(addrKey, computedKey) {\n\t\t\tif strings.HasSuffix(addrKey, \".#\") {\n\t\t\t\t// This is a count value for a list or set that has been marked as\n\t\t\t\t// computed, or a sub-list/sub-set of a complex resource that has\n\t\t\t\t// been marked as computed.  We need to pass through to other readers\n\t\t\t\t// so that an accurate previous count can be fetched for the diff.\n\t\t\t\tv.Exists = false\n\t\t\t}\n\t\t\tv.Computed = true\n\t\t}\n\t}\n\n\treturn v, nil\n}\n\n// ResourceDiff is used to query and make custom changes to an in-flight diff.\n// It can be used to veto particular changes in the diff, customize the diff\n// that has been created, or diff values not controlled by config.\n//\n// The object functions similar to ResourceData, however most notably lacks\n// Set, SetPartial, and Partial, as it should be used to change diff values\n// only.  Most other first-class ResourceData functions exist, namely Get,\n// GetOk, HasChange, and GetChange exist.\n//\n// All functions in ResourceDiff, save for ForceNew, can only be used on\n// computed fields.\ntype ResourceDiff struct {\n\t// The schema for the resource being worked on.\n\tschema map[string]*Schema\n\n\t// The current config for this resource.\n\tconfig *terraform.ResourceConfig\n\n\t// The state for this resource as it exists post-refresh, after the initial\n\t// diff.\n\tstate *terraform.InstanceState\n\n\t// The diff created by Terraform. This diff is used, along with state,\n\t// config, and custom-set diff data, to provide a multi-level reader\n\t// experience similar to ResourceData.\n\tdiff *terraform.InstanceDiff\n\n\t// The internal reader structure that contains the state, config, the default\n\t// diff, and the new diff.\n\tmultiReader *MultiLevelFieldReader\n\n\t// A writer that writes overridden new fields.\n\tnewWriter *newValueWriter\n\n\t// Tracks which keys have been updated by ResourceDiff to ensure that the\n\t// diff does not get re-run on keys that were not touched, or diffs that were\n\t// just removed (re-running on the latter would just roll back the removal).\n\tupdatedKeys map[string]bool\n\n\t// Tracks which keys were flagged as forceNew. These keys are not saved in\n\t// newWriter, but we need to track them so that they can be re-diffed later.\n\tforcedNewKeys map[string]bool\n}\n\n// newResourceDiff creates a new ResourceDiff instance.\nfunc newResourceDiff(schema map[string]*Schema, config *terraform.ResourceConfig, state *terraform.InstanceState, diff *terraform.InstanceDiff) *ResourceDiff {\n\td := &ResourceDiff{\n\t\tconfig: config,\n\t\tstate:  state,\n\t\tdiff:   diff,\n\t\tschema: schema,\n\t}\n\n\td.newWriter = &newValueWriter{\n\t\tMapFieldWriter: &MapFieldWriter{Schema: d.schema},\n\t}\n\treaders := make(map[string]FieldReader)\n\tvar stateAttributes map[string]string\n\tif d.state != nil {\n\t\tstateAttributes = d.state.Attributes\n\t\treaders[\"state\"] = &MapFieldReader{\n\t\t\tSchema: d.schema,\n\t\t\tMap:    BasicMapReader(stateAttributes),\n\t\t}\n\t}\n\tif d.config != nil {\n\t\treaders[\"config\"] = &ConfigFieldReader{\n\t\t\tSchema: d.schema,\n\t\t\tConfig: d.config,\n\t\t}\n\t}\n\tif d.diff != nil {\n\t\treaders[\"diff\"] = &DiffFieldReader{\n\t\t\tSchema: d.schema,\n\t\t\tDiff:   d.diff,\n\t\t\tSource: &MultiLevelFieldReader{\n\t\t\t\tLevels:  []string{\"state\", \"config\"},\n\t\t\t\tReaders: readers,\n\t\t\t},\n\t\t}\n\t}\n\treaders[\"newDiff\"] = &newValueReader{\n\t\tMapFieldReader: &MapFieldReader{\n\t\t\tSchema: d.schema,\n\t\t\tMap:    BasicMapReader(d.newWriter.Map()),\n\t\t},\n\t\tcomputedKeys: d.newWriter.ComputedKeysMap(),\n\t}\n\td.multiReader = &MultiLevelFieldReader{\n\t\tLevels: []string{\n\t\t\t\"state\",\n\t\t\t\"config\",\n\t\t\t\"diff\",\n\t\t\t\"newDiff\",\n\t\t},\n\n\t\tReaders: readers,\n\t}\n\n\td.updatedKeys = make(map[string]bool)\n\td.forcedNewKeys = make(map[string]bool)\n\n\treturn d\n}\n\n// UpdatedKeys returns the keys that were updated by this ResourceDiff run.\n// These are the only keys that a diff should be re-calculated for.\n//\n// This is the combined result of both keys for which diff values were updated\n// for or cleared, and also keys that were flagged to be re-diffed as a result\n// of ForceNew.\nfunc (d *ResourceDiff) UpdatedKeys() []string {\n\tvar s []string\n\tfor k := range d.updatedKeys {\n\t\ts = append(s, k)\n\t}\n\tfor k := range d.forcedNewKeys {\n\t\tfor _, l := range s {\n\t\t\tif k == l {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\ts = append(s, k)\n\t}\n\treturn s\n}\n\n// Clear wipes the diff for a particular key. It is called by ResourceDiff's\n// functionality to remove any possibility of conflicts, but can be called on\n// its own to just remove a specific key from the diff completely.\n//\n// Note that this does not wipe an override. This function is only allowed on\n// computed keys.\nfunc (d *ResourceDiff) Clear(key string) error {\n\tif err := d.checkKey(key, \"Clear\", true); err != nil {\n\t\treturn err\n\t}\n\n\treturn d.clear(key)\n}\n\nfunc (d *ResourceDiff) clear(key string) error {\n\t// Check the schema to make sure that this key exists first.\n\tschemaL := addrToSchema(strings.Split(key, \".\"), d.schema)\n\tif len(schemaL) == 0 {\n\t\treturn fmt.Errorf(\"%s is not a valid key\", key)\n\t}\n\n\tfor k := range d.diff.Attributes {\n\t\tif strings.HasPrefix(k, key) {\n\t\t\tdelete(d.diff.Attributes, k)\n\t\t}\n\t}\n\treturn nil\n}\n\n// GetChangedKeysPrefix helps to implement Resource.CustomizeDiff\n// where we need to act on all nested fields\n// without calling out each one separately\nfunc (d *ResourceDiff) GetChangedKeysPrefix(prefix string) []string {\n\tkeys := make([]string, 0)\n\tfor k := range d.diff.Attributes {\n\t\tif strings.HasPrefix(k, prefix) {\n\t\t\tkeys = append(keys, k)\n\t\t}\n\t}\n\treturn keys\n}\n\n// diffChange helps to implement resourceDiffer and derives its change values\n// from ResourceDiff's own change data, in addition to existing diff, config, and state.\nfunc (d *ResourceDiff) diffChange(key string) (interface{}, interface{}, bool, bool, bool) {\n\told, new, customized := d.getChange(key)\n\n\tif !old.Exists {\n\t\told.Value = nil\n\t}\n\tif !new.Exists || d.removed(key) {\n\t\tnew.Value = nil\n\t}\n\n\treturn old.Value, new.Value, !reflect.DeepEqual(old.Value, new.Value), new.Computed, customized\n}\n\n// SetNew is used to set a new diff value for the mentioned key. The value must\n// be correct for the attribute's schema (mostly relevant for maps, lists, and\n// sets). The original value from the state is used as the old value.\n//\n// This function is only allowed on computed attributes.\nfunc (d *ResourceDiff) SetNew(key string, value interface{}) error {\n\tif err := d.checkKey(key, \"SetNew\", false); err != nil {\n\t\treturn err\n\t}\n\n\treturn d.setDiff(key, value, false)\n}\n\n// SetNewComputed functions like SetNew, except that it blanks out a new value\n// and marks it as computed.\n//\n// This function is only allowed on computed attributes.\nfunc (d *ResourceDiff) SetNewComputed(key string) error {\n\tif err := d.checkKey(key, \"SetNewComputed\", false); err != nil {\n\t\treturn err\n\t}\n\n\treturn d.setDiff(key, nil, true)\n}\n\n// setDiff performs common diff setting behaviour.\nfunc (d *ResourceDiff) setDiff(key string, new interface{}, computed bool) error {\n\tif err := d.clear(key); err != nil {\n\t\treturn err\n\t}\n\n\tif err := d.newWriter.WriteField(strings.Split(key, \".\"), new, computed); err != nil {\n\t\treturn fmt.Errorf(\"Cannot set new diff value for key %s: %s\", key, err)\n\t}\n\n\td.updatedKeys[key] = true\n\n\treturn nil\n}\n\n// ForceNew force-flags ForceNew in the schema for a specific key, and\n// re-calculates its diff, effectively causing this attribute to force a new\n// resource.\n//\n// Keep in mind that forcing a new resource will force a second run of the\n// resource's CustomizeDiff function (with a new ResourceDiff) once the current\n// one has completed. This second run is performed without state. This behavior\n// will be the same as if a new resource is being created and is performed to\n// ensure that the diff looks like the diff for a new resource as much as\n// possible. CustomizeDiff should expect such a scenario and act correctly.\n//\n// This function is a no-op/error if there is no diff.\n//\n// Note that the change to schema is permanent for the lifecycle of this\n// specific ResourceDiff instance.\nfunc (d *ResourceDiff) ForceNew(key string) error {\n\tif !d.HasChange(key) {\n\t\treturn fmt.Errorf(\"ForceNew: No changes for %s\", key)\n\t}\n\n\tkeyParts := strings.Split(key, \".\")\n\tvar schema *Schema\n\tschemaL := addrToSchema(keyParts, d.schema)\n\tif len(schemaL) > 0 {\n\t\tschema = schemaL[len(schemaL)-1]\n\t} else {\n\t\treturn fmt.Errorf(\"ForceNew: %s is not a valid key\", key)\n\t}\n\n\tschema.ForceNew = true\n\n\t// Flag this for a re-diff. Don't save any values to guarantee that existing\n\t// diffs aren't messed with, as this gets messy when dealing with complex\n\t// structures, zero values, etc.\n\td.forcedNewKeys[keyParts[0]] = true\n\n\treturn nil\n}\n\n// Get hands off to ResourceData.Get.\nfunc (d *ResourceDiff) Get(key string) interface{} {\n\tr, _ := d.GetOk(key)\n\treturn r\n}\n\n// GetChange gets the change between the state and diff, checking first to see\n// if an overridden diff exists.\n//\n// This implementation differs from ResourceData's in the way that we first get\n// results from the exact levels for the new diff, then from state and diff as\n// per normal.\nfunc (d *ResourceDiff) GetChange(key string) (interface{}, interface{}) {\n\told, new, _ := d.getChange(key)\n\treturn old.Value, new.Value\n}\n\n// GetOk functions the same way as ResourceData.GetOk, but it also checks the\n// new diff levels to provide data consistent with the current state of the\n// customized diff.\nfunc (d *ResourceDiff) GetOk(key string) (interface{}, bool) {\n\tr := d.get(strings.Split(key, \".\"), \"newDiff\")\n\texists := r.Exists && !r.Computed\n\tif exists {\n\t\t// If it exists, we also want to verify it is not the zero-value.\n\t\tvalue := r.Value\n\t\tzero := r.Schema.Type.Zero()\n\n\t\tif eq, ok := value.(Equal); ok {\n\t\t\texists = !eq.Equal(zero)\n\t\t} else {\n\t\t\texists = !reflect.DeepEqual(value, zero)\n\t\t}\n\t}\n\n\treturn r.Value, exists\n}\n\n// GetOkExists functions the same way as GetOkExists within ResourceData, but\n// it also checks the new diff levels to provide data consistent with the\n// current state of the customized diff.\n//\n// This is nearly the same function as GetOk, yet it does not check\n// for the zero value of the attribute's type. This allows for attributes\n// without a default, to fully check for a literal assignment, regardless\n// of the zero-value for that type.\nfunc (d *ResourceDiff) GetOkExists(key string) (interface{}, bool) {\n\tr := d.get(strings.Split(key, \".\"), \"newDiff\")\n\texists := r.Exists && !r.Computed\n\treturn r.Value, exists\n}\n\n// NewValueKnown returns true if the new value for the given key is available\n// as its final value at diff time. If the return value is false, this means\n// either the value is based of interpolation that was unavailable at diff\n// time, or that the value was explicitly marked as computed by SetNewComputed.\nfunc (d *ResourceDiff) NewValueKnown(key string) bool {\n\tr := d.get(strings.Split(key, \".\"), \"newDiff\")\n\treturn !r.Computed\n}\n\n// HasChange checks to see if there is a change between state and the diff, or\n// in the overridden diff.\nfunc (d *ResourceDiff) HasChange(key string) bool {\n\told, new := d.GetChange(key)\n\n\t// If the type implements the Equal interface, then call that\n\t// instead of just doing a reflect.DeepEqual. An example where this is\n\t// needed is *Set\n\tif eq, ok := old.(Equal); ok {\n\t\treturn !eq.Equal(new)\n\t}\n\n\treturn !reflect.DeepEqual(old, new)\n}\n\n// Id returns the ID of this resource.\n//\n// Note that technically, ID does not change during diffs (it either has\n// already changed in the refresh, or will change on update), hence we do not\n// support updating the ID or fetching it from anything else other than state.\nfunc (d *ResourceDiff) Id() string {\n\tvar result string\n\n\tif d.state != nil {\n\t\tresult = d.state.ID\n\t}\n\treturn result\n}\n\n// getChange gets values from two different levels, designed for use in\n// diffChange, HasChange, and GetChange.\n//\n// This implementation differs from ResourceData's in the way that we first get\n// results from the exact levels for the new diff, then from state and diff as\n// per normal.\nfunc (d *ResourceDiff) getChange(key string) (getResult, getResult, bool) {\n\told := d.get(strings.Split(key, \".\"), \"state\")\n\tvar new getResult\n\tfor p := range d.updatedKeys {\n\t\tif childAddrOf(key, p) {\n\t\t\tnew = d.getExact(strings.Split(key, \".\"), \"newDiff\")\n\t\t\treturn old, new, true\n\t\t}\n\t}\n\tnew = d.get(strings.Split(key, \".\"), \"newDiff\")\n\treturn old, new, false\n}\n\n// removed checks to see if the key is present in the existing, pre-customized\n// diff and if it was marked as NewRemoved.\nfunc (d *ResourceDiff) removed(k string) bool {\n\tdiff, ok := d.diff.Attributes[k]\n\tif !ok {\n\t\treturn false\n\t}\n\treturn diff.NewRemoved\n}\n\n// get performs the appropriate multi-level reader logic for ResourceDiff,\n// starting at source. Refer to newResourceDiff for the level order.\nfunc (d *ResourceDiff) get(addr []string, source string) getResult {\n\tresult, err := d.multiReader.ReadFieldMerge(addr, source)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\treturn d.finalizeResult(addr, result)\n}\n\n// getExact gets an attribute from the exact level referenced by source.\nfunc (d *ResourceDiff) getExact(addr []string, source string) getResult {\n\tresult, err := d.multiReader.ReadFieldExact(addr, source)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\treturn d.finalizeResult(addr, result)\n}\n\n// finalizeResult does some post-processing of the result produced by get and getExact.\nfunc (d *ResourceDiff) finalizeResult(addr []string, result FieldReadResult) getResult {\n\t// If the result doesn't exist, then we set the value to the zero value\n\tvar schema *Schema\n\tif schemaL := addrToSchema(addr, d.schema); len(schemaL) > 0 {\n\t\tschema = schemaL[len(schemaL)-1]\n\t}\n\n\tif result.Value == nil && schema != nil {\n\t\tresult.Value = result.ValueOrZero(schema)\n\t}\n\n\t// Transform the FieldReadResult into a getResult. It might be worth\n\t// merging these two structures one day.\n\treturn getResult{\n\t\tValue:          result.Value,\n\t\tValueProcessed: result.ValueProcessed,\n\t\tComputed:       result.Computed,\n\t\tExists:         result.Exists,\n\t\tSchema:         schema,\n\t}\n}\n\n// childAddrOf does a comparison of two addresses to see if one is the child of\n// the other.\nfunc childAddrOf(child, parent string) bool {\n\tcs := strings.Split(child, \".\")\n\tps := strings.Split(parent, \".\")\n\tif len(ps) > len(cs) {\n\t\treturn false\n\t}\n\treturn reflect.DeepEqual(ps, cs[:len(ps)])\n}\n\n// checkKey checks the key to make sure it exists and is computed.\nfunc (d *ResourceDiff) checkKey(key, caller string, nested bool) error {\n\tvar schema *Schema\n\tif nested {\n\t\tkeyParts := strings.Split(key, \".\")\n\t\tschemaL := addrToSchema(keyParts, d.schema)\n\t\tif len(schemaL) > 0 {\n\t\t\tschema = schemaL[len(schemaL)-1]\n\t\t}\n\t} else {\n\t\ts, ok := d.schema[key]\n\t\tif ok {\n\t\t\tschema = s\n\t\t}\n\t}\n\tif schema == nil {\n\t\treturn fmt.Errorf(\"%s: invalid key: %s\", caller, key)\n\t}\n\tif !schema.Computed {\n\t\treturn fmt.Errorf(\"%s only operates on computed keys - %s is not one\", caller, key)\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/helper/schema/resource_importer.go",
    "content": "package schema\n\n// ResourceImporter defines how a resource is imported in Terraform. This\n// can be set onto a Resource struct to make it Importable. Not all resources\n// have to be importable; if a Resource doesn't have a ResourceImporter then\n// it won't be importable.\n//\n// \"Importing\" in Terraform is the process of taking an already-created\n// resource and bringing it under Terraform management. This can include\n// updating Terraform state, generating Terraform configuration, etc.\ntype ResourceImporter struct {\n\t// The functions below must all be implemented for importing to work.\n\n\t// State is called to convert an ID to one or more InstanceState to\n\t// insert into the Terraform state. If this isn't specified, then\n\t// the ID is passed straight through.\n\tState StateFunc\n}\n\n// StateFunc is the function called to import a resource into the\n// Terraform state. It is given a ResourceData with only ID set. This\n// ID is going to be an arbitrary value given by the user and may not map\n// directly to the ID format that the resource expects, so that should\n// be validated.\n//\n// This should return a slice of ResourceData that turn into the state\n// that was imported. This might be as simple as returning only the argument\n// that was given to the function. In other cases (such as AWS security groups),\n// an import may fan out to multiple resources and this will have to return\n// multiple.\n//\n// To create the ResourceData structures for other resource types (if\n// you have to), instantiate your resource and call the Data function.\ntype StateFunc func(*ResourceData, interface{}) ([]*ResourceData, error)\n\n// InternalValidate should be called to validate the structure of this\n// importer. This should be called in a unit test.\n//\n// Resource.InternalValidate() will automatically call this, so this doesn't\n// need to be called manually. Further, Resource.InternalValidate() is\n// automatically called by Provider.InternalValidate(), so you only need\n// to internal validate the provider.\nfunc (r *ResourceImporter) InternalValidate() error {\n\treturn nil\n}\n\n// ImportStatePassthrough is an implementation of StateFunc that can be\n// used to simply pass the ID directly through. This should be used only\n// in the case that an ID-only refresh is possible.\nfunc ImportStatePassthrough(d *ResourceData, m interface{}) ([]*ResourceData, error) {\n\treturn []*ResourceData{d}, nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/helper/schema/resource_timeout.go",
    "content": "package schema\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"time\"\n\n\t\"github.com/hashicorp/terraform/config\"\n\t\"github.com/hashicorp/terraform/terraform\"\n\t\"github.com/mitchellh/copystructure\"\n)\n\nconst TimeoutKey = \"e2bfb730-ecaa-11e6-8f88-34363bc7c4c0\"\nconst TimeoutsConfigKey = \"timeouts\"\n\nconst (\n\tTimeoutCreate  = \"create\"\n\tTimeoutRead    = \"read\"\n\tTimeoutUpdate  = \"update\"\n\tTimeoutDelete  = \"delete\"\n\tTimeoutDefault = \"default\"\n)\n\nfunc timeoutKeys() []string {\n\treturn []string{\n\t\tTimeoutCreate,\n\t\tTimeoutRead,\n\t\tTimeoutUpdate,\n\t\tTimeoutDelete,\n\t\tTimeoutDefault,\n\t}\n}\n\n// could be time.Duration, int64 or float64\nfunc DefaultTimeout(tx interface{}) *time.Duration {\n\tvar td time.Duration\n\tswitch raw := tx.(type) {\n\tcase time.Duration:\n\t\treturn &raw\n\tcase int64:\n\t\ttd = time.Duration(raw)\n\tcase float64:\n\t\ttd = time.Duration(int64(raw))\n\tdefault:\n\t\tlog.Printf(\"[WARN] Unknown type in DefaultTimeout: %#v\", tx)\n\t}\n\treturn &td\n}\n\ntype ResourceTimeout struct {\n\tCreate, Read, Update, Delete, Default *time.Duration\n}\n\n// ConfigDecode takes a schema and the configuration (available in Diff) and\n// validates, parses the timeouts into `t`\nfunc (t *ResourceTimeout) ConfigDecode(s *Resource, c *terraform.ResourceConfig) error {\n\tif s.Timeouts != nil {\n\t\traw, err := copystructure.Copy(s.Timeouts)\n\t\tif err != nil {\n\t\t\tlog.Printf(\"[DEBUG] Error with deep copy: %s\", err)\n\t\t}\n\t\t*t = *raw.(*ResourceTimeout)\n\t}\n\n\tif raw, ok := c.Config[TimeoutsConfigKey]; ok {\n\t\tvar rawTimeouts []map[string]interface{}\n\t\tswitch raw := raw.(type) {\n\t\tcase map[string]interface{}:\n\t\t\trawTimeouts = append(rawTimeouts, raw)\n\t\tcase []map[string]interface{}:\n\t\t\trawTimeouts = raw\n\t\tcase string:\n\t\t\tif raw == config.UnknownVariableValue {\n\t\t\t\t// Timeout is not defined in the config\n\t\t\t\t// Defaults will be used instead\n\t\t\t\treturn nil\n\t\t\t} else {\n\t\t\t\tlog.Printf(\"[ERROR] Invalid timeout value: %q\", raw)\n\t\t\t\treturn fmt.Errorf(\"Invalid Timeout value found\")\n\t\t\t}\n\t\tdefault:\n\t\t\tlog.Printf(\"[ERROR] Invalid timeout structure: %#v\", raw)\n\t\t\treturn fmt.Errorf(\"Invalid Timeout structure found\")\n\t\t}\n\n\t\tfor _, timeoutValues := range rawTimeouts {\n\t\t\tfor timeKey, timeValue := range timeoutValues {\n\t\t\t\t// validate that we're dealing with the normal CRUD actions\n\t\t\t\tvar found bool\n\t\t\t\tfor _, key := range timeoutKeys() {\n\t\t\t\t\tif timeKey == key {\n\t\t\t\t\t\tfound = true\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif !found {\n\t\t\t\t\treturn fmt.Errorf(\"Unsupported Timeout configuration key found (%s)\", timeKey)\n\t\t\t\t}\n\n\t\t\t\t// Get timeout\n\t\t\t\trt, err := time.ParseDuration(timeValue.(string))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn fmt.Errorf(\"Error parsing %q timeout: %s\", timeKey, err)\n\t\t\t\t}\n\n\t\t\t\tvar timeout *time.Duration\n\t\t\t\tswitch timeKey {\n\t\t\t\tcase TimeoutCreate:\n\t\t\t\t\ttimeout = t.Create\n\t\t\t\tcase TimeoutUpdate:\n\t\t\t\t\ttimeout = t.Update\n\t\t\t\tcase TimeoutRead:\n\t\t\t\t\ttimeout = t.Read\n\t\t\t\tcase TimeoutDelete:\n\t\t\t\t\ttimeout = t.Delete\n\t\t\t\tcase TimeoutDefault:\n\t\t\t\t\ttimeout = t.Default\n\t\t\t\t}\n\n\t\t\t\t// If the resource has not delcared this in the definition, then error\n\t\t\t\t// with an unsupported message\n\t\t\t\tif timeout == nil {\n\t\t\t\t\treturn unsupportedTimeoutKeyError(timeKey)\n\t\t\t\t}\n\n\t\t\t\t*timeout = rt\n\t\t\t}\n\t\t\treturn nil\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc unsupportedTimeoutKeyError(key string) error {\n\treturn fmt.Errorf(\"Timeout Key (%s) is not supported\", key)\n}\n\n// DiffEncode, StateEncode, and MetaDecode are analogous to the Go stdlib JSONEncoder\n// interface: they encode/decode a timeouts struct from an instance diff, which is\n// where the timeout data is stored after a diff to pass into Apply.\n//\n// StateEncode encodes the timeout into the ResourceData's InstanceState for\n// saving to state\n//\nfunc (t *ResourceTimeout) DiffEncode(id *terraform.InstanceDiff) error {\n\treturn t.metaEncode(id)\n}\n\nfunc (t *ResourceTimeout) StateEncode(is *terraform.InstanceState) error {\n\treturn t.metaEncode(is)\n}\n\n// metaEncode encodes the ResourceTimeout into a map[string]interface{} format\n// and stores it in the Meta field of the interface it's given.\n// Assumes the interface is either *terraform.InstanceState or\n// *terraform.InstanceDiff, returns an error otherwise\nfunc (t *ResourceTimeout) metaEncode(ids interface{}) error {\n\tm := make(map[string]interface{})\n\n\tif t.Create != nil {\n\t\tm[TimeoutCreate] = t.Create.Nanoseconds()\n\t}\n\tif t.Read != nil {\n\t\tm[TimeoutRead] = t.Read.Nanoseconds()\n\t}\n\tif t.Update != nil {\n\t\tm[TimeoutUpdate] = t.Update.Nanoseconds()\n\t}\n\tif t.Delete != nil {\n\t\tm[TimeoutDelete] = t.Delete.Nanoseconds()\n\t}\n\tif t.Default != nil {\n\t\tm[TimeoutDefault] = t.Default.Nanoseconds()\n\t\t// for any key above that is nil, if default is specified, we need to\n\t\t// populate it with the default\n\t\tfor _, k := range timeoutKeys() {\n\t\t\tif _, ok := m[k]; !ok {\n\t\t\t\tm[k] = t.Default.Nanoseconds()\n\t\t\t}\n\t\t}\n\t}\n\n\t// only add the Timeout to the Meta if we have values\n\tif len(m) > 0 {\n\t\tswitch instance := ids.(type) {\n\t\tcase *terraform.InstanceDiff:\n\t\t\tif instance.Meta == nil {\n\t\t\t\tinstance.Meta = make(map[string]interface{})\n\t\t\t}\n\t\t\tinstance.Meta[TimeoutKey] = m\n\t\tcase *terraform.InstanceState:\n\t\t\tif instance.Meta == nil {\n\t\t\t\tinstance.Meta = make(map[string]interface{})\n\t\t\t}\n\t\t\tinstance.Meta[TimeoutKey] = m\n\t\tdefault:\n\t\t\treturn fmt.Errorf(\"Error matching type for Diff Encode\")\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (t *ResourceTimeout) StateDecode(id *terraform.InstanceState) error {\n\treturn t.metaDecode(id)\n}\nfunc (t *ResourceTimeout) DiffDecode(is *terraform.InstanceDiff) error {\n\treturn t.metaDecode(is)\n}\n\nfunc (t *ResourceTimeout) metaDecode(ids interface{}) error {\n\tvar rawMeta interface{}\n\tvar ok bool\n\tswitch rawInstance := ids.(type) {\n\tcase *terraform.InstanceDiff:\n\t\trawMeta, ok = rawInstance.Meta[TimeoutKey]\n\t\tif !ok {\n\t\t\treturn nil\n\t\t}\n\tcase *terraform.InstanceState:\n\t\trawMeta, ok = rawInstance.Meta[TimeoutKey]\n\t\tif !ok {\n\t\t\treturn nil\n\t\t}\n\tdefault:\n\t\treturn fmt.Errorf(\"Unknown or unsupported type in metaDecode: %#v\", ids)\n\t}\n\n\ttimes := rawMeta.(map[string]interface{})\n\tif len(times) == 0 {\n\t\treturn nil\n\t}\n\n\tif v, ok := times[TimeoutCreate]; ok {\n\t\tt.Create = DefaultTimeout(v)\n\t}\n\tif v, ok := times[TimeoutRead]; ok {\n\t\tt.Read = DefaultTimeout(v)\n\t}\n\tif v, ok := times[TimeoutUpdate]; ok {\n\t\tt.Update = DefaultTimeout(v)\n\t}\n\tif v, ok := times[TimeoutDelete]; ok {\n\t\tt.Delete = DefaultTimeout(v)\n\t}\n\tif v, ok := times[TimeoutDefault]; ok {\n\t\tt.Default = DefaultTimeout(v)\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/helper/schema/schema.go",
    "content": "// schema is a high-level framework for easily writing new providers\n// for Terraform. Usage of schema is recommended over attempting to write\n// to the low-level plugin interfaces manually.\n//\n// schema breaks down provider creation into simple CRUD operations for\n// resources. The logic of diffing, destroying before creating, updating\n// or creating, etc. is all handled by the framework. The plugin author\n// only needs to implement a configuration schema and the CRUD operations and\n// everything else is meant to just work.\n//\n// A good starting point is to view the Provider structure.\npackage schema\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"os\"\n\t\"reflect\"\n\t\"regexp\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\n\t\"github.com/hashicorp/terraform/config\"\n\t\"github.com/hashicorp/terraform/terraform\"\n\t\"github.com/mitchellh/copystructure\"\n\t\"github.com/mitchellh/mapstructure\"\n)\n\n// Name of ENV variable which (if not empty) prefers panic over error\nconst PanicOnErr = \"TF_SCHEMA_PANIC_ON_ERROR\"\n\n// type used for schema package context keys\ntype contextKey string\n\nvar (\n\tprotoVersionMu sync.Mutex\n\tprotoVersion5  = false\n)\n\nfunc isProto5() bool {\n\tprotoVersionMu.Lock()\n\tdefer protoVersionMu.Unlock()\n\treturn protoVersion5\n\n}\n\n// SetProto5 enables a feature flag for any internal changes required required\n// to work with the new plugin protocol.  This should not be called by\n// provider.\nfunc SetProto5() {\n\tprotoVersionMu.Lock()\n\tdefer protoVersionMu.Unlock()\n\tprotoVersion5 = true\n}\n\n// Schema is used to describe the structure of a value.\n//\n// Read the documentation of the struct elements for important details.\ntype Schema struct {\n\t// Type is the type of the value and must be one of the ValueType values.\n\t//\n\t// This type not only determines what type is expected/valid in configuring\n\t// this value, but also what type is returned when ResourceData.Get is\n\t// called. The types returned by Get are:\n\t//\n\t//   TypeBool - bool\n\t//   TypeInt - int\n\t//   TypeFloat - float64\n\t//   TypeString - string\n\t//   TypeList - []interface{}\n\t//   TypeMap - map[string]interface{}\n\t//   TypeSet - *schema.Set\n\t//\n\tType ValueType\n\n\t// ConfigMode allows for overriding the default behaviors for mapping\n\t// schema entries onto configuration constructs.\n\t//\n\t// By default, the Elem field is used to choose whether a particular\n\t// schema is represented in configuration as an attribute or as a nested\n\t// block; if Elem is a *schema.Resource then it's a block and it's an\n\t// attribute otherwise.\n\t//\n\t// If Elem is *schema.Resource then setting ConfigMode to\n\t// SchemaConfigModeAttr will force it to be represented in configuration\n\t// as an attribute, which means that the Computed flag can be used to\n\t// provide default elements when the argument isn't set at all, while still\n\t// allowing the user to force zero elements by explicitly assigning an\n\t// empty list.\n\t//\n\t// When Computed is set without Optional, the attribute is not settable\n\t// in configuration at all and so SchemaConfigModeAttr is the automatic\n\t// behavior, and SchemaConfigModeBlock is not permitted.\n\tConfigMode SchemaConfigMode\n\n\t// If one of these is set, then this item can come from the configuration.\n\t// Both cannot be set. If Optional is set, the value is optional. If\n\t// Required is set, the value is required.\n\t//\n\t// One of these must be set if the value is not computed. That is:\n\t// value either comes from the config, is computed, or is both.\n\tOptional bool\n\tRequired bool\n\n\t// If this is non-nil, the provided function will be used during diff\n\t// of this field. If this is nil, a default diff for the type of the\n\t// schema will be used.\n\t//\n\t// This allows comparison based on something other than primitive, list\n\t// or map equality - for example SSH public keys may be considered\n\t// equivalent regardless of trailing whitespace.\n\tDiffSuppressFunc SchemaDiffSuppressFunc\n\n\t// If this is non-nil, then this will be a default value that is used\n\t// when this item is not set in the configuration.\n\t//\n\t// DefaultFunc can be specified to compute a dynamic default.\n\t// Only one of Default or DefaultFunc can be set. If DefaultFunc is\n\t// used then its return value should be stable to avoid generating\n\t// confusing/perpetual diffs.\n\t//\n\t// Changing either Default or the return value of DefaultFunc can be\n\t// a breaking change, especially if the attribute in question has\n\t// ForceNew set. If a default needs to change to align with changing\n\t// assumptions in an upstream API then it may be necessary to also use\n\t// the MigrateState function on the resource to change the state to match,\n\t// or have the Read function adjust the state value to align with the\n\t// new default.\n\t//\n\t// If Required is true above, then Default cannot be set. DefaultFunc\n\t// can be set with Required. If the DefaultFunc returns nil, then there\n\t// will be no default and the user will be asked to fill it in.\n\t//\n\t// If either of these is set, then the user won't be asked for input\n\t// for this key if the default is not nil.\n\tDefault     interface{}\n\tDefaultFunc SchemaDefaultFunc\n\n\t// Description is used as the description for docs or asking for user\n\t// input. It should be relatively short (a few sentences max) and should\n\t// be formatted to fit a CLI.\n\tDescription string\n\n\t// InputDefault is the default value to use for when inputs are requested.\n\t// This differs from Default in that if Default is set, no input is\n\t// asked for. If Input is asked, this will be the default value offered.\n\tInputDefault string\n\n\t// The fields below relate to diffs.\n\t//\n\t// If Computed is true, then the result of this value is computed\n\t// (unless specified by config) on creation.\n\t//\n\t// If ForceNew is true, then a change in this resource necessitates\n\t// the creation of a new resource.\n\t//\n\t// StateFunc is a function called to change the value of this before\n\t// storing it in the state (and likewise before comparing for diffs).\n\t// The use for this is for example with large strings, you may want\n\t// to simply store the hash of it.\n\tComputed  bool\n\tForceNew  bool\n\tStateFunc SchemaStateFunc\n\n\t// The following fields are only set for a TypeList, TypeSet, or TypeMap.\n\t//\n\t// Elem represents the element type. For a TypeMap, it must be a *Schema\n\t// with a Type that is one of the primitives: TypeString, TypeBool,\n\t// TypeInt, or TypeFloat. Otherwise it may be either a *Schema or a\n\t// *Resource. If it is *Schema, the element type is just a simple value.\n\t// If it is *Resource, the element type is a complex structure,\n\t// potentially with its own lifecycle.\n\tElem interface{}\n\n\t// The following fields are only set for a TypeList or TypeSet.\n\t//\n\t// MaxItems defines a maximum amount of items that can exist within a\n\t// TypeSet or TypeList. Specific use cases would be if a TypeSet is being\n\t// used to wrap a complex structure, however more than one instance would\n\t// cause instability.\n\t//\n\t// MinItems defines a minimum amount of items that can exist within a\n\t// TypeSet or TypeList. Specific use cases would be if a TypeSet is being\n\t// used to wrap a complex structure, however less than one instance would\n\t// cause instability.\n\t//\n\t// If the field Optional is set to true then MinItems is ignored and thus\n\t// effectively zero.\n\tMaxItems int\n\tMinItems int\n\n\t// PromoteSingle originally allowed for a single element to be assigned\n\t// where a primitive list was expected, but this no longer works from\n\t// Terraform v0.12 onwards (Terraform Core will require a list to be set\n\t// regardless of what this is set to) and so only applies to Terraform v0.11\n\t// and earlier, and so should be used only to retain this functionality\n\t// for those still using v0.11 with a provider that formerly used this.\n\tPromoteSingle bool\n\n\t// The following fields are only valid for a TypeSet type.\n\t//\n\t// Set defines a function to determine the unique ID of an item so that\n\t// a proper set can be built.\n\tSet SchemaSetFunc\n\n\t// ComputedWhen is a set of queries on the configuration. Whenever any\n\t// of these things is changed, it will require a recompute (this requires\n\t// that Computed is set to true).\n\t//\n\t// NOTE: This currently does not work.\n\tComputedWhen []string\n\n\t// ConflictsWith is a set of schema keys that conflict with this schema.\n\t// This will only check that they're set in the _config_. This will not\n\t// raise an error for a malfunctioning resource that sets a conflicting\n\t// key.\n\tConflictsWith []string\n\n\t// When Deprecated is set, this attribute is deprecated.\n\t//\n\t// A deprecated field still works, but will probably stop working in near\n\t// future. This string is the message shown to the user with instructions on\n\t// how to address the deprecation.\n\tDeprecated string\n\n\t// When Removed is set, this attribute has been removed from the schema\n\t//\n\t// Removed attributes can be left in the Schema to generate informative error\n\t// messages for the user when they show up in resource configurations.\n\t// This string is the message shown to the user with instructions on\n\t// what do to about the removed attribute.\n\tRemoved string\n\n\t// ValidateFunc allows individual fields to define arbitrary validation\n\t// logic. It is yielded the provided config value as an interface{} that is\n\t// guaranteed to be of the proper Schema type, and it can yield warnings or\n\t// errors based on inspection of that value.\n\t//\n\t// ValidateFunc is honored only when the schema's Type is set to TypeInt,\n\t// TypeFloat, TypeString, TypeBool, or TypeMap. It is ignored for all other types.\n\tValidateFunc SchemaValidateFunc\n\n\t// Sensitive ensures that the attribute's value does not get displayed in\n\t// logs or regular output. It should be used for passwords or other\n\t// secret fields. Future versions of Terraform may encrypt these\n\t// values.\n\tSensitive bool\n}\n\n// SchemaConfigMode is used to influence how a schema item is mapped into a\n// corresponding configuration construct, using the ConfigMode field of\n// Schema.\ntype SchemaConfigMode int\n\nconst (\n\tSchemaConfigModeAuto SchemaConfigMode = iota\n\tSchemaConfigModeAttr\n\tSchemaConfigModeBlock\n)\n\n// SchemaDiffSuppressFunc is a function which can be used to determine\n// whether a detected diff on a schema element is \"valid\" or not, and\n// suppress it from the plan if necessary.\n//\n// Return true if the diff should be suppressed, false to retain it.\ntype SchemaDiffSuppressFunc func(k, old, new string, d *ResourceData) bool\n\n// SchemaDefaultFunc is a function called to return a default value for\n// a field.\ntype SchemaDefaultFunc func() (interface{}, error)\n\n// EnvDefaultFunc is a helper function that returns the value of the\n// given environment variable, if one exists, or the default value\n// otherwise.\nfunc EnvDefaultFunc(k string, dv interface{}) SchemaDefaultFunc {\n\treturn func() (interface{}, error) {\n\t\tif v := os.Getenv(k); v != \"\" {\n\t\t\treturn v, nil\n\t\t}\n\n\t\treturn dv, nil\n\t}\n}\n\n// MultiEnvDefaultFunc is a helper function that returns the value of the first\n// environment variable in the given list that returns a non-empty value. If\n// none of the environment variables return a value, the default value is\n// returned.\nfunc MultiEnvDefaultFunc(ks []string, dv interface{}) SchemaDefaultFunc {\n\treturn func() (interface{}, error) {\n\t\tfor _, k := range ks {\n\t\t\tif v := os.Getenv(k); v != \"\" {\n\t\t\t\treturn v, nil\n\t\t\t}\n\t\t}\n\t\treturn dv, nil\n\t}\n}\n\n// SchemaSetFunc is a function that must return a unique ID for the given\n// element. This unique ID is used to store the element in a hash.\ntype SchemaSetFunc func(interface{}) int\n\n// SchemaStateFunc is a function used to convert some type to a string\n// to be stored in the state.\ntype SchemaStateFunc func(interface{}) string\n\n// SchemaValidateFunc is a function used to validate a single field in the\n// schema.\ntype SchemaValidateFunc func(interface{}, string) ([]string, []error)\n\nfunc (s *Schema) GoString() string {\n\treturn fmt.Sprintf(\"*%#v\", *s)\n}\n\n// Returns a default value for this schema by either reading Default or\n// evaluating DefaultFunc. If neither of these are defined, returns nil.\nfunc (s *Schema) DefaultValue() (interface{}, error) {\n\tif s.Default != nil {\n\t\treturn s.Default, nil\n\t}\n\n\tif s.DefaultFunc != nil {\n\t\tdefaultValue, err := s.DefaultFunc()\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"error loading default: %s\", err)\n\t\t}\n\t\treturn defaultValue, nil\n\t}\n\n\treturn nil, nil\n}\n\n// Returns a zero value for the schema.\nfunc (s *Schema) ZeroValue() interface{} {\n\t// If it's a set then we'll do a bit of extra work to provide the\n\t// right hashing function in our empty value.\n\tif s.Type == TypeSet {\n\t\tsetFunc := s.Set\n\t\tif setFunc == nil {\n\t\t\t// Default set function uses the schema to hash the whole value\n\t\t\telem := s.Elem\n\t\t\tswitch t := elem.(type) {\n\t\t\tcase *Schema:\n\t\t\t\tsetFunc = HashSchema(t)\n\t\t\tcase *Resource:\n\t\t\t\tsetFunc = HashResource(t)\n\t\t\tdefault:\n\t\t\t\tpanic(\"invalid set element type\")\n\t\t\t}\n\t\t}\n\t\treturn &Set{F: setFunc}\n\t} else {\n\t\treturn s.Type.Zero()\n\t}\n}\n\nfunc (s *Schema) finalizeDiff(d *terraform.ResourceAttrDiff, customized bool) *terraform.ResourceAttrDiff {\n\tif d == nil {\n\t\treturn d\n\t}\n\n\tif s.Type == TypeBool {\n\t\tnormalizeBoolString := func(s string) string {\n\t\t\tswitch s {\n\t\t\tcase \"0\":\n\t\t\t\treturn \"false\"\n\t\t\tcase \"1\":\n\t\t\t\treturn \"true\"\n\t\t\t}\n\t\t\treturn s\n\t\t}\n\t\td.Old = normalizeBoolString(d.Old)\n\t\td.New = normalizeBoolString(d.New)\n\t}\n\n\tif s.Computed && !d.NewRemoved && d.New == \"\" {\n\t\t// Computed attribute without a new value set\n\t\td.NewComputed = true\n\t}\n\n\tif s.ForceNew {\n\t\t// ForceNew, mark that this field is requiring new under the\n\t\t// following conditions, explained below:\n\t\t//\n\t\t//   * Old != New - There is a change in value. This field\n\t\t//       is therefore causing a new resource.\n\t\t//\n\t\t//   * NewComputed - This field is being computed, hence a\n\t\t//       potential change in value, mark as causing a new resource.\n\t\td.RequiresNew = d.Old != d.New || d.NewComputed\n\t}\n\n\tif d.NewRemoved {\n\t\treturn d\n\t}\n\n\tif s.Computed {\n\t\t// FIXME: This is where the customized bool from getChange finally\n\t\t//        comes into play.  It allows the previously incorrect behavior\n\t\t//        of an empty string being used as \"unset\" when the value is\n\t\t//        computed. This should be removed once we can properly\n\t\t//        represent an unset/nil value from the configuration.\n\t\tif !customized {\n\t\t\tif d.Old != \"\" && d.New == \"\" {\n\t\t\t\t// This is a computed value with an old value set already,\n\t\t\t\t// just let it go.\n\t\t\t\treturn nil\n\t\t\t}\n\t\t}\n\n\t\tif d.New == \"\" && !d.NewComputed {\n\t\t\t// Computed attribute without a new value set\n\t\t\td.NewComputed = true\n\t\t}\n\t}\n\n\tif s.Sensitive {\n\t\t// Set the Sensitive flag so output is hidden in the UI\n\t\td.Sensitive = true\n\t}\n\n\treturn d\n}\n\n// InternalMap is used to aid in the transition to the new schema types and\n// protocol. The name is not meant to convey any usefulness, as this is not to\n// be used directly by any providers.\ntype InternalMap = schemaMap\n\n// schemaMap is a wrapper that adds nice functions on top of schemas.\ntype schemaMap map[string]*Schema\n\nfunc (m schemaMap) panicOnError() bool {\n\tif os.Getenv(PanicOnErr) != \"\" {\n\t\treturn true\n\t}\n\treturn false\n}\n\n// Data returns a ResourceData for the given schema, state, and diff.\n//\n// The diff is optional.\nfunc (m schemaMap) Data(\n\ts *terraform.InstanceState,\n\td *terraform.InstanceDiff) (*ResourceData, error) {\n\treturn &ResourceData{\n\t\tschema:       m,\n\t\tstate:        s,\n\t\tdiff:         d,\n\t\tpanicOnError: m.panicOnError(),\n\t}, nil\n}\n\n// DeepCopy returns a copy of this schemaMap. The copy can be safely modified\n// without affecting the original.\nfunc (m *schemaMap) DeepCopy() schemaMap {\n\tcopy, err := copystructure.Config{Lock: true}.Copy(m)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn *copy.(*schemaMap)\n}\n\n// Diff returns the diff for a resource given the schema map,\n// state, and configuration.\nfunc (m schemaMap) Diff(\n\ts *terraform.InstanceState,\n\tc *terraform.ResourceConfig,\n\tcustomizeDiff CustomizeDiffFunc,\n\tmeta interface{},\n\thandleRequiresNew bool) (*terraform.InstanceDiff, error) {\n\tresult := new(terraform.InstanceDiff)\n\tresult.Attributes = make(map[string]*terraform.ResourceAttrDiff)\n\n\t// Make sure to mark if the resource is tainted\n\tif s != nil {\n\t\tresult.DestroyTainted = s.Tainted\n\t}\n\n\td := &ResourceData{\n\t\tschema:       m,\n\t\tstate:        s,\n\t\tconfig:       c,\n\t\tpanicOnError: m.panicOnError(),\n\t}\n\n\tfor k, schema := range m {\n\t\terr := m.diff(k, schema, result, d, false)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\t// Remove any nil diffs just to keep things clean\n\tfor k, v := range result.Attributes {\n\t\tif v == nil {\n\t\t\tdelete(result.Attributes, k)\n\t\t}\n\t}\n\n\t// If this is a non-destroy diff, call any custom diff logic that has been\n\t// defined.\n\tif !result.DestroyTainted && customizeDiff != nil {\n\t\tmc := m.DeepCopy()\n\t\trd := newResourceDiff(mc, c, s, result)\n\t\tif err := customizeDiff(rd, meta); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tfor _, k := range rd.UpdatedKeys() {\n\t\t\terr := m.diff(k, mc[k], result, rd, false)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t}\n\t}\n\n\tif handleRequiresNew {\n\t\t// If the diff requires a new resource, then we recompute the diff\n\t\t// so we have the complete new resource diff, and preserve the\n\t\t// RequiresNew fields where necessary so the user knows exactly what\n\t\t// caused that.\n\t\tif result.RequiresNew() {\n\t\t\t// Create the new diff\n\t\t\tresult2 := new(terraform.InstanceDiff)\n\t\t\tresult2.Attributes = make(map[string]*terraform.ResourceAttrDiff)\n\n\t\t\t// Preserve the DestroyTainted flag\n\t\t\tresult2.DestroyTainted = result.DestroyTainted\n\n\t\t\t// Reset the data to not contain state. We have to call init()\n\t\t\t// again in order to reset the FieldReaders.\n\t\t\td.state = nil\n\t\t\td.init()\n\n\t\t\t// Perform the diff again\n\t\t\tfor k, schema := range m {\n\t\t\t\terr := m.diff(k, schema, result2, d, false)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Re-run customization\n\t\t\tif !result2.DestroyTainted && customizeDiff != nil {\n\t\t\t\tmc := m.DeepCopy()\n\t\t\t\trd := newResourceDiff(mc, c, d.state, result2)\n\t\t\t\tif err := customizeDiff(rd, meta); err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tfor _, k := range rd.UpdatedKeys() {\n\t\t\t\t\terr := m.diff(k, mc[k], result2, rd, false)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn nil, err\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Force all the fields to not force a new since we know what we\n\t\t\t// want to force new.\n\t\t\tfor k, attr := range result2.Attributes {\n\t\t\t\tif attr == nil {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tif attr.RequiresNew {\n\t\t\t\t\tattr.RequiresNew = false\n\t\t\t\t}\n\n\t\t\t\tif s != nil {\n\t\t\t\t\tattr.Old = s.Attributes[k]\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Now copy in all the requires new diffs...\n\t\t\tfor k, attr := range result.Attributes {\n\t\t\t\tif attr == nil {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tnewAttr, ok := result2.Attributes[k]\n\t\t\t\tif !ok {\n\t\t\t\t\tnewAttr = attr\n\t\t\t\t}\n\n\t\t\t\tif attr.RequiresNew {\n\t\t\t\t\tnewAttr.RequiresNew = true\n\t\t\t\t}\n\n\t\t\t\tresult2.Attributes[k] = newAttr\n\t\t\t}\n\n\t\t\t// And set the diff!\n\t\t\tresult = result2\n\t\t}\n\n\t}\n\n\t// Go through and detect all of the ComputedWhens now that we've\n\t// finished the diff.\n\t// TODO\n\n\tif result.Empty() {\n\t\t// If we don't have any diff elements, just return nil\n\t\treturn nil, nil\n\t}\n\n\treturn result, nil\n}\n\n// Input implements the terraform.ResourceProvider method by asking\n// for input for required configuration keys that don't have a value.\nfunc (m schemaMap) Input(\n\tinput terraform.UIInput,\n\tc *terraform.ResourceConfig) (*terraform.ResourceConfig, error) {\n\tkeys := make([]string, 0, len(m))\n\tfor k, _ := range m {\n\t\tkeys = append(keys, k)\n\t}\n\tsort.Strings(keys)\n\n\tfor _, k := range keys {\n\t\tv := m[k]\n\n\t\t// Skip things that don't require config, if that is even valid\n\t\t// for a provider schema.\n\t\t// Required XOR Optional must always be true to validate, so we only\n\t\t// need to check one.\n\t\tif v.Optional {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Deprecated fields should never prompt\n\t\tif v.Deprecated != \"\" {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Skip things that have a value of some sort already\n\t\tif _, ok := c.Raw[k]; ok {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Skip if it has a default value\n\t\tdefaultValue, err := v.DefaultValue()\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"%s: error loading default: %s\", k, err)\n\t\t}\n\t\tif defaultValue != nil {\n\t\t\tcontinue\n\t\t}\n\n\t\tvar value interface{}\n\t\tswitch v.Type {\n\t\tcase TypeBool, TypeInt, TypeFloat, TypeSet, TypeList:\n\t\t\tcontinue\n\t\tcase TypeString:\n\t\t\tvalue, err = m.inputString(input, k, v)\n\t\tdefault:\n\t\t\tpanic(fmt.Sprintf(\"Unknown type for input: %#v\", v.Type))\n\t\t}\n\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\"%s: %s\", k, err)\n\t\t}\n\n\t\tc.Config[k] = value\n\t}\n\n\treturn c, nil\n}\n\n// Validate validates the configuration against this schema mapping.\nfunc (m schemaMap) Validate(c *terraform.ResourceConfig) ([]string, []error) {\n\treturn m.validateObject(\"\", m, c)\n}\n\n// InternalValidate validates the format of this schema. This should be called\n// from a unit test (and not in user-path code) to verify that a schema\n// is properly built.\nfunc (m schemaMap) InternalValidate(topSchemaMap schemaMap) error {\n\treturn m.internalValidate(topSchemaMap, false)\n}\n\nfunc (m schemaMap) internalValidate(topSchemaMap schemaMap, attrsOnly bool) error {\n\tif topSchemaMap == nil {\n\t\ttopSchemaMap = m\n\t}\n\tfor k, v := range m {\n\t\tif v.Type == TypeInvalid {\n\t\t\treturn fmt.Errorf(\"%s: Type must be specified\", k)\n\t\t}\n\n\t\tif v.Optional && v.Required {\n\t\t\treturn fmt.Errorf(\"%s: Optional or Required must be set, not both\", k)\n\t\t}\n\n\t\tif v.Required && v.Computed {\n\t\t\treturn fmt.Errorf(\"%s: Cannot be both Required and Computed\", k)\n\t\t}\n\n\t\tif !v.Required && !v.Optional && !v.Computed {\n\t\t\treturn fmt.Errorf(\"%s: One of optional, required, or computed must be set\", k)\n\t\t}\n\n\t\tcomputedOnly := v.Computed && !v.Optional\n\n\t\tswitch v.ConfigMode {\n\t\tcase SchemaConfigModeBlock:\n\t\t\tif _, ok := v.Elem.(*Resource); !ok {\n\t\t\t\treturn fmt.Errorf(\"%s: ConfigMode of block is allowed only when Elem is *schema.Resource\", k)\n\t\t\t}\n\t\t\tif attrsOnly {\n\t\t\t\treturn fmt.Errorf(\"%s: ConfigMode of block cannot be used in child of schema with ConfigMode of attribute\", k)\n\t\t\t}\n\t\t\tif computedOnly {\n\t\t\t\treturn fmt.Errorf(\"%s: ConfigMode of block cannot be used for computed schema\", k)\n\t\t\t}\n\t\tcase SchemaConfigModeAttr:\n\t\t\t// anything goes\n\t\tcase SchemaConfigModeAuto:\n\t\t\t// Since \"Auto\" for Elem: *Resource would create a nested block,\n\t\t\t// and that's impossible inside an attribute, we require it to be\n\t\t\t// explicitly overridden as mode \"Attr\" for clarity.\n\t\t\tif _, ok := v.Elem.(*Resource); ok {\n\t\t\t\tif attrsOnly {\n\t\t\t\t\treturn fmt.Errorf(\"%s: in *schema.Resource with ConfigMode of attribute, so must also have ConfigMode of attribute\", k)\n\t\t\t\t}\n\t\t\t}\n\t\tdefault:\n\t\t\treturn fmt.Errorf(\"%s: invalid ConfigMode value\", k)\n\t\t}\n\n\t\tif v.Computed && v.Default != nil {\n\t\t\treturn fmt.Errorf(\"%s: Default must be nil if computed\", k)\n\t\t}\n\n\t\tif v.Required && v.Default != nil {\n\t\t\treturn fmt.Errorf(\"%s: Default cannot be set with Required\", k)\n\t\t}\n\n\t\tif len(v.ComputedWhen) > 0 && !v.Computed {\n\t\t\treturn fmt.Errorf(\"%s: ComputedWhen can only be set with Computed\", k)\n\t\t}\n\n\t\tif len(v.ConflictsWith) > 0 && v.Required {\n\t\t\treturn fmt.Errorf(\"%s: ConflictsWith cannot be set with Required\", k)\n\t\t}\n\n\t\tif len(v.ConflictsWith) > 0 {\n\t\t\tfor _, key := range v.ConflictsWith {\n\t\t\t\tparts := strings.Split(key, \".\")\n\t\t\t\tsm := topSchemaMap\n\t\t\t\tvar target *Schema\n\t\t\t\tfor _, part := range parts {\n\t\t\t\t\t// Skip index fields\n\t\t\t\t\tif _, err := strconv.Atoi(part); err == nil {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\n\t\t\t\t\tvar ok bool\n\t\t\t\t\tif target, ok = sm[part]; !ok {\n\t\t\t\t\t\treturn fmt.Errorf(\"%s: ConflictsWith references unknown attribute (%s)\", k, key)\n\t\t\t\t\t}\n\n\t\t\t\t\tif subResource, ok := target.Elem.(*Resource); ok {\n\t\t\t\t\t\tsm = schemaMap(subResource.Schema)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif target == nil {\n\t\t\t\t\treturn fmt.Errorf(\"%s: ConflictsWith cannot find target attribute (%s), sm: %#v\", k, key, sm)\n\t\t\t\t}\n\t\t\t\tif target.Required {\n\t\t\t\t\treturn fmt.Errorf(\"%s: ConflictsWith cannot contain Required attribute (%s)\", k, key)\n\t\t\t\t}\n\n\t\t\t\tif len(target.ComputedWhen) > 0 {\n\t\t\t\t\treturn fmt.Errorf(\"%s: ConflictsWith cannot contain Computed(When) attribute (%s)\", k, key)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif v.Type == TypeList || v.Type == TypeSet {\n\t\t\tif v.Elem == nil {\n\t\t\t\treturn fmt.Errorf(\"%s: Elem must be set for lists\", k)\n\t\t\t}\n\n\t\t\tif v.Default != nil {\n\t\t\t\treturn fmt.Errorf(\"%s: Default is not valid for lists or sets\", k)\n\t\t\t}\n\n\t\t\tif v.Type != TypeSet && v.Set != nil {\n\t\t\t\treturn fmt.Errorf(\"%s: Set can only be set for TypeSet\", k)\n\t\t\t}\n\n\t\t\tswitch t := v.Elem.(type) {\n\t\t\tcase *Resource:\n\t\t\t\tattrsOnly := attrsOnly || v.ConfigMode == SchemaConfigModeAttr\n\n\t\t\t\tif err := schemaMap(t.Schema).internalValidate(topSchemaMap, attrsOnly); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\tcase *Schema:\n\t\t\t\tbad := t.Computed || t.Optional || t.Required\n\t\t\t\tif bad {\n\t\t\t\t\treturn fmt.Errorf(\n\t\t\t\t\t\t\"%s: Elem must have only Type set\", k)\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif v.MaxItems > 0 || v.MinItems > 0 {\n\t\t\t\treturn fmt.Errorf(\"%s: MaxItems and MinItems are only supported on lists or sets\", k)\n\t\t\t}\n\t\t}\n\n\t\t// Computed-only field\n\t\tif v.Computed && !v.Optional {\n\t\t\tif v.ValidateFunc != nil {\n\t\t\t\treturn fmt.Errorf(\"%s: ValidateFunc is for validating user input, \"+\n\t\t\t\t\t\"there's nothing to validate on computed-only field\", k)\n\t\t\t}\n\t\t\tif v.DiffSuppressFunc != nil {\n\t\t\t\treturn fmt.Errorf(\"%s: DiffSuppressFunc is for suppressing differences\"+\n\t\t\t\t\t\" between config and state representation. \"+\n\t\t\t\t\t\"There is no config for computed-only field, nothing to compare.\", k)\n\t\t\t}\n\t\t}\n\n\t\tif v.ValidateFunc != nil {\n\t\t\tswitch v.Type {\n\t\t\tcase TypeList, TypeSet:\n\t\t\t\treturn fmt.Errorf(\"%s: ValidateFunc is not yet supported on lists or sets.\", k)\n\t\t\t}\n\t\t}\n\n\t\tif v.Deprecated == \"\" && v.Removed == \"\" {\n\t\t\tif !isValidFieldName(k) {\n\t\t\t\treturn fmt.Errorf(\"%s: Field name may only contain lowercase alphanumeric characters & underscores.\", k)\n\t\t\t}\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc isValidFieldName(name string) bool {\n\tre := regexp.MustCompile(\"^[a-z0-9_]+$\")\n\treturn re.MatchString(name)\n}\n\n// resourceDiffer is an interface that is used by the private diff functions.\n// This helps facilitate diff logic for both ResourceData and ResoureDiff with\n// minimal divergence in code.\ntype resourceDiffer interface {\n\tdiffChange(string) (interface{}, interface{}, bool, bool, bool)\n\tGet(string) interface{}\n\tGetChange(string) (interface{}, interface{})\n\tGetOk(string) (interface{}, bool)\n\tHasChange(string) bool\n\tId() string\n}\n\nfunc (m schemaMap) diff(\n\tk string,\n\tschema *Schema,\n\tdiff *terraform.InstanceDiff,\n\td resourceDiffer,\n\tall bool) error {\n\n\tunsupressedDiff := new(terraform.InstanceDiff)\n\tunsupressedDiff.Attributes = make(map[string]*terraform.ResourceAttrDiff)\n\n\tvar err error\n\tswitch schema.Type {\n\tcase TypeBool, TypeInt, TypeFloat, TypeString:\n\t\terr = m.diffString(k, schema, unsupressedDiff, d, all)\n\tcase TypeList:\n\t\terr = m.diffList(k, schema, unsupressedDiff, d, all)\n\tcase TypeMap:\n\t\terr = m.diffMap(k, schema, unsupressedDiff, d, all)\n\tcase TypeSet:\n\t\terr = m.diffSet(k, schema, unsupressedDiff, d, all)\n\tdefault:\n\t\terr = fmt.Errorf(\"%s: unknown type %#v\", k, schema.Type)\n\t}\n\n\tfor attrK, attrV := range unsupressedDiff.Attributes {\n\t\tswitch rd := d.(type) {\n\t\tcase *ResourceData:\n\t\t\tif schema.DiffSuppressFunc != nil && attrV != nil &&\n\t\t\t\tschema.DiffSuppressFunc(attrK, attrV.Old, attrV.New, rd) {\n\t\t\t\t// If this attr diff is suppressed, we may still need it in the\n\t\t\t\t// overall diff if it's contained within a set. Rather than\n\t\t\t\t// dropping the diff, make it a NOOP.\n\t\t\t\tif !all {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tattrV = &terraform.ResourceAttrDiff{\n\t\t\t\t\tOld: attrV.Old,\n\t\t\t\t\tNew: attrV.Old,\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdiff.Attributes[attrK] = attrV\n\t}\n\n\treturn err\n}\n\nfunc (m schemaMap) diffList(\n\tk string,\n\tschema *Schema,\n\tdiff *terraform.InstanceDiff,\n\td resourceDiffer,\n\tall bool) error {\n\to, n, _, computedList, customized := d.diffChange(k)\n\tif computedList {\n\t\tn = nil\n\t}\n\tnSet := n != nil\n\n\t// If we have an old value and no new value is set or will be\n\t// computed once all variables can be interpolated and we're\n\t// computed, then nothing has changed.\n\tif o != nil && n == nil && !computedList && schema.Computed {\n\t\treturn nil\n\t}\n\n\tif o == nil {\n\t\to = []interface{}{}\n\t}\n\tif n == nil {\n\t\tn = []interface{}{}\n\t}\n\tif s, ok := o.(*Set); ok {\n\t\to = s.List()\n\t}\n\tif s, ok := n.(*Set); ok {\n\t\tn = s.List()\n\t}\n\tos := o.([]interface{})\n\tvs := n.([]interface{})\n\n\t// If the new value was set, and the two are equal, then we're done.\n\t// We have to do this check here because sets might be NOT\n\t// reflect.DeepEqual so we need to wait until we get the []interface{}\n\tif !all && nSet && reflect.DeepEqual(os, vs) {\n\t\treturn nil\n\t}\n\n\t// Get the counts\n\toldLen := len(os)\n\tnewLen := len(vs)\n\toldStr := strconv.FormatInt(int64(oldLen), 10)\n\n\t// If the whole list is computed, then say that the # is computed\n\tif computedList {\n\t\tdiff.Attributes[k+\".#\"] = &terraform.ResourceAttrDiff{\n\t\t\tOld:         oldStr,\n\t\t\tNewComputed: true,\n\t\t\tRequiresNew: schema.ForceNew,\n\t\t}\n\t\treturn nil\n\t}\n\n\t// If the counts are not the same, then record that diff\n\tchanged := oldLen != newLen\n\tcomputed := oldLen == 0 && newLen == 0 && schema.Computed\n\tif changed || computed || all {\n\t\tcountSchema := &Schema{\n\t\t\tType:     TypeInt,\n\t\t\tComputed: schema.Computed,\n\t\t\tForceNew: schema.ForceNew,\n\t\t}\n\n\t\tnewStr := \"\"\n\t\tif !computed {\n\t\t\tnewStr = strconv.FormatInt(int64(newLen), 10)\n\t\t} else {\n\t\t\toldStr = \"\"\n\t\t}\n\n\t\tdiff.Attributes[k+\".#\"] = countSchema.finalizeDiff(\n\t\t\t&terraform.ResourceAttrDiff{\n\t\t\t\tOld: oldStr,\n\t\t\t\tNew: newStr,\n\t\t\t},\n\t\t\tcustomized,\n\t\t)\n\t}\n\n\t// Figure out the maximum\n\tmaxLen := oldLen\n\tif newLen > maxLen {\n\t\tmaxLen = newLen\n\t}\n\n\tswitch t := schema.Elem.(type) {\n\tcase *Resource:\n\t\t// This is a complex resource\n\t\tfor i := 0; i < maxLen; i++ {\n\t\t\tfor k2, schema := range t.Schema {\n\t\t\t\tsubK := fmt.Sprintf(\"%s.%d.%s\", k, i, k2)\n\t\t\t\terr := m.diff(subK, schema, diff, d, all)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\tcase *Schema:\n\t\t// Copy the schema so that we can set Computed/ForceNew from\n\t\t// the parent schema (the TypeList).\n\t\tt2 := *t\n\t\tt2.ForceNew = schema.ForceNew\n\n\t\t// This is just a primitive element, so go through each and\n\t\t// just diff each.\n\t\tfor i := 0; i < maxLen; i++ {\n\t\t\tsubK := fmt.Sprintf(\"%s.%d\", k, i)\n\t\t\terr := m.diff(subK, &t2, diff, d, all)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\tdefault:\n\t\treturn fmt.Errorf(\"%s: unknown element type (internal)\", k)\n\t}\n\n\treturn nil\n}\n\nfunc (m schemaMap) diffMap(\n\tk string,\n\tschema *Schema,\n\tdiff *terraform.InstanceDiff,\n\td resourceDiffer,\n\tall bool) error {\n\tprefix := k + \".\"\n\n\t// First get all the values from the state\n\tvar stateMap, configMap map[string]string\n\to, n, _, nComputed, customized := d.diffChange(k)\n\tif err := mapstructure.WeakDecode(o, &stateMap); err != nil {\n\t\treturn fmt.Errorf(\"%s: %s\", k, err)\n\t}\n\tif err := mapstructure.WeakDecode(n, &configMap); err != nil {\n\t\treturn fmt.Errorf(\"%s: %s\", k, err)\n\t}\n\n\t// Keep track of whether the state _exists_ at all prior to clearing it\n\tstateExists := o != nil\n\n\t// Delete any count values, since we don't use those\n\tdelete(configMap, \"%\")\n\tdelete(stateMap, \"%\")\n\n\t// Check if the number of elements has changed.\n\toldLen, newLen := len(stateMap), len(configMap)\n\tchanged := oldLen != newLen\n\tif oldLen != 0 && newLen == 0 && schema.Computed {\n\t\tchanged = false\n\t}\n\n\t// It is computed if we have no old value, no new value, the schema\n\t// says it is computed, and it didn't exist in the state before. The\n\t// last point means: if it existed in the state, even empty, then it\n\t// has already been computed.\n\tcomputed := oldLen == 0 && newLen == 0 && schema.Computed && !stateExists\n\n\t// If the count has changed or we're computed, then add a diff for the\n\t// count. \"nComputed\" means that the new value _contains_ a value that\n\t// is computed. We don't do granular diffs for this yet, so we mark the\n\t// whole map as computed.\n\tif changed || computed || nComputed {\n\t\tcountSchema := &Schema{\n\t\t\tType:     TypeInt,\n\t\t\tComputed: schema.Computed || nComputed,\n\t\t\tForceNew: schema.ForceNew,\n\t\t}\n\n\t\toldStr := strconv.FormatInt(int64(oldLen), 10)\n\t\tnewStr := \"\"\n\t\tif !computed && !nComputed {\n\t\t\tnewStr = strconv.FormatInt(int64(newLen), 10)\n\t\t} else {\n\t\t\toldStr = \"\"\n\t\t}\n\n\t\tdiff.Attributes[k+\".%\"] = countSchema.finalizeDiff(\n\t\t\t&terraform.ResourceAttrDiff{\n\t\t\t\tOld: oldStr,\n\t\t\t\tNew: newStr,\n\t\t\t},\n\t\t\tcustomized,\n\t\t)\n\t}\n\n\t// If the new map is nil and we're computed, then ignore it.\n\tif n == nil && schema.Computed {\n\t\treturn nil\n\t}\n\n\t// Now we compare, preferring values from the config map\n\tfor k, v := range configMap {\n\t\told, ok := stateMap[k]\n\t\tdelete(stateMap, k)\n\n\t\tif old == v && ok && !all {\n\t\t\tcontinue\n\t\t}\n\n\t\tdiff.Attributes[prefix+k] = schema.finalizeDiff(\n\t\t\t&terraform.ResourceAttrDiff{\n\t\t\t\tOld: old,\n\t\t\t\tNew: v,\n\t\t\t},\n\t\t\tcustomized,\n\t\t)\n\t}\n\tfor k, v := range stateMap {\n\t\tdiff.Attributes[prefix+k] = schema.finalizeDiff(\n\t\t\t&terraform.ResourceAttrDiff{\n\t\t\t\tOld:        v,\n\t\t\t\tNewRemoved: true,\n\t\t\t},\n\t\t\tcustomized,\n\t\t)\n\t}\n\n\treturn nil\n}\n\nfunc (m schemaMap) diffSet(\n\tk string,\n\tschema *Schema,\n\tdiff *terraform.InstanceDiff,\n\td resourceDiffer,\n\tall bool) error {\n\n\to, n, _, computedSet, customized := d.diffChange(k)\n\tif computedSet {\n\t\tn = nil\n\t}\n\tnSet := n != nil\n\n\t// If we have an old value and no new value is set or will be\n\t// computed once all variables can be interpolated and we're\n\t// computed, then nothing has changed.\n\tif o != nil && n == nil && !computedSet && schema.Computed {\n\t\treturn nil\n\t}\n\n\tif o == nil {\n\t\to = schema.ZeroValue().(*Set)\n\t}\n\tif n == nil {\n\t\tn = schema.ZeroValue().(*Set)\n\t}\n\tos := o.(*Set)\n\tns := n.(*Set)\n\n\t// If the new value was set, compare the listCode's to determine if\n\t// the two are equal. Comparing listCode's instead of the actual values\n\t// is needed because there could be computed values in the set which\n\t// would result in false positives while comparing.\n\tif !all && nSet && reflect.DeepEqual(os.listCode(), ns.listCode()) {\n\t\treturn nil\n\t}\n\n\t// Get the counts\n\toldLen := os.Len()\n\tnewLen := ns.Len()\n\toldStr := strconv.Itoa(oldLen)\n\tnewStr := strconv.Itoa(newLen)\n\n\t// Build a schema for our count\n\tcountSchema := &Schema{\n\t\tType:     TypeInt,\n\t\tComputed: schema.Computed,\n\t\tForceNew: schema.ForceNew,\n\t}\n\n\t// If the set computed then say that the # is computed\n\tif computedSet || schema.Computed && !nSet {\n\t\t// If # already exists, equals 0 and no new set is supplied, there\n\t\t// is nothing to record in the diff\n\t\tcount, ok := d.GetOk(k + \".#\")\n\t\tif ok && count.(int) == 0 && !nSet && !computedSet {\n\t\t\treturn nil\n\t\t}\n\n\t\t// Set the count but make sure that if # does not exist, we don't\n\t\t// use the zeroed value\n\t\tcountStr := strconv.Itoa(count.(int))\n\t\tif !ok {\n\t\t\tcountStr = \"\"\n\t\t}\n\n\t\tdiff.Attributes[k+\".#\"] = countSchema.finalizeDiff(\n\t\t\t&terraform.ResourceAttrDiff{\n\t\t\t\tOld:         countStr,\n\t\t\t\tNewComputed: true,\n\t\t\t},\n\t\t\tcustomized,\n\t\t)\n\t\treturn nil\n\t}\n\n\t// If the counts are not the same, then record that diff\n\tchanged := oldLen != newLen\n\tif changed || all {\n\t\tdiff.Attributes[k+\".#\"] = countSchema.finalizeDiff(\n\t\t\t&terraform.ResourceAttrDiff{\n\t\t\t\tOld: oldStr,\n\t\t\t\tNew: newStr,\n\t\t\t},\n\t\t\tcustomized,\n\t\t)\n\t}\n\n\t// Build the list of codes that will make up our set. This is the\n\t// removed codes as well as all the codes in the new codes.\n\tcodes := make([][]string, 2)\n\tcodes[0] = os.Difference(ns).listCode()\n\tcodes[1] = ns.listCode()\n\tfor _, list := range codes {\n\t\tfor _, code := range list {\n\t\t\tswitch t := schema.Elem.(type) {\n\t\t\tcase *Resource:\n\t\t\t\t// This is a complex resource\n\t\t\t\tfor k2, schema := range t.Schema {\n\t\t\t\t\tsubK := fmt.Sprintf(\"%s.%s.%s\", k, code, k2)\n\t\t\t\t\terr := m.diff(subK, schema, diff, d, true)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tcase *Schema:\n\t\t\t\t// Copy the schema so that we can set Computed/ForceNew from\n\t\t\t\t// the parent schema (the TypeSet).\n\t\t\t\tt2 := *t\n\t\t\t\tt2.ForceNew = schema.ForceNew\n\n\t\t\t\t// This is just a primitive element, so go through each and\n\t\t\t\t// just diff each.\n\t\t\t\tsubK := fmt.Sprintf(\"%s.%s\", k, code)\n\t\t\t\terr := m.diff(subK, &t2, diff, d, true)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\treturn fmt.Errorf(\"%s: unknown element type (internal)\", k)\n\t\t\t}\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (m schemaMap) diffString(\n\tk string,\n\tschema *Schema,\n\tdiff *terraform.InstanceDiff,\n\td resourceDiffer,\n\tall bool) error {\n\tvar originalN interface{}\n\tvar os, ns string\n\to, n, _, computed, customized := d.diffChange(k)\n\tif schema.StateFunc != nil && n != nil {\n\t\toriginalN = n\n\t\tn = schema.StateFunc(n)\n\t}\n\tnraw := n\n\tif nraw == nil && o != nil {\n\t\tnraw = schema.Type.Zero()\n\t}\n\tif err := mapstructure.WeakDecode(o, &os); err != nil {\n\t\treturn fmt.Errorf(\"%s: %s\", k, err)\n\t}\n\tif err := mapstructure.WeakDecode(nraw, &ns); err != nil {\n\t\treturn fmt.Errorf(\"%s: %s\", k, err)\n\t}\n\n\tif os == ns && !all && !computed {\n\t\t// They're the same value. If there old value is not blank or we\n\t\t// have an ID, then return right away since we're already setup.\n\t\tif os != \"\" || d.Id() != \"\" {\n\t\t\treturn nil\n\t\t}\n\n\t\t// Otherwise, only continue if we're computed\n\t\tif !schema.Computed {\n\t\t\treturn nil\n\t\t}\n\t}\n\n\tremoved := false\n\tif o != nil && n == nil && !computed {\n\t\tremoved = true\n\t}\n\tif removed && schema.Computed {\n\t\treturn nil\n\t}\n\n\tdiff.Attributes[k] = schema.finalizeDiff(\n\t\t&terraform.ResourceAttrDiff{\n\t\t\tOld:         os,\n\t\t\tNew:         ns,\n\t\t\tNewExtra:    originalN,\n\t\t\tNewRemoved:  removed,\n\t\t\tNewComputed: computed,\n\t\t},\n\t\tcustomized,\n\t)\n\n\treturn nil\n}\n\nfunc (m schemaMap) inputString(\n\tinput terraform.UIInput,\n\tk string,\n\tschema *Schema) (interface{}, error) {\n\tresult, err := input.Input(context.Background(), &terraform.InputOpts{\n\t\tId:          k,\n\t\tQuery:       k,\n\t\tDescription: schema.Description,\n\t\tDefault:     schema.InputDefault,\n\t})\n\n\treturn result, err\n}\n\nfunc (m schemaMap) validate(\n\tk string,\n\tschema *Schema,\n\tc *terraform.ResourceConfig) ([]string, []error) {\n\traw, ok := c.Get(k)\n\tif !ok && schema.DefaultFunc != nil {\n\t\t// We have a dynamic default. Check if we have a value.\n\t\tvar err error\n\t\traw, err = schema.DefaultFunc()\n\t\tif err != nil {\n\t\t\treturn nil, []error{fmt.Errorf(\n\t\t\t\t\"%q, error loading default: %s\", k, err)}\n\t\t}\n\n\t\t// We're okay as long as we had a value set\n\t\tok = raw != nil\n\t}\n\tif !ok {\n\t\tif schema.Required {\n\t\t\treturn nil, []error{fmt.Errorf(\n\t\t\t\t\"%q: required field is not set\", k)}\n\t\t}\n\n\t\treturn nil, nil\n\t}\n\n\tif !schema.Required && !schema.Optional {\n\t\t// This is a computed-only field\n\t\treturn nil, []error{fmt.Errorf(\n\t\t\t\"%q: this field cannot be set\", k)}\n\t}\n\n\t// If the value is unknown then we can't validate it yet.\n\t// In particular, this avoids spurious type errors where downstream\n\t// validation code sees UnknownVariableValue as being just a string.\n\t// The SDK has to allow the unknown value through initially, so that\n\t// Required fields set via an interpolated value are accepted.\n\tif !isWhollyKnown(raw) {\n\t\treturn nil, nil\n\t}\n\n\terr := m.validateConflictingAttributes(k, schema, c)\n\tif err != nil {\n\t\treturn nil, []error{err}\n\t}\n\n\treturn m.validateType(k, raw, schema, c)\n}\n\n// isWhollyKnown returns false if the argument contains an UnknownVariableValue\nfunc isWhollyKnown(raw interface{}) bool {\n\tswitch raw := raw.(type) {\n\tcase string:\n\t\tif raw == config.UnknownVariableValue {\n\t\t\treturn false\n\t\t}\n\tcase []interface{}:\n\t\tfor _, v := range raw {\n\t\t\tif !isWhollyKnown(v) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\tcase map[string]interface{}:\n\t\tfor _, v := range raw {\n\t\t\tif !isWhollyKnown(v) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t}\n\treturn true\n}\nfunc (m schemaMap) validateConflictingAttributes(\n\tk string,\n\tschema *Schema,\n\tc *terraform.ResourceConfig) error {\n\n\tif len(schema.ConflictsWith) == 0 {\n\t\treturn nil\n\t}\n\n\tfor _, conflictingKey := range schema.ConflictsWith {\n\t\tif raw, ok := c.Get(conflictingKey); ok {\n\t\t\tif raw == config.UnknownVariableValue {\n\t\t\t\t// An unknown value might become unset (null) once known, so\n\t\t\t\t// we must defer validation until it's known.\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn fmt.Errorf(\n\t\t\t\t\"%q: conflicts with %s\", k, conflictingKey)\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (m schemaMap) validateList(\n\tk string,\n\traw interface{},\n\tschema *Schema,\n\tc *terraform.ResourceConfig) ([]string, []error) {\n\t// first check if the list is wholly unknown\n\tif s, ok := raw.(string); ok {\n\t\tif s == config.UnknownVariableValue {\n\t\t\treturn nil, nil\n\t\t}\n\t}\n\n\t// We use reflection to verify the slice because you can't\n\t// case to []interface{} unless the slice is exactly that type.\n\trawV := reflect.ValueOf(raw)\n\n\t// If we support promotion and the raw value isn't a slice, wrap\n\t// it in []interface{} and check again.\n\tif schema.PromoteSingle && rawV.Kind() != reflect.Slice {\n\t\traw = []interface{}{raw}\n\t\trawV = reflect.ValueOf(raw)\n\t}\n\n\tif rawV.Kind() != reflect.Slice {\n\t\treturn nil, []error{fmt.Errorf(\n\t\t\t\"%s: should be a list\", k)}\n\t}\n\n\t// Validate length\n\tif schema.MaxItems > 0 && rawV.Len() > schema.MaxItems {\n\t\treturn nil, []error{fmt.Errorf(\n\t\t\t\"%s: attribute supports %d item maximum, config has %d declared\", k, schema.MaxItems, rawV.Len())}\n\t}\n\n\tif schema.MinItems > 0 && rawV.Len() < schema.MinItems {\n\t\treturn nil, []error{fmt.Errorf(\n\t\t\t\"%s: attribute supports %d item as a minimum, config has %d declared\", k, schema.MinItems, rawV.Len())}\n\t}\n\n\t// Now build the []interface{}\n\traws := make([]interface{}, rawV.Len())\n\tfor i, _ := range raws {\n\t\traws[i] = rawV.Index(i).Interface()\n\t}\n\n\tvar ws []string\n\tvar es []error\n\tfor i, raw := range raws {\n\t\tkey := fmt.Sprintf(\"%s.%d\", k, i)\n\n\t\t// Reify the key value from the ResourceConfig.\n\t\t// If the list was computed we have all raw values, but some of these\n\t\t// may be known in the config, and aren't individually marked as Computed.\n\t\tif r, ok := c.Get(key); ok {\n\t\t\traw = r\n\t\t}\n\n\t\tvar ws2 []string\n\t\tvar es2 []error\n\t\tswitch t := schema.Elem.(type) {\n\t\tcase *Resource:\n\t\t\t// This is a sub-resource\n\t\t\tws2, es2 = m.validateObject(key, t.Schema, c)\n\t\tcase *Schema:\n\t\t\tws2, es2 = m.validateType(key, raw, t, c)\n\t\t}\n\n\t\tif len(ws2) > 0 {\n\t\t\tws = append(ws, ws2...)\n\t\t}\n\t\tif len(es2) > 0 {\n\t\t\tes = append(es, es2...)\n\t\t}\n\t}\n\n\treturn ws, es\n}\n\nfunc (m schemaMap) validateMap(\n\tk string,\n\traw interface{},\n\tschema *Schema,\n\tc *terraform.ResourceConfig) ([]string, []error) {\n\t// first check if the list is wholly unknown\n\tif s, ok := raw.(string); ok {\n\t\tif s == config.UnknownVariableValue {\n\t\t\treturn nil, nil\n\t\t}\n\t}\n\n\t// We use reflection to verify the slice because you can't\n\t// case to []interface{} unless the slice is exactly that type.\n\trawV := reflect.ValueOf(raw)\n\tswitch rawV.Kind() {\n\tcase reflect.String:\n\t\t// If raw and reified are equal, this is a string and should\n\t\t// be rejected.\n\t\treified, reifiedOk := c.Get(k)\n\t\tif reifiedOk && raw == reified && !c.IsComputed(k) {\n\t\t\treturn nil, []error{fmt.Errorf(\"%s: should be a map\", k)}\n\t\t}\n\t\t// Otherwise it's likely raw is an interpolation.\n\t\treturn nil, nil\n\tcase reflect.Map:\n\tcase reflect.Slice:\n\tdefault:\n\t\treturn nil, []error{fmt.Errorf(\"%s: should be a map\", k)}\n\t}\n\n\t// If it is not a slice, validate directly\n\tif rawV.Kind() != reflect.Slice {\n\t\tmapIface := rawV.Interface()\n\t\tif _, errs := validateMapValues(k, mapIface.(map[string]interface{}), schema); len(errs) > 0 {\n\t\t\treturn nil, errs\n\t\t}\n\t\tif schema.ValidateFunc != nil {\n\t\t\treturn schema.ValidateFunc(mapIface, k)\n\t\t}\n\t\treturn nil, nil\n\t}\n\n\t// It is a slice, verify that all the elements are maps\n\traws := make([]interface{}, rawV.Len())\n\tfor i, _ := range raws {\n\t\traws[i] = rawV.Index(i).Interface()\n\t}\n\n\tfor _, raw := range raws {\n\t\tv := reflect.ValueOf(raw)\n\t\tif v.Kind() != reflect.Map {\n\t\t\treturn nil, []error{fmt.Errorf(\n\t\t\t\t\"%s: should be a map\", k)}\n\t\t}\n\t\tmapIface := v.Interface()\n\t\tif _, errs := validateMapValues(k, mapIface.(map[string]interface{}), schema); len(errs) > 0 {\n\t\t\treturn nil, errs\n\t\t}\n\t}\n\n\tif schema.ValidateFunc != nil {\n\t\tvalidatableMap := make(map[string]interface{})\n\t\tfor _, raw := range raws {\n\t\t\tfor k, v := range raw.(map[string]interface{}) {\n\t\t\t\tvalidatableMap[k] = v\n\t\t\t}\n\t\t}\n\n\t\treturn schema.ValidateFunc(validatableMap, k)\n\t}\n\n\treturn nil, nil\n}\n\nfunc validateMapValues(k string, m map[string]interface{}, schema *Schema) ([]string, []error) {\n\tfor key, raw := range m {\n\t\tvalueType, err := getValueType(k, schema)\n\t\tif err != nil {\n\t\t\treturn nil, []error{err}\n\t\t}\n\n\t\tswitch valueType {\n\t\tcase TypeBool:\n\t\t\tvar n bool\n\t\t\tif err := mapstructure.WeakDecode(raw, &n); err != nil {\n\t\t\t\treturn nil, []error{fmt.Errorf(\"%s (%s): %s\", k, key, err)}\n\t\t\t}\n\t\tcase TypeInt:\n\t\t\tvar n int\n\t\t\tif err := mapstructure.WeakDecode(raw, &n); err != nil {\n\t\t\t\treturn nil, []error{fmt.Errorf(\"%s (%s): %s\", k, key, err)}\n\t\t\t}\n\t\tcase TypeFloat:\n\t\t\tvar n float64\n\t\t\tif err := mapstructure.WeakDecode(raw, &n); err != nil {\n\t\t\t\treturn nil, []error{fmt.Errorf(\"%s (%s): %s\", k, key, err)}\n\t\t\t}\n\t\tcase TypeString:\n\t\t\tvar n string\n\t\t\tif err := mapstructure.WeakDecode(raw, &n); err != nil {\n\t\t\t\treturn nil, []error{fmt.Errorf(\"%s (%s): %s\", k, key, err)}\n\t\t\t}\n\t\tdefault:\n\t\t\tpanic(fmt.Sprintf(\"Unknown validation type: %#v\", schema.Type))\n\t\t}\n\t}\n\treturn nil, nil\n}\n\nfunc getValueType(k string, schema *Schema) (ValueType, error) {\n\tif schema.Elem == nil {\n\t\treturn TypeString, nil\n\t}\n\tif vt, ok := schema.Elem.(ValueType); ok {\n\t\treturn vt, nil\n\t}\n\n\t// If a Schema is provided to a Map, we use the Type of that schema\n\t// as the type for each element in the Map.\n\tif s, ok := schema.Elem.(*Schema); ok {\n\t\treturn s.Type, nil\n\t}\n\n\tif _, ok := schema.Elem.(*Resource); ok {\n\t\t// TODO: We don't actually support this (yet)\n\t\t// but silently pass the validation, until we decide\n\t\t// how to handle nested structures in maps\n\t\treturn TypeString, nil\n\t}\n\treturn 0, fmt.Errorf(\"%s: unexpected map value type: %#v\", k, schema.Elem)\n}\n\nfunc (m schemaMap) validateObject(\n\tk string,\n\tschema map[string]*Schema,\n\tc *terraform.ResourceConfig) ([]string, []error) {\n\traw, _ := c.Get(k)\n\tif _, ok := raw.(map[string]interface{}); !ok && !c.IsComputed(k) {\n\t\treturn nil, []error{fmt.Errorf(\n\t\t\t\"%s: expected object, got %s\",\n\t\t\tk, reflect.ValueOf(raw).Kind())}\n\t}\n\n\tvar ws []string\n\tvar es []error\n\tfor subK, s := range schema {\n\t\tkey := subK\n\t\tif k != \"\" {\n\t\t\tkey = fmt.Sprintf(\"%s.%s\", k, subK)\n\t\t}\n\n\t\tws2, es2 := m.validate(key, s, c)\n\t\tif len(ws2) > 0 {\n\t\t\tws = append(ws, ws2...)\n\t\t}\n\t\tif len(es2) > 0 {\n\t\t\tes = append(es, es2...)\n\t\t}\n\t}\n\n\t// Detect any extra/unknown keys and report those as errors.\n\tif m, ok := raw.(map[string]interface{}); ok {\n\t\tfor subk, _ := range m {\n\t\t\tif _, ok := schema[subk]; !ok {\n\t\t\t\tif subk == TimeoutsConfigKey {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tes = append(es, fmt.Errorf(\n\t\t\t\t\t\"%s: invalid or unknown key: %s\", k, subk))\n\t\t\t}\n\t\t}\n\t}\n\n\treturn ws, es\n}\n\nfunc (m schemaMap) validatePrimitive(\n\tk string,\n\traw interface{},\n\tschema *Schema,\n\tc *terraform.ResourceConfig) ([]string, []error) {\n\t// Catch if the user gave a complex type where a primitive was\n\t// expected, so we can return a friendly error message that\n\t// doesn't contain Go type system terminology.\n\tswitch reflect.ValueOf(raw).Type().Kind() {\n\tcase reflect.Slice:\n\t\treturn nil, []error{\n\t\t\tfmt.Errorf(\"%s must be a single value, not a list\", k),\n\t\t}\n\tcase reflect.Map:\n\t\treturn nil, []error{\n\t\t\tfmt.Errorf(\"%s must be a single value, not a map\", k),\n\t\t}\n\tdefault: // ok\n\t}\n\n\tif c.IsComputed(k) {\n\t\t// If the key is being computed, then it is not an error as\n\t\t// long as it's not a slice or map.\n\t\treturn nil, nil\n\t}\n\n\tvar decoded interface{}\n\tswitch schema.Type {\n\tcase TypeBool:\n\t\t// Verify that we can parse this as the correct type\n\t\tvar n bool\n\t\tif err := mapstructure.WeakDecode(raw, &n); err != nil {\n\t\t\treturn nil, []error{fmt.Errorf(\"%s: %s\", k, err)}\n\t\t}\n\t\tdecoded = n\n\tcase TypeInt:\n\t\tswitch {\n\t\tcase isProto5():\n\t\t\t// We need to verify the type precisely, because WeakDecode will\n\t\t\t// decode a float as an integer.\n\n\t\t\t// the config shims only use int for integral number values\n\t\t\tif v, ok := raw.(int); ok {\n\t\t\t\tdecoded = v\n\t\t\t} else {\n\t\t\t\treturn nil, []error{fmt.Errorf(\"%s: must be a whole number, got %v\", k, raw)}\n\t\t\t}\n\t\tdefault:\n\t\t\t// Verify that we can parse this as an int\n\t\t\tvar n int\n\t\t\tif err := mapstructure.WeakDecode(raw, &n); err != nil {\n\t\t\t\treturn nil, []error{fmt.Errorf(\"%s: %s\", k, err)}\n\t\t\t}\n\t\t\tdecoded = n\n\t\t}\n\tcase TypeFloat:\n\t\t// Verify that we can parse this as an int\n\t\tvar n float64\n\t\tif err := mapstructure.WeakDecode(raw, &n); err != nil {\n\t\t\treturn nil, []error{fmt.Errorf(\"%s: %s\", k, err)}\n\t\t}\n\t\tdecoded = n\n\tcase TypeString:\n\t\t// Verify that we can parse this as a string\n\t\tvar n string\n\t\tif err := mapstructure.WeakDecode(raw, &n); err != nil {\n\t\t\treturn nil, []error{fmt.Errorf(\"%s: %s\", k, err)}\n\t\t}\n\t\tdecoded = n\n\tdefault:\n\t\tpanic(fmt.Sprintf(\"Unknown validation type: %#v\", schema.Type))\n\t}\n\n\tif schema.ValidateFunc != nil {\n\t\treturn schema.ValidateFunc(decoded, k)\n\t}\n\n\treturn nil, nil\n}\n\nfunc (m schemaMap) validateType(\n\tk string,\n\traw interface{},\n\tschema *Schema,\n\tc *terraform.ResourceConfig) ([]string, []error) {\n\tvar ws []string\n\tvar es []error\n\tswitch schema.Type {\n\tcase TypeSet, TypeList:\n\t\tws, es = m.validateList(k, raw, schema, c)\n\tcase TypeMap:\n\t\tws, es = m.validateMap(k, raw, schema, c)\n\tdefault:\n\t\tws, es = m.validatePrimitive(k, raw, schema, c)\n\t}\n\n\tif schema.Deprecated != \"\" {\n\t\tws = append(ws, fmt.Sprintf(\n\t\t\t\"%q: [DEPRECATED] %s\", k, schema.Deprecated))\n\t}\n\n\tif schema.Removed != \"\" {\n\t\tes = append(es, fmt.Errorf(\n\t\t\t\"%q: [REMOVED] %s\", k, schema.Removed))\n\t}\n\n\treturn ws, es\n}\n\n// Zero returns the zero value for a type.\nfunc (t ValueType) Zero() interface{} {\n\tswitch t {\n\tcase TypeInvalid:\n\t\treturn nil\n\tcase TypeBool:\n\t\treturn false\n\tcase TypeInt:\n\t\treturn 0\n\tcase TypeFloat:\n\t\treturn 0.0\n\tcase TypeString:\n\t\treturn \"\"\n\tcase TypeList:\n\t\treturn []interface{}{}\n\tcase TypeMap:\n\t\treturn map[string]interface{}{}\n\tcase TypeSet:\n\t\treturn new(Set)\n\tcase typeObject:\n\t\treturn map[string]interface{}{}\n\tdefault:\n\t\tpanic(fmt.Sprintf(\"unknown type %s\", t))\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/helper/schema/serialize.go",
    "content": "package schema\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"sort\"\n\t\"strconv\"\n)\n\nfunc SerializeValueForHash(buf *bytes.Buffer, val interface{}, schema *Schema) {\n\tif val == nil {\n\t\tbuf.WriteRune(';')\n\t\treturn\n\t}\n\n\tswitch schema.Type {\n\tcase TypeBool:\n\t\tif val.(bool) {\n\t\t\tbuf.WriteRune('1')\n\t\t} else {\n\t\t\tbuf.WriteRune('0')\n\t\t}\n\tcase TypeInt:\n\t\tbuf.WriteString(strconv.Itoa(val.(int)))\n\tcase TypeFloat:\n\t\tbuf.WriteString(strconv.FormatFloat(val.(float64), 'g', -1, 64))\n\tcase TypeString:\n\t\tbuf.WriteString(val.(string))\n\tcase TypeList:\n\t\tbuf.WriteRune('(')\n\t\tl := val.([]interface{})\n\t\tfor _, innerVal := range l {\n\t\t\tserializeCollectionMemberForHash(buf, innerVal, schema.Elem)\n\t\t}\n\t\tbuf.WriteRune(')')\n\tcase TypeMap:\n\n\t\tm := val.(map[string]interface{})\n\t\tvar keys []string\n\t\tfor k := range m {\n\t\t\tkeys = append(keys, k)\n\t\t}\n\t\tsort.Strings(keys)\n\t\tbuf.WriteRune('[')\n\t\tfor _, k := range keys {\n\t\t\tinnerVal := m[k]\n\t\t\tif innerVal == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tbuf.WriteString(k)\n\t\t\tbuf.WriteRune(':')\n\n\t\t\tswitch innerVal := innerVal.(type) {\n\t\t\tcase int:\n\t\t\t\tbuf.WriteString(strconv.Itoa(innerVal))\n\t\t\tcase float64:\n\t\t\t\tbuf.WriteString(strconv.FormatFloat(innerVal, 'g', -1, 64))\n\t\t\tcase string:\n\t\t\t\tbuf.WriteString(innerVal)\n\t\t\tdefault:\n\t\t\t\tpanic(fmt.Sprintf(\"unknown value type in TypeMap %T\", innerVal))\n\t\t\t}\n\n\t\t\tbuf.WriteRune(';')\n\t\t}\n\t\tbuf.WriteRune(']')\n\tcase TypeSet:\n\t\tbuf.WriteRune('{')\n\t\ts := val.(*Set)\n\t\tfor _, innerVal := range s.List() {\n\t\t\tserializeCollectionMemberForHash(buf, innerVal, schema.Elem)\n\t\t}\n\t\tbuf.WriteRune('}')\n\tdefault:\n\t\tpanic(\"unknown schema type to serialize\")\n\t}\n\tbuf.WriteRune(';')\n}\n\n// SerializeValueForHash appends a serialization of the given resource config\n// to the given buffer, guaranteeing deterministic results given the same value\n// and schema.\n//\n// Its primary purpose is as input into a hashing function in order\n// to hash complex substructures when used in sets, and so the serialization\n// is not reversible.\nfunc SerializeResourceForHash(buf *bytes.Buffer, val interface{}, resource *Resource) {\n\tif val == nil {\n\t\treturn\n\t}\n\tsm := resource.Schema\n\tm := val.(map[string]interface{})\n\tvar keys []string\n\tfor k := range sm {\n\t\tkeys = append(keys, k)\n\t}\n\tsort.Strings(keys)\n\tfor _, k := range keys {\n\t\tinnerSchema := sm[k]\n\t\t// Skip attributes that are not user-provided. Computed attributes\n\t\t// do not contribute to the hash since their ultimate value cannot\n\t\t// be known at plan/diff time.\n\t\tif !(innerSchema.Required || innerSchema.Optional) {\n\t\t\tcontinue\n\t\t}\n\n\t\tbuf.WriteString(k)\n\t\tbuf.WriteRune(':')\n\t\tinnerVal := m[k]\n\t\tSerializeValueForHash(buf, innerVal, innerSchema)\n\t}\n}\n\nfunc serializeCollectionMemberForHash(buf *bytes.Buffer, val interface{}, elem interface{}) {\n\tswitch tElem := elem.(type) {\n\tcase *Schema:\n\t\tSerializeValueForHash(buf, val, tElem)\n\tcase *Resource:\n\t\tbuf.WriteRune('<')\n\t\tSerializeResourceForHash(buf, val, tElem)\n\t\tbuf.WriteString(\">;\")\n\tdefault:\n\t\tpanic(fmt.Sprintf(\"invalid element type: %T\", tElem))\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/helper/schema/set.go",
    "content": "package schema\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"sort\"\n\t\"strconv\"\n\t\"sync\"\n\n\t\"github.com/hashicorp/terraform/helper/hashcode\"\n)\n\n// HashString hashes strings. If you want a Set of strings, this is the\n// SchemaSetFunc you want.\nfunc HashString(v interface{}) int {\n\treturn hashcode.String(v.(string))\n}\n\n// HashInt hashes integers. If you want a Set of integers, this is the\n// SchemaSetFunc you want.\nfunc HashInt(v interface{}) int {\n\treturn hashcode.String(strconv.Itoa(v.(int)))\n}\n\n// HashResource hashes complex structures that are described using\n// a *Resource. This is the default set implementation used when a set's\n// element type is a full resource.\nfunc HashResource(resource *Resource) SchemaSetFunc {\n\treturn func(v interface{}) int {\n\t\tvar buf bytes.Buffer\n\t\tSerializeResourceForHash(&buf, v, resource)\n\t\treturn hashcode.String(buf.String())\n\t}\n}\n\n// HashSchema hashes values that are described using a *Schema. This is the\n// default set implementation used when a set's element type is a single\n// schema.\nfunc HashSchema(schema *Schema) SchemaSetFunc {\n\treturn func(v interface{}) int {\n\t\tvar buf bytes.Buffer\n\t\tSerializeValueForHash(&buf, v, schema)\n\t\treturn hashcode.String(buf.String())\n\t}\n}\n\n// Set is a set data structure that is returned for elements of type\n// TypeSet.\ntype Set struct {\n\tF SchemaSetFunc\n\n\tm    map[string]interface{}\n\tonce sync.Once\n}\n\n// NewSet is a convenience method for creating a new set with the given\n// items.\nfunc NewSet(f SchemaSetFunc, items []interface{}) *Set {\n\ts := &Set{F: f}\n\tfor _, i := range items {\n\t\ts.Add(i)\n\t}\n\n\treturn s\n}\n\n// CopySet returns a copy of another set.\nfunc CopySet(otherSet *Set) *Set {\n\treturn NewSet(otherSet.F, otherSet.List())\n}\n\n// Add adds an item to the set if it isn't already in the set.\nfunc (s *Set) Add(item interface{}) {\n\ts.add(item, false)\n}\n\n// Remove removes an item if it's already in the set. Idempotent.\nfunc (s *Set) Remove(item interface{}) {\n\ts.remove(item)\n}\n\n// Contains checks if the set has the given item.\nfunc (s *Set) Contains(item interface{}) bool {\n\t_, ok := s.m[s.hash(item)]\n\treturn ok\n}\n\n// Len returns the amount of items in the set.\nfunc (s *Set) Len() int {\n\treturn len(s.m)\n}\n\n// List returns the elements of this set in slice format.\n//\n// The order of the returned elements is deterministic. Given the same\n// set, the order of this will always be the same.\nfunc (s *Set) List() []interface{} {\n\tresult := make([]interface{}, len(s.m))\n\tfor i, k := range s.listCode() {\n\t\tresult[i] = s.m[k]\n\t}\n\n\treturn result\n}\n\n// Difference performs a set difference of the two sets, returning\n// a new third set that has only the elements unique to this set.\nfunc (s *Set) Difference(other *Set) *Set {\n\tresult := &Set{F: s.F}\n\tresult.once.Do(result.init)\n\n\tfor k, v := range s.m {\n\t\tif _, ok := other.m[k]; !ok {\n\t\t\tresult.m[k] = v\n\t\t}\n\t}\n\n\treturn result\n}\n\n// Intersection performs the set intersection of the two sets\n// and returns a new third set.\nfunc (s *Set) Intersection(other *Set) *Set {\n\tresult := &Set{F: s.F}\n\tresult.once.Do(result.init)\n\n\tfor k, v := range s.m {\n\t\tif _, ok := other.m[k]; ok {\n\t\t\tresult.m[k] = v\n\t\t}\n\t}\n\n\treturn result\n}\n\n// Union performs the set union of the two sets and returns a new third\n// set.\nfunc (s *Set) Union(other *Set) *Set {\n\tresult := &Set{F: s.F}\n\tresult.once.Do(result.init)\n\n\tfor k, v := range s.m {\n\t\tresult.m[k] = v\n\t}\n\tfor k, v := range other.m {\n\t\tresult.m[k] = v\n\t}\n\n\treturn result\n}\n\nfunc (s *Set) Equal(raw interface{}) bool {\n\tother, ok := raw.(*Set)\n\tif !ok {\n\t\treturn false\n\t}\n\n\treturn reflect.DeepEqual(s.m, other.m)\n}\n\n// HashEqual simply checks to the keys the top-level map to the keys in the\n// other set's top-level map to see if they are equal. This obviously assumes\n// you have a properly working hash function - use HashResource if in doubt.\nfunc (s *Set) HashEqual(raw interface{}) bool {\n\tother, ok := raw.(*Set)\n\tif !ok {\n\t\treturn false\n\t}\n\n\tks1 := make([]string, 0)\n\tks2 := make([]string, 0)\n\n\tfor k := range s.m {\n\t\tks1 = append(ks1, k)\n\t}\n\tfor k := range other.m {\n\t\tks2 = append(ks2, k)\n\t}\n\n\tsort.Strings(ks1)\n\tsort.Strings(ks2)\n\n\treturn reflect.DeepEqual(ks1, ks2)\n}\n\nfunc (s *Set) GoString() string {\n\treturn fmt.Sprintf(\"*Set(%#v)\", s.m)\n}\n\nfunc (s *Set) init() {\n\ts.m = make(map[string]interface{})\n}\n\nfunc (s *Set) add(item interface{}, computed bool) string {\n\ts.once.Do(s.init)\n\n\tcode := s.hash(item)\n\tif computed {\n\t\tcode = \"~\" + code\n\n\t\tif isProto5() {\n\t\t\ttmpCode := code\n\t\t\tcount := 0\n\t\t\tfor _, exists := s.m[tmpCode]; exists; _, exists = s.m[tmpCode] {\n\t\t\t\tcount++\n\t\t\t\ttmpCode = fmt.Sprintf(\"%s%d\", code, count)\n\t\t\t}\n\t\t\tcode = tmpCode\n\t\t}\n\t}\n\n\tif _, ok := s.m[code]; !ok {\n\t\ts.m[code] = item\n\t}\n\n\treturn code\n}\n\nfunc (s *Set) hash(item interface{}) string {\n\tcode := s.F(item)\n\t// Always return a nonnegative hashcode.\n\tif code < 0 {\n\t\tcode = -code\n\t}\n\treturn strconv.Itoa(code)\n}\n\nfunc (s *Set) remove(item interface{}) string {\n\ts.once.Do(s.init)\n\n\tcode := s.hash(item)\n\tdelete(s.m, code)\n\n\treturn code\n}\n\nfunc (s *Set) index(item interface{}) int {\n\treturn sort.SearchStrings(s.listCode(), s.hash(item))\n}\n\nfunc (s *Set) listCode() []string {\n\t// Sort the hash codes so the order of the list is deterministic\n\tkeys := make([]string, 0, len(s.m))\n\tfor k := range s.m {\n\t\tkeys = append(keys, k)\n\t}\n\tsort.Sort(sort.StringSlice(keys))\n\treturn keys\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/helper/schema/shims.go",
    "content": "package schema\n\nimport (\n\t\"encoding/json\"\n\n\t\"github.com/zclconf/go-cty/cty\"\n\tctyjson \"github.com/zclconf/go-cty/cty/json\"\n\n\t\"github.com/hashicorp/terraform/config\"\n\t\"github.com/hashicorp/terraform/configs/configschema\"\n\t\"github.com/hashicorp/terraform/terraform\"\n)\n\n// DiffFromValues takes the current state and desired state as cty.Values and\n// derives a terraform.InstanceDiff to give to the legacy providers. This is\n// used to take the states provided by the new ApplyResourceChange method and\n// convert them to a state+diff required for the legacy Apply method.\nfunc DiffFromValues(prior, planned cty.Value, res *Resource) (*terraform.InstanceDiff, error) {\n\treturn diffFromValues(prior, planned, res, nil)\n}\n\n// diffFromValues takes an additional CustomizeDiffFunc, so we can generate our\n// test fixtures from the legacy tests. In the new provider protocol the diff\n// only needs to be created for the apply operation, and any customizations\n// have already been done.\nfunc diffFromValues(prior, planned cty.Value, res *Resource, cust CustomizeDiffFunc) (*terraform.InstanceDiff, error) {\n\tinstanceState, err := res.ShimInstanceStateFromValue(prior)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tconfigSchema := res.CoreConfigSchema()\n\n\tcfg := terraform.NewResourceConfigShimmed(planned, configSchema)\n\tremoveConfigUnknowns(cfg.Config)\n\tremoveConfigUnknowns(cfg.Raw)\n\n\tdiff, err := schemaMap(res.Schema).Diff(instanceState, cfg, cust, nil, false)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn diff, err\n}\n\n// During apply the only unknown values are those which are to be computed by\n// the resource itself. These may have been marked as unknown config values, and\n// need to be removed to prevent the UnknownVariableValue from appearing the diff.\nfunc removeConfigUnknowns(cfg map[string]interface{}) {\n\tfor k, v := range cfg {\n\t\tswitch v := v.(type) {\n\t\tcase string:\n\t\t\tif v == config.UnknownVariableValue {\n\t\t\t\tdelete(cfg, k)\n\t\t\t}\n\t\tcase []interface{}:\n\t\t\tfor _, i := range v {\n\t\t\t\tif m, ok := i.(map[string]interface{}); ok {\n\t\t\t\t\tremoveConfigUnknowns(m)\n\t\t\t\t}\n\t\t\t}\n\t\tcase map[string]interface{}:\n\t\t\tremoveConfigUnknowns(v)\n\t\t}\n\t}\n}\n\n// ApplyDiff takes a cty.Value state and applies a terraform.InstanceDiff to\n// get a new cty.Value state. This is used to convert the diff returned from\n// the legacy provider Diff method to the state required for the new\n// PlanResourceChange method.\nfunc ApplyDiff(base cty.Value, d *terraform.InstanceDiff, schema *configschema.Block) (cty.Value, error) {\n\treturn d.ApplyToValue(base, schema)\n}\n\n// StateValueToJSONMap converts a cty.Value to generic JSON map via the cty JSON\n// encoding.\nfunc StateValueToJSONMap(val cty.Value, ty cty.Type) (map[string]interface{}, error) {\n\tjs, err := ctyjson.Marshal(val, ty)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar m map[string]interface{}\n\tif err := json.Unmarshal(js, &m); err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn m, nil\n}\n\n// JSONMapToStateValue takes a generic json map[string]interface{} and converts it\n// to the specific type, ensuring that the values conform to the schema.\nfunc JSONMapToStateValue(m map[string]interface{}, block *configschema.Block) (cty.Value, error) {\n\tvar val cty.Value\n\n\tjs, err := json.Marshal(m)\n\tif err != nil {\n\t\treturn val, err\n\t}\n\n\tval, err = ctyjson.Unmarshal(js, block.ImpliedType())\n\tif err != nil {\n\t\treturn val, err\n\t}\n\n\treturn block.CoerceValue(val)\n}\n\n// StateValueFromInstanceState converts a terraform.InstanceState to a\n// cty.Value as described by the provided cty.Type, and maintains the resource\n// ID as the \"id\" attribute.\nfunc StateValueFromInstanceState(is *terraform.InstanceState, ty cty.Type) (cty.Value, error) {\n\treturn is.AttrsAsObjectValue(ty)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/helper/schema/testing.go",
    "content": "package schema\n\nimport (\n\t\"testing\"\n\n\t\"github.com/hashicorp/terraform/config\"\n\t\"github.com/hashicorp/terraform/terraform\"\n)\n\n// TestResourceDataRaw creates a ResourceData from a raw configuration map.\nfunc TestResourceDataRaw(\n\tt *testing.T, schema map[string]*Schema, raw map[string]interface{}) *ResourceData {\n\tt.Helper()\n\n\tc, err := config.NewRawConfig(raw)\n\tif err != nil {\n\t\tt.Fatalf(\"err: %s\", err)\n\t}\n\n\tsm := schemaMap(schema)\n\tdiff, err := sm.Diff(nil, terraform.NewResourceConfig(c), nil, nil, true)\n\tif err != nil {\n\t\tt.Fatalf(\"err: %s\", err)\n\t}\n\n\tresult, err := sm.Data(nil, diff)\n\tif err != nil {\n\t\tt.Fatalf(\"err: %s\", err)\n\t}\n\n\treturn result\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/helper/schema/valuetype.go",
    "content": "package schema\n\n//go:generate stringer -type=ValueType valuetype.go\n\n// ValueType is an enum of the type that can be represented by a schema.\ntype ValueType int\n\nconst (\n\tTypeInvalid ValueType = iota\n\tTypeBool\n\tTypeInt\n\tTypeFloat\n\tTypeString\n\tTypeList\n\tTypeMap\n\tTypeSet\n\ttypeObject\n)\n\n// NOTE: ValueType has more functions defined on it in schema.go. We can't\n// put them here because we reference other files.\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/helper/schema/valuetype_string.go",
    "content": "// Code generated by \"stringer -type=ValueType valuetype.go\"; DO NOT EDIT.\n\npackage schema\n\nimport \"strconv\"\n\nfunc _() {\n\t// An \"invalid array index\" compiler error signifies that the constant values have changed.\n\t// Re-run the stringer command to generate them again.\n\tvar x [1]struct{}\n\t_ = x[TypeInvalid-0]\n\t_ = x[TypeBool-1]\n\t_ = x[TypeInt-2]\n\t_ = x[TypeFloat-3]\n\t_ = x[TypeString-4]\n\t_ = x[TypeList-5]\n\t_ = x[TypeMap-6]\n\t_ = x[TypeSet-7]\n\t_ = x[typeObject-8]\n}\n\nconst _ValueType_name = \"TypeInvalidTypeBoolTypeIntTypeFloatTypeStringTypeListTypeMapTypeSettypeObject\"\n\nvar _ValueType_index = [...]uint8{0, 11, 19, 26, 35, 45, 53, 60, 67, 77}\n\nfunc (i ValueType) String() string {\n\tif i < 0 || i >= ValueType(len(_ValueType_index)-1) {\n\t\treturn \"ValueType(\" + strconv.FormatInt(int64(i), 10) + \")\"\n\t}\n\treturn _ValueType_name[_ValueType_index[i]:_ValueType_index[i+1]]\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/httpclient/client.go",
    "content": "package httpclient\n\nimport (\n\t\"net/http\"\n\n\tcleanhttp \"github.com/hashicorp/go-cleanhttp\"\n)\n\n// New returns the DefaultPooledClient from the cleanhttp\n// package that will also send a Terraform User-Agent string.\nfunc New() *http.Client {\n\tcli := cleanhttp.DefaultPooledClient()\n\tcli.Transport = &userAgentRoundTripper{\n\t\tuserAgent: UserAgentString(),\n\t\tinner:     cli.Transport,\n\t}\n\treturn cli\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/httpclient/useragent.go",
    "content": "package httpclient\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"net/http\"\n\t\"os\"\n\t\"strings\"\n\n\t\"github.com/hashicorp/terraform/version\"\n)\n\nconst userAgentFormat = \"Terraform/%s\"\nconst uaEnvVar = \"TF_APPEND_USER_AGENT\"\n\nfunc UserAgentString() string {\n\tua := fmt.Sprintf(userAgentFormat, version.Version)\n\n\tif add := os.Getenv(uaEnvVar); add != \"\" {\n\t\tadd = strings.TrimSpace(add)\n\t\tif len(add) > 0 {\n\t\t\tua += \" \" + add\n\t\t\tlog.Printf(\"[DEBUG] Using modified User-Agent: %s\", ua)\n\t\t}\n\t}\n\n\treturn ua\n}\n\ntype userAgentRoundTripper struct {\n\tinner     http.RoundTripper\n\tuserAgent string\n}\n\nfunc (rt *userAgentRoundTripper) RoundTrip(req *http.Request) (*http.Response, error) {\n\tif _, ok := req.Header[\"User-Agent\"]; !ok {\n\t\treq.Header.Set(\"User-Agent\", rt.userAgent)\n\t}\n\treturn rt.inner.RoundTrip(req)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/internal/earlyconfig/config.go",
    "content": "package earlyconfig\n\nimport (\n\t\"fmt\"\n\t\"sort\"\n\n\tversion \"github.com/hashicorp/go-version\"\n\t\"github.com/hashicorp/terraform-config-inspect/tfconfig\"\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/moduledeps\"\n\t\"github.com/hashicorp/terraform/plugin/discovery\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n)\n\n// A Config is a node in the tree of modules within a configuration.\n//\n// The module tree is constructed by following ModuleCall instances recursively\n// through the root module transitively into descendent modules.\ntype Config struct {\n\t// RootModule points to the Config for the root module within the same\n\t// module tree as this module. If this module _is_ the root module then\n\t// this is self-referential.\n\tRoot *Config\n\n\t// ParentModule points to the Config for the module that directly calls\n\t// this module. If this is the root module then this field is nil.\n\tParent *Config\n\n\t// Path is a sequence of module logical names that traverse from the root\n\t// module to this config. Path is empty for the root module.\n\t//\n\t// This should only be used to display paths to the end-user in rare cases\n\t// where we are talking about the static module tree, before module calls\n\t// have been resolved. In most cases, an addrs.ModuleInstance describing\n\t// a node in the dynamic module tree is better, since it will then include\n\t// any keys resulting from evaluating \"count\" and \"for_each\" arguments.\n\tPath addrs.Module\n\n\t// ChildModules points to the Config for each of the direct child modules\n\t// called from this module. The keys in this map match the keys in\n\t// Module.ModuleCalls.\n\tChildren map[string]*Config\n\n\t// Module points to the object describing the configuration for the\n\t// various elements (variables, resources, etc) defined by this module.\n\tModule *tfconfig.Module\n\n\t// CallPos is the source position for the header of the module block that\n\t// requested this module.\n\t//\n\t// This field is meaningless for the root module, where its contents are undefined.\n\tCallPos tfconfig.SourcePos\n\n\t// SourceAddr is the source address that the referenced module was requested\n\t// from, as specified in configuration.\n\t//\n\t// This field is meaningless for the root module, where its contents are undefined.\n\tSourceAddr string\n\n\t// Version is the specific version that was selected for this module,\n\t// based on version constraints given in configuration.\n\t//\n\t// This field is nil if the module was loaded from a non-registry source,\n\t// since versions are not supported for other sources.\n\t//\n\t// This field is meaningless for the root module, where it will always\n\t// be nil.\n\tVersion *version.Version\n}\n\n// ProviderDependencies returns the provider dependencies for the recieving\n// config, including all of its descendent modules.\nfunc (c *Config) ProviderDependencies() (*moduledeps.Module, tfdiags.Diagnostics) {\n\tvar diags tfdiags.Diagnostics\n\n\tvar name string\n\tif len(c.Path) > 0 {\n\t\tname = c.Path[len(c.Path)-1]\n\t}\n\n\tret := &moduledeps.Module{\n\t\tName: name,\n\t}\n\n\tproviders := make(moduledeps.Providers)\n\tfor name, reqs := range c.Module.RequiredProviders {\n\t\tinst := moduledeps.ProviderInstance(name)\n\t\tvar constraints version.Constraints\n\t\tfor _, reqStr := range reqs {\n\t\t\tif reqStr != \"\" {\n\t\t\t\tconstraint, err := version.NewConstraint(reqStr)\n\t\t\t\tif err != nil {\n\t\t\t\t\tdiags = diags.Append(wrapDiagnostic(tfconfig.Diagnostic{\n\t\t\t\t\t\tSeverity: tfconfig.DiagError,\n\t\t\t\t\t\tSummary:  \"Invalid provider version constraint\",\n\t\t\t\t\t\tDetail:   fmt.Sprintf(\"Invalid version constraint %q for provider %s.\", reqStr, name),\n\t\t\t\t\t}))\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tconstraints = append(constraints, constraint...)\n\t\t\t}\n\t\t}\n\t\tproviders[inst] = moduledeps.ProviderDependency{\n\t\t\tConstraints: discovery.NewConstraints(constraints),\n\t\t\tReason:      moduledeps.ProviderDependencyExplicit,\n\t\t}\n\t}\n\tret.Providers = providers\n\n\tchildNames := make([]string, 0, len(c.Children))\n\tfor name := range c.Children {\n\t\tchildNames = append(childNames, name)\n\t}\n\tsort.Strings(childNames)\n\n\tfor _, name := range childNames {\n\t\tchild, childDiags := c.Children[name].ProviderDependencies()\n\t\tret.Children = append(ret.Children, child)\n\t\tdiags = diags.Append(childDiags)\n\t}\n\n\treturn ret, diags\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/internal/earlyconfig/config_build.go",
    "content": "package earlyconfig\n\nimport (\n\t\"fmt\"\n\t\"sort\"\n\t\"strings\"\n\n\tversion \"github.com/hashicorp/go-version\"\n\t\"github.com/hashicorp/terraform-config-inspect/tfconfig\"\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n)\n\n// BuildConfig constructs a Config from a root module by loading all of its\n// descendent modules via the given ModuleWalker.\nfunc BuildConfig(root *tfconfig.Module, walker ModuleWalker) (*Config, tfdiags.Diagnostics) {\n\tvar diags tfdiags.Diagnostics\n\tcfg := &Config{\n\t\tModule: root,\n\t}\n\tcfg.Root = cfg // Root module is self-referential.\n\tcfg.Children, diags = buildChildModules(cfg, walker)\n\treturn cfg, diags\n}\n\nfunc buildChildModules(parent *Config, walker ModuleWalker) (map[string]*Config, tfdiags.Diagnostics) {\n\tvar diags tfdiags.Diagnostics\n\tret := map[string]*Config{}\n\tcalls := parent.Module.ModuleCalls\n\n\t// We'll sort the calls by their local names so that they'll appear in a\n\t// predictable order in any logging that's produced during the walk.\n\tcallNames := make([]string, 0, len(calls))\n\tfor k := range calls {\n\t\tcallNames = append(callNames, k)\n\t}\n\tsort.Strings(callNames)\n\n\tfor _, callName := range callNames {\n\t\tcall := calls[callName]\n\t\tpath := make([]string, len(parent.Path)+1)\n\t\tcopy(path, parent.Path)\n\t\tpath[len(path)-1] = call.Name\n\n\t\tvar vc version.Constraints\n\t\tif strings.TrimSpace(call.Version) != \"\" {\n\t\t\tvar err error\n\t\t\tvc, err = version.NewConstraint(call.Version)\n\t\t\tif err != nil {\n\t\t\t\tdiags = diags.Append(wrapDiagnostic(tfconfig.Diagnostic{\n\t\t\t\t\tSeverity: tfconfig.DiagError,\n\t\t\t\t\tSummary:  \"Invalid version constraint\",\n\t\t\t\t\tDetail:   fmt.Sprintf(\"Module %q (declared at %s line %d) has invalid version constraint %q: %s.\", callName, call.Pos.Filename, call.Pos.Line, call.Version, err),\n\t\t\t\t}))\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\treq := ModuleRequest{\n\t\t\tName:               call.Name,\n\t\t\tPath:               path,\n\t\t\tSourceAddr:         call.Source,\n\t\t\tVersionConstraints: vc,\n\t\t\tParent:             parent,\n\t\t\tCallPos:            call.Pos,\n\t\t}\n\n\t\tmod, ver, modDiags := walker.LoadModule(&req)\n\t\tdiags = append(diags, modDiags...)\n\t\tif mod == nil {\n\t\t\t// nil can be returned if the source address was invalid and so\n\t\t\t// nothing could be loaded whatsoever. LoadModule should've\n\t\t\t// returned at least one error diagnostic in that case.\n\t\t\tcontinue\n\t\t}\n\n\t\tchild := &Config{\n\t\t\tParent:     parent,\n\t\t\tRoot:       parent.Root,\n\t\t\tPath:       path,\n\t\t\tModule:     mod,\n\t\t\tCallPos:    call.Pos,\n\t\t\tSourceAddr: call.Source,\n\t\t\tVersion:    ver,\n\t\t}\n\n\t\tchild.Children, modDiags = buildChildModules(child, walker)\n\t\tdiags = diags.Append(modDiags)\n\n\t\tret[call.Name] = child\n\t}\n\n\treturn ret, diags\n}\n\n// ModuleRequest is used as part of the ModuleWalker interface used with\n// function BuildConfig.\ntype ModuleRequest struct {\n\t// Name is the \"logical name\" of the module call within configuration.\n\t// This is provided in case the name is used as part of a storage key\n\t// for the module, but implementations must otherwise treat it as an\n\t// opaque string. It is guaranteed to have already been validated as an\n\t// HCL identifier and UTF-8 encoded.\n\tName string\n\n\t// Path is a list of logical names that traverse from the root module to\n\t// this module. This can be used, for example, to form a lookup key for\n\t// each distinct module call in a configuration, allowing for multiple\n\t// calls with the same name at different points in the tree.\n\tPath addrs.Module\n\n\t// SourceAddr is the source address string provided by the user in\n\t// configuration.\n\tSourceAddr string\n\n\t// VersionConstraint is the version constraint applied to the module in\n\t// configuration.\n\tVersionConstraints version.Constraints\n\n\t// Parent is the partially-constructed module tree node that the loaded\n\t// module will be added to. Callers may refer to any field of this\n\t// structure except Children, which is still under construction when\n\t// ModuleRequest objects are created and thus has undefined content.\n\t// The main reason this is provided is so that full module paths can\n\t// be constructed for uniqueness.\n\tParent *Config\n\n\t// CallRange is the source position for the header of the \"module\" block\n\t// in configuration that prompted this request.\n\tCallPos tfconfig.SourcePos\n}\n\n// ModuleWalker is an interface used with BuildConfig.\ntype ModuleWalker interface {\n\tLoadModule(req *ModuleRequest) (*tfconfig.Module, *version.Version, tfdiags.Diagnostics)\n}\n\n// ModuleWalkerFunc is an implementation of ModuleWalker that directly wraps\n// a callback function, for more convenient use of that interface.\ntype ModuleWalkerFunc func(req *ModuleRequest) (*tfconfig.Module, *version.Version, tfdiags.Diagnostics)\n\nfunc (f ModuleWalkerFunc) LoadModule(req *ModuleRequest) (*tfconfig.Module, *version.Version, tfdiags.Diagnostics) {\n\treturn f(req)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/internal/earlyconfig/diagnostics.go",
    "content": "package earlyconfig\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/hashicorp/terraform-config-inspect/tfconfig\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n)\n\nfunc wrapDiagnostics(diags tfconfig.Diagnostics) tfdiags.Diagnostics {\n\tret := make(tfdiags.Diagnostics, len(diags))\n\tfor i, diag := range diags {\n\t\tret[i] = wrapDiagnostic(diag)\n\t}\n\treturn ret\n}\n\nfunc wrapDiagnostic(diag tfconfig.Diagnostic) tfdiags.Diagnostic {\n\treturn wrappedDiagnostic{\n\t\td: diag,\n\t}\n}\n\ntype wrappedDiagnostic struct {\n\td tfconfig.Diagnostic\n}\n\nfunc (d wrappedDiagnostic) Severity() tfdiags.Severity {\n\tswitch d.d.Severity {\n\tcase tfconfig.DiagError:\n\t\treturn tfdiags.Error\n\tcase tfconfig.DiagWarning:\n\t\treturn tfdiags.Warning\n\tdefault:\n\t\t// Should never happen since there are no other severities\n\t\treturn 0\n\t}\n}\n\nfunc (d wrappedDiagnostic) Description() tfdiags.Description {\n\t// Since the inspect library doesn't produce precise source locations,\n\t// we include the position information as part of the error message text.\n\t// See the comment inside method \"Source\" for more information.\n\tswitch {\n\tcase d.d.Pos == nil:\n\t\treturn tfdiags.Description{\n\t\t\tSummary: d.d.Summary,\n\t\t\tDetail:  d.d.Detail,\n\t\t}\n\tcase d.d.Detail != \"\":\n\t\treturn tfdiags.Description{\n\t\t\tSummary: d.d.Summary,\n\t\t\tDetail:  fmt.Sprintf(\"On %s line %d: %s\", d.d.Pos.Filename, d.d.Pos.Line, d.d.Detail),\n\t\t}\n\tdefault:\n\t\treturn tfdiags.Description{\n\t\t\tSummary: fmt.Sprintf(\"%s (on %s line %d)\", d.d.Summary, d.d.Pos.Filename, d.d.Pos.Line),\n\t\t}\n\t}\n}\n\nfunc (d wrappedDiagnostic) Source() tfdiags.Source {\n\t// Since the inspect library is constrained by the lowest common denominator\n\t// between legacy HCL and modern HCL, it only returns ranges at whole-line\n\t// granularity, and that isn't sufficient to populate a tfdiags.Source\n\t// and so we'll just omit ranges altogether and include the line number in\n\t// the Description text.\n\t//\n\t// Callers that want to return nicer errors should consider reacting to\n\t// earlyconfig errors by attempting a follow-up parse with the normal\n\t// config loader, which can produce more precise source location\n\t// information.\n\treturn tfdiags.Source{}\n}\n\nfunc (d wrappedDiagnostic) FromExpr() *tfdiags.FromExpr {\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/internal/earlyconfig/doc.go",
    "content": "// Package earlyconfig is a specialized alternative to the top-level \"configs\"\n// package that does only shallow processing of configuration and is therefore\n// able to be much more liberal than the full config loader in what it accepts.\n//\n// In particular, it can accept both current and legacy HCL syntax, and it\n// ignores top-level blocks that it doesn't recognize. These two characteristics\n// make this package ideal for dependency-checking use-cases so that we are\n// more likely to be able to return an error message about an explicit\n// incompatibility than to return a less-actionable message about a construct\n// not being supported.\n//\n// However, its liberal approach also means it should be used sparingly. It\n// exists primarily for \"terraform init\", so that it is able to detect\n// incompatibilities more robustly when installing dependencies. For most\n// other use-cases, use the \"configs\" and \"configs/configload\" packages.\n//\n// Package earlyconfig is a wrapper around the terraform-config-inspect\n// codebase, adding to it just some helper functionality for Terraform's own\n// use-cases.\npackage earlyconfig\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/internal/earlyconfig/module.go",
    "content": "package earlyconfig\n\nimport (\n\t\"github.com/hashicorp/terraform-config-inspect/tfconfig\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n)\n\n// LoadModule loads some top-level metadata for the module in the given\n// directory.\nfunc LoadModule(dir string) (*tfconfig.Module, tfdiags.Diagnostics) {\n\tmod, diags := tfconfig.LoadModule(dir)\n\treturn mod, wrapDiagnostics(diags)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/internal/initwd/copy_dir.go",
    "content": "package initwd\n\nimport (\n\t\"io\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n)\n\n// copyDir copies the src directory contents into dst. Both directories\n// should already exist.\nfunc copyDir(dst, src string) error {\n\tsrc, err := filepath.EvalSymlinks(src)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\twalkFn := func(path string, info os.FileInfo, err error) error {\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tif path == src {\n\t\t\treturn nil\n\t\t}\n\n\t\tif strings.HasPrefix(filepath.Base(path), \".\") {\n\t\t\t// Skip any dot files\n\t\t\tif info.IsDir() {\n\t\t\t\treturn filepath.SkipDir\n\t\t\t} else {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t}\n\n\t\t// The \"path\" has the src prefixed to it. We need to join our\n\t\t// destination with the path without the src on it.\n\t\tdstPath := filepath.Join(dst, path[len(src):])\n\n\t\t// we don't want to try and copy the same file over itself.\n\t\tif eq, err := sameFile(path, dstPath); eq {\n\t\t\treturn nil\n\t\t} else if err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// If we have a directory, make that subdirectory, then continue\n\t\t// the walk.\n\t\tif info.IsDir() {\n\t\t\tif path == filepath.Join(src, dst) {\n\t\t\t\t// dst is in src; don't walk it.\n\t\t\t\treturn nil\n\t\t\t}\n\n\t\t\tif err := os.MkdirAll(dstPath, 0755); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn nil\n\t\t}\n\n\t\t// If the current path is a symlink, recreate the symlink relative to\n\t\t// the dst directory\n\t\tif info.Mode()&os.ModeSymlink == os.ModeSymlink {\n\t\t\ttarget, err := os.Readlink(path)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\treturn os.Symlink(target, dstPath)\n\t\t}\n\n\t\t// If we have a file, copy the contents.\n\t\tsrcF, err := os.Open(path)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefer srcF.Close()\n\n\t\tdstF, err := os.Create(dstPath)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefer dstF.Close()\n\n\t\tif _, err := io.Copy(dstF, srcF); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// Chmod it\n\t\treturn os.Chmod(dstPath, info.Mode())\n\t}\n\n\treturn filepath.Walk(src, walkFn)\n}\n\n// sameFile tried to determine if to paths are the same file.\n// If the paths don't match, we lookup the inode on supported systems.\nfunc sameFile(a, b string) (bool, error) {\n\tif a == b {\n\t\treturn true, nil\n\t}\n\n\taIno, err := inode(a)\n\tif err != nil {\n\t\tif os.IsNotExist(err) {\n\t\t\treturn false, nil\n\t\t}\n\t\treturn false, err\n\t}\n\n\tbIno, err := inode(b)\n\tif err != nil {\n\t\tif os.IsNotExist(err) {\n\t\t\treturn false, nil\n\t\t}\n\t\treturn false, err\n\t}\n\n\tif aIno > 0 && aIno == bIno {\n\t\treturn true, nil\n\t}\n\n\treturn false, nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/internal/initwd/doc.go",
    "content": "// Package initwd contains various helper functions used by the \"terraform init\"\n// command to initialize a working directory.\n//\n// These functions may also be used from testing code to simulate the behaviors\n// of \"terraform init\" against test fixtures, but should not be used elsewhere\n// in the main code.\npackage initwd\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/internal/initwd/from_module.go",
    "content": "package initwd\n\nimport (\n\t\"fmt\"\n\t\"github.com/hashicorp/terraform/internal/earlyconfig\"\n\t\"io/ioutil\"\n\t\"log\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"sort\"\n\t\"strings\"\n\n\tversion \"github.com/hashicorp/go-version\"\n\t\"github.com/hashicorp/terraform-config-inspect/tfconfig\"\n\t\"github.com/hashicorp/terraform/internal/modsdir\"\n\t\"github.com/hashicorp/terraform/registry\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n)\n\nconst initFromModuleRootCallName = \"root\"\nconst initFromModuleRootKeyPrefix = initFromModuleRootCallName + \".\"\n\n// DirFromModule populates the given directory (which must exist and be\n// empty) with the contents of the module at the given source address.\n//\n// It does this by installing the given module and all of its descendent\n// modules in a temporary root directory and then copying the installed\n// files into suitable locations. As a consequence, any diagnostics it\n// generates will reveal the location of this temporary directory to the\n// user.\n//\n// This rather roundabout installation approach is taken to ensure that\n// installation proceeds in a manner identical to normal module installation.\n//\n// If the given source address specifies a sub-directory of the given\n// package then only the sub-directory and its descendents will be copied\n// into the given root directory, which will cause any relative module\n// references using ../ from that module to be unresolvable. Error diagnostics\n// are produced in that case, to prompt the user to rewrite the source strings\n// to be absolute references to the original remote module.\nfunc DirFromModule(rootDir, modulesDir, sourceAddr string, reg *registry.Client, hooks ModuleInstallHooks) tfdiags.Diagnostics {\n\tvar diags tfdiags.Diagnostics\n\n\t// The way this function works is pretty ugly, but we accept it because\n\t// -from-module is a less important case than normal module installation\n\t// and so it's better to keep this ugly complexity out here rather than\n\t// adding even more complexity to the normal module installer.\n\n\t// The target directory must exist but be empty.\n\t{\n\t\tentries, err := ioutil.ReadDir(rootDir)\n\t\tif err != nil {\n\t\t\tif os.IsNotExist(err) {\n\t\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\t\ttfdiags.Error,\n\t\t\t\t\t\"Target directory does not exist\",\n\t\t\t\t\tfmt.Sprintf(\"Cannot initialize non-existent directory %s.\", rootDir),\n\t\t\t\t))\n\t\t\t} else {\n\t\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\t\ttfdiags.Error,\n\t\t\t\t\t\"Failed to read target directory\",\n\t\t\t\t\tfmt.Sprintf(\"Error reading %s to ensure it is empty: %s.\", rootDir, err),\n\t\t\t\t))\n\t\t\t}\n\t\t\treturn diags\n\t\t}\n\t\thaveEntries := false\n\t\tfor _, entry := range entries {\n\t\t\tif entry.Name() == \".\" || entry.Name() == \"..\" || entry.Name() == \".terraform\" {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\thaveEntries = true\n\t\t}\n\t\tif haveEntries {\n\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\ttfdiags.Error,\n\t\t\t\t\"Can't populate non-empty directory\",\n\t\t\t\tfmt.Sprintf(\"The target directory %s is not empty, so it cannot be initialized with the -from-module=... option.\", rootDir),\n\t\t\t))\n\t\t\treturn diags\n\t\t}\n\t}\n\n\tinstDir := filepath.Join(rootDir, \".terraform/init-from-module\")\n\tinst := NewModuleInstaller(instDir, reg)\n\tlog.Printf(\"[DEBUG] installing modules in %s to initialize working directory from %q\", instDir, sourceAddr)\n\tos.RemoveAll(instDir) // if this fails then we'll fail on MkdirAll below too\n\terr := os.MkdirAll(instDir, os.ModePerm)\n\tif err != nil {\n\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\ttfdiags.Error,\n\t\t\t\"Failed to create temporary directory\",\n\t\t\tfmt.Sprintf(\"Failed to create temporary directory %s: %s.\", instDir, err),\n\t\t))\n\t\treturn diags\n\t}\n\n\tinstManifest := make(modsdir.Manifest)\n\tretManifest := make(modsdir.Manifest)\n\n\tfakeFilename := fmt.Sprintf(\"-from-module=%q\", sourceAddr)\n\tfakePos := tfconfig.SourcePos{\n\t\tFilename: fakeFilename,\n\t\tLine:     1,\n\t}\n\n\t// -from-module allows relative paths but it's different than a normal\n\t// module address where it'd be resolved relative to the module call\n\t// (which is synthetic, here.) To address this, we'll just patch up any\n\t// relative paths to be absolute paths before we run, ensuring we'll\n\t// get the right result. This also, as an important side-effect, ensures\n\t// that the result will be \"downloaded\" with go-getter (copied from the\n\t// source location), rather than just recorded as a relative path.\n\t{\n\t\tmaybePath := filepath.ToSlash(sourceAddr)\n\t\tif maybePath == \".\" || strings.HasPrefix(maybePath, \"./\") || strings.HasPrefix(maybePath, \"../\") {\n\t\t\tif wd, err := os.Getwd(); err == nil {\n\t\t\t\tsourceAddr = filepath.Join(wd, sourceAddr)\n\t\t\t\tlog.Printf(\"[TRACE] -from-module relative path rewritten to absolute path %s\", sourceAddr)\n\t\t\t}\n\t\t}\n\t}\n\n\t// Now we need to create an artificial root module that will seed our\n\t// installation process.\n\tfakeRootModule := &tfconfig.Module{\n\t\tModuleCalls: map[string]*tfconfig.ModuleCall{\n\t\t\tinitFromModuleRootCallName: {\n\t\t\t\tName:   initFromModuleRootCallName,\n\t\t\t\tSource: sourceAddr,\n\t\t\t\tPos:    fakePos,\n\t\t\t},\n\t\t},\n\t}\n\n\t// wrapHooks filters hook notifications to only include Download calls\n\t// and to trim off the initFromModuleRootCallName prefix. We'll produce\n\t// our own Install notifications directly below.\n\twrapHooks := installHooksInitDir{\n\t\tWrapped: hooks,\n\t}\n\tgetter := reusingGetter{}\n\t_, instDiags := inst.installDescendentModules(fakeRootModule, rootDir, instManifest, true, wrapHooks, getter)\n\tdiags = append(diags, instDiags...)\n\tif instDiags.HasErrors() {\n\t\treturn diags\n\t}\n\n\t// If all of that succeeded then we'll now migrate what was installed\n\t// into the final directory structure.\n\terr = os.MkdirAll(modulesDir, os.ModePerm)\n\tif err != nil {\n\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\ttfdiags.Error,\n\t\t\t\"Failed to create local modules directory\",\n\t\t\tfmt.Sprintf(\"Failed to create modules directory %s: %s.\", modulesDir, err),\n\t\t))\n\t\treturn diags\n\t}\n\n\trecordKeys := make([]string, 0, len(instManifest))\n\tfor k := range instManifest {\n\t\trecordKeys = append(recordKeys, k)\n\t}\n\tsort.Strings(recordKeys)\n\n\tfor _, recordKey := range recordKeys {\n\t\trecord := instManifest[recordKey]\n\n\t\tif record.Key == initFromModuleRootCallName {\n\t\t\t// We've found the module the user requested, which we must\n\t\t\t// now copy into rootDir so it can be used directly.\n\t\t\tlog.Printf(\"[TRACE] copying new root module from %s to %s\", record.Dir, rootDir)\n\t\t\terr := copyDir(rootDir, record.Dir)\n\t\t\tif err != nil {\n\t\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\t\ttfdiags.Error,\n\t\t\t\t\t\"Failed to copy root module\",\n\t\t\t\t\tfmt.Sprintf(\"Error copying root module %q from %s to %s: %s.\", sourceAddr, record.Dir, rootDir, err),\n\t\t\t\t))\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// We'll try to load the newly-copied module here just so we can\n\t\t\t// sniff for any module calls that ../ out of the root directory\n\t\t\t// and must thus be rewritten to be absolute addresses again.\n\t\t\t// For now we can't do this rewriting automatically, but we'll\n\t\t\t// generate an error to help the user do it manually.\n\t\t\tmod, _ := earlyconfig.LoadModule(rootDir) // ignore diagnostics since we're just doing value-add here anyway\n\t\t\tif mod != nil {\n\t\t\t\tfor _, mc := range mod.ModuleCalls {\n\t\t\t\t\tif pathTraversesUp(mc.Source) {\n\t\t\t\t\t\tpackageAddr, givenSubdir := splitAddrSubdir(sourceAddr)\n\t\t\t\t\t\tnewSubdir := filepath.Join(givenSubdir, mc.Source)\n\t\t\t\t\t\tif pathTraversesUp(newSubdir) {\n\t\t\t\t\t\t\t// This should never happen in any reasonable\n\t\t\t\t\t\t\t// configuration since this suggests a path that\n\t\t\t\t\t\t\t// traverses up out of the package root. We'll just\n\t\t\t\t\t\t\t// ignore this, since we'll fail soon enough anyway\n\t\t\t\t\t\t\t// trying to resolve this path when this module is\n\t\t\t\t\t\t\t// loaded.\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar newAddr = packageAddr\n\t\t\t\t\t\tif newSubdir != \"\" {\n\t\t\t\t\t\t\tnewAddr = fmt.Sprintf(\"%s//%s\", newAddr, filepath.ToSlash(newSubdir))\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\t\t\t\ttfdiags.Error,\n\t\t\t\t\t\t\t\"Root module references parent directory\",\n\t\t\t\t\t\t\tfmt.Sprintf(\"The requested module %q refers to a module via its parent directory. To use this as a new root module this source string must be rewritten as a remote source address, such as %q.\", sourceAddr, newAddr),\n\t\t\t\t\t\t))\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tretManifest[\"\"] = modsdir.Record{\n\t\t\t\tKey: \"\",\n\t\t\t\tDir: rootDir,\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\tif !strings.HasPrefix(record.Key, initFromModuleRootKeyPrefix) {\n\t\t\t// Ignore the *real* root module, whose key is empty, since\n\t\t\t// we're only interested in the module named \"root\" and its\n\t\t\t// descendents.\n\t\t\tcontinue\n\t\t}\n\n\t\tnewKey := record.Key[len(initFromModuleRootKeyPrefix):]\n\t\tinstPath := filepath.Join(modulesDir, newKey)\n\t\ttempPath := filepath.Join(instDir, record.Key)\n\n\t\t// tempPath won't be present for a module that was installed from\n\t\t// a relative path, so in that case we just record the installation\n\t\t// directory and assume it was already copied into place as part\n\t\t// of its parent.\n\t\tif _, err := os.Stat(tempPath); err != nil {\n\t\t\tif !os.IsNotExist(err) {\n\t\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\t\ttfdiags.Error,\n\t\t\t\t\t\"Failed to stat temporary module install directory\",\n\t\t\t\t\tfmt.Sprintf(\"Error from stat %s for module %s: %s.\", instPath, newKey, err),\n\t\t\t\t))\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tvar parentKey string\n\t\t\tif lastDot := strings.LastIndexByte(newKey, '.'); lastDot != -1 {\n\t\t\t\tparentKey = newKey[:lastDot]\n\t\t\t} else {\n\t\t\t\tparentKey = \"\" // parent is the root module\n\t\t\t}\n\n\t\t\tparentOld := instManifest[initFromModuleRootKeyPrefix+parentKey]\n\t\t\tparentNew := retManifest[parentKey]\n\n\t\t\t// We need to figure out which portion of our directory is the\n\t\t\t// parent package path and which portion is the subdirectory\n\t\t\t// under that.\n\t\t\tbaseDirRel, err := filepath.Rel(parentOld.Dir, record.Dir)\n\t\t\tif err != nil {\n\t\t\t\t// Should never happen, because we constructed both directories\n\t\t\t\t// from the same base and so they must have a common prefix.\n\t\t\t\tpanic(err)\n\t\t\t}\n\n\t\t\tnewDir := filepath.Join(parentNew.Dir, baseDirRel)\n\t\t\tlog.Printf(\"[TRACE] relative reference for %s rewritten from %s to %s\", newKey, record.Dir, newDir)\n\t\t\tnewRecord := record // shallow copy\n\t\t\tnewRecord.Dir = newDir\n\t\t\tnewRecord.Key = newKey\n\t\t\tretManifest[newKey] = newRecord\n\t\t\thooks.Install(newRecord.Key, newRecord.Version, newRecord.Dir)\n\t\t\tcontinue\n\t\t}\n\n\t\terr = os.MkdirAll(instPath, os.ModePerm)\n\t\tif err != nil {\n\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\ttfdiags.Error,\n\t\t\t\t\"Failed to create module install directory\",\n\t\t\t\tfmt.Sprintf(\"Error creating directory %s for module %s: %s.\", instPath, newKey, err),\n\t\t\t))\n\t\t\tcontinue\n\t\t}\n\n\t\t// We copy rather than \"rename\" here because renaming between directories\n\t\t// can be tricky in edge-cases like network filesystems, etc.\n\t\tlog.Printf(\"[TRACE] copying new module %s from %s to %s\", newKey, record.Dir, instPath)\n\t\terr := copyDir(instPath, tempPath)\n\t\tif err != nil {\n\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\ttfdiags.Error,\n\t\t\t\t\"Failed to copy descendent module\",\n\t\t\t\tfmt.Sprintf(\"Error copying module %q from %s to %s: %s.\", newKey, tempPath, rootDir, err),\n\t\t\t))\n\t\t\tcontinue\n\t\t}\n\n\t\tsubDir, err := filepath.Rel(tempPath, record.Dir)\n\t\tif err != nil {\n\t\t\t// Should never happen, because we constructed both directories\n\t\t\t// from the same base and so they must have a common prefix.\n\t\t\tpanic(err)\n\t\t}\n\n\t\tnewRecord := record // shallow copy\n\t\tnewRecord.Dir = filepath.Join(instPath, subDir)\n\t\tnewRecord.Key = newKey\n\t\tretManifest[newKey] = newRecord\n\t\thooks.Install(newRecord.Key, newRecord.Version, newRecord.Dir)\n\t}\n\n\tretManifest.WriteSnapshotToDir(modulesDir)\n\tif err != nil {\n\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\ttfdiags.Error,\n\t\t\t\"Failed to write module manifest\",\n\t\t\tfmt.Sprintf(\"Error writing module manifest: %s.\", err),\n\t\t))\n\t}\n\n\tif !diags.HasErrors() {\n\t\t// Try to clean up our temporary directory, but don't worry if we don't\n\t\t// succeed since it shouldn't hurt anything.\n\t\tos.RemoveAll(instDir)\n\t}\n\n\treturn diags\n}\n\nfunc pathTraversesUp(path string) bool {\n\treturn strings.HasPrefix(filepath.ToSlash(path), \"../\")\n}\n\n// installHooksInitDir is an adapter wrapper for an InstallHooks that\n// does some fakery to make downloads look like they are happening in their\n// final locations, rather than in the temporary loader we use.\n//\n// It also suppresses \"Install\" calls entirely, since InitDirFromModule\n// does its own installation steps after the initial installation pass\n// has completed.\ntype installHooksInitDir struct {\n\tWrapped ModuleInstallHooks\n\tModuleInstallHooksImpl\n}\n\nfunc (h installHooksInitDir) Download(moduleAddr, packageAddr string, version *version.Version) {\n\tif !strings.HasPrefix(moduleAddr, initFromModuleRootKeyPrefix) {\n\t\t// We won't announce the root module, since hook implementations\n\t\t// don't expect to see that and the caller will usually have produced\n\t\t// its own user-facing notification about what it's doing anyway.\n\t\treturn\n\t}\n\n\ttrimAddr := moduleAddr[len(initFromModuleRootKeyPrefix):]\n\th.Wrapped.Download(trimAddr, packageAddr, version)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/internal/initwd/getter.go",
    "content": "package initwd\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n\n\tcleanhttp \"github.com/hashicorp/go-cleanhttp\"\n\tgetter \"github.com/hashicorp/go-getter\"\n\t\"github.com/hashicorp/terraform/registry/regsrc\"\n)\n\n// We configure our own go-getter detector and getter sets here, because\n// the set of sources we support is part of Terraform's documentation and\n// so we don't want any new sources introduced in go-getter to sneak in here\n// and work even though they aren't documented. This also insulates us from\n// any meddling that might be done by other go-getter callers linked into our\n// executable.\n\nvar goGetterDetectors = []getter.Detector{\n\tnew(getter.GitHubDetector),\n\tnew(getter.BitBucketDetector),\n\tnew(getter.S3Detector),\n\tnew(getter.FileDetector),\n}\n\nvar goGetterNoDetectors = []getter.Detector{}\n\nvar goGetterDecompressors = map[string]getter.Decompressor{\n\t\"bz2\": new(getter.Bzip2Decompressor),\n\t\"gz\":  new(getter.GzipDecompressor),\n\t\"xz\":  new(getter.XzDecompressor),\n\t\"zip\": new(getter.ZipDecompressor),\n\n\t\"tar.bz2\":  new(getter.TarBzip2Decompressor),\n\t\"tar.tbz2\": new(getter.TarBzip2Decompressor),\n\n\t\"tar.gz\": new(getter.TarGzipDecompressor),\n\t\"tgz\":    new(getter.TarGzipDecompressor),\n\n\t\"tar.xz\": new(getter.TarXzDecompressor),\n\t\"txz\":    new(getter.TarXzDecompressor),\n}\n\nvar goGetterGetters = map[string]getter.Getter{\n\t\"file\":  new(getter.FileGetter),\n\t\"git\":   new(getter.GitGetter),\n\t\"hg\":    new(getter.HgGetter),\n\t\"s3\":    new(getter.S3Getter),\n\t\"http\":  getterHTTPGetter,\n\t\"https\": getterHTTPGetter,\n}\n\nvar getterHTTPClient = cleanhttp.DefaultClient()\n\nvar getterHTTPGetter = &getter.HttpGetter{\n\tClient: getterHTTPClient,\n\tNetrc:  true,\n}\n\n// A reusingGetter is a helper for the module installer that remembers\n// the final resolved addresses of all of the sources it has already been\n// asked to install, and will copy from a prior installation directory if\n// it has the same resolved source address.\n//\n// The keys in a reusingGetter are resolved and trimmed source addresses\n// (with a scheme always present, and without any \"subdir\" component),\n// and the values are the paths where each source was previously installed.\ntype reusingGetter map[string]string\n\n// getWithGoGetter retrieves the package referenced in the given address\n// into the installation path and then returns the full path to any subdir\n// indicated in the address.\n//\n// The errors returned by this function are those surfaced by the underlying\n// go-getter library, which have very inconsistent quality as\n// end-user-actionable error messages. At this time we do not have any\n// reasonable way to improve these error messages at this layer because\n// the underlying errors are not separately recognizable.\nfunc (g reusingGetter) getWithGoGetter(instPath, addr string) (string, error) {\n\tpackageAddr, subDir := splitAddrSubdir(addr)\n\n\tlog.Printf(\"[DEBUG] will download %q to %s\", packageAddr, instPath)\n\n\trealAddr, err := getter.Detect(packageAddr, instPath, getter.Detectors)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\tif isMaybeRelativeLocalPath(realAddr) {\n\t\treturn \"\", &MaybeRelativePathErr{addr}\n\t}\n\n\tvar realSubDir string\n\trealAddr, realSubDir = splitAddrSubdir(realAddr)\n\tif realSubDir != \"\" {\n\t\tsubDir = filepath.Join(realSubDir, subDir)\n\t}\n\n\tif realAddr != packageAddr {\n\t\tlog.Printf(\"[TRACE] go-getter detectors rewrote %q to %q\", packageAddr, realAddr)\n\t}\n\n\tif prevDir, exists := g[realAddr]; exists {\n\t\tlog.Printf(\"[TRACE] copying previous install %s to %s\", prevDir, instPath)\n\t\terr := os.Mkdir(instPath, os.ModePerm)\n\t\tif err != nil {\n\t\t\treturn \"\", fmt.Errorf(\"failed to create directory %s: %s\", instPath, err)\n\t\t}\n\t\terr = copyDir(instPath, prevDir)\n\t\tif err != nil {\n\t\t\treturn \"\", fmt.Errorf(\"failed to copy from %s to %s: %s\", prevDir, instPath, err)\n\t\t}\n\t} else {\n\t\tlog.Printf(\"[TRACE] fetching %q to %q\", realAddr, instPath)\n\t\tclient := getter.Client{\n\t\t\tSrc: realAddr,\n\t\t\tDst: instPath,\n\t\t\tPwd: instPath,\n\n\t\t\tMode: getter.ClientModeDir,\n\n\t\t\tDetectors:     goGetterNoDetectors, // we already did detection above\n\t\t\tDecompressors: goGetterDecompressors,\n\t\t\tGetters:       goGetterGetters,\n\t\t}\n\t\terr = client.Get()\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\t\t// Remember where we installed this so we might reuse this directory\n\t\t// on subsequent calls to avoid re-downloading.\n\t\tg[realAddr] = instPath\n\t}\n\n\t// Our subDir string can contain wildcards until this point, so that\n\t// e.g. a subDir of * can expand to one top-level directory in a .tar.gz\n\t// archive. Now that we've expanded the archive successfully we must\n\t// resolve that into a concrete path.\n\tvar finalDir string\n\tif subDir != \"\" {\n\t\tfinalDir, err = getter.SubdirGlob(instPath, subDir)\n\t\tlog.Printf(\"[TRACE] expanded %q to %q\", subDir, finalDir)\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\t} else {\n\t\tfinalDir = instPath\n\t}\n\n\t// If we got this far then we have apparently succeeded in downloading\n\t// the requested object!\n\treturn filepath.Clean(finalDir), nil\n}\n\n// splitAddrSubdir splits the given address (which is assumed to be a\n// registry address or go-getter-style address) into a package portion\n// and a sub-directory portion.\n//\n// The package portion defines what should be downloaded and then the\n// sub-directory portion, if present, specifies a sub-directory within\n// the downloaded object (an archive, VCS repository, etc) that contains\n// the module's configuration files.\n//\n// The subDir portion will be returned as empty if no subdir separator\n// (\"//\") is present in the address.\nfunc splitAddrSubdir(addr string) (packageAddr, subDir string) {\n\treturn getter.SourceDirSubdir(addr)\n}\n\nvar localSourcePrefixes = []string{\n\t\"./\",\n\t\"../\",\n\t\".\\\\\",\n\t\"..\\\\\",\n}\n\nfunc isLocalSourceAddr(addr string) bool {\n\tfor _, prefix := range localSourcePrefixes {\n\t\tif strings.HasPrefix(addr, prefix) {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\nfunc isRegistrySourceAddr(addr string) bool {\n\t_, err := regsrc.ParseModuleSource(addr)\n\treturn err == nil\n}\n\ntype MaybeRelativePathErr struct {\n\tAddr string\n}\n\nfunc (e *MaybeRelativePathErr) Error() string {\n\treturn fmt.Sprintf(\"Terraform cannot determine the module source for %s\", e.Addr)\n}\n\nfunc isMaybeRelativeLocalPath(addr string) bool {\n\tif strings.HasPrefix(addr, \"file://\") {\n\t\t_, err := os.Stat(addr[7:])\n\t\tif err != nil {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/internal/initwd/inode.go",
    "content": "// +build linux darwin openbsd netbsd solaris dragonfly\n\npackage initwd\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"syscall\"\n)\n\n// lookup the inode of a file on posix systems\nfunc inode(path string) (uint64, error) {\n\tstat, err := os.Stat(path)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tif st, ok := stat.Sys().(*syscall.Stat_t); ok {\n\t\treturn st.Ino, nil\n\t}\n\treturn 0, fmt.Errorf(\"could not determine file inode\")\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/internal/initwd/inode_freebsd.go",
    "content": "// +build freebsd\n\npackage initwd\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"syscall\"\n)\n\n// lookup the inode of a file on posix systems\nfunc inode(path string) (uint64, error) {\n\tstat, err := os.Stat(path)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tif st, ok := stat.Sys().(*syscall.Stat_t); ok {\n\t\treturn uint64(st.Ino), nil\n\t}\n\treturn 0, fmt.Errorf(\"could not determine file inode\")\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/internal/initwd/inode_windows.go",
    "content": "// +build windows\n\npackage initwd\n\n// no syscall.Stat_t on windows, return 0 for inodes\nfunc inode(path string) (uint64, error) {\n\treturn 0, nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/internal/initwd/load_config.go",
    "content": "package initwd\n\nimport (\n\t\"fmt\"\n\n\tversion \"github.com/hashicorp/go-version\"\n\t\"github.com/hashicorp/terraform-config-inspect/tfconfig\"\n\t\"github.com/hashicorp/terraform/internal/earlyconfig\"\n\t\"github.com/hashicorp/terraform/internal/modsdir\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n)\n\n// LoadConfig loads a full configuration tree that has previously had all of\n// its dependent modules installed to the given modulesDir using a\n// ModuleInstaller.\n//\n// This uses the early configuration loader and thus only reads top-level\n// metadata from the modules in the configuration. Most callers should use\n// the configs/configload package to fully load a configuration.\nfunc LoadConfig(rootDir, modulesDir string) (*earlyconfig.Config, tfdiags.Diagnostics) {\n\trootMod, diags := earlyconfig.LoadModule(rootDir)\n\tif rootMod == nil {\n\t\treturn nil, diags\n\t}\n\n\tmanifest, err := modsdir.ReadManifestSnapshotForDir(modulesDir)\n\tif err != nil {\n\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\ttfdiags.Error,\n\t\t\t\"Failed to read module manifest\",\n\t\t\tfmt.Sprintf(\"Terraform failed to read its manifest of locally-cached modules: %s.\", err),\n\t\t))\n\t\treturn nil, diags\n\t}\n\n\treturn earlyconfig.BuildConfig(rootMod, earlyconfig.ModuleWalkerFunc(\n\t\tfunc(req *earlyconfig.ModuleRequest) (*tfconfig.Module, *version.Version, tfdiags.Diagnostics) {\n\t\t\tvar diags tfdiags.Diagnostics\n\n\t\t\tkey := manifest.ModuleKey(req.Path)\n\t\t\trecord, exists := manifest[key]\n\t\t\tif !exists {\n\t\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\t\ttfdiags.Error,\n\t\t\t\t\t\"Module not installed\",\n\t\t\t\t\tfmt.Sprintf(\"Module %s is not yet installed. Run \\\"terraform init\\\" to install all modules required by this configuration.\", req.Path.String()),\n\t\t\t\t))\n\t\t\t\treturn nil, nil, diags\n\t\t\t}\n\n\t\t\tmod, mDiags := earlyconfig.LoadModule(record.Dir)\n\t\t\tdiags = diags.Append(mDiags)\n\t\t\treturn mod, record.Version, diags\n\t\t},\n\t))\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/internal/initwd/module_install.go",
    "content": "package initwd\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n\n\tversion \"github.com/hashicorp/go-version\"\n\t\"github.com/hashicorp/terraform-config-inspect/tfconfig\"\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/internal/earlyconfig\"\n\t\"github.com/hashicorp/terraform/internal/modsdir\"\n\t\"github.com/hashicorp/terraform/registry\"\n\t\"github.com/hashicorp/terraform/registry/regsrc\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n)\n\ntype ModuleInstaller struct {\n\tmodsDir string\n\treg     *registry.Client\n}\n\nfunc NewModuleInstaller(modsDir string, reg *registry.Client) *ModuleInstaller {\n\treturn &ModuleInstaller{\n\t\tmodsDir: modsDir,\n\t\treg:     reg,\n\t}\n}\n\n// InstallModules analyses the root module in the given directory and installs\n// all of its direct and transitive dependencies into the given modules\n// directory, which must already exist.\n//\n// Since InstallModules makes possibly-time-consuming calls to remote services,\n// a hook interface is supported to allow the caller to be notified when\n// each module is installed and, for remote modules, when downloading begins.\n// LoadConfig guarantees that two hook calls will not happen concurrently but\n// it does not guarantee any particular ordering of hook calls. This mechanism\n// is for UI feedback only and does not give the caller any control over the\n// process.\n//\n// If modules are already installed in the target directory, they will be\n// skipped unless their source address or version have changed or unless\n// the upgrade flag is set.\n//\n// InstallModules never deletes any directory, except in the case where it\n// needs to replace a directory that is already present with a newly-extracted\n// package.\n//\n// If the returned diagnostics contains errors then the module installation\n// may have wholly or partially completed. Modules must be loaded in order\n// to find their dependencies, so this function does many of the same checks\n// as LoadConfig as a side-effect.\n//\n// If successful (the returned diagnostics contains no errors) then the\n// first return value is the early configuration tree that was constructed by\n// the installation process.\nfunc (i *ModuleInstaller) InstallModules(rootDir string, upgrade bool, hooks ModuleInstallHooks) (*earlyconfig.Config, tfdiags.Diagnostics) {\n\tlog.Printf(\"[TRACE] ModuleInstaller: installing child modules for %s into %s\", rootDir, i.modsDir)\n\n\trootMod, diags := earlyconfig.LoadModule(rootDir)\n\tif rootMod == nil {\n\t\treturn nil, diags\n\t}\n\n\tmanifest, err := modsdir.ReadManifestSnapshotForDir(i.modsDir)\n\tif err != nil {\n\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\ttfdiags.Error,\n\t\t\t\"Failed to read modules manifest file\",\n\t\t\tfmt.Sprintf(\"Error reading manifest for %s: %s.\", i.modsDir, err),\n\t\t))\n\t\treturn nil, diags\n\t}\n\n\tgetter := reusingGetter{}\n\tcfg, instDiags := i.installDescendentModules(rootMod, rootDir, manifest, upgrade, hooks, getter)\n\tdiags = append(diags, instDiags...)\n\n\treturn cfg, diags\n}\n\nfunc (i *ModuleInstaller) installDescendentModules(rootMod *tfconfig.Module, rootDir string, manifest modsdir.Manifest, upgrade bool, hooks ModuleInstallHooks, getter reusingGetter) (*earlyconfig.Config, tfdiags.Diagnostics) {\n\tvar diags tfdiags.Diagnostics\n\n\tif hooks == nil {\n\t\t// Use our no-op implementation as a placeholder\n\t\thooks = ModuleInstallHooksImpl{}\n\t}\n\n\t// Create a manifest record for the root module. This will be used if\n\t// there are any relative-pathed modules in the root.\n\tmanifest[\"\"] = modsdir.Record{\n\t\tKey: \"\",\n\t\tDir: rootDir,\n\t}\n\n\tcfg, cDiags := earlyconfig.BuildConfig(rootMod, earlyconfig.ModuleWalkerFunc(\n\t\tfunc(req *earlyconfig.ModuleRequest) (*tfconfig.Module, *version.Version, tfdiags.Diagnostics) {\n\n\t\t\tkey := manifest.ModuleKey(req.Path)\n\t\t\tinstPath := i.packageInstallPath(req.Path)\n\n\t\t\tlog.Printf(\"[DEBUG] Module installer: begin %s\", key)\n\n\t\t\t// First we'll check if we need to upgrade/replace an existing\n\t\t\t// installed module, and delete it out of the way if so.\n\t\t\treplace := upgrade\n\t\t\tif !replace {\n\t\t\t\trecord, recorded := manifest[key]\n\t\t\t\tswitch {\n\t\t\t\tcase !recorded:\n\t\t\t\t\tlog.Printf(\"[TRACE] ModuleInstaller: %s is not yet installed\", key)\n\t\t\t\t\treplace = true\n\t\t\t\tcase record.SourceAddr != req.SourceAddr:\n\t\t\t\t\tlog.Printf(\"[TRACE] ModuleInstaller: %s source address has changed from %q to %q\", key, record.SourceAddr, req.SourceAddr)\n\t\t\t\t\treplace = true\n\t\t\t\tcase record.Version != nil && !req.VersionConstraints.Check(record.Version):\n\t\t\t\t\tlog.Printf(\"[TRACE] ModuleInstaller: %s version %s no longer compatible with constraints %s\", key, record.Version, req.VersionConstraints)\n\t\t\t\t\treplace = true\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// If we _are_ planning to replace this module, then we'll remove\n\t\t\t// it now so our installation code below won't conflict with any\n\t\t\t// existing remnants.\n\t\t\tif replace {\n\t\t\t\tif _, recorded := manifest[key]; recorded {\n\t\t\t\t\tlog.Printf(\"[TRACE] ModuleInstaller: discarding previous record of %s prior to reinstall\", key)\n\t\t\t\t}\n\t\t\t\tdelete(manifest, key)\n\t\t\t\t// Deleting a module invalidates all of its descendent modules too.\n\t\t\t\tkeyPrefix := key + \".\"\n\t\t\t\tfor subKey := range manifest {\n\t\t\t\t\tif strings.HasPrefix(subKey, keyPrefix) {\n\t\t\t\t\t\tif _, recorded := manifest[subKey]; recorded {\n\t\t\t\t\t\t\tlog.Printf(\"[TRACE] ModuleInstaller: also discarding downstream %s\", subKey)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdelete(manifest, subKey)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\trecord, recorded := manifest[key]\n\t\t\tif !recorded {\n\t\t\t\t// Clean up any stale cache directory that might be present.\n\t\t\t\t// If this is a local (relative) source then the dir will\n\t\t\t\t// not exist, but we'll ignore that.\n\t\t\t\tlog.Printf(\"[TRACE] ModuleInstaller: cleaning directory %s prior to install of %s\", instPath, key)\n\t\t\t\terr := os.RemoveAll(instPath)\n\t\t\t\tif err != nil && !os.IsNotExist(err) {\n\t\t\t\t\tlog.Printf(\"[TRACE] ModuleInstaller: failed to remove %s: %s\", key, err)\n\t\t\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\t\t\ttfdiags.Error,\n\t\t\t\t\t\t\"Failed to remove local module cache\",\n\t\t\t\t\t\tfmt.Sprintf(\n\t\t\t\t\t\t\t\"Terraform tried to remove %s in order to reinstall this module, but encountered an error: %s\",\n\t\t\t\t\t\t\tinstPath, err,\n\t\t\t\t\t\t),\n\t\t\t\t\t))\n\t\t\t\t\treturn nil, nil, diags\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// If this module is already recorded and its root directory\n\t\t\t\t// exists then we will just load what's already there and\n\t\t\t\t// keep our existing record.\n\t\t\t\tinfo, err := os.Stat(record.Dir)\n\t\t\t\tif err == nil && info.IsDir() {\n\t\t\t\t\tmod, mDiags := earlyconfig.LoadModule(record.Dir)\n\t\t\t\t\tdiags = diags.Append(mDiags)\n\n\t\t\t\t\tlog.Printf(\"[TRACE] ModuleInstaller: Module installer: %s %s already installed in %s\", key, record.Version, record.Dir)\n\t\t\t\t\treturn mod, record.Version, diags\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// If we get down here then it's finally time to actually install\n\t\t\t// the module. There are some variants to this process depending\n\t\t\t// on what type of module source address we have.\n\t\t\tswitch {\n\n\t\t\tcase isLocalSourceAddr(req.SourceAddr):\n\t\t\t\tlog.Printf(\"[TRACE] ModuleInstaller: %s has local path %q\", key, req.SourceAddr)\n\t\t\t\tmod, mDiags := i.installLocalModule(req, key, manifest, hooks)\n\t\t\t\tdiags = append(diags, mDiags...)\n\t\t\t\treturn mod, nil, diags\n\n\t\t\tcase isRegistrySourceAddr(req.SourceAddr):\n\t\t\t\taddr, err := regsrc.ParseModuleSource(req.SourceAddr)\n\t\t\t\tif err != nil {\n\t\t\t\t\t// Should never happen because isRegistrySourceAddr already validated\n\t\t\t\t\tpanic(err)\n\t\t\t\t}\n\t\t\t\tlog.Printf(\"[TRACE] ModuleInstaller: %s is a registry module at %s\", key, addr)\n\n\t\t\t\tmod, v, mDiags := i.installRegistryModule(req, key, instPath, addr, manifest, hooks, getter)\n\t\t\t\tdiags = append(diags, mDiags...)\n\t\t\t\treturn mod, v, diags\n\n\t\t\tdefault:\n\t\t\t\tlog.Printf(\"[TRACE] ModuleInstaller: %s address %q will be handled by go-getter\", key, req.SourceAddr)\n\n\t\t\t\tmod, mDiags := i.installGoGetterModule(req, key, instPath, manifest, hooks, getter)\n\t\t\t\tdiags = append(diags, mDiags...)\n\t\t\t\treturn mod, nil, diags\n\t\t\t}\n\n\t\t},\n\t))\n\tdiags = append(diags, cDiags...)\n\n\terr := manifest.WriteSnapshotToDir(i.modsDir)\n\tif err != nil {\n\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\ttfdiags.Error,\n\t\t\t\"Failed to update module manifest\",\n\t\t\tfmt.Sprintf(\"Unable to write the module manifest file: %s\", err),\n\t\t))\n\t}\n\n\treturn cfg, diags\n}\n\nfunc (i *ModuleInstaller) installLocalModule(req *earlyconfig.ModuleRequest, key string, manifest modsdir.Manifest, hooks ModuleInstallHooks) (*tfconfig.Module, tfdiags.Diagnostics) {\n\tvar diags tfdiags.Diagnostics\n\n\tparentKey := manifest.ModuleKey(req.Parent.Path)\n\tparentRecord, recorded := manifest[parentKey]\n\tif !recorded {\n\t\t// This is indicative of a bug rather than a user-actionable error\n\t\tpanic(fmt.Errorf(\"missing manifest record for parent module %s\", parentKey))\n\t}\n\n\tif len(req.VersionConstraints) != 0 {\n\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\ttfdiags.Error,\n\t\t\t\"Invalid version constraint\",\n\t\t\tfmt.Sprintf(\"Cannot apply a version constraint to module %q (at %s:%d) because it has a relative local path.\", req.Name, req.CallPos.Filename, req.CallPos.Line),\n\t\t))\n\t}\n\n\t// For local sources we don't actually need to modify the\n\t// filesystem at all because the parent already wrote\n\t// the files we need, and so we just load up what's already here.\n\tnewDir := filepath.Join(parentRecord.Dir, req.SourceAddr)\n\n\tlog.Printf(\"[TRACE] ModuleInstaller: %s uses directory from parent: %s\", key, newDir)\n\t// it is possible that the local directory is a symlink\n\tnewDir, err := filepath.EvalSymlinks(newDir)\n\tif err != nil {\n\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\ttfdiags.Error,\n\t\t\t\"Unreadable module directory\",\n\t\t\tfmt.Sprintf(\"Unable to evaluate directory symlink: %s\", err.Error()),\n\t\t))\n\t}\n\n\tmod, mDiags := earlyconfig.LoadModule(newDir)\n\tif mod == nil {\n\t\t// nil indicates missing or unreadable directory, so we'll\n\t\t// discard the returned diags and return a more specific\n\t\t// error message here.\n\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\ttfdiags.Error,\n\t\t\t\"Unreadable module directory\",\n\t\t\tfmt.Sprintf(\"The directory %s could not be read for module %q at %s:%d.\", newDir, req.Name, req.CallPos.Filename, req.CallPos.Line),\n\t\t))\n\t} else {\n\t\tdiags = diags.Append(mDiags)\n\t}\n\n\t// Note the local location in our manifest.\n\tmanifest[key] = modsdir.Record{\n\t\tKey:        key,\n\t\tDir:        newDir,\n\t\tSourceAddr: req.SourceAddr,\n\t}\n\tlog.Printf(\"[DEBUG] Module installer: %s installed at %s\", key, newDir)\n\thooks.Install(key, nil, newDir)\n\n\treturn mod, diags\n}\n\nfunc (i *ModuleInstaller) installRegistryModule(req *earlyconfig.ModuleRequest, key string, instPath string, addr *regsrc.Module, manifest modsdir.Manifest, hooks ModuleInstallHooks, getter reusingGetter) (*tfconfig.Module, *version.Version, tfdiags.Diagnostics) {\n\tvar diags tfdiags.Diagnostics\n\n\thostname, err := addr.SvcHost()\n\tif err != nil {\n\t\t// If it looks like the user was trying to use punycode then we'll generate\n\t\t// a specialized error for that case. We require the unicode form of\n\t\t// hostname so that hostnames are always human-readable in configuration\n\t\t// and punycode can't be used to hide a malicious module hostname.\n\t\tif strings.HasPrefix(addr.RawHost.Raw, \"xn--\") {\n\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\ttfdiags.Error,\n\t\t\t\t\"Invalid module registry hostname\",\n\t\t\t\tfmt.Sprintf(\"The hostname portion of the module %q source address (at %s:%d) is not an acceptable hostname. Internationalized domain names must be given in unicode form rather than ASCII (\\\"punycode\\\") form.\", req.Name, req.CallPos.Filename, req.CallPos.Line),\n\t\t\t))\n\t\t} else {\n\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\ttfdiags.Error,\n\t\t\t\t\"Invalid module registry hostname\",\n\t\t\t\tfmt.Sprintf(\"The hostname portion of the module %q source address (at %s:%d) is not a valid hostname.\", req.Name, req.CallPos.Filename, req.CallPos.Line),\n\t\t\t))\n\t\t}\n\t\treturn nil, nil, diags\n\t}\n\n\treg := i.reg\n\n\tlog.Printf(\"[DEBUG] %s listing available versions of %s at %s\", key, addr, hostname)\n\tresp, err := reg.ModuleVersions(addr)\n\tif err != nil {\n\t\tif registry.IsModuleNotFound(err) {\n\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\ttfdiags.Error,\n\t\t\t\t\"Module not found\",\n\t\t\t\tfmt.Sprintf(\"Module %q (from %s:%d) cannot be found in the module registry at %s.\", req.Name, req.CallPos.Filename, req.CallPos.Line, hostname),\n\t\t\t))\n\t\t} else {\n\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\ttfdiags.Error,\n\t\t\t\t\"Error accessing remote module registry\",\n\t\t\t\tfmt.Sprintf(\"Failed to retrieve available versions for module %q (%s:%d) from %s: %s.\", req.Name, req.CallPos.Filename, req.CallPos.Line, hostname, err),\n\t\t\t))\n\t\t}\n\t\treturn nil, nil, diags\n\t}\n\n\t// The response might contain information about dependencies to allow us\n\t// to potentially optimize future requests, but we don't currently do that\n\t// and so for now we'll just take the first item which is guaranteed to\n\t// be the address we requested.\n\tif len(resp.Modules) < 1 {\n\t\t// Should never happen, but since this is a remote service that may\n\t\t// be implemented by third-parties we will handle it gracefully.\n\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\ttfdiags.Error,\n\t\t\t\"Invalid response from remote module registry\",\n\t\t\tfmt.Sprintf(\"The registry at %s returned an invalid response when Terraform requested available versions for module %q (%s:%d).\", hostname, req.Name, req.CallPos.Filename, req.CallPos.Line),\n\t\t))\n\t\treturn nil, nil, diags\n\t}\n\n\tmodMeta := resp.Modules[0]\n\n\tvar latestMatch *version.Version\n\tvar latestVersion *version.Version\n\tfor _, mv := range modMeta.Versions {\n\t\tv, err := version.NewVersion(mv.Version)\n\t\tif err != nil {\n\t\t\t// Should never happen if the registry server is compliant with\n\t\t\t// the protocol, but we'll warn if not to assist someone who\n\t\t\t// might be developing a module registry server.\n\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\ttfdiags.Warning,\n\t\t\t\t\"Invalid response from remote module registry\",\n\t\t\t\tfmt.Sprintf(\"The registry at %s returned an invalid version string %q for module %q (%s:%d), which Terraform ignored.\", hostname, mv.Version, req.Name, req.CallPos.Filename, req.CallPos.Line),\n\t\t\t))\n\t\t\tcontinue\n\t\t}\n\n\t\t// If we've found a pre-release version then we'll ignore it unless\n\t\t// it was exactly requested.\n\t\tif v.Prerelease() != \"\" && req.VersionConstraints.String() != v.String() {\n\t\t\tlog.Printf(\"[TRACE] ModuleInstaller: %s ignoring %s because it is a pre-release and was not requested exactly\", key, v)\n\t\t\tcontinue\n\t\t}\n\n\t\tif latestVersion == nil || v.GreaterThan(latestVersion) {\n\t\t\tlatestVersion = v\n\t\t}\n\n\t\tif req.VersionConstraints.Check(v) {\n\t\t\tif latestMatch == nil || v.GreaterThan(latestMatch) {\n\t\t\t\tlatestMatch = v\n\t\t\t}\n\t\t}\n\t}\n\n\tif latestVersion == nil {\n\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\ttfdiags.Error,\n\t\t\t\"Module has no versions\",\n\t\t\tfmt.Sprintf(\"Module %q (%s:%d) has no versions available on %s.\", addr, req.CallPos.Filename, req.CallPos.Line, hostname),\n\t\t))\n\t\treturn nil, nil, diags\n\t}\n\n\tif latestMatch == nil {\n\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\ttfdiags.Error,\n\t\t\t\"Unresolvable module version constraint\",\n\t\t\tfmt.Sprintf(\"There is no available version of module %q (%s:%d) which matches the given version constraint. The newest available version is %s.\", addr, req.CallPos.Filename, req.CallPos.Line, latestVersion),\n\t\t))\n\t\treturn nil, nil, diags\n\t}\n\n\t// Report up to the caller that we're about to start downloading.\n\tpackageAddr, _ := splitAddrSubdir(req.SourceAddr)\n\thooks.Download(key, packageAddr, latestMatch)\n\n\t// If we manage to get down here then we've found a suitable version to\n\t// install, so we need to ask the registry where we should download it from.\n\t// The response to this is a go-getter-style address string.\n\tdlAddr, err := reg.ModuleLocation(addr, latestMatch.String())\n\tif err != nil {\n\t\tlog.Printf(\"[ERROR] %s from %s %s: %s\", key, addr, latestMatch, err)\n\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\ttfdiags.Error,\n\t\t\t\"Invalid response from remote module registry\",\n\t\t\tfmt.Sprintf(\"The remote registry at %s failed to return a download URL for %s %s.\", hostname, addr, latestMatch),\n\t\t))\n\t\treturn nil, nil, diags\n\t}\n\n\tlog.Printf(\"[TRACE] ModuleInstaller: %s %s %s is available at %q\", key, addr, latestMatch, dlAddr)\n\n\tmodDir, err := getter.getWithGoGetter(instPath, dlAddr)\n\tif err != nil {\n\t\t// Errors returned by go-getter have very inconsistent quality as\n\t\t// end-user error messages, but for now we're accepting that because\n\t\t// we have no way to recognize any specific errors to improve them\n\t\t// and masking the error entirely would hide valuable diagnostic\n\t\t// information from the user.\n\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\ttfdiags.Error,\n\t\t\t\"Failed to download module\",\n\t\t\tfmt.Sprintf(\"Could not download module %q (%s:%d) source code from %q: %s.\", req.Name, req.CallPos.Filename, req.CallPos.Line, dlAddr, err),\n\t\t))\n\t\treturn nil, nil, diags\n\t}\n\n\tlog.Printf(\"[TRACE] ModuleInstaller: %s %q was downloaded to %s\", key, dlAddr, modDir)\n\n\tif addr.RawSubmodule != \"\" {\n\t\t// Append the user's requested subdirectory to any subdirectory that\n\t\t// was implied by any of the nested layers we expanded within go-getter.\n\t\tmodDir = filepath.Join(modDir, addr.RawSubmodule)\n\t}\n\n\tlog.Printf(\"[TRACE] ModuleInstaller: %s should now be at %s\", key, modDir)\n\n\t// Finally we are ready to try actually loading the module.\n\tmod, mDiags := earlyconfig.LoadModule(modDir)\n\tif mod == nil {\n\t\t// nil indicates missing or unreadable directory, so we'll\n\t\t// discard the returned diags and return a more specific\n\t\t// error message here. For registry modules this actually\n\t\t// indicates a bug in the code above, since it's not the\n\t\t// user's responsibility to create the directory in this case.\n\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\ttfdiags.Error,\n\t\t\t\"Unreadable module directory\",\n\t\t\tfmt.Sprintf(\"The directory %s could not be read. This is a bug in Terraform and should be reported.\", modDir),\n\t\t))\n\t} else {\n\t\tdiags = append(diags, mDiags...)\n\t}\n\n\t// Note the local location in our manifest.\n\tmanifest[key] = modsdir.Record{\n\t\tKey:        key,\n\t\tVersion:    latestMatch,\n\t\tDir:        modDir,\n\t\tSourceAddr: req.SourceAddr,\n\t}\n\tlog.Printf(\"[DEBUG] Module installer: %s installed at %s\", key, modDir)\n\thooks.Install(key, latestMatch, modDir)\n\n\treturn mod, latestMatch, diags\n}\n\nfunc (i *ModuleInstaller) installGoGetterModule(req *earlyconfig.ModuleRequest, key string, instPath string, manifest modsdir.Manifest, hooks ModuleInstallHooks, getter reusingGetter) (*tfconfig.Module, tfdiags.Diagnostics) {\n\tvar diags tfdiags.Diagnostics\n\n\t// Report up to the caller that we're about to start downloading.\n\tpackageAddr, _ := splitAddrSubdir(req.SourceAddr)\n\thooks.Download(key, packageAddr, nil)\n\n\tif len(req.VersionConstraints) != 0 {\n\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\ttfdiags.Error,\n\t\t\t\"Invalid version constraint\",\n\t\t\tfmt.Sprintf(\"Cannot apply a version constraint to module %q (at %s:%d) because it has a non Registry URL.\", req.Name, req.CallPos.Filename, req.CallPos.Line),\n\t\t))\n\t\treturn nil, diags\n\t}\n\n\tmodDir, err := getter.getWithGoGetter(instPath, req.SourceAddr)\n\tif err != nil {\n\t\tif _, ok := err.(*MaybeRelativePathErr); ok {\n\t\t\tlog.Printf(\n\t\t\t\t\"[TRACE] ModuleInstaller: %s looks like a local path but is missing ./ or ../\",\n\t\t\t\treq.SourceAddr,\n\t\t\t)\n\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\ttfdiags.Error,\n\t\t\t\t\"Module not found\",\n\t\t\t\tfmt.Sprintf(\n\t\t\t\t\t\"The module address %q could not be resolved.\\n\\n\"+\n\t\t\t\t\t\t\"If you intended this as a path relative to the current \"+\n\t\t\t\t\t\t\"module, use \\\"./%s\\\" instead. The \\\"./\\\" prefix \"+\n\t\t\t\t\t\t\"indicates that the address is a relative filesystem path.\",\n\t\t\t\t\treq.SourceAddr, req.SourceAddr,\n\t\t\t\t),\n\t\t\t))\n\t\t} else {\n\t\t\t// Errors returned by go-getter have very inconsistent quality as\n\t\t\t// end-user error messages, but for now we're accepting that because\n\t\t\t// we have no way to recognize any specific errors to improve them\n\t\t\t// and masking the error entirely would hide valuable diagnostic\n\t\t\t// information from the user.\n\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\ttfdiags.Error,\n\t\t\t\t\"Failed to download module\",\n\t\t\t\tfmt.Sprintf(\"Could not download module %q (%s:%d) source code from %q: %s\", req.Name, req.CallPos.Filename, req.CallPos.Line, packageAddr, err),\n\t\t\t))\n\t\t}\n\t\treturn nil, diags\n\n\t}\n\n\tlog.Printf(\"[TRACE] ModuleInstaller: %s %q was downloaded to %s\", key, req.SourceAddr, modDir)\n\n\tmod, mDiags := earlyconfig.LoadModule(modDir)\n\tif mod == nil {\n\t\t// nil indicates missing or unreadable directory, so we'll\n\t\t// discard the returned diags and return a more specific\n\t\t// error message here. For go-getter modules this actually\n\t\t// indicates a bug in the code above, since it's not the\n\t\t// user's responsibility to create the directory in this case.\n\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\ttfdiags.Error,\n\t\t\t\"Unreadable module directory\",\n\t\t\tfmt.Sprintf(\"The directory %s could not be read. This is a bug in Terraform and should be reported.\", modDir),\n\t\t))\n\t} else {\n\t\tdiags = append(diags, mDiags...)\n\t}\n\n\t// Note the local location in our manifest.\n\tmanifest[key] = modsdir.Record{\n\t\tKey:        key,\n\t\tDir:        modDir,\n\t\tSourceAddr: req.SourceAddr,\n\t}\n\tlog.Printf(\"[DEBUG] Module installer: %s installed at %s\", key, modDir)\n\thooks.Install(key, nil, modDir)\n\n\treturn mod, diags\n}\n\nfunc (i *ModuleInstaller) packageInstallPath(modulePath addrs.Module) string {\n\treturn filepath.Join(i.modsDir, strings.Join(modulePath, \".\"))\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/internal/initwd/module_install_hooks.go",
    "content": "package initwd\n\nimport (\n\tversion \"github.com/hashicorp/go-version\"\n)\n\n// ModuleInstallHooks is an interface used to provide notifications about the\n// installation process being orchestrated by InstallModules.\n//\n// This interface may have new methods added in future, so implementers should\n// embed InstallHooksImpl to get no-op implementations of any unimplemented\n// methods.\ntype ModuleInstallHooks interface {\n\t// Download is called for modules that are retrieved from a remote source\n\t// before that download begins, to allow a caller to give feedback\n\t// on progress through a possibly-long sequence of downloads.\n\tDownload(moduleAddr, packageAddr string, version *version.Version)\n\n\t// Install is called for each module that is installed, even if it did\n\t// not need to be downloaded from a remote source.\n\tInstall(moduleAddr string, version *version.Version, localPath string)\n}\n\n// ModuleInstallHooksImpl is a do-nothing implementation of InstallHooks that\n// can be embedded in another implementation struct to allow only partial\n// implementation of the interface.\ntype ModuleInstallHooksImpl struct {\n}\n\nfunc (h ModuleInstallHooksImpl) Download(moduleAddr, packageAddr string, version *version.Version) {\n}\n\nfunc (h ModuleInstallHooksImpl) Install(moduleAddr string, version *version.Version, localPath string) {\n}\n\nvar _ ModuleInstallHooks = ModuleInstallHooksImpl{}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/internal/initwd/testing.go",
    "content": "package initwd\n\nimport (\n\t\"github.com/hashicorp/terraform/registry\"\n\t\"testing\"\n\n\t\"github.com/hashicorp/terraform/configs\"\n\t\"github.com/hashicorp/terraform/configs/configload\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n)\n\n// LoadConfigForTests is a convenience wrapper around configload.NewLoaderForTests,\n// ModuleInstaller.InstallModules and configload.Loader.LoadConfig that allows\n// a test configuration to be loaded in a single step.\n//\n// If module installation fails, t.Fatal (or similar) is called to halt\n// execution of the test, under the assumption that installation failures are\n// not expected. If installation failures _are_ expected then use\n// NewLoaderForTests and work with the loader object directly. If module\n// installation succeeds but generates warnings, these warnings are discarded.\n//\n// If installation succeeds but errors are detected during loading then a\n// possibly-incomplete config is returned along with error diagnostics. The\n// test run is not aborted in this case, so that the caller can make assertions\n// against the returned diagnostics.\n//\n// As with NewLoaderForTests, a cleanup function is returned which must be\n// called before the test completes in order to remove the temporary\n// modules directory.\nfunc LoadConfigForTests(t *testing.T, rootDir string) (*configs.Config, *configload.Loader, func(), tfdiags.Diagnostics) {\n\tt.Helper()\n\n\tvar diags tfdiags.Diagnostics\n\n\tloader, cleanup := configload.NewLoaderForTests(t)\n\tinst := NewModuleInstaller(loader.ModulesDir(), registry.NewClient(nil, nil))\n\n\t_, moreDiags := inst.InstallModules(rootDir, true, ModuleInstallHooksImpl{})\n\tdiags = diags.Append(moreDiags)\n\tif diags.HasErrors() {\n\t\tcleanup()\n\t\tt.Fatal(diags.Err())\n\t\treturn nil, nil, func() {}, diags\n\t}\n\n\t// Since module installer has modified the module manifest on disk, we need\n\t// to refresh the cache of it in the loader.\n\tif err := loader.RefreshModules(); err != nil {\n\t\tt.Fatalf(\"failed to refresh modules after installation: %s\", err)\n\t}\n\n\tconfig, hclDiags := loader.LoadConfig(rootDir)\n\tdiags = diags.Append(hclDiags)\n\treturn config, loader, cleanup, diags\n}\n\n// MustLoadConfigForTests is a variant of LoadConfigForTests which calls\n// t.Fatal (or similar) if there are any errors during loading, and thus\n// does not return diagnostics at all.\n//\n// This is useful for concisely writing tests that don't expect errors at\n// all. For tests that expect errors and need to assert against them, use\n// LoadConfigForTests instead.\nfunc MustLoadConfigForTests(t *testing.T, rootDir string) (*configs.Config, *configload.Loader, func()) {\n\tt.Helper()\n\n\tconfig, loader, cleanup, diags := LoadConfigForTests(t, rootDir)\n\tif diags.HasErrors() {\n\t\tcleanup()\n\t\tt.Fatal(diags.Err())\n\t}\n\treturn config, loader, cleanup\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/internal/initwd/version_required.go",
    "content": "package initwd\n\nimport (\n\t\"fmt\"\n\n\tversion \"github.com/hashicorp/go-version\"\n\t\"github.com/hashicorp/terraform/internal/earlyconfig\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n\ttfversion \"github.com/hashicorp/terraform/version\"\n)\n\n// CheckCoreVersionRequirements visits each of the modules in the given\n// early configuration tree and verifies that any given Core version constraints\n// match with the version of Terraform Core that is being used.\n//\n// The returned diagnostics will contain errors if any constraints do not match.\n// The returned diagnostics might also return warnings, which should be\n// displayed to the user.\nfunc CheckCoreVersionRequirements(earlyConfig *earlyconfig.Config) tfdiags.Diagnostics {\n\tif earlyConfig == nil {\n\t\treturn nil\n\t}\n\n\tvar diags tfdiags.Diagnostics\n\tmodule := earlyConfig.Module\n\n\tvar constraints version.Constraints\n\tfor _, constraintStr := range module.RequiredCore {\n\t\tconstraint, err := version.NewConstraint(constraintStr)\n\t\tif err != nil {\n\t\t\t// Unfortunately the early config parser doesn't preserve a source\n\t\t\t// location for this, so we're unable to indicate a specific\n\t\t\t// location where this constraint came from, but we can at least\n\t\t\t// say which module set it.\n\t\t\tswitch {\n\t\t\tcase len(earlyConfig.Path) == 0:\n\t\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\t\ttfdiags.Error,\n\t\t\t\t\t\"Invalid provider version constraint\",\n\t\t\t\t\tfmt.Sprintf(\"Invalid version core constraint %q in the root module.\", constraintStr),\n\t\t\t\t))\n\t\t\tdefault:\n\t\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\t\ttfdiags.Error,\n\t\t\t\t\t\"Invalid provider version constraint\",\n\t\t\t\t\tfmt.Sprintf(\"Invalid version core constraint %q in %s.\", constraintStr, earlyConfig.Path),\n\t\t\t\t))\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\tconstraints = append(constraints, constraint...)\n\t}\n\n\tif !constraints.Check(tfversion.SemVer) {\n\t\tswitch {\n\t\tcase len(earlyConfig.Path) == 0:\n\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\ttfdiags.Error,\n\t\t\t\t\"Unsupported Terraform Core version\",\n\t\t\t\tfmt.Sprintf(\n\t\t\t\t\t\"This configuration does not support Terraform version %s. To proceed, either choose another supported Terraform version or update the root module's version constraint. Version constraints are normally set for good reason, so updating the constraint may lead to other errors or unexpected behavior.\",\n\t\t\t\t\ttfversion.String(),\n\t\t\t\t),\n\t\t\t))\n\t\tdefault:\n\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\ttfdiags.Error,\n\t\t\t\t\"Unsupported Terraform Core version\",\n\t\t\t\tfmt.Sprintf(\n\t\t\t\t\t\"Module %s (from %q) does not support Terraform version %s. To proceed, either choose another supported Terraform version or update the module's version constraint. Version constraints are normally set for good reason, so updating the constraint may lead to other errors or unexpected behavior.\",\n\t\t\t\t\tearlyConfig.Path, earlyConfig.SourceAddr, tfversion.String(),\n\t\t\t\t),\n\t\t\t))\n\t\t}\n\t}\n\n\tfor _, c := range earlyConfig.Children {\n\t\tchildDiags := CheckCoreVersionRequirements(c)\n\t\tdiags = diags.Append(childDiags)\n\t}\n\n\treturn diags\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/internal/modsdir/doc.go",
    "content": "// Package modsdir is an internal package containing the model types used to\n// represent the manifest of modules in a local modules cache directory.\npackage modsdir\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/internal/modsdir/manifest.go",
    "content": "package modsdir\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"log\"\n\t\"os\"\n\t\"path/filepath\"\n\n\tversion \"github.com/hashicorp/go-version\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n)\n\n// Record represents some metadata about an installed module, as part\n// of a ModuleManifest.\ntype Record struct {\n\t// Key is a unique identifier for this particular module, based on its\n\t// position within the static module tree.\n\tKey string `json:\"Key\"`\n\n\t// SourceAddr is the source address given for this module in configuration.\n\t// This is used only to detect if the source was changed in configuration\n\t// since the module was last installed, which means that the installer\n\t// must re-install it.\n\tSourceAddr string `json:\"Source\"`\n\n\t// Version is the exact version of the module, which results from parsing\n\t// VersionStr. nil for un-versioned modules.\n\tVersion *version.Version `json:\"-\"`\n\n\t// VersionStr is the version specifier string. This is used only for\n\t// serialization in snapshots and should not be accessed or updated\n\t// by any other codepaths; use \"Version\" instead.\n\tVersionStr string `json:\"Version,omitempty\"`\n\n\t// Dir is the path to the local directory where the module is installed.\n\tDir string `json:\"Dir\"`\n}\n\n// Manifest is a map used to keep track of the filesystem locations\n// and other metadata about installed modules.\n//\n// The configuration loader refers to this, while the module installer updates\n// it to reflect any changes to the installed modules.\ntype Manifest map[string]Record\n\nfunc (m Manifest) ModuleKey(path addrs.Module) string {\n\treturn path.String()\n}\n\n// manifestSnapshotFile is an internal struct used only to assist in our JSON\n// serialization of manifest snapshots. It should not be used for any other\n// purpose.\ntype manifestSnapshotFile struct {\n\tRecords []Record `json:\"Modules\"`\n}\n\nfunc ReadManifestSnapshot(r io.Reader) (Manifest, error) {\n\tsrc, err := ioutil.ReadAll(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif len(src) == 0 {\n\t\t// This should never happen, but we'll tolerate it as if it were\n\t\t// a valid empty JSON object.\n\t\treturn make(Manifest), nil\n\t}\n\n\tvar read manifestSnapshotFile\n\terr = json.Unmarshal(src, &read)\n\n\tnew := make(Manifest)\n\tfor _, record := range read.Records {\n\t\tif record.VersionStr != \"\" {\n\t\t\trecord.Version, err = version.NewVersion(record.VersionStr)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"invalid version %q for %s: %s\", record.VersionStr, record.Key, err)\n\t\t\t}\n\t\t}\n\t\tif _, exists := new[record.Key]; exists {\n\t\t\t// This should never happen in any valid file, so we'll catch it\n\t\t\t// and report it to avoid confusing/undefined behavior if the\n\t\t\t// snapshot file was edited incorrectly outside of Terraform.\n\t\t\treturn nil, fmt.Errorf(\"snapshot file contains two records for path %s\", record.Key)\n\t\t}\n\t\tnew[record.Key] = record\n\t}\n\treturn new, nil\n}\n\nfunc ReadManifestSnapshotForDir(dir string) (Manifest, error) {\n\tfn := filepath.Join(dir, ManifestSnapshotFilename)\n\tr, err := os.Open(fn)\n\tif err != nil {\n\t\tif os.IsNotExist(err) {\n\t\t\treturn make(Manifest), nil // missing file is okay and treated as empty\n\t\t}\n\t\treturn nil, err\n\t}\n\treturn ReadManifestSnapshot(r)\n}\n\nfunc (m Manifest) WriteSnapshot(w io.Writer) error {\n\tvar write manifestSnapshotFile\n\n\tfor _, record := range m {\n\t\t// Make sure VersionStr is in sync with Version, since we encourage\n\t\t// callers to manipulate Version and ignore VersionStr.\n\t\tif record.Version != nil {\n\t\t\trecord.VersionStr = record.Version.String()\n\t\t} else {\n\t\t\trecord.VersionStr = \"\"\n\t\t}\n\t\twrite.Records = append(write.Records, record)\n\t}\n\n\tsrc, err := json.Marshal(write)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t_, err = w.Write(src)\n\treturn err\n}\n\nfunc (m Manifest) WriteSnapshotToDir(dir string) error {\n\tfn := filepath.Join(dir, ManifestSnapshotFilename)\n\tlog.Printf(\"[TRACE] modsdir: writing modules manifest to %s\", fn)\n\tw, err := os.Create(fn)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn m.WriteSnapshot(w)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/internal/modsdir/paths.go",
    "content": "package modsdir\n\nconst ManifestSnapshotFilename = \"modules.json\"\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/internal/tfplugin5/tfplugin5.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// source: tfplugin5.proto\n\npackage tfplugin5\n\nimport proto \"github.com/golang/protobuf/proto\"\nimport fmt \"fmt\"\nimport math \"math\"\n\nimport (\n\tcontext \"golang.org/x/net/context\"\n\tgrpc \"google.golang.org/grpc\"\n)\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar _ = proto.Marshal\nvar _ = fmt.Errorf\nvar _ = math.Inf\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package\n\ntype Diagnostic_Severity int32\n\nconst (\n\tDiagnostic_INVALID Diagnostic_Severity = 0\n\tDiagnostic_ERROR   Diagnostic_Severity = 1\n\tDiagnostic_WARNING Diagnostic_Severity = 2\n)\n\nvar Diagnostic_Severity_name = map[int32]string{\n\t0: \"INVALID\",\n\t1: \"ERROR\",\n\t2: \"WARNING\",\n}\nvar Diagnostic_Severity_value = map[string]int32{\n\t\"INVALID\": 0,\n\t\"ERROR\":   1,\n\t\"WARNING\": 2,\n}\n\nfunc (x Diagnostic_Severity) String() string {\n\treturn proto.EnumName(Diagnostic_Severity_name, int32(x))\n}\nfunc (Diagnostic_Severity) EnumDescriptor() ([]byte, []int) {\n\treturn fileDescriptor_tfplugin5_56820f4fb67360c5, []int{1, 0}\n}\n\ntype Schema_NestedBlock_NestingMode int32\n\nconst (\n\tSchema_NestedBlock_INVALID Schema_NestedBlock_NestingMode = 0\n\tSchema_NestedBlock_SINGLE  Schema_NestedBlock_NestingMode = 1\n\tSchema_NestedBlock_LIST    Schema_NestedBlock_NestingMode = 2\n\tSchema_NestedBlock_SET     Schema_NestedBlock_NestingMode = 3\n\tSchema_NestedBlock_MAP     Schema_NestedBlock_NestingMode = 4\n\tSchema_NestedBlock_GROUP   Schema_NestedBlock_NestingMode = 5\n)\n\nvar Schema_NestedBlock_NestingMode_name = map[int32]string{\n\t0: \"INVALID\",\n\t1: \"SINGLE\",\n\t2: \"LIST\",\n\t3: \"SET\",\n\t4: \"MAP\",\n\t5: \"GROUP\",\n}\nvar Schema_NestedBlock_NestingMode_value = map[string]int32{\n\t\"INVALID\": 0,\n\t\"SINGLE\":  1,\n\t\"LIST\":    2,\n\t\"SET\":     3,\n\t\"MAP\":     4,\n\t\"GROUP\":   5,\n}\n\nfunc (x Schema_NestedBlock_NestingMode) String() string {\n\treturn proto.EnumName(Schema_NestedBlock_NestingMode_name, int32(x))\n}\nfunc (Schema_NestedBlock_NestingMode) EnumDescriptor() ([]byte, []int) {\n\treturn fileDescriptor_tfplugin5_56820f4fb67360c5, []int{5, 2, 0}\n}\n\n// DynamicValue is an opaque encoding of terraform data, with the field name\n// indicating the encoding scheme used.\ntype DynamicValue struct {\n\tMsgpack              []byte   `protobuf:\"bytes,1,opt,name=msgpack,proto3\" json:\"msgpack,omitempty\"`\n\tJson                 []byte   `protobuf:\"bytes,2,opt,name=json,proto3\" json:\"json,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *DynamicValue) Reset()         { *m = DynamicValue{} }\nfunc (m *DynamicValue) String() string { return proto.CompactTextString(m) }\nfunc (*DynamicValue) ProtoMessage()    {}\nfunc (*DynamicValue) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_tfplugin5_56820f4fb67360c5, []int{0}\n}\nfunc (m *DynamicValue) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_DynamicValue.Unmarshal(m, b)\n}\nfunc (m *DynamicValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_DynamicValue.Marshal(b, m, deterministic)\n}\nfunc (dst *DynamicValue) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_DynamicValue.Merge(dst, src)\n}\nfunc (m *DynamicValue) XXX_Size() int {\n\treturn xxx_messageInfo_DynamicValue.Size(m)\n}\nfunc (m *DynamicValue) XXX_DiscardUnknown() {\n\txxx_messageInfo_DynamicValue.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_DynamicValue proto.InternalMessageInfo\n\nfunc (m *DynamicValue) GetMsgpack() []byte {\n\tif m != nil {\n\t\treturn m.Msgpack\n\t}\n\treturn nil\n}\n\nfunc (m *DynamicValue) GetJson() []byte {\n\tif m != nil {\n\t\treturn m.Json\n\t}\n\treturn nil\n}\n\ntype Diagnostic struct {\n\tSeverity             Diagnostic_Severity `protobuf:\"varint,1,opt,name=severity,proto3,enum=tfplugin5.Diagnostic_Severity\" json:\"severity,omitempty\"`\n\tSummary              string              `protobuf:\"bytes,2,opt,name=summary,proto3\" json:\"summary,omitempty\"`\n\tDetail               string              `protobuf:\"bytes,3,opt,name=detail,proto3\" json:\"detail,omitempty\"`\n\tAttribute            *AttributePath      `protobuf:\"bytes,4,opt,name=attribute,proto3\" json:\"attribute,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}            `json:\"-\"`\n\tXXX_unrecognized     []byte              `json:\"-\"`\n\tXXX_sizecache        int32               `json:\"-\"`\n}\n\nfunc (m *Diagnostic) Reset()         { *m = Diagnostic{} }\nfunc (m *Diagnostic) String() string { return proto.CompactTextString(m) }\nfunc (*Diagnostic) ProtoMessage()    {}\nfunc (*Diagnostic) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_tfplugin5_56820f4fb67360c5, []int{1}\n}\nfunc (m *Diagnostic) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_Diagnostic.Unmarshal(m, b)\n}\nfunc (m *Diagnostic) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_Diagnostic.Marshal(b, m, deterministic)\n}\nfunc (dst *Diagnostic) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Diagnostic.Merge(dst, src)\n}\nfunc (m *Diagnostic) XXX_Size() int {\n\treturn xxx_messageInfo_Diagnostic.Size(m)\n}\nfunc (m *Diagnostic) XXX_DiscardUnknown() {\n\txxx_messageInfo_Diagnostic.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Diagnostic proto.InternalMessageInfo\n\nfunc (m *Diagnostic) GetSeverity() Diagnostic_Severity {\n\tif m != nil {\n\t\treturn m.Severity\n\t}\n\treturn Diagnostic_INVALID\n}\n\nfunc (m *Diagnostic) GetSummary() string {\n\tif m != nil {\n\t\treturn m.Summary\n\t}\n\treturn \"\"\n}\n\nfunc (m *Diagnostic) GetDetail() string {\n\tif m != nil {\n\t\treturn m.Detail\n\t}\n\treturn \"\"\n}\n\nfunc (m *Diagnostic) GetAttribute() *AttributePath {\n\tif m != nil {\n\t\treturn m.Attribute\n\t}\n\treturn nil\n}\n\ntype AttributePath struct {\n\tSteps                []*AttributePath_Step `protobuf:\"bytes,1,rep,name=steps,proto3\" json:\"steps,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}              `json:\"-\"`\n\tXXX_unrecognized     []byte                `json:\"-\"`\n\tXXX_sizecache        int32                 `json:\"-\"`\n}\n\nfunc (m *AttributePath) Reset()         { *m = AttributePath{} }\nfunc (m *AttributePath) String() string { return proto.CompactTextString(m) }\nfunc (*AttributePath) ProtoMessage()    {}\nfunc (*AttributePath) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_tfplugin5_56820f4fb67360c5, []int{2}\n}\nfunc (m *AttributePath) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_AttributePath.Unmarshal(m, b)\n}\nfunc (m *AttributePath) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_AttributePath.Marshal(b, m, deterministic)\n}\nfunc (dst *AttributePath) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_AttributePath.Merge(dst, src)\n}\nfunc (m *AttributePath) XXX_Size() int {\n\treturn xxx_messageInfo_AttributePath.Size(m)\n}\nfunc (m *AttributePath) XXX_DiscardUnknown() {\n\txxx_messageInfo_AttributePath.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_AttributePath proto.InternalMessageInfo\n\nfunc (m *AttributePath) GetSteps() []*AttributePath_Step {\n\tif m != nil {\n\t\treturn m.Steps\n\t}\n\treturn nil\n}\n\ntype AttributePath_Step struct {\n\t// Types that are valid to be assigned to Selector:\n\t//\t*AttributePath_Step_AttributeName\n\t//\t*AttributePath_Step_ElementKeyString\n\t//\t*AttributePath_Step_ElementKeyInt\n\tSelector             isAttributePath_Step_Selector `protobuf_oneof:\"selector\"`\n\tXXX_NoUnkeyedLiteral struct{}                      `json:\"-\"`\n\tXXX_unrecognized     []byte                        `json:\"-\"`\n\tXXX_sizecache        int32                         `json:\"-\"`\n}\n\nfunc (m *AttributePath_Step) Reset()         { *m = AttributePath_Step{} }\nfunc (m *AttributePath_Step) String() string { return proto.CompactTextString(m) }\nfunc (*AttributePath_Step) ProtoMessage()    {}\nfunc (*AttributePath_Step) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_tfplugin5_56820f4fb67360c5, []int{2, 0}\n}\nfunc (m *AttributePath_Step) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_AttributePath_Step.Unmarshal(m, b)\n}\nfunc (m *AttributePath_Step) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_AttributePath_Step.Marshal(b, m, deterministic)\n}\nfunc (dst *AttributePath_Step) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_AttributePath_Step.Merge(dst, src)\n}\nfunc (m *AttributePath_Step) XXX_Size() int {\n\treturn xxx_messageInfo_AttributePath_Step.Size(m)\n}\nfunc (m *AttributePath_Step) XXX_DiscardUnknown() {\n\txxx_messageInfo_AttributePath_Step.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_AttributePath_Step proto.InternalMessageInfo\n\ntype isAttributePath_Step_Selector interface {\n\tisAttributePath_Step_Selector()\n}\n\ntype AttributePath_Step_AttributeName struct {\n\tAttributeName string `protobuf:\"bytes,1,opt,name=attribute_name,json=attributeName,proto3,oneof\"`\n}\n\ntype AttributePath_Step_ElementKeyString struct {\n\tElementKeyString string `protobuf:\"bytes,2,opt,name=element_key_string,json=elementKeyString,proto3,oneof\"`\n}\n\ntype AttributePath_Step_ElementKeyInt struct {\n\tElementKeyInt int64 `protobuf:\"varint,3,opt,name=element_key_int,json=elementKeyInt,proto3,oneof\"`\n}\n\nfunc (*AttributePath_Step_AttributeName) isAttributePath_Step_Selector() {}\n\nfunc (*AttributePath_Step_ElementKeyString) isAttributePath_Step_Selector() {}\n\nfunc (*AttributePath_Step_ElementKeyInt) isAttributePath_Step_Selector() {}\n\nfunc (m *AttributePath_Step) GetSelector() isAttributePath_Step_Selector {\n\tif m != nil {\n\t\treturn m.Selector\n\t}\n\treturn nil\n}\n\nfunc (m *AttributePath_Step) GetAttributeName() string {\n\tif x, ok := m.GetSelector().(*AttributePath_Step_AttributeName); ok {\n\t\treturn x.AttributeName\n\t}\n\treturn \"\"\n}\n\nfunc (m *AttributePath_Step) GetElementKeyString() string {\n\tif x, ok := m.GetSelector().(*AttributePath_Step_ElementKeyString); ok {\n\t\treturn x.ElementKeyString\n\t}\n\treturn \"\"\n}\n\nfunc (m *AttributePath_Step) GetElementKeyInt() int64 {\n\tif x, ok := m.GetSelector().(*AttributePath_Step_ElementKeyInt); ok {\n\t\treturn x.ElementKeyInt\n\t}\n\treturn 0\n}\n\n// XXX_OneofFuncs is for the internal use of the proto package.\nfunc (*AttributePath_Step) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {\n\treturn _AttributePath_Step_OneofMarshaler, _AttributePath_Step_OneofUnmarshaler, _AttributePath_Step_OneofSizer, []interface{}{\n\t\t(*AttributePath_Step_AttributeName)(nil),\n\t\t(*AttributePath_Step_ElementKeyString)(nil),\n\t\t(*AttributePath_Step_ElementKeyInt)(nil),\n\t}\n}\n\nfunc _AttributePath_Step_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {\n\tm := msg.(*AttributePath_Step)\n\t// selector\n\tswitch x := m.Selector.(type) {\n\tcase *AttributePath_Step_AttributeName:\n\t\tb.EncodeVarint(1<<3 | proto.WireBytes)\n\t\tb.EncodeStringBytes(x.AttributeName)\n\tcase *AttributePath_Step_ElementKeyString:\n\t\tb.EncodeVarint(2<<3 | proto.WireBytes)\n\t\tb.EncodeStringBytes(x.ElementKeyString)\n\tcase *AttributePath_Step_ElementKeyInt:\n\t\tb.EncodeVarint(3<<3 | proto.WireVarint)\n\t\tb.EncodeVarint(uint64(x.ElementKeyInt))\n\tcase nil:\n\tdefault:\n\t\treturn fmt.Errorf(\"AttributePath_Step.Selector has unexpected type %T\", x)\n\t}\n\treturn nil\n}\n\nfunc _AttributePath_Step_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {\n\tm := msg.(*AttributePath_Step)\n\tswitch tag {\n\tcase 1: // selector.attribute_name\n\t\tif wire != proto.WireBytes {\n\t\t\treturn true, proto.ErrInternalBadWireType\n\t\t}\n\t\tx, err := b.DecodeStringBytes()\n\t\tm.Selector = &AttributePath_Step_AttributeName{x}\n\t\treturn true, err\n\tcase 2: // selector.element_key_string\n\t\tif wire != proto.WireBytes {\n\t\t\treturn true, proto.ErrInternalBadWireType\n\t\t}\n\t\tx, err := b.DecodeStringBytes()\n\t\tm.Selector = &AttributePath_Step_ElementKeyString{x}\n\t\treturn true, err\n\tcase 3: // selector.element_key_int\n\t\tif wire != proto.WireVarint {\n\t\t\treturn true, proto.ErrInternalBadWireType\n\t\t}\n\t\tx, err := b.DecodeVarint()\n\t\tm.Selector = &AttributePath_Step_ElementKeyInt{int64(x)}\n\t\treturn true, err\n\tdefault:\n\t\treturn false, nil\n\t}\n}\n\nfunc _AttributePath_Step_OneofSizer(msg proto.Message) (n int) {\n\tm := msg.(*AttributePath_Step)\n\t// selector\n\tswitch x := m.Selector.(type) {\n\tcase *AttributePath_Step_AttributeName:\n\t\tn += 1 // tag and wire\n\t\tn += proto.SizeVarint(uint64(len(x.AttributeName)))\n\t\tn += len(x.AttributeName)\n\tcase *AttributePath_Step_ElementKeyString:\n\t\tn += 1 // tag and wire\n\t\tn += proto.SizeVarint(uint64(len(x.ElementKeyString)))\n\t\tn += len(x.ElementKeyString)\n\tcase *AttributePath_Step_ElementKeyInt:\n\t\tn += 1 // tag and wire\n\t\tn += proto.SizeVarint(uint64(x.ElementKeyInt))\n\tcase nil:\n\tdefault:\n\t\tpanic(fmt.Sprintf(\"proto: unexpected type %T in oneof\", x))\n\t}\n\treturn n\n}\n\ntype Stop struct {\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *Stop) Reset()         { *m = Stop{} }\nfunc (m *Stop) String() string { return proto.CompactTextString(m) }\nfunc (*Stop) ProtoMessage()    {}\nfunc (*Stop) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_tfplugin5_56820f4fb67360c5, []int{3}\n}\nfunc (m *Stop) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_Stop.Unmarshal(m, b)\n}\nfunc (m *Stop) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_Stop.Marshal(b, m, deterministic)\n}\nfunc (dst *Stop) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Stop.Merge(dst, src)\n}\nfunc (m *Stop) XXX_Size() int {\n\treturn xxx_messageInfo_Stop.Size(m)\n}\nfunc (m *Stop) XXX_DiscardUnknown() {\n\txxx_messageInfo_Stop.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Stop proto.InternalMessageInfo\n\ntype Stop_Request struct {\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *Stop_Request) Reset()         { *m = Stop_Request{} }\nfunc (m *Stop_Request) String() string { return proto.CompactTextString(m) }\nfunc (*Stop_Request) ProtoMessage()    {}\nfunc (*Stop_Request) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_tfplugin5_56820f4fb67360c5, []int{3, 0}\n}\nfunc (m *Stop_Request) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_Stop_Request.Unmarshal(m, b)\n}\nfunc (m *Stop_Request) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_Stop_Request.Marshal(b, m, deterministic)\n}\nfunc (dst *Stop_Request) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Stop_Request.Merge(dst, src)\n}\nfunc (m *Stop_Request) XXX_Size() int {\n\treturn xxx_messageInfo_Stop_Request.Size(m)\n}\nfunc (m *Stop_Request) XXX_DiscardUnknown() {\n\txxx_messageInfo_Stop_Request.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Stop_Request proto.InternalMessageInfo\n\ntype Stop_Response struct {\n\tError                string   `protobuf:\"bytes,1,opt,name=Error,proto3\" json:\"Error,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *Stop_Response) Reset()         { *m = Stop_Response{} }\nfunc (m *Stop_Response) String() string { return proto.CompactTextString(m) }\nfunc (*Stop_Response) ProtoMessage()    {}\nfunc (*Stop_Response) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_tfplugin5_56820f4fb67360c5, []int{3, 1}\n}\nfunc (m *Stop_Response) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_Stop_Response.Unmarshal(m, b)\n}\nfunc (m *Stop_Response) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_Stop_Response.Marshal(b, m, deterministic)\n}\nfunc (dst *Stop_Response) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Stop_Response.Merge(dst, src)\n}\nfunc (m *Stop_Response) XXX_Size() int {\n\treturn xxx_messageInfo_Stop_Response.Size(m)\n}\nfunc (m *Stop_Response) XXX_DiscardUnknown() {\n\txxx_messageInfo_Stop_Response.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Stop_Response proto.InternalMessageInfo\n\nfunc (m *Stop_Response) GetError() string {\n\tif m != nil {\n\t\treturn m.Error\n\t}\n\treturn \"\"\n}\n\n// RawState holds the stored state for a resource to be upgraded by the\n// provider. It can be in one of two formats, the current json encoded format\n// in bytes, or the legacy flatmap format as a map of strings.\ntype RawState struct {\n\tJson                 []byte            `protobuf:\"bytes,1,opt,name=json,proto3\" json:\"json,omitempty\"`\n\tFlatmap              map[string]string `protobuf:\"bytes,2,rep,name=flatmap,proto3\" json:\"flatmap,omitempty\" protobuf_key:\"bytes,1,opt,name=key,proto3\" protobuf_val:\"bytes,2,opt,name=value,proto3\"`\n\tXXX_NoUnkeyedLiteral struct{}          `json:\"-\"`\n\tXXX_unrecognized     []byte            `json:\"-\"`\n\tXXX_sizecache        int32             `json:\"-\"`\n}\n\nfunc (m *RawState) Reset()         { *m = RawState{} }\nfunc (m *RawState) String() string { return proto.CompactTextString(m) }\nfunc (*RawState) ProtoMessage()    {}\nfunc (*RawState) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_tfplugin5_56820f4fb67360c5, []int{4}\n}\nfunc (m *RawState) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_RawState.Unmarshal(m, b)\n}\nfunc (m *RawState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_RawState.Marshal(b, m, deterministic)\n}\nfunc (dst *RawState) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_RawState.Merge(dst, src)\n}\nfunc (m *RawState) XXX_Size() int {\n\treturn xxx_messageInfo_RawState.Size(m)\n}\nfunc (m *RawState) XXX_DiscardUnknown() {\n\txxx_messageInfo_RawState.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_RawState proto.InternalMessageInfo\n\nfunc (m *RawState) GetJson() []byte {\n\tif m != nil {\n\t\treturn m.Json\n\t}\n\treturn nil\n}\n\nfunc (m *RawState) GetFlatmap() map[string]string {\n\tif m != nil {\n\t\treturn m.Flatmap\n\t}\n\treturn nil\n}\n\n// Schema is the configuration schema for a Resource, Provider, or Provisioner.\ntype Schema struct {\n\t// The version of the schema.\n\t// Schemas are versioned, so that providers can upgrade a saved resource\n\t// state when the schema is changed.\n\tVersion int64 `protobuf:\"varint,1,opt,name=version,proto3\" json:\"version,omitempty\"`\n\t// Block is the top level configuration block for this schema.\n\tBlock                *Schema_Block `protobuf:\"bytes,2,opt,name=block,proto3\" json:\"block,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}      `json:\"-\"`\n\tXXX_unrecognized     []byte        `json:\"-\"`\n\tXXX_sizecache        int32         `json:\"-\"`\n}\n\nfunc (m *Schema) Reset()         { *m = Schema{} }\nfunc (m *Schema) String() string { return proto.CompactTextString(m) }\nfunc (*Schema) ProtoMessage()    {}\nfunc (*Schema) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_tfplugin5_56820f4fb67360c5, []int{5}\n}\nfunc (m *Schema) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_Schema.Unmarshal(m, b)\n}\nfunc (m *Schema) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_Schema.Marshal(b, m, deterministic)\n}\nfunc (dst *Schema) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Schema.Merge(dst, src)\n}\nfunc (m *Schema) XXX_Size() int {\n\treturn xxx_messageInfo_Schema.Size(m)\n}\nfunc (m *Schema) XXX_DiscardUnknown() {\n\txxx_messageInfo_Schema.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Schema proto.InternalMessageInfo\n\nfunc (m *Schema) GetVersion() int64 {\n\tif m != nil {\n\t\treturn m.Version\n\t}\n\treturn 0\n}\n\nfunc (m *Schema) GetBlock() *Schema_Block {\n\tif m != nil {\n\t\treturn m.Block\n\t}\n\treturn nil\n}\n\ntype Schema_Block struct {\n\tVersion              int64                 `protobuf:\"varint,1,opt,name=version,proto3\" json:\"version,omitempty\"`\n\tAttributes           []*Schema_Attribute   `protobuf:\"bytes,2,rep,name=attributes,proto3\" json:\"attributes,omitempty\"`\n\tBlockTypes           []*Schema_NestedBlock `protobuf:\"bytes,3,rep,name=block_types,json=blockTypes,proto3\" json:\"block_types,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}              `json:\"-\"`\n\tXXX_unrecognized     []byte                `json:\"-\"`\n\tXXX_sizecache        int32                 `json:\"-\"`\n}\n\nfunc (m *Schema_Block) Reset()         { *m = Schema_Block{} }\nfunc (m *Schema_Block) String() string { return proto.CompactTextString(m) }\nfunc (*Schema_Block) ProtoMessage()    {}\nfunc (*Schema_Block) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_tfplugin5_56820f4fb67360c5, []int{5, 0}\n}\nfunc (m *Schema_Block) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_Schema_Block.Unmarshal(m, b)\n}\nfunc (m *Schema_Block) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_Schema_Block.Marshal(b, m, deterministic)\n}\nfunc (dst *Schema_Block) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Schema_Block.Merge(dst, src)\n}\nfunc (m *Schema_Block) XXX_Size() int {\n\treturn xxx_messageInfo_Schema_Block.Size(m)\n}\nfunc (m *Schema_Block) XXX_DiscardUnknown() {\n\txxx_messageInfo_Schema_Block.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Schema_Block proto.InternalMessageInfo\n\nfunc (m *Schema_Block) GetVersion() int64 {\n\tif m != nil {\n\t\treturn m.Version\n\t}\n\treturn 0\n}\n\nfunc (m *Schema_Block) GetAttributes() []*Schema_Attribute {\n\tif m != nil {\n\t\treturn m.Attributes\n\t}\n\treturn nil\n}\n\nfunc (m *Schema_Block) GetBlockTypes() []*Schema_NestedBlock {\n\tif m != nil {\n\t\treturn m.BlockTypes\n\t}\n\treturn nil\n}\n\ntype Schema_Attribute struct {\n\tName                 string   `protobuf:\"bytes,1,opt,name=name,proto3\" json:\"name,omitempty\"`\n\tType                 []byte   `protobuf:\"bytes,2,opt,name=type,proto3\" json:\"type,omitempty\"`\n\tDescription          string   `protobuf:\"bytes,3,opt,name=description,proto3\" json:\"description,omitempty\"`\n\tRequired             bool     `protobuf:\"varint,4,opt,name=required,proto3\" json:\"required,omitempty\"`\n\tOptional             bool     `protobuf:\"varint,5,opt,name=optional,proto3\" json:\"optional,omitempty\"`\n\tComputed             bool     `protobuf:\"varint,6,opt,name=computed,proto3\" json:\"computed,omitempty\"`\n\tSensitive            bool     `protobuf:\"varint,7,opt,name=sensitive,proto3\" json:\"sensitive,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *Schema_Attribute) Reset()         { *m = Schema_Attribute{} }\nfunc (m *Schema_Attribute) String() string { return proto.CompactTextString(m) }\nfunc (*Schema_Attribute) ProtoMessage()    {}\nfunc (*Schema_Attribute) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_tfplugin5_56820f4fb67360c5, []int{5, 1}\n}\nfunc (m *Schema_Attribute) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_Schema_Attribute.Unmarshal(m, b)\n}\nfunc (m *Schema_Attribute) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_Schema_Attribute.Marshal(b, m, deterministic)\n}\nfunc (dst *Schema_Attribute) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Schema_Attribute.Merge(dst, src)\n}\nfunc (m *Schema_Attribute) XXX_Size() int {\n\treturn xxx_messageInfo_Schema_Attribute.Size(m)\n}\nfunc (m *Schema_Attribute) XXX_DiscardUnknown() {\n\txxx_messageInfo_Schema_Attribute.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Schema_Attribute proto.InternalMessageInfo\n\nfunc (m *Schema_Attribute) GetName() string {\n\tif m != nil {\n\t\treturn m.Name\n\t}\n\treturn \"\"\n}\n\nfunc (m *Schema_Attribute) GetType() []byte {\n\tif m != nil {\n\t\treturn m.Type\n\t}\n\treturn nil\n}\n\nfunc (m *Schema_Attribute) GetDescription() string {\n\tif m != nil {\n\t\treturn m.Description\n\t}\n\treturn \"\"\n}\n\nfunc (m *Schema_Attribute) GetRequired() bool {\n\tif m != nil {\n\t\treturn m.Required\n\t}\n\treturn false\n}\n\nfunc (m *Schema_Attribute) GetOptional() bool {\n\tif m != nil {\n\t\treturn m.Optional\n\t}\n\treturn false\n}\n\nfunc (m *Schema_Attribute) GetComputed() bool {\n\tif m != nil {\n\t\treturn m.Computed\n\t}\n\treturn false\n}\n\nfunc (m *Schema_Attribute) GetSensitive() bool {\n\tif m != nil {\n\t\treturn m.Sensitive\n\t}\n\treturn false\n}\n\ntype Schema_NestedBlock struct {\n\tTypeName             string                         `protobuf:\"bytes,1,opt,name=type_name,json=typeName,proto3\" json:\"type_name,omitempty\"`\n\tBlock                *Schema_Block                  `protobuf:\"bytes,2,opt,name=block,proto3\" json:\"block,omitempty\"`\n\tNesting              Schema_NestedBlock_NestingMode `protobuf:\"varint,3,opt,name=nesting,proto3,enum=tfplugin5.Schema_NestedBlock_NestingMode\" json:\"nesting,omitempty\"`\n\tMinItems             int64                          `protobuf:\"varint,4,opt,name=min_items,json=minItems,proto3\" json:\"min_items,omitempty\"`\n\tMaxItems             int64                          `protobuf:\"varint,5,opt,name=max_items,json=maxItems,proto3\" json:\"max_items,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}                       `json:\"-\"`\n\tXXX_unrecognized     []byte                         `json:\"-\"`\n\tXXX_sizecache        int32                          `json:\"-\"`\n}\n\nfunc (m *Schema_NestedBlock) Reset()         { *m = Schema_NestedBlock{} }\nfunc (m *Schema_NestedBlock) String() string { return proto.CompactTextString(m) }\nfunc (*Schema_NestedBlock) ProtoMessage()    {}\nfunc (*Schema_NestedBlock) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_tfplugin5_56820f4fb67360c5, []int{5, 2}\n}\nfunc (m *Schema_NestedBlock) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_Schema_NestedBlock.Unmarshal(m, b)\n}\nfunc (m *Schema_NestedBlock) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_Schema_NestedBlock.Marshal(b, m, deterministic)\n}\nfunc (dst *Schema_NestedBlock) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Schema_NestedBlock.Merge(dst, src)\n}\nfunc (m *Schema_NestedBlock) XXX_Size() int {\n\treturn xxx_messageInfo_Schema_NestedBlock.Size(m)\n}\nfunc (m *Schema_NestedBlock) XXX_DiscardUnknown() {\n\txxx_messageInfo_Schema_NestedBlock.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Schema_NestedBlock proto.InternalMessageInfo\n\nfunc (m *Schema_NestedBlock) GetTypeName() string {\n\tif m != nil {\n\t\treturn m.TypeName\n\t}\n\treturn \"\"\n}\n\nfunc (m *Schema_NestedBlock) GetBlock() *Schema_Block {\n\tif m != nil {\n\t\treturn m.Block\n\t}\n\treturn nil\n}\n\nfunc (m *Schema_NestedBlock) GetNesting() Schema_NestedBlock_NestingMode {\n\tif m != nil {\n\t\treturn m.Nesting\n\t}\n\treturn Schema_NestedBlock_INVALID\n}\n\nfunc (m *Schema_NestedBlock) GetMinItems() int64 {\n\tif m != nil {\n\t\treturn m.MinItems\n\t}\n\treturn 0\n}\n\nfunc (m *Schema_NestedBlock) GetMaxItems() int64 {\n\tif m != nil {\n\t\treturn m.MaxItems\n\t}\n\treturn 0\n}\n\ntype GetProviderSchema struct {\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *GetProviderSchema) Reset()         { *m = GetProviderSchema{} }\nfunc (m *GetProviderSchema) String() string { return proto.CompactTextString(m) }\nfunc (*GetProviderSchema) ProtoMessage()    {}\nfunc (*GetProviderSchema) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_tfplugin5_56820f4fb67360c5, []int{6}\n}\nfunc (m *GetProviderSchema) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_GetProviderSchema.Unmarshal(m, b)\n}\nfunc (m *GetProviderSchema) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_GetProviderSchema.Marshal(b, m, deterministic)\n}\nfunc (dst *GetProviderSchema) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_GetProviderSchema.Merge(dst, src)\n}\nfunc (m *GetProviderSchema) XXX_Size() int {\n\treturn xxx_messageInfo_GetProviderSchema.Size(m)\n}\nfunc (m *GetProviderSchema) XXX_DiscardUnknown() {\n\txxx_messageInfo_GetProviderSchema.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_GetProviderSchema proto.InternalMessageInfo\n\ntype GetProviderSchema_Request struct {\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *GetProviderSchema_Request) Reset()         { *m = GetProviderSchema_Request{} }\nfunc (m *GetProviderSchema_Request) String() string { return proto.CompactTextString(m) }\nfunc (*GetProviderSchema_Request) ProtoMessage()    {}\nfunc (*GetProviderSchema_Request) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_tfplugin5_56820f4fb67360c5, []int{6, 0}\n}\nfunc (m *GetProviderSchema_Request) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_GetProviderSchema_Request.Unmarshal(m, b)\n}\nfunc (m *GetProviderSchema_Request) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_GetProviderSchema_Request.Marshal(b, m, deterministic)\n}\nfunc (dst *GetProviderSchema_Request) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_GetProviderSchema_Request.Merge(dst, src)\n}\nfunc (m *GetProviderSchema_Request) XXX_Size() int {\n\treturn xxx_messageInfo_GetProviderSchema_Request.Size(m)\n}\nfunc (m *GetProviderSchema_Request) XXX_DiscardUnknown() {\n\txxx_messageInfo_GetProviderSchema_Request.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_GetProviderSchema_Request proto.InternalMessageInfo\n\ntype GetProviderSchema_Response struct {\n\tProvider             *Schema            `protobuf:\"bytes,1,opt,name=provider,proto3\" json:\"provider,omitempty\"`\n\tResourceSchemas      map[string]*Schema `protobuf:\"bytes,2,rep,name=resource_schemas,json=resourceSchemas,proto3\" json:\"resource_schemas,omitempty\" protobuf_key:\"bytes,1,opt,name=key,proto3\" protobuf_val:\"bytes,2,opt,name=value,proto3\"`\n\tDataSourceSchemas    map[string]*Schema `protobuf:\"bytes,3,rep,name=data_source_schemas,json=dataSourceSchemas,proto3\" json:\"data_source_schemas,omitempty\" protobuf_key:\"bytes,1,opt,name=key,proto3\" protobuf_val:\"bytes,2,opt,name=value,proto3\"`\n\tDiagnostics          []*Diagnostic      `protobuf:\"bytes,4,rep,name=diagnostics,proto3\" json:\"diagnostics,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}           `json:\"-\"`\n\tXXX_unrecognized     []byte             `json:\"-\"`\n\tXXX_sizecache        int32              `json:\"-\"`\n}\n\nfunc (m *GetProviderSchema_Response) Reset()         { *m = GetProviderSchema_Response{} }\nfunc (m *GetProviderSchema_Response) String() string { return proto.CompactTextString(m) }\nfunc (*GetProviderSchema_Response) ProtoMessage()    {}\nfunc (*GetProviderSchema_Response) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_tfplugin5_56820f4fb67360c5, []int{6, 1}\n}\nfunc (m *GetProviderSchema_Response) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_GetProviderSchema_Response.Unmarshal(m, b)\n}\nfunc (m *GetProviderSchema_Response) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_GetProviderSchema_Response.Marshal(b, m, deterministic)\n}\nfunc (dst *GetProviderSchema_Response) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_GetProviderSchema_Response.Merge(dst, src)\n}\nfunc (m *GetProviderSchema_Response) XXX_Size() int {\n\treturn xxx_messageInfo_GetProviderSchema_Response.Size(m)\n}\nfunc (m *GetProviderSchema_Response) XXX_DiscardUnknown() {\n\txxx_messageInfo_GetProviderSchema_Response.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_GetProviderSchema_Response proto.InternalMessageInfo\n\nfunc (m *GetProviderSchema_Response) GetProvider() *Schema {\n\tif m != nil {\n\t\treturn m.Provider\n\t}\n\treturn nil\n}\n\nfunc (m *GetProviderSchema_Response) GetResourceSchemas() map[string]*Schema {\n\tif m != nil {\n\t\treturn m.ResourceSchemas\n\t}\n\treturn nil\n}\n\nfunc (m *GetProviderSchema_Response) GetDataSourceSchemas() map[string]*Schema {\n\tif m != nil {\n\t\treturn m.DataSourceSchemas\n\t}\n\treturn nil\n}\n\nfunc (m *GetProviderSchema_Response) GetDiagnostics() []*Diagnostic {\n\tif m != nil {\n\t\treturn m.Diagnostics\n\t}\n\treturn nil\n}\n\ntype PrepareProviderConfig struct {\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *PrepareProviderConfig) Reset()         { *m = PrepareProviderConfig{} }\nfunc (m *PrepareProviderConfig) String() string { return proto.CompactTextString(m) }\nfunc (*PrepareProviderConfig) ProtoMessage()    {}\nfunc (*PrepareProviderConfig) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_tfplugin5_56820f4fb67360c5, []int{7}\n}\nfunc (m *PrepareProviderConfig) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_PrepareProviderConfig.Unmarshal(m, b)\n}\nfunc (m *PrepareProviderConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_PrepareProviderConfig.Marshal(b, m, deterministic)\n}\nfunc (dst *PrepareProviderConfig) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_PrepareProviderConfig.Merge(dst, src)\n}\nfunc (m *PrepareProviderConfig) XXX_Size() int {\n\treturn xxx_messageInfo_PrepareProviderConfig.Size(m)\n}\nfunc (m *PrepareProviderConfig) XXX_DiscardUnknown() {\n\txxx_messageInfo_PrepareProviderConfig.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_PrepareProviderConfig proto.InternalMessageInfo\n\ntype PrepareProviderConfig_Request struct {\n\tConfig               *DynamicValue `protobuf:\"bytes,1,opt,name=config,proto3\" json:\"config,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}      `json:\"-\"`\n\tXXX_unrecognized     []byte        `json:\"-\"`\n\tXXX_sizecache        int32         `json:\"-\"`\n}\n\nfunc (m *PrepareProviderConfig_Request) Reset()         { *m = PrepareProviderConfig_Request{} }\nfunc (m *PrepareProviderConfig_Request) String() string { return proto.CompactTextString(m) }\nfunc (*PrepareProviderConfig_Request) ProtoMessage()    {}\nfunc (*PrepareProviderConfig_Request) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_tfplugin5_56820f4fb67360c5, []int{7, 0}\n}\nfunc (m *PrepareProviderConfig_Request) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_PrepareProviderConfig_Request.Unmarshal(m, b)\n}\nfunc (m *PrepareProviderConfig_Request) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_PrepareProviderConfig_Request.Marshal(b, m, deterministic)\n}\nfunc (dst *PrepareProviderConfig_Request) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_PrepareProviderConfig_Request.Merge(dst, src)\n}\nfunc (m *PrepareProviderConfig_Request) XXX_Size() int {\n\treturn xxx_messageInfo_PrepareProviderConfig_Request.Size(m)\n}\nfunc (m *PrepareProviderConfig_Request) XXX_DiscardUnknown() {\n\txxx_messageInfo_PrepareProviderConfig_Request.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_PrepareProviderConfig_Request proto.InternalMessageInfo\n\nfunc (m *PrepareProviderConfig_Request) GetConfig() *DynamicValue {\n\tif m != nil {\n\t\treturn m.Config\n\t}\n\treturn nil\n}\n\ntype PrepareProviderConfig_Response struct {\n\tPreparedConfig       *DynamicValue `protobuf:\"bytes,1,opt,name=prepared_config,json=preparedConfig,proto3\" json:\"prepared_config,omitempty\"`\n\tDiagnostics          []*Diagnostic `protobuf:\"bytes,2,rep,name=diagnostics,proto3\" json:\"diagnostics,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}      `json:\"-\"`\n\tXXX_unrecognized     []byte        `json:\"-\"`\n\tXXX_sizecache        int32         `json:\"-\"`\n}\n\nfunc (m *PrepareProviderConfig_Response) Reset()         { *m = PrepareProviderConfig_Response{} }\nfunc (m *PrepareProviderConfig_Response) String() string { return proto.CompactTextString(m) }\nfunc (*PrepareProviderConfig_Response) ProtoMessage()    {}\nfunc (*PrepareProviderConfig_Response) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_tfplugin5_56820f4fb67360c5, []int{7, 1}\n}\nfunc (m *PrepareProviderConfig_Response) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_PrepareProviderConfig_Response.Unmarshal(m, b)\n}\nfunc (m *PrepareProviderConfig_Response) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_PrepareProviderConfig_Response.Marshal(b, m, deterministic)\n}\nfunc (dst *PrepareProviderConfig_Response) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_PrepareProviderConfig_Response.Merge(dst, src)\n}\nfunc (m *PrepareProviderConfig_Response) XXX_Size() int {\n\treturn xxx_messageInfo_PrepareProviderConfig_Response.Size(m)\n}\nfunc (m *PrepareProviderConfig_Response) XXX_DiscardUnknown() {\n\txxx_messageInfo_PrepareProviderConfig_Response.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_PrepareProviderConfig_Response proto.InternalMessageInfo\n\nfunc (m *PrepareProviderConfig_Response) GetPreparedConfig() *DynamicValue {\n\tif m != nil {\n\t\treturn m.PreparedConfig\n\t}\n\treturn nil\n}\n\nfunc (m *PrepareProviderConfig_Response) GetDiagnostics() []*Diagnostic {\n\tif m != nil {\n\t\treturn m.Diagnostics\n\t}\n\treturn nil\n}\n\ntype UpgradeResourceState struct {\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *UpgradeResourceState) Reset()         { *m = UpgradeResourceState{} }\nfunc (m *UpgradeResourceState) String() string { return proto.CompactTextString(m) }\nfunc (*UpgradeResourceState) ProtoMessage()    {}\nfunc (*UpgradeResourceState) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_tfplugin5_56820f4fb67360c5, []int{8}\n}\nfunc (m *UpgradeResourceState) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_UpgradeResourceState.Unmarshal(m, b)\n}\nfunc (m *UpgradeResourceState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_UpgradeResourceState.Marshal(b, m, deterministic)\n}\nfunc (dst *UpgradeResourceState) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_UpgradeResourceState.Merge(dst, src)\n}\nfunc (m *UpgradeResourceState) XXX_Size() int {\n\treturn xxx_messageInfo_UpgradeResourceState.Size(m)\n}\nfunc (m *UpgradeResourceState) XXX_DiscardUnknown() {\n\txxx_messageInfo_UpgradeResourceState.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_UpgradeResourceState proto.InternalMessageInfo\n\ntype UpgradeResourceState_Request struct {\n\tTypeName string `protobuf:\"bytes,1,opt,name=type_name,json=typeName,proto3\" json:\"type_name,omitempty\"`\n\t// version is the schema_version number recorded in the state file\n\tVersion int64 `protobuf:\"varint,2,opt,name=version,proto3\" json:\"version,omitempty\"`\n\t// raw_state is the raw states as stored for the resource.  Core does\n\t// not have access to the schema of prior_version, so it's the\n\t// provider's responsibility to interpret this value using the\n\t// appropriate older schema. The raw_state will be the json encoded\n\t// state, or a legacy flat-mapped format.\n\tRawState             *RawState `protobuf:\"bytes,3,opt,name=raw_state,json=rawState,proto3\" json:\"raw_state,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}  `json:\"-\"`\n\tXXX_unrecognized     []byte    `json:\"-\"`\n\tXXX_sizecache        int32     `json:\"-\"`\n}\n\nfunc (m *UpgradeResourceState_Request) Reset()         { *m = UpgradeResourceState_Request{} }\nfunc (m *UpgradeResourceState_Request) String() string { return proto.CompactTextString(m) }\nfunc (*UpgradeResourceState_Request) ProtoMessage()    {}\nfunc (*UpgradeResourceState_Request) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_tfplugin5_56820f4fb67360c5, []int{8, 0}\n}\nfunc (m *UpgradeResourceState_Request) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_UpgradeResourceState_Request.Unmarshal(m, b)\n}\nfunc (m *UpgradeResourceState_Request) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_UpgradeResourceState_Request.Marshal(b, m, deterministic)\n}\nfunc (dst *UpgradeResourceState_Request) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_UpgradeResourceState_Request.Merge(dst, src)\n}\nfunc (m *UpgradeResourceState_Request) XXX_Size() int {\n\treturn xxx_messageInfo_UpgradeResourceState_Request.Size(m)\n}\nfunc (m *UpgradeResourceState_Request) XXX_DiscardUnknown() {\n\txxx_messageInfo_UpgradeResourceState_Request.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_UpgradeResourceState_Request proto.InternalMessageInfo\n\nfunc (m *UpgradeResourceState_Request) GetTypeName() string {\n\tif m != nil {\n\t\treturn m.TypeName\n\t}\n\treturn \"\"\n}\n\nfunc (m *UpgradeResourceState_Request) GetVersion() int64 {\n\tif m != nil {\n\t\treturn m.Version\n\t}\n\treturn 0\n}\n\nfunc (m *UpgradeResourceState_Request) GetRawState() *RawState {\n\tif m != nil {\n\t\treturn m.RawState\n\t}\n\treturn nil\n}\n\ntype UpgradeResourceState_Response struct {\n\t// new_state is a msgpack-encoded data structure that, when interpreted with\n\t// the _current_ schema for this resource type, is functionally equivalent to\n\t// that which was given in prior_state_raw.\n\tUpgradedState *DynamicValue `protobuf:\"bytes,1,opt,name=upgraded_state,json=upgradedState,proto3\" json:\"upgraded_state,omitempty\"`\n\t// diagnostics describes any errors encountered during migration that could not\n\t// be safely resolved, and warnings about any possibly-risky assumptions made\n\t// in the upgrade process.\n\tDiagnostics          []*Diagnostic `protobuf:\"bytes,2,rep,name=diagnostics,proto3\" json:\"diagnostics,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}      `json:\"-\"`\n\tXXX_unrecognized     []byte        `json:\"-\"`\n\tXXX_sizecache        int32         `json:\"-\"`\n}\n\nfunc (m *UpgradeResourceState_Response) Reset()         { *m = UpgradeResourceState_Response{} }\nfunc (m *UpgradeResourceState_Response) String() string { return proto.CompactTextString(m) }\nfunc (*UpgradeResourceState_Response) ProtoMessage()    {}\nfunc (*UpgradeResourceState_Response) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_tfplugin5_56820f4fb67360c5, []int{8, 1}\n}\nfunc (m *UpgradeResourceState_Response) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_UpgradeResourceState_Response.Unmarshal(m, b)\n}\nfunc (m *UpgradeResourceState_Response) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_UpgradeResourceState_Response.Marshal(b, m, deterministic)\n}\nfunc (dst *UpgradeResourceState_Response) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_UpgradeResourceState_Response.Merge(dst, src)\n}\nfunc (m *UpgradeResourceState_Response) XXX_Size() int {\n\treturn xxx_messageInfo_UpgradeResourceState_Response.Size(m)\n}\nfunc (m *UpgradeResourceState_Response) XXX_DiscardUnknown() {\n\txxx_messageInfo_UpgradeResourceState_Response.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_UpgradeResourceState_Response proto.InternalMessageInfo\n\nfunc (m *UpgradeResourceState_Response) GetUpgradedState() *DynamicValue {\n\tif m != nil {\n\t\treturn m.UpgradedState\n\t}\n\treturn nil\n}\n\nfunc (m *UpgradeResourceState_Response) GetDiagnostics() []*Diagnostic {\n\tif m != nil {\n\t\treturn m.Diagnostics\n\t}\n\treturn nil\n}\n\ntype ValidateResourceTypeConfig struct {\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *ValidateResourceTypeConfig) Reset()         { *m = ValidateResourceTypeConfig{} }\nfunc (m *ValidateResourceTypeConfig) String() string { return proto.CompactTextString(m) }\nfunc (*ValidateResourceTypeConfig) ProtoMessage()    {}\nfunc (*ValidateResourceTypeConfig) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_tfplugin5_56820f4fb67360c5, []int{9}\n}\nfunc (m *ValidateResourceTypeConfig) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_ValidateResourceTypeConfig.Unmarshal(m, b)\n}\nfunc (m *ValidateResourceTypeConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_ValidateResourceTypeConfig.Marshal(b, m, deterministic)\n}\nfunc (dst *ValidateResourceTypeConfig) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_ValidateResourceTypeConfig.Merge(dst, src)\n}\nfunc (m *ValidateResourceTypeConfig) XXX_Size() int {\n\treturn xxx_messageInfo_ValidateResourceTypeConfig.Size(m)\n}\nfunc (m *ValidateResourceTypeConfig) XXX_DiscardUnknown() {\n\txxx_messageInfo_ValidateResourceTypeConfig.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_ValidateResourceTypeConfig proto.InternalMessageInfo\n\ntype ValidateResourceTypeConfig_Request struct {\n\tTypeName             string        `protobuf:\"bytes,1,opt,name=type_name,json=typeName,proto3\" json:\"type_name,omitempty\"`\n\tConfig               *DynamicValue `protobuf:\"bytes,2,opt,name=config,proto3\" json:\"config,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}      `json:\"-\"`\n\tXXX_unrecognized     []byte        `json:\"-\"`\n\tXXX_sizecache        int32         `json:\"-\"`\n}\n\nfunc (m *ValidateResourceTypeConfig_Request) Reset()         { *m = ValidateResourceTypeConfig_Request{} }\nfunc (m *ValidateResourceTypeConfig_Request) String() string { return proto.CompactTextString(m) }\nfunc (*ValidateResourceTypeConfig_Request) ProtoMessage()    {}\nfunc (*ValidateResourceTypeConfig_Request) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_tfplugin5_56820f4fb67360c5, []int{9, 0}\n}\nfunc (m *ValidateResourceTypeConfig_Request) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_ValidateResourceTypeConfig_Request.Unmarshal(m, b)\n}\nfunc (m *ValidateResourceTypeConfig_Request) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_ValidateResourceTypeConfig_Request.Marshal(b, m, deterministic)\n}\nfunc (dst *ValidateResourceTypeConfig_Request) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_ValidateResourceTypeConfig_Request.Merge(dst, src)\n}\nfunc (m *ValidateResourceTypeConfig_Request) XXX_Size() int {\n\treturn xxx_messageInfo_ValidateResourceTypeConfig_Request.Size(m)\n}\nfunc (m *ValidateResourceTypeConfig_Request) XXX_DiscardUnknown() {\n\txxx_messageInfo_ValidateResourceTypeConfig_Request.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_ValidateResourceTypeConfig_Request proto.InternalMessageInfo\n\nfunc (m *ValidateResourceTypeConfig_Request) GetTypeName() string {\n\tif m != nil {\n\t\treturn m.TypeName\n\t}\n\treturn \"\"\n}\n\nfunc (m *ValidateResourceTypeConfig_Request) GetConfig() *DynamicValue {\n\tif m != nil {\n\t\treturn m.Config\n\t}\n\treturn nil\n}\n\ntype ValidateResourceTypeConfig_Response struct {\n\tDiagnostics          []*Diagnostic `protobuf:\"bytes,1,rep,name=diagnostics,proto3\" json:\"diagnostics,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}      `json:\"-\"`\n\tXXX_unrecognized     []byte        `json:\"-\"`\n\tXXX_sizecache        int32         `json:\"-\"`\n}\n\nfunc (m *ValidateResourceTypeConfig_Response) Reset()         { *m = ValidateResourceTypeConfig_Response{} }\nfunc (m *ValidateResourceTypeConfig_Response) String() string { return proto.CompactTextString(m) }\nfunc (*ValidateResourceTypeConfig_Response) ProtoMessage()    {}\nfunc (*ValidateResourceTypeConfig_Response) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_tfplugin5_56820f4fb67360c5, []int{9, 1}\n}\nfunc (m *ValidateResourceTypeConfig_Response) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_ValidateResourceTypeConfig_Response.Unmarshal(m, b)\n}\nfunc (m *ValidateResourceTypeConfig_Response) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_ValidateResourceTypeConfig_Response.Marshal(b, m, deterministic)\n}\nfunc (dst *ValidateResourceTypeConfig_Response) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_ValidateResourceTypeConfig_Response.Merge(dst, src)\n}\nfunc (m *ValidateResourceTypeConfig_Response) XXX_Size() int {\n\treturn xxx_messageInfo_ValidateResourceTypeConfig_Response.Size(m)\n}\nfunc (m *ValidateResourceTypeConfig_Response) XXX_DiscardUnknown() {\n\txxx_messageInfo_ValidateResourceTypeConfig_Response.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_ValidateResourceTypeConfig_Response proto.InternalMessageInfo\n\nfunc (m *ValidateResourceTypeConfig_Response) GetDiagnostics() []*Diagnostic {\n\tif m != nil {\n\t\treturn m.Diagnostics\n\t}\n\treturn nil\n}\n\ntype ValidateDataSourceConfig struct {\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *ValidateDataSourceConfig) Reset()         { *m = ValidateDataSourceConfig{} }\nfunc (m *ValidateDataSourceConfig) String() string { return proto.CompactTextString(m) }\nfunc (*ValidateDataSourceConfig) ProtoMessage()    {}\nfunc (*ValidateDataSourceConfig) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_tfplugin5_56820f4fb67360c5, []int{10}\n}\nfunc (m *ValidateDataSourceConfig) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_ValidateDataSourceConfig.Unmarshal(m, b)\n}\nfunc (m *ValidateDataSourceConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_ValidateDataSourceConfig.Marshal(b, m, deterministic)\n}\nfunc (dst *ValidateDataSourceConfig) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_ValidateDataSourceConfig.Merge(dst, src)\n}\nfunc (m *ValidateDataSourceConfig) XXX_Size() int {\n\treturn xxx_messageInfo_ValidateDataSourceConfig.Size(m)\n}\nfunc (m *ValidateDataSourceConfig) XXX_DiscardUnknown() {\n\txxx_messageInfo_ValidateDataSourceConfig.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_ValidateDataSourceConfig proto.InternalMessageInfo\n\ntype ValidateDataSourceConfig_Request struct {\n\tTypeName             string        `protobuf:\"bytes,1,opt,name=type_name,json=typeName,proto3\" json:\"type_name,omitempty\"`\n\tConfig               *DynamicValue `protobuf:\"bytes,2,opt,name=config,proto3\" json:\"config,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}      `json:\"-\"`\n\tXXX_unrecognized     []byte        `json:\"-\"`\n\tXXX_sizecache        int32         `json:\"-\"`\n}\n\nfunc (m *ValidateDataSourceConfig_Request) Reset()         { *m = ValidateDataSourceConfig_Request{} }\nfunc (m *ValidateDataSourceConfig_Request) String() string { return proto.CompactTextString(m) }\nfunc (*ValidateDataSourceConfig_Request) ProtoMessage()    {}\nfunc (*ValidateDataSourceConfig_Request) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_tfplugin5_56820f4fb67360c5, []int{10, 0}\n}\nfunc (m *ValidateDataSourceConfig_Request) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_ValidateDataSourceConfig_Request.Unmarshal(m, b)\n}\nfunc (m *ValidateDataSourceConfig_Request) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_ValidateDataSourceConfig_Request.Marshal(b, m, deterministic)\n}\nfunc (dst *ValidateDataSourceConfig_Request) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_ValidateDataSourceConfig_Request.Merge(dst, src)\n}\nfunc (m *ValidateDataSourceConfig_Request) XXX_Size() int {\n\treturn xxx_messageInfo_ValidateDataSourceConfig_Request.Size(m)\n}\nfunc (m *ValidateDataSourceConfig_Request) XXX_DiscardUnknown() {\n\txxx_messageInfo_ValidateDataSourceConfig_Request.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_ValidateDataSourceConfig_Request proto.InternalMessageInfo\n\nfunc (m *ValidateDataSourceConfig_Request) GetTypeName() string {\n\tif m != nil {\n\t\treturn m.TypeName\n\t}\n\treturn \"\"\n}\n\nfunc (m *ValidateDataSourceConfig_Request) GetConfig() *DynamicValue {\n\tif m != nil {\n\t\treturn m.Config\n\t}\n\treturn nil\n}\n\ntype ValidateDataSourceConfig_Response struct {\n\tDiagnostics          []*Diagnostic `protobuf:\"bytes,1,rep,name=diagnostics,proto3\" json:\"diagnostics,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}      `json:\"-\"`\n\tXXX_unrecognized     []byte        `json:\"-\"`\n\tXXX_sizecache        int32         `json:\"-\"`\n}\n\nfunc (m *ValidateDataSourceConfig_Response) Reset()         { *m = ValidateDataSourceConfig_Response{} }\nfunc (m *ValidateDataSourceConfig_Response) String() string { return proto.CompactTextString(m) }\nfunc (*ValidateDataSourceConfig_Response) ProtoMessage()    {}\nfunc (*ValidateDataSourceConfig_Response) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_tfplugin5_56820f4fb67360c5, []int{10, 1}\n}\nfunc (m *ValidateDataSourceConfig_Response) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_ValidateDataSourceConfig_Response.Unmarshal(m, b)\n}\nfunc (m *ValidateDataSourceConfig_Response) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_ValidateDataSourceConfig_Response.Marshal(b, m, deterministic)\n}\nfunc (dst *ValidateDataSourceConfig_Response) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_ValidateDataSourceConfig_Response.Merge(dst, src)\n}\nfunc (m *ValidateDataSourceConfig_Response) XXX_Size() int {\n\treturn xxx_messageInfo_ValidateDataSourceConfig_Response.Size(m)\n}\nfunc (m *ValidateDataSourceConfig_Response) XXX_DiscardUnknown() {\n\txxx_messageInfo_ValidateDataSourceConfig_Response.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_ValidateDataSourceConfig_Response proto.InternalMessageInfo\n\nfunc (m *ValidateDataSourceConfig_Response) GetDiagnostics() []*Diagnostic {\n\tif m != nil {\n\t\treturn m.Diagnostics\n\t}\n\treturn nil\n}\n\ntype Configure struct {\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *Configure) Reset()         { *m = Configure{} }\nfunc (m *Configure) String() string { return proto.CompactTextString(m) }\nfunc (*Configure) ProtoMessage()    {}\nfunc (*Configure) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_tfplugin5_56820f4fb67360c5, []int{11}\n}\nfunc (m *Configure) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_Configure.Unmarshal(m, b)\n}\nfunc (m *Configure) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_Configure.Marshal(b, m, deterministic)\n}\nfunc (dst *Configure) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Configure.Merge(dst, src)\n}\nfunc (m *Configure) XXX_Size() int {\n\treturn xxx_messageInfo_Configure.Size(m)\n}\nfunc (m *Configure) XXX_DiscardUnknown() {\n\txxx_messageInfo_Configure.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Configure proto.InternalMessageInfo\n\ntype Configure_Request struct {\n\tTerraformVersion     string        `protobuf:\"bytes,1,opt,name=terraform_version,json=terraformVersion,proto3\" json:\"terraform_version,omitempty\"`\n\tConfig               *DynamicValue `protobuf:\"bytes,2,opt,name=config,proto3\" json:\"config,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}      `json:\"-\"`\n\tXXX_unrecognized     []byte        `json:\"-\"`\n\tXXX_sizecache        int32         `json:\"-\"`\n}\n\nfunc (m *Configure_Request) Reset()         { *m = Configure_Request{} }\nfunc (m *Configure_Request) String() string { return proto.CompactTextString(m) }\nfunc (*Configure_Request) ProtoMessage()    {}\nfunc (*Configure_Request) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_tfplugin5_56820f4fb67360c5, []int{11, 0}\n}\nfunc (m *Configure_Request) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_Configure_Request.Unmarshal(m, b)\n}\nfunc (m *Configure_Request) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_Configure_Request.Marshal(b, m, deterministic)\n}\nfunc (dst *Configure_Request) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Configure_Request.Merge(dst, src)\n}\nfunc (m *Configure_Request) XXX_Size() int {\n\treturn xxx_messageInfo_Configure_Request.Size(m)\n}\nfunc (m *Configure_Request) XXX_DiscardUnknown() {\n\txxx_messageInfo_Configure_Request.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Configure_Request proto.InternalMessageInfo\n\nfunc (m *Configure_Request) GetTerraformVersion() string {\n\tif m != nil {\n\t\treturn m.TerraformVersion\n\t}\n\treturn \"\"\n}\n\nfunc (m *Configure_Request) GetConfig() *DynamicValue {\n\tif m != nil {\n\t\treturn m.Config\n\t}\n\treturn nil\n}\n\ntype Configure_Response struct {\n\tDiagnostics          []*Diagnostic `protobuf:\"bytes,1,rep,name=diagnostics,proto3\" json:\"diagnostics,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}      `json:\"-\"`\n\tXXX_unrecognized     []byte        `json:\"-\"`\n\tXXX_sizecache        int32         `json:\"-\"`\n}\n\nfunc (m *Configure_Response) Reset()         { *m = Configure_Response{} }\nfunc (m *Configure_Response) String() string { return proto.CompactTextString(m) }\nfunc (*Configure_Response) ProtoMessage()    {}\nfunc (*Configure_Response) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_tfplugin5_56820f4fb67360c5, []int{11, 1}\n}\nfunc (m *Configure_Response) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_Configure_Response.Unmarshal(m, b)\n}\nfunc (m *Configure_Response) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_Configure_Response.Marshal(b, m, deterministic)\n}\nfunc (dst *Configure_Response) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Configure_Response.Merge(dst, src)\n}\nfunc (m *Configure_Response) XXX_Size() int {\n\treturn xxx_messageInfo_Configure_Response.Size(m)\n}\nfunc (m *Configure_Response) XXX_DiscardUnknown() {\n\txxx_messageInfo_Configure_Response.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Configure_Response proto.InternalMessageInfo\n\nfunc (m *Configure_Response) GetDiagnostics() []*Diagnostic {\n\tif m != nil {\n\t\treturn m.Diagnostics\n\t}\n\treturn nil\n}\n\ntype ReadResource struct {\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *ReadResource) Reset()         { *m = ReadResource{} }\nfunc (m *ReadResource) String() string { return proto.CompactTextString(m) }\nfunc (*ReadResource) ProtoMessage()    {}\nfunc (*ReadResource) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_tfplugin5_56820f4fb67360c5, []int{12}\n}\nfunc (m *ReadResource) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_ReadResource.Unmarshal(m, b)\n}\nfunc (m *ReadResource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_ReadResource.Marshal(b, m, deterministic)\n}\nfunc (dst *ReadResource) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_ReadResource.Merge(dst, src)\n}\nfunc (m *ReadResource) XXX_Size() int {\n\treturn xxx_messageInfo_ReadResource.Size(m)\n}\nfunc (m *ReadResource) XXX_DiscardUnknown() {\n\txxx_messageInfo_ReadResource.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_ReadResource proto.InternalMessageInfo\n\ntype ReadResource_Request struct {\n\tTypeName             string        `protobuf:\"bytes,1,opt,name=type_name,json=typeName,proto3\" json:\"type_name,omitempty\"`\n\tCurrentState         *DynamicValue `protobuf:\"bytes,2,opt,name=current_state,json=currentState,proto3\" json:\"current_state,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}      `json:\"-\"`\n\tXXX_unrecognized     []byte        `json:\"-\"`\n\tXXX_sizecache        int32         `json:\"-\"`\n}\n\nfunc (m *ReadResource_Request) Reset()         { *m = ReadResource_Request{} }\nfunc (m *ReadResource_Request) String() string { return proto.CompactTextString(m) }\nfunc (*ReadResource_Request) ProtoMessage()    {}\nfunc (*ReadResource_Request) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_tfplugin5_56820f4fb67360c5, []int{12, 0}\n}\nfunc (m *ReadResource_Request) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_ReadResource_Request.Unmarshal(m, b)\n}\nfunc (m *ReadResource_Request) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_ReadResource_Request.Marshal(b, m, deterministic)\n}\nfunc (dst *ReadResource_Request) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_ReadResource_Request.Merge(dst, src)\n}\nfunc (m *ReadResource_Request) XXX_Size() int {\n\treturn xxx_messageInfo_ReadResource_Request.Size(m)\n}\nfunc (m *ReadResource_Request) XXX_DiscardUnknown() {\n\txxx_messageInfo_ReadResource_Request.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_ReadResource_Request proto.InternalMessageInfo\n\nfunc (m *ReadResource_Request) GetTypeName() string {\n\tif m != nil {\n\t\treturn m.TypeName\n\t}\n\treturn \"\"\n}\n\nfunc (m *ReadResource_Request) GetCurrentState() *DynamicValue {\n\tif m != nil {\n\t\treturn m.CurrentState\n\t}\n\treturn nil\n}\n\ntype ReadResource_Response struct {\n\tNewState             *DynamicValue `protobuf:\"bytes,1,opt,name=new_state,json=newState,proto3\" json:\"new_state,omitempty\"`\n\tDiagnostics          []*Diagnostic `protobuf:\"bytes,2,rep,name=diagnostics,proto3\" json:\"diagnostics,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}      `json:\"-\"`\n\tXXX_unrecognized     []byte        `json:\"-\"`\n\tXXX_sizecache        int32         `json:\"-\"`\n}\n\nfunc (m *ReadResource_Response) Reset()         { *m = ReadResource_Response{} }\nfunc (m *ReadResource_Response) String() string { return proto.CompactTextString(m) }\nfunc (*ReadResource_Response) ProtoMessage()    {}\nfunc (*ReadResource_Response) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_tfplugin5_56820f4fb67360c5, []int{12, 1}\n}\nfunc (m *ReadResource_Response) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_ReadResource_Response.Unmarshal(m, b)\n}\nfunc (m *ReadResource_Response) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_ReadResource_Response.Marshal(b, m, deterministic)\n}\nfunc (dst *ReadResource_Response) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_ReadResource_Response.Merge(dst, src)\n}\nfunc (m *ReadResource_Response) XXX_Size() int {\n\treturn xxx_messageInfo_ReadResource_Response.Size(m)\n}\nfunc (m *ReadResource_Response) XXX_DiscardUnknown() {\n\txxx_messageInfo_ReadResource_Response.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_ReadResource_Response proto.InternalMessageInfo\n\nfunc (m *ReadResource_Response) GetNewState() *DynamicValue {\n\tif m != nil {\n\t\treturn m.NewState\n\t}\n\treturn nil\n}\n\nfunc (m *ReadResource_Response) GetDiagnostics() []*Diagnostic {\n\tif m != nil {\n\t\treturn m.Diagnostics\n\t}\n\treturn nil\n}\n\ntype PlanResourceChange struct {\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *PlanResourceChange) Reset()         { *m = PlanResourceChange{} }\nfunc (m *PlanResourceChange) String() string { return proto.CompactTextString(m) }\nfunc (*PlanResourceChange) ProtoMessage()    {}\nfunc (*PlanResourceChange) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_tfplugin5_56820f4fb67360c5, []int{13}\n}\nfunc (m *PlanResourceChange) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_PlanResourceChange.Unmarshal(m, b)\n}\nfunc (m *PlanResourceChange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_PlanResourceChange.Marshal(b, m, deterministic)\n}\nfunc (dst *PlanResourceChange) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_PlanResourceChange.Merge(dst, src)\n}\nfunc (m *PlanResourceChange) XXX_Size() int {\n\treturn xxx_messageInfo_PlanResourceChange.Size(m)\n}\nfunc (m *PlanResourceChange) XXX_DiscardUnknown() {\n\txxx_messageInfo_PlanResourceChange.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_PlanResourceChange proto.InternalMessageInfo\n\ntype PlanResourceChange_Request struct {\n\tTypeName             string        `protobuf:\"bytes,1,opt,name=type_name,json=typeName,proto3\" json:\"type_name,omitempty\"`\n\tPriorState           *DynamicValue `protobuf:\"bytes,2,opt,name=prior_state,json=priorState,proto3\" json:\"prior_state,omitempty\"`\n\tProposedNewState     *DynamicValue `protobuf:\"bytes,3,opt,name=proposed_new_state,json=proposedNewState,proto3\" json:\"proposed_new_state,omitempty\"`\n\tConfig               *DynamicValue `protobuf:\"bytes,4,opt,name=config,proto3\" json:\"config,omitempty\"`\n\tPriorPrivate         []byte        `protobuf:\"bytes,5,opt,name=prior_private,json=priorPrivate,proto3\" json:\"prior_private,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}      `json:\"-\"`\n\tXXX_unrecognized     []byte        `json:\"-\"`\n\tXXX_sizecache        int32         `json:\"-\"`\n}\n\nfunc (m *PlanResourceChange_Request) Reset()         { *m = PlanResourceChange_Request{} }\nfunc (m *PlanResourceChange_Request) String() string { return proto.CompactTextString(m) }\nfunc (*PlanResourceChange_Request) ProtoMessage()    {}\nfunc (*PlanResourceChange_Request) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_tfplugin5_56820f4fb67360c5, []int{13, 0}\n}\nfunc (m *PlanResourceChange_Request) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_PlanResourceChange_Request.Unmarshal(m, b)\n}\nfunc (m *PlanResourceChange_Request) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_PlanResourceChange_Request.Marshal(b, m, deterministic)\n}\nfunc (dst *PlanResourceChange_Request) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_PlanResourceChange_Request.Merge(dst, src)\n}\nfunc (m *PlanResourceChange_Request) XXX_Size() int {\n\treturn xxx_messageInfo_PlanResourceChange_Request.Size(m)\n}\nfunc (m *PlanResourceChange_Request) XXX_DiscardUnknown() {\n\txxx_messageInfo_PlanResourceChange_Request.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_PlanResourceChange_Request proto.InternalMessageInfo\n\nfunc (m *PlanResourceChange_Request) GetTypeName() string {\n\tif m != nil {\n\t\treturn m.TypeName\n\t}\n\treturn \"\"\n}\n\nfunc (m *PlanResourceChange_Request) GetPriorState() *DynamicValue {\n\tif m != nil {\n\t\treturn m.PriorState\n\t}\n\treturn nil\n}\n\nfunc (m *PlanResourceChange_Request) GetProposedNewState() *DynamicValue {\n\tif m != nil {\n\t\treturn m.ProposedNewState\n\t}\n\treturn nil\n}\n\nfunc (m *PlanResourceChange_Request) GetConfig() *DynamicValue {\n\tif m != nil {\n\t\treturn m.Config\n\t}\n\treturn nil\n}\n\nfunc (m *PlanResourceChange_Request) GetPriorPrivate() []byte {\n\tif m != nil {\n\t\treturn m.PriorPrivate\n\t}\n\treturn nil\n}\n\ntype PlanResourceChange_Response struct {\n\tPlannedState    *DynamicValue    `protobuf:\"bytes,1,opt,name=planned_state,json=plannedState,proto3\" json:\"planned_state,omitempty\"`\n\tRequiresReplace []*AttributePath `protobuf:\"bytes,2,rep,name=requires_replace,json=requiresReplace,proto3\" json:\"requires_replace,omitempty\"`\n\tPlannedPrivate  []byte           `protobuf:\"bytes,3,opt,name=planned_private,json=plannedPrivate,proto3\" json:\"planned_private,omitempty\"`\n\tDiagnostics     []*Diagnostic    `protobuf:\"bytes,4,rep,name=diagnostics,proto3\" json:\"diagnostics,omitempty\"`\n\t// This may be set only by the helper/schema \"SDK\" in the main Terraform\n\t// repository, to request that Terraform Core >=0.12 permit additional\n\t// inconsistencies that can result from the legacy SDK type system\n\t// and its imprecise mapping to the >=0.12 type system.\n\t// The change in behavior implied by this flag makes sense only for the\n\t// specific details of the legacy SDK type system, and are not a general\n\t// mechanism to avoid proper type handling in providers.\n\t//\n\t//     ====              DO NOT USE THIS              ====\n\t//     ==== THIS MUST BE LEFT UNSET IN ALL OTHER SDKS ====\n\t//     ====              DO NOT USE THIS              ====\n\tLegacyTypeSystem     bool     `protobuf:\"varint,5,opt,name=legacy_type_system,json=legacyTypeSystem,proto3\" json:\"legacy_type_system,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *PlanResourceChange_Response) Reset()         { *m = PlanResourceChange_Response{} }\nfunc (m *PlanResourceChange_Response) String() string { return proto.CompactTextString(m) }\nfunc (*PlanResourceChange_Response) ProtoMessage()    {}\nfunc (*PlanResourceChange_Response) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_tfplugin5_56820f4fb67360c5, []int{13, 1}\n}\nfunc (m *PlanResourceChange_Response) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_PlanResourceChange_Response.Unmarshal(m, b)\n}\nfunc (m *PlanResourceChange_Response) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_PlanResourceChange_Response.Marshal(b, m, deterministic)\n}\nfunc (dst *PlanResourceChange_Response) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_PlanResourceChange_Response.Merge(dst, src)\n}\nfunc (m *PlanResourceChange_Response) XXX_Size() int {\n\treturn xxx_messageInfo_PlanResourceChange_Response.Size(m)\n}\nfunc (m *PlanResourceChange_Response) XXX_DiscardUnknown() {\n\txxx_messageInfo_PlanResourceChange_Response.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_PlanResourceChange_Response proto.InternalMessageInfo\n\nfunc (m *PlanResourceChange_Response) GetPlannedState() *DynamicValue {\n\tif m != nil {\n\t\treturn m.PlannedState\n\t}\n\treturn nil\n}\n\nfunc (m *PlanResourceChange_Response) GetRequiresReplace() []*AttributePath {\n\tif m != nil {\n\t\treturn m.RequiresReplace\n\t}\n\treturn nil\n}\n\nfunc (m *PlanResourceChange_Response) GetPlannedPrivate() []byte {\n\tif m != nil {\n\t\treturn m.PlannedPrivate\n\t}\n\treturn nil\n}\n\nfunc (m *PlanResourceChange_Response) GetDiagnostics() []*Diagnostic {\n\tif m != nil {\n\t\treturn m.Diagnostics\n\t}\n\treturn nil\n}\n\nfunc (m *PlanResourceChange_Response) GetLegacyTypeSystem() bool {\n\tif m != nil {\n\t\treturn m.LegacyTypeSystem\n\t}\n\treturn false\n}\n\ntype ApplyResourceChange struct {\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *ApplyResourceChange) Reset()         { *m = ApplyResourceChange{} }\nfunc (m *ApplyResourceChange) String() string { return proto.CompactTextString(m) }\nfunc (*ApplyResourceChange) ProtoMessage()    {}\nfunc (*ApplyResourceChange) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_tfplugin5_56820f4fb67360c5, []int{14}\n}\nfunc (m *ApplyResourceChange) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_ApplyResourceChange.Unmarshal(m, b)\n}\nfunc (m *ApplyResourceChange) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_ApplyResourceChange.Marshal(b, m, deterministic)\n}\nfunc (dst *ApplyResourceChange) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_ApplyResourceChange.Merge(dst, src)\n}\nfunc (m *ApplyResourceChange) XXX_Size() int {\n\treturn xxx_messageInfo_ApplyResourceChange.Size(m)\n}\nfunc (m *ApplyResourceChange) XXX_DiscardUnknown() {\n\txxx_messageInfo_ApplyResourceChange.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_ApplyResourceChange proto.InternalMessageInfo\n\ntype ApplyResourceChange_Request struct {\n\tTypeName             string        `protobuf:\"bytes,1,opt,name=type_name,json=typeName,proto3\" json:\"type_name,omitempty\"`\n\tPriorState           *DynamicValue `protobuf:\"bytes,2,opt,name=prior_state,json=priorState,proto3\" json:\"prior_state,omitempty\"`\n\tPlannedState         *DynamicValue `protobuf:\"bytes,3,opt,name=planned_state,json=plannedState,proto3\" json:\"planned_state,omitempty\"`\n\tConfig               *DynamicValue `protobuf:\"bytes,4,opt,name=config,proto3\" json:\"config,omitempty\"`\n\tPlannedPrivate       []byte        `protobuf:\"bytes,5,opt,name=planned_private,json=plannedPrivate,proto3\" json:\"planned_private,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}      `json:\"-\"`\n\tXXX_unrecognized     []byte        `json:\"-\"`\n\tXXX_sizecache        int32         `json:\"-\"`\n}\n\nfunc (m *ApplyResourceChange_Request) Reset()         { *m = ApplyResourceChange_Request{} }\nfunc (m *ApplyResourceChange_Request) String() string { return proto.CompactTextString(m) }\nfunc (*ApplyResourceChange_Request) ProtoMessage()    {}\nfunc (*ApplyResourceChange_Request) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_tfplugin5_56820f4fb67360c5, []int{14, 0}\n}\nfunc (m *ApplyResourceChange_Request) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_ApplyResourceChange_Request.Unmarshal(m, b)\n}\nfunc (m *ApplyResourceChange_Request) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_ApplyResourceChange_Request.Marshal(b, m, deterministic)\n}\nfunc (dst *ApplyResourceChange_Request) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_ApplyResourceChange_Request.Merge(dst, src)\n}\nfunc (m *ApplyResourceChange_Request) XXX_Size() int {\n\treturn xxx_messageInfo_ApplyResourceChange_Request.Size(m)\n}\nfunc (m *ApplyResourceChange_Request) XXX_DiscardUnknown() {\n\txxx_messageInfo_ApplyResourceChange_Request.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_ApplyResourceChange_Request proto.InternalMessageInfo\n\nfunc (m *ApplyResourceChange_Request) GetTypeName() string {\n\tif m != nil {\n\t\treturn m.TypeName\n\t}\n\treturn \"\"\n}\n\nfunc (m *ApplyResourceChange_Request) GetPriorState() *DynamicValue {\n\tif m != nil {\n\t\treturn m.PriorState\n\t}\n\treturn nil\n}\n\nfunc (m *ApplyResourceChange_Request) GetPlannedState() *DynamicValue {\n\tif m != nil {\n\t\treturn m.PlannedState\n\t}\n\treturn nil\n}\n\nfunc (m *ApplyResourceChange_Request) GetConfig() *DynamicValue {\n\tif m != nil {\n\t\treturn m.Config\n\t}\n\treturn nil\n}\n\nfunc (m *ApplyResourceChange_Request) GetPlannedPrivate() []byte {\n\tif m != nil {\n\t\treturn m.PlannedPrivate\n\t}\n\treturn nil\n}\n\ntype ApplyResourceChange_Response struct {\n\tNewState    *DynamicValue `protobuf:\"bytes,1,opt,name=new_state,json=newState,proto3\" json:\"new_state,omitempty\"`\n\tPrivate     []byte        `protobuf:\"bytes,2,opt,name=private,proto3\" json:\"private,omitempty\"`\n\tDiagnostics []*Diagnostic `protobuf:\"bytes,3,rep,name=diagnostics,proto3\" json:\"diagnostics,omitempty\"`\n\t// This may be set only by the helper/schema \"SDK\" in the main Terraform\n\t// repository, to request that Terraform Core >=0.12 permit additional\n\t// inconsistencies that can result from the legacy SDK type system\n\t// and its imprecise mapping to the >=0.12 type system.\n\t// The change in behavior implied by this flag makes sense only for the\n\t// specific details of the legacy SDK type system, and are not a general\n\t// mechanism to avoid proper type handling in providers.\n\t//\n\t//     ====              DO NOT USE THIS              ====\n\t//     ==== THIS MUST BE LEFT UNSET IN ALL OTHER SDKS ====\n\t//     ====              DO NOT USE THIS              ====\n\tLegacyTypeSystem     bool     `protobuf:\"varint,4,opt,name=legacy_type_system,json=legacyTypeSystem,proto3\" json:\"legacy_type_system,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *ApplyResourceChange_Response) Reset()         { *m = ApplyResourceChange_Response{} }\nfunc (m *ApplyResourceChange_Response) String() string { return proto.CompactTextString(m) }\nfunc (*ApplyResourceChange_Response) ProtoMessage()    {}\nfunc (*ApplyResourceChange_Response) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_tfplugin5_56820f4fb67360c5, []int{14, 1}\n}\nfunc (m *ApplyResourceChange_Response) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_ApplyResourceChange_Response.Unmarshal(m, b)\n}\nfunc (m *ApplyResourceChange_Response) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_ApplyResourceChange_Response.Marshal(b, m, deterministic)\n}\nfunc (dst *ApplyResourceChange_Response) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_ApplyResourceChange_Response.Merge(dst, src)\n}\nfunc (m *ApplyResourceChange_Response) XXX_Size() int {\n\treturn xxx_messageInfo_ApplyResourceChange_Response.Size(m)\n}\nfunc (m *ApplyResourceChange_Response) XXX_DiscardUnknown() {\n\txxx_messageInfo_ApplyResourceChange_Response.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_ApplyResourceChange_Response proto.InternalMessageInfo\n\nfunc (m *ApplyResourceChange_Response) GetNewState() *DynamicValue {\n\tif m != nil {\n\t\treturn m.NewState\n\t}\n\treturn nil\n}\n\nfunc (m *ApplyResourceChange_Response) GetPrivate() []byte {\n\tif m != nil {\n\t\treturn m.Private\n\t}\n\treturn nil\n}\n\nfunc (m *ApplyResourceChange_Response) GetDiagnostics() []*Diagnostic {\n\tif m != nil {\n\t\treturn m.Diagnostics\n\t}\n\treturn nil\n}\n\nfunc (m *ApplyResourceChange_Response) GetLegacyTypeSystem() bool {\n\tif m != nil {\n\t\treturn m.LegacyTypeSystem\n\t}\n\treturn false\n}\n\ntype ImportResourceState struct {\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *ImportResourceState) Reset()         { *m = ImportResourceState{} }\nfunc (m *ImportResourceState) String() string { return proto.CompactTextString(m) }\nfunc (*ImportResourceState) ProtoMessage()    {}\nfunc (*ImportResourceState) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_tfplugin5_56820f4fb67360c5, []int{15}\n}\nfunc (m *ImportResourceState) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_ImportResourceState.Unmarshal(m, b)\n}\nfunc (m *ImportResourceState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_ImportResourceState.Marshal(b, m, deterministic)\n}\nfunc (dst *ImportResourceState) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_ImportResourceState.Merge(dst, src)\n}\nfunc (m *ImportResourceState) XXX_Size() int {\n\treturn xxx_messageInfo_ImportResourceState.Size(m)\n}\nfunc (m *ImportResourceState) XXX_DiscardUnknown() {\n\txxx_messageInfo_ImportResourceState.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_ImportResourceState proto.InternalMessageInfo\n\ntype ImportResourceState_Request struct {\n\tTypeName             string   `protobuf:\"bytes,1,opt,name=type_name,json=typeName,proto3\" json:\"type_name,omitempty\"`\n\tId                   string   `protobuf:\"bytes,2,opt,name=id,proto3\" json:\"id,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *ImportResourceState_Request) Reset()         { *m = ImportResourceState_Request{} }\nfunc (m *ImportResourceState_Request) String() string { return proto.CompactTextString(m) }\nfunc (*ImportResourceState_Request) ProtoMessage()    {}\nfunc (*ImportResourceState_Request) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_tfplugin5_56820f4fb67360c5, []int{15, 0}\n}\nfunc (m *ImportResourceState_Request) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_ImportResourceState_Request.Unmarshal(m, b)\n}\nfunc (m *ImportResourceState_Request) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_ImportResourceState_Request.Marshal(b, m, deterministic)\n}\nfunc (dst *ImportResourceState_Request) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_ImportResourceState_Request.Merge(dst, src)\n}\nfunc (m *ImportResourceState_Request) XXX_Size() int {\n\treturn xxx_messageInfo_ImportResourceState_Request.Size(m)\n}\nfunc (m *ImportResourceState_Request) XXX_DiscardUnknown() {\n\txxx_messageInfo_ImportResourceState_Request.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_ImportResourceState_Request proto.InternalMessageInfo\n\nfunc (m *ImportResourceState_Request) GetTypeName() string {\n\tif m != nil {\n\t\treturn m.TypeName\n\t}\n\treturn \"\"\n}\n\nfunc (m *ImportResourceState_Request) GetId() string {\n\tif m != nil {\n\t\treturn m.Id\n\t}\n\treturn \"\"\n}\n\ntype ImportResourceState_ImportedResource struct {\n\tTypeName             string        `protobuf:\"bytes,1,opt,name=type_name,json=typeName,proto3\" json:\"type_name,omitempty\"`\n\tState                *DynamicValue `protobuf:\"bytes,2,opt,name=state,proto3\" json:\"state,omitempty\"`\n\tPrivate              []byte        `protobuf:\"bytes,3,opt,name=private,proto3\" json:\"private,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}      `json:\"-\"`\n\tXXX_unrecognized     []byte        `json:\"-\"`\n\tXXX_sizecache        int32         `json:\"-\"`\n}\n\nfunc (m *ImportResourceState_ImportedResource) Reset()         { *m = ImportResourceState_ImportedResource{} }\nfunc (m *ImportResourceState_ImportedResource) String() string { return proto.CompactTextString(m) }\nfunc (*ImportResourceState_ImportedResource) ProtoMessage()    {}\nfunc (*ImportResourceState_ImportedResource) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_tfplugin5_56820f4fb67360c5, []int{15, 1}\n}\nfunc (m *ImportResourceState_ImportedResource) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_ImportResourceState_ImportedResource.Unmarshal(m, b)\n}\nfunc (m *ImportResourceState_ImportedResource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_ImportResourceState_ImportedResource.Marshal(b, m, deterministic)\n}\nfunc (dst *ImportResourceState_ImportedResource) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_ImportResourceState_ImportedResource.Merge(dst, src)\n}\nfunc (m *ImportResourceState_ImportedResource) XXX_Size() int {\n\treturn xxx_messageInfo_ImportResourceState_ImportedResource.Size(m)\n}\nfunc (m *ImportResourceState_ImportedResource) XXX_DiscardUnknown() {\n\txxx_messageInfo_ImportResourceState_ImportedResource.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_ImportResourceState_ImportedResource proto.InternalMessageInfo\n\nfunc (m *ImportResourceState_ImportedResource) GetTypeName() string {\n\tif m != nil {\n\t\treturn m.TypeName\n\t}\n\treturn \"\"\n}\n\nfunc (m *ImportResourceState_ImportedResource) GetState() *DynamicValue {\n\tif m != nil {\n\t\treturn m.State\n\t}\n\treturn nil\n}\n\nfunc (m *ImportResourceState_ImportedResource) GetPrivate() []byte {\n\tif m != nil {\n\t\treturn m.Private\n\t}\n\treturn nil\n}\n\ntype ImportResourceState_Response struct {\n\tImportedResources    []*ImportResourceState_ImportedResource `protobuf:\"bytes,1,rep,name=imported_resources,json=importedResources,proto3\" json:\"imported_resources,omitempty\"`\n\tDiagnostics          []*Diagnostic                           `protobuf:\"bytes,2,rep,name=diagnostics,proto3\" json:\"diagnostics,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}                                `json:\"-\"`\n\tXXX_unrecognized     []byte                                  `json:\"-\"`\n\tXXX_sizecache        int32                                   `json:\"-\"`\n}\n\nfunc (m *ImportResourceState_Response) Reset()         { *m = ImportResourceState_Response{} }\nfunc (m *ImportResourceState_Response) String() string { return proto.CompactTextString(m) }\nfunc (*ImportResourceState_Response) ProtoMessage()    {}\nfunc (*ImportResourceState_Response) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_tfplugin5_56820f4fb67360c5, []int{15, 2}\n}\nfunc (m *ImportResourceState_Response) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_ImportResourceState_Response.Unmarshal(m, b)\n}\nfunc (m *ImportResourceState_Response) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_ImportResourceState_Response.Marshal(b, m, deterministic)\n}\nfunc (dst *ImportResourceState_Response) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_ImportResourceState_Response.Merge(dst, src)\n}\nfunc (m *ImportResourceState_Response) XXX_Size() int {\n\treturn xxx_messageInfo_ImportResourceState_Response.Size(m)\n}\nfunc (m *ImportResourceState_Response) XXX_DiscardUnknown() {\n\txxx_messageInfo_ImportResourceState_Response.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_ImportResourceState_Response proto.InternalMessageInfo\n\nfunc (m *ImportResourceState_Response) GetImportedResources() []*ImportResourceState_ImportedResource {\n\tif m != nil {\n\t\treturn m.ImportedResources\n\t}\n\treturn nil\n}\n\nfunc (m *ImportResourceState_Response) GetDiagnostics() []*Diagnostic {\n\tif m != nil {\n\t\treturn m.Diagnostics\n\t}\n\treturn nil\n}\n\ntype ReadDataSource struct {\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *ReadDataSource) Reset()         { *m = ReadDataSource{} }\nfunc (m *ReadDataSource) String() string { return proto.CompactTextString(m) }\nfunc (*ReadDataSource) ProtoMessage()    {}\nfunc (*ReadDataSource) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_tfplugin5_56820f4fb67360c5, []int{16}\n}\nfunc (m *ReadDataSource) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_ReadDataSource.Unmarshal(m, b)\n}\nfunc (m *ReadDataSource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_ReadDataSource.Marshal(b, m, deterministic)\n}\nfunc (dst *ReadDataSource) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_ReadDataSource.Merge(dst, src)\n}\nfunc (m *ReadDataSource) XXX_Size() int {\n\treturn xxx_messageInfo_ReadDataSource.Size(m)\n}\nfunc (m *ReadDataSource) XXX_DiscardUnknown() {\n\txxx_messageInfo_ReadDataSource.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_ReadDataSource proto.InternalMessageInfo\n\ntype ReadDataSource_Request struct {\n\tTypeName             string        `protobuf:\"bytes,1,opt,name=type_name,json=typeName,proto3\" json:\"type_name,omitempty\"`\n\tConfig               *DynamicValue `protobuf:\"bytes,2,opt,name=config,proto3\" json:\"config,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}      `json:\"-\"`\n\tXXX_unrecognized     []byte        `json:\"-\"`\n\tXXX_sizecache        int32         `json:\"-\"`\n}\n\nfunc (m *ReadDataSource_Request) Reset()         { *m = ReadDataSource_Request{} }\nfunc (m *ReadDataSource_Request) String() string { return proto.CompactTextString(m) }\nfunc (*ReadDataSource_Request) ProtoMessage()    {}\nfunc (*ReadDataSource_Request) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_tfplugin5_56820f4fb67360c5, []int{16, 0}\n}\nfunc (m *ReadDataSource_Request) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_ReadDataSource_Request.Unmarshal(m, b)\n}\nfunc (m *ReadDataSource_Request) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_ReadDataSource_Request.Marshal(b, m, deterministic)\n}\nfunc (dst *ReadDataSource_Request) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_ReadDataSource_Request.Merge(dst, src)\n}\nfunc (m *ReadDataSource_Request) XXX_Size() int {\n\treturn xxx_messageInfo_ReadDataSource_Request.Size(m)\n}\nfunc (m *ReadDataSource_Request) XXX_DiscardUnknown() {\n\txxx_messageInfo_ReadDataSource_Request.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_ReadDataSource_Request proto.InternalMessageInfo\n\nfunc (m *ReadDataSource_Request) GetTypeName() string {\n\tif m != nil {\n\t\treturn m.TypeName\n\t}\n\treturn \"\"\n}\n\nfunc (m *ReadDataSource_Request) GetConfig() *DynamicValue {\n\tif m != nil {\n\t\treturn m.Config\n\t}\n\treturn nil\n}\n\ntype ReadDataSource_Response struct {\n\tState                *DynamicValue `protobuf:\"bytes,1,opt,name=state,proto3\" json:\"state,omitempty\"`\n\tDiagnostics          []*Diagnostic `protobuf:\"bytes,2,rep,name=diagnostics,proto3\" json:\"diagnostics,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}      `json:\"-\"`\n\tXXX_unrecognized     []byte        `json:\"-\"`\n\tXXX_sizecache        int32         `json:\"-\"`\n}\n\nfunc (m *ReadDataSource_Response) Reset()         { *m = ReadDataSource_Response{} }\nfunc (m *ReadDataSource_Response) String() string { return proto.CompactTextString(m) }\nfunc (*ReadDataSource_Response) ProtoMessage()    {}\nfunc (*ReadDataSource_Response) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_tfplugin5_56820f4fb67360c5, []int{16, 1}\n}\nfunc (m *ReadDataSource_Response) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_ReadDataSource_Response.Unmarshal(m, b)\n}\nfunc (m *ReadDataSource_Response) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_ReadDataSource_Response.Marshal(b, m, deterministic)\n}\nfunc (dst *ReadDataSource_Response) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_ReadDataSource_Response.Merge(dst, src)\n}\nfunc (m *ReadDataSource_Response) XXX_Size() int {\n\treturn xxx_messageInfo_ReadDataSource_Response.Size(m)\n}\nfunc (m *ReadDataSource_Response) XXX_DiscardUnknown() {\n\txxx_messageInfo_ReadDataSource_Response.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_ReadDataSource_Response proto.InternalMessageInfo\n\nfunc (m *ReadDataSource_Response) GetState() *DynamicValue {\n\tif m != nil {\n\t\treturn m.State\n\t}\n\treturn nil\n}\n\nfunc (m *ReadDataSource_Response) GetDiagnostics() []*Diagnostic {\n\tif m != nil {\n\t\treturn m.Diagnostics\n\t}\n\treturn nil\n}\n\ntype GetProvisionerSchema struct {\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *GetProvisionerSchema) Reset()         { *m = GetProvisionerSchema{} }\nfunc (m *GetProvisionerSchema) String() string { return proto.CompactTextString(m) }\nfunc (*GetProvisionerSchema) ProtoMessage()    {}\nfunc (*GetProvisionerSchema) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_tfplugin5_56820f4fb67360c5, []int{17}\n}\nfunc (m *GetProvisionerSchema) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_GetProvisionerSchema.Unmarshal(m, b)\n}\nfunc (m *GetProvisionerSchema) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_GetProvisionerSchema.Marshal(b, m, deterministic)\n}\nfunc (dst *GetProvisionerSchema) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_GetProvisionerSchema.Merge(dst, src)\n}\nfunc (m *GetProvisionerSchema) XXX_Size() int {\n\treturn xxx_messageInfo_GetProvisionerSchema.Size(m)\n}\nfunc (m *GetProvisionerSchema) XXX_DiscardUnknown() {\n\txxx_messageInfo_GetProvisionerSchema.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_GetProvisionerSchema proto.InternalMessageInfo\n\ntype GetProvisionerSchema_Request struct {\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *GetProvisionerSchema_Request) Reset()         { *m = GetProvisionerSchema_Request{} }\nfunc (m *GetProvisionerSchema_Request) String() string { return proto.CompactTextString(m) }\nfunc (*GetProvisionerSchema_Request) ProtoMessage()    {}\nfunc (*GetProvisionerSchema_Request) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_tfplugin5_56820f4fb67360c5, []int{17, 0}\n}\nfunc (m *GetProvisionerSchema_Request) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_GetProvisionerSchema_Request.Unmarshal(m, b)\n}\nfunc (m *GetProvisionerSchema_Request) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_GetProvisionerSchema_Request.Marshal(b, m, deterministic)\n}\nfunc (dst *GetProvisionerSchema_Request) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_GetProvisionerSchema_Request.Merge(dst, src)\n}\nfunc (m *GetProvisionerSchema_Request) XXX_Size() int {\n\treturn xxx_messageInfo_GetProvisionerSchema_Request.Size(m)\n}\nfunc (m *GetProvisionerSchema_Request) XXX_DiscardUnknown() {\n\txxx_messageInfo_GetProvisionerSchema_Request.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_GetProvisionerSchema_Request proto.InternalMessageInfo\n\ntype GetProvisionerSchema_Response struct {\n\tProvisioner          *Schema       `protobuf:\"bytes,1,opt,name=provisioner,proto3\" json:\"provisioner,omitempty\"`\n\tDiagnostics          []*Diagnostic `protobuf:\"bytes,2,rep,name=diagnostics,proto3\" json:\"diagnostics,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}      `json:\"-\"`\n\tXXX_unrecognized     []byte        `json:\"-\"`\n\tXXX_sizecache        int32         `json:\"-\"`\n}\n\nfunc (m *GetProvisionerSchema_Response) Reset()         { *m = GetProvisionerSchema_Response{} }\nfunc (m *GetProvisionerSchema_Response) String() string { return proto.CompactTextString(m) }\nfunc (*GetProvisionerSchema_Response) ProtoMessage()    {}\nfunc (*GetProvisionerSchema_Response) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_tfplugin5_56820f4fb67360c5, []int{17, 1}\n}\nfunc (m *GetProvisionerSchema_Response) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_GetProvisionerSchema_Response.Unmarshal(m, b)\n}\nfunc (m *GetProvisionerSchema_Response) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_GetProvisionerSchema_Response.Marshal(b, m, deterministic)\n}\nfunc (dst *GetProvisionerSchema_Response) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_GetProvisionerSchema_Response.Merge(dst, src)\n}\nfunc (m *GetProvisionerSchema_Response) XXX_Size() int {\n\treturn xxx_messageInfo_GetProvisionerSchema_Response.Size(m)\n}\nfunc (m *GetProvisionerSchema_Response) XXX_DiscardUnknown() {\n\txxx_messageInfo_GetProvisionerSchema_Response.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_GetProvisionerSchema_Response proto.InternalMessageInfo\n\nfunc (m *GetProvisionerSchema_Response) GetProvisioner() *Schema {\n\tif m != nil {\n\t\treturn m.Provisioner\n\t}\n\treturn nil\n}\n\nfunc (m *GetProvisionerSchema_Response) GetDiagnostics() []*Diagnostic {\n\tif m != nil {\n\t\treturn m.Diagnostics\n\t}\n\treturn nil\n}\n\ntype ValidateProvisionerConfig struct {\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *ValidateProvisionerConfig) Reset()         { *m = ValidateProvisionerConfig{} }\nfunc (m *ValidateProvisionerConfig) String() string { return proto.CompactTextString(m) }\nfunc (*ValidateProvisionerConfig) ProtoMessage()    {}\nfunc (*ValidateProvisionerConfig) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_tfplugin5_56820f4fb67360c5, []int{18}\n}\nfunc (m *ValidateProvisionerConfig) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_ValidateProvisionerConfig.Unmarshal(m, b)\n}\nfunc (m *ValidateProvisionerConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_ValidateProvisionerConfig.Marshal(b, m, deterministic)\n}\nfunc (dst *ValidateProvisionerConfig) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_ValidateProvisionerConfig.Merge(dst, src)\n}\nfunc (m *ValidateProvisionerConfig) XXX_Size() int {\n\treturn xxx_messageInfo_ValidateProvisionerConfig.Size(m)\n}\nfunc (m *ValidateProvisionerConfig) XXX_DiscardUnknown() {\n\txxx_messageInfo_ValidateProvisionerConfig.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_ValidateProvisionerConfig proto.InternalMessageInfo\n\ntype ValidateProvisionerConfig_Request struct {\n\tConfig               *DynamicValue `protobuf:\"bytes,1,opt,name=config,proto3\" json:\"config,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}      `json:\"-\"`\n\tXXX_unrecognized     []byte        `json:\"-\"`\n\tXXX_sizecache        int32         `json:\"-\"`\n}\n\nfunc (m *ValidateProvisionerConfig_Request) Reset()         { *m = ValidateProvisionerConfig_Request{} }\nfunc (m *ValidateProvisionerConfig_Request) String() string { return proto.CompactTextString(m) }\nfunc (*ValidateProvisionerConfig_Request) ProtoMessage()    {}\nfunc (*ValidateProvisionerConfig_Request) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_tfplugin5_56820f4fb67360c5, []int{18, 0}\n}\nfunc (m *ValidateProvisionerConfig_Request) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_ValidateProvisionerConfig_Request.Unmarshal(m, b)\n}\nfunc (m *ValidateProvisionerConfig_Request) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_ValidateProvisionerConfig_Request.Marshal(b, m, deterministic)\n}\nfunc (dst *ValidateProvisionerConfig_Request) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_ValidateProvisionerConfig_Request.Merge(dst, src)\n}\nfunc (m *ValidateProvisionerConfig_Request) XXX_Size() int {\n\treturn xxx_messageInfo_ValidateProvisionerConfig_Request.Size(m)\n}\nfunc (m *ValidateProvisionerConfig_Request) XXX_DiscardUnknown() {\n\txxx_messageInfo_ValidateProvisionerConfig_Request.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_ValidateProvisionerConfig_Request proto.InternalMessageInfo\n\nfunc (m *ValidateProvisionerConfig_Request) GetConfig() *DynamicValue {\n\tif m != nil {\n\t\treturn m.Config\n\t}\n\treturn nil\n}\n\ntype ValidateProvisionerConfig_Response struct {\n\tDiagnostics          []*Diagnostic `protobuf:\"bytes,1,rep,name=diagnostics,proto3\" json:\"diagnostics,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}      `json:\"-\"`\n\tXXX_unrecognized     []byte        `json:\"-\"`\n\tXXX_sizecache        int32         `json:\"-\"`\n}\n\nfunc (m *ValidateProvisionerConfig_Response) Reset()         { *m = ValidateProvisionerConfig_Response{} }\nfunc (m *ValidateProvisionerConfig_Response) String() string { return proto.CompactTextString(m) }\nfunc (*ValidateProvisionerConfig_Response) ProtoMessage()    {}\nfunc (*ValidateProvisionerConfig_Response) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_tfplugin5_56820f4fb67360c5, []int{18, 1}\n}\nfunc (m *ValidateProvisionerConfig_Response) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_ValidateProvisionerConfig_Response.Unmarshal(m, b)\n}\nfunc (m *ValidateProvisionerConfig_Response) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_ValidateProvisionerConfig_Response.Marshal(b, m, deterministic)\n}\nfunc (dst *ValidateProvisionerConfig_Response) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_ValidateProvisionerConfig_Response.Merge(dst, src)\n}\nfunc (m *ValidateProvisionerConfig_Response) XXX_Size() int {\n\treturn xxx_messageInfo_ValidateProvisionerConfig_Response.Size(m)\n}\nfunc (m *ValidateProvisionerConfig_Response) XXX_DiscardUnknown() {\n\txxx_messageInfo_ValidateProvisionerConfig_Response.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_ValidateProvisionerConfig_Response proto.InternalMessageInfo\n\nfunc (m *ValidateProvisionerConfig_Response) GetDiagnostics() []*Diagnostic {\n\tif m != nil {\n\t\treturn m.Diagnostics\n\t}\n\treturn nil\n}\n\ntype ProvisionResource struct {\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *ProvisionResource) Reset()         { *m = ProvisionResource{} }\nfunc (m *ProvisionResource) String() string { return proto.CompactTextString(m) }\nfunc (*ProvisionResource) ProtoMessage()    {}\nfunc (*ProvisionResource) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_tfplugin5_56820f4fb67360c5, []int{19}\n}\nfunc (m *ProvisionResource) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_ProvisionResource.Unmarshal(m, b)\n}\nfunc (m *ProvisionResource) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_ProvisionResource.Marshal(b, m, deterministic)\n}\nfunc (dst *ProvisionResource) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_ProvisionResource.Merge(dst, src)\n}\nfunc (m *ProvisionResource) XXX_Size() int {\n\treturn xxx_messageInfo_ProvisionResource.Size(m)\n}\nfunc (m *ProvisionResource) XXX_DiscardUnknown() {\n\txxx_messageInfo_ProvisionResource.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_ProvisionResource proto.InternalMessageInfo\n\ntype ProvisionResource_Request struct {\n\tConfig               *DynamicValue `protobuf:\"bytes,1,opt,name=config,proto3\" json:\"config,omitempty\"`\n\tConnection           *DynamicValue `protobuf:\"bytes,2,opt,name=connection,proto3\" json:\"connection,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}      `json:\"-\"`\n\tXXX_unrecognized     []byte        `json:\"-\"`\n\tXXX_sizecache        int32         `json:\"-\"`\n}\n\nfunc (m *ProvisionResource_Request) Reset()         { *m = ProvisionResource_Request{} }\nfunc (m *ProvisionResource_Request) String() string { return proto.CompactTextString(m) }\nfunc (*ProvisionResource_Request) ProtoMessage()    {}\nfunc (*ProvisionResource_Request) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_tfplugin5_56820f4fb67360c5, []int{19, 0}\n}\nfunc (m *ProvisionResource_Request) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_ProvisionResource_Request.Unmarshal(m, b)\n}\nfunc (m *ProvisionResource_Request) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_ProvisionResource_Request.Marshal(b, m, deterministic)\n}\nfunc (dst *ProvisionResource_Request) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_ProvisionResource_Request.Merge(dst, src)\n}\nfunc (m *ProvisionResource_Request) XXX_Size() int {\n\treturn xxx_messageInfo_ProvisionResource_Request.Size(m)\n}\nfunc (m *ProvisionResource_Request) XXX_DiscardUnknown() {\n\txxx_messageInfo_ProvisionResource_Request.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_ProvisionResource_Request proto.InternalMessageInfo\n\nfunc (m *ProvisionResource_Request) GetConfig() *DynamicValue {\n\tif m != nil {\n\t\treturn m.Config\n\t}\n\treturn nil\n}\n\nfunc (m *ProvisionResource_Request) GetConnection() *DynamicValue {\n\tif m != nil {\n\t\treturn m.Connection\n\t}\n\treturn nil\n}\n\ntype ProvisionResource_Response struct {\n\tOutput               string        `protobuf:\"bytes,1,opt,name=output,proto3\" json:\"output,omitempty\"`\n\tDiagnostics          []*Diagnostic `protobuf:\"bytes,2,rep,name=diagnostics,proto3\" json:\"diagnostics,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}      `json:\"-\"`\n\tXXX_unrecognized     []byte        `json:\"-\"`\n\tXXX_sizecache        int32         `json:\"-\"`\n}\n\nfunc (m *ProvisionResource_Response) Reset()         { *m = ProvisionResource_Response{} }\nfunc (m *ProvisionResource_Response) String() string { return proto.CompactTextString(m) }\nfunc (*ProvisionResource_Response) ProtoMessage()    {}\nfunc (*ProvisionResource_Response) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_tfplugin5_56820f4fb67360c5, []int{19, 1}\n}\nfunc (m *ProvisionResource_Response) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_ProvisionResource_Response.Unmarshal(m, b)\n}\nfunc (m *ProvisionResource_Response) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_ProvisionResource_Response.Marshal(b, m, deterministic)\n}\nfunc (dst *ProvisionResource_Response) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_ProvisionResource_Response.Merge(dst, src)\n}\nfunc (m *ProvisionResource_Response) XXX_Size() int {\n\treturn xxx_messageInfo_ProvisionResource_Response.Size(m)\n}\nfunc (m *ProvisionResource_Response) XXX_DiscardUnknown() {\n\txxx_messageInfo_ProvisionResource_Response.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_ProvisionResource_Response proto.InternalMessageInfo\n\nfunc (m *ProvisionResource_Response) GetOutput() string {\n\tif m != nil {\n\t\treturn m.Output\n\t}\n\treturn \"\"\n}\n\nfunc (m *ProvisionResource_Response) GetDiagnostics() []*Diagnostic {\n\tif m != nil {\n\t\treturn m.Diagnostics\n\t}\n\treturn nil\n}\n\nfunc init() {\n\tproto.RegisterType((*DynamicValue)(nil), \"tfplugin5.DynamicValue\")\n\tproto.RegisterType((*Diagnostic)(nil), \"tfplugin5.Diagnostic\")\n\tproto.RegisterType((*AttributePath)(nil), \"tfplugin5.AttributePath\")\n\tproto.RegisterType((*AttributePath_Step)(nil), \"tfplugin5.AttributePath.Step\")\n\tproto.RegisterType((*Stop)(nil), \"tfplugin5.Stop\")\n\tproto.RegisterType((*Stop_Request)(nil), \"tfplugin5.Stop.Request\")\n\tproto.RegisterType((*Stop_Response)(nil), \"tfplugin5.Stop.Response\")\n\tproto.RegisterType((*RawState)(nil), \"tfplugin5.RawState\")\n\tproto.RegisterMapType((map[string]string)(nil), \"tfplugin5.RawState.FlatmapEntry\")\n\tproto.RegisterType((*Schema)(nil), \"tfplugin5.Schema\")\n\tproto.RegisterType((*Schema_Block)(nil), \"tfplugin5.Schema.Block\")\n\tproto.RegisterType((*Schema_Attribute)(nil), \"tfplugin5.Schema.Attribute\")\n\tproto.RegisterType((*Schema_NestedBlock)(nil), \"tfplugin5.Schema.NestedBlock\")\n\tproto.RegisterType((*GetProviderSchema)(nil), \"tfplugin5.GetProviderSchema\")\n\tproto.RegisterType((*GetProviderSchema_Request)(nil), \"tfplugin5.GetProviderSchema.Request\")\n\tproto.RegisterType((*GetProviderSchema_Response)(nil), \"tfplugin5.GetProviderSchema.Response\")\n\tproto.RegisterMapType((map[string]*Schema)(nil), \"tfplugin5.GetProviderSchema.Response.DataSourceSchemasEntry\")\n\tproto.RegisterMapType((map[string]*Schema)(nil), \"tfplugin5.GetProviderSchema.Response.ResourceSchemasEntry\")\n\tproto.RegisterType((*PrepareProviderConfig)(nil), \"tfplugin5.PrepareProviderConfig\")\n\tproto.RegisterType((*PrepareProviderConfig_Request)(nil), \"tfplugin5.PrepareProviderConfig.Request\")\n\tproto.RegisterType((*PrepareProviderConfig_Response)(nil), \"tfplugin5.PrepareProviderConfig.Response\")\n\tproto.RegisterType((*UpgradeResourceState)(nil), \"tfplugin5.UpgradeResourceState\")\n\tproto.RegisterType((*UpgradeResourceState_Request)(nil), \"tfplugin5.UpgradeResourceState.Request\")\n\tproto.RegisterType((*UpgradeResourceState_Response)(nil), \"tfplugin5.UpgradeResourceState.Response\")\n\tproto.RegisterType((*ValidateResourceTypeConfig)(nil), \"tfplugin5.ValidateResourceTypeConfig\")\n\tproto.RegisterType((*ValidateResourceTypeConfig_Request)(nil), \"tfplugin5.ValidateResourceTypeConfig.Request\")\n\tproto.RegisterType((*ValidateResourceTypeConfig_Response)(nil), \"tfplugin5.ValidateResourceTypeConfig.Response\")\n\tproto.RegisterType((*ValidateDataSourceConfig)(nil), \"tfplugin5.ValidateDataSourceConfig\")\n\tproto.RegisterType((*ValidateDataSourceConfig_Request)(nil), \"tfplugin5.ValidateDataSourceConfig.Request\")\n\tproto.RegisterType((*ValidateDataSourceConfig_Response)(nil), \"tfplugin5.ValidateDataSourceConfig.Response\")\n\tproto.RegisterType((*Configure)(nil), \"tfplugin5.Configure\")\n\tproto.RegisterType((*Configure_Request)(nil), \"tfplugin5.Configure.Request\")\n\tproto.RegisterType((*Configure_Response)(nil), \"tfplugin5.Configure.Response\")\n\tproto.RegisterType((*ReadResource)(nil), \"tfplugin5.ReadResource\")\n\tproto.RegisterType((*ReadResource_Request)(nil), \"tfplugin5.ReadResource.Request\")\n\tproto.RegisterType((*ReadResource_Response)(nil), \"tfplugin5.ReadResource.Response\")\n\tproto.RegisterType((*PlanResourceChange)(nil), \"tfplugin5.PlanResourceChange\")\n\tproto.RegisterType((*PlanResourceChange_Request)(nil), \"tfplugin5.PlanResourceChange.Request\")\n\tproto.RegisterType((*PlanResourceChange_Response)(nil), \"tfplugin5.PlanResourceChange.Response\")\n\tproto.RegisterType((*ApplyResourceChange)(nil), \"tfplugin5.ApplyResourceChange\")\n\tproto.RegisterType((*ApplyResourceChange_Request)(nil), \"tfplugin5.ApplyResourceChange.Request\")\n\tproto.RegisterType((*ApplyResourceChange_Response)(nil), \"tfplugin5.ApplyResourceChange.Response\")\n\tproto.RegisterType((*ImportResourceState)(nil), \"tfplugin5.ImportResourceState\")\n\tproto.RegisterType((*ImportResourceState_Request)(nil), \"tfplugin5.ImportResourceState.Request\")\n\tproto.RegisterType((*ImportResourceState_ImportedResource)(nil), \"tfplugin5.ImportResourceState.ImportedResource\")\n\tproto.RegisterType((*ImportResourceState_Response)(nil), \"tfplugin5.ImportResourceState.Response\")\n\tproto.RegisterType((*ReadDataSource)(nil), \"tfplugin5.ReadDataSource\")\n\tproto.RegisterType((*ReadDataSource_Request)(nil), \"tfplugin5.ReadDataSource.Request\")\n\tproto.RegisterType((*ReadDataSource_Response)(nil), \"tfplugin5.ReadDataSource.Response\")\n\tproto.RegisterType((*GetProvisionerSchema)(nil), \"tfplugin5.GetProvisionerSchema\")\n\tproto.RegisterType((*GetProvisionerSchema_Request)(nil), \"tfplugin5.GetProvisionerSchema.Request\")\n\tproto.RegisterType((*GetProvisionerSchema_Response)(nil), \"tfplugin5.GetProvisionerSchema.Response\")\n\tproto.RegisterType((*ValidateProvisionerConfig)(nil), \"tfplugin5.ValidateProvisionerConfig\")\n\tproto.RegisterType((*ValidateProvisionerConfig_Request)(nil), \"tfplugin5.ValidateProvisionerConfig.Request\")\n\tproto.RegisterType((*ValidateProvisionerConfig_Response)(nil), \"tfplugin5.ValidateProvisionerConfig.Response\")\n\tproto.RegisterType((*ProvisionResource)(nil), \"tfplugin5.ProvisionResource\")\n\tproto.RegisterType((*ProvisionResource_Request)(nil), \"tfplugin5.ProvisionResource.Request\")\n\tproto.RegisterType((*ProvisionResource_Response)(nil), \"tfplugin5.ProvisionResource.Response\")\n\tproto.RegisterEnum(\"tfplugin5.Diagnostic_Severity\", Diagnostic_Severity_name, Diagnostic_Severity_value)\n\tproto.RegisterEnum(\"tfplugin5.Schema_NestedBlock_NestingMode\", Schema_NestedBlock_NestingMode_name, Schema_NestedBlock_NestingMode_value)\n}\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar _ context.Context\nvar _ grpc.ClientConn\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the grpc package it is being compiled against.\nconst _ = grpc.SupportPackageIsVersion4\n\n// ProviderClient is the client API for Provider service.\n//\n// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.\ntype ProviderClient interface {\n\t// ////// Information about what a provider supports/expects\n\tGetSchema(ctx context.Context, in *GetProviderSchema_Request, opts ...grpc.CallOption) (*GetProviderSchema_Response, error)\n\tPrepareProviderConfig(ctx context.Context, in *PrepareProviderConfig_Request, opts ...grpc.CallOption) (*PrepareProviderConfig_Response, error)\n\tValidateResourceTypeConfig(ctx context.Context, in *ValidateResourceTypeConfig_Request, opts ...grpc.CallOption) (*ValidateResourceTypeConfig_Response, error)\n\tValidateDataSourceConfig(ctx context.Context, in *ValidateDataSourceConfig_Request, opts ...grpc.CallOption) (*ValidateDataSourceConfig_Response, error)\n\tUpgradeResourceState(ctx context.Context, in *UpgradeResourceState_Request, opts ...grpc.CallOption) (*UpgradeResourceState_Response, error)\n\t// ////// One-time initialization, called before other functions below\n\tConfigure(ctx context.Context, in *Configure_Request, opts ...grpc.CallOption) (*Configure_Response, error)\n\t// ////// Managed Resource Lifecycle\n\tReadResource(ctx context.Context, in *ReadResource_Request, opts ...grpc.CallOption) (*ReadResource_Response, error)\n\tPlanResourceChange(ctx context.Context, in *PlanResourceChange_Request, opts ...grpc.CallOption) (*PlanResourceChange_Response, error)\n\tApplyResourceChange(ctx context.Context, in *ApplyResourceChange_Request, opts ...grpc.CallOption) (*ApplyResourceChange_Response, error)\n\tImportResourceState(ctx context.Context, in *ImportResourceState_Request, opts ...grpc.CallOption) (*ImportResourceState_Response, error)\n\tReadDataSource(ctx context.Context, in *ReadDataSource_Request, opts ...grpc.CallOption) (*ReadDataSource_Response, error)\n\t// ////// Graceful Shutdown\n\tStop(ctx context.Context, in *Stop_Request, opts ...grpc.CallOption) (*Stop_Response, error)\n}\n\ntype providerClient struct {\n\tcc *grpc.ClientConn\n}\n\nfunc NewProviderClient(cc *grpc.ClientConn) ProviderClient {\n\treturn &providerClient{cc}\n}\n\nfunc (c *providerClient) GetSchema(ctx context.Context, in *GetProviderSchema_Request, opts ...grpc.CallOption) (*GetProviderSchema_Response, error) {\n\tout := new(GetProviderSchema_Response)\n\terr := c.cc.Invoke(ctx, \"/tfplugin5.Provider/GetSchema\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *providerClient) PrepareProviderConfig(ctx context.Context, in *PrepareProviderConfig_Request, opts ...grpc.CallOption) (*PrepareProviderConfig_Response, error) {\n\tout := new(PrepareProviderConfig_Response)\n\terr := c.cc.Invoke(ctx, \"/tfplugin5.Provider/PrepareProviderConfig\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *providerClient) ValidateResourceTypeConfig(ctx context.Context, in *ValidateResourceTypeConfig_Request, opts ...grpc.CallOption) (*ValidateResourceTypeConfig_Response, error) {\n\tout := new(ValidateResourceTypeConfig_Response)\n\terr := c.cc.Invoke(ctx, \"/tfplugin5.Provider/ValidateResourceTypeConfig\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *providerClient) ValidateDataSourceConfig(ctx context.Context, in *ValidateDataSourceConfig_Request, opts ...grpc.CallOption) (*ValidateDataSourceConfig_Response, error) {\n\tout := new(ValidateDataSourceConfig_Response)\n\terr := c.cc.Invoke(ctx, \"/tfplugin5.Provider/ValidateDataSourceConfig\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *providerClient) UpgradeResourceState(ctx context.Context, in *UpgradeResourceState_Request, opts ...grpc.CallOption) (*UpgradeResourceState_Response, error) {\n\tout := new(UpgradeResourceState_Response)\n\terr := c.cc.Invoke(ctx, \"/tfplugin5.Provider/UpgradeResourceState\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *providerClient) Configure(ctx context.Context, in *Configure_Request, opts ...grpc.CallOption) (*Configure_Response, error) {\n\tout := new(Configure_Response)\n\terr := c.cc.Invoke(ctx, \"/tfplugin5.Provider/Configure\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *providerClient) ReadResource(ctx context.Context, in *ReadResource_Request, opts ...grpc.CallOption) (*ReadResource_Response, error) {\n\tout := new(ReadResource_Response)\n\terr := c.cc.Invoke(ctx, \"/tfplugin5.Provider/ReadResource\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *providerClient) PlanResourceChange(ctx context.Context, in *PlanResourceChange_Request, opts ...grpc.CallOption) (*PlanResourceChange_Response, error) {\n\tout := new(PlanResourceChange_Response)\n\terr := c.cc.Invoke(ctx, \"/tfplugin5.Provider/PlanResourceChange\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *providerClient) ApplyResourceChange(ctx context.Context, in *ApplyResourceChange_Request, opts ...grpc.CallOption) (*ApplyResourceChange_Response, error) {\n\tout := new(ApplyResourceChange_Response)\n\terr := c.cc.Invoke(ctx, \"/tfplugin5.Provider/ApplyResourceChange\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *providerClient) ImportResourceState(ctx context.Context, in *ImportResourceState_Request, opts ...grpc.CallOption) (*ImportResourceState_Response, error) {\n\tout := new(ImportResourceState_Response)\n\terr := c.cc.Invoke(ctx, \"/tfplugin5.Provider/ImportResourceState\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *providerClient) ReadDataSource(ctx context.Context, in *ReadDataSource_Request, opts ...grpc.CallOption) (*ReadDataSource_Response, error) {\n\tout := new(ReadDataSource_Response)\n\terr := c.cc.Invoke(ctx, \"/tfplugin5.Provider/ReadDataSource\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *providerClient) Stop(ctx context.Context, in *Stop_Request, opts ...grpc.CallOption) (*Stop_Response, error) {\n\tout := new(Stop_Response)\n\terr := c.cc.Invoke(ctx, \"/tfplugin5.Provider/Stop\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\n// ProviderServer is the server API for Provider service.\ntype ProviderServer interface {\n\t// ////// Information about what a provider supports/expects\n\tGetSchema(context.Context, *GetProviderSchema_Request) (*GetProviderSchema_Response, error)\n\tPrepareProviderConfig(context.Context, *PrepareProviderConfig_Request) (*PrepareProviderConfig_Response, error)\n\tValidateResourceTypeConfig(context.Context, *ValidateResourceTypeConfig_Request) (*ValidateResourceTypeConfig_Response, error)\n\tValidateDataSourceConfig(context.Context, *ValidateDataSourceConfig_Request) (*ValidateDataSourceConfig_Response, error)\n\tUpgradeResourceState(context.Context, *UpgradeResourceState_Request) (*UpgradeResourceState_Response, error)\n\t// ////// One-time initialization, called before other functions below\n\tConfigure(context.Context, *Configure_Request) (*Configure_Response, error)\n\t// ////// Managed Resource Lifecycle\n\tReadResource(context.Context, *ReadResource_Request) (*ReadResource_Response, error)\n\tPlanResourceChange(context.Context, *PlanResourceChange_Request) (*PlanResourceChange_Response, error)\n\tApplyResourceChange(context.Context, *ApplyResourceChange_Request) (*ApplyResourceChange_Response, error)\n\tImportResourceState(context.Context, *ImportResourceState_Request) (*ImportResourceState_Response, error)\n\tReadDataSource(context.Context, *ReadDataSource_Request) (*ReadDataSource_Response, error)\n\t// ////// Graceful Shutdown\n\tStop(context.Context, *Stop_Request) (*Stop_Response, error)\n}\n\nfunc RegisterProviderServer(s *grpc.Server, srv ProviderServer) {\n\ts.RegisterService(&_Provider_serviceDesc, srv)\n}\n\nfunc _Provider_GetSchema_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(GetProviderSchema_Request)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(ProviderServer).GetSchema(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/tfplugin5.Provider/GetSchema\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(ProviderServer).GetSchema(ctx, req.(*GetProviderSchema_Request))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Provider_PrepareProviderConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(PrepareProviderConfig_Request)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(ProviderServer).PrepareProviderConfig(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/tfplugin5.Provider/PrepareProviderConfig\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(ProviderServer).PrepareProviderConfig(ctx, req.(*PrepareProviderConfig_Request))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Provider_ValidateResourceTypeConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(ValidateResourceTypeConfig_Request)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(ProviderServer).ValidateResourceTypeConfig(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/tfplugin5.Provider/ValidateResourceTypeConfig\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(ProviderServer).ValidateResourceTypeConfig(ctx, req.(*ValidateResourceTypeConfig_Request))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Provider_ValidateDataSourceConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(ValidateDataSourceConfig_Request)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(ProviderServer).ValidateDataSourceConfig(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/tfplugin5.Provider/ValidateDataSourceConfig\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(ProviderServer).ValidateDataSourceConfig(ctx, req.(*ValidateDataSourceConfig_Request))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Provider_UpgradeResourceState_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(UpgradeResourceState_Request)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(ProviderServer).UpgradeResourceState(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/tfplugin5.Provider/UpgradeResourceState\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(ProviderServer).UpgradeResourceState(ctx, req.(*UpgradeResourceState_Request))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Provider_Configure_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(Configure_Request)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(ProviderServer).Configure(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/tfplugin5.Provider/Configure\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(ProviderServer).Configure(ctx, req.(*Configure_Request))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Provider_ReadResource_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(ReadResource_Request)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(ProviderServer).ReadResource(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/tfplugin5.Provider/ReadResource\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(ProviderServer).ReadResource(ctx, req.(*ReadResource_Request))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Provider_PlanResourceChange_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(PlanResourceChange_Request)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(ProviderServer).PlanResourceChange(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/tfplugin5.Provider/PlanResourceChange\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(ProviderServer).PlanResourceChange(ctx, req.(*PlanResourceChange_Request))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Provider_ApplyResourceChange_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(ApplyResourceChange_Request)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(ProviderServer).ApplyResourceChange(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/tfplugin5.Provider/ApplyResourceChange\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(ProviderServer).ApplyResourceChange(ctx, req.(*ApplyResourceChange_Request))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Provider_ImportResourceState_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(ImportResourceState_Request)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(ProviderServer).ImportResourceState(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/tfplugin5.Provider/ImportResourceState\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(ProviderServer).ImportResourceState(ctx, req.(*ImportResourceState_Request))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Provider_ReadDataSource_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(ReadDataSource_Request)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(ProviderServer).ReadDataSource(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/tfplugin5.Provider/ReadDataSource\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(ProviderServer).ReadDataSource(ctx, req.(*ReadDataSource_Request))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Provider_Stop_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(Stop_Request)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(ProviderServer).Stop(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/tfplugin5.Provider/Stop\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(ProviderServer).Stop(ctx, req.(*Stop_Request))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nvar _Provider_serviceDesc = grpc.ServiceDesc{\n\tServiceName: \"tfplugin5.Provider\",\n\tHandlerType: (*ProviderServer)(nil),\n\tMethods: []grpc.MethodDesc{\n\t\t{\n\t\t\tMethodName: \"GetSchema\",\n\t\t\tHandler:    _Provider_GetSchema_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"PrepareProviderConfig\",\n\t\t\tHandler:    _Provider_PrepareProviderConfig_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"ValidateResourceTypeConfig\",\n\t\t\tHandler:    _Provider_ValidateResourceTypeConfig_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"ValidateDataSourceConfig\",\n\t\t\tHandler:    _Provider_ValidateDataSourceConfig_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"UpgradeResourceState\",\n\t\t\tHandler:    _Provider_UpgradeResourceState_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"Configure\",\n\t\t\tHandler:    _Provider_Configure_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"ReadResource\",\n\t\t\tHandler:    _Provider_ReadResource_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"PlanResourceChange\",\n\t\t\tHandler:    _Provider_PlanResourceChange_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"ApplyResourceChange\",\n\t\t\tHandler:    _Provider_ApplyResourceChange_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"ImportResourceState\",\n\t\t\tHandler:    _Provider_ImportResourceState_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"ReadDataSource\",\n\t\t\tHandler:    _Provider_ReadDataSource_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"Stop\",\n\t\t\tHandler:    _Provider_Stop_Handler,\n\t\t},\n\t},\n\tStreams:  []grpc.StreamDesc{},\n\tMetadata: \"tfplugin5.proto\",\n}\n\n// ProvisionerClient is the client API for Provisioner service.\n//\n// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.\ntype ProvisionerClient interface {\n\tGetSchema(ctx context.Context, in *GetProvisionerSchema_Request, opts ...grpc.CallOption) (*GetProvisionerSchema_Response, error)\n\tValidateProvisionerConfig(ctx context.Context, in *ValidateProvisionerConfig_Request, opts ...grpc.CallOption) (*ValidateProvisionerConfig_Response, error)\n\tProvisionResource(ctx context.Context, in *ProvisionResource_Request, opts ...grpc.CallOption) (Provisioner_ProvisionResourceClient, error)\n\tStop(ctx context.Context, in *Stop_Request, opts ...grpc.CallOption) (*Stop_Response, error)\n}\n\ntype provisionerClient struct {\n\tcc *grpc.ClientConn\n}\n\nfunc NewProvisionerClient(cc *grpc.ClientConn) ProvisionerClient {\n\treturn &provisionerClient{cc}\n}\n\nfunc (c *provisionerClient) GetSchema(ctx context.Context, in *GetProvisionerSchema_Request, opts ...grpc.CallOption) (*GetProvisionerSchema_Response, error) {\n\tout := new(GetProvisionerSchema_Response)\n\terr := c.cc.Invoke(ctx, \"/tfplugin5.Provisioner/GetSchema\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *provisionerClient) ValidateProvisionerConfig(ctx context.Context, in *ValidateProvisionerConfig_Request, opts ...grpc.CallOption) (*ValidateProvisionerConfig_Response, error) {\n\tout := new(ValidateProvisionerConfig_Response)\n\terr := c.cc.Invoke(ctx, \"/tfplugin5.Provisioner/ValidateProvisionerConfig\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *provisionerClient) ProvisionResource(ctx context.Context, in *ProvisionResource_Request, opts ...grpc.CallOption) (Provisioner_ProvisionResourceClient, error) {\n\tstream, err := c.cc.NewStream(ctx, &_Provisioner_serviceDesc.Streams[0], \"/tfplugin5.Provisioner/ProvisionResource\", opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tx := &provisionerProvisionResourceClient{stream}\n\tif err := x.ClientStream.SendMsg(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif err := x.ClientStream.CloseSend(); err != nil {\n\t\treturn nil, err\n\t}\n\treturn x, nil\n}\n\ntype Provisioner_ProvisionResourceClient interface {\n\tRecv() (*ProvisionResource_Response, error)\n\tgrpc.ClientStream\n}\n\ntype provisionerProvisionResourceClient struct {\n\tgrpc.ClientStream\n}\n\nfunc (x *provisionerProvisionResourceClient) Recv() (*ProvisionResource_Response, error) {\n\tm := new(ProvisionResource_Response)\n\tif err := x.ClientStream.RecvMsg(m); err != nil {\n\t\treturn nil, err\n\t}\n\treturn m, nil\n}\n\nfunc (c *provisionerClient) Stop(ctx context.Context, in *Stop_Request, opts ...grpc.CallOption) (*Stop_Response, error) {\n\tout := new(Stop_Response)\n\terr := c.cc.Invoke(ctx, \"/tfplugin5.Provisioner/Stop\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\n// ProvisionerServer is the server API for Provisioner service.\ntype ProvisionerServer interface {\n\tGetSchema(context.Context, *GetProvisionerSchema_Request) (*GetProvisionerSchema_Response, error)\n\tValidateProvisionerConfig(context.Context, *ValidateProvisionerConfig_Request) (*ValidateProvisionerConfig_Response, error)\n\tProvisionResource(*ProvisionResource_Request, Provisioner_ProvisionResourceServer) error\n\tStop(context.Context, *Stop_Request) (*Stop_Response, error)\n}\n\nfunc RegisterProvisionerServer(s *grpc.Server, srv ProvisionerServer) {\n\ts.RegisterService(&_Provisioner_serviceDesc, srv)\n}\n\nfunc _Provisioner_GetSchema_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(GetProvisionerSchema_Request)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(ProvisionerServer).GetSchema(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/tfplugin5.Provisioner/GetSchema\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(ProvisionerServer).GetSchema(ctx, req.(*GetProvisionerSchema_Request))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Provisioner_ValidateProvisionerConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(ValidateProvisionerConfig_Request)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(ProvisionerServer).ValidateProvisionerConfig(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/tfplugin5.Provisioner/ValidateProvisionerConfig\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(ProvisionerServer).ValidateProvisionerConfig(ctx, req.(*ValidateProvisionerConfig_Request))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Provisioner_ProvisionResource_Handler(srv interface{}, stream grpc.ServerStream) error {\n\tm := new(ProvisionResource_Request)\n\tif err := stream.RecvMsg(m); err != nil {\n\t\treturn err\n\t}\n\treturn srv.(ProvisionerServer).ProvisionResource(m, &provisionerProvisionResourceServer{stream})\n}\n\ntype Provisioner_ProvisionResourceServer interface {\n\tSend(*ProvisionResource_Response) error\n\tgrpc.ServerStream\n}\n\ntype provisionerProvisionResourceServer struct {\n\tgrpc.ServerStream\n}\n\nfunc (x *provisionerProvisionResourceServer) Send(m *ProvisionResource_Response) error {\n\treturn x.ServerStream.SendMsg(m)\n}\n\nfunc _Provisioner_Stop_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(Stop_Request)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(ProvisionerServer).Stop(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/tfplugin5.Provisioner/Stop\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(ProvisionerServer).Stop(ctx, req.(*Stop_Request))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nvar _Provisioner_serviceDesc = grpc.ServiceDesc{\n\tServiceName: \"tfplugin5.Provisioner\",\n\tHandlerType: (*ProvisionerServer)(nil),\n\tMethods: []grpc.MethodDesc{\n\t\t{\n\t\t\tMethodName: \"GetSchema\",\n\t\t\tHandler:    _Provisioner_GetSchema_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"ValidateProvisionerConfig\",\n\t\t\tHandler:    _Provisioner_ValidateProvisionerConfig_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"Stop\",\n\t\t\tHandler:    _Provisioner_Stop_Handler,\n\t\t},\n\t},\n\tStreams: []grpc.StreamDesc{\n\t\t{\n\t\t\tStreamName:    \"ProvisionResource\",\n\t\t\tHandler:       _Provisioner_ProvisionResource_Handler,\n\t\t\tServerStreams: true,\n\t\t},\n\t},\n\tMetadata: \"tfplugin5.proto\",\n}\n\nfunc init() { proto.RegisterFile(\"tfplugin5.proto\", fileDescriptor_tfplugin5_56820f4fb67360c5) }\n\nvar fileDescriptor_tfplugin5_56820f4fb67360c5 = []byte{\n\t// 1876 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x59, 0xcd, 0x6f, 0x23, 0x49,\n\t0x15, 0x9f, 0x76, 0xdb, 0x89, 0xfd, 0x9c, 0x0f, 0xa7, 0x66, 0x76, 0x30, 0xbd, 0xbb, 0x10, 0xcc,\n\t0x47, 0xb2, 0xda, 0x1d, 0xcf, 0x2a, 0x03, 0xbb, 0x4b, 0x18, 0xad, 0xc8, 0x66, 0x42, 0x26, 0x62,\n\t0x26, 0x1b, 0xca, 0xf3, 0x81, 0x84, 0xb4, 0x56, 0x8d, 0xbb, 0xe2, 0x69, 0xc6, 0xee, 0xee, 0xad,\n\t0x2e, 0x67, 0x62, 0x71, 0x44, 0x70, 0xe6, 0xc2, 0x87, 0xc4, 0xc7, 0x85, 0x03, 0xff, 0x00, 0x07,\n\t0xe0, 0xc6, 0x89, 0x7f, 0x80, 0x1b, 0x70, 0x42, 0x70, 0x43, 0x1c, 0xe1, 0x82, 0x84, 0xea, 0xab,\n\t0xbb, 0x6c, 0xb7, 0x93, 0x9e, 0x64, 0x57, 0x88, 0x5b, 0x57, 0xbd, 0x5f, 0xbd, 0xf7, 0xab, 0xf7,\n\t0x5e, 0xbd, 0x57, 0x65, 0xc3, 0x2a, 0x3f, 0x8e, 0x07, 0xa3, 0x7e, 0x10, 0x7e, 0xa9, 0x1d, 0xb3,\n\t0x88, 0x47, 0xa8, 0x96, 0x4e, 0xb4, 0x6e, 0xc3, 0xd2, 0x9d, 0x71, 0x48, 0x86, 0x41, 0xef, 0x11,\n\t0x19, 0x8c, 0x28, 0x6a, 0xc2, 0xe2, 0x30, 0xe9, 0xc7, 0xa4, 0xf7, 0xac, 0xe9, 0xac, 0x3b, 0x9b,\n\t0x4b, 0xd8, 0x0c, 0x11, 0x82, 0xf2, 0xb7, 0x93, 0x28, 0x6c, 0x96, 0xe4, 0xb4, 0xfc, 0x6e, 0xfd,\n\t0xd5, 0x01, 0xb8, 0x13, 0x90, 0x7e, 0x18, 0x25, 0x3c, 0xe8, 0xa1, 0x6d, 0xa8, 0x26, 0xf4, 0x84,\n\t0xb2, 0x80, 0x8f, 0xe5, 0xea, 0x95, 0xad, 0x4f, 0xb5, 0x33, 0xdb, 0x19, 0xb0, 0xdd, 0xd1, 0x28,\n\t0x9c, 0xe2, 0x85, 0xe1, 0x64, 0x34, 0x1c, 0x12, 0x36, 0x96, 0x16, 0x6a, 0xd8, 0x0c, 0xd1, 0x75,\n\t0x58, 0xf0, 0x29, 0x27, 0xc1, 0xa0, 0xe9, 0x4a, 0x81, 0x1e, 0xa1, 0xb7, 0xa0, 0x46, 0x38, 0x67,\n\t0xc1, 0x93, 0x11, 0xa7, 0xcd, 0xf2, 0xba, 0xb3, 0x59, 0xdf, 0x6a, 0x5a, 0xe6, 0x76, 0x8c, 0xec,\n\t0x88, 0xf0, 0xa7, 0x38, 0x83, 0xb6, 0x6e, 0x42, 0xd5, 0xd8, 0x47, 0x75, 0x58, 0x3c, 0x38, 0x7c,\n\t0xb4, 0x73, 0xef, 0xe0, 0x4e, 0xe3, 0x0a, 0xaa, 0x41, 0x65, 0x0f, 0xe3, 0xf7, 0x71, 0xc3, 0x11,\n\t0xf3, 0x8f, 0x77, 0xf0, 0xe1, 0xc1, 0xe1, 0x7e, 0xa3, 0xd4, 0xfa, 0xb3, 0x03, 0xcb, 0x13, 0xda,\n\t0xd0, 0x2d, 0xa8, 0x24, 0x9c, 0xc6, 0x49, 0xd3, 0x59, 0x77, 0x37, 0xeb, 0x5b, 0xaf, 0xce, 0x33,\n\t0xdb, 0xee, 0x70, 0x1a, 0x63, 0x85, 0xf5, 0x7e, 0xe8, 0x40, 0x59, 0x8c, 0xd1, 0x06, 0xac, 0xa4,\n\t0x6c, 0xba, 0x21, 0x19, 0x52, 0xe9, 0xac, 0xda, 0xdd, 0x2b, 0x78, 0x39, 0x9d, 0x3f, 0x24, 0x43,\n\t0x8a, 0xda, 0x80, 0xe8, 0x80, 0x0e, 0x69, 0xc8, 0xbb, 0xcf, 0xe8, 0xb8, 0x9b, 0x70, 0x16, 0x84,\n\t0x7d, 0xe5, 0x9e, 0xbb, 0x57, 0x70, 0x43, 0xcb, 0xbe, 0x4e, 0xc7, 0x1d, 0x29, 0x41, 0x9b, 0xb0,\n\t0x6a, 0xe3, 0x83, 0x90, 0x4b, 0x97, 0xb9, 0x42, 0x73, 0x06, 0x3e, 0x08, 0xf9, 0x7b, 0x20, 0x22,\n\t0x35, 0xa0, 0x3d, 0x1e, 0xb1, 0xd6, 0x2d, 0x41, 0x2b, 0x8a, 0xbd, 0x1a, 0x2c, 0x62, 0xfa, 0xe1,\n\t0x88, 0x26, 0xdc, 0x5b, 0x87, 0x2a, 0xa6, 0x49, 0x1c, 0x85, 0x09, 0x45, 0xd7, 0xa0, 0xb2, 0xc7,\n\t0x58, 0xc4, 0x14, 0x49, 0xac, 0x06, 0xad, 0x1f, 0x39, 0x50, 0xc5, 0xe4, 0x79, 0x87, 0x13, 0x4e,\n\t0xd3, 0xd4, 0x70, 0xb2, 0xd4, 0x40, 0xdb, 0xb0, 0x78, 0x3c, 0x20, 0x7c, 0x48, 0xe2, 0x66, 0x49,\n\t0x3a, 0x69, 0xdd, 0x72, 0x92, 0x59, 0xd9, 0xfe, 0x9a, 0x82, 0xec, 0x85, 0x9c, 0x8d, 0xb1, 0x59,\n\t0xe0, 0x6d, 0xc3, 0x92, 0x2d, 0x40, 0x0d, 0x70, 0x9f, 0xd1, 0xb1, 0x26, 0x20, 0x3e, 0x05, 0xa9,\n\t0x13, 0x91, 0xaf, 0x3a, 0x57, 0xd4, 0x60, 0xbb, 0xf4, 0x8e, 0xd3, 0xfa, 0x7b, 0x05, 0x16, 0x3a,\n\t0xbd, 0xa7, 0x74, 0x48, 0x44, 0x4a, 0x9d, 0x50, 0x96, 0x04, 0x9a, 0x99, 0x8b, 0xcd, 0x10, 0xdd,\n\t0x80, 0xca, 0x93, 0x41, 0xd4, 0x7b, 0x26, 0x97, 0xd7, 0xb7, 0x3e, 0x61, 0x51, 0x53, 0x6b, 0xdb,\n\t0xef, 0x09, 0x31, 0x56, 0x28, 0xef, 0x17, 0x0e, 0x54, 0xe4, 0xc4, 0x19, 0x2a, 0xbf, 0x02, 0x90,\n\t0x06, 0x2f, 0xd1, 0x5b, 0x7e, 0x79, 0x56, 0x6f, 0x9a, 0x1e, 0xd8, 0x82, 0xa3, 0x77, 0xa1, 0x2e,\n\t0x2d, 0x75, 0xf9, 0x38, 0xa6, 0x49, 0xd3, 0x9d, 0xc9, 0x2a, 0xbd, 0xfa, 0x90, 0x26, 0x9c, 0xfa,\n\t0x8a, 0x1b, 0xc8, 0x15, 0x0f, 0xc4, 0x02, 0xef, 0x0f, 0x0e, 0xd4, 0x52, 0xcd, 0x22, 0x1c, 0x59,\n\t0x56, 0x61, 0xf9, 0x2d, 0xe6, 0x84, 0x6e, 0x73, 0x7a, 0xc5, 0x37, 0x5a, 0x87, 0xba, 0x4f, 0x93,\n\t0x1e, 0x0b, 0x62, 0x2e, 0x36, 0xa4, 0x4e, 0x97, 0x3d, 0x85, 0x3c, 0xa8, 0x32, 0xfa, 0xe1, 0x28,\n\t0x60, 0xd4, 0x97, 0x27, 0xac, 0x8a, 0xd3, 0xb1, 0x90, 0x45, 0x12, 0x45, 0x06, 0xcd, 0x8a, 0x92,\n\t0x99, 0xb1, 0x90, 0xf5, 0xa2, 0x61, 0x3c, 0xe2, 0xd4, 0x6f, 0x2e, 0x28, 0x99, 0x19, 0xa3, 0x57,\n\t0xa0, 0x96, 0xd0, 0x30, 0x09, 0x78, 0x70, 0x42, 0x9b, 0x8b, 0x52, 0x98, 0x4d, 0x78, 0xbf, 0x2a,\n\t0x41, 0xdd, 0xda, 0x25, 0x7a, 0x19, 0x6a, 0x82, 0xab, 0x75, 0x4c, 0x70, 0x55, 0x4c, 0xc8, 0xf3,\n\t0xf1, 0x62, 0x61, 0x44, 0xbb, 0xb0, 0x18, 0xd2, 0x84, 0x8b, 0x33, 0xe4, 0xca, 0xea, 0xf4, 0xda,\n\t0x99, 0x1e, 0x96, 0xdf, 0x41, 0xd8, 0xbf, 0x1f, 0xf9, 0x14, 0x9b, 0x95, 0x82, 0xd0, 0x30, 0x08,\n\t0xbb, 0x01, 0xa7, 0xc3, 0x44, 0xfa, 0xc4, 0xc5, 0xd5, 0x61, 0x10, 0x1e, 0x88, 0xb1, 0x14, 0x92,\n\t0x53, 0x2d, 0xac, 0x68, 0x21, 0x39, 0x95, 0xc2, 0xd6, 0x7d, 0xb5, 0x33, 0xad, 0x71, 0xb2, 0xf4,\n\t0x00, 0x2c, 0x74, 0x0e, 0x0e, 0xf7, 0xef, 0xed, 0x35, 0x1c, 0x54, 0x85, 0xf2, 0xbd, 0x83, 0xce,\n\t0x83, 0x46, 0x09, 0x2d, 0x82, 0xdb, 0xd9, 0x7b, 0xd0, 0x70, 0xc5, 0xc7, 0xfd, 0x9d, 0xa3, 0x46,\n\t0x59, 0x94, 0xa8, 0x7d, 0xfc, 0xfe, 0xc3, 0xa3, 0x46, 0xa5, 0xf5, 0x93, 0x32, 0xac, 0xed, 0x53,\n\t0x7e, 0xc4, 0xa2, 0x93, 0xc0, 0xa7, 0x4c, 0xf1, 0xb7, 0x0f, 0xf1, 0xbf, 0x5c, 0xeb, 0x14, 0xdf,\n\t0x80, 0x6a, 0xac, 0x91, 0xd2, 0x8d, 0xf5, 0xad, 0xb5, 0x99, 0xcd, 0xe3, 0x14, 0x82, 0x28, 0x34,\n\t0x18, 0x4d, 0xa2, 0x11, 0xeb, 0xd1, 0x6e, 0x22, 0x85, 0x26, 0xa7, 0xb7, 0xad, 0x65, 0x33, 0xe6,\n\t0xdb, 0xc6, 0x9e, 0xf8, 0x90, 0xab, 0xd5, 0x7c, 0xa2, 0x0e, 0xf8, 0x2a, 0x9b, 0x9c, 0x45, 0x03,\n\t0xb8, 0xea, 0x13, 0x4e, 0xba, 0x53, 0x96, 0x54, 0xfe, 0xdf, 0x2e, 0x66, 0xe9, 0x0e, 0xe1, 0xa4,\n\t0x33, 0x6b, 0x6b, 0xcd, 0x9f, 0x9e, 0x47, 0x6f, 0x43, 0xdd, 0x4f, 0x7b, 0x90, 0x08, 0x9e, 0xb0,\n\t0xf2, 0x52, 0x6e, 0x87, 0xc2, 0x36, 0xd2, 0x7b, 0x08, 0xd7, 0xf2, 0xf6, 0x93, 0x53, 0x97, 0x36,\n\t0xec, 0xba, 0x94, 0xeb, 0xe3, 0xac, 0x54, 0x79, 0x8f, 0xe1, 0x7a, 0x3e, 0xf9, 0x4b, 0x2a, 0x6e,\n\t0xfd, 0xc9, 0x81, 0x97, 0x8e, 0x18, 0x8d, 0x09, 0xa3, 0xc6, 0x6b, 0xbb, 0x51, 0x78, 0x1c, 0xf4,\n\t0xbd, 0xed, 0x34, 0x3d, 0xd0, 0x4d, 0x58, 0xe8, 0xc9, 0x49, 0x9d, 0x0f, 0xf6, 0xe9, 0xb1, 0xaf,\n\t0x04, 0x58, 0xc3, 0xbc, 0xef, 0x39, 0x56, 0x3e, 0x7d, 0x15, 0x56, 0x63, 0x65, 0xc1, 0xef, 0x16,\n\t0x53, 0xb3, 0x62, 0xf0, 0x8a, 0xca, 0x74, 0x34, 0x4a, 0x45, 0xa3, 0xd1, 0xfa, 0x41, 0x09, 0xae,\n\t0x3d, 0x8c, 0xfb, 0x8c, 0xf8, 0x34, 0x8d, 0x8a, 0x68, 0x26, 0x1e, 0xcb, 0x36, 0x77, 0x66, 0xd9,\n\t0xb0, 0x8a, 0x78, 0x69, 0xb2, 0x88, 0xbf, 0x09, 0x35, 0x46, 0x9e, 0x77, 0x13, 0xa1, 0x4e, 0xd6,\n\t0x88, 0xfa, 0xd6, 0xd5, 0x9c, 0xb6, 0x85, 0xab, 0x4c, 0x7f, 0x79, 0xdf, 0xb5, 0x9d, 0xf2, 0x2e,\n\t0xac, 0x8c, 0x14, 0x31, 0x5f, 0xeb, 0x38, 0xc7, 0x27, 0xcb, 0x06, 0xae, 0xfa, 0xe8, 0x85, 0x5d,\n\t0xf2, 0x3b, 0x07, 0xbc, 0x47, 0x64, 0x10, 0xf8, 0x82, 0x9c, 0xf6, 0x89, 0xe8, 0x0c, 0x3a, 0xea,\n\t0x8f, 0x0b, 0x3a, 0x26, 0x4b, 0x89, 0x52, 0xb1, 0x94, 0xd8, 0xb5, 0x36, 0x3f, 0x45, 0xde, 0x29,\n\t0x4c, 0xfe, 0x37, 0x0e, 0x34, 0x0d, 0xf9, 0xec, 0x3c, 0xfc, 0x5f, 0x50, 0xff, 0xad, 0x03, 0x35,\n\t0x45, 0x74, 0xc4, 0xa8, 0xd7, 0xcf, 0xb8, 0xbe, 0x0e, 0x6b, 0x9c, 0x32, 0x46, 0x8e, 0x23, 0x36,\n\t0xec, 0xda, 0x37, 0x86, 0x1a, 0x6e, 0xa4, 0x82, 0x47, 0x3a, 0xeb, 0xfe, 0x37, 0xdc, 0xff, 0xe9,\n\t0xc0, 0x12, 0xa6, 0xc4, 0x37, 0xf9, 0xe2, 0xf9, 0x05, 0x5d, 0x7d, 0x1b, 0x96, 0x7b, 0x23, 0xc6,\n\t0xc4, 0x2d, 0x53, 0x25, 0xf9, 0x39, 0xac, 0x97, 0x34, 0x5a, 0x1d, 0x98, 0xb1, 0xc5, 0xfd, 0x8b,\n\t0x50, 0x0b, 0xe9, 0xf3, 0x62, 0x47, 0xa5, 0x1a, 0xd2, 0xe7, 0x97, 0x3c, 0x25, 0xbf, 0x2e, 0x03,\n\t0x3a, 0x1a, 0x90, 0xd0, 0xec, 0x78, 0xf7, 0x29, 0x09, 0xfb, 0xd4, 0xfb, 0x8f, 0x53, 0x70, 0xe3,\n\t0xef, 0x40, 0x3d, 0x66, 0x41, 0xc4, 0x8a, 0x6d, 0x1b, 0x24, 0x56, 0x51, 0xde, 0x03, 0x14, 0xb3,\n\t0x28, 0x8e, 0x12, 0xea, 0x77, 0xb3, 0x1d, 0xbb, 0x67, 0x2b, 0x68, 0x98, 0x25, 0x87, 0x66, 0xe7,\n\t0x59, 0xa2, 0x94, 0x0b, 0x25, 0x0a, 0xfa, 0x2c, 0x2c, 0x2b, 0xc6, 0x31, 0x0b, 0x4e, 0x84, 0xc9,\n\t0x8a, 0xbc, 0xfe, 0x2d, 0xc9, 0xc9, 0x23, 0x35, 0xe7, 0xfd, 0xbc, 0x64, 0x85, 0xe4, 0x36, 0x2c,\n\t0xc7, 0x03, 0x12, 0x86, 0x45, 0x2b, 0xd8, 0x92, 0x46, 0x2b, 0x82, 0xbb, 0xe2, 0xda, 0x20, 0xef,\n\t0x87, 0x49, 0x97, 0xd1, 0x78, 0x40, 0x7a, 0x54, 0xc7, 0x67, 0xfe, 0xcb, 0x6c, 0xd5, 0xac, 0xc0,\n\t0x6a, 0x01, 0xda, 0x80, 0x55, 0x43, 0xc1, 0xd0, 0x76, 0x25, 0xed, 0x15, 0x3d, 0xad, 0x89, 0x5f,\n\t0xb8, 0x9f, 0xa3, 0x37, 0x00, 0x0d, 0x68, 0x9f, 0xf4, 0xc6, 0xf2, 0xbe, 0xdd, 0x4d, 0xc6, 0x09,\n\t0xa7, 0x43, 0x7d, 0x89, 0x6d, 0x28, 0x89, 0xa8, 0x9e, 0x1d, 0x39, 0xdf, 0xfa, 0xa3, 0x0b, 0x57,\n\t0x77, 0xe2, 0x78, 0x30, 0x9e, 0xca, 0x9b, 0x7f, 0x7f, 0xfc, 0x79, 0x33, 0x13, 0x0d, 0xf7, 0x45,\n\t0xa2, 0xf1, 0xc2, 0xe9, 0x92, 0xe3, 0xf9, 0x4a, 0x9e, 0xe7, 0xbd, 0xdf, 0x3b, 0x97, 0x3e, 0xc5,\n\t0x4d, 0x58, 0x34, 0x36, 0xd4, 0x9b, 0xc4, 0x0c, 0xa7, 0xc3, 0xea, 0x5e, 0x32, 0xac, 0xe5, 0x39,\n\t0x61, 0xfd, 0x47, 0x09, 0xae, 0x1e, 0x0c, 0xe3, 0x88, 0xf1, 0xc9, 0x5b, 0xc4, 0x5b, 0x05, 0xa3,\n\t0xba, 0x02, 0xa5, 0xc0, 0xd7, 0xef, 0xcf, 0x52, 0xe0, 0x7b, 0xa7, 0xd0, 0x50, 0xea, 0x68, 0x5a,\n\t0x52, 0xcf, 0x7d, 0xbd, 0x14, 0x4a, 0x08, 0x85, 0xb2, 0x1d, 0xe6, 0x4e, 0x38, 0xcc, 0xfb, 0xa5,\n\t0x1d, 0x8d, 0x0f, 0x00, 0x05, 0x9a, 0x46, 0xd7, 0x5c, 0xb7, 0x4d, 0x5b, 0xb8, 0x69, 0x99, 0xc8,\n\t0xd9, 0x7a, 0x7b, 0x9a, 0x3f, 0x5e, 0x0b, 0xa6, 0x66, 0x92, 0x8b, 0x57, 0xdf, 0xbf, 0x38, 0xb0,\n\t0x22, 0xfa, 0x4d, 0xd6, 0xe2, 0x3f, 0xbe, 0xe6, 0xce, 0x26, 0x5e, 0x3e, 0x95, 0x42, 0xa9, 0xa9,\n\t0xdd, 0x7c, 0xe1, 0xfd, 0xfd, 0xd4, 0x81, 0x6b, 0xe6, 0x99, 0x22, 0xda, 0x7a, 0xde, 0x93, 0xec,\n\t0xd4, 0xe2, 0x75, 0x4b, 0x54, 0x85, 0x14, 0x3b, 0xff, 0x51, 0x66, 0xa3, 0x2e, 0xce, 0xee, 0x67,\n\t0x0e, 0x7c, 0xd2, 0x5c, 0xb2, 0x2c, 0x8a, 0x1f, 0xc1, 0xb3, 0xe0, 0x23, 0xb9, 0x8c, 0xfc, 0xcd,\n\t0x81, 0xb5, 0x94, 0x56, 0x7a, 0x23, 0x49, 0x2e, 0x4e, 0x0b, 0xbd, 0x0d, 0xd0, 0x8b, 0xc2, 0x90,\n\t0xf6, 0xb8, 0xb9, 0xe7, 0x9f, 0x55, 0x73, 0x33, 0xa8, 0xf7, 0x2d, 0x6b, 0x3f, 0xd7, 0x61, 0x21,\n\t0x1a, 0xf1, 0x78, 0xc4, 0x75, 0x4a, 0xea, 0xd1, 0x85, 0xc3, 0xb0, 0xf5, 0xe3, 0x1a, 0x54, 0xcd,\n\t0x93, 0x0c, 0x7d, 0x13, 0x6a, 0xfb, 0x94, 0xeb, 0x1f, 0xab, 0x3e, 0x77, 0xce, 0x6b, 0x57, 0x25,\n\t0xd0, 0xe7, 0x0b, 0xbd, 0x89, 0xd1, 0x60, 0xce, 0xfb, 0x0f, 0x6d, 0x5a, 0xeb, 0x73, 0x11, 0xa9,\n\t0xa5, 0xd7, 0x0a, 0x20, 0xb5, 0xb5, 0xef, 0x9c, 0xf5, 0xf8, 0x40, 0x37, 0x2c, 0x45, 0xf3, 0x61,\n\t0xa9, 0xdd, 0x76, 0x51, 0xb8, 0x36, 0x3e, 0x9a, 0xff, 0x78, 0x40, 0xaf, 0xe7, 0xe8, 0x9a, 0x06,\n\t0xa5, 0x86, 0xdf, 0x28, 0x06, 0xd6, 0x66, 0x83, 0xfc, 0x37, 0x28, 0xda, 0xb0, 0xb4, 0xe4, 0x01,\n\t0x52, 0x73, 0x9b, 0xe7, 0x03, 0xb5, 0xa9, 0xbb, 0xd6, 0x1b, 0x03, 0xbd, 0x62, 0x2d, 0x4b, 0x67,\n\t0x53, 0xa5, 0xaf, 0xce, 0x91, 0x6a, 0x4d, 0xdf, 0x98, 0xbc, 0xf1, 0xa3, 0x4f, 0xdb, 0x6f, 0x5b,\n\t0x4b, 0x90, 0xea, 0x5b, 0x9f, 0x0f, 0xd0, 0x2a, 0x7b, 0x79, 0x57, 0x6a, 0x64, 0xa7, 0xe9, 0xac,\n\t0x38, 0x55, 0xff, 0x85, 0xf3, 0x60, 0xda, 0xc8, 0x71, 0xee, 0x05, 0x0c, 0xd9, 0xcb, 0x73, 0xe4,\n\t0xa9, 0x99, 0x8d, 0x73, 0x71, 0x99, 0x9d, 0x9c, 0xb6, 0x38, 0x61, 0x27, 0xaf, 0x6d, 0xe6, 0xd9,\n\t0xc9, 0xc7, 0x69, 0x3b, 0x8f, 0xa7, 0x3b, 0x21, 0xfa, 0xcc, 0x94, 0xa3, 0x33, 0x51, 0xaa, 0xbd,\n\t0x75, 0x16, 0x44, 0x2b, 0xfe, 0xb2, 0xfa, 0x29, 0x1f, 0x4d, 0xfc, 0x12, 0xca, 0xa3, 0x38, 0x55,\n\t0xd2, 0x9c, 0x15, 0xa8, 0xa5, 0x5b, 0xdf, 0x77, 0xa1, 0x6e, 0x35, 0x06, 0xf4, 0x81, 0x5d, 0x9c,\n\t0x36, 0x72, 0xca, 0x8e, 0xdd, 0xe3, 0x72, 0xb3, 0x7a, 0x0e, 0x50, 0x53, 0x3d, 0x3d, 0xa3, 0x1f,\n\t0xa1, 0xbc, 0xb3, 0x38, 0x83, 0x4a, 0x8d, 0xde, 0x28, 0x88, 0xd6, 0x96, 0x9f, 0xe4, 0xb4, 0x9a,\n\t0x89, 0xf2, 0x3b, 0x23, 0xcd, 0x2d, 0xbf, 0x79, 0x28, 0x65, 0xe1, 0x4d, 0xe7, 0x12, 0x81, 0x78,\n\t0xb2, 0x20, 0xff, 0xa3, 0xbb, 0xf5, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xc8, 0x16, 0x0b, 0x32,\n\t0xb6, 0x1b, 0x00, 0x00,\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/lang/blocktoattr/doc.go",
    "content": "// Package blocktoattr includes some helper functions that can perform\n// preprocessing on a HCL body where a configschema.Block schema is available\n// in order to allow list and set attributes defined in the schema to be\n// optionally written by the user as block syntax.\npackage blocktoattr\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/lang/blocktoattr/fixup.go",
    "content": "package blocktoattr\n\nimport (\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/hashicorp/hcl2/hcldec\"\n\t\"github.com/hashicorp/terraform/configs/configschema\"\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// FixUpBlockAttrs takes a raw HCL body and adds some additional normalization\n// functionality to allow attributes that are specified as having list or set\n// type in the schema to be written with HCL block syntax as multiple nested\n// blocks with the attribute name as the block type.\n//\n// This partially restores some of the block/attribute confusion from HCL 1\n// so that existing patterns that depended on that confusion can continue to\n// be used in the short term while we settle on a longer-term strategy.\n//\n// Most of the fixup work is actually done when the returned body is\n// subsequently decoded, so while FixUpBlockAttrs always succeeds, the eventual\n// decode of the body might not, if the content of the body is so ambiguous\n// that there's no safe way to map it to the schema.\nfunc FixUpBlockAttrs(body hcl.Body, schema *configschema.Block) hcl.Body {\n\t// The schema should never be nil, but in practice it seems to be sometimes\n\t// in the presence of poorly-configured test mocks, so we'll be robust\n\t// by synthesizing an empty one.\n\tif schema == nil {\n\t\tschema = &configschema.Block{}\n\t}\n\n\treturn &fixupBody{\n\t\toriginal: body,\n\t\tschema:   schema,\n\t\tnames:    ambiguousNames(schema),\n\t}\n}\n\ntype fixupBody struct {\n\toriginal hcl.Body\n\tschema   *configschema.Block\n\tnames    map[string]struct{}\n}\n\n// Content decodes content from the body. The given schema must be the lower-level\n// representation of the same schema that was previously passed to FixUpBlockAttrs,\n// or else the result is undefined.\nfunc (b *fixupBody) Content(schema *hcl.BodySchema) (*hcl.BodyContent, hcl.Diagnostics) {\n\tschema = b.effectiveSchema(schema)\n\tcontent, diags := b.original.Content(schema)\n\treturn b.fixupContent(content), diags\n}\n\nfunc (b *fixupBody) PartialContent(schema *hcl.BodySchema) (*hcl.BodyContent, hcl.Body, hcl.Diagnostics) {\n\tschema = b.effectiveSchema(schema)\n\tcontent, remain, diags := b.original.PartialContent(schema)\n\tremain = &fixupBody{\n\t\toriginal: remain,\n\t\tschema:   b.schema,\n\t\tnames:    b.names,\n\t}\n\treturn b.fixupContent(content), remain, diags\n}\n\nfunc (b *fixupBody) JustAttributes() (hcl.Attributes, hcl.Diagnostics) {\n\t// FixUpBlockAttrs is not intended to be used in situations where we'd use\n\t// JustAttributes, so we just pass this through verbatim to complete our\n\t// implementation of hcl.Body.\n\treturn b.original.JustAttributes()\n}\n\nfunc (b *fixupBody) MissingItemRange() hcl.Range {\n\treturn b.original.MissingItemRange()\n}\n\n// effectiveSchema produces a derived *hcl.BodySchema by sniffing the body's\n// content to determine whether the author has used attribute or block syntax\n// for each of the ambigious attributes where both are permitted.\n//\n// The resulting schema will always contain all of the same names that are\n// in the given schema, but some attribute schemas may instead be replaced by\n// block header schemas.\nfunc (b *fixupBody) effectiveSchema(given *hcl.BodySchema) *hcl.BodySchema {\n\treturn effectiveSchema(given, b.original, b.names, true)\n}\n\nfunc (b *fixupBody) fixupContent(content *hcl.BodyContent) *hcl.BodyContent {\n\tvar ret hcl.BodyContent\n\tret.Attributes = make(hcl.Attributes)\n\tfor name, attr := range content.Attributes {\n\t\tret.Attributes[name] = attr\n\t}\n\tblockAttrVals := make(map[string][]*hcl.Block)\n\tfor _, block := range content.Blocks {\n\t\tif _, exists := b.names[block.Type]; exists {\n\t\t\t// If we get here then we've found a block type whose instances need\n\t\t\t// to be re-interpreted as a list-of-objects attribute. We'll gather\n\t\t\t// those up and fix them up below.\n\t\t\tblockAttrVals[block.Type] = append(blockAttrVals[block.Type], block)\n\t\t\tcontinue\n\t\t}\n\n\t\t// We need to now re-wrap our inner body so it will be subject to the\n\t\t// same attribute-as-block fixup when recursively decoded.\n\t\tretBlock := *block // shallow copy\n\t\tif blockS, ok := b.schema.BlockTypes[block.Type]; ok {\n\t\t\t// Would be weird if not ok, but we'll allow it for robustness; body just won't be fixed up, then\n\t\t\tretBlock.Body = FixUpBlockAttrs(retBlock.Body, &blockS.Block)\n\t\t}\n\n\t\tret.Blocks = append(ret.Blocks, &retBlock)\n\t}\n\t// No we'll install synthetic attributes for each of our fixups. We can't\n\t// do this exactly because HCL's information model expects an attribute\n\t// to be a single decl but we have multiple separate blocks. We'll\n\t// approximate things, then, by using only our first block for the source\n\t// location information. (We are guaranteed at least one by the above logic.)\n\tfor name, blocks := range blockAttrVals {\n\t\tret.Attributes[name] = &hcl.Attribute{\n\t\t\tName: name,\n\t\t\tExpr: &fixupBlocksExpr{\n\t\t\t\tblocks: blocks,\n\t\t\t\tety:    b.schema.Attributes[name].Type.ElementType(),\n\t\t\t},\n\n\t\t\tRange:     blocks[0].DefRange,\n\t\t\tNameRange: blocks[0].TypeRange,\n\t\t}\n\t}\n\treturn &ret\n}\n\ntype fixupBlocksExpr struct {\n\tblocks hcl.Blocks\n\tety    cty.Type\n}\n\nfunc (e *fixupBlocksExpr) Value(ctx *hcl.EvalContext) (cty.Value, hcl.Diagnostics) {\n\t// In order to produce a suitable value for our expression we need to\n\t// now decode the whole descendent block structure under each of our block\n\t// bodies.\n\t//\n\t// That requires us to do something rather strange: we must construct a\n\t// synthetic block type schema derived from the element type of the\n\t// attribute, thus inverting our usual direction of lowering a schema\n\t// into an implied type. Because a type is less detailed than a schema,\n\t// the result is imprecise and in particular will just consider all\n\t// the attributes to be optional and let the provider eventually decide\n\t// whether to return errors if they turn out to be null when required.\n\tschema := SchemaForCtyElementType(e.ety) // this schema's ImpliedType will match e.ety\n\tspec := schema.DecoderSpec()\n\n\tvals := make([]cty.Value, len(e.blocks))\n\tvar diags hcl.Diagnostics\n\tfor i, block := range e.blocks {\n\t\tbody := FixUpBlockAttrs(block.Body, schema)\n\t\tval, blockDiags := hcldec.Decode(body, spec, ctx)\n\t\tdiags = append(diags, blockDiags...)\n\t\tif val == cty.NilVal {\n\t\t\tval = cty.UnknownVal(e.ety)\n\t\t}\n\t\tvals[i] = val\n\t}\n\tif len(vals) == 0 {\n\t\treturn cty.ListValEmpty(e.ety), diags\n\t}\n\treturn cty.ListVal(vals), diags\n}\n\nfunc (e *fixupBlocksExpr) Variables() []hcl.Traversal {\n\tvar ret []hcl.Traversal\n\tschema := SchemaForCtyElementType(e.ety)\n\tspec := schema.DecoderSpec()\n\tfor _, block := range e.blocks {\n\t\tret = append(ret, hcldec.Variables(block.Body, spec)...)\n\t}\n\treturn ret\n}\n\nfunc (e *fixupBlocksExpr) Range() hcl.Range {\n\t// This is not really an appropriate range for the expression but it's\n\t// the best we can do from here.\n\treturn e.blocks[0].DefRange\n}\n\nfunc (e *fixupBlocksExpr) StartRange() hcl.Range {\n\treturn e.blocks[0].DefRange\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/lang/blocktoattr/schema.go",
    "content": "package blocktoattr\n\nimport (\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/hashicorp/terraform/configs/configschema\"\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\nfunc ambiguousNames(schema *configschema.Block) map[string]struct{} {\n\tif schema == nil {\n\t\treturn nil\n\t}\n\tambiguousNames := make(map[string]struct{})\n\tfor name, attrS := range schema.Attributes {\n\t\taty := attrS.Type\n\t\tif (aty.IsListType() || aty.IsSetType()) && aty.ElementType().IsObjectType() {\n\t\t\tambiguousNames[name] = struct{}{}\n\t\t}\n\t}\n\treturn ambiguousNames\n}\n\nfunc effectiveSchema(given *hcl.BodySchema, body hcl.Body, ambiguousNames map[string]struct{}, dynamicExpanded bool) *hcl.BodySchema {\n\tret := &hcl.BodySchema{}\n\n\tappearsAsBlock := make(map[string]struct{})\n\t{\n\t\t// We'll construct some throwaway schemas here just to probe for\n\t\t// whether each of our ambiguous names seems to be being used as\n\t\t// an attribute or a block. We need to check both because in JSON\n\t\t// syntax we rely on the schema to decide between attribute or block\n\t\t// interpretation and so JSON will always answer yes to both of\n\t\t// these questions and we want to prefer the attribute interpretation\n\t\t// in that case.\n\t\tvar probeSchema hcl.BodySchema\n\n\t\tfor name := range ambiguousNames {\n\t\t\tprobeSchema = hcl.BodySchema{\n\t\t\t\tAttributes: []hcl.AttributeSchema{\n\t\t\t\t\t{\n\t\t\t\t\t\tName: name,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t\tcontent, _, _ := body.PartialContent(&probeSchema)\n\t\t\tif _, exists := content.Attributes[name]; exists {\n\t\t\t\t// Can decode as an attribute, so we'll go with that.\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tprobeSchema = hcl.BodySchema{\n\t\t\t\tBlocks: []hcl.BlockHeaderSchema{\n\t\t\t\t\t{\n\t\t\t\t\t\tType: name,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t\tcontent, _, _ = body.PartialContent(&probeSchema)\n\t\t\tif len(content.Blocks) > 0 || dynamicExpanded {\n\t\t\t\t// A dynamic block with an empty iterator returns nothing.\n\t\t\t\t// If there's no attribute and we have either a block or a\n\t\t\t\t// dynamic expansion, we need to rewrite this one as a\n\t\t\t\t// block for a successful result.\n\t\t\t\tappearsAsBlock[name] = struct{}{}\n\t\t\t}\n\t\t}\n\t\tif !dynamicExpanded {\n\t\t\t// If we're deciding for a context where dynamic blocks haven't\n\t\t\t// been expanded yet then we need to probe for those too.\n\t\t\tprobeSchema = hcl.BodySchema{\n\t\t\t\tBlocks: []hcl.BlockHeaderSchema{\n\t\t\t\t\t{\n\t\t\t\t\t\tType:       \"dynamic\",\n\t\t\t\t\t\tLabelNames: []string{\"type\"},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t\tcontent, _, _ := body.PartialContent(&probeSchema)\n\t\t\tfor _, block := range content.Blocks {\n\t\t\t\tif _, exists := ambiguousNames[block.Labels[0]]; exists {\n\t\t\t\t\tappearsAsBlock[block.Labels[0]] = struct{}{}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfor _, attrS := range given.Attributes {\n\t\tif _, exists := appearsAsBlock[attrS.Name]; exists {\n\t\t\tret.Blocks = append(ret.Blocks, hcl.BlockHeaderSchema{\n\t\t\t\tType: attrS.Name,\n\t\t\t})\n\t\t} else {\n\t\t\tret.Attributes = append(ret.Attributes, attrS)\n\t\t}\n\t}\n\n\t// Anything that is specified as a block type in the input schema remains\n\t// that way by just passing through verbatim.\n\tret.Blocks = append(ret.Blocks, given.Blocks...)\n\n\treturn ret\n}\n\n// SchemaForCtyElementType converts a cty object type into an\n// approximately-equivalent configschema.Block representing the element of\n// a list or set. If the given type is not an object type then this\n// function will panic.\nfunc SchemaForCtyElementType(ty cty.Type) *configschema.Block {\n\tatys := ty.AttributeTypes()\n\tret := &configschema.Block{\n\t\tAttributes: make(map[string]*configschema.Attribute, len(atys)),\n\t}\n\tfor name, aty := range atys {\n\t\tret.Attributes[name] = &configschema.Attribute{\n\t\t\tType:     aty,\n\t\t\tOptional: true,\n\t\t}\n\t}\n\treturn ret\n}\n\n// SchemaForCtyContainerType converts a cty list-of-object or set-of-object type\n// into an approximately-equivalent configschema.NestedBlock. If the given type\n// is not of the expected kind then this function will panic.\nfunc SchemaForCtyContainerType(ty cty.Type) *configschema.NestedBlock {\n\tvar nesting configschema.NestingMode\n\tswitch {\n\tcase ty.IsListType():\n\t\tnesting = configschema.NestingList\n\tcase ty.IsSetType():\n\t\tnesting = configschema.NestingSet\n\tdefault:\n\t\tpanic(\"unsuitable type\")\n\t}\n\tnested := SchemaForCtyElementType(ty.ElementType())\n\treturn &configschema.NestedBlock{\n\t\tNesting: nesting,\n\t\tBlock:   *nested,\n\t}\n}\n\n// TypeCanBeBlocks returns true if the given type is a list-of-object or\n// set-of-object type, and would thus be subject to the blocktoattr fixup\n// if used as an attribute type.\nfunc TypeCanBeBlocks(ty cty.Type) bool {\n\treturn (ty.IsListType() || ty.IsSetType()) && ty.ElementType().IsObjectType()\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/lang/blocktoattr/variables.go",
    "content": "package blocktoattr\n\nimport (\n\t\"github.com/hashicorp/hcl2/ext/dynblock\"\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/hashicorp/hcl2/hcldec\"\n\t\"github.com/hashicorp/terraform/configs/configschema\"\n)\n\n// ExpandedVariables finds all of the global variables referenced in the\n// given body with the given schema while taking into account the possibilities\n// both of \"dynamic\" blocks being expanded and the possibility of certain\n// attributes being written instead as nested blocks as allowed by the\n// FixUpBlockAttrs function.\n//\n// This function exists to allow variables to be analyzed prior to dynamic\n// block expansion while also dealing with the fact that dynamic block expansion\n// might in turn produce nested blocks that are subject to FixUpBlockAttrs.\n//\n// This is intended as a drop-in replacement for dynblock.VariablesHCLDec,\n// which is itself a drop-in replacement for hcldec.Variables.\nfunc ExpandedVariables(body hcl.Body, schema *configschema.Block) []hcl.Traversal {\n\trootNode := dynblock.WalkVariables(body)\n\treturn walkVariables(rootNode, body, schema)\n}\n\nfunc walkVariables(node dynblock.WalkVariablesNode, body hcl.Body, schema *configschema.Block) []hcl.Traversal {\n\tgivenRawSchema := hcldec.ImpliedSchema(schema.DecoderSpec())\n\tambiguousNames := ambiguousNames(schema)\n\teffectiveRawSchema := effectiveSchema(givenRawSchema, body, ambiguousNames, false)\n\tvars, children := node.Visit(effectiveRawSchema)\n\n\tfor _, child := range children {\n\t\tif blockS, exists := schema.BlockTypes[child.BlockTypeName]; exists {\n\t\t\tvars = append(vars, walkVariables(child.Node, child.Body(), &blockS.Block)...)\n\t\t} else if attrS, exists := schema.Attributes[child.BlockTypeName]; exists {\n\t\t\tsynthSchema := SchemaForCtyElementType(attrS.Type.ElementType())\n\t\t\tvars = append(vars, walkVariables(child.Node, child.Body(), synthSchema)...)\n\t\t}\n\t}\n\n\treturn vars\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/lang/data.go",
    "content": "package lang\n\nimport (\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// Data is an interface whose implementations can provide cty.Value\n// representations of objects identified by referenceable addresses from\n// the addrs package.\n//\n// This interface will grow each time a new type of reference is added, and so\n// implementations outside of the Terraform codebases are not advised.\n//\n// Each method returns a suitable value and optionally some diagnostics. If the\n// returned diagnostics contains errors then the type of the returned value is\n// used to construct an unknown value of the same type which is then used in\n// place of the requested object so that type checking can still proceed. In\n// cases where it's not possible to even determine a suitable result type,\n// cty.DynamicVal is returned along with errors describing the problem.\ntype Data interface {\n\tStaticValidateReferences(refs []*addrs.Reference, self addrs.Referenceable) tfdiags.Diagnostics\n\n\tGetCountAttr(addrs.CountAttr, tfdiags.SourceRange) (cty.Value, tfdiags.Diagnostics)\n\tGetResourceInstance(addrs.ResourceInstance, tfdiags.SourceRange) (cty.Value, tfdiags.Diagnostics)\n\tGetLocalValue(addrs.LocalValue, tfdiags.SourceRange) (cty.Value, tfdiags.Diagnostics)\n\tGetModuleInstance(addrs.ModuleCallInstance, tfdiags.SourceRange) (cty.Value, tfdiags.Diagnostics)\n\tGetModuleInstanceOutput(addrs.ModuleCallOutput, tfdiags.SourceRange) (cty.Value, tfdiags.Diagnostics)\n\tGetPathAttr(addrs.PathAttr, tfdiags.SourceRange) (cty.Value, tfdiags.Diagnostics)\n\tGetTerraformAttr(addrs.TerraformAttr, tfdiags.SourceRange) (cty.Value, tfdiags.Diagnostics)\n\tGetInputVariable(addrs.InputVariable, tfdiags.SourceRange) (cty.Value, tfdiags.Diagnostics)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/lang/doc.go",
    "content": "// Package lang deals with the runtime aspects of Terraform's configuration\n// language, with concerns such as expression evaluation. It is closely related\n// to sibling package \"configs\", which is responsible for configuration\n// parsing and static validation.\npackage lang\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/lang/eval.go",
    "content": "package lang\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"strconv\"\n\n\t\"github.com/hashicorp/hcl2/ext/dynblock\"\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/hashicorp/hcl2/hcldec\"\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/configs/configschema\"\n\t\"github.com/hashicorp/terraform/lang/blocktoattr\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n\t\"github.com/zclconf/go-cty/cty\"\n\t\"github.com/zclconf/go-cty/cty/convert\"\n)\n\n// ExpandBlock expands any \"dynamic\" blocks present in the given body. The\n// result is a body with those blocks expanded, ready to be evaluated with\n// EvalBlock.\n//\n// If the returned diagnostics contains errors then the result may be\n// incomplete or invalid.\nfunc (s *Scope) ExpandBlock(body hcl.Body, schema *configschema.Block) (hcl.Body, tfdiags.Diagnostics) {\n\tspec := schema.DecoderSpec()\n\n\ttraversals := dynblock.ExpandVariablesHCLDec(body, spec)\n\trefs, diags := References(traversals)\n\n\tctx, ctxDiags := s.EvalContext(refs)\n\tdiags = diags.Append(ctxDiags)\n\n\treturn dynblock.Expand(body, ctx), diags\n}\n\n// EvalBlock evaluates the given body using the given block schema and returns\n// a cty object value representing its contents. The type of the result conforms\n// to the implied type of the given schema.\n//\n// This function does not automatically expand \"dynamic\" blocks within the\n// body. If that is desired, first call the ExpandBlock method to obtain\n// an expanded body to pass to this method.\n//\n// If the returned diagnostics contains errors then the result may be\n// incomplete or invalid.\nfunc (s *Scope) EvalBlock(body hcl.Body, schema *configschema.Block) (cty.Value, tfdiags.Diagnostics) {\n\tspec := schema.DecoderSpec()\n\n\trefs, diags := ReferencesInBlock(body, schema)\n\n\tctx, ctxDiags := s.EvalContext(refs)\n\tdiags = diags.Append(ctxDiags)\n\tif diags.HasErrors() {\n\t\t// We'll stop early if we found problems in the references, because\n\t\t// it's likely evaluation will produce redundant copies of the same errors.\n\t\treturn cty.UnknownVal(schema.ImpliedType()), diags\n\t}\n\n\t// HACK: In order to remain compatible with some assumptions made in\n\t// Terraform v0.11 and earlier about the approximate equivalence of\n\t// attribute vs. block syntax, we do a just-in-time fixup here to allow\n\t// any attribute in the schema that has a list-of-objects or set-of-objects\n\t// kind to potentially be populated instead by one or more nested blocks\n\t// whose type is the attribute name.\n\tbody = blocktoattr.FixUpBlockAttrs(body, schema)\n\n\tval, evalDiags := hcldec.Decode(body, spec, ctx)\n\tdiags = diags.Append(evalDiags)\n\n\treturn val, diags\n}\n\n// EvalExpr evaluates a single expression in the receiving context and returns\n// the resulting value. The value will be converted to the given type before\n// it is returned if possible, or else an error diagnostic will be produced\n// describing the conversion error.\n//\n// Pass an expected type of cty.DynamicPseudoType to skip automatic conversion\n// and just obtain the returned value directly.\n//\n// If the returned diagnostics contains errors then the result may be\n// incomplete, but will always be of the requested type.\nfunc (s *Scope) EvalExpr(expr hcl.Expression, wantType cty.Type) (cty.Value, tfdiags.Diagnostics) {\n\trefs, diags := ReferencesInExpr(expr)\n\n\tctx, ctxDiags := s.EvalContext(refs)\n\tdiags = diags.Append(ctxDiags)\n\tif diags.HasErrors() {\n\t\t// We'll stop early if we found problems in the references, because\n\t\t// it's likely evaluation will produce redundant copies of the same errors.\n\t\treturn cty.UnknownVal(wantType), diags\n\t}\n\n\tval, evalDiags := expr.Value(ctx)\n\tdiags = diags.Append(evalDiags)\n\n\tif wantType != cty.DynamicPseudoType {\n\t\tvar convErr error\n\t\tval, convErr = convert.Convert(val, wantType)\n\t\tif convErr != nil {\n\t\t\tval = cty.UnknownVal(wantType)\n\t\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Incorrect value type\",\n\t\t\t\tDetail:   fmt.Sprintf(\"Invalid expression value: %s.\", tfdiags.FormatError(convErr)),\n\t\t\t\tSubject:  expr.Range().Ptr(),\n\t\t\t})\n\t\t}\n\t}\n\n\treturn val, diags\n}\n\n// EvalReference evaluates the given reference in the receiving scope and\n// returns the resulting value. The value will be converted to the given type before\n// it is returned if possible, or else an error diagnostic will be produced\n// describing the conversion error.\n//\n// Pass an expected type of cty.DynamicPseudoType to skip automatic conversion\n// and just obtain the returned value directly.\n//\n// If the returned diagnostics contains errors then the result may be\n// incomplete, but will always be of the requested type.\nfunc (s *Scope) EvalReference(ref *addrs.Reference, wantType cty.Type) (cty.Value, tfdiags.Diagnostics) {\n\tvar diags tfdiags.Diagnostics\n\n\t// We cheat a bit here and just build an EvalContext for our requested\n\t// reference with the \"self\" address overridden, and then pull the \"self\"\n\t// result out of it to return.\n\tctx, ctxDiags := s.evalContext([]*addrs.Reference{ref}, ref.Subject)\n\tdiags = diags.Append(ctxDiags)\n\tval := ctx.Variables[\"self\"]\n\tif val == cty.NilVal {\n\t\tval = cty.DynamicVal\n\t}\n\n\tvar convErr error\n\tval, convErr = convert.Convert(val, wantType)\n\tif convErr != nil {\n\t\tval = cty.UnknownVal(wantType)\n\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Incorrect value type\",\n\t\t\tDetail:   fmt.Sprintf(\"Invalid expression value: %s.\", tfdiags.FormatError(convErr)),\n\t\t\tSubject:  ref.SourceRange.ToHCL().Ptr(),\n\t\t})\n\t}\n\n\treturn val, diags\n}\n\n// EvalContext constructs a HCL expression evaluation context whose variable\n// scope contains sufficient values to satisfy the given set of references.\n//\n// Most callers should prefer to use the evaluation helper methods that\n// this type offers, but this is here for less common situations where the\n// caller will handle the evaluation calls itself.\nfunc (s *Scope) EvalContext(refs []*addrs.Reference) (*hcl.EvalContext, tfdiags.Diagnostics) {\n\treturn s.evalContext(refs, s.SelfAddr)\n}\n\nfunc (s *Scope) evalContext(refs []*addrs.Reference, selfAddr addrs.Referenceable) (*hcl.EvalContext, tfdiags.Diagnostics) {\n\tif s == nil {\n\t\tpanic(\"attempt to construct EvalContext for nil Scope\")\n\t}\n\n\tvar diags tfdiags.Diagnostics\n\tvals := make(map[string]cty.Value)\n\tfuncs := s.Functions()\n\tctx := &hcl.EvalContext{\n\t\tVariables: vals,\n\t\tFunctions: funcs,\n\t}\n\n\tif len(refs) == 0 {\n\t\t// Easy path for common case where there are no references at all.\n\t\treturn ctx, diags\n\t}\n\n\t// First we'll do static validation of the references. This catches things\n\t// early that might otherwise not get caught due to unknown values being\n\t// present in the scope during planning.\n\tif staticDiags := s.Data.StaticValidateReferences(refs, selfAddr); staticDiags.HasErrors() {\n\t\tdiags = diags.Append(staticDiags)\n\t\treturn ctx, diags\n\t}\n\n\t// The reference set we are given has not been de-duped, and so there can\n\t// be redundant requests in it for two reasons:\n\t//  - The same item is referenced multiple times\n\t//  - Both an item and that item's container are separately referenced.\n\t// We will still visit every reference here and ask our data source for\n\t// it, since that allows us to gather a full set of any errors and\n\t// warnings, but once we've gathered all the data we'll then skip anything\n\t// that's redundant in the process of populating our values map.\n\tdataResources := map[string]map[string]map[addrs.InstanceKey]cty.Value{}\n\tmanagedResources := map[string]map[string]map[addrs.InstanceKey]cty.Value{}\n\twholeModules := map[string]map[addrs.InstanceKey]cty.Value{}\n\tmoduleOutputs := map[string]map[addrs.InstanceKey]map[string]cty.Value{}\n\tinputVariables := map[string]cty.Value{}\n\tlocalValues := map[string]cty.Value{}\n\tpathAttrs := map[string]cty.Value{}\n\tterraformAttrs := map[string]cty.Value{}\n\tcountAttrs := map[string]cty.Value{}\n\tvar self cty.Value\n\n\tfor _, ref := range refs {\n\t\trng := ref.SourceRange\n\t\tisSelf := false\n\n\t\trawSubj := ref.Subject\n\t\tif rawSubj == addrs.Self {\n\t\t\tif selfAddr == nil {\n\t\t\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\tSummary:  `Invalid \"self\" reference`,\n\t\t\t\t\t// This detail message mentions some current practice that\n\t\t\t\t\t// this codepath doesn't really \"know about\". If the \"self\"\n\t\t\t\t\t// object starts being supported in more contexts later then\n\t\t\t\t\t// we'll need to adjust this message.\n\t\t\t\t\tDetail:  `The \"self\" object is not available in this context. This object can be used only in resource provisioner and connection blocks.`,\n\t\t\t\t\tSubject: ref.SourceRange.ToHCL().Ptr(),\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// Treat \"self\" as an alias for the configured self address.\n\t\t\trawSubj = selfAddr\n\t\t\tisSelf = true\n\n\t\t\tif rawSubj == addrs.Self {\n\t\t\t\t// Programming error: the self address cannot alias itself.\n\t\t\t\tpanic(\"scope SelfAddr attempting to alias itself\")\n\t\t\t}\n\t\t}\n\n\t\t// This type switch must cover all of the \"Referenceable\" implementations\n\t\t// in package addrs.\n\t\tswitch subj := rawSubj.(type) {\n\n\t\tcase addrs.ResourceInstance:\n\t\t\tvar into map[string]map[string]map[addrs.InstanceKey]cty.Value\n\t\t\tswitch subj.Resource.Mode {\n\t\t\tcase addrs.ManagedResourceMode:\n\t\t\t\tinto = managedResources\n\t\t\tcase addrs.DataResourceMode:\n\t\t\t\tinto = dataResources\n\t\t\tdefault:\n\t\t\t\tpanic(fmt.Errorf(\"unsupported ResourceMode %s\", subj.Resource.Mode))\n\t\t\t}\n\n\t\t\tval, valDiags := normalizeRefValue(s.Data.GetResourceInstance(subj, rng))\n\t\t\tdiags = diags.Append(valDiags)\n\n\t\t\tr := subj.Resource\n\t\t\tif into[r.Type] == nil {\n\t\t\t\tinto[r.Type] = make(map[string]map[addrs.InstanceKey]cty.Value)\n\t\t\t}\n\t\t\tif into[r.Type][r.Name] == nil {\n\t\t\t\tinto[r.Type][r.Name] = make(map[addrs.InstanceKey]cty.Value)\n\t\t\t}\n\t\t\tinto[r.Type][r.Name][subj.Key] = val\n\t\t\tif isSelf {\n\t\t\t\tself = val\n\t\t\t}\n\n\t\tcase addrs.ModuleCallInstance:\n\t\t\tval, valDiags := normalizeRefValue(s.Data.GetModuleInstance(subj, rng))\n\t\t\tdiags = diags.Append(valDiags)\n\n\t\t\tif wholeModules[subj.Call.Name] == nil {\n\t\t\t\twholeModules[subj.Call.Name] = make(map[addrs.InstanceKey]cty.Value)\n\t\t\t}\n\t\t\twholeModules[subj.Call.Name][subj.Key] = val\n\t\t\tif isSelf {\n\t\t\t\tself = val\n\t\t\t}\n\n\t\tcase addrs.ModuleCallOutput:\n\t\t\tval, valDiags := normalizeRefValue(s.Data.GetModuleInstanceOutput(subj, rng))\n\t\t\tdiags = diags.Append(valDiags)\n\n\t\t\tcallName := subj.Call.Call.Name\n\t\t\tcallKey := subj.Call.Key\n\t\t\tif moduleOutputs[callName] == nil {\n\t\t\t\tmoduleOutputs[callName] = make(map[addrs.InstanceKey]map[string]cty.Value)\n\t\t\t}\n\t\t\tif moduleOutputs[callName][callKey] == nil {\n\t\t\t\tmoduleOutputs[callName][callKey] = make(map[string]cty.Value)\n\t\t\t}\n\t\t\tmoduleOutputs[callName][callKey][subj.Name] = val\n\t\t\tif isSelf {\n\t\t\t\tself = val\n\t\t\t}\n\n\t\tcase addrs.InputVariable:\n\t\t\tval, valDiags := normalizeRefValue(s.Data.GetInputVariable(subj, rng))\n\t\t\tdiags = diags.Append(valDiags)\n\t\t\tinputVariables[subj.Name] = val\n\t\t\tif isSelf {\n\t\t\t\tself = val\n\t\t\t}\n\n\t\tcase addrs.LocalValue:\n\t\t\tval, valDiags := normalizeRefValue(s.Data.GetLocalValue(subj, rng))\n\t\t\tdiags = diags.Append(valDiags)\n\t\t\tlocalValues[subj.Name] = val\n\t\t\tif isSelf {\n\t\t\t\tself = val\n\t\t\t}\n\n\t\tcase addrs.PathAttr:\n\t\t\tval, valDiags := normalizeRefValue(s.Data.GetPathAttr(subj, rng))\n\t\t\tdiags = diags.Append(valDiags)\n\t\t\tpathAttrs[subj.Name] = val\n\t\t\tif isSelf {\n\t\t\t\tself = val\n\t\t\t}\n\n\t\tcase addrs.TerraformAttr:\n\t\t\tval, valDiags := normalizeRefValue(s.Data.GetTerraformAttr(subj, rng))\n\t\t\tdiags = diags.Append(valDiags)\n\t\t\tterraformAttrs[subj.Name] = val\n\t\t\tif isSelf {\n\t\t\t\tself = val\n\t\t\t}\n\n\t\tcase addrs.CountAttr:\n\t\t\tval, valDiags := normalizeRefValue(s.Data.GetCountAttr(subj, rng))\n\t\t\tdiags = diags.Append(valDiags)\n\t\t\tcountAttrs[subj.Name] = val\n\t\t\tif isSelf {\n\t\t\t\tself = val\n\t\t\t}\n\n\t\tdefault:\n\t\t\t// Should never happen\n\t\t\tpanic(fmt.Errorf(\"Scope.buildEvalContext cannot handle address type %T\", rawSubj))\n\t\t}\n\t}\n\n\tfor k, v := range buildResourceObjects(managedResources) {\n\t\tvals[k] = v\n\t}\n\tvals[\"data\"] = cty.ObjectVal(buildResourceObjects(dataResources))\n\tvals[\"module\"] = cty.ObjectVal(buildModuleObjects(wholeModules, moduleOutputs))\n\tvals[\"var\"] = cty.ObjectVal(inputVariables)\n\tvals[\"local\"] = cty.ObjectVal(localValues)\n\tvals[\"path\"] = cty.ObjectVal(pathAttrs)\n\tvals[\"terraform\"] = cty.ObjectVal(terraformAttrs)\n\tvals[\"count\"] = cty.ObjectVal(countAttrs)\n\tif self != cty.NilVal {\n\t\tvals[\"self\"] = self\n\t}\n\n\treturn ctx, diags\n}\n\nfunc buildResourceObjects(resources map[string]map[string]map[addrs.InstanceKey]cty.Value) map[string]cty.Value {\n\tvals := make(map[string]cty.Value)\n\tfor typeName, names := range resources {\n\t\tnameVals := make(map[string]cty.Value)\n\t\tfor name, keys := range names {\n\t\t\tnameVals[name] = buildInstanceObjects(keys)\n\t\t}\n\t\tvals[typeName] = cty.ObjectVal(nameVals)\n\t}\n\treturn vals\n}\n\nfunc buildModuleObjects(wholeModules map[string]map[addrs.InstanceKey]cty.Value, moduleOutputs map[string]map[addrs.InstanceKey]map[string]cty.Value) map[string]cty.Value {\n\tvals := make(map[string]cty.Value)\n\n\tfor name, keys := range wholeModules {\n\t\tvals[name] = buildInstanceObjects(keys)\n\t}\n\n\tfor name, keys := range moduleOutputs {\n\t\tif _, exists := wholeModules[name]; exists {\n\t\t\t// If we also have a whole module value for this name then we'll\n\t\t\t// skip this since the individual outputs are embedded in that result.\n\t\t\tcontinue\n\t\t}\n\n\t\t// The shape of this collection isn't compatible with buildInstanceObjects,\n\t\t// but rather than replicating most of the buildInstanceObjects logic\n\t\t// here we'll instead first transform the structure to be what that\n\t\t// function expects and then use it. This is a little wasteful, but\n\t\t// we do not expect this these maps to be large and so the extra work\n\t\t// here should not hurt too much.\n\t\tflattened := make(map[addrs.InstanceKey]cty.Value, len(keys))\n\t\tfor k, vals := range keys {\n\t\t\tflattened[k] = cty.ObjectVal(vals)\n\t\t}\n\t\tvals[name] = buildInstanceObjects(flattened)\n\t}\n\n\treturn vals\n}\n\nfunc buildInstanceObjects(keys map[addrs.InstanceKey]cty.Value) cty.Value {\n\tif val, exists := keys[addrs.NoKey]; exists {\n\t\t// If present, a \"no key\" value supersedes all other values,\n\t\t// since they should be embedded inside it.\n\t\treturn val\n\t}\n\n\t// If we only have individual values then we need to construct\n\t// either a list or a map, depending on what sort of keys we\n\t// have.\n\thaveInt := false\n\thaveString := false\n\tmaxInt := 0\n\n\tfor k := range keys {\n\t\tswitch tk := k.(type) {\n\t\tcase addrs.IntKey:\n\t\t\thaveInt = true\n\t\t\tif int(tk) > maxInt {\n\t\t\t\tmaxInt = int(tk)\n\t\t\t}\n\t\tcase addrs.StringKey:\n\t\t\thaveString = true\n\t\t}\n\t}\n\n\t// We should either have ints or strings and not both, but\n\t// if we have both then we'll prefer strings and let the\n\t// language interpreter try to convert the int keys into\n\t// strings in a map.\n\tswitch {\n\tcase haveString:\n\t\tvals := make(map[string]cty.Value)\n\t\tfor k, v := range keys {\n\t\t\tswitch tk := k.(type) {\n\t\t\tcase addrs.StringKey:\n\t\t\t\tvals[string(tk)] = v\n\t\t\tcase addrs.IntKey:\n\t\t\t\tsk := strconv.Itoa(int(tk))\n\t\t\t\tvals[sk] = v\n\t\t\t}\n\t\t}\n\t\treturn cty.ObjectVal(vals)\n\tcase haveInt:\n\t\t// We'll make a tuple that is long enough for our maximum\n\t\t// index value. It doesn't matter if we end up shorter than\n\t\t// the number of instances because if length(...) were\n\t\t// being evaluated we would've got a NoKey reference and\n\t\t// thus not ended up in this codepath at all.\n\t\tvals := make([]cty.Value, maxInt+1)\n\t\tfor i := range vals {\n\t\t\tif v, exists := keys[addrs.IntKey(i)]; exists {\n\t\t\t\tvals[i] = v\n\t\t\t} else {\n\t\t\t\t// Just a placeholder, since nothing will access this anyway\n\t\t\t\tvals[i] = cty.DynamicVal\n\t\t\t}\n\t\t}\n\t\treturn cty.TupleVal(vals)\n\tdefault:\n\t\t// Should never happen because there are no other key types.\n\t\tlog.Printf(\"[ERROR] strange makeInstanceObjects call with no supported key types\")\n\t\treturn cty.EmptyObjectVal\n\t}\n}\n\nfunc normalizeRefValue(val cty.Value, diags tfdiags.Diagnostics) (cty.Value, tfdiags.Diagnostics) {\n\tif diags.HasErrors() {\n\t\t// If there are errors then we will force an unknown result so that\n\t\t// we can still evaluate and catch type errors but we'll avoid\n\t\t// producing redundant re-statements of the same errors we've already\n\t\t// dealt with here.\n\t\treturn cty.UnknownVal(val.Type()), diags\n\t}\n\treturn val, diags\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/lang/funcs/cidr.go",
    "content": "package funcs\n\nimport (\n\t\"fmt\"\n\t\"net\"\n\n\t\"github.com/apparentlymart/go-cidr/cidr\"\n\t\"github.com/zclconf/go-cty/cty\"\n\t\"github.com/zclconf/go-cty/cty/function\"\n\t\"github.com/zclconf/go-cty/cty/gocty\"\n)\n\n// CidrHostFunc contructs a function that calculates a full host IP address\n// within a given IP network address prefix.\nvar CidrHostFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName: \"prefix\",\n\t\t\tType: cty.String,\n\t\t},\n\t\t{\n\t\t\tName: \"hostnum\",\n\t\t\tType: cty.Number,\n\t\t},\n\t},\n\tType: function.StaticReturnType(cty.String),\n\tImpl: func(args []cty.Value, retType cty.Type) (ret cty.Value, err error) {\n\t\tvar hostNum int\n\t\tif err := gocty.FromCtyValue(args[1], &hostNum); err != nil {\n\t\t\treturn cty.UnknownVal(cty.String), err\n\t\t}\n\t\t_, network, err := net.ParseCIDR(args[0].AsString())\n\t\tif err != nil {\n\t\t\treturn cty.UnknownVal(cty.String), fmt.Errorf(\"invalid CIDR expression: %s\", err)\n\t\t}\n\n\t\tip, err := cidr.Host(network, hostNum)\n\t\tif err != nil {\n\t\t\treturn cty.UnknownVal(cty.String), err\n\t\t}\n\n\t\treturn cty.StringVal(ip.String()), nil\n\t},\n})\n\n// CidrNetmaskFunc contructs a function that converts an IPv4 address prefix given\n// in CIDR notation into a subnet mask address.\nvar CidrNetmaskFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName: \"prefix\",\n\t\t\tType: cty.String,\n\t\t},\n\t},\n\tType: function.StaticReturnType(cty.String),\n\tImpl: func(args []cty.Value, retType cty.Type) (ret cty.Value, err error) {\n\t\t_, network, err := net.ParseCIDR(args[0].AsString())\n\t\tif err != nil {\n\t\t\treturn cty.UnknownVal(cty.String), fmt.Errorf(\"invalid CIDR expression: %s\", err)\n\t\t}\n\n\t\treturn cty.StringVal(net.IP(network.Mask).String()), nil\n\t},\n})\n\n// CidrSubnetFunc contructs a function that calculates a subnet address within\n// a given IP network address prefix.\nvar CidrSubnetFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName: \"prefix\",\n\t\t\tType: cty.String,\n\t\t},\n\t\t{\n\t\t\tName: \"newbits\",\n\t\t\tType: cty.Number,\n\t\t},\n\t\t{\n\t\t\tName: \"netnum\",\n\t\t\tType: cty.Number,\n\t\t},\n\t},\n\tType: function.StaticReturnType(cty.String),\n\tImpl: func(args []cty.Value, retType cty.Type) (ret cty.Value, err error) {\n\t\tvar newbits int\n\t\tif err := gocty.FromCtyValue(args[1], &newbits); err != nil {\n\t\t\treturn cty.UnknownVal(cty.String), err\n\t\t}\n\t\tvar netnum int\n\t\tif err := gocty.FromCtyValue(args[2], &netnum); err != nil {\n\t\t\treturn cty.UnknownVal(cty.String), err\n\t\t}\n\n\t\t_, network, err := net.ParseCIDR(args[0].AsString())\n\t\tif err != nil {\n\t\t\treturn cty.UnknownVal(cty.String), fmt.Errorf(\"invalid CIDR expression: %s\", err)\n\t\t}\n\n\t\t// For portability with 32-bit systems where the subnet number\n\t\t// will be a 32-bit int, we only allow extension of 32 bits in\n\t\t// one call even if we're running on a 64-bit machine.\n\t\t// (Of course, this is significant only for IPv6.)\n\t\tif newbits > 32 {\n\t\t\treturn cty.UnknownVal(cty.String), fmt.Errorf(\"may not extend prefix by more than 32 bits\")\n\t\t}\n\n\t\tnewNetwork, err := cidr.Subnet(network, newbits, netnum)\n\t\tif err != nil {\n\t\t\treturn cty.UnknownVal(cty.String), err\n\t\t}\n\n\t\treturn cty.StringVal(newNetwork.String()), nil\n\t},\n})\n\n// CidrHost calculates a full host IP address within a given IP network address prefix.\nfunc CidrHost(prefix, hostnum cty.Value) (cty.Value, error) {\n\treturn CidrHostFunc.Call([]cty.Value{prefix, hostnum})\n}\n\n// CidrNetmask converts an IPv4 address prefix given in CIDR notation into a subnet mask address.\nfunc CidrNetmask(prefix cty.Value) (cty.Value, error) {\n\treturn CidrNetmaskFunc.Call([]cty.Value{prefix})\n}\n\n// CidrSubnet calculates a subnet address within a given IP network address prefix.\nfunc CidrSubnet(prefix, newbits, netnum cty.Value) (cty.Value, error) {\n\treturn CidrSubnetFunc.Call([]cty.Value{prefix, newbits, netnum})\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/lang/funcs/collection.go",
    "content": "package funcs\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"sort\"\n\n\t\"github.com/zclconf/go-cty/cty\"\n\t\"github.com/zclconf/go-cty/cty/convert\"\n\t\"github.com/zclconf/go-cty/cty/function\"\n\t\"github.com/zclconf/go-cty/cty/function/stdlib\"\n\t\"github.com/zclconf/go-cty/cty/gocty\"\n)\n\nvar ElementFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName: \"list\",\n\t\t\tType: cty.DynamicPseudoType,\n\t\t},\n\t\t{\n\t\t\tName: \"index\",\n\t\t\tType: cty.Number,\n\t\t},\n\t},\n\tType: func(args []cty.Value) (cty.Type, error) {\n\t\tlist := args[0]\n\t\tlistTy := list.Type()\n\t\tswitch {\n\t\tcase listTy.IsListType():\n\t\t\treturn listTy.ElementType(), nil\n\t\tcase listTy.IsTupleType():\n\t\t\tif !args[1].IsKnown() {\n\t\t\t\t// If the index isn't known yet then we can't predict the\n\t\t\t\t// result type since each tuple element can have its own type.\n\t\t\t\treturn cty.DynamicPseudoType, nil\n\t\t\t}\n\n\t\t\tetys := listTy.TupleElementTypes()\n\t\t\tvar index int\n\t\t\terr := gocty.FromCtyValue(args[1], &index)\n\t\t\tif err != nil {\n\t\t\t\t// e.g. fractional number where whole number is required\n\t\t\t\treturn cty.DynamicPseudoType, fmt.Errorf(\"invalid index: %s\", err)\n\t\t\t}\n\t\t\tif len(etys) == 0 {\n\t\t\t\treturn cty.DynamicPseudoType, errors.New(\"cannot use element function with an empty list\")\n\t\t\t}\n\t\t\tindex = index % len(etys)\n\t\t\treturn etys[index], nil\n\t\tdefault:\n\t\t\treturn cty.DynamicPseudoType, fmt.Errorf(\"cannot read elements from %s\", listTy.FriendlyName())\n\t\t}\n\t},\n\tImpl: func(args []cty.Value, retType cty.Type) (cty.Value, error) {\n\t\tvar index int\n\t\terr := gocty.FromCtyValue(args[1], &index)\n\t\tif err != nil {\n\t\t\t// can't happen because we checked this in the Type function above\n\t\t\treturn cty.DynamicVal, fmt.Errorf(\"invalid index: %s\", err)\n\t\t}\n\n\t\tif !args[0].IsKnown() {\n\t\t\treturn cty.UnknownVal(retType), nil\n\t\t}\n\n\t\tl := args[0].LengthInt()\n\t\tif l == 0 {\n\t\t\treturn cty.DynamicVal, errors.New(\"cannot use element function with an empty list\")\n\t\t}\n\t\tindex = index % l\n\n\t\t// We did all the necessary type checks in the type function above,\n\t\t// so this is guaranteed not to fail.\n\t\treturn args[0].Index(cty.NumberIntVal(int64(index))), nil\n\t},\n})\n\nvar LengthFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName:             \"value\",\n\t\t\tType:             cty.DynamicPseudoType,\n\t\t\tAllowDynamicType: true,\n\t\t\tAllowUnknown:     true,\n\t\t},\n\t},\n\tType: func(args []cty.Value) (cty.Type, error) {\n\t\tcollTy := args[0].Type()\n\t\tswitch {\n\t\tcase collTy == cty.String || collTy.IsTupleType() || collTy.IsObjectType() || collTy.IsListType() || collTy.IsMapType() || collTy.IsSetType() || collTy == cty.DynamicPseudoType:\n\t\t\treturn cty.Number, nil\n\t\tdefault:\n\t\t\treturn cty.Number, errors.New(\"argument must be a string, a collection type, or a structural type\")\n\t\t}\n\t},\n\tImpl: func(args []cty.Value, retType cty.Type) (cty.Value, error) {\n\t\tcoll := args[0]\n\t\tcollTy := args[0].Type()\n\t\tswitch {\n\t\tcase collTy == cty.DynamicPseudoType:\n\t\t\treturn cty.UnknownVal(cty.Number), nil\n\t\tcase collTy.IsTupleType():\n\t\t\tl := len(collTy.TupleElementTypes())\n\t\t\treturn cty.NumberIntVal(int64(l)), nil\n\t\tcase collTy.IsObjectType():\n\t\t\tl := len(collTy.AttributeTypes())\n\t\t\treturn cty.NumberIntVal(int64(l)), nil\n\t\tcase collTy == cty.String:\n\t\t\t// We'll delegate to the cty stdlib strlen function here, because\n\t\t\t// it deals with all of the complexities of tokenizing unicode\n\t\t\t// grapheme clusters.\n\t\t\treturn stdlib.Strlen(coll)\n\t\tcase collTy.IsListType() || collTy.IsSetType() || collTy.IsMapType():\n\t\t\treturn coll.Length(), nil\n\t\tdefault:\n\t\t\t// Should never happen, because of the checks in our Type func above\n\t\t\treturn cty.UnknownVal(cty.Number), errors.New(\"impossible value type for length(...)\")\n\t\t}\n\t},\n})\n\n// CoalesceFunc constructs a function that takes any number of arguments and\n// returns the first one that isn't empty. This function was copied from go-cty\n// stdlib and modified so that it returns the first *non-empty* non-null element\n// from a sequence, instead of merely the first non-null.\nvar CoalesceFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{},\n\tVarParam: &function.Parameter{\n\t\tName:             \"vals\",\n\t\tType:             cty.DynamicPseudoType,\n\t\tAllowUnknown:     true,\n\t\tAllowDynamicType: true,\n\t\tAllowNull:        true,\n\t},\n\tType: func(args []cty.Value) (ret cty.Type, err error) {\n\t\targTypes := make([]cty.Type, len(args))\n\t\tfor i, val := range args {\n\t\t\targTypes[i] = val.Type()\n\t\t}\n\t\tretType, _ := convert.UnifyUnsafe(argTypes)\n\t\tif retType == cty.NilType {\n\t\t\treturn cty.NilType, errors.New(\"all arguments must have the same type\")\n\t\t}\n\t\treturn retType, nil\n\t},\n\tImpl: func(args []cty.Value, retType cty.Type) (ret cty.Value, err error) {\n\t\tfor _, argVal := range args {\n\t\t\t// We already know this will succeed because of the checks in our Type func above\n\t\t\targVal, _ = convert.Convert(argVal, retType)\n\t\t\tif !argVal.IsKnown() {\n\t\t\t\treturn cty.UnknownVal(retType), nil\n\t\t\t}\n\t\t\tif argVal.IsNull() {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif retType == cty.String && argVal.RawEquals(cty.StringVal(\"\")) {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\treturn argVal, nil\n\t\t}\n\t\treturn cty.NilVal, errors.New(\"no non-null, non-empty-string arguments\")\n\t},\n})\n\n// CoalesceListFunc constructs a function that takes any number of list arguments\n// and returns the first one that isn't empty.\nvar CoalesceListFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{},\n\tVarParam: &function.Parameter{\n\t\tName:             \"vals\",\n\t\tType:             cty.DynamicPseudoType,\n\t\tAllowUnknown:     true,\n\t\tAllowDynamicType: true,\n\t\tAllowNull:        true,\n\t},\n\tType: func(args []cty.Value) (ret cty.Type, err error) {\n\t\tif len(args) == 0 {\n\t\t\treturn cty.NilType, errors.New(\"at least one argument is required\")\n\t\t}\n\n\t\targTypes := make([]cty.Type, len(args))\n\n\t\tfor i, arg := range args {\n\t\t\t// if any argument is unknown, we can't be certain know which type we will return\n\t\t\tif !arg.IsKnown() {\n\t\t\t\treturn cty.DynamicPseudoType, nil\n\t\t\t}\n\t\t\tty := arg.Type()\n\n\t\t\tif !ty.IsListType() && !ty.IsTupleType() {\n\t\t\t\treturn cty.NilType, errors.New(\"coalescelist arguments must be lists or tuples\")\n\t\t\t}\n\n\t\t\targTypes[i] = arg.Type()\n\t\t}\n\n\t\tlast := argTypes[0]\n\t\t// If there are mixed types, we have to return a dynamic type.\n\t\tfor _, next := range argTypes[1:] {\n\t\t\tif !next.Equals(last) {\n\t\t\t\treturn cty.DynamicPseudoType, nil\n\t\t\t}\n\t\t}\n\n\t\treturn last, nil\n\t},\n\tImpl: func(args []cty.Value, retType cty.Type) (ret cty.Value, err error) {\n\t\tfor _, arg := range args {\n\t\t\tif !arg.IsKnown() {\n\t\t\t\t// If we run into an unknown list at some point, we can't\n\t\t\t\t// predict the final result yet. (If there's a known, non-empty\n\t\t\t\t// arg before this then we won't get here.)\n\t\t\t\treturn cty.UnknownVal(retType), nil\n\t\t\t}\n\n\t\t\tif arg.LengthInt() > 0 {\n\t\t\t\treturn arg, nil\n\t\t\t}\n\t\t}\n\n\t\treturn cty.NilVal, errors.New(\"no non-null arguments\")\n\t},\n})\n\n// CompactFunc constructs a function that takes a list of strings and returns a new list\n// with any empty string elements removed.\nvar CompactFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName: \"list\",\n\t\t\tType: cty.List(cty.String),\n\t\t},\n\t},\n\tType: function.StaticReturnType(cty.List(cty.String)),\n\tImpl: func(args []cty.Value, retType cty.Type) (ret cty.Value, err error) {\n\t\tlistVal := args[0]\n\t\tif !listVal.IsWhollyKnown() {\n\t\t\t// If some of the element values aren't known yet then we\n\t\t\t// can't yet return a compacted list\n\t\t\treturn cty.UnknownVal(retType), nil\n\t\t}\n\n\t\tvar outputList []cty.Value\n\n\t\tfor it := listVal.ElementIterator(); it.Next(); {\n\t\t\t_, v := it.Element()\n\t\t\tif v.AsString() == \"\" {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\toutputList = append(outputList, v)\n\t\t}\n\n\t\tif len(outputList) == 0 {\n\t\t\treturn cty.ListValEmpty(cty.String), nil\n\t\t}\n\n\t\treturn cty.ListVal(outputList), nil\n\t},\n})\n\n// ContainsFunc constructs a function that determines whether a given list or\n// set contains a given single value as one of its elements.\nvar ContainsFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName: \"list\",\n\t\t\tType: cty.DynamicPseudoType,\n\t\t},\n\t\t{\n\t\t\tName: \"value\",\n\t\t\tType: cty.DynamicPseudoType,\n\t\t},\n\t},\n\tType: function.StaticReturnType(cty.Bool),\n\tImpl: func(args []cty.Value, retType cty.Type) (ret cty.Value, err error) {\n\t\targ := args[0]\n\t\tty := arg.Type()\n\n\t\tif !ty.IsListType() && !ty.IsTupleType() && !ty.IsSetType() {\n\t\t\treturn cty.NilVal, errors.New(\"argument must be list, tuple, or set\")\n\t\t}\n\n\t\t_, err = Index(cty.TupleVal(arg.AsValueSlice()), args[1])\n\t\tif err != nil {\n\t\t\treturn cty.False, nil\n\t\t}\n\n\t\treturn cty.True, nil\n\t},\n})\n\n// IndexFunc constructs a function that finds the element index for a given value in a list.\nvar IndexFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName: \"list\",\n\t\t\tType: cty.DynamicPseudoType,\n\t\t},\n\t\t{\n\t\t\tName: \"value\",\n\t\t\tType: cty.DynamicPseudoType,\n\t\t},\n\t},\n\tType: function.StaticReturnType(cty.Number),\n\tImpl: func(args []cty.Value, retType cty.Type) (ret cty.Value, err error) {\n\t\tif !(args[0].Type().IsListType() || args[0].Type().IsTupleType()) {\n\t\t\treturn cty.NilVal, errors.New(\"argument must be a list or tuple\")\n\t\t}\n\n\t\tif !args[0].IsKnown() {\n\t\t\treturn cty.UnknownVal(cty.Number), nil\n\t\t}\n\n\t\tif args[0].LengthInt() == 0 { // Easy path\n\t\t\treturn cty.NilVal, errors.New(\"cannot search an empty list\")\n\t\t}\n\n\t\tfor it := args[0].ElementIterator(); it.Next(); {\n\t\t\ti, v := it.Element()\n\t\t\teq, err := stdlib.Equal(v, args[1])\n\t\t\tif err != nil {\n\t\t\t\treturn cty.NilVal, err\n\t\t\t}\n\t\t\tif !eq.IsKnown() {\n\t\t\t\treturn cty.UnknownVal(cty.Number), nil\n\t\t\t}\n\t\t\tif eq.True() {\n\t\t\t\treturn i, nil\n\t\t\t}\n\t\t}\n\t\treturn cty.NilVal, errors.New(\"item not found\")\n\n\t},\n})\n\n// DistinctFunc constructs a function that takes a list and returns a new list\n// with any duplicate elements removed.\nvar DistinctFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName: \"list\",\n\t\t\tType: cty.List(cty.DynamicPseudoType),\n\t\t},\n\t},\n\tType: func(args []cty.Value) (cty.Type, error) {\n\t\treturn args[0].Type(), nil\n\t},\n\tImpl: func(args []cty.Value, retType cty.Type) (ret cty.Value, err error) {\n\t\tlistVal := args[0]\n\n\t\tif !listVal.IsWhollyKnown() {\n\t\t\treturn cty.UnknownVal(retType), nil\n\t\t}\n\t\tvar list []cty.Value\n\n\t\tfor it := listVal.ElementIterator(); it.Next(); {\n\t\t\t_, v := it.Element()\n\t\t\tlist, err = appendIfMissing(list, v)\n\t\t\tif err != nil {\n\t\t\t\treturn cty.NilVal, err\n\t\t\t}\n\t\t}\n\n\t\tif len(list) == 0 {\n\t\t\treturn cty.ListValEmpty(retType.ElementType()), nil\n\t\t}\n\t\treturn cty.ListVal(list), nil\n\t},\n})\n\n// ChunklistFunc constructs a function that splits a single list into fixed-size chunks,\n// returning a list of lists.\nvar ChunklistFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName: \"list\",\n\t\t\tType: cty.List(cty.DynamicPseudoType),\n\t\t},\n\t\t{\n\t\t\tName: \"size\",\n\t\t\tType: cty.Number,\n\t\t},\n\t},\n\tType: func(args []cty.Value) (cty.Type, error) {\n\t\treturn cty.List(args[0].Type()), nil\n\t},\n\tImpl: func(args []cty.Value, retType cty.Type) (ret cty.Value, err error) {\n\t\tlistVal := args[0]\n\t\tif !listVal.IsKnown() {\n\t\t\treturn cty.UnknownVal(retType), nil\n\t\t}\n\n\t\tvar size int\n\t\terr = gocty.FromCtyValue(args[1], &size)\n\t\tif err != nil {\n\t\t\treturn cty.NilVal, fmt.Errorf(\"invalid index: %s\", err)\n\t\t}\n\n\t\tif size < 0 {\n\t\t\treturn cty.NilVal, errors.New(\"the size argument must be positive\")\n\t\t}\n\n\t\toutput := make([]cty.Value, 0)\n\n\t\t// if size is 0, returns a list made of the initial list\n\t\tif size == 0 {\n\t\t\toutput = append(output, listVal)\n\t\t\treturn cty.ListVal(output), nil\n\t\t}\n\n\t\tchunk := make([]cty.Value, 0)\n\n\t\tl := args[0].LengthInt()\n\t\ti := 0\n\n\t\tfor it := listVal.ElementIterator(); it.Next(); {\n\t\t\t_, v := it.Element()\n\t\t\tchunk = append(chunk, v)\n\n\t\t\t// Chunk when index isn't 0, or when reaching the values's length\n\t\t\tif (i+1)%size == 0 || (i+1) == l {\n\t\t\t\toutput = append(output, cty.ListVal(chunk))\n\t\t\t\tchunk = make([]cty.Value, 0)\n\t\t\t}\n\t\t\ti++\n\t\t}\n\n\t\treturn cty.ListVal(output), nil\n\t},\n})\n\n// FlattenFunc constructs a function that takes a list and replaces any elements\n// that are lists with a flattened sequence of the list contents.\nvar FlattenFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName: \"list\",\n\t\t\tType: cty.DynamicPseudoType,\n\t\t},\n\t},\n\tType: func(args []cty.Value) (cty.Type, error) {\n\t\tif !args[0].IsWhollyKnown() {\n\t\t\treturn cty.DynamicPseudoType, nil\n\t\t}\n\n\t\targTy := args[0].Type()\n\t\tif !argTy.IsListType() && !argTy.IsSetType() && !argTy.IsTupleType() {\n\t\t\treturn cty.NilType, errors.New(\"can only flatten lists, sets and tuples\")\n\t\t}\n\n\t\tretVal, known := flattener(args[0])\n\t\tif !known {\n\t\t\treturn cty.DynamicPseudoType, nil\n\t\t}\n\n\t\ttys := make([]cty.Type, len(retVal))\n\t\tfor i, ty := range retVal {\n\t\t\ttys[i] = ty.Type()\n\t\t}\n\t\treturn cty.Tuple(tys), nil\n\t},\n\tImpl: func(args []cty.Value, retType cty.Type) (ret cty.Value, err error) {\n\t\tinputList := args[0]\n\t\tif inputList.LengthInt() == 0 {\n\t\t\treturn cty.EmptyTupleVal, nil\n\t\t}\n\n\t\tout, known := flattener(inputList)\n\t\tif !known {\n\t\t\treturn cty.UnknownVal(retType), nil\n\t\t}\n\n\t\treturn cty.TupleVal(out), nil\n\t},\n})\n\n// Flatten until it's not a cty.List, and return whether the value is known.\n// We can flatten lists with unknown values, as long as they are not\n// lists themselves.\nfunc flattener(flattenList cty.Value) ([]cty.Value, bool) {\n\tout := make([]cty.Value, 0)\n\tfor it := flattenList.ElementIterator(); it.Next(); {\n\t\t_, val := it.Element()\n\t\tif val.Type().IsListType() || val.Type().IsSetType() || val.Type().IsTupleType() {\n\t\t\tif !val.IsKnown() {\n\t\t\t\treturn out, false\n\t\t\t}\n\n\t\t\tres, known := flattener(val)\n\t\t\tif !known {\n\t\t\t\treturn res, known\n\t\t\t}\n\t\t\tout = append(out, res...)\n\t\t} else {\n\t\t\tout = append(out, val)\n\t\t}\n\t}\n\treturn out, true\n}\n\n// KeysFunc constructs a function that takes a map and returns a sorted list of the map keys.\nvar KeysFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName:         \"inputMap\",\n\t\t\tType:         cty.DynamicPseudoType,\n\t\t\tAllowUnknown: true,\n\t\t},\n\t},\n\tType: func(args []cty.Value) (cty.Type, error) {\n\t\tty := args[0].Type()\n\t\tswitch {\n\t\tcase ty.IsMapType():\n\t\t\treturn cty.List(cty.String), nil\n\t\tcase ty.IsObjectType():\n\t\t\tatys := ty.AttributeTypes()\n\t\t\tif len(atys) == 0 {\n\t\t\t\treturn cty.EmptyTuple, nil\n\t\t\t}\n\t\t\t// All of our result elements will be strings, and atys just\n\t\t\t// decides how many there are.\n\t\t\tetys := make([]cty.Type, len(atys))\n\t\t\tfor i := range etys {\n\t\t\t\tetys[i] = cty.String\n\t\t\t}\n\t\t\treturn cty.Tuple(etys), nil\n\t\tdefault:\n\t\t\treturn cty.DynamicPseudoType, function.NewArgErrorf(0, \"must have map or object type\")\n\t\t}\n\t},\n\tImpl: func(args []cty.Value, retType cty.Type) (cty.Value, error) {\n\t\tm := args[0]\n\t\tvar keys []cty.Value\n\n\t\tswitch {\n\t\tcase m.Type().IsObjectType():\n\t\t\t// In this case we allow unknown values so we must work only with\n\t\t\t// the attribute _types_, not with the value itself.\n\t\t\tvar names []string\n\t\t\tfor name := range m.Type().AttributeTypes() {\n\t\t\t\tnames = append(names, name)\n\t\t\t}\n\t\t\tsort.Strings(names) // same ordering guaranteed by cty's ElementIterator\n\t\t\tif len(names) == 0 {\n\t\t\t\treturn cty.EmptyTupleVal, nil\n\t\t\t}\n\t\t\tkeys = make([]cty.Value, len(names))\n\t\t\tfor i, name := range names {\n\t\t\t\tkeys[i] = cty.StringVal(name)\n\t\t\t}\n\t\t\treturn cty.TupleVal(keys), nil\n\t\tdefault:\n\t\t\tif !m.IsKnown() {\n\t\t\t\treturn cty.UnknownVal(retType), nil\n\t\t\t}\n\n\t\t\t// cty guarantees that ElementIterator will iterate in lexicographical\n\t\t\t// order by key.\n\t\t\tfor it := args[0].ElementIterator(); it.Next(); {\n\t\t\t\tk, _ := it.Element()\n\t\t\t\tkeys = append(keys, k)\n\t\t\t}\n\t\t\tif len(keys) == 0 {\n\t\t\t\treturn cty.ListValEmpty(cty.String), nil\n\t\t\t}\n\t\t\treturn cty.ListVal(keys), nil\n\t\t}\n\t},\n})\n\n// ListFunc constructs a function that takes an arbitrary number of arguments\n// and returns a list containing those values in the same order.\n//\n// This function is deprecated in Terraform v0.12\nvar ListFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{},\n\tVarParam: &function.Parameter{\n\t\tName:             \"vals\",\n\t\tType:             cty.DynamicPseudoType,\n\t\tAllowUnknown:     true,\n\t\tAllowDynamicType: true,\n\t\tAllowNull:        true,\n\t},\n\tType: func(args []cty.Value) (ret cty.Type, err error) {\n\t\tif len(args) == 0 {\n\t\t\treturn cty.NilType, errors.New(\"at least one argument is required\")\n\t\t}\n\n\t\targTypes := make([]cty.Type, len(args))\n\n\t\tfor i, arg := range args {\n\t\t\targTypes[i] = arg.Type()\n\t\t}\n\n\t\tretType, _ := convert.UnifyUnsafe(argTypes)\n\t\tif retType == cty.NilType {\n\t\t\treturn cty.NilType, errors.New(\"all arguments must have the same type\")\n\t\t}\n\n\t\treturn cty.List(retType), nil\n\t},\n\tImpl: func(args []cty.Value, retType cty.Type) (ret cty.Value, err error) {\n\t\tnewList := make([]cty.Value, 0, len(args))\n\n\t\tfor _, arg := range args {\n\t\t\t// We already know this will succeed because of the checks in our Type func above\n\t\t\targ, _ = convert.Convert(arg, retType.ElementType())\n\t\t\tnewList = append(newList, arg)\n\t\t}\n\n\t\treturn cty.ListVal(newList), nil\n\t},\n})\n\n// LookupFunc constructs a function that performs dynamic lookups of map types.\nvar LookupFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName: \"inputMap\",\n\t\t\tType: cty.DynamicPseudoType,\n\t\t},\n\t\t{\n\t\t\tName: \"key\",\n\t\t\tType: cty.String,\n\t\t},\n\t},\n\tVarParam: &function.Parameter{\n\t\tName:             \"default\",\n\t\tType:             cty.DynamicPseudoType,\n\t\tAllowUnknown:     true,\n\t\tAllowDynamicType: true,\n\t\tAllowNull:        true,\n\t},\n\tType: func(args []cty.Value) (ret cty.Type, err error) {\n\t\tif len(args) < 1 || len(args) > 3 {\n\t\t\treturn cty.NilType, fmt.Errorf(\"lookup() takes two or three arguments, got %d\", len(args))\n\t\t}\n\n\t\tty := args[0].Type()\n\n\t\tswitch {\n\t\tcase ty.IsObjectType():\n\t\t\tif !args[1].IsKnown() {\n\t\t\t\treturn cty.DynamicPseudoType, nil\n\t\t\t}\n\n\t\t\tkey := args[1].AsString()\n\t\t\tif ty.HasAttribute(key) {\n\t\t\t\treturn args[0].GetAttr(key).Type(), nil\n\t\t\t} else if len(args) == 3 {\n\t\t\t\t// if the key isn't found but a default is provided,\n\t\t\t\t// return the default type\n\t\t\t\treturn args[2].Type(), nil\n\t\t\t}\n\t\t\treturn cty.DynamicPseudoType, function.NewArgErrorf(0, \"the given object has no attribute %q\", key)\n\t\tcase ty.IsMapType():\n\t\t\treturn ty.ElementType(), nil\n\t\tdefault:\n\t\t\treturn cty.NilType, function.NewArgErrorf(0, \"lookup() requires a map as the first argument\")\n\t\t}\n\t},\n\tImpl: func(args []cty.Value, retType cty.Type) (ret cty.Value, err error) {\n\t\tvar defaultVal cty.Value\n\t\tdefaultValueSet := false\n\n\t\tif len(args) == 3 {\n\t\t\tdefaultVal = args[2]\n\t\t\tdefaultValueSet = true\n\t\t}\n\n\t\tmapVar := args[0]\n\t\tlookupKey := args[1].AsString()\n\n\t\tif !mapVar.IsWhollyKnown() {\n\t\t\treturn cty.UnknownVal(retType), nil\n\t\t}\n\n\t\tif mapVar.Type().IsObjectType() {\n\t\t\tif mapVar.Type().HasAttribute(lookupKey) {\n\t\t\t\treturn mapVar.GetAttr(lookupKey), nil\n\t\t\t}\n\t\t} else if mapVar.HasIndex(cty.StringVal(lookupKey)) == cty.True {\n\t\t\tv := mapVar.Index(cty.StringVal(lookupKey))\n\t\t\tif ty := v.Type(); !ty.Equals(cty.NilType) {\n\t\t\t\tswitch {\n\t\t\t\tcase ty.Equals(cty.String):\n\t\t\t\t\treturn cty.StringVal(v.AsString()), nil\n\t\t\t\tcase ty.Equals(cty.Number):\n\t\t\t\t\treturn cty.NumberVal(v.AsBigFloat()), nil\n\t\t\t\tdefault:\n\t\t\t\t\treturn cty.NilVal, errors.New(\"lookup() can only be used with flat lists\")\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif defaultValueSet {\n\t\t\tdefaultVal, err = convert.Convert(defaultVal, retType)\n\t\t\tif err != nil {\n\t\t\t\treturn cty.NilVal, err\n\t\t\t}\n\t\t\treturn defaultVal, nil\n\t\t}\n\n\t\treturn cty.UnknownVal(cty.DynamicPseudoType), fmt.Errorf(\n\t\t\t\"lookup failed to find '%s'\", lookupKey)\n\t},\n})\n\n// MapFunc constructs a function that takes an even number of arguments and\n// returns a map whose elements are constructed from consecutive pairs of arguments.\n//\n// This function is deprecated in Terraform v0.12\nvar MapFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{},\n\tVarParam: &function.Parameter{\n\t\tName:             \"vals\",\n\t\tType:             cty.DynamicPseudoType,\n\t\tAllowUnknown:     true,\n\t\tAllowDynamicType: true,\n\t\tAllowNull:        true,\n\t},\n\tType: func(args []cty.Value) (ret cty.Type, err error) {\n\t\tif len(args) < 2 || len(args)%2 != 0 {\n\t\t\treturn cty.NilType, fmt.Errorf(\"map requires an even number of two or more arguments, got %d\", len(args))\n\t\t}\n\n\t\targTypes := make([]cty.Type, len(args)/2)\n\t\tindex := 0\n\n\t\tfor i := 0; i < len(args); i += 2 {\n\t\t\targTypes[index] = args[i+1].Type()\n\t\t\tindex++\n\t\t}\n\n\t\tvalType, _ := convert.UnifyUnsafe(argTypes)\n\t\tif valType == cty.NilType {\n\t\t\treturn cty.NilType, errors.New(\"all arguments must have the same type\")\n\t\t}\n\n\t\treturn cty.Map(valType), nil\n\t},\n\tImpl: func(args []cty.Value, retType cty.Type) (ret cty.Value, err error) {\n\t\tfor _, arg := range args {\n\t\t\tif !arg.IsWhollyKnown() {\n\t\t\t\treturn cty.UnknownVal(retType), nil\n\t\t\t}\n\t\t}\n\n\t\toutputMap := make(map[string]cty.Value)\n\n\t\tfor i := 0; i < len(args); i += 2 {\n\n\t\t\tkey := args[i].AsString()\n\n\t\t\terr := gocty.FromCtyValue(args[i], &key)\n\t\t\tif err != nil {\n\t\t\t\treturn cty.NilVal, err\n\t\t\t}\n\n\t\t\tval := args[i+1]\n\n\t\t\tvar variable cty.Value\n\t\t\terr = gocty.FromCtyValue(val, &variable)\n\t\t\tif err != nil {\n\t\t\t\treturn cty.NilVal, err\n\t\t\t}\n\n\t\t\t// We already know this will succeed because of the checks in our Type func above\n\t\t\tvariable, _ = convert.Convert(variable, retType.ElementType())\n\n\t\t\t// Check for duplicate keys\n\t\t\tif _, ok := outputMap[key]; ok {\n\t\t\t\treturn cty.NilVal, fmt.Errorf(\"argument %d is a duplicate key: %q\", i+1, key)\n\t\t\t}\n\t\t\toutputMap[key] = variable\n\t\t}\n\n\t\treturn cty.MapVal(outputMap), nil\n\t},\n})\n\n// MatchkeysFunc constructs a function that constructs a new list by taking a\n// subset of elements from one list whose indexes match the corresponding\n// indexes of values in another list.\nvar MatchkeysFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName: \"values\",\n\t\t\tType: cty.List(cty.DynamicPseudoType),\n\t\t},\n\t\t{\n\t\t\tName: \"keys\",\n\t\t\tType: cty.List(cty.DynamicPseudoType),\n\t\t},\n\t\t{\n\t\t\tName: \"searchset\",\n\t\t\tType: cty.List(cty.DynamicPseudoType),\n\t\t},\n\t},\n\tType: func(args []cty.Value) (cty.Type, error) {\n\t\tty, _ := convert.UnifyUnsafe([]cty.Type{args[1].Type(), args[2].Type()})\n\t\tif ty == cty.NilType {\n\t\t\treturn cty.NilType, errors.New(\"keys and searchset must be of the same type\")\n\t\t}\n\n\t\t// the return type is based on args[0] (values)\n\t\treturn args[0].Type(), nil\n\t},\n\tImpl: func(args []cty.Value, retType cty.Type) (ret cty.Value, err error) {\n\t\tif !args[0].IsKnown() {\n\t\t\treturn cty.UnknownVal(cty.List(retType.ElementType())), nil\n\t\t}\n\n\t\tif args[0].LengthInt() != args[1].LengthInt() {\n\t\t\treturn cty.ListValEmpty(retType.ElementType()), errors.New(\"length of keys and values should be equal\")\n\t\t}\n\n\t\toutput := make([]cty.Value, 0)\n\t\tvalues := args[0]\n\n\t\t// Keys and searchset must be the same type.\n\t\t// We can skip error checking here because we've already verified that\n\t\t// they can be unified in the Type function\n\t\tty, _ := convert.UnifyUnsafe([]cty.Type{args[1].Type(), args[2].Type()})\n\t\tkeys, _ := convert.Convert(args[1], ty)\n\t\tsearchset, _ := convert.Convert(args[2], ty)\n\n\t\t// if searchset is empty, return an empty list.\n\t\tif searchset.LengthInt() == 0 {\n\t\t\treturn cty.ListValEmpty(retType.ElementType()), nil\n\t\t}\n\n\t\tif !values.IsWhollyKnown() || !keys.IsWhollyKnown() {\n\t\t\treturn cty.UnknownVal(retType), nil\n\t\t}\n\n\t\ti := 0\n\t\tfor it := keys.ElementIterator(); it.Next(); {\n\t\t\t_, key := it.Element()\n\t\t\tfor iter := searchset.ElementIterator(); iter.Next(); {\n\t\t\t\t_, search := iter.Element()\n\t\t\t\teq, err := stdlib.Equal(key, search)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn cty.NilVal, err\n\t\t\t\t}\n\t\t\t\tif !eq.IsKnown() {\n\t\t\t\t\treturn cty.ListValEmpty(retType.ElementType()), nil\n\t\t\t\t}\n\t\t\t\tif eq.True() {\n\t\t\t\t\tv := values.Index(cty.NumberIntVal(int64(i)))\n\t\t\t\t\toutput = append(output, v)\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\ti++\n\t\t}\n\n\t\t// if we haven't matched any key, then output is an empty list.\n\t\tif len(output) == 0 {\n\t\t\treturn cty.ListValEmpty(retType.ElementType()), nil\n\t\t}\n\t\treturn cty.ListVal(output), nil\n\t},\n})\n\n// MergeFunc constructs a function that takes an arbitrary number of maps and\n// returns a single map that contains a merged set of elements from all of the maps.\n//\n// If more than one given map defines the same key then the one that is later in\n// the argument sequence takes precedence.\nvar MergeFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{},\n\tVarParam: &function.Parameter{\n\t\tName:             \"maps\",\n\t\tType:             cty.DynamicPseudoType,\n\t\tAllowDynamicType: true,\n\t\tAllowNull:        true,\n\t},\n\tType: function.StaticReturnType(cty.DynamicPseudoType),\n\tImpl: func(args []cty.Value, retType cty.Type) (ret cty.Value, err error) {\n\t\toutputMap := make(map[string]cty.Value)\n\n\t\tfor _, arg := range args {\n\t\t\tif !arg.IsWhollyKnown() {\n\t\t\t\treturn cty.UnknownVal(retType), nil\n\t\t\t}\n\t\t\tif !arg.Type().IsObjectType() && !arg.Type().IsMapType() {\n\t\t\t\treturn cty.NilVal, fmt.Errorf(\"arguments must be maps or objects, got %#v\", arg.Type().FriendlyName())\n\t\t\t}\n\t\t\tfor it := arg.ElementIterator(); it.Next(); {\n\t\t\t\tk, v := it.Element()\n\t\t\t\toutputMap[k.AsString()] = v\n\t\t\t}\n\t\t}\n\t\treturn cty.ObjectVal(outputMap), nil\n\t},\n})\n\n// ReverseFunc takes a sequence and produces a new sequence of the same length\n// with all of the same elements as the given sequence but in reverse order.\nvar ReverseFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName: \"list\",\n\t\t\tType: cty.DynamicPseudoType,\n\t\t},\n\t},\n\tType: func(args []cty.Value) (cty.Type, error) {\n\t\targTy := args[0].Type()\n\t\tswitch {\n\t\tcase argTy.IsTupleType():\n\t\t\targTys := argTy.TupleElementTypes()\n\t\t\tretTys := make([]cty.Type, len(argTys))\n\t\t\tfor i, ty := range argTys {\n\t\t\t\tretTys[len(retTys)-i-1] = ty\n\t\t\t}\n\t\t\treturn cty.Tuple(retTys), nil\n\t\tcase argTy.IsListType(), argTy.IsSetType(): // We accept sets here to mimic the usual behavior of auto-converting to list\n\t\t\treturn cty.List(argTy.ElementType()), nil\n\t\tdefault:\n\t\t\treturn cty.NilType, function.NewArgErrorf(0, \"can only reverse list or tuple values, not %s\", argTy.FriendlyName())\n\t\t}\n\t},\n\tImpl: func(args []cty.Value, retType cty.Type) (ret cty.Value, err error) {\n\t\tin := args[0].AsValueSlice()\n\t\toutVals := make([]cty.Value, len(in))\n\t\tfor i, v := range in {\n\t\t\toutVals[len(outVals)-i-1] = v\n\t\t}\n\t\tswitch {\n\t\tcase retType.IsTupleType():\n\t\t\treturn cty.TupleVal(outVals), nil\n\t\tdefault:\n\t\t\tif len(outVals) == 0 {\n\t\t\t\treturn cty.ListValEmpty(retType.ElementType()), nil\n\t\t\t}\n\t\t\treturn cty.ListVal(outVals), nil\n\t\t}\n\t},\n})\n\n// SetProductFunc calculates the cartesian product of two or more sets or\n// sequences. If the arguments are all lists then the result is a list of tuples,\n// preserving the ordering of all of the input lists. Otherwise the result is a\n// set of tuples.\nvar SetProductFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{},\n\tVarParam: &function.Parameter{\n\t\tName: \"sets\",\n\t\tType: cty.DynamicPseudoType,\n\t},\n\tType: func(args []cty.Value) (retType cty.Type, err error) {\n\t\tif len(args) < 2 {\n\t\t\treturn cty.NilType, errors.New(\"at least two arguments are required\")\n\t\t}\n\n\t\tlistCount := 0\n\t\telemTys := make([]cty.Type, len(args))\n\t\tfor i, arg := range args {\n\t\t\taty := arg.Type()\n\t\t\tswitch {\n\t\t\tcase aty.IsSetType():\n\t\t\t\telemTys[i] = aty.ElementType()\n\t\t\tcase aty.IsListType():\n\t\t\t\telemTys[i] = aty.ElementType()\n\t\t\t\tlistCount++\n\t\t\tcase aty.IsTupleType():\n\t\t\t\t// We can accept a tuple type only if there's some common type\n\t\t\t\t// that all of its elements can be converted to.\n\t\t\t\tallEtys := aty.TupleElementTypes()\n\t\t\t\tif len(allEtys) == 0 {\n\t\t\t\t\telemTys[i] = cty.DynamicPseudoType\n\t\t\t\t\tlistCount++\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tety, _ := convert.UnifyUnsafe(allEtys)\n\t\t\t\tif ety == cty.NilType {\n\t\t\t\t\treturn cty.NilType, function.NewArgErrorf(i, \"all elements must be of the same type\")\n\t\t\t\t}\n\t\t\t\telemTys[i] = ety\n\t\t\t\tlistCount++\n\t\t\tdefault:\n\t\t\t\treturn cty.NilType, function.NewArgErrorf(i, \"a set or a list is required\")\n\t\t\t}\n\t\t}\n\n\t\tif listCount == len(args) {\n\t\t\treturn cty.List(cty.Tuple(elemTys)), nil\n\t\t}\n\t\treturn cty.Set(cty.Tuple(elemTys)), nil\n\t},\n\tImpl: func(args []cty.Value, retType cty.Type) (ret cty.Value, err error) {\n\t\tety := retType.ElementType()\n\n\t\ttotal := 1\n\t\tfor _, arg := range args {\n\t\t\t// Because of our type checking function, we are guaranteed that\n\t\t\t// all of the arguments are known, non-null values of types that\n\t\t\t// support LengthInt.\n\t\t\ttotal *= arg.LengthInt()\n\t\t}\n\n\t\tif total == 0 {\n\t\t\t// If any of the arguments was an empty collection then our result\n\t\t\t// is also an empty collection, which we'll short-circuit here.\n\t\t\tif retType.IsListType() {\n\t\t\t\treturn cty.ListValEmpty(ety), nil\n\t\t\t}\n\t\t\treturn cty.SetValEmpty(ety), nil\n\t\t}\n\n\t\tsubEtys := ety.TupleElementTypes()\n\t\tproduct := make([][]cty.Value, total)\n\n\t\tb := make([]cty.Value, total*len(args))\n\t\tn := make([]int, len(args))\n\t\ts := 0\n\t\targVals := make([][]cty.Value, len(args))\n\t\tfor i, arg := range args {\n\t\t\targVals[i] = arg.AsValueSlice()\n\t\t}\n\n\t\tfor i := range product {\n\t\t\te := s + len(args)\n\t\t\tpi := b[s:e]\n\t\t\tproduct[i] = pi\n\t\t\ts = e\n\n\t\t\tfor j, n := range n {\n\t\t\t\tval := argVals[j][n]\n\t\t\t\tty := subEtys[j]\n\t\t\t\tif !val.Type().Equals(ty) {\n\t\t\t\t\tvar err error\n\t\t\t\t\tval, err = convert.Convert(val, ty)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\t// Should never happen since we checked this in our\n\t\t\t\t\t\t// type-checking function.\n\t\t\t\t\t\treturn cty.NilVal, fmt.Errorf(\"failed to convert argVals[%d][%d] to %s; this is a bug in Terraform\", j, n, ty.FriendlyName())\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tpi[j] = val\n\t\t\t}\n\n\t\t\tfor j := len(n) - 1; j >= 0; j-- {\n\t\t\t\tn[j]++\n\t\t\t\tif n[j] < len(argVals[j]) {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tn[j] = 0\n\t\t\t}\n\t\t}\n\n\t\tproductVals := make([]cty.Value, total)\n\t\tfor i, vals := range product {\n\t\t\tproductVals[i] = cty.TupleVal(vals)\n\t\t}\n\n\t\tif retType.IsListType() {\n\t\t\treturn cty.ListVal(productVals), nil\n\t\t}\n\t\treturn cty.SetVal(productVals), nil\n\t},\n})\n\n// SliceFunc constructs a function that extracts some consecutive elements\n// from within a list.\nvar SliceFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName: \"list\",\n\t\t\tType: cty.DynamicPseudoType,\n\t\t},\n\t\t{\n\t\t\tName: \"start_index\",\n\t\t\tType: cty.Number,\n\t\t},\n\t\t{\n\t\t\tName: \"end_index\",\n\t\t\tType: cty.Number,\n\t\t},\n\t},\n\tType: func(args []cty.Value) (cty.Type, error) {\n\t\targ := args[0]\n\t\targTy := arg.Type()\n\n\t\tif argTy.IsSetType() {\n\t\t\treturn cty.NilType, function.NewArgErrorf(0, \"cannot slice a set, because its elements do not have indices; use the tolist function to force conversion to list if the ordering of the result is not important\")\n\t\t}\n\t\tif !argTy.IsListType() && !argTy.IsTupleType() {\n\t\t\treturn cty.NilType, function.NewArgErrorf(0, \"must be a list or tuple value\")\n\t\t}\n\n\t\tstartIndex, endIndex, idxsKnown, err := sliceIndexes(args)\n\t\tif err != nil {\n\t\t\treturn cty.NilType, err\n\t\t}\n\n\t\tif argTy.IsListType() {\n\t\t\treturn argTy, nil\n\t\t}\n\n\t\tif !idxsKnown {\n\t\t\t// If we don't know our start/end indices then we can't predict\n\t\t\t// the result type if we're planning to return a tuple.\n\t\t\treturn cty.DynamicPseudoType, nil\n\t\t}\n\t\treturn cty.Tuple(argTy.TupleElementTypes()[startIndex:endIndex]), nil\n\t},\n\tImpl: func(args []cty.Value, retType cty.Type) (ret cty.Value, err error) {\n\t\tinputList := args[0]\n\n\t\tif retType == cty.DynamicPseudoType {\n\t\t\treturn cty.DynamicVal, nil\n\t\t}\n\n\t\t// we ignore idxsKnown return value here because the indices are always\n\t\t// known here, or else the call would've short-circuited.\n\t\tstartIndex, endIndex, _, err := sliceIndexes(args)\n\t\tif err != nil {\n\t\t\treturn cty.NilVal, err\n\t\t}\n\n\t\tif endIndex-startIndex == 0 {\n\t\t\tif retType.IsTupleType() {\n\t\t\t\treturn cty.EmptyTupleVal, nil\n\t\t\t}\n\t\t\treturn cty.ListValEmpty(retType.ElementType()), nil\n\t\t}\n\n\t\toutputList := inputList.AsValueSlice()[startIndex:endIndex]\n\n\t\tif retType.IsTupleType() {\n\t\t\treturn cty.TupleVal(outputList), nil\n\t\t}\n\n\t\treturn cty.ListVal(outputList), nil\n\t},\n})\n\nfunc sliceIndexes(args []cty.Value) (int, int, bool, error) {\n\tvar startIndex, endIndex, length int\n\tvar startKnown, endKnown, lengthKnown bool\n\n\tif args[0].Type().IsTupleType() || args[0].IsKnown() { // if it's a tuple then we always know the length by the type, but lists must be known\n\t\tlength = args[0].LengthInt()\n\t\tlengthKnown = true\n\t}\n\n\tif args[1].IsKnown() {\n\t\tif err := gocty.FromCtyValue(args[1], &startIndex); err != nil {\n\t\t\treturn 0, 0, false, function.NewArgErrorf(1, \"invalid start index: %s\", err)\n\t\t}\n\t\tif startIndex < 0 {\n\t\t\treturn 0, 0, false, function.NewArgErrorf(1, \"start index must not be less than zero\")\n\t\t}\n\t\tif lengthKnown && startIndex > length {\n\t\t\treturn 0, 0, false, function.NewArgErrorf(1, \"start index must not be greater than the length of the list\")\n\t\t}\n\t\tstartKnown = true\n\t}\n\tif args[2].IsKnown() {\n\t\tif err := gocty.FromCtyValue(args[2], &endIndex); err != nil {\n\t\t\treturn 0, 0, false, function.NewArgErrorf(2, \"invalid end index: %s\", err)\n\t\t}\n\t\tif endIndex < 0 {\n\t\t\treturn 0, 0, false, function.NewArgErrorf(2, \"end index must not be less than zero\")\n\t\t}\n\t\tif lengthKnown && endIndex > length {\n\t\t\treturn 0, 0, false, function.NewArgErrorf(2, \"end index must not be greater than the length of the list\")\n\t\t}\n\t\tendKnown = true\n\t}\n\tif startKnown && endKnown {\n\t\tif startIndex > endIndex {\n\t\t\treturn 0, 0, false, function.NewArgErrorf(1, \"start index must not be greater than end index\")\n\t\t}\n\t}\n\treturn startIndex, endIndex, startKnown && endKnown, nil\n}\n\n// TransposeFunc contructs a function that takes a map of lists of strings and\n// TransposeFunc constructs a function that takes a map of lists of strings and\n// swaps the keys and values to produce a new map of lists of strings.\nvar TransposeFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName: \"values\",\n\t\t\tType: cty.Map(cty.List(cty.String)),\n\t\t},\n\t},\n\tType: function.StaticReturnType(cty.Map(cty.List(cty.String))),\n\tImpl: func(args []cty.Value, retType cty.Type) (ret cty.Value, err error) {\n\t\tinputMap := args[0]\n\t\tif !inputMap.IsWhollyKnown() {\n\t\t\treturn cty.UnknownVal(retType), nil\n\t\t}\n\n\t\toutputMap := make(map[string]cty.Value)\n\t\ttmpMap := make(map[string][]string)\n\n\t\tfor it := inputMap.ElementIterator(); it.Next(); {\n\t\t\tinKey, inVal := it.Element()\n\t\t\tfor iter := inVal.ElementIterator(); iter.Next(); {\n\t\t\t\t_, val := iter.Element()\n\t\t\t\tif !val.Type().Equals(cty.String) {\n\t\t\t\t\treturn cty.MapValEmpty(cty.List(cty.String)), errors.New(\"input must be a map of lists of strings\")\n\t\t\t\t}\n\n\t\t\t\toutKey := val.AsString()\n\t\t\t\tif _, ok := tmpMap[outKey]; !ok {\n\t\t\t\t\ttmpMap[outKey] = make([]string, 0)\n\t\t\t\t}\n\t\t\t\toutVal := tmpMap[outKey]\n\t\t\t\toutVal = append(outVal, inKey.AsString())\n\t\t\t\tsort.Strings(outVal)\n\t\t\t\ttmpMap[outKey] = outVal\n\t\t\t}\n\t\t}\n\n\t\tfor outKey, outVal := range tmpMap {\n\t\t\tvalues := make([]cty.Value, 0)\n\t\t\tfor _, v := range outVal {\n\t\t\t\tvalues = append(values, cty.StringVal(v))\n\t\t\t}\n\t\t\toutputMap[outKey] = cty.ListVal(values)\n\t\t}\n\n\t\treturn cty.MapVal(outputMap), nil\n\t},\n})\n\n// ValuesFunc constructs a function that returns a list of the map values,\n// in the order of the sorted keys.\nvar ValuesFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName: \"values\",\n\t\t\tType: cty.DynamicPseudoType,\n\t\t},\n\t},\n\tType: func(args []cty.Value) (ret cty.Type, err error) {\n\t\tty := args[0].Type()\n\t\tif ty.IsMapType() {\n\t\t\treturn cty.List(ty.ElementType()), nil\n\t\t} else if ty.IsObjectType() {\n\t\t\t// The result is a tuple type with all of the same types as our\n\t\t\t// object type's attributes, sorted in lexicographical order by the\n\t\t\t// keys. (This matches the sort order guaranteed by ElementIterator\n\t\t\t// on a cty object value.)\n\t\t\tatys := ty.AttributeTypes()\n\t\t\tif len(atys) == 0 {\n\t\t\t\treturn cty.EmptyTuple, nil\n\t\t\t}\n\t\t\tattrNames := make([]string, 0, len(atys))\n\t\t\tfor name := range atys {\n\t\t\t\tattrNames = append(attrNames, name)\n\t\t\t}\n\t\t\tsort.Strings(attrNames)\n\n\t\t\ttys := make([]cty.Type, len(attrNames))\n\t\t\tfor i, name := range attrNames {\n\t\t\t\ttys[i] = atys[name]\n\t\t\t}\n\t\t\treturn cty.Tuple(tys), nil\n\t\t}\n\t\treturn cty.NilType, errors.New(\"values() requires a map as the first argument\")\n\t},\n\tImpl: func(args []cty.Value, retType cty.Type) (ret cty.Value, err error) {\n\t\tmapVar := args[0]\n\n\t\t// We can just iterate the map/object value here because cty guarantees\n\t\t// that these types always iterate in key lexicographical order.\n\t\tvar values []cty.Value\n\t\tfor it := mapVar.ElementIterator(); it.Next(); {\n\t\t\t_, val := it.Element()\n\t\t\tvalues = append(values, val)\n\t\t}\n\n\t\tif retType.IsTupleType() {\n\t\t\treturn cty.TupleVal(values), nil\n\t\t}\n\t\tif len(values) == 0 {\n\t\t\treturn cty.ListValEmpty(retType.ElementType()), nil\n\t\t}\n\t\treturn cty.ListVal(values), nil\n\t},\n})\n\n// ZipmapFunc constructs a function that constructs a map from a list of keys\n// and a corresponding list of values.\nvar ZipmapFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName: \"keys\",\n\t\t\tType: cty.List(cty.String),\n\t\t},\n\t\t{\n\t\t\tName: \"values\",\n\t\t\tType: cty.DynamicPseudoType,\n\t\t},\n\t},\n\tType: func(args []cty.Value) (ret cty.Type, err error) {\n\t\tkeys := args[0]\n\t\tvalues := args[1]\n\t\tvaluesTy := values.Type()\n\n\t\tswitch {\n\t\tcase valuesTy.IsListType():\n\t\t\treturn cty.Map(values.Type().ElementType()), nil\n\t\tcase valuesTy.IsTupleType():\n\t\t\tif !keys.IsWhollyKnown() {\n\t\t\t\t// Since zipmap with a tuple produces an object, we need to know\n\t\t\t\t// all of the key names before we can predict our result type.\n\t\t\t\treturn cty.DynamicPseudoType, nil\n\t\t\t}\n\n\t\t\tkeysRaw := keys.AsValueSlice()\n\t\t\tvalueTypesRaw := valuesTy.TupleElementTypes()\n\t\t\tif len(keysRaw) != len(valueTypesRaw) {\n\t\t\t\treturn cty.NilType, fmt.Errorf(\"number of keys (%d) does not match number of values (%d)\", len(keysRaw), len(valueTypesRaw))\n\t\t\t}\n\t\t\tatys := make(map[string]cty.Type, len(valueTypesRaw))\n\t\t\tfor i, keyVal := range keysRaw {\n\t\t\t\tif keyVal.IsNull() {\n\t\t\t\t\treturn cty.NilType, fmt.Errorf(\"keys list has null value at index %d\", i)\n\t\t\t\t}\n\t\t\t\tkey := keyVal.AsString()\n\t\t\t\tatys[key] = valueTypesRaw[i]\n\t\t\t}\n\t\t\treturn cty.Object(atys), nil\n\n\t\tdefault:\n\t\t\treturn cty.NilType, errors.New(\"values argument must be a list or tuple value\")\n\t\t}\n\t},\n\tImpl: func(args []cty.Value, retType cty.Type) (ret cty.Value, err error) {\n\t\tkeys := args[0]\n\t\tvalues := args[1]\n\n\t\tif !keys.IsWhollyKnown() {\n\t\t\t// Unknown map keys and object attributes are not supported, so\n\t\t\t// our entire result must be unknown in this case.\n\t\t\treturn cty.UnknownVal(retType), nil\n\t\t}\n\n\t\t// both keys and values are guaranteed to be shallowly-known here,\n\t\t// because our declared params above don't allow unknown or null values.\n\t\tif keys.LengthInt() != values.LengthInt() {\n\t\t\treturn cty.NilVal, fmt.Errorf(\"number of keys (%d) does not match number of values (%d)\", keys.LengthInt(), values.LengthInt())\n\t\t}\n\n\t\toutput := make(map[string]cty.Value)\n\n\t\ti := 0\n\t\tfor it := keys.ElementIterator(); it.Next(); {\n\t\t\t_, v := it.Element()\n\t\t\tval := values.Index(cty.NumberIntVal(int64(i)))\n\t\t\toutput[v.AsString()] = val\n\t\t\ti++\n\t\t}\n\n\t\tswitch {\n\t\tcase retType.IsMapType():\n\t\t\tif len(output) == 0 {\n\t\t\t\treturn cty.MapValEmpty(retType.ElementType()), nil\n\t\t\t}\n\t\t\treturn cty.MapVal(output), nil\n\t\tcase retType.IsObjectType():\n\t\t\treturn cty.ObjectVal(output), nil\n\t\tdefault:\n\t\t\t// Should never happen because the type-check function should've\n\t\t\t// caught any other case.\n\t\t\treturn cty.NilVal, fmt.Errorf(\"internally selected incorrect result type %s (this is a bug)\", retType.FriendlyName())\n\t\t}\n\t},\n})\n\n// helper function to add an element to a list, if it does not already exist\nfunc appendIfMissing(slice []cty.Value, element cty.Value) ([]cty.Value, error) {\n\tfor _, ele := range slice {\n\t\teq, err := stdlib.Equal(ele, element)\n\t\tif err != nil {\n\t\t\treturn slice, err\n\t\t}\n\t\tif eq.True() {\n\t\t\treturn slice, nil\n\t\t}\n\t}\n\treturn append(slice, element), nil\n}\n\n// Element returns a single element from a given list at the given index. If\n// index is greater than the length of the list then it is wrapped modulo\n// the list length.\nfunc Element(list, index cty.Value) (cty.Value, error) {\n\treturn ElementFunc.Call([]cty.Value{list, index})\n}\n\n// Length returns the number of elements in the given collection or number of\n// Unicode characters in the given string.\nfunc Length(collection cty.Value) (cty.Value, error) {\n\treturn LengthFunc.Call([]cty.Value{collection})\n}\n\n// Coalesce takes any number of arguments and returns the first one that isn't empty.\nfunc Coalesce(args ...cty.Value) (cty.Value, error) {\n\treturn CoalesceFunc.Call(args)\n}\n\n// CoalesceList takes any number of list arguments and returns the first one that isn't empty.\nfunc CoalesceList(args ...cty.Value) (cty.Value, error) {\n\treturn CoalesceListFunc.Call(args)\n}\n\n// Compact takes a list of strings and returns a new list\n// with any empty string elements removed.\nfunc Compact(list cty.Value) (cty.Value, error) {\n\treturn CompactFunc.Call([]cty.Value{list})\n}\n\n// Contains determines whether a given list contains a given single value\n// as one of its elements.\nfunc Contains(list, value cty.Value) (cty.Value, error) {\n\treturn ContainsFunc.Call([]cty.Value{list, value})\n}\n\n// Index finds the element index for a given value in a list.\nfunc Index(list, value cty.Value) (cty.Value, error) {\n\treturn IndexFunc.Call([]cty.Value{list, value})\n}\n\n// Distinct takes a list and returns a new list with any duplicate elements removed.\nfunc Distinct(list cty.Value) (cty.Value, error) {\n\treturn DistinctFunc.Call([]cty.Value{list})\n}\n\n// Chunklist splits a single list into fixed-size chunks, returning a list of lists.\nfunc Chunklist(list, size cty.Value) (cty.Value, error) {\n\treturn ChunklistFunc.Call([]cty.Value{list, size})\n}\n\n// Flatten takes a list and replaces any elements that are lists with a flattened\n// sequence of the list contents.\nfunc Flatten(list cty.Value) (cty.Value, error) {\n\treturn FlattenFunc.Call([]cty.Value{list})\n}\n\n// Keys takes a map and returns a sorted list of the map keys.\nfunc Keys(inputMap cty.Value) (cty.Value, error) {\n\treturn KeysFunc.Call([]cty.Value{inputMap})\n}\n\n// List takes any number of list arguments and returns a list containing those\n//  values in the same order.\nfunc List(args ...cty.Value) (cty.Value, error) {\n\treturn ListFunc.Call(args)\n}\n\n// Lookup performs a dynamic lookup into a map.\n// There are two required arguments, map and key, plus an optional default,\n// which is a value to return if no key is found in map.\nfunc Lookup(args ...cty.Value) (cty.Value, error) {\n\treturn LookupFunc.Call(args)\n}\n\n// Map takes an even number of arguments and returns a map whose elements are constructed\n// from consecutive pairs of arguments.\nfunc Map(args ...cty.Value) (cty.Value, error) {\n\treturn MapFunc.Call(args)\n}\n\n// Matchkeys constructs a new list by taking a subset of elements from one list\n// whose indexes match the corresponding indexes of values in another list.\nfunc Matchkeys(values, keys, searchset cty.Value) (cty.Value, error) {\n\treturn MatchkeysFunc.Call([]cty.Value{values, keys, searchset})\n}\n\n// Merge takes an arbitrary number of maps and returns a single map that contains\n// a merged set of elements from all of the maps.\n//\n// If more than one given map defines the same key then the one that is later in\n// the argument sequence takes precedence.\nfunc Merge(maps ...cty.Value) (cty.Value, error) {\n\treturn MergeFunc.Call(maps)\n}\n\n// Reverse takes a sequence and produces a new sequence of the same length\n// with all of the same elements as the given sequence but in reverse order.\nfunc Reverse(list cty.Value) (cty.Value, error) {\n\treturn ReverseFunc.Call([]cty.Value{list})\n}\n\n// SetProduct computes the cartesian product of sets or sequences.\nfunc SetProduct(sets ...cty.Value) (cty.Value, error) {\n\treturn SetProductFunc.Call(sets)\n}\n\n// Slice extracts some consecutive elements from within a list.\nfunc Slice(list, start, end cty.Value) (cty.Value, error) {\n\treturn SliceFunc.Call([]cty.Value{list, start, end})\n}\n\n// Transpose takes a map of lists of strings and swaps the keys and values to\n// produce a new map of lists of strings.\nfunc Transpose(values cty.Value) (cty.Value, error) {\n\treturn TransposeFunc.Call([]cty.Value{values})\n}\n\n// Values returns a list of the map values, in the order of the sorted keys.\n// This function only works on flat maps.\nfunc Values(values cty.Value) (cty.Value, error) {\n\treturn ValuesFunc.Call([]cty.Value{values})\n}\n\n// Zipmap constructs a map from a list of keys and a corresponding list of values.\nfunc Zipmap(keys, values cty.Value) (cty.Value, error) {\n\treturn ZipmapFunc.Call([]cty.Value{keys, values})\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/lang/funcs/conversion.go",
    "content": "package funcs\n\nimport (\n\t\"strconv\"\n\n\t\"github.com/zclconf/go-cty/cty\"\n\t\"github.com/zclconf/go-cty/cty/convert\"\n\t\"github.com/zclconf/go-cty/cty/function\"\n)\n\n// MakeToFunc constructs a \"to...\" function, like \"tostring\", which converts\n// its argument to a specific type or type kind.\n//\n// The given type wantTy can be any type constraint that cty's \"convert\" package\n// would accept. In particular, this means that you can pass\n// cty.List(cty.DynamicPseudoType) to mean \"list of any single type\", which\n// will then cause cty to attempt to unify all of the element types when given\n// a tuple.\nfunc MakeToFunc(wantTy cty.Type) function.Function {\n\treturn function.New(&function.Spec{\n\t\tParams: []function.Parameter{\n\t\t\t{\n\t\t\t\tName: \"v\",\n\t\t\t\t// We use DynamicPseudoType rather than wantTy here so that\n\t\t\t\t// all values will pass through the function API verbatim and\n\t\t\t\t// we can handle the conversion logic within the Type and\n\t\t\t\t// Impl functions. This allows us to customize the error\n\t\t\t\t// messages to be more appropriate for an explicit type\n\t\t\t\t// conversion, whereas the cty function system produces\n\t\t\t\t// messages aimed at _implicit_ type conversions.\n\t\t\t\tType:      cty.DynamicPseudoType,\n\t\t\t\tAllowNull: true,\n\t\t\t},\n\t\t},\n\t\tType: func(args []cty.Value) (cty.Type, error) {\n\t\t\tgotTy := args[0].Type()\n\t\t\tif gotTy.Equals(wantTy) {\n\t\t\t\treturn wantTy, nil\n\t\t\t}\n\t\t\tconv := convert.GetConversionUnsafe(args[0].Type(), wantTy)\n\t\t\tif conv == nil {\n\t\t\t\t// We'll use some specialized errors for some trickier cases,\n\t\t\t\t// but most we can handle in a simple way.\n\t\t\t\tswitch {\n\t\t\t\tcase gotTy.IsTupleType() && wantTy.IsTupleType():\n\t\t\t\t\treturn cty.NilType, function.NewArgErrorf(0, \"incompatible tuple type for conversion: %s\", convert.MismatchMessage(gotTy, wantTy))\n\t\t\t\tcase gotTy.IsObjectType() && wantTy.IsObjectType():\n\t\t\t\t\treturn cty.NilType, function.NewArgErrorf(0, \"incompatible object type for conversion: %s\", convert.MismatchMessage(gotTy, wantTy))\n\t\t\t\tdefault:\n\t\t\t\t\treturn cty.NilType, function.NewArgErrorf(0, \"cannot convert %s to %s\", gotTy.FriendlyName(), wantTy.FriendlyNameForConstraint())\n\t\t\t\t}\n\t\t\t}\n\t\t\t// If a conversion is available then everything is fine.\n\t\t\treturn wantTy, nil\n\t\t},\n\t\tImpl: func(args []cty.Value, retType cty.Type) (cty.Value, error) {\n\t\t\t// We didn't set \"AllowUnknown\" on our argument, so it is guaranteed\n\t\t\t// to be known here but may still be null.\n\t\t\tret, err := convert.Convert(args[0], retType)\n\t\t\tif err != nil {\n\t\t\t\t// Because we used GetConversionUnsafe above, conversion can\n\t\t\t\t// still potentially fail in here. For example, if the user\n\t\t\t\t// asks to convert the string \"a\" to bool then we'll\n\t\t\t\t// optimistically permit it during type checking but fail here\n\t\t\t\t// once we note that the value isn't either \"true\" or \"false\".\n\t\t\t\tgotTy := args[0].Type()\n\t\t\t\tswitch {\n\t\t\t\tcase gotTy == cty.String && wantTy == cty.Bool:\n\t\t\t\t\twhat := \"string\"\n\t\t\t\t\tif !args[0].IsNull() {\n\t\t\t\t\t\twhat = strconv.Quote(args[0].AsString())\n\t\t\t\t\t}\n\t\t\t\t\treturn cty.NilVal, function.NewArgErrorf(0, `cannot convert %s to bool; only the strings \"true\" or \"false\" are allowed`, what)\n\t\t\t\tcase gotTy == cty.String && wantTy == cty.Number:\n\t\t\t\t\twhat := \"string\"\n\t\t\t\t\tif !args[0].IsNull() {\n\t\t\t\t\t\twhat = strconv.Quote(args[0].AsString())\n\t\t\t\t\t}\n\t\t\t\t\treturn cty.NilVal, function.NewArgErrorf(0, `cannot convert %s to number; given string must be a decimal representation of a number`, what)\n\t\t\t\tdefault:\n\t\t\t\t\treturn cty.NilVal, function.NewArgErrorf(0, \"cannot convert %s to %s\", gotTy.FriendlyName(), wantTy.FriendlyNameForConstraint())\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn ret, nil\n\t\t},\n\t})\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/lang/funcs/crypto.go",
    "content": "package funcs\n\nimport (\n\t\"crypto/md5\"\n\t\"crypto/rsa\"\n\t\"crypto/sha1\"\n\t\"crypto/sha256\"\n\t\"crypto/sha512\"\n\t\"crypto/x509\"\n\t\"encoding/base64\"\n\t\"encoding/hex\"\n\t\"encoding/pem\"\n\t\"fmt\"\n\t\"hash\"\n\n\tuuid \"github.com/hashicorp/go-uuid\"\n\t\"github.com/zclconf/go-cty/cty\"\n\t\"github.com/zclconf/go-cty/cty/function\"\n\t\"github.com/zclconf/go-cty/cty/gocty\"\n\t\"golang.org/x/crypto/bcrypt\"\n)\n\nvar UUIDFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{},\n\tType:   function.StaticReturnType(cty.String),\n\tImpl: func(args []cty.Value, retType cty.Type) (ret cty.Value, err error) {\n\t\tresult, err := uuid.GenerateUUID()\n\t\tif err != nil {\n\t\t\treturn cty.UnknownVal(cty.String), err\n\t\t}\n\t\treturn cty.StringVal(result), nil\n\t},\n})\n\n// Base64Sha256Func constructs a function that computes the SHA256 hash of a given string\n// and encodes it with Base64.\nvar Base64Sha256Func = makeStringHashFunction(sha256.New, base64.StdEncoding.EncodeToString)\n\n// MakeFileBase64Sha256Func constructs a function that is like Base64Sha256Func but reads the\n// contents of a file rather than hashing a given literal string.\nfunc MakeFileBase64Sha256Func(baseDir string) function.Function {\n\treturn makeFileHashFunction(baseDir, sha256.New, base64.StdEncoding.EncodeToString)\n}\n\n// Base64Sha512Func constructs a function that computes the SHA256 hash of a given string\n// and encodes it with Base64.\nvar Base64Sha512Func = makeStringHashFunction(sha512.New, base64.StdEncoding.EncodeToString)\n\n// MakeFileBase64Sha512Func constructs a function that is like Base64Sha512Func but reads the\n// contents of a file rather than hashing a given literal string.\nfunc MakeFileBase64Sha512Func(baseDir string) function.Function {\n\treturn makeFileHashFunction(baseDir, sha512.New, base64.StdEncoding.EncodeToString)\n}\n\n// BcryptFunc constructs a function that computes a hash of the given string using the Blowfish cipher.\nvar BcryptFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName: \"str\",\n\t\t\tType: cty.String,\n\t\t},\n\t},\n\tVarParam: &function.Parameter{\n\t\tName: \"cost\",\n\t\tType: cty.Number,\n\t},\n\tType: function.StaticReturnType(cty.String),\n\tImpl: func(args []cty.Value, retType cty.Type) (ret cty.Value, err error) {\n\t\tdefaultCost := 10\n\n\t\tif len(args) > 1 {\n\t\t\tvar val int\n\t\t\tif err := gocty.FromCtyValue(args[1], &val); err != nil {\n\t\t\t\treturn cty.UnknownVal(cty.String), err\n\t\t\t}\n\t\t\tdefaultCost = val\n\t\t}\n\n\t\tif len(args) > 2 {\n\t\t\treturn cty.UnknownVal(cty.String), fmt.Errorf(\"bcrypt() takes no more than two arguments\")\n\t\t}\n\n\t\tinput := args[0].AsString()\n\t\tout, err := bcrypt.GenerateFromPassword([]byte(input), defaultCost)\n\t\tif err != nil {\n\t\t\treturn cty.UnknownVal(cty.String), fmt.Errorf(\"error occured generating password %s\", err.Error())\n\t\t}\n\n\t\treturn cty.StringVal(string(out)), nil\n\t},\n})\n\n// Md5Func constructs a function that computes the MD5 hash of a given string and encodes it with hexadecimal digits.\nvar Md5Func = makeStringHashFunction(md5.New, hex.EncodeToString)\n\n// MakeFileMd5Func constructs a function that is like Md5Func but reads the\n// contents of a file rather than hashing a given literal string.\nfunc MakeFileMd5Func(baseDir string) function.Function {\n\treturn makeFileHashFunction(baseDir, md5.New, hex.EncodeToString)\n}\n\n// RsaDecryptFunc constructs a function that decrypts an RSA-encrypted ciphertext.\nvar RsaDecryptFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName: \"ciphertext\",\n\t\t\tType: cty.String,\n\t\t},\n\t\t{\n\t\t\tName: \"privatekey\",\n\t\t\tType: cty.String,\n\t\t},\n\t},\n\tType: function.StaticReturnType(cty.String),\n\tImpl: func(args []cty.Value, retType cty.Type) (ret cty.Value, err error) {\n\t\ts := args[0].AsString()\n\t\tkey := args[1].AsString()\n\n\t\tb, err := base64.StdEncoding.DecodeString(s)\n\t\tif err != nil {\n\t\t\treturn cty.UnknownVal(cty.String), fmt.Errorf(\"failed to decode input %q: cipher text must be base64-encoded\", s)\n\t\t}\n\n\t\tblock, _ := pem.Decode([]byte(key))\n\t\tif block == nil {\n\t\t\treturn cty.UnknownVal(cty.String), fmt.Errorf(\"failed to parse key: no key found\")\n\t\t}\n\t\tif block.Headers[\"Proc-Type\"] == \"4,ENCRYPTED\" {\n\t\t\treturn cty.UnknownVal(cty.String), fmt.Errorf(\n\t\t\t\t\"failed to parse key: password protected keys are not supported. Please decrypt the key prior to use\",\n\t\t\t)\n\t\t}\n\n\t\tx509Key, err := x509.ParsePKCS1PrivateKey(block.Bytes)\n\t\tif err != nil {\n\t\t\treturn cty.UnknownVal(cty.String), err\n\t\t}\n\n\t\tout, err := rsa.DecryptPKCS1v15(nil, x509Key, b)\n\t\tif err != nil {\n\t\t\treturn cty.UnknownVal(cty.String), err\n\t\t}\n\n\t\treturn cty.StringVal(string(out)), nil\n\t},\n})\n\n// Sha1Func contructs a function that computes the SHA1 hash of a given string\n// and encodes it with hexadecimal digits.\nvar Sha1Func = makeStringHashFunction(sha1.New, hex.EncodeToString)\n\n// MakeFileSha1Func constructs a function that is like Sha1Func but reads the\n// contents of a file rather than hashing a given literal string.\nfunc MakeFileSha1Func(baseDir string) function.Function {\n\treturn makeFileHashFunction(baseDir, sha1.New, hex.EncodeToString)\n}\n\n// Sha256Func contructs a function that computes the SHA256 hash of a given string\n// and encodes it with hexadecimal digits.\nvar Sha256Func = makeStringHashFunction(sha256.New, hex.EncodeToString)\n\n// MakeFileSha256Func constructs a function that is like Sha256Func but reads the\n// contents of a file rather than hashing a given literal string.\nfunc MakeFileSha256Func(baseDir string) function.Function {\n\treturn makeFileHashFunction(baseDir, sha256.New, hex.EncodeToString)\n}\n\n// Sha512Func contructs a function that computes the SHA512 hash of a given string\n// and encodes it with hexadecimal digits.\nvar Sha512Func = makeStringHashFunction(sha512.New, hex.EncodeToString)\n\n// MakeFileSha512Func constructs a function that is like Sha512Func but reads the\n// contents of a file rather than hashing a given literal string.\nfunc MakeFileSha512Func(baseDir string) function.Function {\n\treturn makeFileHashFunction(baseDir, sha512.New, hex.EncodeToString)\n}\n\nfunc makeStringHashFunction(hf func() hash.Hash, enc func([]byte) string) function.Function {\n\treturn function.New(&function.Spec{\n\t\tParams: []function.Parameter{\n\t\t\t{\n\t\t\t\tName: \"str\",\n\t\t\t\tType: cty.String,\n\t\t\t},\n\t\t},\n\t\tType: function.StaticReturnType(cty.String),\n\t\tImpl: func(args []cty.Value, retType cty.Type) (ret cty.Value, err error) {\n\t\t\ts := args[0].AsString()\n\t\t\th := hf()\n\t\t\th.Write([]byte(s))\n\t\t\trv := enc(h.Sum(nil))\n\t\t\treturn cty.StringVal(rv), nil\n\t\t},\n\t})\n}\n\nfunc makeFileHashFunction(baseDir string, hf func() hash.Hash, enc func([]byte) string) function.Function {\n\treturn function.New(&function.Spec{\n\t\tParams: []function.Parameter{\n\t\t\t{\n\t\t\t\tName: \"path\",\n\t\t\t\tType: cty.String,\n\t\t\t},\n\t\t},\n\t\tType: function.StaticReturnType(cty.String),\n\t\tImpl: func(args []cty.Value, retType cty.Type) (ret cty.Value, err error) {\n\t\t\tpath := args[0].AsString()\n\t\t\tsrc, err := readFileBytes(baseDir, path)\n\t\t\tif err != nil {\n\t\t\t\treturn cty.UnknownVal(cty.String), err\n\t\t\t}\n\n\t\t\th := hf()\n\t\t\th.Write(src)\n\t\t\trv := enc(h.Sum(nil))\n\t\t\treturn cty.StringVal(rv), nil\n\t\t},\n\t})\n}\n\n// UUID generates and returns a Type-4 UUID in the standard hexadecimal string\n// format.\n//\n// This is not a pure function: it will generate a different result for each\n// call. It must therefore be registered as an impure function in the function\n// table in the \"lang\" package.\nfunc UUID() (cty.Value, error) {\n\treturn UUIDFunc.Call(nil)\n}\n\n// Base64Sha256 computes the SHA256 hash of a given string and encodes it with\n// Base64.\n//\n// The given string is first encoded as UTF-8 and then the SHA256 algorithm is applied\n// as defined in RFC 4634. The raw hash is then encoded with Base64 before returning.\n// Terraform uses the \"standard\" Base64 alphabet as defined in RFC 4648 section 4.\nfunc Base64Sha256(str cty.Value) (cty.Value, error) {\n\treturn Base64Sha256Func.Call([]cty.Value{str})\n}\n\n// Base64Sha512 computes the SHA512 hash of a given string and encodes it with\n// Base64.\n//\n// The given string is first encoded as UTF-8 and then the SHA256 algorithm is applied\n// as defined in RFC 4634. The raw hash is then encoded with Base64 before returning.\n// Terraform uses the \"standard\" Base64  alphabet as defined in RFC 4648 section 4\nfunc Base64Sha512(str cty.Value) (cty.Value, error) {\n\treturn Base64Sha512Func.Call([]cty.Value{str})\n}\n\n// Bcrypt computes a hash of the given string using the Blowfish cipher,\n// returning a string in the Modular Crypt Format\n// usually expected in the shadow password file on many Unix systems.\nfunc Bcrypt(str cty.Value, cost ...cty.Value) (cty.Value, error) {\n\targs := make([]cty.Value, len(cost)+1)\n\targs[0] = str\n\tcopy(args[1:], cost)\n\treturn BcryptFunc.Call(args)\n}\n\n// Md5 computes the MD5 hash of a given string and encodes it with hexadecimal digits.\nfunc Md5(str cty.Value) (cty.Value, error) {\n\treturn Md5Func.Call([]cty.Value{str})\n}\n\n// RsaDecrypt decrypts an RSA-encrypted ciphertext, returning the corresponding\n// cleartext.\nfunc RsaDecrypt(ciphertext, privatekey cty.Value) (cty.Value, error) {\n\treturn RsaDecryptFunc.Call([]cty.Value{ciphertext, privatekey})\n}\n\n// Sha1 computes the SHA1 hash of a given string and encodes it with hexadecimal digits.\nfunc Sha1(str cty.Value) (cty.Value, error) {\n\treturn Sha1Func.Call([]cty.Value{str})\n}\n\n// Sha256 computes the SHA256 hash of a given string and encodes it with hexadecimal digits.\nfunc Sha256(str cty.Value) (cty.Value, error) {\n\treturn Sha256Func.Call([]cty.Value{str})\n}\n\n// Sha512 computes the SHA512 hash of a given string and encodes it with hexadecimal digits.\nfunc Sha512(str cty.Value) (cty.Value, error) {\n\treturn Sha512Func.Call([]cty.Value{str})\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/lang/funcs/datetime.go",
    "content": "package funcs\n\nimport (\n\t\"time\"\n\n\t\"github.com/zclconf/go-cty/cty\"\n\t\"github.com/zclconf/go-cty/cty/function\"\n)\n\n// TimestampFunc constructs a function that returns a string representation of the current date and time.\nvar TimestampFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{},\n\tType:   function.StaticReturnType(cty.String),\n\tImpl: func(args []cty.Value, retType cty.Type) (cty.Value, error) {\n\t\treturn cty.StringVal(time.Now().UTC().Format(time.RFC3339)), nil\n\t},\n})\n\n// TimeAddFunc constructs a function that adds a duration to a timestamp, returning a new timestamp.\nvar TimeAddFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName: \"timestamp\",\n\t\t\tType: cty.String,\n\t\t},\n\t\t{\n\t\t\tName: \"duration\",\n\t\t\tType: cty.String,\n\t\t},\n\t},\n\tType: function.StaticReturnType(cty.String),\n\tImpl: func(args []cty.Value, retType cty.Type) (cty.Value, error) {\n\t\tts, err := time.Parse(time.RFC3339, args[0].AsString())\n\t\tif err != nil {\n\t\t\treturn cty.UnknownVal(cty.String), err\n\t\t}\n\t\tduration, err := time.ParseDuration(args[1].AsString())\n\t\tif err != nil {\n\t\t\treturn cty.UnknownVal(cty.String), err\n\t\t}\n\n\t\treturn cty.StringVal(ts.Add(duration).Format(time.RFC3339)), nil\n\t},\n})\n\n// Timestamp returns a string representation of the current date and time.\n//\n// In the Terraform language, timestamps are conventionally represented as\n// strings using RFC 3339 \"Date and Time format\" syntax, and so timestamp\n// returns a string in this format.\nfunc Timestamp() (cty.Value, error) {\n\treturn TimestampFunc.Call([]cty.Value{})\n}\n\n// TimeAdd adds a duration to a timestamp, returning a new timestamp.\n//\n// In the Terraform language, timestamps are conventionally represented as\n// strings using RFC 3339 \"Date and Time format\" syntax. Timeadd requires\n// the timestamp argument to be a string conforming to this syntax.\n//\n// `duration` is a string representation of a time difference, consisting of\n// sequences of number and unit pairs, like `\"1.5h\"` or `1h30m`. The accepted\n// units are `ns`, `us` (or `µs`), `\"ms\"`, `\"s\"`, `\"m\"`, and `\"h\"`. The first\n// number may be negative to indicate a negative duration, like `\"-2h5m\"`.\n//\n// The result is a string, also in RFC 3339 format, representing the result\n// of adding the given direction to the given timestamp.\nfunc TimeAdd(timestamp cty.Value, duration cty.Value) (cty.Value, error) {\n\treturn TimeAddFunc.Call([]cty.Value{timestamp, duration})\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/lang/funcs/encoding.go",
    "content": "package funcs\n\nimport (\n\t\"bytes\"\n\t\"compress/gzip\"\n\t\"encoding/base64\"\n\t\"fmt\"\n\t\"log\"\n\t\"net/url\"\n\t\"unicode/utf8\"\n\n\t\"github.com/zclconf/go-cty/cty\"\n\t\"github.com/zclconf/go-cty/cty/function\"\n)\n\n// Base64DecodeFunc constructs a function that decodes a string containing a base64 sequence.\nvar Base64DecodeFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName: \"str\",\n\t\t\tType: cty.String,\n\t\t},\n\t},\n\tType: function.StaticReturnType(cty.String),\n\tImpl: func(args []cty.Value, retType cty.Type) (cty.Value, error) {\n\t\ts := args[0].AsString()\n\t\tsDec, err := base64.StdEncoding.DecodeString(s)\n\t\tif err != nil {\n\t\t\treturn cty.UnknownVal(cty.String), fmt.Errorf(\"failed to decode base64 data '%s'\", s)\n\t\t}\n\t\tif !utf8.Valid([]byte(sDec)) {\n\t\t\tlog.Printf(\"[DEBUG] the result of decoding the the provided string is not valid UTF-8: %s\", sDec)\n\t\t\treturn cty.UnknownVal(cty.String), fmt.Errorf(\"the result of decoding the the provided string is not valid UTF-8\")\n\t\t}\n\t\treturn cty.StringVal(string(sDec)), nil\n\t},\n})\n\n// Base64EncodeFunc constructs a function that encodes a string to a base64 sequence.\nvar Base64EncodeFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName: \"str\",\n\t\t\tType: cty.String,\n\t\t},\n\t},\n\tType: function.StaticReturnType(cty.String),\n\tImpl: func(args []cty.Value, retType cty.Type) (cty.Value, error) {\n\t\treturn cty.StringVal(base64.StdEncoding.EncodeToString([]byte(args[0].AsString()))), nil\n\t},\n})\n\n// Base64GzipFunc constructs a function that compresses a string with gzip and then encodes the result in\n// Base64 encoding.\nvar Base64GzipFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName: \"str\",\n\t\t\tType: cty.String,\n\t\t},\n\t},\n\tType: function.StaticReturnType(cty.String),\n\tImpl: func(args []cty.Value, retType cty.Type) (cty.Value, error) {\n\t\ts := args[0].AsString()\n\n\t\tvar b bytes.Buffer\n\t\tgz := gzip.NewWriter(&b)\n\t\tif _, err := gz.Write([]byte(s)); err != nil {\n\t\t\treturn cty.UnknownVal(cty.String), fmt.Errorf(\"failed to write gzip raw data: '%s'\", s)\n\t\t}\n\t\tif err := gz.Flush(); err != nil {\n\t\t\treturn cty.UnknownVal(cty.String), fmt.Errorf(\"failed to flush gzip writer: '%s'\", s)\n\t\t}\n\t\tif err := gz.Close(); err != nil {\n\t\t\treturn cty.UnknownVal(cty.String), fmt.Errorf(\"failed to close gzip writer: '%s'\", s)\n\t\t}\n\t\treturn cty.StringVal(base64.StdEncoding.EncodeToString(b.Bytes())), nil\n\t},\n})\n\n// URLEncodeFunc constructs a function that applies URL encoding to a given string.\nvar URLEncodeFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName: \"str\",\n\t\t\tType: cty.String,\n\t\t},\n\t},\n\tType: function.StaticReturnType(cty.String),\n\tImpl: func(args []cty.Value, retType cty.Type) (cty.Value, error) {\n\t\treturn cty.StringVal(url.QueryEscape(args[0].AsString())), nil\n\t},\n})\n\n// Base64Decode decodes a string containing a base64 sequence.\n//\n// Terraform uses the \"standard\" Base64 alphabet as defined in RFC 4648 section 4.\n//\n// Strings in the Terraform language are sequences of unicode characters rather\n// than bytes, so this function will also interpret the resulting bytes as\n// UTF-8. If the bytes after Base64 decoding are _not_ valid UTF-8, this function\n// produces an error.\nfunc Base64Decode(str cty.Value) (cty.Value, error) {\n\treturn Base64DecodeFunc.Call([]cty.Value{str})\n}\n\n// Base64Encode applies Base64 encoding to a string.\n//\n// Terraform uses the \"standard\" Base64 alphabet as defined in RFC 4648 section 4.\n//\n// Strings in the Terraform language are sequences of unicode characters rather\n// than bytes, so this function will first encode the characters from the string\n// as UTF-8, and then apply Base64 encoding to the result.\nfunc Base64Encode(str cty.Value) (cty.Value, error) {\n\treturn Base64EncodeFunc.Call([]cty.Value{str})\n}\n\n// Base64Gzip compresses a string with gzip and then encodes the result in\n// Base64 encoding.\n//\n// Terraform uses the \"standard\" Base64 alphabet as defined in RFC 4648 section 4.\n//\n// Strings in the Terraform language are sequences of unicode characters rather\n// than bytes, so this function will first encode the characters from the string\n// as UTF-8, then apply gzip compression, and then finally apply Base64 encoding.\nfunc Base64Gzip(str cty.Value) (cty.Value, error) {\n\treturn Base64GzipFunc.Call([]cty.Value{str})\n}\n\n// URLEncode applies URL encoding to a given string.\n//\n// This function identifies characters in the given string that would have a\n// special meaning when included as a query string argument in a URL and\n// escapes them using RFC 3986 \"percent encoding\".\n//\n// If the given string contains non-ASCII characters, these are first encoded as\n// UTF-8 and then percent encoding is applied separately to each UTF-8 byte.\nfunc URLEncode(str cty.Value) (cty.Value, error) {\n\treturn URLEncodeFunc.Call([]cty.Value{str})\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/lang/funcs/filesystem.go",
    "content": "package funcs\n\nimport (\n\t\"encoding/base64\"\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"unicode/utf8\"\n\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/hashicorp/hcl2/hcl/hclsyntax\"\n\thomedir \"github.com/mitchellh/go-homedir\"\n\t\"github.com/zclconf/go-cty/cty\"\n\t\"github.com/zclconf/go-cty/cty/function\"\n)\n\n// MakeFileFunc constructs a function that takes a file path and returns the\n// contents of that file, either directly as a string (where valid UTF-8 is\n// required) or as a string containing base64 bytes.\nfunc MakeFileFunc(baseDir string, encBase64 bool) function.Function {\n\treturn function.New(&function.Spec{\n\t\tParams: []function.Parameter{\n\t\t\t{\n\t\t\t\tName: \"path\",\n\t\t\t\tType: cty.String,\n\t\t\t},\n\t\t},\n\t\tType: function.StaticReturnType(cty.String),\n\t\tImpl: func(args []cty.Value, retType cty.Type) (cty.Value, error) {\n\t\t\tpath := args[0].AsString()\n\t\t\tsrc, err := readFileBytes(baseDir, path)\n\t\t\tif err != nil {\n\t\t\t\treturn cty.UnknownVal(cty.String), err\n\t\t\t}\n\n\t\t\tswitch {\n\t\t\tcase encBase64:\n\t\t\t\tenc := base64.StdEncoding.EncodeToString(src)\n\t\t\t\treturn cty.StringVal(enc), nil\n\t\t\tdefault:\n\t\t\t\tif !utf8.Valid(src) {\n\t\t\t\t\treturn cty.UnknownVal(cty.String), fmt.Errorf(\"contents of %s are not valid UTF-8; use the filebase64 function to obtain the Base64 encoded contents or the other file functions (e.g. filemd5, filesha256) to obtain file hashing results instead\", path)\n\t\t\t\t}\n\t\t\t\treturn cty.StringVal(string(src)), nil\n\t\t\t}\n\t\t},\n\t})\n}\n\n// MakeTemplateFileFunc constructs a function that takes a file path and\n// an arbitrary object of named values and attempts to render the referenced\n// file as a template using HCL template syntax.\n//\n// The template itself may recursively call other functions so a callback\n// must be provided to get access to those functions. The template cannot,\n// however, access any variables defined in the scope: it is restricted only to\n// those variables provided in the second function argument, to ensure that all\n// dependencies on other graph nodes can be seen before executing this function.\n//\n// As a special exception, a referenced template file may not recursively call\n// the templatefile function, since that would risk the same file being\n// included into itself indefinitely.\nfunc MakeTemplateFileFunc(baseDir string, funcsCb func() map[string]function.Function) function.Function {\n\n\tparams := []function.Parameter{\n\t\t{\n\t\t\tName: \"path\",\n\t\t\tType: cty.String,\n\t\t},\n\t\t{\n\t\t\tName: \"vars\",\n\t\t\tType: cty.DynamicPseudoType,\n\t\t},\n\t}\n\n\tloadTmpl := func(fn string) (hcl.Expression, error) {\n\t\t// We re-use File here to ensure the same filename interpretation\n\t\t// as it does, along with its other safety checks.\n\t\ttmplVal, err := File(baseDir, cty.StringVal(fn))\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\texpr, diags := hclsyntax.ParseTemplate([]byte(tmplVal.AsString()), fn, hcl.Pos{Line: 1, Column: 1})\n\t\tif diags.HasErrors() {\n\t\t\treturn nil, diags\n\t\t}\n\n\t\treturn expr, nil\n\t}\n\n\trenderTmpl := func(expr hcl.Expression, varsVal cty.Value) (cty.Value, error) {\n\t\tif varsTy := varsVal.Type(); !(varsTy.IsMapType() || varsTy.IsObjectType()) {\n\t\t\treturn cty.DynamicVal, function.NewArgErrorf(1, \"invalid vars value: must be a map\") // or an object, but we don't strongly distinguish these most of the time\n\t\t}\n\n\t\tctx := &hcl.EvalContext{\n\t\t\tVariables: varsVal.AsValueMap(),\n\t\t}\n\n\t\t// We'll pre-check references in the template here so we can give a\n\t\t// more specialized error message than HCL would by default, so it's\n\t\t// clearer that this problem is coming from a templatefile call.\n\t\tfor _, traversal := range expr.Variables() {\n\t\t\troot := traversal.RootName()\n\t\t\tif _, ok := ctx.Variables[root]; !ok {\n\t\t\t\treturn cty.DynamicVal, function.NewArgErrorf(1, \"vars map does not contain key %q, referenced at %s\", root, traversal[0].SourceRange())\n\t\t\t}\n\t\t}\n\n\t\tgivenFuncs := funcsCb() // this callback indirection is to avoid chicken/egg problems\n\t\tfuncs := make(map[string]function.Function, len(givenFuncs))\n\t\tfor name, fn := range givenFuncs {\n\t\t\tif name == \"templatefile\" {\n\t\t\t\t// We stub this one out to prevent recursive calls.\n\t\t\t\tfuncs[name] = function.New(&function.Spec{\n\t\t\t\t\tParams: params,\n\t\t\t\t\tType: func(args []cty.Value) (cty.Type, error) {\n\t\t\t\t\t\treturn cty.NilType, fmt.Errorf(\"cannot recursively call templatefile from inside templatefile call\")\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tfuncs[name] = fn\n\t\t}\n\t\tctx.Functions = funcs\n\n\t\tval, diags := expr.Value(ctx)\n\t\tif diags.HasErrors() {\n\t\t\treturn cty.DynamicVal, diags\n\t\t}\n\t\treturn val, nil\n\t}\n\n\treturn function.New(&function.Spec{\n\t\tParams: params,\n\t\tType: func(args []cty.Value) (cty.Type, error) {\n\t\t\tif !(args[0].IsKnown() && args[1].IsKnown()) {\n\t\t\t\treturn cty.DynamicPseudoType, nil\n\t\t\t}\n\n\t\t\t// We'll render our template now to see what result type it produces.\n\t\t\t// A template consisting only of a single interpolation an potentially\n\t\t\t// return any type.\n\t\t\texpr, err := loadTmpl(args[0].AsString())\n\t\t\tif err != nil {\n\t\t\t\treturn cty.DynamicPseudoType, err\n\t\t\t}\n\n\t\t\t// This is safe even if args[1] contains unknowns because the HCL\n\t\t\t// template renderer itself knows how to short-circuit those.\n\t\t\tval, err := renderTmpl(expr, args[1])\n\t\t\treturn val.Type(), err\n\t\t},\n\t\tImpl: func(args []cty.Value, retType cty.Type) (cty.Value, error) {\n\t\t\texpr, err := loadTmpl(args[0].AsString())\n\t\t\tif err != nil {\n\t\t\t\treturn cty.DynamicVal, err\n\t\t\t}\n\t\t\treturn renderTmpl(expr, args[1])\n\t\t},\n\t})\n\n}\n\n// MakeFileExistsFunc constructs a function that takes a path\n// and determines whether a file exists at that path\nfunc MakeFileExistsFunc(baseDir string) function.Function {\n\treturn function.New(&function.Spec{\n\t\tParams: []function.Parameter{\n\t\t\t{\n\t\t\t\tName: \"path\",\n\t\t\t\tType: cty.String,\n\t\t\t},\n\t\t},\n\t\tType: function.StaticReturnType(cty.Bool),\n\t\tImpl: func(args []cty.Value, retType cty.Type) (cty.Value, error) {\n\t\t\tpath := args[0].AsString()\n\t\t\tpath, err := homedir.Expand(path)\n\t\t\tif err != nil {\n\t\t\t\treturn cty.UnknownVal(cty.Bool), fmt.Errorf(\"failed to expand ~: %s\", err)\n\t\t\t}\n\n\t\t\tif !filepath.IsAbs(path) {\n\t\t\t\tpath = filepath.Join(baseDir, path)\n\t\t\t}\n\n\t\t\t// Ensure that the path is canonical for the host OS\n\t\t\tpath = filepath.Clean(path)\n\n\t\t\tfi, err := os.Stat(path)\n\t\t\tif err != nil {\n\t\t\t\tif os.IsNotExist(err) {\n\t\t\t\t\treturn cty.False, nil\n\t\t\t\t}\n\t\t\t\treturn cty.UnknownVal(cty.Bool), fmt.Errorf(\"failed to stat %s\", path)\n\t\t\t}\n\n\t\t\tif fi.Mode().IsRegular() {\n\t\t\t\treturn cty.True, nil\n\t\t\t}\n\n\t\t\treturn cty.False, fmt.Errorf(\"%s is not a regular file, but %q\",\n\t\t\t\tpath, fi.Mode().String())\n\t\t},\n\t})\n}\n\n// BasenameFunc constructs a function that takes a string containing a filesystem path\n// and removes all except the last portion from it.\nvar BasenameFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName: \"path\",\n\t\t\tType: cty.String,\n\t\t},\n\t},\n\tType: function.StaticReturnType(cty.String),\n\tImpl: func(args []cty.Value, retType cty.Type) (cty.Value, error) {\n\t\treturn cty.StringVal(filepath.Base(args[0].AsString())), nil\n\t},\n})\n\n// DirnameFunc constructs a function that takes a string containing a filesystem path\n// and removes the last portion from it.\nvar DirnameFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName: \"path\",\n\t\t\tType: cty.String,\n\t\t},\n\t},\n\tType: function.StaticReturnType(cty.String),\n\tImpl: func(args []cty.Value, retType cty.Type) (cty.Value, error) {\n\t\treturn cty.StringVal(filepath.Dir(args[0].AsString())), nil\n\t},\n})\n\n// PathExpandFunc constructs a function that expands a leading ~ character to the current user's home directory.\nvar PathExpandFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName: \"path\",\n\t\t\tType: cty.String,\n\t\t},\n\t},\n\tType: function.StaticReturnType(cty.String),\n\tImpl: func(args []cty.Value, retType cty.Type) (cty.Value, error) {\n\n\t\thomePath, err := homedir.Expand(args[0].AsString())\n\t\treturn cty.StringVal(homePath), err\n\t},\n})\n\nfunc readFileBytes(baseDir, path string) ([]byte, error) {\n\tpath, err := homedir.Expand(path)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to expand ~: %s\", err)\n\t}\n\n\tif !filepath.IsAbs(path) {\n\t\tpath = filepath.Join(baseDir, path)\n\t}\n\n\t// Ensure that the path is canonical for the host OS\n\tpath = filepath.Clean(path)\n\n\tsrc, err := ioutil.ReadFile(path)\n\tif err != nil {\n\t\t// ReadFile does not return Terraform-user-friendly error\n\t\t// messages, so we'll provide our own.\n\t\tif os.IsNotExist(err) {\n\t\t\treturn nil, fmt.Errorf(\"no file exists at %s\", path)\n\t\t}\n\t\treturn nil, fmt.Errorf(\"failed to read %s\", path)\n\t}\n\n\treturn src, nil\n}\n\n// File reads the contents of the file at the given path.\n//\n// The file must contain valid UTF-8 bytes, or this function will return an error.\n//\n// The underlying function implementation works relative to a particular base\n// directory, so this wrapper takes a base directory string and uses it to\n// construct the underlying function before calling it.\nfunc File(baseDir string, path cty.Value) (cty.Value, error) {\n\tfn := MakeFileFunc(baseDir, false)\n\treturn fn.Call([]cty.Value{path})\n}\n\n// FileExists determines whether a file exists at the given path.\n//\n// The underlying function implementation works relative to a particular base\n// directory, so this wrapper takes a base directory string and uses it to\n// construct the underlying function before calling it.\nfunc FileExists(baseDir string, path cty.Value) (cty.Value, error) {\n\tfn := MakeFileExistsFunc(baseDir)\n\treturn fn.Call([]cty.Value{path})\n}\n\n// FileBase64 reads the contents of the file at the given path.\n//\n// The bytes from the file are encoded as base64 before returning.\n//\n// The underlying function implementation works relative to a particular base\n// directory, so this wrapper takes a base directory string and uses it to\n// construct the underlying function before calling it.\nfunc FileBase64(baseDir string, path cty.Value) (cty.Value, error) {\n\tfn := MakeFileFunc(baseDir, true)\n\treturn fn.Call([]cty.Value{path})\n}\n\n// Basename takes a string containing a filesystem path and removes all except the last portion from it.\n//\n// The underlying function implementation works only with the path string and does not access the filesystem itself.\n// It is therefore unable to take into account filesystem features such as symlinks.\n//\n// If the path is empty then the result is \".\", representing the current working directory.\nfunc Basename(path cty.Value) (cty.Value, error) {\n\treturn BasenameFunc.Call([]cty.Value{path})\n}\n\n// Dirname takes a string containing a filesystem path and removes the last portion from it.\n//\n// The underlying function implementation works only with the path string and does not access the filesystem itself.\n// It is therefore unable to take into account filesystem features such as symlinks.\n//\n// If the path is empty then the result is \".\", representing the current working directory.\nfunc Dirname(path cty.Value) (cty.Value, error) {\n\treturn DirnameFunc.Call([]cty.Value{path})\n}\n\n// Pathexpand takes a string that might begin with a `~` segment, and if so it replaces that segment with\n// the current user's home directory path.\n//\n// The underlying function implementation works only with the path string and does not access the filesystem itself.\n// It is therefore unable to take into account filesystem features such as symlinks.\n//\n// If the leading segment in the path is not `~` then the given path is returned unmodified.\nfunc Pathexpand(path cty.Value) (cty.Value, error) {\n\treturn PathExpandFunc.Call([]cty.Value{path})\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/lang/funcs/number.go",
    "content": "package funcs\n\nimport (\n\t\"math\"\n\n\t\"github.com/zclconf/go-cty/cty\"\n\t\"github.com/zclconf/go-cty/cty/function\"\n\t\"github.com/zclconf/go-cty/cty/gocty\"\n)\n\n// CeilFunc contructs a function that returns the closest whole number greater\n// than or equal to the given value.\nvar CeilFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName: \"num\",\n\t\t\tType: cty.Number,\n\t\t},\n\t},\n\tType: function.StaticReturnType(cty.Number),\n\tImpl: func(args []cty.Value, retType cty.Type) (ret cty.Value, err error) {\n\t\tvar val float64\n\t\tif err := gocty.FromCtyValue(args[0], &val); err != nil {\n\t\t\treturn cty.UnknownVal(cty.String), err\n\t\t}\n\t\treturn cty.NumberIntVal(int64(math.Ceil(val))), nil\n\t},\n})\n\n// FloorFunc contructs a function that returns the closest whole number lesser\n// than or equal to the given value.\nvar FloorFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName: \"num\",\n\t\t\tType: cty.Number,\n\t\t},\n\t},\n\tType: function.StaticReturnType(cty.Number),\n\tImpl: func(args []cty.Value, retType cty.Type) (ret cty.Value, err error) {\n\t\tvar val float64\n\t\tif err := gocty.FromCtyValue(args[0], &val); err != nil {\n\t\t\treturn cty.UnknownVal(cty.String), err\n\t\t}\n\t\treturn cty.NumberIntVal(int64(math.Floor(val))), nil\n\t},\n})\n\n// LogFunc contructs a function that returns the logarithm of a given number in a given base.\nvar LogFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName: \"num\",\n\t\t\tType: cty.Number,\n\t\t},\n\t\t{\n\t\t\tName: \"base\",\n\t\t\tType: cty.Number,\n\t\t},\n\t},\n\tType: function.StaticReturnType(cty.Number),\n\tImpl: func(args []cty.Value, retType cty.Type) (ret cty.Value, err error) {\n\t\tvar num float64\n\t\tif err := gocty.FromCtyValue(args[0], &num); err != nil {\n\t\t\treturn cty.UnknownVal(cty.String), err\n\t\t}\n\n\t\tvar base float64\n\t\tif err := gocty.FromCtyValue(args[1], &base); err != nil {\n\t\t\treturn cty.UnknownVal(cty.String), err\n\t\t}\n\n\t\treturn cty.NumberFloatVal(math.Log(num) / math.Log(base)), nil\n\t},\n})\n\n// PowFunc contructs a function that returns the logarithm of a given number in a given base.\nvar PowFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName: \"num\",\n\t\t\tType: cty.Number,\n\t\t},\n\t\t{\n\t\t\tName: \"power\",\n\t\t\tType: cty.Number,\n\t\t},\n\t},\n\tType: function.StaticReturnType(cty.Number),\n\tImpl: func(args []cty.Value, retType cty.Type) (ret cty.Value, err error) {\n\t\tvar num float64\n\t\tif err := gocty.FromCtyValue(args[0], &num); err != nil {\n\t\t\treturn cty.UnknownVal(cty.String), err\n\t\t}\n\n\t\tvar power float64\n\t\tif err := gocty.FromCtyValue(args[1], &power); err != nil {\n\t\t\treturn cty.UnknownVal(cty.String), err\n\t\t}\n\n\t\treturn cty.NumberFloatVal(math.Pow(num, power)), nil\n\t},\n})\n\n// SignumFunc contructs a function that returns the closest whole number greater\n// than or equal to the given value.\nvar SignumFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName: \"num\",\n\t\t\tType: cty.Number,\n\t\t},\n\t},\n\tType: function.StaticReturnType(cty.Number),\n\tImpl: func(args []cty.Value, retType cty.Type) (ret cty.Value, err error) {\n\t\tvar num int\n\t\tif err := gocty.FromCtyValue(args[0], &num); err != nil {\n\t\t\treturn cty.UnknownVal(cty.String), err\n\t\t}\n\t\tswitch {\n\t\tcase num < 0:\n\t\t\treturn cty.NumberIntVal(-1), nil\n\t\tcase num > 0:\n\t\t\treturn cty.NumberIntVal(+1), nil\n\t\tdefault:\n\t\t\treturn cty.NumberIntVal(0), nil\n\t\t}\n\t},\n})\n\n// Ceil returns the closest whole number greater than or equal to the given value.\nfunc Ceil(num cty.Value) (cty.Value, error) {\n\treturn CeilFunc.Call([]cty.Value{num})\n}\n\n// Floor returns the closest whole number lesser than or equal to the given value.\nfunc Floor(num cty.Value) (cty.Value, error) {\n\treturn FloorFunc.Call([]cty.Value{num})\n}\n\n// Log returns returns the logarithm of a given number in a given base.\nfunc Log(num, base cty.Value) (cty.Value, error) {\n\treturn LogFunc.Call([]cty.Value{num, base})\n}\n\n// Pow returns the logarithm of a given number in a given base.\nfunc Pow(num, power cty.Value) (cty.Value, error) {\n\treturn PowFunc.Call([]cty.Value{num, power})\n}\n\n// Signum determines the sign of a number, returning a number between -1 and\n// 1 to represent the sign.\nfunc Signum(num cty.Value) (cty.Value, error) {\n\treturn SignumFunc.Call([]cty.Value{num})\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/lang/funcs/string.go",
    "content": "package funcs\n\nimport (\n\t\"fmt\"\n\t\"regexp\"\n\t\"sort\"\n\t\"strings\"\n\n\t\"github.com/zclconf/go-cty/cty\"\n\t\"github.com/zclconf/go-cty/cty/function\"\n\t\"github.com/zclconf/go-cty/cty/gocty\"\n)\n\nvar JoinFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName: \"separator\",\n\t\t\tType: cty.String,\n\t\t},\n\t},\n\tVarParam: &function.Parameter{\n\t\tName: \"lists\",\n\t\tType: cty.List(cty.String),\n\t},\n\tType: function.StaticReturnType(cty.String),\n\tImpl: func(args []cty.Value, retType cty.Type) (cty.Value, error) {\n\t\tsep := args[0].AsString()\n\t\tlistVals := args[1:]\n\t\tif len(listVals) < 1 {\n\t\t\treturn cty.UnknownVal(cty.String), fmt.Errorf(\"at least one list is required\")\n\t\t}\n\n\t\tl := 0\n\t\tfor _, list := range listVals {\n\t\t\tif !list.IsWhollyKnown() {\n\t\t\t\treturn cty.UnknownVal(cty.String), nil\n\t\t\t}\n\t\t\tl += list.LengthInt()\n\t\t}\n\n\t\titems := make([]string, 0, l)\n\t\tfor ai, list := range listVals {\n\t\t\tei := 0\n\t\t\tfor it := list.ElementIterator(); it.Next(); {\n\t\t\t\t_, val := it.Element()\n\t\t\t\tif val.IsNull() {\n\t\t\t\t\tif len(listVals) > 1 {\n\t\t\t\t\t\treturn cty.UnknownVal(cty.String), function.NewArgErrorf(ai+1, \"element %d of list %d is null; cannot concatenate null values\", ei, ai+1)\n\t\t\t\t\t}\n\t\t\t\t\treturn cty.UnknownVal(cty.String), function.NewArgErrorf(ai+1, \"element %d is null; cannot concatenate null values\", ei)\n\t\t\t\t}\n\t\t\t\titems = append(items, val.AsString())\n\t\t\t\tei++\n\t\t\t}\n\t\t}\n\n\t\treturn cty.StringVal(strings.Join(items, sep)), nil\n\t},\n})\n\nvar SortFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName: \"list\",\n\t\t\tType: cty.List(cty.String),\n\t\t},\n\t},\n\tType: function.StaticReturnType(cty.List(cty.String)),\n\tImpl: func(args []cty.Value, retType cty.Type) (cty.Value, error) {\n\t\tlistVal := args[0]\n\n\t\tif !listVal.IsWhollyKnown() {\n\t\t\t// If some of the element values aren't known yet then we\n\t\t\t// can't yet preduct the order of the result.\n\t\t\treturn cty.UnknownVal(retType), nil\n\t\t}\n\t\tif listVal.LengthInt() == 0 { // Easy path\n\t\t\treturn listVal, nil\n\t\t}\n\n\t\tlist := make([]string, 0, listVal.LengthInt())\n\t\tfor it := listVal.ElementIterator(); it.Next(); {\n\t\t\tiv, v := it.Element()\n\t\t\tif v.IsNull() {\n\t\t\t\treturn cty.UnknownVal(retType), fmt.Errorf(\"given list element %s is null; a null string cannot be sorted\", iv.AsBigFloat().String())\n\t\t\t}\n\t\t\tlist = append(list, v.AsString())\n\t\t}\n\n\t\tsort.Strings(list)\n\t\tretVals := make([]cty.Value, len(list))\n\t\tfor i, s := range list {\n\t\t\tretVals[i] = cty.StringVal(s)\n\t\t}\n\t\treturn cty.ListVal(retVals), nil\n\t},\n})\n\nvar SplitFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName: \"separator\",\n\t\t\tType: cty.String,\n\t\t},\n\t\t{\n\t\t\tName: \"str\",\n\t\t\tType: cty.String,\n\t\t},\n\t},\n\tType: function.StaticReturnType(cty.List(cty.String)),\n\tImpl: func(args []cty.Value, retType cty.Type) (cty.Value, error) {\n\t\tsep := args[0].AsString()\n\t\tstr := args[1].AsString()\n\t\telems := strings.Split(str, sep)\n\t\telemVals := make([]cty.Value, len(elems))\n\t\tfor i, s := range elems {\n\t\t\telemVals[i] = cty.StringVal(s)\n\t\t}\n\t\tif len(elemVals) == 0 {\n\t\t\treturn cty.ListValEmpty(cty.String), nil\n\t\t}\n\t\treturn cty.ListVal(elemVals), nil\n\t},\n})\n\n// ChompFunc constructions a function that removes newline characters at the end of a string.\nvar ChompFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName: \"str\",\n\t\t\tType: cty.String,\n\t\t},\n\t},\n\tType: function.StaticReturnType(cty.String),\n\tImpl: func(args []cty.Value, retType cty.Type) (ret cty.Value, err error) {\n\t\tnewlines := regexp.MustCompile(`(?:\\r\\n?|\\n)*\\z`)\n\t\treturn cty.StringVal(newlines.ReplaceAllString(args[0].AsString(), \"\")), nil\n\t},\n})\n\n// IndentFunc constructions a function that adds a given number of spaces to the\n// beginnings of all but the first line in a given multi-line string.\nvar IndentFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName: \"spaces\",\n\t\t\tType: cty.Number,\n\t\t},\n\t\t{\n\t\t\tName: \"str\",\n\t\t\tType: cty.String,\n\t\t},\n\t},\n\tType: function.StaticReturnType(cty.String),\n\tImpl: func(args []cty.Value, retType cty.Type) (ret cty.Value, err error) {\n\t\tvar spaces int\n\t\tif err := gocty.FromCtyValue(args[0], &spaces); err != nil {\n\t\t\treturn cty.UnknownVal(cty.String), err\n\t\t}\n\t\tdata := args[1].AsString()\n\t\tpad := strings.Repeat(\" \", spaces)\n\t\treturn cty.StringVal(strings.Replace(data, \"\\n\", \"\\n\"+pad, -1)), nil\n\t},\n})\n\n// ReplaceFunc constructions a function that searches a given string for another\n// given substring, and replaces each occurence with a given replacement string.\nvar ReplaceFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName: \"str\",\n\t\t\tType: cty.String,\n\t\t},\n\t\t{\n\t\t\tName: \"substr\",\n\t\t\tType: cty.String,\n\t\t},\n\t\t{\n\t\t\tName: \"replace\",\n\t\t\tType: cty.String,\n\t\t},\n\t},\n\tType: function.StaticReturnType(cty.String),\n\tImpl: func(args []cty.Value, retType cty.Type) (ret cty.Value, err error) {\n\t\tstr := args[0].AsString()\n\t\tsubstr := args[1].AsString()\n\t\treplace := args[2].AsString()\n\n\t\t// We search/replace using a regexp if the string is surrounded\n\t\t// in forward slashes.\n\t\tif len(substr) > 1 && substr[0] == '/' && substr[len(substr)-1] == '/' {\n\t\t\tre, err := regexp.Compile(substr[1 : len(substr)-1])\n\t\t\tif err != nil {\n\t\t\t\treturn cty.UnknownVal(cty.String), err\n\t\t\t}\n\n\t\t\treturn cty.StringVal(re.ReplaceAllString(str, replace)), nil\n\t\t}\n\n\t\treturn cty.StringVal(strings.Replace(str, substr, replace, -1)), nil\n\t},\n})\n\n// TitleFunc constructions a function that converts the first letter of each word\n// in the given string to uppercase.\nvar TitleFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName: \"str\",\n\t\t\tType: cty.String,\n\t\t},\n\t},\n\tType: function.StaticReturnType(cty.String),\n\tImpl: func(args []cty.Value, retType cty.Type) (ret cty.Value, err error) {\n\t\treturn cty.StringVal(strings.Title(args[0].AsString())), nil\n\t},\n})\n\n// TrimSpaceFunc constructions a function that removes any space characters from\n// the start and end of the given string.\nvar TrimSpaceFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName: \"str\",\n\t\t\tType: cty.String,\n\t\t},\n\t},\n\tType: function.StaticReturnType(cty.String),\n\tImpl: func(args []cty.Value, retType cty.Type) (ret cty.Value, err error) {\n\t\treturn cty.StringVal(strings.TrimSpace(args[0].AsString())), nil\n\t},\n})\n\n// Join concatenates together the string elements of one or more lists with a\n// given separator.\nfunc Join(sep cty.Value, lists ...cty.Value) (cty.Value, error) {\n\targs := make([]cty.Value, len(lists)+1)\n\targs[0] = sep\n\tcopy(args[1:], lists)\n\treturn JoinFunc.Call(args)\n}\n\n// Sort re-orders the elements of a given list of strings so that they are\n// in ascending lexicographical order.\nfunc Sort(list cty.Value) (cty.Value, error) {\n\treturn SortFunc.Call([]cty.Value{list})\n}\n\n// Split divides a given string by a given separator, returning a list of\n// strings containing the characters between the separator sequences.\nfunc Split(sep, str cty.Value) (cty.Value, error) {\n\treturn SplitFunc.Call([]cty.Value{sep, str})\n}\n\n// Chomp removes newline characters at the end of a string.\nfunc Chomp(str cty.Value) (cty.Value, error) {\n\treturn ChompFunc.Call([]cty.Value{str})\n}\n\n// Indent adds a given number of spaces to the beginnings of all but the first\n// line in a given multi-line string.\nfunc Indent(spaces, str cty.Value) (cty.Value, error) {\n\treturn IndentFunc.Call([]cty.Value{spaces, str})\n}\n\n// Replace searches a given string for another given substring,\n// and replaces all occurences with a given replacement string.\nfunc Replace(str, substr, replace cty.Value) (cty.Value, error) {\n\treturn ReplaceFunc.Call([]cty.Value{str, substr, replace})\n}\n\n// Title converts the first letter of each word in the given string to uppercase.\nfunc Title(str cty.Value) (cty.Value, error) {\n\treturn TitleFunc.Call([]cty.Value{str})\n}\n\n// TrimSpace removes any space characters from the start and end of the given string.\nfunc TrimSpace(str cty.Value) (cty.Value, error) {\n\treturn TrimSpaceFunc.Call([]cty.Value{str})\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/lang/functions.go",
    "content": "package lang\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/zclconf/go-cty/cty\"\n\t\"github.com/zclconf/go-cty/cty/function\"\n\t\"github.com/zclconf/go-cty/cty/function/stdlib\"\n\n\t\"github.com/hashicorp/terraform/lang/funcs\"\n)\n\nvar impureFunctions = []string{\n\t\"bcrypt\",\n\t\"timestamp\",\n\t\"uuid\",\n}\n\n// Functions returns the set of functions that should be used to when evaluating\n// expressions in the receiving scope.\nfunc (s *Scope) Functions() map[string]function.Function {\n\ts.funcsLock.Lock()\n\tif s.funcs == nil {\n\t\t// Some of our functions are just directly the cty stdlib functions.\n\t\t// Others are implemented in the subdirectory \"funcs\" here in this\n\t\t// repository. New functions should generally start out their lives\n\t\t// in the \"funcs\" directory and potentially graduate to cty stdlib\n\t\t// later if the functionality seems to be something domain-agnostic\n\t\t// that would be useful to all applications using cty functions.\n\n\t\ts.funcs = map[string]function.Function{\n\t\t\t\"abs\":              stdlib.AbsoluteFunc,\n\t\t\t\"basename\":         funcs.BasenameFunc,\n\t\t\t\"base64decode\":     funcs.Base64DecodeFunc,\n\t\t\t\"base64encode\":     funcs.Base64EncodeFunc,\n\t\t\t\"base64gzip\":       funcs.Base64GzipFunc,\n\t\t\t\"base64sha256\":     funcs.Base64Sha256Func,\n\t\t\t\"base64sha512\":     funcs.Base64Sha512Func,\n\t\t\t\"bcrypt\":           funcs.BcryptFunc,\n\t\t\t\"ceil\":             funcs.CeilFunc,\n\t\t\t\"chomp\":            funcs.ChompFunc,\n\t\t\t\"cidrhost\":         funcs.CidrHostFunc,\n\t\t\t\"cidrnetmask\":      funcs.CidrNetmaskFunc,\n\t\t\t\"cidrsubnet\":       funcs.CidrSubnetFunc,\n\t\t\t\"coalesce\":         funcs.CoalesceFunc,\n\t\t\t\"coalescelist\":     funcs.CoalesceListFunc,\n\t\t\t\"compact\":          funcs.CompactFunc,\n\t\t\t\"concat\":           stdlib.ConcatFunc,\n\t\t\t\"contains\":         funcs.ContainsFunc,\n\t\t\t\"csvdecode\":        stdlib.CSVDecodeFunc,\n\t\t\t\"dirname\":          funcs.DirnameFunc,\n\t\t\t\"distinct\":         funcs.DistinctFunc,\n\t\t\t\"element\":          funcs.ElementFunc,\n\t\t\t\"chunklist\":        funcs.ChunklistFunc,\n\t\t\t\"file\":             funcs.MakeFileFunc(s.BaseDir, false),\n\t\t\t\"fileexists\":       funcs.MakeFileExistsFunc(s.BaseDir),\n\t\t\t\"filebase64\":       funcs.MakeFileFunc(s.BaseDir, true),\n\t\t\t\"filebase64sha256\": funcs.MakeFileBase64Sha256Func(s.BaseDir),\n\t\t\t\"filebase64sha512\": funcs.MakeFileBase64Sha512Func(s.BaseDir),\n\t\t\t\"filemd5\":          funcs.MakeFileMd5Func(s.BaseDir),\n\t\t\t\"filesha1\":         funcs.MakeFileSha1Func(s.BaseDir),\n\t\t\t\"filesha256\":       funcs.MakeFileSha256Func(s.BaseDir),\n\t\t\t\"filesha512\":       funcs.MakeFileSha512Func(s.BaseDir),\n\t\t\t\"flatten\":          funcs.FlattenFunc,\n\t\t\t\"floor\":            funcs.FloorFunc,\n\t\t\t\"format\":           stdlib.FormatFunc,\n\t\t\t\"formatdate\":       stdlib.FormatDateFunc,\n\t\t\t\"formatlist\":       stdlib.FormatListFunc,\n\t\t\t\"indent\":           funcs.IndentFunc,\n\t\t\t\"index\":            funcs.IndexFunc,\n\t\t\t\"join\":             funcs.JoinFunc,\n\t\t\t\"jsondecode\":       stdlib.JSONDecodeFunc,\n\t\t\t\"jsonencode\":       stdlib.JSONEncodeFunc,\n\t\t\t\"keys\":             funcs.KeysFunc,\n\t\t\t\"length\":           funcs.LengthFunc,\n\t\t\t\"list\":             funcs.ListFunc,\n\t\t\t\"log\":              funcs.LogFunc,\n\t\t\t\"lookup\":           funcs.LookupFunc,\n\t\t\t\"lower\":            stdlib.LowerFunc,\n\t\t\t\"map\":              funcs.MapFunc,\n\t\t\t\"matchkeys\":        funcs.MatchkeysFunc,\n\t\t\t\"max\":              stdlib.MaxFunc,\n\t\t\t\"md5\":              funcs.Md5Func,\n\t\t\t\"merge\":            funcs.MergeFunc,\n\t\t\t\"min\":              stdlib.MinFunc,\n\t\t\t\"pathexpand\":       funcs.PathExpandFunc,\n\t\t\t\"pow\":              funcs.PowFunc,\n\t\t\t\"replace\":          funcs.ReplaceFunc,\n\t\t\t\"reverse\":          funcs.ReverseFunc,\n\t\t\t\"rsadecrypt\":       funcs.RsaDecryptFunc,\n\t\t\t\"setintersection\":  stdlib.SetIntersectionFunc,\n\t\t\t\"setproduct\":       funcs.SetProductFunc,\n\t\t\t\"setunion\":         stdlib.SetUnionFunc,\n\t\t\t\"sha1\":             funcs.Sha1Func,\n\t\t\t\"sha256\":           funcs.Sha256Func,\n\t\t\t\"sha512\":           funcs.Sha512Func,\n\t\t\t\"signum\":           funcs.SignumFunc,\n\t\t\t\"slice\":            funcs.SliceFunc,\n\t\t\t\"sort\":             funcs.SortFunc,\n\t\t\t\"split\":            funcs.SplitFunc,\n\t\t\t\"strrev\":           stdlib.ReverseFunc,\n\t\t\t\"substr\":           stdlib.SubstrFunc,\n\t\t\t\"timestamp\":        funcs.TimestampFunc,\n\t\t\t\"timeadd\":          funcs.TimeAddFunc,\n\t\t\t\"title\":            funcs.TitleFunc,\n\t\t\t\"tostring\":         funcs.MakeToFunc(cty.String),\n\t\t\t\"tonumber\":         funcs.MakeToFunc(cty.Number),\n\t\t\t\"tobool\":           funcs.MakeToFunc(cty.Bool),\n\t\t\t\"toset\":            funcs.MakeToFunc(cty.Set(cty.DynamicPseudoType)),\n\t\t\t\"tolist\":           funcs.MakeToFunc(cty.List(cty.DynamicPseudoType)),\n\t\t\t\"tomap\":            funcs.MakeToFunc(cty.Map(cty.DynamicPseudoType)),\n\t\t\t\"transpose\":        funcs.TransposeFunc,\n\t\t\t\"trimspace\":        funcs.TrimSpaceFunc,\n\t\t\t\"upper\":            stdlib.UpperFunc,\n\t\t\t\"urlencode\":        funcs.URLEncodeFunc,\n\t\t\t\"uuid\":             funcs.UUIDFunc,\n\t\t\t\"values\":           funcs.ValuesFunc,\n\t\t\t\"zipmap\":           funcs.ZipmapFunc,\n\t\t}\n\n\t\ts.funcs[\"templatefile\"] = funcs.MakeTemplateFileFunc(s.BaseDir, func() map[string]function.Function {\n\t\t\t// The templatefile function prevents recursive calls to itself\n\t\t\t// by copying this map and overwriting the \"templatefile\" entry.\n\t\t\treturn s.funcs\n\t\t})\n\n\t\tif s.PureOnly {\n\t\t\t// Force our few impure functions to return unknown so that we\n\t\t\t// can defer evaluating them until a later pass.\n\t\t\tfor _, name := range impureFunctions {\n\t\t\t\ts.funcs[name] = function.Unpredictable(s.funcs[name])\n\t\t\t}\n\t\t}\n\t}\n\ts.funcsLock.Unlock()\n\n\treturn s.funcs\n}\n\nvar unimplFunc = function.New(&function.Spec{\n\tType: func([]cty.Value) (cty.Type, error) {\n\t\treturn cty.DynamicPseudoType, fmt.Errorf(\"function not yet implemented\")\n\t},\n\tImpl: func([]cty.Value, cty.Type) (cty.Value, error) {\n\t\treturn cty.DynamicVal, fmt.Errorf(\"function not yet implemented\")\n\t},\n})\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/lang/references.go",
    "content": "package lang\n\nimport (\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/configs/configschema\"\n\t\"github.com/hashicorp/terraform/lang/blocktoattr\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n)\n\n// References finds all of the references in the given set of traversals,\n// returning diagnostics if any of the traversals cannot be interpreted as a\n// reference.\n//\n// This function does not do any de-duplication of references, since references\n// have source location information embedded in them and so any invalid\n// references that are duplicated should have errors reported for each\n// occurence.\n//\n// If the returned diagnostics contains errors then the result may be\n// incomplete or invalid. Otherwise, the returned slice has one reference per\n// given traversal, though it is not guaranteed that the references will\n// appear in the same order as the given traversals.\nfunc References(traversals []hcl.Traversal) ([]*addrs.Reference, tfdiags.Diagnostics) {\n\tif len(traversals) == 0 {\n\t\treturn nil, nil\n\t}\n\n\tvar diags tfdiags.Diagnostics\n\trefs := make([]*addrs.Reference, 0, len(traversals))\n\n\tfor _, traversal := range traversals {\n\t\tref, refDiags := addrs.ParseRef(traversal)\n\t\tdiags = diags.Append(refDiags)\n\t\tif ref == nil {\n\t\t\tcontinue\n\t\t}\n\t\trefs = append(refs, ref)\n\t}\n\n\treturn refs, diags\n}\n\n// ReferencesInBlock is a helper wrapper around References that first searches\n// the given body for traversals, before converting those traversals to\n// references.\n//\n// A block schema must be provided so that this function can determine where in\n// the body variables are expected.\nfunc ReferencesInBlock(body hcl.Body, schema *configschema.Block) ([]*addrs.Reference, tfdiags.Diagnostics) {\n\tif body == nil {\n\t\treturn nil, nil\n\t}\n\n\t// We use blocktoattr.ExpandedVariables instead of hcldec.Variables or\n\t// dynblock.VariablesHCLDec here because when we evaluate a block we'll\n\t// first apply the dynamic block extension and _then_ the blocktoattr\n\t// transform, and so blocktoattr.ExpandedVariables takes into account\n\t// both of those transforms when it analyzes the body to ensure we find\n\t// all of the references as if they'd already moved into their final\n\t// locations, even though we can't expand dynamic blocks yet until we\n\t// already know which variables are required.\n\t//\n\t// The set of cases we want to detect here is covered by the tests for\n\t// the plan graph builder in the main 'terraform' package, since it's\n\t// in a better position to test this due to having mock providers etc\n\t// available.\n\ttraversals := blocktoattr.ExpandedVariables(body, schema)\n\treturn References(traversals)\n}\n\n// ReferencesInExpr is a helper wrapper around References that first searches\n// the given expression for traversals, before converting those traversals\n// to references.\nfunc ReferencesInExpr(expr hcl.Expression) ([]*addrs.Reference, tfdiags.Diagnostics) {\n\tif expr == nil {\n\t\treturn nil, nil\n\t}\n\ttraversals := expr.Variables()\n\treturn References(traversals)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/lang/scope.go",
    "content": "package lang\n\nimport (\n\t\"sync\"\n\n\t\"github.com/zclconf/go-cty/cty/function\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n)\n\n// Scope is the main type in this package, allowing dynamic evaluation of\n// blocks and expressions based on some contextual information that informs\n// which variables and functions will be available.\ntype Scope struct {\n\t// Data is used to resolve references in expressions.\n\tData Data\n\n\t// SelfAddr is the address that the \"self\" object should be an alias of,\n\t// or nil if the \"self\" object should not be available at all.\n\tSelfAddr addrs.Referenceable\n\n\t// BaseDir is the base directory used by any interpolation functions that\n\t// accept filesystem paths as arguments.\n\tBaseDir string\n\n\t// PureOnly can be set to true to request that any non-pure functions\n\t// produce unknown value results rather than actually executing. This is\n\t// important during a plan phase to avoid generating results that could\n\t// then differ during apply.\n\tPureOnly bool\n\n\tfuncs     map[string]function.Function\n\tfuncsLock sync.Mutex\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/moduledeps/dependencies.go",
    "content": "package moduledeps\n\nimport (\n\t\"github.com/hashicorp/terraform/plugin/discovery\"\n)\n\n// Providers describes a set of provider dependencies for a given module.\n//\n// Each named provider instance can have one version constraint.\ntype Providers map[ProviderInstance]ProviderDependency\n\n// ProviderDependency describes the dependency for a particular provider\n// instance, including both the set of allowed versions and the reason for\n// the dependency.\ntype ProviderDependency struct {\n\tConstraints discovery.Constraints\n\tReason      ProviderDependencyReason\n}\n\n// ProviderDependencyReason is an enumeration of reasons why a dependency might be\n// present.\ntype ProviderDependencyReason int\n\nconst (\n\t// ProviderDependencyExplicit means that there is an explicit \"provider\"\n\t// block in the configuration for this module.\n\tProviderDependencyExplicit ProviderDependencyReason = iota\n\n\t// ProviderDependencyImplicit means that there is no explicit \"provider\"\n\t// block but there is at least one resource that uses this provider.\n\tProviderDependencyImplicit\n\n\t// ProviderDependencyInherited is a special case of\n\t// ProviderDependencyImplicit where a parent module has defined a\n\t// configuration for the provider that has been inherited by at least one\n\t// resource in this module.\n\tProviderDependencyInherited\n\n\t// ProviderDependencyFromState means that this provider is not currently\n\t// referenced by configuration at all, but some existing instances in\n\t// the state still depend on it.\n\tProviderDependencyFromState\n)\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/moduledeps/doc.go",
    "content": "// Package moduledeps contains types that can be used to describe the\n// providers required for all of the modules in a module tree.\n//\n// It does not itself contain the functionality for populating such\n// data structures; that's in Terraform core, since this package intentionally\n// does not depend on terraform core to avoid package dependency cycles.\npackage moduledeps\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/moduledeps/module.go",
    "content": "package moduledeps\n\nimport (\n\t\"sort\"\n\t\"strings\"\n\n\t\"github.com/hashicorp/terraform/plugin/discovery\"\n)\n\n// Module represents the dependencies of a single module, as well being\n// a node in a tree of such structures representing the dependencies of\n// an entire configuration.\ntype Module struct {\n\tName      string\n\tProviders Providers\n\tChildren  []*Module\n}\n\n// WalkFunc is a callback type for use with Module.WalkTree\ntype WalkFunc func(path []string, parent *Module, current *Module) error\n\n// WalkTree calls the given callback once for the receiver and then\n// once for each descendent, in an order such that parents are called\n// before their children and siblings are called in the order they\n// appear in the Children slice.\n//\n// When calling the callback, parent will be nil for the first call\n// for the receiving module, and then set to the direct parent of\n// each module for the subsequent calls.\n//\n// The path given to the callback is valid only until the callback\n// returns, after which it will be mutated and reused. Callbacks must\n// therefore copy the path slice if they wish to retain it.\n//\n// If the given callback returns an error, the walk will be aborted at\n// that point and that error returned to the caller.\n//\n// This function is not thread-safe for concurrent modifications of the\n// data structure, so it's the caller's responsibility to arrange for that\n// should it be needed.\n//\n// It is safe for a callback to modify the descendents of the \"current\"\n// module, including the ordering of the Children slice itself, but the\n// callback MUST NOT modify the parent module.\nfunc (m *Module) WalkTree(cb WalkFunc) error {\n\treturn walkModuleTree(make([]string, 0, 1), nil, m, cb)\n}\n\nfunc walkModuleTree(path []string, parent *Module, current *Module, cb WalkFunc) error {\n\tpath = append(path, current.Name)\n\terr := cb(path, parent, current)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfor _, child := range current.Children {\n\t\terr := walkModuleTree(path, current, child, cb)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// SortChildren sorts the Children slice into lexicographic order by\n// name, in-place.\n//\n// This is primarily useful prior to calling WalkTree so that the walk\n// will proceed in a consistent order.\nfunc (m *Module) SortChildren() {\n\tsort.Sort(sortModules{m.Children})\n}\n\n// SortDescendents is a convenience wrapper for calling SortChildren on\n// the receiver and all of its descendent modules.\nfunc (m *Module) SortDescendents() {\n\tm.WalkTree(func(path []string, parent *Module, current *Module) error {\n\t\tcurrent.SortChildren()\n\t\treturn nil\n\t})\n}\n\ntype sortModules struct {\n\tmodules []*Module\n}\n\nfunc (s sortModules) Len() int {\n\treturn len(s.modules)\n}\n\nfunc (s sortModules) Less(i, j int) bool {\n\tcmp := strings.Compare(s.modules[i].Name, s.modules[j].Name)\n\treturn cmp < 0\n}\n\nfunc (s sortModules) Swap(i, j int) {\n\ts.modules[i], s.modules[j] = s.modules[j], s.modules[i]\n}\n\n// PluginRequirements produces a PluginRequirements structure that can\n// be used with discovery.PluginMetaSet.ConstrainVersions to identify\n// suitable plugins to satisfy the module's provider dependencies.\n//\n// This method only considers the direct requirements of the receiver.\n// Use AllPluginRequirements to flatten the dependencies for the\n// entire tree of modules.\n//\n// Requirements returned by this method include only version constraints,\n// and apply no particular SHA256 hash constraint.\nfunc (m *Module) PluginRequirements() discovery.PluginRequirements {\n\tret := make(discovery.PluginRequirements)\n\tfor inst, dep := range m.Providers {\n\t\t// m.Providers is keyed on provider names, such as \"aws.foo\".\n\t\t// a PluginRequirements wants keys to be provider *types*, such\n\t\t// as \"aws\". If there are multiple aliases for the same\n\t\t// provider then we will flatten them into a single requirement\n\t\t// by combining their constraint sets.\n\t\tpty := inst.Type()\n\t\tif existing, exists := ret[pty]; exists {\n\t\t\tret[pty].Versions = existing.Versions.Append(dep.Constraints)\n\t\t} else {\n\t\t\tret[pty] = &discovery.PluginConstraints{\n\t\t\t\tVersions: dep.Constraints,\n\t\t\t}\n\t\t}\n\t}\n\treturn ret\n}\n\n// AllPluginRequirements calls PluginRequirements for the receiver and all\n// of its descendents, and merges the result into a single PluginRequirements\n// structure that would satisfy all of the modules together.\n//\n// Requirements returned by this method include only version constraints,\n// and apply no particular SHA256 hash constraint.\nfunc (m *Module) AllPluginRequirements() discovery.PluginRequirements {\n\tvar ret discovery.PluginRequirements\n\tm.WalkTree(func(path []string, parent *Module, current *Module) error {\n\t\tret = ret.Merge(current.PluginRequirements())\n\t\treturn nil\n\t})\n\treturn ret\n}\n\n// Equal returns true if the receiver is the root of an identical tree\n// to the other given Module. This is a deep comparison that considers\n// the equality of all downstream modules too.\n//\n// The children are considered to be ordered, so callers may wish to use\n// SortDescendents first to normalize the order of the slices of child nodes.\n//\n// The implementation of this function is not optimized since it is provided\n// primarily for use in tests.\nfunc (m *Module) Equal(other *Module) bool {\n\t// take care of nils first\n\tif m == nil && other == nil {\n\t\treturn true\n\t} else if (m == nil && other != nil) || (m != nil && other == nil) {\n\t\treturn false\n\t}\n\n\tif m.Name != other.Name {\n\t\treturn false\n\t}\n\n\tif len(m.Providers) != len(other.Providers) {\n\t\treturn false\n\t}\n\tif len(m.Children) != len(other.Children) {\n\t\treturn false\n\t}\n\n\t// Can't use reflect.DeepEqual on this provider structure because\n\t// the nested Constraints objects contain function pointers that\n\t// never compare as equal. So we'll need to walk it the long way.\n\tfor inst, dep := range m.Providers {\n\t\tif _, exists := other.Providers[inst]; !exists {\n\t\t\treturn false\n\t\t}\n\n\t\tif dep.Reason != other.Providers[inst].Reason {\n\t\t\treturn false\n\t\t}\n\n\t\t// Constraints are not too easy to compare robustly, so\n\t\t// we'll just use their string representations as a proxy\n\t\t// for now.\n\t\tif dep.Constraints.String() != other.Providers[inst].Constraints.String() {\n\t\t\treturn false\n\t\t}\n\t}\n\n\t// Above we already checked that we have the same number of children\n\t// in each module, so now we just need to check that they are\n\t// recursively equal.\n\tfor i := range m.Children {\n\t\tif !m.Children[i].Equal(other.Children[i]) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\t// If we fall out here then they are equal\n\treturn true\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/moduledeps/provider.go",
    "content": "package moduledeps\n\nimport (\n\t\"strings\"\n)\n\n// ProviderInstance describes a particular provider instance by its full name,\n// like \"null\" or \"aws.foo\".\ntype ProviderInstance string\n\n// Type returns the provider type of this instance. For example, for an instance\n// named \"aws.foo\" the type is \"aws\".\nfunc (p ProviderInstance) Type() string {\n\tt := string(p)\n\tif dotPos := strings.Index(t, \".\"); dotPos != -1 {\n\t\tt = t[:dotPos]\n\t}\n\treturn t\n}\n\n// Alias returns the alias of this provider, if any. An instance named \"aws.foo\"\n// has the alias \"foo\", while an instance named just \"docker\" has no alias,\n// so the empty string would be returned.\nfunc (p ProviderInstance) Alias() string {\n\tt := string(p)\n\tif dotPos := strings.Index(t, \".\"); dotPos != -1 {\n\t\treturn t[dotPos+1:]\n\t}\n\treturn \"\"\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/plans/action.go",
    "content": "package plans\n\ntype Action rune\n\nconst (\n\tNoOp             Action = 0\n\tCreate           Action = '+'\n\tRead             Action = '←'\n\tUpdate           Action = '~'\n\tDeleteThenCreate Action = '∓'\n\tCreateThenDelete Action = '±'\n\tDelete           Action = '-'\n)\n\n//go:generate stringer -type Action\n\n// IsReplace returns true if the action is one of the two actions that\n// represents replacing an existing object with a new object:\n// DeleteThenCreate or CreateThenDelete.\nfunc (a Action) IsReplace() bool {\n\treturn a == DeleteThenCreate || a == CreateThenDelete\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/plans/action_string.go",
    "content": "// Code generated by \"stringer -type Action\"; DO NOT EDIT.\n\npackage plans\n\nimport \"strconv\"\n\nfunc _() {\n\t// An \"invalid array index\" compiler error signifies that the constant values have changed.\n\t// Re-run the stringer command to generate them again.\n\tvar x [1]struct{}\n\t_ = x[NoOp-0]\n\t_ = x[Create-43]\n\t_ = x[Read-8592]\n\t_ = x[Update-126]\n\t_ = x[DeleteThenCreate-8723]\n\t_ = x[CreateThenDelete-177]\n\t_ = x[Delete-45]\n}\n\nconst (\n\t_Action_name_0 = \"NoOp\"\n\t_Action_name_1 = \"Create\"\n\t_Action_name_2 = \"Delete\"\n\t_Action_name_3 = \"Update\"\n\t_Action_name_4 = \"CreateThenDelete\"\n\t_Action_name_5 = \"Read\"\n\t_Action_name_6 = \"DeleteThenCreate\"\n)\n\nfunc (i Action) String() string {\n\tswitch {\n\tcase i == 0:\n\t\treturn _Action_name_0\n\tcase i == 43:\n\t\treturn _Action_name_1\n\tcase i == 45:\n\t\treturn _Action_name_2\n\tcase i == 126:\n\t\treturn _Action_name_3\n\tcase i == 177:\n\t\treturn _Action_name_4\n\tcase i == 8592:\n\t\treturn _Action_name_5\n\tcase i == 8723:\n\t\treturn _Action_name_6\n\tdefault:\n\t\treturn \"Action(\" + strconv.FormatInt(int64(i), 10) + \")\"\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/plans/changes.go",
    "content": "package plans\n\nimport (\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/states\"\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// Changes describes various actions that Terraform will attempt to take if\n// the corresponding plan is applied.\n//\n// A Changes object can be rendered into a visual diff (by the caller, using\n// code in another package) for display to the user.\ntype Changes struct {\n\t// Resources tracks planned changes to resource instance objects.\n\tResources []*ResourceInstanceChangeSrc\n\n\t// Outputs tracks planned changes output values.\n\t//\n\t// Note that although an in-memory plan contains planned changes for\n\t// outputs throughout the configuration, a plan serialized\n\t// to disk retains only the root outputs because they are\n\t// externally-visible, while other outputs are implementation details and\n\t// can be easily re-calculated during the apply phase. Therefore only root\n\t// module outputs will survive a round-trip through a plan file.\n\tOutputs []*OutputChangeSrc\n}\n\n// NewChanges returns a valid Changes object that describes no changes.\nfunc NewChanges() *Changes {\n\treturn &Changes{}\n}\n\nfunc (c *Changes) Empty() bool {\n\tfor _, res := range c.Resources {\n\t\tif res.Action != NoOp {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\n// ResourceInstance returns the planned change for the current object of the\n// resource instance of the given address, if any. Returns nil if no change is\n// planned.\nfunc (c *Changes) ResourceInstance(addr addrs.AbsResourceInstance) *ResourceInstanceChangeSrc {\n\taddrStr := addr.String()\n\tfor _, rc := range c.Resources {\n\t\tif rc.Addr.String() == addrStr && rc.DeposedKey == states.NotDeposed {\n\t\t\treturn rc\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// ResourceInstanceDeposed returns the plan change of a deposed object of\n// the resource instance of the given address, if any. Returns nil if no change\n// is planned.\nfunc (c *Changes) ResourceInstanceDeposed(addr addrs.AbsResourceInstance, key states.DeposedKey) *ResourceInstanceChangeSrc {\n\taddrStr := addr.String()\n\tfor _, rc := range c.Resources {\n\t\tif rc.Addr.String() == addrStr && rc.DeposedKey == key {\n\t\t\treturn rc\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// OutputValue returns the planned change for the output value with the\n//  given address, if any. Returns nil if no change is planned.\nfunc (c *Changes) OutputValue(addr addrs.AbsOutputValue) *OutputChangeSrc {\n\taddrStr := addr.String()\n\tfor _, oc := range c.Outputs {\n\t\tif oc.Addr.String() == addrStr {\n\t\t\treturn oc\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// SyncWrapper returns a wrapper object around the receiver that can be used\n// to make certain changes to the receiver in a concurrency-safe way, as long\n// as all callers share the same wrapper object.\nfunc (c *Changes) SyncWrapper() *ChangesSync {\n\treturn &ChangesSync{\n\t\tchanges: c,\n\t}\n}\n\n// ResourceInstanceChange describes a change to a particular resource instance\n// object.\ntype ResourceInstanceChange struct {\n\t// Addr is the absolute address of the resource instance that the change\n\t// will apply to.\n\tAddr addrs.AbsResourceInstance\n\n\t// DeposedKey is the identifier for a deposed object associated with the\n\t// given instance, or states.NotDeposed if this change applies to the\n\t// current object.\n\t//\n\t// A Replace change for a resource with create_before_destroy set will\n\t// create a new DeposedKey temporarily during replacement. In that case,\n\t// DeposedKey in the plan is always states.NotDeposed, representing that\n\t// the current object is being replaced with the deposed.\n\tDeposedKey states.DeposedKey\n\n\t// Provider is the address of the provider configuration that was used\n\t// to plan this change, and thus the configuration that must also be\n\t// used to apply it.\n\tProviderAddr addrs.AbsProviderConfig\n\n\t// Change is an embedded description of the change.\n\tChange\n\n\t// RequiredReplace is a set of paths that caused the change action to be\n\t// Replace rather than Update. Always nil if the change action is not\n\t// Replace.\n\t//\n\t// This is retained only for UI-plan-rendering purposes and so it does not\n\t// currently survive a round-trip through a saved plan file.\n\tRequiredReplace cty.PathSet\n\n\t// Private allows a provider to stash any extra data that is opaque to\n\t// Terraform that relates to this change. Terraform will save this\n\t// byte-for-byte and return it to the provider in the apply call.\n\tPrivate []byte\n}\n\n// Encode produces a variant of the reciever that has its change values\n// serialized so it can be written to a plan file. Pass the implied type of the\n// corresponding resource type schema for correct operation.\nfunc (rc *ResourceInstanceChange) Encode(ty cty.Type) (*ResourceInstanceChangeSrc, error) {\n\tcs, err := rc.Change.Encode(ty)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &ResourceInstanceChangeSrc{\n\t\tAddr:            rc.Addr,\n\t\tDeposedKey:      rc.DeposedKey,\n\t\tProviderAddr:    rc.ProviderAddr,\n\t\tChangeSrc:       *cs,\n\t\tRequiredReplace: rc.RequiredReplace,\n\t\tPrivate:         rc.Private,\n\t}, err\n}\n\n// Simplify will, where possible, produce a change with a simpler action than\n// the receiever given a flag indicating whether the caller is dealing with\n// a normal apply or a destroy. This flag deals with the fact that Terraform\n// Core uses a specialized graph node type for destroying; only that\n// specialized node should set \"destroying\" to true.\n//\n// The following table shows the simplification behavior:\n//\n//     Action    Destroying?   New Action\n//     --------+-------------+-----------\n//     Create    true          NoOp\n//     Delete    false         NoOp\n//     Replace   true          Delete\n//     Replace   false         Create\n//\n// For any combination not in the above table, the Simplify just returns the\n// receiver as-is.\nfunc (rc *ResourceInstanceChange) Simplify(destroying bool) *ResourceInstanceChange {\n\tif destroying {\n\t\tswitch rc.Action {\n\t\tcase Delete:\n\t\t\t// We'll fall out and just return rc verbatim, then.\n\t\tcase CreateThenDelete, DeleteThenCreate:\n\t\t\treturn &ResourceInstanceChange{\n\t\t\t\tAddr:         rc.Addr,\n\t\t\t\tDeposedKey:   rc.DeposedKey,\n\t\t\t\tPrivate:      rc.Private,\n\t\t\t\tProviderAddr: rc.ProviderAddr,\n\t\t\t\tChange: Change{\n\t\t\t\t\tAction: Delete,\n\t\t\t\t\tBefore: rc.Before,\n\t\t\t\t\tAfter:  cty.NullVal(rc.Before.Type()),\n\t\t\t\t},\n\t\t\t}\n\t\tdefault:\n\t\t\treturn &ResourceInstanceChange{\n\t\t\t\tAddr:         rc.Addr,\n\t\t\t\tDeposedKey:   rc.DeposedKey,\n\t\t\t\tPrivate:      rc.Private,\n\t\t\t\tProviderAddr: rc.ProviderAddr,\n\t\t\t\tChange: Change{\n\t\t\t\t\tAction: NoOp,\n\t\t\t\t\tBefore: rc.Before,\n\t\t\t\t\tAfter:  rc.Before,\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\t} else {\n\t\tswitch rc.Action {\n\t\tcase Delete:\n\t\t\treturn &ResourceInstanceChange{\n\t\t\t\tAddr:         rc.Addr,\n\t\t\t\tDeposedKey:   rc.DeposedKey,\n\t\t\t\tPrivate:      rc.Private,\n\t\t\t\tProviderAddr: rc.ProviderAddr,\n\t\t\t\tChange: Change{\n\t\t\t\t\tAction: NoOp,\n\t\t\t\t\tBefore: rc.Before,\n\t\t\t\t\tAfter:  rc.Before,\n\t\t\t\t},\n\t\t\t}\n\t\tcase CreateThenDelete, DeleteThenCreate:\n\t\t\treturn &ResourceInstanceChange{\n\t\t\t\tAddr:         rc.Addr,\n\t\t\t\tDeposedKey:   rc.DeposedKey,\n\t\t\t\tPrivate:      rc.Private,\n\t\t\t\tProviderAddr: rc.ProviderAddr,\n\t\t\t\tChange: Change{\n\t\t\t\t\tAction: Create,\n\t\t\t\t\tBefore: cty.NullVal(rc.After.Type()),\n\t\t\t\t\tAfter:  rc.After,\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\t}\n\n\t// If we fall out here then our change is already simple enough.\n\treturn rc\n}\n\n// OutputChange describes a change to an output value.\ntype OutputChange struct {\n\t// Addr is the absolute address of the output value that the change\n\t// will apply to.\n\tAddr addrs.AbsOutputValue\n\n\t// Change is an embedded description of the change.\n\t//\n\t// For output value changes, the type constraint for the DynamicValue\n\t// instances is always cty.DynamicPseudoType.\n\tChange\n\n\t// Sensitive, if true, indicates that either the old or new value in the\n\t// change is sensitive and so a rendered version of the plan in the UI\n\t// should elide the actual values while still indicating the action of the\n\t// change.\n\tSensitive bool\n}\n\n// Encode produces a variant of the reciever that has its change values\n// serialized so it can be written to a plan file.\nfunc (oc *OutputChange) Encode() (*OutputChangeSrc, error) {\n\tcs, err := oc.Change.Encode(cty.DynamicPseudoType)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &OutputChangeSrc{\n\t\tAddr:      oc.Addr,\n\t\tChangeSrc: *cs,\n\t\tSensitive: oc.Sensitive,\n\t}, err\n}\n\n// Change describes a single change with a given action.\ntype Change struct {\n\t// Action defines what kind of change is being made.\n\tAction Action\n\n\t// Interpretation of Before and After depend on Action:\n\t//\n\t//     NoOp     Before and After are the same, unchanged value\n\t//     Create   Before is nil, and After is the expected value after create.\n\t//     Read     Before is any prior value (nil if no prior), and After is the\n\t//              value that was or will be read.\n\t//     Update   Before is the value prior to update, and After is the expected\n\t//              value after update.\n\t//     Replace  As with Update.\n\t//     Delete   Before is the value prior to delete, and After is always nil.\n\t//\n\t// Unknown values may appear anywhere within the Before and After values,\n\t// either as the values themselves or as nested elements within known\n\t// collections/structures.\n\tBefore, After cty.Value\n}\n\n// Encode produces a variant of the reciever that has its change values\n// serialized so it can be written to a plan file. Pass the type constraint\n// that the values are expected to conform to; to properly decode the values\n// later an identical type constraint must be provided at that time.\n//\n// Where a Change is embedded in some other struct, it's generally better\n// to call the corresponding Encode method of that struct rather than working\n// directly with its embedded Change.\nfunc (c *Change) Encode(ty cty.Type) (*ChangeSrc, error) {\n\tbeforeDV, err := NewDynamicValue(c.Before, ty)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tafterDV, err := NewDynamicValue(c.After, ty)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &ChangeSrc{\n\t\tAction: c.Action,\n\t\tBefore: beforeDV,\n\t\tAfter:  afterDV,\n\t}, nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/plans/changes_src.go",
    "content": "package plans\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/states\"\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// ResourceInstanceChangeSrc is a not-yet-decoded ResourceInstanceChange.\n// Pass the associated resource type's schema type to method Decode to\n// obtain a ResourceInstancChange.\ntype ResourceInstanceChangeSrc struct {\n\t// Addr is the absolute address of the resource instance that the change\n\t// will apply to.\n\tAddr addrs.AbsResourceInstance\n\n\t// DeposedKey is the identifier for a deposed object associated with the\n\t// given instance, or states.NotDeposed if this change applies to the\n\t// current object.\n\t//\n\t// A Replace change for a resource with create_before_destroy set will\n\t// create a new DeposedKey temporarily during replacement. In that case,\n\t// DeposedKey in the plan is always states.NotDeposed, representing that\n\t// the current object is being replaced with the deposed.\n\tDeposedKey states.DeposedKey\n\n\t// Provider is the address of the provider configuration that was used\n\t// to plan this change, and thus the configuration that must also be\n\t// used to apply it.\n\tProviderAddr addrs.AbsProviderConfig\n\n\t// ChangeSrc is an embedded description of the not-yet-decoded change.\n\tChangeSrc\n\n\t// RequiredReplace is a set of paths that caused the change action to be\n\t// Replace rather than Update. Always nil if the change action is not\n\t// Replace.\n\t//\n\t// This is retained only for UI-plan-rendering purposes and so it does not\n\t// currently survive a round-trip through a saved plan file.\n\tRequiredReplace cty.PathSet\n\n\t// Private allows a provider to stash any extra data that is opaque to\n\t// Terraform that relates to this change. Terraform will save this\n\t// byte-for-byte and return it to the provider in the apply call.\n\tPrivate []byte\n}\n\n// Decode unmarshals the raw representation of the instance object being\n// changed. Pass the implied type of the corresponding resource type schema\n// for correct operation.\nfunc (rcs *ResourceInstanceChangeSrc) Decode(ty cty.Type) (*ResourceInstanceChange, error) {\n\tchange, err := rcs.ChangeSrc.Decode(ty)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &ResourceInstanceChange{\n\t\tAddr:            rcs.Addr,\n\t\tDeposedKey:      rcs.DeposedKey,\n\t\tProviderAddr:    rcs.ProviderAddr,\n\t\tChange:          *change,\n\t\tRequiredReplace: rcs.RequiredReplace,\n\t\tPrivate:         rcs.Private,\n\t}, nil\n}\n\n// DeepCopy creates a copy of the receiver where any pointers to nested mutable\n// values are also copied, thus ensuring that future mutations of the receiver\n// will not affect the copy.\n//\n// Some types used within a resource change are immutable by convention even\n// though the Go language allows them to be mutated, such as the types from\n// the addrs package. These are _not_ copied by this method, under the\n// assumption that callers will behave themselves.\nfunc (rcs *ResourceInstanceChangeSrc) DeepCopy() *ResourceInstanceChangeSrc {\n\tif rcs == nil {\n\t\treturn nil\n\t}\n\tret := *rcs\n\n\tret.RequiredReplace = cty.NewPathSet(ret.RequiredReplace.List()...)\n\n\tif len(ret.Private) != 0 {\n\t\tprivate := make([]byte, len(ret.Private))\n\t\tcopy(private, ret.Private)\n\t\tret.Private = private\n\t}\n\n\tret.ChangeSrc.Before = ret.ChangeSrc.Before.Copy()\n\tret.ChangeSrc.After = ret.ChangeSrc.After.Copy()\n\n\treturn &ret\n}\n\n// OutputChangeSrc describes a change to an output value.\ntype OutputChangeSrc struct {\n\t// Addr is the absolute address of the output value that the change\n\t// will apply to.\n\tAddr addrs.AbsOutputValue\n\n\t// ChangeSrc is an embedded description of the not-yet-decoded change.\n\t//\n\t// For output value changes, the type constraint for the DynamicValue\n\t// instances is always cty.DynamicPseudoType.\n\tChangeSrc\n\n\t// Sensitive, if true, indicates that either the old or new value in the\n\t// change is sensitive and so a rendered version of the plan in the UI\n\t// should elide the actual values while still indicating the action of the\n\t// change.\n\tSensitive bool\n}\n\n// Decode unmarshals the raw representation of the output value being\n// changed.\nfunc (ocs *OutputChangeSrc) Decode() (*OutputChange, error) {\n\tchange, err := ocs.ChangeSrc.Decode(cty.DynamicPseudoType)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &OutputChange{\n\t\tAddr:      ocs.Addr,\n\t\tChange:    *change,\n\t\tSensitive: ocs.Sensitive,\n\t}, nil\n}\n\n// DeepCopy creates a copy of the receiver where any pointers to nested mutable\n// values are also copied, thus ensuring that future mutations of the receiver\n// will not affect the copy.\n//\n// Some types used within a resource change are immutable by convention even\n// though the Go language allows them to be mutated, such as the types from\n// the addrs package. These are _not_ copied by this method, under the\n// assumption that callers will behave themselves.\nfunc (ocs *OutputChangeSrc) DeepCopy() *OutputChangeSrc {\n\tif ocs == nil {\n\t\treturn nil\n\t}\n\tret := *ocs\n\n\tret.ChangeSrc.Before = ret.ChangeSrc.Before.Copy()\n\tret.ChangeSrc.After = ret.ChangeSrc.After.Copy()\n\n\treturn &ret\n}\n\n// ChangeSrc is a not-yet-decoded Change.\ntype ChangeSrc struct {\n\t// Action defines what kind of change is being made.\n\tAction Action\n\n\t// Before and After correspond to the fields of the same name in Change,\n\t// but have not yet been decoded from the serialized value used for\n\t// storage.\n\tBefore, After DynamicValue\n}\n\n// Decode unmarshals the raw representations of the before and after values\n// to produce a Change object. Pass the type constraint that the result must\n// conform to.\n//\n// Where a ChangeSrc is embedded in some other struct, it's generally better\n// to call the corresponding Decode method of that struct rather than working\n// directly with its embedded Change.\nfunc (cs *ChangeSrc) Decode(ty cty.Type) (*Change, error) {\n\tvar err error\n\tbefore := cty.NullVal(ty)\n\tafter := cty.NullVal(ty)\n\n\tif len(cs.Before) > 0 {\n\t\tbefore, err = cs.Before.Decode(ty)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"error decoding 'before' value: %s\", err)\n\t\t}\n\t}\n\tif len(cs.After) > 0 {\n\t\tafter, err = cs.After.Decode(ty)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"error decoding 'after' value: %s\", err)\n\t\t}\n\t}\n\treturn &Change{\n\t\tAction: cs.Action,\n\t\tBefore: before,\n\t\tAfter:  after,\n\t}, nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/plans/changes_state.go",
    "content": "package plans\n\nimport (\n\t\"github.com/hashicorp/terraform/states\"\n)\n\n// PlannedState merges the set of changes described by the receiver into the\n// given prior state to produce the planned result state.\n//\n// The result is an approximation of the state as it would exist after\n// applying these changes, omitting any values that cannot be determined until\n// the changes are actually applied.\nfunc (c *Changes) PlannedState(prior *states.State) (*states.State, error) {\n\tpanic(\"Changes.PlannedState not yet implemented\")\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/plans/changes_sync.go",
    "content": "package plans\n\nimport (\n\t\"fmt\"\n\t\"sync\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/states\"\n)\n\n// ChangesSync is a wrapper around a Changes that provides a concurrency-safe\n// interface to insert new changes and retrieve copies of existing changes.\n//\n// Each ChangesSync is independent of all others, so all concurrent writers\n// to a particular Changes must share a single ChangesSync. Behavior is\n// undefined if any other caller makes changes to the underlying Changes\n// object or its nested objects concurrently with any of the methods of a\n// particular ChangesSync.\ntype ChangesSync struct {\n\tlock    sync.Mutex\n\tchanges *Changes\n}\n\n// AppendResourceInstanceChange records the given resource instance change in\n// the set of planned resource changes.\n//\n// The caller must ensure that there are no concurrent writes to the given\n// change while this method is running, but it is safe to resume mutating\n// it after this method returns without affecting the saved change.\nfunc (cs *ChangesSync) AppendResourceInstanceChange(changeSrc *ResourceInstanceChangeSrc) {\n\tif cs == nil {\n\t\tpanic(\"AppendResourceInstanceChange on nil ChangesSync\")\n\t}\n\tcs.lock.Lock()\n\tdefer cs.lock.Unlock()\n\n\ts := changeSrc.DeepCopy()\n\tcs.changes.Resources = append(cs.changes.Resources, s)\n}\n\n// GetResourceInstanceChange searches the set of resource instance changes for\n// one matching the given address and generation, returning it if it exists.\n//\n// If no such change exists, nil is returned.\n//\n// The returned object is a deep copy of the change recorded in the plan, so\n// callers may mutate it although it's generally better (less confusing) to\n// treat planned changes as immutable after they've been initially constructed.\nfunc (cs *ChangesSync) GetResourceInstanceChange(addr addrs.AbsResourceInstance, gen states.Generation) *ResourceInstanceChangeSrc {\n\tif cs == nil {\n\t\tpanic(\"GetResourceInstanceChange on nil ChangesSync\")\n\t}\n\tcs.lock.Lock()\n\tdefer cs.lock.Unlock()\n\n\tif gen == states.CurrentGen {\n\t\treturn cs.changes.ResourceInstance(addr).DeepCopy()\n\t}\n\tif dk, ok := gen.(states.DeposedKey); ok {\n\t\treturn cs.changes.ResourceInstanceDeposed(addr, dk).DeepCopy()\n\t}\n\tpanic(fmt.Sprintf(\"unsupported generation value %#v\", gen))\n}\n\n// RemoveResourceInstanceChange searches the set of resource instance changes\n// for one matching the given address and generation, and removes it from the\n// set if it exists.\nfunc (cs *ChangesSync) RemoveResourceInstanceChange(addr addrs.AbsResourceInstance, gen states.Generation) {\n\tif cs == nil {\n\t\tpanic(\"RemoveResourceInstanceChange on nil ChangesSync\")\n\t}\n\tcs.lock.Lock()\n\tdefer cs.lock.Unlock()\n\n\tdk := states.NotDeposed\n\tif realDK, ok := gen.(states.DeposedKey); ok {\n\t\tdk = realDK\n\t}\n\n\taddrStr := addr.String()\n\tfor i, r := range cs.changes.Resources {\n\t\tif r.Addr.String() != addrStr || r.DeposedKey != dk {\n\t\t\tcontinue\n\t\t}\n\t\tcopy(cs.changes.Resources[i:], cs.changes.Resources[i+1:])\n\t\tcs.changes.Resources = cs.changes.Resources[:len(cs.changes.Resources)-1]\n\t\treturn\n\t}\n}\n\n// AppendOutputChange records the given output value change in the set of\n// planned value changes.\n//\n// The caller must ensure that there are no concurrent writes to the given\n// change while this method is running, but it is safe to resume mutating\n// it after this method returns without affecting the saved change.\nfunc (cs *ChangesSync) AppendOutputChange(changeSrc *OutputChangeSrc) {\n\tif cs == nil {\n\t\tpanic(\"AppendOutputChange on nil ChangesSync\")\n\t}\n\tcs.lock.Lock()\n\tdefer cs.lock.Unlock()\n\n\ts := changeSrc.DeepCopy()\n\tcs.changes.Outputs = append(cs.changes.Outputs, s)\n}\n\n// GetOutputChange searches the set of output value changes for one matching\n// the given address, returning it if it exists.\n//\n// If no such change exists, nil is returned.\n//\n// The returned object is a deep copy of the change recorded in the plan, so\n// callers may mutate it although it's generally better (less confusing) to\n// treat planned changes as immutable after they've been initially constructed.\nfunc (cs *ChangesSync) GetOutputChange(addr addrs.AbsOutputValue) *OutputChangeSrc {\n\tif cs == nil {\n\t\tpanic(\"GetOutputChange on nil ChangesSync\")\n\t}\n\tcs.lock.Lock()\n\tdefer cs.lock.Unlock()\n\n\treturn cs.changes.OutputValue(addr)\n}\n\n// RemoveOutputChange searches the set of output value changes for one matching\n// the given address, and removes it from the set if it exists.\nfunc (cs *ChangesSync) RemoveOutputChange(addr addrs.AbsOutputValue) {\n\tif cs == nil {\n\t\tpanic(\"RemoveOutputChange on nil ChangesSync\")\n\t}\n\tcs.lock.Lock()\n\tdefer cs.lock.Unlock()\n\n\taddrStr := addr.String()\n\tfor i, o := range cs.changes.Outputs {\n\t\tif o.Addr.String() != addrStr {\n\t\t\tcontinue\n\t\t}\n\t\tcopy(cs.changes.Outputs[i:], cs.changes.Outputs[i+1:])\n\t\tcs.changes.Outputs = cs.changes.Outputs[:len(cs.changes.Outputs)-1]\n\t\treturn\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/plans/doc.go",
    "content": "// Package plans contains the types that are used to represent Terraform plans.\n//\n// A plan describes a set of changes that Terraform will make to update remote\n// objects to match with changes to the configuration.\npackage plans\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/plans/dynamic_value.go",
    "content": "package plans\n\nimport (\n\t\"github.com/zclconf/go-cty/cty\"\n\tctymsgpack \"github.com/zclconf/go-cty/cty/msgpack\"\n)\n\n// DynamicValue is the representation in the plan of a value whose type cannot\n// be determined at compile time, such as because it comes from a schema\n// defined in a plugin.\n//\n// This type is used as an indirection so that the overall plan structure can\n// be decoded without schema available, and then the dynamic values accessed\n// at a later time once the appropriate schema has been determined.\n//\n// Internally, DynamicValue is a serialized version of a cty.Value created\n// against a particular type constraint. Callers should not access directly\n// the serialized form, whose format may change in future. Values of this\n// type must always be created by calling NewDynamicValue.\n//\n// The zero value of DynamicValue is nil, and represents the absense of a\n// value within the Go type system. This is distinct from a cty.NullVal\n// result, which represents the absense of a value within the cty type system.\ntype DynamicValue []byte\n\n// NewDynamicValue creates a DynamicValue by serializing the given value\n// against the given type constraint. The value must conform to the type\n// constraint, or the result is undefined.\n//\n// If the value to be encoded has no predefined schema (for example, for\n// module output values and input variables), set the type constraint to\n// cty.DynamicPseudoType in order to save type information as part of the\n// value, and then also pass cty.DynamicPseudoType to method Decode to recover\n// the original value.\n//\n// cty.NilVal can be used to represent the absense of a value, but callers\n// must be careful to distinguish values that are absent at the Go layer\n// (cty.NilVal) vs. values that are absent at the cty layer (cty.NullVal\n// results).\nfunc NewDynamicValue(val cty.Value, ty cty.Type) (DynamicValue, error) {\n\t// If we're given cty.NilVal (the zero value of cty.Value, which is\n\t// distinct from a typed null value created by cty.NullVal) then we'll\n\t// assume the caller is trying to represent the _absense_ of a value,\n\t// and so we'll return a nil DynamicValue.\n\tif val == cty.NilVal {\n\t\treturn DynamicValue(nil), nil\n\t}\n\n\t// Currently our internal encoding is msgpack, via ctymsgpack.\n\tbuf, err := ctymsgpack.Marshal(val, ty)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn DynamicValue(buf), nil\n}\n\n// Decode retrieves the effective value from the receiever by interpreting the\n// serialized form against the given type constraint. For correct results,\n// the type constraint must match (or be consistent with) the one that was\n// used to create the receiver.\n//\n// A nil DynamicValue decodes to cty.NilVal, which is not a valid value and\n// instead represents the absense of a value.\nfunc (v DynamicValue) Decode(ty cty.Type) (cty.Value, error) {\n\tif v == nil {\n\t\treturn cty.NilVal, nil\n\t}\n\n\treturn ctymsgpack.Unmarshal([]byte(v), ty)\n}\n\n// ImpliedType returns the type implied by the serialized structure of the\n// receiving value.\n//\n// This will not necessarily be exactly the type that was given when the\n// value was encoded, and in particular must not be used for values that\n// were encoded with their static type given as cty.DynamicPseudoType.\n// It is however safe to use this method for values that were encoded using\n// their runtime type as the conforming type, with the result being\n// semantically equivalent but with all lists and sets represented as tuples,\n// and maps as objects, due to ambiguities of the serialization.\nfunc (v DynamicValue) ImpliedType() (cty.Type, error) {\n\treturn ctymsgpack.ImpliedType([]byte(v))\n}\n\n// Copy produces a copy of the receiver with a distinct backing array.\nfunc (v DynamicValue) Copy() DynamicValue {\n\tif v == nil {\n\t\treturn nil\n\t}\n\n\tret := make(DynamicValue, len(v))\n\tcopy(ret, v)\n\treturn ret\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/plans/objchange/all_null.go",
    "content": "package objchange\n\nimport (\n\t\"github.com/hashicorp/terraform/configs/configschema\"\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// AllAttributesNull constructs a non-null cty.Value of the object type implied\n// by the given schema that has all of its leaf attributes set to null and all\n// of its nested block collections set to zero-length.\n//\n// This simulates what would result from decoding an empty configuration block\n// with the given schema, except that it does not produce errors\nfunc AllAttributesNull(schema *configschema.Block) cty.Value {\n\t// \"All attributes null\" happens to be the definition of EmptyValue for\n\t// a Block, so we can just delegate to that.\n\treturn schema.EmptyValue()\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/plans/objchange/compatible.go",
    "content": "package objchange\n\nimport (\n\t\"fmt\"\n\t\"strconv\"\n\n\t\"github.com/zclconf/go-cty/cty\"\n\t\"github.com/zclconf/go-cty/cty/convert\"\n\n\t\"github.com/hashicorp/terraform/configs/configschema\"\n)\n\n// AssertObjectCompatible checks whether the given \"actual\" value is a valid\n// completion of the possibly-partially-unknown \"planned\" value.\n//\n// This means that any known leaf value in \"planned\" must be equal to the\n// corresponding value in \"actual\", and various other similar constraints.\n//\n// Any inconsistencies are reported by returning a non-zero number of errors.\n// These errors are usually (but not necessarily) cty.PathError values\n// referring to a particular nested value within the \"actual\" value.\n//\n// The two values must have types that conform to the given schema's implied\n// type, or this function will panic.\nfunc AssertObjectCompatible(schema *configschema.Block, planned, actual cty.Value) []error {\n\treturn assertObjectCompatible(schema, planned, actual, nil)\n}\n\nfunc assertObjectCompatible(schema *configschema.Block, planned, actual cty.Value, path cty.Path) []error {\n\tvar errs []error\n\tif planned.IsNull() && !actual.IsNull() {\n\t\terrs = append(errs, path.NewErrorf(\"was absent, but now present\"))\n\t\treturn errs\n\t}\n\tif actual.IsNull() && !planned.IsNull() {\n\t\terrs = append(errs, path.NewErrorf(\"was present, but now absent\"))\n\t\treturn errs\n\t}\n\tif planned.IsNull() {\n\t\t// No further checks possible if both values are null\n\t\treturn errs\n\t}\n\n\tfor name, attrS := range schema.Attributes {\n\t\tplannedV := planned.GetAttr(name)\n\t\tactualV := actual.GetAttr(name)\n\n\t\tpath := append(path, cty.GetAttrStep{Name: name})\n\t\tmoreErrs := assertValueCompatible(plannedV, actualV, path)\n\t\tif attrS.Sensitive {\n\t\t\tif len(moreErrs) > 0 {\n\t\t\t\t// Use a vague placeholder message instead, to avoid disclosing\n\t\t\t\t// sensitive information.\n\t\t\t\terrs = append(errs, path.NewErrorf(\"inconsistent values for sensitive attribute\"))\n\t\t\t}\n\t\t} else {\n\t\t\terrs = append(errs, moreErrs...)\n\t\t}\n\t}\n\tfor name, blockS := range schema.BlockTypes {\n\t\tplannedV := planned.GetAttr(name)\n\t\tactualV := actual.GetAttr(name)\n\n\t\t// As a special case, if there were any blocks whose leaf attributes\n\t\t// are all unknown then we assume (possibly incorrectly) that the\n\t\t// HCL dynamic block extension is in use with an unknown for_each\n\t\t// argument, and so we will do looser validation here that allows\n\t\t// for those blocks to have expanded into a different number of blocks\n\t\t// if the for_each value is now known.\n\t\tmaybeUnknownBlocks := couldHaveUnknownBlockPlaceholder(plannedV, blockS, false)\n\n\t\tpath := append(path, cty.GetAttrStep{Name: name})\n\t\tswitch blockS.Nesting {\n\t\tcase configschema.NestingSingle, configschema.NestingGroup:\n\t\t\t// If an unknown block placeholder was present then the placeholder\n\t\t\t// may have expanded out into zero blocks, which is okay.\n\t\t\tif maybeUnknownBlocks && actualV.IsNull() {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tmoreErrs := assertObjectCompatible(&blockS.Block, plannedV, actualV, path)\n\t\t\terrs = append(errs, moreErrs...)\n\t\tcase configschema.NestingList:\n\t\t\t// A NestingList might either be a list or a tuple, depending on\n\t\t\t// whether there are dynamically-typed attributes inside. However,\n\t\t\t// both support a similar-enough API that we can treat them the\n\t\t\t// same for our purposes here.\n\t\t\tif !plannedV.IsKnown() || plannedV.IsNull() || actualV.IsNull() {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif maybeUnknownBlocks {\n\t\t\t\t// When unknown blocks are present the final blocks may be\n\t\t\t\t// at different indices than the planned blocks, so unfortunately\n\t\t\t\t// we can't do our usual checks in this case without generating\n\t\t\t\t// false negatives.\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tplannedL := plannedV.LengthInt()\n\t\t\tactualL := actualV.LengthInt()\n\t\t\tif plannedL != actualL {\n\t\t\t\terrs = append(errs, path.NewErrorf(\"block count changed from %d to %d\", plannedL, actualL))\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tfor it := plannedV.ElementIterator(); it.Next(); {\n\t\t\t\tidx, plannedEV := it.Element()\n\t\t\t\tif !actualV.HasIndex(idx).True() {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tactualEV := actualV.Index(idx)\n\t\t\t\tmoreErrs := assertObjectCompatible(&blockS.Block, plannedEV, actualEV, append(path, cty.IndexStep{Key: idx}))\n\t\t\t\terrs = append(errs, moreErrs...)\n\t\t\t}\n\t\tcase configschema.NestingMap:\n\t\t\t// A NestingMap might either be a map or an object, depending on\n\t\t\t// whether there are dynamically-typed attributes inside, but\n\t\t\t// that's decided statically and so both values will have the same\n\t\t\t// kind.\n\t\t\tif plannedV.Type().IsObjectType() {\n\t\t\t\tplannedAtys := plannedV.Type().AttributeTypes()\n\t\t\t\tactualAtys := actualV.Type().AttributeTypes()\n\t\t\t\tfor k := range plannedAtys {\n\t\t\t\t\tif _, ok := actualAtys[k]; !ok {\n\t\t\t\t\t\terrs = append(errs, path.NewErrorf(\"block key %q has vanished\", k))\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\n\t\t\t\t\tplannedEV := plannedV.GetAttr(k)\n\t\t\t\t\tactualEV := actualV.GetAttr(k)\n\t\t\t\t\tmoreErrs := assertObjectCompatible(&blockS.Block, plannedEV, actualEV, append(path, cty.GetAttrStep{Name: k}))\n\t\t\t\t\terrs = append(errs, moreErrs...)\n\t\t\t\t}\n\t\t\t\tif !maybeUnknownBlocks { // new blocks may appear if unknown blocks were present in the plan\n\t\t\t\t\tfor k := range actualAtys {\n\t\t\t\t\t\tif _, ok := plannedAtys[k]; !ok {\n\t\t\t\t\t\t\terrs = append(errs, path.NewErrorf(\"new block key %q has appeared\", k))\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif !plannedV.IsKnown() || plannedV.IsNull() || actualV.IsNull() {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tplannedL := plannedV.LengthInt()\n\t\t\t\tactualL := actualV.LengthInt()\n\t\t\t\tif plannedL != actualL && !maybeUnknownBlocks { // new blocks may appear if unknown blocks were persent in the plan\n\t\t\t\t\terrs = append(errs, path.NewErrorf(\"block count changed from %d to %d\", plannedL, actualL))\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tfor it := plannedV.ElementIterator(); it.Next(); {\n\t\t\t\t\tidx, plannedEV := it.Element()\n\t\t\t\t\tif !actualV.HasIndex(idx).True() {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tactualEV := actualV.Index(idx)\n\t\t\t\t\tmoreErrs := assertObjectCompatible(&blockS.Block, plannedEV, actualEV, append(path, cty.IndexStep{Key: idx}))\n\t\t\t\t\terrs = append(errs, moreErrs...)\n\t\t\t\t}\n\t\t\t}\n\t\tcase configschema.NestingSet:\n\t\t\tif !plannedV.IsKnown() || !actualV.IsKnown() || plannedV.IsNull() || actualV.IsNull() {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tsetErrs := assertSetValuesCompatible(plannedV, actualV, path, func(plannedEV, actualEV cty.Value) bool {\n\t\t\t\terrs := assertObjectCompatible(&blockS.Block, plannedEV, actualEV, append(path, cty.IndexStep{Key: actualEV}))\n\t\t\t\treturn len(errs) == 0\n\t\t\t})\n\t\t\terrs = append(errs, setErrs...)\n\n\t\t\t// There can be fewer elements in a set after its elements are all\n\t\t\t// known (values that turn out to be equal will coalesce) but the\n\t\t\t// number of elements must never get larger.\n\t\t\tplannedL := plannedV.LengthInt()\n\t\t\tactualL := actualV.LengthInt()\n\t\t\tif plannedL < actualL {\n\t\t\t\terrs = append(errs, path.NewErrorf(\"block set length changed from %d to %d\", plannedL, actualL))\n\t\t\t}\n\t\tdefault:\n\t\t\tpanic(fmt.Sprintf(\"unsupported nesting mode %s\", blockS.Nesting))\n\t\t}\n\t}\n\treturn errs\n}\n\nfunc assertValueCompatible(planned, actual cty.Value, path cty.Path) []error {\n\t// NOTE: We don't normally use the GoString rendering of cty.Value in\n\t// user-facing error messages as a rule, but we make an exception\n\t// for this function because we expect the user to pass this message on\n\t// verbatim to the provider development team and so more detail is better.\n\n\tvar errs []error\n\tif planned.Type() == cty.DynamicPseudoType {\n\t\t// Anything goes, then\n\t\treturn errs\n\t}\n\tif problems := planned.Type().TestConformance(actual.Type()); len(problems) > 0 {\n\t\terrs = append(errs, path.NewErrorf(\"wrong final value type: %s\", convert.MismatchMessage(actual.Type(), planned.Type())))\n\t\t// If the types don't match then we can't do any other comparisons,\n\t\t// so we bail early.\n\t\treturn errs\n\t}\n\n\tif !planned.IsKnown() {\n\t\t// We didn't know what were going to end up with during plan, so\n\t\t// anything goes during apply.\n\t\treturn errs\n\t}\n\n\tif actual.IsNull() {\n\t\tif planned.IsNull() {\n\t\t\treturn nil\n\t\t}\n\t\terrs = append(errs, path.NewErrorf(\"was %#v, but now null\", planned))\n\t\treturn errs\n\t}\n\tif planned.IsNull() {\n\t\terrs = append(errs, path.NewErrorf(\"was null, but now %#v\", actual))\n\t\treturn errs\n\t}\n\n\tty := planned.Type()\n\tswitch {\n\n\tcase !actual.IsKnown():\n\t\terrs = append(errs, path.NewErrorf(\"was known, but now unknown\"))\n\n\tcase ty.IsPrimitiveType():\n\t\tif !actual.Equals(planned).True() {\n\t\t\terrs = append(errs, path.NewErrorf(\"was %#v, but now %#v\", planned, actual))\n\t\t}\n\n\tcase ty.IsListType() || ty.IsMapType() || ty.IsTupleType():\n\t\tfor it := planned.ElementIterator(); it.Next(); {\n\t\t\tk, plannedV := it.Element()\n\t\t\tif !actual.HasIndex(k).True() {\n\t\t\t\terrs = append(errs, path.NewErrorf(\"element %s has vanished\", indexStrForErrors(k)))\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tactualV := actual.Index(k)\n\t\t\tmoreErrs := assertValueCompatible(plannedV, actualV, append(path, cty.IndexStep{Key: k}))\n\t\t\terrs = append(errs, moreErrs...)\n\t\t}\n\n\t\tfor it := actual.ElementIterator(); it.Next(); {\n\t\t\tk, _ := it.Element()\n\t\t\tif !planned.HasIndex(k).True() {\n\t\t\t\terrs = append(errs, path.NewErrorf(\"new element %s has appeared\", indexStrForErrors(k)))\n\t\t\t}\n\t\t}\n\n\tcase ty.IsObjectType():\n\t\tatys := ty.AttributeTypes()\n\t\tfor name := range atys {\n\t\t\t// Because we already tested that the two values have the same type,\n\t\t\t// we can assume that the same attributes are present in both and\n\t\t\t// focus just on testing their values.\n\t\t\tplannedV := planned.GetAttr(name)\n\t\t\tactualV := actual.GetAttr(name)\n\t\t\tmoreErrs := assertValueCompatible(plannedV, actualV, append(path, cty.GetAttrStep{Name: name}))\n\t\t\terrs = append(errs, moreErrs...)\n\t\t}\n\n\tcase ty.IsSetType():\n\t\t// We can't really do anything useful for sets here because changing\n\t\t// an unknown element to known changes the identity of the element, and\n\t\t// so we can't correlate them properly. However, we will at least check\n\t\t// to ensure that the number of elements is consistent, along with\n\t\t// the general type-match checks we ran earlier in this function.\n\t\tif planned.IsKnown() && !planned.IsNull() && !actual.IsNull() {\n\n\t\t\tsetErrs := assertSetValuesCompatible(planned, actual, path, func(plannedV, actualV cty.Value) bool {\n\t\t\t\terrs := assertValueCompatible(plannedV, actualV, append(path, cty.IndexStep{Key: actualV}))\n\t\t\t\treturn len(errs) == 0\n\t\t\t})\n\t\t\terrs = append(errs, setErrs...)\n\n\t\t\t// There can be fewer elements in a set after its elements are all\n\t\t\t// known (values that turn out to be equal will coalesce) but the\n\t\t\t// number of elements must never get larger.\n\n\t\t\tplannedL := planned.LengthInt()\n\t\t\tactualL := actual.LengthInt()\n\t\t\tif plannedL < actualL {\n\t\t\t\terrs = append(errs, path.NewErrorf(\"length changed from %d to %d\", plannedL, actualL))\n\t\t\t}\n\t\t}\n\t}\n\n\treturn errs\n}\n\nfunc indexStrForErrors(v cty.Value) string {\n\tswitch v.Type() {\n\tcase cty.Number:\n\t\treturn v.AsBigFloat().Text('f', -1)\n\tcase cty.String:\n\t\treturn strconv.Quote(v.AsString())\n\tdefault:\n\t\t// Should be impossible, since no other index types are allowed!\n\t\treturn fmt.Sprintf(\"%#v\", v)\n\t}\n}\n\n// couldHaveUnknownBlockPlaceholder is a heuristic that recognizes how the\n// HCL dynamic block extension behaves when it's asked to expand a block whose\n// for_each argument is unknown. In such cases, it generates a single placeholder\n// block with all leaf attribute values unknown, and once the for_each\n// expression becomes known the placeholder may be replaced with any number\n// of blocks, so object compatibility checks would need to be more liberal.\n//\n// Set \"nested\" if testing a block that is nested inside a candidate block\n// placeholder; this changes the interpretation of there being no blocks of\n// a type to allow for there being zero nested blocks.\nfunc couldHaveUnknownBlockPlaceholder(v cty.Value, blockS *configschema.NestedBlock, nested bool) bool {\n\tswitch blockS.Nesting {\n\tcase configschema.NestingSingle, configschema.NestingGroup:\n\t\tif nested && v.IsNull() {\n\t\t\treturn true // for nested blocks, a single block being unset doesn't disqualify from being an unknown block placeholder\n\t\t}\n\t\treturn couldBeUnknownBlockPlaceholderElement(v, &blockS.Block)\n\tdefault:\n\t\t// These situations should be impossible for correct providers, but\n\t\t// we permit the legacy SDK to produce some incorrect outcomes\n\t\t// for compatibility with its existing logic, and so we must be\n\t\t// tolerant here.\n\t\tif !v.IsKnown() {\n\t\t\treturn true\n\t\t}\n\t\tif v.IsNull() {\n\t\t\treturn false // treated as if the list were empty, so we would see zero iterations below\n\t\t}\n\n\t\t// For all other nesting modes, our value should be something iterable.\n\t\tfor it := v.ElementIterator(); it.Next(); {\n\t\t\t_, ev := it.Element()\n\t\t\tif couldBeUnknownBlockPlaceholderElement(ev, &blockS.Block) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\n\t\t// Our default changes depending on whether we're testing the candidate\n\t\t// block itself or something nested inside of it: zero blocks of a type\n\t\t// can never contain a dynamic block placeholder, but a dynamic block\n\t\t// placeholder might contain zero blocks of one of its own nested block\n\t\t// types, if none were set in the config at all.\n\t\treturn nested\n\t}\n}\n\nfunc couldBeUnknownBlockPlaceholderElement(v cty.Value, schema *configschema.Block) bool {\n\tif v.IsNull() {\n\t\treturn false // null value can never be a placeholder element\n\t}\n\tif !v.IsKnown() {\n\t\treturn true // this should never happen for well-behaved providers, but can happen with the legacy SDK opt-outs\n\t}\n\tfor name := range schema.Attributes {\n\t\tav := v.GetAttr(name)\n\n\t\t// Unknown block placeholders contain only unknown or null attribute\n\t\t// values, depending on whether or not a particular attribute was set\n\t\t// explicitly inside the content block. Note that this is imprecise:\n\t\t// non-placeholders can also match this, so this function can generate\n\t\t// false positives.\n\t\tif av.IsKnown() && !av.IsNull() {\n\t\t\treturn false\n\t\t}\n\t}\n\tfor name, blockS := range schema.BlockTypes {\n\t\tif !couldHaveUnknownBlockPlaceholder(v.GetAttr(name), blockS, true) {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\n// assertSetValuesCompatible checks that each of the elements in a can\n// be correlated with at least one equivalent element in b and vice-versa,\n// using the given correlation function.\n//\n// This allows the number of elements in the sets to change as long as all\n// elements in both sets can be correlated, making this function safe to use\n// with sets that may contain unknown values as long as the unknown case is\n// addressed in some reasonable way in the callback function.\n//\n// The callback always recieves values from set a as its first argument and\n// values from set b in its second argument, so it is safe to use with\n// non-commutative functions.\n//\n// As with assertValueCompatible, we assume that the target audience of error\n// messages here is a provider developer (via a bug report from a user) and so\n// we intentionally violate our usual rule of keeping cty implementation\n// details out of error messages.\nfunc assertSetValuesCompatible(planned, actual cty.Value, path cty.Path, f func(aVal, bVal cty.Value) bool) []error {\n\ta := planned\n\tb := actual\n\n\t// Our methodology here is a little tricky, to deal with the fact that\n\t// it's impossible to directly correlate two non-equal set elements because\n\t// they don't have identities separate from their values.\n\t// The approach is to count the number of equivalent elements each element\n\t// of a has in b and vice-versa, and then return true only if each element\n\t// in both sets has at least one equivalent.\n\tas := a.AsValueSlice()\n\tbs := b.AsValueSlice()\n\taeqs := make([]bool, len(as))\n\tbeqs := make([]bool, len(bs))\n\tfor ai, av := range as {\n\t\tfor bi, bv := range bs {\n\t\t\tif f(av, bv) {\n\t\t\t\taeqs[ai] = true\n\t\t\t\tbeqs[bi] = true\n\t\t\t}\n\t\t}\n\t}\n\n\tvar errs []error\n\tfor i, eq := range aeqs {\n\t\tif !eq {\n\t\t\terrs = append(errs, path.NewErrorf(\"planned set element %#v does not correlate with any element in actual\", as[i]))\n\t\t}\n\t}\n\tif len(errs) > 0 {\n\t\t// Exit early since otherwise we're likely to generate duplicate\n\t\t// error messages from the other perspective in the subsequent loop.\n\t\treturn errs\n\t}\n\tfor i, eq := range beqs {\n\t\tif !eq {\n\t\t\terrs = append(errs, path.NewErrorf(\"actual set element %#v does not correlate with any element in plan\", bs[i]))\n\t\t}\n\t}\n\treturn errs\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/plans/objchange/doc.go",
    "content": "// Package objchange deals with the business logic of taking a prior state\n// value and a config value and producing a proposed new merged value, along\n// with other related rules in this domain.\npackage objchange\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/plans/objchange/lcs.go",
    "content": "package objchange\n\nimport (\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// LongestCommonSubsequence finds a sequence of values that are common to both\n// x and y, with the same relative ordering as in both collections. This result\n// is useful as a first step towards computing a diff showing added/removed\n// elements in a sequence.\n//\n// The approached used here is a \"naive\" one, assuming that both xs and ys will\n// generally be small in most reasonable Terraform configurations. For larger\n// lists the time/space usage may be sub-optimal.\n//\n// A pair of lists may have multiple longest common subsequences. In that\n// case, the one selected by this function is undefined.\nfunc LongestCommonSubsequence(xs, ys []cty.Value) []cty.Value {\n\tif len(xs) == 0 || len(ys) == 0 {\n\t\treturn make([]cty.Value, 0)\n\t}\n\n\tc := make([]int, len(xs)*len(ys))\n\teqs := make([]bool, len(xs)*len(ys))\n\tw := len(xs)\n\n\tfor y := 0; y < len(ys); y++ {\n\t\tfor x := 0; x < len(xs); x++ {\n\t\t\teqV := xs[x].Equals(ys[y])\n\t\t\teq := false\n\t\t\tif eqV.IsKnown() && eqV.True() {\n\t\t\t\teq = true\n\t\t\t\teqs[(w*y)+x] = true // equality tests can be expensive, so cache it\n\t\t\t}\n\t\t\tif eq {\n\t\t\t\t// Sequence gets one longer than for the cell at top left,\n\t\t\t\t// since we'd append a new item to the sequence here.\n\t\t\t\tif x == 0 || y == 0 {\n\t\t\t\t\tc[(w*y)+x] = 1\n\t\t\t\t} else {\n\t\t\t\t\tc[(w*y)+x] = c[(w*(y-1))+(x-1)] + 1\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// We follow the longest of the sequence above and the sequence\n\t\t\t\t// to the left of us in the matrix.\n\t\t\t\tl := 0\n\t\t\t\tu := 0\n\t\t\t\tif x > 0 {\n\t\t\t\t\tl = c[(w*y)+(x-1)]\n\t\t\t\t}\n\t\t\t\tif y > 0 {\n\t\t\t\t\tu = c[(w*(y-1))+x]\n\t\t\t\t}\n\t\t\t\tif l > u {\n\t\t\t\t\tc[(w*y)+x] = l\n\t\t\t\t} else {\n\t\t\t\t\tc[(w*y)+x] = u\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// The bottom right cell tells us how long our longest sequence will be\n\tseq := make([]cty.Value, c[len(c)-1])\n\n\t// Now we will walk back from the bottom right cell, finding again all\n\t// of the equal pairs to construct our sequence.\n\tx := len(xs) - 1\n\ty := len(ys) - 1\n\ti := len(seq) - 1\n\n\tfor x > -1 && y > -1 {\n\t\tif eqs[(w*y)+x] {\n\t\t\t// Add the value to our result list and then walk diagonally\n\t\t\t// up and to the left.\n\t\t\tseq[i] = xs[x]\n\t\t\tx--\n\t\t\ty--\n\t\t\ti--\n\t\t} else {\n\t\t\t// Take the path with the greatest sequence length in the matrix.\n\t\t\tl := 0\n\t\t\tu := 0\n\t\t\tif x > 0 {\n\t\t\t\tl = c[(w*y)+(x-1)]\n\t\t\t}\n\t\t\tif y > 0 {\n\t\t\t\tu = c[(w*(y-1))+x]\n\t\t\t}\n\t\t\tif l > u {\n\t\t\t\tx--\n\t\t\t} else {\n\t\t\t\ty--\n\t\t\t}\n\t\t}\n\t}\n\n\tif i > -1 {\n\t\t// should never happen if the matrix was constructed properly\n\t\tpanic(\"not enough elements in sequence\")\n\t}\n\n\treturn seq\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/plans/objchange/normalize_obj.go",
    "content": "package objchange\n\nimport (\n\t\"github.com/hashicorp/terraform/configs/configschema\"\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// NormalizeObjectFromLegacySDK takes an object that may have been generated\n// by the legacy Terraform SDK (i.e. returned from a provider with the\n// LegacyTypeSystem opt-out set) and does its best to normalize it for the\n// assumptions we would normally enforce if the provider had not opted out.\n//\n// In particular, this function guarantees that a value representing a nested\n// block will never itself be unknown or null, instead representing that as\n// a non-null value that may contain null/unknown values.\n//\n// The input value must still conform to the implied type of the given schema,\n// or else this function may produce garbage results or panic. This is usually\n// okay because type consistency is enforced when deserializing the value\n// returned from the provider over the RPC wire protocol anyway.\nfunc NormalizeObjectFromLegacySDK(val cty.Value, schema *configschema.Block) cty.Value {\n\tif val == cty.NilVal || val.IsNull() {\n\t\t// This should never happen in reasonable use, but we'll allow it\n\t\t// and normalize to a null of the expected type rather than panicking\n\t\t// below.\n\t\treturn cty.NullVal(schema.ImpliedType())\n\t}\n\n\tvals := make(map[string]cty.Value)\n\tfor name := range schema.Attributes {\n\t\t// No normalization for attributes, since them being type-conformant\n\t\t// is all that we require.\n\t\tvals[name] = val.GetAttr(name)\n\t}\n\tfor name, blockS := range schema.BlockTypes {\n\t\tlv := val.GetAttr(name)\n\n\t\t// Legacy SDK never generates dynamically-typed attributes and so our\n\t\t// normalization code doesn't deal with them, but we need to make sure\n\t\t// we still pass them through properly so that we don't interfere with\n\t\t// objects generated by other SDKs.\n\t\tif ty := blockS.Block.ImpliedType(); ty.HasDynamicTypes() {\n\t\t\tvals[name] = lv\n\t\t\tcontinue\n\t\t}\n\n\t\tswitch blockS.Nesting {\n\t\tcase configschema.NestingSingle, configschema.NestingGroup:\n\t\t\tif lv.IsKnown() {\n\t\t\t\tif lv.IsNull() && blockS.Nesting == configschema.NestingGroup {\n\t\t\t\t\tvals[name] = blockS.EmptyValue()\n\t\t\t\t} else {\n\t\t\t\t\tvals[name] = NormalizeObjectFromLegacySDK(lv, &blockS.Block)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvals[name] = unknownBlockStub(&blockS.Block)\n\t\t\t}\n\t\tcase configschema.NestingList:\n\t\t\tswitch {\n\t\t\tcase !lv.IsKnown():\n\t\t\t\tvals[name] = cty.ListVal([]cty.Value{unknownBlockStub(&blockS.Block)})\n\t\t\tcase lv.IsNull() || lv.LengthInt() == 0:\n\t\t\t\tvals[name] = cty.ListValEmpty(blockS.Block.ImpliedType())\n\t\t\tdefault:\n\t\t\t\tsubVals := make([]cty.Value, 0, lv.LengthInt())\n\t\t\t\tfor it := lv.ElementIterator(); it.Next(); {\n\t\t\t\t\t_, subVal := it.Element()\n\t\t\t\t\tsubVals = append(subVals, NormalizeObjectFromLegacySDK(subVal, &blockS.Block))\n\t\t\t\t}\n\t\t\t\tvals[name] = cty.ListVal(subVals)\n\t\t\t}\n\t\tcase configschema.NestingSet:\n\t\t\tswitch {\n\t\t\tcase !lv.IsKnown():\n\t\t\t\tvals[name] = cty.SetVal([]cty.Value{unknownBlockStub(&blockS.Block)})\n\t\t\tcase lv.IsNull() || lv.LengthInt() == 0:\n\t\t\t\tvals[name] = cty.SetValEmpty(blockS.Block.ImpliedType())\n\t\t\tdefault:\n\t\t\t\tsubVals := make([]cty.Value, 0, lv.LengthInt())\n\t\t\t\tfor it := lv.ElementIterator(); it.Next(); {\n\t\t\t\t\t_, subVal := it.Element()\n\t\t\t\t\tsubVals = append(subVals, NormalizeObjectFromLegacySDK(subVal, &blockS.Block))\n\t\t\t\t}\n\t\t\t\tvals[name] = cty.SetVal(subVals)\n\t\t\t}\n\t\tdefault:\n\t\t\t// The legacy SDK doesn't support NestingMap, so we just assume\n\t\t\t// maps are always okay. (If not, we would've detected and returned\n\t\t\t// an error to the user before we got here.)\n\t\t\tvals[name] = lv\n\t\t}\n\t}\n\treturn cty.ObjectVal(vals)\n}\n\n// unknownBlockStub constructs an object value that approximates an unknown\n// block by producing a known block object with all of its leaf attribute\n// values set to unknown.\n//\n// Blocks themselves cannot be unknown, so if the legacy SDK tries to return\n// such a thing, we'll use this result instead. This convention mimics how\n// the dynamic block feature deals with being asked to iterate over an unknown\n// value, because our value-checking functions already accept this convention\n// as a special case.\nfunc unknownBlockStub(schema *configschema.Block) cty.Value {\n\tvals := make(map[string]cty.Value)\n\tfor name, attrS := range schema.Attributes {\n\t\tvals[name] = cty.UnknownVal(attrS.Type)\n\t}\n\tfor name, blockS := range schema.BlockTypes {\n\t\tswitch blockS.Nesting {\n\t\tcase configschema.NestingSingle, configschema.NestingGroup:\n\t\t\tvals[name] = unknownBlockStub(&blockS.Block)\n\t\tcase configschema.NestingList:\n\t\t\t// In principle we may be expected to produce a tuple value here,\n\t\t\t// if there are any dynamically-typed attributes in our nested block,\n\t\t\t// but the legacy SDK doesn't support that, so we just assume it'll\n\t\t\t// never be necessary to normalize those. (Incorrect usage in any\n\t\t\t// other SDK would be caught and returned as an error before we\n\t\t\t// get here.)\n\t\t\tvals[name] = cty.ListVal([]cty.Value{unknownBlockStub(&blockS.Block)})\n\t\tcase configschema.NestingSet:\n\t\t\tvals[name] = cty.SetVal([]cty.Value{unknownBlockStub(&blockS.Block)})\n\t\tcase configschema.NestingMap:\n\t\t\t// A nesting map can never be unknown since we then wouldn't know\n\t\t\t// what the keys are. (Legacy SDK doesn't support NestingMap anyway,\n\t\t\t// so this should never arise.)\n\t\t\tvals[name] = cty.MapValEmpty(blockS.Block.ImpliedType())\n\t\t}\n\t}\n\treturn cty.ObjectVal(vals)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/plans/objchange/objchange.go",
    "content": "package objchange\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/zclconf/go-cty/cty\"\n\n\t\"github.com/hashicorp/terraform/configs/configschema\"\n)\n\n// ProposedNewObject constructs a proposed new object value by combining the\n// computed attribute values from \"prior\" with the configured attribute values\n// from \"config\".\n//\n// Both value must conform to the given schema's implied type, or this function\n// will panic.\n//\n// The prior value must be wholly known, but the config value may be unknown\n// or have nested unknown values.\n//\n// The merging of the two objects includes the attributes of any nested blocks,\n// which will be correlated in a manner appropriate for their nesting mode.\n// Note in particular that the correlation for blocks backed by sets is a\n// heuristic based on matching non-computed attribute values and so it may\n// produce strange results with more \"extreme\" cases, such as a nested set\n// block where _all_ attributes are computed.\nfunc ProposedNewObject(schema *configschema.Block, prior, config cty.Value) cty.Value {\n\t// If the config and prior are both null, return early here before\n\t// populating the prior block. The prevents non-null blocks from appearing\n\t// the proposed state value.\n\tif config.IsNull() && prior.IsNull() {\n\t\treturn prior\n\t}\n\n\tif prior.IsNull() {\n\t\t// In this case, we will construct a synthetic prior value that is\n\t\t// similar to the result of decoding an empty configuration block,\n\t\t// which simplifies our handling of the top-level attributes/blocks\n\t\t// below by giving us one non-null level of object to pull values from.\n\t\tprior = AllAttributesNull(schema)\n\t}\n\treturn proposedNewObject(schema, prior, config)\n}\n\n// PlannedDataResourceObject is similar to ProposedNewObject but tailored for\n// planning data resources in particular. Specifically, it replaces the values\n// of any Computed attributes not set in the configuration with an unknown\n// value, which serves as a placeholder for a value to be filled in by the\n// provider when the data resource is finally read.\n//\n// Data resources are different because the planning of them is handled\n// entirely within Terraform Core and not subject to customization by the\n// provider. This function is, in effect, producing an equivalent result to\n// passing the ProposedNewObject result into a provider's PlanResourceChange\n// function, assuming a fixed implementation of PlanResourceChange that just\n// fills in unknown values as needed.\nfunc PlannedDataResourceObject(schema *configschema.Block, config cty.Value) cty.Value {\n\t// Our trick here is to run the ProposedNewObject logic with an\n\t// entirely-unknown prior value. Because of cty's unknown short-circuit\n\t// behavior, any operation on prior returns another unknown, and so\n\t// unknown values propagate into all of the parts of the resulting value\n\t// that would normally be filled in by preserving the prior state.\n\tprior := cty.UnknownVal(schema.ImpliedType())\n\treturn proposedNewObject(schema, prior, config)\n}\n\nfunc proposedNewObject(schema *configschema.Block, prior, config cty.Value) cty.Value {\n\tif config.IsNull() || !config.IsKnown() {\n\t\t// This is a weird situation, but we'll allow it anyway to free\n\t\t// callers from needing to specifically check for these cases.\n\t\treturn prior\n\t}\n\tif (!prior.Type().IsObjectType()) || (!config.Type().IsObjectType()) {\n\t\tpanic(\"ProposedNewObject only supports object-typed values\")\n\t}\n\n\t// From this point onwards, we can assume that both values are non-null\n\t// object types, and that the config value itself is known (though it\n\t// may contain nested values that are unknown.)\n\n\tnewAttrs := map[string]cty.Value{}\n\tfor name, attr := range schema.Attributes {\n\t\tpriorV := prior.GetAttr(name)\n\t\tconfigV := config.GetAttr(name)\n\t\tvar newV cty.Value\n\t\tswitch {\n\t\tcase attr.Computed && attr.Optional:\n\t\t\t// This is the trickiest scenario: we want to keep the prior value\n\t\t\t// if the config isn't overriding it. Note that due to some\n\t\t\t// ambiguity here, setting an optional+computed attribute from\n\t\t\t// config and then later switching the config to null in a\n\t\t\t// subsequent change causes the initial config value to be \"sticky\"\n\t\t\t// unless the provider specifically overrides it during its own\n\t\t\t// plan customization step.\n\t\t\tif configV.IsNull() {\n\t\t\t\tnewV = priorV\n\t\t\t} else {\n\t\t\t\tnewV = configV\n\t\t\t}\n\t\tcase attr.Computed:\n\t\t\t// configV will always be null in this case, by definition.\n\t\t\t// priorV may also be null, but that's okay.\n\t\t\tnewV = priorV\n\t\tdefault:\n\t\t\t// For non-computed attributes, we always take the config value,\n\t\t\t// even if it is null. If it's _required_ then null values\n\t\t\t// should've been caught during an earlier validation step, and\n\t\t\t// so we don't really care about that here.\n\t\t\tnewV = configV\n\t\t}\n\t\tnewAttrs[name] = newV\n\t}\n\n\t// Merging nested blocks is a little more complex, since we need to\n\t// correlate blocks between both objects and then recursively propose\n\t// a new object for each. The correlation logic depends on the nesting\n\t// mode for each block type.\n\tfor name, blockType := range schema.BlockTypes {\n\t\tpriorV := prior.GetAttr(name)\n\t\tconfigV := config.GetAttr(name)\n\t\tvar newV cty.Value\n\t\tswitch blockType.Nesting {\n\n\t\tcase configschema.NestingSingle, configschema.NestingGroup:\n\t\t\tnewV = ProposedNewObject(&blockType.Block, priorV, configV)\n\n\t\tcase configschema.NestingList:\n\t\t\t// Nested blocks are correlated by index.\n\t\t\tconfigVLen := 0\n\t\t\tif configV.IsKnown() && !configV.IsNull() {\n\t\t\t\tconfigVLen = configV.LengthInt()\n\t\t\t}\n\t\t\tif configVLen > 0 {\n\t\t\t\tnewVals := make([]cty.Value, 0, configVLen)\n\t\t\t\tfor it := configV.ElementIterator(); it.Next(); {\n\t\t\t\t\tidx, configEV := it.Element()\n\t\t\t\t\tif priorV.IsKnown() && (priorV.IsNull() || !priorV.HasIndex(idx).True()) {\n\t\t\t\t\t\t// If there is no corresponding prior element then\n\t\t\t\t\t\t// we just take the config value as-is.\n\t\t\t\t\t\tnewVals = append(newVals, configEV)\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tpriorEV := priorV.Index(idx)\n\n\t\t\t\t\tnewEV := ProposedNewObject(&blockType.Block, priorEV, configEV)\n\t\t\t\t\tnewVals = append(newVals, newEV)\n\t\t\t\t}\n\t\t\t\t// Despite the name, a NestingList might also be a tuple, if\n\t\t\t\t// its nested schema contains dynamically-typed attributes.\n\t\t\t\tif configV.Type().IsTupleType() {\n\t\t\t\t\tnewV = cty.TupleVal(newVals)\n\t\t\t\t} else {\n\t\t\t\t\tnewV = cty.ListVal(newVals)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Despite the name, a NestingList might also be a tuple, if\n\t\t\t\t// its nested schema contains dynamically-typed attributes.\n\t\t\t\tif configV.Type().IsTupleType() {\n\t\t\t\t\tnewV = cty.EmptyTupleVal\n\t\t\t\t} else {\n\t\t\t\t\tnewV = cty.ListValEmpty(blockType.ImpliedType())\n\t\t\t\t}\n\t\t\t}\n\n\t\tcase configschema.NestingMap:\n\t\t\t// Despite the name, a NestingMap may produce either a map or\n\t\t\t// object value, depending on whether the nested schema contains\n\t\t\t// dynamically-typed attributes.\n\t\t\tif configV.Type().IsObjectType() {\n\t\t\t\t// Nested blocks are correlated by key.\n\t\t\t\tconfigVLen := 0\n\t\t\t\tif configV.IsKnown() && !configV.IsNull() {\n\t\t\t\t\tconfigVLen = configV.LengthInt()\n\t\t\t\t}\n\t\t\t\tif configVLen > 0 {\n\t\t\t\t\tnewVals := make(map[string]cty.Value, configVLen)\n\t\t\t\t\tatys := configV.Type().AttributeTypes()\n\t\t\t\t\tfor name := range atys {\n\t\t\t\t\t\tconfigEV := configV.GetAttr(name)\n\t\t\t\t\t\tif !priorV.IsKnown() || priorV.IsNull() || !priorV.Type().HasAttribute(name) {\n\t\t\t\t\t\t\t// If there is no corresponding prior element then\n\t\t\t\t\t\t\t// we just take the config value as-is.\n\t\t\t\t\t\t\tnewVals[name] = configEV\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpriorEV := priorV.GetAttr(name)\n\n\t\t\t\t\t\tnewEV := ProposedNewObject(&blockType.Block, priorEV, configEV)\n\t\t\t\t\t\tnewVals[name] = newEV\n\t\t\t\t\t}\n\t\t\t\t\t// Although we call the nesting mode \"map\", we actually use\n\t\t\t\t\t// object values so that elements might have different types\n\t\t\t\t\t// in case of dynamically-typed attributes.\n\t\t\t\t\tnewV = cty.ObjectVal(newVals)\n\t\t\t\t} else {\n\t\t\t\t\tnewV = cty.EmptyObjectVal\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconfigVLen := 0\n\t\t\t\tif configV.IsKnown() && !configV.IsNull() {\n\t\t\t\t\tconfigVLen = configV.LengthInt()\n\t\t\t\t}\n\t\t\t\tif configVLen > 0 {\n\t\t\t\t\tnewVals := make(map[string]cty.Value, configVLen)\n\t\t\t\t\tfor it := configV.ElementIterator(); it.Next(); {\n\t\t\t\t\t\tidx, configEV := it.Element()\n\t\t\t\t\t\tk := idx.AsString()\n\t\t\t\t\t\tif priorV.IsKnown() && (priorV.IsNull() || !priorV.HasIndex(idx).True()) {\n\t\t\t\t\t\t\t// If there is no corresponding prior element then\n\t\t\t\t\t\t\t// we just take the config value as-is.\n\t\t\t\t\t\t\tnewVals[k] = configEV\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpriorEV := priorV.Index(idx)\n\n\t\t\t\t\t\tnewEV := ProposedNewObject(&blockType.Block, priorEV, configEV)\n\t\t\t\t\t\tnewVals[k] = newEV\n\t\t\t\t\t}\n\t\t\t\t\tnewV = cty.MapVal(newVals)\n\t\t\t\t} else {\n\t\t\t\t\tnewV = cty.MapValEmpty(blockType.ImpliedType())\n\t\t\t\t}\n\t\t\t}\n\n\t\tcase configschema.NestingSet:\n\t\t\tif !configV.Type().IsSetType() {\n\t\t\t\tpanic(\"configschema.NestingSet value is not a set as expected\")\n\t\t\t}\n\n\t\t\t// Nested blocks are correlated by comparing the element values\n\t\t\t// after eliminating all of the computed attributes. In practice,\n\t\t\t// this means that any config change produces an entirely new\n\t\t\t// nested object, and we only propagate prior computed values\n\t\t\t// if the non-computed attribute values are identical.\n\t\t\tvar cmpVals [][2]cty.Value\n\t\t\tif priorV.IsKnown() && !priorV.IsNull() {\n\t\t\t\tcmpVals = setElementCompareValues(&blockType.Block, priorV, false)\n\t\t\t}\n\t\t\tconfigVLen := 0\n\t\t\tif configV.IsKnown() && !configV.IsNull() {\n\t\t\t\tconfigVLen = configV.LengthInt()\n\t\t\t}\n\t\t\tif configVLen > 0 {\n\t\t\t\tused := make([]bool, len(cmpVals)) // track used elements in case multiple have the same compare value\n\t\t\t\tnewVals := make([]cty.Value, 0, configVLen)\n\t\t\t\tfor it := configV.ElementIterator(); it.Next(); {\n\t\t\t\t\t_, configEV := it.Element()\n\t\t\t\t\tvar priorEV cty.Value\n\t\t\t\t\tfor i, cmp := range cmpVals {\n\t\t\t\t\t\tif used[i] {\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif cmp[1].RawEquals(configEV) {\n\t\t\t\t\t\t\tpriorEV = cmp[0]\n\t\t\t\t\t\t\tused[i] = true // we can't use this value on a future iteration\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif priorEV == cty.NilVal {\n\t\t\t\t\t\tpriorEV = cty.NullVal(blockType.ImpliedType())\n\t\t\t\t\t}\n\n\t\t\t\t\tnewEV := ProposedNewObject(&blockType.Block, priorEV, configEV)\n\t\t\t\t\tnewVals = append(newVals, newEV)\n\t\t\t\t}\n\t\t\t\tnewV = cty.SetVal(newVals)\n\t\t\t} else {\n\t\t\t\tnewV = cty.SetValEmpty(blockType.Block.ImpliedType())\n\t\t\t}\n\n\t\tdefault:\n\t\t\t// Should never happen, since the above cases are comprehensive.\n\t\t\tpanic(fmt.Sprintf(\"unsupported block nesting mode %s\", blockType.Nesting))\n\t\t}\n\n\t\tnewAttrs[name] = newV\n\t}\n\n\treturn cty.ObjectVal(newAttrs)\n}\n\n// setElementCompareValues takes a known, non-null value of a cty.Set type and\n// returns a table -- constructed of two-element arrays -- that maps original\n// set element values to corresponding values that have all of the computed\n// values removed, making them suitable for comparison with values obtained\n// from configuration. The element type of the set must conform to the implied\n// type of the given schema, or this function will panic.\n//\n// In the resulting slice, the zeroth element of each array is the original\n// value and the one-indexed element is the corresponding \"compare value\".\n//\n// This is intended to help correlate prior elements with configured elements\n// in ProposedNewObject. The result is a heuristic rather than an exact science,\n// since e.g. two separate elements may reduce to the same value through this\n// process. The caller must therefore be ready to deal with duplicates.\nfunc setElementCompareValues(schema *configschema.Block, set cty.Value, isConfig bool) [][2]cty.Value {\n\tret := make([][2]cty.Value, 0, set.LengthInt())\n\tfor it := set.ElementIterator(); it.Next(); {\n\t\t_, ev := it.Element()\n\t\tret = append(ret, [2]cty.Value{ev, setElementCompareValue(schema, ev, isConfig)})\n\t}\n\treturn ret\n}\n\n// setElementCompareValue creates a new value that has all of the same\n// non-computed attribute values as the one given but has all computed\n// attribute values forced to null.\n//\n// If isConfig is true then non-null Optional+Computed attribute values will\n// be preserved. Otherwise, they will also be set to null.\n//\n// The input value must conform to the schema's implied type, and the return\n// value is guaranteed to conform to it.\nfunc setElementCompareValue(schema *configschema.Block, v cty.Value, isConfig bool) cty.Value {\n\tif v.IsNull() || !v.IsKnown() {\n\t\treturn v\n\t}\n\n\tattrs := map[string]cty.Value{}\n\tfor name, attr := range schema.Attributes {\n\t\tswitch {\n\t\tcase attr.Computed && attr.Optional:\n\t\t\tif isConfig {\n\t\t\t\tattrs[name] = v.GetAttr(name)\n\t\t\t} else {\n\t\t\t\tattrs[name] = cty.NullVal(attr.Type)\n\t\t\t}\n\t\tcase attr.Computed:\n\t\t\tattrs[name] = cty.NullVal(attr.Type)\n\t\tdefault:\n\t\t\tattrs[name] = v.GetAttr(name)\n\t\t}\n\t}\n\n\tfor name, blockType := range schema.BlockTypes {\n\t\tswitch blockType.Nesting {\n\n\t\tcase configschema.NestingSingle, configschema.NestingGroup:\n\t\t\tattrs[name] = setElementCompareValue(&blockType.Block, v.GetAttr(name), isConfig)\n\n\t\tcase configschema.NestingList, configschema.NestingSet:\n\t\t\tcv := v.GetAttr(name)\n\t\t\tif cv.IsNull() || !cv.IsKnown() {\n\t\t\t\tattrs[name] = cv\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif l := cv.LengthInt(); l > 0 {\n\t\t\t\telems := make([]cty.Value, 0, l)\n\t\t\t\tfor it := cv.ElementIterator(); it.Next(); {\n\t\t\t\t\t_, ev := it.Element()\n\t\t\t\t\telems = append(elems, setElementCompareValue(&blockType.Block, ev, isConfig))\n\t\t\t\t}\n\t\t\t\tif blockType.Nesting == configschema.NestingSet {\n\t\t\t\t\t// SetValEmpty would panic if given elements that are not\n\t\t\t\t\t// all of the same type, but that's guaranteed not to\n\t\t\t\t\t// happen here because our input value was _already_ a\n\t\t\t\t\t// set and we've not changed the types of any elements here.\n\t\t\t\t\tattrs[name] = cty.SetVal(elems)\n\t\t\t\t} else {\n\t\t\t\t\tattrs[name] = cty.TupleVal(elems)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif blockType.Nesting == configschema.NestingSet {\n\t\t\t\t\tattrs[name] = cty.SetValEmpty(blockType.Block.ImpliedType())\n\t\t\t\t} else {\n\t\t\t\t\tattrs[name] = cty.EmptyTupleVal\n\t\t\t\t}\n\t\t\t}\n\n\t\tcase configschema.NestingMap:\n\t\t\tcv := v.GetAttr(name)\n\t\t\tif cv.IsNull() || !cv.IsKnown() {\n\t\t\t\tattrs[name] = cv\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\telems := make(map[string]cty.Value)\n\t\t\tfor it := cv.ElementIterator(); it.Next(); {\n\t\t\t\tkv, ev := it.Element()\n\t\t\t\telems[kv.AsString()] = setElementCompareValue(&blockType.Block, ev, isConfig)\n\t\t\t}\n\t\t\tattrs[name] = cty.ObjectVal(elems)\n\n\t\tdefault:\n\t\t\t// Should never happen, since the above cases are comprehensive.\n\t\t\tpanic(fmt.Sprintf(\"unsupported block nesting mode %s\", blockType.Nesting))\n\t\t}\n\t}\n\n\treturn cty.ObjectVal(attrs)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/plans/objchange/plan_valid.go",
    "content": "package objchange\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/zclconf/go-cty/cty\"\n\n\t\"github.com/hashicorp/terraform/configs/configschema\"\n)\n\n// AssertPlanValid checks checks whether a planned new state returned by a\n// provider's PlanResourceChange method is suitable to achieve a change\n// from priorState to config. It returns a slice with nonzero length if\n// any problems are detected. Because problems here indicate bugs in the\n// provider that generated the plannedState, they are written with provider\n// developers as an audience, rather than end-users.\n//\n// All of the given values must have the same type and must conform to the\n// implied type of the given schema, or this function may panic or produce\n// garbage results.\n//\n// During planning, a provider may only make changes to attributes that are\n// null (unset) in the configuration and are marked as \"computed\" in the\n// resource type schema, in order to insert any default values the provider\n// may know about. If the default value cannot be determined until apply time,\n// the provider can return an unknown value. Providers are forbidden from\n// planning a change that disagrees with any non-null argument in the\n// configuration.\n//\n// As a special exception, providers _are_ allowed to provide attribute values\n// conflicting with configuration if and only if the planned value exactly\n// matches the corresponding attribute value in the prior state. The provider\n// can use this to signal that the new value is functionally equivalent to\n// the old and thus no change is required.\nfunc AssertPlanValid(schema *configschema.Block, priorState, config, plannedState cty.Value) []error {\n\treturn assertPlanValid(schema, priorState, config, plannedState, nil)\n}\n\nfunc assertPlanValid(schema *configschema.Block, priorState, config, plannedState cty.Value, path cty.Path) []error {\n\tvar errs []error\n\tif plannedState.IsNull() && !config.IsNull() {\n\t\terrs = append(errs, path.NewErrorf(\"planned for absense but config wants existence\"))\n\t\treturn errs\n\t}\n\tif config.IsNull() && !plannedState.IsNull() {\n\t\terrs = append(errs, path.NewErrorf(\"planned for existence but config wants absense\"))\n\t\treturn errs\n\t}\n\tif plannedState.IsNull() {\n\t\t// No further checks possible if the planned value is null\n\t\treturn errs\n\t}\n\n\timpTy := schema.ImpliedType()\n\n\tfor name, attrS := range schema.Attributes {\n\t\tplannedV := plannedState.GetAttr(name)\n\t\tconfigV := config.GetAttr(name)\n\t\tpriorV := cty.NullVal(attrS.Type)\n\t\tif !priorState.IsNull() {\n\t\t\tpriorV = priorState.GetAttr(name)\n\t\t}\n\n\t\tpath := append(path, cty.GetAttrStep{Name: name})\n\t\tmoreErrs := assertPlannedValueValid(attrS, priorV, configV, plannedV, path)\n\t\terrs = append(errs, moreErrs...)\n\t}\n\tfor name, blockS := range schema.BlockTypes {\n\t\tpath := append(path, cty.GetAttrStep{Name: name})\n\t\tplannedV := plannedState.GetAttr(name)\n\t\tconfigV := config.GetAttr(name)\n\t\tpriorV := cty.NullVal(impTy.AttributeType(name))\n\t\tif !priorState.IsNull() {\n\t\t\tpriorV = priorState.GetAttr(name)\n\t\t}\n\t\tif plannedV.RawEquals(configV) {\n\t\t\t// Easy path: nothing has changed at all\n\t\t\tcontinue\n\t\t}\n\t\tif !plannedV.IsKnown() {\n\t\t\terrs = append(errs, path.NewErrorf(\"attribute representing nested block must not be unknown itself; set nested attribute values to unknown instead\"))\n\t\t\tcontinue\n\t\t}\n\n\t\tswitch blockS.Nesting {\n\t\tcase configschema.NestingSingle, configschema.NestingGroup:\n\t\t\tmoreErrs := assertPlanValid(&blockS.Block, priorV, configV, plannedV, path)\n\t\t\terrs = append(errs, moreErrs...)\n\t\tcase configschema.NestingList:\n\t\t\t// A NestingList might either be a list or a tuple, depending on\n\t\t\t// whether there are dynamically-typed attributes inside. However,\n\t\t\t// both support a similar-enough API that we can treat them the\n\t\t\t// same for our purposes here.\n\t\t\tif plannedV.IsNull() {\n\t\t\t\terrs = append(errs, path.NewErrorf(\"attribute representing a list of nested blocks must be empty to indicate no blocks, not null\"))\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tplannedL := plannedV.LengthInt()\n\t\t\tconfigL := configV.LengthInt()\n\t\t\tif plannedL != configL {\n\t\t\t\terrs = append(errs, path.NewErrorf(\"block count in plan (%d) disagrees with count in config (%d)\", plannedL, configL))\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tfor it := plannedV.ElementIterator(); it.Next(); {\n\t\t\t\tidx, plannedEV := it.Element()\n\t\t\t\tpath := append(path, cty.IndexStep{Key: idx})\n\t\t\t\tif !plannedEV.IsKnown() {\n\t\t\t\t\terrs = append(errs, path.NewErrorf(\"element representing nested block must not be unknown itself; set nested attribute values to unknown instead\"))\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif !configV.HasIndex(idx).True() {\n\t\t\t\t\tcontinue // should never happen since we checked the lengths above\n\t\t\t\t}\n\t\t\t\tconfigEV := configV.Index(idx)\n\t\t\t\tpriorEV := cty.NullVal(blockS.ImpliedType())\n\t\t\t\tif !priorV.IsNull() && priorV.HasIndex(idx).True() {\n\t\t\t\t\tpriorEV = priorV.Index(idx)\n\t\t\t\t}\n\n\t\t\t\tmoreErrs := assertPlanValid(&blockS.Block, priorEV, configEV, plannedEV, path)\n\t\t\t\terrs = append(errs, moreErrs...)\n\t\t\t}\n\t\tcase configschema.NestingMap:\n\t\t\tif plannedV.IsNull() {\n\t\t\t\terrs = append(errs, path.NewErrorf(\"attribute representing a map of nested blocks must be empty to indicate no blocks, not null\"))\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// A NestingMap might either be a map or an object, depending on\n\t\t\t// whether there are dynamically-typed attributes inside, but\n\t\t\t// that's decided statically and so all values will have the same\n\t\t\t// kind.\n\t\t\tif plannedV.Type().IsObjectType() {\n\t\t\t\tplannedAtys := plannedV.Type().AttributeTypes()\n\t\t\t\tconfigAtys := configV.Type().AttributeTypes()\n\t\t\t\tfor k := range plannedAtys {\n\t\t\t\t\tif _, ok := configAtys[k]; !ok {\n\t\t\t\t\t\terrs = append(errs, path.NewErrorf(\"block key %q from plan is not present in config\", k))\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tpath := append(path, cty.GetAttrStep{Name: k})\n\n\t\t\t\t\tplannedEV := plannedV.GetAttr(k)\n\t\t\t\t\tif !plannedEV.IsKnown() {\n\t\t\t\t\t\terrs = append(errs, path.NewErrorf(\"element representing nested block must not be unknown itself; set nested attribute values to unknown instead\"))\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tconfigEV := configV.GetAttr(k)\n\t\t\t\t\tpriorEV := cty.NullVal(blockS.ImpliedType())\n\t\t\t\t\tif !priorV.IsNull() && priorV.Type().HasAttribute(k) {\n\t\t\t\t\t\tpriorEV = priorV.GetAttr(k)\n\t\t\t\t\t}\n\t\t\t\t\tmoreErrs := assertPlanValid(&blockS.Block, priorEV, configEV, plannedEV, path)\n\t\t\t\t\terrs = append(errs, moreErrs...)\n\t\t\t\t}\n\t\t\t\tfor k := range configAtys {\n\t\t\t\t\tif _, ok := plannedAtys[k]; !ok {\n\t\t\t\t\t\terrs = append(errs, path.NewErrorf(\"block key %q from config is not present in plan\", k))\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tplannedL := plannedV.LengthInt()\n\t\t\t\tconfigL := configV.LengthInt()\n\t\t\t\tif plannedL != configL {\n\t\t\t\t\terrs = append(errs, path.NewErrorf(\"block count in plan (%d) disagrees with count in config (%d)\", plannedL, configL))\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tfor it := plannedV.ElementIterator(); it.Next(); {\n\t\t\t\t\tidx, plannedEV := it.Element()\n\t\t\t\t\tpath := append(path, cty.IndexStep{Key: idx})\n\t\t\t\t\tif !plannedEV.IsKnown() {\n\t\t\t\t\t\terrs = append(errs, path.NewErrorf(\"element representing nested block must not be unknown itself; set nested attribute values to unknown instead\"))\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tk := idx.AsString()\n\t\t\t\t\tif !configV.HasIndex(idx).True() {\n\t\t\t\t\t\terrs = append(errs, path.NewErrorf(\"block key %q from plan is not present in config\", k))\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tconfigEV := configV.Index(idx)\n\t\t\t\t\tpriorEV := cty.NullVal(blockS.ImpliedType())\n\t\t\t\t\tif !priorV.IsNull() && priorV.HasIndex(idx).True() {\n\t\t\t\t\t\tpriorEV = priorV.Index(idx)\n\t\t\t\t\t}\n\t\t\t\t\tmoreErrs := assertPlanValid(&blockS.Block, priorEV, configEV, plannedEV, path)\n\t\t\t\t\terrs = append(errs, moreErrs...)\n\t\t\t\t}\n\t\t\t\tfor it := configV.ElementIterator(); it.Next(); {\n\t\t\t\t\tidx, _ := it.Element()\n\t\t\t\t\tif !plannedV.HasIndex(idx).True() {\n\t\t\t\t\t\terrs = append(errs, path.NewErrorf(\"block key %q from config is not present in plan\", idx.AsString()))\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\tcase configschema.NestingSet:\n\t\t\tif plannedV.IsNull() {\n\t\t\t\terrs = append(errs, path.NewErrorf(\"attribute representing a set of nested blocks must be empty to indicate no blocks, not null\"))\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// Because set elements have no identifier with which to correlate\n\t\t\t// them, we can't robustly validate the plan for a nested block\n\t\t\t// backed by a set, and so unfortunately we need to just trust the\n\t\t\t// provider to do the right thing. :(\n\t\t\t//\n\t\t\t// (In principle we could correlate elements by matching the\n\t\t\t// subset of attributes explicitly set in config, except for the\n\t\t\t// special diff suppression rule which allows for there to be a\n\t\t\t// planned value that is constructed by mixing part of a prior\n\t\t\t// value with part of a config value, creating an entirely new\n\t\t\t// element that is not present in either prior nor config.)\n\t\t\tfor it := plannedV.ElementIterator(); it.Next(); {\n\t\t\t\tidx, plannedEV := it.Element()\n\t\t\t\tpath := append(path, cty.IndexStep{Key: idx})\n\t\t\t\tif !plannedEV.IsKnown() {\n\t\t\t\t\terrs = append(errs, path.NewErrorf(\"element representing nested block must not be unknown itself; set nested attribute values to unknown instead\"))\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\n\t\tdefault:\n\t\t\tpanic(fmt.Sprintf(\"unsupported nesting mode %s\", blockS.Nesting))\n\t\t}\n\t}\n\n\treturn errs\n}\n\nfunc assertPlannedValueValid(attrS *configschema.Attribute, priorV, configV, plannedV cty.Value, path cty.Path) []error {\n\tvar errs []error\n\tif plannedV.RawEquals(configV) {\n\t\t// This is the easy path: provider didn't change anything at all.\n\t\treturn errs\n\t}\n\tif plannedV.RawEquals(priorV) && !priorV.IsNull() {\n\t\t// Also pretty easy: there is a prior value and the provider has\n\t\t// returned it unchanged. This indicates that configV and plannedV\n\t\t// are functionally equivalent and so the provider wishes to disregard\n\t\t// the configuration value in favor of the prior.\n\t\treturn errs\n\t}\n\tif attrS.Computed && configV.IsNull() {\n\t\t// The provider is allowed to change the value of any computed\n\t\t// attribute that isn't explicitly set in the config.\n\t\treturn errs\n\t}\n\n\t// If none of the above conditions match, the provider has made an invalid\n\t// change to this attribute.\n\tif priorV.IsNull() {\n\t\tif attrS.Sensitive {\n\t\t\terrs = append(errs, path.NewErrorf(\"sensitive planned value does not match config value\"))\n\t\t} else {\n\t\t\terrs = append(errs, path.NewErrorf(\"planned value %#v does not match config value %#v\", plannedV, configV))\n\t\t}\n\t\treturn errs\n\t}\n\tif attrS.Sensitive {\n\t\terrs = append(errs, path.NewErrorf(\"sensitive planned value does not match config value nor prior value\"))\n\t} else {\n\t\terrs = append(errs, path.NewErrorf(\"planned value %#v does not match config value %#v nor prior value %#v\", plannedV, configV, priorV))\n\t}\n\treturn errs\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/plans/plan.go",
    "content": "package plans\n\nimport (\n\t\"sort\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/configs/configschema\"\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// Plan is the top-level type representing a planned set of changes.\n//\n// A plan is a summary of the set of changes required to move from a current\n// state to a goal state derived from configuration. The described changes\n// are not applied directly, but contain an approximation of the final\n// result that will be completed during apply by resolving any values that\n// cannot be predicted.\n//\n// A plan must always be accompanied by the state and configuration it was\n// built from, since the plan does not itself include all of the information\n// required to make the changes indicated.\ntype Plan struct {\n\tVariableValues  map[string]DynamicValue\n\tChanges         *Changes\n\tTargetAddrs     []addrs.Targetable\n\tProviderSHA256s map[string][]byte\n\tBackend         Backend\n}\n\n// Backend represents the backend-related configuration and other data as it\n// existed when a plan was created.\ntype Backend struct {\n\t// Type is the type of backend that the plan will apply against.\n\tType string\n\n\t// Config is the configuration of the backend, whose schema is decided by\n\t// the backend Type.\n\tConfig DynamicValue\n\n\t// Workspace is the name of the workspace that was active when the plan\n\t// was created. It is illegal to apply a plan created for one workspace\n\t// to the state of another workspace.\n\t// (This constraint is already enforced by the statefile lineage mechanism,\n\t// but storing this explicitly allows us to return a better error message\n\t// in the situation where the user has the wrong workspace selected.)\n\tWorkspace string\n}\n\nfunc NewBackend(typeName string, config cty.Value, configSchema *configschema.Block, workspaceName string) (*Backend, error) {\n\tdv, err := NewDynamicValue(config, configSchema.ImpliedType())\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &Backend{\n\t\tType:      typeName,\n\t\tConfig:    dv,\n\t\tWorkspace: workspaceName,\n\t}, nil\n}\n\n// ProviderAddrs returns a list of all of the provider configuration addresses\n// referenced throughout the receiving plan.\n//\n// The result is de-duplicated so that each distinct address appears only once.\nfunc (p *Plan) ProviderAddrs() []addrs.AbsProviderConfig {\n\tif p == nil || p.Changes == nil {\n\t\treturn nil\n\t}\n\n\tm := map[string]addrs.AbsProviderConfig{}\n\tfor _, rc := range p.Changes.Resources {\n\t\tm[rc.ProviderAddr.String()] = rc.ProviderAddr\n\t}\n\tif len(m) == 0 {\n\t\treturn nil\n\t}\n\n\t// This is mainly just so we'll get stable results for testing purposes.\n\tkeys := make([]string, 0, len(m))\n\tfor k := range m {\n\t\tkeys = append(keys, k)\n\t}\n\tsort.Strings(keys)\n\n\tret := make([]addrs.AbsProviderConfig, len(keys))\n\tfor i, key := range keys {\n\t\tret[i] = m[key]\n\t}\n\n\treturn ret\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/plugin/client.go",
    "content": "package plugin\n\nimport (\n\t\"os\"\n\t\"os/exec\"\n\n\thclog \"github.com/hashicorp/go-hclog\"\n\tplugin \"github.com/hashicorp/go-plugin\"\n\t\"github.com/hashicorp/terraform/plugin/discovery\"\n)\n\n// ClientConfig returns a configuration object that can be used to instantiate\n// a client for the plugin described by the given metadata.\nfunc ClientConfig(m discovery.PluginMeta) *plugin.ClientConfig {\n\tlogger := hclog.New(&hclog.LoggerOptions{\n\t\tName:   \"plugin\",\n\t\tLevel:  hclog.Trace,\n\t\tOutput: os.Stderr,\n\t})\n\n\treturn &plugin.ClientConfig{\n\t\tCmd:              exec.Command(m.Path),\n\t\tHandshakeConfig:  Handshake,\n\t\tVersionedPlugins: VersionedPlugins,\n\t\tManaged:          true,\n\t\tLogger:           logger,\n\t\tAllowedProtocols: []plugin.Protocol{plugin.ProtocolGRPC},\n\t\tAutoMTLS:         true,\n\t}\n}\n\n// Client returns a plugin client for the plugin described by the given metadata.\nfunc Client(m discovery.PluginMeta) *plugin.Client {\n\treturn plugin.NewClient(ClientConfig(m))\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/plugin/convert/diagnostics.go",
    "content": "package convert\n\nimport (\n\tproto \"github.com/hashicorp/terraform/internal/tfplugin5\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// WarnsAndErrorsToProto converts the warnings and errors return by the legacy\n// provider to protobuf diagnostics.\nfunc WarnsAndErrsToProto(warns []string, errs []error) (diags []*proto.Diagnostic) {\n\tfor _, w := range warns {\n\t\tdiags = AppendProtoDiag(diags, w)\n\t}\n\n\tfor _, e := range errs {\n\t\tdiags = AppendProtoDiag(diags, e)\n\t}\n\n\treturn diags\n}\n\n// AppendProtoDiag appends a new diagnostic from a warning string or an error.\n// This panics if d is not a string or error.\nfunc AppendProtoDiag(diags []*proto.Diagnostic, d interface{}) []*proto.Diagnostic {\n\tswitch d := d.(type) {\n\tcase cty.PathError:\n\t\tap := PathToAttributePath(d.Path)\n\t\tdiags = append(diags, &proto.Diagnostic{\n\t\t\tSeverity:  proto.Diagnostic_ERROR,\n\t\t\tSummary:   d.Error(),\n\t\t\tAttribute: ap,\n\t\t})\n\tcase error:\n\t\tdiags = append(diags, &proto.Diagnostic{\n\t\t\tSeverity: proto.Diagnostic_ERROR,\n\t\t\tSummary:  d.Error(),\n\t\t})\n\tcase string:\n\t\tdiags = append(diags, &proto.Diagnostic{\n\t\t\tSeverity: proto.Diagnostic_WARNING,\n\t\t\tSummary:  d,\n\t\t})\n\tcase *proto.Diagnostic:\n\t\tdiags = append(diags, d)\n\tcase []*proto.Diagnostic:\n\t\tdiags = append(diags, d...)\n\t}\n\treturn diags\n}\n\n// ProtoToDiagnostics converts a list of proto.Diagnostics to a tf.Diagnostics.\nfunc ProtoToDiagnostics(ds []*proto.Diagnostic) tfdiags.Diagnostics {\n\tvar diags tfdiags.Diagnostics\n\tfor _, d := range ds {\n\t\tvar severity tfdiags.Severity\n\n\t\tswitch d.Severity {\n\t\tcase proto.Diagnostic_ERROR:\n\t\t\tseverity = tfdiags.Error\n\t\tcase proto.Diagnostic_WARNING:\n\t\t\tseverity = tfdiags.Warning\n\t\t}\n\n\t\tvar newDiag tfdiags.Diagnostic\n\n\t\t// if there's an attribute path, we need to create a AttributeValue diagnostic\n\t\tif d.Attribute != nil {\n\t\t\tpath := AttributePathToPath(d.Attribute)\n\t\t\tnewDiag = tfdiags.AttributeValue(severity, d.Summary, d.Detail, path)\n\t\t} else {\n\t\t\tnewDiag = tfdiags.WholeContainingBody(severity, d.Summary, d.Detail)\n\t\t}\n\n\t\tdiags = diags.Append(newDiag)\n\t}\n\n\treturn diags\n}\n\n// AttributePathToPath takes the proto encoded path and converts it to a cty.Path\nfunc AttributePathToPath(ap *proto.AttributePath) cty.Path {\n\tvar p cty.Path\n\tfor _, step := range ap.Steps {\n\t\tswitch selector := step.Selector.(type) {\n\t\tcase *proto.AttributePath_Step_AttributeName:\n\t\t\tp = p.GetAttr(selector.AttributeName)\n\t\tcase *proto.AttributePath_Step_ElementKeyString:\n\t\t\tp = p.Index(cty.StringVal(selector.ElementKeyString))\n\t\tcase *proto.AttributePath_Step_ElementKeyInt:\n\t\t\tp = p.Index(cty.NumberIntVal(selector.ElementKeyInt))\n\t\t}\n\t}\n\treturn p\n}\n\n// AttributePathToPath takes a cty.Path and converts it to a proto-encoded path.\nfunc PathToAttributePath(p cty.Path) *proto.AttributePath {\n\tap := &proto.AttributePath{}\n\tfor _, step := range p {\n\t\tswitch selector := step.(type) {\n\t\tcase cty.GetAttrStep:\n\t\t\tap.Steps = append(ap.Steps, &proto.AttributePath_Step{\n\t\t\t\tSelector: &proto.AttributePath_Step_AttributeName{\n\t\t\t\t\tAttributeName: selector.Name,\n\t\t\t\t},\n\t\t\t})\n\t\tcase cty.IndexStep:\n\t\t\tkey := selector.Key\n\t\t\tswitch key.Type() {\n\t\t\tcase cty.String:\n\t\t\t\tap.Steps = append(ap.Steps, &proto.AttributePath_Step{\n\t\t\t\t\tSelector: &proto.AttributePath_Step_ElementKeyString{\n\t\t\t\t\t\tElementKeyString: key.AsString(),\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\tcase cty.Number:\n\t\t\t\tv, _ := key.AsBigFloat().Int64()\n\t\t\t\tap.Steps = append(ap.Steps, &proto.AttributePath_Step{\n\t\t\t\t\tSelector: &proto.AttributePath_Step_ElementKeyInt{\n\t\t\t\t\t\tElementKeyInt: v,\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\tdefault:\n\t\t\t\t// We'll bail early if we encounter anything else, and just\n\t\t\t\t// return the valid prefix.\n\t\t\t\treturn ap\n\t\t\t}\n\t\t}\n\t}\n\treturn ap\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/plugin/convert/schema.go",
    "content": "package convert\n\nimport (\n\t\"encoding/json\"\n\t\"reflect\"\n\t\"sort\"\n\n\t\"github.com/hashicorp/terraform/configs/configschema\"\n\tproto \"github.com/hashicorp/terraform/internal/tfplugin5\"\n\t\"github.com/hashicorp/terraform/providers\"\n)\n\n// ConfigSchemaToProto takes a *configschema.Block and converts it to a\n// proto.Schema_Block for a grpc response.\nfunc ConfigSchemaToProto(b *configschema.Block) *proto.Schema_Block {\n\tblock := &proto.Schema_Block{}\n\n\tfor _, name := range sortedKeys(b.Attributes) {\n\t\ta := b.Attributes[name]\n\t\tattr := &proto.Schema_Attribute{\n\t\t\tName:        name,\n\t\t\tDescription: a.Description,\n\t\t\tOptional:    a.Optional,\n\t\t\tComputed:    a.Computed,\n\t\t\tRequired:    a.Required,\n\t\t\tSensitive:   a.Sensitive,\n\t\t}\n\n\t\tty, err := json.Marshal(a.Type)\n\t\tif err != nil {\n\t\t\tpanic(err)\n\t\t}\n\n\t\tattr.Type = ty\n\n\t\tblock.Attributes = append(block.Attributes, attr)\n\t}\n\n\tfor _, name := range sortedKeys(b.BlockTypes) {\n\t\tb := b.BlockTypes[name]\n\t\tblock.BlockTypes = append(block.BlockTypes, protoSchemaNestedBlock(name, b))\n\t}\n\n\treturn block\n}\n\nfunc protoSchemaNestedBlock(name string, b *configschema.NestedBlock) *proto.Schema_NestedBlock {\n\tvar nesting proto.Schema_NestedBlock_NestingMode\n\tswitch b.Nesting {\n\tcase configschema.NestingSingle:\n\t\tnesting = proto.Schema_NestedBlock_SINGLE\n\tcase configschema.NestingGroup:\n\t\tnesting = proto.Schema_NestedBlock_GROUP\n\tcase configschema.NestingList:\n\t\tnesting = proto.Schema_NestedBlock_LIST\n\tcase configschema.NestingSet:\n\t\tnesting = proto.Schema_NestedBlock_SET\n\tcase configschema.NestingMap:\n\t\tnesting = proto.Schema_NestedBlock_MAP\n\tdefault:\n\t\tnesting = proto.Schema_NestedBlock_INVALID\n\t}\n\treturn &proto.Schema_NestedBlock{\n\t\tTypeName: name,\n\t\tBlock:    ConfigSchemaToProto(&b.Block),\n\t\tNesting:  nesting,\n\t\tMinItems: int64(b.MinItems),\n\t\tMaxItems: int64(b.MaxItems),\n\t}\n}\n\n// ProtoToProviderSchema takes a proto.Schema and converts it to a providers.Schema.\nfunc ProtoToProviderSchema(s *proto.Schema) providers.Schema {\n\treturn providers.Schema{\n\t\tVersion: s.Version,\n\t\tBlock:   ProtoToConfigSchema(s.Block),\n\t}\n}\n\n// ProtoToConfigSchema takes the GetSchcema_Block from a grpc response and converts it\n// to a terraform *configschema.Block.\nfunc ProtoToConfigSchema(b *proto.Schema_Block) *configschema.Block {\n\tblock := &configschema.Block{\n\t\tAttributes: make(map[string]*configschema.Attribute),\n\t\tBlockTypes: make(map[string]*configschema.NestedBlock),\n\t}\n\n\tfor _, a := range b.Attributes {\n\t\tattr := &configschema.Attribute{\n\t\t\tDescription: a.Description,\n\t\t\tRequired:    a.Required,\n\t\t\tOptional:    a.Optional,\n\t\t\tComputed:    a.Computed,\n\t\t\tSensitive:   a.Sensitive,\n\t\t}\n\n\t\tif err := json.Unmarshal(a.Type, &attr.Type); err != nil {\n\t\t\tpanic(err)\n\t\t}\n\n\t\tblock.Attributes[a.Name] = attr\n\t}\n\n\tfor _, b := range b.BlockTypes {\n\t\tblock.BlockTypes[b.TypeName] = schemaNestedBlock(b)\n\t}\n\n\treturn block\n}\n\nfunc schemaNestedBlock(b *proto.Schema_NestedBlock) *configschema.NestedBlock {\n\tvar nesting configschema.NestingMode\n\tswitch b.Nesting {\n\tcase proto.Schema_NestedBlock_SINGLE:\n\t\tnesting = configschema.NestingSingle\n\tcase proto.Schema_NestedBlock_GROUP:\n\t\tnesting = configschema.NestingGroup\n\tcase proto.Schema_NestedBlock_LIST:\n\t\tnesting = configschema.NestingList\n\tcase proto.Schema_NestedBlock_MAP:\n\t\tnesting = configschema.NestingMap\n\tcase proto.Schema_NestedBlock_SET:\n\t\tnesting = configschema.NestingSet\n\tdefault:\n\t\t// In all other cases we'll leave it as the zero value (invalid) and\n\t\t// let the caller validate it and deal with this.\n\t}\n\n\tnb := &configschema.NestedBlock{\n\t\tNesting:  nesting,\n\t\tMinItems: int(b.MinItems),\n\t\tMaxItems: int(b.MaxItems),\n\t}\n\n\tnested := ProtoToConfigSchema(b.Block)\n\tnb.Block = *nested\n\treturn nb\n}\n\n// sortedKeys returns the lexically sorted keys from the given map. This is\n// used to make schema conversions are deterministic. This panics if map keys\n// are not a string.\nfunc sortedKeys(m interface{}) []string {\n\tv := reflect.ValueOf(m)\n\tkeys := make([]string, v.Len())\n\n\tmapKeys := v.MapKeys()\n\tfor i, k := range mapKeys {\n\t\tkeys[i] = k.Interface().(string)\n\t}\n\n\tsort.Strings(keys)\n\treturn keys\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/plugin/discovery/error.go",
    "content": "package discovery\n\n// Error is a type used to describe situations that the caller must handle\n// since they indicate some form of user error.\n//\n// The functions and methods that return these specialized errors indicate so\n// in their documentation. The Error type should not itself be used directly,\n// but rather errors should be compared using the == operator with the\n// error constants in this package.\n//\n// Values of this type are _not_ used when the error being reported is an\n// operational error (server unavailable, etc) or indicative of a bug in\n// this package or its caller.\ntype Error string\n\n// ErrorNoSuitableVersion indicates that a suitable version (meeting given\n// constraints) is not available.\nconst ErrorNoSuitableVersion = Error(\"no suitable version is available\")\n\n// ErrorNoVersionCompatible indicates that all of the available versions\n// that otherwise met constraints are not compatible with the current\n// version of Terraform.\nconst ErrorNoVersionCompatible = Error(\"no available version is compatible with this version of Terraform\")\n\n// ErrorVersionIncompatible indicates that all of the versions within the\n// constraints are not compatible with the current version of Terrafrom, though\n// there does exist a version outside of the constaints that is compatible.\nconst ErrorVersionIncompatible = Error(\"incompatible provider version\")\n\n// ErrorNoSuchProvider indicates that no provider exists with a name given\nconst ErrorNoSuchProvider = Error(\"no provider exists with the given name\")\n\n// ErrorNoVersionCompatibleWithPlatform indicates that all of the available\n// versions that otherwise met constraints are not compatible with the\n// requested platform\nconst ErrorNoVersionCompatibleWithPlatform = Error(\"no available version is compatible for the requested platform\")\n\n// ErrorMissingChecksumVerification indicates that either the provider\n// distribution is missing the SHA256SUMS file or the checksum file does\n// not contain a checksum for the binary plugin\nconst ErrorMissingChecksumVerification = Error(\"unable to verify checksum\")\n\n// ErrorChecksumVerification indicates that the current checksum of the\n// provider plugin has changed since the initial release and is not trusted\n// to download\nconst ErrorChecksumVerification = Error(\"unexpected plugin checksum\")\n\n// ErrorSignatureVerification indicates that the digital signature for a\n// provider distribution could not be verified for one of the following\n// reasons: missing signature file, missing public key, or the signature\n// was not signed by any known key for the publisher\nconst ErrorSignatureVerification = Error(\"unable to verify signature\")\n\n// ErrorServiceUnreachable indicates that the network was unable to connect\n// to the registry service\nconst ErrorServiceUnreachable = Error(\"registry service is unreachable\")\n\n// ErrorPublicRegistryUnreachable indicates that the network was unable to connect\n// to the public registry in particular, so we can show a link to the statuspage\nconst ErrorPublicRegistryUnreachable = Error(\"registry service is unreachable, check https://status.hashicorp.com/ for status updates\")\n\nfunc (err Error) Error() string {\n\treturn string(err)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/plugin/discovery/find.go",
    "content": "package discovery\n\nimport (\n\t\"io/ioutil\"\n\t\"log\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n)\n\n// FindPlugins looks in the given directories for files whose filenames\n// suggest that they are plugins of the given kind (e.g. \"provider\") and\n// returns a PluginMetaSet representing the discovered potential-plugins.\n//\n// Currently this supports two different naming schemes. The current\n// standard naming scheme is a subdirectory called $GOOS-$GOARCH containing\n// files named terraform-$KIND-$NAME-V$VERSION. The legacy naming scheme is\n// files directly in the given directory whose names are like\n// terraform-$KIND-$NAME.\n//\n// Only one plugin will be returned for each unique plugin (name, version)\n// pair, with preference given to files found in earlier directories.\n//\n// This is a convenience wrapper around FindPluginPaths and ResolvePluginsPaths.\nfunc FindPlugins(kind string, dirs []string) PluginMetaSet {\n\treturn ResolvePluginPaths(FindPluginPaths(kind, dirs))\n}\n\n// FindPluginPaths looks in the given directories for files whose filenames\n// suggest that they are plugins of the given kind (e.g. \"provider\").\n//\n// The return value is a list of absolute paths that appear to refer to\n// plugins in the given directories, based only on what can be inferred\n// from the naming scheme. The paths returned are ordered such that files\n// in later dirs appear after files in earlier dirs in the given directory\n// list. Within the same directory plugins are returned in a consistent but\n// undefined order.\nfunc FindPluginPaths(kind string, dirs []string) []string {\n\t// This is just a thin wrapper around findPluginPaths so that we can\n\t// use the latter in tests with a fake machineName so we can use our\n\t// test fixtures.\n\treturn findPluginPaths(kind, dirs)\n}\n\nfunc findPluginPaths(kind string, dirs []string) []string {\n\tprefix := \"terraform-\" + kind + \"-\"\n\n\tret := make([]string, 0, len(dirs))\n\n\tfor _, dir := range dirs {\n\t\titems, err := ioutil.ReadDir(dir)\n\t\tif err != nil {\n\t\t\t// Ignore missing dirs, non-dirs, etc\n\t\t\tcontinue\n\t\t}\n\n\t\tlog.Printf(\"[DEBUG] checking for %s in %q\", kind, dir)\n\n\t\tfor _, item := range items {\n\t\t\tfullName := item.Name()\n\n\t\t\tif !strings.HasPrefix(fullName, prefix) {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// New-style paths must have a version segment in filename\n\t\t\tif strings.Contains(strings.ToLower(fullName), \"_v\") {\n\t\t\t\tabsPath, err := filepath.Abs(filepath.Join(dir, fullName))\n\t\t\t\tif err != nil {\n\t\t\t\t\tlog.Printf(\"[ERROR] plugin filepath error: %s\", err)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\t// Check that the file we found is usable\n\t\t\t\tif !pathIsFile(absPath) {\n\t\t\t\t\tlog.Printf(\"[ERROR] ignoring non-file %s\", absPath)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tlog.Printf(\"[DEBUG] found %s %q\", kind, fullName)\n\t\t\t\tret = append(ret, filepath.Clean(absPath))\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// Legacy style with files directly in the base directory\n\t\t\tabsPath, err := filepath.Abs(filepath.Join(dir, fullName))\n\t\t\tif err != nil {\n\t\t\t\tlog.Printf(\"[ERROR] plugin filepath error: %s\", err)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// Check that the file we found is usable\n\t\t\tif !pathIsFile(absPath) {\n\t\t\t\tlog.Printf(\"[ERROR] ignoring non-file %s\", absPath)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tlog.Printf(\"[WARN] found legacy %s %q\", kind, fullName)\n\n\t\t\tret = append(ret, filepath.Clean(absPath))\n\t\t}\n\t}\n\n\treturn ret\n}\n\n// Returns true if and only if the given path refers to a file or a symlink\n// to a file.\nfunc pathIsFile(path string) bool {\n\tinfo, err := os.Stat(path)\n\tif err != nil {\n\t\treturn false\n\t}\n\n\treturn !info.IsDir()\n}\n\n// ResolvePluginPaths takes a list of paths to plugin executables (as returned\n// by e.g. FindPluginPaths) and produces a PluginMetaSet describing the\n// referenced plugins.\n//\n// If the same combination of plugin name and version appears multiple times,\n// the earlier reference will be preferred. Several different versions of\n// the same plugin name may be returned, in which case the methods of\n// PluginMetaSet can be used to filter down.\nfunc ResolvePluginPaths(paths []string) PluginMetaSet {\n\ts := make(PluginMetaSet)\n\n\ttype nameVersion struct {\n\t\tName    string\n\t\tVersion string\n\t}\n\tfound := make(map[nameVersion]struct{})\n\n\tfor _, path := range paths {\n\t\tbaseName := strings.ToLower(filepath.Base(path))\n\t\tif !strings.HasPrefix(baseName, \"terraform-\") {\n\t\t\t// Should never happen with reasonable input\n\t\t\tcontinue\n\t\t}\n\n\t\tbaseName = baseName[10:]\n\t\tfirstDash := strings.Index(baseName, \"-\")\n\t\tif firstDash == -1 {\n\t\t\t// Should never happen with reasonable input\n\t\t\tcontinue\n\t\t}\n\n\t\tbaseName = baseName[firstDash+1:]\n\t\tif baseName == \"\" {\n\t\t\t// Should never happen with reasonable input\n\t\t\tcontinue\n\t\t}\n\n\t\t// Trim the .exe suffix used on Windows before we start wrangling\n\t\t// the remainder of the path.\n\t\tif strings.HasSuffix(baseName, \".exe\") {\n\t\t\tbaseName = baseName[:len(baseName)-4]\n\t\t}\n\n\t\tparts := strings.SplitN(baseName, \"_v\", 2)\n\t\tname := parts[0]\n\t\tversion := VersionZero\n\t\tif len(parts) == 2 {\n\t\t\tversion = parts[1]\n\t\t}\n\n\t\t// Auto-installed plugins contain an extra name portion representing\n\t\t// the expected plugin version, which we must trim off.\n\t\tif underX := strings.Index(version, \"_x\"); underX != -1 {\n\t\t\tversion = version[:underX]\n\t\t}\n\n\t\tif _, ok := found[nameVersion{name, version}]; ok {\n\t\t\t// Skip duplicate versions of the same plugin\n\t\t\t// (We do this during this step because after this we will be\n\t\t\t// dealing with sets and thus lose our ordering with which to\n\t\t\t// decide preference.)\n\t\t\tcontinue\n\t\t}\n\n\t\ts.Add(PluginMeta{\n\t\t\tName:    name,\n\t\t\tVersion: VersionStr(version),\n\t\t\tPath:    path,\n\t\t})\n\t\tfound[nameVersion{name, version}] = struct{}{}\n\t}\n\n\treturn s\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/plugin/discovery/get.go",
    "content": "package discovery\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"log\"\n\t\"net/http\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"runtime\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/hashicorp/errwrap\"\n\tgetter \"github.com/hashicorp/go-getter\"\n\tmultierror \"github.com/hashicorp/go-multierror\"\n\t\"github.com/hashicorp/terraform/httpclient\"\n\t\"github.com/hashicorp/terraform/registry\"\n\t\"github.com/hashicorp/terraform/registry/regsrc\"\n\t\"github.com/hashicorp/terraform/registry/response\"\n\t\"github.com/hashicorp/terraform/svchost/disco\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n\ttfversion \"github.com/hashicorp/terraform/version\"\n\t\"github.com/mitchellh/cli\"\n)\n\n// Releases are located by querying the terraform registry.\n\nconst protocolVersionHeader = \"x-terraform-protocol-version\"\n\nvar httpClient *http.Client\n\nvar errVersionNotFound = errors.New(\"version not found\")\n\nfunc init() {\n\thttpClient = httpclient.New()\n\n\thttpGetter := &getter.HttpGetter{\n\t\tClient: httpClient,\n\t\tNetrc:  true,\n\t}\n\n\tgetter.Getters[\"http\"] = httpGetter\n\tgetter.Getters[\"https\"] = httpGetter\n}\n\n// An Installer maintains a local cache of plugins by downloading plugins\n// from an online repository.\ntype Installer interface {\n\tGet(name string, req Constraints) (PluginMeta, tfdiags.Diagnostics, error)\n\tPurgeUnused(used map[string]PluginMeta) (removed PluginMetaSet, err error)\n}\n\n// ProviderInstaller is an Installer implementation that knows how to\n// download Terraform providers from the official HashiCorp releases service\n// into a local directory. The files downloaded are compliant with the\n// naming scheme expected by FindPlugins, so the target directory of a\n// provider installer can be used as one of several plugin discovery sources.\ntype ProviderInstaller struct {\n\tDir string\n\n\t// Cache is used to access and update a local cache of plugins if non-nil.\n\t// Can be nil to disable caching.\n\tCache PluginCache\n\n\tPluginProtocolVersion uint\n\n\t// OS and Arch specify the OS and architecture that should be used when\n\t// installing plugins. These use the same labels as the runtime.GOOS and\n\t// runtime.GOARCH variables respectively, and indeed the values of these\n\t// are used as defaults if either of these is the empty string.\n\tOS   string\n\tArch string\n\n\t// Skip checksum and signature verification\n\tSkipVerify bool\n\n\tUi cli.Ui // Ui for output\n\n\t// Services is a required *disco.Disco, which may have services and\n\t// credentials pre-loaded.\n\tServices *disco.Disco\n\n\t// registry client\n\tregistry *registry.Client\n}\n\n// Get is part of an implementation of type Installer, and attempts to download\n// and install a Terraform provider matching the given constraints.\n//\n// This method may return one of a number of sentinel errors from this\n// package to indicate issues that are likely to be resolvable via user action:\n//\n//     ErrorNoSuchProvider: no provider with the given name exists in the repository.\n//     ErrorNoSuitableVersion: the provider exists but no available version matches constraints.\n//     ErrorNoVersionCompatible: a plugin was found within the constraints but it is\n//                               incompatible with the current Terraform version.\n//\n// These errors should be recognized and handled as special cases by the caller\n// to present a suitable user-oriented error message.\n//\n// All other errors indicate an internal problem that is likely _not_ solvable\n// through user action, or at least not within Terraform's scope. Error messages\n// are produced under the assumption that if presented to the user they will\n// be presented alongside context about what is being installed, and thus the\n// error messages do not redundantly include such information.\nfunc (i *ProviderInstaller) Get(provider string, req Constraints) (PluginMeta, tfdiags.Diagnostics, error) {\n\tvar diags tfdiags.Diagnostics\n\n\t// a little bit of initialization.\n\tif i.OS == \"\" {\n\t\ti.OS = runtime.GOOS\n\t}\n\tif i.Arch == \"\" {\n\t\ti.Arch = runtime.GOARCH\n\t}\n\tif i.registry == nil {\n\t\ti.registry = registry.NewClient(i.Services, nil)\n\t}\n\n\t// get a full listing of versions for the requested provider\n\tallVersions, err := i.listProviderVersions(provider)\n\n\t// TODO: return multiple errors\n\tif err != nil {\n\t\tlog.Printf(\"[DEBUG] %s\", err)\n\t\tif registry.IsServiceUnreachable(err) {\n\t\t\tregistryHost, err := i.hostname()\n\t\t\tif err == nil && registryHost == regsrc.PublicRegistryHost.Raw {\n\t\t\t\treturn PluginMeta{}, diags, ErrorPublicRegistryUnreachable\n\t\t\t}\n\t\t\treturn PluginMeta{}, diags, ErrorServiceUnreachable\n\t\t}\n\t\tif registry.IsServiceNotProvided(err) {\n\t\t\treturn PluginMeta{}, diags, err\n\t\t}\n\t\treturn PluginMeta{}, diags, ErrorNoSuchProvider\n\t}\n\n\t// Add any warnings from the response to diags\n\tfor _, warning := range allVersions.Warnings {\n\t\thostname, err := i.hostname()\n\t\tif err != nil {\n\t\t\treturn PluginMeta{}, diags, err\n\t\t}\n\t\tdiag := tfdiags.SimpleWarning(fmt.Sprintf(\"%s: %s\", hostname, warning))\n\t\tdiags = diags.Append(diag)\n\t}\n\n\tif len(allVersions.Versions) == 0 {\n\t\treturn PluginMeta{}, diags, ErrorNoSuitableVersion\n\t}\n\tproviderSource := allVersions.ID\n\n\t// Filter the list of plugin versions to those which meet the version constraints\n\tversions := allowedVersions(allVersions, req)\n\tif len(versions) == 0 {\n\t\treturn PluginMeta{}, diags, ErrorNoSuitableVersion\n\t}\n\n\t// sort them newest to oldest. The newest version wins!\n\tresponse.ProviderVersionCollection(versions).Sort()\n\n\t// if the chosen provider version does not support the requested platform,\n\t// filter the list of acceptable versions to those that support that platform\n\tif err := i.checkPlatformCompatibility(versions[0]); err != nil {\n\t\tversions = i.platformCompatibleVersions(versions)\n\t\tif len(versions) == 0 {\n\t\t\treturn PluginMeta{}, diags, ErrorNoVersionCompatibleWithPlatform\n\t\t}\n\t}\n\n\t// we now have a winning platform-compatible version\n\tversionMeta := versions[0]\n\tv := VersionStr(versionMeta.Version).MustParse()\n\n\t// check protocol compatibility\n\tif err := i.checkPluginProtocol(versionMeta); err != nil {\n\t\tclosestMatch, err := i.findClosestProtocolCompatibleVersion(allVersions.Versions)\n\t\tif err != nil {\n\t\t\t// No operation here if we can't find a version with compatible protocol\n\t\t\treturn PluginMeta{}, diags, err\n\t\t}\n\n\t\t// Prompt version suggestion to UI based on closest protocol match\n\t\tvar errMsg string\n\t\tclosestVersion := VersionStr(closestMatch.Version).MustParse()\n\t\tif v.NewerThan(closestVersion) {\n\t\t\terrMsg = providerProtocolTooNew\n\t\t} else {\n\t\t\terrMsg = providerProtocolTooOld\n\t\t}\n\n\t\tconstraintStr := req.String()\n\t\tif constraintStr == \"\" {\n\t\t\tconstraintStr = \"(any version)\"\n\t\t}\n\n\t\treturn PluginMeta{}, diags, errwrap.Wrap(ErrorVersionIncompatible, fmt.Errorf(fmt.Sprintf(\n\t\t\terrMsg, provider, v.String(), tfversion.String(),\n\t\t\tclosestVersion.String(), closestVersion.MinorUpgradeConstraintStr(), constraintStr)))\n\t}\n\n\tdownloadURLs, err := i.listProviderDownloadURLs(providerSource, versionMeta.Version)\n\tproviderURL := downloadURLs.DownloadURL\n\n\tif !i.SkipVerify {\n\t\t// Terraform verifies the integrity of a provider release before downloading\n\t\t// the plugin binary. The digital signature (SHA256SUMS.sig) on the\n\t\t// release distribution (SHA256SUMS) is verified with the public key of the\n\t\t// publisher provided in the Terraform Registry response, ensuring that\n\t\t// everything is as intended by the publisher. The checksum of the provider\n\t\t// plugin is expected in the SHA256SUMS file and is double checked to match\n\t\t// the checksum of the original published release to the Registry. This\n\t\t// enforces immutability of releases between the Registry and the plugin's\n\t\t// host location. Lastly, the integrity of the binary is verified upon\n\t\t// download matches the Registry and signed checksum.\n\t\tsha256, err := i.getProviderChecksum(downloadURLs)\n\t\tif err != nil {\n\t\t\treturn PluginMeta{}, diags, err\n\t\t}\n\n\t\t// add the checksum parameter for go-getter to verify the download for us.\n\t\tif sha256 != \"\" {\n\t\t\tproviderURL = providerURL + \"?checksum=sha256:\" + sha256\n\t\t}\n\t}\n\n\tprintedProviderName := fmt.Sprintf(\"%q (%s)\", provider, providerSource)\n\ti.Ui.Info(fmt.Sprintf(\"- Downloading plugin for provider %s %s...\", printedProviderName, versionMeta.Version))\n\tlog.Printf(\"[DEBUG] getting provider %s version %q\", printedProviderName, versionMeta.Version)\n\terr = i.install(provider, v, providerURL)\n\tif err != nil {\n\t\treturn PluginMeta{}, diags, err\n\t}\n\n\t// Find what we just installed\n\t// (This is weird, because go-getter doesn't directly return\n\t//  information about what was extracted, and we just extracted\n\t//  the archive directly into a shared dir here.)\n\tlog.Printf(\"[DEBUG] looking for the %s %s plugin we just installed\", provider, versionMeta.Version)\n\tmetas := FindPlugins(\"provider\", []string{i.Dir})\n\tlog.Printf(\"[DEBUG] all plugins found %#v\", metas)\n\tmetas, _ = metas.ValidateVersions()\n\tmetas = metas.WithName(provider).WithVersion(v)\n\tlog.Printf(\"[DEBUG] filtered plugins %#v\", metas)\n\tif metas.Count() == 0 {\n\t\t// This should never happen. Suggests that the release archive\n\t\t// contains an executable file whose name doesn't match the\n\t\t// expected convention.\n\t\treturn PluginMeta{}, diags, fmt.Errorf(\n\t\t\t\"failed to find installed plugin version %s; this is a bug in Terraform and should be reported\",\n\t\t\tversionMeta.Version,\n\t\t)\n\t}\n\n\tif metas.Count() > 1 {\n\t\t// This should also never happen, and suggests that a\n\t\t// particular version was re-released with a different\n\t\t// executable filename. We consider releases as immutable, so\n\t\t// this is an error.\n\t\treturn PluginMeta{}, diags, fmt.Errorf(\n\t\t\t\"multiple plugins installed for version %s; this is a bug in Terraform and should be reported\",\n\t\t\tversionMeta.Version,\n\t\t)\n\t}\n\n\t// By now we know we have exactly one meta, and so \"Newest\" will\n\t// return that one.\n\treturn metas.Newest(), diags, nil\n}\n\nfunc (i *ProviderInstaller) install(provider string, version Version, url string) error {\n\tif i.Cache != nil {\n\t\tlog.Printf(\"[DEBUG] looking for provider %s %s in plugin cache\", provider, version)\n\t\tcached := i.Cache.CachedPluginPath(\"provider\", provider, version)\n\t\tif cached == \"\" {\n\t\t\tlog.Printf(\"[DEBUG] %s %s not yet in cache, so downloading %s\", provider, version, url)\n\t\t\terr := getter.Get(i.Cache.InstallDir(), url)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\t// should now be in cache\n\t\t\tcached = i.Cache.CachedPluginPath(\"provider\", provider, version)\n\t\t\tif cached == \"\" {\n\t\t\t\t// should never happen if the getter is behaving properly\n\t\t\t\t// and the plugins are packaged properly.\n\t\t\t\treturn fmt.Errorf(\"failed to find downloaded plugin in cache %s\", i.Cache.InstallDir())\n\t\t\t}\n\t\t}\n\n\t\t// Link or copy the cached binary into our install dir so the\n\t\t// normal resolution machinery can find it.\n\t\tfilename := filepath.Base(cached)\n\t\ttargetPath := filepath.Join(i.Dir, filename)\n\t\t// check if the target dir exists, and create it if not\n\t\tvar err error\n\t\tif _, StatErr := os.Stat(i.Dir); os.IsNotExist(StatErr) {\n\t\t\terr = os.MkdirAll(i.Dir, 0700)\n\t\t}\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tlog.Printf(\"[DEBUG] installing %s %s to %s from local cache %s\", provider, version, targetPath, cached)\n\n\t\t// Delete if we can. If there's nothing there already then no harm done.\n\t\t// This is important because we can't create a link if there's\n\t\t// already a file of the same name present.\n\t\t// (any other error here we'll catch below when we try to write here)\n\t\tos.Remove(targetPath)\n\n\t\t// We don't attempt linking on Windows because links are not\n\t\t// comprehensively supported by all tools/apps in Windows and\n\t\t// so we choose to be conservative to avoid creating any\n\t\t// weird issues for Windows users.\n\t\tlinkErr := errors.New(\"link not supported for Windows\") // placeholder error, never actually returned\n\t\tif runtime.GOOS != \"windows\" {\n\t\t\t// Try hard linking first. Hard links are preferable because this\n\t\t\t// creates a self-contained directory that doesn't depend on the\n\t\t\t// cache after install.\n\t\t\tlinkErr = os.Link(cached, targetPath)\n\n\t\t\t// If that failed, try a symlink. This _does_ depend on the cache\n\t\t\t// after install, so the user must manage the cache more carefully\n\t\t\t// in this case, but avoids creating redundant copies of the\n\t\t\t// plugins on disk.\n\t\t\tif linkErr != nil {\n\t\t\t\tlinkErr = os.Symlink(cached, targetPath)\n\t\t\t}\n\t\t}\n\n\t\t// If we still have an error then we'll try a copy as a fallback.\n\t\t// In this case either the OS is Windows or the target filesystem\n\t\t// can't support symlinks.\n\t\tif linkErr != nil {\n\t\t\tsrcFile, err := os.Open(cached)\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"failed to open cached plugin %s: %s\", cached, err)\n\t\t\t}\n\t\t\tdefer srcFile.Close()\n\n\t\t\tdestFile, err := os.OpenFile(targetPath, os.O_TRUNC|os.O_CREATE|os.O_WRONLY, os.ModePerm)\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"failed to create %s: %s\", targetPath, err)\n\t\t\t}\n\n\t\t\t_, err = io.Copy(destFile, srcFile)\n\t\t\tif err != nil {\n\t\t\t\tdestFile.Close()\n\t\t\t\treturn fmt.Errorf(\"failed to copy cached plugin from %s to %s: %s\", cached, targetPath, err)\n\t\t\t}\n\n\t\t\terr = destFile.Close()\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"error creating %s: %s\", targetPath, err)\n\t\t\t}\n\t\t}\n\n\t\t// One way or another, by the time we get here we should have either\n\t\t// a link or a copy of the cached plugin within i.Dir, as expected.\n\t} else {\n\t\tlog.Printf(\"[DEBUG] plugin cache is disabled, so downloading %s %s from %s\", provider, version, url)\n\t\terr := getter.Get(i.Dir, url)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (i *ProviderInstaller) PurgeUnused(used map[string]PluginMeta) (PluginMetaSet, error) {\n\tpurge := make(PluginMetaSet)\n\n\tpresent := FindPlugins(\"provider\", []string{i.Dir})\n\tfor meta := range present {\n\t\tchosen, ok := used[meta.Name]\n\t\tif !ok {\n\t\t\tpurge.Add(meta)\n\t\t}\n\t\tif chosen.Path != meta.Path {\n\t\t\tpurge.Add(meta)\n\t\t}\n\t}\n\n\tremoved := make(PluginMetaSet)\n\tvar errs error\n\tfor meta := range purge {\n\t\tpath := meta.Path\n\t\terr := os.Remove(path)\n\t\tif err != nil {\n\t\t\terrs = multierror.Append(errs, fmt.Errorf(\n\t\t\t\t\"failed to remove unused provider plugin %s: %s\",\n\t\t\t\tpath, err,\n\t\t\t))\n\t\t} else {\n\t\t\tremoved.Add(meta)\n\t\t}\n\t}\n\n\treturn removed, errs\n}\n\nfunc (i *ProviderInstaller) getProviderChecksum(resp *response.TerraformProviderPlatformLocation) (string, error) {\n\t// Get SHA256SUMS file.\n\tshasums, err := getFile(resp.ShasumsURL)\n\tif err != nil {\n\t\tlog.Printf(\"[ERROR] error fetching checksums from %q: %s\", resp.ShasumsURL, err)\n\t\treturn \"\", ErrorMissingChecksumVerification\n\t}\n\n\t// Get SHA256SUMS.sig file.\n\tsignature, err := getFile(resp.ShasumsSignatureURL)\n\tif err != nil {\n\t\tlog.Printf(\"[ERROR] error fetching checksums signature from %q: %s\", resp.ShasumsSignatureURL, err)\n\t\treturn \"\", ErrorSignatureVerification\n\t}\n\n\t// Verify the GPG signature returned from the Registry.\n\tasciiArmor := resp.SigningKeys.GPGASCIIArmor()\n\tsigner, err := verifySig(shasums, signature, asciiArmor)\n\tif err != nil {\n\t\tlog.Printf(\"[ERROR] error verifying signature: %s\", err)\n\t\treturn \"\", ErrorSignatureVerification\n\t}\n\n\t// Also verify the GPG signature against the HashiCorp public key. This is\n\t// a temporary additional check until a more robust key verification\n\t// process is added in a future release.\n\t_, err = verifySig(shasums, signature, HashicorpPublicKey)\n\tif err != nil {\n\t\tlog.Printf(\"[ERROR] error verifying signature against HashiCorp public key: %s\", err)\n\t\treturn \"\", ErrorSignatureVerification\n\t}\n\n\t// Display identity for GPG key which succeeded verifying the signature.\n\t// This could also be used to display to the user with i.Ui.Info().\n\tidentities := []string{}\n\tfor k := range signer.Identities {\n\t\tidentities = append(identities, k)\n\t}\n\tidentity := strings.Join(identities, \", \")\n\tlog.Printf(\"[DEBUG] verified GPG signature with key from %s\", identity)\n\n\t// Extract checksum for this os/arch platform binary and verify against Registry\n\tchecksum := checksumForFile(shasums, resp.Filename)\n\tif checksum == \"\" {\n\t\tlog.Printf(\"[ERROR] missing checksum for %s from source %s\", resp.Filename, resp.ShasumsURL)\n\t\treturn \"\", ErrorMissingChecksumVerification\n\t} else if checksum != resp.Shasum {\n\t\tlog.Printf(\"[ERROR] unexpected checksum for %s from source %q\", resp.Filename, resp.ShasumsURL)\n\t\treturn \"\", ErrorChecksumVerification\n\t}\n\n\treturn checksum, nil\n}\n\nfunc (i *ProviderInstaller) hostname() (string, error) {\n\tprovider := regsrc.NewTerraformProvider(\"\", i.OS, i.Arch)\n\tsvchost, err := provider.SvcHost()\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\treturn svchost.ForDisplay(), nil\n}\n\n// list all versions available for the named provider\nfunc (i *ProviderInstaller) listProviderVersions(name string) (*response.TerraformProviderVersions, error) {\n\tprovider := regsrc.NewTerraformProvider(name, i.OS, i.Arch)\n\tversions, err := i.registry.TerraformProviderVersions(provider)\n\treturn versions, err\n}\n\nfunc (i *ProviderInstaller) listProviderDownloadURLs(name, version string) (*response.TerraformProviderPlatformLocation, error) {\n\turls, err := i.registry.TerraformProviderLocation(regsrc.NewTerraformProvider(name, i.OS, i.Arch), version)\n\tif urls == nil {\n\t\treturn nil, fmt.Errorf(\"No download urls found for provider %s\", name)\n\t}\n\treturn urls, err\n}\n\n// findClosestProtocolCompatibleVersion searches for the provider version with the closest protocol match.\n// Prerelease versions are filtered.\nfunc (i *ProviderInstaller) findClosestProtocolCompatibleVersion(versions []*response.TerraformProviderVersion) (*response.TerraformProviderVersion, error) {\n\t// Loop through all the provider versions to find the earliest and latest\n\t// versions that match the installer protocol to then select the closest of the two\n\tvar latest, earliest *response.TerraformProviderVersion\n\tfor _, version := range versions {\n\t\t// Prereleases are filtered and will not be suggested\n\t\tv, err := VersionStr(version.Version).Parse()\n\t\tif err != nil || v.IsPrerelease() {\n\t\t\tcontinue\n\t\t}\n\n\t\tif err := i.checkPluginProtocol(version); err == nil {\n\t\t\tif earliest == nil {\n\t\t\t\t// Found the first provider version with compatible protocol\n\t\t\t\tearliest = version\n\t\t\t}\n\t\t\t// Update the latest protocol compatible version\n\t\t\tlatest = version\n\t\t}\n\t}\n\tif earliest == nil {\n\t\t// No compatible protocol was found for any version\n\t\treturn nil, ErrorNoVersionCompatible\n\t}\n\n\t// Convert protocols to comparable types\n\tprotoString := strconv.Itoa(int(i.PluginProtocolVersion))\n\tprotocolVersion, err := VersionStr(protoString).Parse()\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"invalid plugin protocol version: %q\", i.PluginProtocolVersion)\n\t}\n\n\tearliestVersionProtocol, err := VersionStr(earliest.Protocols[0]).Parse()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Compare installer protocol version with the first protocol listed of the earliest match\n\t// [A, B] where A is assumed the earliest compatible major version of the protocol pair\n\tif protocolVersion.NewerThan(earliestVersionProtocol) {\n\t\t// Provider protocols are too old, the closest version is the earliest compatible version\n\t\treturn earliest, nil\n\t}\n\n\t// Provider protocols are too new, the closest version is the latest compatible version\n\treturn latest, nil\n}\n\nfunc (i *ProviderInstaller) checkPluginProtocol(versionMeta *response.TerraformProviderVersion) error {\n\t// TODO: should this be a different error? We should probably differentiate between\n\t// no compatible versions and no protocol versions listed at all\n\tif len(versionMeta.Protocols) == 0 {\n\t\treturn fmt.Errorf(\"no plugin protocol versions listed\")\n\t}\n\n\tprotoString := strconv.Itoa(int(i.PluginProtocolVersion))\n\tprotocolVersion, err := VersionStr(protoString).Parse()\n\tif err != nil {\n\t\treturn fmt.Errorf(\"invalid plugin protocol version: %q\", i.PluginProtocolVersion)\n\t}\n\tprotocolConstraint, err := protocolVersion.MinorUpgradeConstraintStr().Parse()\n\tif err != nil {\n\t\t// This should not fail if the preceding function succeeded.\n\t\treturn fmt.Errorf(\"invalid plugin protocol version: %q\", protocolVersion.String())\n\t}\n\n\tfor _, p := range versionMeta.Protocols {\n\t\tproPro, err := VersionStr(p).Parse()\n\t\tif err != nil {\n\t\t\t// invalid protocol reported by the registry. Move along.\n\t\t\tlog.Printf(\"[WARN] invalid provider protocol version %q found in the registry\", versionMeta.Version)\n\t\t\tcontinue\n\t\t}\n\t\t// success!\n\t\tif protocolConstraint.Allows(proPro) {\n\t\t\treturn nil\n\t\t}\n\t}\n\n\treturn ErrorNoVersionCompatible\n}\n\n// REVIEWER QUESTION (again): this ends up swallowing a bunch of errors from\n// checkPluginProtocol. Do they need to be percolated up better, or would\n// debug messages would suffice in these situations?\nfunc (i *ProviderInstaller) findPlatformCompatibleVersion(versions []*response.TerraformProviderVersion) (*response.TerraformProviderVersion, error) {\n\tfor _, version := range versions {\n\t\tif err := i.checkPlatformCompatibility(version); err == nil {\n\t\t\treturn version, nil\n\t\t}\n\t}\n\n\treturn nil, ErrorNoVersionCompatibleWithPlatform\n}\n\n// platformCompatibleVersions returns a list of provider versions that are\n// compatible with the requested platform.\nfunc (i *ProviderInstaller) platformCompatibleVersions(versions []*response.TerraformProviderVersion) []*response.TerraformProviderVersion {\n\tvar v []*response.TerraformProviderVersion\n\tfor _, version := range versions {\n\t\tif err := i.checkPlatformCompatibility(version); err == nil {\n\t\t\tv = append(v, version)\n\t\t}\n\t}\n\treturn v\n}\n\nfunc (i *ProviderInstaller) checkPlatformCompatibility(versionMeta *response.TerraformProviderVersion) error {\n\tif len(versionMeta.Platforms) == 0 {\n\t\treturn fmt.Errorf(\"no supported provider platforms listed\")\n\t}\n\tfor _, p := range versionMeta.Platforms {\n\t\tif p.Arch == i.Arch && p.OS == i.OS {\n\t\t\treturn nil\n\t\t}\n\t}\n\treturn fmt.Errorf(\"version %s does not support the requested platform %s_%s\", versionMeta.Version, i.OS, i.Arch)\n}\n\n// take the list of available versions for a plugin, and filter out those that\n// don't fit the constraints.\nfunc allowedVersions(available *response.TerraformProviderVersions, required Constraints) []*response.TerraformProviderVersion {\n\tvar allowed []*response.TerraformProviderVersion\n\n\tfor _, v := range available.Versions {\n\t\tversion, err := VersionStr(v.Version).Parse()\n\t\tif err != nil {\n\t\t\tlog.Printf(\"[WARN] invalid version found for %q: %s\", available.ID, err)\n\t\t\tcontinue\n\t\t}\n\t\tif required.Allows(version) {\n\t\t\tallowed = append(allowed, v)\n\t\t}\n\t}\n\treturn allowed\n}\n\nfunc checksumForFile(sums []byte, name string) string {\n\tfor _, line := range strings.Split(string(sums), \"\\n\") {\n\t\tparts := strings.Fields(line)\n\t\tif len(parts) > 1 && parts[1] == name {\n\t\t\treturn parts[0]\n\t\t}\n\t}\n\treturn \"\"\n}\n\nfunc getFile(url string) ([]byte, error) {\n\tresp, err := httpClient.Get(url)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer resp.Body.Close()\n\n\tif resp.StatusCode != http.StatusOK {\n\t\treturn nil, fmt.Errorf(\"%s\", resp.Status)\n\t}\n\n\tdata, err := ioutil.ReadAll(resp.Body)\n\tif err != nil {\n\t\treturn data, err\n\t}\n\treturn data, nil\n}\n\n// providerProtocolTooOld is a message sent to the CLI UI if the provider's\n// supported protocol versions are too old for the user's version of terraform,\n// but an older version of the provider is compatible.\nconst providerProtocolTooOld = `\n[reset][bold][red]Provider %q v%s is not compatible with Terraform %s.[reset][red]\n\nProvider version %s is the earliest compatible version. Select it with \nthe following version constraint:\n\n\tversion = %q\n\nTerraform checked all of the plugin versions matching the given constraint:\n    %s\n\nConsult the documentation for this provider for more information on\ncompatibility between provider and Terraform versions.\n`\n\n// providerProtocolTooNew is a message sent to the CLI UI if the provider's\n// supported protocol versions are too new for the user's version of terraform,\n// and the user could either upgrade terraform or choose an older version of the\n// provider\nconst providerProtocolTooNew = `\n[reset][bold][red]Provider %q v%s is not compatible with Terraform %s.[reset][red]\n\nProvider version %s is the latest compatible version. Select it with \nthe following constraint:\n\n    version = %q\n\nTerraform checked all of the plugin versions matching the given constraint:\n    %s\n\nConsult the documentation for this provider for more information on\ncompatibility between provider and Terraform versions.\n\nAlternatively, upgrade to the latest version of Terraform for compatibility with newer provider releases.\n`\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/plugin/discovery/get_cache.go",
    "content": "package discovery\n\n// PluginCache is an interface implemented by objects that are able to maintain\n// a cache of plugins.\ntype PluginCache interface {\n\t// CachedPluginPath returns a path where the requested plugin is already\n\t// cached, or an empty string if the requested plugin is not yet cached.\n\tCachedPluginPath(kind string, name string, version Version) string\n\n\t// InstallDir returns the directory that new plugins should be installed into\n\t// in order to populate the cache. This directory should be used as the\n\t// first argument to getter.Get when downloading plugins with go-getter.\n\t//\n\t// After installing into this directory, use CachedPluginPath to obtain the\n\t// path where the plugin was installed.\n\tInstallDir() string\n}\n\n// NewLocalPluginCache returns a PluginCache that caches plugins in a\n// given local directory.\nfunc NewLocalPluginCache(dir string) PluginCache {\n\treturn &pluginCache{\n\t\tDir: dir,\n\t}\n}\n\ntype pluginCache struct {\n\tDir string\n}\n\nfunc (c *pluginCache) CachedPluginPath(kind string, name string, version Version) string {\n\tallPlugins := FindPlugins(kind, []string{c.Dir})\n\tplugins := allPlugins.WithName(name).WithVersion(version)\n\n\tif plugins.Count() == 0 {\n\t\t// nothing cached\n\t\treturn \"\"\n\t}\n\n\t// There should generally be only one plugin here; if there's more than\n\t// one match for some reason then we'll just choose one arbitrarily.\n\tplugin := plugins.Newest()\n\treturn plugin.Path\n}\n\nfunc (c *pluginCache) InstallDir() string {\n\treturn c.Dir\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/plugin/discovery/hashicorp.go",
    "content": "package discovery\n\n// HashicorpPublicKey is the HashiCorp public key, also available at\n// https://www.hashicorp.com/security\nconst HashicorpPublicKey = `-----BEGIN PGP PUBLIC KEY BLOCK-----\nVersion: GnuPG v1\n\nmQENBFMORM0BCADBRyKO1MhCirazOSVwcfTr1xUxjPvfxD3hjUwHtjsOy/bT6p9f\nW2mRPfwnq2JB5As+paL3UGDsSRDnK9KAxQb0NNF4+eVhr/EJ18s3wwXXDMjpIifq\nfIm2WyH3G+aRLTLPIpscUNKDyxFOUbsmgXAmJ46Re1fn8uKxKRHbfa39aeuEYWFA\n3drdL1WoUngvED7f+RnKBK2G6ZEpO+LDovQk19xGjiMTtPJrjMjZJ3QXqPvx5wca\nKSZLr4lMTuoTI/ZXyZy5bD4tShiZz6KcyX27cD70q2iRcEZ0poLKHyEIDAi3TM5k\nSwbbWBFd5RNPOR0qzrb/0p9ksKK48IIfH2FvABEBAAG0K0hhc2hpQ29ycCBTZWN1\ncml0eSA8c2VjdXJpdHlAaGFzaGljb3JwLmNvbT6JATgEEwECACIFAlMORM0CGwMG\nCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJEFGFLYc0j/xMyWIIAIPhcVqiQ59n\nJc07gjUX0SWBJAxEG1lKxfzS4Xp+57h2xxTpdotGQ1fZwsihaIqow337YHQI3q0i\nSqV534Ms+j/tU7X8sq11xFJIeEVG8PASRCwmryUwghFKPlHETQ8jJ+Y8+1asRydi\npsP3B/5Mjhqv/uOK+Vy3zAyIpyDOMtIpOVfjSpCplVRdtSTFWBu9Em7j5I2HMn1w\nsJZnJgXKpybpibGiiTtmnFLOwibmprSu04rsnP4ncdC2XRD4wIjoyA+4PKgX3sCO\nklEzKryWYBmLkJOMDdo52LttP3279s7XrkLEE7ia0fXa2c12EQ0f0DQ1tGUvyVEW\nWmJVccm5bq25AQ0EUw5EzQEIANaPUY04/g7AmYkOMjaCZ6iTp9hB5Rsj/4ee/ln9\nwArzRO9+3eejLWh53FoN1rO+su7tiXJA5YAzVy6tuolrqjM8DBztPxdLBbEi4V+j\n2tK0dATdBQBHEh3OJApO2UBtcjaZBT31zrG9K55D+CrcgIVEHAKY8Cb4kLBkb5wM\nskn+DrASKU0BNIV1qRsxfiUdQHZfSqtp004nrql1lbFMLFEuiY8FZrkkQ9qduixo\nmTT6f34/oiY+Jam3zCK7RDN/OjuWheIPGj/Qbx9JuNiwgX6yRj7OE1tjUx6d8g9y\n0H1fmLJbb3WZZbuuGFnK6qrE3bGeY8+AWaJAZ37wpWh1p0cAEQEAAYkBHwQYAQIA\nCQUCUw5EzQIbDAAKCRBRhS2HNI/8TJntCAClU7TOO/X053eKF1jqNW4A1qpxctVc\nz8eTcY8Om5O4f6a/rfxfNFKn9Qyja/OG1xWNobETy7MiMXYjaa8uUx5iFy6kMVaP\n0BXJ59NLZjMARGw6lVTYDTIvzqqqwLxgliSDfSnqUhubGwvykANPO+93BBx89MRG\nunNoYGXtPlhNFrAsB1VR8+EyKLv2HQtGCPSFBhrjuzH3gxGibNDDdFQLxxuJWepJ\nEK1UbTS4ms0NgZ2Uknqn1WRU1Ki7rE4sTy68iZtWpKQXZEJa0IGnuI2sSINGcXCJ\noEIgXTMyCILo34Fa/C6VCm2WBgz9zZO8/rHIiQm1J5zqz0DrDwKBUM9C\n=LYpS\n-----END PGP PUBLIC KEY BLOCK-----`\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/plugin/discovery/meta.go",
    "content": "package discovery\n\nimport (\n\t\"crypto/sha256\"\n\t\"io\"\n\t\"os\"\n)\n\n// PluginMeta is metadata about a plugin, useful for launching the plugin\n// and for understanding which plugins are available.\ntype PluginMeta struct {\n\t// Name is the name of the plugin, e.g. as inferred from the plugin\n\t// binary's filename, or by explicit configuration.\n\tName string\n\n\t// Version is the semver version of the plugin, expressed as a string\n\t// that might not be semver-valid.\n\tVersion VersionStr\n\n\t// Path is the absolute path of the executable that can be launched\n\t// to provide the RPC server for this plugin.\n\tPath string\n}\n\n// SHA256 returns a SHA256 hash of the content of the referenced executable\n// file, or an error if the file's contents cannot be read.\nfunc (m PluginMeta) SHA256() ([]byte, error) {\n\tf, err := os.Open(m.Path)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer f.Close()\n\n\th := sha256.New()\n\t_, err = io.Copy(h, f)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn h.Sum(nil), nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/plugin/discovery/meta_set.go",
    "content": "package discovery\n\n// A PluginMetaSet is a set of PluginMeta objects meeting a certain criteria.\n//\n// Methods on this type allow filtering of the set to produce subsets that\n// meet more restrictive criteria.\ntype PluginMetaSet map[PluginMeta]struct{}\n\n// Add inserts the given PluginMeta into the receiving set. This is a no-op\n// if the given meta is already present.\nfunc (s PluginMetaSet) Add(p PluginMeta) {\n\ts[p] = struct{}{}\n}\n\n// Remove removes the given PluginMeta from the receiving set. This is a no-op\n// if the given meta is not already present.\nfunc (s PluginMetaSet) Remove(p PluginMeta) {\n\tdelete(s, p)\n}\n\n// Has returns true if the given meta is in the receiving set, or false\n// otherwise.\nfunc (s PluginMetaSet) Has(p PluginMeta) bool {\n\t_, ok := s[p]\n\treturn ok\n}\n\n// Count returns the number of metas in the set\nfunc (s PluginMetaSet) Count() int {\n\treturn len(s)\n}\n\n// ValidateVersions returns two new PluginMetaSets, separating those with\n// versions that have syntax-valid semver versions from those that don't.\n//\n// Eliminating invalid versions from consideration (and possibly warning about\n// them) is usually the first step of working with a meta set after discovery\n// has completed.\nfunc (s PluginMetaSet) ValidateVersions() (valid, invalid PluginMetaSet) {\n\tvalid = make(PluginMetaSet)\n\tinvalid = make(PluginMetaSet)\n\tfor p := range s {\n\t\tif _, err := p.Version.Parse(); err == nil {\n\t\t\tvalid.Add(p)\n\t\t} else {\n\t\t\tinvalid.Add(p)\n\t\t}\n\t}\n\treturn\n}\n\n// WithName returns the subset of metas that have the given name.\nfunc (s PluginMetaSet) WithName(name string) PluginMetaSet {\n\tns := make(PluginMetaSet)\n\tfor p := range s {\n\t\tif p.Name == name {\n\t\t\tns.Add(p)\n\t\t}\n\t}\n\treturn ns\n}\n\n// WithVersion returns the subset of metas that have the given version.\n//\n// This should be used only with the \"valid\" result from ValidateVersions;\n// it will ignore any plugin metas that have invalid version strings.\nfunc (s PluginMetaSet) WithVersion(version Version) PluginMetaSet {\n\tns := make(PluginMetaSet)\n\tfor p := range s {\n\t\tgotVersion, err := p.Version.Parse()\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\t\tif gotVersion.Equal(version) {\n\t\t\tns.Add(p)\n\t\t}\n\t}\n\treturn ns\n}\n\n// ByName groups the metas in the set by their Names, returning a map.\nfunc (s PluginMetaSet) ByName() map[string]PluginMetaSet {\n\tret := make(map[string]PluginMetaSet)\n\tfor p := range s {\n\t\tif _, ok := ret[p.Name]; !ok {\n\t\t\tret[p.Name] = make(PluginMetaSet)\n\t\t}\n\t\tret[p.Name].Add(p)\n\t}\n\treturn ret\n}\n\n// Newest returns the one item from the set that has the newest Version value.\n//\n// The result is meaningful only if the set is already filtered such that\n// all of the metas have the same Name.\n//\n// If there isn't at least one meta in the set then this function will panic.\n// Use Count() to ensure that there is at least one value before calling.\n//\n// If any of the metas have invalid version strings then this function will\n// panic. Use ValidateVersions() first to filter out metas with invalid\n// versions.\n//\n// If two metas have the same Version then one is arbitrarily chosen. This\n// situation should be avoided by pre-filtering the set.\nfunc (s PluginMetaSet) Newest() PluginMeta {\n\tif len(s) == 0 {\n\t\tpanic(\"can't call NewestStable on empty PluginMetaSet\")\n\t}\n\n\tvar first = true\n\tvar winner PluginMeta\n\tvar winnerVersion Version\n\tfor p := range s {\n\t\tversion, err := p.Version.Parse()\n\t\tif err != nil {\n\t\t\tpanic(err)\n\t\t}\n\n\t\tif first == true || version.NewerThan(winnerVersion) {\n\t\t\twinner = p\n\t\t\twinnerVersion = version\n\t\t\tfirst = false\n\t\t}\n\t}\n\n\treturn winner\n}\n\n// ConstrainVersions takes a set of requirements and attempts to\n// return a map from name to a set of metas that have the matching\n// name and an appropriate version.\n//\n// If any of the given requirements match *no* plugins then its PluginMetaSet\n// in the returned map will be empty.\n//\n// All viable metas are returned, so the caller can apply any desired filtering\n// to reduce down to a single option. For example, calling Newest() to obtain\n// the highest available version.\n//\n// If any of the metas in the set have invalid version strings then this\n// function will panic. Use ValidateVersions() first to filter out metas with\n// invalid versions.\nfunc (s PluginMetaSet) ConstrainVersions(reqd PluginRequirements) map[string]PluginMetaSet {\n\tret := make(map[string]PluginMetaSet)\n\tfor p := range s {\n\t\tname := p.Name\n\t\tallowedVersions, ok := reqd[name]\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\t\tif _, ok := ret[p.Name]; !ok {\n\t\t\tret[p.Name] = make(PluginMetaSet)\n\t\t}\n\t\tversion, err := p.Version.Parse()\n\t\tif err != nil {\n\t\t\tpanic(err)\n\t\t}\n\t\tif allowedVersions.Allows(version) {\n\t\t\tret[p.Name].Add(p)\n\t\t}\n\t}\n\treturn ret\n}\n\n// OverridePaths returns a new set where any existing plugins with the given\n// names are removed and replaced with the single path given in the map.\n//\n// This is here only to continue to support the legacy way of overriding\n// plugin binaries in the .terraformrc file. It treats all given plugins\n// as pre-versioning (version 0.0.0). This mechanism will eventually be\n// phased out, with vendor directories being the intended replacement.\nfunc (s PluginMetaSet) OverridePaths(paths map[string]string) PluginMetaSet {\n\tret := make(PluginMetaSet)\n\tfor p := range s {\n\t\tif _, ok := paths[p.Name]; ok {\n\t\t\t// Skip plugins that we're overridding\n\t\t\tcontinue\n\t\t}\n\n\t\tret.Add(p)\n\t}\n\n\t// Now add the metadata for overriding plugins\n\tfor name, path := range paths {\n\t\tret.Add(PluginMeta{\n\t\t\tName:    name,\n\t\t\tVersion: VersionZero,\n\t\t\tPath:    path,\n\t\t})\n\t}\n\n\treturn ret\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/plugin/discovery/requirements.go",
    "content": "package discovery\n\nimport (\n\t\"bytes\"\n)\n\n// PluginInstallProtocolVersion is the protocol version TF-core\n// supports to communicate with servers, and is used to resolve\n// plugin discovery with terraform registry, in addition to\n// any specified plugin version constraints\nconst PluginInstallProtocolVersion = 5\n\n// PluginRequirements describes a set of plugins (assumed to be of a consistent\n// kind) that are required to exist and have versions within the given\n// corresponding sets.\ntype PluginRequirements map[string]*PluginConstraints\n\n// PluginConstraints represents an element of PluginRequirements describing\n// the constraints for a single plugin.\ntype PluginConstraints struct {\n\t// Specifies that the plugin's version must be within the given\n\t// constraints.\n\tVersions Constraints\n\n\t// If non-nil, the hash of the on-disk plugin executable must exactly\n\t// match the SHA256 hash given here.\n\tSHA256 []byte\n}\n\n// Allows returns true if the given version is within the receiver's version\n// constraints.\nfunc (s *PluginConstraints) Allows(v Version) bool {\n\treturn s.Versions.Allows(v)\n}\n\n// AcceptsSHA256 returns true if the given executable SHA256 hash is acceptable,\n// either because it matches the constraint or because there is no such\n// constraint.\nfunc (s *PluginConstraints) AcceptsSHA256(digest []byte) bool {\n\tif s.SHA256 == nil {\n\t\treturn true\n\t}\n\treturn bytes.Equal(s.SHA256, digest)\n}\n\n// Merge takes the contents of the receiver and the other given requirements\n// object and merges them together into a single requirements structure\n// that satisfies both sets of requirements.\n//\n// Note that it doesn't make sense to merge two PluginRequirements with\n// differing required plugin SHA256 hashes, since the result will never\n// match any plugin.\nfunc (r PluginRequirements) Merge(other PluginRequirements) PluginRequirements {\n\tret := make(PluginRequirements)\n\tfor n, c := range r {\n\t\tret[n] = &PluginConstraints{\n\t\t\tVersions: Constraints{}.Append(c.Versions),\n\t\t\tSHA256:   c.SHA256,\n\t\t}\n\t}\n\tfor n, c := range other {\n\t\tif existing, exists := ret[n]; exists {\n\t\t\tret[n].Versions = ret[n].Versions.Append(c.Versions)\n\n\t\t\tif existing.SHA256 != nil {\n\t\t\t\tif c.SHA256 != nil && !bytes.Equal(c.SHA256, existing.SHA256) {\n\t\t\t\t\t// If we've been asked to merge two constraints with\n\t\t\t\t\t// different SHA256 hashes then we'll produce a dummy value\n\t\t\t\t\t// that can never match anything. This is a silly edge case\n\t\t\t\t\t// that no reasonable caller should hit.\n\t\t\t\t\tret[n].SHA256 = []byte(invalidProviderHash)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tret[n].SHA256 = c.SHA256 // might still be nil\n\t\t\t}\n\t\t} else {\n\t\t\tret[n] = &PluginConstraints{\n\t\t\t\tVersions: Constraints{}.Append(c.Versions),\n\t\t\t\tSHA256:   c.SHA256,\n\t\t\t}\n\t\t}\n\t}\n\treturn ret\n}\n\n// LockExecutables applies additional constraints to the receiver that\n// require plugin executables with specific SHA256 digests. This modifies\n// the receiver in-place, since it's intended to be applied after\n// version constraints have been resolved.\n//\n// The given map must include a key for every plugin that is already\n// required. If not, any missing keys will cause the corresponding plugin\n// to never match, though the direct caller doesn't necessarily need to\n// guarantee this as long as the downstream code _applying_ these constraints\n// is able to deal with the non-match in some way.\nfunc (r PluginRequirements) LockExecutables(sha256s map[string][]byte) {\n\tfor name, cons := range r {\n\t\tdigest := sha256s[name]\n\n\t\tif digest == nil {\n\t\t\t// Prevent any match, which will then presumably cause the\n\t\t\t// downstream consumer of this requirements to report an error.\n\t\t\tcons.SHA256 = []byte(invalidProviderHash)\n\t\t\tcontinue\n\t\t}\n\n\t\tcons.SHA256 = digest\n\t}\n}\n\nconst invalidProviderHash = \"<invalid>\"\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/plugin/discovery/signature.go",
    "content": "package discovery\n\nimport (\n\t\"bytes\"\n\t\"strings\"\n\n\t\"golang.org/x/crypto/openpgp\"\n)\n\n// Verify the data using the provided openpgp detached signature and the\n// embedded hashicorp public key.\nfunc verifySig(data, sig []byte, armor string) (*openpgp.Entity, error) {\n\tel, err := openpgp.ReadArmoredKeyRing(strings.NewReader(armor))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn openpgp.CheckDetachedSignature(el, bytes.NewReader(data), bytes.NewReader(sig))\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/plugin/discovery/version.go",
    "content": "package discovery\n\nimport (\n\t\"fmt\"\n\t\"sort\"\n\n\tversion \"github.com/hashicorp/go-version\"\n)\n\nconst VersionZero = \"0.0.0\"\n\n// A VersionStr is a string containing a possibly-invalid representation\n// of a semver version number. Call Parse on it to obtain a real Version\n// object, or discover that it is invalid.\ntype VersionStr string\n\n// Parse transforms a VersionStr into a Version if it is\n// syntactically valid. If it isn't then an error is returned instead.\nfunc (s VersionStr) Parse() (Version, error) {\n\traw, err := version.NewVersion(string(s))\n\tif err != nil {\n\t\treturn Version{}, err\n\t}\n\treturn Version{raw}, nil\n}\n\n// MustParse transforms a VersionStr into a Version if it is\n// syntactically valid. If it isn't then it panics.\nfunc (s VersionStr) MustParse() Version {\n\tret, err := s.Parse()\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn ret\n}\n\n// Version represents a version number that has been parsed from\n// a semver string and known to be valid.\ntype Version struct {\n\t// We wrap this here just because it avoids a proliferation of\n\t// direct go-version imports all over the place, and keeps the\n\t// version-processing details within this package.\n\traw *version.Version\n}\n\nfunc (v Version) String() string {\n\treturn v.raw.String()\n}\n\nfunc (v Version) NewerThan(other Version) bool {\n\treturn v.raw.GreaterThan(other.raw)\n}\n\nfunc (v Version) Equal(other Version) bool {\n\treturn v.raw.Equal(other.raw)\n}\n\n// IsPrerelease determines if version is a prerelease\nfunc (v Version) IsPrerelease() bool {\n\treturn v.raw.Prerelease() != \"\"\n}\n\n// MinorUpgradeConstraintStr returns a ConstraintStr that would permit\n// minor upgrades relative to the receiving version.\nfunc (v Version) MinorUpgradeConstraintStr() ConstraintStr {\n\tsegments := v.raw.Segments()\n\treturn ConstraintStr(fmt.Sprintf(\"~> %d.%d\", segments[0], segments[1]))\n}\n\ntype Versions []Version\n\n// Sort sorts version from newest to oldest.\nfunc (v Versions) Sort() {\n\tsort.Slice(v, func(i, j int) bool {\n\t\treturn v[i].NewerThan(v[j])\n\t})\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/plugin/discovery/version_set.go",
    "content": "package discovery\n\nimport (\n\t\"sort\"\n\n\tversion \"github.com/hashicorp/go-version\"\n)\n\n// A ConstraintStr is a string containing a possibly-invalid representation\n// of a version constraint provided in configuration. Call Parse on it to\n// obtain a real Constraint object, or discover that it is invalid.\ntype ConstraintStr string\n\n// Parse transforms a ConstraintStr into a Constraints if it is\n// syntactically valid. If it isn't then an error is returned instead.\nfunc (s ConstraintStr) Parse() (Constraints, error) {\n\traw, err := version.NewConstraint(string(s))\n\tif err != nil {\n\t\treturn Constraints{}, err\n\t}\n\treturn Constraints{raw}, nil\n}\n\n// MustParse is like Parse but it panics if the constraint string is invalid.\nfunc (s ConstraintStr) MustParse() Constraints {\n\tret, err := s.Parse()\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn ret\n}\n\n// Constraints represents a set of versions which any given Version is either\n// a member of or not.\ntype Constraints struct {\n\traw version.Constraints\n}\n\n// NewConstraints creates a Constraints based on a version.Constraints.\nfunc NewConstraints(c version.Constraints) Constraints {\n\treturn Constraints{c}\n}\n\n// AllVersions is a Constraints containing all versions\nvar AllVersions Constraints\n\nfunc init() {\n\tAllVersions = Constraints{\n\t\traw: make(version.Constraints, 0),\n\t}\n}\n\n// Allows returns true if the given version permitted by the receiving\n// constraints set.\nfunc (s Constraints) Allows(v Version) bool {\n\treturn s.raw.Check(v.raw)\n}\n\n// Append combines the receiving set with the given other set to produce\n// a set that is the intersection of both sets, which is to say that resulting\n// constraints contain only the versions that are members of both.\nfunc (s Constraints) Append(other Constraints) Constraints {\n\traw := make(version.Constraints, 0, len(s.raw)+len(other.raw))\n\n\t// Since \"raw\" is a list of constraints that remove versions from the set,\n\t// \"Intersection\" is implemented by concatenating together those lists,\n\t// thus leaving behind only the versions not removed by either list.\n\traw = append(raw, s.raw...)\n\traw = append(raw, other.raw...)\n\n\t// while the set is unordered, we sort these lexically for consistent output\n\tsort.Slice(raw, func(i, j int) bool {\n\t\treturn raw[i].String() < raw[j].String()\n\t})\n\n\treturn Constraints{raw}\n}\n\n// String returns a string representation of the set members as a set\n// of range constraints.\nfunc (s Constraints) String() string {\n\treturn s.raw.String()\n}\n\n// Unconstrained returns true if and only if the receiver is an empty\n// constraint set.\nfunc (s Constraints) Unconstrained() bool {\n\treturn len(s.raw) == 0\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/plugin/grpc_provider.go",
    "content": "package plugin\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"log\"\n\t\"sync\"\n\n\t\"github.com/zclconf/go-cty/cty\"\n\n\tplugin \"github.com/hashicorp/go-plugin\"\n\tproto \"github.com/hashicorp/terraform/internal/tfplugin5\"\n\t\"github.com/hashicorp/terraform/plugin/convert\"\n\t\"github.com/hashicorp/terraform/providers\"\n\t\"github.com/hashicorp/terraform/version\"\n\t\"github.com/zclconf/go-cty/cty/msgpack\"\n\t\"google.golang.org/grpc\"\n)\n\n// GRPCProviderPlugin implements plugin.GRPCPlugin for the go-plugin package.\ntype GRPCProviderPlugin struct {\n\tplugin.Plugin\n\tGRPCProvider func() proto.ProviderServer\n}\n\nfunc (p *GRPCProviderPlugin) GRPCClient(ctx context.Context, broker *plugin.GRPCBroker, c *grpc.ClientConn) (interface{}, error) {\n\treturn &GRPCProvider{\n\t\tclient: proto.NewProviderClient(c),\n\t\tctx:    ctx,\n\t}, nil\n}\n\nfunc (p *GRPCProviderPlugin) GRPCServer(broker *plugin.GRPCBroker, s *grpc.Server) error {\n\tproto.RegisterProviderServer(s, p.GRPCProvider())\n\treturn nil\n}\n\n// GRPCProvider handles the client, or core side of the plugin rpc connection.\n// The GRPCProvider methods are mostly a translation layer between the\n// terraform provioders types and the grpc proto types, directly converting\n// between the two.\ntype GRPCProvider struct {\n\t// PluginClient provides a reference to the plugin.Client which controls the plugin process.\n\t// This allows the GRPCProvider a way to shutdown the plugin process.\n\tPluginClient *plugin.Client\n\n\t// TestServer contains a grpc.Server to close when the GRPCProvider is being\n\t// used in an end to end test of a provider.\n\tTestServer *grpc.Server\n\n\t// Proto client use to make the grpc service calls.\n\tclient proto.ProviderClient\n\n\t// this context is created by the plugin package, and is canceled when the\n\t// plugin process ends.\n\tctx context.Context\n\n\t// schema stores the schema for this provider. This is used to properly\n\t// serialize the state for requests.\n\tmu      sync.Mutex\n\tschemas providers.GetSchemaResponse\n}\n\n// getSchema is used internally to get the saved provider schema.  The schema\n// should have already been fetched from the provider, but we have to\n// synchronize access to avoid being called concurrently with GetSchema.\nfunc (p *GRPCProvider) getSchema() providers.GetSchemaResponse {\n\tp.mu.Lock()\n\t// unlock inline in case GetSchema needs to be called\n\tif p.schemas.Provider.Block != nil {\n\t\tp.mu.Unlock()\n\t\treturn p.schemas\n\t}\n\tp.mu.Unlock()\n\n\t// the schema should have been fetched already, but give it another shot\n\t// just in case things are being called out of order. This may happen for\n\t// tests.\n\tschemas := p.GetSchema()\n\tif schemas.Diagnostics.HasErrors() {\n\t\tpanic(schemas.Diagnostics.Err())\n\t}\n\n\treturn schemas\n}\n\n// getResourceSchema is a helper to extract the schema for a resource, and\n// panics if the schema is not available.\nfunc (p *GRPCProvider) getResourceSchema(name string) providers.Schema {\n\tschema := p.getSchema()\n\tresSchema, ok := schema.ResourceTypes[name]\n\tif !ok {\n\t\tpanic(\"unknown resource type \" + name)\n\t}\n\treturn resSchema\n}\n\n// gettDatasourceSchema is a helper to extract the schema for a datasource, and\n// panics if that schema is not available.\nfunc (p *GRPCProvider) getDatasourceSchema(name string) providers.Schema {\n\tschema := p.getSchema()\n\tdataSchema, ok := schema.DataSources[name]\n\tif !ok {\n\t\tpanic(\"unknown data source \" + name)\n\t}\n\treturn dataSchema\n}\n\nfunc (p *GRPCProvider) GetSchema() (resp providers.GetSchemaResponse) {\n\tlog.Printf(\"[TRACE] GRPCProvider: GetSchema\")\n\tp.mu.Lock()\n\tdefer p.mu.Unlock()\n\n\tif p.schemas.Provider.Block != nil {\n\t\treturn p.schemas\n\t}\n\n\tresp.ResourceTypes = make(map[string]providers.Schema)\n\tresp.DataSources = make(map[string]providers.Schema)\n\n\t// Some providers may generate quite large schemas, and the internal default\n\t// grpc response size limit is 4MB. 64MB should cover most any use case, and\n\t// if we get providers nearing that we may want to consider a finer-grained\n\t// API to fetch individual resource schemas.\n\t// Note: this option is marked as EXPERIMENTAL in the grpc API.\n\tconst maxRecvSize = 64 << 20\n\tprotoResp, err := p.client.GetSchema(p.ctx, new(proto.GetProviderSchema_Request), grpc.MaxRecvMsgSizeCallOption{MaxRecvMsgSize: maxRecvSize})\n\tif err != nil {\n\t\tresp.Diagnostics = resp.Diagnostics.Append(err)\n\t\treturn resp\n\t}\n\n\tresp.Diagnostics = resp.Diagnostics.Append(convert.ProtoToDiagnostics(protoResp.Diagnostics))\n\n\tif protoResp.Provider == nil {\n\t\tresp.Diagnostics = resp.Diagnostics.Append(errors.New(\"missing provider schema\"))\n\t\treturn resp\n\t}\n\n\tresp.Provider = convert.ProtoToProviderSchema(protoResp.Provider)\n\n\tfor name, res := range protoResp.ResourceSchemas {\n\t\tresp.ResourceTypes[name] = convert.ProtoToProviderSchema(res)\n\t}\n\n\tfor name, data := range protoResp.DataSourceSchemas {\n\t\tresp.DataSources[name] = convert.ProtoToProviderSchema(data)\n\t}\n\n\tp.schemas = resp\n\n\treturn resp\n}\n\nfunc (p *GRPCProvider) PrepareProviderConfig(r providers.PrepareProviderConfigRequest) (resp providers.PrepareProviderConfigResponse) {\n\tlog.Printf(\"[TRACE] GRPCProvider: PrepareProviderConfig\")\n\n\tschema := p.getSchema()\n\tty := schema.Provider.Block.ImpliedType()\n\n\tmp, err := msgpack.Marshal(r.Config, ty)\n\tif err != nil {\n\t\tresp.Diagnostics = resp.Diagnostics.Append(err)\n\t\treturn resp\n\t}\n\n\tprotoReq := &proto.PrepareProviderConfig_Request{\n\t\tConfig: &proto.DynamicValue{Msgpack: mp},\n\t}\n\n\tprotoResp, err := p.client.PrepareProviderConfig(p.ctx, protoReq)\n\tif err != nil {\n\t\tresp.Diagnostics = resp.Diagnostics.Append(err)\n\t\treturn resp\n\t}\n\n\tconfig := cty.NullVal(ty)\n\tif protoResp.PreparedConfig != nil {\n\t\tconfig, err = msgpack.Unmarshal(protoResp.PreparedConfig.Msgpack, ty)\n\t\tif err != nil {\n\t\t\tresp.Diagnostics = resp.Diagnostics.Append(err)\n\t\t\treturn resp\n\t\t}\n\t}\n\tresp.PreparedConfig = config\n\n\tresp.Diagnostics = resp.Diagnostics.Append(convert.ProtoToDiagnostics(protoResp.Diagnostics))\n\treturn resp\n}\n\nfunc (p *GRPCProvider) ValidateResourceTypeConfig(r providers.ValidateResourceTypeConfigRequest) (resp providers.ValidateResourceTypeConfigResponse) {\n\tlog.Printf(\"[TRACE] GRPCProvider: ValidateResourceTypeConfig\")\n\tresourceSchema := p.getResourceSchema(r.TypeName)\n\n\tmp, err := msgpack.Marshal(r.Config, resourceSchema.Block.ImpliedType())\n\tif err != nil {\n\t\tresp.Diagnostics = resp.Diagnostics.Append(err)\n\t\treturn resp\n\t}\n\n\tprotoReq := &proto.ValidateResourceTypeConfig_Request{\n\t\tTypeName: r.TypeName,\n\t\tConfig:   &proto.DynamicValue{Msgpack: mp},\n\t}\n\n\tprotoResp, err := p.client.ValidateResourceTypeConfig(p.ctx, protoReq)\n\tif err != nil {\n\t\tresp.Diagnostics = resp.Diagnostics.Append(err)\n\t\treturn resp\n\t}\n\n\tresp.Diagnostics = resp.Diagnostics.Append(convert.ProtoToDiagnostics(protoResp.Diagnostics))\n\treturn resp\n}\n\nfunc (p *GRPCProvider) ValidateDataSourceConfig(r providers.ValidateDataSourceConfigRequest) (resp providers.ValidateDataSourceConfigResponse) {\n\tlog.Printf(\"[TRACE] GRPCProvider: ValidateDataSourceConfig\")\n\n\tdataSchema := p.getDatasourceSchema(r.TypeName)\n\n\tmp, err := msgpack.Marshal(r.Config, dataSchema.Block.ImpliedType())\n\tif err != nil {\n\t\tresp.Diagnostics = resp.Diagnostics.Append(err)\n\t\treturn resp\n\t}\n\n\tprotoReq := &proto.ValidateDataSourceConfig_Request{\n\t\tTypeName: r.TypeName,\n\t\tConfig:   &proto.DynamicValue{Msgpack: mp},\n\t}\n\n\tprotoResp, err := p.client.ValidateDataSourceConfig(p.ctx, protoReq)\n\tif err != nil {\n\t\tresp.Diagnostics = resp.Diagnostics.Append(err)\n\t\treturn resp\n\t}\n\tresp.Diagnostics = resp.Diagnostics.Append(convert.ProtoToDiagnostics(protoResp.Diagnostics))\n\treturn resp\n}\n\nfunc (p *GRPCProvider) UpgradeResourceState(r providers.UpgradeResourceStateRequest) (resp providers.UpgradeResourceStateResponse) {\n\tlog.Printf(\"[TRACE] GRPCProvider: UpgradeResourceState\")\n\n\tresSchema := p.getResourceSchema(r.TypeName)\n\n\tprotoReq := &proto.UpgradeResourceState_Request{\n\t\tTypeName: r.TypeName,\n\t\tVersion:  int64(r.Version),\n\t\tRawState: &proto.RawState{\n\t\t\tJson:    r.RawStateJSON,\n\t\t\tFlatmap: r.RawStateFlatmap,\n\t\t},\n\t}\n\n\tprotoResp, err := p.client.UpgradeResourceState(p.ctx, protoReq)\n\tif err != nil {\n\t\tresp.Diagnostics = resp.Diagnostics.Append(err)\n\t\treturn resp\n\t}\n\tresp.Diagnostics = resp.Diagnostics.Append(convert.ProtoToDiagnostics(protoResp.Diagnostics))\n\n\tstate := cty.NullVal(resSchema.Block.ImpliedType())\n\tif protoResp.UpgradedState != nil {\n\t\tstate, err = msgpack.Unmarshal(protoResp.UpgradedState.Msgpack, resSchema.Block.ImpliedType())\n\t\tif err != nil {\n\t\t\tresp.Diagnostics = resp.Diagnostics.Append(err)\n\t\t\treturn resp\n\t\t}\n\t}\n\n\tresp.UpgradedState = state\n\treturn resp\n}\n\nfunc (p *GRPCProvider) Configure(r providers.ConfigureRequest) (resp providers.ConfigureResponse) {\n\tlog.Printf(\"[TRACE] GRPCProvider: Configure\")\n\n\tschema := p.getSchema()\n\n\tvar mp []byte\n\n\t// we don't have anything to marshal if there's no config\n\tmp, err := msgpack.Marshal(r.Config, schema.Provider.Block.ImpliedType())\n\tif err != nil {\n\t\tresp.Diagnostics = resp.Diagnostics.Append(err)\n\t\treturn resp\n\t}\n\n\tprotoReq := &proto.Configure_Request{\n\t\tTerraformVersion: version.Version,\n\t\tConfig: &proto.DynamicValue{\n\t\t\tMsgpack: mp,\n\t\t},\n\t}\n\n\tprotoResp, err := p.client.Configure(p.ctx, protoReq)\n\tif err != nil {\n\t\tresp.Diagnostics = resp.Diagnostics.Append(err)\n\t\treturn resp\n\t}\n\tresp.Diagnostics = resp.Diagnostics.Append(convert.ProtoToDiagnostics(protoResp.Diagnostics))\n\treturn resp\n}\n\nfunc (p *GRPCProvider) Stop() error {\n\tlog.Printf(\"[TRACE] GRPCProvider: Stop\")\n\n\tresp, err := p.client.Stop(p.ctx, new(proto.Stop_Request))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif resp.Error != \"\" {\n\t\treturn errors.New(resp.Error)\n\t}\n\treturn nil\n}\n\nfunc (p *GRPCProvider) ReadResource(r providers.ReadResourceRequest) (resp providers.ReadResourceResponse) {\n\tlog.Printf(\"[TRACE] GRPCProvider: ReadResource\")\n\n\tresSchema := p.getResourceSchema(r.TypeName)\n\n\tmp, err := msgpack.Marshal(r.PriorState, resSchema.Block.ImpliedType())\n\tif err != nil {\n\t\tresp.Diagnostics = resp.Diagnostics.Append(err)\n\t\treturn resp\n\t}\n\n\tprotoReq := &proto.ReadResource_Request{\n\t\tTypeName:     r.TypeName,\n\t\tCurrentState: &proto.DynamicValue{Msgpack: mp},\n\t}\n\n\tprotoResp, err := p.client.ReadResource(p.ctx, protoReq)\n\tif err != nil {\n\t\tresp.Diagnostics = resp.Diagnostics.Append(err)\n\t\treturn resp\n\t}\n\tresp.Diagnostics = resp.Diagnostics.Append(convert.ProtoToDiagnostics(protoResp.Diagnostics))\n\n\tstate := cty.NullVal(resSchema.Block.ImpliedType())\n\tif protoResp.NewState != nil {\n\t\tstate, err = msgpack.Unmarshal(protoResp.NewState.Msgpack, resSchema.Block.ImpliedType())\n\t\tif err != nil {\n\t\t\tresp.Diagnostics = resp.Diagnostics.Append(err)\n\t\t\treturn resp\n\t\t}\n\t}\n\tresp.NewState = state\n\n\treturn resp\n}\n\nfunc (p *GRPCProvider) PlanResourceChange(r providers.PlanResourceChangeRequest) (resp providers.PlanResourceChangeResponse) {\n\tlog.Printf(\"[TRACE] GRPCProvider: PlanResourceChange\")\n\n\tresSchema := p.getResourceSchema(r.TypeName)\n\n\tpriorMP, err := msgpack.Marshal(r.PriorState, resSchema.Block.ImpliedType())\n\tif err != nil {\n\t\tresp.Diagnostics = resp.Diagnostics.Append(err)\n\t\treturn resp\n\t}\n\n\tconfigMP, err := msgpack.Marshal(r.Config, resSchema.Block.ImpliedType())\n\tif err != nil {\n\t\tresp.Diagnostics = resp.Diagnostics.Append(err)\n\t\treturn resp\n\t}\n\n\tpropMP, err := msgpack.Marshal(r.ProposedNewState, resSchema.Block.ImpliedType())\n\tif err != nil {\n\t\tresp.Diagnostics = resp.Diagnostics.Append(err)\n\t\treturn resp\n\t}\n\n\tprotoReq := &proto.PlanResourceChange_Request{\n\t\tTypeName:         r.TypeName,\n\t\tPriorState:       &proto.DynamicValue{Msgpack: priorMP},\n\t\tConfig:           &proto.DynamicValue{Msgpack: configMP},\n\t\tProposedNewState: &proto.DynamicValue{Msgpack: propMP},\n\t\tPriorPrivate:     r.PriorPrivate,\n\t}\n\n\tprotoResp, err := p.client.PlanResourceChange(p.ctx, protoReq)\n\tif err != nil {\n\t\tresp.Diagnostics = resp.Diagnostics.Append(err)\n\t\treturn resp\n\t}\n\tresp.Diagnostics = resp.Diagnostics.Append(convert.ProtoToDiagnostics(protoResp.Diagnostics))\n\n\tstate := cty.NullVal(resSchema.Block.ImpliedType())\n\tif protoResp.PlannedState != nil {\n\t\tstate, err = msgpack.Unmarshal(protoResp.PlannedState.Msgpack, resSchema.Block.ImpliedType())\n\t\tif err != nil {\n\t\t\tresp.Diagnostics = resp.Diagnostics.Append(err)\n\t\t\treturn resp\n\t\t}\n\t}\n\tresp.PlannedState = state\n\n\tfor _, p := range protoResp.RequiresReplace {\n\t\tresp.RequiresReplace = append(resp.RequiresReplace, convert.AttributePathToPath(p))\n\t}\n\n\tresp.PlannedPrivate = protoResp.PlannedPrivate\n\n\tresp.LegacyTypeSystem = protoResp.LegacyTypeSystem\n\n\treturn resp\n}\n\nfunc (p *GRPCProvider) ApplyResourceChange(r providers.ApplyResourceChangeRequest) (resp providers.ApplyResourceChangeResponse) {\n\tlog.Printf(\"[TRACE] GRPCProvider: ApplyResourceChange\")\n\n\tresSchema := p.getResourceSchema(r.TypeName)\n\n\tpriorMP, err := msgpack.Marshal(r.PriorState, resSchema.Block.ImpliedType())\n\tif err != nil {\n\t\tresp.Diagnostics = resp.Diagnostics.Append(err)\n\t\treturn resp\n\t}\n\tplannedMP, err := msgpack.Marshal(r.PlannedState, resSchema.Block.ImpliedType())\n\tif err != nil {\n\t\tresp.Diagnostics = resp.Diagnostics.Append(err)\n\t\treturn resp\n\t}\n\tconfigMP, err := msgpack.Marshal(r.Config, resSchema.Block.ImpliedType())\n\tif err != nil {\n\t\tresp.Diagnostics = resp.Diagnostics.Append(err)\n\t\treturn resp\n\t}\n\n\tprotoReq := &proto.ApplyResourceChange_Request{\n\t\tTypeName:       r.TypeName,\n\t\tPriorState:     &proto.DynamicValue{Msgpack: priorMP},\n\t\tPlannedState:   &proto.DynamicValue{Msgpack: plannedMP},\n\t\tConfig:         &proto.DynamicValue{Msgpack: configMP},\n\t\tPlannedPrivate: r.PlannedPrivate,\n\t}\n\n\tprotoResp, err := p.client.ApplyResourceChange(p.ctx, protoReq)\n\tif err != nil {\n\t\tresp.Diagnostics = resp.Diagnostics.Append(err)\n\t\treturn resp\n\t}\n\tresp.Diagnostics = resp.Diagnostics.Append(convert.ProtoToDiagnostics(protoResp.Diagnostics))\n\n\tresp.Private = protoResp.Private\n\n\tstate := cty.NullVal(resSchema.Block.ImpliedType())\n\tif protoResp.NewState != nil {\n\t\tstate, err = msgpack.Unmarshal(protoResp.NewState.Msgpack, resSchema.Block.ImpliedType())\n\t\tif err != nil {\n\t\t\tresp.Diagnostics = resp.Diagnostics.Append(err)\n\t\t\treturn resp\n\t\t}\n\t}\n\tresp.NewState = state\n\n\tresp.LegacyTypeSystem = protoResp.LegacyTypeSystem\n\n\treturn resp\n}\n\nfunc (p *GRPCProvider) ImportResourceState(r providers.ImportResourceStateRequest) (resp providers.ImportResourceStateResponse) {\n\tlog.Printf(\"[TRACE] GRPCProvider: ImportResourceState\")\n\n\tprotoReq := &proto.ImportResourceState_Request{\n\t\tTypeName: r.TypeName,\n\t\tId:       r.ID,\n\t}\n\n\tprotoResp, err := p.client.ImportResourceState(p.ctx, protoReq)\n\tif err != nil {\n\t\tresp.Diagnostics = resp.Diagnostics.Append(err)\n\t\treturn resp\n\t}\n\tresp.Diagnostics = resp.Diagnostics.Append(convert.ProtoToDiagnostics(protoResp.Diagnostics))\n\n\tfor _, imported := range protoResp.ImportedResources {\n\t\tresource := providers.ImportedResource{\n\t\t\tTypeName: imported.TypeName,\n\t\t\tPrivate:  imported.Private,\n\t\t}\n\n\t\tresSchema := p.getResourceSchema(resource.TypeName)\n\t\tstate := cty.NullVal(resSchema.Block.ImpliedType())\n\t\tif imported.State != nil {\n\t\t\tstate, err = msgpack.Unmarshal(imported.State.Msgpack, resSchema.Block.ImpliedType())\n\t\t\tif err != nil {\n\t\t\t\tresp.Diagnostics = resp.Diagnostics.Append(err)\n\t\t\t\treturn resp\n\t\t\t}\n\t\t}\n\t\tresource.State = state\n\t\tresp.ImportedResources = append(resp.ImportedResources, resource)\n\t}\n\n\treturn resp\n}\n\nfunc (p *GRPCProvider) ReadDataSource(r providers.ReadDataSourceRequest) (resp providers.ReadDataSourceResponse) {\n\tlog.Printf(\"[TRACE] GRPCProvider: ReadDataSource\")\n\n\tdataSchema := p.getDatasourceSchema(r.TypeName)\n\n\tconfig, err := msgpack.Marshal(r.Config, dataSchema.Block.ImpliedType())\n\tif err != nil {\n\t\tresp.Diagnostics = resp.Diagnostics.Append(err)\n\t\treturn resp\n\t}\n\n\tprotoReq := &proto.ReadDataSource_Request{\n\t\tTypeName: r.TypeName,\n\t\tConfig: &proto.DynamicValue{\n\t\t\tMsgpack: config,\n\t\t},\n\t}\n\n\tprotoResp, err := p.client.ReadDataSource(p.ctx, protoReq)\n\tif err != nil {\n\t\tresp.Diagnostics = resp.Diagnostics.Append(err)\n\t\treturn resp\n\t}\n\tresp.Diagnostics = resp.Diagnostics.Append(convert.ProtoToDiagnostics(protoResp.Diagnostics))\n\n\tstate := cty.NullVal(dataSchema.Block.ImpliedType())\n\tif protoResp.State != nil {\n\t\tstate, err = msgpack.Unmarshal(protoResp.State.Msgpack, dataSchema.Block.ImpliedType())\n\t\tif err != nil {\n\t\t\tresp.Diagnostics = resp.Diagnostics.Append(err)\n\t\t\treturn resp\n\t\t}\n\t}\n\tresp.State = state\n\n\treturn resp\n}\n\n// closing the grpc connection is final, and terraform will call it at the end of every phase.\nfunc (p *GRPCProvider) Close() error {\n\tlog.Printf(\"[TRACE] GRPCProvider: Close\")\n\n\t// Make sure to stop the server if we're not running within go-plugin.\n\tif p.TestServer != nil {\n\t\tp.TestServer.Stop()\n\t}\n\n\t// Check this since it's not automatically inserted during plugin creation.\n\t// It's currently only inserted by the command package, because that is\n\t// where the factory is built and is the only point with access to the\n\t// plugin.Client.\n\tif p.PluginClient == nil {\n\t\tlog.Println(\"[DEBUG] provider has no plugin.Client\")\n\t\treturn nil\n\t}\n\n\tp.PluginClient.Kill()\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/plugin/grpc_provisioner.go",
    "content": "package plugin\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"io\"\n\t\"log\"\n\t\"sync\"\n\n\tplugin \"github.com/hashicorp/go-plugin\"\n\t\"github.com/hashicorp/terraform/configs/configschema\"\n\tproto \"github.com/hashicorp/terraform/internal/tfplugin5\"\n\t\"github.com/hashicorp/terraform/plugin/convert\"\n\t\"github.com/hashicorp/terraform/provisioners\"\n\t\"github.com/zclconf/go-cty/cty\"\n\t\"github.com/zclconf/go-cty/cty/msgpack\"\n\t\"google.golang.org/grpc\"\n)\n\n// GRPCProvisionerPlugin is the plugin.GRPCPlugin implementation.\ntype GRPCProvisionerPlugin struct {\n\tplugin.Plugin\n\tGRPCProvisioner func() proto.ProvisionerServer\n}\n\nfunc (p *GRPCProvisionerPlugin) GRPCClient(ctx context.Context, broker *plugin.GRPCBroker, c *grpc.ClientConn) (interface{}, error) {\n\treturn &GRPCProvisioner{\n\t\tclient: proto.NewProvisionerClient(c),\n\t\tctx:    ctx,\n\t}, nil\n}\n\nfunc (p *GRPCProvisionerPlugin) GRPCServer(broker *plugin.GRPCBroker, s *grpc.Server) error {\n\tproto.RegisterProvisionerServer(s, p.GRPCProvisioner())\n\treturn nil\n}\n\n// provisioners.Interface grpc implementation\ntype GRPCProvisioner struct {\n\t// PluginClient provides a reference to the plugin.Client which controls the plugin process.\n\t// This allows the GRPCProvider a way to shutdown the plugin process.\n\tPluginClient *plugin.Client\n\n\tclient proto.ProvisionerClient\n\tctx    context.Context\n\n\t// Cache the schema since we need it for serialization in each method call.\n\tmu     sync.Mutex\n\tschema *configschema.Block\n}\n\nfunc (p *GRPCProvisioner) GetSchema() (resp provisioners.GetSchemaResponse) {\n\tp.mu.Lock()\n\tdefer p.mu.Unlock()\n\n\tif p.schema != nil {\n\t\treturn provisioners.GetSchemaResponse{\n\t\t\tProvisioner: p.schema,\n\t\t}\n\t}\n\n\tprotoResp, err := p.client.GetSchema(p.ctx, new(proto.GetProvisionerSchema_Request))\n\tif err != nil {\n\t\tresp.Diagnostics = resp.Diagnostics.Append(err)\n\t\treturn resp\n\t}\n\tresp.Diagnostics = resp.Diagnostics.Append(convert.ProtoToDiagnostics(protoResp.Diagnostics))\n\n\tif protoResp.Provisioner == nil {\n\t\tresp.Diagnostics = resp.Diagnostics.Append(errors.New(\"missing provisioner schema\"))\n\t\treturn resp\n\t}\n\n\tresp.Provisioner = convert.ProtoToConfigSchema(protoResp.Provisioner.Block)\n\n\tp.schema = resp.Provisioner\n\n\treturn resp\n}\n\nfunc (p *GRPCProvisioner) ValidateProvisionerConfig(r provisioners.ValidateProvisionerConfigRequest) (resp provisioners.ValidateProvisionerConfigResponse) {\n\tschema := p.GetSchema()\n\tif schema.Diagnostics.HasErrors() {\n\t\tresp.Diagnostics = resp.Diagnostics.Append(schema.Diagnostics)\n\t\treturn resp\n\t}\n\n\tmp, err := msgpack.Marshal(r.Config, schema.Provisioner.ImpliedType())\n\tif err != nil {\n\t\tresp.Diagnostics = resp.Diagnostics.Append(err)\n\t\treturn resp\n\t}\n\n\tprotoReq := &proto.ValidateProvisionerConfig_Request{\n\t\tConfig: &proto.DynamicValue{Msgpack: mp},\n\t}\n\tprotoResp, err := p.client.ValidateProvisionerConfig(p.ctx, protoReq)\n\tif err != nil {\n\t\tresp.Diagnostics = resp.Diagnostics.Append(err)\n\t\treturn resp\n\t}\n\tresp.Diagnostics = resp.Diagnostics.Append(convert.ProtoToDiagnostics(protoResp.Diagnostics))\n\treturn resp\n}\n\nfunc (p *GRPCProvisioner) ProvisionResource(r provisioners.ProvisionResourceRequest) (resp provisioners.ProvisionResourceResponse) {\n\tschema := p.GetSchema()\n\tif schema.Diagnostics.HasErrors() {\n\t\tresp.Diagnostics = resp.Diagnostics.Append(schema.Diagnostics)\n\t\treturn resp\n\t}\n\n\tmp, err := msgpack.Marshal(r.Config, schema.Provisioner.ImpliedType())\n\tif err != nil {\n\t\tresp.Diagnostics = resp.Diagnostics.Append(err)\n\t\treturn resp\n\t}\n\n\t// connection is always assumed to be a simple string map\n\tconnMP, err := msgpack.Marshal(r.Connection, cty.Map(cty.String))\n\tif err != nil {\n\t\tresp.Diagnostics = resp.Diagnostics.Append(err)\n\t\treturn resp\n\t}\n\n\tprotoReq := &proto.ProvisionResource_Request{\n\t\tConfig:     &proto.DynamicValue{Msgpack: mp},\n\t\tConnection: &proto.DynamicValue{Msgpack: connMP},\n\t}\n\n\toutputClient, err := p.client.ProvisionResource(p.ctx, protoReq)\n\tif err != nil {\n\t\tresp.Diagnostics = resp.Diagnostics.Append(err)\n\t\treturn resp\n\t}\n\n\tfor {\n\t\trcv, err := outputClient.Recv()\n\t\tif rcv != nil {\n\t\t\tr.UIOutput.Output(rcv.Output)\n\t\t}\n\t\tif err != nil {\n\t\t\tif err != io.EOF {\n\t\t\t\tresp.Diagnostics = resp.Diagnostics.Append(err)\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\n\t\tif len(rcv.Diagnostics) > 0 {\n\t\t\tresp.Diagnostics = resp.Diagnostics.Append(convert.ProtoToDiagnostics(rcv.Diagnostics))\n\t\t\tbreak\n\t\t}\n\t}\n\n\treturn resp\n}\n\nfunc (p *GRPCProvisioner) Stop() error {\n\tprotoResp, err := p.client.Stop(p.ctx, &proto.Stop_Request{})\n\tif err != nil {\n\t\treturn err\n\t}\n\tif protoResp.Error != \"\" {\n\t\treturn errors.New(protoResp.Error)\n\t}\n\treturn nil\n}\n\nfunc (p *GRPCProvisioner) Close() error {\n\t// check this since it's not automatically inserted during plugin creation\n\tif p.PluginClient == nil {\n\t\tlog.Println(\"[DEBUG] provider has no plugin.Client\")\n\t\treturn nil\n\t}\n\n\tp.PluginClient.Kill()\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/plugin/plugin.go",
    "content": "package plugin\n\nimport (\n\t\"github.com/hashicorp/go-plugin\"\n)\n\n// See serve.go for serving plugins\n\nvar VersionedPlugins = map[int]plugin.PluginSet{\n\t5: {\n\t\t\"provider\":    &GRPCProviderPlugin{},\n\t\t\"provisioner\": &GRPCProvisionerPlugin{},\n\t},\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/plugin/resource_provider.go",
    "content": "package plugin\n\nimport (\n\t\"net/rpc\"\n\n\t\"github.com/hashicorp/go-plugin\"\n\t\"github.com/hashicorp/terraform/terraform\"\n)\n\n// ResourceProviderPlugin is the plugin.Plugin implementation.\ntype ResourceProviderPlugin struct {\n\tResourceProvider func() terraform.ResourceProvider\n}\n\nfunc (p *ResourceProviderPlugin) Server(b *plugin.MuxBroker) (interface{}, error) {\n\treturn &ResourceProviderServer{\n\t\tBroker:   b,\n\t\tProvider: p.ResourceProvider(),\n\t}, nil\n}\n\nfunc (p *ResourceProviderPlugin) Client(\n\tb *plugin.MuxBroker, c *rpc.Client) (interface{}, error) {\n\treturn &ResourceProvider{Broker: b, Client: c}, nil\n}\n\n// ResourceProvider is an implementation of terraform.ResourceProvider\n// that communicates over RPC.\ntype ResourceProvider struct {\n\tBroker *plugin.MuxBroker\n\tClient *rpc.Client\n}\n\nfunc (p *ResourceProvider) Stop() error {\n\tvar resp ResourceProviderStopResponse\n\terr := p.Client.Call(\"Plugin.Stop\", new(interface{}), &resp)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif resp.Error != nil {\n\t\terr = resp.Error\n\t}\n\n\treturn err\n}\n\nfunc (p *ResourceProvider) GetSchema(req *terraform.ProviderSchemaRequest) (*terraform.ProviderSchema, error) {\n\tvar result ResourceProviderGetSchemaResponse\n\targs := &ResourceProviderGetSchemaArgs{\n\t\tReq: req,\n\t}\n\n\terr := p.Client.Call(\"Plugin.GetSchema\", args, &result)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif result.Error != nil {\n\t\terr = result.Error\n\t}\n\n\treturn result.Schema, err\n}\n\nfunc (p *ResourceProvider) Input(\n\tinput terraform.UIInput,\n\tc *terraform.ResourceConfig) (*terraform.ResourceConfig, error) {\n\tid := p.Broker.NextId()\n\tgo p.Broker.AcceptAndServe(id, &UIInputServer{\n\t\tUIInput: input,\n\t})\n\n\tvar resp ResourceProviderInputResponse\n\targs := ResourceProviderInputArgs{\n\t\tInputId: id,\n\t\tConfig:  c,\n\t}\n\n\terr := p.Client.Call(\"Plugin.Input\", &args, &resp)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif resp.Error != nil {\n\t\terr = resp.Error\n\t\treturn nil, err\n\t}\n\n\treturn resp.Config, nil\n}\n\nfunc (p *ResourceProvider) Validate(c *terraform.ResourceConfig) ([]string, []error) {\n\tvar resp ResourceProviderValidateResponse\n\targs := ResourceProviderValidateArgs{\n\t\tConfig: c,\n\t}\n\n\terr := p.Client.Call(\"Plugin.Validate\", &args, &resp)\n\tif err != nil {\n\t\treturn nil, []error{err}\n\t}\n\n\tvar errs []error\n\tif len(resp.Errors) > 0 {\n\t\terrs = make([]error, len(resp.Errors))\n\t\tfor i, err := range resp.Errors {\n\t\t\terrs[i] = err\n\t\t}\n\t}\n\n\treturn resp.Warnings, errs\n}\n\nfunc (p *ResourceProvider) ValidateResource(\n\tt string, c *terraform.ResourceConfig) ([]string, []error) {\n\tvar resp ResourceProviderValidateResourceResponse\n\targs := ResourceProviderValidateResourceArgs{\n\t\tConfig: c,\n\t\tType:   t,\n\t}\n\n\terr := p.Client.Call(\"Plugin.ValidateResource\", &args, &resp)\n\tif err != nil {\n\t\treturn nil, []error{err}\n\t}\n\n\tvar errs []error\n\tif len(resp.Errors) > 0 {\n\t\terrs = make([]error, len(resp.Errors))\n\t\tfor i, err := range resp.Errors {\n\t\t\terrs[i] = err\n\t\t}\n\t}\n\n\treturn resp.Warnings, errs\n}\n\nfunc (p *ResourceProvider) Configure(c *terraform.ResourceConfig) error {\n\tvar resp ResourceProviderConfigureResponse\n\terr := p.Client.Call(\"Plugin.Configure\", c, &resp)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif resp.Error != nil {\n\t\terr = resp.Error\n\t}\n\n\treturn err\n}\n\nfunc (p *ResourceProvider) Apply(\n\tinfo *terraform.InstanceInfo,\n\ts *terraform.InstanceState,\n\td *terraform.InstanceDiff) (*terraform.InstanceState, error) {\n\tvar resp ResourceProviderApplyResponse\n\targs := &ResourceProviderApplyArgs{\n\t\tInfo:  info,\n\t\tState: s,\n\t\tDiff:  d,\n\t}\n\n\terr := p.Client.Call(\"Plugin.Apply\", args, &resp)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif resp.Error != nil {\n\t\terr = resp.Error\n\t}\n\n\treturn resp.State, err\n}\n\nfunc (p *ResourceProvider) Diff(\n\tinfo *terraform.InstanceInfo,\n\ts *terraform.InstanceState,\n\tc *terraform.ResourceConfig) (*terraform.InstanceDiff, error) {\n\tvar resp ResourceProviderDiffResponse\n\targs := &ResourceProviderDiffArgs{\n\t\tInfo:   info,\n\t\tState:  s,\n\t\tConfig: c,\n\t}\n\terr := p.Client.Call(\"Plugin.Diff\", args, &resp)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif resp.Error != nil {\n\t\terr = resp.Error\n\t}\n\n\treturn resp.Diff, err\n}\n\nfunc (p *ResourceProvider) ValidateDataSource(\n\tt string, c *terraform.ResourceConfig) ([]string, []error) {\n\tvar resp ResourceProviderValidateResourceResponse\n\targs := ResourceProviderValidateResourceArgs{\n\t\tConfig: c,\n\t\tType:   t,\n\t}\n\n\terr := p.Client.Call(\"Plugin.ValidateDataSource\", &args, &resp)\n\tif err != nil {\n\t\treturn nil, []error{err}\n\t}\n\n\tvar errs []error\n\tif len(resp.Errors) > 0 {\n\t\terrs = make([]error, len(resp.Errors))\n\t\tfor i, err := range resp.Errors {\n\t\t\terrs[i] = err\n\t\t}\n\t}\n\n\treturn resp.Warnings, errs\n}\n\nfunc (p *ResourceProvider) Refresh(\n\tinfo *terraform.InstanceInfo,\n\ts *terraform.InstanceState) (*terraform.InstanceState, error) {\n\tvar resp ResourceProviderRefreshResponse\n\targs := &ResourceProviderRefreshArgs{\n\t\tInfo:  info,\n\t\tState: s,\n\t}\n\n\terr := p.Client.Call(\"Plugin.Refresh\", args, &resp)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif resp.Error != nil {\n\t\terr = resp.Error\n\t}\n\n\treturn resp.State, err\n}\n\nfunc (p *ResourceProvider) ImportState(\n\tinfo *terraform.InstanceInfo,\n\tid string) ([]*terraform.InstanceState, error) {\n\tvar resp ResourceProviderImportStateResponse\n\targs := &ResourceProviderImportStateArgs{\n\t\tInfo: info,\n\t\tId:   id,\n\t}\n\n\terr := p.Client.Call(\"Plugin.ImportState\", args, &resp)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif resp.Error != nil {\n\t\terr = resp.Error\n\t}\n\n\treturn resp.State, err\n}\n\nfunc (p *ResourceProvider) Resources() []terraform.ResourceType {\n\tvar result []terraform.ResourceType\n\n\terr := p.Client.Call(\"Plugin.Resources\", new(interface{}), &result)\n\tif err != nil {\n\t\t// TODO: panic, log, what?\n\t\treturn nil\n\t}\n\n\treturn result\n}\n\nfunc (p *ResourceProvider) ReadDataDiff(\n\tinfo *terraform.InstanceInfo,\n\tc *terraform.ResourceConfig) (*terraform.InstanceDiff, error) {\n\tvar resp ResourceProviderReadDataDiffResponse\n\targs := &ResourceProviderReadDataDiffArgs{\n\t\tInfo:   info,\n\t\tConfig: c,\n\t}\n\n\terr := p.Client.Call(\"Plugin.ReadDataDiff\", args, &resp)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif resp.Error != nil {\n\t\terr = resp.Error\n\t}\n\n\treturn resp.Diff, err\n}\n\nfunc (p *ResourceProvider) ReadDataApply(\n\tinfo *terraform.InstanceInfo,\n\td *terraform.InstanceDiff) (*terraform.InstanceState, error) {\n\tvar resp ResourceProviderReadDataApplyResponse\n\targs := &ResourceProviderReadDataApplyArgs{\n\t\tInfo: info,\n\t\tDiff: d,\n\t}\n\n\terr := p.Client.Call(\"Plugin.ReadDataApply\", args, &resp)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif resp.Error != nil {\n\t\terr = resp.Error\n\t}\n\n\treturn resp.State, err\n}\n\nfunc (p *ResourceProvider) DataSources() []terraform.DataSource {\n\tvar result []terraform.DataSource\n\n\terr := p.Client.Call(\"Plugin.DataSources\", new(interface{}), &result)\n\tif err != nil {\n\t\t// TODO: panic, log, what?\n\t\treturn nil\n\t}\n\n\treturn result\n}\n\nfunc (p *ResourceProvider) Close() error {\n\treturn p.Client.Close()\n}\n\n// ResourceProviderServer is a net/rpc compatible structure for serving\n// a ResourceProvider. This should not be used directly.\ntype ResourceProviderServer struct {\n\tBroker   *plugin.MuxBroker\n\tProvider terraform.ResourceProvider\n}\n\ntype ResourceProviderStopResponse struct {\n\tError *plugin.BasicError\n}\n\ntype ResourceProviderGetSchemaArgs struct {\n\tReq *terraform.ProviderSchemaRequest\n}\n\ntype ResourceProviderGetSchemaResponse struct {\n\tSchema *terraform.ProviderSchema\n\tError  *plugin.BasicError\n}\n\ntype ResourceProviderConfigureResponse struct {\n\tError *plugin.BasicError\n}\n\ntype ResourceProviderInputArgs struct {\n\tInputId uint32\n\tConfig  *terraform.ResourceConfig\n}\n\ntype ResourceProviderInputResponse struct {\n\tConfig *terraform.ResourceConfig\n\tError  *plugin.BasicError\n}\n\ntype ResourceProviderApplyArgs struct {\n\tInfo  *terraform.InstanceInfo\n\tState *terraform.InstanceState\n\tDiff  *terraform.InstanceDiff\n}\n\ntype ResourceProviderApplyResponse struct {\n\tState *terraform.InstanceState\n\tError *plugin.BasicError\n}\n\ntype ResourceProviderDiffArgs struct {\n\tInfo   *terraform.InstanceInfo\n\tState  *terraform.InstanceState\n\tConfig *terraform.ResourceConfig\n}\n\ntype ResourceProviderDiffResponse struct {\n\tDiff  *terraform.InstanceDiff\n\tError *plugin.BasicError\n}\n\ntype ResourceProviderRefreshArgs struct {\n\tInfo  *terraform.InstanceInfo\n\tState *terraform.InstanceState\n}\n\ntype ResourceProviderRefreshResponse struct {\n\tState *terraform.InstanceState\n\tError *plugin.BasicError\n}\n\ntype ResourceProviderImportStateArgs struct {\n\tInfo *terraform.InstanceInfo\n\tId   string\n}\n\ntype ResourceProviderImportStateResponse struct {\n\tState []*terraform.InstanceState\n\tError *plugin.BasicError\n}\n\ntype ResourceProviderReadDataApplyArgs struct {\n\tInfo *terraform.InstanceInfo\n\tDiff *terraform.InstanceDiff\n}\n\ntype ResourceProviderReadDataApplyResponse struct {\n\tState *terraform.InstanceState\n\tError *plugin.BasicError\n}\n\ntype ResourceProviderReadDataDiffArgs struct {\n\tInfo   *terraform.InstanceInfo\n\tConfig *terraform.ResourceConfig\n}\n\ntype ResourceProviderReadDataDiffResponse struct {\n\tDiff  *terraform.InstanceDiff\n\tError *plugin.BasicError\n}\n\ntype ResourceProviderValidateArgs struct {\n\tConfig *terraform.ResourceConfig\n}\n\ntype ResourceProviderValidateResponse struct {\n\tWarnings []string\n\tErrors   []*plugin.BasicError\n}\n\ntype ResourceProviderValidateResourceArgs struct {\n\tConfig *terraform.ResourceConfig\n\tType   string\n}\n\ntype ResourceProviderValidateResourceResponse struct {\n\tWarnings []string\n\tErrors   []*plugin.BasicError\n}\n\nfunc (s *ResourceProviderServer) Stop(\n\t_ interface{},\n\treply *ResourceProviderStopResponse) error {\n\terr := s.Provider.Stop()\n\t*reply = ResourceProviderStopResponse{\n\t\tError: plugin.NewBasicError(err),\n\t}\n\n\treturn nil\n}\n\nfunc (s *ResourceProviderServer) GetSchema(\n\targs *ResourceProviderGetSchemaArgs,\n\tresult *ResourceProviderGetSchemaResponse,\n) error {\n\tschema, err := s.Provider.GetSchema(args.Req)\n\tresult.Schema = schema\n\tif err != nil {\n\t\tresult.Error = plugin.NewBasicError(err)\n\t}\n\treturn nil\n}\n\nfunc (s *ResourceProviderServer) Input(\n\targs *ResourceProviderInputArgs,\n\treply *ResourceProviderInputResponse) error {\n\tconn, err := s.Broker.Dial(args.InputId)\n\tif err != nil {\n\t\t*reply = ResourceProviderInputResponse{\n\t\t\tError: plugin.NewBasicError(err),\n\t\t}\n\t\treturn nil\n\t}\n\tclient := rpc.NewClient(conn)\n\tdefer client.Close()\n\n\tinput := &UIInput{Client: client}\n\n\tconfig, err := s.Provider.Input(input, args.Config)\n\t*reply = ResourceProviderInputResponse{\n\t\tConfig: config,\n\t\tError:  plugin.NewBasicError(err),\n\t}\n\n\treturn nil\n}\n\nfunc (s *ResourceProviderServer) Validate(\n\targs *ResourceProviderValidateArgs,\n\treply *ResourceProviderValidateResponse) error {\n\twarns, errs := s.Provider.Validate(args.Config)\n\tberrs := make([]*plugin.BasicError, len(errs))\n\tfor i, err := range errs {\n\t\tberrs[i] = plugin.NewBasicError(err)\n\t}\n\t*reply = ResourceProviderValidateResponse{\n\t\tWarnings: warns,\n\t\tErrors:   berrs,\n\t}\n\treturn nil\n}\n\nfunc (s *ResourceProviderServer) ValidateResource(\n\targs *ResourceProviderValidateResourceArgs,\n\treply *ResourceProviderValidateResourceResponse) error {\n\twarns, errs := s.Provider.ValidateResource(args.Type, args.Config)\n\tberrs := make([]*plugin.BasicError, len(errs))\n\tfor i, err := range errs {\n\t\tberrs[i] = plugin.NewBasicError(err)\n\t}\n\t*reply = ResourceProviderValidateResourceResponse{\n\t\tWarnings: warns,\n\t\tErrors:   berrs,\n\t}\n\treturn nil\n}\n\nfunc (s *ResourceProviderServer) Configure(\n\tconfig *terraform.ResourceConfig,\n\treply *ResourceProviderConfigureResponse) error {\n\terr := s.Provider.Configure(config)\n\t*reply = ResourceProviderConfigureResponse{\n\t\tError: plugin.NewBasicError(err),\n\t}\n\treturn nil\n}\n\nfunc (s *ResourceProviderServer) Apply(\n\targs *ResourceProviderApplyArgs,\n\tresult *ResourceProviderApplyResponse) error {\n\tstate, err := s.Provider.Apply(args.Info, args.State, args.Diff)\n\t*result = ResourceProviderApplyResponse{\n\t\tState: state,\n\t\tError: plugin.NewBasicError(err),\n\t}\n\treturn nil\n}\n\nfunc (s *ResourceProviderServer) Diff(\n\targs *ResourceProviderDiffArgs,\n\tresult *ResourceProviderDiffResponse) error {\n\tdiff, err := s.Provider.Diff(args.Info, args.State, args.Config)\n\t*result = ResourceProviderDiffResponse{\n\t\tDiff:  diff,\n\t\tError: plugin.NewBasicError(err),\n\t}\n\treturn nil\n}\n\nfunc (s *ResourceProviderServer) Refresh(\n\targs *ResourceProviderRefreshArgs,\n\tresult *ResourceProviderRefreshResponse) error {\n\tnewState, err := s.Provider.Refresh(args.Info, args.State)\n\t*result = ResourceProviderRefreshResponse{\n\t\tState: newState,\n\t\tError: plugin.NewBasicError(err),\n\t}\n\treturn nil\n}\n\nfunc (s *ResourceProviderServer) ImportState(\n\targs *ResourceProviderImportStateArgs,\n\tresult *ResourceProviderImportStateResponse) error {\n\tstates, err := s.Provider.ImportState(args.Info, args.Id)\n\t*result = ResourceProviderImportStateResponse{\n\t\tState: states,\n\t\tError: plugin.NewBasicError(err),\n\t}\n\treturn nil\n}\n\nfunc (s *ResourceProviderServer) Resources(\n\tnothing interface{},\n\tresult *[]terraform.ResourceType) error {\n\t*result = s.Provider.Resources()\n\treturn nil\n}\n\nfunc (s *ResourceProviderServer) ValidateDataSource(\n\targs *ResourceProviderValidateResourceArgs,\n\treply *ResourceProviderValidateResourceResponse) error {\n\twarns, errs := s.Provider.ValidateDataSource(args.Type, args.Config)\n\tberrs := make([]*plugin.BasicError, len(errs))\n\tfor i, err := range errs {\n\t\tberrs[i] = plugin.NewBasicError(err)\n\t}\n\t*reply = ResourceProviderValidateResourceResponse{\n\t\tWarnings: warns,\n\t\tErrors:   berrs,\n\t}\n\treturn nil\n}\n\nfunc (s *ResourceProviderServer) ReadDataDiff(\n\targs *ResourceProviderReadDataDiffArgs,\n\tresult *ResourceProviderReadDataDiffResponse) error {\n\tdiff, err := s.Provider.ReadDataDiff(args.Info, args.Config)\n\t*result = ResourceProviderReadDataDiffResponse{\n\t\tDiff:  diff,\n\t\tError: plugin.NewBasicError(err),\n\t}\n\treturn nil\n}\n\nfunc (s *ResourceProviderServer) ReadDataApply(\n\targs *ResourceProviderReadDataApplyArgs,\n\tresult *ResourceProviderReadDataApplyResponse) error {\n\tnewState, err := s.Provider.ReadDataApply(args.Info, args.Diff)\n\t*result = ResourceProviderReadDataApplyResponse{\n\t\tState: newState,\n\t\tError: plugin.NewBasicError(err),\n\t}\n\treturn nil\n}\n\nfunc (s *ResourceProviderServer) DataSources(\n\tnothing interface{},\n\tresult *[]terraform.DataSource) error {\n\t*result = s.Provider.DataSources()\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/plugin/resource_provisioner.go",
    "content": "package plugin\n\nimport (\n\t\"net/rpc\"\n\n\t\"github.com/hashicorp/go-plugin\"\n\t\"github.com/hashicorp/terraform/configs/configschema\"\n\t\"github.com/hashicorp/terraform/terraform\"\n)\n\n// ResourceProvisionerPlugin is the plugin.Plugin implementation.\ntype ResourceProvisionerPlugin struct {\n\tResourceProvisioner func() terraform.ResourceProvisioner\n}\n\nfunc (p *ResourceProvisionerPlugin) Server(b *plugin.MuxBroker) (interface{}, error) {\n\treturn &ResourceProvisionerServer{\n\t\tBroker:      b,\n\t\tProvisioner: p.ResourceProvisioner(),\n\t}, nil\n}\n\nfunc (p *ResourceProvisionerPlugin) Client(\n\tb *plugin.MuxBroker, c *rpc.Client) (interface{}, error) {\n\treturn &ResourceProvisioner{Broker: b, Client: c}, nil\n}\n\n// ResourceProvisioner is an implementation of terraform.ResourceProvisioner\n// that communicates over RPC.\ntype ResourceProvisioner struct {\n\tBroker *plugin.MuxBroker\n\tClient *rpc.Client\n}\n\nfunc (p *ResourceProvisioner) GetConfigSchema() (*configschema.Block, error) {\n\tpanic(\"not implemented\")\n\treturn nil, nil\n}\n\nfunc (p *ResourceProvisioner) Validate(c *terraform.ResourceConfig) ([]string, []error) {\n\tvar resp ResourceProvisionerValidateResponse\n\targs := ResourceProvisionerValidateArgs{\n\t\tConfig: c,\n\t}\n\n\terr := p.Client.Call(\"Plugin.Validate\", &args, &resp)\n\tif err != nil {\n\t\treturn nil, []error{err}\n\t}\n\n\tvar errs []error\n\tif len(resp.Errors) > 0 {\n\t\terrs = make([]error, len(resp.Errors))\n\t\tfor i, err := range resp.Errors {\n\t\t\terrs[i] = err\n\t\t}\n\t}\n\n\treturn resp.Warnings, errs\n}\n\nfunc (p *ResourceProvisioner) Apply(\n\toutput terraform.UIOutput,\n\ts *terraform.InstanceState,\n\tc *terraform.ResourceConfig) error {\n\tid := p.Broker.NextId()\n\tgo p.Broker.AcceptAndServe(id, &UIOutputServer{\n\t\tUIOutput: output,\n\t})\n\n\tvar resp ResourceProvisionerApplyResponse\n\targs := &ResourceProvisionerApplyArgs{\n\t\tOutputId: id,\n\t\tState:    s,\n\t\tConfig:   c,\n\t}\n\n\terr := p.Client.Call(\"Plugin.Apply\", args, &resp)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif resp.Error != nil {\n\t\terr = resp.Error\n\t}\n\n\treturn err\n}\n\nfunc (p *ResourceProvisioner) Stop() error {\n\tvar resp ResourceProvisionerStopResponse\n\terr := p.Client.Call(\"Plugin.Stop\", new(interface{}), &resp)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif resp.Error != nil {\n\t\terr = resp.Error\n\t}\n\n\treturn err\n}\n\nfunc (p *ResourceProvisioner) Close() error {\n\treturn p.Client.Close()\n}\n\ntype ResourceProvisionerValidateArgs struct {\n\tConfig *terraform.ResourceConfig\n}\n\ntype ResourceProvisionerValidateResponse struct {\n\tWarnings []string\n\tErrors   []*plugin.BasicError\n}\n\ntype ResourceProvisionerApplyArgs struct {\n\tOutputId uint32\n\tState    *terraform.InstanceState\n\tConfig   *terraform.ResourceConfig\n}\n\ntype ResourceProvisionerApplyResponse struct {\n\tError *plugin.BasicError\n}\n\ntype ResourceProvisionerStopResponse struct {\n\tError *plugin.BasicError\n}\n\n// ResourceProvisionerServer is a net/rpc compatible structure for serving\n// a ResourceProvisioner. This should not be used directly.\ntype ResourceProvisionerServer struct {\n\tBroker      *plugin.MuxBroker\n\tProvisioner terraform.ResourceProvisioner\n}\n\nfunc (s *ResourceProvisionerServer) Apply(\n\targs *ResourceProvisionerApplyArgs,\n\tresult *ResourceProvisionerApplyResponse) error {\n\tconn, err := s.Broker.Dial(args.OutputId)\n\tif err != nil {\n\t\t*result = ResourceProvisionerApplyResponse{\n\t\t\tError: plugin.NewBasicError(err),\n\t\t}\n\t\treturn nil\n\t}\n\tclient := rpc.NewClient(conn)\n\tdefer client.Close()\n\n\toutput := &UIOutput{Client: client}\n\n\terr = s.Provisioner.Apply(output, args.State, args.Config)\n\t*result = ResourceProvisionerApplyResponse{\n\t\tError: plugin.NewBasicError(err),\n\t}\n\treturn nil\n}\n\nfunc (s *ResourceProvisionerServer) Validate(\n\targs *ResourceProvisionerValidateArgs,\n\treply *ResourceProvisionerValidateResponse) error {\n\twarns, errs := s.Provisioner.Validate(args.Config)\n\tberrs := make([]*plugin.BasicError, len(errs))\n\tfor i, err := range errs {\n\t\tberrs[i] = plugin.NewBasicError(err)\n\t}\n\t*reply = ResourceProvisionerValidateResponse{\n\t\tWarnings: warns,\n\t\tErrors:   berrs,\n\t}\n\treturn nil\n}\n\nfunc (s *ResourceProvisionerServer) Stop(\n\t_ interface{},\n\treply *ResourceProvisionerStopResponse) error {\n\terr := s.Provisioner.Stop()\n\t*reply = ResourceProvisionerStopResponse{\n\t\tError: plugin.NewBasicError(err),\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/plugin/serve.go",
    "content": "package plugin\n\nimport (\n\t\"github.com/hashicorp/go-plugin\"\n\tgrpcplugin \"github.com/hashicorp/terraform/helper/plugin\"\n\tproto \"github.com/hashicorp/terraform/internal/tfplugin5\"\n\t\"github.com/hashicorp/terraform/terraform\"\n)\n\nconst (\n\t// The constants below are the names of the plugins that can be dispensed\n\t// from the plugin server.\n\tProviderPluginName    = \"provider\"\n\tProvisionerPluginName = \"provisioner\"\n\n\t// DefaultProtocolVersion is the protocol version assumed for legacy clients that don't specify\n\t// a particular version during their handshake. This is the version used when Terraform 0.10\n\t// and 0.11 launch plugins that were built with support for both versions 4 and 5, and must\n\t// stay unchanged at 4 until we intentionally build plugins that are not compatible with 0.10 and\n\t// 0.11.\n\tDefaultProtocolVersion = 4\n)\n\n// Handshake is the HandshakeConfig used to configure clients and servers.\nvar Handshake = plugin.HandshakeConfig{\n\t// The ProtocolVersion is the version that must match between TF core\n\t// and TF plugins. This should be bumped whenever a change happens in\n\t// one or the other that makes it so that they can't safely communicate.\n\t// This could be adding a new interface value, it could be how\n\t// helper/schema computes diffs, etc.\n\tProtocolVersion: DefaultProtocolVersion,\n\n\t// The magic cookie values should NEVER be changed.\n\tMagicCookieKey:   \"TF_PLUGIN_MAGIC_COOKIE\",\n\tMagicCookieValue: \"d602bf8f470bc67ca7faa0386276bbdd4330efaf76d1a219cb4d6991ca9872b2\",\n}\n\ntype ProviderFunc func() terraform.ResourceProvider\ntype ProvisionerFunc func() terraform.ResourceProvisioner\ntype GRPCProviderFunc func() proto.ProviderServer\ntype GRPCProvisionerFunc func() proto.ProvisionerServer\n\n// ServeOpts are the configurations to serve a plugin.\ntype ServeOpts struct {\n\tProviderFunc    ProviderFunc\n\tProvisionerFunc ProvisionerFunc\n\n\t// Wrapped versions of the above plugins will automatically shimmed and\n\t// added to the GRPC functions when possible.\n\tGRPCProviderFunc    GRPCProviderFunc\n\tGRPCProvisionerFunc GRPCProvisionerFunc\n}\n\n// Serve serves a plugin. This function never returns and should be the final\n// function called in the main function of the plugin.\nfunc Serve(opts *ServeOpts) {\n\t// since the plugins may not yet be aware of the new protocol, we\n\t// automatically wrap the plugins in the grpc shims.\n\tif opts.GRPCProviderFunc == nil && opts.ProviderFunc != nil {\n\t\tprovider := grpcplugin.NewGRPCProviderServerShim(opts.ProviderFunc())\n\t\t// this is almost always going to be a *schema.Provider, but check that\n\t\t// we got back a valid provider just in case.\n\t\tif provider != nil {\n\t\t\topts.GRPCProviderFunc = func() proto.ProviderServer {\n\t\t\t\treturn provider\n\t\t\t}\n\t\t}\n\t}\n\tif opts.GRPCProvisionerFunc == nil && opts.ProvisionerFunc != nil {\n\t\tprovisioner := grpcplugin.NewGRPCProvisionerServerShim(opts.ProvisionerFunc())\n\t\tif provisioner != nil {\n\t\t\topts.GRPCProvisionerFunc = func() proto.ProvisionerServer {\n\t\t\t\treturn provisioner\n\t\t\t}\n\t\t}\n\t}\n\n\tplugin.Serve(&plugin.ServeConfig{\n\t\tHandshakeConfig:  Handshake,\n\t\tVersionedPlugins: pluginSet(opts),\n\t\tGRPCServer:       plugin.DefaultGRPCServer,\n\t})\n}\n\n// pluginMap returns the legacy map[string]plugin.Plugin to use for configuring\n// a plugin server or client.\nfunc legacyPluginMap(opts *ServeOpts) map[string]plugin.Plugin {\n\treturn map[string]plugin.Plugin{\n\t\t\"provider\": &ResourceProviderPlugin{\n\t\t\tResourceProvider: opts.ProviderFunc,\n\t\t},\n\t\t\"provisioner\": &ResourceProvisionerPlugin{\n\t\t\tResourceProvisioner: opts.ProvisionerFunc,\n\t\t},\n\t}\n}\n\nfunc pluginSet(opts *ServeOpts) map[int]plugin.PluginSet {\n\t// Set the legacy netrpc plugins at version 4.\n\t// The oldest version is returned in when executed by a legacy go-plugin\n\t// client.\n\tplugins := map[int]plugin.PluginSet{\n\t\t4: legacyPluginMap(opts),\n\t}\n\n\t// add the new protocol versions if they're configured\n\tif opts.GRPCProviderFunc != nil || opts.GRPCProvisionerFunc != nil {\n\t\tplugins[5] = plugin.PluginSet{}\n\t\tif opts.GRPCProviderFunc != nil {\n\t\t\tplugins[5][\"provider\"] = &GRPCProviderPlugin{\n\t\t\t\tGRPCProvider: opts.GRPCProviderFunc,\n\t\t\t}\n\t\t}\n\t\tif opts.GRPCProvisionerFunc != nil {\n\t\t\tplugins[5][\"provisioner\"] = &GRPCProvisionerPlugin{\n\t\t\t\tGRPCProvisioner: opts.GRPCProvisionerFunc,\n\t\t\t}\n\t\t}\n\t}\n\treturn plugins\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/plugin/ui_input.go",
    "content": "package plugin\n\nimport (\n\t\"context\"\n\t\"net/rpc\"\n\n\t\"github.com/hashicorp/go-plugin\"\n\t\"github.com/hashicorp/terraform/terraform\"\n)\n\n// UIInput is an implementation of terraform.UIInput that communicates\n// over RPC.\ntype UIInput struct {\n\tClient *rpc.Client\n}\n\nfunc (i *UIInput) Input(ctx context.Context, opts *terraform.InputOpts) (string, error) {\n\tvar resp UIInputInputResponse\n\terr := i.Client.Call(\"Plugin.Input\", opts, &resp)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tif resp.Error != nil {\n\t\terr = resp.Error\n\t\treturn \"\", err\n\t}\n\n\treturn resp.Value, nil\n}\n\ntype UIInputInputResponse struct {\n\tValue string\n\tError *plugin.BasicError\n}\n\n// UIInputServer is a net/rpc compatible structure for serving\n// a UIInputServer. This should not be used directly.\ntype UIInputServer struct {\n\tUIInput terraform.UIInput\n}\n\nfunc (s *UIInputServer) Input(\n\topts *terraform.InputOpts,\n\treply *UIInputInputResponse) error {\n\tvalue, err := s.UIInput.Input(context.Background(), opts)\n\t*reply = UIInputInputResponse{\n\t\tValue: value,\n\t\tError: plugin.NewBasicError(err),\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/plugin/ui_output.go",
    "content": "package plugin\n\nimport (\n\t\"net/rpc\"\n\n\t\"github.com/hashicorp/terraform/terraform\"\n)\n\n// UIOutput is an implementatin of terraform.UIOutput that communicates\n// over RPC.\ntype UIOutput struct {\n\tClient *rpc.Client\n}\n\nfunc (o *UIOutput) Output(v string) {\n\to.Client.Call(\"Plugin.Output\", v, new(interface{}))\n}\n\n// UIOutputServer is the RPC server for serving UIOutput.\ntype UIOutputServer struct {\n\tUIOutput terraform.UIOutput\n}\n\nfunc (s *UIOutputServer) Output(\n\tv string,\n\treply *interface{}) error {\n\ts.UIOutput.Output(v)\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/providers/addressed_types.go",
    "content": "package providers\n\nimport (\n\t\"sort\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n)\n\n// AddressedTypes is a helper that extracts all of the distinct provider\n// types from the given list of relative provider configuration addresses.\nfunc AddressedTypes(providerAddrs []addrs.ProviderConfig) []string {\n\tif len(providerAddrs) == 0 {\n\t\treturn nil\n\t}\n\tm := map[string]struct{}{}\n\tfor _, addr := range providerAddrs {\n\t\tm[addr.Type] = struct{}{}\n\t}\n\n\tnames := make([]string, 0, len(m))\n\tfor typeName := range m {\n\t\tnames = append(names, typeName)\n\t}\n\n\tsort.Strings(names) // Stable result for tests\n\treturn names\n}\n\n// AddressedTypesAbs is a helper that extracts all of the distinct provider\n// types from the given list of absolute provider configuration addresses.\nfunc AddressedTypesAbs(providerAddrs []addrs.AbsProviderConfig) []string {\n\tif len(providerAddrs) == 0 {\n\t\treturn nil\n\t}\n\tm := map[string]struct{}{}\n\tfor _, addr := range providerAddrs {\n\t\tm[addr.ProviderConfig.Type] = struct{}{}\n\t}\n\n\tnames := make([]string, 0, len(m))\n\tfor typeName := range m {\n\t\tnames = append(names, typeName)\n\t}\n\n\tsort.Strings(names) // Stable result for tests\n\treturn names\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/providers/doc.go",
    "content": "// Package providers contains the interface and primary types required to\n// implement a Terraform resource provider.\npackage providers\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/providers/provider.go",
    "content": "package providers\n\nimport (\n\t\"github.com/zclconf/go-cty/cty\"\n\n\t\"github.com/hashicorp/terraform/configs/configschema\"\n\t\"github.com/hashicorp/terraform/states\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n)\n\n// Interface represents the set of methods required for a complete resource\n// provider plugin.\ntype Interface interface {\n\t// GetSchema returns the complete schema for the provider.\n\tGetSchema() GetSchemaResponse\n\n\t// PrepareProviderConfig allows the provider to validate the configuration\n\t// values, and set or override any values with defaults.\n\tPrepareProviderConfig(PrepareProviderConfigRequest) PrepareProviderConfigResponse\n\n\t// ValidateResourceTypeConfig allows the provider to validate the resource\n\t// configuration values.\n\tValidateResourceTypeConfig(ValidateResourceTypeConfigRequest) ValidateResourceTypeConfigResponse\n\n\t// ValidateDataSource allows the provider to validate the data source\n\t// configuration values.\n\tValidateDataSourceConfig(ValidateDataSourceConfigRequest) ValidateDataSourceConfigResponse\n\n\t// UpgradeResourceState is called when the state loader encounters an\n\t// instance state whose schema version is less than the one reported by the\n\t// currently-used version of the corresponding provider, and the upgraded\n\t// result is used for any further processing.\n\tUpgradeResourceState(UpgradeResourceStateRequest) UpgradeResourceStateResponse\n\n\t// Configure configures and initialized the provider.\n\tConfigure(ConfigureRequest) ConfigureResponse\n\n\t// Stop is called when the provider should halt any in-flight actions.\n\t//\n\t// Stop should not block waiting for in-flight actions to complete. It\n\t// should take any action it wants and return immediately acknowledging it\n\t// has received the stop request. Terraform will not make any further API\n\t// calls to the provider after Stop is called.\n\t//\n\t// The error returned, if non-nil, is assumed to mean that signaling the\n\t// stop somehow failed and that the user should expect potentially waiting\n\t// a longer period of time.\n\tStop() error\n\n\t// ReadResource refreshes a resource and returns its current state.\n\tReadResource(ReadResourceRequest) ReadResourceResponse\n\n\t// PlanResourceChange takes the current state and proposed state of a\n\t// resource, and returns the planned final state.\n\tPlanResourceChange(PlanResourceChangeRequest) PlanResourceChangeResponse\n\n\t// ApplyResourceChange takes the planned state for a resource, which may\n\t// yet contain unknown computed values, and applies the changes returning\n\t// the final state.\n\tApplyResourceChange(ApplyResourceChangeRequest) ApplyResourceChangeResponse\n\n\t// ImportResourceState requests that the given resource be imported.\n\tImportResourceState(ImportResourceStateRequest) ImportResourceStateResponse\n\n\t// ReadDataSource returns the data source's current state.\n\tReadDataSource(ReadDataSourceRequest) ReadDataSourceResponse\n\n\t// Close shuts down the plugin process if applicable.\n\tClose() error\n}\n\ntype GetSchemaResponse struct {\n\t// Provider is the schema for the provider itself.\n\tProvider Schema\n\n\t// ResourceTypes map the resource type name to that type's schema.\n\tResourceTypes map[string]Schema\n\n\t// DataSources maps the data source name to that data source's schema.\n\tDataSources map[string]Schema\n\n\t// Diagnostics contains any warnings or errors from the method call.\n\tDiagnostics tfdiags.Diagnostics\n}\n\n// Schema pairs a provider or resource schema with that schema's version.\n// This is used to be able to upgrade the schema in UpgradeResourceState.\ntype Schema struct {\n\tVersion int64\n\tBlock   *configschema.Block\n}\n\ntype PrepareProviderConfigRequest struct {\n\t// Config is the raw configuration value for the provider.\n\tConfig cty.Value\n}\n\ntype PrepareProviderConfigResponse struct {\n\t// PreparedConfig is the configuration as prepared by the provider.\n\tPreparedConfig cty.Value\n\t// Diagnostics contains any warnings or errors from the method call.\n\tDiagnostics tfdiags.Diagnostics\n}\n\ntype ValidateResourceTypeConfigRequest struct {\n\t// TypeName is the name of the resource type to validate.\n\tTypeName string\n\n\t// Config is the configuration value to validate, which may contain unknown\n\t// values.\n\tConfig cty.Value\n}\n\ntype ValidateResourceTypeConfigResponse struct {\n\t// Diagnostics contains any warnings or errors from the method call.\n\tDiagnostics tfdiags.Diagnostics\n}\n\ntype ValidateDataSourceConfigRequest struct {\n\t// TypeName is the name of the data source type to validate.\n\tTypeName string\n\n\t// Config is the configuration value to validate, which may contain unknown\n\t// values.\n\tConfig cty.Value\n}\n\ntype ValidateDataSourceConfigResponse struct {\n\t// Diagnostics contains any warnings or errors from the method call.\n\tDiagnostics tfdiags.Diagnostics\n}\n\ntype UpgradeResourceStateRequest struct {\n\t// TypeName is the name of the resource type being upgraded\n\tTypeName string\n\n\t// Version is version of the schema that created the current state.\n\tVersion int64\n\n\t// RawStateJSON and RawStateFlatmap contiain the state that needs to be\n\t// upgraded to match the current schema version. Because the schema is\n\t// unknown, this contains only the raw data as stored in the state.\n\t// RawStateJSON is the current json state encoding.\n\t// RawStateFlatmap is the legacy flatmap encoding.\n\t// Only on of these fields may be set for the upgrade request.\n\tRawStateJSON    []byte\n\tRawStateFlatmap map[string]string\n}\n\ntype UpgradeResourceStateResponse struct {\n\t// UpgradedState is the newly upgraded resource state.\n\tUpgradedState cty.Value\n\n\t// Diagnostics contains any warnings or errors from the method call.\n\tDiagnostics tfdiags.Diagnostics\n}\n\ntype ConfigureRequest struct {\n\t// Terraform version is the version string from the running instance of\n\t// terraform. Providers can use TerraformVersion to verify compatibility,\n\t// and to store for informational purposes.\n\tTerraformVersion string\n\n\t// Config is the complete configuration value for the provider.\n\tConfig cty.Value\n}\n\ntype ConfigureResponse struct {\n\t// Diagnostics contains any warnings or errors from the method call.\n\tDiagnostics tfdiags.Diagnostics\n}\n\ntype ReadResourceRequest struct {\n\t// TypeName is the name of the resource type being read.\n\tTypeName string\n\n\t// PriorState contains the previously saved state value for this resource.\n\tPriorState cty.Value\n}\n\ntype ReadResourceResponse struct {\n\t// NewState contains the current state of the resource.\n\tNewState cty.Value\n\n\t// Diagnostics contains any warnings or errors from the method call.\n\tDiagnostics tfdiags.Diagnostics\n}\n\ntype PlanResourceChangeRequest struct {\n\t// TypeName is the name of the resource type to plan.\n\tTypeName string\n\n\t// PriorState is the previously saved state value for this resource.\n\tPriorState cty.Value\n\n\t// ProposedNewState is the expected state after the new configuration is\n\t// applied. This is created by directly applying the configuration to the\n\t// PriorState. The provider is then responsible for applying any further\n\t// changes required to create the proposed final state.\n\tProposedNewState cty.Value\n\n\t// Config is the resource configuration, before being merged with the\n\t// PriorState. Any value not explicitly set in the configuration will be\n\t// null. Config is supplied for reference, but Provider implementations\n\t// should prefer the ProposedNewState in most circumstances.\n\tConfig cty.Value\n\n\t// PriorPrivate is the previously saved private data returned from the\n\t// provider during the last apply.\n\tPriorPrivate []byte\n}\n\ntype PlanResourceChangeResponse struct {\n\t// PlannedState is the expected state of the resource once the current\n\t// configuration is applied.\n\tPlannedState cty.Value\n\n\t// RequiresReplace is the list of thee attributes that are requiring\n\t// resource replacement.\n\tRequiresReplace []cty.Path\n\n\t// PlannedPrivate is an opaque blob that is not interpreted by terraform\n\t// core. This will be saved and relayed back to the provider during\n\t// ApplyResourceChange.\n\tPlannedPrivate []byte\n\n\t// Diagnostics contains any warnings or errors from the method call.\n\tDiagnostics tfdiags.Diagnostics\n\n\t// LegacyTypeSystem is set only if the provider is using the legacy SDK\n\t// whose type system cannot be precisely mapped into the Terraform type\n\t// system. We use this to bypass certain consistency checks that would\n\t// otherwise fail due to this imprecise mapping. No other provider or SDK\n\t// implementation is permitted to set this.\n\tLegacyTypeSystem bool\n}\n\ntype ApplyResourceChangeRequest struct {\n\t// TypeName is the name of the resource type being applied.\n\tTypeName string\n\n\t// PriorState is the current state of resource.\n\tPriorState cty.Value\n\n\t// Planned state is the state returned from PlanResourceChange, and should\n\t// represent the new state, minus any remaining computed attributes.\n\tPlannedState cty.Value\n\n\t// Config is the resource configuration, before being merged with the\n\t// PriorState. Any value not explicitly set in the configuration will be\n\t// null. Config is supplied for reference, but Provider implementations\n\t// should prefer the PlannedState in most circumstances.\n\tConfig cty.Value\n\n\t// PlannedPrivate is the same value as returned by PlanResourceChange.\n\tPlannedPrivate []byte\n}\n\ntype ApplyResourceChangeResponse struct {\n\t// NewState is the new complete state after applying the planned change.\n\t// In the event of an error, NewState should represent the most recent\n\t// known state of the resource, if it exists.\n\tNewState cty.Value\n\n\t// Private is an opaque blob that will be stored in state along with the\n\t// resource. It is intended only for interpretation by the provider itself.\n\tPrivate []byte\n\n\t// Diagnostics contains any warnings or errors from the method call.\n\tDiagnostics tfdiags.Diagnostics\n\n\t// LegacyTypeSystem is set only if the provider is using the legacy SDK\n\t// whose type system cannot be precisely mapped into the Terraform type\n\t// system. We use this to bypass certain consistency checks that would\n\t// otherwise fail due to this imprecise mapping. No other provider or SDK\n\t// implementation is permitted to set this.\n\tLegacyTypeSystem bool\n}\n\ntype ImportResourceStateRequest struct {\n\t// TypeName is the name of the resource type to be imported.\n\tTypeName string\n\n\t// ID is a string with which the provider can identify the resource to be\n\t// imported.\n\tID string\n}\n\ntype ImportResourceStateResponse struct {\n\t// ImportedResources contains one or more state values related to the\n\t// imported resource. It is not required that these be complete, only that\n\t// there is enough identifying information for the provider to successfully\n\t// update the states in ReadResource.\n\tImportedResources []ImportedResource\n\n\t// Diagnostics contains any warnings or errors from the method call.\n\tDiagnostics tfdiags.Diagnostics\n}\n\n// ImportedResource represents an object being imported into Terraform with the\n// help of a provider. An ImportedObject is a RemoteObject that has been read\n// by the provider's import handler but hasn't yet been committed to state.\ntype ImportedResource struct {\n\t// TypeName is the name of the resource type associated with the\n\t// returned state. It's possible for providers to import multiple related\n\t// types with a single import request.\n\tTypeName string\n\n\t// State is the state of the remote object being imported. This may not be\n\t// complete, but must contain enough information to uniquely identify the\n\t// resource.\n\tState cty.Value\n\n\t// Private is an opaque blob that will be stored in state along with the\n\t// resource. It is intended only for interpretation by the provider itself.\n\tPrivate []byte\n}\n\n// AsInstanceObject converts the receiving ImportedObject into a\n// ResourceInstanceObject that has status ObjectReady.\n//\n// The returned object does not know its own resource type, so the caller must\n// retain the ResourceType value from the source object if this information is\n// needed.\n//\n// The returned object also has no dependency addresses, but the caller may\n// freely modify the direct fields of the returned object without affecting\n// the receiver.\nfunc (ir ImportedResource) AsInstanceObject() *states.ResourceInstanceObject {\n\treturn &states.ResourceInstanceObject{\n\t\tStatus:  states.ObjectReady,\n\t\tValue:   ir.State,\n\t\tPrivate: ir.Private,\n\t}\n}\n\ntype ReadDataSourceRequest struct {\n\t// TypeName is the name of the data source type to Read.\n\tTypeName string\n\n\t// Config is the complete configuration for the requested data source.\n\tConfig cty.Value\n}\n\ntype ReadDataSourceResponse struct {\n\t// State is the current state of the requested data source.\n\tState cty.Value\n\n\t// Diagnostics contains any warnings or errors from the method call.\n\tDiagnostics tfdiags.Diagnostics\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/providers/resolver.go",
    "content": "package providers\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/hashicorp/terraform/plugin/discovery\"\n)\n\n// Resolver is an interface implemented by objects that are able to resolve\n// a given set of resource provider version constraints into Factory\n// callbacks.\ntype Resolver interface {\n\t// Given a constraint map, return a Factory for each requested provider.\n\t// If some or all of the constraints cannot be satisfied, return a non-nil\n\t// slice of errors describing the problems.\n\tResolveProviders(reqd discovery.PluginRequirements) (map[string]Factory, []error)\n}\n\n// ResolverFunc wraps a callback function and turns it into a Resolver\n// implementation, for convenience in situations where a function and its\n// associated closure are sufficient as a resolver implementation.\ntype ResolverFunc func(reqd discovery.PluginRequirements) (map[string]Factory, []error)\n\n// ResolveProviders implements Resolver by calling the\n// wrapped function.\nfunc (f ResolverFunc) ResolveProviders(reqd discovery.PluginRequirements) (map[string]Factory, []error) {\n\treturn f(reqd)\n}\n\n// ResolverFixed returns a Resolver that has a fixed set of provider factories\n// provided by the caller. The returned resolver ignores version constraints\n// entirely and just returns the given factory for each requested provider\n// name.\n//\n// This function is primarily used in tests, to provide mock providers or\n// in-process providers under test.\nfunc ResolverFixed(factories map[string]Factory) Resolver {\n\treturn ResolverFunc(func(reqd discovery.PluginRequirements) (map[string]Factory, []error) {\n\t\tret := make(map[string]Factory, len(reqd))\n\t\tvar errs []error\n\t\tfor name := range reqd {\n\t\t\tif factory, exists := factories[name]; exists {\n\t\t\t\tret[name] = factory\n\t\t\t} else {\n\t\t\t\terrs = append(errs, fmt.Errorf(\"provider %q is not available\", name))\n\t\t\t}\n\t\t}\n\t\treturn ret, errs\n\t})\n}\n\n// Factory is a function type that creates a new instance of a resource\n// provider, or returns an error if that is impossible.\ntype Factory func() (Interface, error)\n\n// FactoryFixed is a helper that creates a Factory that just returns some given\n// single provider.\n//\n// Unlike usual factories, the exact same instance is returned for each call\n// to the factory and so this must be used in only specialized situations where\n// the caller can take care to either not mutate the given provider at all\n// or to mutate it in ways that will not cause unexpected behavior for others\n// holding the same reference.\nfunc FactoryFixed(p Interface) Factory {\n\treturn func() (Interface, error) {\n\t\treturn p, nil\n\t}\n}\n\n// ProviderHasResource is a helper that requests schema from the given provider\n// and checks if it has a resource type of the given name.\n//\n// This function is more expensive than it may first appear since it must\n// retrieve the entire schema from the underlying provider, and so it should\n// be used sparingly and especially not in tight loops.\n//\n// Since retrieving the provider may fail (e.g. if the provider is accessed\n// over an RPC channel that has operational problems), this function will\n// return false if the schema cannot be retrieved, under the assumption that\n// a subsequent call to do anything with the resource type would fail\n// anyway.\nfunc ProviderHasResource(provider Interface, typeName string) bool {\n\tresp := provider.GetSchema()\n\tif resp.Diagnostics.HasErrors() {\n\t\treturn false\n\t}\n\n\t_, exists := resp.ResourceTypes[typeName]\n\treturn exists\n}\n\n// ProviderHasDataSource is a helper that requests schema from the given\n// provider and checks if it has a data source of the given name.\n//\n// This function is more expensive than it may first appear since it must\n// retrieve the entire schema from the underlying provider, and so it should\n// be used sparingly and especially not in tight loops.\n//\n// Since retrieving the provider may fail (e.g. if the provider is accessed\n// over an RPC channel that has operational problems), this function will\n// return false if the schema cannot be retrieved, under the assumption that\n// a subsequent call to do anything with the data source would fail\n// anyway.\nfunc ProviderHasDataSource(provider Interface, dataSourceName string) bool {\n\tresp := provider.GetSchema()\n\tif resp.Diagnostics.HasErrors() {\n\t\treturn false\n\t}\n\n\t_, exists := resp.DataSources[dataSourceName]\n\treturn exists\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/provisioners/doc.go",
    "content": "// Package provisioners contains the interface and primary types to implement a\n// Terraform resource provisioner.\npackage provisioners\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/provisioners/factory.go",
    "content": "package provisioners\n\n// Factory is a function type that creates a new instance of a resource\n// provisioner, or returns an error if that is impossible.\ntype Factory func() (Interface, error)\n\n// FactoryFixed is a helper that creates a Factory that just returns some given\n// single provisioner.\n//\n// Unlike usual factories, the exact same instance is returned for each call\n// to the factory and so this must be used in only specialized situations where\n// the caller can take care to either not mutate the given provider at all\n// or to mutate it in ways that will not cause unexpected behavior for others\n// holding the same reference.\nfunc FactoryFixed(p Interface) Factory {\n\treturn func() (Interface, error) {\n\t\treturn p, nil\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/provisioners/provisioner.go",
    "content": "package provisioners\n\nimport (\n\t\"github.com/hashicorp/terraform/configs/configschema\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// Interface is the set of methods required for a resource provisioner plugin.\ntype Interface interface {\n\t// GetSchema returns the schema for the provisioner configuration.\n\tGetSchema() GetSchemaResponse\n\n\t// ValidateProvisionerConfig allows the provisioner to validate the\n\t// configuration values.\n\tValidateProvisionerConfig(ValidateProvisionerConfigRequest) ValidateProvisionerConfigResponse\n\n\t// ProvisionResource runs the provisioner with provided configuration.\n\t// ProvisionResource blocks until the execution is complete.\n\t// If the returned diagnostics contain any errors, the resource will be\n\t// left in a tainted state.\n\tProvisionResource(ProvisionResourceRequest) ProvisionResourceResponse\n\n\t// Stop is called to interrupt the provisioner.\n\t//\n\t// Stop should not block waiting for in-flight actions to complete. It\n\t// should take any action it wants and return immediately acknowledging it\n\t// has received the stop request. Terraform will not make any further API\n\t// calls to the provisioner after Stop is called.\n\t//\n\t// The error returned, if non-nil, is assumed to mean that signaling the\n\t// stop somehow failed and that the user should expect potentially waiting\n\t// a longer period of time.\n\tStop() error\n\n\t// Close shuts down the plugin process if applicable.\n\tClose() error\n}\n\ntype GetSchemaResponse struct {\n\t// Provisioner contains the schema for this provisioner.\n\tProvisioner *configschema.Block\n\n\t// Diagnostics contains any warnings or errors from the method call.\n\tDiagnostics tfdiags.Diagnostics\n}\n\n// UIOutput provides the Output method for resource provisioner\n// plugins to write any output to the UI.\n//\n// Provisioners may call the Output method multiple times while Apply is in\n// progress. It is invalid to call Output after Apply returns.\ntype UIOutput interface {\n\tOutput(string)\n}\n\ntype ValidateProvisionerConfigRequest struct {\n\t// Config is the complete configuration to be used for the provisioner.\n\tConfig cty.Value\n}\n\ntype ValidateProvisionerConfigResponse struct {\n\t// Diagnostics contains any warnings or errors from the method call.\n\tDiagnostics tfdiags.Diagnostics\n}\n\ntype ProvisionResourceRequest struct {\n\t// Config is the complete provisioner configuration.\n\tConfig cty.Value\n\n\t// Connection contains any information required to access the resource\n\t// instance.\n\tConnection cty.Value\n\n\t// UIOutput is used to return output during the Apply operation.\n\tUIOutput UIOutput\n}\n\ntype ProvisionResourceResponse struct {\n\t// Diagnostics contains any warnings or errors from the method call.\n\tDiagnostics tfdiags.Diagnostics\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/registry/client.go",
    "content": "package registry\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"log\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"path\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/hashicorp/terraform/httpclient\"\n\t\"github.com/hashicorp/terraform/registry/regsrc\"\n\t\"github.com/hashicorp/terraform/registry/response\"\n\t\"github.com/hashicorp/terraform/svchost\"\n\t\"github.com/hashicorp/terraform/svchost/disco\"\n\t\"github.com/hashicorp/terraform/version\"\n)\n\nconst (\n\txTerraformGet      = \"X-Terraform-Get\"\n\txTerraformVersion  = \"X-Terraform-Version\"\n\trequestTimeout     = 10 * time.Second\n\tmodulesServiceID   = \"modules.v1\"\n\tprovidersServiceID = \"providers.v1\"\n)\n\nvar tfVersion = version.String()\n\n// Client provides methods to query Terraform Registries.\ntype Client struct {\n\t// this is the client to be used for all requests.\n\tclient *http.Client\n\n\t// services is a required *disco.Disco, which may have services and\n\t// credentials pre-loaded.\n\tservices *disco.Disco\n}\n\n// NewClient returns a new initialized registry client.\nfunc NewClient(services *disco.Disco, client *http.Client) *Client {\n\tif services == nil {\n\t\tservices = disco.New()\n\t}\n\n\tif client == nil {\n\t\tclient = httpclient.New()\n\t\tclient.Timeout = requestTimeout\n\t}\n\n\tservices.Transport = client.Transport\n\n\treturn &Client{\n\t\tclient:   client,\n\t\tservices: services,\n\t}\n}\n\n// Discover queries the host, and returns the url for the registry.\nfunc (c *Client) Discover(host svchost.Hostname, serviceID string) (*url.URL, error) {\n\tservice, err := c.services.DiscoverServiceURL(host, serviceID)\n\tif err != nil {\n\t\treturn nil, &ServiceUnreachableError{err}\n\t}\n\tif !strings.HasSuffix(service.Path, \"/\") {\n\t\tservice.Path += \"/\"\n\t}\n\treturn service, nil\n}\n\n// ModuleVersions queries the registry for a module, and returns the available versions.\nfunc (c *Client) ModuleVersions(module *regsrc.Module) (*response.ModuleVersions, error) {\n\thost, err := module.SvcHost()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tservice, err := c.Discover(host, modulesServiceID)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tp, err := url.Parse(path.Join(module.Module(), \"versions\"))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tservice = service.ResolveReference(p)\n\n\tlog.Printf(\"[DEBUG] fetching module versions from %q\", service)\n\n\treq, err := http.NewRequest(\"GET\", service.String(), nil)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tc.addRequestCreds(host, req)\n\treq.Header.Set(xTerraformVersion, tfVersion)\n\n\tresp, err := c.client.Do(req)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer resp.Body.Close()\n\n\tswitch resp.StatusCode {\n\tcase http.StatusOK:\n\t\t// OK\n\tcase http.StatusNotFound:\n\t\treturn nil, &errModuleNotFound{addr: module}\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"error looking up module versions: %s\", resp.Status)\n\t}\n\n\tvar versions response.ModuleVersions\n\n\tdec := json.NewDecoder(resp.Body)\n\tif err := dec.Decode(&versions); err != nil {\n\t\treturn nil, err\n\t}\n\n\tfor _, mod := range versions.Modules {\n\t\tfor _, v := range mod.Versions {\n\t\t\tlog.Printf(\"[DEBUG] found available version %q for %s\", v.Version, mod.Source)\n\t\t}\n\t}\n\n\treturn &versions, nil\n}\n\nfunc (c *Client) addRequestCreds(host svchost.Hostname, req *http.Request) {\n\tcreds, err := c.services.CredentialsForHost(host)\n\tif err != nil {\n\t\tlog.Printf(\"[WARN] Failed to get credentials for %s: %s (ignoring)\", host, err)\n\t\treturn\n\t}\n\n\tif creds != nil {\n\t\tcreds.PrepareRequest(req)\n\t}\n}\n\n// ModuleLocation find the download location for a specific version module.\n// This returns a string, because the final location may contain special go-getter syntax.\nfunc (c *Client) ModuleLocation(module *regsrc.Module, version string) (string, error) {\n\thost, err := module.SvcHost()\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\tservice, err := c.Discover(host, modulesServiceID)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\tvar p *url.URL\n\tif version == \"\" {\n\t\tp, err = url.Parse(path.Join(module.Module(), \"download\"))\n\t} else {\n\t\tp, err = url.Parse(path.Join(module.Module(), version, \"download\"))\n\t}\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tdownload := service.ResolveReference(p)\n\n\tlog.Printf(\"[DEBUG] looking up module location from %q\", download)\n\n\treq, err := http.NewRequest(\"GET\", download.String(), nil)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\tc.addRequestCreds(host, req)\n\treq.Header.Set(xTerraformVersion, tfVersion)\n\n\tresp, err := c.client.Do(req)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tdefer resp.Body.Close()\n\n\t// there should be no body, but save it for logging\n\tbody, err := ioutil.ReadAll(resp.Body)\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"error reading response body from registry: %s\", err)\n\t}\n\n\tswitch resp.StatusCode {\n\tcase http.StatusOK, http.StatusNoContent:\n\t\t// OK\n\tcase http.StatusNotFound:\n\t\treturn \"\", fmt.Errorf(\"module %q version %q not found\", module, version)\n\tdefault:\n\t\t// anything else is an error:\n\t\treturn \"\", fmt.Errorf(\"error getting download location for %q: %s resp:%s\", module, resp.Status, body)\n\t}\n\n\t// the download location is in the X-Terraform-Get header\n\tlocation := resp.Header.Get(xTerraformGet)\n\tif location == \"\" {\n\t\treturn \"\", fmt.Errorf(\"failed to get download URL for %q: %s resp:%s\", module, resp.Status, body)\n\t}\n\n\t// If location looks like it's trying to be a relative URL, treat it as\n\t// one.\n\t//\n\t// We don't do this for just _any_ location, since the X-Terraform-Get\n\t// header is a go-getter location rather than a URL, and so not all\n\t// possible values will parse reasonably as URLs.)\n\t//\n\t// When used in conjunction with go-getter we normally require this header\n\t// to be an absolute URL, but we are more liberal here because third-party\n\t// registry implementations may not \"know\" their own absolute URLs if\n\t// e.g. they are running behind a reverse proxy frontend, or such.\n\tif strings.HasPrefix(location, \"/\") || strings.HasPrefix(location, \"./\") || strings.HasPrefix(location, \"../\") {\n\t\tlocationURL, err := url.Parse(location)\n\t\tif err != nil {\n\t\t\treturn \"\", fmt.Errorf(\"invalid relative URL for %q: %s\", module, err)\n\t\t}\n\t\tlocationURL = download.ResolveReference(locationURL)\n\t\tlocation = locationURL.String()\n\t}\n\n\treturn location, nil\n}\n\n// TerraformProviderVersions queries the registry for a provider, and returns the available versions.\nfunc (c *Client) TerraformProviderVersions(provider *regsrc.TerraformProvider) (*response.TerraformProviderVersions, error) {\n\thost, err := provider.SvcHost()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tservice, err := c.Discover(host, providersServiceID)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tp, err := url.Parse(path.Join(provider.TerraformProvider(), \"versions\"))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tservice = service.ResolveReference(p)\n\n\tlog.Printf(\"[DEBUG] fetching provider versions from %q\", service)\n\n\treq, err := http.NewRequest(\"GET\", service.String(), nil)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tc.addRequestCreds(host, req)\n\treq.Header.Set(xTerraformVersion, tfVersion)\n\n\tresp, err := c.client.Do(req)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer resp.Body.Close()\n\n\tswitch resp.StatusCode {\n\tcase http.StatusOK:\n\t\t// OK\n\tcase http.StatusNotFound:\n\t\treturn nil, &errProviderNotFound{addr: provider}\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"error looking up provider versions: %s\", resp.Status)\n\t}\n\n\tvar versions response.TerraformProviderVersions\n\n\tdec := json.NewDecoder(resp.Body)\n\tif err := dec.Decode(&versions); err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &versions, nil\n}\n\n// TerraformProviderLocation queries the registry for a provider download metadata\nfunc (c *Client) TerraformProviderLocation(provider *regsrc.TerraformProvider, version string) (*response.TerraformProviderPlatformLocation, error) {\n\thost, err := provider.SvcHost()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tservice, err := c.Discover(host, providersServiceID)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tp, err := url.Parse(path.Join(\n\t\tprovider.TerraformProvider(),\n\t\tversion,\n\t\t\"download\",\n\t\tprovider.OS,\n\t\tprovider.Arch,\n\t))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tservice = service.ResolveReference(p)\n\n\tlog.Printf(\"[DEBUG] fetching provider location from %q\", service)\n\n\treq, err := http.NewRequest(\"GET\", service.String(), nil)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tc.addRequestCreds(host, req)\n\treq.Header.Set(xTerraformVersion, tfVersion)\n\n\tresp, err := c.client.Do(req)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer resp.Body.Close()\n\n\tvar loc response.TerraformProviderPlatformLocation\n\n\tdec := json.NewDecoder(resp.Body)\n\tif err := dec.Decode(&loc); err != nil {\n\t\treturn nil, err\n\t}\n\n\tswitch resp.StatusCode {\n\tcase http.StatusOK, http.StatusNoContent:\n\t\t// OK\n\tcase http.StatusNotFound:\n\t\treturn nil, fmt.Errorf(\"provider %q version %q not found\", provider.TerraformProvider(), version)\n\tdefault:\n\t\t// anything else is an error:\n\t\treturn nil, fmt.Errorf(\"error getting download location for %q: %s\", provider.TerraformProvider(), resp.Status)\n\t}\n\n\treturn &loc, nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/registry/errors.go",
    "content": "package registry\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/hashicorp/terraform/registry/regsrc\"\n\t\"github.com/hashicorp/terraform/svchost/disco\"\n)\n\ntype errModuleNotFound struct {\n\taddr *regsrc.Module\n}\n\nfunc (e *errModuleNotFound) Error() string {\n\treturn fmt.Sprintf(\"module %s not found\", e.addr)\n}\n\n// IsModuleNotFound returns true only if the given error is a \"module not found\"\n// error. This allows callers to recognize this particular error condition\n// as distinct from operational errors such as poor network connectivity.\nfunc IsModuleNotFound(err error) bool {\n\t_, ok := err.(*errModuleNotFound)\n\treturn ok\n}\n\ntype errProviderNotFound struct {\n\taddr *regsrc.TerraformProvider\n}\n\nfunc (e *errProviderNotFound) Error() string {\n\treturn fmt.Sprintf(\"provider %s not found\", e.addr)\n}\n\n// IsProviderNotFound returns true only if the given error is a \"provider not found\"\n// error. This allows callers to recognize this particular error condition\n// as distinct from operational errors such as poor network connectivity.\nfunc IsProviderNotFound(err error) bool {\n\t_, ok := err.(*errProviderNotFound)\n\treturn ok\n}\n\n// IsServiceNotProvided returns true only if the given error is a \"service not provided\"\n// error. This allows callers to recognize this particular error condition\n// as distinct from operational errors such as poor network connectivity.\nfunc IsServiceNotProvided(err error) bool {\n\t_, ok := err.(*disco.ErrServiceNotProvided)\n\treturn ok\n}\n\n// ServiceUnreachableError Registry service is unreachable\ntype ServiceUnreachableError struct {\n\terr error\n}\n\nfunc (e *ServiceUnreachableError) Error() string {\n\treturn e.err.Error()\n}\n\n// IsServiceUnreachable returns true if the registry/discovery service was unreachable\nfunc IsServiceUnreachable(err error) bool {\n\t_, ok := err.(*ServiceUnreachableError)\n\treturn ok\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/registry/regsrc/friendly_host.go",
    "content": "package regsrc\n\nimport (\n\t\"regexp\"\n\t\"strings\"\n\n\t\"github.com/hashicorp/terraform/svchost\"\n)\n\nvar (\n\t// InvalidHostString is a placeholder returned when a raw host can't be\n\t// converted by IDNA spec. It will never be returned for any host for which\n\t// Valid() is true.\n\tInvalidHostString = \"<invalid host>\"\n\n\t// urlLabelEndSubRe is a sub-expression that matches any character that's\n\t// allowed at the start or end of a URL label according to RFC1123.\n\turlLabelEndSubRe = \"[0-9A-Za-z]\"\n\n\t// urlLabelEndSubRe is a sub-expression that matches any character that's\n\t// allowed at in a non-start or end of a URL label according to RFC1123.\n\turlLabelMidSubRe = \"[0-9A-Za-z-]\"\n\n\t// urlLabelUnicodeSubRe is a sub-expression that matches any non-ascii char\n\t// in an IDN (Unicode) display URL. It's not strict - there are only ~15k\n\t// valid Unicode points in IDN RFC (some with conditions). We are just going\n\t// with being liberal with matching and then erroring if we fail to convert\n\t// to punycode later (which validates chars fully). This at least ensures\n\t// ascii chars dissalowed by the RC1123 parts above don't become legal\n\t// again.\n\turlLabelUnicodeSubRe = \"[^[:ascii:]]\"\n\n\t// hostLabelSubRe is the sub-expression that matches a valid hostname label.\n\t// It does not anchor the start or end so it can be composed into more\n\t// complex RegExps below. Note that for sanity we don't handle disallowing\n\t// raw punycode in this regexp (esp. since re2 doesn't support negative\n\t// lookbehind, but we can capture it's presence here to check later).\n\thostLabelSubRe = \"\" +\n\t\t// Match valid initial char, or unicode char\n\t\t\"(?:\" + urlLabelEndSubRe + \"|\" + urlLabelUnicodeSubRe + \")\" +\n\t\t// Optionally, match 0 to 61 valid URL or Unicode chars,\n\t\t// followed by one valid end char or unicode char\n\t\t\"(?:\" +\n\t\t\"(?:\" + urlLabelMidSubRe + \"|\" + urlLabelUnicodeSubRe + \"){0,61}\" +\n\t\t\"(?:\" + urlLabelEndSubRe + \"|\" + urlLabelUnicodeSubRe + \")\" +\n\t\t\")?\"\n\n\t// hostSubRe is the sub-expression that matches a valid host prefix.\n\t// Allows custom port.\n\thostSubRe = hostLabelSubRe + \"(?:\\\\.\" + hostLabelSubRe + \")+(?::\\\\d+)?\"\n\n\t// hostRe is a regexp that matches a valid host prefix. Additional\n\t// validation of unicode strings is needed for matches.\n\thostRe = regexp.MustCompile(\"^\" + hostSubRe + \"$\")\n)\n\n// FriendlyHost describes a registry instance identified in source strings by a\n// simple bare hostname like registry.terraform.io.\ntype FriendlyHost struct {\n\tRaw string\n}\n\nfunc NewFriendlyHost(host string) *FriendlyHost {\n\treturn &FriendlyHost{Raw: host}\n}\n\n// ParseFriendlyHost attempts to parse a valid \"friendly host\" prefix from the\n// given string. If no valid prefix is found, host will be nil and rest will\n// contain the full source string. The host prefix must terminate at the end of\n// the input or at the first / character. If one or more characters exist after\n// the first /, they will be returned as rest (without the / delimiter).\n// Hostnames containing punycode WILL be parsed successfully since they may have\n// come from an internal normalized source string, however should be considered\n// invalid if the string came from a user directly. This must be checked\n// explicitly for user-input strings by calling Valid() on the\n// returned host.\nfunc ParseFriendlyHost(source string) (host *FriendlyHost, rest string) {\n\tparts := strings.SplitN(source, \"/\", 2)\n\n\tif hostRe.MatchString(parts[0]) {\n\t\thost = &FriendlyHost{Raw: parts[0]}\n\t\tif len(parts) == 2 {\n\t\t\trest = parts[1]\n\t\t}\n\t\treturn\n\t}\n\n\t// No match, return whole string as rest along with nil host\n\trest = source\n\treturn\n}\n\n// Valid returns whether the host prefix is considered valid in any case.\n// Example of invalid prefixes might include ones that don't conform to the host\n// name specifications. Not that IDN prefixes containing punycode are not valid\n// input which we expect to always be in user-input or normalised display form.\nfunc (h *FriendlyHost) Valid() bool {\n\treturn svchost.IsValid(h.Raw)\n}\n\n// Display returns the host formatted for display to the user in CLI or web\n// output.\nfunc (h *FriendlyHost) Display() string {\n\treturn svchost.ForDisplay(h.Raw)\n}\n\n// Normalized returns the host formatted for internal reference or comparison.\nfunc (h *FriendlyHost) Normalized() string {\n\thost, err := svchost.ForComparison(h.Raw)\n\tif err != nil {\n\t\treturn InvalidHostString\n\t}\n\treturn string(host)\n}\n\n// String returns the host formatted as the user originally typed it assuming it\n// was parsed from user input.\nfunc (h *FriendlyHost) String() string {\n\treturn h.Raw\n}\n\n// Equal compares the FriendlyHost against another instance taking normalization\n// into account. Invalid hosts cannot be compared and will always return false.\nfunc (h *FriendlyHost) Equal(other *FriendlyHost) bool {\n\tif other == nil {\n\t\treturn false\n\t}\n\n\totherHost, err := svchost.ForComparison(other.Raw)\n\tif err != nil {\n\t\treturn false\n\t}\n\n\thost, err := svchost.ForComparison(h.Raw)\n\tif err != nil {\n\t\treturn false\n\t}\n\n\treturn otherHost == host\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/registry/regsrc/module.go",
    "content": "package regsrc\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"regexp\"\n\t\"strings\"\n\n\t\"github.com/hashicorp/terraform/svchost\"\n)\n\nvar (\n\tErrInvalidModuleSource = errors.New(\"not a valid registry module source\")\n\n\t// nameSubRe is the sub-expression that matches a valid module namespace or\n\t// name. It's strictly a super-set of what GitHub allows for user/org and\n\t// repo names respectively, but more restrictive than our original repo-name\n\t// regex which allowed periods but could cause ambiguity with hostname\n\t// prefixes. It does not anchor the start or end so it can be composed into\n\t// more complex RegExps below. Alphanumeric with - and _ allowed in non\n\t// leading or trailing positions. Max length 64 chars. (GitHub username is\n\t// 38 max.)\n\tnameSubRe = \"[0-9A-Za-z](?:[0-9A-Za-z-_]{0,62}[0-9A-Za-z])?\"\n\n\t// providerSubRe is the sub-expression that matches a valid provider. It\n\t// does not anchor the start or end so it can be composed into more complex\n\t// RegExps below. Only lowercase chars and digits are supported in practice.\n\t// Max length 64 chars.\n\tproviderSubRe = \"[0-9a-z]{1,64}\"\n\n\t// moduleSourceRe is a regular expression that matches the basic\n\t// namespace/name/provider[//...] format for registry sources. It assumes\n\t// any FriendlyHost prefix has already been removed if present.\n\tmoduleSourceRe = regexp.MustCompile(\n\t\tfmt.Sprintf(\"^(%s)\\\\/(%s)\\\\/(%s)(?:\\\\/\\\\/(.*))?$\",\n\t\t\tnameSubRe, nameSubRe, providerSubRe))\n\n\t// NameRe is a regular expression defining the format allowed for namespace\n\t// or name fields in module registry implementations.\n\tNameRe = regexp.MustCompile(\"^\" + nameSubRe + \"$\")\n\n\t// ProviderRe is a regular expression defining the format allowed for\n\t// provider fields in module registry implementations.\n\tProviderRe = regexp.MustCompile(\"^\" + providerSubRe + \"$\")\n\n\t// these hostnames are not allowed as registry sources, because they are\n\t// already special case module sources in terraform.\n\tdisallowed = map[string]bool{\n\t\t\"github.com\":    true,\n\t\t\"bitbucket.org\": true,\n\t}\n)\n\n// Module describes a Terraform Registry Module source.\ntype Module struct {\n\t// RawHost is the friendly host prefix if one was present. It might be nil\n\t// if the original source had no host prefix which implies\n\t// PublicRegistryHost but is distinct from having an actual pointer to\n\t// PublicRegistryHost since it encodes the fact the original string didn't\n\t// include a host prefix at all which is significant for recovering actual\n\t// input not just normalized form. Most callers should access it with Host()\n\t// which will return public registry host instance if it's nil.\n\tRawHost      *FriendlyHost\n\tRawNamespace string\n\tRawName      string\n\tRawProvider  string\n\tRawSubmodule string\n}\n\n// NewModule construct a new module source from separate parts. Pass empty\n// string if host or submodule are not needed.\nfunc NewModule(host, namespace, name, provider, submodule string) (*Module, error) {\n\tm := &Module{\n\t\tRawNamespace: namespace,\n\t\tRawName:      name,\n\t\tRawProvider:  provider,\n\t\tRawSubmodule: submodule,\n\t}\n\tif host != \"\" {\n\t\th := NewFriendlyHost(host)\n\t\tif h != nil {\n\t\t\tfmt.Println(\"HOST:\", h)\n\t\t\tif !h.Valid() || disallowed[h.Display()] {\n\t\t\t\treturn nil, ErrInvalidModuleSource\n\t\t\t}\n\t\t}\n\t\tm.RawHost = h\n\t}\n\treturn m, nil\n}\n\n// ParseModuleSource attempts to parse source as a Terraform registry module\n// source. If the string is not found to be in a valid format,\n// ErrInvalidModuleSource is returned. Note that this can only be used on\n// \"input\" strings, e.g. either ones supplied by the user or potentially\n// normalised but in Display form (unicode). It will fail to parse a source with\n// a punycoded domain since this is not permitted input from a user. If you have\n// an already normalized string internally, you can compare it without parsing\n// by comparing with the normalized version of the subject with the normal\n// string equality operator.\nfunc ParseModuleSource(source string) (*Module, error) {\n\t// See if there is a friendly host prefix.\n\thost, rest := ParseFriendlyHost(source)\n\tif host != nil {\n\t\tif !host.Valid() || disallowed[host.Display()] {\n\t\t\treturn nil, ErrInvalidModuleSource\n\t\t}\n\t}\n\n\tmatches := moduleSourceRe.FindStringSubmatch(rest)\n\tif len(matches) < 4 {\n\t\treturn nil, ErrInvalidModuleSource\n\t}\n\n\tm := &Module{\n\t\tRawHost:      host,\n\t\tRawNamespace: matches[1],\n\t\tRawName:      matches[2],\n\t\tRawProvider:  matches[3],\n\t}\n\n\tif len(matches) == 5 {\n\t\tm.RawSubmodule = matches[4]\n\t}\n\n\treturn m, nil\n}\n\n// Display returns the source formatted for display to the user in CLI or web\n// output.\nfunc (m *Module) Display() string {\n\treturn m.formatWithPrefix(m.normalizedHostPrefix(m.Host().Display()), false)\n}\n\n// Normalized returns the source formatted for internal reference or comparison.\nfunc (m *Module) Normalized() string {\n\treturn m.formatWithPrefix(m.normalizedHostPrefix(m.Host().Normalized()), false)\n}\n\n// String returns the source formatted as the user originally typed it assuming\n// it was parsed from user input.\nfunc (m *Module) String() string {\n\t// Don't normalize public registry hostname - leave it exactly like the user\n\t// input it.\n\thostPrefix := \"\"\n\tif m.RawHost != nil {\n\t\thostPrefix = m.RawHost.String() + \"/\"\n\t}\n\treturn m.formatWithPrefix(hostPrefix, true)\n}\n\n// Equal compares the module source against another instance taking\n// normalization into account.\nfunc (m *Module) Equal(other *Module) bool {\n\treturn m.Normalized() == other.Normalized()\n}\n\n// Host returns the FriendlyHost object describing which registry this module is\n// in. If the original source string had not host component this will return the\n// PublicRegistryHost.\nfunc (m *Module) Host() *FriendlyHost {\n\tif m.RawHost == nil {\n\t\treturn PublicRegistryHost\n\t}\n\treturn m.RawHost\n}\n\nfunc (m *Module) normalizedHostPrefix(host string) string {\n\tif m.Host().Equal(PublicRegistryHost) {\n\t\treturn \"\"\n\t}\n\treturn host + \"/\"\n}\n\nfunc (m *Module) formatWithPrefix(hostPrefix string, preserveCase bool) string {\n\tsuffix := \"\"\n\tif m.RawSubmodule != \"\" {\n\t\tsuffix = \"//\" + m.RawSubmodule\n\t}\n\tstr := fmt.Sprintf(\"%s%s/%s/%s%s\", hostPrefix, m.RawNamespace, m.RawName,\n\t\tm.RawProvider, suffix)\n\n\t// lower case by default\n\tif !preserveCase {\n\t\treturn strings.ToLower(str)\n\t}\n\treturn str\n}\n\n// Module returns just the registry ID of the module, without a hostname or\n// suffix.\nfunc (m *Module) Module() string {\n\treturn fmt.Sprintf(\"%s/%s/%s\", m.RawNamespace, m.RawName, m.RawProvider)\n}\n\n// SvcHost returns the svchost.Hostname for this module. Since FriendlyHost may\n// contain an invalid hostname, this also returns an error indicating if it\n// could be converted to a svchost.Hostname. If no host is specified, the\n// default PublicRegistryHost is returned.\nfunc (m *Module) SvcHost() (svchost.Hostname, error) {\n\tif m.RawHost == nil {\n\t\treturn svchost.ForComparison(PublicRegistryHost.Raw)\n\t}\n\treturn svchost.ForComparison(m.RawHost.Raw)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/registry/regsrc/regsrc.go",
    "content": "// Package regsrc provides helpers for working with source strings that identify\n// resources within a Terraform registry.\npackage regsrc\n\nvar (\n\t// PublicRegistryHost is a FriendlyHost that represents the public registry.\n\tPublicRegistryHost = NewFriendlyHost(\"registry.terraform.io\")\n)\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/registry/regsrc/terraform_provider.go",
    "content": "package regsrc\n\nimport (\n\t\"fmt\"\n\t\"runtime\"\n\t\"strings\"\n\n\t\"github.com/hashicorp/terraform/svchost\"\n)\n\nvar (\n\t// DefaultProviderNamespace represents the namespace for canonical\n\t// HashiCorp-controlled providers.\n\tDefaultProviderNamespace = \"-\"\n)\n\n// TerraformProvider describes a Terraform Registry Provider source.\ntype TerraformProvider struct {\n\tRawHost      *FriendlyHost\n\tRawNamespace string\n\tRawName      string\n\tOS           string\n\tArch         string\n}\n\n// NewTerraformProvider constructs a new provider source.\nfunc NewTerraformProvider(name, os, arch string) *TerraformProvider {\n\tif os == \"\" {\n\t\tos = runtime.GOOS\n\t}\n\tif arch == \"\" {\n\t\tarch = runtime.GOARCH\n\t}\n\n\t// separate namespace if included\n\tnamespace := DefaultProviderNamespace\n\tif names := strings.SplitN(name, \"/\", 2); len(names) == 2 {\n\t\tnamespace, name = names[0], names[1]\n\t}\n\tp := &TerraformProvider{\n\t\tRawHost:      PublicRegistryHost,\n\t\tRawNamespace: namespace,\n\t\tRawName:      name,\n\t\tOS:           os,\n\t\tArch:         arch,\n\t}\n\n\treturn p\n}\n\n// Provider returns just the registry ID of the provider\nfunc (p *TerraformProvider) TerraformProvider() string {\n\treturn fmt.Sprintf(\"%s/%s\", p.RawNamespace, p.RawName)\n}\n\n// SvcHost returns the svchost.Hostname for this provider. The\n// default PublicRegistryHost is returned.\nfunc (p *TerraformProvider) SvcHost() (svchost.Hostname, error) {\n\treturn svchost.ForComparison(PublicRegistryHost.Raw)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/registry/response/module.go",
    "content": "package response\n\nimport (\n\t\"time\"\n)\n\n// Module is the response structure with the data for a single module version.\ntype Module struct {\n\tID string `json:\"id\"`\n\n\t//---------------------------------------------------------------\n\t// Metadata about the overall module.\n\n\tOwner       string    `json:\"owner\"`\n\tNamespace   string    `json:\"namespace\"`\n\tName        string    `json:\"name\"`\n\tVersion     string    `json:\"version\"`\n\tProvider    string    `json:\"provider\"`\n\tDescription string    `json:\"description\"`\n\tSource      string    `json:\"source\"`\n\tPublishedAt time.Time `json:\"published_at\"`\n\tDownloads   int       `json:\"downloads\"`\n\tVerified    bool      `json:\"verified\"`\n}\n\n// ModuleDetail represents a module in full detail.\ntype ModuleDetail struct {\n\tModule\n\n\t//---------------------------------------------------------------\n\t// Metadata about the overall module. This is only available when\n\t// requesting the specific module (not in list responses).\n\n\t// Root is the root module.\n\tRoot *ModuleSubmodule `json:\"root\"`\n\n\t// Submodules are the other submodules that are available within\n\t// this module.\n\tSubmodules []*ModuleSubmodule `json:\"submodules\"`\n\n\t//---------------------------------------------------------------\n\t// The fields below are only set when requesting this specific\n\t// module. They are available to easily know all available versions\n\t// and providers without multiple API calls.\n\n\tProviders []string `json:\"providers\"` // All available providers\n\tVersions  []string `json:\"versions\"`  // All versions\n}\n\n// ModuleSubmodule is the metadata about a specific submodule within\n// a module. This includes the root module as a special case.\ntype ModuleSubmodule struct {\n\tPath   string `json:\"path\"`\n\tReadme string `json:\"readme\"`\n\tEmpty  bool   `json:\"empty\"`\n\n\tInputs       []*ModuleInput    `json:\"inputs\"`\n\tOutputs      []*ModuleOutput   `json:\"outputs\"`\n\tDependencies []*ModuleDep      `json:\"dependencies\"`\n\tResources    []*ModuleResource `json:\"resources\"`\n}\n\n// ModuleInput is an input for a module.\ntype ModuleInput struct {\n\tName        string `json:\"name\"`\n\tDescription string `json:\"description\"`\n\tDefault     string `json:\"default\"`\n}\n\n// ModuleOutput is an output for a module.\ntype ModuleOutput struct {\n\tName        string `json:\"name\"`\n\tDescription string `json:\"description\"`\n}\n\n// ModuleDep is an output for a module.\ntype ModuleDep struct {\n\tName    string `json:\"name\"`\n\tSource  string `json:\"source\"`\n\tVersion string `json:\"version\"`\n}\n\n// ModuleProviderDep is the output for a provider dependency\ntype ModuleProviderDep struct {\n\tName    string `json:\"name\"`\n\tVersion string `json:\"version\"`\n}\n\n// ModuleResource is an output for a module.\ntype ModuleResource struct {\n\tName string `json:\"name\"`\n\tType string `json:\"type\"`\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/registry/response/module_list.go",
    "content": "package response\n\n// ModuleList is the response structure for a pageable list of modules.\ntype ModuleList struct {\n\tMeta    PaginationMeta `json:\"meta\"`\n\tModules []*Module      `json:\"modules\"`\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/registry/response/module_provider.go",
    "content": "package response\n\n// ModuleProvider represents a single provider for modules.\ntype ModuleProvider struct {\n\tName        string `json:\"name\"`\n\tDownloads   int    `json:\"downloads\"`\n\tModuleCount int    `json:\"module_count\"`\n}\n\n// ModuleProviderList is the response structure for a pageable list of ModuleProviders.\ntype ModuleProviderList struct {\n\tMeta      PaginationMeta    `json:\"meta\"`\n\tProviders []*ModuleProvider `json:\"providers\"`\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/registry/response/module_versions.go",
    "content": "package response\n\n// ModuleVersions is the response format that contains all metadata about module\n// versions needed for terraform CLI to resolve version constraints. See RFC\n// TF-042 for details on this format.\ntype ModuleVersions struct {\n\tModules []*ModuleProviderVersions `json:\"modules\"`\n}\n\n// ModuleProviderVersions is the response format for a single module instance,\n// containing metadata about all versions and their dependencies.\ntype ModuleProviderVersions struct {\n\tSource   string           `json:\"source\"`\n\tVersions []*ModuleVersion `json:\"versions\"`\n}\n\n// ModuleVersion is the output metadata for a given version needed by CLI to\n// resolve candidate versions to satisfy requirements.\ntype ModuleVersion struct {\n\tVersion    string              `json:\"version\"`\n\tRoot       VersionSubmodule    `json:\"root\"`\n\tSubmodules []*VersionSubmodule `json:\"submodules\"`\n}\n\n// VersionSubmodule is the output metadata for a submodule within a given\n// version needed by CLI to resolve candidate versions to satisfy requirements.\n// When representing the Root in JSON the path is omitted.\ntype VersionSubmodule struct {\n\tPath         string               `json:\"path,omitempty\"`\n\tProviders    []*ModuleProviderDep `json:\"providers\"`\n\tDependencies []*ModuleDep         `json:\"dependencies\"`\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/registry/response/pagination.go",
    "content": "package response\n\nimport (\n\t\"net/url\"\n\t\"strconv\"\n)\n\n// PaginationMeta is a structure included in responses for pagination.\ntype PaginationMeta struct {\n\tLimit         int    `json:\"limit\"`\n\tCurrentOffset int    `json:\"current_offset\"`\n\tNextOffset    *int   `json:\"next_offset,omitempty\"`\n\tPrevOffset    *int   `json:\"prev_offset,omitempty\"`\n\tNextURL       string `json:\"next_url,omitempty\"`\n\tPrevURL       string `json:\"prev_url,omitempty\"`\n}\n\n// NewPaginationMeta populates pagination meta data from result parameters\nfunc NewPaginationMeta(offset, limit int, hasMore bool, currentURL string) PaginationMeta {\n\tpm := PaginationMeta{\n\t\tLimit:         limit,\n\t\tCurrentOffset: offset,\n\t}\n\n\t// Calculate next/prev offsets, leave nil if not valid pages\n\tnextOffset := offset + limit\n\tif hasMore {\n\t\tpm.NextOffset = &nextOffset\n\t}\n\n\tprevOffset := offset - limit\n\tif prevOffset < 0 {\n\t\tprevOffset = 0\n\t}\n\tif prevOffset < offset {\n\t\tpm.PrevOffset = &prevOffset\n\t}\n\n\t// If URL format provided, populate URLs. Intentionally swallow URL errors for now, API should\n\t// catch missing URLs if we call with bad URL arg (and we care about them being present).\n\tif currentURL != \"\" && pm.NextOffset != nil {\n\t\tpm.NextURL, _ = setQueryParam(currentURL, \"offset\", *pm.NextOffset, 0)\n\t}\n\tif currentURL != \"\" && pm.PrevOffset != nil {\n\t\tpm.PrevURL, _ = setQueryParam(currentURL, \"offset\", *pm.PrevOffset, 0)\n\t}\n\n\treturn pm\n}\n\nfunc setQueryParam(baseURL, key string, val, defaultVal int) (string, error) {\n\tu, err := url.Parse(baseURL)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tq := u.Query()\n\tif val == defaultVal {\n\t\t// elide param if it's the default value\n\t\tq.Del(key)\n\t} else {\n\t\tq.Set(key, strconv.Itoa(val))\n\t}\n\tu.RawQuery = q.Encode()\n\treturn u.String(), nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/registry/response/provider.go",
    "content": "package response\n\nimport (\n\t\"time\"\n)\n\n// Provider is the response structure with the data for a single provider\n// version. This is just the metadata. A full provider response will be\n// ProviderDetail.\ntype Provider struct {\n\tID string `json:\"id\"`\n\n\t//---------------------------------------------------------------\n\t// Metadata about the overall provider.\n\n\tOwner       string    `json:\"owner\"`\n\tNamespace   string    `json:\"namespace\"`\n\tName        string    `json:\"name\"`\n\tVersion     string    `json:\"version\"`\n\tDescription string    `json:\"description\"`\n\tSource      string    `json:\"source\"`\n\tPublishedAt time.Time `json:\"published_at\"`\n\tDownloads   int       `json:\"downloads\"`\n}\n\n// ProviderDetail represents a Provider with full detail.\ntype ProviderDetail struct {\n\tProvider\n\n\t//---------------------------------------------------------------\n\t// The fields below are only set when requesting this specific\n\t// module. They are available to easily know all available versions\n\t// without multiple API calls.\n\n\tVersions []string `json:\"versions\"` // All versions\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/registry/response/provider_list.go",
    "content": "package response\n\n// ProviderList is the response structure for a pageable list of providers.\ntype ProviderList struct {\n\tMeta      PaginationMeta `json:\"meta\"`\n\tProviders []*Provider    `json:\"providers\"`\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/registry/response/redirect.go",
    "content": "package response\n\n// Redirect causes the frontend to perform a window redirect.\ntype Redirect struct {\n\tURL string `json:\"url\"`\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/registry/response/terraform_provider.go",
    "content": "package response\n\nimport (\n\t\"sort\"\n\t\"strings\"\n\n\tversion \"github.com/hashicorp/go-version\"\n)\n\n// TerraformProvider is the response structure for all required information for\n// Terraform to choose a download URL. It must include all versions and all\n// platforms for Terraform to perform version and os/arch constraint matching\n// locally.\ntype TerraformProvider struct {\n\tID       string `json:\"id\"`\n\tVerified bool   `json:\"verified\"`\n\n\tVersions []*TerraformProviderVersion `json:\"versions\"`\n}\n\n// TerraformProviderVersion is the Terraform-specific response structure for a\n// provider version.\ntype TerraformProviderVersion struct {\n\tVersion   string   `json:\"version\"`\n\tProtocols []string `json:\"protocols\"`\n\n\tPlatforms []*TerraformProviderPlatform `json:\"platforms\"`\n}\n\n// TerraformProviderVersions is the Terraform-specific response structure for an\n// array of provider versions\ntype TerraformProviderVersions struct {\n\tID       string                      `json:\"id\"`\n\tVersions []*TerraformProviderVersion `json:\"versions\"`\n\tWarnings []string                    `json:\"warnings\"`\n}\n\n// TerraformProviderPlatform is the Terraform-specific response structure for a\n// provider platform.\ntype TerraformProviderPlatform struct {\n\tOS   string `json:\"os\"`\n\tArch string `json:\"arch\"`\n}\n\n// TerraformProviderPlatformLocation is the Terraform-specific response\n// structure for a provider platform with all details required to perform a\n// download.\ntype TerraformProviderPlatformLocation struct {\n\tProtocols           []string `json:\"protocols\"`\n\tOS                  string   `json:\"os\"`\n\tArch                string   `json:\"arch\"`\n\tFilename            string   `json:\"filename\"`\n\tDownloadURL         string   `json:\"download_url\"`\n\tShasumsURL          string   `json:\"shasums_url\"`\n\tShasumsSignatureURL string   `json:\"shasums_signature_url\"`\n\tShasum              string   `json:\"shasum\"`\n\n\tSigningKeys SigningKeyList `json:\"signing_keys\"`\n}\n\n// SigningKeyList is the response structure for a list of signing keys.\ntype SigningKeyList struct {\n\tGPGKeys []*GPGKey `json:\"gpg_public_keys\"`\n}\n\n// GPGKey is the response structure for a GPG key.\ntype GPGKey struct {\n\tASCIIArmor string  `json:\"ascii_armor\"`\n\tSource     string  `json:\"source\"`\n\tSourceURL  *string `json:\"source_url\"`\n}\n\n// Collection type for TerraformProviderVersion\ntype ProviderVersionCollection []*TerraformProviderVersion\n\n// GPGASCIIArmor returns an ASCII-armor-formatted string for all of the gpg\n// keys in the response.\nfunc (signingKeys *SigningKeyList) GPGASCIIArmor() string {\n\tkeys := []string{}\n\n\tfor _, gpgKey := range signingKeys.GPGKeys {\n\t\tkeys = append(keys, gpgKey.ASCIIArmor)\n\t}\n\n\treturn strings.Join(keys, \"\\n\")\n}\n\n// Sort sorts versions from newest to oldest.\nfunc (v ProviderVersionCollection) Sort() {\n\tsort.Slice(v, func(i, j int) bool {\n\t\tversionA, _ := version.NewVersion(v[i].Version)\n\t\tversionB, _ := version.NewVersion(v[j].Version)\n\n\t\treturn versionA.GreaterThan(versionB)\n\t})\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/states/doc.go",
    "content": "// Package states contains the types that are used to represent Terraform\n// states.\npackage states\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/states/eachmode_string.go",
    "content": "// Code generated by \"stringer -type EachMode\"; DO NOT EDIT.\n\npackage states\n\nimport \"strconv\"\n\nfunc _() {\n\t// An \"invalid array index\" compiler error signifies that the constant values have changed.\n\t// Re-run the stringer command to generate them again.\n\tvar x [1]struct{}\n\t_ = x[NoEach-0]\n\t_ = x[EachList-76]\n\t_ = x[EachMap-77]\n}\n\nconst (\n\t_EachMode_name_0 = \"NoEach\"\n\t_EachMode_name_1 = \"EachListEachMap\"\n)\n\nvar (\n\t_EachMode_index_1 = [...]uint8{0, 8, 15}\n)\n\nfunc (i EachMode) String() string {\n\tswitch {\n\tcase i == 0:\n\t\treturn _EachMode_name_0\n\tcase 76 <= i && i <= 77:\n\t\ti -= 76\n\t\treturn _EachMode_name_1[_EachMode_index_1[i]:_EachMode_index_1[i+1]]\n\tdefault:\n\t\treturn \"EachMode(\" + strconv.FormatInt(int64(i), 10) + \")\"\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/states/instance_generation.go",
    "content": "package states\n\n// Generation is used to represent multiple objects in a succession of objects\n// represented by a single resource instance address. A resource instance can\n// have multiple generations over its lifetime due to object replacement\n// (when a change can't be applied without destroying and re-creating), and\n// multiple generations can exist at the same time when create_before_destroy\n// is used.\n//\n// A Generation value can either be the value of the variable \"CurrentGen\" or\n// a value of type DeposedKey. Generation values can be compared for equality\n// using \"==\" and used as map keys. The zero value of Generation (nil) is not\n// a valid generation and must not be used.\ntype Generation interface {\n\tgeneration()\n}\n\n// CurrentGen is the Generation representing the currently-active object for\n// a resource instance.\nvar CurrentGen Generation\n\ntype currentGen struct{}\n\nfunc (g currentGen) generation() {}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/states/instance_object.go",
    "content": "package states\n\nimport (\n\t\"github.com/zclconf/go-cty/cty\"\n\tctyjson \"github.com/zclconf/go-cty/cty/json\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n)\n\n// ResourceInstanceObject is the local representation of a specific remote\n// object associated with a resource instance. In practice not all remote\n// objects are actually remote in the sense of being accessed over the network,\n// but this is the most common case.\n//\n// It is not valid to mutate a ResourceInstanceObject once it has been created.\n// Instead, create a new object and replace the existing one.\ntype ResourceInstanceObject struct {\n\t// Value is the object-typed value representing the remote object within\n\t// Terraform.\n\tValue cty.Value\n\n\t// Private is an opaque value set by the provider when this object was\n\t// last created or updated. Terraform Core does not use this value in\n\t// any way and it is not exposed anywhere in the user interface, so\n\t// a provider can use it for retaining any necessary private state.\n\tPrivate []byte\n\n\t// Status represents the \"readiness\" of the object as of the last time\n\t// it was updated.\n\tStatus ObjectStatus\n\n\t// Dependencies is a set of other addresses in the same module which\n\t// this instance depended on when the given attributes were evaluated.\n\t// This is used to construct the dependency relationships for an object\n\t// whose configuration is no longer available, such as if it has been\n\t// removed from configuration altogether, or is now deposed.\n\tDependencies []addrs.Referenceable\n}\n\n// ObjectStatus represents the status of a RemoteObject.\ntype ObjectStatus rune\n\n//go:generate stringer -type ObjectStatus\n\nconst (\n\t// ObjectReady is an object status for an object that is ready to use.\n\tObjectReady ObjectStatus = 'R'\n\n\t// ObjectTainted is an object status representing an object that is in\n\t// an unrecoverable bad state due to a partial failure during a create,\n\t// update, or delete operation. Since it cannot be moved into the\n\t// ObjectRead state, a tainted object must be replaced.\n\tObjectTainted ObjectStatus = 'T'\n\n\t// ObjectPlanned is a special object status used only for the transient\n\t// placeholder objects we place into state during the refresh and plan\n\t// walks to stand in for objects that will be created during apply.\n\t//\n\t// Any object of this status must have a corresponding change recorded\n\t// in the current plan, whose value must then be used in preference to\n\t// the value stored in state when evaluating expressions. A planned\n\t// object stored in state will be incomplete if any of its attributes are\n\t// not yet known, and the plan must be consulted in order to \"see\" those\n\t// unknown values, because the state is not able to represent them.\n\tObjectPlanned ObjectStatus = 'P'\n)\n\n// Encode marshals the value within the receiver to produce a\n// ResourceInstanceObjectSrc ready to be written to a state file.\n//\n// The given type must be the implied type of the resource type schema, and\n// the given value must conform to it. It is important to pass the schema\n// type and not the object's own type so that dynamically-typed attributes\n// will be stored correctly. The caller must also provide the version number\n// of the schema that the given type was derived from, which will be recorded\n// in the source object so it can be used to detect when schema migration is\n// required on read.\n//\n// The returned object may share internal references with the receiver and\n// so the caller must not mutate the receiver any further once once this\n// method is called.\nfunc (o *ResourceInstanceObject) Encode(ty cty.Type, schemaVersion uint64) (*ResourceInstanceObjectSrc, error) {\n\t// Our state serialization can't represent unknown values, so we convert\n\t// them to nulls here. This is lossy, but nobody should be writing unknown\n\t// values here and expecting to get them out again later.\n\t//\n\t// We get unknown values here while we're building out a \"planned state\"\n\t// during the plan phase, but the value stored in the plan takes precedence\n\t// for expression evaluation. The apply step should never produce unknown\n\t// values, but if it does it's the responsibility of the caller to detect\n\t// and raise an error about that.\n\tval := cty.UnknownAsNull(o.Value)\n\n\tsrc, err := ctyjson.Marshal(val, ty)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &ResourceInstanceObjectSrc{\n\t\tSchemaVersion: schemaVersion,\n\t\tAttrsJSON:     src,\n\t\tPrivate:       o.Private,\n\t\tStatus:        o.Status,\n\t\tDependencies:  o.Dependencies,\n\t}, nil\n}\n\n// AsTainted returns a deep copy of the receiver with the status updated to\n// ObjectTainted.\nfunc (o *ResourceInstanceObject) AsTainted() *ResourceInstanceObject {\n\tif o == nil {\n\t\t// A nil object can't be tainted, but we'll allow this anyway to\n\t\t// avoid a crash, since we presumably intend to eventually record\n\t\t// the object has having been deleted anyway.\n\t\treturn nil\n\t}\n\tret := o.DeepCopy()\n\tret.Status = ObjectTainted\n\treturn ret\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/states/instance_object_src.go",
    "content": "package states\n\nimport (\n\t\"github.com/zclconf/go-cty/cty\"\n\tctyjson \"github.com/zclconf/go-cty/cty/json\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/config/hcl2shim\"\n)\n\n// ResourceInstanceObjectSrc is a not-fully-decoded version of\n// ResourceInstanceObject. Decoding of it can be completed by first handling\n// any schema migration steps to get to the latest schema version and then\n// calling method Decode with the implied type of the latest schema.\ntype ResourceInstanceObjectSrc struct {\n\t// SchemaVersion is the resource-type-specific schema version number that\n\t// was current when either AttrsJSON or AttrsFlat was encoded. Migration\n\t// steps are required if this is less than the current version number\n\t// reported by the corresponding provider.\n\tSchemaVersion uint64\n\n\t// AttrsJSON is a JSON-encoded representation of the object attributes,\n\t// encoding the value (of the object type implied by the associated resource\n\t// type schema) that represents this remote object in Terraform Language\n\t// expressions, and is compared with configuration when producing a diff.\n\t//\n\t// This is retained in JSON format here because it may require preprocessing\n\t// before decoding if, for example, the stored attributes are for an older\n\t// schema version which the provider must upgrade before use. If the\n\t// version is current, it is valid to simply decode this using the\n\t// type implied by the current schema, without the need for the provider\n\t// to perform an upgrade first.\n\t//\n\t// When writing a ResourceInstanceObject into the state, AttrsJSON should\n\t// always be conformant to the current schema version and the current\n\t// schema version should be recorded in the SchemaVersion field.\n\tAttrsJSON []byte\n\n\t// AttrsFlat is a legacy form of attributes used in older state file\n\t// formats, and in the new state format for objects that haven't yet been\n\t// upgraded. This attribute is mutually exclusive with Attrs: for any\n\t// ResourceInstanceObject, only one of these attributes may be populated\n\t// and the other must be nil.\n\t//\n\t// An instance object with this field populated should be upgraded to use\n\t// Attrs at the earliest opportunity, since this legacy flatmap-based\n\t// format will be phased out over time. AttrsFlat should not be used when\n\t// writing new or updated objects to state; instead, callers must follow\n\t// the recommendations in the AttrsJSON documentation above.\n\tAttrsFlat map[string]string\n\n\t// These fields all correspond to the fields of the same name on\n\t// ResourceInstanceObject.\n\tPrivate      []byte\n\tStatus       ObjectStatus\n\tDependencies []addrs.Referenceable\n}\n\n// Decode unmarshals the raw representation of the object attributes. Pass the\n// implied type of the corresponding resource type schema for correct operation.\n//\n// Before calling Decode, the caller must check that the SchemaVersion field\n// exactly equals the version number of the schema whose implied type is being\n// passed, or else the result is undefined.\n//\n// The returned object may share internal references with the receiver and\n// so the caller must not mutate the receiver any further once once this\n// method is called.\nfunc (os *ResourceInstanceObjectSrc) Decode(ty cty.Type) (*ResourceInstanceObject, error) {\n\tvar val cty.Value\n\tvar err error\n\tif os.AttrsFlat != nil {\n\t\t// Legacy mode. We'll do our best to unpick this from the flatmap.\n\t\tval, err = hcl2shim.HCL2ValueFromFlatmap(os.AttrsFlat, ty)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t} else {\n\t\tval, err = ctyjson.Unmarshal(os.AttrsJSON, ty)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\treturn &ResourceInstanceObject{\n\t\tValue:        val,\n\t\tStatus:       os.Status,\n\t\tDependencies: os.Dependencies,\n\t\tPrivate:      os.Private,\n\t}, nil\n}\n\n// CompleteUpgrade creates a new ResourceInstanceObjectSrc by copying the\n// metadata from the receiver and writing in the given new schema version\n// and attribute value that are presumed to have resulted from upgrading\n// from an older schema version.\nfunc (os *ResourceInstanceObjectSrc) CompleteUpgrade(newAttrs cty.Value, newType cty.Type, newSchemaVersion uint64) (*ResourceInstanceObjectSrc, error) {\n\tnew := os.DeepCopy()\n\tnew.AttrsFlat = nil // We always use JSON after an upgrade, even if the source used flatmap\n\n\t// This is the same principle as ResourceInstanceObject.Encode, but\n\t// avoiding a decode/re-encode cycle because we don't have type info\n\t// available for the \"old\" attributes.\n\tnewAttrs = cty.UnknownAsNull(newAttrs)\n\tsrc, err := ctyjson.Marshal(newAttrs, newType)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tnew.AttrsJSON = src\n\tnew.SchemaVersion = newSchemaVersion\n\treturn new, nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/states/module.go",
    "content": "package states\n\nimport (\n\t\"github.com/zclconf/go-cty/cty\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n)\n\n// Module is a container for the states of objects within a particular module.\ntype Module struct {\n\tAddr addrs.ModuleInstance\n\n\t// Resources contains the state for each resource. The keys in this map are\n\t// an implementation detail and must not be used by outside callers.\n\tResources map[string]*Resource\n\n\t// OutputValues contains the state for each output value. The keys in this\n\t// map are output value names.\n\tOutputValues map[string]*OutputValue\n\n\t// LocalValues contains the value for each named output value. The keys\n\t// in this map are local value names.\n\tLocalValues map[string]cty.Value\n}\n\n// NewModule constructs an empty module state for the given module address.\nfunc NewModule(addr addrs.ModuleInstance) *Module {\n\treturn &Module{\n\t\tAddr:         addr,\n\t\tResources:    map[string]*Resource{},\n\t\tOutputValues: map[string]*OutputValue{},\n\t\tLocalValues:  map[string]cty.Value{},\n\t}\n}\n\n// Resource returns the state for the resource with the given address within\n// the receiving module state, or nil if the requested resource is not tracked\n// in the state.\nfunc (ms *Module) Resource(addr addrs.Resource) *Resource {\n\treturn ms.Resources[addr.String()]\n}\n\n// ResourceInstance returns the state for the resource instance with the given\n// address within the receiving module state, or nil if the requested instance\n// is not tracked in the state.\nfunc (ms *Module) ResourceInstance(addr addrs.ResourceInstance) *ResourceInstance {\n\trs := ms.Resource(addr.Resource)\n\tif rs == nil {\n\t\treturn nil\n\t}\n\treturn rs.Instance(addr.Key)\n}\n\n// SetResourceMeta updates the resource-level metadata for the resource\n// with the given address, creating the resource state for it if it doesn't\n// already exist.\nfunc (ms *Module) SetResourceMeta(addr addrs.Resource, eachMode EachMode, provider addrs.AbsProviderConfig) {\n\trs := ms.Resource(addr)\n\tif rs == nil {\n\t\trs = &Resource{\n\t\t\tAddr:      addr,\n\t\t\tInstances: map[addrs.InstanceKey]*ResourceInstance{},\n\t\t}\n\t\tms.Resources[addr.String()] = rs\n\t}\n\n\trs.EachMode = eachMode\n\trs.ProviderConfig = provider\n}\n\n// RemoveResource removes the entire state for the given resource, taking with\n// it any instances associated with the resource. This should generally be\n// called only for resource objects whose instances have all been destroyed.\nfunc (ms *Module) RemoveResource(addr addrs.Resource) {\n\tdelete(ms.Resources, addr.String())\n}\n\n// SetResourceInstanceCurrent saves the given instance object as the current\n// generation of the resource instance with the given address, simulataneously\n// updating the recorded provider configuration address, dependencies, and\n// resource EachMode.\n//\n// Any existing current instance object for the given resource is overwritten.\n// Set obj to nil to remove the primary generation object altogether. If there\n// are no deposed objects then the instance will be removed altogether.\n//\n// The provider address and \"each mode\" are resource-wide settings and so they\n// are updated for all other instances of the same resource as a side-effect of\n// this call.\nfunc (ms *Module) SetResourceInstanceCurrent(addr addrs.ResourceInstance, obj *ResourceInstanceObjectSrc, provider addrs.AbsProviderConfig) {\n\tms.SetResourceMeta(addr.Resource, eachModeForInstanceKey(addr.Key), provider)\n\n\trs := ms.Resource(addr.Resource)\n\tis := rs.EnsureInstance(addr.Key)\n\n\tis.Current = obj\n\n\tif !is.HasObjects() {\n\t\t// If we have no objects at all then we'll clean up.\n\t\tdelete(rs.Instances, addr.Key)\n\t}\n\tif rs.EachMode == NoEach && len(rs.Instances) == 0 {\n\t\t// Also clean up if we only expect to have one instance anyway\n\t\t// and there are none. We leave the resource behind if an each mode\n\t\t// is active because an empty list or map of instances is a valid state.\n\t\tdelete(ms.Resources, addr.Resource.String())\n\t}\n}\n\n// SetResourceInstanceDeposed saves the given instance object as a deposed\n// generation of the resource instance with the given address and deposed key.\n//\n// Call this method only for pre-existing deposed objects that already have\n// a known DeposedKey. For example, this method is useful if reloading objects\n// that were persisted to a state file. To mark the current object as deposed,\n// use DeposeResourceInstanceObject instead.\n//\n// The resource that contains the given instance must already exist in the\n// state, or this method will panic. Use Resource to check first if its\n// presence is not already guaranteed.\n//\n// Any existing current instance object for the given resource and deposed key\n// is overwritten. Set obj to nil to remove the deposed object altogether. If\n// the instance is left with no objects after this operation then it will\n// be removed from its containing resource altogether.\nfunc (ms *Module) SetResourceInstanceDeposed(addr addrs.ResourceInstance, key DeposedKey, obj *ResourceInstanceObjectSrc, provider addrs.AbsProviderConfig) {\n\tms.SetResourceMeta(addr.Resource, eachModeForInstanceKey(addr.Key), provider)\n\n\trs := ms.Resource(addr.Resource)\n\tis := rs.EnsureInstance(addr.Key)\n\tif obj != nil {\n\t\tis.Deposed[key] = obj\n\t} else {\n\t\tdelete(is.Deposed, key)\n\t}\n\n\tif !is.HasObjects() {\n\t\t// If we have no objects at all then we'll clean up.\n\t\tdelete(rs.Instances, addr.Key)\n\t}\n\tif rs.EachMode == NoEach && len(rs.Instances) == 0 {\n\t\t// Also clean up if we only expect to have one instance anyway\n\t\t// and there are none. We leave the resource behind if an each mode\n\t\t// is active because an empty list or map of instances is a valid state.\n\t\tdelete(ms.Resources, addr.Resource.String())\n\t}\n}\n\n// ForgetResourceInstanceAll removes the record of all objects associated with\n// the specified resource instance, if present. If not present, this is a no-op.\nfunc (ms *Module) ForgetResourceInstanceAll(addr addrs.ResourceInstance) {\n\trs := ms.Resource(addr.Resource)\n\tif rs == nil {\n\t\treturn\n\t}\n\tdelete(rs.Instances, addr.Key)\n\n\tif rs.EachMode == NoEach && len(rs.Instances) == 0 {\n\t\t// Also clean up if we only expect to have one instance anyway\n\t\t// and there are none. We leave the resource behind if an each mode\n\t\t// is active because an empty list or map of instances is a valid state.\n\t\tdelete(ms.Resources, addr.Resource.String())\n\t}\n}\n\n// ForgetResourceInstanceDeposed removes the record of the deposed object with\n// the given address and key, if present. If not present, this is a no-op.\nfunc (ms *Module) ForgetResourceInstanceDeposed(addr addrs.ResourceInstance, key DeposedKey) {\n\trs := ms.Resource(addr.Resource)\n\tif rs == nil {\n\t\treturn\n\t}\n\tis := rs.Instance(addr.Key)\n\tif is == nil {\n\t\treturn\n\t}\n\tdelete(is.Deposed, key)\n\n\tif !is.HasObjects() {\n\t\t// If we have no objects at all then we'll clean up.\n\t\tdelete(rs.Instances, addr.Key)\n\t}\n\tif rs.EachMode == NoEach && len(rs.Instances) == 0 {\n\t\t// Also clean up if we only expect to have one instance anyway\n\t\t// and there are none. We leave the resource behind if an each mode\n\t\t// is active because an empty list or map of instances is a valid state.\n\t\tdelete(ms.Resources, addr.Resource.String())\n\t}\n}\n\n// deposeResourceInstanceObject is the real implementation of\n// SyncState.DeposeResourceInstanceObject.\nfunc (ms *Module) deposeResourceInstanceObject(addr addrs.ResourceInstance, forceKey DeposedKey) DeposedKey {\n\tis := ms.ResourceInstance(addr)\n\tif is == nil {\n\t\treturn NotDeposed\n\t}\n\treturn is.deposeCurrentObject(forceKey)\n}\n\n// maybeRestoreResourceInstanceDeposed is the real implementation of\n// SyncState.MaybeRestoreResourceInstanceDeposed.\nfunc (ms *Module) maybeRestoreResourceInstanceDeposed(addr addrs.ResourceInstance, key DeposedKey) bool {\n\trs := ms.Resource(addr.Resource)\n\tif rs == nil {\n\t\treturn false\n\t}\n\tis := rs.Instance(addr.Key)\n\tif is == nil {\n\t\treturn false\n\t}\n\tif is.Current != nil {\n\t\treturn false\n\t}\n\tif len(is.Deposed) == 0 {\n\t\treturn false\n\t}\n\tis.Current = is.Deposed[key]\n\tdelete(is.Deposed, key)\n\treturn true\n}\n\n// SetOutputValue writes an output value into the state, overwriting any\n// existing value of the same name.\nfunc (ms *Module) SetOutputValue(name string, value cty.Value, sensitive bool) *OutputValue {\n\tos := &OutputValue{\n\t\tValue:     value,\n\t\tSensitive: sensitive,\n\t}\n\tms.OutputValues[name] = os\n\treturn os\n}\n\n// RemoveOutputValue removes the output value of the given name from the state,\n// if it exists. This method is a no-op if there is no value of the given\n// name.\nfunc (ms *Module) RemoveOutputValue(name string) {\n\tdelete(ms.OutputValues, name)\n}\n\n// SetLocalValue writes a local value into the state, overwriting any\n// existing value of the same name.\nfunc (ms *Module) SetLocalValue(name string, value cty.Value) {\n\tms.LocalValues[name] = value\n}\n\n// RemoveLocalValue removes the local value of the given name from the state,\n// if it exists. This method is a no-op if there is no value of the given\n// name.\nfunc (ms *Module) RemoveLocalValue(name string) {\n\tdelete(ms.LocalValues, name)\n}\n\n// PruneResourceHusks is a specialized method that will remove any Resource\n// objects that do not contain any instances, even if they have an EachMode.\n//\n// You probably shouldn't call this! See the method of the same name on\n// type State for more information on what this is for and the rare situations\n// where it is safe to use.\nfunc (ms *Module) PruneResourceHusks() {\n\tfor _, rs := range ms.Resources {\n\t\tif len(rs.Instances) == 0 {\n\t\t\tms.RemoveResource(rs.Addr)\n\t\t}\n\t}\n}\n\n// empty returns true if the receving module state is contributing nothing\n// to the state. In other words, it returns true if the module could be\n// removed from the state altogether without changing the meaning of the state.\n//\n// In practice a module containing no objects is the same as a non-existent\n// module, and so we can opportunistically clean up once a module becomes\n// empty on the assumption that it will be re-added if needed later.\nfunc (ms *Module) empty() bool {\n\tif ms == nil {\n\t\treturn true\n\t}\n\n\t// This must be updated to cover any new collections added to Module\n\t// in future.\n\treturn (len(ms.Resources) == 0 &&\n\t\tlen(ms.OutputValues) == 0 &&\n\t\tlen(ms.LocalValues) == 0)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/states/objectstatus_string.go",
    "content": "// Code generated by \"stringer -type ObjectStatus\"; DO NOT EDIT.\n\npackage states\n\nimport \"strconv\"\n\nfunc _() {\n\t// An \"invalid array index\" compiler error signifies that the constant values have changed.\n\t// Re-run the stringer command to generate them again.\n\tvar x [1]struct{}\n\t_ = x[ObjectReady-82]\n\t_ = x[ObjectTainted-84]\n\t_ = x[ObjectPlanned-80]\n}\n\nconst (\n\t_ObjectStatus_name_0 = \"ObjectPlanned\"\n\t_ObjectStatus_name_1 = \"ObjectReady\"\n\t_ObjectStatus_name_2 = \"ObjectTainted\"\n)\n\nfunc (i ObjectStatus) String() string {\n\tswitch {\n\tcase i == 80:\n\t\treturn _ObjectStatus_name_0\n\tcase i == 82:\n\t\treturn _ObjectStatus_name_1\n\tcase i == 84:\n\t\treturn _ObjectStatus_name_2\n\tdefault:\n\t\treturn \"ObjectStatus(\" + strconv.FormatInt(int64(i), 10) + \")\"\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/states/output_value.go",
    "content": "package states\n\nimport (\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// OutputValue represents the state of a particular output value.\n//\n// It is not valid to mutate an OutputValue object once it has been created.\n// Instead, create an entirely new OutputValue to replace the previous one.\ntype OutputValue struct {\n\tValue     cty.Value\n\tSensitive bool\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/states/resource.go",
    "content": "package states\n\nimport (\n\t\"fmt\"\n\t\"math/rand\"\n\t\"time\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n)\n\n// Resource represents the state of a resource.\ntype Resource struct {\n\t// Addr is the module-relative address for the resource this state object\n\t// belongs to.\n\tAddr addrs.Resource\n\n\t// EachMode is the multi-instance mode currently in use for this resource,\n\t// or NoEach if this is a single-instance resource. This dictates what\n\t// type of value is returned when accessing this resource via expressions\n\t// in the Terraform language.\n\tEachMode EachMode\n\n\t// Instances contains the potentially-multiple instances associated with\n\t// this resource. This map can contain a mixture of different key types,\n\t// but only the ones of InstanceKeyType are considered current.\n\tInstances map[addrs.InstanceKey]*ResourceInstance\n\n\t// ProviderConfig is the absolute address for the provider configuration that\n\t// most recently managed this resource. This is used to connect a resource\n\t// with a provider configuration when the resource configuration block is\n\t// not available, such as if it has been removed from configuration\n\t// altogether.\n\tProviderConfig addrs.AbsProviderConfig\n}\n\n// Instance returns the state for the instance with the given key, or nil\n// if no such instance is tracked within the state.\nfunc (rs *Resource) Instance(key addrs.InstanceKey) *ResourceInstance {\n\treturn rs.Instances[key]\n}\n\n// EnsureInstance returns the state for the instance with the given key,\n// creating a new empty state for it if one doesn't already exist.\n//\n// Because this may create and save a new state, it is considered to be\n// a write operation.\nfunc (rs *Resource) EnsureInstance(key addrs.InstanceKey) *ResourceInstance {\n\tret := rs.Instance(key)\n\tif ret == nil {\n\t\tret = NewResourceInstance()\n\t\trs.Instances[key] = ret\n\t}\n\treturn ret\n}\n\n// ResourceInstance represents the state of a particular instance of a resource.\ntype ResourceInstance struct {\n\t// Current, if non-nil, is the remote object that is currently represented\n\t// by the corresponding resource instance.\n\tCurrent *ResourceInstanceObjectSrc\n\n\t// Deposed, if len > 0, contains any remote objects that were previously\n\t// represented by the corresponding resource instance but have been\n\t// replaced and are pending destruction due to the create_before_destroy\n\t// lifecycle mode.\n\tDeposed map[DeposedKey]*ResourceInstanceObjectSrc\n}\n\n// NewResourceInstance constructs and returns a new ResourceInstance, ready to\n// use.\nfunc NewResourceInstance() *ResourceInstance {\n\treturn &ResourceInstance{\n\t\tDeposed: map[DeposedKey]*ResourceInstanceObjectSrc{},\n\t}\n}\n\n// HasCurrent returns true if this resource instance has a \"current\"-generation\n// object. Most instances do, but this can briefly be false during a\n// create-before-destroy replace operation when the current has been deposed\n// but its replacement has not yet been created.\nfunc (i *ResourceInstance) HasCurrent() bool {\n\treturn i != nil && i.Current != nil\n}\n\n// HasDeposed returns true if this resource instance has a deposed object\n// with the given key.\nfunc (i *ResourceInstance) HasDeposed(key DeposedKey) bool {\n\treturn i != nil && i.Deposed[key] != nil\n}\n\n// HasAnyDeposed returns true if this resource instance has one or more\n// deposed objects.\nfunc (i *ResourceInstance) HasAnyDeposed() bool {\n\treturn i != nil && len(i.Deposed) > 0\n}\n\n// HasObjects returns true if this resource has any objects at all, whether\n// current or deposed.\nfunc (i *ResourceInstance) HasObjects() bool {\n\treturn i.Current != nil || len(i.Deposed) != 0\n}\n\n// deposeCurrentObject is part of the real implementation of\n// SyncState.DeposeResourceInstanceObject. The exported method uses a lock\n// to ensure that we can safely allocate an unused deposed key without\n// collision.\nfunc (i *ResourceInstance) deposeCurrentObject(forceKey DeposedKey) DeposedKey {\n\tif !i.HasCurrent() {\n\t\treturn NotDeposed\n\t}\n\n\tkey := forceKey\n\tif key == NotDeposed {\n\t\tkey = i.findUnusedDeposedKey()\n\t} else {\n\t\tif _, exists := i.Deposed[key]; exists {\n\t\t\tpanic(fmt.Sprintf(\"forced key %s is already in use\", forceKey))\n\t\t}\n\t}\n\ti.Deposed[key] = i.Current\n\ti.Current = nil\n\treturn key\n}\n\n// GetGeneration retrieves the object of the given generation from the\n// ResourceInstance, or returns nil if there is no such object.\n//\n// If the given generation is nil or invalid, this method will panic.\nfunc (i *ResourceInstance) GetGeneration(gen Generation) *ResourceInstanceObjectSrc {\n\tif gen == CurrentGen {\n\t\treturn i.Current\n\t}\n\tif dk, ok := gen.(DeposedKey); ok {\n\t\treturn i.Deposed[dk]\n\t}\n\tif gen == nil {\n\t\tpanic(fmt.Sprintf(\"get with nil Generation\"))\n\t}\n\t// Should never fall out here, since the above covers all possible\n\t// Generation values.\n\tpanic(fmt.Sprintf(\"get invalid Generation %#v\", gen))\n}\n\n// FindUnusedDeposedKey generates a unique DeposedKey that is guaranteed not to\n// already be in use for this instance at the time of the call.\n//\n// Note that the validity of this result may change if new deposed keys are\n// allocated before it is used. To avoid this risk, instead use the\n// DeposeResourceInstanceObject method on the SyncState wrapper type, which\n// allocates a key and uses it atomically.\nfunc (i *ResourceInstance) FindUnusedDeposedKey() DeposedKey {\n\treturn i.findUnusedDeposedKey()\n}\n\n// findUnusedDeposedKey generates a unique DeposedKey that is guaranteed not to\n// already be in use for this instance.\nfunc (i *ResourceInstance) findUnusedDeposedKey() DeposedKey {\n\tfor {\n\t\tkey := NewDeposedKey()\n\t\tif _, exists := i.Deposed[key]; !exists {\n\t\t\treturn key\n\t\t}\n\t\t// Spin until we find a unique one. This shouldn't take long, because\n\t\t// we have a 32-bit keyspace and there's rarely more than one deposed\n\t\t// instance.\n\t}\n}\n\n// EachMode specifies the multi-instance mode for a resource.\ntype EachMode rune\n\nconst (\n\tNoEach   EachMode = 0\n\tEachList EachMode = 'L'\n\tEachMap  EachMode = 'M'\n)\n\n//go:generate stringer -type EachMode\n\nfunc eachModeForInstanceKey(key addrs.InstanceKey) EachMode {\n\tswitch key.(type) {\n\tcase addrs.IntKey:\n\t\treturn EachList\n\tcase addrs.StringKey:\n\t\treturn EachMap\n\tdefault:\n\t\tif key == addrs.NoKey {\n\t\t\treturn NoEach\n\t\t}\n\t\tpanic(fmt.Sprintf(\"don't know an each mode for instance key %#v\", key))\n\t}\n}\n\n// DeposedKey is a 8-character hex string used to uniquely identify deposed\n// instance objects in the state.\ntype DeposedKey string\n\n// NotDeposed is a special invalid value of DeposedKey that is used to represent\n// the absense of a deposed key. It must not be used as an actual deposed key.\nconst NotDeposed = DeposedKey(\"\")\n\nvar deposedKeyRand = rand.New(rand.NewSource(time.Now().UnixNano()))\n\n// NewDeposedKey generates a pseudo-random deposed key. Because of the short\n// length of these keys, uniqueness is not a natural consequence and so the\n// caller should test to see if the generated key is already in use and generate\n// another if so, until a unique key is found.\nfunc NewDeposedKey() DeposedKey {\n\tv := deposedKeyRand.Uint32()\n\treturn DeposedKey(fmt.Sprintf(\"%08x\", v))\n}\n\nfunc (k DeposedKey) String() string {\n\treturn string(k)\n}\n\nfunc (k DeposedKey) GoString() string {\n\tks := string(k)\n\tswitch {\n\tcase ks == \"\":\n\t\treturn \"states.NotDeposed\"\n\tdefault:\n\t\treturn fmt.Sprintf(\"states.DeposedKey(%s)\", ks)\n\t}\n}\n\n// Generation is a helper method to convert a DeposedKey into a Generation.\n// If the reciever is anything other than NotDeposed then the result is\n// just the same value as a Generation. If the receiver is NotDeposed then\n// the result is CurrentGen.\nfunc (k DeposedKey) Generation() Generation {\n\tif k == NotDeposed {\n\t\treturn CurrentGen\n\t}\n\treturn k\n}\n\n// generation is an implementation of Generation.\nfunc (k DeposedKey) generation() {}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/states/state.go",
    "content": "package states\n\nimport (\n\t\"sort\"\n\n\t\"github.com/zclconf/go-cty/cty\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n)\n\n// State is the top-level type of a Terraform state.\n//\n// A state should be mutated only via its accessor methods, to ensure that\n// invariants are preserved.\n//\n// Access to State and the nested values within it is not concurrency-safe,\n// so when accessing a State object concurrently it is the caller's\n// responsibility to ensure that only one write is in progress at a time\n// and that reads only occur when no write is in progress. The most common\n// way to acheive this is to wrap the State in a SyncState and use the\n// higher-level atomic operations supported by that type.\ntype State struct {\n\t// Modules contains the state for each module. The keys in this map are\n\t// an implementation detail and must not be used by outside callers.\n\tModules map[string]*Module\n}\n\n// NewState constructs a minimal empty state, containing an empty root module.\nfunc NewState() *State {\n\tmodules := map[string]*Module{}\n\tmodules[addrs.RootModuleInstance.String()] = NewModule(addrs.RootModuleInstance)\n\treturn &State{\n\t\tModules: modules,\n\t}\n}\n\n// BuildState is a helper -- primarily intended for tests -- to build a state\n// using imperative code against the StateSync type while still acting as\n// an expression of type *State to assign into a containing struct.\nfunc BuildState(cb func(*SyncState)) *State {\n\ts := NewState()\n\tcb(s.SyncWrapper())\n\treturn s\n}\n\n// Empty returns true if there are no resources or populated output values\n// in the receiver. In other words, if this state could be safely replaced\n// with the return value of NewState and be functionally equivalent.\nfunc (s *State) Empty() bool {\n\tif s == nil {\n\t\treturn true\n\t}\n\tfor _, ms := range s.Modules {\n\t\tif len(ms.Resources) != 0 {\n\t\t\treturn false\n\t\t}\n\t\tif len(ms.OutputValues) != 0 {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\n// Module returns the state for the module with the given address, or nil if\n// the requested module is not tracked in the state.\nfunc (s *State) Module(addr addrs.ModuleInstance) *Module {\n\tif s == nil {\n\t\tpanic(\"State.Module on nil *State\")\n\t}\n\treturn s.Modules[addr.String()]\n}\n\n// RemoveModule removes the module with the given address from the state,\n// unless it is the root module. The root module cannot be deleted, and so\n// this method will panic if that is attempted.\n//\n// Removing a module implicitly discards all of the resources, outputs and\n// local values within it, and so this should usually be done only for empty\n// modules. For callers accessing the state through a SyncState wrapper, modules\n// are automatically pruned if they are empty after one of their contained\n// elements is removed.\nfunc (s *State) RemoveModule(addr addrs.ModuleInstance) {\n\tif addr.IsRoot() {\n\t\tpanic(\"attempted to remove root module\")\n\t}\n\n\tdelete(s.Modules, addr.String())\n}\n\n// RootModule is a convenient alias for Module(addrs.RootModuleInstance).\nfunc (s *State) RootModule() *Module {\n\tif s == nil {\n\t\tpanic(\"RootModule called on nil State\")\n\t}\n\treturn s.Modules[addrs.RootModuleInstance.String()]\n}\n\n// EnsureModule returns the state for the module with the given address,\n// creating and adding a new one if necessary.\n//\n// Since this might modify the state to add a new instance, it is considered\n// to be a write operation.\nfunc (s *State) EnsureModule(addr addrs.ModuleInstance) *Module {\n\tms := s.Module(addr)\n\tif ms == nil {\n\t\tms = NewModule(addr)\n\t\ts.Modules[addr.String()] = ms\n\t}\n\treturn ms\n}\n\n// HasResources returns true if there is at least one resource (of any mode)\n// present in the receiving state.\nfunc (s *State) HasResources() bool {\n\tif s == nil {\n\t\treturn false\n\t}\n\tfor _, ms := range s.Modules {\n\t\tif len(ms.Resources) > 0 {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// Resource returns the state for the resource with the given address, or nil\n// if no such resource is tracked in the state.\nfunc (s *State) Resource(addr addrs.AbsResource) *Resource {\n\tms := s.Module(addr.Module)\n\tif ms == nil {\n\t\treturn nil\n\t}\n\treturn ms.Resource(addr.Resource)\n}\n\n// ResourceInstance returns the state for the resource instance with the given\n// address, or nil if no such resource is tracked in the state.\nfunc (s *State) ResourceInstance(addr addrs.AbsResourceInstance) *ResourceInstance {\n\tif s == nil {\n\t\tpanic(\"State.ResourceInstance on nil *State\")\n\t}\n\tms := s.Module(addr.Module)\n\tif ms == nil {\n\t\treturn nil\n\t}\n\treturn ms.ResourceInstance(addr.Resource)\n}\n\n// OutputValue returns the state for the output value with the given address,\n// or nil if no such output value is tracked in the state.\nfunc (s *State) OutputValue(addr addrs.AbsOutputValue) *OutputValue {\n\tms := s.Module(addr.Module)\n\tif ms == nil {\n\t\treturn nil\n\t}\n\treturn ms.OutputValues[addr.OutputValue.Name]\n}\n\n// LocalValue returns the value of the named local value with the given address,\n// or cty.NilVal if no such value is tracked in the state.\nfunc (s *State) LocalValue(addr addrs.AbsLocalValue) cty.Value {\n\tms := s.Module(addr.Module)\n\tif ms == nil {\n\t\treturn cty.NilVal\n\t}\n\treturn ms.LocalValues[addr.LocalValue.Name]\n}\n\n// ProviderAddrs returns a list of all of the provider configuration addresses\n// referenced throughout the receiving state.\n//\n// The result is de-duplicated so that each distinct address appears only once.\nfunc (s *State) ProviderAddrs() []addrs.AbsProviderConfig {\n\tif s == nil {\n\t\treturn nil\n\t}\n\n\tm := map[string]addrs.AbsProviderConfig{}\n\tfor _, ms := range s.Modules {\n\t\tfor _, rc := range ms.Resources {\n\t\t\tm[rc.ProviderConfig.String()] = rc.ProviderConfig\n\t\t}\n\t}\n\tif len(m) == 0 {\n\t\treturn nil\n\t}\n\n\t// This is mainly just so we'll get stable results for testing purposes.\n\tkeys := make([]string, 0, len(m))\n\tfor k := range m {\n\t\tkeys = append(keys, k)\n\t}\n\tsort.Strings(keys)\n\n\tret := make([]addrs.AbsProviderConfig, len(keys))\n\tfor i, key := range keys {\n\t\tret[i] = m[key]\n\t}\n\n\treturn ret\n}\n\n// PruneResourceHusks is a specialized method that will remove any Resource\n// objects that do not contain any instances, even if they have an EachMode.\n//\n// This should generally be used only after a \"terraform destroy\" operation,\n// to finalize the cleanup of the state. It is not correct to use this after\n// other operations because if a resource has \"count = 0\" or \"for_each\" over\n// an empty collection then we want to retain it in the state so that references\n// to it, particularly in \"strange\" contexts like \"terraform console\", can be\n// properly resolved.\n//\n// This method MUST NOT be called concurrently with other readers and writers\n// of the receiving state.\nfunc (s *State) PruneResourceHusks() {\n\tfor _, m := range s.Modules {\n\t\tm.PruneResourceHusks()\n\t\tif len(m.Resources) == 0 && !m.Addr.IsRoot() {\n\t\t\ts.RemoveModule(m.Addr)\n\t\t}\n\t}\n}\n\n// SyncWrapper returns a SyncState object wrapping the receiver.\nfunc (s *State) SyncWrapper() *SyncState {\n\treturn &SyncState{\n\t\tstate: s,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/states/state_deepcopy.go",
    "content": "package states\n\nimport (\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// Taking deep copies of states is an important operation because state is\n// otherwise a mutable data structure that is challenging to share across\n// many separate callers. It is important that the DeepCopy implementations\n// in this file comprehensively copy all parts of the state data structure\n// that could be mutated via pointers.\n\n// DeepCopy returns a new state that contains equivalent data to the reciever\n// but shares no backing memory in common.\n//\n// As with all methods on State, this method is not safe to use concurrently\n// with writing to any portion of the recieving data structure. It is the\n// caller's responsibility to ensure mutual exclusion for the duration of the\n// operation, but may then freely modify the receiver and the returned copy\n// independently once this method returns.\nfunc (s *State) DeepCopy() *State {\n\tif s == nil {\n\t\treturn nil\n\t}\n\n\tmodules := make(map[string]*Module, len(s.Modules))\n\tfor k, m := range s.Modules {\n\t\tmodules[k] = m.DeepCopy()\n\t}\n\treturn &State{\n\t\tModules: modules,\n\t}\n}\n\n// DeepCopy returns a new module state that contains equivalent data to the\n// receiver but shares no backing memory in common.\n//\n// As with all methods on Module, this method is not safe to use concurrently\n// with writing to any portion of the recieving data structure. It is the\n// caller's responsibility to ensure mutual exclusion for the duration of the\n// operation, but may then freely modify the receiver and the returned copy\n// independently once this method returns.\nfunc (ms *Module) DeepCopy() *Module {\n\tif ms == nil {\n\t\treturn nil\n\t}\n\n\tresources := make(map[string]*Resource, len(ms.Resources))\n\tfor k, r := range ms.Resources {\n\t\tresources[k] = r.DeepCopy()\n\t}\n\toutputValues := make(map[string]*OutputValue, len(ms.OutputValues))\n\tfor k, v := range ms.OutputValues {\n\t\toutputValues[k] = v.DeepCopy()\n\t}\n\tlocalValues := make(map[string]cty.Value, len(ms.LocalValues))\n\tfor k, v := range ms.LocalValues {\n\t\t// cty.Value is immutable, so we don't need to copy these.\n\t\tlocalValues[k] = v\n\t}\n\n\treturn &Module{\n\t\tAddr:         ms.Addr, // technically mutable, but immutable by convention\n\t\tResources:    resources,\n\t\tOutputValues: outputValues,\n\t\tLocalValues:  localValues,\n\t}\n}\n\n// DeepCopy returns a new resource state that contains equivalent data to the\n// receiver but shares no backing memory in common.\n//\n// As with all methods on Resource, this method is not safe to use concurrently\n// with writing to any portion of the recieving data structure. It is the\n// caller's responsibility to ensure mutual exclusion for the duration of the\n// operation, but may then freely modify the receiver and the returned copy\n// independently once this method returns.\nfunc (rs *Resource) DeepCopy() *Resource {\n\tif rs == nil {\n\t\treturn nil\n\t}\n\n\tinstances := make(map[addrs.InstanceKey]*ResourceInstance, len(rs.Instances))\n\tfor k, i := range rs.Instances {\n\t\tinstances[k] = i.DeepCopy()\n\t}\n\n\treturn &Resource{\n\t\tAddr:           rs.Addr,\n\t\tEachMode:       rs.EachMode,\n\t\tInstances:      instances,\n\t\tProviderConfig: rs.ProviderConfig, // technically mutable, but immutable by convention\n\t}\n}\n\n// DeepCopy returns a new resource instance state that contains equivalent data\n// to the receiver but shares no backing memory in common.\n//\n// As with all methods on ResourceInstance, this method is not safe to use\n// concurrently with writing to any portion of the recieving data structure. It\n// is the caller's responsibility to ensure mutual exclusion for the duration\n// of the operation, but may then freely modify the receiver and the returned\n// copy independently once this method returns.\nfunc (is *ResourceInstance) DeepCopy() *ResourceInstance {\n\tif is == nil {\n\t\treturn nil\n\t}\n\n\tdeposed := make(map[DeposedKey]*ResourceInstanceObjectSrc, len(is.Deposed))\n\tfor k, obj := range is.Deposed {\n\t\tdeposed[k] = obj.DeepCopy()\n\t}\n\n\treturn &ResourceInstance{\n\t\tCurrent: is.Current.DeepCopy(),\n\t\tDeposed: deposed,\n\t}\n}\n\n// DeepCopy returns a new resource instance object that contains equivalent data\n// to the receiver but shares no backing memory in common.\n//\n// As with all methods on ResourceInstanceObjectSrc, this method is not safe to\n// use concurrently with writing to any portion of the recieving data structure.\n// It is the caller's responsibility to ensure mutual exclusion for the duration\n// of the operation, but may then freely modify the receiver and the returned\n// copy independently once this method returns.\nfunc (obj *ResourceInstanceObjectSrc) DeepCopy() *ResourceInstanceObjectSrc {\n\tif obj == nil {\n\t\treturn nil\n\t}\n\n\tvar attrsFlat map[string]string\n\tif obj.AttrsFlat != nil {\n\t\tattrsFlat = make(map[string]string, len(obj.AttrsFlat))\n\t\tfor k, v := range obj.AttrsFlat {\n\t\t\tattrsFlat[k] = v\n\t\t}\n\t}\n\n\tvar attrsJSON []byte\n\tif obj.AttrsJSON != nil {\n\t\tattrsJSON = make([]byte, len(obj.AttrsJSON))\n\t\tcopy(attrsJSON, obj.AttrsJSON)\n\t}\n\n\tvar private []byte\n\tif obj.Private != nil {\n\t\tprivate := make([]byte, len(obj.Private))\n\t\tcopy(private, obj.Private)\n\t}\n\n\t// Some addrs.Referencable implementations are technically mutable, but\n\t// we treat them as immutable by convention and so we don't deep-copy here.\n\tdependencies := make([]addrs.Referenceable, len(obj.Dependencies))\n\tcopy(dependencies, obj.Dependencies)\n\n\treturn &ResourceInstanceObjectSrc{\n\t\tStatus:        obj.Status,\n\t\tSchemaVersion: obj.SchemaVersion,\n\t\tPrivate:       private,\n\t\tAttrsFlat:     attrsFlat,\n\t\tAttrsJSON:     attrsJSON,\n\t\tDependencies:  dependencies,\n\t}\n}\n\n// DeepCopy returns a new resource instance object that contains equivalent data\n// to the receiver but shares no backing memory in common.\n//\n// As with all methods on ResourceInstanceObject, this method is not safe to use\n// concurrently with writing to any portion of the recieving data structure. It\n// is the caller's responsibility to ensure mutual exclusion for the duration\n// of the operation, but may then freely modify the receiver and the returned\n// copy independently once this method returns.\nfunc (obj *ResourceInstanceObject) DeepCopy() *ResourceInstanceObject {\n\tif obj == nil {\n\t\treturn nil\n\t}\n\n\tvar private []byte\n\tif obj.Private != nil {\n\t\tprivate := make([]byte, len(obj.Private))\n\t\tcopy(private, obj.Private)\n\t}\n\n\t// Some addrs.Referencable implementations are technically mutable, but\n\t// we treat them as immutable by convention and so we don't deep-copy here.\n\tdependencies := make([]addrs.Referenceable, len(obj.Dependencies))\n\tcopy(dependencies, obj.Dependencies)\n\n\treturn &ResourceInstanceObject{\n\t\tValue:        obj.Value,\n\t\tStatus:       obj.Status,\n\t\tPrivate:      private,\n\t\tDependencies: dependencies,\n\t}\n}\n\n// DeepCopy returns a new output value state that contains equivalent data\n// to the receiver but shares no backing memory in common.\n//\n// As with all methods on OutputValue, this method is not safe to use\n// concurrently with writing to any portion of the recieving data structure. It\n// is the caller's responsibility to ensure mutual exclusion for the duration\n// of the operation, but may then freely modify the receiver and the returned\n// copy independently once this method returns.\nfunc (os *OutputValue) DeepCopy() *OutputValue {\n\tif os == nil {\n\t\treturn nil\n\t}\n\n\treturn &OutputValue{\n\t\tValue:     os.Value,\n\t\tSensitive: os.Sensitive,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/states/state_equal.go",
    "content": "package states\n\nimport (\n\t\"reflect\"\n)\n\n// Equal returns true if the receiver is functionally equivalent to other,\n// including any ephemeral portions of the state that would not be included\n// if the state were saved to files.\n//\n// To test only the persistent portions of two states for equality, instead\n// use statefile.StatesMarshalEqual.\nfunc (s *State) Equal(other *State) bool {\n\t// For the moment this is sufficient, but we may need to do something\n\t// more elaborate in future if we have any portions of state that require\n\t// more sophisticated comparisons.\n\treturn reflect.DeepEqual(s, other)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/states/state_string.go",
    "content": "package states\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"sort\"\n\t\"strings\"\n\n\tctyjson \"github.com/zclconf/go-cty/cty/json\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/config/hcl2shim\"\n)\n\n// String returns a rather-odd string representation of the entire state.\n//\n// This is intended to match the behavior of the older terraform.State.String\n// method that is used in lots of existing tests. It should not be used in\n// new tests: instead, use \"cmp\" to directly compare the state data structures\n// and print out a diff if they do not match.\n//\n// This method should never be used in non-test code, whether directly by call\n// or indirectly via a %s or %q verb in package fmt.\nfunc (s *State) String() string {\n\tif s == nil {\n\t\treturn \"<nil>\"\n\t}\n\n\t// sort the modules by name for consistent output\n\tmodules := make([]string, 0, len(s.Modules))\n\tfor m := range s.Modules {\n\t\tmodules = append(modules, m)\n\t}\n\tsort.Strings(modules)\n\n\tvar buf bytes.Buffer\n\tfor _, name := range modules {\n\t\tm := s.Modules[name]\n\t\tmStr := m.testString()\n\n\t\t// If we're the root module, we just write the output directly.\n\t\tif m.Addr.IsRoot() {\n\t\t\tbuf.WriteString(mStr + \"\\n\")\n\t\t\tcontinue\n\t\t}\n\n\t\t// We need to build out a string that resembles the not-quite-standard\n\t\t// format that terraform.State.String used to use, where there's a\n\t\t// \"module.\" prefix but then just a chain of all of the module names\n\t\t// without any further \"module.\" portions.\n\t\tbuf.WriteString(\"module\")\n\t\tfor _, step := range m.Addr {\n\t\t\tbuf.WriteByte('.')\n\t\t\tbuf.WriteString(step.Name)\n\t\t\tif step.InstanceKey != addrs.NoKey {\n\t\t\t\tbuf.WriteByte('[')\n\t\t\t\tbuf.WriteString(step.InstanceKey.String())\n\t\t\t\tbuf.WriteByte(']')\n\t\t\t}\n\t\t}\n\t\tbuf.WriteString(\":\\n\")\n\n\t\ts := bufio.NewScanner(strings.NewReader(mStr))\n\t\tfor s.Scan() {\n\t\t\ttext := s.Text()\n\t\t\tif text != \"\" {\n\t\t\t\ttext = \"  \" + text\n\t\t\t}\n\n\t\t\tbuf.WriteString(fmt.Sprintf(\"%s\\n\", text))\n\t\t}\n\t}\n\n\treturn strings.TrimSpace(buf.String())\n}\n\n// testString is used to produce part of the output of State.String. It should\n// never be used directly.\nfunc (m *Module) testString() string {\n\tvar buf bytes.Buffer\n\n\tif len(m.Resources) == 0 {\n\t\tbuf.WriteString(\"<no state>\")\n\t}\n\n\t// We use AbsResourceInstance here, even though everything belongs to\n\t// the same module, just because we have a sorting behavior defined\n\t// for those but not for just ResourceInstance.\n\taddrsOrder := make([]addrs.AbsResourceInstance, 0, len(m.Resources))\n\tfor _, rs := range m.Resources {\n\t\tfor ik := range rs.Instances {\n\t\t\taddrsOrder = append(addrsOrder, rs.Addr.Instance(ik).Absolute(addrs.RootModuleInstance))\n\t\t}\n\t}\n\n\tsort.Slice(addrsOrder, func(i, j int) bool {\n\t\treturn addrsOrder[i].Less(addrsOrder[j])\n\t})\n\n\tfor _, fakeAbsAddr := range addrsOrder {\n\t\taddr := fakeAbsAddr.Resource\n\t\trs := m.Resource(addr.ContainingResource())\n\t\tis := m.ResourceInstance(addr)\n\n\t\t// Here we need to fake up a legacy-style address as the old state\n\t\t// types would've used, since that's what our tests against those\n\t\t// old types expect. The significant difference is that instancekey\n\t\t// is dot-separated rather than using index brackets.\n\t\tk := addr.ContainingResource().String()\n\t\tif addr.Key != addrs.NoKey {\n\t\t\tswitch tk := addr.Key.(type) {\n\t\t\tcase addrs.IntKey:\n\t\t\t\tk = fmt.Sprintf(\"%s.%d\", k, tk)\n\t\t\tdefault:\n\t\t\t\t// No other key types existed for the legacy types, so we\n\t\t\t\t// can do whatever we want here. We'll just use our standard\n\t\t\t\t// syntax for these.\n\t\t\t\tk = k + tk.String()\n\t\t\t}\n\t\t}\n\n\t\tid := LegacyInstanceObjectID(is.Current)\n\n\t\ttaintStr := \"\"\n\t\tif is.Current != nil && is.Current.Status == ObjectTainted {\n\t\t\ttaintStr = \" (tainted)\"\n\t\t}\n\n\t\tdeposedStr := \"\"\n\t\tif len(is.Deposed) > 0 {\n\t\t\tdeposedStr = fmt.Sprintf(\" (%d deposed)\", len(is.Deposed))\n\t\t}\n\n\t\tbuf.WriteString(fmt.Sprintf(\"%s:%s%s\\n\", k, taintStr, deposedStr))\n\t\tbuf.WriteString(fmt.Sprintf(\"  ID = %s\\n\", id))\n\t\tbuf.WriteString(fmt.Sprintf(\"  provider = %s\\n\", rs.ProviderConfig.String()))\n\n\t\t// Attributes were a flatmap before, but are not anymore. To preserve\n\t\t// our old output as closely as possible we need to do a conversion\n\t\t// to flatmap. Normally we'd want to do this with schema for\n\t\t// accuracy, but for our purposes here it only needs to be approximate.\n\t\t// This should produce an identical result for most cases, though\n\t\t// in particular will differ in a few cases:\n\t\t//  - The keys used for elements in a set will be different\n\t\t//  - Values for attributes of type cty.DynamicPseudoType will be\n\t\t//    misinterpreted (but these weren't possible in old world anyway)\n\t\tvar attributes map[string]string\n\t\tif obj := is.Current; obj != nil {\n\t\t\tswitch {\n\t\t\tcase obj.AttrsFlat != nil:\n\t\t\t\t// Easy (but increasingly unlikely) case: the state hasn't\n\t\t\t\t// actually been upgraded to the new form yet.\n\t\t\t\tattributes = obj.AttrsFlat\n\t\t\tcase obj.AttrsJSON != nil:\n\t\t\t\tty, err := ctyjson.ImpliedType(obj.AttrsJSON)\n\t\t\t\tif err == nil {\n\t\t\t\t\tval, err := ctyjson.Unmarshal(obj.AttrsJSON, ty)\n\t\t\t\t\tif err == nil {\n\t\t\t\t\t\tattributes = hcl2shim.FlatmapValueFromHCL2(val)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tattrKeys := make([]string, 0, len(attributes))\n\t\tfor ak, val := range attributes {\n\t\t\tif ak == \"id\" {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// don't show empty containers in the output\n\t\t\tif val == \"0\" && (strings.HasSuffix(ak, \".#\") || strings.HasSuffix(ak, \".%\")) {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tattrKeys = append(attrKeys, ak)\n\t\t}\n\n\t\tsort.Strings(attrKeys)\n\n\t\tfor _, ak := range attrKeys {\n\t\t\tav := attributes[ak]\n\t\t\tbuf.WriteString(fmt.Sprintf(\"  %s = %s\\n\", ak, av))\n\t\t}\n\n\t\t// CAUTION: Since deposed keys are now random strings instead of\n\t\t// incrementing integers, this result will not be deterministic\n\t\t// if there is more than one deposed object.\n\t\ti := 1\n\t\tfor _, t := range is.Deposed {\n\t\t\tid := LegacyInstanceObjectID(t)\n\t\t\ttaintStr := \"\"\n\t\t\tif t.Status == ObjectTainted {\n\t\t\t\ttaintStr = \" (tainted)\"\n\t\t\t}\n\t\t\tbuf.WriteString(fmt.Sprintf(\"  Deposed ID %d = %s%s\\n\", i, id, taintStr))\n\t\t\ti++\n\t\t}\n\n\t\tif obj := is.Current; obj != nil && len(obj.Dependencies) > 0 {\n\t\t\tbuf.WriteString(fmt.Sprintf(\"\\n  Dependencies:\\n\"))\n\t\t\tfor _, dep := range obj.Dependencies {\n\t\t\t\tbuf.WriteString(fmt.Sprintf(\"    %s\\n\", dep.String()))\n\t\t\t}\n\t\t}\n\t}\n\n\tif len(m.OutputValues) > 0 {\n\t\tbuf.WriteString(\"\\nOutputs:\\n\\n\")\n\n\t\tks := make([]string, 0, len(m.OutputValues))\n\t\tfor k := range m.OutputValues {\n\t\t\tks = append(ks, k)\n\t\t}\n\t\tsort.Strings(ks)\n\n\t\tfor _, k := range ks {\n\t\t\tv := m.OutputValues[k]\n\t\t\tlv := hcl2shim.ConfigValueFromHCL2(v.Value)\n\t\t\tswitch vTyped := lv.(type) {\n\t\t\tcase string:\n\t\t\t\tbuf.WriteString(fmt.Sprintf(\"%s = %s\\n\", k, vTyped))\n\t\t\tcase []interface{}:\n\t\t\t\tbuf.WriteString(fmt.Sprintf(\"%s = %s\\n\", k, vTyped))\n\t\t\tcase map[string]interface{}:\n\t\t\t\tvar mapKeys []string\n\t\t\t\tfor key := range vTyped {\n\t\t\t\t\tmapKeys = append(mapKeys, key)\n\t\t\t\t}\n\t\t\t\tsort.Strings(mapKeys)\n\n\t\t\t\tvar mapBuf bytes.Buffer\n\t\t\t\tmapBuf.WriteString(\"{\")\n\t\t\t\tfor _, key := range mapKeys {\n\t\t\t\t\tmapBuf.WriteString(fmt.Sprintf(\"%s:%s \", key, vTyped[key]))\n\t\t\t\t}\n\t\t\t\tmapBuf.WriteString(\"}\")\n\n\t\t\t\tbuf.WriteString(fmt.Sprintf(\"%s = %s\\n\", k, mapBuf.String()))\n\t\t\tdefault:\n\t\t\t\tbuf.WriteString(fmt.Sprintf(\"%s = %#v\\n\", k, lv))\n\t\t\t}\n\t\t}\n\t}\n\n\treturn buf.String()\n}\n\n// LegacyInstanceObjectID is a helper for extracting an object id value from\n// an instance object in a way that approximates how we used to do this\n// for the old state types. ID is no longer first-class, so this is preserved\n// only for compatibility with old tests that include the id as part of their\n// expected value.\nfunc LegacyInstanceObjectID(obj *ResourceInstanceObjectSrc) string {\n\tif obj == nil {\n\t\treturn \"<not created>\"\n\t}\n\n\tif obj.AttrsJSON != nil {\n\t\ttype WithID struct {\n\t\t\tID string `json:\"id\"`\n\t\t}\n\t\tvar withID WithID\n\t\terr := json.Unmarshal(obj.AttrsJSON, &withID)\n\t\tif err == nil {\n\t\t\treturn withID.ID\n\t\t}\n\t} else if obj.AttrsFlat != nil {\n\t\tif flatID, exists := obj.AttrsFlat[\"id\"]; exists {\n\t\t\treturn flatID\n\t\t}\n\t}\n\n\t// For resource types created after we removed id as special there may\n\t// not actually be one at all. This is okay because older tests won't\n\t// encounter this, and new tests shouldn't be using ids.\n\treturn \"<none>\"\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/states/statefile/diagnostics.go",
    "content": "package statefile\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\n\t\"github.com/hashicorp/terraform/tfdiags\"\n)\n\nconst invalidFormat = \"Invalid state file format\"\n\n// jsonUnmarshalDiags is a helper that translates errors returned from\n// json.Unmarshal into hopefully-more-helpful diagnostics messages.\nfunc jsonUnmarshalDiags(err error) tfdiags.Diagnostics {\n\tvar diags tfdiags.Diagnostics\n\tif err == nil {\n\t\treturn diags\n\t}\n\n\tswitch tErr := err.(type) {\n\tcase *json.SyntaxError:\n\t\t// We've usually already successfully parsed a source file as JSON at\n\t\t// least once before we'd use jsonUnmarshalDiags with it (to sniff\n\t\t// the version number) so this particular error should not appear much\n\t\t// in practice.\n\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\ttfdiags.Error,\n\t\t\tinvalidFormat,\n\t\t\tfmt.Sprintf(\"The state file could not be parsed as JSON: syntax error at byte offset %d.\", tErr.Offset),\n\t\t))\n\tcase *json.UnmarshalTypeError:\n\t\t// This is likely to be the most common area, describing a\n\t\t// non-conformance between the file and the expected file format\n\t\t// at a semantic level.\n\t\tif tErr.Field != \"\" {\n\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\ttfdiags.Error,\n\t\t\t\tinvalidFormat,\n\t\t\t\tfmt.Sprintf(\"The state file field %q has invalid value %s\", tErr.Field, tErr.Value),\n\t\t\t))\n\t\t\tbreak\n\t\t} else {\n\t\t\t// Without a field name, we can't really say anything helpful.\n\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\ttfdiags.Error,\n\t\t\t\tinvalidFormat,\n\t\t\t\t\"The state file does not conform to the expected JSON data structure.\",\n\t\t\t))\n\t\t}\n\tdefault:\n\t\t// Fallback for all other types of errors. This can happen only for\n\t\t// custom UnmarshalJSON implementations, so should be encountered\n\t\t// only rarely.\n\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\ttfdiags.Error,\n\t\t\tinvalidFormat,\n\t\t\tfmt.Sprintf(\"The state file does not conform to the expected JSON data structure: %s.\", err.Error()),\n\t\t))\n\t}\n\n\treturn diags\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/states/statefile/doc.go",
    "content": "// Package statefile deals with the file format used to serialize states for\n// persistent storage and then deserialize them into memory again later.\npackage statefile\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/states/statefile/file.go",
    "content": "package statefile\n\nimport (\n\tversion \"github.com/hashicorp/go-version\"\n\n\t\"github.com/hashicorp/terraform/states\"\n\ttfversion \"github.com/hashicorp/terraform/version\"\n)\n\n// File is the in-memory representation of a state file. It includes the state\n// itself along with various metadata used to track changing state files for\n// the same configuration over time.\ntype File struct {\n\t// TerraformVersion is the version of Terraform that wrote this state file.\n\tTerraformVersion *version.Version\n\n\t// Serial is incremented on any operation that modifies\n\t// the State file. It is used to detect potentially conflicting\n\t// updates.\n\tSerial uint64\n\n\t// Lineage is set when a new, blank state file is created and then\n\t// never updated. This allows us to determine whether the serials\n\t// of two states can be meaningfully compared.\n\t// Apart from the guarantee that collisions between two lineages\n\t// are very unlikely, this value is opaque and external callers\n\t// should only compare lineage strings byte-for-byte for equality.\n\tLineage string\n\n\t// State is the actual state represented by this file.\n\tState *states.State\n}\n\nfunc New(state *states.State, lineage string, serial uint64) *File {\n\t// To make life easier on callers, we'll accept a nil state here and just\n\t// allocate an empty one, which is required for this file to be successfully\n\t// written out.\n\tif state == nil {\n\t\tstate = states.NewState()\n\t}\n\n\treturn &File{\n\t\tTerraformVersion: tfversion.SemVer,\n\t\tState:            state,\n\t\tLineage:          lineage,\n\t\tSerial:           serial,\n\t}\n}\n\n// DeepCopy is a convenience method to create a new File object whose state\n// is a deep copy of the receiver's, as implemented by states.State.DeepCopy.\nfunc (f *File) DeepCopy() *File {\n\tif f == nil {\n\t\treturn nil\n\t}\n\treturn &File{\n\t\tTerraformVersion: f.TerraformVersion,\n\t\tSerial:           f.Serial,\n\t\tLineage:          f.Lineage,\n\t\tState:            f.State.DeepCopy(),\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/states/statefile/marshal_equal.go",
    "content": "package statefile\n\nimport (\n\t\"bytes\"\n\n\t\"github.com/hashicorp/terraform/states\"\n)\n\n// StatesMarshalEqual returns true if and only if the two given states have\n// an identical (byte-for-byte) statefile representation.\n//\n// This function compares only the portions of the state that are persisted\n// in state files, so for example it will not return false if the only\n// differences between the two states are local values or descendent module\n// outputs.\nfunc StatesMarshalEqual(a, b *states.State) bool {\n\tvar aBuf bytes.Buffer\n\tvar bBuf bytes.Buffer\n\n\t// nil states are not valid states, and so they can never martial equal.\n\tif a == nil || b == nil {\n\t\treturn false\n\t}\n\n\t// We write here some temporary files that have no header information\n\t// populated, thus ensuring that we're only comparing the state itself\n\t// and not any metadata.\n\terr := Write(&File{State: a}, &aBuf)\n\tif err != nil {\n\t\t// Should never happen, because we're writing to an in-memory buffer\n\t\tpanic(err)\n\t}\n\terr = Write(&File{State: b}, &bBuf)\n\tif err != nil {\n\t\t// Should never happen, because we're writing to an in-memory buffer\n\t\tpanic(err)\n\t}\n\n\treturn bytes.Equal(aBuf.Bytes(), bBuf.Bytes())\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/states/statefile/read.go",
    "content": "package statefile\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"os\"\n\n\tversion \"github.com/hashicorp/go-version\"\n\n\t\"github.com/hashicorp/terraform/tfdiags\"\n\ttfversion \"github.com/hashicorp/terraform/version\"\n)\n\n// ErrNoState is returned by ReadState when the state file is empty.\nvar ErrNoState = errors.New(\"no state\")\n\n// Read reads a state from the given reader.\n//\n// Legacy state format versions 1 through 3 are supported, but the result will\n// contain object attributes in the deprecated \"flatmap\" format and so must\n// be upgraded by the caller before use.\n//\n// If the state file is empty, the special error value ErrNoState is returned.\n// Otherwise, the returned error might be a wrapper around tfdiags.Diagnostics\n// potentially describing multiple errors.\nfunc Read(r io.Reader) (*File, error) {\n\t// Some callers provide us a \"typed nil\" *os.File here, which would\n\t// cause us to panic below if we tried to use it.\n\tif f, ok := r.(*os.File); ok && f == nil {\n\t\treturn nil, ErrNoState\n\t}\n\n\tvar diags tfdiags.Diagnostics\n\n\t// We actually just buffer the whole thing in memory, because states are\n\t// generally not huge and we need to do be able to sniff for a version\n\t// number before full parsing.\n\tsrc, err := ioutil.ReadAll(r)\n\tif err != nil {\n\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\ttfdiags.Error,\n\t\t\t\"Failed to read state file\",\n\t\t\tfmt.Sprintf(\"The state file could not be read: %s\", err),\n\t\t))\n\t\treturn nil, diags.Err()\n\t}\n\n\tif len(src) == 0 {\n\t\treturn nil, ErrNoState\n\t}\n\n\tstate, diags := readState(src)\n\tif diags.HasErrors() {\n\t\treturn nil, diags.Err()\n\t}\n\n\tif state == nil {\n\t\t// Should never happen\n\t\tpanic(\"readState returned nil state with no errors\")\n\t}\n\n\tif state.TerraformVersion != nil && state.TerraformVersion.GreaterThan(tfversion.SemVer) {\n\t\treturn state, fmt.Errorf(\n\t\t\t\"state snapshot was created by Terraform v%s, which is newer than current v%s; upgrade to Terraform v%s or greater to work with this state\",\n\t\t\tstate.TerraformVersion,\n\t\t\ttfversion.SemVer,\n\t\t\tstate.TerraformVersion,\n\t\t)\n\t}\n\n\treturn state, diags.Err()\n}\n\nfunc readState(src []byte) (*File, tfdiags.Diagnostics) {\n\tvar diags tfdiags.Diagnostics\n\n\tif looksLikeVersion0(src) {\n\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\ttfdiags.Error,\n\t\t\tunsupportedFormat,\n\t\t\t\"The state is stored in a legacy binary format that is not supported since Terraform v0.7. To continue, first upgrade the state using Terraform 0.6.16 or earlier.\",\n\t\t))\n\t\treturn nil, diags\n\t}\n\n\tversion, versionDiags := sniffJSONStateVersion(src)\n\tdiags = diags.Append(versionDiags)\n\tif versionDiags.HasErrors() {\n\t\treturn nil, diags\n\t}\n\n\tswitch version {\n\tcase 0:\n\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\ttfdiags.Error,\n\t\t\tunsupportedFormat,\n\t\t\t\"The state file uses JSON syntax but has a version number of zero. There was never a JSON-based state format zero, so this state file is invalid and cannot be processed.\",\n\t\t))\n\t\treturn nil, diags\n\tcase 1:\n\t\treturn readStateV1(src)\n\tcase 2:\n\t\treturn readStateV2(src)\n\tcase 3:\n\t\treturn readStateV3(src)\n\tcase 4:\n\t\treturn readStateV4(src)\n\tdefault:\n\t\tthisVersion := tfversion.SemVer.String()\n\t\tcreatingVersion := sniffJSONStateTerraformVersion(src)\n\t\tswitch {\n\t\tcase creatingVersion != \"\":\n\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\ttfdiags.Error,\n\t\t\t\tunsupportedFormat,\n\t\t\t\tfmt.Sprintf(\"The state file uses format version %d, which is not supported by Terraform %s. This state file was created by Terraform %s.\", version, thisVersion, creatingVersion),\n\t\t\t))\n\t\tdefault:\n\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\ttfdiags.Error,\n\t\t\t\tunsupportedFormat,\n\t\t\t\tfmt.Sprintf(\"The state file uses format version %d, which is not supported by Terraform %s. This state file may have been created by a newer version of Terraform.\", version, thisVersion),\n\t\t\t))\n\t\t}\n\t\treturn nil, diags\n\t}\n}\n\nfunc sniffJSONStateVersion(src []byte) (uint64, tfdiags.Diagnostics) {\n\tvar diags tfdiags.Diagnostics\n\n\ttype VersionSniff struct {\n\t\tVersion *uint64 `json:\"version\"`\n\t}\n\tvar sniff VersionSniff\n\terr := json.Unmarshal(src, &sniff)\n\tif err != nil {\n\t\tswitch tErr := err.(type) {\n\t\tcase *json.SyntaxError:\n\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\ttfdiags.Error,\n\t\t\t\tunsupportedFormat,\n\t\t\t\tfmt.Sprintf(\"The state file could not be parsed as JSON: syntax error at byte offset %d.\", tErr.Offset),\n\t\t\t))\n\t\tcase *json.UnmarshalTypeError:\n\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\ttfdiags.Error,\n\t\t\t\tunsupportedFormat,\n\t\t\t\tfmt.Sprintf(\"The version in the state file is %s. A positive whole number is required.\", tErr.Value),\n\t\t\t))\n\t\tdefault:\n\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\ttfdiags.Error,\n\t\t\t\tunsupportedFormat,\n\t\t\t\t\"The state file could not be parsed as JSON.\",\n\t\t\t))\n\t\t}\n\t}\n\n\tif sniff.Version == nil {\n\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\ttfdiags.Error,\n\t\t\tunsupportedFormat,\n\t\t\t\"The state file does not have a \\\"version\\\" attribute, which is required to identify the format version.\",\n\t\t))\n\t\treturn 0, diags\n\t}\n\n\treturn *sniff.Version, diags\n}\n\n// sniffJSONStateTerraformVersion attempts to sniff the Terraform version\n// specification from the given state file source code. The result is either\n// a version string or an empty string if no version number could be extracted.\n//\n// This is a best-effort function intended to produce nicer error messages. It\n// should not be used for any real processing.\nfunc sniffJSONStateTerraformVersion(src []byte) string {\n\ttype VersionSniff struct {\n\t\tVersion string `json:\"terraform_version\"`\n\t}\n\tvar sniff VersionSniff\n\n\terr := json.Unmarshal(src, &sniff)\n\tif err != nil {\n\t\treturn \"\"\n\t}\n\n\t// Attempt to parse the string as a version so we won't report garbage\n\t// as a version number.\n\t_, err = version.NewVersion(sniff.Version)\n\tif err != nil {\n\t\treturn \"\"\n\t}\n\n\treturn sniff.Version\n}\n\n// unsupportedFormat is a diagnostic summary message for when the state file\n// seems to not be a state file at all, or is not a supported version.\n//\n// Use invalidFormat instead for the subtly-different case of \"this looks like\n// it's intended to be a state file but it's not structured correctly\".\nconst unsupportedFormat = \"Unsupported state file format\"\n\nconst upgradeFailed = \"State format upgrade failed\"\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/states/statefile/version0.go",
    "content": "package statefile\n\n// looksLikeVersion0 sniffs for the signature indicating a version 0 state\n// file.\n//\n// Version 0 was the number retroactively assigned to Terraform's initial\n// (unversioned) binary state file format, which was later superseded by the\n// version 1 format in JSON.\n//\n// Version 0 is no longer supported, so this is used only to detect it and\n// return a nice error to the user.\nfunc looksLikeVersion0(src []byte) bool {\n\t// Version 0 files begin with the magic prefix \"tfstate\".\n\tconst magic = \"tfstate\"\n\tif len(src) < len(magic) {\n\t\t// Not even long enough to have the magic prefix\n\t\treturn false\n\t}\n\tif string(src[0:len(magic)]) == magic {\n\t\treturn true\n\t}\n\treturn false\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/states/statefile/version1.go",
    "content": "package statefile\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\n\t\"github.com/hashicorp/terraform/tfdiags\"\n)\n\nfunc readStateV1(src []byte) (*File, tfdiags.Diagnostics) {\n\tvar diags tfdiags.Diagnostics\n\tsV1 := &stateV1{}\n\terr := json.Unmarshal(src, sV1)\n\tif err != nil {\n\t\tdiags = diags.Append(jsonUnmarshalDiags(err))\n\t\treturn nil, diags\n\t}\n\n\tfile, prepDiags := prepareStateV1(sV1)\n\tdiags = diags.Append(prepDiags)\n\treturn file, diags\n}\n\nfunc prepareStateV1(sV1 *stateV1) (*File, tfdiags.Diagnostics) {\n\tvar diags tfdiags.Diagnostics\n\tsV2, err := upgradeStateV1ToV2(sV1)\n\tif err != nil {\n\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\ttfdiags.Error,\n\t\t\tupgradeFailed,\n\t\t\tfmt.Sprintf(\"Error upgrading state file format from version 1 to version 2: %s.\", err),\n\t\t))\n\t\treturn nil, diags\n\t}\n\n\tfile, prepDiags := prepareStateV2(sV2)\n\tdiags = diags.Append(prepDiags)\n\treturn file, diags\n}\n\n// stateV1 is a representation of the legacy JSON state format version 1.\n//\n// It is only used to read version 1 JSON files prior to upgrading them to\n// the current format.\ntype stateV1 struct {\n\t// Version is the protocol version. \"1\" for a StateV1.\n\tVersion int `json:\"version\"`\n\n\t// Serial is incremented on any operation that modifies\n\t// the State file. It is used to detect potentially conflicting\n\t// updates.\n\tSerial int64 `json:\"serial\"`\n\n\t// Remote is used to track the metadata required to\n\t// pull and push state files from a remote storage endpoint.\n\tRemote *remoteStateV1 `json:\"remote,omitempty\"`\n\n\t// Modules contains all the modules in a breadth-first order\n\tModules []*moduleStateV1 `json:\"modules\"`\n}\n\ntype remoteStateV1 struct {\n\t// Type controls the client we use for the remote state\n\tType string `json:\"type\"`\n\n\t// Config is used to store arbitrary configuration that\n\t// is type specific\n\tConfig map[string]string `json:\"config\"`\n}\n\ntype moduleStateV1 struct {\n\t// Path is the import path from the root module. Modules imports are\n\t// always disjoint, so the path represents amodule tree\n\tPath []string `json:\"path\"`\n\n\t// Outputs declared by the module and maintained for each module\n\t// even though only the root module technically needs to be kept.\n\t// This allows operators to inspect values at the boundaries.\n\tOutputs map[string]string `json:\"outputs\"`\n\n\t// Resources is a mapping of the logically named resource to\n\t// the state of the resource. Each resource may actually have\n\t// N instances underneath, although a user only needs to think\n\t// about the 1:1 case.\n\tResources map[string]*resourceStateV1 `json:\"resources\"`\n\n\t// Dependencies are a list of things that this module relies on\n\t// existing to remain intact. For example: an module may depend\n\t// on a VPC ID given by an aws_vpc resource.\n\t//\n\t// Terraform uses this information to build valid destruction\n\t// orders and to warn the user if they're destroying a module that\n\t// another resource depends on.\n\t//\n\t// Things can be put into this list that may not be managed by\n\t// Terraform. If Terraform doesn't find a matching ID in the\n\t// overall state, then it assumes it isn't managed and doesn't\n\t// worry about it.\n\tDependencies []string `json:\"depends_on,omitempty\"`\n}\n\ntype resourceStateV1 struct {\n\t// This is filled in and managed by Terraform, and is the resource\n\t// type itself such as \"mycloud_instance\". If a resource provider sets\n\t// this value, it won't be persisted.\n\tType string `json:\"type\"`\n\n\t// Dependencies are a list of things that this resource relies on\n\t// existing to remain intact. For example: an AWS instance might\n\t// depend on a subnet (which itself might depend on a VPC, and so\n\t// on).\n\t//\n\t// Terraform uses this information to build valid destruction\n\t// orders and to warn the user if they're destroying a resource that\n\t// another resource depends on.\n\t//\n\t// Things can be put into this list that may not be managed by\n\t// Terraform. If Terraform doesn't find a matching ID in the\n\t// overall state, then it assumes it isn't managed and doesn't\n\t// worry about it.\n\tDependencies []string `json:\"depends_on,omitempty\"`\n\n\t// Primary is the current active instance for this resource.\n\t// It can be replaced but only after a successful creation.\n\t// This is the instances on which providers will act.\n\tPrimary *instanceStateV1 `json:\"primary\"`\n\n\t// Tainted is used to track any underlying instances that\n\t// have been created but are in a bad or unknown state and\n\t// need to be cleaned up subsequently.  In the\n\t// standard case, there is only at most a single instance.\n\t// However, in pathological cases, it is possible for the number\n\t// of instances to accumulate.\n\tTainted []*instanceStateV1 `json:\"tainted,omitempty\"`\n\n\t// Deposed is used in the mechanics of CreateBeforeDestroy: the existing\n\t// Primary is Deposed to get it out of the way for the replacement Primary to\n\t// be created by Apply. If the replacement Primary creates successfully, the\n\t// Deposed instance is cleaned up. If there were problems creating the\n\t// replacement, the instance remains in the Deposed list so it can be\n\t// destroyed in a future run. Functionally, Deposed instances are very\n\t// similar to Tainted instances in that Terraform is only tracking them in\n\t// order to remember to destroy them.\n\tDeposed []*instanceStateV1 `json:\"deposed,omitempty\"`\n\n\t// Provider is used when a resource is connected to a provider with an alias.\n\t// If this string is empty, the resource is connected to the default provider,\n\t// e.g. \"aws_instance\" goes with the \"aws\" provider.\n\t// If the resource block contained a \"provider\" key, that value will be set here.\n\tProvider string `json:\"provider,omitempty\"`\n}\n\ntype instanceStateV1 struct {\n\t// A unique ID for this resource. This is opaque to Terraform\n\t// and is only meant as a lookup mechanism for the providers.\n\tID string `json:\"id\"`\n\n\t// Attributes are basic information about the resource. Any keys here\n\t// are accessible in variable format within Terraform configurations:\n\t// ${resourcetype.name.attribute}.\n\tAttributes map[string]string `json:\"attributes,omitempty\"`\n\n\t// Meta is a simple K/V map that is persisted to the State but otherwise\n\t// ignored by Terraform core. It's meant to be used for accounting by\n\t// external client code.\n\tMeta map[string]string `json:\"meta,omitempty\"`\n}\n\ntype ephemeralStateV1 struct {\n\t// ConnInfo is used for the providers to export information which is\n\t// used to connect to the resource for provisioning. For example,\n\t// this could contain SSH or WinRM credentials.\n\tConnInfo map[string]string `json:\"-\"`\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/states/statefile/version1_upgrade.go",
    "content": "package statefile\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\n\t\"github.com/mitchellh/copystructure\"\n)\n\n// upgradeStateV1ToV2 is used to upgrade a V1 state representation\n// into a V2 state representation\nfunc upgradeStateV1ToV2(old *stateV1) (*stateV2, error) {\n\tlog.Printf(\"[TRACE] statefile.Read: upgrading format from v1 to v2\")\n\tif old == nil {\n\t\treturn nil, nil\n\t}\n\n\tremote, err := old.Remote.upgradeToV2()\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"Error upgrading State V1: %v\", err)\n\t}\n\n\tmodules := make([]*moduleStateV2, len(old.Modules))\n\tfor i, module := range old.Modules {\n\t\tupgraded, err := module.upgradeToV2()\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"Error upgrading State V1: %v\", err)\n\t\t}\n\t\tmodules[i] = upgraded\n\t}\n\tif len(modules) == 0 {\n\t\tmodules = nil\n\t}\n\n\tnewState := &stateV2{\n\t\tVersion: 2,\n\t\tSerial:  old.Serial,\n\t\tRemote:  remote,\n\t\tModules: modules,\n\t}\n\n\treturn newState, nil\n}\n\nfunc (old *remoteStateV1) upgradeToV2() (*remoteStateV2, error) {\n\tif old == nil {\n\t\treturn nil, nil\n\t}\n\n\tconfig, err := copystructure.Copy(old.Config)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"Error upgrading RemoteState V1: %v\", err)\n\t}\n\n\treturn &remoteStateV2{\n\t\tType:   old.Type,\n\t\tConfig: config.(map[string]string),\n\t}, nil\n}\n\nfunc (old *moduleStateV1) upgradeToV2() (*moduleStateV2, error) {\n\tif old == nil {\n\t\treturn nil, nil\n\t}\n\n\tpathRaw, err := copystructure.Copy(old.Path)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"Error upgrading ModuleState V1: %v\", err)\n\t}\n\tpath, ok := pathRaw.([]string)\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"Error upgrading ModuleState V1: path is not a list of strings\")\n\t}\n\tif len(path) == 0 {\n\t\t// We found some V1 states with a nil path. Assume root.\n\t\tpath = []string{\"root\"}\n\t}\n\n\t// Outputs needs upgrading to use the new structure\n\toutputs := make(map[string]*outputStateV2)\n\tfor key, output := range old.Outputs {\n\t\toutputs[key] = &outputStateV2{\n\t\t\tType:      \"string\",\n\t\t\tValue:     output,\n\t\t\tSensitive: false,\n\t\t}\n\t}\n\n\tresources := make(map[string]*resourceStateV2)\n\tfor key, oldResource := range old.Resources {\n\t\tupgraded, err := oldResource.upgradeToV2()\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"Error upgrading ModuleState V1: %v\", err)\n\t\t}\n\t\tresources[key] = upgraded\n\t}\n\n\tdependencies, err := copystructure.Copy(old.Dependencies)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"Error upgrading ModuleState V1: %v\", err)\n\t}\n\n\treturn &moduleStateV2{\n\t\tPath:         path,\n\t\tOutputs:      outputs,\n\t\tResources:    resources,\n\t\tDependencies: dependencies.([]string),\n\t}, nil\n}\n\nfunc (old *resourceStateV1) upgradeToV2() (*resourceStateV2, error) {\n\tif old == nil {\n\t\treturn nil, nil\n\t}\n\n\tdependencies, err := copystructure.Copy(old.Dependencies)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"Error upgrading ResourceState V1: %v\", err)\n\t}\n\n\tprimary, err := old.Primary.upgradeToV2()\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"Error upgrading ResourceState V1: %v\", err)\n\t}\n\n\tdeposed := make([]*instanceStateV2, len(old.Deposed))\n\tfor i, v := range old.Deposed {\n\t\tupgraded, err := v.upgradeToV2()\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"Error upgrading ResourceState V1: %v\", err)\n\t\t}\n\t\tdeposed[i] = upgraded\n\t}\n\tif len(deposed) == 0 {\n\t\tdeposed = nil\n\t}\n\n\treturn &resourceStateV2{\n\t\tType:         old.Type,\n\t\tDependencies: dependencies.([]string),\n\t\tPrimary:      primary,\n\t\tDeposed:      deposed,\n\t\tProvider:     old.Provider,\n\t}, nil\n}\n\nfunc (old *instanceStateV1) upgradeToV2() (*instanceStateV2, error) {\n\tif old == nil {\n\t\treturn nil, nil\n\t}\n\n\tattributes, err := copystructure.Copy(old.Attributes)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"Error upgrading InstanceState V1: %v\", err)\n\t}\n\n\tmeta, err := copystructure.Copy(old.Meta)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"Error upgrading InstanceState V1: %v\", err)\n\t}\n\n\tnewMeta := make(map[string]interface{})\n\tfor k, v := range meta.(map[string]string) {\n\t\tnewMeta[k] = v\n\t}\n\n\treturn &instanceStateV2{\n\t\tID:         old.ID,\n\t\tAttributes: attributes.(map[string]string),\n\t\tMeta:       newMeta,\n\t}, nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/states/statefile/version2.go",
    "content": "package statefile\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"sync\"\n\n\t\"github.com/hashicorp/terraform/tfdiags\"\n)\n\nfunc readStateV2(src []byte) (*File, tfdiags.Diagnostics) {\n\tvar diags tfdiags.Diagnostics\n\tsV2 := &stateV2{}\n\terr := json.Unmarshal(src, sV2)\n\tif err != nil {\n\t\tdiags = diags.Append(jsonUnmarshalDiags(err))\n\t\treturn nil, diags\n\t}\n\n\tfile, prepDiags := prepareStateV2(sV2)\n\tdiags = diags.Append(prepDiags)\n\treturn file, diags\n}\n\nfunc prepareStateV2(sV2 *stateV2) (*File, tfdiags.Diagnostics) {\n\tvar diags tfdiags.Diagnostics\n\tsV3, err := upgradeStateV2ToV3(sV2)\n\tif err != nil {\n\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\ttfdiags.Error,\n\t\t\tupgradeFailed,\n\t\t\tfmt.Sprintf(\"Error upgrading state file format from version 2 to version 3: %s.\", err),\n\t\t))\n\t\treturn nil, diags\n\t}\n\n\tfile, prepDiags := prepareStateV3(sV3)\n\tdiags = diags.Append(prepDiags)\n\treturn file, diags\n}\n\n// stateV2 is a representation of the legacy JSON state format version 2.\n//\n// It is only used to read version 2 JSON files prior to upgrading them to\n// the current format.\ntype stateV2 struct {\n\t// Version is the state file protocol version.\n\tVersion int `json:\"version\"`\n\n\t// TFVersion is the version of Terraform that wrote this state.\n\tTFVersion string `json:\"terraform_version,omitempty\"`\n\n\t// Serial is incremented on any operation that modifies\n\t// the State file. It is used to detect potentially conflicting\n\t// updates.\n\tSerial int64 `json:\"serial\"`\n\n\t// Lineage is set when a new, blank state is created and then\n\t// never updated. This allows us to determine whether the serials\n\t// of two states can be meaningfully compared.\n\t// Apart from the guarantee that collisions between two lineages\n\t// are very unlikely, this value is opaque and external callers\n\t// should only compare lineage strings byte-for-byte for equality.\n\tLineage string `json:\"lineage\"`\n\n\t// Remote is used to track the metadata required to\n\t// pull and push state files from a remote storage endpoint.\n\tRemote *remoteStateV2 `json:\"remote,omitempty\"`\n\n\t// Backend tracks the configuration for the backend in use with\n\t// this state. This is used to track any changes in the backend\n\t// configuration.\n\tBackend *backendStateV2 `json:\"backend,omitempty\"`\n\n\t// Modules contains all the modules in a breadth-first order\n\tModules []*moduleStateV2 `json:\"modules\"`\n}\n\ntype remoteStateV2 struct {\n\t// Type controls the client we use for the remote state\n\tType string `json:\"type\"`\n\n\t// Config is used to store arbitrary configuration that\n\t// is type specific\n\tConfig map[string]string `json:\"config\"`\n}\n\ntype outputStateV2 struct {\n\t// Sensitive describes whether the output is considered sensitive,\n\t// which may lead to masking the value on screen in some cases.\n\tSensitive bool `json:\"sensitive\"`\n\t// Type describes the structure of Value. Valid values are \"string\",\n\t// \"map\" and \"list\"\n\tType string `json:\"type\"`\n\t// Value contains the value of the output, in the structure described\n\t// by the Type field.\n\tValue interface{} `json:\"value\"`\n\n\tmu sync.Mutex\n}\n\ntype moduleStateV2 struct {\n\t// Path is the import path from the root module. Modules imports are\n\t// always disjoint, so the path represents amodule tree\n\tPath []string `json:\"path\"`\n\n\t// Locals are kept only transiently in-memory, because we can always\n\t// re-compute them.\n\tLocals map[string]interface{} `json:\"-\"`\n\n\t// Outputs declared by the module and maintained for each module\n\t// even though only the root module technically needs to be kept.\n\t// This allows operators to inspect values at the boundaries.\n\tOutputs map[string]*outputStateV2 `json:\"outputs\"`\n\n\t// Resources is a mapping of the logically named resource to\n\t// the state of the resource. Each resource may actually have\n\t// N instances underneath, although a user only needs to think\n\t// about the 1:1 case.\n\tResources map[string]*resourceStateV2 `json:\"resources\"`\n\n\t// Dependencies are a list of things that this module relies on\n\t// existing to remain intact. For example: an module may depend\n\t// on a VPC ID given by an aws_vpc resource.\n\t//\n\t// Terraform uses this information to build valid destruction\n\t// orders and to warn the user if they're destroying a module that\n\t// another resource depends on.\n\t//\n\t// Things can be put into this list that may not be managed by\n\t// Terraform. If Terraform doesn't find a matching ID in the\n\t// overall state, then it assumes it isn't managed and doesn't\n\t// worry about it.\n\tDependencies []string `json:\"depends_on\"`\n}\n\ntype resourceStateV2 struct {\n\t// This is filled in and managed by Terraform, and is the resource\n\t// type itself such as \"mycloud_instance\". If a resource provider sets\n\t// this value, it won't be persisted.\n\tType string `json:\"type\"`\n\n\t// Dependencies are a list of things that this resource relies on\n\t// existing to remain intact. For example: an AWS instance might\n\t// depend on a subnet (which itself might depend on a VPC, and so\n\t// on).\n\t//\n\t// Terraform uses this information to build valid destruction\n\t// orders and to warn the user if they're destroying a resource that\n\t// another resource depends on.\n\t//\n\t// Things can be put into this list that may not be managed by\n\t// Terraform. If Terraform doesn't find a matching ID in the\n\t// overall state, then it assumes it isn't managed and doesn't\n\t// worry about it.\n\tDependencies []string `json:\"depends_on\"`\n\n\t// Primary is the current active instance for this resource.\n\t// It can be replaced but only after a successful creation.\n\t// This is the instances on which providers will act.\n\tPrimary *instanceStateV2 `json:\"primary\"`\n\n\t// Deposed is used in the mechanics of CreateBeforeDestroy: the existing\n\t// Primary is Deposed to get it out of the way for the replacement Primary to\n\t// be created by Apply. If the replacement Primary creates successfully, the\n\t// Deposed instance is cleaned up.\n\t//\n\t// If there were problems creating the replacement Primary, the Deposed\n\t// instance and the (now tainted) replacement Primary will be swapped so the\n\t// tainted replacement will be cleaned up instead.\n\t//\n\t// An instance will remain in the Deposed list until it is successfully\n\t// destroyed and purged.\n\tDeposed []*instanceStateV2 `json:\"deposed\"`\n\n\t// Provider is used when a resource is connected to a provider with an alias.\n\t// If this string is empty, the resource is connected to the default provider,\n\t// e.g. \"aws_instance\" goes with the \"aws\" provider.\n\t// If the resource block contained a \"provider\" key, that value will be set here.\n\tProvider string `json:\"provider\"`\n\n\tmu sync.Mutex\n}\n\ntype instanceStateV2 struct {\n\t// A unique ID for this resource. This is opaque to Terraform\n\t// and is only meant as a lookup mechanism for the providers.\n\tID string `json:\"id\"`\n\n\t// Attributes are basic information about the resource. Any keys here\n\t// are accessible in variable format within Terraform configurations:\n\t// ${resourcetype.name.attribute}.\n\tAttributes map[string]string `json:\"attributes\"`\n\n\t// Meta is a simple K/V map that is persisted to the State but otherwise\n\t// ignored by Terraform core. It's meant to be used for accounting by\n\t// external client code. The value here must only contain Go primitives\n\t// and collections.\n\tMeta map[string]interface{} `json:\"meta\"`\n\n\t// Tainted is used to mark a resource for recreation.\n\tTainted bool `json:\"tainted\"`\n}\n\ntype backendStateV2 struct {\n\tType      string          `json:\"type\"`   // Backend type\n\tConfigRaw json.RawMessage `json:\"config\"` // Backend raw config\n\tHash      int             `json:\"hash\"`   // Hash of portion of configuration from config files\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/states/statefile/version2_upgrade.go",
    "content": "package statefile\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"regexp\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/mitchellh/copystructure\"\n)\n\nfunc upgradeStateV2ToV3(old *stateV2) (*stateV3, error) {\n\tif old == nil {\n\t\treturn (*stateV3)(nil), nil\n\t}\n\n\tvar new *stateV3\n\t{\n\t\tcopy, err := copystructure.Config{Lock: true}.Copy(old)\n\t\tif err != nil {\n\t\t\tpanic(err)\n\t\t}\n\t\tnewWrongType := copy.(*stateV2)\n\t\tnewRightType := (stateV3)(*newWrongType)\n\t\tnew = &newRightType\n\t}\n\n\t// Set the new version number\n\tnew.Version = 3\n\n\t// Change the counts for things which look like maps to use the %\n\t// syntax. Remove counts for empty collections - they will be added\n\t// back in later.\n\tfor _, module := range new.Modules {\n\t\tfor _, resource := range module.Resources {\n\t\t\t// Upgrade Primary\n\t\t\tif resource.Primary != nil {\n\t\t\t\tupgradeAttributesV2ToV3(resource.Primary)\n\t\t\t}\n\n\t\t\t// Upgrade Deposed\n\t\t\tfor _, deposed := range resource.Deposed {\n\t\t\t\tupgradeAttributesV2ToV3(deposed)\n\t\t\t}\n\t\t}\n\t}\n\n\treturn new, nil\n}\n\nfunc upgradeAttributesV2ToV3(instanceState *instanceStateV2) error {\n\tcollectionKeyRegexp := regexp.MustCompile(`^(.*\\.)#$`)\n\tcollectionSubkeyRegexp := regexp.MustCompile(`^([^\\.]+)\\..*`)\n\n\t// Identify the key prefix of anything which is a collection\n\tvar collectionKeyPrefixes []string\n\tfor key := range instanceState.Attributes {\n\t\tif submatches := collectionKeyRegexp.FindAllStringSubmatch(key, -1); len(submatches) > 0 {\n\t\t\tcollectionKeyPrefixes = append(collectionKeyPrefixes, submatches[0][1])\n\t\t}\n\t}\n\tsort.Strings(collectionKeyPrefixes)\n\n\tlog.Printf(\"[STATE UPGRADE] Detected the following collections in state: %v\", collectionKeyPrefixes)\n\n\t// This could be rolled into fewer loops, but it is somewhat clearer this way, and will not\n\t// run very often.\n\tfor _, prefix := range collectionKeyPrefixes {\n\t\t// First get the actual keys that belong to this prefix\n\t\tvar potentialKeysMatching []string\n\t\tfor key := range instanceState.Attributes {\n\t\t\tif strings.HasPrefix(key, prefix) {\n\t\t\t\tpotentialKeysMatching = append(potentialKeysMatching, strings.TrimPrefix(key, prefix))\n\t\t\t}\n\t\t}\n\t\tsort.Strings(potentialKeysMatching)\n\n\t\tvar actualKeysMatching []string\n\t\tfor _, key := range potentialKeysMatching {\n\t\t\tif submatches := collectionSubkeyRegexp.FindAllStringSubmatch(key, -1); len(submatches) > 0 {\n\t\t\t\tactualKeysMatching = append(actualKeysMatching, submatches[0][1])\n\t\t\t} else {\n\t\t\t\tif key != \"#\" {\n\t\t\t\t\tactualKeysMatching = append(actualKeysMatching, key)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tactualKeysMatching = uniqueSortedStrings(actualKeysMatching)\n\n\t\t// Now inspect the keys in order to determine whether this is most likely to be\n\t\t// a map, list or set. There is room for error here, so we log in each case. If\n\t\t// there is no method of telling, we remove the key from the InstanceState in\n\t\t// order that it will be recreated. Again, this could be rolled into fewer loops\n\t\t// but we prefer clarity.\n\n\t\toldCountKey := fmt.Sprintf(\"%s#\", prefix)\n\n\t\t// First, detect \"obvious\" maps - which have non-numeric keys (mostly).\n\t\thasNonNumericKeys := false\n\t\tfor _, key := range actualKeysMatching {\n\t\t\tif _, err := strconv.Atoi(key); err != nil {\n\t\t\t\thasNonNumericKeys = true\n\t\t\t}\n\t\t}\n\t\tif hasNonNumericKeys {\n\t\t\tnewCountKey := fmt.Sprintf(\"%s%%\", prefix)\n\n\t\t\tinstanceState.Attributes[newCountKey] = instanceState.Attributes[oldCountKey]\n\t\t\tdelete(instanceState.Attributes, oldCountKey)\n\t\t\tlog.Printf(\"[STATE UPGRADE] Detected %s as a map. Replaced count = %s\",\n\t\t\t\tstrings.TrimSuffix(prefix, \".\"), instanceState.Attributes[newCountKey])\n\t\t}\n\n\t\t// Now detect empty collections and remove them from state.\n\t\tif len(actualKeysMatching) == 0 {\n\t\t\tdelete(instanceState.Attributes, oldCountKey)\n\t\t\tlog.Printf(\"[STATE UPGRADE] Detected %s as an empty collection. Removed from state.\",\n\t\t\t\tstrings.TrimSuffix(prefix, \".\"))\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// uniqueSortedStrings removes duplicates from a slice of strings and returns\n// a sorted slice of the unique strings.\nfunc uniqueSortedStrings(input []string) []string {\n\tuniquemap := make(map[string]struct{})\n\tfor _, str := range input {\n\t\tuniquemap[str] = struct{}{}\n\t}\n\n\toutput := make([]string, len(uniquemap))\n\n\ti := 0\n\tfor key := range uniquemap {\n\t\toutput[i] = key\n\t\ti = i + 1\n\t}\n\n\tsort.Strings(output)\n\treturn output\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/states/statefile/version3.go",
    "content": "package statefile\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\n\t\"github.com/hashicorp/terraform/tfdiags\"\n)\n\nfunc readStateV3(src []byte) (*File, tfdiags.Diagnostics) {\n\tvar diags tfdiags.Diagnostics\n\tsV3 := &stateV3{}\n\terr := json.Unmarshal(src, sV3)\n\tif err != nil {\n\t\tdiags = diags.Append(jsonUnmarshalDiags(err))\n\t\treturn nil, diags\n\t}\n\n\tfile, prepDiags := prepareStateV3(sV3)\n\tdiags = diags.Append(prepDiags)\n\treturn file, diags\n}\n\nfunc prepareStateV3(sV3 *stateV3) (*File, tfdiags.Diagnostics) {\n\tvar diags tfdiags.Diagnostics\n\tsV4, err := upgradeStateV3ToV4(sV3)\n\tif err != nil {\n\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\ttfdiags.Error,\n\t\t\tupgradeFailed,\n\t\t\tfmt.Sprintf(\"Error upgrading state file format from version 3 to version 4: %s.\", err),\n\t\t))\n\t\treturn nil, diags\n\t}\n\n\tfile, prepDiags := prepareStateV4(sV4)\n\tdiags = diags.Append(prepDiags)\n\treturn file, diags\n}\n\n// stateV2 is a representation of the legacy JSON state format version 3.\n//\n// It is only used to read version 3 JSON files prior to upgrading them to\n// the current format.\n//\n// The differences between version 2 and version 3 are only in the data and\n// not in the structure, so stateV3 actually shares the same structs as\n// stateV2. Type stateV3 represents that the data within is formatted as\n// expected by the V3 format, rather than the V2 format.\ntype stateV3 stateV2\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/states/statefile/version3_upgrade.go",
    "content": "package statefile\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/zclconf/go-cty/cty\"\n\tctyjson \"github.com/zclconf/go-cty/cty/json\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/states\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n)\n\nfunc upgradeStateV3ToV4(old *stateV3) (*stateV4, error) {\n\n\tif old.Serial < 0 {\n\t\t// The new format is using uint64 here, which should be fine for any\n\t\t// real state (we only used positive integers in practice) but we'll\n\t\t// catch this explicitly here to avoid weird behavior if a state file\n\t\t// has been tampered with in some way.\n\t\treturn nil, fmt.Errorf(\"state has serial less than zero, which is invalid\")\n\t}\n\n\tnew := &stateV4{\n\t\tTerraformVersion: old.TFVersion,\n\t\tSerial:           uint64(old.Serial),\n\t\tLineage:          old.Lineage,\n\t\tRootOutputs:      map[string]outputStateV4{},\n\t\tResources:        []resourceStateV4{},\n\t}\n\n\tif new.TerraformVersion == \"\" {\n\t\t// Older formats considered this to be optional, but now it's required\n\t\t// and so we'll stub it out with something that's definitely older\n\t\t// than the version that really created this state.\n\t\tnew.TerraformVersion = \"0.0.0\"\n\t}\n\n\tfor _, msOld := range old.Modules {\n\t\tif len(msOld.Path) < 1 || msOld.Path[0] != \"root\" {\n\t\t\treturn nil, fmt.Errorf(\"state contains invalid module path %#v\", msOld.Path)\n\t\t}\n\n\t\t// Convert legacy-style module address into our newer address type.\n\t\t// Since these old formats are only generated by versions of Terraform\n\t\t// that don't support count and for_each on modules, we can just assume\n\t\t// all of the modules are unkeyed.\n\t\tmoduleAddr := make(addrs.ModuleInstance, len(msOld.Path)-1)\n\t\tfor i, name := range msOld.Path[1:] {\n\t\t\tmoduleAddr[i] = addrs.ModuleInstanceStep{\n\t\t\t\tName:        name,\n\t\t\t\tInstanceKey: addrs.NoKey,\n\t\t\t}\n\t\t}\n\n\t\t// In a v3 state file, a \"resource state\" is actually an instance\n\t\t// state, so we need to fill in a missing level of heirarchy here\n\t\t// by lazily creating resource states as we encounter them.\n\t\t// We'll track them in here, keyed on the string representation of\n\t\t// the resource address.\n\t\tresourceStates := map[string]*resourceStateV4{}\n\n\t\tfor legacyAddr, rsOld := range msOld.Resources {\n\t\t\tinstAddr, err := parseLegacyResourceAddress(legacyAddr)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\n\t\t\tresAddr := instAddr.Resource\n\t\t\trs, exists := resourceStates[resAddr.String()]\n\t\t\tif !exists {\n\t\t\t\tvar modeStr string\n\t\t\t\tswitch resAddr.Mode {\n\t\t\t\tcase addrs.ManagedResourceMode:\n\t\t\t\t\tmodeStr = \"managed\"\n\t\t\t\tcase addrs.DataResourceMode:\n\t\t\t\t\tmodeStr = \"data\"\n\t\t\t\tdefault:\n\t\t\t\t\treturn nil, fmt.Errorf(\"state contains resource %s with an unsupported resource mode\", resAddr)\n\t\t\t\t}\n\n\t\t\t\t// In state versions prior to 4 we allowed each instance of a\n\t\t\t\t// resource to have its own provider configuration address,\n\t\t\t\t// which makes no real sense in practice because providers\n\t\t\t\t// are associated with resources in the configuration. We\n\t\t\t\t// elevate that to the resource level during this upgrade,\n\t\t\t\t// implicitly taking the provider address of the first instance\n\t\t\t\t// we encounter for each resource. While this is lossy in\n\t\t\t\t// theory, in practice there is no reason for these values to\n\t\t\t\t// differ between instances.\n\t\t\t\tvar providerAddr addrs.AbsProviderConfig\n\t\t\t\toldProviderAddr := rsOld.Provider\n\t\t\t\tif strings.Contains(oldProviderAddr, \"provider.\") {\n\t\t\t\t\t// Smells like a new-style provider address, but we'll test it.\n\t\t\t\t\tvar diags tfdiags.Diagnostics\n\t\t\t\t\tproviderAddr, diags = addrs.ParseAbsProviderConfigStr(oldProviderAddr)\n\t\t\t\t\tif diags.HasErrors() {\n\t\t\t\t\t\treturn nil, diags.Err()\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Smells like an old-style module-local provider address,\n\t\t\t\t\t// which we'll need to migrate. We'll assume it's referring\n\t\t\t\t\t// to the same module the resource is in, which might be\n\t\t\t\t\t// incorrect but it'll get fixed up next time any updates\n\t\t\t\t\t// are made to an instance.\n\t\t\t\t\tif oldProviderAddr != \"\" {\n\t\t\t\t\t\tlocalAddr, diags := addrs.ParseProviderConfigCompactStr(oldProviderAddr)\n\t\t\t\t\t\tif diags.HasErrors() {\n\t\t\t\t\t\t\treturn nil, diags.Err()\n\t\t\t\t\t\t}\n\t\t\t\t\t\tproviderAddr = localAddr.Absolute(moduleAddr)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tproviderAddr = resAddr.DefaultProviderConfig().Absolute(moduleAddr)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\trs = &resourceStateV4{\n\t\t\t\t\tModule:         moduleAddr.String(),\n\t\t\t\t\tMode:           modeStr,\n\t\t\t\t\tType:           resAddr.Type,\n\t\t\t\t\tName:           resAddr.Name,\n\t\t\t\t\tInstances:      []instanceObjectStateV4{},\n\t\t\t\t\tProviderConfig: providerAddr.String(),\n\t\t\t\t}\n\t\t\t\tresourceStates[resAddr.String()] = rs\n\t\t\t}\n\n\t\t\t// Now we'll deal with the instance itself, which may either be\n\t\t\t// the first instance in a resource we just created or an additional\n\t\t\t// instance for a resource added on a prior loop.\n\t\t\tinstKey := instAddr.Key\n\t\t\tif isOld := rsOld.Primary; isOld != nil {\n\t\t\t\tisNew, err := upgradeInstanceObjectV3ToV4(rsOld, isOld, instKey, states.NotDeposed)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, fmt.Errorf(\"failed to migrate primary generation of %s: %s\", instAddr, err)\n\t\t\t\t}\n\t\t\t\trs.Instances = append(rs.Instances, *isNew)\n\t\t\t}\n\t\t\tfor i, isOld := range rsOld.Deposed {\n\t\t\t\t// When we migrate old instances we'll use sequential deposed\n\t\t\t\t// keys just so that the upgrade result is deterministic. New\n\t\t\t\t// deposed keys allocated moving forward will be pseudorandomly\n\t\t\t\t// selected, but we check for collisions and so these\n\t\t\t\t// non-random ones won't hurt.\n\t\t\t\tdeposedKey := states.DeposedKey(fmt.Sprintf(\"%08x\", i+1))\n\t\t\t\tisNew, err := upgradeInstanceObjectV3ToV4(rsOld, isOld, instKey, deposedKey)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, fmt.Errorf(\"failed to migrate deposed generation index %d of %s: %s\", i, instAddr, err)\n\t\t\t\t}\n\t\t\t\trs.Instances = append(rs.Instances, *isNew)\n\t\t\t}\n\n\t\t\tif instKey != addrs.NoKey && rs.EachMode == \"\" {\n\t\t\t\trs.EachMode = \"list\"\n\t\t\t}\n\t\t}\n\n\t\tfor _, rs := range resourceStates {\n\t\t\tnew.Resources = append(new.Resources, *rs)\n\t\t}\n\n\t\tif len(msOld.Path) == 1 && msOld.Path[0] == \"root\" {\n\t\t\t// We'll migrate the outputs for this module too, then.\n\t\t\tfor name, oldOS := range msOld.Outputs {\n\t\t\t\tnewOS := outputStateV4{\n\t\t\t\t\tSensitive: oldOS.Sensitive,\n\t\t\t\t}\n\n\t\t\t\tvalRaw := oldOS.Value\n\t\t\t\tvalSrc, err := json.Marshal(valRaw)\n\t\t\t\tif err != nil {\n\t\t\t\t\t// Should never happen, because this value came from JSON\n\t\t\t\t\t// in the first place and so we're just round-tripping here.\n\t\t\t\t\treturn nil, fmt.Errorf(\"failed to serialize output %q value as JSON: %s\", name, err)\n\t\t\t\t}\n\n\t\t\t\t// The \"type\" field in state V2 wasn't really that useful\n\t\t\t\t// since it was only able to capture string vs. list vs. map.\n\t\t\t\t// For this reason, during upgrade we'll just discard it\n\t\t\t\t// altogether and use cty's idea of the implied type of\n\t\t\t\t// turning our old value into JSON.\n\t\t\t\tty, err := ctyjson.ImpliedType(valSrc)\n\t\t\t\tif err != nil {\n\t\t\t\t\t// REALLY should never happen, because we literally just\n\t\t\t\t\t// encoded this as JSON above!\n\t\t\t\t\treturn nil, fmt.Errorf(\"failed to parse output %q value from JSON: %s\", name, err)\n\t\t\t\t}\n\n\t\t\t\t// ImpliedType tends to produce structural types, but since older\n\t\t\t\t// version of Terraform didn't support those a collection type\n\t\t\t\t// is probably what was intended, so we'll see if we can\n\t\t\t\t// interpret our value as one.\n\t\t\t\tty = simplifyImpliedValueType(ty)\n\n\t\t\t\ttySrc, err := ctyjson.MarshalType(ty)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, fmt.Errorf(\"failed to serialize output %q type as JSON: %s\", name, err)\n\t\t\t\t}\n\n\t\t\t\tnewOS.ValueRaw = json.RawMessage(valSrc)\n\t\t\t\tnewOS.ValueTypeRaw = json.RawMessage(tySrc)\n\n\t\t\t\tnew.RootOutputs[name] = newOS\n\t\t\t}\n\t\t}\n\t}\n\n\tnew.normalize()\n\n\treturn new, nil\n}\n\nfunc upgradeInstanceObjectV3ToV4(rsOld *resourceStateV2, isOld *instanceStateV2, instKey addrs.InstanceKey, deposedKey states.DeposedKey) (*instanceObjectStateV4, error) {\n\n\t// Schema versions were, in prior formats, a private concern of the provider\n\t// SDK, and not a first-class concept in the state format. Here we're\n\t// sniffing for the pre-0.12 SDK's way of representing schema versions\n\t// and promoting it to our first-class field if we find it. We'll ignore\n\t// it if it doesn't look like what the SDK would've written. If this\n\t// sniffing fails then we'll assume schema version 0.\n\tvar schemaVersion uint64\n\tmigratedSchemaVersion := false\n\tif raw, exists := isOld.Meta[\"schema_version\"]; exists {\n\t\tswitch tv := raw.(type) {\n\t\tcase string:\n\t\t\tv, err := strconv.ParseUint(tv, 10, 64)\n\t\t\tif err == nil {\n\t\t\t\tschemaVersion = v\n\t\t\t\tmigratedSchemaVersion = true\n\t\t\t}\n\t\tcase int:\n\t\t\tschemaVersion = uint64(tv)\n\t\t\tmigratedSchemaVersion = true\n\t\tcase float64:\n\t\t\tschemaVersion = uint64(tv)\n\t\t\tmigratedSchemaVersion = true\n\t\t}\n\t}\n\n\tprivate := map[string]interface{}{}\n\tfor k, v := range isOld.Meta {\n\t\tif k == \"schema_version\" && migratedSchemaVersion {\n\t\t\t// We're gonna promote this into our first-class schema version field\n\t\t\tcontinue\n\t\t}\n\t\tprivate[k] = v\n\t}\n\tvar privateJSON []byte\n\tif len(private) != 0 {\n\t\tvar err error\n\t\tprivateJSON, err = json.Marshal(private)\n\t\tif err != nil {\n\t\t\t// This shouldn't happen, because the Meta values all came from JSON\n\t\t\t// originally anyway.\n\t\t\treturn nil, fmt.Errorf(\"cannot serialize private instance object data: %s\", err)\n\t\t}\n\t}\n\n\tvar status string\n\tif isOld.Tainted {\n\t\tstatus = \"tainted\"\n\t}\n\n\tvar instKeyRaw interface{}\n\tswitch tk := instKey.(type) {\n\tcase addrs.IntKey:\n\t\tinstKeyRaw = int(tk)\n\tcase addrs.StringKey:\n\t\tinstKeyRaw = string(tk)\n\tdefault:\n\t\tif instKeyRaw != nil {\n\t\t\treturn nil, fmt.Errorf(\"insupported instance key: %#v\", instKey)\n\t\t}\n\t}\n\n\tvar attributes map[string]string\n\tif isOld.Attributes != nil {\n\t\tattributes = make(map[string]string, len(isOld.Attributes))\n\t\tfor k, v := range isOld.Attributes {\n\t\t\tattributes[k] = v\n\t\t}\n\t}\n\tif isOld.ID != \"\" {\n\t\t// As a special case, if we don't already have an \"id\" attribute and\n\t\t// yet there's a non-empty first-class ID on the old object then we'll\n\t\t// create a synthetic id attribute to avoid losing that first-class id.\n\t\t// In practice this generally arises only in tests where state literals\n\t\t// are hand-written in a non-standard way; real code prior to 0.12\n\t\t// would always force the first-class ID to be copied into the\n\t\t// id attribute before storing.\n\t\tif attributes == nil {\n\t\t\tattributes = make(map[string]string, len(isOld.Attributes))\n\t\t}\n\t\tif idVal := attributes[\"id\"]; idVal == \"\" {\n\t\t\tattributes[\"id\"] = isOld.ID\n\t\t}\n\t}\n\n\tdependencies := make([]string, len(rsOld.Dependencies))\n\tfor i, v := range rsOld.Dependencies {\n\t\tdependencies[i] = parseLegacyDependency(v)\n\t}\n\n\treturn &instanceObjectStateV4{\n\t\tIndexKey:       instKeyRaw,\n\t\tStatus:         status,\n\t\tDeposed:        string(deposedKey),\n\t\tAttributesFlat: attributes,\n\t\tDependencies:   dependencies,\n\t\tSchemaVersion:  schemaVersion,\n\t\tPrivateRaw:     privateJSON,\n\t}, nil\n}\n\n// parseLegacyResourceAddress parses the different identifier format used\n// state formats before version 4, like \"instance.name.0\".\nfunc parseLegacyResourceAddress(s string) (addrs.ResourceInstance, error) {\n\tvar ret addrs.ResourceInstance\n\n\t// Split based on \".\". Every resource address should have at least two\n\t// elements (type and name).\n\tparts := strings.Split(s, \".\")\n\tif len(parts) < 2 || len(parts) > 4 {\n\t\treturn ret, fmt.Errorf(\"invalid internal resource address format: %s\", s)\n\t}\n\n\t// Data resource if we have at least 3 parts and the first one is data\n\tret.Resource.Mode = addrs.ManagedResourceMode\n\tif len(parts) > 2 && parts[0] == \"data\" {\n\t\tret.Resource.Mode = addrs.DataResourceMode\n\t\tparts = parts[1:]\n\t}\n\n\t// If we're not a data resource and we have more than 3, then it is an error\n\tif len(parts) > 3 && ret.Resource.Mode != addrs.DataResourceMode {\n\t\treturn ret, fmt.Errorf(\"invalid internal resource address format: %s\", s)\n\t}\n\n\t// Build the parts of the resource address that are guaranteed to exist\n\tret.Resource.Type = parts[0]\n\tret.Resource.Name = parts[1]\n\tret.Key = addrs.NoKey\n\n\t// If we have more parts, then we have an index. Parse that.\n\tif len(parts) > 2 {\n\t\tidx, err := strconv.ParseInt(parts[2], 0, 0)\n\t\tif err != nil {\n\t\t\treturn ret, fmt.Errorf(\"error parsing resource address %q: %s\", s, err)\n\t\t}\n\n\t\tret.Key = addrs.IntKey(idx)\n\t}\n\n\treturn ret, nil\n}\n\n// simplifyImpliedValueType attempts to heuristically simplify a value type\n// derived from a legacy stored output value into something simpler that\n// is closer to what would've fitted into the pre-v0.12 value type system.\nfunc simplifyImpliedValueType(ty cty.Type) cty.Type {\n\tswitch {\n\tcase ty.IsTupleType():\n\t\t// If all of the element types are the same then we'll make this\n\t\t// a list instead. This is very likely to be true, since prior versions\n\t\t// of Terraform did not officially support mixed-type collections.\n\n\t\tif ty.Equals(cty.EmptyTuple) {\n\t\t\t// Don't know what the element type would be, then.\n\t\t\treturn ty\n\t\t}\n\n\t\tetys := ty.TupleElementTypes()\n\t\tety := etys[0]\n\t\tfor _, other := range etys[1:] {\n\t\t\tif !other.Equals(ety) {\n\t\t\t\t// inconsistent types\n\t\t\t\treturn ty\n\t\t\t}\n\t\t}\n\t\tety = simplifyImpliedValueType(ety)\n\t\treturn cty.List(ety)\n\n\tcase ty.IsObjectType():\n\t\t// If all of the attribute types are the same then we'll make this\n\t\t// a map instead. This is very likely to be true, since prior versions\n\t\t// of Terraform did not officially support mixed-type collections.\n\n\t\tif ty.Equals(cty.EmptyObject) {\n\t\t\t// Don't know what the element type would be, then.\n\t\t\treturn ty\n\t\t}\n\n\t\tatys := ty.AttributeTypes()\n\t\tvar ety cty.Type\n\t\tfor _, other := range atys {\n\t\t\tif ety == cty.NilType {\n\t\t\t\tety = other\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif !other.Equals(ety) {\n\t\t\t\t// inconsistent types\n\t\t\t\treturn ty\n\t\t\t}\n\t\t}\n\t\tety = simplifyImpliedValueType(ety)\n\t\treturn cty.Map(ety)\n\n\tdefault:\n\t\t// No other normalizations are possible\n\t\treturn ty\n\t}\n}\n\nfunc parseLegacyDependency(s string) string {\n\tparts := strings.Split(s, \".\")\n\tret := parts[0]\n\tfor _, part := range parts[1:] {\n\t\tif part == \"*\" {\n\t\t\tbreak\n\t\t}\n\t\tif i, err := strconv.Atoi(part); err == nil {\n\t\t\tret = ret + fmt.Sprintf(\"[%d]\", i)\n\t\t\tbreak\n\t\t}\n\t\tret = ret + \".\" + part\n\t}\n\treturn ret\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/states/statefile/version4.go",
    "content": "package statefile\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"sort\"\n\n\tversion \"github.com/hashicorp/go-version\"\n\tctyjson \"github.com/zclconf/go-cty/cty/json\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/states\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n)\n\nfunc readStateV4(src []byte) (*File, tfdiags.Diagnostics) {\n\tvar diags tfdiags.Diagnostics\n\tsV4 := &stateV4{}\n\terr := json.Unmarshal(src, sV4)\n\tif err != nil {\n\t\tdiags = diags.Append(jsonUnmarshalDiags(err))\n\t\treturn nil, diags\n\t}\n\n\tfile, prepDiags := prepareStateV4(sV4)\n\tdiags = diags.Append(prepDiags)\n\treturn file, diags\n}\n\nfunc prepareStateV4(sV4 *stateV4) (*File, tfdiags.Diagnostics) {\n\tvar diags tfdiags.Diagnostics\n\n\tvar tfVersion *version.Version\n\tif sV4.TerraformVersion != \"\" {\n\t\tvar err error\n\t\ttfVersion, err = version.NewVersion(sV4.TerraformVersion)\n\t\tif err != nil {\n\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\ttfdiags.Error,\n\t\t\t\t\"Invalid Terraform version string\",\n\t\t\t\tfmt.Sprintf(\"State file claims to have been written by Terraform version %q, which is not a valid version string.\", sV4.TerraformVersion),\n\t\t\t))\n\t\t}\n\t}\n\n\tfile := &File{\n\t\tTerraformVersion: tfVersion,\n\t\tSerial:           sV4.Serial,\n\t\tLineage:          sV4.Lineage,\n\t}\n\n\tstate := states.NewState()\n\n\tfor _, rsV4 := range sV4.Resources {\n\t\trAddr := addrs.Resource{\n\t\t\tType: rsV4.Type,\n\t\t\tName: rsV4.Name,\n\t\t}\n\t\tswitch rsV4.Mode {\n\t\tcase \"managed\":\n\t\t\trAddr.Mode = addrs.ManagedResourceMode\n\t\tcase \"data\":\n\t\t\trAddr.Mode = addrs.DataResourceMode\n\t\tdefault:\n\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\ttfdiags.Error,\n\t\t\t\t\"Invalid resource mode in state\",\n\t\t\t\tfmt.Sprintf(\"State contains a resource with mode %q (%q %q) which is not supported.\", rsV4.Mode, rAddr.Type, rAddr.Name),\n\t\t\t))\n\t\t\tcontinue\n\t\t}\n\n\t\tmoduleAddr := addrs.RootModuleInstance\n\t\tif rsV4.Module != \"\" {\n\t\t\tvar addrDiags tfdiags.Diagnostics\n\t\t\tmoduleAddr, addrDiags = addrs.ParseModuleInstanceStr(rsV4.Module)\n\t\t\tdiags = diags.Append(addrDiags)\n\t\t\tif addrDiags.HasErrors() {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\tproviderAddr, addrDiags := addrs.ParseAbsProviderConfigStr(rsV4.ProviderConfig)\n\t\tdiags.Append(addrDiags)\n\t\tif addrDiags.HasErrors() {\n\t\t\tcontinue\n\t\t}\n\n\t\tvar eachMode states.EachMode\n\t\tswitch rsV4.EachMode {\n\t\tcase \"\":\n\t\t\teachMode = states.NoEach\n\t\tcase \"list\":\n\t\t\teachMode = states.EachList\n\t\tcase \"map\":\n\t\t\teachMode = states.EachMap\n\t\tdefault:\n\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\ttfdiags.Error,\n\t\t\t\t\"Invalid resource metadata in state\",\n\t\t\t\tfmt.Sprintf(\"Resource %s has invalid \\\"each\\\" value %q in state.\", rAddr.Absolute(moduleAddr), eachMode),\n\t\t\t))\n\t\t\tcontinue\n\t\t}\n\n\t\tms := state.EnsureModule(moduleAddr)\n\n\t\t// Ensure the resource container object is present in the state.\n\t\tms.SetResourceMeta(rAddr, eachMode, providerAddr)\n\n\t\tfor _, isV4 := range rsV4.Instances {\n\t\t\tkeyRaw := isV4.IndexKey\n\t\t\tvar key addrs.InstanceKey\n\t\t\tswitch tk := keyRaw.(type) {\n\t\t\tcase int:\n\t\t\t\tkey = addrs.IntKey(tk)\n\t\t\tcase float64:\n\t\t\t\t// Since JSON only has one number type, reading from encoding/json\n\t\t\t\t// gives us a float64 here even if the number is whole.\n\t\t\t\t// float64 has a smaller integer range than int, but in practice\n\t\t\t\t// we rarely have more than a few tens of instances and so\n\t\t\t\t// it's unlikely that we'll exhaust the 52 bits in a float64.\n\t\t\t\tkey = addrs.IntKey(int(tk))\n\t\t\tcase string:\n\t\t\t\tkey = addrs.StringKey(tk)\n\t\t\tdefault:\n\t\t\t\tif keyRaw != nil {\n\t\t\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\t\t\ttfdiags.Error,\n\t\t\t\t\t\t\"Invalid resource instance metadata in state\",\n\t\t\t\t\t\tfmt.Sprintf(\"Resource %s has an instance with the invalid instance key %#v.\", rAddr.Absolute(moduleAddr), keyRaw),\n\t\t\t\t\t))\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tkey = addrs.NoKey\n\t\t\t}\n\n\t\t\tinstAddr := rAddr.Instance(key)\n\n\t\t\tobj := &states.ResourceInstanceObjectSrc{\n\t\t\t\tSchemaVersion: isV4.SchemaVersion,\n\t\t\t}\n\n\t\t\t{\n\t\t\t\t// Instance attributes\n\t\t\t\tswitch {\n\t\t\t\tcase isV4.AttributesRaw != nil:\n\t\t\t\t\tobj.AttrsJSON = isV4.AttributesRaw\n\t\t\t\tcase isV4.AttributesFlat != nil:\n\t\t\t\t\tobj.AttrsFlat = isV4.AttributesFlat\n\t\t\t\tdefault:\n\t\t\t\t\t// This is odd, but we'll accept it and just treat the\n\t\t\t\t\t// object has being empty. In practice this should arise\n\t\t\t\t\t// only from the contrived sort of state objects we tend\n\t\t\t\t\t// to hand-write inline in tests.\n\t\t\t\t\tobj.AttrsJSON = []byte{'{', '}'}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t{\n\t\t\t\t// Status\n\t\t\t\traw := isV4.Status\n\t\t\t\tswitch raw {\n\t\t\t\tcase \"\":\n\t\t\t\t\tobj.Status = states.ObjectReady\n\t\t\t\tcase \"tainted\":\n\t\t\t\t\tobj.Status = states.ObjectTainted\n\t\t\t\tdefault:\n\t\t\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\t\t\ttfdiags.Error,\n\t\t\t\t\t\t\"Invalid resource instance metadata in state\",\n\t\t\t\t\t\tfmt.Sprintf(\"Instance %s has invalid status %q.\", instAddr.Absolute(moduleAddr), raw),\n\t\t\t\t\t))\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif raw := isV4.PrivateRaw; len(raw) > 0 {\n\t\t\t\tobj.Private = raw\n\t\t\t}\n\n\t\t\t{\n\t\t\t\tdepsRaw := isV4.Dependencies\n\t\t\t\tdeps := make([]addrs.Referenceable, 0, len(depsRaw))\n\t\t\t\tfor _, depRaw := range depsRaw {\n\t\t\t\t\tref, refDiags := addrs.ParseRefStr(depRaw)\n\t\t\t\t\tdiags = diags.Append(refDiags)\n\t\t\t\t\tif refDiags.HasErrors() {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tif len(ref.Remaining) != 0 {\n\t\t\t\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\t\t\t\ttfdiags.Error,\n\t\t\t\t\t\t\t\"Invalid resource instance metadata in state\",\n\t\t\t\t\t\t\tfmt.Sprintf(\"Instance %s declares dependency on %q, which is not a reference to a dependable object.\", instAddr.Absolute(moduleAddr), depRaw),\n\t\t\t\t\t\t))\n\t\t\t\t\t}\n\t\t\t\t\tif ref.Subject == nil {\n\t\t\t\t\t\t// Should never happen\n\t\t\t\t\t\tpanic(fmt.Sprintf(\"parsing dependency %q for instance %s returned a nil address\", depRaw, instAddr.Absolute(moduleAddr)))\n\t\t\t\t\t}\n\t\t\t\t\tdeps = append(deps, ref.Subject)\n\t\t\t\t}\n\t\t\t\tobj.Dependencies = deps\n\t\t\t}\n\n\t\t\tswitch {\n\t\t\tcase isV4.Deposed != \"\":\n\t\t\t\tdk := states.DeposedKey(isV4.Deposed)\n\t\t\t\tif len(dk) != 8 {\n\t\t\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\t\t\ttfdiags.Error,\n\t\t\t\t\t\t\"Invalid resource instance metadata in state\",\n\t\t\t\t\t\tfmt.Sprintf(\"Instance %s has an object with deposed key %q, which is not correctly formatted.\", instAddr.Absolute(moduleAddr), isV4.Deposed),\n\t\t\t\t\t))\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tis := ms.ResourceInstance(instAddr)\n\t\t\t\tif is.HasDeposed(dk) {\n\t\t\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\t\t\ttfdiags.Error,\n\t\t\t\t\t\t\"Duplicate resource instance in state\",\n\t\t\t\t\t\tfmt.Sprintf(\"Instance %s deposed object %q appears multiple times in the state file.\", instAddr.Absolute(moduleAddr), dk),\n\t\t\t\t\t))\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tms.SetResourceInstanceDeposed(instAddr, dk, obj, providerAddr)\n\t\t\tdefault:\n\t\t\t\tis := ms.ResourceInstance(instAddr)\n\t\t\t\tif is.HasCurrent() {\n\t\t\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\t\t\ttfdiags.Error,\n\t\t\t\t\t\t\"Duplicate resource instance in state\",\n\t\t\t\t\t\tfmt.Sprintf(\"Instance %s appears multiple times in the state file.\", instAddr.Absolute(moduleAddr)),\n\t\t\t\t\t))\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tms.SetResourceInstanceCurrent(instAddr, obj, providerAddr)\n\t\t\t}\n\t\t}\n\n\t\t// We repeat this after creating the instances because\n\t\t// SetResourceInstanceCurrent automatically resets this metadata based\n\t\t// on the incoming objects. That behavior is useful when we're making\n\t\t// piecemeal updates to the state during an apply, but when we're\n\t\t// reading the state file we want to reflect its contents exactly.\n\t\tms.SetResourceMeta(rAddr, eachMode, providerAddr)\n\t}\n\n\t// The root module is special in that we persist its attributes and thus\n\t// need to reload them now. (For descendent modules we just re-calculate\n\t// them based on the latest configuration on each run.)\n\t{\n\t\trootModule := state.RootModule()\n\t\tfor name, fos := range sV4.RootOutputs {\n\t\t\tos := &states.OutputValue{}\n\t\t\tos.Sensitive = fos.Sensitive\n\n\t\t\tty, err := ctyjson.UnmarshalType([]byte(fos.ValueTypeRaw))\n\t\t\tif err != nil {\n\t\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\t\ttfdiags.Error,\n\t\t\t\t\t\"Invalid output value type in state\",\n\t\t\t\t\tfmt.Sprintf(\"The state file has an invalid type specification for output %q: %s.\", name, err),\n\t\t\t\t))\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tval, err := ctyjson.Unmarshal([]byte(fos.ValueRaw), ty)\n\t\t\tif err != nil {\n\t\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\t\ttfdiags.Error,\n\t\t\t\t\t\"Invalid output value saved in state\",\n\t\t\t\t\tfmt.Sprintf(\"The state file has an invalid value for output %q: %s.\", name, err),\n\t\t\t\t))\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tos.Value = val\n\t\t\trootModule.OutputValues[name] = os\n\t\t}\n\t}\n\n\tfile.State = state\n\treturn file, diags\n}\n\nfunc writeStateV4(file *File, w io.Writer) tfdiags.Diagnostics {\n\t// Here we'll convert back from the \"File\" representation to our\n\t// stateV4 struct representation and write that.\n\t//\n\t// While we support legacy state formats for reading, we only support the\n\t// latest for writing and so if a V5 is added in future then this function\n\t// should be deleted and replaced with a writeStateV5, even though the\n\t// read/prepare V4 functions above would stick around.\n\n\tvar diags tfdiags.Diagnostics\n\tif file == nil || file.State == nil {\n\t\tpanic(\"attempt to write nil state to file\")\n\t}\n\n\tvar terraformVersion string\n\tif file.TerraformVersion != nil {\n\t\tterraformVersion = file.TerraformVersion.String()\n\t}\n\n\tsV4 := &stateV4{\n\t\tTerraformVersion: terraformVersion,\n\t\tSerial:           file.Serial,\n\t\tLineage:          file.Lineage,\n\t\tRootOutputs:      map[string]outputStateV4{},\n\t\tResources:        []resourceStateV4{},\n\t}\n\n\tfor name, os := range file.State.RootModule().OutputValues {\n\t\tsrc, err := ctyjson.Marshal(os.Value, os.Value.Type())\n\t\tif err != nil {\n\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\ttfdiags.Error,\n\t\t\t\t\"Failed to serialize output value in state\",\n\t\t\t\tfmt.Sprintf(\"An error occured while serializing output value %q: %s.\", name, err),\n\t\t\t))\n\t\t\tcontinue\n\t\t}\n\n\t\ttypeSrc, err := ctyjson.MarshalType(os.Value.Type())\n\t\tif err != nil {\n\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\ttfdiags.Error,\n\t\t\t\t\"Failed to serialize output value in state\",\n\t\t\t\tfmt.Sprintf(\"An error occured while serializing the type of output value %q: %s.\", name, err),\n\t\t\t))\n\t\t\tcontinue\n\t\t}\n\n\t\tsV4.RootOutputs[name] = outputStateV4{\n\t\t\tSensitive:    os.Sensitive,\n\t\t\tValueRaw:     json.RawMessage(src),\n\t\t\tValueTypeRaw: json.RawMessage(typeSrc),\n\t\t}\n\t}\n\n\tfor _, ms := range file.State.Modules {\n\t\tmoduleAddr := ms.Addr\n\t\tfor _, rs := range ms.Resources {\n\t\t\tresourceAddr := rs.Addr\n\n\t\t\tvar mode string\n\t\t\tswitch resourceAddr.Mode {\n\t\t\tcase addrs.ManagedResourceMode:\n\t\t\t\tmode = \"managed\"\n\t\t\tcase addrs.DataResourceMode:\n\t\t\t\tmode = \"data\"\n\t\t\tdefault:\n\t\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\t\ttfdiags.Error,\n\t\t\t\t\t\"Failed to serialize resource in state\",\n\t\t\t\t\tfmt.Sprintf(\"Resource %s has mode %s, which cannot be serialized in state\", resourceAddr.Absolute(moduleAddr), resourceAddr.Mode),\n\t\t\t\t))\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tvar eachMode string\n\t\t\tswitch rs.EachMode {\n\t\t\tcase states.NoEach:\n\t\t\t\teachMode = \"\"\n\t\t\tcase states.EachList:\n\t\t\t\teachMode = \"list\"\n\t\t\tcase states.EachMap:\n\t\t\t\teachMode = \"map\"\n\t\t\tdefault:\n\t\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\t\ttfdiags.Error,\n\t\t\t\t\t\"Failed to serialize resource in state\",\n\t\t\t\t\tfmt.Sprintf(\"Resource %s has \\\"each\\\" mode %s, which cannot be serialized in state\", resourceAddr.Absolute(moduleAddr), rs.EachMode),\n\t\t\t\t))\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tsV4.Resources = append(sV4.Resources, resourceStateV4{\n\t\t\t\tModule:         moduleAddr.String(),\n\t\t\t\tMode:           mode,\n\t\t\t\tType:           resourceAddr.Type,\n\t\t\t\tName:           resourceAddr.Name,\n\t\t\t\tEachMode:       eachMode,\n\t\t\t\tProviderConfig: rs.ProviderConfig.String(),\n\t\t\t\tInstances:      []instanceObjectStateV4{},\n\t\t\t})\n\t\t\trsV4 := &(sV4.Resources[len(sV4.Resources)-1])\n\n\t\t\tfor key, is := range rs.Instances {\n\t\t\t\tif is.HasCurrent() {\n\t\t\t\t\tvar objDiags tfdiags.Diagnostics\n\t\t\t\t\trsV4.Instances, objDiags = appendInstanceObjectStateV4(\n\t\t\t\t\t\trs, is, key, is.Current, states.NotDeposed,\n\t\t\t\t\t\trsV4.Instances,\n\t\t\t\t\t)\n\t\t\t\t\tdiags = diags.Append(objDiags)\n\t\t\t\t}\n\t\t\t\tfor dk, obj := range is.Deposed {\n\t\t\t\t\tvar objDiags tfdiags.Diagnostics\n\t\t\t\t\trsV4.Instances, objDiags = appendInstanceObjectStateV4(\n\t\t\t\t\t\trs, is, key, obj, dk,\n\t\t\t\t\t\trsV4.Instances,\n\t\t\t\t\t)\n\t\t\t\t\tdiags = diags.Append(objDiags)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tsV4.normalize()\n\n\tsrc, err := json.MarshalIndent(sV4, \"\", \"  \")\n\tif err != nil {\n\t\t// Shouldn't happen if we do our conversion to *stateV4 correctly above.\n\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\ttfdiags.Error,\n\t\t\t\"Failed to serialize state\",\n\t\t\tfmt.Sprintf(\"An error occured while serializing the state to save it. This is a bug in Terraform and should be reported: %s.\", err),\n\t\t))\n\t\treturn diags\n\t}\n\tsrc = append(src, '\\n')\n\n\t_, err = w.Write(src)\n\tif err != nil {\n\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\ttfdiags.Error,\n\t\t\t\"Failed to write state\",\n\t\t\tfmt.Sprintf(\"An error occured while writing the serialized state: %s.\", err),\n\t\t))\n\t\treturn diags\n\t}\n\n\treturn diags\n}\n\nfunc appendInstanceObjectStateV4(rs *states.Resource, is *states.ResourceInstance, key addrs.InstanceKey, obj *states.ResourceInstanceObjectSrc, deposed states.DeposedKey, isV4s []instanceObjectStateV4) ([]instanceObjectStateV4, tfdiags.Diagnostics) {\n\tvar diags tfdiags.Diagnostics\n\n\tvar status string\n\tswitch obj.Status {\n\tcase states.ObjectReady:\n\t\tstatus = \"\"\n\tcase states.ObjectTainted:\n\t\tstatus = \"tainted\"\n\tdefault:\n\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\ttfdiags.Error,\n\t\t\t\"Failed to serialize resource instance in state\",\n\t\t\tfmt.Sprintf(\"Instance %s has status %s, which cannot be saved in state.\", rs.Addr.Instance(key), obj.Status),\n\t\t))\n\t}\n\n\tvar privateRaw []byte\n\tif len(obj.Private) > 0 {\n\t\tprivateRaw = obj.Private\n\t}\n\n\tdeps := make([]string, len(obj.Dependencies))\n\tfor i, depAddr := range obj.Dependencies {\n\t\tdeps[i] = depAddr.String()\n\t}\n\n\tvar rawKey interface{}\n\tswitch tk := key.(type) {\n\tcase addrs.IntKey:\n\t\trawKey = int(tk)\n\tcase addrs.StringKey:\n\t\trawKey = string(tk)\n\tdefault:\n\t\tif key != addrs.NoKey {\n\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\ttfdiags.Error,\n\t\t\t\t\"Failed to serialize resource instance in state\",\n\t\t\t\tfmt.Sprintf(\"Instance %s has an unsupported instance key: %#v.\", rs.Addr.Instance(key), key),\n\t\t\t))\n\t\t}\n\t}\n\n\treturn append(isV4s, instanceObjectStateV4{\n\t\tIndexKey:       rawKey,\n\t\tDeposed:        string(deposed),\n\t\tStatus:         status,\n\t\tSchemaVersion:  obj.SchemaVersion,\n\t\tAttributesFlat: obj.AttrsFlat,\n\t\tAttributesRaw:  obj.AttrsJSON,\n\t\tPrivateRaw:     privateRaw,\n\t\tDependencies:   deps,\n\t}), diags\n}\n\ntype stateV4 struct {\n\tVersion          stateVersionV4           `json:\"version\"`\n\tTerraformVersion string                   `json:\"terraform_version\"`\n\tSerial           uint64                   `json:\"serial\"`\n\tLineage          string                   `json:\"lineage\"`\n\tRootOutputs      map[string]outputStateV4 `json:\"outputs\"`\n\tResources        []resourceStateV4        `json:\"resources\"`\n}\n\n// normalize makes some in-place changes to normalize the way items are\n// stored to ensure that two functionally-equivalent states will be stored\n// identically.\nfunc (s *stateV4) normalize() {\n\tsort.Stable(sortResourcesV4(s.Resources))\n\tfor _, rs := range s.Resources {\n\t\tsort.Stable(sortInstancesV4(rs.Instances))\n\t}\n}\n\ntype outputStateV4 struct {\n\tValueRaw     json.RawMessage `json:\"value\"`\n\tValueTypeRaw json.RawMessage `json:\"type\"`\n\tSensitive    bool            `json:\"sensitive,omitempty\"`\n}\n\ntype resourceStateV4 struct {\n\tModule         string                  `json:\"module,omitempty\"`\n\tMode           string                  `json:\"mode\"`\n\tType           string                  `json:\"type\"`\n\tName           string                  `json:\"name\"`\n\tEachMode       string                  `json:\"each,omitempty\"`\n\tProviderConfig string                  `json:\"provider\"`\n\tInstances      []instanceObjectStateV4 `json:\"instances\"`\n}\n\ntype instanceObjectStateV4 struct {\n\tIndexKey interface{} `json:\"index_key,omitempty\"`\n\tStatus   string      `json:\"status,omitempty\"`\n\tDeposed  string      `json:\"deposed,omitempty\"`\n\n\tSchemaVersion  uint64            `json:\"schema_version\"`\n\tAttributesRaw  json.RawMessage   `json:\"attributes,omitempty\"`\n\tAttributesFlat map[string]string `json:\"attributes_flat,omitempty\"`\n\n\tPrivateRaw []byte `json:\"private,omitempty\"`\n\n\tDependencies []string `json:\"depends_on,omitempty\"`\n}\n\n// stateVersionV4 is a weird special type we use to produce our hard-coded\n// \"version\": 4 in the JSON serialization.\ntype stateVersionV4 struct{}\n\nfunc (sv stateVersionV4) MarshalJSON() ([]byte, error) {\n\treturn []byte{'4'}, nil\n}\n\nfunc (sv stateVersionV4) UnmarshalJSON([]byte) error {\n\t// Nothing to do: we already know we're version 4\n\treturn nil\n}\n\ntype sortResourcesV4 []resourceStateV4\n\nfunc (sr sortResourcesV4) Len() int      { return len(sr) }\nfunc (sr sortResourcesV4) Swap(i, j int) { sr[i], sr[j] = sr[j], sr[i] }\nfunc (sr sortResourcesV4) Less(i, j int) bool {\n\tswitch {\n\tcase sr[i].Mode != sr[j].Mode:\n\t\treturn sr[i].Mode < sr[j].Mode\n\tcase sr[i].Type != sr[j].Type:\n\t\treturn sr[i].Type < sr[j].Type\n\tcase sr[i].Name != sr[j].Name:\n\t\treturn sr[i].Name < sr[j].Name\n\tdefault:\n\t\treturn false\n\t}\n}\n\ntype sortInstancesV4 []instanceObjectStateV4\n\nfunc (si sortInstancesV4) Len() int      { return len(si) }\nfunc (si sortInstancesV4) Swap(i, j int) { si[i], si[j] = si[j], si[i] }\nfunc (si sortInstancesV4) Less(i, j int) bool {\n\tki := si[i].IndexKey\n\tkj := si[j].IndexKey\n\tif ki != kj {\n\t\tif (ki == nil) != (kj == nil) {\n\t\t\treturn ki == nil\n\t\t}\n\t\tif kii, isInt := ki.(int); isInt {\n\t\t\tif kji, isInt := kj.(int); isInt {\n\t\t\t\treturn kii < kji\n\t\t\t}\n\t\t\treturn true\n\t\t}\n\t\tif kis, isStr := ki.(string); isStr {\n\t\t\tif kjs, isStr := kj.(string); isStr {\n\t\t\t\treturn kis < kjs\n\t\t\t}\n\t\t\treturn true\n\t\t}\n\t}\n\tif si[i].Deposed != si[j].Deposed {\n\t\treturn si[i].Deposed < si[j].Deposed\n\t}\n\treturn false\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/states/statefile/write.go",
    "content": "package statefile\n\nimport (\n\t\"io\"\n\n\ttfversion \"github.com/hashicorp/terraform/version\"\n)\n\n// Write writes the given state to the given writer in the current state\n// serialization format.\nfunc Write(s *File, w io.Writer) error {\n\t// Always record the current terraform version in the state.\n\ts.TerraformVersion = tfversion.SemVer\n\n\tdiags := writeStateV4(s, w)\n\treturn diags.Err()\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/states/sync.go",
    "content": "package states\n\nimport (\n\t\"log\"\n\t\"sync\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// SyncState is a wrapper around State that provides concurrency-safe access to\n// various common operations that occur during a Terraform graph walk, or other\n// similar concurrent contexts.\n//\n// When a SyncState wrapper is in use, no concurrent direct access to the\n// underlying objects is permitted unless the caller first acquires an explicit\n// lock, using the Lock and Unlock methods. Most callers should _not_\n// explicitly lock, and should instead use the other methods of this type that\n// handle locking automatically.\n//\n// Since SyncState is able to safely consolidate multiple updates into a single\n// atomic operation, many of its methods are at a higher level than those\n// of the underlying types, and operate on the state as a whole rather than\n// on individual sub-structures of the state.\n//\n// SyncState can only protect against races within its own methods. It cannot\n// provide any guarantees about the order in which concurrent operations will\n// be processed, so callers may still need to employ higher-level techniques\n// for ensuring correct operation sequencing, such as building and walking\n// a dependency graph.\ntype SyncState struct {\n\tstate *State\n\tlock  sync.RWMutex\n}\n\n// Module returns a snapshot of the state of the module instance with the given\n// address, or nil if no such module is tracked.\n//\n// The return value is a pointer to a copy of the module state, which the\n// caller may then freely access and mutate. However, since the module state\n// tends to be a large data structure with many child objects, where possible\n// callers should prefer to use a more granular accessor to access a child\n// module directly, and thus reduce the amount of copying required.\nfunc (s *SyncState) Module(addr addrs.ModuleInstance) *Module {\n\ts.lock.RLock()\n\tret := s.state.Module(addr).DeepCopy()\n\ts.lock.RUnlock()\n\treturn ret\n}\n\n// RemoveModule removes the entire state for the given module, taking with\n// it any resources associated with the module. This should generally be\n// called only for modules whose resources have all been destroyed, but\n// that is not enforced by this method.\nfunc (s *SyncState) RemoveModule(addr addrs.ModuleInstance) {\n\ts.lock.Lock()\n\tdefer s.lock.Unlock()\n\n\ts.state.RemoveModule(addr)\n}\n\n// OutputValue returns a snapshot of the state of the output value with the\n// given address, or nil if no such output value is tracked.\n//\n// The return value is a pointer to a copy of the output value state, which the\n// caller may then freely access and mutate.\nfunc (s *SyncState) OutputValue(addr addrs.AbsOutputValue) *OutputValue {\n\ts.lock.RLock()\n\tret := s.state.OutputValue(addr).DeepCopy()\n\ts.lock.RUnlock()\n\treturn ret\n}\n\n// SetOutputValue writes a given output value into the state, overwriting\n// any existing value of the same name.\n//\n// If the module containing the output is not yet tracked in state then it\n// be added as a side-effect.\nfunc (s *SyncState) SetOutputValue(addr addrs.AbsOutputValue, value cty.Value, sensitive bool) {\n\ts.lock.Lock()\n\tdefer s.lock.Unlock()\n\n\tms := s.state.EnsureModule(addr.Module)\n\tms.SetOutputValue(addr.OutputValue.Name, value, sensitive)\n}\n\n// RemoveOutputValue removes the stored value for the output value with the\n// given address.\n//\n// If this results in its containing module being empty, the module will be\n// pruned from the state as a side-effect.\nfunc (s *SyncState) RemoveOutputValue(addr addrs.AbsOutputValue) {\n\ts.lock.Lock()\n\tdefer s.lock.Unlock()\n\n\tms := s.state.Module(addr.Module)\n\tif ms == nil {\n\t\treturn\n\t}\n\tms.RemoveOutputValue(addr.OutputValue.Name)\n\ts.maybePruneModule(addr.Module)\n}\n\n// LocalValue returns the current value associated with the given local value\n// address.\nfunc (s *SyncState) LocalValue(addr addrs.AbsLocalValue) cty.Value {\n\ts.lock.RLock()\n\t// cty.Value is immutable, so we don't need any extra copying here.\n\tret := s.state.LocalValue(addr)\n\ts.lock.RUnlock()\n\treturn ret\n}\n\n// SetLocalValue writes a given output value into the state, overwriting\n// any existing value of the same name.\n//\n// If the module containing the local value is not yet tracked in state then it\n// will be added as a side-effect.\nfunc (s *SyncState) SetLocalValue(addr addrs.AbsLocalValue, value cty.Value) {\n\ts.lock.Lock()\n\tdefer s.lock.Unlock()\n\n\tms := s.state.EnsureModule(addr.Module)\n\tms.SetLocalValue(addr.LocalValue.Name, value)\n}\n\n// RemoveLocalValue removes the stored value for the local value with the\n// given address.\n//\n// If this results in its containing module being empty, the module will be\n// pruned from the state as a side-effect.\nfunc (s *SyncState) RemoveLocalValue(addr addrs.AbsLocalValue) {\n\ts.lock.Lock()\n\tdefer s.lock.Unlock()\n\n\tms := s.state.Module(addr.Module)\n\tif ms == nil {\n\t\treturn\n\t}\n\tms.RemoveLocalValue(addr.LocalValue.Name)\n\ts.maybePruneModule(addr.Module)\n}\n\n// Resource returns a snapshot of the state of the resource with the given\n// address, or nil if no such resource is tracked.\n//\n// The return value is a pointer to a copy of the resource state, which the\n// caller may then freely access and mutate.\nfunc (s *SyncState) Resource(addr addrs.AbsResource) *Resource {\n\ts.lock.RLock()\n\tret := s.state.Resource(addr).DeepCopy()\n\ts.lock.RUnlock()\n\treturn ret\n}\n\n// ResourceInstance returns a snapshot of the state the resource instance with\n// the given address, or nil if no such instance is tracked.\n//\n// The return value is a pointer to a copy of the instance state, which the\n// caller may then freely access and mutate.\nfunc (s *SyncState) ResourceInstance(addr addrs.AbsResourceInstance) *ResourceInstance {\n\ts.lock.RLock()\n\tret := s.state.ResourceInstance(addr).DeepCopy()\n\ts.lock.RUnlock()\n\treturn ret\n}\n\n// ResourceInstanceObject returns a snapshot of the current instance object\n// of the given generation belonging to the instance with the given address,\n// or nil if no such object is tracked..\n//\n// The return value is a pointer to a copy of the object, which the caller may\n// then freely access and mutate.\nfunc (s *SyncState) ResourceInstanceObject(addr addrs.AbsResourceInstance, gen Generation) *ResourceInstanceObjectSrc {\n\ts.lock.RLock()\n\tdefer s.lock.RUnlock()\n\n\tinst := s.state.ResourceInstance(addr)\n\tif inst == nil {\n\t\treturn nil\n\t}\n\treturn inst.GetGeneration(gen).DeepCopy()\n}\n\n// SetResourceMeta updates the resource-level metadata for the resource at\n// the given address, creating the containing module state and resource state\n// as a side-effect if not already present.\nfunc (s *SyncState) SetResourceMeta(addr addrs.AbsResource, eachMode EachMode, provider addrs.AbsProviderConfig) {\n\ts.lock.Lock()\n\tdefer s.lock.Unlock()\n\n\tms := s.state.EnsureModule(addr.Module)\n\tms.SetResourceMeta(addr.Resource, eachMode, provider)\n}\n\n// RemoveResource removes the entire state for the given resource, taking with\n// it any instances associated with the resource. This should generally be\n// called only for resource objects whose instances have all been destroyed,\n// but that is not enforced by this method. (Use RemoveResourceIfEmpty instead\n// to safely check first.)\nfunc (s *SyncState) RemoveResource(addr addrs.AbsResource) {\n\ts.lock.Lock()\n\tdefer s.lock.Unlock()\n\n\tms := s.state.EnsureModule(addr.Module)\n\tms.RemoveResource(addr.Resource)\n\ts.maybePruneModule(addr.Module)\n}\n\n// RemoveResourceIfEmpty is similar to RemoveResource but first checks to\n// make sure there are no instances or objects left in the resource.\n//\n// Returns true if the resource was removed, or false if remaining child\n// objects prevented its removal. Returns true also if the resource was\n// already absent, and thus no action needed to be taken.\nfunc (s *SyncState) RemoveResourceIfEmpty(addr addrs.AbsResource) bool {\n\ts.lock.Lock()\n\tdefer s.lock.Unlock()\n\n\tms := s.state.Module(addr.Module)\n\tif ms == nil {\n\t\treturn true // nothing to do\n\t}\n\trs := ms.Resource(addr.Resource)\n\tif rs == nil {\n\t\treturn true // nothing to do\n\t}\n\tif len(rs.Instances) != 0 {\n\t\t// We don't check here for the possibility of instances that exist\n\t\t// but don't have any objects because it's the responsibility of the\n\t\t// instance-mutation methods to prune those away automatically.\n\t\treturn false\n\t}\n\tms.RemoveResource(addr.Resource)\n\ts.maybePruneModule(addr.Module)\n\treturn true\n}\n\n// MaybeFixUpResourceInstanceAddressForCount deals with the situation where a\n// resource has changed from having \"count\" set to not set, or vice-versa, and\n// so we need to rename the zeroth instance key to no key at all, or vice-versa.\n//\n// Set countEnabled to true if the resource has count set in its new\n// configuration, or false if it does not.\n//\n// The state is modified in-place if necessary, moving a resource instance\n// between the two addresses. The return value is true if a change was made,\n// and false otherwise.\nfunc (s *SyncState) MaybeFixUpResourceInstanceAddressForCount(addr addrs.AbsResource, countEnabled bool) bool {\n\ts.lock.Lock()\n\tdefer s.lock.Unlock()\n\n\tms := s.state.Module(addr.Module)\n\tif ms == nil {\n\t\treturn false\n\t}\n\n\trelAddr := addr.Resource\n\trs := ms.Resource(relAddr)\n\tif rs == nil {\n\t\treturn false\n\t}\n\thuntKey := addrs.NoKey\n\treplaceKey := addrs.InstanceKey(addrs.IntKey(0))\n\tif !countEnabled {\n\t\thuntKey, replaceKey = replaceKey, huntKey\n\t}\n\n\tis, exists := rs.Instances[huntKey]\n\tif !exists {\n\t\treturn false\n\t}\n\n\tif _, exists := rs.Instances[replaceKey]; exists {\n\t\t// If the replacement key also exists then we'll do nothing and keep both.\n\t\treturn false\n\t}\n\n\t// If we get here then we need to \"rename\" from hunt to replace\n\trs.Instances[replaceKey] = is\n\tdelete(rs.Instances, huntKey)\n\treturn true\n}\n\n// SetResourceInstanceCurrent saves the given instance object as the current\n// generation of the resource instance with the given address, simulataneously\n// updating the recorded provider configuration address, dependencies, and\n// resource EachMode.\n//\n// Any existing current instance object for the given resource is overwritten.\n// Set obj to nil to remove the primary generation object altogether. If there\n// are no deposed objects then the instance as a whole will be removed, which\n// may in turn also remove the containing module if it becomes empty.\n//\n// The caller must ensure that the given ResourceInstanceObject is not\n// concurrently mutated during this call, but may be freely used again once\n// this function returns.\n//\n// The provider address and \"each mode\" are resource-wide settings and so they\n// are updated for all other instances of the same resource as a side-effect of\n// this call.\n//\n// If the containing module for this resource or the resource itself are not\n// already tracked in state then they will be added as a side-effect.\nfunc (s *SyncState) SetResourceInstanceCurrent(addr addrs.AbsResourceInstance, obj *ResourceInstanceObjectSrc, provider addrs.AbsProviderConfig) {\n\ts.lock.Lock()\n\tdefer s.lock.Unlock()\n\n\tms := s.state.EnsureModule(addr.Module)\n\tms.SetResourceInstanceCurrent(addr.Resource, obj.DeepCopy(), provider)\n\ts.maybePruneModule(addr.Module)\n}\n\n// SetResourceInstanceDeposed saves the given instance object as a deposed\n// generation of the resource instance with the given address and deposed key.\n//\n// Call this method only for pre-existing deposed objects that already have\n// a known DeposedKey. For example, this method is useful if reloading objects\n// that were persisted to a state file. To mark the current object as deposed,\n// use DeposeResourceInstanceObject instead.\n//\n// The caller must ensure that the given ResourceInstanceObject is not\n// concurrently mutated during this call, but may be freely used again once\n// this function returns.\n//\n// The resource that contains the given instance must already exist in the\n// state, or this method will panic. Use Resource to check first if its\n// presence is not already guaranteed.\n//\n// Any existing current instance object for the given resource and deposed key\n// is overwritten. Set obj to nil to remove the deposed object altogether. If\n// the instance is left with no objects after this operation then it will\n// be removed from its containing resource altogether.\n//\n// If the containing module for this resource or the resource itself are not\n// already tracked in state then they will be added as a side-effect.\nfunc (s *SyncState) SetResourceInstanceDeposed(addr addrs.AbsResourceInstance, key DeposedKey, obj *ResourceInstanceObjectSrc, provider addrs.AbsProviderConfig) {\n\ts.lock.Lock()\n\tdefer s.lock.Unlock()\n\n\tms := s.state.EnsureModule(addr.Module)\n\tms.SetResourceInstanceDeposed(addr.Resource, key, obj.DeepCopy(), provider)\n\ts.maybePruneModule(addr.Module)\n}\n\n// DeposeResourceInstanceObject moves the current instance object for the\n// given resource instance address into the deposed set, leaving the instance\n// without a current object.\n//\n// The return value is the newly-allocated deposed key, or NotDeposed if the\n// given instance is already lacking a current object.\n//\n// If the containing module for this resource or the resource itself are not\n// already tracked in state then there cannot be a current object for the\n// given instance, and so NotDeposed will be returned without modifying the\n// state at all.\nfunc (s *SyncState) DeposeResourceInstanceObject(addr addrs.AbsResourceInstance) DeposedKey {\n\ts.lock.Lock()\n\tdefer s.lock.Unlock()\n\n\tms := s.state.Module(addr.Module)\n\tif ms == nil {\n\t\treturn NotDeposed\n\t}\n\n\treturn ms.deposeResourceInstanceObject(addr.Resource, NotDeposed)\n}\n\n// DeposeResourceInstanceObjectForceKey is like DeposeResourceInstanceObject\n// but uses a pre-allocated key. It's the caller's responsibility to ensure\n// that there aren't any races to use a particular key; this method will panic\n// if the given key is already in use.\nfunc (s *SyncState) DeposeResourceInstanceObjectForceKey(addr addrs.AbsResourceInstance, forcedKey DeposedKey) {\n\ts.lock.Lock()\n\tdefer s.lock.Unlock()\n\n\tif forcedKey == NotDeposed {\n\t\t// Usage error: should use DeposeResourceInstanceObject in this case\n\t\tpanic(\"DeposeResourceInstanceObjectForceKey called without forced key\")\n\t}\n\n\tms := s.state.Module(addr.Module)\n\tif ms == nil {\n\t\treturn // Nothing to do, since there can't be any current object either.\n\t}\n\n\tms.deposeResourceInstanceObject(addr.Resource, forcedKey)\n}\n\n// ForgetResourceInstanceAll removes the record of all objects associated with\n// the specified resource instance, if present. If not present, this is a no-op.\nfunc (s *SyncState) ForgetResourceInstanceAll(addr addrs.AbsResourceInstance) {\n\ts.lock.Lock()\n\tdefer s.lock.Unlock()\n\n\tms := s.state.Module(addr.Module)\n\tif ms == nil {\n\t\treturn\n\t}\n\tms.ForgetResourceInstanceAll(addr.Resource)\n\ts.maybePruneModule(addr.Module)\n}\n\n// ForgetResourceInstanceDeposed removes the record of the deposed object with\n// the given address and key, if present. If not present, this is a no-op.\nfunc (s *SyncState) ForgetResourceInstanceDeposed(addr addrs.AbsResourceInstance, key DeposedKey) {\n\ts.lock.Lock()\n\tdefer s.lock.Unlock()\n\n\tms := s.state.Module(addr.Module)\n\tif ms == nil {\n\t\treturn\n\t}\n\tms.ForgetResourceInstanceDeposed(addr.Resource, key)\n\ts.maybePruneModule(addr.Module)\n}\n\n// MaybeRestoreResourceInstanceDeposed will restore the deposed object with the\n// given key on the specified resource as the current object for that instance\n// if and only if that would not cause us to forget an existing current\n// object for that instance.\n//\n// Returns true if the object was restored to current, or false if no change\n// was made at all.\nfunc (s *SyncState) MaybeRestoreResourceInstanceDeposed(addr addrs.AbsResourceInstance, key DeposedKey) bool {\n\ts.lock.Lock()\n\tdefer s.lock.Unlock()\n\n\tif key == NotDeposed {\n\t\tpanic(\"MaybeRestoreResourceInstanceDeposed called without DeposedKey\")\n\t}\n\n\tms := s.state.Module(addr.Module)\n\tif ms == nil {\n\t\t// Nothing to do, since the specified deposed object cannot exist.\n\t\treturn false\n\t}\n\n\treturn ms.maybeRestoreResourceInstanceDeposed(addr.Resource, key)\n}\n\n// RemovePlannedResourceInstanceObjects removes from the state any resource\n// instance objects that have the status ObjectPlanned, indiciating that they\n// are just transient placeholders created during planning.\n//\n// Note that this does not restore any \"ready\" or \"tainted\" object that might\n// have been present before the planned object was written. The only real use\n// for this method is in preparing the state created during a refresh walk,\n// where we run the planning step for certain instances just to create enough\n// information to allow correct expression evaluation within provider and\n// data resource blocks. Discarding planned instances in that case is okay\n// because the refresh phase only creates planned objects to stand in for\n// objects that don't exist yet, and thus the planned object must have been\n// absent before by definition.\nfunc (s *SyncState) RemovePlannedResourceInstanceObjects() {\n\t// TODO: Merge together the refresh and plan phases into a single walk,\n\t// so we can remove the need to create this \"partial plan\" during refresh\n\t// that we then need to clean up before proceeding.\n\n\ts.lock.Lock()\n\tdefer s.lock.Unlock()\n\n\tfor _, ms := range s.state.Modules {\n\t\tmoduleAddr := ms.Addr\n\n\t\tfor _, rs := range ms.Resources {\n\t\t\tresAddr := rs.Addr\n\n\t\t\tfor ik, is := range rs.Instances {\n\t\t\t\tinstAddr := resAddr.Instance(ik)\n\n\t\t\t\tif is.Current != nil && is.Current.Status == ObjectPlanned {\n\t\t\t\t\t// Setting the current instance to nil removes it from the\n\t\t\t\t\t// state altogether if there are not also deposed instances.\n\t\t\t\t\tms.SetResourceInstanceCurrent(instAddr, nil, rs.ProviderConfig)\n\t\t\t\t}\n\n\t\t\t\tfor dk, obj := range is.Deposed {\n\t\t\t\t\t// Deposed objects should never be \"planned\", but we'll\n\t\t\t\t\t// do this anyway for the sake of completeness.\n\t\t\t\t\tif obj.Status == ObjectPlanned {\n\t\t\t\t\t\tms.ForgetResourceInstanceDeposed(instAddr, dk)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// We may have deleted some objects, which means that we may have\n\t\t// left a module empty, and so we must prune to preserve the invariant\n\t\t// that only the root module is allowed to be empty.\n\t\ts.maybePruneModule(moduleAddr)\n\t}\n}\n\n// Lock acquires an explicit lock on the state, allowing direct read and write\n// access to the returned state object. The caller must call Unlock once\n// access is no longer needed, and then immediately discard the state pointer\n// pointer.\n//\n// Most callers should not use this. Instead, use the concurrency-safe\n// accessors and mutators provided directly on SyncState.\nfunc (s *SyncState) Lock() *State {\n\ts.lock.Lock()\n\treturn s.state\n}\n\n// Unlock releases a lock previously acquired by Lock, at which point the\n// caller must cease all use of the state pointer that was returned.\n//\n// Do not call this method except to end an explicit lock acquired by\n// Lock. If a caller calls Unlock without first holding the lock, behavior\n// is undefined.\nfunc (s *SyncState) Unlock() {\n\ts.lock.Unlock()\n}\n\n// maybePruneModule will remove a module from the state altogether if it is\n// empty, unless it's the root module which must always be present.\n//\n// This helper method is not concurrency-safe on its own, so must only be\n// called while the caller is already holding the lock for writing.\nfunc (s *SyncState) maybePruneModule(addr addrs.ModuleInstance) {\n\tif addr.IsRoot() {\n\t\t// We never prune the root.\n\t\treturn\n\t}\n\n\tms := s.state.Module(addr)\n\tif ms == nil {\n\t\treturn\n\t}\n\n\tif ms.empty() {\n\t\tlog.Printf(\"[TRACE] states.SyncState: pruning %s because it is empty\", addr)\n\t\ts.state.RemoveModule(addr)\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/svchost/auth/cache.go",
    "content": "package auth\n\nimport (\n\t\"github.com/hashicorp/terraform/svchost\"\n)\n\n// CachingCredentialsSource creates a new credentials source that wraps another\n// and caches its results in memory, on a per-hostname basis.\n//\n// No means is provided for expiration of cached credentials, so a caching\n// credentials source should have a limited lifetime (one Terraform operation,\n// for example) to ensure that time-limited credentials don't expire before\n// their cache entries do.\nfunc CachingCredentialsSource(source CredentialsSource) CredentialsSource {\n\treturn &cachingCredentialsSource{\n\t\tsource: source,\n\t\tcache:  map[svchost.Hostname]HostCredentials{},\n\t}\n}\n\ntype cachingCredentialsSource struct {\n\tsource CredentialsSource\n\tcache  map[svchost.Hostname]HostCredentials\n}\n\n// ForHost passes the given hostname on to the wrapped credentials source and\n// caches the result to return for future requests with the same hostname.\n//\n// Both credentials and non-credentials (nil) responses are cached.\n//\n// No cache entry is created if the wrapped source returns an error, to allow\n// the caller to retry the failing operation.\nfunc (s *cachingCredentialsSource) ForHost(host svchost.Hostname) (HostCredentials, error) {\n\tif cache, cached := s.cache[host]; cached {\n\t\treturn cache, nil\n\t}\n\n\tresult, err := s.source.ForHost(host)\n\tif err != nil {\n\t\treturn result, err\n\t}\n\n\ts.cache[host] = result\n\treturn result, nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/svchost/auth/credentials.go",
    "content": "// Package auth contains types and functions to manage authentication\n// credentials for service hosts.\npackage auth\n\nimport (\n\t\"net/http\"\n\n\t\"github.com/hashicorp/terraform/svchost\"\n)\n\n// Credentials is a list of CredentialsSource objects that can be tried in\n// turn until one returns credentials for a host, or one returns an error.\n//\n// A Credentials is itself a CredentialsSource, wrapping its members.\n// In principle one CredentialsSource can be nested inside another, though\n// there is no good reason to do so.\ntype Credentials []CredentialsSource\n\n// NoCredentials is an empty CredentialsSource that always returns nil\n// when asked for credentials.\nvar NoCredentials CredentialsSource = Credentials{}\n\n// A CredentialsSource is an object that may be able to provide credentials\n// for a given host.\n//\n// Credentials lookups are not guaranteed to be concurrency-safe. Callers\n// using these facilities in concurrent code must use external concurrency\n// primitives to prevent race conditions.\ntype CredentialsSource interface {\n\t// ForHost returns a non-nil HostCredentials if the source has credentials\n\t// available for the host, and a nil HostCredentials if it does not.\n\t//\n\t// If an error is returned, progress through a list of CredentialsSources\n\t// is halted and the error is returned to the user.\n\tForHost(host svchost.Hostname) (HostCredentials, error)\n}\n\n// HostCredentials represents a single set of credentials for a particular\n// host.\ntype HostCredentials interface {\n\t// PrepareRequest modifies the given request in-place to apply the\n\t// receiving credentials. The usual behavior of this method is to\n\t// add some sort of Authorization header to the request.\n\tPrepareRequest(req *http.Request)\n\n\t// Token returns the authentication token.\n\tToken() string\n}\n\n// ForHost iterates over the contained CredentialsSource objects and\n// tries to obtain credentials for the given host from each one in turn.\n//\n// If any source returns either a non-nil HostCredentials or a non-nil error\n// then this result is returned. Otherwise, the result is nil, nil.\nfunc (c Credentials) ForHost(host svchost.Hostname) (HostCredentials, error) {\n\tfor _, source := range c {\n\t\tcreds, err := source.ForHost(host)\n\t\tif creds != nil || err != nil {\n\t\t\treturn creds, err\n\t\t}\n\t}\n\treturn nil, nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/svchost/auth/from_map.go",
    "content": "package auth\n\n// HostCredentialsFromMap converts a map of key-value pairs from a credentials\n// definition provided by the user (e.g. in a config file, or via a credentials\n// helper) into a HostCredentials object if possible, or returns nil if\n// no credentials could be extracted from the map.\n//\n// This function ignores map keys it is unfamiliar with, to allow for future\n// expansion of the credentials map format for new credential types.\nfunc HostCredentialsFromMap(m map[string]interface{}) HostCredentials {\n\tif m == nil {\n\t\treturn nil\n\t}\n\tif token, ok := m[\"token\"].(string); ok {\n\t\treturn HostCredentialsToken(token)\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/svchost/auth/helper_program.go",
    "content": "package auth\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\n\t\"github.com/hashicorp/terraform/svchost\"\n)\n\ntype helperProgramCredentialsSource struct {\n\texecutable string\n\targs       []string\n}\n\n// HelperProgramCredentialsSource returns a CredentialsSource that runs the\n// given program with the given arguments in order to obtain credentials.\n//\n// The given executable path must be an absolute path; it is the caller's\n// responsibility to validate and process a relative path or other input\n// provided by an end-user. If the given path is not absolute, this\n// function will panic.\n//\n// When credentials are requested, the program will be run in a child process\n// with the given arguments along with two additional arguments added to the\n// end of the list: the literal string \"get\", followed by the requested\n// hostname in ASCII compatibility form (punycode form).\nfunc HelperProgramCredentialsSource(executable string, args ...string) CredentialsSource {\n\tif !filepath.IsAbs(executable) {\n\t\tpanic(\"NewCredentialsSourceHelperProgram requires absolute path to executable\")\n\t}\n\n\tfullArgs := make([]string, len(args)+1)\n\tfullArgs[0] = executable\n\tcopy(fullArgs[1:], args)\n\n\treturn &helperProgramCredentialsSource{\n\t\texecutable: executable,\n\t\targs:       fullArgs,\n\t}\n}\n\nfunc (s *helperProgramCredentialsSource) ForHost(host svchost.Hostname) (HostCredentials, error) {\n\targs := make([]string, len(s.args), len(s.args)+2)\n\tcopy(args, s.args)\n\targs = append(args, \"get\")\n\targs = append(args, string(host))\n\n\toutBuf := bytes.Buffer{}\n\terrBuf := bytes.Buffer{}\n\n\tcmd := exec.Cmd{\n\t\tPath:   s.executable,\n\t\tArgs:   args,\n\t\tStdin:  nil,\n\t\tStdout: &outBuf,\n\t\tStderr: &errBuf,\n\t}\n\terr := cmd.Run()\n\tif _, isExitErr := err.(*exec.ExitError); isExitErr {\n\t\terrText := errBuf.String()\n\t\tif errText == \"\" {\n\t\t\t// Shouldn't happen for a well-behaved helper program\n\t\t\treturn nil, fmt.Errorf(\"error in %s, but it produced no error message\", s.executable)\n\t\t}\n\t\treturn nil, fmt.Errorf(\"error in %s: %s\", s.executable, errText)\n\t} else if err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to run %s: %s\", s.executable, err)\n\t}\n\n\tvar m map[string]interface{}\n\terr = json.Unmarshal(outBuf.Bytes(), &m)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"malformed output from %s: %s\", s.executable, err)\n\t}\n\n\treturn HostCredentialsFromMap(m), nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/svchost/auth/static.go",
    "content": "package auth\n\nimport (\n\t\"github.com/hashicorp/terraform/svchost\"\n)\n\n// StaticCredentialsSource is a credentials source that retrieves credentials\n// from the provided map. It returns nil if a requested hostname is not\n// present in the map.\n//\n// The caller should not modify the given map after passing it to this function.\nfunc StaticCredentialsSource(creds map[svchost.Hostname]map[string]interface{}) CredentialsSource {\n\treturn staticCredentialsSource(creds)\n}\n\ntype staticCredentialsSource map[svchost.Hostname]map[string]interface{}\n\nfunc (s staticCredentialsSource) ForHost(host svchost.Hostname) (HostCredentials, error) {\n\tif s == nil {\n\t\treturn nil, nil\n\t}\n\n\tif m, exists := s[host]; exists {\n\t\treturn HostCredentialsFromMap(m), nil\n\t}\n\n\treturn nil, nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/svchost/auth/token_credentials.go",
    "content": "package auth\n\nimport (\n\t\"net/http\"\n)\n\n// HostCredentialsToken is a HostCredentials implementation that represents a\n// single \"bearer token\", to be sent to the server via an Authorization header\n// with the auth type set to \"Bearer\"\ntype HostCredentialsToken string\n\n// PrepareRequest alters the given HTTP request by setting its Authorization\n// header to the string \"Bearer \" followed by the encapsulated authentication\n// token.\nfunc (tc HostCredentialsToken) PrepareRequest(req *http.Request) {\n\tif req.Header == nil {\n\t\treq.Header = http.Header{}\n\t}\n\treq.Header.Set(\"Authorization\", \"Bearer \"+string(tc))\n}\n\n// Token returns the authentication token.\nfunc (tc HostCredentialsToken) Token() string {\n\treturn string(tc)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/svchost/disco/disco.go",
    "content": "// Package disco handles Terraform's remote service discovery protocol.\n//\n// This protocol allows mapping from a service hostname, as produced by the\n// svchost package, to a set of services supported by that host and the\n// endpoint information for each supported service.\npackage disco\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"log\"\n\t\"mime\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"time\"\n\n\tcleanhttp \"github.com/hashicorp/go-cleanhttp\"\n\t\"github.com/hashicorp/terraform/httpclient\"\n\t\"github.com/hashicorp/terraform/svchost\"\n\t\"github.com/hashicorp/terraform/svchost/auth\"\n)\n\nconst (\n\t// Fixed path to the discovery manifest.\n\tdiscoPath = \"/.well-known/terraform.json\"\n\n\t// Arbitrary-but-small number to prevent runaway redirect loops.\n\tmaxRedirects = 3\n\n\t// Arbitrary-but-small time limit to prevent UI \"hangs\" during discovery.\n\tdiscoTimeout = 11 * time.Second\n\n\t// 1MB - to prevent abusive services from using loads of our memory.\n\tmaxDiscoDocBytes = 1 * 1024 * 1024\n)\n\n// httpTransport is overridden during tests, to skip TLS verification.\nvar httpTransport = cleanhttp.DefaultPooledTransport()\n\n// Disco is the main type in this package, which allows discovery on given\n// hostnames and caches the results by hostname to avoid repeated requests\n// for the same information.\ntype Disco struct {\n\thostCache map[svchost.Hostname]*Host\n\tcredsSrc  auth.CredentialsSource\n\n\t// Transport is a custom http.RoundTripper to use.\n\tTransport http.RoundTripper\n}\n\n// New returns a new initialized discovery object.\nfunc New() *Disco {\n\treturn NewWithCredentialsSource(nil)\n}\n\n// NewWithCredentialsSource returns a new discovery object initialized with\n// the given credentials source.\nfunc NewWithCredentialsSource(credsSrc auth.CredentialsSource) *Disco {\n\treturn &Disco{\n\t\thostCache: make(map[svchost.Hostname]*Host),\n\t\tcredsSrc:  credsSrc,\n\t\tTransport: httpTransport,\n\t}\n}\n\n// SetCredentialsSource provides a credentials source that will be used to\n// add credentials to outgoing discovery requests, where available.\n//\n// If this method is never called, no outgoing discovery requests will have\n// credentials.\nfunc (d *Disco) SetCredentialsSource(src auth.CredentialsSource) {\n\td.credsSrc = src\n}\n\n// CredentialsForHost returns a non-nil HostCredentials if the embedded source has\n// credentials available for the host, and a nil HostCredentials if it does not.\nfunc (d *Disco) CredentialsForHost(hostname svchost.Hostname) (auth.HostCredentials, error) {\n\tif d.credsSrc == nil {\n\t\treturn nil, nil\n\t}\n\treturn d.credsSrc.ForHost(hostname)\n}\n\n// ForceHostServices provides a pre-defined set of services for a given\n// host, which prevents the receiver from attempting network-based discovery\n// for the given host. Instead, the given services map will be returned\n// verbatim.\n//\n// When providing \"forced\" services, any relative URLs are resolved against\n// the initial discovery URL that would have been used for network-based\n// discovery, yielding the same results as if the given map were published\n// at the host's default discovery URL, though using absolute URLs is strongly\n// recommended to make the configured behavior more explicit.\nfunc (d *Disco) ForceHostServices(hostname svchost.Hostname, services map[string]interface{}) {\n\tif services == nil {\n\t\tservices = map[string]interface{}{}\n\t}\n\n\td.hostCache[hostname] = &Host{\n\t\tdiscoURL: &url.URL{\n\t\t\tScheme: \"https\",\n\t\t\tHost:   string(hostname),\n\t\t\tPath:   discoPath,\n\t\t},\n\t\thostname:  hostname.ForDisplay(),\n\t\tservices:  services,\n\t\ttransport: d.Transport,\n\t}\n}\n\n// Discover runs the discovery protocol against the given hostname (which must\n// already have been validated and prepared with svchost.ForComparison) and\n// returns an object describing the services available at that host.\n//\n// If a given hostname supports no Terraform services at all, a non-nil but\n// empty Host object is returned. When giving feedback to the end user about\n// such situations, we say \"host <name> does not provide a <service> service\",\n// regardless of whether that is due to that service specifically being absent\n// or due to the host not providing Terraform services at all, since we don't\n// wish to expose the detail of whole-host discovery to an end-user.\nfunc (d *Disco) Discover(hostname svchost.Hostname) (*Host, error) {\n\tif host, cached := d.hostCache[hostname]; cached {\n\t\treturn host, nil\n\t}\n\n\thost, err := d.discover(hostname)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\td.hostCache[hostname] = host\n\n\treturn host, nil\n}\n\n// DiscoverServiceURL is a convenience wrapper for discovery on a given\n// hostname and then looking up a particular service in the result.\nfunc (d *Disco) DiscoverServiceURL(hostname svchost.Hostname, serviceID string) (*url.URL, error) {\n\thost, err := d.Discover(hostname)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn host.ServiceURL(serviceID)\n}\n\n// discover implements the actual discovery process, with its result cached\n// by the public-facing Discover method.\nfunc (d *Disco) discover(hostname svchost.Hostname) (*Host, error) {\n\tdiscoURL := &url.URL{\n\t\tScheme: \"https\",\n\t\tHost:   hostname.String(),\n\t\tPath:   discoPath,\n\t}\n\n\tclient := &http.Client{\n\t\tTransport: d.Transport,\n\t\tTimeout:   discoTimeout,\n\n\t\tCheckRedirect: func(req *http.Request, via []*http.Request) error {\n\t\t\tlog.Printf(\"[DEBUG] Service discovery redirected to %s\", req.URL)\n\t\t\tif len(via) > maxRedirects {\n\t\t\t\treturn errors.New(\"too many redirects\") // this error will never actually be seen\n\t\t\t}\n\t\t\treturn nil\n\t\t},\n\t}\n\n\treq := &http.Request{\n\t\tHeader: make(http.Header),\n\t\tMethod: \"GET\",\n\t\tURL:    discoURL,\n\t}\n\treq.Header.Set(\"Accept\", \"application/json\")\n\treq.Header.Set(\"User-Agent\", httpclient.UserAgentString())\n\n\tcreds, err := d.CredentialsForHost(hostname)\n\tif err != nil {\n\t\tlog.Printf(\"[WARN] Failed to get credentials for %s: %s (ignoring)\", hostname, err)\n\t}\n\tif creds != nil {\n\t\t// Update the request to include credentials.\n\t\tcreds.PrepareRequest(req)\n\t}\n\n\tlog.Printf(\"[DEBUG] Service discovery for %s at %s\", hostname, discoURL)\n\n\tresp, err := client.Do(req)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"Failed to request discovery document: %v\", err)\n\t}\n\tdefer resp.Body.Close()\n\n\thost := &Host{\n\t\t// Use the discovery URL from resp.Request in\n\t\t// case the client followed any redirects.\n\t\tdiscoURL:  resp.Request.URL,\n\t\thostname:  hostname.ForDisplay(),\n\t\ttransport: d.Transport,\n\t}\n\n\t// Return the host without any services.\n\tif resp.StatusCode == 404 {\n\t\treturn host, nil\n\t}\n\n\tif resp.StatusCode != 200 {\n\t\treturn nil, fmt.Errorf(\"Failed to request discovery document: %s\", resp.Status)\n\t}\n\n\tcontentType := resp.Header.Get(\"Content-Type\")\n\tmediaType, _, err := mime.ParseMediaType(contentType)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"Discovery URL has a malformed Content-Type %q\", contentType)\n\t}\n\tif mediaType != \"application/json\" {\n\t\treturn nil, fmt.Errorf(\"Discovery URL returned an unsupported Content-Type %q\", mediaType)\n\t}\n\n\t// This doesn't catch chunked encoding, because ContentLength is -1 in that case.\n\tif resp.ContentLength > maxDiscoDocBytes {\n\t\t// Size limit here is not a contractual requirement and so we may\n\t\t// adjust it over time if we find a different limit is warranted.\n\t\treturn nil, fmt.Errorf(\n\t\t\t\"Discovery doc response is too large (got %d bytes; limit %d)\",\n\t\t\tresp.ContentLength, maxDiscoDocBytes,\n\t\t)\n\t}\n\n\t// If the response is using chunked encoding then we can't predict its\n\t// size, but we'll at least prevent reading the entire thing into memory.\n\tlr := io.LimitReader(resp.Body, maxDiscoDocBytes)\n\n\tservicesBytes, err := ioutil.ReadAll(lr)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"Error reading discovery document body: %v\", err)\n\t}\n\n\tvar services map[string]interface{}\n\terr = json.Unmarshal(servicesBytes, &services)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"Failed to decode discovery document as a JSON object: %v\", err)\n\t}\n\thost.services = services\n\n\treturn host, nil\n}\n\n// Forget invalidates any cached record of the given hostname. If the host\n// has no cache entry then this is a no-op.\nfunc (d *Disco) Forget(hostname svchost.Hostname) {\n\tdelete(d.hostCache, hostname)\n}\n\n// ForgetAll is like Forget, but for all of the hostnames that have cache entries.\nfunc (d *Disco) ForgetAll() {\n\td.hostCache = make(map[svchost.Hostname]*Host)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/svchost/disco/host.go",
    "content": "package disco\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"log\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"os\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/hashicorp/go-version\"\n\t\"github.com/hashicorp/terraform/httpclient\"\n)\n\nconst versionServiceID = \"versions.v1\"\n\n// Host represents a service discovered host.\ntype Host struct {\n\tdiscoURL  *url.URL\n\thostname  string\n\tservices  map[string]interface{}\n\ttransport http.RoundTripper\n}\n\n// Constraints represents the version constraints of a service.\ntype Constraints struct {\n\tService   string   `json:\"service\"`\n\tProduct   string   `json:\"product\"`\n\tMinimum   string   `json:\"minimum\"`\n\tMaximum   string   `json:\"maximum\"`\n\tExcluding []string `json:\"excluding\"`\n}\n\n// ErrServiceNotProvided is returned when the service is not provided.\ntype ErrServiceNotProvided struct {\n\thostname string\n\tservice  string\n}\n\n// Error returns a customized error message.\nfunc (e *ErrServiceNotProvided) Error() string {\n\tif e.hostname == \"\" {\n\t\treturn fmt.Sprintf(\"host does not provide a %s service\", e.service)\n\t}\n\treturn fmt.Sprintf(\"host %s does not provide a %s service\", e.hostname, e.service)\n}\n\n// ErrVersionNotSupported is returned when the version is not supported.\ntype ErrVersionNotSupported struct {\n\thostname string\n\tservice  string\n\tversion  string\n}\n\n// Error returns a customized error message.\nfunc (e *ErrVersionNotSupported) Error() string {\n\tif e.hostname == \"\" {\n\t\treturn fmt.Sprintf(\"host does not support %s version %s\", e.service, e.version)\n\t}\n\treturn fmt.Sprintf(\"host %s does not support %s version %s\", e.hostname, e.service, e.version)\n}\n\n// ErrNoVersionConstraints is returned when checkpoint was disabled\n// or the endpoint to query for version constraints was unavailable.\ntype ErrNoVersionConstraints struct {\n\tdisabled bool\n}\n\n// Error returns a customized error message.\nfunc (e *ErrNoVersionConstraints) Error() string {\n\tif e.disabled {\n\t\treturn \"checkpoint disabled\"\n\t}\n\treturn \"unable to contact versions service\"\n}\n\n// ServiceURL returns the URL associated with the given service identifier,\n// which should be of the form \"servicename.vN\".\n//\n// A non-nil result is always an absolute URL with a scheme of either HTTPS\n// or HTTP.\nfunc (h *Host) ServiceURL(id string) (*url.URL, error) {\n\tsvc, ver, err := parseServiceID(id)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// No services supported for an empty Host.\n\tif h == nil || h.services == nil {\n\t\treturn nil, &ErrServiceNotProvided{service: svc}\n\t}\n\n\turlStr, ok := h.services[id].(string)\n\tif !ok {\n\t\t// See if we have a matching service as that would indicate\n\t\t// the service is supported, but not the requested version.\n\t\tfor serviceID := range h.services {\n\t\t\tif strings.HasPrefix(serviceID, svc+\".\") {\n\t\t\t\treturn nil, &ErrVersionNotSupported{\n\t\t\t\t\thostname: h.hostname,\n\t\t\t\t\tservice:  svc,\n\t\t\t\t\tversion:  ver.Original(),\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// No discovered services match the requested service.\n\t\treturn nil, &ErrServiceNotProvided{hostname: h.hostname, service: svc}\n\t}\n\n\tu, err := url.Parse(urlStr)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"Failed to parse service URL: %v\", err)\n\t}\n\n\t// Make relative URLs absolute using our discovery URL.\n\tif !u.IsAbs() {\n\t\tu = h.discoURL.ResolveReference(u)\n\t}\n\n\tif u.Scheme != \"https\" && u.Scheme != \"http\" {\n\t\treturn nil, fmt.Errorf(\"Service URL is using an unsupported scheme: %s\", u.Scheme)\n\t}\n\tif u.User != nil {\n\t\treturn nil, fmt.Errorf(\"Embedded username/password information is not permitted\")\n\t}\n\n\t// Fragment part is irrelevant, since we're not a browser.\n\tu.Fragment = \"\"\n\n\treturn h.discoURL.ResolveReference(u), nil\n}\n\n// VersionConstraints returns the contraints for a given service identifier\n// (which should be of the form \"servicename.vN\") and product.\n//\n// When an exact (service and version) match is found, the constraints for\n// that service are returned.\n//\n// When the requested version is not provided but the service is, we will\n// search for all alternative versions. If mutliple alternative versions\n// are found, the contrains of the latest available version are returned.\n//\n// When a service is not provided at all an error will be returned instead.\n//\n// When checkpoint is disabled or when a 404 is returned after making the\n// HTTP call, an ErrNoVersionConstraints error will be returned.\nfunc (h *Host) VersionConstraints(id, product string) (*Constraints, error) {\n\tsvc, _, err := parseServiceID(id)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Return early if checkpoint is disabled.\n\tif disabled := os.Getenv(\"CHECKPOINT_DISABLE\"); disabled != \"\" {\n\t\treturn nil, &ErrNoVersionConstraints{disabled: true}\n\t}\n\n\t// No services supported for an empty Host.\n\tif h == nil || h.services == nil {\n\t\treturn nil, &ErrServiceNotProvided{service: svc}\n\t}\n\n\t// Try to get the service URL for the version service and\n\t// return early if the service isn't provided by the host.\n\tu, err := h.ServiceURL(versionServiceID)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Check if we have an exact (service and version) match.\n\tif _, ok := h.services[id].(string); !ok {\n\t\t// If we don't have an exact match, we search for all matching\n\t\t// services and then use the service ID of the latest version.\n\t\tvar services []string\n\t\tfor serviceID := range h.services {\n\t\t\tif strings.HasPrefix(serviceID, svc+\".\") {\n\t\t\t\tservices = append(services, serviceID)\n\t\t\t}\n\t\t}\n\n\t\tif len(services) == 0 {\n\t\t\t// No discovered services match the requested service.\n\t\t\treturn nil, &ErrServiceNotProvided{hostname: h.hostname, service: svc}\n\t\t}\n\n\t\t// Set id to the latest service ID we found.\n\t\tvar latest *version.Version\n\t\tfor _, serviceID := range services {\n\t\t\tif _, ver, err := parseServiceID(serviceID); err == nil {\n\t\t\t\tif latest == nil || latest.LessThan(ver) {\n\t\t\t\t\tid = serviceID\n\t\t\t\t\tlatest = ver\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set a default timeout of 1 sec for the versions request (in milliseconds)\n\ttimeout := 1000\n\tif v, err := strconv.Atoi(os.Getenv(\"CHECKPOINT_TIMEOUT\")); err == nil {\n\t\ttimeout = v\n\t}\n\n\tclient := &http.Client{\n\t\tTransport: h.transport,\n\t\tTimeout:   time.Duration(timeout) * time.Millisecond,\n\t}\n\n\t// Prepare the service URL by setting the service and product.\n\tv := u.Query()\n\tv.Set(\"product\", product)\n\tu.Path += id\n\tu.RawQuery = v.Encode()\n\n\t// Create a new request.\n\treq, err := http.NewRequest(\"GET\", u.String(), nil)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"Failed to create version constraints request: %v\", err)\n\t}\n\treq.Header.Set(\"Accept\", \"application/json\")\n\treq.Header.Set(\"User-Agent\", httpclient.UserAgentString())\n\n\tlog.Printf(\"[DEBUG] Retrieve version constraints for service %s and product %s\", id, product)\n\n\tresp, err := client.Do(req)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"Failed to request version constraints: %v\", err)\n\t}\n\tdefer resp.Body.Close()\n\n\tif resp.StatusCode == 404 {\n\t\treturn nil, &ErrNoVersionConstraints{disabled: false}\n\t}\n\n\tif resp.StatusCode != 200 {\n\t\treturn nil, fmt.Errorf(\"Failed to request version constraints: %s\", resp.Status)\n\t}\n\n\t// Parse the constraints from the response body.\n\tresult := &Constraints{}\n\tif err := json.NewDecoder(resp.Body).Decode(result); err != nil {\n\t\treturn nil, fmt.Errorf(\"Error parsing version constraints: %v\", err)\n\t}\n\n\treturn result, nil\n}\n\nfunc parseServiceID(id string) (string, *version.Version, error) {\n\tparts := strings.SplitN(id, \".\", 2)\n\tif len(parts) != 2 {\n\t\treturn \"\", nil, fmt.Errorf(\"Invalid service ID format (i.e. service.vN): %s\", id)\n\t}\n\n\tversion, err := version.NewVersion(parts[1])\n\tif err != nil {\n\t\treturn \"\", nil, fmt.Errorf(\"Invalid service version: %v\", err)\n\t}\n\n\treturn parts[0], version, nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/svchost/label_iter.go",
    "content": "package svchost\n\nimport (\n\t\"strings\"\n)\n\n// A labelIter allows iterating over domain name labels.\n//\n// This type is copied from golang.org/x/net/idna, where it is used\n// to segment hostnames into their separate labels for analysis. We use\n// it for the same purpose here, in ForComparison.\ntype labelIter struct {\n\torig     string\n\tslice    []string\n\tcurStart int\n\tcurEnd   int\n\ti        int\n}\n\nfunc (l *labelIter) reset() {\n\tl.curStart = 0\n\tl.curEnd = 0\n\tl.i = 0\n}\n\nfunc (l *labelIter) done() bool {\n\treturn l.curStart >= len(l.orig)\n}\n\nfunc (l *labelIter) result() string {\n\tif l.slice != nil {\n\t\treturn strings.Join(l.slice, \".\")\n\t}\n\treturn l.orig\n}\n\nfunc (l *labelIter) label() string {\n\tif l.slice != nil {\n\t\treturn l.slice[l.i]\n\t}\n\tp := strings.IndexByte(l.orig[l.curStart:], '.')\n\tl.curEnd = l.curStart + p\n\tif p == -1 {\n\t\tl.curEnd = len(l.orig)\n\t}\n\treturn l.orig[l.curStart:l.curEnd]\n}\n\n// next sets the value to the next label. It skips the last label if it is empty.\nfunc (l *labelIter) next() {\n\tl.i++\n\tif l.slice != nil {\n\t\tif l.i >= len(l.slice) || l.i == len(l.slice)-1 && l.slice[l.i] == \"\" {\n\t\t\tl.curStart = len(l.orig)\n\t\t}\n\t} else {\n\t\tl.curStart = l.curEnd + 1\n\t\tif l.curStart == len(l.orig)-1 && l.orig[l.curStart] == '.' {\n\t\t\tl.curStart = len(l.orig)\n\t\t}\n\t}\n}\n\nfunc (l *labelIter) set(s string) {\n\tif l.slice == nil {\n\t\tl.slice = strings.Split(l.orig, \".\")\n\t}\n\tl.slice[l.i] = s\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/svchost/svchost.go",
    "content": "// Package svchost deals with the representations of the so-called \"friendly\n// hostnames\" that we use to represent systems that provide Terraform-native\n// remote services, such as module registry, remote operations, etc.\n//\n// Friendly hostnames are specified such that, as much as possible, they\n// are consistent with how web browsers think of hostnames, so that users\n// can bring their intuitions about how hostnames behave when they access\n// a Terraform Enterprise instance's web UI (or indeed any other website)\n// and have this behave in a similar way.\npackage svchost\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"golang.org/x/net/idna\"\n)\n\n// Hostname is specialized name for string that indicates that the string\n// has been converted to (or was already in) the storage and comparison form.\n//\n// Hostname values are not suitable for display in the user-interface. Use\n// the ForDisplay method to obtain a form suitable for display in the UI.\n//\n// Unlike user-supplied hostnames, strings of type Hostname (assuming they\n// were constructed by a function within this package) can be compared for\n// equality using the standard Go == operator.\ntype Hostname string\n\n// acePrefix is the ASCII Compatible Encoding prefix, used to indicate that\n// a domain name label is in \"punycode\" form.\nconst acePrefix = \"xn--\"\n\n// displayProfile is a very liberal idna profile that we use to do\n// normalization for display without imposing validation rules.\nvar displayProfile = idna.New(\n\tidna.MapForLookup(),\n\tidna.Transitional(true),\n)\n\n// ForDisplay takes a user-specified hostname and returns a normalized form of\n// it suitable for display in the UI.\n//\n// If the input is so invalid that no normalization can be performed then\n// this will return the input, assuming that the caller still wants to\n// display _something_. This function is, however, more tolerant than the\n// other functions in this package and will make a best effort to prepare\n// _any_ given hostname for display.\n//\n// For validation, use either IsValid (for explicit validation) or\n// ForComparison (which implicitly validates, returning an error if invalid).\nfunc ForDisplay(given string) string {\n\tvar portPortion string\n\tif colonPos := strings.Index(given, \":\"); colonPos != -1 {\n\t\tgiven, portPortion = given[:colonPos], given[colonPos:]\n\t}\n\tportPortion, _ = normalizePortPortion(portPortion)\n\n\tascii, err := displayProfile.ToASCII(given)\n\tif err != nil {\n\t\treturn given + portPortion\n\t}\n\tdisplay, err := displayProfile.ToUnicode(ascii)\n\tif err != nil {\n\t\treturn given + portPortion\n\t}\n\treturn display + portPortion\n}\n\n// IsValid returns true if the given user-specified hostname is a valid\n// service hostname.\n//\n// Validity is determined by complying with the RFC 5891 requirements for\n// names that are valid for domain lookup (section 5), with the additional\n// requirement that user-supplied forms must not _already_ contain\n// Punycode segments.\nfunc IsValid(given string) bool {\n\t_, err := ForComparison(given)\n\treturn err == nil\n}\n\n// ForComparison takes a user-specified hostname and returns a normalized\n// form of it suitable for storage and comparison. The result is not suitable\n// for display to end-users because it uses Punycode to represent non-ASCII\n// characters, and this form is unreadable for non-ASCII-speaking humans.\n//\n// The result is typed as Hostname -- a specialized name for string -- so that\n// other APIs can make it clear within the type system whether they expect a\n// user-specified or display-form hostname or a value already normalized for\n// comparison.\n//\n// The returned Hostname is not valid if the returned error is non-nil.\nfunc ForComparison(given string) (Hostname, error) {\n\tvar portPortion string\n\tif colonPos := strings.Index(given, \":\"); colonPos != -1 {\n\t\tgiven, portPortion = given[:colonPos], given[colonPos:]\n\t}\n\n\tvar err error\n\tportPortion, err = normalizePortPortion(portPortion)\n\tif err != nil {\n\t\treturn Hostname(\"\"), err\n\t}\n\n\tif given == \"\" {\n\t\treturn Hostname(\"\"), fmt.Errorf(\"empty string is not a valid hostname\")\n\t}\n\n\t// First we'll apply our additional constraint that Punycode must not\n\t// be given directly by the user. This is not an IDN specification\n\t// requirement, but we prohibit it to force users to use human-readable\n\t// hostname forms within Terraform configuration.\n\tlabels := labelIter{orig: given}\n\tfor ; !labels.done(); labels.next() {\n\t\tlabel := labels.label()\n\t\tif label == \"\" {\n\t\t\treturn Hostname(\"\"), fmt.Errorf(\n\t\t\t\t\"hostname contains empty label (two consecutive periods)\",\n\t\t\t)\n\t\t}\n\t\tif strings.HasPrefix(label, acePrefix) {\n\t\t\treturn Hostname(\"\"), fmt.Errorf(\n\t\t\t\t\"hostname label %q specified in punycode format; service hostnames must be given in unicode\",\n\t\t\t\tlabel,\n\t\t\t)\n\t\t}\n\t}\n\n\tresult, err := idna.Lookup.ToASCII(given)\n\tif err != nil {\n\t\treturn Hostname(\"\"), err\n\t}\n\treturn Hostname(result + portPortion), nil\n}\n\n// ForDisplay returns a version of the receiver that is appropriate for display\n// in the UI. This includes converting any punycode labels to their\n// corresponding Unicode characters.\n//\n// A round-trip through ForComparison and this ForDisplay method does not\n// guarantee the same result as calling this package's top-level ForDisplay\n// function, since a round-trip through the Hostname type implies stricter\n// handling than we do when doing basic display-only processing.\nfunc (h Hostname) ForDisplay() string {\n\tgiven := string(h)\n\tvar portPortion string\n\tif colonPos := strings.Index(given, \":\"); colonPos != -1 {\n\t\tgiven, portPortion = given[:colonPos], given[colonPos:]\n\t}\n\t// We don't normalize the port portion here because we assume it's\n\t// already been normalized on the way in.\n\n\tresult, err := idna.Lookup.ToUnicode(given)\n\tif err != nil {\n\t\t// Should never happen, since type Hostname indicates that a string\n\t\t// passed through our validation rules.\n\t\tpanic(fmt.Errorf(\"ForDisplay called on invalid Hostname: %s\", err))\n\t}\n\treturn result + portPortion\n}\n\nfunc (h Hostname) String() string {\n\treturn string(h)\n}\n\nfunc (h Hostname) GoString() string {\n\treturn fmt.Sprintf(\"svchost.Hostname(%q)\", string(h))\n}\n\n// normalizePortPortion attempts to normalize the \"port portion\" of a hostname,\n// which begins with the first colon in the hostname and should be followed\n// by a string of decimal digits.\n//\n// If the port portion is valid, a normalized version of it is returned along\n// with a nil error.\n//\n// If the port portion is invalid, the input string is returned verbatim along\n// with a non-nil error.\n//\n// An empty string is a valid port portion representing the absense of a port.\n// If non-empty, the first character must be a colon.\nfunc normalizePortPortion(s string) (string, error) {\n\tif s == \"\" {\n\t\treturn s, nil\n\t}\n\n\tif s[0] != ':' {\n\t\t// should never happen, since caller tends to guarantee the presence\n\t\t// of a colon due to how it's extracted from the string.\n\t\treturn s, errors.New(\"port portion is missing its initial colon\")\n\t}\n\n\tnumStr := s[1:]\n\tnum, err := strconv.Atoi(numStr)\n\tif err != nil {\n\t\treturn s, errors.New(\"port portion contains non-digit characters\")\n\t}\n\tif num == 443 {\n\t\treturn \"\", nil // \":443\" is the default\n\t}\n\tif num > 65535 {\n\t\treturn s, errors.New(\"port number is greater than 65535\")\n\t}\n\treturn fmt.Sprintf(\":%d\", num), nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/context.go",
    "content": "package terraform\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"fmt\"\n\t\"log\"\n\t\"strings\"\n\t\"sync\"\n\n\t\"github.com/hashicorp/hcl\"\n\t\"github.com/zclconf/go-cty/cty\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/config\"\n\t\"github.com/hashicorp/terraform/configs\"\n\t\"github.com/hashicorp/terraform/lang\"\n\t\"github.com/hashicorp/terraform/plans\"\n\t\"github.com/hashicorp/terraform/providers\"\n\t\"github.com/hashicorp/terraform/provisioners\"\n\t\"github.com/hashicorp/terraform/states\"\n\t\"github.com/hashicorp/terraform/states/statefile\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n)\n\n// InputMode defines what sort of input will be asked for when Input\n// is called on Context.\ntype InputMode byte\n\nconst (\n\t// InputModeVar asks for all variables\n\tInputModeVar InputMode = 1 << iota\n\n\t// InputModeVarUnset asks for variables which are not set yet.\n\t// InputModeVar must be set for this to have an effect.\n\tInputModeVarUnset\n\n\t// InputModeProvider asks for provider variables\n\tInputModeProvider\n\n\t// InputModeStd is the standard operating mode and asks for both variables\n\t// and providers.\n\tInputModeStd = InputModeVar | InputModeProvider\n)\n\nvar (\n\t// contextFailOnShadowError will cause Context operations to return\n\t// errors when shadow operations fail. This is only used for testing.\n\tcontextFailOnShadowError = false\n\n\t// contextTestDeepCopyOnPlan will perform a Diff DeepCopy on every\n\t// Plan operation, effectively testing the Diff DeepCopy whenever\n\t// a Plan occurs. This is enabled for tests.\n\tcontextTestDeepCopyOnPlan = false\n)\n\n// ContextOpts are the user-configurable options to create a context with\n// NewContext.\ntype ContextOpts struct {\n\tConfig    *configs.Config\n\tChanges   *plans.Changes\n\tState     *states.State\n\tTargets   []addrs.Targetable\n\tVariables InputValues\n\tMeta      *ContextMeta\n\tDestroy   bool\n\n\tHooks            []Hook\n\tParallelism      int\n\tProviderResolver providers.Resolver\n\tProvisioners     map[string]ProvisionerFactory\n\n\t// If non-nil, will apply as additional constraints on the provider\n\t// plugins that will be requested from the provider resolver.\n\tProviderSHA256s    map[string][]byte\n\tSkipProviderVerify bool\n\n\tUIInput UIInput\n}\n\n// ContextMeta is metadata about the running context. This is information\n// that this package or structure cannot determine on its own but exposes\n// into Terraform in various ways. This must be provided by the Context\n// initializer.\ntype ContextMeta struct {\n\tEnv string // Env is the state environment\n}\n\n// Context represents all the context that Terraform needs in order to\n// perform operations on infrastructure. This structure is built using\n// NewContext.\ntype Context struct {\n\tconfig    *configs.Config\n\tchanges   *plans.Changes\n\tstate     *states.State\n\ttargets   []addrs.Targetable\n\tvariables InputValues\n\tmeta      *ContextMeta\n\tdestroy   bool\n\n\thooks      []Hook\n\tcomponents contextComponentFactory\n\tschemas    *Schemas\n\tsh         *stopHook\n\tuiInput    UIInput\n\n\tl                   sync.Mutex // Lock acquired during any task\n\tparallelSem         Semaphore\n\tproviderInputConfig map[string]map[string]cty.Value\n\tproviderSHA256s     map[string][]byte\n\trunLock             sync.Mutex\n\trunCond             *sync.Cond\n\trunContext          context.Context\n\trunContextCancel    context.CancelFunc\n\tshadowErr           error\n}\n\n// (additional methods on Context can be found in context_*.go files.)\n\n// NewContext creates a new Context structure.\n//\n// Once a Context is created, the caller must not access or mutate any of\n// the objects referenced (directly or indirectly) by the ContextOpts fields.\n//\n// If the returned diagnostics contains errors then the resulting context is\n// invalid and must not be used.\nfunc NewContext(opts *ContextOpts) (*Context, tfdiags.Diagnostics) {\n\tlog.Printf(\"[TRACE] terraform.NewContext: starting\")\n\tdiags := CheckCoreVersionRequirements(opts.Config)\n\t// If version constraints are not met then we'll bail early since otherwise\n\t// we're likely to just see a bunch of other errors related to\n\t// incompatibilities, which could be overwhelming for the user.\n\tif diags.HasErrors() {\n\t\treturn nil, diags\n\t}\n\n\t// Copy all the hooks and add our stop hook. We don't append directly\n\t// to the Config so that we're not modifying that in-place.\n\tsh := new(stopHook)\n\thooks := make([]Hook, len(opts.Hooks)+1)\n\tcopy(hooks, opts.Hooks)\n\thooks[len(opts.Hooks)] = sh\n\n\tstate := opts.State\n\tif state == nil {\n\t\tstate = states.NewState()\n\t}\n\n\t// Determine parallelism, default to 10. We do this both to limit\n\t// CPU pressure but also to have an extra guard against rate throttling\n\t// from providers.\n\tpar := opts.Parallelism\n\tif par == 0 {\n\t\tpar = 10\n\t}\n\n\t// Set up the variables in the following sequence:\n\t//    0 - Take default values from the configuration\n\t//    1 - Take values from TF_VAR_x environment variables\n\t//    2 - Take values specified in -var flags, overriding values\n\t//        set by environment variables if necessary. This includes\n\t//        values taken from -var-file in addition.\n\tvar variables InputValues\n\tif opts.Config != nil {\n\t\t// Default variables from the configuration seed our map.\n\t\tvariables = DefaultVariableValues(opts.Config.Module.Variables)\n\t}\n\t// Variables provided by the caller (from CLI, environment, etc) can\n\t// override the defaults.\n\tvariables = variables.Override(opts.Variables)\n\n\t// Bind available provider plugins to the constraints in config\n\tvar providerFactories map[string]providers.Factory\n\tif opts.ProviderResolver != nil {\n\t\tdeps := ConfigTreeDependencies(opts.Config, state)\n\t\treqd := deps.AllPluginRequirements()\n\t\tif opts.ProviderSHA256s != nil && !opts.SkipProviderVerify {\n\t\t\treqd.LockExecutables(opts.ProviderSHA256s)\n\t\t}\n\t\tlog.Printf(\"[TRACE] terraform.NewContext: resolving provider version selections\")\n\n\t\tvar providerDiags tfdiags.Diagnostics\n\t\tproviderFactories, providerDiags = resourceProviderFactories(opts.ProviderResolver, reqd)\n\t\tdiags = diags.Append(providerDiags)\n\n\t\tif diags.HasErrors() {\n\t\t\treturn nil, diags\n\t\t}\n\t} else {\n\t\tproviderFactories = make(map[string]providers.Factory)\n\t}\n\n\tcomponents := &basicComponentFactory{\n\t\tproviders:    providerFactories,\n\t\tprovisioners: opts.Provisioners,\n\t}\n\n\tlog.Printf(\"[TRACE] terraform.NewContext: loading provider schemas\")\n\tschemas, err := LoadSchemas(opts.Config, opts.State, components)\n\tif err != nil {\n\t\tdiags = diags.Append(err)\n\t\treturn nil, diags\n\t}\n\n\tchanges := opts.Changes\n\tif changes == nil {\n\t\tchanges = plans.NewChanges()\n\t}\n\n\tconfig := opts.Config\n\tif config == nil {\n\t\tconfig = configs.NewEmptyConfig()\n\t}\n\n\tlog.Printf(\"[TRACE] terraform.NewContext: complete\")\n\n\treturn &Context{\n\t\tcomponents: components,\n\t\tschemas:    schemas,\n\t\tdestroy:    opts.Destroy,\n\t\tchanges:    changes,\n\t\thooks:      hooks,\n\t\tmeta:       opts.Meta,\n\t\tconfig:     config,\n\t\tstate:      state,\n\t\ttargets:    opts.Targets,\n\t\tuiInput:    opts.UIInput,\n\t\tvariables:  variables,\n\n\t\tparallelSem:         NewSemaphore(par),\n\t\tproviderInputConfig: make(map[string]map[string]cty.Value),\n\t\tproviderSHA256s:     opts.ProviderSHA256s,\n\t\tsh:                  sh,\n\t}, nil\n}\n\nfunc (c *Context) Schemas() *Schemas {\n\treturn c.schemas\n}\n\ntype ContextGraphOpts struct {\n\t// If true, validates the graph structure (checks for cycles).\n\tValidate bool\n\n\t// Legacy graphs only: won't prune the graph\n\tVerbose bool\n}\n\n// Graph returns the graph used for the given operation type.\n//\n// The most extensive or complex graph type is GraphTypePlan.\nfunc (c *Context) Graph(typ GraphType, opts *ContextGraphOpts) (*Graph, tfdiags.Diagnostics) {\n\tif opts == nil {\n\t\topts = &ContextGraphOpts{Validate: true}\n\t}\n\n\tlog.Printf(\"[INFO] terraform: building graph: %s\", typ)\n\tswitch typ {\n\tcase GraphTypeApply:\n\t\treturn (&ApplyGraphBuilder{\n\t\t\tConfig:     c.config,\n\t\t\tChanges:    c.changes,\n\t\t\tState:      c.state,\n\t\t\tComponents: c.components,\n\t\t\tSchemas:    c.schemas,\n\t\t\tTargets:    c.targets,\n\t\t\tDestroy:    c.destroy,\n\t\t\tValidate:   opts.Validate,\n\t\t}).Build(addrs.RootModuleInstance)\n\n\tcase GraphTypeValidate:\n\t\t// The validate graph is just a slightly modified plan graph\n\t\tfallthrough\n\tcase GraphTypePlan:\n\t\t// Create the plan graph builder\n\t\tp := &PlanGraphBuilder{\n\t\t\tConfig:     c.config,\n\t\t\tState:      c.state,\n\t\t\tComponents: c.components,\n\t\t\tSchemas:    c.schemas,\n\t\t\tTargets:    c.targets,\n\t\t\tValidate:   opts.Validate,\n\t\t}\n\n\t\t// Some special cases for other graph types shared with plan currently\n\t\tvar b GraphBuilder = p\n\t\tswitch typ {\n\t\tcase GraphTypeValidate:\n\t\t\tb = ValidateGraphBuilder(p)\n\t\t}\n\n\t\treturn b.Build(addrs.RootModuleInstance)\n\n\tcase GraphTypePlanDestroy:\n\t\treturn (&DestroyPlanGraphBuilder{\n\t\t\tConfig:     c.config,\n\t\t\tState:      c.state,\n\t\t\tComponents: c.components,\n\t\t\tSchemas:    c.schemas,\n\t\t\tTargets:    c.targets,\n\t\t\tValidate:   opts.Validate,\n\t\t}).Build(addrs.RootModuleInstance)\n\n\tcase GraphTypeRefresh:\n\t\treturn (&RefreshGraphBuilder{\n\t\t\tConfig:     c.config,\n\t\t\tState:      c.state,\n\t\t\tComponents: c.components,\n\t\t\tSchemas:    c.schemas,\n\t\t\tTargets:    c.targets,\n\t\t\tValidate:   opts.Validate,\n\t\t}).Build(addrs.RootModuleInstance)\n\n\tcase GraphTypeEval:\n\t\treturn (&EvalGraphBuilder{\n\t\t\tConfig:     c.config,\n\t\t\tState:      c.state,\n\t\t\tComponents: c.components,\n\t\t\tSchemas:    c.schemas,\n\t\t}).Build(addrs.RootModuleInstance)\n\n\tdefault:\n\t\t// Should never happen, because the above is exhaustive for all graph types.\n\t\tpanic(fmt.Errorf(\"unsupported graph type %s\", typ))\n\t}\n}\n\n// ShadowError returns any errors caught during a shadow operation.\n//\n// A shadow operation is an operation run in parallel to a real operation\n// that performs the same tasks using new logic on copied state. The results\n// are compared to ensure that the new logic works the same as the old logic.\n// The shadow never affects the real operation or return values.\n//\n// The result of the shadow operation are only available through this function\n// call after a real operation is complete.\n//\n// For API consumers of Context, you can safely ignore this function\n// completely if you have no interest in helping report experimental feature\n// errors to Terraform maintainers. Otherwise, please call this function\n// after every operation and report this to the user.\n//\n// IMPORTANT: Shadow errors are _never_ critical: they _never_ affect\n// the real state or result of a real operation. They are purely informational\n// to assist in future Terraform versions being more stable. Please message\n// this effectively to the end user.\n//\n// This must be called only when no other operation is running (refresh,\n// plan, etc.). The result can be used in parallel to any other operation\n// running.\nfunc (c *Context) ShadowError() error {\n\treturn c.shadowErr\n}\n\n// State returns a copy of the current state associated with this context.\n//\n// This cannot safely be called in parallel with any other Context function.\nfunc (c *Context) State() *states.State {\n\treturn c.state.DeepCopy()\n}\n\n// Eval produces a scope in which expressions can be evaluated for\n// the given module path.\n//\n// This method must first evaluate any ephemeral values (input variables, local\n// values, and output values) in the configuration. These ephemeral values are\n// not included in the persisted state, so they must be re-computed using other\n// values in the state before they can be properly evaluated. The updated\n// values are retained in the main state associated with the receiving context.\n//\n// This function takes no action against remote APIs but it does need access\n// to all provider and provisioner instances in order to obtain their schemas\n// for type checking.\n//\n// The result is an evaluation scope that can be used to resolve references\n// against the root module. If the returned diagnostics contains errors then\n// the returned scope may be nil. If it is not nil then it may still be used\n// to attempt expression evaluation or other analysis, but some expressions\n// may not behave as expected.\nfunc (c *Context) Eval(path addrs.ModuleInstance) (*lang.Scope, tfdiags.Diagnostics) {\n\t// This is intended for external callers such as the \"terraform console\"\n\t// command. Internally, we create an evaluator in c.walk before walking\n\t// the graph, and create scopes in ContextGraphWalker.\n\n\tvar diags tfdiags.Diagnostics\n\tdefer c.acquireRun(\"eval\")()\n\n\t// Start with a copy of state so that we don't affect any instances\n\t// that other methods may have already returned.\n\tc.state = c.state.DeepCopy()\n\tvar walker *ContextGraphWalker\n\n\tgraph, graphDiags := c.Graph(GraphTypeEval, nil)\n\tdiags = diags.Append(graphDiags)\n\tif !diags.HasErrors() {\n\t\tvar walkDiags tfdiags.Diagnostics\n\t\twalker, walkDiags = c.walk(graph, walkEval)\n\t\tdiags = diags.Append(walker.NonFatalDiagnostics)\n\t\tdiags = diags.Append(walkDiags)\n\t}\n\n\tif walker == nil {\n\t\t// If we skipped walking the graph (due to errors) then we'll just\n\t\t// use a placeholder graph walker here, which'll refer to the\n\t\t// unmodified state.\n\t\twalker = c.graphWalker(walkEval)\n\t}\n\n\t// This is a bit weird since we don't normally evaluate outside of\n\t// the context of a walk, but we'll \"re-enter\" our desired path here\n\t// just to get hold of an EvalContext for it. GraphContextBuiltin\n\t// caches its contexts, so we should get hold of the context that was\n\t// previously used for evaluation here, unless we skipped walking.\n\tevalCtx := walker.EnterPath(path)\n\treturn evalCtx.EvaluationScope(nil, EvalDataForNoInstanceKey), diags\n}\n\n// Interpolater is no longer used. Use Evaluator instead.\n//\n// The interpolator returned from this function will return an error on any use.\nfunc (c *Context) Interpolater() *Interpolater {\n\t// FIXME: Remove this once all callers are updated to no longer use it.\n\treturn &Interpolater{}\n}\n\n// Apply applies the changes represented by this context and returns\n// the resulting state.\n//\n// Even in the case an error is returned, the state may be returned and will\n// potentially be partially updated.  In addition to returning the resulting\n// state, this context is updated with the latest state.\n//\n// If the state is required after an error, the caller should call\n// Context.State, rather than rely on the return value.\n//\n// TODO: Apply and Refresh should either always return a state, or rely on the\n//       State() method. Currently the helper/resource testing framework relies\n//       on the absence of a returned state to determine if Destroy can be\n//       called, so that will need to be refactored before this can be changed.\nfunc (c *Context) Apply() (*states.State, tfdiags.Diagnostics) {\n\tdefer c.acquireRun(\"apply\")()\n\n\t// Copy our own state\n\tc.state = c.state.DeepCopy()\n\n\t// Build the graph.\n\tgraph, diags := c.Graph(GraphTypeApply, nil)\n\tif diags.HasErrors() {\n\t\treturn nil, diags\n\t}\n\n\t// Determine the operation\n\toperation := walkApply\n\tif c.destroy {\n\t\toperation = walkDestroy\n\t}\n\n\t// Walk the graph\n\twalker, walkDiags := c.walk(graph, operation)\n\tdiags = diags.Append(walker.NonFatalDiagnostics)\n\tdiags = diags.Append(walkDiags)\n\n\tif c.destroy && !diags.HasErrors() {\n\t\t// If we know we were trying to destroy objects anyway, and we\n\t\t// completed without any errors, then we'll also prune out any\n\t\t// leftover empty resource husks (left after all of the instances\n\t\t// of a resource with \"count\" or \"for_each\" are destroyed) to\n\t\t// help ensure we end up with an _actually_ empty state, assuming\n\t\t// we weren't destroying with -target here.\n\t\t//\n\t\t// (This doesn't actually take into account -target, but that should\n\t\t// be okay because it doesn't throw away anything we can't recompute\n\t\t// on a subsequent \"terraform plan\" run, if the resources are still\n\t\t// present in the configuration. However, this _will_ cause \"count = 0\"\n\t\t// resources to read as unknown during the next refresh walk, which\n\t\t// may cause some additional churn if used in a data resource or\n\t\t// provider block, until we remove refreshing as a separate walk and\n\t\t// just do it as part of the plan walk.)\n\t\tc.state.PruneResourceHusks()\n\t}\n\n\treturn c.state, diags\n}\n\n// Plan generates an execution plan for the given context.\n//\n// The execution plan encapsulates the context and can be stored\n// in order to reinstantiate a context later for Apply.\n//\n// Plan also updates the diff of this context to be the diff generated\n// by the plan, so Apply can be called after.\nfunc (c *Context) Plan() (*plans.Plan, tfdiags.Diagnostics) {\n\tdefer c.acquireRun(\"plan\")()\n\tc.changes = plans.NewChanges()\n\n\tvar diags tfdiags.Diagnostics\n\n\tvarVals := make(map[string]plans.DynamicValue, len(c.variables))\n\tfor k, iv := range c.variables {\n\t\t// We use cty.DynamicPseudoType here so that we'll save both the\n\t\t// value _and_ its dynamic type in the plan, so we can recover\n\t\t// exactly the same value later.\n\t\tdv, err := plans.NewDynamicValue(iv.Value, cty.DynamicPseudoType)\n\t\tif err != nil {\n\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\ttfdiags.Error,\n\t\t\t\t\"Failed to prepare variable value for plan\",\n\t\t\t\tfmt.Sprintf(\"The value for variable %q could not be serialized to store in the plan: %s.\", k, err),\n\t\t\t))\n\t\t\tcontinue\n\t\t}\n\t\tvarVals[k] = dv\n\t}\n\n\tp := &plans.Plan{\n\t\tVariableValues:  varVals,\n\t\tTargetAddrs:     c.targets,\n\t\tProviderSHA256s: c.providerSHA256s,\n\t}\n\n\tvar operation walkOperation\n\tif c.destroy {\n\t\toperation = walkPlanDestroy\n\t} else {\n\t\t// Set our state to be something temporary. We do this so that\n\t\t// the plan can update a fake state so that variables work, then\n\t\t// we replace it back with our old state.\n\t\told := c.state\n\t\tif old == nil {\n\t\t\tc.state = states.NewState()\n\t\t} else {\n\t\t\tc.state = old.DeepCopy()\n\t\t}\n\t\tdefer func() {\n\t\t\tc.state = old\n\t\t}()\n\n\t\toperation = walkPlan\n\t}\n\n\t// Build the graph.\n\tgraphType := GraphTypePlan\n\tif c.destroy {\n\t\tgraphType = GraphTypePlanDestroy\n\t}\n\tgraph, graphDiags := c.Graph(graphType, nil)\n\tdiags = diags.Append(graphDiags)\n\tif graphDiags.HasErrors() {\n\t\treturn nil, diags\n\t}\n\n\t// Do the walk\n\twalker, walkDiags := c.walk(graph, operation)\n\tdiags = diags.Append(walker.NonFatalDiagnostics)\n\tdiags = diags.Append(walkDiags)\n\tif walkDiags.HasErrors() {\n\t\treturn nil, diags\n\t}\n\tp.Changes = c.changes\n\n\treturn p, diags\n}\n\n// Refresh goes through all the resources in the state and refreshes them\n// to their latest state. This will update the state that this context\n// works with, along with returning it.\n//\n// Even in the case an error is returned, the state may be returned and\n// will potentially be partially updated.\nfunc (c *Context) Refresh() (*states.State, tfdiags.Diagnostics) {\n\tdefer c.acquireRun(\"refresh\")()\n\n\t// Copy our own state\n\tc.state = c.state.DeepCopy()\n\n\t// Refresh builds a partial changeset as part of its work because it must\n\t// create placeholder stubs for any resource instances that'll be created\n\t// in subsequent plan so that provider configurations and data resources\n\t// can interpolate from them. This plan is always thrown away after\n\t// the operation completes, restoring any existing changeset.\n\toldChanges := c.changes\n\tdefer func() { c.changes = oldChanges }()\n\tc.changes = plans.NewChanges()\n\n\t// Build the graph.\n\tgraph, diags := c.Graph(GraphTypeRefresh, nil)\n\tif diags.HasErrors() {\n\t\treturn nil, diags\n\t}\n\n\t// Do the walk\n\t_, walkDiags := c.walk(graph, walkRefresh)\n\tdiags = diags.Append(walkDiags)\n\tif walkDiags.HasErrors() {\n\t\treturn nil, diags\n\t}\n\n\t// During our walk we will have created planned object placeholders in\n\t// state for resource instances that are in configuration but not yet\n\t// created. These were created only to allow expression evaluation to\n\t// work properly in provider and data blocks during the walk and must\n\t// now be discarded, since a subsequent plan walk is responsible for\n\t// creating these \"for real\".\n\t// TODO: Consolidate refresh and plan into a single walk, so that the\n\t// refresh walk doesn't need to emulate various aspects of the plan\n\t// walk in order to properly evaluate provider and data blocks.\n\tc.state.SyncWrapper().RemovePlannedResourceInstanceObjects()\n\n\treturn c.state, diags\n}\n\n// Stop stops the running task.\n//\n// Stop will block until the task completes.\nfunc (c *Context) Stop() {\n\tlog.Printf(\"[WARN] terraform: Stop called, initiating interrupt sequence\")\n\n\tc.l.Lock()\n\tdefer c.l.Unlock()\n\n\t// If we're running, then stop\n\tif c.runContextCancel != nil {\n\t\tlog.Printf(\"[WARN] terraform: run context exists, stopping\")\n\n\t\t// Tell the hook we want to stop\n\t\tc.sh.Stop()\n\n\t\t// Stop the context\n\t\tc.runContextCancel()\n\t\tc.runContextCancel = nil\n\t}\n\n\t// Grab the condition var before we exit\n\tif cond := c.runCond; cond != nil {\n\t\tlog.Printf(\"[INFO] terraform: waiting for graceful stop to complete\")\n\t\tcond.Wait()\n\t}\n\n\tlog.Printf(\"[WARN] terraform: stop complete\")\n}\n\n// Validate performs semantic validation of the configuration, and returning\n// any warnings or errors.\n//\n// Syntax and structural checks are performed by the configuration loader,\n// and so are not repeated here.\nfunc (c *Context) Validate() tfdiags.Diagnostics {\n\tdefer c.acquireRun(\"validate\")()\n\n\tvar diags tfdiags.Diagnostics\n\n\t// Validate input variables. We do this only for the values supplied\n\t// by the root module, since child module calls are validated when we\n\t// visit their graph nodes.\n\tif c.config != nil {\n\t\tvarDiags := checkInputVariables(c.config.Module.Variables, c.variables)\n\t\tdiags = diags.Append(varDiags)\n\t}\n\n\t// If we have errors at this point then we probably won't be able to\n\t// construct a graph without producing redundant errors, so we'll halt early.\n\tif diags.HasErrors() {\n\t\treturn diags\n\t}\n\n\t// Build the graph so we can walk it and run Validate on nodes.\n\t// We also validate the graph generated here, but this graph doesn't\n\t// necessarily match the graph that Plan will generate, so we'll validate the\n\t// graph again later after Planning.\n\tgraph, graphDiags := c.Graph(GraphTypeValidate, nil)\n\tdiags = diags.Append(graphDiags)\n\tif graphDiags.HasErrors() {\n\t\treturn diags\n\t}\n\n\t// Walk\n\twalker, walkDiags := c.walk(graph, walkValidate)\n\tdiags = diags.Append(walker.NonFatalDiagnostics)\n\tdiags = diags.Append(walkDiags)\n\tif walkDiags.HasErrors() {\n\t\treturn diags\n\t}\n\n\treturn diags\n}\n\n// Config returns the configuration tree associated with this context.\nfunc (c *Context) Config() *configs.Config {\n\treturn c.config\n}\n\n// Variables will return the mapping of variables that were defined\n// for this Context. If Input was called, this mapping may be different\n// than what was given.\nfunc (c *Context) Variables() InputValues {\n\treturn c.variables\n}\n\n// SetVariable sets a variable after a context has already been built.\nfunc (c *Context) SetVariable(k string, v cty.Value) {\n\tc.variables[k] = &InputValue{\n\t\tValue:      v,\n\t\tSourceType: ValueFromCaller,\n\t}\n}\n\nfunc (c *Context) acquireRun(phase string) func() {\n\t// With the run lock held, grab the context lock to make changes\n\t// to the run context.\n\tc.l.Lock()\n\tdefer c.l.Unlock()\n\n\t// Wait until we're no longer running\n\tfor c.runCond != nil {\n\t\tc.runCond.Wait()\n\t}\n\n\t// Build our lock\n\tc.runCond = sync.NewCond(&c.l)\n\n\t// Create a new run context\n\tc.runContext, c.runContextCancel = context.WithCancel(context.Background())\n\n\t// Reset the stop hook so we're not stopped\n\tc.sh.Reset()\n\n\t// Reset the shadow errors\n\tc.shadowErr = nil\n\n\treturn c.releaseRun\n}\n\nfunc (c *Context) releaseRun() {\n\t// Grab the context lock so that we can make modifications to fields\n\tc.l.Lock()\n\tdefer c.l.Unlock()\n\n\t// End our run. We check if runContext is non-nil because it can be\n\t// set to nil if it was cancelled via Stop()\n\tif c.runContextCancel != nil {\n\t\tc.runContextCancel()\n\t}\n\n\t// Unlock all waiting our condition\n\tcond := c.runCond\n\tc.runCond = nil\n\tcond.Broadcast()\n\n\t// Unset the context\n\tc.runContext = nil\n}\n\nfunc (c *Context) walk(graph *Graph, operation walkOperation) (*ContextGraphWalker, tfdiags.Diagnostics) {\n\tlog.Printf(\"[DEBUG] Starting graph walk: %s\", operation.String())\n\n\twalker := c.graphWalker(operation)\n\n\t// Watch for a stop so we can call the provider Stop() API.\n\twatchStop, watchWait := c.watchStop(walker)\n\n\t// Walk the real graph, this will block until it completes\n\tdiags := graph.Walk(walker)\n\n\t// Close the channel so the watcher stops, and wait for it to return.\n\tclose(watchStop)\n\t<-watchWait\n\n\treturn walker, diags\n}\n\nfunc (c *Context) graphWalker(operation walkOperation) *ContextGraphWalker {\n\treturn &ContextGraphWalker{\n\t\tContext:            c,\n\t\tState:              c.state.SyncWrapper(),\n\t\tChanges:            c.changes.SyncWrapper(),\n\t\tOperation:          operation,\n\t\tStopContext:        c.runContext,\n\t\tRootVariableValues: c.variables,\n\t}\n}\n\n// watchStop immediately returns a `stop` and a `wait` chan after dispatching\n// the watchStop goroutine. This will watch the runContext for cancellation and\n// stop the providers accordingly.  When the watch is no longer needed, the\n// `stop` chan should be closed before waiting on the `wait` chan.\n// The `wait` chan is important, because without synchronizing with the end of\n// the watchStop goroutine, the runContext may also be closed during the select\n// incorrectly causing providers to be stopped. Even if the graph walk is done\n// at that point, stopping a provider permanently cancels its StopContext which\n// can cause later actions to fail.\nfunc (c *Context) watchStop(walker *ContextGraphWalker) (chan struct{}, <-chan struct{}) {\n\tstop := make(chan struct{})\n\twait := make(chan struct{})\n\n\t// get the runContext cancellation channel now, because releaseRun will\n\t// write to the runContext field.\n\tdone := c.runContext.Done()\n\n\tgo func() {\n\t\tdefer close(wait)\n\t\t// Wait for a stop or completion\n\t\tselect {\n\t\tcase <-done:\n\t\t\t// done means the context was canceled, so we need to try and stop\n\t\t\t// providers.\n\t\tcase <-stop:\n\t\t\t// our own stop channel was closed.\n\t\t\treturn\n\t\t}\n\n\t\t// If we're here, we're stopped, trigger the call.\n\t\tlog.Printf(\"[TRACE] Context: requesting providers and provisioners to gracefully stop\")\n\n\t\t{\n\t\t\t// Copy the providers so that a misbehaved blocking Stop doesn't\n\t\t\t// completely hang Terraform.\n\t\t\twalker.providerLock.Lock()\n\t\t\tps := make([]providers.Interface, 0, len(walker.providerCache))\n\t\t\tfor _, p := range walker.providerCache {\n\t\t\t\tps = append(ps, p)\n\t\t\t}\n\t\t\tdefer walker.providerLock.Unlock()\n\n\t\t\tfor _, p := range ps {\n\t\t\t\t// We ignore the error for now since there isn't any reasonable\n\t\t\t\t// action to take if there is an error here, since the stop is still\n\t\t\t\t// advisory: Terraform will exit once the graph node completes.\n\t\t\t\tp.Stop()\n\t\t\t}\n\t\t}\n\n\t\t{\n\t\t\t// Call stop on all the provisioners\n\t\t\twalker.provisionerLock.Lock()\n\t\t\tps := make([]provisioners.Interface, 0, len(walker.provisionerCache))\n\t\t\tfor _, p := range walker.provisionerCache {\n\t\t\t\tps = append(ps, p)\n\t\t\t}\n\t\t\tdefer walker.provisionerLock.Unlock()\n\n\t\t\tfor _, p := range ps {\n\t\t\t\t// We ignore the error for now since there isn't any reasonable\n\t\t\t\t// action to take if there is an error here, since the stop is still\n\t\t\t\t// advisory: Terraform will exit once the graph node completes.\n\t\t\t\tp.Stop()\n\t\t\t}\n\t\t}\n\t}()\n\n\treturn stop, wait\n}\n\n// parseVariableAsHCL parses the value of a single variable as would have been specified\n// on the command line via -var or in an environment variable named TF_VAR_x, where x is\n// the name of the variable. In order to get around the restriction of HCL requiring a\n// top level object, we prepend a sentinel key, decode the user-specified value as its\n// value and pull the value back out of the resulting map.\nfunc parseVariableAsHCL(name string, input string, targetType config.VariableType) (interface{}, error) {\n\t// expecting a string so don't decode anything, just strip quotes\n\tif targetType == config.VariableTypeString {\n\t\treturn strings.Trim(input, `\"`), nil\n\t}\n\n\t// return empty types\n\tif strings.TrimSpace(input) == \"\" {\n\t\tswitch targetType {\n\t\tcase config.VariableTypeList:\n\t\t\treturn []interface{}{}, nil\n\t\tcase config.VariableTypeMap:\n\t\t\treturn make(map[string]interface{}), nil\n\t\t}\n\t}\n\n\tconst sentinelValue = \"SENTINEL_TERRAFORM_VAR_OVERRIDE_KEY\"\n\tinputWithSentinal := fmt.Sprintf(\"%s = %s\", sentinelValue, input)\n\n\tvar decoded map[string]interface{}\n\terr := hcl.Decode(&decoded, inputWithSentinal)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"Cannot parse value for variable %s (%q) as valid HCL: %s\", name, input, err)\n\t}\n\n\tif len(decoded) != 1 {\n\t\treturn nil, fmt.Errorf(\"Cannot parse value for variable %s (%q) as valid HCL. Only one value may be specified.\", name, input)\n\t}\n\n\tparsedValue, ok := decoded[sentinelValue]\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"Cannot parse value for variable %s (%q) as valid HCL. One value must be specified.\", name, input)\n\t}\n\n\tswitch targetType {\n\tcase config.VariableTypeList:\n\t\treturn parsedValue, nil\n\tcase config.VariableTypeMap:\n\t\tif list, ok := parsedValue.([]map[string]interface{}); ok {\n\t\t\treturn list[0], nil\n\t\t}\n\n\t\treturn nil, fmt.Errorf(\"Cannot parse value for variable %s (%q) as valid HCL. One value must be specified.\", name, input)\n\tdefault:\n\t\tpanic(fmt.Errorf(\"unknown type %s\", targetType.Printable()))\n\t}\n}\n\n// ShimLegacyState is a helper that takes the legacy state type and\n// converts it to the new state type.\n//\n// This is implemented as a state file upgrade, so it will not preserve\n// parts of the state structure that are not included in a serialized state,\n// such as the resolved results of any local values, outputs in non-root\n// modules, etc.\nfunc ShimLegacyState(legacy *State) (*states.State, error) {\n\tif legacy == nil {\n\t\treturn nil, nil\n\t}\n\tvar buf bytes.Buffer\n\terr := WriteState(legacy, &buf)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tf, err := statefile.Read(&buf)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn f.State, err\n}\n\n// MustShimLegacyState is a wrapper around ShimLegacyState that panics if\n// the conversion does not succeed. This is primarily intended for tests where\n// the given legacy state is an object constructed within the test.\nfunc MustShimLegacyState(legacy *State) *states.State {\n\tret, err := ShimLegacyState(legacy)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn ret\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/context_components.go",
    "content": "package terraform\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/hashicorp/terraform/providers\"\n\t\"github.com/hashicorp/terraform/provisioners\"\n)\n\n// contextComponentFactory is the interface that Context uses\n// to initialize various components such as providers and provisioners.\n// This factory gets more information than the raw maps using to initialize\n// a Context. This information is used for debugging.\ntype contextComponentFactory interface {\n\t// ResourceProvider creates a new ResourceProvider with the given\n\t// type. The \"uid\" is a unique identifier for this provider being\n\t// initialized that can be used for internal tracking.\n\tResourceProvider(typ, uid string) (providers.Interface, error)\n\tResourceProviders() []string\n\n\t// ResourceProvisioner creates a new ResourceProvisioner with the\n\t// given type. The \"uid\" is a unique identifier for this provisioner\n\t// being initialized that can be used for internal tracking.\n\tResourceProvisioner(typ, uid string) (provisioners.Interface, error)\n\tResourceProvisioners() []string\n}\n\n// basicComponentFactory just calls a factory from a map directly.\ntype basicComponentFactory struct {\n\tproviders    map[string]providers.Factory\n\tprovisioners map[string]ProvisionerFactory\n}\n\nfunc (c *basicComponentFactory) ResourceProviders() []string {\n\tresult := make([]string, len(c.providers))\n\tfor k := range c.providers {\n\t\tresult = append(result, k)\n\t}\n\n\treturn result\n}\n\nfunc (c *basicComponentFactory) ResourceProvisioners() []string {\n\tresult := make([]string, len(c.provisioners))\n\tfor k := range c.provisioners {\n\t\tresult = append(result, k)\n\t}\n\n\treturn result\n}\n\nfunc (c *basicComponentFactory) ResourceProvider(typ, uid string) (providers.Interface, error) {\n\tf, ok := c.providers[typ]\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"unknown provider %q\", typ)\n\t}\n\n\treturn f()\n}\n\nfunc (c *basicComponentFactory) ResourceProvisioner(typ, uid string) (provisioners.Interface, error) {\n\tf, ok := c.provisioners[typ]\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"unknown provisioner %q\", typ)\n\t}\n\n\treturn f()\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/context_graph_type.go",
    "content": "package terraform\n\n//go:generate stringer -type=GraphType context_graph_type.go\n\n// GraphType is an enum of the type of graph to create with a Context.\n// The values of the constants may change so they shouldn't be depended on;\n// always use the constant name.\ntype GraphType byte\n\nconst (\n\tGraphTypeInvalid GraphType = 0\n\tGraphTypeLegacy  GraphType = iota\n\tGraphTypeRefresh\n\tGraphTypePlan\n\tGraphTypePlanDestroy\n\tGraphTypeApply\n\tGraphTypeValidate\n\tGraphTypeEval // only visits in-memory elements such as variables, locals, and outputs.\n)\n\n// GraphTypeMap is a mapping of human-readable string to GraphType. This\n// is useful to use as the mechanism for human input for configurable\n// graph types.\nvar GraphTypeMap = map[string]GraphType{\n\t\"apply\":        GraphTypeApply,\n\t\"plan\":         GraphTypePlan,\n\t\"plan-destroy\": GraphTypePlanDestroy,\n\t\"refresh\":      GraphTypeRefresh,\n\t\"legacy\":       GraphTypeLegacy,\n\t\"validate\":     GraphTypeValidate,\n\t\"eval\":         GraphTypeEval,\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/context_import.go",
    "content": "package terraform\n\nimport (\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/configs\"\n\t\"github.com/hashicorp/terraform/states\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n)\n\n// ImportOpts are used as the configuration for Import.\ntype ImportOpts struct {\n\t// Targets are the targets to import\n\tTargets []*ImportTarget\n\n\t// Config is optional, and specifies a config tree that will be loaded\n\t// into the graph and evaluated. This is the source for provider\n\t// configurations.\n\tConfig *configs.Config\n}\n\n// ImportTarget is a single resource to import.\ntype ImportTarget struct {\n\t// Addr is the address for the resource instance that the new object should\n\t// be imported into.\n\tAddr addrs.AbsResourceInstance\n\n\t// ID is the ID of the resource to import. This is resource-specific.\n\tID string\n\n\t// ProviderAddr is the address of the provider that should handle the import.\n\tProviderAddr addrs.AbsProviderConfig\n}\n\n// Import takes already-created external resources and brings them\n// under Terraform management. Import requires the exact type, name, and ID\n// of the resources to import.\n//\n// This operation is idempotent. If the requested resource is already\n// imported, no changes are made to the state.\n//\n// Further, this operation also gracefully handles partial state. If during\n// an import there is a failure, all previously imported resources remain\n// imported.\nfunc (c *Context) Import(opts *ImportOpts) (*states.State, tfdiags.Diagnostics) {\n\tvar diags tfdiags.Diagnostics\n\n\t// Hold a lock since we can modify our own state here\n\tdefer c.acquireRun(\"import\")()\n\n\t// Copy our own state\n\tc.state = c.state.DeepCopy()\n\n\t// If no module is given, default to the module configured with\n\t// the Context.\n\tconfig := opts.Config\n\tif config == nil {\n\t\tconfig = c.config\n\t}\n\n\t// Initialize our graph builder\n\tbuilder := &ImportGraphBuilder{\n\t\tImportTargets: opts.Targets,\n\t\tConfig:        config,\n\t\tComponents:    c.components,\n\t\tSchemas:       c.schemas,\n\t}\n\n\t// Build the graph!\n\tgraph, graphDiags := builder.Build(addrs.RootModuleInstance)\n\tdiags = diags.Append(graphDiags)\n\tif graphDiags.HasErrors() {\n\t\treturn c.state, diags\n\t}\n\n\t// Walk it\n\t_, walkDiags := c.walk(graph, walkImport)\n\tdiags = diags.Append(walkDiags)\n\tif walkDiags.HasErrors() {\n\t\treturn c.state, diags\n\t}\n\n\treturn c.state, diags\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/context_input.go",
    "content": "package terraform\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"log\"\n\t\"sort\"\n\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/hashicorp/hcl2/hcldec\"\n\t\"github.com/zclconf/go-cty/cty\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/configs\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n)\n\n// Input asks for input to fill variables and provider configurations.\n// This modifies the configuration in-place, so asking for Input twice\n// may result in different UI output showing different current values.\nfunc (c *Context) Input(mode InputMode) tfdiags.Diagnostics {\n\tvar diags tfdiags.Diagnostics\n\tdefer c.acquireRun(\"input\")()\n\n\tif c.uiInput == nil {\n\t\tlog.Printf(\"[TRACE] Context.Input: uiInput is nil, so skipping\")\n\t\treturn diags\n\t}\n\n\tctx := context.Background()\n\n\tif mode&InputModeVar != 0 {\n\t\tlog.Printf(\"[TRACE] Context.Input: Prompting for variables\")\n\n\t\t// Walk the variables first for the root module. We walk them in\n\t\t// alphabetical order for UX reasons.\n\t\tconfigs := c.config.Module.Variables\n\t\tnames := make([]string, 0, len(configs))\n\t\tfor name := range configs {\n\t\t\tnames = append(names, name)\n\t\t}\n\t\tsort.Strings(names)\n\tVariables:\n\t\tfor _, n := range names {\n\t\t\tv := configs[n]\n\n\t\t\t// If we only care about unset variables, then we should set any\n\t\t\t// variable that is already set.\n\t\t\tif mode&InputModeVarUnset != 0 {\n\t\t\t\tif _, isSet := c.variables[n]; isSet {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// this should only happen during tests\n\t\t\tif c.uiInput == nil {\n\t\t\t\tlog.Println(\"[WARN] Context.uiInput is nil during input walk\")\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// Ask the user for a value for this variable\n\t\t\tvar rawValue string\n\t\t\tretry := 0\n\t\t\tfor {\n\t\t\t\tvar err error\n\t\t\t\trawValue, err = c.uiInput.Input(ctx, &InputOpts{\n\t\t\t\t\tId:          fmt.Sprintf(\"var.%s\", n),\n\t\t\t\t\tQuery:       fmt.Sprintf(\"var.%s\", n),\n\t\t\t\t\tDescription: v.Description,\n\t\t\t\t})\n\t\t\t\tif err != nil {\n\t\t\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\t\t\ttfdiags.Error,\n\t\t\t\t\t\t\"Failed to request interactive input\",\n\t\t\t\t\t\tfmt.Sprintf(\"Terraform attempted to request a value for var.%s interactively, but encountered an error: %s.\", n, err),\n\t\t\t\t\t))\n\t\t\t\t\treturn diags\n\t\t\t\t}\n\n\t\t\t\tif rawValue == \"\" && v.Default == cty.NilVal {\n\t\t\t\t\t// Redo if it is required, but abort if we keep getting\n\t\t\t\t\t// blank entries\n\t\t\t\t\tif retry > 2 {\n\t\t\t\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\t\t\t\ttfdiags.Error,\n\t\t\t\t\t\t\t\"Required variable not assigned\",\n\t\t\t\t\t\t\tfmt.Sprintf(\"The variable %q is required, so Terraform cannot proceed without a defined value for it.\", n),\n\t\t\t\t\t\t))\n\t\t\t\t\t\tcontinue Variables\n\t\t\t\t\t}\n\t\t\t\t\tretry++\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\tval, valDiags := v.ParsingMode.Parse(n, rawValue)\n\t\t\tdiags = diags.Append(valDiags)\n\t\t\tif diags.HasErrors() {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tc.variables[n] = &InputValue{\n\t\t\t\tValue:      val,\n\t\t\t\tSourceType: ValueFromInput,\n\t\t\t}\n\t\t}\n\t}\n\n\tif mode&InputModeProvider != 0 {\n\t\tlog.Printf(\"[TRACE] Context.Input: Prompting for provider arguments\")\n\n\t\t// We prompt for input only for provider configurations defined in\n\t\t// the root module. At the time of writing that is an arbitrary\n\t\t// restriction, but we have future plans to support \"count\" and\n\t\t// \"for_each\" on modules that will then prevent us from supporting\n\t\t// input for child module configurations anyway (since we'd need to\n\t\t// dynamic-expand first), and provider configurations in child modules\n\t\t// are not recommended since v0.11 anyway, so this restriction allows\n\t\t// us to keep this relatively simple without significant hardship.\n\n\t\tpcs := make(map[string]*configs.Provider)\n\t\tpas := make(map[string]addrs.ProviderConfig)\n\t\tfor _, pc := range c.config.Module.ProviderConfigs {\n\t\t\taddr := pc.Addr()\n\t\t\tpcs[addr.String()] = pc\n\t\t\tpas[addr.String()] = addr\n\t\t\tlog.Printf(\"[TRACE] Context.Input: Provider %s declared at %s\", addr, pc.DeclRange)\n\t\t}\n\t\t// We also need to detect _implied_ provider configs from resources.\n\t\t// These won't have *configs.Provider objects, but they will still\n\t\t// exist in the map and we'll just treat them as empty below.\n\t\tfor _, rc := range c.config.Module.ManagedResources {\n\t\t\tpa := rc.ProviderConfigAddr()\n\t\t\tif pa.Alias != \"\" {\n\t\t\t\tcontinue // alias configurations cannot be implied\n\t\t\t}\n\t\t\tif _, exists := pcs[pa.String()]; !exists {\n\t\t\t\tpcs[pa.String()] = nil\n\t\t\t\tpas[pa.String()] = pa\n\t\t\t\tlog.Printf(\"[TRACE] Context.Input: Provider %s implied by resource block at %s\", pa, rc.DeclRange)\n\t\t\t}\n\t\t}\n\t\tfor _, rc := range c.config.Module.DataResources {\n\t\t\tpa := rc.ProviderConfigAddr()\n\t\t\tif pa.Alias != \"\" {\n\t\t\t\tcontinue // alias configurations cannot be implied\n\t\t\t}\n\t\t\tif _, exists := pcs[pa.String()]; !exists {\n\t\t\t\tpcs[pa.String()] = nil\n\t\t\t\tpas[pa.String()] = pa\n\t\t\t\tlog.Printf(\"[TRACE] Context.Input: Provider %s implied by data block at %s\", pa, rc.DeclRange)\n\t\t\t}\n\t\t}\n\n\t\tfor pk, pa := range pas {\n\t\t\tpc := pcs[pk] // will be nil if this is an implied config\n\n\t\t\t// Wrap the input into a namespace\n\t\t\tinput := &PrefixUIInput{\n\t\t\t\tIdPrefix:    pk,\n\t\t\t\tQueryPrefix: pk + \".\",\n\t\t\t\tUIInput:     c.uiInput,\n\t\t\t}\n\n\t\t\tschema := c.schemas.ProviderConfig(pa.Type)\n\t\t\tif schema == nil {\n\t\t\t\t// Could either be an incorrect config or just an incomplete\n\t\t\t\t// mock in tests. We'll let a later pass decide, and just\n\t\t\t\t// ignore this for the purposes of gathering input.\n\t\t\t\tlog.Printf(\"[TRACE] Context.Input: No schema available for provider type %q\", pa.Type)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// For our purposes here we just want to detect if attrbutes are\n\t\t\t// set in config at all, so rather than doing a full decode\n\t\t\t// (which would require us to prepare an evalcontext, etc) we'll\n\t\t\t// use the low-level HCL API to process only the top-level\n\t\t\t// structure.\n\t\t\tvar attrExprs hcl.Attributes // nil if there is no config\n\t\t\tif pc != nil && pc.Config != nil {\n\t\t\t\tlowLevelSchema := schemaForInputSniffing(hcldec.ImpliedSchema(schema.DecoderSpec()))\n\t\t\t\tcontent, _, diags := pc.Config.PartialContent(lowLevelSchema)\n\t\t\t\tif diags.HasErrors() {\n\t\t\t\t\tlog.Printf(\"[TRACE] Context.Input: %s has decode error, so ignoring: %s\", pa, diags.Error())\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tattrExprs = content.Attributes\n\t\t\t}\n\n\t\t\tkeys := make([]string, 0, len(schema.Attributes))\n\t\t\tfor key := range schema.Attributes {\n\t\t\t\tkeys = append(keys, key)\n\t\t\t}\n\t\t\tsort.Strings(keys)\n\n\t\t\tvals := map[string]cty.Value{}\n\t\t\tfor _, key := range keys {\n\t\t\t\tattrS := schema.Attributes[key]\n\t\t\t\tif attrS.Optional {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif attrExprs != nil {\n\t\t\t\t\tif _, exists := attrExprs[key]; exists {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif !attrS.Type.Equals(cty.String) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tlog.Printf(\"[TRACE] Context.Input: Prompting for %s argument %s\", pa, key)\n\t\t\t\trawVal, err := input.Input(ctx, &InputOpts{\n\t\t\t\t\tId:          key,\n\t\t\t\t\tQuery:       key,\n\t\t\t\t\tDescription: attrS.Description,\n\t\t\t\t})\n\t\t\t\tif err != nil {\n\t\t\t\t\tlog.Printf(\"[TRACE] Context.Input: Failed to prompt for %s argument %s: %s\", pa, key, err)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tvals[key] = cty.StringVal(rawVal)\n\t\t\t}\n\n\t\t\tc.providerInputConfig[pk] = vals\n\t\t\tlog.Printf(\"[TRACE] Context.Input: Input for %s: %#v\", pk, vals)\n\t\t}\n\t}\n\n\treturn diags\n}\n\n// schemaForInputSniffing returns a transformed version of a given schema\n// that marks all attributes as optional, which the Context.Input method can\n// use to detect whether a required argument is set without missing arguments\n// themselves generating errors.\nfunc schemaForInputSniffing(schema *hcl.BodySchema) *hcl.BodySchema {\n\tret := &hcl.BodySchema{\n\t\tAttributes: make([]hcl.AttributeSchema, len(schema.Attributes)),\n\t\tBlocks:     schema.Blocks,\n\t}\n\n\tfor i, attrS := range schema.Attributes {\n\t\tret.Attributes[i] = attrS\n\t\tret.Attributes[i].Required = false\n\t}\n\n\treturn ret\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/diff.go",
    "content": "package terraform\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"fmt\"\n\t\"log\"\n\t\"reflect\"\n\t\"regexp\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/config\"\n\t\"github.com/hashicorp/terraform/config/hcl2shim\"\n\t\"github.com/hashicorp/terraform/configs/configschema\"\n\t\"github.com/zclconf/go-cty/cty\"\n\n\t\"github.com/mitchellh/copystructure\"\n)\n\n// DiffChangeType is an enum with the kind of changes a diff has planned.\ntype DiffChangeType byte\n\nconst (\n\tDiffInvalid DiffChangeType = iota\n\tDiffNone\n\tDiffCreate\n\tDiffUpdate\n\tDiffDestroy\n\tDiffDestroyCreate\n\n\t// DiffRefresh is only used in the UI for displaying diffs.\n\t// Managed resource reads never appear in plan, and when data source\n\t// reads appear they are represented as DiffCreate in core before\n\t// transforming to DiffRefresh in the UI layer.\n\tDiffRefresh // TODO: Actually use DiffRefresh in core too, for less confusion\n)\n\n// multiVal matches the index key to a flatmapped set, list or map\nvar multiVal = regexp.MustCompile(`\\.(#|%)$`)\n\n// Diff tracks the changes that are necessary to apply a configuration\n// to an existing infrastructure.\ntype Diff struct {\n\t// Modules contains all the modules that have a diff\n\tModules []*ModuleDiff\n}\n\n// Prune cleans out unused structures in the diff without affecting\n// the behavior of the diff at all.\n//\n// This is not safe to call concurrently. This is safe to call on a\n// nil Diff.\nfunc (d *Diff) Prune() {\n\tif d == nil {\n\t\treturn\n\t}\n\n\t// Prune all empty modules\n\tnewModules := make([]*ModuleDiff, 0, len(d.Modules))\n\tfor _, m := range d.Modules {\n\t\t// If the module isn't empty, we keep it\n\t\tif !m.Empty() {\n\t\t\tnewModules = append(newModules, m)\n\t\t}\n\t}\n\tif len(newModules) == 0 {\n\t\tnewModules = nil\n\t}\n\td.Modules = newModules\n}\n\n// AddModule adds the module with the given path to the diff.\n//\n// This should be the preferred method to add module diffs since it\n// allows us to optimize lookups later as well as control sorting.\nfunc (d *Diff) AddModule(path addrs.ModuleInstance) *ModuleDiff {\n\t// Lower the new-style address into a legacy-style address.\n\t// This requires that none of the steps have instance keys, which is\n\t// true for all addresses at the time of implementing this because\n\t// \"count\" and \"for_each\" are not yet implemented for modules.\n\tlegacyPath := make([]string, len(path))\n\tfor i, step := range path {\n\t\tif step.InstanceKey != addrs.NoKey {\n\t\t\t// FIXME: Once the rest of Terraform is ready to use count and\n\t\t\t// for_each, remove all of this and just write the addrs.ModuleInstance\n\t\t\t// value itself into the ModuleState.\n\t\t\tpanic(\"diff cannot represent modules with count or for_each keys\")\n\t\t}\n\n\t\tlegacyPath[i] = step.Name\n\t}\n\n\tm := &ModuleDiff{Path: legacyPath}\n\tm.init()\n\td.Modules = append(d.Modules, m)\n\treturn m\n}\n\n// ModuleByPath is used to lookup the module diff for the given path.\n// This should be the preferred lookup mechanism as it allows for future\n// lookup optimizations.\nfunc (d *Diff) ModuleByPath(path addrs.ModuleInstance) *ModuleDiff {\n\tif d == nil {\n\t\treturn nil\n\t}\n\tfor _, mod := range d.Modules {\n\t\tif mod.Path == nil {\n\t\t\tpanic(\"missing module path\")\n\t\t}\n\t\tmodPath := normalizeModulePath(mod.Path)\n\t\tif modPath.String() == path.String() {\n\t\t\treturn mod\n\t\t}\n\t}\n\treturn nil\n}\n\n// RootModule returns the ModuleState for the root module\nfunc (d *Diff) RootModule() *ModuleDiff {\n\troot := d.ModuleByPath(addrs.RootModuleInstance)\n\tif root == nil {\n\t\tpanic(\"missing root module\")\n\t}\n\treturn root\n}\n\n// Empty returns true if the diff has no changes.\nfunc (d *Diff) Empty() bool {\n\tif d == nil {\n\t\treturn true\n\t}\n\n\tfor _, m := range d.Modules {\n\t\tif !m.Empty() {\n\t\t\treturn false\n\t\t}\n\t}\n\n\treturn true\n}\n\n// Equal compares two diffs for exact equality.\n//\n// This is different from the Same comparison that is supported which\n// checks for operation equality taking into account computed values. Equal\n// instead checks for exact equality.\nfunc (d *Diff) Equal(d2 *Diff) bool {\n\t// If one is nil, they must both be nil\n\tif d == nil || d2 == nil {\n\t\treturn d == d2\n\t}\n\n\t// Sort the modules\n\tsort.Sort(moduleDiffSort(d.Modules))\n\tsort.Sort(moduleDiffSort(d2.Modules))\n\n\t// Copy since we have to modify the module destroy flag to false so\n\t// we don't compare that. TODO: delete this when we get rid of the\n\t// destroy flag on modules.\n\tdCopy := d.DeepCopy()\n\td2Copy := d2.DeepCopy()\n\tfor _, m := range dCopy.Modules {\n\t\tm.Destroy = false\n\t}\n\tfor _, m := range d2Copy.Modules {\n\t\tm.Destroy = false\n\t}\n\n\t// Use DeepEqual\n\treturn reflect.DeepEqual(dCopy, d2Copy)\n}\n\n// DeepCopy performs a deep copy of all parts of the Diff, making the\n// resulting Diff safe to use without modifying this one.\nfunc (d *Diff) DeepCopy() *Diff {\n\tcopy, err := copystructure.Config{Lock: true}.Copy(d)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\treturn copy.(*Diff)\n}\n\nfunc (d *Diff) String() string {\n\tvar buf bytes.Buffer\n\n\tkeys := make([]string, 0, len(d.Modules))\n\tlookup := make(map[string]*ModuleDiff)\n\tfor _, m := range d.Modules {\n\t\taddr := normalizeModulePath(m.Path)\n\t\tkey := addr.String()\n\t\tkeys = append(keys, key)\n\t\tlookup[key] = m\n\t}\n\tsort.Strings(keys)\n\n\tfor _, key := range keys {\n\t\tm := lookup[key]\n\t\tmStr := m.String()\n\n\t\t// If we're the root module, we just write the output directly.\n\t\tif reflect.DeepEqual(m.Path, rootModulePath) {\n\t\t\tbuf.WriteString(mStr + \"\\n\")\n\t\t\tcontinue\n\t\t}\n\n\t\tbuf.WriteString(fmt.Sprintf(\"%s:\\n\", key))\n\n\t\ts := bufio.NewScanner(strings.NewReader(mStr))\n\t\tfor s.Scan() {\n\t\t\tbuf.WriteString(fmt.Sprintf(\"  %s\\n\", s.Text()))\n\t\t}\n\t}\n\n\treturn strings.TrimSpace(buf.String())\n}\n\nfunc (d *Diff) init() {\n\tif d.Modules == nil {\n\t\trootDiff := &ModuleDiff{Path: rootModulePath}\n\t\td.Modules = []*ModuleDiff{rootDiff}\n\t}\n\tfor _, m := range d.Modules {\n\t\tm.init()\n\t}\n}\n\n// ModuleDiff tracks the differences between resources to apply within\n// a single module.\ntype ModuleDiff struct {\n\tPath      []string\n\tResources map[string]*InstanceDiff\n\tDestroy   bool // Set only by the destroy plan\n}\n\nfunc (d *ModuleDiff) init() {\n\tif d.Resources == nil {\n\t\td.Resources = make(map[string]*InstanceDiff)\n\t}\n\tfor _, r := range d.Resources {\n\t\tr.init()\n\t}\n}\n\n// ChangeType returns the type of changes that the diff for this\n// module includes.\n//\n// At a module level, this will only be DiffNone, DiffUpdate, DiffDestroy, or\n// DiffCreate. If an instance within the module has a DiffDestroyCreate\n// then this will register as a DiffCreate for a module.\nfunc (d *ModuleDiff) ChangeType() DiffChangeType {\n\tresult := DiffNone\n\tfor _, r := range d.Resources {\n\t\tchange := r.ChangeType()\n\t\tswitch change {\n\t\tcase DiffCreate, DiffDestroy:\n\t\t\tif result == DiffNone {\n\t\t\t\tresult = change\n\t\t\t}\n\t\tcase DiffDestroyCreate, DiffUpdate:\n\t\t\tresult = DiffUpdate\n\t\t}\n\t}\n\n\treturn result\n}\n\n// Empty returns true if the diff has no changes within this module.\nfunc (d *ModuleDiff) Empty() bool {\n\tif d.Destroy {\n\t\treturn false\n\t}\n\n\tif len(d.Resources) == 0 {\n\t\treturn true\n\t}\n\n\tfor _, rd := range d.Resources {\n\t\tif !rd.Empty() {\n\t\t\treturn false\n\t\t}\n\t}\n\n\treturn true\n}\n\n// Instances returns the instance diffs for the id given. This can return\n// multiple instance diffs if there are counts within the resource.\nfunc (d *ModuleDiff) Instances(id string) []*InstanceDiff {\n\tvar result []*InstanceDiff\n\tfor k, diff := range d.Resources {\n\t\tif k == id || strings.HasPrefix(k, id+\".\") {\n\t\t\tif !diff.Empty() {\n\t\t\t\tresult = append(result, diff)\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result\n}\n\n// IsRoot says whether or not this module diff is for the root module.\nfunc (d *ModuleDiff) IsRoot() bool {\n\treturn reflect.DeepEqual(d.Path, rootModulePath)\n}\n\n// String outputs the diff in a long but command-line friendly output\n// format that users can read to quickly inspect a diff.\nfunc (d *ModuleDiff) String() string {\n\tvar buf bytes.Buffer\n\n\tnames := make([]string, 0, len(d.Resources))\n\tfor name, _ := range d.Resources {\n\t\tnames = append(names, name)\n\t}\n\tsort.Strings(names)\n\n\tfor _, name := range names {\n\t\trdiff := d.Resources[name]\n\n\t\tcrud := \"UPDATE\"\n\t\tswitch {\n\t\tcase rdiff.RequiresNew() && (rdiff.GetDestroy() || rdiff.GetDestroyTainted()):\n\t\t\tcrud = \"DESTROY/CREATE\"\n\t\tcase rdiff.GetDestroy() || rdiff.GetDestroyDeposed():\n\t\t\tcrud = \"DESTROY\"\n\t\tcase rdiff.RequiresNew():\n\t\t\tcrud = \"CREATE\"\n\t\t}\n\n\t\textra := \"\"\n\t\tif !rdiff.GetDestroy() && rdiff.GetDestroyDeposed() {\n\t\t\textra = \" (deposed only)\"\n\t\t}\n\n\t\tbuf.WriteString(fmt.Sprintf(\n\t\t\t\"%s: %s%s\\n\",\n\t\t\tcrud,\n\t\t\tname,\n\t\t\textra))\n\n\t\tkeyLen := 0\n\t\trdiffAttrs := rdiff.CopyAttributes()\n\t\tkeys := make([]string, 0, len(rdiffAttrs))\n\t\tfor key, _ := range rdiffAttrs {\n\t\t\tif key == \"id\" {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tkeys = append(keys, key)\n\t\t\tif len(key) > keyLen {\n\t\t\t\tkeyLen = len(key)\n\t\t\t}\n\t\t}\n\t\tsort.Strings(keys)\n\n\t\tfor _, attrK := range keys {\n\t\t\tattrDiff, _ := rdiff.GetAttribute(attrK)\n\n\t\t\tv := attrDiff.New\n\t\t\tu := attrDiff.Old\n\t\t\tif attrDiff.NewComputed {\n\t\t\t\tv = \"<computed>\"\n\t\t\t}\n\n\t\t\tif attrDiff.Sensitive {\n\t\t\t\tu = \"<sensitive>\"\n\t\t\t\tv = \"<sensitive>\"\n\t\t\t}\n\n\t\t\tupdateMsg := \"\"\n\t\t\tif attrDiff.RequiresNew {\n\t\t\t\tupdateMsg = \" (forces new resource)\"\n\t\t\t} else if attrDiff.Sensitive {\n\t\t\t\tupdateMsg = \" (attribute changed)\"\n\t\t\t}\n\n\t\t\tbuf.WriteString(fmt.Sprintf(\n\t\t\t\t\"  %s:%s %#v => %#v%s\\n\",\n\t\t\t\tattrK,\n\t\t\t\tstrings.Repeat(\" \", keyLen-len(attrK)),\n\t\t\t\tu,\n\t\t\t\tv,\n\t\t\t\tupdateMsg))\n\t\t}\n\t}\n\n\treturn buf.String()\n}\n\n// InstanceDiff is the diff of a resource from some state to another.\ntype InstanceDiff struct {\n\tmu             sync.Mutex\n\tAttributes     map[string]*ResourceAttrDiff\n\tDestroy        bool\n\tDestroyDeposed bool\n\tDestroyTainted bool\n\n\t// Meta is a simple K/V map that is stored in a diff and persisted to\n\t// plans but otherwise is completely ignored by Terraform core. It is\n\t// meant to be used for additional data a resource may want to pass through.\n\t// The value here must only contain Go primitives and collections.\n\tMeta map[string]interface{}\n}\n\nfunc (d *InstanceDiff) Lock()   { d.mu.Lock() }\nfunc (d *InstanceDiff) Unlock() { d.mu.Unlock() }\n\n// ApplyToValue merges the receiver into the given base value, returning a\n// new value that incorporates the planned changes. The given value must\n// conform to the given schema, or this method will panic.\n//\n// This method is intended for shimming old subsystems that still use this\n// legacy diff type to work with the new-style types.\nfunc (d *InstanceDiff) ApplyToValue(base cty.Value, schema *configschema.Block) (cty.Value, error) {\n\t// Create an InstanceState attributes from our existing state.\n\t// We can use this to more easily apply the diff changes.\n\tattrs := hcl2shim.FlatmapValueFromHCL2(base)\n\tapplied, err := d.Apply(attrs, schema)\n\tif err != nil {\n\t\treturn base, err\n\t}\n\n\tval, err := hcl2shim.HCL2ValueFromFlatmap(applied, schema.ImpliedType())\n\tif err != nil {\n\t\treturn base, err\n\t}\n\n\treturn schema.CoerceValue(val)\n}\n\n// Apply applies the diff to the provided flatmapped attributes,\n// returning the new instance attributes.\n//\n// This method is intended for shimming old subsystems that still use this\n// legacy diff type to work with the new-style types.\nfunc (d *InstanceDiff) Apply(attrs map[string]string, schema *configschema.Block) (map[string]string, error) {\n\t// We always build a new value here, even if the given diff is \"empty\",\n\t// because we might be planning to create a new instance that happens\n\t// to have no attributes set, and so we want to produce an empty object\n\t// rather than just echoing back the null old value.\n\tif attrs == nil {\n\t\tattrs = map[string]string{}\n\t}\n\n\t// Rather applying the diff to mutate the attrs, we'll copy new values into\n\t// here to avoid the possibility of leaving stale values.\n\tresult := map[string]string{}\n\n\tif d.Destroy || d.DestroyDeposed || d.DestroyTainted {\n\t\treturn result, nil\n\t}\n\n\treturn d.applyBlockDiff(nil, attrs, schema)\n}\n\nfunc (d *InstanceDiff) applyBlockDiff(path []string, attrs map[string]string, schema *configschema.Block) (map[string]string, error) {\n\tresult := map[string]string{}\n\tname := \"\"\n\tif len(path) > 0 {\n\t\tname = path[len(path)-1]\n\t}\n\n\t// localPrefix is used to build the local result map\n\tlocalPrefix := \"\"\n\tif name != \"\" {\n\t\tlocalPrefix = name + \".\"\n\t}\n\n\t// iterate over the schema rather than the attributes, so we can handle\n\t// different block types separately from plain attributes\n\tfor n, attrSchema := range schema.Attributes {\n\t\tvar err error\n\t\tnewAttrs, err := d.applyAttrDiff(append(path, n), attrs, attrSchema)\n\n\t\tif err != nil {\n\t\t\treturn result, err\n\t\t}\n\n\t\tfor k, v := range newAttrs {\n\t\t\tresult[localPrefix+k] = v\n\t\t}\n\t}\n\n\tblockPrefix := strings.Join(path, \".\")\n\tif blockPrefix != \"\" {\n\t\tblockPrefix += \".\"\n\t}\n\tfor n, block := range schema.BlockTypes {\n\t\t// we need to find the set of all keys that traverse this block\n\t\tcandidateKeys := map[string]bool{}\n\t\tblockKey := blockPrefix + n + \".\"\n\t\tlocalBlockPrefix := localPrefix + n + \".\"\n\n\t\t// we can only trust the diff for sets, since the path changes, so don't\n\t\t// count existing values as candidate keys. If it turns out we're\n\t\t// keeping the attributes, we will catch it down below with \"keepBlock\"\n\t\t// after we check the set count.\n\t\tif block.Nesting != configschema.NestingSet {\n\t\t\tfor k := range attrs {\n\t\t\t\tif strings.HasPrefix(k, blockKey) {\n\t\t\t\t\tnextDot := strings.Index(k[len(blockKey):], \".\")\n\t\t\t\t\tif nextDot < 0 {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tnextDot += len(blockKey)\n\t\t\t\t\tcandidateKeys[k[len(blockKey):nextDot]] = true\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor k, diff := range d.Attributes {\n\t\t\tif strings.HasPrefix(k, blockKey) {\n\t\t\t\tnextDot := strings.Index(k[len(blockKey):], \".\")\n\t\t\t\tif nextDot < 0 {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tif diff.NewRemoved {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tnextDot += len(blockKey)\n\t\t\t\tcandidateKeys[k[len(blockKey):nextDot]] = true\n\t\t\t}\n\t\t}\n\n\t\t// check each set candidate to see if it was removed.\n\t\t// we need to do this, because when entire sets are removed, they may\n\t\t// have the wrong key, and ony show diffs going to \"\"\n\t\tif block.Nesting == configschema.NestingSet {\n\t\t\tfor k := range candidateKeys {\n\t\t\t\tindexPrefix := strings.Join(append(path, n, k), \".\") + \".\"\n\t\t\t\tkeep := false\n\t\t\t\t// now check each set element to see if it's a new diff, or one\n\t\t\t\t// that we're dropping. Since we're only applying the \"New\"\n\t\t\t\t// portion of the set, we can ignore diffs that only contain \"Old\"\n\t\t\t\tfor attr, diff := range d.Attributes {\n\t\t\t\t\tif !strings.HasPrefix(attr, indexPrefix) {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\n\t\t\t\t\t// check for empty \"count\" keys\n\t\t\t\t\tif (strings.HasSuffix(attr, \".#\") || strings.HasSuffix(attr, \".%\")) && diff.New == \"0\" {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\n\t\t\t\t\t// removed items don't count either\n\t\t\t\t\tif diff.NewRemoved {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\n\t\t\t\t\t// this must be a diff to keep\n\t\t\t\t\tkeep = true\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tif !keep {\n\t\t\t\t\tdelete(candidateKeys, k)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor k := range candidateKeys {\n\t\t\tnewAttrs, err := d.applyBlockDiff(append(path, n, k), attrs, &block.Block)\n\t\t\tif err != nil {\n\t\t\t\treturn result, err\n\t\t\t}\n\n\t\t\tfor attr, v := range newAttrs {\n\t\t\t\tresult[localBlockPrefix+attr] = v\n\t\t\t}\n\t\t}\n\n\t\tkeepBlock := true\n\t\t// check this block's count diff directly first, since we may not\n\t\t// have candidates because it was removed and only set to \"0\"\n\t\tif diff, ok := d.Attributes[blockKey+\"#\"]; ok {\n\t\t\tif diff.New == \"0\" || diff.NewRemoved {\n\t\t\t\tkeepBlock = false\n\t\t\t}\n\t\t}\n\n\t\t// if there was no diff at all, then we need to keep the block attributes\n\t\tif len(candidateKeys) == 0 && keepBlock {\n\t\t\tfor k, v := range attrs {\n\t\t\t\tif strings.HasPrefix(k, blockKey) {\n\t\t\t\t\t// we need the key relative to this block, so remove the\n\t\t\t\t\t// entire prefix, then re-insert the block name.\n\t\t\t\t\tlocalKey := localBlockPrefix + k[len(blockKey):]\n\t\t\t\t\tresult[localKey] = v\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tcountAddr := strings.Join(append(path, n, \"#\"), \".\")\n\t\tif countDiff, ok := d.Attributes[countAddr]; ok {\n\t\t\tif countDiff.NewComputed {\n\t\t\t\tresult[localBlockPrefix+\"#\"] = hcl2shim.UnknownVariableValue\n\t\t\t} else {\n\t\t\t\tresult[localBlockPrefix+\"#\"] = countDiff.New\n\n\t\t\t\t// While sets are complete, list are not, and we may not have all the\n\t\t\t\t// information to track removals. If the list was truncated, we need to\n\t\t\t\t// remove the extra items from the result.\n\t\t\t\tif block.Nesting == configschema.NestingList &&\n\t\t\t\t\tcountDiff.New != \"\" && countDiff.New != hcl2shim.UnknownVariableValue {\n\t\t\t\t\tlength, _ := strconv.Atoi(countDiff.New)\n\t\t\t\t\tfor k := range result {\n\t\t\t\t\t\tif !strings.HasPrefix(k, localBlockPrefix) {\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tindex := k[len(localBlockPrefix):]\n\t\t\t\t\t\tnextDot := strings.Index(index, \".\")\n\t\t\t\t\t\tif nextDot < 1 {\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t}\n\t\t\t\t\t\tindex = index[:nextDot]\n\t\t\t\t\t\ti, err := strconv.Atoi(index)\n\t\t\t\t\t\tif err != nil {\n\t\t\t\t\t\t\t// this shouldn't happen since we added these\n\t\t\t\t\t\t\t// ourself, but make note of it just in case.\n\t\t\t\t\t\t\tlog.Printf(\"[ERROR] bad list index in %q: %s\", k, err)\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif i >= length {\n\t\t\t\t\t\t\tdelete(result, k)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else if origCount, ok := attrs[countAddr]; ok && keepBlock {\n\t\t\tresult[localBlockPrefix+\"#\"] = origCount\n\t\t} else {\n\t\t\tresult[localBlockPrefix+\"#\"] = countFlatmapContainerValues(localBlockPrefix+\"#\", result)\n\t\t}\n\t}\n\n\treturn result, nil\n}\n\nfunc (d *InstanceDiff) applyAttrDiff(path []string, attrs map[string]string, attrSchema *configschema.Attribute) (map[string]string, error) {\n\tty := attrSchema.Type\n\tswitch {\n\tcase ty.IsListType(), ty.IsTupleType(), ty.IsMapType():\n\t\treturn d.applyCollectionDiff(path, attrs, attrSchema)\n\tcase ty.IsSetType():\n\t\treturn d.applySetDiff(path, attrs, attrSchema)\n\tdefault:\n\t\treturn d.applySingleAttrDiff(path, attrs, attrSchema)\n\t}\n}\n\nfunc (d *InstanceDiff) applySingleAttrDiff(path []string, attrs map[string]string, attrSchema *configschema.Attribute) (map[string]string, error) {\n\tcurrentKey := strings.Join(path, \".\")\n\n\tattr := path[len(path)-1]\n\n\tresult := map[string]string{}\n\tdiff := d.Attributes[currentKey]\n\told, exists := attrs[currentKey]\n\n\tif diff != nil && diff.NewComputed {\n\t\tresult[attr] = config.UnknownVariableValue\n\t\treturn result, nil\n\t}\n\n\t// \"id\" must exist and not be an empty string, or it must be unknown.\n\t// This only applied to top-level \"id\" fields.\n\tif attr == \"id\" && len(path) == 1 {\n\t\tif old == \"\" {\n\t\t\tresult[attr] = config.UnknownVariableValue\n\t\t} else {\n\t\t\tresult[attr] = old\n\t\t}\n\t\treturn result, nil\n\t}\n\n\t// attribute diffs are sometimes missed, so assume no diff means keep the\n\t// old value\n\tif diff == nil {\n\t\tif exists {\n\t\t\tresult[attr] = old\n\t\t} else {\n\t\t\t// We need required values, so set those with an empty value. It\n\t\t\t// must be set in the config, since if it were missing it would have\n\t\t\t// failed validation.\n\t\t\tif attrSchema.Required {\n\t\t\t\t// we only set a missing string here, since bool or number types\n\t\t\t\t// would have distinct zero value which shouldn't have been\n\t\t\t\t// lost.\n\t\t\t\tif attrSchema.Type == cty.String {\n\t\t\t\t\tresult[attr] = \"\"\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result, nil\n\t}\n\n\t// check for missmatched diff values\n\tif exists &&\n\t\told != diff.Old &&\n\t\told != config.UnknownVariableValue &&\n\t\tdiff.Old != config.UnknownVariableValue {\n\t\treturn result, fmt.Errorf(\"diff apply conflict for %s: diff expects %q, but prior value has %q\", attr, diff.Old, old)\n\t}\n\n\tif diff.NewRemoved {\n\t\t// don't set anything in the new value\n\t\treturn map[string]string{}, nil\n\t}\n\n\tif diff.Old == diff.New && diff.New == \"\" {\n\t\t// this can only be a valid empty string\n\t\tif attrSchema.Type == cty.String {\n\t\t\tresult[attr] = \"\"\n\t\t}\n\t\treturn result, nil\n\t}\n\n\tif attrSchema.Computed && diff.NewComputed {\n\t\tresult[attr] = config.UnknownVariableValue\n\t\treturn result, nil\n\t}\n\n\tresult[attr] = diff.New\n\n\treturn result, nil\n}\n\nfunc (d *InstanceDiff) applyCollectionDiff(path []string, attrs map[string]string, attrSchema *configschema.Attribute) (map[string]string, error) {\n\tresult := map[string]string{}\n\n\tprefix := \"\"\n\tif len(path) > 1 {\n\t\tprefix = strings.Join(path[:len(path)-1], \".\") + \".\"\n\t}\n\n\tname := \"\"\n\tif len(path) > 0 {\n\t\tname = path[len(path)-1]\n\t}\n\n\tcurrentKey := prefix + name\n\n\t// check the index first for special handling\n\tfor k, diff := range d.Attributes {\n\t\t// check the index value, which can be set, and 0\n\t\tif k == currentKey+\".#\" || k == currentKey+\".%\" || k == currentKey {\n\t\t\tif diff.NewRemoved {\n\t\t\t\treturn result, nil\n\t\t\t}\n\n\t\t\tif diff.NewComputed {\n\t\t\t\tresult[k[len(prefix):]] = config.UnknownVariableValue\n\t\t\t\treturn result, nil\n\t\t\t}\n\n\t\t\t// do what the diff tells us to here, so that it's consistent with applies\n\t\t\tif diff.New == \"0\" {\n\t\t\t\tresult[k[len(prefix):]] = \"0\"\n\t\t\t\treturn result, nil\n\t\t\t}\n\t\t}\n\t}\n\n\t// collect all the keys from the diff and the old state\n\tnoDiff := true\n\tkeys := map[string]bool{}\n\tfor k := range d.Attributes {\n\t\tif !strings.HasPrefix(k, currentKey+\".\") {\n\t\t\tcontinue\n\t\t}\n\t\tnoDiff = false\n\t\tkeys[k] = true\n\t}\n\n\tnoAttrs := true\n\tfor k := range attrs {\n\t\tif !strings.HasPrefix(k, currentKey+\".\") {\n\t\t\tcontinue\n\t\t}\n\t\tnoAttrs = false\n\t\tkeys[k] = true\n\t}\n\n\t// If there's no diff and no attrs, then there's no value at all.\n\t// This prevents an unexpected zero-count attribute in the attributes.\n\tif noDiff && noAttrs {\n\t\treturn result, nil\n\t}\n\n\tidx := \"#\"\n\tif attrSchema.Type.IsMapType() {\n\t\tidx = \"%\"\n\t}\n\n\tfor k := range keys {\n\t\t// generate an schema placeholder for the values\n\t\telSchema := &configschema.Attribute{\n\t\t\tType: attrSchema.Type.ElementType(),\n\t\t}\n\n\t\tres, err := d.applySingleAttrDiff(append(path, k[len(currentKey)+1:]), attrs, elSchema)\n\t\tif err != nil {\n\t\t\treturn result, err\n\t\t}\n\n\t\tfor k, v := range res {\n\t\t\tresult[name+\".\"+k] = v\n\t\t}\n\t}\n\n\t// Just like in nested list blocks, for simple lists we may need to fill in\n\t// missing empty strings.\n\tcountKey := name + \".\" + idx\n\tcount := result[countKey]\n\tlength, _ := strconv.Atoi(count)\n\n\tif count != \"\" && count != hcl2shim.UnknownVariableValue &&\n\t\tattrSchema.Type.Equals(cty.List(cty.String)) {\n\t\t// insert empty strings into missing indexes\n\t\tfor i := 0; i < length; i++ {\n\t\t\tkey := fmt.Sprintf(\"%s.%d\", name, i)\n\t\t\tif _, ok := result[key]; !ok {\n\t\t\t\tresult[key] = \"\"\n\t\t\t}\n\t\t}\n\t}\n\n\t// now check for truncation in any type of list\n\tif attrSchema.Type.IsListType() {\n\t\tfor key := range result {\n\t\t\tif key == countKey {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif len(key) <= len(name)+1 {\n\t\t\t\t// not sure what this is, but don't panic\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tindex := key[len(name)+1:]\n\n\t\t\t// It is possible to have nested sets or maps, so look for another dot\n\t\t\tdot := strings.Index(index, \".\")\n\t\t\tif dot > 0 {\n\t\t\t\tindex = index[:dot]\n\t\t\t}\n\n\t\t\t// This shouldn't have any more dots, since the element type is only string.\n\t\t\tnum, err := strconv.Atoi(index)\n\t\t\tif err != nil {\n\t\t\t\tlog.Printf(\"[ERROR] bad list index in %q: %s\", currentKey, err)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif num >= length {\n\t\t\t\tdelete(result, key)\n\t\t\t}\n\t\t}\n\t}\n\n\t// Fill in the count value if it wasn't present in the diff for some reason,\n\t// or if there is no count at all.\n\t_, countDiff := d.Attributes[countKey]\n\tif result[countKey] == \"\" || (!countDiff && len(keys) != len(result)) {\n\t\tresult[countKey] = countFlatmapContainerValues(countKey, result)\n\t}\n\n\treturn result, nil\n}\n\nfunc (d *InstanceDiff) applySetDiff(path []string, attrs map[string]string, attrSchema *configschema.Attribute) (map[string]string, error) {\n\t// We only need this special behavior for sets of object.\n\tif !attrSchema.Type.ElementType().IsObjectType() {\n\t\t// The normal collection apply behavior will work okay for this one, then.\n\t\treturn d.applyCollectionDiff(path, attrs, attrSchema)\n\t}\n\n\t// When we're dealing with a set of an object type we actually want to\n\t// use our normal _block type_ apply behaviors, so we'll construct ourselves\n\t// a synthetic schema that treats the object type as a block type and\n\t// then delegate to our block apply method.\n\tsynthSchema := &configschema.Block{\n\t\tAttributes: make(map[string]*configschema.Attribute),\n\t}\n\n\tfor name, ty := range attrSchema.Type.ElementType().AttributeTypes() {\n\t\t// We can safely make everything into an attribute here because in the\n\t\t// event that there are nested set attributes we'll end up back in\n\t\t// here again recursively and can then deal with the next level of\n\t\t// expansion.\n\t\tsynthSchema.Attributes[name] = &configschema.Attribute{\n\t\t\tType:     ty,\n\t\t\tOptional: true,\n\t\t}\n\t}\n\n\tparentPath := path[:len(path)-1]\n\tchildName := path[len(path)-1]\n\tcontainerSchema := &configschema.Block{\n\t\tBlockTypes: map[string]*configschema.NestedBlock{\n\t\t\tchildName: {\n\t\t\t\tNesting: configschema.NestingSet,\n\t\t\t\tBlock:   *synthSchema,\n\t\t\t},\n\t\t},\n\t}\n\n\treturn d.applyBlockDiff(parentPath, attrs, containerSchema)\n}\n\n// countFlatmapContainerValues returns the number of values in the flatmapped container\n// (set, map, list) indexed by key. The key argument is expected to include the\n// trailing \".#\", or \".%\".\nfunc countFlatmapContainerValues(key string, attrs map[string]string) string {\n\tif len(key) < 3 || !(strings.HasSuffix(key, \".#\") || strings.HasSuffix(key, \".%\")) {\n\t\tpanic(fmt.Sprintf(\"invalid index value %q\", key))\n\t}\n\n\tprefix := key[:len(key)-1]\n\titems := map[string]int{}\n\n\tfor k := range attrs {\n\t\tif k == key {\n\t\t\tcontinue\n\t\t}\n\t\tif !strings.HasPrefix(k, prefix) {\n\t\t\tcontinue\n\t\t}\n\n\t\tsuffix := k[len(prefix):]\n\t\tdot := strings.Index(suffix, \".\")\n\t\tif dot > 0 {\n\t\t\tsuffix = suffix[:dot]\n\t\t}\n\n\t\titems[suffix]++\n\t}\n\treturn strconv.Itoa(len(items))\n}\n\n// ResourceAttrDiff is the diff of a single attribute of a resource.\ntype ResourceAttrDiff struct {\n\tOld         string      // Old Value\n\tNew         string      // New Value\n\tNewComputed bool        // True if new value is computed (unknown currently)\n\tNewRemoved  bool        // True if this attribute is being removed\n\tNewExtra    interface{} // Extra information for the provider\n\tRequiresNew bool        // True if change requires new resource\n\tSensitive   bool        // True if the data should not be displayed in UI output\n\tType        DiffAttrType\n}\n\n// Empty returns true if the diff for this attr is neutral\nfunc (d *ResourceAttrDiff) Empty() bool {\n\treturn d.Old == d.New && !d.NewComputed && !d.NewRemoved\n}\n\nfunc (d *ResourceAttrDiff) GoString() string {\n\treturn fmt.Sprintf(\"*%#v\", *d)\n}\n\n// DiffAttrType is an enum type that says whether a resource attribute\n// diff is an input attribute (comes from the configuration) or an\n// output attribute (comes as a result of applying the configuration). An\n// example input would be \"ami\" for AWS and an example output would be\n// \"private_ip\".\ntype DiffAttrType byte\n\nconst (\n\tDiffAttrUnknown DiffAttrType = iota\n\tDiffAttrInput\n\tDiffAttrOutput\n)\n\nfunc (d *InstanceDiff) init() {\n\tif d.Attributes == nil {\n\t\td.Attributes = make(map[string]*ResourceAttrDiff)\n\t}\n}\n\nfunc NewInstanceDiff() *InstanceDiff {\n\treturn &InstanceDiff{Attributes: make(map[string]*ResourceAttrDiff)}\n}\n\nfunc (d *InstanceDiff) Copy() (*InstanceDiff, error) {\n\tif d == nil {\n\t\treturn nil, nil\n\t}\n\n\tdCopy, err := copystructure.Config{Lock: true}.Copy(d)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn dCopy.(*InstanceDiff), nil\n}\n\n// ChangeType returns the DiffChangeType represented by the diff\n// for this single instance.\nfunc (d *InstanceDiff) ChangeType() DiffChangeType {\n\tif d.Empty() {\n\t\treturn DiffNone\n\t}\n\n\tif d.RequiresNew() && (d.GetDestroy() || d.GetDestroyTainted()) {\n\t\treturn DiffDestroyCreate\n\t}\n\n\tif d.GetDestroy() || d.GetDestroyDeposed() {\n\t\treturn DiffDestroy\n\t}\n\n\tif d.RequiresNew() {\n\t\treturn DiffCreate\n\t}\n\n\treturn DiffUpdate\n}\n\n// Empty returns true if this diff encapsulates no changes.\nfunc (d *InstanceDiff) Empty() bool {\n\tif d == nil {\n\t\treturn true\n\t}\n\n\td.mu.Lock()\n\tdefer d.mu.Unlock()\n\treturn !d.Destroy &&\n\t\t!d.DestroyTainted &&\n\t\t!d.DestroyDeposed &&\n\t\tlen(d.Attributes) == 0\n}\n\n// Equal compares two diffs for exact equality.\n//\n// This is different from the Same comparison that is supported which\n// checks for operation equality taking into account computed values. Equal\n// instead checks for exact equality.\nfunc (d *InstanceDiff) Equal(d2 *InstanceDiff) bool {\n\t// If one is nil, they must both be nil\n\tif d == nil || d2 == nil {\n\t\treturn d == d2\n\t}\n\n\t// Use DeepEqual\n\treturn reflect.DeepEqual(d, d2)\n}\n\n// DeepCopy performs a deep copy of all parts of the InstanceDiff\nfunc (d *InstanceDiff) DeepCopy() *InstanceDiff {\n\tcopy, err := copystructure.Config{Lock: true}.Copy(d)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\treturn copy.(*InstanceDiff)\n}\n\nfunc (d *InstanceDiff) GoString() string {\n\treturn fmt.Sprintf(\"*%#v\", InstanceDiff{\n\t\tAttributes:     d.Attributes,\n\t\tDestroy:        d.Destroy,\n\t\tDestroyTainted: d.DestroyTainted,\n\t\tDestroyDeposed: d.DestroyDeposed,\n\t})\n}\n\n// RequiresNew returns true if the diff requires the creation of a new\n// resource (implying the destruction of the old).\nfunc (d *InstanceDiff) RequiresNew() bool {\n\tif d == nil {\n\t\treturn false\n\t}\n\n\td.mu.Lock()\n\tdefer d.mu.Unlock()\n\n\treturn d.requiresNew()\n}\n\nfunc (d *InstanceDiff) requiresNew() bool {\n\tif d == nil {\n\t\treturn false\n\t}\n\n\tif d.DestroyTainted {\n\t\treturn true\n\t}\n\n\tfor _, rd := range d.Attributes {\n\t\tif rd != nil && rd.RequiresNew {\n\t\t\treturn true\n\t\t}\n\t}\n\n\treturn false\n}\n\nfunc (d *InstanceDiff) GetDestroyDeposed() bool {\n\td.mu.Lock()\n\tdefer d.mu.Unlock()\n\n\treturn d.DestroyDeposed\n}\n\nfunc (d *InstanceDiff) SetDestroyDeposed(b bool) {\n\td.mu.Lock()\n\tdefer d.mu.Unlock()\n\n\td.DestroyDeposed = b\n}\n\n// These methods are properly locked, for use outside other InstanceDiff\n// methods but everywhere else within the terraform package.\n// TODO refactor the locking scheme\nfunc (d *InstanceDiff) SetTainted(b bool) {\n\td.mu.Lock()\n\tdefer d.mu.Unlock()\n\n\td.DestroyTainted = b\n}\n\nfunc (d *InstanceDiff) GetDestroyTainted() bool {\n\td.mu.Lock()\n\tdefer d.mu.Unlock()\n\n\treturn d.DestroyTainted\n}\n\nfunc (d *InstanceDiff) SetDestroy(b bool) {\n\td.mu.Lock()\n\tdefer d.mu.Unlock()\n\n\td.Destroy = b\n}\n\nfunc (d *InstanceDiff) GetDestroy() bool {\n\td.mu.Lock()\n\tdefer d.mu.Unlock()\n\n\treturn d.Destroy\n}\n\nfunc (d *InstanceDiff) SetAttribute(key string, attr *ResourceAttrDiff) {\n\td.mu.Lock()\n\tdefer d.mu.Unlock()\n\n\td.Attributes[key] = attr\n}\n\nfunc (d *InstanceDiff) DelAttribute(key string) {\n\td.mu.Lock()\n\tdefer d.mu.Unlock()\n\n\tdelete(d.Attributes, key)\n}\n\nfunc (d *InstanceDiff) GetAttribute(key string) (*ResourceAttrDiff, bool) {\n\td.mu.Lock()\n\tdefer d.mu.Unlock()\n\n\tattr, ok := d.Attributes[key]\n\treturn attr, ok\n}\nfunc (d *InstanceDiff) GetAttributesLen() int {\n\td.mu.Lock()\n\tdefer d.mu.Unlock()\n\n\treturn len(d.Attributes)\n}\n\n// Safely copies the Attributes map\nfunc (d *InstanceDiff) CopyAttributes() map[string]*ResourceAttrDiff {\n\td.mu.Lock()\n\tdefer d.mu.Unlock()\n\n\tattrs := make(map[string]*ResourceAttrDiff)\n\tfor k, v := range d.Attributes {\n\t\tattrs[k] = v\n\t}\n\n\treturn attrs\n}\n\n// Same checks whether or not two InstanceDiff's are the \"same\". When\n// we say \"same\", it is not necessarily exactly equal. Instead, it is\n// just checking that the same attributes are changing, a destroy\n// isn't suddenly happening, etc.\nfunc (d *InstanceDiff) Same(d2 *InstanceDiff) (bool, string) {\n\t// we can safely compare the pointers without a lock\n\tswitch {\n\tcase d == nil && d2 == nil:\n\t\treturn true, \"\"\n\tcase d == nil || d2 == nil:\n\t\treturn false, \"one nil\"\n\tcase d == d2:\n\t\treturn true, \"\"\n\t}\n\n\td.mu.Lock()\n\tdefer d.mu.Unlock()\n\n\t// If we're going from requiring new to NOT requiring new, then we have\n\t// to see if all required news were computed. If so, it is allowed since\n\t// computed may also mean \"same value and therefore not new\".\n\toldNew := d.requiresNew()\n\tnewNew := d2.RequiresNew()\n\tif oldNew && !newNew {\n\t\toldNew = false\n\n\t\t// This section builds a list of ignorable attributes for requiresNew\n\t\t// by removing off any elements of collections going to zero elements.\n\t\t// For collections going to zero, they may not exist at all in the\n\t\t// new diff (and hence RequiresNew == false).\n\t\tignoreAttrs := make(map[string]struct{})\n\t\tfor k, diffOld := range d.Attributes {\n\t\t\tif !strings.HasSuffix(k, \".%\") && !strings.HasSuffix(k, \".#\") {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// This case is in here as a protection measure. The bug that this\n\t\t\t// code originally fixed (GH-11349) didn't have to deal with computed\n\t\t\t// so I'm not 100% sure what the correct behavior is. Best to leave\n\t\t\t// the old behavior.\n\t\t\tif diffOld.NewComputed {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// We're looking for the case a map goes to exactly 0.\n\t\t\tif diffOld.New != \"0\" {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// Found it! Ignore all of these. The prefix here is stripping\n\t\t\t// off the \"%\" so it is just \"k.\"\n\t\t\tprefix := k[:len(k)-1]\n\t\t\tfor k2, _ := range d.Attributes {\n\t\t\t\tif strings.HasPrefix(k2, prefix) {\n\t\t\t\t\tignoreAttrs[k2] = struct{}{}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor k, rd := range d.Attributes {\n\t\t\tif _, ok := ignoreAttrs[k]; ok {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// If the field is requires new and NOT computed, then what\n\t\t\t// we have is a diff mismatch for sure. We set that the old\n\t\t\t// diff does REQUIRE a ForceNew.\n\t\t\tif rd != nil && rd.RequiresNew && !rd.NewComputed {\n\t\t\t\toldNew = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\n\tif oldNew != newNew {\n\t\treturn false, fmt.Sprintf(\n\t\t\t\"diff RequiresNew; old: %t, new: %t\", oldNew, newNew)\n\t}\n\n\t// Verify that destroy matches. The second boolean here allows us to\n\t// have mismatching Destroy if we're moving from RequiresNew true\n\t// to false above. Therefore, the second boolean will only pass if\n\t// we're moving from Destroy: true to false as well.\n\tif d.Destroy != d2.GetDestroy() && d.requiresNew() == oldNew {\n\t\treturn false, fmt.Sprintf(\n\t\t\t\"diff: Destroy; old: %t, new: %t\", d.Destroy, d2.GetDestroy())\n\t}\n\n\t// Go through the old diff and make sure the new diff has all the\n\t// same attributes. To start, build up the check map to be all the keys.\n\tcheckOld := make(map[string]struct{})\n\tcheckNew := make(map[string]struct{})\n\tfor k, _ := range d.Attributes {\n\t\tcheckOld[k] = struct{}{}\n\t}\n\tfor k, _ := range d2.CopyAttributes() {\n\t\tcheckNew[k] = struct{}{}\n\t}\n\n\t// Make an ordered list so we are sure the approximated hashes are left\n\t// to process at the end of the loop\n\tkeys := make([]string, 0, len(d.Attributes))\n\tfor k, _ := range d.Attributes {\n\t\tkeys = append(keys, k)\n\t}\n\tsort.StringSlice(keys).Sort()\n\n\tfor _, k := range keys {\n\t\tdiffOld := d.Attributes[k]\n\n\t\tif _, ok := checkOld[k]; !ok {\n\t\t\t// We're not checking this key for whatever reason (see where\n\t\t\t// check is modified).\n\t\t\tcontinue\n\t\t}\n\n\t\t// Remove this key since we'll never hit it again\n\t\tdelete(checkOld, k)\n\t\tdelete(checkNew, k)\n\n\t\t_, ok := d2.GetAttribute(k)\n\t\tif !ok {\n\t\t\t// If there's no new attribute, and the old diff expected the attribute\n\t\t\t// to be removed, that's just fine.\n\t\t\tif diffOld.NewRemoved {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// If the last diff was a computed value then the absense of\n\t\t\t// that value is allowed since it may mean the value ended up\n\t\t\t// being the same.\n\t\t\tif diffOld.NewComputed {\n\t\t\t\tok = true\n\t\t\t}\n\n\t\t\t// No exact match, but maybe this is a set containing computed\n\t\t\t// values. So check if there is an approximate hash in the key\n\t\t\t// and if so, try to match the key.\n\t\t\tif strings.Contains(k, \"~\") {\n\t\t\t\tparts := strings.Split(k, \".\")\n\t\t\t\tparts2 := append([]string(nil), parts...)\n\n\t\t\t\tre := regexp.MustCompile(`^~\\d+$`)\n\t\t\t\tfor i, part := range parts {\n\t\t\t\t\tif re.MatchString(part) {\n\t\t\t\t\t\t// we're going to consider this the base of a\n\t\t\t\t\t\t// computed hash, and remove all longer matching fields\n\t\t\t\t\t\tok = true\n\n\t\t\t\t\t\tparts2[i] = `\\d+`\n\t\t\t\t\t\tparts2 = parts2[:i+1]\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tre, err := regexp.Compile(\"^\" + strings.Join(parts2, `\\.`))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn false, fmt.Sprintf(\"regexp failed to compile; err: %#v\", err)\n\t\t\t\t}\n\n\t\t\t\tfor k2, _ := range checkNew {\n\t\t\t\t\tif re.MatchString(k2) {\n\t\t\t\t\t\tdelete(checkNew, k2)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// This is a little tricky, but when a diff contains a computed\n\t\t\t// list, set, or map that can only be interpolated after the apply\n\t\t\t// command has created the dependent resources, it could turn out\n\t\t\t// that the result is actually the same as the existing state which\n\t\t\t// would remove the key from the diff.\n\t\t\tif diffOld.NewComputed && (strings.HasSuffix(k, \".#\") || strings.HasSuffix(k, \".%\")) {\n\t\t\t\tok = true\n\t\t\t}\n\n\t\t\t// Similarly, in a RequiresNew scenario, a list that shows up in the plan\n\t\t\t// diff can disappear from the apply diff, which is calculated from an\n\t\t\t// empty state.\n\t\t\tif d.requiresNew() && (strings.HasSuffix(k, \".#\") || strings.HasSuffix(k, \".%\")) {\n\t\t\t\tok = true\n\t\t\t}\n\n\t\t\tif !ok {\n\t\t\t\treturn false, fmt.Sprintf(\"attribute mismatch: %s\", k)\n\t\t\t}\n\t\t}\n\n\t\t// search for the suffix of the base of a [computed] map, list or set.\n\t\tmatch := multiVal.FindStringSubmatch(k)\n\n\t\tif diffOld.NewComputed && len(match) == 2 {\n\t\t\tmatchLen := len(match[1])\n\n\t\t\t// This is a computed list, set, or map, so remove any keys with\n\t\t\t// this prefix from the check list.\n\t\t\tkprefix := k[:len(k)-matchLen]\n\t\t\tfor k2, _ := range checkOld {\n\t\t\t\tif strings.HasPrefix(k2, kprefix) {\n\t\t\t\t\tdelete(checkOld, k2)\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor k2, _ := range checkNew {\n\t\t\t\tif strings.HasPrefix(k2, kprefix) {\n\t\t\t\t\tdelete(checkNew, k2)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// We don't compare the values because we can't currently actually\n\t\t// guarantee to generate the same value two two diffs created from\n\t\t// the same state+config: we have some pesky interpolation functions\n\t\t// that do not behave as pure functions (uuid, timestamp) and so they\n\t\t// can be different each time a diff is produced.\n\t\t// FIXME: Re-organize our config handling so that we don't re-evaluate\n\t\t// expressions when we produce a second comparison diff during\n\t\t// apply (for EvalCompareDiff).\n\t}\n\n\t// Check for leftover attributes\n\tif len(checkNew) > 0 {\n\t\textras := make([]string, 0, len(checkNew))\n\t\tfor attr, _ := range checkNew {\n\t\t\textras = append(extras, attr)\n\t\t}\n\t\treturn false,\n\t\t\tfmt.Sprintf(\"extra attributes: %s\", strings.Join(extras, \", \"))\n\t}\n\n\treturn true, \"\"\n}\n\n// moduleDiffSort implements sort.Interface to sort module diffs by path.\ntype moduleDiffSort []*ModuleDiff\n\nfunc (s moduleDiffSort) Len() int      { return len(s) }\nfunc (s moduleDiffSort) Swap(i, j int) { s[i], s[j] = s[j], s[i] }\nfunc (s moduleDiffSort) Less(i, j int) bool {\n\ta := s[i]\n\tb := s[j]\n\n\t// If the lengths are different, then the shorter one always wins\n\tif len(a.Path) != len(b.Path) {\n\t\treturn len(a.Path) < len(b.Path)\n\t}\n\n\t// Otherwise, compare lexically\n\treturn strings.Join(a.Path, \".\") < strings.Join(b.Path, \".\")\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/edge_destroy.go",
    "content": "package terraform\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/hashicorp/terraform/dag\"\n)\n\n// DestroyEdge is an edge that represents a standard \"destroy\" relationship:\n// Target depends on Source because Source is destroying.\ntype DestroyEdge struct {\n\tS, T dag.Vertex\n}\n\nfunc (e *DestroyEdge) Hashcode() interface{} { return fmt.Sprintf(\"%p-%p\", e.S, e.T) }\nfunc (e *DestroyEdge) Source() dag.Vertex    { return e.S }\nfunc (e *DestroyEdge) Target() dag.Vertex    { return e.T }\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/eval.go",
    "content": "package terraform\n\nimport (\n\t\"log\"\n\n\t\"github.com/hashicorp/terraform/tfdiags\"\n)\n\n// EvalNode is the interface that must be implemented by graph nodes to\n// evaluate/execute.\ntype EvalNode interface {\n\t// Eval evaluates this node with the given context. The second parameter\n\t// are the argument values. These will match in order and 1-1 with the\n\t// results of the Args() return value.\n\tEval(EvalContext) (interface{}, error)\n}\n\n// GraphNodeEvalable is the interface that graph nodes must implement\n// to enable valuation.\ntype GraphNodeEvalable interface {\n\tEvalTree() EvalNode\n}\n\n// EvalEarlyExitError is a special error return value that can be returned\n// by eval nodes that does an early exit.\ntype EvalEarlyExitError struct{}\n\nfunc (EvalEarlyExitError) Error() string { return \"early exit\" }\n\n// Eval evaluates the given EvalNode with the given context, properly\n// evaluating all args in the correct order.\nfunc Eval(n EvalNode, ctx EvalContext) (interface{}, error) {\n\t// Call the lower level eval which doesn't understand early exit,\n\t// and if we early exit, it isn't an error.\n\tresult, err := EvalRaw(n, ctx)\n\tif err != nil {\n\t\tif _, ok := err.(EvalEarlyExitError); ok {\n\t\t\treturn nil, nil\n\t\t}\n\t}\n\n\treturn result, err\n}\n\n// EvalRaw is like Eval except that it returns all errors, even if they\n// signal something normal such as EvalEarlyExitError.\nfunc EvalRaw(n EvalNode, ctx EvalContext) (interface{}, error) {\n\tpath := \"unknown\"\n\tif ctx != nil {\n\t\tpath = ctx.Path().String()\n\t}\n\tif path == \"\" {\n\t\tpath = \"<root>\"\n\t}\n\n\tlog.Printf(\"[TRACE] %s: eval: %T\", path, n)\n\toutput, err := n.Eval(ctx)\n\tif err != nil {\n\t\tswitch err.(type) {\n\t\tcase EvalEarlyExitError:\n\t\t\tlog.Printf(\"[TRACE] %s: eval: %T, early exit err: %s\", path, n, err)\n\t\tcase tfdiags.NonFatalError:\n\t\t\tlog.Printf(\"[WARN] %s: eval: %T, non-fatal err: %s\", path, n, err)\n\t\tdefault:\n\t\t\tlog.Printf(\"[ERROR] %s: eval: %T, err: %s\", path, n, err)\n\t\t}\n\t}\n\n\treturn output, err\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/eval_apply.go",
    "content": "package terraform\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"strings\"\n\n\t\"github.com/hashicorp/go-multierror\"\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/zclconf/go-cty/cty\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/configs\"\n\t\"github.com/hashicorp/terraform/plans\"\n\t\"github.com/hashicorp/terraform/plans/objchange\"\n\t\"github.com/hashicorp/terraform/providers\"\n\t\"github.com/hashicorp/terraform/provisioners\"\n\t\"github.com/hashicorp/terraform/states\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n)\n\n// EvalApply is an EvalNode implementation that writes the diff to\n// the full diff.\ntype EvalApply struct {\n\tAddr           addrs.ResourceInstance\n\tConfig         *configs.Resource\n\tDependencies   []addrs.Referenceable\n\tState          **states.ResourceInstanceObject\n\tChange         **plans.ResourceInstanceChange\n\tProviderAddr   addrs.AbsProviderConfig\n\tProvider       *providers.Interface\n\tProviderSchema **ProviderSchema\n\tOutput         **states.ResourceInstanceObject\n\tCreateNew      *bool\n\tError          *error\n}\n\n// TODO: test\nfunc (n *EvalApply) Eval(ctx EvalContext) (interface{}, error) {\n\tvar diags tfdiags.Diagnostics\n\n\tchange := *n.Change\n\tprovider := *n.Provider\n\tstate := *n.State\n\tabsAddr := n.Addr.Absolute(ctx.Path())\n\n\tif state == nil {\n\t\tstate = &states.ResourceInstanceObject{}\n\t}\n\n\tschema, _ := (*n.ProviderSchema).SchemaForResourceType(n.Addr.Resource.Mode, n.Addr.Resource.Type)\n\tif schema == nil {\n\t\t// Should be caught during validation, so we don't bother with a pretty error here\n\t\treturn nil, fmt.Errorf(\"provider does not support resource type %q\", n.Addr.Resource.Type)\n\t}\n\n\tif n.CreateNew != nil {\n\t\t*n.CreateNew = (change.Action == plans.Create || change.Action.IsReplace())\n\t}\n\n\tconfigVal := cty.NullVal(cty.DynamicPseudoType)\n\tif n.Config != nil {\n\t\tvar configDiags tfdiags.Diagnostics\n\t\tkeyData := EvalDataForInstanceKey(n.Addr.Key)\n\t\tconfigVal, _, configDiags = ctx.EvaluateBlock(n.Config.Config, schema, nil, keyData)\n\t\tdiags = diags.Append(configDiags)\n\t\tif configDiags.HasErrors() {\n\t\t\treturn nil, diags.Err()\n\t\t}\n\t}\n\n\tlog.Printf(\"[DEBUG] %s: applying the planned %s change\", n.Addr.Absolute(ctx.Path()), change.Action)\n\tresp := provider.ApplyResourceChange(providers.ApplyResourceChangeRequest{\n\t\tTypeName:       n.Addr.Resource.Type,\n\t\tPriorState:     change.Before,\n\t\tConfig:         configVal,\n\t\tPlannedState:   change.After,\n\t\tPlannedPrivate: change.Private,\n\t})\n\tapplyDiags := resp.Diagnostics\n\tif n.Config != nil {\n\t\tapplyDiags = applyDiags.InConfigBody(n.Config.Config)\n\t}\n\tdiags = diags.Append(applyDiags)\n\n\t// Even if there are errors in the returned diagnostics, the provider may\n\t// have returned a _partial_ state for an object that already exists but\n\t// failed to fully configure, and so the remaining code must always run\n\t// to completion but must be defensive against the new value being\n\t// incomplete.\n\tnewVal := resp.NewState\n\n\tif newVal == cty.NilVal {\n\t\t// Providers are supposed to return a partial new value even when errors\n\t\t// occur, but sometimes they don't and so in that case we'll patch that up\n\t\t// by just using the prior state, so we'll at least keep track of the\n\t\t// object for the user to retry.\n\t\tnewVal = change.Before\n\n\t\t// As a special case, we'll set the new value to null if it looks like\n\t\t// we were trying to execute a delete, because the provider in this case\n\t\t// probably left the newVal unset intending it to be interpreted as \"null\".\n\t\tif change.After.IsNull() {\n\t\t\tnewVal = cty.NullVal(schema.ImpliedType())\n\t\t}\n\n\t\t// Ideally we'd produce an error or warning here if newVal is nil and\n\t\t// there are no errors in diags, because that indicates a buggy\n\t\t// provider not properly reporting its result, but unfortunately many\n\t\t// of our historical test mocks behave in this way and so producing\n\t\t// a diagnostic here fails hundreds of tests. Instead, we must just\n\t\t// silently retain the old value for now. Returning a nil value with\n\t\t// no errors is still always considered a bug in the provider though,\n\t\t// and should be fixed for any \"real\" providers that do it.\n\t}\n\n\tvar conformDiags tfdiags.Diagnostics\n\tfor _, err := range newVal.Type().TestConformance(schema.ImpliedType()) {\n\t\tconformDiags = conformDiags.Append(tfdiags.Sourceless(\n\t\t\ttfdiags.Error,\n\t\t\t\"Provider produced invalid object\",\n\t\t\tfmt.Sprintf(\n\t\t\t\t\"Provider %q produced an invalid value after apply for %s. The result cannot not be saved in the Terraform state.\\n\\nThis is a bug in the provider, which should be reported in the provider's own issue tracker.\",\n\t\t\t\tn.ProviderAddr.ProviderConfig.Type, tfdiags.FormatErrorPrefixed(err, absAddr.String()),\n\t\t\t),\n\t\t))\n\t}\n\tdiags = diags.Append(conformDiags)\n\tif conformDiags.HasErrors() {\n\t\t// Bail early in this particular case, because an object that doesn't\n\t\t// conform to the schema can't be saved in the state anyway -- the\n\t\t// serializer will reject it.\n\t\treturn nil, diags.Err()\n\t}\n\n\t// After this point we have a type-conforming result object and so we\n\t// must always run to completion to ensure it can be saved. If n.Error\n\t// is set then we must not return a non-nil error, in order to allow\n\t// evaluation to continue to a later point where our state object will\n\t// be saved.\n\n\t// By this point there must not be any unknown values remaining in our\n\t// object, because we've applied the change and we can't save unknowns\n\t// in our persistent state. If any are present then we will indicate an\n\t// error (which is always a bug in the provider) but we will also replace\n\t// them with nulls so that we can successfully save the portions of the\n\t// returned value that are known.\n\tif !newVal.IsWhollyKnown() {\n\t\t// To generate better error messages, we'll go for a walk through the\n\t\t// value and make a separate diagnostic for each unknown value we\n\t\t// find.\n\t\tcty.Walk(newVal, func(path cty.Path, val cty.Value) (bool, error) {\n\t\t\tif !val.IsKnown() {\n\t\t\t\tpathStr := tfdiags.FormatCtyPath(path)\n\t\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\t\ttfdiags.Error,\n\t\t\t\t\t\"Provider returned invalid result object after apply\",\n\t\t\t\t\tfmt.Sprintf(\n\t\t\t\t\t\t\"After the apply operation, the provider still indicated an unknown value for %s%s. All values must be known after apply, so this is always a bug in the provider and should be reported in the provider's own repository. Terraform will still save the other known object values in the state.\",\n\t\t\t\t\t\tn.Addr.Absolute(ctx.Path()), pathStr,\n\t\t\t\t\t),\n\t\t\t\t))\n\t\t\t}\n\t\t\treturn true, nil\n\t\t})\n\n\t\t// NOTE: This operation can potentially be lossy if there are multiple\n\t\t// elements in a set that differ only by unknown values: after\n\t\t// replacing with null these will be merged together into a single set\n\t\t// element. Since we can only get here in the presence of a provider\n\t\t// bug, we accept this because storing a result here is always a\n\t\t// best-effort sort of thing.\n\t\tnewVal = cty.UnknownAsNull(newVal)\n\t}\n\n\tif change.Action != plans.Delete && !diags.HasErrors() {\n\t\t// Only values that were marked as unknown in the planned value are allowed\n\t\t// to change during the apply operation. (We do this after the unknown-ness\n\t\t// check above so that we also catch anything that became unknown after\n\t\t// being known during plan.)\n\t\t//\n\t\t// If we are returning other errors anyway then we'll give this\n\t\t// a pass since the other errors are usually the explanation for\n\t\t// this one and so it's more helpful to let the user focus on the\n\t\t// root cause rather than distract with this extra problem.\n\t\tif errs := objchange.AssertObjectCompatible(schema, change.After, newVal); len(errs) > 0 {\n\t\t\tif resp.LegacyTypeSystem {\n\t\t\t\t// The shimming of the old type system in the legacy SDK is not precise\n\t\t\t\t// enough to pass this consistency check, so we'll give it a pass here,\n\t\t\t\t// but we will generate a warning about it so that we are more likely\n\t\t\t\t// to notice in the logs if an inconsistency beyond the type system\n\t\t\t\t// leads to a downstream provider failure.\n\t\t\t\tvar buf strings.Builder\n\t\t\t\tfmt.Fprintf(&buf, \"[WARN] Provider %q produced an unexpected new value for %s, but we are tolerating it because it is using the legacy plugin SDK.\\n    The following problems may be the cause of any confusing errors from downstream operations:\", n.ProviderAddr.ProviderConfig.Type, absAddr)\n\t\t\t\tfor _, err := range errs {\n\t\t\t\t\tfmt.Fprintf(&buf, \"\\n      - %s\", tfdiags.FormatError(err))\n\t\t\t\t}\n\t\t\t\tlog.Print(buf.String())\n\n\t\t\t\t// The sort of inconsistency we won't catch here is if a known value\n\t\t\t\t// in the plan is changed during apply. That can cause downstream\n\t\t\t\t// problems because a dependent resource would make its own plan based\n\t\t\t\t// on the planned value, and thus get a different result during the\n\t\t\t\t// apply phase. This will usually lead to a \"Provider produced invalid plan\"\n\t\t\t\t// error that incorrectly blames the downstream resource for the change.\n\n\t\t\t} else {\n\t\t\t\tfor _, err := range errs {\n\t\t\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\t\t\ttfdiags.Error,\n\t\t\t\t\t\t\"Provider produced inconsistent result after apply\",\n\t\t\t\t\t\tfmt.Sprintf(\n\t\t\t\t\t\t\t\"When applying changes to %s, provider %q produced an unexpected new value for %s.\\n\\nThis is a bug in the provider, which should be reported in the provider's own issue tracker.\",\n\t\t\t\t\t\t\tabsAddr, n.ProviderAddr.ProviderConfig.Type, tfdiags.FormatError(err),\n\t\t\t\t\t\t),\n\t\t\t\t\t))\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// If a provider returns a null or non-null object at the wrong time then\n\t// we still want to save that but it often causes some confusing behaviors\n\t// where it seems like Terraform is failing to take any action at all,\n\t// so we'll generate some errors to draw attention to it.\n\tif !diags.HasErrors() {\n\t\tif change.Action == plans.Delete && !newVal.IsNull() {\n\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\ttfdiags.Error,\n\t\t\t\t\"Provider returned invalid result object after apply\",\n\t\t\t\tfmt.Sprintf(\n\t\t\t\t\t\"After applying a %s plan, the provider returned a non-null object for %s. Destroying should always produce a null value, so this is always a bug in the provider and should be reported in the provider's own repository. Terraform will still save this errant object in the state for debugging and recovery.\",\n\t\t\t\t\tchange.Action, n.Addr.Absolute(ctx.Path()),\n\t\t\t\t),\n\t\t\t))\n\t\t}\n\t\tif change.Action != plans.Delete && newVal.IsNull() {\n\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\ttfdiags.Error,\n\t\t\t\t\"Provider returned invalid result object after apply\",\n\t\t\t\tfmt.Sprintf(\n\t\t\t\t\t\"After applying a %s plan, the provider returned a null object for %s. Only destroying should always produce a null value, so this is always a bug in the provider and should be reported in the provider's own repository.\",\n\t\t\t\t\tchange.Action, n.Addr.Absolute(ctx.Path()),\n\t\t\t\t),\n\t\t\t))\n\t\t}\n\t}\n\n\t// Sometimes providers return a null value when an operation fails for some\n\t// reason, but we'd rather keep the prior state so that the error can be\n\t// corrected on a subsequent run. We must only do this for null new value\n\t// though, or else we may discard partial updates the provider was able to\n\t// complete.\n\tif diags.HasErrors() && newVal.IsNull() {\n\t\t// Otherwise, we'll continue but using the prior state as the new value,\n\t\t// making this effectively a no-op. If the item really _has_ been\n\t\t// deleted then our next refresh will detect that and fix it up.\n\t\t// If change.Action is Create then change.Before will also be null,\n\t\t// which is fine.\n\t\tnewVal = change.Before\n\t}\n\n\tvar newState *states.ResourceInstanceObject\n\tif !newVal.IsNull() { // null value indicates that the object is deleted, so we won't set a new state in that case\n\t\tnewState = &states.ResourceInstanceObject{\n\t\t\tStatus:       states.ObjectReady,\n\t\t\tValue:        newVal,\n\t\t\tPrivate:      resp.Private,\n\t\t\tDependencies: n.Dependencies, // Should be populated by the caller from the StateDependencies method on the resource instance node\n\t\t}\n\t}\n\n\t// Write the final state\n\tif n.Output != nil {\n\t\t*n.Output = newState\n\t}\n\n\tif diags.HasErrors() {\n\t\t// If the caller provided an error pointer then they are expected to\n\t\t// handle the error some other way and we treat our own result as\n\t\t// success.\n\t\tif n.Error != nil {\n\t\t\terr := diags.Err()\n\t\t\t*n.Error = err\n\t\t\tlog.Printf(\"[DEBUG] %s: apply errored, but we're indicating that via the Error pointer rather than returning it: %s\", n.Addr.Absolute(ctx.Path()), err)\n\t\t\treturn nil, nil\n\t\t}\n\t}\n\n\treturn nil, diags.ErrWithWarnings()\n}\n\n// EvalApplyPre is an EvalNode implementation that does the pre-Apply work\ntype EvalApplyPre struct {\n\tAddr   addrs.ResourceInstance\n\tGen    states.Generation\n\tState  **states.ResourceInstanceObject\n\tChange **plans.ResourceInstanceChange\n}\n\n// TODO: test\nfunc (n *EvalApplyPre) Eval(ctx EvalContext) (interface{}, error) {\n\tchange := *n.Change\n\tabsAddr := n.Addr.Absolute(ctx.Path())\n\n\tif change == nil {\n\t\tpanic(fmt.Sprintf(\"EvalApplyPre for %s called with nil Change\", absAddr))\n\t}\n\n\tif resourceHasUserVisibleApply(n.Addr) {\n\t\tpriorState := change.Before\n\t\tplannedNewState := change.After\n\n\t\terr := ctx.Hook(func(h Hook) (HookAction, error) {\n\t\t\treturn h.PreApply(absAddr, n.Gen, change.Action, priorState, plannedNewState)\n\t\t})\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\treturn nil, nil\n}\n\n// EvalApplyPost is an EvalNode implementation that does the post-Apply work\ntype EvalApplyPost struct {\n\tAddr  addrs.ResourceInstance\n\tGen   states.Generation\n\tState **states.ResourceInstanceObject\n\tError *error\n}\n\n// TODO: test\nfunc (n *EvalApplyPost) Eval(ctx EvalContext) (interface{}, error) {\n\tstate := *n.State\n\n\tif resourceHasUserVisibleApply(n.Addr) {\n\t\tabsAddr := n.Addr.Absolute(ctx.Path())\n\t\tvar newState cty.Value\n\t\tif state != nil {\n\t\t\tnewState = state.Value\n\t\t} else {\n\t\t\tnewState = cty.NullVal(cty.DynamicPseudoType)\n\t\t}\n\t\tvar err error\n\t\tif n.Error != nil {\n\t\t\terr = *n.Error\n\t\t}\n\n\t\thookErr := ctx.Hook(func(h Hook) (HookAction, error) {\n\t\t\treturn h.PostApply(absAddr, n.Gen, newState, err)\n\t\t})\n\t\tif hookErr != nil {\n\t\t\treturn nil, hookErr\n\t\t}\n\t}\n\n\treturn nil, *n.Error\n}\n\n// EvalMaybeTainted is an EvalNode that takes the planned change, new value,\n// and possible error from an apply operation and produces a new instance\n// object marked as tainted if it appears that a create operation has failed.\n//\n// This EvalNode never returns an error, to ensure that a subsequent EvalNode\n// can still record the possibly-tainted object in the state.\ntype EvalMaybeTainted struct {\n\tAddr   addrs.ResourceInstance\n\tGen    states.Generation\n\tChange **plans.ResourceInstanceChange\n\tState  **states.ResourceInstanceObject\n\tError  *error\n\n\t// If StateOutput is not nil, its referent will be assigned either the same\n\t// pointer as State or a new object with its status set as Tainted,\n\t// depending on whether an error is given and if this was a create action.\n\tStateOutput **states.ResourceInstanceObject\n}\n\n// TODO: test\nfunc (n *EvalMaybeTainted) Eval(ctx EvalContext) (interface{}, error) {\n\tstate := *n.State\n\tchange := *n.Change\n\terr := *n.Error\n\n\tif state != nil && state.Status == states.ObjectTainted {\n\t\tlog.Printf(\"[TRACE] EvalMaybeTainted: %s was already tainted, so nothing to do\", n.Addr.Absolute(ctx.Path()))\n\t\treturn nil, nil\n\t}\n\n\tif n.StateOutput != nil {\n\t\tif err != nil && change.Action == plans.Create {\n\t\t\t// If there are errors during a _create_ then the object is\n\t\t\t// in an undefined state, and so we'll mark it as tainted so\n\t\t\t// we can try again on the next run.\n\t\t\t//\n\t\t\t// We don't do this for other change actions because errors\n\t\t\t// during updates will often not change the remote object at all.\n\t\t\t// If there _were_ changes prior to the error, it's the provider's\n\t\t\t// responsibility to record the effect of those changes in the\n\t\t\t// object value it returned.\n\t\t\tlog.Printf(\"[TRACE] EvalMaybeTainted: %s encountered an error during creation, so it is now marked as tainted\", n.Addr.Absolute(ctx.Path()))\n\t\t\t*n.StateOutput = state.AsTainted()\n\t\t} else {\n\t\t\t*n.StateOutput = state\n\t\t}\n\t}\n\n\treturn nil, nil\n}\n\n// resourceHasUserVisibleApply returns true if the given resource is one where\n// apply actions should be exposed to the user.\n//\n// Certain resources do apply actions only as an implementation detail, so\n// these should not be advertised to code outside of this package.\nfunc resourceHasUserVisibleApply(addr addrs.ResourceInstance) bool {\n\t// Only managed resources have user-visible apply actions.\n\t// In particular, this excludes data resources since we \"apply\" these\n\t// only as an implementation detail of removing them from state when\n\t// they are destroyed. (When reading, they don't get here at all because\n\t// we present them as \"Refresh\" actions.)\n\treturn addr.ContainingResource().Mode == addrs.ManagedResourceMode\n}\n\n// EvalApplyProvisioners is an EvalNode implementation that executes\n// the provisioners for a resource.\n//\n// TODO(mitchellh): This should probably be split up into a more fine-grained\n// ApplyProvisioner (single) that is looped over.\ntype EvalApplyProvisioners struct {\n\tAddr           addrs.ResourceInstance\n\tState          **states.ResourceInstanceObject\n\tResourceConfig *configs.Resource\n\tCreateNew      *bool\n\tError          *error\n\n\t// When is the type of provisioner to run at this point\n\tWhen configs.ProvisionerWhen\n}\n\n// TODO: test\nfunc (n *EvalApplyProvisioners) Eval(ctx EvalContext) (interface{}, error) {\n\tabsAddr := n.Addr.Absolute(ctx.Path())\n\tstate := *n.State\n\tif state == nil {\n\t\tlog.Printf(\"[TRACE] EvalApplyProvisioners: %s has no state, so skipping provisioners\", n.Addr)\n\t\treturn nil, nil\n\t}\n\tif n.When == configs.ProvisionerWhenCreate && n.CreateNew != nil && !*n.CreateNew {\n\t\t// If we're not creating a new resource, then don't run provisioners\n\t\tlog.Printf(\"[TRACE] EvalApplyProvisioners: %s is not freshly-created, so no provisioning is required\", n.Addr)\n\t\treturn nil, nil\n\t}\n\tif state.Status == states.ObjectTainted {\n\t\t// No point in provisioning an object that is already tainted, since\n\t\t// it's going to get recreated on the next apply anyway.\n\t\tlog.Printf(\"[TRACE] EvalApplyProvisioners: %s is tainted, so skipping provisioning\", n.Addr)\n\t\treturn nil, nil\n\t}\n\n\tprovs := n.filterProvisioners()\n\tif len(provs) == 0 {\n\t\t// We have no provisioners, so don't do anything\n\t\treturn nil, nil\n\t}\n\n\tif n.Error != nil && *n.Error != nil {\n\t\t// We're already tainted, so just return out\n\t\treturn nil, nil\n\t}\n\n\t{\n\t\t// Call pre hook\n\t\terr := ctx.Hook(func(h Hook) (HookAction, error) {\n\t\t\treturn h.PreProvisionInstance(absAddr, state.Value)\n\t\t})\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\t// If there are no errors, then we append it to our output error\n\t// if we have one, otherwise we just output it.\n\terr := n.apply(ctx, provs)\n\tif err != nil {\n\t\t*n.Error = multierror.Append(*n.Error, err)\n\t\tif n.Error == nil {\n\t\t\treturn nil, err\n\t\t} else {\n\t\t\tlog.Printf(\"[TRACE] EvalApplyProvisioners: %s provisioning failed, but we will continue anyway at the caller's request\", absAddr)\n\t\t\treturn nil, nil\n\t\t}\n\t}\n\n\t{\n\t\t// Call post hook\n\t\terr := ctx.Hook(func(h Hook) (HookAction, error) {\n\t\t\treturn h.PostProvisionInstance(absAddr, state.Value)\n\t\t})\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\treturn nil, nil\n}\n\n// filterProvisioners filters the provisioners on the resource to only\n// the provisioners specified by the \"when\" option.\nfunc (n *EvalApplyProvisioners) filterProvisioners() []*configs.Provisioner {\n\t// Fast path the zero case\n\tif n.ResourceConfig == nil || n.ResourceConfig.Managed == nil {\n\t\treturn nil\n\t}\n\n\tif len(n.ResourceConfig.Managed.Provisioners) == 0 {\n\t\treturn nil\n\t}\n\n\tresult := make([]*configs.Provisioner, 0, len(n.ResourceConfig.Managed.Provisioners))\n\tfor _, p := range n.ResourceConfig.Managed.Provisioners {\n\t\tif p.When == n.When {\n\t\t\tresult = append(result, p)\n\t\t}\n\t}\n\n\treturn result\n}\n\nfunc (n *EvalApplyProvisioners) apply(ctx EvalContext, provs []*configs.Provisioner) error {\n\tvar diags tfdiags.Diagnostics\n\tinstanceAddr := n.Addr\n\tabsAddr := instanceAddr.Absolute(ctx.Path())\n\n\t// If there's a connection block defined directly inside the resource block\n\t// then it'll serve as a base connection configuration for all of the\n\t// provisioners.\n\tvar baseConn hcl.Body\n\tif n.ResourceConfig.Managed != nil && n.ResourceConfig.Managed.Connection != nil {\n\t\tbaseConn = n.ResourceConfig.Managed.Connection.Config\n\t}\n\n\tfor _, prov := range provs {\n\t\tlog.Printf(\"[TRACE] EvalApplyProvisioners: provisioning %s with %q\", absAddr, prov.Type)\n\n\t\t// Get the provisioner\n\t\tprovisioner := ctx.Provisioner(prov.Type)\n\t\tschema := ctx.ProvisionerSchema(prov.Type)\n\n\t\tkeyData := EvalDataForInstanceKey(instanceAddr.Key)\n\n\t\t// Evaluate the main provisioner configuration.\n\t\tconfig, _, configDiags := ctx.EvaluateBlock(prov.Config, schema, instanceAddr, keyData)\n\t\tdiags = diags.Append(configDiags)\n\n\t\t// If the provisioner block contains a connection block of its own then\n\t\t// it can override the base connection configuration, if any.\n\t\tvar localConn hcl.Body\n\t\tif prov.Connection != nil {\n\t\t\tlocalConn = prov.Connection.Config\n\t\t}\n\n\t\tvar connBody hcl.Body\n\t\tswitch {\n\t\tcase baseConn != nil && localConn != nil:\n\t\t\t// Our standard merging logic applies here, similar to what we do\n\t\t\t// with _override.tf configuration files: arguments from the\n\t\t\t// base connection block will be masked by any arguments of the\n\t\t\t// same name in the local connection block.\n\t\t\tconnBody = configs.MergeBodies(baseConn, localConn)\n\t\tcase baseConn != nil:\n\t\t\tconnBody = baseConn\n\t\tcase localConn != nil:\n\t\t\tconnBody = localConn\n\t\t}\n\n\t\t// start with an empty connInfo\n\t\tconnInfo := cty.NullVal(connectionBlockSupersetSchema.ImpliedType())\n\n\t\tif connBody != nil {\n\t\t\tvar connInfoDiags tfdiags.Diagnostics\n\t\t\tconnInfo, _, connInfoDiags = ctx.EvaluateBlock(connBody, connectionBlockSupersetSchema, instanceAddr, keyData)\n\t\t\tdiags = diags.Append(connInfoDiags)\n\t\t\tif diags.HasErrors() {\n\t\t\t\t// \"on failure continue\" setting only applies to failures of the\n\t\t\t\t// provisioner itself, not to invalid configuration.\n\t\t\t\treturn diags.Err()\n\t\t\t}\n\t\t}\n\n\t\t{\n\t\t\t// Call pre hook\n\t\t\terr := ctx.Hook(func(h Hook) (HookAction, error) {\n\t\t\t\treturn h.PreProvisionInstanceStep(absAddr, prov.Type)\n\t\t\t})\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\n\t\t// The output function\n\t\toutputFn := func(msg string) {\n\t\t\tctx.Hook(func(h Hook) (HookAction, error) {\n\t\t\t\th.ProvisionOutput(absAddr, prov.Type, msg)\n\t\t\t\treturn HookActionContinue, nil\n\t\t\t})\n\t\t}\n\n\t\toutput := CallbackUIOutput{OutputFn: outputFn}\n\t\tresp := provisioner.ProvisionResource(provisioners.ProvisionResourceRequest{\n\t\t\tConfig:     config,\n\t\t\tConnection: connInfo,\n\t\t\tUIOutput:   &output,\n\t\t})\n\t\tapplyDiags := resp.Diagnostics.InConfigBody(prov.Config)\n\n\t\t// Call post hook\n\t\thookErr := ctx.Hook(func(h Hook) (HookAction, error) {\n\t\t\treturn h.PostProvisionInstanceStep(absAddr, prov.Type, applyDiags.Err())\n\t\t})\n\n\t\tswitch prov.OnFailure {\n\t\tcase configs.ProvisionerOnFailureContinue:\n\t\t\tif applyDiags.HasErrors() {\n\t\t\t\tlog.Printf(\"[WARN] Errors while provisioning %s with %q, but continuing as requested in configuration\", n.Addr, prov.Type)\n\t\t\t} else {\n\t\t\t\t// Maybe there are warnings that we still want to see\n\t\t\t\tdiags = diags.Append(applyDiags)\n\t\t\t}\n\t\tdefault:\n\t\t\tdiags = diags.Append(applyDiags)\n\t\t\tif applyDiags.HasErrors() {\n\t\t\t\tlog.Printf(\"[WARN] Errors while provisioning %s with %q, so aborting\", n.Addr, prov.Type)\n\t\t\t\treturn diags.Err()\n\t\t\t}\n\t\t}\n\n\t\t// Deal with the hook\n\t\tif hookErr != nil {\n\t\t\treturn hookErr\n\t\t}\n\t}\n\n\treturn diags.ErrWithWarnings()\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/eval_check_prevent_destroy.go",
    "content": "package terraform\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/hashicorp/terraform/plans\"\n\n\t\"github.com/hashicorp/hcl2/hcl\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/configs\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n)\n\n// EvalPreventDestroy is an EvalNode implementation that returns an\n// error if a resource has PreventDestroy configured and the diff\n// would destroy the resource.\ntype EvalCheckPreventDestroy struct {\n\tAddr   addrs.ResourceInstance\n\tConfig *configs.Resource\n\tChange **plans.ResourceInstanceChange\n}\n\nfunc (n *EvalCheckPreventDestroy) Eval(ctx EvalContext) (interface{}, error) {\n\tif n.Change == nil || *n.Change == nil || n.Config == nil || n.Config.Managed == nil {\n\t\treturn nil, nil\n\t}\n\n\tchange := *n.Change\n\tpreventDestroy := n.Config.Managed.PreventDestroy\n\n\tif (change.Action == plans.Delete || change.Action.IsReplace()) && preventDestroy {\n\t\tvar diags tfdiags.Diagnostics\n\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Instance cannot be destroyed\",\n\t\t\tDetail: fmt.Sprintf(\n\t\t\t\t\"Resource %s has lifecycle.prevent_destroy set, but the plan calls for this resource to be destroyed. To avoid this error and continue with the plan, either disable lifecycle.prevent_destroy or reduce the scope of the plan using the -target flag.\",\n\t\t\t\tn.Addr.Absolute(ctx.Path()).String(),\n\t\t\t),\n\t\t\tSubject: &n.Config.DeclRange,\n\t\t})\n\t\treturn nil, diags.Err()\n\t}\n\n\treturn nil, nil\n}\n\nconst preventDestroyErrStr = `%s: the plan would destroy this resource, but it currently has lifecycle.prevent_destroy set to true. To avoid this error and continue with the plan, either disable lifecycle.prevent_destroy or adjust the scope of the plan using the -target flag.`\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/eval_context.go",
    "content": "package terraform\n\nimport (\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/configs/configschema\"\n\t\"github.com/hashicorp/terraform/lang\"\n\t\"github.com/hashicorp/terraform/plans\"\n\t\"github.com/hashicorp/terraform/providers\"\n\t\"github.com/hashicorp/terraform/provisioners\"\n\t\"github.com/hashicorp/terraform/states\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// EvalContext is the interface that is given to eval nodes to execute.\ntype EvalContext interface {\n\t// Stopped returns a channel that is closed when evaluation is stopped\n\t// via Terraform.Context.Stop()\n\tStopped() <-chan struct{}\n\n\t// Path is the current module path.\n\tPath() addrs.ModuleInstance\n\n\t// Hook is used to call hook methods. The callback is called for each\n\t// hook and should return the hook action to take and the error.\n\tHook(func(Hook) (HookAction, error)) error\n\n\t// Input is the UIInput object for interacting with the UI.\n\tInput() UIInput\n\n\t// InitProvider initializes the provider with the given type and address, and\n\t// returns the implementation of the resource provider or an error.\n\t//\n\t// It is an error to initialize the same provider more than once.\n\tInitProvider(typ string, addr addrs.ProviderConfig) (providers.Interface, error)\n\n\t// Provider gets the provider instance with the given address (already\n\t// initialized) or returns nil if the provider isn't initialized.\n\t//\n\t// This method expects an _absolute_ provider configuration address, since\n\t// resources in one module are able to use providers from other modules.\n\t// InitProvider must've been called on the EvalContext of the module\n\t// that owns the given provider before calling this method.\n\tProvider(addrs.AbsProviderConfig) providers.Interface\n\n\t// ProviderSchema retrieves the schema for a particular provider, which\n\t// must have already been initialized with InitProvider.\n\t//\n\t// This method expects an _absolute_ provider configuration address, since\n\t// resources in one module are able to use providers from other modules.\n\tProviderSchema(addrs.AbsProviderConfig) *ProviderSchema\n\n\t// CloseProvider closes provider connections that aren't needed anymore.\n\tCloseProvider(addrs.ProviderConfig) error\n\n\t// ConfigureProvider configures the provider with the given\n\t// configuration. This is a separate context call because this call\n\t// is used to store the provider configuration for inheritance lookups\n\t// with ParentProviderConfig().\n\tConfigureProvider(addrs.ProviderConfig, cty.Value) tfdiags.Diagnostics\n\n\t// ProviderInput and SetProviderInput are used to configure providers\n\t// from user input.\n\tProviderInput(addrs.ProviderConfig) map[string]cty.Value\n\tSetProviderInput(addrs.ProviderConfig, map[string]cty.Value)\n\n\t// InitProvisioner initializes the provisioner with the given name and\n\t// returns the implementation of the resource provisioner or an error.\n\t//\n\t// It is an error to initialize the same provisioner more than once.\n\tInitProvisioner(string) (provisioners.Interface, error)\n\n\t// Provisioner gets the provisioner instance with the given name (already\n\t// initialized) or returns nil if the provisioner isn't initialized.\n\tProvisioner(string) provisioners.Interface\n\n\t// ProvisionerSchema retrieves the main configuration schema for a\n\t// particular provisioner, which must have already been initialized with\n\t// InitProvisioner.\n\tProvisionerSchema(string) *configschema.Block\n\n\t// CloseProvisioner closes provisioner connections that aren't needed\n\t// anymore.\n\tCloseProvisioner(string) error\n\n\t// EvaluateBlock takes the given raw configuration block and associated\n\t// schema and evaluates it to produce a value of an object type that\n\t// conforms to the implied type of the schema.\n\t//\n\t// The \"self\" argument is optional. If given, it is the referenceable\n\t// address that the name \"self\" should behave as an alias for when\n\t// evaluating. Set this to nil if the \"self\" object should not be available.\n\t//\n\t// The \"key\" argument is also optional. If given, it is the instance key\n\t// of the current object within the multi-instance container it belongs\n\t// to. For example, on a resource block with \"count\" set this should be\n\t// set to a different addrs.IntKey for each instance created from that\n\t// block. Set this to addrs.NoKey if not appropriate.\n\t//\n\t// The returned body is an expanded version of the given body, with any\n\t// \"dynamic\" blocks replaced with zero or more static blocks. This can be\n\t// used to extract correct source location information about attributes of\n\t// the returned object value.\n\tEvaluateBlock(body hcl.Body, schema *configschema.Block, self addrs.Referenceable, keyData InstanceKeyEvalData) (cty.Value, hcl.Body, tfdiags.Diagnostics)\n\n\t// EvaluateExpr takes the given HCL expression and evaluates it to produce\n\t// a value.\n\t//\n\t// The \"self\" argument is optional. If given, it is the referenceable\n\t// address that the name \"self\" should behave as an alias for when\n\t// evaluating. Set this to nil if the \"self\" object should not be available.\n\tEvaluateExpr(expr hcl.Expression, wantType cty.Type, self addrs.Referenceable) (cty.Value, tfdiags.Diagnostics)\n\n\t// EvaluationScope returns a scope that can be used to evaluate reference\n\t// addresses in this context.\n\tEvaluationScope(self addrs.Referenceable, keyData InstanceKeyEvalData) *lang.Scope\n\n\t// SetModuleCallArguments defines values for the variables of a particular\n\t// child module call.\n\t//\n\t// Calling this function multiple times has merging behavior, keeping any\n\t// previously-set keys that are not present in the new map.\n\tSetModuleCallArguments(addrs.ModuleCallInstance, map[string]cty.Value)\n\n\t// Changes returns the writer object that can be used to write new proposed\n\t// changes into the global changes set.\n\tChanges() *plans.ChangesSync\n\n\t// State returns a wrapper object that provides safe concurrent access to\n\t// the global state.\n\tState() *states.SyncState\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/eval_context_builtin.go",
    "content": "package terraform\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"log\"\n\t\"sync\"\n\n\t\"github.com/hashicorp/terraform/plans\"\n\t\"github.com/hashicorp/terraform/providers\"\n\t\"github.com/hashicorp/terraform/provisioners\"\n\t\"github.com/hashicorp/terraform/version\"\n\n\t\"github.com/hashicorp/terraform/states\"\n\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/hashicorp/terraform/configs/configschema\"\n\t\"github.com/hashicorp/terraform/lang\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// BuiltinEvalContext is an EvalContext implementation that is used by\n// Terraform by default.\ntype BuiltinEvalContext struct {\n\t// StopContext is the context used to track whether we're complete\n\tStopContext context.Context\n\n\t// PathValue is the Path that this context is operating within.\n\tPathValue addrs.ModuleInstance\n\n\t// Evaluator is used for evaluating expressions within the scope of this\n\t// eval context.\n\tEvaluator *Evaluator\n\n\t// Schemas is a repository of all of the schemas we should need to\n\t// decode configuration blocks and expressions. This must be constructed by\n\t// the caller to include schemas for all of the providers, resource types,\n\t// data sources and provisioners used by the given configuration and\n\t// state.\n\t//\n\t// This must not be mutated during evaluation.\n\tSchemas *Schemas\n\n\t// VariableValues contains the variable values across all modules. This\n\t// structure is shared across the entire containing context, and so it\n\t// may be accessed only when holding VariableValuesLock.\n\t// The keys of the first level of VariableValues are the string\n\t// representations of addrs.ModuleInstance values. The second-level keys\n\t// are variable names within each module instance.\n\tVariableValues     map[string]map[string]cty.Value\n\tVariableValuesLock *sync.Mutex\n\n\tComponents          contextComponentFactory\n\tHooks               []Hook\n\tInputValue          UIInput\n\tProviderCache       map[string]providers.Interface\n\tProviderInputConfig map[string]map[string]cty.Value\n\tProviderLock        *sync.Mutex\n\tProvisionerCache    map[string]provisioners.Interface\n\tProvisionerLock     *sync.Mutex\n\tChangesValue        *plans.ChangesSync\n\tStateValue          *states.SyncState\n\n\tonce sync.Once\n}\n\n// BuiltinEvalContext implements EvalContext\nvar _ EvalContext = (*BuiltinEvalContext)(nil)\n\nfunc (ctx *BuiltinEvalContext) Stopped() <-chan struct{} {\n\t// This can happen during tests. During tests, we just block forever.\n\tif ctx.StopContext == nil {\n\t\treturn nil\n\t}\n\n\treturn ctx.StopContext.Done()\n}\n\nfunc (ctx *BuiltinEvalContext) Hook(fn func(Hook) (HookAction, error)) error {\n\tfor _, h := range ctx.Hooks {\n\t\taction, err := fn(h)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tswitch action {\n\t\tcase HookActionContinue:\n\t\t\tcontinue\n\t\tcase HookActionHalt:\n\t\t\t// Return an early exit error to trigger an early exit\n\t\t\tlog.Printf(\"[WARN] Early exit triggered by hook: %T\", h)\n\t\t\treturn EvalEarlyExitError{}\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (ctx *BuiltinEvalContext) Input() UIInput {\n\treturn ctx.InputValue\n}\n\nfunc (ctx *BuiltinEvalContext) InitProvider(typeName string, addr addrs.ProviderConfig) (providers.Interface, error) {\n\tctx.once.Do(ctx.init)\n\tabsAddr := addr.Absolute(ctx.Path())\n\n\t// If we already initialized, it is an error\n\tif p := ctx.Provider(absAddr); p != nil {\n\t\treturn nil, fmt.Errorf(\"%s is already initialized\", addr)\n\t}\n\n\t// Warning: make sure to acquire these locks AFTER the call to Provider\n\t// above, since it also acquires locks.\n\tctx.ProviderLock.Lock()\n\tdefer ctx.ProviderLock.Unlock()\n\n\tkey := absAddr.String()\n\n\tp, err := ctx.Components.ResourceProvider(typeName, key)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tlog.Printf(\"[TRACE] BuiltinEvalContext: Initialized %q provider for %s\", typeName, absAddr)\n\tctx.ProviderCache[key] = p\n\n\treturn p, nil\n}\n\nfunc (ctx *BuiltinEvalContext) Provider(addr addrs.AbsProviderConfig) providers.Interface {\n\tctx.once.Do(ctx.init)\n\n\tctx.ProviderLock.Lock()\n\tdefer ctx.ProviderLock.Unlock()\n\n\treturn ctx.ProviderCache[addr.String()]\n}\n\nfunc (ctx *BuiltinEvalContext) ProviderSchema(addr addrs.AbsProviderConfig) *ProviderSchema {\n\tctx.once.Do(ctx.init)\n\n\treturn ctx.Schemas.ProviderSchema(addr.ProviderConfig.Type)\n}\n\nfunc (ctx *BuiltinEvalContext) CloseProvider(addr addrs.ProviderConfig) error {\n\tctx.once.Do(ctx.init)\n\n\tctx.ProviderLock.Lock()\n\tdefer ctx.ProviderLock.Unlock()\n\n\tkey := addr.Absolute(ctx.Path()).String()\n\tprovider := ctx.ProviderCache[key]\n\tif provider != nil {\n\t\tdelete(ctx.ProviderCache, key)\n\t\treturn provider.Close()\n\t}\n\n\treturn nil\n}\n\nfunc (ctx *BuiltinEvalContext) ConfigureProvider(addr addrs.ProviderConfig, cfg cty.Value) tfdiags.Diagnostics {\n\tvar diags tfdiags.Diagnostics\n\tabsAddr := addr.Absolute(ctx.Path())\n\tp := ctx.Provider(absAddr)\n\tif p == nil {\n\t\tdiags = diags.Append(fmt.Errorf(\"%s not initialized\", addr))\n\t\treturn diags\n\t}\n\n\tproviderSchema := ctx.ProviderSchema(absAddr)\n\tif providerSchema == nil {\n\t\tdiags = diags.Append(fmt.Errorf(\"schema for %s is not available\", absAddr))\n\t\treturn diags\n\t}\n\n\treq := providers.ConfigureRequest{\n\t\tTerraformVersion: version.String(),\n\t\tConfig:           cfg,\n\t}\n\n\tresp := p.Configure(req)\n\treturn resp.Diagnostics\n}\n\nfunc (ctx *BuiltinEvalContext) ProviderInput(pc addrs.ProviderConfig) map[string]cty.Value {\n\tctx.ProviderLock.Lock()\n\tdefer ctx.ProviderLock.Unlock()\n\n\tif !ctx.Path().IsRoot() {\n\t\t// Only root module provider configurations can have input.\n\t\treturn nil\n\t}\n\n\treturn ctx.ProviderInputConfig[pc.String()]\n}\n\nfunc (ctx *BuiltinEvalContext) SetProviderInput(pc addrs.ProviderConfig, c map[string]cty.Value) {\n\tabsProvider := pc.Absolute(ctx.Path())\n\n\tif !ctx.Path().IsRoot() {\n\t\t// Only root module provider configurations can have input.\n\t\tlog.Printf(\"[WARN] BuiltinEvalContext: attempt to SetProviderInput for non-root module\")\n\t\treturn\n\t}\n\n\t// Save the configuration\n\tctx.ProviderLock.Lock()\n\tctx.ProviderInputConfig[absProvider.String()] = c\n\tctx.ProviderLock.Unlock()\n}\n\nfunc (ctx *BuiltinEvalContext) InitProvisioner(n string) (provisioners.Interface, error) {\n\tctx.once.Do(ctx.init)\n\n\t// If we already initialized, it is an error\n\tif p := ctx.Provisioner(n); p != nil {\n\t\treturn nil, fmt.Errorf(\"Provisioner '%s' already initialized\", n)\n\t}\n\n\t// Warning: make sure to acquire these locks AFTER the call to Provisioner\n\t// above, since it also acquires locks.\n\tctx.ProvisionerLock.Lock()\n\tdefer ctx.ProvisionerLock.Unlock()\n\n\tkey := PathObjectCacheKey(ctx.Path(), n)\n\n\tp, err := ctx.Components.ResourceProvisioner(n, key)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tctx.ProvisionerCache[key] = p\n\n\treturn p, nil\n}\n\nfunc (ctx *BuiltinEvalContext) Provisioner(n string) provisioners.Interface {\n\tctx.once.Do(ctx.init)\n\n\tctx.ProvisionerLock.Lock()\n\tdefer ctx.ProvisionerLock.Unlock()\n\n\tkey := PathObjectCacheKey(ctx.Path(), n)\n\treturn ctx.ProvisionerCache[key]\n}\n\nfunc (ctx *BuiltinEvalContext) ProvisionerSchema(n string) *configschema.Block {\n\tctx.once.Do(ctx.init)\n\n\treturn ctx.Schemas.ProvisionerConfig(n)\n}\n\nfunc (ctx *BuiltinEvalContext) CloseProvisioner(n string) error {\n\tctx.once.Do(ctx.init)\n\n\tctx.ProvisionerLock.Lock()\n\tdefer ctx.ProvisionerLock.Unlock()\n\n\tkey := PathObjectCacheKey(ctx.Path(), n)\n\n\tprov := ctx.ProvisionerCache[key]\n\tif prov != nil {\n\t\treturn prov.Close()\n\t}\n\n\treturn nil\n}\n\nfunc (ctx *BuiltinEvalContext) EvaluateBlock(body hcl.Body, schema *configschema.Block, self addrs.Referenceable, keyData InstanceKeyEvalData) (cty.Value, hcl.Body, tfdiags.Diagnostics) {\n\tvar diags tfdiags.Diagnostics\n\tscope := ctx.EvaluationScope(self, keyData)\n\tbody, evalDiags := scope.ExpandBlock(body, schema)\n\tdiags = diags.Append(evalDiags)\n\tval, evalDiags := scope.EvalBlock(body, schema)\n\tdiags = diags.Append(evalDiags)\n\treturn val, body, diags\n}\n\nfunc (ctx *BuiltinEvalContext) EvaluateExpr(expr hcl.Expression, wantType cty.Type, self addrs.Referenceable) (cty.Value, tfdiags.Diagnostics) {\n\tscope := ctx.EvaluationScope(self, EvalDataForNoInstanceKey)\n\treturn scope.EvalExpr(expr, wantType)\n}\n\nfunc (ctx *BuiltinEvalContext) EvaluationScope(self addrs.Referenceable, keyData InstanceKeyEvalData) *lang.Scope {\n\tdata := &evaluationStateData{\n\t\tEvaluator:       ctx.Evaluator,\n\t\tModulePath:      ctx.PathValue,\n\t\tInstanceKeyData: keyData,\n\t\tOperation:       ctx.Evaluator.Operation,\n\t}\n\treturn ctx.Evaluator.Scope(data, self)\n}\n\nfunc (ctx *BuiltinEvalContext) Path() addrs.ModuleInstance {\n\treturn ctx.PathValue\n}\n\nfunc (ctx *BuiltinEvalContext) SetModuleCallArguments(n addrs.ModuleCallInstance, vals map[string]cty.Value) {\n\tctx.VariableValuesLock.Lock()\n\tdefer ctx.VariableValuesLock.Unlock()\n\n\tchildPath := n.ModuleInstance(ctx.PathValue)\n\tkey := childPath.String()\n\n\targs := ctx.VariableValues[key]\n\tif args == nil {\n\t\targs = make(map[string]cty.Value)\n\t\tctx.VariableValues[key] = vals\n\t\treturn\n\t}\n\n\tfor k, v := range vals {\n\t\targs[k] = v\n\t}\n}\n\nfunc (ctx *BuiltinEvalContext) Changes() *plans.ChangesSync {\n\treturn ctx.ChangesValue\n}\n\nfunc (ctx *BuiltinEvalContext) State() *states.SyncState {\n\treturn ctx.StateValue\n}\n\nfunc (ctx *BuiltinEvalContext) init() {\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/eval_context_mock.go",
    "content": "package terraform\n\nimport (\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/hashicorp/hcl2/hcldec\"\n\t\"github.com/zclconf/go-cty/cty\"\n\t\"github.com/zclconf/go-cty/cty/convert\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/config\"\n\t\"github.com/hashicorp/terraform/configs/configschema\"\n\t\"github.com/hashicorp/terraform/lang\"\n\t\"github.com/hashicorp/terraform/plans\"\n\t\"github.com/hashicorp/terraform/providers\"\n\t\"github.com/hashicorp/terraform/provisioners\"\n\t\"github.com/hashicorp/terraform/states\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n)\n\n// MockEvalContext is a mock version of EvalContext that can be used\n// for tests.\ntype MockEvalContext struct {\n\tStoppedCalled bool\n\tStoppedValue  <-chan struct{}\n\n\tHookCalled bool\n\tHookHook   Hook\n\tHookError  error\n\n\tInputCalled bool\n\tInputInput  UIInput\n\n\tInitProviderCalled   bool\n\tInitProviderType     string\n\tInitProviderAddr     addrs.ProviderConfig\n\tInitProviderProvider providers.Interface\n\tInitProviderError    error\n\n\tProviderCalled   bool\n\tProviderAddr     addrs.AbsProviderConfig\n\tProviderProvider providers.Interface\n\n\tProviderSchemaCalled bool\n\tProviderSchemaAddr   addrs.AbsProviderConfig\n\tProviderSchemaSchema *ProviderSchema\n\n\tCloseProviderCalled   bool\n\tCloseProviderAddr     addrs.ProviderConfig\n\tCloseProviderProvider providers.Interface\n\n\tProviderInputCalled bool\n\tProviderInputAddr   addrs.ProviderConfig\n\tProviderInputValues map[string]cty.Value\n\n\tSetProviderInputCalled bool\n\tSetProviderInputAddr   addrs.ProviderConfig\n\tSetProviderInputValues map[string]cty.Value\n\n\tConfigureProviderCalled bool\n\tConfigureProviderAddr   addrs.ProviderConfig\n\tConfigureProviderConfig cty.Value\n\tConfigureProviderDiags  tfdiags.Diagnostics\n\n\tInitProvisionerCalled      bool\n\tInitProvisionerName        string\n\tInitProvisionerProvisioner provisioners.Interface\n\tInitProvisionerError       error\n\n\tProvisionerCalled      bool\n\tProvisionerName        string\n\tProvisionerProvisioner provisioners.Interface\n\n\tProvisionerSchemaCalled bool\n\tProvisionerSchemaName   string\n\tProvisionerSchemaSchema *configschema.Block\n\n\tCloseProvisionerCalled      bool\n\tCloseProvisionerName        string\n\tCloseProvisionerProvisioner provisioners.Interface\n\n\tEvaluateBlockCalled     bool\n\tEvaluateBlockBody       hcl.Body\n\tEvaluateBlockSchema     *configschema.Block\n\tEvaluateBlockSelf       addrs.Referenceable\n\tEvaluateBlockKeyData    InstanceKeyEvalData\n\tEvaluateBlockResultFunc func(\n\t\tbody hcl.Body,\n\t\tschema *configschema.Block,\n\t\tself addrs.Referenceable,\n\t\tkeyData InstanceKeyEvalData,\n\t) (cty.Value, hcl.Body, tfdiags.Diagnostics) // overrides the other values below, if set\n\tEvaluateBlockResult       cty.Value\n\tEvaluateBlockExpandedBody hcl.Body\n\tEvaluateBlockDiags        tfdiags.Diagnostics\n\n\tEvaluateExprCalled     bool\n\tEvaluateExprExpr       hcl.Expression\n\tEvaluateExprWantType   cty.Type\n\tEvaluateExprSelf       addrs.Referenceable\n\tEvaluateExprResultFunc func(\n\t\texpr hcl.Expression,\n\t\twantType cty.Type,\n\t\tself addrs.Referenceable,\n\t) (cty.Value, tfdiags.Diagnostics) // overrides the other values below, if set\n\tEvaluateExprResult cty.Value\n\tEvaluateExprDiags  tfdiags.Diagnostics\n\n\tEvaluationScopeCalled  bool\n\tEvaluationScopeSelf    addrs.Referenceable\n\tEvaluationScopeKeyData InstanceKeyEvalData\n\tEvaluationScopeScope   *lang.Scope\n\n\tInterpolateCalled       bool\n\tInterpolateConfig       *config.RawConfig\n\tInterpolateResource     *Resource\n\tInterpolateConfigResult *ResourceConfig\n\tInterpolateError        error\n\n\tInterpolateProviderCalled       bool\n\tInterpolateProviderConfig       *config.ProviderConfig\n\tInterpolateProviderResource     *Resource\n\tInterpolateProviderConfigResult *ResourceConfig\n\tInterpolateProviderError        error\n\n\tPathCalled bool\n\tPathPath   addrs.ModuleInstance\n\n\tSetModuleCallArgumentsCalled bool\n\tSetModuleCallArgumentsModule addrs.ModuleCallInstance\n\tSetModuleCallArgumentsValues map[string]cty.Value\n\n\tChangesCalled  bool\n\tChangesChanges *plans.ChangesSync\n\n\tStateCalled bool\n\tStateState  *states.SyncState\n}\n\n// MockEvalContext implements EvalContext\nvar _ EvalContext = (*MockEvalContext)(nil)\n\nfunc (c *MockEvalContext) Stopped() <-chan struct{} {\n\tc.StoppedCalled = true\n\treturn c.StoppedValue\n}\n\nfunc (c *MockEvalContext) Hook(fn func(Hook) (HookAction, error)) error {\n\tc.HookCalled = true\n\tif c.HookHook != nil {\n\t\tif _, err := fn(c.HookHook); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn c.HookError\n}\n\nfunc (c *MockEvalContext) Input() UIInput {\n\tc.InputCalled = true\n\treturn c.InputInput\n}\n\nfunc (c *MockEvalContext) InitProvider(t string, addr addrs.ProviderConfig) (providers.Interface, error) {\n\tc.InitProviderCalled = true\n\tc.InitProviderType = t\n\tc.InitProviderAddr = addr\n\treturn c.InitProviderProvider, c.InitProviderError\n}\n\nfunc (c *MockEvalContext) Provider(addr addrs.AbsProviderConfig) providers.Interface {\n\tc.ProviderCalled = true\n\tc.ProviderAddr = addr\n\treturn c.ProviderProvider\n}\n\nfunc (c *MockEvalContext) ProviderSchema(addr addrs.AbsProviderConfig) *ProviderSchema {\n\tc.ProviderSchemaCalled = true\n\tc.ProviderSchemaAddr = addr\n\treturn c.ProviderSchemaSchema\n}\n\nfunc (c *MockEvalContext) CloseProvider(addr addrs.ProviderConfig) error {\n\tc.CloseProviderCalled = true\n\tc.CloseProviderAddr = addr\n\treturn nil\n}\n\nfunc (c *MockEvalContext) ConfigureProvider(addr addrs.ProviderConfig, cfg cty.Value) tfdiags.Diagnostics {\n\tc.ConfigureProviderCalled = true\n\tc.ConfigureProviderAddr = addr\n\tc.ConfigureProviderConfig = cfg\n\treturn c.ConfigureProviderDiags\n}\n\nfunc (c *MockEvalContext) ProviderInput(addr addrs.ProviderConfig) map[string]cty.Value {\n\tc.ProviderInputCalled = true\n\tc.ProviderInputAddr = addr\n\treturn c.ProviderInputValues\n}\n\nfunc (c *MockEvalContext) SetProviderInput(addr addrs.ProviderConfig, vals map[string]cty.Value) {\n\tc.SetProviderInputCalled = true\n\tc.SetProviderInputAddr = addr\n\tc.SetProviderInputValues = vals\n}\n\nfunc (c *MockEvalContext) InitProvisioner(n string) (provisioners.Interface, error) {\n\tc.InitProvisionerCalled = true\n\tc.InitProvisionerName = n\n\treturn c.InitProvisionerProvisioner, c.InitProvisionerError\n}\n\nfunc (c *MockEvalContext) Provisioner(n string) provisioners.Interface {\n\tc.ProvisionerCalled = true\n\tc.ProvisionerName = n\n\treturn c.ProvisionerProvisioner\n}\n\nfunc (c *MockEvalContext) ProvisionerSchema(n string) *configschema.Block {\n\tc.ProvisionerSchemaCalled = true\n\tc.ProvisionerSchemaName = n\n\treturn c.ProvisionerSchemaSchema\n}\n\nfunc (c *MockEvalContext) CloseProvisioner(n string) error {\n\tc.CloseProvisionerCalled = true\n\tc.CloseProvisionerName = n\n\treturn nil\n}\n\nfunc (c *MockEvalContext) EvaluateBlock(body hcl.Body, schema *configschema.Block, self addrs.Referenceable, keyData InstanceKeyEvalData) (cty.Value, hcl.Body, tfdiags.Diagnostics) {\n\tc.EvaluateBlockCalled = true\n\tc.EvaluateBlockBody = body\n\tc.EvaluateBlockSchema = schema\n\tc.EvaluateBlockSelf = self\n\tc.EvaluateBlockKeyData = keyData\n\tif c.EvaluateBlockResultFunc != nil {\n\t\treturn c.EvaluateBlockResultFunc(body, schema, self, keyData)\n\t}\n\treturn c.EvaluateBlockResult, c.EvaluateBlockExpandedBody, c.EvaluateBlockDiags\n}\n\nfunc (c *MockEvalContext) EvaluateExpr(expr hcl.Expression, wantType cty.Type, self addrs.Referenceable) (cty.Value, tfdiags.Diagnostics) {\n\tc.EvaluateExprCalled = true\n\tc.EvaluateExprExpr = expr\n\tc.EvaluateExprWantType = wantType\n\tc.EvaluateExprSelf = self\n\tif c.EvaluateExprResultFunc != nil {\n\t\treturn c.EvaluateExprResultFunc(expr, wantType, self)\n\t}\n\treturn c.EvaluateExprResult, c.EvaluateExprDiags\n}\n\n// installSimpleEval is a helper to install a simple mock implementation of\n// both EvaluateBlock and EvaluateExpr into the receiver.\n//\n// These default implementations will either evaluate the given input against\n// the scope in field EvaluationScopeScope or, if it is nil, with no eval\n// context at all so that only constant values may be used.\n//\n// This function overwrites any existing functions installed in fields\n// EvaluateBlockResultFunc and EvaluateExprResultFunc.\nfunc (c *MockEvalContext) installSimpleEval() {\n\tc.EvaluateBlockResultFunc = func(body hcl.Body, schema *configschema.Block, self addrs.Referenceable, keyData InstanceKeyEvalData) (cty.Value, hcl.Body, tfdiags.Diagnostics) {\n\t\tif scope := c.EvaluationScopeScope; scope != nil {\n\t\t\t// Fully-functional codepath.\n\t\t\tvar diags tfdiags.Diagnostics\n\t\t\tbody, diags = scope.ExpandBlock(body, schema)\n\t\t\tif diags.HasErrors() {\n\t\t\t\treturn cty.DynamicVal, body, diags\n\t\t\t}\n\t\t\tval, evalDiags := c.EvaluationScopeScope.EvalBlock(body, schema)\n\t\t\tdiags = diags.Append(evalDiags)\n\t\t\tif evalDiags.HasErrors() {\n\t\t\t\treturn cty.DynamicVal, body, diags\n\t\t\t}\n\t\t\treturn val, body, diags\n\t\t}\n\n\t\t// Fallback codepath supporting constant values only.\n\t\tval, hclDiags := hcldec.Decode(body, schema.DecoderSpec(), nil)\n\t\treturn val, body, tfdiags.Diagnostics(nil).Append(hclDiags)\n\t}\n\tc.EvaluateExprResultFunc = func(expr hcl.Expression, wantType cty.Type, self addrs.Referenceable) (cty.Value, tfdiags.Diagnostics) {\n\t\tif scope := c.EvaluationScopeScope; scope != nil {\n\t\t\t// Fully-functional codepath.\n\t\t\treturn scope.EvalExpr(expr, wantType)\n\t\t}\n\n\t\t// Fallback codepath supporting constant values only.\n\t\tvar diags tfdiags.Diagnostics\n\t\tval, hclDiags := expr.Value(nil)\n\t\tdiags = diags.Append(hclDiags)\n\t\tif hclDiags.HasErrors() {\n\t\t\treturn cty.DynamicVal, diags\n\t\t}\n\t\tvar err error\n\t\tval, err = convert.Convert(val, wantType)\n\t\tif err != nil {\n\t\t\tdiags = diags.Append(err)\n\t\t\treturn cty.DynamicVal, diags\n\t\t}\n\t\treturn val, diags\n\t}\n}\n\nfunc (c *MockEvalContext) EvaluationScope(self addrs.Referenceable, keyData InstanceKeyEvalData) *lang.Scope {\n\tc.EvaluationScopeCalled = true\n\tc.EvaluationScopeSelf = self\n\tc.EvaluationScopeKeyData = keyData\n\treturn c.EvaluationScopeScope\n}\n\nfunc (c *MockEvalContext) Interpolate(\n\tconfig *config.RawConfig, resource *Resource) (*ResourceConfig, error) {\n\tc.InterpolateCalled = true\n\tc.InterpolateConfig = config\n\tc.InterpolateResource = resource\n\treturn c.InterpolateConfigResult, c.InterpolateError\n}\n\nfunc (c *MockEvalContext) InterpolateProvider(\n\tconfig *config.ProviderConfig, resource *Resource) (*ResourceConfig, error) {\n\tc.InterpolateProviderCalled = true\n\tc.InterpolateProviderConfig = config\n\tc.InterpolateProviderResource = resource\n\treturn c.InterpolateProviderConfigResult, c.InterpolateError\n}\n\nfunc (c *MockEvalContext) Path() addrs.ModuleInstance {\n\tc.PathCalled = true\n\treturn c.PathPath\n}\n\nfunc (c *MockEvalContext) SetModuleCallArguments(n addrs.ModuleCallInstance, values map[string]cty.Value) {\n\tc.SetModuleCallArgumentsCalled = true\n\tc.SetModuleCallArgumentsModule = n\n\tc.SetModuleCallArgumentsValues = values\n}\n\nfunc (c *MockEvalContext) Changes() *plans.ChangesSync {\n\tc.ChangesCalled = true\n\treturn c.ChangesChanges\n}\n\nfunc (c *MockEvalContext) State() *states.SyncState {\n\tc.StateCalled = true\n\treturn c.StateState\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/eval_count.go",
    "content": "package terraform\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n\t\"github.com/zclconf/go-cty/cty\"\n\t\"github.com/zclconf/go-cty/cty/gocty\"\n)\n\n// evaluateResourceCountExpression is our standard mechanism for interpreting an\n// expression given for a \"count\" argument on a resource. This should be called\n// from the DynamicExpand of a node representing a resource in order to\n// determine the final count value.\n//\n// If the result is zero or positive and no error diagnostics are returned, then\n// the result is the literal count value to use.\n//\n// If the result is -1, this indicates that the given expression is nil and so\n// the \"count\" behavior should not be enabled for this resource at all.\n//\n// If error diagnostics are returned then the result is always the meaningless\n// placeholder value -1.\nfunc evaluateResourceCountExpression(expr hcl.Expression, ctx EvalContext) (int, tfdiags.Diagnostics) {\n\tcount, known, diags := evaluateResourceCountExpressionKnown(expr, ctx)\n\tif !known {\n\t\t// Currently this is a rather bad outcome from a UX standpoint, since we have\n\t\t// no real mechanism to deal with this situation and all we can do is produce\n\t\t// an error message.\n\t\t// FIXME: In future, implement a built-in mechanism for deferring changes that\n\t\t// can't yet be predicted, and use it to guide the user through several\n\t\t// plan/apply steps until the desired configuration is eventually reached.\n\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Invalid count argument\",\n\t\t\tDetail:   `The \"count\" value depends on resource attributes that cannot be determined until apply, so Terraform cannot predict how many instances will be created. To work around this, use the -target argument to first apply only the resources that the count depends on.`,\n\t\t\tSubject:  expr.Range().Ptr(),\n\t\t})\n\t}\n\treturn count, diags\n}\n\n// evaluateResourceCountExpressionKnown is like evaluateResourceCountExpression\n// except that it handles an unknown result by returning count = 0 and\n// a known = false, rather than by reporting the unknown value as an error\n// diagnostic.\nfunc evaluateResourceCountExpressionKnown(expr hcl.Expression, ctx EvalContext) (count int, known bool, diags tfdiags.Diagnostics) {\n\tif expr == nil {\n\t\treturn -1, true, nil\n\t}\n\n\tcountVal, countDiags := ctx.EvaluateExpr(expr, cty.Number, nil)\n\tdiags = diags.Append(countDiags)\n\tif diags.HasErrors() {\n\t\treturn -1, true, diags\n\t}\n\n\tswitch {\n\tcase countVal.IsNull():\n\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Invalid count argument\",\n\t\t\tDetail:   `The given \"count\" argument value is null. An integer is required.`,\n\t\t\tSubject:  expr.Range().Ptr(),\n\t\t})\n\t\treturn -1, true, diags\n\tcase !countVal.IsKnown():\n\t\treturn 0, false, diags\n\t}\n\n\terr := gocty.FromCtyValue(countVal, &count)\n\tif err != nil {\n\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Invalid count argument\",\n\t\t\tDetail:   fmt.Sprintf(`The given \"count\" argument value is unsuitable: %s.`, err),\n\t\t\tSubject:  expr.Range().Ptr(),\n\t\t})\n\t\treturn -1, true, diags\n\t}\n\tif count < 0 {\n\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Invalid count argument\",\n\t\t\tDetail:   `The given \"count\" argument value is unsuitable: negative numbers are not supported.`,\n\t\t\tSubject:  expr.Range().Ptr(),\n\t\t})\n\t\treturn -1, true, diags\n\t}\n\n\treturn count, true, diags\n}\n\n// fixResourceCountSetTransition is a helper function to fix up the state when a\n// resource transitions its \"count\" from being set to unset or vice-versa,\n// treating a 0-key and a no-key instance as aliases for one another across\n// the transition.\n//\n// The correct time to call this function is in the DynamicExpand method for\n// a node representing a resource, just after evaluating the count with\n// evaluateResourceCountExpression, and before any other analysis of the\n// state such as orphan detection.\n//\n// This function calls methods on the given EvalContext to update the current\n// state in-place, if necessary. It is a no-op if there is no count transition\n// taking place.\n//\n// Since the state is modified in-place, this function must take a writer lock\n// on the state. The caller must therefore not also be holding a state lock,\n// or this function will block forever awaiting the lock.\nfunc fixResourceCountSetTransition(ctx EvalContext, addr addrs.AbsResource, countEnabled bool) {\n\tstate := ctx.State()\n\tchanged := state.MaybeFixUpResourceInstanceAddressForCount(addr, countEnabled)\n\tif changed {\n\t\tlog.Printf(\"[TRACE] renamed first %s instance in transient state due to count argument change\", addr)\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/eval_count_boundary.go",
    "content": "package terraform\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/configs\"\n)\n\n// EvalCountFixZeroOneBoundaryGlobal is an EvalNode that fixes up the state\n// when there is a resource count with zero/one boundary, i.e. fixing\n// a resource named \"aws_instance.foo\" to \"aws_instance.foo.0\" and vice-versa.\n//\n// This works on the global state.\ntype EvalCountFixZeroOneBoundaryGlobal struct {\n\tConfig *configs.Config\n}\n\n// TODO: test\nfunc (n *EvalCountFixZeroOneBoundaryGlobal) Eval(ctx EvalContext) (interface{}, error) {\n\t// We'll temporarily lock the state to grab the modules, then work on each\n\t// one separately while taking a lock again for each separate resource.\n\t// This means that if another caller concurrently adds a module here while\n\t// we're working then we won't update it, but that's no worse than the\n\t// concurrent writer blocking for our entire fixup process and _then_\n\t// adding a new module, and in practice the graph node associated with\n\t// this eval depends on everything else in the graph anyway, so there\n\t// should not be concurrent writers.\n\tstate := ctx.State().Lock()\n\tmoduleAddrs := make([]addrs.ModuleInstance, 0, len(state.Modules))\n\tfor _, m := range state.Modules {\n\t\tmoduleAddrs = append(moduleAddrs, m.Addr)\n\t}\n\tctx.State().Unlock()\n\n\tfor _, addr := range moduleAddrs {\n\t\tcfg := n.Config.DescendentForInstance(addr)\n\t\tif cfg == nil {\n\t\t\tlog.Printf(\"[WARN] Not fixing up EachModes for %s because it has no config\", addr)\n\t\t\tcontinue\n\t\t}\n\t\tif err := n.fixModule(ctx, addr); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\treturn nil, nil\n}\n\nfunc (n *EvalCountFixZeroOneBoundaryGlobal) fixModule(ctx EvalContext, moduleAddr addrs.ModuleInstance) error {\n\tms := ctx.State().Module(moduleAddr)\n\tcfg := n.Config.DescendentForInstance(moduleAddr)\n\tif ms == nil {\n\t\t// Theoretically possible for a concurrent writer to delete a module\n\t\t// while we're running, but in practice the graph node that called us\n\t\t// depends on everything else in the graph and so there can never\n\t\t// be a concurrent writer.\n\t\treturn fmt.Errorf(\"[WARN] no state found for %s while trying to fix up EachModes\", moduleAddr)\n\t}\n\tif cfg == nil {\n\t\treturn fmt.Errorf(\"[WARN] no config found for %s while trying to fix up EachModes\", moduleAddr)\n\t}\n\n\tfor _, r := range ms.Resources {\n\t\taddr := r.Addr.Absolute(moduleAddr)\n\t\trCfg := cfg.Module.ResourceByAddr(r.Addr)\n\t\tif rCfg == nil {\n\t\t\tlog.Printf(\"[WARN] Not fixing up EachModes for %s because it has no config\", addr)\n\t\t\tcontinue\n\t\t}\n\t\thasCount := rCfg.Count != nil\n\t\tfixResourceCountSetTransition(ctx, addr, hasCount)\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/eval_count_computed.go",
    "content": "package terraform\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/hashicorp/terraform/config\"\n)\n\n// EvalCountCheckComputed is an EvalNode that checks if a resource count\n// is computed and errors if so. This can possibly happen across a\n// module boundary and we don't yet support this.\ntype EvalCountCheckComputed struct {\n\tResource *config.Resource\n}\n\n// TODO: test\nfunc (n *EvalCountCheckComputed) Eval(ctx EvalContext) (interface{}, error) {\n\tif n.Resource.RawCount.Value() == unknownValue() {\n\t\treturn nil, fmt.Errorf(\n\t\t\t\"%s: value of 'count' cannot be computed\",\n\t\t\tn.Resource.Id())\n\t}\n\n\treturn nil, nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/eval_diff.go",
    "content": "package terraform\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"log\"\n\t\"reflect\"\n\t\"strings\"\n\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/zclconf/go-cty/cty\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/configs\"\n\t\"github.com/hashicorp/terraform/plans\"\n\t\"github.com/hashicorp/terraform/plans/objchange\"\n\t\"github.com/hashicorp/terraform/providers\"\n\t\"github.com/hashicorp/terraform/states\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n)\n\n// EvalCheckPlannedChange is an EvalNode implementation that produces errors\n// if the _actual_ expected value is not compatible with what was recorded\n// in the plan.\n//\n// Errors here are most often indicative of a bug in the provider, so our\n// error messages will report with that in mind. It's also possible that\n// there's a bug in Terraform's Core's own \"proposed new value\" code in\n// EvalDiff.\ntype EvalCheckPlannedChange struct {\n\tAddr           addrs.ResourceInstance\n\tProviderAddr   addrs.AbsProviderConfig\n\tProviderSchema **ProviderSchema\n\n\t// We take ResourceInstanceChange objects here just because that's what's\n\t// convenient to pass in from the evaltree implementation, but we really\n\t// only look at the \"After\" value of each change.\n\tPlanned, Actual **plans.ResourceInstanceChange\n}\n\nfunc (n *EvalCheckPlannedChange) Eval(ctx EvalContext) (interface{}, error) {\n\tproviderSchema := *n.ProviderSchema\n\tplannedChange := *n.Planned\n\tactualChange := *n.Actual\n\n\tschema, _ := providerSchema.SchemaForResourceAddr(n.Addr.ContainingResource())\n\tif schema == nil {\n\t\t// Should be caught during validation, so we don't bother with a pretty error here\n\t\treturn nil, fmt.Errorf(\"provider does not support %q\", n.Addr.Resource.Type)\n\t}\n\n\tvar diags tfdiags.Diagnostics\n\tabsAddr := n.Addr.Absolute(ctx.Path())\n\n\tlog.Printf(\"[TRACE] EvalCheckPlannedChange: Verifying that actual change (action %s) matches planned change (action %s)\", actualChange.Action, plannedChange.Action)\n\n\tif plannedChange.Action != actualChange.Action {\n\t\tswitch {\n\t\tcase plannedChange.Action == plans.Update && actualChange.Action == plans.NoOp:\n\t\t\t// It's okay for an update to become a NoOp once we've filled in\n\t\t\t// all of the unknown values, since the final values might actually\n\t\t\t// match what was there before after all.\n\t\t\tlog.Printf(\"[DEBUG] After incorporating new values learned so far during apply, %s change has become NoOp\", absAddr)\n\t\tdefault:\n\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\ttfdiags.Error,\n\t\t\t\t\"Provider produced inconsistent final plan\",\n\t\t\t\tfmt.Sprintf(\n\t\t\t\t\t\"When expanding the plan for %s to include new values learned so far during apply, provider %q changed the planned action from %s to %s.\\n\\nThis is a bug in the provider, which should be reported in the provider's own issue tracker.\",\n\t\t\t\t\tabsAddr, n.ProviderAddr.ProviderConfig.Type,\n\t\t\t\t\tplannedChange.Action, actualChange.Action,\n\t\t\t\t),\n\t\t\t))\n\t\t}\n\t}\n\n\terrs := objchange.AssertObjectCompatible(schema, plannedChange.After, actualChange.After)\n\tfor _, err := range errs {\n\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\ttfdiags.Error,\n\t\t\t\"Provider produced inconsistent final plan\",\n\t\t\tfmt.Sprintf(\n\t\t\t\t\"When expanding the plan for %s to include new values learned so far during apply, provider %q produced an invalid new value for %s.\\n\\nThis is a bug in the provider, which should be reported in the provider's own issue tracker.\",\n\t\t\t\tabsAddr, n.ProviderAddr.ProviderConfig.Type, tfdiags.FormatError(err),\n\t\t\t),\n\t\t))\n\t}\n\treturn nil, diags.Err()\n}\n\n// EvalDiff is an EvalNode implementation that detects changes for a given\n// resource instance.\ntype EvalDiff struct {\n\tAddr           addrs.ResourceInstance\n\tConfig         *configs.Resource\n\tProvider       *providers.Interface\n\tProviderAddr   addrs.AbsProviderConfig\n\tProviderSchema **ProviderSchema\n\tState          **states.ResourceInstanceObject\n\tPreviousDiff   **plans.ResourceInstanceChange\n\n\t// CreateBeforeDestroy is set if either the resource's own config sets\n\t// create_before_destroy explicitly or if dependencies have forced the\n\t// resource to be handled as create_before_destroy in order to avoid\n\t// a dependency cycle.\n\tCreateBeforeDestroy bool\n\n\tOutputChange **plans.ResourceInstanceChange\n\tOutputValue  *cty.Value\n\tOutputState  **states.ResourceInstanceObject\n\n\tStub bool\n}\n\n// TODO: test\nfunc (n *EvalDiff) Eval(ctx EvalContext) (interface{}, error) {\n\tstate := *n.State\n\tconfig := *n.Config\n\tprovider := *n.Provider\n\tproviderSchema := *n.ProviderSchema\n\n\tif providerSchema == nil {\n\t\treturn nil, fmt.Errorf(\"provider schema is unavailable for %s\", n.Addr)\n\t}\n\tif n.ProviderAddr.ProviderConfig.Type == \"\" {\n\t\tpanic(fmt.Sprintf(\"EvalDiff for %s does not have ProviderAddr set\", n.Addr.Absolute(ctx.Path())))\n\t}\n\n\tvar diags tfdiags.Diagnostics\n\n\t// Evaluate the configuration\n\tschema, _ := providerSchema.SchemaForResourceAddr(n.Addr.ContainingResource())\n\tif schema == nil {\n\t\t// Should be caught during validation, so we don't bother with a pretty error here\n\t\treturn nil, fmt.Errorf(\"provider does not support resource type %q\", n.Addr.Resource.Type)\n\t}\n\tkeyData := EvalDataForInstanceKey(n.Addr.Key)\n\tconfigVal, _, configDiags := ctx.EvaluateBlock(config.Config, schema, nil, keyData)\n\tdiags = diags.Append(configDiags)\n\tif configDiags.HasErrors() {\n\t\treturn nil, diags.Err()\n\t}\n\n\tabsAddr := n.Addr.Absolute(ctx.Path())\n\tvar priorVal cty.Value\n\tvar priorValTainted cty.Value\n\tvar priorPrivate []byte\n\tif state != nil {\n\t\tif state.Status != states.ObjectTainted {\n\t\t\tpriorVal = state.Value\n\t\t\tpriorPrivate = state.Private\n\t\t} else {\n\t\t\t// If the prior state is tainted then we'll proceed below like\n\t\t\t// we're creating an entirely new object, but then turn it into\n\t\t\t// a synthetic \"Replace\" change at the end, creating the same\n\t\t\t// result as if the provider had marked at least one argument\n\t\t\t// change as \"requires replacement\".\n\t\t\tpriorValTainted = state.Value\n\t\t\tpriorVal = cty.NullVal(schema.ImpliedType())\n\t\t}\n\t} else {\n\t\tpriorVal = cty.NullVal(schema.ImpliedType())\n\t}\n\n\tproposedNewVal := objchange.ProposedNewObject(schema, priorVal, configVal)\n\n\t// Call pre-diff hook\n\tif !n.Stub {\n\t\terr := ctx.Hook(func(h Hook) (HookAction, error) {\n\t\t\treturn h.PreDiff(absAddr, states.CurrentGen, priorVal, proposedNewVal)\n\t\t})\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\t// The provider gets an opportunity to customize the proposed new value,\n\t// which in turn produces the _planned_ new value.\n\tresp := provider.PlanResourceChange(providers.PlanResourceChangeRequest{\n\t\tTypeName:         n.Addr.Resource.Type,\n\t\tConfig:           configVal,\n\t\tPriorState:       priorVal,\n\t\tProposedNewState: proposedNewVal,\n\t\tPriorPrivate:     priorPrivate,\n\t})\n\tdiags = diags.Append(resp.Diagnostics.InConfigBody(config.Config))\n\tif diags.HasErrors() {\n\t\treturn nil, diags.Err()\n\t}\n\n\tplannedNewVal := resp.PlannedState\n\tplannedPrivate := resp.PlannedPrivate\n\n\tif plannedNewVal == cty.NilVal {\n\t\t// Should never happen. Since real-world providers return via RPC a nil\n\t\t// is always a bug in the client-side stub. This is more likely caused\n\t\t// by an incompletely-configured mock provider in tests, though.\n\t\tpanic(fmt.Sprintf(\"PlanResourceChange of %s produced nil value\", absAddr.String()))\n\t}\n\n\t// We allow the planned new value to disagree with configuration _values_\n\t// here, since that allows the provider to do special logic like a\n\t// DiffSuppressFunc, but we still require that the provider produces\n\t// a value whose type conforms to the schema.\n\tfor _, err := range plannedNewVal.Type().TestConformance(schema.ImpliedType()) {\n\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\ttfdiags.Error,\n\t\t\t\"Provider produced invalid plan\",\n\t\t\tfmt.Sprintf(\n\t\t\t\t\"Provider %q planned an invalid value for %s.\\n\\nThis is a bug in the provider, which should be reported in the provider's own issue tracker.\",\n\t\t\t\tn.ProviderAddr.ProviderConfig.Type, tfdiags.FormatErrorPrefixed(err, absAddr.String()),\n\t\t\t),\n\t\t))\n\t}\n\tif diags.HasErrors() {\n\t\treturn nil, diags.Err()\n\t}\n\n\tif errs := objchange.AssertPlanValid(schema, priorVal, configVal, plannedNewVal); len(errs) > 0 {\n\t\tif resp.LegacyTypeSystem {\n\t\t\t// The shimming of the old type system in the legacy SDK is not precise\n\t\t\t// enough to pass this consistency check, so we'll give it a pass here,\n\t\t\t// but we will generate a warning about it so that we are more likely\n\t\t\t// to notice in the logs if an inconsistency beyond the type system\n\t\t\t// leads to a downstream provider failure.\n\t\t\tvar buf strings.Builder\n\t\t\tfmt.Fprintf(&buf, \"[WARN] Provider %q produced an invalid plan for %s, but we are tolerating it because it is using the legacy plugin SDK.\\n    The following problems may be the cause of any confusing errors from downstream operations:\", n.ProviderAddr.ProviderConfig.Type, absAddr)\n\t\t\tfor _, err := range errs {\n\t\t\t\tfmt.Fprintf(&buf, \"\\n      - %s\", tfdiags.FormatError(err))\n\t\t\t}\n\t\t\tlog.Print(buf.String())\n\t\t} else {\n\t\t\tfor _, err := range errs {\n\t\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\t\ttfdiags.Error,\n\t\t\t\t\t\"Provider produced invalid plan\",\n\t\t\t\t\tfmt.Sprintf(\n\t\t\t\t\t\t\"Provider %q planned an invalid value for %s.\\n\\nThis is a bug in the provider, which should be reported in the provider's own issue tracker.\",\n\t\t\t\t\t\tn.ProviderAddr.ProviderConfig.Type, tfdiags.FormatErrorPrefixed(err, absAddr.String()),\n\t\t\t\t\t),\n\t\t\t\t))\n\t\t\t}\n\t\t\treturn nil, diags.Err()\n\t\t}\n\t}\n\n\t{\n\t\tvar moreDiags tfdiags.Diagnostics\n\t\tplannedNewVal, moreDiags = n.processIgnoreChanges(priorVal, plannedNewVal)\n\t\tdiags = diags.Append(moreDiags)\n\t\tif moreDiags.HasErrors() {\n\t\t\treturn nil, diags.Err()\n\t\t}\n\t}\n\n\t// The provider produces a list of paths to attributes whose changes mean\n\t// that we must replace rather than update an existing remote object.\n\t// However, we only need to do that if the identified attributes _have_\n\t// actually changed -- particularly after we may have undone some of the\n\t// changes in processIgnoreChanges -- so now we'll filter that list to\n\t// include only where changes are detected.\n\treqRep := cty.NewPathSet()\n\tif len(resp.RequiresReplace) > 0 {\n\t\tfor _, path := range resp.RequiresReplace {\n\t\t\tif priorVal.IsNull() {\n\t\t\t\t// If prior is null then we don't expect any RequiresReplace at all,\n\t\t\t\t// because this is a Create action.\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tpriorChangedVal, priorPathDiags := hcl.ApplyPath(priorVal, path, nil)\n\t\t\tplannedChangedVal, plannedPathDiags := hcl.ApplyPath(plannedNewVal, path, nil)\n\t\t\tif plannedPathDiags.HasErrors() && priorPathDiags.HasErrors() {\n\t\t\t\t// This means the path was invalid in both the prior and new\n\t\t\t\t// values, which is an error with the provider itself.\n\t\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\t\ttfdiags.Error,\n\t\t\t\t\t\"Provider produced invalid plan\",\n\t\t\t\t\tfmt.Sprintf(\n\t\t\t\t\t\t\"Provider %q has indicated \\\"requires replacement\\\" on %s for a non-existent attribute path %#v.\\n\\nThis is a bug in the provider, which should be reported in the provider's own issue tracker.\",\n\t\t\t\t\t\tn.ProviderAddr.ProviderConfig.Type, absAddr, path,\n\t\t\t\t\t),\n\t\t\t\t))\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// Make sure we have valid Values for both values.\n\t\t\t// Note: if the opposing value was of the type\n\t\t\t// cty.DynamicPseudoType, the type assigned here may not exactly\n\t\t\t// match the schema. This is fine here, since we're only going to\n\t\t\t// check for equality, but if the NullVal is to be used, we need to\n\t\t\t// check the schema for th true type.\n\t\t\tswitch {\n\t\t\tcase priorChangedVal == cty.NilVal && plannedChangedVal == cty.NilVal:\n\t\t\t\t// this should never happen without ApplyPath errors above\n\t\t\t\tpanic(\"requires replace path returned 2 nil values\")\n\t\t\tcase priorChangedVal == cty.NilVal:\n\t\t\t\tpriorChangedVal = cty.NullVal(plannedChangedVal.Type())\n\t\t\tcase plannedChangedVal == cty.NilVal:\n\t\t\t\tplannedChangedVal = cty.NullVal(priorChangedVal.Type())\n\t\t\t}\n\n\t\t\teqV := plannedChangedVal.Equals(priorChangedVal)\n\t\t\tif !eqV.IsKnown() || eqV.False() {\n\t\t\t\treqRep.Add(path)\n\t\t\t}\n\t\t}\n\t\tif diags.HasErrors() {\n\t\t\treturn nil, diags.Err()\n\t\t}\n\t}\n\n\teqV := plannedNewVal.Equals(priorVal)\n\teq := eqV.IsKnown() && eqV.True()\n\n\tvar action plans.Action\n\tswitch {\n\tcase priorVal.IsNull():\n\t\taction = plans.Create\n\tcase eq:\n\t\taction = plans.NoOp\n\tcase !reqRep.Empty():\n\t\t// If there are any \"requires replace\" paths left _after our filtering\n\t\t// above_ then this is a replace action.\n\t\tif n.CreateBeforeDestroy {\n\t\t\taction = plans.CreateThenDelete\n\t\t} else {\n\t\t\taction = plans.DeleteThenCreate\n\t\t}\n\tdefault:\n\t\taction = plans.Update\n\t\t// \"Delete\" is never chosen here, because deletion plans are always\n\t\t// created more directly elsewhere, such as in \"orphan\" handling.\n\t}\n\n\tif action.IsReplace() {\n\t\t// In this strange situation we want to produce a change object that\n\t\t// shows our real prior object but has a _new_ object that is built\n\t\t// from a null prior object, since we're going to delete the one\n\t\t// that has all the computed values on it.\n\t\t//\n\t\t// Therefore we'll ask the provider to plan again here, giving it\n\t\t// a null object for the prior, and then we'll meld that with the\n\t\t// _actual_ prior state to produce a correctly-shaped replace change.\n\t\t// The resulting change should show any computed attributes changing\n\t\t// from known prior values to unknown values, unless the provider is\n\t\t// able to predict new values for any of these computed attributes.\n\t\tnullPriorVal := cty.NullVal(schema.ImpliedType())\n\n\t\t// create a new proposed value from the null state and the config\n\t\tproposedNewVal = objchange.ProposedNewObject(schema, nullPriorVal, configVal)\n\n\t\tresp = provider.PlanResourceChange(providers.PlanResourceChangeRequest{\n\t\t\tTypeName:         n.Addr.Resource.Type,\n\t\t\tConfig:           configVal,\n\t\t\tPriorState:       nullPriorVal,\n\t\t\tProposedNewState: proposedNewVal,\n\t\t\tPriorPrivate:     plannedPrivate,\n\t\t})\n\t\t// We need to tread carefully here, since if there are any warnings\n\t\t// in here they probably also came out of our previous call to\n\t\t// PlanResourceChange above, and so we don't want to repeat them.\n\t\t// Consequently, we break from the usual pattern here and only\n\t\t// append these new diagnostics if there's at least one error inside.\n\t\tif resp.Diagnostics.HasErrors() {\n\t\t\tdiags = diags.Append(resp.Diagnostics.InConfigBody(config.Config))\n\t\t\treturn nil, diags.Err()\n\t\t}\n\t\tplannedNewVal = resp.PlannedState\n\t\tplannedPrivate = resp.PlannedPrivate\n\t\tfor _, err := range plannedNewVal.Type().TestConformance(schema.ImpliedType()) {\n\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\ttfdiags.Error,\n\t\t\t\t\"Provider produced invalid plan\",\n\t\t\t\tfmt.Sprintf(\n\t\t\t\t\t\"Provider %q planned an invalid value for %s%s.\\n\\nThis is a bug in the provider, which should be reported in the provider's own issue tracker.\",\n\t\t\t\t\tn.ProviderAddr.ProviderConfig.Type, absAddr, tfdiags.FormatError(err),\n\t\t\t\t),\n\t\t\t))\n\t\t}\n\t\tif diags.HasErrors() {\n\t\t\treturn nil, diags.Err()\n\t\t}\n\t}\n\n\t// If our prior value was tainted then we actually want this to appear\n\t// as a replace change, even though so far we've been treating it as a\n\t// create.\n\tif action == plans.Create && priorValTainted != cty.NilVal {\n\t\tif n.CreateBeforeDestroy {\n\t\t\taction = plans.CreateThenDelete\n\t\t} else {\n\t\t\taction = plans.DeleteThenCreate\n\t\t}\n\t\tpriorVal = priorValTainted\n\t}\n\n\t// As a special case, if we have a previous diff (presumably from the plan\n\t// phases, whereas we're now in the apply phase) and it was for a replace,\n\t// we've already deleted the original object from state by the time we\n\t// get here and so we would've ended up with a _create_ action this time,\n\t// which we now need to paper over to get a result consistent with what\n\t// we originally intended.\n\tif n.PreviousDiff != nil {\n\t\tprevChange := *n.PreviousDiff\n\t\tif prevChange.Action.IsReplace() && action == plans.Create {\n\t\t\tlog.Printf(\"[TRACE] EvalDiff: %s treating Create change as %s change to match with earlier plan\", absAddr, prevChange.Action)\n\t\t\taction = prevChange.Action\n\t\t\tpriorVal = prevChange.Before\n\t\t}\n\t}\n\n\t// Call post-refresh hook\n\tif !n.Stub {\n\t\terr := ctx.Hook(func(h Hook) (HookAction, error) {\n\t\t\treturn h.PostDiff(absAddr, states.CurrentGen, action, priorVal, plannedNewVal)\n\t\t})\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\t// Update our output if we care\n\tif n.OutputChange != nil {\n\t\t*n.OutputChange = &plans.ResourceInstanceChange{\n\t\t\tAddr:         absAddr,\n\t\t\tPrivate:      plannedPrivate,\n\t\t\tProviderAddr: n.ProviderAddr,\n\t\t\tChange: plans.Change{\n\t\t\t\tAction: action,\n\t\t\t\tBefore: priorVal,\n\t\t\t\tAfter:  plannedNewVal,\n\t\t\t},\n\t\t\tRequiredReplace: reqRep,\n\t\t}\n\t}\n\n\tif n.OutputValue != nil {\n\t\t*n.OutputValue = configVal\n\t}\n\n\t// Update the state if we care\n\tif n.OutputState != nil {\n\t\t*n.OutputState = &states.ResourceInstanceObject{\n\t\t\t// We use the special \"planned\" status here to note that this\n\t\t\t// object's value is not yet complete. Objects with this status\n\t\t\t// cannot be used during expression evaluation, so the caller\n\t\t\t// must _also_ record the returned change in the active plan,\n\t\t\t// which the expression evaluator will use in preference to this\n\t\t\t// incomplete value recorded in the state.\n\t\t\tStatus: states.ObjectPlanned,\n\t\t\tValue:  plannedNewVal,\n\t\t}\n\t}\n\n\treturn nil, nil\n}\n\nfunc (n *EvalDiff) processIgnoreChanges(prior, proposed cty.Value) (cty.Value, tfdiags.Diagnostics) {\n\t// ignore_changes only applies when an object already exists, since we\n\t// can't ignore changes to a thing we've not created yet.\n\tif prior.IsNull() {\n\t\treturn proposed, nil\n\t}\n\n\tignoreChanges := n.Config.Managed.IgnoreChanges\n\tignoreAll := n.Config.Managed.IgnoreAllChanges\n\n\tif len(ignoreChanges) == 0 && !ignoreAll {\n\t\treturn proposed, nil\n\t}\n\tif ignoreAll {\n\t\treturn prior, nil\n\t}\n\tif prior.IsNull() || proposed.IsNull() {\n\t\t// Ignore changes doesn't apply when we're creating for the first time.\n\t\t// Proposed should never be null here, but if it is then we'll just let it be.\n\t\treturn proposed, nil\n\t}\n\n\treturn processIgnoreChangesIndividual(prior, proposed, ignoreChanges)\n}\n\nfunc processIgnoreChangesIndividual(prior, proposed cty.Value, ignoreChanges []hcl.Traversal) (cty.Value, tfdiags.Diagnostics) {\n\t// When we walk below we will be using cty.Path values for comparison, so\n\t// we'll convert our traversals here so we can compare more easily.\n\tignoreChangesPath := make([]cty.Path, len(ignoreChanges))\n\tfor i, traversal := range ignoreChanges {\n\t\tpath := make(cty.Path, len(traversal))\n\t\tfor si, step := range traversal {\n\t\t\tswitch ts := step.(type) {\n\t\t\tcase hcl.TraverseRoot:\n\t\t\t\tpath[si] = cty.GetAttrStep{\n\t\t\t\t\tName: ts.Name,\n\t\t\t\t}\n\t\t\tcase hcl.TraverseAttr:\n\t\t\t\tpath[si] = cty.GetAttrStep{\n\t\t\t\t\tName: ts.Name,\n\t\t\t\t}\n\t\t\tcase hcl.TraverseIndex:\n\t\t\t\tpath[si] = cty.IndexStep{\n\t\t\t\t\tKey: ts.Key,\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\tpanic(fmt.Sprintf(\"unsupported traversal step %#v\", step))\n\t\t\t}\n\t\t}\n\t\tignoreChangesPath[i] = path\n\t}\n\n\tvar diags tfdiags.Diagnostics\n\tret, _ := cty.Transform(proposed, func(path cty.Path, v cty.Value) (cty.Value, error) {\n\t\t// First we must see if this is a path that's being ignored at all.\n\t\t// We're looking for an exact match here because this walk will visit\n\t\t// leaf values first and then their containers, and we want to do\n\t\t// the \"ignore\" transform once we reach the point indicated, throwing\n\t\t// away any deeper values we already produced at that point.\n\t\tvar ignoreTraversal hcl.Traversal\n\t\tfor i, candidate := range ignoreChangesPath {\n\t\t\tif reflect.DeepEqual(path, candidate) {\n\t\t\t\tignoreTraversal = ignoreChanges[i]\n\t\t\t}\n\t\t}\n\t\tif ignoreTraversal == nil {\n\t\t\treturn v, nil\n\t\t}\n\n\t\t// If we're able to follow the same path through the prior value,\n\t\t// we'll take the value there instead, effectively undoing the\n\t\t// change that was planned.\n\t\tpriorV, diags := hcl.ApplyPath(prior, path, nil)\n\t\tif diags.HasErrors() {\n\t\t\t// We just ignore the errors and move on here, since we assume it's\n\t\t\t// just because the prior value was a slightly-different shape.\n\t\t\t// It could potentially also be that the traversal doesn't match\n\t\t\t// the schema, but we should've caught that during the validate\n\t\t\t// walk if so.\n\t\t\treturn v, nil\n\t\t}\n\t\treturn priorV, nil\n\t})\n\treturn ret, diags\n}\n\nfunc (n *EvalDiff) processIgnoreChangesOld(diff *InstanceDiff) error {\n\tif diff == nil || n.Config == nil || n.Config.Managed == nil {\n\t\treturn nil\n\t}\n\tignoreChanges := n.Config.Managed.IgnoreChanges\n\tignoreAll := n.Config.Managed.IgnoreAllChanges\n\n\tif len(ignoreChanges) == 0 && !ignoreAll {\n\t\treturn nil\n\t}\n\n\t// If we're just creating the resource, we shouldn't alter the\n\t// Diff at all\n\tif diff.ChangeType() == DiffCreate {\n\t\treturn nil\n\t}\n\n\t// If the resource has been tainted then we don't process ignore changes\n\t// since we MUST recreate the entire resource.\n\tif diff.GetDestroyTainted() {\n\t\treturn nil\n\t}\n\n\tattrs := diff.CopyAttributes()\n\n\t// get the complete set of keys we want to ignore\n\tignorableAttrKeys := make(map[string]bool)\n\tfor k := range attrs {\n\t\tif ignoreAll {\n\t\t\tignorableAttrKeys[k] = true\n\t\t\tcontinue\n\t\t}\n\t\tfor _, ignoredTraversal := range ignoreChanges {\n\t\t\tignoredKey := legacyFlatmapKeyForTraversal(ignoredTraversal)\n\t\t\tif k == ignoredKey || strings.HasPrefix(k, ignoredKey+\".\") {\n\t\t\t\tignorableAttrKeys[k] = true\n\t\t\t}\n\t\t}\n\t}\n\n\t// If the resource was being destroyed, check to see if we can ignore the\n\t// reason for it being destroyed.\n\tif diff.GetDestroy() {\n\t\tfor k, v := range attrs {\n\t\t\tif k == \"id\" {\n\t\t\t\t// id will always be changed if we intended to replace this instance\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif v.Empty() || v.NewComputed {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// If any RequiresNew attribute isn't ignored, we need to keep the diff\n\t\t\t// as-is to be able to replace the resource.\n\t\t\tif v.RequiresNew && !ignorableAttrKeys[k] {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t}\n\n\t\t// Now that we know that we aren't replacing the instance, we can filter\n\t\t// out all the empty and computed attributes. There may be a bunch of\n\t\t// extraneous attribute diffs for the other non-requires-new attributes\n\t\t// going from \"\" -> \"configval\" or \"\" -> \"<computed>\".\n\t\t// We must make sure any flatmapped containers are filterred (or not) as a\n\t\t// whole.\n\t\tcontainers := groupContainers(diff)\n\t\tkeep := map[string]bool{}\n\t\tfor _, v := range containers {\n\t\t\tif v.keepDiff(ignorableAttrKeys) {\n\t\t\t\t// At least one key has changes, so list all the sibling keys\n\t\t\t\t// to keep in the diff\n\t\t\t\tfor k := range v {\n\t\t\t\t\tkeep[k] = true\n\t\t\t\t\t// this key may have been added by the user to ignore, but\n\t\t\t\t\t// if it's a subkey in a container, we need to un-ignore it\n\t\t\t\t\t// to keep the complete containter.\n\t\t\t\t\tdelete(ignorableAttrKeys, k)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor k, v := range attrs {\n\t\t\tif (v.Empty() || v.NewComputed) && !keep[k] {\n\t\t\t\tignorableAttrKeys[k] = true\n\t\t\t}\n\t\t}\n\t}\n\n\t// Here we undo the two reactions to RequireNew in EvalDiff - the \"id\"\n\t// attribute diff and the Destroy boolean field\n\tlog.Printf(\"[DEBUG] Removing 'id' diff and setting Destroy to false \" +\n\t\t\"because after ignore_changes, this diff no longer requires replacement\")\n\tdiff.DelAttribute(\"id\")\n\tdiff.SetDestroy(false)\n\n\t// If we didn't hit any of our early exit conditions, we can filter the diff.\n\tfor k := range ignorableAttrKeys {\n\t\tlog.Printf(\"[DEBUG] [EvalIgnoreChanges] %s: Ignoring diff attribute: %s\", n.Addr.String(), k)\n\t\tdiff.DelAttribute(k)\n\t}\n\n\treturn nil\n}\n\n// legacyFlagmapKeyForTraversal constructs a key string compatible with what\n// the flatmap package would generate for an attribute addressable by the given\n// traversal.\n//\n// This is used only to shim references to attributes within the diff and\n// state structures, which have not (at the time of writing) yet been updated\n// to use the newer HCL-based representations.\nfunc legacyFlatmapKeyForTraversal(traversal hcl.Traversal) string {\n\tvar buf bytes.Buffer\n\tfirst := true\n\tfor _, step := range traversal {\n\t\tif !first {\n\t\t\tbuf.WriteByte('.')\n\t\t}\n\t\tswitch ts := step.(type) {\n\t\tcase hcl.TraverseRoot:\n\t\t\tbuf.WriteString(ts.Name)\n\t\tcase hcl.TraverseAttr:\n\t\t\tbuf.WriteString(ts.Name)\n\t\tcase hcl.TraverseIndex:\n\t\t\tval := ts.Key\n\t\t\tswitch val.Type() {\n\t\t\tcase cty.Number:\n\t\t\t\tbf := val.AsBigFloat()\n\t\t\t\tbuf.WriteString(bf.String())\n\t\t\tcase cty.String:\n\t\t\t\ts := val.AsString()\n\t\t\t\tbuf.WriteString(s)\n\t\t\tdefault:\n\t\t\t\t// should never happen, since no other types appear in\n\t\t\t\t// traversals in practice.\n\t\t\t\tbuf.WriteByte('?')\n\t\t\t}\n\t\tdefault:\n\t\t\t// should never happen, since we've covered all of the types\n\t\t\t// that show up in parsed traversals in practice.\n\t\t\tbuf.WriteByte('?')\n\t\t}\n\t\tfirst = false\n\t}\n\treturn buf.String()\n}\n\n// a group of key-*ResourceAttrDiff pairs from the same flatmapped container\ntype flatAttrDiff map[string]*ResourceAttrDiff\n\n// we need to keep all keys if any of them have a diff that's not ignored\nfunc (f flatAttrDiff) keepDiff(ignoreChanges map[string]bool) bool {\n\tfor k, v := range f {\n\t\tignore := false\n\t\tfor attr := range ignoreChanges {\n\t\t\tif strings.HasPrefix(k, attr) {\n\t\t\t\tignore = true\n\t\t\t}\n\t\t}\n\n\t\tif !v.Empty() && !v.NewComputed && !ignore {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// sets, lists and maps need to be compared for diff inclusion as a whole, so\n// group the flatmapped keys together for easier comparison.\nfunc groupContainers(d *InstanceDiff) map[string]flatAttrDiff {\n\tisIndex := multiVal.MatchString\n\tcontainers := map[string]flatAttrDiff{}\n\tattrs := d.CopyAttributes()\n\t// we need to loop once to find the index key\n\tfor k := range attrs {\n\t\tif isIndex(k) {\n\t\t\t// add the key, always including the final dot to fully qualify it\n\t\t\tcontainers[k[:len(k)-1]] = flatAttrDiff{}\n\t\t}\n\t}\n\n\t// loop again to find all the sub keys\n\tfor prefix, values := range containers {\n\t\tfor k, attrDiff := range attrs {\n\t\t\t// we include the index value as well, since it could be part of the diff\n\t\t\tif strings.HasPrefix(k, prefix) {\n\t\t\t\tvalues[k] = attrDiff\n\t\t\t}\n\t\t}\n\t}\n\n\treturn containers\n}\n\n// EvalDiffDestroy is an EvalNode implementation that returns a plain\n// destroy diff.\ntype EvalDiffDestroy struct {\n\tAddr         addrs.ResourceInstance\n\tDeposedKey   states.DeposedKey\n\tState        **states.ResourceInstanceObject\n\tProviderAddr addrs.AbsProviderConfig\n\n\tOutput      **plans.ResourceInstanceChange\n\tOutputState **states.ResourceInstanceObject\n}\n\n// TODO: test\nfunc (n *EvalDiffDestroy) Eval(ctx EvalContext) (interface{}, error) {\n\tabsAddr := n.Addr.Absolute(ctx.Path())\n\tstate := *n.State\n\n\tif n.ProviderAddr.ProviderConfig.Type == \"\" {\n\t\tif n.DeposedKey == \"\" {\n\t\t\tpanic(fmt.Sprintf(\"EvalDiffDestroy for %s does not have ProviderAddr set\", absAddr))\n\t\t} else {\n\t\t\tpanic(fmt.Sprintf(\"EvalDiffDestroy for %s (deposed %s) does not have ProviderAddr set\", absAddr, n.DeposedKey))\n\t\t}\n\t}\n\n\t// If there is no state or our attributes object is null then we're already\n\t// destroyed.\n\tif state == nil || state.Value.IsNull() {\n\t\treturn nil, nil\n\t}\n\n\t// Call pre-diff hook\n\terr := ctx.Hook(func(h Hook) (HookAction, error) {\n\t\treturn h.PreDiff(\n\t\t\tabsAddr, n.DeposedKey.Generation(),\n\t\t\tstate.Value,\n\t\t\tcty.NullVal(cty.DynamicPseudoType),\n\t\t)\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Change is always the same for a destroy. We don't need the provider's\n\t// help for this one.\n\t// TODO: Should we give the provider an opportunity to veto this?\n\tchange := &plans.ResourceInstanceChange{\n\t\tAddr:       absAddr,\n\t\tDeposedKey: n.DeposedKey,\n\t\tChange: plans.Change{\n\t\t\tAction: plans.Delete,\n\t\t\tBefore: state.Value,\n\t\t\tAfter:  cty.NullVal(cty.DynamicPseudoType),\n\t\t},\n\t\tProviderAddr: n.ProviderAddr,\n\t}\n\n\t// Call post-diff hook\n\terr = ctx.Hook(func(h Hook) (HookAction, error) {\n\t\treturn h.PostDiff(\n\t\t\tabsAddr,\n\t\t\tn.DeposedKey.Generation(),\n\t\t\tchange.Action,\n\t\t\tchange.Before,\n\t\t\tchange.After,\n\t\t)\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Update our output\n\t*n.Output = change\n\n\tif n.OutputState != nil {\n\t\t// Record our proposed new state, which is nil because we're destroying.\n\t\t*n.OutputState = nil\n\t}\n\n\treturn nil, nil\n}\n\n// EvalReduceDiff is an EvalNode implementation that takes a planned resource\n// instance change as might be produced by EvalDiff or EvalDiffDestroy and\n// \"simplifies\" it to a single atomic action to be performed by a specific\n// graph node.\n//\n// Callers must specify whether they are a destroy node or a regular apply\n// node.  If the result is NoOp then the given change requires no action for\n// the specific graph node calling this and so evaluation of the that graph\n// node should exit early and take no action.\n//\n// The object written to OutChange may either be identical to InChange or\n// a new change object derived from InChange. Because of the former case, the\n// caller must not mutate the object returned in OutChange.\ntype EvalReduceDiff struct {\n\tAddr      addrs.ResourceInstance\n\tInChange  **plans.ResourceInstanceChange\n\tDestroy   bool\n\tOutChange **plans.ResourceInstanceChange\n}\n\n// TODO: test\nfunc (n *EvalReduceDiff) Eval(ctx EvalContext) (interface{}, error) {\n\tin := *n.InChange\n\tout := in.Simplify(n.Destroy)\n\tif n.OutChange != nil {\n\t\t*n.OutChange = out\n\t}\n\tif out.Action != in.Action {\n\t\tif n.Destroy {\n\t\t\tlog.Printf(\"[TRACE] EvalReduceDiff: %s change simplified from %s to %s for destroy node\", n.Addr, in.Action, out.Action)\n\t\t} else {\n\t\t\tlog.Printf(\"[TRACE] EvalReduceDiff: %s change simplified from %s to %s for apply node\", n.Addr, in.Action, out.Action)\n\t\t}\n\t}\n\treturn nil, nil\n}\n\n// EvalReadDiff is an EvalNode implementation that retrieves the planned\n// change for a particular resource instance object.\ntype EvalReadDiff struct {\n\tAddr           addrs.ResourceInstance\n\tDeposedKey     states.DeposedKey\n\tProviderSchema **ProviderSchema\n\tChange         **plans.ResourceInstanceChange\n}\n\nfunc (n *EvalReadDiff) Eval(ctx EvalContext) (interface{}, error) {\n\tproviderSchema := *n.ProviderSchema\n\tchanges := ctx.Changes()\n\taddr := n.Addr.Absolute(ctx.Path())\n\n\tschema, _ := providerSchema.SchemaForResourceAddr(n.Addr.ContainingResource())\n\tif schema == nil {\n\t\t// Should be caught during validation, so we don't bother with a pretty error here\n\t\treturn nil, fmt.Errorf(\"provider does not support resource type %q\", n.Addr.Resource.Type)\n\t}\n\n\tgen := states.CurrentGen\n\tif n.DeposedKey != states.NotDeposed {\n\t\tgen = n.DeposedKey\n\t}\n\tcsrc := changes.GetResourceInstanceChange(addr, gen)\n\tif csrc == nil {\n\t\tlog.Printf(\"[TRACE] EvalReadDiff: No planned change recorded for %s\", addr)\n\t\treturn nil, nil\n\t}\n\n\tchange, err := csrc.Decode(schema.ImpliedType())\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to decode planned changes for %s: %s\", addr, err)\n\t}\n\tif n.Change != nil {\n\t\t*n.Change = change\n\t}\n\n\tlog.Printf(\"[TRACE] EvalReadDiff: Read %s change from plan for %s\", change.Action, addr)\n\n\treturn nil, nil\n}\n\n// EvalWriteDiff is an EvalNode implementation that saves a planned change\n// for an instance object into the set of global planned changes.\ntype EvalWriteDiff struct {\n\tAddr           addrs.ResourceInstance\n\tDeposedKey     states.DeposedKey\n\tProviderSchema **ProviderSchema\n\tChange         **plans.ResourceInstanceChange\n}\n\n// TODO: test\nfunc (n *EvalWriteDiff) Eval(ctx EvalContext) (interface{}, error) {\n\tchanges := ctx.Changes()\n\taddr := n.Addr.Absolute(ctx.Path())\n\tif n.Change == nil || *n.Change == nil {\n\t\t// Caller sets nil to indicate that we need to remove a change from\n\t\t// the set of changes.\n\t\tgen := states.CurrentGen\n\t\tif n.DeposedKey != states.NotDeposed {\n\t\t\tgen = n.DeposedKey\n\t\t}\n\t\tchanges.RemoveResourceInstanceChange(addr, gen)\n\t\treturn nil, nil\n\t}\n\n\tproviderSchema := *n.ProviderSchema\n\tchange := *n.Change\n\n\tif change.Addr.String() != addr.String() || change.DeposedKey != n.DeposedKey {\n\t\t// Should never happen, and indicates a bug in the caller.\n\t\tpanic(\"inconsistent address and/or deposed key in EvalWriteDiff\")\n\t}\n\n\tschema, _ := providerSchema.SchemaForResourceAddr(n.Addr.ContainingResource())\n\tif schema == nil {\n\t\t// Should be caught during validation, so we don't bother with a pretty error here\n\t\treturn nil, fmt.Errorf(\"provider does not support resource type %q\", n.Addr.Resource.Type)\n\t}\n\n\tcsrc, err := change.Encode(schema.ImpliedType())\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to encode planned changes for %s: %s\", addr, err)\n\t}\n\n\tchanges.AppendResourceInstanceChange(csrc)\n\tif n.DeposedKey == states.NotDeposed {\n\t\tlog.Printf(\"[TRACE] EvalWriteDiff: recorded %s change for %s\", change.Action, addr)\n\t} else {\n\t\tlog.Printf(\"[TRACE] EvalWriteDiff: recorded %s change for %s deposed object %s\", change.Action, addr, n.DeposedKey)\n\t}\n\n\treturn nil, nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/eval_error.go",
    "content": "package terraform\n\n// EvalReturnError is an EvalNode implementation that returns an\n// error if it is present.\n//\n// This is useful for scenarios where an error has been captured by\n// another EvalNode (like EvalApply) for special EvalTree-based error\n// handling, and that handling has completed, so the error should be\n// returned normally.\ntype EvalReturnError struct {\n\tError *error\n}\n\nfunc (n *EvalReturnError) Eval(ctx EvalContext) (interface{}, error) {\n\tif n.Error == nil {\n\t\treturn nil, nil\n\t}\n\n\treturn nil, *n.Error\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/eval_filter.go",
    "content": "package terraform\n\n// EvalNodeFilterFunc is the callback used to replace a node with\n// another to node. To not do the replacement, just return the input node.\ntype EvalNodeFilterFunc func(EvalNode) EvalNode\n\n// EvalNodeFilterable is an interface that can be implemented by\n// EvalNodes to allow filtering of sub-elements. Note that this isn't\n// a common thing to implement and you probably don't need it.\ntype EvalNodeFilterable interface {\n\tEvalNode\n\tFilter(EvalNodeFilterFunc)\n}\n\n// EvalFilter runs the filter on the given node and returns the\n// final filtered value. This should be called rather than checking\n// the EvalNode directly since this will properly handle EvalNodeFilterables.\nfunc EvalFilter(node EvalNode, fn EvalNodeFilterFunc) EvalNode {\n\tif f, ok := node.(EvalNodeFilterable); ok {\n\t\tf.Filter(fn)\n\t\treturn node\n\t}\n\n\treturn fn(node)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/eval_filter_operation.go",
    "content": "package terraform\n\n// EvalNodeOpFilterable is an interface that EvalNodes can implement\n// to be filterable by the operation that is being run on Terraform.\ntype EvalNodeOpFilterable interface {\n\tIncludeInOp(walkOperation) bool\n}\n\n// EvalNodeFilterOp returns a filter function that filters nodes that\n// include themselves in specific operations.\nfunc EvalNodeFilterOp(op walkOperation) EvalNodeFilterFunc {\n\treturn func(n EvalNode) EvalNode {\n\t\tinclude := true\n\t\tif of, ok := n.(EvalNodeOpFilterable); ok {\n\t\t\tinclude = of.IncludeInOp(op)\n\t\t}\n\t\tif include {\n\t\t\treturn n\n\t\t}\n\n\t\treturn EvalNoop{}\n\t}\n}\n\n// EvalOpFilter is an EvalNode implementation that is a proxy to\n// another node but filters based on the operation.\ntype EvalOpFilter struct {\n\t// Ops is the list of operations to include this node in.\n\tOps []walkOperation\n\n\t// Node is the node to execute\n\tNode EvalNode\n}\n\n// TODO: test\nfunc (n *EvalOpFilter) Eval(ctx EvalContext) (interface{}, error) {\n\treturn EvalRaw(n.Node, ctx)\n}\n\n// EvalNodeOpFilterable impl.\nfunc (n *EvalOpFilter) IncludeInOp(op walkOperation) bool {\n\tfor _, v := range n.Ops {\n\t\tif v == op {\n\t\t\treturn true\n\t\t}\n\t}\n\n\treturn false\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/eval_if.go",
    "content": "package terraform\n\n// EvalIf is an EvalNode that is a conditional.\ntype EvalIf struct {\n\tIf   func(EvalContext) (bool, error)\n\tThen EvalNode\n\tElse EvalNode\n}\n\n// TODO: test\nfunc (n *EvalIf) Eval(ctx EvalContext) (interface{}, error) {\n\tyes, err := n.If(ctx)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif yes {\n\t\treturn EvalRaw(n.Then, ctx)\n\t} else {\n\t\tif n.Else != nil {\n\t\t\treturn EvalRaw(n.Else, ctx)\n\t\t}\n\t}\n\n\treturn nil, nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/eval_import_state.go",
    "content": "package terraform\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/providers\"\n\t\"github.com/hashicorp/terraform/states\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n)\n\n// EvalImportState is an EvalNode implementation that performs an\n// ImportState operation on a provider. This will return the imported\n// states but won't modify any actual state.\ntype EvalImportState struct {\n\tAddr     addrs.ResourceInstance\n\tProvider *providers.Interface\n\tID       string\n\tOutput   *[]providers.ImportedResource\n}\n\n// TODO: test\nfunc (n *EvalImportState) Eval(ctx EvalContext) (interface{}, error) {\n\tabsAddr := n.Addr.Absolute(ctx.Path())\n\tprovider := *n.Provider\n\tvar diags tfdiags.Diagnostics\n\n\t{\n\t\t// Call pre-import hook\n\t\terr := ctx.Hook(func(h Hook) (HookAction, error) {\n\t\t\treturn h.PreImportState(absAddr, n.ID)\n\t\t})\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\tresp := provider.ImportResourceState(providers.ImportResourceStateRequest{\n\t\tTypeName: n.Addr.Resource.Type,\n\t\tID:       n.ID,\n\t})\n\tdiags = diags.Append(resp.Diagnostics)\n\tif diags.HasErrors() {\n\t\treturn nil, diags.Err()\n\t}\n\n\timported := resp.ImportedResources\n\n\tfor _, obj := range imported {\n\t\tlog.Printf(\"[TRACE] EvalImportState: import %s %q produced instance object of type %s\", absAddr.String(), n.ID, obj.TypeName)\n\t}\n\n\tif n.Output != nil {\n\t\t*n.Output = imported\n\t}\n\n\t{\n\t\t// Call post-import hook\n\t\terr := ctx.Hook(func(h Hook) (HookAction, error) {\n\t\t\treturn h.PostImportState(absAddr, imported)\n\t\t})\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\treturn nil, nil\n}\n\n// EvalImportStateVerify verifies the state after ImportState and\n// after the refresh to make sure it is non-nil and valid.\ntype EvalImportStateVerify struct {\n\tAddr  addrs.ResourceInstance\n\tState **states.ResourceInstanceObject\n}\n\n// TODO: test\nfunc (n *EvalImportStateVerify) Eval(ctx EvalContext) (interface{}, error) {\n\tvar diags tfdiags.Diagnostics\n\n\tstate := *n.State\n\tif state.Value.IsNull() {\n\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\ttfdiags.Error,\n\t\t\t\"Cannot import non-existent remote object\",\n\t\t\tfmt.Sprintf(\n\t\t\t\t\"While attempting to import an existing object to %s, the provider detected that no object exists with the given id. Only pre-existing objects can be imported; check that the id is correct and that it is associated with the provider's configured region or endpoint, or use \\\"terraform apply\\\" to create a new remote object for this resource.\",\n\t\t\t\tn.Addr.String(),\n\t\t\t),\n\t\t))\n\t}\n\n\treturn nil, diags.ErrWithWarnings()\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/eval_lang.go",
    "content": "package terraform\n\nimport (\n\t\"log\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/hashicorp/terraform/configs/configschema\"\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// EvalConfigBlock is an EvalNode implementation that takes a raw\n// configuration block and evaluates any expressions within it.\n//\n// ExpandedConfig is populated with the result of expanding any \"dynamic\"\n// blocks in the given body, which can be useful for extracting correct source\n// location information for specific attributes in the result.\ntype EvalConfigBlock struct {\n\tConfig         *hcl.Body\n\tSchema         *configschema.Block\n\tSelfAddr       addrs.Referenceable\n\tOutput         *cty.Value\n\tExpandedConfig *hcl.Body\n\tContinueOnErr  bool\n}\n\nfunc (n *EvalConfigBlock) Eval(ctx EvalContext) (interface{}, error) {\n\tval, body, diags := ctx.EvaluateBlock(*n.Config, n.Schema, n.SelfAddr, EvalDataForNoInstanceKey)\n\tif diags.HasErrors() && n.ContinueOnErr {\n\t\tlog.Printf(\"[WARN] Block evaluation failed: %s\", diags.Err())\n\t\treturn nil, EvalEarlyExitError{}\n\t}\n\n\tif n.Output != nil {\n\t\t*n.Output = val\n\t}\n\tif n.ExpandedConfig != nil {\n\t\t*n.ExpandedConfig = body\n\t}\n\n\treturn nil, diags.ErrWithWarnings()\n}\n\n// EvalConfigExpr is an EvalNode implementation that takes a raw configuration\n// expression and evaluates it.\ntype EvalConfigExpr struct {\n\tExpr     hcl.Expression\n\tSelfAddr addrs.Referenceable\n\tOutput   *cty.Value\n}\n\nfunc (n *EvalConfigExpr) Eval(ctx EvalContext) (interface{}, error) {\n\tval, diags := ctx.EvaluateExpr(n.Expr, cty.DynamicPseudoType, n.SelfAddr)\n\n\tif n.Output != nil {\n\t\t*n.Output = val\n\t}\n\n\treturn nil, diags.ErrWithWarnings()\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/eval_local.go",
    "content": "package terraform\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/zclconf/go-cty/cty\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/lang\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n)\n\n// EvalLocal is an EvalNode implementation that evaluates the\n// expression for a local value and writes it into a transient part of\n// the state.\ntype EvalLocal struct {\n\tAddr addrs.LocalValue\n\tExpr hcl.Expression\n}\n\nfunc (n *EvalLocal) Eval(ctx EvalContext) (interface{}, error) {\n\tvar diags tfdiags.Diagnostics\n\n\t// We ignore diags here because any problems we might find will be found\n\t// again in EvaluateExpr below.\n\trefs, _ := lang.ReferencesInExpr(n.Expr)\n\tfor _, ref := range refs {\n\t\tif ref.Subject == n.Addr {\n\t\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Self-referencing local value\",\n\t\t\t\tDetail:   fmt.Sprintf(\"Local value %s cannot use its own result as part of its expression.\", n.Addr),\n\t\t\t\tSubject:  ref.SourceRange.ToHCL().Ptr(),\n\t\t\t\tContext:  n.Expr.Range().Ptr(),\n\t\t\t})\n\t\t}\n\t}\n\tif diags.HasErrors() {\n\t\treturn nil, diags.Err()\n\t}\n\n\tval, moreDiags := ctx.EvaluateExpr(n.Expr, cty.DynamicPseudoType, nil)\n\tdiags = diags.Append(moreDiags)\n\tif moreDiags.HasErrors() {\n\t\treturn nil, diags.Err()\n\t}\n\n\tstate := ctx.State()\n\tif state == nil {\n\t\treturn nil, fmt.Errorf(\"cannot write local value to nil state\")\n\t}\n\n\tstate.SetLocalValue(n.Addr.Absolute(ctx.Path()), val)\n\n\treturn nil, nil\n}\n\n// EvalDeleteLocal is an EvalNode implementation that deletes a Local value\n// from the state. Locals aren't persisted, but we don't need to evaluate them\n// during destroy.\ntype EvalDeleteLocal struct {\n\tAddr addrs.LocalValue\n}\n\nfunc (n *EvalDeleteLocal) Eval(ctx EvalContext) (interface{}, error) {\n\tstate := ctx.State()\n\tif state == nil {\n\t\treturn nil, nil\n\t}\n\n\tstate.RemoveLocalValue(n.Addr.Absolute(ctx.Path()))\n\treturn nil, nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/eval_noop.go",
    "content": "package terraform\n\n// EvalNoop is an EvalNode that does nothing.\ntype EvalNoop struct{}\n\nfunc (EvalNoop) Eval(EvalContext) (interface{}, error) {\n\treturn nil, nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/eval_output.go",
    "content": "package terraform\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/zclconf/go-cty/cty\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/plans\"\n\t\"github.com/hashicorp/terraform/states\"\n)\n\n// EvalDeleteOutput is an EvalNode implementation that deletes an output\n// from the state.\ntype EvalDeleteOutput struct {\n\tAddr addrs.OutputValue\n}\n\n// TODO: test\nfunc (n *EvalDeleteOutput) Eval(ctx EvalContext) (interface{}, error) {\n\tstate := ctx.State()\n\tif state == nil {\n\t\treturn nil, nil\n\t}\n\n\tstate.RemoveOutputValue(n.Addr.Absolute(ctx.Path()))\n\treturn nil, nil\n}\n\n// EvalWriteOutput is an EvalNode implementation that writes the output\n// for the given name to the current state.\ntype EvalWriteOutput struct {\n\tAddr      addrs.OutputValue\n\tSensitive bool\n\tExpr      hcl.Expression\n\t// ContinueOnErr allows interpolation to fail during Input\n\tContinueOnErr bool\n}\n\n// TODO: test\nfunc (n *EvalWriteOutput) Eval(ctx EvalContext) (interface{}, error) {\n\taddr := n.Addr.Absolute(ctx.Path())\n\n\t// This has to run before we have a state lock, since evaluation also\n\t// reads the state\n\tval, diags := ctx.EvaluateExpr(n.Expr, cty.DynamicPseudoType, nil)\n\t// We'll handle errors below, after we have loaded the module.\n\n\tstate := ctx.State()\n\tif state == nil {\n\t\treturn nil, nil\n\t}\n\n\tchanges := ctx.Changes() // may be nil, if we're not working on a changeset\n\n\t// handling the interpolation error\n\tif diags.HasErrors() {\n\t\tif n.ContinueOnErr || flagWarnOutputErrors {\n\t\t\tlog.Printf(\"[ERROR] Output interpolation %q failed: %s\", n.Addr.Name, diags.Err())\n\t\t\t// if we're continuing, make sure the output is included, and\n\t\t\t// marked as unknown. If the evaluator was able to find a type\n\t\t\t// for the value in spite of the error then we'll use it.\n\t\t\tn.setValue(addr, state, changes, cty.UnknownVal(val.Type()))\n\t\t\treturn nil, EvalEarlyExitError{}\n\t\t}\n\t\treturn nil, diags.Err()\n\t}\n\n\tn.setValue(addr, state, changes, val)\n\n\treturn nil, nil\n}\n\nfunc (n *EvalWriteOutput) setValue(addr addrs.AbsOutputValue, state *states.SyncState, changes *plans.ChangesSync, val cty.Value) {\n\tif val.IsKnown() && !val.IsNull() {\n\t\t// The state itself doesn't represent unknown values, so we null them\n\t\t// out here and then we'll save the real unknown value in the planned\n\t\t// changeset below, if we have one on this graph walk.\n\t\tlog.Printf(\"[TRACE] EvalWriteOutput: Saving value for %s in state\", addr)\n\t\tstateVal := cty.UnknownAsNull(val)\n\t\tstate.SetOutputValue(addr, stateVal, n.Sensitive)\n\t} else {\n\t\tlog.Printf(\"[TRACE] EvalWriteOutput: Removing %s from state (it is now null)\", addr)\n\t\tstate.RemoveOutputValue(addr)\n\t}\n\n\t// If we also have an active changeset then we'll replicate the value in\n\t// there. This is used in preference to the state where present, since it\n\t// *is* able to represent unknowns, while the state cannot.\n\tif changes != nil {\n\t\t// For the moment we are not properly tracking changes to output\n\t\t// values, and just marking them always as \"Create\" or \"Destroy\"\n\t\t// actions. A future release will rework the output lifecycle so we\n\t\t// can track their changes properly, in a similar way to how we work\n\t\t// with resource instances.\n\n\t\tvar change *plans.OutputChange\n\t\tif !val.IsNull() {\n\t\t\tchange = &plans.OutputChange{\n\t\t\t\tAddr:      addr,\n\t\t\t\tSensitive: n.Sensitive,\n\t\t\t\tChange: plans.Change{\n\t\t\t\t\tAction: plans.Create,\n\t\t\t\t\tBefore: cty.NullVal(cty.DynamicPseudoType),\n\t\t\t\t\tAfter:  val,\n\t\t\t\t},\n\t\t\t}\n\t\t} else {\n\t\t\tchange = &plans.OutputChange{\n\t\t\t\tAddr:      addr,\n\t\t\t\tSensitive: n.Sensitive,\n\t\t\t\tChange: plans.Change{\n\t\t\t\t\t// This is just a weird placeholder delete action since\n\t\t\t\t\t// we don't have an actual prior value to indicate.\n\t\t\t\t\t// FIXME: Generate real planned changes for output values\n\t\t\t\t\t// that include the old values.\n\t\t\t\t\tAction: plans.Delete,\n\t\t\t\t\tBefore: cty.NullVal(cty.DynamicPseudoType),\n\t\t\t\t\tAfter:  cty.NullVal(cty.DynamicPseudoType),\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\n\t\tcs, err := change.Encode()\n\t\tif err != nil {\n\t\t\t// Should never happen, since we just constructed this right above\n\t\t\tpanic(fmt.Sprintf(\"planned change for %s could not be encoded: %s\", addr, err))\n\t\t}\n\t\tlog.Printf(\"[TRACE] EvalWriteOutput: Saving %s change for %s in changeset\", change.Action, addr)\n\t\tchanges.RemoveOutputChange(addr) // remove any existing planned change, if present\n\t\tchanges.AppendOutputChange(cs)   // add the new planned change\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/eval_provider.go",
    "content": "package terraform\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\n\t\"github.com/hashicorp/hcl2/hcl\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/configs\"\n\t\"github.com/hashicorp/terraform/providers\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n)\n\nfunc buildProviderConfig(ctx EvalContext, addr addrs.ProviderConfig, config *configs.Provider) hcl.Body {\n\tvar configBody hcl.Body\n\tif config != nil {\n\t\tconfigBody = config.Config\n\t}\n\n\tvar inputBody hcl.Body\n\tinputConfig := ctx.ProviderInput(addr)\n\tif len(inputConfig) > 0 {\n\t\tinputBody = configs.SynthBody(\"<input-prompt>\", inputConfig)\n\t}\n\n\tswitch {\n\tcase configBody != nil && inputBody != nil:\n\t\tlog.Printf(\"[TRACE] buildProviderConfig for %s: merging explicit config and input\", addr)\n\t\t// Note that the inputBody is the _base_ here, because configs.MergeBodies\n\t\t// expects the base have all of the required fields, while these are\n\t\t// forced to be optional for the override. The input process should\n\t\t// guarantee that we have a value for each of the required arguments and\n\t\t// that in practice the sets of attributes in each body will be\n\t\t// disjoint.\n\t\treturn configs.MergeBodies(inputBody, configBody)\n\tcase configBody != nil:\n\t\tlog.Printf(\"[TRACE] buildProviderConfig for %s: using explicit config only\", addr)\n\t\treturn configBody\n\tcase inputBody != nil:\n\t\tlog.Printf(\"[TRACE] buildProviderConfig for %s: using input only\", addr)\n\t\treturn inputBody\n\tdefault:\n\t\tlog.Printf(\"[TRACE] buildProviderConfig for %s: no configuration at all\", addr)\n\t\treturn hcl.EmptyBody()\n\t}\n}\n\n// EvalConfigProvider is an EvalNode implementation that configures\n// a provider that is already initialized and retrieved.\ntype EvalConfigProvider struct {\n\tAddr     addrs.ProviderConfig\n\tProvider *providers.Interface\n\tConfig   *configs.Provider\n}\n\nfunc (n *EvalConfigProvider) Eval(ctx EvalContext) (interface{}, error) {\n\tif n.Provider == nil {\n\t\treturn nil, fmt.Errorf(\"EvalConfigProvider Provider is nil\")\n\t}\n\n\tvar diags tfdiags.Diagnostics\n\tprovider := *n.Provider\n\tconfig := n.Config\n\n\tconfigBody := buildProviderConfig(ctx, n.Addr, config)\n\n\tresp := provider.GetSchema()\n\tdiags = diags.Append(resp.Diagnostics)\n\tif diags.HasErrors() {\n\t\treturn nil, diags.NonFatalErr()\n\t}\n\n\tconfigSchema := resp.Provider.Block\n\tconfigVal, configBody, evalDiags := ctx.EvaluateBlock(configBody, configSchema, nil, EvalDataForNoInstanceKey)\n\tdiags = diags.Append(evalDiags)\n\tif evalDiags.HasErrors() {\n\t\treturn nil, diags.NonFatalErr()\n\t}\n\n\tconfigDiags := ctx.ConfigureProvider(n.Addr, configVal)\n\tconfigDiags = configDiags.InConfigBody(configBody)\n\n\treturn nil, configDiags.ErrWithWarnings()\n}\n\n// EvalInitProvider is an EvalNode implementation that initializes a provider\n// and returns nothing. The provider can be retrieved again with the\n// EvalGetProvider node.\ntype EvalInitProvider struct {\n\tTypeName string\n\tAddr     addrs.ProviderConfig\n}\n\nfunc (n *EvalInitProvider) Eval(ctx EvalContext) (interface{}, error) {\n\treturn ctx.InitProvider(n.TypeName, n.Addr)\n}\n\n// EvalCloseProvider is an EvalNode implementation that closes provider\n// connections that aren't needed anymore.\ntype EvalCloseProvider struct {\n\tAddr addrs.ProviderConfig\n}\n\nfunc (n *EvalCloseProvider) Eval(ctx EvalContext) (interface{}, error) {\n\tctx.CloseProvider(n.Addr)\n\treturn nil, nil\n}\n\n// EvalGetProvider is an EvalNode implementation that retrieves an already\n// initialized provider instance for the given name.\n//\n// Unlike most eval nodes, this takes an _absolute_ provider configuration,\n// because providers can be passed into and inherited between modules.\n// Resource nodes must therefore know the absolute path of the provider they\n// will use, which is usually accomplished by implementing\n// interface GraphNodeProviderConsumer.\ntype EvalGetProvider struct {\n\tAddr   addrs.AbsProviderConfig\n\tOutput *providers.Interface\n\n\t// If non-nil, Schema will be updated after eval to refer to the\n\t// schema of the provider.\n\tSchema **ProviderSchema\n}\n\nfunc (n *EvalGetProvider) Eval(ctx EvalContext) (interface{}, error) {\n\tif n.Addr.ProviderConfig.Type == \"\" {\n\t\t// Should never happen\n\t\tpanic(\"EvalGetProvider used with uninitialized provider configuration address\")\n\t}\n\n\tresult := ctx.Provider(n.Addr)\n\tif result == nil {\n\t\treturn nil, fmt.Errorf(\"provider %s not initialized\", n.Addr)\n\t}\n\n\tif n.Output != nil {\n\t\t*n.Output = result\n\t}\n\n\tif n.Schema != nil {\n\t\t*n.Schema = ctx.ProviderSchema(n.Addr)\n\t}\n\n\treturn nil, nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/eval_provisioner.go",
    "content": "package terraform\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/hashicorp/terraform/configs/configschema\"\n\t\"github.com/hashicorp/terraform/provisioners\"\n)\n\n// EvalInitProvisioner is an EvalNode implementation that initializes a provisioner\n// and returns nothing. The provisioner can be retrieved again with the\n// EvalGetProvisioner node.\ntype EvalInitProvisioner struct {\n\tName string\n}\n\nfunc (n *EvalInitProvisioner) Eval(ctx EvalContext) (interface{}, error) {\n\treturn ctx.InitProvisioner(n.Name)\n}\n\n// EvalCloseProvisioner is an EvalNode implementation that closes provisioner\n// connections that aren't needed anymore.\ntype EvalCloseProvisioner struct {\n\tName string\n}\n\nfunc (n *EvalCloseProvisioner) Eval(ctx EvalContext) (interface{}, error) {\n\tctx.CloseProvisioner(n.Name)\n\treturn nil, nil\n}\n\n// EvalGetProvisioner is an EvalNode implementation that retrieves an already\n// initialized provisioner instance for the given name.\ntype EvalGetProvisioner struct {\n\tName   string\n\tOutput *provisioners.Interface\n\tSchema **configschema.Block\n}\n\nfunc (n *EvalGetProvisioner) Eval(ctx EvalContext) (interface{}, error) {\n\tresult := ctx.Provisioner(n.Name)\n\tif result == nil {\n\t\treturn nil, fmt.Errorf(\"provisioner %s not initialized\", n.Name)\n\t}\n\n\tif n.Output != nil {\n\t\t*n.Output = result\n\t}\n\n\tif n.Schema != nil {\n\t\t*n.Schema = ctx.ProvisionerSchema(n.Name)\n\t}\n\n\treturn result, nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/eval_read_data.go",
    "content": "package terraform\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\n\t\"github.com/zclconf/go-cty/cty\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/configs\"\n\t\"github.com/hashicorp/terraform/plans\"\n\t\"github.com/hashicorp/terraform/plans/objchange\"\n\t\"github.com/hashicorp/terraform/providers\"\n\t\"github.com/hashicorp/terraform/states\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n)\n\n// EvalReadData is an EvalNode implementation that deals with the main part\n// of the data resource lifecycle: either actually reading from the data source\n// or generating a plan to do so.\ntype EvalReadData struct {\n\tAddr           addrs.ResourceInstance\n\tConfig         *configs.Resource\n\tDependencies   []addrs.Referenceable\n\tProvider       *providers.Interface\n\tProviderAddr   addrs.AbsProviderConfig\n\tProviderSchema **ProviderSchema\n\n\t// Planned is set when dealing with data resources that were deferred to\n\t// the apply walk, to let us see what was planned. If this is set, the\n\t// evaluation of the config is required to produce a wholly-known\n\t// configuration which is consistent with the partial object included\n\t// in this planned change.\n\tPlanned **plans.ResourceInstanceChange\n\n\t// ForcePlanRead, if true, overrides the usual behavior of immediately\n\t// reading from the data source where possible, instead forcing us to\n\t// _always_ generate a plan. This is used during the plan walk, since we\n\t// mustn't actually apply anything there. (The resulting state doesn't\n\t// get persisted)\n\tForcePlanRead bool\n\n\t// The result from this EvalNode has a few different possibilities\n\t// depending on the input:\n\t// - If Planned is nil then we assume we're aiming to _produce_ the plan,\n\t//   and so the following two outcomes are possible:\n\t//     - OutputChange.Action is plans.NoOp and OutputState is the complete\n\t//       result of reading from the data source. This is the easy path.\n\t//     - OutputChange.Action is plans.Read and OutputState is a planned\n\t//       object placeholder (states.ObjectPlanned). In this case, the\n\t//       returned change must be recorded in the overral changeset and\n\t//       eventually passed to another instance of this struct during the\n\t//       apply walk.\n\t// - If Planned is non-nil then we assume we're aiming to complete a\n\t//   planned read from an earlier plan walk. In this case the only possible\n\t//   non-error outcome is to set Output.Action (if non-nil) to a plans.NoOp\n\t//   change and put the complete resulting state in OutputState, ready to\n\t//   be saved in the overall state and used for expression evaluation.\n\tOutputChange      **plans.ResourceInstanceChange\n\tOutputValue       *cty.Value\n\tOutputConfigValue *cty.Value\n\tOutputState       **states.ResourceInstanceObject\n}\n\nfunc (n *EvalReadData) Eval(ctx EvalContext) (interface{}, error) {\n\tabsAddr := n.Addr.Absolute(ctx.Path())\n\tlog.Printf(\"[TRACE] EvalReadData: working on %s\", absAddr)\n\n\tif n.ProviderSchema == nil || *n.ProviderSchema == nil {\n\t\treturn nil, fmt.Errorf(\"provider schema not available for %s\", n.Addr)\n\t}\n\n\tvar diags tfdiags.Diagnostics\n\tvar change *plans.ResourceInstanceChange\n\tvar configVal cty.Value\n\n\t// TODO: Do we need to handle Delete changes here? EvalReadDataDiff and\n\t// EvalReadDataApply did, but it seems like we should handle that via a\n\t// separate mechanism since it boils down to just deleting the object from\n\t// the state... and we do that on every plan anyway, forcing the data\n\t// resource to re-read.\n\n\tconfig := *n.Config\n\tprovider := *n.Provider\n\tproviderSchema := *n.ProviderSchema\n\tschema, _ := providerSchema.SchemaForResourceAddr(n.Addr.ContainingResource())\n\tif schema == nil {\n\t\t// Should be caught during validation, so we don't bother with a pretty error here\n\t\treturn nil, fmt.Errorf(\"provider %q does not support data source %q\", n.ProviderAddr.ProviderConfig.Type, n.Addr.Resource.Type)\n\t}\n\n\t// We'll always start by evaluating the configuration. What we do after\n\t// that will depend on the evaluation result along with what other inputs\n\t// we were given.\n\tobjTy := schema.ImpliedType()\n\tpriorVal := cty.NullVal(objTy) // for data resources, prior is always null because we start fresh every time\n\n\tkeyData := EvalDataForInstanceKey(n.Addr.Key)\n\n\tvar configDiags tfdiags.Diagnostics\n\tconfigVal, _, configDiags = ctx.EvaluateBlock(config.Config, schema, nil, keyData)\n\tdiags = diags.Append(configDiags)\n\tif configDiags.HasErrors() {\n\t\treturn nil, diags.Err()\n\t}\n\n\tproposedNewVal := objchange.PlannedDataResourceObject(schema, configVal)\n\n\t// If our configuration contains any unknown values then we must defer the\n\t// read to the apply phase by producing a \"Read\" change for this resource,\n\t// and a placeholder value for it in the state.\n\tif n.ForcePlanRead || !configVal.IsWhollyKnown() {\n\t\t// If the configuration is still unknown when we're applying a planned\n\t\t// change then that indicates a bug in Terraform, since we should have\n\t\t// everything resolved by now.\n\t\tif n.Planned != nil && *n.Planned != nil {\n\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\"configuration for %s still contains unknown values during apply (this is a bug in Terraform; please report it!)\",\n\t\t\t\tabsAddr,\n\t\t\t)\n\t\t}\n\t\tif n.ForcePlanRead {\n\t\t\tlog.Printf(\"[TRACE] EvalReadData: %s configuration is fully known, but we're forcing a read plan to be created\", absAddr)\n\t\t} else {\n\t\t\tlog.Printf(\"[TRACE] EvalReadData: %s configuration not fully known yet, so deferring to apply phase\", absAddr)\n\t\t}\n\n\t\terr := ctx.Hook(func(h Hook) (HookAction, error) {\n\t\t\treturn h.PreDiff(absAddr, states.CurrentGen, priorVal, proposedNewVal)\n\t\t})\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tchange = &plans.ResourceInstanceChange{\n\t\t\tAddr:         absAddr,\n\t\t\tProviderAddr: n.ProviderAddr,\n\t\t\tChange: plans.Change{\n\t\t\t\tAction: plans.Read,\n\t\t\t\tBefore: priorVal,\n\t\t\t\tAfter:  proposedNewVal,\n\t\t\t},\n\t\t}\n\n\t\terr = ctx.Hook(func(h Hook) (HookAction, error) {\n\t\t\treturn h.PostDiff(absAddr, states.CurrentGen, change.Action, priorVal, proposedNewVal)\n\t\t})\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tif n.OutputChange != nil {\n\t\t\t*n.OutputChange = change\n\t\t}\n\t\tif n.OutputValue != nil {\n\t\t\t*n.OutputValue = change.After\n\t\t}\n\t\tif n.OutputConfigValue != nil {\n\t\t\t*n.OutputConfigValue = configVal\n\t\t}\n\t\tif n.OutputState != nil {\n\t\t\tstate := &states.ResourceInstanceObject{\n\t\t\t\tValue:        change.After,\n\t\t\t\tStatus:       states.ObjectPlanned, // because the partial value in the plan must be used for now\n\t\t\t\tDependencies: n.Dependencies,\n\t\t\t}\n\t\t\t*n.OutputState = state\n\t\t}\n\n\t\treturn nil, diags.ErrWithWarnings()\n\t}\n\n\tif n.Planned != nil && *n.Planned != nil && (*n.Planned).Action != plans.Read {\n\t\t// If any other action gets in here then that's always a bug; this\n\t\t// EvalNode only deals with reading.\n\t\treturn nil, fmt.Errorf(\n\t\t\t\"invalid action %s for %s: only Read is supported (this is a bug in Terraform; please report it!)\",\n\t\t\t(*n.Planned).Action, absAddr,\n\t\t)\n\t}\n\n\t// If we get down here then our configuration is complete and we're read\n\t// to actually call the provider to read the data.\n\tlog.Printf(\"[TRACE] EvalReadData: %s configuration is complete, so reading from provider\", absAddr)\n\n\terr := ctx.Hook(func(h Hook) (HookAction, error) {\n\t\t// We don't have a state yet, so we'll just give the hook an\n\t\t// empty one to work with.\n\t\treturn h.PreRefresh(absAddr, states.CurrentGen, cty.NullVal(cty.DynamicPseudoType))\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tresp := provider.ReadDataSource(providers.ReadDataSourceRequest{\n\t\tTypeName: n.Addr.Resource.Type,\n\t\tConfig:   configVal,\n\t})\n\tdiags = diags.Append(resp.Diagnostics.InConfigBody(n.Config.Config))\n\tif diags.HasErrors() {\n\t\treturn nil, diags.Err()\n\t}\n\tnewVal := resp.State\n\tif newVal == cty.NilVal {\n\t\t// This can happen with incompletely-configured mocks. We'll allow it\n\t\t// and treat it as an alias for a properly-typed null value.\n\t\tnewVal = cty.NullVal(schema.ImpliedType())\n\t}\n\n\tfor _, err := range newVal.Type().TestConformance(schema.ImpliedType()) {\n\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\ttfdiags.Error,\n\t\t\t\"Provider produced invalid object\",\n\t\t\tfmt.Sprintf(\n\t\t\t\t\"Provider %q produced an invalid value for %s.\\n\\nThis is a bug in the provider, which should be reported in the provider's own issue tracker.\",\n\t\t\t\tn.ProviderAddr.ProviderConfig.Type, tfdiags.FormatErrorPrefixed(err, absAddr.String()),\n\t\t\t),\n\t\t))\n\t}\n\tif diags.HasErrors() {\n\t\treturn nil, diags.Err()\n\t}\n\n\tif newVal.IsNull() {\n\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\ttfdiags.Error,\n\t\t\t\"Provider produced null object\",\n\t\t\tfmt.Sprintf(\n\t\t\t\t\"Provider %q produced a null value for %s.\\n\\nThis is a bug in the provider, which should be reported in the provider's own issue tracker.\",\n\t\t\t\tn.ProviderAddr.ProviderConfig.Type, absAddr,\n\t\t\t),\n\t\t))\n\t}\n\tif !newVal.IsWhollyKnown() {\n\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\ttfdiags.Error,\n\t\t\t\"Provider produced invalid object\",\n\t\t\tfmt.Sprintf(\n\t\t\t\t\"Provider %q produced a value for %s that is not wholly known.\\n\\nThis is a bug in the provider, which should be reported in the provider's own issue tracker.\",\n\t\t\t\tn.ProviderAddr.ProviderConfig.Type, absAddr,\n\t\t\t),\n\t\t))\n\n\t\t// We'll still save the object, but we need to eliminate any unknown\n\t\t// values first because we can't serialize them in the state file.\n\t\t// Note that this may cause set elements to be coalesced if they\n\t\t// differed only by having unknown values, but we don't worry about\n\t\t// that here because we're saving the value only for inspection\n\t\t// purposes; the error we added above will halt the graph walk.\n\t\tnewVal = cty.UnknownAsNull(newVal)\n\t}\n\n\t// Since we've completed the read, we actually have no change to make, but\n\t// we'll produce a NoOp one anyway to preserve the usual flow of the\n\t// plan phase and allow it to produce a complete plan.\n\tchange = &plans.ResourceInstanceChange{\n\t\tAddr:         absAddr,\n\t\tProviderAddr: n.ProviderAddr,\n\t\tChange: plans.Change{\n\t\t\tAction: plans.NoOp,\n\t\t\tBefore: newVal,\n\t\t\tAfter:  newVal,\n\t\t},\n\t}\n\tstate := &states.ResourceInstanceObject{\n\t\tValue:        change.After,\n\t\tStatus:       states.ObjectReady, // because we completed the read from the provider\n\t\tDependencies: n.Dependencies,\n\t}\n\n\terr = ctx.Hook(func(h Hook) (HookAction, error) {\n\t\treturn h.PostRefresh(absAddr, states.CurrentGen, change.Before, newVal)\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif n.OutputChange != nil {\n\t\t*n.OutputChange = change\n\t}\n\tif n.OutputValue != nil {\n\t\t*n.OutputValue = change.After\n\t}\n\tif n.OutputConfigValue != nil {\n\t\t*n.OutputConfigValue = configVal\n\t}\n\tif n.OutputState != nil {\n\t\t*n.OutputState = state\n\t}\n\n\treturn nil, diags.ErrWithWarnings()\n}\n\n// EvalReadDataApply is an EvalNode implementation that executes a data\n// resource's ReadDataApply method to read data from the data source.\ntype EvalReadDataApply struct {\n\tAddr            addrs.ResourceInstance\n\tProvider        *providers.Interface\n\tProviderAddr    addrs.AbsProviderConfig\n\tProviderSchema  **ProviderSchema\n\tOutput          **states.ResourceInstanceObject\n\tConfig          *configs.Resource\n\tChange          **plans.ResourceInstanceChange\n\tStateReferences []addrs.Referenceable\n}\n\nfunc (n *EvalReadDataApply) Eval(ctx EvalContext) (interface{}, error) {\n\tprovider := *n.Provider\n\tchange := *n.Change\n\tproviderSchema := *n.ProviderSchema\n\tabsAddr := n.Addr.Absolute(ctx.Path())\n\n\tvar diags tfdiags.Diagnostics\n\n\t// If the diff is for *destroying* this resource then we'll\n\t// just drop its state and move on, since data resources don't\n\t// support an actual \"destroy\" action.\n\tif change != nil && change.Action == plans.Delete {\n\t\tif n.Output != nil {\n\t\t\t*n.Output = nil\n\t\t}\n\t\treturn nil, nil\n\t}\n\n\t// For the purpose of external hooks we present a data apply as a\n\t// \"Refresh\" rather than an \"Apply\" because creating a data source\n\t// is presented to users/callers as a \"read\" operation.\n\terr := ctx.Hook(func(h Hook) (HookAction, error) {\n\t\t// We don't have a state yet, so we'll just give the hook an\n\t\t// empty one to work with.\n\t\treturn h.PreRefresh(absAddr, states.CurrentGen, cty.NullVal(cty.DynamicPseudoType))\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tresp := provider.ReadDataSource(providers.ReadDataSourceRequest{\n\t\tTypeName: n.Addr.Resource.Type,\n\t\tConfig:   change.After,\n\t})\n\tdiags = diags.Append(resp.Diagnostics.InConfigBody(n.Config.Config))\n\tif diags.HasErrors() {\n\t\treturn nil, diags.Err()\n\t}\n\n\tschema, _ := providerSchema.SchemaForResourceAddr(n.Addr.ContainingResource())\n\tif schema == nil {\n\t\t// Should be caught during validation, so we don't bother with a pretty error here\n\t\treturn nil, fmt.Errorf(\"provider does not support data source %q\", n.Addr.Resource.Type)\n\t}\n\n\tnewVal := resp.State\n\tfor _, err := range newVal.Type().TestConformance(schema.ImpliedType()) {\n\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\ttfdiags.Error,\n\t\t\t\"Provider produced invalid object\",\n\t\t\tfmt.Sprintf(\n\t\t\t\t\"Provider %q planned an invalid value for %s. The result could not be saved.\\n\\nThis is a bug in the provider, which should be reported in the provider's own issue tracker.\",\n\t\t\t\tn.ProviderAddr.ProviderConfig.Type, tfdiags.FormatErrorPrefixed(err, absAddr.String()),\n\t\t\t),\n\t\t))\n\t}\n\tif diags.HasErrors() {\n\t\treturn nil, diags.Err()\n\t}\n\n\terr = ctx.Hook(func(h Hook) (HookAction, error) {\n\t\treturn h.PostRefresh(absAddr, states.CurrentGen, change.Before, newVal)\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif n.Output != nil {\n\t\t*n.Output = &states.ResourceInstanceObject{\n\t\t\tValue:        newVal,\n\t\t\tStatus:       states.ObjectReady,\n\t\t\tDependencies: n.StateReferences,\n\t\t}\n\t}\n\n\treturn nil, diags.ErrWithWarnings()\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/eval_refresh.go",
    "content": "package terraform\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\n\t\"github.com/zclconf/go-cty/cty\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/providers\"\n\t\"github.com/hashicorp/terraform/states\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n)\n\n// EvalRefresh is an EvalNode implementation that does a refresh for\n// a resource.\ntype EvalRefresh struct {\n\tAddr           addrs.ResourceInstance\n\tProviderAddr   addrs.AbsProviderConfig\n\tProvider       *providers.Interface\n\tProviderSchema **ProviderSchema\n\tState          **states.ResourceInstanceObject\n\tOutput         **states.ResourceInstanceObject\n}\n\n// TODO: test\nfunc (n *EvalRefresh) Eval(ctx EvalContext) (interface{}, error) {\n\tstate := *n.State\n\tabsAddr := n.Addr.Absolute(ctx.Path())\n\n\tvar diags tfdiags.Diagnostics\n\n\t// If we have no state, we don't do any refreshing\n\tif state == nil {\n\t\tlog.Printf(\"[DEBUG] refresh: %s: no state, so not refreshing\", n.Addr.Absolute(ctx.Path()))\n\t\treturn nil, diags.ErrWithWarnings()\n\t}\n\n\tschema, _ := (*n.ProviderSchema).SchemaForResourceAddr(n.Addr.ContainingResource())\n\tif schema == nil {\n\t\t// Should be caught during validation, so we don't bother with a pretty error here\n\t\treturn nil, fmt.Errorf(\"provider does not support resource type %q\", n.Addr.Resource.Type)\n\t}\n\n\t// Call pre-refresh hook\n\terr := ctx.Hook(func(h Hook) (HookAction, error) {\n\t\treturn h.PreRefresh(absAddr, states.CurrentGen, state.Value)\n\t})\n\tif err != nil {\n\t\treturn nil, diags.ErrWithWarnings()\n\t}\n\n\t// Refresh!\n\tpriorVal := state.Value\n\treq := providers.ReadResourceRequest{\n\t\tTypeName:   n.Addr.Resource.Type,\n\t\tPriorState: priorVal,\n\t}\n\n\tprovider := *n.Provider\n\tresp := provider.ReadResource(req)\n\tdiags = diags.Append(resp.Diagnostics)\n\tif diags.HasErrors() {\n\t\treturn nil, diags.Err()\n\t}\n\n\tif resp.NewState == cty.NilVal {\n\t\t// This ought not to happen in real cases since it's not possible to\n\t\t// send NilVal over the plugin RPC channel, but it can come up in\n\t\t// tests due to sloppy mocking.\n\t\tpanic(\"new state is cty.NilVal\")\n\t}\n\n\tfor _, err := range resp.NewState.Type().TestConformance(schema.ImpliedType()) {\n\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\ttfdiags.Error,\n\t\t\t\"Provider produced invalid object\",\n\t\t\tfmt.Sprintf(\n\t\t\t\t\"Provider %q planned an invalid value for %s during refresh: %s.\\n\\nThis is a bug in the provider, which should be reported in the provider's own issue tracker.\",\n\t\t\t\tn.ProviderAddr.ProviderConfig.Type, absAddr, tfdiags.FormatError(err),\n\t\t\t),\n\t\t))\n\t}\n\tif diags.HasErrors() {\n\t\treturn nil, diags.Err()\n\t}\n\n\tnewState := state.DeepCopy()\n\tnewState.Value = resp.NewState\n\n\t// Call post-refresh hook\n\terr = ctx.Hook(func(h Hook) (HookAction, error) {\n\t\treturn h.PostRefresh(absAddr, states.CurrentGen, priorVal, newState.Value)\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif n.Output != nil {\n\t\t*n.Output = newState\n\t}\n\n\treturn nil, diags.ErrWithWarnings()\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/eval_sequence.go",
    "content": "package terraform\n\nimport (\n\t\"github.com/hashicorp/terraform/tfdiags\"\n)\n\n// EvalSequence is an EvalNode that evaluates in sequence.\ntype EvalSequence struct {\n\tNodes []EvalNode\n}\n\nfunc (n *EvalSequence) Eval(ctx EvalContext) (interface{}, error) {\n\tvar diags tfdiags.Diagnostics\n\n\tfor _, n := range n.Nodes {\n\t\tif n == nil {\n\t\t\tcontinue\n\t\t}\n\n\t\tif _, err := EvalRaw(n, ctx); err != nil {\n\t\t\tif _, isEarlyExit := err.(EvalEarlyExitError); isEarlyExit {\n\t\t\t\t// In this path we abort early, losing any non-error\n\t\t\t\t// diagnostics we saw earlier.\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tdiags = diags.Append(err)\n\t\t\tif diags.HasErrors() {\n\t\t\t\t// Halt if we get some errors, but warnings are okay.\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\n\treturn nil, diags.ErrWithWarnings()\n}\n\n// EvalNodeFilterable impl.\nfunc (n *EvalSequence) Filter(fn EvalNodeFilterFunc) {\n\tfor i, node := range n.Nodes {\n\t\tn.Nodes[i] = fn(node)\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/eval_state.go",
    "content": "package terraform\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/configs\"\n\t\"github.com/hashicorp/terraform/providers\"\n\t\"github.com/hashicorp/terraform/states\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n)\n\n// EvalReadState is an EvalNode implementation that reads the\n// current object for a specific instance in the state.\ntype EvalReadState struct {\n\t// Addr is the address of the instance to read state for.\n\tAddr addrs.ResourceInstance\n\n\t// ProviderSchema is the schema for the provider given in Provider.\n\tProviderSchema **ProviderSchema\n\n\t// Provider is the provider that will subsequently perform actions on\n\t// the the state object. This is used to perform any schema upgrades\n\t// that might be required to prepare the stored data for use.\n\tProvider *providers.Interface\n\n\t// Output will be written with a pointer to the retrieved object.\n\tOutput **states.ResourceInstanceObject\n}\n\nfunc (n *EvalReadState) Eval(ctx EvalContext) (interface{}, error) {\n\tif n.Provider == nil || *n.Provider == nil {\n\t\tpanic(\"EvalReadState used with no Provider object\")\n\t}\n\tif n.ProviderSchema == nil || *n.ProviderSchema == nil {\n\t\tpanic(\"EvalReadState used with no ProviderSchema object\")\n\t}\n\n\tabsAddr := n.Addr.Absolute(ctx.Path())\n\tlog.Printf(\"[TRACE] EvalReadState: reading state for %s\", absAddr)\n\n\tsrc := ctx.State().ResourceInstanceObject(absAddr, states.CurrentGen)\n\tif src == nil {\n\t\t// Presumably we only have deposed objects, then.\n\t\tlog.Printf(\"[TRACE] EvalReadState: no state present for %s\", absAddr)\n\t\treturn nil, nil\n\t}\n\n\tschema, currentVersion := (*n.ProviderSchema).SchemaForResourceAddr(n.Addr.ContainingResource())\n\tif schema == nil {\n\t\t// Shouldn't happen since we should've failed long ago if no schema is present\n\t\treturn nil, fmt.Errorf(\"no schema available for %s while reading state; this is a bug in Terraform and should be reported\", absAddr)\n\t}\n\tvar diags tfdiags.Diagnostics\n\tsrc, diags = UpgradeResourceState(absAddr, *n.Provider, src, schema, currentVersion)\n\tif diags.HasErrors() {\n\t\t// Note that we don't have any channel to return warnings here. We'll\n\t\t// accept that for now since warnings during a schema upgrade would\n\t\t// be pretty weird anyway, since this operation is supposed to seem\n\t\t// invisible to the user.\n\t\treturn nil, diags.Err()\n\t}\n\n\tobj, err := src.Decode(schema.ImpliedType())\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif n.Output != nil {\n\t\t*n.Output = obj\n\t}\n\treturn obj, nil\n}\n\n// EvalReadStateDeposed is an EvalNode implementation that reads the\n// deposed InstanceState for a specific resource out of the state\ntype EvalReadStateDeposed struct {\n\t// Addr is the address of the instance to read state for.\n\tAddr addrs.ResourceInstance\n\n\t// Key identifies which deposed object we will read.\n\tKey states.DeposedKey\n\n\t// ProviderSchema is the schema for the provider given in Provider.\n\tProviderSchema **ProviderSchema\n\n\t// Provider is the provider that will subsequently perform actions on\n\t// the the state object. This is used to perform any schema upgrades\n\t// that might be required to prepare the stored data for use.\n\tProvider *providers.Interface\n\n\t// Output will be written with a pointer to the retrieved object.\n\tOutput **states.ResourceInstanceObject\n}\n\nfunc (n *EvalReadStateDeposed) Eval(ctx EvalContext) (interface{}, error) {\n\tif n.Provider == nil || *n.Provider == nil {\n\t\tpanic(\"EvalReadStateDeposed used with no Provider object\")\n\t}\n\tif n.ProviderSchema == nil || *n.ProviderSchema == nil {\n\t\tpanic(\"EvalReadStateDeposed used with no ProviderSchema object\")\n\t}\n\n\tkey := n.Key\n\tif key == states.NotDeposed {\n\t\treturn nil, fmt.Errorf(\"EvalReadStateDeposed used with no instance key; this is a bug in Terraform and should be reported\")\n\t}\n\tabsAddr := n.Addr.Absolute(ctx.Path())\n\tlog.Printf(\"[TRACE] EvalReadStateDeposed: reading state for %s deposed object %s\", absAddr, n.Key)\n\n\tsrc := ctx.State().ResourceInstanceObject(absAddr, key)\n\tif src == nil {\n\t\t// Presumably we only have deposed objects, then.\n\t\tlog.Printf(\"[TRACE] EvalReadStateDeposed: no state present for %s deposed object %s\", absAddr, n.Key)\n\t\treturn nil, nil\n\t}\n\n\tschema, currentVersion := (*n.ProviderSchema).SchemaForResourceAddr(n.Addr.ContainingResource())\n\tif schema == nil {\n\t\t// Shouldn't happen since we should've failed long ago if no schema is present\n\t\treturn nil, fmt.Errorf(\"no schema available for %s while reading state; this is a bug in Terraform and should be reported\", absAddr)\n\t}\n\tvar diags tfdiags.Diagnostics\n\tsrc, diags = UpgradeResourceState(absAddr, *n.Provider, src, schema, currentVersion)\n\tif diags.HasErrors() {\n\t\t// Note that we don't have any channel to return warnings here. We'll\n\t\t// accept that for now since warnings during a schema upgrade would\n\t\t// be pretty weird anyway, since this operation is supposed to seem\n\t\t// invisible to the user.\n\t\treturn nil, diags.Err()\n\t}\n\n\tobj, err := src.Decode(schema.ImpliedType())\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif n.Output != nil {\n\t\t*n.Output = obj\n\t}\n\treturn obj, nil\n}\n\n// EvalRequireState is an EvalNode implementation that exits early if the given\n// object is null.\ntype EvalRequireState struct {\n\tState **states.ResourceInstanceObject\n}\n\nfunc (n *EvalRequireState) Eval(ctx EvalContext) (interface{}, error) {\n\tif n.State == nil {\n\t\treturn nil, EvalEarlyExitError{}\n\t}\n\n\tstate := *n.State\n\tif state == nil || state.Value.IsNull() {\n\t\treturn nil, EvalEarlyExitError{}\n\t}\n\n\treturn nil, nil\n}\n\n// EvalUpdateStateHook is an EvalNode implementation that calls the\n// PostStateUpdate hook with the current state.\ntype EvalUpdateStateHook struct{}\n\nfunc (n *EvalUpdateStateHook) Eval(ctx EvalContext) (interface{}, error) {\n\t// In principle we could grab the lock here just long enough to take a\n\t// deep copy and then pass that to our hooks below, but we'll instead\n\t// hold the hook for the duration to avoid the potential confusing\n\t// situation of us racing to call PostStateUpdate concurrently with\n\t// different state snapshots.\n\tstateSync := ctx.State()\n\tstate := stateSync.Lock().DeepCopy()\n\tdefer stateSync.Unlock()\n\n\t// Call the hook\n\terr := ctx.Hook(func(h Hook) (HookAction, error) {\n\t\treturn h.PostStateUpdate(state)\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn nil, nil\n}\n\n// EvalWriteState is an EvalNode implementation that saves the given object\n// as the current object for the selected resource instance.\ntype EvalWriteState struct {\n\t// Addr is the address of the instance to read state for.\n\tAddr addrs.ResourceInstance\n\n\t// State is the object state to save.\n\tState **states.ResourceInstanceObject\n\n\t// ProviderSchema is the schema for the provider given in ProviderAddr.\n\tProviderSchema **ProviderSchema\n\n\t// ProviderAddr is the address of the provider configuration that\n\t// produced the given object.\n\tProviderAddr addrs.AbsProviderConfig\n}\n\nfunc (n *EvalWriteState) Eval(ctx EvalContext) (interface{}, error) {\n\tif n.State == nil {\n\t\t// Note that a pointer _to_ nil is valid here, indicating the total\n\t\t// absense of an object as we'd see during destroy.\n\t\tpanic(\"EvalWriteState used with no ResourceInstanceObject\")\n\t}\n\n\tabsAddr := n.Addr.Absolute(ctx.Path())\n\tstate := ctx.State()\n\n\tif n.ProviderAddr.ProviderConfig.Type == \"\" {\n\t\treturn nil, fmt.Errorf(\"failed to write state for %s, missing provider type\", absAddr)\n\t}\n\n\tobj := *n.State\n\tif obj == nil || obj.Value.IsNull() {\n\t\t// No need to encode anything: we'll just write it directly.\n\t\tstate.SetResourceInstanceCurrent(absAddr, nil, n.ProviderAddr)\n\t\tlog.Printf(\"[TRACE] EvalWriteState: removing state object for %s\", absAddr)\n\t\treturn nil, nil\n\t}\n\tif n.ProviderSchema == nil || *n.ProviderSchema == nil {\n\t\t// Should never happen, unless our state object is nil\n\t\tpanic(\"EvalWriteState used with pointer to nil ProviderSchema object\")\n\t}\n\n\tif obj != nil {\n\t\tlog.Printf(\"[TRACE] EvalWriteState: writing current state object for %s\", absAddr)\n\t} else {\n\t\tlog.Printf(\"[TRACE] EvalWriteState: removing current state object for %s\", absAddr)\n\t}\n\n\tschema, currentVersion := (*n.ProviderSchema).SchemaForResourceAddr(n.Addr.ContainingResource())\n\tif schema == nil {\n\t\t// It shouldn't be possible to get this far in any real scenario\n\t\t// without a schema, but we might end up here in contrived tests that\n\t\t// fail to set up their world properly.\n\t\treturn nil, fmt.Errorf(\"failed to encode %s in state: no resource type schema available\", absAddr)\n\t}\n\tsrc, err := obj.Encode(schema.ImpliedType(), currentVersion)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to encode %s in state: %s\", absAddr, err)\n\t}\n\n\tstate.SetResourceInstanceCurrent(absAddr, src, n.ProviderAddr)\n\treturn nil, nil\n}\n\n// EvalWriteStateDeposed is an EvalNode implementation that writes\n// an InstanceState out to the Deposed list of a resource in the state.\ntype EvalWriteStateDeposed struct {\n\t// Addr is the address of the instance to read state for.\n\tAddr addrs.ResourceInstance\n\n\t// Key indicates which deposed object to write to.\n\tKey states.DeposedKey\n\n\t// State is the object state to save.\n\tState **states.ResourceInstanceObject\n\n\t// ProviderSchema is the schema for the provider given in ProviderAddr.\n\tProviderSchema **ProviderSchema\n\n\t// ProviderAddr is the address of the provider configuration that\n\t// produced the given object.\n\tProviderAddr addrs.AbsProviderConfig\n}\n\nfunc (n *EvalWriteStateDeposed) Eval(ctx EvalContext) (interface{}, error) {\n\tif n.State == nil {\n\t\t// Note that a pointer _to_ nil is valid here, indicating the total\n\t\t// absense of an object as we'd see during destroy.\n\t\tpanic(\"EvalWriteStateDeposed used with no ResourceInstanceObject\")\n\t}\n\n\tabsAddr := n.Addr.Absolute(ctx.Path())\n\tkey := n.Key\n\tstate := ctx.State()\n\n\tif key == states.NotDeposed {\n\t\t// should never happen\n\t\treturn nil, fmt.Errorf(\"can't save deposed object for %s without a deposed key; this is a bug in Terraform that should be reported\", absAddr)\n\t}\n\n\tobj := *n.State\n\tif obj == nil {\n\t\t// No need to encode anything: we'll just write it directly.\n\t\tstate.SetResourceInstanceDeposed(absAddr, key, nil, n.ProviderAddr)\n\t\tlog.Printf(\"[TRACE] EvalWriteStateDeposed: removing state object for %s deposed %s\", absAddr, key)\n\t\treturn nil, nil\n\t}\n\tif n.ProviderSchema == nil || *n.ProviderSchema == nil {\n\t\t// Should never happen, unless our state object is nil\n\t\tpanic(\"EvalWriteStateDeposed used with no ProviderSchema object\")\n\t}\n\n\tschema, currentVersion := (*n.ProviderSchema).SchemaForResourceAddr(n.Addr.ContainingResource())\n\tif schema == nil {\n\t\t// It shouldn't be possible to get this far in any real scenario\n\t\t// without a schema, but we might end up here in contrived tests that\n\t\t// fail to set up their world properly.\n\t\treturn nil, fmt.Errorf(\"failed to encode %s in state: no resource type schema available\", absAddr)\n\t}\n\tsrc, err := obj.Encode(schema.ImpliedType(), currentVersion)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to encode %s in state: %s\", absAddr, err)\n\t}\n\n\tlog.Printf(\"[TRACE] EvalWriteStateDeposed: writing state object for %s deposed %s\", absAddr, key)\n\tstate.SetResourceInstanceDeposed(absAddr, key, src, n.ProviderAddr)\n\treturn nil, nil\n}\n\n// EvalDeposeState is an EvalNode implementation that moves the current object\n// for the given instance to instead be a deposed object, leaving the instance\n// with no current object.\n// This is used at the beginning of a create-before-destroy replace action so\n// that the create can create while preserving the old state of the\n// to-be-destroyed object.\ntype EvalDeposeState struct {\n\tAddr addrs.ResourceInstance\n\n\t// ForceKey, if a value other than states.NotDeposed, will be used as the\n\t// key for the newly-created deposed object that results from this action.\n\t// If set to states.NotDeposed (the zero value), a new unique key will be\n\t// allocated.\n\tForceKey states.DeposedKey\n\n\t// OutputKey, if non-nil, will be written with the deposed object key that\n\t// was generated for the object. This can then be passed to\n\t// EvalUndeposeState.Key so it knows which deposed instance to forget.\n\tOutputKey *states.DeposedKey\n}\n\n// TODO: test\nfunc (n *EvalDeposeState) Eval(ctx EvalContext) (interface{}, error) {\n\tabsAddr := n.Addr.Absolute(ctx.Path())\n\tstate := ctx.State()\n\n\tvar key states.DeposedKey\n\tif n.ForceKey == states.NotDeposed {\n\t\tkey = state.DeposeResourceInstanceObject(absAddr)\n\t} else {\n\t\tkey = n.ForceKey\n\t\tstate.DeposeResourceInstanceObjectForceKey(absAddr, key)\n\t}\n\tlog.Printf(\"[TRACE] EvalDeposeState: prior object for %s now deposed with key %s\", absAddr, key)\n\n\tif n.OutputKey != nil {\n\t\t*n.OutputKey = key\n\t}\n\n\treturn nil, nil\n}\n\n// EvalMaybeRestoreDeposedObject is an EvalNode implementation that will\n// restore a particular deposed object of the specified resource instance\n// to be the \"current\" object if and only if the instance doesn't currently\n// have a current object.\n//\n// This is intended for use when the create leg of a create before destroy\n// fails with no partial new object: if we didn't take any action, the user\n// would be left in the unfortunate situation of having no current object\n// and the previously-workign object now deposed. This EvalNode causes a\n// better outcome by restoring things to how they were before the replace\n// operation began.\n//\n// The create operation may have produced a partial result even though it\n// failed and it's important that we don't \"forget\" that state, so in that\n// situation the prior object remains deposed and the partial new object\n// remains the current object, allowing the situation to hopefully be\n// improved in a subsequent run.\ntype EvalMaybeRestoreDeposedObject struct {\n\tAddr addrs.ResourceInstance\n\n\t// Key is a pointer to the deposed object key that should be forgotten\n\t// from the state, which must be non-nil.\n\tKey *states.DeposedKey\n}\n\n// TODO: test\nfunc (n *EvalMaybeRestoreDeposedObject) Eval(ctx EvalContext) (interface{}, error) {\n\tabsAddr := n.Addr.Absolute(ctx.Path())\n\tdk := *n.Key\n\tstate := ctx.State()\n\n\trestored := state.MaybeRestoreResourceInstanceDeposed(absAddr, dk)\n\tif restored {\n\t\tlog.Printf(\"[TRACE] EvalMaybeRestoreDeposedObject: %s deposed object %s was restored as the current object\", absAddr, dk)\n\t} else {\n\t\tlog.Printf(\"[TRACE] EvalMaybeRestoreDeposedObject: %s deposed object %s remains deposed\", absAddr, dk)\n\t}\n\n\treturn nil, nil\n}\n\n// EvalWriteResourceState is an EvalNode implementation that ensures that\n// a suitable resource-level state record is present in the state, if that's\n// required for the \"each mode\" of that resource.\n//\n// This is important primarily for the situation where count = 0, since this\n// eval is the only change we get to set the resource \"each mode\" to list\n// in that case, allowing expression evaluation to see it as a zero-element\n// list rather than as not set at all.\ntype EvalWriteResourceState struct {\n\tAddr         addrs.Resource\n\tConfig       *configs.Resource\n\tProviderAddr addrs.AbsProviderConfig\n}\n\n// TODO: test\nfunc (n *EvalWriteResourceState) Eval(ctx EvalContext) (interface{}, error) {\n\tvar diags tfdiags.Diagnostics\n\tabsAddr := n.Addr.Absolute(ctx.Path())\n\tstate := ctx.State()\n\n\tcount, countDiags := evaluateResourceCountExpression(n.Config.Count, ctx)\n\tdiags = diags.Append(countDiags)\n\tif countDiags.HasErrors() {\n\t\treturn nil, diags.Err()\n\t}\n\n\t// Currently we ony support NoEach and EachList, because for_each support\n\t// is not fully wired up across Terraform. Once for_each support is added,\n\t// we'll need to handle that here too, setting states.EachMap if the\n\t// assigned expression is a map.\n\teachMode := states.NoEach\n\tif count >= 0 { // -1 signals \"count not set\"\n\t\teachMode = states.EachList\n\t}\n\n\t// This method takes care of all of the business logic of updating this\n\t// while ensuring that any existing instances are preserved, etc.\n\tstate.SetResourceMeta(absAddr, eachMode, n.ProviderAddr)\n\n\treturn nil, nil\n}\n\n// EvalForgetResourceState is an EvalNode implementation that prunes out an\n// empty resource-level state for a given resource address, or produces an\n// error if it isn't empty after all.\n//\n// This should be the last action taken for a resource that has been removed\n// from the configuration altogether, to clean up the leftover husk of the\n// resource in the state after other EvalNodes have destroyed and removed\n// all of the instances and instance objects beneath it.\ntype EvalForgetResourceState struct {\n\tAddr addrs.Resource\n}\n\nfunc (n *EvalForgetResourceState) Eval(ctx EvalContext) (interface{}, error) {\n\tabsAddr := n.Addr.Absolute(ctx.Path())\n\tstate := ctx.State()\n\n\tpruned := state.RemoveResourceIfEmpty(absAddr)\n\tif !pruned {\n\t\t// If this produces an error, it indicates a bug elsewhere in Terraform\n\t\t// -- probably missing graph nodes, graph edges, or\n\t\t// incorrectly-implemented evaluation steps.\n\t\treturn nil, fmt.Errorf(\"orphan resource %s still has a non-empty state after apply; this is a bug in Terraform\", absAddr)\n\t}\n\tlog.Printf(\"[TRACE] EvalForgetResourceState: Pruned husk of %s from state\", absAddr)\n\n\treturn nil, nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/eval_state_upgrade.go",
    "content": "package terraform\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/configs/configschema\"\n\t\"github.com/hashicorp/terraform/providers\"\n\t\"github.com/hashicorp/terraform/states\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n)\n\n// UpgradeResourceState will, if necessary, run the provider-defined upgrade\n// logic against the given state object to make it compliant with the\n// current schema version. This is a no-op if the given state object is\n// already at the latest version.\n//\n// If any errors occur during upgrade, error diagnostics are returned. In that\n// case it is not safe to proceed with using the original state object.\nfunc UpgradeResourceState(addr addrs.AbsResourceInstance, provider providers.Interface, src *states.ResourceInstanceObjectSrc, currentSchema *configschema.Block, currentVersion uint64) (*states.ResourceInstanceObjectSrc, tfdiags.Diagnostics) {\n\tif addr.Resource.Resource.Mode != addrs.ManagedResourceMode {\n\t\t// We only do state upgrading for managed resources.\n\t\treturn src, nil\n\t}\n\n\tstateIsFlatmap := len(src.AttrsJSON) == 0\n\n\tproviderType := addr.Resource.Resource.DefaultProviderConfig().Type\n\tif src.SchemaVersion > currentVersion {\n\t\tlog.Printf(\"[TRACE] UpgradeResourceState: can't downgrade state for %s from version %d to %d\", addr, src.SchemaVersion, currentVersion)\n\t\tvar diags tfdiags.Diagnostics\n\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\ttfdiags.Error,\n\t\t\t\"Resource instance managed by newer provider version\",\n\t\t\t// This is not a very good error message, but we don't retain enough\n\t\t\t// information in state to give good feedback on what provider\n\t\t\t// version might be required here. :(\n\t\t\tfmt.Sprintf(\"The current state of %s was created by a newer provider version than is currently selected. Upgrade the %s provider to work with this state.\", addr, providerType),\n\t\t))\n\t\treturn nil, diags\n\t}\n\n\t// If we get down here then we need to upgrade the state, with the\n\t// provider's help.\n\t// If this state was originally created by a version of Terraform prior to\n\t// v0.12, this also includes translating from legacy flatmap to new-style\n\t// representation, since only the provider has enough information to\n\t// understand a flatmap built against an older schema.\n\tif src.SchemaVersion != currentVersion {\n\t\tlog.Printf(\"[TRACE] UpgradeResourceState: upgrading state for %s from version %d to %d using provider %q\", addr, src.SchemaVersion, currentVersion, providerType)\n\t} else {\n\t\tlog.Printf(\"[TRACE] UpgradeResourceState: schema version of %s is still %d; calling provider %q for any other minor fixups\", addr, currentVersion, providerType)\n\t}\n\n\treq := providers.UpgradeResourceStateRequest{\n\t\tTypeName: addr.Resource.Resource.Type,\n\n\t\t// TODO: The internal schema version representations are all using\n\t\t// uint64 instead of int64, but unsigned integers aren't friendly\n\t\t// to all protobuf target languages so in practice we use int64\n\t\t// on the wire. In future we will change all of our internal\n\t\t// representations to int64 too.\n\t\tVersion: int64(src.SchemaVersion),\n\t}\n\n\tif stateIsFlatmap {\n\t\treq.RawStateFlatmap = src.AttrsFlat\n\t} else {\n\t\treq.RawStateJSON = src.AttrsJSON\n\t}\n\n\tresp := provider.UpgradeResourceState(req)\n\tdiags := resp.Diagnostics\n\tif diags.HasErrors() {\n\t\treturn nil, diags\n\t}\n\n\t// After upgrading, the new value must conform to the current schema. When\n\t// going over RPC this is actually already ensured by the\n\t// marshaling/unmarshaling of the new value, but we'll check it here\n\t// anyway for robustness, e.g. for in-process providers.\n\tnewValue := resp.UpgradedState\n\tif errs := newValue.Type().TestConformance(currentSchema.ImpliedType()); len(errs) > 0 {\n\t\tfor _, err := range errs {\n\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\ttfdiags.Error,\n\t\t\t\t\"Invalid resource state upgrade\",\n\t\t\t\tfmt.Sprintf(\"The %s provider upgraded the state for %s from a previous version, but produced an invalid result: %s.\", providerType, addr, tfdiags.FormatError(err)),\n\t\t\t))\n\t\t}\n\t\treturn nil, diags\n\t}\n\n\tnew, err := src.CompleteUpgrade(newValue, currentSchema.ImpliedType(), uint64(currentVersion))\n\tif err != nil {\n\t\t// We already checked for type conformance above, so getting into this\n\t\t// codepath should be rare and is probably a bug somewhere under CompleteUpgrade.\n\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\ttfdiags.Error,\n\t\t\t\"Failed to encode result of resource state upgrade\",\n\t\t\tfmt.Sprintf(\"Failed to encode state for %s after resource schema upgrade: %s.\", addr, tfdiags.FormatError(err)),\n\t\t))\n\t}\n\treturn new, diags\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/eval_validate.go",
    "content": "package terraform\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/configs\"\n\t\"github.com/hashicorp/terraform/configs/configschema\"\n\t\"github.com/hashicorp/terraform/providers\"\n\t\"github.com/hashicorp/terraform/provisioners\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n\t\"github.com/zclconf/go-cty/cty\"\n\t\"github.com/zclconf/go-cty/cty/convert\"\n\t\"github.com/zclconf/go-cty/cty/gocty\"\n)\n\n// EvalValidateCount is an EvalNode implementation that validates\n// the count of a resource.\ntype EvalValidateCount struct {\n\tResource *configs.Resource\n}\n\n// TODO: test\nfunc (n *EvalValidateCount) Eval(ctx EvalContext) (interface{}, error) {\n\tvar diags tfdiags.Diagnostics\n\tvar count int\n\tvar err error\n\n\tval, valDiags := ctx.EvaluateExpr(n.Resource.Count, cty.Number, nil)\n\tdiags = diags.Append(valDiags)\n\tif valDiags.HasErrors() {\n\t\tgoto RETURN\n\t}\n\tif val.IsNull() || !val.IsKnown() {\n\t\tgoto RETURN\n\t}\n\n\terr = gocty.FromCtyValue(val, &count)\n\tif err != nil {\n\t\t// The EvaluateExpr call above already guaranteed us a number value,\n\t\t// so if we end up here then we have something that is out of range\n\t\t// for an int, and the error message will include a description of\n\t\t// the valid range.\n\t\trawVal := val.AsBigFloat()\n\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Invalid count value\",\n\t\t\tDetail:   fmt.Sprintf(\"The number %s is not a valid count value: %s.\", rawVal, err),\n\t\t\tSubject:  n.Resource.Count.Range().Ptr(),\n\t\t})\n\t} else if count < 0 {\n\t\trawVal := val.AsBigFloat()\n\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Invalid count value\",\n\t\t\tDetail:   fmt.Sprintf(\"The number %s is not a valid count value: count must not be negative.\", rawVal),\n\t\t\tSubject:  n.Resource.Count.Range().Ptr(),\n\t\t})\n\t}\n\nRETURN:\n\treturn nil, diags.NonFatalErr()\n}\n\n// EvalValidateProvider is an EvalNode implementation that validates\n// a provider configuration.\ntype EvalValidateProvider struct {\n\tAddr     addrs.ProviderConfig\n\tProvider *providers.Interface\n\tConfig   *configs.Provider\n}\n\nfunc (n *EvalValidateProvider) Eval(ctx EvalContext) (interface{}, error) {\n\tvar diags tfdiags.Diagnostics\n\tprovider := *n.Provider\n\n\tconfigBody := buildProviderConfig(ctx, n.Addr, n.Config)\n\n\tresp := provider.GetSchema()\n\tdiags = diags.Append(resp.Diagnostics)\n\tif diags.HasErrors() {\n\t\treturn nil, diags.NonFatalErr()\n\t}\n\n\tconfigSchema := resp.Provider.Block\n\tif configSchema == nil {\n\t\t// Should never happen in real code, but often comes up in tests where\n\t\t// mock schemas are being used that tend to be incomplete.\n\t\tlog.Printf(\"[WARN] EvalValidateProvider: no config schema is available for %s, so using empty schema\", n.Addr)\n\t\tconfigSchema = &configschema.Block{}\n\t}\n\n\tconfigVal, configBody, evalDiags := ctx.EvaluateBlock(configBody, configSchema, nil, EvalDataForNoInstanceKey)\n\tdiags = diags.Append(evalDiags)\n\tif evalDiags.HasErrors() {\n\t\treturn nil, diags.NonFatalErr()\n\t}\n\n\treq := providers.PrepareProviderConfigRequest{\n\t\tConfig: configVal,\n\t}\n\n\tvalidateResp := provider.PrepareProviderConfig(req)\n\tdiags = diags.Append(validateResp.Diagnostics)\n\n\treturn nil, diags.NonFatalErr()\n}\n\n// EvalValidateProvisioner is an EvalNode implementation that validates\n// the configuration of a provisioner belonging to a resource. The provisioner\n// config is expected to contain the merged connection configurations.\ntype EvalValidateProvisioner struct {\n\tResourceAddr     addrs.Resource\n\tProvisioner      *provisioners.Interface\n\tSchema           **configschema.Block\n\tConfig           *configs.Provisioner\n\tResourceHasCount bool\n}\n\nfunc (n *EvalValidateProvisioner) Eval(ctx EvalContext) (interface{}, error) {\n\tprovisioner := *n.Provisioner\n\tconfig := *n.Config\n\tschema := *n.Schema\n\n\tvar diags tfdiags.Diagnostics\n\n\t{\n\t\t// Validate the provisioner's own config first\n\n\t\tconfigVal, _, configDiags := n.evaluateBlock(ctx, config.Config, schema)\n\t\tdiags = diags.Append(configDiags)\n\t\tif configDiags.HasErrors() {\n\t\t\treturn nil, diags.Err()\n\t\t}\n\n\t\tif configVal == cty.NilVal {\n\t\t\t// Should never happen for a well-behaved EvaluateBlock implementation\n\t\t\treturn nil, fmt.Errorf(\"EvaluateBlock returned nil value\")\n\t\t}\n\n\t\treq := provisioners.ValidateProvisionerConfigRequest{\n\t\t\tConfig: configVal,\n\t\t}\n\n\t\tresp := provisioner.ValidateProvisionerConfig(req)\n\t\tdiags = diags.Append(resp.Diagnostics)\n\t}\n\n\t{\n\t\t// Now validate the connection config, which contains the merged bodies\n\t\t// of the resource and provisioner connection blocks.\n\t\tconnDiags := n.validateConnConfig(ctx, config.Connection, n.ResourceAddr)\n\t\tdiags = diags.Append(connDiags)\n\t}\n\n\treturn nil, diags.NonFatalErr()\n}\n\nfunc (n *EvalValidateProvisioner) validateConnConfig(ctx EvalContext, config *configs.Connection, self addrs.Referenceable) tfdiags.Diagnostics {\n\t// We can't comprehensively validate the connection config since its\n\t// final structure is decided by the communicator and we can't instantiate\n\t// that until we have a complete instance state. However, we *can* catch\n\t// configuration keys that are not valid for *any* communicator, catching\n\t// typos early rather than waiting until we actually try to run one of\n\t// the resource's provisioners.\n\n\tvar diags tfdiags.Diagnostics\n\n\tif config == nil || config.Config == nil {\n\t\t// No block to validate\n\t\treturn diags\n\t}\n\n\t// We evaluate here just by evaluating the block and returning any\n\t// diagnostics we get, since evaluation alone is enough to check for\n\t// extraneous arguments and incorrectly-typed arguments.\n\t_, _, configDiags := n.evaluateBlock(ctx, config.Config, connectionBlockSupersetSchema)\n\tdiags = diags.Append(configDiags)\n\n\treturn diags\n}\n\nfunc (n *EvalValidateProvisioner) evaluateBlock(ctx EvalContext, body hcl.Body, schema *configschema.Block) (cty.Value, hcl.Body, tfdiags.Diagnostics) {\n\tkeyData := EvalDataForNoInstanceKey\n\tselfAddr := n.ResourceAddr.Instance(addrs.NoKey)\n\n\tif n.ResourceHasCount {\n\t\t// For a resource that has count, we allow count.index but don't\n\t\t// know at this stage what it will return.\n\t\tkeyData = InstanceKeyEvalData{\n\t\t\tCountIndex: cty.UnknownVal(cty.Number),\n\t\t}\n\n\t\t// \"self\" can't point to an unknown key, but we'll force it to be\n\t\t// key 0 here, which should return an unknown value of the\n\t\t// expected type since none of these elements are known at this\n\t\t// point anyway.\n\t\tselfAddr = n.ResourceAddr.Instance(addrs.IntKey(0))\n\t}\n\n\treturn ctx.EvaluateBlock(body, schema, selfAddr, keyData)\n}\n\n// connectionBlockSupersetSchema is a schema representing the superset of all\n// possible arguments for \"connection\" blocks across all supported connection\n// types.\n//\n// This currently lives here because we've not yet updated our communicator\n// subsystem to be aware of schema itself. Once that is done, we can remove\n// this and use a type-specific schema from the communicator to validate\n// exactly what is expected for a given connection type.\nvar connectionBlockSupersetSchema = &configschema.Block{\n\tAttributes: map[string]*configschema.Attribute{\n\t\t// NOTE: \"type\" is not included here because it's treated special\n\t\t// by the config loader and stored away in a separate field.\n\n\t\t// Common attributes for both connection types\n\t\t\"host\": {\n\t\t\tType:     cty.String,\n\t\t\tRequired: true,\n\t\t},\n\t\t\"type\": {\n\t\t\tType:     cty.String,\n\t\t\tOptional: true,\n\t\t},\n\t\t\"user\": {\n\t\t\tType:     cty.String,\n\t\t\tOptional: true,\n\t\t},\n\t\t\"password\": {\n\t\t\tType:     cty.String,\n\t\t\tOptional: true,\n\t\t},\n\t\t\"port\": {\n\t\t\tType:     cty.String,\n\t\t\tOptional: true,\n\t\t},\n\t\t\"timeout\": {\n\t\t\tType:     cty.String,\n\t\t\tOptional: true,\n\t\t},\n\t\t\"script_path\": {\n\t\t\tType:     cty.String,\n\t\t\tOptional: true,\n\t\t},\n\n\t\t// For type=ssh only (enforced in ssh communicator)\n\t\t\"private_key\": {\n\t\t\tType:     cty.String,\n\t\t\tOptional: true,\n\t\t},\n\t\t\"certificate\": {\n\t\t\tType:     cty.String,\n\t\t\tOptional: true,\n\t\t},\n\t\t\"host_key\": {\n\t\t\tType:     cty.String,\n\t\t\tOptional: true,\n\t\t},\n\t\t\"agent\": {\n\t\t\tType:     cty.Bool,\n\t\t\tOptional: true,\n\t\t},\n\t\t\"agent_identity\": {\n\t\t\tType:     cty.String,\n\t\t\tOptional: true,\n\t\t},\n\t\t\"bastion_host\": {\n\t\t\tType:     cty.String,\n\t\t\tOptional: true,\n\t\t},\n\t\t\"bastion_host_key\": {\n\t\t\tType:     cty.String,\n\t\t\tOptional: true,\n\t\t},\n\t\t\"bastion_port\": {\n\t\t\tType:     cty.Number,\n\t\t\tOptional: true,\n\t\t},\n\t\t\"bastion_user\": {\n\t\t\tType:     cty.String,\n\t\t\tOptional: true,\n\t\t},\n\t\t\"bastion_password\": {\n\t\t\tType:     cty.String,\n\t\t\tOptional: true,\n\t\t},\n\t\t\"bastion_private_key\": {\n\t\t\tType:     cty.String,\n\t\t\tOptional: true,\n\t\t},\n\n\t\t// For type=winrm only (enforced in winrm communicator)\n\t\t\"https\": {\n\t\t\tType:     cty.Bool,\n\t\t\tOptional: true,\n\t\t},\n\t\t\"insecure\": {\n\t\t\tType:     cty.Bool,\n\t\t\tOptional: true,\n\t\t},\n\t\t\"cacert\": {\n\t\t\tType:     cty.String,\n\t\t\tOptional: true,\n\t\t},\n\t\t\"use_ntlm\": {\n\t\t\tType:     cty.Bool,\n\t\t\tOptional: true,\n\t\t},\n\t},\n}\n\n// connectionBlockSupersetSchema is a schema representing the superset of all\n// possible arguments for \"connection\" blocks across all supported connection\n// types.\n//\n// This currently lives here because we've not yet updated our communicator\n// subsystem to be aware of schema itself. It's exported only for use in the\n// configs/configupgrade package and should not be used from anywhere else.\n// The caller may not modify any part of the returned schema data structure.\nfunc ConnectionBlockSupersetSchema() *configschema.Block {\n\treturn connectionBlockSupersetSchema\n}\n\n// EvalValidateResource is an EvalNode implementation that validates\n// the configuration of a resource.\ntype EvalValidateResource struct {\n\tAddr           addrs.Resource\n\tProvider       *providers.Interface\n\tProviderSchema **ProviderSchema\n\tConfig         *configs.Resource\n\n\t// IgnoreWarnings means that warnings will not be passed through. This allows\n\t// \"just-in-time\" passes of validation to continue execution through warnings.\n\tIgnoreWarnings bool\n\n\t// ConfigVal, if non-nil, will be updated with the value resulting from\n\t// evaluating the given configuration body. Since validation is performed\n\t// very early, this value is likely to contain lots of unknown values,\n\t// but its type will conform to the schema of the resource type associated\n\t// with the resource instance being validated.\n\tConfigVal *cty.Value\n}\n\nfunc (n *EvalValidateResource) Eval(ctx EvalContext) (interface{}, error) {\n\tif n.ProviderSchema == nil || *n.ProviderSchema == nil {\n\t\treturn nil, fmt.Errorf(\"EvalValidateResource has nil schema for %s\", n.Addr)\n\t}\n\n\tvar diags tfdiags.Diagnostics\n\tprovider := *n.Provider\n\tcfg := *n.Config\n\tschema := *n.ProviderSchema\n\tmode := cfg.Mode\n\n\tkeyData := EvalDataForNoInstanceKey\n\tif n.Config.Count != nil {\n\t\t// If the config block has count, we'll evaluate with an unknown\n\t\t// number as count.index so we can still type check even though\n\t\t// we won't expand count until the plan phase.\n\t\tkeyData = InstanceKeyEvalData{\n\t\t\tCountIndex: cty.UnknownVal(cty.Number),\n\t\t}\n\n\t\t// Basic type-checking of the count argument. More complete validation\n\t\t// of this will happen when we DynamicExpand during the plan walk.\n\t\tcountDiags := n.validateCount(ctx, n.Config.Count)\n\t\tdiags = diags.Append(countDiags)\n\t}\n\n\tfor _, traversal := range n.Config.DependsOn {\n\t\tref, refDiags := addrs.ParseRef(traversal)\n\t\tdiags = diags.Append(refDiags)\n\t\tif len(ref.Remaining) != 0 {\n\t\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Invalid depends_on reference\",\n\t\t\t\tDetail:   \"References in depends_on must be to a whole object (resource, etc), not to an attribute of an object.\",\n\t\t\t\tSubject:  ref.Remaining.SourceRange().Ptr(),\n\t\t\t})\n\t\t}\n\n\t\t// The ref must also refer to something that exists. To test that,\n\t\t// we'll just eval it and count on the fact that our evaluator will\n\t\t// detect references to non-existent objects.\n\t\tif !diags.HasErrors() {\n\t\t\tscope := ctx.EvaluationScope(nil, EvalDataForNoInstanceKey)\n\t\t\tif scope != nil { // sometimes nil in tests, due to incomplete mocks\n\t\t\t\t_, refDiags = scope.EvalReference(ref, cty.DynamicPseudoType)\n\t\t\t\tdiags = diags.Append(refDiags)\n\t\t\t}\n\t\t}\n\t}\n\n\t// Provider entry point varies depending on resource mode, because\n\t// managed resources and data resources are two distinct concepts\n\t// in the provider abstraction.\n\tswitch mode {\n\tcase addrs.ManagedResourceMode:\n\t\tschema, _ := schema.SchemaForResourceType(mode, cfg.Type)\n\t\tif schema == nil {\n\t\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Invalid resource type\",\n\t\t\t\tDetail:   fmt.Sprintf(\"The provider %s does not support resource type %q.\", cfg.ProviderConfigAddr(), cfg.Type),\n\t\t\t\tSubject:  &cfg.TypeRange,\n\t\t\t})\n\t\t\treturn nil, diags.Err()\n\t\t}\n\n\t\tconfigVal, _, valDiags := ctx.EvaluateBlock(cfg.Config, schema, nil, keyData)\n\t\tdiags = diags.Append(valDiags)\n\t\tif valDiags.HasErrors() {\n\t\t\treturn nil, diags.Err()\n\t\t}\n\n\t\tif cfg.Managed != nil { // can be nil only in tests with poorly-configured mocks\n\t\t\tfor _, traversal := range cfg.Managed.IgnoreChanges {\n\t\t\t\tmoreDiags := schema.StaticValidateTraversal(traversal)\n\t\t\t\tdiags = diags.Append(moreDiags)\n\t\t\t}\n\t\t}\n\n\t\treq := providers.ValidateResourceTypeConfigRequest{\n\t\t\tTypeName: cfg.Type,\n\t\t\tConfig:   configVal,\n\t\t}\n\n\t\tresp := provider.ValidateResourceTypeConfig(req)\n\t\tdiags = diags.Append(resp.Diagnostics.InConfigBody(cfg.Config))\n\n\t\tif n.ConfigVal != nil {\n\t\t\t*n.ConfigVal = configVal\n\t\t}\n\n\tcase addrs.DataResourceMode:\n\t\tschema, _ := schema.SchemaForResourceType(mode, cfg.Type)\n\t\tif schema == nil {\n\t\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Invalid data source\",\n\t\t\t\tDetail:   fmt.Sprintf(\"The provider %s does not support data source %q.\", cfg.ProviderConfigAddr(), cfg.Type),\n\t\t\t\tSubject:  &cfg.TypeRange,\n\t\t\t})\n\t\t\treturn nil, diags.Err()\n\t\t}\n\n\t\tconfigVal, _, valDiags := ctx.EvaluateBlock(cfg.Config, schema, nil, keyData)\n\t\tdiags = diags.Append(valDiags)\n\t\tif valDiags.HasErrors() {\n\t\t\treturn nil, diags.Err()\n\t\t}\n\n\t\treq := providers.ValidateDataSourceConfigRequest{\n\t\t\tTypeName: cfg.Type,\n\t\t\tConfig:   configVal,\n\t\t}\n\n\t\tresp := provider.ValidateDataSourceConfig(req)\n\t\tdiags = diags.Append(resp.Diagnostics.InConfigBody(cfg.Config))\n\t}\n\n\tif n.IgnoreWarnings {\n\t\t// If we _only_ have warnings then we'll return nil.\n\t\tif diags.HasErrors() {\n\t\t\treturn nil, diags.NonFatalErr()\n\t\t}\n\t\treturn nil, nil\n\t} else {\n\t\t// We'll return an error if there are any diagnostics at all, even if\n\t\t// some of them are warnings.\n\t\treturn nil, diags.NonFatalErr()\n\t}\n}\n\nfunc (n *EvalValidateResource) validateCount(ctx EvalContext, expr hcl.Expression) tfdiags.Diagnostics {\n\tif expr == nil {\n\t\treturn nil\n\t}\n\n\tvar diags tfdiags.Diagnostics\n\n\tcountVal, countDiags := ctx.EvaluateExpr(expr, cty.Number, nil)\n\tdiags = diags.Append(countDiags)\n\tif diags.HasErrors() {\n\t\treturn diags\n\t}\n\n\tif countVal.IsNull() {\n\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Invalid count argument\",\n\t\t\tDetail:   `The given \"count\" argument value is null. An integer is required.`,\n\t\t\tSubject:  expr.Range().Ptr(),\n\t\t})\n\t\treturn diags\n\t}\n\n\tvar err error\n\tcountVal, err = convert.Convert(countVal, cty.Number)\n\tif err != nil {\n\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Invalid count argument\",\n\t\t\tDetail:   fmt.Sprintf(`The given \"count\" argument value is unsuitable: %s.`, err),\n\t\t\tSubject:  expr.Range().Ptr(),\n\t\t})\n\t\treturn diags\n\t}\n\n\t// If the value isn't known then that's the best we can do for now, but\n\t// we'll check more thoroughly during the plan walk.\n\tif !countVal.IsKnown() {\n\t\treturn diags\n\t}\n\n\t// If we _do_ know the value, then we can do a few more checks here.\n\tvar count int\n\terr = gocty.FromCtyValue(countVal, &count)\n\tif err != nil {\n\t\t// Isn't a whole number, etc.\n\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Invalid count argument\",\n\t\t\tDetail:   fmt.Sprintf(`The given \"count\" argument value is unsuitable: %s.`, err),\n\t\t\tSubject:  expr.Range().Ptr(),\n\t\t})\n\t\treturn diags\n\t}\n\n\tif count < 0 {\n\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Invalid count argument\",\n\t\t\tDetail:   `The given \"count\" argument value is unsuitable: count cannot be negative.`,\n\t\t\tSubject:  expr.Range().Ptr(),\n\t\t})\n\t\treturn diags\n\t}\n\n\treturn diags\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/eval_validate_selfref.go",
    "content": "package terraform\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/hashicorp/hcl2/hcl\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/configs/configschema\"\n\t\"github.com/hashicorp/terraform/lang\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n)\n\n// EvalValidateSelfRef is an EvalNode implementation that checks to ensure that\n// expressions within a particular referencable block do not reference that\n// same block.\ntype EvalValidateSelfRef struct {\n\tAddr           addrs.Referenceable\n\tConfig         hcl.Body\n\tProviderSchema **ProviderSchema\n}\n\nfunc (n *EvalValidateSelfRef) Eval(ctx EvalContext) (interface{}, error) {\n\tvar diags tfdiags.Diagnostics\n\taddr := n.Addr\n\n\taddrStrs := make([]string, 0, 1)\n\taddrStrs = append(addrStrs, addr.String())\n\tswitch tAddr := addr.(type) {\n\tcase addrs.ResourceInstance:\n\t\t// A resource instance may not refer to its containing resource either.\n\t\taddrStrs = append(addrStrs, tAddr.ContainingResource().String())\n\t}\n\n\tif n.ProviderSchema == nil || *n.ProviderSchema == nil {\n\t\treturn nil, fmt.Errorf(\"provider schema unavailable while validating %s for self-references; this is a bug in Terraform and should be reported\", addr)\n\t}\n\n\tproviderSchema := *n.ProviderSchema\n\tvar schema *configschema.Block\n\tswitch tAddr := addr.(type) {\n\tcase addrs.Resource:\n\t\tschema, _ = providerSchema.SchemaForResourceAddr(tAddr)\n\tcase addrs.ResourceInstance:\n\t\tschema, _ = providerSchema.SchemaForResourceAddr(tAddr.ContainingResource())\n\t}\n\n\tif schema == nil {\n\t\treturn nil, fmt.Errorf(\"no schema available for %s to validate for self-references; this is a bug in Terraform and should be reported\", addr)\n\t}\n\n\trefs, _ := lang.ReferencesInBlock(n.Config, schema)\n\tfor _, ref := range refs {\n\t\tfor _, addrStr := range addrStrs {\n\t\t\tif ref.Subject.String() == addrStr {\n\t\t\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\tSummary:  \"Self-referential block\",\n\t\t\t\t\tDetail:   fmt.Sprintf(\"Configuration for %s may not refer to itself.\", addrStr),\n\t\t\t\t\tSubject:  ref.SourceRange.ToHCL().Ptr(),\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t}\n\n\treturn nil, diags.NonFatalErr()\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/eval_variable.go",
    "content": "package terraform\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"reflect\"\n\t\"strings\"\n\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/hashicorp/terraform/configs\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\n\t\"github.com/hashicorp/terraform/config\"\n\t\"github.com/hashicorp/terraform/config/module\"\n\t\"github.com/zclconf/go-cty/cty\"\n\t\"github.com/zclconf/go-cty/cty/convert\"\n)\n\n// EvalTypeCheckVariable is an EvalNode which ensures that the variable\n// values which are assigned as inputs to a module (including the root)\n// match the types which are either declared for the variables explicitly\n// or inferred from the default values.\n//\n// In order to achieve this three things are required:\n//     - a map of the proposed variable values\n//     - the configuration tree of the module in which the variable is\n//       declared\n//     - the path to the module (so we know which part of the tree to\n//       compare the values against).\ntype EvalTypeCheckVariable struct {\n\tVariables  map[string]interface{}\n\tModulePath []string\n\tModuleTree *module.Tree\n}\n\nfunc (n *EvalTypeCheckVariable) Eval(ctx EvalContext) (interface{}, error) {\n\tcurrentTree := n.ModuleTree\n\tfor _, pathComponent := range n.ModulePath[1:] {\n\t\tcurrentTree = currentTree.Children()[pathComponent]\n\t}\n\ttargetConfig := currentTree.Config()\n\n\tprototypes := make(map[string]config.VariableType)\n\tfor _, variable := range targetConfig.Variables {\n\t\tprototypes[variable.Name] = variable.Type()\n\t}\n\n\t// Only display a module in an error message if we are not in the root module\n\tmodulePathDescription := fmt.Sprintf(\" in module %s\", strings.Join(n.ModulePath[1:], \".\"))\n\tif len(n.ModulePath) == 1 {\n\t\tmodulePathDescription = \"\"\n\t}\n\n\tfor name, declaredType := range prototypes {\n\t\tproposedValue, ok := n.Variables[name]\n\t\tif !ok {\n\t\t\t// This means the default value should be used as no overriding value\n\t\t\t// has been set. Therefore we should continue as no check is necessary.\n\t\t\tcontinue\n\t\t}\n\n\t\tif proposedValue == config.UnknownVariableValue {\n\t\t\tcontinue\n\t\t}\n\n\t\tswitch declaredType {\n\t\tcase config.VariableTypeString:\n\t\t\tswitch proposedValue.(type) {\n\t\t\tcase string:\n\t\t\t\tcontinue\n\t\t\tdefault:\n\t\t\t\treturn nil, fmt.Errorf(\"variable %s%s should be type %s, got %s\",\n\t\t\t\t\tname, modulePathDescription, declaredType.Printable(), hclTypeName(proposedValue))\n\t\t\t}\n\t\tcase config.VariableTypeMap:\n\t\t\tswitch proposedValue.(type) {\n\t\t\tcase map[string]interface{}:\n\t\t\t\tcontinue\n\t\t\tdefault:\n\t\t\t\treturn nil, fmt.Errorf(\"variable %s%s should be type %s, got %s\",\n\t\t\t\t\tname, modulePathDescription, declaredType.Printable(), hclTypeName(proposedValue))\n\t\t\t}\n\t\tcase config.VariableTypeList:\n\t\t\tswitch proposedValue.(type) {\n\t\t\tcase []interface{}:\n\t\t\t\tcontinue\n\t\t\tdefault:\n\t\t\t\treturn nil, fmt.Errorf(\"variable %s%s should be type %s, got %s\",\n\t\t\t\t\tname, modulePathDescription, declaredType.Printable(), hclTypeName(proposedValue))\n\t\t\t}\n\t\tdefault:\n\t\t\treturn nil, fmt.Errorf(\"variable %s%s should be type %s, got type string\",\n\t\t\t\tname, modulePathDescription, declaredType.Printable())\n\t\t}\n\t}\n\n\treturn nil, nil\n}\n\n// EvalSetModuleCallArguments is an EvalNode implementation that sets values\n// for arguments of a child module call, for later retrieval during\n// expression evaluation.\ntype EvalSetModuleCallArguments struct {\n\tModule addrs.ModuleCallInstance\n\tValues map[string]cty.Value\n}\n\n// TODO: test\nfunc (n *EvalSetModuleCallArguments) Eval(ctx EvalContext) (interface{}, error) {\n\tctx.SetModuleCallArguments(n.Module, n.Values)\n\treturn nil, nil\n}\n\n// EvalModuleCallArgument is an EvalNode implementation that produces the value\n// for a particular variable as will be used by a child module instance.\n//\n// The result is written into the map given in Values, with its key\n// set to the local name of the variable, disregarding the module instance\n// address. Any existing values in that map are deleted first. This weird\n// interface is a result of trying to be convenient for use with\n// EvalContext.SetModuleCallArguments, which expects a map to merge in with\n// any existing arguments.\ntype EvalModuleCallArgument struct {\n\tAddr   addrs.InputVariable\n\tConfig *configs.Variable\n\tExpr   hcl.Expression\n\n\t// If this flag is set, any diagnostics are discarded and this operation\n\t// will always succeed, though may produce an unknown value in the\n\t// event of an error.\n\tIgnoreDiagnostics bool\n\n\tValues map[string]cty.Value\n}\n\nfunc (n *EvalModuleCallArgument) Eval(ctx EvalContext) (interface{}, error) {\n\t// Clear out the existing mapping\n\tfor k := range n.Values {\n\t\tdelete(n.Values, k)\n\t}\n\n\twantType := n.Config.Type\n\tname := n.Addr.Name\n\texpr := n.Expr\n\n\tif expr == nil {\n\t\t// Should never happen, but we'll bail out early here rather than\n\t\t// crash in case it does. We set no value at all in this case,\n\t\t// making a subsequent call to EvalContext.SetModuleCallArguments\n\t\t// a no-op.\n\t\tlog.Printf(\"[ERROR] attempt to evaluate %s with nil expression\", n.Addr.String())\n\t\treturn nil, nil\n\t}\n\n\tval, diags := ctx.EvaluateExpr(expr, cty.DynamicPseudoType, nil)\n\n\t// We intentionally passed DynamicPseudoType to EvaluateExpr above because\n\t// now we can do our own local type conversion and produce an error message\n\t// with better context if it fails.\n\tvar convErr error\n\tval, convErr = convert.Convert(val, wantType)\n\tif convErr != nil {\n\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Invalid value for module argument\",\n\t\t\tDetail: fmt.Sprintf(\n\t\t\t\t\"The given value is not suitable for child module variable %q defined at %s: %s.\",\n\t\t\t\tname, n.Config.DeclRange.String(), convErr,\n\t\t\t),\n\t\t\tSubject: expr.Range().Ptr(),\n\t\t})\n\t\t// We'll return a placeholder unknown value to avoid producing\n\t\t// redundant downstream errors.\n\t\tval = cty.UnknownVal(wantType)\n\t}\n\n\tn.Values[name] = val\n\tif n.IgnoreDiagnostics {\n\t\treturn nil, nil\n\t}\n\treturn nil, diags.ErrWithWarnings()\n}\n\n// hclTypeName returns the name of the type that would represent this value in\n// a config file, or falls back to the Go type name if there's no corresponding\n// HCL type. This is used for formatted output, not for comparing types.\nfunc hclTypeName(i interface{}) string {\n\tswitch k := reflect.Indirect(reflect.ValueOf(i)).Kind(); k {\n\tcase reflect.Bool:\n\t\treturn \"boolean\"\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64,\n\t\treflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32,\n\t\treflect.Uint64, reflect.Uintptr, reflect.Float32, reflect.Float64:\n\t\treturn \"number\"\n\tcase reflect.Array, reflect.Slice:\n\t\treturn \"list\"\n\tcase reflect.Map:\n\t\treturn \"map\"\n\tcase reflect.String:\n\t\treturn \"string\"\n\tdefault:\n\t\t// fall back to the Go type if there's no match\n\t\treturn k.String()\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/evaltree_provider.go",
    "content": "package terraform\n\nimport (\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/configs\"\n\t\"github.com/hashicorp/terraform/providers\"\n)\n\n// ProviderEvalTree returns the evaluation tree for initializing and\n// configuring providers.\nfunc ProviderEvalTree(n *NodeApplyableProvider, config *configs.Provider) EvalNode {\n\tvar provider providers.Interface\n\n\taddr := n.Addr\n\trelAddr := addr.ProviderConfig\n\n\tseq := make([]EvalNode, 0, 5)\n\tseq = append(seq, &EvalInitProvider{\n\t\tTypeName: relAddr.Type,\n\t\tAddr:     addr.ProviderConfig,\n\t})\n\n\t// Input stuff\n\tseq = append(seq, &EvalOpFilter{\n\t\tOps: []walkOperation{walkImport},\n\t\tNode: &EvalSequence{\n\t\t\tNodes: []EvalNode{\n\t\t\t\t&EvalGetProvider{\n\t\t\t\t\tAddr:   addr,\n\t\t\t\t\tOutput: &provider,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t})\n\n\tseq = append(seq, &EvalOpFilter{\n\t\tOps: []walkOperation{walkValidate},\n\t\tNode: &EvalSequence{\n\t\t\tNodes: []EvalNode{\n\t\t\t\t&EvalGetProvider{\n\t\t\t\t\tAddr:   addr,\n\t\t\t\t\tOutput: &provider,\n\t\t\t\t},\n\t\t\t\t&EvalValidateProvider{\n\t\t\t\t\tAddr:     relAddr,\n\t\t\t\t\tProvider: &provider,\n\t\t\t\t\tConfig:   config,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t})\n\n\t// Apply stuff\n\tseq = append(seq, &EvalOpFilter{\n\t\tOps: []walkOperation{walkRefresh, walkPlan, walkApply, walkDestroy, walkImport},\n\t\tNode: &EvalSequence{\n\t\t\tNodes: []EvalNode{\n\t\t\t\t&EvalGetProvider{\n\t\t\t\t\tAddr:   addr,\n\t\t\t\t\tOutput: &provider,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t})\n\n\t// We configure on everything but validate, since validate may\n\t// not have access to all the variables.\n\tseq = append(seq, &EvalOpFilter{\n\t\tOps: []walkOperation{walkRefresh, walkPlan, walkApply, walkDestroy, walkImport},\n\t\tNode: &EvalSequence{\n\t\t\tNodes: []EvalNode{\n\t\t\t\t&EvalConfigProvider{\n\t\t\t\t\tAddr:     relAddr,\n\t\t\t\t\tProvider: &provider,\n\t\t\t\t\tConfig:   config,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t})\n\n\treturn &EvalSequence{Nodes: seq}\n}\n\n// CloseProviderEvalTree returns the evaluation tree for closing\n// provider connections that aren't needed anymore.\nfunc CloseProviderEvalTree(addr addrs.AbsProviderConfig) EvalNode {\n\treturn &EvalCloseProvider{Addr: addr.ProviderConfig}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/evaluate.go",
    "content": "package terraform\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strconv\"\n\t\"sync\"\n\n\t\"github.com/agext/levenshtein\"\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/zclconf/go-cty/cty\"\n\t\"github.com/zclconf/go-cty/cty/convert\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/configs\"\n\t\"github.com/hashicorp/terraform/configs/configschema\"\n\t\"github.com/hashicorp/terraform/lang\"\n\t\"github.com/hashicorp/terraform/plans\"\n\t\"github.com/hashicorp/terraform/states\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n)\n\n// Evaluator provides the necessary contextual data for evaluating expressions\n// for a particular walk operation.\ntype Evaluator struct {\n\t// Operation defines what type of operation this evaluator is being used\n\t// for.\n\tOperation walkOperation\n\n\t// Meta is contextual metadata about the current operation.\n\tMeta *ContextMeta\n\n\t// Config is the root node in the configuration tree.\n\tConfig *configs.Config\n\n\t// VariableValues is a map from variable names to their associated values,\n\t// within the module indicated by ModulePath. VariableValues is modified\n\t// concurrently, and so it must be accessed only while holding\n\t// VariableValuesLock.\n\t//\n\t// The first map level is string representations of addr.ModuleInstance\n\t// values, while the second level is variable names.\n\tVariableValues     map[string]map[string]cty.Value\n\tVariableValuesLock *sync.Mutex\n\n\t// Schemas is a repository of all of the schemas we should need to\n\t// evaluate expressions. This must be constructed by the caller to\n\t// include schemas for all of the providers, resource types, data sources\n\t// and provisioners used by the given configuration and state.\n\t//\n\t// This must not be mutated during evaluation.\n\tSchemas *Schemas\n\n\t// State is the current state, embedded in a wrapper that ensures that\n\t// it can be safely accessed and modified concurrently.\n\tState *states.SyncState\n\n\t// Changes is the set of proposed changes, embedded in a wrapper that\n\t// ensures they can be safely accessed and modified concurrently.\n\tChanges *plans.ChangesSync\n}\n\n// Scope creates an evaluation scope for the given module path and optional\n// resource.\n//\n// If the \"self\" argument is nil then the \"self\" object is not available\n// in evaluated expressions. Otherwise, it behaves as an alias for the given\n// address.\nfunc (e *Evaluator) Scope(data lang.Data, self addrs.Referenceable) *lang.Scope {\n\treturn &lang.Scope{\n\t\tData:     data,\n\t\tSelfAddr: self,\n\t\tPureOnly: e.Operation != walkApply && e.Operation != walkDestroy,\n\t\tBaseDir:  \".\", // Always current working directory for now.\n\t}\n}\n\n// evaluationStateData is an implementation of lang.Data that resolves\n// references primarily (but not exclusively) using information from a State.\ntype evaluationStateData struct {\n\tEvaluator *Evaluator\n\n\t// ModulePath is the path through the dynamic module tree to the module\n\t// that references will be resolved relative to.\n\tModulePath addrs.ModuleInstance\n\n\t// InstanceKeyData describes the values, if any, that are accessible due\n\t// to repetition of a containing object using \"count\" or \"for_each\"\n\t// arguments. (It is _not_ used for the for_each inside \"dynamic\" blocks,\n\t// since the user specifies in that case which variable name to locally\n\t// shadow.)\n\tInstanceKeyData InstanceKeyEvalData\n\n\t// Operation records the type of walk the evaluationStateData is being used\n\t// for.\n\tOperation walkOperation\n}\n\n// InstanceKeyEvalData is used during evaluation to specify which values,\n// if any, should be produced for count.index, each.key, and each.value.\ntype InstanceKeyEvalData struct {\n\t// CountIndex is the value for count.index, or cty.NilVal if evaluating\n\t// in a context where the \"count\" argument is not active.\n\t//\n\t// For correct operation, this should always be of type cty.Number if not\n\t// nil.\n\tCountIndex cty.Value\n\n\t// EachKey and EachValue are the values for each.key and each.value\n\t// respectively, or cty.NilVal if evaluating in a context where the\n\t// \"for_each\" argument is not active. These must either both be set\n\t// or neither set.\n\t//\n\t// For correct operation, EachKey must always be either of type cty.String\n\t// or cty.Number if not nil.\n\tEachKey, EachValue cty.Value\n}\n\n// EvalDataForInstanceKey constructs a suitable InstanceKeyEvalData for\n// evaluating in a context that has the given instance key.\nfunc EvalDataForInstanceKey(key addrs.InstanceKey) InstanceKeyEvalData {\n\t// At the moment we don't actually implement for_each, so we only\n\t// ever populate CountIndex.\n\t// (When we implement for_each later we may need to reorganize this some,\n\t// so that we can resolve the ambiguity that an int key may either be\n\t// a count.index or an each.key where for_each is over a list.)\n\n\tvar countIdx cty.Value\n\tif intKey, ok := key.(addrs.IntKey); ok {\n\t\tcountIdx = cty.NumberIntVal(int64(intKey))\n\t}\n\n\treturn InstanceKeyEvalData{\n\t\tCountIndex: countIdx,\n\t}\n}\n\n// EvalDataForNoInstanceKey is a value of InstanceKeyData that sets no instance\n// key values at all, suitable for use in contexts where no keyed instance\n// is relevant.\nvar EvalDataForNoInstanceKey = InstanceKeyEvalData{}\n\n// evaluationStateData must implement lang.Data\nvar _ lang.Data = (*evaluationStateData)(nil)\n\nfunc (d *evaluationStateData) GetCountAttr(addr addrs.CountAttr, rng tfdiags.SourceRange) (cty.Value, tfdiags.Diagnostics) {\n\tvar diags tfdiags.Diagnostics\n\tswitch addr.Name {\n\n\tcase \"index\":\n\t\tidxVal := d.InstanceKeyData.CountIndex\n\t\tif idxVal == cty.NilVal {\n\t\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  `Reference to \"count\" in non-counted context`,\n\t\t\t\tDetail:   fmt.Sprintf(`The \"count\" object can be used only in \"resource\" and \"data\" blocks, and only when the \"count\" argument is set.`),\n\t\t\t\tSubject:  rng.ToHCL().Ptr(),\n\t\t\t})\n\t\t\treturn cty.UnknownVal(cty.Number), diags\n\t\t}\n\t\treturn idxVal, diags\n\n\tdefault:\n\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  `Invalid \"count\" attribute`,\n\t\t\tDetail:   fmt.Sprintf(`The \"count\" object does not have an attribute named %q. The only supported attribute is count.index, which is the index of each instance of a resource block that has the \"count\" argument set.`, addr.Name),\n\t\t\tSubject:  rng.ToHCL().Ptr(),\n\t\t})\n\t\treturn cty.DynamicVal, diags\n\t}\n}\n\nfunc (d *evaluationStateData) GetInputVariable(addr addrs.InputVariable, rng tfdiags.SourceRange) (cty.Value, tfdiags.Diagnostics) {\n\tvar diags tfdiags.Diagnostics\n\n\t// First we'll make sure the requested value is declared in configuration,\n\t// so we can produce a nice message if not.\n\tmoduleConfig := d.Evaluator.Config.DescendentForInstance(d.ModulePath)\n\tif moduleConfig == nil {\n\t\t// should never happen, since we can't be evaluating in a module\n\t\t// that wasn't mentioned in configuration.\n\t\tpanic(fmt.Sprintf(\"input variable read from %s, which has no configuration\", d.ModulePath))\n\t}\n\n\tconfig := moduleConfig.Module.Variables[addr.Name]\n\tif config == nil {\n\t\tvar suggestions []string\n\t\tfor k := range moduleConfig.Module.Variables {\n\t\t\tsuggestions = append(suggestions, k)\n\t\t}\n\t\tsuggestion := nameSuggestion(addr.Name, suggestions)\n\t\tif suggestion != \"\" {\n\t\t\tsuggestion = fmt.Sprintf(\" Did you mean %q?\", suggestion)\n\t\t} else {\n\t\t\tsuggestion = fmt.Sprintf(\" This variable can be declared with a variable %q {} block.\", addr.Name)\n\t\t}\n\n\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  `Reference to undeclared input variable`,\n\t\t\tDetail:   fmt.Sprintf(`An input variable with the name %q has not been declared.%s`, addr.Name, suggestion),\n\t\t\tSubject:  rng.ToHCL().Ptr(),\n\t\t})\n\t\treturn cty.DynamicVal, diags\n\t}\n\n\twantType := cty.DynamicPseudoType\n\tif config.Type != cty.NilType {\n\t\twantType = config.Type\n\t}\n\n\td.Evaluator.VariableValuesLock.Lock()\n\tdefer d.Evaluator.VariableValuesLock.Unlock()\n\n\t// During the validate walk, input variables are always unknown so\n\t// that we are validating the configuration for all possible input values\n\t// rather than for a specific set. Checking against a specific set of\n\t// input values then happens during the plan walk.\n\t//\n\t// This is important because otherwise the validation walk will tend to be\n\t// overly strict, requiring expressions throughout the configuration to\n\t// be complicated to accommodate all possible inputs, whereas returning\n\t// known here allows for simpler patterns like using input values as\n\t// guards to broadly enable/disable resources, avoid processing things\n\t// that are disabled, etc. Terraform's static validation leans towards\n\t// being liberal in what it accepts because the subsequent plan walk has\n\t// more information available and so can be more conservative.\n\tif d.Operation == walkValidate {\n\t\treturn cty.UnknownVal(wantType), diags\n\t}\n\n\tmoduleAddrStr := d.ModulePath.String()\n\tvals := d.Evaluator.VariableValues[moduleAddrStr]\n\tif vals == nil {\n\t\treturn cty.UnknownVal(wantType), diags\n\t}\n\n\tval, isSet := vals[addr.Name]\n\tif !isSet {\n\t\tif config.Default != cty.NilVal {\n\t\t\treturn config.Default, diags\n\t\t}\n\t\treturn cty.UnknownVal(wantType), diags\n\t}\n\n\tvar err error\n\tval, err = convert.Convert(val, wantType)\n\tif err != nil {\n\t\t// We should never get here because this problem should've been caught\n\t\t// during earlier validation, but we'll do something reasonable anyway.\n\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  `Incorrect variable type`,\n\t\t\tDetail:   fmt.Sprintf(`The resolved value of variable %q is not appropriate: %s.`, addr.Name, err),\n\t\t\tSubject:  &config.DeclRange,\n\t\t})\n\t\t// Stub out our return value so that the semantic checker doesn't\n\t\t// produce redundant downstream errors.\n\t\tval = cty.UnknownVal(wantType)\n\t}\n\n\treturn val, diags\n}\n\nfunc (d *evaluationStateData) GetLocalValue(addr addrs.LocalValue, rng tfdiags.SourceRange) (cty.Value, tfdiags.Diagnostics) {\n\tvar diags tfdiags.Diagnostics\n\n\t// First we'll make sure the requested value is declared in configuration,\n\t// so we can produce a nice message if not.\n\tmoduleConfig := d.Evaluator.Config.DescendentForInstance(d.ModulePath)\n\tif moduleConfig == nil {\n\t\t// should never happen, since we can't be evaluating in a module\n\t\t// that wasn't mentioned in configuration.\n\t\tpanic(fmt.Sprintf(\"local value read from %s, which has no configuration\", d.ModulePath))\n\t}\n\n\tconfig := moduleConfig.Module.Locals[addr.Name]\n\tif config == nil {\n\t\tvar suggestions []string\n\t\tfor k := range moduleConfig.Module.Locals {\n\t\t\tsuggestions = append(suggestions, k)\n\t\t}\n\t\tsuggestion := nameSuggestion(addr.Name, suggestions)\n\t\tif suggestion != \"\" {\n\t\t\tsuggestion = fmt.Sprintf(\" Did you mean %q?\", suggestion)\n\t\t}\n\n\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  `Reference to undeclared local value`,\n\t\t\tDetail:   fmt.Sprintf(`A local value with the name %q has not been declared.%s`, addr.Name, suggestion),\n\t\t\tSubject:  rng.ToHCL().Ptr(),\n\t\t})\n\t\treturn cty.DynamicVal, diags\n\t}\n\n\tval := d.Evaluator.State.LocalValue(addr.Absolute(d.ModulePath))\n\tif val == cty.NilVal {\n\t\t// Not evaluated yet?\n\t\tval = cty.DynamicVal\n\t}\n\n\treturn val, diags\n}\n\nfunc (d *evaluationStateData) GetModuleInstance(addr addrs.ModuleCallInstance, rng tfdiags.SourceRange) (cty.Value, tfdiags.Diagnostics) {\n\tvar diags tfdiags.Diagnostics\n\n\t// Output results live in the module that declares them, which is one of\n\t// the child module instances of our current module path.\n\tmoduleAddr := addr.ModuleInstance(d.ModulePath)\n\n\t// We'll consult the configuration to see what output names we are\n\t// expecting, so we can ensure the resulting object is of the expected\n\t// type even if our data is incomplete for some reason.\n\tmoduleConfig := d.Evaluator.Config.DescendentForInstance(moduleAddr)\n\tif moduleConfig == nil {\n\t\t// should never happen, since this should've been caught during\n\t\t// static validation.\n\t\tpanic(fmt.Sprintf(\"output value read from %s, which has no configuration\", moduleAddr))\n\t}\n\toutputConfigs := moduleConfig.Module.Outputs\n\n\tvals := map[string]cty.Value{}\n\tfor n := range outputConfigs {\n\t\taddr := addrs.OutputValue{Name: n}.Absolute(moduleAddr)\n\n\t\t// If a pending change is present in our current changeset then its value\n\t\t// takes priority over what's in state. (It will usually be the same but\n\t\t// will differ if the new value is unknown during planning.)\n\t\tif changeSrc := d.Evaluator.Changes.GetOutputChange(addr); changeSrc != nil {\n\t\t\tchange, err := changeSrc.Decode()\n\t\t\tif err != nil {\n\t\t\t\t// This should happen only if someone has tampered with a plan\n\t\t\t\t// file, so we won't bother with a pretty error for it.\n\t\t\t\tdiags = diags.Append(fmt.Errorf(\"planned change for %s could not be decoded: %s\", addr, err))\n\t\t\t\tvals[n] = cty.DynamicVal\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\t// We care only about the \"after\" value, which is the value this output\n\t\t\t// will take on after the plan is applied.\n\t\t\tvals[n] = change.After\n\t\t} else {\n\t\t\tos := d.Evaluator.State.OutputValue(addr)\n\t\t\tif os == nil {\n\t\t\t\t// Not evaluated yet?\n\t\t\t\tvals[n] = cty.DynamicVal\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tvals[n] = os.Value\n\t\t}\n\t}\n\treturn cty.ObjectVal(vals), diags\n}\n\nfunc (d *evaluationStateData) GetModuleInstanceOutput(addr addrs.ModuleCallOutput, rng tfdiags.SourceRange) (cty.Value, tfdiags.Diagnostics) {\n\tvar diags tfdiags.Diagnostics\n\n\t// Output results live in the module that declares them, which is one of\n\t// the child module instances of our current module path.\n\tabsAddr := addr.AbsOutputValue(d.ModulePath)\n\tmoduleAddr := absAddr.Module\n\n\t// First we'll consult the configuration to see if an output of this\n\t// name is declared at all.\n\tmoduleConfig := d.Evaluator.Config.DescendentForInstance(moduleAddr)\n\tif moduleConfig == nil {\n\t\t// this doesn't happen in normal circumstances due to our validation\n\t\t// pass, but it can turn up in some unusual situations, like in the\n\t\t// \"terraform console\" repl where arbitrary expressions can be\n\t\t// evaluated.\n\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  `Reference to undeclared module`,\n\t\t\tDetail:   fmt.Sprintf(`The configuration contains no %s.`, moduleAddr),\n\t\t\tSubject:  rng.ToHCL().Ptr(),\n\t\t})\n\t\treturn cty.DynamicVal, diags\n\t}\n\n\tconfig := moduleConfig.Module.Outputs[addr.Name]\n\tif config == nil {\n\t\tvar suggestions []string\n\t\tfor k := range moduleConfig.Module.Outputs {\n\t\t\tsuggestions = append(suggestions, k)\n\t\t}\n\t\tsuggestion := nameSuggestion(addr.Name, suggestions)\n\t\tif suggestion != \"\" {\n\t\t\tsuggestion = fmt.Sprintf(\" Did you mean %q?\", suggestion)\n\t\t}\n\n\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  `Reference to undeclared output value`,\n\t\t\tDetail:   fmt.Sprintf(`An output value with the name %q has not been declared in %s.%s`, addr.Name, moduleDisplayAddr(moduleAddr), suggestion),\n\t\t\tSubject:  rng.ToHCL().Ptr(),\n\t\t})\n\t\treturn cty.DynamicVal, diags\n\t}\n\n\t// If a pending change is present in our current changeset then its value\n\t// takes priority over what's in state. (It will usually be the same but\n\t// will differ if the new value is unknown during planning.)\n\tif changeSrc := d.Evaluator.Changes.GetOutputChange(absAddr); changeSrc != nil {\n\t\tchange, err := changeSrc.Decode()\n\t\tif err != nil {\n\t\t\t// This should happen only if someone has tampered with a plan\n\t\t\t// file, so we won't bother with a pretty error for it.\n\t\t\tdiags = diags.Append(fmt.Errorf(\"planned change for %s could not be decoded: %s\", absAddr, err))\n\t\t\treturn cty.DynamicVal, diags\n\t\t}\n\t\t// We care only about the \"after\" value, which is the value this output\n\t\t// will take on after the plan is applied.\n\t\treturn change.After, diags\n\t}\n\n\tos := d.Evaluator.State.OutputValue(absAddr)\n\tif os == nil {\n\t\t// Not evaluated yet?\n\t\treturn cty.DynamicVal, diags\n\t}\n\n\treturn os.Value, diags\n}\n\nfunc (d *evaluationStateData) GetPathAttr(addr addrs.PathAttr, rng tfdiags.SourceRange) (cty.Value, tfdiags.Diagnostics) {\n\tvar diags tfdiags.Diagnostics\n\tswitch addr.Name {\n\n\tcase \"cwd\":\n\t\twd, err := os.Getwd()\n\t\tif err != nil {\n\t\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  `Failed to get working directory`,\n\t\t\t\tDetail:   fmt.Sprintf(`The value for path.cwd cannot be determined due to a system error: %s`, err),\n\t\t\t\tSubject:  rng.ToHCL().Ptr(),\n\t\t\t})\n\t\t\treturn cty.DynamicVal, diags\n\t\t}\n\t\treturn cty.StringVal(filepath.ToSlash(wd)), diags\n\n\tcase \"module\":\n\t\tmoduleConfig := d.Evaluator.Config.DescendentForInstance(d.ModulePath)\n\t\tif moduleConfig == nil {\n\t\t\t// should never happen, since we can't be evaluating in a module\n\t\t\t// that wasn't mentioned in configuration.\n\t\t\tpanic(fmt.Sprintf(\"module.path read from module %s, which has no configuration\", d.ModulePath))\n\t\t}\n\t\tsourceDir := moduleConfig.Module.SourceDir\n\t\treturn cty.StringVal(filepath.ToSlash(sourceDir)), diags\n\n\tcase \"root\":\n\t\tsourceDir := d.Evaluator.Config.Module.SourceDir\n\t\treturn cty.StringVal(filepath.ToSlash(sourceDir)), diags\n\n\tdefault:\n\t\tsuggestion := nameSuggestion(addr.Name, []string{\"cwd\", \"module\", \"root\"})\n\t\tif suggestion != \"\" {\n\t\t\tsuggestion = fmt.Sprintf(\" Did you mean %q?\", suggestion)\n\t\t}\n\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  `Invalid \"path\" attribute`,\n\t\t\tDetail:   fmt.Sprintf(`The \"path\" object does not have an attribute named %q.%s`, addr.Name, suggestion),\n\t\t\tSubject:  rng.ToHCL().Ptr(),\n\t\t})\n\t\treturn cty.DynamicVal, diags\n\t}\n}\n\nfunc (d *evaluationStateData) GetResourceInstance(addr addrs.ResourceInstance, rng tfdiags.SourceRange) (cty.Value, tfdiags.Diagnostics) {\n\tvar diags tfdiags.Diagnostics\n\n\t// Although we are giving a ResourceInstance address here, if it has\n\t// a key of addrs.NoKey then it might actually be a request for all of\n\t// the instances of a particular resource. The reference resolver can't\n\t// resolve the ambiguity itself, so we must do it in here.\n\n\t// First we'll consult the configuration to see if an resource of this\n\t// name is declared at all.\n\tmoduleAddr := d.ModulePath\n\tmoduleConfig := d.Evaluator.Config.DescendentForInstance(moduleAddr)\n\tif moduleConfig == nil {\n\t\t// should never happen, since we can't be evaluating in a module\n\t\t// that wasn't mentioned in configuration.\n\t\tpanic(fmt.Sprintf(\"resource value read from %s, which has no configuration\", moduleAddr))\n\t}\n\n\tconfig := moduleConfig.Module.ResourceByAddr(addr.ContainingResource())\n\tif config == nil {\n\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  `Reference to undeclared resource`,\n\t\t\tDetail:   fmt.Sprintf(`A resource %q %q has not been declared in %s`, addr.Resource.Type, addr.Resource.Name, moduleDisplayAddr(moduleAddr)),\n\t\t\tSubject:  rng.ToHCL().Ptr(),\n\t\t})\n\t\treturn cty.DynamicVal, diags\n\t}\n\n\t// First we'll find the state for the resource as a whole, and decide\n\t// from there whether we're going to interpret the given address as a\n\t// resource or a resource instance address.\n\trs := d.Evaluator.State.Resource(addr.ContainingResource().Absolute(d.ModulePath))\n\n\tif rs == nil {\n\t\tschema := d.getResourceSchema(addr.ContainingResource(), config.ProviderConfigAddr().Absolute(d.ModulePath))\n\n\t\t// If it doesn't exist at all then we can't reliably determine whether\n\t\t// single-instance or whole-resource interpretation was intended, but\n\t\t// we can decide this partially...\n\t\tif addr.Key != addrs.NoKey {\n\t\t\t// If there's an instance key then the user must be intending\n\t\t\t// single-instance interpretation, and so we can return a\n\t\t\t// properly-typed unknown value to help with type checking.\n\t\t\treturn cty.UnknownVal(schema.ImpliedType()), diags\n\t\t}\n\n\t\t// otherwise we must return DynamicVal so that both interpretations\n\t\t// can proceed without generating errors, and we'll deal with this\n\t\t// in a later step where more information is gathered.\n\t\t// (In practice we should only end up here during the validate walk,\n\t\t// since later walks should have at least partial states populated\n\t\t// for all resources in the configuration.)\n\t\treturn cty.DynamicVal, diags\n\t}\n\n\t// Break out early during validation, because resource may not be expanded\n\t// yet and indexed references may show up as invalid.\n\tif d.Operation == walkValidate {\n\t\treturn cty.DynamicVal, diags\n\t}\n\n\tschema := d.getResourceSchema(addr.ContainingResource(), rs.ProviderConfig)\n\n\t// If we are able to automatically convert to the \"right\" type of instance\n\t// key for this each mode then we'll do so, to match with how we generally\n\t// treat values elsewhere in the language. This allows code below to\n\t// assume that any possible conversions have already been dealt with and\n\t// just worry about validation.\n\tkey := d.coerceInstanceKey(addr.Key, rs.EachMode)\n\n\tmulti := false\n\n\tswitch rs.EachMode {\n\tcase states.NoEach:\n\t\tif key != addrs.NoKey {\n\t\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Invalid resource index\",\n\t\t\t\tDetail:   fmt.Sprintf(\"Resource %s does not have either \\\"count\\\" or \\\"for_each\\\" set, so it cannot be indexed.\", addr.ContainingResource()),\n\t\t\t\tSubject:  rng.ToHCL().Ptr(),\n\t\t\t})\n\t\t\treturn cty.DynamicVal, diags\n\t\t}\n\tcase states.EachList:\n\t\tmulti = key == addrs.NoKey\n\t\tif _, ok := addr.Key.(addrs.IntKey); !multi && !ok {\n\t\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Invalid resource index\",\n\t\t\t\tDetail:   fmt.Sprintf(\"Resource %s must be indexed with a number value.\", addr.ContainingResource()),\n\t\t\t\tSubject:  rng.ToHCL().Ptr(),\n\t\t\t})\n\t\t\treturn cty.DynamicVal, diags\n\t\t}\n\tcase states.EachMap:\n\t\tmulti = key == addrs.NoKey\n\t\tif _, ok := addr.Key.(addrs.IntKey); !multi && !ok {\n\t\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Invalid resource index\",\n\t\t\t\tDetail:   fmt.Sprintf(\"Resource %s must be indexed with a string value.\", addr.ContainingResource()),\n\t\t\t\tSubject:  rng.ToHCL().Ptr(),\n\t\t\t})\n\t\t\treturn cty.DynamicVal, diags\n\t\t}\n\t}\n\n\tif !multi {\n\t\tlog.Printf(\"[TRACE] GetResourceInstance: %s is a single instance\", addr)\n\t\tis := rs.Instance(key)\n\t\tif is == nil {\n\t\t\treturn cty.UnknownVal(schema.ImpliedType()), diags\n\t\t}\n\t\treturn d.getResourceInstanceSingle(addr, rng, is, config, rs.ProviderConfig)\n\t}\n\n\tlog.Printf(\"[TRACE] GetResourceInstance: %s has multiple keyed instances\", addr)\n\treturn d.getResourceInstancesAll(addr.ContainingResource(), rng, config, rs, rs.ProviderConfig)\n}\n\nfunc (d *evaluationStateData) getResourceInstanceSingle(addr addrs.ResourceInstance, rng tfdiags.SourceRange, is *states.ResourceInstance, config *configs.Resource, providerAddr addrs.AbsProviderConfig) (cty.Value, tfdiags.Diagnostics) {\n\tvar diags tfdiags.Diagnostics\n\n\tschema := d.getResourceSchema(addr.ContainingResource(), providerAddr)\n\tif schema == nil {\n\t\t// This shouldn't happen, since validation before we get here should've\n\t\t// taken care of it, but we'll show a reasonable error message anyway.\n\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  `Missing resource type schema`,\n\t\t\tDetail:   fmt.Sprintf(\"No schema is available for %s in %s. This is a bug in Terraform and should be reported.\", addr, providerAddr),\n\t\t\tSubject:  rng.ToHCL().Ptr(),\n\t\t})\n\t\treturn cty.DynamicVal, diags\n\t}\n\n\tty := schema.ImpliedType()\n\tif is == nil || is.Current == nil {\n\t\t// Assume we're dealing with an instance that hasn't been created yet.\n\t\treturn cty.UnknownVal(ty), diags\n\t}\n\n\tif is.Current.Status == states.ObjectPlanned {\n\t\t// If there's a pending change for this instance in our plan, we'll prefer\n\t\t// that. This is important because the state can't represent unknown values\n\t\t// and so its data is inaccurate when changes are pending.\n\t\tif change := d.Evaluator.Changes.GetResourceInstanceChange(addr.Absolute(d.ModulePath), states.CurrentGen); change != nil {\n\t\t\tval, err := change.After.Decode(ty)\n\t\t\tif err != nil {\n\t\t\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\tSummary:  \"Invalid resource instance data in plan\",\n\t\t\t\t\tDetail:   fmt.Sprintf(\"Instance %s data could not be decoded from the plan: %s.\", addr.Absolute(d.ModulePath), err),\n\t\t\t\t\tSubject:  &config.DeclRange,\n\t\t\t\t})\n\t\t\t\treturn cty.UnknownVal(ty), diags\n\t\t\t}\n\t\t\treturn val, diags\n\t\t} else {\n\t\t\t// If the object is in planned status then we should not\n\t\t\t// get here, since we should've found a pending value\n\t\t\t// in the plan above instead.\n\t\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  \"Missing pending object in plan\",\n\t\t\t\tDetail:   fmt.Sprintf(\"Instance %s is marked as having a change pending but that change is not recorded in the plan. This is a bug in Terraform; please report it.\", addr),\n\t\t\t\tSubject:  &config.DeclRange,\n\t\t\t})\n\t\t\treturn cty.UnknownVal(ty), diags\n\t\t}\n\t}\n\n\tios, err := is.Current.Decode(ty)\n\tif err != nil {\n\t\t// This shouldn't happen, since by the time we get here\n\t\t// we should've upgraded the state data already.\n\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Invalid resource instance data in state\",\n\t\t\tDetail:   fmt.Sprintf(\"Instance %s data could not be decoded from the state: %s.\", addr.Absolute(d.ModulePath), err),\n\t\t\tSubject:  &config.DeclRange,\n\t\t})\n\t\treturn cty.UnknownVal(ty), diags\n\t}\n\n\treturn ios.Value, diags\n}\n\nfunc (d *evaluationStateData) getResourceInstancesAll(addr addrs.Resource, rng tfdiags.SourceRange, config *configs.Resource, rs *states.Resource, providerAddr addrs.AbsProviderConfig) (cty.Value, tfdiags.Diagnostics) {\n\tvar diags tfdiags.Diagnostics\n\n\tschema := d.getResourceSchema(addr, providerAddr)\n\tif schema == nil {\n\t\t// This shouldn't happen, since validation before we get here should've\n\t\t// taken care of it, but we'll show a reasonable error message anyway.\n\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  `Missing resource type schema`,\n\t\t\tDetail:   fmt.Sprintf(\"No schema is available for %s in %s. This is a bug in Terraform and should be reported.\", addr, providerAddr),\n\t\t\tSubject:  rng.ToHCL().Ptr(),\n\t\t})\n\t\treturn cty.DynamicVal, diags\n\t}\n\n\tswitch rs.EachMode {\n\n\tcase states.EachList:\n\t\t// We need to infer the length of our resulting tuple by searching\n\t\t// for the max IntKey in our instances map.\n\t\tlength := 0\n\t\tfor k := range rs.Instances {\n\t\t\tif ik, ok := k.(addrs.IntKey); ok {\n\t\t\t\tif int(ik) >= length {\n\t\t\t\t\tlength = int(ik) + 1\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tvals := make([]cty.Value, length)\n\t\tfor i := 0; i < length; i++ {\n\t\t\tty := schema.ImpliedType()\n\t\t\tkey := addrs.IntKey(i)\n\t\t\tis, exists := rs.Instances[key]\n\t\t\tif exists {\n\t\t\t\tinstAddr := addr.Instance(key).Absolute(d.ModulePath)\n\n\t\t\t\t// Prefer pending value in plan if present. See getResourceInstanceSingle\n\t\t\t\t// comment for the rationale.\n\t\t\t\tif is.Current.Status == states.ObjectPlanned {\n\t\t\t\t\tif change := d.Evaluator.Changes.GetResourceInstanceChange(instAddr, states.CurrentGen); change != nil {\n\t\t\t\t\t\tval, err := change.After.Decode(ty)\n\t\t\t\t\t\tif err != nil {\n\t\t\t\t\t\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\t\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\t\t\t\tSummary:  \"Invalid resource instance data in plan\",\n\t\t\t\t\t\t\t\tDetail:   fmt.Sprintf(\"Instance %s data could not be decoded from the plan: %s.\", instAddr, err),\n\t\t\t\t\t\t\t\tSubject:  &config.DeclRange,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvals[i] = val\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// If the object is in planned status then we should not\n\t\t\t\t\t\t// get here, since we should've found a pending value\n\t\t\t\t\t\t// in the plan above instead.\n\t\t\t\t\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\t\t\tSummary:  \"Missing pending object in plan\",\n\t\t\t\t\t\t\tDetail:   fmt.Sprintf(\"Instance %s is marked as having a change pending but that change is not recorded in the plan. This is a bug in Terraform; please report it.\", instAddr),\n\t\t\t\t\t\t\tSubject:  &config.DeclRange,\n\t\t\t\t\t\t})\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tios, err := is.Current.Decode(ty)\n\t\t\t\tif err != nil {\n\t\t\t\t\t// This shouldn't happen, since by the time we get here\n\t\t\t\t\t// we should've upgraded the state data already.\n\t\t\t\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\t\tSummary:  \"Invalid resource instance data in state\",\n\t\t\t\t\t\tDetail:   fmt.Sprintf(\"Instance %s data could not be decoded from the state: %s.\", instAddr, err),\n\t\t\t\t\t\tSubject:  &config.DeclRange,\n\t\t\t\t\t})\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tvals[i] = ios.Value\n\t\t\t} else {\n\t\t\t\t// There shouldn't normally be \"gaps\" in our list but we'll\n\t\t\t\t// allow it under the assumption that we're in a weird situation\n\t\t\t\t// where e.g. someone has run \"terraform state mv\" to reorder\n\t\t\t\t// a list and left a hole behind.\n\t\t\t\tvals[i] = cty.UnknownVal(schema.ImpliedType())\n\t\t\t}\n\t\t}\n\n\t\t// We use a tuple rather than a list here because resource schemas may\n\t\t// include dynamically-typed attributes, which will then cause each\n\t\t// instance to potentially have a different runtime type even though\n\t\t// they all conform to the static schema.\n\t\treturn cty.TupleVal(vals), diags\n\n\tcase states.EachMap:\n\t\tty := schema.ImpliedType()\n\t\tvals := make(map[string]cty.Value, len(rs.Instances))\n\t\tfor k, is := range rs.Instances {\n\t\t\tif sk, ok := k.(addrs.StringKey); ok {\n\t\t\t\tinstAddr := addr.Instance(k).Absolute(d.ModulePath)\n\n\t\t\t\t// Prefer pending value in plan if present. See getResourceInstanceSingle\n\t\t\t\t// comment for the rationale.\n\t\t\t\t// Prefer pending value in plan if present. See getResourceInstanceSingle\n\t\t\t\t// comment for the rationale.\n\t\t\t\tif is.Current.Status == states.ObjectPlanned {\n\t\t\t\t\tif change := d.Evaluator.Changes.GetResourceInstanceChange(instAddr, states.CurrentGen); change != nil {\n\t\t\t\t\t\tval, err := change.After.Decode(ty)\n\t\t\t\t\t\tif err != nil {\n\t\t\t\t\t\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\t\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\t\t\t\tSummary:  \"Invalid resource instance data in plan\",\n\t\t\t\t\t\t\t\tDetail:   fmt.Sprintf(\"Instance %s data could not be decoded from the plan: %s.\", instAddr, err),\n\t\t\t\t\t\t\t\tSubject:  &config.DeclRange,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvals[string(sk)] = val\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// If the object is in planned status then we should not\n\t\t\t\t\t\t// get here, since we should've found a pending value\n\t\t\t\t\t\t// in the plan above instead.\n\t\t\t\t\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\t\t\tSummary:  \"Missing pending object in plan\",\n\t\t\t\t\t\t\tDetail:   fmt.Sprintf(\"Instance %s is marked as having a change pending but that change is not recorded in the plan. This is a bug in Terraform; please report it.\", instAddr),\n\t\t\t\t\t\t\tSubject:  &config.DeclRange,\n\t\t\t\t\t\t})\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tios, err := is.Current.Decode(ty)\n\t\t\t\tif err != nil {\n\t\t\t\t\t// This shouldn't happen, since by the time we get here\n\t\t\t\t\t// we should've upgraded the state data already.\n\t\t\t\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\t\tSummary:  \"Invalid resource instance data in state\",\n\t\t\t\t\t\tDetail:   fmt.Sprintf(\"Instance %s data could not be decoded from the state: %s.\", instAddr, err),\n\t\t\t\t\t\tSubject:  &config.DeclRange,\n\t\t\t\t\t})\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tvals[string(sk)] = ios.Value\n\t\t\t}\n\t\t}\n\n\t\t// We use an object rather than a map here because resource schemas may\n\t\t// include dynamically-typed attributes, which will then cause each\n\t\t// instance to potentially have a different runtime type even though\n\t\t// they all conform to the static schema.\n\t\treturn cty.ObjectVal(vals), diags\n\n\tdefault:\n\t\t// Should never happen since caller should deal with other modes\n\t\tpanic(fmt.Sprintf(\"unsupported EachMode %s\", rs.EachMode))\n\t}\n}\n\nfunc (d *evaluationStateData) getResourceSchema(addr addrs.Resource, providerAddr addrs.AbsProviderConfig) *configschema.Block {\n\tproviderType := providerAddr.ProviderConfig.Type\n\tschemas := d.Evaluator.Schemas\n\tschema, _ := schemas.ResourceTypeConfig(providerType, addr.Mode, addr.Type)\n\treturn schema\n}\n\n// coerceInstanceKey attempts to convert the given key to the type expected\n// for the given EachMode.\n//\n// If the key is already of the correct type or if it cannot be converted then\n// it is returned verbatim. If conversion is required and possible, the\n// converted value is returned. Callers should not try to determine if\n// conversion was possible, should instead just check if the result is of\n// the expected type.\nfunc (d *evaluationStateData) coerceInstanceKey(key addrs.InstanceKey, mode states.EachMode) addrs.InstanceKey {\n\tif key == addrs.NoKey {\n\t\t// An absent key can't be converted\n\t\treturn key\n\t}\n\n\tswitch mode {\n\tcase states.NoEach:\n\t\t// No conversions possible at all\n\t\treturn key\n\tcase states.EachMap:\n\t\tif intKey, isInt := key.(addrs.IntKey); isInt {\n\t\t\treturn addrs.StringKey(strconv.Itoa(int(intKey)))\n\t\t}\n\t\treturn key\n\tcase states.EachList:\n\t\tif strKey, isStr := key.(addrs.StringKey); isStr {\n\t\t\ti, err := strconv.Atoi(string(strKey))\n\t\t\tif err != nil {\n\t\t\t\treturn key\n\t\t\t}\n\t\t\treturn addrs.IntKey(i)\n\t\t}\n\t\treturn key\n\tdefault:\n\t\treturn key\n\t}\n}\n\nfunc (d *evaluationStateData) GetTerraformAttr(addr addrs.TerraformAttr, rng tfdiags.SourceRange) (cty.Value, tfdiags.Diagnostics) {\n\tvar diags tfdiags.Diagnostics\n\tswitch addr.Name {\n\n\tcase \"workspace\":\n\t\tworkspaceName := d.Evaluator.Meta.Env\n\t\treturn cty.StringVal(workspaceName), diags\n\n\tcase \"env\":\n\t\t// Prior to Terraform 0.12 there was an attribute \"env\", which was\n\t\t// an alias name for \"workspace\". This was deprecated and is now\n\t\t// removed.\n\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  `Invalid \"terraform\" attribute`,\n\t\t\tDetail:   `The terraform.env attribute was deprecated in v0.10 and removed in v0.12. The \"state environment\" concept was rename to \"workspace\" in v0.12, and so the workspace name can now be accessed using the terraform.workspace attribute.`,\n\t\t\tSubject:  rng.ToHCL().Ptr(),\n\t\t})\n\t\treturn cty.DynamicVal, diags\n\n\tdefault:\n\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  `Invalid \"terraform\" attribute`,\n\t\t\tDetail:   fmt.Sprintf(`The \"terraform\" object does not have an attribute named %q. The only supported attribute is terraform.workspace, the name of the currently-selected workspace.`, addr.Name),\n\t\t\tSubject:  rng.ToHCL().Ptr(),\n\t\t})\n\t\treturn cty.DynamicVal, diags\n\t}\n}\n\n// nameSuggestion tries to find a name from the given slice of suggested names\n// that is close to the given name and returns it if found. If no suggestion\n// is close enough, returns the empty string.\n//\n// The suggestions are tried in order, so earlier suggestions take precedence\n// if the given string is similar to two or more suggestions.\n//\n// This function is intended to be used with a relatively-small number of\n// suggestions. It's not optimized for hundreds or thousands of them.\nfunc nameSuggestion(given string, suggestions []string) string {\n\tfor _, suggestion := range suggestions {\n\t\tdist := levenshtein.Distance(given, suggestion, nil)\n\t\tif dist < 3 { // threshold determined experimentally\n\t\t\treturn suggestion\n\t\t}\n\t}\n\treturn \"\"\n}\n\n// moduleDisplayAddr returns a string describing the given module instance\n// address that is appropriate for returning to users in situations where the\n// root module is possible. Specifically, it returns \"the root module\" if the\n// root module instance is given, or a string representation of the module\n// address otherwise.\nfunc moduleDisplayAddr(addr addrs.ModuleInstance) string {\n\tswitch {\n\tcase addr.IsRoot():\n\t\treturn \"the root module\"\n\tdefault:\n\t\treturn addr.String()\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/evaluate_valid.go",
    "content": "package terraform\n\nimport (\n\t\"fmt\"\n\t\"sort\"\n\n\t\"github.com/hashicorp/hcl2/hcl\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/configs\"\n\t\"github.com/hashicorp/terraform/helper/didyoumean\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n)\n\n// StaticValidateReferences checks the given references against schemas and\n// other statically-checkable rules, producing error diagnostics if any\n// problems are found.\n//\n// If this method returns errors for a particular reference then evaluating\n// that reference is likely to generate a very similar error, so callers should\n// not run this method and then also evaluate the source expression(s) and\n// merge the two sets of diagnostics together, since this will result in\n// confusing redundant errors.\n//\n// This method can find more errors than can be found by evaluating an\n// expression with a partially-populated scope, since it checks the referenced\n// names directly against the schema rather than relying on evaluation errors.\n//\n// The result may include warning diagnostics if, for example, deprecated\n// features are referenced.\nfunc (d *evaluationStateData) StaticValidateReferences(refs []*addrs.Reference, self addrs.Referenceable) tfdiags.Diagnostics {\n\tvar diags tfdiags.Diagnostics\n\tfor _, ref := range refs {\n\t\tmoreDiags := d.staticValidateReference(ref, self)\n\t\tdiags = diags.Append(moreDiags)\n\t}\n\treturn diags\n}\n\nfunc (d *evaluationStateData) staticValidateReference(ref *addrs.Reference, self addrs.Referenceable) tfdiags.Diagnostics {\n\tmodCfg := d.Evaluator.Config.DescendentForInstance(d.ModulePath)\n\tif modCfg == nil {\n\t\t// This is a bug in the caller rather than a problem with the\n\t\t// reference, but rather than crashing out here in an unhelpful way\n\t\t// we'll just ignore it and trust a different layer to catch it.\n\t\treturn nil\n\t}\n\n\tif ref.Subject == addrs.Self {\n\t\t// The \"self\" address is a special alias for the address given as\n\t\t// our self parameter here, if present.\n\t\tif self == nil {\n\t\t\tvar diags tfdiags.Diagnostics\n\t\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  `Invalid \"self\" reference`,\n\t\t\t\t// This detail message mentions some current practice that\n\t\t\t\t// this codepath doesn't really \"know about\". If the \"self\"\n\t\t\t\t// object starts being supported in more contexts later then\n\t\t\t\t// we'll need to adjust this message.\n\t\t\t\tDetail:  `The \"self\" object is not available in this context. This object can be used only in resource provisioner and connection blocks.`,\n\t\t\t\tSubject: ref.SourceRange.ToHCL().Ptr(),\n\t\t\t})\n\t\t\treturn diags\n\t\t}\n\n\t\tsynthRef := *ref // shallow copy\n\t\tsynthRef.Subject = self\n\t\tref = &synthRef\n\t}\n\n\tswitch addr := ref.Subject.(type) {\n\n\t// For static validation we validate both resource and resource instance references the same way.\n\t// We mostly disregard the index, though we do some simple validation of\n\t// its _presence_ in staticValidateSingleResourceReference and\n\t// staticValidateMultiResourceReference respectively.\n\tcase addrs.Resource:\n\t\tvar diags tfdiags.Diagnostics\n\t\tdiags = diags.Append(d.staticValidateSingleResourceReference(modCfg, addr, ref.Remaining, ref.SourceRange))\n\t\tdiags = diags.Append(d.staticValidateResourceReference(modCfg, addr, ref.Remaining, ref.SourceRange))\n\t\treturn diags\n\tcase addrs.ResourceInstance:\n\t\tvar diags tfdiags.Diagnostics\n\t\tdiags = diags.Append(d.staticValidateMultiResourceReference(modCfg, addr, ref.Remaining, ref.SourceRange))\n\t\tdiags = diags.Append(d.staticValidateResourceReference(modCfg, addr.ContainingResource(), ref.Remaining, ref.SourceRange))\n\t\treturn diags\n\n\t// We also handle all module call references the same way, disregarding index.\n\tcase addrs.ModuleCall:\n\t\treturn d.staticValidateModuleCallReference(modCfg, addr, ref.Remaining, ref.SourceRange)\n\tcase addrs.ModuleCallInstance:\n\t\treturn d.staticValidateModuleCallReference(modCfg, addr.Call, ref.Remaining, ref.SourceRange)\n\tcase addrs.ModuleCallOutput:\n\t\t// This one is a funny one because we will take the output name referenced\n\t\t// and use it to fake up a \"remaining\" that would make sense for the\n\t\t// module call itself, rather than for the specific output, and then\n\t\t// we can just re-use our static module call validation logic.\n\t\tremain := make(hcl.Traversal, len(ref.Remaining)+1)\n\t\tcopy(remain[1:], ref.Remaining)\n\t\tremain[0] = hcl.TraverseAttr{\n\t\t\tName: addr.Name,\n\n\t\t\t// Using the whole reference as the source range here doesn't exactly\n\t\t\t// match how HCL would normally generate an attribute traversal,\n\t\t\t// but is close enough for our purposes.\n\t\t\tSrcRange: ref.SourceRange.ToHCL(),\n\t\t}\n\t\treturn d.staticValidateModuleCallReference(modCfg, addr.Call.Call, remain, ref.SourceRange)\n\n\tdefault:\n\t\t// Anything else we'll just permit through without any static validation\n\t\t// and let it be caught during dynamic evaluation, in evaluate.go .\n\t\treturn nil\n\t}\n}\n\nfunc (d *evaluationStateData) staticValidateSingleResourceReference(modCfg *configs.Config, addr addrs.Resource, remain hcl.Traversal, rng tfdiags.SourceRange) tfdiags.Diagnostics {\n\t// If we have at least one step in \"remain\" and this resource has\n\t// \"count\" set then we know for sure this in invalid because we have\n\t// something like:\n\t//     aws_instance.foo.bar\n\t// ...when we really need\n\t//     aws_instance.foo[count.index].bar\n\n\t// It is _not_ safe to do this check when remain is empty, because that\n\t// would also match aws_instance.foo[count.index].bar due to `count.index`\n\t// not being statically-resolvable as part of a reference, and match\n\t// direct references to the whole aws_instance.foo tuple.\n\tif len(remain) == 0 {\n\t\treturn nil\n\t}\n\n\tvar diags tfdiags.Diagnostics\n\n\tcfg := modCfg.Module.ResourceByAddr(addr)\n\tif cfg == nil {\n\t\t// We'll just bail out here and catch this in our subsequent call to\n\t\t// staticValidateResourceReference, then.\n\t\treturn diags\n\t}\n\n\tif cfg.Count != nil {\n\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  `Missing resource instance key`,\n\t\t\tDetail:   fmt.Sprintf(\"Because %s has \\\"count\\\" set, its attributes must be accessed on specific instances.\\n\\nFor example, to correlate with indices of a referring resource, use:\\n    %s[count.index]\", addr, addr),\n\t\t\tSubject:  rng.ToHCL().Ptr(),\n\t\t})\n\t}\n\tif cfg.ForEach != nil {\n\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  `Missing resource instance key`,\n\t\t\tDetail:   fmt.Sprintf(\"Because %s has \\\"for_each\\\" set, its attributes must be accessed on specific instances.\\n\\nFor example, to correlate with indices of a referring resource, use:\\n    %s[each.key]\", addr, addr),\n\t\t\tSubject:  rng.ToHCL().Ptr(),\n\t\t})\n\t}\n\n\treturn diags\n}\n\nfunc (d *evaluationStateData) staticValidateMultiResourceReference(modCfg *configs.Config, addr addrs.ResourceInstance, remain hcl.Traversal, rng tfdiags.SourceRange) tfdiags.Diagnostics {\n\tvar diags tfdiags.Diagnostics\n\n\tcfg := modCfg.Module.ResourceByAddr(addr.ContainingResource())\n\tif cfg == nil {\n\t\t// We'll just bail out here and catch this in our subsequent call to\n\t\t// staticValidateResourceReference, then.\n\t\treturn diags\n\t}\n\n\tif addr.Key == addrs.NoKey {\n\t\t// This is a different path into staticValidateSingleResourceReference\n\t\treturn d.staticValidateSingleResourceReference(modCfg, addr.ContainingResource(), remain, rng)\n\t} else {\n\t\tif cfg.Count == nil && cfg.ForEach == nil {\n\t\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  `Unexpected resource instance key`,\n\t\t\t\tDetail:   fmt.Sprintf(`Because %s does not have \"count\" or \"for_each\" set, references to it must not include an index key. Remove the bracketed index to refer to the single instance of this resource.`, addr.ContainingResource()),\n\t\t\t\tSubject:  rng.ToHCL().Ptr(),\n\t\t\t})\n\t\t}\n\t}\n\n\treturn diags\n}\n\nfunc (d *evaluationStateData) staticValidateResourceReference(modCfg *configs.Config, addr addrs.Resource, remain hcl.Traversal, rng tfdiags.SourceRange) tfdiags.Diagnostics {\n\tvar diags tfdiags.Diagnostics\n\n\tvar modeAdjective string\n\tswitch addr.Mode {\n\tcase addrs.ManagedResourceMode:\n\t\tmodeAdjective = \"managed\"\n\tcase addrs.DataResourceMode:\n\t\tmodeAdjective = \"data\"\n\tdefault:\n\t\t// should never happen\n\t\tmodeAdjective = \"<invalid-mode>\"\n\t}\n\n\tcfg := modCfg.Module.ResourceByAddr(addr)\n\tif cfg == nil {\n\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  `Reference to undeclared resource`,\n\t\t\tDetail:   fmt.Sprintf(`A %s resource %q %q has not been declared in %s.`, modeAdjective, addr.Type, addr.Name, moduleConfigDisplayAddr(modCfg.Path)),\n\t\t\tSubject:  rng.ToHCL().Ptr(),\n\t\t})\n\t\treturn diags\n\t}\n\n\t// Normally accessing this directly is wrong because it doesn't take into\n\t// account provider inheritance, etc but it's okay here because we're only\n\t// paying attention to the type anyway.\n\tproviderType := cfg.ProviderConfigAddr().Type\n\tschema, _ := d.Evaluator.Schemas.ResourceTypeConfig(providerType, addr.Mode, addr.Type)\n\n\tif schema == nil {\n\t\t// Prior validation should've taken care of a resource block with an\n\t\t// unsupported type, so we should never get here but we'll handle it\n\t\t// here anyway for robustness.\n\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  `Invalid resource type`,\n\t\t\tDetail:   fmt.Sprintf(`A %s resource type %q is not supported by provider %q.`, modeAdjective, addr.Type, providerType),\n\t\t\tSubject:  rng.ToHCL().Ptr(),\n\t\t})\n\t\treturn diags\n\t}\n\n\t// As a special case we'll detect attempts to access an attribute called\n\t// \"count\" and produce a special error for it, since versions of Terraform\n\t// prior to v0.12 offered this as a weird special case that we can no\n\t// longer support.\n\tif len(remain) > 0 {\n\t\tif step, ok := remain[0].(hcl.TraverseAttr); ok && step.Name == \"count\" {\n\t\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\tSummary:  `Invalid resource count attribute`,\n\t\t\t\tDetail:   fmt.Sprintf(`The special \"count\" attribute is no longer supported after Terraform v0.12. Instead, use length(%s) to count resource instances.`, addr),\n\t\t\t\tSubject:  rng.ToHCL().Ptr(),\n\t\t\t})\n\t\t\treturn diags\n\t\t}\n\t}\n\n\t// If we got this far then we'll try to validate the remaining traversal\n\t// steps against our schema.\n\tmoreDiags := schema.StaticValidateTraversal(remain)\n\tdiags = diags.Append(moreDiags)\n\n\treturn diags\n}\n\nfunc (d *evaluationStateData) staticValidateModuleCallReference(modCfg *configs.Config, addr addrs.ModuleCall, remain hcl.Traversal, rng tfdiags.SourceRange) tfdiags.Diagnostics {\n\tvar diags tfdiags.Diagnostics\n\n\t// For now, our focus here is just in testing that the referenced module\n\t// call exists. All other validation is deferred until evaluation time.\n\t_, exists := modCfg.Module.ModuleCalls[addr.Name]\n\tif !exists {\n\t\tvar suggestions []string\n\t\tfor name := range modCfg.Module.ModuleCalls {\n\t\t\tsuggestions = append(suggestions, name)\n\t\t}\n\t\tsort.Strings(suggestions)\n\t\tsuggestion := didyoumean.NameSuggestion(addr.Name, suggestions)\n\t\tif suggestion != \"\" {\n\t\t\tsuggestion = fmt.Sprintf(\" Did you mean %q?\", suggestion)\n\t\t}\n\n\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  `Reference to undeclared module`,\n\t\t\tDetail:   fmt.Sprintf(`No module call named %q is declared in %s.%s`, addr.Name, moduleConfigDisplayAddr(modCfg.Path), suggestion),\n\t\t\tSubject:  rng.ToHCL().Ptr(),\n\t\t})\n\t\treturn diags\n\t}\n\n\treturn diags\n}\n\n// moduleConfigDisplayAddr returns a string describing the given module\n// address that is appropriate for returning to users in situations where the\n// root module is possible. Specifically, it returns \"the root module\" if the\n// root module instance is given, or a string representation of the module\n// address otherwise.\nfunc moduleConfigDisplayAddr(addr addrs.Module) string {\n\tswitch {\n\tcase addr.IsRoot():\n\t\treturn \"the root module\"\n\tdefault:\n\t\treturn addr.String()\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/features.go",
    "content": "package terraform\n\nimport \"os\"\n\n// This file holds feature flags for the next release\n\nvar flagWarnOutputErrors = os.Getenv(\"TF_WARN_OUTPUT_ERRORS\") != \"\"\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/graph.go",
    "content": "package terraform\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\n\t\"github.com/hashicorp/terraform/tfdiags\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\n\t\"github.com/hashicorp/terraform/dag\"\n)\n\n// Graph represents the graph that Terraform uses to represent resources\n// and their dependencies.\ntype Graph struct {\n\t// Graph is the actual DAG. This is embedded so you can call the DAG\n\t// methods directly.\n\tdag.AcyclicGraph\n\n\t// Path is the path in the module tree that this Graph represents.\n\tPath addrs.ModuleInstance\n\n\t// debugName is a name for reference in the debug output. This is usually\n\t// to indicate what topmost builder was, and if this graph is a shadow or\n\t// not.\n\tdebugName string\n}\n\nfunc (g *Graph) DirectedGraph() dag.Grapher {\n\treturn &g.AcyclicGraph\n}\n\n// Walk walks the graph with the given walker for callbacks. The graph\n// will be walked with full parallelism, so the walker should expect\n// to be called in concurrently.\nfunc (g *Graph) Walk(walker GraphWalker) tfdiags.Diagnostics {\n\treturn g.walk(walker)\n}\n\nfunc (g *Graph) walk(walker GraphWalker) tfdiags.Diagnostics {\n\t// The callbacks for enter/exiting a graph\n\tctx := walker.EnterPath(g.Path)\n\tdefer walker.ExitPath(g.Path)\n\n\t// Get the path for logs\n\tpath := ctx.Path().String()\n\n\tdebugName := \"walk-graph.json\"\n\tif g.debugName != \"\" {\n\t\tdebugName = g.debugName + \"-\" + debugName\n\t}\n\n\t// Walk the graph.\n\tvar walkFn dag.WalkFunc\n\twalkFn = func(v dag.Vertex) (diags tfdiags.Diagnostics) {\n\t\tlog.Printf(\"[TRACE] vertex %q: starting visit (%T)\", dag.VertexName(v), v)\n\t\tg.DebugVisitInfo(v, g.debugName)\n\n\t\tdefer func() {\n\t\t\tlog.Printf(\"[TRACE] vertex %q: visit complete\", dag.VertexName(v))\n\t\t}()\n\n\t\twalker.EnterVertex(v)\n\t\tdefer walker.ExitVertex(v, diags)\n\n\t\t// vertexCtx is the context that we use when evaluating. This\n\t\t// is normally the context of our graph but can be overridden\n\t\t// with a GraphNodeSubPath impl.\n\t\tvertexCtx := ctx\n\t\tif pn, ok := v.(GraphNodeSubPath); ok && len(pn.Path()) > 0 {\n\t\t\tvertexCtx = walker.EnterPath(pn.Path())\n\t\t\tdefer walker.ExitPath(pn.Path())\n\t\t}\n\n\t\t// If the node is eval-able, then evaluate it.\n\t\tif ev, ok := v.(GraphNodeEvalable); ok {\n\t\t\ttree := ev.EvalTree()\n\t\t\tif tree == nil {\n\t\t\t\tpanic(fmt.Sprintf(\"%q (%T): nil eval tree\", dag.VertexName(v), v))\n\t\t\t}\n\n\t\t\t// Allow the walker to change our tree if needed. Eval,\n\t\t\t// then callback with the output.\n\t\t\tlog.Printf(\"[TRACE] vertex %q: evaluating\", dag.VertexName(v))\n\n\t\t\tg.DebugVertexInfo(v, fmt.Sprintf(\"evaluating %T(%s)\", v, path))\n\n\t\t\ttree = walker.EnterEvalTree(v, tree)\n\t\t\toutput, err := Eval(tree, vertexCtx)\n\t\t\tdiags = diags.Append(walker.ExitEvalTree(v, output, err))\n\t\t\tif diags.HasErrors() {\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\n\t\t// If the node is dynamically expanded, then expand it\n\t\tif ev, ok := v.(GraphNodeDynamicExpandable); ok {\n\t\t\tlog.Printf(\"[TRACE] vertex %q: expanding dynamic subgraph\", dag.VertexName(v))\n\n\t\t\tg.DebugVertexInfo(v, fmt.Sprintf(\"expanding %T(%s)\", v, path))\n\n\t\t\tg, err := ev.DynamicExpand(vertexCtx)\n\t\t\tif err != nil {\n\t\t\t\tdiags = diags.Append(err)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif g != nil {\n\t\t\t\t// Walk the subgraph\n\t\t\t\tlog.Printf(\"[TRACE] vertex %q: entering dynamic subgraph\", dag.VertexName(v))\n\t\t\t\tsubDiags := g.walk(walker)\n\t\t\t\tdiags = diags.Append(subDiags)\n\t\t\t\tif subDiags.HasErrors() {\n\t\t\t\t\tlog.Printf(\"[TRACE] vertex %q: dynamic subgraph encountered errors\", dag.VertexName(v))\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tlog.Printf(\"[TRACE] vertex %q: dynamic subgraph completed successfully\", dag.VertexName(v))\n\t\t\t} else {\n\t\t\t\tlog.Printf(\"[TRACE] vertex %q: produced no dynamic subgraph\", dag.VertexName(v))\n\t\t\t}\n\t\t}\n\n\t\t// If the node has a subgraph, then walk the subgraph\n\t\tif sn, ok := v.(GraphNodeSubgraph); ok {\n\t\t\tlog.Printf(\"[TRACE] vertex %q: entering static subgraph\", dag.VertexName(v))\n\n\t\t\tg.DebugVertexInfo(v, fmt.Sprintf(\"subgraph: %T(%s)\", v, path))\n\n\t\t\tsubDiags := sn.Subgraph().(*Graph).walk(walker)\n\t\t\tif subDiags.HasErrors() {\n\t\t\t\tlog.Printf(\"[TRACE] vertex %q: static subgraph encountered errors\", dag.VertexName(v))\n\t\t\t\treturn\n\t\t\t}\n\t\t\tlog.Printf(\"[TRACE] vertex %q: static subgraph completed successfully\", dag.VertexName(v))\n\t\t}\n\n\t\treturn\n\t}\n\n\treturn g.AcyclicGraph.Walk(walkFn)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/graph_builder.go",
    "content": "package terraform\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"strings\"\n\n\t\"github.com/hashicorp/terraform/tfdiags\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n)\n\n// GraphBuilder is an interface that can be implemented and used with\n// Terraform to build the graph that Terraform walks.\ntype GraphBuilder interface {\n\t// Build builds the graph for the given module path. It is up to\n\t// the interface implementation whether this build should expand\n\t// the graph or not.\n\tBuild(addrs.ModuleInstance) (*Graph, tfdiags.Diagnostics)\n}\n\n// BasicGraphBuilder is a GraphBuilder that builds a graph out of a\n// series of transforms and (optionally) validates the graph is a valid\n// structure.\ntype BasicGraphBuilder struct {\n\tSteps    []GraphTransformer\n\tValidate bool\n\t// Optional name to add to the graph debug log\n\tName string\n}\n\nfunc (b *BasicGraphBuilder) Build(path addrs.ModuleInstance) (*Graph, tfdiags.Diagnostics) {\n\tvar diags tfdiags.Diagnostics\n\tg := &Graph{Path: path}\n\n\tvar lastStepStr string\n\tfor _, step := range b.Steps {\n\t\tif step == nil {\n\t\t\tcontinue\n\t\t}\n\t\tlog.Printf(\"[TRACE] Executing graph transform %T\", step)\n\n\t\tstepName := fmt.Sprintf(\"%T\", step)\n\t\tdot := strings.LastIndex(stepName, \".\")\n\t\tif dot >= 0 {\n\t\t\tstepName = stepName[dot+1:]\n\t\t}\n\n\t\tdebugOp := g.DebugOperation(stepName, \"\")\n\t\terr := step.Transform(g)\n\n\t\terrMsg := \"\"\n\t\tif err != nil {\n\t\t\terrMsg = err.Error()\n\t\t}\n\t\tdebugOp.End(errMsg)\n\n\t\tif thisStepStr := g.StringWithNodeTypes(); thisStepStr != lastStepStr {\n\t\t\tlog.Printf(\"[TRACE] Completed graph transform %T with new graph:\\n%s------\", step, thisStepStr)\n\t\t\tlastStepStr = thisStepStr\n\t\t} else {\n\t\t\tlog.Printf(\"[TRACE] Completed graph transform %T (no changes)\", step)\n\t\t}\n\n\t\tif err != nil {\n\t\t\tif nf, isNF := err.(tfdiags.NonFatalError); isNF {\n\t\t\t\tdiags = diags.Append(nf.Diagnostics)\n\t\t\t} else {\n\t\t\t\tdiags = diags.Append(err)\n\t\t\t\treturn g, diags\n\t\t\t}\n\t\t}\n\t}\n\n\t// Validate the graph structure\n\tif b.Validate {\n\t\tif err := g.Validate(); err != nil {\n\t\t\tlog.Printf(\"[ERROR] Graph validation failed. Graph:\\n\\n%s\", g.String())\n\t\t\tdiags = diags.Append(err)\n\t\t\treturn nil, diags\n\t\t}\n\t}\n\n\treturn g, diags\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/graph_builder_apply.go",
    "content": "package terraform\n\nimport (\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/configs\"\n\t\"github.com/hashicorp/terraform/dag\"\n\t\"github.com/hashicorp/terraform/plans\"\n\t\"github.com/hashicorp/terraform/states\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n)\n\n// ApplyGraphBuilder implements GraphBuilder and is responsible for building\n// a graph for applying a Terraform diff.\n//\n// Because the graph is built from the diff (vs. the config or state),\n// this helps ensure that the apply-time graph doesn't modify any resources\n// that aren't explicitly in the diff. There are other scenarios where the\n// diff can be deviated, so this is just one layer of protection.\ntype ApplyGraphBuilder struct {\n\t// Config is the configuration tree that the diff was built from.\n\tConfig *configs.Config\n\n\t// Changes describes the changes that we need apply.\n\tChanges *plans.Changes\n\n\t// State is the current state\n\tState *states.State\n\n\t// Components is a factory for the plug-in components (providers and\n\t// provisioners) available for use.\n\tComponents contextComponentFactory\n\n\t// Schemas is the repository of schemas we will draw from to analyse\n\t// the configuration.\n\tSchemas *Schemas\n\n\t// Targets are resources to target. This is only required to make sure\n\t// unnecessary outputs aren't included in the apply graph. The plan\n\t// builder successfully handles targeting resources. In the future,\n\t// outputs should go into the diff so that this is unnecessary.\n\tTargets []addrs.Targetable\n\n\t// DisableReduce, if true, will not reduce the graph. Great for testing.\n\tDisableReduce bool\n\n\t// Destroy, if true, represents a pure destroy operation\n\tDestroy bool\n\n\t// Validate will do structural validation of the graph.\n\tValidate bool\n}\n\n// See GraphBuilder\nfunc (b *ApplyGraphBuilder) Build(path addrs.ModuleInstance) (*Graph, tfdiags.Diagnostics) {\n\treturn (&BasicGraphBuilder{\n\t\tSteps:    b.Steps(),\n\t\tValidate: b.Validate,\n\t\tName:     \"ApplyGraphBuilder\",\n\t}).Build(path)\n}\n\n// See GraphBuilder\nfunc (b *ApplyGraphBuilder) Steps() []GraphTransformer {\n\t// Custom factory for creating providers.\n\tconcreteProvider := func(a *NodeAbstractProvider) dag.Vertex {\n\t\treturn &NodeApplyableProvider{\n\t\t\tNodeAbstractProvider: a,\n\t\t}\n\t}\n\n\tconcreteResource := func(a *NodeAbstractResource) dag.Vertex {\n\t\treturn &NodeApplyableResource{\n\t\t\tNodeAbstractResource: a,\n\t\t}\n\t}\n\n\tconcreteOrphanResource := func(a *NodeAbstractResource) dag.Vertex {\n\t\treturn &NodeDestroyResource{\n\t\t\tNodeAbstractResource: a,\n\t\t}\n\t}\n\n\tconcreteResourceInstance := func(a *NodeAbstractResourceInstance) dag.Vertex {\n\t\treturn &NodeApplyableResourceInstance{\n\t\t\tNodeAbstractResourceInstance: a,\n\t\t}\n\t}\n\n\tsteps := []GraphTransformer{\n\t\t// Creates all the resources represented in the config. During apply,\n\t\t// we use this just to ensure that the whole-resource metadata is\n\t\t// updated to reflect things such as whether the count argument is\n\t\t// set in config, or which provider configuration manages each resource.\n\t\t&ConfigTransformer{\n\t\t\tConcrete: concreteResource,\n\t\t\tConfig:   b.Config,\n\t\t},\n\n\t\t// Creates all the resource instances represented in the diff, along\n\t\t// with dependency edges against the whole-resource nodes added by\n\t\t// ConfigTransformer above.\n\t\t&DiffTransformer{\n\t\t\tConcrete: concreteResourceInstance,\n\t\t\tState:    b.State,\n\t\t\tChanges:  b.Changes,\n\t\t},\n\n\t\t// Creates extra cleanup nodes for any entire resources that are\n\t\t// no longer present in config, so we can make sure we clean up the\n\t\t// leftover empty resource states after the instances have been\n\t\t// destroyed.\n\t\t// (We don't track this particular type of change in the plan because\n\t\t// it's just cleanup of our own state object, and so doesn't effect\n\t\t// any real remote objects or consumable outputs.)\n\t\t&OrphanResourceTransformer{\n\t\t\tConcrete: concreteOrphanResource,\n\t\t\tConfig:   b.Config,\n\t\t\tState:    b.State,\n\t\t},\n\n\t\t// Create orphan output nodes\n\t\t&OrphanOutputTransformer{Config: b.Config, State: b.State},\n\n\t\t// Attach the configuration to any resources\n\t\t&AttachResourceConfigTransformer{Config: b.Config},\n\n\t\t// Attach the state\n\t\t&AttachStateTransformer{State: b.State},\n\n\t\t// Destruction ordering\n\t\t&DestroyEdgeTransformer{\n\t\t\tConfig:  b.Config,\n\t\t\tState:   b.State,\n\t\t\tSchemas: b.Schemas,\n\t\t},\n\t\tGraphTransformIf(\n\t\t\tfunc() bool { return !b.Destroy },\n\t\t\t&CBDEdgeTransformer{\n\t\t\t\tConfig:  b.Config,\n\t\t\t\tState:   b.State,\n\t\t\t\tSchemas: b.Schemas,\n\t\t\t},\n\t\t),\n\n\t\t// Provisioner-related transformations\n\t\t&MissingProvisionerTransformer{Provisioners: b.Components.ResourceProvisioners()},\n\t\t&ProvisionerTransformer{},\n\n\t\t// Add root variables\n\t\t&RootVariableTransformer{Config: b.Config},\n\n\t\t// Add the local values\n\t\t&LocalTransformer{Config: b.Config},\n\n\t\t// Add the outputs\n\t\t&OutputTransformer{Config: b.Config},\n\n\t\t// Add module variables\n\t\t&ModuleVariableTransformer{Config: b.Config},\n\n\t\t// add providers\n\t\tTransformProviders(b.Components.ResourceProviders(), concreteProvider, b.Config),\n\n\t\t// Remove modules no longer present in the config\n\t\t&RemovedModuleTransformer{Config: b.Config, State: b.State},\n\n\t\t// Must attach schemas before ReferenceTransformer so that we can\n\t\t// analyze the configuration to find references.\n\t\t&AttachSchemaTransformer{Schemas: b.Schemas},\n\n\t\t// Connect references so ordering is correct\n\t\t&ReferenceTransformer{},\n\n\t\t// Handle destroy time transformations for output and local values.\n\t\t// Reverse the edges from outputs and locals, so that\n\t\t// interpolations don't fail during destroy.\n\t\t// Create a destroy node for outputs to remove them from the state.\n\t\t// Prune unreferenced values, which may have interpolations that can't\n\t\t// be resolved.\n\t\tGraphTransformIf(\n\t\t\tfunc() bool { return b.Destroy },\n\t\t\tGraphTransformMulti(\n\t\t\t\t&DestroyValueReferenceTransformer{},\n\t\t\t\t&DestroyOutputTransformer{},\n\t\t\t\t&PruneUnusedValuesTransformer{},\n\t\t\t),\n\t\t),\n\n\t\t// Add the node to fix the state count boundaries\n\t\t&CountBoundaryTransformer{\n\t\t\tConfig: b.Config,\n\t\t},\n\n\t\t// Target\n\t\t&TargetsTransformer{Targets: b.Targets},\n\n\t\t// Close opened plugin connections\n\t\t&CloseProviderTransformer{},\n\t\t&CloseProvisionerTransformer{},\n\n\t\t// Single root\n\t\t&RootTransformer{},\n\t}\n\n\tif !b.DisableReduce {\n\t\t// Perform the transitive reduction to make our graph a bit\n\t\t// more sane if possible (it usually is possible).\n\t\tsteps = append(steps, &TransitiveReductionTransformer{})\n\t}\n\n\treturn steps\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/graph_builder_destroy_plan.go",
    "content": "package terraform\n\nimport (\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/configs\"\n\t\"github.com/hashicorp/terraform/dag\"\n\t\"github.com/hashicorp/terraform/states\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n)\n\n// DestroyPlanGraphBuilder implements GraphBuilder and is responsible for\n// planning a pure-destroy.\n//\n// Planning a pure destroy operation is simple because we can ignore most\n// ordering configuration and simply reverse the state.\ntype DestroyPlanGraphBuilder struct {\n\t// Config is the configuration tree to build the plan from.\n\tConfig *configs.Config\n\n\t// State is the current state\n\tState *states.State\n\n\t// Components is a factory for the plug-in components (providers and\n\t// provisioners) available for use.\n\tComponents contextComponentFactory\n\n\t// Schemas is the repository of schemas we will draw from to analyse\n\t// the configuration.\n\tSchemas *Schemas\n\n\t// Targets are resources to target\n\tTargets []addrs.Targetable\n\n\t// Validate will do structural validation of the graph.\n\tValidate bool\n}\n\n// See GraphBuilder\nfunc (b *DestroyPlanGraphBuilder) Build(path addrs.ModuleInstance) (*Graph, tfdiags.Diagnostics) {\n\treturn (&BasicGraphBuilder{\n\t\tSteps:    b.Steps(),\n\t\tValidate: b.Validate,\n\t\tName:     \"DestroyPlanGraphBuilder\",\n\t}).Build(path)\n}\n\n// See GraphBuilder\nfunc (b *DestroyPlanGraphBuilder) Steps() []GraphTransformer {\n\tconcreteResourceInstance := func(a *NodeAbstractResourceInstance) dag.Vertex {\n\t\treturn &NodePlanDestroyableResourceInstance{\n\t\t\tNodeAbstractResourceInstance: a,\n\t\t}\n\t}\n\tconcreteResourceInstanceDeposed := func(a *NodeAbstractResourceInstance, key states.DeposedKey) dag.Vertex {\n\t\treturn &NodePlanDeposedResourceInstanceObject{\n\t\t\tNodeAbstractResourceInstance: a,\n\t\t\tDeposedKey:                   key,\n\t\t}\n\t}\n\n\tconcreteProvider := func(a *NodeAbstractProvider) dag.Vertex {\n\t\treturn &NodeApplyableProvider{\n\t\t\tNodeAbstractProvider: a,\n\t\t}\n\t}\n\n\tsteps := []GraphTransformer{\n\t\t// Creates nodes for the resource instances tracked in the state.\n\t\t&StateTransformer{\n\t\t\tConcreteCurrent: concreteResourceInstance,\n\t\t\tConcreteDeposed: concreteResourceInstanceDeposed,\n\t\t\tState:           b.State,\n\t\t},\n\n\t\t// Attach the configuration to any resources\n\t\t&AttachResourceConfigTransformer{Config: b.Config},\n\n\t\tTransformProviders(b.Components.ResourceProviders(), concreteProvider, b.Config),\n\n\t\t// Destruction ordering. We require this only so that\n\t\t// targeting below will prune the correct things.\n\t\t&DestroyEdgeTransformer{\n\t\t\tConfig:  b.Config,\n\t\t\tState:   b.State,\n\t\t\tSchemas: b.Schemas,\n\t\t},\n\n\t\t// Target. Note we don't set \"Destroy: true\" here since we already\n\t\t// created proper destroy ordering.\n\t\t&TargetsTransformer{Targets: b.Targets},\n\n\t\t// Single root\n\t\t&RootTransformer{},\n\t}\n\n\treturn steps\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/graph_builder_eval.go",
    "content": "package terraform\n\nimport (\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/configs\"\n\t\"github.com/hashicorp/terraform/dag\"\n\t\"github.com/hashicorp/terraform/states\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n)\n\n// EvalGraphBuilder implements GraphBuilder and constructs a graph suitable\n// for evaluating in-memory values (input variables, local values, output\n// values) in the state without any other side-effects.\n//\n// This graph is used only in weird cases, such as the \"terraform console\"\n// CLI command, where we need to evaluate expressions against the state\n// without taking any other actions.\n//\n// The generated graph will include nodes for providers, resources, etc\n// just to allow indirect dependencies to be resolved, but these nodes will\n// not take any actions themselves since we assume that their parts of the\n// state, if any, are already complete.\n//\n// Although the providers are never configured, they must still be available\n// in order to obtain schema information used for type checking, etc.\ntype EvalGraphBuilder struct {\n\t// Config is the configuration tree.\n\tConfig *configs.Config\n\n\t// State is the current state\n\tState *states.State\n\n\t// Components is a factory for the plug-in components (providers and\n\t// provisioners) available for use.\n\tComponents contextComponentFactory\n\n\t// Schemas is the repository of schemas we will draw from to analyse\n\t// the configuration.\n\tSchemas *Schemas\n}\n\n// See GraphBuilder\nfunc (b *EvalGraphBuilder) Build(path addrs.ModuleInstance) (*Graph, tfdiags.Diagnostics) {\n\treturn (&BasicGraphBuilder{\n\t\tSteps:    b.Steps(),\n\t\tValidate: true,\n\t\tName:     \"EvalGraphBuilder\",\n\t}).Build(path)\n}\n\n// See GraphBuilder\nfunc (b *EvalGraphBuilder) Steps() []GraphTransformer {\n\tconcreteProvider := func(a *NodeAbstractProvider) dag.Vertex {\n\t\treturn &NodeEvalableProvider{\n\t\t\tNodeAbstractProvider: a,\n\t\t}\n\t}\n\n\tsteps := []GraphTransformer{\n\t\t// Creates all the data resources that aren't in the state. This will also\n\t\t// add any orphans from scaling in as destroy nodes.\n\t\t&ConfigTransformer{\n\t\t\tConcrete: nil, // just use the abstract type\n\t\t\tConfig:   b.Config,\n\t\t\tUnique:   true,\n\t\t},\n\n\t\t// Attach the state\n\t\t&AttachStateTransformer{State: b.State},\n\n\t\t// Attach the configuration to any resources\n\t\t&AttachResourceConfigTransformer{Config: b.Config},\n\n\t\t// Add root variables\n\t\t&RootVariableTransformer{Config: b.Config},\n\n\t\t// Add the local values\n\t\t&LocalTransformer{Config: b.Config},\n\n\t\t// Add the outputs\n\t\t&OutputTransformer{Config: b.Config},\n\n\t\t// Add module variables\n\t\t&ModuleVariableTransformer{Config: b.Config},\n\n\t\tTransformProviders(b.Components.ResourceProviders(), concreteProvider, b.Config),\n\n\t\t// Must attach schemas before ReferenceTransformer so that we can\n\t\t// analyze the configuration to find references.\n\t\t&AttachSchemaTransformer{Schemas: b.Schemas},\n\n\t\t// Connect so that the references are ready for targeting. We'll\n\t\t// have to connect again later for providers and so on.\n\t\t&ReferenceTransformer{},\n\n\t\t// Although we don't configure providers, we do still start them up\n\t\t// to get their schemas, and so we must shut them down again here.\n\t\t&CloseProviderTransformer{},\n\n\t\t// Single root\n\t\t&RootTransformer{},\n\n\t\t// Remove redundant edges to simplify the graph.\n\t\t&TransitiveReductionTransformer{},\n\t}\n\n\treturn steps\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/graph_builder_import.go",
    "content": "package terraform\n\nimport (\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/configs\"\n\t\"github.com/hashicorp/terraform/dag\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n)\n\n// ImportGraphBuilder implements GraphBuilder and is responsible for building\n// a graph for importing resources into Terraform. This is a much, much\n// simpler graph than a normal configuration graph.\ntype ImportGraphBuilder struct {\n\t// ImportTargets are the list of resources to import.\n\tImportTargets []*ImportTarget\n\n\t// Module is a configuration to build the graph from. See ImportOpts.Config.\n\tConfig *configs.Config\n\n\t// Components is the factory for our available plugin components.\n\tComponents contextComponentFactory\n\n\t// Schemas is the repository of schemas we will draw from to analyse\n\t// the configuration.\n\tSchemas *Schemas\n}\n\n// Build builds the graph according to the steps returned by Steps.\nfunc (b *ImportGraphBuilder) Build(path addrs.ModuleInstance) (*Graph, tfdiags.Diagnostics) {\n\treturn (&BasicGraphBuilder{\n\t\tSteps:    b.Steps(),\n\t\tValidate: true,\n\t\tName:     \"ImportGraphBuilder\",\n\t}).Build(path)\n}\n\n// Steps returns the ordered list of GraphTransformers that must be executed\n// to build a complete graph.\nfunc (b *ImportGraphBuilder) Steps() []GraphTransformer {\n\t// Get the module. If we don't have one, we just use an empty tree\n\t// so that the transform still works but does nothing.\n\tconfig := b.Config\n\tif config == nil {\n\t\tconfig = configs.NewEmptyConfig()\n\t}\n\n\t// Custom factory for creating providers.\n\tconcreteProvider := func(a *NodeAbstractProvider) dag.Vertex {\n\t\treturn &NodeApplyableProvider{\n\t\t\tNodeAbstractProvider: a,\n\t\t}\n\t}\n\n\tsteps := []GraphTransformer{\n\t\t// Create all our resources from the configuration and state\n\t\t&ConfigTransformer{Config: config},\n\n\t\t// Add the import steps\n\t\t&ImportStateTransformer{Targets: b.ImportTargets},\n\n\t\t// Add root variables\n\t\t&RootVariableTransformer{Config: b.Config},\n\n\t\tTransformProviders(b.Components.ResourceProviders(), concreteProvider, config),\n\n\t\t// This validates that the providers only depend on variables\n\t\t&ImportProviderValidateTransformer{},\n\n\t\t// Add the local values\n\t\t&LocalTransformer{Config: b.Config},\n\n\t\t// Add the outputs\n\t\t&OutputTransformer{Config: b.Config},\n\n\t\t// Add module variables\n\t\t&ModuleVariableTransformer{Config: b.Config},\n\n\t\t// Must attach schemas before ReferenceTransformer so that we can\n\t\t// analyze the configuration to find references.\n\t\t&AttachSchemaTransformer{Schemas: b.Schemas},\n\n\t\t// Connect so that the references are ready for targeting. We'll\n\t\t// have to connect again later for providers and so on.\n\t\t&ReferenceTransformer{},\n\n\t\t// Close opened plugin connections\n\t\t&CloseProviderTransformer{},\n\n\t\t// Single root\n\t\t&RootTransformer{},\n\n\t\t// Optimize\n\t\t&TransitiveReductionTransformer{},\n\t}\n\n\treturn steps\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/graph_builder_plan.go",
    "content": "package terraform\n\nimport (\n\t\"sync\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/configs\"\n\t\"github.com/hashicorp/terraform/dag\"\n\t\"github.com/hashicorp/terraform/states\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n)\n\n// PlanGraphBuilder implements GraphBuilder and is responsible for building\n// a graph for planning (creating a Terraform Diff).\n//\n// The primary difference between this graph and others:\n//\n//   * Based on the config since it represents the target state\n//\n//   * Ignores lifecycle options since no lifecycle events occur here. This\n//     simplifies the graph significantly since complex transforms such as\n//     create-before-destroy can be completely ignored.\n//\ntype PlanGraphBuilder struct {\n\t// Config is the configuration tree to build a plan from.\n\tConfig *configs.Config\n\n\t// State is the current state\n\tState *states.State\n\n\t// Components is a factory for the plug-in components (providers and\n\t// provisioners) available for use.\n\tComponents contextComponentFactory\n\n\t// Schemas is the repository of schemas we will draw from to analyse\n\t// the configuration.\n\tSchemas *Schemas\n\n\t// Targets are resources to target\n\tTargets []addrs.Targetable\n\n\t// DisableReduce, if true, will not reduce the graph. Great for testing.\n\tDisableReduce bool\n\n\t// Validate will do structural validation of the graph.\n\tValidate bool\n\n\t// CustomConcrete can be set to customize the node types created\n\t// for various parts of the plan. This is useful in order to customize\n\t// the plan behavior.\n\tCustomConcrete         bool\n\tConcreteProvider       ConcreteProviderNodeFunc\n\tConcreteResource       ConcreteResourceNodeFunc\n\tConcreteResourceOrphan ConcreteResourceInstanceNodeFunc\n\n\tonce sync.Once\n}\n\n// See GraphBuilder\nfunc (b *PlanGraphBuilder) Build(path addrs.ModuleInstance) (*Graph, tfdiags.Diagnostics) {\n\treturn (&BasicGraphBuilder{\n\t\tSteps:    b.Steps(),\n\t\tValidate: b.Validate,\n\t\tName:     \"PlanGraphBuilder\",\n\t}).Build(path)\n}\n\n// See GraphBuilder\nfunc (b *PlanGraphBuilder) Steps() []GraphTransformer {\n\tb.once.Do(b.init)\n\n\tconcreteResourceInstanceDeposed := func(a *NodeAbstractResourceInstance, key states.DeposedKey) dag.Vertex {\n\t\treturn &NodePlanDeposedResourceInstanceObject{\n\t\t\tNodeAbstractResourceInstance: a,\n\t\t\tDeposedKey:                   key,\n\t\t}\n\t}\n\n\tsteps := []GraphTransformer{\n\t\t// Creates all the resources represented in the config\n\t\t&ConfigTransformer{\n\t\t\tConcrete: b.ConcreteResource,\n\t\t\tConfig:   b.Config,\n\t\t},\n\n\t\t// Add the local values\n\t\t&LocalTransformer{Config: b.Config},\n\n\t\t// Add the outputs\n\t\t&OutputTransformer{Config: b.Config},\n\n\t\t// Add orphan resources\n\t\t&OrphanResourceInstanceTransformer{\n\t\t\tConcrete: b.ConcreteResourceOrphan,\n\t\t\tState:    b.State,\n\t\t\tConfig:   b.Config,\n\t\t},\n\n\t\t// We also need nodes for any deposed instance objects present in the\n\t\t// state, so we can plan to destroy them. (This intentionally\n\t\t// skips creating nodes for _current_ objects, since ConfigTransformer\n\t\t// created nodes that will do that during DynamicExpand.)\n\t\t&StateTransformer{\n\t\t\tConcreteDeposed: concreteResourceInstanceDeposed,\n\t\t\tState:           b.State,\n\t\t},\n\n\t\t// Create orphan output nodes\n\t\t&OrphanOutputTransformer{\n\t\t\tConfig: b.Config,\n\t\t\tState:  b.State,\n\t\t},\n\n\t\t// Attach the configuration to any resources\n\t\t&AttachResourceConfigTransformer{Config: b.Config},\n\n\t\t// Attach the state\n\t\t&AttachStateTransformer{State: b.State},\n\n\t\t// Add root variables\n\t\t&RootVariableTransformer{Config: b.Config},\n\n\t\t&MissingProvisionerTransformer{Provisioners: b.Components.ResourceProvisioners()},\n\t\t&ProvisionerTransformer{},\n\n\t\t// Add module variables\n\t\t&ModuleVariableTransformer{\n\t\t\tConfig: b.Config,\n\t\t},\n\n\t\tTransformProviders(b.Components.ResourceProviders(), b.ConcreteProvider, b.Config),\n\n\t\t// Remove modules no longer present in the config\n\t\t&RemovedModuleTransformer{Config: b.Config, State: b.State},\n\n\t\t// Must attach schemas before ReferenceTransformer so that we can\n\t\t// analyze the configuration to find references.\n\t\t&AttachSchemaTransformer{Schemas: b.Schemas},\n\n\t\t// Connect so that the references are ready for targeting. We'll\n\t\t// have to connect again later for providers and so on.\n\t\t&ReferenceTransformer{},\n\n\t\t// Add the node to fix the state count boundaries\n\t\t&CountBoundaryTransformer{\n\t\t\tConfig: b.Config,\n\t\t},\n\n\t\t// Target\n\t\t&TargetsTransformer{\n\t\t\tTargets: b.Targets,\n\n\t\t\t// Resource nodes from config have not yet been expanded for\n\t\t\t// \"count\", so we must apply targeting without indices. Exact\n\t\t\t// targeting will be dealt with later when these resources\n\t\t\t// DynamicExpand.\n\t\t\tIgnoreIndices: true,\n\t\t},\n\n\t\t// Detect when create_before_destroy must be forced on for a particular\n\t\t// node due to dependency edges, to avoid graph cycles during apply.\n\t\t&ForcedCBDTransformer{},\n\n\t\t// Close opened plugin connections\n\t\t&CloseProviderTransformer{},\n\t\t&CloseProvisionerTransformer{},\n\n\t\t// Single root\n\t\t&RootTransformer{},\n\t}\n\n\tif !b.DisableReduce {\n\t\t// Perform the transitive reduction to make our graph a bit\n\t\t// more sane if possible (it usually is possible).\n\t\tsteps = append(steps, &TransitiveReductionTransformer{})\n\t}\n\n\treturn steps\n}\n\nfunc (b *PlanGraphBuilder) init() {\n\t// Do nothing if the user requests customizing the fields\n\tif b.CustomConcrete {\n\t\treturn\n\t}\n\n\tb.ConcreteProvider = func(a *NodeAbstractProvider) dag.Vertex {\n\t\treturn &NodeApplyableProvider{\n\t\t\tNodeAbstractProvider: a,\n\t\t}\n\t}\n\n\tb.ConcreteResource = func(a *NodeAbstractResource) dag.Vertex {\n\t\treturn &NodePlannableResource{\n\t\t\tNodeAbstractResource: a,\n\t\t}\n\t}\n\n\tb.ConcreteResourceOrphan = func(a *NodeAbstractResourceInstance) dag.Vertex {\n\t\treturn &NodePlannableResourceInstanceOrphan{\n\t\t\tNodeAbstractResourceInstance: a,\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/graph_builder_refresh.go",
    "content": "package terraform\n\nimport (\n\t\"log\"\n\n\t\"github.com/hashicorp/terraform/states\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/configs\"\n\t\"github.com/hashicorp/terraform/dag\"\n)\n\n// RefreshGraphBuilder implements GraphBuilder and is responsible for building\n// a graph for refreshing (updating the Terraform state).\n//\n// The primary difference between this graph and others:\n//\n//   * Based on the state since it represents the only resources that\n//     need to be refreshed.\n//\n//   * Ignores lifecycle options since no lifecycle events occur here. This\n//     simplifies the graph significantly since complex transforms such as\n//     create-before-destroy can be completely ignored.\n//\ntype RefreshGraphBuilder struct {\n\t// Config is the configuration tree.\n\tConfig *configs.Config\n\n\t// State is the prior state\n\tState *states.State\n\n\t// Components is a factory for the plug-in components (providers and\n\t// provisioners) available for use.\n\tComponents contextComponentFactory\n\n\t// Schemas is the repository of schemas we will draw from to analyse\n\t// the configuration.\n\tSchemas *Schemas\n\n\t// Targets are resources to target\n\tTargets []addrs.Targetable\n\n\t// DisableReduce, if true, will not reduce the graph. Great for testing.\n\tDisableReduce bool\n\n\t// Validate will do structural validation of the graph.\n\tValidate bool\n}\n\n// See GraphBuilder\nfunc (b *RefreshGraphBuilder) Build(path addrs.ModuleInstance) (*Graph, tfdiags.Diagnostics) {\n\treturn (&BasicGraphBuilder{\n\t\tSteps:    b.Steps(),\n\t\tValidate: b.Validate,\n\t\tName:     \"RefreshGraphBuilder\",\n\t}).Build(path)\n}\n\n// See GraphBuilder\nfunc (b *RefreshGraphBuilder) Steps() []GraphTransformer {\n\t// Custom factory for creating providers.\n\tconcreteProvider := func(a *NodeAbstractProvider) dag.Vertex {\n\t\treturn &NodeApplyableProvider{\n\t\t\tNodeAbstractProvider: a,\n\t\t}\n\t}\n\n\tconcreteManagedResource := func(a *NodeAbstractResource) dag.Vertex {\n\t\treturn &NodeRefreshableManagedResource{\n\t\t\tNodeAbstractResource: a,\n\t\t}\n\t}\n\n\tconcreteManagedResourceInstance := func(a *NodeAbstractResourceInstance) dag.Vertex {\n\t\treturn &NodeRefreshableManagedResourceInstance{\n\t\t\tNodeAbstractResourceInstance: a,\n\t\t}\n\t}\n\n\tconcreteResourceInstanceDeposed := func(a *NodeAbstractResourceInstance, key states.DeposedKey) dag.Vertex {\n\t\t// The \"Plan\" node type also handles refreshing behavior.\n\t\treturn &NodePlanDeposedResourceInstanceObject{\n\t\t\tNodeAbstractResourceInstance: a,\n\t\t\tDeposedKey:                   key,\n\t\t}\n\t}\n\n\tconcreteDataResource := func(a *NodeAbstractResource) dag.Vertex {\n\t\treturn &NodeRefreshableDataResource{\n\t\t\tNodeAbstractResource: a,\n\t\t}\n\t}\n\n\tsteps := []GraphTransformer{\n\t\t// Creates all the managed resources that aren't in the state, but only if\n\t\t// we have a state already. No resources in state means there's not\n\t\t// anything to refresh.\n\t\tfunc() GraphTransformer {\n\t\t\tif b.State.HasResources() {\n\t\t\t\treturn &ConfigTransformer{\n\t\t\t\t\tConcrete:   concreteManagedResource,\n\t\t\t\t\tConfig:     b.Config,\n\t\t\t\t\tUnique:     true,\n\t\t\t\t\tModeFilter: true,\n\t\t\t\t\tMode:       addrs.ManagedResourceMode,\n\t\t\t\t}\n\t\t\t}\n\t\t\tlog.Println(\"[TRACE] No managed resources in state during refresh; skipping managed resource transformer\")\n\t\t\treturn nil\n\t\t}(),\n\n\t\t// Creates all the data resources that aren't in the state. This will also\n\t\t// add any orphans from scaling in as destroy nodes.\n\t\t&ConfigTransformer{\n\t\t\tConcrete:   concreteDataResource,\n\t\t\tConfig:     b.Config,\n\t\t\tUnique:     true,\n\t\t\tModeFilter: true,\n\t\t\tMode:       addrs.DataResourceMode,\n\t\t},\n\n\t\t// Add any fully-orphaned resources from config (ones that have been\n\t\t// removed completely, not ones that are just orphaned due to a scaled-in\n\t\t// count.\n\t\t&OrphanResourceInstanceTransformer{\n\t\t\tConcrete: concreteManagedResourceInstance,\n\t\t\tState:    b.State,\n\t\t\tConfig:   b.Config,\n\t\t},\n\n\t\t// We also need nodes for any deposed instance objects present in the\n\t\t// state, so we can check if they still exist. (This intentionally\n\t\t// skips creating nodes for _current_ objects, since ConfigTransformer\n\t\t// created nodes that will do that during DynamicExpand.)\n\t\t&StateTransformer{\n\t\t\tConcreteDeposed: concreteResourceInstanceDeposed,\n\t\t\tState:           b.State,\n\t\t},\n\n\t\t// Attach the state\n\t\t&AttachStateTransformer{State: b.State},\n\n\t\t// Attach the configuration to any resources\n\t\t&AttachResourceConfigTransformer{Config: b.Config},\n\n\t\t// Add root variables\n\t\t&RootVariableTransformer{Config: b.Config},\n\n\t\t// Add the local values\n\t\t&LocalTransformer{Config: b.Config},\n\n\t\t// Add the outputs\n\t\t&OutputTransformer{Config: b.Config},\n\n\t\t// Add module variables\n\t\t&ModuleVariableTransformer{Config: b.Config},\n\n\t\tTransformProviders(b.Components.ResourceProviders(), concreteProvider, b.Config),\n\n\t\t// Must attach schemas before ReferenceTransformer so that we can\n\t\t// analyze the configuration to find references.\n\t\t&AttachSchemaTransformer{Schemas: b.Schemas},\n\n\t\t// Connect so that the references are ready for targeting. We'll\n\t\t// have to connect again later for providers and so on.\n\t\t&ReferenceTransformer{},\n\n\t\t// Target\n\t\t&TargetsTransformer{\n\t\t\tTargets: b.Targets,\n\n\t\t\t// Resource nodes from config have not yet been expanded for\n\t\t\t// \"count\", so we must apply targeting without indices. Exact\n\t\t\t// targeting will be dealt with later when these resources\n\t\t\t// DynamicExpand.\n\t\t\tIgnoreIndices: true,\n\t\t},\n\n\t\t// Close opened plugin connections\n\t\t&CloseProviderTransformer{},\n\n\t\t// Single root\n\t\t&RootTransformer{},\n\t}\n\n\tif !b.DisableReduce {\n\t\t// Perform the transitive reduction to make our graph a bit\n\t\t// more sane if possible (it usually is possible).\n\t\tsteps = append(steps, &TransitiveReductionTransformer{})\n\t}\n\n\treturn steps\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/graph_builder_validate.go",
    "content": "package terraform\n\nimport (\n\t\"github.com/hashicorp/terraform/dag\"\n)\n\n// ValidateGraphBuilder creates the graph for the validate operation.\n//\n// ValidateGraphBuilder is based on the PlanGraphBuilder. We do this so that\n// we only have to validate what we'd normally plan anyways. The\n// PlanGraphBuilder given will be modified so it shouldn't be used for anything\n// else after calling this function.\nfunc ValidateGraphBuilder(p *PlanGraphBuilder) GraphBuilder {\n\t// We're going to customize the concrete functions\n\tp.CustomConcrete = true\n\n\t// Set the provider to the normal provider. This will ask for input.\n\tp.ConcreteProvider = func(a *NodeAbstractProvider) dag.Vertex {\n\t\treturn &NodeApplyableProvider{\n\t\t\tNodeAbstractProvider: a,\n\t\t}\n\t}\n\n\tp.ConcreteResource = func(a *NodeAbstractResource) dag.Vertex {\n\t\treturn &NodeValidatableResource{\n\t\t\tNodeAbstractResource: a,\n\t\t}\n\t}\n\n\t// We purposely don't set any other concrete types since they don't\n\t// require validation.\n\n\treturn p\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/graph_dot.go",
    "content": "package terraform\n\nimport \"github.com/hashicorp/terraform/dag\"\n\n// GraphDot returns the dot formatting of a visual representation of\n// the given Terraform graph.\nfunc GraphDot(g *Graph, opts *dag.DotOpts) (string, error) {\n\treturn string(g.Dot(opts)), nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/graph_interface_subgraph.go",
    "content": "package terraform\n\nimport (\n\t\"github.com/hashicorp/terraform/addrs\"\n)\n\n// GraphNodeSubPath says that a node is part of a graph with a\n// different path, and the context should be adjusted accordingly.\ntype GraphNodeSubPath interface {\n\tPath() addrs.ModuleInstance\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/graph_walk.go",
    "content": "package terraform\n\nimport (\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/dag\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n)\n\n// GraphWalker is an interface that can be implemented that when used\n// with Graph.Walk will invoke the given callbacks under certain events.\ntype GraphWalker interface {\n\tEnterPath(addrs.ModuleInstance) EvalContext\n\tExitPath(addrs.ModuleInstance)\n\tEnterVertex(dag.Vertex)\n\tExitVertex(dag.Vertex, tfdiags.Diagnostics)\n\tEnterEvalTree(dag.Vertex, EvalNode) EvalNode\n\tExitEvalTree(dag.Vertex, interface{}, error) tfdiags.Diagnostics\n}\n\n// NullGraphWalker is a GraphWalker implementation that does nothing.\n// This can be embedded within other GraphWalker implementations for easily\n// implementing all the required functions.\ntype NullGraphWalker struct{}\n\nfunc (NullGraphWalker) EnterPath(addrs.ModuleInstance) EvalContext      { return new(MockEvalContext) }\nfunc (NullGraphWalker) ExitPath(addrs.ModuleInstance)                   {}\nfunc (NullGraphWalker) EnterVertex(dag.Vertex)                          {}\nfunc (NullGraphWalker) ExitVertex(dag.Vertex, tfdiags.Diagnostics)      {}\nfunc (NullGraphWalker) EnterEvalTree(v dag.Vertex, n EvalNode) EvalNode { return n }\nfunc (NullGraphWalker) ExitEvalTree(dag.Vertex, interface{}, error) tfdiags.Diagnostics {\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/graph_walk_context.go",
    "content": "package terraform\n\nimport (\n\t\"context\"\n\t\"log\"\n\t\"sync\"\n\n\t\"github.com/zclconf/go-cty/cty\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/configs/configschema\"\n\t\"github.com/hashicorp/terraform/dag\"\n\t\"github.com/hashicorp/terraform/plans\"\n\t\"github.com/hashicorp/terraform/providers\"\n\t\"github.com/hashicorp/terraform/provisioners\"\n\t\"github.com/hashicorp/terraform/states\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n)\n\n// ContextGraphWalker is the GraphWalker implementation used with the\n// Context struct to walk and evaluate the graph.\ntype ContextGraphWalker struct {\n\tNullGraphWalker\n\n\t// Configurable values\n\tContext            *Context\n\tState              *states.SyncState  // Used for safe concurrent access to state\n\tChanges            *plans.ChangesSync // Used for safe concurrent writes to changes\n\tOperation          walkOperation\n\tStopContext        context.Context\n\tRootVariableValues InputValues\n\n\t// This is an output. Do not set this, nor read it while a graph walk\n\t// is in progress.\n\tNonFatalDiagnostics tfdiags.Diagnostics\n\n\terrorLock          sync.Mutex\n\tonce               sync.Once\n\tcontexts           map[string]*BuiltinEvalContext\n\tcontextLock        sync.Mutex\n\tvariableValues     map[string]map[string]cty.Value\n\tvariableValuesLock sync.Mutex\n\tproviderCache      map[string]providers.Interface\n\tproviderSchemas    map[string]*ProviderSchema\n\tproviderLock       sync.Mutex\n\tprovisionerCache   map[string]provisioners.Interface\n\tprovisionerSchemas map[string]*configschema.Block\n\tprovisionerLock    sync.Mutex\n}\n\nfunc (w *ContextGraphWalker) EnterPath(path addrs.ModuleInstance) EvalContext {\n\tw.once.Do(w.init)\n\n\tw.contextLock.Lock()\n\tdefer w.contextLock.Unlock()\n\n\t// If we already have a context for this path cached, use that\n\tkey := path.String()\n\tif ctx, ok := w.contexts[key]; ok {\n\t\treturn ctx\n\t}\n\n\t// Our evaluator shares some locks with the main context and the walker\n\t// so that we can safely run multiple evaluations at once across\n\t// different modules.\n\tevaluator := &Evaluator{\n\t\tMeta:               w.Context.meta,\n\t\tConfig:             w.Context.config,\n\t\tOperation:          w.Operation,\n\t\tState:              w.State,\n\t\tChanges:            w.Changes,\n\t\tSchemas:            w.Context.schemas,\n\t\tVariableValues:     w.variableValues,\n\t\tVariableValuesLock: &w.variableValuesLock,\n\t}\n\n\tctx := &BuiltinEvalContext{\n\t\tStopContext:         w.StopContext,\n\t\tPathValue:           path,\n\t\tHooks:               w.Context.hooks,\n\t\tInputValue:          w.Context.uiInput,\n\t\tComponents:          w.Context.components,\n\t\tSchemas:             w.Context.schemas,\n\t\tProviderCache:       w.providerCache,\n\t\tProviderInputConfig: w.Context.providerInputConfig,\n\t\tProviderLock:        &w.providerLock,\n\t\tProvisionerCache:    w.provisionerCache,\n\t\tProvisionerLock:     &w.provisionerLock,\n\t\tChangesValue:        w.Changes,\n\t\tStateValue:          w.State,\n\t\tEvaluator:           evaluator,\n\t\tVariableValues:      w.variableValues,\n\t\tVariableValuesLock:  &w.variableValuesLock,\n\t}\n\n\tw.contexts[key] = ctx\n\treturn ctx\n}\n\nfunc (w *ContextGraphWalker) EnterEvalTree(v dag.Vertex, n EvalNode) EvalNode {\n\tlog.Printf(\"[TRACE] [%s] Entering eval tree: %s\", w.Operation, dag.VertexName(v))\n\n\t// Acquire a lock on the semaphore\n\tw.Context.parallelSem.Acquire()\n\n\t// We want to filter the evaluation tree to only include operations\n\t// that belong in this operation.\n\treturn EvalFilter(n, EvalNodeFilterOp(w.Operation))\n}\n\nfunc (w *ContextGraphWalker) ExitEvalTree(v dag.Vertex, output interface{}, err error) tfdiags.Diagnostics {\n\tlog.Printf(\"[TRACE] [%s] Exiting eval tree: %s\", w.Operation, dag.VertexName(v))\n\n\t// Release the semaphore\n\tw.Context.parallelSem.Release()\n\n\tif err == nil {\n\t\treturn nil\n\t}\n\n\t// Acquire the lock because anything is going to require a lock.\n\tw.errorLock.Lock()\n\tdefer w.errorLock.Unlock()\n\n\t// If the error is non-fatal then we'll accumulate its diagnostics in our\n\t// non-fatal list, rather than returning it directly, so that the graph\n\t// walk can continue.\n\tif nferr, ok := err.(tfdiags.NonFatalError); ok {\n\t\tlog.Printf(\"[WARN] %s: %s\", dag.VertexName(v), nferr)\n\t\tw.NonFatalDiagnostics = w.NonFatalDiagnostics.Append(nferr.Diagnostics)\n\t\treturn nil\n\t}\n\n\t// Otherwise, we'll let our usual diagnostics machinery figure out how to\n\t// unpack this as one or more diagnostic messages and return that. If we\n\t// get down here then the returned diagnostics will contain at least one\n\t// error, causing the graph walk to halt.\n\tvar diags tfdiags.Diagnostics\n\tdiags = diags.Append(err)\n\treturn diags\n}\n\nfunc (w *ContextGraphWalker) init() {\n\tw.contexts = make(map[string]*BuiltinEvalContext)\n\tw.providerCache = make(map[string]providers.Interface)\n\tw.providerSchemas = make(map[string]*ProviderSchema)\n\tw.provisionerCache = make(map[string]provisioners.Interface)\n\tw.provisionerSchemas = make(map[string]*configschema.Block)\n\tw.variableValues = make(map[string]map[string]cty.Value)\n\n\t// Populate root module variable values. Other modules will be populated\n\t// during the graph walk.\n\tw.variableValues[\"\"] = make(map[string]cty.Value)\n\tfor k, iv := range w.RootVariableValues {\n\t\tw.variableValues[\"\"][k] = iv.Value\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/graph_walk_operation.go",
    "content": "package terraform\n\n//go:generate stringer -type=walkOperation graph_walk_operation.go\n\n// walkOperation is an enum which tells the walkContext what to do.\ntype walkOperation byte\n\nconst (\n\twalkInvalid walkOperation = iota\n\twalkApply\n\twalkPlan\n\twalkPlanDestroy\n\twalkRefresh\n\twalkValidate\n\twalkDestroy\n\twalkImport\n\twalkEval // used just to prepare EvalContext for expression evaluation, with no other actions\n)\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/graphtype_string.go",
    "content": "// Code generated by \"stringer -type=GraphType context_graph_type.go\"; DO NOT EDIT.\n\npackage terraform\n\nimport \"strconv\"\n\nfunc _() {\n\t// An \"invalid array index\" compiler error signifies that the constant values have changed.\n\t// Re-run the stringer command to generate them again.\n\tvar x [1]struct{}\n\t_ = x[GraphTypeInvalid-0]\n\t_ = x[GraphTypeLegacy-1]\n\t_ = x[GraphTypeRefresh-2]\n\t_ = x[GraphTypePlan-3]\n\t_ = x[GraphTypePlanDestroy-4]\n\t_ = x[GraphTypeApply-5]\n\t_ = x[GraphTypeValidate-6]\n\t_ = x[GraphTypeEval-7]\n}\n\nconst _GraphType_name = \"GraphTypeInvalidGraphTypeLegacyGraphTypeRefreshGraphTypePlanGraphTypePlanDestroyGraphTypeApplyGraphTypeValidateGraphTypeEval\"\n\nvar _GraphType_index = [...]uint8{0, 16, 31, 47, 60, 80, 94, 111, 124}\n\nfunc (i GraphType) String() string {\n\tif i >= GraphType(len(_GraphType_index)-1) {\n\t\treturn \"GraphType(\" + strconv.FormatInt(int64(i), 10) + \")\"\n\t}\n\treturn _GraphType_name[_GraphType_index[i]:_GraphType_index[i+1]]\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/hook.go",
    "content": "package terraform\n\nimport (\n\t\"github.com/zclconf/go-cty/cty\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/plans\"\n\t\"github.com/hashicorp/terraform/providers\"\n\t\"github.com/hashicorp/terraform/states\"\n)\n\n// HookAction is an enum of actions that can be taken as a result of a hook\n// callback. This allows you to modify the behavior of Terraform at runtime.\ntype HookAction byte\n\nconst (\n\t// HookActionContinue continues with processing as usual.\n\tHookActionContinue HookAction = iota\n\n\t// HookActionHalt halts immediately: no more hooks are processed\n\t// and the action that Terraform was about to take is cancelled.\n\tHookActionHalt\n)\n\n// Hook is the interface that must be implemented to hook into various\n// parts of Terraform, allowing you to inspect or change behavior at runtime.\n//\n// There are MANY hook points into Terraform. If you only want to implement\n// some hook points, but not all (which is the likely case), then embed the\n// NilHook into your struct, which implements all of the interface but does\n// nothing. Then, override only the functions you want to implement.\ntype Hook interface {\n\t// PreApply and PostApply are called before and after an action for a\n\t// single instance is applied. The error argument in PostApply is the\n\t// error, if any, that was returned from the provider Apply call itself.\n\tPreApply(addr addrs.AbsResourceInstance, gen states.Generation, action plans.Action, priorState, plannedNewState cty.Value) (HookAction, error)\n\tPostApply(addr addrs.AbsResourceInstance, gen states.Generation, newState cty.Value, err error) (HookAction, error)\n\n\t// PreDiff and PostDiff are called before and after a provider is given\n\t// the opportunity to customize the proposed new state to produce the\n\t// planned new state.\n\tPreDiff(addr addrs.AbsResourceInstance, gen states.Generation, priorState, proposedNewState cty.Value) (HookAction, error)\n\tPostDiff(addr addrs.AbsResourceInstance, gen states.Generation, action plans.Action, priorState, plannedNewState cty.Value) (HookAction, error)\n\n\t// The provisioning hooks signal both the overall start end end of\n\t// provisioning for a particular instance and of each of the individual\n\t// configured provisioners for each instance. The sequence of these\n\t// for a given instance might look something like this:\n\t//\n\t//          PreProvisionInstance(aws_instance.foo[1], ...)\n\t//      PreProvisionInstanceStep(aws_instance.foo[1], \"file\")\n\t//     PostProvisionInstanceStep(aws_instance.foo[1], \"file\", nil)\n\t//      PreProvisionInstanceStep(aws_instance.foo[1], \"remote-exec\")\n\t//               ProvisionOutput(aws_instance.foo[1], \"remote-exec\", \"Installing foo...\")\n\t//               ProvisionOutput(aws_instance.foo[1], \"remote-exec\", \"Configuring bar...\")\n\t//     PostProvisionInstanceStep(aws_instance.foo[1], \"remote-exec\", nil)\n\t//         PostProvisionInstance(aws_instance.foo[1], ...)\n\t//\n\t// ProvisionOutput is called with output sent back by the provisioners.\n\t// This will be called multiple times as output comes in, with each call\n\t// representing one line of output. It cannot control whether the\n\t// provisioner continues running.\n\tPreProvisionInstance(addr addrs.AbsResourceInstance, state cty.Value) (HookAction, error)\n\tPostProvisionInstance(addr addrs.AbsResourceInstance, state cty.Value) (HookAction, error)\n\tPreProvisionInstanceStep(addr addrs.AbsResourceInstance, typeName string) (HookAction, error)\n\tPostProvisionInstanceStep(addr addrs.AbsResourceInstance, typeName string, err error) (HookAction, error)\n\tProvisionOutput(addr addrs.AbsResourceInstance, typeName string, line string)\n\n\t// PreRefresh and PostRefresh are called before and after a single\n\t// resource state is refreshed, respectively.\n\tPreRefresh(addr addrs.AbsResourceInstance, gen states.Generation, priorState cty.Value) (HookAction, error)\n\tPostRefresh(addr addrs.AbsResourceInstance, gen states.Generation, priorState cty.Value, newState cty.Value) (HookAction, error)\n\n\t// PreImportState and PostImportState are called before and after\n\t// (respectively) each state import operation for a given resource address.\n\tPreImportState(addr addrs.AbsResourceInstance, importID string) (HookAction, error)\n\tPostImportState(addr addrs.AbsResourceInstance, imported []providers.ImportedResource) (HookAction, error)\n\n\t// PostStateUpdate is called each time the state is updated. It receives\n\t// a deep copy of the state, which it may therefore access freely without\n\t// any need for locks to protect from concurrent writes from the caller.\n\tPostStateUpdate(new *states.State) (HookAction, error)\n}\n\n// NilHook is a Hook implementation that does nothing. It exists only to\n// simplify implementing hooks. You can embed this into your Hook implementation\n// and only implement the functions you are interested in.\ntype NilHook struct{}\n\nvar _ Hook = (*NilHook)(nil)\n\nfunc (*NilHook) PreApply(addr addrs.AbsResourceInstance, gen states.Generation, action plans.Action, priorState, plannedNewState cty.Value) (HookAction, error) {\n\treturn HookActionContinue, nil\n}\n\nfunc (*NilHook) PostApply(addr addrs.AbsResourceInstance, gen states.Generation, newState cty.Value, err error) (HookAction, error) {\n\treturn HookActionContinue, nil\n}\n\nfunc (*NilHook) PreDiff(addr addrs.AbsResourceInstance, gen states.Generation, priorState, proposedNewState cty.Value) (HookAction, error) {\n\treturn HookActionContinue, nil\n}\n\nfunc (*NilHook) PostDiff(addr addrs.AbsResourceInstance, gen states.Generation, action plans.Action, priorState, plannedNewState cty.Value) (HookAction, error) {\n\treturn HookActionContinue, nil\n}\n\nfunc (*NilHook) PreProvisionInstance(addr addrs.AbsResourceInstance, state cty.Value) (HookAction, error) {\n\treturn HookActionContinue, nil\n}\n\nfunc (*NilHook) PostProvisionInstance(addr addrs.AbsResourceInstance, state cty.Value) (HookAction, error) {\n\treturn HookActionContinue, nil\n}\n\nfunc (*NilHook) PreProvisionInstanceStep(addr addrs.AbsResourceInstance, typeName string) (HookAction, error) {\n\treturn HookActionContinue, nil\n}\n\nfunc (*NilHook) PostProvisionInstanceStep(addr addrs.AbsResourceInstance, typeName string, err error) (HookAction, error) {\n\treturn HookActionContinue, nil\n}\n\nfunc (*NilHook) ProvisionOutput(addr addrs.AbsResourceInstance, typeName string, line string) {\n}\n\nfunc (*NilHook) PreRefresh(addr addrs.AbsResourceInstance, gen states.Generation, priorState cty.Value) (HookAction, error) {\n\treturn HookActionContinue, nil\n}\n\nfunc (*NilHook) PostRefresh(addr addrs.AbsResourceInstance, gen states.Generation, priorState cty.Value, newState cty.Value) (HookAction, error) {\n\treturn HookActionContinue, nil\n}\n\nfunc (*NilHook) PreImportState(addr addrs.AbsResourceInstance, importID string) (HookAction, error) {\n\treturn HookActionContinue, nil\n}\n\nfunc (*NilHook) PostImportState(addr addrs.AbsResourceInstance, imported []providers.ImportedResource) (HookAction, error) {\n\treturn HookActionContinue, nil\n}\n\nfunc (*NilHook) PostStateUpdate(new *states.State) (HookAction, error) {\n\treturn HookActionContinue, nil\n}\n\n// handleHook turns hook actions into panics. This lets you use the\n// panic/recover mechanism in Go as a flow control mechanism for hook\n// actions.\nfunc handleHook(a HookAction, err error) {\n\tif err != nil {\n\t\t// TODO: handle errors\n\t}\n\n\tswitch a {\n\tcase HookActionContinue:\n\t\treturn\n\tcase HookActionHalt:\n\t\tpanic(HookActionHalt)\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/hook_mock.go",
    "content": "package terraform\n\nimport (\n\t\"sync\"\n\n\t\"github.com/zclconf/go-cty/cty\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/plans\"\n\t\"github.com/hashicorp/terraform/providers\"\n\t\"github.com/hashicorp/terraform/states\"\n)\n\n// MockHook is an implementation of Hook that can be used for tests.\n// It records all of its function calls.\ntype MockHook struct {\n\tsync.Mutex\n\n\tPreApplyCalled       bool\n\tPreApplyAddr         addrs.AbsResourceInstance\n\tPreApplyGen          states.Generation\n\tPreApplyAction       plans.Action\n\tPreApplyPriorState   cty.Value\n\tPreApplyPlannedState cty.Value\n\tPreApplyReturn       HookAction\n\tPreApplyError        error\n\n\tPostApplyCalled      bool\n\tPostApplyAddr        addrs.AbsResourceInstance\n\tPostApplyGen         states.Generation\n\tPostApplyNewState    cty.Value\n\tPostApplyError       error\n\tPostApplyReturn      HookAction\n\tPostApplyReturnError error\n\tPostApplyFn          func(addrs.AbsResourceInstance, states.Generation, cty.Value, error) (HookAction, error)\n\n\tPreDiffCalled        bool\n\tPreDiffAddr          addrs.AbsResourceInstance\n\tPreDiffGen           states.Generation\n\tPreDiffPriorState    cty.Value\n\tPreDiffProposedState cty.Value\n\tPreDiffReturn        HookAction\n\tPreDiffError         error\n\n\tPostDiffCalled       bool\n\tPostDiffAddr         addrs.AbsResourceInstance\n\tPostDiffGen          states.Generation\n\tPostDiffAction       plans.Action\n\tPostDiffPriorState   cty.Value\n\tPostDiffPlannedState cty.Value\n\tPostDiffReturn       HookAction\n\tPostDiffError        error\n\n\tPreProvisionInstanceCalled bool\n\tPreProvisionInstanceAddr   addrs.AbsResourceInstance\n\tPreProvisionInstanceState  cty.Value\n\tPreProvisionInstanceReturn HookAction\n\tPreProvisionInstanceError  error\n\n\tPostProvisionInstanceCalled bool\n\tPostProvisionInstanceAddr   addrs.AbsResourceInstance\n\tPostProvisionInstanceState  cty.Value\n\tPostProvisionInstanceReturn HookAction\n\tPostProvisionInstanceError  error\n\n\tPreProvisionInstanceStepCalled          bool\n\tPreProvisionInstanceStepAddr            addrs.AbsResourceInstance\n\tPreProvisionInstanceStepProvisionerType string\n\tPreProvisionInstanceStepReturn          HookAction\n\tPreProvisionInstanceStepError           error\n\n\tPostProvisionInstanceStepCalled          bool\n\tPostProvisionInstanceStepAddr            addrs.AbsResourceInstance\n\tPostProvisionInstanceStepProvisionerType string\n\tPostProvisionInstanceStepErrorArg        error\n\tPostProvisionInstanceStepReturn          HookAction\n\tPostProvisionInstanceStepError           error\n\n\tProvisionOutputCalled          bool\n\tProvisionOutputAddr            addrs.AbsResourceInstance\n\tProvisionOutputProvisionerType string\n\tProvisionOutputMessage         string\n\n\tPreRefreshCalled     bool\n\tPreRefreshAddr       addrs.AbsResourceInstance\n\tPreRefreshGen        states.Generation\n\tPreRefreshPriorState cty.Value\n\tPreRefreshReturn     HookAction\n\tPreRefreshError      error\n\n\tPostRefreshCalled     bool\n\tPostRefreshAddr       addrs.AbsResourceInstance\n\tPostRefreshGen        states.Generation\n\tPostRefreshPriorState cty.Value\n\tPostRefreshNewState   cty.Value\n\tPostRefreshReturn     HookAction\n\tPostRefreshError      error\n\n\tPreImportStateCalled bool\n\tPreImportStateAddr   addrs.AbsResourceInstance\n\tPreImportStateID     string\n\tPreImportStateReturn HookAction\n\tPreImportStateError  error\n\n\tPostImportStateCalled    bool\n\tPostImportStateAddr      addrs.AbsResourceInstance\n\tPostImportStateNewStates []providers.ImportedResource\n\tPostImportStateReturn    HookAction\n\tPostImportStateError     error\n\n\tPostStateUpdateCalled bool\n\tPostStateUpdateState  *states.State\n\tPostStateUpdateReturn HookAction\n\tPostStateUpdateError  error\n}\n\nvar _ Hook = (*MockHook)(nil)\n\nfunc (h *MockHook) PreApply(addr addrs.AbsResourceInstance, gen states.Generation, action plans.Action, priorState, plannedNewState cty.Value) (HookAction, error) {\n\th.Lock()\n\tdefer h.Unlock()\n\n\th.PreApplyCalled = true\n\th.PreApplyAddr = addr\n\th.PreApplyGen = gen\n\th.PreApplyAction = action\n\th.PreApplyPriorState = priorState\n\th.PreApplyPlannedState = plannedNewState\n\treturn h.PreApplyReturn, h.PreApplyError\n}\n\nfunc (h *MockHook) PostApply(addr addrs.AbsResourceInstance, gen states.Generation, newState cty.Value, err error) (HookAction, error) {\n\th.Lock()\n\tdefer h.Unlock()\n\n\th.PostApplyCalled = true\n\th.PostApplyAddr = addr\n\th.PostApplyGen = gen\n\th.PostApplyNewState = newState\n\th.PostApplyError = err\n\n\tif h.PostApplyFn != nil {\n\t\treturn h.PostApplyFn(addr, gen, newState, err)\n\t}\n\n\treturn h.PostApplyReturn, h.PostApplyReturnError\n}\n\nfunc (h *MockHook) PreDiff(addr addrs.AbsResourceInstance, gen states.Generation, priorState, proposedNewState cty.Value) (HookAction, error) {\n\th.Lock()\n\tdefer h.Unlock()\n\n\th.PreDiffCalled = true\n\th.PreDiffAddr = addr\n\th.PreDiffGen = gen\n\th.PreDiffPriorState = priorState\n\th.PreDiffProposedState = proposedNewState\n\treturn h.PreDiffReturn, h.PreDiffError\n}\n\nfunc (h *MockHook) PostDiff(addr addrs.AbsResourceInstance, gen states.Generation, action plans.Action, priorState, plannedNewState cty.Value) (HookAction, error) {\n\th.Lock()\n\tdefer h.Unlock()\n\n\th.PostDiffCalled = true\n\th.PostDiffAddr = addr\n\th.PostDiffGen = gen\n\th.PostDiffAction = action\n\th.PostDiffPriorState = priorState\n\th.PostDiffPlannedState = plannedNewState\n\treturn h.PostDiffReturn, h.PostDiffError\n}\n\nfunc (h *MockHook) PreProvisionInstance(addr addrs.AbsResourceInstance, state cty.Value) (HookAction, error) {\n\th.Lock()\n\tdefer h.Unlock()\n\n\th.PreProvisionInstanceCalled = true\n\th.PreProvisionInstanceAddr = addr\n\th.PreProvisionInstanceState = state\n\treturn h.PreProvisionInstanceReturn, h.PreProvisionInstanceError\n}\n\nfunc (h *MockHook) PostProvisionInstance(addr addrs.AbsResourceInstance, state cty.Value) (HookAction, error) {\n\th.Lock()\n\tdefer h.Unlock()\n\n\th.PostProvisionInstanceCalled = true\n\th.PostProvisionInstanceAddr = addr\n\th.PostProvisionInstanceState = state\n\treturn h.PostProvisionInstanceReturn, h.PostProvisionInstanceError\n}\n\nfunc (h *MockHook) PreProvisionInstanceStep(addr addrs.AbsResourceInstance, typeName string) (HookAction, error) {\n\th.Lock()\n\tdefer h.Unlock()\n\n\th.PreProvisionInstanceStepCalled = true\n\th.PreProvisionInstanceStepAddr = addr\n\th.PreProvisionInstanceStepProvisionerType = typeName\n\treturn h.PreProvisionInstanceStepReturn, h.PreProvisionInstanceStepError\n}\n\nfunc (h *MockHook) PostProvisionInstanceStep(addr addrs.AbsResourceInstance, typeName string, err error) (HookAction, error) {\n\th.Lock()\n\tdefer h.Unlock()\n\n\th.PostProvisionInstanceStepCalled = true\n\th.PostProvisionInstanceStepAddr = addr\n\th.PostProvisionInstanceStepProvisionerType = typeName\n\th.PostProvisionInstanceStepErrorArg = err\n\treturn h.PostProvisionInstanceStepReturn, h.PostProvisionInstanceStepError\n}\n\nfunc (h *MockHook) ProvisionOutput(addr addrs.AbsResourceInstance, typeName string, line string) {\n\th.Lock()\n\tdefer h.Unlock()\n\n\th.ProvisionOutputCalled = true\n\th.ProvisionOutputAddr = addr\n\th.ProvisionOutputProvisionerType = typeName\n\th.ProvisionOutputMessage = line\n}\n\nfunc (h *MockHook) PreRefresh(addr addrs.AbsResourceInstance, gen states.Generation, priorState cty.Value) (HookAction, error) {\n\th.Lock()\n\tdefer h.Unlock()\n\n\th.PreRefreshCalled = true\n\th.PreRefreshAddr = addr\n\th.PreRefreshGen = gen\n\th.PreRefreshPriorState = priorState\n\treturn h.PreRefreshReturn, h.PreRefreshError\n}\n\nfunc (h *MockHook) PostRefresh(addr addrs.AbsResourceInstance, gen states.Generation, priorState cty.Value, newState cty.Value) (HookAction, error) {\n\th.Lock()\n\tdefer h.Unlock()\n\n\th.PostRefreshCalled = true\n\th.PostRefreshAddr = addr\n\th.PostRefreshPriorState = priorState\n\th.PostRefreshNewState = newState\n\treturn h.PostRefreshReturn, h.PostRefreshError\n}\n\nfunc (h *MockHook) PreImportState(addr addrs.AbsResourceInstance, importID string) (HookAction, error) {\n\th.Lock()\n\tdefer h.Unlock()\n\n\th.PreImportStateCalled = true\n\th.PreImportStateAddr = addr\n\th.PreImportStateID = importID\n\treturn h.PreImportStateReturn, h.PreImportStateError\n}\n\nfunc (h *MockHook) PostImportState(addr addrs.AbsResourceInstance, imported []providers.ImportedResource) (HookAction, error) {\n\th.Lock()\n\tdefer h.Unlock()\n\n\th.PostImportStateCalled = true\n\th.PostImportStateAddr = addr\n\th.PostImportStateNewStates = imported\n\treturn h.PostImportStateReturn, h.PostImportStateError\n}\n\nfunc (h *MockHook) PostStateUpdate(new *states.State) (HookAction, error) {\n\th.Lock()\n\tdefer h.Unlock()\n\n\th.PostStateUpdateCalled = true\n\th.PostStateUpdateState = new\n\treturn h.PostStateUpdateReturn, h.PostStateUpdateError\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/hook_stop.go",
    "content": "package terraform\n\nimport (\n\t\"sync/atomic\"\n\n\t\"github.com/zclconf/go-cty/cty\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/plans\"\n\t\"github.com/hashicorp/terraform/providers\"\n\t\"github.com/hashicorp/terraform/states\"\n)\n\n// stopHook is a private Hook implementation that Terraform uses to\n// signal when to stop or cancel actions.\ntype stopHook struct {\n\tstop uint32\n}\n\nvar _ Hook = (*stopHook)(nil)\n\nfunc (h *stopHook) PreApply(addr addrs.AbsResourceInstance, gen states.Generation, action plans.Action, priorState, plannedNewState cty.Value) (HookAction, error) {\n\treturn h.hook()\n}\n\nfunc (h *stopHook) PostApply(addr addrs.AbsResourceInstance, gen states.Generation, newState cty.Value, err error) (HookAction, error) {\n\treturn h.hook()\n}\n\nfunc (h *stopHook) PreDiff(addr addrs.AbsResourceInstance, gen states.Generation, priorState, proposedNewState cty.Value) (HookAction, error) {\n\treturn h.hook()\n}\n\nfunc (h *stopHook) PostDiff(addr addrs.AbsResourceInstance, gen states.Generation, action plans.Action, priorState, plannedNewState cty.Value) (HookAction, error) {\n\treturn h.hook()\n}\n\nfunc (h *stopHook) PreProvisionInstance(addr addrs.AbsResourceInstance, state cty.Value) (HookAction, error) {\n\treturn h.hook()\n}\n\nfunc (h *stopHook) PostProvisionInstance(addr addrs.AbsResourceInstance, state cty.Value) (HookAction, error) {\n\treturn h.hook()\n}\n\nfunc (h *stopHook) PreProvisionInstanceStep(addr addrs.AbsResourceInstance, typeName string) (HookAction, error) {\n\treturn h.hook()\n}\n\nfunc (h *stopHook) PostProvisionInstanceStep(addr addrs.AbsResourceInstance, typeName string, err error) (HookAction, error) {\n\treturn h.hook()\n}\n\nfunc (h *stopHook) ProvisionOutput(addr addrs.AbsResourceInstance, typeName string, line string) {\n}\n\nfunc (h *stopHook) PreRefresh(addr addrs.AbsResourceInstance, gen states.Generation, priorState cty.Value) (HookAction, error) {\n\treturn h.hook()\n}\n\nfunc (h *stopHook) PostRefresh(addr addrs.AbsResourceInstance, gen states.Generation, priorState cty.Value, newState cty.Value) (HookAction, error) {\n\treturn h.hook()\n}\n\nfunc (h *stopHook) PreImportState(addr addrs.AbsResourceInstance, importID string) (HookAction, error) {\n\treturn h.hook()\n}\n\nfunc (h *stopHook) PostImportState(addr addrs.AbsResourceInstance, imported []providers.ImportedResource) (HookAction, error) {\n\treturn h.hook()\n}\n\nfunc (h *stopHook) PostStateUpdate(new *states.State) (HookAction, error) {\n\treturn h.hook()\n}\n\nfunc (h *stopHook) hook() (HookAction, error) {\n\tif h.Stopped() {\n\t\t// FIXME: This should really return an error since stopping partway\n\t\t// through is not a successful run-to-completion, but we'll need to\n\t\t// introduce that cautiously since existing automation solutions may\n\t\t// be depending on this behavior.\n\t\treturn HookActionHalt, nil\n\t}\n\n\treturn HookActionContinue, nil\n}\n\n// reset should be called within the lock context\nfunc (h *stopHook) Reset() {\n\tatomic.StoreUint32(&h.stop, 0)\n}\n\nfunc (h *stopHook) Stop() {\n\tatomic.StoreUint32(&h.stop, 1)\n}\n\nfunc (h *stopHook) Stopped() bool {\n\treturn atomic.LoadUint32(&h.stop) == 1\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/instancetype.go",
    "content": "package terraform\n\n//go:generate stringer -type=InstanceType instancetype.go\n\n// InstanceType is an enum of the various types of instances store in the State\ntype InstanceType int\n\nconst (\n\tTypeInvalid InstanceType = iota\n\tTypePrimary\n\tTypeTainted\n\tTypeDeposed\n)\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/instancetype_string.go",
    "content": "// Code generated by \"stringer -type=InstanceType instancetype.go\"; DO NOT EDIT.\n\npackage terraform\n\nimport \"strconv\"\n\nfunc _() {\n\t// An \"invalid array index\" compiler error signifies that the constant values have changed.\n\t// Re-run the stringer command to generate them again.\n\tvar x [1]struct{}\n\t_ = x[TypeInvalid-0]\n\t_ = x[TypePrimary-1]\n\t_ = x[TypeTainted-2]\n\t_ = x[TypeDeposed-3]\n}\n\nconst _InstanceType_name = \"TypeInvalidTypePrimaryTypeTaintedTypeDeposed\"\n\nvar _InstanceType_index = [...]uint8{0, 11, 22, 33, 44}\n\nfunc (i InstanceType) String() string {\n\tif i < 0 || i >= InstanceType(len(_InstanceType_index)-1) {\n\t\treturn \"InstanceType(\" + strconv.FormatInt(int64(i), 10) + \")\"\n\t}\n\treturn _InstanceType_name[_InstanceType_index[i]:_InstanceType_index[i+1]]\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/interpolate.go",
    "content": "package terraform\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\n\t\"github.com/hashicorp/hil\"\n\t\"github.com/hashicorp/hil/ast\"\n\t\"github.com/hashicorp/terraform/config\"\n\t\"github.com/hashicorp/terraform/config/module\"\n\t\"github.com/hashicorp/terraform/flatmap\"\n)\n\nconst (\n\t// VarEnvPrefix is the prefix of variables that are read from\n\t// the environment to set variables here.\n\tVarEnvPrefix = \"TF_VAR_\"\n)\n\n// Interpolater is the structure responsible for determining the values\n// for interpolations such as `aws_instance.foo.bar`.\ntype Interpolater struct {\n\tOperation          walkOperation\n\tMeta               *ContextMeta\n\tModule             *module.Tree\n\tState              *State\n\tStateLock          *sync.RWMutex\n\tVariableValues     map[string]interface{}\n\tVariableValuesLock *sync.Mutex\n}\n\n// InterpolationScope is the current scope of execution. This is required\n// since some variables which are interpolated are dependent on what we're\n// operating on and where we are.\ntype InterpolationScope struct {\n\tPath     []string\n\tResource *Resource\n}\n\n// Values returns the values for all the variables in the given map.\nfunc (i *Interpolater) Values(\n\tscope *InterpolationScope,\n\tvars map[string]config.InterpolatedVariable) (map[string]ast.Variable, error) {\n\treturn nil, fmt.Errorf(\"type Interpolator is no longer supported; use the evaluator API instead\")\n}\n\nfunc (i *Interpolater) valueCountVar(\n\tscope *InterpolationScope,\n\tn string,\n\tv *config.CountVariable,\n\tresult map[string]ast.Variable) error {\n\tswitch v.Type {\n\tcase config.CountValueIndex:\n\t\tif scope.Resource == nil {\n\t\t\treturn fmt.Errorf(\"%s: count.index is only valid within resources\", n)\n\t\t}\n\t\tresult[n] = ast.Variable{\n\t\t\tValue: scope.Resource.CountIndex,\n\t\t\tType:  ast.TypeInt,\n\t\t}\n\t\treturn nil\n\tdefault:\n\t\treturn fmt.Errorf(\"%s: unknown count type: %#v\", n, v.Type)\n\t}\n}\n\nfunc unknownVariable() ast.Variable {\n\treturn ast.Variable{\n\t\tType:  ast.TypeUnknown,\n\t\tValue: config.UnknownVariableValue,\n\t}\n}\n\nfunc unknownValue() string {\n\treturn hil.UnknownValue\n}\n\nfunc (i *Interpolater) valueModuleVar(\n\tscope *InterpolationScope,\n\tn string,\n\tv *config.ModuleVariable,\n\tresult map[string]ast.Variable) error {\n\t// Build the path to the child module we want\n\tpath := make([]string, len(scope.Path), len(scope.Path)+1)\n\tcopy(path, scope.Path)\n\tpath = append(path, v.Name)\n\n\t// Grab the lock so that if other interpolations are running or\n\t// state is being modified, we'll be safe.\n\ti.StateLock.RLock()\n\tdefer i.StateLock.RUnlock()\n\n\t// Get the module where we're looking for the value\n\tmod := i.State.ModuleByPath(normalizeModulePath(path))\n\tif mod == nil {\n\t\t// If the module doesn't exist, then we can return an empty string.\n\t\t// This happens usually only in Refresh() when we haven't populated\n\t\t// a state. During validation, we semantically verify that all\n\t\t// modules reference other modules, and graph ordering should\n\t\t// ensure that the module is in the state, so if we reach this\n\t\t// point otherwise it really is a panic.\n\t\tresult[n] = unknownVariable()\n\n\t\t// During apply this is always an error\n\t\tif i.Operation == walkApply {\n\t\t\treturn fmt.Errorf(\n\t\t\t\t\"Couldn't find module %q for var: %s\",\n\t\t\t\tv.Name, v.FullKey())\n\t\t}\n\t} else {\n\t\t// Get the value from the outputs\n\t\tif outputState, ok := mod.Outputs[v.Field]; ok {\n\t\t\toutput, err := hil.InterfaceToVariable(outputState.Value)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tresult[n] = output\n\t\t} else {\n\t\t\t// Same reasons as the comment above.\n\t\t\tresult[n] = unknownVariable()\n\n\t\t\t// During apply this is always an error\n\t\t\tif i.Operation == walkApply {\n\t\t\t\treturn fmt.Errorf(\n\t\t\t\t\t\"Couldn't find output %q for module var: %s\",\n\t\t\t\t\tv.Field, v.FullKey())\n\t\t\t}\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (i *Interpolater) valuePathVar(\n\tscope *InterpolationScope,\n\tn string,\n\tv *config.PathVariable,\n\tresult map[string]ast.Variable) error {\n\tswitch v.Type {\n\tcase config.PathValueCwd:\n\t\twd, err := os.Getwd()\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\n\t\t\t\t\"Couldn't get cwd for var %s: %s\",\n\t\t\t\tv.FullKey(), err)\n\t\t}\n\n\t\tresult[n] = ast.Variable{\n\t\t\tValue: wd,\n\t\t\tType:  ast.TypeString,\n\t\t}\n\tcase config.PathValueModule:\n\t\tif t := i.Module.Child(scope.Path[1:]); t != nil {\n\t\t\tresult[n] = ast.Variable{\n\t\t\t\tValue: t.Config().Dir,\n\t\t\t\tType:  ast.TypeString,\n\t\t\t}\n\t\t}\n\tcase config.PathValueRoot:\n\t\tresult[n] = ast.Variable{\n\t\t\tValue: i.Module.Config().Dir,\n\t\t\tType:  ast.TypeString,\n\t\t}\n\tdefault:\n\t\treturn fmt.Errorf(\"%s: unknown path type: %#v\", n, v.Type)\n\t}\n\n\treturn nil\n\n}\n\nfunc (i *Interpolater) valueResourceVar(\n\tscope *InterpolationScope,\n\tn string,\n\tv *config.ResourceVariable,\n\tresult map[string]ast.Variable) error {\n\t// If we're computing all dynamic fields, then module vars count\n\t// and we mark it as computed.\n\tif i.Operation == walkValidate {\n\t\tresult[n] = unknownVariable()\n\t\treturn nil\n\t}\n\n\tvar variable *ast.Variable\n\tvar err error\n\n\tif v.Multi && v.Index == -1 {\n\t\tvariable, err = i.computeResourceMultiVariable(scope, v)\n\t} else {\n\t\tvariable, err = i.computeResourceVariable(scope, v)\n\t}\n\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif variable == nil {\n\t\t// During the refresh walk we tolerate missing variables because\n\t\t// we haven't yet had a chance to refresh state, so dynamic data may\n\t\t// not yet be complete.\n\t\t// If it truly is missing, we'll catch it on a later walk.\n\t\t// This applies only to graph nodes that interpolate during the\n\t\t// refresh walk, e.g. providers.\n\t\tif i.Operation == walkRefresh {\n\t\t\tresult[n] = unknownVariable()\n\t\t\treturn nil\n\t\t}\n\n\t\treturn fmt.Errorf(\"variable %q is nil, but no error was reported\", v.Name)\n\t}\n\n\tresult[n] = *variable\n\treturn nil\n}\n\nfunc (i *Interpolater) valueSelfVar(\n\tscope *InterpolationScope,\n\tn string,\n\tv *config.SelfVariable,\n\tresult map[string]ast.Variable) error {\n\tif scope == nil || scope.Resource == nil {\n\t\treturn fmt.Errorf(\n\t\t\t\"%s: invalid scope, self variables are only valid on resources\", n)\n\t}\n\n\trv, err := config.NewResourceVariable(fmt.Sprintf(\n\t\t\"%s.%s.%d.%s\",\n\t\tscope.Resource.Type,\n\t\tscope.Resource.Name,\n\t\tscope.Resource.CountIndex,\n\t\tv.Field))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn i.valueResourceVar(scope, n, rv, result)\n}\n\nfunc (i *Interpolater) valueSimpleVar(\n\tscope *InterpolationScope,\n\tn string,\n\tv *config.SimpleVariable,\n\tresult map[string]ast.Variable) error {\n\t// This error message includes some information for people who\n\t// relied on this for their template_file data sources. We should\n\t// remove this at some point but there isn't any rush.\n\treturn fmt.Errorf(\n\t\t\"invalid variable syntax: %q. Did you mean 'var.%s'? If this is part of inline `template` parameter\\n\"+\n\t\t\t\"then you must escape the interpolation with two dollar signs. For\\n\"+\n\t\t\t\"example: ${a} becomes $${a}.\",\n\t\tn, n)\n}\n\nfunc (i *Interpolater) valueTerraformVar(\n\tscope *InterpolationScope,\n\tn string,\n\tv *config.TerraformVariable,\n\tresult map[string]ast.Variable) error {\n\t// \"env\" is supported for backward compatibility, but it's deprecated and\n\t// so we won't advertise it as being allowed in the error message. It will\n\t// be removed in a future version of Terraform.\n\tif v.Field != \"workspace\" && v.Field != \"env\" {\n\t\treturn fmt.Errorf(\n\t\t\t\"%s: only supported key for 'terraform.X' interpolations is 'workspace'\", n)\n\t}\n\n\tif i.Meta == nil {\n\t\treturn fmt.Errorf(\n\t\t\t\"%s: internal error: nil Meta. Please report a bug.\", n)\n\t}\n\n\tresult[n] = ast.Variable{Type: ast.TypeString, Value: i.Meta.Env}\n\treturn nil\n}\n\nfunc (i *Interpolater) valueLocalVar(\n\tscope *InterpolationScope,\n\tn string,\n\tv *config.LocalVariable,\n\tresult map[string]ast.Variable,\n) error {\n\ti.StateLock.RLock()\n\tdefer i.StateLock.RUnlock()\n\n\tmodTree := i.Module\n\tif len(scope.Path) > 1 {\n\t\tmodTree = i.Module.Child(scope.Path[1:])\n\t}\n\n\t// Get the resource from the configuration so we can verify\n\t// that the resource is in the configuration and so we can access\n\t// the configuration if we need to.\n\tvar cl *config.Local\n\tfor _, l := range modTree.Config().Locals {\n\t\tif l.Name == v.Name {\n\t\t\tcl = l\n\t\t\tbreak\n\t\t}\n\t}\n\n\tif cl == nil {\n\t\treturn fmt.Errorf(\"%s: no local value of this name has been declared\", n)\n\t}\n\n\t// Get the relevant module\n\tmodule := i.State.ModuleByPath(normalizeModulePath(scope.Path))\n\tif module == nil {\n\t\tresult[n] = unknownVariable()\n\t\treturn nil\n\t}\n\n\trawV, exists := module.Locals[v.Name]\n\tif !exists {\n\t\tresult[n] = unknownVariable()\n\t\treturn nil\n\t}\n\n\tvarV, err := hil.InterfaceToVariable(rawV)\n\tif err != nil {\n\t\t// Should never happen, since interpolation should always produce\n\t\t// something we can feed back in to interpolation.\n\t\treturn fmt.Errorf(\"%s: %s\", n, err)\n\t}\n\n\tresult[n] = varV\n\treturn nil\n}\n\nfunc (i *Interpolater) valueUserVar(\n\tscope *InterpolationScope,\n\tn string,\n\tv *config.UserVariable,\n\tresult map[string]ast.Variable) error {\n\ti.VariableValuesLock.Lock()\n\tdefer i.VariableValuesLock.Unlock()\n\tval, ok := i.VariableValues[v.Name]\n\tif ok {\n\t\tvarValue, err := hil.InterfaceToVariable(val)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"cannot convert %s value %q to an ast.Variable for interpolation: %s\",\n\t\t\t\tv.Name, val, err)\n\t\t}\n\t\tresult[n] = varValue\n\t\treturn nil\n\t}\n\n\tif _, ok := result[n]; !ok && i.Operation == walkValidate {\n\t\tresult[n] = unknownVariable()\n\t\treturn nil\n\t}\n\n\t// Look up if we have any variables with this prefix because\n\t// those are map overrides. Include those.\n\tfor k, val := range i.VariableValues {\n\t\tif strings.HasPrefix(k, v.Name+\".\") {\n\t\t\tkeyComponents := strings.Split(k, \".\")\n\t\t\toverrideKey := keyComponents[len(keyComponents)-1]\n\n\t\t\tmapInterface, ok := result[\"var.\"+v.Name]\n\t\t\tif !ok {\n\t\t\t\treturn fmt.Errorf(\"override for non-existent variable: %s\", v.Name)\n\t\t\t}\n\n\t\t\tmapVariable := mapInterface.Value.(map[string]ast.Variable)\n\n\t\t\tvarValue, err := hil.InterfaceToVariable(val)\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"cannot convert %s value %q to an ast.Variable for interpolation: %s\",\n\t\t\t\t\tv.Name, val, err)\n\t\t\t}\n\t\t\tmapVariable[overrideKey] = varValue\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (i *Interpolater) computeResourceVariable(\n\tscope *InterpolationScope,\n\tv *config.ResourceVariable) (*ast.Variable, error) {\n\tid := v.ResourceId()\n\tif v.Multi {\n\t\tid = fmt.Sprintf(\"%s.%d\", id, v.Index)\n\t}\n\n\ti.StateLock.RLock()\n\tdefer i.StateLock.RUnlock()\n\n\tunknownVariable := unknownVariable()\n\n\t// These variables must be declared early because of the use of GOTO\n\tvar isList bool\n\tvar isMap bool\n\n\t// Get the information about this resource variable, and verify\n\t// that it exists and such.\n\tmodule, cr, err := i.resourceVariableInfo(scope, v)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// If we're requesting \"count\" its a special variable that we grab\n\t// directly from the config itself.\n\tif v.Field == \"count\" {\n\t\tvar count int\n\t\tif cr != nil {\n\t\t\tcount, err = cr.Count()\n\t\t} else {\n\t\t\tcount, err = i.resourceCountMax(module, cr, v)\n\t\t}\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\"Error reading %s count: %s\",\n\t\t\t\tv.ResourceId(),\n\t\t\t\terr)\n\t\t}\n\n\t\treturn &ast.Variable{Type: ast.TypeInt, Value: count}, nil\n\t}\n\n\t// Get the resource out from the state. We know the state exists\n\t// at this point and if there is a state, we expect there to be a\n\t// resource with the given name.\n\tvar r *ResourceState\n\tif module != nil && len(module.Resources) > 0 {\n\t\tvar ok bool\n\t\tr, ok = module.Resources[id]\n\t\tif !ok && v.Multi && v.Index == 0 {\n\t\t\tr, ok = module.Resources[v.ResourceId()]\n\t\t}\n\t\tif !ok {\n\t\t\tr = nil\n\t\t}\n\t}\n\tif r == nil || r.Primary == nil {\n\t\tif i.Operation == walkApply || i.Operation == walkPlan {\n\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\"Resource '%s' not found for variable '%s'\",\n\t\t\t\tv.ResourceId(),\n\t\t\t\tv.FullKey())\n\t\t}\n\n\t\t// If we have no module in the state yet or count, return empty.\n\t\t// NOTE(@mitchellh): I actually don't know why this is here. During\n\t\t// a refactor I kept this here to maintain the same behavior, but\n\t\t// I'm not sure why its here.\n\t\tif module == nil || len(module.Resources) == 0 {\n\t\t\treturn nil, nil\n\t\t}\n\n\t\tgoto MISSING\n\t}\n\n\tif attr, ok := r.Primary.Attributes[v.Field]; ok {\n\t\tv, err := hil.InterfaceToVariable(attr)\n\t\treturn &v, err\n\t}\n\n\t// special case for the \"id\" field which is usually also an attribute\n\tif v.Field == \"id\" && r.Primary.ID != \"\" {\n\t\t// This is usually pulled from the attributes, but is sometimes missing\n\t\t// during destroy. We can return the ID field in this case.\n\t\t// FIXME: there should only be one ID to rule them all.\n\t\tlog.Printf(\"[WARN] resource %s missing 'id' attribute\", v.ResourceId())\n\t\tv, err := hil.InterfaceToVariable(r.Primary.ID)\n\t\treturn &v, err\n\t}\n\n\t// computed list or map attribute\n\t_, isList = r.Primary.Attributes[v.Field+\".#\"]\n\t_, isMap = r.Primary.Attributes[v.Field+\".%\"]\n\tif isList || isMap {\n\t\tvariable, err := i.interpolateComplexTypeAttribute(v.Field, r.Primary.Attributes)\n\t\treturn &variable, err\n\t}\n\n\t// At apply time, we can't do the \"maybe has it\" check below\n\t// that we need for plans since parent elements might be computed.\n\t// Therefore, it is an error and we're missing the key.\n\t//\n\t// TODO: test by creating a state and configuration that is referencing\n\t// a non-existent variable \"foo.bar\" where the state only has \"foo\"\n\t// and verify plan works, but apply doesn't.\n\tif i.Operation == walkApply || i.Operation == walkDestroy {\n\t\tgoto MISSING\n\t}\n\n\t// We didn't find the exact field, so lets separate the dots\n\t// and see if anything along the way is a computed set. i.e. if\n\t// we have \"foo.0.bar\" as the field, check to see if \"foo\" is\n\t// a computed list. If so, then the whole thing is computed.\n\tif parts := strings.Split(v.Field, \".\"); len(parts) > 1 {\n\t\tfor i := 1; i < len(parts); i++ {\n\t\t\t// Lists and sets make this\n\t\t\tkey := fmt.Sprintf(\"%s.#\", strings.Join(parts[:i], \".\"))\n\t\t\tif attr, ok := r.Primary.Attributes[key]; ok {\n\t\t\t\tv, err := hil.InterfaceToVariable(attr)\n\t\t\t\treturn &v, err\n\t\t\t}\n\n\t\t\t// Maps make this\n\t\t\tkey = fmt.Sprintf(\"%s\", strings.Join(parts[:i], \".\"))\n\t\t\tif attr, ok := r.Primary.Attributes[key]; ok {\n\t\t\t\tv, err := hil.InterfaceToVariable(attr)\n\t\t\t\treturn &v, err\n\t\t\t}\n\t\t}\n\t}\n\nMISSING:\n\t// Validation for missing interpolations should happen at a higher\n\t// semantic level. If we reached this point and don't have variables,\n\t// just return the computed value.\n\tif scope == nil && scope.Resource == nil {\n\t\treturn &unknownVariable, nil\n\t}\n\n\t// If the operation is refresh, it isn't an error for a value to\n\t// be unknown. Instead, we return that the value is computed so\n\t// that the graph can continue to refresh other nodes. It doesn't\n\t// matter because the config isn't interpolated anyways.\n\t//\n\t// For a Destroy, we're also fine with computed values, since our goal is\n\t// only to get destroy nodes for existing resources.\n\tif i.Operation == walkRefresh || i.Operation == walkPlanDestroy {\n\t\treturn &unknownVariable, nil\n\t}\n\n\treturn nil, fmt.Errorf(\n\t\t\"Resource '%s' does not have attribute '%s' \"+\n\t\t\t\"for variable '%s'\",\n\t\tid,\n\t\tv.Field,\n\t\tv.FullKey())\n}\n\nfunc (i *Interpolater) computeResourceMultiVariable(\n\tscope *InterpolationScope,\n\tv *config.ResourceVariable) (*ast.Variable, error) {\n\ti.StateLock.RLock()\n\tdefer i.StateLock.RUnlock()\n\n\tunknownVariable := unknownVariable()\n\n\t// Get the information about this resource variable, and verify\n\t// that it exists and such.\n\tmodule, cr, err := i.resourceVariableInfo(scope, v)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Get the keys for all the resources that are created for this resource\n\tcountMax, err := i.resourceCountMax(module, cr, v)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// If count is zero, we return an empty list\n\tif countMax == 0 {\n\t\treturn &ast.Variable{Type: ast.TypeList, Value: []ast.Variable{}}, nil\n\t}\n\n\t// If we have no module in the state yet or count, return unknown\n\tif module == nil || len(module.Resources) == 0 {\n\t\treturn &unknownVariable, nil\n\t}\n\n\tvar values []interface{}\n\tfor idx := 0; idx < countMax; idx++ {\n\t\tid := fmt.Sprintf(\"%s.%d\", v.ResourceId(), idx)\n\n\t\t// ID doesn't have a trailing index. We try both here, but if a value\n\t\t// without a trailing index is found we prefer that. This choice\n\t\t// is for legacy reasons: older versions of TF preferred it.\n\t\tif id == v.ResourceId()+\".0\" {\n\t\t\tpotential := v.ResourceId()\n\t\t\tif _, ok := module.Resources[potential]; ok {\n\t\t\t\tid = potential\n\t\t\t}\n\t\t}\n\n\t\tr, ok := module.Resources[id]\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\n\t\tif r.Primary == nil {\n\t\t\tcontinue\n\t\t}\n\n\t\tif singleAttr, ok := r.Primary.Attributes[v.Field]; ok {\n\t\t\tvalues = append(values, singleAttr)\n\t\t\tcontinue\n\t\t}\n\n\t\tif v.Field == \"id\" && r.Primary.ID != \"\" {\n\t\t\tlog.Printf(\"[WARN] resource %s missing 'id' attribute\", v.ResourceId())\n\t\t\tvalues = append(values, r.Primary.ID)\n\t\t}\n\n\t\t// computed list or map attribute\n\t\t_, isList := r.Primary.Attributes[v.Field+\".#\"]\n\t\t_, isMap := r.Primary.Attributes[v.Field+\".%\"]\n\t\tif !(isList || isMap) {\n\t\t\tcontinue\n\t\t}\n\t\tmultiAttr, err := i.interpolateComplexTypeAttribute(v.Field, r.Primary.Attributes)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tvalues = append(values, multiAttr)\n\t}\n\n\tif len(values) == 0 {\n\t\t// If the operation is refresh, it isn't an error for a value to\n\t\t// be unknown. Instead, we return that the value is computed so\n\t\t// that the graph can continue to refresh other nodes. It doesn't\n\t\t// matter because the config isn't interpolated anyways.\n\t\t//\n\t\t// For a Destroy, we're also fine with computed values, since our goal is\n\t\t// only to get destroy nodes for existing resources.\n\t\t//\n\t\t// For an input walk, computed values are okay to return because we're only\n\t\t// looking for missing variables to prompt the user for.\n\t\tif i.Operation == walkRefresh || i.Operation == walkPlanDestroy || i.Operation == walkDestroy {\n\t\t\treturn &unknownVariable, nil\n\t\t}\n\n\t\treturn nil, fmt.Errorf(\n\t\t\t\"Resource '%s' does not have attribute '%s' \"+\n\t\t\t\t\"for variable '%s'\",\n\t\t\tv.ResourceId(),\n\t\t\tv.Field,\n\t\t\tv.FullKey())\n\t}\n\n\tvariable, err := hil.InterfaceToVariable(values)\n\treturn &variable, err\n}\n\nfunc (i *Interpolater) interpolateComplexTypeAttribute(\n\tresourceID string,\n\tattributes map[string]string) (ast.Variable, error) {\n\t// We can now distinguish between lists and maps in state by the count field:\n\t//    - lists (and by extension, sets) use the traditional .# notation\n\t//    - maps use the newer .% notation\n\t// Consequently here we can decide how to deal with the keys appropriately\n\t// based on whether the type is a map of list.\n\tif lengthAttr, isList := attributes[resourceID+\".#\"]; isList {\n\t\tlog.Printf(\"[DEBUG] Interpolating computed list element attribute %s (%s)\",\n\t\t\tresourceID, lengthAttr)\n\n\t\t// In Terraform's internal dotted representation of list-like attributes, the\n\t\t// \".#\" count field is marked as unknown to indicate \"this whole list is\n\t\t// unknown\". We must honor that meaning here so computed references can be\n\t\t// treated properly during the plan phase.\n\t\tif lengthAttr == config.UnknownVariableValue {\n\t\t\treturn unknownVariable(), nil\n\t\t}\n\n\t\texpanded := flatmap.Expand(attributes, resourceID)\n\t\treturn hil.InterfaceToVariable(expanded)\n\t}\n\n\tif lengthAttr, isMap := attributes[resourceID+\".%\"]; isMap {\n\t\tlog.Printf(\"[DEBUG] Interpolating computed map element attribute %s (%s)\",\n\t\t\tresourceID, lengthAttr)\n\n\t\t// In Terraform's internal dotted representation of map attributes, the\n\t\t// \".%\" count field is marked as unknown to indicate \"this whole list is\n\t\t// unknown\". We must honor that meaning here so computed references can be\n\t\t// treated properly during the plan phase.\n\t\tif lengthAttr == config.UnknownVariableValue {\n\t\t\treturn unknownVariable(), nil\n\t\t}\n\n\t\texpanded := flatmap.Expand(attributes, resourceID)\n\t\treturn hil.InterfaceToVariable(expanded)\n\t}\n\n\treturn ast.Variable{}, fmt.Errorf(\"No complex type %s found\", resourceID)\n}\n\nfunc (i *Interpolater) resourceVariableInfo(\n\tscope *InterpolationScope,\n\tv *config.ResourceVariable) (*ModuleState, *config.Resource, error) {\n\t// Get the module tree that contains our current path. This is\n\t// either the current module (path is empty) or a child.\n\tmodTree := i.Module\n\tif len(scope.Path) > 1 {\n\t\tmodTree = i.Module.Child(scope.Path[1:])\n\t}\n\n\t// Get the resource from the configuration so we can verify\n\t// that the resource is in the configuration and so we can access\n\t// the configuration if we need to.\n\tvar cr *config.Resource\n\tfor _, r := range modTree.Config().Resources {\n\t\tif r.Id() == v.ResourceId() {\n\t\t\tcr = r\n\t\t\tbreak\n\t\t}\n\t}\n\n\t// Get the relevant module\n\tmodule := i.State.ModuleByPath(normalizeModulePath(scope.Path))\n\treturn module, cr, nil\n}\n\nfunc (i *Interpolater) resourceCountMax(\n\tms *ModuleState,\n\tcr *config.Resource,\n\tv *config.ResourceVariable) (int, error) {\n\tid := v.ResourceId()\n\n\t// If we're NOT applying, then we assume we can read the count\n\t// from the state. Plan and so on may not have any state yet so\n\t// we do a full interpolation.\n\t// Don't forget walkDestroy, which is a special case of walkApply\n\tif !(i.Operation == walkApply || i.Operation == walkDestroy) {\n\t\tif cr == nil {\n\t\t\treturn 0, nil\n\t\t}\n\n\t\tcount, err := cr.Count()\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\n\t\treturn count, nil\n\t}\n\n\t// If we have no module state in the apply walk, that suggests we've hit\n\t// a rather awkward edge-case: the resource this variable refers to\n\t// has count = 0 and is the only resource processed so far on this walk,\n\t// and so we've ended up not creating any resource states yet. We don't\n\t// create a module state until the first resource is written into it,\n\t// so the module state doesn't exist when we get here.\n\t//\n\t// In this case we act as we would if we had been passed a module\n\t// with an empty resource state map.\n\tif ms == nil {\n\t\treturn 0, nil\n\t}\n\n\t// We need to determine the list of resource keys to get values from.\n\t// This needs to be sorted so the order is deterministic. We used to\n\t// use \"cr.Count()\" but that doesn't work if the count is interpolated\n\t// and we can't guarantee that so we instead depend on the state.\n\tmax := -1\n\tfor k, s := range ms.Resources {\n\t\t// This resource may have been just removed, in which case the Primary\n\t\t// may be nil, or just empty.\n\t\tif s == nil || s.Primary == nil || len(s.Primary.Attributes) == 0 {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Get the index number for this resource\n\t\tindex := \"\"\n\t\tif k == id {\n\t\t\t// If the key is the id, then its just 0 (no explicit index)\n\t\t\tindex = \"0\"\n\t\t} else if strings.HasPrefix(k, id+\".\") {\n\t\t\t// Grab the index number out of the state\n\t\t\tindex = k[len(id+\".\"):]\n\t\t\tif idx := strings.IndexRune(index, '.'); idx >= 0 {\n\t\t\t\tindex = index[:idx]\n\t\t\t}\n\t\t}\n\n\t\t// If there was no index then this resource didn't match\n\t\t// the one we're looking for, exit.\n\t\tif index == \"\" {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Turn the index into an int\n\t\traw, err := strconv.ParseInt(index, 0, 0)\n\t\tif err != nil {\n\t\t\treturn 0, fmt.Errorf(\n\t\t\t\t\"%s: error parsing index %q as int: %s\",\n\t\t\t\tid, index, err)\n\t\t}\n\n\t\t// Keep track of this index if its the max\n\t\tif new := int(raw); new > max {\n\t\t\tmax = new\n\t\t}\n\t}\n\n\t// If we never found any matching resources in the state, we\n\t// have zero.\n\tif max == -1 {\n\t\treturn 0, nil\n\t}\n\n\t// The result value is \"max+1\" because we're returning the\n\t// max COUNT, not the max INDEX, and we zero-index.\n\treturn max + 1, nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/module_dependencies.go",
    "content": "package terraform\n\nimport (\n\tversion \"github.com/hashicorp/go-version\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/configs\"\n\t\"github.com/hashicorp/terraform/moduledeps\"\n\t\"github.com/hashicorp/terraform/plugin/discovery\"\n\t\"github.com/hashicorp/terraform/states\"\n)\n\n// ConfigTreeDependencies returns the dependencies of the tree of modules\n// described by the given configuration and state.\n//\n// Both configuration and state are required because there can be resources\n// implied by instances in the state that no longer exist in config.\nfunc ConfigTreeDependencies(root *configs.Config, state *states.State) *moduledeps.Module {\n\t// First we walk the configuration tree to build the overall structure\n\t// and capture the explicit/implicit/inherited provider dependencies.\n\tdeps := configTreeConfigDependencies(root, nil)\n\n\t// Next we walk over the resources in the state to catch any additional\n\t// dependencies created by existing resources that are no longer in config.\n\t// Most things we find in state will already be present in 'deps', but\n\t// we're interested in the rare thing that isn't.\n\tconfigTreeMergeStateDependencies(deps, state)\n\n\treturn deps\n}\n\nfunc configTreeConfigDependencies(root *configs.Config, inheritProviders map[string]*configs.Provider) *moduledeps.Module {\n\tif root == nil {\n\t\t// If no config is provided, we'll make a synthetic root.\n\t\t// This isn't necessarily correct if we're called with a nil that\n\t\t// *isn't* at the root, but in practice that can never happen.\n\t\treturn &moduledeps.Module{\n\t\t\tName:      \"root\",\n\t\t\tProviders: make(moduledeps.Providers),\n\t\t}\n\t}\n\n\tname := \"root\"\n\tif len(root.Path) != 0 {\n\t\tname = root.Path[len(root.Path)-1]\n\t}\n\n\tret := &moduledeps.Module{\n\t\tName: name,\n\t}\n\n\tmodule := root.Module\n\n\t// Provider dependencies\n\t{\n\t\tproviders := make(moduledeps.Providers)\n\n\t\t// The main way to declare a provider dependency is explicitly inside\n\t\t// the \"terraform\" block, which allows declaring a requirement without\n\t\t// also creating a configuration.\n\t\tfor fullName, constraints := range module.ProviderRequirements {\n\t\t\tinst := moduledeps.ProviderInstance(fullName)\n\n\t\t\t// The handling here is a bit fiddly because the moduledeps package\n\t\t\t// was designed around the legacy (pre-0.12) configuration model\n\t\t\t// and hasn't yet been revised to handle the new model. As a result,\n\t\t\t// we need to do some translation here.\n\t\t\t// FIXME: Eventually we should adjust the underlying model so we\n\t\t\t// can also retain the source location of each constraint, for\n\t\t\t// more informative output from the \"terraform providers\" command.\n\t\t\tvar rawConstraints version.Constraints\n\t\t\tfor _, constraint := range constraints {\n\t\t\t\trawConstraints = append(rawConstraints, constraint.Required...)\n\t\t\t}\n\t\t\tdiscoConstraints := discovery.NewConstraints(rawConstraints)\n\n\t\t\tproviders[inst] = moduledeps.ProviderDependency{\n\t\t\t\tConstraints: discoConstraints,\n\t\t\t\tReason:      moduledeps.ProviderDependencyExplicit,\n\t\t\t}\n\t\t}\n\n\t\t// Provider configurations can also include version constraints,\n\t\t// allowing for more terse declaration in situations where both a\n\t\t// configuration and a constraint are defined in the same module.\n\t\tfor fullName, pCfg := range module.ProviderConfigs {\n\t\t\tinst := moduledeps.ProviderInstance(fullName)\n\t\t\tdiscoConstraints := discovery.AllVersions\n\t\t\tif pCfg.Version.Required != nil {\n\t\t\t\tdiscoConstraints = discovery.NewConstraints(pCfg.Version.Required)\n\t\t\t}\n\t\t\tif existing, exists := providers[inst]; exists {\n\t\t\t\texisting.Constraints = existing.Constraints.Append(discoConstraints)\n\t\t\t} else {\n\t\t\t\tproviders[inst] = moduledeps.ProviderDependency{\n\t\t\t\t\tConstraints: discoConstraints,\n\t\t\t\t\tReason:      moduledeps.ProviderDependencyExplicit,\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Each resource in the configuration creates an *implicit* provider\n\t\t// dependency, though we'll only record it if there isn't already\n\t\t// an explicit dependency on the same provider.\n\t\tfor _, rc := range module.ManagedResources {\n\t\t\taddr := rc.ProviderConfigAddr()\n\t\t\tinst := moduledeps.ProviderInstance(addr.StringCompact())\n\t\t\tif _, exists := providers[inst]; exists {\n\t\t\t\t// Explicit dependency already present\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\treason := moduledeps.ProviderDependencyImplicit\n\t\t\tif _, inherited := inheritProviders[addr.StringCompact()]; inherited {\n\t\t\t\treason = moduledeps.ProviderDependencyInherited\n\t\t\t}\n\n\t\t\tproviders[inst] = moduledeps.ProviderDependency{\n\t\t\t\tConstraints: discovery.AllVersions,\n\t\t\t\tReason:      reason,\n\t\t\t}\n\t\t}\n\t\tfor _, rc := range module.DataResources {\n\t\t\taddr := rc.ProviderConfigAddr()\n\t\t\tinst := moduledeps.ProviderInstance(addr.StringCompact())\n\t\t\tif _, exists := providers[inst]; exists {\n\t\t\t\t// Explicit dependency already present\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\treason := moduledeps.ProviderDependencyImplicit\n\t\t\tif _, inherited := inheritProviders[addr.String()]; inherited {\n\t\t\t\treason = moduledeps.ProviderDependencyInherited\n\t\t\t}\n\n\t\t\tproviders[inst] = moduledeps.ProviderDependency{\n\t\t\t\tConstraints: discovery.AllVersions,\n\t\t\t\tReason:      reason,\n\t\t\t}\n\t\t}\n\n\t\tret.Providers = providers\n\t}\n\n\tchildInherit := make(map[string]*configs.Provider)\n\tfor k, v := range inheritProviders {\n\t\tchildInherit[k] = v\n\t}\n\tfor k, v := range module.ProviderConfigs {\n\t\tchildInherit[k] = v\n\t}\n\tfor _, c := range root.Children {\n\t\tret.Children = append(ret.Children, configTreeConfigDependencies(c, childInherit))\n\t}\n\n\treturn ret\n}\n\nfunc configTreeMergeStateDependencies(root *moduledeps.Module, state *states.State) {\n\tif state == nil {\n\t\treturn\n\t}\n\n\tfindModule := func(path addrs.ModuleInstance) *moduledeps.Module {\n\t\tmodule := root\n\t\tfor _, step := range path {\n\t\t\tvar next *moduledeps.Module\n\t\t\tfor _, cm := range module.Children {\n\t\t\t\tif cm.Name == step.Name {\n\t\t\t\t\tnext = cm\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif next == nil {\n\t\t\t\t// If we didn't find a next node, we'll need to make one\n\t\t\t\tnext = &moduledeps.Module{\n\t\t\t\t\tName:      step.Name,\n\t\t\t\t\tProviders: make(moduledeps.Providers),\n\t\t\t\t}\n\t\t\t\tmodule.Children = append(module.Children, next)\n\t\t\t}\n\n\t\t\tmodule = next\n\t\t}\n\t\treturn module\n\t}\n\n\tfor _, ms := range state.Modules {\n\t\tmodule := findModule(ms.Addr)\n\n\t\tfor _, rs := range ms.Resources {\n\t\t\tinst := moduledeps.ProviderInstance(rs.ProviderConfig.ProviderConfig.StringCompact())\n\t\t\tif _, exists := module.Providers[inst]; !exists {\n\t\t\t\tmodule.Providers[inst] = moduledeps.ProviderDependency{\n\t\t\t\t\tConstraints: discovery.AllVersions,\n\t\t\t\t\tReason:      moduledeps.ProviderDependencyFromState,\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/node_count_boundary.go",
    "content": "package terraform\n\nimport (\n\t\"github.com/hashicorp/terraform/configs\"\n)\n\n// NodeCountBoundary fixes up any transitions between \"each modes\" in objects\n// saved in state, such as switching from NoEach to EachInt.\ntype NodeCountBoundary struct {\n\tConfig *configs.Config\n}\n\nfunc (n *NodeCountBoundary) Name() string {\n\treturn \"meta.count-boundary (EachMode fixup)\"\n}\n\n// GraphNodeEvalable\nfunc (n *NodeCountBoundary) EvalTree() EvalNode {\n\treturn &EvalCountFixZeroOneBoundaryGlobal{\n\t\tConfig: n.Config,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/node_data_destroy.go",
    "content": "package terraform\n\nimport (\n\t\"github.com/hashicorp/terraform/providers\"\n\t\"github.com/hashicorp/terraform/states\"\n)\n\n// NodeDestroyableDataResourceInstance represents a resource that is \"destroyable\":\n// it is ready to be destroyed.\ntype NodeDestroyableDataResourceInstance struct {\n\t*NodeAbstractResourceInstance\n}\n\n// GraphNodeEvalable\nfunc (n *NodeDestroyableDataResourceInstance) EvalTree() EvalNode {\n\taddr := n.ResourceInstanceAddr()\n\n\tvar providerSchema *ProviderSchema\n\t// We don't need the provider, but we're calling EvalGetProvider to load the\n\t// schema.\n\tvar provider providers.Interface\n\n\t// Just destroy it.\n\tvar state *states.ResourceInstanceObject\n\treturn &EvalSequence{\n\t\tNodes: []EvalNode{\n\t\t\t&EvalGetProvider{\n\t\t\t\tAddr:   n.ResolvedProvider,\n\t\t\t\tOutput: &provider,\n\t\t\t\tSchema: &providerSchema,\n\t\t\t},\n\t\t\t&EvalWriteState{\n\t\t\t\tAddr:           addr.Resource,\n\t\t\t\tState:          &state,\n\t\t\t\tProviderAddr:   n.ResolvedProvider,\n\t\t\t\tProviderSchema: &providerSchema,\n\t\t\t},\n\t\t},\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/node_data_refresh.go",
    "content": "package terraform\n\nimport (\n\t\"github.com/hashicorp/terraform/dag\"\n\t\"github.com/hashicorp/terraform/plans\"\n\t\"github.com/hashicorp/terraform/providers\"\n\t\"github.com/hashicorp/terraform/states\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// NodeRefreshableDataResource represents a resource that is \"refreshable\".\ntype NodeRefreshableDataResource struct {\n\t*NodeAbstractResource\n}\n\nvar (\n\t_ GraphNodeSubPath              = (*NodeRefreshableDataResource)(nil)\n\t_ GraphNodeDynamicExpandable    = (*NodeRefreshableDataResource)(nil)\n\t_ GraphNodeReferenceable        = (*NodeRefreshableDataResource)(nil)\n\t_ GraphNodeReferencer           = (*NodeRefreshableDataResource)(nil)\n\t_ GraphNodeResource             = (*NodeRefreshableDataResource)(nil)\n\t_ GraphNodeAttachResourceConfig = (*NodeRefreshableDataResource)(nil)\n)\n\n// GraphNodeDynamicExpandable\nfunc (n *NodeRefreshableDataResource) DynamicExpand(ctx EvalContext) (*Graph, error) {\n\tvar diags tfdiags.Diagnostics\n\n\tcount, countKnown, countDiags := evaluateResourceCountExpressionKnown(n.Config.Count, ctx)\n\tdiags = diags.Append(countDiags)\n\tif countDiags.HasErrors() {\n\t\treturn nil, diags.Err()\n\t}\n\tif !countKnown {\n\t\t// If the count isn't known yet, we'll skip refreshing and try expansion\n\t\t// again during the plan walk.\n\t\treturn nil, nil\n\t}\n\n\t// Next we need to potentially rename an instance address in the state\n\t// if we're transitioning whether \"count\" is set at all.\n\tfixResourceCountSetTransition(ctx, n.ResourceAddr(), count != -1)\n\n\t// Our graph transformers require access to the full state, so we'll\n\t// temporarily lock it while we work on this.\n\tstate := ctx.State().Lock()\n\tdefer ctx.State().Unlock()\n\n\t// The concrete resource factory we'll use\n\tconcreteResource := func(a *NodeAbstractResourceInstance) dag.Vertex {\n\t\t// Add the config and state since we don't do that via transforms\n\t\ta.Config = n.Config\n\t\ta.ResolvedProvider = n.ResolvedProvider\n\n\t\treturn &NodeRefreshableDataResourceInstance{\n\t\t\tNodeAbstractResourceInstance: a,\n\t\t}\n\t}\n\n\t// We also need a destroyable resource for orphans that are a result of a\n\t// scaled-in count.\n\tconcreteResourceDestroyable := func(a *NodeAbstractResourceInstance) dag.Vertex {\n\t\t// Add the config and provider since we don't do that via transforms\n\t\ta.Config = n.Config\n\t\ta.ResolvedProvider = n.ResolvedProvider\n\n\t\treturn &NodeDestroyableDataResourceInstance{\n\t\t\tNodeAbstractResourceInstance: a,\n\t\t}\n\t}\n\n\t// Start creating the steps\n\tsteps := []GraphTransformer{\n\t\t// Expand the count.\n\t\t&ResourceCountTransformer{\n\t\t\tConcrete: concreteResource,\n\t\t\tSchema:   n.Schema,\n\t\t\tCount:    count,\n\t\t\tAddr:     n.ResourceAddr(),\n\t\t},\n\n\t\t// Add the count orphans. As these are orphaned refresh nodes, we add them\n\t\t// directly as NodeDestroyableDataResource.\n\t\t&OrphanResourceCountTransformer{\n\t\t\tConcrete: concreteResourceDestroyable,\n\t\t\tCount:    count,\n\t\t\tAddr:     n.ResourceAddr(),\n\t\t\tState:    state,\n\t\t},\n\n\t\t// Attach the state\n\t\t&AttachStateTransformer{State: state},\n\n\t\t// Targeting\n\t\t&TargetsTransformer{Targets: n.Targets},\n\n\t\t// Connect references so ordering is correct\n\t\t&ReferenceTransformer{},\n\n\t\t// Make sure there is a single root\n\t\t&RootTransformer{},\n\t}\n\n\t// Build the graph\n\tb := &BasicGraphBuilder{\n\t\tSteps:    steps,\n\t\tValidate: true,\n\t\tName:     \"NodeRefreshableDataResource\",\n\t}\n\n\tgraph, diags := b.Build(ctx.Path())\n\treturn graph, diags.ErrWithWarnings()\n}\n\n// NodeRefreshableDataResourceInstance represents a single resource instance\n// that is refreshable.\ntype NodeRefreshableDataResourceInstance struct {\n\t*NodeAbstractResourceInstance\n}\n\n// GraphNodeEvalable\nfunc (n *NodeRefreshableDataResourceInstance) EvalTree() EvalNode {\n\taddr := n.ResourceInstanceAddr()\n\n\t// These variables are the state for the eval sequence below, and are\n\t// updated through pointers.\n\tvar provider providers.Interface\n\tvar providerSchema *ProviderSchema\n\tvar change *plans.ResourceInstanceChange\n\tvar state *states.ResourceInstanceObject\n\tvar configVal cty.Value\n\n\treturn &EvalSequence{\n\t\tNodes: []EvalNode{\n\t\t\t&EvalGetProvider{\n\t\t\t\tAddr:   n.ResolvedProvider,\n\t\t\t\tOutput: &provider,\n\t\t\t\tSchema: &providerSchema,\n\t\t\t},\n\n\t\t\t// Always destroy the existing state first, since we must\n\t\t\t// make sure that values from a previous read will not\n\t\t\t// get interpolated if we end up needing to defer our\n\t\t\t// loading until apply time.\n\t\t\t&EvalWriteState{\n\t\t\t\tAddr:           addr.Resource,\n\t\t\t\tProviderAddr:   n.ResolvedProvider,\n\t\t\t\tState:          &state, // a pointer to nil, here\n\t\t\t\tProviderSchema: &providerSchema,\n\t\t\t},\n\n\t\t\t&EvalIf{\n\t\t\t\tIf: func(ctx EvalContext) (bool, error) {\n\t\t\t\t\t// If the config explicitly has a depends_on for this\n\t\t\t\t\t// data source, assume the intention is to prevent\n\t\t\t\t\t// refreshing ahead of that dependency, and therefore\n\t\t\t\t\t// we need to deal with this resource during the apply\n\t\t\t\t\t// phase..\n\t\t\t\t\tif len(n.Config.DependsOn) > 0 {\n\t\t\t\t\t\treturn true, EvalEarlyExitError{}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn true, nil\n\t\t\t\t},\n\t\t\t\tThen: EvalNoop{},\n\t\t\t},\n\n\t\t\t// EvalReadData will _attempt_ to read the data source, but may\n\t\t\t// generate an incomplete planned object if the configuration\n\t\t\t// includes values that won't be known until apply.\n\t\t\t&EvalReadData{\n\t\t\t\tAddr:              addr.Resource,\n\t\t\t\tConfig:            n.Config,\n\t\t\t\tDependencies:      n.StateReferences(),\n\t\t\t\tProvider:          &provider,\n\t\t\t\tProviderAddr:      n.ResolvedProvider,\n\t\t\t\tProviderSchema:    &providerSchema,\n\t\t\t\tOutputChange:      &change,\n\t\t\t\tOutputConfigValue: &configVal,\n\t\t\t\tOutputState:       &state,\n\t\t\t},\n\n\t\t\t&EvalIf{\n\t\t\t\tIf: func(ctx EvalContext) (bool, error) {\n\t\t\t\t\treturn (*state).Status != states.ObjectPlanned, nil\n\t\t\t\t},\n\t\t\t\tThen: &EvalSequence{\n\t\t\t\t\tNodes: []EvalNode{\n\t\t\t\t\t\t&EvalWriteState{\n\t\t\t\t\t\t\tAddr:           addr.Resource,\n\t\t\t\t\t\t\tProviderAddr:   n.ResolvedProvider,\n\t\t\t\t\t\t\tState:          &state,\n\t\t\t\t\t\t\tProviderSchema: &providerSchema,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t&EvalUpdateStateHook{},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tElse: &EvalSequence{\n\t\t\t\t\t// We can't deal with this yet, so we'll repeat this step\n\t\t\t\t\t// during the plan walk to produce a planned change to read\n\t\t\t\t\t// this during the apply walk. However, we do still need to\n\t\t\t\t\t// save the generated change and partial state so that\n\t\t\t\t\t// results from it can be included in other data resources\n\t\t\t\t\t// or provider configurations during the refresh walk.\n\t\t\t\t\t// (The planned object we save in the state here will be\n\t\t\t\t\t// pruned out at the end of the refresh walk, returning\n\t\t\t\t\t// it back to being unset again for subsequent walks.)\n\t\t\t\t\tNodes: []EvalNode{\n\t\t\t\t\t\t&EvalWriteDiff{\n\t\t\t\t\t\t\tAddr:           addr.Resource,\n\t\t\t\t\t\t\tChange:         &change,\n\t\t\t\t\t\t\tProviderSchema: &providerSchema,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t&EvalWriteState{\n\t\t\t\t\t\t\tAddr:           addr.Resource,\n\t\t\t\t\t\t\tProviderAddr:   n.ResolvedProvider,\n\t\t\t\t\t\t\tState:          &state,\n\t\t\t\t\t\t\tProviderSchema: &providerSchema,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/node_local.go",
    "content": "package terraform\n\nimport (\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/configs\"\n\t\"github.com/hashicorp/terraform/dag\"\n\t\"github.com/hashicorp/terraform/lang\"\n)\n\n// NodeLocal represents a named local value in a particular module.\n//\n// Local value nodes only have one operation, common to all walk types:\n// evaluate the result and place it in state.\ntype NodeLocal struct {\n\tAddr   addrs.AbsLocalValue\n\tConfig *configs.Local\n}\n\nvar (\n\t_ GraphNodeSubPath       = (*NodeLocal)(nil)\n\t_ RemovableIfNotTargeted = (*NodeLocal)(nil)\n\t_ GraphNodeReferenceable = (*NodeLocal)(nil)\n\t_ GraphNodeReferencer    = (*NodeLocal)(nil)\n\t_ GraphNodeEvalable      = (*NodeLocal)(nil)\n\t_ dag.GraphNodeDotter    = (*NodeLocal)(nil)\n)\n\nfunc (n *NodeLocal) Name() string {\n\treturn n.Addr.String()\n}\n\n// GraphNodeSubPath\nfunc (n *NodeLocal) Path() addrs.ModuleInstance {\n\treturn n.Addr.Module\n}\n\n// RemovableIfNotTargeted\nfunc (n *NodeLocal) RemoveIfNotTargeted() bool {\n\treturn true\n}\n\n// GraphNodeReferenceable\nfunc (n *NodeLocal) ReferenceableAddrs() []addrs.Referenceable {\n\treturn []addrs.Referenceable{n.Addr.LocalValue}\n}\n\n// GraphNodeReferencer\nfunc (n *NodeLocal) References() []*addrs.Reference {\n\trefs, _ := lang.ReferencesInExpr(n.Config.Expr)\n\treturn appendResourceDestroyReferences(refs)\n}\n\n// GraphNodeEvalable\nfunc (n *NodeLocal) EvalTree() EvalNode {\n\treturn &EvalLocal{\n\t\tAddr: n.Addr.LocalValue,\n\t\tExpr: n.Config.Expr,\n\t}\n}\n\n// dag.GraphNodeDotter impl.\nfunc (n *NodeLocal) DotNode(name string, opts *dag.DotOpts) *dag.DotNode {\n\treturn &dag.DotNode{\n\t\tName: name,\n\t\tAttrs: map[string]string{\n\t\t\t\"label\": n.Name(),\n\t\t\t\"shape\": \"note\",\n\t\t},\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/node_module_removed.go",
    "content": "package terraform\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n)\n\n// NodeModuleRemoved represents a module that is no longer in the\n// config.\ntype NodeModuleRemoved struct {\n\tAddr addrs.ModuleInstance\n}\n\nvar (\n\t_ GraphNodeSubPath          = (*NodeModuleRemoved)(nil)\n\t_ GraphNodeEvalable         = (*NodeModuleRemoved)(nil)\n\t_ GraphNodeReferencer       = (*NodeModuleRemoved)(nil)\n\t_ GraphNodeReferenceOutside = (*NodeModuleRemoved)(nil)\n)\n\nfunc (n *NodeModuleRemoved) Name() string {\n\treturn fmt.Sprintf(\"%s (removed)\", n.Addr.String())\n}\n\n// GraphNodeSubPath\nfunc (n *NodeModuleRemoved) Path() addrs.ModuleInstance {\n\treturn n.Addr\n}\n\n// GraphNodeEvalable\nfunc (n *NodeModuleRemoved) EvalTree() EvalNode {\n\treturn &EvalOpFilter{\n\t\tOps: []walkOperation{walkRefresh, walkApply, walkDestroy},\n\t\tNode: &EvalCheckModuleRemoved{\n\t\t\tAddr: n.Addr,\n\t\t},\n\t}\n}\n\nfunc (n *NodeModuleRemoved) ReferenceOutside() (selfPath, referencePath addrs.ModuleInstance) {\n\t// Our \"References\" implementation indicates that this node depends on\n\t// the call to the module it represents, which implicitly depends on\n\t// everything inside the module. That reference must therefore be\n\t// interpreted in terms of our parent module.\n\treturn n.Addr, n.Addr.Parent()\n}\n\nfunc (n *NodeModuleRemoved) References() []*addrs.Reference {\n\t// We depend on the call to the module we represent, because that\n\t// implicitly then depends on everything inside that module.\n\t// Our ReferenceOutside implementation causes this to be interpreted\n\t// within the parent module.\n\n\t_, call := n.Addr.CallInstance()\n\treturn []*addrs.Reference{\n\t\t{\n\t\t\tSubject: call,\n\n\t\t\t// No source range here, because there's nothing reasonable for\n\t\t\t// us to return.\n\t\t},\n\t}\n}\n\n// EvalCheckModuleRemoved is an EvalNode implementation that verifies that\n// a module has been removed from the state as expected.\ntype EvalCheckModuleRemoved struct {\n\tAddr addrs.ModuleInstance\n}\n\nfunc (n *EvalCheckModuleRemoved) Eval(ctx EvalContext) (interface{}, error) {\n\tmod := ctx.State().Module(n.Addr)\n\tif mod != nil {\n\t\t// If we get here then that indicates a bug either in the states\n\t\t// module or in an earlier step of the graph walk, since we should've\n\t\t// pruned out the module when the last resource was removed from it.\n\t\treturn nil, fmt.Errorf(\"leftover module %s in state that should have been removed; this is a bug in Terraform and should be reported\", n.Addr)\n\t}\n\treturn nil, nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/node_module_variable.go",
    "content": "package terraform\n\nimport (\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/configs\"\n\t\"github.com/hashicorp/terraform/dag\"\n\t\"github.com/hashicorp/terraform/lang\"\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// NodeApplyableModuleVariable represents a module variable input during\n// the apply step.\ntype NodeApplyableModuleVariable struct {\n\tAddr   addrs.AbsInputVariableInstance\n\tConfig *configs.Variable // Config is the var in the config\n\tExpr   hcl.Expression    // Expr is the value expression given in the call\n}\n\n// Ensure that we are implementing all of the interfaces we think we are\n// implementing.\nvar (\n\t_ GraphNodeSubPath          = (*NodeApplyableModuleVariable)(nil)\n\t_ RemovableIfNotTargeted    = (*NodeApplyableModuleVariable)(nil)\n\t_ GraphNodeReferenceOutside = (*NodeApplyableModuleVariable)(nil)\n\t_ GraphNodeReferenceable    = (*NodeApplyableModuleVariable)(nil)\n\t_ GraphNodeReferencer       = (*NodeApplyableModuleVariable)(nil)\n\t_ GraphNodeEvalable         = (*NodeApplyableModuleVariable)(nil)\n\t_ dag.GraphNodeDotter       = (*NodeApplyableModuleVariable)(nil)\n)\n\nfunc (n *NodeApplyableModuleVariable) Name() string {\n\treturn n.Addr.String()\n}\n\n// GraphNodeSubPath\nfunc (n *NodeApplyableModuleVariable) Path() addrs.ModuleInstance {\n\t// We execute in the parent scope (above our own module) because\n\t// expressions in our value are resolved in that context.\n\treturn n.Addr.Module.Parent()\n}\n\n// RemovableIfNotTargeted\nfunc (n *NodeApplyableModuleVariable) RemoveIfNotTargeted() bool {\n\t// We need to add this so that this node will be removed if\n\t// it isn't targeted or a dependency of a target.\n\treturn true\n}\n\n// GraphNodeReferenceOutside implementation\nfunc (n *NodeApplyableModuleVariable) ReferenceOutside() (selfPath, referencePath addrs.ModuleInstance) {\n\n\t// Module input variables have their value expressions defined in the\n\t// context of their calling (parent) module, and so references from\n\t// a node of this type should be resolved in the parent module instance.\n\treferencePath = n.Addr.Module.Parent()\n\n\t// Input variables are _referenced_ from their own module, though.\n\tselfPath = n.Addr.Module\n\n\treturn // uses named return values\n}\n\n// GraphNodeReferenceable\nfunc (n *NodeApplyableModuleVariable) ReferenceableAddrs() []addrs.Referenceable {\n\treturn []addrs.Referenceable{n.Addr.Variable}\n}\n\n// GraphNodeReferencer\nfunc (n *NodeApplyableModuleVariable) References() []*addrs.Reference {\n\n\t// If we have no value expression, we cannot depend on anything.\n\tif n.Expr == nil {\n\t\treturn nil\n\t}\n\n\t// Variables in the root don't depend on anything, because their values\n\t// are gathered prior to the graph walk and recorded in the context.\n\tif len(n.Addr.Module) == 0 {\n\t\treturn nil\n\t}\n\n\t// Otherwise, we depend on anything referenced by our value expression.\n\t// We ignore diagnostics here under the assumption that we'll re-eval\n\t// all these things later and catch them then; for our purposes here,\n\t// we only care about valid references.\n\t//\n\t// Due to our GraphNodeReferenceOutside implementation, the addresses\n\t// returned by this function are interpreted in the _parent_ module from\n\t// where our associated variable was declared, which is correct because\n\t// our value expression is assigned within a \"module\" block in the parent\n\t// module.\n\trefs, _ := lang.ReferencesInExpr(n.Expr)\n\treturn refs\n}\n\n// GraphNodeEvalable\nfunc (n *NodeApplyableModuleVariable) EvalTree() EvalNode {\n\t// If we have no value, do nothing\n\tif n.Expr == nil {\n\t\treturn &EvalNoop{}\n\t}\n\n\t// Otherwise, interpolate the value of this variable and set it\n\t// within the variables mapping.\n\tvals := make(map[string]cty.Value)\n\n\t_, call := n.Addr.Module.CallInstance()\n\n\treturn &EvalSequence{\n\t\tNodes: []EvalNode{\n\t\t\t&EvalOpFilter{\n\t\t\t\tOps: []walkOperation{walkRefresh, walkPlan, walkApply,\n\t\t\t\t\twalkDestroy, walkValidate},\n\t\t\t\tNode: &EvalModuleCallArgument{\n\t\t\t\t\tAddr:   n.Addr.Variable,\n\t\t\t\t\tConfig: n.Config,\n\t\t\t\t\tExpr:   n.Expr,\n\t\t\t\t\tValues: vals,\n\n\t\t\t\t\tIgnoreDiagnostics: false,\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t&EvalSetModuleCallArguments{\n\t\t\t\tModule: call,\n\t\t\t\tValues: vals,\n\t\t\t},\n\t\t},\n\t}\n}\n\n// dag.GraphNodeDotter impl.\nfunc (n *NodeApplyableModuleVariable) DotNode(name string, opts *dag.DotOpts) *dag.DotNode {\n\treturn &dag.DotNode{\n\t\tName: name,\n\t\tAttrs: map[string]string{\n\t\t\t\"label\": n.Name(),\n\t\t\t\"shape\": \"note\",\n\t\t},\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/node_output.go",
    "content": "package terraform\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/configs\"\n\t\"github.com/hashicorp/terraform/dag\"\n\t\"github.com/hashicorp/terraform/lang\"\n)\n\n// NodeApplyableOutput represents an output that is \"applyable\":\n// it is ready to be applied.\ntype NodeApplyableOutput struct {\n\tAddr   addrs.AbsOutputValue\n\tConfig *configs.Output // Config is the output in the config\n}\n\nvar (\n\t_ GraphNodeSubPath          = (*NodeApplyableOutput)(nil)\n\t_ RemovableIfNotTargeted    = (*NodeApplyableOutput)(nil)\n\t_ GraphNodeTargetDownstream = (*NodeApplyableOutput)(nil)\n\t_ GraphNodeReferenceable    = (*NodeApplyableOutput)(nil)\n\t_ GraphNodeReferencer       = (*NodeApplyableOutput)(nil)\n\t_ GraphNodeReferenceOutside = (*NodeApplyableOutput)(nil)\n\t_ GraphNodeEvalable         = (*NodeApplyableOutput)(nil)\n\t_ dag.GraphNodeDotter       = (*NodeApplyableOutput)(nil)\n)\n\nfunc (n *NodeApplyableOutput) Name() string {\n\treturn n.Addr.String()\n}\n\n// GraphNodeSubPath\nfunc (n *NodeApplyableOutput) Path() addrs.ModuleInstance {\n\treturn n.Addr.Module\n}\n\n// RemovableIfNotTargeted\nfunc (n *NodeApplyableOutput) RemoveIfNotTargeted() bool {\n\t// We need to add this so that this node will be removed if\n\t// it isn't targeted or a dependency of a target.\n\treturn true\n}\n\n// GraphNodeTargetDownstream\nfunc (n *NodeApplyableOutput) TargetDownstream(targetedDeps, untargetedDeps *dag.Set) bool {\n\t// If any of the direct dependencies of an output are targeted then\n\t// the output must always be targeted as well, so its value will always\n\t// be up-to-date at the completion of an apply walk.\n\treturn true\n}\n\nfunc referenceOutsideForOutput(addr addrs.AbsOutputValue) (selfPath, referencePath addrs.ModuleInstance) {\n\n\t// Output values have their expressions resolved in the context of the\n\t// module where they are defined.\n\treferencePath = addr.Module\n\n\t// ...but they are referenced in the context of their calling module.\n\tselfPath = addr.Module.Parent()\n\n\treturn // uses named return values\n\n}\n\n// GraphNodeReferenceOutside implementation\nfunc (n *NodeApplyableOutput) ReferenceOutside() (selfPath, referencePath addrs.ModuleInstance) {\n\treturn referenceOutsideForOutput(n.Addr)\n}\n\nfunc referenceableAddrsForOutput(addr addrs.AbsOutputValue) []addrs.Referenceable {\n\t// An output in the root module can't be referenced at all.\n\tif addr.Module.IsRoot() {\n\t\treturn nil\n\t}\n\n\t// Otherwise, we can be referenced via a reference to our output name\n\t// on the parent module's call, or via a reference to the entire call.\n\t// e.g. module.foo.bar or just module.foo .\n\t// Note that our ReferenceOutside method causes these addresses to be\n\t// relative to the calling module, not the module where the output\n\t// was declared.\n\t_, outp := addr.ModuleCallOutput()\n\t_, call := addr.Module.CallInstance()\n\treturn []addrs.Referenceable{outp, call}\n\n}\n\n// GraphNodeReferenceable\nfunc (n *NodeApplyableOutput) ReferenceableAddrs() []addrs.Referenceable {\n\treturn referenceableAddrsForOutput(n.Addr)\n}\n\nfunc referencesForOutput(c *configs.Output) []*addrs.Reference {\n\timpRefs, _ := lang.ReferencesInExpr(c.Expr)\n\texpRefs, _ := lang.References(c.DependsOn)\n\tl := len(impRefs) + len(expRefs)\n\tif l == 0 {\n\t\treturn nil\n\t}\n\trefs := make([]*addrs.Reference, 0, l)\n\trefs = append(refs, impRefs...)\n\trefs = append(refs, expRefs...)\n\treturn refs\n\n}\n\n// GraphNodeReferencer\nfunc (n *NodeApplyableOutput) References() []*addrs.Reference {\n\treturn appendResourceDestroyReferences(referencesForOutput(n.Config))\n}\n\n// GraphNodeEvalable\nfunc (n *NodeApplyableOutput) EvalTree() EvalNode {\n\treturn &EvalSequence{\n\t\tNodes: []EvalNode{\n\t\t\t&EvalOpFilter{\n\t\t\t\tOps: []walkOperation{walkRefresh, walkPlan, walkApply, walkValidate, walkDestroy, walkPlanDestroy},\n\t\t\t\tNode: &EvalWriteOutput{\n\t\t\t\t\tAddr:      n.Addr.OutputValue,\n\t\t\t\t\tSensitive: n.Config.Sensitive,\n\t\t\t\t\tExpr:      n.Config.Expr,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n}\n\n// dag.GraphNodeDotter impl.\nfunc (n *NodeApplyableOutput) DotNode(name string, opts *dag.DotOpts) *dag.DotNode {\n\treturn &dag.DotNode{\n\t\tName: name,\n\t\tAttrs: map[string]string{\n\t\t\t\"label\": n.Name(),\n\t\t\t\"shape\": \"note\",\n\t\t},\n\t}\n}\n\n// NodeDestroyableOutput represents an output that is \"destroybale\":\n// its application will remove the output from the state.\ntype NodeDestroyableOutput struct {\n\tAddr   addrs.AbsOutputValue\n\tConfig *configs.Output // Config is the output in the config\n}\n\nvar (\n\t_ GraphNodeSubPath          = (*NodeDestroyableOutput)(nil)\n\t_ RemovableIfNotTargeted    = (*NodeDestroyableOutput)(nil)\n\t_ GraphNodeTargetDownstream = (*NodeDestroyableOutput)(nil)\n\t_ GraphNodeReferencer       = (*NodeDestroyableOutput)(nil)\n\t_ GraphNodeEvalable         = (*NodeDestroyableOutput)(nil)\n\t_ dag.GraphNodeDotter       = (*NodeDestroyableOutput)(nil)\n)\n\nfunc (n *NodeDestroyableOutput) Name() string {\n\treturn fmt.Sprintf(\"%s (destroy)\", n.Addr.String())\n}\n\n// GraphNodeSubPath\nfunc (n *NodeDestroyableOutput) Path() addrs.ModuleInstance {\n\treturn n.Addr.Module\n}\n\n// RemovableIfNotTargeted\nfunc (n *NodeDestroyableOutput) RemoveIfNotTargeted() bool {\n\t// We need to add this so that this node will be removed if\n\t// it isn't targeted or a dependency of a target.\n\treturn true\n}\n\n// This will keep the destroy node in the graph if its corresponding output\n// node is also in the destroy graph.\nfunc (n *NodeDestroyableOutput) TargetDownstream(targetedDeps, untargetedDeps *dag.Set) bool {\n\treturn true\n}\n\n// GraphNodeReferencer\nfunc (n *NodeDestroyableOutput) References() []*addrs.Reference {\n\treturn referencesForOutput(n.Config)\n}\n\n// GraphNodeEvalable\nfunc (n *NodeDestroyableOutput) EvalTree() EvalNode {\n\treturn &EvalDeleteOutput{\n\t\tAddr: n.Addr.OutputValue,\n\t}\n}\n\n// dag.GraphNodeDotter impl.\nfunc (n *NodeDestroyableOutput) DotNode(name string, opts *dag.DotOpts) *dag.DotNode {\n\treturn &dag.DotNode{\n\t\tName: name,\n\t\tAttrs: map[string]string{\n\t\t\t\"label\": n.Name(),\n\t\t\t\"shape\": \"note\",\n\t\t},\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/node_output_orphan.go",
    "content": "package terraform\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n)\n\n// NodeOutputOrphan represents an output that is an orphan.\ntype NodeOutputOrphan struct {\n\tAddr addrs.AbsOutputValue\n}\n\nvar (\n\t_ GraphNodeSubPath          = (*NodeOutputOrphan)(nil)\n\t_ GraphNodeReferenceable    = (*NodeOutputOrphan)(nil)\n\t_ GraphNodeReferenceOutside = (*NodeOutputOrphan)(nil)\n\t_ GraphNodeEvalable         = (*NodeOutputOrphan)(nil)\n)\n\nfunc (n *NodeOutputOrphan) Name() string {\n\treturn fmt.Sprintf(\"%s (orphan)\", n.Addr.String())\n}\n\n// GraphNodeReferenceOutside implementation\nfunc (n *NodeOutputOrphan) ReferenceOutside() (selfPath, referencePath addrs.ModuleInstance) {\n\treturn referenceOutsideForOutput(n.Addr)\n}\n\n// GraphNodeReferenceable\nfunc (n *NodeOutputOrphan) ReferenceableAddrs() []addrs.Referenceable {\n\treturn referenceableAddrsForOutput(n.Addr)\n}\n\n// GraphNodeSubPath\nfunc (n *NodeOutputOrphan) Path() addrs.ModuleInstance {\n\treturn n.Addr.Module\n}\n\n// GraphNodeEvalable\nfunc (n *NodeOutputOrphan) EvalTree() EvalNode {\n\treturn &EvalOpFilter{\n\t\tOps: []walkOperation{walkRefresh, walkApply, walkDestroy},\n\t\tNode: &EvalDeleteOutput{\n\t\t\tAddr: n.Addr.OutputValue,\n\t\t},\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/node_provider.go",
    "content": "package terraform\n\n// NodeApplyableProvider represents a provider during an apply.\ntype NodeApplyableProvider struct {\n\t*NodeAbstractProvider\n}\n\n// GraphNodeEvalable\nfunc (n *NodeApplyableProvider) EvalTree() EvalNode {\n\treturn ProviderEvalTree(n, n.ProviderConfig())\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/node_provider_abstract.go",
    "content": "package terraform\n\nimport (\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/configs\"\n\t\"github.com/hashicorp/terraform/configs/configschema\"\n\n\t\"github.com/hashicorp/terraform/dag\"\n)\n\n// ConcreteProviderNodeFunc is a callback type used to convert an\n// abstract provider to a concrete one of some type.\ntype ConcreteProviderNodeFunc func(*NodeAbstractProvider) dag.Vertex\n\n// NodeAbstractProvider represents a provider that has no associated operations.\n// It registers all the common interfaces across operations for providers.\ntype NodeAbstractProvider struct {\n\tAddr addrs.AbsProviderConfig\n\n\t// The fields below will be automatically set using the Attach\n\t// interfaces if you're running those transforms, but also be explicitly\n\t// set if you already have that information.\n\n\tConfig *configs.Provider\n\tSchema *configschema.Block\n}\n\nvar (\n\t_ GraphNodeSubPath                    = (*NodeAbstractProvider)(nil)\n\t_ RemovableIfNotTargeted              = (*NodeAbstractProvider)(nil)\n\t_ GraphNodeReferencer                 = (*NodeAbstractProvider)(nil)\n\t_ GraphNodeProvider                   = (*NodeAbstractProvider)(nil)\n\t_ GraphNodeAttachProvider             = (*NodeAbstractProvider)(nil)\n\t_ GraphNodeAttachProviderConfigSchema = (*NodeAbstractProvider)(nil)\n\t_ dag.GraphNodeDotter                 = (*NodeAbstractProvider)(nil)\n)\n\nfunc (n *NodeAbstractProvider) Name() string {\n\treturn n.Addr.String()\n}\n\n// GraphNodeSubPath\nfunc (n *NodeAbstractProvider) Path() addrs.ModuleInstance {\n\treturn n.Addr.Module\n}\n\n// RemovableIfNotTargeted\nfunc (n *NodeAbstractProvider) RemoveIfNotTargeted() bool {\n\t// We need to add this so that this node will be removed if\n\t// it isn't targeted or a dependency of a target.\n\treturn true\n}\n\n// GraphNodeReferencer\nfunc (n *NodeAbstractProvider) References() []*addrs.Reference {\n\tif n.Config == nil || n.Schema == nil {\n\t\treturn nil\n\t}\n\n\treturn ReferencesFromConfig(n.Config.Config, n.Schema)\n}\n\n// GraphNodeProvider\nfunc (n *NodeAbstractProvider) ProviderAddr() addrs.AbsProviderConfig {\n\treturn n.Addr\n}\n\n// GraphNodeProvider\nfunc (n *NodeAbstractProvider) ProviderConfig() *configs.Provider {\n\tif n.Config == nil {\n\t\treturn nil\n\t}\n\n\treturn n.Config\n}\n\n// GraphNodeAttachProvider\nfunc (n *NodeAbstractProvider) AttachProvider(c *configs.Provider) {\n\tn.Config = c\n}\n\n// GraphNodeAttachProviderConfigSchema impl.\nfunc (n *NodeAbstractProvider) AttachProviderConfigSchema(schema *configschema.Block) {\n\tn.Schema = schema\n}\n\n// GraphNodeDotter impl.\nfunc (n *NodeAbstractProvider) DotNode(name string, opts *dag.DotOpts) *dag.DotNode {\n\treturn &dag.DotNode{\n\t\tName: name,\n\t\tAttrs: map[string]string{\n\t\t\t\"label\": n.Name(),\n\t\t\t\"shape\": \"diamond\",\n\t\t},\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/node_provider_disabled.go",
    "content": "package terraform\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/hashicorp/terraform/dag\"\n)\n\n// NodeDisabledProvider represents a provider that is disabled. A disabled\n// provider does nothing. It exists to properly set inheritance information\n// for child providers.\ntype NodeDisabledProvider struct {\n\t*NodeAbstractProvider\n}\n\nvar (\n\t_ GraphNodeSubPath        = (*NodeDisabledProvider)(nil)\n\t_ RemovableIfNotTargeted  = (*NodeDisabledProvider)(nil)\n\t_ GraphNodeReferencer     = (*NodeDisabledProvider)(nil)\n\t_ GraphNodeProvider       = (*NodeDisabledProvider)(nil)\n\t_ GraphNodeAttachProvider = (*NodeDisabledProvider)(nil)\n\t_ dag.GraphNodeDotter     = (*NodeDisabledProvider)(nil)\n)\n\nfunc (n *NodeDisabledProvider) Name() string {\n\treturn fmt.Sprintf(\"%s (disabled)\", n.NodeAbstractProvider.Name())\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/node_provider_eval.go",
    "content": "package terraform\n\n// NodeEvalableProvider represents a provider during an \"eval\" walk.\n// This special provider node type just initializes a provider and\n// fetches its schema, without configuring it or otherwise interacting\n// with it.\ntype NodeEvalableProvider struct {\n\t*NodeAbstractProvider\n}\n\n// GraphNodeEvalable\nfunc (n *NodeEvalableProvider) EvalTree() EvalNode {\n\taddr := n.Addr\n\trelAddr := addr.ProviderConfig\n\n\treturn &EvalInitProvider{\n\t\tTypeName: relAddr.Type,\n\t\tAddr:     addr.ProviderConfig,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/node_provisioner.go",
    "content": "package terraform\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/config\"\n)\n\n// NodeProvisioner represents a provider that has no associated operations.\n// It registers all the common interfaces across operations for providers.\ntype NodeProvisioner struct {\n\tNameValue string\n\tPathValue addrs.ModuleInstance\n\n\t// The fields below will be automatically set using the Attach\n\t// interfaces if you're running those transforms, but also be explicitly\n\t// set if you already have that information.\n\n\tConfig *config.ProviderConfig\n}\n\nvar (\n\t_ GraphNodeSubPath     = (*NodeProvisioner)(nil)\n\t_ GraphNodeProvisioner = (*NodeProvisioner)(nil)\n\t_ GraphNodeEvalable    = (*NodeProvisioner)(nil)\n)\n\nfunc (n *NodeProvisioner) Name() string {\n\tresult := fmt.Sprintf(\"provisioner.%s\", n.NameValue)\n\tif len(n.PathValue) > 0 {\n\t\tresult = fmt.Sprintf(\"%s.%s\", n.PathValue.String(), result)\n\t}\n\n\treturn result\n}\n\n// GraphNodeSubPath\nfunc (n *NodeProvisioner) Path() addrs.ModuleInstance {\n\treturn n.PathValue\n}\n\n// GraphNodeProvisioner\nfunc (n *NodeProvisioner) ProvisionerName() string {\n\treturn n.NameValue\n}\n\n// GraphNodeEvalable impl.\nfunc (n *NodeProvisioner) EvalTree() EvalNode {\n\treturn &EvalInitProvisioner{Name: n.NameValue}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/node_resource_abstract.go",
    "content": "package terraform\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"sort\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/configs\"\n\t\"github.com/hashicorp/terraform/configs/configschema\"\n\t\"github.com/hashicorp/terraform/dag\"\n\t\"github.com/hashicorp/terraform/lang\"\n\t\"github.com/hashicorp/terraform/states\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n)\n\n// ConcreteResourceNodeFunc is a callback type used to convert an\n// abstract resource to a concrete one of some type.\ntype ConcreteResourceNodeFunc func(*NodeAbstractResource) dag.Vertex\n\n// GraphNodeResource is implemented by any nodes that represent a resource.\n// The type of operation cannot be assumed, only that this node represents\n// the given resource.\ntype GraphNodeResource interface {\n\tResourceAddr() addrs.AbsResource\n}\n\n// ConcreteResourceInstanceNodeFunc is a callback type used to convert an\n// abstract resource instance to a concrete one of some type.\ntype ConcreteResourceInstanceNodeFunc func(*NodeAbstractResourceInstance) dag.Vertex\n\n// GraphNodeResourceInstance is implemented by any nodes that represent\n// a resource instance. A single resource may have multiple instances if,\n// for example, the \"count\" or \"for_each\" argument is used for it in\n// configuration.\ntype GraphNodeResourceInstance interface {\n\tResourceInstanceAddr() addrs.AbsResourceInstance\n}\n\n// NodeAbstractResource represents a resource that has no associated\n// operations. It registers all the interfaces for a resource that common\n// across multiple operation types.\ntype NodeAbstractResource struct {\n\tAddr addrs.AbsResource // Addr is the address for this resource\n\n\t// The fields below will be automatically set using the Attach\n\t// interfaces if you're running those transforms, but also be explicitly\n\t// set if you already have that information.\n\n\tSchema        *configschema.Block // Schema for processing the configuration body\n\tSchemaVersion uint64              // Schema version of \"Schema\", as decided by the provider\n\tConfig        *configs.Resource   // Config is the resource in the config\n\n\tProvisionerSchemas map[string]*configschema.Block\n\n\tTargets []addrs.Targetable // Set from GraphNodeTargetable\n\n\t// The address of the provider this resource will use\n\tResolvedProvider addrs.AbsProviderConfig\n}\n\nvar (\n\t_ GraphNodeSubPath                 = (*NodeAbstractResource)(nil)\n\t_ GraphNodeReferenceable           = (*NodeAbstractResource)(nil)\n\t_ GraphNodeReferencer              = (*NodeAbstractResource)(nil)\n\t_ GraphNodeProviderConsumer        = (*NodeAbstractResource)(nil)\n\t_ GraphNodeProvisionerConsumer     = (*NodeAbstractResource)(nil)\n\t_ GraphNodeResource                = (*NodeAbstractResource)(nil)\n\t_ GraphNodeAttachResourceConfig    = (*NodeAbstractResource)(nil)\n\t_ GraphNodeAttachResourceSchema    = (*NodeAbstractResource)(nil)\n\t_ GraphNodeAttachProvisionerSchema = (*NodeAbstractResource)(nil)\n\t_ GraphNodeTargetable              = (*NodeAbstractResource)(nil)\n\t_ dag.GraphNodeDotter              = (*NodeAbstractResource)(nil)\n)\n\n// NewNodeAbstractResource creates an abstract resource graph node for\n// the given absolute resource address.\nfunc NewNodeAbstractResource(addr addrs.AbsResource) *NodeAbstractResource {\n\treturn &NodeAbstractResource{\n\t\tAddr: addr,\n\t}\n}\n\n// NodeAbstractResourceInstance represents a resource instance with no\n// associated operations. It embeds NodeAbstractResource but additionally\n// contains an instance key, used to identify one of potentially many\n// instances that were created from a resource in configuration, e.g. using\n// the \"count\" or \"for_each\" arguments.\ntype NodeAbstractResourceInstance struct {\n\tNodeAbstractResource\n\tInstanceKey addrs.InstanceKey\n\n\t// The fields below will be automatically set using the Attach\n\t// interfaces if you're running those transforms, but also be explicitly\n\t// set if you already have that information.\n\n\tResourceState *states.Resource\n}\n\nvar (\n\t_ GraphNodeSubPath                 = (*NodeAbstractResourceInstance)(nil)\n\t_ GraphNodeReferenceable           = (*NodeAbstractResourceInstance)(nil)\n\t_ GraphNodeReferencer              = (*NodeAbstractResourceInstance)(nil)\n\t_ GraphNodeProviderConsumer        = (*NodeAbstractResourceInstance)(nil)\n\t_ GraphNodeProvisionerConsumer     = (*NodeAbstractResourceInstance)(nil)\n\t_ GraphNodeResource                = (*NodeAbstractResourceInstance)(nil)\n\t_ GraphNodeResourceInstance        = (*NodeAbstractResourceInstance)(nil)\n\t_ GraphNodeAttachResourceState     = (*NodeAbstractResourceInstance)(nil)\n\t_ GraphNodeAttachResourceConfig    = (*NodeAbstractResourceInstance)(nil)\n\t_ GraphNodeAttachResourceSchema    = (*NodeAbstractResourceInstance)(nil)\n\t_ GraphNodeAttachProvisionerSchema = (*NodeAbstractResourceInstance)(nil)\n\t_ GraphNodeTargetable              = (*NodeAbstractResourceInstance)(nil)\n\t_ dag.GraphNodeDotter              = (*NodeAbstractResourceInstance)(nil)\n)\n\n// NewNodeAbstractResourceInstance creates an abstract resource instance graph\n// node for the given absolute resource instance address.\nfunc NewNodeAbstractResourceInstance(addr addrs.AbsResourceInstance) *NodeAbstractResourceInstance {\n\t// Due to the fact that we embed NodeAbstractResource, the given address\n\t// actually ends up split between the resource address in the embedded\n\t// object and the InstanceKey field in our own struct. The\n\t// ResourceInstanceAddr method will stick these back together again on\n\t// request.\n\treturn &NodeAbstractResourceInstance{\n\t\tNodeAbstractResource: NodeAbstractResource{\n\t\t\tAddr: addr.ContainingResource(),\n\t\t},\n\t\tInstanceKey: addr.Resource.Key,\n\t}\n}\n\nfunc (n *NodeAbstractResource) Name() string {\n\treturn n.ResourceAddr().String()\n}\n\nfunc (n *NodeAbstractResourceInstance) Name() string {\n\treturn n.ResourceInstanceAddr().String()\n}\n\n// GraphNodeSubPath\nfunc (n *NodeAbstractResource) Path() addrs.ModuleInstance {\n\treturn n.Addr.Module\n}\n\n// GraphNodeReferenceable\nfunc (n *NodeAbstractResource) ReferenceableAddrs() []addrs.Referenceable {\n\treturn []addrs.Referenceable{n.Addr.Resource}\n}\n\n// GraphNodeReferenceable\nfunc (n *NodeAbstractResourceInstance) ReferenceableAddrs() []addrs.Referenceable {\n\taddr := n.ResourceInstanceAddr()\n\treturn []addrs.Referenceable{\n\t\taddr.Resource,\n\n\t\t// A resource instance can also be referenced by the address of its\n\t\t// containing resource, so that e.g. a reference to aws_instance.foo\n\t\t// would match both aws_instance.foo[0] and aws_instance.foo[1].\n\t\taddr.ContainingResource().Resource,\n\t}\n}\n\n// GraphNodeReferencer\nfunc (n *NodeAbstractResource) References() []*addrs.Reference {\n\t// If we have a config then we prefer to use that.\n\tif c := n.Config; c != nil {\n\t\tvar result []*addrs.Reference\n\n\t\tfor _, traversal := range c.DependsOn {\n\t\t\tref, err := addrs.ParseRef(traversal)\n\t\t\tif err != nil {\n\t\t\t\t// We ignore this here, because this isn't a suitable place to return\n\t\t\t\t// errors. This situation should be caught and rejected during\n\t\t\t\t// validation.\n\t\t\t\tlog.Printf(\"[ERROR] Can't parse %#v from depends_on as reference: %s\", traversal, err)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tresult = append(result, ref)\n\t\t}\n\n\t\tif n.Schema == nil {\n\t\t\t// Should never happens, but we'll log if it does so that we can\n\t\t\t// see this easily when debugging.\n\t\t\tlog.Printf(\"[WARN] no schema is attached to %s, so config references cannot be detected\", n.Name())\n\t\t}\n\n\t\trefs, _ := lang.ReferencesInExpr(c.Count)\n\t\tresult = append(result, refs...)\n\t\trefs, _ = lang.ReferencesInBlock(c.Config, n.Schema)\n\t\tresult = append(result, refs...)\n\t\tif c.Managed != nil {\n\t\t\tfor _, p := range c.Managed.Provisioners {\n\t\t\t\tif p.When != configs.ProvisionerWhenCreate {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif p.Connection != nil {\n\t\t\t\t\trefs, _ = lang.ReferencesInBlock(p.Connection.Config, connectionBlockSupersetSchema)\n\t\t\t\t\tresult = append(result, refs...)\n\t\t\t\t}\n\n\t\t\t\tschema := n.ProvisionerSchemas[p.Type]\n\t\t\t\tif schema == nil {\n\t\t\t\t\tlog.Printf(\"[WARN] no schema for provisioner %q is attached to %s, so provisioner block references cannot be detected\", p.Type, n.Name())\n\t\t\t\t}\n\t\t\t\trefs, _ = lang.ReferencesInBlock(p.Config, schema)\n\t\t\t\tresult = append(result, refs...)\n\t\t\t}\n\t\t}\n\t\treturn result\n\t}\n\n\t// Otherwise, we have no references.\n\treturn nil\n}\n\n// GraphNodeReferencer\nfunc (n *NodeAbstractResourceInstance) References() []*addrs.Reference {\n\t// If we have a configuration attached then we'll delegate to our\n\t// embedded abstract resource, which knows how to extract dependencies\n\t// from configuration.\n\tif n.Config != nil {\n\t\tif n.Schema == nil {\n\t\t\t// We'll produce a log message about this out here so that\n\t\t\t// we can include the full instance address, since the equivalent\n\t\t\t// message in NodeAbstractResource.References cannot see it.\n\t\t\tlog.Printf(\"[WARN] no schema is attached to %s, so config references cannot be detected\", n.Name())\n\t\t\treturn nil\n\t\t}\n\t\treturn n.NodeAbstractResource.References()\n\t}\n\n\t// Otherwise, if we have state then we'll use the values stored in state\n\t// as a fallback.\n\tif rs := n.ResourceState; rs != nil {\n\t\tif s := rs.Instance(n.InstanceKey); s != nil {\n\t\t\t// State is still storing dependencies as old-style strings, so we'll\n\t\t\t// need to do a little work here to massage this to the form we now\n\t\t\t// want.\n\t\t\tvar result []*addrs.Reference\n\n\t\t\t// It is (apparently) possible for s.Current to be nil. This proved\n\t\t\t// difficult to reproduce, so we will fix the symptom here and hope\n\t\t\t// to find the root cause another time.\n\t\t\t//\n\t\t\t// https://github.com/hashicorp/terraform/issues/21407\n\t\t\tif s.Current == nil {\n\t\t\t\tlog.Printf(\"[WARN] no current state found for %s\", n.Name())\n\t\t\t} else {\n\t\t\t\tfor _, addr := range s.Current.Dependencies {\n\t\t\t\t\tif addr == nil {\n\t\t\t\t\t\t// Should never happen; indicates a bug in the state loader\n\t\t\t\t\t\tpanic(fmt.Sprintf(\"dependencies for current object on %s contains nil address\", n.ResourceInstanceAddr()))\n\t\t\t\t\t}\n\n\t\t\t\t\t// This is a little weird: we need to manufacture an addrs.Reference\n\t\t\t\t\t// with a fake range here because the state isn't something we can\n\t\t\t\t\t// make source references into.\n\t\t\t\t\tresult = append(result, &addrs.Reference{\n\t\t\t\t\t\tSubject: addr,\n\t\t\t\t\t\tSourceRange: tfdiags.SourceRange{\n\t\t\t\t\t\t\tFilename: \"(state file)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result\n\t\t}\n\t}\n\n\t// If we have neither config nor state then we have no references.\n\treturn nil\n}\n\n// converts an instance address to the legacy dotted notation\nfunc dottedInstanceAddr(tr addrs.ResourceInstance) string {\n\t// The legacy state format uses dot-separated instance keys,\n\t// rather than bracketed as in our modern syntax.\n\tvar suffix string\n\tswitch tk := tr.Key.(type) {\n\tcase addrs.IntKey:\n\t\tsuffix = fmt.Sprintf(\".%d\", int(tk))\n\tcase addrs.StringKey:\n\t\tsuffix = fmt.Sprintf(\".%s\", string(tk))\n\t}\n\treturn tr.Resource.String() + suffix\n}\n\n// StateReferences returns the dependencies to put into the state for\n// this resource.\nfunc (n *NodeAbstractResourceInstance) StateReferences() []addrs.Referenceable {\n\tselfAddrs := n.ReferenceableAddrs()\n\n\t// Since we don't include the source location references in our\n\t// results from this method, we'll also filter out duplicates:\n\t// there's no point in listing the same object twice without\n\t// that additional context.\n\tseen := map[string]struct{}{}\n\n\t// Pretend that we've already \"seen\" all of our own addresses so that we\n\t// won't record self-references in the state. This can arise if, for\n\t// example, a provisioner for a resource refers to the resource itself,\n\t// which is valid (since provisioners always run after apply) but should\n\t// not create an explicit dependency edge.\n\tfor _, selfAddr := range selfAddrs {\n\t\tseen[selfAddr.String()] = struct{}{}\n\t\tif riAddr, ok := selfAddr.(addrs.ResourceInstance); ok {\n\t\t\tseen[riAddr.ContainingResource().String()] = struct{}{}\n\t\t}\n\t}\n\n\tdepsRaw := n.References()\n\tdeps := make([]addrs.Referenceable, 0, len(depsRaw))\n\tfor _, d := range depsRaw {\n\t\tsubj := d.Subject\n\t\tif mco, isOutput := subj.(addrs.ModuleCallOutput); isOutput {\n\t\t\t// For state dependencies, we simplify outputs to just refer\n\t\t\t// to the module as a whole. It's not really clear why we do this,\n\t\t\t// but this logic is preserved from before the 0.12 rewrite of\n\t\t\t// this function.\n\t\t\tsubj = mco.Call\n\t\t}\n\n\t\tk := subj.String()\n\t\tif _, exists := seen[k]; exists {\n\t\t\tcontinue\n\t\t}\n\t\tseen[k] = struct{}{}\n\t\tswitch tr := subj.(type) {\n\t\tcase addrs.ResourceInstance:\n\t\t\tdeps = append(deps, tr)\n\t\tcase addrs.Resource:\n\t\t\tdeps = append(deps, tr)\n\t\tcase addrs.ModuleCallInstance:\n\t\t\tdeps = append(deps, tr)\n\t\tdefault:\n\t\t\t// No other reference types are recorded in the state.\n\t\t}\n\t}\n\n\t// We'll also sort them, since that'll avoid creating changes in the\n\t// serialized state that make no semantic difference.\n\tsort.Slice(deps, func(i, j int) bool {\n\t\t// Simple string-based sort because we just care about consistency,\n\t\t// not user-friendliness.\n\t\treturn deps[i].String() < deps[j].String()\n\t})\n\n\treturn deps\n}\n\nfunc (n *NodeAbstractResource) SetProvider(p addrs.AbsProviderConfig) {\n\tn.ResolvedProvider = p\n}\n\n// GraphNodeProviderConsumer\nfunc (n *NodeAbstractResource) ProvidedBy() (addrs.AbsProviderConfig, bool) {\n\t// If we have a config we prefer that above all else\n\tif n.Config != nil {\n\t\trelAddr := n.Config.ProviderConfigAddr()\n\t\treturn relAddr.Absolute(n.Path()), false\n\t}\n\n\t// Use our type and containing module path to guess a provider configuration address\n\treturn n.Addr.Resource.DefaultProviderConfig().Absolute(n.Addr.Module), false\n}\n\n// GraphNodeProviderConsumer\nfunc (n *NodeAbstractResourceInstance) ProvidedBy() (addrs.AbsProviderConfig, bool) {\n\t// If we have a config we prefer that above all else\n\tif n.Config != nil {\n\t\trelAddr := n.Config.ProviderConfigAddr()\n\t\treturn relAddr.Absolute(n.Path()), false\n\t}\n\n\t// If we have state, then we will use the provider from there\n\tif n.ResourceState != nil {\n\t\t// An address from the state must match exactly, since we must ensure\n\t\t// we refresh/destroy a resource with the same provider configuration\n\t\t// that created it.\n\t\treturn n.ResourceState.ProviderConfig, true\n\t}\n\n\t// Use our type and containing module path to guess a provider configuration address\n\treturn n.Addr.Resource.DefaultProviderConfig().Absolute(n.Path()), false\n}\n\n// GraphNodeProvisionerConsumer\nfunc (n *NodeAbstractResource) ProvisionedBy() []string {\n\t// If we have no configuration, then we have no provisioners\n\tif n.Config == nil || n.Config.Managed == nil {\n\t\treturn nil\n\t}\n\n\t// Build the list of provisioners we need based on the configuration.\n\t// It is okay to have duplicates here.\n\tresult := make([]string, len(n.Config.Managed.Provisioners))\n\tfor i, p := range n.Config.Managed.Provisioners {\n\t\tresult[i] = p.Type\n\t}\n\n\treturn result\n}\n\n// GraphNodeProvisionerConsumer\nfunc (n *NodeAbstractResource) AttachProvisionerSchema(name string, schema *configschema.Block) {\n\tif n.ProvisionerSchemas == nil {\n\t\tn.ProvisionerSchemas = make(map[string]*configschema.Block)\n\t}\n\tn.ProvisionerSchemas[name] = schema\n}\n\n// GraphNodeResource\nfunc (n *NodeAbstractResource) ResourceAddr() addrs.AbsResource {\n\treturn n.Addr\n}\n\n// GraphNodeResourceInstance\nfunc (n *NodeAbstractResourceInstance) ResourceInstanceAddr() addrs.AbsResourceInstance {\n\treturn n.NodeAbstractResource.Addr.Instance(n.InstanceKey)\n}\n\n// GraphNodeAddressable, TODO: remove, used by target, should unify\nfunc (n *NodeAbstractResource) ResourceAddress() *ResourceAddress {\n\treturn NewLegacyResourceAddress(n.Addr)\n}\n\n// GraphNodeTargetable\nfunc (n *NodeAbstractResource) SetTargets(targets []addrs.Targetable) {\n\tn.Targets = targets\n}\n\n// GraphNodeAttachResourceState\nfunc (n *NodeAbstractResourceInstance) AttachResourceState(s *states.Resource) {\n\tn.ResourceState = s\n}\n\n// GraphNodeAttachResourceConfig\nfunc (n *NodeAbstractResource) AttachResourceConfig(c *configs.Resource) {\n\tn.Config = c\n}\n\n// GraphNodeAttachResourceSchema impl\nfunc (n *NodeAbstractResource) AttachResourceSchema(schema *configschema.Block, version uint64) {\n\tn.Schema = schema\n\tn.SchemaVersion = version\n}\n\n// GraphNodeDotter impl.\nfunc (n *NodeAbstractResource) DotNode(name string, opts *dag.DotOpts) *dag.DotNode {\n\treturn &dag.DotNode{\n\t\tName: name,\n\t\tAttrs: map[string]string{\n\t\t\t\"label\": n.Name(),\n\t\t\t\"shape\": \"box\",\n\t\t},\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/node_resource_apply.go",
    "content": "package terraform\n\nimport (\n\t\"log\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/dag\"\n\t\"github.com/hashicorp/terraform/lang\"\n)\n\n// NodeApplyableResource represents a resource that is \"applyable\":\n// it may need to have its record in the state adjusted to match configuration.\n//\n// Unlike in the plan walk, this resource node does not DynamicExpand. Instead,\n// it should be inserted into the same graph as any instances of the nodes\n// with dependency edges ensuring that the resource is evaluated before any\n// of its instances, which will turn ensure that the whole-resource record\n// in the state is suitably prepared to receive any updates to instances.\ntype NodeApplyableResource struct {\n\t*NodeAbstractResource\n}\n\nvar (\n\t_ GraphNodeResource             = (*NodeApplyableResource)(nil)\n\t_ GraphNodeEvalable             = (*NodeApplyableResource)(nil)\n\t_ GraphNodeProviderConsumer     = (*NodeApplyableResource)(nil)\n\t_ GraphNodeAttachResourceConfig = (*NodeApplyableResource)(nil)\n\t_ GraphNodeReferencer           = (*NodeApplyableResource)(nil)\n)\n\nfunc (n *NodeApplyableResource) Name() string {\n\treturn n.NodeAbstractResource.Name() + \" (prepare state)\"\n}\n\nfunc (n *NodeApplyableResource) References() []*addrs.Reference {\n\tif n.Config == nil {\n\t\tlog.Printf(\"[WARN] NodeApplyableResource %q: no configuration, so can't determine References\", dag.VertexName(n))\n\t\treturn nil\n\t}\n\n\tvar result []*addrs.Reference\n\n\t// Since this node type only updates resource-level metadata, we only\n\t// need to worry about the parts of the configuration that affect\n\t// our \"each mode\": the count and for_each meta-arguments.\n\trefs, _ := lang.ReferencesInExpr(n.Config.Count)\n\tresult = append(result, refs...)\n\trefs, _ = lang.ReferencesInExpr(n.Config.ForEach)\n\tresult = append(result, refs...)\n\n\treturn result\n}\n\n// GraphNodeEvalable\nfunc (n *NodeApplyableResource) EvalTree() EvalNode {\n\taddr := n.ResourceAddr()\n\tconfig := n.Config\n\tproviderAddr := n.ResolvedProvider\n\n\tif config == nil {\n\t\t// Nothing to do, then.\n\t\tlog.Printf(\"[TRACE] NodeApplyableResource: no configuration present for %s\", addr)\n\t\treturn &EvalNoop{}\n\t}\n\n\treturn &EvalWriteResourceState{\n\t\tAddr:         addr.Resource,\n\t\tConfig:       config,\n\t\tProviderAddr: providerAddr,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/node_resource_apply_instance.go",
    "content": "package terraform\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/zclconf/go-cty/cty\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/configs\"\n\t\"github.com/hashicorp/terraform/plans\"\n\t\"github.com/hashicorp/terraform/providers\"\n\t\"github.com/hashicorp/terraform/states\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n)\n\n// NodeApplyableResourceInstance represents a resource instance that is\n// \"applyable\": it is ready to be applied and is represented by a diff.\n//\n// This node is for a specific instance of a resource. It will usually be\n// accompanied in the graph by a NodeApplyableResource representing its\n// containing resource, and should depend on that node to ensure that the\n// state is properly prepared to receive changes to instances.\ntype NodeApplyableResourceInstance struct {\n\t*NodeAbstractResourceInstance\n\n\tdestroyNode      GraphNodeDestroyerCBD\n\tgraphNodeDeposer // implementation of GraphNodeDeposer\n}\n\nvar (\n\t_ GraphNodeResource         = (*NodeApplyableResourceInstance)(nil)\n\t_ GraphNodeResourceInstance = (*NodeApplyableResourceInstance)(nil)\n\t_ GraphNodeCreator          = (*NodeApplyableResourceInstance)(nil)\n\t_ GraphNodeReferencer       = (*NodeApplyableResourceInstance)(nil)\n\t_ GraphNodeDeposer          = (*NodeApplyableResourceInstance)(nil)\n\t_ GraphNodeEvalable         = (*NodeApplyableResourceInstance)(nil)\n)\n\n// GraphNodeAttachDestroyer\nfunc (n *NodeApplyableResourceInstance) AttachDestroyNode(d GraphNodeDestroyerCBD) {\n\tn.destroyNode = d\n}\n\n// createBeforeDestroy checks this nodes config status and the status af any\n// companion destroy node for CreateBeforeDestroy.\nfunc (n *NodeApplyableResourceInstance) createBeforeDestroy() bool {\n\tcbd := false\n\n\tif n.Config != nil && n.Config.Managed != nil {\n\t\tcbd = n.Config.Managed.CreateBeforeDestroy\n\t}\n\n\tif n.destroyNode != nil {\n\t\tcbd = cbd || n.destroyNode.CreateBeforeDestroy()\n\t}\n\n\treturn cbd\n}\n\n// GraphNodeCreator\nfunc (n *NodeApplyableResourceInstance) CreateAddr() *addrs.AbsResourceInstance {\n\taddr := n.ResourceInstanceAddr()\n\treturn &addr\n}\n\n// GraphNodeReferencer, overriding NodeAbstractResourceInstance\nfunc (n *NodeApplyableResourceInstance) References() []*addrs.Reference {\n\t// Start with the usual resource instance implementation\n\tret := n.NodeAbstractResourceInstance.References()\n\n\t// Applying a resource must also depend on the destruction of any of its\n\t// dependencies, since this may for example affect the outcome of\n\t// evaluating an entire list of resources with \"count\" set (by reducing\n\t// the count).\n\t//\n\t// However, we can't do this in create_before_destroy mode because that\n\t// would create a dependency cycle. We make a compromise here of requiring\n\t// changes to be updated across two applies in this case, since the first\n\t// plan will use the old values.\n\tif !n.createBeforeDestroy() {\n\t\tfor _, ref := range ret {\n\t\t\tswitch tr := ref.Subject.(type) {\n\t\t\tcase addrs.ResourceInstance:\n\t\t\t\tnewRef := *ref // shallow copy so we can mutate\n\t\t\t\tnewRef.Subject = tr.Phase(addrs.ResourceInstancePhaseDestroy)\n\t\t\t\tnewRef.Remaining = nil // can't access attributes of something being destroyed\n\t\t\t\tret = append(ret, &newRef)\n\t\t\tcase addrs.Resource:\n\t\t\t\tnewRef := *ref // shallow copy so we can mutate\n\t\t\t\tnewRef.Subject = tr.Phase(addrs.ResourceInstancePhaseDestroy)\n\t\t\t\tnewRef.Remaining = nil // can't access attributes of something being destroyed\n\t\t\t\tret = append(ret, &newRef)\n\t\t\t}\n\t\t}\n\t}\n\n\treturn ret\n}\n\n// GraphNodeEvalable\nfunc (n *NodeApplyableResourceInstance) EvalTree() EvalNode {\n\taddr := n.ResourceInstanceAddr()\n\n\t// State still uses legacy-style internal ids, so we need to shim to get\n\t// a suitable key to use.\n\tstateId := NewLegacyResourceInstanceAddress(addr).stateId()\n\n\t// Determine the dependencies for the state.\n\tstateDeps := n.StateReferences()\n\n\tif n.Config == nil {\n\t\t// This should not be possible, but we've got here in at least one\n\t\t// case as discussed in the following issue:\n\t\t//    https://github.com/hashicorp/terraform/issues/21258\n\t\t// To avoid an outright crash here, we'll instead return an explicit\n\t\t// error.\n\t\tvar diags tfdiags.Diagnostics\n\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\ttfdiags.Error,\n\t\t\t\"Resource node has no configuration attached\",\n\t\t\tfmt.Sprintf(\n\t\t\t\t\"The graph node for %s has no configuration attached to it. This suggests a bug in Terraform's apply graph builder; please report it!\",\n\t\t\t\taddr,\n\t\t\t),\n\t\t))\n\t\terr := diags.Err()\n\t\treturn &EvalReturnError{\n\t\t\tError: &err,\n\t\t}\n\t}\n\n\t// Eval info is different depending on what kind of resource this is\n\tswitch n.Config.Mode {\n\tcase addrs.ManagedResourceMode:\n\t\treturn n.evalTreeManagedResource(addr, stateId, stateDeps)\n\tcase addrs.DataResourceMode:\n\t\treturn n.evalTreeDataResource(addr, stateId, stateDeps)\n\tdefault:\n\t\tpanic(fmt.Errorf(\"unsupported resource mode %s\", n.Config.Mode))\n\t}\n}\n\nfunc (n *NodeApplyableResourceInstance) evalTreeDataResource(addr addrs.AbsResourceInstance, stateId string, stateDeps []addrs.Referenceable) EvalNode {\n\tvar provider providers.Interface\n\tvar providerSchema *ProviderSchema\n\tvar change *plans.ResourceInstanceChange\n\tvar state *states.ResourceInstanceObject\n\n\treturn &EvalSequence{\n\t\tNodes: []EvalNode{\n\t\t\t&EvalGetProvider{\n\t\t\t\tAddr:   n.ResolvedProvider,\n\t\t\t\tOutput: &provider,\n\t\t\t\tSchema: &providerSchema,\n\t\t\t},\n\n\t\t\t// Get the saved diff for apply\n\t\t\t&EvalReadDiff{\n\t\t\t\tAddr:           addr.Resource,\n\t\t\t\tProviderSchema: &providerSchema,\n\t\t\t\tChange:         &change,\n\t\t\t},\n\n\t\t\t// Stop early if we don't actually have a diff\n\t\t\t&EvalIf{\n\t\t\t\tIf: func(ctx EvalContext) (bool, error) {\n\t\t\t\t\tif change == nil {\n\t\t\t\t\t\treturn true, EvalEarlyExitError{}\n\t\t\t\t\t}\n\t\t\t\t\treturn true, nil\n\t\t\t\t},\n\t\t\t\tThen: EvalNoop{},\n\t\t\t},\n\n\t\t\t// In this particular call to EvalReadData we include our planned\n\t\t\t// change, which signals that we expect this read to complete fully\n\t\t\t// with no unknown values; it'll produce an error if not.\n\t\t\t&EvalReadData{\n\t\t\t\tAddr:           addr.Resource,\n\t\t\t\tConfig:         n.Config,\n\t\t\t\tDependencies:   n.StateReferences(),\n\t\t\t\tPlanned:        &change, // setting this indicates that the result must be complete\n\t\t\t\tProvider:       &provider,\n\t\t\t\tProviderAddr:   n.ResolvedProvider,\n\t\t\t\tProviderSchema: &providerSchema,\n\t\t\t\tOutputState:    &state,\n\t\t\t},\n\n\t\t\t&EvalWriteState{\n\t\t\t\tAddr:           addr.Resource,\n\t\t\t\tProviderAddr:   n.ResolvedProvider,\n\t\t\t\tProviderSchema: &providerSchema,\n\t\t\t\tState:          &state,\n\t\t\t},\n\n\t\t\t// Clear the diff now that we've applied it, so\n\t\t\t// later nodes won't see a diff that's now a no-op.\n\t\t\t&EvalWriteDiff{\n\t\t\t\tAddr:           addr.Resource,\n\t\t\t\tProviderSchema: &providerSchema,\n\t\t\t\tChange:         nil,\n\t\t\t},\n\n\t\t\t&EvalUpdateStateHook{},\n\t\t},\n\t}\n}\n\nfunc (n *NodeApplyableResourceInstance) evalTreeManagedResource(addr addrs.AbsResourceInstance, stateId string, stateDeps []addrs.Referenceable) EvalNode {\n\t// Declare a bunch of variables that are used for state during\n\t// evaluation. Most of this are written to by-address below.\n\tvar provider providers.Interface\n\tvar providerSchema *ProviderSchema\n\tvar diff, diffApply *plans.ResourceInstanceChange\n\tvar state *states.ResourceInstanceObject\n\tvar err error\n\tvar createNew bool\n\tvar createBeforeDestroyEnabled bool\n\tvar configVal cty.Value\n\tvar deposedKey states.DeposedKey\n\n\treturn &EvalSequence{\n\t\tNodes: []EvalNode{\n\t\t\t&EvalGetProvider{\n\t\t\t\tAddr:   n.ResolvedProvider,\n\t\t\t\tOutput: &provider,\n\t\t\t\tSchema: &providerSchema,\n\t\t\t},\n\n\t\t\t// Get the saved diff for apply\n\t\t\t&EvalReadDiff{\n\t\t\t\tAddr:           addr.Resource,\n\t\t\t\tProviderSchema: &providerSchema,\n\t\t\t\tChange:         &diffApply,\n\t\t\t},\n\n\t\t\t// We don't want to do any destroys\n\t\t\t// (these are handled by NodeDestroyResourceInstance instead)\n\t\t\t&EvalIf{\n\t\t\t\tIf: func(ctx EvalContext) (bool, error) {\n\t\t\t\t\tif diffApply == nil {\n\t\t\t\t\t\treturn true, EvalEarlyExitError{}\n\t\t\t\t\t}\n\t\t\t\t\tif diffApply.Action == plans.Delete {\n\t\t\t\t\t\treturn true, EvalEarlyExitError{}\n\t\t\t\t\t}\n\t\t\t\t\treturn true, nil\n\t\t\t\t},\n\t\t\t\tThen: EvalNoop{},\n\t\t\t},\n\n\t\t\t&EvalIf{\n\t\t\t\tIf: func(ctx EvalContext) (bool, error) {\n\t\t\t\t\tdestroy := false\n\t\t\t\t\tif diffApply != nil {\n\t\t\t\t\t\tdestroy = (diffApply.Action == plans.Delete || diffApply.Action.IsReplace())\n\t\t\t\t\t}\n\t\t\t\t\tif destroy && n.createBeforeDestroy() {\n\t\t\t\t\t\tcreateBeforeDestroyEnabled = true\n\t\t\t\t\t}\n\t\t\t\t\treturn createBeforeDestroyEnabled, nil\n\t\t\t\t},\n\t\t\t\tThen: &EvalDeposeState{\n\t\t\t\t\tAddr:      addr.Resource,\n\t\t\t\t\tForceKey:  n.PreallocatedDeposedKey,\n\t\t\t\t\tOutputKey: &deposedKey,\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t&EvalReadState{\n\t\t\t\tAddr:           addr.Resource,\n\t\t\t\tProvider:       &provider,\n\t\t\t\tProviderSchema: &providerSchema,\n\n\t\t\t\tOutput: &state,\n\t\t\t},\n\n\t\t\t// Get the saved diff\n\t\t\t&EvalReadDiff{\n\t\t\t\tAddr:           addr.Resource,\n\t\t\t\tProviderSchema: &providerSchema,\n\t\t\t\tChange:         &diff,\n\t\t\t},\n\n\t\t\t// Make a new diff, in case we've learned new values in the state\n\t\t\t// during apply which we can now incorporate.\n\t\t\t&EvalDiff{\n\t\t\t\tAddr:           addr.Resource,\n\t\t\t\tConfig:         n.Config,\n\t\t\t\tProvider:       &provider,\n\t\t\t\tProviderAddr:   n.ResolvedProvider,\n\t\t\t\tProviderSchema: &providerSchema,\n\t\t\t\tState:          &state,\n\t\t\t\tPreviousDiff:   &diff,\n\t\t\t\tOutputChange:   &diffApply,\n\t\t\t\tOutputValue:    &configVal,\n\t\t\t\tOutputState:    &state,\n\t\t\t},\n\n\t\t\t// Compare the diffs\n\t\t\t&EvalCheckPlannedChange{\n\t\t\t\tAddr:           addr.Resource,\n\t\t\t\tProviderAddr:   n.ResolvedProvider,\n\t\t\t\tProviderSchema: &providerSchema,\n\t\t\t\tPlanned:        &diff,\n\t\t\t\tActual:         &diffApply,\n\t\t\t},\n\n\t\t\t&EvalGetProvider{\n\t\t\t\tAddr:   n.ResolvedProvider,\n\t\t\t\tOutput: &provider,\n\t\t\t\tSchema: &providerSchema,\n\t\t\t},\n\t\t\t&EvalReadState{\n\t\t\t\tAddr:           addr.Resource,\n\t\t\t\tProvider:       &provider,\n\t\t\t\tProviderSchema: &providerSchema,\n\n\t\t\t\tOutput: &state,\n\t\t\t},\n\n\t\t\t&EvalReduceDiff{\n\t\t\t\tAddr:      addr.Resource,\n\t\t\t\tInChange:  &diffApply,\n\t\t\t\tDestroy:   false,\n\t\t\t\tOutChange: &diffApply,\n\t\t\t},\n\n\t\t\t// EvalReduceDiff may have simplified our planned change\n\t\t\t// into a NoOp if it only requires destroying, since destroying\n\t\t\t// is handled by NodeDestroyResourceInstance.\n\t\t\t&EvalIf{\n\t\t\t\tIf: func(ctx EvalContext) (bool, error) {\n\t\t\t\t\tif diffApply == nil || diffApply.Action == plans.NoOp {\n\t\t\t\t\t\treturn true, EvalEarlyExitError{}\n\t\t\t\t\t}\n\t\t\t\t\treturn true, nil\n\t\t\t\t},\n\t\t\t\tThen: EvalNoop{},\n\t\t\t},\n\n\t\t\t// Call pre-apply hook\n\t\t\t&EvalApplyPre{\n\t\t\t\tAddr:   addr.Resource,\n\t\t\t\tState:  &state,\n\t\t\t\tChange: &diffApply,\n\t\t\t},\n\t\t\t&EvalApply{\n\t\t\t\tAddr:           addr.Resource,\n\t\t\t\tConfig:         n.Config,\n\t\t\t\tDependencies:   n.StateReferences(),\n\t\t\t\tState:          &state,\n\t\t\t\tChange:         &diffApply,\n\t\t\t\tProvider:       &provider,\n\t\t\t\tProviderAddr:   n.ResolvedProvider,\n\t\t\t\tProviderSchema: &providerSchema,\n\t\t\t\tOutput:         &state,\n\t\t\t\tError:          &err,\n\t\t\t\tCreateNew:      &createNew,\n\t\t\t},\n\t\t\t&EvalMaybeTainted{\n\t\t\t\tAddr:        addr.Resource,\n\t\t\t\tState:       &state,\n\t\t\t\tChange:      &diffApply,\n\t\t\t\tError:       &err,\n\t\t\t\tStateOutput: &state,\n\t\t\t},\n\t\t\t&EvalWriteState{\n\t\t\t\tAddr:           addr.Resource,\n\t\t\t\tProviderAddr:   n.ResolvedProvider,\n\t\t\t\tProviderSchema: &providerSchema,\n\t\t\t\tState:          &state,\n\t\t\t},\n\t\t\t&EvalApplyProvisioners{\n\t\t\t\tAddr:           addr.Resource,\n\t\t\t\tState:          &state, // EvalApplyProvisioners will skip if already tainted\n\t\t\t\tResourceConfig: n.Config,\n\t\t\t\tCreateNew:      &createNew,\n\t\t\t\tError:          &err,\n\t\t\t\tWhen:           configs.ProvisionerWhenCreate,\n\t\t\t},\n\t\t\t&EvalMaybeTainted{\n\t\t\t\tAddr:        addr.Resource,\n\t\t\t\tState:       &state,\n\t\t\t\tChange:      &diffApply,\n\t\t\t\tError:       &err,\n\t\t\t\tStateOutput: &state,\n\t\t\t},\n\t\t\t&EvalWriteState{\n\t\t\t\tAddr:           addr.Resource,\n\t\t\t\tProviderAddr:   n.ResolvedProvider,\n\t\t\t\tProviderSchema: &providerSchema,\n\t\t\t\tState:          &state,\n\t\t\t},\n\t\t\t&EvalIf{\n\t\t\t\tIf: func(ctx EvalContext) (bool, error) {\n\t\t\t\t\treturn createBeforeDestroyEnabled && err != nil, nil\n\t\t\t\t},\n\t\t\t\tThen: &EvalMaybeRestoreDeposedObject{\n\t\t\t\t\tAddr: addr.Resource,\n\t\t\t\t\tKey:  &deposedKey,\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// We clear the diff out here so that future nodes\n\t\t\t// don't see a diff that is already complete. There\n\t\t\t// is no longer a diff!\n\t\t\t&EvalIf{\n\t\t\t\tIf: func(ctx EvalContext) (bool, error) {\n\t\t\t\t\tif !diff.Action.IsReplace() {\n\t\t\t\t\t\treturn true, nil\n\t\t\t\t\t}\n\t\t\t\t\tif !n.createBeforeDestroy() {\n\t\t\t\t\t\treturn true, nil\n\t\t\t\t\t}\n\t\t\t\t\treturn false, nil\n\t\t\t\t},\n\t\t\t\tThen: &EvalWriteDiff{\n\t\t\t\t\tAddr:           addr.Resource,\n\t\t\t\t\tProviderSchema: &providerSchema,\n\t\t\t\t\tChange:         nil,\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t&EvalApplyPost{\n\t\t\t\tAddr:  addr.Resource,\n\t\t\t\tState: &state,\n\t\t\t\tError: &err,\n\t\t\t},\n\t\t\t&EvalUpdateStateHook{},\n\t\t},\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/node_resource_destroy.go",
    "content": "package terraform\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\n\t\"github.com/hashicorp/terraform/plans\"\n\t\"github.com/hashicorp/terraform/providers\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/configs\"\n\t\"github.com/hashicorp/terraform/states\"\n)\n\n// NodeDestroyResourceInstance represents a resource instance that is to be\n// destroyed.\ntype NodeDestroyResourceInstance struct {\n\t*NodeAbstractResourceInstance\n\n\t// If DeposedKey is set to anything other than states.NotDeposed then\n\t// this node destroys a deposed object of the associated instance\n\t// rather than its current object.\n\tDeposedKey states.DeposedKey\n\n\tCreateBeforeDestroyOverride *bool\n}\n\nvar (\n\t_ GraphNodeResource            = (*NodeDestroyResourceInstance)(nil)\n\t_ GraphNodeResourceInstance    = (*NodeDestroyResourceInstance)(nil)\n\t_ GraphNodeDestroyer           = (*NodeDestroyResourceInstance)(nil)\n\t_ GraphNodeDestroyerCBD        = (*NodeDestroyResourceInstance)(nil)\n\t_ GraphNodeReferenceable       = (*NodeDestroyResourceInstance)(nil)\n\t_ GraphNodeReferencer          = (*NodeDestroyResourceInstance)(nil)\n\t_ GraphNodeEvalable            = (*NodeDestroyResourceInstance)(nil)\n\t_ GraphNodeProviderConsumer    = (*NodeDestroyResourceInstance)(nil)\n\t_ GraphNodeProvisionerConsumer = (*NodeDestroyResourceInstance)(nil)\n)\n\nfunc (n *NodeDestroyResourceInstance) Name() string {\n\tif n.DeposedKey != states.NotDeposed {\n\t\treturn fmt.Sprintf(\"%s (destroy deposed %s)\", n.ResourceInstanceAddr(), n.DeposedKey)\n\t}\n\treturn n.ResourceInstanceAddr().String() + \" (destroy)\"\n}\n\n// GraphNodeDestroyer\nfunc (n *NodeDestroyResourceInstance) DestroyAddr() *addrs.AbsResourceInstance {\n\taddr := n.ResourceInstanceAddr()\n\treturn &addr\n}\n\n// GraphNodeDestroyerCBD\nfunc (n *NodeDestroyResourceInstance) CreateBeforeDestroy() bool {\n\tif n.CreateBeforeDestroyOverride != nil {\n\t\treturn *n.CreateBeforeDestroyOverride\n\t}\n\n\t// If we have no config, we just assume no\n\tif n.Config == nil || n.Config.Managed == nil {\n\t\treturn false\n\t}\n\n\treturn n.Config.Managed.CreateBeforeDestroy\n}\n\n// GraphNodeDestroyerCBD\nfunc (n *NodeDestroyResourceInstance) ModifyCreateBeforeDestroy(v bool) error {\n\tn.CreateBeforeDestroyOverride = &v\n\treturn nil\n}\n\n// GraphNodeReferenceable, overriding NodeAbstractResource\nfunc (n *NodeDestroyResourceInstance) ReferenceableAddrs() []addrs.Referenceable {\n\tnormalAddrs := n.NodeAbstractResourceInstance.ReferenceableAddrs()\n\tdestroyAddrs := make([]addrs.Referenceable, len(normalAddrs))\n\n\tphaseType := addrs.ResourceInstancePhaseDestroy\n\tif n.CreateBeforeDestroy() {\n\t\tphaseType = addrs.ResourceInstancePhaseDestroyCBD\n\t}\n\n\tfor i, normalAddr := range normalAddrs {\n\t\tswitch ta := normalAddr.(type) {\n\t\tcase addrs.Resource:\n\t\t\tdestroyAddrs[i] = ta.Phase(phaseType)\n\t\tcase addrs.ResourceInstance:\n\t\t\tdestroyAddrs[i] = ta.Phase(phaseType)\n\t\tdefault:\n\t\t\tdestroyAddrs[i] = normalAddr\n\t\t}\n\t}\n\n\treturn destroyAddrs\n}\n\n// GraphNodeReferencer, overriding NodeAbstractResource\nfunc (n *NodeDestroyResourceInstance) References() []*addrs.Reference {\n\t// If we have a config, then we need to include destroy-time dependencies\n\tif c := n.Config; c != nil && c.Managed != nil {\n\t\tvar result []*addrs.Reference\n\n\t\t// We include conn info and config for destroy time provisioners\n\t\t// as dependencies that we have.\n\t\tfor _, p := range c.Managed.Provisioners {\n\t\t\tschema := n.ProvisionerSchemas[p.Type]\n\n\t\t\tif p.When == configs.ProvisionerWhenDestroy {\n\t\t\t\tif p.Connection != nil {\n\t\t\t\t\tresult = append(result, ReferencesFromConfig(p.Connection.Config, connectionBlockSupersetSchema)...)\n\t\t\t\t}\n\t\t\t\tresult = append(result, ReferencesFromConfig(p.Config, schema)...)\n\t\t\t}\n\t\t}\n\n\t\treturn result\n\t}\n\n\treturn nil\n}\n\n// GraphNodeEvalable\nfunc (n *NodeDestroyResourceInstance) EvalTree() EvalNode {\n\taddr := n.ResourceInstanceAddr()\n\n\t// Get our state\n\trs := n.ResourceState\n\tvar is *states.ResourceInstance\n\tif rs != nil {\n\t\tis = rs.Instance(n.InstanceKey)\n\t}\n\tif is == nil {\n\t\tlog.Printf(\"[WARN] NodeDestroyResourceInstance for %s with no state\", addr)\n\t}\n\n\tvar changeApply *plans.ResourceInstanceChange\n\tvar provider providers.Interface\n\tvar providerSchema *ProviderSchema\n\tvar state *states.ResourceInstanceObject\n\tvar err error\n\treturn &EvalOpFilter{\n\t\tOps: []walkOperation{walkApply, walkDestroy},\n\t\tNode: &EvalSequence{\n\t\t\tNodes: []EvalNode{\n\t\t\t\t&EvalGetProvider{\n\t\t\t\t\tAddr:   n.ResolvedProvider,\n\t\t\t\t\tOutput: &provider,\n\t\t\t\t\tSchema: &providerSchema,\n\t\t\t\t},\n\n\t\t\t\t// Get the saved diff for apply\n\t\t\t\t&EvalReadDiff{\n\t\t\t\t\tAddr:           addr.Resource,\n\t\t\t\t\tProviderSchema: &providerSchema,\n\t\t\t\t\tChange:         &changeApply,\n\t\t\t\t},\n\n\t\t\t\t&EvalReduceDiff{\n\t\t\t\t\tAddr:      addr.Resource,\n\t\t\t\t\tInChange:  &changeApply,\n\t\t\t\t\tDestroy:   true,\n\t\t\t\t\tOutChange: &changeApply,\n\t\t\t\t},\n\n\t\t\t\t// EvalReduceDiff may have simplified our planned change\n\t\t\t\t// into a NoOp if it does not require destroying.\n\t\t\t\t&EvalIf{\n\t\t\t\t\tIf: func(ctx EvalContext) (bool, error) {\n\t\t\t\t\t\tif changeApply == nil || changeApply.Action == plans.NoOp {\n\t\t\t\t\t\t\treturn true, EvalEarlyExitError{}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn true, nil\n\t\t\t\t\t},\n\t\t\t\t\tThen: EvalNoop{},\n\t\t\t\t},\n\n\t\t\t\t&EvalReadState{\n\t\t\t\t\tAddr:           addr.Resource,\n\t\t\t\t\tOutput:         &state,\n\t\t\t\t\tProvider:       &provider,\n\t\t\t\t\tProviderSchema: &providerSchema,\n\t\t\t\t},\n\t\t\t\t&EvalRequireState{\n\t\t\t\t\tState: &state,\n\t\t\t\t},\n\n\t\t\t\t// Call pre-apply hook\n\t\t\t\t&EvalApplyPre{\n\t\t\t\t\tAddr:   addr.Resource,\n\t\t\t\t\tState:  &state,\n\t\t\t\t\tChange: &changeApply,\n\t\t\t\t},\n\n\t\t\t\t// Run destroy provisioners if not tainted\n\t\t\t\t&EvalIf{\n\t\t\t\t\tIf: func(ctx EvalContext) (bool, error) {\n\t\t\t\t\t\tif state != nil && state.Status == states.ObjectTainted {\n\t\t\t\t\t\t\treturn false, nil\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn true, nil\n\t\t\t\t\t},\n\n\t\t\t\t\tThen: &EvalApplyProvisioners{\n\t\t\t\t\t\tAddr:           addr.Resource,\n\t\t\t\t\t\tState:          &state,\n\t\t\t\t\t\tResourceConfig: n.Config,\n\t\t\t\t\t\tError:          &err,\n\t\t\t\t\t\tWhen:           configs.ProvisionerWhenDestroy,\n\t\t\t\t\t},\n\t\t\t\t},\n\n\t\t\t\t// If we have a provisioning error, then we just call\n\t\t\t\t// the post-apply hook now.\n\t\t\t\t&EvalIf{\n\t\t\t\t\tIf: func(ctx EvalContext) (bool, error) {\n\t\t\t\t\t\treturn err != nil, nil\n\t\t\t\t\t},\n\n\t\t\t\t\tThen: &EvalApplyPost{\n\t\t\t\t\t\tAddr:  addr.Resource,\n\t\t\t\t\t\tState: &state,\n\t\t\t\t\t\tError: &err,\n\t\t\t\t\t},\n\t\t\t\t},\n\n\t\t\t\t// Make sure we handle data sources properly.\n\t\t\t\t&EvalIf{\n\t\t\t\t\tIf: func(ctx EvalContext) (bool, error) {\n\t\t\t\t\t\treturn addr.Resource.Resource.Mode == addrs.DataResourceMode, nil\n\t\t\t\t\t},\n\n\t\t\t\t\tThen: &EvalReadDataApply{\n\t\t\t\t\t\tAddr:           addr.Resource,\n\t\t\t\t\t\tConfig:         n.Config,\n\t\t\t\t\t\tChange:         &changeApply,\n\t\t\t\t\t\tProvider:       &provider,\n\t\t\t\t\t\tProviderAddr:   n.ResolvedProvider,\n\t\t\t\t\t\tProviderSchema: &providerSchema,\n\t\t\t\t\t\tOutput:         &state,\n\t\t\t\t\t},\n\t\t\t\t\tElse: &EvalApply{\n\t\t\t\t\t\tAddr:           addr.Resource,\n\t\t\t\t\t\tConfig:         nil, // No configuration because we are destroying\n\t\t\t\t\t\tState:          &state,\n\t\t\t\t\t\tChange:         &changeApply,\n\t\t\t\t\t\tProvider:       &provider,\n\t\t\t\t\t\tProviderAddr:   n.ResolvedProvider,\n\t\t\t\t\t\tProviderSchema: &providerSchema,\n\t\t\t\t\t\tOutput:         &state,\n\t\t\t\t\t\tError:          &err,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t&EvalWriteState{\n\t\t\t\t\tAddr:           addr.Resource,\n\t\t\t\t\tProviderAddr:   n.ResolvedProvider,\n\t\t\t\t\tProviderSchema: &providerSchema,\n\t\t\t\t\tState:          &state,\n\t\t\t\t},\n\t\t\t\t&EvalApplyPost{\n\t\t\t\t\tAddr:  addr.Resource,\n\t\t\t\t\tState: &state,\n\t\t\t\t\tError: &err,\n\t\t\t\t},\n\t\t\t\t&EvalUpdateStateHook{},\n\t\t\t},\n\t\t},\n\t}\n}\n\n// NodeDestroyResourceInstance represents a resource that is to be destroyed.\n//\n// Destroying a resource is a state-only operation: it is the individual\n// instances being destroyed that affects remote objects. During graph\n// construction, NodeDestroyResource should always depend on any other node\n// related to the given resource, since it's just a final cleanup to avoid\n// leaving skeleton resource objects in state after their instances have\n// all been destroyed.\ntype NodeDestroyResource struct {\n\t*NodeAbstractResource\n}\n\nvar (\n\t_ GraphNodeResource      = (*NodeDestroyResource)(nil)\n\t_ GraphNodeReferenceable = (*NodeDestroyResource)(nil)\n\t_ GraphNodeReferencer    = (*NodeDestroyResource)(nil)\n\t_ GraphNodeEvalable      = (*NodeDestroyResource)(nil)\n)\n\nfunc (n *NodeDestroyResource) Name() string {\n\treturn n.ResourceAddr().String() + \" (clean up state)\"\n}\n\n// GraphNodeReferenceable, overriding NodeAbstractResource\nfunc (n *NodeDestroyResource) ReferenceableAddrs() []addrs.Referenceable {\n\t// NodeDestroyResource doesn't participate in references: the graph\n\t// builder that created it should ensure directly that it already depends\n\t// on every other node related to its resource, without relying on\n\t// references.\n\treturn nil\n}\n\n// GraphNodeReferencer, overriding NodeAbstractResource\nfunc (n *NodeDestroyResource) References() []*addrs.Reference {\n\t// NodeDestroyResource doesn't participate in references: the graph\n\t// builder that created it should ensure directly that it already depends\n\t// on every other node related to its resource, without relying on\n\t// references.\n\treturn nil\n}\n\n// GraphNodeEvalable\nfunc (n *NodeDestroyResource) EvalTree() EvalNode {\n\t// This EvalNode will produce an error if the resource isn't already\n\t// empty by the time it is called, since it should just be pruning the\n\t// leftover husk of a resource in state after all of the child instances\n\t// and their objects were destroyed.\n\treturn &EvalForgetResourceState{\n\t\tAddr: n.ResourceAddr().Resource,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/node_resource_destroy_deposed.go",
    "content": "package terraform\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/dag\"\n\t\"github.com/hashicorp/terraform/plans\"\n\t\"github.com/hashicorp/terraform/providers\"\n\t\"github.com/hashicorp/terraform/states\"\n)\n\n// ConcreteResourceInstanceDeposedNodeFunc is a callback type used to convert\n// an abstract resource instance to a concrete one of some type that has\n// an associated deposed object key.\ntype ConcreteResourceInstanceDeposedNodeFunc func(*NodeAbstractResourceInstance, states.DeposedKey) dag.Vertex\n\ntype GraphNodeDeposedResourceInstanceObject interface {\n\tDeposedInstanceObjectKey() states.DeposedKey\n}\n\n// NodePlanDeposedResourceInstanceObject represents deposed resource\n// instance objects during plan. These are distinct from the primary object\n// for each resource instance since the only valid operation to do with them\n// is to destroy them.\n//\n// This node type is also used during the refresh walk to ensure that the\n// record of a deposed object is up-to-date before we plan to destroy it.\ntype NodePlanDeposedResourceInstanceObject struct {\n\t*NodeAbstractResourceInstance\n\tDeposedKey states.DeposedKey\n}\n\nvar (\n\t_ GraphNodeDeposedResourceInstanceObject = (*NodePlanDeposedResourceInstanceObject)(nil)\n\t_ GraphNodeResource                      = (*NodePlanDeposedResourceInstanceObject)(nil)\n\t_ GraphNodeResourceInstance              = (*NodePlanDeposedResourceInstanceObject)(nil)\n\t_ GraphNodeReferenceable                 = (*NodePlanDeposedResourceInstanceObject)(nil)\n\t_ GraphNodeReferencer                    = (*NodePlanDeposedResourceInstanceObject)(nil)\n\t_ GraphNodeEvalable                      = (*NodePlanDeposedResourceInstanceObject)(nil)\n\t_ GraphNodeProviderConsumer              = (*NodePlanDeposedResourceInstanceObject)(nil)\n\t_ GraphNodeProvisionerConsumer           = (*NodePlanDeposedResourceInstanceObject)(nil)\n)\n\nfunc (n *NodePlanDeposedResourceInstanceObject) Name() string {\n\treturn fmt.Sprintf(\"%s (deposed %s)\", n.ResourceInstanceAddr().String(), n.DeposedKey)\n}\n\nfunc (n *NodePlanDeposedResourceInstanceObject) DeposedInstanceObjectKey() states.DeposedKey {\n\treturn n.DeposedKey\n}\n\n// GraphNodeReferenceable implementation, overriding the one from NodeAbstractResourceInstance\nfunc (n *NodePlanDeposedResourceInstanceObject) ReferenceableAddrs() []addrs.Referenceable {\n\t// Deposed objects don't participate in references.\n\treturn nil\n}\n\n// GraphNodeReferencer implementation, overriding the one from NodeAbstractResourceInstance\nfunc (n *NodePlanDeposedResourceInstanceObject) References() []*addrs.Reference {\n\t// We don't evaluate configuration for deposed objects, so they effectively\n\t// make no references.\n\treturn nil\n}\n\n// GraphNodeEvalable impl.\nfunc (n *NodePlanDeposedResourceInstanceObject) EvalTree() EvalNode {\n\taddr := n.ResourceInstanceAddr()\n\n\tvar provider providers.Interface\n\tvar providerSchema *ProviderSchema\n\tvar state *states.ResourceInstanceObject\n\n\tseq := &EvalSequence{Nodes: make([]EvalNode, 0, 5)}\n\n\t// During the refresh walk we will ensure that our record of the deposed\n\t// object is up-to-date. If it was already deleted outside of Terraform\n\t// then this will remove it from state and thus avoid us planning a\n\t// destroy for it during the subsequent plan walk.\n\tseq.Nodes = append(seq.Nodes, &EvalOpFilter{\n\t\tOps: []walkOperation{walkRefresh},\n\t\tNode: &EvalSequence{\n\t\t\tNodes: []EvalNode{\n\t\t\t\t&EvalGetProvider{\n\t\t\t\t\tAddr:   n.ResolvedProvider,\n\t\t\t\t\tOutput: &provider,\n\t\t\t\t\tSchema: &providerSchema,\n\t\t\t\t},\n\t\t\t\t&EvalReadStateDeposed{\n\t\t\t\t\tAddr:           addr.Resource,\n\t\t\t\t\tProvider:       &provider,\n\t\t\t\t\tProviderSchema: &providerSchema,\n\t\t\t\t\tKey:            n.DeposedKey,\n\t\t\t\t\tOutput:         &state,\n\t\t\t\t},\n\t\t\t\t&EvalRefresh{\n\t\t\t\t\tAddr:           addr.Resource,\n\t\t\t\t\tProviderAddr:   n.ResolvedProvider,\n\t\t\t\t\tProvider:       &provider,\n\t\t\t\t\tProviderSchema: &providerSchema,\n\t\t\t\t\tState:          &state,\n\t\t\t\t\tOutput:         &state,\n\t\t\t\t},\n\t\t\t\t&EvalWriteStateDeposed{\n\t\t\t\t\tAddr:           addr.Resource,\n\t\t\t\t\tKey:            n.DeposedKey,\n\t\t\t\t\tProviderAddr:   n.ResolvedProvider,\n\t\t\t\t\tProviderSchema: &providerSchema,\n\t\t\t\t\tState:          &state,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t})\n\n\t// During the plan walk we always produce a planned destroy change, because\n\t// destroying is the only supported action for deposed objects.\n\tvar change *plans.ResourceInstanceChange\n\tseq.Nodes = append(seq.Nodes, &EvalOpFilter{\n\t\tOps: []walkOperation{walkPlan, walkPlanDestroy},\n\t\tNode: &EvalSequence{\n\t\t\tNodes: []EvalNode{\n\t\t\t\t&EvalGetProvider{\n\t\t\t\t\tAddr:   n.ResolvedProvider,\n\t\t\t\t\tOutput: &provider,\n\t\t\t\t\tSchema: &providerSchema,\n\t\t\t\t},\n\t\t\t\t&EvalReadStateDeposed{\n\t\t\t\t\tAddr:           addr.Resource,\n\t\t\t\t\tOutput:         &state,\n\t\t\t\t\tKey:            n.DeposedKey,\n\t\t\t\t\tProvider:       &provider,\n\t\t\t\t\tProviderSchema: &providerSchema,\n\t\t\t\t},\n\t\t\t\t&EvalDiffDestroy{\n\t\t\t\t\tAddr:         addr.Resource,\n\t\t\t\t\tProviderAddr: n.ResolvedProvider,\n\t\t\t\t\tDeposedKey:   n.DeposedKey,\n\t\t\t\t\tState:        &state,\n\t\t\t\t\tOutput:       &change,\n\t\t\t\t},\n\t\t\t\t&EvalWriteDiff{\n\t\t\t\t\tAddr:           addr.Resource,\n\t\t\t\t\tDeposedKey:     n.DeposedKey,\n\t\t\t\t\tProviderSchema: &providerSchema,\n\t\t\t\t\tChange:         &change,\n\t\t\t\t},\n\t\t\t\t// Since deposed objects cannot be referenced by expressions\n\t\t\t\t// elsewhere, we don't need to also record the planned new\n\t\t\t\t// state in this case.\n\t\t\t},\n\t\t},\n\t})\n\n\treturn seq\n}\n\n// NodeDestroyDeposedResourceInstanceObject represents deposed resource\n// instance objects during apply. Nodes of this type are inserted by\n// DiffTransformer when the planned changeset contains \"delete\" changes for\n// deposed instance objects, and its only supported operation is to destroy\n// and then forget the associated object.\ntype NodeDestroyDeposedResourceInstanceObject struct {\n\t*NodeAbstractResourceInstance\n\tDeposedKey states.DeposedKey\n}\n\nvar (\n\t_ GraphNodeDeposedResourceInstanceObject = (*NodeDestroyDeposedResourceInstanceObject)(nil)\n\t_ GraphNodeResource                      = (*NodeDestroyDeposedResourceInstanceObject)(nil)\n\t_ GraphNodeResourceInstance              = (*NodeDestroyDeposedResourceInstanceObject)(nil)\n\t_ GraphNodeDestroyer                     = (*NodeDestroyDeposedResourceInstanceObject)(nil)\n\t_ GraphNodeDestroyerCBD                  = (*NodeDestroyDeposedResourceInstanceObject)(nil)\n\t_ GraphNodeReferenceable                 = (*NodeDestroyDeposedResourceInstanceObject)(nil)\n\t_ GraphNodeReferencer                    = (*NodeDestroyDeposedResourceInstanceObject)(nil)\n\t_ GraphNodeEvalable                      = (*NodeDestroyDeposedResourceInstanceObject)(nil)\n\t_ GraphNodeProviderConsumer              = (*NodeDestroyDeposedResourceInstanceObject)(nil)\n\t_ GraphNodeProvisionerConsumer           = (*NodeDestroyDeposedResourceInstanceObject)(nil)\n)\n\nfunc (n *NodeDestroyDeposedResourceInstanceObject) Name() string {\n\treturn fmt.Sprintf(\"%s (destroy deposed %s)\", n.Addr.String(), n.DeposedKey)\n}\n\nfunc (n *NodeDestroyDeposedResourceInstanceObject) DeposedInstanceObjectKey() states.DeposedKey {\n\treturn n.DeposedKey\n}\n\n// GraphNodeReferenceable implementation, overriding the one from NodeAbstractResourceInstance\nfunc (n *NodeDestroyDeposedResourceInstanceObject) ReferenceableAddrs() []addrs.Referenceable {\n\t// Deposed objects don't participate in references.\n\treturn nil\n}\n\n// GraphNodeReferencer implementation, overriding the one from NodeAbstractResourceInstance\nfunc (n *NodeDestroyDeposedResourceInstanceObject) References() []*addrs.Reference {\n\t// We don't evaluate configuration for deposed objects, so they effectively\n\t// make no references.\n\treturn nil\n}\n\n// GraphNodeDestroyer\nfunc (n *NodeDestroyDeposedResourceInstanceObject) DestroyAddr() *addrs.AbsResourceInstance {\n\taddr := n.ResourceInstanceAddr()\n\treturn &addr\n}\n\n// GraphNodeDestroyerCBD\nfunc (n *NodeDestroyDeposedResourceInstanceObject) CreateBeforeDestroy() bool {\n\t// A deposed instance is always CreateBeforeDestroy by definition, since\n\t// we use deposed only to handle create-before-destroy.\n\treturn true\n}\n\n// GraphNodeDestroyerCBD\nfunc (n *NodeDestroyDeposedResourceInstanceObject) ModifyCreateBeforeDestroy(v bool) error {\n\tif !v {\n\t\t// Should never happen: deposed instances are _always_ create_before_destroy.\n\t\treturn fmt.Errorf(\"can't deactivate create_before_destroy for a deposed instance\")\n\t}\n\treturn nil\n}\n\n// GraphNodeEvalable impl.\nfunc (n *NodeDestroyDeposedResourceInstanceObject) EvalTree() EvalNode {\n\taddr := n.ResourceInstanceAddr()\n\n\tvar provider providers.Interface\n\tvar providerSchema *ProviderSchema\n\tvar state *states.ResourceInstanceObject\n\tvar change *plans.ResourceInstanceChange\n\tvar err error\n\n\treturn &EvalSequence{\n\t\tNodes: []EvalNode{\n\t\t\t&EvalGetProvider{\n\t\t\t\tAddr:   n.ResolvedProvider,\n\t\t\t\tOutput: &provider,\n\t\t\t\tSchema: &providerSchema,\n\t\t\t},\n\t\t\t&EvalReadStateDeposed{\n\t\t\t\tAddr:           addr.Resource,\n\t\t\t\tOutput:         &state,\n\t\t\t\tKey:            n.DeposedKey,\n\t\t\t\tProvider:       &provider,\n\t\t\t\tProviderSchema: &providerSchema,\n\t\t\t},\n\t\t\t&EvalDiffDestroy{\n\t\t\t\tAddr:         addr.Resource,\n\t\t\t\tProviderAddr: n.ResolvedProvider,\n\t\t\t\tState:        &state,\n\t\t\t\tOutput:       &change,\n\t\t\t},\n\t\t\t// Call pre-apply hook\n\t\t\t&EvalApplyPre{\n\t\t\t\tAddr:   addr.Resource,\n\t\t\t\tState:  &state,\n\t\t\t\tChange: &change,\n\t\t\t},\n\t\t\t&EvalApply{\n\t\t\t\tAddr:           addr.Resource,\n\t\t\t\tConfig:         nil, // No configuration because we are destroying\n\t\t\t\tState:          &state,\n\t\t\t\tChange:         &change,\n\t\t\t\tProvider:       &provider,\n\t\t\t\tProviderAddr:   n.ResolvedProvider,\n\t\t\t\tProviderSchema: &providerSchema,\n\t\t\t\tOutput:         &state,\n\t\t\t\tError:          &err,\n\t\t\t},\n\t\t\t// Always write the resource back to the state deposed... if it\n\t\t\t// was successfully destroyed it will be pruned. If it was not, it will\n\t\t\t// be caught on the next run.\n\t\t\t&EvalWriteStateDeposed{\n\t\t\t\tAddr:           addr.Resource,\n\t\t\t\tKey:            n.DeposedKey,\n\t\t\t\tProviderAddr:   n.ResolvedProvider,\n\t\t\t\tProviderSchema: &providerSchema,\n\t\t\t\tState:          &state,\n\t\t\t},\n\t\t\t&EvalApplyPost{\n\t\t\t\tAddr:  addr.Resource,\n\t\t\t\tState: &state,\n\t\t\t\tError: &err,\n\t\t\t},\n\t\t\t&EvalReturnError{\n\t\t\t\tError: &err,\n\t\t\t},\n\t\t\t&EvalUpdateStateHook{},\n\t\t},\n\t}\n}\n\n// GraphNodeDeposer is an optional interface implemented by graph nodes that\n// might create a single new deposed object for a specific associated resource\n// instance, allowing a caller to optionally pre-allocate a DeposedKey for\n// it.\ntype GraphNodeDeposer interface {\n\t// SetPreallocatedDeposedKey will be called during graph construction\n\t// if a particular node must use a pre-allocated deposed key if/when it\n\t// \"deposes\" the current object of its associated resource instance.\n\tSetPreallocatedDeposedKey(key states.DeposedKey)\n}\n\n// graphNodeDeposer is an embeddable implementation of GraphNodeDeposer.\n// Embed it in a node type to get automatic support for it, and then access\n// the field PreallocatedDeposedKey to access any pre-allocated key.\ntype graphNodeDeposer struct {\n\tPreallocatedDeposedKey states.DeposedKey\n}\n\nfunc (n *graphNodeDeposer) SetPreallocatedDeposedKey(key states.DeposedKey) {\n\tn.PreallocatedDeposedKey = key\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/node_resource_plan.go",
    "content": "package terraform\n\nimport (\n\t\"log\"\n\n\t\"github.com/hashicorp/terraform/dag\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n)\n\n// NodePlannableResource represents a resource that is \"plannable\":\n// it is ready to be planned in order to create a diff.\ntype NodePlannableResource struct {\n\t*NodeAbstractResource\n\n\t// ForceCreateBeforeDestroy might be set via our GraphNodeDestroyerCBD\n\t// during graph construction, if dependencies require us to force this\n\t// on regardless of what the configuration says.\n\tForceCreateBeforeDestroy *bool\n}\n\nvar (\n\t_ GraphNodeSubPath              = (*NodePlannableResource)(nil)\n\t_ GraphNodeDestroyerCBD         = (*NodePlannableResource)(nil)\n\t_ GraphNodeDynamicExpandable    = (*NodePlannableResource)(nil)\n\t_ GraphNodeReferenceable        = (*NodePlannableResource)(nil)\n\t_ GraphNodeReferencer           = (*NodePlannableResource)(nil)\n\t_ GraphNodeResource             = (*NodePlannableResource)(nil)\n\t_ GraphNodeAttachResourceConfig = (*NodePlannableResource)(nil)\n)\n\n// GraphNodeEvalable\nfunc (n *NodePlannableResource) EvalTree() EvalNode {\n\taddr := n.ResourceAddr()\n\tconfig := n.Config\n\n\tif config == nil {\n\t\t// Nothing to do, then.\n\t\tlog.Printf(\"[TRACE] NodeApplyableResource: no configuration present for %s\", addr)\n\t\treturn &EvalNoop{}\n\t}\n\n\t// this ensures we can reference the resource even if the count is 0\n\treturn &EvalWriteResourceState{\n\t\tAddr:         addr.Resource,\n\t\tConfig:       config,\n\t\tProviderAddr: n.ResolvedProvider,\n\t}\n}\n\n// GraphNodeDestroyerCBD\nfunc (n *NodePlannableResource) CreateBeforeDestroy() bool {\n\tif n.ForceCreateBeforeDestroy != nil {\n\t\treturn *n.ForceCreateBeforeDestroy\n\t}\n\n\t// If we have no config, we just assume no\n\tif n.Config == nil || n.Config.Managed == nil {\n\t\treturn false\n\t}\n\n\treturn n.Config.Managed.CreateBeforeDestroy\n}\n\n// GraphNodeDestroyerCBD\nfunc (n *NodePlannableResource) ModifyCreateBeforeDestroy(v bool) error {\n\tn.ForceCreateBeforeDestroy = &v\n\treturn nil\n}\n\n// GraphNodeDynamicExpandable\nfunc (n *NodePlannableResource) DynamicExpand(ctx EvalContext) (*Graph, error) {\n\tvar diags tfdiags.Diagnostics\n\n\tcount, countDiags := evaluateResourceCountExpression(n.Config.Count, ctx)\n\tdiags = diags.Append(countDiags)\n\tif countDiags.HasErrors() {\n\t\treturn nil, diags.Err()\n\t}\n\n\t// Next we need to potentially rename an instance address in the state\n\t// if we're transitioning whether \"count\" is set at all.\n\tfixResourceCountSetTransition(ctx, n.ResourceAddr(), count != -1)\n\n\t// Our graph transformers require access to the full state, so we'll\n\t// temporarily lock it while we work on this.\n\tstate := ctx.State().Lock()\n\tdefer ctx.State().Unlock()\n\n\t// The concrete resource factory we'll use\n\tconcreteResource := func(a *NodeAbstractResourceInstance) dag.Vertex {\n\t\t// Add the config and state since we don't do that via transforms\n\t\ta.Config = n.Config\n\t\ta.ResolvedProvider = n.ResolvedProvider\n\t\ta.Schema = n.Schema\n\t\ta.ProvisionerSchemas = n.ProvisionerSchemas\n\n\t\treturn &NodePlannableResourceInstance{\n\t\t\tNodeAbstractResourceInstance: a,\n\n\t\t\t// By the time we're walking, we've figured out whether we need\n\t\t\t// to force on CreateBeforeDestroy due to dependencies on other\n\t\t\t// nodes that have it.\n\t\t\tForceCreateBeforeDestroy: n.CreateBeforeDestroy(),\n\t\t}\n\t}\n\n\t// The concrete resource factory we'll use for orphans\n\tconcreteResourceOrphan := func(a *NodeAbstractResourceInstance) dag.Vertex {\n\t\t// Add the config and state since we don't do that via transforms\n\t\ta.Config = n.Config\n\t\ta.ResolvedProvider = n.ResolvedProvider\n\t\ta.Schema = n.Schema\n\t\ta.ProvisionerSchemas = n.ProvisionerSchemas\n\n\t\treturn &NodePlannableResourceInstanceOrphan{\n\t\t\tNodeAbstractResourceInstance: a,\n\t\t}\n\t}\n\n\t// Start creating the steps\n\tsteps := []GraphTransformer{\n\t\t// Expand the count.\n\t\t&ResourceCountTransformer{\n\t\t\tConcrete: concreteResource,\n\t\t\tSchema:   n.Schema,\n\t\t\tCount:    count,\n\t\t\tAddr:     n.ResourceAddr(),\n\t\t},\n\n\t\t// Add the count orphans\n\t\t&OrphanResourceCountTransformer{\n\t\t\tConcrete: concreteResourceOrphan,\n\t\t\tCount:    count,\n\t\t\tAddr:     n.ResourceAddr(),\n\t\t\tState:    state,\n\t\t},\n\n\t\t// Attach the state\n\t\t&AttachStateTransformer{State: state},\n\n\t\t// Targeting\n\t\t&TargetsTransformer{Targets: n.Targets},\n\n\t\t// Connect references so ordering is correct\n\t\t&ReferenceTransformer{},\n\n\t\t// Make sure there is a single root\n\t\t&RootTransformer{},\n\t}\n\n\t// Build the graph\n\tb := &BasicGraphBuilder{\n\t\tSteps:    steps,\n\t\tValidate: true,\n\t\tName:     \"NodePlannableResource\",\n\t}\n\tgraph, diags := b.Build(ctx.Path())\n\treturn graph, diags.ErrWithWarnings()\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/node_resource_plan_destroy.go",
    "content": "package terraform\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/dag\"\n\t\"github.com/hashicorp/terraform/plans\"\n\t\"github.com/hashicorp/terraform/providers\"\n\t\"github.com/hashicorp/terraform/states\"\n)\n\n// NodePlanDestroyableResourceInstance represents a resource that is ready\n// to be planned for destruction.\ntype NodePlanDestroyableResourceInstance struct {\n\t*NodeAbstractResourceInstance\n}\n\nvar (\n\t_ GraphNodeSubPath              = (*NodePlanDestroyableResourceInstance)(nil)\n\t_ GraphNodeReferenceable        = (*NodePlanDestroyableResourceInstance)(nil)\n\t_ GraphNodeReferencer           = (*NodePlanDestroyableResourceInstance)(nil)\n\t_ GraphNodeDestroyer            = (*NodePlanDestroyableResourceInstance)(nil)\n\t_ GraphNodeResource             = (*NodePlanDestroyableResourceInstance)(nil)\n\t_ GraphNodeResourceInstance     = (*NodePlanDestroyableResourceInstance)(nil)\n\t_ GraphNodeAttachResourceConfig = (*NodePlanDestroyableResourceInstance)(nil)\n\t_ GraphNodeAttachResourceState  = (*NodePlanDestroyableResourceInstance)(nil)\n\t_ GraphNodeEvalable             = (*NodePlanDestroyableResourceInstance)(nil)\n\t_ GraphNodeProviderConsumer     = (*NodePlanDestroyableResourceInstance)(nil)\n)\n\n// GraphNodeDestroyer\nfunc (n *NodePlanDestroyableResourceInstance) DestroyAddr() *addrs.AbsResourceInstance {\n\taddr := n.ResourceInstanceAddr()\n\treturn &addr\n}\n\n// GraphNodeEvalable\nfunc (n *NodePlanDestroyableResourceInstance) EvalTree() EvalNode {\n\taddr := n.ResourceInstanceAddr()\n\n\t// Declare a bunch of variables that are used for state during\n\t// evaluation. These are written to by address in the EvalNodes we\n\t// declare below.\n\tvar provider providers.Interface\n\tvar providerSchema *ProviderSchema\n\tvar change *plans.ResourceInstanceChange\n\tvar state *states.ResourceInstanceObject\n\n\tif n.ResolvedProvider.ProviderConfig.Type == \"\" {\n\t\t// Should never happen; indicates that the graph was not constructed\n\t\t// correctly since we didn't get our provider attached.\n\t\tpanic(fmt.Sprintf(\"%T %q was not assigned a resolved provider\", n, dag.VertexName(n)))\n\t}\n\n\treturn &EvalSequence{\n\t\tNodes: []EvalNode{\n\t\t\t&EvalGetProvider{\n\t\t\t\tAddr:   n.ResolvedProvider,\n\t\t\t\tOutput: &provider,\n\t\t\t\tSchema: &providerSchema,\n\t\t\t},\n\t\t\t&EvalReadState{\n\t\t\t\tAddr:           addr.Resource,\n\t\t\t\tProvider:       &provider,\n\t\t\t\tProviderSchema: &providerSchema,\n\n\t\t\t\tOutput: &state,\n\t\t\t},\n\t\t\t&EvalDiffDestroy{\n\t\t\t\tAddr:         addr.Resource,\n\t\t\t\tProviderAddr: n.ResolvedProvider,\n\t\t\t\tState:        &state,\n\t\t\t\tOutput:       &change,\n\t\t\t},\n\t\t\t&EvalCheckPreventDestroy{\n\t\t\t\tAddr:   addr.Resource,\n\t\t\t\tConfig: n.Config,\n\t\t\t\tChange: &change,\n\t\t\t},\n\t\t\t&EvalWriteDiff{\n\t\t\t\tAddr:           addr.Resource,\n\t\t\t\tProviderSchema: &providerSchema,\n\t\t\t\tChange:         &change,\n\t\t\t},\n\t\t},\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/node_resource_plan_instance.go",
    "content": "package terraform\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/hashicorp/terraform/plans\"\n\t\"github.com/hashicorp/terraform/providers\"\n\t\"github.com/hashicorp/terraform/states\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// NodePlannableResourceInstance represents a _single_ resource\n// instance that is plannable. This means this represents a single\n// count index, for example.\ntype NodePlannableResourceInstance struct {\n\t*NodeAbstractResourceInstance\n\tForceCreateBeforeDestroy bool\n}\n\nvar (\n\t_ GraphNodeSubPath              = (*NodePlannableResourceInstance)(nil)\n\t_ GraphNodeReferenceable        = (*NodePlannableResourceInstance)(nil)\n\t_ GraphNodeReferencer           = (*NodePlannableResourceInstance)(nil)\n\t_ GraphNodeResource             = (*NodePlannableResourceInstance)(nil)\n\t_ GraphNodeResourceInstance     = (*NodePlannableResourceInstance)(nil)\n\t_ GraphNodeAttachResourceConfig = (*NodePlannableResourceInstance)(nil)\n\t_ GraphNodeAttachResourceState  = (*NodePlannableResourceInstance)(nil)\n\t_ GraphNodeEvalable             = (*NodePlannableResourceInstance)(nil)\n)\n\n// GraphNodeEvalable\nfunc (n *NodePlannableResourceInstance) EvalTree() EvalNode {\n\taddr := n.ResourceInstanceAddr()\n\n\t// State still uses legacy-style internal ids, so we need to shim to get\n\t// a suitable key to use.\n\tstateId := NewLegacyResourceInstanceAddress(addr).stateId()\n\n\t// Determine the dependencies for the state.\n\tstateDeps := n.StateReferences()\n\n\t// Eval info is different depending on what kind of resource this is\n\tswitch addr.Resource.Resource.Mode {\n\tcase addrs.ManagedResourceMode:\n\t\treturn n.evalTreeManagedResource(addr, stateId, stateDeps)\n\tcase addrs.DataResourceMode:\n\t\treturn n.evalTreeDataResource(addr, stateId, stateDeps)\n\tdefault:\n\t\tpanic(fmt.Errorf(\"unsupported resource mode %s\", n.Config.Mode))\n\t}\n}\n\nfunc (n *NodePlannableResourceInstance) evalTreeDataResource(addr addrs.AbsResourceInstance, stateId string, stateDeps []addrs.Referenceable) EvalNode {\n\tconfig := n.Config\n\tvar provider providers.Interface\n\tvar providerSchema *ProviderSchema\n\tvar change *plans.ResourceInstanceChange\n\tvar state *states.ResourceInstanceObject\n\tvar configVal cty.Value\n\n\treturn &EvalSequence{\n\t\tNodes: []EvalNode{\n\t\t\t&EvalGetProvider{\n\t\t\t\tAddr:   n.ResolvedProvider,\n\t\t\t\tOutput: &provider,\n\t\t\t\tSchema: &providerSchema,\n\t\t\t},\n\n\t\t\t&EvalReadState{\n\t\t\t\tAddr:           addr.Resource,\n\t\t\t\tProvider:       &provider,\n\t\t\t\tProviderSchema: &providerSchema,\n\n\t\t\t\tOutput: &state,\n\t\t\t},\n\n\t\t\t// If we already have a non-planned state then we already dealt\n\t\t\t// with this during the refresh walk and so we have nothing to do\n\t\t\t// here.\n\t\t\t&EvalIf{\n\t\t\t\tIf: func(ctx EvalContext) (bool, error) {\n\t\t\t\t\tdepChanges := false\n\n\t\t\t\t\t// Check and see if any of our dependencies have changes.\n\t\t\t\t\tchanges := ctx.Changes()\n\t\t\t\t\tfor _, d := range n.StateReferences() {\n\t\t\t\t\t\tri, ok := d.(addrs.ResourceInstance)\n\t\t\t\t\t\tif !ok {\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t}\n\t\t\t\t\t\tchange := changes.GetResourceInstanceChange(ri.Absolute(ctx.Path()), states.CurrentGen)\n\t\t\t\t\t\tif change != nil && change.Action != plans.NoOp {\n\t\t\t\t\t\t\tdepChanges = true\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\trefreshed := state != nil && state.Status != states.ObjectPlanned\n\n\t\t\t\t\t// If there are no dependency changes, and it's not a forced\n\t\t\t\t\t// read because we there was no Refresh, then we don't need\n\t\t\t\t\t// to re-read. If any dependencies have changes, it means\n\t\t\t\t\t// our config may also have changes and we need to Read the\n\t\t\t\t\t// data source again.\n\t\t\t\t\tif !depChanges && refreshed {\n\t\t\t\t\t\treturn false, EvalEarlyExitError{}\n\t\t\t\t\t}\n\t\t\t\t\treturn true, nil\n\t\t\t\t},\n\t\t\t\tThen: EvalNoop{},\n\t\t\t},\n\n\t\t\t&EvalValidateSelfRef{\n\t\t\t\tAddr:           addr.Resource,\n\t\t\t\tConfig:         config.Config,\n\t\t\t\tProviderSchema: &providerSchema,\n\t\t\t},\n\n\t\t\t&EvalReadData{\n\t\t\t\tAddr:           addr.Resource,\n\t\t\t\tConfig:         n.Config,\n\t\t\t\tDependencies:   n.StateReferences(),\n\t\t\t\tProvider:       &provider,\n\t\t\t\tProviderAddr:   n.ResolvedProvider,\n\t\t\t\tProviderSchema: &providerSchema,\n\t\t\t\tForcePlanRead:  true, // _always_ produce a Read change, even if the config seems ready\n\t\t\t\tOutputChange:   &change,\n\t\t\t\tOutputValue:    &configVal,\n\t\t\t\tOutputState:    &state,\n\t\t\t},\n\n\t\t\t&EvalWriteState{\n\t\t\t\tAddr:           addr.Resource,\n\t\t\t\tProviderAddr:   n.ResolvedProvider,\n\t\t\t\tProviderSchema: &providerSchema,\n\t\t\t\tState:          &state,\n\t\t\t},\n\n\t\t\t&EvalWriteDiff{\n\t\t\t\tAddr:           addr.Resource,\n\t\t\t\tProviderSchema: &providerSchema,\n\t\t\t\tChange:         &change,\n\t\t\t},\n\t\t},\n\t}\n}\n\nfunc (n *NodePlannableResourceInstance) evalTreeManagedResource(addr addrs.AbsResourceInstance, stateId string, stateDeps []addrs.Referenceable) EvalNode {\n\tconfig := n.Config\n\tvar provider providers.Interface\n\tvar providerSchema *ProviderSchema\n\tvar change *plans.ResourceInstanceChange\n\tvar state *states.ResourceInstanceObject\n\n\treturn &EvalSequence{\n\t\tNodes: []EvalNode{\n\t\t\t&EvalGetProvider{\n\t\t\t\tAddr:   n.ResolvedProvider,\n\t\t\t\tOutput: &provider,\n\t\t\t\tSchema: &providerSchema,\n\t\t\t},\n\n\t\t\t&EvalReadState{\n\t\t\t\tAddr:           addr.Resource,\n\t\t\t\tProvider:       &provider,\n\t\t\t\tProviderSchema: &providerSchema,\n\n\t\t\t\tOutput: &state,\n\t\t\t},\n\n\t\t\t&EvalValidateSelfRef{\n\t\t\t\tAddr:           addr.Resource,\n\t\t\t\tConfig:         config.Config,\n\t\t\t\tProviderSchema: &providerSchema,\n\t\t\t},\n\n\t\t\t&EvalDiff{\n\t\t\t\tAddr:                addr.Resource,\n\t\t\t\tConfig:              n.Config,\n\t\t\t\tCreateBeforeDestroy: n.ForceCreateBeforeDestroy,\n\t\t\t\tProvider:            &provider,\n\t\t\t\tProviderAddr:        n.ResolvedProvider,\n\t\t\t\tProviderSchema:      &providerSchema,\n\t\t\t\tState:               &state,\n\t\t\t\tOutputChange:        &change,\n\t\t\t\tOutputState:         &state,\n\t\t\t},\n\t\t\t&EvalCheckPreventDestroy{\n\t\t\t\tAddr:   addr.Resource,\n\t\t\t\tConfig: n.Config,\n\t\t\t\tChange: &change,\n\t\t\t},\n\t\t\t&EvalWriteState{\n\t\t\t\tAddr:           addr.Resource,\n\t\t\t\tProviderAddr:   n.ResolvedProvider,\n\t\t\t\tState:          &state,\n\t\t\t\tProviderSchema: &providerSchema,\n\t\t\t},\n\t\t\t&EvalWriteDiff{\n\t\t\t\tAddr:           addr.Resource,\n\t\t\t\tProviderSchema: &providerSchema,\n\t\t\t\tChange:         &change,\n\t\t\t},\n\t\t},\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/node_resource_plan_orphan.go",
    "content": "package terraform\n\nimport (\n\t\"github.com/hashicorp/terraform/plans\"\n\t\"github.com/hashicorp/terraform/providers\"\n\t\"github.com/hashicorp/terraform/states\"\n)\n\n// NodePlannableResourceInstanceOrphan represents a resource that is \"applyable\":\n// it is ready to be applied and is represented by a diff.\ntype NodePlannableResourceInstanceOrphan struct {\n\t*NodeAbstractResourceInstance\n}\n\nvar (\n\t_ GraphNodeSubPath              = (*NodePlannableResourceInstanceOrphan)(nil)\n\t_ GraphNodeReferenceable        = (*NodePlannableResourceInstanceOrphan)(nil)\n\t_ GraphNodeReferencer           = (*NodePlannableResourceInstanceOrphan)(nil)\n\t_ GraphNodeResource             = (*NodePlannableResourceInstanceOrphan)(nil)\n\t_ GraphNodeResourceInstance     = (*NodePlannableResourceInstanceOrphan)(nil)\n\t_ GraphNodeAttachResourceConfig = (*NodePlannableResourceInstanceOrphan)(nil)\n\t_ GraphNodeAttachResourceState  = (*NodePlannableResourceInstanceOrphan)(nil)\n\t_ GraphNodeEvalable             = (*NodePlannableResourceInstanceOrphan)(nil)\n)\n\nvar (\n\t_ GraphNodeEvalable = (*NodePlannableResourceInstanceOrphan)(nil)\n)\n\nfunc (n *NodePlannableResourceInstanceOrphan) Name() string {\n\treturn n.ResourceInstanceAddr().String() + \" (orphan)\"\n}\n\n// GraphNodeEvalable\nfunc (n *NodePlannableResourceInstanceOrphan) EvalTree() EvalNode {\n\taddr := n.ResourceInstanceAddr()\n\n\t// Declare a bunch of variables that are used for state during\n\t// evaluation. Most of this are written to by-address below.\n\tvar change *plans.ResourceInstanceChange\n\tvar state *states.ResourceInstanceObject\n\tvar provider providers.Interface\n\tvar providerSchema *ProviderSchema\n\n\treturn &EvalSequence{\n\t\tNodes: []EvalNode{\n\t\t\t&EvalGetProvider{\n\t\t\t\tAddr:   n.ResolvedProvider,\n\t\t\t\tOutput: &provider,\n\t\t\t\tSchema: &providerSchema,\n\t\t\t},\n\t\t\t&EvalReadState{\n\t\t\t\tAddr:           addr.Resource,\n\t\t\t\tProvider:       &provider,\n\t\t\t\tProviderSchema: &providerSchema,\n\n\t\t\t\tOutput: &state,\n\t\t\t},\n\t\t\t&EvalDiffDestroy{\n\t\t\t\tAddr:         addr.Resource,\n\t\t\t\tState:        &state,\n\t\t\t\tProviderAddr: n.ResolvedProvider,\n\t\t\t\tOutput:       &change,\n\t\t\t\tOutputState:  &state, // Will point to a nil state after this complete, signalling destroyed\n\t\t\t},\n\t\t\t&EvalCheckPreventDestroy{\n\t\t\t\tAddr:   addr.Resource,\n\t\t\t\tConfig: n.Config,\n\t\t\t\tChange: &change,\n\t\t\t},\n\t\t\t&EvalWriteDiff{\n\t\t\t\tAddr:           addr.Resource,\n\t\t\t\tProviderSchema: &providerSchema,\n\t\t\t\tChange:         &change,\n\t\t\t},\n\t\t\t&EvalWriteState{\n\t\t\t\tAddr:           addr.Resource,\n\t\t\t\tProviderAddr:   n.ResolvedProvider,\n\t\t\t\tProviderSchema: &providerSchema,\n\t\t\t\tState:          &state,\n\t\t\t},\n\t\t},\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/node_resource_refresh.go",
    "content": "package terraform\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\n\t\"github.com/hashicorp/terraform/plans\"\n\t\"github.com/hashicorp/terraform/providers\"\n\n\t\"github.com/hashicorp/terraform/states\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/dag\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n)\n\n// NodeRefreshableManagedResource represents a resource that is expanabled into\n// NodeRefreshableManagedResourceInstance. Resource count orphans are also added.\ntype NodeRefreshableManagedResource struct {\n\t*NodeAbstractResource\n}\n\nvar (\n\t_ GraphNodeSubPath              = (*NodeRefreshableManagedResource)(nil)\n\t_ GraphNodeDynamicExpandable    = (*NodeRefreshableManagedResource)(nil)\n\t_ GraphNodeReferenceable        = (*NodeRefreshableManagedResource)(nil)\n\t_ GraphNodeReferencer           = (*NodeRefreshableManagedResource)(nil)\n\t_ GraphNodeResource             = (*NodeRefreshableManagedResource)(nil)\n\t_ GraphNodeAttachResourceConfig = (*NodeRefreshableManagedResource)(nil)\n)\n\n// GraphNodeDynamicExpandable\nfunc (n *NodeRefreshableManagedResource) DynamicExpand(ctx EvalContext) (*Graph, error) {\n\tvar diags tfdiags.Diagnostics\n\n\tcount, countDiags := evaluateResourceCountExpression(n.Config.Count, ctx)\n\tdiags = diags.Append(countDiags)\n\tif countDiags.HasErrors() {\n\t\treturn nil, diags.Err()\n\t}\n\n\t// Next we need to potentially rename an instance address in the state\n\t// if we're transitioning whether \"count\" is set at all.\n\tfixResourceCountSetTransition(ctx, n.ResourceAddr(), count != -1)\n\n\t// Our graph transformers require access to the full state, so we'll\n\t// temporarily lock it while we work on this.\n\tstate := ctx.State().Lock()\n\tdefer ctx.State().Unlock()\n\n\t// The concrete resource factory we'll use\n\tconcreteResource := func(a *NodeAbstractResourceInstance) dag.Vertex {\n\t\t// Add the config and state since we don't do that via transforms\n\t\ta.Config = n.Config\n\t\ta.ResolvedProvider = n.ResolvedProvider\n\n\t\treturn &NodeRefreshableManagedResourceInstance{\n\t\t\tNodeAbstractResourceInstance: a,\n\t\t}\n\t}\n\n\t// Start creating the steps\n\tsteps := []GraphTransformer{\n\t\t// Expand the count.\n\t\t&ResourceCountTransformer{\n\t\t\tConcrete: concreteResource,\n\t\t\tSchema:   n.Schema,\n\t\t\tCount:    count,\n\t\t\tAddr:     n.ResourceAddr(),\n\t\t},\n\n\t\t// Add the count orphans to make sure these resources are accounted for\n\t\t// during a scale in.\n\t\t&OrphanResourceCountTransformer{\n\t\t\tConcrete: concreteResource,\n\t\t\tCount:    count,\n\t\t\tAddr:     n.ResourceAddr(),\n\t\t\tState:    state,\n\t\t},\n\n\t\t// Attach the state\n\t\t&AttachStateTransformer{State: state},\n\n\t\t// Targeting\n\t\t&TargetsTransformer{Targets: n.Targets},\n\n\t\t// Connect references so ordering is correct\n\t\t&ReferenceTransformer{},\n\n\t\t// Make sure there is a single root\n\t\t&RootTransformer{},\n\t}\n\n\t// Build the graph\n\tb := &BasicGraphBuilder{\n\t\tSteps:    steps,\n\t\tValidate: true,\n\t\tName:     \"NodeRefreshableManagedResource\",\n\t}\n\n\tgraph, diags := b.Build(ctx.Path())\n\treturn graph, diags.ErrWithWarnings()\n}\n\n// NodeRefreshableManagedResourceInstance represents a resource that is \"applyable\":\n// it is ready to be applied and is represented by a diff.\ntype NodeRefreshableManagedResourceInstance struct {\n\t*NodeAbstractResourceInstance\n}\n\nvar (\n\t_ GraphNodeSubPath              = (*NodeRefreshableManagedResourceInstance)(nil)\n\t_ GraphNodeReferenceable        = (*NodeRefreshableManagedResourceInstance)(nil)\n\t_ GraphNodeReferencer           = (*NodeRefreshableManagedResourceInstance)(nil)\n\t_ GraphNodeDestroyer            = (*NodeRefreshableManagedResourceInstance)(nil)\n\t_ GraphNodeResource             = (*NodeRefreshableManagedResourceInstance)(nil)\n\t_ GraphNodeResourceInstance     = (*NodeRefreshableManagedResourceInstance)(nil)\n\t_ GraphNodeAttachResourceConfig = (*NodeRefreshableManagedResourceInstance)(nil)\n\t_ GraphNodeAttachResourceState  = (*NodeRefreshableManagedResourceInstance)(nil)\n\t_ GraphNodeEvalable             = (*NodeRefreshableManagedResourceInstance)(nil)\n)\n\n// GraphNodeDestroyer\nfunc (n *NodeRefreshableManagedResourceInstance) DestroyAddr() *addrs.AbsResourceInstance {\n\taddr := n.ResourceInstanceAddr()\n\treturn &addr\n}\n\n// GraphNodeEvalable\nfunc (n *NodeRefreshableManagedResourceInstance) EvalTree() EvalNode {\n\taddr := n.ResourceInstanceAddr()\n\n\t// Eval info is different depending on what kind of resource this is\n\tswitch addr.Resource.Resource.Mode {\n\tcase addrs.ManagedResourceMode:\n\t\tif n.ResourceState == nil {\n\t\t\tlog.Printf(\"[TRACE] NodeRefreshableManagedResourceInstance: %s has no existing state to refresh\", addr)\n\t\t\treturn n.evalTreeManagedResourceNoState()\n\t\t}\n\t\tlog.Printf(\"[TRACE] NodeRefreshableManagedResourceInstance: %s will be refreshed\", addr)\n\t\treturn n.evalTreeManagedResource()\n\n\tcase addrs.DataResourceMode:\n\t\t// Get the data source node. If we don't have a configuration\n\t\t// then it is an orphan so we destroy it (remove it from the state).\n\t\tvar dn GraphNodeEvalable\n\t\tif n.Config != nil {\n\t\t\tdn = &NodeRefreshableDataResourceInstance{\n\t\t\t\tNodeAbstractResourceInstance: n.NodeAbstractResourceInstance,\n\t\t\t}\n\t\t} else {\n\t\t\tdn = &NodeDestroyableDataResourceInstance{\n\t\t\t\tNodeAbstractResourceInstance: n.NodeAbstractResourceInstance,\n\t\t\t}\n\t\t}\n\n\t\treturn dn.EvalTree()\n\tdefault:\n\t\tpanic(fmt.Errorf(\"unsupported resource mode %s\", addr.Resource.Resource.Mode))\n\t}\n}\n\nfunc (n *NodeRefreshableManagedResourceInstance) evalTreeManagedResource() EvalNode {\n\taddr := n.ResourceInstanceAddr()\n\n\t// Declare a bunch of variables that are used for state during\n\t// evaluation. Most of this are written to by-address below.\n\tvar provider providers.Interface\n\tvar providerSchema *ProviderSchema\n\tvar state *states.ResourceInstanceObject\n\n\t// This happened during initial development. All known cases were\n\t// fixed and tested but as a sanity check let's assert here.\n\tif n.ResourceState == nil {\n\t\terr := fmt.Errorf(\n\t\t\t\"No resource state attached for addr: %s\\n\\n\"+\n\t\t\t\t\"This is a bug. Please report this to Terraform with your configuration\\n\"+\n\t\t\t\t\"and state attached. Please be careful to scrub any sensitive information.\",\n\t\t\taddr)\n\t\treturn &EvalReturnError{Error: &err}\n\t}\n\n\treturn &EvalSequence{\n\t\tNodes: []EvalNode{\n\t\t\t&EvalGetProvider{\n\t\t\t\tAddr:   n.ResolvedProvider,\n\t\t\t\tOutput: &provider,\n\t\t\t\tSchema: &providerSchema,\n\t\t\t},\n\n\t\t\t&EvalReadState{\n\t\t\t\tAddr:           addr.Resource,\n\t\t\t\tProvider:       &provider,\n\t\t\t\tProviderSchema: &providerSchema,\n\n\t\t\t\tOutput: &state,\n\t\t\t},\n\n\t\t\t&EvalRefresh{\n\t\t\t\tAddr:           addr.Resource,\n\t\t\t\tProviderAddr:   n.ResolvedProvider,\n\t\t\t\tProvider:       &provider,\n\t\t\t\tProviderSchema: &providerSchema,\n\t\t\t\tState:          &state,\n\t\t\t\tOutput:         &state,\n\t\t\t},\n\n\t\t\t&EvalWriteState{\n\t\t\t\tAddr:           addr.Resource,\n\t\t\t\tProviderAddr:   n.ResolvedProvider,\n\t\t\t\tProviderSchema: &providerSchema,\n\t\t\t\tState:          &state,\n\t\t\t},\n\t\t},\n\t}\n}\n\n// evalTreeManagedResourceNoState produces an EvalSequence for refresh resource\n// nodes that don't have state attached. An example of where this functionality\n// is useful is when a resource that already exists in state is being scaled\n// out, ie: has its resource count increased. In this case, the scaled out node\n// needs to be available to other nodes (namely data sources) that may depend\n// on it for proper interpolation, or confusing \"index out of range\" errors can\n// occur.\n//\n// The steps in this sequence are very similar to the steps carried out in\n// plan, but nothing is done with the diff after it is created - it is dropped,\n// and its changes are not counted in the UI.\nfunc (n *NodeRefreshableManagedResourceInstance) evalTreeManagedResourceNoState() EvalNode {\n\taddr := n.ResourceInstanceAddr()\n\n\t// Declare a bunch of variables that are used for state during\n\t// evaluation. Most of this are written to by-address below.\n\tvar provider providers.Interface\n\tvar providerSchema *ProviderSchema\n\tvar change *plans.ResourceInstanceChange\n\tvar state *states.ResourceInstanceObject\n\n\treturn &EvalSequence{\n\t\tNodes: []EvalNode{\n\t\t\t&EvalGetProvider{\n\t\t\t\tAddr:   n.ResolvedProvider,\n\t\t\t\tOutput: &provider,\n\t\t\t\tSchema: &providerSchema,\n\t\t\t},\n\n\t\t\t&EvalReadState{\n\t\t\t\tAddr:           addr.Resource,\n\t\t\t\tProvider:       &provider,\n\t\t\t\tProviderSchema: &providerSchema,\n\n\t\t\t\tOutput: &state,\n\t\t\t},\n\n\t\t\t&EvalDiff{\n\t\t\t\tAddr:           addr.Resource,\n\t\t\t\tConfig:         n.Config,\n\t\t\t\tProvider:       &provider,\n\t\t\t\tProviderAddr:   n.ResolvedProvider,\n\t\t\t\tProviderSchema: &providerSchema,\n\t\t\t\tState:          &state,\n\t\t\t\tOutputChange:   &change,\n\t\t\t\tOutputState:    &state,\n\t\t\t\tStub:           true,\n\t\t\t},\n\n\t\t\t&EvalWriteState{\n\t\t\t\tAddr:           addr.Resource,\n\t\t\t\tProviderAddr:   n.ResolvedProvider,\n\t\t\t\tProviderSchema: &providerSchema,\n\t\t\t\tState:          &state,\n\t\t\t},\n\n\t\t\t// We must also save the planned change, so that expressions in\n\t\t\t// other nodes, such as provider configurations and data resources,\n\t\t\t// can work with the planned new value.\n\t\t\t//\n\t\t\t// This depends on the fact that Context.Refresh creates a\n\t\t\t// temporary new empty changeset for the duration of its graph\n\t\t\t// walk, and so this recorded change will be discarded immediately\n\t\t\t// after the refresh walk completes.\n\t\t\t&EvalWriteDiff{\n\t\t\t\tAddr:           addr.Resource,\n\t\t\t\tChange:         &change,\n\t\t\t\tProviderSchema: &providerSchema,\n\t\t\t},\n\t\t},\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/node_resource_validate.go",
    "content": "package terraform\n\nimport (\n\t\"github.com/hashicorp/terraform/configs\"\n\t\"github.com/hashicorp/terraform/configs/configschema\"\n\t\"github.com/hashicorp/terraform/providers\"\n\t\"github.com/hashicorp/terraform/provisioners\"\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// NodeValidatableResource represents a resource that is used for validation\n// only.\ntype NodeValidatableResource struct {\n\t*NodeAbstractResource\n}\n\nvar (\n\t_ GraphNodeSubPath              = (*NodeValidatableResource)(nil)\n\t_ GraphNodeEvalable             = (*NodeValidatableResource)(nil)\n\t_ GraphNodeReferenceable        = (*NodeValidatableResource)(nil)\n\t_ GraphNodeReferencer           = (*NodeValidatableResource)(nil)\n\t_ GraphNodeResource             = (*NodeValidatableResource)(nil)\n\t_ GraphNodeAttachResourceConfig = (*NodeValidatableResource)(nil)\n)\n\n// GraphNodeEvalable\nfunc (n *NodeValidatableResource) EvalTree() EvalNode {\n\taddr := n.ResourceAddr()\n\tconfig := n.Config\n\n\t// Declare the variables will be used are used to pass values along\n\t// the evaluation sequence below. These are written to via pointers\n\t// passed to the EvalNodes.\n\tvar provider providers.Interface\n\tvar providerSchema *ProviderSchema\n\tvar configVal cty.Value\n\n\tseq := &EvalSequence{\n\t\tNodes: []EvalNode{\n\t\t\t&EvalGetProvider{\n\t\t\t\tAddr:   n.ResolvedProvider,\n\t\t\t\tOutput: &provider,\n\t\t\t\tSchema: &providerSchema,\n\t\t\t},\n\t\t\t&EvalValidateResource{\n\t\t\t\tAddr:           addr.Resource,\n\t\t\t\tProvider:       &provider,\n\t\t\t\tProviderSchema: &providerSchema,\n\t\t\t\tConfig:         config,\n\t\t\t\tConfigVal:      &configVal,\n\t\t\t},\n\t\t},\n\t}\n\n\tif managed := n.Config.Managed; managed != nil {\n\t\thasCount := n.Config.Count != nil\n\n\t\t// Validate all the provisioners\n\t\tfor _, p := range managed.Provisioners {\n\t\t\tvar provisioner provisioners.Interface\n\t\t\tvar provisionerSchema *configschema.Block\n\n\t\t\tif p.Connection == nil {\n\t\t\t\tp.Connection = config.Managed.Connection\n\t\t\t} else if config.Managed.Connection != nil {\n\t\t\t\tp.Connection.Config = configs.MergeBodies(config.Managed.Connection.Config, p.Connection.Config)\n\t\t\t}\n\n\t\t\tseq.Nodes = append(\n\t\t\t\tseq.Nodes,\n\t\t\t\t&EvalGetProvisioner{\n\t\t\t\t\tName:   p.Type,\n\t\t\t\t\tOutput: &provisioner,\n\t\t\t\t\tSchema: &provisionerSchema,\n\t\t\t\t},\n\t\t\t\t&EvalValidateProvisioner{\n\t\t\t\t\tResourceAddr:     addr.Resource,\n\t\t\t\t\tProvisioner:      &provisioner,\n\t\t\t\t\tSchema:           &provisionerSchema,\n\t\t\t\t\tConfig:           p,\n\t\t\t\t\tResourceHasCount: hasCount,\n\t\t\t\t},\n\t\t\t)\n\t\t}\n\t}\n\n\treturn seq\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/node_root_variable.go",
    "content": "package terraform\n\nimport (\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/configs\"\n\t\"github.com/hashicorp/terraform/dag\"\n)\n\n// NodeRootVariable represents a root variable input.\ntype NodeRootVariable struct {\n\tAddr   addrs.InputVariable\n\tConfig *configs.Variable\n}\n\nvar (\n\t_ GraphNodeSubPath       = (*NodeRootVariable)(nil)\n\t_ GraphNodeReferenceable = (*NodeRootVariable)(nil)\n\t_ dag.GraphNodeDotter    = (*NodeApplyableModuleVariable)(nil)\n)\n\nfunc (n *NodeRootVariable) Name() string {\n\treturn n.Addr.String()\n}\n\n// GraphNodeSubPath\nfunc (n *NodeRootVariable) Path() addrs.ModuleInstance {\n\treturn addrs.RootModuleInstance\n}\n\n// GraphNodeReferenceable\nfunc (n *NodeRootVariable) ReferenceableAddrs() []addrs.Referenceable {\n\treturn []addrs.Referenceable{n.Addr}\n}\n\n// dag.GraphNodeDotter impl.\nfunc (n *NodeRootVariable) DotNode(name string, opts *dag.DotOpts) *dag.DotNode {\n\treturn &dag.DotNode{\n\t\tName: name,\n\t\tAttrs: map[string]string{\n\t\t\t\"label\": n.Name(),\n\t\t\t\"shape\": \"note\",\n\t\t},\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/path.go",
    "content": "package terraform\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n)\n\n// PathObjectCacheKey is like PathCacheKey but includes an additional name\n// to be included in the key, for module-namespaced objects.\n//\n// The result of this function is guaranteed unique for any distinct pair\n// of path and name, but is not guaranteed to be in any particular format\n// and in particular should never be shown to end-users.\nfunc PathObjectCacheKey(path addrs.ModuleInstance, objectName string) string {\n\treturn fmt.Sprintf(\"%s|%s\", path.String(), objectName)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/plan.go",
    "content": "package terraform\n\nimport (\n\t\"bytes\"\n\t\"encoding/gob\"\n\t\"fmt\"\n\t\"io\"\n\t\"sync\"\n\n\t\"github.com/zclconf/go-cty/cty\"\n\n\t\"github.com/hashicorp/terraform/configs\"\n)\n\nfunc init() {\n\tgob.Register(make([]interface{}, 0))\n\tgob.Register(make([]map[string]interface{}, 0))\n\tgob.Register(make(map[string]interface{}))\n\tgob.Register(make(map[string]string))\n}\n\n// Plan represents a single Terraform execution plan, which contains\n// all the information necessary to make an infrastructure change.\n//\n// A plan has to contain basically the entire state of the world\n// necessary to make a change: the state, diff, config, backend config, etc.\n// This is so that it can run alone without any other data.\ntype Plan struct {\n\t// Diff describes the resource actions that must be taken when this\n\t// plan is applied.\n\tDiff *Diff\n\n\t// Config represents the entire configuration that was present when this\n\t// plan was created.\n\tConfig *configs.Config\n\n\t// State is the Terraform state that was current when this plan was\n\t// created.\n\t//\n\t// It is not allowed to apply a plan that has a stale state, since its\n\t// diff could be outdated.\n\tState *State\n\n\t// Vars retains the variables that were set when creating the plan, so\n\t// that the same variables can be applied during apply.\n\tVars map[string]cty.Value\n\n\t// Targets, if non-empty, contains a set of resource address strings that\n\t// identify graph nodes that were selected as targets for plan.\n\t//\n\t// When targets are set, any graph node that is not directly targeted or\n\t// indirectly targeted via dependencies is excluded from the graph.\n\tTargets []string\n\n\t// TerraformVersion is the version of Terraform that was used to create\n\t// this plan.\n\t//\n\t// It is not allowed to apply a plan created with a different version of\n\t// Terraform, since the other fields of this structure may be interpreted\n\t// in different ways between versions.\n\tTerraformVersion string\n\n\t// ProviderSHA256s is a map giving the SHA256 hashes of the exact binaries\n\t// used as plugins for each provider during plan.\n\t//\n\t// These must match between plan and apply to ensure that the diff is\n\t// correctly interpreted, since different provider versions may have\n\t// different attributes or attribute value constraints.\n\tProviderSHA256s map[string][]byte\n\n\t// Backend is the backend that this plan should use and store data with.\n\tBackend *BackendState\n\n\t// Destroy indicates that this plan was created for a full destroy operation\n\tDestroy bool\n\n\tonce sync.Once\n}\n\nfunc (p *Plan) String() string {\n\tbuf := new(bytes.Buffer)\n\tbuf.WriteString(\"DIFF:\\n\\n\")\n\tbuf.WriteString(p.Diff.String())\n\tbuf.WriteString(\"\\n\\nSTATE:\\n\\n\")\n\tbuf.WriteString(p.State.String())\n\treturn buf.String()\n}\n\nfunc (p *Plan) init() {\n\tp.once.Do(func() {\n\t\tif p.Diff == nil {\n\t\t\tp.Diff = new(Diff)\n\t\t\tp.Diff.init()\n\t\t}\n\n\t\tif p.State == nil {\n\t\t\tp.State = new(State)\n\t\t\tp.State.init()\n\t\t}\n\n\t\tif p.Vars == nil {\n\t\t\tp.Vars = make(map[string]cty.Value)\n\t\t}\n\t})\n}\n\n// The format byte is prefixed into the plan file format so that we have\n// the ability in the future to change the file format if we want for any\n// reason.\nconst planFormatMagic = \"tfplan\"\nconst planFormatVersion byte = 2\n\n// ReadPlan reads a plan structure out of a reader in the format that\n// was written by WritePlan.\nfunc ReadPlan(src io.Reader) (*Plan, error) {\n\treturn nil, fmt.Errorf(\"terraform.ReadPlan is no longer in use; use planfile.Open instead\")\n}\n\n// WritePlan writes a plan somewhere in a binary format.\nfunc WritePlan(d *Plan, dst io.Writer) error {\n\treturn fmt.Errorf(\"terraform.WritePlan is no longer in use; use planfile.Create instead\")\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/provider_mock.go",
    "content": "package terraform\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"sync\"\n\n\t\"github.com/zclconf/go-cty/cty\"\n\tctyjson \"github.com/zclconf/go-cty/cty/json\"\n\n\t\"github.com/hashicorp/terraform/config\"\n\t\"github.com/hashicorp/terraform/config/hcl2shim\"\n\t\"github.com/hashicorp/terraform/providers\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n)\n\nvar _ providers.Interface = (*MockProvider)(nil)\n\n// MockProvider implements providers.Interface but mocks out all the\n// calls for testing purposes.\ntype MockProvider struct {\n\tsync.Mutex\n\n\t// Anything you want, in case you need to store extra data with the mock.\n\tMeta interface{}\n\n\tGetSchemaCalled bool\n\tGetSchemaReturn *ProviderSchema // This is using ProviderSchema directly rather than providers.GetSchemaResponse for compatibility with old tests\n\n\tPrepareProviderConfigCalled   bool\n\tPrepareProviderConfigResponse providers.PrepareProviderConfigResponse\n\tPrepareProviderConfigRequest  providers.PrepareProviderConfigRequest\n\tPrepareProviderConfigFn       func(providers.PrepareProviderConfigRequest) providers.PrepareProviderConfigResponse\n\n\tValidateResourceTypeConfigCalled   bool\n\tValidateResourceTypeConfigTypeName string\n\tValidateResourceTypeConfigResponse providers.ValidateResourceTypeConfigResponse\n\tValidateResourceTypeConfigRequest  providers.ValidateResourceTypeConfigRequest\n\tValidateResourceTypeConfigFn       func(providers.ValidateResourceTypeConfigRequest) providers.ValidateResourceTypeConfigResponse\n\n\tValidateDataSourceConfigCalled   bool\n\tValidateDataSourceConfigTypeName string\n\tValidateDataSourceConfigResponse providers.ValidateDataSourceConfigResponse\n\tValidateDataSourceConfigRequest  providers.ValidateDataSourceConfigRequest\n\tValidateDataSourceConfigFn       func(providers.ValidateDataSourceConfigRequest) providers.ValidateDataSourceConfigResponse\n\n\tUpgradeResourceStateCalled   bool\n\tUpgradeResourceStateTypeName string\n\tUpgradeResourceStateResponse providers.UpgradeResourceStateResponse\n\tUpgradeResourceStateRequest  providers.UpgradeResourceStateRequest\n\tUpgradeResourceStateFn       func(providers.UpgradeResourceStateRequest) providers.UpgradeResourceStateResponse\n\n\tConfigureCalled   bool\n\tConfigureResponse providers.ConfigureResponse\n\tConfigureRequest  providers.ConfigureRequest\n\tConfigureNewFn    func(providers.ConfigureRequest) providers.ConfigureResponse // Named ConfigureNewFn so we can still have the legacy ConfigureFn declared below\n\n\tStopCalled   bool\n\tStopFn       func() error\n\tStopResponse error\n\n\tReadResourceCalled   bool\n\tReadResourceResponse providers.ReadResourceResponse\n\tReadResourceRequest  providers.ReadResourceRequest\n\tReadResourceFn       func(providers.ReadResourceRequest) providers.ReadResourceResponse\n\n\tPlanResourceChangeCalled   bool\n\tPlanResourceChangeResponse providers.PlanResourceChangeResponse\n\tPlanResourceChangeRequest  providers.PlanResourceChangeRequest\n\tPlanResourceChangeFn       func(providers.PlanResourceChangeRequest) providers.PlanResourceChangeResponse\n\n\tApplyResourceChangeCalled   bool\n\tApplyResourceChangeResponse providers.ApplyResourceChangeResponse\n\tApplyResourceChangeRequest  providers.ApplyResourceChangeRequest\n\tApplyResourceChangeFn       func(providers.ApplyResourceChangeRequest) providers.ApplyResourceChangeResponse\n\n\tImportResourceStateCalled   bool\n\tImportResourceStateResponse providers.ImportResourceStateResponse\n\tImportResourceStateRequest  providers.ImportResourceStateRequest\n\tImportResourceStateFn       func(providers.ImportResourceStateRequest) providers.ImportResourceStateResponse\n\t// Legacy return type for existing tests, which will be shimmed into an\n\t// ImportResourceStateResponse if set\n\tImportStateReturn []*InstanceState\n\n\tReadDataSourceCalled   bool\n\tReadDataSourceResponse providers.ReadDataSourceResponse\n\tReadDataSourceRequest  providers.ReadDataSourceRequest\n\tReadDataSourceFn       func(providers.ReadDataSourceRequest) providers.ReadDataSourceResponse\n\n\tCloseCalled bool\n\tCloseError  error\n\n\t// Legacy callbacks: if these are set, we will shim incoming calls for\n\t// new-style methods to these old-fashioned terraform.ResourceProvider\n\t// mock callbacks, for the benefit of older tests that were written against\n\t// the old mock API.\n\tValidateFn  func(c *ResourceConfig) (ws []string, es []error)\n\tConfigureFn func(c *ResourceConfig) error\n\tDiffFn      func(info *InstanceInfo, s *InstanceState, c *ResourceConfig) (*InstanceDiff, error)\n\tApplyFn     func(info *InstanceInfo, s *InstanceState, d *InstanceDiff) (*InstanceState, error)\n}\n\nfunc (p *MockProvider) GetSchema() providers.GetSchemaResponse {\n\tp.Lock()\n\tdefer p.Unlock()\n\tp.GetSchemaCalled = true\n\treturn p.getSchema()\n}\n\nfunc (p *MockProvider) getSchema() providers.GetSchemaResponse {\n\t// This version of getSchema doesn't do any locking, so it's suitable to\n\t// call from other methods of this mock as long as they are already\n\t// holding the lock.\n\n\tret := providers.GetSchemaResponse{\n\t\tProvider:      providers.Schema{},\n\t\tDataSources:   map[string]providers.Schema{},\n\t\tResourceTypes: map[string]providers.Schema{},\n\t}\n\tif p.GetSchemaReturn != nil {\n\t\tret.Provider.Block = p.GetSchemaReturn.Provider\n\t\tfor n, s := range p.GetSchemaReturn.DataSources {\n\t\t\tret.DataSources[n] = providers.Schema{\n\t\t\t\tBlock: s,\n\t\t\t}\n\t\t}\n\t\tfor n, s := range p.GetSchemaReturn.ResourceTypes {\n\t\t\tret.ResourceTypes[n] = providers.Schema{\n\t\t\t\tVersion: int64(p.GetSchemaReturn.ResourceTypeSchemaVersions[n]),\n\t\t\t\tBlock:   s,\n\t\t\t}\n\t\t}\n\t}\n\n\treturn ret\n}\n\nfunc (p *MockProvider) PrepareProviderConfig(r providers.PrepareProviderConfigRequest) providers.PrepareProviderConfigResponse {\n\tp.Lock()\n\tdefer p.Unlock()\n\n\tp.PrepareProviderConfigCalled = true\n\tp.PrepareProviderConfigRequest = r\n\tif p.PrepareProviderConfigFn != nil {\n\t\treturn p.PrepareProviderConfigFn(r)\n\t}\n\treturn p.PrepareProviderConfigResponse\n}\n\nfunc (p *MockProvider) ValidateResourceTypeConfig(r providers.ValidateResourceTypeConfigRequest) providers.ValidateResourceTypeConfigResponse {\n\tp.Lock()\n\tdefer p.Unlock()\n\n\tp.ValidateResourceTypeConfigCalled = true\n\tp.ValidateResourceTypeConfigRequest = r\n\n\tif p.ValidateFn != nil {\n\t\tresp := p.getSchema()\n\t\tschema := resp.Provider.Block\n\t\trc := NewResourceConfigShimmed(r.Config, schema)\n\t\twarns, errs := p.ValidateFn(rc)\n\t\tret := providers.ValidateResourceTypeConfigResponse{}\n\t\tfor _, warn := range warns {\n\t\t\tret.Diagnostics = ret.Diagnostics.Append(tfdiags.SimpleWarning(warn))\n\t\t}\n\t\tfor _, err := range errs {\n\t\t\tret.Diagnostics = ret.Diagnostics.Append(err)\n\t\t}\n\t}\n\tif p.ValidateResourceTypeConfigFn != nil {\n\t\treturn p.ValidateResourceTypeConfigFn(r)\n\t}\n\n\treturn p.ValidateResourceTypeConfigResponse\n}\n\nfunc (p *MockProvider) ValidateDataSourceConfig(r providers.ValidateDataSourceConfigRequest) providers.ValidateDataSourceConfigResponse {\n\tp.Lock()\n\tdefer p.Unlock()\n\n\tp.ValidateDataSourceConfigCalled = true\n\tp.ValidateDataSourceConfigRequest = r\n\n\tif p.ValidateDataSourceConfigFn != nil {\n\t\treturn p.ValidateDataSourceConfigFn(r)\n\t}\n\n\treturn p.ValidateDataSourceConfigResponse\n}\n\nfunc (p *MockProvider) UpgradeResourceState(r providers.UpgradeResourceStateRequest) providers.UpgradeResourceStateResponse {\n\tp.Lock()\n\tdefer p.Unlock()\n\n\tschemas := p.getSchema()\n\tschema := schemas.ResourceTypes[r.TypeName]\n\tschemaType := schema.Block.ImpliedType()\n\n\tp.UpgradeResourceStateCalled = true\n\tp.UpgradeResourceStateRequest = r\n\n\tif p.UpgradeResourceStateFn != nil {\n\t\treturn p.UpgradeResourceStateFn(r)\n\t}\n\n\tresp := p.UpgradeResourceStateResponse\n\n\tif resp.UpgradedState == cty.NilVal {\n\t\tswitch {\n\t\tcase r.RawStateFlatmap != nil:\n\t\t\tv, err := hcl2shim.HCL2ValueFromFlatmap(r.RawStateFlatmap, schemaType)\n\t\t\tif err != nil {\n\t\t\t\tresp.Diagnostics = resp.Diagnostics.Append(err)\n\t\t\t\treturn resp\n\t\t\t}\n\t\t\tresp.UpgradedState = v\n\t\tcase len(r.RawStateJSON) > 0:\n\t\t\tv, err := ctyjson.Unmarshal(r.RawStateJSON, schemaType)\n\n\t\t\tif err != nil {\n\t\t\t\tresp.Diagnostics = resp.Diagnostics.Append(err)\n\t\t\t\treturn resp\n\t\t\t}\n\t\t\tresp.UpgradedState = v\n\t\t}\n\t}\n\treturn resp\n}\n\nfunc (p *MockProvider) Configure(r providers.ConfigureRequest) providers.ConfigureResponse {\n\tp.Lock()\n\tdefer p.Unlock()\n\n\tp.ConfigureCalled = true\n\tp.ConfigureRequest = r\n\n\tif p.ConfigureFn != nil {\n\t\tresp := p.getSchema()\n\t\tschema := resp.Provider.Block\n\t\trc := NewResourceConfigShimmed(r.Config, schema)\n\t\tret := providers.ConfigureResponse{}\n\n\t\terr := p.ConfigureFn(rc)\n\t\tif err != nil {\n\t\t\tret.Diagnostics = ret.Diagnostics.Append(err)\n\t\t}\n\t\treturn ret\n\t}\n\tif p.ConfigureNewFn != nil {\n\t\treturn p.ConfigureNewFn(r)\n\t}\n\n\treturn p.ConfigureResponse\n}\n\nfunc (p *MockProvider) Stop() error {\n\t// We intentionally don't lock in this one because the whole point of this\n\t// method is to be called concurrently with another operation that can\n\t// be cancelled.  The provider itself is responsible for handling\n\t// any concurrency concerns in this case.\n\n\tp.StopCalled = true\n\tif p.StopFn != nil {\n\t\treturn p.StopFn()\n\t}\n\n\treturn p.StopResponse\n}\n\nfunc (p *MockProvider) ReadResource(r providers.ReadResourceRequest) providers.ReadResourceResponse {\n\tp.Lock()\n\tdefer p.Unlock()\n\n\tp.ReadResourceCalled = true\n\tp.ReadResourceRequest = r\n\n\tif p.ReadResourceFn != nil {\n\t\treturn p.ReadResourceFn(r)\n\t}\n\n\t// make sure the NewState fits the schema\n\tnewState, err := p.GetSchemaReturn.ResourceTypes[r.TypeName].CoerceValue(p.ReadResourceResponse.NewState)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tresp := p.ReadResourceResponse\n\tresp.NewState = newState\n\n\treturn resp\n}\n\nfunc (p *MockProvider) PlanResourceChange(r providers.PlanResourceChangeRequest) providers.PlanResourceChangeResponse {\n\tp.Lock()\n\tdefer p.Unlock()\n\n\tp.PlanResourceChangeCalled = true\n\tp.PlanResourceChangeRequest = r\n\n\tif p.DiffFn != nil {\n\t\tps := p.getSchema()\n\t\tif ps.ResourceTypes == nil || ps.ResourceTypes[r.TypeName].Block == nil {\n\t\t\treturn providers.PlanResourceChangeResponse{\n\t\t\t\tDiagnostics: tfdiags.Diagnostics(nil).Append(fmt.Printf(\"mock provider has no schema for resource type %s\", r.TypeName)),\n\t\t\t}\n\t\t}\n\t\tschema := ps.ResourceTypes[r.TypeName].Block\n\t\tinfo := &InstanceInfo{\n\t\t\tType: r.TypeName,\n\t\t}\n\t\tpriorState := NewInstanceStateShimmedFromValue(r.PriorState, 0)\n\t\tcfg := NewResourceConfigShimmed(r.Config, schema)\n\n\t\tlegacyDiff, err := p.DiffFn(info, priorState, cfg)\n\n\t\tvar res providers.PlanResourceChangeResponse\n\t\tres.PlannedState = r.ProposedNewState\n\t\tif err != nil {\n\t\t\tres.Diagnostics = res.Diagnostics.Append(err)\n\t\t}\n\t\tif legacyDiff != nil {\n\t\t\tnewVal, err := legacyDiff.ApplyToValue(r.PriorState, schema)\n\t\t\tif err != nil {\n\t\t\t\tres.Diagnostics = res.Diagnostics.Append(err)\n\t\t\t}\n\n\t\t\tres.PlannedState = newVal\n\n\t\t\tvar requiresNew []string\n\t\t\tfor attr, d := range legacyDiff.Attributes {\n\t\t\t\tif d.RequiresNew {\n\t\t\t\t\trequiresNew = append(requiresNew, attr)\n\t\t\t\t}\n\t\t\t}\n\t\t\trequiresReplace, err := hcl2shim.RequiresReplace(requiresNew, schema.ImpliedType())\n\t\t\tif err != nil {\n\t\t\t\tres.Diagnostics = res.Diagnostics.Append(err)\n\t\t\t}\n\t\t\tres.RequiresReplace = requiresReplace\n\t\t}\n\t\treturn res\n\t}\n\tif p.PlanResourceChangeFn != nil {\n\t\treturn p.PlanResourceChangeFn(r)\n\t}\n\n\treturn p.PlanResourceChangeResponse\n}\n\nfunc (p *MockProvider) ApplyResourceChange(r providers.ApplyResourceChangeRequest) providers.ApplyResourceChangeResponse {\n\tp.Lock()\n\tp.ApplyResourceChangeCalled = true\n\tp.ApplyResourceChangeRequest = r\n\tp.Unlock()\n\n\tif p.ApplyFn != nil {\n\t\t// ApplyFn is a special callback fashioned after our old provider\n\t\t// interface, which expected to be given an actual diff rather than\n\t\t// separate old/new values to apply. Therefore we need to approximate\n\t\t// a diff here well enough that _most_ of our legacy ApplyFns in old\n\t\t// tests still see the behavior they are expecting. New tests should\n\t\t// not use this, and should instead use ApplyResourceChangeFn directly.\n\t\tproviderSchema := p.getSchema()\n\t\tschema, ok := providerSchema.ResourceTypes[r.TypeName]\n\t\tif !ok {\n\t\t\treturn providers.ApplyResourceChangeResponse{\n\t\t\t\tDiagnostics: tfdiags.Diagnostics(nil).Append(fmt.Errorf(\"no mocked schema available for resource type %s\", r.TypeName)),\n\t\t\t}\n\t\t}\n\n\t\tinfo := &InstanceInfo{\n\t\t\tType: r.TypeName,\n\t\t}\n\n\t\tpriorVal := r.PriorState\n\t\tplannedVal := r.PlannedState\n\t\tpriorMap := hcl2shim.FlatmapValueFromHCL2(priorVal)\n\t\tplannedMap := hcl2shim.FlatmapValueFromHCL2(plannedVal)\n\t\ts := NewInstanceStateShimmedFromValue(priorVal, 0)\n\t\td := &InstanceDiff{\n\t\t\tAttributes: make(map[string]*ResourceAttrDiff),\n\t\t}\n\t\tif plannedMap == nil { // destroying, then\n\t\t\td.Destroy = true\n\t\t\t// Destroy diffs don't have any attribute diffs\n\t\t} else {\n\t\t\tif priorMap == nil { // creating, then\n\t\t\t\t// We'll just make an empty prior map to make things easier below.\n\t\t\t\tpriorMap = make(map[string]string)\n\t\t\t}\n\n\t\t\tfor k, new := range plannedMap {\n\t\t\t\told := priorMap[k]\n\t\t\t\tnewComputed := false\n\t\t\t\tif new == config.UnknownVariableValue {\n\t\t\t\t\tnew = \"\"\n\t\t\t\t\tnewComputed = true\n\t\t\t\t}\n\t\t\t\td.Attributes[k] = &ResourceAttrDiff{\n\t\t\t\t\tOld:         old,\n\t\t\t\t\tNew:         new,\n\t\t\t\t\tNewComputed: newComputed,\n\t\t\t\t\tType:        DiffAttrInput, // not generally used in tests, so just hard-coded\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Also need any attributes that were removed in \"planned\"\n\t\t\tfor k, old := range priorMap {\n\t\t\t\tif _, ok := plannedMap[k]; ok {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\td.Attributes[k] = &ResourceAttrDiff{\n\t\t\t\t\tOld:        old,\n\t\t\t\t\tNewRemoved: true,\n\t\t\t\t\tType:       DiffAttrInput,\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tnewState, err := p.ApplyFn(info, s, d)\n\t\tresp := providers.ApplyResourceChangeResponse{}\n\t\tif err != nil {\n\t\t\tresp.Diagnostics = resp.Diagnostics.Append(err)\n\t\t}\n\t\tif newState != nil {\n\t\t\tvar newVal cty.Value\n\t\t\tif newState != nil {\n\t\t\t\tvar err error\n\t\t\t\tnewVal, err = newState.AttrsAsObjectValue(schema.Block.ImpliedType())\n\t\t\t\tif err != nil {\n\t\t\t\t\tresp.Diagnostics = resp.Diagnostics.Append(err)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// If apply returned a nil new state then that's the old way to\n\t\t\t\t// indicate that the object was destroyed. Our new interface calls\n\t\t\t\t// for that to be signalled as a null value.\n\t\t\t\tnewVal = cty.NullVal(schema.Block.ImpliedType())\n\t\t\t}\n\t\t\tresp.NewState = newVal\n\t\t}\n\n\t\treturn resp\n\t}\n\tif p.ApplyResourceChangeFn != nil {\n\t\treturn p.ApplyResourceChangeFn(r)\n\t}\n\n\treturn p.ApplyResourceChangeResponse\n}\n\nfunc (p *MockProvider) ImportResourceState(r providers.ImportResourceStateRequest) providers.ImportResourceStateResponse {\n\tp.Lock()\n\tdefer p.Unlock()\n\n\tif p.ImportStateReturn != nil {\n\t\tfor _, is := range p.ImportStateReturn {\n\t\t\tif is.Attributes == nil {\n\t\t\t\tis.Attributes = make(map[string]string)\n\t\t\t}\n\t\t\tis.Attributes[\"id\"] = is.ID\n\n\t\t\ttypeName := is.Ephemeral.Type\n\t\t\t// Use the requested type if the resource has no type of it's own.\n\t\t\t// We still return the empty type, which will error, but this prevents a panic.\n\t\t\tif typeName == \"\" {\n\t\t\t\ttypeName = r.TypeName\n\t\t\t}\n\n\t\t\tschema := p.GetSchemaReturn.ResourceTypes[typeName]\n\t\t\tif schema == nil {\n\t\t\t\tpanic(\"no schema found for \" + typeName)\n\t\t\t}\n\n\t\t\tprivate, err := json.Marshal(is.Meta)\n\t\t\tif err != nil {\n\t\t\t\tpanic(err)\n\t\t\t}\n\n\t\t\tstate, err := hcl2shim.HCL2ValueFromFlatmap(is.Attributes, schema.ImpliedType())\n\t\t\tif err != nil {\n\t\t\t\tpanic(err)\n\t\t\t}\n\n\t\t\tstate, err = schema.CoerceValue(state)\n\t\t\tif err != nil {\n\t\t\t\tpanic(err)\n\t\t\t}\n\n\t\t\tp.ImportResourceStateResponse.ImportedResources = append(\n\t\t\t\tp.ImportResourceStateResponse.ImportedResources,\n\t\t\t\tproviders.ImportedResource{\n\t\t\t\t\tTypeName: is.Ephemeral.Type,\n\t\t\t\t\tState:    state,\n\t\t\t\t\tPrivate:  private,\n\t\t\t\t})\n\t\t}\n\t}\n\n\tp.ImportResourceStateCalled = true\n\tp.ImportResourceStateRequest = r\n\tif p.ImportResourceStateFn != nil {\n\t\treturn p.ImportResourceStateFn(r)\n\t}\n\n\treturn p.ImportResourceStateResponse\n}\n\nfunc (p *MockProvider) ReadDataSource(r providers.ReadDataSourceRequest) providers.ReadDataSourceResponse {\n\tp.Lock()\n\tdefer p.Unlock()\n\n\tp.ReadDataSourceCalled = true\n\tp.ReadDataSourceRequest = r\n\n\tif p.ReadDataSourceFn != nil {\n\t\treturn p.ReadDataSourceFn(r)\n\t}\n\n\treturn p.ReadDataSourceResponse\n}\n\nfunc (p *MockProvider) Close() error {\n\tp.CloseCalled = true\n\treturn p.CloseError\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/provisioner_mock.go",
    "content": "package terraform\n\nimport (\n\t\"fmt\"\n\t\"sync\"\n\n\t\"github.com/zclconf/go-cty/cty\"\n\t\"github.com/zclconf/go-cty/cty/convert\"\n\n\t\"github.com/hashicorp/terraform/provisioners\"\n)\n\nvar _ provisioners.Interface = (*MockProvisioner)(nil)\n\n// MockProvisioner implements provisioners.Interface but mocks out all the\n// calls for testing purposes.\ntype MockProvisioner struct {\n\tsync.Mutex\n\t// Anything you want, in case you need to store extra data with the mock.\n\tMeta interface{}\n\n\tGetSchemaCalled   bool\n\tGetSchemaResponse provisioners.GetSchemaResponse\n\n\tValidateProvisionerConfigCalled   bool\n\tValidateProvisionerConfigRequest  provisioners.ValidateProvisionerConfigRequest\n\tValidateProvisionerConfigResponse provisioners.ValidateProvisionerConfigResponse\n\tValidateProvisionerConfigFn       func(provisioners.ValidateProvisionerConfigRequest) provisioners.ValidateProvisionerConfigResponse\n\n\tProvisionResourceCalled   bool\n\tProvisionResourceRequest  provisioners.ProvisionResourceRequest\n\tProvisionResourceResponse provisioners.ProvisionResourceResponse\n\tProvisionResourceFn       func(provisioners.ProvisionResourceRequest) provisioners.ProvisionResourceResponse\n\n\tStopCalled   bool\n\tStopResponse error\n\tStopFn       func() error\n\n\tCloseCalled   bool\n\tCloseResponse error\n\tCloseFn       func() error\n\n\t// Legacy callbacks: if these are set, we will shim incoming calls for\n\t// new-style methods to these old-fashioned terraform.ResourceProvider\n\t// mock callbacks, for the benefit of older tests that were written against\n\t// the old mock API.\n\tApplyFn func(rs *InstanceState, c *ResourceConfig) error\n}\n\nfunc (p *MockProvisioner) GetSchema() provisioners.GetSchemaResponse {\n\tp.Lock()\n\tdefer p.Unlock()\n\n\tp.GetSchemaCalled = true\n\treturn p.getSchema()\n}\n\n// getSchema is the implementation of GetSchema, which can be called from other\n// methods on MockProvisioner that may already be holding the lock.\nfunc (p *MockProvisioner) getSchema() provisioners.GetSchemaResponse {\n\treturn p.GetSchemaResponse\n}\n\nfunc (p *MockProvisioner) ValidateProvisionerConfig(r provisioners.ValidateProvisionerConfigRequest) provisioners.ValidateProvisionerConfigResponse {\n\tp.Lock()\n\tdefer p.Unlock()\n\n\tp.ValidateProvisionerConfigCalled = true\n\tp.ValidateProvisionerConfigRequest = r\n\tif p.ValidateProvisionerConfigFn != nil {\n\t\treturn p.ValidateProvisionerConfigFn(r)\n\t}\n\treturn p.ValidateProvisionerConfigResponse\n}\n\nfunc (p *MockProvisioner) ProvisionResource(r provisioners.ProvisionResourceRequest) provisioners.ProvisionResourceResponse {\n\tp.Lock()\n\tdefer p.Unlock()\n\n\tp.ProvisionResourceCalled = true\n\tp.ProvisionResourceRequest = r\n\tif p.ApplyFn != nil {\n\t\tif !r.Config.IsKnown() {\n\t\t\tpanic(fmt.Sprintf(\"cannot provision with unknown value: %#v\", r.Config))\n\t\t}\n\n\t\tschema := p.getSchema()\n\t\trc := NewResourceConfigShimmed(r.Config, schema.Provisioner)\n\t\tconnVal := r.Connection\n\t\tconnMap := map[string]string{}\n\n\t\tif !connVal.IsNull() && connVal.IsKnown() {\n\t\t\tfor it := connVal.ElementIterator(); it.Next(); {\n\t\t\t\tak, av := it.Element()\n\t\t\t\tname := ak.AsString()\n\n\t\t\t\tif !av.IsKnown() || av.IsNull() {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tav, _ = convert.Convert(av, cty.String)\n\t\t\t\tconnMap[name] = av.AsString()\n\t\t\t}\n\t\t}\n\n\t\t// We no longer pass the full instance state to a provisioner, so we'll\n\t\t// construct a partial one that should be good enough for what existing\n\t\t// test mocks need.\n\t\tis := &InstanceState{\n\t\t\tEphemeral: EphemeralState{\n\t\t\t\tConnInfo: connMap,\n\t\t\t},\n\t\t}\n\t\tvar resp provisioners.ProvisionResourceResponse\n\t\terr := p.ApplyFn(is, rc)\n\t\tif err != nil {\n\t\t\tresp.Diagnostics = resp.Diagnostics.Append(err)\n\t\t}\n\t\treturn resp\n\t}\n\tif p.ProvisionResourceFn != nil {\n\t\tfn := p.ProvisionResourceFn\n\t\tp.Unlock()\n\t\treturn fn(r)\n\t}\n\n\treturn p.ProvisionResourceResponse\n}\n\nfunc (p *MockProvisioner) Stop() error {\n\t// We intentionally don't lock in this one because the whole point of this\n\t// method is to be called concurrently with another operation that can\n\t// be cancelled. The provisioner itself is responsible for handling\n\t// any concurrency concerns in this case.\n\n\tp.StopCalled = true\n\tif p.StopFn != nil {\n\t\treturn p.StopFn()\n\t}\n\n\treturn p.StopResponse\n}\n\nfunc (p *MockProvisioner) Close() error {\n\tp.Lock()\n\tdefer p.Unlock()\n\n\tp.CloseCalled = true\n\tif p.CloseFn != nil {\n\t\treturn p.CloseFn()\n\t}\n\n\treturn p.CloseResponse\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/resource.go",
    "content": "package terraform\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/mitchellh/copystructure\"\n\t\"github.com/mitchellh/reflectwalk\"\n\t\"github.com/zclconf/go-cty/cty\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/config\"\n\t\"github.com/hashicorp/terraform/config/hcl2shim\"\n\t\"github.com/hashicorp/terraform/configs/configschema\"\n)\n\n// ResourceProvisionerConfig is used to pair a provisioner\n// with its provided configuration. This allows us to use singleton\n// instances of each ResourceProvisioner and to keep the relevant\n// configuration instead of instantiating a new Provisioner for each\n// resource.\ntype ResourceProvisionerConfig struct {\n\tType        string\n\tProvisioner ResourceProvisioner\n\tConfig      *ResourceConfig\n\tRawConfig   *config.RawConfig\n\tConnInfo    *config.RawConfig\n}\n\n// Resource is a legacy way to identify a particular resource instance.\n//\n// New code should use addrs.ResourceInstance instead. This is still here\n// only for codepaths that haven't been updated yet.\ntype Resource struct {\n\t// These are all used by the new EvalNode stuff.\n\tName       string\n\tType       string\n\tCountIndex int\n\n\t// These aren't really used anymore anywhere, but we keep them around\n\t// since we haven't done a proper cleanup yet.\n\tId           string\n\tInfo         *InstanceInfo\n\tConfig       *ResourceConfig\n\tDependencies []string\n\tDiff         *InstanceDiff\n\tProvider     ResourceProvider\n\tState        *InstanceState\n\tProvisioners []*ResourceProvisionerConfig\n\tFlags        ResourceFlag\n}\n\n// NewResource constructs a legacy Resource object from an\n// addrs.ResourceInstance value.\n//\n// This is provided to shim to old codepaths that haven't been updated away\n// from this type yet. Since this old type is not able to represent instances\n// that have string keys, this function will panic if given a resource address\n// that has a string key.\nfunc NewResource(addr addrs.ResourceInstance) *Resource {\n\tret := &Resource{\n\t\tName: addr.Resource.Name,\n\t\tType: addr.Resource.Type,\n\t}\n\n\tif addr.Key != addrs.NoKey {\n\t\tswitch tk := addr.Key.(type) {\n\t\tcase addrs.IntKey:\n\t\t\tret.CountIndex = int(tk)\n\t\tdefault:\n\t\t\tpanic(fmt.Errorf(\"resource instance with key %#v is not supported\", addr.Key))\n\t\t}\n\t}\n\n\treturn ret\n}\n\n// ResourceKind specifies what kind of instance we're working with, whether\n// its a primary instance, a tainted instance, or an orphan.\ntype ResourceFlag byte\n\n// InstanceInfo is used to hold information about the instance and/or\n// resource being modified.\ntype InstanceInfo struct {\n\t// Id is a unique name to represent this instance. This is not related\n\t// to InstanceState.ID in any way.\n\tId string\n\n\t// ModulePath is the complete path of the module containing this\n\t// instance.\n\tModulePath []string\n\n\t// Type is the resource type of this instance\n\tType string\n\n\t// uniqueExtra is an internal field that can be populated to supply\n\t// extra metadata that is used to identify a unique instance in\n\t// the graph walk. This will be appended to HumanID when uniqueId\n\t// is called.\n\tuniqueExtra string\n}\n\n// NewInstanceInfo constructs an InstanceInfo from an addrs.AbsResourceInstance.\n//\n// InstanceInfo is a legacy type, and uses of it should be gradually replaced\n// by direct use of addrs.AbsResource or addrs.AbsResourceInstance as\n// appropriate.\n//\n// The legacy InstanceInfo type cannot represent module instances with instance\n// keys, so this function will panic if given such a path. Uses of this type\n// should all be removed or replaced before implementing \"count\" and \"for_each\"\n// arguments on modules in order to avoid such panics.\n//\n// This legacy type also cannot represent resource instances with string\n// instance keys. It will panic if the given key is not either NoKey or an\n// IntKey.\nfunc NewInstanceInfo(addr addrs.AbsResourceInstance) *InstanceInfo {\n\t// We need an old-style []string module path for InstanceInfo.\n\tpath := make([]string, len(addr.Module))\n\tfor i, step := range addr.Module {\n\t\tif step.InstanceKey != addrs.NoKey {\n\t\t\tpanic(\"NewInstanceInfo cannot convert module instance with key\")\n\t\t}\n\t\tpath[i] = step.Name\n\t}\n\n\t// This is a funny old meaning of \"id\" that is no longer current. It should\n\t// not be used for anything users might see. Note that it does not include\n\t// a representation of the resource mode, and so it's impossible to\n\t// determine from an InstanceInfo alone whether it is a managed or data\n\t// resource that is being referred to.\n\tid := fmt.Sprintf(\"%s.%s\", addr.Resource.Resource.Type, addr.Resource.Resource.Name)\n\tif addr.Resource.Resource.Mode == addrs.DataResourceMode {\n\t\tid = \"data.\" + id\n\t}\n\tif addr.Resource.Key != addrs.NoKey {\n\t\tswitch k := addr.Resource.Key.(type) {\n\t\tcase addrs.IntKey:\n\t\t\tid = id + fmt.Sprintf(\".%d\", int(k))\n\t\tdefault:\n\t\t\tpanic(fmt.Sprintf(\"NewInstanceInfo cannot convert resource instance with %T instance key\", addr.Resource.Key))\n\t\t}\n\t}\n\n\treturn &InstanceInfo{\n\t\tId:         id,\n\t\tModulePath: path,\n\t\tType:       addr.Resource.Resource.Type,\n\t}\n}\n\n// ResourceAddress returns the address of the resource that the receiver is describing.\nfunc (i *InstanceInfo) ResourceAddress() *ResourceAddress {\n\t// GROSS: for tainted and deposed instances, their status gets appended\n\t// to i.Id to create a unique id for the graph node. Historically these\n\t// ids were displayed to the user, so it's designed to be human-readable:\n\t//   \"aws_instance.bar.0 (deposed #0)\"\n\t//\n\t// So here we detect such suffixes and try to interpret them back to\n\t// their original meaning so we can then produce a ResourceAddress\n\t// with a suitable InstanceType.\n\tid := i.Id\n\tinstanceType := TypeInvalid\n\tif idx := strings.Index(id, \" (\"); idx != -1 {\n\t\tremain := id[idx:]\n\t\tid = id[:idx]\n\n\t\tswitch {\n\t\tcase strings.Contains(remain, \"tainted\"):\n\t\t\tinstanceType = TypeTainted\n\t\tcase strings.Contains(remain, \"deposed\"):\n\t\t\tinstanceType = TypeDeposed\n\t\t}\n\t}\n\n\taddr, err := parseResourceAddressInternal(id)\n\tif err != nil {\n\t\t// should never happen, since that would indicate a bug in the\n\t\t// code that constructed this InstanceInfo.\n\t\tpanic(fmt.Errorf(\"InstanceInfo has invalid Id %s\", id))\n\t}\n\tif len(i.ModulePath) > 1 {\n\t\taddr.Path = i.ModulePath[1:] // trim off \"root\" prefix, which is implied\n\t}\n\tif instanceType != TypeInvalid {\n\t\taddr.InstanceTypeSet = true\n\t\taddr.InstanceType = instanceType\n\t}\n\treturn addr\n}\n\n// ResourceConfig is a legacy type that was formerly used to represent\n// interpolatable configuration blocks. It is now only used to shim to old\n// APIs that still use this type, via NewResourceConfigShimmed.\ntype ResourceConfig struct {\n\tComputedKeys []string\n\tRaw          map[string]interface{}\n\tConfig       map[string]interface{}\n\n\traw *config.RawConfig\n}\n\n// NewResourceConfig creates a new ResourceConfig from a config.RawConfig.\nfunc NewResourceConfig(c *config.RawConfig) *ResourceConfig {\n\tresult := &ResourceConfig{raw: c}\n\tresult.interpolateForce()\n\treturn result\n}\n\n// NewResourceConfigShimmed wraps a cty.Value of object type in a legacy\n// ResourceConfig object, so that it can be passed to older APIs that expect\n// this wrapping.\n//\n// The returned ResourceConfig is already interpolated and cannot be\n// re-interpolated. It is, therefore, useful only to functions that expect\n// an already-populated ResourceConfig which they then treat as read-only.\n//\n// If the given value is not of an object type that conforms to the given\n// schema then this function will panic.\nfunc NewResourceConfigShimmed(val cty.Value, schema *configschema.Block) *ResourceConfig {\n\tif !val.Type().IsObjectType() {\n\t\tpanic(fmt.Errorf(\"NewResourceConfigShimmed given %#v; an object type is required\", val.Type()))\n\t}\n\tret := &ResourceConfig{}\n\n\tlegacyVal := hcl2shim.ConfigValueFromHCL2Block(val, schema)\n\tif legacyVal != nil {\n\t\tret.Config = legacyVal\n\n\t\t// Now we need to walk through our structure and find any unknown values,\n\t\t// producing the separate list ComputedKeys to represent these. We use the\n\t\t// schema here so that we can preserve the expected invariant\n\t\t// that an attribute is always either wholly known or wholly unknown, while\n\t\t// a child block can be partially unknown.\n\t\tret.ComputedKeys = newResourceConfigShimmedComputedKeys(val, \"\")\n\t} else {\n\t\tret.Config = make(map[string]interface{})\n\t}\n\tret.Raw = ret.Config\n\n\treturn ret\n}\n\n// Record the any config values in ComputedKeys. This field had been unused in\n// helper/schema, but in the new protocol we're using this so that the SDK can\n// now handle having an unknown collection. The legacy diff code doesn't\n// properly handle the unknown, because it can't be expressed in the same way\n// between the config and diff.\nfunc newResourceConfigShimmedComputedKeys(val cty.Value, path string) []string {\n\tvar ret []string\n\tty := val.Type()\n\n\tif val.IsNull() {\n\t\treturn ret\n\t}\n\n\tif !val.IsKnown() {\n\t\t// we shouldn't have an entirely unknown resource, but prevent empty\n\t\t// strings just in case\n\t\tif len(path) > 0 {\n\t\t\tret = append(ret, path)\n\t\t}\n\t\treturn ret\n\t}\n\n\tif path != \"\" {\n\t\tpath += \".\"\n\t}\n\tswitch {\n\tcase ty.IsListType(), ty.IsTupleType(), ty.IsSetType():\n\t\ti := 0\n\t\tfor it := val.ElementIterator(); it.Next(); i++ {\n\t\t\t_, subVal := it.Element()\n\t\t\tkeys := newResourceConfigShimmedComputedKeys(subVal, fmt.Sprintf(\"%s%d\", path, i))\n\t\t\tret = append(ret, keys...)\n\t\t}\n\n\tcase ty.IsMapType(), ty.IsObjectType():\n\t\tfor it := val.ElementIterator(); it.Next(); {\n\t\t\tsubK, subVal := it.Element()\n\t\t\tkeys := newResourceConfigShimmedComputedKeys(subVal, fmt.Sprintf(\"%s%s\", path, subK.AsString()))\n\t\t\tret = append(ret, keys...)\n\t\t}\n\t}\n\n\treturn ret\n}\n\n// DeepCopy performs a deep copy of the configuration. This makes it safe\n// to modify any of the structures that are part of the resource config without\n// affecting the original configuration.\nfunc (c *ResourceConfig) DeepCopy() *ResourceConfig {\n\t// DeepCopying a nil should return a nil to avoid panics\n\tif c == nil {\n\t\treturn nil\n\t}\n\n\t// Copy, this will copy all the exported attributes\n\tcopy, err := copystructure.Config{Lock: true}.Copy(c)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\t// Force the type\n\tresult := copy.(*ResourceConfig)\n\n\t// For the raw configuration, we can just use its own copy method\n\tresult.raw = c.raw.Copy()\n\n\treturn result\n}\n\n// Equal checks the equality of two resource configs.\nfunc (c *ResourceConfig) Equal(c2 *ResourceConfig) bool {\n\t// If either are nil, then they're only equal if they're both nil\n\tif c == nil || c2 == nil {\n\t\treturn c == c2\n\t}\n\n\t// Sort the computed keys so they're deterministic\n\tsort.Strings(c.ComputedKeys)\n\tsort.Strings(c2.ComputedKeys)\n\n\t// Two resource configs if their exported properties are equal.\n\t// We don't compare \"raw\" because it is never used again after\n\t// initialization and for all intents and purposes they are equal\n\t// if the exported properties are equal.\n\tcheck := [][2]interface{}{\n\t\t{c.ComputedKeys, c2.ComputedKeys},\n\t\t{c.Raw, c2.Raw},\n\t\t{c.Config, c2.Config},\n\t}\n\tfor _, pair := range check {\n\t\tif !reflect.DeepEqual(pair[0], pair[1]) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\treturn true\n}\n\n// CheckSet checks that the given list of configuration keys is\n// properly set. If not, errors are returned for each unset key.\n//\n// This is useful to be called in the Validate method of a ResourceProvider.\nfunc (c *ResourceConfig) CheckSet(keys []string) []error {\n\tvar errs []error\n\n\tfor _, k := range keys {\n\t\tif !c.IsSet(k) {\n\t\t\terrs = append(errs, fmt.Errorf(\"%s must be set\", k))\n\t\t}\n\t}\n\n\treturn errs\n}\n\n// Get looks up a configuration value by key and returns the value.\n//\n// The second return value is true if the get was successful. Get will\n// return the raw value if the key is computed, so you should pair this\n// with IsComputed.\nfunc (c *ResourceConfig) Get(k string) (interface{}, bool) {\n\t// We aim to get a value from the configuration. If it is computed,\n\t// then we return the pure raw value.\n\tsource := c.Config\n\tif c.IsComputed(k) {\n\t\tsource = c.Raw\n\t}\n\n\treturn c.get(k, source)\n}\n\n// GetRaw looks up a configuration value by key and returns the value,\n// from the raw, uninterpolated config.\n//\n// The second return value is true if the get was successful. Get will\n// not succeed if the value is being computed.\nfunc (c *ResourceConfig) GetRaw(k string) (interface{}, bool) {\n\treturn c.get(k, c.Raw)\n}\n\n// IsComputed returns whether the given key is computed or not.\nfunc (c *ResourceConfig) IsComputed(k string) bool {\n\t// The next thing we do is check the config if we get a computed\n\t// value out of it.\n\tv, ok := c.get(k, c.Config)\n\tif !ok {\n\t\treturn false\n\t}\n\n\t// If value is nil, then it isn't computed\n\tif v == nil {\n\t\treturn false\n\t}\n\n\t// Test if the value contains an unknown value\n\tvar w unknownCheckWalker\n\tif err := reflectwalk.Walk(v, &w); err != nil {\n\t\tpanic(err)\n\t}\n\n\treturn w.Unknown\n}\n\n// IsSet checks if the key in the configuration is set. A key is set if\n// it has a value or the value is being computed (is unknown currently).\n//\n// This function should be used rather than checking the keys of the\n// raw configuration itself, since a key may be omitted from the raw\n// configuration if it is being computed.\nfunc (c *ResourceConfig) IsSet(k string) bool {\n\tif c == nil {\n\t\treturn false\n\t}\n\n\tif c.IsComputed(k) {\n\t\treturn true\n\t}\n\n\tif _, ok := c.Get(k); ok {\n\t\treturn true\n\t}\n\n\treturn false\n}\n\nfunc (c *ResourceConfig) get(\n\tk string, raw map[string]interface{}) (interface{}, bool) {\n\tparts := strings.Split(k, \".\")\n\tif len(parts) == 1 && parts[0] == \"\" {\n\t\tparts = nil\n\t}\n\n\tvar current interface{} = raw\n\tvar previous interface{} = nil\n\tfor i, part := range parts {\n\t\tif current == nil {\n\t\t\treturn nil, false\n\t\t}\n\n\t\tcv := reflect.ValueOf(current)\n\t\tswitch cv.Kind() {\n\t\tcase reflect.Map:\n\t\t\tprevious = current\n\t\t\tv := cv.MapIndex(reflect.ValueOf(part))\n\t\t\tif !v.IsValid() {\n\t\t\t\tif i > 0 && i != (len(parts)-1) {\n\t\t\t\t\ttryKey := strings.Join(parts[i:], \".\")\n\t\t\t\t\tv := cv.MapIndex(reflect.ValueOf(tryKey))\n\t\t\t\t\tif !v.IsValid() {\n\t\t\t\t\t\treturn nil, false\n\t\t\t\t\t}\n\n\t\t\t\t\treturn v.Interface(), true\n\t\t\t\t}\n\n\t\t\t\treturn nil, false\n\t\t\t}\n\n\t\t\tcurrent = v.Interface()\n\t\tcase reflect.Slice:\n\t\t\tprevious = current\n\n\t\t\tif part == \"#\" {\n\t\t\t\t// If any value in a list is computed, this whole thing\n\t\t\t\t// is computed and we can't read any part of it.\n\t\t\t\tfor i := 0; i < cv.Len(); i++ {\n\t\t\t\t\tif v := cv.Index(i).Interface(); v == unknownValue() {\n\t\t\t\t\t\treturn v, true\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcurrent = cv.Len()\n\t\t\t} else {\n\t\t\t\ti, err := strconv.ParseInt(part, 0, 0)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, false\n\t\t\t\t}\n\t\t\t\tif int(i) < 0 || int(i) >= cv.Len() {\n\t\t\t\t\treturn nil, false\n\t\t\t\t}\n\t\t\t\tcurrent = cv.Index(int(i)).Interface()\n\t\t\t}\n\t\tcase reflect.String:\n\t\t\t// This happens when map keys contain \".\" and have a common\n\t\t\t// prefix so were split as path components above.\n\t\t\tactualKey := strings.Join(parts[i-1:], \".\")\n\t\t\tif prevMap, ok := previous.(map[string]interface{}); ok {\n\t\t\t\tv, ok := prevMap[actualKey]\n\t\t\t\treturn v, ok\n\t\t\t}\n\n\t\t\treturn nil, false\n\t\tdefault:\n\t\t\tpanic(fmt.Sprintf(\"Unknown kind: %s\", cv.Kind()))\n\t\t}\n\t}\n\n\treturn current, true\n}\n\n// interpolateForce is a temporary thing. We want to get rid of interpolate\n// above and likewise this, but it can only be done after the f-ast-graph\n// refactor is complete.\nfunc (c *ResourceConfig) interpolateForce() {\n\tif c.raw == nil {\n\t\t// If we don't have a lowercase \"raw\" but we _do_ have the uppercase\n\t\t// Raw populated then this indicates that we're recieving a shim\n\t\t// ResourceConfig created by NewResourceConfigShimmed, which is already\n\t\t// fully evaluated and thus this function doesn't need to do anything.\n\t\tif c.Raw != nil {\n\t\t\treturn\n\t\t}\n\n\t\tvar err error\n\t\tc.raw, err = config.NewRawConfig(make(map[string]interface{}))\n\t\tif err != nil {\n\t\t\tpanic(err)\n\t\t}\n\t}\n\n\tc.ComputedKeys = c.raw.UnknownKeys()\n\tc.Raw = c.raw.RawMap()\n\tc.Config = c.raw.Config()\n}\n\n// unknownCheckWalker\ntype unknownCheckWalker struct {\n\tUnknown bool\n}\n\nfunc (w *unknownCheckWalker) Primitive(v reflect.Value) error {\n\tif v.Interface() == unknownValue() {\n\t\tw.Unknown = true\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/resource_address.go",
    "content": "package terraform\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\t\"regexp\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\n\t\"github.com/hashicorp/terraform/config\"\n\t\"github.com/hashicorp/terraform/configs\"\n)\n\n// ResourceAddress is a way of identifying an individual resource (or,\n// eventually, a subset of resources) within the state. It is used for Targets.\ntype ResourceAddress struct {\n\t// Addresses a resource falling somewhere in the module path\n\t// When specified alone, addresses all resources within a module path\n\tPath []string\n\n\t// Addresses a specific resource that occurs in a list\n\tIndex int\n\n\tInstanceType    InstanceType\n\tInstanceTypeSet bool\n\tName            string\n\tType            string\n\tMode            config.ResourceMode // significant only if InstanceTypeSet\n}\n\n// Copy returns a copy of this ResourceAddress\nfunc (r *ResourceAddress) Copy() *ResourceAddress {\n\tif r == nil {\n\t\treturn nil\n\t}\n\n\tn := &ResourceAddress{\n\t\tPath:         make([]string, 0, len(r.Path)),\n\t\tIndex:        r.Index,\n\t\tInstanceType: r.InstanceType,\n\t\tName:         r.Name,\n\t\tType:         r.Type,\n\t\tMode:         r.Mode,\n\t}\n\n\tn.Path = append(n.Path, r.Path...)\n\n\treturn n\n}\n\n// String outputs the address that parses into this address.\nfunc (r *ResourceAddress) String() string {\n\tvar result []string\n\tfor _, p := range r.Path {\n\t\tresult = append(result, \"module\", p)\n\t}\n\n\tswitch r.Mode {\n\tcase config.ManagedResourceMode:\n\t\t// nothing to do\n\tcase config.DataResourceMode:\n\t\tresult = append(result, \"data\")\n\tdefault:\n\t\tpanic(fmt.Errorf(\"unsupported resource mode %s\", r.Mode))\n\t}\n\n\tif r.Type != \"\" {\n\t\tresult = append(result, r.Type)\n\t}\n\n\tif r.Name != \"\" {\n\t\tname := r.Name\n\t\tif r.InstanceTypeSet {\n\t\t\tswitch r.InstanceType {\n\t\t\tcase TypePrimary:\n\t\t\t\tname += \".primary\"\n\t\t\tcase TypeDeposed:\n\t\t\t\tname += \".deposed\"\n\t\t\tcase TypeTainted:\n\t\t\t\tname += \".tainted\"\n\t\t\t}\n\t\t}\n\n\t\tif r.Index >= 0 {\n\t\t\tname += fmt.Sprintf(\"[%d]\", r.Index)\n\t\t}\n\t\tresult = append(result, name)\n\t}\n\n\treturn strings.Join(result, \".\")\n}\n\n// HasResourceSpec returns true if the address has a resource spec, as\n// defined in the documentation:\n//    https://www.terraform.io/docs/internals/resource-addressing.html\n// In particular, this returns false if the address contains only\n// a module path, thus addressing the entire module.\nfunc (r *ResourceAddress) HasResourceSpec() bool {\n\treturn r.Type != \"\" && r.Name != \"\"\n}\n\n// WholeModuleAddress returns the resource address that refers to all\n// resources in the same module as the receiver address.\nfunc (r *ResourceAddress) WholeModuleAddress() *ResourceAddress {\n\treturn &ResourceAddress{\n\t\tPath:            r.Path,\n\t\tIndex:           -1,\n\t\tInstanceTypeSet: false,\n\t}\n}\n\n// MatchesResourceConfig returns true if the receiver matches the given\n// configuration resource within the given _static_ module path. Note that\n// the module path in a resource address is a _dynamic_ module path, and\n// multiple dynamic resource paths may map to a single static path if\n// count and for_each are in use on module calls.\n//\n// Since resource configuration blocks represent all of the instances of\n// a multi-instance resource, the index of the address (if any) is not\n// considered.\nfunc (r *ResourceAddress) MatchesResourceConfig(path addrs.Module, rc *configs.Resource) bool {\n\tif r.HasResourceSpec() {\n\t\t// FIXME: Some ugliness while we are between worlds. Functionality\n\t\t// in \"addrs\" should eventually replace this ResourceAddress idea\n\t\t// completely, but for now we'll need to translate to the old\n\t\t// way of representing resource modes.\n\t\tswitch r.Mode {\n\t\tcase config.ManagedResourceMode:\n\t\t\tif rc.Mode != addrs.ManagedResourceMode {\n\t\t\t\treturn false\n\t\t\t}\n\t\tcase config.DataResourceMode:\n\t\t\tif rc.Mode != addrs.DataResourceMode {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\tif r.Type != rc.Type || r.Name != rc.Name {\n\t\t\treturn false\n\t\t}\n\t}\n\n\taddrPath := r.Path\n\n\t// normalize\n\tif len(addrPath) == 0 {\n\t\taddrPath = nil\n\t}\n\tif len(path) == 0 {\n\t\tpath = nil\n\t}\n\trawPath := []string(path)\n\treturn reflect.DeepEqual(addrPath, rawPath)\n}\n\n// stateId returns the ID that this resource should be entered with\n// in the state. This is also used for diffs. In the future, we'd like to\n// move away from this string field so I don't export this.\nfunc (r *ResourceAddress) stateId() string {\n\tresult := fmt.Sprintf(\"%s.%s\", r.Type, r.Name)\n\tswitch r.Mode {\n\tcase config.ManagedResourceMode:\n\t\t// Done\n\tcase config.DataResourceMode:\n\t\tresult = fmt.Sprintf(\"data.%s\", result)\n\tdefault:\n\t\tpanic(fmt.Errorf(\"unknown resource mode: %s\", r.Mode))\n\t}\n\tif r.Index >= 0 {\n\t\tresult += fmt.Sprintf(\".%d\", r.Index)\n\t}\n\n\treturn result\n}\n\n// parseResourceAddressConfig creates a resource address from a config.Resource\nfunc parseResourceAddressConfig(r *config.Resource) (*ResourceAddress, error) {\n\treturn &ResourceAddress{\n\t\tType:         r.Type,\n\t\tName:         r.Name,\n\t\tIndex:        -1,\n\t\tInstanceType: TypePrimary,\n\t\tMode:         r.Mode,\n\t}, nil\n}\n\n// parseResourceAddressInternal parses the somewhat bespoke resource\n// identifier used in states and diffs, such as \"instance.name.0\".\nfunc parseResourceAddressInternal(s string) (*ResourceAddress, error) {\n\t// Split based on \".\". Every resource address should have at least two\n\t// elements (type and name).\n\tparts := strings.Split(s, \".\")\n\tif len(parts) < 2 || len(parts) > 4 {\n\t\treturn nil, fmt.Errorf(\"Invalid internal resource address format: %s\", s)\n\t}\n\n\t// Data resource if we have at least 3 parts and the first one is data\n\tmode := config.ManagedResourceMode\n\tif len(parts) > 2 && parts[0] == \"data\" {\n\t\tmode = config.DataResourceMode\n\t\tparts = parts[1:]\n\t}\n\n\t// If we're not a data resource and we have more than 3, then it is an error\n\tif len(parts) > 3 && mode != config.DataResourceMode {\n\t\treturn nil, fmt.Errorf(\"Invalid internal resource address format: %s\", s)\n\t}\n\n\t// Build the parts of the resource address that are guaranteed to exist\n\taddr := &ResourceAddress{\n\t\tType:         parts[0],\n\t\tName:         parts[1],\n\t\tIndex:        -1,\n\t\tInstanceType: TypePrimary,\n\t\tMode:         mode,\n\t}\n\n\t// If we have more parts, then we have an index. Parse that.\n\tif len(parts) > 2 {\n\t\tidx, err := strconv.ParseInt(parts[2], 0, 0)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"Error parsing resource address %q: %s\", s, err)\n\t\t}\n\n\t\taddr.Index = int(idx)\n\t}\n\n\treturn addr, nil\n}\n\nfunc ParseResourceAddress(s string) (*ResourceAddress, error) {\n\tmatches, err := tokenizeResourceAddress(s)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tmode := config.ManagedResourceMode\n\tif matches[\"data_prefix\"] != \"\" {\n\t\tmode = config.DataResourceMode\n\t}\n\tresourceIndex, err := ParseResourceIndex(matches[\"index\"])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tinstanceType, err := ParseInstanceType(matches[\"instance_type\"])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tpath := ParseResourcePath(matches[\"path\"])\n\n\t// not allowed to say \"data.\" without a type following\n\tif mode == config.DataResourceMode && matches[\"type\"] == \"\" {\n\t\treturn nil, fmt.Errorf(\n\t\t\t\"invalid resource address %q: must target specific data instance\",\n\t\t\ts,\n\t\t)\n\t}\n\n\treturn &ResourceAddress{\n\t\tPath:            path,\n\t\tIndex:           resourceIndex,\n\t\tInstanceType:    instanceType,\n\t\tInstanceTypeSet: matches[\"instance_type\"] != \"\",\n\t\tName:            matches[\"name\"],\n\t\tType:            matches[\"type\"],\n\t\tMode:            mode,\n\t}, nil\n}\n\n// ParseResourceAddressForInstanceDiff creates a ResourceAddress for a\n// resource name as described in a module diff.\n//\n// For historical reasons a different addressing format is used in this\n// context. The internal format should not be shown in the UI and instead\n// this function should be used to translate to a ResourceAddress and\n// then, where appropriate, use the String method to produce a canonical\n// resource address string for display in the UI.\n//\n// The given path slice must be empty (or nil) for the root module, and\n// otherwise consist of a sequence of module names traversing down into\n// the module tree. If a non-nil path is provided, the caller must not\n// modify its underlying array after passing it to this function.\nfunc ParseResourceAddressForInstanceDiff(path []string, key string) (*ResourceAddress, error) {\n\taddr, err := parseResourceAddressInternal(key)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\taddr.Path = path\n\treturn addr, nil\n}\n\n// NewLegacyResourceAddress creates a ResourceAddress from a new-style\n// addrs.AbsResource value.\n//\n// This is provided for shimming purposes so that we can still easily call into\n// older functions that expect the ResourceAddress type.\nfunc NewLegacyResourceAddress(addr addrs.AbsResource) *ResourceAddress {\n\tret := &ResourceAddress{\n\t\tType: addr.Resource.Type,\n\t\tName: addr.Resource.Name,\n\t}\n\n\tswitch addr.Resource.Mode {\n\tcase addrs.ManagedResourceMode:\n\t\tret.Mode = config.ManagedResourceMode\n\tcase addrs.DataResourceMode:\n\t\tret.Mode = config.DataResourceMode\n\tdefault:\n\t\tpanic(fmt.Errorf(\"cannot shim %s to legacy config.ResourceMode value\", addr.Resource.Mode))\n\t}\n\n\tpath := make([]string, len(addr.Module))\n\tfor i, step := range addr.Module {\n\t\tif step.InstanceKey != addrs.NoKey {\n\t\t\t// At the time of writing this can't happen because we don't\n\t\t\t// ket generate keyed module instances. This legacy codepath must\n\t\t\t// be removed before we can support \"count\" and \"for_each\" for\n\t\t\t// modules.\n\t\t\tpanic(fmt.Errorf(\"cannot shim module instance step with key %#v to legacy ResourceAddress.Path\", step.InstanceKey))\n\t\t}\n\n\t\tpath[i] = step.Name\n\t}\n\tret.Path = path\n\tret.Index = -1\n\n\treturn ret\n}\n\n// NewLegacyResourceInstanceAddress creates a ResourceAddress from a new-style\n// addrs.AbsResource value.\n//\n// This is provided for shimming purposes so that we can still easily call into\n// older functions that expect the ResourceAddress type.\nfunc NewLegacyResourceInstanceAddress(addr addrs.AbsResourceInstance) *ResourceAddress {\n\tret := &ResourceAddress{\n\t\tType: addr.Resource.Resource.Type,\n\t\tName: addr.Resource.Resource.Name,\n\t}\n\n\tswitch addr.Resource.Resource.Mode {\n\tcase addrs.ManagedResourceMode:\n\t\tret.Mode = config.ManagedResourceMode\n\tcase addrs.DataResourceMode:\n\t\tret.Mode = config.DataResourceMode\n\tdefault:\n\t\tpanic(fmt.Errorf(\"cannot shim %s to legacy config.ResourceMode value\", addr.Resource.Resource.Mode))\n\t}\n\n\tpath := make([]string, len(addr.Module))\n\tfor i, step := range addr.Module {\n\t\tif step.InstanceKey != addrs.NoKey {\n\t\t\t// At the time of writing this can't happen because we don't\n\t\t\t// ket generate keyed module instances. This legacy codepath must\n\t\t\t// be removed before we can support \"count\" and \"for_each\" for\n\t\t\t// modules.\n\t\t\tpanic(fmt.Errorf(\"cannot shim module instance step with key %#v to legacy ResourceAddress.Path\", step.InstanceKey))\n\t\t}\n\n\t\tpath[i] = step.Name\n\t}\n\tret.Path = path\n\n\tif addr.Resource.Key == addrs.NoKey {\n\t\tret.Index = -1\n\t} else if ik, ok := addr.Resource.Key.(addrs.IntKey); ok {\n\t\tret.Index = int(ik)\n\t} else {\n\t\tpanic(fmt.Errorf(\"cannot shim resource instance with key %#v to legacy ResourceAddress.Index\", addr.Resource.Key))\n\t}\n\n\treturn ret\n}\n\n// AbsResourceInstanceAddr converts the receiver, a legacy resource address, to\n// the new resource address type addrs.AbsResourceInstance.\n//\n// This method can be used only on an address that has a resource specification.\n// It will panic if called on a module-path-only ResourceAddress. Use\n// method HasResourceSpec to check before calling, in contexts where it is\n// unclear.\n//\n// addrs.AbsResourceInstance does not represent the \"tainted\" and \"deposed\"\n// states, and so if these are present on the receiver then they are discarded.\n//\n// This is provided for shimming purposes so that we can easily adapt functions\n// that are returning the legacy ResourceAddress type, for situations where\n// the new type is required.\nfunc (addr *ResourceAddress) AbsResourceInstanceAddr() addrs.AbsResourceInstance {\n\tif !addr.HasResourceSpec() {\n\t\tpanic(\"AbsResourceInstanceAddr called on ResourceAddress with no resource spec\")\n\t}\n\n\tret := addrs.AbsResourceInstance{\n\t\tModule: addr.ModuleInstanceAddr(),\n\t\tResource: addrs.ResourceInstance{\n\t\t\tResource: addrs.Resource{\n\t\t\t\tType: addr.Type,\n\t\t\t\tName: addr.Name,\n\t\t\t},\n\t\t},\n\t}\n\n\tswitch addr.Mode {\n\tcase config.ManagedResourceMode:\n\t\tret.Resource.Resource.Mode = addrs.ManagedResourceMode\n\tcase config.DataResourceMode:\n\t\tret.Resource.Resource.Mode = addrs.DataResourceMode\n\tdefault:\n\t\tpanic(fmt.Errorf(\"cannot shim %s to addrs.ResourceMode value\", addr.Mode))\n\t}\n\n\tif addr.Index != -1 {\n\t\tret.Resource.Key = addrs.IntKey(addr.Index)\n\t}\n\n\treturn ret\n}\n\n// ModuleInstanceAddr returns the module path portion of the receiver as a\n// addrs.ModuleInstance value.\nfunc (addr *ResourceAddress) ModuleInstanceAddr() addrs.ModuleInstance {\n\tpath := make(addrs.ModuleInstance, len(addr.Path))\n\tfor i, name := range addr.Path {\n\t\tpath[i] = addrs.ModuleInstanceStep{Name: name}\n\t}\n\treturn path\n}\n\n// Contains returns true if and only if the given node is contained within\n// the receiver.\n//\n// Containment is defined in terms of the module and resource heirarchy:\n// a resource is contained within its module and any ancestor modules,\n// an indexed resource instance is contained with the unindexed resource, etc.\nfunc (addr *ResourceAddress) Contains(other *ResourceAddress) bool {\n\tourPath := addr.Path\n\tgivenPath := other.Path\n\tif len(givenPath) < len(ourPath) {\n\t\treturn false\n\t}\n\tfor i := range ourPath {\n\t\tif ourPath[i] != givenPath[i] {\n\t\t\treturn false\n\t\t}\n\t}\n\n\t// If the receiver is a whole-module address then the path prefix\n\t// matching is all we need.\n\tif !addr.HasResourceSpec() {\n\t\treturn true\n\t}\n\n\tif addr.Type != other.Type || addr.Name != other.Name || addr.Mode != other.Mode {\n\t\treturn false\n\t}\n\n\tif addr.Index != -1 && addr.Index != other.Index {\n\t\treturn false\n\t}\n\n\tif addr.InstanceTypeSet && (addr.InstanceTypeSet != other.InstanceTypeSet || addr.InstanceType != other.InstanceType) {\n\t\treturn false\n\t}\n\n\treturn true\n}\n\n// Equals returns true if the receiver matches the given address.\n//\n// The name of this method is a misnomer, since it doesn't test for exact\n// equality. Instead, it tests that the _specified_ parts of each\n// address match, treating any unspecified parts as wildcards.\n//\n// See also Contains, which takes a more heirarchical approach to comparing\n// addresses.\nfunc (addr *ResourceAddress) Equals(raw interface{}) bool {\n\tother, ok := raw.(*ResourceAddress)\n\tif !ok {\n\t\treturn false\n\t}\n\n\tpathMatch := len(addr.Path) == 0 && len(other.Path) == 0 ||\n\t\treflect.DeepEqual(addr.Path, other.Path)\n\n\tindexMatch := addr.Index == -1 ||\n\t\tother.Index == -1 ||\n\t\taddr.Index == other.Index\n\n\tnameMatch := addr.Name == \"\" ||\n\t\tother.Name == \"\" ||\n\t\taddr.Name == other.Name\n\n\ttypeMatch := addr.Type == \"\" ||\n\t\tother.Type == \"\" ||\n\t\taddr.Type == other.Type\n\n\t// mode is significant only when type is set\n\tmodeMatch := addr.Type == \"\" ||\n\t\tother.Type == \"\" ||\n\t\taddr.Mode == other.Mode\n\n\treturn pathMatch &&\n\t\tindexMatch &&\n\t\taddr.InstanceType == other.InstanceType &&\n\t\tnameMatch &&\n\t\ttypeMatch &&\n\t\tmodeMatch\n}\n\n// Less returns true if and only if the receiver should be sorted before\n// the given address when presenting a list of resource addresses to\n// an end-user.\n//\n// This sort uses lexicographic sorting for most components, but uses\n// numeric sort for indices, thus causing index 10 to sort after\n// index 9, rather than after index 1.\nfunc (addr *ResourceAddress) Less(other *ResourceAddress) bool {\n\n\tswitch {\n\n\tcase len(addr.Path) != len(other.Path):\n\t\treturn len(addr.Path) < len(other.Path)\n\n\tcase !reflect.DeepEqual(addr.Path, other.Path):\n\t\t// If the two paths are the same length but don't match, we'll just\n\t\t// cheat and compare the string forms since it's easier than\n\t\t// comparing all of the path segments in turn, and lexicographic\n\t\t// comparison is correct for the module path portion.\n\t\taddrStr := addr.String()\n\t\totherStr := other.String()\n\t\treturn addrStr < otherStr\n\n\tcase addr.Mode != other.Mode:\n\t\treturn addr.Mode == config.DataResourceMode\n\n\tcase addr.Type != other.Type:\n\t\treturn addr.Type < other.Type\n\n\tcase addr.Name != other.Name:\n\t\treturn addr.Name < other.Name\n\n\tcase addr.Index != other.Index:\n\t\t// Since \"Index\" is -1 for an un-indexed address, this also conveniently\n\t\t// sorts unindexed addresses before indexed ones, should they both\n\t\t// appear for some reason.\n\t\treturn addr.Index < other.Index\n\n\tcase addr.InstanceTypeSet != other.InstanceTypeSet:\n\t\treturn !addr.InstanceTypeSet\n\n\tcase addr.InstanceType != other.InstanceType:\n\t\t// InstanceType is actually an enum, so this is just an arbitrary\n\t\t// sort based on the enum numeric values, and thus not particularly\n\t\t// meaningful.\n\t\treturn addr.InstanceType < other.InstanceType\n\n\tdefault:\n\t\treturn false\n\n\t}\n}\n\nfunc ParseResourceIndex(s string) (int, error) {\n\tif s == \"\" {\n\t\treturn -1, nil\n\t}\n\treturn strconv.Atoi(s)\n}\n\nfunc ParseResourcePath(s string) []string {\n\tif s == \"\" {\n\t\treturn nil\n\t}\n\tparts := strings.Split(s, \".\")\n\tpath := make([]string, 0, len(parts))\n\tfor _, s := range parts {\n\t\t// Due to the limitations of the regexp match below, the path match has\n\t\t// some noise in it we have to filter out :|\n\t\tif s == \"\" || s == \"module\" {\n\t\t\tcontinue\n\t\t}\n\t\tpath = append(path, s)\n\t}\n\treturn path\n}\n\nfunc ParseInstanceType(s string) (InstanceType, error) {\n\tswitch s {\n\tcase \"\", \"primary\":\n\t\treturn TypePrimary, nil\n\tcase \"deposed\":\n\t\treturn TypeDeposed, nil\n\tcase \"tainted\":\n\t\treturn TypeTainted, nil\n\tdefault:\n\t\treturn TypeInvalid, fmt.Errorf(\"Unexpected value for InstanceType field: %q\", s)\n\t}\n}\n\nfunc tokenizeResourceAddress(s string) (map[string]string, error) {\n\t// Example of portions of the regexp below using the\n\t// string \"aws_instance.web.tainted[1]\"\n\tre := regexp.MustCompile(`\\A` +\n\t\t// \"module.foo.module.bar\" (optional)\n\t\t`(?P<path>(?:module\\.(?P<module_name>[^.]+)\\.?)*)` +\n\t\t// possibly \"data.\", if targeting is a data resource\n\t\t`(?P<data_prefix>(?:data\\.)?)` +\n\t\t// \"aws_instance.web\" (optional when module path specified)\n\t\t`(?:(?P<type>[^.]+)\\.(?P<name>[^.[]+))?` +\n\t\t// \"tainted\" (optional, omission implies: \"primary\")\n\t\t`(?:\\.(?P<instance_type>\\w+))?` +\n\t\t// \"1\" (optional, omission implies: \"0\")\n\t\t`(?:\\[(?P<index>\\d+)\\])?` +\n\t\t`\\z`)\n\n\tgroupNames := re.SubexpNames()\n\trawMatches := re.FindAllStringSubmatch(s, -1)\n\tif len(rawMatches) != 1 {\n\t\treturn nil, fmt.Errorf(\"invalid resource address %q\", s)\n\t}\n\n\tmatches := make(map[string]string)\n\tfor i, m := range rawMatches[0] {\n\t\tmatches[groupNames[i]] = m\n\t}\n\n\treturn matches, nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/resource_provider.go",
    "content": "package terraform\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/hashicorp/terraform/tfdiags\"\n\n\t\"github.com/hashicorp/terraform/plugin/discovery\"\n\t\"github.com/hashicorp/terraform/providers\"\n)\n\n// ResourceProvider is an interface that must be implemented by any\n// resource provider: the thing that creates and manages the resources in\n// a Terraform configuration.\n//\n// Important implementation note: All returned pointers, such as\n// *ResourceConfig, *InstanceState, *InstanceDiff, etc. must not point to\n// shared data. Terraform is highly parallel and assumes that this data is safe\n// to read/write in parallel so it must be unique references. Note that it is\n// safe to return arguments as results, however.\ntype ResourceProvider interface {\n\t/*********************************************************************\n\t* Functions related to the provider\n\t*********************************************************************/\n\n\t// ProviderSchema returns the config schema for the main provider\n\t// configuration, as would appear in a \"provider\" block in the\n\t// configuration files.\n\t//\n\t// Currently not all providers support schema. Callers must therefore\n\t// first call Resources and DataSources and ensure that at least one\n\t// resource or data source has the SchemaAvailable flag set.\n\tGetSchema(*ProviderSchemaRequest) (*ProviderSchema, error)\n\n\t// Input was used prior to v0.12 to ask the provider to prompt the user\n\t// for input to complete the configuration.\n\t//\n\t// From v0.12 onwards this method is never called because Terraform Core\n\t// is able to handle the necessary input logic itself based on the\n\t// schema returned from GetSchema.\n\tInput(UIInput, *ResourceConfig) (*ResourceConfig, error)\n\n\t// Validate is called once at the beginning with the raw configuration\n\t// (no interpolation done) and can return a list of warnings and/or\n\t// errors.\n\t//\n\t// This is called once with the provider configuration only. It may not\n\t// be called at all if no provider configuration is given.\n\t//\n\t// This should not assume that any values of the configurations are valid.\n\t// The primary use case of this call is to check that required keys are\n\t// set.\n\tValidate(*ResourceConfig) ([]string, []error)\n\n\t// Configure configures the provider itself with the configuration\n\t// given. This is useful for setting things like access keys.\n\t//\n\t// This won't be called at all if no provider configuration is given.\n\t//\n\t// Configure returns an error if it occurred.\n\tConfigure(*ResourceConfig) error\n\n\t// Resources returns all the available resource types that this provider\n\t// knows how to manage.\n\tResources() []ResourceType\n\n\t// Stop is called when the provider should halt any in-flight actions.\n\t//\n\t// This can be used to make a nicer Ctrl-C experience for Terraform.\n\t// Even if this isn't implemented to do anything (just returns nil),\n\t// Terraform will still cleanly stop after the currently executing\n\t// graph node is complete. However, this API can be used to make more\n\t// efficient halts.\n\t//\n\t// Stop doesn't have to and shouldn't block waiting for in-flight actions\n\t// to complete. It should take any action it wants and return immediately\n\t// acknowledging it has received the stop request. Terraform core will\n\t// automatically not make any further API calls to the provider soon\n\t// after Stop is called (technically exactly once the currently executing\n\t// graph nodes are complete).\n\t//\n\t// The error returned, if non-nil, is assumed to mean that signaling the\n\t// stop somehow failed and that the user should expect potentially waiting\n\t// a longer period of time.\n\tStop() error\n\n\t/*********************************************************************\n\t* Functions related to individual resources\n\t*********************************************************************/\n\n\t// ValidateResource is called once at the beginning with the raw\n\t// configuration (no interpolation done) and can return a list of warnings\n\t// and/or errors.\n\t//\n\t// This is called once per resource.\n\t//\n\t// This should not assume any of the values in the resource configuration\n\t// are valid since it is possible they have to be interpolated still.\n\t// The primary use case of this call is to check that the required keys\n\t// are set and that the general structure is correct.\n\tValidateResource(string, *ResourceConfig) ([]string, []error)\n\n\t// Apply applies a diff to a specific resource and returns the new\n\t// resource state along with an error.\n\t//\n\t// If the resource state given has an empty ID, then a new resource\n\t// is expected to be created.\n\tApply(\n\t\t*InstanceInfo,\n\t\t*InstanceState,\n\t\t*InstanceDiff) (*InstanceState, error)\n\n\t// Diff diffs a resource versus a desired state and returns\n\t// a diff.\n\tDiff(\n\t\t*InstanceInfo,\n\t\t*InstanceState,\n\t\t*ResourceConfig) (*InstanceDiff, error)\n\n\t// Refresh refreshes a resource and updates all of its attributes\n\t// with the latest information.\n\tRefresh(*InstanceInfo, *InstanceState) (*InstanceState, error)\n\n\t/*********************************************************************\n\t* Functions related to importing\n\t*********************************************************************/\n\n\t// ImportState requests that the given resource be imported.\n\t//\n\t// The returned InstanceState only requires ID be set. Importing\n\t// will always call Refresh after the state to complete it.\n\t//\n\t// IMPORTANT: InstanceState doesn't have the resource type attached\n\t// to it. A type must be specified on the state via the Ephemeral\n\t// field on the state.\n\t//\n\t// This function can return multiple states. Normally, an import\n\t// will map 1:1 to a physical resource. However, some resources map\n\t// to multiple. For example, an AWS security group may contain many rules.\n\t// Each rule is represented by a separate resource in Terraform,\n\t// therefore multiple states are returned.\n\tImportState(*InstanceInfo, string) ([]*InstanceState, error)\n\n\t/*********************************************************************\n\t* Functions related to data resources\n\t*********************************************************************/\n\n\t// ValidateDataSource is called once at the beginning with the raw\n\t// configuration (no interpolation done) and can return a list of warnings\n\t// and/or errors.\n\t//\n\t// This is called once per data source instance.\n\t//\n\t// This should not assume any of the values in the resource configuration\n\t// are valid since it is possible they have to be interpolated still.\n\t// The primary use case of this call is to check that the required keys\n\t// are set and that the general structure is correct.\n\tValidateDataSource(string, *ResourceConfig) ([]string, []error)\n\n\t// DataSources returns all of the available data sources that this\n\t// provider implements.\n\tDataSources() []DataSource\n\n\t// ReadDataDiff produces a diff that represents the state that will\n\t// be produced when the given data source is read using a later call\n\t// to ReadDataApply.\n\tReadDataDiff(*InstanceInfo, *ResourceConfig) (*InstanceDiff, error)\n\n\t// ReadDataApply initializes a data instance using the configuration\n\t// in a diff produced by ReadDataDiff.\n\tReadDataApply(*InstanceInfo, *InstanceDiff) (*InstanceState, error)\n}\n\n// ResourceProviderCloser is an interface that providers that can close\n// connections that aren't needed anymore must implement.\ntype ResourceProviderCloser interface {\n\tClose() error\n}\n\n// ResourceType is a type of resource that a resource provider can manage.\ntype ResourceType struct {\n\tName       string // Name of the resource, example \"instance\" (no provider prefix)\n\tImportable bool   // Whether this resource supports importing\n\n\t// SchemaAvailable is set if the provider supports the ProviderSchema,\n\t// ResourceTypeSchema and DataSourceSchema methods. Although it is\n\t// included on each resource type, it's actually a provider-wide setting\n\t// that's smuggled here only because that avoids a breaking change to\n\t// the plugin protocol.\n\tSchemaAvailable bool\n}\n\n// DataSource is a data source that a resource provider implements.\ntype DataSource struct {\n\tName string\n\n\t// SchemaAvailable is set if the provider supports the ProviderSchema,\n\t// ResourceTypeSchema and DataSourceSchema methods. Although it is\n\t// included on each resource type, it's actually a provider-wide setting\n\t// that's smuggled here only because that avoids a breaking change to\n\t// the plugin protocol.\n\tSchemaAvailable bool\n}\n\n// ResourceProviderResolver is an interface implemented by objects that are\n// able to resolve a given set of resource provider version constraints\n// into ResourceProviderFactory callbacks.\ntype ResourceProviderResolver interface {\n\t// Given a constraint map, return a ResourceProviderFactory for each\n\t// requested provider. If some or all of the constraints cannot be\n\t// satisfied, return a non-nil slice of errors describing the problems.\n\tResolveProviders(reqd discovery.PluginRequirements) (map[string]ResourceProviderFactory, []error)\n}\n\n// ResourceProviderResolverFunc wraps a callback function and turns it into\n// a ResourceProviderResolver implementation, for convenience in situations\n// where a function and its associated closure are sufficient as a resolver\n// implementation.\ntype ResourceProviderResolverFunc func(reqd discovery.PluginRequirements) (map[string]ResourceProviderFactory, []error)\n\n// ResolveProviders implements ResourceProviderResolver by calling the\n// wrapped function.\nfunc (f ResourceProviderResolverFunc) ResolveProviders(reqd discovery.PluginRequirements) (map[string]ResourceProviderFactory, []error) {\n\treturn f(reqd)\n}\n\n// ResourceProviderResolverFixed returns a ResourceProviderResolver that\n// has a fixed set of provider factories provided by the caller. The returned\n// resolver ignores version constraints entirely and just returns the given\n// factory for each requested provider name.\n//\n// This function is primarily used in tests, to provide mock providers or\n// in-process providers under test.\nfunc ResourceProviderResolverFixed(factories map[string]ResourceProviderFactory) ResourceProviderResolver {\n\treturn ResourceProviderResolverFunc(func(reqd discovery.PluginRequirements) (map[string]ResourceProviderFactory, []error) {\n\t\tret := make(map[string]ResourceProviderFactory, len(reqd))\n\t\tvar errs []error\n\t\tfor name := range reqd {\n\t\t\tif factory, exists := factories[name]; exists {\n\t\t\t\tret[name] = factory\n\t\t\t} else {\n\t\t\t\terrs = append(errs, fmt.Errorf(\"provider %q is not available\", name))\n\t\t\t}\n\t\t}\n\t\treturn ret, errs\n\t})\n}\n\n// ResourceProviderFactory is a function type that creates a new instance\n// of a resource provider.\ntype ResourceProviderFactory func() (ResourceProvider, error)\n\n// ResourceProviderFactoryFixed is a helper that creates a\n// ResourceProviderFactory that just returns some fixed provider.\nfunc ResourceProviderFactoryFixed(p ResourceProvider) ResourceProviderFactory {\n\treturn func() (ResourceProvider, error) {\n\t\treturn p, nil\n\t}\n}\n\nfunc ProviderHasResource(p ResourceProvider, n string) bool {\n\tfor _, rt := range p.Resources() {\n\t\tif rt.Name == n {\n\t\t\treturn true\n\t\t}\n\t}\n\n\treturn false\n}\n\nfunc ProviderHasDataSource(p ResourceProvider, n string) bool {\n\tfor _, rt := range p.DataSources() {\n\t\tif rt.Name == n {\n\t\t\treturn true\n\t\t}\n\t}\n\n\treturn false\n}\n\n// resourceProviderFactories matches available plugins to the given version\n// requirements to produce a map of compatible provider plugins if possible,\n// or an error if the currently-available plugins are insufficient.\n//\n// This should be called only with configurations that have passed calls\n// to config.Validate(), which ensures that all of the given version\n// constraints are valid. It will panic if any invalid constraints are present.\nfunc resourceProviderFactories(resolver providers.Resolver, reqd discovery.PluginRequirements) (map[string]providers.Factory, tfdiags.Diagnostics) {\n\tvar diags tfdiags.Diagnostics\n\tret, errs := resolver.ResolveProviders(reqd)\n\tif errs != nil {\n\t\tdiags = diags.Append(\n\t\t\ttfdiags.Sourceless(tfdiags.Error,\n\t\t\t\t\"Could not satisfy plugin requirements\",\n\t\t\t\terrPluginInit,\n\t\t\t),\n\t\t)\n\n\t\tfor _, err := range errs {\n\t\t\tdiags = diags.Append(err)\n\t\t}\n\n\t\treturn nil, diags\n\t}\n\n\treturn ret, nil\n}\n\nconst errPluginInit = `\nPlugin reinitialization required. Please run \"terraform init\".\n\nPlugins are external binaries that Terraform uses to access and manipulate\nresources. The configuration provided requires plugins which can't be located,\ndon't satisfy the version constraints, or are otherwise incompatible.\n\nTerraform automatically discovers provider requirements from your\nconfiguration, including providers used in child modules. To see the\nrequirements and constraints from each module, run \"terraform providers\".\n`\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/resource_provider_mock.go",
    "content": "package terraform\n\nimport (\n\t\"sync\"\n)\n\n// MockResourceProvider implements ResourceProvider but mocks out all the\n// calls for testing purposes.\ntype MockResourceProvider struct {\n\tsync.Mutex\n\n\t// Anything you want, in case you need to store extra data with the mock.\n\tMeta interface{}\n\n\tCloseCalled                    bool\n\tCloseError                     error\n\tGetSchemaCalled                bool\n\tGetSchemaRequest               *ProviderSchemaRequest\n\tGetSchemaReturn                *ProviderSchema\n\tGetSchemaReturnError           error\n\tInputCalled                    bool\n\tInputInput                     UIInput\n\tInputConfig                    *ResourceConfig\n\tInputReturnConfig              *ResourceConfig\n\tInputReturnError               error\n\tInputFn                        func(UIInput, *ResourceConfig) (*ResourceConfig, error)\n\tApplyCalled                    bool\n\tApplyInfo                      *InstanceInfo\n\tApplyState                     *InstanceState\n\tApplyDiff                      *InstanceDiff\n\tApplyFn                        func(*InstanceInfo, *InstanceState, *InstanceDiff) (*InstanceState, error)\n\tApplyReturn                    *InstanceState\n\tApplyReturnError               error\n\tConfigureCalled                bool\n\tConfigureConfig                *ResourceConfig\n\tConfigureFn                    func(*ResourceConfig) error\n\tConfigureReturnError           error\n\tDiffCalled                     bool\n\tDiffInfo                       *InstanceInfo\n\tDiffState                      *InstanceState\n\tDiffDesired                    *ResourceConfig\n\tDiffFn                         func(*InstanceInfo, *InstanceState, *ResourceConfig) (*InstanceDiff, error)\n\tDiffReturn                     *InstanceDiff\n\tDiffReturnError                error\n\tRefreshCalled                  bool\n\tRefreshInfo                    *InstanceInfo\n\tRefreshState                   *InstanceState\n\tRefreshFn                      func(*InstanceInfo, *InstanceState) (*InstanceState, error)\n\tRefreshReturn                  *InstanceState\n\tRefreshReturnError             error\n\tResourcesCalled                bool\n\tResourcesReturn                []ResourceType\n\tReadDataApplyCalled            bool\n\tReadDataApplyInfo              *InstanceInfo\n\tReadDataApplyDiff              *InstanceDiff\n\tReadDataApplyFn                func(*InstanceInfo, *InstanceDiff) (*InstanceState, error)\n\tReadDataApplyReturn            *InstanceState\n\tReadDataApplyReturnError       error\n\tReadDataDiffCalled             bool\n\tReadDataDiffInfo               *InstanceInfo\n\tReadDataDiffDesired            *ResourceConfig\n\tReadDataDiffFn                 func(*InstanceInfo, *ResourceConfig) (*InstanceDiff, error)\n\tReadDataDiffReturn             *InstanceDiff\n\tReadDataDiffReturnError        error\n\tStopCalled                     bool\n\tStopFn                         func() error\n\tStopReturnError                error\n\tDataSourcesCalled              bool\n\tDataSourcesReturn              []DataSource\n\tValidateCalled                 bool\n\tValidateConfig                 *ResourceConfig\n\tValidateFn                     func(*ResourceConfig) ([]string, []error)\n\tValidateReturnWarns            []string\n\tValidateReturnErrors           []error\n\tValidateResourceFn             func(string, *ResourceConfig) ([]string, []error)\n\tValidateResourceCalled         bool\n\tValidateResourceType           string\n\tValidateResourceConfig         *ResourceConfig\n\tValidateResourceReturnWarns    []string\n\tValidateResourceReturnErrors   []error\n\tValidateDataSourceFn           func(string, *ResourceConfig) ([]string, []error)\n\tValidateDataSourceCalled       bool\n\tValidateDataSourceType         string\n\tValidateDataSourceConfig       *ResourceConfig\n\tValidateDataSourceReturnWarns  []string\n\tValidateDataSourceReturnErrors []error\n\n\tImportStateCalled      bool\n\tImportStateInfo        *InstanceInfo\n\tImportStateID          string\n\tImportStateReturn      []*InstanceState\n\tImportStateReturnError error\n\tImportStateFn          func(*InstanceInfo, string) ([]*InstanceState, error)\n}\n\nfunc (p *MockResourceProvider) Close() error {\n\tp.CloseCalled = true\n\treturn p.CloseError\n}\n\nfunc (p *MockResourceProvider) GetSchema(req *ProviderSchemaRequest) (*ProviderSchema, error) {\n\tp.Lock()\n\tdefer p.Unlock()\n\n\tp.GetSchemaCalled = true\n\tp.GetSchemaRequest = req\n\treturn p.GetSchemaReturn, p.GetSchemaReturnError\n}\n\nfunc (p *MockResourceProvider) Input(\n\tinput UIInput, c *ResourceConfig) (*ResourceConfig, error) {\n\tp.Lock()\n\tdefer p.Unlock()\n\tp.InputCalled = true\n\tp.InputInput = input\n\tp.InputConfig = c\n\tif p.InputFn != nil {\n\t\treturn p.InputFn(input, c)\n\t}\n\treturn p.InputReturnConfig, p.InputReturnError\n}\n\nfunc (p *MockResourceProvider) Validate(c *ResourceConfig) ([]string, []error) {\n\tp.Lock()\n\tdefer p.Unlock()\n\n\tp.ValidateCalled = true\n\tp.ValidateConfig = c\n\tif p.ValidateFn != nil {\n\t\treturn p.ValidateFn(c)\n\t}\n\treturn p.ValidateReturnWarns, p.ValidateReturnErrors\n}\n\nfunc (p *MockResourceProvider) ValidateResource(t string, c *ResourceConfig) ([]string, []error) {\n\tp.Lock()\n\tdefer p.Unlock()\n\n\tp.ValidateResourceCalled = true\n\tp.ValidateResourceType = t\n\tp.ValidateResourceConfig = c\n\n\tif p.ValidateResourceFn != nil {\n\t\treturn p.ValidateResourceFn(t, c)\n\t}\n\n\treturn p.ValidateResourceReturnWarns, p.ValidateResourceReturnErrors\n}\n\nfunc (p *MockResourceProvider) Configure(c *ResourceConfig) error {\n\tp.Lock()\n\tdefer p.Unlock()\n\n\tp.ConfigureCalled = true\n\tp.ConfigureConfig = c\n\n\tif p.ConfigureFn != nil {\n\t\treturn p.ConfigureFn(c)\n\t}\n\n\treturn p.ConfigureReturnError\n}\n\nfunc (p *MockResourceProvider) Stop() error {\n\tp.Lock()\n\tdefer p.Unlock()\n\n\tp.StopCalled = true\n\tif p.StopFn != nil {\n\t\treturn p.StopFn()\n\t}\n\n\treturn p.StopReturnError\n}\n\nfunc (p *MockResourceProvider) Apply(\n\tinfo *InstanceInfo,\n\tstate *InstanceState,\n\tdiff *InstanceDiff) (*InstanceState, error) {\n\t// We only lock while writing data. Reading is fine\n\tp.Lock()\n\tp.ApplyCalled = true\n\tp.ApplyInfo = info\n\tp.ApplyState = state\n\tp.ApplyDiff = diff\n\tp.Unlock()\n\n\tif p.ApplyFn != nil {\n\t\treturn p.ApplyFn(info, state, diff)\n\t}\n\n\treturn p.ApplyReturn.DeepCopy(), p.ApplyReturnError\n}\n\nfunc (p *MockResourceProvider) Diff(\n\tinfo *InstanceInfo,\n\tstate *InstanceState,\n\tdesired *ResourceConfig) (*InstanceDiff, error) {\n\tp.Lock()\n\tdefer p.Unlock()\n\n\tp.DiffCalled = true\n\tp.DiffInfo = info\n\tp.DiffState = state\n\tp.DiffDesired = desired\n\n\tif p.DiffFn != nil {\n\t\treturn p.DiffFn(info, state, desired)\n\t}\n\n\treturn p.DiffReturn.DeepCopy(), p.DiffReturnError\n}\n\nfunc (p *MockResourceProvider) Refresh(\n\tinfo *InstanceInfo,\n\ts *InstanceState) (*InstanceState, error) {\n\tp.Lock()\n\tdefer p.Unlock()\n\n\tp.RefreshCalled = true\n\tp.RefreshInfo = info\n\tp.RefreshState = s\n\n\tif p.RefreshFn != nil {\n\t\treturn p.RefreshFn(info, s)\n\t}\n\n\treturn p.RefreshReturn.DeepCopy(), p.RefreshReturnError\n}\n\nfunc (p *MockResourceProvider) Resources() []ResourceType {\n\tp.Lock()\n\tdefer p.Unlock()\n\n\tp.ResourcesCalled = true\n\treturn p.ResourcesReturn\n}\n\nfunc (p *MockResourceProvider) ImportState(info *InstanceInfo, id string) ([]*InstanceState, error) {\n\tp.Lock()\n\tdefer p.Unlock()\n\n\tp.ImportStateCalled = true\n\tp.ImportStateInfo = info\n\tp.ImportStateID = id\n\tif p.ImportStateFn != nil {\n\t\treturn p.ImportStateFn(info, id)\n\t}\n\n\tvar result []*InstanceState\n\tif p.ImportStateReturn != nil {\n\t\tresult = make([]*InstanceState, len(p.ImportStateReturn))\n\t\tfor i, v := range p.ImportStateReturn {\n\t\t\tresult[i] = v.DeepCopy()\n\t\t}\n\t}\n\n\treturn result, p.ImportStateReturnError\n}\n\nfunc (p *MockResourceProvider) ValidateDataSource(t string, c *ResourceConfig) ([]string, []error) {\n\tp.Lock()\n\tdefer p.Unlock()\n\n\tp.ValidateDataSourceCalled = true\n\tp.ValidateDataSourceType = t\n\tp.ValidateDataSourceConfig = c\n\n\tif p.ValidateDataSourceFn != nil {\n\t\treturn p.ValidateDataSourceFn(t, c)\n\t}\n\n\treturn p.ValidateDataSourceReturnWarns, p.ValidateDataSourceReturnErrors\n}\n\nfunc (p *MockResourceProvider) ReadDataDiff(\n\tinfo *InstanceInfo,\n\tdesired *ResourceConfig) (*InstanceDiff, error) {\n\tp.Lock()\n\tdefer p.Unlock()\n\n\tp.ReadDataDiffCalled = true\n\tp.ReadDataDiffInfo = info\n\tp.ReadDataDiffDesired = desired\n\tif p.ReadDataDiffFn != nil {\n\t\treturn p.ReadDataDiffFn(info, desired)\n\t}\n\n\treturn p.ReadDataDiffReturn.DeepCopy(), p.ReadDataDiffReturnError\n}\n\nfunc (p *MockResourceProvider) ReadDataApply(\n\tinfo *InstanceInfo,\n\td *InstanceDiff) (*InstanceState, error) {\n\tp.Lock()\n\tdefer p.Unlock()\n\n\tp.ReadDataApplyCalled = true\n\tp.ReadDataApplyInfo = info\n\tp.ReadDataApplyDiff = d\n\n\tif p.ReadDataApplyFn != nil {\n\t\treturn p.ReadDataApplyFn(info, d)\n\t}\n\n\treturn p.ReadDataApplyReturn.DeepCopy(), p.ReadDataApplyReturnError\n}\n\nfunc (p *MockResourceProvider) DataSources() []DataSource {\n\tp.Lock()\n\tdefer p.Unlock()\n\n\tp.DataSourcesCalled = true\n\treturn p.DataSourcesReturn\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/resource_provisioner.go",
    "content": "package terraform\n\nimport (\n\t\"github.com/hashicorp/terraform/configs/configschema\"\n\t\"github.com/hashicorp/terraform/provisioners\"\n)\n\n// ResourceProvisioner is an interface that must be implemented by any\n// resource provisioner: the thing that initializes resources in\n// a Terraform configuration.\ntype ResourceProvisioner interface {\n\t// GetConfigSchema returns the schema for the provisioner type's main\n\t// configuration block. This is called prior to Validate to enable some\n\t// basic structural validation to be performed automatically and to allow\n\t// the configuration to be properly extracted from potentially-ambiguous\n\t// configuration file formats.\n\tGetConfigSchema() (*configschema.Block, error)\n\n\t// Validate is called once at the beginning with the raw\n\t// configuration (no interpolation done) and can return a list of warnings\n\t// and/or errors.\n\t//\n\t// This is called once per resource.\n\t//\n\t// This should not assume any of the values in the resource configuration\n\t// are valid since it is possible they have to be interpolated still.\n\t// The primary use case of this call is to check that the required keys\n\t// are set and that the general structure is correct.\n\tValidate(*ResourceConfig) ([]string, []error)\n\n\t// Apply runs the provisioner on a specific resource and returns the new\n\t// resource state along with an error. Instead of a diff, the ResourceConfig\n\t// is provided since provisioners only run after a resource has been\n\t// newly created.\n\tApply(UIOutput, *InstanceState, *ResourceConfig) error\n\n\t// Stop is called when the provisioner should halt any in-flight actions.\n\t//\n\t// This can be used to make a nicer Ctrl-C experience for Terraform.\n\t// Even if this isn't implemented to do anything (just returns nil),\n\t// Terraform will still cleanly stop after the currently executing\n\t// graph node is complete. However, this API can be used to make more\n\t// efficient halts.\n\t//\n\t// Stop doesn't have to and shouldn't block waiting for in-flight actions\n\t// to complete. It should take any action it wants and return immediately\n\t// acknowledging it has received the stop request. Terraform core will\n\t// automatically not make any further API calls to the provider soon\n\t// after Stop is called (technically exactly once the currently executing\n\t// graph nodes are complete).\n\t//\n\t// The error returned, if non-nil, is assumed to mean that signaling the\n\t// stop somehow failed and that the user should expect potentially waiting\n\t// a longer period of time.\n\tStop() error\n}\n\n// ResourceProvisionerCloser is an interface that provisioners that can close\n// connections that aren't needed anymore must implement.\ntype ResourceProvisionerCloser interface {\n\tClose() error\n}\n\n// ResourceProvisionerFactory is a function type that creates a new instance\n// of a resource provisioner.\ntype ResourceProvisionerFactory func() (ResourceProvisioner, error)\n\n// ProvisionerFactory is a function type that creates a new instance\n// of a provisioners.Interface.\ntype ProvisionerFactory = provisioners.Factory\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/resource_provisioner_mock.go",
    "content": "package terraform\n\nimport (\n\t\"sync\"\n\n\t\"github.com/hashicorp/terraform/configs/configschema\"\n)\n\n// MockResourceProvisioner implements ResourceProvisioner but mocks out all the\n// calls for testing purposes.\ntype MockResourceProvisioner struct {\n\tsync.Mutex\n\t// Anything you want, in case you need to store extra data with the mock.\n\tMeta interface{}\n\n\tGetConfigSchemaCalled       bool\n\tGetConfigSchemaReturnSchema *configschema.Block\n\tGetConfigSchemaReturnError  error\n\n\tApplyCalled      bool\n\tApplyOutput      UIOutput\n\tApplyState       *InstanceState\n\tApplyConfig      *ResourceConfig\n\tApplyFn          func(*InstanceState, *ResourceConfig) error\n\tApplyReturnError error\n\n\tValidateCalled       bool\n\tValidateConfig       *ResourceConfig\n\tValidateFn           func(c *ResourceConfig) ([]string, []error)\n\tValidateReturnWarns  []string\n\tValidateReturnErrors []error\n\n\tStopCalled      bool\n\tStopFn          func() error\n\tStopReturnError error\n}\n\nvar _ ResourceProvisioner = (*MockResourceProvisioner)(nil)\n\nfunc (p *MockResourceProvisioner) GetConfigSchema() (*configschema.Block, error) {\n\tp.GetConfigSchemaCalled = true\n\treturn p.GetConfigSchemaReturnSchema, p.GetConfigSchemaReturnError\n}\n\nfunc (p *MockResourceProvisioner) Validate(c *ResourceConfig) ([]string, []error) {\n\tp.Lock()\n\tdefer p.Unlock()\n\n\tp.ValidateCalled = true\n\tp.ValidateConfig = c\n\tif p.ValidateFn != nil {\n\t\treturn p.ValidateFn(c)\n\t}\n\treturn p.ValidateReturnWarns, p.ValidateReturnErrors\n}\n\nfunc (p *MockResourceProvisioner) Apply(\n\toutput UIOutput,\n\tstate *InstanceState,\n\tc *ResourceConfig) error {\n\tp.Lock()\n\n\tp.ApplyCalled = true\n\tp.ApplyOutput = output\n\tp.ApplyState = state\n\tp.ApplyConfig = c\n\tif p.ApplyFn != nil {\n\t\tfn := p.ApplyFn\n\t\tp.Unlock()\n\t\treturn fn(state, c)\n\t}\n\n\tdefer p.Unlock()\n\treturn p.ApplyReturnError\n}\n\nfunc (p *MockResourceProvisioner) Stop() error {\n\tp.Lock()\n\tdefer p.Unlock()\n\n\tp.StopCalled = true\n\tif p.StopFn != nil {\n\t\treturn p.StopFn()\n\t}\n\n\treturn p.StopReturnError\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/schemas.go",
    "content": "package terraform\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/configs\"\n\t\"github.com/hashicorp/terraform/configs/configschema\"\n\t\"github.com/hashicorp/terraform/providers\"\n\t\"github.com/hashicorp/terraform/states\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n)\n\n// Schemas is a container for various kinds of schema that Terraform needs\n// during processing.\ntype Schemas struct {\n\tProviders    map[string]*ProviderSchema\n\tProvisioners map[string]*configschema.Block\n}\n\n// ProviderSchema returns the entire ProviderSchema object that was produced\n// by the plugin for the given provider, or nil if no such schema is available.\n//\n// It's usually better to go use the more precise methods offered by type\n// Schemas to handle this detail automatically.\nfunc (ss *Schemas) ProviderSchema(typeName string) *ProviderSchema {\n\tif ss.Providers == nil {\n\t\treturn nil\n\t}\n\treturn ss.Providers[typeName]\n}\n\n// ProviderConfig returns the schema for the provider configuration of the\n// given provider type, or nil if no such schema is available.\nfunc (ss *Schemas) ProviderConfig(typeName string) *configschema.Block {\n\tps := ss.ProviderSchema(typeName)\n\tif ps == nil {\n\t\treturn nil\n\t}\n\treturn ps.Provider\n}\n\n// ResourceTypeConfig returns the schema for the configuration of a given\n// resource type belonging to a given provider type, or nil of no such\n// schema is available.\n//\n// In many cases the provider type is inferrable from the resource type name,\n// but this is not always true because users can override the provider for\n// a resource using the \"provider\" meta-argument. Therefore it's important to\n// always pass the correct provider name, even though it many cases it feels\n// redundant.\nfunc (ss *Schemas) ResourceTypeConfig(providerType string, resourceMode addrs.ResourceMode, resourceType string) (block *configschema.Block, schemaVersion uint64) {\n\tps := ss.ProviderSchema(providerType)\n\tif ps == nil || ps.ResourceTypes == nil {\n\t\treturn nil, 0\n\t}\n\treturn ps.SchemaForResourceType(resourceMode, resourceType)\n}\n\n// ProvisionerConfig returns the schema for the configuration of a given\n// provisioner, or nil of no such schema is available.\nfunc (ss *Schemas) ProvisionerConfig(name string) *configschema.Block {\n\treturn ss.Provisioners[name]\n}\n\n// LoadSchemas searches the given configuration, state  and plan (any of which\n// may be nil) for constructs that have an associated schema, requests the\n// necessary schemas from the given component factory (which must _not_ be nil),\n// and returns a single object representing all of the necessary schemas.\n//\n// If an error is returned, it may be a wrapped tfdiags.Diagnostics describing\n// errors across multiple separate objects. Errors here will usually indicate\n// either misbehavior on the part of one of the providers or of the provider\n// protocol itself. When returned with errors, the returned schemas object is\n// still valid but may be incomplete.\nfunc LoadSchemas(config *configs.Config, state *states.State, components contextComponentFactory) (*Schemas, error) {\n\tschemas := &Schemas{\n\t\tProviders:    map[string]*ProviderSchema{},\n\t\tProvisioners: map[string]*configschema.Block{},\n\t}\n\tvar diags tfdiags.Diagnostics\n\n\tnewDiags := loadProviderSchemas(schemas.Providers, config, state, components)\n\tdiags = diags.Append(newDiags)\n\tnewDiags = loadProvisionerSchemas(schemas.Provisioners, config, components)\n\tdiags = diags.Append(newDiags)\n\n\treturn schemas, diags.Err()\n}\n\nfunc loadProviderSchemas(schemas map[string]*ProviderSchema, config *configs.Config, state *states.State, components contextComponentFactory) tfdiags.Diagnostics {\n\tvar diags tfdiags.Diagnostics\n\n\tensure := func(typeName string) {\n\t\tif _, exists := schemas[typeName]; exists {\n\t\t\treturn\n\t\t}\n\n\t\tlog.Printf(\"[TRACE] LoadSchemas: retrieving schema for provider type %q\", typeName)\n\t\tprovider, err := components.ResourceProvider(typeName, \"early/\"+typeName)\n\t\tif err != nil {\n\t\t\t// We'll put a stub in the map so we won't re-attempt this on\n\t\t\t// future calls.\n\t\t\tschemas[typeName] = &ProviderSchema{}\n\t\t\tdiags = diags.Append(\n\t\t\t\tfmt.Errorf(\"Failed to instantiate provider %q to obtain schema: %s\", typeName, err),\n\t\t\t)\n\t\t\treturn\n\t\t}\n\t\tdefer func() {\n\t\t\tprovider.Close()\n\t\t}()\n\n\t\tresp := provider.GetSchema()\n\t\tif resp.Diagnostics.HasErrors() {\n\t\t\t// We'll put a stub in the map so we won't re-attempt this on\n\t\t\t// future calls.\n\t\t\tschemas[typeName] = &ProviderSchema{}\n\t\t\tdiags = diags.Append(\n\t\t\t\tfmt.Errorf(\"Failed to retrieve schema from provider %q: %s\", typeName, resp.Diagnostics.Err()),\n\t\t\t)\n\t\t\treturn\n\t\t}\n\n\t\ts := &ProviderSchema{\n\t\t\tProvider:      resp.Provider.Block,\n\t\t\tResourceTypes: make(map[string]*configschema.Block),\n\t\t\tDataSources:   make(map[string]*configschema.Block),\n\n\t\t\tResourceTypeSchemaVersions: make(map[string]uint64),\n\t\t}\n\n\t\tif resp.Provider.Version < 0 {\n\t\t\t// We're not using the version numbers here yet, but we'll check\n\t\t\t// for validity anyway in case we start using them in future.\n\t\t\tdiags = diags.Append(\n\t\t\t\tfmt.Errorf(\"invalid negative schema version provider configuration for provider %q\", typeName),\n\t\t\t)\n\t\t}\n\n\t\tfor t, r := range resp.ResourceTypes {\n\t\t\ts.ResourceTypes[t] = r.Block\n\t\t\ts.ResourceTypeSchemaVersions[t] = uint64(r.Version)\n\t\t\tif r.Version < 0 {\n\t\t\t\tdiags = diags.Append(\n\t\t\t\t\tfmt.Errorf(\"invalid negative schema version for resource type %s in provider %q\", t, typeName),\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\n\t\tfor t, d := range resp.DataSources {\n\t\t\ts.DataSources[t] = d.Block\n\t\t\tif d.Version < 0 {\n\t\t\t\t// We're not using the version numbers here yet, but we'll check\n\t\t\t\t// for validity anyway in case we start using them in future.\n\t\t\t\tdiags = diags.Append(\n\t\t\t\t\tfmt.Errorf(\"invalid negative schema version for data source %s in provider %q\", t, typeName),\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\n\t\tschemas[typeName] = s\n\t}\n\n\tif config != nil {\n\t\tfor _, typeName := range config.ProviderTypes() {\n\t\t\tensure(typeName)\n\t\t}\n\t}\n\n\tif state != nil {\n\t\tneeded := providers.AddressedTypesAbs(state.ProviderAddrs())\n\t\tfor _, typeName := range needed {\n\t\t\tensure(typeName)\n\t\t}\n\t}\n\n\treturn diags\n}\n\nfunc loadProvisionerSchemas(schemas map[string]*configschema.Block, config *configs.Config, components contextComponentFactory) tfdiags.Diagnostics {\n\tvar diags tfdiags.Diagnostics\n\n\tensure := func(name string) {\n\t\tif _, exists := schemas[name]; exists {\n\t\t\treturn\n\t\t}\n\n\t\tlog.Printf(\"[TRACE] LoadSchemas: retrieving schema for provisioner %q\", name)\n\t\tprovisioner, err := components.ResourceProvisioner(name, \"early/\"+name)\n\t\tif err != nil {\n\t\t\t// We'll put a stub in the map so we won't re-attempt this on\n\t\t\t// future calls.\n\t\t\tschemas[name] = &configschema.Block{}\n\t\t\tdiags = diags.Append(\n\t\t\t\tfmt.Errorf(\"Failed to instantiate provisioner %q to obtain schema: %s\", name, err),\n\t\t\t)\n\t\t\treturn\n\t\t}\n\t\tdefer func() {\n\t\t\tif closer, ok := provisioner.(ResourceProvisionerCloser); ok {\n\t\t\t\tcloser.Close()\n\t\t\t}\n\t\t}()\n\n\t\tresp := provisioner.GetSchema()\n\t\tif resp.Diagnostics.HasErrors() {\n\t\t\t// We'll put a stub in the map so we won't re-attempt this on\n\t\t\t// future calls.\n\t\t\tschemas[name] = &configschema.Block{}\n\t\t\tdiags = diags.Append(\n\t\t\t\tfmt.Errorf(\"Failed to retrieve schema from provisioner %q: %s\", name, resp.Diagnostics.Err()),\n\t\t\t)\n\t\t\treturn\n\t\t}\n\n\t\tschemas[name] = resp.Provisioner\n\t}\n\n\tif config != nil {\n\t\tfor _, rc := range config.Module.ManagedResources {\n\t\t\tfor _, pc := range rc.Managed.Provisioners {\n\t\t\t\tensure(pc.Type)\n\t\t\t}\n\t\t}\n\n\t\t// Must also visit our child modules, recursively.\n\t\tfor _, cc := range config.Children {\n\t\t\tchildDiags := loadProvisionerSchemas(schemas, cc, components)\n\t\t\tdiags = diags.Append(childDiags)\n\t\t}\n\t}\n\n\treturn diags\n}\n\n// ProviderSchema represents the schema for a provider's own configuration\n// and the configuration for some or all of its resources and data sources.\n//\n// The completeness of this structure depends on how it was constructed.\n// When constructed for a configuration, it will generally include only\n// resource types and data sources used by that configuration.\ntype ProviderSchema struct {\n\tProvider      *configschema.Block\n\tResourceTypes map[string]*configschema.Block\n\tDataSources   map[string]*configschema.Block\n\n\tResourceTypeSchemaVersions map[string]uint64\n}\n\n// SchemaForResourceType attempts to find a schema for the given mode and type.\n// Returns nil if no such schema is available.\nfunc (ps *ProviderSchema) SchemaForResourceType(mode addrs.ResourceMode, typeName string) (schema *configschema.Block, version uint64) {\n\tswitch mode {\n\tcase addrs.ManagedResourceMode:\n\t\treturn ps.ResourceTypes[typeName], ps.ResourceTypeSchemaVersions[typeName]\n\tcase addrs.DataResourceMode:\n\t\t// Data resources don't have schema versions right now, since state is discarded for each refresh\n\t\treturn ps.DataSources[typeName], 0\n\tdefault:\n\t\t// Shouldn't happen, because the above cases are comprehensive.\n\t\treturn nil, 0\n\t}\n}\n\n// SchemaForResourceAddr attempts to find a schema for the mode and type from\n// the given resource address. Returns nil if no such schema is available.\nfunc (ps *ProviderSchema) SchemaForResourceAddr(addr addrs.Resource) (schema *configschema.Block, version uint64) {\n\treturn ps.SchemaForResourceType(addr.Mode, addr.Type)\n}\n\n// ProviderSchemaRequest is used to describe to a ResourceProvider which\n// aspects of schema are required, when calling the GetSchema method.\ntype ProviderSchemaRequest struct {\n\tResourceTypes []string\n\tDataSources   []string\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/state.go",
    "content": "package terraform\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"log\"\n\t\"os\"\n\t\"reflect\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\n\t\"github.com/hashicorp/errwrap\"\n\tmultierror \"github.com/hashicorp/go-multierror\"\n\tuuid \"github.com/hashicorp/go-uuid\"\n\tversion \"github.com/hashicorp/go-version\"\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/hashicorp/hcl2/hcl/hclsyntax\"\n\t\"github.com/mitchellh/copystructure\"\n\t\"github.com/zclconf/go-cty/cty\"\n\tctyjson \"github.com/zclconf/go-cty/cty/json\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/config\"\n\t\"github.com/hashicorp/terraform/config/hcl2shim\"\n\t\"github.com/hashicorp/terraform/configs\"\n\t\"github.com/hashicorp/terraform/configs/configschema\"\n\t\"github.com/hashicorp/terraform/plans\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n\ttfversion \"github.com/hashicorp/terraform/version\"\n)\n\nconst (\n\t// StateVersion is the current version for our state file\n\tStateVersion = 3\n)\n\n// rootModulePath is the path of the root module\nvar rootModulePath = []string{\"root\"}\n\n// normalizeModulePath transforms a legacy module path (which may or may not\n// have a redundant \"root\" label at the start of it) into an\n// addrs.ModuleInstance representing the same module.\n//\n// For legacy reasons, different parts of Terraform disagree about whether the\n// root module has the path []string{} or []string{\"root\"}, and so this\n// function accepts both and trims off the \"root\". An implication of this is\n// that it's not possible to actually have a module call in the root module\n// that is itself named \"root\", since that would be ambiguous.\n//\n// normalizeModulePath takes a raw module path and returns a path that\n// has the rootModulePath prepended to it. If I could go back in time I\n// would've never had a rootModulePath (empty path would be root). We can\n// still fix this but thats a big refactor that my branch doesn't make sense\n// for. Instead, this function normalizes paths.\nfunc normalizeModulePath(p []string) addrs.ModuleInstance {\n\t// FIXME: Remove this once everyone is using addrs.ModuleInstance.\n\n\tif len(p) > 0 && p[0] == \"root\" {\n\t\tp = p[1:]\n\t}\n\n\tret := make(addrs.ModuleInstance, len(p))\n\tfor i, name := range p {\n\t\t// For now we don't actually support modules with multiple instances\n\t\t// identified by keys, so we just treat every path element as a\n\t\t// step with no key.\n\t\tret[i] = addrs.ModuleInstanceStep{\n\t\t\tName: name,\n\t\t}\n\t}\n\treturn ret\n}\n\n// State keeps track of a snapshot state-of-the-world that Terraform\n// can use to keep track of what real world resources it is actually\n// managing.\ntype State struct {\n\t// Version is the state file protocol version.\n\tVersion int `json:\"version\"`\n\n\t// TFVersion is the version of Terraform that wrote this state.\n\tTFVersion string `json:\"terraform_version,omitempty\"`\n\n\t// Serial is incremented on any operation that modifies\n\t// the State file. It is used to detect potentially conflicting\n\t// updates.\n\tSerial int64 `json:\"serial\"`\n\n\t// Lineage is set when a new, blank state is created and then\n\t// never updated. This allows us to determine whether the serials\n\t// of two states can be meaningfully compared.\n\t// Apart from the guarantee that collisions between two lineages\n\t// are very unlikely, this value is opaque and external callers\n\t// should only compare lineage strings byte-for-byte for equality.\n\tLineage string `json:\"lineage\"`\n\n\t// Remote is used to track the metadata required to\n\t// pull and push state files from a remote storage endpoint.\n\tRemote *RemoteState `json:\"remote,omitempty\"`\n\n\t// Backend tracks the configuration for the backend in use with\n\t// this state. This is used to track any changes in the backend\n\t// configuration.\n\tBackend *BackendState `json:\"backend,omitempty\"`\n\n\t// Modules contains all the modules in a breadth-first order\n\tModules []*ModuleState `json:\"modules\"`\n\n\tmu sync.Mutex\n}\n\nfunc (s *State) Lock()   { s.mu.Lock() }\nfunc (s *State) Unlock() { s.mu.Unlock() }\n\n// NewState is used to initialize a blank state\nfunc NewState() *State {\n\ts := &State{}\n\ts.init()\n\treturn s\n}\n\n// Children returns the ModuleStates that are direct children of\n// the given path. If the path is \"root\", for example, then children\n// returned might be \"root.child\", but not \"root.child.grandchild\".\nfunc (s *State) Children(path []string) []*ModuleState {\n\ts.Lock()\n\tdefer s.Unlock()\n\t// TODO: test\n\n\treturn s.children(path)\n}\n\nfunc (s *State) children(path []string) []*ModuleState {\n\tresult := make([]*ModuleState, 0)\n\tfor _, m := range s.Modules {\n\t\tif m == nil {\n\t\t\tcontinue\n\t\t}\n\n\t\tif len(m.Path) != len(path)+1 {\n\t\t\tcontinue\n\t\t}\n\t\tif !reflect.DeepEqual(path, m.Path[:len(path)]) {\n\t\t\tcontinue\n\t\t}\n\n\t\tresult = append(result, m)\n\t}\n\n\treturn result\n}\n\n// AddModule adds the module with the given path to the state.\n//\n// This should be the preferred method to add module states since it\n// allows us to optimize lookups later as well as control sorting.\nfunc (s *State) AddModule(path addrs.ModuleInstance) *ModuleState {\n\ts.Lock()\n\tdefer s.Unlock()\n\n\treturn s.addModule(path)\n}\n\nfunc (s *State) addModule(path addrs.ModuleInstance) *ModuleState {\n\t// check if the module exists first\n\tm := s.moduleByPath(path)\n\tif m != nil {\n\t\treturn m\n\t}\n\n\t// Lower the new-style address into a legacy-style address.\n\t// This requires that none of the steps have instance keys, which is\n\t// true for all addresses at the time of implementing this because\n\t// \"count\" and \"for_each\" are not yet implemented for modules.\n\t// For the purposes of state, the legacy address format also includes\n\t// a redundant extra prefix element \"root\". It is important to include\n\t// this because the \"prune\" method will remove any module that has a\n\t// path length less than one, and other parts of the state code will\n\t// trim off the first element indiscriminately.\n\tlegacyPath := make([]string, len(path)+1)\n\tlegacyPath[0] = \"root\"\n\tfor i, step := range path {\n\t\tif step.InstanceKey != addrs.NoKey {\n\t\t\t// FIXME: Once the rest of Terraform is ready to use count and\n\t\t\t// for_each, remove all of this and just write the addrs.ModuleInstance\n\t\t\t// value itself into the ModuleState.\n\t\t\tpanic(\"state cannot represent modules with count or for_each keys\")\n\t\t}\n\n\t\tlegacyPath[i+1] = step.Name\n\t}\n\n\tm = &ModuleState{Path: legacyPath}\n\tm.init()\n\ts.Modules = append(s.Modules, m)\n\ts.sort()\n\treturn m\n}\n\n// ModuleByPath is used to lookup the module state for the given path.\n// This should be the preferred lookup mechanism as it allows for future\n// lookup optimizations.\nfunc (s *State) ModuleByPath(path addrs.ModuleInstance) *ModuleState {\n\tif s == nil {\n\t\treturn nil\n\t}\n\ts.Lock()\n\tdefer s.Unlock()\n\n\treturn s.moduleByPath(path)\n}\n\nfunc (s *State) moduleByPath(path addrs.ModuleInstance) *ModuleState {\n\tfor _, mod := range s.Modules {\n\t\tif mod == nil {\n\t\t\tcontinue\n\t\t}\n\t\tif mod.Path == nil {\n\t\t\tpanic(\"missing module path\")\n\t\t}\n\t\tmodPath := normalizeModulePath(mod.Path)\n\t\tif modPath.String() == path.String() {\n\t\t\treturn mod\n\t\t}\n\t}\n\treturn nil\n}\n\n// Empty returns true if the state is empty.\nfunc (s *State) Empty() bool {\n\tif s == nil {\n\t\treturn true\n\t}\n\ts.Lock()\n\tdefer s.Unlock()\n\n\treturn len(s.Modules) == 0\n}\n\n// HasResources returns true if the state contains any resources.\n//\n// This is similar to !s.Empty, but returns true also in the case where the\n// state has modules but all of them are devoid of resources.\nfunc (s *State) HasResources() bool {\n\tif s.Empty() {\n\t\treturn false\n\t}\n\n\tfor _, mod := range s.Modules {\n\t\tif len(mod.Resources) > 0 {\n\t\t\treturn true\n\t\t}\n\t}\n\n\treturn false\n}\n\n// IsRemote returns true if State represents a state that exists and is\n// remote.\nfunc (s *State) IsRemote() bool {\n\tif s == nil {\n\t\treturn false\n\t}\n\ts.Lock()\n\tdefer s.Unlock()\n\n\tif s.Remote == nil {\n\t\treturn false\n\t}\n\tif s.Remote.Type == \"\" {\n\t\treturn false\n\t}\n\n\treturn true\n}\n\n// Validate validates the integrity of this state file.\n//\n// Certain properties of the statefile are expected by Terraform in order\n// to behave properly. The core of Terraform will assume that once it\n// receives a State structure that it has been validated. This validation\n// check should be called to ensure that.\n//\n// If this returns an error, then the user should be notified. The error\n// response will include detailed information on the nature of the error.\nfunc (s *State) Validate() error {\n\ts.Lock()\n\tdefer s.Unlock()\n\n\tvar result error\n\n\t// !!!! FOR DEVELOPERS !!!!\n\t//\n\t// Any errors returned from this Validate function will BLOCK TERRAFORM\n\t// from loading a state file. Therefore, this should only contain checks\n\t// that are only resolvable through manual intervention.\n\t//\n\t// !!!! FOR DEVELOPERS !!!!\n\n\t// Make sure there are no duplicate module states. We open a new\n\t// block here so we can use basic variable names and future validations\n\t// can do the same.\n\t{\n\t\tfound := make(map[string]struct{})\n\t\tfor _, ms := range s.Modules {\n\t\t\tif ms == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tkey := strings.Join(ms.Path, \".\")\n\t\t\tif _, ok := found[key]; ok {\n\t\t\t\tresult = multierror.Append(result, fmt.Errorf(\n\t\t\t\t\tstrings.TrimSpace(stateValidateErrMultiModule), key))\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tfound[key] = struct{}{}\n\t\t}\n\t}\n\n\treturn result\n}\n\n// Remove removes the item in the state at the given address, returning\n// any errors that may have occurred.\n//\n// If the address references a module state or resource, it will delete\n// all children as well. To check what will be deleted, use a StateFilter\n// first.\nfunc (s *State) Remove(addr ...string) error {\n\ts.Lock()\n\tdefer s.Unlock()\n\n\t// Filter out what we need to delete\n\tfilter := &StateFilter{State: s}\n\tresults, err := filter.Filter(addr...)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// If we have no results, just exit early, we're not going to do anything.\n\t// While what happens below is fairly fast, this is an important early\n\t// exit since the prune below might modify the state more and we don't\n\t// want to modify the state if we don't have to.\n\tif len(results) == 0 {\n\t\treturn nil\n\t}\n\n\t// Go through each result and grab what we need\n\tremoved := make(map[interface{}]struct{})\n\tfor _, r := range results {\n\t\t// Convert the path to our own type\n\t\tpath := append([]string{\"root\"}, r.Path...)\n\n\t\t// If we removed this already, then ignore\n\t\tif _, ok := removed[r.Value]; ok {\n\t\t\tcontinue\n\t\t}\n\n\t\t// If we removed the parent already, then ignore\n\t\tif r.Parent != nil {\n\t\t\tif _, ok := removed[r.Parent.Value]; ok {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\t// Add this to the removed list\n\t\tremoved[r.Value] = struct{}{}\n\n\t\tswitch v := r.Value.(type) {\n\t\tcase *ModuleState:\n\t\t\ts.removeModule(path, v)\n\t\tcase *ResourceState:\n\t\t\ts.removeResource(path, v)\n\t\tcase *InstanceState:\n\t\t\ts.removeInstance(path, r.Parent.Value.(*ResourceState), v)\n\t\tdefault:\n\t\t\treturn fmt.Errorf(\"unknown type to delete: %T\", r.Value)\n\t\t}\n\t}\n\n\t// Prune since the removal functions often do the bare minimum to\n\t// remove a thing and may leave around dangling empty modules, resources,\n\t// etc. Prune will clean that all up.\n\ts.prune()\n\n\treturn nil\n}\n\nfunc (s *State) removeModule(path []string, v *ModuleState) {\n\tfor i, m := range s.Modules {\n\t\tif m == v {\n\t\t\ts.Modules, s.Modules[len(s.Modules)-1] = append(s.Modules[:i], s.Modules[i+1:]...), nil\n\t\t\treturn\n\t\t}\n\t}\n}\n\nfunc (s *State) removeResource(path []string, v *ResourceState) {\n\t// Get the module this resource lives in. If it doesn't exist, we're done.\n\tmod := s.moduleByPath(normalizeModulePath(path))\n\tif mod == nil {\n\t\treturn\n\t}\n\n\t// Find this resource. This is a O(N) lookup when if we had the key\n\t// it could be O(1) but even with thousands of resources this shouldn't\n\t// matter right now. We can easily up performance here when the time comes.\n\tfor k, r := range mod.Resources {\n\t\tif r == v {\n\t\t\t// Found it\n\t\t\tdelete(mod.Resources, k)\n\t\t\treturn\n\t\t}\n\t}\n}\n\nfunc (s *State) removeInstance(path []string, r *ResourceState, v *InstanceState) {\n\t// Go through the resource and find the instance that matches this\n\t// (if any) and remove it.\n\n\t// Check primary\n\tif r.Primary == v {\n\t\tr.Primary = nil\n\t\treturn\n\t}\n\n\t// Check lists\n\tlists := [][]*InstanceState{r.Deposed}\n\tfor _, is := range lists {\n\t\tfor i, instance := range is {\n\t\t\tif instance == v {\n\t\t\t\t// Found it, remove it\n\t\t\t\tis, is[len(is)-1] = append(is[:i], is[i+1:]...), nil\n\n\t\t\t\t// Done\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t}\n}\n\n// RootModule returns the ModuleState for the root module\nfunc (s *State) RootModule() *ModuleState {\n\troot := s.ModuleByPath(addrs.RootModuleInstance)\n\tif root == nil {\n\t\tpanic(\"missing root module\")\n\t}\n\treturn root\n}\n\n// Equal tests if one state is equal to another.\nfunc (s *State) Equal(other *State) bool {\n\t// If one is nil, we do a direct check\n\tif s == nil || other == nil {\n\t\treturn s == other\n\t}\n\n\ts.Lock()\n\tdefer s.Unlock()\n\treturn s.equal(other)\n}\n\nfunc (s *State) equal(other *State) bool {\n\tif s == nil || other == nil {\n\t\treturn s == other\n\t}\n\n\t// If the versions are different, they're certainly not equal\n\tif s.Version != other.Version {\n\t\treturn false\n\t}\n\n\t// If any of the modules are not equal, then this state isn't equal\n\tif len(s.Modules) != len(other.Modules) {\n\t\treturn false\n\t}\n\tfor _, m := range s.Modules {\n\t\t// This isn't very optimal currently but works.\n\t\totherM := other.moduleByPath(normalizeModulePath(m.Path))\n\t\tif otherM == nil {\n\t\t\treturn false\n\t\t}\n\n\t\t// If they're not equal, then we're not equal!\n\t\tif !m.Equal(otherM) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\treturn true\n}\n\n// MarshalEqual is similar to Equal but provides a stronger definition of\n// \"equal\", where two states are equal if and only if their serialized form\n// is byte-for-byte identical.\n//\n// This is primarily useful for callers that are trying to save snapshots\n// of state to persistent storage, allowing them to detect when a new\n// snapshot must be taken.\n//\n// Note that the serial number and lineage are included in the serialized form,\n// so it's the caller's responsibility to properly manage these attributes\n// so that this method is only called on two states that have the same\n// serial and lineage, unless detecting such differences is desired.\nfunc (s *State) MarshalEqual(other *State) bool {\n\tif s == nil && other == nil {\n\t\treturn true\n\t} else if s == nil || other == nil {\n\t\treturn false\n\t}\n\n\trecvBuf := &bytes.Buffer{}\n\totherBuf := &bytes.Buffer{}\n\n\terr := WriteState(s, recvBuf)\n\tif err != nil {\n\t\t// should never happen, since we're writing to a buffer\n\t\tpanic(err)\n\t}\n\n\terr = WriteState(other, otherBuf)\n\tif err != nil {\n\t\t// should never happen, since we're writing to a buffer\n\t\tpanic(err)\n\t}\n\n\treturn bytes.Equal(recvBuf.Bytes(), otherBuf.Bytes())\n}\n\ntype StateAgeComparison int\n\nconst (\n\tStateAgeEqual         StateAgeComparison = 0\n\tStateAgeReceiverNewer StateAgeComparison = 1\n\tStateAgeReceiverOlder StateAgeComparison = -1\n)\n\n// CompareAges compares one state with another for which is \"older\".\n//\n// This is a simple check using the state's serial, and is thus only as\n// reliable as the serial itself. In the normal case, only one state\n// exists for a given combination of lineage/serial, but Terraform\n// does not guarantee this and so the result of this method should be\n// used with care.\n//\n// Returns an integer that is negative if the receiver is older than\n// the argument, positive if the converse, and zero if they are equal.\n// An error is returned if the two states are not of the same lineage,\n// in which case the integer returned has no meaning.\nfunc (s *State) CompareAges(other *State) (StateAgeComparison, error) {\n\t// nil states are \"older\" than actual states\n\tswitch {\n\tcase s != nil && other == nil:\n\t\treturn StateAgeReceiverNewer, nil\n\tcase s == nil && other != nil:\n\t\treturn StateAgeReceiverOlder, nil\n\tcase s == nil && other == nil:\n\t\treturn StateAgeEqual, nil\n\t}\n\n\tif !s.SameLineage(other) {\n\t\treturn StateAgeEqual, fmt.Errorf(\n\t\t\t\"can't compare two states of differing lineage\",\n\t\t)\n\t}\n\n\ts.Lock()\n\tdefer s.Unlock()\n\n\tswitch {\n\tcase s.Serial < other.Serial:\n\t\treturn StateAgeReceiverOlder, nil\n\tcase s.Serial > other.Serial:\n\t\treturn StateAgeReceiverNewer, nil\n\tdefault:\n\t\treturn StateAgeEqual, nil\n\t}\n}\n\n// SameLineage returns true only if the state given in argument belongs\n// to the same \"lineage\" of states as the receiver.\nfunc (s *State) SameLineage(other *State) bool {\n\ts.Lock()\n\tdefer s.Unlock()\n\n\t// If one of the states has no lineage then it is assumed to predate\n\t// this concept, and so we'll accept it as belonging to any lineage\n\t// so that a lineage string can be assigned to newer versions\n\t// without breaking compatibility with older versions.\n\tif s.Lineage == \"\" || other.Lineage == \"\" {\n\t\treturn true\n\t}\n\n\treturn s.Lineage == other.Lineage\n}\n\n// DeepCopy performs a deep copy of the state structure and returns\n// a new structure.\nfunc (s *State) DeepCopy() *State {\n\tif s == nil {\n\t\treturn nil\n\t}\n\n\tcopy, err := copystructure.Config{Lock: true}.Copy(s)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\treturn copy.(*State)\n}\n\n// FromFutureTerraform checks if this state was written by a Terraform\n// version from the future.\nfunc (s *State) FromFutureTerraform() bool {\n\ts.Lock()\n\tdefer s.Unlock()\n\n\t// No TF version means it is certainly from the past\n\tif s.TFVersion == \"\" {\n\t\treturn false\n\t}\n\n\tv := version.Must(version.NewVersion(s.TFVersion))\n\treturn tfversion.SemVer.LessThan(v)\n}\n\nfunc (s *State) Init() {\n\ts.Lock()\n\tdefer s.Unlock()\n\ts.init()\n}\n\nfunc (s *State) init() {\n\tif s.Version == 0 {\n\t\ts.Version = StateVersion\n\t}\n\n\tif s.moduleByPath(addrs.RootModuleInstance) == nil {\n\t\ts.addModule(addrs.RootModuleInstance)\n\t}\n\ts.ensureHasLineage()\n\n\tfor _, mod := range s.Modules {\n\t\tif mod != nil {\n\t\t\tmod.init()\n\t\t}\n\t}\n\n\tif s.Remote != nil {\n\t\ts.Remote.init()\n\t}\n\n}\n\nfunc (s *State) EnsureHasLineage() {\n\ts.Lock()\n\tdefer s.Unlock()\n\n\ts.ensureHasLineage()\n}\n\nfunc (s *State) ensureHasLineage() {\n\tif s.Lineage == \"\" {\n\t\tlineage, err := uuid.GenerateUUID()\n\t\tif err != nil {\n\t\t\tpanic(fmt.Errorf(\"Failed to generate lineage: %v\", err))\n\t\t}\n\t\ts.Lineage = lineage\n\t\tlog.Printf(\"[DEBUG] New state was assigned lineage %q\\n\", s.Lineage)\n\t} else {\n\t\tlog.Printf(\"[TRACE] Preserving existing state lineage %q\\n\", s.Lineage)\n\t}\n}\n\n// AddModuleState insert this module state and override any existing ModuleState\nfunc (s *State) AddModuleState(mod *ModuleState) {\n\tmod.init()\n\ts.Lock()\n\tdefer s.Unlock()\n\n\ts.addModuleState(mod)\n}\n\nfunc (s *State) addModuleState(mod *ModuleState) {\n\tfor i, m := range s.Modules {\n\t\tif reflect.DeepEqual(m.Path, mod.Path) {\n\t\t\ts.Modules[i] = mod\n\t\t\treturn\n\t\t}\n\t}\n\n\ts.Modules = append(s.Modules, mod)\n\ts.sort()\n}\n\n// prune is used to remove any resources that are no longer required\nfunc (s *State) prune() {\n\tif s == nil {\n\t\treturn\n\t}\n\n\t// Filter out empty modules.\n\t// A module is always assumed to have a path, and it's length isn't always\n\t// bounds checked later on. Modules may be \"emptied\" during destroy, but we\n\t// never want to store those in the state.\n\tfor i := 0; i < len(s.Modules); i++ {\n\t\tif s.Modules[i] == nil || len(s.Modules[i].Path) == 0 {\n\t\t\ts.Modules = append(s.Modules[:i], s.Modules[i+1:]...)\n\t\t\ti--\n\t\t}\n\t}\n\n\tfor _, mod := range s.Modules {\n\t\tmod.prune()\n\t}\n\tif s.Remote != nil && s.Remote.Empty() {\n\t\ts.Remote = nil\n\t}\n}\n\n// sort sorts the modules\nfunc (s *State) sort() {\n\tsort.Sort(moduleStateSort(s.Modules))\n\n\t// Allow modules to be sorted\n\tfor _, m := range s.Modules {\n\t\tif m != nil {\n\t\t\tm.sort()\n\t\t}\n\t}\n}\n\nfunc (s *State) String() string {\n\tif s == nil {\n\t\treturn \"<nil>\"\n\t}\n\ts.Lock()\n\tdefer s.Unlock()\n\n\tvar buf bytes.Buffer\n\tfor _, m := range s.Modules {\n\t\tmStr := m.String()\n\n\t\t// If we're the root module, we just write the output directly.\n\t\tif reflect.DeepEqual(m.Path, rootModulePath) {\n\t\t\tbuf.WriteString(mStr + \"\\n\")\n\t\t\tcontinue\n\t\t}\n\n\t\tbuf.WriteString(fmt.Sprintf(\"module.%s:\\n\", strings.Join(m.Path[1:], \".\")))\n\n\t\ts := bufio.NewScanner(strings.NewReader(mStr))\n\t\tfor s.Scan() {\n\t\t\ttext := s.Text()\n\t\t\tif text != \"\" {\n\t\t\t\ttext = \"  \" + text\n\t\t\t}\n\n\t\t\tbuf.WriteString(fmt.Sprintf(\"%s\\n\", text))\n\t\t}\n\t}\n\n\treturn strings.TrimSpace(buf.String())\n}\n\n// BackendState stores the configuration to connect to a remote backend.\ntype BackendState struct {\n\tType      string          `json:\"type\"`   // Backend type\n\tConfigRaw json.RawMessage `json:\"config\"` // Backend raw config\n\tHash      uint64          `json:\"hash\"`   // Hash of portion of configuration from config files\n}\n\n// Empty returns true if BackendState has no state.\nfunc (s *BackendState) Empty() bool {\n\treturn s == nil || s.Type == \"\"\n}\n\n// Config decodes the type-specific configuration object using the provided\n// schema and returns the result as a cty.Value.\n//\n// An error is returned if the stored configuration does not conform to the\n// given schema.\nfunc (s *BackendState) Config(schema *configschema.Block) (cty.Value, error) {\n\tty := schema.ImpliedType()\n\tif s == nil {\n\t\treturn cty.NullVal(ty), nil\n\t}\n\treturn ctyjson.Unmarshal(s.ConfigRaw, ty)\n}\n\n// SetConfig replaces (in-place) the type-specific configuration object using\n// the provided value and associated schema.\n//\n// An error is returned if the given value does not conform to the implied\n// type of the schema.\nfunc (s *BackendState) SetConfig(val cty.Value, schema *configschema.Block) error {\n\tty := schema.ImpliedType()\n\tbuf, err := ctyjson.Marshal(val, ty)\n\tif err != nil {\n\t\treturn err\n\t}\n\ts.ConfigRaw = buf\n\treturn nil\n}\n\n// ForPlan produces an alternative representation of the reciever that is\n// suitable for storing in a plan. The current workspace must additionally\n// be provided, to be stored alongside the backend configuration.\n//\n// The backend configuration schema is required in order to properly\n// encode the backend-specific configuration settings.\nfunc (s *BackendState) ForPlan(schema *configschema.Block, workspaceName string) (*plans.Backend, error) {\n\tif s == nil {\n\t\treturn nil, nil\n\t}\n\n\tconfigVal, err := s.Config(schema)\n\tif err != nil {\n\t\treturn nil, errwrap.Wrapf(\"failed to decode backend config: {{err}}\", err)\n\t}\n\treturn plans.NewBackend(s.Type, configVal, schema, workspaceName)\n}\n\n// RemoteState is used to track the information about a remote\n// state store that we push/pull state to.\ntype RemoteState struct {\n\t// Type controls the client we use for the remote state\n\tType string `json:\"type\"`\n\n\t// Config is used to store arbitrary configuration that\n\t// is type specific\n\tConfig map[string]string `json:\"config\"`\n\n\tmu sync.Mutex\n}\n\nfunc (s *RemoteState) Lock()   { s.mu.Lock() }\nfunc (s *RemoteState) Unlock() { s.mu.Unlock() }\n\nfunc (r *RemoteState) init() {\n\tr.Lock()\n\tdefer r.Unlock()\n\n\tif r.Config == nil {\n\t\tr.Config = make(map[string]string)\n\t}\n}\n\nfunc (r *RemoteState) deepcopy() *RemoteState {\n\tr.Lock()\n\tdefer r.Unlock()\n\n\tconfCopy := make(map[string]string, len(r.Config))\n\tfor k, v := range r.Config {\n\t\tconfCopy[k] = v\n\t}\n\treturn &RemoteState{\n\t\tType:   r.Type,\n\t\tConfig: confCopy,\n\t}\n}\n\nfunc (r *RemoteState) Empty() bool {\n\tif r == nil {\n\t\treturn true\n\t}\n\tr.Lock()\n\tdefer r.Unlock()\n\n\treturn r.Type == \"\"\n}\n\nfunc (r *RemoteState) Equals(other *RemoteState) bool {\n\tr.Lock()\n\tdefer r.Unlock()\n\n\tif r.Type != other.Type {\n\t\treturn false\n\t}\n\tif len(r.Config) != len(other.Config) {\n\t\treturn false\n\t}\n\tfor k, v := range r.Config {\n\t\tif other.Config[k] != v {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\n// OutputState is used to track the state relevant to a single output.\ntype OutputState struct {\n\t// Sensitive describes whether the output is considered sensitive,\n\t// which may lead to masking the value on screen in some cases.\n\tSensitive bool `json:\"sensitive\"`\n\t// Type describes the structure of Value. Valid values are \"string\",\n\t// \"map\" and \"list\"\n\tType string `json:\"type\"`\n\t// Value contains the value of the output, in the structure described\n\t// by the Type field.\n\tValue interface{} `json:\"value\"`\n\n\tmu sync.Mutex\n}\n\nfunc (s *OutputState) Lock()   { s.mu.Lock() }\nfunc (s *OutputState) Unlock() { s.mu.Unlock() }\n\nfunc (s *OutputState) String() string {\n\treturn fmt.Sprintf(\"%#v\", s.Value)\n}\n\n// Equal compares two OutputState structures for equality. nil values are\n// considered equal.\nfunc (s *OutputState) Equal(other *OutputState) bool {\n\tif s == nil && other == nil {\n\t\treturn true\n\t}\n\n\tif s == nil || other == nil {\n\t\treturn false\n\t}\n\ts.Lock()\n\tdefer s.Unlock()\n\n\tif s.Type != other.Type {\n\t\treturn false\n\t}\n\n\tif s.Sensitive != other.Sensitive {\n\t\treturn false\n\t}\n\n\tif !reflect.DeepEqual(s.Value, other.Value) {\n\t\treturn false\n\t}\n\n\treturn true\n}\n\nfunc (s *OutputState) deepcopy() *OutputState {\n\tif s == nil {\n\t\treturn nil\n\t}\n\n\tstateCopy, err := copystructure.Config{Lock: true}.Copy(s)\n\tif err != nil {\n\t\tpanic(fmt.Errorf(\"Error copying output value: %s\", err))\n\t}\n\n\treturn stateCopy.(*OutputState)\n}\n\n// ModuleState is used to track all the state relevant to a single\n// module. Previous to Terraform 0.3, all state belonged to the \"root\"\n// module.\ntype ModuleState struct {\n\t// Path is the import path from the root module. Modules imports are\n\t// always disjoint, so the path represents amodule tree\n\tPath []string `json:\"path\"`\n\n\t// Locals are kept only transiently in-memory, because we can always\n\t// re-compute them.\n\tLocals map[string]interface{} `json:\"-\"`\n\n\t// Outputs declared by the module and maintained for each module\n\t// even though only the root module technically needs to be kept.\n\t// This allows operators to inspect values at the boundaries.\n\tOutputs map[string]*OutputState `json:\"outputs\"`\n\n\t// Resources is a mapping of the logically named resource to\n\t// the state of the resource. Each resource may actually have\n\t// N instances underneath, although a user only needs to think\n\t// about the 1:1 case.\n\tResources map[string]*ResourceState `json:\"resources\"`\n\n\t// Dependencies are a list of things that this module relies on\n\t// existing to remain intact. For example: an module may depend\n\t// on a VPC ID given by an aws_vpc resource.\n\t//\n\t// Terraform uses this information to build valid destruction\n\t// orders and to warn the user if they're destroying a module that\n\t// another resource depends on.\n\t//\n\t// Things can be put into this list that may not be managed by\n\t// Terraform. If Terraform doesn't find a matching ID in the\n\t// overall state, then it assumes it isn't managed and doesn't\n\t// worry about it.\n\tDependencies []string `json:\"depends_on\"`\n\n\tmu sync.Mutex\n}\n\nfunc (s *ModuleState) Lock()   { s.mu.Lock() }\nfunc (s *ModuleState) Unlock() { s.mu.Unlock() }\n\n// Equal tests whether one module state is equal to another.\nfunc (m *ModuleState) Equal(other *ModuleState) bool {\n\tm.Lock()\n\tdefer m.Unlock()\n\n\t// Paths must be equal\n\tif !reflect.DeepEqual(m.Path, other.Path) {\n\t\treturn false\n\t}\n\n\t// Outputs must be equal\n\tif len(m.Outputs) != len(other.Outputs) {\n\t\treturn false\n\t}\n\tfor k, v := range m.Outputs {\n\t\tif !other.Outputs[k].Equal(v) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\t// Dependencies must be equal. This sorts these in place but\n\t// this shouldn't cause any problems.\n\tsort.Strings(m.Dependencies)\n\tsort.Strings(other.Dependencies)\n\tif len(m.Dependencies) != len(other.Dependencies) {\n\t\treturn false\n\t}\n\tfor i, d := range m.Dependencies {\n\t\tif other.Dependencies[i] != d {\n\t\t\treturn false\n\t\t}\n\t}\n\n\t// Resources must be equal\n\tif len(m.Resources) != len(other.Resources) {\n\t\treturn false\n\t}\n\tfor k, r := range m.Resources {\n\t\totherR, ok := other.Resources[k]\n\t\tif !ok {\n\t\t\treturn false\n\t\t}\n\n\t\tif !r.Equal(otherR) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\treturn true\n}\n\n// IsRoot says whether or not this module diff is for the root module.\nfunc (m *ModuleState) IsRoot() bool {\n\tm.Lock()\n\tdefer m.Unlock()\n\treturn reflect.DeepEqual(m.Path, rootModulePath)\n}\n\n// IsDescendent returns true if other is a descendent of this module.\nfunc (m *ModuleState) IsDescendent(other *ModuleState) bool {\n\tm.Lock()\n\tdefer m.Unlock()\n\n\ti := len(m.Path)\n\treturn len(other.Path) > i && reflect.DeepEqual(other.Path[:i], m.Path)\n}\n\n// Orphans returns a list of keys of resources that are in the State\n// but aren't present in the configuration itself. Hence, these keys\n// represent the state of resources that are orphans.\nfunc (m *ModuleState) Orphans(c *configs.Module) []addrs.ResourceInstance {\n\tm.Lock()\n\tdefer m.Unlock()\n\n\tinConfig := make(map[string]struct{})\n\tif c != nil {\n\t\tfor _, r := range c.ManagedResources {\n\t\t\tinConfig[r.Addr().String()] = struct{}{}\n\t\t}\n\t\tfor _, r := range c.DataResources {\n\t\t\tinConfig[r.Addr().String()] = struct{}{}\n\t\t}\n\t}\n\n\tvar result []addrs.ResourceInstance\n\tfor k := range m.Resources {\n\t\t// Since we've not yet updated state to use our new address format,\n\t\t// we need to do some shimming here.\n\t\tlegacyAddr, err := parseResourceAddressInternal(k)\n\t\tif err != nil {\n\t\t\t// Suggests that the user tampered with the state, since we always\n\t\t\t// generate valid internal addresses.\n\t\t\tlog.Printf(\"ModuleState has invalid resource key %q. Ignoring.\", k)\n\t\t\tcontinue\n\t\t}\n\n\t\taddr := legacyAddr.AbsResourceInstanceAddr().Resource\n\t\tcompareKey := addr.Resource.String() // compare by resource address, ignoring instance key\n\t\tif _, exists := inConfig[compareKey]; !exists {\n\t\t\tresult = append(result, addr)\n\t\t}\n\t}\n\treturn result\n}\n\n// RemovedOutputs returns a list of outputs that are in the State but aren't\n// present in the configuration itself.\nfunc (s *ModuleState) RemovedOutputs(outputs map[string]*configs.Output) []addrs.OutputValue {\n\tif outputs == nil {\n\t\t// If we got no output map at all then we'll just treat our set of\n\t\t// configured outputs as empty, since that suggests that they've all\n\t\t// been removed by removing their containing module.\n\t\toutputs = make(map[string]*configs.Output)\n\t}\n\n\ts.Lock()\n\tdefer s.Unlock()\n\n\tvar ret []addrs.OutputValue\n\tfor n := range s.Outputs {\n\t\tif _, declared := outputs[n]; !declared {\n\t\t\tret = append(ret, addrs.OutputValue{\n\t\t\t\tName: n,\n\t\t\t})\n\t\t}\n\t}\n\n\treturn ret\n}\n\n// View returns a view with the given resource prefix.\nfunc (m *ModuleState) View(id string) *ModuleState {\n\tif m == nil {\n\t\treturn m\n\t}\n\n\tr := m.deepcopy()\n\tfor k, _ := range r.Resources {\n\t\tif id == k || strings.HasPrefix(k, id+\".\") {\n\t\t\tcontinue\n\t\t}\n\n\t\tdelete(r.Resources, k)\n\t}\n\n\treturn r\n}\n\nfunc (m *ModuleState) init() {\n\tm.Lock()\n\tdefer m.Unlock()\n\n\tif m.Path == nil {\n\t\tm.Path = []string{}\n\t}\n\tif m.Outputs == nil {\n\t\tm.Outputs = make(map[string]*OutputState)\n\t}\n\tif m.Resources == nil {\n\t\tm.Resources = make(map[string]*ResourceState)\n\t}\n\n\tif m.Dependencies == nil {\n\t\tm.Dependencies = make([]string, 0)\n\t}\n\n\tfor _, rs := range m.Resources {\n\t\trs.init()\n\t}\n}\n\nfunc (m *ModuleState) deepcopy() *ModuleState {\n\tif m == nil {\n\t\treturn nil\n\t}\n\n\tstateCopy, err := copystructure.Config{Lock: true}.Copy(m)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\treturn stateCopy.(*ModuleState)\n}\n\n// prune is used to remove any resources that are no longer required\nfunc (m *ModuleState) prune() {\n\tm.Lock()\n\tdefer m.Unlock()\n\n\tfor k, v := range m.Resources {\n\t\tif v == nil || (v.Primary == nil || v.Primary.ID == \"\") && len(v.Deposed) == 0 {\n\t\t\tdelete(m.Resources, k)\n\t\t\tcontinue\n\t\t}\n\n\t\tv.prune()\n\t}\n\n\tfor k, v := range m.Outputs {\n\t\tif v.Value == config.UnknownVariableValue {\n\t\t\tdelete(m.Outputs, k)\n\t\t}\n\t}\n\n\tm.Dependencies = uniqueStrings(m.Dependencies)\n}\n\nfunc (m *ModuleState) sort() {\n\tfor _, v := range m.Resources {\n\t\tv.sort()\n\t}\n}\n\nfunc (m *ModuleState) String() string {\n\tm.Lock()\n\tdefer m.Unlock()\n\n\tvar buf bytes.Buffer\n\n\tif len(m.Resources) == 0 {\n\t\tbuf.WriteString(\"<no state>\")\n\t}\n\n\tnames := make([]string, 0, len(m.Resources))\n\tfor name, _ := range m.Resources {\n\t\tnames = append(names, name)\n\t}\n\n\tsort.Sort(resourceNameSort(names))\n\n\tfor _, k := range names {\n\t\trs := m.Resources[k]\n\t\tvar id string\n\t\tif rs.Primary != nil {\n\t\t\tid = rs.Primary.ID\n\t\t}\n\t\tif id == \"\" {\n\t\t\tid = \"<not created>\"\n\t\t}\n\n\t\ttaintStr := \"\"\n\t\tif rs.Primary.Tainted {\n\t\t\ttaintStr = \" (tainted)\"\n\t\t}\n\n\t\tdeposedStr := \"\"\n\t\tif len(rs.Deposed) > 0 {\n\t\t\tdeposedStr = fmt.Sprintf(\" (%d deposed)\", len(rs.Deposed))\n\t\t}\n\n\t\tbuf.WriteString(fmt.Sprintf(\"%s:%s%s\\n\", k, taintStr, deposedStr))\n\t\tbuf.WriteString(fmt.Sprintf(\"  ID = %s\\n\", id))\n\t\tif rs.Provider != \"\" {\n\t\t\tbuf.WriteString(fmt.Sprintf(\"  provider = %s\\n\", rs.Provider))\n\t\t}\n\n\t\tvar attributes map[string]string\n\t\tif rs.Primary != nil {\n\t\t\tattributes = rs.Primary.Attributes\n\t\t}\n\t\tattrKeys := make([]string, 0, len(attributes))\n\t\tfor ak, _ := range attributes {\n\t\t\tif ak == \"id\" {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tattrKeys = append(attrKeys, ak)\n\t\t}\n\n\t\tsort.Strings(attrKeys)\n\n\t\tfor _, ak := range attrKeys {\n\t\t\tav := attributes[ak]\n\t\t\tbuf.WriteString(fmt.Sprintf(\"  %s = %s\\n\", ak, av))\n\t\t}\n\n\t\tfor idx, t := range rs.Deposed {\n\t\t\ttaintStr := \"\"\n\t\t\tif t.Tainted {\n\t\t\t\ttaintStr = \" (tainted)\"\n\t\t\t}\n\t\t\tbuf.WriteString(fmt.Sprintf(\"  Deposed ID %d = %s%s\\n\", idx+1, t.ID, taintStr))\n\t\t}\n\n\t\tif len(rs.Dependencies) > 0 {\n\t\t\tbuf.WriteString(fmt.Sprintf(\"\\n  Dependencies:\\n\"))\n\t\t\tfor _, dep := range rs.Dependencies {\n\t\t\t\tbuf.WriteString(fmt.Sprintf(\"    %s\\n\", dep))\n\t\t\t}\n\t\t}\n\t}\n\n\tif len(m.Outputs) > 0 {\n\t\tbuf.WriteString(\"\\nOutputs:\\n\\n\")\n\n\t\tks := make([]string, 0, len(m.Outputs))\n\t\tfor k, _ := range m.Outputs {\n\t\t\tks = append(ks, k)\n\t\t}\n\n\t\tsort.Strings(ks)\n\n\t\tfor _, k := range ks {\n\t\t\tv := m.Outputs[k]\n\t\t\tswitch vTyped := v.Value.(type) {\n\t\t\tcase string:\n\t\t\t\tbuf.WriteString(fmt.Sprintf(\"%s = %s\\n\", k, vTyped))\n\t\t\tcase []interface{}:\n\t\t\t\tbuf.WriteString(fmt.Sprintf(\"%s = %s\\n\", k, vTyped))\n\t\t\tcase map[string]interface{}:\n\t\t\t\tvar mapKeys []string\n\t\t\t\tfor key, _ := range vTyped {\n\t\t\t\t\tmapKeys = append(mapKeys, key)\n\t\t\t\t}\n\t\t\t\tsort.Strings(mapKeys)\n\n\t\t\t\tvar mapBuf bytes.Buffer\n\t\t\t\tmapBuf.WriteString(\"{\")\n\t\t\t\tfor _, key := range mapKeys {\n\t\t\t\t\tmapBuf.WriteString(fmt.Sprintf(\"%s:%s \", key, vTyped[key]))\n\t\t\t\t}\n\t\t\t\tmapBuf.WriteString(\"}\")\n\n\t\t\t\tbuf.WriteString(fmt.Sprintf(\"%s = %s\\n\", k, mapBuf.String()))\n\t\t\t}\n\t\t}\n\t}\n\n\treturn buf.String()\n}\n\nfunc (m *ModuleState) Empty() bool {\n\treturn len(m.Locals) == 0 && len(m.Outputs) == 0 && len(m.Resources) == 0\n}\n\n// ResourceStateKey is a structured representation of the key used for the\n// ModuleState.Resources mapping\ntype ResourceStateKey struct {\n\tName  string\n\tType  string\n\tMode  config.ResourceMode\n\tIndex int\n}\n\n// Equal determines whether two ResourceStateKeys are the same\nfunc (rsk *ResourceStateKey) Equal(other *ResourceStateKey) bool {\n\tif rsk == nil || other == nil {\n\t\treturn false\n\t}\n\tif rsk.Mode != other.Mode {\n\t\treturn false\n\t}\n\tif rsk.Type != other.Type {\n\t\treturn false\n\t}\n\tif rsk.Name != other.Name {\n\t\treturn false\n\t}\n\tif rsk.Index != other.Index {\n\t\treturn false\n\t}\n\treturn true\n}\n\nfunc (rsk *ResourceStateKey) String() string {\n\tif rsk == nil {\n\t\treturn \"\"\n\t}\n\tvar prefix string\n\tswitch rsk.Mode {\n\tcase config.ManagedResourceMode:\n\t\tprefix = \"\"\n\tcase config.DataResourceMode:\n\t\tprefix = \"data.\"\n\tdefault:\n\t\tpanic(fmt.Errorf(\"unknown resource mode %s\", rsk.Mode))\n\t}\n\tif rsk.Index == -1 {\n\t\treturn fmt.Sprintf(\"%s%s.%s\", prefix, rsk.Type, rsk.Name)\n\t}\n\treturn fmt.Sprintf(\"%s%s.%s.%d\", prefix, rsk.Type, rsk.Name, rsk.Index)\n}\n\n// ParseResourceStateKey accepts a key in the format used by\n// ModuleState.Resources and returns a resource name and resource index. In the\n// state, a resource has the format \"type.name.index\" or \"type.name\". In the\n// latter case, the index is returned as -1.\nfunc ParseResourceStateKey(k string) (*ResourceStateKey, error) {\n\tparts := strings.Split(k, \".\")\n\tmode := config.ManagedResourceMode\n\tif len(parts) > 0 && parts[0] == \"data\" {\n\t\tmode = config.DataResourceMode\n\t\t// Don't need the constant \"data\" prefix for parsing\n\t\t// now that we've figured out the mode.\n\t\tparts = parts[1:]\n\t}\n\tif len(parts) < 2 || len(parts) > 3 {\n\t\treturn nil, fmt.Errorf(\"Malformed resource state key: %s\", k)\n\t}\n\trsk := &ResourceStateKey{\n\t\tMode:  mode,\n\t\tType:  parts[0],\n\t\tName:  parts[1],\n\t\tIndex: -1,\n\t}\n\tif len(parts) == 3 {\n\t\tindex, err := strconv.Atoi(parts[2])\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"Malformed resource state key index: %s\", k)\n\t\t}\n\t\trsk.Index = index\n\t}\n\treturn rsk, nil\n}\n\n// ResourceState holds the state of a resource that is used so that\n// a provider can find and manage an existing resource as well as for\n// storing attributes that are used to populate variables of child\n// resources.\n//\n// Attributes has attributes about the created resource that are\n// queryable in interpolation: \"${type.id.attr}\"\n//\n// Extra is just extra data that a provider can return that we store\n// for later, but is not exposed in any way to the user.\n//\ntype ResourceState struct {\n\t// This is filled in and managed by Terraform, and is the resource\n\t// type itself such as \"mycloud_instance\". If a resource provider sets\n\t// this value, it won't be persisted.\n\tType string `json:\"type\"`\n\n\t// Dependencies are a list of things that this resource relies on\n\t// existing to remain intact. For example: an AWS instance might\n\t// depend on a subnet (which itself might depend on a VPC, and so\n\t// on).\n\t//\n\t// Terraform uses this information to build valid destruction\n\t// orders and to warn the user if they're destroying a resource that\n\t// another resource depends on.\n\t//\n\t// Things can be put into this list that may not be managed by\n\t// Terraform. If Terraform doesn't find a matching ID in the\n\t// overall state, then it assumes it isn't managed and doesn't\n\t// worry about it.\n\tDependencies []string `json:\"depends_on\"`\n\n\t// Primary is the current active instance for this resource.\n\t// It can be replaced but only after a successful creation.\n\t// This is the instances on which providers will act.\n\tPrimary *InstanceState `json:\"primary\"`\n\n\t// Deposed is used in the mechanics of CreateBeforeDestroy: the existing\n\t// Primary is Deposed to get it out of the way for the replacement Primary to\n\t// be created by Apply. If the replacement Primary creates successfully, the\n\t// Deposed instance is cleaned up.\n\t//\n\t// If there were problems creating the replacement Primary, the Deposed\n\t// instance and the (now tainted) replacement Primary will be swapped so the\n\t// tainted replacement will be cleaned up instead.\n\t//\n\t// An instance will remain in the Deposed list until it is successfully\n\t// destroyed and purged.\n\tDeposed []*InstanceState `json:\"deposed\"`\n\n\t// Provider is used when a resource is connected to a provider with an alias.\n\t// If this string is empty, the resource is connected to the default provider,\n\t// e.g. \"aws_instance\" goes with the \"aws\" provider.\n\t// If the resource block contained a \"provider\" key, that value will be set here.\n\tProvider string `json:\"provider\"`\n\n\tmu sync.Mutex\n}\n\nfunc (s *ResourceState) Lock()   { s.mu.Lock() }\nfunc (s *ResourceState) Unlock() { s.mu.Unlock() }\n\n// Equal tests whether two ResourceStates are equal.\nfunc (s *ResourceState) Equal(other *ResourceState) bool {\n\ts.Lock()\n\tdefer s.Unlock()\n\n\tif s.Type != other.Type {\n\t\treturn false\n\t}\n\n\tif s.Provider != other.Provider {\n\t\treturn false\n\t}\n\n\t// Dependencies must be equal\n\tsort.Strings(s.Dependencies)\n\tsort.Strings(other.Dependencies)\n\tif len(s.Dependencies) != len(other.Dependencies) {\n\t\treturn false\n\t}\n\tfor i, d := range s.Dependencies {\n\t\tif other.Dependencies[i] != d {\n\t\t\treturn false\n\t\t}\n\t}\n\n\t// States must be equal\n\tif !s.Primary.Equal(other.Primary) {\n\t\treturn false\n\t}\n\n\treturn true\n}\n\n// Taint marks a resource as tainted.\nfunc (s *ResourceState) Taint() {\n\ts.Lock()\n\tdefer s.Unlock()\n\n\tif s.Primary != nil {\n\t\ts.Primary.Tainted = true\n\t}\n}\n\n// Untaint unmarks a resource as tainted.\nfunc (s *ResourceState) Untaint() {\n\ts.Lock()\n\tdefer s.Unlock()\n\n\tif s.Primary != nil {\n\t\ts.Primary.Tainted = false\n\t}\n}\n\n// ProviderAddr returns the provider address for the receiver, by parsing the\n// string representation saved in state. An error can be returned if the\n// value in state is corrupt.\nfunc (s *ResourceState) ProviderAddr() (addrs.AbsProviderConfig, error) {\n\tvar diags tfdiags.Diagnostics\n\n\tstr := s.Provider\n\ttraversal, travDiags := hclsyntax.ParseTraversalAbs([]byte(str), \"\", hcl.Pos{Line: 1, Column: 1})\n\tdiags = diags.Append(travDiags)\n\tif travDiags.HasErrors() {\n\t\treturn addrs.AbsProviderConfig{}, diags.Err()\n\t}\n\n\taddr, addrDiags := addrs.ParseAbsProviderConfig(traversal)\n\tdiags = diags.Append(addrDiags)\n\treturn addr, diags.Err()\n}\n\nfunc (s *ResourceState) init() {\n\ts.Lock()\n\tdefer s.Unlock()\n\n\tif s.Primary == nil {\n\t\ts.Primary = &InstanceState{}\n\t}\n\ts.Primary.init()\n\n\tif s.Dependencies == nil {\n\t\ts.Dependencies = []string{}\n\t}\n\n\tif s.Deposed == nil {\n\t\ts.Deposed = make([]*InstanceState, 0)\n\t}\n}\n\nfunc (s *ResourceState) deepcopy() *ResourceState {\n\tcopy, err := copystructure.Config{Lock: true}.Copy(s)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\treturn copy.(*ResourceState)\n}\n\n// prune is used to remove any instances that are no longer required\nfunc (s *ResourceState) prune() {\n\ts.Lock()\n\tdefer s.Unlock()\n\n\tn := len(s.Deposed)\n\tfor i := 0; i < n; i++ {\n\t\tinst := s.Deposed[i]\n\t\tif inst == nil || inst.ID == \"\" {\n\t\t\tcopy(s.Deposed[i:], s.Deposed[i+1:])\n\t\t\ts.Deposed[n-1] = nil\n\t\t\tn--\n\t\t\ti--\n\t\t}\n\t}\n\ts.Deposed = s.Deposed[:n]\n\n\ts.Dependencies = uniqueStrings(s.Dependencies)\n}\n\nfunc (s *ResourceState) sort() {\n\ts.Lock()\n\tdefer s.Unlock()\n\n\tsort.Strings(s.Dependencies)\n}\n\nfunc (s *ResourceState) String() string {\n\ts.Lock()\n\tdefer s.Unlock()\n\n\tvar buf bytes.Buffer\n\tbuf.WriteString(fmt.Sprintf(\"Type = %s\", s.Type))\n\treturn buf.String()\n}\n\n// InstanceState is used to track the unique state information belonging\n// to a given instance.\ntype InstanceState struct {\n\t// A unique ID for this resource. This is opaque to Terraform\n\t// and is only meant as a lookup mechanism for the providers.\n\tID string `json:\"id\"`\n\n\t// Attributes are basic information about the resource. Any keys here\n\t// are accessible in variable format within Terraform configurations:\n\t// ${resourcetype.name.attribute}.\n\tAttributes map[string]string `json:\"attributes\"`\n\n\t// Ephemeral is used to store any state associated with this instance\n\t// that is necessary for the Terraform run to complete, but is not\n\t// persisted to a state file.\n\tEphemeral EphemeralState `json:\"-\"`\n\n\t// Meta is a simple K/V map that is persisted to the State but otherwise\n\t// ignored by Terraform core. It's meant to be used for accounting by\n\t// external client code. The value here must only contain Go primitives\n\t// and collections.\n\tMeta map[string]interface{} `json:\"meta\"`\n\n\t// Tainted is used to mark a resource for recreation.\n\tTainted bool `json:\"tainted\"`\n\n\tmu sync.Mutex\n}\n\nfunc (s *InstanceState) Lock()   { s.mu.Lock() }\nfunc (s *InstanceState) Unlock() { s.mu.Unlock() }\n\nfunc (s *InstanceState) init() {\n\ts.Lock()\n\tdefer s.Unlock()\n\n\tif s.Attributes == nil {\n\t\ts.Attributes = make(map[string]string)\n\t}\n\tif s.Meta == nil {\n\t\ts.Meta = make(map[string]interface{})\n\t}\n\ts.Ephemeral.init()\n}\n\n// NewInstanceStateShimmedFromValue is a shim method to lower a new-style\n// object value representing the attributes of an instance object into the\n// legacy InstanceState representation.\n//\n// This is for shimming to old components only and should not be used in new code.\nfunc NewInstanceStateShimmedFromValue(state cty.Value, schemaVersion int) *InstanceState {\n\tattrs := hcl2shim.FlatmapValueFromHCL2(state)\n\treturn &InstanceState{\n\t\tID:         attrs[\"id\"],\n\t\tAttributes: attrs,\n\t\tMeta: map[string]interface{}{\n\t\t\t\"schema_version\": schemaVersion,\n\t\t},\n\t}\n}\n\n// AttrsAsObjectValue shims from the legacy InstanceState representation to\n// a new-style cty object value representation of the state attributes, using\n// the given type for guidance.\n//\n// The given type must be the implied type of the schema of the resource type\n// of the object whose state is being converted, or the result is undefined.\n//\n// This is for shimming from old components only and should not be used in\n// new code.\nfunc (s *InstanceState) AttrsAsObjectValue(ty cty.Type) (cty.Value, error) {\n\tif s == nil {\n\t\t// if the state is nil, we need to construct a complete cty.Value with\n\t\t// null attributes, rather than a single cty.NullVal(ty)\n\t\ts = &InstanceState{}\n\t}\n\n\tif s.Attributes == nil {\n\t\ts.Attributes = map[string]string{}\n\t}\n\n\t// make sure ID is included in the attributes. The InstanceState.ID value\n\t// takes precedence.\n\tif s.ID != \"\" {\n\t\ts.Attributes[\"id\"] = s.ID\n\t}\n\n\treturn hcl2shim.HCL2ValueFromFlatmap(s.Attributes, ty)\n}\n\n// Copy all the Fields from another InstanceState\nfunc (s *InstanceState) Set(from *InstanceState) {\n\ts.Lock()\n\tdefer s.Unlock()\n\n\tfrom.Lock()\n\tdefer from.Unlock()\n\n\ts.ID = from.ID\n\ts.Attributes = from.Attributes\n\ts.Ephemeral = from.Ephemeral\n\ts.Meta = from.Meta\n\ts.Tainted = from.Tainted\n}\n\nfunc (s *InstanceState) DeepCopy() *InstanceState {\n\tcopy, err := copystructure.Config{Lock: true}.Copy(s)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\treturn copy.(*InstanceState)\n}\n\nfunc (s *InstanceState) Empty() bool {\n\tif s == nil {\n\t\treturn true\n\t}\n\ts.Lock()\n\tdefer s.Unlock()\n\n\treturn s.ID == \"\"\n}\n\nfunc (s *InstanceState) Equal(other *InstanceState) bool {\n\t// Short circuit some nil checks\n\tif s == nil || other == nil {\n\t\treturn s == other\n\t}\n\ts.Lock()\n\tdefer s.Unlock()\n\n\t// IDs must be equal\n\tif s.ID != other.ID {\n\t\treturn false\n\t}\n\n\t// Attributes must be equal\n\tif len(s.Attributes) != len(other.Attributes) {\n\t\treturn false\n\t}\n\tfor k, v := range s.Attributes {\n\t\totherV, ok := other.Attributes[k]\n\t\tif !ok {\n\t\t\treturn false\n\t\t}\n\n\t\tif v != otherV {\n\t\t\treturn false\n\t\t}\n\t}\n\n\t// Meta must be equal\n\tif len(s.Meta) != len(other.Meta) {\n\t\treturn false\n\t}\n\tif s.Meta != nil && other.Meta != nil {\n\t\t// We only do the deep check if both are non-nil. If one is nil\n\t\t// we treat it as equal since their lengths are both zero (check\n\t\t// above).\n\t\t//\n\t\t// Since this can contain numeric values that may change types during\n\t\t// serialization, let's compare the serialized values.\n\t\tsMeta, err := json.Marshal(s.Meta)\n\t\tif err != nil {\n\t\t\t// marshaling primitives shouldn't ever error out\n\t\t\tpanic(err)\n\t\t}\n\t\totherMeta, err := json.Marshal(other.Meta)\n\t\tif err != nil {\n\t\t\tpanic(err)\n\t\t}\n\n\t\tif !bytes.Equal(sMeta, otherMeta) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\tif s.Tainted != other.Tainted {\n\t\treturn false\n\t}\n\n\treturn true\n}\n\n// MergeDiff takes a ResourceDiff and merges the attributes into\n// this resource state in order to generate a new state. This new\n// state can be used to provide updated attribute lookups for\n// variable interpolation.\n//\n// If the diff attribute requires computing the value, and hence\n// won't be available until apply, the value is replaced with the\n// computeID.\nfunc (s *InstanceState) MergeDiff(d *InstanceDiff) *InstanceState {\n\tresult := s.DeepCopy()\n\tif result == nil {\n\t\tresult = new(InstanceState)\n\t}\n\tresult.init()\n\n\tif s != nil {\n\t\ts.Lock()\n\t\tdefer s.Unlock()\n\t\tfor k, v := range s.Attributes {\n\t\t\tresult.Attributes[k] = v\n\t\t}\n\t}\n\tif d != nil {\n\t\tfor k, diff := range d.CopyAttributes() {\n\t\t\tif diff.NewRemoved {\n\t\t\t\tdelete(result.Attributes, k)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif diff.NewComputed {\n\t\t\t\tresult.Attributes[k] = config.UnknownVariableValue\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tresult.Attributes[k] = diff.New\n\t\t}\n\t}\n\n\treturn result\n}\n\nfunc (s *InstanceState) String() string {\n\tnotCreated := \"<not created>\"\n\n\tif s == nil {\n\t\treturn notCreated\n\t}\n\n\ts.Lock()\n\tdefer s.Unlock()\n\n\tvar buf bytes.Buffer\n\n\tif s.ID == \"\" {\n\t\treturn notCreated\n\t}\n\n\tbuf.WriteString(fmt.Sprintf(\"ID = %s\\n\", s.ID))\n\n\tattributes := s.Attributes\n\tattrKeys := make([]string, 0, len(attributes))\n\tfor ak, _ := range attributes {\n\t\tif ak == \"id\" {\n\t\t\tcontinue\n\t\t}\n\n\t\tattrKeys = append(attrKeys, ak)\n\t}\n\tsort.Strings(attrKeys)\n\n\tfor _, ak := range attrKeys {\n\t\tav := attributes[ak]\n\t\tbuf.WriteString(fmt.Sprintf(\"%s = %s\\n\", ak, av))\n\t}\n\n\tbuf.WriteString(fmt.Sprintf(\"Tainted = %t\\n\", s.Tainted))\n\n\treturn buf.String()\n}\n\n// EphemeralState is used for transient state that is only kept in-memory\ntype EphemeralState struct {\n\t// ConnInfo is used for the providers to export information which is\n\t// used to connect to the resource for provisioning. For example,\n\t// this could contain SSH or WinRM credentials.\n\tConnInfo map[string]string `json:\"-\"`\n\n\t// Type is used to specify the resource type for this instance. This is only\n\t// required for import operations (as documented). If the documentation\n\t// doesn't state that you need to set this, then don't worry about\n\t// setting it.\n\tType string `json:\"-\"`\n}\n\nfunc (e *EphemeralState) init() {\n\tif e.ConnInfo == nil {\n\t\te.ConnInfo = make(map[string]string)\n\t}\n}\n\nfunc (e *EphemeralState) DeepCopy() *EphemeralState {\n\tcopy, err := copystructure.Config{Lock: true}.Copy(e)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\treturn copy.(*EphemeralState)\n}\n\ntype jsonStateVersionIdentifier struct {\n\tVersion int `json:\"version\"`\n}\n\n// Check if this is a V0 format - the magic bytes at the start of the file\n// should be \"tfstate\" if so. We no longer support upgrading this type of\n// state but return an error message explaining to a user how they can\n// upgrade via the 0.6.x series.\nfunc testForV0State(buf *bufio.Reader) error {\n\tstart, err := buf.Peek(len(\"tfstate\"))\n\tif err != nil {\n\t\treturn fmt.Errorf(\"Failed to check for magic bytes: %v\", err)\n\t}\n\tif string(start) == \"tfstate\" {\n\t\treturn fmt.Errorf(\"Terraform 0.7 no longer supports upgrading the binary state\\n\" +\n\t\t\t\"format which was used prior to Terraform 0.3. Please upgrade\\n\" +\n\t\t\t\"this state file using Terraform 0.6.16 prior to using it with\\n\" +\n\t\t\t\"Terraform 0.7.\")\n\t}\n\n\treturn nil\n}\n\n// ErrNoState is returned by ReadState when the io.Reader contains no data\nvar ErrNoState = errors.New(\"no state\")\n\n// ReadState reads a state structure out of a reader in the format that\n// was written by WriteState.\nfunc ReadState(src io.Reader) (*State, error) {\n\t// check for a nil file specifically, since that produces a platform\n\t// specific error if we try to use it in a bufio.Reader.\n\tif f, ok := src.(*os.File); ok && f == nil {\n\t\treturn nil, ErrNoState\n\t}\n\n\tbuf := bufio.NewReader(src)\n\n\tif _, err := buf.Peek(1); err != nil {\n\t\tif err == io.EOF {\n\t\t\treturn nil, ErrNoState\n\t\t}\n\t\treturn nil, err\n\t}\n\n\tif err := testForV0State(buf); err != nil {\n\t\treturn nil, err\n\t}\n\n\t// If we are JSON we buffer the whole thing in memory so we can read it twice.\n\t// This is suboptimal, but will work for now.\n\tjsonBytes, err := ioutil.ReadAll(buf)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"Reading state file failed: %v\", err)\n\t}\n\n\tversionIdentifier := &jsonStateVersionIdentifier{}\n\tif err := json.Unmarshal(jsonBytes, versionIdentifier); err != nil {\n\t\treturn nil, fmt.Errorf(\"Decoding state file version failed: %v\", err)\n\t}\n\n\tvar result *State\n\tswitch versionIdentifier.Version {\n\tcase 0:\n\t\treturn nil, fmt.Errorf(\"State version 0 is not supported as JSON.\")\n\tcase 1:\n\t\tv1State, err := ReadStateV1(jsonBytes)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tv2State, err := upgradeStateV1ToV2(v1State)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tv3State, err := upgradeStateV2ToV3(v2State)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\t// increment the Serial whenever we upgrade state\n\t\tv3State.Serial++\n\t\tresult = v3State\n\tcase 2:\n\t\tv2State, err := ReadStateV2(jsonBytes)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tv3State, err := upgradeStateV2ToV3(v2State)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tv3State.Serial++\n\t\tresult = v3State\n\tcase 3:\n\t\tv3State, err := ReadStateV3(jsonBytes)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tresult = v3State\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"Terraform %s does not support state version %d, please update.\",\n\t\t\ttfversion.SemVer.String(), versionIdentifier.Version)\n\t}\n\n\t// If we reached this place we must have a result set\n\tif result == nil {\n\t\tpanic(\"resulting state in load not set, assertion failed\")\n\t}\n\n\t// Prune the state when read it. Its possible to write unpruned states or\n\t// for a user to make a state unpruned (nil-ing a module state for example).\n\tresult.prune()\n\n\t// Validate the state file is valid\n\tif err := result.Validate(); err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn result, nil\n}\n\nfunc ReadStateV1(jsonBytes []byte) (*stateV1, error) {\n\tv1State := &stateV1{}\n\tif err := json.Unmarshal(jsonBytes, v1State); err != nil {\n\t\treturn nil, fmt.Errorf(\"Decoding state file failed: %v\", err)\n\t}\n\n\tif v1State.Version != 1 {\n\t\treturn nil, fmt.Errorf(\"Decoded state version did not match the decoder selection: \"+\n\t\t\t\"read %d, expected 1\", v1State.Version)\n\t}\n\n\treturn v1State, nil\n}\n\nfunc ReadStateV2(jsonBytes []byte) (*State, error) {\n\tstate := &State{}\n\tif err := json.Unmarshal(jsonBytes, state); err != nil {\n\t\treturn nil, fmt.Errorf(\"Decoding state file failed: %v\", err)\n\t}\n\n\t// Check the version, this to ensure we don't read a future\n\t// version that we don't understand\n\tif state.Version > StateVersion {\n\t\treturn nil, fmt.Errorf(\"Terraform %s does not support state version %d, please update.\",\n\t\t\ttfversion.SemVer.String(), state.Version)\n\t}\n\n\t// Make sure the version is semantic\n\tif state.TFVersion != \"\" {\n\t\tif _, err := version.NewVersion(state.TFVersion); err != nil {\n\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\"State contains invalid version: %s\\n\\n\"+\n\t\t\t\t\t\"Terraform validates the version format prior to writing it. This\\n\"+\n\t\t\t\t\t\"means that this is invalid of the state becoming corrupted through\\n\"+\n\t\t\t\t\t\"some external means. Please manually modify the Terraform version\\n\"+\n\t\t\t\t\t\"field to be a proper semantic version.\",\n\t\t\t\tstate.TFVersion)\n\t\t}\n\t}\n\n\t// catch any unitialized fields in the state\n\tstate.init()\n\n\t// Sort it\n\tstate.sort()\n\n\treturn state, nil\n}\n\nfunc ReadStateV3(jsonBytes []byte) (*State, error) {\n\tstate := &State{}\n\tif err := json.Unmarshal(jsonBytes, state); err != nil {\n\t\treturn nil, fmt.Errorf(\"Decoding state file failed: %v\", err)\n\t}\n\n\t// Check the version, this to ensure we don't read a future\n\t// version that we don't understand\n\tif state.Version > StateVersion {\n\t\treturn nil, fmt.Errorf(\"Terraform %s does not support state version %d, please update.\",\n\t\t\ttfversion.SemVer.String(), state.Version)\n\t}\n\n\t// Make sure the version is semantic\n\tif state.TFVersion != \"\" {\n\t\tif _, err := version.NewVersion(state.TFVersion); err != nil {\n\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\"State contains invalid version: %s\\n\\n\"+\n\t\t\t\t\t\"Terraform validates the version format prior to writing it. This\\n\"+\n\t\t\t\t\t\"means that this is invalid of the state becoming corrupted through\\n\"+\n\t\t\t\t\t\"some external means. Please manually modify the Terraform version\\n\"+\n\t\t\t\t\t\"field to be a proper semantic version.\",\n\t\t\t\tstate.TFVersion)\n\t\t}\n\t}\n\n\t// catch any unitialized fields in the state\n\tstate.init()\n\n\t// Sort it\n\tstate.sort()\n\n\t// Now we write the state back out to detect any changes in normaliztion.\n\t// If our state is now written out differently, bump the serial number to\n\t// prevent conflicts.\n\tvar buf bytes.Buffer\n\terr := WriteState(state, &buf)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif !bytes.Equal(jsonBytes, buf.Bytes()) {\n\t\tlog.Println(\"[INFO] state modified during read or write. incrementing serial number\")\n\t\tstate.Serial++\n\t}\n\n\treturn state, nil\n}\n\n// WriteState writes a state somewhere in a binary format.\nfunc WriteState(d *State, dst io.Writer) error {\n\t// writing a nil state is a noop.\n\tif d == nil {\n\t\treturn nil\n\t}\n\n\t// make sure we have no uninitialized fields\n\td.init()\n\n\t// Make sure it is sorted\n\td.sort()\n\n\t// Ensure the version is set\n\td.Version = StateVersion\n\n\t// If the TFVersion is set, verify it. We used to just set the version\n\t// here, but this isn't safe since it changes the MD5 sum on some remote\n\t// state storage backends such as Atlas. We now leave it be if needed.\n\tif d.TFVersion != \"\" {\n\t\tif _, err := version.NewVersion(d.TFVersion); err != nil {\n\t\t\treturn fmt.Errorf(\n\t\t\t\t\"Error writing state, invalid version: %s\\n\\n\"+\n\t\t\t\t\t\"The Terraform version when writing the state must be a semantic\\n\"+\n\t\t\t\t\t\"version.\",\n\t\t\t\td.TFVersion)\n\t\t}\n\t}\n\n\t// Encode the data in a human-friendly way\n\tdata, err := json.MarshalIndent(d, \"\", \"    \")\n\tif err != nil {\n\t\treturn fmt.Errorf(\"Failed to encode state: %s\", err)\n\t}\n\n\t// We append a newline to the data because MarshalIndent doesn't\n\tdata = append(data, '\\n')\n\n\t// Write the data out to the dst\n\tif _, err := io.Copy(dst, bytes.NewReader(data)); err != nil {\n\t\treturn fmt.Errorf(\"Failed to write state: %v\", err)\n\t}\n\n\treturn nil\n}\n\n// resourceNameSort implements the sort.Interface to sort name parts lexically for\n// strings and numerically for integer indexes.\ntype resourceNameSort []string\n\nfunc (r resourceNameSort) Len() int      { return len(r) }\nfunc (r resourceNameSort) Swap(i, j int) { r[i], r[j] = r[j], r[i] }\n\nfunc (r resourceNameSort) Less(i, j int) bool {\n\tiParts := strings.Split(r[i], \".\")\n\tjParts := strings.Split(r[j], \".\")\n\n\tend := len(iParts)\n\tif len(jParts) < end {\n\t\tend = len(jParts)\n\t}\n\n\tfor idx := 0; idx < end; idx++ {\n\t\tif iParts[idx] == jParts[idx] {\n\t\t\tcontinue\n\t\t}\n\n\t\t// sort on the first non-matching part\n\t\tiInt, iIntErr := strconv.Atoi(iParts[idx])\n\t\tjInt, jIntErr := strconv.Atoi(jParts[idx])\n\n\t\tswitch {\n\t\tcase iIntErr == nil && jIntErr == nil:\n\t\t\t// sort numerically if both parts are integers\n\t\t\treturn iInt < jInt\n\t\tcase iIntErr == nil:\n\t\t\t// numbers sort before strings\n\t\t\treturn true\n\t\tcase jIntErr == nil:\n\t\t\treturn false\n\t\tdefault:\n\t\t\treturn iParts[idx] < jParts[idx]\n\t\t}\n\t}\n\n\treturn r[i] < r[j]\n}\n\n// moduleStateSort implements sort.Interface to sort module states\ntype moduleStateSort []*ModuleState\n\nfunc (s moduleStateSort) Len() int {\n\treturn len(s)\n}\n\nfunc (s moduleStateSort) Less(i, j int) bool {\n\ta := s[i]\n\tb := s[j]\n\n\t// If either is nil, then the nil one is \"less\" than\n\tif a == nil || b == nil {\n\t\treturn a == nil\n\t}\n\n\t// If the lengths are different, then the shorter one always wins\n\tif len(a.Path) != len(b.Path) {\n\t\treturn len(a.Path) < len(b.Path)\n\t}\n\n\t// Otherwise, compare lexically\n\treturn strings.Join(a.Path, \".\") < strings.Join(b.Path, \".\")\n}\n\nfunc (s moduleStateSort) Swap(i, j int) {\n\ts[i], s[j] = s[j], s[i]\n}\n\nconst stateValidateErrMultiModule = `\nMultiple modules with the same path: %s\n\nThis means that there are multiple entries in the \"modules\" field\nin your state file that point to the same module. This will cause Terraform\nto behave in unexpected and error prone ways and is invalid. Please back up\nand modify your state file manually to resolve this.\n`\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/state_filter.go",
    "content": "package terraform\n\nimport (\n\t\"fmt\"\n\t\"sort\"\n)\n\n// StateFilter is responsible for filtering and searching a state.\n//\n// This is a separate struct from State rather than a method on State\n// because StateFilter might create sidecar data structures to optimize\n// filtering on the state.\n//\n// If you change the State, the filter created is invalid and either\n// Reset should be called or a new one should be allocated. StateFilter\n// will not watch State for changes and do this for you. If you filter after\n// changing the State without calling Reset, the behavior is not defined.\ntype StateFilter struct {\n\tState *State\n}\n\n// Filter takes the addresses specified by fs and finds all the matches.\n// The values of fs are resource addressing syntax that can be parsed by\n// ParseResourceAddress.\nfunc (f *StateFilter) Filter(fs ...string) ([]*StateFilterResult, error) {\n\t// Parse all the addresses\n\tas := make([]*ResourceAddress, len(fs))\n\tfor i, v := range fs {\n\t\ta, err := ParseResourceAddress(v)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"Error parsing address '%s': %s\", v, err)\n\t\t}\n\n\t\tas[i] = a\n\t}\n\n\t// If we weren't given any filters, then we list all\n\tif len(fs) == 0 {\n\t\tas = append(as, &ResourceAddress{Index: -1})\n\t}\n\n\t// Filter each of the address. We keep track of this in a map to\n\t// strip duplicates.\n\tresultSet := make(map[string]*StateFilterResult)\n\tfor _, a := range as {\n\t\tfor _, r := range f.filterSingle(a) {\n\t\t\tresultSet[r.String()] = r\n\t\t}\n\t}\n\n\t// Make the result list\n\tresults := make([]*StateFilterResult, 0, len(resultSet))\n\tfor _, v := range resultSet {\n\t\tresults = append(results, v)\n\t}\n\n\t// Sort them and return\n\tsort.Sort(StateFilterResultSlice(results))\n\treturn results, nil\n}\n\nfunc (f *StateFilter) filterSingle(a *ResourceAddress) []*StateFilterResult {\n\t// The slice to keep track of results\n\tvar results []*StateFilterResult\n\n\t// Go through modules first.\n\tmodules := make([]*ModuleState, 0, len(f.State.Modules))\n\tfor _, m := range f.State.Modules {\n\t\tif f.relevant(a, m) {\n\t\t\tmodules = append(modules, m)\n\n\t\t\t// Only add the module to the results if we haven't specified a type.\n\t\t\t// We also ignore the root module.\n\t\t\tif a.Type == \"\" && len(m.Path) > 1 {\n\t\t\t\tresults = append(results, &StateFilterResult{\n\t\t\t\t\tPath:    m.Path[1:],\n\t\t\t\t\tAddress: (&ResourceAddress{Path: m.Path[1:]}).String(),\n\t\t\t\t\tValue:   m,\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t}\n\n\t// With the modules set, go through all the resources within\n\t// the modules to find relevant resources.\n\tfor _, m := range modules {\n\t\tfor n, r := range m.Resources {\n\t\t\t// The name in the state contains valuable information. Parse.\n\t\t\tkey, err := ParseResourceStateKey(n)\n\t\t\tif err != nil {\n\t\t\t\t// If we get an error parsing, then just ignore it\n\t\t\t\t// out of the state.\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// Older states and test fixtures often don't contain the\n\t\t\t// type directly on the ResourceState. We add this so StateFilter\n\t\t\t// is a bit more robust.\n\t\t\tif r.Type == \"\" {\n\t\t\t\tr.Type = key.Type\n\t\t\t}\n\n\t\t\tif f.relevant(a, r) {\n\t\t\t\tif a.Name != \"\" && a.Name != key.Name {\n\t\t\t\t\t// Name doesn't match\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tif a.Index >= 0 && key.Index != a.Index {\n\t\t\t\t\t// Index doesn't match\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tif a.Name != \"\" && a.Name != key.Name {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\t// Build the address for this resource\n\t\t\t\taddr := &ResourceAddress{\n\t\t\t\t\tPath:  m.Path[1:],\n\t\t\t\t\tName:  key.Name,\n\t\t\t\t\tType:  key.Type,\n\t\t\t\t\tIndex: key.Index,\n\t\t\t\t}\n\n\t\t\t\t// Add the resource level result\n\t\t\t\tresourceResult := &StateFilterResult{\n\t\t\t\t\tPath:    addr.Path,\n\t\t\t\t\tAddress: addr.String(),\n\t\t\t\t\tValue:   r,\n\t\t\t\t}\n\t\t\t\tif !a.InstanceTypeSet {\n\t\t\t\t\tresults = append(results, resourceResult)\n\t\t\t\t}\n\n\t\t\t\t// Add the instances\n\t\t\t\tif r.Primary != nil {\n\t\t\t\t\taddr.InstanceType = TypePrimary\n\t\t\t\t\taddr.InstanceTypeSet = false\n\t\t\t\t\tresults = append(results, &StateFilterResult{\n\t\t\t\t\t\tPath:    addr.Path,\n\t\t\t\t\t\tAddress: addr.String(),\n\t\t\t\t\t\tParent:  resourceResult,\n\t\t\t\t\t\tValue:   r.Primary,\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tfor _, instance := range r.Deposed {\n\t\t\t\t\tif f.relevant(a, instance) {\n\t\t\t\t\t\taddr.InstanceType = TypeDeposed\n\t\t\t\t\t\taddr.InstanceTypeSet = true\n\t\t\t\t\t\tresults = append(results, &StateFilterResult{\n\t\t\t\t\t\t\tPath:    addr.Path,\n\t\t\t\t\t\t\tAddress: addr.String(),\n\t\t\t\t\t\t\tParent:  resourceResult,\n\t\t\t\t\t\t\tValue:   instance,\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn results\n}\n\n// relevant checks for relevance of this address against the given value.\nfunc (f *StateFilter) relevant(addr *ResourceAddress, raw interface{}) bool {\n\tswitch v := raw.(type) {\n\tcase *ModuleState:\n\t\tpath := v.Path[1:]\n\n\t\tif len(addr.Path) > len(path) {\n\t\t\t// Longer path in address means there is no way we match.\n\t\t\treturn false\n\t\t}\n\n\t\t// Check for a prefix match\n\t\tfor i, p := range addr.Path {\n\t\t\tif path[i] != p {\n\t\t\t\t// Any mismatches don't match.\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\n\t\treturn true\n\tcase *ResourceState:\n\t\tif addr.Type == \"\" {\n\t\t\t// If we have no resource type, then we're interested in all!\n\t\t\treturn true\n\t\t}\n\n\t\t// If the type doesn't match we fail immediately\n\t\tif v.Type != addr.Type {\n\t\t\treturn false\n\t\t}\n\n\t\treturn true\n\tdefault:\n\t\t// If we don't know about it, let's just say no\n\t\treturn false\n\t}\n}\n\n// StateFilterResult is a single result from a filter operation. Filter\n// can match multiple things within a state (module, resource, instance, etc.)\n// and this unifies that.\ntype StateFilterResult struct {\n\t// Module path of the result\n\tPath []string\n\n\t// Address is the address that can be used to reference this exact result.\n\tAddress string\n\n\t// Parent, if non-nil, is a parent of this result. For instances, the\n\t// parent would be a resource. For resources, the parent would be\n\t// a module. For modules, this is currently nil.\n\tParent *StateFilterResult\n\n\t// Value is the actual value. This must be type switched on. It can be\n\t// any data structures that `State` can hold: `ModuleState`,\n\t// `ResourceState`, `InstanceState`.\n\tValue interface{}\n}\n\nfunc (r *StateFilterResult) String() string {\n\treturn fmt.Sprintf(\"%T: %s\", r.Value, r.Address)\n}\n\nfunc (r *StateFilterResult) sortedType() int {\n\tswitch r.Value.(type) {\n\tcase *ModuleState:\n\t\treturn 0\n\tcase *ResourceState:\n\t\treturn 1\n\tcase *InstanceState:\n\t\treturn 2\n\tdefault:\n\t\treturn 50\n\t}\n}\n\n// StateFilterResultSlice is a slice of results that implements\n// sort.Interface. The sorting goal is what is most appealing to\n// human output.\ntype StateFilterResultSlice []*StateFilterResult\n\nfunc (s StateFilterResultSlice) Len() int      { return len(s) }\nfunc (s StateFilterResultSlice) Swap(i, j int) { s[i], s[j] = s[j], s[i] }\nfunc (s StateFilterResultSlice) Less(i, j int) bool {\n\ta, b := s[i], s[j]\n\n\t// if these address contain an index, we want to sort by index rather than name\n\taddrA, errA := ParseResourceAddress(a.Address)\n\taddrB, errB := ParseResourceAddress(b.Address)\n\tif errA == nil && errB == nil && addrA.Name == addrB.Name && addrA.Index != addrB.Index {\n\t\treturn addrA.Index < addrB.Index\n\t}\n\n\t// If the addresses are different it is just lexographic sorting\n\tif a.Address != b.Address {\n\t\treturn a.Address < b.Address\n\t}\n\n\t// Addresses are the same, which means it matters on the type\n\treturn a.sortedType() < b.sortedType()\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/state_upgrade_v1_to_v2.go",
    "content": "package terraform\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/mitchellh/copystructure\"\n)\n\n// upgradeStateV1ToV2 is used to upgrade a V1 state representation\n// into a V2 state representation\nfunc upgradeStateV1ToV2(old *stateV1) (*State, error) {\n\tif old == nil {\n\t\treturn nil, nil\n\t}\n\n\tremote, err := old.Remote.upgradeToV2()\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"Error upgrading State V1: %v\", err)\n\t}\n\n\tmodules := make([]*ModuleState, len(old.Modules))\n\tfor i, module := range old.Modules {\n\t\tupgraded, err := module.upgradeToV2()\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"Error upgrading State V1: %v\", err)\n\t\t}\n\t\tmodules[i] = upgraded\n\t}\n\tif len(modules) == 0 {\n\t\tmodules = nil\n\t}\n\n\tnewState := &State{\n\t\tVersion: 2,\n\t\tSerial:  old.Serial,\n\t\tRemote:  remote,\n\t\tModules: modules,\n\t}\n\n\tnewState.sort()\n\tnewState.init()\n\n\treturn newState, nil\n}\n\nfunc (old *remoteStateV1) upgradeToV2() (*RemoteState, error) {\n\tif old == nil {\n\t\treturn nil, nil\n\t}\n\n\tconfig, err := copystructure.Copy(old.Config)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"Error upgrading RemoteState V1: %v\", err)\n\t}\n\n\treturn &RemoteState{\n\t\tType:   old.Type,\n\t\tConfig: config.(map[string]string),\n\t}, nil\n}\n\nfunc (old *moduleStateV1) upgradeToV2() (*ModuleState, error) {\n\tif old == nil {\n\t\treturn nil, nil\n\t}\n\n\tpathRaw, err := copystructure.Copy(old.Path)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"Error upgrading ModuleState V1: %v\", err)\n\t}\n\tpath, ok := pathRaw.([]string)\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"Error upgrading ModuleState V1: path is not a list of strings\")\n\t}\n\tif len(path) == 0 {\n\t\t// We found some V1 states with a nil path. Assume root and catch\n\t\t// duplicate path errors later (as part of Validate).\n\t\tpath = rootModulePath\n\t}\n\n\t// Outputs needs upgrading to use the new structure\n\toutputs := make(map[string]*OutputState)\n\tfor key, output := range old.Outputs {\n\t\toutputs[key] = &OutputState{\n\t\t\tType:      \"string\",\n\t\t\tValue:     output,\n\t\t\tSensitive: false,\n\t\t}\n\t}\n\n\tresources := make(map[string]*ResourceState)\n\tfor key, oldResource := range old.Resources {\n\t\tupgraded, err := oldResource.upgradeToV2()\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"Error upgrading ModuleState V1: %v\", err)\n\t\t}\n\t\tresources[key] = upgraded\n\t}\n\n\tdependencies, err := copystructure.Copy(old.Dependencies)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"Error upgrading ModuleState V1: %v\", err)\n\t}\n\n\treturn &ModuleState{\n\t\tPath:         path,\n\t\tOutputs:      outputs,\n\t\tResources:    resources,\n\t\tDependencies: dependencies.([]string),\n\t}, nil\n}\n\nfunc (old *resourceStateV1) upgradeToV2() (*ResourceState, error) {\n\tif old == nil {\n\t\treturn nil, nil\n\t}\n\n\tdependencies, err := copystructure.Copy(old.Dependencies)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"Error upgrading ResourceState V1: %v\", err)\n\t}\n\n\tprimary, err := old.Primary.upgradeToV2()\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"Error upgrading ResourceState V1: %v\", err)\n\t}\n\n\tdeposed := make([]*InstanceState, len(old.Deposed))\n\tfor i, v := range old.Deposed {\n\t\tupgraded, err := v.upgradeToV2()\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"Error upgrading ResourceState V1: %v\", err)\n\t\t}\n\t\tdeposed[i] = upgraded\n\t}\n\tif len(deposed) == 0 {\n\t\tdeposed = nil\n\t}\n\n\treturn &ResourceState{\n\t\tType:         old.Type,\n\t\tDependencies: dependencies.([]string),\n\t\tPrimary:      primary,\n\t\tDeposed:      deposed,\n\t\tProvider:     old.Provider,\n\t}, nil\n}\n\nfunc (old *instanceStateV1) upgradeToV2() (*InstanceState, error) {\n\tif old == nil {\n\t\treturn nil, nil\n\t}\n\n\tattributes, err := copystructure.Copy(old.Attributes)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"Error upgrading InstanceState V1: %v\", err)\n\t}\n\tephemeral, err := old.Ephemeral.upgradeToV2()\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"Error upgrading InstanceState V1: %v\", err)\n\t}\n\n\tmeta, err := copystructure.Copy(old.Meta)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"Error upgrading InstanceState V1: %v\", err)\n\t}\n\n\tnewMeta := make(map[string]interface{})\n\tfor k, v := range meta.(map[string]string) {\n\t\tnewMeta[k] = v\n\t}\n\n\treturn &InstanceState{\n\t\tID:         old.ID,\n\t\tAttributes: attributes.(map[string]string),\n\t\tEphemeral:  *ephemeral,\n\t\tMeta:       newMeta,\n\t}, nil\n}\n\nfunc (old *ephemeralStateV1) upgradeToV2() (*EphemeralState, error) {\n\tconnInfo, err := copystructure.Copy(old.ConnInfo)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"Error upgrading EphemeralState V1: %v\", err)\n\t}\n\treturn &EphemeralState{\n\t\tConnInfo: connInfo.(map[string]string),\n\t}, nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/state_upgrade_v2_to_v3.go",
    "content": "package terraform\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"regexp\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// The upgrade process from V2 to V3 state does not affect the structure,\n// so we do not need to redeclare all of the structs involved - we just\n// take a deep copy of the old structure and assert the version number is\n// as we expect.\nfunc upgradeStateV2ToV3(old *State) (*State, error) {\n\tnew := old.DeepCopy()\n\n\t// Ensure the copied version is v2 before attempting to upgrade\n\tif new.Version != 2 {\n\t\treturn nil, fmt.Errorf(\"Cannot apply v2->v3 state upgrade to \" +\n\t\t\t\"a state which is not version 2.\")\n\t}\n\n\t// Set the new version number\n\tnew.Version = 3\n\n\t// Change the counts for things which look like maps to use the %\n\t// syntax. Remove counts for empty collections - they will be added\n\t// back in later.\n\tfor _, module := range new.Modules {\n\t\tfor _, resource := range module.Resources {\n\t\t\t// Upgrade Primary\n\t\t\tif resource.Primary != nil {\n\t\t\t\tupgradeAttributesV2ToV3(resource.Primary)\n\t\t\t}\n\n\t\t\t// Upgrade Deposed\n\t\t\tif resource.Deposed != nil {\n\t\t\t\tfor _, deposed := range resource.Deposed {\n\t\t\t\t\tupgradeAttributesV2ToV3(deposed)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn new, nil\n}\n\nfunc upgradeAttributesV2ToV3(instanceState *InstanceState) error {\n\tcollectionKeyRegexp := regexp.MustCompile(`^(.*\\.)#$`)\n\tcollectionSubkeyRegexp := regexp.MustCompile(`^([^\\.]+)\\..*`)\n\n\t// Identify the key prefix of anything which is a collection\n\tvar collectionKeyPrefixes []string\n\tfor key := range instanceState.Attributes {\n\t\tif submatches := collectionKeyRegexp.FindAllStringSubmatch(key, -1); len(submatches) > 0 {\n\t\t\tcollectionKeyPrefixes = append(collectionKeyPrefixes, submatches[0][1])\n\t\t}\n\t}\n\tsort.Strings(collectionKeyPrefixes)\n\n\tlog.Printf(\"[STATE UPGRADE] Detected the following collections in state: %v\", collectionKeyPrefixes)\n\n\t// This could be rolled into fewer loops, but it is somewhat clearer this way, and will not\n\t// run very often.\n\tfor _, prefix := range collectionKeyPrefixes {\n\t\t// First get the actual keys that belong to this prefix\n\t\tvar potentialKeysMatching []string\n\t\tfor key := range instanceState.Attributes {\n\t\t\tif strings.HasPrefix(key, prefix) {\n\t\t\t\tpotentialKeysMatching = append(potentialKeysMatching, strings.TrimPrefix(key, prefix))\n\t\t\t}\n\t\t}\n\t\tsort.Strings(potentialKeysMatching)\n\n\t\tvar actualKeysMatching []string\n\t\tfor _, key := range potentialKeysMatching {\n\t\t\tif submatches := collectionSubkeyRegexp.FindAllStringSubmatch(key, -1); len(submatches) > 0 {\n\t\t\t\tactualKeysMatching = append(actualKeysMatching, submatches[0][1])\n\t\t\t} else {\n\t\t\t\tif key != \"#\" {\n\t\t\t\t\tactualKeysMatching = append(actualKeysMatching, key)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tactualKeysMatching = uniqueSortedStrings(actualKeysMatching)\n\n\t\t// Now inspect the keys in order to determine whether this is most likely to be\n\t\t// a map, list or set. There is room for error here, so we log in each case. If\n\t\t// there is no method of telling, we remove the key from the InstanceState in\n\t\t// order that it will be recreated. Again, this could be rolled into fewer loops\n\t\t// but we prefer clarity.\n\n\t\toldCountKey := fmt.Sprintf(\"%s#\", prefix)\n\n\t\t// First, detect \"obvious\" maps - which have non-numeric keys (mostly).\n\t\thasNonNumericKeys := false\n\t\tfor _, key := range actualKeysMatching {\n\t\t\tif _, err := strconv.Atoi(key); err != nil {\n\t\t\t\thasNonNumericKeys = true\n\t\t\t}\n\t\t}\n\t\tif hasNonNumericKeys {\n\t\t\tnewCountKey := fmt.Sprintf(\"%s%%\", prefix)\n\n\t\t\tinstanceState.Attributes[newCountKey] = instanceState.Attributes[oldCountKey]\n\t\t\tdelete(instanceState.Attributes, oldCountKey)\n\t\t\tlog.Printf(\"[STATE UPGRADE] Detected %s as a map. Replaced count = %s\",\n\t\t\t\tstrings.TrimSuffix(prefix, \".\"), instanceState.Attributes[newCountKey])\n\t\t}\n\n\t\t// Now detect empty collections and remove them from state.\n\t\tif len(actualKeysMatching) == 0 {\n\t\t\tdelete(instanceState.Attributes, oldCountKey)\n\t\t\tlog.Printf(\"[STATE UPGRADE] Detected %s as an empty collection. Removed from state.\",\n\t\t\t\tstrings.TrimSuffix(prefix, \".\"))\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// uniqueSortedStrings removes duplicates from a slice of strings and returns\n// a sorted slice of the unique strings.\nfunc uniqueSortedStrings(input []string) []string {\n\tuniquemap := make(map[string]struct{})\n\tfor _, str := range input {\n\t\tuniquemap[str] = struct{}{}\n\t}\n\n\toutput := make([]string, len(uniquemap))\n\n\ti := 0\n\tfor key := range uniquemap {\n\t\toutput[i] = key\n\t\ti = i + 1\n\t}\n\n\tsort.Strings(output)\n\treturn output\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/state_v1.go",
    "content": "package terraform\n\n// stateV1 keeps track of a snapshot state-of-the-world that Terraform\n// can use to keep track of what real world resources it is actually\n// managing.\n//\n// stateV1 is _only used for the purposes of backwards compatibility\n// and is no longer used in Terraform.\n//\n// For the upgrade process, see state_upgrade_v1_to_v2.go\ntype stateV1 struct {\n\t// Version is the protocol version. \"1\" for a StateV1.\n\tVersion int `json:\"version\"`\n\n\t// Serial is incremented on any operation that modifies\n\t// the State file. It is used to detect potentially conflicting\n\t// updates.\n\tSerial int64 `json:\"serial\"`\n\n\t// Remote is used to track the metadata required to\n\t// pull and push state files from a remote storage endpoint.\n\tRemote *remoteStateV1 `json:\"remote,omitempty\"`\n\n\t// Modules contains all the modules in a breadth-first order\n\tModules []*moduleStateV1 `json:\"modules\"`\n}\n\ntype remoteStateV1 struct {\n\t// Type controls the client we use for the remote state\n\tType string `json:\"type\"`\n\n\t// Config is used to store arbitrary configuration that\n\t// is type specific\n\tConfig map[string]string `json:\"config\"`\n}\n\ntype moduleStateV1 struct {\n\t// Path is the import path from the root module. Modules imports are\n\t// always disjoint, so the path represents amodule tree\n\tPath []string `json:\"path\"`\n\n\t// Outputs declared by the module and maintained for each module\n\t// even though only the root module technically needs to be kept.\n\t// This allows operators to inspect values at the boundaries.\n\tOutputs map[string]string `json:\"outputs\"`\n\n\t// Resources is a mapping of the logically named resource to\n\t// the state of the resource. Each resource may actually have\n\t// N instances underneath, although a user only needs to think\n\t// about the 1:1 case.\n\tResources map[string]*resourceStateV1 `json:\"resources\"`\n\n\t// Dependencies are a list of things that this module relies on\n\t// existing to remain intact. For example: an module may depend\n\t// on a VPC ID given by an aws_vpc resource.\n\t//\n\t// Terraform uses this information to build valid destruction\n\t// orders and to warn the user if they're destroying a module that\n\t// another resource depends on.\n\t//\n\t// Things can be put into this list that may not be managed by\n\t// Terraform. If Terraform doesn't find a matching ID in the\n\t// overall state, then it assumes it isn't managed and doesn't\n\t// worry about it.\n\tDependencies []string `json:\"depends_on,omitempty\"`\n}\n\ntype resourceStateV1 struct {\n\t// This is filled in and managed by Terraform, and is the resource\n\t// type itself such as \"mycloud_instance\". If a resource provider sets\n\t// this value, it won't be persisted.\n\tType string `json:\"type\"`\n\n\t// Dependencies are a list of things that this resource relies on\n\t// existing to remain intact. For example: an AWS instance might\n\t// depend on a subnet (which itself might depend on a VPC, and so\n\t// on).\n\t//\n\t// Terraform uses this information to build valid destruction\n\t// orders and to warn the user if they're destroying a resource that\n\t// another resource depends on.\n\t//\n\t// Things can be put into this list that may not be managed by\n\t// Terraform. If Terraform doesn't find a matching ID in the\n\t// overall state, then it assumes it isn't managed and doesn't\n\t// worry about it.\n\tDependencies []string `json:\"depends_on,omitempty\"`\n\n\t// Primary is the current active instance for this resource.\n\t// It can be replaced but only after a successful creation.\n\t// This is the instances on which providers will act.\n\tPrimary *instanceStateV1 `json:\"primary\"`\n\n\t// Tainted is used to track any underlying instances that\n\t// have been created but are in a bad or unknown state and\n\t// need to be cleaned up subsequently.  In the\n\t// standard case, there is only at most a single instance.\n\t// However, in pathological cases, it is possible for the number\n\t// of instances to accumulate.\n\tTainted []*instanceStateV1 `json:\"tainted,omitempty\"`\n\n\t// Deposed is used in the mechanics of CreateBeforeDestroy: the existing\n\t// Primary is Deposed to get it out of the way for the replacement Primary to\n\t// be created by Apply. If the replacement Primary creates successfully, the\n\t// Deposed instance is cleaned up. If there were problems creating the\n\t// replacement, the instance remains in the Deposed list so it can be\n\t// destroyed in a future run. Functionally, Deposed instances are very\n\t// similar to Tainted instances in that Terraform is only tracking them in\n\t// order to remember to destroy them.\n\tDeposed []*instanceStateV1 `json:\"deposed,omitempty\"`\n\n\t// Provider is used when a resource is connected to a provider with an alias.\n\t// If this string is empty, the resource is connected to the default provider,\n\t// e.g. \"aws_instance\" goes with the \"aws\" provider.\n\t// If the resource block contained a \"provider\" key, that value will be set here.\n\tProvider string `json:\"provider,omitempty\"`\n}\n\ntype instanceStateV1 struct {\n\t// A unique ID for this resource. This is opaque to Terraform\n\t// and is only meant as a lookup mechanism for the providers.\n\tID string `json:\"id\"`\n\n\t// Attributes are basic information about the resource. Any keys here\n\t// are accessible in variable format within Terraform configurations:\n\t// ${resourcetype.name.attribute}.\n\tAttributes map[string]string `json:\"attributes,omitempty\"`\n\n\t// Ephemeral is used to store any state associated with this instance\n\t// that is necessary for the Terraform run to complete, but is not\n\t// persisted to a state file.\n\tEphemeral ephemeralStateV1 `json:\"-\"`\n\n\t// Meta is a simple K/V map that is persisted to the State but otherwise\n\t// ignored by Terraform core. It's meant to be used for accounting by\n\t// external client code.\n\tMeta map[string]string `json:\"meta,omitempty\"`\n}\n\ntype ephemeralStateV1 struct {\n\t// ConnInfo is used for the providers to export information which is\n\t// used to connect to the resource for provisioning. For example,\n\t// this could contain SSH or WinRM credentials.\n\tConnInfo map[string]string `json:\"-\"`\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/testing.go",
    "content": "package terraform\n\nimport (\n\t\"os\"\n\t\"testing\"\n)\n\n// TestStateFile writes the given state to the path.\nfunc TestStateFile(t *testing.T, path string, state *State) {\n\tf, err := os.Create(path)\n\tif err != nil {\n\t\tt.Fatalf(\"err: %s\", err)\n\t}\n\tdefer f.Close()\n\n\tif err := WriteState(state, f); err != nil {\n\t\tt.Fatalf(\"err: %s\", err)\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/transform.go",
    "content": "package terraform\n\nimport (\n\t\"log\"\n\n\t\"github.com/hashicorp/terraform/dag\"\n)\n\n// GraphTransformer is the interface that transformers implement. This\n// interface is only for transforms that need entire graph visibility.\ntype GraphTransformer interface {\n\tTransform(*Graph) error\n}\n\n// GraphVertexTransformer is an interface that transforms a single\n// Vertex within with graph. This is a specialization of GraphTransformer\n// that makes it easy to do vertex replacement.\n//\n// The GraphTransformer that runs through the GraphVertexTransformers is\n// VertexTransformer.\ntype GraphVertexTransformer interface {\n\tTransform(dag.Vertex) (dag.Vertex, error)\n}\n\n// GraphTransformIf is a helper function that conditionally returns a\n// GraphTransformer given. This is useful for calling inline a sequence\n// of transforms without having to split it up into multiple append() calls.\nfunc GraphTransformIf(f func() bool, then GraphTransformer) GraphTransformer {\n\tif f() {\n\t\treturn then\n\t}\n\n\treturn nil\n}\n\ntype graphTransformerMulti struct {\n\tTransforms []GraphTransformer\n}\n\nfunc (t *graphTransformerMulti) Transform(g *Graph) error {\n\tvar lastStepStr string\n\tfor _, t := range t.Transforms {\n\t\tlog.Printf(\"[TRACE] (graphTransformerMulti) Executing graph transform %T\", t)\n\t\tif err := t.Transform(g); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif thisStepStr := g.StringWithNodeTypes(); thisStepStr != lastStepStr {\n\t\t\tlog.Printf(\"[TRACE] (graphTransformerMulti) Completed graph transform %T with new graph:\\n%s------\", t, thisStepStr)\n\t\t\tlastStepStr = thisStepStr\n\t\t} else {\n\t\t\tlog.Printf(\"[TRACE] (graphTransformerMulti) Completed graph transform %T (no changes)\", t)\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// GraphTransformMulti combines multiple graph transformers into a single\n// GraphTransformer that runs all the individual graph transformers.\nfunc GraphTransformMulti(ts ...GraphTransformer) GraphTransformer {\n\treturn &graphTransformerMulti{Transforms: ts}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/transform_attach_config_provider.go",
    "content": "package terraform\n\nimport (\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/configs\"\n)\n\n// GraphNodeAttachProvider is an interface that must be implemented by nodes\n// that want provider configurations attached.\ntype GraphNodeAttachProvider interface {\n\t// Must be implemented to determine the path for the configuration\n\tGraphNodeSubPath\n\n\t// ProviderName with no module prefix. Example: \"aws\".\n\tProviderAddr() addrs.AbsProviderConfig\n\n\t// Sets the configuration\n\tAttachProvider(*configs.Provider)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/transform_attach_config_resource.go",
    "content": "package terraform\n\nimport (\n\t\"log\"\n\n\t\"github.com/hashicorp/terraform/configs\"\n\t\"github.com/hashicorp/terraform/dag\"\n)\n\n// GraphNodeAttachResourceConfig is an interface that must be implemented by nodes\n// that want resource configurations attached.\ntype GraphNodeAttachResourceConfig interface {\n\tGraphNodeResource\n\n\t// Sets the configuration\n\tAttachResourceConfig(*configs.Resource)\n}\n\n// AttachResourceConfigTransformer goes through the graph and attaches\n// resource configuration structures to nodes that implement\n// GraphNodeAttachManagedResourceConfig or GraphNodeAttachDataResourceConfig.\n//\n// The attached configuration structures are directly from the configuration.\n// If they're going to be modified, a copy should be made.\ntype AttachResourceConfigTransformer struct {\n\tConfig *configs.Config // Config is the root node in the config tree\n}\n\nfunc (t *AttachResourceConfigTransformer) Transform(g *Graph) error {\n\n\t// Go through and find GraphNodeAttachResource\n\tfor _, v := range g.Vertices() {\n\t\t// Only care about GraphNodeAttachResource implementations\n\t\tarn, ok := v.(GraphNodeAttachResourceConfig)\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Determine what we're looking for\n\t\taddr := arn.ResourceAddr()\n\n\t\t// Get the configuration.\n\t\tconfig := t.Config.DescendentForInstance(addr.Module)\n\t\tif config == nil {\n\t\t\tlog.Printf(\"[TRACE] AttachResourceConfigTransformer: %q (%T) has no configuration available\", dag.VertexName(v), v)\n\t\t\tcontinue\n\t\t}\n\n\t\tfor _, r := range config.Module.ManagedResources {\n\t\t\trAddr := r.Addr()\n\n\t\t\tif rAddr != addr.Resource {\n\t\t\t\t// Not the same resource\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tlog.Printf(\"[TRACE] AttachResourceConfigTransformer: attaching to %q (%T) config from %s\", dag.VertexName(v), v, r.DeclRange)\n\t\t\tarn.AttachResourceConfig(r)\n\t\t}\n\t\tfor _, r := range config.Module.DataResources {\n\t\t\trAddr := r.Addr()\n\n\t\t\tif rAddr != addr.Resource {\n\t\t\t\t// Not the same resource\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tlog.Printf(\"[TRACE] AttachResourceConfigTransformer: attaching to %q (%T) config from %#v\", dag.VertexName(v), v, r.DeclRange)\n\t\t\tarn.AttachResourceConfig(r)\n\t\t}\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/transform_attach_schema.go",
    "content": "package terraform\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\n\t\"github.com/hashicorp/terraform/configs/configschema\"\n\t\"github.com/hashicorp/terraform/dag\"\n)\n\n// GraphNodeAttachResourceSchema is an interface implemented by node types\n// that need a resource schema attached.\ntype GraphNodeAttachResourceSchema interface {\n\tGraphNodeResource\n\tGraphNodeProviderConsumer\n\n\tAttachResourceSchema(schema *configschema.Block, version uint64)\n}\n\n// GraphNodeAttachProviderConfigSchema is an interface implemented by node types\n// that need a provider configuration schema attached.\ntype GraphNodeAttachProviderConfigSchema interface {\n\tGraphNodeProvider\n\n\tAttachProviderConfigSchema(*configschema.Block)\n}\n\n// GraphNodeAttachProvisionerSchema is an interface implemented by node types\n// that need one or more provisioner schemas attached.\ntype GraphNodeAttachProvisionerSchema interface {\n\tProvisionedBy() []string\n\n\t// SetProvisionerSchema is called during transform for each provisioner\n\t// type returned from ProvisionedBy, providing the configuration schema\n\t// for each provisioner in turn. The implementer should save these for\n\t// later use in evaluating provisioner configuration blocks.\n\tAttachProvisionerSchema(name string, schema *configschema.Block)\n}\n\n// AttachSchemaTransformer finds nodes that implement\n// GraphNodeAttachResourceSchema, GraphNodeAttachProviderConfigSchema, or\n// GraphNodeAttachProvisionerSchema, looks up the needed schemas for each\n// and then passes them to a method implemented by the node.\ntype AttachSchemaTransformer struct {\n\tSchemas *Schemas\n}\n\nfunc (t *AttachSchemaTransformer) Transform(g *Graph) error {\n\tif t.Schemas == nil {\n\t\t// Should never happen with a reasonable caller, but we'll return a\n\t\t// proper error here anyway so that we'll fail gracefully.\n\t\treturn fmt.Errorf(\"AttachSchemaTransformer used with nil Schemas\")\n\t}\n\n\tfor _, v := range g.Vertices() {\n\n\t\tif tv, ok := v.(GraphNodeAttachResourceSchema); ok {\n\t\t\taddr := tv.ResourceAddr()\n\t\t\tmode := addr.Resource.Mode\n\t\t\ttypeName := addr.Resource.Type\n\t\t\tproviderAddr, _ := tv.ProvidedBy()\n\t\t\tproviderType := providerAddr.ProviderConfig.Type\n\n\t\t\tschema, version := t.Schemas.ResourceTypeConfig(providerType, mode, typeName)\n\t\t\tif schema == nil {\n\t\t\t\tlog.Printf(\"[ERROR] AttachSchemaTransformer: No resource schema available for %s\", addr)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tlog.Printf(\"[TRACE] AttachSchemaTransformer: attaching resource schema to %s\", dag.VertexName(v))\n\t\t\ttv.AttachResourceSchema(schema, version)\n\t\t}\n\n\t\tif tv, ok := v.(GraphNodeAttachProviderConfigSchema); ok {\n\t\t\tproviderAddr := tv.ProviderAddr()\n\t\t\tschema := t.Schemas.ProviderConfig(providerAddr.ProviderConfig.Type)\n\t\t\tif schema == nil {\n\t\t\t\tlog.Printf(\"[ERROR] AttachSchemaTransformer: No provider config schema available for %s\", providerAddr)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tlog.Printf(\"[TRACE] AttachSchemaTransformer: attaching provider config schema to %s\", dag.VertexName(v))\n\t\t\ttv.AttachProviderConfigSchema(schema)\n\t\t}\n\n\t\tif tv, ok := v.(GraphNodeAttachProvisionerSchema); ok {\n\t\t\tnames := tv.ProvisionedBy()\n\t\t\tfor _, name := range names {\n\t\t\t\tschema := t.Schemas.ProvisionerConfig(name)\n\t\t\t\tif schema == nil {\n\t\t\t\t\tlog.Printf(\"[ERROR] AttachSchemaTransformer: No schema available for provisioner %q on %q\", name, dag.VertexName(v))\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tlog.Printf(\"[TRACE] AttachSchemaTransformer: attaching provisioner %q config schema to %s\", name, dag.VertexName(v))\n\t\t\t\ttv.AttachProvisionerSchema(name, schema)\n\t\t\t}\n\t\t}\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/transform_attach_state.go",
    "content": "package terraform\n\nimport (\n\t\"log\"\n\n\t\"github.com/hashicorp/terraform/dag\"\n\t\"github.com/hashicorp/terraform/states\"\n)\n\n// GraphNodeAttachResourceState is an interface that can be implemented\n// to request that a ResourceState is attached to the node.\n//\n// Due to a historical naming inconsistency, the type ResourceState actually\n// represents the state for a particular _instance_, while InstanceState\n// represents the values for that instance during a particular phase\n// (e.g. primary vs. deposed). Consequently, GraphNodeAttachResourceState\n// is supported only for nodes that represent resource instances, even though\n// the name might suggest it is for containing resources.\ntype GraphNodeAttachResourceState interface {\n\tGraphNodeResourceInstance\n\n\t// Sets the state\n\tAttachResourceState(*states.Resource)\n}\n\n// AttachStateTransformer goes through the graph and attaches\n// state to nodes that implement the interfaces above.\ntype AttachStateTransformer struct {\n\tState *states.State // State is the root state\n}\n\nfunc (t *AttachStateTransformer) Transform(g *Graph) error {\n\t// If no state, then nothing to do\n\tif t.State == nil {\n\t\tlog.Printf(\"[DEBUG] Not attaching any node states: overall state is nil\")\n\t\treturn nil\n\t}\n\n\tfor _, v := range g.Vertices() {\n\t\t// Nodes implement this interface to request state attachment.\n\t\tan, ok := v.(GraphNodeAttachResourceState)\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\t\taddr := an.ResourceInstanceAddr()\n\n\t\trs := t.State.Resource(addr.ContainingResource())\n\t\tif rs == nil {\n\t\t\tlog.Printf(\"[DEBUG] Resource state not found for node %q, instance %s\", dag.VertexName(v), addr)\n\t\t\tcontinue\n\t\t}\n\n\t\tis := rs.Instance(addr.Resource.Key)\n\t\tif is == nil {\n\t\t\t// We don't actually need this here, since we'll attach the whole\n\t\t\t// resource state, but we still check because it'd be weird\n\t\t\t// for the specific instance we're attaching to not to exist.\n\t\t\tlog.Printf(\"[DEBUG] Resource instance state not found for node %q, instance %s\", dag.VertexName(v), addr)\n\t\t\tcontinue\n\t\t}\n\n\t\t// make sure to attach a copy of the state, so instances can modify the\n\t\t// same ResourceState.\n\t\tan.AttachResourceState(rs.DeepCopy())\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/transform_config.go",
    "content": "package terraform\n\nimport (\n\t\"log\"\n\t\"sync\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/configs\"\n\t\"github.com/hashicorp/terraform/dag\"\n)\n\n// ConfigTransformer is a GraphTransformer that adds all the resources\n// from the configuration to the graph.\n//\n// The module used to configure this transformer must be the root module.\n//\n// Only resources are added to the graph. Variables, outputs, and\n// providers must be added via other transforms.\n//\n// Unlike ConfigTransformerOld, this transformer creates a graph with\n// all resources including module resources, rather than creating module\n// nodes that are then \"flattened\".\ntype ConfigTransformer struct {\n\tConcrete ConcreteResourceNodeFunc\n\n\t// Module is the module to add resources from.\n\tConfig *configs.Config\n\n\t// Unique will only add resources that aren't already present in the graph.\n\tUnique bool\n\n\t// Mode will only add resources that match the given mode\n\tModeFilter bool\n\tMode       addrs.ResourceMode\n\n\tl         sync.Mutex\n\tuniqueMap map[string]struct{}\n}\n\nfunc (t *ConfigTransformer) Transform(g *Graph) error {\n\t// Lock since we use some internal state\n\tt.l.Lock()\n\tdefer t.l.Unlock()\n\n\t// If no configuration is available, we don't do anything\n\tif t.Config == nil {\n\t\treturn nil\n\t}\n\n\t// Reset the uniqueness map. If we're tracking uniques, then populate\n\t// it with addresses.\n\tt.uniqueMap = make(map[string]struct{})\n\tdefer func() { t.uniqueMap = nil }()\n\tif t.Unique {\n\t\tfor _, v := range g.Vertices() {\n\t\t\tif rn, ok := v.(GraphNodeResource); ok {\n\t\t\t\tt.uniqueMap[rn.ResourceAddr().String()] = struct{}{}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Start the transformation process\n\treturn t.transform(g, t.Config)\n}\n\nfunc (t *ConfigTransformer) transform(g *Graph, config *configs.Config) error {\n\t// If no config, do nothing\n\tif config == nil {\n\t\treturn nil\n\t}\n\n\t// Add our resources\n\tif err := t.transformSingle(g, config); err != nil {\n\t\treturn err\n\t}\n\n\t// Transform all the children.\n\tfor _, c := range config.Children {\n\t\tif err := t.transform(g, c); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (t *ConfigTransformer) transformSingle(g *Graph, config *configs.Config) error {\n\tpath := config.Path\n\tmodule := config.Module\n\tlog.Printf(\"[TRACE] ConfigTransformer: Starting for path: %v\", path)\n\n\t// For now we assume that each module call produces only one module\n\t// instance with no key, since we don't yet support \"count\" and \"for_each\"\n\t// on modules.\n\t// FIXME: As part of supporting \"count\" and \"for_each\" on modules, rework\n\t// this so that we'll \"expand\" the module call first and then create graph\n\t// nodes for each module instance separately.\n\tinstPath := path.UnkeyedInstanceShim()\n\n\tallResources := make([]*configs.Resource, 0, len(module.ManagedResources)+len(module.DataResources))\n\tfor _, r := range module.ManagedResources {\n\t\tallResources = append(allResources, r)\n\t}\n\tfor _, r := range module.DataResources {\n\t\tallResources = append(allResources, r)\n\t}\n\n\tfor _, r := range allResources {\n\t\trelAddr := r.Addr()\n\n\t\tif t.ModeFilter && relAddr.Mode != t.Mode {\n\t\t\t// Skip non-matching modes\n\t\t\tcontinue\n\t\t}\n\n\t\taddr := relAddr.Absolute(instPath)\n\t\tif _, ok := t.uniqueMap[addr.String()]; ok {\n\t\t\t// We've already seen a resource with this address. This should\n\t\t\t// never happen, because we enforce uniqueness in the config loader.\n\t\t\tcontinue\n\t\t}\n\n\t\tabstract := &NodeAbstractResource{Addr: addr}\n\t\tvar node dag.Vertex = abstract\n\t\tif f := t.Concrete; f != nil {\n\t\t\tnode = f(abstract)\n\t\t}\n\n\t\tg.Add(node)\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/transform_config_flat.go",
    "content": "package terraform\n\nimport (\n\t\"github.com/hashicorp/terraform/configs\"\n\t\"github.com/hashicorp/terraform/dag\"\n)\n\n// FlatConfigTransformer is a GraphTransformer that adds the configuration\n// to the graph. The module used to configure this transformer must be\n// the root module.\n//\n// This transform adds the nodes but doesn't connect any of the references.\n// The ReferenceTransformer should be used for that.\n//\n// NOTE: In relation to ConfigTransformer: this is a newer generation config\n// transformer. It puts the _entire_ config into the graph (there is no\n// \"flattening\" step as before).\ntype FlatConfigTransformer struct {\n\tConcrete ConcreteResourceNodeFunc // What to turn resources into\n\n\tConfig *configs.Config\n}\n\nfunc (t *FlatConfigTransformer) Transform(g *Graph) error {\n\t// We have nothing to do if there is no configuration.\n\tif t.Config == nil {\n\t\treturn nil\n\t}\n\n\treturn t.transform(g, t.Config)\n}\n\nfunc (t *FlatConfigTransformer) transform(g *Graph, config *configs.Config) error {\n\t// If we have no configuration then there's nothing to do.\n\tif config == nil {\n\t\treturn nil\n\t}\n\n\t// Transform all the children.\n\tfor _, c := range config.Children {\n\t\tif err := t.transform(g, c); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tmodule := config.Module\n\t// For now we assume that each module call produces only one module\n\t// instance with no key, since we don't yet support \"count\" and \"for_each\"\n\t// on modules.\n\t// FIXME: As part of supporting \"count\" and \"for_each\" on modules, rework\n\t// this so that we'll \"expand\" the module call first and then create graph\n\t// nodes for each module instance separately.\n\tinstPath := config.Path.UnkeyedInstanceShim()\n\n\tfor _, r := range module.ManagedResources {\n\t\taddr := r.Addr().Absolute(instPath)\n\t\tabstract := &NodeAbstractResource{\n\t\t\tAddr:   addr,\n\t\t\tConfig: r,\n\t\t}\n\t\t// Grab the address for this resource\n\t\tvar node dag.Vertex = abstract\n\t\tif f := t.Concrete; f != nil {\n\t\t\tnode = f(abstract)\n\t\t}\n\n\t\tg.Add(node)\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/transform_config_old.go",
    "content": "package terraform\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/hashicorp/terraform/config\"\n)\n\n// varNameForVar returns the VarName value for an interpolated variable.\n// This value is compared to the VarName() value for the nodes within the\n// graph to build the graph edges.\nfunc varNameForVar(raw config.InterpolatedVariable) string {\n\tswitch v := raw.(type) {\n\tcase *config.ModuleVariable:\n\t\treturn fmt.Sprintf(\"module.%s.output.%s\", v.Name, v.Field)\n\tcase *config.ResourceVariable:\n\t\treturn v.ResourceId()\n\tcase *config.UserVariable:\n\t\treturn fmt.Sprintf(\"var.%s\", v.Name)\n\tdefault:\n\t\treturn \"\"\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/transform_count_boundary.go",
    "content": "package terraform\n\nimport (\n\t\"github.com/hashicorp/terraform/configs\"\n\t\"github.com/hashicorp/terraform/dag\"\n)\n\n// CountBoundaryTransformer adds a node that depends on everything else\n// so that it runs last in order to clean up the state for nodes that\n// are on the \"count boundary\": \"foo.0\" when only one exists becomes \"foo\"\ntype CountBoundaryTransformer struct {\n\tConfig *configs.Config\n}\n\nfunc (t *CountBoundaryTransformer) Transform(g *Graph) error {\n\tnode := &NodeCountBoundary{\n\t\tConfig: t.Config,\n\t}\n\tg.Add(node)\n\n\t// Depends on everything\n\tfor _, v := range g.Vertices() {\n\t\t// Don't connect to ourselves\n\t\tif v == node {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Connect!\n\t\tg.Connect(dag.BasicEdge(node, v))\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/transform_destroy_cbd.go",
    "content": "package terraform\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\n\t\"github.com/hashicorp/terraform/configs\"\n\t\"github.com/hashicorp/terraform/dag\"\n\t\"github.com/hashicorp/terraform/states\"\n)\n\n// GraphNodeDestroyerCBD must be implemented by nodes that might be\n// create-before-destroy destroyers, or might plan a create-before-destroy\n// action.\ntype GraphNodeDestroyerCBD interface {\n\t// CreateBeforeDestroy returns true if this node represents a node\n\t// that is doing a CBD.\n\tCreateBeforeDestroy() bool\n\n\t// ModifyCreateBeforeDestroy is called when the CBD state of a node\n\t// is changed dynamically. This can return an error if this isn't\n\t// allowed.\n\tModifyCreateBeforeDestroy(bool) error\n}\n\n// GraphNodeAttachDestroyer is implemented by applyable nodes that have a\n// companion destroy node. This allows the creation node to look up the status\n// of the destroy node and determine if it needs to depose the existing state,\n// or replace it.\n// If a node is not marked as create-before-destroy in the configuration, but a\n// dependency forces that status, only the destroy node will be aware of that\n// status.\ntype GraphNodeAttachDestroyer interface {\n\t// AttachDestroyNode takes a destroy node and saves a reference to that\n\t// node in the receiver, so it can later check the status of\n\t// CreateBeforeDestroy().\n\tAttachDestroyNode(n GraphNodeDestroyerCBD)\n}\n\n// ForcedCBDTransformer detects when a particular CBD-able graph node has\n// dependencies with another that has create_before_destroy set that require\n// it to be forced on, and forces it on.\n//\n// This must be used in the plan graph builder to ensure that\n// create_before_destroy settings are properly propagated before constructing\n// the planned changes. This requires that the plannable resource nodes\n// implement GraphNodeDestroyerCBD.\ntype ForcedCBDTransformer struct {\n}\n\nfunc (t *ForcedCBDTransformer) Transform(g *Graph) error {\n\tfor _, v := range g.Vertices() {\n\t\tdn, ok := v.(GraphNodeDestroyerCBD)\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\n\t\tif !dn.CreateBeforeDestroy() {\n\t\t\t// If there are no CBD decendent (dependent nodes), then we\n\t\t\t// do nothing here.\n\t\t\tif !t.hasCBDDescendent(g, v) {\n\t\t\t\tlog.Printf(\"[TRACE] ForcedCBDTransformer: %q (%T) has no CBD descendent, so skipping\", dag.VertexName(v), v)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// If this isn't naturally a CBD node, this means that an descendent is\n\t\t\t// and we need to auto-upgrade this node to CBD. We do this because\n\t\t\t// a CBD node depending on non-CBD will result in cycles. To avoid this,\n\t\t\t// we always attempt to upgrade it.\n\t\t\tlog.Printf(\"[TRACE] ForcedCBDTransformer: forcing create_before_destroy on for %q (%T)\", dag.VertexName(v), v)\n\t\t\tif err := dn.ModifyCreateBeforeDestroy(true); err != nil {\n\t\t\t\treturn fmt.Errorf(\n\t\t\t\t\t\"%s: must have create before destroy enabled because \"+\n\t\t\t\t\t\t\"a dependent resource has CBD enabled. However, when \"+\n\t\t\t\t\t\t\"attempting to automatically do this, an error occurred: %s\",\n\t\t\t\t\tdag.VertexName(v), err)\n\t\t\t}\n\t\t} else {\n\t\t\tlog.Printf(\"[TRACE] ForcedCBDTransformer: %q (%T) already has create_before_destroy set\", dag.VertexName(v), v)\n\t\t}\n\t}\n\treturn nil\n}\n\n// hasCBDDescendent returns true if any descendent (node that depends on this)\n// has CBD set.\nfunc (t *ForcedCBDTransformer) hasCBDDescendent(g *Graph, v dag.Vertex) bool {\n\ts, _ := g.Descendents(v)\n\tif s == nil {\n\t\treturn true\n\t}\n\n\tfor _, ov := range s.List() {\n\t\tdn, ok := ov.(GraphNodeDestroyerCBD)\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\n\t\tif dn.CreateBeforeDestroy() {\n\t\t\t// some descendent is CreateBeforeDestroy, so we need to follow suit\n\t\t\tlog.Printf(\"[TRACE] ForcedCBDTransformer: %q has CBD descendent %q\", dag.VertexName(v), dag.VertexName(ov))\n\t\t\treturn true\n\t\t}\n\t}\n\n\treturn false\n}\n\n// CBDEdgeTransformer modifies the edges of CBD nodes that went through\n// the DestroyEdgeTransformer to have the right dependencies. There are\n// two real tasks here:\n//\n//   1. With CBD, the destroy edge is inverted: the destroy depends on\n//      the creation.\n//\n//   2. A_d must depend on resources that depend on A. This is to enable\n//      the destroy to only happen once nodes that depend on A successfully\n//      update to A. Example: adding a web server updates the load balancer\n//      before deleting the old web server.\n//\n// This transformer requires that a previous transformer has already forced\n// create_before_destroy on for nodes that are depended on by explicit CBD\n// nodes. This is the logic in ForcedCBDTransformer, though in practice we\n// will get here by recording the CBD-ness of each change in the plan during\n// the plan walk and then forcing the nodes into the appropriate setting during\n// DiffTransformer when building the apply graph.\ntype CBDEdgeTransformer struct {\n\t// Module and State are only needed to look up dependencies in\n\t// any way possible. Either can be nil if not availabile.\n\tConfig *configs.Config\n\tState  *states.State\n\n\t// If configuration is present then Schemas is required in order to\n\t// obtain schema information from providers and provisioners so we can\n\t// properly resolve implicit dependencies.\n\tSchemas *Schemas\n}\n\nfunc (t *CBDEdgeTransformer) Transform(g *Graph) error {\n\t// Go through and reverse any destroy edges\n\tdestroyMap := make(map[string][]dag.Vertex)\n\tfor _, v := range g.Vertices() {\n\t\tdn, ok := v.(GraphNodeDestroyerCBD)\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\t\tdern, ok := v.(GraphNodeDestroyer)\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\n\t\tif !dn.CreateBeforeDestroy() {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Find the destroy edge. There should only be one.\n\t\tfor _, e := range g.EdgesTo(v) {\n\t\t\t// Not a destroy edge, ignore it\n\t\t\tde, ok := e.(*DestroyEdge)\n\t\t\tif !ok {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tlog.Printf(\"[TRACE] CBDEdgeTransformer: inverting edge: %s => %s\",\n\t\t\t\tdag.VertexName(de.Source()), dag.VertexName(de.Target()))\n\n\t\t\t// Found it! Invert.\n\t\t\tg.RemoveEdge(de)\n\t\t\tapplyNode := de.Source()\n\t\t\tdestroyNode := de.Target()\n\t\t\tg.Connect(&DestroyEdge{S: destroyNode, T: applyNode})\n\t\t}\n\n\t\t// If the address has an index, we strip that. Our depMap creation\n\t\t// graph doesn't expand counts so we don't currently get _exact_\n\t\t// dependencies. One day when we limit dependencies more exactly\n\t\t// this will have to change. We have a test case covering this\n\t\t// (depNonCBDCountBoth) so it'll be caught.\n\t\taddr := dern.DestroyAddr()\n\t\tkey := addr.ContainingResource().String()\n\n\t\t// Add this to the list of nodes that we need to fix up\n\t\t// the edges for (step 2 above in the docs).\n\t\tdestroyMap[key] = append(destroyMap[key], v)\n\t}\n\n\t// If we have no CBD nodes, then our work here is done\n\tif len(destroyMap) == 0 {\n\t\treturn nil\n\t}\n\n\t// We have CBD nodes. We now have to move on to the much more difficult\n\t// task of connecting dependencies of the creation side of the destroy\n\t// to the destruction node. The easiest way to explain this is an example:\n\t//\n\t// Given a pre-destroy dependence of: A => B\n\t//   And A has CBD set.\n\t//\n\t// The resulting graph should be: A => B => A_d\n\t//\n\t// They key here is that B happens before A is destroyed. This is to\n\t// facilitate the primary purpose for CBD: making sure that downstreams\n\t// are properly updated to avoid downtime before the resource is destroyed.\n\t//\n\t// We can't trust that the resource being destroyed or anything that\n\t// depends on it is actually in our current graph so we make a new\n\t// graph in order to determine those dependencies and add them in.\n\tlog.Printf(\"[TRACE] CBDEdgeTransformer: building graph to find dependencies...\")\n\tdepMap, err := t.depMap(destroyMap)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// We now have the mapping of resource addresses to the destroy\n\t// nodes they need to depend on. We now go through our own vertices to\n\t// find any matching these addresses and make the connection.\n\tfor _, v := range g.Vertices() {\n\t\t// We're looking for creators\n\t\trn, ok := v.(GraphNodeCreator)\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Get the address\n\t\taddr := rn.CreateAddr()\n\n\t\t// If the address has an index, we strip that. Our depMap creation\n\t\t// graph doesn't expand counts so we don't currently get _exact_\n\t\t// dependencies. One day when we limit dependencies more exactly\n\t\t// this will have to change. We have a test case covering this\n\t\t// (depNonCBDCount) so it'll be caught.\n\t\tkey := addr.ContainingResource().String()\n\n\t\t// If there is nothing this resource should depend on, ignore it\n\t\tdns, ok := depMap[key]\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\n\t\t// We have nodes! Make the connection\n\t\tfor _, dn := range dns {\n\t\t\tlog.Printf(\"[TRACE] CBDEdgeTransformer: destroy depends on dependence: %s => %s\",\n\t\t\t\tdag.VertexName(dn), dag.VertexName(v))\n\t\t\tg.Connect(dag.BasicEdge(dn, v))\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (t *CBDEdgeTransformer) depMap(destroyMap map[string][]dag.Vertex) (map[string][]dag.Vertex, error) {\n\t// Build the graph of our config, this ensures that all resources\n\t// are present in the graph.\n\tg, diags := (&BasicGraphBuilder{\n\t\tSteps: []GraphTransformer{\n\t\t\t&FlatConfigTransformer{Config: t.Config},\n\t\t\t&AttachResourceConfigTransformer{Config: t.Config},\n\t\t\t&AttachStateTransformer{State: t.State},\n\t\t\t&AttachSchemaTransformer{Schemas: t.Schemas},\n\t\t\t&ReferenceTransformer{},\n\t\t},\n\t\tName: \"CBDEdgeTransformer\",\n\t}).Build(nil)\n\tif diags.HasErrors() {\n\t\treturn nil, diags.Err()\n\t}\n\n\t// Using this graph, build the list of destroy nodes that each resource\n\t// address should depend on. For example, when we find B, we map the\n\t// address of B to A_d in the \"depMap\" variable below.\n\tdepMap := make(map[string][]dag.Vertex)\n\tfor _, v := range g.Vertices() {\n\t\t// We're looking for resources.\n\t\trn, ok := v.(GraphNodeResource)\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Get the address\n\t\taddr := rn.ResourceAddr()\n\t\tkey := addr.String()\n\n\t\t// Get the destroy nodes that are destroying this resource.\n\t\t// If there aren't any, then we don't need to worry about\n\t\t// any connections.\n\t\tdns, ok := destroyMap[key]\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Get the nodes that depend on this on. In the example above:\n\t\t// finding B in A => B.\n\t\tfor _, v := range g.UpEdges(v).List() {\n\t\t\t// We're looking for resources.\n\t\t\trn, ok := v.(GraphNodeResource)\n\t\t\tif !ok {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// Keep track of the destroy nodes that this address\n\t\t\t// needs to depend on.\n\t\t\tkey := rn.ResourceAddr().String()\n\t\t\tdepMap[key] = append(depMap[key], dns...)\n\t\t}\n\t}\n\n\treturn depMap, nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/transform_destroy_edge.go",
    "content": "package terraform\n\nimport (\n\t\"log\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/states\"\n\n\t\"github.com/hashicorp/terraform/configs\"\n\t\"github.com/hashicorp/terraform/dag\"\n)\n\n// GraphNodeDestroyer must be implemented by nodes that destroy resources.\ntype GraphNodeDestroyer interface {\n\tdag.Vertex\n\n\t// DestroyAddr is the address of the resource that is being\n\t// destroyed by this node. If this returns nil, then this node\n\t// is not destroying anything.\n\tDestroyAddr() *addrs.AbsResourceInstance\n}\n\n// GraphNodeCreator must be implemented by nodes that create OR update resources.\ntype GraphNodeCreator interface {\n\t// CreateAddr is the address of the resource being created or updated\n\tCreateAddr() *addrs.AbsResourceInstance\n}\n\n// DestroyEdgeTransformer is a GraphTransformer that creates the proper\n// references for destroy resources. Destroy resources are more complex\n// in that they must be depend on the destruction of resources that\n// in turn depend on the CREATION of the node being destroy.\n//\n// That is complicated. Visually:\n//\n//   B_d -> A_d -> A -> B\n//\n// Notice that A destroy depends on B destroy, while B create depends on\n// A create. They're inverted. This must be done for example because often\n// dependent resources will block parent resources from deleting. Concrete\n// example: VPC with subnets, the VPC can't be deleted while there are\n// still subnets.\ntype DestroyEdgeTransformer struct {\n\t// These are needed to properly build the graph of dependencies\n\t// to determine what a destroy node depends on. Any of these can be nil.\n\tConfig *configs.Config\n\tState  *states.State\n\n\t// If configuration is present then Schemas is required in order to\n\t// obtain schema information from providers and provisioners in order\n\t// to properly resolve implicit dependencies.\n\tSchemas *Schemas\n}\n\nfunc (t *DestroyEdgeTransformer) Transform(g *Graph) error {\n\t// Build a map of what is being destroyed (by address string) to\n\t// the list of destroyers. Usually there will be at most one destroyer\n\t// per node, but we allow multiple if present for completeness.\n\tdestroyers := make(map[string][]GraphNodeDestroyer)\n\tdestroyerAddrs := make(map[string]addrs.AbsResourceInstance)\n\tfor _, v := range g.Vertices() {\n\t\tdn, ok := v.(GraphNodeDestroyer)\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\n\t\taddrP := dn.DestroyAddr()\n\t\tif addrP == nil {\n\t\t\tcontinue\n\t\t}\n\t\taddr := *addrP\n\n\t\tkey := addr.String()\n\t\tlog.Printf(\"[TRACE] DestroyEdgeTransformer: %q (%T) destroys %s\", dag.VertexName(dn), v, key)\n\t\tdestroyers[key] = append(destroyers[key], dn)\n\t\tdestroyerAddrs[key] = addr\n\t}\n\n\t// If we aren't destroying anything, there will be no edges to make\n\t// so just exit early and avoid future work.\n\tif len(destroyers) == 0 {\n\t\treturn nil\n\t}\n\n\t// Go through and connect creators to destroyers. Going along with\n\t// our example, this makes: A_d => A\n\tfor _, v := range g.Vertices() {\n\t\tcn, ok := v.(GraphNodeCreator)\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\n\t\taddr := cn.CreateAddr()\n\t\tif addr == nil {\n\t\t\tcontinue\n\t\t}\n\n\t\tkey := addr.String()\n\t\tds := destroyers[key]\n\t\tif len(ds) == 0 {\n\t\t\tcontinue\n\t\t}\n\n\t\tfor _, d := range ds {\n\t\t\t// For illustrating our example\n\t\t\ta_d := d.(dag.Vertex)\n\t\t\ta := v\n\n\t\t\tlog.Printf(\n\t\t\t\t\"[TRACE] DestroyEdgeTransformer: connecting creator %q with destroyer %q\",\n\t\t\t\tdag.VertexName(a), dag.VertexName(a_d))\n\n\t\t\tg.Connect(&DestroyEdge{S: a, T: a_d})\n\n\t\t\t// Attach the destroy node to the creator\n\t\t\t// There really shouldn't be more than one destroyer, but even if\n\t\t\t// there are, any of them will represent the correct\n\t\t\t// CreateBeforeDestroy status.\n\t\t\tif n, ok := cn.(GraphNodeAttachDestroyer); ok {\n\t\t\t\tif d, ok := d.(GraphNodeDestroyerCBD); ok {\n\t\t\t\t\tn.AttachDestroyNode(d)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// This is strange but is the easiest way to get the dependencies\n\t// of a node that is being destroyed. We use another graph to make sure\n\t// the resource is in the graph and ask for references. We have to do this\n\t// because the node that is being destroyed may NOT be in the graph.\n\t//\n\t// Example: resource A is force new, then destroy A AND create A are\n\t// in the graph. BUT if resource A is just pure destroy, then only\n\t// destroy A is in the graph, and create A is not.\n\tproviderFn := func(a *NodeAbstractProvider) dag.Vertex {\n\t\treturn &NodeApplyableProvider{NodeAbstractProvider: a}\n\t}\n\tsteps := []GraphTransformer{\n\t\t// Add the local values\n\t\t&LocalTransformer{Config: t.Config},\n\n\t\t// Add outputs and metadata\n\t\t&OutputTransformer{Config: t.Config},\n\t\t&AttachResourceConfigTransformer{Config: t.Config},\n\t\t&AttachStateTransformer{State: t.State},\n\n\t\t// Add all the variables. We can depend on resources through\n\t\t// variables due to module parameters, and we need to properly\n\t\t// determine that.\n\t\t&RootVariableTransformer{Config: t.Config},\n\t\t&ModuleVariableTransformer{Config: t.Config},\n\n\t\tTransformProviders(nil, providerFn, t.Config),\n\n\t\t// Must attach schemas before ReferenceTransformer so that we can\n\t\t// analyze the configuration to find references.\n\t\t&AttachSchemaTransformer{Schemas: t.Schemas},\n\n\t\t&ReferenceTransformer{},\n\t}\n\n\t// Go through all the nodes being destroyed and create a graph.\n\t// The resulting graph is only of things being CREATED. For example,\n\t// following our example, the resulting graph would be:\n\t//\n\t//   A, B (with no edges)\n\t//\n\tvar tempG Graph\n\tvar tempDestroyed []dag.Vertex\n\tfor d := range destroyers {\n\t\t// d is the string key for the resource being destroyed. We actually\n\t\t// want the address value, which we stashed earlier.\n\t\taddr := destroyerAddrs[d]\n\n\t\t// This part is a little bit weird but is the best way to\n\t\t// find the dependencies we need to: build a graph and use the\n\t\t// attach config and state transformers then ask for references.\n\t\tabstract := NewNodeAbstractResourceInstance(addr)\n\t\ttempG.Add(abstract)\n\t\ttempDestroyed = append(tempDestroyed, abstract)\n\n\t\t// We also add the destroy version here since the destroy can\n\t\t// depend on things that the creation doesn't (destroy provisioners).\n\t\tdestroy := &NodeDestroyResourceInstance{NodeAbstractResourceInstance: abstract}\n\t\ttempG.Add(destroy)\n\t\ttempDestroyed = append(tempDestroyed, destroy)\n\t}\n\n\t// Run the graph transforms so we have the information we need to\n\t// build references.\n\tlog.Printf(\"[TRACE] DestroyEdgeTransformer: constructing temporary graph for analysis of references, starting from:\\n%s\", tempG.StringWithNodeTypes())\n\tfor _, s := range steps {\n\t\tlog.Printf(\"[TRACE] DestroyEdgeTransformer: running %T on temporary graph\", s)\n\t\tif err := s.Transform(&tempG); err != nil {\n\t\t\tlog.Printf(\"[TRACE] DestroyEdgeTransformer: %T failed: %s\", s, err)\n\t\t\treturn err\n\t\t}\n\t}\n\tlog.Printf(\"[TRACE] DestroyEdgeTransformer: temporary reference graph:\\n%s\", tempG.String())\n\n\t// Go through all the nodes in the graph and determine what they\n\t// depend on.\n\tfor _, v := range tempDestroyed {\n\t\t// Find all ancestors of this to determine the edges we'll depend on\n\t\tvs, err := tempG.Ancestors(v)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\trefs := make([]dag.Vertex, 0, vs.Len())\n\t\tfor _, raw := range vs.List() {\n\t\t\trefs = append(refs, raw.(dag.Vertex))\n\t\t}\n\n\t\trefNames := make([]string, len(refs))\n\t\tfor i, ref := range refs {\n\t\t\trefNames[i] = dag.VertexName(ref)\n\t\t}\n\t\tlog.Printf(\n\t\t\t\"[TRACE] DestroyEdgeTransformer: creation node %q references %s\",\n\t\t\tdag.VertexName(v), refNames)\n\n\t\t// If we have no references, then we won't need to do anything\n\t\tif len(refs) == 0 {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Get the destroy node for this. In the example of our struct,\n\t\t// we are currently at B and we're looking for B_d.\n\t\trn, ok := v.(GraphNodeResourceInstance)\n\t\tif !ok {\n\t\t\tlog.Printf(\"[TRACE] DestroyEdgeTransformer: skipping %s, since it's not a resource\", dag.VertexName(v))\n\t\t\tcontinue\n\t\t}\n\n\t\taddr := rn.ResourceInstanceAddr()\n\t\tdns := destroyers[addr.String()]\n\n\t\t// We have dependencies, check if any are being destroyed\n\t\t// to build the list of things that we must depend on!\n\t\t//\n\t\t// In the example of the struct, if we have:\n\t\t//\n\t\t//   B_d => A_d => A => B\n\t\t//\n\t\t// Then at this point in the algorithm we started with B_d,\n\t\t// we built B (to get dependencies), and we found A. We're now looking\n\t\t// to see if A_d exists.\n\t\tvar depDestroyers []dag.Vertex\n\t\tfor _, v := range refs {\n\t\t\trn, ok := v.(GraphNodeResourceInstance)\n\t\t\tif !ok {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\taddr := rn.ResourceInstanceAddr()\n\t\t\tkey := addr.String()\n\t\t\tif ds, ok := destroyers[key]; ok {\n\t\t\t\tfor _, d := range ds {\n\t\t\t\t\tdepDestroyers = append(depDestroyers, d.(dag.Vertex))\n\t\t\t\t\tlog.Printf(\n\t\t\t\t\t\t\"[TRACE] DestroyEdgeTransformer: destruction of %q depends on %s\",\n\t\t\t\t\t\tkey, dag.VertexName(d))\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Go through and make the connections. Use the variable\n\t\t// names \"a_d\" and \"b_d\" to reference our example.\n\t\tfor _, a_d := range dns {\n\t\t\tfor _, b_d := range depDestroyers {\n\t\t\t\tif b_d != a_d {\n\t\t\t\t\tlog.Printf(\"[TRACE] DestroyEdgeTransformer: %q depends on %q\", dag.VertexName(b_d), dag.VertexName(a_d))\n\t\t\t\t\tg.Connect(dag.BasicEdge(b_d, a_d))\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/transform_diff.go",
    "content": "package terraform\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\n\t\"github.com/hashicorp/terraform/dag\"\n\t\"github.com/hashicorp/terraform/plans\"\n\t\"github.com/hashicorp/terraform/states\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n)\n\n// DiffTransformer is a GraphTransformer that adds graph nodes representing\n// each of the resource changes described in the given Changes object.\ntype DiffTransformer struct {\n\tConcrete ConcreteResourceInstanceNodeFunc\n\tState    *states.State\n\tChanges  *plans.Changes\n}\n\nfunc (t *DiffTransformer) Transform(g *Graph) error {\n\tif t.Changes == nil || len(t.Changes.Resources) == 0 {\n\t\t// Nothing to do!\n\t\treturn nil\n\t}\n\n\t// Go through all the modules in the diff.\n\tlog.Printf(\"[TRACE] DiffTransformer starting\")\n\n\tvar diags tfdiags.Diagnostics\n\tstate := t.State\n\tchanges := t.Changes\n\n\t// DiffTransformer creates resource _instance_ nodes. If there are any\n\t// whole-resource nodes already in the graph, we must ensure that they\n\t// get evaluated before any of the corresponding instances by creating\n\t// dependency edges, so we'll do some prep work here to ensure we'll only\n\t// create connections to nodes that existed before we started here.\n\tresourceNodes := map[string][]GraphNodeResource{}\n\tfor _, node := range g.Vertices() {\n\t\trn, ok := node.(GraphNodeResource)\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\t\t// We ignore any instances that _also_ implement\n\t\t// GraphNodeResourceInstance, since in the unlikely event that they\n\t\t// do exist we'd probably end up creating cycles by connecting them.\n\t\tif _, ok := node.(GraphNodeResourceInstance); ok {\n\t\t\tcontinue\n\t\t}\n\n\t\taddr := rn.ResourceAddr().String()\n\t\tresourceNodes[addr] = append(resourceNodes[addr], rn)\n\t}\n\n\tfor _, rc := range changes.Resources {\n\t\taddr := rc.Addr\n\t\tdk := rc.DeposedKey\n\n\t\tlog.Printf(\"[TRACE] DiffTransformer: found %s change for %s %s\", rc.Action, addr, dk)\n\n\t\t// Depending on the action we'll need some different combinations of\n\t\t// nodes, because destroying uses a special node type separate from\n\t\t// other actions.\n\t\tvar update, delete, createBeforeDestroy bool\n\t\tswitch rc.Action {\n\t\tcase plans.NoOp:\n\t\t\tcontinue\n\t\tcase plans.Delete:\n\t\t\tdelete = true\n\t\tcase plans.DeleteThenCreate, plans.CreateThenDelete:\n\t\t\tupdate = true\n\t\t\tdelete = true\n\t\t\tcreateBeforeDestroy = (rc.Action == plans.CreateThenDelete)\n\t\tdefault:\n\t\t\tupdate = true\n\t\t}\n\n\t\tif dk != states.NotDeposed && update {\n\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\ttfdiags.Error,\n\t\t\t\t\"Invalid planned change for deposed object\",\n\t\t\t\tfmt.Sprintf(\"The plan contains a non-delete change for %s deposed object %s. The only valid action for a deposed object is to destroy it, so this is a bug in Terraform.\", addr, dk),\n\t\t\t))\n\t\t\tcontinue\n\t\t}\n\n\t\t// If we're going to do a create_before_destroy Replace operation then\n\t\t// we need to allocate a DeposedKey to use to retain the\n\t\t// not-yet-destroyed prior object, so that the delete node can destroy\n\t\t// _that_ rather than the newly-created node, which will be current\n\t\t// by the time the delete node is visited.\n\t\tif update && delete && createBeforeDestroy {\n\t\t\t// In this case, variable dk will be the _pre-assigned_ DeposedKey\n\t\t\t// that must be used if the update graph node deposes the current\n\t\t\t// instance, which will then align with the same key we pass\n\t\t\t// into the destroy node to ensure we destroy exactly the deposed\n\t\t\t// object we expect.\n\t\t\tif state != nil {\n\t\t\t\tris := state.ResourceInstance(addr)\n\t\t\t\tif ris == nil {\n\t\t\t\t\t// Should never happen, since we don't plan to replace an\n\t\t\t\t\t// instance that doesn't exist yet.\n\t\t\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\t\t\ttfdiags.Error,\n\t\t\t\t\t\t\"Invalid planned change\",\n\t\t\t\t\t\tfmt.Sprintf(\"The plan contains a replace change for %s, which doesn't exist yet. This is a bug in Terraform.\", addr),\n\t\t\t\t\t))\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\t// Allocating a deposed key separately from using it can be racy\n\t\t\t\t// in general, but we assume here that nothing except the apply\n\t\t\t\t// node we instantiate below will actually make new deposed objects\n\t\t\t\t// in practice, and so the set of already-used keys will not change\n\t\t\t\t// between now and then.\n\t\t\t\tdk = ris.FindUnusedDeposedKey()\n\t\t\t} else {\n\t\t\t\t// If we have no state at all yet then we can use _any_\n\t\t\t\t// DeposedKey.\n\t\t\t\tdk = states.NewDeposedKey()\n\t\t\t}\n\t\t}\n\n\t\tif update {\n\t\t\t// All actions except destroying the node type chosen by t.Concrete\n\t\t\tabstract := NewNodeAbstractResourceInstance(addr)\n\t\t\tvar node dag.Vertex = abstract\n\t\t\tif f := t.Concrete; f != nil {\n\t\t\t\tnode = f(abstract)\n\t\t\t}\n\n\t\t\tif createBeforeDestroy {\n\t\t\t\t// We'll attach our pre-allocated DeposedKey to the node if\n\t\t\t\t// it supports that. NodeApplyableResourceInstance is the\n\t\t\t\t// specific concrete node type we are looking for here really,\n\t\t\t\t// since that's the only node type that might depose objects.\n\t\t\t\tif dn, ok := node.(GraphNodeDeposer); ok {\n\t\t\t\t\tdn.SetPreallocatedDeposedKey(dk)\n\t\t\t\t}\n\t\t\t\tlog.Printf(\"[TRACE] DiffTransformer: %s will be represented by %s, deposing prior object to %s\", addr, dag.VertexName(node), dk)\n\t\t\t} else {\n\t\t\t\tlog.Printf(\"[TRACE] DiffTransformer: %s will be represented by %s\", addr, dag.VertexName(node))\n\t\t\t}\n\n\t\t\tg.Add(node)\n\t\t\trsrcAddr := addr.ContainingResource().String()\n\t\t\tfor _, rsrcNode := range resourceNodes[rsrcAddr] {\n\t\t\t\tg.Connect(dag.BasicEdge(node, rsrcNode))\n\t\t\t}\n\t\t}\n\n\t\tif delete {\n\t\t\t// Destroying always uses a destroy-specific node type, though\n\t\t\t// which one depends on whether we're destroying a current object\n\t\t\t// or a deposed object.\n\t\t\tvar node GraphNodeResourceInstance\n\t\t\tabstract := NewNodeAbstractResourceInstance(addr)\n\t\t\tif dk == states.NotDeposed {\n\t\t\t\tnode = &NodeDestroyResourceInstance{\n\t\t\t\t\tNodeAbstractResourceInstance: abstract,\n\t\t\t\t\tDeposedKey:                   dk,\n\t\t\t\t}\n\t\t\t\tnode.(*NodeDestroyResourceInstance).ModifyCreateBeforeDestroy(createBeforeDestroy)\n\t\t\t} else {\n\t\t\t\tnode = &NodeDestroyDeposedResourceInstanceObject{\n\t\t\t\t\tNodeAbstractResourceInstance: abstract,\n\t\t\t\t\tDeposedKey:                   dk,\n\t\t\t\t}\n\t\t\t}\n\t\t\tif dk == states.NotDeposed {\n\t\t\t\tlog.Printf(\"[TRACE] DiffTransformer: %s will be represented for destruction by %s\", addr, dag.VertexName(node))\n\t\t\t} else {\n\t\t\t\tlog.Printf(\"[TRACE] DiffTransformer: %s deposed object %s will be represented for destruction by %s\", addr, dk, dag.VertexName(node))\n\t\t\t}\n\t\t\tg.Add(node)\n\t\t\trsrcAddr := addr.ContainingResource().String()\n\t\t\tfor _, rsrcNode := range resourceNodes[rsrcAddr] {\n\t\t\t\t// We connect this edge \"forwards\" (even though destroy dependencies\n\t\t\t\t// are often inverted) because evaluating the resource node\n\t\t\t\t// after the destroy node could cause an unnecessary husk of\n\t\t\t\t// a resource state to be re-added.\n\t\t\t\tg.Connect(dag.BasicEdge(node, rsrcNode))\n\t\t\t}\n\t\t}\n\n\t}\n\n\tlog.Printf(\"[TRACE] DiffTransformer complete\")\n\n\treturn diags.Err()\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/transform_expand.go",
    "content": "package terraform\n\nimport (\n\t\"log\"\n\n\t\"github.com/hashicorp/terraform/dag\"\n)\n\n// GraphNodeExapndable is an interface that nodes can implement to\n// signal that they can be expanded. Expanded nodes turn into\n// GraphNodeSubgraph nodes within the graph.\ntype GraphNodeExpandable interface {\n\tExpand(GraphBuilder) (GraphNodeSubgraph, error)\n}\n\n// GraphNodeDynamicExpandable is an interface that nodes can implement\n// to signal that they can be expanded at eval-time (hence dynamic).\n// These nodes are given the eval context and are expected to return\n// a new subgraph.\ntype GraphNodeDynamicExpandable interface {\n\tDynamicExpand(EvalContext) (*Graph, error)\n}\n\n// GraphNodeSubgraph is an interface a node can implement if it has\n// a larger subgraph that should be walked.\ntype GraphNodeSubgraph interface {\n\tSubgraph() dag.Grapher\n}\n\n// ExpandTransform is a transformer that does a subgraph expansion\n// at graph transform time (vs. at eval time). The benefit of earlier\n// subgraph expansion is that errors with the graph build can be detected\n// at an earlier stage.\ntype ExpandTransform struct {\n\tBuilder GraphBuilder\n}\n\nfunc (t *ExpandTransform) Transform(v dag.Vertex) (dag.Vertex, error) {\n\tev, ok := v.(GraphNodeExpandable)\n\tif !ok {\n\t\t// This isn't an expandable vertex, so just ignore it.\n\t\treturn v, nil\n\t}\n\n\t// Expand the subgraph!\n\tlog.Printf(\"[DEBUG] vertex %q: static expanding\", dag.VertexName(ev))\n\treturn ev.Expand(t.Builder)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/transform_import_provider.go",
    "content": "package terraform\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n)\n\n// ImportProviderValidateTransformer is a GraphTransformer that goes through\n// the providers in the graph and validates that they only depend on variables.\ntype ImportProviderValidateTransformer struct{}\n\nfunc (t *ImportProviderValidateTransformer) Transform(g *Graph) error {\n\tvar diags tfdiags.Diagnostics\n\n\tfor _, v := range g.Vertices() {\n\t\t// We only care about providers\n\t\tpv, ok := v.(GraphNodeProvider)\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\n\t\t// We only care about providers that reference things\n\t\trn, ok := pv.(GraphNodeReferencer)\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\n\t\tfor _, ref := range rn.References() {\n\t\t\tif _, ok := ref.Subject.(addrs.InputVariable); !ok {\n\t\t\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\tSummary:  \"Invalid provider dependency for import\",\n\t\t\t\t\tDetail:   fmt.Sprintf(\"The configuration for %s depends on %s. Providers used with import must either have literal configuration or refer only to input variables.\", pv.ProviderAddr(), ref.Subject.String()),\n\t\t\t\t\tSubject:  ref.SourceRange.ToHCL().Ptr(),\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t}\n\n\treturn diags.Err()\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/transform_import_state.go",
    "content": "package terraform\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/providers\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n)\n\n// ImportStateTransformer is a GraphTransformer that adds nodes to the\n// graph to represent the imports we want to do for resources.\ntype ImportStateTransformer struct {\n\tTargets []*ImportTarget\n}\n\nfunc (t *ImportStateTransformer) Transform(g *Graph) error {\n\tfor _, target := range t.Targets {\n\t\t// The ProviderAddr may not be supplied for non-aliased providers.\n\t\t// This will be populated if the targets come from the cli, but tests\n\t\t// may not specify implied provider addresses.\n\t\tproviderAddr := target.ProviderAddr\n\t\tif providerAddr.ProviderConfig.Type == \"\" {\n\t\t\tproviderAddr = target.Addr.Resource.Resource.DefaultProviderConfig().Absolute(target.Addr.Module)\n\t\t}\n\n\t\tnode := &graphNodeImportState{\n\t\t\tAddr:         target.Addr,\n\t\t\tID:           target.ID,\n\t\t\tProviderAddr: providerAddr,\n\t\t}\n\t\tg.Add(node)\n\t}\n\treturn nil\n}\n\ntype graphNodeImportState struct {\n\tAddr             addrs.AbsResourceInstance // Addr is the resource address to import into\n\tID               string                    // ID is the ID to import as\n\tProviderAddr     addrs.AbsProviderConfig   // Provider address given by the user, or implied by the resource type\n\tResolvedProvider addrs.AbsProviderConfig   // provider node address after resolution\n\n\tstates []providers.ImportedResource\n}\n\nvar (\n\t_ GraphNodeSubPath           = (*graphNodeImportState)(nil)\n\t_ GraphNodeEvalable          = (*graphNodeImportState)(nil)\n\t_ GraphNodeProviderConsumer  = (*graphNodeImportState)(nil)\n\t_ GraphNodeDynamicExpandable = (*graphNodeImportState)(nil)\n)\n\nfunc (n *graphNodeImportState) Name() string {\n\treturn fmt.Sprintf(\"%s (import id %q)\", n.Addr, n.ID)\n}\n\n// GraphNodeProviderConsumer\nfunc (n *graphNodeImportState) ProvidedBy() (addrs.AbsProviderConfig, bool) {\n\t// We assume that n.ProviderAddr has been properly populated here.\n\t// It's the responsibility of the code creating a graphNodeImportState\n\t// to populate this, possibly by calling DefaultProviderConfig() on the\n\t// resource address to infer an implied provider from the resource type\n\t// name.\n\treturn n.ProviderAddr, false\n}\n\n// GraphNodeProviderConsumer\nfunc (n *graphNodeImportState) SetProvider(addr addrs.AbsProviderConfig) {\n\tn.ResolvedProvider = addr\n}\n\n// GraphNodeSubPath\nfunc (n *graphNodeImportState) Path() addrs.ModuleInstance {\n\treturn n.Addr.Module\n}\n\n// GraphNodeEvalable impl.\nfunc (n *graphNodeImportState) EvalTree() EvalNode {\n\tvar provider providers.Interface\n\n\t// Reset our states\n\tn.states = nil\n\n\t// Return our sequence\n\treturn &EvalSequence{\n\t\tNodes: []EvalNode{\n\t\t\t&EvalGetProvider{\n\t\t\t\tAddr:   n.ResolvedProvider,\n\t\t\t\tOutput: &provider,\n\t\t\t},\n\t\t\t&EvalImportState{\n\t\t\t\tAddr:     n.Addr.Resource,\n\t\t\t\tProvider: &provider,\n\t\t\t\tID:       n.ID,\n\t\t\t\tOutput:   &n.states,\n\t\t\t},\n\t\t},\n\t}\n}\n\n// GraphNodeDynamicExpandable impl.\n//\n// We use DynamicExpand as a way to generate the subgraph of refreshes\n// and state inserts we need to do for our import state. Since they're new\n// resources they don't depend on anything else and refreshes are isolated\n// so this is nearly a perfect use case for dynamic expand.\nfunc (n *graphNodeImportState) DynamicExpand(ctx EvalContext) (*Graph, error) {\n\tvar diags tfdiags.Diagnostics\n\n\tg := &Graph{Path: ctx.Path()}\n\n\t// nameCounter is used to de-dup names in the state.\n\tnameCounter := make(map[string]int)\n\n\t// Compile the list of addresses that we'll be inserting into the state.\n\t// We do this ahead of time so we can verify that we aren't importing\n\t// something that already exists.\n\taddrs := make([]addrs.AbsResourceInstance, len(n.states))\n\tfor i, state := range n.states {\n\t\taddr := n.Addr\n\t\tif t := state.TypeName; t != \"\" {\n\t\t\taddr.Resource.Resource.Type = t\n\t\t}\n\n\t\t// Determine if we need to suffix the name to de-dup\n\t\tkey := addr.String()\n\t\tcount, ok := nameCounter[key]\n\t\tif ok {\n\t\t\tcount++\n\t\t\taddr.Resource.Resource.Name += fmt.Sprintf(\"-%d\", count)\n\t\t}\n\t\tnameCounter[key] = count\n\n\t\t// Add it to our list\n\t\taddrs[i] = addr\n\t}\n\n\t// Verify that all the addresses are clear\n\tstate := ctx.State()\n\tfor _, addr := range addrs {\n\t\texisting := state.ResourceInstance(addr)\n\t\tif existing != nil {\n\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\ttfdiags.Error,\n\t\t\t\t\"Resource already managed by Terraform\",\n\t\t\t\tfmt.Sprintf(\"Terraform is already managing a remote object for %s. To import to this address you must first remove the existing object from the state.\", addr),\n\t\t\t))\n\t\t\tcontinue\n\t\t}\n\t}\n\tif diags.HasErrors() {\n\t\t// Bail out early, then.\n\t\treturn nil, diags.Err()\n\t}\n\n\t// For each of the states, we add a node to handle the refresh/add to state.\n\t// \"n.states\" is populated by our own EvalTree with the result of\n\t// ImportState. Since DynamicExpand is always called after EvalTree, this\n\t// is safe.\n\tfor i, state := range n.states {\n\t\tg.Add(&graphNodeImportStateSub{\n\t\t\tTargetAddr:       addrs[i],\n\t\t\tState:            state,\n\t\t\tResolvedProvider: n.ResolvedProvider,\n\t\t})\n\t}\n\n\t// Root transform for a single root\n\tt := &RootTransformer{}\n\tif err := t.Transform(g); err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Done!\n\treturn g, diags.Err()\n}\n\n// graphNodeImportStateSub is the sub-node of graphNodeImportState\n// and is part of the subgraph. This node is responsible for refreshing\n// and adding a resource to the state once it is imported.\ntype graphNodeImportStateSub struct {\n\tTargetAddr       addrs.AbsResourceInstance\n\tState            providers.ImportedResource\n\tResolvedProvider addrs.AbsProviderConfig\n}\n\nvar (\n\t_ GraphNodeSubPath  = (*graphNodeImportStateSub)(nil)\n\t_ GraphNodeEvalable = (*graphNodeImportStateSub)(nil)\n)\n\nfunc (n *graphNodeImportStateSub) Name() string {\n\treturn fmt.Sprintf(\"import %s result\", n.TargetAddr)\n}\n\nfunc (n *graphNodeImportStateSub) Path() addrs.ModuleInstance {\n\treturn n.TargetAddr.Module\n}\n\n// GraphNodeEvalable impl.\nfunc (n *graphNodeImportStateSub) EvalTree() EvalNode {\n\t// If the Ephemeral type isn't set, then it is an error\n\tif n.State.TypeName == \"\" {\n\t\terr := fmt.Errorf(\"import of %s didn't set type\", n.TargetAddr.String())\n\t\treturn &EvalReturnError{Error: &err}\n\t}\n\n\tstate := n.State.AsInstanceObject()\n\n\tvar provider providers.Interface\n\tvar providerSchema *ProviderSchema\n\treturn &EvalSequence{\n\t\tNodes: []EvalNode{\n\t\t\t&EvalGetProvider{\n\t\t\t\tAddr:   n.ResolvedProvider,\n\t\t\t\tOutput: &provider,\n\t\t\t\tSchema: &providerSchema,\n\t\t\t},\n\t\t\t&EvalRefresh{\n\t\t\t\tAddr:           n.TargetAddr.Resource,\n\t\t\t\tProviderAddr:   n.ResolvedProvider,\n\t\t\t\tProvider:       &provider,\n\t\t\t\tProviderSchema: &providerSchema,\n\t\t\t\tState:          &state,\n\t\t\t\tOutput:         &state,\n\t\t\t},\n\t\t\t&EvalImportStateVerify{\n\t\t\t\tAddr:  n.TargetAddr.Resource,\n\t\t\t\tState: &state,\n\t\t\t},\n\t\t\t&EvalWriteState{\n\t\t\t\tAddr:           n.TargetAddr.Resource,\n\t\t\t\tProviderAddr:   n.ResolvedProvider,\n\t\t\t\tProviderSchema: &providerSchema,\n\t\t\t\tState:          &state,\n\t\t\t},\n\t\t},\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/transform_local.go",
    "content": "package terraform\n\nimport (\n\t\"github.com/hashicorp/terraform/configs\"\n)\n\n// LocalTransformer is a GraphTransformer that adds all the local values\n// from the configuration to the graph.\ntype LocalTransformer struct {\n\tConfig *configs.Config\n}\n\nfunc (t *LocalTransformer) Transform(g *Graph) error {\n\treturn t.transformModule(g, t.Config)\n}\n\nfunc (t *LocalTransformer) transformModule(g *Graph, c *configs.Config) error {\n\tif c == nil {\n\t\t// Can't have any locals if there's no config\n\t\treturn nil\n\t}\n\n\t// Our addressing system distinguishes between modules and module instances,\n\t// but we're not yet ready to make that distinction here (since we don't\n\t// support \"count\"/\"for_each\" on modules) and so we just do a naive\n\t// transform of the module path into a module instance path, assuming that\n\t// no keys are in use. This should be removed when \"count\" and \"for_each\"\n\t// are implemented for modules.\n\tpath := c.Path.UnkeyedInstanceShim()\n\n\tfor _, local := range c.Module.Locals {\n\t\taddr := path.LocalValue(local.Name)\n\t\tnode := &NodeLocal{\n\t\t\tAddr:   addr,\n\t\t\tConfig: local,\n\t\t}\n\t\tg.Add(node)\n\t}\n\n\t// Also populate locals for child modules\n\tfor _, cc := range c.Children {\n\t\tif err := t.transformModule(g, cc); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/transform_module_variable.go",
    "content": "package terraform\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/hashicorp/hcl2/hcl/hclsyntax\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n\t\"github.com/zclconf/go-cty/cty\"\n\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/hashicorp/terraform/configs\"\n)\n\n// ModuleVariableTransformer is a GraphTransformer that adds all the variables\n// in the configuration to the graph.\n//\n// Any \"variable\" block present in any non-root module is included here, even\n// if a particular variable is not referenced from anywhere.\n//\n// The transform will produce errors if a call to a module does not conform\n// to the expected set of arguments, but this transformer is not in a good\n// position to return errors and so the validate walk should include specific\n// steps for validating module blocks, separate from this transform.\ntype ModuleVariableTransformer struct {\n\tConfig *configs.Config\n}\n\nfunc (t *ModuleVariableTransformer) Transform(g *Graph) error {\n\treturn t.transform(g, nil, t.Config)\n}\n\nfunc (t *ModuleVariableTransformer) transform(g *Graph, parent, c *configs.Config) error {\n\t// We can have no variables if we have no configuration.\n\tif c == nil {\n\t\treturn nil\n\t}\n\n\t// Transform all the children first.\n\tfor _, cc := range c.Children {\n\t\tif err := t.transform(g, c, cc); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// If we're processing anything other than the root module then we'll\n\t// add graph nodes for variables defined inside. (Variables for the root\n\t// module are dealt with in RootVariableTransformer).\n\t// If we have a parent, we can determine if a module variable is being\n\t// used, so we transform this.\n\tif parent != nil {\n\t\tif err := t.transformSingle(g, parent, c); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (t *ModuleVariableTransformer) transformSingle(g *Graph, parent, c *configs.Config) error {\n\n\t// Our addressing system distinguishes between modules and module instances,\n\t// but we're not yet ready to make that distinction here (since we don't\n\t// support \"count\"/\"for_each\" on modules) and so we just do a naive\n\t// transform of the module path into a module instance path, assuming that\n\t// no keys are in use. This should be removed when \"count\" and \"for_each\"\n\t// are implemented for modules.\n\tpath := c.Path.UnkeyedInstanceShim()\n\t_, call := path.Call()\n\n\t// Find the call in the parent module configuration, so we can get the\n\t// expressions given for each input variable at the call site.\n\tcallConfig, exists := parent.Module.ModuleCalls[call.Name]\n\tif !exists {\n\t\t// This should never happen, since it indicates an improperly-constructed\n\t\t// configuration tree.\n\t\tpanic(fmt.Errorf(\"no module call block found for %s\", path))\n\t}\n\n\t// We need to construct a schema for the expected call arguments based on\n\t// the configured variables in our config, which we can then use to\n\t// decode the content of the call block.\n\tschema := &hcl.BodySchema{}\n\tfor _, v := range c.Module.Variables {\n\t\tschema.Attributes = append(schema.Attributes, hcl.AttributeSchema{\n\t\t\tName:     v.Name,\n\t\t\tRequired: v.Default == cty.NilVal,\n\t\t})\n\t}\n\n\tcontent, contentDiags := callConfig.Config.Content(schema)\n\tif contentDiags.HasErrors() {\n\t\t// Validation code elsewhere should deal with any errors before we\n\t\t// get in here, but we'll report them out here just in case, to\n\t\t// avoid crashes.\n\t\tvar diags tfdiags.Diagnostics\n\t\tdiags = diags.Append(contentDiags)\n\t\treturn diags.Err()\n\t}\n\n\tfor _, v := range c.Module.Variables {\n\t\tvar expr hcl.Expression\n\t\tif attr := content.Attributes[v.Name]; attr != nil {\n\t\t\texpr = attr.Expr\n\t\t} else {\n\t\t\t// No expression provided for this variable, so we'll make a\n\t\t\t// synthetic one using the variable's default value.\n\t\t\texpr = &hclsyntax.LiteralValueExpr{\n\t\t\t\tVal:      v.Default,\n\t\t\t\tSrcRange: v.DeclRange, // This is not exact, but close enough\n\t\t\t}\n\t\t}\n\n\t\t// For now we treat all module variables as \"applyable\", even though\n\t\t// such nodes are valid to use on other walks too. We may specialize\n\t\t// this in future if we find reasons to employ different behaviors\n\t\t// in different scenarios.\n\t\tnode := &NodeApplyableModuleVariable{\n\t\t\tAddr:   path.InputVariable(v.Name),\n\t\t\tConfig: v,\n\t\t\tExpr:   expr,\n\t\t}\n\t\tg.Add(node)\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/transform_orphan_count.go",
    "content": "package terraform\n\nimport (\n\t\"log\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/dag\"\n\t\"github.com/hashicorp/terraform/states\"\n)\n\n// OrphanResourceCountTransformer is a GraphTransformer that adds orphans\n// for an expanded count to the graph. The determination of this depends\n// on the count argument given.\n//\n// Orphans are found by comparing the count to what is found in the state.\n// This transform assumes that if an element in the state is within the count\n// bounds given, that it is not an orphan.\ntype OrphanResourceCountTransformer struct {\n\tConcrete ConcreteResourceInstanceNodeFunc\n\n\tCount int               // Actual count of the resource, or -1 if count is not set at all\n\tAddr  addrs.AbsResource // Addr of the resource to look for orphans\n\tState *states.State     // Full global state\n}\n\nfunc (t *OrphanResourceCountTransformer) Transform(g *Graph) error {\n\trs := t.State.Resource(t.Addr)\n\tif rs == nil {\n\t\treturn nil // Resource doesn't exist in state, so nothing to do!\n\t}\n\n\thaveKeys := make(map[addrs.InstanceKey]struct{})\n\tfor key := range rs.Instances {\n\t\thaveKeys[key] = struct{}{}\n\t}\n\n\tif t.Count < 0 {\n\t\treturn t.transformNoCount(haveKeys, g)\n\t}\n\tif t.Count == 0 {\n\t\treturn t.transformZeroCount(haveKeys, g)\n\t}\n\treturn t.transformCount(haveKeys, g)\n}\n\nfunc (t *OrphanResourceCountTransformer) transformCount(haveKeys map[addrs.InstanceKey]struct{}, g *Graph) error {\n\t// Due to the logic in Transform, we only get in here if our count is\n\t// at least one.\n\n\t_, have0Key := haveKeys[addrs.IntKey(0)]\n\n\tfor key := range haveKeys {\n\t\tif key == addrs.NoKey && !have0Key {\n\t\t\t// If we have no 0-key then we will accept a no-key instance\n\t\t\t// as an alias for it.\n\t\t\tcontinue\n\t\t}\n\n\t\ti, isInt := key.(addrs.IntKey)\n\t\tif isInt && int(i) < t.Count {\n\t\t\tcontinue\n\t\t}\n\n\t\tabstract := NewNodeAbstractResourceInstance(t.Addr.Instance(key))\n\t\tvar node dag.Vertex = abstract\n\t\tif f := t.Concrete; f != nil {\n\t\t\tnode = f(abstract)\n\t\t}\n\t\tlog.Printf(\"[TRACE] OrphanResourceCount(non-zero): adding %s as %T\", t.Addr, node)\n\t\tg.Add(node)\n\t}\n\n\treturn nil\n}\n\nfunc (t *OrphanResourceCountTransformer) transformZeroCount(haveKeys map[addrs.InstanceKey]struct{}, g *Graph) error {\n\t// This case is easy: we need to orphan any keys we have at all.\n\n\tfor key := range haveKeys {\n\t\tabstract := NewNodeAbstractResourceInstance(t.Addr.Instance(key))\n\t\tvar node dag.Vertex = abstract\n\t\tif f := t.Concrete; f != nil {\n\t\t\tnode = f(abstract)\n\t\t}\n\t\tlog.Printf(\"[TRACE] OrphanResourceCount(zero): adding %s as %T\", t.Addr, node)\n\t\tg.Add(node)\n\t}\n\n\treturn nil\n}\n\nfunc (t *OrphanResourceCountTransformer) transformNoCount(haveKeys map[addrs.InstanceKey]struct{}, g *Graph) error {\n\t// Negative count indicates that count is not set at all, in which\n\t// case we expect to have a single instance with no key set at all.\n\t// However, we'll also accept an instance with key 0 set as an alias\n\t// for it, in case the user has just deleted the \"count\" argument and\n\t// so wants to keep the first instance in the set.\n\n\t_, haveNoKey := haveKeys[addrs.NoKey]\n\t_, have0Key := haveKeys[addrs.IntKey(0)]\n\tkeepKey := addrs.NoKey\n\tif have0Key && !haveNoKey {\n\t\t// If we don't have a no-key instance then we can use the 0-key instance\n\t\t// instead.\n\t\tkeepKey = addrs.IntKey(0)\n\t}\n\n\tfor key := range haveKeys {\n\t\tif key == keepKey {\n\t\t\tcontinue\n\t\t}\n\n\t\tabstract := NewNodeAbstractResourceInstance(t.Addr.Instance(key))\n\t\tvar node dag.Vertex = abstract\n\t\tif f := t.Concrete; f != nil {\n\t\t\tnode = f(abstract)\n\t\t}\n\t\tlog.Printf(\"[TRACE] OrphanResourceCount(no-count): adding %s as %T\", t.Addr, node)\n\t\tg.Add(node)\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/transform_orphan_output.go",
    "content": "package terraform\n\nimport (\n\t\"log\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/configs\"\n\t\"github.com/hashicorp/terraform/states\"\n)\n\n// OrphanOutputTransformer finds the outputs that aren't present\n// in the given config that are in the state and adds them to the graph\n// for deletion.\ntype OrphanOutputTransformer struct {\n\tConfig *configs.Config // Root of config tree\n\tState  *states.State   // State is the root state\n}\n\nfunc (t *OrphanOutputTransformer) Transform(g *Graph) error {\n\tif t.State == nil {\n\t\tlog.Printf(\"[DEBUG] No state, no orphan outputs\")\n\t\treturn nil\n\t}\n\n\tfor _, ms := range t.State.Modules {\n\t\tif err := t.transform(g, ms); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (t *OrphanOutputTransformer) transform(g *Graph, ms *states.Module) error {\n\tif ms == nil {\n\t\treturn nil\n\t}\n\n\tmoduleAddr := ms.Addr\n\n\t// Get the config for this path, which is nil if the entire module has been\n\t// removed.\n\tvar outputs map[string]*configs.Output\n\tif c := t.Config.DescendentForInstance(moduleAddr); c != nil {\n\t\toutputs = c.Module.Outputs\n\t}\n\n\t// An output is \"orphaned\" if it's present in the state but not declared\n\t// in the configuration.\n\tfor name := range ms.OutputValues {\n\t\tif _, exists := outputs[name]; exists {\n\t\t\tcontinue\n\t\t}\n\n\t\tg.Add(&NodeOutputOrphan{\n\t\t\tAddr: addrs.OutputValue{Name: name}.Absolute(moduleAddr),\n\t\t})\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/transform_orphan_resource.go",
    "content": "package terraform\n\nimport (\n\t\"log\"\n\n\t\"github.com/hashicorp/terraform/configs\"\n\t\"github.com/hashicorp/terraform/dag\"\n\t\"github.com/hashicorp/terraform/states\"\n)\n\n// OrphanResourceInstanceTransformer is a GraphTransformer that adds orphaned\n// resource instances to the graph. An \"orphan\" is an instance that is present\n// in the state but belongs to a resource that is no longer present in the\n// configuration.\n//\n// This is not the transformer that deals with \"count orphans\" (instances that\n// are no longer covered by a resource's \"count\" or \"for_each\" setting); that's\n// handled instead by OrphanResourceCountTransformer.\ntype OrphanResourceInstanceTransformer struct {\n\tConcrete ConcreteResourceInstanceNodeFunc\n\n\t// State is the global state. We require the global state to\n\t// properly find module orphans at our path.\n\tState *states.State\n\n\t// Config is the root node in the configuration tree. We'll look up\n\t// the appropriate note in this tree using the path in each node.\n\tConfig *configs.Config\n}\n\nfunc (t *OrphanResourceInstanceTransformer) Transform(g *Graph) error {\n\tif t.State == nil {\n\t\t// If the entire state is nil, there can't be any orphans\n\t\treturn nil\n\t}\n\tif t.Config == nil {\n\t\t// Should never happen: we can't be doing any Terraform operations\n\t\t// without at least an empty configuration.\n\t\tpanic(\"OrphanResourceInstanceTransformer used without setting Config\")\n\t}\n\n\t// Go through the modules and for each module transform in order\n\t// to add the orphan.\n\tfor _, ms := range t.State.Modules {\n\t\tif err := t.transform(g, ms); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (t *OrphanResourceInstanceTransformer) transform(g *Graph, ms *states.Module) error {\n\tif ms == nil {\n\t\treturn nil\n\t}\n\n\tmoduleAddr := ms.Addr\n\n\t// Get the configuration for this module. The configuration might be\n\t// nil if the module was removed from the configuration. This is okay,\n\t// this just means that every resource is an orphan.\n\tvar m *configs.Module\n\tif c := t.Config.DescendentForInstance(moduleAddr); c != nil {\n\t\tm = c.Module\n\t}\n\n\t// An \"orphan\" is a resource that is in the state but not the configuration,\n\t// so we'll walk the state resources and try to correlate each of them\n\t// with a configuration block. Each orphan gets a node in the graph whose\n\t// type is decided by t.Concrete.\n\t//\n\t// We don't handle orphans related to changes in the \"count\" and \"for_each\"\n\t// pseudo-arguments here. They are handled by OrphanResourceCountTransformer.\n\tfor _, rs := range ms.Resources {\n\t\tif m != nil {\n\t\t\tif r := m.ResourceByAddr(rs.Addr); r != nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\tfor key := range rs.Instances {\n\t\t\taddr := rs.Addr.Instance(key).Absolute(moduleAddr)\n\t\t\tabstract := NewNodeAbstractResourceInstance(addr)\n\t\t\tvar node dag.Vertex = abstract\n\t\t\tif f := t.Concrete; f != nil {\n\t\t\t\tnode = f(abstract)\n\t\t\t}\n\t\t\tlog.Printf(\"[TRACE] OrphanResourceInstanceTransformer: adding single-instance orphan node for %s\", addr)\n\t\t\tg.Add(node)\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// OrphanResourceTransformer is a GraphTransformer that adds orphaned\n// resources to the graph. An \"orphan\" is a resource that is present in\n// the state but no longer present in the config.\n//\n// This is separate to OrphanResourceInstanceTransformer in that it deals with\n// whole resources, rather than individual instances of resources. Orphan\n// resource nodes are only used during apply to clean up leftover empty\n// resource state skeletons, after all of the instances inside have been\n// removed.\n//\n// This transformer will also create edges in the graph to any pre-existing\n// node that creates or destroys the entire orphaned resource or any of its\n// instances, to ensure that the \"orphan-ness\" of a resource is always dealt\n// with after all other aspects of it.\ntype OrphanResourceTransformer struct {\n\tConcrete ConcreteResourceNodeFunc\n\n\t// State is the global state.\n\tState *states.State\n\n\t// Config is the root node in the configuration tree.\n\tConfig *configs.Config\n}\n\nfunc (t *OrphanResourceTransformer) Transform(g *Graph) error {\n\tif t.State == nil {\n\t\t// If the entire state is nil, there can't be any orphans\n\t\treturn nil\n\t}\n\tif t.Config == nil {\n\t\t// Should never happen: we can't be doing any Terraform operations\n\t\t// without at least an empty configuration.\n\t\tpanic(\"OrphanResourceTransformer used without setting Config\")\n\t}\n\n\t// We'll first collect up the existing nodes for each resource so we can\n\t// create dependency edges for any new nodes we create.\n\tdeps := map[string][]dag.Vertex{}\n\tfor _, v := range g.Vertices() {\n\t\tswitch tv := v.(type) {\n\t\tcase GraphNodeResourceInstance:\n\t\t\tk := tv.ResourceInstanceAddr().ContainingResource().String()\n\t\t\tdeps[k] = append(deps[k], v)\n\t\tcase GraphNodeResource:\n\t\t\tk := tv.ResourceAddr().String()\n\t\t\tdeps[k] = append(deps[k], v)\n\t\tcase GraphNodeDestroyer:\n\t\t\tk := tv.DestroyAddr().ContainingResource().String()\n\t\t\tdeps[k] = append(deps[k], v)\n\t\t}\n\t}\n\n\tfor _, ms := range t.State.Modules {\n\t\tmoduleAddr := ms.Addr\n\n\t\tmc := t.Config.DescendentForInstance(moduleAddr) // might be nil if whole module has been removed\n\n\t\tfor _, rs := range ms.Resources {\n\t\t\tif mc != nil {\n\t\t\t\tif r := mc.Module.ResourceByAddr(rs.Addr); r != nil {\n\t\t\t\t\t// It's in the config, so nothing to do for this one.\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\n\t\t\taddr := rs.Addr.Absolute(moduleAddr)\n\t\t\tabstract := NewNodeAbstractResource(addr)\n\t\t\tvar node dag.Vertex = abstract\n\t\t\tif f := t.Concrete; f != nil {\n\t\t\t\tnode = f(abstract)\n\t\t\t}\n\t\t\tlog.Printf(\"[TRACE] OrphanResourceTransformer: adding whole-resource orphan node for %s\", addr)\n\t\t\tg.Add(node)\n\t\t\tfor _, dn := range deps[addr.String()] {\n\t\t\t\tlog.Printf(\"[TRACE] OrphanResourceTransformer: node %q depends on %q\", dag.VertexName(node), dag.VertexName(dn))\n\t\t\t\tg.Connect(dag.BasicEdge(node, dn))\n\t\t\t}\n\t\t}\n\t}\n\n\treturn nil\n\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/transform_output.go",
    "content": "package terraform\n\nimport (\n\t\"log\"\n\n\t\"github.com/hashicorp/terraform/configs\"\n\t\"github.com/hashicorp/terraform/dag\"\n)\n\n// OutputTransformer is a GraphTransformer that adds all the outputs\n// in the configuration to the graph.\n//\n// This is done for the apply graph builder even if dependent nodes\n// aren't changing since there is no downside: the state will be available\n// even if the dependent items aren't changing.\ntype OutputTransformer struct {\n\tConfig *configs.Config\n}\n\nfunc (t *OutputTransformer) Transform(g *Graph) error {\n\treturn t.transform(g, t.Config)\n}\n\nfunc (t *OutputTransformer) transform(g *Graph, c *configs.Config) error {\n\t// If we have no config then there can be no outputs.\n\tif c == nil {\n\t\treturn nil\n\t}\n\n\t// Transform all the children. We must do this first because\n\t// we can reference module outputs and they must show up in the\n\t// reference map.\n\tfor _, cc := range c.Children {\n\t\tif err := t.transform(g, cc); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// Our addressing system distinguishes between modules and module instances,\n\t// but we're not yet ready to make that distinction here (since we don't\n\t// support \"count\"/\"for_each\" on modules) and so we just do a naive\n\t// transform of the module path into a module instance path, assuming that\n\t// no keys are in use. This should be removed when \"count\" and \"for_each\"\n\t// are implemented for modules.\n\tpath := c.Path.UnkeyedInstanceShim()\n\n\tfor _, o := range c.Module.Outputs {\n\t\taddr := path.OutputValue(o.Name)\n\t\tnode := &NodeApplyableOutput{\n\t\t\tAddr:   addr,\n\t\t\tConfig: o,\n\t\t}\n\t\tg.Add(node)\n\t}\n\n\treturn nil\n}\n\n// DestroyOutputTransformer is a GraphTransformer that adds nodes to delete\n// outputs during destroy. We need to do this to ensure that no stale outputs\n// are ever left in the state.\ntype DestroyOutputTransformer struct {\n}\n\nfunc (t *DestroyOutputTransformer) Transform(g *Graph) error {\n\tfor _, v := range g.Vertices() {\n\t\toutput, ok := v.(*NodeApplyableOutput)\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\n\t\t// create the destroy node for this output\n\t\tnode := &NodeDestroyableOutput{\n\t\t\tAddr:   output.Addr,\n\t\t\tConfig: output.Config,\n\t\t}\n\n\t\tlog.Printf(\"[TRACE] creating %s\", node.Name())\n\t\tg.Add(node)\n\n\t\tdeps, err := g.Descendents(v)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// the destroy node must depend on the eval node\n\t\tdeps.Add(v)\n\n\t\tfor _, d := range deps.List() {\n\t\t\tlog.Printf(\"[TRACE] %s depends on %s\", node.Name(), dag.VertexName(d))\n\t\t\tg.Connect(dag.BasicEdge(node, d))\n\t\t}\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/transform_provider.go",
    "content": "package terraform\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/configs\"\n\t\"github.com/hashicorp/terraform/dag\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n)\n\nfunc TransformProviders(providers []string, concrete ConcreteProviderNodeFunc, config *configs.Config) GraphTransformer {\n\treturn GraphTransformMulti(\n\t\t// Add providers from the config\n\t\t&ProviderConfigTransformer{\n\t\t\tConfig:    config,\n\t\t\tProviders: providers,\n\t\t\tConcrete:  concrete,\n\t\t},\n\t\t// Add any remaining missing providers\n\t\t&MissingProviderTransformer{\n\t\t\tProviders: providers,\n\t\t\tConcrete:  concrete,\n\t\t},\n\t\t// Connect the providers\n\t\t&ProviderTransformer{\n\t\t\tConfig: config,\n\t\t},\n\t\t// Remove unused providers and proxies\n\t\t&PruneProviderTransformer{},\n\t\t// Connect provider to their parent provider nodes\n\t\t&ParentProviderTransformer{},\n\t)\n}\n\n// GraphNodeProvider is an interface that nodes that can be a provider\n// must implement.\n//\n// ProviderAddr returns the address of the provider configuration this\n// satisfies, which is relative to the path returned by method Path().\n//\n// Name returns the full name of the provider in the config.\ntype GraphNodeProvider interface {\n\tGraphNodeSubPath\n\tProviderAddr() addrs.AbsProviderConfig\n\tName() string\n}\n\n// GraphNodeCloseProvider is an interface that nodes that can be a close\n// provider must implement. The CloseProviderName returned is the name of\n// the provider they satisfy.\ntype GraphNodeCloseProvider interface {\n\tGraphNodeSubPath\n\tCloseProviderAddr() addrs.AbsProviderConfig\n}\n\n// GraphNodeProviderConsumer is an interface that nodes that require\n// a provider must implement. ProvidedBy must return the address of the provider\n// to use, which will be resolved to a configuration either in the same module\n// or in an ancestor module, with the resulting absolute address passed to\n// SetProvider.\ntype GraphNodeProviderConsumer interface {\n\t// ProvidedBy returns the address of the provider configuration the node\n\t// refers to. If the returned \"exact\" value is true, this address will\n\t// be taken exactly. If \"exact\" is false, a provider configuration from\n\t// an ancestor module may be selected instead.\n\tProvidedBy() (addr addrs.AbsProviderConfig, exact bool)\n\t// Set the resolved provider address for this resource.\n\tSetProvider(addrs.AbsProviderConfig)\n}\n\n// ProviderTransformer is a GraphTransformer that maps resources to\n// providers within the graph. This will error if there are any resources\n// that don't map to proper resources.\ntype ProviderTransformer struct {\n\tConfig *configs.Config\n}\n\nfunc (t *ProviderTransformer) Transform(g *Graph) error {\n\t// We need to find a provider configuration address for each resource\n\t// either directly represented by a node or referenced by a node in\n\t// the graph, and then create graph edges from provider to provider user\n\t// so that the providers will get initialized first.\n\n\tvar diags tfdiags.Diagnostics\n\n\t// To start, we'll collect the _requested_ provider addresses for each\n\t// node, which we'll then resolve (handling provider inheritence, etc) in\n\t// the next step.\n\t// Our \"requested\" map is from graph vertices to string representations of\n\t// provider config addresses (for deduping) to requests.\n\ttype ProviderRequest struct {\n\t\tAddr  addrs.AbsProviderConfig\n\t\tExact bool // If true, inheritence from parent modules is not attempted\n\t}\n\trequested := map[dag.Vertex]map[string]ProviderRequest{}\n\tneedConfigured := map[string]addrs.AbsProviderConfig{}\n\tfor _, v := range g.Vertices() {\n\n\t\t// Does the vertex _directly_ use a provider?\n\t\tif pv, ok := v.(GraphNodeProviderConsumer); ok {\n\t\t\trequested[v] = make(map[string]ProviderRequest)\n\n\t\t\tp, exact := pv.ProvidedBy()\n\t\t\tif exact {\n\t\t\t\tlog.Printf(\"[TRACE] ProviderTransformer: %s is provided by %s exactly\", dag.VertexName(v), p)\n\t\t\t} else {\n\t\t\t\tlog.Printf(\"[TRACE] ProviderTransformer: %s is provided by %s or inherited equivalent\", dag.VertexName(v), p)\n\t\t\t}\n\n\t\t\trequested[v][p.String()] = ProviderRequest{\n\t\t\t\tAddr:  p,\n\t\t\t\tExact: exact,\n\t\t\t}\n\n\t\t\t// Direct references need the provider configured as well as initialized\n\t\t\tneedConfigured[p.String()] = p\n\t\t}\n\t}\n\n\t// Now we'll go through all the requested addresses we just collected and\n\t// figure out which _actual_ config address each belongs to, after resolving\n\t// for provider inheritance and passing.\n\tm := providerVertexMap(g)\n\tfor v, reqs := range requested {\n\t\tfor key, req := range reqs {\n\t\t\tp := req.Addr\n\t\t\ttarget := m[key]\n\n\t\t\t_, ok := v.(GraphNodeSubPath)\n\t\t\tif !ok && target == nil {\n\t\t\t\t// No target and no path to traverse up from\n\t\t\t\tdiags = diags.Append(fmt.Errorf(\"%s: provider %s couldn't be found\", dag.VertexName(v), p))\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif target != nil {\n\t\t\t\tlog.Printf(\"[TRACE] ProviderTransformer: exact match for %s serving %s\", p, dag.VertexName(v))\n\t\t\t}\n\n\t\t\t// if we don't have a provider at this level, walk up the path looking for one,\n\t\t\t// unless we were told to be exact.\n\t\t\tif target == nil && !req.Exact {\n\t\t\t\tfor pp, ok := p.Inherited(); ok; pp, ok = pp.Inherited() {\n\t\t\t\t\tkey := pp.String()\n\t\t\t\t\ttarget = m[key]\n\t\t\t\t\tif target != nil {\n\t\t\t\t\t\tlog.Printf(\"[TRACE] ProviderTransformer: %s uses inherited configuration %s\", dag.VertexName(v), pp)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\tlog.Printf(\"[TRACE] ProviderTransformer: looking for %s to serve %s\", pp, dag.VertexName(v))\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// If this provider doesn't need to be configured then we can just\n\t\t\t// stub it out with an init-only provider node, which will just\n\t\t\t// start up the provider and fetch its schema.\n\t\t\tif _, exists := needConfigured[key]; target == nil && !exists {\n\t\t\t\tstubAddr := p.ProviderConfig.Absolute(addrs.RootModuleInstance)\n\t\t\t\tstub := &NodeEvalableProvider{\n\t\t\t\t\t&NodeAbstractProvider{\n\t\t\t\t\t\tAddr: stubAddr,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\tm[stubAddr.String()] = stub\n\t\t\t\tlog.Printf(\"[TRACE] ProviderTransformer: creating init-only node for %s\", stubAddr)\n\t\t\t\ttarget = stub\n\t\t\t\tg.Add(target)\n\t\t\t}\n\n\t\t\tif target == nil {\n\t\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\t\ttfdiags.Error,\n\t\t\t\t\t\"Provider configuration not present\",\n\t\t\t\t\tfmt.Sprintf(\n\t\t\t\t\t\t\"To work with %s its original provider configuration at %s is required, but it has been removed. This occurs when a provider configuration is removed while objects created by that provider still exist in the state. Re-add the provider configuration to destroy %s, after which you can remove the provider configuration again.\",\n\t\t\t\t\t\tdag.VertexName(v), p, dag.VertexName(v),\n\t\t\t\t\t),\n\t\t\t\t))\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\t// see if this in  an inherited provider\n\t\t\tif p, ok := target.(*graphNodeProxyProvider); ok {\n\t\t\t\tg.Remove(p)\n\t\t\t\ttarget = p.Target()\n\t\t\t\tkey = target.(GraphNodeProvider).ProviderAddr().String()\n\t\t\t}\n\n\t\t\tlog.Printf(\"[DEBUG] ProviderTransformer: %q (%T) needs %s\", dag.VertexName(v), v, dag.VertexName(target))\n\t\t\tif pv, ok := v.(GraphNodeProviderConsumer); ok {\n\t\t\t\tpv.SetProvider(target.ProviderAddr())\n\t\t\t}\n\t\t\tg.Connect(dag.BasicEdge(v, target))\n\t\t}\n\t}\n\n\treturn diags.Err()\n}\n\n// CloseProviderTransformer is a GraphTransformer that adds nodes to the\n// graph that will close open provider connections that aren't needed anymore.\n// A provider connection is not needed anymore once all depended resources\n// in the graph are evaluated.\ntype CloseProviderTransformer struct{}\n\nfunc (t *CloseProviderTransformer) Transform(g *Graph) error {\n\tpm := providerVertexMap(g)\n\tcpm := make(map[string]*graphNodeCloseProvider)\n\tvar err error\n\n\tfor _, v := range pm {\n\t\tp := v.(GraphNodeProvider)\n\t\tkey := p.ProviderAddr().String()\n\n\t\t// get the close provider of this type if we alread created it\n\t\tcloser := cpm[key]\n\n\t\tif closer == nil {\n\t\t\t// create a closer for this provider type\n\t\t\tcloser = &graphNodeCloseProvider{Addr: p.ProviderAddr()}\n\t\t\tg.Add(closer)\n\t\t\tcpm[key] = closer\n\t\t}\n\n\t\t// Close node depends on the provider itself\n\t\t// this is added unconditionally, so it will connect to all instances\n\t\t// of the provider. Extra edges will be removed by transitive\n\t\t// reduction.\n\t\tg.Connect(dag.BasicEdge(closer, p))\n\n\t\t// connect all the provider's resources to the close node\n\t\tfor _, s := range g.UpEdges(p).List() {\n\t\t\tif _, ok := s.(GraphNodeProviderConsumer); ok {\n\t\t\t\tg.Connect(dag.BasicEdge(closer, s))\n\t\t\t}\n\t\t}\n\t}\n\n\treturn err\n}\n\n// MissingProviderTransformer is a GraphTransformer that adds to the graph\n// a node for each default provider configuration that is referenced by another\n// node but not already present in the graph.\n//\n// These \"default\" nodes are always added to the root module, regardless of\n// where they are requested. This is important because our inheritance\n// resolution behavior in ProviderTransformer will then treat these as a\n// last-ditch fallback after walking up the tree, rather than preferring them\n// as it would if they were placed in the same module as the requester.\n//\n// This transformer may create extra nodes that are not needed in practice,\n// due to overriding provider configurations in child modules.\n// PruneProviderTransformer can then remove these once ProviderTransformer\n// has resolved all of the inheritence, etc.\ntype MissingProviderTransformer struct {\n\t// Providers is the list of providers we support.\n\tProviders []string\n\n\t// Concrete, if set, overrides how the providers are made.\n\tConcrete ConcreteProviderNodeFunc\n}\n\nfunc (t *MissingProviderTransformer) Transform(g *Graph) error {\n\t// Initialize factory\n\tif t.Concrete == nil {\n\t\tt.Concrete = func(a *NodeAbstractProvider) dag.Vertex {\n\t\t\treturn a\n\t\t}\n\t}\n\n\tvar err error\n\tm := providerVertexMap(g)\n\tfor _, v := range g.Vertices() {\n\t\tpv, ok := v.(GraphNodeProviderConsumer)\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\n\t\t// For our work here we actually care only about the provider type and\n\t\t// we plan to place all default providers in the root module, and so\n\t\t// it's safe for us to rely on ProvidedBy here rather than waiting for\n\t\t// the later proper resolution of provider inheritance done by\n\t\t// ProviderTransformer.\n\t\tp, _ := pv.ProvidedBy()\n\t\tif p.ProviderConfig.Alias != \"\" {\n\t\t\t// We do not create default aliased configurations.\n\t\t\tlog.Println(\"[TRACE] MissingProviderTransformer: skipping implication of aliased config\", p)\n\t\t\tcontinue\n\t\t}\n\n\t\t// We're going to create an implicit _default_ configuration for the\n\t\t// referenced provider type in the _root_ module, ignoring all other\n\t\t// aspects of the resource's declared provider address.\n\t\tdefaultAddr := addrs.RootModuleInstance.ProviderConfigDefault(p.ProviderConfig.Type)\n\t\tkey := defaultAddr.String()\n\t\tprovider := m[key]\n\n\t\tif provider != nil {\n\t\t\t// There's already an explicit default configuration for this\n\t\t\t// provider type in the root module, so we have nothing to do.\n\t\t\tcontinue\n\t\t}\n\n\t\tlog.Printf(\"[DEBUG] adding implicit provider configuration %s, implied first by %s\", defaultAddr, dag.VertexName(v))\n\n\t\t// create the missing top-level provider\n\t\tprovider = t.Concrete(&NodeAbstractProvider{\n\t\t\tAddr: defaultAddr,\n\t\t}).(GraphNodeProvider)\n\n\t\tg.Add(provider)\n\t\tm[key] = provider\n\t}\n\n\treturn err\n}\n\n// ParentProviderTransformer connects provider nodes to their parents.\n//\n// This works by finding nodes that are both GraphNodeProviders and\n// GraphNodeSubPath. It then connects the providers to their parent\n// path. The parent provider is always at the root level.\ntype ParentProviderTransformer struct{}\n\nfunc (t *ParentProviderTransformer) Transform(g *Graph) error {\n\tpm := providerVertexMap(g)\n\tfor _, v := range g.Vertices() {\n\t\t// Only care about providers\n\t\tpn, ok := v.(GraphNodeProvider)\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Also require non-empty path, since otherwise we're in the root\n\t\t// module and so cannot have a parent.\n\t\tif len(pn.Path()) <= 1 {\n\t\t\tcontinue\n\t\t}\n\n\t\t// this provider may be disabled, but we can only get it's name from\n\t\t// the ProviderName string\n\t\taddr := pn.ProviderAddr()\n\t\tparentAddr, ok := addr.Inherited()\n\t\tif ok {\n\t\t\tparent := pm[parentAddr.String()]\n\t\t\tif parent != nil {\n\t\t\t\tg.Connect(dag.BasicEdge(v, parent))\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\n// PruneProviderTransformer removes any providers that are not actually used by\n// anything, and provider proxies. This avoids the provider being initialized\n// and configured.  This both saves resources but also avoids errors since\n// configuration may imply initialization which may require auth.\ntype PruneProviderTransformer struct{}\n\nfunc (t *PruneProviderTransformer) Transform(g *Graph) error {\n\tfor _, v := range g.Vertices() {\n\t\t// We only care about providers\n\t\t_, ok := v.(GraphNodeProvider)\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\n\t\t// ProxyProviders will have up edges, but we're now done with them in the graph\n\t\tif _, ok := v.(*graphNodeProxyProvider); ok {\n\t\t\tlog.Printf(\"[DEBUG] pruning proxy %s\", dag.VertexName(v))\n\t\t\tg.Remove(v)\n\t\t}\n\n\t\t// Remove providers with no dependencies.\n\t\tif g.UpEdges(v).Len() == 0 {\n\t\t\tlog.Printf(\"[DEBUG] pruning unused %s\", dag.VertexName(v))\n\t\t\tg.Remove(v)\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc providerVertexMap(g *Graph) map[string]GraphNodeProvider {\n\tm := make(map[string]GraphNodeProvider)\n\tfor _, v := range g.Vertices() {\n\t\tif pv, ok := v.(GraphNodeProvider); ok {\n\t\t\taddr := pv.ProviderAddr()\n\t\t\tm[addr.String()] = pv\n\t\t}\n\t}\n\n\treturn m\n}\n\nfunc closeProviderVertexMap(g *Graph) map[string]GraphNodeCloseProvider {\n\tm := make(map[string]GraphNodeCloseProvider)\n\tfor _, v := range g.Vertices() {\n\t\tif pv, ok := v.(GraphNodeCloseProvider); ok {\n\t\t\taddr := pv.CloseProviderAddr()\n\t\t\tm[addr.String()] = pv\n\t\t}\n\t}\n\n\treturn m\n}\n\ntype graphNodeCloseProvider struct {\n\tAddr addrs.AbsProviderConfig\n}\n\nvar (\n\t_ GraphNodeCloseProvider = (*graphNodeCloseProvider)(nil)\n)\n\nfunc (n *graphNodeCloseProvider) Name() string {\n\treturn n.Addr.String() + \" (close)\"\n}\n\n// GraphNodeSubPath impl.\nfunc (n *graphNodeCloseProvider) Path() addrs.ModuleInstance {\n\treturn n.Addr.Module\n}\n\n// GraphNodeEvalable impl.\nfunc (n *graphNodeCloseProvider) EvalTree() EvalNode {\n\treturn CloseProviderEvalTree(n.Addr)\n}\n\n// GraphNodeDependable impl.\nfunc (n *graphNodeCloseProvider) DependableName() []string {\n\treturn []string{n.Name()}\n}\n\nfunc (n *graphNodeCloseProvider) CloseProviderAddr() addrs.AbsProviderConfig {\n\treturn n.Addr\n}\n\n// GraphNodeDotter impl.\nfunc (n *graphNodeCloseProvider) DotNode(name string, opts *dag.DotOpts) *dag.DotNode {\n\tif !opts.Verbose {\n\t\treturn nil\n\t}\n\treturn &dag.DotNode{\n\t\tName: name,\n\t\tAttrs: map[string]string{\n\t\t\t\"label\": n.Name(),\n\t\t\t\"shape\": \"diamond\",\n\t\t},\n\t}\n}\n\n// RemovableIfNotTargeted\nfunc (n *graphNodeCloseProvider) RemoveIfNotTargeted() bool {\n\t// We need to add this so that this node will be removed if\n\t// it isn't targeted or a dependency of a target.\n\treturn true\n}\n\n// graphNodeProxyProvider is a GraphNodeProvider implementation that is used to\n// store the name and value of a provider node for inheritance between modules.\n// These nodes are only used to store the data while loading the provider\n// configurations, and are removed after all the resources have been connected\n// to their providers.\ntype graphNodeProxyProvider struct {\n\taddr   addrs.AbsProviderConfig\n\ttarget GraphNodeProvider\n}\n\nvar (\n\t_ GraphNodeProvider = (*graphNodeProxyProvider)(nil)\n)\n\nfunc (n *graphNodeProxyProvider) ProviderAddr() addrs.AbsProviderConfig {\n\treturn n.addr\n}\n\nfunc (n *graphNodeProxyProvider) Path() addrs.ModuleInstance {\n\treturn n.addr.Module\n}\n\nfunc (n *graphNodeProxyProvider) Name() string {\n\treturn n.addr.String() + \" (proxy)\"\n}\n\n// find the concrete provider instance\nfunc (n *graphNodeProxyProvider) Target() GraphNodeProvider {\n\tswitch t := n.target.(type) {\n\tcase *graphNodeProxyProvider:\n\t\treturn t.Target()\n\tdefault:\n\t\treturn n.target\n\t}\n}\n\n// ProviderConfigTransformer adds all provider nodes from the configuration and\n// attaches the configs.\ntype ProviderConfigTransformer struct {\n\tProviders []string\n\tConcrete  ConcreteProviderNodeFunc\n\n\t// each provider node is stored here so that the proxy nodes can look up\n\t// their targets by name.\n\tproviders map[string]GraphNodeProvider\n\t// record providers that can be overriden with a proxy\n\tproxiable map[string]bool\n\n\t// Config is the root node of the configuration tree to add providers from.\n\tConfig *configs.Config\n}\n\nfunc (t *ProviderConfigTransformer) Transform(g *Graph) error {\n\t// If no configuration is given, we don't do anything\n\tif t.Config == nil {\n\t\treturn nil\n\t}\n\n\tt.providers = make(map[string]GraphNodeProvider)\n\tt.proxiable = make(map[string]bool)\n\n\t// Start the transformation process\n\tif err := t.transform(g, t.Config); err != nil {\n\t\treturn err\n\t}\n\n\t// finally attach the configs to the new nodes\n\treturn t.attachProviderConfigs(g)\n}\n\nfunc (t *ProviderConfigTransformer) transform(g *Graph, c *configs.Config) error {\n\t// If no config, do nothing\n\tif c == nil {\n\t\treturn nil\n\t}\n\n\t// Add our resources\n\tif err := t.transformSingle(g, c); err != nil {\n\t\treturn err\n\t}\n\n\t// Transform all the children.\n\tfor _, cc := range c.Children {\n\t\tif err := t.transform(g, cc); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (t *ProviderConfigTransformer) transformSingle(g *Graph, c *configs.Config) error {\n\t// Get the module associated with this configuration tree node\n\tmod := c.Module\n\tstaticPath := c.Path\n\n\t// We actually need a dynamic module path here, but we've not yet updated\n\t// our graph builders enough to support expansion of module calls with\n\t// \"count\" and \"for_each\" set, so for now we'll shim this by converting to\n\t// a dynamic path with no keys. At the time of writing this is the only\n\t// possible kind of dynamic path anyway.\n\tpath := make(addrs.ModuleInstance, len(staticPath))\n\tfor i, name := range staticPath {\n\t\tpath[i] = addrs.ModuleInstanceStep{\n\t\t\tName: name,\n\t\t}\n\t}\n\n\t// add all providers from the configuration\n\tfor _, p := range mod.ProviderConfigs {\n\t\trelAddr := p.Addr()\n\t\taddr := relAddr.Absolute(path)\n\n\t\tabstract := &NodeAbstractProvider{\n\t\t\tAddr: addr,\n\t\t}\n\t\tvar v dag.Vertex\n\t\tif t.Concrete != nil {\n\t\t\tv = t.Concrete(abstract)\n\t\t} else {\n\t\t\tv = abstract\n\t\t}\n\n\t\t// Add it to the graph\n\t\tg.Add(v)\n\t\tkey := addr.String()\n\t\tt.providers[key] = v.(GraphNodeProvider)\n\n\t\t// A provider configuration is \"proxyable\" if its configuration is\n\t\t// entirely empty. This means it's standing in for a provider\n\t\t// configuration that must be passed in from the parent module.\n\t\t// We decide this by evaluating the config with an empty schema;\n\t\t// if this succeeds, then we know there's nothing in the body.\n\t\t_, diags := p.Config.Content(&hcl.BodySchema{})\n\t\tt.proxiable[key] = !diags.HasErrors()\n\t}\n\n\t// Now replace the provider nodes with proxy nodes if a provider was being\n\t// passed in, and create implicit proxies if there was no config. Any extra\n\t// proxies will be removed in the prune step.\n\treturn t.addProxyProviders(g, c)\n}\n\nfunc (t *ProviderConfigTransformer) addProxyProviders(g *Graph, c *configs.Config) error {\n\tpath := c.Path\n\n\t// can't add proxies at the root\n\tif len(path) == 0 {\n\t\treturn nil\n\t}\n\n\tparentPath, callAddr := path.Call()\n\tparent := c.Parent\n\tif parent == nil {\n\t\treturn nil\n\t}\n\n\tcallName := callAddr.Name\n\tvar parentCfg *configs.ModuleCall\n\tfor name, mod := range parent.Module.ModuleCalls {\n\t\tif name == callName {\n\t\t\tparentCfg = mod\n\t\t\tbreak\n\t\t}\n\t}\n\n\t// We currently don't support count/for_each for modules and so we must\n\t// shim our path and parentPath into module instances here so that the\n\t// rest of Terraform can behave as if we do. This shimming should be\n\t// removed later as part of implementing count/for_each for modules.\n\tinstPath := make(addrs.ModuleInstance, len(path))\n\tfor i, name := range path {\n\t\tinstPath[i] = addrs.ModuleInstanceStep{Name: name}\n\t}\n\tparentInstPath := make(addrs.ModuleInstance, len(parentPath))\n\tfor i, name := range parentPath {\n\t\tparentInstPath[i] = addrs.ModuleInstanceStep{Name: name}\n\t}\n\n\tif parentCfg == nil {\n\t\t// this can't really happen during normal execution.\n\t\treturn fmt.Errorf(\"parent module config not found for %s\", c.Path.String())\n\t}\n\n\t// Go through all the providers the parent is passing in, and add proxies to\n\t// the parent provider nodes.\n\tfor _, pair := range parentCfg.Providers {\n\t\tfullAddr := pair.InChild.Addr().Absolute(instPath)\n\t\tfullParentAddr := pair.InParent.Addr().Absolute(parentInstPath)\n\t\tfullName := fullAddr.String()\n\t\tfullParentName := fullParentAddr.String()\n\n\t\tparentProvider := t.providers[fullParentName]\n\n\t\tif parentProvider == nil {\n\t\t\treturn fmt.Errorf(\"missing provider %s\", fullParentName)\n\t\t}\n\n\t\tproxy := &graphNodeProxyProvider{\n\t\t\taddr:   fullAddr,\n\t\t\ttarget: parentProvider,\n\t\t}\n\n\t\tconcreteProvider := t.providers[fullName]\n\n\t\t// replace the concrete node with the provider passed in\n\t\tif concreteProvider != nil && t.proxiable[fullName] {\n\t\t\tg.Replace(concreteProvider, proxy)\n\t\t\tt.providers[fullName] = proxy\n\t\t\tcontinue\n\t\t}\n\n\t\t// aliased configurations can't be implicitly passed in\n\t\tif fullAddr.ProviderConfig.Alias != \"\" {\n\t\t\tcontinue\n\t\t}\n\n\t\t// There was no concrete provider, so add this as an implicit provider.\n\t\t// The extra proxy will be pruned later if it's unused.\n\t\tg.Add(proxy)\n\t\tt.providers[fullName] = proxy\n\t}\n\treturn nil\n}\n\nfunc (t *ProviderConfigTransformer) attachProviderConfigs(g *Graph) error {\n\tfor _, v := range g.Vertices() {\n\t\t// Only care about GraphNodeAttachProvider implementations\n\t\tapn, ok := v.(GraphNodeAttachProvider)\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Determine what we're looking for\n\t\taddr := apn.ProviderAddr()\n\n\t\t// Get the configuration.\n\t\tmc := t.Config.DescendentForInstance(addr.Module)\n\t\tif mc == nil {\n\t\t\tlog.Printf(\"[TRACE] ProviderConfigTransformer: no configuration available for %s\", addr.String())\n\t\t\tcontinue\n\t\t}\n\n\t\t// Go through the provider configs to find the matching config\n\t\tfor _, p := range mc.Module.ProviderConfigs {\n\t\t\tif p.Name == addr.ProviderConfig.Type && p.Alias == addr.ProviderConfig.Alias {\n\t\t\t\tlog.Printf(\"[TRACE] ProviderConfigTransformer: attaching to %q provider configuration from %s\", dag.VertexName(v), p.DeclRange)\n\t\t\t\tapn.AttachProvider(p)\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/transform_provisioner.go",
    "content": "package terraform\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\n\t\"github.com/hashicorp/go-multierror\"\n\t\"github.com/hashicorp/terraform/dag\"\n)\n\n// GraphNodeProvisioner is an interface that nodes that can be a provisioner\n// must implement. The ProvisionerName returned is the name of the provisioner\n// they satisfy.\ntype GraphNodeProvisioner interface {\n\tProvisionerName() string\n}\n\n// GraphNodeCloseProvisioner is an interface that nodes that can be a close\n// provisioner must implement. The CloseProvisionerName returned is the name\n// of the provisioner they satisfy.\ntype GraphNodeCloseProvisioner interface {\n\tCloseProvisionerName() string\n}\n\n// GraphNodeProvisionerConsumer is an interface that nodes that require\n// a provisioner must implement. ProvisionedBy must return the names of the\n// provisioners to use.\ntype GraphNodeProvisionerConsumer interface {\n\tProvisionedBy() []string\n}\n\n// ProvisionerTransformer is a GraphTransformer that maps resources to\n// provisioners within the graph. This will error if there are any resources\n// that don't map to proper resources.\ntype ProvisionerTransformer struct{}\n\nfunc (t *ProvisionerTransformer) Transform(g *Graph) error {\n\t// Go through the other nodes and match them to provisioners they need\n\tvar err error\n\tm := provisionerVertexMap(g)\n\tfor _, v := range g.Vertices() {\n\t\tif pv, ok := v.(GraphNodeProvisionerConsumer); ok {\n\t\t\tfor _, p := range pv.ProvisionedBy() {\n\t\t\t\tkey := provisionerMapKey(p, pv)\n\t\t\t\tif m[key] == nil {\n\t\t\t\t\terr = multierror.Append(err, fmt.Errorf(\n\t\t\t\t\t\t\"%s: provisioner %s couldn't be found\",\n\t\t\t\t\t\tdag.VertexName(v), p))\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tlog.Printf(\"[TRACE] ProvisionerTransformer: %s is provisioned by %s (%q)\", dag.VertexName(v), key, dag.VertexName(m[key]))\n\t\t\t\tg.Connect(dag.BasicEdge(v, m[key]))\n\t\t\t}\n\t\t}\n\t}\n\n\treturn err\n}\n\n// MissingProvisionerTransformer is a GraphTransformer that adds nodes\n// for missing provisioners into the graph.\ntype MissingProvisionerTransformer struct {\n\t// Provisioners is the list of provisioners we support.\n\tProvisioners []string\n}\n\nfunc (t *MissingProvisionerTransformer) Transform(g *Graph) error {\n\t// Create a set of our supported provisioners\n\tsupported := make(map[string]struct{}, len(t.Provisioners))\n\tfor _, v := range t.Provisioners {\n\t\tsupported[v] = struct{}{}\n\t}\n\n\t// Get the map of provisioners we already have in our graph\n\tm := provisionerVertexMap(g)\n\n\t// Go through all the provisioner consumers and make sure we add\n\t// that provisioner if it is missing.\n\tfor _, v := range g.Vertices() {\n\t\tpv, ok := v.(GraphNodeProvisionerConsumer)\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\n\t\t// If this node has a subpath, then we use that as a prefix\n\t\t// into our map to check for an existing provider.\n\t\tpath := addrs.RootModuleInstance\n\t\tif sp, ok := pv.(GraphNodeSubPath); ok {\n\t\t\tpath = sp.Path()\n\t\t}\n\n\t\tfor _, p := range pv.ProvisionedBy() {\n\t\t\t// Build the key for storing in the map\n\t\t\tkey := provisionerMapKey(p, pv)\n\n\t\t\tif _, ok := m[key]; ok {\n\t\t\t\t// This provisioner already exists as a configure node\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif _, ok := supported[p]; !ok {\n\t\t\t\t// If we don't support the provisioner type, we skip it.\n\t\t\t\t// Validation later will catch this as an error.\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// Build the vertex\n\t\t\tvar newV dag.Vertex = &NodeProvisioner{\n\t\t\t\tNameValue: p,\n\t\t\t\tPathValue: path,\n\t\t\t}\n\n\t\t\t// Add the missing provisioner node to the graph\n\t\t\tm[key] = g.Add(newV)\n\t\t\tlog.Printf(\"[TRACE] MissingProviderTransformer: added implicit provisioner %s, first implied by %s\", key, dag.VertexName(v))\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// CloseProvisionerTransformer is a GraphTransformer that adds nodes to the\n// graph that will close open provisioner connections that aren't needed\n// anymore. A provisioner connection is not needed anymore once all depended\n// resources in the graph are evaluated.\ntype CloseProvisionerTransformer struct{}\n\nfunc (t *CloseProvisionerTransformer) Transform(g *Graph) error {\n\tm := closeProvisionerVertexMap(g)\n\tfor _, v := range g.Vertices() {\n\t\tif pv, ok := v.(GraphNodeProvisionerConsumer); ok {\n\t\t\tfor _, p := range pv.ProvisionedBy() {\n\t\t\t\tsource := m[p]\n\n\t\t\t\tif source == nil {\n\t\t\t\t\t// Create a new graphNodeCloseProvisioner and add it to the graph\n\t\t\t\t\tsource = &graphNodeCloseProvisioner{ProvisionerNameValue: p}\n\t\t\t\t\tg.Add(source)\n\n\t\t\t\t\t// Make sure we also add the new graphNodeCloseProvisioner to the map\n\t\t\t\t\t// so we don't create and add any duplicate graphNodeCloseProvisioners.\n\t\t\t\t\tm[p] = source\n\t\t\t\t}\n\n\t\t\t\tg.Connect(dag.BasicEdge(source, v))\n\t\t\t}\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// provisionerMapKey is a helper that gives us the key to use for the\n// maps returned by things such as provisionerVertexMap.\nfunc provisionerMapKey(k string, v dag.Vertex) string {\n\tpathPrefix := \"\"\n\tif sp, ok := v.(GraphNodeSubPath); ok {\n\t\tpathPrefix = sp.Path().String() + \".\"\n\t}\n\n\treturn pathPrefix + k\n}\n\nfunc provisionerVertexMap(g *Graph) map[string]dag.Vertex {\n\tm := make(map[string]dag.Vertex)\n\tfor _, v := range g.Vertices() {\n\t\tif pv, ok := v.(GraphNodeProvisioner); ok {\n\t\t\tkey := provisionerMapKey(pv.ProvisionerName(), v)\n\t\t\tm[key] = v\n\t\t}\n\t}\n\n\treturn m\n}\n\nfunc closeProvisionerVertexMap(g *Graph) map[string]dag.Vertex {\n\tm := make(map[string]dag.Vertex)\n\tfor _, v := range g.Vertices() {\n\t\tif pv, ok := v.(GraphNodeCloseProvisioner); ok {\n\t\t\tm[pv.CloseProvisionerName()] = v\n\t\t}\n\t}\n\n\treturn m\n}\n\ntype graphNodeCloseProvisioner struct {\n\tProvisionerNameValue string\n}\n\nfunc (n *graphNodeCloseProvisioner) Name() string {\n\treturn fmt.Sprintf(\"provisioner.%s (close)\", n.ProvisionerNameValue)\n}\n\n// GraphNodeEvalable impl.\nfunc (n *graphNodeCloseProvisioner) EvalTree() EvalNode {\n\treturn &EvalCloseProvisioner{Name: n.ProvisionerNameValue}\n}\n\nfunc (n *graphNodeCloseProvisioner) CloseProvisionerName() string {\n\treturn n.ProvisionerNameValue\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/transform_reference.go",
    "content": "package terraform\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/hashicorp/terraform/configs/configschema\"\n\t\"github.com/hashicorp/terraform/lang\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/config\"\n\t\"github.com/hashicorp/terraform/dag\"\n)\n\n// GraphNodeReferenceable must be implemented by any node that represents\n// a Terraform thing that can be referenced (resource, module, etc.).\n//\n// Even if the thing has no name, this should return an empty list. By\n// implementing this and returning a non-nil result, you say that this CAN\n// be referenced and other methods of referencing may still be possible (such\n// as by path!)\ntype GraphNodeReferenceable interface {\n\tGraphNodeSubPath\n\n\t// ReferenceableAddrs returns a list of addresses through which this can be\n\t// referenced.\n\tReferenceableAddrs() []addrs.Referenceable\n}\n\n// GraphNodeReferencer must be implemented by nodes that reference other\n// Terraform items and therefore depend on them.\ntype GraphNodeReferencer interface {\n\tGraphNodeSubPath\n\n\t// References returns a list of references made by this node, which\n\t// include both a referenced address and source location information for\n\t// the reference.\n\tReferences() []*addrs.Reference\n}\n\n// GraphNodeReferenceOutside is an interface that can optionally be implemented.\n// A node that implements it can specify that its own referenceable addresses\n// and/or the addresses it references are in a different module than the\n// node itself.\n//\n// Any referenceable addresses returned by ReferenceableAddrs are interpreted\n// relative to the returned selfPath.\n//\n// Any references returned by References are interpreted relative to the\n// returned referencePath.\n//\n// It is valid but not required for either of these paths to match what is\n// returned by method Path, though if both match the main Path then there\n// is no reason to implement this method.\n//\n// The primary use-case for this is the nodes representing module input\n// variables, since their expressions are resolved in terms of their calling\n// module, but they are still referenced from their own module.\ntype GraphNodeReferenceOutside interface {\n\t// ReferenceOutside returns a path in which any references from this node\n\t// are resolved.\n\tReferenceOutside() (selfPath, referencePath addrs.ModuleInstance)\n}\n\n// ReferenceTransformer is a GraphTransformer that connects all the\n// nodes that reference each other in order to form the proper ordering.\ntype ReferenceTransformer struct{}\n\nfunc (t *ReferenceTransformer) Transform(g *Graph) error {\n\t// Build a reference map so we can efficiently look up the references\n\tvs := g.Vertices()\n\tm := NewReferenceMap(vs)\n\n\t// Find the things that reference things and connect them\n\tfor _, v := range vs {\n\t\tparents, _ := m.References(v)\n\t\tparentsDbg := make([]string, len(parents))\n\t\tfor i, v := range parents {\n\t\t\tparentsDbg[i] = dag.VertexName(v)\n\t\t}\n\t\tlog.Printf(\n\t\t\t\"[DEBUG] ReferenceTransformer: %q references: %v\",\n\t\t\tdag.VertexName(v), parentsDbg)\n\n\t\tfor _, parent := range parents {\n\t\t\tg.Connect(dag.BasicEdge(v, parent))\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// DestroyReferenceTransformer is a GraphTransformer that reverses the edges\n// for locals and outputs that depend on other nodes which will be\n// removed during destroy. If a destroy node is evaluated before the local or\n// output value, it will be removed from the state, and the later interpolation\n// will fail.\ntype DestroyValueReferenceTransformer struct{}\n\nfunc (t *DestroyValueReferenceTransformer) Transform(g *Graph) error {\n\tvs := g.Vertices()\n\tfor _, v := range vs {\n\t\tswitch v.(type) {\n\t\tcase *NodeApplyableOutput, *NodeLocal:\n\t\t\t// OK\n\t\tdefault:\n\t\t\tcontinue\n\t\t}\n\n\t\t// reverse any outgoing edges so that the value is evaluated first.\n\t\tfor _, e := range g.EdgesFrom(v) {\n\t\t\ttarget := e.Target()\n\n\t\t\t// only destroy nodes will be evaluated in reverse\n\t\t\tif _, ok := target.(GraphNodeDestroyer); !ok {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tlog.Printf(\"[TRACE] output dep: %s\", dag.VertexName(target))\n\n\t\t\tg.RemoveEdge(e)\n\t\t\tg.Connect(&DestroyEdge{S: target, T: v})\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// PruneUnusedValuesTransformer is s GraphTransformer that removes local and\n// output values which are not referenced in the graph. Since outputs and\n// locals always need to be evaluated, if they reference a resource that is not\n// available in the state the interpolation could fail.\ntype PruneUnusedValuesTransformer struct{}\n\nfunc (t *PruneUnusedValuesTransformer) Transform(g *Graph) error {\n\t// this might need multiple runs in order to ensure that pruning a value\n\t// doesn't effect a previously checked value.\n\tfor removed := 0; ; removed = 0 {\n\t\tfor _, v := range g.Vertices() {\n\t\t\tswitch v.(type) {\n\t\t\tcase *NodeApplyableOutput, *NodeLocal:\n\t\t\t\t// OK\n\t\t\tdefault:\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tdependants := g.UpEdges(v)\n\n\t\t\tswitch dependants.Len() {\n\t\t\tcase 0:\n\t\t\t\t// nothing at all depends on this\n\t\t\t\tg.Remove(v)\n\t\t\t\tremoved++\n\t\t\tcase 1:\n\t\t\t\t// because an output's destroy node always depends on the output,\n\t\t\t\t// we need to check for the case of a single destroy node.\n\t\t\t\td := dependants.List()[0]\n\t\t\t\tif _, ok := d.(*NodeDestroyableOutput); ok {\n\t\t\t\t\tg.Remove(v)\n\t\t\t\t\tremoved++\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif removed == 0 {\n\t\t\tbreak\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// ReferenceMap is a structure that can be used to efficiently check\n// for references on a graph.\ntype ReferenceMap struct {\n\t// vertices is a map from internal reference keys (as produced by the\n\t// mapKey method) to one or more vertices that are identified by each key.\n\t//\n\t// A particular reference key might actually identify multiple vertices,\n\t// e.g. in situations where one object is contained inside another.\n\tvertices map[string][]dag.Vertex\n\n\t// edges is a map whose keys are a subset of the internal reference keys\n\t// from \"vertices\", and whose values are the nodes that refer to each\n\t// key. The values in this map are the referrers, while values in\n\t// \"verticies\" are the referents. The keys in both cases are referents.\n\tedges map[string][]dag.Vertex\n}\n\n// References returns the set of vertices that the given vertex refers to,\n// and any referenced addresses that do not have corresponding vertices.\nfunc (m *ReferenceMap) References(v dag.Vertex) ([]dag.Vertex, []addrs.Referenceable) {\n\trn, ok := v.(GraphNodeReferencer)\n\tif !ok {\n\t\treturn nil, nil\n\t}\n\tif _, ok := v.(GraphNodeSubPath); !ok {\n\t\treturn nil, nil\n\t}\n\n\tvar matches []dag.Vertex\n\tvar missing []addrs.Referenceable\n\n\tfor _, ref := range rn.References() {\n\t\tsubject := ref.Subject\n\n\t\tkey := m.referenceMapKey(v, subject)\n\t\tif _, exists := m.vertices[key]; !exists {\n\t\t\t// If what we were looking for was a ResourceInstance then we\n\t\t\t// might be in a resource-oriented graph rather than an\n\t\t\t// instance-oriented graph, and so we'll see if we have the\n\t\t\t// resource itself instead.\n\t\t\tswitch ri := subject.(type) {\n\t\t\tcase addrs.ResourceInstance:\n\t\t\t\tsubject = ri.ContainingResource()\n\t\t\tcase addrs.ResourceInstancePhase:\n\t\t\t\tsubject = ri.ContainingResource()\n\t\t\t}\n\t\t\tkey = m.referenceMapKey(v, subject)\n\t\t}\n\n\t\tvertices := m.vertices[key]\n\t\tfor _, rv := range vertices {\n\t\t\t// don't include self-references\n\t\t\tif rv == v {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tmatches = append(matches, rv)\n\t\t}\n\t\tif len(vertices) == 0 {\n\t\t\tmissing = append(missing, ref.Subject)\n\t\t}\n\t}\n\n\treturn matches, missing\n}\n\n// Referrers returns the set of vertices that refer to the given vertex.\nfunc (m *ReferenceMap) Referrers(v dag.Vertex) []dag.Vertex {\n\trn, ok := v.(GraphNodeReferenceable)\n\tif !ok {\n\t\treturn nil\n\t}\n\tsp, ok := v.(GraphNodeSubPath)\n\tif !ok {\n\t\treturn nil\n\t}\n\n\tvar matches []dag.Vertex\n\tfor _, addr := range rn.ReferenceableAddrs() {\n\t\tkey := m.mapKey(sp.Path(), addr)\n\t\treferrers, ok := m.edges[key]\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\n\t\t// If the referrer set includes our own given vertex then we skip,\n\t\t// since we don't want to return self-references.\n\t\tselfRef := false\n\t\tfor _, p := range referrers {\n\t\t\tif p == v {\n\t\t\t\tselfRef = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif selfRef {\n\t\t\tcontinue\n\t\t}\n\n\t\tmatches = append(matches, referrers...)\n\t}\n\n\treturn matches\n}\n\nfunc (m *ReferenceMap) mapKey(path addrs.ModuleInstance, addr addrs.Referenceable) string {\n\treturn fmt.Sprintf(\"%s|%s\", path.String(), addr.String())\n}\n\n// vertexReferenceablePath returns the path in which the given vertex can be\n// referenced. This is the path that its results from ReferenceableAddrs\n// are considered to be relative to.\n//\n// Only GraphNodeSubPath implementations can be referenced, so this method will\n// panic if the given vertex does not implement that interface.\nfunc (m *ReferenceMap) vertexReferenceablePath(v dag.Vertex) addrs.ModuleInstance {\n\tsp, ok := v.(GraphNodeSubPath)\n\tif !ok {\n\t\t// Only nodes with paths can participate in a reference map.\n\t\tpanic(fmt.Errorf(\"vertexMapKey on vertex type %T which doesn't implement GraphNodeSubPath\", sp))\n\t}\n\n\tif outside, ok := v.(GraphNodeReferenceOutside); ok {\n\t\t// Vertex is referenced from a different module than where it was\n\t\t// declared.\n\t\tpath, _ := outside.ReferenceOutside()\n\t\treturn path\n\t}\n\n\t// Vertex is referenced from the same module as where it was declared.\n\treturn sp.Path()\n}\n\n// vertexReferencePath returns the path in which references _from_ the given\n// vertex must be interpreted.\n//\n// Only GraphNodeSubPath implementations can have references, so this method\n// will panic if the given vertex does not implement that interface.\nfunc vertexReferencePath(referrer dag.Vertex) addrs.ModuleInstance {\n\tsp, ok := referrer.(GraphNodeSubPath)\n\tif !ok {\n\t\t// Only nodes with paths can participate in a reference map.\n\t\tpanic(fmt.Errorf(\"vertexReferencePath on vertex type %T which doesn't implement GraphNodeSubPath\", sp))\n\t}\n\n\tvar path addrs.ModuleInstance\n\tif outside, ok := referrer.(GraphNodeReferenceOutside); ok {\n\t\t// Vertex makes references to objects in a different module than where\n\t\t// it was declared.\n\t\t_, path = outside.ReferenceOutside()\n\t\treturn path\n\t}\n\n\t// Vertex makes references to objects in the same module as where it\n\t// was declared.\n\treturn sp.Path()\n}\n\n// referenceMapKey produces keys for the \"edges\" map. \"referrer\" is the vertex\n// that the reference is from, and \"addr\" is the address of the object being\n// referenced.\n//\n// The result is an opaque string that includes both the address of the given\n// object and the address of the module instance that object belongs to.\n//\n// Only GraphNodeSubPath implementations can be referrers, so this method will\n// panic if the given vertex does not implement that interface.\nfunc (m *ReferenceMap) referenceMapKey(referrer dag.Vertex, addr addrs.Referenceable) string {\n\tpath := vertexReferencePath(referrer)\n\treturn m.mapKey(path, addr)\n}\n\n// NewReferenceMap is used to create a new reference map for the\n// given set of vertices.\nfunc NewReferenceMap(vs []dag.Vertex) *ReferenceMap {\n\tvar m ReferenceMap\n\n\t// Build the lookup table\n\tvertices := make(map[string][]dag.Vertex)\n\tfor _, v := range vs {\n\t\t_, ok := v.(GraphNodeSubPath)\n\t\tif !ok {\n\t\t\t// Only nodes with paths can participate in a reference map.\n\t\t\tcontinue\n\t\t}\n\n\t\t// We're only looking for referenceable nodes\n\t\trn, ok := v.(GraphNodeReferenceable)\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\n\t\tpath := m.vertexReferenceablePath(v)\n\n\t\t// Go through and cache them\n\t\tfor _, addr := range rn.ReferenceableAddrs() {\n\t\t\tkey := m.mapKey(path, addr)\n\t\t\tvertices[key] = append(vertices[key], v)\n\t\t}\n\n\t\t// Any node can be referenced by the address of the module it belongs\n\t\t// to or any of that module's ancestors.\n\t\tfor _, addr := range path.Ancestors()[1:] {\n\t\t\t// Can be referenced either as the specific call instance (with\n\t\t\t// an instance key) or as the bare module call itself (the \"module\"\n\t\t\t// block in the parent module that created the instance).\n\t\t\tcallPath, call := addr.Call()\n\t\t\tcallInstPath, callInst := addr.CallInstance()\n\t\t\tcallKey := m.mapKey(callPath, call)\n\t\t\tcallInstKey := m.mapKey(callInstPath, callInst)\n\t\t\tvertices[callKey] = append(vertices[callKey], v)\n\t\t\tvertices[callInstKey] = append(vertices[callInstKey], v)\n\t\t}\n\t}\n\n\t// Build the lookup table for referenced by\n\tedges := make(map[string][]dag.Vertex)\n\tfor _, v := range vs {\n\t\t_, ok := v.(GraphNodeSubPath)\n\t\tif !ok {\n\t\t\t// Only nodes with paths can participate in a reference map.\n\t\t\tcontinue\n\t\t}\n\n\t\trn, ok := v.(GraphNodeReferencer)\n\t\tif !ok {\n\t\t\t// We're only looking for referenceable nodes\n\t\t\tcontinue\n\t\t}\n\n\t\t// Go through and cache them\n\t\tfor _, ref := range rn.References() {\n\t\t\tif ref.Subject == nil {\n\t\t\t\t// Should never happen\n\t\t\t\tpanic(fmt.Sprintf(\"%T.References returned reference with nil subject\", rn))\n\t\t\t}\n\t\t\tkey := m.referenceMapKey(v, ref.Subject)\n\t\t\tedges[key] = append(edges[key], v)\n\t\t}\n\t}\n\n\tm.vertices = vertices\n\tm.edges = edges\n\treturn &m\n}\n\n// ReferencesFromConfig returns the references that a configuration has\n// based on the interpolated variables in a configuration.\nfunc ReferencesFromConfig(body hcl.Body, schema *configschema.Block) []*addrs.Reference {\n\tif body == nil {\n\t\treturn nil\n\t}\n\trefs, _ := lang.ReferencesInBlock(body, schema)\n\treturn refs\n}\n\n// ReferenceFromInterpolatedVar returns the reference from this variable,\n// or an empty string if there is no reference.\nfunc ReferenceFromInterpolatedVar(v config.InterpolatedVariable) []string {\n\tswitch v := v.(type) {\n\tcase *config.ModuleVariable:\n\t\treturn []string{fmt.Sprintf(\"module.%s.output.%s\", v.Name, v.Field)}\n\tcase *config.ResourceVariable:\n\t\tid := v.ResourceId()\n\n\t\t// If we have a multi-reference (splat), then we depend on ALL\n\t\t// resources with this type/name.\n\t\tif v.Multi && v.Index == -1 {\n\t\t\treturn []string{fmt.Sprintf(\"%s.*\", id)}\n\t\t}\n\n\t\t// Otherwise, we depend on a specific index.\n\t\tidx := v.Index\n\t\tif !v.Multi || v.Index == -1 {\n\t\t\tidx = 0\n\t\t}\n\n\t\t// Depend on the index, as well as \"N\" which represents the\n\t\t// un-expanded set of resources.\n\t\treturn []string{fmt.Sprintf(\"%s.%d/%s.N\", id, idx, id)}\n\tcase *config.UserVariable:\n\t\treturn []string{fmt.Sprintf(\"var.%s\", v.Name)}\n\tcase *config.LocalVariable:\n\t\treturn []string{fmt.Sprintf(\"local.%s\", v.Name)}\n\tdefault:\n\t\treturn nil\n\t}\n}\n\n// appendResourceDestroyReferences identifies resource and resource instance\n// references in the given slice and appends to it the \"destroy-phase\"\n// equivalents of those references, returning the result.\n//\n// This can be used in the References implementation for a node which must also\n// depend on the destruction of anything it references.\nfunc appendResourceDestroyReferences(refs []*addrs.Reference) []*addrs.Reference {\n\tgiven := refs\n\tfor _, ref := range given {\n\t\tswitch tr := ref.Subject.(type) {\n\t\tcase addrs.Resource:\n\t\t\tnewRef := *ref // shallow copy\n\t\t\tnewRef.Subject = tr.Phase(addrs.ResourceInstancePhaseDestroy)\n\t\t\trefs = append(refs, &newRef)\n\t\tcase addrs.ResourceInstance:\n\t\t\tnewRef := *ref // shallow copy\n\t\t\tnewRef.Subject = tr.Phase(addrs.ResourceInstancePhaseDestroy)\n\t\t\trefs = append(refs, &newRef)\n\t\t}\n\t}\n\treturn refs\n}\n\nfunc modulePrefixStr(p addrs.ModuleInstance) string {\n\treturn p.String()\n}\n\nfunc modulePrefixList(result []string, prefix string) []string {\n\tif prefix != \"\" {\n\t\tfor i, v := range result {\n\t\t\tresult[i] = fmt.Sprintf(\"%s.%s\", prefix, v)\n\t\t}\n\t}\n\n\treturn result\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/transform_removed_modules.go",
    "content": "package terraform\n\nimport (\n\t\"log\"\n\n\t\"github.com/hashicorp/terraform/configs\"\n\t\"github.com/hashicorp/terraform/states\"\n)\n\n// RemovedModuleTransformer implements GraphTransformer to add nodes indicating\n// when a module was removed from the configuration.\ntype RemovedModuleTransformer struct {\n\tConfig *configs.Config // root node in the config tree\n\tState  *states.State\n}\n\nfunc (t *RemovedModuleTransformer) Transform(g *Graph) error {\n\t// nothing to remove if there's no state!\n\tif t.State == nil {\n\t\treturn nil\n\t}\n\n\tfor _, m := range t.State.Modules {\n\t\tcc := t.Config.DescendentForInstance(m.Addr)\n\t\tif cc != nil {\n\t\t\tcontinue\n\t\t}\n\n\t\tlog.Printf(\"[DEBUG] %s is no longer in configuration\\n\", m.Addr)\n\t\tg.Add(&NodeModuleRemoved{Addr: m.Addr})\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/transform_resource_count.go",
    "content": "package terraform\n\nimport (\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/configs/configschema\"\n\t\"github.com/hashicorp/terraform/dag\"\n)\n\n// ResourceCountTransformer is a GraphTransformer that expands the count\n// out for a specific resource.\n//\n// This assumes that the count is already interpolated.\ntype ResourceCountTransformer struct {\n\tConcrete ConcreteResourceInstanceNodeFunc\n\tSchema   *configschema.Block\n\n\t// Count is either the number of indexed instances to create, or -1 to\n\t// indicate that count is not set at all and thus a no-key instance should\n\t// be created.\n\tCount int\n\tAddr  addrs.AbsResource\n}\n\nfunc (t *ResourceCountTransformer) Transform(g *Graph) error {\n\tif t.Count < 0 {\n\t\t// Negative count indicates that count is not set at all.\n\t\taddr := t.Addr.Instance(addrs.NoKey)\n\n\t\tabstract := NewNodeAbstractResourceInstance(addr)\n\t\tabstract.Schema = t.Schema\n\t\tvar node dag.Vertex = abstract\n\t\tif f := t.Concrete; f != nil {\n\t\t\tnode = f(abstract)\n\t\t}\n\n\t\tg.Add(node)\n\t\treturn nil\n\t}\n\n\t// For each count, build and add the node\n\tfor i := 0; i < t.Count; i++ {\n\t\tkey := addrs.IntKey(i)\n\t\taddr := t.Addr.Instance(key)\n\n\t\tabstract := NewNodeAbstractResourceInstance(addr)\n\t\tabstract.Schema = t.Schema\n\t\tvar node dag.Vertex = abstract\n\t\tif f := t.Concrete; f != nil {\n\t\t\tnode = f(abstract)\n\t\t}\n\n\t\tg.Add(node)\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/transform_root.go",
    "content": "package terraform\n\nimport \"github.com/hashicorp/terraform/dag\"\n\nconst rootNodeName = \"root\"\n\n// RootTransformer is a GraphTransformer that adds a root to the graph.\ntype RootTransformer struct{}\n\nfunc (t *RootTransformer) Transform(g *Graph) error {\n\t// If we already have a good root, we're done\n\tif _, err := g.Root(); err == nil {\n\t\treturn nil\n\t}\n\n\t// Add a root\n\tvar root graphNodeRoot\n\tg.Add(root)\n\n\t// Connect the root to all the edges that need it\n\tfor _, v := range g.Vertices() {\n\t\tif v == root {\n\t\t\tcontinue\n\t\t}\n\n\t\tif g.UpEdges(v).Len() == 0 {\n\t\t\tg.Connect(dag.BasicEdge(root, v))\n\t\t}\n\t}\n\n\treturn nil\n}\n\ntype graphNodeRoot struct{}\n\nfunc (n graphNodeRoot) Name() string {\n\treturn rootNodeName\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/transform_state.go",
    "content": "package terraform\n\nimport (\n\t\"log\"\n\n\t\"github.com/hashicorp/terraform/states\"\n)\n\n// StateTransformer is a GraphTransformer that adds the elements of\n// the state to the graph.\n//\n// This transform is used for example by the DestroyPlanGraphBuilder to ensure\n// that only resources that are in the state are represented in the graph.\ntype StateTransformer struct {\n\t// ConcreteCurrent and ConcreteDeposed are used to specialize the abstract\n\t// resource instance nodes that this transformer will create.\n\t//\n\t// If either of these is nil, the objects of that type will be skipped and\n\t// not added to the graph at all. It doesn't make sense to use this\n\t// transformer without setting at least one of these, since that would\n\t// skip everything and thus be a no-op.\n\tConcreteCurrent ConcreteResourceInstanceNodeFunc\n\tConcreteDeposed ConcreteResourceInstanceDeposedNodeFunc\n\n\tState *states.State\n}\n\nfunc (t *StateTransformer) Transform(g *Graph) error {\n\tif !t.State.HasResources() {\n\t\tlog.Printf(\"[TRACE] StateTransformer: state is empty, so nothing to do\")\n\t\treturn nil\n\t}\n\n\tswitch {\n\tcase t.ConcreteCurrent != nil && t.ConcreteDeposed != nil:\n\t\tlog.Printf(\"[TRACE] StateTransformer: creating nodes for both current and deposed instance objects\")\n\tcase t.ConcreteCurrent != nil:\n\t\tlog.Printf(\"[TRACE] StateTransformer: creating nodes for current instance objects only\")\n\tcase t.ConcreteDeposed != nil:\n\t\tlog.Printf(\"[TRACE] StateTransformer: creating nodes for deposed instance objects only\")\n\tdefault:\n\t\tlog.Printf(\"[TRACE] StateTransformer: pointless no-op call, creating no nodes at all\")\n\t}\n\n\tfor _, ms := range t.State.Modules {\n\t\tmoduleAddr := ms.Addr\n\n\t\tfor _, rs := range ms.Resources {\n\t\t\tresourceAddr := rs.Addr.Absolute(moduleAddr)\n\n\t\t\tfor key, is := range rs.Instances {\n\t\t\t\taddr := resourceAddr.Instance(key)\n\n\t\t\t\tif obj := is.Current; obj != nil && t.ConcreteCurrent != nil {\n\t\t\t\t\tabstract := NewNodeAbstractResourceInstance(addr)\n\t\t\t\t\tnode := t.ConcreteCurrent(abstract)\n\t\t\t\t\tg.Add(node)\n\t\t\t\t\tlog.Printf(\"[TRACE] StateTransformer: added %T for %s current object\", node, addr)\n\t\t\t\t}\n\n\t\t\t\tif t.ConcreteDeposed != nil {\n\t\t\t\t\tfor dk := range is.Deposed {\n\t\t\t\t\t\tabstract := NewNodeAbstractResourceInstance(addr)\n\t\t\t\t\t\tnode := t.ConcreteDeposed(abstract, dk)\n\t\t\t\t\t\tg.Add(node)\n\t\t\t\t\t\tlog.Printf(\"[TRACE] StateTransformer: added %T for %s deposed object %s\", node, addr, dk)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/transform_targets.go",
    "content": "package terraform\n\nimport (\n\t\"log\"\n\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/dag\"\n)\n\n// GraphNodeTargetable is an interface for graph nodes to implement when they\n// need to be told about incoming targets. This is useful for nodes that need\n// to respect targets as they dynamically expand. Note that the list of targets\n// provided will contain every target provided, and each implementing graph\n// node must filter this list to targets considered relevant.\ntype GraphNodeTargetable interface {\n\tSetTargets([]addrs.Targetable)\n}\n\n// GraphNodeTargetDownstream is an interface for graph nodes that need to\n// be remain present under targeting if any of their dependencies are targeted.\n// TargetDownstream is called with the set of vertices that are direct\n// dependencies for the node, and it should return true if the node must remain\n// in the graph in support of those dependencies.\n//\n// This is used in situations where the dependency edges are representing an\n// ordering relationship but the dependency must still be visited if its\n// dependencies are visited. This is true for outputs, for example, since\n// they must get updated if any of their dependent resources get updated,\n// which would not normally be true if one of their dependencies were targeted.\ntype GraphNodeTargetDownstream interface {\n\tTargetDownstream(targeted, untargeted *dag.Set) bool\n}\n\n// TargetsTransformer is a GraphTransformer that, when the user specifies a\n// list of resources to target, limits the graph to only those resources and\n// their dependencies.\ntype TargetsTransformer struct {\n\t// List of targeted resource names specified by the user\n\tTargets []addrs.Targetable\n\n\t// If set, the index portions of resource addresses will be ignored\n\t// for comparison. This is used when transforming a graph where\n\t// counted resources have not yet been expanded, since otherwise\n\t// the unexpanded nodes (which never have indices) would not match.\n\tIgnoreIndices bool\n\n\t// Set to true when we're in a `terraform destroy` or a\n\t// `terraform plan -destroy`\n\tDestroy bool\n}\n\nfunc (t *TargetsTransformer) Transform(g *Graph) error {\n\tif len(t.Targets) > 0 {\n\t\ttargetedNodes, err := t.selectTargetedNodes(g, t.Targets)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tfor _, v := range g.Vertices() {\n\t\t\tremovable := false\n\t\t\tif _, ok := v.(GraphNodeResource); ok {\n\t\t\t\tremovable = true\n\t\t\t}\n\n\t\t\tif vr, ok := v.(RemovableIfNotTargeted); ok {\n\t\t\t\tremovable = vr.RemoveIfNotTargeted()\n\t\t\t}\n\n\t\t\tif removable && !targetedNodes.Include(v) {\n\t\t\t\tlog.Printf(\"[DEBUG] Removing %q, filtered by targeting.\", dag.VertexName(v))\n\t\t\t\tg.Remove(v)\n\t\t\t}\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// Returns a set of targeted nodes. A targeted node is either addressed\n// directly, address indirectly via its container, or it's a dependency of a\n// targeted node. Destroy mode keeps dependents instead of dependencies.\nfunc (t *TargetsTransformer) selectTargetedNodes(g *Graph, addrs []addrs.Targetable) (*dag.Set, error) {\n\ttargetedNodes := new(dag.Set)\n\n\tvertices := g.Vertices()\n\n\tfor _, v := range vertices {\n\t\tif t.nodeIsTarget(v, addrs) {\n\t\t\ttargetedNodes.Add(v)\n\n\t\t\t// We inform nodes that ask about the list of targets - helps for nodes\n\t\t\t// that need to dynamically expand. Note that this only occurs for nodes\n\t\t\t// that are already directly targeted.\n\t\t\tif tn, ok := v.(GraphNodeTargetable); ok {\n\t\t\t\ttn.SetTargets(addrs)\n\t\t\t}\n\n\t\t\tvar deps *dag.Set\n\t\t\tvar err error\n\t\t\tif t.Destroy {\n\t\t\t\tdeps, err = g.Descendents(v)\n\t\t\t} else {\n\t\t\t\tdeps, err = g.Ancestors(v)\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\n\t\t\tfor _, d := range deps.List() {\n\t\t\t\ttargetedNodes.Add(d)\n\t\t\t}\n\t\t}\n\t}\n\treturn t.addDependencies(targetedNodes, g)\n}\n\nfunc (t *TargetsTransformer) addDependencies(targetedNodes *dag.Set, g *Graph) (*dag.Set, error) {\n\t// Handle nodes that need to be included if their dependencies are included.\n\t// This requires multiple passes since we need to catch transitive\n\t// dependencies if and only if they are via other nodes that also\n\t// support TargetDownstream. For example:\n\t// output -> output -> targeted-resource: both outputs need to be targeted\n\t// output -> non-targeted-resource -> targeted-resource: output not targeted\n\t//\n\t// We'll keep looping until we stop targeting more nodes.\n\tqueue := targetedNodes.List()\n\tfor len(queue) > 0 {\n\t\tvertices := queue\n\t\tqueue = nil // ready to append for next iteration if neccessary\n\t\tfor _, v := range vertices {\n\t\t\t// providers don't cause transitive dependencies, so don't target\n\t\t\t// downstream from them.\n\t\t\tif _, ok := v.(GraphNodeProvider); ok {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tdependers := g.UpEdges(v)\n\t\t\tif dependers == nil {\n\t\t\t\t// indicates that there are no up edges for this node, so\n\t\t\t\t// we have nothing to do here.\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tdependers = dependers.Filter(func(dv interface{}) bool {\n\t\t\t\t_, ok := dv.(GraphNodeTargetDownstream)\n\t\t\t\treturn ok\n\t\t\t})\n\n\t\t\tif dependers.Len() == 0 {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tfor _, dv := range dependers.List() {\n\t\t\t\tif targetedNodes.Include(dv) {\n\t\t\t\t\t// Already present, so nothing to do\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\t// We'll give the node some information about what it's\n\t\t\t\t// depending on in case that informs its decision about whether\n\t\t\t\t// it is safe to be targeted.\n\t\t\t\tdeps := g.DownEdges(v)\n\n\t\t\t\tdepsTargeted := deps.Intersection(targetedNodes)\n\t\t\t\tdepsUntargeted := deps.Difference(depsTargeted)\n\n\t\t\t\tif dv.(GraphNodeTargetDownstream).TargetDownstream(depsTargeted, depsUntargeted) {\n\t\t\t\t\ttargetedNodes.Add(dv)\n\t\t\t\t\t// Need to visit this node on the next pass to see if it\n\t\t\t\t\t// has any transitive dependers.\n\t\t\t\t\tqueue = append(queue, dv)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn targetedNodes.Filter(func(dv interface{}) bool {\n\t\treturn filterPartialOutputs(dv, targetedNodes, g)\n\t}), nil\n}\n\n// Outputs may have been included transitively, but if any of their\n// dependencies have been pruned they won't be resolvable.\n// If nothing depends on the output, and the output is missing any\n// dependencies, remove it from the graph.\n// This essentially maintains the previous behavior where interpolation in\n// outputs would fail silently, but can now surface errors where the output\n// is required.\nfunc filterPartialOutputs(v interface{}, targetedNodes *dag.Set, g *Graph) bool {\n\t// should this just be done with TargetDownstream?\n\tif _, ok := v.(*NodeApplyableOutput); !ok {\n\t\treturn true\n\t}\n\n\tdependers := g.UpEdges(v)\n\tfor _, d := range dependers.List() {\n\t\tif _, ok := d.(*NodeCountBoundary); ok {\n\t\t\tcontinue\n\t\t}\n\n\t\tif !targetedNodes.Include(d) {\n\t\t\t// this one is going to be removed, so it doesn't count\n\t\t\tcontinue\n\t\t}\n\n\t\t// as soon as we see a real dependency, we mark this as\n\t\t// non-removable\n\t\treturn true\n\t}\n\n\tdepends := g.DownEdges(v)\n\n\tfor _, d := range depends.List() {\n\t\tif !targetedNodes.Include(d) {\n\t\t\tlog.Printf(\"[WARN] %s missing targeted dependency %s, removing from the graph\",\n\t\t\t\tdag.VertexName(v), dag.VertexName(d))\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\nfunc (t *TargetsTransformer) nodeIsTarget(v dag.Vertex, targets []addrs.Targetable) bool {\n\tvar vertexAddr addrs.Targetable\n\tswitch r := v.(type) {\n\tcase GraphNodeResourceInstance:\n\t\tvertexAddr = r.ResourceInstanceAddr()\n\tcase GraphNodeResource:\n\t\tvertexAddr = r.ResourceAddr()\n\tdefault:\n\t\t// Only resource and resource instance nodes can be targeted.\n\t\treturn false\n\t}\n\t_, ok := v.(GraphNodeResource)\n\tif !ok {\n\t\treturn false\n\t}\n\n\tfor _, targetAddr := range targets {\n\t\tif t.IgnoreIndices {\n\t\t\t// If we're ignoring indices then we'll convert any resource instance\n\t\t\t// addresses into resource addresses. We don't need to convert\n\t\t\t// vertexAddr because instance addresses are contained within\n\t\t\t// their associated resources, and so .TargetContains will take\n\t\t\t// care of this for us.\n\t\t\tif instance, isInstance := targetAddr.(addrs.AbsResourceInstance); isInstance {\n\t\t\t\ttargetAddr = instance.ContainingResource()\n\t\t\t}\n\t\t}\n\t\tif targetAddr.TargetContains(vertexAddr) {\n\t\t\treturn true\n\t\t}\n\t}\n\n\treturn false\n}\n\n// RemovableIfNotTargeted is a special interface for graph nodes that\n// aren't directly addressable, but need to be removed from the graph when they\n// are not targeted. (Nodes that are not directly targeted end up in the set of\n// targeted nodes because something that _is_ targeted depends on them.) The\n// initial use case for this interface is GraphNodeConfigVariable, which was\n// having trouble interpolating for module variables in targeted scenarios that\n// filtered out the resource node being referenced.\ntype RemovableIfNotTargeted interface {\n\tRemoveIfNotTargeted() bool\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/transform_transitive_reduction.go",
    "content": "package terraform\n\n// TransitiveReductionTransformer is a GraphTransformer that performs\n// finds the transitive reduction of the graph. For a definition of\n// transitive reduction, see Wikipedia.\ntype TransitiveReductionTransformer struct{}\n\nfunc (t *TransitiveReductionTransformer) Transform(g *Graph) error {\n\t// If the graph isn't valid, skip the transitive reduction.\n\t// We don't error here because Terraform itself handles graph\n\t// validation in a better way, or we assume it does.\n\tif err := g.Validate(); err != nil {\n\t\treturn nil\n\t}\n\n\t// Do it\n\tg.TransitiveReduction()\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/transform_variable.go",
    "content": "package terraform\n\nimport (\n\t\"github.com/hashicorp/terraform/addrs\"\n\t\"github.com/hashicorp/terraform/configs\"\n)\n\n// RootVariableTransformer is a GraphTransformer that adds all the root\n// variables to the graph.\n//\n// Root variables are currently no-ops but they must be added to the\n// graph since downstream things that depend on them must be able to\n// reach them.\ntype RootVariableTransformer struct {\n\tConfig *configs.Config\n}\n\nfunc (t *RootVariableTransformer) Transform(g *Graph) error {\n\t// We can have no variables if we have no config.\n\tif t.Config == nil {\n\t\treturn nil\n\t}\n\n\t// We're only considering root module variables here, since child\n\t// module variables are handled by ModuleVariableTransformer.\n\tvars := t.Config.Module.Variables\n\n\t// Add all variables here\n\tfor _, v := range vars {\n\t\tnode := &NodeRootVariable{\n\t\t\tAddr: addrs.InputVariable{\n\t\t\t\tName: v.Name,\n\t\t\t},\n\t\t\tConfig: v,\n\t\t}\n\t\tg.Add(node)\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/transform_vertex.go",
    "content": "package terraform\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/hashicorp/terraform/dag\"\n)\n\n// VertexTransformer is a GraphTransformer that transforms vertices\n// using the GraphVertexTransformers. The Transforms are run in sequential\n// order. If a transform replaces a vertex then the next transform will see\n// the new vertex.\ntype VertexTransformer struct {\n\tTransforms []GraphVertexTransformer\n}\n\nfunc (t *VertexTransformer) Transform(g *Graph) error {\n\tfor _, v := range g.Vertices() {\n\t\tfor _, vt := range t.Transforms {\n\t\t\tnewV, err := vt.Transform(v)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\t// If the vertex didn't change, then don't do anything more\n\t\t\tif newV == v {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// Vertex changed, replace it within the graph\n\t\t\tif ok := g.Replace(v, newV); !ok {\n\t\t\t\t// This should never happen, big problem\n\t\t\t\treturn fmt.Errorf(\n\t\t\t\t\t\"Failed to replace %s with %s!\\n\\nSource: %#v\\n\\nTarget: %#v\",\n\t\t\t\t\tdag.VertexName(v), dag.VertexName(newV), v, newV)\n\t\t\t}\n\n\t\t\t// Replace v so that future transforms use the proper vertex\n\t\t\tv = newV\n\t\t}\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/ui_input.go",
    "content": "package terraform\n\nimport \"context\"\n\n// UIInput is the interface that must be implemented to ask for input\n// from this user. This should forward the request to wherever the user\n// inputs things to ask for values.\ntype UIInput interface {\n\tInput(context.Context, *InputOpts) (string, error)\n}\n\n// InputOpts are options for asking for input.\ntype InputOpts struct {\n\t// Id is a unique ID for the question being asked that might be\n\t// used for logging or to look up a prior answered question.\n\tId string\n\n\t// Query is a human-friendly question for inputting this value.\n\tQuery string\n\n\t// Description is a description about what this option is. Be wary\n\t// that this will probably be in a terminal so split lines as you see\n\t// necessary.\n\tDescription string\n\n\t// Default will be the value returned if no data is entered.\n\tDefault string\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/ui_input_mock.go",
    "content": "package terraform\n\nimport \"context\"\n\n// MockUIInput is an implementation of UIInput that can be used for tests.\ntype MockUIInput struct {\n\tInputCalled       bool\n\tInputOpts         *InputOpts\n\tInputReturnMap    map[string]string\n\tInputReturnString string\n\tInputReturnError  error\n\tInputFn           func(*InputOpts) (string, error)\n}\n\nfunc (i *MockUIInput) Input(ctx context.Context, opts *InputOpts) (string, error) {\n\ti.InputCalled = true\n\ti.InputOpts = opts\n\tif i.InputFn != nil {\n\t\treturn i.InputFn(opts)\n\t}\n\tif i.InputReturnMap != nil {\n\t\treturn i.InputReturnMap[opts.Id], i.InputReturnError\n\t}\n\treturn i.InputReturnString, i.InputReturnError\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/ui_input_prefix.go",
    "content": "package terraform\n\nimport (\n\t\"context\"\n\t\"fmt\"\n)\n\n// PrefixUIInput is an implementation of UIInput that prefixes the ID\n// with a string, allowing queries to be namespaced.\ntype PrefixUIInput struct {\n\tIdPrefix    string\n\tQueryPrefix string\n\tUIInput     UIInput\n}\n\nfunc (i *PrefixUIInput) Input(ctx context.Context, opts *InputOpts) (string, error) {\n\topts.Id = fmt.Sprintf(\"%s.%s\", i.IdPrefix, opts.Id)\n\topts.Query = fmt.Sprintf(\"%s%s\", i.QueryPrefix, opts.Query)\n\treturn i.UIInput.Input(ctx, opts)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/ui_output.go",
    "content": "package terraform\n\n// UIOutput is the interface that must be implemented to output\n// data to the end user.\ntype UIOutput interface {\n\tOutput(string)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/ui_output_callback.go",
    "content": "package terraform\n\ntype CallbackUIOutput struct {\n\tOutputFn func(string)\n}\n\nfunc (o *CallbackUIOutput) Output(v string) {\n\to.OutputFn(v)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/ui_output_mock.go",
    "content": "package terraform\n\nimport \"sync\"\n\n// MockUIOutput is an implementation of UIOutput that can be used for tests.\ntype MockUIOutput struct {\n\tsync.Mutex\n\tOutputCalled  bool\n\tOutputMessage string\n\tOutputFn      func(string)\n}\n\nfunc (o *MockUIOutput) Output(v string) {\n\to.Lock()\n\tdefer o.Unlock()\n\to.OutputCalled = true\n\to.OutputMessage = v\n\tif o.OutputFn != nil {\n\t\to.OutputFn(v)\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/ui_output_provisioner.go",
    "content": "package terraform\n\nimport (\n\t\"github.com/hashicorp/terraform/addrs\"\n)\n\n// ProvisionerUIOutput is an implementation of UIOutput that calls a hook\n// for the output so that the hooks can handle it.\ntype ProvisionerUIOutput struct {\n\tInstanceAddr    addrs.AbsResourceInstance\n\tProvisionerType string\n\tHooks           []Hook\n}\n\nfunc (o *ProvisionerUIOutput) Output(msg string) {\n\tfor _, h := range o.Hooks {\n\t\th.ProvisionOutput(o.InstanceAddr, o.ProvisionerType, msg)\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/user_agent.go",
    "content": "package terraform\n\nimport (\n\t\"github.com/hashicorp/terraform/httpclient\"\n)\n\n// Generate a UserAgent string\n//\n// Deprecated: Use httpclient.UserAgentString if you are setting your\n// own User-Agent header.\nfunc UserAgentString() string {\n\treturn httpclient.UserAgentString()\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/util.go",
    "content": "package terraform\n\nimport (\n\t\"sort\"\n\n\t\"github.com/hashicorp/terraform/config\"\n)\n\n// Semaphore is a wrapper around a channel to provide\n// utility methods to clarify that we are treating the\n// channel as a semaphore\ntype Semaphore chan struct{}\n\n// NewSemaphore creates a semaphore that allows up\n// to a given limit of simultaneous acquisitions\nfunc NewSemaphore(n int) Semaphore {\n\tif n == 0 {\n\t\tpanic(\"semaphore with limit 0\")\n\t}\n\tch := make(chan struct{}, n)\n\treturn Semaphore(ch)\n}\n\n// Acquire is used to acquire an available slot.\n// Blocks until available.\nfunc (s Semaphore) Acquire() {\n\ts <- struct{}{}\n}\n\n// TryAcquire is used to do a non-blocking acquire.\n// Returns a bool indicating success\nfunc (s Semaphore) TryAcquire() bool {\n\tselect {\n\tcase s <- struct{}{}:\n\t\treturn true\n\tdefault:\n\t\treturn false\n\t}\n}\n\n// Release is used to return a slot. Acquire must\n// be called as a pre-condition.\nfunc (s Semaphore) Release() {\n\tselect {\n\tcase <-s:\n\tdefault:\n\t\tpanic(\"release without an acquire\")\n\t}\n}\n\nfunc resourceProvider(resourceType, explicitProvider string) string {\n\treturn config.ResourceProviderFullName(resourceType, explicitProvider)\n}\n\n// strSliceContains checks if a given string is contained in a slice\n// When anybody asks why Go needs generics, here you go.\nfunc strSliceContains(haystack []string, needle string) bool {\n\tfor _, s := range haystack {\n\t\tif s == needle {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// deduplicate a slice of strings\nfunc uniqueStrings(s []string) []string {\n\tif len(s) < 2 {\n\t\treturn s\n\t}\n\n\tsort.Strings(s)\n\tresult := make([]string, 1, len(s))\n\tresult[0] = s[0]\n\tfor i := 1; i < len(s); i++ {\n\t\tif s[i] != result[len(result)-1] {\n\t\t\tresult = append(result, s[i])\n\t\t}\n\t}\n\treturn result\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/valuesourcetype_string.go",
    "content": "// Code generated by \"stringer -type ValueSourceType\"; DO NOT EDIT.\n\npackage terraform\n\nimport \"strconv\"\n\nfunc _() {\n\t// An \"invalid array index\" compiler error signifies that the constant values have changed.\n\t// Re-run the stringer command to generate them again.\n\tvar x [1]struct{}\n\t_ = x[ValueFromUnknown-0]\n\t_ = x[ValueFromConfig-67]\n\t_ = x[ValueFromAutoFile-70]\n\t_ = x[ValueFromNamedFile-78]\n\t_ = x[ValueFromCLIArg-65]\n\t_ = x[ValueFromEnvVar-69]\n\t_ = x[ValueFromInput-73]\n\t_ = x[ValueFromPlan-80]\n\t_ = x[ValueFromCaller-83]\n}\n\nconst (\n\t_ValueSourceType_name_0 = \"ValueFromUnknown\"\n\t_ValueSourceType_name_1 = \"ValueFromCLIArg\"\n\t_ValueSourceType_name_2 = \"ValueFromConfig\"\n\t_ValueSourceType_name_3 = \"ValueFromEnvVarValueFromAutoFile\"\n\t_ValueSourceType_name_4 = \"ValueFromInput\"\n\t_ValueSourceType_name_5 = \"ValueFromNamedFile\"\n\t_ValueSourceType_name_6 = \"ValueFromPlan\"\n\t_ValueSourceType_name_7 = \"ValueFromCaller\"\n)\n\nvar (\n\t_ValueSourceType_index_3 = [...]uint8{0, 15, 32}\n)\n\nfunc (i ValueSourceType) String() string {\n\tswitch {\n\tcase i == 0:\n\t\treturn _ValueSourceType_name_0\n\tcase i == 65:\n\t\treturn _ValueSourceType_name_1\n\tcase i == 67:\n\t\treturn _ValueSourceType_name_2\n\tcase 69 <= i && i <= 70:\n\t\ti -= 69\n\t\treturn _ValueSourceType_name_3[_ValueSourceType_index_3[i]:_ValueSourceType_index_3[i+1]]\n\tcase i == 73:\n\t\treturn _ValueSourceType_name_4\n\tcase i == 78:\n\t\treturn _ValueSourceType_name_5\n\tcase i == 80:\n\t\treturn _ValueSourceType_name_6\n\tcase i == 83:\n\t\treturn _ValueSourceType_name_7\n\tdefault:\n\t\treturn \"ValueSourceType(\" + strconv.FormatInt(int64(i), 10) + \")\"\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/variables.go",
    "content": "package terraform\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/zclconf/go-cty/cty\"\n\t\"github.com/zclconf/go-cty/cty/convert\"\n\n\t\"github.com/hashicorp/terraform/configs\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n)\n\n// InputValue represents a value for a variable in the root module, provided\n// as part of the definition of an operation.\ntype InputValue struct {\n\tValue      cty.Value\n\tSourceType ValueSourceType\n\n\t// SourceRange provides source location information for values whose\n\t// SourceType is either ValueFromConfig or ValueFromFile. It is not\n\t// populated for other source types, and so should not be used.\n\tSourceRange tfdiags.SourceRange\n}\n\n// ValueSourceType describes what broad category of source location provided\n// a particular value.\ntype ValueSourceType rune\n\nconst (\n\t// ValueFromUnknown is the zero value of ValueSourceType and is not valid.\n\tValueFromUnknown ValueSourceType = 0\n\n\t// ValueFromConfig indicates that a value came from a .tf or .tf.json file,\n\t// e.g. the default value defined for a variable.\n\tValueFromConfig ValueSourceType = 'C'\n\n\t// ValueFromAutoFile indicates that a value came from a \"values file\", like\n\t// a .tfvars file, that was implicitly loaded by naming convention.\n\tValueFromAutoFile ValueSourceType = 'F'\n\n\t// ValueFromNamedFile indicates that a value came from a named \"values file\",\n\t// like a .tfvars file, that was passed explicitly on the command line (e.g.\n\t// -var-file=foo.tfvars).\n\tValueFromNamedFile ValueSourceType = 'N'\n\n\t// ValueFromCLIArg indicates that the value was provided directly in\n\t// a CLI argument. The name of this argument is not recorded and so it must\n\t// be inferred from context.\n\tValueFromCLIArg ValueSourceType = 'A'\n\n\t// ValueFromEnvVar indicates that the value was provided via an environment\n\t// variable. The name of the variable is not recorded and so it must be\n\t// inferred from context.\n\tValueFromEnvVar ValueSourceType = 'E'\n\n\t// ValueFromInput indicates that the value was provided at an interactive\n\t// input prompt.\n\tValueFromInput ValueSourceType = 'I'\n\n\t// ValueFromPlan indicates that the value was retrieved from a stored plan.\n\tValueFromPlan ValueSourceType = 'P'\n\n\t// ValueFromCaller indicates that the value was explicitly overridden by\n\t// a caller to Context.SetVariable after the context was constructed.\n\tValueFromCaller ValueSourceType = 'S'\n)\n\nfunc (v *InputValue) GoString() string {\n\tif (v.SourceRange != tfdiags.SourceRange{}) {\n\t\treturn fmt.Sprintf(\"&terraform.InputValue{Value: %#v, SourceType: %#v, SourceRange: %#v}\", v.Value, v.SourceType, v.SourceRange)\n\t} else {\n\t\treturn fmt.Sprintf(\"&terraform.InputValue{Value: %#v, SourceType: %#v}\", v.Value, v.SourceType)\n\t}\n}\n\nfunc (v ValueSourceType) GoString() string {\n\treturn fmt.Sprintf(\"terraform.%s\", v)\n}\n\n//go:generate stringer -type ValueSourceType\n\n// InputValues is a map of InputValue instances.\ntype InputValues map[string]*InputValue\n\n// InputValuesFromCaller turns the given map of naked values into an\n// InputValues that attributes each value to \"a caller\", using the source\n// type ValueFromCaller. This is primarily useful for testing purposes.\n//\n// This should not be used as a general way to convert map[string]cty.Value\n// into InputValues, since in most real cases we want to set a suitable\n// other SourceType and possibly SourceRange value.\nfunc InputValuesFromCaller(vals map[string]cty.Value) InputValues {\n\tret := make(InputValues, len(vals))\n\tfor k, v := range vals {\n\t\tret[k] = &InputValue{\n\t\t\tValue:      v,\n\t\t\tSourceType: ValueFromCaller,\n\t\t}\n\t}\n\treturn ret\n}\n\n// Override merges the given value maps with the receiver, overriding any\n// conflicting keys so that the latest definition wins.\nfunc (vv InputValues) Override(others ...InputValues) InputValues {\n\t// FIXME: This should check to see if any of the values are maps and\n\t// merge them if so, in order to preserve the behavior from prior to\n\t// Terraform 0.12.\n\tret := make(InputValues)\n\tfor k, v := range vv {\n\t\tret[k] = v\n\t}\n\tfor _, other := range others {\n\t\tfor k, v := range other {\n\t\t\tret[k] = v\n\t\t}\n\t}\n\treturn ret\n}\n\n// JustValues returns a map that just includes the values, discarding the\n// source information.\nfunc (vv InputValues) JustValues() map[string]cty.Value {\n\tret := make(map[string]cty.Value, len(vv))\n\tfor k, v := range vv {\n\t\tret[k] = v.Value\n\t}\n\treturn ret\n}\n\n// DefaultVariableValues returns an InputValues map representing the default\n// values specified for variables in the given configuration map.\nfunc DefaultVariableValues(configs map[string]*configs.Variable) InputValues {\n\tret := make(InputValues)\n\tfor k, c := range configs {\n\t\tif c.Default == cty.NilVal {\n\t\t\tcontinue\n\t\t}\n\t\tret[k] = &InputValue{\n\t\t\tValue:       c.Default,\n\t\t\tSourceType:  ValueFromConfig,\n\t\t\tSourceRange: tfdiags.SourceRangeFromHCL(c.DeclRange),\n\t\t}\n\t}\n\treturn ret\n}\n\n// SameValues returns true if the given InputValues has the same values as\n// the receiever, disregarding the source types and source ranges.\n//\n// Values are compared using the cty \"RawEquals\" method, which means that\n// unknown values can be considered equal to one another if they are of the\n// same type.\nfunc (vv InputValues) SameValues(other InputValues) bool {\n\tif len(vv) != len(other) {\n\t\treturn false\n\t}\n\n\tfor k, v := range vv {\n\t\tov, exists := other[k]\n\t\tif !exists {\n\t\t\treturn false\n\t\t}\n\t\tif !v.Value.RawEquals(ov.Value) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\treturn true\n}\n\n// HasValues returns true if the reciever has the same values as in the given\n// map, disregarding the source types and source ranges.\n//\n// Values are compared using the cty \"RawEquals\" method, which means that\n// unknown values can be considered equal to one another if they are of the\n// same type.\nfunc (vv InputValues) HasValues(vals map[string]cty.Value) bool {\n\tif len(vv) != len(vals) {\n\t\treturn false\n\t}\n\n\tfor k, v := range vv {\n\t\toVal, exists := vals[k]\n\t\tif !exists {\n\t\t\treturn false\n\t\t}\n\t\tif !v.Value.RawEquals(oVal) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\treturn true\n}\n\n// Identical returns true if the given InputValues has the same values,\n// source types, and source ranges as the receiver.\n//\n// Values are compared using the cty \"RawEquals\" method, which means that\n// unknown values can be considered equal to one another if they are of the\n// same type.\n//\n// This method is primarily for testing. For most practical purposes, it's\n// better to use SameValues or HasValues.\nfunc (vv InputValues) Identical(other InputValues) bool {\n\tif len(vv) != len(other) {\n\t\treturn false\n\t}\n\n\tfor k, v := range vv {\n\t\tov, exists := other[k]\n\t\tif !exists {\n\t\t\treturn false\n\t\t}\n\t\tif !v.Value.RawEquals(ov.Value) {\n\t\t\treturn false\n\t\t}\n\t\tif v.SourceType != ov.SourceType {\n\t\t\treturn false\n\t\t}\n\t\tif v.SourceRange != ov.SourceRange {\n\t\t\treturn false\n\t\t}\n\t}\n\n\treturn true\n}\n\n// checkInputVariables ensures that variable values supplied at the UI conform\n// to their corresponding declarations in configuration.\n//\n// The set of values is considered valid only if the returned diagnostics\n// does not contain errors. A valid set of values may still produce warnings,\n// which should be returned to the user.\nfunc checkInputVariables(vcs map[string]*configs.Variable, vs InputValues) tfdiags.Diagnostics {\n\tvar diags tfdiags.Diagnostics\n\n\tfor name, vc := range vcs {\n\t\tval, isSet := vs[name]\n\t\tif !isSet {\n\t\t\t// Always an error, since the caller should already have included\n\t\t\t// default values from the configuration in the values map.\n\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\ttfdiags.Error,\n\t\t\t\t\"Unassigned variable\",\n\t\t\t\tfmt.Sprintf(\"The input variable %q has not been assigned a value. This is a bug in Terraform; please report it in a GitHub issue.\", name),\n\t\t\t))\n\t\t\tcontinue\n\t\t}\n\n\t\twantType := vc.Type\n\n\t\t// A given value is valid if it can convert to the desired type.\n\t\t_, err := convert.Convert(val.Value, wantType)\n\t\tif err != nil {\n\t\t\tswitch val.SourceType {\n\t\t\tcase ValueFromConfig, ValueFromAutoFile, ValueFromNamedFile:\n\t\t\t\t// We have source location information for these.\n\t\t\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\tSummary:  \"Invalid value for input variable\",\n\t\t\t\t\tDetail:   fmt.Sprintf(\"The given value is not valid for variable %q: %s.\", name, err),\n\t\t\t\t\tSubject:  val.SourceRange.ToHCL().Ptr(),\n\t\t\t\t})\n\t\t\tcase ValueFromEnvVar:\n\t\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\t\ttfdiags.Error,\n\t\t\t\t\t\"Invalid value for input variable\",\n\t\t\t\t\tfmt.Sprintf(\"The environment variable TF_VAR_%s does not contain a valid value for variable %q: %s.\", name, name, err),\n\t\t\t\t))\n\t\t\tcase ValueFromCLIArg:\n\t\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\t\ttfdiags.Error,\n\t\t\t\t\t\"Invalid value for input variable\",\n\t\t\t\t\tfmt.Sprintf(\"The argument -var=\\\"%s=...\\\" does not contain a valid value for variable %q: %s.\", name, name, err),\n\t\t\t\t))\n\t\t\tcase ValueFromInput:\n\t\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\t\ttfdiags.Error,\n\t\t\t\t\t\"Invalid value for input variable\",\n\t\t\t\t\tfmt.Sprintf(\"The value entered for variable %q is not valid: %s.\", name, err),\n\t\t\t\t))\n\t\t\tdefault:\n\t\t\t\t// The above gets us good coverage for the situations users\n\t\t\t\t// are likely to encounter with their own inputs. The other\n\t\t\t\t// cases are generally implementation bugs, so we'll just\n\t\t\t\t// use a generic error for these.\n\t\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\t\ttfdiags.Error,\n\t\t\t\t\t\"Invalid value for input variable\",\n\t\t\t\t\tfmt.Sprintf(\"The value provided for variable %q is not valid: %s.\", name, err),\n\t\t\t\t))\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check for any variables that are assigned without being configured.\n\t// This is always an implementation error in the caller, because we\n\t// expect undefined variables to be caught during context construction\n\t// where there is better context to report it well.\n\tfor name := range vs {\n\t\tif _, defined := vcs[name]; !defined {\n\t\t\tdiags = diags.Append(tfdiags.Sourceless(\n\t\t\t\ttfdiags.Error,\n\t\t\t\t\"Value assigned to undeclared variable\",\n\t\t\t\tfmt.Sprintf(\"A value was assigned to an undeclared input variable %q.\", name),\n\t\t\t))\n\t\t}\n\t}\n\n\treturn diags\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/version.go",
    "content": "package terraform\n\nimport (\n\t\"github.com/hashicorp/terraform/version\"\n)\n\n// TODO: update providers to use the version package directly\nfunc VersionString() string {\n\treturn version.String()\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/version_required.go",
    "content": "package terraform\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/hashicorp/terraform/tfdiags\"\n\n\t\"github.com/hashicorp/terraform/configs\"\n\n\ttfversion \"github.com/hashicorp/terraform/version\"\n)\n\n// CheckCoreVersionRequirements visits each of the modules in the given\n// configuration tree and verifies that any given Core version constraints\n// match with the version of Terraform Core that is being used.\n//\n// The returned diagnostics will contain errors if any constraints do not match.\n// The returned diagnostics might also return warnings, which should be\n// displayed to the user.\nfunc CheckCoreVersionRequirements(config *configs.Config) tfdiags.Diagnostics {\n\tif config == nil {\n\t\treturn nil\n\t}\n\n\tvar diags tfdiags.Diagnostics\n\tmodule := config.Module\n\n\tfor _, constraint := range module.CoreVersionConstraints {\n\t\tif !constraint.Required.Check(tfversion.SemVer) {\n\t\t\tswitch {\n\t\t\tcase len(config.Path) == 0:\n\t\t\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\tSummary:  \"Unsupported Terraform Core version\",\n\t\t\t\t\tDetail: fmt.Sprintf(\n\t\t\t\t\t\t\"This configuration does not support Terraform version %s. To proceed, either choose another supported Terraform version or update this version constraint. Version constraints are normally set for good reason, so updating the constraint may lead to other errors or unexpected behavior.\",\n\t\t\t\t\t\ttfversion.String(),\n\t\t\t\t\t),\n\t\t\t\t\tSubject: &constraint.DeclRange,\n\t\t\t\t})\n\t\t\tdefault:\n\t\t\t\tdiags = diags.Append(&hcl.Diagnostic{\n\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\tSummary:  \"Unsupported Terraform Core version\",\n\t\t\t\t\tDetail: fmt.Sprintf(\n\t\t\t\t\t\t\"Module %s (from %s) does not support Terraform version %s. To proceed, either choose another supported Terraform version or update this version constraint. Version constraints are normally set for good reason, so updating the constraint may lead to other errors or unexpected behavior.\",\n\t\t\t\t\t\tconfig.Path, config.SourceAddr, tfversion.String(),\n\t\t\t\t\t),\n\t\t\t\t\tSubject: &constraint.DeclRange,\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t}\n\n\tfor _, c := range config.Children {\n\t\tchildDiags := CheckCoreVersionRequirements(c)\n\t\tdiags = diags.Append(childDiags)\n\t}\n\n\treturn diags\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/terraform/walkoperation_string.go",
    "content": "// Code generated by \"stringer -type=walkOperation graph_walk_operation.go\"; DO NOT EDIT.\n\npackage terraform\n\nimport \"strconv\"\n\nfunc _() {\n\t// An \"invalid array index\" compiler error signifies that the constant values have changed.\n\t// Re-run the stringer command to generate them again.\n\tvar x [1]struct{}\n\t_ = x[walkInvalid-0]\n\t_ = x[walkApply-1]\n\t_ = x[walkPlan-2]\n\t_ = x[walkPlanDestroy-3]\n\t_ = x[walkRefresh-4]\n\t_ = x[walkValidate-5]\n\t_ = x[walkDestroy-6]\n\t_ = x[walkImport-7]\n\t_ = x[walkEval-8]\n}\n\nconst _walkOperation_name = \"walkInvalidwalkApplywalkPlanwalkPlanDestroywalkRefreshwalkValidatewalkDestroywalkImportwalkEval\"\n\nvar _walkOperation_index = [...]uint8{0, 11, 20, 28, 43, 54, 66, 77, 87, 95}\n\nfunc (i walkOperation) String() string {\n\tif i >= walkOperation(len(_walkOperation_index)-1) {\n\t\treturn \"walkOperation(\" + strconv.FormatInt(int64(i), 10) + \")\"\n\t}\n\treturn _walkOperation_name[_walkOperation_index[i]:_walkOperation_index[i+1]]\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/tfdiags/config_traversals.go",
    "content": "package tfdiags\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"strconv\"\n\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// FormatCtyPath is a helper function to produce a user-friendly string\n// representation of a cty.Path. The result uses a syntax similar to the\n// HCL expression language in the hope of it being familiar to users.\nfunc FormatCtyPath(path cty.Path) string {\n\tvar buf bytes.Buffer\n\tfor _, step := range path {\n\t\tswitch ts := step.(type) {\n\t\tcase cty.GetAttrStep:\n\t\t\tfmt.Fprintf(&buf, \".%s\", ts.Name)\n\t\tcase cty.IndexStep:\n\t\t\tbuf.WriteByte('[')\n\t\t\tkey := ts.Key\n\t\t\tkeyTy := key.Type()\n\t\t\tswitch {\n\t\t\tcase key.IsNull():\n\t\t\t\tbuf.WriteString(\"null\")\n\t\t\tcase !key.IsKnown():\n\t\t\t\tbuf.WriteString(\"(not yet known)\")\n\t\t\tcase keyTy == cty.Number:\n\t\t\t\tbf := key.AsBigFloat()\n\t\t\t\tbuf.WriteString(bf.Text('g', -1))\n\t\t\tcase keyTy == cty.String:\n\t\t\t\tbuf.WriteString(strconv.Quote(key.AsString()))\n\t\t\tdefault:\n\t\t\t\tbuf.WriteString(\"...\")\n\t\t\t}\n\t\t\tbuf.WriteByte(']')\n\t\t}\n\t}\n\treturn buf.String()\n}\n\n// FormatError is a helper function to produce a user-friendly string\n// representation of certain special error types that we might want to\n// include in diagnostic messages.\n//\n// This currently has special behavior only for cty.PathError, where a\n// non-empty path is rendered in a HCL-like syntax as context.\nfunc FormatError(err error) string {\n\tperr, ok := err.(cty.PathError)\n\tif !ok || len(perr.Path) == 0 {\n\t\treturn err.Error()\n\t}\n\n\treturn fmt.Sprintf(\"%s: %s\", FormatCtyPath(perr.Path), perr.Error())\n}\n\n// FormatErrorPrefixed is like FormatError except that it presents any path\n// information after the given prefix string, which is assumed to contain\n// an HCL syntax representation of the value that errors are relative to.\nfunc FormatErrorPrefixed(err error, prefix string) string {\n\tperr, ok := err.(cty.PathError)\n\tif !ok || len(perr.Path) == 0 {\n\t\treturn fmt.Sprintf(\"%s: %s\", prefix, err.Error())\n\t}\n\n\treturn fmt.Sprintf(\"%s%s: %s\", prefix, FormatCtyPath(perr.Path), perr.Error())\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/tfdiags/contextual.go",
    "content": "package tfdiags\n\nimport (\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/zclconf/go-cty/cty\"\n\t\"github.com/zclconf/go-cty/cty/gocty\"\n)\n\n// The \"contextual\" family of diagnostics are designed to allow separating\n// the detection of a problem from placing that problem in context. For\n// example, some code that is validating an object extracted from configuration\n// may not have access to the configuration that generated it, but can still\n// report problems within that object which the caller can then place in\n// context by calling IsConfigBody on the returned diagnostics.\n//\n// When contextual diagnostics are used, the documentation for a method must\n// be very explicit about what context is implied for any diagnostics returned,\n// to help ensure the expected result.\n\n// contextualFromConfig is an interface type implemented by diagnostic types\n// that can elaborate themselves when given information about the configuration\n// body they are embedded in.\n//\n// Usually this entails extracting source location information in order to\n// populate the \"Subject\" range.\ntype contextualFromConfigBody interface {\n\tElaborateFromConfigBody(hcl.Body) Diagnostic\n}\n\n// InConfigBody returns a copy of the receiver with any config-contextual\n// diagnostics elaborated in the context of the given body.\nfunc (d Diagnostics) InConfigBody(body hcl.Body) Diagnostics {\n\tif len(d) == 0 {\n\t\treturn nil\n\t}\n\n\tret := make(Diagnostics, len(d))\n\tfor i, srcDiag := range d {\n\t\tif cd, isCD := srcDiag.(contextualFromConfigBody); isCD {\n\t\t\tret[i] = cd.ElaborateFromConfigBody(body)\n\t\t} else {\n\t\t\tret[i] = srcDiag\n\t\t}\n\t}\n\n\treturn ret\n}\n\n// AttributeValue returns a diagnostic about an attribute value in an implied current\n// configuration context. This should be returned only from functions whose\n// interface specifies a clear configuration context that this will be\n// resolved in.\n//\n// The given path is relative to the implied configuration context. To describe\n// a top-level attribute, it should be a single-element cty.Path with a\n// cty.GetAttrStep. It's assumed that the path is returning into a structure\n// that would be produced by our conventions in the configschema package; it\n// may return unexpected results for structures that can't be represented by\n// configschema.\n//\n// Since mapping attribute paths back onto configuration is an imprecise\n// operation (e.g. dynamic block generation may cause the same block to be\n// evaluated multiple times) the diagnostic detail should include the attribute\n// name and other context required to help the user understand what is being\n// referenced in case the identified source range is not unique.\n//\n// The returned attribute will not have source location information until\n// context is applied to the containing diagnostics using diags.InConfigBody.\n// After context is applied, the source location is the value assigned to the\n// named attribute, or the containing body's \"missing item range\" if no\n// value is present.\nfunc AttributeValue(severity Severity, summary, detail string, attrPath cty.Path) Diagnostic {\n\treturn &attributeDiagnostic{\n\t\tdiagnosticBase: diagnosticBase{\n\t\t\tseverity: severity,\n\t\t\tsummary:  summary,\n\t\t\tdetail:   detail,\n\t\t},\n\t\tattrPath: attrPath,\n\t}\n}\n\n// GetAttribute extracts an attribute cty.Path from a diagnostic if it contains\n// one. Normally this is not accessed directly, and instead the config body is\n// added to the Diagnostic to create a more complete message for the user. In\n// some cases however, we may want to know just the name of the attribute that\n// generated the Diagnostic message.\n// This returns a nil cty.Path if it does not exist in the Diagnostic.\nfunc GetAttribute(d Diagnostic) cty.Path {\n\tif d, ok := d.(*attributeDiagnostic); ok {\n\t\treturn d.attrPath\n\t}\n\treturn nil\n}\n\ntype attributeDiagnostic struct {\n\tdiagnosticBase\n\tattrPath cty.Path\n\tsubject  *SourceRange // populated only after ElaborateFromConfigBody\n}\n\n// ElaborateFromConfigBody finds the most accurate possible source location\n// for a diagnostic's attribute path within the given body.\n//\n// Backing out from a path back to a source location is not always entirely\n// possible because we lose some information in the decoding process, so\n// if an exact position cannot be found then the returned diagnostic will\n// refer to a position somewhere within the containing body, which is assumed\n// to be better than no location at all.\n//\n// If possible it is generally better to report an error at a layer where\n// source location information is still available, for more accuracy. This\n// is not always possible due to system architecture, so this serves as a\n// \"best effort\" fallback behavior for such situations.\nfunc (d *attributeDiagnostic) ElaborateFromConfigBody(body hcl.Body) Diagnostic {\n\tif len(d.attrPath) < 1 {\n\t\t// Should never happen, but we'll allow it rather than crashing.\n\t\treturn d\n\t}\n\n\tif d.subject != nil {\n\t\t// Don't modify an already-elaborated diagnostic.\n\t\treturn d\n\t}\n\n\tret := *d\n\n\t// This function will often end up re-decoding values that were already\n\t// decoded by an earlier step. This is non-ideal but is architecturally\n\t// more convenient than arranging for source location information to be\n\t// propagated to every place in Terraform, and this happens only in the\n\t// presence of errors where performance isn't a concern.\n\n\ttraverse := d.attrPath[:]\n\tfinal := d.attrPath[len(d.attrPath)-1]\n\n\t// Index should never be the first step\n\t// as indexing of top blocks (such as resources & data sources)\n\t// is handled elsewhere\n\tif _, isIdxStep := traverse[0].(cty.IndexStep); isIdxStep {\n\t\tsubject := SourceRangeFromHCL(body.MissingItemRange())\n\t\tret.subject = &subject\n\t\treturn &ret\n\t}\n\n\t// Process index separately\n\tidxStep, hasIdx := final.(cty.IndexStep)\n\tif hasIdx {\n\t\tfinal = d.attrPath[len(d.attrPath)-2]\n\t\ttraverse = d.attrPath[:len(d.attrPath)-1]\n\t}\n\n\t// If we have more than one step after removing index\n\t// then we'll first try to traverse to a child body\n\t// corresponding to the requested path.\n\tif len(traverse) > 1 {\n\t\tbody = traversePathSteps(traverse, body)\n\t}\n\n\t// Default is to indicate a missing item in the deepest body we reached\n\t// while traversing.\n\tsubject := SourceRangeFromHCL(body.MissingItemRange())\n\tret.subject = &subject\n\n\t// Once we get here, \"final\" should be a GetAttr step that maps to an\n\t// attribute in our current body.\n\tfinalStep, isAttr := final.(cty.GetAttrStep)\n\tif !isAttr {\n\t\treturn &ret\n\t}\n\n\tcontent, _, contentDiags := body.PartialContent(&hcl.BodySchema{\n\t\tAttributes: []hcl.AttributeSchema{\n\t\t\t{\n\t\t\t\tName:     finalStep.Name,\n\t\t\t\tRequired: true,\n\t\t\t},\n\t\t},\n\t})\n\tif contentDiags.HasErrors() {\n\t\treturn &ret\n\t}\n\n\tif attr, ok := content.Attributes[finalStep.Name]; ok {\n\t\thclRange := attr.Expr.Range()\n\t\tif hasIdx {\n\t\t\t// Try to be more precise by finding index range\n\t\t\thclRange = hclRangeFromIndexStepAndAttribute(idxStep, attr)\n\t\t}\n\t\tsubject = SourceRangeFromHCL(hclRange)\n\t\tret.subject = &subject\n\t}\n\n\treturn &ret\n}\n\nfunc traversePathSteps(traverse []cty.PathStep, body hcl.Body) hcl.Body {\n\tfor i := 0; i < len(traverse); i++ {\n\t\tstep := traverse[i]\n\n\t\tswitch tStep := step.(type) {\n\t\tcase cty.GetAttrStep:\n\n\t\t\tvar next cty.PathStep\n\t\t\tif i < (len(traverse) - 1) {\n\t\t\t\tnext = traverse[i+1]\n\t\t\t}\n\n\t\t\t// Will be indexing into our result here?\n\t\t\tvar indexType cty.Type\n\t\t\tvar indexVal cty.Value\n\t\t\tif nextIndex, ok := next.(cty.IndexStep); ok {\n\t\t\t\tindexVal = nextIndex.Key\n\t\t\t\tindexType = indexVal.Type()\n\t\t\t\ti++ // skip over the index on subsequent iterations\n\t\t\t}\n\n\t\t\tvar blockLabelNames []string\n\t\t\tif indexType == cty.String {\n\t\t\t\t// Map traversal means we expect one label for the key.\n\t\t\t\tblockLabelNames = []string{\"key\"}\n\t\t\t}\n\n\t\t\t// For intermediate steps we expect to be referring to a child\n\t\t\t// block, so we'll attempt decoding under that assumption.\n\t\t\tcontent, _, contentDiags := body.PartialContent(&hcl.BodySchema{\n\t\t\t\tBlocks: []hcl.BlockHeaderSchema{\n\t\t\t\t\t{\n\t\t\t\t\t\tType:       tStep.Name,\n\t\t\t\t\t\tLabelNames: blockLabelNames,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t\tif contentDiags.HasErrors() {\n\t\t\t\treturn body\n\t\t\t}\n\t\t\tfiltered := make([]*hcl.Block, 0, len(content.Blocks))\n\t\t\tfor _, block := range content.Blocks {\n\t\t\t\tif block.Type == tStep.Name {\n\t\t\t\t\tfiltered = append(filtered, block)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif len(filtered) == 0 {\n\t\t\t\t// Step doesn't refer to a block\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tswitch indexType {\n\t\t\tcase cty.NilType: // no index at all\n\t\t\t\tif len(filtered) != 1 {\n\t\t\t\t\treturn body\n\t\t\t\t}\n\t\t\t\tbody = filtered[0].Body\n\t\t\tcase cty.Number:\n\t\t\t\tvar idx int\n\t\t\t\terr := gocty.FromCtyValue(indexVal, &idx)\n\t\t\t\tif err != nil || idx >= len(filtered) {\n\t\t\t\t\treturn body\n\t\t\t\t}\n\t\t\t\tbody = filtered[idx].Body\n\t\t\tcase cty.String:\n\t\t\t\tkey := indexVal.AsString()\n\t\t\t\tvar block *hcl.Block\n\t\t\t\tfor _, candidate := range filtered {\n\t\t\t\t\tif candidate.Labels[0] == key {\n\t\t\t\t\t\tblock = candidate\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif block == nil {\n\t\t\t\t\t// No block with this key, so we'll just indicate a\n\t\t\t\t\t// missing item in the containing block.\n\t\t\t\t\treturn body\n\t\t\t\t}\n\t\t\t\tbody = block.Body\n\t\t\tdefault:\n\t\t\t\t// Should never happen, because only string and numeric indices\n\t\t\t\t// are supported by cty collections.\n\t\t\t\treturn body\n\t\t\t}\n\n\t\tdefault:\n\t\t\t// For any other kind of step, we'll just return our current body\n\t\t\t// as the subject and accept that this is a little inaccurate.\n\t\t\treturn body\n\t\t}\n\t}\n\treturn body\n}\n\nfunc hclRangeFromIndexStepAndAttribute(idxStep cty.IndexStep, attr *hcl.Attribute) hcl.Range {\n\tswitch idxStep.Key.Type() {\n\tcase cty.Number:\n\t\tvar idx int\n\t\terr := gocty.FromCtyValue(idxStep.Key, &idx)\n\t\titems, diags := hcl.ExprList(attr.Expr)\n\t\tif diags.HasErrors() {\n\t\t\treturn attr.Expr.Range()\n\t\t}\n\t\tif err != nil || idx >= len(items) {\n\t\t\treturn attr.NameRange\n\t\t}\n\t\treturn items[idx].Range()\n\tcase cty.String:\n\t\tpairs, diags := hcl.ExprMap(attr.Expr)\n\t\tif diags.HasErrors() {\n\t\t\treturn attr.Expr.Range()\n\t\t}\n\t\tstepKey := idxStep.Key.AsString()\n\t\tfor _, kvPair := range pairs {\n\t\t\tkey, err := kvPair.Key.Value(nil)\n\t\t\tif err != nil {\n\t\t\t\treturn attr.Expr.Range()\n\t\t\t}\n\t\t\tif key.AsString() == stepKey {\n\t\t\t\tstartRng := kvPair.Value.StartRange()\n\t\t\t\treturn startRng\n\t\t\t}\n\t\t}\n\t\treturn attr.NameRange\n\t}\n\treturn attr.Expr.Range()\n}\n\nfunc (d *attributeDiagnostic) Source() Source {\n\treturn Source{\n\t\tSubject: d.subject,\n\t}\n}\n\n// WholeContainingBody returns a diagnostic about the body that is an implied\n// current configuration context. This should be returned only from\n// functions whose interface specifies a clear configuration context that this\n// will be resolved in.\n//\n// The returned attribute will not have source location information until\n// context is applied to the containing diagnostics using diags.InConfigBody.\n// After context is applied, the source location is currently the missing item\n// range of the body. In future, this may change to some other suitable\n// part of the containing body.\nfunc WholeContainingBody(severity Severity, summary, detail string) Diagnostic {\n\treturn &wholeBodyDiagnostic{\n\t\tdiagnosticBase: diagnosticBase{\n\t\t\tseverity: severity,\n\t\t\tsummary:  summary,\n\t\t\tdetail:   detail,\n\t\t},\n\t}\n}\n\ntype wholeBodyDiagnostic struct {\n\tdiagnosticBase\n\tsubject *SourceRange // populated only after ElaborateFromConfigBody\n}\n\nfunc (d *wholeBodyDiagnostic) ElaborateFromConfigBody(body hcl.Body) Diagnostic {\n\tif d.subject != nil {\n\t\t// Don't modify an already-elaborated diagnostic.\n\t\treturn d\n\t}\n\n\tret := *d\n\trng := SourceRangeFromHCL(body.MissingItemRange())\n\tret.subject = &rng\n\treturn &ret\n}\n\nfunc (d *wholeBodyDiagnostic) Source() Source {\n\treturn Source{\n\t\tSubject: d.subject,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/tfdiags/diagnostic.go",
    "content": "package tfdiags\n\nimport (\n\t\"github.com/hashicorp/hcl2/hcl\"\n)\n\ntype Diagnostic interface {\n\tSeverity() Severity\n\tDescription() Description\n\tSource() Source\n\n\t// FromExpr returns the expression-related context for the diagnostic, if\n\t// available. Returns nil if the diagnostic is not related to an\n\t// expression evaluation.\n\tFromExpr() *FromExpr\n}\n\ntype Severity rune\n\n//go:generate stringer -type=Severity\n\nconst (\n\tError   Severity = 'E'\n\tWarning Severity = 'W'\n)\n\ntype Description struct {\n\tSummary string\n\tDetail  string\n}\n\ntype Source struct {\n\tSubject *SourceRange\n\tContext *SourceRange\n}\n\ntype FromExpr struct {\n\tExpression  hcl.Expression\n\tEvalContext *hcl.EvalContext\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/tfdiags/diagnostic_base.go",
    "content": "package tfdiags\n\n// diagnosticBase can be embedded in other diagnostic structs to get\n// default implementations of Severity and Description. This type also\n// has default implementations of Source and FromExpr that return no source\n// location or expression-related information, so embedders should generally\n// override those method to return more useful results where possible.\ntype diagnosticBase struct {\n\tseverity Severity\n\tsummary  string\n\tdetail   string\n}\n\nfunc (d diagnosticBase) Severity() Severity {\n\treturn d.severity\n}\n\nfunc (d diagnosticBase) Description() Description {\n\treturn Description{\n\t\tSummary: d.summary,\n\t\tDetail:  d.detail,\n\t}\n}\n\nfunc (d diagnosticBase) Source() Source {\n\treturn Source{}\n}\n\nfunc (d diagnosticBase) FromExpr() *FromExpr {\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/tfdiags/diagnostics.go",
    "content": "package tfdiags\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"path/filepath\"\n\t\"sort\"\n\t\"strings\"\n\n\t\"github.com/hashicorp/errwrap\"\n\tmultierror \"github.com/hashicorp/go-multierror\"\n\t\"github.com/hashicorp/hcl2/hcl\"\n)\n\n// Diagnostics is a list of diagnostics. Diagnostics is intended to be used\n// where a Go \"error\" might normally be used, allowing richer information\n// to be conveyed (more context, support for warnings).\n//\n// A nil Diagnostics is a valid, empty diagnostics list, thus allowing\n// heap allocation to be avoided in the common case where there are no\n// diagnostics to report at all.\ntype Diagnostics []Diagnostic\n\n// Append is the main interface for constructing Diagnostics lists, taking\n// an existing list (which may be nil) and appending the new objects to it\n// after normalizing them to be implementations of Diagnostic.\n//\n// The usual pattern for a function that natively \"speaks\" diagnostics is:\n//\n//     // Create a nil Diagnostics at the start of the function\n//     var diags diag.Diagnostics\n//\n//     // At later points, build on it if errors / warnings occur:\n//     foo, err := DoSomethingRisky()\n//     if err != nil {\n//         diags = diags.Append(err)\n//     }\n//\n//     // Eventually return the result and diagnostics in place of error\n//     return result, diags\n//\n// Append accepts a variety of different diagnostic-like types, including\n// native Go errors and HCL diagnostics. It also knows how to unwrap\n// a multierror.Error into separate error diagnostics. It can be passed\n// another Diagnostics to concatenate the two lists. If given something\n// it cannot handle, this function will panic.\nfunc (diags Diagnostics) Append(new ...interface{}) Diagnostics {\n\tfor _, item := range new {\n\t\tif item == nil {\n\t\t\tcontinue\n\t\t}\n\n\t\tswitch ti := item.(type) {\n\t\tcase Diagnostic:\n\t\t\tdiags = append(diags, ti)\n\t\tcase Diagnostics:\n\t\t\tdiags = append(diags, ti...) // flatten\n\t\tcase diagnosticsAsError:\n\t\t\tdiags = diags.Append(ti.Diagnostics) // unwrap\n\t\tcase NonFatalError:\n\t\t\tdiags = diags.Append(ti.Diagnostics) // unwrap\n\t\tcase hcl.Diagnostics:\n\t\t\tfor _, hclDiag := range ti {\n\t\t\t\tdiags = append(diags, hclDiagnostic{hclDiag})\n\t\t\t}\n\t\tcase *hcl.Diagnostic:\n\t\t\tdiags = append(diags, hclDiagnostic{ti})\n\t\tcase *multierror.Error:\n\t\t\tfor _, err := range ti.Errors {\n\t\t\t\tdiags = append(diags, nativeError{err})\n\t\t\t}\n\t\tcase error:\n\t\t\tswitch {\n\t\t\tcase errwrap.ContainsType(ti, Diagnostics(nil)):\n\t\t\t\t// If we have an errwrap wrapper with a Diagnostics hiding\n\t\t\t\t// inside then we'll unpick it here to get access to the\n\t\t\t\t// individual diagnostics.\n\t\t\t\tdiags = diags.Append(errwrap.GetType(ti, Diagnostics(nil)))\n\t\t\tcase errwrap.ContainsType(ti, hcl.Diagnostics(nil)):\n\t\t\t\t// Likewise, if we have HCL diagnostics we'll unpick that too.\n\t\t\t\tdiags = diags.Append(errwrap.GetType(ti, hcl.Diagnostics(nil)))\n\t\t\tdefault:\n\t\t\t\tdiags = append(diags, nativeError{ti})\n\t\t\t}\n\t\tdefault:\n\t\t\tpanic(fmt.Errorf(\"can't construct diagnostic(s) from %T\", item))\n\t\t}\n\t}\n\n\t// Given the above, we should never end up with a non-nil empty slice\n\t// here, but we'll make sure of that so callers can rely on empty == nil\n\tif len(diags) == 0 {\n\t\treturn nil\n\t}\n\n\treturn diags\n}\n\n// HasErrors returns true if any of the diagnostics in the list have\n// a severity of Error.\nfunc (diags Diagnostics) HasErrors() bool {\n\tfor _, diag := range diags {\n\t\tif diag.Severity() == Error {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// ForRPC returns a version of the receiver that has been simplified so that\n// it is friendly to RPC protocols.\n//\n// Currently this means that it can be serialized with encoding/gob and\n// subsequently re-inflated. It may later grow to include other serialization\n// formats.\n//\n// Note that this loses information about the original objects used to\n// construct the diagnostics, so e.g. the errwrap API will not work as\n// expected on an error-wrapped Diagnostics that came from ForRPC.\nfunc (diags Diagnostics) ForRPC() Diagnostics {\n\tret := make(Diagnostics, len(diags))\n\tfor i := range diags {\n\t\tret[i] = makeRPCFriendlyDiag(diags[i])\n\t}\n\treturn ret\n}\n\n// Err flattens a diagnostics list into a single Go error, or to nil\n// if the diagnostics list does not include any error-level diagnostics.\n//\n// This can be used to smuggle diagnostics through an API that deals in\n// native errors, but unfortunately it will lose naked warnings (warnings\n// that aren't accompanied by at least one error) since such APIs have no\n// mechanism through which to report these.\n//\n//     return result, diags.Error()\nfunc (diags Diagnostics) Err() error {\n\tif !diags.HasErrors() {\n\t\treturn nil\n\t}\n\treturn diagnosticsAsError{diags}\n}\n\n// ErrWithWarnings is similar to Err except that it will also return a non-nil\n// error if the receiver contains only warnings.\n//\n// In the warnings-only situation, the result is guaranteed to be of dynamic\n// type NonFatalError, allowing diagnostics-aware callers to type-assert\n// and unwrap it, treating it as non-fatal.\n//\n// This should be used only in contexts where the caller is able to recognize\n// and handle NonFatalError. For normal callers that expect a lack of errors\n// to be signaled by nil, use just Diagnostics.Err.\nfunc (diags Diagnostics) ErrWithWarnings() error {\n\tif len(diags) == 0 {\n\t\treturn nil\n\t}\n\tif diags.HasErrors() {\n\t\treturn diags.Err()\n\t}\n\treturn NonFatalError{diags}\n}\n\n// NonFatalErr is similar to Err except that it always returns either nil\n// (if there are no diagnostics at all) or NonFatalError.\n//\n// This allows diagnostics to be returned over an error return channel while\n// being explicit that the diagnostics should not halt processing.\n//\n// This should be used only in contexts where the caller is able to recognize\n// and handle NonFatalError. For normal callers that expect a lack of errors\n// to be signaled by nil, use just Diagnostics.Err.\nfunc (diags Diagnostics) NonFatalErr() error {\n\tif len(diags) == 0 {\n\t\treturn nil\n\t}\n\treturn NonFatalError{diags}\n}\n\n// Sort applies an ordering to the diagnostics in the receiver in-place.\n//\n// The ordering is: warnings before errors, sourceless before sourced,\n// short source paths before long source paths, and then ordering by\n// position within each file.\n//\n// Diagnostics that do not differ by any of these sortable characteristics\n// will remain in the same relative order after this method returns.\nfunc (diags Diagnostics) Sort() {\n\tsort.Stable(sortDiagnostics(diags))\n}\n\ntype diagnosticsAsError struct {\n\tDiagnostics\n}\n\nfunc (dae diagnosticsAsError) Error() string {\n\tdiags := dae.Diagnostics\n\tswitch {\n\tcase len(diags) == 0:\n\t\t// should never happen, since we don't create this wrapper if\n\t\t// there are no diagnostics in the list.\n\t\treturn \"no errors\"\n\tcase len(diags) == 1:\n\t\tdesc := diags[0].Description()\n\t\tif desc.Detail == \"\" {\n\t\t\treturn desc.Summary\n\t\t}\n\t\treturn fmt.Sprintf(\"%s: %s\", desc.Summary, desc.Detail)\n\tdefault:\n\t\tvar ret bytes.Buffer\n\t\tfmt.Fprintf(&ret, \"%d problems:\\n\", len(diags))\n\t\tfor _, diag := range dae.Diagnostics {\n\t\t\tdesc := diag.Description()\n\t\t\tif desc.Detail == \"\" {\n\t\t\t\tfmt.Fprintf(&ret, \"\\n- %s\", desc.Summary)\n\t\t\t} else {\n\t\t\t\tfmt.Fprintf(&ret, \"\\n- %s: %s\", desc.Summary, desc.Detail)\n\t\t\t}\n\t\t}\n\t\treturn ret.String()\n\t}\n}\n\n// WrappedErrors is an implementation of errwrap.Wrapper so that an error-wrapped\n// diagnostics object can be picked apart by errwrap-aware code.\nfunc (dae diagnosticsAsError) WrappedErrors() []error {\n\tvar errs []error\n\tfor _, diag := range dae.Diagnostics {\n\t\tif wrapper, isErr := diag.(nativeError); isErr {\n\t\t\terrs = append(errs, wrapper.err)\n\t\t}\n\t}\n\treturn errs\n}\n\n// NonFatalError is a special error type, returned by\n// Diagnostics.ErrWithWarnings and Diagnostics.NonFatalErr,\n// that indicates that the wrapped diagnostics should be treated as non-fatal.\n// Callers can conditionally type-assert an error to this type in order to\n// detect the non-fatal scenario and handle it in a different way.\ntype NonFatalError struct {\n\tDiagnostics\n}\n\nfunc (woe NonFatalError) Error() string {\n\tdiags := woe.Diagnostics\n\tswitch {\n\tcase len(diags) == 0:\n\t\t// should never happen, since we don't create this wrapper if\n\t\t// there are no diagnostics in the list.\n\t\treturn \"no errors or warnings\"\n\tcase len(diags) == 1:\n\t\tdesc := diags[0].Description()\n\t\tif desc.Detail == \"\" {\n\t\t\treturn desc.Summary\n\t\t}\n\t\treturn fmt.Sprintf(\"%s: %s\", desc.Summary, desc.Detail)\n\tdefault:\n\t\tvar ret bytes.Buffer\n\t\tif diags.HasErrors() {\n\t\t\tfmt.Fprintf(&ret, \"%d problems:\\n\", len(diags))\n\t\t} else {\n\t\t\tfmt.Fprintf(&ret, \"%d warnings:\\n\", len(diags))\n\t\t}\n\t\tfor _, diag := range woe.Diagnostics {\n\t\t\tdesc := diag.Description()\n\t\t\tif desc.Detail == \"\" {\n\t\t\t\tfmt.Fprintf(&ret, \"\\n- %s\", desc.Summary)\n\t\t\t} else {\n\t\t\t\tfmt.Fprintf(&ret, \"\\n- %s: %s\", desc.Summary, desc.Detail)\n\t\t\t}\n\t\t}\n\t\treturn ret.String()\n\t}\n}\n\n// sortDiagnostics is an implementation of sort.Interface\ntype sortDiagnostics []Diagnostic\n\nvar _ sort.Interface = sortDiagnostics(nil)\n\nfunc (sd sortDiagnostics) Len() int {\n\treturn len(sd)\n}\n\nfunc (sd sortDiagnostics) Less(i, j int) bool {\n\tiD, jD := sd[i], sd[j]\n\tiSev, jSev := iD.Severity(), jD.Severity()\n\tiSrc, jSrc := iD.Source(), jD.Source()\n\n\tswitch {\n\n\tcase iSev != jSev:\n\t\treturn iSev == Warning\n\n\tcase (iSrc.Subject == nil) != (jSrc.Subject == nil):\n\t\treturn iSrc.Subject == nil\n\n\tcase iSrc.Subject != nil && *iSrc.Subject != *jSrc.Subject:\n\t\tiSubj := iSrc.Subject\n\t\tjSubj := jSrc.Subject\n\t\tswitch {\n\t\tcase iSubj.Filename != jSubj.Filename:\n\t\t\t// Path with fewer segments goes first if they are different lengths\n\t\t\tsep := string(filepath.Separator)\n\t\t\tiCount := strings.Count(iSubj.Filename, sep)\n\t\t\tjCount := strings.Count(jSubj.Filename, sep)\n\t\t\tif iCount != jCount {\n\t\t\t\treturn iCount < jCount\n\t\t\t}\n\t\t\treturn iSubj.Filename < jSubj.Filename\n\t\tcase iSubj.Start.Byte != jSubj.Start.Byte:\n\t\t\treturn iSubj.Start.Byte < jSubj.Start.Byte\n\t\tcase iSubj.End.Byte != jSubj.End.Byte:\n\t\t\treturn iSubj.End.Byte < jSubj.End.Byte\n\t\t}\n\t\tfallthrough\n\n\tdefault:\n\t\t// The remaining properties do not have a defined ordering, so\n\t\t// we'll leave it unspecified. Since we use sort.Stable in\n\t\t// the caller of this, the ordering of remaining items will\n\t\t// be preserved.\n\t\treturn false\n\t}\n}\n\nfunc (sd sortDiagnostics) Swap(i, j int) {\n\tsd[i], sd[j] = sd[j], sd[i]\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/tfdiags/doc.go",
    "content": "// Package tfdiags is a utility package for representing errors and\n// warnings in a manner that allows us to produce good messages for the\n// user.\n//\n// \"diag\" is short for \"diagnostics\", and is meant as a general word for\n// feedback to a user about potential or actual problems.\n//\n// A design goal for this package is for it to be able to provide rich\n// messaging where possible but to also be pragmatic about dealing with\n// generic errors produced by system components that _can't_ provide\n// such rich messaging. As a consequence, the main types in this package --\n// Diagnostics and Diagnostic -- are designed so that they can be \"smuggled\"\n// over an error channel and then be unpacked at the other end, so that\n// error diagnostics (at least) can transit through APIs that are not\n// aware of this package.\npackage tfdiags\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/tfdiags/error.go",
    "content": "package tfdiags\n\n// nativeError is a Diagnostic implementation that wraps a normal Go error\ntype nativeError struct {\n\terr error\n}\n\nvar _ Diagnostic = nativeError{}\n\nfunc (e nativeError) Severity() Severity {\n\treturn Error\n}\n\nfunc (e nativeError) Description() Description {\n\treturn Description{\n\t\tSummary: FormatError(e.err),\n\t}\n}\n\nfunc (e nativeError) Source() Source {\n\t// No source information available for a native error\n\treturn Source{}\n}\n\nfunc (e nativeError) FromExpr() *FromExpr {\n\t// Native errors are not expression-related\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/tfdiags/hcl.go",
    "content": "package tfdiags\n\nimport (\n\t\"github.com/hashicorp/hcl2/hcl\"\n)\n\n// hclDiagnostic is a Diagnostic implementation that wraps a HCL Diagnostic\ntype hclDiagnostic struct {\n\tdiag *hcl.Diagnostic\n}\n\nvar _ Diagnostic = hclDiagnostic{}\n\nfunc (d hclDiagnostic) Severity() Severity {\n\tswitch d.diag.Severity {\n\tcase hcl.DiagWarning:\n\t\treturn Warning\n\tdefault:\n\t\treturn Error\n\t}\n}\n\nfunc (d hclDiagnostic) Description() Description {\n\treturn Description{\n\t\tSummary: d.diag.Summary,\n\t\tDetail:  d.diag.Detail,\n\t}\n}\n\nfunc (d hclDiagnostic) Source() Source {\n\tvar ret Source\n\tif d.diag.Subject != nil {\n\t\trng := SourceRangeFromHCL(*d.diag.Subject)\n\t\tret.Subject = &rng\n\t}\n\tif d.diag.Context != nil {\n\t\trng := SourceRangeFromHCL(*d.diag.Context)\n\t\tret.Context = &rng\n\t}\n\treturn ret\n}\n\nfunc (d hclDiagnostic) FromExpr() *FromExpr {\n\tif d.diag.Expression == nil || d.diag.EvalContext == nil {\n\t\treturn nil\n\t}\n\treturn &FromExpr{\n\t\tExpression:  d.diag.Expression,\n\t\tEvalContext: d.diag.EvalContext,\n\t}\n}\n\n// SourceRangeFromHCL constructs a SourceRange from the corresponding range\n// type within the HCL package.\nfunc SourceRangeFromHCL(hclRange hcl.Range) SourceRange {\n\treturn SourceRange{\n\t\tFilename: hclRange.Filename,\n\t\tStart: SourcePos{\n\t\t\tLine:   hclRange.Start.Line,\n\t\t\tColumn: hclRange.Start.Column,\n\t\t\tByte:   hclRange.Start.Byte,\n\t\t},\n\t\tEnd: SourcePos{\n\t\t\tLine:   hclRange.End.Line,\n\t\t\tColumn: hclRange.End.Column,\n\t\t\tByte:   hclRange.End.Byte,\n\t\t},\n\t}\n}\n\n// ToHCL constructs a HCL Range from the receiving SourceRange. This is the\n// opposite of SourceRangeFromHCL.\nfunc (r SourceRange) ToHCL() hcl.Range {\n\treturn hcl.Range{\n\t\tFilename: r.Filename,\n\t\tStart: hcl.Pos{\n\t\t\tLine:   r.Start.Line,\n\t\t\tColumn: r.Start.Column,\n\t\t\tByte:   r.Start.Byte,\n\t\t},\n\t\tEnd: hcl.Pos{\n\t\t\tLine:   r.End.Line,\n\t\t\tColumn: r.End.Column,\n\t\t\tByte:   r.End.Byte,\n\t\t},\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/tfdiags/rpc_friendly.go",
    "content": "package tfdiags\n\nimport (\n\t\"encoding/gob\"\n)\n\ntype rpcFriendlyDiag struct {\n\tSeverity_ Severity\n\tSummary_  string\n\tDetail_   string\n\tSubject_  *SourceRange\n\tContext_  *SourceRange\n}\n\n// rpcFriendlyDiag transforms a given diagnostic so that is more friendly to\n// RPC.\n//\n// In particular, it currently returns an object that can be serialized and\n// later re-inflated using gob. This definition may grow to include other\n// serializations later.\nfunc makeRPCFriendlyDiag(diag Diagnostic) Diagnostic {\n\tdesc := diag.Description()\n\tsource := diag.Source()\n\treturn &rpcFriendlyDiag{\n\t\tSeverity_: diag.Severity(),\n\t\tSummary_:  desc.Summary,\n\t\tDetail_:   desc.Detail,\n\t\tSubject_:  source.Subject,\n\t\tContext_:  source.Context,\n\t}\n}\n\nfunc (d *rpcFriendlyDiag) Severity() Severity {\n\treturn d.Severity_\n}\n\nfunc (d *rpcFriendlyDiag) Description() Description {\n\treturn Description{\n\t\tSummary: d.Summary_,\n\t\tDetail:  d.Detail_,\n\t}\n}\n\nfunc (d *rpcFriendlyDiag) Source() Source {\n\treturn Source{\n\t\tSubject: d.Subject_,\n\t\tContext: d.Context_,\n\t}\n}\n\nfunc (d rpcFriendlyDiag) FromExpr() *FromExpr {\n\t// RPC-friendly diagnostics cannot preserve expression information because\n\t// expressions themselves are not RPC-friendly.\n\treturn nil\n}\n\nfunc init() {\n\tgob.Register((*rpcFriendlyDiag)(nil))\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/tfdiags/severity_string.go",
    "content": "// Code generated by \"stringer -type=Severity\"; DO NOT EDIT.\n\npackage tfdiags\n\nimport \"strconv\"\n\nfunc _() {\n\t// An \"invalid array index\" compiler error signifies that the constant values have changed.\n\t// Re-run the stringer command to generate them again.\n\tvar x [1]struct{}\n\t_ = x[Error-69]\n\t_ = x[Warning-87]\n}\n\nconst (\n\t_Severity_name_0 = \"Error\"\n\t_Severity_name_1 = \"Warning\"\n)\n\nfunc (i Severity) String() string {\n\tswitch {\n\tcase i == 69:\n\t\treturn _Severity_name_0\n\tcase i == 87:\n\t\treturn _Severity_name_1\n\tdefault:\n\t\treturn \"Severity(\" + strconv.FormatInt(int64(i), 10) + \")\"\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/tfdiags/simple_warning.go",
    "content": "package tfdiags\n\ntype simpleWarning string\n\nvar _ Diagnostic = simpleWarning(\"\")\n\n// SimpleWarning constructs a simple (summary-only) warning diagnostic.\nfunc SimpleWarning(msg string) Diagnostic {\n\treturn simpleWarning(msg)\n}\n\nfunc (e simpleWarning) Severity() Severity {\n\treturn Warning\n}\n\nfunc (e simpleWarning) Description() Description {\n\treturn Description{\n\t\tSummary: string(e),\n\t}\n}\n\nfunc (e simpleWarning) Source() Source {\n\t// No source information available for a simple warning\n\treturn Source{}\n}\n\nfunc (e simpleWarning) FromExpr() *FromExpr {\n\t// Simple warnings are not expression-related\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/tfdiags/source_range.go",
    "content": "package tfdiags\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n)\n\ntype SourceRange struct {\n\tFilename   string\n\tStart, End SourcePos\n}\n\ntype SourcePos struct {\n\tLine, Column, Byte int\n}\n\n// StartString returns a string representation of the start of the range,\n// including the filename and the line and column numbers.\nfunc (r SourceRange) StartString() string {\n\tfilename := r.Filename\n\n\t// We'll try to relative-ize our filename here so it's less verbose\n\t// in the common case of being in the current working directory. If not,\n\t// we'll just show the full path.\n\twd, err := os.Getwd()\n\tif err == nil {\n\t\trelFn, err := filepath.Rel(wd, filename)\n\t\tif err == nil {\n\t\t\tfilename = relFn\n\t\t}\n\t}\n\n\treturn fmt.Sprintf(\"%s:%d,%d\", filename, r.Start.Line, r.Start.Column)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/tfdiags/sourceless.go",
    "content": "package tfdiags\n\n// Sourceless creates and returns a diagnostic with no source location\n// information. This is generally used for operational-type errors that are\n// caused by or relate to the environment where Terraform is running rather\n// than to the provided configuration.\nfunc Sourceless(severity Severity, summary, detail string) Diagnostic {\n\treturn diagnosticBase{\n\t\tseverity: severity,\n\t\tsummary:  summary,\n\t\tdetail:   detail,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform/version/version.go",
    "content": "// The version package provides a location to set the release versions for all\n// packages to consume, without creating import cycles.\n//\n// This package should not import any other terraform packages.\npackage version\n\nimport (\n\t\"fmt\"\n\n\tversion \"github.com/hashicorp/go-version\"\n)\n\n// The main version number that is being run at the moment.\nvar Version = \"0.12.1\"\n\n// A pre-release marker for the version. If this is \"\" (empty string)\n// then it means that it is a final release. Otherwise, this is a pre-release\n// such as \"dev\" (in development), \"beta\", \"rc1\", etc.\nvar Prerelease = \"\"\n\n// SemVer is an instance of version.Version. This has the secondary\n// benefit of verifying during tests and init time that our version is a\n// proper semantic version, which should always be the case.\nvar SemVer *version.Version\n\nfunc init() {\n\tSemVer = version.Must(version.NewVersion(Version))\n}\n\n// Header is the header name used to send the current terraform version\n// in http requests.\nconst Header = \"Terraform-Version\"\n\n// String returns the complete version string, including prerelease\nfunc String() string {\n\tif Prerelease != \"\" {\n\t\treturn fmt.Sprintf(\"%s-%s\", Version, Prerelease)\n\t}\n\treturn Version\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform-config-inspect/LICENSE",
    "content": "Mozilla Public License, version 2.0\n\n1. Definitions\n\n1.1. “Contributor”\n\n     means each individual or legal entity that creates, contributes to the\n     creation of, or owns Covered Software.\n\n1.2. “Contributor Version”\n\n     means the combination of the Contributions of others (if any) used by a\n     Contributor and that particular Contributor’s Contribution.\n\n1.3. “Contribution”\n\n     means Covered Software of a particular Contributor.\n\n1.4. “Covered Software”\n\n     means Source Code Form to which the initial Contributor has attached the\n     notice in Exhibit A, the Executable Form of such Source Code Form, and\n     Modifications of such Source Code Form, in each case including portions\n     thereof.\n\n1.5. “Incompatible With Secondary Licenses”\n     means\n\n     a. that the initial Contributor has attached the notice described in\n        Exhibit B to the Covered Software; or\n\n     b. that the Covered Software was made available under the terms of version\n        1.1 or earlier of the License, but not also under the terms of a\n        Secondary License.\n\n1.6. “Executable Form”\n\n     means any form of the work other than Source Code Form.\n\n1.7. “Larger Work”\n\n     means a work that combines Covered Software with other material, in a separate\n     file or files, that is not Covered Software.\n\n1.8. “License”\n\n     means this document.\n\n1.9. “Licensable”\n\n     means having the right to grant, to the maximum extent possible, whether at the\n     time of the initial grant or subsequently, any and all of the rights conveyed by\n     this License.\n\n1.10. “Modifications”\n\n     means any of the following:\n\n     a. any file in Source Code Form that results from an addition to, deletion\n        from, or modification of the contents of Covered Software; or\n\n     b. any new file in Source Code Form that contains any Covered Software.\n\n1.11. “Patent Claims” of a Contributor\n\n      means any patent claim(s), including without limitation, method, process,\n      and apparatus claims, in any patent Licensable by such Contributor that\n      would be infringed, but for the grant of the License, by the making,\n      using, selling, offering for sale, having made, import, or transfer of\n      either its Contributions or its Contributor Version.\n\n1.12. “Secondary License”\n\n      means either the GNU General Public License, Version 2.0, the GNU Lesser\n      General Public License, Version 2.1, the GNU Affero General Public\n      License, Version 3.0, or any later versions of those licenses.\n\n1.13. “Source Code Form”\n\n      means the form of the work preferred for making modifications.\n\n1.14. “You” (or “Your”)\n\n      means an individual or a legal entity exercising rights under this\n      License. For legal entities, “You” includes any entity that controls, is\n      controlled by, or is under common control with You. For purposes of this\n      definition, “control” means (a) the power, direct or indirect, to cause\n      the direction or management of such entity, whether by contract or\n      otherwise, or (b) ownership of more than fifty percent (50%) of the\n      outstanding shares or beneficial ownership of such entity.\n\n\n2. License Grants and Conditions\n\n2.1. Grants\n\n     Each Contributor hereby grants You a world-wide, royalty-free,\n     non-exclusive license:\n\n     a. under intellectual property rights (other than patent or trademark)\n        Licensable by such Contributor to use, reproduce, make available,\n        modify, display, perform, distribute, and otherwise exploit its\n        Contributions, either on an unmodified basis, with Modifications, or as\n        part of a Larger Work; and\n\n     b. under Patent Claims of such Contributor to make, use, sell, offer for\n        sale, have made, import, and otherwise transfer either its Contributions\n        or its Contributor Version.\n\n2.2. Effective Date\n\n     The licenses granted in Section 2.1 with respect to any Contribution become\n     effective for each Contribution on the date the Contributor first distributes\n     such Contribution.\n\n2.3. Limitations on Grant Scope\n\n     The licenses granted in this Section 2 are the only rights granted under this\n     License. No additional rights or licenses will be implied from the distribution\n     or licensing of Covered Software under this License. Notwithstanding Section\n     2.1(b) above, no patent license is granted by a Contributor:\n\n     a. for any code that a Contributor has removed from Covered Software; or\n\n     b. for infringements caused by: (i) Your and any other third party’s\n        modifications of Covered Software, or (ii) the combination of its\n        Contributions with other software (except as part of its Contributor\n        Version); or\n\n     c. under Patent Claims infringed by Covered Software in the absence of its\n        Contributions.\n\n     This License does not grant any rights in the trademarks, service marks, or\n     logos of any Contributor (except as may be necessary to comply with the\n     notice requirements in Section 3.4).\n\n2.4. Subsequent Licenses\n\n     No Contributor makes additional grants as a result of Your choice to\n     distribute the Covered Software under a subsequent version of this License\n     (see Section 10.2) or under the terms of a Secondary License (if permitted\n     under the terms of Section 3.3).\n\n2.5. Representation\n\n     Each Contributor represents that the Contributor believes its Contributions\n     are its original creation(s) or it has sufficient rights to grant the\n     rights to its Contributions conveyed by this License.\n\n2.6. Fair Use\n\n     This License is not intended to limit any rights You have under applicable\n     copyright doctrines of fair use, fair dealing, or other equivalents.\n\n2.7. Conditions\n\n     Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in\n     Section 2.1.\n\n\n3. Responsibilities\n\n3.1. Distribution of Source Form\n\n     All distribution of Covered Software in Source Code Form, including any\n     Modifications that You create or to which You contribute, must be under the\n     terms of this License. You must inform recipients that the Source Code Form\n     of the Covered Software is governed by the terms of this License, and how\n     they can obtain a copy of this License. You may not attempt to alter or\n     restrict the recipients’ rights in the Source Code Form.\n\n3.2. Distribution of Executable Form\n\n     If You distribute Covered Software in Executable Form then:\n\n     a. such Covered Software must also be made available in Source Code Form,\n        as described in Section 3.1, and You must inform recipients of the\n        Executable Form how they can obtain a copy of such Source Code Form by\n        reasonable means in a timely manner, at a charge no more than the cost\n        of distribution to the recipient; and\n\n     b. You may distribute such Executable Form under the terms of this License,\n        or sublicense it under different terms, provided that the license for\n        the Executable Form does not attempt to limit or alter the recipients’\n        rights in the Source Code Form under this License.\n\n3.3. Distribution of a Larger Work\n\n     You may create and distribute a Larger Work under terms of Your choice,\n     provided that You also comply with the requirements of this License for the\n     Covered Software. If the Larger Work is a combination of Covered Software\n     with a work governed by one or more Secondary Licenses, and the Covered\n     Software is not Incompatible With Secondary Licenses, this License permits\n     You to additionally distribute such Covered Software under the terms of\n     such Secondary License(s), so that the recipient of the Larger Work may, at\n     their option, further distribute the Covered Software under the terms of\n     either this License or such Secondary License(s).\n\n3.4. Notices\n\n     You may not remove or alter the substance of any license notices (including\n     copyright notices, patent notices, disclaimers of warranty, or limitations\n     of liability) contained within the Source Code Form of the Covered\n     Software, except that You may alter any license notices to the extent\n     required to remedy known factual inaccuracies.\n\n3.5. Application of Additional Terms\n\n     You may choose to offer, and to charge a fee for, warranty, support,\n     indemnity or liability obligations to one or more recipients of Covered\n     Software. However, You may do so only on Your own behalf, and not on behalf\n     of any Contributor. You must make it absolutely clear that any such\n     warranty, support, indemnity, or liability obligation is offered by You\n     alone, and You hereby agree to indemnify every Contributor for any\n     liability incurred by such Contributor as a result of warranty, support,\n     indemnity or liability terms You offer. You may include additional\n     disclaimers of warranty and limitations of liability specific to any\n     jurisdiction.\n\n4. Inability to Comply Due to Statute or Regulation\n\n   If it is impossible for You to comply with any of the terms of this License\n   with respect to some or all of the Covered Software due to statute, judicial\n   order, or regulation then You must: (a) comply with the terms of this License\n   to the maximum extent possible; and (b) describe the limitations and the code\n   they affect. Such description must be placed in a text file included with all\n   distributions of the Covered Software under this License. Except to the\n   extent prohibited by statute or regulation, such description must be\n   sufficiently detailed for a recipient of ordinary skill to be able to\n   understand it.\n\n5. Termination\n\n5.1. The rights granted under this License will terminate automatically if You\n     fail to comply with any of its terms. However, if You become compliant,\n     then the rights granted under this License from a particular Contributor\n     are reinstated (a) provisionally, unless and until such Contributor\n     explicitly and finally terminates Your grants, and (b) on an ongoing basis,\n     if such Contributor fails to notify You of the non-compliance by some\n     reasonable means prior to 60 days after You have come back into compliance.\n     Moreover, Your grants from a particular Contributor are reinstated on an\n     ongoing basis if such Contributor notifies You of the non-compliance by\n     some reasonable means, this is the first time You have received notice of\n     non-compliance with this License from such Contributor, and You become\n     compliant prior to 30 days after Your receipt of the notice.\n\n5.2. If You initiate litigation against any entity by asserting a patent\n     infringement claim (excluding declaratory judgment actions, counter-claims,\n     and cross-claims) alleging that a Contributor Version directly or\n     indirectly infringes any patent, then the rights granted to You by any and\n     all Contributors for the Covered Software under Section 2.1 of this License\n     shall terminate.\n\n5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user\n     license agreements (excluding distributors and resellers) which have been\n     validly granted by You or Your distributors under this License prior to\n     termination shall survive termination.\n\n6. Disclaimer of Warranty\n\n   Covered Software is provided under this License on an “as is” basis, without\n   warranty of any kind, either expressed, implied, or statutory, including,\n   without limitation, warranties that the Covered Software is free of defects,\n   merchantable, fit for a particular purpose or non-infringing. The entire\n   risk as to the quality and performance of the Covered Software is with You.\n   Should any Covered Software prove defective in any respect, You (not any\n   Contributor) assume the cost of any necessary servicing, repair, or\n   correction. This disclaimer of warranty constitutes an essential part of this\n   License. No use of  any Covered Software is authorized under this License\n   except under this disclaimer.\n\n7. Limitation of Liability\n\n   Under no circumstances and under no legal theory, whether tort (including\n   negligence), contract, or otherwise, shall any Contributor, or anyone who\n   distributes Covered Software as permitted above, be liable to You for any\n   direct, indirect, special, incidental, or consequential damages of any\n   character including, without limitation, damages for lost profits, loss of\n   goodwill, work stoppage, computer failure or malfunction, or any and all\n   other commercial damages or losses, even if such party shall have been\n   informed of the possibility of such damages. This limitation of liability\n   shall not apply to liability for death or personal injury resulting from such\n   party’s negligence to the extent applicable law prohibits such limitation.\n   Some jurisdictions do not allow the exclusion or limitation of incidental or\n   consequential damages, so this exclusion and limitation may not apply to You.\n\n8. Litigation\n\n   Any litigation relating to this License may be brought only in the courts of\n   a jurisdiction where the defendant maintains its principal place of business\n   and such litigation shall be governed by laws of that jurisdiction, without\n   reference to its conflict-of-law provisions. Nothing in this Section shall\n   prevent a party’s ability to bring cross-claims or counter-claims.\n\n9. Miscellaneous\n\n   This License represents the complete agreement concerning the subject matter\n   hereof. If any provision of this License is held to be unenforceable, such\n   provision shall be reformed only to the extent necessary to make it\n   enforceable. Any law or regulation which provides that the language of a\n   contract shall be construed against the drafter shall not be used to construe\n   this License against a Contributor.\n\n\n10. Versions of the License\n\n10.1. New Versions\n\n      Mozilla Foundation is the license steward. Except as provided in Section\n      10.3, no one other than the license steward has the right to modify or\n      publish new versions of this License. Each version will be given a\n      distinguishing version number.\n\n10.2. Effect of New Versions\n\n      You may distribute the Covered Software under the terms of the version of\n      the License under which You originally received the Covered Software, or\n      under the terms of any subsequent version published by the license\n      steward.\n\n10.3. Modified Versions\n\n      If you create software not governed by this License, and you want to\n      create a new license for such software, you may create and use a modified\n      version of this License if you rename the license and remove any\n      references to the name of the license steward (except to note that such\n      modified license differs from this License).\n\n10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses\n      If You choose to distribute Source Code Form that is Incompatible With\n      Secondary Licenses under the terms of this version of the License, the\n      notice described in Exhibit B of this License must be attached.\n\nExhibit A - Source Code Form License Notice\n\n      This Source Code Form is subject to the\n      terms of the Mozilla Public License, v.\n      2.0. If a copy of the MPL was not\n      distributed with this file, You can\n      obtain one at\n      http://mozilla.org/MPL/2.0/.\n\nIf it is not possible or desirable to put the notice in a particular file, then\nYou may include the notice in a location (such as a LICENSE file in a relevant\ndirectory) where a recipient would be likely to look for such a notice.\n\nYou may add additional accurate notices of copyright ownership.\n\nExhibit B - “Incompatible With Secondary Licenses” Notice\n\n      This Source Code Form is “Incompatible\n      With Secondary Licenses”, as defined by\n      the Mozilla Public License, v. 2.0.\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform-config-inspect/tfconfig/diagnostic.go",
    "content": "package tfconfig\n\nimport (\n\t\"fmt\"\n\n\tlegacyhclparser \"github.com/hashicorp/hcl/hcl/parser\"\n\t\"github.com/hashicorp/hcl2/hcl\"\n)\n\n// Diagnostic describes a problem (error or warning) encountered during\n// configuration loading.\ntype Diagnostic struct {\n\tSeverity DiagSeverity `json:\"severity\"`\n\tSummary  string       `json:\"summary\"`\n\tDetail   string       `json:\"detail,omitempty\"`\n\n\t// Pos is not populated for all diagnostics, but when populated should\n\t// indicate a particular line that the described problem relates to.\n\tPos *SourcePos `json:\"pos,omitempty\"`\n}\n\n// Diagnostics represents a sequence of diagnostics. This is the type that\n// should be returned from a function that might generate diagnostics.\ntype Diagnostics []Diagnostic\n\n// HasErrors returns true if there is at least one Diagnostic of severity\n// DiagError in the receiever.\n//\n// If a function returns a Diagnostics without errors then the result can\n// be assumed to be complete within the \"best effort\" constraints of this\n// library. If errors are present then the caller may wish to employ more\n// caution in relying on the result.\nfunc (diags Diagnostics) HasErrors() bool {\n\tfor _, diag := range diags {\n\t\tif diag.Severity == DiagError {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\nfunc (diags Diagnostics) Error() string {\n\tswitch len(diags) {\n\tcase 0:\n\t\treturn \"no problems\"\n\tcase 1:\n\t\treturn fmt.Sprintf(\"%s: %s\", diags[0].Summary, diags[0].Detail)\n\tdefault:\n\t\treturn fmt.Sprintf(\"%s: %s (and %d other messages)\", diags[0].Summary, diags[0].Detail, len(diags)-1)\n\t}\n}\n\n// Err returns an error representing the receiver if the receiver HasErrors, or\n// nil otherwise.\n//\n// The returned error can be type-asserted back to a Diagnostics if needed.\nfunc (diags Diagnostics) Err() error {\n\tif diags.HasErrors() {\n\t\treturn diags\n\t}\n\treturn nil\n}\n\n// DiagSeverity describes the severity of a Diagnostic.\ntype DiagSeverity rune\n\n// DiagError indicates a problem that prevented proper processing of the\n// configuration. In the precense of DiagError diagnostics the result is\n// likely to be incomplete.\nconst DiagError DiagSeverity = 'E'\n\n// DiagWarning indicates a problem that the user may wish to consider but\n// that did not prevent proper processing of the configuration.\nconst DiagWarning DiagSeverity = 'W'\n\n// MarshalJSON is an implementation of encoding/json.Marshaler\nfunc (s DiagSeverity) MarshalJSON() ([]byte, error) {\n\tswitch s {\n\tcase DiagError:\n\t\treturn []byte(`\"error\"`), nil\n\tcase DiagWarning:\n\t\treturn []byte(`\"warning\"`), nil\n\tdefault:\n\t\treturn []byte(`\"invalid\"`), nil\n\t}\n}\n\nfunc diagnosticsHCL(diags hcl.Diagnostics) Diagnostics {\n\tif len(diags) == 0 {\n\t\treturn nil\n\t}\n\tret := make(Diagnostics, len(diags))\n\tfor i, diag := range diags {\n\t\tret[i] = Diagnostic{\n\t\t\tSummary: diag.Summary,\n\t\t\tDetail:  diag.Detail,\n\t\t}\n\t\tswitch diag.Severity {\n\t\tcase hcl.DiagError:\n\t\t\tret[i].Severity = DiagError\n\t\tcase hcl.DiagWarning:\n\t\t\tret[i].Severity = DiagWarning\n\t\t}\n\t\tif diag.Subject != nil {\n\t\t\tpos := sourcePosHCL(*diag.Subject)\n\t\t\tret[i].Pos = &pos\n\t\t}\n\t}\n\treturn ret\n}\n\nfunc diagnosticsError(err error) Diagnostics {\n\tif err == nil {\n\t\treturn nil\n\t}\n\n\tif posErr, ok := err.(*legacyhclparser.PosError); ok {\n\t\tpos := sourcePosLegacyHCL(posErr.Pos, \"\")\n\t\treturn Diagnostics{\n\t\t\tDiagnostic{\n\t\t\t\tSeverity: DiagError,\n\t\t\t\tSummary:  posErr.Err.Error(),\n\t\t\t\tPos:      &pos,\n\t\t\t},\n\t\t}\n\t}\n\n\treturn Diagnostics{\n\t\tDiagnostic{\n\t\t\tSeverity: DiagError,\n\t\t\tSummary:  err.Error(),\n\t\t},\n\t}\n}\n\nfunc diagnosticsErrorf(format string, args ...interface{}) Diagnostics {\n\treturn diagnosticsError(fmt.Errorf(format, args...))\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform-config-inspect/tfconfig/doc.go",
    "content": "// Package tfconfig is a helper library that does careful, shallow parsing of\n// Terraform modules to provide access to high-level metadata while\n// remaining broadly compatible with configurations targeting various\n// different Terraform versions.\n//\n// This packge focuses on describing top-level objects only, and in particular\n// does not attempt any sort of processing that would require access to plugins.\n// Currently it allows callers to extract high-level information about\n// variables, outputs, resource blocks, provider dependencies, and Terraform\n// Core dependencies.\n//\n// This package only works at the level of single modules. A full configuration\n// is a tree of potentially several modules, some of which may be references\n// to remote packages. There are some basic helpers for traversing calls to\n// modules at relative local paths, however.\n//\n// This package employs a \"best effort\" parsing strategy, producing as complete\n// a result as possible even though the input may not be entirely valid. The\n// intended use-case is high-level analysis and indexing of externally-facing\n// module characteristics, as opposed to validating or even applying the module.\npackage tfconfig\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform-config-inspect/tfconfig/load.go",
    "content": "package tfconfig\n\nimport (\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"path/filepath\"\n\t\"strings\"\n\n\t\"github.com/hashicorp/hcl2/hcl\"\n)\n\n// LoadModule reads the directory at the given path and attempts to interpret\n// it as a Terraform module.\nfunc LoadModule(dir string) (*Module, Diagnostics) {\n\n\t// For broad compatibility here we actually have two separate loader\n\t// codepaths. The main one uses the new HCL parser and API and is intended\n\t// for configurations from Terraform 0.12 onwards (though will work for\n\t// many older configurations too), but we'll also fall back on one that\n\t// uses the _old_ HCL implementation so we can deal with some edge-cases\n\t// that are not valid in new HCL.\n\n\tmodule, diags := loadModule(dir)\n\tif diags.HasErrors() {\n\t\t// Try using the legacy HCL parser and see if we fare better.\n\t\tlegacyModule, legacyDiags := loadModuleLegacyHCL(dir)\n\t\tif !legacyDiags.HasErrors() {\n\t\t\tlegacyModule.init(legacyDiags)\n\t\t\treturn legacyModule, legacyDiags\n\t\t}\n\t}\n\n\tmodule.init(diags)\n\treturn module, diags\n}\n\n// IsModuleDir checks if the given path contains terraform configuration files.\n// This allows the caller to decide how to handle directories that do not have tf files.\nfunc IsModuleDir(dir string) bool {\n\tprimaryPaths, _ := dirFiles(dir)\n\tif len(primaryPaths) == 0 {\n\t\treturn false\n\t}\n\treturn true\n}\n\nfunc (m *Module) init(diags Diagnostics) {\n\t// Fill in any additional provider requirements that are implied by\n\t// resource configurations, to avoid the caller from needing to apply\n\t// this logic itself. Implied requirements don't have version constraints,\n\t// but we'll make sure the requirement value is still non-nil in this\n\t// case so callers can easily recognize it.\n\tfor _, r := range m.ManagedResources {\n\t\tif _, exists := m.RequiredProviders[r.Provider.Name]; !exists {\n\t\t\tm.RequiredProviders[r.Provider.Name] = []string{}\n\t\t}\n\t}\n\tfor _, r := range m.DataResources {\n\t\tif _, exists := m.RequiredProviders[r.Provider.Name]; !exists {\n\t\t\tm.RequiredProviders[r.Provider.Name] = []string{}\n\t\t}\n\t}\n\n\t// We redundantly also reference the diagnostics from inside the module\n\t// object, primarily so that we can easily included in JSON-serialized\n\t// versions of the module object.\n\tm.Diagnostics = diags\n}\n\nfunc dirFiles(dir string) (primary []string, diags hcl.Diagnostics) {\n\tinfos, err := ioutil.ReadDir(dir)\n\tif err != nil {\n\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\tSeverity: hcl.DiagError,\n\t\t\tSummary:  \"Failed to read module directory\",\n\t\t\tDetail:   fmt.Sprintf(\"Module directory %s does not exist or cannot be read.\", dir),\n\t\t})\n\t\treturn\n\t}\n\n\tvar override []string\n\tfor _, info := range infos {\n\t\tif info.IsDir() {\n\t\t\t// We only care about files\n\t\t\tcontinue\n\t\t}\n\n\t\tname := info.Name()\n\t\text := fileExt(name)\n\t\tif ext == \"\" || isIgnoredFile(name) {\n\t\t\tcontinue\n\t\t}\n\n\t\tbaseName := name[:len(name)-len(ext)] // strip extension\n\t\tisOverride := baseName == \"override\" || strings.HasSuffix(baseName, \"_override\")\n\n\t\tfullPath := filepath.Join(dir, name)\n\t\tif isOverride {\n\t\t\toverride = append(override, fullPath)\n\t\t} else {\n\t\t\tprimary = append(primary, fullPath)\n\t\t}\n\t}\n\n\t// We are assuming that any _override files will be logically named,\n\t// and processing the files in alphabetical order. Primaries first, then overrides.\n\tprimary = append(primary, override...)\n\n\treturn\n}\n\n// fileExt returns the Terraform configuration extension of the given\n// path, or a blank string if it is not a recognized extension.\nfunc fileExt(path string) string {\n\tif strings.HasSuffix(path, \".tf\") {\n\t\treturn \".tf\"\n\t} else if strings.HasSuffix(path, \".tf.json\") {\n\t\treturn \".tf.json\"\n\t} else {\n\t\treturn \"\"\n\t}\n}\n\n// isIgnoredFile returns true if the given filename (which must not have a\n// directory path ahead of it) should be ignored as e.g. an editor swap file.\nfunc isIgnoredFile(name string) bool {\n\treturn strings.HasPrefix(name, \".\") || // Unix-like hidden files\n\t\tstrings.HasSuffix(name, \"~\") || // vim\n\t\tstrings.HasPrefix(name, \"#\") && strings.HasSuffix(name, \"#\") // emacs\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform-config-inspect/tfconfig/load_hcl.go",
    "content": "package tfconfig\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"strings\"\n\n\t\"github.com/hashicorp/hcl2/hcl/hclsyntax\"\n\n\t\"github.com/hashicorp/hcl2/gohcl\"\n\t\"github.com/hashicorp/hcl2/hcl\"\n\t\"github.com/hashicorp/hcl2/hclparse\"\n\tctyjson \"github.com/zclconf/go-cty/cty/json\"\n)\n\nfunc loadModule(dir string) (*Module, Diagnostics) {\n\tmod := newModule(dir)\n\tprimaryPaths, diags := dirFiles(dir)\n\n\tparser := hclparse.NewParser()\n\n\tfor _, filename := range primaryPaths {\n\t\tvar file *hcl.File\n\t\tvar fileDiags hcl.Diagnostics\n\t\tif strings.HasSuffix(filename, \".json\") {\n\t\t\tfile, fileDiags = parser.ParseJSONFile(filename)\n\t\t} else {\n\t\t\tfile, fileDiags = parser.ParseHCLFile(filename)\n\t\t}\n\t\tdiags = append(diags, fileDiags...)\n\t\tif file == nil {\n\t\t\tcontinue\n\t\t}\n\n\t\tcontent, _, contentDiags := file.Body.PartialContent(rootSchema)\n\t\tdiags = append(diags, contentDiags...)\n\n\t\tfor _, block := range content.Blocks {\n\t\t\tswitch block.Type {\n\n\t\t\tcase \"terraform\":\n\t\t\t\tcontent, _, contentDiags := block.Body.PartialContent(terraformBlockSchema)\n\t\t\t\tdiags = append(diags, contentDiags...)\n\n\t\t\t\tif attr, defined := content.Attributes[\"required_version\"]; defined {\n\t\t\t\t\tvar version string\n\t\t\t\t\tvalDiags := gohcl.DecodeExpression(attr.Expr, nil, &version)\n\t\t\t\t\tdiags = append(diags, valDiags...)\n\t\t\t\t\tif !valDiags.HasErrors() {\n\t\t\t\t\t\tmod.RequiredCore = append(mod.RequiredCore, version)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfor _, block := range content.Blocks {\n\t\t\t\t\t// Our schema only allows required_providers here, so we\n\t\t\t\t\t// assume that we'll only get that block type.\n\t\t\t\t\tattrs, attrDiags := block.Body.JustAttributes()\n\t\t\t\t\tdiags = append(diags, attrDiags...)\n\n\t\t\t\t\tfor name, attr := range attrs {\n\t\t\t\t\t\tvar version string\n\t\t\t\t\t\tvalDiags := gohcl.DecodeExpression(attr.Expr, nil, &version)\n\t\t\t\t\t\tdiags = append(diags, valDiags...)\n\t\t\t\t\t\tif !valDiags.HasErrors() {\n\t\t\t\t\t\t\tmod.RequiredProviders[name] = append(mod.RequiredProviders[name], version)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\tcase \"variable\":\n\t\t\t\tcontent, _, contentDiags := block.Body.PartialContent(variableSchema)\n\t\t\t\tdiags = append(diags, contentDiags...)\n\n\t\t\t\tname := block.Labels[0]\n\t\t\t\tv := &Variable{\n\t\t\t\t\tName: name,\n\t\t\t\t\tPos:  sourcePosHCL(block.DefRange),\n\t\t\t\t}\n\n\t\t\t\tmod.Variables[name] = v\n\n\t\t\t\tif attr, defined := content.Attributes[\"type\"]; defined {\n\t\t\t\t\t// We handle this particular attribute in a somewhat-tricky way:\n\t\t\t\t\t// since Terraform may evolve its type expression syntax in\n\t\t\t\t\t// future versions, we don't want to be overly-strict in how\n\t\t\t\t\t// we handle it here, and so we'll instead just take the raw\n\t\t\t\t\t// source provided by the user, using the source location\n\t\t\t\t\t// information in the expression object.\n\t\t\t\t\t//\n\t\t\t\t\t// However, older versions of Terraform expected the type\n\t\t\t\t\t// to be a string containing a keyword, so we'll need to\n\t\t\t\t\t// handle that as a special case first for backward compatibility.\n\n\t\t\t\t\tvar typeExpr string\n\n\t\t\t\t\tvar typeExprAsStr string\n\t\t\t\t\tvalDiags := gohcl.DecodeExpression(attr.Expr, nil, &typeExprAsStr)\n\t\t\t\t\tif !valDiags.HasErrors() {\n\t\t\t\t\t\ttypeExpr = typeExprAsStr\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\trng := attr.Expr.Range()\n\t\t\t\t\t\tsourceFilename := rng.Filename\n\t\t\t\t\t\tsource, exists := parser.Sources()[sourceFilename]\n\t\t\t\t\t\tif exists {\n\t\t\t\t\t\t\ttypeExpr = string(rng.SliceBytes(source))\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// This should never happen, so we'll just warn about it and leave the type unspecified.\n\t\t\t\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\t\t\t\tSummary:  \"Source code not available\",\n\t\t\t\t\t\t\t\tDetail:   fmt.Sprintf(\"Source code is not available for the file %q, which declares the variable %q.\", sourceFilename, name),\n\t\t\t\t\t\t\t\tSubject:  &block.DefRange,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\ttypeExpr = \"\"\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tv.Type = typeExpr\n\t\t\t\t}\n\n\t\t\t\tif attr, defined := content.Attributes[\"description\"]; defined {\n\t\t\t\t\tvar description string\n\t\t\t\t\tvalDiags := gohcl.DecodeExpression(attr.Expr, nil, &description)\n\t\t\t\t\tdiags = append(diags, valDiags...)\n\t\t\t\t\tv.Description = description\n\t\t\t\t}\n\n\t\t\t\tif attr, defined := content.Attributes[\"default\"]; defined {\n\t\t\t\t\t// To avoid the caller needing to deal with cty here, we'll\n\t\t\t\t\t// use its JSON encoding to convert into an\n\t\t\t\t\t// approximately-equivalent plain Go interface{} value\n\t\t\t\t\t// to return.\n\t\t\t\t\tval, valDiags := attr.Expr.Value(nil)\n\t\t\t\t\tdiags = append(diags, valDiags...)\n\t\t\t\t\tif val.IsWhollyKnown() { // should only be false if there are errors in the input\n\t\t\t\t\t\tvalJSON, err := ctyjson.Marshal(val, val.Type())\n\t\t\t\t\t\tif err != nil {\n\t\t\t\t\t\t\t// Should never happen, since all possible known\n\t\t\t\t\t\t\t// values have a JSON mapping.\n\t\t\t\t\t\t\tpanic(fmt.Errorf(\"failed to serialize default value as JSON: %s\", err))\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar def interface{}\n\t\t\t\t\t\terr = json.Unmarshal(valJSON, &def)\n\t\t\t\t\t\tif err != nil {\n\t\t\t\t\t\t\t// Again should never happen, because valJSON is\n\t\t\t\t\t\t\t// guaranteed valid by ctyjson.Marshal.\n\t\t\t\t\t\t\tpanic(fmt.Errorf(\"failed to re-parse default value from JSON: %s\", err))\n\t\t\t\t\t\t}\n\t\t\t\t\t\tv.Default = def\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\tcase \"output\":\n\n\t\t\t\tcontent, _, contentDiags := block.Body.PartialContent(outputSchema)\n\t\t\t\tdiags = append(diags, contentDiags...)\n\n\t\t\t\tname := block.Labels[0]\n\t\t\t\to := &Output{\n\t\t\t\t\tName: name,\n\t\t\t\t\tPos:  sourcePosHCL(block.DefRange),\n\t\t\t\t}\n\n\t\t\t\tmod.Outputs[name] = o\n\n\t\t\t\tif attr, defined := content.Attributes[\"description\"]; defined {\n\t\t\t\t\tvar description string\n\t\t\t\t\tvalDiags := gohcl.DecodeExpression(attr.Expr, nil, &description)\n\t\t\t\t\tdiags = append(diags, valDiags...)\n\t\t\t\t\to.Description = description\n\t\t\t\t}\n\n\t\t\tcase \"provider\":\n\n\t\t\t\tcontent, _, contentDiags := block.Body.PartialContent(providerConfigSchema)\n\t\t\t\tdiags = append(diags, contentDiags...)\n\n\t\t\t\tname := block.Labels[0]\n\n\t\t\t\tif attr, defined := content.Attributes[\"version\"]; defined {\n\t\t\t\t\tvar version string\n\t\t\t\t\tvalDiags := gohcl.DecodeExpression(attr.Expr, nil, &version)\n\t\t\t\t\tdiags = append(diags, valDiags...)\n\t\t\t\t\tif !valDiags.HasErrors() {\n\t\t\t\t\t\tmod.RequiredProviders[name] = append(mod.RequiredProviders[name], version)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Even if there wasn't an explicit version required, we still\n\t\t\t\t// need an entry in our map to signal the unversioned dependency.\n\t\t\t\tif _, exists := mod.RequiredProviders[name]; !exists {\n\t\t\t\t\tmod.RequiredProviders[name] = []string{}\n\t\t\t\t}\n\n\t\t\tcase \"resource\", \"data\":\n\n\t\t\t\tcontent, _, contentDiags := block.Body.PartialContent(resourceSchema)\n\t\t\t\tdiags = append(diags, contentDiags...)\n\n\t\t\t\ttypeName := block.Labels[0]\n\t\t\t\tname := block.Labels[1]\n\n\t\t\t\tr := &Resource{\n\t\t\t\t\tType: typeName,\n\t\t\t\t\tName: name,\n\t\t\t\t\tPos:  sourcePosHCL(block.DefRange),\n\t\t\t\t}\n\n\t\t\t\tvar resourcesMap map[string]*Resource\n\n\t\t\t\tswitch block.Type {\n\t\t\t\tcase \"resource\":\n\t\t\t\t\tr.Mode = ManagedResourceMode\n\t\t\t\t\tresourcesMap = mod.ManagedResources\n\t\t\t\tcase \"data\":\n\t\t\t\t\tr.Mode = DataResourceMode\n\t\t\t\t\tresourcesMap = mod.DataResources\n\t\t\t\t}\n\n\t\t\t\tkey := r.MapKey()\n\n\t\t\t\tresourcesMap[key] = r\n\n\t\t\t\tif attr, defined := content.Attributes[\"provider\"]; defined {\n\t\t\t\t\t// New style here is to provide this as a naked traversal\n\t\t\t\t\t// expression, but we also support quoted references for\n\t\t\t\t\t// older configurations that predated this convention.\n\t\t\t\t\ttraversal, travDiags := hcl.AbsTraversalForExpr(attr.Expr)\n\t\t\t\t\tif travDiags.HasErrors() {\n\t\t\t\t\t\ttraversal = nil // in case we got any partial results\n\n\t\t\t\t\t\t// Fall back on trying to parse as a string\n\t\t\t\t\t\tvar travStr string\n\t\t\t\t\t\tvalDiags := gohcl.DecodeExpression(attr.Expr, nil, &travStr)\n\t\t\t\t\t\tif !valDiags.HasErrors() {\n\t\t\t\t\t\t\tvar strDiags hcl.Diagnostics\n\t\t\t\t\t\t\ttraversal, strDiags = hclsyntax.ParseTraversalAbs([]byte(travStr), \"\", hcl.Pos{})\n\t\t\t\t\t\t\tif strDiags.HasErrors() {\n\t\t\t\t\t\t\t\ttraversal = nil\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// If we get out here with a nil traversal then we didn't\n\t\t\t\t\t// succeed in processing the input.\n\t\t\t\t\tif len(traversal) > 0 {\n\t\t\t\t\t\tproviderName := traversal.RootName()\n\t\t\t\t\t\talias := \"\"\n\t\t\t\t\t\tif len(traversal) > 1 {\n\t\t\t\t\t\t\tif getAttr, ok := traversal[1].(hcl.TraverseAttr); ok {\n\t\t\t\t\t\t\t\talias = getAttr.Name\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tr.Provider = ProviderRef{\n\t\t\t\t\t\t\tName:  providerName,\n\t\t\t\t\t\t\tAlias: alias,\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdiags = append(diags, &hcl.Diagnostic{\n\t\t\t\t\t\t\tSeverity: hcl.DiagError,\n\t\t\t\t\t\t\tSummary:  \"Invalid provider reference\",\n\t\t\t\t\t\t\tDetail:   \"Provider argument requires a provider name followed by an optional alias, like \\\"aws.foo\\\".\",\n\t\t\t\t\t\t\tSubject:  attr.Expr.Range().Ptr(),\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// If provider _isn't_ set then we'll infer it from the\n\t\t\t\t\t// resource type.\n\t\t\t\t\tr.Provider = ProviderRef{\n\t\t\t\t\t\tName: resourceTypeDefaultProviderName(r.Type),\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\tcase \"module\":\n\n\t\t\t\tcontent, _, contentDiags := block.Body.PartialContent(moduleCallSchema)\n\t\t\t\tdiags = append(diags, contentDiags...)\n\n\t\t\t\tname := block.Labels[0]\n\t\t\t\tmc := &ModuleCall{\n\t\t\t\t\tName: block.Labels[0],\n\t\t\t\t\tPos:  sourcePosHCL(block.DefRange),\n\t\t\t\t}\n\n\t\t\t\t// check if this is overriding an existing module\n\t\t\t\tvar origSource string\n\t\t\t\tif origMod, exists := mod.ModuleCalls[name]; exists {\n\t\t\t\t\torigSource = origMod.Source\n\t\t\t\t}\n\n\t\t\t\tmod.ModuleCalls[name] = mc\n\n\t\t\t\tif attr, defined := content.Attributes[\"source\"]; defined {\n\t\t\t\t\tvar source string\n\t\t\t\t\tvalDiags := gohcl.DecodeExpression(attr.Expr, nil, &source)\n\t\t\t\t\tdiags = append(diags, valDiags...)\n\t\t\t\t\tmc.Source = source\n\t\t\t\t}\n\n\t\t\t\tif mc.Source == \"\" {\n\t\t\t\t\tmc.Source = origSource\n\t\t\t\t}\n\n\t\t\t\tif attr, defined := content.Attributes[\"version\"]; defined {\n\t\t\t\t\tvar version string\n\t\t\t\t\tvalDiags := gohcl.DecodeExpression(attr.Expr, nil, &version)\n\t\t\t\t\tdiags = append(diags, valDiags...)\n\t\t\t\t\tmc.Version = version\n\t\t\t\t}\n\n\t\t\tdefault:\n\t\t\t\t// Should never happen because our cases above should be\n\t\t\t\t// exhaustive for our schema.\n\t\t\t\tpanic(fmt.Errorf(\"unhandled block type %q\", block.Type))\n\t\t\t}\n\t\t}\n\t}\n\n\treturn mod, diagnosticsHCL(diags)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform-config-inspect/tfconfig/load_legacy.go",
    "content": "package tfconfig\n\nimport (\n\t\"io/ioutil\"\n\t\"strings\"\n\n\tlegacyhcl \"github.com/hashicorp/hcl\"\n\tlegacyast \"github.com/hashicorp/hcl/hcl/ast\"\n)\n\nfunc loadModuleLegacyHCL(dir string) (*Module, Diagnostics) {\n\t// This implementation is intentionally more quick-and-dirty than the\n\t// main loader. In particular, it doesn't bother to keep careful track\n\t// of multiple error messages because we always fall back on returning\n\t// the main parser's error message if our fallback parsing produces\n\t// an error, and thus the errors here are not seen by the end-caller.\n\tmod := newModule(dir)\n\n\tprimaryPaths, diags := dirFiles(dir)\n\tif diags.HasErrors() {\n\t\treturn mod, diagnosticsHCL(diags)\n\t}\n\n\tfor _, filename := range primaryPaths {\n\t\tsrc, err := ioutil.ReadFile(filename)\n\t\tif err != nil {\n\t\t\treturn mod, diagnosticsErrorf(\"Error reading %s: %s\", filename, err)\n\t\t}\n\n\t\thclRoot, err := legacyhcl.Parse(string(src))\n\t\tif err != nil {\n\t\t\treturn mod, diagnosticsErrorf(\"Error parsing %s: %s\", filename, err)\n\t\t}\n\n\t\tlist, ok := hclRoot.Node.(*legacyast.ObjectList)\n\t\tif !ok {\n\t\t\treturn mod, diagnosticsErrorf(\"Error parsing %s: no root object\", filename)\n\t\t}\n\n\t\tfor _, item := range list.Filter(\"terraform\").Items {\n\t\t\tif len(item.Keys) > 0 {\n\t\t\t\titem = &legacyast.ObjectItem{\n\t\t\t\t\tVal: &legacyast.ObjectType{\n\t\t\t\t\t\tList: &legacyast.ObjectList{\n\t\t\t\t\t\t\tItems: []*legacyast.ObjectItem{item},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ttype TerraformBlock struct {\n\t\t\t\tRequiredVersion string `hcl:\"required_version\"`\n\t\t\t}\n\t\t\tvar block TerraformBlock\n\t\t\terr = legacyhcl.DecodeObject(&block, item.Val)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, diagnosticsErrorf(\"terraform block: %s\", err)\n\t\t\t}\n\n\t\t\tif block.RequiredVersion != \"\" {\n\t\t\t\tmod.RequiredCore = append(mod.RequiredCore, block.RequiredVersion)\n\t\t\t}\n\t\t}\n\n\t\tif vars := list.Filter(\"variable\"); len(vars.Items) > 0 {\n\t\t\tvars = vars.Children()\n\t\t\ttype VariableBlock struct {\n\t\t\t\tType        string `hcl:\"type\"`\n\t\t\t\tDefault     interface{}\n\t\t\t\tDescription string\n\t\t\t\tFields      []string `hcl:\",decodedFields\"`\n\t\t\t}\n\n\t\t\tfor _, item := range vars.Items {\n\t\t\t\tunwrapLegacyHCLObjectKeysFromJSON(item, 1)\n\n\t\t\t\tif len(item.Keys) != 1 {\n\t\t\t\t\treturn nil, diagnosticsErrorf(\"variable block at %s has no label\", item.Pos())\n\t\t\t\t}\n\n\t\t\t\tname := item.Keys[0].Token.Value().(string)\n\n\t\t\t\tvar block VariableBlock\n\t\t\t\terr := legacyhcl.DecodeObject(&block, item.Val)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, diagnosticsErrorf(\"invalid variable block at %s: %s\", item.Pos(), err)\n\t\t\t\t}\n\n\t\t\t\t// Clean up legacy HCL decoding ambiguity by unwrapping list of maps\n\t\t\t\tif ms, ok := block.Default.([]map[string]interface{}); ok {\n\t\t\t\t\tdef := make(map[string]interface{})\n\t\t\t\t\tfor _, m := range ms {\n\t\t\t\t\t\tfor k, v := range m {\n\t\t\t\t\t\t\tdef[k] = v\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tblock.Default = def\n\t\t\t\t}\n\n\t\t\t\tv := &Variable{\n\t\t\t\t\tName:        name,\n\t\t\t\t\tType:        block.Type,\n\t\t\t\t\tDescription: block.Description,\n\t\t\t\t\tDefault:     block.Default,\n\t\t\t\t\tPos:         sourcePosLegacyHCL(item.Pos(), filename),\n\t\t\t\t}\n\t\t\t\tif _, exists := mod.Variables[name]; exists {\n\t\t\t\t\treturn nil, diagnosticsErrorf(\"duplicate variable block for %q\", name)\n\t\t\t\t}\n\t\t\t\tmod.Variables[name] = v\n\n\t\t\t}\n\t\t}\n\n\t\tif outputs := list.Filter(\"output\"); len(outputs.Items) > 0 {\n\t\t\toutputs = outputs.Children()\n\t\t\ttype OutputBlock struct {\n\t\t\t\tDescription string\n\t\t\t}\n\n\t\t\tfor _, item := range outputs.Items {\n\t\t\t\tunwrapLegacyHCLObjectKeysFromJSON(item, 1)\n\n\t\t\t\tif len(item.Keys) != 1 {\n\t\t\t\t\treturn nil, diagnosticsErrorf(\"output block at %s has no label\", item.Pos())\n\t\t\t\t}\n\n\t\t\t\tname := item.Keys[0].Token.Value().(string)\n\n\t\t\t\tvar block OutputBlock\n\t\t\t\terr := legacyhcl.DecodeObject(&block, item.Val)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, diagnosticsErrorf(\"invalid output block at %s: %s\", item.Pos(), err)\n\t\t\t\t}\n\n\t\t\t\to := &Output{\n\t\t\t\t\tName:        name,\n\t\t\t\t\tDescription: block.Description,\n\t\t\t\t\tPos:         sourcePosLegacyHCL(item.Pos(), filename),\n\t\t\t\t}\n\t\t\t\tif _, exists := mod.Outputs[name]; exists {\n\t\t\t\t\treturn nil, diagnosticsErrorf(\"duplicate output block for %q\", name)\n\t\t\t\t}\n\t\t\t\tmod.Outputs[name] = o\n\t\t\t}\n\t\t}\n\n\t\tfor _, blockType := range []string{\"resource\", \"data\"} {\n\t\t\tif resources := list.Filter(blockType); len(resources.Items) > 0 {\n\t\t\t\tresources = resources.Children()\n\t\t\t\ttype ResourceBlock struct {\n\t\t\t\t\tProvider string\n\t\t\t\t}\n\n\t\t\t\tfor _, item := range resources.Items {\n\t\t\t\t\tunwrapLegacyHCLObjectKeysFromJSON(item, 2)\n\n\t\t\t\t\tif len(item.Keys) != 2 {\n\t\t\t\t\t\treturn nil, diagnosticsErrorf(\"resource block at %s has wrong label count\", item.Pos())\n\t\t\t\t\t}\n\n\t\t\t\t\ttypeName := item.Keys[0].Token.Value().(string)\n\t\t\t\t\tname := item.Keys[1].Token.Value().(string)\n\t\t\t\t\tvar mode ResourceMode\n\t\t\t\t\tvar rMap map[string]*Resource\n\t\t\t\t\tswitch blockType {\n\t\t\t\t\tcase \"resource\":\n\t\t\t\t\t\tmode = ManagedResourceMode\n\t\t\t\t\t\trMap = mod.ManagedResources\n\t\t\t\t\tcase \"data\":\n\t\t\t\t\t\tmode = DataResourceMode\n\t\t\t\t\t\trMap = mod.DataResources\n\t\t\t\t\t}\n\n\t\t\t\t\tvar block ResourceBlock\n\t\t\t\t\terr := legacyhcl.DecodeObject(&block, item.Val)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn nil, diagnosticsErrorf(\"invalid resource block at %s: %s\", item.Pos(), err)\n\t\t\t\t\t}\n\n\t\t\t\t\tvar providerName, providerAlias string\n\t\t\t\t\tif dotPos := strings.IndexByte(block.Provider, '.'); dotPos != -1 {\n\t\t\t\t\t\tproviderName = block.Provider[:dotPos]\n\t\t\t\t\t\tproviderAlias = block.Provider[dotPos+1:]\n\t\t\t\t\t} else {\n\t\t\t\t\t\tproviderName = block.Provider\n\t\t\t\t\t}\n\t\t\t\t\tif providerName == \"\" {\n\t\t\t\t\t\tproviderName = resourceTypeDefaultProviderName(typeName)\n\t\t\t\t\t}\n\n\t\t\t\t\tr := &Resource{\n\t\t\t\t\t\tMode: mode,\n\t\t\t\t\t\tType: typeName,\n\t\t\t\t\t\tName: name,\n\t\t\t\t\t\tProvider: ProviderRef{\n\t\t\t\t\t\t\tName:  providerName,\n\t\t\t\t\t\t\tAlias: providerAlias,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tPos: sourcePosLegacyHCL(item.Pos(), filename),\n\t\t\t\t\t}\n\t\t\t\t\tkey := r.MapKey()\n\t\t\t\t\tif _, exists := rMap[key]; exists {\n\t\t\t\t\t\treturn nil, diagnosticsErrorf(\"duplicate resource block for %q\", key)\n\t\t\t\t\t}\n\t\t\t\t\trMap[key] = r\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\tif moduleCalls := list.Filter(\"module\"); len(moduleCalls.Items) > 0 {\n\t\t\tmoduleCalls = moduleCalls.Children()\n\t\t\ttype ModuleBlock struct {\n\t\t\t\tSource  string\n\t\t\t\tVersion string\n\t\t\t}\n\n\t\t\tfor _, item := range moduleCalls.Items {\n\t\t\t\tunwrapLegacyHCLObjectKeysFromJSON(item, 1)\n\n\t\t\t\tif len(item.Keys) != 1 {\n\t\t\t\t\treturn nil, diagnosticsErrorf(\"module block at %s has no label\", item.Pos())\n\t\t\t\t}\n\n\t\t\t\tname := item.Keys[0].Token.Value().(string)\n\n\t\t\t\tvar block ModuleBlock\n\t\t\t\terr := legacyhcl.DecodeObject(&block, item.Val)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, diagnosticsErrorf(\"module block at %s: %s\", item.Pos(), err)\n\t\t\t\t}\n\n\t\t\t\tmc := &ModuleCall{\n\t\t\t\t\tName:    name,\n\t\t\t\t\tSource:  block.Source,\n\t\t\t\t\tVersion: block.Version,\n\t\t\t\t\tPos:     sourcePosLegacyHCL(item.Pos(), filename),\n\t\t\t\t}\n\t\t\t\t// it's possible this module call is from an override file\n\t\t\t\tif origMod, exists := mod.ModuleCalls[name]; exists {\n\t\t\t\t\tif mc.Source == \"\" {\n\t\t\t\t\t\tmc.Source = origMod.Source\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tmod.ModuleCalls[name] = mc\n\t\t\t}\n\t\t}\n\n\t\tif providerConfigs := list.Filter(\"provider\"); len(providerConfigs.Items) > 0 {\n\t\t\tproviderConfigs = providerConfigs.Children()\n\t\t\ttype ProviderBlock struct {\n\t\t\t\tVersion string\n\t\t\t}\n\n\t\t\tfor _, item := range providerConfigs.Items {\n\t\t\t\tunwrapLegacyHCLObjectKeysFromJSON(item, 1)\n\n\t\t\t\tif len(item.Keys) != 1 {\n\t\t\t\t\treturn nil, diagnosticsErrorf(\"provider block at %s has no label\", item.Pos())\n\t\t\t\t}\n\n\t\t\t\tname := item.Keys[0].Token.Value().(string)\n\n\t\t\t\tvar block ProviderBlock\n\t\t\t\terr := legacyhcl.DecodeObject(&block, item.Val)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, diagnosticsErrorf(\"invalid provider block at %s: %s\", item.Pos(), err)\n\t\t\t\t}\n\n\t\t\t\tif block.Version != \"\" {\n\t\t\t\t\tmod.RequiredProviders[name] = append(mod.RequiredProviders[name], block.Version)\n\t\t\t\t}\n\n\t\t\t\t// Even if there wasn't an explicit version required, we still\n\t\t\t\t// need an entry in our map to signal the unversioned dependency.\n\t\t\t\tif _, exists := mod.RequiredProviders[name]; !exists {\n\t\t\t\t\tmod.RequiredProviders[name] = []string{}\n\t\t\t\t}\n\n\t\t\t}\n\t\t}\n\t}\n\n\treturn mod, nil\n}\n\n// unwrapLegacyHCLObjectKeysFromJSON cleans up an edge case that can occur when\n// parsing JSON as input: if we're parsing JSON then directly nested\n// items will show up as additional \"keys\".\n//\n// For objects that expect a fixed number of keys, this breaks the\n// decoding process. This function unwraps the object into what it would've\n// looked like if it came directly from HCL by specifying the number of keys\n// you expect.\n//\n// Example:\n//\n// { \"foo\": { \"baz\": {} } }\n//\n// Will show up with Keys being: []string{\"foo\", \"baz\"}\n// when we really just want the first two. This function will fix this.\nfunc unwrapLegacyHCLObjectKeysFromJSON(item *legacyast.ObjectItem, depth int) {\n\tif len(item.Keys) > depth && item.Keys[0].Token.JSON {\n\t\tfor len(item.Keys) > depth {\n\t\t\t// Pop off the last key\n\t\t\tn := len(item.Keys)\n\t\t\tkey := item.Keys[n-1]\n\t\t\titem.Keys[n-1] = nil\n\t\t\titem.Keys = item.Keys[:n-1]\n\n\t\t\t// Wrap our value in a list\n\t\t\titem.Val = &legacyast.ObjectType{\n\t\t\t\tList: &legacyast.ObjectList{\n\t\t\t\t\tItems: []*legacyast.ObjectItem{\n\t\t\t\t\t\t&legacyast.ObjectItem{\n\t\t\t\t\t\t\tKeys: []*legacyast.ObjectKey{key},\n\t\t\t\t\t\t\tVal:  item.Val,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform-config-inspect/tfconfig/module.go",
    "content": "package tfconfig\n\n// Module is the top-level type representing a parsed and processed Terraform\n// module.\ntype Module struct {\n\t// Path is the local filesystem directory where the module was loaded from.\n\tPath string `json:\"path\"`\n\n\tVariables map[string]*Variable `json:\"variables\"`\n\tOutputs   map[string]*Output   `json:\"outputs\"`\n\n\tRequiredCore      []string            `json:\"required_core,omitempty\"`\n\tRequiredProviders map[string][]string `json:\"required_providers\"`\n\n\tManagedResources map[string]*Resource   `json:\"managed_resources\"`\n\tDataResources    map[string]*Resource   `json:\"data_resources\"`\n\tModuleCalls      map[string]*ModuleCall `json:\"module_calls\"`\n\n\t// Diagnostics records any errors and warnings that were detected during\n\t// loading, primarily for inclusion in serialized forms of the module\n\t// since this slice is also returned as a second argument from LoadModule.\n\tDiagnostics Diagnostics `json:\"diagnostics,omitempty\"`\n}\n\nfunc newModule(path string) *Module {\n\treturn &Module{\n\t\tPath:              path,\n\t\tVariables:         make(map[string]*Variable),\n\t\tOutputs:           make(map[string]*Output),\n\t\tRequiredProviders: make(map[string][]string),\n\t\tManagedResources:  make(map[string]*Resource),\n\t\tDataResources:     make(map[string]*Resource),\n\t\tModuleCalls:       make(map[string]*ModuleCall),\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform-config-inspect/tfconfig/module_call.go",
    "content": "package tfconfig\n\n// ModuleCall represents a \"module\" block within a module. That is, a\n// declaration of a child module from inside its parent.\ntype ModuleCall struct {\n\tName    string `json:\"name\"`\n\tSource  string `json:\"source\"`\n\tVersion string `json:\"version,omitempty\"`\n\n\tPos SourcePos `json:\"pos\"`\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform-config-inspect/tfconfig/output.go",
    "content": "package tfconfig\n\n// Output represents a single output from a Terraform module.\ntype Output struct {\n\tName        string `json:\"name\"`\n\tDescription string `json:\"description,omitempty\"`\n\n\tPos SourcePos `json:\"pos\"`\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform-config-inspect/tfconfig/provider_ref.go",
    "content": "package tfconfig\n\n// ProviderRef is a reference to a provider configuration within a module.\n// It represents the contents of a \"provider\" argument in a resource, or\n// a value in the \"providers\" map for a module call.\ntype ProviderRef struct {\n\tName  string `json:\"name\"`\n\tAlias string `json:\"alias,omitempty\"` // Empty if the default provider configuration is referenced\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform-config-inspect/tfconfig/resource.go",
    "content": "package tfconfig\n\nimport (\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// Resource represents a single \"resource\" or \"data\" block within a module.\ntype Resource struct {\n\tMode ResourceMode `json:\"mode\"`\n\tType string       `json:\"type\"`\n\tName string       `json:\"name\"`\n\n\tProvider ProviderRef `json:\"provider\"`\n\n\tPos SourcePos `json:\"pos\"`\n}\n\n// MapKey returns a string that can be used to uniquely identify the receiver\n// in a map[string]*Resource.\nfunc (r *Resource) MapKey() string {\n\tswitch r.Mode {\n\tcase ManagedResourceMode:\n\t\treturn fmt.Sprintf(\"%s.%s\", r.Type, r.Name)\n\tcase DataResourceMode:\n\t\treturn fmt.Sprintf(\"data.%s.%s\", r.Type, r.Name)\n\tdefault:\n\t\t// should never happen\n\t\treturn fmt.Sprintf(\"[invalid_mode!].%s.%s\", r.Type, r.Name)\n\t}\n}\n\n// ResourceMode represents the \"mode\" of a resource, which is used to\n// distinguish between managed resources (\"resource\" blocks in config) and\n// data resources (\"data\" blocks in config).\ntype ResourceMode rune\n\nconst InvalidResourceMode ResourceMode = 0\nconst ManagedResourceMode ResourceMode = 'M'\nconst DataResourceMode ResourceMode = 'D'\n\nfunc (m ResourceMode) String() string {\n\tswitch m {\n\tcase ManagedResourceMode:\n\t\treturn \"managed\"\n\tcase DataResourceMode:\n\t\treturn \"data\"\n\tdefault:\n\t\treturn \"\"\n\t}\n}\n\n// MarshalJSON implements encoding/json.Marshaler.\nfunc (m ResourceMode) MarshalJSON() ([]byte, error) {\n\treturn []byte(strconv.Quote(m.String())), nil\n}\n\nfunc resourceTypeDefaultProviderName(typeName string) string {\n\tif underPos := strings.IndexByte(typeName, '_'); underPos != -1 {\n\t\treturn typeName[:underPos]\n\t}\n\treturn typeName\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform-config-inspect/tfconfig/schema.go",
    "content": "package tfconfig\n\nimport (\n\t\"github.com/hashicorp/hcl2/hcl\"\n)\n\nvar rootSchema = &hcl.BodySchema{\n\tBlocks: []hcl.BlockHeaderSchema{\n\t\t{\n\t\t\tType:       \"terraform\",\n\t\t\tLabelNames: nil,\n\t\t},\n\t\t{\n\t\t\tType:       \"variable\",\n\t\t\tLabelNames: []string{\"name\"},\n\t\t},\n\t\t{\n\t\t\tType:       \"output\",\n\t\t\tLabelNames: []string{\"name\"},\n\t\t},\n\t\t{\n\t\t\tType:       \"provider\",\n\t\t\tLabelNames: []string{\"name\"},\n\t\t},\n\t\t{\n\t\t\tType:       \"resource\",\n\t\t\tLabelNames: []string{\"type\", \"name\"},\n\t\t},\n\t\t{\n\t\t\tType:       \"data\",\n\t\t\tLabelNames: []string{\"type\", \"name\"},\n\t\t},\n\t\t{\n\t\t\tType:       \"module\",\n\t\t\tLabelNames: []string{\"name\"},\n\t\t},\n\t},\n}\n\nvar terraformBlockSchema = &hcl.BodySchema{\n\tAttributes: []hcl.AttributeSchema{\n\t\t{\n\t\t\tName: \"required_version\",\n\t\t},\n\t},\n\tBlocks: []hcl.BlockHeaderSchema{\n\t\t{\n\t\t\tType: \"required_providers\",\n\t\t},\n\t},\n}\n\nvar providerConfigSchema = &hcl.BodySchema{\n\tAttributes: []hcl.AttributeSchema{\n\t\t{\n\t\t\tName: \"version\",\n\t\t},\n\t\t{\n\t\t\tName: \"alias\",\n\t\t},\n\t},\n}\n\nvar variableSchema = &hcl.BodySchema{\n\tAttributes: []hcl.AttributeSchema{\n\t\t{\n\t\t\tName: \"type\",\n\t\t},\n\t\t{\n\t\t\tName: \"description\",\n\t\t},\n\t\t{\n\t\t\tName: \"default\",\n\t\t},\n\t},\n}\n\nvar outputSchema = &hcl.BodySchema{\n\tAttributes: []hcl.AttributeSchema{\n\t\t{\n\t\t\tName: \"description\",\n\t\t},\n\t},\n}\n\nvar moduleCallSchema = &hcl.BodySchema{\n\tAttributes: []hcl.AttributeSchema{\n\t\t{\n\t\t\tName: \"source\",\n\t\t},\n\t\t{\n\t\t\tName: \"version\",\n\t\t},\n\t\t{\n\t\t\tName: \"providers\",\n\t\t},\n\t},\n}\n\nvar resourceSchema = &hcl.BodySchema{\n\tAttributes: []hcl.AttributeSchema{\n\t\t{\n\t\t\tName: \"provider\",\n\t\t},\n\t},\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform-config-inspect/tfconfig/source_pos.go",
    "content": "package tfconfig\n\nimport (\n\tlegacyhcltoken \"github.com/hashicorp/hcl/hcl/token\"\n\t\"github.com/hashicorp/hcl2/hcl\"\n)\n\n// SourcePos is a pointer to a particular location in a source file.\n//\n// This type is embedded into other structs to allow callers to locate the\n// definition of each described module element. The SourcePos of an element\n// is usually the first line of its definition, although the definition can\n// be a little \"fuzzy\" with JSON-based config files.\ntype SourcePos struct {\n\tFilename string `json:\"filename\"`\n\tLine     int    `json:\"line\"`\n}\n\nfunc sourcePos(filename string, line int) SourcePos {\n\treturn SourcePos{\n\t\tFilename: filename,\n\t\tLine:     line,\n\t}\n}\n\nfunc sourcePosHCL(rng hcl.Range) SourcePos {\n\t// We intentionally throw away the column information here because\n\t// current and legacy HCL both disagree on the definition of a column\n\t// and so a line-only reference is the best granularity we can do\n\t// such that the result is consistent between both parsers.\n\treturn SourcePos{\n\t\tFilename: rng.Filename,\n\t\tLine:     rng.Start.Line,\n\t}\n}\n\nfunc sourcePosLegacyHCL(pos legacyhcltoken.Pos, filename string) SourcePos {\n\tuseFilename := pos.Filename\n\t// We'll try to use the filename given in legacy HCL position, but\n\t// in practice there's no way to actually get this populated via\n\t// the HCL API so it's usually empty except in some specialized\n\t// situations, such as positions in error objects.\n\tif useFilename == \"\" {\n\t\tuseFilename = filename\n\t}\n\treturn SourcePos{\n\t\tFilename: useFilename,\n\t\tLine:     pos.Line,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/terraform-config-inspect/tfconfig/variable.go",
    "content": "package tfconfig\n\n// Variable represents a single variable from a Terraform module.\ntype Variable struct {\n\tName        string `json:\"name\"`\n\tType        string `json:\"type,omitempty\"`\n\tDescription string `json:\"description,omitempty\"`\n\n\t// Default is an approximate representation of the default value in\n\t// the native Go type system. The conversion from the value given in\n\t// configuration may be slightly lossy. Only values that can be\n\t// serialized by json.Marshal will be included here.\n\tDefault interface{} `json:\"default,omitempty\"`\n\n\tPos SourcePos `json:\"pos\"`\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/yamux/LICENSE",
    "content": "Mozilla Public License, version 2.0\n\n1. Definitions\n\n1.1. \"Contributor\"\n\n     means each individual or legal entity that creates, contributes to the\n     creation of, or owns Covered Software.\n\n1.2. \"Contributor Version\"\n\n     means the combination of the Contributions of others (if any) used by a\n     Contributor and that particular Contributor's Contribution.\n\n1.3. \"Contribution\"\n\n     means Covered Software of a particular Contributor.\n\n1.4. \"Covered Software\"\n\n     means Source Code Form to which the initial Contributor has attached the\n     notice in Exhibit A, the Executable Form of such Source Code Form, and\n     Modifications of such Source Code Form, in each case including portions\n     thereof.\n\n1.5. \"Incompatible With Secondary Licenses\"\n     means\n\n     a. that the initial Contributor has attached the notice described in\n        Exhibit B to the Covered Software; or\n\n     b. that the Covered Software was made available under the terms of\n        version 1.1 or earlier of the License, but not also under the terms of\n        a Secondary License.\n\n1.6. \"Executable Form\"\n\n     means any form of the work other than Source Code Form.\n\n1.7. \"Larger Work\"\n\n     means a work that combines Covered Software with other material, in a\n     separate file or files, that is not Covered Software.\n\n1.8. \"License\"\n\n     means this document.\n\n1.9. \"Licensable\"\n\n     means having the right to grant, to the maximum extent possible, whether\n     at the time of the initial grant or subsequently, any and all of the\n     rights conveyed by this License.\n\n1.10. \"Modifications\"\n\n     means any of the following:\n\n     a. any file in Source Code Form that results from an addition to,\n        deletion from, or modification of the contents of Covered Software; or\n\n     b. any new file in Source Code Form that contains any Covered Software.\n\n1.11. \"Patent Claims\" of a Contributor\n\n      means any patent claim(s), including without limitation, method,\n      process, and apparatus claims, in any patent Licensable by such\n      Contributor that would be infringed, but for the grant of the License,\n      by the making, using, selling, offering for sale, having made, import,\n      or transfer of either its Contributions or its Contributor Version.\n\n1.12. \"Secondary License\"\n\n      means either the GNU General Public License, Version 2.0, the GNU Lesser\n      General Public License, Version 2.1, the GNU Affero General Public\n      License, Version 3.0, or any later versions of those licenses.\n\n1.13. \"Source Code Form\"\n\n      means the form of the work preferred for making modifications.\n\n1.14. \"You\" (or \"Your\")\n\n      means an individual or a legal entity exercising rights under this\n      License. For legal entities, \"You\" includes any entity that controls, is\n      controlled by, or is under common control with You. For purposes of this\n      definition, \"control\" means (a) the power, direct or indirect, to cause\n      the direction or management of such entity, whether by contract or\n      otherwise, or (b) ownership of more than fifty percent (50%) of the\n      outstanding shares or beneficial ownership of such entity.\n\n\n2. License Grants and Conditions\n\n2.1. Grants\n\n     Each Contributor hereby grants You a world-wide, royalty-free,\n     non-exclusive license:\n\n     a. under intellectual property rights (other than patent or trademark)\n        Licensable by such Contributor to use, reproduce, make available,\n        modify, display, perform, distribute, and otherwise exploit its\n        Contributions, either on an unmodified basis, with Modifications, or\n        as part of a Larger Work; and\n\n     b. under Patent Claims of such Contributor to make, use, sell, offer for\n        sale, have made, import, and otherwise transfer either its\n        Contributions or its Contributor Version.\n\n2.2. Effective Date\n\n     The licenses granted in Section 2.1 with respect to any Contribution\n     become effective for each Contribution on the date the Contributor first\n     distributes such Contribution.\n\n2.3. Limitations on Grant Scope\n\n     The licenses granted in this Section 2 are the only rights granted under\n     this License. No additional rights or licenses will be implied from the\n     distribution or licensing of Covered Software under this License.\n     Notwithstanding Section 2.1(b) above, no patent license is granted by a\n     Contributor:\n\n     a. for any code that a Contributor has removed from Covered Software; or\n\n     b. for infringements caused by: (i) Your and any other third party's\n        modifications of Covered Software, or (ii) the combination of its\n        Contributions with other software (except as part of its Contributor\n        Version); or\n\n     c. under Patent Claims infringed by Covered Software in the absence of\n        its Contributions.\n\n     This License does not grant any rights in the trademarks, service marks,\n     or logos of any Contributor (except as may be necessary to comply with\n     the notice requirements in Section 3.4).\n\n2.4. Subsequent Licenses\n\n     No Contributor makes additional grants as a result of Your choice to\n     distribute the Covered Software under a subsequent version of this\n     License (see Section 10.2) or under the terms of a Secondary License (if\n     permitted under the terms of Section 3.3).\n\n2.5. Representation\n\n     Each Contributor represents that the Contributor believes its\n     Contributions are its original creation(s) or it has sufficient rights to\n     grant the rights to its Contributions conveyed by this License.\n\n2.6. Fair Use\n\n     This License is not intended to limit any rights You have under\n     applicable copyright doctrines of fair use, fair dealing, or other\n     equivalents.\n\n2.7. Conditions\n\n     Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in\n     Section 2.1.\n\n\n3. Responsibilities\n\n3.1. Distribution of Source Form\n\n     All distribution of Covered Software in Source Code Form, including any\n     Modifications that You create or to which You contribute, must be under\n     the terms of this License. You must inform recipients that the Source\n     Code Form of the Covered Software is governed by the terms of this\n     License, and how they can obtain a copy of this License. You may not\n     attempt to alter or restrict the recipients' rights in the Source Code\n     Form.\n\n3.2. Distribution of Executable Form\n\n     If You distribute Covered Software in Executable Form then:\n\n     a. such Covered Software must also be made available in Source Code Form,\n        as described in Section 3.1, and You must inform recipients of the\n        Executable Form how they can obtain a copy of such Source Code Form by\n        reasonable means in a timely manner, at a charge no more than the cost\n        of distribution to the recipient; and\n\n     b. You may distribute such Executable Form under the terms of this\n        License, or sublicense it under different terms, provided that the\n        license for the Executable Form does not attempt to limit or alter the\n        recipients' rights in the Source Code Form under this License.\n\n3.3. Distribution of a Larger Work\n\n     You may create and distribute a Larger Work under terms of Your choice,\n     provided that You also comply with the requirements of this License for\n     the Covered Software. If the Larger Work is a combination of Covered\n     Software with a work governed by one or more Secondary Licenses, and the\n     Covered Software is not Incompatible With Secondary Licenses, this\n     License permits You to additionally distribute such Covered Software\n     under the terms of such Secondary License(s), so that the recipient of\n     the Larger Work may, at their option, further distribute the Covered\n     Software under the terms of either this License or such Secondary\n     License(s).\n\n3.4. Notices\n\n     You may not remove or alter the substance of any license notices\n     (including copyright notices, patent notices, disclaimers of warranty, or\n     limitations of liability) contained within the Source Code Form of the\n     Covered Software, except that You may alter any license notices to the\n     extent required to remedy known factual inaccuracies.\n\n3.5. Application of Additional Terms\n\n     You may choose to offer, and to charge a fee for, warranty, support,\n     indemnity or liability obligations to one or more recipients of Covered\n     Software. However, You may do so only on Your own behalf, and not on\n     behalf of any Contributor. You must make it absolutely clear that any\n     such warranty, support, indemnity, or liability obligation is offered by\n     You alone, and You hereby agree to indemnify every Contributor for any\n     liability incurred by such Contributor as a result of warranty, support,\n     indemnity or liability terms You offer. You may include additional\n     disclaimers of warranty and limitations of liability specific to any\n     jurisdiction.\n\n4. Inability to Comply Due to Statute or Regulation\n\n   If it is impossible for You to comply with any of the terms of this License\n   with respect to some or all of the Covered Software due to statute,\n   judicial order, or regulation then You must: (a) comply with the terms of\n   this License to the maximum extent possible; and (b) describe the\n   limitations and the code they affect. Such description must be placed in a\n   text file included with all distributions of the Covered Software under\n   this License. Except to the extent prohibited by statute or regulation,\n   such description must be sufficiently detailed for a recipient of ordinary\n   skill to be able to understand it.\n\n5. Termination\n\n5.1. The rights granted under this License will terminate automatically if You\n     fail to comply with any of its terms. However, if You become compliant,\n     then the rights granted under this License from a particular Contributor\n     are reinstated (a) provisionally, unless and until such Contributor\n     explicitly and finally terminates Your grants, and (b) on an ongoing\n     basis, if such Contributor fails to notify You of the non-compliance by\n     some reasonable means prior to 60 days after You have come back into\n     compliance. Moreover, Your grants from a particular Contributor are\n     reinstated on an ongoing basis if such Contributor notifies You of the\n     non-compliance by some reasonable means, this is the first time You have\n     received notice of non-compliance with this License from such\n     Contributor, and You become compliant prior to 30 days after Your receipt\n     of the notice.\n\n5.2. If You initiate litigation against any entity by asserting a patent\n     infringement claim (excluding declaratory judgment actions,\n     counter-claims, and cross-claims) alleging that a Contributor Version\n     directly or indirectly infringes any patent, then the rights granted to\n     You by any and all Contributors for the Covered Software under Section\n     2.1 of this License shall terminate.\n\n5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user\n     license agreements (excluding distributors and resellers) which have been\n     validly granted by You or Your distributors under this License prior to\n     termination shall survive termination.\n\n6. Disclaimer of Warranty\n\n   Covered Software is provided under this License on an \"as is\" basis,\n   without warranty of any kind, either expressed, implied, or statutory,\n   including, without limitation, warranties that the Covered Software is free\n   of defects, merchantable, fit for a particular purpose or non-infringing.\n   The entire risk as to the quality and performance of the Covered Software\n   is with You. Should any Covered Software prove defective in any respect,\n   You (not any Contributor) assume the cost of any necessary servicing,\n   repair, or correction. This disclaimer of warranty constitutes an essential\n   part of this License. No use of  any Covered Software is authorized under\n   this License except under this disclaimer.\n\n7. Limitation of Liability\n\n   Under no circumstances and under no legal theory, whether tort (including\n   negligence), contract, or otherwise, shall any Contributor, or anyone who\n   distributes Covered Software as permitted above, be liable to You for any\n   direct, indirect, special, incidental, or consequential damages of any\n   character including, without limitation, damages for lost profits, loss of\n   goodwill, work stoppage, computer failure or malfunction, or any and all\n   other commercial damages or losses, even if such party shall have been\n   informed of the possibility of such damages. This limitation of liability\n   shall not apply to liability for death or personal injury resulting from\n   such party's negligence to the extent applicable law prohibits such\n   limitation. Some jurisdictions do not allow the exclusion or limitation of\n   incidental or consequential damages, so this exclusion and limitation may\n   not apply to You.\n\n8. Litigation\n\n   Any litigation relating to this License may be brought only in the courts\n   of a jurisdiction where the defendant maintains its principal place of\n   business and such litigation shall be governed by laws of that\n   jurisdiction, without reference to its conflict-of-law provisions. Nothing\n   in this Section shall prevent a party's ability to bring cross-claims or\n   counter-claims.\n\n9. Miscellaneous\n\n   This License represents the complete agreement concerning the subject\n   matter hereof. If any provision of this License is held to be\n   unenforceable, such provision shall be reformed only to the extent\n   necessary to make it enforceable. Any law or regulation which provides that\n   the language of a contract shall be construed against the drafter shall not\n   be used to construe this License against a Contributor.\n\n\n10. Versions of the License\n\n10.1. New Versions\n\n      Mozilla Foundation is the license steward. Except as provided in Section\n      10.3, no one other than the license steward has the right to modify or\n      publish new versions of this License. Each version will be given a\n      distinguishing version number.\n\n10.2. Effect of New Versions\n\n      You may distribute the Covered Software under the terms of the version\n      of the License under which You originally received the Covered Software,\n      or under the terms of any subsequent version published by the license\n      steward.\n\n10.3. Modified Versions\n\n      If you create software not governed by this License, and you want to\n      create a new license for such software, you may create and use a\n      modified version of this License if you rename the license and remove\n      any references to the name of the license steward (except to note that\n      such modified license differs from this License).\n\n10.4. Distributing Source Code Form that is Incompatible With Secondary\n      Licenses If You choose to distribute Source Code Form that is\n      Incompatible With Secondary Licenses under the terms of this version of\n      the License, the notice described in Exhibit B of this License must be\n      attached.\n\nExhibit A - Source Code Form License Notice\n\n      This Source Code Form is subject to the\n      terms of the Mozilla Public License, v.\n      2.0. If a copy of the MPL was not\n      distributed with this file, You can\n      obtain one at\n      http://mozilla.org/MPL/2.0/.\n\nIf it is not possible or desirable to put the notice in a particular file,\nthen You may include the notice in a location (such as a LICENSE file in a\nrelevant directory) where a recipient would be likely to look for such a\nnotice.\n\nYou may add additional accurate notices of copyright ownership.\n\nExhibit B - \"Incompatible With Secondary Licenses\" Notice\n\n      This Source Code Form is \"Incompatible\n      With Secondary Licenses\", as defined by\n      the Mozilla Public License, v. 2.0."
  },
  {
    "path": "vendor/github.com/hashicorp/yamux/addr.go",
    "content": "package yamux\n\nimport (\n\t\"fmt\"\n\t\"net\"\n)\n\n// hasAddr is used to get the address from the underlying connection\ntype hasAddr interface {\n\tLocalAddr() net.Addr\n\tRemoteAddr() net.Addr\n}\n\n// yamuxAddr is used when we cannot get the underlying address\ntype yamuxAddr struct {\n\tAddr string\n}\n\nfunc (*yamuxAddr) Network() string {\n\treturn \"yamux\"\n}\n\nfunc (y *yamuxAddr) String() string {\n\treturn fmt.Sprintf(\"yamux:%s\", y.Addr)\n}\n\n// Addr is used to get the address of the listener.\nfunc (s *Session) Addr() net.Addr {\n\treturn s.LocalAddr()\n}\n\n// LocalAddr is used to get the local address of the\n// underlying connection.\nfunc (s *Session) LocalAddr() net.Addr {\n\taddr, ok := s.conn.(hasAddr)\n\tif !ok {\n\t\treturn &yamuxAddr{\"local\"}\n\t}\n\treturn addr.LocalAddr()\n}\n\n// RemoteAddr is used to get the address of remote end\n// of the underlying connection\nfunc (s *Session) RemoteAddr() net.Addr {\n\taddr, ok := s.conn.(hasAddr)\n\tif !ok {\n\t\treturn &yamuxAddr{\"remote\"}\n\t}\n\treturn addr.RemoteAddr()\n}\n\n// LocalAddr returns the local address\nfunc (s *Stream) LocalAddr() net.Addr {\n\treturn s.session.LocalAddr()\n}\n\n// LocalAddr returns the remote address\nfunc (s *Stream) RemoteAddr() net.Addr {\n\treturn s.session.RemoteAddr()\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/yamux/const.go",
    "content": "package yamux\n\nimport (\n\t\"encoding/binary\"\n\t\"fmt\"\n)\n\nvar (\n\t// ErrInvalidVersion means we received a frame with an\n\t// invalid version\n\tErrInvalidVersion = fmt.Errorf(\"invalid protocol version\")\n\n\t// ErrInvalidMsgType means we received a frame with an\n\t// invalid message type\n\tErrInvalidMsgType = fmt.Errorf(\"invalid msg type\")\n\n\t// ErrSessionShutdown is used if there is a shutdown during\n\t// an operation\n\tErrSessionShutdown = fmt.Errorf(\"session shutdown\")\n\n\t// ErrStreamsExhausted is returned if we have no more\n\t// stream ids to issue\n\tErrStreamsExhausted = fmt.Errorf(\"streams exhausted\")\n\n\t// ErrDuplicateStream is used if a duplicate stream is\n\t// opened inbound\n\tErrDuplicateStream = fmt.Errorf(\"duplicate stream initiated\")\n\n\t// ErrReceiveWindowExceeded indicates the window was exceeded\n\tErrRecvWindowExceeded = fmt.Errorf(\"recv window exceeded\")\n\n\t// ErrTimeout is used when we reach an IO deadline\n\tErrTimeout = fmt.Errorf(\"i/o deadline reached\")\n\n\t// ErrStreamClosed is returned when using a closed stream\n\tErrStreamClosed = fmt.Errorf(\"stream closed\")\n\n\t// ErrUnexpectedFlag is set when we get an unexpected flag\n\tErrUnexpectedFlag = fmt.Errorf(\"unexpected flag\")\n\n\t// ErrRemoteGoAway is used when we get a go away from the other side\n\tErrRemoteGoAway = fmt.Errorf(\"remote end is not accepting connections\")\n\n\t// ErrConnectionReset is sent if a stream is reset. This can happen\n\t// if the backlog is exceeded, or if there was a remote GoAway.\n\tErrConnectionReset = fmt.Errorf(\"connection reset\")\n\n\t// ErrConnectionWriteTimeout indicates that we hit the \"safety valve\"\n\t// timeout writing to the underlying stream connection.\n\tErrConnectionWriteTimeout = fmt.Errorf(\"connection write timeout\")\n\n\t// ErrKeepAliveTimeout is sent if a missed keepalive caused the stream close\n\tErrKeepAliveTimeout = fmt.Errorf(\"keepalive timeout\")\n)\n\nconst (\n\t// protoVersion is the only version we support\n\tprotoVersion uint8 = 0\n)\n\nconst (\n\t// Data is used for data frames. They are followed\n\t// by length bytes worth of payload.\n\ttypeData uint8 = iota\n\n\t// WindowUpdate is used to change the window of\n\t// a given stream. The length indicates the delta\n\t// update to the window.\n\ttypeWindowUpdate\n\n\t// Ping is sent as a keep-alive or to measure\n\t// the RTT. The StreamID and Length value are echoed\n\t// back in the response.\n\ttypePing\n\n\t// GoAway is sent to terminate a session. The StreamID\n\t// should be 0 and the length is an error code.\n\ttypeGoAway\n)\n\nconst (\n\t// SYN is sent to signal a new stream. May\n\t// be sent with a data payload\n\tflagSYN uint16 = 1 << iota\n\n\t// ACK is sent to acknowledge a new stream. May\n\t// be sent with a data payload\n\tflagACK\n\n\t// FIN is sent to half-close the given stream.\n\t// May be sent with a data payload.\n\tflagFIN\n\n\t// RST is used to hard close a given stream.\n\tflagRST\n)\n\nconst (\n\t// initialStreamWindow is the initial stream window size\n\tinitialStreamWindow uint32 = 256 * 1024\n)\n\nconst (\n\t// goAwayNormal is sent on a normal termination\n\tgoAwayNormal uint32 = iota\n\n\t// goAwayProtoErr sent on a protocol error\n\tgoAwayProtoErr\n\n\t// goAwayInternalErr sent on an internal error\n\tgoAwayInternalErr\n)\n\nconst (\n\tsizeOfVersion  = 1\n\tsizeOfType     = 1\n\tsizeOfFlags    = 2\n\tsizeOfStreamID = 4\n\tsizeOfLength   = 4\n\theaderSize     = sizeOfVersion + sizeOfType + sizeOfFlags +\n\t\tsizeOfStreamID + sizeOfLength\n)\n\ntype header []byte\n\nfunc (h header) Version() uint8 {\n\treturn h[0]\n}\n\nfunc (h header) MsgType() uint8 {\n\treturn h[1]\n}\n\nfunc (h header) Flags() uint16 {\n\treturn binary.BigEndian.Uint16(h[2:4])\n}\n\nfunc (h header) StreamID() uint32 {\n\treturn binary.BigEndian.Uint32(h[4:8])\n}\n\nfunc (h header) Length() uint32 {\n\treturn binary.BigEndian.Uint32(h[8:12])\n}\n\nfunc (h header) String() string {\n\treturn fmt.Sprintf(\"Vsn:%d Type:%d Flags:%d StreamID:%d Length:%d\",\n\t\th.Version(), h.MsgType(), h.Flags(), h.StreamID(), h.Length())\n}\n\nfunc (h header) encode(msgType uint8, flags uint16, streamID uint32, length uint32) {\n\th[0] = protoVersion\n\th[1] = msgType\n\tbinary.BigEndian.PutUint16(h[2:4], flags)\n\tbinary.BigEndian.PutUint32(h[4:8], streamID)\n\tbinary.BigEndian.PutUint32(h[8:12], length)\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/yamux/mux.go",
    "content": "package yamux\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"log\"\n\t\"os\"\n\t\"time\"\n)\n\n// Config is used to tune the Yamux session\ntype Config struct {\n\t// AcceptBacklog is used to limit how many streams may be\n\t// waiting an accept.\n\tAcceptBacklog int\n\n\t// EnableKeepalive is used to do a period keep alive\n\t// messages using a ping.\n\tEnableKeepAlive bool\n\n\t// KeepAliveInterval is how often to perform the keep alive\n\tKeepAliveInterval time.Duration\n\n\t// ConnectionWriteTimeout is meant to be a \"safety valve\" timeout after\n\t// we which will suspect a problem with the underlying connection and\n\t// close it. This is only applied to writes, where's there's generally\n\t// an expectation that things will move along quickly.\n\tConnectionWriteTimeout time.Duration\n\n\t// MaxStreamWindowSize is used to control the maximum\n\t// window size that we allow for a stream.\n\tMaxStreamWindowSize uint32\n\n\t// LogOutput is used to control the log destination. Either Logger or\n\t// LogOutput can be set, not both.\n\tLogOutput io.Writer\n\n\t// Logger is used to pass in the logger to be used. Either Logger or\n\t// LogOutput can be set, not both.\n\tLogger *log.Logger\n}\n\n// DefaultConfig is used to return a default configuration\nfunc DefaultConfig() *Config {\n\treturn &Config{\n\t\tAcceptBacklog:          256,\n\t\tEnableKeepAlive:        true,\n\t\tKeepAliveInterval:      30 * time.Second,\n\t\tConnectionWriteTimeout: 10 * time.Second,\n\t\tMaxStreamWindowSize:    initialStreamWindow,\n\t\tLogOutput:              os.Stderr,\n\t}\n}\n\n// VerifyConfig is used to verify the sanity of configuration\nfunc VerifyConfig(config *Config) error {\n\tif config.AcceptBacklog <= 0 {\n\t\treturn fmt.Errorf(\"backlog must be positive\")\n\t}\n\tif config.KeepAliveInterval == 0 {\n\t\treturn fmt.Errorf(\"keep-alive interval must be positive\")\n\t}\n\tif config.MaxStreamWindowSize < initialStreamWindow {\n\t\treturn fmt.Errorf(\"MaxStreamWindowSize must be larger than %d\", initialStreamWindow)\n\t}\n\tif config.LogOutput != nil && config.Logger != nil {\n\t\treturn fmt.Errorf(\"both Logger and LogOutput may not be set, select one\")\n\t} else if config.LogOutput == nil && config.Logger == nil {\n\t\treturn fmt.Errorf(\"one of Logger or LogOutput must be set, select one\")\n\t}\n\treturn nil\n}\n\n// Server is used to initialize a new server-side connection.\n// There must be at most one server-side connection. If a nil config is\n// provided, the DefaultConfiguration will be used.\nfunc Server(conn io.ReadWriteCloser, config *Config) (*Session, error) {\n\tif config == nil {\n\t\tconfig = DefaultConfig()\n\t}\n\tif err := VerifyConfig(config); err != nil {\n\t\treturn nil, err\n\t}\n\treturn newSession(config, conn, false), nil\n}\n\n// Client is used to initialize a new client-side connection.\n// There must be at most one client-side connection.\nfunc Client(conn io.ReadWriteCloser, config *Config) (*Session, error) {\n\tif config == nil {\n\t\tconfig = DefaultConfig()\n\t}\n\n\tif err := VerifyConfig(config); err != nil {\n\t\treturn nil, err\n\t}\n\treturn newSession(config, conn, true), nil\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/yamux/session.go",
    "content": "package yamux\n\nimport (\n\t\"bufio\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"log\"\n\t\"math\"\n\t\"net\"\n\t\"strings\"\n\t\"sync\"\n\t\"sync/atomic\"\n\t\"time\"\n)\n\n// Session is used to wrap a reliable ordered connection and to\n// multiplex it into multiple streams.\ntype Session struct {\n\t// remoteGoAway indicates the remote side does\n\t// not want futher connections. Must be first for alignment.\n\tremoteGoAway int32\n\n\t// localGoAway indicates that we should stop\n\t// accepting futher connections. Must be first for alignment.\n\tlocalGoAway int32\n\n\t// nextStreamID is the next stream we should\n\t// send. This depends if we are a client/server.\n\tnextStreamID uint32\n\n\t// config holds our configuration\n\tconfig *Config\n\n\t// logger is used for our logs\n\tlogger *log.Logger\n\n\t// conn is the underlying connection\n\tconn io.ReadWriteCloser\n\n\t// bufRead is a buffered reader\n\tbufRead *bufio.Reader\n\n\t// pings is used to track inflight pings\n\tpings    map[uint32]chan struct{}\n\tpingID   uint32\n\tpingLock sync.Mutex\n\n\t// streams maps a stream id to a stream, and inflight has an entry\n\t// for any outgoing stream that has not yet been established. Both are\n\t// protected by streamLock.\n\tstreams    map[uint32]*Stream\n\tinflight   map[uint32]struct{}\n\tstreamLock sync.Mutex\n\n\t// synCh acts like a semaphore. It is sized to the AcceptBacklog which\n\t// is assumed to be symmetric between the client and server. This allows\n\t// the client to avoid exceeding the backlog and instead blocks the open.\n\tsynCh chan struct{}\n\n\t// acceptCh is used to pass ready streams to the client\n\tacceptCh chan *Stream\n\n\t// sendCh is used to mark a stream as ready to send,\n\t// or to send a header out directly.\n\tsendCh chan sendReady\n\n\t// recvDoneCh is closed when recv() exits to avoid a race\n\t// between stream registration and stream shutdown\n\trecvDoneCh chan struct{}\n\n\t// shutdown is used to safely close a session\n\tshutdown     bool\n\tshutdownErr  error\n\tshutdownCh   chan struct{}\n\tshutdownLock sync.Mutex\n}\n\n// sendReady is used to either mark a stream as ready\n// or to directly send a header\ntype sendReady struct {\n\tHdr  []byte\n\tBody io.Reader\n\tErr  chan error\n}\n\n// newSession is used to construct a new session\nfunc newSession(config *Config, conn io.ReadWriteCloser, client bool) *Session {\n\tlogger := config.Logger\n\tif logger == nil {\n\t\tlogger = log.New(config.LogOutput, \"\", log.LstdFlags)\n\t}\n\n\ts := &Session{\n\t\tconfig:     config,\n\t\tlogger:     logger,\n\t\tconn:       conn,\n\t\tbufRead:    bufio.NewReader(conn),\n\t\tpings:      make(map[uint32]chan struct{}),\n\t\tstreams:    make(map[uint32]*Stream),\n\t\tinflight:   make(map[uint32]struct{}),\n\t\tsynCh:      make(chan struct{}, config.AcceptBacklog),\n\t\tacceptCh:   make(chan *Stream, config.AcceptBacklog),\n\t\tsendCh:     make(chan sendReady, 64),\n\t\trecvDoneCh: make(chan struct{}),\n\t\tshutdownCh: make(chan struct{}),\n\t}\n\tif client {\n\t\ts.nextStreamID = 1\n\t} else {\n\t\ts.nextStreamID = 2\n\t}\n\tgo s.recv()\n\tgo s.send()\n\tif config.EnableKeepAlive {\n\t\tgo s.keepalive()\n\t}\n\treturn s\n}\n\n// IsClosed does a safe check to see if we have shutdown\nfunc (s *Session) IsClosed() bool {\n\tselect {\n\tcase <-s.shutdownCh:\n\t\treturn true\n\tdefault:\n\t\treturn false\n\t}\n}\n\n// CloseChan returns a read-only channel which is closed as\n// soon as the session is closed.\nfunc (s *Session) CloseChan() <-chan struct{} {\n\treturn s.shutdownCh\n}\n\n// NumStreams returns the number of currently open streams\nfunc (s *Session) NumStreams() int {\n\ts.streamLock.Lock()\n\tnum := len(s.streams)\n\ts.streamLock.Unlock()\n\treturn num\n}\n\n// Open is used to create a new stream as a net.Conn\nfunc (s *Session) Open() (net.Conn, error) {\n\tconn, err := s.OpenStream()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn conn, nil\n}\n\n// OpenStream is used to create a new stream\nfunc (s *Session) OpenStream() (*Stream, error) {\n\tif s.IsClosed() {\n\t\treturn nil, ErrSessionShutdown\n\t}\n\tif atomic.LoadInt32(&s.remoteGoAway) == 1 {\n\t\treturn nil, ErrRemoteGoAway\n\t}\n\n\t// Block if we have too many inflight SYNs\n\tselect {\n\tcase s.synCh <- struct{}{}:\n\tcase <-s.shutdownCh:\n\t\treturn nil, ErrSessionShutdown\n\t}\n\nGET_ID:\n\t// Get an ID, and check for stream exhaustion\n\tid := atomic.LoadUint32(&s.nextStreamID)\n\tif id >= math.MaxUint32-1 {\n\t\treturn nil, ErrStreamsExhausted\n\t}\n\tif !atomic.CompareAndSwapUint32(&s.nextStreamID, id, id+2) {\n\t\tgoto GET_ID\n\t}\n\n\t// Register the stream\n\tstream := newStream(s, id, streamInit)\n\ts.streamLock.Lock()\n\ts.streams[id] = stream\n\ts.inflight[id] = struct{}{}\n\ts.streamLock.Unlock()\n\n\t// Send the window update to create\n\tif err := stream.sendWindowUpdate(); err != nil {\n\t\tselect {\n\t\tcase <-s.synCh:\n\t\tdefault:\n\t\t\ts.logger.Printf(\"[ERR] yamux: aborted stream open without inflight syn semaphore\")\n\t\t}\n\t\treturn nil, err\n\t}\n\treturn stream, nil\n}\n\n// Accept is used to block until the next available stream\n// is ready to be accepted.\nfunc (s *Session) Accept() (net.Conn, error) {\n\tconn, err := s.AcceptStream()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn conn, err\n}\n\n// AcceptStream is used to block until the next available stream\n// is ready to be accepted.\nfunc (s *Session) AcceptStream() (*Stream, error) {\n\tselect {\n\tcase stream := <-s.acceptCh:\n\t\tif err := stream.sendWindowUpdate(); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn stream, nil\n\tcase <-s.shutdownCh:\n\t\treturn nil, s.shutdownErr\n\t}\n}\n\n// Close is used to close the session and all streams.\n// Attempts to send a GoAway before closing the connection.\nfunc (s *Session) Close() error {\n\ts.shutdownLock.Lock()\n\tdefer s.shutdownLock.Unlock()\n\n\tif s.shutdown {\n\t\treturn nil\n\t}\n\ts.shutdown = true\n\tif s.shutdownErr == nil {\n\t\ts.shutdownErr = ErrSessionShutdown\n\t}\n\tclose(s.shutdownCh)\n\ts.conn.Close()\n\t<-s.recvDoneCh\n\n\ts.streamLock.Lock()\n\tdefer s.streamLock.Unlock()\n\tfor _, stream := range s.streams {\n\t\tstream.forceClose()\n\t}\n\treturn nil\n}\n\n// exitErr is used to handle an error that is causing the\n// session to terminate.\nfunc (s *Session) exitErr(err error) {\n\ts.shutdownLock.Lock()\n\tif s.shutdownErr == nil {\n\t\ts.shutdownErr = err\n\t}\n\ts.shutdownLock.Unlock()\n\ts.Close()\n}\n\n// GoAway can be used to prevent accepting further\n// connections. It does not close the underlying conn.\nfunc (s *Session) GoAway() error {\n\treturn s.waitForSend(s.goAway(goAwayNormal), nil)\n}\n\n// goAway is used to send a goAway message\nfunc (s *Session) goAway(reason uint32) header {\n\tatomic.SwapInt32(&s.localGoAway, 1)\n\thdr := header(make([]byte, headerSize))\n\thdr.encode(typeGoAway, 0, 0, reason)\n\treturn hdr\n}\n\n// Ping is used to measure the RTT response time\nfunc (s *Session) Ping() (time.Duration, error) {\n\t// Get a channel for the ping\n\tch := make(chan struct{})\n\n\t// Get a new ping id, mark as pending\n\ts.pingLock.Lock()\n\tid := s.pingID\n\ts.pingID++\n\ts.pings[id] = ch\n\ts.pingLock.Unlock()\n\n\t// Send the ping request\n\thdr := header(make([]byte, headerSize))\n\thdr.encode(typePing, flagSYN, 0, id)\n\tif err := s.waitForSend(hdr, nil); err != nil {\n\t\treturn 0, err\n\t}\n\n\t// Wait for a response\n\tstart := time.Now()\n\tselect {\n\tcase <-ch:\n\tcase <-time.After(s.config.ConnectionWriteTimeout):\n\t\ts.pingLock.Lock()\n\t\tdelete(s.pings, id) // Ignore it if a response comes later.\n\t\ts.pingLock.Unlock()\n\t\treturn 0, ErrTimeout\n\tcase <-s.shutdownCh:\n\t\treturn 0, ErrSessionShutdown\n\t}\n\n\t// Compute the RTT\n\treturn time.Now().Sub(start), nil\n}\n\n// keepalive is a long running goroutine that periodically does\n// a ping to keep the connection alive.\nfunc (s *Session) keepalive() {\n\tfor {\n\t\tselect {\n\t\tcase <-time.After(s.config.KeepAliveInterval):\n\t\t\t_, err := s.Ping()\n\t\t\tif err != nil {\n\t\t\t\tif err != ErrSessionShutdown {\n\t\t\t\t\ts.logger.Printf(\"[ERR] yamux: keepalive failed: %v\", err)\n\t\t\t\t\ts.exitErr(ErrKeepAliveTimeout)\n\t\t\t\t}\n\t\t\t\treturn\n\t\t\t}\n\t\tcase <-s.shutdownCh:\n\t\t\treturn\n\t\t}\n\t}\n}\n\n// waitForSendErr waits to send a header, checking for a potential shutdown\nfunc (s *Session) waitForSend(hdr header, body io.Reader) error {\n\terrCh := make(chan error, 1)\n\treturn s.waitForSendErr(hdr, body, errCh)\n}\n\n// waitForSendErr waits to send a header with optional data, checking for a\n// potential shutdown. Since there's the expectation that sends can happen\n// in a timely manner, we enforce the connection write timeout here.\nfunc (s *Session) waitForSendErr(hdr header, body io.Reader, errCh chan error) error {\n\tt := timerPool.Get()\n\ttimer := t.(*time.Timer)\n\ttimer.Reset(s.config.ConnectionWriteTimeout)\n\tdefer func() {\n\t\ttimer.Stop()\n\t\tselect {\n\t\tcase <-timer.C:\n\t\tdefault:\n\t\t}\n\t\ttimerPool.Put(t)\n\t}()\n\n\tready := sendReady{Hdr: hdr, Body: body, Err: errCh}\n\tselect {\n\tcase s.sendCh <- ready:\n\tcase <-s.shutdownCh:\n\t\treturn ErrSessionShutdown\n\tcase <-timer.C:\n\t\treturn ErrConnectionWriteTimeout\n\t}\n\n\tselect {\n\tcase err := <-errCh:\n\t\treturn err\n\tcase <-s.shutdownCh:\n\t\treturn ErrSessionShutdown\n\tcase <-timer.C:\n\t\treturn ErrConnectionWriteTimeout\n\t}\n}\n\n// sendNoWait does a send without waiting. Since there's the expectation that\n// the send happens right here, we enforce the connection write timeout if we\n// can't queue the header to be sent.\nfunc (s *Session) sendNoWait(hdr header) error {\n\tt := timerPool.Get()\n\ttimer := t.(*time.Timer)\n\ttimer.Reset(s.config.ConnectionWriteTimeout)\n\tdefer func() {\n\t\ttimer.Stop()\n\t\tselect {\n\t\tcase <-timer.C:\n\t\tdefault:\n\t\t}\n\t\ttimerPool.Put(t)\n\t}()\n\n\tselect {\n\tcase s.sendCh <- sendReady{Hdr: hdr}:\n\t\treturn nil\n\tcase <-s.shutdownCh:\n\t\treturn ErrSessionShutdown\n\tcase <-timer.C:\n\t\treturn ErrConnectionWriteTimeout\n\t}\n}\n\n// send is a long running goroutine that sends data\nfunc (s *Session) send() {\n\tfor {\n\t\tselect {\n\t\tcase ready := <-s.sendCh:\n\t\t\t// Send a header if ready\n\t\t\tif ready.Hdr != nil {\n\t\t\t\tsent := 0\n\t\t\t\tfor sent < len(ready.Hdr) {\n\t\t\t\t\tn, err := s.conn.Write(ready.Hdr[sent:])\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\ts.logger.Printf(\"[ERR] yamux: Failed to write header: %v\", err)\n\t\t\t\t\t\tasyncSendErr(ready.Err, err)\n\t\t\t\t\t\ts.exitErr(err)\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tsent += n\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Send data from a body if given\n\t\t\tif ready.Body != nil {\n\t\t\t\t_, err := io.Copy(s.conn, ready.Body)\n\t\t\t\tif err != nil {\n\t\t\t\t\ts.logger.Printf(\"[ERR] yamux: Failed to write body: %v\", err)\n\t\t\t\t\tasyncSendErr(ready.Err, err)\n\t\t\t\t\ts.exitErr(err)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// No error, successful send\n\t\t\tasyncSendErr(ready.Err, nil)\n\t\tcase <-s.shutdownCh:\n\t\t\treturn\n\t\t}\n\t}\n}\n\n// recv is a long running goroutine that accepts new data\nfunc (s *Session) recv() {\n\tif err := s.recvLoop(); err != nil {\n\t\ts.exitErr(err)\n\t}\n}\n\n// Ensure that the index of the handler (typeData/typeWindowUpdate/etc) matches the message type\nvar (\n\thandlers = []func(*Session, header) error{\n\t\ttypeData:         (*Session).handleStreamMessage,\n\t\ttypeWindowUpdate: (*Session).handleStreamMessage,\n\t\ttypePing:         (*Session).handlePing,\n\t\ttypeGoAway:       (*Session).handleGoAway,\n\t}\n)\n\n// recvLoop continues to receive data until a fatal error is encountered\nfunc (s *Session) recvLoop() error {\n\tdefer close(s.recvDoneCh)\n\thdr := header(make([]byte, headerSize))\n\tfor {\n\t\t// Read the header\n\t\tif _, err := io.ReadFull(s.bufRead, hdr); err != nil {\n\t\t\tif err != io.EOF && !strings.Contains(err.Error(), \"closed\") && !strings.Contains(err.Error(), \"reset by peer\") {\n\t\t\t\ts.logger.Printf(\"[ERR] yamux: Failed to read header: %v\", err)\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\n\t\t// Verify the version\n\t\tif hdr.Version() != protoVersion {\n\t\t\ts.logger.Printf(\"[ERR] yamux: Invalid protocol version: %d\", hdr.Version())\n\t\t\treturn ErrInvalidVersion\n\t\t}\n\n\t\tmt := hdr.MsgType()\n\t\tif mt < typeData || mt > typeGoAway {\n\t\t\treturn ErrInvalidMsgType\n\t\t}\n\n\t\tif err := handlers[mt](s, hdr); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n}\n\n// handleStreamMessage handles either a data or window update frame\nfunc (s *Session) handleStreamMessage(hdr header) error {\n\t// Check for a new stream creation\n\tid := hdr.StreamID()\n\tflags := hdr.Flags()\n\tif flags&flagSYN == flagSYN {\n\t\tif err := s.incomingStream(id); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// Get the stream\n\ts.streamLock.Lock()\n\tstream := s.streams[id]\n\ts.streamLock.Unlock()\n\n\t// If we do not have a stream, likely we sent a RST\n\tif stream == nil {\n\t\t// Drain any data on the wire\n\t\tif hdr.MsgType() == typeData && hdr.Length() > 0 {\n\t\t\ts.logger.Printf(\"[WARN] yamux: Discarding data for stream: %d\", id)\n\t\t\tif _, err := io.CopyN(ioutil.Discard, s.bufRead, int64(hdr.Length())); err != nil {\n\t\t\t\ts.logger.Printf(\"[ERR] yamux: Failed to discard data: %v\", err)\n\t\t\t\treturn nil\n\t\t\t}\n\t\t} else {\n\t\t\ts.logger.Printf(\"[WARN] yamux: frame for missing stream: %v\", hdr)\n\t\t}\n\t\treturn nil\n\t}\n\n\t// Check if this is a window update\n\tif hdr.MsgType() == typeWindowUpdate {\n\t\tif err := stream.incrSendWindow(hdr, flags); err != nil {\n\t\t\tif sendErr := s.sendNoWait(s.goAway(goAwayProtoErr)); sendErr != nil {\n\t\t\t\ts.logger.Printf(\"[WARN] yamux: failed to send go away: %v\", sendErr)\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t}\n\n\t// Read the new data\n\tif err := stream.readData(hdr, flags, s.bufRead); err != nil {\n\t\tif sendErr := s.sendNoWait(s.goAway(goAwayProtoErr)); sendErr != nil {\n\t\t\ts.logger.Printf(\"[WARN] yamux: failed to send go away: %v\", sendErr)\n\t\t}\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// handlePing is invokde for a typePing frame\nfunc (s *Session) handlePing(hdr header) error {\n\tflags := hdr.Flags()\n\tpingID := hdr.Length()\n\n\t// Check if this is a query, respond back in a separate context so we\n\t// don't interfere with the receiving thread blocking for the write.\n\tif flags&flagSYN == flagSYN {\n\t\tgo func() {\n\t\t\thdr := header(make([]byte, headerSize))\n\t\t\thdr.encode(typePing, flagACK, 0, pingID)\n\t\t\tif err := s.sendNoWait(hdr); err != nil {\n\t\t\t\ts.logger.Printf(\"[WARN] yamux: failed to send ping reply: %v\", err)\n\t\t\t}\n\t\t}()\n\t\treturn nil\n\t}\n\n\t// Handle a response\n\ts.pingLock.Lock()\n\tch := s.pings[pingID]\n\tif ch != nil {\n\t\tdelete(s.pings, pingID)\n\t\tclose(ch)\n\t}\n\ts.pingLock.Unlock()\n\treturn nil\n}\n\n// handleGoAway is invokde for a typeGoAway frame\nfunc (s *Session) handleGoAway(hdr header) error {\n\tcode := hdr.Length()\n\tswitch code {\n\tcase goAwayNormal:\n\t\tatomic.SwapInt32(&s.remoteGoAway, 1)\n\tcase goAwayProtoErr:\n\t\ts.logger.Printf(\"[ERR] yamux: received protocol error go away\")\n\t\treturn fmt.Errorf(\"yamux protocol error\")\n\tcase goAwayInternalErr:\n\t\ts.logger.Printf(\"[ERR] yamux: received internal error go away\")\n\t\treturn fmt.Errorf(\"remote yamux internal error\")\n\tdefault:\n\t\ts.logger.Printf(\"[ERR] yamux: received unexpected go away\")\n\t\treturn fmt.Errorf(\"unexpected go away received\")\n\t}\n\treturn nil\n}\n\n// incomingStream is used to create a new incoming stream\nfunc (s *Session) incomingStream(id uint32) error {\n\t// Reject immediately if we are doing a go away\n\tif atomic.LoadInt32(&s.localGoAway) == 1 {\n\t\thdr := header(make([]byte, headerSize))\n\t\thdr.encode(typeWindowUpdate, flagRST, id, 0)\n\t\treturn s.sendNoWait(hdr)\n\t}\n\n\t// Allocate a new stream\n\tstream := newStream(s, id, streamSYNReceived)\n\n\ts.streamLock.Lock()\n\tdefer s.streamLock.Unlock()\n\n\t// Check if stream already exists\n\tif _, ok := s.streams[id]; ok {\n\t\ts.logger.Printf(\"[ERR] yamux: duplicate stream declared\")\n\t\tif sendErr := s.sendNoWait(s.goAway(goAwayProtoErr)); sendErr != nil {\n\t\t\ts.logger.Printf(\"[WARN] yamux: failed to send go away: %v\", sendErr)\n\t\t}\n\t\treturn ErrDuplicateStream\n\t}\n\n\t// Register the stream\n\ts.streams[id] = stream\n\n\t// Check if we've exceeded the backlog\n\tselect {\n\tcase s.acceptCh <- stream:\n\t\treturn nil\n\tdefault:\n\t\t// Backlog exceeded! RST the stream\n\t\ts.logger.Printf(\"[WARN] yamux: backlog exceeded, forcing connection reset\")\n\t\tdelete(s.streams, id)\n\t\tstream.sendHdr.encode(typeWindowUpdate, flagRST, id, 0)\n\t\treturn s.sendNoWait(stream.sendHdr)\n\t}\n}\n\n// closeStream is used to close a stream once both sides have\n// issued a close. If there was an in-flight SYN and the stream\n// was not yet established, then this will give the credit back.\nfunc (s *Session) closeStream(id uint32) {\n\ts.streamLock.Lock()\n\tif _, ok := s.inflight[id]; ok {\n\t\tselect {\n\t\tcase <-s.synCh:\n\t\tdefault:\n\t\t\ts.logger.Printf(\"[ERR] yamux: SYN tracking out of sync\")\n\t\t}\n\t}\n\tdelete(s.streams, id)\n\ts.streamLock.Unlock()\n}\n\n// establishStream is used to mark a stream that was in the\n// SYN Sent state as established.\nfunc (s *Session) establishStream(id uint32) {\n\ts.streamLock.Lock()\n\tif _, ok := s.inflight[id]; ok {\n\t\tdelete(s.inflight, id)\n\t} else {\n\t\ts.logger.Printf(\"[ERR] yamux: established stream without inflight SYN (no tracking entry)\")\n\t}\n\tselect {\n\tcase <-s.synCh:\n\tdefault:\n\t\ts.logger.Printf(\"[ERR] yamux: established stream without inflight SYN (didn't have semaphore)\")\n\t}\n\ts.streamLock.Unlock()\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/yamux/stream.go",
    "content": "package yamux\n\nimport (\n\t\"bytes\"\n\t\"io\"\n\t\"sync\"\n\t\"sync/atomic\"\n\t\"time\"\n)\n\ntype streamState int\n\nconst (\n\tstreamInit streamState = iota\n\tstreamSYNSent\n\tstreamSYNReceived\n\tstreamEstablished\n\tstreamLocalClose\n\tstreamRemoteClose\n\tstreamClosed\n\tstreamReset\n)\n\n// Stream is used to represent a logical stream\n// within a session.\ntype Stream struct {\n\trecvWindow uint32\n\tsendWindow uint32\n\n\tid      uint32\n\tsession *Session\n\n\tstate     streamState\n\tstateLock sync.Mutex\n\n\trecvBuf  *bytes.Buffer\n\trecvLock sync.Mutex\n\n\tcontrolHdr     header\n\tcontrolErr     chan error\n\tcontrolHdrLock sync.Mutex\n\n\tsendHdr  header\n\tsendErr  chan error\n\tsendLock sync.Mutex\n\n\trecvNotifyCh chan struct{}\n\tsendNotifyCh chan struct{}\n\n\treadDeadline  atomic.Value // time.Time\n\twriteDeadline atomic.Value // time.Time\n}\n\n// newStream is used to construct a new stream within\n// a given session for an ID\nfunc newStream(session *Session, id uint32, state streamState) *Stream {\n\ts := &Stream{\n\t\tid:           id,\n\t\tsession:      session,\n\t\tstate:        state,\n\t\tcontrolHdr:   header(make([]byte, headerSize)),\n\t\tcontrolErr:   make(chan error, 1),\n\t\tsendHdr:      header(make([]byte, headerSize)),\n\t\tsendErr:      make(chan error, 1),\n\t\trecvWindow:   initialStreamWindow,\n\t\tsendWindow:   initialStreamWindow,\n\t\trecvNotifyCh: make(chan struct{}, 1),\n\t\tsendNotifyCh: make(chan struct{}, 1),\n\t}\n\ts.readDeadline.Store(time.Time{})\n\ts.writeDeadline.Store(time.Time{})\n\treturn s\n}\n\n// Session returns the associated stream session\nfunc (s *Stream) Session() *Session {\n\treturn s.session\n}\n\n// StreamID returns the ID of this stream\nfunc (s *Stream) StreamID() uint32 {\n\treturn s.id\n}\n\n// Read is used to read from the stream\nfunc (s *Stream) Read(b []byte) (n int, err error) {\n\tdefer asyncNotify(s.recvNotifyCh)\nSTART:\n\ts.stateLock.Lock()\n\tswitch s.state {\n\tcase streamLocalClose:\n\t\tfallthrough\n\tcase streamRemoteClose:\n\t\tfallthrough\n\tcase streamClosed:\n\t\ts.recvLock.Lock()\n\t\tif s.recvBuf == nil || s.recvBuf.Len() == 0 {\n\t\t\ts.recvLock.Unlock()\n\t\t\ts.stateLock.Unlock()\n\t\t\treturn 0, io.EOF\n\t\t}\n\t\ts.recvLock.Unlock()\n\tcase streamReset:\n\t\ts.stateLock.Unlock()\n\t\treturn 0, ErrConnectionReset\n\t}\n\ts.stateLock.Unlock()\n\n\t// If there is no data available, block\n\ts.recvLock.Lock()\n\tif s.recvBuf == nil || s.recvBuf.Len() == 0 {\n\t\ts.recvLock.Unlock()\n\t\tgoto WAIT\n\t}\n\n\t// Read any bytes\n\tn, _ = s.recvBuf.Read(b)\n\ts.recvLock.Unlock()\n\n\t// Send a window update potentially\n\terr = s.sendWindowUpdate()\n\treturn n, err\n\nWAIT:\n\tvar timeout <-chan time.Time\n\tvar timer *time.Timer\n\treadDeadline := s.readDeadline.Load().(time.Time)\n\tif !readDeadline.IsZero() {\n\t\tdelay := readDeadline.Sub(time.Now())\n\t\ttimer = time.NewTimer(delay)\n\t\ttimeout = timer.C\n\t}\n\tselect {\n\tcase <-s.recvNotifyCh:\n\t\tif timer != nil {\n\t\t\ttimer.Stop()\n\t\t}\n\t\tgoto START\n\tcase <-timeout:\n\t\treturn 0, ErrTimeout\n\t}\n}\n\n// Write is used to write to the stream\nfunc (s *Stream) Write(b []byte) (n int, err error) {\n\ts.sendLock.Lock()\n\tdefer s.sendLock.Unlock()\n\ttotal := 0\n\tfor total < len(b) {\n\t\tn, err := s.write(b[total:])\n\t\ttotal += n\n\t\tif err != nil {\n\t\t\treturn total, err\n\t\t}\n\t}\n\treturn total, nil\n}\n\n// write is used to write to the stream, may return on\n// a short write.\nfunc (s *Stream) write(b []byte) (n int, err error) {\n\tvar flags uint16\n\tvar max uint32\n\tvar body io.Reader\nSTART:\n\ts.stateLock.Lock()\n\tswitch s.state {\n\tcase streamLocalClose:\n\t\tfallthrough\n\tcase streamClosed:\n\t\ts.stateLock.Unlock()\n\t\treturn 0, ErrStreamClosed\n\tcase streamReset:\n\t\ts.stateLock.Unlock()\n\t\treturn 0, ErrConnectionReset\n\t}\n\ts.stateLock.Unlock()\n\n\t// If there is no data available, block\n\twindow := atomic.LoadUint32(&s.sendWindow)\n\tif window == 0 {\n\t\tgoto WAIT\n\t}\n\n\t// Determine the flags if any\n\tflags = s.sendFlags()\n\n\t// Send up to our send window\n\tmax = min(window, uint32(len(b)))\n\tbody = bytes.NewReader(b[:max])\n\n\t// Send the header\n\ts.sendHdr.encode(typeData, flags, s.id, max)\n\tif err = s.session.waitForSendErr(s.sendHdr, body, s.sendErr); err != nil {\n\t\treturn 0, err\n\t}\n\n\t// Reduce our send window\n\tatomic.AddUint32(&s.sendWindow, ^uint32(max-1))\n\n\t// Unlock\n\treturn int(max), err\n\nWAIT:\n\tvar timeout <-chan time.Time\n\twriteDeadline := s.writeDeadline.Load().(time.Time)\n\tif !writeDeadline.IsZero() {\n\t\tdelay := writeDeadline.Sub(time.Now())\n\t\ttimeout = time.After(delay)\n\t}\n\tselect {\n\tcase <-s.sendNotifyCh:\n\t\tgoto START\n\tcase <-timeout:\n\t\treturn 0, ErrTimeout\n\t}\n\treturn 0, nil\n}\n\n// sendFlags determines any flags that are appropriate\n// based on the current stream state\nfunc (s *Stream) sendFlags() uint16 {\n\ts.stateLock.Lock()\n\tdefer s.stateLock.Unlock()\n\tvar flags uint16\n\tswitch s.state {\n\tcase streamInit:\n\t\tflags |= flagSYN\n\t\ts.state = streamSYNSent\n\tcase streamSYNReceived:\n\t\tflags |= flagACK\n\t\ts.state = streamEstablished\n\t}\n\treturn flags\n}\n\n// sendWindowUpdate potentially sends a window update enabling\n// further writes to take place. Must be invoked with the lock.\nfunc (s *Stream) sendWindowUpdate() error {\n\ts.controlHdrLock.Lock()\n\tdefer s.controlHdrLock.Unlock()\n\n\t// Determine the delta update\n\tmax := s.session.config.MaxStreamWindowSize\n\tvar bufLen uint32\n\ts.recvLock.Lock()\n\tif s.recvBuf != nil {\n\t\tbufLen = uint32(s.recvBuf.Len())\n\t}\n\tdelta := (max - bufLen) - s.recvWindow\n\n\t// Determine the flags if any\n\tflags := s.sendFlags()\n\n\t// Check if we can omit the update\n\tif delta < (max/2) && flags == 0 {\n\t\ts.recvLock.Unlock()\n\t\treturn nil\n\t}\n\n\t// Update our window\n\ts.recvWindow += delta\n\ts.recvLock.Unlock()\n\n\t// Send the header\n\ts.controlHdr.encode(typeWindowUpdate, flags, s.id, delta)\n\tif err := s.session.waitForSendErr(s.controlHdr, nil, s.controlErr); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// sendClose is used to send a FIN\nfunc (s *Stream) sendClose() error {\n\ts.controlHdrLock.Lock()\n\tdefer s.controlHdrLock.Unlock()\n\n\tflags := s.sendFlags()\n\tflags |= flagFIN\n\ts.controlHdr.encode(typeWindowUpdate, flags, s.id, 0)\n\tif err := s.session.waitForSendErr(s.controlHdr, nil, s.controlErr); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// Close is used to close the stream\nfunc (s *Stream) Close() error {\n\tcloseStream := false\n\ts.stateLock.Lock()\n\tswitch s.state {\n\t// Opened means we need to signal a close\n\tcase streamSYNSent:\n\t\tfallthrough\n\tcase streamSYNReceived:\n\t\tfallthrough\n\tcase streamEstablished:\n\t\ts.state = streamLocalClose\n\t\tgoto SEND_CLOSE\n\n\tcase streamLocalClose:\n\tcase streamRemoteClose:\n\t\ts.state = streamClosed\n\t\tcloseStream = true\n\t\tgoto SEND_CLOSE\n\n\tcase streamClosed:\n\tcase streamReset:\n\tdefault:\n\t\tpanic(\"unhandled state\")\n\t}\n\ts.stateLock.Unlock()\n\treturn nil\nSEND_CLOSE:\n\ts.stateLock.Unlock()\n\ts.sendClose()\n\ts.notifyWaiting()\n\tif closeStream {\n\t\ts.session.closeStream(s.id)\n\t}\n\treturn nil\n}\n\n// forceClose is used for when the session is exiting\nfunc (s *Stream) forceClose() {\n\ts.stateLock.Lock()\n\ts.state = streamClosed\n\ts.stateLock.Unlock()\n\ts.notifyWaiting()\n}\n\n// processFlags is used to update the state of the stream\n// based on set flags, if any. Lock must be held\nfunc (s *Stream) processFlags(flags uint16) error {\n\t// Close the stream without holding the state lock\n\tcloseStream := false\n\tdefer func() {\n\t\tif closeStream {\n\t\t\ts.session.closeStream(s.id)\n\t\t}\n\t}()\n\n\ts.stateLock.Lock()\n\tdefer s.stateLock.Unlock()\n\tif flags&flagACK == flagACK {\n\t\tif s.state == streamSYNSent {\n\t\t\ts.state = streamEstablished\n\t\t}\n\t\ts.session.establishStream(s.id)\n\t}\n\tif flags&flagFIN == flagFIN {\n\t\tswitch s.state {\n\t\tcase streamSYNSent:\n\t\t\tfallthrough\n\t\tcase streamSYNReceived:\n\t\t\tfallthrough\n\t\tcase streamEstablished:\n\t\t\ts.state = streamRemoteClose\n\t\t\ts.notifyWaiting()\n\t\tcase streamLocalClose:\n\t\t\ts.state = streamClosed\n\t\t\tcloseStream = true\n\t\t\ts.notifyWaiting()\n\t\tdefault:\n\t\t\ts.session.logger.Printf(\"[ERR] yamux: unexpected FIN flag in state %d\", s.state)\n\t\t\treturn ErrUnexpectedFlag\n\t\t}\n\t}\n\tif flags&flagRST == flagRST {\n\t\ts.state = streamReset\n\t\tcloseStream = true\n\t\ts.notifyWaiting()\n\t}\n\treturn nil\n}\n\n// notifyWaiting notifies all the waiting channels\nfunc (s *Stream) notifyWaiting() {\n\tasyncNotify(s.recvNotifyCh)\n\tasyncNotify(s.sendNotifyCh)\n}\n\n// incrSendWindow updates the size of our send window\nfunc (s *Stream) incrSendWindow(hdr header, flags uint16) error {\n\tif err := s.processFlags(flags); err != nil {\n\t\treturn err\n\t}\n\n\t// Increase window, unblock a sender\n\tatomic.AddUint32(&s.sendWindow, hdr.Length())\n\tasyncNotify(s.sendNotifyCh)\n\treturn nil\n}\n\n// readData is used to handle a data frame\nfunc (s *Stream) readData(hdr header, flags uint16, conn io.Reader) error {\n\tif err := s.processFlags(flags); err != nil {\n\t\treturn err\n\t}\n\n\t// Check that our recv window is not exceeded\n\tlength := hdr.Length()\n\tif length == 0 {\n\t\treturn nil\n\t}\n\n\t// Wrap in a limited reader\n\tconn = &io.LimitedReader{R: conn, N: int64(length)}\n\n\t// Copy into buffer\n\ts.recvLock.Lock()\n\n\tif length > s.recvWindow {\n\t\ts.session.logger.Printf(\"[ERR] yamux: receive window exceeded (stream: %d, remain: %d, recv: %d)\", s.id, s.recvWindow, length)\n\t\treturn ErrRecvWindowExceeded\n\t}\n\n\tif s.recvBuf == nil {\n\t\t// Allocate the receive buffer just-in-time to fit the full data frame.\n\t\t// This way we can read in the whole packet without further allocations.\n\t\ts.recvBuf = bytes.NewBuffer(make([]byte, 0, length))\n\t}\n\tif _, err := io.Copy(s.recvBuf, conn); err != nil {\n\t\ts.session.logger.Printf(\"[ERR] yamux: Failed to read stream data: %v\", err)\n\t\ts.recvLock.Unlock()\n\t\treturn err\n\t}\n\n\t// Decrement the receive window\n\ts.recvWindow -= length\n\ts.recvLock.Unlock()\n\n\t// Unblock any readers\n\tasyncNotify(s.recvNotifyCh)\n\treturn nil\n}\n\n// SetDeadline sets the read and write deadlines\nfunc (s *Stream) SetDeadline(t time.Time) error {\n\tif err := s.SetReadDeadline(t); err != nil {\n\t\treturn err\n\t}\n\tif err := s.SetWriteDeadline(t); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// SetReadDeadline sets the deadline for future Read calls.\nfunc (s *Stream) SetReadDeadline(t time.Time) error {\n\ts.readDeadline.Store(t)\n\treturn nil\n}\n\n// SetWriteDeadline sets the deadline for future Write calls\nfunc (s *Stream) SetWriteDeadline(t time.Time) error {\n\ts.writeDeadline.Store(t)\n\treturn nil\n}\n\n// Shrink is used to compact the amount of buffers utilized\n// This is useful when using Yamux in a connection pool to reduce\n// the idle memory utilization.\nfunc (s *Stream) Shrink() {\n\ts.recvLock.Lock()\n\tif s.recvBuf != nil && s.recvBuf.Len() == 0 {\n\t\ts.recvBuf = nil\n\t}\n\ts.recvLock.Unlock()\n}\n"
  },
  {
    "path": "vendor/github.com/hashicorp/yamux/util.go",
    "content": "package yamux\n\nimport (\n\t\"sync\"\n\t\"time\"\n)\n\nvar (\n\ttimerPool = &sync.Pool{\n\t\tNew: func() interface{} {\n\t\t\ttimer := time.NewTimer(time.Hour * 1e6)\n\t\t\ttimer.Stop()\n\t\t\treturn timer\n\t\t},\n\t}\n)\n\n// asyncSendErr is used to try an async send of an error\nfunc asyncSendErr(ch chan error, err error) {\n\tif ch == nil {\n\t\treturn\n\t}\n\tselect {\n\tcase ch <- err:\n\tdefault:\n\t}\n}\n\n// asyncNotify is used to signal a waiting goroutine\nfunc asyncNotify(ch chan struct{}) {\n\tselect {\n\tcase ch <- struct{}{}:\n\tdefault:\n\t}\n}\n\n// min computes the minimum of two values\nfunc min(a, b uint32) uint32 {\n\tif a < b {\n\t\treturn a\n\t}\n\treturn b\n}\n"
  },
  {
    "path": "vendor/github.com/jmespath/go-jmespath/LICENSE",
    "content": "Copyright 2015 James Saryerwinnie\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n"
  },
  {
    "path": "vendor/github.com/jmespath/go-jmespath/api.go",
    "content": "package jmespath\n\nimport \"strconv\"\n\n// JMESPath is the epresentation of a compiled JMES path query. A JMESPath is\n// safe for concurrent use by multiple goroutines.\ntype JMESPath struct {\n\tast  ASTNode\n\tintr *treeInterpreter\n}\n\n// Compile parses a JMESPath expression and returns, if successful, a JMESPath\n// object that can be used to match against data.\nfunc Compile(expression string) (*JMESPath, error) {\n\tparser := NewParser()\n\tast, err := parser.Parse(expression)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tjmespath := &JMESPath{ast: ast, intr: newInterpreter()}\n\treturn jmespath, nil\n}\n\n// MustCompile is like Compile but panics if the expression cannot be parsed.\n// It simplifies safe initialization of global variables holding compiled\n// JMESPaths.\nfunc MustCompile(expression string) *JMESPath {\n\tjmespath, err := Compile(expression)\n\tif err != nil {\n\t\tpanic(`jmespath: Compile(` + strconv.Quote(expression) + `): ` + err.Error())\n\t}\n\treturn jmespath\n}\n\n// Search evaluates a JMESPath expression against input data and returns the result.\nfunc (jp *JMESPath) Search(data interface{}) (interface{}, error) {\n\treturn jp.intr.Execute(jp.ast, data)\n}\n\n// Search evaluates a JMESPath expression against input data and returns the result.\nfunc Search(expression string, data interface{}) (interface{}, error) {\n\tintr := newInterpreter()\n\tparser := NewParser()\n\tast, err := parser.Parse(expression)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn intr.Execute(ast, data)\n}\n"
  },
  {
    "path": "vendor/github.com/jmespath/go-jmespath/astnodetype_string.go",
    "content": "// generated by stringer -type astNodeType; DO NOT EDIT\n\npackage jmespath\n\nimport \"fmt\"\n\nconst _astNodeType_name = \"ASTEmptyASTComparatorASTCurrentNodeASTExpRefASTFunctionExpressionASTFieldASTFilterProjectionASTFlattenASTIdentityASTIndexASTIndexExpressionASTKeyValPairASTLiteralASTMultiSelectHashASTMultiSelectListASTOrExpressionASTAndExpressionASTNotExpressionASTPipeASTProjectionASTSubexpressionASTSliceASTValueProjection\"\n\nvar _astNodeType_index = [...]uint16{0, 8, 21, 35, 44, 65, 73, 92, 102, 113, 121, 139, 152, 162, 180, 198, 213, 229, 245, 252, 265, 281, 289, 307}\n\nfunc (i astNodeType) String() string {\n\tif i < 0 || i >= astNodeType(len(_astNodeType_index)-1) {\n\t\treturn fmt.Sprintf(\"astNodeType(%d)\", i)\n\t}\n\treturn _astNodeType_name[_astNodeType_index[i]:_astNodeType_index[i+1]]\n}\n"
  },
  {
    "path": "vendor/github.com/jmespath/go-jmespath/functions.go",
    "content": "package jmespath\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"math\"\n\t\"reflect\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\t\"unicode/utf8\"\n)\n\ntype jpFunction func(arguments []interface{}) (interface{}, error)\n\ntype jpType string\n\nconst (\n\tjpUnknown     jpType = \"unknown\"\n\tjpNumber      jpType = \"number\"\n\tjpString      jpType = \"string\"\n\tjpArray       jpType = \"array\"\n\tjpObject      jpType = \"object\"\n\tjpArrayNumber jpType = \"array[number]\"\n\tjpArrayString jpType = \"array[string]\"\n\tjpExpref      jpType = \"expref\"\n\tjpAny         jpType = \"any\"\n)\n\ntype functionEntry struct {\n\tname      string\n\targuments []argSpec\n\thandler   jpFunction\n\thasExpRef bool\n}\n\ntype argSpec struct {\n\ttypes    []jpType\n\tvariadic bool\n}\n\ntype byExprString struct {\n\tintr     *treeInterpreter\n\tnode     ASTNode\n\titems    []interface{}\n\thasError bool\n}\n\nfunc (a *byExprString) Len() int {\n\treturn len(a.items)\n}\nfunc (a *byExprString) Swap(i, j int) {\n\ta.items[i], a.items[j] = a.items[j], a.items[i]\n}\nfunc (a *byExprString) Less(i, j int) bool {\n\tfirst, err := a.intr.Execute(a.node, a.items[i])\n\tif err != nil {\n\t\ta.hasError = true\n\t\t// Return a dummy value.\n\t\treturn true\n\t}\n\tith, ok := first.(string)\n\tif !ok {\n\t\ta.hasError = true\n\t\treturn true\n\t}\n\tsecond, err := a.intr.Execute(a.node, a.items[j])\n\tif err != nil {\n\t\ta.hasError = true\n\t\t// Return a dummy value.\n\t\treturn true\n\t}\n\tjth, ok := second.(string)\n\tif !ok {\n\t\ta.hasError = true\n\t\treturn true\n\t}\n\treturn ith < jth\n}\n\ntype byExprFloat struct {\n\tintr     *treeInterpreter\n\tnode     ASTNode\n\titems    []interface{}\n\thasError bool\n}\n\nfunc (a *byExprFloat) Len() int {\n\treturn len(a.items)\n}\nfunc (a *byExprFloat) Swap(i, j int) {\n\ta.items[i], a.items[j] = a.items[j], a.items[i]\n}\nfunc (a *byExprFloat) Less(i, j int) bool {\n\tfirst, err := a.intr.Execute(a.node, a.items[i])\n\tif err != nil {\n\t\ta.hasError = true\n\t\t// Return a dummy value.\n\t\treturn true\n\t}\n\tith, ok := first.(float64)\n\tif !ok {\n\t\ta.hasError = true\n\t\treturn true\n\t}\n\tsecond, err := a.intr.Execute(a.node, a.items[j])\n\tif err != nil {\n\t\ta.hasError = true\n\t\t// Return a dummy value.\n\t\treturn true\n\t}\n\tjth, ok := second.(float64)\n\tif !ok {\n\t\ta.hasError = true\n\t\treturn true\n\t}\n\treturn ith < jth\n}\n\ntype functionCaller struct {\n\tfunctionTable map[string]functionEntry\n}\n\nfunc newFunctionCaller() *functionCaller {\n\tcaller := &functionCaller{}\n\tcaller.functionTable = map[string]functionEntry{\n\t\t\"length\": {\n\t\t\tname: \"length\",\n\t\t\targuments: []argSpec{\n\t\t\t\t{types: []jpType{jpString, jpArray, jpObject}},\n\t\t\t},\n\t\t\thandler: jpfLength,\n\t\t},\n\t\t\"starts_with\": {\n\t\t\tname: \"starts_with\",\n\t\t\targuments: []argSpec{\n\t\t\t\t{types: []jpType{jpString}},\n\t\t\t\t{types: []jpType{jpString}},\n\t\t\t},\n\t\t\thandler: jpfStartsWith,\n\t\t},\n\t\t\"abs\": {\n\t\t\tname: \"abs\",\n\t\t\targuments: []argSpec{\n\t\t\t\t{types: []jpType{jpNumber}},\n\t\t\t},\n\t\t\thandler: jpfAbs,\n\t\t},\n\t\t\"avg\": {\n\t\t\tname: \"avg\",\n\t\t\targuments: []argSpec{\n\t\t\t\t{types: []jpType{jpArrayNumber}},\n\t\t\t},\n\t\t\thandler: jpfAvg,\n\t\t},\n\t\t\"ceil\": {\n\t\t\tname: \"ceil\",\n\t\t\targuments: []argSpec{\n\t\t\t\t{types: []jpType{jpNumber}},\n\t\t\t},\n\t\t\thandler: jpfCeil,\n\t\t},\n\t\t\"contains\": {\n\t\t\tname: \"contains\",\n\t\t\targuments: []argSpec{\n\t\t\t\t{types: []jpType{jpArray, jpString}},\n\t\t\t\t{types: []jpType{jpAny}},\n\t\t\t},\n\t\t\thandler: jpfContains,\n\t\t},\n\t\t\"ends_with\": {\n\t\t\tname: \"ends_with\",\n\t\t\targuments: []argSpec{\n\t\t\t\t{types: []jpType{jpString}},\n\t\t\t\t{types: []jpType{jpString}},\n\t\t\t},\n\t\t\thandler: jpfEndsWith,\n\t\t},\n\t\t\"floor\": {\n\t\t\tname: \"floor\",\n\t\t\targuments: []argSpec{\n\t\t\t\t{types: []jpType{jpNumber}},\n\t\t\t},\n\t\t\thandler: jpfFloor,\n\t\t},\n\t\t\"map\": {\n\t\t\tname: \"amp\",\n\t\t\targuments: []argSpec{\n\t\t\t\t{types: []jpType{jpExpref}},\n\t\t\t\t{types: []jpType{jpArray}},\n\t\t\t},\n\t\t\thandler:   jpfMap,\n\t\t\thasExpRef: true,\n\t\t},\n\t\t\"max\": {\n\t\t\tname: \"max\",\n\t\t\targuments: []argSpec{\n\t\t\t\t{types: []jpType{jpArrayNumber, jpArrayString}},\n\t\t\t},\n\t\t\thandler: jpfMax,\n\t\t},\n\t\t\"merge\": {\n\t\t\tname: \"merge\",\n\t\t\targuments: []argSpec{\n\t\t\t\t{types: []jpType{jpObject}, variadic: true},\n\t\t\t},\n\t\t\thandler: jpfMerge,\n\t\t},\n\t\t\"max_by\": {\n\t\t\tname: \"max_by\",\n\t\t\targuments: []argSpec{\n\t\t\t\t{types: []jpType{jpArray}},\n\t\t\t\t{types: []jpType{jpExpref}},\n\t\t\t},\n\t\t\thandler:   jpfMaxBy,\n\t\t\thasExpRef: true,\n\t\t},\n\t\t\"sum\": {\n\t\t\tname: \"sum\",\n\t\t\targuments: []argSpec{\n\t\t\t\t{types: []jpType{jpArrayNumber}},\n\t\t\t},\n\t\t\thandler: jpfSum,\n\t\t},\n\t\t\"min\": {\n\t\t\tname: \"min\",\n\t\t\targuments: []argSpec{\n\t\t\t\t{types: []jpType{jpArrayNumber, jpArrayString}},\n\t\t\t},\n\t\t\thandler: jpfMin,\n\t\t},\n\t\t\"min_by\": {\n\t\t\tname: \"min_by\",\n\t\t\targuments: []argSpec{\n\t\t\t\t{types: []jpType{jpArray}},\n\t\t\t\t{types: []jpType{jpExpref}},\n\t\t\t},\n\t\t\thandler:   jpfMinBy,\n\t\t\thasExpRef: true,\n\t\t},\n\t\t\"type\": {\n\t\t\tname: \"type\",\n\t\t\targuments: []argSpec{\n\t\t\t\t{types: []jpType{jpAny}},\n\t\t\t},\n\t\t\thandler: jpfType,\n\t\t},\n\t\t\"keys\": {\n\t\t\tname: \"keys\",\n\t\t\targuments: []argSpec{\n\t\t\t\t{types: []jpType{jpObject}},\n\t\t\t},\n\t\t\thandler: jpfKeys,\n\t\t},\n\t\t\"values\": {\n\t\t\tname: \"values\",\n\t\t\targuments: []argSpec{\n\t\t\t\t{types: []jpType{jpObject}},\n\t\t\t},\n\t\t\thandler: jpfValues,\n\t\t},\n\t\t\"sort\": {\n\t\t\tname: \"sort\",\n\t\t\targuments: []argSpec{\n\t\t\t\t{types: []jpType{jpArrayString, jpArrayNumber}},\n\t\t\t},\n\t\t\thandler: jpfSort,\n\t\t},\n\t\t\"sort_by\": {\n\t\t\tname: \"sort_by\",\n\t\t\targuments: []argSpec{\n\t\t\t\t{types: []jpType{jpArray}},\n\t\t\t\t{types: []jpType{jpExpref}},\n\t\t\t},\n\t\t\thandler:   jpfSortBy,\n\t\t\thasExpRef: true,\n\t\t},\n\t\t\"join\": {\n\t\t\tname: \"join\",\n\t\t\targuments: []argSpec{\n\t\t\t\t{types: []jpType{jpString}},\n\t\t\t\t{types: []jpType{jpArrayString}},\n\t\t\t},\n\t\t\thandler: jpfJoin,\n\t\t},\n\t\t\"reverse\": {\n\t\t\tname: \"reverse\",\n\t\t\targuments: []argSpec{\n\t\t\t\t{types: []jpType{jpArray, jpString}},\n\t\t\t},\n\t\t\thandler: jpfReverse,\n\t\t},\n\t\t\"to_array\": {\n\t\t\tname: \"to_array\",\n\t\t\targuments: []argSpec{\n\t\t\t\t{types: []jpType{jpAny}},\n\t\t\t},\n\t\t\thandler: jpfToArray,\n\t\t},\n\t\t\"to_string\": {\n\t\t\tname: \"to_string\",\n\t\t\targuments: []argSpec{\n\t\t\t\t{types: []jpType{jpAny}},\n\t\t\t},\n\t\t\thandler: jpfToString,\n\t\t},\n\t\t\"to_number\": {\n\t\t\tname: \"to_number\",\n\t\t\targuments: []argSpec{\n\t\t\t\t{types: []jpType{jpAny}},\n\t\t\t},\n\t\t\thandler: jpfToNumber,\n\t\t},\n\t\t\"not_null\": {\n\t\t\tname: \"not_null\",\n\t\t\targuments: []argSpec{\n\t\t\t\t{types: []jpType{jpAny}, variadic: true},\n\t\t\t},\n\t\t\thandler: jpfNotNull,\n\t\t},\n\t}\n\treturn caller\n}\n\nfunc (e *functionEntry) resolveArgs(arguments []interface{}) ([]interface{}, error) {\n\tif len(e.arguments) == 0 {\n\t\treturn arguments, nil\n\t}\n\tif !e.arguments[len(e.arguments)-1].variadic {\n\t\tif len(e.arguments) != len(arguments) {\n\t\t\treturn nil, errors.New(\"incorrect number of args\")\n\t\t}\n\t\tfor i, spec := range e.arguments {\n\t\t\tuserArg := arguments[i]\n\t\t\terr := spec.typeCheck(userArg)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t}\n\t\treturn arguments, nil\n\t}\n\tif len(arguments) < len(e.arguments) {\n\t\treturn nil, errors.New(\"Invalid arity.\")\n\t}\n\treturn arguments, nil\n}\n\nfunc (a *argSpec) typeCheck(arg interface{}) error {\n\tfor _, t := range a.types {\n\t\tswitch t {\n\t\tcase jpNumber:\n\t\t\tif _, ok := arg.(float64); ok {\n\t\t\t\treturn nil\n\t\t\t}\n\t\tcase jpString:\n\t\t\tif _, ok := arg.(string); ok {\n\t\t\t\treturn nil\n\t\t\t}\n\t\tcase jpArray:\n\t\t\tif isSliceType(arg) {\n\t\t\t\treturn nil\n\t\t\t}\n\t\tcase jpObject:\n\t\t\tif _, ok := arg.(map[string]interface{}); ok {\n\t\t\t\treturn nil\n\t\t\t}\n\t\tcase jpArrayNumber:\n\t\t\tif _, ok := toArrayNum(arg); ok {\n\t\t\t\treturn nil\n\t\t\t}\n\t\tcase jpArrayString:\n\t\t\tif _, ok := toArrayStr(arg); ok {\n\t\t\t\treturn nil\n\t\t\t}\n\t\tcase jpAny:\n\t\t\treturn nil\n\t\tcase jpExpref:\n\t\t\tif _, ok := arg.(expRef); ok {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t}\n\t}\n\treturn fmt.Errorf(\"Invalid type for: %v, expected: %#v\", arg, a.types)\n}\n\nfunc (f *functionCaller) CallFunction(name string, arguments []interface{}, intr *treeInterpreter) (interface{}, error) {\n\tentry, ok := f.functionTable[name]\n\tif !ok {\n\t\treturn nil, errors.New(\"unknown function: \" + name)\n\t}\n\tresolvedArgs, err := entry.resolveArgs(arguments)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif entry.hasExpRef {\n\t\tvar extra []interface{}\n\t\textra = append(extra, intr)\n\t\tresolvedArgs = append(extra, resolvedArgs...)\n\t}\n\treturn entry.handler(resolvedArgs)\n}\n\nfunc jpfAbs(arguments []interface{}) (interface{}, error) {\n\tnum := arguments[0].(float64)\n\treturn math.Abs(num), nil\n}\n\nfunc jpfLength(arguments []interface{}) (interface{}, error) {\n\targ := arguments[0]\n\tif c, ok := arg.(string); ok {\n\t\treturn float64(utf8.RuneCountInString(c)), nil\n\t} else if isSliceType(arg) {\n\t\tv := reflect.ValueOf(arg)\n\t\treturn float64(v.Len()), nil\n\t} else if c, ok := arg.(map[string]interface{}); ok {\n\t\treturn float64(len(c)), nil\n\t}\n\treturn nil, errors.New(\"could not compute length()\")\n}\n\nfunc jpfStartsWith(arguments []interface{}) (interface{}, error) {\n\tsearch := arguments[0].(string)\n\tprefix := arguments[1].(string)\n\treturn strings.HasPrefix(search, prefix), nil\n}\n\nfunc jpfAvg(arguments []interface{}) (interface{}, error) {\n\t// We've already type checked the value so we can safely use\n\t// type assertions.\n\targs := arguments[0].([]interface{})\n\tlength := float64(len(args))\n\tnumerator := 0.0\n\tfor _, n := range args {\n\t\tnumerator += n.(float64)\n\t}\n\treturn numerator / length, nil\n}\nfunc jpfCeil(arguments []interface{}) (interface{}, error) {\n\tval := arguments[0].(float64)\n\treturn math.Ceil(val), nil\n}\nfunc jpfContains(arguments []interface{}) (interface{}, error) {\n\tsearch := arguments[0]\n\tel := arguments[1]\n\tif searchStr, ok := search.(string); ok {\n\t\tif elStr, ok := el.(string); ok {\n\t\t\treturn strings.Index(searchStr, elStr) != -1, nil\n\t\t}\n\t\treturn false, nil\n\t}\n\t// Otherwise this is a generic contains for []interface{}\n\tgeneral := search.([]interface{})\n\tfor _, item := range general {\n\t\tif item == el {\n\t\t\treturn true, nil\n\t\t}\n\t}\n\treturn false, nil\n}\nfunc jpfEndsWith(arguments []interface{}) (interface{}, error) {\n\tsearch := arguments[0].(string)\n\tsuffix := arguments[1].(string)\n\treturn strings.HasSuffix(search, suffix), nil\n}\nfunc jpfFloor(arguments []interface{}) (interface{}, error) {\n\tval := arguments[0].(float64)\n\treturn math.Floor(val), nil\n}\nfunc jpfMap(arguments []interface{}) (interface{}, error) {\n\tintr := arguments[0].(*treeInterpreter)\n\texp := arguments[1].(expRef)\n\tnode := exp.ref\n\tarr := arguments[2].([]interface{})\n\tmapped := make([]interface{}, 0, len(arr))\n\tfor _, value := range arr {\n\t\tcurrent, err := intr.Execute(node, value)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tmapped = append(mapped, current)\n\t}\n\treturn mapped, nil\n}\nfunc jpfMax(arguments []interface{}) (interface{}, error) {\n\tif items, ok := toArrayNum(arguments[0]); ok {\n\t\tif len(items) == 0 {\n\t\t\treturn nil, nil\n\t\t}\n\t\tif len(items) == 1 {\n\t\t\treturn items[0], nil\n\t\t}\n\t\tbest := items[0]\n\t\tfor _, item := range items[1:] {\n\t\t\tif item > best {\n\t\t\t\tbest = item\n\t\t\t}\n\t\t}\n\t\treturn best, nil\n\t}\n\t// Otherwise we're dealing with a max() of strings.\n\titems, _ := toArrayStr(arguments[0])\n\tif len(items) == 0 {\n\t\treturn nil, nil\n\t}\n\tif len(items) == 1 {\n\t\treturn items[0], nil\n\t}\n\tbest := items[0]\n\tfor _, item := range items[1:] {\n\t\tif item > best {\n\t\t\tbest = item\n\t\t}\n\t}\n\treturn best, nil\n}\nfunc jpfMerge(arguments []interface{}) (interface{}, error) {\n\tfinal := make(map[string]interface{})\n\tfor _, m := range arguments {\n\t\tmapped := m.(map[string]interface{})\n\t\tfor key, value := range mapped {\n\t\t\tfinal[key] = value\n\t\t}\n\t}\n\treturn final, nil\n}\nfunc jpfMaxBy(arguments []interface{}) (interface{}, error) {\n\tintr := arguments[0].(*treeInterpreter)\n\tarr := arguments[1].([]interface{})\n\texp := arguments[2].(expRef)\n\tnode := exp.ref\n\tif len(arr) == 0 {\n\t\treturn nil, nil\n\t} else if len(arr) == 1 {\n\t\treturn arr[0], nil\n\t}\n\tstart, err := intr.Execute(node, arr[0])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tswitch t := start.(type) {\n\tcase float64:\n\t\tbestVal := t\n\t\tbestItem := arr[0]\n\t\tfor _, item := range arr[1:] {\n\t\t\tresult, err := intr.Execute(node, item)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tcurrent, ok := result.(float64)\n\t\t\tif !ok {\n\t\t\t\treturn nil, errors.New(\"invalid type, must be number\")\n\t\t\t}\n\t\t\tif current > bestVal {\n\t\t\t\tbestVal = current\n\t\t\t\tbestItem = item\n\t\t\t}\n\t\t}\n\t\treturn bestItem, nil\n\tcase string:\n\t\tbestVal := t\n\t\tbestItem := arr[0]\n\t\tfor _, item := range arr[1:] {\n\t\t\tresult, err := intr.Execute(node, item)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tcurrent, ok := result.(string)\n\t\t\tif !ok {\n\t\t\t\treturn nil, errors.New(\"invalid type, must be string\")\n\t\t\t}\n\t\t\tif current > bestVal {\n\t\t\t\tbestVal = current\n\t\t\t\tbestItem = item\n\t\t\t}\n\t\t}\n\t\treturn bestItem, nil\n\tdefault:\n\t\treturn nil, errors.New(\"invalid type, must be number of string\")\n\t}\n}\nfunc jpfSum(arguments []interface{}) (interface{}, error) {\n\titems, _ := toArrayNum(arguments[0])\n\tsum := 0.0\n\tfor _, item := range items {\n\t\tsum += item\n\t}\n\treturn sum, nil\n}\n\nfunc jpfMin(arguments []interface{}) (interface{}, error) {\n\tif items, ok := toArrayNum(arguments[0]); ok {\n\t\tif len(items) == 0 {\n\t\t\treturn nil, nil\n\t\t}\n\t\tif len(items) == 1 {\n\t\t\treturn items[0], nil\n\t\t}\n\t\tbest := items[0]\n\t\tfor _, item := range items[1:] {\n\t\t\tif item < best {\n\t\t\t\tbest = item\n\t\t\t}\n\t\t}\n\t\treturn best, nil\n\t}\n\titems, _ := toArrayStr(arguments[0])\n\tif len(items) == 0 {\n\t\treturn nil, nil\n\t}\n\tif len(items) == 1 {\n\t\treturn items[0], nil\n\t}\n\tbest := items[0]\n\tfor _, item := range items[1:] {\n\t\tif item < best {\n\t\t\tbest = item\n\t\t}\n\t}\n\treturn best, nil\n}\n\nfunc jpfMinBy(arguments []interface{}) (interface{}, error) {\n\tintr := arguments[0].(*treeInterpreter)\n\tarr := arguments[1].([]interface{})\n\texp := arguments[2].(expRef)\n\tnode := exp.ref\n\tif len(arr) == 0 {\n\t\treturn nil, nil\n\t} else if len(arr) == 1 {\n\t\treturn arr[0], nil\n\t}\n\tstart, err := intr.Execute(node, arr[0])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif t, ok := start.(float64); ok {\n\t\tbestVal := t\n\t\tbestItem := arr[0]\n\t\tfor _, item := range arr[1:] {\n\t\t\tresult, err := intr.Execute(node, item)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tcurrent, ok := result.(float64)\n\t\t\tif !ok {\n\t\t\t\treturn nil, errors.New(\"invalid type, must be number\")\n\t\t\t}\n\t\t\tif current < bestVal {\n\t\t\t\tbestVal = current\n\t\t\t\tbestItem = item\n\t\t\t}\n\t\t}\n\t\treturn bestItem, nil\n\t} else if t, ok := start.(string); ok {\n\t\tbestVal := t\n\t\tbestItem := arr[0]\n\t\tfor _, item := range arr[1:] {\n\t\t\tresult, err := intr.Execute(node, item)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tcurrent, ok := result.(string)\n\t\t\tif !ok {\n\t\t\t\treturn nil, errors.New(\"invalid type, must be string\")\n\t\t\t}\n\t\t\tif current < bestVal {\n\t\t\t\tbestVal = current\n\t\t\t\tbestItem = item\n\t\t\t}\n\t\t}\n\t\treturn bestItem, nil\n\t} else {\n\t\treturn nil, errors.New(\"invalid type, must be number of string\")\n\t}\n}\nfunc jpfType(arguments []interface{}) (interface{}, error) {\n\targ := arguments[0]\n\tif _, ok := arg.(float64); ok {\n\t\treturn \"number\", nil\n\t}\n\tif _, ok := arg.(string); ok {\n\t\treturn \"string\", nil\n\t}\n\tif _, ok := arg.([]interface{}); ok {\n\t\treturn \"array\", nil\n\t}\n\tif _, ok := arg.(map[string]interface{}); ok {\n\t\treturn \"object\", nil\n\t}\n\tif arg == nil {\n\t\treturn \"null\", nil\n\t}\n\tif arg == true || arg == false {\n\t\treturn \"boolean\", nil\n\t}\n\treturn nil, errors.New(\"unknown type\")\n}\nfunc jpfKeys(arguments []interface{}) (interface{}, error) {\n\targ := arguments[0].(map[string]interface{})\n\tcollected := make([]interface{}, 0, len(arg))\n\tfor key := range arg {\n\t\tcollected = append(collected, key)\n\t}\n\treturn collected, nil\n}\nfunc jpfValues(arguments []interface{}) (interface{}, error) {\n\targ := arguments[0].(map[string]interface{})\n\tcollected := make([]interface{}, 0, len(arg))\n\tfor _, value := range arg {\n\t\tcollected = append(collected, value)\n\t}\n\treturn collected, nil\n}\nfunc jpfSort(arguments []interface{}) (interface{}, error) {\n\tif items, ok := toArrayNum(arguments[0]); ok {\n\t\td := sort.Float64Slice(items)\n\t\tsort.Stable(d)\n\t\tfinal := make([]interface{}, len(d))\n\t\tfor i, val := range d {\n\t\t\tfinal[i] = val\n\t\t}\n\t\treturn final, nil\n\t}\n\t// Otherwise we're dealing with sort()'ing strings.\n\titems, _ := toArrayStr(arguments[0])\n\td := sort.StringSlice(items)\n\tsort.Stable(d)\n\tfinal := make([]interface{}, len(d))\n\tfor i, val := range d {\n\t\tfinal[i] = val\n\t}\n\treturn final, nil\n}\nfunc jpfSortBy(arguments []interface{}) (interface{}, error) {\n\tintr := arguments[0].(*treeInterpreter)\n\tarr := arguments[1].([]interface{})\n\texp := arguments[2].(expRef)\n\tnode := exp.ref\n\tif len(arr) == 0 {\n\t\treturn arr, nil\n\t} else if len(arr) == 1 {\n\t\treturn arr, nil\n\t}\n\tstart, err := intr.Execute(node, arr[0])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif _, ok := start.(float64); ok {\n\t\tsortable := &byExprFloat{intr, node, arr, false}\n\t\tsort.Stable(sortable)\n\t\tif sortable.hasError {\n\t\t\treturn nil, errors.New(\"error in sort_by comparison\")\n\t\t}\n\t\treturn arr, nil\n\t} else if _, ok := start.(string); ok {\n\t\tsortable := &byExprString{intr, node, arr, false}\n\t\tsort.Stable(sortable)\n\t\tif sortable.hasError {\n\t\t\treturn nil, errors.New(\"error in sort_by comparison\")\n\t\t}\n\t\treturn arr, nil\n\t} else {\n\t\treturn nil, errors.New(\"invalid type, must be number of string\")\n\t}\n}\nfunc jpfJoin(arguments []interface{}) (interface{}, error) {\n\tsep := arguments[0].(string)\n\t// We can't just do arguments[1].([]string), we have to\n\t// manually convert each item to a string.\n\tarrayStr := []string{}\n\tfor _, item := range arguments[1].([]interface{}) {\n\t\tarrayStr = append(arrayStr, item.(string))\n\t}\n\treturn strings.Join(arrayStr, sep), nil\n}\nfunc jpfReverse(arguments []interface{}) (interface{}, error) {\n\tif s, ok := arguments[0].(string); ok {\n\t\tr := []rune(s)\n\t\tfor i, j := 0, len(r)-1; i < len(r)/2; i, j = i+1, j-1 {\n\t\t\tr[i], r[j] = r[j], r[i]\n\t\t}\n\t\treturn string(r), nil\n\t}\n\titems := arguments[0].([]interface{})\n\tlength := len(items)\n\treversed := make([]interface{}, length)\n\tfor i, item := range items {\n\t\treversed[length-(i+1)] = item\n\t}\n\treturn reversed, nil\n}\nfunc jpfToArray(arguments []interface{}) (interface{}, error) {\n\tif _, ok := arguments[0].([]interface{}); ok {\n\t\treturn arguments[0], nil\n\t}\n\treturn arguments[:1:1], nil\n}\nfunc jpfToString(arguments []interface{}) (interface{}, error) {\n\tif v, ok := arguments[0].(string); ok {\n\t\treturn v, nil\n\t}\n\tresult, err := json.Marshal(arguments[0])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn string(result), nil\n}\nfunc jpfToNumber(arguments []interface{}) (interface{}, error) {\n\targ := arguments[0]\n\tif v, ok := arg.(float64); ok {\n\t\treturn v, nil\n\t}\n\tif v, ok := arg.(string); ok {\n\t\tconv, err := strconv.ParseFloat(v, 64)\n\t\tif err != nil {\n\t\t\treturn nil, nil\n\t\t}\n\t\treturn conv, nil\n\t}\n\tif _, ok := arg.([]interface{}); ok {\n\t\treturn nil, nil\n\t}\n\tif _, ok := arg.(map[string]interface{}); ok {\n\t\treturn nil, nil\n\t}\n\tif arg == nil {\n\t\treturn nil, nil\n\t}\n\tif arg == true || arg == false {\n\t\treturn nil, nil\n\t}\n\treturn nil, errors.New(\"unknown type\")\n}\nfunc jpfNotNull(arguments []interface{}) (interface{}, error) {\n\tfor _, arg := range arguments {\n\t\tif arg != nil {\n\t\t\treturn arg, nil\n\t\t}\n\t}\n\treturn nil, nil\n}\n"
  },
  {
    "path": "vendor/github.com/jmespath/go-jmespath/interpreter.go",
    "content": "package jmespath\n\nimport (\n\t\"errors\"\n\t\"reflect\"\n\t\"unicode\"\n\t\"unicode/utf8\"\n)\n\n/* This is a tree based interpreter.  It walks the AST and directly\n   interprets the AST to search through a JSON document.\n*/\n\ntype treeInterpreter struct {\n\tfCall *functionCaller\n}\n\nfunc newInterpreter() *treeInterpreter {\n\tinterpreter := treeInterpreter{}\n\tinterpreter.fCall = newFunctionCaller()\n\treturn &interpreter\n}\n\ntype expRef struct {\n\tref ASTNode\n}\n\n// Execute takes an ASTNode and input data and interprets the AST directly.\n// It will produce the result of applying the JMESPath expression associated\n// with the ASTNode to the input data \"value\".\nfunc (intr *treeInterpreter) Execute(node ASTNode, value interface{}) (interface{}, error) {\n\tswitch node.nodeType {\n\tcase ASTComparator:\n\t\tleft, err := intr.Execute(node.children[0], value)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tright, err := intr.Execute(node.children[1], value)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tswitch node.value {\n\t\tcase tEQ:\n\t\t\treturn objsEqual(left, right), nil\n\t\tcase tNE:\n\t\t\treturn !objsEqual(left, right), nil\n\t\t}\n\t\tleftNum, ok := left.(float64)\n\t\tif !ok {\n\t\t\treturn nil, nil\n\t\t}\n\t\trightNum, ok := right.(float64)\n\t\tif !ok {\n\t\t\treturn nil, nil\n\t\t}\n\t\tswitch node.value {\n\t\tcase tGT:\n\t\t\treturn leftNum > rightNum, nil\n\t\tcase tGTE:\n\t\t\treturn leftNum >= rightNum, nil\n\t\tcase tLT:\n\t\t\treturn leftNum < rightNum, nil\n\t\tcase tLTE:\n\t\t\treturn leftNum <= rightNum, nil\n\t\t}\n\tcase ASTExpRef:\n\t\treturn expRef{ref: node.children[0]}, nil\n\tcase ASTFunctionExpression:\n\t\tresolvedArgs := []interface{}{}\n\t\tfor _, arg := range node.children {\n\t\t\tcurrent, err := intr.Execute(arg, value)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tresolvedArgs = append(resolvedArgs, current)\n\t\t}\n\t\treturn intr.fCall.CallFunction(node.value.(string), resolvedArgs, intr)\n\tcase ASTField:\n\t\tif m, ok := value.(map[string]interface{}); ok {\n\t\t\tkey := node.value.(string)\n\t\t\treturn m[key], nil\n\t\t}\n\t\treturn intr.fieldFromStruct(node.value.(string), value)\n\tcase ASTFilterProjection:\n\t\tleft, err := intr.Execute(node.children[0], value)\n\t\tif err != nil {\n\t\t\treturn nil, nil\n\t\t}\n\t\tsliceType, ok := left.([]interface{})\n\t\tif !ok {\n\t\t\tif isSliceType(left) {\n\t\t\t\treturn intr.filterProjectionWithReflection(node, left)\n\t\t\t}\n\t\t\treturn nil, nil\n\t\t}\n\t\tcompareNode := node.children[2]\n\t\tcollected := []interface{}{}\n\t\tfor _, element := range sliceType {\n\t\t\tresult, err := intr.Execute(compareNode, element)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tif !isFalse(result) {\n\t\t\t\tcurrent, err := intr.Execute(node.children[1], element)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tif current != nil {\n\t\t\t\t\tcollected = append(collected, current)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn collected, nil\n\tcase ASTFlatten:\n\t\tleft, err := intr.Execute(node.children[0], value)\n\t\tif err != nil {\n\t\t\treturn nil, nil\n\t\t}\n\t\tsliceType, ok := left.([]interface{})\n\t\tif !ok {\n\t\t\t// If we can't type convert to []interface{}, there's\n\t\t\t// a chance this could still work via reflection if we're\n\t\t\t// dealing with user provided types.\n\t\t\tif isSliceType(left) {\n\t\t\t\treturn intr.flattenWithReflection(left)\n\t\t\t}\n\t\t\treturn nil, nil\n\t\t}\n\t\tflattened := []interface{}{}\n\t\tfor _, element := range sliceType {\n\t\t\tif elementSlice, ok := element.([]interface{}); ok {\n\t\t\t\tflattened = append(flattened, elementSlice...)\n\t\t\t} else if isSliceType(element) {\n\t\t\t\treflectFlat := []interface{}{}\n\t\t\t\tv := reflect.ValueOf(element)\n\t\t\t\tfor i := 0; i < v.Len(); i++ {\n\t\t\t\t\treflectFlat = append(reflectFlat, v.Index(i).Interface())\n\t\t\t\t}\n\t\t\t\tflattened = append(flattened, reflectFlat...)\n\t\t\t} else {\n\t\t\t\tflattened = append(flattened, element)\n\t\t\t}\n\t\t}\n\t\treturn flattened, nil\n\tcase ASTIdentity, ASTCurrentNode:\n\t\treturn value, nil\n\tcase ASTIndex:\n\t\tif sliceType, ok := value.([]interface{}); ok {\n\t\t\tindex := node.value.(int)\n\t\t\tif index < 0 {\n\t\t\t\tindex += len(sliceType)\n\t\t\t}\n\t\t\tif index < len(sliceType) && index >= 0 {\n\t\t\t\treturn sliceType[index], nil\n\t\t\t}\n\t\t\treturn nil, nil\n\t\t}\n\t\t// Otherwise try via reflection.\n\t\trv := reflect.ValueOf(value)\n\t\tif rv.Kind() == reflect.Slice {\n\t\t\tindex := node.value.(int)\n\t\t\tif index < 0 {\n\t\t\t\tindex += rv.Len()\n\t\t\t}\n\t\t\tif index < rv.Len() && index >= 0 {\n\t\t\t\tv := rv.Index(index)\n\t\t\t\treturn v.Interface(), nil\n\t\t\t}\n\t\t}\n\t\treturn nil, nil\n\tcase ASTKeyValPair:\n\t\treturn intr.Execute(node.children[0], value)\n\tcase ASTLiteral:\n\t\treturn node.value, nil\n\tcase ASTMultiSelectHash:\n\t\tif value == nil {\n\t\t\treturn nil, nil\n\t\t}\n\t\tcollected := make(map[string]interface{})\n\t\tfor _, child := range node.children {\n\t\t\tcurrent, err := intr.Execute(child, value)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tkey := child.value.(string)\n\t\t\tcollected[key] = current\n\t\t}\n\t\treturn collected, nil\n\tcase ASTMultiSelectList:\n\t\tif value == nil {\n\t\t\treturn nil, nil\n\t\t}\n\t\tcollected := []interface{}{}\n\t\tfor _, child := range node.children {\n\t\t\tcurrent, err := intr.Execute(child, value)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tcollected = append(collected, current)\n\t\t}\n\t\treturn collected, nil\n\tcase ASTOrExpression:\n\t\tmatched, err := intr.Execute(node.children[0], value)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif isFalse(matched) {\n\t\t\tmatched, err = intr.Execute(node.children[1], value)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t}\n\t\treturn matched, nil\n\tcase ASTAndExpression:\n\t\tmatched, err := intr.Execute(node.children[0], value)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif isFalse(matched) {\n\t\t\treturn matched, nil\n\t\t}\n\t\treturn intr.Execute(node.children[1], value)\n\tcase ASTNotExpression:\n\t\tmatched, err := intr.Execute(node.children[0], value)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif isFalse(matched) {\n\t\t\treturn true, nil\n\t\t}\n\t\treturn false, nil\n\tcase ASTPipe:\n\t\tresult := value\n\t\tvar err error\n\t\tfor _, child := range node.children {\n\t\t\tresult, err = intr.Execute(child, result)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t}\n\t\treturn result, nil\n\tcase ASTProjection:\n\t\tleft, err := intr.Execute(node.children[0], value)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tsliceType, ok := left.([]interface{})\n\t\tif !ok {\n\t\t\tif isSliceType(left) {\n\t\t\t\treturn intr.projectWithReflection(node, left)\n\t\t\t}\n\t\t\treturn nil, nil\n\t\t}\n\t\tcollected := []interface{}{}\n\t\tvar current interface{}\n\t\tfor _, element := range sliceType {\n\t\t\tcurrent, err = intr.Execute(node.children[1], element)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tif current != nil {\n\t\t\t\tcollected = append(collected, current)\n\t\t\t}\n\t\t}\n\t\treturn collected, nil\n\tcase ASTSubexpression, ASTIndexExpression:\n\t\tleft, err := intr.Execute(node.children[0], value)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn intr.Execute(node.children[1], left)\n\tcase ASTSlice:\n\t\tsliceType, ok := value.([]interface{})\n\t\tif !ok {\n\t\t\tif isSliceType(value) {\n\t\t\t\treturn intr.sliceWithReflection(node, value)\n\t\t\t}\n\t\t\treturn nil, nil\n\t\t}\n\t\tparts := node.value.([]*int)\n\t\tsliceParams := make([]sliceParam, 3)\n\t\tfor i, part := range parts {\n\t\t\tif part != nil {\n\t\t\t\tsliceParams[i].Specified = true\n\t\t\t\tsliceParams[i].N = *part\n\t\t\t}\n\t\t}\n\t\treturn slice(sliceType, sliceParams)\n\tcase ASTValueProjection:\n\t\tleft, err := intr.Execute(node.children[0], value)\n\t\tif err != nil {\n\t\t\treturn nil, nil\n\t\t}\n\t\tmapType, ok := left.(map[string]interface{})\n\t\tif !ok {\n\t\t\treturn nil, nil\n\t\t}\n\t\tvalues := make([]interface{}, len(mapType))\n\t\tfor _, value := range mapType {\n\t\t\tvalues = append(values, value)\n\t\t}\n\t\tcollected := []interface{}{}\n\t\tfor _, element := range values {\n\t\t\tcurrent, err := intr.Execute(node.children[1], element)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tif current != nil {\n\t\t\t\tcollected = append(collected, current)\n\t\t\t}\n\t\t}\n\t\treturn collected, nil\n\t}\n\treturn nil, errors.New(\"Unknown AST node: \" + node.nodeType.String())\n}\n\nfunc (intr *treeInterpreter) fieldFromStruct(key string, value interface{}) (interface{}, error) {\n\trv := reflect.ValueOf(value)\n\tfirst, n := utf8.DecodeRuneInString(key)\n\tfieldName := string(unicode.ToUpper(first)) + key[n:]\n\tif rv.Kind() == reflect.Struct {\n\t\tv := rv.FieldByName(fieldName)\n\t\tif !v.IsValid() {\n\t\t\treturn nil, nil\n\t\t}\n\t\treturn v.Interface(), nil\n\t} else if rv.Kind() == reflect.Ptr {\n\t\t// Handle multiple levels of indirection?\n\t\tif rv.IsNil() {\n\t\t\treturn nil, nil\n\t\t}\n\t\trv = rv.Elem()\n\t\tv := rv.FieldByName(fieldName)\n\t\tif !v.IsValid() {\n\t\t\treturn nil, nil\n\t\t}\n\t\treturn v.Interface(), nil\n\t}\n\treturn nil, nil\n}\n\nfunc (intr *treeInterpreter) flattenWithReflection(value interface{}) (interface{}, error) {\n\tv := reflect.ValueOf(value)\n\tflattened := []interface{}{}\n\tfor i := 0; i < v.Len(); i++ {\n\t\telement := v.Index(i).Interface()\n\t\tif reflect.TypeOf(element).Kind() == reflect.Slice {\n\t\t\t// Then insert the contents of the element\n\t\t\t// slice into the flattened slice,\n\t\t\t// i.e flattened = append(flattened, mySlice...)\n\t\t\telementV := reflect.ValueOf(element)\n\t\t\tfor j := 0; j < elementV.Len(); j++ {\n\t\t\t\tflattened = append(\n\t\t\t\t\tflattened, elementV.Index(j).Interface())\n\t\t\t}\n\t\t} else {\n\t\t\tflattened = append(flattened, element)\n\t\t}\n\t}\n\treturn flattened, nil\n}\n\nfunc (intr *treeInterpreter) sliceWithReflection(node ASTNode, value interface{}) (interface{}, error) {\n\tv := reflect.ValueOf(value)\n\tparts := node.value.([]*int)\n\tsliceParams := make([]sliceParam, 3)\n\tfor i, part := range parts {\n\t\tif part != nil {\n\t\t\tsliceParams[i].Specified = true\n\t\t\tsliceParams[i].N = *part\n\t\t}\n\t}\n\tfinal := []interface{}{}\n\tfor i := 0; i < v.Len(); i++ {\n\t\telement := v.Index(i).Interface()\n\t\tfinal = append(final, element)\n\t}\n\treturn slice(final, sliceParams)\n}\n\nfunc (intr *treeInterpreter) filterProjectionWithReflection(node ASTNode, value interface{}) (interface{}, error) {\n\tcompareNode := node.children[2]\n\tcollected := []interface{}{}\n\tv := reflect.ValueOf(value)\n\tfor i := 0; i < v.Len(); i++ {\n\t\telement := v.Index(i).Interface()\n\t\tresult, err := intr.Execute(compareNode, element)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif !isFalse(result) {\n\t\t\tcurrent, err := intr.Execute(node.children[1], element)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tif current != nil {\n\t\t\t\tcollected = append(collected, current)\n\t\t\t}\n\t\t}\n\t}\n\treturn collected, nil\n}\n\nfunc (intr *treeInterpreter) projectWithReflection(node ASTNode, value interface{}) (interface{}, error) {\n\tcollected := []interface{}{}\n\tv := reflect.ValueOf(value)\n\tfor i := 0; i < v.Len(); i++ {\n\t\telement := v.Index(i).Interface()\n\t\tresult, err := intr.Execute(node.children[1], element)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif result != nil {\n\t\t\tcollected = append(collected, result)\n\t\t}\n\t}\n\treturn collected, nil\n}\n"
  },
  {
    "path": "vendor/github.com/jmespath/go-jmespath/lexer.go",
    "content": "package jmespath\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n\t\"unicode/utf8\"\n)\n\ntype token struct {\n\ttokenType tokType\n\tvalue     string\n\tposition  int\n\tlength    int\n}\n\ntype tokType int\n\nconst eof = -1\n\n// Lexer contains information about the expression being tokenized.\ntype Lexer struct {\n\texpression string       // The expression provided by the user.\n\tcurrentPos int          // The current position in the string.\n\tlastWidth  int          // The width of the current rune.  This\n\tbuf        bytes.Buffer // Internal buffer used for building up values.\n}\n\n// SyntaxError is the main error used whenever a lexing or parsing error occurs.\ntype SyntaxError struct {\n\tmsg        string // Error message displayed to user\n\tExpression string // Expression that generated a SyntaxError\n\tOffset     int    // The location in the string where the error occurred\n}\n\nfunc (e SyntaxError) Error() string {\n\t// In the future, it would be good to underline the specific\n\t// location where the error occurred.\n\treturn \"SyntaxError: \" + e.msg\n}\n\n// HighlightLocation will show where the syntax error occurred.\n// It will place a \"^\" character on a line below the expression\n// at the point where the syntax error occurred.\nfunc (e SyntaxError) HighlightLocation() string {\n\treturn e.Expression + \"\\n\" + strings.Repeat(\" \", e.Offset) + \"^\"\n}\n\n//go:generate stringer -type=tokType\nconst (\n\ttUnknown tokType = iota\n\ttStar\n\ttDot\n\ttFilter\n\ttFlatten\n\ttLparen\n\ttRparen\n\ttLbracket\n\ttRbracket\n\ttLbrace\n\ttRbrace\n\ttOr\n\ttPipe\n\ttNumber\n\ttUnquotedIdentifier\n\ttQuotedIdentifier\n\ttComma\n\ttColon\n\ttLT\n\ttLTE\n\ttGT\n\ttGTE\n\ttEQ\n\ttNE\n\ttJSONLiteral\n\ttStringLiteral\n\ttCurrent\n\ttExpref\n\ttAnd\n\ttNot\n\ttEOF\n)\n\nvar basicTokens = map[rune]tokType{\n\t'.': tDot,\n\t'*': tStar,\n\t',': tComma,\n\t':': tColon,\n\t'{': tLbrace,\n\t'}': tRbrace,\n\t']': tRbracket, // tLbracket not included because it could be \"[]\"\n\t'(': tLparen,\n\t')': tRparen,\n\t'@': tCurrent,\n}\n\n// Bit mask for [a-zA-Z_] shifted down 64 bits to fit in a single uint64.\n// When using this bitmask just be sure to shift the rune down 64 bits\n// before checking against identifierStartBits.\nconst identifierStartBits uint64 = 576460745995190270\n\n// Bit mask for [a-zA-Z0-9], 128 bits -> 2 uint64s.\nvar identifierTrailingBits = [2]uint64{287948901175001088, 576460745995190270}\n\nvar whiteSpace = map[rune]bool{\n\t' ': true, '\\t': true, '\\n': true, '\\r': true,\n}\n\nfunc (t token) String() string {\n\treturn fmt.Sprintf(\"Token{%+v, %s, %d, %d}\",\n\t\tt.tokenType, t.value, t.position, t.length)\n}\n\n// NewLexer creates a new JMESPath lexer.\nfunc NewLexer() *Lexer {\n\tlexer := Lexer{}\n\treturn &lexer\n}\n\nfunc (lexer *Lexer) next() rune {\n\tif lexer.currentPos >= len(lexer.expression) {\n\t\tlexer.lastWidth = 0\n\t\treturn eof\n\t}\n\tr, w := utf8.DecodeRuneInString(lexer.expression[lexer.currentPos:])\n\tlexer.lastWidth = w\n\tlexer.currentPos += w\n\treturn r\n}\n\nfunc (lexer *Lexer) back() {\n\tlexer.currentPos -= lexer.lastWidth\n}\n\nfunc (lexer *Lexer) peek() rune {\n\tt := lexer.next()\n\tlexer.back()\n\treturn t\n}\n\n// tokenize takes an expression and returns corresponding tokens.\nfunc (lexer *Lexer) tokenize(expression string) ([]token, error) {\n\tvar tokens []token\n\tlexer.expression = expression\n\tlexer.currentPos = 0\n\tlexer.lastWidth = 0\nloop:\n\tfor {\n\t\tr := lexer.next()\n\t\tif identifierStartBits&(1<<(uint64(r)-64)) > 0 {\n\t\t\tt := lexer.consumeUnquotedIdentifier()\n\t\t\ttokens = append(tokens, t)\n\t\t} else if val, ok := basicTokens[r]; ok {\n\t\t\t// Basic single char token.\n\t\t\tt := token{\n\t\t\t\ttokenType: val,\n\t\t\t\tvalue:     string(r),\n\t\t\t\tposition:  lexer.currentPos - lexer.lastWidth,\n\t\t\t\tlength:    1,\n\t\t\t}\n\t\t\ttokens = append(tokens, t)\n\t\t} else if r == '-' || (r >= '0' && r <= '9') {\n\t\t\tt := lexer.consumeNumber()\n\t\t\ttokens = append(tokens, t)\n\t\t} else if r == '[' {\n\t\t\tt := lexer.consumeLBracket()\n\t\t\ttokens = append(tokens, t)\n\t\t} else if r == '\"' {\n\t\t\tt, err := lexer.consumeQuotedIdentifier()\n\t\t\tif err != nil {\n\t\t\t\treturn tokens, err\n\t\t\t}\n\t\t\ttokens = append(tokens, t)\n\t\t} else if r == '\\'' {\n\t\t\tt, err := lexer.consumeRawStringLiteral()\n\t\t\tif err != nil {\n\t\t\t\treturn tokens, err\n\t\t\t}\n\t\t\ttokens = append(tokens, t)\n\t\t} else if r == '`' {\n\t\t\tt, err := lexer.consumeLiteral()\n\t\t\tif err != nil {\n\t\t\t\treturn tokens, err\n\t\t\t}\n\t\t\ttokens = append(tokens, t)\n\t\t} else if r == '|' {\n\t\t\tt := lexer.matchOrElse(r, '|', tOr, tPipe)\n\t\t\ttokens = append(tokens, t)\n\t\t} else if r == '<' {\n\t\t\tt := lexer.matchOrElse(r, '=', tLTE, tLT)\n\t\t\ttokens = append(tokens, t)\n\t\t} else if r == '>' {\n\t\t\tt := lexer.matchOrElse(r, '=', tGTE, tGT)\n\t\t\ttokens = append(tokens, t)\n\t\t} else if r == '!' {\n\t\t\tt := lexer.matchOrElse(r, '=', tNE, tNot)\n\t\t\ttokens = append(tokens, t)\n\t\t} else if r == '=' {\n\t\t\tt := lexer.matchOrElse(r, '=', tEQ, tUnknown)\n\t\t\ttokens = append(tokens, t)\n\t\t} else if r == '&' {\n\t\t\tt := lexer.matchOrElse(r, '&', tAnd, tExpref)\n\t\t\ttokens = append(tokens, t)\n\t\t} else if r == eof {\n\t\t\tbreak loop\n\t\t} else if _, ok := whiteSpace[r]; ok {\n\t\t\t// Ignore whitespace\n\t\t} else {\n\t\t\treturn tokens, lexer.syntaxError(fmt.Sprintf(\"Unknown char: %s\", strconv.QuoteRuneToASCII(r)))\n\t\t}\n\t}\n\ttokens = append(tokens, token{tEOF, \"\", len(lexer.expression), 0})\n\treturn tokens, nil\n}\n\n// Consume characters until the ending rune \"r\" is reached.\n// If the end of the expression is reached before seeing the\n// terminating rune \"r\", then an error is returned.\n// If no error occurs then the matching substring is returned.\n// The returned string will not include the ending rune.\nfunc (lexer *Lexer) consumeUntil(end rune) (string, error) {\n\tstart := lexer.currentPos\n\tcurrent := lexer.next()\n\tfor current != end && current != eof {\n\t\tif current == '\\\\' && lexer.peek() != eof {\n\t\t\tlexer.next()\n\t\t}\n\t\tcurrent = lexer.next()\n\t}\n\tif lexer.lastWidth == 0 {\n\t\t// Then we hit an EOF so we never reached the closing\n\t\t// delimiter.\n\t\treturn \"\", SyntaxError{\n\t\t\tmsg:        \"Unclosed delimiter: \" + string(end),\n\t\t\tExpression: lexer.expression,\n\t\t\tOffset:     len(lexer.expression),\n\t\t}\n\t}\n\treturn lexer.expression[start : lexer.currentPos-lexer.lastWidth], nil\n}\n\nfunc (lexer *Lexer) consumeLiteral() (token, error) {\n\tstart := lexer.currentPos\n\tvalue, err := lexer.consumeUntil('`')\n\tif err != nil {\n\t\treturn token{}, err\n\t}\n\tvalue = strings.Replace(value, \"\\\\`\", \"`\", -1)\n\treturn token{\n\t\ttokenType: tJSONLiteral,\n\t\tvalue:     value,\n\t\tposition:  start,\n\t\tlength:    len(value),\n\t}, nil\n}\n\nfunc (lexer *Lexer) consumeRawStringLiteral() (token, error) {\n\tstart := lexer.currentPos\n\tcurrentIndex := start\n\tcurrent := lexer.next()\n\tfor current != '\\'' && lexer.peek() != eof {\n\t\tif current == '\\\\' && lexer.peek() == '\\'' {\n\t\t\tchunk := lexer.expression[currentIndex : lexer.currentPos-1]\n\t\t\tlexer.buf.WriteString(chunk)\n\t\t\tlexer.buf.WriteString(\"'\")\n\t\t\tlexer.next()\n\t\t\tcurrentIndex = lexer.currentPos\n\t\t}\n\t\tcurrent = lexer.next()\n\t}\n\tif lexer.lastWidth == 0 {\n\t\t// Then we hit an EOF so we never reached the closing\n\t\t// delimiter.\n\t\treturn token{}, SyntaxError{\n\t\t\tmsg:        \"Unclosed delimiter: '\",\n\t\t\tExpression: lexer.expression,\n\t\t\tOffset:     len(lexer.expression),\n\t\t}\n\t}\n\tif currentIndex < lexer.currentPos {\n\t\tlexer.buf.WriteString(lexer.expression[currentIndex : lexer.currentPos-1])\n\t}\n\tvalue := lexer.buf.String()\n\t// Reset the buffer so it can reused again.\n\tlexer.buf.Reset()\n\treturn token{\n\t\ttokenType: tStringLiteral,\n\t\tvalue:     value,\n\t\tposition:  start,\n\t\tlength:    len(value),\n\t}, nil\n}\n\nfunc (lexer *Lexer) syntaxError(msg string) SyntaxError {\n\treturn SyntaxError{\n\t\tmsg:        msg,\n\t\tExpression: lexer.expression,\n\t\tOffset:     lexer.currentPos - 1,\n\t}\n}\n\n// Checks for a two char token, otherwise matches a single character\n// token. This is used whenever a two char token overlaps a single\n// char token, e.g. \"||\" -> tPipe, \"|\" -> tOr.\nfunc (lexer *Lexer) matchOrElse(first rune, second rune, matchedType tokType, singleCharType tokType) token {\n\tstart := lexer.currentPos - lexer.lastWidth\n\tnextRune := lexer.next()\n\tvar t token\n\tif nextRune == second {\n\t\tt = token{\n\t\t\ttokenType: matchedType,\n\t\t\tvalue:     string(first) + string(second),\n\t\t\tposition:  start,\n\t\t\tlength:    2,\n\t\t}\n\t} else {\n\t\tlexer.back()\n\t\tt = token{\n\t\t\ttokenType: singleCharType,\n\t\t\tvalue:     string(first),\n\t\t\tposition:  start,\n\t\t\tlength:    1,\n\t\t}\n\t}\n\treturn t\n}\n\nfunc (lexer *Lexer) consumeLBracket() token {\n\t// There's three options here:\n\t// 1. A filter expression \"[?\"\n\t// 2. A flatten operator \"[]\"\n\t// 3. A bare rbracket \"[\"\n\tstart := lexer.currentPos - lexer.lastWidth\n\tnextRune := lexer.next()\n\tvar t token\n\tif nextRune == '?' {\n\t\tt = token{\n\t\t\ttokenType: tFilter,\n\t\t\tvalue:     \"[?\",\n\t\t\tposition:  start,\n\t\t\tlength:    2,\n\t\t}\n\t} else if nextRune == ']' {\n\t\tt = token{\n\t\t\ttokenType: tFlatten,\n\t\t\tvalue:     \"[]\",\n\t\t\tposition:  start,\n\t\t\tlength:    2,\n\t\t}\n\t} else {\n\t\tt = token{\n\t\t\ttokenType: tLbracket,\n\t\t\tvalue:     \"[\",\n\t\t\tposition:  start,\n\t\t\tlength:    1,\n\t\t}\n\t\tlexer.back()\n\t}\n\treturn t\n}\n\nfunc (lexer *Lexer) consumeQuotedIdentifier() (token, error) {\n\tstart := lexer.currentPos\n\tvalue, err := lexer.consumeUntil('\"')\n\tif err != nil {\n\t\treturn token{}, err\n\t}\n\tvar decoded string\n\tasJSON := []byte(\"\\\"\" + value + \"\\\"\")\n\tif err := json.Unmarshal([]byte(asJSON), &decoded); err != nil {\n\t\treturn token{}, err\n\t}\n\treturn token{\n\t\ttokenType: tQuotedIdentifier,\n\t\tvalue:     decoded,\n\t\tposition:  start - 1,\n\t\tlength:    len(decoded),\n\t}, nil\n}\n\nfunc (lexer *Lexer) consumeUnquotedIdentifier() token {\n\t// Consume runes until we reach the end of an unquoted\n\t// identifier.\n\tstart := lexer.currentPos - lexer.lastWidth\n\tfor {\n\t\tr := lexer.next()\n\t\tif r < 0 || r > 128 || identifierTrailingBits[uint64(r)/64]&(1<<(uint64(r)%64)) == 0 {\n\t\t\tlexer.back()\n\t\t\tbreak\n\t\t}\n\t}\n\tvalue := lexer.expression[start:lexer.currentPos]\n\treturn token{\n\t\ttokenType: tUnquotedIdentifier,\n\t\tvalue:     value,\n\t\tposition:  start,\n\t\tlength:    lexer.currentPos - start,\n\t}\n}\n\nfunc (lexer *Lexer) consumeNumber() token {\n\t// Consume runes until we reach something that's not a number.\n\tstart := lexer.currentPos - lexer.lastWidth\n\tfor {\n\t\tr := lexer.next()\n\t\tif r < '0' || r > '9' {\n\t\t\tlexer.back()\n\t\t\tbreak\n\t\t}\n\t}\n\tvalue := lexer.expression[start:lexer.currentPos]\n\treturn token{\n\t\ttokenType: tNumber,\n\t\tvalue:     value,\n\t\tposition:  start,\n\t\tlength:    lexer.currentPos - start,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/jmespath/go-jmespath/parser.go",
    "content": "package jmespath\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n)\n\ntype astNodeType int\n\n//go:generate stringer -type astNodeType\nconst (\n\tASTEmpty astNodeType = iota\n\tASTComparator\n\tASTCurrentNode\n\tASTExpRef\n\tASTFunctionExpression\n\tASTField\n\tASTFilterProjection\n\tASTFlatten\n\tASTIdentity\n\tASTIndex\n\tASTIndexExpression\n\tASTKeyValPair\n\tASTLiteral\n\tASTMultiSelectHash\n\tASTMultiSelectList\n\tASTOrExpression\n\tASTAndExpression\n\tASTNotExpression\n\tASTPipe\n\tASTProjection\n\tASTSubexpression\n\tASTSlice\n\tASTValueProjection\n)\n\n// ASTNode represents the abstract syntax tree of a JMESPath expression.\ntype ASTNode struct {\n\tnodeType astNodeType\n\tvalue    interface{}\n\tchildren []ASTNode\n}\n\nfunc (node ASTNode) String() string {\n\treturn node.PrettyPrint(0)\n}\n\n// PrettyPrint will pretty print the parsed AST.\n// The AST is an implementation detail and this pretty print\n// function is provided as a convenience method to help with\n// debugging.  You should not rely on its output as the internal\n// structure of the AST may change at any time.\nfunc (node ASTNode) PrettyPrint(indent int) string {\n\tspaces := strings.Repeat(\" \", indent)\n\toutput := fmt.Sprintf(\"%s%s {\\n\", spaces, node.nodeType)\n\tnextIndent := indent + 2\n\tif node.value != nil {\n\t\tif converted, ok := node.value.(fmt.Stringer); ok {\n\t\t\t// Account for things like comparator nodes\n\t\t\t// that are enums with a String() method.\n\t\t\toutput += fmt.Sprintf(\"%svalue: %s\\n\", strings.Repeat(\" \", nextIndent), converted.String())\n\t\t} else {\n\t\t\toutput += fmt.Sprintf(\"%svalue: %#v\\n\", strings.Repeat(\" \", nextIndent), node.value)\n\t\t}\n\t}\n\tlastIndex := len(node.children)\n\tif lastIndex > 0 {\n\t\toutput += fmt.Sprintf(\"%schildren: {\\n\", strings.Repeat(\" \", nextIndent))\n\t\tchildIndent := nextIndent + 2\n\t\tfor _, elem := range node.children {\n\t\t\toutput += elem.PrettyPrint(childIndent)\n\t\t}\n\t}\n\toutput += fmt.Sprintf(\"%s}\\n\", spaces)\n\treturn output\n}\n\nvar bindingPowers = map[tokType]int{\n\ttEOF:                0,\n\ttUnquotedIdentifier: 0,\n\ttQuotedIdentifier:   0,\n\ttRbracket:           0,\n\ttRparen:             0,\n\ttComma:              0,\n\ttRbrace:             0,\n\ttNumber:             0,\n\ttCurrent:            0,\n\ttExpref:             0,\n\ttColon:              0,\n\ttPipe:               1,\n\ttOr:                 2,\n\ttAnd:                3,\n\ttEQ:                 5,\n\ttLT:                 5,\n\ttLTE:                5,\n\ttGT:                 5,\n\ttGTE:                5,\n\ttNE:                 5,\n\ttFlatten:            9,\n\ttStar:               20,\n\ttFilter:             21,\n\ttDot:                40,\n\ttNot:                45,\n\ttLbrace:             50,\n\ttLbracket:           55,\n\ttLparen:             60,\n}\n\n// Parser holds state about the current expression being parsed.\ntype Parser struct {\n\texpression string\n\ttokens     []token\n\tindex      int\n}\n\n// NewParser creates a new JMESPath parser.\nfunc NewParser() *Parser {\n\tp := Parser{}\n\treturn &p\n}\n\n// Parse will compile a JMESPath expression.\nfunc (p *Parser) Parse(expression string) (ASTNode, error) {\n\tlexer := NewLexer()\n\tp.expression = expression\n\tp.index = 0\n\ttokens, err := lexer.tokenize(expression)\n\tif err != nil {\n\t\treturn ASTNode{}, err\n\t}\n\tp.tokens = tokens\n\tparsed, err := p.parseExpression(0)\n\tif err != nil {\n\t\treturn ASTNode{}, err\n\t}\n\tif p.current() != tEOF {\n\t\treturn ASTNode{}, p.syntaxError(fmt.Sprintf(\n\t\t\t\"Unexpected token at the end of the expresssion: %s\", p.current()))\n\t}\n\treturn parsed, nil\n}\n\nfunc (p *Parser) parseExpression(bindingPower int) (ASTNode, error) {\n\tvar err error\n\tleftToken := p.lookaheadToken(0)\n\tp.advance()\n\tleftNode, err := p.nud(leftToken)\n\tif err != nil {\n\t\treturn ASTNode{}, err\n\t}\n\tcurrentToken := p.current()\n\tfor bindingPower < bindingPowers[currentToken] {\n\t\tp.advance()\n\t\tleftNode, err = p.led(currentToken, leftNode)\n\t\tif err != nil {\n\t\t\treturn ASTNode{}, err\n\t\t}\n\t\tcurrentToken = p.current()\n\t}\n\treturn leftNode, nil\n}\n\nfunc (p *Parser) parseIndexExpression() (ASTNode, error) {\n\tif p.lookahead(0) == tColon || p.lookahead(1) == tColon {\n\t\treturn p.parseSliceExpression()\n\t}\n\tindexStr := p.lookaheadToken(0).value\n\tparsedInt, err := strconv.Atoi(indexStr)\n\tif err != nil {\n\t\treturn ASTNode{}, err\n\t}\n\tindexNode := ASTNode{nodeType: ASTIndex, value: parsedInt}\n\tp.advance()\n\tif err := p.match(tRbracket); err != nil {\n\t\treturn ASTNode{}, err\n\t}\n\treturn indexNode, nil\n}\n\nfunc (p *Parser) parseSliceExpression() (ASTNode, error) {\n\tparts := []*int{nil, nil, nil}\n\tindex := 0\n\tcurrent := p.current()\n\tfor current != tRbracket && index < 3 {\n\t\tif current == tColon {\n\t\t\tindex++\n\t\t\tp.advance()\n\t\t} else if current == tNumber {\n\t\t\tparsedInt, err := strconv.Atoi(p.lookaheadToken(0).value)\n\t\t\tif err != nil {\n\t\t\t\treturn ASTNode{}, err\n\t\t\t}\n\t\t\tparts[index] = &parsedInt\n\t\t\tp.advance()\n\t\t} else {\n\t\t\treturn ASTNode{}, p.syntaxError(\n\t\t\t\t\"Expected tColon or tNumber\" + \", received: \" + p.current().String())\n\t\t}\n\t\tcurrent = p.current()\n\t}\n\tif err := p.match(tRbracket); err != nil {\n\t\treturn ASTNode{}, err\n\t}\n\treturn ASTNode{\n\t\tnodeType: ASTSlice,\n\t\tvalue:    parts,\n\t}, nil\n}\n\nfunc (p *Parser) match(tokenType tokType) error {\n\tif p.current() == tokenType {\n\t\tp.advance()\n\t\treturn nil\n\t}\n\treturn p.syntaxError(\"Expected \" + tokenType.String() + \", received: \" + p.current().String())\n}\n\nfunc (p *Parser) led(tokenType tokType, node ASTNode) (ASTNode, error) {\n\tswitch tokenType {\n\tcase tDot:\n\t\tif p.current() != tStar {\n\t\t\tright, err := p.parseDotRHS(bindingPowers[tDot])\n\t\t\treturn ASTNode{\n\t\t\t\tnodeType: ASTSubexpression,\n\t\t\t\tchildren: []ASTNode{node, right},\n\t\t\t}, err\n\t\t}\n\t\tp.advance()\n\t\tright, err := p.parseProjectionRHS(bindingPowers[tDot])\n\t\treturn ASTNode{\n\t\t\tnodeType: ASTValueProjection,\n\t\t\tchildren: []ASTNode{node, right},\n\t\t}, err\n\tcase tPipe:\n\t\tright, err := p.parseExpression(bindingPowers[tPipe])\n\t\treturn ASTNode{nodeType: ASTPipe, children: []ASTNode{node, right}}, err\n\tcase tOr:\n\t\tright, err := p.parseExpression(bindingPowers[tOr])\n\t\treturn ASTNode{nodeType: ASTOrExpression, children: []ASTNode{node, right}}, err\n\tcase tAnd:\n\t\tright, err := p.parseExpression(bindingPowers[tAnd])\n\t\treturn ASTNode{nodeType: ASTAndExpression, children: []ASTNode{node, right}}, err\n\tcase tLparen:\n\t\tname := node.value\n\t\tvar args []ASTNode\n\t\tfor p.current() != tRparen {\n\t\t\texpression, err := p.parseExpression(0)\n\t\t\tif err != nil {\n\t\t\t\treturn ASTNode{}, err\n\t\t\t}\n\t\t\tif p.current() == tComma {\n\t\t\t\tif err := p.match(tComma); err != nil {\n\t\t\t\t\treturn ASTNode{}, err\n\t\t\t\t}\n\t\t\t}\n\t\t\targs = append(args, expression)\n\t\t}\n\t\tif err := p.match(tRparen); err != nil {\n\t\t\treturn ASTNode{}, err\n\t\t}\n\t\treturn ASTNode{\n\t\t\tnodeType: ASTFunctionExpression,\n\t\t\tvalue:    name,\n\t\t\tchildren: args,\n\t\t}, nil\n\tcase tFilter:\n\t\treturn p.parseFilter(node)\n\tcase tFlatten:\n\t\tleft := ASTNode{nodeType: ASTFlatten, children: []ASTNode{node}}\n\t\tright, err := p.parseProjectionRHS(bindingPowers[tFlatten])\n\t\treturn ASTNode{\n\t\t\tnodeType: ASTProjection,\n\t\t\tchildren: []ASTNode{left, right},\n\t\t}, err\n\tcase tEQ, tNE, tGT, tGTE, tLT, tLTE:\n\t\tright, err := p.parseExpression(bindingPowers[tokenType])\n\t\tif err != nil {\n\t\t\treturn ASTNode{}, err\n\t\t}\n\t\treturn ASTNode{\n\t\t\tnodeType: ASTComparator,\n\t\t\tvalue:    tokenType,\n\t\t\tchildren: []ASTNode{node, right},\n\t\t}, nil\n\tcase tLbracket:\n\t\ttokenType := p.current()\n\t\tvar right ASTNode\n\t\tvar err error\n\t\tif tokenType == tNumber || tokenType == tColon {\n\t\t\tright, err = p.parseIndexExpression()\n\t\t\tif err != nil {\n\t\t\t\treturn ASTNode{}, err\n\t\t\t}\n\t\t\treturn p.projectIfSlice(node, right)\n\t\t}\n\t\t// Otherwise this is a projection.\n\t\tif err := p.match(tStar); err != nil {\n\t\t\treturn ASTNode{}, err\n\t\t}\n\t\tif err := p.match(tRbracket); err != nil {\n\t\t\treturn ASTNode{}, err\n\t\t}\n\t\tright, err = p.parseProjectionRHS(bindingPowers[tStar])\n\t\tif err != nil {\n\t\t\treturn ASTNode{}, err\n\t\t}\n\t\treturn ASTNode{\n\t\t\tnodeType: ASTProjection,\n\t\t\tchildren: []ASTNode{node, right},\n\t\t}, nil\n\t}\n\treturn ASTNode{}, p.syntaxError(\"Unexpected token: \" + tokenType.String())\n}\n\nfunc (p *Parser) nud(token token) (ASTNode, error) {\n\tswitch token.tokenType {\n\tcase tJSONLiteral:\n\t\tvar parsed interface{}\n\t\terr := json.Unmarshal([]byte(token.value), &parsed)\n\t\tif err != nil {\n\t\t\treturn ASTNode{}, err\n\t\t}\n\t\treturn ASTNode{nodeType: ASTLiteral, value: parsed}, nil\n\tcase tStringLiteral:\n\t\treturn ASTNode{nodeType: ASTLiteral, value: token.value}, nil\n\tcase tUnquotedIdentifier:\n\t\treturn ASTNode{\n\t\t\tnodeType: ASTField,\n\t\t\tvalue:    token.value,\n\t\t}, nil\n\tcase tQuotedIdentifier:\n\t\tnode := ASTNode{nodeType: ASTField, value: token.value}\n\t\tif p.current() == tLparen {\n\t\t\treturn ASTNode{}, p.syntaxErrorToken(\"Can't have quoted identifier as function name.\", token)\n\t\t}\n\t\treturn node, nil\n\tcase tStar:\n\t\tleft := ASTNode{nodeType: ASTIdentity}\n\t\tvar right ASTNode\n\t\tvar err error\n\t\tif p.current() == tRbracket {\n\t\t\tright = ASTNode{nodeType: ASTIdentity}\n\t\t} else {\n\t\t\tright, err = p.parseProjectionRHS(bindingPowers[tStar])\n\t\t}\n\t\treturn ASTNode{nodeType: ASTValueProjection, children: []ASTNode{left, right}}, err\n\tcase tFilter:\n\t\treturn p.parseFilter(ASTNode{nodeType: ASTIdentity})\n\tcase tLbrace:\n\t\treturn p.parseMultiSelectHash()\n\tcase tFlatten:\n\t\tleft := ASTNode{\n\t\t\tnodeType: ASTFlatten,\n\t\t\tchildren: []ASTNode{{nodeType: ASTIdentity}},\n\t\t}\n\t\tright, err := p.parseProjectionRHS(bindingPowers[tFlatten])\n\t\tif err != nil {\n\t\t\treturn ASTNode{}, err\n\t\t}\n\t\treturn ASTNode{nodeType: ASTProjection, children: []ASTNode{left, right}}, nil\n\tcase tLbracket:\n\t\ttokenType := p.current()\n\t\t//var right ASTNode\n\t\tif tokenType == tNumber || tokenType == tColon {\n\t\t\tright, err := p.parseIndexExpression()\n\t\t\tif err != nil {\n\t\t\t\treturn ASTNode{}, nil\n\t\t\t}\n\t\t\treturn p.projectIfSlice(ASTNode{nodeType: ASTIdentity}, right)\n\t\t} else if tokenType == tStar && p.lookahead(1) == tRbracket {\n\t\t\tp.advance()\n\t\t\tp.advance()\n\t\t\tright, err := p.parseProjectionRHS(bindingPowers[tStar])\n\t\t\tif err != nil {\n\t\t\t\treturn ASTNode{}, err\n\t\t\t}\n\t\t\treturn ASTNode{\n\t\t\t\tnodeType: ASTProjection,\n\t\t\t\tchildren: []ASTNode{{nodeType: ASTIdentity}, right},\n\t\t\t}, nil\n\t\t} else {\n\t\t\treturn p.parseMultiSelectList()\n\t\t}\n\tcase tCurrent:\n\t\treturn ASTNode{nodeType: ASTCurrentNode}, nil\n\tcase tExpref:\n\t\texpression, err := p.parseExpression(bindingPowers[tExpref])\n\t\tif err != nil {\n\t\t\treturn ASTNode{}, err\n\t\t}\n\t\treturn ASTNode{nodeType: ASTExpRef, children: []ASTNode{expression}}, nil\n\tcase tNot:\n\t\texpression, err := p.parseExpression(bindingPowers[tNot])\n\t\tif err != nil {\n\t\t\treturn ASTNode{}, err\n\t\t}\n\t\treturn ASTNode{nodeType: ASTNotExpression, children: []ASTNode{expression}}, nil\n\tcase tLparen:\n\t\texpression, err := p.parseExpression(0)\n\t\tif err != nil {\n\t\t\treturn ASTNode{}, err\n\t\t}\n\t\tif err := p.match(tRparen); err != nil {\n\t\t\treturn ASTNode{}, err\n\t\t}\n\t\treturn expression, nil\n\tcase tEOF:\n\t\treturn ASTNode{}, p.syntaxErrorToken(\"Incomplete expression\", token)\n\t}\n\n\treturn ASTNode{}, p.syntaxErrorToken(\"Invalid token: \"+token.tokenType.String(), token)\n}\n\nfunc (p *Parser) parseMultiSelectList() (ASTNode, error) {\n\tvar expressions []ASTNode\n\tfor {\n\t\texpression, err := p.parseExpression(0)\n\t\tif err != nil {\n\t\t\treturn ASTNode{}, err\n\t\t}\n\t\texpressions = append(expressions, expression)\n\t\tif p.current() == tRbracket {\n\t\t\tbreak\n\t\t}\n\t\terr = p.match(tComma)\n\t\tif err != nil {\n\t\t\treturn ASTNode{}, err\n\t\t}\n\t}\n\terr := p.match(tRbracket)\n\tif err != nil {\n\t\treturn ASTNode{}, err\n\t}\n\treturn ASTNode{\n\t\tnodeType: ASTMultiSelectList,\n\t\tchildren: expressions,\n\t}, nil\n}\n\nfunc (p *Parser) parseMultiSelectHash() (ASTNode, error) {\n\tvar children []ASTNode\n\tfor {\n\t\tkeyToken := p.lookaheadToken(0)\n\t\tif err := p.match(tUnquotedIdentifier); err != nil {\n\t\t\tif err := p.match(tQuotedIdentifier); err != nil {\n\t\t\t\treturn ASTNode{}, p.syntaxError(\"Expected tQuotedIdentifier or tUnquotedIdentifier\")\n\t\t\t}\n\t\t}\n\t\tkeyName := keyToken.value\n\t\terr := p.match(tColon)\n\t\tif err != nil {\n\t\t\treturn ASTNode{}, err\n\t\t}\n\t\tvalue, err := p.parseExpression(0)\n\t\tif err != nil {\n\t\t\treturn ASTNode{}, err\n\t\t}\n\t\tnode := ASTNode{\n\t\t\tnodeType: ASTKeyValPair,\n\t\t\tvalue:    keyName,\n\t\t\tchildren: []ASTNode{value},\n\t\t}\n\t\tchildren = append(children, node)\n\t\tif p.current() == tComma {\n\t\t\terr := p.match(tComma)\n\t\t\tif err != nil {\n\t\t\t\treturn ASTNode{}, nil\n\t\t\t}\n\t\t} else if p.current() == tRbrace {\n\t\t\terr := p.match(tRbrace)\n\t\t\tif err != nil {\n\t\t\t\treturn ASTNode{}, nil\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\t}\n\treturn ASTNode{\n\t\tnodeType: ASTMultiSelectHash,\n\t\tchildren: children,\n\t}, nil\n}\n\nfunc (p *Parser) projectIfSlice(left ASTNode, right ASTNode) (ASTNode, error) {\n\tindexExpr := ASTNode{\n\t\tnodeType: ASTIndexExpression,\n\t\tchildren: []ASTNode{left, right},\n\t}\n\tif right.nodeType == ASTSlice {\n\t\tright, err := p.parseProjectionRHS(bindingPowers[tStar])\n\t\treturn ASTNode{\n\t\t\tnodeType: ASTProjection,\n\t\t\tchildren: []ASTNode{indexExpr, right},\n\t\t}, err\n\t}\n\treturn indexExpr, nil\n}\nfunc (p *Parser) parseFilter(node ASTNode) (ASTNode, error) {\n\tvar right, condition ASTNode\n\tvar err error\n\tcondition, err = p.parseExpression(0)\n\tif err != nil {\n\t\treturn ASTNode{}, err\n\t}\n\tif err := p.match(tRbracket); err != nil {\n\t\treturn ASTNode{}, err\n\t}\n\tif p.current() == tFlatten {\n\t\tright = ASTNode{nodeType: ASTIdentity}\n\t} else {\n\t\tright, err = p.parseProjectionRHS(bindingPowers[tFilter])\n\t\tif err != nil {\n\t\t\treturn ASTNode{}, err\n\t\t}\n\t}\n\n\treturn ASTNode{\n\t\tnodeType: ASTFilterProjection,\n\t\tchildren: []ASTNode{node, right, condition},\n\t}, nil\n}\n\nfunc (p *Parser) parseDotRHS(bindingPower int) (ASTNode, error) {\n\tlookahead := p.current()\n\tif tokensOneOf([]tokType{tQuotedIdentifier, tUnquotedIdentifier, tStar}, lookahead) {\n\t\treturn p.parseExpression(bindingPower)\n\t} else if lookahead == tLbracket {\n\t\tif err := p.match(tLbracket); err != nil {\n\t\t\treturn ASTNode{}, err\n\t\t}\n\t\treturn p.parseMultiSelectList()\n\t} else if lookahead == tLbrace {\n\t\tif err := p.match(tLbrace); err != nil {\n\t\t\treturn ASTNode{}, err\n\t\t}\n\t\treturn p.parseMultiSelectHash()\n\t}\n\treturn ASTNode{}, p.syntaxError(\"Expected identifier, lbracket, or lbrace\")\n}\n\nfunc (p *Parser) parseProjectionRHS(bindingPower int) (ASTNode, error) {\n\tcurrent := p.current()\n\tif bindingPowers[current] < 10 {\n\t\treturn ASTNode{nodeType: ASTIdentity}, nil\n\t} else if current == tLbracket {\n\t\treturn p.parseExpression(bindingPower)\n\t} else if current == tFilter {\n\t\treturn p.parseExpression(bindingPower)\n\t} else if current == tDot {\n\t\terr := p.match(tDot)\n\t\tif err != nil {\n\t\t\treturn ASTNode{}, err\n\t\t}\n\t\treturn p.parseDotRHS(bindingPower)\n\t} else {\n\t\treturn ASTNode{}, p.syntaxError(\"Error\")\n\t}\n}\n\nfunc (p *Parser) lookahead(number int) tokType {\n\treturn p.lookaheadToken(number).tokenType\n}\n\nfunc (p *Parser) current() tokType {\n\treturn p.lookahead(0)\n}\n\nfunc (p *Parser) lookaheadToken(number int) token {\n\treturn p.tokens[p.index+number]\n}\n\nfunc (p *Parser) advance() {\n\tp.index++\n}\n\nfunc tokensOneOf(elements []tokType, token tokType) bool {\n\tfor _, elem := range elements {\n\t\tif elem == token {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\nfunc (p *Parser) syntaxError(msg string) SyntaxError {\n\treturn SyntaxError{\n\t\tmsg:        msg,\n\t\tExpression: p.expression,\n\t\tOffset:     p.lookaheadToken(0).position,\n\t}\n}\n\n// Create a SyntaxError based on the provided token.\n// This differs from syntaxError() which creates a SyntaxError\n// based on the current lookahead token.\nfunc (p *Parser) syntaxErrorToken(msg string, t token) SyntaxError {\n\treturn SyntaxError{\n\t\tmsg:        msg,\n\t\tExpression: p.expression,\n\t\tOffset:     t.position,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/jmespath/go-jmespath/toktype_string.go",
    "content": "// generated by stringer -type=tokType; DO NOT EDIT\n\npackage jmespath\n\nimport \"fmt\"\n\nconst _tokType_name = \"tUnknowntStartDottFiltertFlattentLparentRparentLbrackettRbrackettLbracetRbracetOrtPipetNumbertUnquotedIdentifiertQuotedIdentifiertCommatColontLTtLTEtGTtGTEtEQtNEtJSONLiteraltStringLiteraltCurrenttExpreftAndtNottEOF\"\n\nvar _tokType_index = [...]uint8{0, 8, 13, 17, 24, 32, 39, 46, 55, 64, 71, 78, 81, 86, 93, 112, 129, 135, 141, 144, 148, 151, 155, 158, 161, 173, 187, 195, 202, 206, 210, 214}\n\nfunc (i tokType) String() string {\n\tif i < 0 || i >= tokType(len(_tokType_index)-1) {\n\t\treturn fmt.Sprintf(\"tokType(%d)\", i)\n\t}\n\treturn _tokType_name[_tokType_index[i]:_tokType_index[i+1]]\n}\n"
  },
  {
    "path": "vendor/github.com/jmespath/go-jmespath/util.go",
    "content": "package jmespath\n\nimport (\n\t\"errors\"\n\t\"reflect\"\n)\n\n// IsFalse determines if an object is false based on the JMESPath spec.\n// JMESPath defines false values to be any of:\n// - An empty string array, or hash.\n// - The boolean value false.\n// - nil\nfunc isFalse(value interface{}) bool {\n\tswitch v := value.(type) {\n\tcase bool:\n\t\treturn !v\n\tcase []interface{}:\n\t\treturn len(v) == 0\n\tcase map[string]interface{}:\n\t\treturn len(v) == 0\n\tcase string:\n\t\treturn len(v) == 0\n\tcase nil:\n\t\treturn true\n\t}\n\t// Try the reflection cases before returning false.\n\trv := reflect.ValueOf(value)\n\tswitch rv.Kind() {\n\tcase reflect.Struct:\n\t\t// A struct type will never be false, even if\n\t\t// all of its values are the zero type.\n\t\treturn false\n\tcase reflect.Slice, reflect.Map:\n\t\treturn rv.Len() == 0\n\tcase reflect.Ptr:\n\t\tif rv.IsNil() {\n\t\t\treturn true\n\t\t}\n\t\t// If it's a pointer type, we'll try to deref the pointer\n\t\t// and evaluate the pointer value for isFalse.\n\t\telement := rv.Elem()\n\t\treturn isFalse(element.Interface())\n\t}\n\treturn false\n}\n\n// ObjsEqual is a generic object equality check.\n// It will take two arbitrary objects and recursively determine\n// if they are equal.\nfunc objsEqual(left interface{}, right interface{}) bool {\n\treturn reflect.DeepEqual(left, right)\n}\n\n// SliceParam refers to a single part of a slice.\n// A slice consists of a start, a stop, and a step, similar to\n// python slices.\ntype sliceParam struct {\n\tN         int\n\tSpecified bool\n}\n\n// Slice supports [start:stop:step] style slicing that's supported in JMESPath.\nfunc slice(slice []interface{}, parts []sliceParam) ([]interface{}, error) {\n\tcomputed, err := computeSliceParams(len(slice), parts)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tstart, stop, step := computed[0], computed[1], computed[2]\n\tresult := []interface{}{}\n\tif step > 0 {\n\t\tfor i := start; i < stop; i += step {\n\t\t\tresult = append(result, slice[i])\n\t\t}\n\t} else {\n\t\tfor i := start; i > stop; i += step {\n\t\t\tresult = append(result, slice[i])\n\t\t}\n\t}\n\treturn result, nil\n}\n\nfunc computeSliceParams(length int, parts []sliceParam) ([]int, error) {\n\tvar start, stop, step int\n\tif !parts[2].Specified {\n\t\tstep = 1\n\t} else if parts[2].N == 0 {\n\t\treturn nil, errors.New(\"Invalid slice, step cannot be 0\")\n\t} else {\n\t\tstep = parts[2].N\n\t}\n\tvar stepValueNegative bool\n\tif step < 0 {\n\t\tstepValueNegative = true\n\t} else {\n\t\tstepValueNegative = false\n\t}\n\n\tif !parts[0].Specified {\n\t\tif stepValueNegative {\n\t\t\tstart = length - 1\n\t\t} else {\n\t\t\tstart = 0\n\t\t}\n\t} else {\n\t\tstart = capSlice(length, parts[0].N, step)\n\t}\n\n\tif !parts[1].Specified {\n\t\tif stepValueNegative {\n\t\t\tstop = -1\n\t\t} else {\n\t\t\tstop = length\n\t\t}\n\t} else {\n\t\tstop = capSlice(length, parts[1].N, step)\n\t}\n\treturn []int{start, stop, step}, nil\n}\n\nfunc capSlice(length int, actual int, step int) int {\n\tif actual < 0 {\n\t\tactual += length\n\t\tif actual < 0 {\n\t\t\tif step < 0 {\n\t\t\t\tactual = -1\n\t\t\t} else {\n\t\t\t\tactual = 0\n\t\t\t}\n\t\t}\n\t} else if actual >= length {\n\t\tif step < 0 {\n\t\t\tactual = length - 1\n\t\t} else {\n\t\t\tactual = length\n\t\t}\n\t}\n\treturn actual\n}\n\n// ToArrayNum converts an empty interface type to a slice of float64.\n// If any element in the array cannot be converted, then nil is returned\n// along with a second value of false.\nfunc toArrayNum(data interface{}) ([]float64, bool) {\n\t// Is there a better way to do this with reflect?\n\tif d, ok := data.([]interface{}); ok {\n\t\tresult := make([]float64, len(d))\n\t\tfor i, el := range d {\n\t\t\titem, ok := el.(float64)\n\t\t\tif !ok {\n\t\t\t\treturn nil, false\n\t\t\t}\n\t\t\tresult[i] = item\n\t\t}\n\t\treturn result, true\n\t}\n\treturn nil, false\n}\n\n// ToArrayStr converts an empty interface type to a slice of strings.\n// If any element in the array cannot be converted, then nil is returned\n// along with a second value of false.  If the input data could be entirely\n// converted, then the converted data, along with a second value of true,\n// will be returned.\nfunc toArrayStr(data interface{}) ([]string, bool) {\n\t// Is there a better way to do this with reflect?\n\tif d, ok := data.([]interface{}); ok {\n\t\tresult := make([]string, len(d))\n\t\tfor i, el := range d {\n\t\t\titem, ok := el.(string)\n\t\t\tif !ok {\n\t\t\t\treturn nil, false\n\t\t\t}\n\t\t\tresult[i] = item\n\t\t}\n\t\treturn result, true\n\t}\n\treturn nil, false\n}\n\nfunc isSliceType(v interface{}) bool {\n\tif v == nil {\n\t\treturn false\n\t}\n\treturn reflect.TypeOf(v).Kind() == reflect.Slice\n}\n"
  },
  {
    "path": "vendor/github.com/mattn/go-colorable/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2016 Yasuhiro Matsumoto\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "vendor/github.com/mattn/go-colorable/colorable_appengine.go",
    "content": "// +build appengine\n\npackage colorable\n\nimport (\n\t\"io\"\n\t\"os\"\n\n\t_ \"github.com/mattn/go-isatty\"\n)\n\n// NewColorable return new instance of Writer which handle escape sequence.\nfunc NewColorable(file *os.File) io.Writer {\n\tif file == nil {\n\t\tpanic(\"nil passed instead of *os.File to NewColorable()\")\n\t}\n\n\treturn file\n}\n\n// NewColorableStdout return new instance of Writer which handle escape sequence for stdout.\nfunc NewColorableStdout() io.Writer {\n\treturn os.Stdout\n}\n\n// NewColorableStderr return new instance of Writer which handle escape sequence for stderr.\nfunc NewColorableStderr() io.Writer {\n\treturn os.Stderr\n}\n"
  },
  {
    "path": "vendor/github.com/mattn/go-colorable/colorable_others.go",
    "content": "// +build !windows\n// +build !appengine\n\npackage colorable\n\nimport (\n\t\"io\"\n\t\"os\"\n\n\t_ \"github.com/mattn/go-isatty\"\n)\n\n// NewColorable return new instance of Writer which handle escape sequence.\nfunc NewColorable(file *os.File) io.Writer {\n\tif file == nil {\n\t\tpanic(\"nil passed instead of *os.File to NewColorable()\")\n\t}\n\n\treturn file\n}\n\n// NewColorableStdout return new instance of Writer which handle escape sequence for stdout.\nfunc NewColorableStdout() io.Writer {\n\treturn os.Stdout\n}\n\n// NewColorableStderr return new instance of Writer which handle escape sequence for stderr.\nfunc NewColorableStderr() io.Writer {\n\treturn os.Stderr\n}\n"
  },
  {
    "path": "vendor/github.com/mattn/go-colorable/colorable_windows.go",
    "content": "// +build windows\n// +build !appengine\n\npackage colorable\n\nimport (\n\t\"bytes\"\n\t\"io\"\n\t\"math\"\n\t\"os\"\n\t\"strconv\"\n\t\"strings\"\n\t\"syscall\"\n\t\"unsafe\"\n\n\t\"github.com/mattn/go-isatty\"\n)\n\nconst (\n\tforegroundBlue      = 0x1\n\tforegroundGreen     = 0x2\n\tforegroundRed       = 0x4\n\tforegroundIntensity = 0x8\n\tforegroundMask      = (foregroundRed | foregroundBlue | foregroundGreen | foregroundIntensity)\n\tbackgroundBlue      = 0x10\n\tbackgroundGreen     = 0x20\n\tbackgroundRed       = 0x40\n\tbackgroundIntensity = 0x80\n\tbackgroundMask      = (backgroundRed | backgroundBlue | backgroundGreen | backgroundIntensity)\n)\n\nconst (\n\tgenericRead  = 0x80000000\n\tgenericWrite = 0x40000000\n)\n\nconst (\n\tconsoleTextmodeBuffer = 0x1\n)\n\ntype wchar uint16\ntype short int16\ntype dword uint32\ntype word uint16\n\ntype coord struct {\n\tx short\n\ty short\n}\n\ntype smallRect struct {\n\tleft   short\n\ttop    short\n\tright  short\n\tbottom short\n}\n\ntype consoleScreenBufferInfo struct {\n\tsize              coord\n\tcursorPosition    coord\n\tattributes        word\n\twindow            smallRect\n\tmaximumWindowSize coord\n}\n\ntype consoleCursorInfo struct {\n\tsize    dword\n\tvisible int32\n}\n\nvar (\n\tkernel32                       = syscall.NewLazyDLL(\"kernel32.dll\")\n\tprocGetConsoleScreenBufferInfo = kernel32.NewProc(\"GetConsoleScreenBufferInfo\")\n\tprocSetConsoleTextAttribute    = kernel32.NewProc(\"SetConsoleTextAttribute\")\n\tprocSetConsoleCursorPosition   = kernel32.NewProc(\"SetConsoleCursorPosition\")\n\tprocFillConsoleOutputCharacter = kernel32.NewProc(\"FillConsoleOutputCharacterW\")\n\tprocFillConsoleOutputAttribute = kernel32.NewProc(\"FillConsoleOutputAttribute\")\n\tprocGetConsoleCursorInfo       = kernel32.NewProc(\"GetConsoleCursorInfo\")\n\tprocSetConsoleCursorInfo       = kernel32.NewProc(\"SetConsoleCursorInfo\")\n\tprocSetConsoleTitle            = kernel32.NewProc(\"SetConsoleTitleW\")\n\tprocCreateConsoleScreenBuffer  = kernel32.NewProc(\"CreateConsoleScreenBuffer\")\n)\n\n// Writer provide colorable Writer to the console\ntype Writer struct {\n\tout       io.Writer\n\thandle    syscall.Handle\n\talthandle syscall.Handle\n\toldattr   word\n\toldpos    coord\n\trest      bytes.Buffer\n}\n\n// NewColorable return new instance of Writer which handle escape sequence from File.\nfunc NewColorable(file *os.File) io.Writer {\n\tif file == nil {\n\t\tpanic(\"nil passed instead of *os.File to NewColorable()\")\n\t}\n\n\tif isatty.IsTerminal(file.Fd()) {\n\t\tvar csbi consoleScreenBufferInfo\n\t\thandle := syscall.Handle(file.Fd())\n\t\tprocGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi)))\n\t\treturn &Writer{out: file, handle: handle, oldattr: csbi.attributes, oldpos: coord{0, 0}}\n\t}\n\treturn file\n}\n\n// NewColorableStdout return new instance of Writer which handle escape sequence for stdout.\nfunc NewColorableStdout() io.Writer {\n\treturn NewColorable(os.Stdout)\n}\n\n// NewColorableStderr return new instance of Writer which handle escape sequence for stderr.\nfunc NewColorableStderr() io.Writer {\n\treturn NewColorable(os.Stderr)\n}\n\nvar color256 = map[int]int{\n\t0:   0x000000,\n\t1:   0x800000,\n\t2:   0x008000,\n\t3:   0x808000,\n\t4:   0x000080,\n\t5:   0x800080,\n\t6:   0x008080,\n\t7:   0xc0c0c0,\n\t8:   0x808080,\n\t9:   0xff0000,\n\t10:  0x00ff00,\n\t11:  0xffff00,\n\t12:  0x0000ff,\n\t13:  0xff00ff,\n\t14:  0x00ffff,\n\t15:  0xffffff,\n\t16:  0x000000,\n\t17:  0x00005f,\n\t18:  0x000087,\n\t19:  0x0000af,\n\t20:  0x0000d7,\n\t21:  0x0000ff,\n\t22:  0x005f00,\n\t23:  0x005f5f,\n\t24:  0x005f87,\n\t25:  0x005faf,\n\t26:  0x005fd7,\n\t27:  0x005fff,\n\t28:  0x008700,\n\t29:  0x00875f,\n\t30:  0x008787,\n\t31:  0x0087af,\n\t32:  0x0087d7,\n\t33:  0x0087ff,\n\t34:  0x00af00,\n\t35:  0x00af5f,\n\t36:  0x00af87,\n\t37:  0x00afaf,\n\t38:  0x00afd7,\n\t39:  0x00afff,\n\t40:  0x00d700,\n\t41:  0x00d75f,\n\t42:  0x00d787,\n\t43:  0x00d7af,\n\t44:  0x00d7d7,\n\t45:  0x00d7ff,\n\t46:  0x00ff00,\n\t47:  0x00ff5f,\n\t48:  0x00ff87,\n\t49:  0x00ffaf,\n\t50:  0x00ffd7,\n\t51:  0x00ffff,\n\t52:  0x5f0000,\n\t53:  0x5f005f,\n\t54:  0x5f0087,\n\t55:  0x5f00af,\n\t56:  0x5f00d7,\n\t57:  0x5f00ff,\n\t58:  0x5f5f00,\n\t59:  0x5f5f5f,\n\t60:  0x5f5f87,\n\t61:  0x5f5faf,\n\t62:  0x5f5fd7,\n\t63:  0x5f5fff,\n\t64:  0x5f8700,\n\t65:  0x5f875f,\n\t66:  0x5f8787,\n\t67:  0x5f87af,\n\t68:  0x5f87d7,\n\t69:  0x5f87ff,\n\t70:  0x5faf00,\n\t71:  0x5faf5f,\n\t72:  0x5faf87,\n\t73:  0x5fafaf,\n\t74:  0x5fafd7,\n\t75:  0x5fafff,\n\t76:  0x5fd700,\n\t77:  0x5fd75f,\n\t78:  0x5fd787,\n\t79:  0x5fd7af,\n\t80:  0x5fd7d7,\n\t81:  0x5fd7ff,\n\t82:  0x5fff00,\n\t83:  0x5fff5f,\n\t84:  0x5fff87,\n\t85:  0x5fffaf,\n\t86:  0x5fffd7,\n\t87:  0x5fffff,\n\t88:  0x870000,\n\t89:  0x87005f,\n\t90:  0x870087,\n\t91:  0x8700af,\n\t92:  0x8700d7,\n\t93:  0x8700ff,\n\t94:  0x875f00,\n\t95:  0x875f5f,\n\t96:  0x875f87,\n\t97:  0x875faf,\n\t98:  0x875fd7,\n\t99:  0x875fff,\n\t100: 0x878700,\n\t101: 0x87875f,\n\t102: 0x878787,\n\t103: 0x8787af,\n\t104: 0x8787d7,\n\t105: 0x8787ff,\n\t106: 0x87af00,\n\t107: 0x87af5f,\n\t108: 0x87af87,\n\t109: 0x87afaf,\n\t110: 0x87afd7,\n\t111: 0x87afff,\n\t112: 0x87d700,\n\t113: 0x87d75f,\n\t114: 0x87d787,\n\t115: 0x87d7af,\n\t116: 0x87d7d7,\n\t117: 0x87d7ff,\n\t118: 0x87ff00,\n\t119: 0x87ff5f,\n\t120: 0x87ff87,\n\t121: 0x87ffaf,\n\t122: 0x87ffd7,\n\t123: 0x87ffff,\n\t124: 0xaf0000,\n\t125: 0xaf005f,\n\t126: 0xaf0087,\n\t127: 0xaf00af,\n\t128: 0xaf00d7,\n\t129: 0xaf00ff,\n\t130: 0xaf5f00,\n\t131: 0xaf5f5f,\n\t132: 0xaf5f87,\n\t133: 0xaf5faf,\n\t134: 0xaf5fd7,\n\t135: 0xaf5fff,\n\t136: 0xaf8700,\n\t137: 0xaf875f,\n\t138: 0xaf8787,\n\t139: 0xaf87af,\n\t140: 0xaf87d7,\n\t141: 0xaf87ff,\n\t142: 0xafaf00,\n\t143: 0xafaf5f,\n\t144: 0xafaf87,\n\t145: 0xafafaf,\n\t146: 0xafafd7,\n\t147: 0xafafff,\n\t148: 0xafd700,\n\t149: 0xafd75f,\n\t150: 0xafd787,\n\t151: 0xafd7af,\n\t152: 0xafd7d7,\n\t153: 0xafd7ff,\n\t154: 0xafff00,\n\t155: 0xafff5f,\n\t156: 0xafff87,\n\t157: 0xafffaf,\n\t158: 0xafffd7,\n\t159: 0xafffff,\n\t160: 0xd70000,\n\t161: 0xd7005f,\n\t162: 0xd70087,\n\t163: 0xd700af,\n\t164: 0xd700d7,\n\t165: 0xd700ff,\n\t166: 0xd75f00,\n\t167: 0xd75f5f,\n\t168: 0xd75f87,\n\t169: 0xd75faf,\n\t170: 0xd75fd7,\n\t171: 0xd75fff,\n\t172: 0xd78700,\n\t173: 0xd7875f,\n\t174: 0xd78787,\n\t175: 0xd787af,\n\t176: 0xd787d7,\n\t177: 0xd787ff,\n\t178: 0xd7af00,\n\t179: 0xd7af5f,\n\t180: 0xd7af87,\n\t181: 0xd7afaf,\n\t182: 0xd7afd7,\n\t183: 0xd7afff,\n\t184: 0xd7d700,\n\t185: 0xd7d75f,\n\t186: 0xd7d787,\n\t187: 0xd7d7af,\n\t188: 0xd7d7d7,\n\t189: 0xd7d7ff,\n\t190: 0xd7ff00,\n\t191: 0xd7ff5f,\n\t192: 0xd7ff87,\n\t193: 0xd7ffaf,\n\t194: 0xd7ffd7,\n\t195: 0xd7ffff,\n\t196: 0xff0000,\n\t197: 0xff005f,\n\t198: 0xff0087,\n\t199: 0xff00af,\n\t200: 0xff00d7,\n\t201: 0xff00ff,\n\t202: 0xff5f00,\n\t203: 0xff5f5f,\n\t204: 0xff5f87,\n\t205: 0xff5faf,\n\t206: 0xff5fd7,\n\t207: 0xff5fff,\n\t208: 0xff8700,\n\t209: 0xff875f,\n\t210: 0xff8787,\n\t211: 0xff87af,\n\t212: 0xff87d7,\n\t213: 0xff87ff,\n\t214: 0xffaf00,\n\t215: 0xffaf5f,\n\t216: 0xffaf87,\n\t217: 0xffafaf,\n\t218: 0xffafd7,\n\t219: 0xffafff,\n\t220: 0xffd700,\n\t221: 0xffd75f,\n\t222: 0xffd787,\n\t223: 0xffd7af,\n\t224: 0xffd7d7,\n\t225: 0xffd7ff,\n\t226: 0xffff00,\n\t227: 0xffff5f,\n\t228: 0xffff87,\n\t229: 0xffffaf,\n\t230: 0xffffd7,\n\t231: 0xffffff,\n\t232: 0x080808,\n\t233: 0x121212,\n\t234: 0x1c1c1c,\n\t235: 0x262626,\n\t236: 0x303030,\n\t237: 0x3a3a3a,\n\t238: 0x444444,\n\t239: 0x4e4e4e,\n\t240: 0x585858,\n\t241: 0x626262,\n\t242: 0x6c6c6c,\n\t243: 0x767676,\n\t244: 0x808080,\n\t245: 0x8a8a8a,\n\t246: 0x949494,\n\t247: 0x9e9e9e,\n\t248: 0xa8a8a8,\n\t249: 0xb2b2b2,\n\t250: 0xbcbcbc,\n\t251: 0xc6c6c6,\n\t252: 0xd0d0d0,\n\t253: 0xdadada,\n\t254: 0xe4e4e4,\n\t255: 0xeeeeee,\n}\n\n// `\\033]0;TITLESTR\\007`\nfunc doTitleSequence(er *bytes.Reader) error {\n\tvar c byte\n\tvar err error\n\n\tc, err = er.ReadByte()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif c != '0' && c != '2' {\n\t\treturn nil\n\t}\n\tc, err = er.ReadByte()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif c != ';' {\n\t\treturn nil\n\t}\n\ttitle := make([]byte, 0, 80)\n\tfor {\n\t\tc, err = er.ReadByte()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif c == 0x07 || c == '\\n' {\n\t\t\tbreak\n\t\t}\n\t\ttitle = append(title, c)\n\t}\n\tif len(title) > 0 {\n\t\ttitle8, err := syscall.UTF16PtrFromString(string(title))\n\t\tif err == nil {\n\t\t\tprocSetConsoleTitle.Call(uintptr(unsafe.Pointer(title8)))\n\t\t}\n\t}\n\treturn nil\n}\n\n// Write write data on console\nfunc (w *Writer) Write(data []byte) (n int, err error) {\n\tvar csbi consoleScreenBufferInfo\n\tprocGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi)))\n\n\thandle := w.handle\n\n\tvar er *bytes.Reader\n\tif w.rest.Len() > 0 {\n\t\tvar rest bytes.Buffer\n\t\tw.rest.WriteTo(&rest)\n\t\tw.rest.Reset()\n\t\trest.Write(data)\n\t\ter = bytes.NewReader(rest.Bytes())\n\t} else {\n\t\ter = bytes.NewReader(data)\n\t}\n\tvar bw [1]byte\nloop:\n\tfor {\n\t\tc1, err := er.ReadByte()\n\t\tif err != nil {\n\t\t\tbreak loop\n\t\t}\n\t\tif c1 != 0x1b {\n\t\t\tbw[0] = c1\n\t\t\tw.out.Write(bw[:])\n\t\t\tcontinue\n\t\t}\n\t\tc2, err := er.ReadByte()\n\t\tif err != nil {\n\t\t\tbreak loop\n\t\t}\n\n\t\tswitch c2 {\n\t\tcase '>':\n\t\t\tcontinue\n\t\tcase ']':\n\t\t\tw.rest.WriteByte(c1)\n\t\t\tw.rest.WriteByte(c2)\n\t\t\ter.WriteTo(&w.rest)\n\t\t\tif bytes.IndexByte(w.rest.Bytes(), 0x07) == -1 {\n\t\t\t\tbreak loop\n\t\t\t}\n\t\t\ter = bytes.NewReader(w.rest.Bytes()[2:])\n\t\t\terr := doTitleSequence(er)\n\t\t\tif err != nil {\n\t\t\t\tbreak loop\n\t\t\t}\n\t\t\tw.rest.Reset()\n\t\t\tcontinue\n\t\t// https://github.com/mattn/go-colorable/issues/27\n\t\tcase '7':\n\t\t\tprocGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi)))\n\t\t\tw.oldpos = csbi.cursorPosition\n\t\t\tcontinue\n\t\tcase '8':\n\t\t\tprocSetConsoleCursorPosition.Call(uintptr(handle), *(*uintptr)(unsafe.Pointer(&w.oldpos)))\n\t\t\tcontinue\n\t\tcase 0x5b:\n\t\t\t// execute part after switch\n\t\tdefault:\n\t\t\tcontinue\n\t\t}\n\n\t\tw.rest.WriteByte(c1)\n\t\tw.rest.WriteByte(c2)\n\t\ter.WriteTo(&w.rest)\n\n\t\tvar buf bytes.Buffer\n\t\tvar m byte\n\t\tfor i, c := range w.rest.Bytes()[2:] {\n\t\t\tif ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || c == '@' {\n\t\t\t\tm = c\n\t\t\t\ter = bytes.NewReader(w.rest.Bytes()[2+i+1:])\n\t\t\t\tw.rest.Reset()\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tbuf.Write([]byte(string(c)))\n\t\t}\n\t\tif m == 0 {\n\t\t\tbreak loop\n\t\t}\n\n\t\tswitch m {\n\t\tcase 'A':\n\t\t\tn, err = strconv.Atoi(buf.String())\n\t\t\tif err != nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tprocGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi)))\n\t\t\tcsbi.cursorPosition.y -= short(n)\n\t\t\tprocSetConsoleCursorPosition.Call(uintptr(handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition)))\n\t\tcase 'B':\n\t\t\tn, err = strconv.Atoi(buf.String())\n\t\t\tif err != nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tprocGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi)))\n\t\t\tcsbi.cursorPosition.y += short(n)\n\t\t\tprocSetConsoleCursorPosition.Call(uintptr(handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition)))\n\t\tcase 'C':\n\t\t\tn, err = strconv.Atoi(buf.String())\n\t\t\tif err != nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tprocGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi)))\n\t\t\tcsbi.cursorPosition.x += short(n)\n\t\t\tprocSetConsoleCursorPosition.Call(uintptr(handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition)))\n\t\tcase 'D':\n\t\t\tn, err = strconv.Atoi(buf.String())\n\t\t\tif err != nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tprocGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi)))\n\t\t\tcsbi.cursorPosition.x -= short(n)\n\t\t\tif csbi.cursorPosition.x < 0 {\n\t\t\t\tcsbi.cursorPosition.x = 0\n\t\t\t}\n\t\t\tprocSetConsoleCursorPosition.Call(uintptr(handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition)))\n\t\tcase 'E':\n\t\t\tn, err = strconv.Atoi(buf.String())\n\t\t\tif err != nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tprocGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi)))\n\t\t\tcsbi.cursorPosition.x = 0\n\t\t\tcsbi.cursorPosition.y += short(n)\n\t\t\tprocSetConsoleCursorPosition.Call(uintptr(handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition)))\n\t\tcase 'F':\n\t\t\tn, err = strconv.Atoi(buf.String())\n\t\t\tif err != nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tprocGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi)))\n\t\t\tcsbi.cursorPosition.x = 0\n\t\t\tcsbi.cursorPosition.y -= short(n)\n\t\t\tprocSetConsoleCursorPosition.Call(uintptr(handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition)))\n\t\tcase 'G':\n\t\t\tn, err = strconv.Atoi(buf.String())\n\t\t\tif err != nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tprocGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi)))\n\t\t\tcsbi.cursorPosition.x = short(n - 1)\n\t\t\tprocSetConsoleCursorPosition.Call(uintptr(handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition)))\n\t\tcase 'H', 'f':\n\t\t\tprocGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi)))\n\t\t\tif buf.Len() > 0 {\n\t\t\t\ttoken := strings.Split(buf.String(), \";\")\n\t\t\t\tswitch len(token) {\n\t\t\t\tcase 1:\n\t\t\t\t\tn1, err := strconv.Atoi(token[0])\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tcsbi.cursorPosition.y = short(n1 - 1)\n\t\t\t\tcase 2:\n\t\t\t\t\tn1, err := strconv.Atoi(token[0])\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tn2, err := strconv.Atoi(token[1])\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tcsbi.cursorPosition.x = short(n2 - 1)\n\t\t\t\t\tcsbi.cursorPosition.y = short(n1 - 1)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcsbi.cursorPosition.y = 0\n\t\t\t}\n\t\t\tprocSetConsoleCursorPosition.Call(uintptr(handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition)))\n\t\tcase 'J':\n\t\t\tn := 0\n\t\t\tif buf.Len() > 0 {\n\t\t\t\tn, err = strconv.Atoi(buf.String())\n\t\t\t\tif err != nil {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar count, written dword\n\t\t\tvar cursor coord\n\t\t\tprocGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi)))\n\t\t\tswitch n {\n\t\t\tcase 0:\n\t\t\t\tcursor = coord{x: csbi.cursorPosition.x, y: csbi.cursorPosition.y}\n\t\t\t\tcount = dword(csbi.size.x) - dword(csbi.cursorPosition.x) + dword(csbi.size.y-csbi.cursorPosition.y)*dword(csbi.size.x)\n\t\t\tcase 1:\n\t\t\t\tcursor = coord{x: csbi.window.left, y: csbi.window.top}\n\t\t\t\tcount = dword(csbi.size.x) - dword(csbi.cursorPosition.x) + dword(csbi.window.top-csbi.cursorPosition.y)*dword(csbi.size.x)\n\t\t\tcase 2:\n\t\t\t\tcursor = coord{x: csbi.window.left, y: csbi.window.top}\n\t\t\t\tcount = dword(csbi.size.x) - dword(csbi.cursorPosition.x) + dword(csbi.size.y-csbi.cursorPosition.y)*dword(csbi.size.x)\n\t\t\t}\n\t\t\tprocFillConsoleOutputCharacter.Call(uintptr(handle), uintptr(' '), uintptr(count), *(*uintptr)(unsafe.Pointer(&cursor)), uintptr(unsafe.Pointer(&written)))\n\t\t\tprocFillConsoleOutputAttribute.Call(uintptr(handle), uintptr(csbi.attributes), uintptr(count), *(*uintptr)(unsafe.Pointer(&cursor)), uintptr(unsafe.Pointer(&written)))\n\t\tcase 'K':\n\t\t\tn := 0\n\t\t\tif buf.Len() > 0 {\n\t\t\t\tn, err = strconv.Atoi(buf.String())\n\t\t\t\tif err != nil {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\t\t\tprocGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi)))\n\t\t\tvar cursor coord\n\t\t\tvar count, written dword\n\t\t\tswitch n {\n\t\t\tcase 0:\n\t\t\t\tcursor = coord{x: csbi.cursorPosition.x, y: csbi.cursorPosition.y}\n\t\t\t\tcount = dword(csbi.size.x - csbi.cursorPosition.x)\n\t\t\tcase 1:\n\t\t\t\tcursor = coord{x: csbi.window.left, y: csbi.cursorPosition.y}\n\t\t\t\tcount = dword(csbi.size.x - csbi.cursorPosition.x)\n\t\t\tcase 2:\n\t\t\t\tcursor = coord{x: csbi.window.left, y: csbi.cursorPosition.y}\n\t\t\t\tcount = dword(csbi.size.x)\n\t\t\t}\n\t\t\tprocFillConsoleOutputCharacter.Call(uintptr(handle), uintptr(' '), uintptr(count), *(*uintptr)(unsafe.Pointer(&cursor)), uintptr(unsafe.Pointer(&written)))\n\t\t\tprocFillConsoleOutputAttribute.Call(uintptr(handle), uintptr(csbi.attributes), uintptr(count), *(*uintptr)(unsafe.Pointer(&cursor)), uintptr(unsafe.Pointer(&written)))\n\t\tcase 'm':\n\t\t\tprocGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi)))\n\t\t\tattr := csbi.attributes\n\t\t\tcs := buf.String()\n\t\t\tif cs == \"\" {\n\t\t\t\tprocSetConsoleTextAttribute.Call(uintptr(handle), uintptr(w.oldattr))\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\ttoken := strings.Split(cs, \";\")\n\t\t\tfor i := 0; i < len(token); i++ {\n\t\t\t\tns := token[i]\n\t\t\t\tif n, err = strconv.Atoi(ns); err == nil {\n\t\t\t\t\tswitch {\n\t\t\t\t\tcase n == 0 || n == 100:\n\t\t\t\t\t\tattr = w.oldattr\n\t\t\t\t\tcase 1 <= n && n <= 5:\n\t\t\t\t\t\tattr |= foregroundIntensity\n\t\t\t\t\tcase n == 7:\n\t\t\t\t\t\tattr = ((attr & foregroundMask) << 4) | ((attr & backgroundMask) >> 4)\n\t\t\t\t\tcase n == 22 || n == 25:\n\t\t\t\t\t\tattr |= foregroundIntensity\n\t\t\t\t\tcase n == 27:\n\t\t\t\t\t\tattr = ((attr & foregroundMask) << 4) | ((attr & backgroundMask) >> 4)\n\t\t\t\t\tcase 30 <= n && n <= 37:\n\t\t\t\t\t\tattr &= backgroundMask\n\t\t\t\t\t\tif (n-30)&1 != 0 {\n\t\t\t\t\t\t\tattr |= foregroundRed\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (n-30)&2 != 0 {\n\t\t\t\t\t\t\tattr |= foregroundGreen\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (n-30)&4 != 0 {\n\t\t\t\t\t\t\tattr |= foregroundBlue\n\t\t\t\t\t\t}\n\t\t\t\t\tcase n == 38: // set foreground color.\n\t\t\t\t\t\tif i < len(token)-2 && (token[i+1] == \"5\" || token[i+1] == \"05\") {\n\t\t\t\t\t\t\tif n256, err := strconv.Atoi(token[i+2]); err == nil {\n\t\t\t\t\t\t\t\tif n256foreAttr == nil {\n\t\t\t\t\t\t\t\t\tn256setup()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tattr &= backgroundMask\n\t\t\t\t\t\t\t\tattr |= n256foreAttr[n256]\n\t\t\t\t\t\t\t\ti += 2\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if len(token) == 5 && token[i+1] == \"2\" {\n\t\t\t\t\t\t\tvar r, g, b int\n\t\t\t\t\t\t\tr, _ = strconv.Atoi(token[i+2])\n\t\t\t\t\t\t\tg, _ = strconv.Atoi(token[i+3])\n\t\t\t\t\t\t\tb, _ = strconv.Atoi(token[i+4])\n\t\t\t\t\t\t\ti += 4\n\t\t\t\t\t\t\tif r > 127 {\n\t\t\t\t\t\t\t\tattr |= foregroundRed\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif g > 127 {\n\t\t\t\t\t\t\t\tattr |= foregroundGreen\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif b > 127 {\n\t\t\t\t\t\t\t\tattr |= foregroundBlue\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tattr = attr & (w.oldattr & backgroundMask)\n\t\t\t\t\t\t}\n\t\t\t\t\tcase n == 39: // reset foreground color.\n\t\t\t\t\t\tattr &= backgroundMask\n\t\t\t\t\t\tattr |= w.oldattr & foregroundMask\n\t\t\t\t\tcase 40 <= n && n <= 47:\n\t\t\t\t\t\tattr &= foregroundMask\n\t\t\t\t\t\tif (n-40)&1 != 0 {\n\t\t\t\t\t\t\tattr |= backgroundRed\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (n-40)&2 != 0 {\n\t\t\t\t\t\t\tattr |= backgroundGreen\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (n-40)&4 != 0 {\n\t\t\t\t\t\t\tattr |= backgroundBlue\n\t\t\t\t\t\t}\n\t\t\t\t\tcase n == 48: // set background color.\n\t\t\t\t\t\tif i < len(token)-2 && token[i+1] == \"5\" {\n\t\t\t\t\t\t\tif n256, err := strconv.Atoi(token[i+2]); err == nil {\n\t\t\t\t\t\t\t\tif n256backAttr == nil {\n\t\t\t\t\t\t\t\t\tn256setup()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tattr &= foregroundMask\n\t\t\t\t\t\t\t\tattr |= n256backAttr[n256]\n\t\t\t\t\t\t\t\ti += 2\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if len(token) == 5 && token[i+1] == \"2\" {\n\t\t\t\t\t\t\tvar r, g, b int\n\t\t\t\t\t\t\tr, _ = strconv.Atoi(token[i+2])\n\t\t\t\t\t\t\tg, _ = strconv.Atoi(token[i+3])\n\t\t\t\t\t\t\tb, _ = strconv.Atoi(token[i+4])\n\t\t\t\t\t\t\ti += 4\n\t\t\t\t\t\t\tif r > 127 {\n\t\t\t\t\t\t\t\tattr |= backgroundRed\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif g > 127 {\n\t\t\t\t\t\t\t\tattr |= backgroundGreen\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif b > 127 {\n\t\t\t\t\t\t\t\tattr |= backgroundBlue\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tattr = attr & (w.oldattr & foregroundMask)\n\t\t\t\t\t\t}\n\t\t\t\t\tcase n == 49: // reset foreground color.\n\t\t\t\t\t\tattr &= foregroundMask\n\t\t\t\t\t\tattr |= w.oldattr & backgroundMask\n\t\t\t\t\tcase 90 <= n && n <= 97:\n\t\t\t\t\t\tattr = (attr & backgroundMask)\n\t\t\t\t\t\tattr |= foregroundIntensity\n\t\t\t\t\t\tif (n-90)&1 != 0 {\n\t\t\t\t\t\t\tattr |= foregroundRed\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (n-90)&2 != 0 {\n\t\t\t\t\t\t\tattr |= foregroundGreen\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (n-90)&4 != 0 {\n\t\t\t\t\t\t\tattr |= foregroundBlue\n\t\t\t\t\t\t}\n\t\t\t\t\tcase 100 <= n && n <= 107:\n\t\t\t\t\t\tattr = (attr & foregroundMask)\n\t\t\t\t\t\tattr |= backgroundIntensity\n\t\t\t\t\t\tif (n-100)&1 != 0 {\n\t\t\t\t\t\t\tattr |= backgroundRed\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (n-100)&2 != 0 {\n\t\t\t\t\t\t\tattr |= backgroundGreen\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (n-100)&4 != 0 {\n\t\t\t\t\t\t\tattr |= backgroundBlue\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tprocSetConsoleTextAttribute.Call(uintptr(handle), uintptr(attr))\n\t\t\t\t}\n\t\t\t}\n\t\tcase 'h':\n\t\t\tvar ci consoleCursorInfo\n\t\t\tcs := buf.String()\n\t\t\tif cs == \"5>\" {\n\t\t\t\tprocGetConsoleCursorInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&ci)))\n\t\t\t\tci.visible = 0\n\t\t\t\tprocSetConsoleCursorInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&ci)))\n\t\t\t} else if cs == \"?25\" {\n\t\t\t\tprocGetConsoleCursorInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&ci)))\n\t\t\t\tci.visible = 1\n\t\t\t\tprocSetConsoleCursorInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&ci)))\n\t\t\t} else if cs == \"?1049\" {\n\t\t\t\tif w.althandle == 0 {\n\t\t\t\t\th, _, _ := procCreateConsoleScreenBuffer.Call(uintptr(genericRead|genericWrite), 0, 0, uintptr(consoleTextmodeBuffer), 0, 0)\n\t\t\t\t\tw.althandle = syscall.Handle(h)\n\t\t\t\t\tif w.althandle != 0 {\n\t\t\t\t\t\thandle = w.althandle\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\tcase 'l':\n\t\t\tvar ci consoleCursorInfo\n\t\t\tcs := buf.String()\n\t\t\tif cs == \"5>\" {\n\t\t\t\tprocGetConsoleCursorInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&ci)))\n\t\t\t\tci.visible = 1\n\t\t\t\tprocSetConsoleCursorInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&ci)))\n\t\t\t} else if cs == \"?25\" {\n\t\t\t\tprocGetConsoleCursorInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&ci)))\n\t\t\t\tci.visible = 0\n\t\t\t\tprocSetConsoleCursorInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&ci)))\n\t\t\t} else if cs == \"?1049\" {\n\t\t\t\tif w.althandle != 0 {\n\t\t\t\t\tsyscall.CloseHandle(w.althandle)\n\t\t\t\t\tw.althandle = 0\n\t\t\t\t\thandle = w.handle\n\t\t\t\t}\n\t\t\t}\n\t\tcase 's':\n\t\t\tprocGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi)))\n\t\t\tw.oldpos = csbi.cursorPosition\n\t\tcase 'u':\n\t\t\tprocSetConsoleCursorPosition.Call(uintptr(handle), *(*uintptr)(unsafe.Pointer(&w.oldpos)))\n\t\t}\n\t}\n\n\treturn len(data), nil\n}\n\ntype consoleColor struct {\n\trgb       int\n\tred       bool\n\tgreen     bool\n\tblue      bool\n\tintensity bool\n}\n\nfunc (c consoleColor) foregroundAttr() (attr word) {\n\tif c.red {\n\t\tattr |= foregroundRed\n\t}\n\tif c.green {\n\t\tattr |= foregroundGreen\n\t}\n\tif c.blue {\n\t\tattr |= foregroundBlue\n\t}\n\tif c.intensity {\n\t\tattr |= foregroundIntensity\n\t}\n\treturn\n}\n\nfunc (c consoleColor) backgroundAttr() (attr word) {\n\tif c.red {\n\t\tattr |= backgroundRed\n\t}\n\tif c.green {\n\t\tattr |= backgroundGreen\n\t}\n\tif c.blue {\n\t\tattr |= backgroundBlue\n\t}\n\tif c.intensity {\n\t\tattr |= backgroundIntensity\n\t}\n\treturn\n}\n\nvar color16 = []consoleColor{\n\t{0x000000, false, false, false, false},\n\t{0x000080, false, false, true, false},\n\t{0x008000, false, true, false, false},\n\t{0x008080, false, true, true, false},\n\t{0x800000, true, false, false, false},\n\t{0x800080, true, false, true, false},\n\t{0x808000, true, true, false, false},\n\t{0xc0c0c0, true, true, true, false},\n\t{0x808080, false, false, false, true},\n\t{0x0000ff, false, false, true, true},\n\t{0x00ff00, false, true, false, true},\n\t{0x00ffff, false, true, true, true},\n\t{0xff0000, true, false, false, true},\n\t{0xff00ff, true, false, true, true},\n\t{0xffff00, true, true, false, true},\n\t{0xffffff, true, true, true, true},\n}\n\ntype hsv struct {\n\th, s, v float32\n}\n\nfunc (a hsv) dist(b hsv) float32 {\n\tdh := a.h - b.h\n\tswitch {\n\tcase dh > 0.5:\n\t\tdh = 1 - dh\n\tcase dh < -0.5:\n\t\tdh = -1 - dh\n\t}\n\tds := a.s - b.s\n\tdv := a.v - b.v\n\treturn float32(math.Sqrt(float64(dh*dh + ds*ds + dv*dv)))\n}\n\nfunc toHSV(rgb int) hsv {\n\tr, g, b := float32((rgb&0xFF0000)>>16)/256.0,\n\t\tfloat32((rgb&0x00FF00)>>8)/256.0,\n\t\tfloat32(rgb&0x0000FF)/256.0\n\tmin, max := minmax3f(r, g, b)\n\th := max - min\n\tif h > 0 {\n\t\tif max == r {\n\t\t\th = (g - b) / h\n\t\t\tif h < 0 {\n\t\t\t\th += 6\n\t\t\t}\n\t\t} else if max == g {\n\t\t\th = 2 + (b-r)/h\n\t\t} else {\n\t\t\th = 4 + (r-g)/h\n\t\t}\n\t}\n\th /= 6.0\n\ts := max - min\n\tif max != 0 {\n\t\ts /= max\n\t}\n\tv := max\n\treturn hsv{h: h, s: s, v: v}\n}\n\ntype hsvTable []hsv\n\nfunc toHSVTable(rgbTable []consoleColor) hsvTable {\n\tt := make(hsvTable, len(rgbTable))\n\tfor i, c := range rgbTable {\n\t\tt[i] = toHSV(c.rgb)\n\t}\n\treturn t\n}\n\nfunc (t hsvTable) find(rgb int) consoleColor {\n\thsv := toHSV(rgb)\n\tn := 7\n\tl := float32(5.0)\n\tfor i, p := range t {\n\t\td := hsv.dist(p)\n\t\tif d < l {\n\t\t\tl, n = d, i\n\t\t}\n\t}\n\treturn color16[n]\n}\n\nfunc minmax3f(a, b, c float32) (min, max float32) {\n\tif a < b {\n\t\tif b < c {\n\t\t\treturn a, c\n\t\t} else if a < c {\n\t\t\treturn a, b\n\t\t} else {\n\t\t\treturn c, b\n\t\t}\n\t} else {\n\t\tif a < c {\n\t\t\treturn b, c\n\t\t} else if b < c {\n\t\t\treturn b, a\n\t\t} else {\n\t\t\treturn c, a\n\t\t}\n\t}\n}\n\nvar n256foreAttr []word\nvar n256backAttr []word\n\nfunc n256setup() {\n\tn256foreAttr = make([]word, 256)\n\tn256backAttr = make([]word, 256)\n\tt := toHSVTable(color16)\n\tfor i, rgb := range color256 {\n\t\tc := t.find(rgb)\n\t\tn256foreAttr[i] = c.foregroundAttr()\n\t\tn256backAttr[i] = c.backgroundAttr()\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/mattn/go-colorable/noncolorable.go",
    "content": "package colorable\n\nimport (\n\t\"bytes\"\n\t\"io\"\n)\n\n// NonColorable hold writer but remove escape sequence.\ntype NonColorable struct {\n\tout io.Writer\n}\n\n// NewNonColorable return new instance of Writer which remove escape sequence from Writer.\nfunc NewNonColorable(w io.Writer) io.Writer {\n\treturn &NonColorable{out: w}\n}\n\n// Write write data on console\nfunc (w *NonColorable) Write(data []byte) (n int, err error) {\n\ter := bytes.NewReader(data)\n\tvar bw [1]byte\nloop:\n\tfor {\n\t\tc1, err := er.ReadByte()\n\t\tif err != nil {\n\t\t\tbreak loop\n\t\t}\n\t\tif c1 != 0x1b {\n\t\t\tbw[0] = c1\n\t\t\tw.out.Write(bw[:])\n\t\t\tcontinue\n\t\t}\n\t\tc2, err := er.ReadByte()\n\t\tif err != nil {\n\t\t\tbreak loop\n\t\t}\n\t\tif c2 != 0x5b {\n\t\t\tcontinue\n\t\t}\n\n\t\tvar buf bytes.Buffer\n\t\tfor {\n\t\t\tc, err := er.ReadByte()\n\t\t\tif err != nil {\n\t\t\t\tbreak loop\n\t\t\t}\n\t\t\tif ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || c == '@' {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tbuf.Write([]byte(string(c)))\n\t\t}\n\t}\n\n\treturn len(data), nil\n}\n"
  },
  {
    "path": "vendor/github.com/mattn/go-isatty/LICENSE",
    "content": "Copyright (c) Yasuhiro MATSUMOTO <mattn.jp@gmail.com>\n\nMIT License (Expat)\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n"
  },
  {
    "path": "vendor/github.com/mattn/go-isatty/doc.go",
    "content": "// Package isatty implements interface to isatty\npackage isatty\n"
  },
  {
    "path": "vendor/github.com/mattn/go-isatty/isatty_android.go",
    "content": "// +build android\n\npackage isatty\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nconst ioctlReadTermios = syscall.TCGETS\n\n// IsTerminal return true if the file descriptor is terminal.\nfunc IsTerminal(fd uintptr) bool {\n\tvar termios syscall.Termios\n\t_, _, err := syscall.Syscall6(syscall.SYS_IOCTL, fd, ioctlReadTermios, uintptr(unsafe.Pointer(&termios)), 0, 0, 0)\n\treturn err == 0\n}\n\n// IsCygwinTerminal return true if the file descriptor is a cygwin or msys2\n// terminal. This is also always false on this environment.\nfunc IsCygwinTerminal(fd uintptr) bool {\n\treturn false\n}\n"
  },
  {
    "path": "vendor/github.com/mattn/go-isatty/isatty_bsd.go",
    "content": "// +build darwin freebsd openbsd netbsd dragonfly\n// +build !appengine\n\npackage isatty\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nconst ioctlReadTermios = syscall.TIOCGETA\n\n// IsTerminal return true if the file descriptor is terminal.\nfunc IsTerminal(fd uintptr) bool {\n\tvar termios syscall.Termios\n\t_, _, err := syscall.Syscall6(syscall.SYS_IOCTL, fd, ioctlReadTermios, uintptr(unsafe.Pointer(&termios)), 0, 0, 0)\n\treturn err == 0\n}\n\n// IsCygwinTerminal return true if the file descriptor is a cygwin or msys2\n// terminal. This is also always false on this environment.\nfunc IsCygwinTerminal(fd uintptr) bool {\n\treturn false\n}\n"
  },
  {
    "path": "vendor/github.com/mattn/go-isatty/isatty_others.go",
    "content": "// +build appengine js nacl\n\npackage isatty\n\n// IsTerminal returns true if the file descriptor is terminal which\n// is always false on js and appengine classic which is a sandboxed PaaS.\nfunc IsTerminal(fd uintptr) bool {\n\treturn false\n}\n\n// IsCygwinTerminal() return true if the file descriptor is a cygwin or msys2\n// terminal. This is also always false on this environment.\nfunc IsCygwinTerminal(fd uintptr) bool {\n\treturn false\n}\n"
  },
  {
    "path": "vendor/github.com/mattn/go-isatty/isatty_solaris.go",
    "content": "// +build solaris\n// +build !appengine\n\npackage isatty\n\nimport (\n\t\"golang.org/x/sys/unix\"\n)\n\n// IsTerminal returns true if the given file descriptor is a terminal.\n// see: http://src.illumos.org/source/xref/illumos-gate/usr/src/lib/libbc/libc/gen/common/isatty.c\nfunc IsTerminal(fd uintptr) bool {\n\tvar termio unix.Termio\n\terr := unix.IoctlSetTermio(int(fd), unix.TCGETA, &termio)\n\treturn err == nil\n}\n\n// IsCygwinTerminal return true if the file descriptor is a cygwin or msys2\n// terminal. This is also always false on this environment.\nfunc IsCygwinTerminal(fd uintptr) bool {\n\treturn false\n}\n"
  },
  {
    "path": "vendor/github.com/mattn/go-isatty/isatty_tcgets.go",
    "content": "// +build linux aix\n// +build !appengine\n// +build !android\n\npackage isatty\n\nimport \"golang.org/x/sys/unix\"\n\n// IsTerminal return true if the file descriptor is terminal.\nfunc IsTerminal(fd uintptr) bool {\n\t_, err := unix.IoctlGetTermios(int(fd), unix.TCGETS)\n\treturn err == nil\n}\n\n// IsCygwinTerminal return true if the file descriptor is a cygwin or msys2\n// terminal. This is also always false on this environment.\nfunc IsCygwinTerminal(fd uintptr) bool {\n\treturn false\n}\n"
  },
  {
    "path": "vendor/github.com/mattn/go-isatty/isatty_windows.go",
    "content": "// +build windows\n// +build !appengine\n\npackage isatty\n\nimport (\n\t\"strings\"\n\t\"syscall\"\n\t\"unicode/utf16\"\n\t\"unsafe\"\n)\n\nconst (\n\tfileNameInfo uintptr = 2\n\tfileTypePipe         = 3\n)\n\nvar (\n\tkernel32                         = syscall.NewLazyDLL(\"kernel32.dll\")\n\tprocGetConsoleMode               = kernel32.NewProc(\"GetConsoleMode\")\n\tprocGetFileInformationByHandleEx = kernel32.NewProc(\"GetFileInformationByHandleEx\")\n\tprocGetFileType                  = kernel32.NewProc(\"GetFileType\")\n)\n\nfunc init() {\n\t// Check if GetFileInformationByHandleEx is available.\n\tif procGetFileInformationByHandleEx.Find() != nil {\n\t\tprocGetFileInformationByHandleEx = nil\n\t}\n}\n\n// IsTerminal return true if the file descriptor is terminal.\nfunc IsTerminal(fd uintptr) bool {\n\tvar st uint32\n\tr, _, e := syscall.Syscall(procGetConsoleMode.Addr(), 2, fd, uintptr(unsafe.Pointer(&st)), 0)\n\treturn r != 0 && e == 0\n}\n\n// Check pipe name is used for cygwin/msys2 pty.\n// Cygwin/MSYS2 PTY has a name like:\n//   \\{cygwin,msys}-XXXXXXXXXXXXXXXX-ptyN-{from,to}-master\nfunc isCygwinPipeName(name string) bool {\n\ttoken := strings.Split(name, \"-\")\n\tif len(token) < 5 {\n\t\treturn false\n\t}\n\n\tif token[0] != `\\msys` && token[0] != `\\cygwin` {\n\t\treturn false\n\t}\n\n\tif token[1] == \"\" {\n\t\treturn false\n\t}\n\n\tif !strings.HasPrefix(token[2], \"pty\") {\n\t\treturn false\n\t}\n\n\tif token[3] != `from` && token[3] != `to` {\n\t\treturn false\n\t}\n\n\tif token[4] != \"master\" {\n\t\treturn false\n\t}\n\n\treturn true\n}\n\n// IsCygwinTerminal() return true if the file descriptor is a cygwin or msys2\n// terminal.\nfunc IsCygwinTerminal(fd uintptr) bool {\n\tif procGetFileInformationByHandleEx == nil {\n\t\treturn false\n\t}\n\n\t// Cygwin/msys's pty is a pipe.\n\tft, _, e := syscall.Syscall(procGetFileType.Addr(), 1, fd, 0, 0)\n\tif ft != fileTypePipe || e != 0 {\n\t\treturn false\n\t}\n\n\tvar buf [2 + syscall.MAX_PATH]uint16\n\tr, _, e := syscall.Syscall6(procGetFileInformationByHandleEx.Addr(),\n\t\t4, fd, fileNameInfo, uintptr(unsafe.Pointer(&buf)),\n\t\tuintptr(len(buf)*2), 0, 0)\n\tif r == 0 || e != 0 {\n\t\treturn false\n\t}\n\n\tl := *(*uint32)(unsafe.Pointer(&buf))\n\treturn isCygwinPipeName(string(utf16.Decode(buf[2 : 2+l/2])))\n}\n"
  },
  {
    "path": "vendor/github.com/mitchellh/cli/LICENSE",
    "content": "Mozilla Public License, version 2.0\n\n1. Definitions\n\n1.1. “Contributor”\n\n     means each individual or legal entity that creates, contributes to the\n     creation of, or owns Covered Software.\n\n1.2. “Contributor Version”\n\n     means the combination of the Contributions of others (if any) used by a\n     Contributor and that particular Contributor’s Contribution.\n\n1.3. “Contribution”\n\n     means Covered Software of a particular Contributor.\n\n1.4. “Covered Software”\n\n     means Source Code Form to which the initial Contributor has attached the\n     notice in Exhibit A, the Executable Form of such Source Code Form, and\n     Modifications of such Source Code Form, in each case including portions\n     thereof.\n\n1.5. “Incompatible With Secondary Licenses”\n     means\n\n     a. that the initial Contributor has attached the notice described in\n        Exhibit B to the Covered Software; or\n\n     b. that the Covered Software was made available under the terms of version\n        1.1 or earlier of the License, but not also under the terms of a\n        Secondary License.\n\n1.6. “Executable Form”\n\n     means any form of the work other than Source Code Form.\n\n1.7. “Larger Work”\n\n     means a work that combines Covered Software with other material, in a separate\n     file or files, that is not Covered Software.\n\n1.8. “License”\n\n     means this document.\n\n1.9. “Licensable”\n\n     means having the right to grant, to the maximum extent possible, whether at the\n     time of the initial grant or subsequently, any and all of the rights conveyed by\n     this License.\n\n1.10. “Modifications”\n\n     means any of the following:\n\n     a. any file in Source Code Form that results from an addition to, deletion\n        from, or modification of the contents of Covered Software; or\n\n     b. any new file in Source Code Form that contains any Covered Software.\n\n1.11. “Patent Claims” of a Contributor\n\n      means any patent claim(s), including without limitation, method, process,\n      and apparatus claims, in any patent Licensable by such Contributor that\n      would be infringed, but for the grant of the License, by the making,\n      using, selling, offering for sale, having made, import, or transfer of\n      either its Contributions or its Contributor Version.\n\n1.12. “Secondary License”\n\n      means either the GNU General Public License, Version 2.0, the GNU Lesser\n      General Public License, Version 2.1, the GNU Affero General Public\n      License, Version 3.0, or any later versions of those licenses.\n\n1.13. “Source Code Form”\n\n      means the form of the work preferred for making modifications.\n\n1.14. “You” (or “Your”)\n\n      means an individual or a legal entity exercising rights under this\n      License. For legal entities, “You” includes any entity that controls, is\n      controlled by, or is under common control with You. For purposes of this\n      definition, “control” means (a) the power, direct or indirect, to cause\n      the direction or management of such entity, whether by contract or\n      otherwise, or (b) ownership of more than fifty percent (50%) of the\n      outstanding shares or beneficial ownership of such entity.\n\n\n2. License Grants and Conditions\n\n2.1. Grants\n\n     Each Contributor hereby grants You a world-wide, royalty-free,\n     non-exclusive license:\n\n     a. under intellectual property rights (other than patent or trademark)\n        Licensable by such Contributor to use, reproduce, make available,\n        modify, display, perform, distribute, and otherwise exploit its\n        Contributions, either on an unmodified basis, with Modifications, or as\n        part of a Larger Work; and\n\n     b. under Patent Claims of such Contributor to make, use, sell, offer for\n        sale, have made, import, and otherwise transfer either its Contributions\n        or its Contributor Version.\n\n2.2. Effective Date\n\n     The licenses granted in Section 2.1 with respect to any Contribution become\n     effective for each Contribution on the date the Contributor first distributes\n     such Contribution.\n\n2.3. Limitations on Grant Scope\n\n     The licenses granted in this Section 2 are the only rights granted under this\n     License. No additional rights or licenses will be implied from the distribution\n     or licensing of Covered Software under this License. Notwithstanding Section\n     2.1(b) above, no patent license is granted by a Contributor:\n\n     a. for any code that a Contributor has removed from Covered Software; or\n\n     b. for infringements caused by: (i) Your and any other third party’s\n        modifications of Covered Software, or (ii) the combination of its\n        Contributions with other software (except as part of its Contributor\n        Version); or\n\n     c. under Patent Claims infringed by Covered Software in the absence of its\n        Contributions.\n\n     This License does not grant any rights in the trademarks, service marks, or\n     logos of any Contributor (except as may be necessary to comply with the\n     notice requirements in Section 3.4).\n\n2.4. Subsequent Licenses\n\n     No Contributor makes additional grants as a result of Your choice to\n     distribute the Covered Software under a subsequent version of this License\n     (see Section 10.2) or under the terms of a Secondary License (if permitted\n     under the terms of Section 3.3).\n\n2.5. Representation\n\n     Each Contributor represents that the Contributor believes its Contributions\n     are its original creation(s) or it has sufficient rights to grant the\n     rights to its Contributions conveyed by this License.\n\n2.6. Fair Use\n\n     This License is not intended to limit any rights You have under applicable\n     copyright doctrines of fair use, fair dealing, or other equivalents.\n\n2.7. Conditions\n\n     Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in\n     Section 2.1.\n\n\n3. Responsibilities\n\n3.1. Distribution of Source Form\n\n     All distribution of Covered Software in Source Code Form, including any\n     Modifications that You create or to which You contribute, must be under the\n     terms of this License. You must inform recipients that the Source Code Form\n     of the Covered Software is governed by the terms of this License, and how\n     they can obtain a copy of this License. You may not attempt to alter or\n     restrict the recipients’ rights in the Source Code Form.\n\n3.2. Distribution of Executable Form\n\n     If You distribute Covered Software in Executable Form then:\n\n     a. such Covered Software must also be made available in Source Code Form,\n        as described in Section 3.1, and You must inform recipients of the\n        Executable Form how they can obtain a copy of such Source Code Form by\n        reasonable means in a timely manner, at a charge no more than the cost\n        of distribution to the recipient; and\n\n     b. You may distribute such Executable Form under the terms of this License,\n        or sublicense it under different terms, provided that the license for\n        the Executable Form does not attempt to limit or alter the recipients’\n        rights in the Source Code Form under this License.\n\n3.3. Distribution of a Larger Work\n\n     You may create and distribute a Larger Work under terms of Your choice,\n     provided that You also comply with the requirements of this License for the\n     Covered Software. If the Larger Work is a combination of Covered Software\n     with a work governed by one or more Secondary Licenses, and the Covered\n     Software is not Incompatible With Secondary Licenses, this License permits\n     You to additionally distribute such Covered Software under the terms of\n     such Secondary License(s), so that the recipient of the Larger Work may, at\n     their option, further distribute the Covered Software under the terms of\n     either this License or such Secondary License(s).\n\n3.4. Notices\n\n     You may not remove or alter the substance of any license notices (including\n     copyright notices, patent notices, disclaimers of warranty, or limitations\n     of liability) contained within the Source Code Form of the Covered\n     Software, except that You may alter any license notices to the extent\n     required to remedy known factual inaccuracies.\n\n3.5. Application of Additional Terms\n\n     You may choose to offer, and to charge a fee for, warranty, support,\n     indemnity or liability obligations to one or more recipients of Covered\n     Software. However, You may do so only on Your own behalf, and not on behalf\n     of any Contributor. You must make it absolutely clear that any such\n     warranty, support, indemnity, or liability obligation is offered by You\n     alone, and You hereby agree to indemnify every Contributor for any\n     liability incurred by such Contributor as a result of warranty, support,\n     indemnity or liability terms You offer. You may include additional\n     disclaimers of warranty and limitations of liability specific to any\n     jurisdiction.\n\n4. Inability to Comply Due to Statute or Regulation\n\n   If it is impossible for You to comply with any of the terms of this License\n   with respect to some or all of the Covered Software due to statute, judicial\n   order, or regulation then You must: (a) comply with the terms of this License\n   to the maximum extent possible; and (b) describe the limitations and the code\n   they affect. Such description must be placed in a text file included with all\n   distributions of the Covered Software under this License. Except to the\n   extent prohibited by statute or regulation, such description must be\n   sufficiently detailed for a recipient of ordinary skill to be able to\n   understand it.\n\n5. Termination\n\n5.1. The rights granted under this License will terminate automatically if You\n     fail to comply with any of its terms. However, if You become compliant,\n     then the rights granted under this License from a particular Contributor\n     are reinstated (a) provisionally, unless and until such Contributor\n     explicitly and finally terminates Your grants, and (b) on an ongoing basis,\n     if such Contributor fails to notify You of the non-compliance by some\n     reasonable means prior to 60 days after You have come back into compliance.\n     Moreover, Your grants from a particular Contributor are reinstated on an\n     ongoing basis if such Contributor notifies You of the non-compliance by\n     some reasonable means, this is the first time You have received notice of\n     non-compliance with this License from such Contributor, and You become\n     compliant prior to 30 days after Your receipt of the notice.\n\n5.2. If You initiate litigation against any entity by asserting a patent\n     infringement claim (excluding declaratory judgment actions, counter-claims,\n     and cross-claims) alleging that a Contributor Version directly or\n     indirectly infringes any patent, then the rights granted to You by any and\n     all Contributors for the Covered Software under Section 2.1 of this License\n     shall terminate.\n\n5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user\n     license agreements (excluding distributors and resellers) which have been\n     validly granted by You or Your distributors under this License prior to\n     termination shall survive termination.\n\n6. Disclaimer of Warranty\n\n   Covered Software is provided under this License on an “as is” basis, without\n   warranty of any kind, either expressed, implied, or statutory, including,\n   without limitation, warranties that the Covered Software is free of defects,\n   merchantable, fit for a particular purpose or non-infringing. The entire\n   risk as to the quality and performance of the Covered Software is with You.\n   Should any Covered Software prove defective in any respect, You (not any\n   Contributor) assume the cost of any necessary servicing, repair, or\n   correction. This disclaimer of warranty constitutes an essential part of this\n   License. No use of  any Covered Software is authorized under this License\n   except under this disclaimer.\n\n7. Limitation of Liability\n\n   Under no circumstances and under no legal theory, whether tort (including\n   negligence), contract, or otherwise, shall any Contributor, or anyone who\n   distributes Covered Software as permitted above, be liable to You for any\n   direct, indirect, special, incidental, or consequential damages of any\n   character including, without limitation, damages for lost profits, loss of\n   goodwill, work stoppage, computer failure or malfunction, or any and all\n   other commercial damages or losses, even if such party shall have been\n   informed of the possibility of such damages. This limitation of liability\n   shall not apply to liability for death or personal injury resulting from such\n   party’s negligence to the extent applicable law prohibits such limitation.\n   Some jurisdictions do not allow the exclusion or limitation of incidental or\n   consequential damages, so this exclusion and limitation may not apply to You.\n\n8. Litigation\n\n   Any litigation relating to this License may be brought only in the courts of\n   a jurisdiction where the defendant maintains its principal place of business\n   and such litigation shall be governed by laws of that jurisdiction, without\n   reference to its conflict-of-law provisions. Nothing in this Section shall\n   prevent a party’s ability to bring cross-claims or counter-claims.\n\n9. Miscellaneous\n\n   This License represents the complete agreement concerning the subject matter\n   hereof. If any provision of this License is held to be unenforceable, such\n   provision shall be reformed only to the extent necessary to make it\n   enforceable. Any law or regulation which provides that the language of a\n   contract shall be construed against the drafter shall not be used to construe\n   this License against a Contributor.\n\n\n10. Versions of the License\n\n10.1. New Versions\n\n      Mozilla Foundation is the license steward. Except as provided in Section\n      10.3, no one other than the license steward has the right to modify or\n      publish new versions of this License. Each version will be given a\n      distinguishing version number.\n\n10.2. Effect of New Versions\n\n      You may distribute the Covered Software under the terms of the version of\n      the License under which You originally received the Covered Software, or\n      under the terms of any subsequent version published by the license\n      steward.\n\n10.3. Modified Versions\n\n      If you create software not governed by this License, and you want to\n      create a new license for such software, you may create and use a modified\n      version of this License if you rename the license and remove any\n      references to the name of the license steward (except to note that such\n      modified license differs from this License).\n\n10.4. Distributing Source Code Form that is Incompatible With Secondary Licenses\n      If You choose to distribute Source Code Form that is Incompatible With\n      Secondary Licenses under the terms of this version of the License, the\n      notice described in Exhibit B of this License must be attached.\n\nExhibit A - Source Code Form License Notice\n\n      This Source Code Form is subject to the\n      terms of the Mozilla Public License, v.\n      2.0. If a copy of the MPL was not\n      distributed with this file, You can\n      obtain one at\n      http://mozilla.org/MPL/2.0/.\n\nIf it is not possible or desirable to put the notice in a particular file, then\nYou may include the notice in a location (such as a LICENSE file in a relevant\ndirectory) where a recipient would be likely to look for such a notice.\n\nYou may add additional accurate notices of copyright ownership.\n\nExhibit B - “Incompatible With Secondary Licenses” Notice\n\n      This Source Code Form is “Incompatible\n      With Secondary Licenses”, as defined by\n      the Mozilla Public License, v. 2.0.\n\n"
  },
  {
    "path": "vendor/github.com/mitchellh/cli/autocomplete.go",
    "content": "package cli\n\nimport (\n\t\"github.com/posener/complete/cmd/install\"\n)\n\n// autocompleteInstaller is an interface to be implemented to perform the\n// autocomplete installation and uninstallation with a CLI.\n//\n// This interface is not exported because it only exists for unit tests\n// to be able to test that the installation is called properly.\ntype autocompleteInstaller interface {\n\tInstall(string) error\n\tUninstall(string) error\n}\n\n// realAutocompleteInstaller uses the real install package to do the\n// install/uninstall.\ntype realAutocompleteInstaller struct{}\n\nfunc (i *realAutocompleteInstaller) Install(cmd string) error {\n\treturn install.Install(cmd)\n}\n\nfunc (i *realAutocompleteInstaller) Uninstall(cmd string) error {\n\treturn install.Uninstall(cmd)\n}\n\n// mockAutocompleteInstaller is used for tests to record the install/uninstall.\ntype mockAutocompleteInstaller struct {\n\tInstallCalled   bool\n\tUninstallCalled bool\n}\n\nfunc (i *mockAutocompleteInstaller) Install(cmd string) error {\n\ti.InstallCalled = true\n\treturn nil\n}\n\nfunc (i *mockAutocompleteInstaller) Uninstall(cmd string) error {\n\ti.UninstallCalled = true\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/mitchellh/cli/cli.go",
    "content": "package cli\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"regexp\"\n\t\"sort\"\n\t\"strings\"\n\t\"sync\"\n\t\"text/template\"\n\n\t\"github.com/armon/go-radix\"\n\t\"github.com/posener/complete\"\n)\n\n// CLI contains the state necessary to run subcommands and parse the\n// command line arguments.\n//\n// CLI also supports nested subcommands, such as \"cli foo bar\". To use\n// nested subcommands, the key in the Commands mapping below contains the\n// full subcommand. In this example, it would be \"foo bar\".\n//\n// If you use a CLI with nested subcommands, some semantics change due to\n// ambiguities:\n//\n//   * We use longest prefix matching to find a matching subcommand. This\n//     means if you register \"foo bar\" and the user executes \"cli foo qux\",\n//     the \"foo\" command will be executed with the arg \"qux\". It is up to\n//     you to handle these args. One option is to just return the special\n//     help return code `RunResultHelp` to display help and exit.\n//\n//   * The help flag \"-h\" or \"-help\" will look at all args to determine\n//     the help function. For example: \"otto apps list -h\" will show the\n//     help for \"apps list\" but \"otto apps -h\" will show it for \"apps\".\n//     In the normal CLI, only the first subcommand is used.\n//\n//   * The help flag will list any subcommands that a command takes\n//     as well as the command's help itself. If there are no subcommands,\n//     it will note this. If the CLI itself has no subcommands, this entire\n//     section is omitted.\n//\n//   * Any parent commands that don't exist are automatically created as\n//     no-op commands that just show help for other subcommands. For example,\n//     if you only register \"foo bar\", then \"foo\" is automatically created.\n//\ntype CLI struct {\n\t// Args is the list of command-line arguments received excluding\n\t// the name of the app. For example, if the command \"./cli foo bar\"\n\t// was invoked, then Args should be []string{\"foo\", \"bar\"}.\n\tArgs []string\n\n\t// Commands is a mapping of subcommand names to a factory function\n\t// for creating that Command implementation. If there is a command\n\t// with a blank string \"\", then it will be used as the default command\n\t// if no subcommand is specified.\n\t//\n\t// If the key has a space in it, this will create a nested subcommand.\n\t// For example, if the key is \"foo bar\", then to access it our CLI\n\t// must be accessed with \"./cli foo bar\". See the docs for CLI for\n\t// notes on how this changes some other behavior of the CLI as well.\n\t//\n\t// The factory should be as cheap as possible, ideally only allocating\n\t// a struct. The factory may be called multiple times in the course\n\t// of a command execution and certain events such as help require the\n\t// instantiation of all commands. Expensive initialization should be\n\t// deferred to function calls within the interface implementation.\n\tCommands map[string]CommandFactory\n\n\t// HiddenCommands is a list of commands that are \"hidden\". Hidden\n\t// commands are not given to the help function callback and do not\n\t// show up in autocomplete. The values in the slice should be equivalent\n\t// to the keys in the command map.\n\tHiddenCommands []string\n\n\t// Name defines the name of the CLI.\n\tName string\n\n\t// Version of the CLI.\n\tVersion string\n\n\t// Autocomplete enables or disables subcommand auto-completion support.\n\t// This is enabled by default when NewCLI is called. Otherwise, this\n\t// must enabled explicitly.\n\t//\n\t// Autocomplete requires the \"Name\" option to be set on CLI. This name\n\t// should be set exactly to the binary name that is autocompleted.\n\t//\n\t// Autocompletion is supported via the github.com/posener/complete\n\t// library. This library supports bash, zsh and fish. To add support\n\t// for other shells, please see that library.\n\t//\n\t// AutocompleteInstall and AutocompleteUninstall are the global flag\n\t// names for installing and uninstalling the autocompletion handlers\n\t// for the user's shell. The flag should omit the hyphen(s) in front of\n\t// the value. Both single and double hyphens will automatically be supported\n\t// for the flag name. These default to `autocomplete-install` and\n\t// `autocomplete-uninstall` respectively.\n\t//\n\t// AutocompleteNoDefaultFlags is a boolean which controls if the default auto-\n\t// complete flags like -help and -version are added to the output.\n\t//\n\t// AutocompleteGlobalFlags are a mapping of global flags for\n\t// autocompletion. The help and version flags are automatically added.\n\tAutocomplete               bool\n\tAutocompleteInstall        string\n\tAutocompleteUninstall      string\n\tAutocompleteNoDefaultFlags bool\n\tAutocompleteGlobalFlags    complete.Flags\n\tautocompleteInstaller      autocompleteInstaller // For tests\n\n\t// HelpFunc and HelpWriter are used to output help information, if\n\t// requested.\n\t//\n\t// HelpFunc is the function called to generate the generic help\n\t// text that is shown if help must be shown for the CLI that doesn't\n\t// pertain to a specific command.\n\t//\n\t// HelpWriter is the Writer where the help text is outputted to. If\n\t// not specified, it will default to Stderr.\n\tHelpFunc   HelpFunc\n\tHelpWriter io.Writer\n\n\t//---------------------------------------------------------------\n\t// Internal fields set automatically\n\n\tonce           sync.Once\n\tautocomplete   *complete.Complete\n\tcommandTree    *radix.Tree\n\tcommandNested  bool\n\tcommandHidden  map[string]struct{}\n\tsubcommand     string\n\tsubcommandArgs []string\n\ttopFlags       []string\n\n\t// These are true when special global flags are set. We can/should\n\t// probably use a bitset for this one day.\n\tisHelp                  bool\n\tisVersion               bool\n\tisAutocompleteInstall   bool\n\tisAutocompleteUninstall bool\n}\n\n// NewClI returns a new CLI instance with sensible defaults.\nfunc NewCLI(app, version string) *CLI {\n\treturn &CLI{\n\t\tName:         app,\n\t\tVersion:      version,\n\t\tHelpFunc:     BasicHelpFunc(app),\n\t\tAutocomplete: true,\n\t}\n\n}\n\n// IsHelp returns whether or not the help flag is present within the\n// arguments.\nfunc (c *CLI) IsHelp() bool {\n\tc.once.Do(c.init)\n\treturn c.isHelp\n}\n\n// IsVersion returns whether or not the version flag is present within the\n// arguments.\nfunc (c *CLI) IsVersion() bool {\n\tc.once.Do(c.init)\n\treturn c.isVersion\n}\n\n// Run runs the actual CLI based on the arguments given.\nfunc (c *CLI) Run() (int, error) {\n\tc.once.Do(c.init)\n\n\t// If this is a autocompletion request, satisfy it. This must be called\n\t// first before anything else since its possible to be autocompleting\n\t// -help or -version or other flags and we want to show completions\n\t// and not actually write the help or version.\n\tif c.Autocomplete && c.autocomplete.Complete() {\n\t\treturn 0, nil\n\t}\n\n\t// Just show the version and exit if instructed.\n\tif c.IsVersion() && c.Version != \"\" {\n\t\tc.HelpWriter.Write([]byte(c.Version + \"\\n\"))\n\t\treturn 0, nil\n\t}\n\n\t// Just print the help when only '-h' or '--help' is passed.\n\tif c.IsHelp() && c.Subcommand() == \"\" {\n\t\tc.HelpWriter.Write([]byte(c.HelpFunc(c.helpCommands(c.Subcommand())) + \"\\n\"))\n\t\treturn 0, nil\n\t}\n\n\t// If we're attempting to install or uninstall autocomplete then handle\n\tif c.Autocomplete {\n\t\t// Autocomplete requires the \"Name\" to be set so that we know what\n\t\t// command to setup the autocomplete on.\n\t\tif c.Name == \"\" {\n\t\t\treturn 1, fmt.Errorf(\n\t\t\t\t\"internal error: CLI.Name must be specified for autocomplete to work\")\n\t\t}\n\n\t\t// If both install and uninstall flags are specified, then error\n\t\tif c.isAutocompleteInstall && c.isAutocompleteUninstall {\n\t\t\treturn 1, fmt.Errorf(\n\t\t\t\t\"Either the autocomplete install or uninstall flag may \" +\n\t\t\t\t\t\"be specified, but not both.\")\n\t\t}\n\n\t\t// If the install flag is specified, perform the install or uninstall\n\t\tif c.isAutocompleteInstall {\n\t\t\tif err := c.autocompleteInstaller.Install(c.Name); err != nil {\n\t\t\t\treturn 1, err\n\t\t\t}\n\n\t\t\treturn 0, nil\n\t\t}\n\n\t\tif c.isAutocompleteUninstall {\n\t\t\tif err := c.autocompleteInstaller.Uninstall(c.Name); err != nil {\n\t\t\t\treturn 1, err\n\t\t\t}\n\n\t\t\treturn 0, nil\n\t\t}\n\t}\n\n\t// Attempt to get the factory function for creating the command\n\t// implementation. If the command is invalid or blank, it is an error.\n\traw, ok := c.commandTree.Get(c.Subcommand())\n\tif !ok {\n\t\tc.HelpWriter.Write([]byte(c.HelpFunc(c.helpCommands(c.subcommandParent())) + \"\\n\"))\n\t\treturn 127, nil\n\t}\n\n\tcommand, err := raw.(CommandFactory)()\n\tif err != nil {\n\t\treturn 1, err\n\t}\n\n\t// If we've been instructed to just print the help, then print it\n\tif c.IsHelp() {\n\t\tc.commandHelp(command)\n\t\treturn 0, nil\n\t}\n\n\t// If there is an invalid flag, then error\n\tif len(c.topFlags) > 0 {\n\t\tc.HelpWriter.Write([]byte(\n\t\t\t\"Invalid flags before the subcommand. If these flags are for\\n\" +\n\t\t\t\t\"the subcommand, please put them after the subcommand.\\n\\n\"))\n\t\tc.commandHelp(command)\n\t\treturn 1, nil\n\t}\n\n\tcode := command.Run(c.SubcommandArgs())\n\tif code == RunResultHelp {\n\t\t// Requesting help\n\t\tc.commandHelp(command)\n\t\treturn 1, nil\n\t}\n\n\treturn code, nil\n}\n\n// Subcommand returns the subcommand that the CLI would execute. For\n// example, a CLI from \"--version version --help\" would return a Subcommand\n// of \"version\"\nfunc (c *CLI) Subcommand() string {\n\tc.once.Do(c.init)\n\treturn c.subcommand\n}\n\n// SubcommandArgs returns the arguments that will be passed to the\n// subcommand.\nfunc (c *CLI) SubcommandArgs() []string {\n\tc.once.Do(c.init)\n\treturn c.subcommandArgs\n}\n\n// subcommandParent returns the parent of this subcommand, if there is one.\n// If there isn't on, \"\" is returned.\nfunc (c *CLI) subcommandParent() string {\n\t// Get the subcommand, if it is \"\" alread just return\n\tsub := c.Subcommand()\n\tif sub == \"\" {\n\t\treturn sub\n\t}\n\n\t// Clear any trailing spaces and find the last space\n\tsub = strings.TrimRight(sub, \" \")\n\tidx := strings.LastIndex(sub, \" \")\n\n\tif idx == -1 {\n\t\t// No space means our parent is root\n\t\treturn \"\"\n\t}\n\n\treturn sub[:idx]\n}\n\nfunc (c *CLI) init() {\n\tif c.HelpFunc == nil {\n\t\tc.HelpFunc = BasicHelpFunc(\"app\")\n\n\t\tif c.Name != \"\" {\n\t\t\tc.HelpFunc = BasicHelpFunc(c.Name)\n\t\t}\n\t}\n\n\tif c.HelpWriter == nil {\n\t\tc.HelpWriter = os.Stderr\n\t}\n\n\t// Build our hidden commands\n\tif len(c.HiddenCommands) > 0 {\n\t\tc.commandHidden = make(map[string]struct{})\n\t\tfor _, h := range c.HiddenCommands {\n\t\t\tc.commandHidden[h] = struct{}{}\n\t\t}\n\t}\n\n\t// Build our command tree\n\tc.commandTree = radix.New()\n\tc.commandNested = false\n\tfor k, v := range c.Commands {\n\t\tk = strings.TrimSpace(k)\n\t\tc.commandTree.Insert(k, v)\n\t\tif strings.ContainsRune(k, ' ') {\n\t\t\tc.commandNested = true\n\t\t}\n\t}\n\n\t// Go through the key and fill in any missing parent commands\n\tif c.commandNested {\n\t\tvar walkFn radix.WalkFn\n\t\ttoInsert := make(map[string]struct{})\n\t\twalkFn = func(k string, raw interface{}) bool {\n\t\t\tidx := strings.LastIndex(k, \" \")\n\t\t\tif idx == -1 {\n\t\t\t\t// If there is no space, just ignore top level commands\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\t// Trim up to that space so we can get the expected parent\n\t\t\tk = k[:idx]\n\t\t\tif _, ok := c.commandTree.Get(k); ok {\n\t\t\t\t// Yay we have the parent!\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\t// We're missing the parent, so let's insert this\n\t\t\ttoInsert[k] = struct{}{}\n\n\t\t\t// Call the walk function recursively so we check this one too\n\t\t\treturn walkFn(k, nil)\n\t\t}\n\n\t\t// Walk!\n\t\tc.commandTree.Walk(walkFn)\n\n\t\t// Insert any that we're missing\n\t\tfor k := range toInsert {\n\t\t\tvar f CommandFactory = func() (Command, error) {\n\t\t\t\treturn &MockCommand{\n\t\t\t\t\tHelpText:  \"This command is accessed by using one of the subcommands below.\",\n\t\t\t\t\tRunResult: RunResultHelp,\n\t\t\t\t}, nil\n\t\t\t}\n\n\t\t\tc.commandTree.Insert(k, f)\n\t\t}\n\t}\n\n\t// Setup autocomplete if we have it enabled. We have to do this after\n\t// the command tree is setup so we can use the radix tree to easily find\n\t// all subcommands.\n\tif c.Autocomplete {\n\t\tc.initAutocomplete()\n\t}\n\n\t// Process the args\n\tc.processArgs()\n}\n\nfunc (c *CLI) initAutocomplete() {\n\tif c.AutocompleteInstall == \"\" {\n\t\tc.AutocompleteInstall = defaultAutocompleteInstall\n\t}\n\n\tif c.AutocompleteUninstall == \"\" {\n\t\tc.AutocompleteUninstall = defaultAutocompleteUninstall\n\t}\n\n\tif c.autocompleteInstaller == nil {\n\t\tc.autocompleteInstaller = &realAutocompleteInstaller{}\n\t}\n\n\t// Build the root command\n\tcmd := c.initAutocompleteSub(\"\")\n\n\t// For the root, we add the global flags to the \"Flags\". This way\n\t// they don't show up on every command.\n\tif !c.AutocompleteNoDefaultFlags {\n\t\tcmd.Flags = map[string]complete.Predictor{\n\t\t\t\"-\" + c.AutocompleteInstall:   complete.PredictNothing,\n\t\t\t\"-\" + c.AutocompleteUninstall: complete.PredictNothing,\n\t\t\t\"-help\":    complete.PredictNothing,\n\t\t\t\"-version\": complete.PredictNothing,\n\t\t}\n\t}\n\tcmd.GlobalFlags = c.AutocompleteGlobalFlags\n\n\tc.autocomplete = complete.New(c.Name, cmd)\n}\n\n// initAutocompleteSub creates the complete.Command for a subcommand with\n// the given prefix. This will continue recursively for all subcommands.\n// The prefix \"\" (empty string) can be used for the root command.\nfunc (c *CLI) initAutocompleteSub(prefix string) complete.Command {\n\tvar cmd complete.Command\n\twalkFn := func(k string, raw interface{}) bool {\n\t\t// Ignore the empty key which can be present for default commands.\n\t\tif k == \"\" {\n\t\t\treturn false\n\t\t}\n\n\t\t// Keep track of the full key so that we can nest further if necessary\n\t\tfullKey := k\n\n\t\tif len(prefix) > 0 {\n\t\t\t// If we have a prefix, trim the prefix + 1 (for the space)\n\t\t\t// Example: turns \"sub one\" to \"one\" with prefix \"sub\"\n\t\t\tk = k[len(prefix)+1:]\n\t\t}\n\n\t\tif idx := strings.Index(k, \" \"); idx >= 0 {\n\t\t\t// If there is a space, we trim up to the space. This turns\n\t\t\t// \"sub sub2 sub3\" into \"sub\". The prefix trim above will\n\t\t\t// trim our current depth properly.\n\t\t\tk = k[:idx]\n\t\t}\n\n\t\tif _, ok := cmd.Sub[k]; ok {\n\t\t\t// If we already tracked this subcommand then ignore\n\t\t\treturn false\n\t\t}\n\n\t\t// If the command is hidden, don't record it at all\n\t\tif _, ok := c.commandHidden[fullKey]; ok {\n\t\t\treturn false\n\t\t}\n\n\t\tif cmd.Sub == nil {\n\t\t\tcmd.Sub = complete.Commands(make(map[string]complete.Command))\n\t\t}\n\t\tsubCmd := c.initAutocompleteSub(fullKey)\n\n\t\t// Instantiate the command so that we can check if the command is\n\t\t// a CommandAutocomplete implementation. If there is an error\n\t\t// creating the command, we just ignore it since that will be caught\n\t\t// later.\n\t\timpl, err := raw.(CommandFactory)()\n\t\tif err != nil {\n\t\t\timpl = nil\n\t\t}\n\n\t\t// Check if it implements ComandAutocomplete. If so, setup the autocomplete\n\t\tif c, ok := impl.(CommandAutocomplete); ok {\n\t\t\tsubCmd.Args = c.AutocompleteArgs()\n\t\t\tsubCmd.Flags = c.AutocompleteFlags()\n\t\t}\n\n\t\tcmd.Sub[k] = subCmd\n\t\treturn false\n\t}\n\n\twalkPrefix := prefix\n\tif walkPrefix != \"\" {\n\t\twalkPrefix += \" \"\n\t}\n\n\tc.commandTree.WalkPrefix(walkPrefix, walkFn)\n\treturn cmd\n}\n\nfunc (c *CLI) commandHelp(command Command) {\n\t// Get the template to use\n\ttpl := strings.TrimSpace(defaultHelpTemplate)\n\tif t, ok := command.(CommandHelpTemplate); ok {\n\t\ttpl = t.HelpTemplate()\n\t}\n\tif !strings.HasSuffix(tpl, \"\\n\") {\n\t\ttpl += \"\\n\"\n\t}\n\n\t// Parse it\n\tt, err := template.New(\"root\").Parse(tpl)\n\tif err != nil {\n\t\tt = template.Must(template.New(\"root\").Parse(fmt.Sprintf(\n\t\t\t\"Internal error! Failed to parse command help template: %s\\n\", err)))\n\t}\n\n\t// Template data\n\tdata := map[string]interface{}{\n\t\t\"Name\": c.Name,\n\t\t\"Help\": command.Help(),\n\t}\n\n\t// Build subcommand list if we have it\n\tvar subcommandsTpl []map[string]interface{}\n\tif c.commandNested {\n\t\t// Get the matching keys\n\t\tsubcommands := c.helpCommands(c.Subcommand())\n\t\tkeys := make([]string, 0, len(subcommands))\n\t\tfor k := range subcommands {\n\t\t\tkeys = append(keys, k)\n\t\t}\n\n\t\t// Sort the keys\n\t\tsort.Strings(keys)\n\n\t\t// Figure out the padding length\n\t\tvar longest int\n\t\tfor _, k := range keys {\n\t\t\tif v := len(k); v > longest {\n\t\t\t\tlongest = v\n\t\t\t}\n\t\t}\n\n\t\t// Go through and create their structures\n\t\tsubcommandsTpl = make([]map[string]interface{}, 0, len(subcommands))\n\t\tfor _, k := range keys {\n\t\t\t// Get the command\n\t\t\traw, ok := subcommands[k]\n\t\t\tif !ok {\n\t\t\t\tc.HelpWriter.Write([]byte(fmt.Sprintf(\n\t\t\t\t\t\"Error getting subcommand %q\", k)))\n\t\t\t}\n\t\t\tsub, err := raw()\n\t\t\tif err != nil {\n\t\t\t\tc.HelpWriter.Write([]byte(fmt.Sprintf(\n\t\t\t\t\t\"Error instantiating %q: %s\", k, err)))\n\t\t\t}\n\n\t\t\t// Find the last space and make sure we only include that last part\n\t\t\tname := k\n\t\t\tif idx := strings.LastIndex(k, \" \"); idx > -1 {\n\t\t\t\tname = name[idx+1:]\n\t\t\t}\n\n\t\t\tsubcommandsTpl = append(subcommandsTpl, map[string]interface{}{\n\t\t\t\t\"Name\":        name,\n\t\t\t\t\"NameAligned\": name + strings.Repeat(\" \", longest-len(k)),\n\t\t\t\t\"Help\":        sub.Help(),\n\t\t\t\t\"Synopsis\":    sub.Synopsis(),\n\t\t\t})\n\t\t}\n\t}\n\tdata[\"Subcommands\"] = subcommandsTpl\n\n\t// Write\n\terr = t.Execute(c.HelpWriter, data)\n\tif err == nil {\n\t\treturn\n\t}\n\n\t// An error, just output...\n\tc.HelpWriter.Write([]byte(fmt.Sprintf(\n\t\t\"Internal error rendering help: %s\", err)))\n}\n\n// helpCommands returns the subcommands for the HelpFunc argument.\n// This will only contain immediate subcommands.\nfunc (c *CLI) helpCommands(prefix string) map[string]CommandFactory {\n\t// If our prefix isn't empty, make sure it ends in ' '\n\tif prefix != \"\" && prefix[len(prefix)-1] != ' ' {\n\t\tprefix += \" \"\n\t}\n\n\t// Get all the subkeys of this command\n\tvar keys []string\n\tc.commandTree.WalkPrefix(prefix, func(k string, raw interface{}) bool {\n\t\t// Ignore any sub-sub keys, i.e. \"foo bar baz\" when we want \"foo bar\"\n\t\tif !strings.Contains(k[len(prefix):], \" \") {\n\t\t\tkeys = append(keys, k)\n\t\t}\n\n\t\treturn false\n\t})\n\n\t// For each of the keys return that in the map\n\tresult := make(map[string]CommandFactory, len(keys))\n\tfor _, k := range keys {\n\t\traw, ok := c.commandTree.Get(k)\n\t\tif !ok {\n\t\t\t// We just got it via WalkPrefix above, so we just panic\n\t\t\tpanic(\"not found: \" + k)\n\t\t}\n\n\t\t// If this is a hidden command, don't show it\n\t\tif _, ok := c.commandHidden[k]; ok {\n\t\t\tcontinue\n\t\t}\n\n\t\tresult[k] = raw.(CommandFactory)\n\t}\n\n\treturn result\n}\n\nfunc (c *CLI) processArgs() {\n\tfor i, arg := range c.Args {\n\t\tif arg == \"--\" {\n\t\t\tbreak\n\t\t}\n\n\t\t// Check for help flags.\n\t\tif arg == \"-h\" || arg == \"-help\" || arg == \"--help\" {\n\t\t\tc.isHelp = true\n\t\t\tcontinue\n\t\t}\n\n\t\t// Check for autocomplete flags\n\t\tif c.Autocomplete {\n\t\t\tif arg == \"-\"+c.AutocompleteInstall || arg == \"--\"+c.AutocompleteInstall {\n\t\t\t\tc.isAutocompleteInstall = true\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif arg == \"-\"+c.AutocompleteUninstall || arg == \"--\"+c.AutocompleteUninstall {\n\t\t\t\tc.isAutocompleteUninstall = true\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\tif c.subcommand == \"\" {\n\t\t\t// Check for version flags if not in a subcommand.\n\t\t\tif arg == \"-v\" || arg == \"-version\" || arg == \"--version\" {\n\t\t\t\tc.isVersion = true\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif arg != \"\" && arg[0] == '-' {\n\t\t\t\t// Record the arg...\n\t\t\t\tc.topFlags = append(c.topFlags, arg)\n\t\t\t}\n\t\t}\n\n\t\t// If we didn't find a subcommand yet and this is the first non-flag\n\t\t// argument, then this is our subcommand.\n\t\tif c.subcommand == \"\" && arg != \"\" && arg[0] != '-' {\n\t\t\tc.subcommand = arg\n\t\t\tif c.commandNested {\n\t\t\t\t// If the command has a space in it, then it is invalid.\n\t\t\t\t// Set a blank command so that it fails.\n\t\t\t\tif strings.ContainsRune(arg, ' ') {\n\t\t\t\t\tc.subcommand = \"\"\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\t// Determine the argument we look to to end subcommands.\n\t\t\t\t// We look at all arguments until one has a space. This\n\t\t\t\t// disallows commands like: ./cli foo \"bar baz\". An argument\n\t\t\t\t// with a space is always an argument.\n\t\t\t\tj := 0\n\t\t\t\tfor k, v := range c.Args[i:] {\n\t\t\t\t\tif strings.ContainsRune(v, ' ') {\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\n\t\t\t\t\tj = i + k + 1\n\t\t\t\t}\n\n\t\t\t\t// Nested CLI, the subcommand is actually the entire\n\t\t\t\t// arg list up to a flag that is still a valid subcommand.\n\t\t\t\tsearchKey := strings.Join(c.Args[i:j], \" \")\n\t\t\t\tk, _, ok := c.commandTree.LongestPrefix(searchKey)\n\t\t\t\tif ok {\n\t\t\t\t\t// k could be a prefix that doesn't contain the full\n\t\t\t\t\t// command such as \"foo\" instead of \"foobar\", so we\n\t\t\t\t\t// need to verify that we have an entire key. To do that,\n\t\t\t\t\t// we look for an ending in a space or an end of string.\n\t\t\t\t\treVerify := regexp.MustCompile(regexp.QuoteMeta(k) + `( |$)`)\n\t\t\t\t\tif reVerify.MatchString(searchKey) {\n\t\t\t\t\t\tc.subcommand = k\n\t\t\t\t\t\ti += strings.Count(k, \" \")\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// The remaining args the subcommand arguments\n\t\t\tc.subcommandArgs = c.Args[i+1:]\n\t\t}\n\t}\n\n\t// If we never found a subcommand and support a default command, then\n\t// switch to using that.\n\tif c.subcommand == \"\" {\n\t\tif _, ok := c.Commands[\"\"]; ok {\n\t\t\targs := c.topFlags\n\t\t\targs = append(args, c.subcommandArgs...)\n\t\t\tc.topFlags = nil\n\t\t\tc.subcommandArgs = args\n\t\t}\n\t}\n}\n\n// defaultAutocompleteInstall and defaultAutocompleteUninstall are the\n// default values for the autocomplete install and uninstall flags.\nconst defaultAutocompleteInstall = \"autocomplete-install\"\nconst defaultAutocompleteUninstall = \"autocomplete-uninstall\"\n\nconst defaultHelpTemplate = `\n{{.Help}}{{if gt (len .Subcommands) 0}}\n\nSubcommands:\n{{- range $value := .Subcommands }}\n    {{ $value.NameAligned }}    {{ $value.Synopsis }}{{ end }}\n{{- end }}\n`\n"
  },
  {
    "path": "vendor/github.com/mitchellh/cli/command.go",
    "content": "package cli\n\nimport (\n\t\"github.com/posener/complete\"\n)\n\nconst (\n\t// RunResultHelp is a value that can be returned from Run to signal\n\t// to the CLI to render the help output.\n\tRunResultHelp = -18511\n)\n\n// A command is a runnable sub-command of a CLI.\ntype Command interface {\n\t// Help should return long-form help text that includes the command-line\n\t// usage, a brief few sentences explaining the function of the command,\n\t// and the complete list of flags the command accepts.\n\tHelp() string\n\n\t// Run should run the actual command with the given CLI instance and\n\t// command-line arguments. It should return the exit status when it is\n\t// finished.\n\t//\n\t// There are a handful of special exit codes this can return documented\n\t// above that change behavior.\n\tRun(args []string) int\n\n\t// Synopsis should return a one-line, short synopsis of the command.\n\t// This should be less than 50 characters ideally.\n\tSynopsis() string\n}\n\n// CommandAutocomplete is an extension of Command that enables fine-grained\n// autocompletion. Subcommand autocompletion will work even if this interface\n// is not implemented. By implementing this interface, more advanced\n// autocompletion is enabled.\ntype CommandAutocomplete interface {\n\t// AutocompleteArgs returns the argument predictor for this command.\n\t// If argument completion is not supported, this should return\n\t// complete.PredictNothing.\n\tAutocompleteArgs() complete.Predictor\n\n\t// AutocompleteFlags returns a mapping of supported flags and autocomplete\n\t// options for this command. The map key for the Flags map should be the\n\t// complete flag such as \"-foo\" or \"--foo\".\n\tAutocompleteFlags() complete.Flags\n}\n\n// CommandHelpTemplate is an extension of Command that also has a function\n// for returning a template for the help rather than the help itself. In\n// this scenario, both Help and HelpTemplate should be implemented.\n//\n// If CommandHelpTemplate isn't implemented, the Help is output as-is.\ntype CommandHelpTemplate interface {\n\t// HelpTemplate is the template in text/template format to use for\n\t// displaying the Help. The keys available are:\n\t//\n\t//   * \".Help\" - The help text itself\n\t//   * \".Subcommands\"\n\t//\n\tHelpTemplate() string\n}\n\n// CommandFactory is a type of function that is a factory for commands.\n// We need a factory because we may need to setup some state on the\n// struct that implements the command itself.\ntype CommandFactory func() (Command, error)\n"
  },
  {
    "path": "vendor/github.com/mitchellh/cli/command_mock.go",
    "content": "package cli\n\nimport (\n\t\"github.com/posener/complete\"\n)\n\n// MockCommand is an implementation of Command that can be used for tests.\n// It is publicly exported from this package in case you want to use it\n// externally.\ntype MockCommand struct {\n\t// Settable\n\tHelpText     string\n\tRunResult    int\n\tSynopsisText string\n\n\t// Set by the command\n\tRunCalled bool\n\tRunArgs   []string\n}\n\nfunc (c *MockCommand) Help() string {\n\treturn c.HelpText\n}\n\nfunc (c *MockCommand) Run(args []string) int {\n\tc.RunCalled = true\n\tc.RunArgs = args\n\n\treturn c.RunResult\n}\n\nfunc (c *MockCommand) Synopsis() string {\n\treturn c.SynopsisText\n}\n\n// MockCommandAutocomplete is an implementation of CommandAutocomplete.\ntype MockCommandAutocomplete struct {\n\tMockCommand\n\n\t// Settable\n\tAutocompleteArgsValue  complete.Predictor\n\tAutocompleteFlagsValue complete.Flags\n}\n\nfunc (c *MockCommandAutocomplete) AutocompleteArgs() complete.Predictor {\n\treturn c.AutocompleteArgsValue\n}\n\nfunc (c *MockCommandAutocomplete) AutocompleteFlags() complete.Flags {\n\treturn c.AutocompleteFlagsValue\n}\n\n// MockCommandHelpTemplate is an implementation of CommandHelpTemplate.\ntype MockCommandHelpTemplate struct {\n\tMockCommand\n\n\t// Settable\n\tHelpTemplateText string\n}\n\nfunc (c *MockCommandHelpTemplate) HelpTemplate() string {\n\treturn c.HelpTemplateText\n}\n"
  },
  {
    "path": "vendor/github.com/mitchellh/cli/help.go",
    "content": "package cli\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"log\"\n\t\"sort\"\n\t\"strings\"\n)\n\n// HelpFunc is the type of the function that is responsible for generating\n// the help output when the CLI must show the general help text.\ntype HelpFunc func(map[string]CommandFactory) string\n\n// BasicHelpFunc generates some basic help output that is usually good enough\n// for most CLI applications.\nfunc BasicHelpFunc(app string) HelpFunc {\n\treturn func(commands map[string]CommandFactory) string {\n\t\tvar buf bytes.Buffer\n\t\tbuf.WriteString(fmt.Sprintf(\n\t\t\t\"Usage: %s [--version] [--help] <command> [<args>]\\n\\n\",\n\t\t\tapp))\n\t\tbuf.WriteString(\"Available commands are:\\n\")\n\n\t\t// Get the list of keys so we can sort them, and also get the maximum\n\t\t// key length so they can be aligned properly.\n\t\tkeys := make([]string, 0, len(commands))\n\t\tmaxKeyLen := 0\n\t\tfor key := range commands {\n\t\t\tif len(key) > maxKeyLen {\n\t\t\t\tmaxKeyLen = len(key)\n\t\t\t}\n\n\t\t\tkeys = append(keys, key)\n\t\t}\n\t\tsort.Strings(keys)\n\n\t\tfor _, key := range keys {\n\t\t\tcommandFunc, ok := commands[key]\n\t\t\tif !ok {\n\t\t\t\t// This should never happen since we JUST built the list of\n\t\t\t\t// keys.\n\t\t\t\tpanic(\"command not found: \" + key)\n\t\t\t}\n\n\t\t\tcommand, err := commandFunc()\n\t\t\tif err != nil {\n\t\t\t\tlog.Printf(\"[ERR] cli: Command '%s' failed to load: %s\",\n\t\t\t\t\tkey, err)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tkey = fmt.Sprintf(\"%s%s\", key, strings.Repeat(\" \", maxKeyLen-len(key)))\n\t\t\tbuf.WriteString(fmt.Sprintf(\"    %s    %s\\n\", key, command.Synopsis()))\n\t\t}\n\n\t\treturn buf.String()\n\t}\n}\n\n// FilteredHelpFunc will filter the commands to only include the keys\n// in the include parameter.\nfunc FilteredHelpFunc(include []string, f HelpFunc) HelpFunc {\n\treturn func(commands map[string]CommandFactory) string {\n\t\tset := make(map[string]struct{})\n\t\tfor _, k := range include {\n\t\t\tset[k] = struct{}{}\n\t\t}\n\n\t\tfiltered := make(map[string]CommandFactory)\n\t\tfor k, f := range commands {\n\t\t\tif _, ok := set[k]; ok {\n\t\t\t\tfiltered[k] = f\n\t\t\t}\n\t\t}\n\n\t\treturn f(filtered)\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/mitchellh/cli/ui.go",
    "content": "package cli\n\nimport (\n\t\"bufio\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"os/signal\"\n\t\"strings\"\n\n\t\"github.com/bgentry/speakeasy\"\n\t\"github.com/mattn/go-isatty\"\n)\n\n// Ui is an interface for interacting with the terminal, or \"interface\"\n// of a CLI. This abstraction doesn't have to be used, but helps provide\n// a simple, layerable way to manage user interactions.\ntype Ui interface {\n\t// Ask asks the user for input using the given query. The response is\n\t// returned as the given string, or an error.\n\tAsk(string) (string, error)\n\n\t// AskSecret asks the user for input using the given query, but does not echo\n\t// the keystrokes to the terminal.\n\tAskSecret(string) (string, error)\n\n\t// Output is called for normal standard output.\n\tOutput(string)\n\n\t// Info is called for information related to the previous output.\n\t// In general this may be the exact same as Output, but this gives\n\t// Ui implementors some flexibility with output formats.\n\tInfo(string)\n\n\t// Error is used for any error messages that might appear on standard\n\t// error.\n\tError(string)\n\n\t// Warn is used for any warning messages that might appear on standard\n\t// error.\n\tWarn(string)\n}\n\n// BasicUi is an implementation of Ui that just outputs to the given\n// writer. This UI is not threadsafe by default, but you can wrap it\n// in a ConcurrentUi to make it safe.\ntype BasicUi struct {\n\tReader      io.Reader\n\tWriter      io.Writer\n\tErrorWriter io.Writer\n}\n\nfunc (u *BasicUi) Ask(query string) (string, error) {\n\treturn u.ask(query, false)\n}\n\nfunc (u *BasicUi) AskSecret(query string) (string, error) {\n\treturn u.ask(query, true)\n}\n\nfunc (u *BasicUi) ask(query string, secret bool) (string, error) {\n\tif _, err := fmt.Fprint(u.Writer, query+\" \"); err != nil {\n\t\treturn \"\", err\n\t}\n\n\t// Register for interrupts so that we can catch it and immediately\n\t// return...\n\tsigCh := make(chan os.Signal, 1)\n\tsignal.Notify(sigCh, os.Interrupt)\n\tdefer signal.Stop(sigCh)\n\n\t// Ask for input in a go-routine so that we can ignore it.\n\terrCh := make(chan error, 1)\n\tlineCh := make(chan string, 1)\n\tgo func() {\n\t\tvar line string\n\t\tvar err error\n\t\tif secret && isatty.IsTerminal(os.Stdin.Fd()) {\n\t\t\tline, err = speakeasy.Ask(\"\")\n\t\t} else {\n\t\t\tr := bufio.NewReader(u.Reader)\n\t\t\tline, err = r.ReadString('\\n')\n\t\t}\n\t\tif err != nil {\n\t\t\terrCh <- err\n\t\t\treturn\n\t\t}\n\n\t\tlineCh <- strings.TrimRight(line, \"\\r\\n\")\n\t}()\n\n\tselect {\n\tcase err := <-errCh:\n\t\treturn \"\", err\n\tcase line := <-lineCh:\n\t\treturn line, nil\n\tcase <-sigCh:\n\t\t// Print a newline so that any further output starts properly\n\t\t// on a new line.\n\t\tfmt.Fprintln(u.Writer)\n\n\t\treturn \"\", errors.New(\"interrupted\")\n\t}\n}\n\nfunc (u *BasicUi) Error(message string) {\n\tw := u.Writer\n\tif u.ErrorWriter != nil {\n\t\tw = u.ErrorWriter\n\t}\n\n\tfmt.Fprint(w, message)\n\tfmt.Fprint(w, \"\\n\")\n}\n\nfunc (u *BasicUi) Info(message string) {\n\tu.Output(message)\n}\n\nfunc (u *BasicUi) Output(message string) {\n\tfmt.Fprint(u.Writer, message)\n\tfmt.Fprint(u.Writer, \"\\n\")\n}\n\nfunc (u *BasicUi) Warn(message string) {\n\tu.Error(message)\n}\n\n// PrefixedUi is an implementation of Ui that prefixes messages.\ntype PrefixedUi struct {\n\tAskPrefix       string\n\tAskSecretPrefix string\n\tOutputPrefix    string\n\tInfoPrefix      string\n\tErrorPrefix     string\n\tWarnPrefix      string\n\tUi              Ui\n}\n\nfunc (u *PrefixedUi) Ask(query string) (string, error) {\n\tif query != \"\" {\n\t\tquery = fmt.Sprintf(\"%s%s\", u.AskPrefix, query)\n\t}\n\n\treturn u.Ui.Ask(query)\n}\n\nfunc (u *PrefixedUi) AskSecret(query string) (string, error) {\n\tif query != \"\" {\n\t\tquery = fmt.Sprintf(\"%s%s\", u.AskSecretPrefix, query)\n\t}\n\n\treturn u.Ui.AskSecret(query)\n}\n\nfunc (u *PrefixedUi) Error(message string) {\n\tif message != \"\" {\n\t\tmessage = fmt.Sprintf(\"%s%s\", u.ErrorPrefix, message)\n\t}\n\n\tu.Ui.Error(message)\n}\n\nfunc (u *PrefixedUi) Info(message string) {\n\tif message != \"\" {\n\t\tmessage = fmt.Sprintf(\"%s%s\", u.InfoPrefix, message)\n\t}\n\n\tu.Ui.Info(message)\n}\n\nfunc (u *PrefixedUi) Output(message string) {\n\tif message != \"\" {\n\t\tmessage = fmt.Sprintf(\"%s%s\", u.OutputPrefix, message)\n\t}\n\n\tu.Ui.Output(message)\n}\n\nfunc (u *PrefixedUi) Warn(message string) {\n\tif message != \"\" {\n\t\tmessage = fmt.Sprintf(\"%s%s\", u.WarnPrefix, message)\n\t}\n\n\tu.Ui.Warn(message)\n}\n"
  },
  {
    "path": "vendor/github.com/mitchellh/cli/ui_colored.go",
    "content": "package cli\n\nimport (\n\t\"github.com/fatih/color\"\n)\n\nconst (\n\tnoColor = -1\n)\n\n// UiColor is a posix shell color code to use.\ntype UiColor struct {\n\tCode int\n\tBold bool\n}\n\n// A list of colors that are useful. These are all non-bolded by default.\nvar (\n\tUiColorNone    UiColor = UiColor{noColor, false}\n\tUiColorRed             = UiColor{int(color.FgHiRed), false}\n\tUiColorGreen           = UiColor{int(color.FgHiGreen), false}\n\tUiColorYellow          = UiColor{int(color.FgHiYellow), false}\n\tUiColorBlue            = UiColor{int(color.FgHiBlue), false}\n\tUiColorMagenta         = UiColor{int(color.FgHiMagenta), false}\n\tUiColorCyan            = UiColor{int(color.FgHiCyan), false}\n)\n\n// ColoredUi is a Ui implementation that colors its output according\n// to the given color schemes for the given type of output.\ntype ColoredUi struct {\n\tOutputColor UiColor\n\tInfoColor   UiColor\n\tErrorColor  UiColor\n\tWarnColor   UiColor\n\tUi          Ui\n}\n\nfunc (u *ColoredUi) Ask(query string) (string, error) {\n\treturn u.Ui.Ask(u.colorize(query, u.OutputColor))\n}\n\nfunc (u *ColoredUi) AskSecret(query string) (string, error) {\n\treturn u.Ui.AskSecret(u.colorize(query, u.OutputColor))\n}\n\nfunc (u *ColoredUi) Output(message string) {\n\tu.Ui.Output(u.colorize(message, u.OutputColor))\n}\n\nfunc (u *ColoredUi) Info(message string) {\n\tu.Ui.Info(u.colorize(message, u.InfoColor))\n}\n\nfunc (u *ColoredUi) Error(message string) {\n\tu.Ui.Error(u.colorize(message, u.ErrorColor))\n}\n\nfunc (u *ColoredUi) Warn(message string) {\n\tu.Ui.Warn(u.colorize(message, u.WarnColor))\n}\n\nfunc (u *ColoredUi) colorize(message string, uc UiColor) string {\n\tif uc.Code == noColor {\n\t\treturn message\n\t}\n\n\tattr := []color.Attribute{color.Attribute(uc.Code)}\n\tif uc.Bold {\n\t\tattr = append(attr, color.Bold)\n\t}\n\n\treturn color.New(attr...).SprintFunc()(message)\n}\n"
  },
  {
    "path": "vendor/github.com/mitchellh/cli/ui_concurrent.go",
    "content": "package cli\n\nimport (\n\t\"sync\"\n)\n\n// ConcurrentUi is a wrapper around a Ui interface (and implements that\n// interface) making the underlying Ui concurrency safe.\ntype ConcurrentUi struct {\n\tUi Ui\n\tl  sync.Mutex\n}\n\nfunc (u *ConcurrentUi) Ask(query string) (string, error) {\n\tu.l.Lock()\n\tdefer u.l.Unlock()\n\n\treturn u.Ui.Ask(query)\n}\n\nfunc (u *ConcurrentUi) AskSecret(query string) (string, error) {\n\tu.l.Lock()\n\tdefer u.l.Unlock()\n\n\treturn u.Ui.AskSecret(query)\n}\n\nfunc (u *ConcurrentUi) Error(message string) {\n\tu.l.Lock()\n\tdefer u.l.Unlock()\n\n\tu.Ui.Error(message)\n}\n\nfunc (u *ConcurrentUi) Info(message string) {\n\tu.l.Lock()\n\tdefer u.l.Unlock()\n\n\tu.Ui.Info(message)\n}\n\nfunc (u *ConcurrentUi) Output(message string) {\n\tu.l.Lock()\n\tdefer u.l.Unlock()\n\n\tu.Ui.Output(message)\n}\n\nfunc (u *ConcurrentUi) Warn(message string) {\n\tu.l.Lock()\n\tdefer u.l.Unlock()\n\n\tu.Ui.Warn(message)\n}\n"
  },
  {
    "path": "vendor/github.com/mitchellh/cli/ui_mock.go",
    "content": "package cli\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"sync\"\n)\n\n// NewMockUi returns a fully initialized MockUi instance\n// which is safe for concurrent use.\nfunc NewMockUi() *MockUi {\n\tm := new(MockUi)\n\tm.once.Do(m.init)\n\treturn m\n}\n\n// MockUi is a mock UI that is used for tests and is exported publicly\n// for use in external tests if needed as well. Do not instantite this\n// directly since the buffers will be initialized on the first write. If\n// there is no write then you will get a nil panic. Please use the\n// NewMockUi() constructor function instead. You can fix your code with\n//\n//  sed -i -e 's/new(cli.MockUi)/cli.NewMockUi()/g' *_test.go\ntype MockUi struct {\n\tInputReader  io.Reader\n\tErrorWriter  *syncBuffer\n\tOutputWriter *syncBuffer\n\n\tonce sync.Once\n}\n\nfunc (u *MockUi) Ask(query string) (string, error) {\n\tu.once.Do(u.init)\n\n\tvar result string\n\tfmt.Fprint(u.OutputWriter, query)\n\tif _, err := fmt.Fscanln(u.InputReader, &result); err != nil {\n\t\treturn \"\", err\n\t}\n\n\treturn result, nil\n}\n\nfunc (u *MockUi) AskSecret(query string) (string, error) {\n\treturn u.Ask(query)\n}\n\nfunc (u *MockUi) Error(message string) {\n\tu.once.Do(u.init)\n\n\tfmt.Fprint(u.ErrorWriter, message)\n\tfmt.Fprint(u.ErrorWriter, \"\\n\")\n}\n\nfunc (u *MockUi) Info(message string) {\n\tu.Output(message)\n}\n\nfunc (u *MockUi) Output(message string) {\n\tu.once.Do(u.init)\n\n\tfmt.Fprint(u.OutputWriter, message)\n\tfmt.Fprint(u.OutputWriter, \"\\n\")\n}\n\nfunc (u *MockUi) Warn(message string) {\n\tu.once.Do(u.init)\n\n\tfmt.Fprint(u.ErrorWriter, message)\n\tfmt.Fprint(u.ErrorWriter, \"\\n\")\n}\n\nfunc (u *MockUi) init() {\n\tu.ErrorWriter = new(syncBuffer)\n\tu.OutputWriter = new(syncBuffer)\n}\n\ntype syncBuffer struct {\n\tsync.RWMutex\n\tb bytes.Buffer\n}\n\nfunc (b *syncBuffer) Write(data []byte) (int, error) {\n\tb.Lock()\n\tdefer b.Unlock()\n\treturn b.b.Write(data)\n}\n\nfunc (b *syncBuffer) Read(data []byte) (int, error) {\n\tb.RLock()\n\tdefer b.RUnlock()\n\treturn b.b.Read(data)\n}\n\nfunc (b *syncBuffer) Reset() {\n\tb.Lock()\n\tb.b.Reset()\n\tb.Unlock()\n}\n\nfunc (b *syncBuffer) String() string {\n\treturn string(b.Bytes())\n}\n\nfunc (b *syncBuffer) Bytes() []byte {\n\tb.RLock()\n\tdata := b.b.Bytes()\n\tb.RUnlock()\n\treturn data\n}\n"
  },
  {
    "path": "vendor/github.com/mitchellh/cli/ui_writer.go",
    "content": "package cli\n\n// UiWriter is an io.Writer implementation that can be used with\n// loggers that writes every line of log output data to a Ui at the\n// Info level.\ntype UiWriter struct {\n\tUi Ui\n}\n\nfunc (w *UiWriter) Write(p []byte) (n int, err error) {\n\tn = len(p)\n\tif n > 0 && p[n-1] == '\\n' {\n\t\tp = p[:n-1]\n\t}\n\n\tw.Ui.Info(string(p))\n\treturn n, nil\n}\n"
  },
  {
    "path": "vendor/github.com/mitchellh/colorstring/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2014 Mitchell Hashimoto\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "vendor/github.com/mitchellh/colorstring/colorstring.go",
    "content": "// colorstring provides functions for colorizing strings for terminal\n// output.\npackage colorstring\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"regexp\"\n\t\"strings\"\n)\n\n// Color colorizes your strings using the default settings.\n//\n// Strings given to Color should use the syntax `[color]` to specify the\n// color for text following. For example: `[blue]Hello` will return \"Hello\"\n// in blue. See DefaultColors for all the supported colors and attributes.\n//\n// If an unrecognized color is given, it is ignored and assumed to be part\n// of the string. For example: `[hi]world` will result in \"[hi]world\".\n//\n// A color reset is appended to the end of every string. This will reset\n// the color of following strings when you output this text to the same\n// terminal session.\n//\n// If you want to customize any of this behavior, use the Colorize struct.\nfunc Color(v string) string {\n\treturn def.Color(v)\n}\n\n// ColorPrefix returns the color sequence that prefixes the given text.\n//\n// This is useful when wrapping text if you want to inherit the color\n// of the wrapped text. For example, \"[green]foo\" will return \"[green]\".\n// If there is no color sequence, then this will return \"\".\nfunc ColorPrefix(v string) string {\n\treturn def.ColorPrefix(v)\n}\n\n// Colorize colorizes your strings, giving you the ability to customize\n// some of the colorization process.\n//\n// The options in Colorize can be set to customize colorization. If you're\n// only interested in the defaults, just use the top Color function directly,\n// which creates a default Colorize.\ntype Colorize struct {\n\t// Colors maps a color string to the code for that color. The code\n\t// is a string so that you can use more complex colors to set foreground,\n\t// background, attributes, etc. For example, \"boldblue\" might be\n\t// \"1;34\"\n\tColors map[string]string\n\n\t// If true, color attributes will be ignored. This is useful if you're\n\t// outputting to a location that doesn't support colors and you just\n\t// want the strings returned.\n\tDisable bool\n\n\t// Reset, if true, will reset the color after each colorization by\n\t// adding a reset code at the end.\n\tReset bool\n}\n\n// Color colorizes a string according to the settings setup in the struct.\n//\n// For more details on the syntax, see the top-level Color function.\nfunc (c *Colorize) Color(v string) string {\n\tmatches := parseRe.FindAllStringIndex(v, -1)\n\tif len(matches) == 0 {\n\t\treturn v\n\t}\n\n\tresult := new(bytes.Buffer)\n\tcolored := false\n\tm := []int{0, 0}\n\tfor _, nm := range matches {\n\t\t// Write the text in between this match and the last\n\t\tresult.WriteString(v[m[1]:nm[0]])\n\t\tm = nm\n\n\t\tvar replace string\n\t\tif code, ok := c.Colors[v[m[0]+1:m[1]-1]]; ok {\n\t\t\tcolored = true\n\n\t\t\tif !c.Disable {\n\t\t\t\treplace = fmt.Sprintf(\"\\033[%sm\", code)\n\t\t\t}\n\t\t} else {\n\t\t\treplace = v[m[0]:m[1]]\n\t\t}\n\n\t\tresult.WriteString(replace)\n\t}\n\tresult.WriteString(v[m[1]:])\n\n\tif colored && c.Reset && !c.Disable {\n\t\t// Write the clear byte at the end\n\t\tresult.WriteString(\"\\033[0m\")\n\t}\n\n\treturn result.String()\n}\n\n// ColorPrefix returns the first color sequence that exists in this string.\n//\n// For example: \"[green]foo\" would return \"[green]\". If no color sequence\n// exists, then \"\" is returned. This is especially useful when wrapping\n// colored texts to inherit the color of the wrapped text.\nfunc (c *Colorize) ColorPrefix(v string) string {\n\treturn prefixRe.FindString(strings.TrimSpace(v))\n}\n\n// DefaultColors are the default colors used when colorizing.\n//\n// If the color is surrounded in underscores, such as \"_blue_\", then that\n// color will be used for the background color.\nvar DefaultColors map[string]string\n\nfunc init() {\n\tDefaultColors = map[string]string{\n\t\t// Default foreground/background colors\n\t\t\"default\":   \"39\",\n\t\t\"_default_\": \"49\",\n\n\t\t// Foreground colors\n\t\t\"black\":         \"30\",\n\t\t\"red\":           \"31\",\n\t\t\"green\":         \"32\",\n\t\t\"yellow\":        \"33\",\n\t\t\"blue\":          \"34\",\n\t\t\"magenta\":       \"35\",\n\t\t\"cyan\":          \"36\",\n\t\t\"light_gray\":    \"37\",\n\t\t\"dark_gray\":     \"90\",\n\t\t\"light_red\":     \"91\",\n\t\t\"light_green\":   \"92\",\n\t\t\"light_yellow\":  \"93\",\n\t\t\"light_blue\":    \"94\",\n\t\t\"light_magenta\": \"95\",\n\t\t\"light_cyan\":    \"96\",\n\t\t\"white\":         \"97\",\n\n\t\t// Background colors\n\t\t\"_black_\":         \"40\",\n\t\t\"_red_\":           \"41\",\n\t\t\"_green_\":         \"42\",\n\t\t\"_yellow_\":        \"43\",\n\t\t\"_blue_\":          \"44\",\n\t\t\"_magenta_\":       \"45\",\n\t\t\"_cyan_\":          \"46\",\n\t\t\"_light_gray_\":    \"47\",\n\t\t\"_dark_gray_\":     \"100\",\n\t\t\"_light_red_\":     \"101\",\n\t\t\"_light_green_\":   \"102\",\n\t\t\"_light_yellow_\":  \"103\",\n\t\t\"_light_blue_\":    \"104\",\n\t\t\"_light_magenta_\": \"105\",\n\t\t\"_light_cyan_\":    \"106\",\n\t\t\"_white_\":         \"107\",\n\n\t\t// Attributes\n\t\t\"bold\":       \"1\",\n\t\t\"dim\":        \"2\",\n\t\t\"underline\":  \"4\",\n\t\t\"blink_slow\": \"5\",\n\t\t\"blink_fast\": \"6\",\n\t\t\"invert\":     \"7\",\n\t\t\"hidden\":     \"8\",\n\n\t\t// Reset to reset everything to their defaults\n\t\t\"reset\":      \"0\",\n\t\t\"reset_bold\": \"21\",\n\t}\n\n\tdef = Colorize{\n\t\tColors: DefaultColors,\n\t\tReset:  true,\n\t}\n}\n\nvar def Colorize\nvar parseReRaw = `\\[[a-z0-9_-]+\\]`\nvar parseRe = regexp.MustCompile(`(?i)` + parseReRaw)\nvar prefixRe = regexp.MustCompile(`^(?i)(` + parseReRaw + `)+`)\n\n// Print is a convenience wrapper for fmt.Print with support for color codes.\n//\n// Print formats using the default formats for its operands and writes to\n// standard output with support for color codes. Spaces are added between\n// operands when neither is a string. It returns the number of bytes written\n// and any write error encountered.\nfunc Print(a string) (n int, err error) {\n\treturn fmt.Print(Color(a))\n}\n\n// Println is a convenience wrapper for fmt.Println with support for color\n// codes.\n//\n// Println formats using the default formats for its operands and writes to\n// standard output with support for color codes. Spaces are always added\n// between operands and a newline is appended. It returns the number of bytes\n// written and any write error encountered.\nfunc Println(a string) (n int, err error) {\n\treturn fmt.Println(Color(a))\n}\n\n// Printf is a convenience wrapper for fmt.Printf with support for color codes.\n//\n// Printf formats according to a format specifier and writes to standard output\n// with support for color codes. It returns the number of bytes written and any\n// write error encountered.\nfunc Printf(format string, a ...interface{}) (n int, err error) {\n\treturn fmt.Printf(Color(format), a...)\n}\n\n// Fprint is a convenience wrapper for fmt.Fprint with support for color codes.\n//\n// Fprint formats using the default formats for its operands and writes to w\n// with support for color codes. Spaces are added between operands when neither\n// is a string. It returns the number of bytes written and any write error\n// encountered.\nfunc Fprint(w io.Writer, a string) (n int, err error) {\n\treturn fmt.Fprint(w, Color(a))\n}\n\n// Fprintln is a convenience wrapper for fmt.Fprintln with support for color\n// codes.\n//\n// Fprintln formats using the default formats for its operands and writes to w\n// with support for color codes. Spaces are always added between operands and a\n// newline is appended. It returns the number of bytes written and any write\n// error encountered.\nfunc Fprintln(w io.Writer, a string) (n int, err error) {\n\treturn fmt.Fprintln(w, Color(a))\n}\n\n// Fprintf is a convenience wrapper for fmt.Fprintf with support for color\n// codes.\n//\n// Fprintf formats according to a format specifier and writes to w with support\n// for color codes. It returns the number of bytes written and any write error\n// encountered.\nfunc Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error) {\n\treturn fmt.Fprintf(w, Color(format), a...)\n}\n"
  },
  {
    "path": "vendor/github.com/mitchellh/copystructure/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2014 Mitchell Hashimoto\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "vendor/github.com/mitchellh/copystructure/copier_time.go",
    "content": "package copystructure\n\nimport (\n\t\"reflect\"\n\t\"time\"\n)\n\nfunc init() {\n\tCopiers[reflect.TypeOf(time.Time{})] = timeCopier\n}\n\nfunc timeCopier(v interface{}) (interface{}, error) {\n\t// Just... copy it.\n\treturn v.(time.Time), nil\n}\n"
  },
  {
    "path": "vendor/github.com/mitchellh/copystructure/copystructure.go",
    "content": "package copystructure\n\nimport (\n\t\"errors\"\n\t\"reflect\"\n\t\"sync\"\n\n\t\"github.com/mitchellh/reflectwalk\"\n)\n\n// Copy returns a deep copy of v.\nfunc Copy(v interface{}) (interface{}, error) {\n\treturn Config{}.Copy(v)\n}\n\n// CopierFunc is a function that knows how to deep copy a specific type.\n// Register these globally with the Copiers variable.\ntype CopierFunc func(interface{}) (interface{}, error)\n\n// Copiers is a map of types that behave specially when they are copied.\n// If a type is found in this map while deep copying, this function\n// will be called to copy it instead of attempting to copy all fields.\n//\n// The key should be the type, obtained using: reflect.TypeOf(value with type).\n//\n// It is unsafe to write to this map after Copies have started. If you\n// are writing to this map while also copying, wrap all modifications to\n// this map as well as to Copy in a mutex.\nvar Copiers map[reflect.Type]CopierFunc = make(map[reflect.Type]CopierFunc)\n\n// Must is a helper that wraps a call to a function returning\n// (interface{}, error) and panics if the error is non-nil. It is intended\n// for use in variable initializations and should only be used when a copy\n// error should be a crashing case.\nfunc Must(v interface{}, err error) interface{} {\n\tif err != nil {\n\t\tpanic(\"copy error: \" + err.Error())\n\t}\n\n\treturn v\n}\n\nvar errPointerRequired = errors.New(\"Copy argument must be a pointer when Lock is true\")\n\ntype Config struct {\n\t// Lock any types that are a sync.Locker and are not a mutex while copying.\n\t// If there is an RLocker method, use that to get the sync.Locker.\n\tLock bool\n\n\t// Copiers is a map of types associated with a CopierFunc. Use the global\n\t// Copiers map if this is nil.\n\tCopiers map[reflect.Type]CopierFunc\n}\n\nfunc (c Config) Copy(v interface{}) (interface{}, error) {\n\tif c.Lock && reflect.ValueOf(v).Kind() != reflect.Ptr {\n\t\treturn nil, errPointerRequired\n\t}\n\n\tw := new(walker)\n\tif c.Lock {\n\t\tw.useLocks = true\n\t}\n\n\tif c.Copiers == nil {\n\t\tc.Copiers = Copiers\n\t}\n\n\terr := reflectwalk.Walk(v, w)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Get the result. If the result is nil, then we want to turn it\n\t// into a typed nil if we can.\n\tresult := w.Result\n\tif result == nil {\n\t\tval := reflect.ValueOf(v)\n\t\tresult = reflect.Indirect(reflect.New(val.Type())).Interface()\n\t}\n\n\treturn result, nil\n}\n\n// Return the key used to index interfaces types we've seen. Store the number\n// of pointers in the upper 32bits, and the depth in the lower 32bits. This is\n// easy to calculate, easy to match a key with our current depth, and we don't\n// need to deal with initializing and cleaning up nested maps or slices.\nfunc ifaceKey(pointers, depth int) uint64 {\n\treturn uint64(pointers)<<32 | uint64(depth)\n}\n\ntype walker struct {\n\tResult interface{}\n\n\tdepth       int\n\tignoreDepth int\n\tvals        []reflect.Value\n\tcs          []reflect.Value\n\n\t// This stores the number of pointers we've walked over, indexed by depth.\n\tps []int\n\n\t// If an interface is indirected by a pointer, we need to know the type of\n\t// interface to create when creating the new value.  Store the interface\n\t// types here, indexed by both the walk depth and the number of pointers\n\t// already seen at that depth. Use ifaceKey to calculate the proper uint64\n\t// value.\n\tifaceTypes map[uint64]reflect.Type\n\n\t// any locks we've taken, indexed by depth\n\tlocks []sync.Locker\n\t// take locks while walking the structure\n\tuseLocks bool\n}\n\nfunc (w *walker) Enter(l reflectwalk.Location) error {\n\tw.depth++\n\n\t// ensure we have enough elements to index via w.depth\n\tfor w.depth >= len(w.locks) {\n\t\tw.locks = append(w.locks, nil)\n\t}\n\n\tfor len(w.ps) < w.depth+1 {\n\t\tw.ps = append(w.ps, 0)\n\t}\n\n\treturn nil\n}\n\nfunc (w *walker) Exit(l reflectwalk.Location) error {\n\tlocker := w.locks[w.depth]\n\tw.locks[w.depth] = nil\n\tif locker != nil {\n\t\tdefer locker.Unlock()\n\t}\n\n\t// clear out pointers and interfaces as we exit the stack\n\tw.ps[w.depth] = 0\n\n\tfor k := range w.ifaceTypes {\n\t\tmask := uint64(^uint32(0))\n\t\tif k&mask == uint64(w.depth) {\n\t\t\tdelete(w.ifaceTypes, k)\n\t\t}\n\t}\n\n\tw.depth--\n\tif w.ignoreDepth > w.depth {\n\t\tw.ignoreDepth = 0\n\t}\n\n\tif w.ignoring() {\n\t\treturn nil\n\t}\n\n\tswitch l {\n\tcase reflectwalk.Array:\n\t\tfallthrough\n\tcase reflectwalk.Map:\n\t\tfallthrough\n\tcase reflectwalk.Slice:\n\t\tw.replacePointerMaybe()\n\n\t\t// Pop map off our container\n\t\tw.cs = w.cs[:len(w.cs)-1]\n\tcase reflectwalk.MapValue:\n\t\t// Pop off the key and value\n\t\tmv := w.valPop()\n\t\tmk := w.valPop()\n\t\tm := w.cs[len(w.cs)-1]\n\n\t\t// If mv is the zero value, SetMapIndex deletes the key form the map,\n\t\t// or in this case never adds it. We need to create a properly typed\n\t\t// zero value so that this key can be set.\n\t\tif !mv.IsValid() {\n\t\t\tmv = reflect.Zero(m.Elem().Type().Elem())\n\t\t}\n\t\tm.Elem().SetMapIndex(mk, mv)\n\tcase reflectwalk.ArrayElem:\n\t\t// Pop off the value and the index and set it on the array\n\t\tv := w.valPop()\n\t\ti := w.valPop().Interface().(int)\n\t\tif v.IsValid() {\n\t\t\ta := w.cs[len(w.cs)-1]\n\t\t\tae := a.Elem().Index(i) // storing array as pointer on stack - so need Elem() call\n\t\t\tif ae.CanSet() {\n\t\t\t\tae.Set(v)\n\t\t\t}\n\t\t}\n\tcase reflectwalk.SliceElem:\n\t\t// Pop off the value and the index and set it on the slice\n\t\tv := w.valPop()\n\t\ti := w.valPop().Interface().(int)\n\t\tif v.IsValid() {\n\t\t\ts := w.cs[len(w.cs)-1]\n\t\t\tse := s.Elem().Index(i)\n\t\t\tif se.CanSet() {\n\t\t\t\tse.Set(v)\n\t\t\t}\n\t\t}\n\tcase reflectwalk.Struct:\n\t\tw.replacePointerMaybe()\n\n\t\t// Remove the struct from the container stack\n\t\tw.cs = w.cs[:len(w.cs)-1]\n\tcase reflectwalk.StructField:\n\t\t// Pop off the value and the field\n\t\tv := w.valPop()\n\t\tf := w.valPop().Interface().(reflect.StructField)\n\t\tif v.IsValid() {\n\t\t\ts := w.cs[len(w.cs)-1]\n\t\t\tsf := reflect.Indirect(s).FieldByName(f.Name)\n\n\t\t\tif sf.CanSet() {\n\t\t\t\tsf.Set(v)\n\t\t\t}\n\t\t}\n\tcase reflectwalk.WalkLoc:\n\t\t// Clear out the slices for GC\n\t\tw.cs = nil\n\t\tw.vals = nil\n\t}\n\n\treturn nil\n}\n\nfunc (w *walker) Map(m reflect.Value) error {\n\tif w.ignoring() {\n\t\treturn nil\n\t}\n\tw.lock(m)\n\n\t// Create the map. If the map itself is nil, then just make a nil map\n\tvar newMap reflect.Value\n\tif m.IsNil() {\n\t\tnewMap = reflect.New(m.Type())\n\t} else {\n\t\tnewMap = wrapPtr(reflect.MakeMap(m.Type()))\n\t}\n\n\tw.cs = append(w.cs, newMap)\n\tw.valPush(newMap)\n\treturn nil\n}\n\nfunc (w *walker) MapElem(m, k, v reflect.Value) error {\n\treturn nil\n}\n\nfunc (w *walker) PointerEnter(v bool) error {\n\tif v {\n\t\tw.ps[w.depth]++\n\t}\n\treturn nil\n}\n\nfunc (w *walker) PointerExit(v bool) error {\n\tif v {\n\t\tw.ps[w.depth]--\n\t}\n\treturn nil\n}\n\nfunc (w *walker) Interface(v reflect.Value) error {\n\tif !v.IsValid() {\n\t\treturn nil\n\t}\n\tif w.ifaceTypes == nil {\n\t\tw.ifaceTypes = make(map[uint64]reflect.Type)\n\t}\n\n\tw.ifaceTypes[ifaceKey(w.ps[w.depth], w.depth)] = v.Type()\n\treturn nil\n}\n\nfunc (w *walker) Primitive(v reflect.Value) error {\n\tif w.ignoring() {\n\t\treturn nil\n\t}\n\tw.lock(v)\n\n\t// IsValid verifies the v is non-zero and CanInterface verifies\n\t// that we're allowed to read this value (unexported fields).\n\tvar newV reflect.Value\n\tif v.IsValid() && v.CanInterface() {\n\t\tnewV = reflect.New(v.Type())\n\t\tnewV.Elem().Set(v)\n\t}\n\n\tw.valPush(newV)\n\tw.replacePointerMaybe()\n\treturn nil\n}\n\nfunc (w *walker) Slice(s reflect.Value) error {\n\tif w.ignoring() {\n\t\treturn nil\n\t}\n\tw.lock(s)\n\n\tvar newS reflect.Value\n\tif s.IsNil() {\n\t\tnewS = reflect.New(s.Type())\n\t} else {\n\t\tnewS = wrapPtr(reflect.MakeSlice(s.Type(), s.Len(), s.Cap()))\n\t}\n\n\tw.cs = append(w.cs, newS)\n\tw.valPush(newS)\n\treturn nil\n}\n\nfunc (w *walker) SliceElem(i int, elem reflect.Value) error {\n\tif w.ignoring() {\n\t\treturn nil\n\t}\n\n\t// We don't write the slice here because elem might still be\n\t// arbitrarily complex. Just record the index and continue on.\n\tw.valPush(reflect.ValueOf(i))\n\n\treturn nil\n}\n\nfunc (w *walker) Array(a reflect.Value) error {\n\tif w.ignoring() {\n\t\treturn nil\n\t}\n\tw.lock(a)\n\n\tnewA := reflect.New(a.Type())\n\n\tw.cs = append(w.cs, newA)\n\tw.valPush(newA)\n\treturn nil\n}\n\nfunc (w *walker) ArrayElem(i int, elem reflect.Value) error {\n\tif w.ignoring() {\n\t\treturn nil\n\t}\n\n\t// We don't write the array here because elem might still be\n\t// arbitrarily complex. Just record the index and continue on.\n\tw.valPush(reflect.ValueOf(i))\n\n\treturn nil\n}\n\nfunc (w *walker) Struct(s reflect.Value) error {\n\tif w.ignoring() {\n\t\treturn nil\n\t}\n\tw.lock(s)\n\n\tvar v reflect.Value\n\tif c, ok := Copiers[s.Type()]; ok {\n\t\t// We have a Copier for this struct, so we use that copier to\n\t\t// get the copy, and we ignore anything deeper than this.\n\t\tw.ignoreDepth = w.depth\n\n\t\tdup, err := c(s.Interface())\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// We need to put a pointer to the value on the value stack,\n\t\t// so allocate a new pointer and set it.\n\t\tv = reflect.New(s.Type())\n\t\treflect.Indirect(v).Set(reflect.ValueOf(dup))\n\t} else {\n\t\t// No copier, we copy ourselves and allow reflectwalk to guide\n\t\t// us deeper into the structure for copying.\n\t\tv = reflect.New(s.Type())\n\t}\n\n\t// Push the value onto the value stack for setting the struct field,\n\t// and add the struct itself to the containers stack in case we walk\n\t// deeper so that its own fields can be modified.\n\tw.valPush(v)\n\tw.cs = append(w.cs, v)\n\n\treturn nil\n}\n\nfunc (w *walker) StructField(f reflect.StructField, v reflect.Value) error {\n\tif w.ignoring() {\n\t\treturn nil\n\t}\n\n\t// If PkgPath is non-empty, this is a private (unexported) field.\n\t// We do not set this unexported since the Go runtime doesn't allow us.\n\tif f.PkgPath != \"\" {\n\t\treturn reflectwalk.SkipEntry\n\t}\n\n\t// Push the field onto the stack, we'll handle it when we exit\n\t// the struct field in Exit...\n\tw.valPush(reflect.ValueOf(f))\n\treturn nil\n}\n\n// ignore causes the walker to ignore any more values until we exit this on\nfunc (w *walker) ignore() {\n\tw.ignoreDepth = w.depth\n}\n\nfunc (w *walker) ignoring() bool {\n\treturn w.ignoreDepth > 0 && w.depth >= w.ignoreDepth\n}\n\nfunc (w *walker) pointerPeek() bool {\n\treturn w.ps[w.depth] > 0\n}\n\nfunc (w *walker) valPop() reflect.Value {\n\tresult := w.vals[len(w.vals)-1]\n\tw.vals = w.vals[:len(w.vals)-1]\n\n\t// If we're out of values, that means we popped everything off. In\n\t// this case, we reset the result so the next pushed value becomes\n\t// the result.\n\tif len(w.vals) == 0 {\n\t\tw.Result = nil\n\t}\n\n\treturn result\n}\n\nfunc (w *walker) valPush(v reflect.Value) {\n\tw.vals = append(w.vals, v)\n\n\t// If we haven't set the result yet, then this is the result since\n\t// it is the first (outermost) value we're seeing.\n\tif w.Result == nil && v.IsValid() {\n\t\tw.Result = v.Interface()\n\t}\n}\n\nfunc (w *walker) replacePointerMaybe() {\n\t// Determine the last pointer value. If it is NOT a pointer, then\n\t// we need to push that onto the stack.\n\tif !w.pointerPeek() {\n\t\tw.valPush(reflect.Indirect(w.valPop()))\n\t\treturn\n\t}\n\n\tv := w.valPop()\n\n\t// If the expected type is a pointer to an interface of any depth,\n\t// such as *interface{}, **interface{}, etc., then we need to convert\n\t// the value \"v\" from *CONCRETE to *interface{} so types match for\n\t// Set.\n\t//\n\t// Example if v is type *Foo where Foo is a struct, v would become\n\t// *interface{} instead. This only happens if we have an interface expectation\n\t// at this depth.\n\t//\n\t// For more info, see GH-16\n\tif iType, ok := w.ifaceTypes[ifaceKey(w.ps[w.depth], w.depth)]; ok && iType.Kind() == reflect.Interface {\n\t\ty := reflect.New(iType)           // Create *interface{}\n\t\ty.Elem().Set(reflect.Indirect(v)) // Assign \"Foo\" to interface{} (dereferenced)\n\t\tv = y                             // v is now typed *interface{} (where *v = Foo)\n\t}\n\n\tfor i := 1; i < w.ps[w.depth]; i++ {\n\t\tif iType, ok := w.ifaceTypes[ifaceKey(w.ps[w.depth]-i, w.depth)]; ok {\n\t\t\tiface := reflect.New(iType).Elem()\n\t\t\tiface.Set(v)\n\t\t\tv = iface\n\t\t}\n\n\t\tp := reflect.New(v.Type())\n\t\tp.Elem().Set(v)\n\t\tv = p\n\t}\n\n\tw.valPush(v)\n}\n\n// if this value is a Locker, lock it and add it to the locks slice\nfunc (w *walker) lock(v reflect.Value) {\n\tif !w.useLocks {\n\t\treturn\n\t}\n\n\tif !v.IsValid() || !v.CanInterface() {\n\t\treturn\n\t}\n\n\ttype rlocker interface {\n\t\tRLocker() sync.Locker\n\t}\n\n\tvar locker sync.Locker\n\n\t// We can't call Interface() on a value directly, since that requires\n\t// a copy. This is OK, since the pointer to a value which is a sync.Locker\n\t// is also a sync.Locker.\n\tif v.Kind() == reflect.Ptr {\n\t\tswitch l := v.Interface().(type) {\n\t\tcase rlocker:\n\t\t\t// don't lock a mutex directly\n\t\t\tif _, ok := l.(*sync.RWMutex); !ok {\n\t\t\t\tlocker = l.RLocker()\n\t\t\t}\n\t\tcase sync.Locker:\n\t\t\tlocker = l\n\t\t}\n\t} else if v.CanAddr() {\n\t\tswitch l := v.Addr().Interface().(type) {\n\t\tcase rlocker:\n\t\t\t// don't lock a mutex directly\n\t\t\tif _, ok := l.(*sync.RWMutex); !ok {\n\t\t\t\tlocker = l.RLocker()\n\t\t\t}\n\t\tcase sync.Locker:\n\t\t\tlocker = l\n\t\t}\n\t}\n\n\t// still no callable locker\n\tif locker == nil {\n\t\treturn\n\t}\n\n\t// don't lock a mutex directly\n\tswitch locker.(type) {\n\tcase *sync.Mutex, *sync.RWMutex:\n\t\treturn\n\t}\n\n\tlocker.Lock()\n\tw.locks[w.depth] = locker\n}\n\n// wrapPtr is a helper that takes v and always make it *v. copystructure\n// stores things internally as pointers until the last moment before unwrapping\nfunc wrapPtr(v reflect.Value) reflect.Value {\n\tif !v.IsValid() {\n\t\treturn v\n\t}\n\tvPtr := reflect.New(v.Type())\n\tvPtr.Elem().Set(v)\n\treturn vPtr\n}\n"
  },
  {
    "path": "vendor/github.com/mitchellh/go-homedir/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2013 Mitchell Hashimoto\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "vendor/github.com/mitchellh/go-homedir/homedir.go",
    "content": "package homedir\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"runtime\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n)\n\n// DisableCache will disable caching of the home directory. Caching is enabled\n// by default.\nvar DisableCache bool\n\nvar homedirCache string\nvar cacheLock sync.RWMutex\n\n// Dir returns the home directory for the executing user.\n//\n// This uses an OS-specific method for discovering the home directory.\n// An error is returned if a home directory cannot be detected.\nfunc Dir() (string, error) {\n\tif !DisableCache {\n\t\tcacheLock.RLock()\n\t\tcached := homedirCache\n\t\tcacheLock.RUnlock()\n\t\tif cached != \"\" {\n\t\t\treturn cached, nil\n\t\t}\n\t}\n\n\tcacheLock.Lock()\n\tdefer cacheLock.Unlock()\n\n\tvar result string\n\tvar err error\n\tif runtime.GOOS == \"windows\" {\n\t\tresult, err = dirWindows()\n\t} else {\n\t\t// Unix-like system, so just assume Unix\n\t\tresult, err = dirUnix()\n\t}\n\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\thomedirCache = result\n\treturn result, nil\n}\n\n// Expand expands the path to include the home directory if the path\n// is prefixed with `~`. If it isn't prefixed with `~`, the path is\n// returned as-is.\nfunc Expand(path string) (string, error) {\n\tif len(path) == 0 {\n\t\treturn path, nil\n\t}\n\n\tif path[0] != '~' {\n\t\treturn path, nil\n\t}\n\n\tif len(path) > 1 && path[1] != '/' && path[1] != '\\\\' {\n\t\treturn \"\", errors.New(\"cannot expand user-specific home dir\")\n\t}\n\n\tdir, err := Dir()\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\treturn filepath.Join(dir, path[1:]), nil\n}\n\n// Reset clears the cache, forcing the next call to Dir to re-detect\n// the home directory. This generally never has to be called, but can be\n// useful in tests if you're modifying the home directory via the HOME\n// env var or something.\nfunc Reset() {\n\tcacheLock.Lock()\n\tdefer cacheLock.Unlock()\n\thomedirCache = \"\"\n}\n\nfunc dirUnix() (string, error) {\n\thomeEnv := \"HOME\"\n\tif runtime.GOOS == \"plan9\" {\n\t\t// On plan9, env vars are lowercase.\n\t\thomeEnv = \"home\"\n\t}\n\n\t// First prefer the HOME environmental variable\n\tif home := os.Getenv(homeEnv); home != \"\" {\n\t\treturn home, nil\n\t}\n\n\tvar stdout bytes.Buffer\n\n\t// If that fails, try OS specific commands\n\tif runtime.GOOS == \"darwin\" {\n\t\tcmd := exec.Command(\"sh\", \"-c\", `dscl -q . -read /Users/\"$(whoami)\" NFSHomeDirectory | sed 's/^[^ ]*: //'`)\n\t\tcmd.Stdout = &stdout\n\t\tif err := cmd.Run(); err == nil {\n\t\t\tresult := strings.TrimSpace(stdout.String())\n\t\t\tif result != \"\" {\n\t\t\t\treturn result, nil\n\t\t\t}\n\t\t}\n\t} else {\n\t\tcmd := exec.Command(\"getent\", \"passwd\", strconv.Itoa(os.Getuid()))\n\t\tcmd.Stdout = &stdout\n\t\tif err := cmd.Run(); err != nil {\n\t\t\t// If the error is ErrNotFound, we ignore it. Otherwise, return it.\n\t\t\tif err != exec.ErrNotFound {\n\t\t\t\treturn \"\", err\n\t\t\t}\n\t\t} else {\n\t\t\tif passwd := strings.TrimSpace(stdout.String()); passwd != \"\" {\n\t\t\t\t// username:password:uid:gid:gecos:home:shell\n\t\t\t\tpasswdParts := strings.SplitN(passwd, \":\", 7)\n\t\t\t\tif len(passwdParts) > 5 {\n\t\t\t\t\treturn passwdParts[5], nil\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// If all else fails, try the shell\n\tstdout.Reset()\n\tcmd := exec.Command(\"sh\", \"-c\", \"cd && pwd\")\n\tcmd.Stdout = &stdout\n\tif err := cmd.Run(); err != nil {\n\t\treturn \"\", err\n\t}\n\n\tresult := strings.TrimSpace(stdout.String())\n\tif result == \"\" {\n\t\treturn \"\", errors.New(\"blank output when reading home directory\")\n\t}\n\n\treturn result, nil\n}\n\nfunc dirWindows() (string, error) {\n\t// First prefer the HOME environmental variable\n\tif home := os.Getenv(\"HOME\"); home != \"\" {\n\t\treturn home, nil\n\t}\n\n\t// Prefer standard environment variable USERPROFILE\n\tif home := os.Getenv(\"USERPROFILE\"); home != \"\" {\n\t\treturn home, nil\n\t}\n\n\tdrive := os.Getenv(\"HOMEDRIVE\")\n\tpath := os.Getenv(\"HOMEPATH\")\n\thome := drive + path\n\tif drive == \"\" || path == \"\" {\n\t\treturn \"\", errors.New(\"HOMEDRIVE, HOMEPATH, or USERPROFILE are blank\")\n\t}\n\n\treturn home, nil\n}\n"
  },
  {
    "path": "vendor/github.com/mitchellh/go-testing-interface/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2016 Mitchell Hashimoto\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "vendor/github.com/mitchellh/go-testing-interface/testing.go",
    "content": "// +build !go1.9\n\npackage testing\n\nimport (\n\t\"fmt\"\n\t\"log\"\n)\n\n// T is the interface that mimics the standard library *testing.T.\n//\n// In unit tests you can just pass a *testing.T struct. At runtime, outside\n// of tests, you can pass in a RuntimeT struct from this package.\ntype T interface {\n\tError(args ...interface{})\n\tErrorf(format string, args ...interface{})\n\tFail()\n\tFailNow()\n\tFailed() bool\n\tFatal(args ...interface{})\n\tFatalf(format string, args ...interface{})\n\tLog(args ...interface{})\n\tLogf(format string, args ...interface{})\n\tName() string\n\tSkip(args ...interface{})\n\tSkipNow()\n\tSkipf(format string, args ...interface{})\n\tSkipped() bool\n}\n\n// RuntimeT implements T and can be instantiated and run at runtime to\n// mimic *testing.T behavior. Unlike *testing.T, this will simply panic\n// for calls to Fatal. For calls to Error, you'll have to check the errors\n// list to determine whether to exit yourself. Name and Skip methods are\n// unimplemented noops.\ntype RuntimeT struct {\n\tfailed bool\n}\n\nfunc (t *RuntimeT) Error(args ...interface{}) {\n\tlog.Println(fmt.Sprintln(args...))\n\tt.Fail()\n}\n\nfunc (t *RuntimeT) Errorf(format string, args ...interface{}) {\n\tlog.Println(fmt.Sprintf(format, args...))\n\tt.Fail()\n}\n\nfunc (t *RuntimeT) Fatal(args ...interface{}) {\n\tlog.Println(fmt.Sprintln(args...))\n\tt.FailNow()\n}\n\nfunc (t *RuntimeT) Fatalf(format string, args ...interface{}) {\n\tlog.Println(fmt.Sprintf(format, args...))\n\tt.FailNow()\n}\n\nfunc (t *RuntimeT) Fail() {\n\tt.failed = true\n}\n\nfunc (t *RuntimeT) FailNow() {\n\tpanic(\"testing.T failed, see logs for output (if any)\")\n}\n\nfunc (t *RuntimeT) Failed() bool {\n\treturn t.failed\n}\n\nfunc (t *RuntimeT) Log(args ...interface{}) {\n\tlog.Println(fmt.Sprintln(args...))\n}\n\nfunc (t *RuntimeT) Logf(format string, args ...interface{}) {\n\tlog.Println(fmt.Sprintf(format, args...))\n}\n\nfunc (t *RuntimeT) Name() string                             { return \"\" }\nfunc (t *RuntimeT) Skip(args ...interface{})                 {}\nfunc (t *RuntimeT) SkipNow()                                 {}\nfunc (t *RuntimeT) Skipf(format string, args ...interface{}) {}\nfunc (t *RuntimeT) Skipped() bool                            { return false }\n"
  },
  {
    "path": "vendor/github.com/mitchellh/go-testing-interface/testing_go19.go",
    "content": "// +build go1.9\n\n// NOTE: This is a temporary copy of testing.go for Go 1.9 with the addition\n// of \"Helper\" to the T interface. Go 1.9 at the time of typing is in RC\n// and is set for release shortly. We'll support this on master as the default\n// as soon as 1.9 is released.\n\npackage testing\n\nimport (\n\t\"fmt\"\n\t\"log\"\n)\n\n// T is the interface that mimics the standard library *testing.T.\n//\n// In unit tests you can just pass a *testing.T struct. At runtime, outside\n// of tests, you can pass in a RuntimeT struct from this package.\ntype T interface {\n\tError(args ...interface{})\n\tErrorf(format string, args ...interface{})\n\tFail()\n\tFailNow()\n\tFailed() bool\n\tFatal(args ...interface{})\n\tFatalf(format string, args ...interface{})\n\tLog(args ...interface{})\n\tLogf(format string, args ...interface{})\n\tName() string\n\tSkip(args ...interface{})\n\tSkipNow()\n\tSkipf(format string, args ...interface{})\n\tSkipped() bool\n\tHelper()\n}\n\n// RuntimeT implements T and can be instantiated and run at runtime to\n// mimic *testing.T behavior. Unlike *testing.T, this will simply panic\n// for calls to Fatal. For calls to Error, you'll have to check the errors\n// list to determine whether to exit yourself.\ntype RuntimeT struct {\n\tskipped bool\n\tfailed  bool\n}\n\nfunc (t *RuntimeT) Error(args ...interface{}) {\n\tlog.Println(fmt.Sprintln(args...))\n\tt.Fail()\n}\n\nfunc (t *RuntimeT) Errorf(format string, args ...interface{}) {\n\tlog.Printf(format, args...)\n\tt.Fail()\n}\n\nfunc (t *RuntimeT) Fail() {\n\tt.failed = true\n}\n\nfunc (t *RuntimeT) FailNow() {\n\tpanic(\"testing.T failed, see logs for output (if any)\")\n}\n\nfunc (t *RuntimeT) Failed() bool {\n\treturn t.failed\n}\n\nfunc (t *RuntimeT) Fatal(args ...interface{}) {\n\tlog.Print(args...)\n\tt.FailNow()\n}\n\nfunc (t *RuntimeT) Fatalf(format string, args ...interface{}) {\n\tlog.Printf(format, args...)\n\tt.FailNow()\n}\n\nfunc (t *RuntimeT) Log(args ...interface{}) {\n\tlog.Println(fmt.Sprintln(args...))\n}\n\nfunc (t *RuntimeT) Logf(format string, args ...interface{}) {\n\tlog.Println(fmt.Sprintf(format, args...))\n}\n\nfunc (t *RuntimeT) Name() string {\n\treturn \"\"\n}\n\nfunc (t *RuntimeT) Skip(args ...interface{}) {\n\tlog.Print(args...)\n\tt.SkipNow()\n}\n\nfunc (t *RuntimeT) SkipNow() {\n\tt.skipped = true\n}\n\nfunc (t *RuntimeT) Skipf(format string, args ...interface{}) {\n\tlog.Printf(format, args...)\n\tt.SkipNow()\n}\n\nfunc (t *RuntimeT) Skipped() bool {\n\treturn t.skipped\n}\n\nfunc (t *RuntimeT) Helper() {}\n"
  },
  {
    "path": "vendor/github.com/mitchellh/go-wordwrap/LICENSE.md",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2014 Mitchell Hashimoto\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "vendor/github.com/mitchellh/go-wordwrap/wordwrap.go",
    "content": "package wordwrap\n\nimport (\n\t\"bytes\"\n\t\"unicode\"\n)\n\n// WrapString wraps the given string within lim width in characters.\n//\n// Wrapping is currently naive and only happens at white-space. A future\n// version of the library will implement smarter wrapping. This means that\n// pathological cases can dramatically reach past the limit, such as a very\n// long word.\nfunc WrapString(s string, lim uint) string {\n\t// Initialize a buffer with a slightly larger size to account for breaks\n\tinit := make([]byte, 0, len(s))\n\tbuf := bytes.NewBuffer(init)\n\n\tvar current uint\n\tvar wordBuf, spaceBuf bytes.Buffer\n\n\tfor _, char := range s {\n\t\tif char == '\\n' {\n\t\t\tif wordBuf.Len() == 0 {\n\t\t\t\tif current+uint(spaceBuf.Len()) > lim {\n\t\t\t\t\tcurrent = 0\n\t\t\t\t} else {\n\t\t\t\t\tcurrent += uint(spaceBuf.Len())\n\t\t\t\t\tspaceBuf.WriteTo(buf)\n\t\t\t\t}\n\t\t\t\tspaceBuf.Reset()\n\t\t\t} else {\n\t\t\t\tcurrent += uint(spaceBuf.Len() + wordBuf.Len())\n\t\t\t\tspaceBuf.WriteTo(buf)\n\t\t\t\tspaceBuf.Reset()\n\t\t\t\twordBuf.WriteTo(buf)\n\t\t\t\twordBuf.Reset()\n\t\t\t}\n\t\t\tbuf.WriteRune(char)\n\t\t\tcurrent = 0\n\t\t} else if unicode.IsSpace(char) {\n\t\t\tif spaceBuf.Len() == 0 || wordBuf.Len() > 0 {\n\t\t\t\tcurrent += uint(spaceBuf.Len() + wordBuf.Len())\n\t\t\t\tspaceBuf.WriteTo(buf)\n\t\t\t\tspaceBuf.Reset()\n\t\t\t\twordBuf.WriteTo(buf)\n\t\t\t\twordBuf.Reset()\n\t\t\t}\n\n\t\t\tspaceBuf.WriteRune(char)\n\t\t} else {\n\n\t\t\twordBuf.WriteRune(char)\n\n\t\t\tif current+uint(spaceBuf.Len()+wordBuf.Len()) > lim && uint(wordBuf.Len()) < lim {\n\t\t\t\tbuf.WriteRune('\\n')\n\t\t\t\tcurrent = 0\n\t\t\t\tspaceBuf.Reset()\n\t\t\t}\n\t\t}\n\t}\n\n\tif wordBuf.Len() == 0 {\n\t\tif current+uint(spaceBuf.Len()) <= lim {\n\t\t\tspaceBuf.WriteTo(buf)\n\t\t}\n\t} else {\n\t\tspaceBuf.WriteTo(buf)\n\t\twordBuf.WriteTo(buf)\n\t}\n\n\treturn buf.String()\n}\n"
  },
  {
    "path": "vendor/github.com/mitchellh/hashstructure/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2016 Mitchell Hashimoto\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "vendor/github.com/mitchellh/hashstructure/hashstructure.go",
    "content": "package hashstructure\n\nimport (\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"hash\"\n\t\"hash/fnv\"\n\t\"reflect\"\n)\n\n// ErrNotStringer is returned when there's an error with hash:\"string\"\ntype ErrNotStringer struct {\n\tField string\n}\n\n// Error implements error for ErrNotStringer\nfunc (ens *ErrNotStringer) Error() string {\n\treturn fmt.Sprintf(\"hashstructure: %s has hash:\\\"string\\\" set, but does not implement fmt.Stringer\", ens.Field)\n}\n\n// HashOptions are options that are available for hashing.\ntype HashOptions struct {\n\t// Hasher is the hash function to use. If this isn't set, it will\n\t// default to FNV.\n\tHasher hash.Hash64\n\n\t// TagName is the struct tag to look at when hashing the structure.\n\t// By default this is \"hash\".\n\tTagName string\n\n\t// ZeroNil is flag determining if nil pointer should be treated equal\n\t// to a zero value of pointed type. By default this is false.\n\tZeroNil bool\n}\n\n// Hash returns the hash value of an arbitrary value.\n//\n// If opts is nil, then default options will be used. See HashOptions\n// for the default values. The same *HashOptions value cannot be used\n// concurrently. None of the values within a *HashOptions struct are\n// safe to read/write while hashing is being done.\n//\n// Notes on the value:\n//\n//   * Unexported fields on structs are ignored and do not affect the\n//     hash value.\n//\n//   * Adding an exported field to a struct with the zero value will change\n//     the hash value.\n//\n// For structs, the hashing can be controlled using tags. For example:\n//\n//    struct {\n//        Name string\n//        UUID string `hash:\"ignore\"`\n//    }\n//\n// The available tag values are:\n//\n//   * \"ignore\" or \"-\" - The field will be ignored and not affect the hash code.\n//\n//   * \"set\" - The field will be treated as a set, where ordering doesn't\n//             affect the hash code. This only works for slices.\n//\n//   * \"string\" - The field will be hashed as a string, only works when the\n//                field implements fmt.Stringer\n//\nfunc Hash(v interface{}, opts *HashOptions) (uint64, error) {\n\t// Create default options\n\tif opts == nil {\n\t\topts = &HashOptions{}\n\t}\n\tif opts.Hasher == nil {\n\t\topts.Hasher = fnv.New64()\n\t}\n\tif opts.TagName == \"\" {\n\t\topts.TagName = \"hash\"\n\t}\n\n\t// Reset the hash\n\topts.Hasher.Reset()\n\n\t// Create our walker and walk the structure\n\tw := &walker{\n\t\th:       opts.Hasher,\n\t\ttag:     opts.TagName,\n\t\tzeronil: opts.ZeroNil,\n\t}\n\treturn w.visit(reflect.ValueOf(v), nil)\n}\n\ntype walker struct {\n\th       hash.Hash64\n\ttag     string\n\tzeronil bool\n}\n\ntype visitOpts struct {\n\t// Flags are a bitmask of flags to affect behavior of this visit\n\tFlags visitFlag\n\n\t// Information about the struct containing this field\n\tStruct      interface{}\n\tStructField string\n}\n\nfunc (w *walker) visit(v reflect.Value, opts *visitOpts) (uint64, error) {\n\tt := reflect.TypeOf(0)\n\n\t// Loop since these can be wrapped in multiple layers of pointers\n\t// and interfaces.\n\tfor {\n\t\t// If we have an interface, dereference it. We have to do this up\n\t\t// here because it might be a nil in there and the check below must\n\t\t// catch that.\n\t\tif v.Kind() == reflect.Interface {\n\t\t\tv = v.Elem()\n\t\t\tcontinue\n\t\t}\n\n\t\tif v.Kind() == reflect.Ptr {\n\t\t\tif w.zeronil {\n\t\t\t\tt = v.Type().Elem()\n\t\t\t}\n\t\t\tv = reflect.Indirect(v)\n\t\t\tcontinue\n\t\t}\n\n\t\tbreak\n\t}\n\n\t// If it is nil, treat it like a zero.\n\tif !v.IsValid() {\n\t\tv = reflect.Zero(t)\n\t}\n\n\t// Binary writing can use raw ints, we have to convert to\n\t// a sized-int, we'll choose the largest...\n\tswitch v.Kind() {\n\tcase reflect.Int:\n\t\tv = reflect.ValueOf(int64(v.Int()))\n\tcase reflect.Uint:\n\t\tv = reflect.ValueOf(uint64(v.Uint()))\n\tcase reflect.Bool:\n\t\tvar tmp int8\n\t\tif v.Bool() {\n\t\t\ttmp = 1\n\t\t}\n\t\tv = reflect.ValueOf(tmp)\n\t}\n\n\tk := v.Kind()\n\n\t// We can shortcut numeric values by directly binary writing them\n\tif k >= reflect.Int && k <= reflect.Complex64 {\n\t\t// A direct hash calculation\n\t\tw.h.Reset()\n\t\terr := binary.Write(w.h, binary.LittleEndian, v.Interface())\n\t\treturn w.h.Sum64(), err\n\t}\n\n\tswitch k {\n\tcase reflect.Array:\n\t\tvar h uint64\n\t\tl := v.Len()\n\t\tfor i := 0; i < l; i++ {\n\t\t\tcurrent, err := w.visit(v.Index(i), nil)\n\t\t\tif err != nil {\n\t\t\t\treturn 0, err\n\t\t\t}\n\n\t\t\th = hashUpdateOrdered(w.h, h, current)\n\t\t}\n\n\t\treturn h, nil\n\n\tcase reflect.Map:\n\t\tvar includeMap IncludableMap\n\t\tif opts != nil && opts.Struct != nil {\n\t\t\tif v, ok := opts.Struct.(IncludableMap); ok {\n\t\t\t\tincludeMap = v\n\t\t\t}\n\t\t}\n\n\t\t// Build the hash for the map. We do this by XOR-ing all the key\n\t\t// and value hashes. This makes it deterministic despite ordering.\n\t\tvar h uint64\n\t\tfor _, k := range v.MapKeys() {\n\t\t\tv := v.MapIndex(k)\n\t\t\tif includeMap != nil {\n\t\t\t\tincl, err := includeMap.HashIncludeMap(\n\t\t\t\t\topts.StructField, k.Interface(), v.Interface())\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn 0, err\n\t\t\t\t}\n\t\t\t\tif !incl {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tkh, err := w.visit(k, nil)\n\t\t\tif err != nil {\n\t\t\t\treturn 0, err\n\t\t\t}\n\t\t\tvh, err := w.visit(v, nil)\n\t\t\tif err != nil {\n\t\t\t\treturn 0, err\n\t\t\t}\n\n\t\t\tfieldHash := hashUpdateOrdered(w.h, kh, vh)\n\t\t\th = hashUpdateUnordered(h, fieldHash)\n\t\t}\n\n\t\treturn h, nil\n\n\tcase reflect.Struct:\n\t\tparent := v.Interface()\n\t\tvar include Includable\n\t\tif impl, ok := parent.(Includable); ok {\n\t\t\tinclude = impl\n\t\t}\n\n\t\tt := v.Type()\n\t\th, err := w.visit(reflect.ValueOf(t.Name()), nil)\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\n\t\tl := v.NumField()\n\t\tfor i := 0; i < l; i++ {\n\t\t\tif innerV := v.Field(i); v.CanSet() || t.Field(i).Name != \"_\" {\n\t\t\t\tvar f visitFlag\n\t\t\t\tfieldType := t.Field(i)\n\t\t\t\tif fieldType.PkgPath != \"\" {\n\t\t\t\t\t// Unexported\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\ttag := fieldType.Tag.Get(w.tag)\n\t\t\t\tif tag == \"ignore\" || tag == \"-\" {\n\t\t\t\t\t// Ignore this field\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\t// if string is set, use the string value\n\t\t\t\tif tag == \"string\" {\n\t\t\t\t\tif impl, ok := innerV.Interface().(fmt.Stringer); ok {\n\t\t\t\t\t\tinnerV = reflect.ValueOf(impl.String())\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn 0, &ErrNotStringer{\n\t\t\t\t\t\t\tField: v.Type().Field(i).Name,\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Check if we implement includable and check it\n\t\t\t\tif include != nil {\n\t\t\t\t\tincl, err := include.HashInclude(fieldType.Name, innerV)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn 0, err\n\t\t\t\t\t}\n\t\t\t\t\tif !incl {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tswitch tag {\n\t\t\t\tcase \"set\":\n\t\t\t\t\tf |= visitFlagSet\n\t\t\t\t}\n\n\t\t\t\tkh, err := w.visit(reflect.ValueOf(fieldType.Name), nil)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn 0, err\n\t\t\t\t}\n\n\t\t\t\tvh, err := w.visit(innerV, &visitOpts{\n\t\t\t\t\tFlags:       f,\n\t\t\t\t\tStruct:      parent,\n\t\t\t\t\tStructField: fieldType.Name,\n\t\t\t\t})\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn 0, err\n\t\t\t\t}\n\n\t\t\t\tfieldHash := hashUpdateOrdered(w.h, kh, vh)\n\t\t\t\th = hashUpdateUnordered(h, fieldHash)\n\t\t\t}\n\t\t}\n\n\t\treturn h, nil\n\n\tcase reflect.Slice:\n\t\t// We have two behaviors here. If it isn't a set, then we just\n\t\t// visit all the elements. If it is a set, then we do a deterministic\n\t\t// hash code.\n\t\tvar h uint64\n\t\tvar set bool\n\t\tif opts != nil {\n\t\t\tset = (opts.Flags & visitFlagSet) != 0\n\t\t}\n\t\tl := v.Len()\n\t\tfor i := 0; i < l; i++ {\n\t\t\tcurrent, err := w.visit(v.Index(i), nil)\n\t\t\tif err != nil {\n\t\t\t\treturn 0, err\n\t\t\t}\n\n\t\t\tif set {\n\t\t\t\th = hashUpdateUnordered(h, current)\n\t\t\t} else {\n\t\t\t\th = hashUpdateOrdered(w.h, h, current)\n\t\t\t}\n\t\t}\n\n\t\treturn h, nil\n\n\tcase reflect.String:\n\t\t// Directly hash\n\t\tw.h.Reset()\n\t\t_, err := w.h.Write([]byte(v.String()))\n\t\treturn w.h.Sum64(), err\n\n\tdefault:\n\t\treturn 0, fmt.Errorf(\"unknown kind to hash: %s\", k)\n\t}\n\n}\n\nfunc hashUpdateOrdered(h hash.Hash64, a, b uint64) uint64 {\n\t// For ordered updates, use a real hash function\n\th.Reset()\n\n\t// We just panic if the binary writes fail because we are writing\n\t// an int64 which should never be fail-able.\n\te1 := binary.Write(h, binary.LittleEndian, a)\n\te2 := binary.Write(h, binary.LittleEndian, b)\n\tif e1 != nil {\n\t\tpanic(e1)\n\t}\n\tif e2 != nil {\n\t\tpanic(e2)\n\t}\n\n\treturn h.Sum64()\n}\n\nfunc hashUpdateUnordered(a, b uint64) uint64 {\n\treturn a ^ b\n}\n\n// visitFlag is used as a bitmask for affecting visit behavior\ntype visitFlag uint\n\nconst (\n\tvisitFlagInvalid visitFlag = iota\n\tvisitFlagSet               = iota << 1\n)\n"
  },
  {
    "path": "vendor/github.com/mitchellh/hashstructure/include.go",
    "content": "package hashstructure\n\n// Includable is an interface that can optionally be implemented by\n// a struct. It will be called for each field in the struct to check whether\n// it should be included in the hash.\ntype Includable interface {\n\tHashInclude(field string, v interface{}) (bool, error)\n}\n\n// IncludableMap is an interface that can optionally be implemented by\n// a struct. It will be called when a map-type field is found to ask the\n// struct if the map item should be included in the hash.\ntype IncludableMap interface {\n\tHashIncludeMap(field string, k, v interface{}) (bool, error)\n}\n"
  },
  {
    "path": "vendor/github.com/mitchellh/mapstructure/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2013 Mitchell Hashimoto\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "vendor/github.com/mitchellh/mapstructure/decode_hooks.go",
    "content": "package mapstructure\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"net\"\n\t\"reflect\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n)\n\n// typedDecodeHook takes a raw DecodeHookFunc (an interface{}) and turns\n// it into the proper DecodeHookFunc type, such as DecodeHookFuncType.\nfunc typedDecodeHook(h DecodeHookFunc) DecodeHookFunc {\n\t// Create variables here so we can reference them with the reflect pkg\n\tvar f1 DecodeHookFuncType\n\tvar f2 DecodeHookFuncKind\n\n\t// Fill in the variables into this interface and the rest is done\n\t// automatically using the reflect package.\n\tpotential := []interface{}{f1, f2}\n\n\tv := reflect.ValueOf(h)\n\tvt := v.Type()\n\tfor _, raw := range potential {\n\t\tpt := reflect.ValueOf(raw).Type()\n\t\tif vt.ConvertibleTo(pt) {\n\t\t\treturn v.Convert(pt).Interface()\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// DecodeHookExec executes the given decode hook. This should be used\n// since it'll naturally degrade to the older backwards compatible DecodeHookFunc\n// that took reflect.Kind instead of reflect.Type.\nfunc DecodeHookExec(\n\traw DecodeHookFunc,\n\tfrom reflect.Type, to reflect.Type,\n\tdata interface{}) (interface{}, error) {\n\tswitch f := typedDecodeHook(raw).(type) {\n\tcase DecodeHookFuncType:\n\t\treturn f(from, to, data)\n\tcase DecodeHookFuncKind:\n\t\treturn f(from.Kind(), to.Kind(), data)\n\tdefault:\n\t\treturn nil, errors.New(\"invalid decode hook signature\")\n\t}\n}\n\n// ComposeDecodeHookFunc creates a single DecodeHookFunc that\n// automatically composes multiple DecodeHookFuncs.\n//\n// The composed funcs are called in order, with the result of the\n// previous transformation.\nfunc ComposeDecodeHookFunc(fs ...DecodeHookFunc) DecodeHookFunc {\n\treturn func(\n\t\tf reflect.Type,\n\t\tt reflect.Type,\n\t\tdata interface{}) (interface{}, error) {\n\t\tvar err error\n\t\tfor _, f1 := range fs {\n\t\t\tdata, err = DecodeHookExec(f1, f, t, data)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\n\t\t\t// Modify the from kind to be correct with the new data\n\t\t\tf = nil\n\t\t\tif val := reflect.ValueOf(data); val.IsValid() {\n\t\t\t\tf = val.Type()\n\t\t\t}\n\t\t}\n\n\t\treturn data, nil\n\t}\n}\n\n// StringToSliceHookFunc returns a DecodeHookFunc that converts\n// string to []string by splitting on the given sep.\nfunc StringToSliceHookFunc(sep string) DecodeHookFunc {\n\treturn func(\n\t\tf reflect.Kind,\n\t\tt reflect.Kind,\n\t\tdata interface{}) (interface{}, error) {\n\t\tif f != reflect.String || t != reflect.Slice {\n\t\t\treturn data, nil\n\t\t}\n\n\t\traw := data.(string)\n\t\tif raw == \"\" {\n\t\t\treturn []string{}, nil\n\t\t}\n\n\t\treturn strings.Split(raw, sep), nil\n\t}\n}\n\n// StringToTimeDurationHookFunc returns a DecodeHookFunc that converts\n// strings to time.Duration.\nfunc StringToTimeDurationHookFunc() DecodeHookFunc {\n\treturn func(\n\t\tf reflect.Type,\n\t\tt reflect.Type,\n\t\tdata interface{}) (interface{}, error) {\n\t\tif f.Kind() != reflect.String {\n\t\t\treturn data, nil\n\t\t}\n\t\tif t != reflect.TypeOf(time.Duration(5)) {\n\t\t\treturn data, nil\n\t\t}\n\n\t\t// Convert it by parsing\n\t\treturn time.ParseDuration(data.(string))\n\t}\n}\n\n// StringToIPHookFunc returns a DecodeHookFunc that converts\n// strings to net.IP\nfunc StringToIPHookFunc() DecodeHookFunc {\n\treturn func(\n\t\tf reflect.Type,\n\t\tt reflect.Type,\n\t\tdata interface{}) (interface{}, error) {\n\t\tif f.Kind() != reflect.String {\n\t\t\treturn data, nil\n\t\t}\n\t\tif t != reflect.TypeOf(net.IP{}) {\n\t\t\treturn data, nil\n\t\t}\n\n\t\t// Convert it by parsing\n\t\tip := net.ParseIP(data.(string))\n\t\tif ip == nil {\n\t\t\treturn net.IP{}, fmt.Errorf(\"failed parsing ip %v\", data)\n\t\t}\n\n\t\treturn ip, nil\n\t}\n}\n\n// StringToIPNetHookFunc returns a DecodeHookFunc that converts\n// strings to net.IPNet\nfunc StringToIPNetHookFunc() DecodeHookFunc {\n\treturn func(\n\t\tf reflect.Type,\n\t\tt reflect.Type,\n\t\tdata interface{}) (interface{}, error) {\n\t\tif f.Kind() != reflect.String {\n\t\t\treturn data, nil\n\t\t}\n\t\tif t != reflect.TypeOf(net.IPNet{}) {\n\t\t\treturn data, nil\n\t\t}\n\n\t\t// Convert it by parsing\n\t\t_, net, err := net.ParseCIDR(data.(string))\n\t\treturn net, err\n\t}\n}\n\n// StringToTimeHookFunc returns a DecodeHookFunc that converts\n// strings to time.Time.\nfunc StringToTimeHookFunc(layout string) DecodeHookFunc {\n\treturn func(\n\t\tf reflect.Type,\n\t\tt reflect.Type,\n\t\tdata interface{}) (interface{}, error) {\n\t\tif f.Kind() != reflect.String {\n\t\t\treturn data, nil\n\t\t}\n\t\tif t != reflect.TypeOf(time.Time{}) {\n\t\t\treturn data, nil\n\t\t}\n\n\t\t// Convert it by parsing\n\t\treturn time.Parse(layout, data.(string))\n\t}\n}\n\n// WeaklyTypedHook is a DecodeHookFunc which adds support for weak typing to\n// the decoder.\n//\n// Note that this is significantly different from the WeaklyTypedInput option\n// of the DecoderConfig.\nfunc WeaklyTypedHook(\n\tf reflect.Kind,\n\tt reflect.Kind,\n\tdata interface{}) (interface{}, error) {\n\tdataVal := reflect.ValueOf(data)\n\tswitch t {\n\tcase reflect.String:\n\t\tswitch f {\n\t\tcase reflect.Bool:\n\t\t\tif dataVal.Bool() {\n\t\t\t\treturn \"1\", nil\n\t\t\t}\n\t\t\treturn \"0\", nil\n\t\tcase reflect.Float32:\n\t\t\treturn strconv.FormatFloat(dataVal.Float(), 'f', -1, 64), nil\n\t\tcase reflect.Int:\n\t\t\treturn strconv.FormatInt(dataVal.Int(), 10), nil\n\t\tcase reflect.Slice:\n\t\t\tdataType := dataVal.Type()\n\t\t\telemKind := dataType.Elem().Kind()\n\t\t\tif elemKind == reflect.Uint8 {\n\t\t\t\treturn string(dataVal.Interface().([]uint8)), nil\n\t\t\t}\n\t\tcase reflect.Uint:\n\t\t\treturn strconv.FormatUint(dataVal.Uint(), 10), nil\n\t\t}\n\t}\n\n\treturn data, nil\n}\n"
  },
  {
    "path": "vendor/github.com/mitchellh/mapstructure/error.go",
    "content": "package mapstructure\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"sort\"\n\t\"strings\"\n)\n\n// Error implements the error interface and can represents multiple\n// errors that occur in the course of a single decode.\ntype Error struct {\n\tErrors []string\n}\n\nfunc (e *Error) Error() string {\n\tpoints := make([]string, len(e.Errors))\n\tfor i, err := range e.Errors {\n\t\tpoints[i] = fmt.Sprintf(\"* %s\", err)\n\t}\n\n\tsort.Strings(points)\n\treturn fmt.Sprintf(\n\t\t\"%d error(s) decoding:\\n\\n%s\",\n\t\tlen(e.Errors), strings.Join(points, \"\\n\"))\n}\n\n// WrappedErrors implements the errwrap.Wrapper interface to make this\n// return value more useful with the errwrap and go-multierror libraries.\nfunc (e *Error) WrappedErrors() []error {\n\tif e == nil {\n\t\treturn nil\n\t}\n\n\tresult := make([]error, len(e.Errors))\n\tfor i, e := range e.Errors {\n\t\tresult[i] = errors.New(e)\n\t}\n\n\treturn result\n}\n\nfunc appendErrors(errors []string, err error) []string {\n\tswitch e := err.(type) {\n\tcase *Error:\n\t\treturn append(errors, e.Errors...)\n\tdefault:\n\t\treturn append(errors, e.Error())\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/mitchellh/mapstructure/mapstructure.go",
    "content": "// Package mapstructure exposes functionality to convert an arbitrary\n// map[string]interface{} into a native Go structure.\n//\n// The Go structure can be arbitrarily complex, containing slices,\n// other structs, etc. and the decoder will properly decode nested\n// maps and so on into the proper structures in the native Go struct.\n// See the examples to see what the decoder is capable of.\npackage mapstructure\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// DecodeHookFunc is the callback function that can be used for\n// data transformations. See \"DecodeHook\" in the DecoderConfig\n// struct.\n//\n// The type should be DecodeHookFuncType or DecodeHookFuncKind.\n// Either is accepted. Types are a superset of Kinds (Types can return\n// Kinds) and are generally a richer thing to use, but Kinds are simpler\n// if you only need those.\n//\n// The reason DecodeHookFunc is multi-typed is for backwards compatibility:\n// we started with Kinds and then realized Types were the better solution,\n// but have a promise to not break backwards compat so we now support\n// both.\ntype DecodeHookFunc interface{}\n\n// DecodeHookFuncType is a DecodeHookFunc which has complete information about\n// the source and target types.\ntype DecodeHookFuncType func(reflect.Type, reflect.Type, interface{}) (interface{}, error)\n\n// DecodeHookFuncKind is a DecodeHookFunc which knows only the Kinds of the\n// source and target types.\ntype DecodeHookFuncKind func(reflect.Kind, reflect.Kind, interface{}) (interface{}, error)\n\n// DecoderConfig is the configuration that is used to create a new decoder\n// and allows customization of various aspects of decoding.\ntype DecoderConfig struct {\n\t// DecodeHook, if set, will be called before any decoding and any\n\t// type conversion (if WeaklyTypedInput is on). This lets you modify\n\t// the values before they're set down onto the resulting struct.\n\t//\n\t// If an error is returned, the entire decode will fail with that\n\t// error.\n\tDecodeHook DecodeHookFunc\n\n\t// If ErrorUnused is true, then it is an error for there to exist\n\t// keys in the original map that were unused in the decoding process\n\t// (extra keys).\n\tErrorUnused bool\n\n\t// ZeroFields, if set to true, will zero fields before writing them.\n\t// For example, a map will be emptied before decoded values are put in\n\t// it. If this is false, a map will be merged.\n\tZeroFields bool\n\n\t// If WeaklyTypedInput is true, the decoder will make the following\n\t// \"weak\" conversions:\n\t//\n\t//   - bools to string (true = \"1\", false = \"0\")\n\t//   - numbers to string (base 10)\n\t//   - bools to int/uint (true = 1, false = 0)\n\t//   - strings to int/uint (base implied by prefix)\n\t//   - int to bool (true if value != 0)\n\t//   - string to bool (accepts: 1, t, T, TRUE, true, True, 0, f, F,\n\t//     FALSE, false, False. Anything else is an error)\n\t//   - empty array = empty map and vice versa\n\t//   - negative numbers to overflowed uint values (base 10)\n\t//   - slice of maps to a merged map\n\t//   - single values are converted to slices if required. Each\n\t//     element is weakly decoded. For example: \"4\" can become []int{4}\n\t//     if the target type is an int slice.\n\t//\n\tWeaklyTypedInput bool\n\n\t// Metadata is the struct that will contain extra metadata about\n\t// the decoding. If this is nil, then no metadata will be tracked.\n\tMetadata *Metadata\n\n\t// Result is a pointer to the struct that will contain the decoded\n\t// value.\n\tResult interface{}\n\n\t// The tag name that mapstructure reads for field names. This\n\t// defaults to \"mapstructure\"\n\tTagName string\n}\n\n// A Decoder takes a raw interface value and turns it into structured\n// data, keeping track of rich error information along the way in case\n// anything goes wrong. Unlike the basic top-level Decode method, you can\n// more finely control how the Decoder behaves using the DecoderConfig\n// structure. The top-level Decode method is just a convenience that sets\n// up the most basic Decoder.\ntype Decoder struct {\n\tconfig *DecoderConfig\n}\n\n// Metadata contains information about decoding a structure that\n// is tedious or difficult to get otherwise.\ntype Metadata struct {\n\t// Keys are the keys of the structure which were successfully decoded\n\tKeys []string\n\n\t// Unused is a slice of keys that were found in the raw value but\n\t// weren't decoded since there was no matching field in the result interface\n\tUnused []string\n}\n\n// Decode takes an input structure and uses reflection to translate it to\n// the output structure. output must be a pointer to a map or struct.\nfunc Decode(input interface{}, output interface{}) error {\n\tconfig := &DecoderConfig{\n\t\tMetadata: nil,\n\t\tResult:   output,\n\t}\n\n\tdecoder, err := NewDecoder(config)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn decoder.Decode(input)\n}\n\n// WeakDecode is the same as Decode but is shorthand to enable\n// WeaklyTypedInput. See DecoderConfig for more info.\nfunc WeakDecode(input, output interface{}) error {\n\tconfig := &DecoderConfig{\n\t\tMetadata:         nil,\n\t\tResult:           output,\n\t\tWeaklyTypedInput: true,\n\t}\n\n\tdecoder, err := NewDecoder(config)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn decoder.Decode(input)\n}\n\n// DecodeMetadata is the same as Decode, but is shorthand to\n// enable metadata collection. See DecoderConfig for more info.\nfunc DecodeMetadata(input interface{}, output interface{}, metadata *Metadata) error {\n\tconfig := &DecoderConfig{\n\t\tMetadata: metadata,\n\t\tResult:   output,\n\t}\n\n\tdecoder, err := NewDecoder(config)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn decoder.Decode(input)\n}\n\n// WeakDecodeMetadata is the same as Decode, but is shorthand to\n// enable both WeaklyTypedInput and metadata collection. See\n// DecoderConfig for more info.\nfunc WeakDecodeMetadata(input interface{}, output interface{}, metadata *Metadata) error {\n\tconfig := &DecoderConfig{\n\t\tMetadata:         metadata,\n\t\tResult:           output,\n\t\tWeaklyTypedInput: true,\n\t}\n\n\tdecoder, err := NewDecoder(config)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn decoder.Decode(input)\n}\n\n// NewDecoder returns a new decoder for the given configuration. Once\n// a decoder has been returned, the same configuration must not be used\n// again.\nfunc NewDecoder(config *DecoderConfig) (*Decoder, error) {\n\tval := reflect.ValueOf(config.Result)\n\tif val.Kind() != reflect.Ptr {\n\t\treturn nil, errors.New(\"result must be a pointer\")\n\t}\n\n\tval = val.Elem()\n\tif !val.CanAddr() {\n\t\treturn nil, errors.New(\"result must be addressable (a pointer)\")\n\t}\n\n\tif config.Metadata != nil {\n\t\tif config.Metadata.Keys == nil {\n\t\t\tconfig.Metadata.Keys = make([]string, 0)\n\t\t}\n\n\t\tif config.Metadata.Unused == nil {\n\t\t\tconfig.Metadata.Unused = make([]string, 0)\n\t\t}\n\t}\n\n\tif config.TagName == \"\" {\n\t\tconfig.TagName = \"mapstructure\"\n\t}\n\n\tresult := &Decoder{\n\t\tconfig: config,\n\t}\n\n\treturn result, nil\n}\n\n// Decode decodes the given raw interface to the target pointer specified\n// by the configuration.\nfunc (d *Decoder) Decode(input interface{}) error {\n\treturn d.decode(\"\", input, reflect.ValueOf(d.config.Result).Elem())\n}\n\n// Decodes an unknown data type into a specific reflection value.\nfunc (d *Decoder) decode(name string, input interface{}, outVal reflect.Value) error {\n\tvar inputVal reflect.Value\n\tif input != nil {\n\t\tinputVal = reflect.ValueOf(input)\n\n\t\t// We need to check here if input is a typed nil. Typed nils won't\n\t\t// match the \"input == nil\" below so we check that here.\n\t\tif inputVal.Kind() == reflect.Ptr && inputVal.IsNil() {\n\t\t\tinput = nil\n\t\t}\n\t}\n\n\tif input == nil {\n\t\t// If the data is nil, then we don't set anything, unless ZeroFields is set\n\t\t// to true.\n\t\tif d.config.ZeroFields {\n\t\t\toutVal.Set(reflect.Zero(outVal.Type()))\n\n\t\t\tif d.config.Metadata != nil && name != \"\" {\n\t\t\t\td.config.Metadata.Keys = append(d.config.Metadata.Keys, name)\n\t\t\t}\n\t\t}\n\t\treturn nil\n\t}\n\n\tif !inputVal.IsValid() {\n\t\t// If the input value is invalid, then we just set the value\n\t\t// to be the zero value.\n\t\toutVal.Set(reflect.Zero(outVal.Type()))\n\t\tif d.config.Metadata != nil && name != \"\" {\n\t\t\td.config.Metadata.Keys = append(d.config.Metadata.Keys, name)\n\t\t}\n\t\treturn nil\n\t}\n\n\tif d.config.DecodeHook != nil {\n\t\t// We have a DecodeHook, so let's pre-process the input.\n\t\tvar err error\n\t\tinput, err = DecodeHookExec(\n\t\t\td.config.DecodeHook,\n\t\t\tinputVal.Type(), outVal.Type(), input)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"error decoding '%s': %s\", name, err)\n\t\t}\n\t}\n\n\tvar err error\n\toutputKind := getKind(outVal)\n\tswitch outputKind {\n\tcase reflect.Bool:\n\t\terr = d.decodeBool(name, input, outVal)\n\tcase reflect.Interface:\n\t\terr = d.decodeBasic(name, input, outVal)\n\tcase reflect.String:\n\t\terr = d.decodeString(name, input, outVal)\n\tcase reflect.Int:\n\t\terr = d.decodeInt(name, input, outVal)\n\tcase reflect.Uint:\n\t\terr = d.decodeUint(name, input, outVal)\n\tcase reflect.Float32:\n\t\terr = d.decodeFloat(name, input, outVal)\n\tcase reflect.Struct:\n\t\terr = d.decodeStruct(name, input, outVal)\n\tcase reflect.Map:\n\t\terr = d.decodeMap(name, input, outVal)\n\tcase reflect.Ptr:\n\t\terr = d.decodePtr(name, input, outVal)\n\tcase reflect.Slice:\n\t\terr = d.decodeSlice(name, input, outVal)\n\tcase reflect.Array:\n\t\terr = d.decodeArray(name, input, outVal)\n\tcase reflect.Func:\n\t\terr = d.decodeFunc(name, input, outVal)\n\tdefault:\n\t\t// If we reached this point then we weren't able to decode it\n\t\treturn fmt.Errorf(\"%s: unsupported type: %s\", name, outputKind)\n\t}\n\n\t// If we reached here, then we successfully decoded SOMETHING, so\n\t// mark the key as used if we're tracking metainput.\n\tif d.config.Metadata != nil && name != \"\" {\n\t\td.config.Metadata.Keys = append(d.config.Metadata.Keys, name)\n\t}\n\n\treturn err\n}\n\n// This decodes a basic type (bool, int, string, etc.) and sets the\n// value to \"data\" of that type.\nfunc (d *Decoder) decodeBasic(name string, data interface{}, val reflect.Value) error {\n\tif val.IsValid() && val.Elem().IsValid() {\n\t\treturn d.decode(name, data, val.Elem())\n\t}\n\n\tdataVal := reflect.ValueOf(data)\n\n\t// If the input data is a pointer, and the assigned type is the dereference\n\t// of that exact pointer, then indirect it so that we can assign it.\n\t// Example: *string to string\n\tif dataVal.Kind() == reflect.Ptr && dataVal.Type().Elem() == val.Type() {\n\t\tdataVal = reflect.Indirect(dataVal)\n\t}\n\n\tif !dataVal.IsValid() {\n\t\tdataVal = reflect.Zero(val.Type())\n\t}\n\n\tdataValType := dataVal.Type()\n\tif !dataValType.AssignableTo(val.Type()) {\n\t\treturn fmt.Errorf(\n\t\t\t\"'%s' expected type '%s', got '%s'\",\n\t\t\tname, val.Type(), dataValType)\n\t}\n\n\tval.Set(dataVal)\n\treturn nil\n}\n\nfunc (d *Decoder) decodeString(name string, data interface{}, val reflect.Value) error {\n\tdataVal := reflect.Indirect(reflect.ValueOf(data))\n\tdataKind := getKind(dataVal)\n\n\tconverted := true\n\tswitch {\n\tcase dataKind == reflect.String:\n\t\tval.SetString(dataVal.String())\n\tcase dataKind == reflect.Bool && d.config.WeaklyTypedInput:\n\t\tif dataVal.Bool() {\n\t\t\tval.SetString(\"1\")\n\t\t} else {\n\t\t\tval.SetString(\"0\")\n\t\t}\n\tcase dataKind == reflect.Int && d.config.WeaklyTypedInput:\n\t\tval.SetString(strconv.FormatInt(dataVal.Int(), 10))\n\tcase dataKind == reflect.Uint && d.config.WeaklyTypedInput:\n\t\tval.SetString(strconv.FormatUint(dataVal.Uint(), 10))\n\tcase dataKind == reflect.Float32 && d.config.WeaklyTypedInput:\n\t\tval.SetString(strconv.FormatFloat(dataVal.Float(), 'f', -1, 64))\n\tcase dataKind == reflect.Slice && d.config.WeaklyTypedInput,\n\t\tdataKind == reflect.Array && d.config.WeaklyTypedInput:\n\t\tdataType := dataVal.Type()\n\t\telemKind := dataType.Elem().Kind()\n\t\tswitch elemKind {\n\t\tcase reflect.Uint8:\n\t\t\tvar uints []uint8\n\t\t\tif dataKind == reflect.Array {\n\t\t\t\tuints = make([]uint8, dataVal.Len(), dataVal.Len())\n\t\t\t\tfor i := range uints {\n\t\t\t\t\tuints[i] = dataVal.Index(i).Interface().(uint8)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tuints = dataVal.Interface().([]uint8)\n\t\t\t}\n\t\t\tval.SetString(string(uints))\n\t\tdefault:\n\t\t\tconverted = false\n\t\t}\n\tdefault:\n\t\tconverted = false\n\t}\n\n\tif !converted {\n\t\treturn fmt.Errorf(\n\t\t\t\"'%s' expected type '%s', got unconvertible type '%s'\",\n\t\t\tname, val.Type(), dataVal.Type())\n\t}\n\n\treturn nil\n}\n\nfunc (d *Decoder) decodeInt(name string, data interface{}, val reflect.Value) error {\n\tdataVal := reflect.Indirect(reflect.ValueOf(data))\n\tdataKind := getKind(dataVal)\n\tdataType := dataVal.Type()\n\n\tswitch {\n\tcase dataKind == reflect.Int:\n\t\tval.SetInt(dataVal.Int())\n\tcase dataKind == reflect.Uint:\n\t\tval.SetInt(int64(dataVal.Uint()))\n\tcase dataKind == reflect.Float32:\n\t\tval.SetInt(int64(dataVal.Float()))\n\tcase dataKind == reflect.Bool && d.config.WeaklyTypedInput:\n\t\tif dataVal.Bool() {\n\t\t\tval.SetInt(1)\n\t\t} else {\n\t\t\tval.SetInt(0)\n\t\t}\n\tcase dataKind == reflect.String && d.config.WeaklyTypedInput:\n\t\ti, err := strconv.ParseInt(dataVal.String(), 0, val.Type().Bits())\n\t\tif err == nil {\n\t\t\tval.SetInt(i)\n\t\t} else {\n\t\t\treturn fmt.Errorf(\"cannot parse '%s' as int: %s\", name, err)\n\t\t}\n\tcase dataType.PkgPath() == \"encoding/json\" && dataType.Name() == \"Number\":\n\t\tjn := data.(json.Number)\n\t\ti, err := jn.Int64()\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\n\t\t\t\t\"error decoding json.Number into %s: %s\", name, err)\n\t\t}\n\t\tval.SetInt(i)\n\tdefault:\n\t\treturn fmt.Errorf(\n\t\t\t\"'%s' expected type '%s', got unconvertible type '%s'\",\n\t\t\tname, val.Type(), dataVal.Type())\n\t}\n\n\treturn nil\n}\n\nfunc (d *Decoder) decodeUint(name string, data interface{}, val reflect.Value) error {\n\tdataVal := reflect.Indirect(reflect.ValueOf(data))\n\tdataKind := getKind(dataVal)\n\n\tswitch {\n\tcase dataKind == reflect.Int:\n\t\ti := dataVal.Int()\n\t\tif i < 0 && !d.config.WeaklyTypedInput {\n\t\t\treturn fmt.Errorf(\"cannot parse '%s', %d overflows uint\",\n\t\t\t\tname, i)\n\t\t}\n\t\tval.SetUint(uint64(i))\n\tcase dataKind == reflect.Uint:\n\t\tval.SetUint(dataVal.Uint())\n\tcase dataKind == reflect.Float32:\n\t\tf := dataVal.Float()\n\t\tif f < 0 && !d.config.WeaklyTypedInput {\n\t\t\treturn fmt.Errorf(\"cannot parse '%s', %f overflows uint\",\n\t\t\t\tname, f)\n\t\t}\n\t\tval.SetUint(uint64(f))\n\tcase dataKind == reflect.Bool && d.config.WeaklyTypedInput:\n\t\tif dataVal.Bool() {\n\t\t\tval.SetUint(1)\n\t\t} else {\n\t\t\tval.SetUint(0)\n\t\t}\n\tcase dataKind == reflect.String && d.config.WeaklyTypedInput:\n\t\ti, err := strconv.ParseUint(dataVal.String(), 0, val.Type().Bits())\n\t\tif err == nil {\n\t\t\tval.SetUint(i)\n\t\t} else {\n\t\t\treturn fmt.Errorf(\"cannot parse '%s' as uint: %s\", name, err)\n\t\t}\n\tdefault:\n\t\treturn fmt.Errorf(\n\t\t\t\"'%s' expected type '%s', got unconvertible type '%s'\",\n\t\t\tname, val.Type(), dataVal.Type())\n\t}\n\n\treturn nil\n}\n\nfunc (d *Decoder) decodeBool(name string, data interface{}, val reflect.Value) error {\n\tdataVal := reflect.Indirect(reflect.ValueOf(data))\n\tdataKind := getKind(dataVal)\n\n\tswitch {\n\tcase dataKind == reflect.Bool:\n\t\tval.SetBool(dataVal.Bool())\n\tcase dataKind == reflect.Int && d.config.WeaklyTypedInput:\n\t\tval.SetBool(dataVal.Int() != 0)\n\tcase dataKind == reflect.Uint && d.config.WeaklyTypedInput:\n\t\tval.SetBool(dataVal.Uint() != 0)\n\tcase dataKind == reflect.Float32 && d.config.WeaklyTypedInput:\n\t\tval.SetBool(dataVal.Float() != 0)\n\tcase dataKind == reflect.String && d.config.WeaklyTypedInput:\n\t\tb, err := strconv.ParseBool(dataVal.String())\n\t\tif err == nil {\n\t\t\tval.SetBool(b)\n\t\t} else if dataVal.String() == \"\" {\n\t\t\tval.SetBool(false)\n\t\t} else {\n\t\t\treturn fmt.Errorf(\"cannot parse '%s' as bool: %s\", name, err)\n\t\t}\n\tdefault:\n\t\treturn fmt.Errorf(\n\t\t\t\"'%s' expected type '%s', got unconvertible type '%s'\",\n\t\t\tname, val.Type(), dataVal.Type())\n\t}\n\n\treturn nil\n}\n\nfunc (d *Decoder) decodeFloat(name string, data interface{}, val reflect.Value) error {\n\tdataVal := reflect.Indirect(reflect.ValueOf(data))\n\tdataKind := getKind(dataVal)\n\tdataType := dataVal.Type()\n\n\tswitch {\n\tcase dataKind == reflect.Int:\n\t\tval.SetFloat(float64(dataVal.Int()))\n\tcase dataKind == reflect.Uint:\n\t\tval.SetFloat(float64(dataVal.Uint()))\n\tcase dataKind == reflect.Float32:\n\t\tval.SetFloat(dataVal.Float())\n\tcase dataKind == reflect.Bool && d.config.WeaklyTypedInput:\n\t\tif dataVal.Bool() {\n\t\t\tval.SetFloat(1)\n\t\t} else {\n\t\t\tval.SetFloat(0)\n\t\t}\n\tcase dataKind == reflect.String && d.config.WeaklyTypedInput:\n\t\tf, err := strconv.ParseFloat(dataVal.String(), val.Type().Bits())\n\t\tif err == nil {\n\t\t\tval.SetFloat(f)\n\t\t} else {\n\t\t\treturn fmt.Errorf(\"cannot parse '%s' as float: %s\", name, err)\n\t\t}\n\tcase dataType.PkgPath() == \"encoding/json\" && dataType.Name() == \"Number\":\n\t\tjn := data.(json.Number)\n\t\ti, err := jn.Float64()\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\n\t\t\t\t\"error decoding json.Number into %s: %s\", name, err)\n\t\t}\n\t\tval.SetFloat(i)\n\tdefault:\n\t\treturn fmt.Errorf(\n\t\t\t\"'%s' expected type '%s', got unconvertible type '%s'\",\n\t\t\tname, val.Type(), dataVal.Type())\n\t}\n\n\treturn nil\n}\n\nfunc (d *Decoder) decodeMap(name string, data interface{}, val reflect.Value) error {\n\tvalType := val.Type()\n\tvalKeyType := valType.Key()\n\tvalElemType := valType.Elem()\n\n\t// By default we overwrite keys in the current map\n\tvalMap := val\n\n\t// If the map is nil or we're purposely zeroing fields, make a new map\n\tif valMap.IsNil() || d.config.ZeroFields {\n\t\t// Make a new map to hold our result\n\t\tmapType := reflect.MapOf(valKeyType, valElemType)\n\t\tvalMap = reflect.MakeMap(mapType)\n\t}\n\n\t// Check input type and based on the input type jump to the proper func\n\tdataVal := reflect.Indirect(reflect.ValueOf(data))\n\tswitch dataVal.Kind() {\n\tcase reflect.Map:\n\t\treturn d.decodeMapFromMap(name, dataVal, val, valMap)\n\n\tcase reflect.Struct:\n\t\treturn d.decodeMapFromStruct(name, dataVal, val, valMap)\n\n\tcase reflect.Array, reflect.Slice:\n\t\tif d.config.WeaklyTypedInput {\n\t\t\treturn d.decodeMapFromSlice(name, dataVal, val, valMap)\n\t\t}\n\n\t\tfallthrough\n\n\tdefault:\n\t\treturn fmt.Errorf(\"'%s' expected a map, got '%s'\", name, dataVal.Kind())\n\t}\n}\n\nfunc (d *Decoder) decodeMapFromSlice(name string, dataVal reflect.Value, val reflect.Value, valMap reflect.Value) error {\n\t// Special case for BC reasons (covered by tests)\n\tif dataVal.Len() == 0 {\n\t\tval.Set(valMap)\n\t\treturn nil\n\t}\n\n\tfor i := 0; i < dataVal.Len(); i++ {\n\t\terr := d.decode(\n\t\t\tfmt.Sprintf(\"%s[%d]\", name, i),\n\t\t\tdataVal.Index(i).Interface(), val)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (d *Decoder) decodeMapFromMap(name string, dataVal reflect.Value, val reflect.Value, valMap reflect.Value) error {\n\tvalType := val.Type()\n\tvalKeyType := valType.Key()\n\tvalElemType := valType.Elem()\n\n\t// Accumulate errors\n\terrors := make([]string, 0)\n\n\t// If the input data is empty, then we just match what the input data is.\n\tif dataVal.Len() == 0 {\n\t\tif dataVal.IsNil() {\n\t\t\tif !val.IsNil() {\n\t\t\t\tval.Set(dataVal)\n\t\t\t}\n\t\t} else {\n\t\t\t// Set to empty allocated value\n\t\t\tval.Set(valMap)\n\t\t}\n\n\t\treturn nil\n\t}\n\n\tfor _, k := range dataVal.MapKeys() {\n\t\tfieldName := fmt.Sprintf(\"%s[%s]\", name, k)\n\n\t\t// First decode the key into the proper type\n\t\tcurrentKey := reflect.Indirect(reflect.New(valKeyType))\n\t\tif err := d.decode(fieldName, k.Interface(), currentKey); err != nil {\n\t\t\terrors = appendErrors(errors, err)\n\t\t\tcontinue\n\t\t}\n\n\t\t// Next decode the data into the proper type\n\t\tv := dataVal.MapIndex(k).Interface()\n\t\tcurrentVal := reflect.Indirect(reflect.New(valElemType))\n\t\tif err := d.decode(fieldName, v, currentVal); err != nil {\n\t\t\terrors = appendErrors(errors, err)\n\t\t\tcontinue\n\t\t}\n\n\t\tvalMap.SetMapIndex(currentKey, currentVal)\n\t}\n\n\t// Set the built up map to the value\n\tval.Set(valMap)\n\n\t// If we had errors, return those\n\tif len(errors) > 0 {\n\t\treturn &Error{errors}\n\t}\n\n\treturn nil\n}\n\nfunc (d *Decoder) decodeMapFromStruct(name string, dataVal reflect.Value, val reflect.Value, valMap reflect.Value) error {\n\ttyp := dataVal.Type()\n\tfor i := 0; i < typ.NumField(); i++ {\n\t\t// Get the StructField first since this is a cheap operation. If the\n\t\t// field is unexported, then ignore it.\n\t\tf := typ.Field(i)\n\t\tif f.PkgPath != \"\" {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Next get the actual value of this field and verify it is assignable\n\t\t// to the map value.\n\t\tv := dataVal.Field(i)\n\t\tif !v.Type().AssignableTo(valMap.Type().Elem()) {\n\t\t\treturn fmt.Errorf(\"cannot assign type '%s' to map value field of type '%s'\", v.Type(), valMap.Type().Elem())\n\t\t}\n\n\t\ttagValue := f.Tag.Get(d.config.TagName)\n\t\ttagParts := strings.Split(tagValue, \",\")\n\n\t\t// Determine the name of the key in the map\n\t\tkeyName := f.Name\n\t\tif tagParts[0] != \"\" {\n\t\t\tif tagParts[0] == \"-\" {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tkeyName = tagParts[0]\n\t\t}\n\n\t\t// If \"squash\" is specified in the tag, we squash the field down.\n\t\tsquash := false\n\t\tfor _, tag := range tagParts[1:] {\n\t\t\tif tag == \"squash\" {\n\t\t\t\tsquash = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif squash && v.Kind() != reflect.Struct {\n\t\t\treturn fmt.Errorf(\"cannot squash non-struct type '%s'\", v.Type())\n\t\t}\n\n\t\tswitch v.Kind() {\n\t\t// this is an embedded struct, so handle it differently\n\t\tcase reflect.Struct:\n\t\t\tx := reflect.New(v.Type())\n\t\t\tx.Elem().Set(v)\n\n\t\t\tvType := valMap.Type()\n\t\t\tvKeyType := vType.Key()\n\t\t\tvElemType := vType.Elem()\n\t\t\tmType := reflect.MapOf(vKeyType, vElemType)\n\t\t\tvMap := reflect.MakeMap(mType)\n\n\t\t\terr := d.decode(keyName, x.Interface(), vMap)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tif squash {\n\t\t\t\tfor _, k := range vMap.MapKeys() {\n\t\t\t\t\tvalMap.SetMapIndex(k, vMap.MapIndex(k))\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvalMap.SetMapIndex(reflect.ValueOf(keyName), vMap)\n\t\t\t}\n\n\t\tdefault:\n\t\t\tvalMap.SetMapIndex(reflect.ValueOf(keyName), v)\n\t\t}\n\t}\n\n\tif val.CanAddr() {\n\t\tval.Set(valMap)\n\t}\n\n\treturn nil\n}\n\nfunc (d *Decoder) decodePtr(name string, data interface{}, val reflect.Value) error {\n\t// If the input data is nil, then we want to just set the output\n\t// pointer to be nil as well.\n\tisNil := data == nil\n\tif !isNil {\n\t\tswitch v := reflect.Indirect(reflect.ValueOf(data)); v.Kind() {\n\t\tcase reflect.Chan,\n\t\t\treflect.Func,\n\t\t\treflect.Interface,\n\t\t\treflect.Map,\n\t\t\treflect.Ptr,\n\t\t\treflect.Slice:\n\t\t\tisNil = v.IsNil()\n\t\t}\n\t}\n\tif isNil {\n\t\tif !val.IsNil() && val.CanSet() {\n\t\t\tnilValue := reflect.New(val.Type()).Elem()\n\t\t\tval.Set(nilValue)\n\t\t}\n\n\t\treturn nil\n\t}\n\n\t// Create an element of the concrete (non pointer) type and decode\n\t// into that. Then set the value of the pointer to this type.\n\tvalType := val.Type()\n\tvalElemType := valType.Elem()\n\tif val.CanSet() {\n\t\trealVal := val\n\t\tif realVal.IsNil() || d.config.ZeroFields {\n\t\t\trealVal = reflect.New(valElemType)\n\t\t}\n\n\t\tif err := d.decode(name, data, reflect.Indirect(realVal)); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tval.Set(realVal)\n\t} else {\n\t\tif err := d.decode(name, data, reflect.Indirect(val)); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (d *Decoder) decodeFunc(name string, data interface{}, val reflect.Value) error {\n\t// Create an element of the concrete (non pointer) type and decode\n\t// into that. Then set the value of the pointer to this type.\n\tdataVal := reflect.Indirect(reflect.ValueOf(data))\n\tif val.Type() != dataVal.Type() {\n\t\treturn fmt.Errorf(\n\t\t\t\"'%s' expected type '%s', got unconvertible type '%s'\",\n\t\t\tname, val.Type(), dataVal.Type())\n\t}\n\tval.Set(dataVal)\n\treturn nil\n}\n\nfunc (d *Decoder) decodeSlice(name string, data interface{}, val reflect.Value) error {\n\tdataVal := reflect.Indirect(reflect.ValueOf(data))\n\tdataValKind := dataVal.Kind()\n\tvalType := val.Type()\n\tvalElemType := valType.Elem()\n\tsliceType := reflect.SliceOf(valElemType)\n\n\tvalSlice := val\n\tif valSlice.IsNil() || d.config.ZeroFields {\n\t\tif d.config.WeaklyTypedInput {\n\t\t\tswitch {\n\t\t\t// Slice and array we use the normal logic\n\t\t\tcase dataValKind == reflect.Slice, dataValKind == reflect.Array:\n\t\t\t\tbreak\n\n\t\t\t// Empty maps turn into empty slices\n\t\t\tcase dataValKind == reflect.Map:\n\t\t\t\tif dataVal.Len() == 0 {\n\t\t\t\t\tval.Set(reflect.MakeSlice(sliceType, 0, 0))\n\t\t\t\t\treturn nil\n\t\t\t\t}\n\t\t\t\t// Create slice of maps of other sizes\n\t\t\t\treturn d.decodeSlice(name, []interface{}{data}, val)\n\n\t\t\tcase dataValKind == reflect.String && valElemType.Kind() == reflect.Uint8:\n\t\t\t\treturn d.decodeSlice(name, []byte(dataVal.String()), val)\n\n\t\t\t// All other types we try to convert to the slice type\n\t\t\t// and \"lift\" it into it. i.e. a string becomes a string slice.\n\t\t\tdefault:\n\t\t\t\t// Just re-try this function with data as a slice.\n\t\t\t\treturn d.decodeSlice(name, []interface{}{data}, val)\n\t\t\t}\n\t\t}\n\n\t\t// Check input type\n\t\tif dataValKind != reflect.Array && dataValKind != reflect.Slice {\n\t\t\treturn fmt.Errorf(\n\t\t\t\t\"'%s': source data must be an array or slice, got %s\", name, dataValKind)\n\n\t\t}\n\n\t\t// If the input value is empty, then don't allocate since non-nil != nil\n\t\tif dataVal.Len() == 0 {\n\t\t\treturn nil\n\t\t}\n\n\t\t// Make a new slice to hold our result, same size as the original data.\n\t\tvalSlice = reflect.MakeSlice(sliceType, dataVal.Len(), dataVal.Len())\n\t}\n\n\t// Accumulate any errors\n\terrors := make([]string, 0)\n\n\tfor i := 0; i < dataVal.Len(); i++ {\n\t\tcurrentData := dataVal.Index(i).Interface()\n\t\tfor valSlice.Len() <= i {\n\t\t\tvalSlice = reflect.Append(valSlice, reflect.Zero(valElemType))\n\t\t}\n\t\tcurrentField := valSlice.Index(i)\n\n\t\tfieldName := fmt.Sprintf(\"%s[%d]\", name, i)\n\t\tif err := d.decode(fieldName, currentData, currentField); err != nil {\n\t\t\terrors = appendErrors(errors, err)\n\t\t}\n\t}\n\n\t// Finally, set the value to the slice we built up\n\tval.Set(valSlice)\n\n\t// If there were errors, we return those\n\tif len(errors) > 0 {\n\t\treturn &Error{errors}\n\t}\n\n\treturn nil\n}\n\nfunc (d *Decoder) decodeArray(name string, data interface{}, val reflect.Value) error {\n\tdataVal := reflect.Indirect(reflect.ValueOf(data))\n\tdataValKind := dataVal.Kind()\n\tvalType := val.Type()\n\tvalElemType := valType.Elem()\n\tarrayType := reflect.ArrayOf(valType.Len(), valElemType)\n\n\tvalArray := val\n\n\tif valArray.Interface() == reflect.Zero(valArray.Type()).Interface() || d.config.ZeroFields {\n\t\t// Check input type\n\t\tif dataValKind != reflect.Array && dataValKind != reflect.Slice {\n\t\t\tif d.config.WeaklyTypedInput {\n\t\t\t\tswitch {\n\t\t\t\t// Empty maps turn into empty arrays\n\t\t\t\tcase dataValKind == reflect.Map:\n\t\t\t\t\tif dataVal.Len() == 0 {\n\t\t\t\t\t\tval.Set(reflect.Zero(arrayType))\n\t\t\t\t\t\treturn nil\n\t\t\t\t\t}\n\n\t\t\t\t// All other types we try to convert to the array type\n\t\t\t\t// and \"lift\" it into it. i.e. a string becomes a string array.\n\t\t\t\tdefault:\n\t\t\t\t\t// Just re-try this function with data as a slice.\n\t\t\t\t\treturn d.decodeArray(name, []interface{}{data}, val)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn fmt.Errorf(\n\t\t\t\t\"'%s': source data must be an array or slice, got %s\", name, dataValKind)\n\n\t\t}\n\t\tif dataVal.Len() > arrayType.Len() {\n\t\t\treturn fmt.Errorf(\n\t\t\t\t\"'%s': expected source data to have length less or equal to %d, got %d\", name, arrayType.Len(), dataVal.Len())\n\n\t\t}\n\n\t\t// Make a new array to hold our result, same size as the original data.\n\t\tvalArray = reflect.New(arrayType).Elem()\n\t}\n\n\t// Accumulate any errors\n\terrors := make([]string, 0)\n\n\tfor i := 0; i < dataVal.Len(); i++ {\n\t\tcurrentData := dataVal.Index(i).Interface()\n\t\tcurrentField := valArray.Index(i)\n\n\t\tfieldName := fmt.Sprintf(\"%s[%d]\", name, i)\n\t\tif err := d.decode(fieldName, currentData, currentField); err != nil {\n\t\t\terrors = appendErrors(errors, err)\n\t\t}\n\t}\n\n\t// Finally, set the value to the array we built up\n\tval.Set(valArray)\n\n\t// If there were errors, we return those\n\tif len(errors) > 0 {\n\t\treturn &Error{errors}\n\t}\n\n\treturn nil\n}\n\nfunc (d *Decoder) decodeStruct(name string, data interface{}, val reflect.Value) error {\n\tdataVal := reflect.Indirect(reflect.ValueOf(data))\n\n\t// If the type of the value to write to and the data match directly,\n\t// then we just set it directly instead of recursing into the structure.\n\tif dataVal.Type() == val.Type() {\n\t\tval.Set(dataVal)\n\t\treturn nil\n\t}\n\n\tdataValKind := dataVal.Kind()\n\tswitch dataValKind {\n\tcase reflect.Map:\n\t\treturn d.decodeStructFromMap(name, dataVal, val)\n\n\tcase reflect.Struct:\n\t\t// Not the most efficient way to do this but we can optimize later if\n\t\t// we want to. To convert from struct to struct we go to map first\n\t\t// as an intermediary.\n\t\tm := make(map[string]interface{})\n\t\tmval := reflect.Indirect(reflect.ValueOf(&m))\n\t\tif err := d.decodeMapFromStruct(name, dataVal, mval, mval); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tresult := d.decodeStructFromMap(name, mval, val)\n\t\treturn result\n\n\tdefault:\n\t\treturn fmt.Errorf(\"'%s' expected a map, got '%s'\", name, dataVal.Kind())\n\t}\n}\n\nfunc (d *Decoder) decodeStructFromMap(name string, dataVal, val reflect.Value) error {\n\tdataValType := dataVal.Type()\n\tif kind := dataValType.Key().Kind(); kind != reflect.String && kind != reflect.Interface {\n\t\treturn fmt.Errorf(\n\t\t\t\"'%s' needs a map with string keys, has '%s' keys\",\n\t\t\tname, dataValType.Key().Kind())\n\t}\n\n\tdataValKeys := make(map[reflect.Value]struct{})\n\tdataValKeysUnused := make(map[interface{}]struct{})\n\tfor _, dataValKey := range dataVal.MapKeys() {\n\t\tdataValKeys[dataValKey] = struct{}{}\n\t\tdataValKeysUnused[dataValKey.Interface()] = struct{}{}\n\t}\n\n\terrors := make([]string, 0)\n\n\t// This slice will keep track of all the structs we'll be decoding.\n\t// There can be more than one struct if there are embedded structs\n\t// that are squashed.\n\tstructs := make([]reflect.Value, 1, 5)\n\tstructs[0] = val\n\n\t// Compile the list of all the fields that we're going to be decoding\n\t// from all the structs.\n\ttype field struct {\n\t\tfield reflect.StructField\n\t\tval   reflect.Value\n\t}\n\tfields := []field{}\n\tfor len(structs) > 0 {\n\t\tstructVal := structs[0]\n\t\tstructs = structs[1:]\n\n\t\tstructType := structVal.Type()\n\n\t\tfor i := 0; i < structType.NumField(); i++ {\n\t\t\tfieldType := structType.Field(i)\n\t\t\tfieldKind := fieldType.Type.Kind()\n\n\t\t\t// If \"squash\" is specified in the tag, we squash the field down.\n\t\t\tsquash := false\n\t\t\ttagParts := strings.Split(fieldType.Tag.Get(d.config.TagName), \",\")\n\t\t\tfor _, tag := range tagParts[1:] {\n\t\t\t\tif tag == \"squash\" {\n\t\t\t\t\tsquash = true\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif squash {\n\t\t\t\tif fieldKind != reflect.Struct {\n\t\t\t\t\terrors = appendErrors(errors,\n\t\t\t\t\t\tfmt.Errorf(\"%s: unsupported type for squash: %s\", fieldType.Name, fieldKind))\n\t\t\t\t} else {\n\t\t\t\t\tstructs = append(structs, structVal.FieldByName(fieldType.Name))\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// Normal struct field, store it away\n\t\t\tfields = append(fields, field{fieldType, structVal.Field(i)})\n\t\t}\n\t}\n\n\t// for fieldType, field := range fields {\n\tfor _, f := range fields {\n\t\tfield, fieldValue := f.field, f.val\n\t\tfieldName := field.Name\n\n\t\ttagValue := field.Tag.Get(d.config.TagName)\n\t\ttagValue = strings.SplitN(tagValue, \",\", 2)[0]\n\t\tif tagValue != \"\" {\n\t\t\tfieldName = tagValue\n\t\t}\n\n\t\trawMapKey := reflect.ValueOf(fieldName)\n\t\trawMapVal := dataVal.MapIndex(rawMapKey)\n\t\tif !rawMapVal.IsValid() {\n\t\t\t// Do a slower search by iterating over each key and\n\t\t\t// doing case-insensitive search.\n\t\t\tfor dataValKey := range dataValKeys {\n\t\t\t\tmK, ok := dataValKey.Interface().(string)\n\t\t\t\tif !ok {\n\t\t\t\t\t// Not a string key\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tif strings.EqualFold(mK, fieldName) {\n\t\t\t\t\trawMapKey = dataValKey\n\t\t\t\t\trawMapVal = dataVal.MapIndex(dataValKey)\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif !rawMapVal.IsValid() {\n\t\t\t\t// There was no matching key in the map for the value in\n\t\t\t\t// the struct. Just ignore.\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\t// Delete the key we're using from the unused map so we stop tracking\n\t\tdelete(dataValKeysUnused, rawMapKey.Interface())\n\n\t\tif !fieldValue.IsValid() {\n\t\t\t// This should never happen\n\t\t\tpanic(\"field is not valid\")\n\t\t}\n\n\t\t// If we can't set the field, then it is unexported or something,\n\t\t// and we just continue onwards.\n\t\tif !fieldValue.CanSet() {\n\t\t\tcontinue\n\t\t}\n\n\t\t// If the name is empty string, then we're at the root, and we\n\t\t// don't dot-join the fields.\n\t\tif name != \"\" {\n\t\t\tfieldName = fmt.Sprintf(\"%s.%s\", name, fieldName)\n\t\t}\n\n\t\tif err := d.decode(fieldName, rawMapVal.Interface(), fieldValue); err != nil {\n\t\t\terrors = appendErrors(errors, err)\n\t\t}\n\t}\n\n\tif d.config.ErrorUnused && len(dataValKeysUnused) > 0 {\n\t\tkeys := make([]string, 0, len(dataValKeysUnused))\n\t\tfor rawKey := range dataValKeysUnused {\n\t\t\tkeys = append(keys, rawKey.(string))\n\t\t}\n\t\tsort.Strings(keys)\n\n\t\terr := fmt.Errorf(\"'%s' has invalid keys: %s\", name, strings.Join(keys, \", \"))\n\t\terrors = appendErrors(errors, err)\n\t}\n\n\tif len(errors) > 0 {\n\t\treturn &Error{errors}\n\t}\n\n\t// Add the unused keys to the list of unused keys if we're tracking metadata\n\tif d.config.Metadata != nil {\n\t\tfor rawKey := range dataValKeysUnused {\n\t\t\tkey := rawKey.(string)\n\t\t\tif name != \"\" {\n\t\t\t\tkey = fmt.Sprintf(\"%s.%s\", name, key)\n\t\t\t}\n\n\t\t\td.config.Metadata.Unused = append(d.config.Metadata.Unused, key)\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc getKind(val reflect.Value) reflect.Kind {\n\tkind := val.Kind()\n\n\tswitch {\n\tcase kind >= reflect.Int && kind <= reflect.Int64:\n\t\treturn reflect.Int\n\tcase kind >= reflect.Uint && kind <= reflect.Uint64:\n\t\treturn reflect.Uint\n\tcase kind >= reflect.Float32 && kind <= reflect.Float64:\n\t\treturn reflect.Float32\n\tdefault:\n\t\treturn kind\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/mitchellh/reflectwalk/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2013 Mitchell Hashimoto\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "vendor/github.com/mitchellh/reflectwalk/location.go",
    "content": "package reflectwalk\n\n//go:generate stringer -type=Location location.go\n\ntype Location uint\n\nconst (\n\tNone Location = iota\n\tMap\n\tMapKey\n\tMapValue\n\tSlice\n\tSliceElem\n\tArray\n\tArrayElem\n\tStruct\n\tStructField\n\tWalkLoc\n)\n"
  },
  {
    "path": "vendor/github.com/mitchellh/reflectwalk/location_string.go",
    "content": "// Code generated by \"stringer -type=Location location.go\"; DO NOT EDIT.\n\npackage reflectwalk\n\nimport \"fmt\"\n\nconst _Location_name = \"NoneMapMapKeyMapValueSliceSliceElemArrayArrayElemStructStructFieldWalkLoc\"\n\nvar _Location_index = [...]uint8{0, 4, 7, 13, 21, 26, 35, 40, 49, 55, 66, 73}\n\nfunc (i Location) String() string {\n\tif i >= Location(len(_Location_index)-1) {\n\t\treturn fmt.Sprintf(\"Location(%d)\", i)\n\t}\n\treturn _Location_name[_Location_index[i]:_Location_index[i+1]]\n}\n"
  },
  {
    "path": "vendor/github.com/mitchellh/reflectwalk/reflectwalk.go",
    "content": "// reflectwalk is a package that allows you to \"walk\" complex structures\n// similar to how you may \"walk\" a filesystem: visiting every element one\n// by one and calling callback functions allowing you to handle and manipulate\n// those elements.\npackage reflectwalk\n\nimport (\n\t\"errors\"\n\t\"reflect\"\n)\n\n// PrimitiveWalker implementations are able to handle primitive values\n// within complex structures. Primitive values are numbers, strings,\n// booleans, funcs, chans.\n//\n// These primitive values are often members of more complex\n// structures (slices, maps, etc.) that are walkable by other interfaces.\ntype PrimitiveWalker interface {\n\tPrimitive(reflect.Value) error\n}\n\n// InterfaceWalker implementations are able to handle interface values as they\n// are encountered during the walk.\ntype InterfaceWalker interface {\n\tInterface(reflect.Value) error\n}\n\n// MapWalker implementations are able to handle individual elements\n// found within a map structure.\ntype MapWalker interface {\n\tMap(m reflect.Value) error\n\tMapElem(m, k, v reflect.Value) error\n}\n\n// SliceWalker implementations are able to handle slice elements found\n// within complex structures.\ntype SliceWalker interface {\n\tSlice(reflect.Value) error\n\tSliceElem(int, reflect.Value) error\n}\n\n// ArrayWalker implementations are able to handle array elements found\n// within complex structures.\ntype ArrayWalker interface {\n\tArray(reflect.Value) error\n\tArrayElem(int, reflect.Value) error\n}\n\n// StructWalker is an interface that has methods that are called for\n// structs when a Walk is done.\ntype StructWalker interface {\n\tStruct(reflect.Value) error\n\tStructField(reflect.StructField, reflect.Value) error\n}\n\n// EnterExitWalker implementations are notified before and after\n// they walk deeper into complex structures (into struct fields,\n// into slice elements, etc.)\ntype EnterExitWalker interface {\n\tEnter(Location) error\n\tExit(Location) error\n}\n\n// PointerWalker implementations are notified when the value they're\n// walking is a pointer or not. Pointer is called for _every_ value whether\n// it is a pointer or not.\ntype PointerWalker interface {\n\tPointerEnter(bool) error\n\tPointerExit(bool) error\n}\n\n// SkipEntry can be returned from walk functions to skip walking\n// the value of this field. This is only valid in the following functions:\n//\n//   - Struct: skips all fields from being walked\n//   - StructField: skips walking the struct value\n//\nvar SkipEntry = errors.New(\"skip this entry\")\n\n// Walk takes an arbitrary value and an interface and traverses the\n// value, calling callbacks on the interface if they are supported.\n// The interface should implement one or more of the walker interfaces\n// in this package, such as PrimitiveWalker, StructWalker, etc.\nfunc Walk(data, walker interface{}) (err error) {\n\tv := reflect.ValueOf(data)\n\tew, ok := walker.(EnterExitWalker)\n\tif ok {\n\t\terr = ew.Enter(WalkLoc)\n\t}\n\n\tif err == nil {\n\t\terr = walk(v, walker)\n\t}\n\n\tif ok && err == nil {\n\t\terr = ew.Exit(WalkLoc)\n\t}\n\n\treturn\n}\n\nfunc walk(v reflect.Value, w interface{}) (err error) {\n\t// Determine if we're receiving a pointer and if so notify the walker.\n\t// The logic here is convoluted but very important (tests will fail if\n\t// almost any part is changed). I will try to explain here.\n\t//\n\t// First, we check if the value is an interface, if so, we really need\n\t// to check the interface's VALUE to see whether it is a pointer.\n\t//\n\t// Check whether the value is then a pointer. If so, then set pointer\n\t// to true to notify the user.\n\t//\n\t// If we still have a pointer or an interface after the indirections, then\n\t// we unwrap another level\n\t//\n\t// At this time, we also set \"v\" to be the dereferenced value. This is\n\t// because once we've unwrapped the pointer we want to use that value.\n\tpointer := false\n\tpointerV := v\n\n\tfor {\n\t\tif pointerV.Kind() == reflect.Interface {\n\t\t\tif iw, ok := w.(InterfaceWalker); ok {\n\t\t\t\tif err = iw.Interface(pointerV); err != nil {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tpointerV = pointerV.Elem()\n\t\t}\n\n\t\tif pointerV.Kind() == reflect.Ptr {\n\t\t\tpointer = true\n\t\t\tv = reflect.Indirect(pointerV)\n\t\t}\n\t\tif pw, ok := w.(PointerWalker); ok {\n\t\t\tif err = pw.PointerEnter(pointer); err != nil {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tdefer func(pointer bool) {\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\terr = pw.PointerExit(pointer)\n\t\t\t}(pointer)\n\t\t}\n\n\t\tif pointer {\n\t\t\tpointerV = v\n\t\t}\n\t\tpointer = false\n\n\t\t// If we still have a pointer or interface we have to indirect another level.\n\t\tswitch pointerV.Kind() {\n\t\tcase reflect.Ptr, reflect.Interface:\n\t\t\tcontinue\n\t\t}\n\t\tbreak\n\t}\n\n\t// We preserve the original value here because if it is an interface\n\t// type, we want to pass that directly into the walkPrimitive, so that\n\t// we can set it.\n\toriginalV := v\n\tif v.Kind() == reflect.Interface {\n\t\tv = v.Elem()\n\t}\n\n\tk := v.Kind()\n\tif k >= reflect.Int && k <= reflect.Complex128 {\n\t\tk = reflect.Int\n\t}\n\n\tswitch k {\n\t// Primitives\n\tcase reflect.Bool, reflect.Chan, reflect.Func, reflect.Int, reflect.String, reflect.Invalid:\n\t\terr = walkPrimitive(originalV, w)\n\t\treturn\n\tcase reflect.Map:\n\t\terr = walkMap(v, w)\n\t\treturn\n\tcase reflect.Slice:\n\t\terr = walkSlice(v, w)\n\t\treturn\n\tcase reflect.Struct:\n\t\terr = walkStruct(v, w)\n\t\treturn\n\tcase reflect.Array:\n\t\terr = walkArray(v, w)\n\t\treturn\n\tdefault:\n\t\tpanic(\"unsupported type: \" + k.String())\n\t}\n}\n\nfunc walkMap(v reflect.Value, w interface{}) error {\n\tew, ewok := w.(EnterExitWalker)\n\tif ewok {\n\t\tew.Enter(Map)\n\t}\n\n\tif mw, ok := w.(MapWalker); ok {\n\t\tif err := mw.Map(v); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tfor _, k := range v.MapKeys() {\n\t\tkv := v.MapIndex(k)\n\n\t\tif mw, ok := w.(MapWalker); ok {\n\t\t\tif err := mw.MapElem(v, k, kv); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\n\t\tew, ok := w.(EnterExitWalker)\n\t\tif ok {\n\t\t\tew.Enter(MapKey)\n\t\t}\n\n\t\tif err := walk(k, w); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tif ok {\n\t\t\tew.Exit(MapKey)\n\t\t\tew.Enter(MapValue)\n\t\t}\n\n\t\t// get the map value again as it may have changed in the MapElem call\n\t\tif err := walk(v.MapIndex(k), w); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tif ok {\n\t\t\tew.Exit(MapValue)\n\t\t}\n\t}\n\n\tif ewok {\n\t\tew.Exit(Map)\n\t}\n\n\treturn nil\n}\n\nfunc walkPrimitive(v reflect.Value, w interface{}) error {\n\tif pw, ok := w.(PrimitiveWalker); ok {\n\t\treturn pw.Primitive(v)\n\t}\n\n\treturn nil\n}\n\nfunc walkSlice(v reflect.Value, w interface{}) (err error) {\n\tew, ok := w.(EnterExitWalker)\n\tif ok {\n\t\tew.Enter(Slice)\n\t}\n\n\tif sw, ok := w.(SliceWalker); ok {\n\t\tif err := sw.Slice(v); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tfor i := 0; i < v.Len(); i++ {\n\t\telem := v.Index(i)\n\n\t\tif sw, ok := w.(SliceWalker); ok {\n\t\t\tif err := sw.SliceElem(i, elem); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\n\t\tew, ok := w.(EnterExitWalker)\n\t\tif ok {\n\t\t\tew.Enter(SliceElem)\n\t\t}\n\n\t\tif err := walk(elem, w); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tif ok {\n\t\t\tew.Exit(SliceElem)\n\t\t}\n\t}\n\n\tew, ok = w.(EnterExitWalker)\n\tif ok {\n\t\tew.Exit(Slice)\n\t}\n\n\treturn nil\n}\n\nfunc walkArray(v reflect.Value, w interface{}) (err error) {\n\tew, ok := w.(EnterExitWalker)\n\tif ok {\n\t\tew.Enter(Array)\n\t}\n\n\tif aw, ok := w.(ArrayWalker); ok {\n\t\tif err := aw.Array(v); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tfor i := 0; i < v.Len(); i++ {\n\t\telem := v.Index(i)\n\n\t\tif aw, ok := w.(ArrayWalker); ok {\n\t\t\tif err := aw.ArrayElem(i, elem); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\n\t\tew, ok := w.(EnterExitWalker)\n\t\tif ok {\n\t\t\tew.Enter(ArrayElem)\n\t\t}\n\n\t\tif err := walk(elem, w); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tif ok {\n\t\t\tew.Exit(ArrayElem)\n\t\t}\n\t}\n\n\tew, ok = w.(EnterExitWalker)\n\tif ok {\n\t\tew.Exit(Array)\n\t}\n\n\treturn nil\n}\n\nfunc walkStruct(v reflect.Value, w interface{}) (err error) {\n\tew, ewok := w.(EnterExitWalker)\n\tif ewok {\n\t\tew.Enter(Struct)\n\t}\n\n\tskip := false\n\tif sw, ok := w.(StructWalker); ok {\n\t\terr = sw.Struct(v)\n\t\tif err == SkipEntry {\n\t\t\tskip = true\n\t\t\terr = nil\n\t\t}\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t}\n\n\tif !skip {\n\t\tvt := v.Type()\n\t\tfor i := 0; i < vt.NumField(); i++ {\n\t\t\tsf := vt.Field(i)\n\t\t\tf := v.FieldByIndex([]int{i})\n\n\t\t\tif sw, ok := w.(StructWalker); ok {\n\t\t\t\terr = sw.StructField(sf, f)\n\n\t\t\t\t// SkipEntry just pretends this field doesn't even exist\n\t\t\t\tif err == SkipEntry {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tew, ok := w.(EnterExitWalker)\n\t\t\tif ok {\n\t\t\t\tew.Enter(StructField)\n\t\t\t}\n\n\t\t\terr = walk(f, w)\n\t\t\tif err != nil {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif ok {\n\t\t\t\tew.Exit(StructField)\n\t\t\t}\n\t\t}\n\t}\n\n\tif ewok {\n\t\tew.Exit(Struct)\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/oklog/run/LICENSE",
    "content": "                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "vendor/github.com/oklog/run/group.go",
    "content": "// Package run implements an actor-runner with deterministic teardown. It is\n// somewhat similar to package errgroup, except it does not require actor\n// goroutines to understand context semantics. This makes it suitable for use in\n// more circumstances; for example, goroutines which are handling connections\n// from net.Listeners, or scanning input from a closable io.Reader.\npackage run\n\n// Group collects actors (functions) and runs them concurrently.\n// When one actor (function) returns, all actors are interrupted.\n// The zero value of a Group is useful.\ntype Group struct {\n\tactors []actor\n}\n\n// Add an actor (function) to the group. Each actor must be pre-emptable by an\n// interrupt function. That is, if interrupt is invoked, execute should return.\n// Also, it must be safe to call interrupt even after execute has returned.\n//\n// The first actor (function) to return interrupts all running actors.\n// The error is passed to the interrupt functions, and is returned by Run.\nfunc (g *Group) Add(execute func() error, interrupt func(error)) {\n\tg.actors = append(g.actors, actor{execute, interrupt})\n}\n\n// Run all actors (functions) concurrently.\n// When the first actor returns, all others are interrupted.\n// Run only returns when all actors have exited.\n// Run returns the error returned by the first exiting actor.\nfunc (g *Group) Run() error {\n\tif len(g.actors) == 0 {\n\t\treturn nil\n\t}\n\n\t// Run each actor.\n\terrors := make(chan error, len(g.actors))\n\tfor _, a := range g.actors {\n\t\tgo func(a actor) {\n\t\t\terrors <- a.execute()\n\t\t}(a)\n\t}\n\n\t// Wait for the first actor to stop.\n\terr := <-errors\n\n\t// Signal all actors to stop.\n\tfor _, a := range g.actors {\n\t\ta.interrupt(err)\n\t}\n\n\t// Wait for all actors to stop.\n\tfor i := 1; i < cap(errors); i++ {\n\t\t<-errors\n\t}\n\n\t// Return the original error.\n\treturn err\n}\n\ntype actor struct {\n\texecute   func() error\n\tinterrupt func(error)\n}\n"
  },
  {
    "path": "vendor/github.com/posener/complete/LICENSE.txt",
    "content": "The MIT License\n\nCopyright (c) 2017 Eyal Posener\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE."
  },
  {
    "path": "vendor/github.com/posener/complete/args.go",
    "content": "package complete\n\nimport (\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n\t\"unicode\"\n)\n\n// Args describes command line arguments\ntype Args struct {\n\t// All lists of all arguments in command line (not including the command itself)\n\tAll []string\n\t// Completed lists of all completed arguments in command line,\n\t// If the last one is still being typed - no space after it,\n\t// it won't appear in this list of arguments.\n\tCompleted []string\n\t// Last argument in command line, the one being typed, if the last\n\t// character in the command line is a space, this argument will be empty,\n\t// otherwise this would be the last word.\n\tLast string\n\t// LastCompleted is the last argument that was fully typed.\n\t// If the last character in the command line is space, this would be the\n\t// last word, otherwise, it would be the word before that.\n\tLastCompleted string\n}\n\n// Directory gives the directory of the current written\n// last argument if it represents a file name being written.\n// in case that it is not, we fall back to the current directory.\nfunc (a Args) Directory() string {\n\tif info, err := os.Stat(a.Last); err == nil && info.IsDir() {\n\t\treturn fixPathForm(a.Last, a.Last)\n\t}\n\tdir := filepath.Dir(a.Last)\n\tif info, err := os.Stat(dir); err != nil || !info.IsDir() {\n\t\treturn \"./\"\n\t}\n\treturn fixPathForm(a.Last, dir)\n}\n\nfunc newArgs(line string) Args {\n\tvar (\n\t\tall       []string\n\t\tcompleted []string\n\t)\n\tparts := splitFields(line)\n\tif len(parts) > 0 {\n\t\tall = parts[1:]\n\t\tcompleted = removeLast(parts[1:])\n\t}\n\treturn Args{\n\t\tAll:           all,\n\t\tCompleted:     completed,\n\t\tLast:          last(parts),\n\t\tLastCompleted: last(completed),\n\t}\n}\n\n// splitFields returns a list of fields from the given command line.\n// If the last character is space, it appends an empty field in the end\n// indicating that the field before it was completed.\n// If the last field is of the form \"a=b\", it splits it to two fields: \"a\", \"b\",\n// So it can be completed.\nfunc splitFields(line string) []string {\n\tparts := strings.Fields(line)\n\n\t// Add empty field if the last field was completed.\n\tif len(line) > 0 && unicode.IsSpace(rune(line[len(line)-1])) {\n\t\tparts = append(parts, \"\")\n\t}\n\n\t// Treat the last field if it is of the form \"a=b\"\n\tparts = splitLastEqual(parts)\n\treturn parts\n}\n\nfunc splitLastEqual(line []string) []string {\n\tif len(line) == 0 {\n\t\treturn line\n\t}\n\tparts := strings.Split(line[len(line)-1], \"=\")\n\treturn append(line[:len(line)-1], parts...)\n}\n\nfunc (a Args) from(i int) Args {\n\tif i > len(a.All) {\n\t\ti = len(a.All)\n\t}\n\ta.All = a.All[i:]\n\n\tif i > len(a.Completed) {\n\t\ti = len(a.Completed)\n\t}\n\ta.Completed = a.Completed[i:]\n\treturn a\n}\n\nfunc removeLast(a []string) []string {\n\tif len(a) > 0 {\n\t\treturn a[:len(a)-1]\n\t}\n\treturn a\n}\n\nfunc last(args []string) string {\n\tif len(args) == 0 {\n\t\treturn \"\"\n\t}\n\treturn args[len(args)-1]\n}\n"
  },
  {
    "path": "vendor/github.com/posener/complete/cmd/cmd.go",
    "content": "// Package cmd used for command line options for the complete tool\npackage cmd\n\nimport (\n\t\"errors\"\n\t\"flag\"\n\t\"fmt\"\n\t\"os\"\n\t\"strings\"\n\n\t\"github.com/posener/complete/cmd/install\"\n)\n\n// CLI for command line\ntype CLI struct {\n\tName          string\n\tInstallName   string\n\tUninstallName string\n\n\tinstall   bool\n\tuninstall bool\n\tyes       bool\n}\n\nconst (\n\tdefaultInstallName   = \"install\"\n\tdefaultUninstallName = \"uninstall\"\n)\n\n// Run is used when running complete in command line mode.\n// this is used when the complete is not completing words, but to\n// install it or uninstall it.\nfunc (f *CLI) Run() bool {\n\terr := f.validate()\n\tif err != nil {\n\t\tos.Stderr.WriteString(err.Error() + \"\\n\")\n\t\tos.Exit(1)\n\t}\n\n\tswitch {\n\tcase f.install:\n\t\tf.prompt()\n\t\terr = install.Install(f.Name)\n\tcase f.uninstall:\n\t\tf.prompt()\n\t\terr = install.Uninstall(f.Name)\n\tdefault:\n\t\t// non of the action flags matched,\n\t\t// returning false should make the real program execute\n\t\treturn false\n\t}\n\n\tif err != nil {\n\t\tfmt.Printf(\"%s failed! %s\\n\", f.action(), err)\n\t\tos.Exit(3)\n\t}\n\tfmt.Println(\"Done!\")\n\treturn true\n}\n\n// prompt use for approval\n// exit if approval was not given\nfunc (f *CLI) prompt() {\n\tdefer fmt.Println(f.action() + \"ing...\")\n\tif f.yes {\n\t\treturn\n\t}\n\tfmt.Printf(\"%s completion for %s? \", f.action(), f.Name)\n\tvar answer string\n\tfmt.Scanln(&answer)\n\n\tswitch strings.ToLower(answer) {\n\tcase \"y\", \"yes\":\n\t\treturn\n\tdefault:\n\t\tfmt.Println(\"Cancelling...\")\n\t\tos.Exit(1)\n\t}\n}\n\n// AddFlags adds the CLI flags to the flag set.\n// If flags is nil, the default command line flags will be taken.\n// Pass non-empty strings as installName and uninstallName to override the default\n// flag names.\nfunc (f *CLI) AddFlags(flags *flag.FlagSet) {\n\tif flags == nil {\n\t\tflags = flag.CommandLine\n\t}\n\n\tif f.InstallName == \"\" {\n\t\tf.InstallName = defaultInstallName\n\t}\n\tif f.UninstallName == \"\" {\n\t\tf.UninstallName = defaultUninstallName\n\t}\n\n\tif flags.Lookup(f.InstallName) == nil {\n\t\tflags.BoolVar(&f.install, f.InstallName, false,\n\t\t\tfmt.Sprintf(\"Install completion for %s command\", f.Name))\n\t}\n\tif flags.Lookup(f.UninstallName) == nil {\n\t\tflags.BoolVar(&f.uninstall, f.UninstallName, false,\n\t\t\tfmt.Sprintf(\"Uninstall completion for %s command\", f.Name))\n\t}\n\tif flags.Lookup(\"y\") == nil {\n\t\tflags.BoolVar(&f.yes, \"y\", false, \"Don't prompt user for typing 'yes' when installing completion\")\n\t}\n}\n\n// validate the CLI\nfunc (f *CLI) validate() error {\n\tif f.install && f.uninstall {\n\t\treturn errors.New(\"Install and uninstall are mutually exclusive\")\n\t}\n\treturn nil\n}\n\n// action name according to the CLI values.\nfunc (f *CLI) action() string {\n\tswitch {\n\tcase f.install:\n\t\treturn \"Install\"\n\tcase f.uninstall:\n\t\treturn \"Uninstall\"\n\tdefault:\n\t\treturn \"unknown\"\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/posener/complete/cmd/install/bash.go",
    "content": "package install\n\nimport \"fmt\"\n\n// (un)install in bash\n// basically adds/remove from .bashrc:\n//\n// complete -C </path/to/completion/command> <command>\ntype bash struct {\n\trc string\n}\n\nfunc (b bash) Install(cmd, bin string) error {\n\tcompleteCmd := b.cmd(cmd, bin)\n\tif lineInFile(b.rc, completeCmd) {\n\t\treturn fmt.Errorf(\"already installed in %s\", b.rc)\n\t}\n\treturn appendToFile(b.rc, completeCmd)\n}\n\nfunc (b bash) Uninstall(cmd, bin string) error {\n\tcompleteCmd := b.cmd(cmd, bin)\n\tif !lineInFile(b.rc, completeCmd) {\n\t\treturn fmt.Errorf(\"does not installed in %s\", b.rc)\n\t}\n\n\treturn removeFromFile(b.rc, completeCmd)\n}\n\nfunc (bash) cmd(cmd, bin string) string {\n\treturn fmt.Sprintf(\"complete -C %s %s\", bin, cmd)\n}\n"
  },
  {
    "path": "vendor/github.com/posener/complete/cmd/install/fish.go",
    "content": "package install\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"text/template\"\n)\n\n// (un)install in fish\n\ntype fish struct {\n\tconfigDir string\n}\n\nfunc (f fish) Install(cmd, bin string) error {\n\tcompletionFile := filepath.Join(f.configDir, \"completions\", fmt.Sprintf(\"%s.fish\", cmd))\n\tcompleteCmd, err := f.cmd(cmd, bin)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif _, err := os.Stat(completionFile); err == nil {\n\t\treturn fmt.Errorf(\"already installed at %s\", completionFile)\n\t}\n\n\treturn createFile(completionFile, completeCmd)\n}\n\nfunc (f fish) Uninstall(cmd, bin string) error {\n\tcompletionFile := filepath.Join(f.configDir, \"completions\", fmt.Sprintf(\"%s.fish\", cmd))\n\tif _, err := os.Stat(completionFile); err != nil {\n\t\treturn fmt.Errorf(\"does not installed in %s\", f.configDir)\n\t}\n\n\treturn os.Remove(completionFile)\n}\n\nfunc (f fish) cmd(cmd, bin string) (string, error) {\n\tvar buf bytes.Buffer\n\tparams := struct{ Cmd, Bin string }{cmd, bin}\n\ttmpl := template.Must(template.New(\"cmd\").Parse(`\nfunction __complete_{{.Cmd}}\n    set -lx COMP_LINE (commandline -cp)\n    test -z (commandline -ct)\n    and set COMP_LINE \"$COMP_LINE \"\n    {{.Bin}}\nend\ncomplete -f -c {{.Cmd}} -a \"(__complete_{{.Cmd}})\"\n`))\n\terr := tmpl.Execute(&buf, params)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn buf.String(), nil\n}\n"
  },
  {
    "path": "vendor/github.com/posener/complete/cmd/install/install.go",
    "content": "package install\n\nimport (\n\t\"errors\"\n\t\"os\"\n\t\"os/user\"\n\t\"path/filepath\"\n\t\"runtime\"\n\n\t\"github.com/hashicorp/go-multierror\"\n)\n\ntype installer interface {\n\tInstall(cmd, bin string) error\n\tUninstall(cmd, bin string) error\n}\n\n// Install complete command given:\n// cmd: is the command name\nfunc Install(cmd string) error {\n\tis := installers()\n\tif len(is) == 0 {\n\t\treturn errors.New(\"Did not find any shells to install\")\n\t}\n\tbin, err := getBinaryPath()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfor _, i := range is {\n\t\terrI := i.Install(cmd, bin)\n\t\tif errI != nil {\n\t\t\terr = multierror.Append(err, errI)\n\t\t}\n\t}\n\n\treturn err\n}\n\n// Uninstall complete command given:\n// cmd: is the command name\nfunc Uninstall(cmd string) error {\n\tis := installers()\n\tif len(is) == 0 {\n\t\treturn errors.New(\"Did not find any shells to uninstall\")\n\t}\n\tbin, err := getBinaryPath()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfor _, i := range is {\n\t\terrI := i.Uninstall(cmd, bin)\n\t\tif errI != nil {\n\t\t\terr = multierror.Append(err, errI)\n\t\t}\n\t}\n\n\treturn err\n}\n\nfunc installers() (i []installer) {\n\t// The list of bash config files candidates where it is\n\t// possible to install the completion command.\n\tvar bashConfFiles []string\n\tswitch runtime.GOOS {\n\tcase \"darwin\":\n\t\tbashConfFiles = []string{\".bash_profile\"}\n\tdefault:\n\t\tbashConfFiles = []string{\".bashrc\", \".bash_profile\", \".bash_login\", \".profile\"}\n\t}\n\tfor _, rc := range bashConfFiles {\n\t\tif f := rcFile(rc); f != \"\" {\n\t\t\ti = append(i, bash{f})\n\t\t\tbreak\n\t\t}\n\t}\n\tif f := rcFile(\".zshrc\"); f != \"\" {\n\t\ti = append(i, zsh{f})\n\t}\n\tif d := fishConfigDir(); d != \"\" {\n\t\ti = append(i, fish{d})\n\t}\n\treturn\n}\n\nfunc fishConfigDir() string {\n\tconfigDir := filepath.Join(getConfigHomePath(), \"fish\")\n\tif configDir == \"\" {\n\t\treturn \"\"\n\t}\n\tif info, err := os.Stat(configDir); err != nil || !info.IsDir() {\n\t\treturn \"\"\n\t}\n\treturn configDir\n}\n\nfunc getConfigHomePath() string {\n\tu, err := user.Current()\n\tif err != nil {\n\t\treturn \"\"\n\t}\n\n\tconfigHome := os.Getenv(\"XDG_CONFIG_HOME\")\n\tif configHome == \"\" {\n\t\treturn filepath.Join(u.HomeDir, \".config\")\n\t}\n\treturn configHome\n}\n\nfunc getBinaryPath() (string, error) {\n\tbin, err := os.Executable()\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn filepath.Abs(bin)\n}\n\nfunc rcFile(name string) string {\n\tu, err := user.Current()\n\tif err != nil {\n\t\treturn \"\"\n\t}\n\tpath := filepath.Join(u.HomeDir, name)\n\tif _, err := os.Stat(path); err != nil {\n\t\treturn \"\"\n\t}\n\treturn path\n}\n"
  },
  {
    "path": "vendor/github.com/posener/complete/cmd/install/utils.go",
    "content": "package install\n\nimport (\n\t\"bufio\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"os\"\n\t\"path/filepath\"\n)\n\nfunc lineInFile(name string, lookFor string) bool {\n\tf, err := os.Open(name)\n\tif err != nil {\n\t\treturn false\n\t}\n\tdefer f.Close()\n\tr := bufio.NewReader(f)\n\tprefix := []byte{}\n\tfor {\n\t\tline, isPrefix, err := r.ReadLine()\n\t\tif err == io.EOF {\n\t\t\treturn false\n\t\t}\n\t\tif err != nil {\n\t\t\treturn false\n\t\t}\n\t\tif isPrefix {\n\t\t\tprefix = append(prefix, line...)\n\t\t\tcontinue\n\t\t}\n\t\tline = append(prefix, line...)\n\t\tif string(line) == lookFor {\n\t\t\treturn true\n\t\t}\n\t\tprefix = prefix[:0]\n\t}\n}\n\nfunc createFile(name string, content string) error {\n\t// make sure file directory exists\n\tif err := os.MkdirAll(filepath.Dir(name), 0775); err != nil {\n\t\treturn err\n\t}\n\n\t// create the file\n\tf, err := os.Create(name)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer f.Close()\n\n\t// write file content\n\t_, err = f.WriteString(fmt.Sprintf(\"%s\\n\", content))\n\treturn err\n}\n\nfunc appendToFile(name string, content string) error {\n\tf, err := os.OpenFile(name, os.O_RDWR|os.O_APPEND, 0)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer f.Close()\n\t_, err = f.WriteString(fmt.Sprintf(\"\\n%s\\n\", content))\n\treturn err\n}\n\nfunc removeFromFile(name string, content string) error {\n\tbackup := name + \".bck\"\n\terr := copyFile(name, backup)\n\tif err != nil {\n\t\treturn err\n\t}\n\ttemp, err := removeContentToTempFile(name, content)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\terr = copyFile(temp, name)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn os.Remove(backup)\n}\n\nfunc removeContentToTempFile(name, content string) (string, error) {\n\trf, err := os.Open(name)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tdefer rf.Close()\n\twf, err := ioutil.TempFile(\"/tmp\", \"complete-\")\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tdefer wf.Close()\n\n\tr := bufio.NewReader(rf)\n\tprefix := []byte{}\n\tfor {\n\t\tline, isPrefix, err := r.ReadLine()\n\t\tif err == io.EOF {\n\t\t\tbreak\n\t\t}\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\t\tif isPrefix {\n\t\t\tprefix = append(prefix, line...)\n\t\t\tcontinue\n\t\t}\n\t\tline = append(prefix, line...)\n\t\tstr := string(line)\n\t\tif str == content {\n\t\t\tcontinue\n\t\t}\n\t\t_, err = wf.WriteString(str + \"\\n\")\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\t\tprefix = prefix[:0]\n\t}\n\treturn wf.Name(), nil\n}\n\nfunc copyFile(src string, dst string) error {\n\tin, err := os.Open(src)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer in.Close()\n\tout, err := os.Create(dst)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer out.Close()\n\t_, err = io.Copy(out, in)\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/posener/complete/cmd/install/zsh.go",
    "content": "package install\n\nimport \"fmt\"\n\n// (un)install in zsh\n// basically adds/remove from .zshrc:\n//\n// autoload -U +X bashcompinit && bashcompinit\"\n// complete -C </path/to/completion/command> <command>\ntype zsh struct {\n\trc string\n}\n\nfunc (z zsh) Install(cmd, bin string) error {\n\tcompleteCmd := z.cmd(cmd, bin)\n\tif lineInFile(z.rc, completeCmd) {\n\t\treturn fmt.Errorf(\"already installed in %s\", z.rc)\n\t}\n\n\tbashCompInit := \"autoload -U +X bashcompinit && bashcompinit\"\n\tif !lineInFile(z.rc, bashCompInit) {\n\t\tcompleteCmd = bashCompInit + \"\\n\" + completeCmd\n\t}\n\n\treturn appendToFile(z.rc, completeCmd)\n}\n\nfunc (z zsh) Uninstall(cmd, bin string) error {\n\tcompleteCmd := z.cmd(cmd, bin)\n\tif !lineInFile(z.rc, completeCmd) {\n\t\treturn fmt.Errorf(\"does not installed in %s\", z.rc)\n\t}\n\n\treturn removeFromFile(z.rc, completeCmd)\n}\n\nfunc (zsh) cmd(cmd, bin string) string {\n\treturn fmt.Sprintf(\"complete -o nospace -C %s %s\", bin, cmd)\n}\n"
  },
  {
    "path": "vendor/github.com/posener/complete/command.go",
    "content": "package complete\n\n// Command represents a command line\n// It holds the data that enables auto completion of command line\n// Command can also be a sub command.\ntype Command struct {\n\t// Sub is map of sub commands of the current command\n\t// The key refer to the sub command name, and the value is it's\n\t// Command descriptive struct.\n\tSub Commands\n\n\t// Flags is a map of flags that the command accepts.\n\t// The key is the flag name, and the value is it's predictions.\n\tFlags Flags\n\n\t// GlobalFlags is a map of flags that the command accepts.\n\t// Global flags that can appear also after a sub command.\n\tGlobalFlags Flags\n\n\t// Args are extra arguments that the command accepts, those who are\n\t// given without any flag before.\n\tArgs Predictor\n}\n\n// Predict returns all possible predictions for args according to the command struct\nfunc (c *Command) Predict(a Args) []string {\n\toptions, _ := c.predict(a)\n\treturn options\n}\n\n// Commands is the type of Sub member, it maps a command name to a command struct\ntype Commands map[string]Command\n\n// Predict completion of sub command names names according to command line arguments\nfunc (c Commands) Predict(a Args) (prediction []string) {\n\tfor sub := range c {\n\t\tprediction = append(prediction, sub)\n\t}\n\treturn\n}\n\n// Flags is the type Flags of the Flags member, it maps a flag name to the flag predictions.\ntype Flags map[string]Predictor\n\n// Predict completion of flags names according to command line arguments\nfunc (f Flags) Predict(a Args) (prediction []string) {\n\tfor flag := range f {\n\t\t// If the flag starts with a hyphen, we avoid emitting the prediction\n\t\t// unless the last typed arg contains a hyphen as well.\n\t\tflagHyphenStart := len(flag) != 0 && flag[0] == '-'\n\t\tlastHyphenStart := len(a.Last) != 0 && a.Last[0] == '-'\n\t\tif flagHyphenStart && !lastHyphenStart {\n\t\t\tcontinue\n\t\t}\n\t\tprediction = append(prediction, flag)\n\t}\n\treturn\n}\n\n// predict options\n// only is set to true if no more options are allowed to be returned\n// those are in cases of special flag that has specific completion arguments,\n// and other flags or sub commands can't come after it.\nfunc (c *Command) predict(a Args) (options []string, only bool) {\n\n\t// search sub commands for predictions first\n\tsubCommandFound := false\n\tfor i, arg := range a.Completed {\n\t\tif cmd, ok := c.Sub[arg]; ok {\n\t\t\tsubCommandFound = true\n\n\t\t\t// recursive call for sub command\n\t\t\toptions, only = cmd.predict(a.from(i))\n\t\t\tif only {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// We matched so stop searching. Continuing to search can accidentally\n\t\t\t// match a subcommand with current set of commands, see issue #46.\n\t\t\tbreak\n\t\t}\n\t}\n\n\t// if last completed word is a global flag that we need to complete\n\tif predictor, ok := c.GlobalFlags[a.LastCompleted]; ok && predictor != nil {\n\t\tLog(\"Predicting according to global flag %s\", a.LastCompleted)\n\t\treturn predictor.Predict(a), true\n\t}\n\n\toptions = append(options, c.GlobalFlags.Predict(a)...)\n\n\t// if a sub command was entered, we won't add the parent command\n\t// completions and we return here.\n\tif subCommandFound {\n\t\treturn\n\t}\n\n\t// if last completed word is a command flag that we need to complete\n\tif predictor, ok := c.Flags[a.LastCompleted]; ok && predictor != nil {\n\t\tLog(\"Predicting according to flag %s\", a.LastCompleted)\n\t\treturn predictor.Predict(a), true\n\t}\n\n\toptions = append(options, c.Sub.Predict(a)...)\n\toptions = append(options, c.Flags.Predict(a)...)\n\tif c.Args != nil {\n\t\toptions = append(options, c.Args.Predict(a)...)\n\t}\n\n\treturn\n}\n"
  },
  {
    "path": "vendor/github.com/posener/complete/complete.go",
    "content": "package complete\n\nimport (\n\t\"flag\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"strconv\"\n\n\t\"github.com/posener/complete/cmd\"\n\t\"github.com/posener/complete/match\"\n)\n\nconst (\n\tenvLine  = \"COMP_LINE\"\n\tenvPoint = \"COMP_POINT\"\n\tenvDebug = \"COMP_DEBUG\"\n)\n\n// Complete structs define completion for a command with CLI options\ntype Complete struct {\n\tCommand Command\n\tcmd.CLI\n\tOut io.Writer\n}\n\n// New creates a new complete command.\n// name is the name of command we want to auto complete.\n// IMPORTANT: it must be the same name - if the auto complete\n// completes the 'go' command, name must be equal to \"go\".\n// command is the struct of the command completion.\nfunc New(name string, command Command) *Complete {\n\treturn &Complete{\n\t\tCommand: command,\n\t\tCLI:     cmd.CLI{Name: name},\n\t\tOut:     os.Stdout,\n\t}\n}\n\n// Run runs the completion and add installation flags beforehand.\n// The flags are added to the main flag CommandLine variable.\nfunc (c *Complete) Run() bool {\n\tc.AddFlags(nil)\n\tflag.Parse()\n\treturn c.Complete()\n}\n\n// Complete a command from completion line in environment variable,\n// and print out the complete options.\n// returns success if the completion ran or if the cli matched\n// any of the given flags, false otherwise\n// For installation: it assumes that flags were added and parsed before\n// it was called.\nfunc (c *Complete) Complete() bool {\n\tline, point, ok := getEnv()\n\tif !ok {\n\t\t// make sure flags parsed,\n\t\t// in case they were not added in the main program\n\t\treturn c.CLI.Run()\n\t}\n\n\tif point >= 0 && point < len(line) {\n\t\tline = line[:point]\n\t}\n\n\tLog(\"Completing phrase: %s\", line)\n\ta := newArgs(line)\n\tLog(\"Completing last field: %s\", a.Last)\n\toptions := c.Command.Predict(a)\n\tLog(\"Options: %s\", options)\n\n\t// filter only options that match the last argument\n\tmatches := []string{}\n\tfor _, option := range options {\n\t\tif match.Prefix(option, a.Last) {\n\t\t\tmatches = append(matches, option)\n\t\t}\n\t}\n\tLog(\"Matches: %s\", matches)\n\tc.output(matches)\n\treturn true\n}\n\nfunc getEnv() (line string, point int, ok bool) {\n\tline = os.Getenv(envLine)\n\tif line == \"\" {\n\t\treturn\n\t}\n\tpoint, err := strconv.Atoi(os.Getenv(envPoint))\n\tif err != nil {\n\t\t// If failed parsing point for some reason, set it to point\n\t\t// on the end of the line.\n\t\tLog(\"Failed parsing point %s: %v\", os.Getenv(envPoint), err)\n\t\tpoint = len(line)\n\t}\n\treturn line, point, true\n}\n\nfunc (c *Complete) output(options []string) {\n\t// stdout of program defines the complete options\n\tfor _, option := range options {\n\t\tfmt.Fprintln(c.Out, option)\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/posener/complete/doc.go",
    "content": "/*\nPackage complete provides a tool for bash writing bash completion in go, and bash completion for the go command line.\n\nWriting bash completion scripts is a hard work. This package provides an easy way\nto create bash completion scripts for any command, and also an easy way to install/uninstall\nthe completion of the command.\n\nGo Command Bash Completion\n\nIn ./cmd/gocomplete there is an example for bash completion for the `go` command line.\n\nThis is an example that uses the `complete` package on the `go` command - the `complete` package\ncan also be used to implement any completions, see #usage.\n\nInstall\n\n1. Type in your shell:\n\n\tgo get -u github.com/posener/complete/gocomplete\n\tgocomplete -install\n\n2. Restart your shell\n\nUninstall by `gocomplete -uninstall`\n\nFeatures\n\n- Complete `go` command, including sub commands and all flags.\n- Complete packages names or `.go` files when necessary.\n- Complete test names after `-run` flag.\n\nComplete package\n\nSupported shells:\n\n- [x] bash\n- [x] zsh\n- [x] fish\n\nUsage\n\nAssuming you have program called `run` and you want to have bash completion\nfor it, meaning, if you type `run` then space, then press the `Tab` key,\nthe shell will suggest relevant complete options.\n\nIn that case, we will create a program called `runcomplete`, a go program,\nwith a `func main()` and so, that will make the completion of the `run`\nprogram. Once the `runcomplete` will be in a binary form, we could\n`runcomplete -install` and that will add to our shell all the bash completion\noptions for `run`.\n\nSo here it is:\n\n\timport \"github.com/posener/complete\"\n\n\tfunc main() {\n\n\t\t// create a Command object, that represents the command we want\n\t\t// to complete.\n\t\trun := complete.Command{\n\n\t\t\t// Sub defines a list of sub commands of the program,\n\t\t\t// this is recursive, since every command is of type command also.\n\t\t\tSub: complete.Commands{\n\n\t\t\t\t// add a build sub command\n\t\t\t\t\"build\": complete.Command {\n\n\t\t\t\t\t// define flags of the build sub command\n\t\t\t\t\tFlags: complete.Flags{\n\t\t\t\t\t\t// build sub command has a flag '-cpus', which\n\t\t\t\t\t\t// expects number of cpus after it. in that case\n\t\t\t\t\t\t// anything could complete this flag.\n\t\t\t\t\t\t\"-cpus\": complete.PredictAnything,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t// define flags of the 'run' main command\n\t\t\tFlags: complete.Flags{\n\t\t\t\t// a flag -o, which expects a file ending with .out after\n\t\t\t\t// it, the tab completion will auto complete for files matching\n\t\t\t\t// the given pattern.\n\t\t\t\t\"-o\": complete.PredictFiles(\"*.out\"),\n\t\t\t},\n\n\t\t\t// define global flags of the 'run' main command\n\t\t\t// those will show up also when a sub command was entered in the\n\t\t\t// command line\n\t\t\tGlobalFlags: complete.Flags{\n\n\t\t\t\t// a flag '-h' which does not expects anything after it\n\t\t\t\t\"-h\": complete.PredictNothing,\n\t\t\t},\n\t\t}\n\n\t\t// run the command completion, as part of the main() function.\n\t\t// this triggers the autocompletion when needed.\n\t\t// name must be exactly as the binary that we want to complete.\n\t\tcomplete.New(\"run\", run).Run()\n\t}\n\nSelf completing program\n\nIn case that the program that we want to complete is written in go we\ncan make it self completing.\nHere is an example: ./example/self/main.go .\n\n*/\npackage complete\n"
  },
  {
    "path": "vendor/github.com/posener/complete/log.go",
    "content": "package complete\n\nimport (\n\t\"io/ioutil\"\n\t\"log\"\n\t\"os\"\n)\n\n// Log is used for debugging purposes\n// since complete is running on tab completion, it is nice to\n// have logs to the stderr (when writing your own completer)\n// to write logs, set the COMP_DEBUG environment variable and\n// use complete.Log in the complete program\nvar Log = getLogger()\n\nfunc getLogger() func(format string, args ...interface{}) {\n\tvar logfile = ioutil.Discard\n\tif os.Getenv(envDebug) != \"\" {\n\t\tlogfile = os.Stderr\n\t}\n\treturn log.New(logfile, \"complete \", log.Flags()).Printf\n}\n"
  },
  {
    "path": "vendor/github.com/posener/complete/match/file.go",
    "content": "package match\n\nimport \"strings\"\n\n// File returns true if prefix can match the file\nfunc File(file, prefix string) bool {\n\t// special case for current directory completion\n\tif file == \"./\" && (prefix == \".\" || prefix == \"\") {\n\t\treturn true\n\t}\n\tif prefix == \".\" && strings.HasPrefix(file, \".\") {\n\t\treturn true\n\t}\n\n\tfile = strings.TrimPrefix(file, \"./\")\n\tprefix = strings.TrimPrefix(prefix, \"./\")\n\n\treturn strings.HasPrefix(file, prefix)\n}\n"
  },
  {
    "path": "vendor/github.com/posener/complete/match/match.go",
    "content": "// Package match contains matchers that decide if to apply completion.\npackage match\n\n// Match matches two strings\n// it is used for comparing a term to the last typed\n// word, the prefix, and see if it is a possible auto complete option.\ntype Match func(term, prefix string) bool\n"
  },
  {
    "path": "vendor/github.com/posener/complete/match/prefix.go",
    "content": "package match\n\nimport \"strings\"\n\n// Prefix is a simple Matcher, if the word is it's prefix, there is a match\n// Match returns true if a has the prefix as prefix\nfunc Prefix(long, prefix string) bool {\n\treturn strings.HasPrefix(long, prefix)\n}\n"
  },
  {
    "path": "vendor/github.com/posener/complete/predict.go",
    "content": "package complete\n\n// Predictor implements a predict method, in which given\n// command line arguments returns a list of options it predicts.\ntype Predictor interface {\n\tPredict(Args) []string\n}\n\n// PredictOr unions two predicate functions, so that the result predicate\n// returns the union of their predication\nfunc PredictOr(predictors ...Predictor) Predictor {\n\treturn PredictFunc(func(a Args) (prediction []string) {\n\t\tfor _, p := range predictors {\n\t\t\tif p == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tprediction = append(prediction, p.Predict(a)...)\n\t\t}\n\t\treturn\n\t})\n}\n\n// PredictFunc determines what terms can follow a command or a flag\n// It is used for auto completion, given last - the last word in the already\n// in the command line, what words can complete it.\ntype PredictFunc func(Args) []string\n\n// Predict invokes the predict function and implements the Predictor interface\nfunc (p PredictFunc) Predict(a Args) []string {\n\tif p == nil {\n\t\treturn nil\n\t}\n\treturn p(a)\n}\n\n// PredictNothing does not expect anything after.\nvar PredictNothing Predictor\n\n// PredictAnything expects something, but nothing particular, such as a number\n// or arbitrary name.\nvar PredictAnything = PredictFunc(func(Args) []string { return nil })\n"
  },
  {
    "path": "vendor/github.com/posener/complete/predict_files.go",
    "content": "package complete\n\nimport (\n\t\"io/ioutil\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n\n\t\"github.com/posener/complete/match\"\n)\n\n// PredictDirs will search for directories in the given started to be typed\n// path, if no path was started to be typed, it will complete to directories\n// in the current working directory.\nfunc PredictDirs(pattern string) Predictor {\n\treturn files(pattern, false)\n}\n\n// PredictFiles will search for files matching the given pattern in the started to\n// be typed path, if no path was started to be typed, it will complete to files that\n// match the pattern in the current working directory.\n// To match any file, use \"*\" as pattern. To match go files use \"*.go\", and so on.\nfunc PredictFiles(pattern string) Predictor {\n\treturn files(pattern, true)\n}\n\nfunc files(pattern string, allowFiles bool) PredictFunc {\n\n\t// search for files according to arguments,\n\t// if only one directory has matched the result, search recursively into\n\t// this directory to give more results.\n\treturn func(a Args) (prediction []string) {\n\t\tprediction = predictFiles(a, pattern, allowFiles)\n\n\t\t// if the number of prediction is not 1, we either have many results or\n\t\t// have no results, so we return it.\n\t\tif len(prediction) != 1 {\n\t\t\treturn\n\t\t}\n\n\t\t// only try deeper, if the one item is a directory\n\t\tif stat, err := os.Stat(prediction[0]); err != nil || !stat.IsDir() {\n\t\t\treturn\n\t\t}\n\n\t\ta.Last = prediction[0]\n\t\treturn predictFiles(a, pattern, allowFiles)\n\t}\n}\n\nfunc predictFiles(a Args, pattern string, allowFiles bool) []string {\n\tif strings.HasSuffix(a.Last, \"/..\") {\n\t\treturn nil\n\t}\n\n\tdir := a.Directory()\n\tfiles := listFiles(dir, pattern, allowFiles)\n\n\t// add dir if match\n\tfiles = append(files, dir)\n\n\treturn PredictFilesSet(files).Predict(a)\n}\n\n// PredictFilesSet predict according to file rules to a given set of file names\nfunc PredictFilesSet(files []string) PredictFunc {\n\treturn func(a Args) (prediction []string) {\n\t\t// add all matching files to prediction\n\t\tfor _, f := range files {\n\t\t\tf = fixPathForm(a.Last, f)\n\n\t\t\t// test matching of file to the argument\n\t\t\tif match.File(f, a.Last) {\n\t\t\t\tprediction = append(prediction, f)\n\t\t\t}\n\t\t}\n\t\treturn\n\t}\n}\n\nfunc listFiles(dir, pattern string, allowFiles bool) []string {\n\t// set of all file names\n\tm := map[string]bool{}\n\n\t// list files\n\tif files, err := filepath.Glob(filepath.Join(dir, pattern)); err == nil {\n\t\tfor _, f := range files {\n\t\t\tif stat, err := os.Stat(f); err != nil || stat.IsDir() || allowFiles {\n\t\t\t\tm[f] = true\n\t\t\t}\n\t\t}\n\t}\n\n\t// list directories\n\tif dirs, err := ioutil.ReadDir(dir); err == nil {\n\t\tfor _, d := range dirs {\n\t\t\tif d.IsDir() {\n\t\t\t\tm[filepath.Join(dir, d.Name())] = true\n\t\t\t}\n\t\t}\n\t}\n\n\tlist := make([]string, 0, len(m))\n\tfor k := range m {\n\t\tlist = append(list, k)\n\t}\n\treturn list\n}\n"
  },
  {
    "path": "vendor/github.com/posener/complete/predict_set.go",
    "content": "package complete\n\n// PredictSet expects specific set of terms, given in the options argument.\nfunc PredictSet(options ...string) Predictor {\n\treturn predictSet(options)\n}\n\ntype predictSet []string\n\nfunc (p predictSet) Predict(a Args) []string {\n\treturn p\n}\n"
  },
  {
    "path": "vendor/github.com/posener/complete/utils.go",
    "content": "package complete\n\nimport (\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n)\n\n// fixPathForm changes a file name to a relative name\nfunc fixPathForm(last string, file string) string {\n\t// get wording directory for relative name\n\tworkDir, err := os.Getwd()\n\tif err != nil {\n\t\treturn file\n\t}\n\n\tabs, err := filepath.Abs(file)\n\tif err != nil {\n\t\treturn file\n\t}\n\n\t// if last is absolute, return path as absolute\n\tif filepath.IsAbs(last) {\n\t\treturn fixDirPath(abs)\n\t}\n\n\trel, err := filepath.Rel(workDir, abs)\n\tif err != nil {\n\t\treturn file\n\t}\n\n\t// fix ./ prefix of path\n\tif rel != \".\" && strings.HasPrefix(last, \".\") {\n\t\trel = \"./\" + rel\n\t}\n\n\treturn fixDirPath(rel)\n}\n\nfunc fixDirPath(path string) string {\n\tinfo, err := os.Stat(path)\n\tif err == nil && info.IsDir() && !strings.HasSuffix(path, \"/\") {\n\t\tpath += \"/\"\n\t}\n\treturn path\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/afero/LICENSE.txt",
    "content": "                                Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n"
  },
  {
    "path": "vendor/github.com/spf13/afero/afero.go",
    "content": "// Copyright © 2014 Steve Francia <spf@spf13.com>.\n// Copyright 2013 tsuru authors. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// Package afero provides types and methods for interacting with the filesystem,\n// as an abstraction layer.\n\n// Afero also provides a few implementations that are mostly interoperable. One that\n// uses the operating system filesystem, one that uses memory to store files\n// (cross platform) and an interface that should be implemented if you want to\n// provide your own filesystem.\n\npackage afero\n\nimport (\n\t\"errors\"\n\t\"io\"\n\t\"os\"\n\t\"time\"\n)\n\ntype Afero struct {\n\tFs\n}\n\n// File represents a file in the filesystem.\ntype File interface {\n\tio.Closer\n\tio.Reader\n\tio.ReaderAt\n\tio.Seeker\n\tio.Writer\n\tio.WriterAt\n\n\tName() string\n\tReaddir(count int) ([]os.FileInfo, error)\n\tReaddirnames(n int) ([]string, error)\n\tStat() (os.FileInfo, error)\n\tSync() error\n\tTruncate(size int64) error\n\tWriteString(s string) (ret int, err error)\n}\n\n// Fs is the filesystem interface.\n//\n// Any simulated or real filesystem should implement this interface.\ntype Fs interface {\n\t// Create creates a file in the filesystem, returning the file and an\n\t// error, if any happens.\n\tCreate(name string) (File, error)\n\n\t// Mkdir creates a directory in the filesystem, return an error if any\n\t// happens.\n\tMkdir(name string, perm os.FileMode) error\n\n\t// MkdirAll creates a directory path and all parents that does not exist\n\t// yet.\n\tMkdirAll(path string, perm os.FileMode) error\n\n\t// Open opens a file, returning it or an error, if any happens.\n\tOpen(name string) (File, error)\n\n\t// OpenFile opens a file using the given flags and the given mode.\n\tOpenFile(name string, flag int, perm os.FileMode) (File, error)\n\n\t// Remove removes a file identified by name, returning an error, if any\n\t// happens.\n\tRemove(name string) error\n\n\t// RemoveAll removes a directory path and any children it contains. It\n\t// does not fail if the path does not exist (return nil).\n\tRemoveAll(path string) error\n\n\t// Rename renames a file.\n\tRename(oldname, newname string) error\n\n\t// Stat returns a FileInfo describing the named file, or an error, if any\n\t// happens.\n\tStat(name string) (os.FileInfo, error)\n\n\t// The name of this FileSystem\n\tName() string\n\n\t//Chmod changes the mode of the named file to mode.\n\tChmod(name string, mode os.FileMode) error\n\n\t//Chtimes changes the access and modification times of the named file\n\tChtimes(name string, atime time.Time, mtime time.Time) error\n}\n\nvar (\n\tErrFileClosed        = errors.New(\"File is closed\")\n\tErrOutOfRange        = errors.New(\"Out of range\")\n\tErrTooLarge          = errors.New(\"Too large\")\n\tErrFileNotFound      = os.ErrNotExist\n\tErrFileExists        = os.ErrExist\n\tErrDestinationExists = os.ErrExist\n)\n"
  },
  {
    "path": "vendor/github.com/spf13/afero/basepath.go",
    "content": "package afero\n\nimport (\n\t\"os\"\n\t\"path/filepath\"\n\t\"runtime\"\n\t\"strings\"\n\t\"time\"\n)\n\nvar _ Lstater = (*BasePathFs)(nil)\n\n// The BasePathFs restricts all operations to a given path within an Fs.\n// The given file name to the operations on this Fs will be prepended with\n// the base path before calling the base Fs.\n// Any file name (after filepath.Clean()) outside this base path will be\n// treated as non existing file.\n//\n// Note that it does not clean the error messages on return, so you may\n// reveal the real path on errors.\ntype BasePathFs struct {\n\tsource Fs\n\tpath   string\n}\n\ntype BasePathFile struct {\n\tFile\n\tpath string\n}\n\nfunc (f *BasePathFile) Name() string {\n\tsourcename := f.File.Name()\n\treturn strings.TrimPrefix(sourcename, filepath.Clean(f.path))\n}\n\nfunc NewBasePathFs(source Fs, path string) Fs {\n\treturn &BasePathFs{source: source, path: path}\n}\n\n// on a file outside the base path it returns the given file name and an error,\n// else the given file with the base path prepended\nfunc (b *BasePathFs) RealPath(name string) (path string, err error) {\n\tif err := validateBasePathName(name); err != nil {\n\t\treturn name, err\n\t}\n\n\tbpath := filepath.Clean(b.path)\n\tpath = filepath.Clean(filepath.Join(bpath, name))\n\tif !strings.HasPrefix(path, bpath) {\n\t\treturn name, os.ErrNotExist\n\t}\n\n\treturn path, nil\n}\n\nfunc validateBasePathName(name string) error {\n\tif runtime.GOOS != \"windows\" {\n\t\t// Not much to do here;\n\t\t// the virtual file paths all look absolute on *nix.\n\t\treturn nil\n\t}\n\n\t// On Windows a common mistake would be to provide an absolute OS path\n\t// We could strip out the base part, but that would not be very portable.\n\tif filepath.IsAbs(name) {\n\t\treturn os.ErrNotExist\n\t}\n\n\treturn nil\n}\n\nfunc (b *BasePathFs) Chtimes(name string, atime, mtime time.Time) (err error) {\n\tif name, err = b.RealPath(name); err != nil {\n\t\treturn &os.PathError{Op: \"chtimes\", Path: name, Err: err}\n\t}\n\treturn b.source.Chtimes(name, atime, mtime)\n}\n\nfunc (b *BasePathFs) Chmod(name string, mode os.FileMode) (err error) {\n\tif name, err = b.RealPath(name); err != nil {\n\t\treturn &os.PathError{Op: \"chmod\", Path: name, Err: err}\n\t}\n\treturn b.source.Chmod(name, mode)\n}\n\nfunc (b *BasePathFs) Name() string {\n\treturn \"BasePathFs\"\n}\n\nfunc (b *BasePathFs) Stat(name string) (fi os.FileInfo, err error) {\n\tif name, err = b.RealPath(name); err != nil {\n\t\treturn nil, &os.PathError{Op: \"stat\", Path: name, Err: err}\n\t}\n\treturn b.source.Stat(name)\n}\n\nfunc (b *BasePathFs) Rename(oldname, newname string) (err error) {\n\tif oldname, err = b.RealPath(oldname); err != nil {\n\t\treturn &os.PathError{Op: \"rename\", Path: oldname, Err: err}\n\t}\n\tif newname, err = b.RealPath(newname); err != nil {\n\t\treturn &os.PathError{Op: \"rename\", Path: newname, Err: err}\n\t}\n\treturn b.source.Rename(oldname, newname)\n}\n\nfunc (b *BasePathFs) RemoveAll(name string) (err error) {\n\tif name, err = b.RealPath(name); err != nil {\n\t\treturn &os.PathError{Op: \"remove_all\", Path: name, Err: err}\n\t}\n\treturn b.source.RemoveAll(name)\n}\n\nfunc (b *BasePathFs) Remove(name string) (err error) {\n\tif name, err = b.RealPath(name); err != nil {\n\t\treturn &os.PathError{Op: \"remove\", Path: name, Err: err}\n\t}\n\treturn b.source.Remove(name)\n}\n\nfunc (b *BasePathFs) OpenFile(name string, flag int, mode os.FileMode) (f File, err error) {\n\tif name, err = b.RealPath(name); err != nil {\n\t\treturn nil, &os.PathError{Op: \"openfile\", Path: name, Err: err}\n\t}\n\tsourcef, err := b.source.OpenFile(name, flag, mode)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &BasePathFile{sourcef, b.path}, nil\n}\n\nfunc (b *BasePathFs) Open(name string) (f File, err error) {\n\tif name, err = b.RealPath(name); err != nil {\n\t\treturn nil, &os.PathError{Op: \"open\", Path: name, Err: err}\n\t}\n\tsourcef, err := b.source.Open(name)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &BasePathFile{File: sourcef, path: b.path}, nil\n}\n\nfunc (b *BasePathFs) Mkdir(name string, mode os.FileMode) (err error) {\n\tif name, err = b.RealPath(name); err != nil {\n\t\treturn &os.PathError{Op: \"mkdir\", Path: name, Err: err}\n\t}\n\treturn b.source.Mkdir(name, mode)\n}\n\nfunc (b *BasePathFs) MkdirAll(name string, mode os.FileMode) (err error) {\n\tif name, err = b.RealPath(name); err != nil {\n\t\treturn &os.PathError{Op: \"mkdir\", Path: name, Err: err}\n\t}\n\treturn b.source.MkdirAll(name, mode)\n}\n\nfunc (b *BasePathFs) Create(name string) (f File, err error) {\n\tif name, err = b.RealPath(name); err != nil {\n\t\treturn nil, &os.PathError{Op: \"create\", Path: name, Err: err}\n\t}\n\tsourcef, err := b.source.Create(name)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &BasePathFile{File: sourcef, path: b.path}, nil\n}\n\nfunc (b *BasePathFs) LstatIfPossible(name string) (os.FileInfo, bool, error) {\n\tname, err := b.RealPath(name)\n\tif err != nil {\n\t\treturn nil, false, &os.PathError{Op: \"lstat\", Path: name, Err: err}\n\t}\n\tif lstater, ok := b.source.(Lstater); ok {\n\t\treturn lstater.LstatIfPossible(name)\n\t}\n\tfi, err := b.source.Stat(name)\n\treturn fi, false, err\n}\n\n// vim: ts=4 sw=4 noexpandtab nolist syn=go\n"
  },
  {
    "path": "vendor/github.com/spf13/afero/cacheOnReadFs.go",
    "content": "package afero\n\nimport (\n\t\"os\"\n\t\"syscall\"\n\t\"time\"\n)\n\n// If the cache duration is 0, cache time will be unlimited, i.e. once\n// a file is in the layer, the base will never be read again for this file.\n//\n// For cache times greater than 0, the modification time of a file is\n// checked. Note that a lot of file system implementations only allow a\n// resolution of a second for timestamps... or as the godoc for os.Chtimes()\n// states: \"The underlying filesystem may truncate or round the values to a\n// less precise time unit.\"\n//\n// This caching union will forward all write calls also to the base file\n// system first. To prevent writing to the base Fs, wrap it in a read-only\n// filter - Note: this will also make the overlay read-only, for writing files\n// in the overlay, use the overlay Fs directly, not via the union Fs.\ntype CacheOnReadFs struct {\n\tbase      Fs\n\tlayer     Fs\n\tcacheTime time.Duration\n}\n\nfunc NewCacheOnReadFs(base Fs, layer Fs, cacheTime time.Duration) Fs {\n\treturn &CacheOnReadFs{base: base, layer: layer, cacheTime: cacheTime}\n}\n\ntype cacheState int\n\nconst (\n\t// not present in the overlay, unknown if it exists in the base:\n\tcacheMiss cacheState = iota\n\t// present in the overlay and in base, base file is newer:\n\tcacheStale\n\t// present in the overlay - with cache time == 0 it may exist in the base,\n\t// with cacheTime > 0 it exists in the base and is same age or newer in the\n\t// overlay\n\tcacheHit\n\t// happens if someone writes directly to the overlay without\n\t// going through this union\n\tcacheLocal\n)\n\nfunc (u *CacheOnReadFs) cacheStatus(name string) (state cacheState, fi os.FileInfo, err error) {\n\tvar lfi, bfi os.FileInfo\n\tlfi, err = u.layer.Stat(name)\n\tif err == nil {\n\t\tif u.cacheTime == 0 {\n\t\t\treturn cacheHit, lfi, nil\n\t\t}\n\t\tif lfi.ModTime().Add(u.cacheTime).Before(time.Now()) {\n\t\t\tbfi, err = u.base.Stat(name)\n\t\t\tif err != nil {\n\t\t\t\treturn cacheLocal, lfi, nil\n\t\t\t}\n\t\t\tif bfi.ModTime().After(lfi.ModTime()) {\n\t\t\t\treturn cacheStale, bfi, nil\n\t\t\t}\n\t\t}\n\t\treturn cacheHit, lfi, nil\n\t}\n\n\tif err == syscall.ENOENT || os.IsNotExist(err) {\n\t\treturn cacheMiss, nil, nil\n\t}\n\n\treturn cacheMiss, nil, err\n}\n\nfunc (u *CacheOnReadFs) copyToLayer(name string) error {\n\treturn copyToLayer(u.base, u.layer, name)\n}\n\nfunc (u *CacheOnReadFs) Chtimes(name string, atime, mtime time.Time) error {\n\tst, _, err := u.cacheStatus(name)\n\tif err != nil {\n\t\treturn err\n\t}\n\tswitch st {\n\tcase cacheLocal:\n\tcase cacheHit:\n\t\terr = u.base.Chtimes(name, atime, mtime)\n\tcase cacheStale, cacheMiss:\n\t\tif err := u.copyToLayer(name); err != nil {\n\t\t\treturn err\n\t\t}\n\t\terr = u.base.Chtimes(name, atime, mtime)\n\t}\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn u.layer.Chtimes(name, atime, mtime)\n}\n\nfunc (u *CacheOnReadFs) Chmod(name string, mode os.FileMode) error {\n\tst, _, err := u.cacheStatus(name)\n\tif err != nil {\n\t\treturn err\n\t}\n\tswitch st {\n\tcase cacheLocal:\n\tcase cacheHit:\n\t\terr = u.base.Chmod(name, mode)\n\tcase cacheStale, cacheMiss:\n\t\tif err := u.copyToLayer(name); err != nil {\n\t\t\treturn err\n\t\t}\n\t\terr = u.base.Chmod(name, mode)\n\t}\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn u.layer.Chmod(name, mode)\n}\n\nfunc (u *CacheOnReadFs) Stat(name string) (os.FileInfo, error) {\n\tst, fi, err := u.cacheStatus(name)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tswitch st {\n\tcase cacheMiss:\n\t\treturn u.base.Stat(name)\n\tdefault: // cacheStale has base, cacheHit and cacheLocal the layer os.FileInfo\n\t\treturn fi, nil\n\t}\n}\n\nfunc (u *CacheOnReadFs) Rename(oldname, newname string) error {\n\tst, _, err := u.cacheStatus(oldname)\n\tif err != nil {\n\t\treturn err\n\t}\n\tswitch st {\n\tcase cacheLocal:\n\tcase cacheHit:\n\t\terr = u.base.Rename(oldname, newname)\n\tcase cacheStale, cacheMiss:\n\t\tif err := u.copyToLayer(oldname); err != nil {\n\t\t\treturn err\n\t\t}\n\t\terr = u.base.Rename(oldname, newname)\n\t}\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn u.layer.Rename(oldname, newname)\n}\n\nfunc (u *CacheOnReadFs) Remove(name string) error {\n\tst, _, err := u.cacheStatus(name)\n\tif err != nil {\n\t\treturn err\n\t}\n\tswitch st {\n\tcase cacheLocal:\n\tcase cacheHit, cacheStale, cacheMiss:\n\t\terr = u.base.Remove(name)\n\t}\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn u.layer.Remove(name)\n}\n\nfunc (u *CacheOnReadFs) RemoveAll(name string) error {\n\tst, _, err := u.cacheStatus(name)\n\tif err != nil {\n\t\treturn err\n\t}\n\tswitch st {\n\tcase cacheLocal:\n\tcase cacheHit, cacheStale, cacheMiss:\n\t\terr = u.base.RemoveAll(name)\n\t}\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn u.layer.RemoveAll(name)\n}\n\nfunc (u *CacheOnReadFs) OpenFile(name string, flag int, perm os.FileMode) (File, error) {\n\tst, _, err := u.cacheStatus(name)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tswitch st {\n\tcase cacheLocal, cacheHit:\n\tdefault:\n\t\tif err := u.copyToLayer(name); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\tif flag&(os.O_WRONLY|syscall.O_RDWR|os.O_APPEND|os.O_CREATE|os.O_TRUNC) != 0 {\n\t\tbfi, err := u.base.OpenFile(name, flag, perm)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tlfi, err := u.layer.OpenFile(name, flag, perm)\n\t\tif err != nil {\n\t\t\tbfi.Close() // oops, what if O_TRUNC was set and file opening in the layer failed...?\n\t\t\treturn nil, err\n\t\t}\n\t\treturn &UnionFile{Base: bfi, Layer: lfi}, nil\n\t}\n\treturn u.layer.OpenFile(name, flag, perm)\n}\n\nfunc (u *CacheOnReadFs) Open(name string) (File, error) {\n\tst, fi, err := u.cacheStatus(name)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tswitch st {\n\tcase cacheLocal:\n\t\treturn u.layer.Open(name)\n\n\tcase cacheMiss:\n\t\tbfi, err := u.base.Stat(name)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif bfi.IsDir() {\n\t\t\treturn u.base.Open(name)\n\t\t}\n\t\tif err := u.copyToLayer(name); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn u.layer.Open(name)\n\n\tcase cacheStale:\n\t\tif !fi.IsDir() {\n\t\t\tif err := u.copyToLayer(name); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\treturn u.layer.Open(name)\n\t\t}\n\tcase cacheHit:\n\t\tif !fi.IsDir() {\n\t\t\treturn u.layer.Open(name)\n\t\t}\n\t}\n\t// the dirs from cacheHit, cacheStale fall down here:\n\tbfile, _ := u.base.Open(name)\n\tlfile, err := u.layer.Open(name)\n\tif err != nil && bfile == nil {\n\t\treturn nil, err\n\t}\n\treturn &UnionFile{Base: bfile, Layer: lfile}, nil\n}\n\nfunc (u *CacheOnReadFs) Mkdir(name string, perm os.FileMode) error {\n\terr := u.base.Mkdir(name, perm)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn u.layer.MkdirAll(name, perm) // yes, MkdirAll... we cannot assume it exists in the cache\n}\n\nfunc (u *CacheOnReadFs) Name() string {\n\treturn \"CacheOnReadFs\"\n}\n\nfunc (u *CacheOnReadFs) MkdirAll(name string, perm os.FileMode) error {\n\terr := u.base.MkdirAll(name, perm)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn u.layer.MkdirAll(name, perm)\n}\n\nfunc (u *CacheOnReadFs) Create(name string) (File, error) {\n\tbfh, err := u.base.Create(name)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tlfh, err := u.layer.Create(name)\n\tif err != nil {\n\t\t// oops, see comment about OS_TRUNC above, should we remove? then we have to\n\t\t// remember if the file did not exist before\n\t\tbfh.Close()\n\t\treturn nil, err\n\t}\n\treturn &UnionFile{Base: bfh, Layer: lfh}, nil\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/afero/const_bsds.go",
    "content": "// Copyright © 2016 Steve Francia <spf@spf13.com>.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// +build darwin openbsd freebsd netbsd dragonfly\n\npackage afero\n\nimport (\n\t\"syscall\"\n)\n\nconst BADFD = syscall.EBADF\n"
  },
  {
    "path": "vendor/github.com/spf13/afero/const_win_unix.go",
    "content": "// Copyright © 2016 Steve Francia <spf@spf13.com>.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// +build !darwin\n// +build !openbsd\n// +build !freebsd\n// +build !dragonfly\n// +build !netbsd\n\npackage afero\n\nimport (\n\t\"syscall\"\n)\n\nconst BADFD = syscall.EBADFD\n"
  },
  {
    "path": "vendor/github.com/spf13/afero/copyOnWriteFs.go",
    "content": "package afero\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"syscall\"\n\t\"time\"\n)\n\nvar _ Lstater = (*CopyOnWriteFs)(nil)\n\n// The CopyOnWriteFs is a union filesystem: a read only base file system with\n// a possibly writeable layer on top. Changes to the file system will only\n// be made in the overlay: Changing an existing file in the base layer which\n// is not present in the overlay will copy the file to the overlay (\"changing\"\n// includes also calls to e.g. Chtimes() and Chmod()).\n//\n// Reading directories is currently only supported via Open(), not OpenFile().\ntype CopyOnWriteFs struct {\n\tbase  Fs\n\tlayer Fs\n}\n\nfunc NewCopyOnWriteFs(base Fs, layer Fs) Fs {\n\treturn &CopyOnWriteFs{base: base, layer: layer}\n}\n\n// Returns true if the file is not in the overlay\nfunc (u *CopyOnWriteFs) isBaseFile(name string) (bool, error) {\n\tif _, err := u.layer.Stat(name); err == nil {\n\t\treturn false, nil\n\t}\n\t_, err := u.base.Stat(name)\n\tif err != nil {\n\t\tif oerr, ok := err.(*os.PathError); ok {\n\t\t\tif oerr.Err == os.ErrNotExist || oerr.Err == syscall.ENOENT || oerr.Err == syscall.ENOTDIR {\n\t\t\t\treturn false, nil\n\t\t\t}\n\t\t}\n\t\tif err == syscall.ENOENT {\n\t\t\treturn false, nil\n\t\t}\n\t}\n\treturn true, err\n}\n\nfunc (u *CopyOnWriteFs) copyToLayer(name string) error {\n\treturn copyToLayer(u.base, u.layer, name)\n}\n\nfunc (u *CopyOnWriteFs) Chtimes(name string, atime, mtime time.Time) error {\n\tb, err := u.isBaseFile(name)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif b {\n\t\tif err := u.copyToLayer(name); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn u.layer.Chtimes(name, atime, mtime)\n}\n\nfunc (u *CopyOnWriteFs) Chmod(name string, mode os.FileMode) error {\n\tb, err := u.isBaseFile(name)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif b {\n\t\tif err := u.copyToLayer(name); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn u.layer.Chmod(name, mode)\n}\n\nfunc (u *CopyOnWriteFs) Stat(name string) (os.FileInfo, error) {\n\tfi, err := u.layer.Stat(name)\n\tif err != nil {\n\t\tisNotExist := u.isNotExist(err)\n\t\tif isNotExist {\n\t\t\treturn u.base.Stat(name)\n\t\t}\n\t\treturn nil, err\n\t}\n\treturn fi, nil\n}\n\nfunc (u *CopyOnWriteFs) LstatIfPossible(name string) (os.FileInfo, bool, error) {\n\tllayer, ok1 := u.layer.(Lstater)\n\tlbase, ok2 := u.base.(Lstater)\n\n\tif ok1 {\n\t\tfi, b, err := llayer.LstatIfPossible(name)\n\t\tif err == nil {\n\t\t\treturn fi, b, nil\n\t\t}\n\n\t\tif !u.isNotExist(err) {\n\t\t\treturn nil, b, err\n\t\t}\n\t}\n\n\tif ok2 {\n\t\tfi, b, err := lbase.LstatIfPossible(name)\n\t\tif err == nil {\n\t\t\treturn fi, b, nil\n\t\t}\n\t\tif !u.isNotExist(err) {\n\t\t\treturn nil, b, err\n\t\t}\n\t}\n\n\tfi, err := u.Stat(name)\n\n\treturn fi, false, err\n}\n\nfunc (u *CopyOnWriteFs) isNotExist(err error) bool {\n\tif e, ok := err.(*os.PathError); ok {\n\t\terr = e.Err\n\t}\n\tif err == os.ErrNotExist || err == syscall.ENOENT || err == syscall.ENOTDIR {\n\t\treturn true\n\t}\n\treturn false\n}\n\n// Renaming files present only in the base layer is not permitted\nfunc (u *CopyOnWriteFs) Rename(oldname, newname string) error {\n\tb, err := u.isBaseFile(oldname)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif b {\n\t\treturn syscall.EPERM\n\t}\n\treturn u.layer.Rename(oldname, newname)\n}\n\n// Removing files present only in the base layer is not permitted. If\n// a file is present in the base layer and the overlay, only the overlay\n// will be removed.\nfunc (u *CopyOnWriteFs) Remove(name string) error {\n\terr := u.layer.Remove(name)\n\tswitch err {\n\tcase syscall.ENOENT:\n\t\t_, err = u.base.Stat(name)\n\t\tif err == nil {\n\t\t\treturn syscall.EPERM\n\t\t}\n\t\treturn syscall.ENOENT\n\tdefault:\n\t\treturn err\n\t}\n}\n\nfunc (u *CopyOnWriteFs) RemoveAll(name string) error {\n\terr := u.layer.RemoveAll(name)\n\tswitch err {\n\tcase syscall.ENOENT:\n\t\t_, err = u.base.Stat(name)\n\t\tif err == nil {\n\t\t\treturn syscall.EPERM\n\t\t}\n\t\treturn syscall.ENOENT\n\tdefault:\n\t\treturn err\n\t}\n}\n\nfunc (u *CopyOnWriteFs) OpenFile(name string, flag int, perm os.FileMode) (File, error) {\n\tb, err := u.isBaseFile(name)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif flag&(os.O_WRONLY|os.O_RDWR|os.O_APPEND|os.O_CREATE|os.O_TRUNC) != 0 {\n\t\tif b {\n\t\t\tif err = u.copyToLayer(name); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\treturn u.layer.OpenFile(name, flag, perm)\n\t\t}\n\n\t\tdir := filepath.Dir(name)\n\t\tisaDir, err := IsDir(u.base, dir)\n\t\tif err != nil && !os.IsNotExist(err) {\n\t\t\treturn nil, err\n\t\t}\n\t\tif isaDir {\n\t\t\tif err = u.layer.MkdirAll(dir, 0777); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\treturn u.layer.OpenFile(name, flag, perm)\n\t\t}\n\n\t\tisaDir, err = IsDir(u.layer, dir)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif isaDir {\n\t\t\treturn u.layer.OpenFile(name, flag, perm)\n\t\t}\n\n\t\treturn nil, &os.PathError{Op: \"open\", Path: name, Err: syscall.ENOTDIR} // ...or os.ErrNotExist?\n\t}\n\tif b {\n\t\treturn u.base.OpenFile(name, flag, perm)\n\t}\n\treturn u.layer.OpenFile(name, flag, perm)\n}\n\n// This function handles the 9 different possibilities caused\n// by the union which are the intersection of the following...\n//  layer: doesn't exist, exists as a file, and exists as a directory\n//  base:  doesn't exist, exists as a file, and exists as a directory\nfunc (u *CopyOnWriteFs) Open(name string) (File, error) {\n\t// Since the overlay overrides the base we check that first\n\tb, err := u.isBaseFile(name)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// If overlay doesn't exist, return the base (base state irrelevant)\n\tif b {\n\t\treturn u.base.Open(name)\n\t}\n\n\t// If overlay is a file, return it (base state irrelevant)\n\tdir, err := IsDir(u.layer, name)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif !dir {\n\t\treturn u.layer.Open(name)\n\t}\n\n\t// Overlay is a directory, base state now matters.\n\t// Base state has 3 states to check but 2 outcomes:\n\t// A. It's a file or non-readable in the base (return just the overlay)\n\t// B. It's an accessible directory in the base (return a UnionFile)\n\n\t// If base is file or nonreadable, return overlay\n\tdir, err = IsDir(u.base, name)\n\tif !dir || err != nil {\n\t\treturn u.layer.Open(name)\n\t}\n\n\t// Both base & layer are directories\n\t// Return union file (if opens are without error)\n\tbfile, bErr := u.base.Open(name)\n\tlfile, lErr := u.layer.Open(name)\n\n\t// If either have errors at this point something is very wrong. Return nil and the errors\n\tif bErr != nil || lErr != nil {\n\t\treturn nil, fmt.Errorf(\"BaseErr: %v\\nOverlayErr: %v\", bErr, lErr)\n\t}\n\n\treturn &UnionFile{Base: bfile, Layer: lfile}, nil\n}\n\nfunc (u *CopyOnWriteFs) Mkdir(name string, perm os.FileMode) error {\n\tdir, err := IsDir(u.base, name)\n\tif err != nil {\n\t\treturn u.layer.MkdirAll(name, perm)\n\t}\n\tif dir {\n\t\treturn ErrFileExists\n\t}\n\treturn u.layer.MkdirAll(name, perm)\n}\n\nfunc (u *CopyOnWriteFs) Name() string {\n\treturn \"CopyOnWriteFs\"\n}\n\nfunc (u *CopyOnWriteFs) MkdirAll(name string, perm os.FileMode) error {\n\tdir, err := IsDir(u.base, name)\n\tif err != nil {\n\t\treturn u.layer.MkdirAll(name, perm)\n\t}\n\tif dir {\n\t\t// This is in line with how os.MkdirAll behaves.\n\t\treturn nil\n\t}\n\treturn u.layer.MkdirAll(name, perm)\n}\n\nfunc (u *CopyOnWriteFs) Create(name string) (File, error) {\n\treturn u.OpenFile(name, os.O_CREATE|os.O_TRUNC|os.O_RDWR, 0666)\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/afero/httpFs.go",
    "content": "// Copyright © 2014 Steve Francia <spf@spf13.com>.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage afero\n\nimport (\n\t\"errors\"\n\t\"net/http\"\n\t\"os\"\n\t\"path\"\n\t\"path/filepath\"\n\t\"strings\"\n\t\"time\"\n)\n\ntype httpDir struct {\n\tbasePath string\n\tfs       HttpFs\n}\n\nfunc (d httpDir) Open(name string) (http.File, error) {\n\tif filepath.Separator != '/' && strings.IndexRune(name, filepath.Separator) >= 0 ||\n\t\tstrings.Contains(name, \"\\x00\") {\n\t\treturn nil, errors.New(\"http: invalid character in file path\")\n\t}\n\tdir := string(d.basePath)\n\tif dir == \"\" {\n\t\tdir = \".\"\n\t}\n\n\tf, err := d.fs.Open(filepath.Join(dir, filepath.FromSlash(path.Clean(\"/\"+name))))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn f, nil\n}\n\ntype HttpFs struct {\n\tsource Fs\n}\n\nfunc NewHttpFs(source Fs) *HttpFs {\n\treturn &HttpFs{source: source}\n}\n\nfunc (h HttpFs) Dir(s string) *httpDir {\n\treturn &httpDir{basePath: s, fs: h}\n}\n\nfunc (h HttpFs) Name() string { return \"h HttpFs\" }\n\nfunc (h HttpFs) Create(name string) (File, error) {\n\treturn h.source.Create(name)\n}\n\nfunc (h HttpFs) Chmod(name string, mode os.FileMode) error {\n\treturn h.source.Chmod(name, mode)\n}\n\nfunc (h HttpFs) Chtimes(name string, atime time.Time, mtime time.Time) error {\n\treturn h.source.Chtimes(name, atime, mtime)\n}\n\nfunc (h HttpFs) Mkdir(name string, perm os.FileMode) error {\n\treturn h.source.Mkdir(name, perm)\n}\n\nfunc (h HttpFs) MkdirAll(path string, perm os.FileMode) error {\n\treturn h.source.MkdirAll(path, perm)\n}\n\nfunc (h HttpFs) Open(name string) (http.File, error) {\n\tf, err := h.source.Open(name)\n\tif err == nil {\n\t\tif httpfile, ok := f.(http.File); ok {\n\t\t\treturn httpfile, nil\n\t\t}\n\t}\n\treturn nil, err\n}\n\nfunc (h HttpFs) OpenFile(name string, flag int, perm os.FileMode) (File, error) {\n\treturn h.source.OpenFile(name, flag, perm)\n}\n\nfunc (h HttpFs) Remove(name string) error {\n\treturn h.source.Remove(name)\n}\n\nfunc (h HttpFs) RemoveAll(path string) error {\n\treturn h.source.RemoveAll(path)\n}\n\nfunc (h HttpFs) Rename(oldname, newname string) error {\n\treturn h.source.Rename(oldname, newname)\n}\n\nfunc (h HttpFs) Stat(name string) (os.FileInfo, error) {\n\treturn h.source.Stat(name)\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/afero/ioutil.go",
    "content": "// Copyright ©2015 The Go Authors\n// Copyright ©2015 Steve Francia <spf@spf13.com>\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage afero\n\nimport (\n\t\"bytes\"\n\t\"io\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"sort\"\n\t\"strconv\"\n\t\"sync\"\n\t\"time\"\n)\n\n// byName implements sort.Interface.\ntype byName []os.FileInfo\n\nfunc (f byName) Len() int           { return len(f) }\nfunc (f byName) Less(i, j int) bool { return f[i].Name() < f[j].Name() }\nfunc (f byName) Swap(i, j int)      { f[i], f[j] = f[j], f[i] }\n\n// ReadDir reads the directory named by dirname and returns\n// a list of sorted directory entries.\nfunc (a Afero) ReadDir(dirname string) ([]os.FileInfo, error) {\n\treturn ReadDir(a.Fs, dirname)\n}\n\nfunc ReadDir(fs Fs, dirname string) ([]os.FileInfo, error) {\n\tf, err := fs.Open(dirname)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tlist, err := f.Readdir(-1)\n\tf.Close()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tsort.Sort(byName(list))\n\treturn list, nil\n}\n\n// ReadFile reads the file named by filename and returns the contents.\n// A successful call returns err == nil, not err == EOF. Because ReadFile\n// reads the whole file, it does not treat an EOF from Read as an error\n// to be reported.\nfunc (a Afero) ReadFile(filename string) ([]byte, error) {\n\treturn ReadFile(a.Fs, filename)\n}\n\nfunc ReadFile(fs Fs, filename string) ([]byte, error) {\n\tf, err := fs.Open(filename)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer f.Close()\n\t// It's a good but not certain bet that FileInfo will tell us exactly how much to\n\t// read, so let's try it but be prepared for the answer to be wrong.\n\tvar n int64\n\n\tif fi, err := f.Stat(); err == nil {\n\t\t// Don't preallocate a huge buffer, just in case.\n\t\tif size := fi.Size(); size < 1e9 {\n\t\t\tn = size\n\t\t}\n\t}\n\t// As initial capacity for readAll, use n + a little extra in case Size is zero,\n\t// and to avoid another allocation after Read has filled the buffer.  The readAll\n\t// call will read into its allocated internal buffer cheaply.  If the size was\n\t// wrong, we'll either waste some space off the end or reallocate as needed, but\n\t// in the overwhelmingly common case we'll get it just right.\n\treturn readAll(f, n+bytes.MinRead)\n}\n\n// readAll reads from r until an error or EOF and returns the data it read\n// from the internal buffer allocated with a specified capacity.\nfunc readAll(r io.Reader, capacity int64) (b []byte, err error) {\n\tbuf := bytes.NewBuffer(make([]byte, 0, capacity))\n\t// If the buffer overflows, we will get bytes.ErrTooLarge.\n\t// Return that as an error. Any other panic remains.\n\tdefer func() {\n\t\te := recover()\n\t\tif e == nil {\n\t\t\treturn\n\t\t}\n\t\tif panicErr, ok := e.(error); ok && panicErr == bytes.ErrTooLarge {\n\t\t\terr = panicErr\n\t\t} else {\n\t\t\tpanic(e)\n\t\t}\n\t}()\n\t_, err = buf.ReadFrom(r)\n\treturn buf.Bytes(), err\n}\n\n// ReadAll reads from r until an error or EOF and returns the data it read.\n// A successful call returns err == nil, not err == EOF. Because ReadAll is\n// defined to read from src until EOF, it does not treat an EOF from Read\n// as an error to be reported.\nfunc ReadAll(r io.Reader) ([]byte, error) {\n\treturn readAll(r, bytes.MinRead)\n}\n\n// WriteFile writes data to a file named by filename.\n// If the file does not exist, WriteFile creates it with permissions perm;\n// otherwise WriteFile truncates it before writing.\nfunc (a Afero) WriteFile(filename string, data []byte, perm os.FileMode) error {\n\treturn WriteFile(a.Fs, filename, data, perm)\n}\n\nfunc WriteFile(fs Fs, filename string, data []byte, perm os.FileMode) error {\n\tf, err := fs.OpenFile(filename, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, perm)\n\tif err != nil {\n\t\treturn err\n\t}\n\tn, err := f.Write(data)\n\tif err == nil && n < len(data) {\n\t\terr = io.ErrShortWrite\n\t}\n\tif err1 := f.Close(); err == nil {\n\t\terr = err1\n\t}\n\treturn err\n}\n\n// Random number state.\n// We generate random temporary file names so that there's a good\n// chance the file doesn't exist yet - keeps the number of tries in\n// TempFile to a minimum.\nvar rand uint32\nvar randmu sync.Mutex\n\nfunc reseed() uint32 {\n\treturn uint32(time.Now().UnixNano() + int64(os.Getpid()))\n}\n\nfunc nextSuffix() string {\n\trandmu.Lock()\n\tr := rand\n\tif r == 0 {\n\t\tr = reseed()\n\t}\n\tr = r*1664525 + 1013904223 // constants from Numerical Recipes\n\trand = r\n\trandmu.Unlock()\n\treturn strconv.Itoa(int(1e9 + r%1e9))[1:]\n}\n\n// TempFile creates a new temporary file in the directory dir\n// with a name beginning with prefix, opens the file for reading\n// and writing, and returns the resulting *File.\n// If dir is the empty string, TempFile uses the default directory\n// for temporary files (see os.TempDir).\n// Multiple programs calling TempFile simultaneously\n// will not choose the same file.  The caller can use f.Name()\n// to find the pathname of the file.  It is the caller's responsibility\n// to remove the file when no longer needed.\nfunc (a Afero) TempFile(dir, prefix string) (f File, err error) {\n\treturn TempFile(a.Fs, dir, prefix)\n}\n\nfunc TempFile(fs Fs, dir, prefix string) (f File, err error) {\n\tif dir == \"\" {\n\t\tdir = os.TempDir()\n\t}\n\n\tnconflict := 0\n\tfor i := 0; i < 10000; i++ {\n\t\tname := filepath.Join(dir, prefix+nextSuffix())\n\t\tf, err = fs.OpenFile(name, os.O_RDWR|os.O_CREATE|os.O_EXCL, 0600)\n\t\tif os.IsExist(err) {\n\t\t\tif nconflict++; nconflict > 10 {\n\t\t\t\trandmu.Lock()\n\t\t\t\trand = reseed()\n\t\t\t\trandmu.Unlock()\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\tbreak\n\t}\n\treturn\n}\n\n// TempDir creates a new temporary directory in the directory dir\n// with a name beginning with prefix and returns the path of the\n// new directory.  If dir is the empty string, TempDir uses the\n// default directory for temporary files (see os.TempDir).\n// Multiple programs calling TempDir simultaneously\n// will not choose the same directory.  It is the caller's responsibility\n// to remove the directory when no longer needed.\nfunc (a Afero) TempDir(dir, prefix string) (name string, err error) {\n\treturn TempDir(a.Fs, dir, prefix)\n}\nfunc TempDir(fs Fs, dir, prefix string) (name string, err error) {\n\tif dir == \"\" {\n\t\tdir = os.TempDir()\n\t}\n\n\tnconflict := 0\n\tfor i := 0; i < 10000; i++ {\n\t\ttry := filepath.Join(dir, prefix+nextSuffix())\n\t\terr = fs.Mkdir(try, 0700)\n\t\tif os.IsExist(err) {\n\t\t\tif nconflict++; nconflict > 10 {\n\t\t\t\trandmu.Lock()\n\t\t\t\trand = reseed()\n\t\t\t\trandmu.Unlock()\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\tif err == nil {\n\t\t\tname = try\n\t\t}\n\t\tbreak\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/afero/lstater.go",
    "content": "// Copyright © 2018 Steve Francia <spf@spf13.com>.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage afero\n\nimport (\n\t\"os\"\n)\n\n// Lstater is an optional interface in Afero. It is only implemented by the\n// filesystems saying so.\n// It will call Lstat if the filesystem iself is, or it delegates to, the os filesystem.\n// Else it will call Stat.\n// In addtion to the FileInfo, it will return a boolean telling whether Lstat was called or not.\ntype Lstater interface {\n\tLstatIfPossible(name string) (os.FileInfo, bool, error)\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/afero/match.go",
    "content": "// Copyright © 2014 Steve Francia <spf@spf13.com>.\n// Copyright 2009 The Go Authors. All rights reserved.\n\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage afero\n\nimport (\n\t\"path/filepath\"\n\t\"sort\"\n\t\"strings\"\n)\n\n// Glob returns the names of all files matching pattern or nil\n// if there is no matching file. The syntax of patterns is the same\n// as in Match. The pattern may describe hierarchical names such as\n// /usr/*/bin/ed (assuming the Separator is '/').\n//\n// Glob ignores file system errors such as I/O errors reading directories.\n// The only possible returned error is ErrBadPattern, when pattern\n// is malformed.\n//\n// This was adapted from (http://golang.org/pkg/path/filepath) and uses several\n// built-ins from that package.\nfunc Glob(fs Fs, pattern string) (matches []string, err error) {\n\tif !hasMeta(pattern) {\n\t\t// Lstat not supported by a ll filesystems.\n\t\tif _, err = lstatIfPossible(fs, pattern); err != nil {\n\t\t\treturn nil, nil\n\t\t}\n\t\treturn []string{pattern}, nil\n\t}\n\n\tdir, file := filepath.Split(pattern)\n\tswitch dir {\n\tcase \"\":\n\t\tdir = \".\"\n\tcase string(filepath.Separator):\n\t// nothing\n\tdefault:\n\t\tdir = dir[0 : len(dir)-1] // chop off trailing separator\n\t}\n\n\tif !hasMeta(dir) {\n\t\treturn glob(fs, dir, file, nil)\n\t}\n\n\tvar m []string\n\tm, err = Glob(fs, dir)\n\tif err != nil {\n\t\treturn\n\t}\n\tfor _, d := range m {\n\t\tmatches, err = glob(fs, d, file, matches)\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t}\n\treturn\n}\n\n// glob searches for files matching pattern in the directory dir\n// and appends them to matches. If the directory cannot be\n// opened, it returns the existing matches. New matches are\n// added in lexicographical order.\nfunc glob(fs Fs, dir, pattern string, matches []string) (m []string, e error) {\n\tm = matches\n\tfi, err := fs.Stat(dir)\n\tif err != nil {\n\t\treturn\n\t}\n\tif !fi.IsDir() {\n\t\treturn\n\t}\n\td, err := fs.Open(dir)\n\tif err != nil {\n\t\treturn\n\t}\n\tdefer d.Close()\n\n\tnames, _ := d.Readdirnames(-1)\n\tsort.Strings(names)\n\n\tfor _, n := range names {\n\t\tmatched, err := filepath.Match(pattern, n)\n\t\tif err != nil {\n\t\t\treturn m, err\n\t\t}\n\t\tif matched {\n\t\t\tm = append(m, filepath.Join(dir, n))\n\t\t}\n\t}\n\treturn\n}\n\n// hasMeta reports whether path contains any of the magic characters\n// recognized by Match.\nfunc hasMeta(path string) bool {\n\t// TODO(niemeyer): Should other magic characters be added here?\n\treturn strings.IndexAny(path, \"*?[\") >= 0\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/afero/mem/dir.go",
    "content": "// Copyright © 2014 Steve Francia <spf@spf13.com>.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage mem\n\ntype Dir interface {\n\tLen() int\n\tNames() []string\n\tFiles() []*FileData\n\tAdd(*FileData)\n\tRemove(*FileData)\n}\n\nfunc RemoveFromMemDir(dir *FileData, f *FileData) {\n\tdir.memDir.Remove(f)\n}\n\nfunc AddToMemDir(dir *FileData, f *FileData) {\n\tdir.memDir.Add(f)\n}\n\nfunc InitializeDir(d *FileData) {\n\tif d.memDir == nil {\n\t\td.dir = true\n\t\td.memDir = &DirMap{}\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/afero/mem/dirmap.go",
    "content": "// Copyright © 2015 Steve Francia <spf@spf13.com>.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage mem\n\nimport \"sort\"\n\ntype DirMap map[string]*FileData\n\nfunc (m DirMap) Len() int           { return len(m) }\nfunc (m DirMap) Add(f *FileData)    { m[f.name] = f }\nfunc (m DirMap) Remove(f *FileData) { delete(m, f.name) }\nfunc (m DirMap) Files() (files []*FileData) {\n\tfor _, f := range m {\n\t\tfiles = append(files, f)\n\t}\n\tsort.Sort(filesSorter(files))\n\treturn files\n}\n\n// implement sort.Interface for []*FileData\ntype filesSorter []*FileData\n\nfunc (s filesSorter) Len() int           { return len(s) }\nfunc (s filesSorter) Swap(i, j int)      { s[i], s[j] = s[j], s[i] }\nfunc (s filesSorter) Less(i, j int) bool { return s[i].name < s[j].name }\n\nfunc (m DirMap) Names() (names []string) {\n\tfor x := range m {\n\t\tnames = append(names, x)\n\t}\n\treturn names\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/afero/mem/file.go",
    "content": "// Copyright © 2015 Steve Francia <spf@spf13.com>.\n// Copyright 2013 tsuru authors. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage mem\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"io\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"sync\"\n\t\"sync/atomic\"\n)\n\nimport \"time\"\n\nconst FilePathSeparator = string(filepath.Separator)\n\ntype File struct {\n\t// atomic requires 64-bit alignment for struct field access\n\tat           int64\n\treadDirCount int64\n\tclosed       bool\n\treadOnly     bool\n\tfileData     *FileData\n}\n\nfunc NewFileHandle(data *FileData) *File {\n\treturn &File{fileData: data}\n}\n\nfunc NewReadOnlyFileHandle(data *FileData) *File {\n\treturn &File{fileData: data, readOnly: true}\n}\n\nfunc (f File) Data() *FileData {\n\treturn f.fileData\n}\n\ntype FileData struct {\n\tsync.Mutex\n\tname    string\n\tdata    []byte\n\tmemDir  Dir\n\tdir     bool\n\tmode    os.FileMode\n\tmodtime time.Time\n}\n\nfunc (d *FileData) Name() string {\n\td.Lock()\n\tdefer d.Unlock()\n\treturn d.name\n}\n\nfunc CreateFile(name string) *FileData {\n\treturn &FileData{name: name, mode: os.ModeTemporary, modtime: time.Now()}\n}\n\nfunc CreateDir(name string) *FileData {\n\treturn &FileData{name: name, memDir: &DirMap{}, dir: true}\n}\n\nfunc ChangeFileName(f *FileData, newname string) {\n\tf.Lock()\n\tf.name = newname\n\tf.Unlock()\n}\n\nfunc SetMode(f *FileData, mode os.FileMode) {\n\tf.Lock()\n\tf.mode = mode\n\tf.Unlock()\n}\n\nfunc SetModTime(f *FileData, mtime time.Time) {\n\tf.Lock()\n\tsetModTime(f, mtime)\n\tf.Unlock()\n}\n\nfunc setModTime(f *FileData, mtime time.Time) {\n\tf.modtime = mtime\n}\n\nfunc GetFileInfo(f *FileData) *FileInfo {\n\treturn &FileInfo{f}\n}\n\nfunc (f *File) Open() error {\n\tatomic.StoreInt64(&f.at, 0)\n\tatomic.StoreInt64(&f.readDirCount, 0)\n\tf.fileData.Lock()\n\tf.closed = false\n\tf.fileData.Unlock()\n\treturn nil\n}\n\nfunc (f *File) Close() error {\n\tf.fileData.Lock()\n\tf.closed = true\n\tif !f.readOnly {\n\t\tsetModTime(f.fileData, time.Now())\n\t}\n\tf.fileData.Unlock()\n\treturn nil\n}\n\nfunc (f *File) Name() string {\n\treturn f.fileData.Name()\n}\n\nfunc (f *File) Stat() (os.FileInfo, error) {\n\treturn &FileInfo{f.fileData}, nil\n}\n\nfunc (f *File) Sync() error {\n\treturn nil\n}\n\nfunc (f *File) Readdir(count int) (res []os.FileInfo, err error) {\n\tif !f.fileData.dir {\n\t\treturn nil, &os.PathError{Op: \"readdir\", Path: f.fileData.name, Err: errors.New(\"not a dir\")}\n\t}\n\tvar outLength int64\n\n\tf.fileData.Lock()\n\tfiles := f.fileData.memDir.Files()[f.readDirCount:]\n\tif count > 0 {\n\t\tif len(files) < count {\n\t\t\toutLength = int64(len(files))\n\t\t} else {\n\t\t\toutLength = int64(count)\n\t\t}\n\t\tif len(files) == 0 {\n\t\t\terr = io.EOF\n\t\t}\n\t} else {\n\t\toutLength = int64(len(files))\n\t}\n\tf.readDirCount += outLength\n\tf.fileData.Unlock()\n\n\tres = make([]os.FileInfo, outLength)\n\tfor i := range res {\n\t\tres[i] = &FileInfo{files[i]}\n\t}\n\n\treturn res, err\n}\n\nfunc (f *File) Readdirnames(n int) (names []string, err error) {\n\tfi, err := f.Readdir(n)\n\tnames = make([]string, len(fi))\n\tfor i, f := range fi {\n\t\t_, names[i] = filepath.Split(f.Name())\n\t}\n\treturn names, err\n}\n\nfunc (f *File) Read(b []byte) (n int, err error) {\n\tf.fileData.Lock()\n\tdefer f.fileData.Unlock()\n\tif f.closed == true {\n\t\treturn 0, ErrFileClosed\n\t}\n\tif len(b) > 0 && int(f.at) == len(f.fileData.data) {\n\t\treturn 0, io.EOF\n\t}\n\tif int(f.at) > len(f.fileData.data) {\n\t\treturn 0, io.ErrUnexpectedEOF\n\t}\n\tif len(f.fileData.data)-int(f.at) >= len(b) {\n\t\tn = len(b)\n\t} else {\n\t\tn = len(f.fileData.data) - int(f.at)\n\t}\n\tcopy(b, f.fileData.data[f.at:f.at+int64(n)])\n\tatomic.AddInt64(&f.at, int64(n))\n\treturn\n}\n\nfunc (f *File) ReadAt(b []byte, off int64) (n int, err error) {\n\tatomic.StoreInt64(&f.at, off)\n\treturn f.Read(b)\n}\n\nfunc (f *File) Truncate(size int64) error {\n\tif f.closed == true {\n\t\treturn ErrFileClosed\n\t}\n\tif f.readOnly {\n\t\treturn &os.PathError{Op: \"truncate\", Path: f.fileData.name, Err: errors.New(\"file handle is read only\")}\n\t}\n\tif size < 0 {\n\t\treturn ErrOutOfRange\n\t}\n\tif size > int64(len(f.fileData.data)) {\n\t\tdiff := size - int64(len(f.fileData.data))\n\t\tf.fileData.data = append(f.fileData.data, bytes.Repeat([]byte{00}, int(diff))...)\n\t} else {\n\t\tf.fileData.data = f.fileData.data[0:size]\n\t}\n\tsetModTime(f.fileData, time.Now())\n\treturn nil\n}\n\nfunc (f *File) Seek(offset int64, whence int) (int64, error) {\n\tif f.closed == true {\n\t\treturn 0, ErrFileClosed\n\t}\n\tswitch whence {\n\tcase 0:\n\t\tatomic.StoreInt64(&f.at, offset)\n\tcase 1:\n\t\tatomic.AddInt64(&f.at, int64(offset))\n\tcase 2:\n\t\tatomic.StoreInt64(&f.at, int64(len(f.fileData.data))+offset)\n\t}\n\treturn f.at, nil\n}\n\nfunc (f *File) Write(b []byte) (n int, err error) {\n\tif f.readOnly {\n\t\treturn 0, &os.PathError{Op: \"write\", Path: f.fileData.name, Err: errors.New(\"file handle is read only\")}\n\t}\n\tn = len(b)\n\tcur := atomic.LoadInt64(&f.at)\n\tf.fileData.Lock()\n\tdefer f.fileData.Unlock()\n\tdiff := cur - int64(len(f.fileData.data))\n\tvar tail []byte\n\tif n+int(cur) < len(f.fileData.data) {\n\t\ttail = f.fileData.data[n+int(cur):]\n\t}\n\tif diff > 0 {\n\t\tf.fileData.data = append(bytes.Repeat([]byte{00}, int(diff)), b...)\n\t\tf.fileData.data = append(f.fileData.data, tail...)\n\t} else {\n\t\tf.fileData.data = append(f.fileData.data[:cur], b...)\n\t\tf.fileData.data = append(f.fileData.data, tail...)\n\t}\n\tsetModTime(f.fileData, time.Now())\n\n\tatomic.StoreInt64(&f.at, int64(len(f.fileData.data)))\n\treturn\n}\n\nfunc (f *File) WriteAt(b []byte, off int64) (n int, err error) {\n\tatomic.StoreInt64(&f.at, off)\n\treturn f.Write(b)\n}\n\nfunc (f *File) WriteString(s string) (ret int, err error) {\n\treturn f.Write([]byte(s))\n}\n\nfunc (f *File) Info() *FileInfo {\n\treturn &FileInfo{f.fileData}\n}\n\ntype FileInfo struct {\n\t*FileData\n}\n\n// Implements os.FileInfo\nfunc (s *FileInfo) Name() string {\n\ts.Lock()\n\t_, name := filepath.Split(s.name)\n\ts.Unlock()\n\treturn name\n}\nfunc (s *FileInfo) Mode() os.FileMode {\n\ts.Lock()\n\tdefer s.Unlock()\n\treturn s.mode\n}\nfunc (s *FileInfo) ModTime() time.Time {\n\ts.Lock()\n\tdefer s.Unlock()\n\treturn s.modtime\n}\nfunc (s *FileInfo) IsDir() bool {\n\ts.Lock()\n\tdefer s.Unlock()\n\treturn s.dir\n}\nfunc (s *FileInfo) Sys() interface{} { return nil }\nfunc (s *FileInfo) Size() int64 {\n\tif s.IsDir() {\n\t\treturn int64(42)\n\t}\n\ts.Lock()\n\tdefer s.Unlock()\n\treturn int64(len(s.data))\n}\n\nvar (\n\tErrFileClosed        = errors.New(\"File is closed\")\n\tErrOutOfRange        = errors.New(\"Out of range\")\n\tErrTooLarge          = errors.New(\"Too large\")\n\tErrFileNotFound      = os.ErrNotExist\n\tErrFileExists        = os.ErrExist\n\tErrDestinationExists = os.ErrExist\n)\n"
  },
  {
    "path": "vendor/github.com/spf13/afero/memmap.go",
    "content": "// Copyright © 2014 Steve Francia <spf@spf13.com>.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage afero\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/spf13/afero/mem\"\n)\n\ntype MemMapFs struct {\n\tmu   sync.RWMutex\n\tdata map[string]*mem.FileData\n\tinit sync.Once\n}\n\nfunc NewMemMapFs() Fs {\n\treturn &MemMapFs{}\n}\n\nfunc (m *MemMapFs) getData() map[string]*mem.FileData {\n\tm.init.Do(func() {\n\t\tm.data = make(map[string]*mem.FileData)\n\t\t// Root should always exist, right?\n\t\t// TODO: what about windows?\n\t\tm.data[FilePathSeparator] = mem.CreateDir(FilePathSeparator)\n\t})\n\treturn m.data\n}\n\nfunc (*MemMapFs) Name() string { return \"MemMapFS\" }\n\nfunc (m *MemMapFs) Create(name string) (File, error) {\n\tname = normalizePath(name)\n\tm.mu.Lock()\n\tfile := mem.CreateFile(name)\n\tm.getData()[name] = file\n\tm.registerWithParent(file)\n\tm.mu.Unlock()\n\treturn mem.NewFileHandle(file), nil\n}\n\nfunc (m *MemMapFs) unRegisterWithParent(fileName string) error {\n\tf, err := m.lockfreeOpen(fileName)\n\tif err != nil {\n\t\treturn err\n\t}\n\tparent := m.findParent(f)\n\tif parent == nil {\n\t\tlog.Panic(\"parent of \", f.Name(), \" is nil\")\n\t}\n\n\tparent.Lock()\n\tmem.RemoveFromMemDir(parent, f)\n\tparent.Unlock()\n\treturn nil\n}\n\nfunc (m *MemMapFs) findParent(f *mem.FileData) *mem.FileData {\n\tpdir, _ := filepath.Split(f.Name())\n\tpdir = filepath.Clean(pdir)\n\tpfile, err := m.lockfreeOpen(pdir)\n\tif err != nil {\n\t\treturn nil\n\t}\n\treturn pfile\n}\n\nfunc (m *MemMapFs) registerWithParent(f *mem.FileData) {\n\tif f == nil {\n\t\treturn\n\t}\n\tparent := m.findParent(f)\n\tif parent == nil {\n\t\tpdir := filepath.Dir(filepath.Clean(f.Name()))\n\t\terr := m.lockfreeMkdir(pdir, 0777)\n\t\tif err != nil {\n\t\t\t//log.Println(\"Mkdir error:\", err)\n\t\t\treturn\n\t\t}\n\t\tparent, err = m.lockfreeOpen(pdir)\n\t\tif err != nil {\n\t\t\t//log.Println(\"Open after Mkdir error:\", err)\n\t\t\treturn\n\t\t}\n\t}\n\n\tparent.Lock()\n\tmem.InitializeDir(parent)\n\tmem.AddToMemDir(parent, f)\n\tparent.Unlock()\n}\n\nfunc (m *MemMapFs) lockfreeMkdir(name string, perm os.FileMode) error {\n\tname = normalizePath(name)\n\tx, ok := m.getData()[name]\n\tif ok {\n\t\t// Only return ErrFileExists if it's a file, not a directory.\n\t\ti := mem.FileInfo{FileData: x}\n\t\tif !i.IsDir() {\n\t\t\treturn ErrFileExists\n\t\t}\n\t} else {\n\t\titem := mem.CreateDir(name)\n\t\tm.getData()[name] = item\n\t\tm.registerWithParent(item)\n\t}\n\treturn nil\n}\n\nfunc (m *MemMapFs) Mkdir(name string, perm os.FileMode) error {\n\tname = normalizePath(name)\n\n\tm.mu.RLock()\n\t_, ok := m.getData()[name]\n\tm.mu.RUnlock()\n\tif ok {\n\t\treturn &os.PathError{Op: \"mkdir\", Path: name, Err: ErrFileExists}\n\t}\n\n\tm.mu.Lock()\n\titem := mem.CreateDir(name)\n\tm.getData()[name] = item\n\tm.registerWithParent(item)\n\tm.mu.Unlock()\n\n\tm.Chmod(name, perm|os.ModeDir)\n\n\treturn nil\n}\n\nfunc (m *MemMapFs) MkdirAll(path string, perm os.FileMode) error {\n\terr := m.Mkdir(path, perm)\n\tif err != nil {\n\t\tif err.(*os.PathError).Err == ErrFileExists {\n\t\t\treturn nil\n\t\t}\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// Handle some relative paths\nfunc normalizePath(path string) string {\n\tpath = filepath.Clean(path)\n\n\tswitch path {\n\tcase \".\":\n\t\treturn FilePathSeparator\n\tcase \"..\":\n\t\treturn FilePathSeparator\n\tdefault:\n\t\treturn path\n\t}\n}\n\nfunc (m *MemMapFs) Open(name string) (File, error) {\n\tf, err := m.open(name)\n\tif f != nil {\n\t\treturn mem.NewReadOnlyFileHandle(f), err\n\t}\n\treturn nil, err\n}\n\nfunc (m *MemMapFs) openWrite(name string) (File, error) {\n\tf, err := m.open(name)\n\tif f != nil {\n\t\treturn mem.NewFileHandle(f), err\n\t}\n\treturn nil, err\n}\n\nfunc (m *MemMapFs) open(name string) (*mem.FileData, error) {\n\tname = normalizePath(name)\n\n\tm.mu.RLock()\n\tf, ok := m.getData()[name]\n\tm.mu.RUnlock()\n\tif !ok {\n\t\treturn nil, &os.PathError{Op: \"open\", Path: name, Err: ErrFileNotFound}\n\t}\n\treturn f, nil\n}\n\nfunc (m *MemMapFs) lockfreeOpen(name string) (*mem.FileData, error) {\n\tname = normalizePath(name)\n\tf, ok := m.getData()[name]\n\tif ok {\n\t\treturn f, nil\n\t} else {\n\t\treturn nil, ErrFileNotFound\n\t}\n}\n\nfunc (m *MemMapFs) OpenFile(name string, flag int, perm os.FileMode) (File, error) {\n\tchmod := false\n\tfile, err := m.openWrite(name)\n\tif os.IsNotExist(err) && (flag&os.O_CREATE > 0) {\n\t\tfile, err = m.Create(name)\n\t\tchmod = true\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif flag == os.O_RDONLY {\n\t\tfile = mem.NewReadOnlyFileHandle(file.(*mem.File).Data())\n\t}\n\tif flag&os.O_APPEND > 0 {\n\t\t_, err = file.Seek(0, os.SEEK_END)\n\t\tif err != nil {\n\t\t\tfile.Close()\n\t\t\treturn nil, err\n\t\t}\n\t}\n\tif flag&os.O_TRUNC > 0 && flag&(os.O_RDWR|os.O_WRONLY) > 0 {\n\t\terr = file.Truncate(0)\n\t\tif err != nil {\n\t\t\tfile.Close()\n\t\t\treturn nil, err\n\t\t}\n\t}\n\tif chmod {\n\t\tm.Chmod(name, perm)\n\t}\n\treturn file, nil\n}\n\nfunc (m *MemMapFs) Remove(name string) error {\n\tname = normalizePath(name)\n\n\tm.mu.Lock()\n\tdefer m.mu.Unlock()\n\n\tif _, ok := m.getData()[name]; ok {\n\t\terr := m.unRegisterWithParent(name)\n\t\tif err != nil {\n\t\t\treturn &os.PathError{Op: \"remove\", Path: name, Err: err}\n\t\t}\n\t\tdelete(m.getData(), name)\n\t} else {\n\t\treturn &os.PathError{Op: \"remove\", Path: name, Err: os.ErrNotExist}\n\t}\n\treturn nil\n}\n\nfunc (m *MemMapFs) RemoveAll(path string) error {\n\tpath = normalizePath(path)\n\tm.mu.Lock()\n\tm.unRegisterWithParent(path)\n\tm.mu.Unlock()\n\n\tm.mu.RLock()\n\tdefer m.mu.RUnlock()\n\n\tfor p, _ := range m.getData() {\n\t\tif strings.HasPrefix(p, path) {\n\t\t\tm.mu.RUnlock()\n\t\t\tm.mu.Lock()\n\t\t\tdelete(m.getData(), p)\n\t\t\tm.mu.Unlock()\n\t\t\tm.mu.RLock()\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (m *MemMapFs) Rename(oldname, newname string) error {\n\toldname = normalizePath(oldname)\n\tnewname = normalizePath(newname)\n\n\tif oldname == newname {\n\t\treturn nil\n\t}\n\n\tm.mu.RLock()\n\tdefer m.mu.RUnlock()\n\tif _, ok := m.getData()[oldname]; ok {\n\t\tm.mu.RUnlock()\n\t\tm.mu.Lock()\n\t\tm.unRegisterWithParent(oldname)\n\t\tfileData := m.getData()[oldname]\n\t\tdelete(m.getData(), oldname)\n\t\tmem.ChangeFileName(fileData, newname)\n\t\tm.getData()[newname] = fileData\n\t\tm.registerWithParent(fileData)\n\t\tm.mu.Unlock()\n\t\tm.mu.RLock()\n\t} else {\n\t\treturn &os.PathError{Op: \"rename\", Path: oldname, Err: ErrFileNotFound}\n\t}\n\treturn nil\n}\n\nfunc (m *MemMapFs) Stat(name string) (os.FileInfo, error) {\n\tf, err := m.Open(name)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tfi := mem.GetFileInfo(f.(*mem.File).Data())\n\treturn fi, nil\n}\n\nfunc (m *MemMapFs) Chmod(name string, mode os.FileMode) error {\n\tname = normalizePath(name)\n\n\tm.mu.RLock()\n\tf, ok := m.getData()[name]\n\tm.mu.RUnlock()\n\tif !ok {\n\t\treturn &os.PathError{Op: \"chmod\", Path: name, Err: ErrFileNotFound}\n\t}\n\n\tm.mu.Lock()\n\tmem.SetMode(f, mode)\n\tm.mu.Unlock()\n\n\treturn nil\n}\n\nfunc (m *MemMapFs) Chtimes(name string, atime time.Time, mtime time.Time) error {\n\tname = normalizePath(name)\n\n\tm.mu.RLock()\n\tf, ok := m.getData()[name]\n\tm.mu.RUnlock()\n\tif !ok {\n\t\treturn &os.PathError{Op: \"chtimes\", Path: name, Err: ErrFileNotFound}\n\t}\n\n\tm.mu.Lock()\n\tmem.SetModTime(f, mtime)\n\tm.mu.Unlock()\n\n\treturn nil\n}\n\nfunc (m *MemMapFs) List() {\n\tfor _, x := range m.data {\n\t\ty := mem.FileInfo{FileData: x}\n\t\tfmt.Println(x.Name(), y.Size())\n\t}\n}\n\n// func debugMemMapList(fs Fs) {\n// \tif x, ok := fs.(*MemMapFs); ok {\n// \t\tx.List()\n// \t}\n// }\n"
  },
  {
    "path": "vendor/github.com/spf13/afero/os.go",
    "content": "// Copyright © 2014 Steve Francia <spf@spf13.com>.\n// Copyright 2013 tsuru authors. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage afero\n\nimport (\n\t\"os\"\n\t\"time\"\n)\n\nvar _ Lstater = (*OsFs)(nil)\n\n// OsFs is a Fs implementation that uses functions provided by the os package.\n//\n// For details in any method, check the documentation of the os package\n// (http://golang.org/pkg/os/).\ntype OsFs struct{}\n\nfunc NewOsFs() Fs {\n\treturn &OsFs{}\n}\n\nfunc (OsFs) Name() string { return \"OsFs\" }\n\nfunc (OsFs) Create(name string) (File, error) {\n\tf, e := os.Create(name)\n\tif f == nil {\n\t\t// while this looks strange, we need to return a bare nil (of type nil) not\n\t\t// a nil value of type *os.File or nil won't be nil\n\t\treturn nil, e\n\t}\n\treturn f, e\n}\n\nfunc (OsFs) Mkdir(name string, perm os.FileMode) error {\n\treturn os.Mkdir(name, perm)\n}\n\nfunc (OsFs) MkdirAll(path string, perm os.FileMode) error {\n\treturn os.MkdirAll(path, perm)\n}\n\nfunc (OsFs) Open(name string) (File, error) {\n\tf, e := os.Open(name)\n\tif f == nil {\n\t\t// while this looks strange, we need to return a bare nil (of type nil) not\n\t\t// a nil value of type *os.File or nil won't be nil\n\t\treturn nil, e\n\t}\n\treturn f, e\n}\n\nfunc (OsFs) OpenFile(name string, flag int, perm os.FileMode) (File, error) {\n\tf, e := os.OpenFile(name, flag, perm)\n\tif f == nil {\n\t\t// while this looks strange, we need to return a bare nil (of type nil) not\n\t\t// a nil value of type *os.File or nil won't be nil\n\t\treturn nil, e\n\t}\n\treturn f, e\n}\n\nfunc (OsFs) Remove(name string) error {\n\treturn os.Remove(name)\n}\n\nfunc (OsFs) RemoveAll(path string) error {\n\treturn os.RemoveAll(path)\n}\n\nfunc (OsFs) Rename(oldname, newname string) error {\n\treturn os.Rename(oldname, newname)\n}\n\nfunc (OsFs) Stat(name string) (os.FileInfo, error) {\n\treturn os.Stat(name)\n}\n\nfunc (OsFs) Chmod(name string, mode os.FileMode) error {\n\treturn os.Chmod(name, mode)\n}\n\nfunc (OsFs) Chtimes(name string, atime time.Time, mtime time.Time) error {\n\treturn os.Chtimes(name, atime, mtime)\n}\n\nfunc (OsFs) LstatIfPossible(name string) (os.FileInfo, bool, error) {\n\tfi, err := os.Lstat(name)\n\treturn fi, true, err\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/afero/path.go",
    "content": "// Copyright ©2015 The Go Authors\n// Copyright ©2015 Steve Francia <spf@spf13.com>\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage afero\n\nimport (\n\t\"os\"\n\t\"path/filepath\"\n\t\"sort\"\n)\n\n// readDirNames reads the directory named by dirname and returns\n// a sorted list of directory entries.\n// adapted from https://golang.org/src/path/filepath/path.go\nfunc readDirNames(fs Fs, dirname string) ([]string, error) {\n\tf, err := fs.Open(dirname)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tnames, err := f.Readdirnames(-1)\n\tf.Close()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tsort.Strings(names)\n\treturn names, nil\n}\n\n// walk recursively descends path, calling walkFn\n// adapted from https://golang.org/src/path/filepath/path.go\nfunc walk(fs Fs, path string, info os.FileInfo, walkFn filepath.WalkFunc) error {\n\terr := walkFn(path, info, nil)\n\tif err != nil {\n\t\tif info.IsDir() && err == filepath.SkipDir {\n\t\t\treturn nil\n\t\t}\n\t\treturn err\n\t}\n\n\tif !info.IsDir() {\n\t\treturn nil\n\t}\n\n\tnames, err := readDirNames(fs, path)\n\tif err != nil {\n\t\treturn walkFn(path, info, err)\n\t}\n\n\tfor _, name := range names {\n\t\tfilename := filepath.Join(path, name)\n\t\tfileInfo, err := lstatIfPossible(fs, filename)\n\t\tif err != nil {\n\t\t\tif err := walkFn(filename, fileInfo, err); err != nil && err != filepath.SkipDir {\n\t\t\t\treturn err\n\t\t\t}\n\t\t} else {\n\t\t\terr = walk(fs, filename, fileInfo, walkFn)\n\t\t\tif err != nil {\n\t\t\t\tif !fileInfo.IsDir() || err != filepath.SkipDir {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\n// if the filesystem supports it, use Lstat, else use fs.Stat\nfunc lstatIfPossible(fs Fs, path string) (os.FileInfo, error) {\n\tif lfs, ok := fs.(Lstater); ok {\n\t\tfi, _, err := lfs.LstatIfPossible(path)\n\t\treturn fi, err\n\t}\n\treturn fs.Stat(path)\n}\n\n// Walk walks the file tree rooted at root, calling walkFn for each file or\n// directory in the tree, including root. All errors that arise visiting files\n// and directories are filtered by walkFn. The files are walked in lexical\n// order, which makes the output deterministic but means that for very\n// large directories Walk can be inefficient.\n// Walk does not follow symbolic links.\n\nfunc (a Afero) Walk(root string, walkFn filepath.WalkFunc) error {\n\treturn Walk(a.Fs, root, walkFn)\n}\n\nfunc Walk(fs Fs, root string, walkFn filepath.WalkFunc) error {\n\tinfo, err := lstatIfPossible(fs, root)\n\tif err != nil {\n\t\treturn walkFn(root, nil, err)\n\t}\n\treturn walk(fs, root, info, walkFn)\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/afero/readonlyfs.go",
    "content": "package afero\n\nimport (\n\t\"os\"\n\t\"syscall\"\n\t\"time\"\n)\n\nvar _ Lstater = (*ReadOnlyFs)(nil)\n\ntype ReadOnlyFs struct {\n\tsource Fs\n}\n\nfunc NewReadOnlyFs(source Fs) Fs {\n\treturn &ReadOnlyFs{source: source}\n}\n\nfunc (r *ReadOnlyFs) ReadDir(name string) ([]os.FileInfo, error) {\n\treturn ReadDir(r.source, name)\n}\n\nfunc (r *ReadOnlyFs) Chtimes(n string, a, m time.Time) error {\n\treturn syscall.EPERM\n}\n\nfunc (r *ReadOnlyFs) Chmod(n string, m os.FileMode) error {\n\treturn syscall.EPERM\n}\n\nfunc (r *ReadOnlyFs) Name() string {\n\treturn \"ReadOnlyFilter\"\n}\n\nfunc (r *ReadOnlyFs) Stat(name string) (os.FileInfo, error) {\n\treturn r.source.Stat(name)\n}\n\nfunc (r *ReadOnlyFs) LstatIfPossible(name string) (os.FileInfo, bool, error) {\n\tif lsf, ok := r.source.(Lstater); ok {\n\t\treturn lsf.LstatIfPossible(name)\n\t}\n\tfi, err := r.Stat(name)\n\treturn fi, false, err\n}\n\nfunc (r *ReadOnlyFs) Rename(o, n string) error {\n\treturn syscall.EPERM\n}\n\nfunc (r *ReadOnlyFs) RemoveAll(p string) error {\n\treturn syscall.EPERM\n}\n\nfunc (r *ReadOnlyFs) Remove(n string) error {\n\treturn syscall.EPERM\n}\n\nfunc (r *ReadOnlyFs) OpenFile(name string, flag int, perm os.FileMode) (File, error) {\n\tif flag&(os.O_WRONLY|syscall.O_RDWR|os.O_APPEND|os.O_CREATE|os.O_TRUNC) != 0 {\n\t\treturn nil, syscall.EPERM\n\t}\n\treturn r.source.OpenFile(name, flag, perm)\n}\n\nfunc (r *ReadOnlyFs) Open(n string) (File, error) {\n\treturn r.source.Open(n)\n}\n\nfunc (r *ReadOnlyFs) Mkdir(n string, p os.FileMode) error {\n\treturn syscall.EPERM\n}\n\nfunc (r *ReadOnlyFs) MkdirAll(n string, p os.FileMode) error {\n\treturn syscall.EPERM\n}\n\nfunc (r *ReadOnlyFs) Create(n string) (File, error) {\n\treturn nil, syscall.EPERM\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/afero/regexpfs.go",
    "content": "package afero\n\nimport (\n\t\"os\"\n\t\"regexp\"\n\t\"syscall\"\n\t\"time\"\n)\n\n// The RegexpFs filters files (not directories) by regular expression. Only\n// files matching the given regexp will be allowed, all others get a ENOENT error (\n// \"No such file or directory\").\n//\ntype RegexpFs struct {\n\tre     *regexp.Regexp\n\tsource Fs\n}\n\nfunc NewRegexpFs(source Fs, re *regexp.Regexp) Fs {\n\treturn &RegexpFs{source: source, re: re}\n}\n\ntype RegexpFile struct {\n\tf  File\n\tre *regexp.Regexp\n}\n\nfunc (r *RegexpFs) matchesName(name string) error {\n\tif r.re == nil {\n\t\treturn nil\n\t}\n\tif r.re.MatchString(name) {\n\t\treturn nil\n\t}\n\treturn syscall.ENOENT\n}\n\nfunc (r *RegexpFs) dirOrMatches(name string) error {\n\tdir, err := IsDir(r.source, name)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif dir {\n\t\treturn nil\n\t}\n\treturn r.matchesName(name)\n}\n\nfunc (r *RegexpFs) Chtimes(name string, a, m time.Time) error {\n\tif err := r.dirOrMatches(name); err != nil {\n\t\treturn err\n\t}\n\treturn r.source.Chtimes(name, a, m)\n}\n\nfunc (r *RegexpFs) Chmod(name string, mode os.FileMode) error {\n\tif err := r.dirOrMatches(name); err != nil {\n\t\treturn err\n\t}\n\treturn r.source.Chmod(name, mode)\n}\n\nfunc (r *RegexpFs) Name() string {\n\treturn \"RegexpFs\"\n}\n\nfunc (r *RegexpFs) Stat(name string) (os.FileInfo, error) {\n\tif err := r.dirOrMatches(name); err != nil {\n\t\treturn nil, err\n\t}\n\treturn r.source.Stat(name)\n}\n\nfunc (r *RegexpFs) Rename(oldname, newname string) error {\n\tdir, err := IsDir(r.source, oldname)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif dir {\n\t\treturn nil\n\t}\n\tif err := r.matchesName(oldname); err != nil {\n\t\treturn err\n\t}\n\tif err := r.matchesName(newname); err != nil {\n\t\treturn err\n\t}\n\treturn r.source.Rename(oldname, newname)\n}\n\nfunc (r *RegexpFs) RemoveAll(p string) error {\n\tdir, err := IsDir(r.source, p)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif !dir {\n\t\tif err := r.matchesName(p); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn r.source.RemoveAll(p)\n}\n\nfunc (r *RegexpFs) Remove(name string) error {\n\tif err := r.dirOrMatches(name); err != nil {\n\t\treturn err\n\t}\n\treturn r.source.Remove(name)\n}\n\nfunc (r *RegexpFs) OpenFile(name string, flag int, perm os.FileMode) (File, error) {\n\tif err := r.dirOrMatches(name); err != nil {\n\t\treturn nil, err\n\t}\n\treturn r.source.OpenFile(name, flag, perm)\n}\n\nfunc (r *RegexpFs) Open(name string) (File, error) {\n\tdir, err := IsDir(r.source, name)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif !dir {\n\t\tif err := r.matchesName(name); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\tf, err := r.source.Open(name)\n\treturn &RegexpFile{f: f, re: r.re}, nil\n}\n\nfunc (r *RegexpFs) Mkdir(n string, p os.FileMode) error {\n\treturn r.source.Mkdir(n, p)\n}\n\nfunc (r *RegexpFs) MkdirAll(n string, p os.FileMode) error {\n\treturn r.source.MkdirAll(n, p)\n}\n\nfunc (r *RegexpFs) Create(name string) (File, error) {\n\tif err := r.matchesName(name); err != nil {\n\t\treturn nil, err\n\t}\n\treturn r.source.Create(name)\n}\n\nfunc (f *RegexpFile) Close() error {\n\treturn f.f.Close()\n}\n\nfunc (f *RegexpFile) Read(s []byte) (int, error) {\n\treturn f.f.Read(s)\n}\n\nfunc (f *RegexpFile) ReadAt(s []byte, o int64) (int, error) {\n\treturn f.f.ReadAt(s, o)\n}\n\nfunc (f *RegexpFile) Seek(o int64, w int) (int64, error) {\n\treturn f.f.Seek(o, w)\n}\n\nfunc (f *RegexpFile) Write(s []byte) (int, error) {\n\treturn f.f.Write(s)\n}\n\nfunc (f *RegexpFile) WriteAt(s []byte, o int64) (int, error) {\n\treturn f.f.WriteAt(s, o)\n}\n\nfunc (f *RegexpFile) Name() string {\n\treturn f.f.Name()\n}\n\nfunc (f *RegexpFile) Readdir(c int) (fi []os.FileInfo, err error) {\n\tvar rfi []os.FileInfo\n\trfi, err = f.f.Readdir(c)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tfor _, i := range rfi {\n\t\tif i.IsDir() || f.re.MatchString(i.Name()) {\n\t\t\tfi = append(fi, i)\n\t\t}\n\t}\n\treturn fi, nil\n}\n\nfunc (f *RegexpFile) Readdirnames(c int) (n []string, err error) {\n\tfi, err := f.Readdir(c)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tfor _, s := range fi {\n\t\tn = append(n, s.Name())\n\t}\n\treturn n, nil\n}\n\nfunc (f *RegexpFile) Stat() (os.FileInfo, error) {\n\treturn f.f.Stat()\n}\n\nfunc (f *RegexpFile) Sync() error {\n\treturn f.f.Sync()\n}\n\nfunc (f *RegexpFile) Truncate(s int64) error {\n\treturn f.f.Truncate(s)\n}\n\nfunc (f *RegexpFile) WriteString(s string) (int, error) {\n\treturn f.f.WriteString(s)\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/afero/unionFile.go",
    "content": "package afero\n\nimport (\n\t\"io\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"syscall\"\n)\n\n// The UnionFile implements the afero.File interface and will be returned\n// when reading a directory present at least in the overlay or opening a file\n// for writing.\n//\n// The calls to\n// Readdir() and Readdirnames() merge the file os.FileInfo / names from the\n// base and the overlay - for files present in both layers, only those\n// from the overlay will be used.\n//\n// When opening files for writing (Create() / OpenFile() with the right flags)\n// the operations will be done in both layers, starting with the overlay. A\n// successful read in the overlay will move the cursor position in the base layer\n// by the number of bytes read.\ntype UnionFile struct {\n\tBase   File\n\tLayer  File\n\tMerger DirsMerger\n\toff    int\n\tfiles  []os.FileInfo\n}\n\nfunc (f *UnionFile) Close() error {\n\t// first close base, so we have a newer timestamp in the overlay. If we'd close\n\t// the overlay first, we'd get a cacheStale the next time we access this file\n\t// -> cache would be useless ;-)\n\tif f.Base != nil {\n\t\tf.Base.Close()\n\t}\n\tif f.Layer != nil {\n\t\treturn f.Layer.Close()\n\t}\n\treturn BADFD\n}\n\nfunc (f *UnionFile) Read(s []byte) (int, error) {\n\tif f.Layer != nil {\n\t\tn, err := f.Layer.Read(s)\n\t\tif (err == nil || err == io.EOF) && f.Base != nil {\n\t\t\t// advance the file position also in the base file, the next\n\t\t\t// call may be a write at this position (or a seek with SEEK_CUR)\n\t\t\tif _, seekErr := f.Base.Seek(int64(n), os.SEEK_CUR); seekErr != nil {\n\t\t\t\t// only overwrite err in case the seek fails: we need to\n\t\t\t\t// report an eventual io.EOF to the caller\n\t\t\t\terr = seekErr\n\t\t\t}\n\t\t}\n\t\treturn n, err\n\t}\n\tif f.Base != nil {\n\t\treturn f.Base.Read(s)\n\t}\n\treturn 0, BADFD\n}\n\nfunc (f *UnionFile) ReadAt(s []byte, o int64) (int, error) {\n\tif f.Layer != nil {\n\t\tn, err := f.Layer.ReadAt(s, o)\n\t\tif (err == nil || err == io.EOF) && f.Base != nil {\n\t\t\t_, err = f.Base.Seek(o+int64(n), os.SEEK_SET)\n\t\t}\n\t\treturn n, err\n\t}\n\tif f.Base != nil {\n\t\treturn f.Base.ReadAt(s, o)\n\t}\n\treturn 0, BADFD\n}\n\nfunc (f *UnionFile) Seek(o int64, w int) (pos int64, err error) {\n\tif f.Layer != nil {\n\t\tpos, err = f.Layer.Seek(o, w)\n\t\tif (err == nil || err == io.EOF) && f.Base != nil {\n\t\t\t_, err = f.Base.Seek(o, w)\n\t\t}\n\t\treturn pos, err\n\t}\n\tif f.Base != nil {\n\t\treturn f.Base.Seek(o, w)\n\t}\n\treturn 0, BADFD\n}\n\nfunc (f *UnionFile) Write(s []byte) (n int, err error) {\n\tif f.Layer != nil {\n\t\tn, err = f.Layer.Write(s)\n\t\tif err == nil && f.Base != nil { // hmm, do we have fixed size files where a write may hit the EOF mark?\n\t\t\t_, err = f.Base.Write(s)\n\t\t}\n\t\treturn n, err\n\t}\n\tif f.Base != nil {\n\t\treturn f.Base.Write(s)\n\t}\n\treturn 0, BADFD\n}\n\nfunc (f *UnionFile) WriteAt(s []byte, o int64) (n int, err error) {\n\tif f.Layer != nil {\n\t\tn, err = f.Layer.WriteAt(s, o)\n\t\tif err == nil && f.Base != nil {\n\t\t\t_, err = f.Base.WriteAt(s, o)\n\t\t}\n\t\treturn n, err\n\t}\n\tif f.Base != nil {\n\t\treturn f.Base.WriteAt(s, o)\n\t}\n\treturn 0, BADFD\n}\n\nfunc (f *UnionFile) Name() string {\n\tif f.Layer != nil {\n\t\treturn f.Layer.Name()\n\t}\n\treturn f.Base.Name()\n}\n\n// DirsMerger is how UnionFile weaves two directories together.\n// It takes the FileInfo slices from the layer and the base and returns a\n// single view.\ntype DirsMerger func(lofi, bofi []os.FileInfo) ([]os.FileInfo, error)\n\nvar defaultUnionMergeDirsFn = func(lofi, bofi []os.FileInfo) ([]os.FileInfo, error) {\n\tvar files = make(map[string]os.FileInfo)\n\n\tfor _, fi := range lofi {\n\t\tfiles[fi.Name()] = fi\n\t}\n\n\tfor _, fi := range bofi {\n\t\tif _, exists := files[fi.Name()]; !exists {\n\t\t\tfiles[fi.Name()] = fi\n\t\t}\n\t}\n\n\trfi := make([]os.FileInfo, len(files))\n\n\ti := 0\n\tfor _, fi := range files {\n\t\trfi[i] = fi\n\t\ti++\n\t}\n\n\treturn rfi, nil\n\n}\n\n// Readdir will weave the two directories together and\n// return a single view of the overlayed directories.\n// At the end of the directory view, the error is io.EOF if c > 0.\nfunc (f *UnionFile) Readdir(c int) (ofi []os.FileInfo, err error) {\n\tvar merge DirsMerger = f.Merger\n\tif merge == nil {\n\t\tmerge = defaultUnionMergeDirsFn\n\t}\n\n\tif f.off == 0 {\n\t\tvar lfi []os.FileInfo\n\t\tif f.Layer != nil {\n\t\t\tlfi, err = f.Layer.Readdir(-1)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t}\n\n\t\tvar bfi []os.FileInfo\n\t\tif f.Base != nil {\n\t\t\tbfi, err = f.Base.Readdir(-1)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\n\t\t}\n\t\tmerged, err := merge(lfi, bfi)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tf.files = append(f.files, merged...)\n\t}\n\n\tif c <= 0 && len(f.files) == 0 {\n\t\treturn f.files, nil\n\t}\n\n\tif f.off >= len(f.files) {\n\t\treturn nil, io.EOF\n\t}\n\n\tif c <= 0 {\n\t\treturn f.files[f.off:], nil\n\t}\n\n\tif c > len(f.files) {\n\t\tc = len(f.files)\n\t}\n\n\tdefer func() { f.off += c }()\n\treturn f.files[f.off:c], nil\n}\n\nfunc (f *UnionFile) Readdirnames(c int) ([]string, error) {\n\trfi, err := f.Readdir(c)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tvar names []string\n\tfor _, fi := range rfi {\n\t\tnames = append(names, fi.Name())\n\t}\n\treturn names, nil\n}\n\nfunc (f *UnionFile) Stat() (os.FileInfo, error) {\n\tif f.Layer != nil {\n\t\treturn f.Layer.Stat()\n\t}\n\tif f.Base != nil {\n\t\treturn f.Base.Stat()\n\t}\n\treturn nil, BADFD\n}\n\nfunc (f *UnionFile) Sync() (err error) {\n\tif f.Layer != nil {\n\t\terr = f.Layer.Sync()\n\t\tif err == nil && f.Base != nil {\n\t\t\terr = f.Base.Sync()\n\t\t}\n\t\treturn err\n\t}\n\tif f.Base != nil {\n\t\treturn f.Base.Sync()\n\t}\n\treturn BADFD\n}\n\nfunc (f *UnionFile) Truncate(s int64) (err error) {\n\tif f.Layer != nil {\n\t\terr = f.Layer.Truncate(s)\n\t\tif err == nil && f.Base != nil {\n\t\t\terr = f.Base.Truncate(s)\n\t\t}\n\t\treturn err\n\t}\n\tif f.Base != nil {\n\t\treturn f.Base.Truncate(s)\n\t}\n\treturn BADFD\n}\n\nfunc (f *UnionFile) WriteString(s string) (n int, err error) {\n\tif f.Layer != nil {\n\t\tn, err = f.Layer.WriteString(s)\n\t\tif err == nil && f.Base != nil {\n\t\t\t_, err = f.Base.WriteString(s)\n\t\t}\n\t\treturn n, err\n\t}\n\tif f.Base != nil {\n\t\treturn f.Base.WriteString(s)\n\t}\n\treturn 0, BADFD\n}\n\nfunc copyToLayer(base Fs, layer Fs, name string) error {\n\tbfh, err := base.Open(name)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer bfh.Close()\n\n\t// First make sure the directory exists\n\texists, err := Exists(layer, filepath.Dir(name))\n\tif err != nil {\n\t\treturn err\n\t}\n\tif !exists {\n\t\terr = layer.MkdirAll(filepath.Dir(name), 0777) // FIXME?\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// Create the file on the overlay\n\tlfh, err := layer.Create(name)\n\tif err != nil {\n\t\treturn err\n\t}\n\tn, err := io.Copy(lfh, bfh)\n\tif err != nil {\n\t\t// If anything fails, clean up the file\n\t\tlayer.Remove(name)\n\t\tlfh.Close()\n\t\treturn err\n\t}\n\n\tbfi, err := bfh.Stat()\n\tif err != nil || bfi.Size() != n {\n\t\tlayer.Remove(name)\n\t\tlfh.Close()\n\t\treturn syscall.EIO\n\t}\n\n\terr = lfh.Close()\n\tif err != nil {\n\t\tlayer.Remove(name)\n\t\tlfh.Close()\n\t\treturn err\n\t}\n\treturn layer.Chtimes(name, bfi.ModTime(), bfi.ModTime())\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/afero/util.go",
    "content": "// Copyright ©2015 Steve Francia <spf@spf13.com>\n// Portions Copyright ©2015 The Hugo Authors\n// Portions Copyright 2016-present Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage afero\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n\t\"unicode\"\n\n\t\"golang.org/x/text/transform\"\n\t\"golang.org/x/text/unicode/norm\"\n)\n\n// Filepath separator defined by os.Separator.\nconst FilePathSeparator = string(filepath.Separator)\n\n// Takes a reader and a path and writes the content\nfunc (a Afero) WriteReader(path string, r io.Reader) (err error) {\n\treturn WriteReader(a.Fs, path, r)\n}\n\nfunc WriteReader(fs Fs, path string, r io.Reader) (err error) {\n\tdir, _ := filepath.Split(path)\n\tospath := filepath.FromSlash(dir)\n\n\tif ospath != \"\" {\n\t\terr = fs.MkdirAll(ospath, 0777) // rwx, rw, r\n\t\tif err != nil {\n\t\t\tif err != os.ErrExist {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t}\n\n\tfile, err := fs.Create(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tdefer file.Close()\n\n\t_, err = io.Copy(file, r)\n\treturn\n}\n\n// Same as WriteReader but checks to see if file/directory already exists.\nfunc (a Afero) SafeWriteReader(path string, r io.Reader) (err error) {\n\treturn SafeWriteReader(a.Fs, path, r)\n}\n\nfunc SafeWriteReader(fs Fs, path string, r io.Reader) (err error) {\n\tdir, _ := filepath.Split(path)\n\tospath := filepath.FromSlash(dir)\n\n\tif ospath != \"\" {\n\t\terr = fs.MkdirAll(ospath, 0777) // rwx, rw, r\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t}\n\n\texists, err := Exists(fs, path)\n\tif err != nil {\n\t\treturn\n\t}\n\tif exists {\n\t\treturn fmt.Errorf(\"%v already exists\", path)\n\t}\n\n\tfile, err := fs.Create(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tdefer file.Close()\n\n\t_, err = io.Copy(file, r)\n\treturn\n}\n\nfunc (a Afero) GetTempDir(subPath string) string {\n\treturn GetTempDir(a.Fs, subPath)\n}\n\n// GetTempDir returns the default temp directory with trailing slash\n// if subPath is not empty then it will be created recursively with mode 777 rwx rwx rwx\nfunc GetTempDir(fs Fs, subPath string) string {\n\taddSlash := func(p string) string {\n\t\tif FilePathSeparator != p[len(p)-1:] {\n\t\t\tp = p + FilePathSeparator\n\t\t}\n\t\treturn p\n\t}\n\tdir := addSlash(os.TempDir())\n\n\tif subPath != \"\" {\n\t\t// preserve windows backslash :-(\n\t\tif FilePathSeparator == \"\\\\\" {\n\t\t\tsubPath = strings.Replace(subPath, \"\\\\\", \"____\", -1)\n\t\t}\n\t\tdir = dir + UnicodeSanitize((subPath))\n\t\tif FilePathSeparator == \"\\\\\" {\n\t\t\tdir = strings.Replace(dir, \"____\", \"\\\\\", -1)\n\t\t}\n\n\t\tif exists, _ := Exists(fs, dir); exists {\n\t\t\treturn addSlash(dir)\n\t\t}\n\n\t\terr := fs.MkdirAll(dir, 0777)\n\t\tif err != nil {\n\t\t\tpanic(err)\n\t\t}\n\t\tdir = addSlash(dir)\n\t}\n\treturn dir\n}\n\n// Rewrite string to remove non-standard path characters\nfunc UnicodeSanitize(s string) string {\n\tsource := []rune(s)\n\ttarget := make([]rune, 0, len(source))\n\n\tfor _, r := range source {\n\t\tif unicode.IsLetter(r) ||\n\t\t\tunicode.IsDigit(r) ||\n\t\t\tunicode.IsMark(r) ||\n\t\t\tr == '.' ||\n\t\t\tr == '/' ||\n\t\t\tr == '\\\\' ||\n\t\t\tr == '_' ||\n\t\t\tr == '-' ||\n\t\t\tr == '%' ||\n\t\t\tr == ' ' ||\n\t\t\tr == '#' {\n\t\t\ttarget = append(target, r)\n\t\t}\n\t}\n\n\treturn string(target)\n}\n\n// Transform characters with accents into plain forms.\nfunc NeuterAccents(s string) string {\n\tt := transform.Chain(norm.NFD, transform.RemoveFunc(isMn), norm.NFC)\n\tresult, _, _ := transform.String(t, string(s))\n\n\treturn result\n}\n\nfunc isMn(r rune) bool {\n\treturn unicode.Is(unicode.Mn, r) // Mn: nonspacing marks\n}\n\nfunc (a Afero) FileContainsBytes(filename string, subslice []byte) (bool, error) {\n\treturn FileContainsBytes(a.Fs, filename, subslice)\n}\n\n// Check if a file contains a specified byte slice.\nfunc FileContainsBytes(fs Fs, filename string, subslice []byte) (bool, error) {\n\tf, err := fs.Open(filename)\n\tif err != nil {\n\t\treturn false, err\n\t}\n\tdefer f.Close()\n\n\treturn readerContainsAny(f, subslice), nil\n}\n\nfunc (a Afero) FileContainsAnyBytes(filename string, subslices [][]byte) (bool, error) {\n\treturn FileContainsAnyBytes(a.Fs, filename, subslices)\n}\n\n// Check if a file contains any of the specified byte slices.\nfunc FileContainsAnyBytes(fs Fs, filename string, subslices [][]byte) (bool, error) {\n\tf, err := fs.Open(filename)\n\tif err != nil {\n\t\treturn false, err\n\t}\n\tdefer f.Close()\n\n\treturn readerContainsAny(f, subslices...), nil\n}\n\n// readerContains reports whether any of the subslices is within r.\nfunc readerContainsAny(r io.Reader, subslices ...[]byte) bool {\n\n\tif r == nil || len(subslices) == 0 {\n\t\treturn false\n\t}\n\n\tlargestSlice := 0\n\n\tfor _, sl := range subslices {\n\t\tif len(sl) > largestSlice {\n\t\t\tlargestSlice = len(sl)\n\t\t}\n\t}\n\n\tif largestSlice == 0 {\n\t\treturn false\n\t}\n\n\tbufflen := largestSlice * 4\n\thalflen := bufflen / 2\n\tbuff := make([]byte, bufflen)\n\tvar err error\n\tvar n, i int\n\n\tfor {\n\t\ti++\n\t\tif i == 1 {\n\t\t\tn, err = io.ReadAtLeast(r, buff[:halflen], halflen)\n\t\t} else {\n\t\t\tif i != 2 {\n\t\t\t\t// shift left to catch overlapping matches\n\t\t\t\tcopy(buff[:], buff[halflen:])\n\t\t\t}\n\t\t\tn, err = io.ReadAtLeast(r, buff[halflen:], halflen)\n\t\t}\n\n\t\tif n > 0 {\n\t\t\tfor _, sl := range subslices {\n\t\t\t\tif bytes.Contains(buff, sl) {\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif err != nil {\n\t\t\tbreak\n\t\t}\n\t}\n\treturn false\n}\n\nfunc (a Afero) DirExists(path string) (bool, error) {\n\treturn DirExists(a.Fs, path)\n}\n\n// DirExists checks if a path exists and is a directory.\nfunc DirExists(fs Fs, path string) (bool, error) {\n\tfi, err := fs.Stat(path)\n\tif err == nil && fi.IsDir() {\n\t\treturn true, nil\n\t}\n\tif os.IsNotExist(err) {\n\t\treturn false, nil\n\t}\n\treturn false, err\n}\n\nfunc (a Afero) IsDir(path string) (bool, error) {\n\treturn IsDir(a.Fs, path)\n}\n\n// IsDir checks if a given path is a directory.\nfunc IsDir(fs Fs, path string) (bool, error) {\n\tfi, err := fs.Stat(path)\n\tif err != nil {\n\t\treturn false, err\n\t}\n\treturn fi.IsDir(), nil\n}\n\nfunc (a Afero) IsEmpty(path string) (bool, error) {\n\treturn IsEmpty(a.Fs, path)\n}\n\n// IsEmpty checks if a given file or directory is empty.\nfunc IsEmpty(fs Fs, path string) (bool, error) {\n\tif b, _ := Exists(fs, path); !b {\n\t\treturn false, fmt.Errorf(\"%q path does not exist\", path)\n\t}\n\tfi, err := fs.Stat(path)\n\tif err != nil {\n\t\treturn false, err\n\t}\n\tif fi.IsDir() {\n\t\tf, err := fs.Open(path)\n\t\tif err != nil {\n\t\t\treturn false, err\n\t\t}\n\t\tdefer f.Close()\n\t\tlist, err := f.Readdir(-1)\n\t\treturn len(list) == 0, nil\n\t}\n\treturn fi.Size() == 0, nil\n}\n\nfunc (a Afero) Exists(path string) (bool, error) {\n\treturn Exists(a.Fs, path)\n}\n\n// Check if a file or directory exists.\nfunc Exists(fs Fs, path string) (bool, error) {\n\t_, err := fs.Stat(path)\n\tif err == nil {\n\t\treturn true, nil\n\t}\n\tif os.IsNotExist(err) {\n\t\treturn false, nil\n\t}\n\treturn false, err\n}\n\nfunc FullBaseFsPath(basePathFs *BasePathFs, relativePath string) string {\n\tcombinedPath := filepath.Join(basePathFs.path, relativePath)\n\tif parent, ok := basePathFs.source.(*BasePathFs); ok {\n\t\treturn FullBaseFsPath(parent, combinedPath)\n\t}\n\n\treturn combinedPath\n}\n"
  },
  {
    "path": "vendor/github.com/ulikunitz/xz/LICENSE",
    "content": "Copyright (c) 2014-2016  Ulrich Kunitz\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n* Redistributions of source code must retain the above copyright notice, this\n  list of conditions and the following disclaimer.\n\n* Redistributions in binary form must reproduce the above copyright notice,\n  this list of conditions and the following disclaimer in the documentation\n  and/or other materials provided with the distribution.\n\n* My name, Ulrich Kunitz, may not be used to endorse or promote products\n  derived from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "vendor/github.com/ulikunitz/xz/bits.go",
    "content": "// Copyright 2014-2017 Ulrich Kunitz. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage xz\n\nimport (\n\t\"errors\"\n\t\"io\"\n)\n\n// putUint32LE puts the little-endian representation of x into the first\n// four bytes of p.\nfunc putUint32LE(p []byte, x uint32) {\n\tp[0] = byte(x)\n\tp[1] = byte(x >> 8)\n\tp[2] = byte(x >> 16)\n\tp[3] = byte(x >> 24)\n}\n\n// putUint64LE puts the little-endian representation of x into the first\n// eight bytes of p.\nfunc putUint64LE(p []byte, x uint64) {\n\tp[0] = byte(x)\n\tp[1] = byte(x >> 8)\n\tp[2] = byte(x >> 16)\n\tp[3] = byte(x >> 24)\n\tp[4] = byte(x >> 32)\n\tp[5] = byte(x >> 40)\n\tp[6] = byte(x >> 48)\n\tp[7] = byte(x >> 56)\n}\n\n// uint32LE converts a little endian representation to an uint32 value.\nfunc uint32LE(p []byte) uint32 {\n\treturn uint32(p[0]) | uint32(p[1])<<8 | uint32(p[2])<<16 |\n\t\tuint32(p[3])<<24\n}\n\n// putUvarint puts a uvarint representation of x into the byte slice.\nfunc putUvarint(p []byte, x uint64) int {\n\ti := 0\n\tfor x >= 0x80 {\n\t\tp[i] = byte(x) | 0x80\n\t\tx >>= 7\n\t\ti++\n\t}\n\tp[i] = byte(x)\n\treturn i + 1\n}\n\n// errOverflow indicates an overflow of the 64-bit unsigned integer.\nvar errOverflowU64 = errors.New(\"xz: uvarint overflows 64-bit unsigned integer\")\n\n// readUvarint reads a uvarint from the given byte reader.\nfunc readUvarint(r io.ByteReader) (x uint64, n int, err error) {\n\tvar s uint\n\ti := 0\n\tfor {\n\t\tb, err := r.ReadByte()\n\t\tif err != nil {\n\t\t\treturn x, i, err\n\t\t}\n\t\ti++\n\t\tif b < 0x80 {\n\t\t\tif i > 10 || i == 10 && b > 1 {\n\t\t\t\treturn x, i, errOverflowU64\n\t\t\t}\n\t\t\treturn x | uint64(b)<<s, i, nil\n\t\t}\n\t\tx |= uint64(b&0x7f) << s\n\t\ts += 7\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/ulikunitz/xz/crc.go",
    "content": "// Copyright 2014-2017 Ulrich Kunitz. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage xz\n\nimport (\n\t\"hash\"\n\t\"hash/crc32\"\n\t\"hash/crc64\"\n)\n\n// crc32Hash implements the hash.Hash32 interface with Sum returning the\n// crc32 value in little-endian encoding.\ntype crc32Hash struct {\n\thash.Hash32\n}\n\n// Sum returns the crc32 value as little endian.\nfunc (h crc32Hash) Sum(b []byte) []byte {\n\tp := make([]byte, 4)\n\tputUint32LE(p, h.Hash32.Sum32())\n\tb = append(b, p...)\n\treturn b\n}\n\n// newCRC32 returns a CRC-32 hash that returns the 64-bit value in\n// little-endian encoding using the IEEE polynomial.\nfunc newCRC32() hash.Hash {\n\treturn crc32Hash{Hash32: crc32.NewIEEE()}\n}\n\n// crc64Hash implements the Hash64 interface with Sum returning the\n// CRC-64 value in little-endian encoding.\ntype crc64Hash struct {\n\thash.Hash64\n}\n\n// Sum returns the CRC-64 value in little-endian encoding.\nfunc (h crc64Hash) Sum(b []byte) []byte {\n\tp := make([]byte, 8)\n\tputUint64LE(p, h.Hash64.Sum64())\n\tb = append(b, p...)\n\treturn b\n}\n\n// crc64Table is used to create a CRC-64 hash.\nvar crc64Table = crc64.MakeTable(crc64.ECMA)\n\n// newCRC64 returns a CRC-64 hash that returns the 64-bit value in\n// little-endian encoding using the ECMA polynomial.\nfunc newCRC64() hash.Hash {\n\treturn crc64Hash{Hash64: crc64.New(crc64Table)}\n}\n"
  },
  {
    "path": "vendor/github.com/ulikunitz/xz/example.go",
    "content": "// Copyright 2014-2017 Ulrich Kunitz. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build ignore\n\npackage main\n\nimport (\n\t\"bytes\"\n\t\"io\"\n\t\"log\"\n\t\"os\"\n\n\t\"github.com/ulikunitz/xz\"\n)\n\nfunc main() {\n\tconst text = \"The quick brown fox jumps over the lazy dog.\\n\"\n\tvar buf bytes.Buffer\n\t// compress text\n\tw, err := xz.NewWriter(&buf)\n\tif err != nil {\n\t\tlog.Fatalf(\"xz.NewWriter error %s\", err)\n\t}\n\tif _, err := io.WriteString(w, text); err != nil {\n\t\tlog.Fatalf(\"WriteString error %s\", err)\n\t}\n\tif err := w.Close(); err != nil {\n\t\tlog.Fatalf(\"w.Close error %s\", err)\n\t}\n\t// decompress buffer and write output to stdout\n\tr, err := xz.NewReader(&buf)\n\tif err != nil {\n\t\tlog.Fatalf(\"NewReader error %s\", err)\n\t}\n\tif _, err = io.Copy(os.Stdout, r); err != nil {\n\t\tlog.Fatalf(\"io.Copy error %s\", err)\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/ulikunitz/xz/format.go",
    "content": "// Copyright 2014-2017 Ulrich Kunitz. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage xz\n\nimport (\n\t\"bytes\"\n\t\"crypto/sha256\"\n\t\"errors\"\n\t\"fmt\"\n\t\"hash\"\n\t\"hash/crc32\"\n\t\"io\"\n\n\t\"github.com/ulikunitz/xz/lzma\"\n)\n\n// allZeros checks whether a given byte slice has only zeros.\nfunc allZeros(p []byte) bool {\n\tfor _, c := range p {\n\t\tif c != 0 {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\n// padLen returns the length of the padding required for the given\n// argument.\nfunc padLen(n int64) int {\n\tk := int(n % 4)\n\tif k > 0 {\n\t\tk = 4 - k\n\t}\n\treturn k\n}\n\n/*** Header ***/\n\n// headerMagic stores the magic bytes for the header\nvar headerMagic = []byte{0xfd, '7', 'z', 'X', 'Z', 0x00}\n\n// HeaderLen provides the length of the xz file header.\nconst HeaderLen = 12\n\n// Constants for the checksum methods supported by xz.\nconst (\n\tCRC32  byte = 0x1\n\tCRC64       = 0x4\n\tSHA256      = 0xa\n)\n\n// errInvalidFlags indicates that flags are invalid.\nvar errInvalidFlags = errors.New(\"xz: invalid flags\")\n\n// verifyFlags returns the error errInvalidFlags if the value is\n// invalid.\nfunc verifyFlags(flags byte) error {\n\tswitch flags {\n\tcase CRC32, CRC64, SHA256:\n\t\treturn nil\n\tdefault:\n\t\treturn errInvalidFlags\n\t}\n}\n\n// flagstrings maps flag values to strings.\nvar flagstrings = map[byte]string{\n\tCRC32:  \"CRC-32\",\n\tCRC64:  \"CRC-64\",\n\tSHA256: \"SHA-256\",\n}\n\n// flagString returns the string representation for the given flags.\nfunc flagString(flags byte) string {\n\ts, ok := flagstrings[flags]\n\tif !ok {\n\t\treturn \"invalid\"\n\t}\n\treturn s\n}\n\n// newHashFunc returns a function that creates hash instances for the\n// hash method encoded in flags.\nfunc newHashFunc(flags byte) (newHash func() hash.Hash, err error) {\n\tswitch flags {\n\tcase CRC32:\n\t\tnewHash = newCRC32\n\tcase CRC64:\n\t\tnewHash = newCRC64\n\tcase SHA256:\n\t\tnewHash = sha256.New\n\tdefault:\n\t\terr = errInvalidFlags\n\t}\n\treturn\n}\n\n// header provides the actual content of the xz file header: the flags.\ntype header struct {\n\tflags byte\n}\n\n// Errors returned by readHeader.\nvar errHeaderMagic = errors.New(\"xz: invalid header magic bytes\")\n\n// ValidHeader checks whether data is a correct xz file header. The\n// length of data must be HeaderLen.\nfunc ValidHeader(data []byte) bool {\n\tvar h header\n\terr := h.UnmarshalBinary(data)\n\treturn err == nil\n}\n\n// String returns a string representation of the flags.\nfunc (h header) String() string {\n\treturn flagString(h.flags)\n}\n\n// UnmarshalBinary reads header from the provided data slice.\nfunc (h *header) UnmarshalBinary(data []byte) error {\n\t// header length\n\tif len(data) != HeaderLen {\n\t\treturn errors.New(\"xz: wrong file header length\")\n\t}\n\n\t// magic header\n\tif !bytes.Equal(headerMagic, data[:6]) {\n\t\treturn errHeaderMagic\n\t}\n\n\t// checksum\n\tcrc := crc32.NewIEEE()\n\tcrc.Write(data[6:8])\n\tif uint32LE(data[8:]) != crc.Sum32() {\n\t\treturn errors.New(\"xz: invalid checksum for file header\")\n\t}\n\n\t// stream flags\n\tif data[6] != 0 {\n\t\treturn errInvalidFlags\n\t}\n\tflags := data[7]\n\tif err := verifyFlags(flags); err != nil {\n\t\treturn err\n\t}\n\n\th.flags = flags\n\treturn nil\n}\n\n// MarshalBinary generates the xz file header.\nfunc (h *header) MarshalBinary() (data []byte, err error) {\n\tif err = verifyFlags(h.flags); err != nil {\n\t\treturn nil, err\n\t}\n\n\tdata = make([]byte, 12)\n\tcopy(data, headerMagic)\n\tdata[7] = h.flags\n\n\tcrc := crc32.NewIEEE()\n\tcrc.Write(data[6:8])\n\tputUint32LE(data[8:], crc.Sum32())\n\n\treturn data, nil\n}\n\n/*** Footer ***/\n\n// footerLen defines the length of the footer.\nconst footerLen = 12\n\n// footerMagic contains the footer magic bytes.\nvar footerMagic = []byte{'Y', 'Z'}\n\n// footer represents the content of the xz file footer.\ntype footer struct {\n\tindexSize int64\n\tflags     byte\n}\n\n// String prints a string representation of the footer structure.\nfunc (f footer) String() string {\n\treturn fmt.Sprintf(\"%s index size %d\", flagString(f.flags), f.indexSize)\n}\n\n// Minimum and maximum for the size of the index (backward size).\nconst (\n\tminIndexSize = 4\n\tmaxIndexSize = (1 << 32) * 4\n)\n\n// MarshalBinary converts footer values into an xz file footer. Note\n// that the footer value is checked for correctness.\nfunc (f *footer) MarshalBinary() (data []byte, err error) {\n\tif err = verifyFlags(f.flags); err != nil {\n\t\treturn nil, err\n\t}\n\tif !(minIndexSize <= f.indexSize && f.indexSize <= maxIndexSize) {\n\t\treturn nil, errors.New(\"xz: index size out of range\")\n\t}\n\tif f.indexSize%4 != 0 {\n\t\treturn nil, errors.New(\n\t\t\t\"xz: index size not aligned to four bytes\")\n\t}\n\n\tdata = make([]byte, footerLen)\n\n\t// backward size (index size)\n\ts := (f.indexSize / 4) - 1\n\tputUint32LE(data[4:], uint32(s))\n\t// flags\n\tdata[9] = f.flags\n\t// footer magic\n\tcopy(data[10:], footerMagic)\n\n\t// CRC-32\n\tcrc := crc32.NewIEEE()\n\tcrc.Write(data[4:10])\n\tputUint32LE(data, crc.Sum32())\n\n\treturn data, nil\n}\n\n// UnmarshalBinary sets the footer value by unmarshalling an xz file\n// footer.\nfunc (f *footer) UnmarshalBinary(data []byte) error {\n\tif len(data) != footerLen {\n\t\treturn errors.New(\"xz: wrong footer length\")\n\t}\n\n\t// magic bytes\n\tif !bytes.Equal(data[10:], footerMagic) {\n\t\treturn errors.New(\"xz: footer magic invalid\")\n\t}\n\n\t// CRC-32\n\tcrc := crc32.NewIEEE()\n\tcrc.Write(data[4:10])\n\tif uint32LE(data) != crc.Sum32() {\n\t\treturn errors.New(\"xz: footer checksum error\")\n\t}\n\n\tvar g footer\n\t// backward size (index size)\n\tg.indexSize = (int64(uint32LE(data[4:])) + 1) * 4\n\n\t// flags\n\tif data[8] != 0 {\n\t\treturn errInvalidFlags\n\t}\n\tg.flags = data[9]\n\tif err := verifyFlags(g.flags); err != nil {\n\t\treturn err\n\t}\n\n\t*f = g\n\treturn nil\n}\n\n/*** Block Header ***/\n\n// blockHeader represents the content of an xz block header.\ntype blockHeader struct {\n\tcompressedSize   int64\n\tuncompressedSize int64\n\tfilters          []filter\n}\n\n// String converts the block header into a string.\nfunc (h blockHeader) String() string {\n\tvar buf bytes.Buffer\n\tfirst := true\n\tif h.compressedSize >= 0 {\n\t\tfmt.Fprintf(&buf, \"compressed size %d\", h.compressedSize)\n\t\tfirst = false\n\t}\n\tif h.uncompressedSize >= 0 {\n\t\tif !first {\n\t\t\tbuf.WriteString(\" \")\n\t\t}\n\t\tfmt.Fprintf(&buf, \"uncompressed size %d\", h.uncompressedSize)\n\t\tfirst = false\n\t}\n\tfor _, f := range h.filters {\n\t\tif !first {\n\t\t\tbuf.WriteString(\" \")\n\t\t}\n\t\tfmt.Fprintf(&buf, \"filter %s\", f)\n\t\tfirst = false\n\t}\n\treturn buf.String()\n}\n\n// Masks for the block flags.\nconst (\n\tfilterCountMask         = 0x03\n\tcompressedSizePresent   = 0x40\n\tuncompressedSizePresent = 0x80\n\treservedBlockFlags      = 0x3C\n)\n\n// errIndexIndicator signals that an index indicator (0x00) has been found\n// instead of an expected block header indicator.\nvar errIndexIndicator = errors.New(\"xz: found index indicator\")\n\n// readBlockHeader reads the block header.\nfunc readBlockHeader(r io.Reader) (h *blockHeader, n int, err error) {\n\tvar buf bytes.Buffer\n\tbuf.Grow(20)\n\n\t// block header size\n\tz, err := io.CopyN(&buf, r, 1)\n\tn = int(z)\n\tif err != nil {\n\t\treturn nil, n, err\n\t}\n\ts := buf.Bytes()[0]\n\tif s == 0 {\n\t\treturn nil, n, errIndexIndicator\n\t}\n\n\t// read complete header\n\theaderLen := (int(s) + 1) * 4\n\tbuf.Grow(headerLen - 1)\n\tz, err = io.CopyN(&buf, r, int64(headerLen-1))\n\tn += int(z)\n\tif err != nil {\n\t\treturn nil, n, err\n\t}\n\n\t// unmarshal block header\n\th = new(blockHeader)\n\tif err = h.UnmarshalBinary(buf.Bytes()); err != nil {\n\t\treturn nil, n, err\n\t}\n\n\treturn h, n, nil\n}\n\n// readSizeInBlockHeader reads the uncompressed or compressed size\n// fields in the block header. The present value informs the function\n// whether the respective field is actually present in the header.\nfunc readSizeInBlockHeader(r io.ByteReader, present bool) (n int64, err error) {\n\tif !present {\n\t\treturn -1, nil\n\t}\n\tx, _, err := readUvarint(r)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tif x >= 1<<63 {\n\t\treturn 0, errors.New(\"xz: size overflow in block header\")\n\t}\n\treturn int64(x), nil\n}\n\n// UnmarshalBinary unmarshals the block header.\nfunc (h *blockHeader) UnmarshalBinary(data []byte) error {\n\t// Check header length\n\ts := data[0]\n\tif data[0] == 0 {\n\t\treturn errIndexIndicator\n\t}\n\theaderLen := (int(s) + 1) * 4\n\tif len(data) != headerLen {\n\t\treturn fmt.Errorf(\"xz: data length %d; want %d\", len(data),\n\t\t\theaderLen)\n\t}\n\tn := headerLen - 4\n\n\t// Check CRC-32\n\tcrc := crc32.NewIEEE()\n\tcrc.Write(data[:n])\n\tif crc.Sum32() != uint32LE(data[n:]) {\n\t\treturn errors.New(\"xz: checksum error for block header\")\n\t}\n\n\t// Block header flags\n\tflags := data[1]\n\tif flags&reservedBlockFlags != 0 {\n\t\treturn errors.New(\"xz: reserved block header flags set\")\n\t}\n\n\tr := bytes.NewReader(data[2:n])\n\n\t// Compressed size\n\tvar err error\n\th.compressedSize, err = readSizeInBlockHeader(\n\t\tr, flags&compressedSizePresent != 0)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Uncompressed size\n\th.uncompressedSize, err = readSizeInBlockHeader(\n\t\tr, flags&uncompressedSizePresent != 0)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\th.filters, err = readFilters(r, int(flags&filterCountMask)+1)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Check padding\n\t// Since headerLen is a multiple of 4 we don't need to check\n\t// alignment.\n\tk := r.Len()\n\t// The standard spec says that the padding should have not more\n\t// than 3 bytes. However we found paddings of 4 or 5 in the\n\t// wild. See https://github.com/ulikunitz/xz/pull/11 and\n\t// https://github.com/ulikunitz/xz/issues/15\n\t//\n\t// The only reasonable approach seems to be to ignore the\n\t// padding size. We still check that all padding bytes are zero.\n\tif !allZeros(data[n-k : n]) {\n\t\treturn errPadding\n\t}\n\treturn nil\n}\n\n// MarshalBinary marshals the binary header.\nfunc (h *blockHeader) MarshalBinary() (data []byte, err error) {\n\tif !(minFilters <= len(h.filters) && len(h.filters) <= maxFilters) {\n\t\treturn nil, errors.New(\"xz: filter count wrong\")\n\t}\n\tfor i, f := range h.filters {\n\t\tif i < len(h.filters)-1 {\n\t\t\tif f.id() == lzmaFilterID {\n\t\t\t\treturn nil, errors.New(\n\t\t\t\t\t\"xz: LZMA2 filter is not the last\")\n\t\t\t}\n\t\t} else {\n\t\t\t// last filter\n\t\t\tif f.id() != lzmaFilterID {\n\t\t\t\treturn nil, errors.New(\"xz: \" +\n\t\t\t\t\t\"last filter must be the LZMA2 filter\")\n\t\t\t}\n\t\t}\n\t}\n\n\tvar buf bytes.Buffer\n\t// header size must set at the end\n\tbuf.WriteByte(0)\n\n\t// flags\n\tflags := byte(len(h.filters) - 1)\n\tif h.compressedSize >= 0 {\n\t\tflags |= compressedSizePresent\n\t}\n\tif h.uncompressedSize >= 0 {\n\t\tflags |= uncompressedSizePresent\n\t}\n\tbuf.WriteByte(flags)\n\n\tp := make([]byte, 10)\n\tif h.compressedSize >= 0 {\n\t\tk := putUvarint(p, uint64(h.compressedSize))\n\t\tbuf.Write(p[:k])\n\t}\n\tif h.uncompressedSize >= 0 {\n\t\tk := putUvarint(p, uint64(h.uncompressedSize))\n\t\tbuf.Write(p[:k])\n\t}\n\n\tfor _, f := range h.filters {\n\t\tfp, err := f.MarshalBinary()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tbuf.Write(fp)\n\t}\n\n\t// padding\n\tfor i := padLen(int64(buf.Len())); i > 0; i-- {\n\t\tbuf.WriteByte(0)\n\t}\n\n\t// crc place holder\n\tbuf.Write(p[:4])\n\n\tdata = buf.Bytes()\n\tif len(data)%4 != 0 {\n\t\tpanic(\"data length not aligned\")\n\t}\n\ts := len(data)/4 - 1\n\tif !(1 < s && s <= 255) {\n\t\tpanic(\"wrong block header size\")\n\t}\n\tdata[0] = byte(s)\n\n\tcrc := crc32.NewIEEE()\n\tcrc.Write(data[:len(data)-4])\n\tputUint32LE(data[len(data)-4:], crc.Sum32())\n\n\treturn data, nil\n}\n\n// Constants used for marshalling and unmarshalling filters in the xz\n// block header.\nconst (\n\tminFilters    = 1\n\tmaxFilters    = 4\n\tminReservedID = 1 << 62\n)\n\n// filter represents a filter in the block header.\ntype filter interface {\n\tid() uint64\n\tUnmarshalBinary(data []byte) error\n\tMarshalBinary() (data []byte, err error)\n\treader(r io.Reader, c *ReaderConfig) (fr io.Reader, err error)\n\twriteCloser(w io.WriteCloser, c *WriterConfig) (fw io.WriteCloser, err error)\n\t// filter must be last filter\n\tlast() bool\n}\n\n// readFilter reads a block filter from the block header. At this point\n// in time only the LZMA2 filter is supported.\nfunc readFilter(r io.Reader) (f filter, err error) {\n\tbr := lzma.ByteReader(r)\n\n\t// index\n\tid, _, err := readUvarint(br)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar data []byte\n\tswitch id {\n\tcase lzmaFilterID:\n\t\tdata = make([]byte, lzmaFilterLen)\n\t\tdata[0] = lzmaFilterID\n\t\tif _, err = io.ReadFull(r, data[1:]); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tf = new(lzmaFilter)\n\tdefault:\n\t\tif id >= minReservedID {\n\t\t\treturn nil, errors.New(\n\t\t\t\t\"xz: reserved filter id in block stream header\")\n\t\t}\n\t\treturn nil, errors.New(\"xz: invalid filter id\")\n\t}\n\tif err = f.UnmarshalBinary(data); err != nil {\n\t\treturn nil, err\n\t}\n\treturn f, err\n}\n\n// readFilters reads count filters. At this point in time only the count\n// 1 is supported.\nfunc readFilters(r io.Reader, count int) (filters []filter, err error) {\n\tif count != 1 {\n\t\treturn nil, errors.New(\"xz: unsupported filter count\")\n\t}\n\tf, err := readFilter(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn []filter{f}, err\n}\n\n// writeFilters writes the filters.\nfunc writeFilters(w io.Writer, filters []filter) (n int, err error) {\n\tfor _, f := range filters {\n\t\tp, err := f.MarshalBinary()\n\t\tif err != nil {\n\t\t\treturn n, err\n\t\t}\n\t\tk, err := w.Write(p)\n\t\tn += k\n\t\tif err != nil {\n\t\t\treturn n, err\n\t\t}\n\t}\n\treturn n, nil\n}\n\n/*** Index ***/\n\n// record describes a block in the xz file index.\ntype record struct {\n\tunpaddedSize     int64\n\tuncompressedSize int64\n}\n\n// readRecord reads an index record.\nfunc readRecord(r io.ByteReader) (rec record, n int, err error) {\n\tu, k, err := readUvarint(r)\n\tn += k\n\tif err != nil {\n\t\treturn rec, n, err\n\t}\n\trec.unpaddedSize = int64(u)\n\tif rec.unpaddedSize < 0 {\n\t\treturn rec, n, errors.New(\"xz: unpadded size negative\")\n\t}\n\n\tu, k, err = readUvarint(r)\n\tn += k\n\tif err != nil {\n\t\treturn rec, n, err\n\t}\n\trec.uncompressedSize = int64(u)\n\tif rec.uncompressedSize < 0 {\n\t\treturn rec, n, errors.New(\"xz: uncompressed size negative\")\n\t}\n\n\treturn rec, n, nil\n}\n\n// MarshalBinary converts an index record in its binary encoding.\nfunc (rec *record) MarshalBinary() (data []byte, err error) {\n\t// maximum length of a uvarint is 10\n\tp := make([]byte, 20)\n\tn := putUvarint(p, uint64(rec.unpaddedSize))\n\tn += putUvarint(p[n:], uint64(rec.uncompressedSize))\n\treturn p[:n], nil\n}\n\n// writeIndex writes the index, a sequence of records.\nfunc writeIndex(w io.Writer, index []record) (n int64, err error) {\n\tcrc := crc32.NewIEEE()\n\tmw := io.MultiWriter(w, crc)\n\n\t// index indicator\n\tk, err := mw.Write([]byte{0})\n\tn += int64(k)\n\tif err != nil {\n\t\treturn n, err\n\t}\n\n\t// number of records\n\tp := make([]byte, 10)\n\tk = putUvarint(p, uint64(len(index)))\n\tk, err = mw.Write(p[:k])\n\tn += int64(k)\n\tif err != nil {\n\t\treturn n, err\n\t}\n\n\t// list of records\n\tfor _, rec := range index {\n\t\tp, err := rec.MarshalBinary()\n\t\tif err != nil {\n\t\t\treturn n, err\n\t\t}\n\t\tk, err = mw.Write(p)\n\t\tn += int64(k)\n\t\tif err != nil {\n\t\t\treturn n, err\n\t\t}\n\t}\n\n\t// index padding\n\tk, err = mw.Write(make([]byte, padLen(int64(n))))\n\tn += int64(k)\n\tif err != nil {\n\t\treturn n, err\n\t}\n\n\t// crc32 checksum\n\tputUint32LE(p, crc.Sum32())\n\tk, err = w.Write(p[:4])\n\tn += int64(k)\n\n\treturn n, err\n}\n\n// readIndexBody reads the index from the reader. It assumes that the\n// index indicator has already been read.\nfunc readIndexBody(r io.Reader) (records []record, n int64, err error) {\n\tcrc := crc32.NewIEEE()\n\t// index indicator\n\tcrc.Write([]byte{0})\n\n\tbr := lzma.ByteReader(io.TeeReader(r, crc))\n\n\t// number of records\n\tu, k, err := readUvarint(br)\n\tn += int64(k)\n\tif err != nil {\n\t\treturn nil, n, err\n\t}\n\trecLen := int(u)\n\tif recLen < 0 || uint64(recLen) != u {\n\t\treturn nil, n, errors.New(\"xz: record number overflow\")\n\t}\n\n\t// list of records\n\trecords = make([]record, recLen)\n\tfor i := range records {\n\t\trecords[i], k, err = readRecord(br)\n\t\tn += int64(k)\n\t\tif err != nil {\n\t\t\treturn nil, n, err\n\t\t}\n\t}\n\n\tp := make([]byte, padLen(int64(n+1)), 4)\n\tk, err = io.ReadFull(br.(io.Reader), p)\n\tn += int64(k)\n\tif err != nil {\n\t\treturn nil, n, err\n\t}\n\tif !allZeros(p) {\n\t\treturn nil, n, errors.New(\"xz: non-zero byte in index padding\")\n\t}\n\n\t// crc32\n\ts := crc.Sum32()\n\tp = p[:4]\n\tk, err = io.ReadFull(br.(io.Reader), p)\n\tn += int64(k)\n\tif err != nil {\n\t\treturn records, n, err\n\t}\n\tif uint32LE(p) != s {\n\t\treturn nil, n, errors.New(\"xz: wrong checksum for index\")\n\t}\n\n\treturn records, n, nil\n}\n"
  },
  {
    "path": "vendor/github.com/ulikunitz/xz/internal/hash/cyclic_poly.go",
    "content": "// Copyright 2014-2017 Ulrich Kunitz. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage hash\n\n// CyclicPoly provides a cyclic polynomial rolling hash.\ntype CyclicPoly struct {\n\th uint64\n\tp []uint64\n\ti int\n}\n\n// ror rotates the unsigned 64-bit integer to right. The argument s must be\n// less than 64.\nfunc ror(x uint64, s uint) uint64 {\n\treturn (x >> s) | (x << (64 - s))\n}\n\n// NewCyclicPoly creates a new instance of the CyclicPoly structure. The\n// argument n gives the number of bytes for which a hash will be executed.\n// This number must be positive; the method panics if this isn't the case.\nfunc NewCyclicPoly(n int) *CyclicPoly {\n\tif n < 1 {\n\t\tpanic(\"argument n must be positive\")\n\t}\n\treturn &CyclicPoly{p: make([]uint64, 0, n)}\n}\n\n// Len returns the length of the byte sequence for which a hash is generated.\nfunc (r *CyclicPoly) Len() int {\n\treturn cap(r.p)\n}\n\n// RollByte hashes the next byte and returns a hash value. The complete becomes\n// available after at least Len() bytes have been hashed.\nfunc (r *CyclicPoly) RollByte(x byte) uint64 {\n\ty := hash[x]\n\tif len(r.p) < cap(r.p) {\n\t\tr.h = ror(r.h, 1) ^ y\n\t\tr.p = append(r.p, y)\n\t} else {\n\t\tr.h ^= ror(r.p[r.i], uint(cap(r.p)-1))\n\t\tr.h = ror(r.h, 1) ^ y\n\t\tr.p[r.i] = y\n\t\tr.i = (r.i + 1) % cap(r.p)\n\t}\n\treturn r.h\n}\n\n// Stores the hash for the individual bytes.\nvar hash = [256]uint64{\n\t0x2e4fc3f904065142, 0xc790984cfbc99527,\n\t0x879f95eb8c62f187, 0x3b61be86b5021ef2,\n\t0x65a896a04196f0a5, 0xc5b307b80470b59e,\n\t0xd3bff376a70df14b, 0xc332f04f0b3f1701,\n\t0x753b5f0e9abf3e0d, 0xb41538fdfe66ef53,\n\t0x1906a10c2c1c0208, 0xfb0c712a03421c0d,\n\t0x38be311a65c9552b, 0xfee7ee4ca6445c7e,\n\t0x71aadeded184f21e, 0xd73426fccda23b2d,\n\t0x29773fb5fb9600b5, 0xce410261cd32981a,\n\t0xfe2848b3c62dbc2d, 0x459eaaff6e43e11c,\n\t0xc13e35fc9c73a887, 0xf30ed5c201e76dbc,\n\t0xa5f10b3910482cea, 0x2945d59be02dfaad,\n\t0x06ee334ff70571b5, 0xbabf9d8070f44380,\n\t0xee3e2e9912ffd27c, 0x2a7118d1ea6b8ea7,\n\t0x26183cb9f7b1664c, 0xea71dac7da068f21,\n\t0xea92eca5bd1d0bb7, 0x415595862defcd75,\n\t0x248a386023c60648, 0x9cf021ab284b3c8a,\n\t0xfc9372df02870f6c, 0x2b92d693eeb3b3fc,\n\t0x73e799d139dc6975, 0x7b15ae312486363c,\n\t0xb70e5454a2239c80, 0x208e3fb31d3b2263,\n\t0x01f563cabb930f44, 0x2ac4533d2a3240d8,\n\t0x84231ed1064f6f7c, 0xa9f020977c2a6d19,\n\t0x213c227271c20122, 0x09fe8a9a0a03d07a,\n\t0x4236dc75bcaf910c, 0x460a8b2bead8f17e,\n\t0xd9b27be1aa07055f, 0xd202d5dc4b11c33e,\n\t0x70adb010543bea12, 0xcdae938f7ea6f579,\n\t0x3f3d870208672f4d, 0x8e6ccbce9d349536,\n\t0xe4c0871a389095ae, 0xf5f2a49152bca080,\n\t0x9a43f9b97269934e, 0xc17b3753cb6f475c,\n\t0xd56d941e8e206bd4, 0xac0a4f3e525eda00,\n\t0xa06d5a011912a550, 0x5537ed19537ad1df,\n\t0xa32fe713d611449d, 0x2a1d05b47c3b579f,\n\t0x991d02dbd30a2a52, 0x39e91e7e28f93eb0,\n\t0x40d06adb3e92c9ac, 0x9b9d3afde1c77c97,\n\t0x9a3f3f41c02c616f, 0x22ecd4ba00f60c44,\n\t0x0b63d5d801708420, 0x8f227ca8f37ffaec,\n\t0x0256278670887c24, 0x107e14877dbf540b,\n\t0x32c19f2786ac1c05, 0x1df5b12bb4bc9c61,\n\t0xc0cac129d0d4c4e2, 0x9fdb52ee9800b001,\n\t0x31f601d5d31c48c4, 0x72ff3c0928bcaec7,\n\t0xd99264421147eb03, 0x535a2d6d38aefcfe,\n\t0x6ba8b4454a916237, 0xfa39366eaae4719c,\n\t0x10f00fd7bbb24b6f, 0x5bd23185c76c84d4,\n\t0xb22c3d7e1b00d33f, 0x3efc20aa6bc830a8,\n\t0xd61c2503fe639144, 0x30ce625441eb92d3,\n\t0xe5d34cf359e93100, 0xa8e5aa13f2b9f7a5,\n\t0x5c2b8d851ca254a6, 0x68fb6c5e8b0d5fdf,\n\t0xc7ea4872c96b83ae, 0x6dd5d376f4392382,\n\t0x1be88681aaa9792f, 0xfef465ee1b6c10d9,\n\t0x1f98b65ed43fcb2e, 0x4d1ca11eb6e9a9c9,\n\t0x7808e902b3857d0b, 0x171c9c4ea4607972,\n\t0x58d66274850146df, 0x42b311c10d3981d1,\n\t0x647fa8c621c41a4c, 0xf472771c66ddfedc,\n\t0x338d27e3f847b46b, 0x6402ce3da97545ce,\n\t0x5162db616fc38638, 0x9c83be97bc22a50e,\n\t0x2d3d7478a78d5e72, 0xe621a9b938fd5397,\n\t0x9454614eb0f81c45, 0x395fb6e742ed39b6,\n\t0x77dd9179d06037bf, 0xc478d0fee4d2656d,\n\t0x35d9d6cb772007af, 0x83a56e92c883f0f6,\n\t0x27937453250c00a1, 0x27bd6ebc3a46a97d,\n\t0x9f543bf784342d51, 0xd158f38c48b0ed52,\n\t0x8dd8537c045f66b4, 0x846a57230226f6d5,\n\t0x6b13939e0c4e7cdf, 0xfca25425d8176758,\n\t0x92e5fc6cd52788e6, 0x9992e13d7a739170,\n\t0x518246f7a199e8ea, 0xf104c2a71b9979c7,\n\t0x86b3ffaabea4768f, 0x6388061cf3e351ad,\n\t0x09d9b5295de5bbb5, 0x38bf1638c2599e92,\n\t0x1d759846499e148d, 0x4c0ff015e5f96ef4,\n\t0xa41a94cfa270f565, 0x42d76f9cb2326c0b,\n\t0x0cf385dd3c9c23ba, 0x0508a6c7508d6e7a,\n\t0x337523aabbe6cf8d, 0x646bb14001d42b12,\n\t0xc178729d138adc74, 0xf900ef4491f24086,\n\t0xee1a90d334bb5ac4, 0x9755c92247301a50,\n\t0xb999bf7c4ff1b610, 0x6aeeb2f3b21e8fc9,\n\t0x0fa8084cf91ac6ff, 0x10d226cf136e6189,\n\t0xd302057a07d4fb21, 0x5f03800e20a0fcc3,\n\t0x80118d4ae46bd210, 0x58ab61a522843733,\n\t0x51edd575c5432a4b, 0x94ee6ff67f9197f7,\n\t0x765669e0e5e8157b, 0xa5347830737132f0,\n\t0x3ba485a69f01510c, 0x0b247d7b957a01c3,\n\t0x1b3d63449fd807dc, 0x0fdc4721c30ad743,\n\t0x8b535ed3829b2b14, 0xee41d0cad65d232c,\n\t0xe6a99ed97a6a982f, 0x65ac6194c202003d,\n\t0x692accf3a70573eb, 0xcc3c02c3e200d5af,\n\t0x0d419e8b325914a3, 0x320f160f42c25e40,\n\t0x00710d647a51fe7a, 0x3c947692330aed60,\n\t0x9288aa280d355a7a, 0xa1806a9b791d1696,\n\t0x5d60e38496763da1, 0x6c69e22e613fd0f4,\n\t0x977fc2a5aadffb17, 0xfb7bd063fc5a94ba,\n\t0x460c17992cbaece1, 0xf7822c5444d3297f,\n\t0x344a9790c69b74aa, 0xb80a42e6cae09dce,\n\t0x1b1361eaf2b1e757, 0xd84c1e758e236f01,\n\t0x88e0b7be347627cc, 0x45246009b7a99490,\n\t0x8011c6dd3fe50472, 0xc341d682bffb99d7,\n\t0x2511be93808e2d15, 0xd5bc13d7fd739840,\n\t0x2a3cd030679ae1ec, 0x8ad9898a4b9ee157,\n\t0x3245fef0a8eaf521, 0x3d6d8dbbb427d2b0,\n\t0x1ed146d8968b3981, 0x0c6a28bf7d45f3fc,\n\t0x4a1fd3dbcee3c561, 0x4210ff6a476bf67e,\n\t0xa559cce0d9199aac, 0xde39d47ef3723380,\n\t0xe5b69d848ce42e35, 0xefa24296f8e79f52,\n\t0x70190b59db9a5afc, 0x26f166cdb211e7bf,\n\t0x4deaf2df3c6b8ef5, 0xf171dbdd670f1017,\n\t0xb9059b05e9420d90, 0x2f0da855c9388754,\n\t0x611d5e9ab77949cc, 0x2912038ac01163f4,\n\t0x0231df50402b2fba, 0x45660fc4f3245f58,\n\t0xb91cc97c7c8dac50, 0xb72d2aafe4953427,\n\t0xfa6463f87e813d6b, 0x4515f7ee95d5c6a2,\n\t0x1310e1c1a48d21c3, 0xad48a7810cdd8544,\n\t0x4d5bdfefd5c9e631, 0xa43ed43f1fdcb7de,\n\t0xe70cfc8fe1ee9626, 0xef4711b0d8dda442,\n\t0xb80dd9bd4dab6c93, 0xa23be08d31ba4d93,\n\t0x9b37db9d0335a39c, 0x494b6f870f5cfebc,\n\t0x6d1b3c1149dda943, 0x372c943a518c1093,\n\t0xad27af45e77c09c4, 0x3b6f92b646044604,\n\t0xac2917909f5fcf4f, 0x2069a60e977e5557,\n\t0x353a469e71014de5, 0x24be356281f55c15,\n\t0x2b6d710ba8e9adea, 0x404ad1751c749c29,\n\t0xed7311bf23d7f185, 0xba4f6976b4acc43e,\n\t0x32d7198d2bc39000, 0xee667019014d6e01,\n\t0x494ef3e128d14c83, 0x1f95a152baecd6be,\n\t0x201648dff1f483a5, 0x68c28550c8384af6,\n\t0x5fc834a6824a7f48, 0x7cd06cb7365eaf28,\n\t0xd82bbd95e9b30909, 0x234f0d1694c53f6d,\n\t0xd2fb7f4a96d83f4a, 0xff0d5da83acac05e,\n\t0xf8f6b97f5585080a, 0x74236084be57b95b,\n\t0xa25e40c03bbc36ad, 0x6b6e5c14ce88465b,\n\t0x4378ffe93e1528c5, 0x94ca92a17118e2d2,\n}\n"
  },
  {
    "path": "vendor/github.com/ulikunitz/xz/internal/hash/doc.go",
    "content": "// Copyright 2014-2017 Ulrich Kunitz. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n/*\nPackage hash provides rolling hashes.\n\nRolling hashes have to be used for maintaining the positions of n-byte\nsequences in the dictionary buffer.\n\nThe package provides currently the Rabin-Karp rolling hash and a Cyclic\nPolynomial hash. Both support the Hashes method to be used with an interface.\n*/\npackage hash\n"
  },
  {
    "path": "vendor/github.com/ulikunitz/xz/internal/hash/rabin_karp.go",
    "content": "// Copyright 2014-2017 Ulrich Kunitz. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage hash\n\n// A is the default constant for Robin-Karp rolling hash. This is a random\n// prime.\nconst A = 0x97b548add41d5da1\n\n// RabinKarp supports the computation of a rolling hash.\ntype RabinKarp struct {\n\tA uint64\n\t// a^n\n\taOldest uint64\n\th       uint64\n\tp       []byte\n\ti       int\n}\n\n// NewRabinKarp creates a new RabinKarp value. The argument n defines the\n// length of the byte sequence to be hashed. The default constant will will be\n// used.\nfunc NewRabinKarp(n int) *RabinKarp {\n\treturn NewRabinKarpConst(n, A)\n}\n\n// NewRabinKarpConst creates a new RabinKarp value. The argument n defines the\n// length of the byte sequence to be hashed. The argument a provides the\n// constant used to compute the hash.\nfunc NewRabinKarpConst(n int, a uint64) *RabinKarp {\n\tif n <= 0 {\n\t\tpanic(\"number of bytes n must be positive\")\n\t}\n\taOldest := uint64(1)\n\t// There are faster methods. For the small n required by the LZMA\n\t// compressor O(n) is sufficient.\n\tfor i := 0; i < n; i++ {\n\t\taOldest *= a\n\t}\n\treturn &RabinKarp{\n\t\tA: a, aOldest: aOldest,\n\t\tp: make([]byte, 0, n),\n\t}\n}\n\n// Len returns the length of the byte sequence.\nfunc (r *RabinKarp) Len() int {\n\treturn cap(r.p)\n}\n\n// RollByte computes the hash after x has been added.\nfunc (r *RabinKarp) RollByte(x byte) uint64 {\n\tif len(r.p) < cap(r.p) {\n\t\tr.h += uint64(x)\n\t\tr.h *= r.A\n\t\tr.p = append(r.p, x)\n\t} else {\n\t\tr.h -= uint64(r.p[r.i]) * r.aOldest\n\t\tr.h += uint64(x)\n\t\tr.h *= r.A\n\t\tr.p[r.i] = x\n\t\tr.i = (r.i + 1) % cap(r.p)\n\t}\n\treturn r.h\n}\n"
  },
  {
    "path": "vendor/github.com/ulikunitz/xz/internal/hash/roller.go",
    "content": "// Copyright 2014-2017 Ulrich Kunitz. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage hash\n\n// Roller provides an interface for rolling hashes. The hash value will become\n// valid after hash has been called Len times.\ntype Roller interface {\n\tLen() int\n\tRollByte(x byte) uint64\n}\n\n// Hashes computes all hash values for the array p. Note that the state of the\n// roller is changed.\nfunc Hashes(r Roller, p []byte) []uint64 {\n\tn := r.Len()\n\tif len(p) < n {\n\t\treturn nil\n\t}\n\th := make([]uint64, len(p)-n+1)\n\tfor i := 0; i < n-1; i++ {\n\t\tr.RollByte(p[i])\n\t}\n\tfor i := range h {\n\t\th[i] = r.RollByte(p[i+n-1])\n\t}\n\treturn h\n}\n"
  },
  {
    "path": "vendor/github.com/ulikunitz/xz/internal/xlog/xlog.go",
    "content": "// Copyright 2014-2017 Ulrich Kunitz. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package xlog provides a simple logging package that allows to disable\n// certain message categories. It defines a type, Logger, with multiple\n// methods for formatting output. The package has also a predefined\n// 'standard' Logger accessible through helper function Print[f|ln],\n// Fatal[f|ln], Panic[f|ln], Warn[f|ln], Print[f|ln] and Debug[f|ln]\n// that are easier to use then creating a Logger manually. That logger\n// writes to standard error and prints the date and time of each logged\n// message, which can be configured using the function SetFlags.\n//\n// The Fatal functions call os.Exit(1) after the message is output\n// unless not suppressed by the flags. The Panic functions call panic\n// after the writing the log message unless suppressed.\npackage xlog\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"runtime\"\n\t\"sync\"\n\t\"time\"\n)\n\n// The flags define what information is prefixed to each log entry\n// generated by the Logger. The Lno* versions allow the suppression of\n// specific output. The bits are or'ed together to control what will be\n// printed. There is no control over the order of the items printed and\n// the format. The full format is:\n//\n//   2009-01-23 01:23:23.123123 /a/b/c/d.go:23: message\n//\nconst (\n\tLdate         = 1 << iota // the date: 2009-01-23\n\tLtime                     // the time: 01:23:23\n\tLmicroseconds             // microsecond resolution: 01:23:23.123123\n\tLlongfile                 // full file name and line number: /a/b/c/d.go:23\n\tLshortfile                // final file name element and line number: d.go:23\n\tLnopanic                  // suppresses output from Panic[f|ln] but not the panic call\n\tLnofatal                  // suppresses output from Fatal[f|ln] but not the exit\n\tLnowarn                   // suppresses output from Warn[f|ln]\n\tLnoprint                  // suppresses output from Print[f|ln]\n\tLnodebug                  // suppresses output from Debug[f|ln]\n\t// initial values for the standard logger\n\tLstdflags = Ldate | Ltime | Lnodebug\n)\n\n// A Logger represents an active logging object that generates lines of\n// output to an io.Writer. Each logging operation if not suppressed\n// makes a single call to the Writer's Write method. A Logger can be\n// used simultaneously from multiple goroutines; it guarantees to\n// serialize access to the Writer.\ntype Logger struct {\n\tmu sync.Mutex // ensures atomic writes; and protects the following\n\t// fields\n\tprefix string    // prefix to write at beginning of each line\n\tflag   int       // properties\n\tout    io.Writer // destination for output\n\tbuf    []byte    // for accumulating text to write\n}\n\n// New creates a new Logger. The out argument sets the destination to\n// which the log output will be written. The prefix appears at the\n// beginning of each log line. The flag argument defines the logging\n// properties.\nfunc New(out io.Writer, prefix string, flag int) *Logger {\n\treturn &Logger{out: out, prefix: prefix, flag: flag}\n}\n\n// std is the standard logger used by the package scope functions.\nvar std = New(os.Stderr, \"\", Lstdflags)\n\n// itoa converts the integer to ASCII. A negative widths will avoid\n// zero-padding. The function supports only non-negative integers.\nfunc itoa(buf *[]byte, i int, wid int) {\n\tvar u = uint(i)\n\tif u == 0 && wid <= 1 {\n\t\t*buf = append(*buf, '0')\n\t\treturn\n\t}\n\tvar b [32]byte\n\tbp := len(b)\n\tfor ; u > 0 || wid > 0; u /= 10 {\n\t\tbp--\n\t\twid--\n\t\tb[bp] = byte(u%10) + '0'\n\t}\n\t*buf = append(*buf, b[bp:]...)\n}\n\n// formatHeader puts the header into the buf field of the buffer.\nfunc (l *Logger) formatHeader(t time.Time, file string, line int) {\n\tl.buf = append(l.buf, l.prefix...)\n\tif l.flag&(Ldate|Ltime|Lmicroseconds) != 0 {\n\t\tif l.flag&Ldate != 0 {\n\t\t\tyear, month, day := t.Date()\n\t\t\titoa(&l.buf, year, 4)\n\t\t\tl.buf = append(l.buf, '-')\n\t\t\titoa(&l.buf, int(month), 2)\n\t\t\tl.buf = append(l.buf, '-')\n\t\t\titoa(&l.buf, day, 2)\n\t\t\tl.buf = append(l.buf, ' ')\n\t\t}\n\t\tif l.flag&(Ltime|Lmicroseconds) != 0 {\n\t\t\thour, min, sec := t.Clock()\n\t\t\titoa(&l.buf, hour, 2)\n\t\t\tl.buf = append(l.buf, ':')\n\t\t\titoa(&l.buf, min, 2)\n\t\t\tl.buf = append(l.buf, ':')\n\t\t\titoa(&l.buf, sec, 2)\n\t\t\tif l.flag&Lmicroseconds != 0 {\n\t\t\t\tl.buf = append(l.buf, '.')\n\t\t\t\titoa(&l.buf, t.Nanosecond()/1e3, 6)\n\t\t\t}\n\t\t\tl.buf = append(l.buf, ' ')\n\t\t}\n\t}\n\tif l.flag&(Lshortfile|Llongfile) != 0 {\n\t\tif l.flag&Lshortfile != 0 {\n\t\t\tshort := file\n\t\t\tfor i := len(file) - 1; i > 0; i-- {\n\t\t\t\tif file[i] == '/' {\n\t\t\t\t\tshort = file[i+1:]\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tfile = short\n\t\t}\n\t\tl.buf = append(l.buf, file...)\n\t\tl.buf = append(l.buf, ':')\n\t\titoa(&l.buf, line, -1)\n\t\tl.buf = append(l.buf, \": \"...)\n\t}\n}\n\nfunc (l *Logger) output(calldepth int, now time.Time, s string) error {\n\tvar file string\n\tvar line int\n\tif l.flag&(Lshortfile|Llongfile) != 0 {\n\t\tl.mu.Unlock()\n\t\tvar ok bool\n\t\t_, file, line, ok = runtime.Caller(calldepth)\n\t\tif !ok {\n\t\t\tfile = \"???\"\n\t\t\tline = 0\n\t\t}\n\t\tl.mu.Lock()\n\t}\n\tl.buf = l.buf[:0]\n\tl.formatHeader(now, file, line)\n\tl.buf = append(l.buf, s...)\n\tif len(s) == 0 || s[len(s)-1] != '\\n' {\n\t\tl.buf = append(l.buf, '\\n')\n\t}\n\t_, err := l.out.Write(l.buf)\n\treturn err\n}\n\n// Output writes the string s with the header controlled by the flags to\n// the l.out writer. A newline will be appended if s doesn't end in a\n// newline. Calldepth is used to recover the PC, although all current\n// calls of Output use the call depth 2. Access to the function is serialized.\nfunc (l *Logger) Output(calldepth, noflag int, v ...interface{}) error {\n\tnow := time.Now()\n\tl.mu.Lock()\n\tdefer l.mu.Unlock()\n\tif l.flag&noflag != 0 {\n\t\treturn nil\n\t}\n\ts := fmt.Sprint(v...)\n\treturn l.output(calldepth+1, now, s)\n}\n\n// Outputf works like output but formats the output like Printf.\nfunc (l *Logger) Outputf(calldepth int, noflag int, format string, v ...interface{}) error {\n\tnow := time.Now()\n\tl.mu.Lock()\n\tdefer l.mu.Unlock()\n\tif l.flag&noflag != 0 {\n\t\treturn nil\n\t}\n\ts := fmt.Sprintf(format, v...)\n\treturn l.output(calldepth+1, now, s)\n}\n\n// Outputln works like output but formats the output like Println.\nfunc (l *Logger) Outputln(calldepth int, noflag int, v ...interface{}) error {\n\tnow := time.Now()\n\tl.mu.Lock()\n\tdefer l.mu.Unlock()\n\tif l.flag&noflag != 0 {\n\t\treturn nil\n\t}\n\ts := fmt.Sprintln(v...)\n\treturn l.output(calldepth+1, now, s)\n}\n\n// Panic prints the message like Print and calls panic. The printing\n// might be suppressed by the flag Lnopanic.\nfunc (l *Logger) Panic(v ...interface{}) {\n\tl.Output(2, Lnopanic, v...)\n\ts := fmt.Sprint(v...)\n\tpanic(s)\n}\n\n// Panic prints the message like Print and calls panic. The printing\n// might be suppressed by the flag Lnopanic.\nfunc Panic(v ...interface{}) {\n\tstd.Output(2, Lnopanic, v...)\n\ts := fmt.Sprint(v...)\n\tpanic(s)\n}\n\n// Panicf prints the message like Printf and calls panic. The printing\n// might be suppressed by the flag Lnopanic.\nfunc (l *Logger) Panicf(format string, v ...interface{}) {\n\tl.Outputf(2, Lnopanic, format, v...)\n\ts := fmt.Sprintf(format, v...)\n\tpanic(s)\n}\n\n// Panicf prints the message like Printf and calls panic. The printing\n// might be suppressed by the flag Lnopanic.\nfunc Panicf(format string, v ...interface{}) {\n\tstd.Outputf(2, Lnopanic, format, v...)\n\ts := fmt.Sprintf(format, v...)\n\tpanic(s)\n}\n\n// Panicln prints the message like Println and calls panic. The printing\n// might be suppressed by the flag Lnopanic.\nfunc (l *Logger) Panicln(v ...interface{}) {\n\tl.Outputln(2, Lnopanic, v...)\n\ts := fmt.Sprintln(v...)\n\tpanic(s)\n}\n\n// Panicln prints the message like Println and calls panic. The printing\n// might be suppressed by the flag Lnopanic.\nfunc Panicln(v ...interface{}) {\n\tstd.Outputln(2, Lnopanic, v...)\n\ts := fmt.Sprintln(v...)\n\tpanic(s)\n}\n\n// Fatal prints the message like Print and calls os.Exit(1). The\n// printing might be suppressed by the flag Lnofatal.\nfunc (l *Logger) Fatal(v ...interface{}) {\n\tl.Output(2, Lnofatal, v...)\n\tos.Exit(1)\n}\n\n// Fatal prints the message like Print and calls os.Exit(1). The\n// printing might be suppressed by the flag Lnofatal.\nfunc Fatal(v ...interface{}) {\n\tstd.Output(2, Lnofatal, v...)\n\tos.Exit(1)\n}\n\n// Fatalf prints the message like Printf and calls os.Exit(1). The\n// printing might be suppressed by the flag Lnofatal.\nfunc (l *Logger) Fatalf(format string, v ...interface{}) {\n\tl.Outputf(2, Lnofatal, format, v...)\n\tos.Exit(1)\n}\n\n// Fatalf prints the message like Printf and calls os.Exit(1). The\n// printing might be suppressed by the flag Lnofatal.\nfunc Fatalf(format string, v ...interface{}) {\n\tstd.Outputf(2, Lnofatal, format, v...)\n\tos.Exit(1)\n}\n\n// Fatalln prints the message like Println and calls os.Exit(1). The\n// printing might be suppressed by the flag Lnofatal.\nfunc (l *Logger) Fatalln(format string, v ...interface{}) {\n\tl.Outputln(2, Lnofatal, v...)\n\tos.Exit(1)\n}\n\n// Fatalln prints the message like Println and calls os.Exit(1). The\n// printing might be suppressed by the flag Lnofatal.\nfunc Fatalln(format string, v ...interface{}) {\n\tstd.Outputln(2, Lnofatal, v...)\n\tos.Exit(1)\n}\n\n// Warn prints the message like Print. The printing might be suppressed\n// by the flag Lnowarn.\nfunc (l *Logger) Warn(v ...interface{}) {\n\tl.Output(2, Lnowarn, v...)\n}\n\n// Warn prints the message like Print. The printing might be suppressed\n// by the flag Lnowarn.\nfunc Warn(v ...interface{}) {\n\tstd.Output(2, Lnowarn, v...)\n}\n\n// Warnf prints the message like Printf. The printing might be suppressed\n// by the flag Lnowarn.\nfunc (l *Logger) Warnf(format string, v ...interface{}) {\n\tl.Outputf(2, Lnowarn, format, v...)\n}\n\n// Warnf prints the message like Printf. The printing might be suppressed\n// by the flag Lnowarn.\nfunc Warnf(format string, v ...interface{}) {\n\tstd.Outputf(2, Lnowarn, format, v...)\n}\n\n// Warnln prints the message like Println. The printing might be suppressed\n// by the flag Lnowarn.\nfunc (l *Logger) Warnln(v ...interface{}) {\n\tl.Outputln(2, Lnowarn, v...)\n}\n\n// Warnln prints the message like Println. The printing might be suppressed\n// by the flag Lnowarn.\nfunc Warnln(v ...interface{}) {\n\tstd.Outputln(2, Lnowarn, v...)\n}\n\n// Print prints the message like fmt.Print. The printing might be suppressed\n// by the flag Lnoprint.\nfunc (l *Logger) Print(v ...interface{}) {\n\tl.Output(2, Lnoprint, v...)\n}\n\n// Print prints the message like fmt.Print. The printing might be suppressed\n// by the flag Lnoprint.\nfunc Print(v ...interface{}) {\n\tstd.Output(2, Lnoprint, v...)\n}\n\n// Printf prints the message like fmt.Printf. The printing might be suppressed\n// by the flag Lnoprint.\nfunc (l *Logger) Printf(format string, v ...interface{}) {\n\tl.Outputf(2, Lnoprint, format, v...)\n}\n\n// Printf prints the message like fmt.Printf. The printing might be suppressed\n// by the flag Lnoprint.\nfunc Printf(format string, v ...interface{}) {\n\tstd.Outputf(2, Lnoprint, format, v...)\n}\n\n// Println prints the message like fmt.Println. The printing might be\n// suppressed by the flag Lnoprint.\nfunc (l *Logger) Println(v ...interface{}) {\n\tl.Outputln(2, Lnoprint, v...)\n}\n\n// Println prints the message like fmt.Println. The printing might be\n// suppressed by the flag Lnoprint.\nfunc Println(v ...interface{}) {\n\tstd.Outputln(2, Lnoprint, v...)\n}\n\n// Debug prints the message like Print. The printing might be suppressed\n// by the flag Lnodebug.\nfunc (l *Logger) Debug(v ...interface{}) {\n\tl.Output(2, Lnodebug, v...)\n}\n\n// Debug prints the message like Print. The printing might be suppressed\n// by the flag Lnodebug.\nfunc Debug(v ...interface{}) {\n\tstd.Output(2, Lnodebug, v...)\n}\n\n// Debugf prints the message like Printf. The printing might be suppressed\n// by the flag Lnodebug.\nfunc (l *Logger) Debugf(format string, v ...interface{}) {\n\tl.Outputf(2, Lnodebug, format, v...)\n}\n\n// Debugf prints the message like Printf. The printing might be suppressed\n// by the flag Lnodebug.\nfunc Debugf(format string, v ...interface{}) {\n\tstd.Outputf(2, Lnodebug, format, v...)\n}\n\n// Debugln prints the message like Println. The printing might be suppressed\n// by the flag Lnodebug.\nfunc (l *Logger) Debugln(v ...interface{}) {\n\tl.Outputln(2, Lnodebug, v...)\n}\n\n// Debugln prints the message like Println. The printing might be suppressed\n// by the flag Lnodebug.\nfunc Debugln(v ...interface{}) {\n\tstd.Outputln(2, Lnodebug, v...)\n}\n\n// Flags returns the current flags used by the logger.\nfunc (l *Logger) Flags() int {\n\tl.mu.Lock()\n\tdefer l.mu.Unlock()\n\treturn l.flag\n}\n\n// Flags returns the current flags used by the standard logger.\nfunc Flags() int {\n\treturn std.Flags()\n}\n\n// SetFlags sets the flags of the logger.\nfunc (l *Logger) SetFlags(flag int) {\n\tl.mu.Lock()\n\tdefer l.mu.Unlock()\n\tl.flag = flag\n}\n\n// SetFlags sets the flags for the standard logger.\nfunc SetFlags(flag int) {\n\tstd.SetFlags(flag)\n}\n\n// Prefix returns the prefix used by the logger.\nfunc (l *Logger) Prefix() string {\n\tl.mu.Lock()\n\tdefer l.mu.Unlock()\n\treturn l.prefix\n}\n\n// Prefix returns the prefix used by the standard logger of the package.\nfunc Prefix() string {\n\treturn std.Prefix()\n}\n\n// SetPrefix sets the prefix for the logger.\nfunc (l *Logger) SetPrefix(prefix string) {\n\tl.mu.Lock()\n\tdefer l.mu.Unlock()\n\tl.prefix = prefix\n}\n\n// SetPrefix sets the prefix of the standard logger of the package.\nfunc SetPrefix(prefix string) {\n\tstd.SetPrefix(prefix)\n}\n\n// SetOutput sets the output of the logger.\nfunc (l *Logger) SetOutput(w io.Writer) {\n\tl.mu.Lock()\n\tdefer l.mu.Unlock()\n\tl.out = w\n}\n\n// SetOutput sets the output for the standard logger of the package.\nfunc SetOutput(w io.Writer) {\n\tstd.SetOutput(w)\n}\n"
  },
  {
    "path": "vendor/github.com/ulikunitz/xz/lzma/bintree.go",
    "content": "// Copyright 2014-2017 Ulrich Kunitz. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage lzma\n\nimport (\n\t\"bufio\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"unicode\"\n)\n\n// node represents a node in the binary tree.\ntype node struct {\n\t// x is the search value\n\tx uint32\n\t// p parent node\n\tp uint32\n\t// l left child\n\tl uint32\n\t// r right child\n\tr uint32\n}\n\n// wordLen is the number of bytes represented by the v field of a node.\nconst wordLen = 4\n\n// binTree supports the identification of the next operation based on a\n// binary tree.\n//\n// Nodes will be identified by their index into the ring buffer.\ntype binTree struct {\n\tdict *encoderDict\n\t// ring buffer of nodes\n\tnode []node\n\t// absolute offset of the entry for the next node. Position 4\n\t// byte larger.\n\thoff int64\n\t// front position in the node ring buffer\n\tfront uint32\n\t// index of the root node\n\troot uint32\n\t// current x value\n\tx uint32\n\t// preallocated array\n\tdata []byte\n}\n\n// null represents the nonexistent index. We can't use zero because it\n// would always exist or we would need to decrease the index for each\n// reference.\nconst null uint32 = 1<<32 - 1\n\n// newBinTree initializes the binTree structure. The capacity defines\n// the size of the buffer and defines the maximum distance for which\n// matches will be found.\nfunc newBinTree(capacity int) (t *binTree, err error) {\n\tif capacity < 1 {\n\t\treturn nil, errors.New(\n\t\t\t\"newBinTree: capacity must be larger than zero\")\n\t}\n\tif int64(capacity) >= int64(null) {\n\t\treturn nil, errors.New(\n\t\t\t\"newBinTree: capacity must less 2^{32}-1\")\n\t}\n\tt = &binTree{\n\t\tnode: make([]node, capacity),\n\t\thoff: -int64(wordLen),\n\t\troot: null,\n\t\tdata: make([]byte, maxMatchLen),\n\t}\n\treturn t, nil\n}\n\nfunc (t *binTree) SetDict(d *encoderDict) { t.dict = d }\n\n// WriteByte writes a single byte into the binary tree.\nfunc (t *binTree) WriteByte(c byte) error {\n\tt.x = (t.x << 8) | uint32(c)\n\tt.hoff++\n\tif t.hoff < 0 {\n\t\treturn nil\n\t}\n\tv := t.front\n\tif int64(v) < t.hoff {\n\t\t// We are overwriting old nodes stored in the tree.\n\t\tt.remove(v)\n\t}\n\tt.node[v].x = t.x\n\tt.add(v)\n\tt.front++\n\tif int64(t.front) >= int64(len(t.node)) {\n\t\tt.front = 0\n\t}\n\treturn nil\n}\n\n// Writes writes a sequence of bytes into the binTree structure.\nfunc (t *binTree) Write(p []byte) (n int, err error) {\n\tfor _, c := range p {\n\t\tt.WriteByte(c)\n\t}\n\treturn len(p), nil\n}\n\n// add puts the node v into the tree. The node must not be part of the\n// tree before.\nfunc (t *binTree) add(v uint32) {\n\tvn := &t.node[v]\n\t// Set left and right to null indices.\n\tvn.l, vn.r = null, null\n\t// If the binary tree is empty make v the root.\n\tif t.root == null {\n\t\tt.root = v\n\t\tvn.p = null\n\t\treturn\n\t}\n\tx := vn.x\n\tp := t.root\n\t// Search for the right leave link and add the new node.\n\tfor {\n\t\tpn := &t.node[p]\n\t\tif x <= pn.x {\n\t\t\tif pn.l == null {\n\t\t\t\tpn.l = v\n\t\t\t\tvn.p = p\n\t\t\t\treturn\n\t\t\t}\n\t\t\tp = pn.l\n\t\t} else {\n\t\t\tif pn.r == null {\n\t\t\t\tpn.r = v\n\t\t\t\tvn.p = p\n\t\t\t\treturn\n\t\t\t}\n\t\t\tp = pn.r\n\t\t}\n\t}\n}\n\n// parent returns the parent node index of v and the pointer to v value\n// in the parent.\nfunc (t *binTree) parent(v uint32) (p uint32, ptr *uint32) {\n\tif t.root == v {\n\t\treturn null, &t.root\n\t}\n\tp = t.node[v].p\n\tif t.node[p].l == v {\n\t\tptr = &t.node[p].l\n\t} else {\n\t\tptr = &t.node[p].r\n\t}\n\treturn\n}\n\n// Remove node v.\nfunc (t *binTree) remove(v uint32) {\n\tvn := &t.node[v]\n\tp, ptr := t.parent(v)\n\tl, r := vn.l, vn.r\n\tif l == null {\n\t\t// Move the right child up.\n\t\t*ptr = r\n\t\tif r != null {\n\t\t\tt.node[r].p = p\n\t\t}\n\t\treturn\n\t}\n\tif r == null {\n\t\t// Move the left child up.\n\t\t*ptr = l\n\t\tt.node[l].p = p\n\t\treturn\n\t}\n\n\t// Search the in-order predecessor u.\n\tun := &t.node[l]\n\tur := un.r\n\tif ur == null {\n\t\t// In order predecessor is l. Move it up.\n\t\tun.r = r\n\t\tt.node[r].p = l\n\t\tun.p = p\n\t\t*ptr = l\n\t\treturn\n\t}\n\tvar u uint32\n\tfor {\n\t\t// Look for the max value in the tree where l is root.\n\t\tu = ur\n\t\tur = t.node[u].r\n\t\tif ur == null {\n\t\t\tbreak\n\t\t}\n\t}\n\t// replace u with ul\n\tun = &t.node[u]\n\tul := un.l\n\tup := un.p\n\tt.node[up].r = ul\n\tif ul != null {\n\t\tt.node[ul].p = up\n\t}\n\n\t// replace v by u\n\tun.l, un.r = l, r\n\tt.node[l].p = u\n\tt.node[r].p = u\n\t*ptr = u\n\tun.p = p\n}\n\n// search looks for the node that have the value x or for the nodes that\n// brace it. The node highest in the tree with the value x will be\n// returned. All other nodes with the same value live in left subtree of\n// the returned node.\nfunc (t *binTree) search(v uint32, x uint32) (a, b uint32) {\n\ta, b = null, null\n\tif v == null {\n\t\treturn\n\t}\n\tfor {\n\t\tvn := &t.node[v]\n\t\tif x <= vn.x {\n\t\t\tif x == vn.x {\n\t\t\t\treturn v, v\n\t\t\t}\n\t\t\tb = v\n\t\t\tif vn.l == null {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tv = vn.l\n\t\t} else {\n\t\t\ta = v\n\t\t\tif vn.r == null {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tv = vn.r\n\t\t}\n\t}\n}\n\n// max returns the node with maximum value in the subtree with v as\n// root.\nfunc (t *binTree) max(v uint32) uint32 {\n\tif v == null {\n\t\treturn null\n\t}\n\tfor {\n\t\tr := t.node[v].r\n\t\tif r == null {\n\t\t\treturn v\n\t\t}\n\t\tv = r\n\t}\n}\n\n// min returns the node with the minimum value in the subtree with v as\n// root.\nfunc (t *binTree) min(v uint32) uint32 {\n\tif v == null {\n\t\treturn null\n\t}\n\tfor {\n\t\tl := t.node[v].l\n\t\tif l == null {\n\t\t\treturn v\n\t\t}\n\t\tv = l\n\t}\n}\n\n// pred returns the in-order predecessor of node v.\nfunc (t *binTree) pred(v uint32) uint32 {\n\tif v == null {\n\t\treturn null\n\t}\n\tu := t.max(t.node[v].l)\n\tif u != null {\n\t\treturn u\n\t}\n\tfor {\n\t\tp := t.node[v].p\n\t\tif p == null {\n\t\t\treturn null\n\t\t}\n\t\tif t.node[p].r == v {\n\t\t\treturn p\n\t\t}\n\t\tv = p\n\t}\n}\n\n// succ returns the in-order successor of node v.\nfunc (t *binTree) succ(v uint32) uint32 {\n\tif v == null {\n\t\treturn null\n\t}\n\tu := t.min(t.node[v].r)\n\tif u != null {\n\t\treturn u\n\t}\n\tfor {\n\t\tp := t.node[v].p\n\t\tif p == null {\n\t\t\treturn null\n\t\t}\n\t\tif t.node[p].l == v {\n\t\t\treturn p\n\t\t}\n\t\tv = p\n\t}\n}\n\n// xval converts the first four bytes of a into an 32-bit unsigned\n// integer in big-endian order.\nfunc xval(a []byte) uint32 {\n\tvar x uint32\n\tswitch len(a) {\n\tdefault:\n\t\tx |= uint32(a[3])\n\t\tfallthrough\n\tcase 3:\n\t\tx |= uint32(a[2]) << 8\n\t\tfallthrough\n\tcase 2:\n\t\tx |= uint32(a[1]) << 16\n\t\tfallthrough\n\tcase 1:\n\t\tx |= uint32(a[0]) << 24\n\tcase 0:\n\t}\n\treturn x\n}\n\n// dumpX converts value x into a four-letter string.\nfunc dumpX(x uint32) string {\n\ta := make([]byte, 4)\n\tfor i := 0; i < 4; i++ {\n\t\tc := byte(x >> uint((3-i)*8))\n\t\tif unicode.IsGraphic(rune(c)) {\n\t\t\ta[i] = c\n\t\t} else {\n\t\t\ta[i] = '.'\n\t\t}\n\t}\n\treturn string(a)\n}\n\n// dumpNode writes a representation of the node v into the io.Writer.\nfunc (t *binTree) dumpNode(w io.Writer, v uint32, indent int) {\n\tif v == null {\n\t\treturn\n\t}\n\n\tvn := &t.node[v]\n\n\tt.dumpNode(w, vn.r, indent+2)\n\n\tfor i := 0; i < indent; i++ {\n\t\tfmt.Fprint(w, \" \")\n\t}\n\tif vn.p == null {\n\t\tfmt.Fprintf(w, \"node %d %q parent null\\n\", v, dumpX(vn.x))\n\t} else {\n\t\tfmt.Fprintf(w, \"node %d %q parent %d\\n\", v, dumpX(vn.x), vn.p)\n\t}\n\n\tt.dumpNode(w, vn.l, indent+2)\n}\n\n// dump prints a representation of the binary tree into the writer.\nfunc (t *binTree) dump(w io.Writer) error {\n\tbw := bufio.NewWriter(w)\n\tt.dumpNode(bw, t.root, 0)\n\treturn bw.Flush()\n}\n\nfunc (t *binTree) distance(v uint32) int {\n\tdist := int(t.front) - int(v)\n\tif dist <= 0 {\n\t\tdist += len(t.node)\n\t}\n\treturn dist\n}\n\ntype matchParams struct {\n\trep [4]uint32\n\t// length when match will be accepted\n\tnAccept int\n\t// nodes to check\n\tcheck int\n\t// finish if length get shorter\n\tstopShorter bool\n}\n\nfunc (t *binTree) match(m match, distIter func() (int, bool), p matchParams,\n) (r match, checked int, accepted bool) {\n\tbuf := &t.dict.buf\n\tfor {\n\t\tif checked >= p.check {\n\t\t\treturn m, checked, true\n\t\t}\n\t\tdist, ok := distIter()\n\t\tif !ok {\n\t\t\treturn m, checked, false\n\t\t}\n\t\tchecked++\n\t\tif m.n > 0 {\n\t\t\ti := buf.rear - dist + m.n - 1\n\t\t\tif i < 0 {\n\t\t\t\ti += len(buf.data)\n\t\t\t} else if i >= len(buf.data) {\n\t\t\t\ti -= len(buf.data)\n\t\t\t}\n\t\t\tif buf.data[i] != t.data[m.n-1] {\n\t\t\t\tif p.stopShorter {\n\t\t\t\t\treturn m, checked, false\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\t\tn := buf.matchLen(dist, t.data)\n\t\tswitch n {\n\t\tcase 0:\n\t\t\tif p.stopShorter {\n\t\t\t\treturn m, checked, false\n\t\t\t}\n\t\t\tcontinue\n\t\tcase 1:\n\t\t\tif uint32(dist-minDistance) != p.rep[0] {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\t\tif n < m.n || (n == m.n && int64(dist) >= m.distance) {\n\t\t\tcontinue\n\t\t}\n\t\tm = match{int64(dist), n}\n\t\tif n >= p.nAccept {\n\t\t\treturn m, checked, true\n\t\t}\n\t}\n}\n\nfunc (t *binTree) NextOp(rep [4]uint32) operation {\n\t// retrieve maxMatchLen data\n\tn, _ := t.dict.buf.Peek(t.data[:maxMatchLen])\n\tif n == 0 {\n\t\tpanic(\"no data in buffer\")\n\t}\n\tt.data = t.data[:n]\n\n\tvar (\n\t\tm                  match\n\t\tx, u, v            uint32\n\t\titerPred, iterSucc func() (int, bool)\n\t)\n\tp := matchParams{\n\t\trep:     rep,\n\t\tnAccept: maxMatchLen,\n\t\tcheck:   32,\n\t}\n\ti := 4\n\titerSmall := func() (dist int, ok bool) {\n\t\ti--\n\t\tif i <= 0 {\n\t\t\treturn 0, false\n\t\t}\n\t\treturn i, true\n\t}\n\tm, checked, accepted := t.match(m, iterSmall, p)\n\tif accepted {\n\t\tgoto end\n\t}\n\tp.check -= checked\n\tx = xval(t.data)\n\tu, v = t.search(t.root, x)\n\tif u == v && len(t.data) == 4 {\n\t\titer := func() (dist int, ok bool) {\n\t\t\tif u == null {\n\t\t\t\treturn 0, false\n\t\t\t}\n\t\t\tdist = t.distance(u)\n\t\t\tu, v = t.search(t.node[u].l, x)\n\t\t\tif u != v {\n\t\t\t\tu = null\n\t\t\t}\n\t\t\treturn dist, true\n\t\t}\n\t\tm, _, _ = t.match(m, iter, p)\n\t\tgoto end\n\t}\n\tp.stopShorter = true\n\titerSucc = func() (dist int, ok bool) {\n\t\tif v == null {\n\t\t\treturn 0, false\n\t\t}\n\t\tdist = t.distance(v)\n\t\tv = t.succ(v)\n\t\treturn dist, true\n\t}\n\tm, checked, accepted = t.match(m, iterSucc, p)\n\tif accepted {\n\t\tgoto end\n\t}\n\tp.check -= checked\n\titerPred = func() (dist int, ok bool) {\n\t\tif u == null {\n\t\t\treturn 0, false\n\t\t}\n\t\tdist = t.distance(u)\n\t\tu = t.pred(u)\n\t\treturn dist, true\n\t}\n\tm, _, _ = t.match(m, iterPred, p)\nend:\n\tif m.n == 0 {\n\t\treturn lit{t.data[0]}\n\t}\n\treturn m\n}\n"
  },
  {
    "path": "vendor/github.com/ulikunitz/xz/lzma/bitops.go",
    "content": "// Copyright 2014-2017 Ulrich Kunitz. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage lzma\n\n/* Naming conventions follows the CodeReviewComments in the Go Wiki. */\n\n// ntz32Const is used by the functions NTZ and NLZ.\nconst ntz32Const = 0x04d7651f\n\n// ntz32Table is a helper table for de Bruijn algorithm by Danny Dubé.\n// See Henry S. Warren, Jr. \"Hacker's Delight\" section 5-1 figure 5-26.\nvar ntz32Table = [32]int8{\n\t0, 1, 2, 24, 3, 19, 6, 25,\n\t22, 4, 20, 10, 16, 7, 12, 26,\n\t31, 23, 18, 5, 21, 9, 15, 11,\n\t30, 17, 8, 14, 29, 13, 28, 27,\n}\n\n// ntz32 computes the number of trailing zeros for an unsigned 32-bit integer.\nfunc ntz32(x uint32) int {\n\tif x == 0 {\n\t\treturn 32\n\t}\n\tx = (x & -x) * ntz32Const\n\treturn int(ntz32Table[x>>27])\n}\n\n// nlz32 computes the number of leading zeros for an unsigned 32-bit integer.\nfunc nlz32(x uint32) int {\n\t// Smear left most bit to the right\n\tx |= x >> 1\n\tx |= x >> 2\n\tx |= x >> 4\n\tx |= x >> 8\n\tx |= x >> 16\n\t// Use ntz mechanism to calculate nlz.\n\tx++\n\tif x == 0 {\n\t\treturn 0\n\t}\n\tx *= ntz32Const\n\treturn 32 - int(ntz32Table[x>>27])\n}\n"
  },
  {
    "path": "vendor/github.com/ulikunitz/xz/lzma/breader.go",
    "content": "// Copyright 2014-2017 Ulrich Kunitz. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage lzma\n\nimport (\n\t\"errors\"\n\t\"io\"\n)\n\n// breader provides the ReadByte function for a Reader. It doesn't read\n// more data from the reader than absolutely necessary.\ntype breader struct {\n\tio.Reader\n\t// helper slice to save allocations\n\tp []byte\n}\n\n// ByteReader converts an io.Reader into an io.ByteReader.\nfunc ByteReader(r io.Reader) io.ByteReader {\n\tbr, ok := r.(io.ByteReader)\n\tif !ok {\n\t\treturn &breader{r, make([]byte, 1)}\n\t}\n\treturn br\n}\n\n// ReadByte read byte function.\nfunc (r *breader) ReadByte() (c byte, err error) {\n\tn, err := r.Reader.Read(r.p)\n\tif n < 1 {\n\t\tif err == nil {\n\t\t\terr = errors.New(\"breader.ReadByte: no data\")\n\t\t}\n\t\treturn 0, err\n\t}\n\treturn r.p[0], nil\n}\n"
  },
  {
    "path": "vendor/github.com/ulikunitz/xz/lzma/buffer.go",
    "content": "// Copyright 2014-2017 Ulrich Kunitz. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage lzma\n\nimport (\n\t\"errors\"\n)\n\n// buffer provides a circular buffer of bytes. If the front index equals\n// the rear index the buffer is empty. As a consequence front cannot be\n// equal rear for a full buffer. So a full buffer has a length that is\n// one byte less the the length of the data slice.\ntype buffer struct {\n\tdata  []byte\n\tfront int\n\trear  int\n}\n\n// newBuffer creates a buffer with the given size.\nfunc newBuffer(size int) *buffer {\n\treturn &buffer{data: make([]byte, size+1)}\n}\n\n// Cap returns the capacity of the buffer.\nfunc (b *buffer) Cap() int {\n\treturn len(b.data) - 1\n}\n\n// Resets the buffer. The front and rear index are set to zero.\nfunc (b *buffer) Reset() {\n\tb.front = 0\n\tb.rear = 0\n}\n\n// Buffered returns the number of bytes buffered.\nfunc (b *buffer) Buffered() int {\n\tdelta := b.front - b.rear\n\tif delta < 0 {\n\t\tdelta += len(b.data)\n\t}\n\treturn delta\n}\n\n// Available returns the number of bytes available for writing.\nfunc (b *buffer) Available() int {\n\tdelta := b.rear - 1 - b.front\n\tif delta < 0 {\n\t\tdelta += len(b.data)\n\t}\n\treturn delta\n}\n\n// addIndex adds a non-negative integer to the index i and returns the\n// resulting index. The function takes care of wrapping the index as\n// well as potential overflow situations.\nfunc (b *buffer) addIndex(i int, n int) int {\n\t// subtraction of len(b.data) prevents overflow\n\ti += n - len(b.data)\n\tif i < 0 {\n\t\ti += len(b.data)\n\t}\n\treturn i\n}\n\n// Read reads bytes from the buffer into p and returns the number of\n// bytes read. The function never returns an error but might return less\n// data than requested.\nfunc (b *buffer) Read(p []byte) (n int, err error) {\n\tn, err = b.Peek(p)\n\tb.rear = b.addIndex(b.rear, n)\n\treturn n, err\n}\n\n// Peek reads bytes from the buffer into p without changing the buffer.\n// Peek will never return an error but might return less data than\n// requested.\nfunc (b *buffer) Peek(p []byte) (n int, err error) {\n\tm := b.Buffered()\n\tn = len(p)\n\tif m < n {\n\t\tn = m\n\t\tp = p[:n]\n\t}\n\tk := copy(p, b.data[b.rear:])\n\tif k < n {\n\t\tcopy(p[k:], b.data)\n\t}\n\treturn n, nil\n}\n\n// Discard skips the n next bytes to read from the buffer, returning the\n// bytes discarded.\n//\n// If Discards skips fewer than n bytes, it returns an error.\nfunc (b *buffer) Discard(n int) (discarded int, err error) {\n\tif n < 0 {\n\t\treturn 0, errors.New(\"buffer.Discard: negative argument\")\n\t}\n\tm := b.Buffered()\n\tif m < n {\n\t\tn = m\n\t\terr = errors.New(\n\t\t\t\"buffer.Discard: discarded less bytes then requested\")\n\t}\n\tb.rear = b.addIndex(b.rear, n)\n\treturn n, err\n}\n\n// ErrNoSpace indicates that there is insufficient space for the Write\n// operation.\nvar ErrNoSpace = errors.New(\"insufficient space\")\n\n// Write puts data into the  buffer. If less bytes are written than\n// requested ErrNoSpace is returned.\nfunc (b *buffer) Write(p []byte) (n int, err error) {\n\tm := b.Available()\n\tn = len(p)\n\tif m < n {\n\t\tn = m\n\t\tp = p[:m]\n\t\terr = ErrNoSpace\n\t}\n\tk := copy(b.data[b.front:], p)\n\tif k < n {\n\t\tcopy(b.data, p[k:])\n\t}\n\tb.front = b.addIndex(b.front, n)\n\treturn n, err\n}\n\n// WriteByte writes a single byte into the buffer. The error ErrNoSpace\n// is returned if no single byte is available in the buffer for writing.\nfunc (b *buffer) WriteByte(c byte) error {\n\tif b.Available() < 1 {\n\t\treturn ErrNoSpace\n\t}\n\tb.data[b.front] = c\n\tb.front = b.addIndex(b.front, 1)\n\treturn nil\n}\n\n// prefixLen returns the length of the common prefix of a and b.\nfunc prefixLen(a, b []byte) int {\n\tif len(a) > len(b) {\n\t\ta, b = b, a\n\t}\n\tfor i, c := range a {\n\t\tif b[i] != c {\n\t\t\treturn i\n\t\t}\n\t}\n\treturn len(a)\n}\n\n// matchLen returns the length of the common prefix for the given\n// distance from the rear and the byte slice p.\nfunc (b *buffer) matchLen(distance int, p []byte) int {\n\tvar n int\n\ti := b.rear - distance\n\tif i < 0 {\n\t\tif n = prefixLen(p, b.data[len(b.data)+i:]); n < -i {\n\t\t\treturn n\n\t\t}\n\t\tp = p[n:]\n\t\ti = 0\n\t}\n\tn += prefixLen(p, b.data[i:])\n\treturn n\n}\n"
  },
  {
    "path": "vendor/github.com/ulikunitz/xz/lzma/bytewriter.go",
    "content": "// Copyright 2014-2017 Ulrich Kunitz. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage lzma\n\nimport (\n\t\"errors\"\n\t\"io\"\n)\n\n// ErrLimit indicates that the limit of the LimitedByteWriter has been\n// reached.\nvar ErrLimit = errors.New(\"limit reached\")\n\n// LimitedByteWriter provides a byte writer that can be written until a\n// limit is reached. The field N provides the number of remaining\n// bytes.\ntype LimitedByteWriter struct {\n\tBW io.ByteWriter\n\tN  int64\n}\n\n// WriteByte writes a single byte to the limited byte writer. It returns\n// ErrLimit if the limit has been reached. If the byte is successfully\n// written the field N of the LimitedByteWriter will be decremented by\n// one.\nfunc (l *LimitedByteWriter) WriteByte(c byte) error {\n\tif l.N <= 0 {\n\t\treturn ErrLimit\n\t}\n\tif err := l.BW.WriteByte(c); err != nil {\n\t\treturn err\n\t}\n\tl.N--\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/ulikunitz/xz/lzma/decoder.go",
    "content": "// Copyright 2014-2017 Ulrich Kunitz. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage lzma\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n)\n\n// decoder decodes a raw LZMA stream without any header.\ntype decoder struct {\n\t// dictionary; the rear pointer of the buffer will be used for\n\t// reading the data.\n\tDict *decoderDict\n\t// decoder state\n\tState *state\n\t// range decoder\n\trd *rangeDecoder\n\t// start stores the head value of the dictionary for the LZMA\n\t// stream\n\tstart int64\n\t// size of uncompressed data\n\tsize int64\n\t// end-of-stream encountered\n\teos bool\n\t// EOS marker found\n\teosMarker bool\n}\n\n// newDecoder creates a new decoder instance. The parameter size provides\n// the expected byte size of the decompressed data. If the size is\n// unknown use a negative value. In that case the decoder will look for\n// a terminating end-of-stream marker.\nfunc newDecoder(br io.ByteReader, state *state, dict *decoderDict, size int64) (d *decoder, err error) {\n\trd, err := newRangeDecoder(br)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\td = &decoder{\n\t\tState: state,\n\t\tDict:  dict,\n\t\trd:    rd,\n\t\tsize:  size,\n\t\tstart: dict.pos(),\n\t}\n\treturn d, nil\n}\n\n// Reopen restarts the decoder with a new byte reader and a new size. Reopen\n// resets the Decompressed counter to zero.\nfunc (d *decoder) Reopen(br io.ByteReader, size int64) error {\n\tvar err error\n\tif d.rd, err = newRangeDecoder(br); err != nil {\n\t\treturn err\n\t}\n\td.start = d.Dict.pos()\n\td.size = size\n\td.eos = false\n\treturn nil\n}\n\n// decodeLiteral decodes a single literal from the LZMA stream.\nfunc (d *decoder) decodeLiteral() (op operation, err error) {\n\tlitState := d.State.litState(d.Dict.byteAt(1), d.Dict.head)\n\tmatch := d.Dict.byteAt(int(d.State.rep[0]) + 1)\n\ts, err := d.State.litCodec.Decode(d.rd, d.State.state, match, litState)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn lit{s}, nil\n}\n\n// errEOS indicates that an EOS marker has been found.\nvar errEOS = errors.New(\"EOS marker found\")\n\n// readOp decodes the next operation from the compressed stream. It\n// returns the operation. If an explicit end of stream marker is\n// identified the eos error is returned.\nfunc (d *decoder) readOp() (op operation, err error) {\n\t// Value of the end of stream (EOS) marker\n\tconst eosDist = 1<<32 - 1\n\n\tstate, state2, posState := d.State.states(d.Dict.head)\n\n\tb, err := d.State.isMatch[state2].Decode(d.rd)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif b == 0 {\n\t\t// literal\n\t\top, err := d.decodeLiteral()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\td.State.updateStateLiteral()\n\t\treturn op, nil\n\t}\n\tb, err = d.State.isRep[state].Decode(d.rd)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif b == 0 {\n\t\t// simple match\n\t\td.State.rep[3], d.State.rep[2], d.State.rep[1] =\n\t\t\td.State.rep[2], d.State.rep[1], d.State.rep[0]\n\n\t\td.State.updateStateMatch()\n\t\t// The length decoder returns the length offset.\n\t\tn, err := d.State.lenCodec.Decode(d.rd, posState)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\t// The dist decoder returns the distance offset. The actual\n\t\t// distance is 1 higher.\n\t\td.State.rep[0], err = d.State.distCodec.Decode(d.rd, n)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif d.State.rep[0] == eosDist {\n\t\t\td.eosMarker = true\n\t\t\treturn nil, errEOS\n\t\t}\n\t\top = match{n: int(n) + minMatchLen,\n\t\t\tdistance: int64(d.State.rep[0]) + minDistance}\n\t\treturn op, nil\n\t}\n\tb, err = d.State.isRepG0[state].Decode(d.rd)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdist := d.State.rep[0]\n\tif b == 0 {\n\t\t// rep match 0\n\t\tb, err = d.State.isRepG0Long[state2].Decode(d.rd)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif b == 0 {\n\t\t\td.State.updateStateShortRep()\n\t\t\top = match{n: 1, distance: int64(dist) + minDistance}\n\t\t\treturn op, nil\n\t\t}\n\t} else {\n\t\tb, err = d.State.isRepG1[state].Decode(d.rd)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif b == 0 {\n\t\t\tdist = d.State.rep[1]\n\t\t} else {\n\t\t\tb, err = d.State.isRepG2[state].Decode(d.rd)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tif b == 0 {\n\t\t\t\tdist = d.State.rep[2]\n\t\t\t} else {\n\t\t\t\tdist = d.State.rep[3]\n\t\t\t\td.State.rep[3] = d.State.rep[2]\n\t\t\t}\n\t\t\td.State.rep[2] = d.State.rep[1]\n\t\t}\n\t\td.State.rep[1] = d.State.rep[0]\n\t\td.State.rep[0] = dist\n\t}\n\tn, err := d.State.repLenCodec.Decode(d.rd, posState)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\td.State.updateStateRep()\n\top = match{n: int(n) + minMatchLen, distance: int64(dist) + minDistance}\n\treturn op, nil\n}\n\n// apply takes the operation and transforms the decoder dictionary accordingly.\nfunc (d *decoder) apply(op operation) error {\n\tvar err error\n\tswitch x := op.(type) {\n\tcase match:\n\t\terr = d.Dict.writeMatch(x.distance, x.n)\n\tcase lit:\n\t\terr = d.Dict.WriteByte(x.b)\n\tdefault:\n\t\tpanic(\"op is neither a match nor a literal\")\n\t}\n\treturn err\n}\n\n// decompress fills the dictionary unless no space for new data is\n// available. If the end of the LZMA stream has been reached io.EOF will\n// be returned.\nfunc (d *decoder) decompress() error {\n\tif d.eos {\n\t\treturn io.EOF\n\t}\n\tfor d.Dict.Available() >= maxMatchLen {\n\t\top, err := d.readOp()\n\t\tswitch err {\n\t\tcase nil:\n\t\t\tbreak\n\t\tcase errEOS:\n\t\t\td.eos = true\n\t\t\tif !d.rd.possiblyAtEnd() {\n\t\t\t\treturn errDataAfterEOS\n\t\t\t}\n\t\t\tif d.size >= 0 && d.size != d.Decompressed() {\n\t\t\t\treturn errSize\n\t\t\t}\n\t\t\treturn io.EOF\n\t\tcase io.EOF:\n\t\t\td.eos = true\n\t\t\treturn io.ErrUnexpectedEOF\n\t\tdefault:\n\t\t\treturn err\n\t\t}\n\t\tif err = d.apply(op); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif d.size >= 0 && d.Decompressed() >= d.size {\n\t\t\td.eos = true\n\t\t\tif d.Decompressed() > d.size {\n\t\t\t\treturn errSize\n\t\t\t}\n\t\t\tif !d.rd.possiblyAtEnd() {\n\t\t\t\tswitch _, err = d.readOp(); err {\n\t\t\t\tcase nil:\n\t\t\t\t\treturn errSize\n\t\t\t\tcase io.EOF:\n\t\t\t\t\treturn io.ErrUnexpectedEOF\n\t\t\t\tcase errEOS:\n\t\t\t\t\tbreak\n\t\t\t\tdefault:\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn io.EOF\n\t\t}\n\t}\n\treturn nil\n}\n\n// Errors that may be returned while decoding data.\nvar (\n\terrDataAfterEOS = errors.New(\"lzma: data after end of stream marker\")\n\terrSize         = errors.New(\"lzma: wrong uncompressed data size\")\n)\n\n// Read reads data from the buffer. If no more data is available io.EOF is\n// returned.\nfunc (d *decoder) Read(p []byte) (n int, err error) {\n\tvar k int\n\tfor {\n\t\t// Read of decoder dict never returns an error.\n\t\tk, err = d.Dict.Read(p[n:])\n\t\tif err != nil {\n\t\t\tpanic(fmt.Errorf(\"dictionary read error %s\", err))\n\t\t}\n\t\tif k == 0 && d.eos {\n\t\t\treturn n, io.EOF\n\t\t}\n\t\tn += k\n\t\tif n >= len(p) {\n\t\t\treturn n, nil\n\t\t}\n\t\tif err = d.decompress(); err != nil && err != io.EOF {\n\t\t\treturn n, err\n\t\t}\n\t}\n}\n\n// Decompressed returns the number of bytes decompressed by the decoder.\nfunc (d *decoder) Decompressed() int64 {\n\treturn d.Dict.pos() - d.start\n}\n"
  },
  {
    "path": "vendor/github.com/ulikunitz/xz/lzma/decoderdict.go",
    "content": "// Copyright 2014-2017 Ulrich Kunitz. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage lzma\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n)\n\n// decoderDict provides the dictionary for the decoder. The whole\n// dictionary is used as reader buffer.\ntype decoderDict struct {\n\tbuf  buffer\n\thead int64\n}\n\n// newDecoderDict creates a new decoder dictionary. The whole dictionary\n// will be used as reader buffer.\nfunc newDecoderDict(dictCap int) (d *decoderDict, err error) {\n\t// lower limit supports easy test cases\n\tif !(1 <= dictCap && int64(dictCap) <= MaxDictCap) {\n\t\treturn nil, errors.New(\"lzma: dictCap out of range\")\n\t}\n\td = &decoderDict{buf: *newBuffer(dictCap)}\n\treturn d, nil\n}\n\n// Reset clears the dictionary. The read buffer is not changed, so the\n// buffered data can still be read.\nfunc (d *decoderDict) Reset() {\n\td.head = 0\n}\n\n// WriteByte writes a single byte into the dictionary. It is used to\n// write literals into the dictionary.\nfunc (d *decoderDict) WriteByte(c byte) error {\n\tif err := d.buf.WriteByte(c); err != nil {\n\t\treturn err\n\t}\n\td.head++\n\treturn nil\n}\n\n// pos returns the position of the dictionary head.\nfunc (d *decoderDict) pos() int64 { return d.head }\n\n// dictLen returns the actual length of the dictionary.\nfunc (d *decoderDict) dictLen() int {\n\tcapacity := d.buf.Cap()\n\tif d.head >= int64(capacity) {\n\t\treturn capacity\n\t}\n\treturn int(d.head)\n}\n\n// byteAt returns a byte stored in the dictionary. If the distance is\n// non-positive or exceeds the current length of the dictionary the zero\n// byte is returned.\nfunc (d *decoderDict) byteAt(dist int) byte {\n\tif !(0 < dist && dist <= d.dictLen()) {\n\t\treturn 0\n\t}\n\ti := d.buf.front - dist\n\tif i < 0 {\n\t\ti += len(d.buf.data)\n\t}\n\treturn d.buf.data[i]\n}\n\n// writeMatch writes the match at the top of the dictionary. The given\n// distance must point in the current dictionary and the length must not\n// exceed the maximum length 273 supported in LZMA.\n//\n// The error value ErrNoSpace indicates that no space is available in\n// the dictionary for writing. You need to read from the dictionary\n// first.\nfunc (d *decoderDict) writeMatch(dist int64, length int) error {\n\tif !(0 < dist && dist <= int64(d.dictLen())) {\n\t\treturn errors.New(\"writeMatch: distance out of range\")\n\t}\n\tif !(0 < length && length <= maxMatchLen) {\n\t\treturn errors.New(\"writeMatch: length out of range\")\n\t}\n\tif length > d.buf.Available() {\n\t\treturn ErrNoSpace\n\t}\n\td.head += int64(length)\n\n\ti := d.buf.front - int(dist)\n\tif i < 0 {\n\t\ti += len(d.buf.data)\n\t}\n\tfor length > 0 {\n\t\tvar p []byte\n\t\tif i >= d.buf.front {\n\t\t\tp = d.buf.data[i:]\n\t\t\ti = 0\n\t\t} else {\n\t\t\tp = d.buf.data[i:d.buf.front]\n\t\t\ti = d.buf.front\n\t\t}\n\t\tif len(p) > length {\n\t\t\tp = p[:length]\n\t\t}\n\t\tif _, err := d.buf.Write(p); err != nil {\n\t\t\tpanic(fmt.Errorf(\"d.buf.Write returned error %s\", err))\n\t\t}\n\t\tlength -= len(p)\n\t}\n\treturn nil\n}\n\n// Write writes the given bytes into the dictionary and advances the\n// head.\nfunc (d *decoderDict) Write(p []byte) (n int, err error) {\n\tn, err = d.buf.Write(p)\n\td.head += int64(n)\n\treturn n, err\n}\n\n// Available returns the number of available bytes for writing into the\n// decoder dictionary.\nfunc (d *decoderDict) Available() int { return d.buf.Available() }\n\n// Read reads data from the buffer contained in the decoder dictionary.\nfunc (d *decoderDict) Read(p []byte) (n int, err error) { return d.buf.Read(p) }\n\n// Buffered returns the number of bytes currently buffered in the\n// decoder dictionary.\nfunc (d *decoderDict) buffered() int { return d.buf.Buffered() }\n\n// Peek gets data from the buffer without advancing the rear index.\nfunc (d *decoderDict) peek(p []byte) (n int, err error) { return d.buf.Peek(p) }\n"
  },
  {
    "path": "vendor/github.com/ulikunitz/xz/lzma/directcodec.go",
    "content": "// Copyright 2014-2017 Ulrich Kunitz. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage lzma\n\nimport \"fmt\"\n\n// directCodec allows the encoding and decoding of values with a fixed number\n// of bits. The number of bits must be in the range [1,32].\ntype directCodec byte\n\n// makeDirectCodec creates a directCodec. The function panics if the number of\n// bits is not in the range [1,32].\nfunc makeDirectCodec(bits int) directCodec {\n\tif !(1 <= bits && bits <= 32) {\n\t\tpanic(fmt.Errorf(\"bits=%d out of range\", bits))\n\t}\n\treturn directCodec(bits)\n}\n\n// Bits returns the number of bits supported by this codec.\nfunc (dc directCodec) Bits() int {\n\treturn int(dc)\n}\n\n// Encode uses the range encoder to encode a value with the fixed number of\n// bits. The most-significant bit is encoded first.\nfunc (dc directCodec) Encode(e *rangeEncoder, v uint32) error {\n\tfor i := int(dc) - 1; i >= 0; i-- {\n\t\tif err := e.DirectEncodeBit(v >> uint(i)); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// Decode uses the range decoder to decode a value with the given number of\n// given bits. The most-significant bit is decoded first.\nfunc (dc directCodec) Decode(d *rangeDecoder) (v uint32, err error) {\n\tfor i := int(dc) - 1; i >= 0; i-- {\n\t\tx, err := d.DirectDecodeBit()\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\tv = (v << 1) | x\n\t}\n\treturn v, nil\n}\n"
  },
  {
    "path": "vendor/github.com/ulikunitz/xz/lzma/distcodec.go",
    "content": "// Copyright 2014-2017 Ulrich Kunitz. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage lzma\n\n// Constants used by the distance codec.\nconst (\n\t// minimum supported distance\n\tminDistance = 1\n\t// maximum supported distance, value is used for the eos marker.\n\tmaxDistance = 1 << 32\n\t// number of the supported len states\n\tlenStates = 4\n\t// start for the position models\n\tstartPosModel = 4\n\t// first index with align bits support\n\tendPosModel = 14\n\t// bits for the position slots\n\tposSlotBits = 6\n\t// number of align bits\n\talignBits = 4\n\t// maximum position slot\n\tmaxPosSlot = 63\n)\n\n// distCodec provides encoding and decoding of distance values.\ntype distCodec struct {\n\tposSlotCodecs [lenStates]treeCodec\n\tposModel      [endPosModel - startPosModel]treeReverseCodec\n\talignCodec    treeReverseCodec\n}\n\n// deepcopy initializes dc as deep copy of the source.\nfunc (dc *distCodec) deepcopy(src *distCodec) {\n\tif dc == src {\n\t\treturn\n\t}\n\tfor i := range dc.posSlotCodecs {\n\t\tdc.posSlotCodecs[i].deepcopy(&src.posSlotCodecs[i])\n\t}\n\tfor i := range dc.posModel {\n\t\tdc.posModel[i].deepcopy(&src.posModel[i])\n\t}\n\tdc.alignCodec.deepcopy(&src.alignCodec)\n}\n\n// distBits returns the number of bits required to encode dist.\nfunc distBits(dist uint32) int {\n\tif dist < startPosModel {\n\t\treturn 6\n\t}\n\t// slot s > 3, dist d\n\t// s = 2(bits(d)-1) + bit(d, bits(d)-2)\n\t// s>>1 = bits(d)-1\n\t// bits(d) = 32-nlz32(d)\n\t// s>>1=31-nlz32(d)\n\t// n = 5 + (s>>1) = 36 - nlz32(d)\n\treturn 36 - nlz32(dist)\n}\n\n// newDistCodec creates a new distance codec.\nfunc (dc *distCodec) init() {\n\tfor i := range dc.posSlotCodecs {\n\t\tdc.posSlotCodecs[i] = makeTreeCodec(posSlotBits)\n\t}\n\tfor i := range dc.posModel {\n\t\tposSlot := startPosModel + i\n\t\tbits := (posSlot >> 1) - 1\n\t\tdc.posModel[i] = makeTreeReverseCodec(bits)\n\t}\n\tdc.alignCodec = makeTreeReverseCodec(alignBits)\n}\n\n// lenState converts the value l to a supported lenState value.\nfunc lenState(l uint32) uint32 {\n\tif l >= lenStates {\n\t\tl = lenStates - 1\n\t}\n\treturn l\n}\n\n// Encode encodes the distance using the parameter l. Dist can have values from\n// the full range of uint32 values. To get the distance offset the actual match\n// distance has to be decreased by 1. A distance offset of 0xffffffff (eos)\n// indicates the end of the stream.\nfunc (dc *distCodec) Encode(e *rangeEncoder, dist uint32, l uint32) (err error) {\n\t// Compute the posSlot using nlz32\n\tvar posSlot uint32\n\tvar bits uint32\n\tif dist < startPosModel {\n\t\tposSlot = dist\n\t} else {\n\t\tbits = uint32(30 - nlz32(dist))\n\t\tposSlot = startPosModel - 2 + (bits << 1)\n\t\tposSlot += (dist >> uint(bits)) & 1\n\t}\n\n\tif err = dc.posSlotCodecs[lenState(l)].Encode(e, posSlot); err != nil {\n\t\treturn\n\t}\n\n\tswitch {\n\tcase posSlot < startPosModel:\n\t\treturn nil\n\tcase posSlot < endPosModel:\n\t\ttc := &dc.posModel[posSlot-startPosModel]\n\t\treturn tc.Encode(dist, e)\n\t}\n\tdic := directCodec(bits - alignBits)\n\tif err = dic.Encode(e, dist>>alignBits); err != nil {\n\t\treturn\n\t}\n\treturn dc.alignCodec.Encode(dist, e)\n}\n\n// Decode decodes the distance offset using the parameter l. The dist value\n// 0xffffffff (eos) indicates the end of the stream. Add one to the distance\n// offset to get the actual match distance.\nfunc (dc *distCodec) Decode(d *rangeDecoder, l uint32) (dist uint32, err error) {\n\tposSlot, err := dc.posSlotCodecs[lenState(l)].Decode(d)\n\tif err != nil {\n\t\treturn\n\t}\n\n\t// posSlot equals distance\n\tif posSlot < startPosModel {\n\t\treturn posSlot, nil\n\t}\n\n\t// posSlot uses the individual models\n\tbits := (posSlot >> 1) - 1\n\tdist = (2 | (posSlot & 1)) << bits\n\tvar u uint32\n\tif posSlot < endPosModel {\n\t\ttc := &dc.posModel[posSlot-startPosModel]\n\t\tif u, err = tc.Decode(d); err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\tdist += u\n\t\treturn dist, nil\n\t}\n\n\t// posSlots use direct encoding and a single model for the four align\n\t// bits.\n\tdic := directCodec(bits - alignBits)\n\tif u, err = dic.Decode(d); err != nil {\n\t\treturn 0, err\n\t}\n\tdist += u << alignBits\n\tif u, err = dc.alignCodec.Decode(d); err != nil {\n\t\treturn 0, err\n\t}\n\tdist += u\n\treturn dist, nil\n}\n"
  },
  {
    "path": "vendor/github.com/ulikunitz/xz/lzma/encoder.go",
    "content": "// Copyright 2014-2017 Ulrich Kunitz. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage lzma\n\nimport (\n\t\"fmt\"\n\t\"io\"\n)\n\n// opLenMargin provides the upper limit of the number of bytes required\n// to encode a single operation.\nconst opLenMargin = 16\n\n// compressFlags control the compression process.\ntype compressFlags uint32\n\n// Values for compressFlags.\nconst (\n\t// all data should be compressed, even if compression is not\n\t// optimal.\n\tall compressFlags = 1 << iota\n)\n\n// encoderFlags provide the flags for an encoder.\ntype encoderFlags uint32\n\n// Flags for the encoder.\nconst (\n\t// eosMarker requests an EOS marker to be written.\n\teosMarker encoderFlags = 1 << iota\n)\n\n// Encoder compresses data buffered in the encoder dictionary and writes\n// it into a byte writer.\ntype encoder struct {\n\tdict  *encoderDict\n\tstate *state\n\tre    *rangeEncoder\n\tstart int64\n\t// generate eos marker\n\tmarker bool\n\tlimit  bool\n\tmargin int\n}\n\n// newEncoder creates a new encoder. If the byte writer must be\n// limited use LimitedByteWriter provided by this package. The flags\n// argument supports the eosMarker flag, controlling whether a\n// terminating end-of-stream marker must be written.\nfunc newEncoder(bw io.ByteWriter, state *state, dict *encoderDict,\n\tflags encoderFlags) (e *encoder, err error) {\n\n\tre, err := newRangeEncoder(bw)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\te = &encoder{\n\t\tdict:   dict,\n\t\tstate:  state,\n\t\tre:     re,\n\t\tmarker: flags&eosMarker != 0,\n\t\tstart:  dict.Pos(),\n\t\tmargin: opLenMargin,\n\t}\n\tif e.marker {\n\t\te.margin += 5\n\t}\n\treturn e, nil\n}\n\n// Write writes the bytes from p into the dictionary. If not enough\n// space is available the data in the dictionary buffer will be\n// compressed to make additional space available. If the limit of the\n// underlying writer has been reached ErrLimit will be returned.\nfunc (e *encoder) Write(p []byte) (n int, err error) {\n\tfor {\n\t\tk, err := e.dict.Write(p[n:])\n\t\tn += k\n\t\tif err == ErrNoSpace {\n\t\t\tif err = e.compress(0); err != nil {\n\t\t\t\treturn n, err\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\treturn n, err\n\t}\n}\n\n// Reopen reopens the encoder with a new byte writer.\nfunc (e *encoder) Reopen(bw io.ByteWriter) error {\n\tvar err error\n\tif e.re, err = newRangeEncoder(bw); err != nil {\n\t\treturn err\n\t}\n\te.start = e.dict.Pos()\n\te.limit = false\n\treturn nil\n}\n\n// writeLiteral writes a literal into the LZMA stream\nfunc (e *encoder) writeLiteral(l lit) error {\n\tvar err error\n\tstate, state2, _ := e.state.states(e.dict.Pos())\n\tif err = e.state.isMatch[state2].Encode(e.re, 0); err != nil {\n\t\treturn err\n\t}\n\tlitState := e.state.litState(e.dict.ByteAt(1), e.dict.Pos())\n\tmatch := e.dict.ByteAt(int(e.state.rep[0]) + 1)\n\terr = e.state.litCodec.Encode(e.re, l.b, state, match, litState)\n\tif err != nil {\n\t\treturn err\n\t}\n\te.state.updateStateLiteral()\n\treturn nil\n}\n\n// iverson implements the Iverson operator as proposed by Donald Knuth in his\n// book Concrete Mathematics.\nfunc iverson(ok bool) uint32 {\n\tif ok {\n\t\treturn 1\n\t}\n\treturn 0\n}\n\n// writeMatch writes a repetition operation into the operation stream\nfunc (e *encoder) writeMatch(m match) error {\n\tvar err error\n\tif !(minDistance <= m.distance && m.distance <= maxDistance) {\n\t\tpanic(fmt.Errorf(\"match distance %d out of range\", m.distance))\n\t}\n\tdist := uint32(m.distance - minDistance)\n\tif !(minMatchLen <= m.n && m.n <= maxMatchLen) &&\n\t\t!(dist == e.state.rep[0] && m.n == 1) {\n\t\tpanic(fmt.Errorf(\n\t\t\t\"match length %d out of range; dist %d rep[0] %d\",\n\t\t\tm.n, dist, e.state.rep[0]))\n\t}\n\tstate, state2, posState := e.state.states(e.dict.Pos())\n\tif err = e.state.isMatch[state2].Encode(e.re, 1); err != nil {\n\t\treturn err\n\t}\n\tg := 0\n\tfor ; g < 4; g++ {\n\t\tif e.state.rep[g] == dist {\n\t\t\tbreak\n\t\t}\n\t}\n\tb := iverson(g < 4)\n\tif err = e.state.isRep[state].Encode(e.re, b); err != nil {\n\t\treturn err\n\t}\n\tn := uint32(m.n - minMatchLen)\n\tif b == 0 {\n\t\t// simple match\n\t\te.state.rep[3], e.state.rep[2], e.state.rep[1], e.state.rep[0] =\n\t\t\te.state.rep[2], e.state.rep[1], e.state.rep[0], dist\n\t\te.state.updateStateMatch()\n\t\tif err = e.state.lenCodec.Encode(e.re, n, posState); err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn e.state.distCodec.Encode(e.re, dist, n)\n\t}\n\tb = iverson(g != 0)\n\tif err = e.state.isRepG0[state].Encode(e.re, b); err != nil {\n\t\treturn err\n\t}\n\tif b == 0 {\n\t\t// g == 0\n\t\tb = iverson(m.n != 1)\n\t\tif err = e.state.isRepG0Long[state2].Encode(e.re, b); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif b == 0 {\n\t\t\te.state.updateStateShortRep()\n\t\t\treturn nil\n\t\t}\n\t} else {\n\t\t// g in {1,2,3}\n\t\tb = iverson(g != 1)\n\t\tif err = e.state.isRepG1[state].Encode(e.re, b); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif b == 1 {\n\t\t\t// g in {2,3}\n\t\t\tb = iverson(g != 2)\n\t\t\terr = e.state.isRepG2[state].Encode(e.re, b)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif b == 1 {\n\t\t\t\te.state.rep[3] = e.state.rep[2]\n\t\t\t}\n\t\t\te.state.rep[2] = e.state.rep[1]\n\t\t}\n\t\te.state.rep[1] = e.state.rep[0]\n\t\te.state.rep[0] = dist\n\t}\n\te.state.updateStateRep()\n\treturn e.state.repLenCodec.Encode(e.re, n, posState)\n}\n\n// writeOp writes a single operation to the range encoder. The function\n// checks whether there is enough space available to close the LZMA\n// stream.\nfunc (e *encoder) writeOp(op operation) error {\n\tif e.re.Available() < int64(e.margin) {\n\t\treturn ErrLimit\n\t}\n\tswitch x := op.(type) {\n\tcase lit:\n\t\treturn e.writeLiteral(x)\n\tcase match:\n\t\treturn e.writeMatch(x)\n\tdefault:\n\t\tpanic(\"unexpected operation\")\n\t}\n}\n\n// compress compressed data from the dictionary buffer. If the flag all\n// is set, all data in the dictionary buffer will be compressed. The\n// function returns ErrLimit if the underlying writer has reached its\n// limit.\nfunc (e *encoder) compress(flags compressFlags) error {\n\tn := 0\n\tif flags&all == 0 {\n\t\tn = maxMatchLen - 1\n\t}\n\td := e.dict\n\tm := d.m\n\tfor d.Buffered() > n {\n\t\top := m.NextOp(e.state.rep)\n\t\tif err := e.writeOp(op); err != nil {\n\t\t\treturn err\n\t\t}\n\t\td.Discard(op.Len())\n\t}\n\treturn nil\n}\n\n// eosMatch is a pseudo operation that indicates the end of the stream.\nvar eosMatch = match{distance: maxDistance, n: minMatchLen}\n\n// Close terminates the LZMA stream. If requested the end-of-stream\n// marker will be written. If the byte writer limit has been or will be\n// reached during compression of the remaining data in the buffer the\n// LZMA stream will be closed and data will remain in the buffer.\nfunc (e *encoder) Close() error {\n\terr := e.compress(all)\n\tif err != nil && err != ErrLimit {\n\t\treturn err\n\t}\n\tif e.marker {\n\t\tif err := e.writeMatch(eosMatch); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\terr = e.re.Close()\n\treturn err\n}\n\n// Compressed returns the number bytes of the input data that been\n// compressed.\nfunc (e *encoder) Compressed() int64 {\n\treturn e.dict.Pos() - e.start\n}\n"
  },
  {
    "path": "vendor/github.com/ulikunitz/xz/lzma/encoderdict.go",
    "content": "// Copyright 2014-2017 Ulrich Kunitz. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage lzma\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n)\n\n// matcher is an interface that supports the identification of the next\n// operation.\ntype matcher interface {\n\tio.Writer\n\tSetDict(d *encoderDict)\n\tNextOp(rep [4]uint32) operation\n}\n\n// encoderDict provides the dictionary of the encoder. It includes an\n// addtional buffer atop of the actual dictionary.\ntype encoderDict struct {\n\tbuf      buffer\n\tm        matcher\n\thead     int64\n\tcapacity int\n\t// preallocated array\n\tdata [maxMatchLen]byte\n}\n\n// newEncoderDict creates the encoder dictionary. The argument bufSize\n// defines the size of the additional buffer.\nfunc newEncoderDict(dictCap, bufSize int, m matcher) (d *encoderDict, err error) {\n\tif !(1 <= dictCap && int64(dictCap) <= MaxDictCap) {\n\t\treturn nil, errors.New(\n\t\t\t\"lzma: dictionary capacity out of range\")\n\t}\n\tif bufSize < 1 {\n\t\treturn nil, errors.New(\n\t\t\t\"lzma: buffer size must be larger than zero\")\n\t}\n\td = &encoderDict{\n\t\tbuf:      *newBuffer(dictCap + bufSize),\n\t\tcapacity: dictCap,\n\t\tm:        m,\n\t}\n\tm.SetDict(d)\n\treturn d, nil\n}\n\n// Discard discards n bytes. Note that n must not be larger than\n// MaxMatchLen.\nfunc (d *encoderDict) Discard(n int) {\n\tp := d.data[:n]\n\tk, _ := d.buf.Read(p)\n\tif k < n {\n\t\tpanic(fmt.Errorf(\"lzma: can't discard %d bytes\", n))\n\t}\n\td.head += int64(n)\n\td.m.Write(p)\n}\n\n// Len returns the data available in the encoder dictionary.\nfunc (d *encoderDict) Len() int {\n\tn := d.buf.Available()\n\tif int64(n) > d.head {\n\t\treturn int(d.head)\n\t}\n\treturn n\n}\n\n// DictLen returns the actual length of data in the dictionary.\nfunc (d *encoderDict) DictLen() int {\n\tif d.head < int64(d.capacity) {\n\t\treturn int(d.head)\n\t}\n\treturn d.capacity\n}\n\n// Available returns the number of bytes that can be written by a\n// following Write call.\nfunc (d *encoderDict) Available() int {\n\treturn d.buf.Available() - d.DictLen()\n}\n\n// Write writes data into the dictionary buffer. Note that the position\n// of the dictionary head will not be moved. If there is not enough\n// space in the buffer ErrNoSpace will be returned.\nfunc (d *encoderDict) Write(p []byte) (n int, err error) {\n\tm := d.Available()\n\tif len(p) > m {\n\t\tp = p[:m]\n\t\terr = ErrNoSpace\n\t}\n\tvar e error\n\tif n, e = d.buf.Write(p); e != nil {\n\t\terr = e\n\t}\n\treturn n, err\n}\n\n// Pos returns the position of the head.\nfunc (d *encoderDict) Pos() int64 { return d.head }\n\n// ByteAt returns the byte at the given distance.\nfunc (d *encoderDict) ByteAt(distance int) byte {\n\tif !(0 < distance && distance <= d.Len()) {\n\t\treturn 0\n\t}\n\ti := d.buf.rear - distance\n\tif i < 0 {\n\t\ti += len(d.buf.data)\n\t}\n\treturn d.buf.data[i]\n}\n\n// CopyN copies the last n bytes from the dictionary into the provided\n// writer. This is used for copying uncompressed data into an\n// uncompressed segment.\nfunc (d *encoderDict) CopyN(w io.Writer, n int) (written int, err error) {\n\tif n <= 0 {\n\t\treturn 0, nil\n\t}\n\tm := d.Len()\n\tif n > m {\n\t\tn = m\n\t\terr = ErrNoSpace\n\t}\n\ti := d.buf.rear - n\n\tvar e error\n\tif i < 0 {\n\t\ti += len(d.buf.data)\n\t\tif written, e = w.Write(d.buf.data[i:]); e != nil {\n\t\t\treturn written, e\n\t\t}\n\t\ti = 0\n\t}\n\tvar k int\n\tk, e = w.Write(d.buf.data[i:d.buf.rear])\n\twritten += k\n\tif e != nil {\n\t\terr = e\n\t}\n\treturn written, err\n}\n\n// Buffered returns the number of bytes in the buffer.\nfunc (d *encoderDict) Buffered() int { return d.buf.Buffered() }\n"
  },
  {
    "path": "vendor/github.com/ulikunitz/xz/lzma/hashtable.go",
    "content": "// Copyright 2014-2017 Ulrich Kunitz. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage lzma\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\n\t\"github.com/ulikunitz/xz/internal/hash\"\n)\n\n/* For compression we need to find byte sequences that match the byte\n * sequence at the dictionary head. A hash table is a simple method to\n * provide this capability.\n */\n\n// maxMatches limits the number of matches requested from the Matches\n// function. This controls the speed of the overall encoding.\nconst maxMatches = 16\n\n// shortDists defines the number of short distances supported by the\n// implementation.\nconst shortDists = 8\n\n// The minimum is somehow arbitrary but the maximum is limited by the\n// memory requirements of the hash table.\nconst (\n\tminTableExponent = 9\n\tmaxTableExponent = 20\n)\n\n// newRoller contains the function used to create an instance of the\n// hash.Roller.\nvar newRoller = func(n int) hash.Roller { return hash.NewCyclicPoly(n) }\n\n// hashTable stores the hash table including the rolling hash method.\n//\n// We implement chained hashing into a circular buffer. Each entry in\n// the circular buffer stores the delta distance to the next position with a\n// word that has the same hash value.\ntype hashTable struct {\n\tdict *encoderDict\n\t// actual hash table\n\tt []int64\n\t// circular list data with the offset to the next word\n\tdata  []uint32\n\tfront int\n\t// mask for computing the index for the hash table\n\tmask uint64\n\t// hash offset; initial value is -int64(wordLen)\n\thoff int64\n\t// length of the hashed word\n\twordLen int\n\t// hash roller for computing the hash values for the Write\n\t// method\n\twr hash.Roller\n\t// hash roller for computing arbitrary hashes\n\thr hash.Roller\n\t// preallocated slices\n\tp         [maxMatches]int64\n\tdistances [maxMatches + shortDists]int\n}\n\n// hashTableExponent derives the hash table exponent from the dictionary\n// capacity.\nfunc hashTableExponent(n uint32) int {\n\te := 30 - nlz32(n)\n\tswitch {\n\tcase e < minTableExponent:\n\t\te = minTableExponent\n\tcase e > maxTableExponent:\n\t\te = maxTableExponent\n\t}\n\treturn e\n}\n\n// newHashTable creates a new hash table for words of length wordLen\nfunc newHashTable(capacity int, wordLen int) (t *hashTable, err error) {\n\tif !(0 < capacity) {\n\t\treturn nil, errors.New(\n\t\t\t\"newHashTable: capacity must not be negative\")\n\t}\n\texp := hashTableExponent(uint32(capacity))\n\tif !(1 <= wordLen && wordLen <= 4) {\n\t\treturn nil, errors.New(\"newHashTable: \" +\n\t\t\t\"argument wordLen out of range\")\n\t}\n\tn := 1 << uint(exp)\n\tif n <= 0 {\n\t\tpanic(\"newHashTable: exponent is too large\")\n\t}\n\tt = &hashTable{\n\t\tt:       make([]int64, n),\n\t\tdata:    make([]uint32, capacity),\n\t\tmask:    (uint64(1) << uint(exp)) - 1,\n\t\thoff:    -int64(wordLen),\n\t\twordLen: wordLen,\n\t\twr:      newRoller(wordLen),\n\t\thr:      newRoller(wordLen),\n\t}\n\treturn t, nil\n}\n\nfunc (t *hashTable) SetDict(d *encoderDict) { t.dict = d }\n\n// buffered returns the number of bytes that are currently hashed.\nfunc (t *hashTable) buffered() int {\n\tn := t.hoff + 1\n\tswitch {\n\tcase n <= 0:\n\t\treturn 0\n\tcase n >= int64(len(t.data)):\n\t\treturn len(t.data)\n\t}\n\treturn int(n)\n}\n\n// addIndex adds n to an index ensuring that is stays inside the\n// circular buffer for the hash chain.\nfunc (t *hashTable) addIndex(i, n int) int {\n\ti += n - len(t.data)\n\tif i < 0 {\n\t\ti += len(t.data)\n\t}\n\treturn i\n}\n\n// putDelta puts the delta instance at the current front of the circular\n// chain buffer.\nfunc (t *hashTable) putDelta(delta uint32) {\n\tt.data[t.front] = delta\n\tt.front = t.addIndex(t.front, 1)\n}\n\n// putEntry puts a new entry into the hash table. If there is already a\n// value stored it is moved into the circular chain buffer.\nfunc (t *hashTable) putEntry(h uint64, pos int64) {\n\tif pos < 0 {\n\t\treturn\n\t}\n\ti := h & t.mask\n\told := t.t[i] - 1\n\tt.t[i] = pos + 1\n\tvar delta int64\n\tif old >= 0 {\n\t\tdelta = pos - old\n\t\tif delta > 1<<32-1 || delta > int64(t.buffered()) {\n\t\t\tdelta = 0\n\t\t}\n\t}\n\tt.putDelta(uint32(delta))\n}\n\n// WriteByte converts a single byte into a hash and puts them into the hash\n// table.\nfunc (t *hashTable) WriteByte(b byte) error {\n\th := t.wr.RollByte(b)\n\tt.hoff++\n\tt.putEntry(h, t.hoff)\n\treturn nil\n}\n\n// Write converts the bytes provided into hash tables and stores the\n// abbreviated offsets into the hash table. The method will never return an\n// error.\nfunc (t *hashTable) Write(p []byte) (n int, err error) {\n\tfor _, b := range p {\n\t\t// WriteByte doesn't generate an error.\n\t\tt.WriteByte(b)\n\t}\n\treturn len(p), nil\n}\n\n// getMatches the matches for a specific hash. The functions returns the\n// number of positions found.\n//\n// TODO: Make a getDistances because that we are actually interested in.\nfunc (t *hashTable) getMatches(h uint64, positions []int64) (n int) {\n\tif t.hoff < 0 || len(positions) == 0 {\n\t\treturn 0\n\t}\n\tbuffered := t.buffered()\n\ttailPos := t.hoff + 1 - int64(buffered)\n\trear := t.front - buffered\n\tif rear >= 0 {\n\t\trear -= len(t.data)\n\t}\n\t// get the slot for the hash\n\tpos := t.t[h&t.mask] - 1\n\tdelta := pos - tailPos\n\tfor {\n\t\tif delta < 0 {\n\t\t\treturn n\n\t\t}\n\t\tpositions[n] = tailPos + delta\n\t\tn++\n\t\tif n >= len(positions) {\n\t\t\treturn n\n\t\t}\n\t\ti := rear + int(delta)\n\t\tif i < 0 {\n\t\t\ti += len(t.data)\n\t\t}\n\t\tu := t.data[i]\n\t\tif u == 0 {\n\t\t\treturn n\n\t\t}\n\t\tdelta -= int64(u)\n\t}\n}\n\n// hash computes the rolling hash for the word stored in p. For correct\n// results its length must be equal to t.wordLen.\nfunc (t *hashTable) hash(p []byte) uint64 {\n\tvar h uint64\n\tfor _, b := range p {\n\t\th = t.hr.RollByte(b)\n\t}\n\treturn h\n}\n\n// Matches fills the positions slice with potential matches. The\n// functions returns the number of positions filled into positions. The\n// byte slice p must have word length of the hash table.\nfunc (t *hashTable) Matches(p []byte, positions []int64) int {\n\tif len(p) != t.wordLen {\n\t\tpanic(fmt.Errorf(\n\t\t\t\"byte slice must have length %d\", t.wordLen))\n\t}\n\th := t.hash(p)\n\treturn t.getMatches(h, positions)\n}\n\n// NextOp identifies the next operation using the hash table.\n//\n// TODO: Use all repetitions to find matches.\nfunc (t *hashTable) NextOp(rep [4]uint32) operation {\n\t// get positions\n\tdata := t.dict.data[:maxMatchLen]\n\tn, _ := t.dict.buf.Peek(data)\n\tdata = data[:n]\n\tvar p []int64\n\tif n < t.wordLen {\n\t\tp = t.p[:0]\n\t} else {\n\t\tp = t.p[:maxMatches]\n\t\tn = t.Matches(data[:t.wordLen], p)\n\t\tp = p[:n]\n\t}\n\n\t// convert positions in potential distances\n\thead := t.dict.head\n\tdists := append(t.distances[:0], 1, 2, 3, 4, 5, 6, 7, 8)\n\tfor _, pos := range p {\n\t\tdis := int(head - pos)\n\t\tif dis > shortDists {\n\t\t\tdists = append(dists, dis)\n\t\t}\n\t}\n\n\t// check distances\n\tvar m match\n\tdictLen := t.dict.DictLen()\n\tfor _, dist := range dists {\n\t\tif dist > dictLen {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Here comes a trick. We are only interested in matches\n\t\t// that are longer than the matches we have been found\n\t\t// before. So before we test the whole byte sequence at\n\t\t// the given distance, we test the first byte that would\n\t\t// make the match longer. If it doesn't match the byte\n\t\t// to match, we don't to care any longer.\n\t\ti := t.dict.buf.rear - dist + m.n\n\t\tif i < 0 {\n\t\t\ti += len(t.dict.buf.data)\n\t\t}\n\t\tif t.dict.buf.data[i] != data[m.n] {\n\t\t\t// We can't get a longer match. Jump to the next\n\t\t\t// distance.\n\t\t\tcontinue\n\t\t}\n\n\t\tn := t.dict.buf.matchLen(dist, data)\n\t\tswitch n {\n\t\tcase 0:\n\t\t\tcontinue\n\t\tcase 1:\n\t\t\tif uint32(dist-minDistance) != rep[0] {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\t\tif n > m.n {\n\t\t\tm = match{int64(dist), n}\n\t\t\tif n == len(data) {\n\t\t\t\t// No better match will be found.\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\n\tif m.n == 0 {\n\t\treturn lit{data[0]}\n\t}\n\treturn m\n}\n"
  },
  {
    "path": "vendor/github.com/ulikunitz/xz/lzma/header.go",
    "content": "// Copyright 2014-2017 Ulrich Kunitz. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage lzma\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n)\n\n// uint32LE reads an uint32 integer from a byte slice\nfunc uint32LE(b []byte) uint32 {\n\tx := uint32(b[3]) << 24\n\tx |= uint32(b[2]) << 16\n\tx |= uint32(b[1]) << 8\n\tx |= uint32(b[0])\n\treturn x\n}\n\n// uint64LE converts the uint64 value stored as little endian to an uint64\n// value.\nfunc uint64LE(b []byte) uint64 {\n\tx := uint64(b[7]) << 56\n\tx |= uint64(b[6]) << 48\n\tx |= uint64(b[5]) << 40\n\tx |= uint64(b[4]) << 32\n\tx |= uint64(b[3]) << 24\n\tx |= uint64(b[2]) << 16\n\tx |= uint64(b[1]) << 8\n\tx |= uint64(b[0])\n\treturn x\n}\n\n// putUint32LE puts an uint32 integer into a byte slice that must have at least\n// a length of 4 bytes.\nfunc putUint32LE(b []byte, x uint32) {\n\tb[0] = byte(x)\n\tb[1] = byte(x >> 8)\n\tb[2] = byte(x >> 16)\n\tb[3] = byte(x >> 24)\n}\n\n// putUint64LE puts the uint64 value into the byte slice as little endian\n// value. The byte slice b must have at least place for 8 bytes.\nfunc putUint64LE(b []byte, x uint64) {\n\tb[0] = byte(x)\n\tb[1] = byte(x >> 8)\n\tb[2] = byte(x >> 16)\n\tb[3] = byte(x >> 24)\n\tb[4] = byte(x >> 32)\n\tb[5] = byte(x >> 40)\n\tb[6] = byte(x >> 48)\n\tb[7] = byte(x >> 56)\n}\n\n// noHeaderSize defines the value of the length field in the LZMA header.\nconst noHeaderSize uint64 = 1<<64 - 1\n\n// HeaderLen provides the length of the LZMA file header.\nconst HeaderLen = 13\n\n// header represents the header of an LZMA file.\ntype header struct {\n\tproperties Properties\n\tdictCap    int\n\t// uncompressed size; negative value if no size is given\n\tsize int64\n}\n\n// marshalBinary marshals the header.\nfunc (h *header) marshalBinary() (data []byte, err error) {\n\tif err = h.properties.verify(); err != nil {\n\t\treturn nil, err\n\t}\n\tif !(0 <= h.dictCap && int64(h.dictCap) <= MaxDictCap) {\n\t\treturn nil, fmt.Errorf(\"lzma: DictCap %d out of range\",\n\t\t\th.dictCap)\n\t}\n\n\tdata = make([]byte, 13)\n\n\t// property byte\n\tdata[0] = h.properties.Code()\n\n\t// dictionary capacity\n\tputUint32LE(data[1:5], uint32(h.dictCap))\n\n\t// uncompressed size\n\tvar s uint64\n\tif h.size > 0 {\n\t\ts = uint64(h.size)\n\t} else {\n\t\ts = noHeaderSize\n\t}\n\tputUint64LE(data[5:], s)\n\n\treturn data, nil\n}\n\n// unmarshalBinary unmarshals the header.\nfunc (h *header) unmarshalBinary(data []byte) error {\n\tif len(data) != HeaderLen {\n\t\treturn errors.New(\"lzma.unmarshalBinary: data has wrong length\")\n\t}\n\n\t// properties\n\tvar err error\n\tif h.properties, err = PropertiesForCode(data[0]); err != nil {\n\t\treturn err\n\t}\n\n\t// dictionary capacity\n\th.dictCap = int(uint32LE(data[1:]))\n\tif h.dictCap < 0 {\n\t\treturn errors.New(\n\t\t\t\"LZMA header: dictionary capacity exceeds maximum \" +\n\t\t\t\t\"integer\")\n\t}\n\n\t// uncompressed size\n\ts := uint64LE(data[5:])\n\tif s == noHeaderSize {\n\t\th.size = -1\n\t} else {\n\t\th.size = int64(s)\n\t\tif h.size < 0 {\n\t\t\treturn errors.New(\n\t\t\t\t\"LZMA header: uncompressed size \" +\n\t\t\t\t\t\"out of int64 range\")\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// validDictCap checks whether the dictionary capacity is correct. This\n// is used to weed out wrong file headers.\nfunc validDictCap(dictcap int) bool {\n\tif int64(dictcap) == MaxDictCap {\n\t\treturn true\n\t}\n\tfor n := uint(10); n < 32; n++ {\n\t\tif dictcap == 1<<n {\n\t\t\treturn true\n\t\t}\n\t\tif dictcap == 1<<n+1<<(n-1) {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// ValidHeader checks for a valid LZMA file header. It allows only\n// dictionary sizes of 2^n or 2^n+2^(n-1) with n >= 10 or 2^32-1. If\n// there is an explicit size it must not exceed 256 GiB. The length of\n// the data argument must be HeaderLen.\nfunc ValidHeader(data []byte) bool {\n\tvar h header\n\tif err := h.unmarshalBinary(data); err != nil {\n\t\treturn false\n\t}\n\tif !validDictCap(h.dictCap) {\n\t\treturn false\n\t}\n\treturn h.size < 0 || h.size <= 1<<38\n}\n"
  },
  {
    "path": "vendor/github.com/ulikunitz/xz/lzma/header2.go",
    "content": "// Copyright 2014-2017 Ulrich Kunitz. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage lzma\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n)\n\nconst (\n\t// maximum size of compressed data in a chunk\n\tmaxCompressed = 1 << 16\n\t// maximum size of uncompressed data in a chunk\n\tmaxUncompressed = 1 << 21\n)\n\n// chunkType represents the type of an LZMA2 chunk. Note that this\n// value is an internal representation and no actual encoding of a LZMA2\n// chunk header.\ntype chunkType byte\n\n// Possible values for the chunk type.\nconst (\n\t// end of stream\n\tcEOS chunkType = iota\n\t// uncompressed; reset dictionary\n\tcUD\n\t// uncompressed; no reset of dictionary\n\tcU\n\t// LZMA compressed; no reset\n\tcL\n\t// LZMA compressed; reset state\n\tcLR\n\t// LZMA compressed; reset state; new property value\n\tcLRN\n\t// LZMA compressed; reset state; new property value; reset dictionary\n\tcLRND\n)\n\n// chunkTypeStrings provide a string representation for the chunk types.\nvar chunkTypeStrings = [...]string{\n\tcEOS:  \"EOS\",\n\tcU:    \"U\",\n\tcUD:   \"UD\",\n\tcL:    \"L\",\n\tcLR:   \"LR\",\n\tcLRN:  \"LRN\",\n\tcLRND: \"LRND\",\n}\n\n// String returns a string representation of the chunk type.\nfunc (c chunkType) String() string {\n\tif !(cEOS <= c && c <= cLRND) {\n\t\treturn \"unknown\"\n\t}\n\treturn chunkTypeStrings[c]\n}\n\n// Actual encodings for the chunk types in the value. Note that the high\n// uncompressed size bits are stored in the header byte additionally.\nconst (\n\thEOS  = 0\n\thUD   = 1\n\thU    = 2\n\thL    = 1 << 7\n\thLR   = 1<<7 | 1<<5\n\thLRN  = 1<<7 | 1<<6\n\thLRND = 1<<7 | 1<<6 | 1<<5\n)\n\n// errHeaderByte indicates an unsupported value for the chunk header\n// byte. These bytes starts the variable-length chunk header.\nvar errHeaderByte = errors.New(\"lzma: unsupported chunk header byte\")\n\n// headerChunkType converts the header byte into a chunk type. It\n// ignores the uncompressed size bits in the chunk header byte.\nfunc headerChunkType(h byte) (c chunkType, err error) {\n\tif h&hL == 0 {\n\t\t// no compression\n\t\tswitch h {\n\t\tcase hEOS:\n\t\t\tc = cEOS\n\t\tcase hUD:\n\t\t\tc = cUD\n\t\tcase hU:\n\t\t\tc = cU\n\t\tdefault:\n\t\t\treturn 0, errHeaderByte\n\t\t}\n\t\treturn\n\t}\n\tswitch h & hLRND {\n\tcase hL:\n\t\tc = cL\n\tcase hLR:\n\t\tc = cLR\n\tcase hLRN:\n\t\tc = cLRN\n\tcase hLRND:\n\t\tc = cLRND\n\tdefault:\n\t\treturn 0, errHeaderByte\n\t}\n\treturn\n}\n\n// uncompressedHeaderLen provides the length of an uncompressed header\nconst uncompressedHeaderLen = 3\n\n// headerLen returns the length of the LZMA2 header for a given chunk\n// type.\nfunc headerLen(c chunkType) int {\n\tswitch c {\n\tcase cEOS:\n\t\treturn 1\n\tcase cU, cUD:\n\t\treturn uncompressedHeaderLen\n\tcase cL, cLR:\n\t\treturn 5\n\tcase cLRN, cLRND:\n\t\treturn 6\n\t}\n\tpanic(fmt.Errorf(\"unsupported chunk type %d\", c))\n}\n\n// chunkHeader represents the contents of a chunk header.\ntype chunkHeader struct {\n\tctype        chunkType\n\tuncompressed uint32\n\tcompressed   uint16\n\tprops        Properties\n}\n\n// String returns a string representation of the chunk header.\nfunc (h *chunkHeader) String() string {\n\treturn fmt.Sprintf(\"%s %d %d %s\", h.ctype, h.uncompressed,\n\t\th.compressed, &h.props)\n}\n\n// UnmarshalBinary reads the content of the chunk header from the data\n// slice. The slice must have the correct length.\nfunc (h *chunkHeader) UnmarshalBinary(data []byte) error {\n\tif len(data) == 0 {\n\t\treturn errors.New(\"no data\")\n\t}\n\tc, err := headerChunkType(data[0])\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tn := headerLen(c)\n\tif len(data) < n {\n\t\treturn errors.New(\"incomplete data\")\n\t}\n\tif len(data) > n {\n\t\treturn errors.New(\"invalid data length\")\n\t}\n\n\t*h = chunkHeader{ctype: c}\n\tif c == cEOS {\n\t\treturn nil\n\t}\n\n\th.uncompressed = uint32(uint16BE(data[1:3]))\n\tif c <= cU {\n\t\treturn nil\n\t}\n\th.uncompressed |= uint32(data[0]&^hLRND) << 16\n\n\th.compressed = uint16BE(data[3:5])\n\tif c <= cLR {\n\t\treturn nil\n\t}\n\n\th.props, err = PropertiesForCode(data[5])\n\treturn err\n}\n\n// MarshalBinary encodes the chunk header value. The function checks\n// whether the content of the chunk header is correct.\nfunc (h *chunkHeader) MarshalBinary() (data []byte, err error) {\n\tif h.ctype > cLRND {\n\t\treturn nil, errors.New(\"invalid chunk type\")\n\t}\n\tif err = h.props.verify(); err != nil {\n\t\treturn nil, err\n\t}\n\n\tdata = make([]byte, headerLen(h.ctype))\n\n\tswitch h.ctype {\n\tcase cEOS:\n\t\treturn data, nil\n\tcase cUD:\n\t\tdata[0] = hUD\n\tcase cU:\n\t\tdata[0] = hU\n\tcase cL:\n\t\tdata[0] = hL\n\tcase cLR:\n\t\tdata[0] = hLR\n\tcase cLRN:\n\t\tdata[0] = hLRN\n\tcase cLRND:\n\t\tdata[0] = hLRND\n\t}\n\n\tputUint16BE(data[1:3], uint16(h.uncompressed))\n\tif h.ctype <= cU {\n\t\treturn data, nil\n\t}\n\tdata[0] |= byte(h.uncompressed>>16) &^ hLRND\n\n\tputUint16BE(data[3:5], h.compressed)\n\tif h.ctype <= cLR {\n\t\treturn data, nil\n\t}\n\n\tdata[5] = h.props.Code()\n\treturn data, nil\n}\n\n// readChunkHeader reads the chunk header from the IO reader.\nfunc readChunkHeader(r io.Reader) (h *chunkHeader, err error) {\n\tp := make([]byte, 1, 6)\n\tif _, err = io.ReadFull(r, p); err != nil {\n\t\treturn\n\t}\n\tc, err := headerChunkType(p[0])\n\tif err != nil {\n\t\treturn\n\t}\n\tp = p[:headerLen(c)]\n\tif _, err = io.ReadFull(r, p[1:]); err != nil {\n\t\treturn\n\t}\n\th = new(chunkHeader)\n\tif err = h.UnmarshalBinary(p); err != nil {\n\t\treturn nil, err\n\t}\n\treturn h, nil\n}\n\n// uint16BE converts a big-endian uint16 representation to an uint16\n// value.\nfunc uint16BE(p []byte) uint16 {\n\treturn uint16(p[0])<<8 | uint16(p[1])\n}\n\n// putUint16BE puts the big-endian uint16 presentation into the given\n// slice.\nfunc putUint16BE(p []byte, x uint16) {\n\tp[0] = byte(x >> 8)\n\tp[1] = byte(x)\n}\n\n// chunkState is used to manage the state of the chunks\ntype chunkState byte\n\n// start and stop define the initial and terminating state of the chunk\n// state\nconst (\n\tstart chunkState = 'S'\n\tstop             = 'T'\n)\n\n// errors for the chunk state handling\nvar (\n\terrChunkType = errors.New(\"lzma: unexpected chunk type\")\n\terrState     = errors.New(\"lzma: wrong chunk state\")\n)\n\n// next transitions state based on chunk type input\nfunc (c *chunkState) next(ctype chunkType) error {\n\tswitch *c {\n\t// start state\n\tcase 'S':\n\t\tswitch ctype {\n\t\tcase cEOS:\n\t\t\t*c = 'T'\n\t\tcase cUD:\n\t\t\t*c = 'R'\n\t\tcase cLRND:\n\t\t\t*c = 'L'\n\t\tdefault:\n\t\t\treturn errChunkType\n\t\t}\n\t// normal LZMA mode\n\tcase 'L':\n\t\tswitch ctype {\n\t\tcase cEOS:\n\t\t\t*c = 'T'\n\t\tcase cUD:\n\t\t\t*c = 'R'\n\t\tcase cU:\n\t\t\t*c = 'U'\n\t\tcase cL, cLR, cLRN, cLRND:\n\t\t\tbreak\n\t\tdefault:\n\t\t\treturn errChunkType\n\t\t}\n\t// reset required\n\tcase 'R':\n\t\tswitch ctype {\n\t\tcase cEOS:\n\t\t\t*c = 'T'\n\t\tcase cUD, cU:\n\t\t\tbreak\n\t\tcase cLRN, cLRND:\n\t\t\t*c = 'L'\n\t\tdefault:\n\t\t\treturn errChunkType\n\t\t}\n\t// uncompressed\n\tcase 'U':\n\t\tswitch ctype {\n\t\tcase cEOS:\n\t\t\t*c = 'T'\n\t\tcase cUD:\n\t\t\t*c = 'R'\n\t\tcase cU:\n\t\t\tbreak\n\t\tcase cL, cLR, cLRN, cLRND:\n\t\t\t*c = 'L'\n\t\tdefault:\n\t\t\treturn errChunkType\n\t\t}\n\t// terminal state\n\tcase 'T':\n\t\treturn errChunkType\n\tdefault:\n\t\treturn errState\n\t}\n\treturn nil\n}\n\n// defaultChunkType returns the default chunk type for each chunk state.\nfunc (c chunkState) defaultChunkType() chunkType {\n\tswitch c {\n\tcase 'S':\n\t\treturn cLRND\n\tcase 'L', 'U':\n\t\treturn cL\n\tcase 'R':\n\t\treturn cLRN\n\tdefault:\n\t\t// no error\n\t\treturn cEOS\n\t}\n}\n\n// maxDictCap defines the maximum dictionary capacity supported by the\n// LZMA2 dictionary capacity encoding.\nconst maxDictCap = 1<<32 - 1\n\n// maxDictCapCode defines the maximum dictionary capacity code.\nconst maxDictCapCode = 40\n\n// The function decodes the dictionary capacity byte, but doesn't change\n// for the correct range of the given byte.\nfunc decodeDictCap(c byte) int64 {\n\treturn (2 | int64(c)&1) << (11 + (c>>1)&0x1f)\n}\n\n// DecodeDictCap decodes the encoded dictionary capacity. The function\n// returns an error if the code is out of range.\nfunc DecodeDictCap(c byte) (n int64, err error) {\n\tif c >= maxDictCapCode {\n\t\tif c == maxDictCapCode {\n\t\t\treturn maxDictCap, nil\n\t\t}\n\t\treturn 0, errors.New(\"lzma: invalid dictionary size code\")\n\t}\n\treturn decodeDictCap(c), nil\n}\n\n// EncodeDictCap encodes a dictionary capacity. The function returns the\n// code for the capacity that is greater or equal n. If n exceeds the\n// maximum support dictionary capacity, the maximum value is returned.\nfunc EncodeDictCap(n int64) byte {\n\ta, b := byte(0), byte(40)\n\tfor a < b {\n\t\tc := a + (b-a)>>1\n\t\tm := decodeDictCap(c)\n\t\tif n <= m {\n\t\t\tif n == m {\n\t\t\t\treturn c\n\t\t\t}\n\t\t\tb = c\n\t\t} else {\n\t\t\ta = c + 1\n\t\t}\n\t}\n\treturn a\n}\n"
  },
  {
    "path": "vendor/github.com/ulikunitz/xz/lzma/lengthcodec.go",
    "content": "// Copyright 2014-2017 Ulrich Kunitz. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage lzma\n\nimport \"errors\"\n\n// maxPosBits defines the number of bits of the position value that are used to\n// to compute the posState value. The value is used to select the tree codec\n// for length encoding and decoding.\nconst maxPosBits = 4\n\n// minMatchLen and maxMatchLen give the minimum and maximum values for\n// encoding and decoding length values. minMatchLen is also used as base\n// for the encoded length values.\nconst (\n\tminMatchLen = 2\n\tmaxMatchLen = minMatchLen + 16 + 256 - 1\n)\n\n// lengthCodec support the encoding of the length value.\ntype lengthCodec struct {\n\tchoice [2]prob\n\tlow    [1 << maxPosBits]treeCodec\n\tmid    [1 << maxPosBits]treeCodec\n\thigh   treeCodec\n}\n\n// deepcopy initializes the lc value as deep copy of the source value.\nfunc (lc *lengthCodec) deepcopy(src *lengthCodec) {\n\tif lc == src {\n\t\treturn\n\t}\n\tlc.choice = src.choice\n\tfor i := range lc.low {\n\t\tlc.low[i].deepcopy(&src.low[i])\n\t}\n\tfor i := range lc.mid {\n\t\tlc.mid[i].deepcopy(&src.mid[i])\n\t}\n\tlc.high.deepcopy(&src.high)\n}\n\n// init initializes a new length codec.\nfunc (lc *lengthCodec) init() {\n\tfor i := range lc.choice {\n\t\tlc.choice[i] = probInit\n\t}\n\tfor i := range lc.low {\n\t\tlc.low[i] = makeTreeCodec(3)\n\t}\n\tfor i := range lc.mid {\n\t\tlc.mid[i] = makeTreeCodec(3)\n\t}\n\tlc.high = makeTreeCodec(8)\n}\n\n// lBits gives the number of bits used for the encoding of the l value\n// provided to the range encoder.\nfunc lBits(l uint32) int {\n\tswitch {\n\tcase l < 8:\n\t\treturn 4\n\tcase l < 16:\n\t\treturn 5\n\tdefault:\n\t\treturn 10\n\t}\n}\n\n// Encode encodes the length offset. The length offset l can be compute by\n// subtracting minMatchLen (2) from the actual length.\n//\n//   l = length - minMatchLen\n//\nfunc (lc *lengthCodec) Encode(e *rangeEncoder, l uint32, posState uint32,\n) (err error) {\n\tif l > maxMatchLen-minMatchLen {\n\t\treturn errors.New(\"lengthCodec.Encode: l out of range\")\n\t}\n\tif l < 8 {\n\t\tif err = lc.choice[0].Encode(e, 0); err != nil {\n\t\t\treturn\n\t\t}\n\t\treturn lc.low[posState].Encode(e, l)\n\t}\n\tif err = lc.choice[0].Encode(e, 1); err != nil {\n\t\treturn\n\t}\n\tif l < 16 {\n\t\tif err = lc.choice[1].Encode(e, 0); err != nil {\n\t\t\treturn\n\t\t}\n\t\treturn lc.mid[posState].Encode(e, l-8)\n\t}\n\tif err = lc.choice[1].Encode(e, 1); err != nil {\n\t\treturn\n\t}\n\tif err = lc.high.Encode(e, l-16); err != nil {\n\t\treturn\n\t}\n\treturn nil\n}\n\n// Decode reads the length offset. Add minMatchLen to compute the actual length\n// to the length offset l.\nfunc (lc *lengthCodec) Decode(d *rangeDecoder, posState uint32,\n) (l uint32, err error) {\n\tvar b uint32\n\tif b, err = lc.choice[0].Decode(d); err != nil {\n\t\treturn\n\t}\n\tif b == 0 {\n\t\tl, err = lc.low[posState].Decode(d)\n\t\treturn\n\t}\n\tif b, err = lc.choice[1].Decode(d); err != nil {\n\t\treturn\n\t}\n\tif b == 0 {\n\t\tl, err = lc.mid[posState].Decode(d)\n\t\tl += 8\n\t\treturn\n\t}\n\tl, err = lc.high.Decode(d)\n\tl += 16\n\treturn\n}\n"
  },
  {
    "path": "vendor/github.com/ulikunitz/xz/lzma/literalcodec.go",
    "content": "// Copyright 2014-2017 Ulrich Kunitz. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage lzma\n\n// literalCodec supports the encoding of literal. It provides 768 probability\n// values per literal state. The upper 512 probabilities are used with the\n// context of a match bit.\ntype literalCodec struct {\n\tprobs []prob\n}\n\n// deepcopy initializes literal codec c as a deep copy of the source.\nfunc (c *literalCodec) deepcopy(src *literalCodec) {\n\tif c == src {\n\t\treturn\n\t}\n\tc.probs = make([]prob, len(src.probs))\n\tcopy(c.probs, src.probs)\n}\n\n// init initializes the literal codec.\nfunc (c *literalCodec) init(lc, lp int) {\n\tswitch {\n\tcase !(minLC <= lc && lc <= maxLC):\n\t\tpanic(\"lc out of range\")\n\tcase !(minLP <= lp && lp <= maxLP):\n\t\tpanic(\"lp out of range\")\n\t}\n\tc.probs = make([]prob, 0x300<<uint(lc+lp))\n\tfor i := range c.probs {\n\t\tc.probs[i] = probInit\n\t}\n}\n\n// Encode encodes the byte s using a range encoder as well as the current LZMA\n// encoder state, a match byte and the literal state.\nfunc (c *literalCodec) Encode(e *rangeEncoder, s byte,\n\tstate uint32, match byte, litState uint32,\n) (err error) {\n\tk := litState * 0x300\n\tprobs := c.probs[k : k+0x300]\n\tsymbol := uint32(1)\n\tr := uint32(s)\n\tif state >= 7 {\n\t\tm := uint32(match)\n\t\tfor {\n\t\t\tmatchBit := (m >> 7) & 1\n\t\t\tm <<= 1\n\t\t\tbit := (r >> 7) & 1\n\t\t\tr <<= 1\n\t\t\ti := ((1 + matchBit) << 8) | symbol\n\t\t\tif err = probs[i].Encode(e, bit); err != nil {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tsymbol = (symbol << 1) | bit\n\t\t\tif matchBit != bit {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif symbol >= 0x100 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\tfor symbol < 0x100 {\n\t\tbit := (r >> 7) & 1\n\t\tr <<= 1\n\t\tif err = probs[symbol].Encode(e, bit); err != nil {\n\t\t\treturn\n\t\t}\n\t\tsymbol = (symbol << 1) | bit\n\t}\n\treturn nil\n}\n\n// Decode decodes a literal byte using the range decoder as well as the LZMA\n// state, a match byte, and the literal state.\nfunc (c *literalCodec) Decode(d *rangeDecoder,\n\tstate uint32, match byte, litState uint32,\n) (s byte, err error) {\n\tk := litState * 0x300\n\tprobs := c.probs[k : k+0x300]\n\tsymbol := uint32(1)\n\tif state >= 7 {\n\t\tm := uint32(match)\n\t\tfor {\n\t\t\tmatchBit := (m >> 7) & 1\n\t\t\tm <<= 1\n\t\t\ti := ((1 + matchBit) << 8) | symbol\n\t\t\tbit, err := d.DecodeBit(&probs[i])\n\t\t\tif err != nil {\n\t\t\t\treturn 0, err\n\t\t\t}\n\t\t\tsymbol = (symbol << 1) | bit\n\t\t\tif matchBit != bit {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif symbol >= 0x100 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\tfor symbol < 0x100 {\n\t\tbit, err := d.DecodeBit(&probs[symbol])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\tsymbol = (symbol << 1) | bit\n\t}\n\ts = byte(symbol - 0x100)\n\treturn s, nil\n}\n\n// minLC and maxLC define the range for LC values.\nconst (\n\tminLC = 0\n\tmaxLC = 8\n)\n\n// minLC and maxLC define the range for LP values.\nconst (\n\tminLP = 0\n\tmaxLP = 4\n)\n\n// minState and maxState define a range for the state values stored in\n// the State values.\nconst (\n\tminState = 0\n\tmaxState = 11\n)\n"
  },
  {
    "path": "vendor/github.com/ulikunitz/xz/lzma/matchalgorithm.go",
    "content": "// Copyright 2014-2017 Ulrich Kunitz. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage lzma\n\nimport \"errors\"\n\n// MatchAlgorithm identifies an algorithm to find matches in the\n// dictionary.\ntype MatchAlgorithm byte\n\n// Supported matcher algorithms.\nconst (\n\tHashTable4 MatchAlgorithm = iota\n\tBinaryTree\n)\n\n// maStrings are used by the String method.\nvar maStrings = map[MatchAlgorithm]string{\n\tHashTable4: \"HashTable4\",\n\tBinaryTree: \"BinaryTree\",\n}\n\n// String returns a string representation of the Matcher.\nfunc (a MatchAlgorithm) String() string {\n\tif s, ok := maStrings[a]; ok {\n\t\treturn s\n\t}\n\treturn \"unknown\"\n}\n\nvar errUnsupportedMatchAlgorithm = errors.New(\n\t\"lzma: unsupported match algorithm value\")\n\n// verify checks whether the matcher value is supported.\nfunc (a MatchAlgorithm) verify() error {\n\tif _, ok := maStrings[a]; !ok {\n\t\treturn errUnsupportedMatchAlgorithm\n\t}\n\treturn nil\n}\n\nfunc (a MatchAlgorithm) new(dictCap int) (m matcher, err error) {\n\tswitch a {\n\tcase HashTable4:\n\t\treturn newHashTable(dictCap, 4)\n\tcase BinaryTree:\n\t\treturn newBinTree(dictCap)\n\t}\n\treturn nil, errUnsupportedMatchAlgorithm\n}\n"
  },
  {
    "path": "vendor/github.com/ulikunitz/xz/lzma/operation.go",
    "content": "// Copyright 2014-2017 Ulrich Kunitz. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage lzma\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"unicode\"\n)\n\n// operation represents an operation on the dictionary during encoding or\n// decoding.\ntype operation interface {\n\tLen() int\n}\n\n// rep represents a repetition at the given distance and the given length\ntype match struct {\n\t// supports all possible distance values, including the eos marker\n\tdistance int64\n\t// length\n\tn int\n}\n\n// verify checks whether the match is valid. If that is not the case an\n// error is returned.\nfunc (m match) verify() error {\n\tif !(minDistance <= m.distance && m.distance <= maxDistance) {\n\t\treturn errors.New(\"distance out of range\")\n\t}\n\tif !(1 <= m.n && m.n <= maxMatchLen) {\n\t\treturn errors.New(\"length out of range\")\n\t}\n\treturn nil\n}\n\n// l return the l-value for the match, which is the difference of length\n// n and 2.\nfunc (m match) l() uint32 {\n\treturn uint32(m.n - minMatchLen)\n}\n\n// dist returns the dist value for the match, which is one less of the\n// distance stored in the match.\nfunc (m match) dist() uint32 {\n\treturn uint32(m.distance - minDistance)\n}\n\n// Len returns the number of bytes matched.\nfunc (m match) Len() int {\n\treturn m.n\n}\n\n// String returns a string representation for the repetition.\nfunc (m match) String() string {\n\treturn fmt.Sprintf(\"M{%d,%d}\", m.distance, m.n)\n}\n\n// lit represents a single byte literal.\ntype lit struct {\n\tb byte\n}\n\n// Len returns 1 for the single byte literal.\nfunc (l lit) Len() int {\n\treturn 1\n}\n\n// String returns a string representation for the literal.\nfunc (l lit) String() string {\n\tvar c byte\n\tif unicode.IsPrint(rune(l.b)) {\n\t\tc = l.b\n\t} else {\n\t\tc = '.'\n\t}\n\treturn fmt.Sprintf(\"L{%c/%02x}\", c, l.b)\n}\n"
  },
  {
    "path": "vendor/github.com/ulikunitz/xz/lzma/prob.go",
    "content": "// Copyright 2014-2017 Ulrich Kunitz. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage lzma\n\n// movebits defines the number of bits used for the updates of probability\n// values.\nconst movebits = 5\n\n// probbits defines the number of bits of a probability value.\nconst probbits = 11\n\n// probInit defines 0.5 as initial value for prob values.\nconst probInit prob = 1 << (probbits - 1)\n\n// Type prob represents probabilities. The type can also be used to encode and\n// decode single bits.\ntype prob uint16\n\n// Dec decreases the probability. The decrease is proportional to the\n// probability value.\nfunc (p *prob) dec() {\n\t*p -= *p >> movebits\n}\n\n// Inc increases the probability. The Increase is proportional to the\n// difference of 1 and the probability value.\nfunc (p *prob) inc() {\n\t*p += ((1 << probbits) - *p) >> movebits\n}\n\n// Computes the new bound for a given range using the probability value.\nfunc (p prob) bound(r uint32) uint32 {\n\treturn (r >> probbits) * uint32(p)\n}\n\n// Bits returns 1. One is the number of bits that can be encoded or decoded\n// with a single prob value.\nfunc (p prob) Bits() int {\n\treturn 1\n}\n\n// Encode encodes the least-significant bit of v. Note that the p value will be\n// changed.\nfunc (p *prob) Encode(e *rangeEncoder, v uint32) error {\n\treturn e.EncodeBit(v, p)\n}\n\n// Decode decodes a single bit. Note that the p value will change.\nfunc (p *prob) Decode(d *rangeDecoder) (v uint32, err error) {\n\treturn d.DecodeBit(p)\n}\n"
  },
  {
    "path": "vendor/github.com/ulikunitz/xz/lzma/properties.go",
    "content": "// Copyright 2014-2017 Ulrich Kunitz. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage lzma\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n)\n\n// maximum and minimum values for the LZMA properties.\nconst (\n\tminPB = 0\n\tmaxPB = 4\n)\n\n// maxPropertyCode is the possible maximum of a properties code byte.\nconst maxPropertyCode = (maxPB+1)*(maxLP+1)*(maxLC+1) - 1\n\n// Properties contains the parameters LC, LP and PB. The parameter LC\n// defines the number of literal context bits; parameter LP the number\n// of literal position bits and PB the number of position bits.\ntype Properties struct {\n\tLC int\n\tLP int\n\tPB int\n}\n\n// String returns the properties in a string representation.\nfunc (p *Properties) String() string {\n\treturn fmt.Sprintf(\"LC %d LP %d PB %d\", p.LC, p.LP, p.PB)\n}\n\n// PropertiesForCode converts a properties code byte into a Properties value.\nfunc PropertiesForCode(code byte) (p Properties, err error) {\n\tif code > maxPropertyCode {\n\t\treturn p, errors.New(\"lzma: invalid properties code\")\n\t}\n\tp.LC = int(code % 9)\n\tcode /= 9\n\tp.LP = int(code % 5)\n\tcode /= 5\n\tp.PB = int(code % 5)\n\treturn p, err\n}\n\n// verify checks the properties for correctness.\nfunc (p *Properties) verify() error {\n\tif p == nil {\n\t\treturn errors.New(\"lzma: properties are nil\")\n\t}\n\tif !(minLC <= p.LC && p.LC <= maxLC) {\n\t\treturn errors.New(\"lzma: lc out of range\")\n\t}\n\tif !(minLP <= p.LP && p.LP <= maxLP) {\n\t\treturn errors.New(\"lzma: lp out of range\")\n\t}\n\tif !(minPB <= p.PB && p.PB <= maxPB) {\n\t\treturn errors.New(\"lzma: pb out of range\")\n\t}\n\treturn nil\n}\n\n// Code converts the properties to a byte. The function assumes that\n// the properties components are all in range.\nfunc (p Properties) Code() byte {\n\treturn byte((p.PB*5+p.LP)*9 + p.LC)\n}\n"
  },
  {
    "path": "vendor/github.com/ulikunitz/xz/lzma/rangecodec.go",
    "content": "// Copyright 2014-2017 Ulrich Kunitz. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage lzma\n\nimport (\n\t\"errors\"\n\t\"io\"\n)\n\n// rangeEncoder implements range encoding of single bits. The low value can\n// overflow therefore we need uint64. The cache value is used to handle\n// overflows.\ntype rangeEncoder struct {\n\tlbw      *LimitedByteWriter\n\tnrange   uint32\n\tlow      uint64\n\tcacheLen int64\n\tcache    byte\n}\n\n// maxInt64 provides the  maximal value of the int64 type\nconst maxInt64 = 1<<63 - 1\n\n// newRangeEncoder creates a new range encoder.\nfunc newRangeEncoder(bw io.ByteWriter) (re *rangeEncoder, err error) {\n\tlbw, ok := bw.(*LimitedByteWriter)\n\tif !ok {\n\t\tlbw = &LimitedByteWriter{BW: bw, N: maxInt64}\n\t}\n\treturn &rangeEncoder{\n\t\tlbw:      lbw,\n\t\tnrange:   0xffffffff,\n\t\tcacheLen: 1}, nil\n}\n\n// Available returns the number of bytes that still can be written. The\n// method takes the bytes that will be currently written by Close into\n// account.\nfunc (e *rangeEncoder) Available() int64 {\n\treturn e.lbw.N - (e.cacheLen + 4)\n}\n\n// writeByte writes a single byte to the underlying writer. An error is\n// returned if the limit is reached. The written byte will be counted if\n// the underlying writer doesn't return an error.\nfunc (e *rangeEncoder) writeByte(c byte) error {\n\tif e.Available() < 1 {\n\t\treturn ErrLimit\n\t}\n\treturn e.lbw.WriteByte(c)\n}\n\n// DirectEncodeBit encodes the least-significant bit of b with probability 1/2.\nfunc (e *rangeEncoder) DirectEncodeBit(b uint32) error {\n\te.nrange >>= 1\n\te.low += uint64(e.nrange) & (0 - (uint64(b) & 1))\n\n\t// normalize\n\tconst top = 1 << 24\n\tif e.nrange >= top {\n\t\treturn nil\n\t}\n\te.nrange <<= 8\n\treturn e.shiftLow()\n}\n\n// EncodeBit encodes the least significant bit of b. The p value will be\n// updated by the function depending on the bit encoded.\nfunc (e *rangeEncoder) EncodeBit(b uint32, p *prob) error {\n\tbound := p.bound(e.nrange)\n\tif b&1 == 0 {\n\t\te.nrange = bound\n\t\tp.inc()\n\t} else {\n\t\te.low += uint64(bound)\n\t\te.nrange -= bound\n\t\tp.dec()\n\t}\n\n\t// normalize\n\tconst top = 1 << 24\n\tif e.nrange >= top {\n\t\treturn nil\n\t}\n\te.nrange <<= 8\n\treturn e.shiftLow()\n}\n\n// Close writes a complete copy of the low value.\nfunc (e *rangeEncoder) Close() error {\n\tfor i := 0; i < 5; i++ {\n\t\tif err := e.shiftLow(); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// shiftLow shifts the low value for 8 bit. The shifted byte is written into\n// the byte writer. The cache value is used to handle overflows.\nfunc (e *rangeEncoder) shiftLow() error {\n\tif uint32(e.low) < 0xff000000 || (e.low>>32) != 0 {\n\t\ttmp := e.cache\n\t\tfor {\n\t\t\terr := e.writeByte(tmp + byte(e.low>>32))\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\ttmp = 0xff\n\t\t\te.cacheLen--\n\t\t\tif e.cacheLen <= 0 {\n\t\t\t\tif e.cacheLen < 0 {\n\t\t\t\t\tpanic(\"negative cacheLen\")\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\te.cache = byte(uint32(e.low) >> 24)\n\t}\n\te.cacheLen++\n\te.low = uint64(uint32(e.low) << 8)\n\treturn nil\n}\n\n// rangeDecoder decodes single bits of the range encoding stream.\ntype rangeDecoder struct {\n\tbr     io.ByteReader\n\tnrange uint32\n\tcode   uint32\n}\n\n// init initializes the range decoder, by reading from the byte reader.\nfunc (d *rangeDecoder) init() error {\n\td.nrange = 0xffffffff\n\td.code = 0\n\n\tb, err := d.br.ReadByte()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif b != 0 {\n\t\treturn errors.New(\"newRangeDecoder: first byte not zero\")\n\t}\n\n\tfor i := 0; i < 4; i++ {\n\t\tif err = d.updateCode(); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tif d.code >= d.nrange {\n\t\treturn errors.New(\"newRangeDecoder: d.code >= d.nrange\")\n\t}\n\n\treturn nil\n}\n\n// newRangeDecoder initializes a range decoder. It reads five bytes from the\n// reader and therefore may return an error.\nfunc newRangeDecoder(br io.ByteReader) (d *rangeDecoder, err error) {\n\td = &rangeDecoder{br: br, nrange: 0xffffffff}\n\n\tb, err := d.br.ReadByte()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif b != 0 {\n\t\treturn nil, errors.New(\"newRangeDecoder: first byte not zero\")\n\t}\n\n\tfor i := 0; i < 4; i++ {\n\t\tif err = d.updateCode(); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\tif d.code >= d.nrange {\n\t\treturn nil, errors.New(\"newRangeDecoder: d.code >= d.nrange\")\n\t}\n\n\treturn d, nil\n}\n\n// possiblyAtEnd checks whether the decoder may be at the end of the stream.\nfunc (d *rangeDecoder) possiblyAtEnd() bool {\n\treturn d.code == 0\n}\n\n// DirectDecodeBit decodes a bit with probability 1/2. The return value b will\n// contain the bit at the least-significant position. All other bits will be\n// zero.\nfunc (d *rangeDecoder) DirectDecodeBit() (b uint32, err error) {\n\td.nrange >>= 1\n\td.code -= d.nrange\n\tt := 0 - (d.code >> 31)\n\td.code += d.nrange & t\n\tb = (t + 1) & 1\n\n\t// d.code will stay less then d.nrange\n\n\t// normalize\n\t// assume d.code < d.nrange\n\tconst top = 1 << 24\n\tif d.nrange >= top {\n\t\treturn b, nil\n\t}\n\td.nrange <<= 8\n\t// d.code < d.nrange will be maintained\n\treturn b, d.updateCode()\n}\n\n// decodeBit decodes a single bit. The bit will be returned at the\n// least-significant position. All other bits will be zero. The probability\n// value will be updated.\nfunc (d *rangeDecoder) DecodeBit(p *prob) (b uint32, err error) {\n\tbound := p.bound(d.nrange)\n\tif d.code < bound {\n\t\td.nrange = bound\n\t\tp.inc()\n\t\tb = 0\n\t} else {\n\t\td.code -= bound\n\t\td.nrange -= bound\n\t\tp.dec()\n\t\tb = 1\n\t}\n\t// normalize\n\t// assume d.code < d.nrange\n\tconst top = 1 << 24\n\tif d.nrange >= top {\n\t\treturn b, nil\n\t}\n\td.nrange <<= 8\n\t// d.code < d.nrange will be maintained\n\treturn b, d.updateCode()\n}\n\n// updateCode reads a new byte into the code.\nfunc (d *rangeDecoder) updateCode() error {\n\tb, err := d.br.ReadByte()\n\tif err != nil {\n\t\treturn err\n\t}\n\td.code = (d.code << 8) | uint32(b)\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/ulikunitz/xz/lzma/reader.go",
    "content": "// Copyright 2014-2017 Ulrich Kunitz. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package lzma supports the decoding and encoding of LZMA streams.\n// Reader and Writer support the classic LZMA format. Reader2 and\n// Writer2 support the decoding and encoding of LZMA2 streams.\n//\n// The package is written completely in Go and doesn't rely on any external\n// library.\npackage lzma\n\nimport (\n\t\"errors\"\n\t\"io\"\n)\n\n// ReaderConfig stores the parameters for the reader of the classic LZMA\n// format.\ntype ReaderConfig struct {\n\tDictCap int\n}\n\n// fill converts the zero values of the configuration to the default values.\nfunc (c *ReaderConfig) fill() {\n\tif c.DictCap == 0 {\n\t\tc.DictCap = 8 * 1024 * 1024\n\t}\n}\n\n// Verify checks the reader configuration for errors. Zero values will\n// be replaced by default values.\nfunc (c *ReaderConfig) Verify() error {\n\tc.fill()\n\tif !(MinDictCap <= c.DictCap && int64(c.DictCap) <= MaxDictCap) {\n\t\treturn errors.New(\"lzma: dictionary capacity is out of range\")\n\t}\n\treturn nil\n}\n\n// Reader provides a reader for LZMA files or streams.\ntype Reader struct {\n\tlzma io.Reader\n\th    header\n\td    *decoder\n}\n\n// NewReader creates a new reader for an LZMA stream using the classic\n// format. NewReader reads and checks the header of the LZMA stream.\nfunc NewReader(lzma io.Reader) (r *Reader, err error) {\n\treturn ReaderConfig{}.NewReader(lzma)\n}\n\n// NewReader creates a new reader for an LZMA stream in the classic\n// format. The function reads and verifies the the header of the LZMA\n// stream.\nfunc (c ReaderConfig) NewReader(lzma io.Reader) (r *Reader, err error) {\n\tif err = c.Verify(); err != nil {\n\t\treturn nil, err\n\t}\n\tdata := make([]byte, HeaderLen)\n\tif _, err := io.ReadFull(lzma, data); err != nil {\n\t\tif err == io.EOF {\n\t\t\treturn nil, errors.New(\"lzma: unexpected EOF\")\n\t\t}\n\t\treturn nil, err\n\t}\n\tr = &Reader{lzma: lzma}\n\tif err = r.h.unmarshalBinary(data); err != nil {\n\t\treturn nil, err\n\t}\n\tif r.h.dictCap < MinDictCap {\n\t\treturn nil, errors.New(\"lzma: dictionary capacity too small\")\n\t}\n\tdictCap := r.h.dictCap\n\tif c.DictCap > dictCap {\n\t\tdictCap = c.DictCap\n\t}\n\n\tstate := newState(r.h.properties)\n\tdict, err := newDecoderDict(dictCap)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tr.d, err = newDecoder(ByteReader(lzma), state, dict, r.h.size)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn r, nil\n}\n\n// EOSMarker indicates that an EOS marker has been encountered.\nfunc (r *Reader) EOSMarker() bool {\n\treturn r.d.eosMarker\n}\n\n// Read returns uncompressed data.\nfunc (r *Reader) Read(p []byte) (n int, err error) {\n\treturn r.d.Read(p)\n}\n"
  },
  {
    "path": "vendor/github.com/ulikunitz/xz/lzma/reader2.go",
    "content": "// Copyright 2014-2017 Ulrich Kunitz. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage lzma\n\nimport (\n\t\"errors\"\n\t\"io\"\n\n\t\"github.com/ulikunitz/xz/internal/xlog\"\n)\n\n// Reader2Config stores the parameters for the LZMA2 reader.\n// format.\ntype Reader2Config struct {\n\tDictCap int\n}\n\n// fill converts the zero values of the configuration to the default values.\nfunc (c *Reader2Config) fill() {\n\tif c.DictCap == 0 {\n\t\tc.DictCap = 8 * 1024 * 1024\n\t}\n}\n\n// Verify checks the reader configuration for errors. Zero configuration values\n// will be replaced by default values.\nfunc (c *Reader2Config) Verify() error {\n\tc.fill()\n\tif !(MinDictCap <= c.DictCap && int64(c.DictCap) <= MaxDictCap) {\n\t\treturn errors.New(\"lzma: dictionary capacity is out of range\")\n\t}\n\treturn nil\n}\n\n// Reader2 supports the reading of LZMA2 chunk sequences. Note that the\n// first chunk should have a dictionary reset and the first compressed\n// chunk a properties reset. The chunk sequence may not be terminated by\n// an end-of-stream chunk.\ntype Reader2 struct {\n\tr   io.Reader\n\terr error\n\n\tdict        *decoderDict\n\tur          *uncompressedReader\n\tdecoder     *decoder\n\tchunkReader io.Reader\n\n\tcstate chunkState\n\tctype  chunkType\n}\n\n// NewReader2 creates a reader for an LZMA2 chunk sequence.\nfunc NewReader2(lzma2 io.Reader) (r *Reader2, err error) {\n\treturn Reader2Config{}.NewReader2(lzma2)\n}\n\n// NewReader2 creates an LZMA2 reader using the given configuration.\nfunc (c Reader2Config) NewReader2(lzma2 io.Reader) (r *Reader2, err error) {\n\tif err = c.Verify(); err != nil {\n\t\treturn nil, err\n\t}\n\tr = &Reader2{r: lzma2, cstate: start}\n\tr.dict, err = newDecoderDict(c.DictCap)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif err = r.startChunk(); err != nil {\n\t\tr.err = err\n\t}\n\treturn r, nil\n}\n\n// uncompressed tests whether the chunk type specifies an uncompressed\n// chunk.\nfunc uncompressed(ctype chunkType) bool {\n\treturn ctype == cU || ctype == cUD\n}\n\n// startChunk parses a new chunk.\nfunc (r *Reader2) startChunk() error {\n\tr.chunkReader = nil\n\theader, err := readChunkHeader(r.r)\n\tif err != nil {\n\t\tif err == io.EOF {\n\t\t\terr = io.ErrUnexpectedEOF\n\t\t}\n\t\treturn err\n\t}\n\txlog.Debugf(\"chunk header %v\", header)\n\tif err = r.cstate.next(header.ctype); err != nil {\n\t\treturn err\n\t}\n\tif r.cstate == stop {\n\t\treturn io.EOF\n\t}\n\tif header.ctype == cUD || header.ctype == cLRND {\n\t\tr.dict.Reset()\n\t}\n\tsize := int64(header.uncompressed) + 1\n\tif uncompressed(header.ctype) {\n\t\tif r.ur != nil {\n\t\t\tr.ur.Reopen(r.r, size)\n\t\t} else {\n\t\t\tr.ur = newUncompressedReader(r.r, r.dict, size)\n\t\t}\n\t\tr.chunkReader = r.ur\n\t\treturn nil\n\t}\n\tbr := ByteReader(io.LimitReader(r.r, int64(header.compressed)+1))\n\tif r.decoder == nil {\n\t\tstate := newState(header.props)\n\t\tr.decoder, err = newDecoder(br, state, r.dict, size)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tr.chunkReader = r.decoder\n\t\treturn nil\n\t}\n\tswitch header.ctype {\n\tcase cLR:\n\t\tr.decoder.State.Reset()\n\tcase cLRN, cLRND:\n\t\tr.decoder.State = newState(header.props)\n\t}\n\terr = r.decoder.Reopen(br, size)\n\tif err != nil {\n\t\treturn err\n\t}\n\tr.chunkReader = r.decoder\n\treturn nil\n}\n\n// Read reads data from the LZMA2 chunk sequence.\nfunc (r *Reader2) Read(p []byte) (n int, err error) {\n\tif r.err != nil {\n\t\treturn 0, r.err\n\t}\n\tfor n < len(p) {\n\t\tvar k int\n\t\tk, err = r.chunkReader.Read(p[n:])\n\t\tn += k\n\t\tif err != nil {\n\t\t\tif err == io.EOF {\n\t\t\t\terr = r.startChunk()\n\t\t\t\tif err == nil {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\t\t\tr.err = err\n\t\t\treturn n, err\n\t\t}\n\t\tif k == 0 {\n\t\t\tr.err = errors.New(\"lzma: Reader2 doesn't get data\")\n\t\t\treturn n, r.err\n\t\t}\n\t}\n\treturn n, nil\n}\n\n// EOS returns whether the LZMA2 stream has been terminated by an\n// end-of-stream chunk.\nfunc (r *Reader2) EOS() bool {\n\treturn r.cstate == stop\n}\n\n// uncompressedReader is used to read uncompressed chunks.\ntype uncompressedReader struct {\n\tlr   io.LimitedReader\n\tDict *decoderDict\n\teof  bool\n\terr  error\n}\n\n// newUncompressedReader initializes a new uncompressedReader.\nfunc newUncompressedReader(r io.Reader, dict *decoderDict, size int64) *uncompressedReader {\n\tur := &uncompressedReader{\n\t\tlr:   io.LimitedReader{R: r, N: size},\n\t\tDict: dict,\n\t}\n\treturn ur\n}\n\n// Reopen reinitializes an uncompressed reader.\nfunc (ur *uncompressedReader) Reopen(r io.Reader, size int64) {\n\tur.err = nil\n\tur.eof = false\n\tur.lr = io.LimitedReader{R: r, N: size}\n}\n\n// fill reads uncompressed data into the dictionary.\nfunc (ur *uncompressedReader) fill() error {\n\tif !ur.eof {\n\t\tn, err := io.CopyN(ur.Dict, &ur.lr, int64(ur.Dict.Available()))\n\t\tif err != io.EOF {\n\t\t\treturn err\n\t\t}\n\t\tur.eof = true\n\t\tif n > 0 {\n\t\t\treturn nil\n\t\t}\n\t}\n\tif ur.lr.N != 0 {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\treturn io.EOF\n}\n\n// Read reads uncompressed data from the limited reader.\nfunc (ur *uncompressedReader) Read(p []byte) (n int, err error) {\n\tif ur.err != nil {\n\t\treturn 0, ur.err\n\t}\n\tfor {\n\t\tvar k int\n\t\tk, err = ur.Dict.Read(p[n:])\n\t\tn += k\n\t\tif n >= len(p) {\n\t\t\treturn n, nil\n\t\t}\n\t\tif err != nil {\n\t\t\tbreak\n\t\t}\n\t\terr = ur.fill()\n\t\tif err != nil {\n\t\t\tbreak\n\t\t}\n\t}\n\tur.err = err\n\treturn n, err\n}\n"
  },
  {
    "path": "vendor/github.com/ulikunitz/xz/lzma/state.go",
    "content": "// Copyright 2014-2017 Ulrich Kunitz. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage lzma\n\n// states defines the overall state count\nconst states = 12\n\n// State maintains the full state of the operation encoding or decoding\n// process.\ntype state struct {\n\trep         [4]uint32\n\tisMatch     [states << maxPosBits]prob\n\tisRepG0Long [states << maxPosBits]prob\n\tisRep       [states]prob\n\tisRepG0     [states]prob\n\tisRepG1     [states]prob\n\tisRepG2     [states]prob\n\tlitCodec    literalCodec\n\tlenCodec    lengthCodec\n\trepLenCodec lengthCodec\n\tdistCodec   distCodec\n\tstate       uint32\n\tposBitMask  uint32\n\tProperties  Properties\n}\n\n// initProbSlice initializes a slice of probabilities.\nfunc initProbSlice(p []prob) {\n\tfor i := range p {\n\t\tp[i] = probInit\n\t}\n}\n\n// Reset sets all state information to the original values.\nfunc (s *state) Reset() {\n\tp := s.Properties\n\t*s = state{\n\t\tProperties: p,\n\t\t// dict:       s.dict,\n\t\tposBitMask: (uint32(1) << uint(p.PB)) - 1,\n\t}\n\tinitProbSlice(s.isMatch[:])\n\tinitProbSlice(s.isRep[:])\n\tinitProbSlice(s.isRepG0[:])\n\tinitProbSlice(s.isRepG1[:])\n\tinitProbSlice(s.isRepG2[:])\n\tinitProbSlice(s.isRepG0Long[:])\n\ts.litCodec.init(p.LC, p.LP)\n\ts.lenCodec.init()\n\ts.repLenCodec.init()\n\ts.distCodec.init()\n}\n\n// initState initializes the state.\nfunc initState(s *state, p Properties) {\n\t*s = state{Properties: p}\n\ts.Reset()\n}\n\n// newState creates a new state from the give Properties.\nfunc newState(p Properties) *state {\n\ts := &state{Properties: p}\n\ts.Reset()\n\treturn s\n}\n\n// deepcopy initializes s as a deep copy of the source.\nfunc (s *state) deepcopy(src *state) {\n\tif s == src {\n\t\treturn\n\t}\n\ts.rep = src.rep\n\ts.isMatch = src.isMatch\n\ts.isRepG0Long = src.isRepG0Long\n\ts.isRep = src.isRep\n\ts.isRepG0 = src.isRepG0\n\ts.isRepG1 = src.isRepG1\n\ts.isRepG2 = src.isRepG2\n\ts.litCodec.deepcopy(&src.litCodec)\n\ts.lenCodec.deepcopy(&src.lenCodec)\n\ts.repLenCodec.deepcopy(&src.repLenCodec)\n\ts.distCodec.deepcopy(&src.distCodec)\n\ts.state = src.state\n\ts.posBitMask = src.posBitMask\n\ts.Properties = src.Properties\n}\n\n// cloneState creates a new clone of the give state.\nfunc cloneState(src *state) *state {\n\ts := new(state)\n\ts.deepcopy(src)\n\treturn s\n}\n\n// updateStateLiteral updates the state for a literal.\nfunc (s *state) updateStateLiteral() {\n\tswitch {\n\tcase s.state < 4:\n\t\ts.state = 0\n\t\treturn\n\tcase s.state < 10:\n\t\ts.state -= 3\n\t\treturn\n\t}\n\ts.state -= 6\n}\n\n// updateStateMatch updates the state for a match.\nfunc (s *state) updateStateMatch() {\n\tif s.state < 7 {\n\t\ts.state = 7\n\t} else {\n\t\ts.state = 10\n\t}\n}\n\n// updateStateRep updates the state for a repetition.\nfunc (s *state) updateStateRep() {\n\tif s.state < 7 {\n\t\ts.state = 8\n\t} else {\n\t\ts.state = 11\n\t}\n}\n\n// updateStateShortRep updates the state for a short repetition.\nfunc (s *state) updateStateShortRep() {\n\tif s.state < 7 {\n\t\ts.state = 9\n\t} else {\n\t\ts.state = 11\n\t}\n}\n\n// states computes the states of the operation codec.\nfunc (s *state) states(dictHead int64) (state1, state2, posState uint32) {\n\tstate1 = s.state\n\tposState = uint32(dictHead) & s.posBitMask\n\tstate2 = (s.state << maxPosBits) | posState\n\treturn\n}\n\n// litState computes the literal state.\nfunc (s *state) litState(prev byte, dictHead int64) uint32 {\n\tlp, lc := uint(s.Properties.LP), uint(s.Properties.LC)\n\tlitState := ((uint32(dictHead) & ((1 << lp) - 1)) << lc) |\n\t\t(uint32(prev) >> (8 - lc))\n\treturn litState\n}\n"
  },
  {
    "path": "vendor/github.com/ulikunitz/xz/lzma/treecodecs.go",
    "content": "// Copyright 2014-2017 Ulrich Kunitz. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage lzma\n\n// treeCodec encodes or decodes values with a fixed bit size. It is using a\n// tree of probability value. The root of the tree is the most-significant bit.\ntype treeCodec struct {\n\tprobTree\n}\n\n// makeTreeCodec makes a tree codec. The bits value must be inside the range\n// [1,32].\nfunc makeTreeCodec(bits int) treeCodec {\n\treturn treeCodec{makeProbTree(bits)}\n}\n\n// deepcopy initializes tc as a deep copy of the source.\nfunc (tc *treeCodec) deepcopy(src *treeCodec) {\n\ttc.probTree.deepcopy(&src.probTree)\n}\n\n// Encode uses the range encoder to encode a fixed-bit-size value.\nfunc (tc *treeCodec) Encode(e *rangeEncoder, v uint32) (err error) {\n\tm := uint32(1)\n\tfor i := int(tc.bits) - 1; i >= 0; i-- {\n\t\tb := (v >> uint(i)) & 1\n\t\tif err := e.EncodeBit(b, &tc.probs[m]); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tm = (m << 1) | b\n\t}\n\treturn nil\n}\n\n// Decodes uses the range decoder to decode a fixed-bit-size value. Errors may\n// be caused by the range decoder.\nfunc (tc *treeCodec) Decode(d *rangeDecoder) (v uint32, err error) {\n\tm := uint32(1)\n\tfor j := 0; j < int(tc.bits); j++ {\n\t\tb, err := d.DecodeBit(&tc.probs[m])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\tm = (m << 1) | b\n\t}\n\treturn m - (1 << uint(tc.bits)), nil\n}\n\n// treeReverseCodec is another tree codec, where the least-significant bit is\n// the start of the probability tree.\ntype treeReverseCodec struct {\n\tprobTree\n}\n\n// deepcopy initializes the treeReverseCodec as a deep copy of the\n// source.\nfunc (tc *treeReverseCodec) deepcopy(src *treeReverseCodec) {\n\ttc.probTree.deepcopy(&src.probTree)\n}\n\n// makeTreeReverseCodec creates treeReverseCodec value. The bits argument must\n// be in the range [1,32].\nfunc makeTreeReverseCodec(bits int) treeReverseCodec {\n\treturn treeReverseCodec{makeProbTree(bits)}\n}\n\n// Encode uses range encoder to encode a fixed-bit-size value. The range\n// encoder may cause errors.\nfunc (tc *treeReverseCodec) Encode(v uint32, e *rangeEncoder) (err error) {\n\tm := uint32(1)\n\tfor i := uint(0); i < uint(tc.bits); i++ {\n\t\tb := (v >> i) & 1\n\t\tif err := e.EncodeBit(b, &tc.probs[m]); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tm = (m << 1) | b\n\t}\n\treturn nil\n}\n\n// Decodes uses the range decoder to decode a fixed-bit-size value. Errors\n// returned by the range decoder will be returned.\nfunc (tc *treeReverseCodec) Decode(d *rangeDecoder) (v uint32, err error) {\n\tm := uint32(1)\n\tfor j := uint(0); j < uint(tc.bits); j++ {\n\t\tb, err := d.DecodeBit(&tc.probs[m])\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\tm = (m << 1) | b\n\t\tv |= b << j\n\t}\n\treturn v, nil\n}\n\n// probTree stores enough probability values to be used by the treeEncode and\n// treeDecode methods of the range coder types.\ntype probTree struct {\n\tprobs []prob\n\tbits  byte\n}\n\n// deepcopy initializes the probTree value as a deep copy of the source.\nfunc (t *probTree) deepcopy(src *probTree) {\n\tif t == src {\n\t\treturn\n\t}\n\tt.probs = make([]prob, len(src.probs))\n\tcopy(t.probs, src.probs)\n\tt.bits = src.bits\n}\n\n// makeProbTree initializes a probTree structure.\nfunc makeProbTree(bits int) probTree {\n\tif !(1 <= bits && bits <= 32) {\n\t\tpanic(\"bits outside of range [1,32]\")\n\t}\n\tt := probTree{\n\t\tbits:  byte(bits),\n\t\tprobs: make([]prob, 1<<uint(bits)),\n\t}\n\tfor i := range t.probs {\n\t\tt.probs[i] = probInit\n\t}\n\treturn t\n}\n\n// Bits provides the number of bits for the values to de- or encode.\nfunc (t *probTree) Bits() int {\n\treturn int(t.bits)\n}\n"
  },
  {
    "path": "vendor/github.com/ulikunitz/xz/lzma/writer.go",
    "content": "// Copyright 2014-2017 Ulrich Kunitz. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage lzma\n\nimport (\n\t\"bufio\"\n\t\"errors\"\n\t\"io\"\n)\n\n// MinDictCap and MaxDictCap provide the range of supported dictionary\n// capacities.\nconst (\n\tMinDictCap = 1 << 12\n\tMaxDictCap = 1<<32 - 1\n)\n\n// WriterConfig defines the configuration parameter for a writer.\ntype WriterConfig struct {\n\t// Properties for the encoding. If the it is nil the value\n\t// {LC: 3, LP: 0, PB: 2} will be chosen.\n\tProperties *Properties\n\t// The capacity of the dictionary. If DictCap is zero, the value\n\t// 8 MiB will be chosen.\n\tDictCap int\n\t// Size of the lookahead buffer; value 0 indicates default size\n\t// 4096\n\tBufSize int\n\t// Match algorithm\n\tMatcher MatchAlgorithm\n\t// SizeInHeader indicates that the header will contain an\n\t// explicit size.\n\tSizeInHeader bool\n\t// Size of the data to be encoded. A positive value will imply\n\t// than an explicit size will be set in the header.\n\tSize int64\n\t// EOSMarker requests whether the EOSMarker needs to be written.\n\t// If no explicit size is been given the EOSMarker will be\n\t// set automatically.\n\tEOSMarker bool\n}\n\n// fill converts zero-value fields to their explicit default values.\nfunc (c *WriterConfig) fill() {\n\tif c.Properties == nil {\n\t\tc.Properties = &Properties{LC: 3, LP: 0, PB: 2}\n\t}\n\tif c.DictCap == 0 {\n\t\tc.DictCap = 8 * 1024 * 1024\n\t}\n\tif c.BufSize == 0 {\n\t\tc.BufSize = 4096\n\t}\n\tif c.Size > 0 {\n\t\tc.SizeInHeader = true\n\t}\n\tif !c.SizeInHeader {\n\t\tc.EOSMarker = true\n\t}\n}\n\n// Verify checks WriterConfig for errors. Verify will replace zero\n// values with default values.\nfunc (c *WriterConfig) Verify() error {\n\tc.fill()\n\tvar err error\n\tif c == nil {\n\t\treturn errors.New(\"lzma: WriterConfig is nil\")\n\t}\n\tif c.Properties == nil {\n\t\treturn errors.New(\"lzma: WriterConfig has no Properties set\")\n\t}\n\tif err = c.Properties.verify(); err != nil {\n\t\treturn err\n\t}\n\tif !(MinDictCap <= c.DictCap && int64(c.DictCap) <= MaxDictCap) {\n\t\treturn errors.New(\"lzma: dictionary capacity is out of range\")\n\t}\n\tif !(maxMatchLen <= c.BufSize) {\n\t\treturn errors.New(\"lzma: lookahead buffer size too small\")\n\t}\n\tif c.SizeInHeader {\n\t\tif c.Size < 0 {\n\t\t\treturn errors.New(\"lzma: negative size not supported\")\n\t\t}\n\t} else if !c.EOSMarker {\n\t\treturn errors.New(\"lzma: EOS marker is required\")\n\t}\n\tif err = c.Matcher.verify(); err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\n// header returns the header structure for this configuration.\nfunc (c *WriterConfig) header() header {\n\th := header{\n\t\tproperties: *c.Properties,\n\t\tdictCap:    c.DictCap,\n\t\tsize:       -1,\n\t}\n\tif c.SizeInHeader {\n\t\th.size = c.Size\n\t}\n\treturn h\n}\n\n// Writer writes an LZMA stream in the classic format.\ntype Writer struct {\n\th   header\n\tbw  io.ByteWriter\n\tbuf *bufio.Writer\n\te   *encoder\n}\n\n// NewWriter creates a new LZMA writer for the classic format. The\n// method will write the header to the underlying stream.\nfunc (c WriterConfig) NewWriter(lzma io.Writer) (w *Writer, err error) {\n\tif err = c.Verify(); err != nil {\n\t\treturn nil, err\n\t}\n\tw = &Writer{h: c.header()}\n\n\tvar ok bool\n\tw.bw, ok = lzma.(io.ByteWriter)\n\tif !ok {\n\t\tw.buf = bufio.NewWriter(lzma)\n\t\tw.bw = w.buf\n\t}\n\tstate := newState(w.h.properties)\n\tm, err := c.Matcher.new(w.h.dictCap)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdict, err := newEncoderDict(w.h.dictCap, c.BufSize, m)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tvar flags encoderFlags\n\tif c.EOSMarker {\n\t\tflags = eosMarker\n\t}\n\tif w.e, err = newEncoder(w.bw, state, dict, flags); err != nil {\n\t\treturn nil, err\n\t}\n\n\tif err = w.writeHeader(); err != nil {\n\t\treturn nil, err\n\t}\n\treturn w, nil\n}\n\n// NewWriter creates a new LZMA writer using the classic format. The\n// function writes the header to the underlying stream.\nfunc NewWriter(lzma io.Writer) (w *Writer, err error) {\n\treturn WriterConfig{}.NewWriter(lzma)\n}\n\n// writeHeader writes the LZMA header into the stream.\nfunc (w *Writer) writeHeader() error {\n\tdata, err := w.h.marshalBinary()\n\tif err != nil {\n\t\treturn err\n\t}\n\t_, err = w.bw.(io.Writer).Write(data)\n\treturn err\n}\n\n// Write puts data into the Writer.\nfunc (w *Writer) Write(p []byte) (n int, err error) {\n\tif w.h.size >= 0 {\n\t\tm := w.h.size\n\t\tm -= w.e.Compressed() + int64(w.e.dict.Buffered())\n\t\tif m < 0 {\n\t\t\tm = 0\n\t\t}\n\t\tif m < int64(len(p)) {\n\t\t\tp = p[:m]\n\t\t\terr = ErrNoSpace\n\t\t}\n\t}\n\tvar werr error\n\tif n, werr = w.e.Write(p); werr != nil {\n\t\terr = werr\n\t}\n\treturn n, err\n}\n\n// Close closes the writer stream. It ensures that all data from the\n// buffer will be compressed and the LZMA stream will be finished.\nfunc (w *Writer) Close() error {\n\tif w.h.size >= 0 {\n\t\tn := w.e.Compressed() + int64(w.e.dict.Buffered())\n\t\tif n != w.h.size {\n\t\t\treturn errSize\n\t\t}\n\t}\n\terr := w.e.Close()\n\tif w.buf != nil {\n\t\tferr := w.buf.Flush()\n\t\tif err == nil {\n\t\t\terr = ferr\n\t\t}\n\t}\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/ulikunitz/xz/lzma/writer2.go",
    "content": "// Copyright 2014-2017 Ulrich Kunitz. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage lzma\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"io\"\n)\n\n// Writer2Config is used to create a Writer2 using parameters.\ntype Writer2Config struct {\n\t// The properties for the encoding. If the it is nil the value\n\t// {LC: 3, LP: 0, PB: 2} will be chosen.\n\tProperties *Properties\n\t// The capacity of the dictionary. If DictCap is zero, the value\n\t// 8 MiB will be chosen.\n\tDictCap int\n\t// Size of the lookahead buffer; value 0 indicates default size\n\t// 4096\n\tBufSize int\n\t// Match algorithm\n\tMatcher MatchAlgorithm\n}\n\n// fill replaces zero values with default values.\nfunc (c *Writer2Config) fill() {\n\tif c.Properties == nil {\n\t\tc.Properties = &Properties{LC: 3, LP: 0, PB: 2}\n\t}\n\tif c.DictCap == 0 {\n\t\tc.DictCap = 8 * 1024 * 1024\n\t}\n\tif c.BufSize == 0 {\n\t\tc.BufSize = 4096\n\t}\n}\n\n// Verify checks the Writer2Config for correctness. Zero values will be\n// replaced by default values.\nfunc (c *Writer2Config) Verify() error {\n\tc.fill()\n\tvar err error\n\tif c == nil {\n\t\treturn errors.New(\"lzma: WriterConfig is nil\")\n\t}\n\tif c.Properties == nil {\n\t\treturn errors.New(\"lzma: WriterConfig has no Properties set\")\n\t}\n\tif err = c.Properties.verify(); err != nil {\n\t\treturn err\n\t}\n\tif !(MinDictCap <= c.DictCap && int64(c.DictCap) <= MaxDictCap) {\n\t\treturn errors.New(\"lzma: dictionary capacity is out of range\")\n\t}\n\tif !(maxMatchLen <= c.BufSize) {\n\t\treturn errors.New(\"lzma: lookahead buffer size too small\")\n\t}\n\tif c.Properties.LC+c.Properties.LP > 4 {\n\t\treturn errors.New(\"lzma: sum of lc and lp exceeds 4\")\n\t}\n\tif err = c.Matcher.verify(); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// Writer2 supports the creation of an LZMA2 stream. But note that\n// written data is buffered, so call Flush or Close to write data to the\n// underlying writer. The Close method writes the end-of-stream marker\n// to the stream. So you may be able to concatenate the output of two\n// writers as long the output of the first writer has only been flushed\n// but not closed.\n//\n// Any change to the fields Properties, DictCap must be done before the\n// first call to Write, Flush or Close.\ntype Writer2 struct {\n\tw io.Writer\n\n\tstart   *state\n\tencoder *encoder\n\n\tcstate chunkState\n\tctype  chunkType\n\n\tbuf bytes.Buffer\n\tlbw LimitedByteWriter\n}\n\n// NewWriter2 creates an LZMA2 chunk sequence writer with the default\n// parameters and options.\nfunc NewWriter2(lzma2 io.Writer) (w *Writer2, err error) {\n\treturn Writer2Config{}.NewWriter2(lzma2)\n}\n\n// NewWriter2 creates a new LZMA2 writer using the given configuration.\nfunc (c Writer2Config) NewWriter2(lzma2 io.Writer) (w *Writer2, err error) {\n\tif err = c.Verify(); err != nil {\n\t\treturn nil, err\n\t}\n\tw = &Writer2{\n\t\tw:      lzma2,\n\t\tstart:  newState(*c.Properties),\n\t\tcstate: start,\n\t\tctype:  start.defaultChunkType(),\n\t}\n\tw.buf.Grow(maxCompressed)\n\tw.lbw = LimitedByteWriter{BW: &w.buf, N: maxCompressed}\n\tm, err := c.Matcher.new(c.DictCap)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\td, err := newEncoderDict(c.DictCap, c.BufSize, m)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tw.encoder, err = newEncoder(&w.lbw, cloneState(w.start), d, 0)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn w, nil\n}\n\n// written returns the number of bytes written to the current chunk\nfunc (w *Writer2) written() int {\n\tif w.encoder == nil {\n\t\treturn 0\n\t}\n\treturn int(w.encoder.Compressed()) + w.encoder.dict.Buffered()\n}\n\n// errClosed indicates that the writer is closed.\nvar errClosed = errors.New(\"lzma: writer closed\")\n\n// Writes data to LZMA2 stream. Note that written data will be buffered.\n// Use Flush or Close to ensure that data is written to the underlying\n// writer.\nfunc (w *Writer2) Write(p []byte) (n int, err error) {\n\tif w.cstate == stop {\n\t\treturn 0, errClosed\n\t}\n\tfor n < len(p) {\n\t\tm := maxUncompressed - w.written()\n\t\tif m <= 0 {\n\t\t\tpanic(\"lzma: maxUncompressed reached\")\n\t\t}\n\t\tvar q []byte\n\t\tif n+m < len(p) {\n\t\t\tq = p[n : n+m]\n\t\t} else {\n\t\t\tq = p[n:]\n\t\t}\n\t\tk, err := w.encoder.Write(q)\n\t\tn += k\n\t\tif err != nil && err != ErrLimit {\n\t\t\treturn n, err\n\t\t}\n\t\tif err == ErrLimit || k == m {\n\t\t\tif err = w.flushChunk(); err != nil {\n\t\t\t\treturn n, err\n\t\t\t}\n\t\t}\n\t}\n\treturn n, nil\n}\n\n// writeUncompressedChunk writes an uncompressed chunk to the LZMA2\n// stream.\nfunc (w *Writer2) writeUncompressedChunk() error {\n\tu := w.encoder.Compressed()\n\tif u <= 0 {\n\t\treturn errors.New(\"lzma: can't write empty uncompressed chunk\")\n\t}\n\tif u > maxUncompressed {\n\t\tpanic(\"overrun of uncompressed data limit\")\n\t}\n\tswitch w.ctype {\n\tcase cLRND:\n\t\tw.ctype = cUD\n\tdefault:\n\t\tw.ctype = cU\n\t}\n\tw.encoder.state = w.start\n\n\theader := chunkHeader{\n\t\tctype:        w.ctype,\n\t\tuncompressed: uint32(u - 1),\n\t}\n\thdata, err := header.MarshalBinary()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif _, err = w.w.Write(hdata); err != nil {\n\t\treturn err\n\t}\n\t_, err = w.encoder.dict.CopyN(w.w, int(u))\n\treturn err\n}\n\n// writeCompressedChunk writes a compressed chunk to the underlying\n// writer.\nfunc (w *Writer2) writeCompressedChunk() error {\n\tif w.ctype == cU || w.ctype == cUD {\n\t\tpanic(\"chunk type uncompressed\")\n\t}\n\n\tu := w.encoder.Compressed()\n\tif u <= 0 {\n\t\treturn errors.New(\"writeCompressedChunk: empty chunk\")\n\t}\n\tif u > maxUncompressed {\n\t\tpanic(\"overrun of uncompressed data limit\")\n\t}\n\tc := w.buf.Len()\n\tif c <= 0 {\n\t\tpanic(\"no compressed data\")\n\t}\n\tif c > maxCompressed {\n\t\tpanic(\"overrun of compressed data limit\")\n\t}\n\theader := chunkHeader{\n\t\tctype:        w.ctype,\n\t\tuncompressed: uint32(u - 1),\n\t\tcompressed:   uint16(c - 1),\n\t\tprops:        w.encoder.state.Properties,\n\t}\n\thdata, err := header.MarshalBinary()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif _, err = w.w.Write(hdata); err != nil {\n\t\treturn err\n\t}\n\t_, err = io.Copy(w.w, &w.buf)\n\treturn err\n}\n\n// writes a single chunk to the underlying writer.\nfunc (w *Writer2) writeChunk() error {\n\tu := int(uncompressedHeaderLen + w.encoder.Compressed())\n\tc := headerLen(w.ctype) + w.buf.Len()\n\tif u < c {\n\t\treturn w.writeUncompressedChunk()\n\t}\n\treturn w.writeCompressedChunk()\n}\n\n// flushChunk terminates the current chunk. The encoder will be reset\n// to support the next chunk.\nfunc (w *Writer2) flushChunk() error {\n\tif w.written() == 0 {\n\t\treturn nil\n\t}\n\tvar err error\n\tif err = w.encoder.Close(); err != nil {\n\t\treturn err\n\t}\n\tif err = w.writeChunk(); err != nil {\n\t\treturn err\n\t}\n\tw.buf.Reset()\n\tw.lbw.N = maxCompressed\n\tif err = w.encoder.Reopen(&w.lbw); err != nil {\n\t\treturn err\n\t}\n\tif err = w.cstate.next(w.ctype); err != nil {\n\t\treturn err\n\t}\n\tw.ctype = w.cstate.defaultChunkType()\n\tw.start = cloneState(w.encoder.state)\n\treturn nil\n}\n\n// Flush writes all buffered data out to the underlying stream. This\n// could result in multiple chunks to be created.\nfunc (w *Writer2) Flush() error {\n\tif w.cstate == stop {\n\t\treturn errClosed\n\t}\n\tfor w.written() > 0 {\n\t\tif err := w.flushChunk(); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// Close terminates the LZMA2 stream with an EOS chunk.\nfunc (w *Writer2) Close() error {\n\tif w.cstate == stop {\n\t\treturn errClosed\n\t}\n\tif err := w.Flush(); err != nil {\n\t\treturn nil\n\t}\n\t// write zero byte EOS chunk\n\t_, err := w.w.Write([]byte{0})\n\tif err != nil {\n\t\treturn err\n\t}\n\tw.cstate = stop\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/ulikunitz/xz/lzmafilter.go",
    "content": "// Copyright 2014-2017 Ulrich Kunitz. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage xz\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\n\t\"github.com/ulikunitz/xz/lzma\"\n)\n\n// LZMA filter constants.\nconst (\n\tlzmaFilterID  = 0x21\n\tlzmaFilterLen = 3\n)\n\n// lzmaFilter declares the LZMA2 filter information stored in an xz\n// block header.\ntype lzmaFilter struct {\n\tdictCap int64\n}\n\n// String returns a representation of the LZMA filter.\nfunc (f lzmaFilter) String() string {\n\treturn fmt.Sprintf(\"LZMA dict cap %#x\", f.dictCap)\n}\n\n// id returns the ID for the LZMA2 filter.\nfunc (f lzmaFilter) id() uint64 { return lzmaFilterID }\n\n// MarshalBinary converts the lzmaFilter in its encoded representation.\nfunc (f lzmaFilter) MarshalBinary() (data []byte, err error) {\n\tc := lzma.EncodeDictCap(f.dictCap)\n\treturn []byte{lzmaFilterID, 1, c}, nil\n}\n\n// UnmarshalBinary unmarshals the given data representation of the LZMA2\n// filter.\nfunc (f *lzmaFilter) UnmarshalBinary(data []byte) error {\n\tif len(data) != lzmaFilterLen {\n\t\treturn errors.New(\"xz: data for LZMA2 filter has wrong length\")\n\t}\n\tif data[0] != lzmaFilterID {\n\t\treturn errors.New(\"xz: wrong LZMA2 filter id\")\n\t}\n\tif data[1] != 1 {\n\t\treturn errors.New(\"xz: wrong LZMA2 filter size\")\n\t}\n\tdc, err := lzma.DecodeDictCap(data[2])\n\tif err != nil {\n\t\treturn errors.New(\"xz: wrong LZMA2 dictionary size property\")\n\t}\n\n\tf.dictCap = dc\n\treturn nil\n}\n\n// reader creates a new reader for the LZMA2 filter.\nfunc (f lzmaFilter) reader(r io.Reader, c *ReaderConfig) (fr io.Reader,\n\terr error) {\n\n\tconfig := new(lzma.Reader2Config)\n\tif c != nil {\n\t\tconfig.DictCap = c.DictCap\n\t}\n\tdc := int(f.dictCap)\n\tif dc < 1 {\n\t\treturn nil, errors.New(\"xz: LZMA2 filter parameter \" +\n\t\t\t\"dictionary capacity overflow\")\n\t}\n\tif dc > config.DictCap {\n\t\tconfig.DictCap = dc\n\t}\n\n\tfr, err = config.NewReader2(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn fr, nil\n}\n\n// writeCloser creates a io.WriteCloser for the LZMA2 filter.\nfunc (f lzmaFilter) writeCloser(w io.WriteCloser, c *WriterConfig,\n) (fw io.WriteCloser, err error) {\n\tconfig := new(lzma.Writer2Config)\n\tif c != nil {\n\t\t*config = lzma.Writer2Config{\n\t\t\tProperties: c.Properties,\n\t\t\tDictCap:    c.DictCap,\n\t\t\tBufSize:    c.BufSize,\n\t\t\tMatcher:    c.Matcher,\n\t\t}\n\t}\n\n\tdc := int(f.dictCap)\n\tif dc < 1 {\n\t\treturn nil, errors.New(\"xz: LZMA2 filter parameter \" +\n\t\t\t\"dictionary capacity overflow\")\n\t}\n\tif dc > config.DictCap {\n\t\tconfig.DictCap = dc\n\t}\n\n\tfw, err = config.NewWriter2(w)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn fw, nil\n}\n\n// last returns true, because an LZMA2 filter must be the last filter in\n// the filter list.\nfunc (f lzmaFilter) last() bool { return true }\n"
  },
  {
    "path": "vendor/github.com/ulikunitz/xz/reader.go",
    "content": "// Copyright 2014-2017 Ulrich Kunitz. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package xz supports the compression and decompression of xz files. It\n// supports version 1.0.4 of the specification without the non-LZMA2\n// filters. See http://tukaani.org/xz/xz-file-format-1.0.4.txt\npackage xz\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"hash\"\n\t\"io\"\n\n\t\"github.com/ulikunitz/xz/internal/xlog\"\n\t\"github.com/ulikunitz/xz/lzma\"\n)\n\n// ReaderConfig defines the parameters for the xz reader. The\n// SingleStream parameter requests the reader to assume that the\n// underlying stream contains only a single stream.\ntype ReaderConfig struct {\n\tDictCap      int\n\tSingleStream bool\n}\n\n// fill replaces all zero values with their default values.\nfunc (c *ReaderConfig) fill() {\n\tif c.DictCap == 0 {\n\t\tc.DictCap = 8 * 1024 * 1024\n\t}\n}\n\n// Verify checks the reader parameters for Validity. Zero values will be\n// replaced by default values.\nfunc (c *ReaderConfig) Verify() error {\n\tif c == nil {\n\t\treturn errors.New(\"xz: reader parameters are nil\")\n\t}\n\tlc := lzma.Reader2Config{DictCap: c.DictCap}\n\tif err := lc.Verify(); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// Reader supports the reading of one or multiple xz streams.\ntype Reader struct {\n\tReaderConfig\n\n\txz io.Reader\n\tsr *streamReader\n}\n\n// streamReader decodes a single xz stream\ntype streamReader struct {\n\tReaderConfig\n\n\txz      io.Reader\n\tbr      *blockReader\n\tnewHash func() hash.Hash\n\th       header\n\tindex   []record\n}\n\n// NewReader creates a new xz reader using the default parameters.\n// The function reads and checks the header of the first XZ stream. The\n// reader will process multiple streams including padding.\nfunc NewReader(xz io.Reader) (r *Reader, err error) {\n\treturn ReaderConfig{}.NewReader(xz)\n}\n\n// NewReader creates an xz stream reader. The created reader will be\n// able to process multiple streams and padding unless a SingleStream\n// has been set in the reader configuration c.\nfunc (c ReaderConfig) NewReader(xz io.Reader) (r *Reader, err error) {\n\tif err = c.Verify(); err != nil {\n\t\treturn nil, err\n\t}\n\tr = &Reader{\n\t\tReaderConfig: c,\n\t\txz:           xz,\n\t}\n\tif r.sr, err = c.newStreamReader(xz); err != nil {\n\t\tif err == io.EOF {\n\t\t\terr = io.ErrUnexpectedEOF\n\t\t}\n\t\treturn nil, err\n\t}\n\treturn r, nil\n}\n\nvar errUnexpectedData = errors.New(\"xz: unexpected data after stream\")\n\n// Read reads uncompressed data from the stream.\nfunc (r *Reader) Read(p []byte) (n int, err error) {\n\tfor n < len(p) {\n\t\tif r.sr == nil {\n\t\t\tif r.SingleStream {\n\t\t\t\tdata := make([]byte, 1)\n\t\t\t\t_, err = io.ReadFull(r.xz, data)\n\t\t\t\tif err != io.EOF {\n\t\t\t\t\treturn n, errUnexpectedData\n\t\t\t\t}\n\t\t\t\treturn n, io.EOF\n\t\t\t}\n\t\t\tfor {\n\t\t\t\tr.sr, err = r.ReaderConfig.newStreamReader(r.xz)\n\t\t\t\tif err != errPadding {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\treturn n, err\n\t\t\t}\n\t\t}\n\t\tk, err := r.sr.Read(p[n:])\n\t\tn += k\n\t\tif err != nil {\n\t\t\tif err == io.EOF {\n\t\t\t\tr.sr = nil\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn n, err\n\t\t}\n\t}\n\treturn n, nil\n}\n\nvar errPadding = errors.New(\"xz: padding (4 zero bytes) encountered\")\n\n// newStreamReader creates a new xz stream reader using the given configuration\n// parameters. NewReader reads and checks the header of the xz stream.\nfunc (c ReaderConfig) newStreamReader(xz io.Reader) (r *streamReader, err error) {\n\tif err = c.Verify(); err != nil {\n\t\treturn nil, err\n\t}\n\tdata := make([]byte, HeaderLen)\n\tif _, err := io.ReadFull(xz, data[:4]); err != nil {\n\t\treturn nil, err\n\t}\n\tif bytes.Equal(data[:4], []byte{0, 0, 0, 0}) {\n\t\treturn nil, errPadding\n\t}\n\tif _, err = io.ReadFull(xz, data[4:]); err != nil {\n\t\tif err == io.EOF {\n\t\t\terr = io.ErrUnexpectedEOF\n\t\t}\n\t\treturn nil, err\n\t}\n\tr = &streamReader{\n\t\tReaderConfig: c,\n\t\txz:           xz,\n\t\tindex:        make([]record, 0, 4),\n\t}\n\tif err = r.h.UnmarshalBinary(data); err != nil {\n\t\treturn nil, err\n\t}\n\txlog.Debugf(\"xz header %s\", r.h)\n\tif r.newHash, err = newHashFunc(r.h.flags); err != nil {\n\t\treturn nil, err\n\t}\n\treturn r, nil\n}\n\n// errIndex indicates an error with the xz file index.\nvar errIndex = errors.New(\"xz: error in xz file index\")\n\n// readTail reads the index body and the xz footer.\nfunc (r *streamReader) readTail() error {\n\tindex, n, err := readIndexBody(r.xz)\n\tif err != nil {\n\t\tif err == io.EOF {\n\t\t\terr = io.ErrUnexpectedEOF\n\t\t}\n\t\treturn err\n\t}\n\tif len(index) != len(r.index) {\n\t\treturn fmt.Errorf(\"xz: index length is %d; want %d\",\n\t\t\tlen(index), len(r.index))\n\t}\n\tfor i, rec := range r.index {\n\t\tif rec != index[i] {\n\t\t\treturn fmt.Errorf(\"xz: record %d is %v; want %v\",\n\t\t\t\ti, rec, index[i])\n\t\t}\n\t}\n\n\tp := make([]byte, footerLen)\n\tif _, err = io.ReadFull(r.xz, p); err != nil {\n\t\tif err == io.EOF {\n\t\t\terr = io.ErrUnexpectedEOF\n\t\t}\n\t\treturn err\n\t}\n\tvar f footer\n\tif err = f.UnmarshalBinary(p); err != nil {\n\t\treturn err\n\t}\n\txlog.Debugf(\"xz footer %s\", f)\n\tif f.flags != r.h.flags {\n\t\treturn errors.New(\"xz: footer flags incorrect\")\n\t}\n\tif f.indexSize != int64(n)+1 {\n\t\treturn errors.New(\"xz: index size in footer wrong\")\n\t}\n\treturn nil\n}\n\n// Read reads actual data from the xz stream.\nfunc (r *streamReader) Read(p []byte) (n int, err error) {\n\tfor n < len(p) {\n\t\tif r.br == nil {\n\t\t\tbh, hlen, err := readBlockHeader(r.xz)\n\t\t\tif err != nil {\n\t\t\t\tif err == errIndexIndicator {\n\t\t\t\t\tif err = r.readTail(); err != nil {\n\t\t\t\t\t\treturn n, err\n\t\t\t\t\t}\n\t\t\t\t\treturn n, io.EOF\n\t\t\t\t}\n\t\t\t\treturn n, err\n\t\t\t}\n\t\t\txlog.Debugf(\"block %v\", *bh)\n\t\t\tr.br, err = r.ReaderConfig.newBlockReader(r.xz, bh,\n\t\t\t\thlen, r.newHash())\n\t\t\tif err != nil {\n\t\t\t\treturn n, err\n\t\t\t}\n\t\t}\n\t\tk, err := r.br.Read(p[n:])\n\t\tn += k\n\t\tif err != nil {\n\t\t\tif err == io.EOF {\n\t\t\t\tr.index = append(r.index, r.br.record())\n\t\t\t\tr.br = nil\n\t\t\t} else {\n\t\t\t\treturn n, err\n\t\t\t}\n\t\t}\n\t}\n\treturn n, nil\n}\n\n// countingReader is a reader that counts the bytes read.\ntype countingReader struct {\n\tr io.Reader\n\tn int64\n}\n\n// Read reads data from the wrapped reader and adds it to the n field.\nfunc (lr *countingReader) Read(p []byte) (n int, err error) {\n\tn, err = lr.r.Read(p)\n\tlr.n += int64(n)\n\treturn n, err\n}\n\n// blockReader supports the reading of a block.\ntype blockReader struct {\n\tlxz       countingReader\n\theader    *blockHeader\n\theaderLen int\n\tn         int64\n\thash      hash.Hash\n\tr         io.Reader\n\terr       error\n}\n\n// newBlockReader creates a new block reader.\nfunc (c *ReaderConfig) newBlockReader(xz io.Reader, h *blockHeader,\n\thlen int, hash hash.Hash) (br *blockReader, err error) {\n\n\tbr = &blockReader{\n\t\tlxz:       countingReader{r: xz},\n\t\theader:    h,\n\t\theaderLen: hlen,\n\t\thash:      hash,\n\t}\n\n\tfr, err := c.newFilterReader(&br.lxz, h.filters)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tbr.r = io.TeeReader(fr, br.hash)\n\n\treturn br, nil\n}\n\n// uncompressedSize returns the uncompressed size of the block.\nfunc (br *blockReader) uncompressedSize() int64 {\n\treturn br.n\n}\n\n// compressedSize returns the compressed size of the block.\nfunc (br *blockReader) compressedSize() int64 {\n\treturn br.lxz.n\n}\n\n// unpaddedSize computes the unpadded size for the block.\nfunc (br *blockReader) unpaddedSize() int64 {\n\tn := int64(br.headerLen)\n\tn += br.compressedSize()\n\tn += int64(br.hash.Size())\n\treturn n\n}\n\n// record returns the index record for the current block.\nfunc (br *blockReader) record() record {\n\treturn record{br.unpaddedSize(), br.uncompressedSize()}\n}\n\n// errBlockSize indicates that the size of the block in the block header\n// is wrong.\nvar errBlockSize = errors.New(\"xz: wrong uncompressed size for block\")\n\n// Read reads data from the block.\nfunc (br *blockReader) Read(p []byte) (n int, err error) {\n\tn, err = br.r.Read(p)\n\tbr.n += int64(n)\n\n\tu := br.header.uncompressedSize\n\tif u >= 0 && br.uncompressedSize() > u {\n\t\treturn n, errors.New(\"xz: wrong uncompressed size for block\")\n\t}\n\tc := br.header.compressedSize\n\tif c >= 0 && br.compressedSize() > c {\n\t\treturn n, errors.New(\"xz: wrong compressed size for block\")\n\t}\n\tif err != io.EOF {\n\t\treturn n, err\n\t}\n\tif br.uncompressedSize() < u || br.compressedSize() < c {\n\t\treturn n, io.ErrUnexpectedEOF\n\t}\n\n\ts := br.hash.Size()\n\tk := padLen(br.lxz.n)\n\tq := make([]byte, k+s, k+2*s)\n\tif _, err = io.ReadFull(br.lxz.r, q); err != nil {\n\t\tif err == io.EOF {\n\t\t\terr = io.ErrUnexpectedEOF\n\t\t}\n\t\treturn n, err\n\t}\n\tif !allZeros(q[:k]) {\n\t\treturn n, errors.New(\"xz: non-zero block padding\")\n\t}\n\tcheckSum := q[k:]\n\tcomputedSum := br.hash.Sum(checkSum[s:])\n\tif !bytes.Equal(checkSum, computedSum) {\n\t\treturn n, errors.New(\"xz: checksum error for block\")\n\t}\n\treturn n, io.EOF\n}\n\nfunc (c *ReaderConfig) newFilterReader(r io.Reader, f []filter) (fr io.Reader,\n\terr error) {\n\n\tif err = verifyFilters(f); err != nil {\n\t\treturn nil, err\n\t}\n\n\tfr = r\n\tfor i := len(f) - 1; i >= 0; i-- {\n\t\tfr, err = f[i].reader(fr, c)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\treturn fr, nil\n}\n"
  },
  {
    "path": "vendor/github.com/ulikunitz/xz/writer.go",
    "content": "// Copyright 2014-2017 Ulrich Kunitz. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage xz\n\nimport (\n\t\"errors\"\n\t\"hash\"\n\t\"io\"\n\n\t\"github.com/ulikunitz/xz/lzma\"\n)\n\n// WriterConfig describe the parameters for an xz writer.\ntype WriterConfig struct {\n\tProperties *lzma.Properties\n\tDictCap    int\n\tBufSize    int\n\tBlockSize  int64\n\t// checksum method: CRC32, CRC64 or SHA256\n\tCheckSum byte\n\t// match algorithm\n\tMatcher lzma.MatchAlgorithm\n}\n\n// fill replaces zero values with default values.\nfunc (c *WriterConfig) fill() {\n\tif c.Properties == nil {\n\t\tc.Properties = &lzma.Properties{LC: 3, LP: 0, PB: 2}\n\t}\n\tif c.DictCap == 0 {\n\t\tc.DictCap = 8 * 1024 * 1024\n\t}\n\tif c.BufSize == 0 {\n\t\tc.BufSize = 4096\n\t}\n\tif c.BlockSize == 0 {\n\t\tc.BlockSize = maxInt64\n\t}\n\tif c.CheckSum == 0 {\n\t\tc.CheckSum = CRC64\n\t}\n}\n\n// Verify checks the configuration for errors. Zero values will be\n// replaced by default values.\nfunc (c *WriterConfig) Verify() error {\n\tif c == nil {\n\t\treturn errors.New(\"xz: writer configuration is nil\")\n\t}\n\tc.fill()\n\tlc := lzma.Writer2Config{\n\t\tProperties: c.Properties,\n\t\tDictCap:    c.DictCap,\n\t\tBufSize:    c.BufSize,\n\t\tMatcher:    c.Matcher,\n\t}\n\tif err := lc.Verify(); err != nil {\n\t\treturn err\n\t}\n\tif c.BlockSize <= 0 {\n\t\treturn errors.New(\"xz: block size out of range\")\n\t}\n\tif err := verifyFlags(c.CheckSum); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// filters creates the filter list for the given parameters.\nfunc (c *WriterConfig) filters() []filter {\n\treturn []filter{&lzmaFilter{int64(c.DictCap)}}\n}\n\n// maxInt64 defines the maximum 64-bit signed integer.\nconst maxInt64 = 1<<63 - 1\n\n// verifyFilters checks the filter list for the length and the right\n// sequence of filters.\nfunc verifyFilters(f []filter) error {\n\tif len(f) == 0 {\n\t\treturn errors.New(\"xz: no filters\")\n\t}\n\tif len(f) > 4 {\n\t\treturn errors.New(\"xz: more than four filters\")\n\t}\n\tfor _, g := range f[:len(f)-1] {\n\t\tif g.last() {\n\t\t\treturn errors.New(\"xz: last filter is not last\")\n\t\t}\n\t}\n\tif !f[len(f)-1].last() {\n\t\treturn errors.New(\"xz: wrong last filter\")\n\t}\n\treturn nil\n}\n\n// newFilterWriteCloser converts a filter list into a WriteCloser that\n// can be used by a blockWriter.\nfunc (c *WriterConfig) newFilterWriteCloser(w io.Writer, f []filter) (fw io.WriteCloser, err error) {\n\tif err = verifyFilters(f); err != nil {\n\t\treturn nil, err\n\t}\n\tfw = nopWriteCloser(w)\n\tfor i := len(f) - 1; i >= 0; i-- {\n\t\tfw, err = f[i].writeCloser(fw, c)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\treturn fw, nil\n}\n\n// nopWCloser implements a WriteCloser with a Close method not doing\n// anything.\ntype nopWCloser struct {\n\tio.Writer\n}\n\n// Close returns nil and doesn't do anything else.\nfunc (c nopWCloser) Close() error {\n\treturn nil\n}\n\n// nopWriteCloser converts the Writer into a WriteCloser with a Close\n// function that does nothing beside returning nil.\nfunc nopWriteCloser(w io.Writer) io.WriteCloser {\n\treturn nopWCloser{w}\n}\n\n// Writer compresses data written to it. It is an io.WriteCloser.\ntype Writer struct {\n\tWriterConfig\n\n\txz      io.Writer\n\tbw      *blockWriter\n\tnewHash func() hash.Hash\n\th       header\n\tindex   []record\n\tclosed  bool\n}\n\n// newBlockWriter creates a new block writer writes the header out.\nfunc (w *Writer) newBlockWriter() error {\n\tvar err error\n\tw.bw, err = w.WriterConfig.newBlockWriter(w.xz, w.newHash())\n\tif err != nil {\n\t\treturn err\n\t}\n\tif err = w.bw.writeHeader(w.xz); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// closeBlockWriter closes a block writer and records the sizes in the\n// index.\nfunc (w *Writer) closeBlockWriter() error {\n\tvar err error\n\tif err = w.bw.Close(); err != nil {\n\t\treturn err\n\t}\n\tw.index = append(w.index, w.bw.record())\n\treturn nil\n}\n\n// NewWriter creates a new xz writer using default parameters.\nfunc NewWriter(xz io.Writer) (w *Writer, err error) {\n\treturn WriterConfig{}.NewWriter(xz)\n}\n\n// NewWriter creates a new Writer using the given configuration parameters.\nfunc (c WriterConfig) NewWriter(xz io.Writer) (w *Writer, err error) {\n\tif err = c.Verify(); err != nil {\n\t\treturn nil, err\n\t}\n\tw = &Writer{\n\t\tWriterConfig: c,\n\t\txz:           xz,\n\t\th:            header{c.CheckSum},\n\t\tindex:        make([]record, 0, 4),\n\t}\n\tif w.newHash, err = newHashFunc(c.CheckSum); err != nil {\n\t\treturn nil, err\n\t}\n\tdata, err := w.h.MarshalBinary()\n\tif _, err = xz.Write(data); err != nil {\n\t\treturn nil, err\n\t}\n\tif err = w.newBlockWriter(); err != nil {\n\t\treturn nil, err\n\t}\n\treturn w, nil\n\n}\n\n// Write compresses the uncompressed data provided.\nfunc (w *Writer) Write(p []byte) (n int, err error) {\n\tif w.closed {\n\t\treturn 0, errClosed\n\t}\n\tfor {\n\t\tk, err := w.bw.Write(p[n:])\n\t\tn += k\n\t\tif err != errNoSpace {\n\t\t\treturn n, err\n\t\t}\n\t\tif err = w.closeBlockWriter(); err != nil {\n\t\t\treturn n, err\n\t\t}\n\t\tif err = w.newBlockWriter(); err != nil {\n\t\t\treturn n, err\n\t\t}\n\t}\n}\n\n// Close closes the writer and adds the footer to the Writer. Close\n// doesn't close the underlying writer.\nfunc (w *Writer) Close() error {\n\tif w.closed {\n\t\treturn errClosed\n\t}\n\tw.closed = true\n\tvar err error\n\tif err = w.closeBlockWriter(); err != nil {\n\t\treturn err\n\t}\n\n\tf := footer{flags: w.h.flags}\n\tif f.indexSize, err = writeIndex(w.xz, w.index); err != nil {\n\t\treturn err\n\t}\n\tdata, err := f.MarshalBinary()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif _, err = w.xz.Write(data); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// countingWriter is a writer that counts all data written to it.\ntype countingWriter struct {\n\tw io.Writer\n\tn int64\n}\n\n// Write writes data to the countingWriter.\nfunc (cw *countingWriter) Write(p []byte) (n int, err error) {\n\tn, err = cw.w.Write(p)\n\tcw.n += int64(n)\n\tif err == nil && cw.n < 0 {\n\t\treturn n, errors.New(\"xz: counter overflow\")\n\t}\n\treturn\n}\n\n// blockWriter is writes a single block.\ntype blockWriter struct {\n\tcxz countingWriter\n\t// mw combines io.WriteCloser w and the hash.\n\tmw        io.Writer\n\tw         io.WriteCloser\n\tn         int64\n\tblockSize int64\n\tclosed    bool\n\theaderLen int\n\n\tfilters []filter\n\thash    hash.Hash\n}\n\n// newBlockWriter creates a new block writer.\nfunc (c *WriterConfig) newBlockWriter(xz io.Writer, hash hash.Hash) (bw *blockWriter, err error) {\n\tbw = &blockWriter{\n\t\tcxz:       countingWriter{w: xz},\n\t\tblockSize: c.BlockSize,\n\t\tfilters:   c.filters(),\n\t\thash:      hash,\n\t}\n\tbw.w, err = c.newFilterWriteCloser(&bw.cxz, bw.filters)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tbw.mw = io.MultiWriter(bw.w, bw.hash)\n\treturn bw, nil\n}\n\n// writeHeader writes the header. If the function is called after Close\n// the commpressedSize and uncompressedSize fields will be filled.\nfunc (bw *blockWriter) writeHeader(w io.Writer) error {\n\th := blockHeader{\n\t\tcompressedSize:   -1,\n\t\tuncompressedSize: -1,\n\t\tfilters:          bw.filters,\n\t}\n\tif bw.closed {\n\t\th.compressedSize = bw.compressedSize()\n\t\th.uncompressedSize = bw.uncompressedSize()\n\t}\n\tdata, err := h.MarshalBinary()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif _, err = w.Write(data); err != nil {\n\t\treturn err\n\t}\n\tbw.headerLen = len(data)\n\treturn nil\n}\n\n// compressed size returns the amount of data written to the underlying\n// stream.\nfunc (bw *blockWriter) compressedSize() int64 {\n\treturn bw.cxz.n\n}\n\n// uncompressedSize returns the number of data written to the\n// blockWriter\nfunc (bw *blockWriter) uncompressedSize() int64 {\n\treturn bw.n\n}\n\n// unpaddedSize returns the sum of the header length, the uncompressed\n// size of the block and the hash size.\nfunc (bw *blockWriter) unpaddedSize() int64 {\n\tif bw.headerLen <= 0 {\n\t\tpanic(\"xz: block header not written\")\n\t}\n\tn := int64(bw.headerLen)\n\tn += bw.compressedSize()\n\tn += int64(bw.hash.Size())\n\treturn n\n}\n\n// record returns the record for the current stream. Call Close before\n// calling this method.\nfunc (bw *blockWriter) record() record {\n\treturn record{bw.unpaddedSize(), bw.uncompressedSize()}\n}\n\nvar errClosed = errors.New(\"xz: writer already closed\")\n\nvar errNoSpace = errors.New(\"xz: no space\")\n\n// Write writes uncompressed data to the block writer.\nfunc (bw *blockWriter) Write(p []byte) (n int, err error) {\n\tif bw.closed {\n\t\treturn 0, errClosed\n\t}\n\n\tt := bw.blockSize - bw.n\n\tif int64(len(p)) > t {\n\t\terr = errNoSpace\n\t\tp = p[:t]\n\t}\n\n\tvar werr error\n\tn, werr = bw.mw.Write(p)\n\tbw.n += int64(n)\n\tif werr != nil {\n\t\treturn n, werr\n\t}\n\treturn n, err\n}\n\n// Close closes the writer.\nfunc (bw *blockWriter) Close() error {\n\tif bw.closed {\n\t\treturn errClosed\n\t}\n\tbw.closed = true\n\tif err := bw.w.Close(); err != nil {\n\t\treturn err\n\t}\n\ts := bw.hash.Size()\n\tk := padLen(bw.cxz.n)\n\tp := make([]byte, k+s)\n\tbw.hash.Sum(p[k:k])\n\tif _, err := bw.cxz.w.Write(p); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/vmihailenco/msgpack/LICENSE",
    "content": "Copyright (c) 2013 The github.com/vmihailenco/msgpack Authors.\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "vendor/github.com/vmihailenco/msgpack/appengine.go",
    "content": "// +build appengine\n\npackage msgpack\n\nimport (\n\t\"reflect\"\n\n\tds \"google.golang.org/appengine/datastore\"\n)\n\nfunc init() {\n\tRegister((*ds.Key)(nil), encodeDatastoreKeyValue, decodeDatastoreKeyValue)\n\tRegister((*ds.Cursor)(nil), encodeDatastoreCursorValue, decodeDatastoreCursorValue)\n}\n\nfunc EncodeDatastoreKey(e *Encoder, key *ds.Key) error {\n\tif key == nil {\n\t\treturn e.EncodeNil()\n\t}\n\treturn e.EncodeString(key.Encode())\n}\n\nfunc encodeDatastoreKeyValue(e *Encoder, v reflect.Value) error {\n\tkey := v.Interface().(*ds.Key)\n\treturn EncodeDatastoreKey(e, key)\n}\n\nfunc DecodeDatastoreKey(d *Decoder) (*ds.Key, error) {\n\tv, err := d.DecodeString()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif v == \"\" {\n\t\treturn nil, nil\n\t}\n\treturn ds.DecodeKey(v)\n}\n\nfunc decodeDatastoreKeyValue(d *Decoder, v reflect.Value) error {\n\tkey, err := DecodeDatastoreKey(d)\n\tif err != nil {\n\t\treturn err\n\t}\n\tv.Set(reflect.ValueOf(key))\n\treturn nil\n}\n\nfunc encodeDatastoreCursorValue(e *Encoder, v reflect.Value) error {\n\tcursor := v.Interface().(ds.Cursor)\n\treturn e.Encode(cursor.String())\n}\n\nfunc decodeDatastoreCursorValue(d *Decoder, v reflect.Value) error {\n\ts, err := d.DecodeString()\n\tif err != nil {\n\t\treturn err\n\t}\n\tcursor, err := ds.DecodeCursor(s)\n\tif err != nil {\n\t\treturn err\n\t}\n\tv.Set(reflect.ValueOf(cursor))\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/vmihailenco/msgpack/codes/codes.go",
    "content": "package codes\n\ntype Code byte\n\nvar (\n\tPosFixedNumHigh Code = 0x7f\n\tNegFixedNumLow  Code = 0xe0\n\n\tNil Code = 0xc0\n\n\tFalse Code = 0xc2\n\tTrue  Code = 0xc3\n\n\tFloat  Code = 0xca\n\tDouble Code = 0xcb\n\n\tUint8  Code = 0xcc\n\tUint16 Code = 0xcd\n\tUint32 Code = 0xce\n\tUint64 Code = 0xcf\n\n\tInt8  Code = 0xd0\n\tInt16 Code = 0xd1\n\tInt32 Code = 0xd2\n\tInt64 Code = 0xd3\n\n\tFixedStrLow  Code = 0xa0\n\tFixedStrHigh Code = 0xbf\n\tFixedStrMask Code = 0x1f\n\tStr8         Code = 0xd9\n\tStr16        Code = 0xda\n\tStr32        Code = 0xdb\n\n\tBin8  Code = 0xc4\n\tBin16 Code = 0xc5\n\tBin32 Code = 0xc6\n\n\tFixedArrayLow  Code = 0x90\n\tFixedArrayHigh Code = 0x9f\n\tFixedArrayMask Code = 0xf\n\tArray16        Code = 0xdc\n\tArray32        Code = 0xdd\n\n\tFixedMapLow  Code = 0x80\n\tFixedMapHigh Code = 0x8f\n\tFixedMapMask Code = 0xf\n\tMap16        Code = 0xde\n\tMap32        Code = 0xdf\n\n\tFixExt1  Code = 0xd4\n\tFixExt2  Code = 0xd5\n\tFixExt4  Code = 0xd6\n\tFixExt8  Code = 0xd7\n\tFixExt16 Code = 0xd8\n\tExt8     Code = 0xc7\n\tExt16    Code = 0xc8\n\tExt32    Code = 0xc9\n)\n\nfunc IsFixedNum(c Code) bool {\n\treturn c <= PosFixedNumHigh || c >= NegFixedNumLow\n}\n\nfunc IsFixedMap(c Code) bool {\n\treturn c >= FixedMapLow && c <= FixedMapHigh\n}\n\nfunc IsFixedArray(c Code) bool {\n\treturn c >= FixedArrayLow && c <= FixedArrayHigh\n}\n\nfunc IsFixedString(c Code) bool {\n\treturn c >= FixedStrLow && c <= FixedStrHigh\n}\n\nfunc IsString(c Code) bool {\n\treturn IsFixedString(c) || c == Str8 || c == Str16 || c == Str32\n}\n\nfunc IsBin(c Code) bool {\n\treturn c == Bin8 || c == Bin16 || c == Bin32\n}\n\nfunc IsFixedExt(c Code) bool {\n\treturn c >= FixExt1 && c <= FixExt16\n}\n\nfunc IsExt(c Code) bool {\n\treturn IsFixedExt(c) || c == Ext8 || c == Ext16 || c == Ext32\n}\n"
  },
  {
    "path": "vendor/github.com/vmihailenco/msgpack/decode.go",
    "content": "package msgpack\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"reflect\"\n\t\"time\"\n\n\t\"github.com/vmihailenco/msgpack/codes\"\n)\n\nconst bytesAllocLimit = 1024 * 1024 // 1mb\n\ntype bufReader interface {\n\tio.Reader\n\tio.ByteScanner\n}\n\nfunc newBufReader(r io.Reader) bufReader {\n\tif br, ok := r.(bufReader); ok {\n\t\treturn br\n\t}\n\treturn bufio.NewReader(r)\n}\n\nfunc makeBuffer() []byte {\n\treturn make([]byte, 0, 64)\n}\n\n// Unmarshal decodes the MessagePack-encoded data and stores the result\n// in the value pointed to by v.\nfunc Unmarshal(data []byte, v interface{}) error {\n\treturn NewDecoder(bytes.NewReader(data)).Decode(v)\n}\n\ntype Decoder struct {\n\tr   io.Reader\n\ts   io.ByteScanner\n\tbuf []byte\n\n\textLen int\n\trec    []byte // accumulates read data if not nil\n\n\tuseLoose   bool\n\tuseJSONTag bool\n\n\tdecodeMapFunc func(*Decoder) (interface{}, error)\n}\n\n// NewDecoder returns a new decoder that reads from r.\n//\n// The decoder introduces its own buffering and may read data from r\n// beyond the MessagePack values requested. Buffering can be disabled\n// by passing a reader that implements io.ByteScanner interface.\nfunc NewDecoder(r io.Reader) *Decoder {\n\td := &Decoder{\n\t\tbuf: makeBuffer(),\n\t}\n\td.resetReader(r)\n\treturn d\n}\n\nfunc (d *Decoder) SetDecodeMapFunc(fn func(*Decoder) (interface{}, error)) {\n\td.decodeMapFunc = fn\n}\n\n// UseDecodeInterfaceLoose causes decoder to use DecodeInterfaceLoose\n// to decode msgpack value into Go interface{}.\nfunc (d *Decoder) UseDecodeInterfaceLoose(flag bool) *Decoder {\n\td.useLoose = flag\n\treturn d\n}\n\n// UseJSONTag causes the Decoder to use json struct tag as fallback option\n// if there is no msgpack tag.\nfunc (d *Decoder) UseJSONTag(v bool) *Decoder {\n\td.useJSONTag = v\n\treturn d\n}\n\nfunc (d *Decoder) Reset(r io.Reader) error {\n\td.resetReader(r)\n\treturn nil\n}\n\nfunc (d *Decoder) resetReader(r io.Reader) {\n\treader := newBufReader(r)\n\td.r = reader\n\td.s = reader\n}\n\nfunc (d *Decoder) Decode(v interface{}) error {\n\tvar err error\n\tswitch v := v.(type) {\n\tcase *string:\n\t\tif v != nil {\n\t\t\t*v, err = d.DecodeString()\n\t\t\treturn err\n\t\t}\n\tcase *[]byte:\n\t\tif v != nil {\n\t\t\treturn d.decodeBytesPtr(v)\n\t\t}\n\tcase *int:\n\t\tif v != nil {\n\t\t\t*v, err = d.DecodeInt()\n\t\t\treturn err\n\t\t}\n\tcase *int8:\n\t\tif v != nil {\n\t\t\t*v, err = d.DecodeInt8()\n\t\t\treturn err\n\t\t}\n\tcase *int16:\n\t\tif v != nil {\n\t\t\t*v, err = d.DecodeInt16()\n\t\t\treturn err\n\t\t}\n\tcase *int32:\n\t\tif v != nil {\n\t\t\t*v, err = d.DecodeInt32()\n\t\t\treturn err\n\t\t}\n\tcase *int64:\n\t\tif v != nil {\n\t\t\t*v, err = d.DecodeInt64()\n\t\t\treturn err\n\t\t}\n\tcase *uint:\n\t\tif v != nil {\n\t\t\t*v, err = d.DecodeUint()\n\t\t\treturn err\n\t\t}\n\tcase *uint8:\n\t\tif v != nil {\n\t\t\t*v, err = d.DecodeUint8()\n\t\t\treturn err\n\t\t}\n\tcase *uint16:\n\t\tif v != nil {\n\t\t\t*v, err = d.DecodeUint16()\n\t\t\treturn err\n\t\t}\n\tcase *uint32:\n\t\tif v != nil {\n\t\t\t*v, err = d.DecodeUint32()\n\t\t\treturn err\n\t\t}\n\tcase *uint64:\n\t\tif v != nil {\n\t\t\t*v, err = d.DecodeUint64()\n\t\t\treturn err\n\t\t}\n\tcase *bool:\n\t\tif v != nil {\n\t\t\t*v, err = d.DecodeBool()\n\t\t\treturn err\n\t\t}\n\tcase *float32:\n\t\tif v != nil {\n\t\t\t*v, err = d.DecodeFloat32()\n\t\t\treturn err\n\t\t}\n\tcase *float64:\n\t\tif v != nil {\n\t\t\t*v, err = d.DecodeFloat64()\n\t\t\treturn err\n\t\t}\n\tcase *[]string:\n\t\treturn d.decodeStringSlicePtr(v)\n\tcase *map[string]string:\n\t\treturn d.decodeMapStringStringPtr(v)\n\tcase *map[string]interface{}:\n\t\treturn d.decodeMapStringInterfacePtr(v)\n\tcase *time.Duration:\n\t\tif v != nil {\n\t\t\tvv, err := d.DecodeInt64()\n\t\t\t*v = time.Duration(vv)\n\t\t\treturn err\n\t\t}\n\tcase *time.Time:\n\t\tif v != nil {\n\t\t\t*v, err = d.DecodeTime()\n\t\t\treturn err\n\t\t}\n\t}\n\n\tvv := reflect.ValueOf(v)\n\tif !vv.IsValid() {\n\t\treturn errors.New(\"msgpack: Decode(nil)\")\n\t}\n\tif vv.Kind() != reflect.Ptr {\n\t\treturn fmt.Errorf(\"msgpack: Decode(nonsettable %T)\", v)\n\t}\n\tvv = vv.Elem()\n\tif !vv.IsValid() {\n\t\treturn fmt.Errorf(\"msgpack: Decode(nonsettable %T)\", v)\n\t}\n\treturn d.DecodeValue(vv)\n}\n\nfunc (d *Decoder) DecodeMulti(v ...interface{}) error {\n\tfor _, vv := range v {\n\t\tif err := d.Decode(vv); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (d *Decoder) decodeInterfaceCond() (interface{}, error) {\n\tif d.useLoose {\n\t\treturn d.DecodeInterfaceLoose()\n\t}\n\treturn d.DecodeInterface()\n}\n\nfunc (d *Decoder) DecodeValue(v reflect.Value) error {\n\tdecode := getDecoder(v.Type())\n\treturn decode(d, v)\n}\n\nfunc (d *Decoder) DecodeNil() error {\n\tc, err := d.readCode()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif c != codes.Nil {\n\t\treturn fmt.Errorf(\"msgpack: invalid code=%x decoding nil\", c)\n\t}\n\treturn nil\n}\n\nfunc (d *Decoder) decodeNilValue(v reflect.Value) error {\n\terr := d.DecodeNil()\n\tif v.IsNil() {\n\t\treturn err\n\t}\n\tif v.Kind() == reflect.Ptr {\n\t\tv = v.Elem()\n\t}\n\tv.Set(reflect.Zero(v.Type()))\n\treturn err\n}\n\nfunc (d *Decoder) DecodeBool() (bool, error) {\n\tc, err := d.readCode()\n\tif err != nil {\n\t\treturn false, err\n\t}\n\treturn d.bool(c)\n}\n\nfunc (d *Decoder) bool(c codes.Code) (bool, error) {\n\tif c == codes.False {\n\t\treturn false, nil\n\t}\n\tif c == codes.True {\n\t\treturn true, nil\n\t}\n\treturn false, fmt.Errorf(\"msgpack: invalid code=%x decoding bool\", c)\n}\n\n// DecodeInterface decodes value into interface. It returns following types:\n//   - nil,\n//   - bool,\n//   - int8, int16, int32, int64,\n//   - uint8, uint16, uint32, uint64,\n//   - float32 and float64,\n//   - string,\n//   - []byte,\n//   - slices of any of the above,\n//   - maps of any of the above.\n//\n// DecodeInterface should be used only when you don't know the type of value\n// you are decoding. For example, if you are decoding number it is better to use\n// DecodeInt64 for negative numbers and DecodeUint64 for positive numbers.\nfunc (d *Decoder) DecodeInterface() (interface{}, error) {\n\tc, err := d.readCode()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif codes.IsFixedNum(c) {\n\t\treturn int8(c), nil\n\t}\n\tif codes.IsFixedMap(c) {\n\t\terr = d.s.UnreadByte()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn d.DecodeMap()\n\t}\n\tif codes.IsFixedArray(c) {\n\t\treturn d.decodeSlice(c)\n\t}\n\tif codes.IsFixedString(c) {\n\t\treturn d.string(c)\n\t}\n\n\tswitch c {\n\tcase codes.Nil:\n\t\treturn nil, nil\n\tcase codes.False, codes.True:\n\t\treturn d.bool(c)\n\tcase codes.Float:\n\t\treturn d.float32(c)\n\tcase codes.Double:\n\t\treturn d.float64(c)\n\tcase codes.Uint8:\n\t\treturn d.uint8()\n\tcase codes.Uint16:\n\t\treturn d.uint16()\n\tcase codes.Uint32:\n\t\treturn d.uint32()\n\tcase codes.Uint64:\n\t\treturn d.uint64()\n\tcase codes.Int8:\n\t\treturn d.int8()\n\tcase codes.Int16:\n\t\treturn d.int16()\n\tcase codes.Int32:\n\t\treturn d.int32()\n\tcase codes.Int64:\n\t\treturn d.int64()\n\tcase codes.Bin8, codes.Bin16, codes.Bin32:\n\t\treturn d.bytes(c, nil)\n\tcase codes.Str8, codes.Str16, codes.Str32:\n\t\treturn d.string(c)\n\tcase codes.Array16, codes.Array32:\n\t\treturn d.decodeSlice(c)\n\tcase codes.Map16, codes.Map32:\n\t\terr = d.s.UnreadByte()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn d.DecodeMap()\n\tcase codes.FixExt1, codes.FixExt2, codes.FixExt4, codes.FixExt8, codes.FixExt16,\n\t\tcodes.Ext8, codes.Ext16, codes.Ext32:\n\t\treturn d.extInterface(c)\n\t}\n\n\treturn 0, fmt.Errorf(\"msgpack: unknown code %x decoding interface{}\", c)\n}\n\n// DecodeInterfaceLoose is like DecodeInterface except that:\n//   - int8, int16, and int32 are converted to int64,\n//   - uint8, uint16, and uint32 are converted to uint64,\n//   - float32 is converted to float64.\nfunc (d *Decoder) DecodeInterfaceLoose() (interface{}, error) {\n\tc, err := d.readCode()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif codes.IsFixedNum(c) {\n\t\treturn int64(c), nil\n\t}\n\tif codes.IsFixedMap(c) {\n\t\terr = d.s.UnreadByte()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn d.DecodeMap()\n\t}\n\tif codes.IsFixedArray(c) {\n\t\treturn d.decodeSlice(c)\n\t}\n\tif codes.IsFixedString(c) {\n\t\treturn d.string(c)\n\t}\n\n\tswitch c {\n\tcase codes.Nil:\n\t\treturn nil, nil\n\tcase codes.False, codes.True:\n\t\treturn d.bool(c)\n\tcase codes.Float, codes.Double:\n\t\treturn d.float64(c)\n\tcase codes.Uint8, codes.Uint16, codes.Uint32, codes.Uint64:\n\t\treturn d.uint(c)\n\tcase codes.Int8, codes.Int16, codes.Int32, codes.Int64:\n\t\treturn d.int(c)\n\tcase codes.Bin8, codes.Bin16, codes.Bin32:\n\t\treturn d.bytes(c, nil)\n\tcase codes.Str8, codes.Str16, codes.Str32:\n\t\treturn d.string(c)\n\tcase codes.Array16, codes.Array32:\n\t\treturn d.decodeSlice(c)\n\tcase codes.Map16, codes.Map32:\n\t\terr = d.s.UnreadByte()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn d.DecodeMap()\n\tcase codes.FixExt1, codes.FixExt2, codes.FixExt4, codes.FixExt8, codes.FixExt16,\n\t\tcodes.Ext8, codes.Ext16, codes.Ext32:\n\t\treturn d.extInterface(c)\n\t}\n\n\treturn 0, fmt.Errorf(\"msgpack: unknown code %x decoding interface{}\", c)\n}\n\n// Skip skips next value.\nfunc (d *Decoder) Skip() error {\n\tc, err := d.readCode()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif codes.IsFixedNum(c) {\n\t\treturn nil\n\t} else if codes.IsFixedMap(c) {\n\t\treturn d.skipMap(c)\n\t} else if codes.IsFixedArray(c) {\n\t\treturn d.skipSlice(c)\n\t} else if codes.IsFixedString(c) {\n\t\treturn d.skipBytes(c)\n\t}\n\n\tswitch c {\n\tcase codes.Nil, codes.False, codes.True:\n\t\treturn nil\n\tcase codes.Uint8, codes.Int8:\n\t\treturn d.skipN(1)\n\tcase codes.Uint16, codes.Int16:\n\t\treturn d.skipN(2)\n\tcase codes.Uint32, codes.Int32, codes.Float:\n\t\treturn d.skipN(4)\n\tcase codes.Uint64, codes.Int64, codes.Double:\n\t\treturn d.skipN(8)\n\tcase codes.Bin8, codes.Bin16, codes.Bin32:\n\t\treturn d.skipBytes(c)\n\tcase codes.Str8, codes.Str16, codes.Str32:\n\t\treturn d.skipBytes(c)\n\tcase codes.Array16, codes.Array32:\n\t\treturn d.skipSlice(c)\n\tcase codes.Map16, codes.Map32:\n\t\treturn d.skipMap(c)\n\tcase codes.FixExt1, codes.FixExt2, codes.FixExt4, codes.FixExt8, codes.FixExt16,\n\t\tcodes.Ext8, codes.Ext16, codes.Ext32:\n\t\treturn d.skipExt(c)\n\t}\n\n\treturn fmt.Errorf(\"msgpack: unknown code %x\", c)\n}\n\n// PeekCode returns the next MessagePack code without advancing the reader.\n// Subpackage msgpack/codes contains list of available codes.\nfunc (d *Decoder) PeekCode() (codes.Code, error) {\n\tc, err := d.s.ReadByte()\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn codes.Code(c), d.s.UnreadByte()\n}\n\nfunc (d *Decoder) hasNilCode() bool {\n\tcode, err := d.PeekCode()\n\treturn err == nil && code == codes.Nil\n}\n\nfunc (d *Decoder) readCode() (codes.Code, error) {\n\td.extLen = 0\n\tc, err := d.s.ReadByte()\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tif d.rec != nil {\n\t\td.rec = append(d.rec, c)\n\t}\n\treturn codes.Code(c), nil\n}\n\nfunc (d *Decoder) readFull(b []byte) error {\n\t_, err := io.ReadFull(d.r, b)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif d.rec != nil {\n\t\td.rec = append(d.rec, b...)\n\t}\n\treturn nil\n}\n\nfunc (d *Decoder) readN(n int) ([]byte, error) {\n\tbuf, err := readN(d.r, d.buf, n)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\td.buf = buf\n\tif d.rec != nil {\n\t\td.rec = append(d.rec, buf...)\n\t}\n\treturn buf, nil\n}\n\nfunc readN(r io.Reader, b []byte, n int) ([]byte, error) {\n\tif b == nil {\n\t\tif n == 0 {\n\t\t\treturn make([]byte, 0), nil\n\t\t}\n\t\tif n <= bytesAllocLimit {\n\t\t\tb = make([]byte, n)\n\t\t} else {\n\t\t\tb = make([]byte, bytesAllocLimit)\n\t\t}\n\t}\n\n\tif n <= cap(b) {\n\t\tb = b[:n]\n\t\t_, err := io.ReadFull(r, b)\n\t\treturn b, err\n\t}\n\tb = b[:cap(b)]\n\n\tvar pos int\n\tfor {\n\t\talloc := n - len(b)\n\t\tif alloc > bytesAllocLimit {\n\t\t\talloc = bytesAllocLimit\n\t\t}\n\t\tb = append(b, make([]byte, alloc)...)\n\n\t\t_, err := io.ReadFull(r, b[pos:])\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tif len(b) == n {\n\t\t\tbreak\n\t\t}\n\t\tpos = len(b)\n\t}\n\n\treturn b, nil\n}\n\nfunc min(a, b int) int {\n\tif a <= b {\n\t\treturn a\n\t}\n\treturn b\n}\n"
  },
  {
    "path": "vendor/github.com/vmihailenco/msgpack/decode_map.go",
    "content": "package msgpack\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"reflect\"\n\n\t\"github.com/vmihailenco/msgpack/codes\"\n)\n\nconst mapElemsAllocLimit = 1e4\n\nvar mapStringStringPtrType = reflect.TypeOf((*map[string]string)(nil))\nvar mapStringStringType = mapStringStringPtrType.Elem()\n\nvar mapStringInterfacePtrType = reflect.TypeOf((*map[string]interface{})(nil))\nvar mapStringInterfaceType = mapStringInterfacePtrType.Elem()\n\nvar errInvalidCode = errors.New(\"invalid code\")\n\nfunc decodeMapValue(d *Decoder, v reflect.Value) error {\n\tsize, err := d.DecodeMapLen()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\ttyp := v.Type()\n\tif size == -1 {\n\t\tv.Set(reflect.Zero(typ))\n\t\treturn nil\n\t}\n\n\tif v.IsNil() {\n\t\tv.Set(reflect.MakeMap(typ))\n\t}\n\tif size == 0 {\n\t\treturn nil\n\t}\n\n\treturn decodeMapValueSize(d, v, size)\n}\n\nfunc decodeMapValueSize(d *Decoder, v reflect.Value, size int) error {\n\ttyp := v.Type()\n\tkeyType := typ.Key()\n\tvalueType := typ.Elem()\n\n\tfor i := 0; i < size; i++ {\n\t\tmk := reflect.New(keyType).Elem()\n\t\tif err := d.DecodeValue(mk); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tmv := reflect.New(valueType).Elem()\n\t\tif err := d.DecodeValue(mv); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tv.SetMapIndex(mk, mv)\n\t}\n\n\treturn nil\n}\n\n// DecodeMapLen decodes map length. Length is -1 when map is nil.\nfunc (d *Decoder) DecodeMapLen() (int, error) {\n\tc, err := d.readCode()\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\tif codes.IsExt(c) {\n\t\tif err = d.skipExtHeader(c); err != nil {\n\t\t\treturn 0, err\n\t\t}\n\n\t\tc, err = d.readCode()\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t}\n\treturn d.mapLen(c)\n}\n\nfunc (d *Decoder) mapLen(c codes.Code) (int, error) {\n\tsize, err := d._mapLen(c)\n\terr = expandInvalidCodeMapLenError(c, err)\n\treturn size, err\n}\n\nfunc (d *Decoder) _mapLen(c codes.Code) (int, error) {\n\tif c == codes.Nil {\n\t\treturn -1, nil\n\t}\n\tif c >= codes.FixedMapLow && c <= codes.FixedMapHigh {\n\t\treturn int(c & codes.FixedMapMask), nil\n\t}\n\tif c == codes.Map16 {\n\t\tsize, err := d.uint16()\n\t\treturn int(size), err\n\t}\n\tif c == codes.Map32 {\n\t\tsize, err := d.uint32()\n\t\treturn int(size), err\n\t}\n\treturn 0, errInvalidCode\n}\n\nfunc expandInvalidCodeMapLenError(c codes.Code, err error) error {\n\tif err == errInvalidCode {\n\t\treturn fmt.Errorf(\"msgpack: invalid code=%x decoding map length\", c)\n\t}\n\treturn err\n}\n\nfunc decodeMapStringStringValue(d *Decoder, v reflect.Value) error {\n\tmptr := v.Addr().Convert(mapStringStringPtrType).Interface().(*map[string]string)\n\treturn d.decodeMapStringStringPtr(mptr)\n}\n\nfunc (d *Decoder) decodeMapStringStringPtr(ptr *map[string]string) error {\n\tsize, err := d.DecodeMapLen()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif size == -1 {\n\t\t*ptr = nil\n\t\treturn nil\n\t}\n\n\tm := *ptr\n\tif m == nil {\n\t\t*ptr = make(map[string]string, min(size, mapElemsAllocLimit))\n\t\tm = *ptr\n\t}\n\n\tfor i := 0; i < size; i++ {\n\t\tmk, err := d.DecodeString()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmv, err := d.DecodeString()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tm[mk] = mv\n\t}\n\n\treturn nil\n}\n\nfunc decodeMapStringInterfaceValue(d *Decoder, v reflect.Value) error {\n\tptr := v.Addr().Convert(mapStringInterfacePtrType).Interface().(*map[string]interface{})\n\treturn d.decodeMapStringInterfacePtr(ptr)\n}\n\nfunc (d *Decoder) decodeMapStringInterfacePtr(ptr *map[string]interface{}) error {\n\tn, err := d.DecodeMapLen()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif n == -1 {\n\t\t*ptr = nil\n\t\treturn nil\n\t}\n\n\tm := *ptr\n\tif m == nil {\n\t\t*ptr = make(map[string]interface{}, min(n, mapElemsAllocLimit))\n\t\tm = *ptr\n\t}\n\n\tfor i := 0; i < n; i++ {\n\t\tmk, err := d.DecodeString()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmv, err := d.decodeInterfaceCond()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tm[mk] = mv\n\t}\n\n\treturn nil\n}\n\nfunc (d *Decoder) DecodeMap() (interface{}, error) {\n\tif d.decodeMapFunc != nil {\n\t\treturn d.decodeMapFunc(d)\n\t}\n\n\tsize, err := d.DecodeMapLen()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif size == -1 {\n\t\treturn nil, nil\n\t}\n\tif size == 0 {\n\t\treturn make(map[string]interface{}), nil\n\t}\n\n\tcode, err := d.PeekCode()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif codes.IsString(code) || codes.IsBin(code) {\n\t\treturn d.decodeMapStringInterfaceSize(size)\n\t}\n\n\tkey, err := d.decodeInterfaceCond()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvalue, err := d.decodeInterfaceCond()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tkeyType := reflect.TypeOf(key)\n\tvalueType := reflect.TypeOf(value)\n\n\tmapType := reflect.MapOf(keyType, valueType)\n\tmapValue := reflect.MakeMap(mapType)\n\n\tmapValue.SetMapIndex(reflect.ValueOf(key), reflect.ValueOf(value))\n\tsize--\n\n\terr = decodeMapValueSize(d, mapValue, size)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn mapValue.Interface(), nil\n}\n\nfunc (d *Decoder) decodeMapStringInterfaceSize(size int) (map[string]interface{}, error) {\n\tm := make(map[string]interface{}, min(size, mapElemsAllocLimit))\n\tfor i := 0; i < size; i++ {\n\t\tmk, err := d.DecodeString()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tmv, err := d.decodeInterfaceCond()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tm[mk] = mv\n\t}\n\treturn m, nil\n}\n\nfunc (d *Decoder) skipMap(c codes.Code) error {\n\tn, err := d.mapLen(c)\n\tif err != nil {\n\t\treturn err\n\t}\n\tfor i := 0; i < n; i++ {\n\t\tif err := d.Skip(); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif err := d.Skip(); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc decodeStructValue(d *Decoder, v reflect.Value) error {\n\tc, err := d.readCode()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tvar isArray bool\n\n\tn, err := d._mapLen(c)\n\tif err != nil {\n\t\tvar err2 error\n\t\tn, err2 = d.arrayLen(c)\n\t\tif err2 != nil {\n\t\t\treturn expandInvalidCodeMapLenError(c, err)\n\t\t}\n\t\tisArray = true\n\t}\n\tif n == -1 {\n\t\tif err = mustSet(v); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tv.Set(reflect.Zero(v.Type()))\n\t\treturn nil\n\t}\n\n\tvar fields *fields\n\tif d.useJSONTag {\n\t\tfields = jsonStructs.Fields(v.Type())\n\t} else {\n\t\tfields = structs.Fields(v.Type())\n\t}\n\n\tif isArray {\n\t\tfor i, f := range fields.List {\n\t\t\tif i >= n {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif err := f.DecodeValue(d, v); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t\t// Skip extra values.\n\t\tfor i := len(fields.List); i < n; i++ {\n\t\t\tif err := d.Skip(); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t\treturn nil\n\t}\n\n\tfor i := 0; i < n; i++ {\n\t\tname, err := d.DecodeString()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif f := fields.Table[name]; f != nil {\n\t\t\tif err := f.DecodeValue(d, v); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t} else {\n\t\t\tif err := d.Skip(); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/vmihailenco/msgpack/decode_number.go",
    "content": "package msgpack\n\nimport (\n\t\"fmt\"\n\t\"math\"\n\t\"reflect\"\n\n\t\"github.com/vmihailenco/msgpack/codes\"\n)\n\nfunc (d *Decoder) skipN(n int) error {\n\t_, err := d.readN(n)\n\treturn err\n}\n\nfunc (d *Decoder) uint8() (uint8, error) {\n\tc, err := d.readCode()\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn uint8(c), nil\n}\n\nfunc (d *Decoder) int8() (int8, error) {\n\tn, err := d.uint8()\n\treturn int8(n), err\n}\n\nfunc (d *Decoder) uint16() (uint16, error) {\n\tb, err := d.readN(2)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn (uint16(b[0]) << 8) | uint16(b[1]), nil\n}\n\nfunc (d *Decoder) int16() (int16, error) {\n\tn, err := d.uint16()\n\treturn int16(n), err\n}\n\nfunc (d *Decoder) uint32() (uint32, error) {\n\tb, err := d.readN(4)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tn := (uint32(b[0]) << 24) |\n\t\t(uint32(b[1]) << 16) |\n\t\t(uint32(b[2]) << 8) |\n\t\tuint32(b[3])\n\treturn n, nil\n}\n\nfunc (d *Decoder) int32() (int32, error) {\n\tn, err := d.uint32()\n\treturn int32(n), err\n}\n\nfunc (d *Decoder) uint64() (uint64, error) {\n\tb, err := d.readN(8)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tn := (uint64(b[0]) << 56) |\n\t\t(uint64(b[1]) << 48) |\n\t\t(uint64(b[2]) << 40) |\n\t\t(uint64(b[3]) << 32) |\n\t\t(uint64(b[4]) << 24) |\n\t\t(uint64(b[5]) << 16) |\n\t\t(uint64(b[6]) << 8) |\n\t\tuint64(b[7])\n\treturn n, nil\n}\n\nfunc (d *Decoder) int64() (int64, error) {\n\tn, err := d.uint64()\n\treturn int64(n), err\n}\n\n// DecodeUint64 decodes msgpack int8/16/32/64 and uint8/16/32/64\n// into Go uint64.\nfunc (d *Decoder) DecodeUint64() (uint64, error) {\n\tc, err := d.readCode()\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn d.uint(c)\n}\n\nfunc (d *Decoder) uint(c codes.Code) (uint64, error) {\n\tif c == codes.Nil {\n\t\treturn 0, nil\n\t}\n\tif codes.IsFixedNum(c) {\n\t\treturn uint64(int8(c)), nil\n\t}\n\tswitch c {\n\tcase codes.Uint8:\n\t\tn, err := d.uint8()\n\t\treturn uint64(n), err\n\tcase codes.Int8:\n\t\tn, err := d.int8()\n\t\treturn uint64(n), err\n\tcase codes.Uint16:\n\t\tn, err := d.uint16()\n\t\treturn uint64(n), err\n\tcase codes.Int16:\n\t\tn, err := d.int16()\n\t\treturn uint64(n), err\n\tcase codes.Uint32:\n\t\tn, err := d.uint32()\n\t\treturn uint64(n), err\n\tcase codes.Int32:\n\t\tn, err := d.int32()\n\t\treturn uint64(n), err\n\tcase codes.Uint64, codes.Int64:\n\t\treturn d.uint64()\n\t}\n\treturn 0, fmt.Errorf(\"msgpack: invalid code=%x decoding uint64\", c)\n}\n\n// DecodeInt64 decodes msgpack int8/16/32/64 and uint8/16/32/64\n// into Go int64.\nfunc (d *Decoder) DecodeInt64() (int64, error) {\n\tc, err := d.readCode()\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn d.int(c)\n}\n\nfunc (d *Decoder) int(c codes.Code) (int64, error) {\n\tif c == codes.Nil {\n\t\treturn 0, nil\n\t}\n\tif codes.IsFixedNum(c) {\n\t\treturn int64(int8(c)), nil\n\t}\n\tswitch c {\n\tcase codes.Uint8:\n\t\tn, err := d.uint8()\n\t\treturn int64(n), err\n\tcase codes.Int8:\n\t\tn, err := d.uint8()\n\t\treturn int64(int8(n)), err\n\tcase codes.Uint16:\n\t\tn, err := d.uint16()\n\t\treturn int64(n), err\n\tcase codes.Int16:\n\t\tn, err := d.uint16()\n\t\treturn int64(int16(n)), err\n\tcase codes.Uint32:\n\t\tn, err := d.uint32()\n\t\treturn int64(n), err\n\tcase codes.Int32:\n\t\tn, err := d.uint32()\n\t\treturn int64(int32(n)), err\n\tcase codes.Uint64, codes.Int64:\n\t\tn, err := d.uint64()\n\t\treturn int64(n), err\n\t}\n\treturn 0, fmt.Errorf(\"msgpack: invalid code=%x decoding int64\", c)\n}\n\nfunc (d *Decoder) DecodeFloat32() (float32, error) {\n\tc, err := d.readCode()\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn d.float32(c)\n}\n\nfunc (d *Decoder) float32(c codes.Code) (float32, error) {\n\tif c == codes.Float {\n\t\tn, err := d.uint32()\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\treturn math.Float32frombits(n), nil\n\t}\n\n\tn, err := d.int(c)\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"msgpack: invalid code=%x decoding float32\", c)\n\t}\n\treturn float32(n), nil\n}\n\n// DecodeFloat64 decodes msgpack float32/64 into Go float64.\nfunc (d *Decoder) DecodeFloat64() (float64, error) {\n\tc, err := d.readCode()\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn d.float64(c)\n}\n\nfunc (d *Decoder) float64(c codes.Code) (float64, error) {\n\tswitch c {\n\tcase codes.Float:\n\t\tn, err := d.float32(c)\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\treturn float64(n), nil\n\tcase codes.Double:\n\t\tn, err := d.uint64()\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\treturn math.Float64frombits(n), nil\n\t}\n\n\tn, err := d.int(c)\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"msgpack: invalid code=%x decoding float32\", c)\n\t}\n\treturn float64(n), nil\n}\n\nfunc (d *Decoder) DecodeUint() (uint, error) {\n\tn, err := d.DecodeUint64()\n\treturn uint(n), err\n}\n\nfunc (d *Decoder) DecodeUint8() (uint8, error) {\n\tn, err := d.DecodeUint64()\n\treturn uint8(n), err\n}\n\nfunc (d *Decoder) DecodeUint16() (uint16, error) {\n\tn, err := d.DecodeUint64()\n\treturn uint16(n), err\n}\n\nfunc (d *Decoder) DecodeUint32() (uint32, error) {\n\tn, err := d.DecodeUint64()\n\treturn uint32(n), err\n}\n\nfunc (d *Decoder) DecodeInt() (int, error) {\n\tn, err := d.DecodeInt64()\n\treturn int(n), err\n}\n\nfunc (d *Decoder) DecodeInt8() (int8, error) {\n\tn, err := d.DecodeInt64()\n\treturn int8(n), err\n}\n\nfunc (d *Decoder) DecodeInt16() (int16, error) {\n\tn, err := d.DecodeInt64()\n\treturn int16(n), err\n}\n\nfunc (d *Decoder) DecodeInt32() (int32, error) {\n\tn, err := d.DecodeInt64()\n\treturn int32(n), err\n}\n\nfunc decodeFloat32Value(d *Decoder, v reflect.Value) error {\n\tf, err := d.DecodeFloat32()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif err = mustSet(v); err != nil {\n\t\treturn err\n\t}\n\tv.SetFloat(float64(f))\n\treturn nil\n}\n\nfunc decodeFloat64Value(d *Decoder, v reflect.Value) error {\n\tf, err := d.DecodeFloat64()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif err = mustSet(v); err != nil {\n\t\treturn err\n\t}\n\tv.SetFloat(f)\n\treturn nil\n}\n\nfunc decodeInt64Value(d *Decoder, v reflect.Value) error {\n\tn, err := d.DecodeInt64()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif err = mustSet(v); err != nil {\n\t\treturn err\n\t}\n\tv.SetInt(n)\n\treturn nil\n}\n\nfunc decodeUint64Value(d *Decoder, v reflect.Value) error {\n\tn, err := d.DecodeUint64()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif err = mustSet(v); err != nil {\n\t\treturn err\n\t}\n\tv.SetUint(n)\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/vmihailenco/msgpack/decode_query.go",
    "content": "package msgpack\n\nimport (\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/vmihailenco/msgpack/codes\"\n)\n\ntype queryResult struct {\n\tquery       string\n\tkey         string\n\thasAsterisk bool\n\n\tvalues []interface{}\n}\n\nfunc (q *queryResult) nextKey() {\n\tind := strings.IndexByte(q.query, '.')\n\tif ind == -1 {\n\t\tq.key = q.query\n\t\tq.query = \"\"\n\t\treturn\n\t}\n\tq.key = q.query[:ind]\n\tq.query = q.query[ind+1:]\n}\n\n// Query extracts data specified by the query from the msgpack stream skipping\n// any other data. Query consists of map keys and array indexes separated with dot,\n// e.g. key1.0.key2.\nfunc (d *Decoder) Query(query string) ([]interface{}, error) {\n\tres := queryResult{\n\t\tquery: query,\n\t}\n\tif err := d.query(&res); err != nil {\n\t\treturn nil, err\n\t}\n\treturn res.values, nil\n}\n\nfunc (d *Decoder) query(q *queryResult) error {\n\tq.nextKey()\n\tif q.key == \"\" {\n\t\tv, err := d.decodeInterfaceCond()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tq.values = append(q.values, v)\n\t\treturn nil\n\t}\n\n\tcode, err := d.PeekCode()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tswitch {\n\tcase code == codes.Map16 || code == codes.Map32 || codes.IsFixedMap(code):\n\t\terr = d.queryMapKey(q)\n\tcase code == codes.Array16 || code == codes.Array32 || codes.IsFixedArray(code):\n\t\terr = d.queryArrayIndex(q)\n\tdefault:\n\t\terr = fmt.Errorf(\"msgpack: unsupported code=%x decoding key=%q\", code, q.key)\n\t}\n\treturn err\n}\n\nfunc (d *Decoder) queryMapKey(q *queryResult) error {\n\tn, err := d.DecodeMapLen()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif n == -1 {\n\t\treturn nil\n\t}\n\n\tfor i := 0; i < n; i++ {\n\t\tk, err := d.bytesNoCopy()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tif string(k) == q.key {\n\t\t\tif err := d.query(q); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif q.hasAsterisk {\n\t\t\t\treturn d.skipNext((n - i - 1) * 2)\n\t\t\t}\n\t\t\treturn nil\n\t\t}\n\n\t\tif err := d.Skip(); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (d *Decoder) queryArrayIndex(q *queryResult) error {\n\tn, err := d.DecodeArrayLen()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif n == -1 {\n\t\treturn nil\n\t}\n\n\tif q.key == \"*\" {\n\t\tq.hasAsterisk = true\n\n\t\tquery := q.query\n\t\tfor i := 0; i < n; i++ {\n\t\t\tq.query = query\n\t\t\tif err := d.query(q); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\n\t\tq.hasAsterisk = false\n\t\treturn nil\n\t}\n\n\tind, err := strconv.Atoi(q.key)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfor i := 0; i < n; i++ {\n\t\tif i == ind {\n\t\t\tif err := d.query(q); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif q.hasAsterisk {\n\t\t\t\treturn d.skipNext(n - i - 1)\n\t\t\t}\n\t\t\treturn nil\n\t\t}\n\n\t\tif err := d.Skip(); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (d *Decoder) skipNext(n int) error {\n\tfor i := 0; i < n; i++ {\n\t\tif err := d.Skip(); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/vmihailenco/msgpack/decode_slice.go",
    "content": "package msgpack\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\n\t\"github.com/vmihailenco/msgpack/codes\"\n)\n\nconst sliceElemsAllocLimit = 1e4\n\nvar sliceStringPtrType = reflect.TypeOf((*[]string)(nil))\n\n// DecodeArrayLen decodes array length. Length is -1 when array is nil.\nfunc (d *Decoder) DecodeArrayLen() (int, error) {\n\tc, err := d.readCode()\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn d.arrayLen(c)\n}\n\nfunc (d *Decoder) arrayLen(c codes.Code) (int, error) {\n\tif c == codes.Nil {\n\t\treturn -1, nil\n\t} else if c >= codes.FixedArrayLow && c <= codes.FixedArrayHigh {\n\t\treturn int(c & codes.FixedArrayMask), nil\n\t}\n\tswitch c {\n\tcase codes.Array16:\n\t\tn, err := d.uint16()\n\t\treturn int(n), err\n\tcase codes.Array32:\n\t\tn, err := d.uint32()\n\t\treturn int(n), err\n\t}\n\treturn 0, fmt.Errorf(\"msgpack: invalid code=%x decoding array length\", c)\n}\n\nfunc decodeStringSliceValue(d *Decoder, v reflect.Value) error {\n\tptr := v.Addr().Convert(sliceStringPtrType).Interface().(*[]string)\n\treturn d.decodeStringSlicePtr(ptr)\n}\n\nfunc (d *Decoder) decodeStringSlicePtr(ptr *[]string) error {\n\tn, err := d.DecodeArrayLen()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif n == -1 {\n\t\treturn nil\n\t}\n\n\tss := setStringsCap(*ptr, n)\n\tfor i := 0; i < n; i++ {\n\t\ts, err := d.DecodeString()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tss = append(ss, s)\n\t}\n\t*ptr = ss\n\n\treturn nil\n}\n\nfunc setStringsCap(s []string, n int) []string {\n\tif n > sliceElemsAllocLimit {\n\t\tn = sliceElemsAllocLimit\n\t}\n\n\tif s == nil {\n\t\treturn make([]string, 0, n)\n\t}\n\n\tif cap(s) >= n {\n\t\treturn s[:0]\n\t}\n\n\ts = s[:cap(s)]\n\ts = append(s, make([]string, n-len(s))...)\n\treturn s[:0]\n}\n\nfunc decodeSliceValue(d *Decoder, v reflect.Value) error {\n\tn, err := d.DecodeArrayLen()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif n == -1 {\n\t\tv.Set(reflect.Zero(v.Type()))\n\t\treturn nil\n\t}\n\tif n == 0 && v.IsNil() {\n\t\tv.Set(reflect.MakeSlice(v.Type(), 0, 0))\n\t\treturn nil\n\t}\n\n\tif v.Cap() >= n {\n\t\tv.Set(v.Slice(0, n))\n\t} else if v.Len() < v.Cap() {\n\t\tv.Set(v.Slice(0, v.Cap()))\n\t}\n\n\tfor i := 0; i < n; i++ {\n\t\tif i >= v.Len() {\n\t\t\tv.Set(growSliceValue(v, n))\n\t\t}\n\t\telem := v.Index(i)\n\t\tif err := d.DecodeValue(elem); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc growSliceValue(v reflect.Value, n int) reflect.Value {\n\tdiff := n - v.Len()\n\tif diff > sliceElemsAllocLimit {\n\t\tdiff = sliceElemsAllocLimit\n\t}\n\tv = reflect.AppendSlice(v, reflect.MakeSlice(v.Type(), diff, diff))\n\treturn v\n}\n\nfunc decodeArrayValue(d *Decoder, v reflect.Value) error {\n\tn, err := d.DecodeArrayLen()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif n == -1 {\n\t\treturn nil\n\t}\n\n\tif n > v.Len() {\n\t\treturn fmt.Errorf(\"%s len is %d, but msgpack has %d elements\", v.Type(), v.Len(), n)\n\t}\n\tfor i := 0; i < n; i++ {\n\t\tsv := v.Index(i)\n\t\tif err := d.DecodeValue(sv); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (d *Decoder) DecodeSlice() ([]interface{}, error) {\n\tc, err := d.readCode()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn d.decodeSlice(c)\n}\n\nfunc (d *Decoder) decodeSlice(c codes.Code) ([]interface{}, error) {\n\tn, err := d.arrayLen(c)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif n == -1 {\n\t\treturn nil, nil\n\t}\n\n\ts := make([]interface{}, 0, min(n, sliceElemsAllocLimit))\n\tfor i := 0; i < n; i++ {\n\t\tv, err := d.decodeInterfaceCond()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\ts = append(s, v)\n\t}\n\n\treturn s, nil\n}\n\nfunc (d *Decoder) skipSlice(c codes.Code) error {\n\tn, err := d.arrayLen(c)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfor i := 0; i < n; i++ {\n\t\tif err := d.Skip(); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/vmihailenco/msgpack/decode_string.go",
    "content": "package msgpack\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\n\t\"github.com/vmihailenco/msgpack/codes\"\n)\n\nfunc (d *Decoder) bytesLen(c codes.Code) (int, error) {\n\tif c == codes.Nil {\n\t\treturn -1, nil\n\t} else if codes.IsFixedString(c) {\n\t\treturn int(c & codes.FixedStrMask), nil\n\t}\n\tswitch c {\n\tcase codes.Str8, codes.Bin8:\n\t\tn, err := d.uint8()\n\t\treturn int(n), err\n\tcase codes.Str16, codes.Bin16:\n\t\tn, err := d.uint16()\n\t\treturn int(n), err\n\tcase codes.Str32, codes.Bin32:\n\t\tn, err := d.uint32()\n\t\treturn int(n), err\n\t}\n\treturn 0, fmt.Errorf(\"msgpack: invalid code=%x decoding bytes length\", c)\n}\n\nfunc (d *Decoder) DecodeString() (string, error) {\n\tc, err := d.readCode()\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn d.string(c)\n}\n\nfunc (d *Decoder) string(c codes.Code) (string, error) {\n\tn, err := d.bytesLen(c)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tif n == -1 {\n\t\treturn \"\", nil\n\t}\n\tb, err := d.readN(n)\n\treturn string(b), err\n}\n\nfunc decodeStringValue(d *Decoder, v reflect.Value) error {\n\ts, err := d.DecodeString()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif err = mustSet(v); err != nil {\n\t\treturn err\n\t}\n\tv.SetString(s)\n\treturn nil\n}\n\nfunc (d *Decoder) DecodeBytesLen() (int, error) {\n\tc, err := d.readCode()\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn d.bytesLen(c)\n}\n\nfunc (d *Decoder) DecodeBytes() ([]byte, error) {\n\tc, err := d.readCode()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn d.bytes(c, nil)\n}\n\nfunc (d *Decoder) bytes(c codes.Code, b []byte) ([]byte, error) {\n\tn, err := d.bytesLen(c)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif n == -1 {\n\t\treturn nil, nil\n\t}\n\treturn readN(d.r, b, n)\n}\n\nfunc (d *Decoder) bytesNoCopy() ([]byte, error) {\n\tc, err := d.readCode()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tn, err := d.bytesLen(c)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif n == -1 {\n\t\treturn nil, nil\n\t}\n\treturn d.readN(n)\n}\n\nfunc (d *Decoder) decodeBytesPtr(ptr *[]byte) error {\n\tc, err := d.readCode()\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn d.bytesPtr(c, ptr)\n}\n\nfunc (d *Decoder) bytesPtr(c codes.Code, ptr *[]byte) error {\n\tn, err := d.bytesLen(c)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif n == -1 {\n\t\t*ptr = nil\n\t\treturn nil\n\t}\n\n\t*ptr, err = readN(d.r, *ptr, n)\n\treturn err\n}\n\nfunc (d *Decoder) skipBytes(c codes.Code) error {\n\tn, err := d.bytesLen(c)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif n == -1 {\n\t\treturn nil\n\t}\n\treturn d.skipN(n)\n}\n\nfunc decodeBytesValue(d *Decoder, v reflect.Value) error {\n\tc, err := d.readCode()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tb, err := d.bytes(c, v.Bytes())\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif err = mustSet(v); err != nil {\n\t\treturn err\n\t}\n\tv.SetBytes(b)\n\n\treturn nil\n}\n\nfunc decodeByteArrayValue(d *Decoder, v reflect.Value) error {\n\tc, err := d.readCode()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tn, err := d.bytesLen(c)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif n == -1 {\n\t\treturn nil\n\t}\n\tif n > v.Len() {\n\t\treturn fmt.Errorf(\"%s len is %d, but msgpack has %d elements\", v.Type(), v.Len(), n)\n\t}\n\n\tb := v.Slice(0, n).Bytes()\n\treturn d.readFull(b)\n}\n"
  },
  {
    "path": "vendor/github.com/vmihailenco/msgpack/decode_value.go",
    "content": "package msgpack\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"reflect\"\n)\n\nvar interfaceType = reflect.TypeOf((*interface{})(nil)).Elem()\nvar stringType = reflect.TypeOf((*string)(nil)).Elem()\n\nvar valueDecoders []decoderFunc\n\nfunc init() {\n\tvalueDecoders = []decoderFunc{\n\t\treflect.Bool:          decodeBoolValue,\n\t\treflect.Int:           decodeInt64Value,\n\t\treflect.Int8:          decodeInt64Value,\n\t\treflect.Int16:         decodeInt64Value,\n\t\treflect.Int32:         decodeInt64Value,\n\t\treflect.Int64:         decodeInt64Value,\n\t\treflect.Uint:          decodeUint64Value,\n\t\treflect.Uint8:         decodeUint64Value,\n\t\treflect.Uint16:        decodeUint64Value,\n\t\treflect.Uint32:        decodeUint64Value,\n\t\treflect.Uint64:        decodeUint64Value,\n\t\treflect.Float32:       decodeFloat32Value,\n\t\treflect.Float64:       decodeFloat64Value,\n\t\treflect.Complex64:     decodeUnsupportedValue,\n\t\treflect.Complex128:    decodeUnsupportedValue,\n\t\treflect.Array:         decodeArrayValue,\n\t\treflect.Chan:          decodeUnsupportedValue,\n\t\treflect.Func:          decodeUnsupportedValue,\n\t\treflect.Interface:     decodeInterfaceValue,\n\t\treflect.Map:           decodeMapValue,\n\t\treflect.Ptr:           decodeUnsupportedValue,\n\t\treflect.Slice:         decodeSliceValue,\n\t\treflect.String:        decodeStringValue,\n\t\treflect.Struct:        decodeStructValue,\n\t\treflect.UnsafePointer: decodeUnsupportedValue,\n\t}\n}\n\nfunc mustSet(v reflect.Value) error {\n\tif !v.CanSet() {\n\t\treturn fmt.Errorf(\"msgpack: Decode(nonsettable %s)\", v.Type())\n\t}\n\treturn nil\n}\n\nfunc getDecoder(typ reflect.Type) decoderFunc {\n\tkind := typ.Kind()\n\n\tdecoder, ok := typDecMap[typ]\n\tif ok {\n\t\treturn decoder\n\t}\n\n\tif typ.Implements(customDecoderType) {\n\t\treturn decodeCustomValue\n\t}\n\tif typ.Implements(unmarshalerType) {\n\t\treturn unmarshalValue\n\t}\n\n\t// Addressable struct field value.\n\tif kind != reflect.Ptr {\n\t\tptr := reflect.PtrTo(typ)\n\t\tif ptr.Implements(customDecoderType) {\n\t\t\treturn decodeCustomValueAddr\n\t\t}\n\t\tif ptr.Implements(unmarshalerType) {\n\t\t\treturn unmarshalValueAddr\n\t\t}\n\t}\n\n\tswitch kind {\n\tcase reflect.Ptr:\n\t\treturn ptrDecoderFunc(typ)\n\tcase reflect.Slice:\n\t\telem := typ.Elem()\n\t\tswitch elem.Kind() {\n\t\tcase reflect.Uint8:\n\t\t\treturn decodeBytesValue\n\t\t}\n\t\tswitch elem {\n\t\tcase stringType:\n\t\t\treturn decodeStringSliceValue\n\t\t}\n\tcase reflect.Array:\n\t\tif typ.Elem().Kind() == reflect.Uint8 {\n\t\t\treturn decodeByteArrayValue\n\t\t}\n\tcase reflect.Map:\n\t\tif typ.Key() == stringType {\n\t\t\tswitch typ.Elem() {\n\t\t\tcase stringType:\n\t\t\t\treturn decodeMapStringStringValue\n\t\t\tcase interfaceType:\n\t\t\t\treturn decodeMapStringInterfaceValue\n\t\t\t}\n\t\t}\n\t}\n\treturn valueDecoders[kind]\n}\n\nfunc ptrDecoderFunc(typ reflect.Type) decoderFunc {\n\tdecoder := getDecoder(typ.Elem())\n\treturn func(d *Decoder, v reflect.Value) error {\n\t\tif d.hasNilCode() {\n\t\t\tif err := mustSet(v); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif !v.IsNil() {\n\t\t\t\tv.Set(reflect.Zero(v.Type()))\n\t\t\t}\n\t\t\treturn d.DecodeNil()\n\t\t}\n\t\tif v.IsNil() {\n\t\t\tif err := mustSet(v); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tv.Set(reflect.New(v.Type().Elem()))\n\t\t}\n\t\treturn decoder(d, v.Elem())\n\t}\n}\n\nfunc decodeCustomValueAddr(d *Decoder, v reflect.Value) error {\n\tif !v.CanAddr() {\n\t\treturn fmt.Errorf(\"msgpack: Decode(nonaddressable %T)\", v.Interface())\n\t}\n\treturn decodeCustomValue(d, v.Addr())\n}\n\nfunc decodeCustomValue(d *Decoder, v reflect.Value) error {\n\tif d.hasNilCode() {\n\t\treturn d.decodeNilValue(v)\n\t}\n\n\tif v.IsNil() {\n\t\tv.Set(reflect.New(v.Type().Elem()))\n\t}\n\n\tdecoder := v.Interface().(CustomDecoder)\n\treturn decoder.DecodeMsgpack(d)\n}\n\nfunc unmarshalValueAddr(d *Decoder, v reflect.Value) error {\n\tif !v.CanAddr() {\n\t\treturn fmt.Errorf(\"msgpack: Decode(nonaddressable %T)\", v.Interface())\n\t}\n\treturn unmarshalValue(d, v.Addr())\n}\n\nfunc unmarshalValue(d *Decoder, v reflect.Value) error {\n\tif d.extLen == 0 || d.extLen == 1 {\n\t\tif d.hasNilCode() {\n\t\t\treturn d.decodeNilValue(v)\n\t\t}\n\t}\n\n\tif v.IsNil() {\n\t\tv.Set(reflect.New(v.Type().Elem()))\n\t}\n\n\tif d.extLen != 0 {\n\t\tb, err := d.readN(d.extLen)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\td.rec = b\n\t} else {\n\t\td.rec = makeBuffer()\n\t\tif err := d.Skip(); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tunmarshaler := v.Interface().(Unmarshaler)\n\terr := unmarshaler.UnmarshalMsgpack(d.rec)\n\td.rec = nil\n\treturn err\n}\n\nfunc decodeBoolValue(d *Decoder, v reflect.Value) error {\n\tflag, err := d.DecodeBool()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif err = mustSet(v); err != nil {\n\t\treturn err\n\t}\n\tv.SetBool(flag)\n\treturn nil\n}\n\nfunc decodeInterfaceValue(d *Decoder, v reflect.Value) error {\n\tif v.IsNil() {\n\t\treturn d.interfaceValue(v)\n\t}\n\n\telem := v.Elem()\n\tif !elem.CanAddr() {\n\t\tif d.hasNilCode() {\n\t\t\tv.Set(reflect.Zero(v.Type()))\n\t\t\treturn d.DecodeNil()\n\t\t}\n\t}\n\n\treturn d.DecodeValue(elem)\n}\n\nfunc (d *Decoder) interfaceValue(v reflect.Value) error {\n\tvv, err := d.decodeInterfaceCond()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif vv != nil {\n\t\tif v.Type() == errorType {\n\t\t\tif vv, ok := vv.(string); ok {\n\t\t\t\tv.Set(reflect.ValueOf(errors.New(vv)))\n\t\t\t\treturn nil\n\t\t\t}\n\t\t}\n\n\t\tv.Set(reflect.ValueOf(vv))\n\t}\n\n\treturn nil\n}\n\nfunc decodeUnsupportedValue(d *Decoder, v reflect.Value) error {\n\treturn fmt.Errorf(\"msgpack: Decode(unsupported %s)\", v.Type())\n}\n"
  },
  {
    "path": "vendor/github.com/vmihailenco/msgpack/encode.go",
    "content": "package msgpack\n\nimport (\n\t\"bytes\"\n\t\"io\"\n\t\"reflect\"\n\t\"time\"\n\n\t\"github.com/vmihailenco/msgpack/codes\"\n)\n\ntype writer interface {\n\tio.Writer\n\tWriteByte(byte) error\n\tWriteString(string) (int, error)\n}\n\ntype byteWriter struct {\n\tio.Writer\n\n\tbuf       []byte\n\tbootstrap [64]byte\n}\n\nfunc newByteWriter(w io.Writer) *byteWriter {\n\tbw := &byteWriter{\n\t\tWriter: w,\n\t}\n\tbw.buf = bw.bootstrap[:]\n\treturn bw\n}\n\nfunc (w *byteWriter) WriteByte(c byte) error {\n\tw.buf = w.buf[:1]\n\tw.buf[0] = c\n\t_, err := w.Write(w.buf)\n\treturn err\n}\n\nfunc (w *byteWriter) WriteString(s string) (int, error) {\n\tw.buf = append(w.buf[:0], s...)\n\treturn w.Write(w.buf)\n}\n\n// Marshal returns the MessagePack encoding of v.\nfunc Marshal(v interface{}) ([]byte, error) {\n\tvar buf bytes.Buffer\n\terr := NewEncoder(&buf).Encode(v)\n\treturn buf.Bytes(), err\n}\n\ntype Encoder struct {\n\tw writer\n\n\tbuf []byte\n\t// timeBuf is lazily allocated in encodeTime() to\n\t// avoid allocations when time.Time value are encoded\n\t//\n\t// buf can't be reused for time encoding, as buf is used\n\t// to encode msgpack extLen\n\ttimeBuf []byte\n\n\tsortMapKeys   bool\n\tstructAsArray bool\n\tuseJSONTag    bool\n\tuseCompact    bool\n}\n\n// NewEncoder returns a new encoder that writes to w.\nfunc NewEncoder(w io.Writer) *Encoder {\n\tbw, ok := w.(writer)\n\tif !ok {\n\t\tbw = newByteWriter(w)\n\t}\n\treturn &Encoder{\n\t\tw:   bw,\n\t\tbuf: make([]byte, 9),\n\t}\n}\n\n// SortMapKeys causes the Encoder to encode map keys in increasing order.\n// Supported map types are:\n//   - map[string]string\n//   - map[string]interface{}\nfunc (e *Encoder) SortMapKeys(flag bool) *Encoder {\n\te.sortMapKeys = flag\n\treturn e\n}\n\n// StructAsArray causes the Encoder to encode Go structs as MessagePack arrays.\nfunc (e *Encoder) StructAsArray(flag bool) *Encoder {\n\te.structAsArray = flag\n\treturn e\n}\n\n// UseJSONTag causes the Encoder to use json struct tag as fallback option\n// if there is no msgpack tag.\nfunc (e *Encoder) UseJSONTag(flag bool) *Encoder {\n\te.useJSONTag = flag\n\treturn e\n}\n\n// UseCompactEncoding causes the Encoder to chose the most compact encoding.\n// For example, it allows to encode Go int64 as msgpack int8 saving 7 bytes.\nfunc (e *Encoder) UseCompactEncoding(flag bool) *Encoder {\n\te.useCompact = flag\n\treturn e\n}\n\nfunc (e *Encoder) Encode(v interface{}) error {\n\tswitch v := v.(type) {\n\tcase nil:\n\t\treturn e.EncodeNil()\n\tcase string:\n\t\treturn e.EncodeString(v)\n\tcase []byte:\n\t\treturn e.EncodeBytes(v)\n\tcase int:\n\t\treturn e.encodeInt64Cond(int64(v))\n\tcase int64:\n\t\treturn e.encodeInt64Cond(v)\n\tcase uint:\n\t\treturn e.encodeUint64Cond(uint64(v))\n\tcase uint64:\n\t\treturn e.encodeUint64Cond(v)\n\tcase bool:\n\t\treturn e.EncodeBool(v)\n\tcase float32:\n\t\treturn e.EncodeFloat32(v)\n\tcase float64:\n\t\treturn e.EncodeFloat64(v)\n\tcase time.Duration:\n\t\treturn e.encodeInt64Cond(int64(v))\n\tcase time.Time:\n\t\treturn e.EncodeTime(v)\n\t}\n\treturn e.EncodeValue(reflect.ValueOf(v))\n}\n\nfunc (e *Encoder) EncodeMulti(v ...interface{}) error {\n\tfor _, vv := range v {\n\t\tif err := e.Encode(vv); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (e *Encoder) EncodeValue(v reflect.Value) error {\n\tfn := getEncoder(v.Type())\n\treturn fn(e, v)\n}\n\nfunc (e *Encoder) EncodeNil() error {\n\treturn e.writeCode(codes.Nil)\n}\n\nfunc (e *Encoder) EncodeBool(value bool) error {\n\tif value {\n\t\treturn e.writeCode(codes.True)\n\t}\n\treturn e.writeCode(codes.False)\n}\n\nfunc (e *Encoder) writeCode(c codes.Code) error {\n\treturn e.w.WriteByte(byte(c))\n}\n\nfunc (e *Encoder) write(b []byte) error {\n\t_, err := e.w.Write(b)\n\treturn err\n}\n\nfunc (e *Encoder) writeString(s string) error {\n\t_, err := e.w.WriteString(s)\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/vmihailenco/msgpack/encode_map.go",
    "content": "package msgpack\n\nimport (\n\t\"reflect\"\n\t\"sort\"\n\n\t\"github.com/vmihailenco/msgpack/codes\"\n)\n\nfunc encodeMapValue(e *Encoder, v reflect.Value) error {\n\tif v.IsNil() {\n\t\treturn e.EncodeNil()\n\t}\n\n\tif err := e.EncodeMapLen(v.Len()); err != nil {\n\t\treturn err\n\t}\n\n\tfor _, key := range v.MapKeys() {\n\t\tif err := e.EncodeValue(key); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif err := e.EncodeValue(v.MapIndex(key)); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc encodeMapStringStringValue(e *Encoder, v reflect.Value) error {\n\tif v.IsNil() {\n\t\treturn e.EncodeNil()\n\t}\n\n\tif err := e.EncodeMapLen(v.Len()); err != nil {\n\t\treturn err\n\t}\n\n\tm := v.Convert(mapStringStringType).Interface().(map[string]string)\n\tif e.sortMapKeys {\n\t\treturn e.encodeSortedMapStringString(m)\n\t}\n\n\tfor mk, mv := range m {\n\t\tif err := e.EncodeString(mk); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif err := e.EncodeString(mv); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc encodeMapStringInterfaceValue(e *Encoder, v reflect.Value) error {\n\tif v.IsNil() {\n\t\treturn e.EncodeNil()\n\t}\n\n\tif err := e.EncodeMapLen(v.Len()); err != nil {\n\t\treturn err\n\t}\n\n\tm := v.Convert(mapStringInterfaceType).Interface().(map[string]interface{})\n\tif e.sortMapKeys {\n\t\treturn e.encodeSortedMapStringInterface(m)\n\t}\n\n\tfor mk, mv := range m {\n\t\tif err := e.EncodeString(mk); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif err := e.Encode(mv); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (e *Encoder) encodeSortedMapStringString(m map[string]string) error {\n\tkeys := make([]string, 0, len(m))\n\tfor k, _ := range m {\n\t\tkeys = append(keys, k)\n\t}\n\tsort.Strings(keys)\n\n\tfor _, k := range keys {\n\t\terr := e.EncodeString(k)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif err = e.EncodeString(m[k]); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (e *Encoder) encodeSortedMapStringInterface(m map[string]interface{}) error {\n\tkeys := make([]string, 0, len(m))\n\tfor k, _ := range m {\n\t\tkeys = append(keys, k)\n\t}\n\tsort.Strings(keys)\n\n\tfor _, k := range keys {\n\t\terr := e.EncodeString(k)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif err = e.Encode(m[k]); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (e *Encoder) EncodeMapLen(l int) error {\n\tif l < 16 {\n\t\treturn e.writeCode(codes.FixedMapLow | codes.Code(l))\n\t}\n\tif l < 65536 {\n\t\treturn e.write2(codes.Map16, uint16(l))\n\t}\n\treturn e.write4(codes.Map32, uint32(l))\n}\n\nfunc encodeStructValue(e *Encoder, strct reflect.Value) error {\n\tvar structFields *fields\n\tif e.useJSONTag {\n\t\tstructFields = jsonStructs.Fields(strct.Type())\n\t} else {\n\t\tstructFields = structs.Fields(strct.Type())\n\t}\n\n\tif e.structAsArray || structFields.AsArray {\n\t\treturn encodeStructValueAsArray(e, strct, structFields.List)\n\t}\n\tfields := structFields.OmitEmpty(strct)\n\n\tif err := e.EncodeMapLen(len(fields)); err != nil {\n\t\treturn err\n\t}\n\n\tfor _, f := range fields {\n\t\tif err := e.EncodeString(f.name); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif err := f.EncodeValue(e, strct); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc encodeStructValueAsArray(e *Encoder, strct reflect.Value, fields []*field) error {\n\tif err := e.EncodeArrayLen(len(fields)); err != nil {\n\t\treturn err\n\t}\n\tfor _, f := range fields {\n\t\tif err := f.EncodeValue(e, strct); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/vmihailenco/msgpack/encode_number.go",
    "content": "package msgpack\n\nimport (\n\t\"math\"\n\t\"reflect\"\n\n\t\"github.com/vmihailenco/msgpack/codes\"\n)\n\n// EncodeUint8 encodes an uint8 in 2 bytes preserving type of the number.\nfunc (e *Encoder) EncodeUint8(n uint8) error {\n\treturn e.write1(codes.Uint8, n)\n}\n\nfunc (e *Encoder) encodeUint8Cond(n uint8) error {\n\tif e.useCompact {\n\t\treturn e.EncodeUint(uint64(n))\n\t}\n\treturn e.EncodeUint8(n)\n}\n\n// EncodeUint16 encodes an uint16 in 3 bytes preserving type of the number.\nfunc (e *Encoder) EncodeUint16(n uint16) error {\n\treturn e.write2(codes.Uint16, n)\n}\n\nfunc (e *Encoder) encodeUint16Cond(n uint16) error {\n\tif e.useCompact {\n\t\treturn e.EncodeUint(uint64(n))\n\t}\n\treturn e.EncodeUint16(n)\n}\n\n// EncodeUint32 encodes an uint16 in 5 bytes preserving type of the number.\nfunc (e *Encoder) EncodeUint32(n uint32) error {\n\treturn e.write4(codes.Uint32, n)\n}\n\nfunc (e *Encoder) encodeUint32Cond(n uint32) error {\n\tif e.useCompact {\n\t\treturn e.EncodeUint(uint64(n))\n\t}\n\treturn e.EncodeUint32(n)\n}\n\n// EncodeUint64 encodes an uint16 in 9 bytes preserving type of the number.\nfunc (e *Encoder) EncodeUint64(n uint64) error {\n\treturn e.write8(codes.Uint64, n)\n}\n\nfunc (e *Encoder) encodeUint64Cond(n uint64) error {\n\tif e.useCompact {\n\t\treturn e.EncodeUint(n)\n\t}\n\treturn e.EncodeUint64(n)\n}\n\n// EncodeInt8 encodes an int8 in 2 bytes preserving type of the number.\nfunc (e *Encoder) EncodeInt8(n int8) error {\n\treturn e.write1(codes.Int8, uint8(n))\n}\n\nfunc (e *Encoder) encodeInt8Cond(n int8) error {\n\tif e.useCompact {\n\t\treturn e.EncodeInt(int64(n))\n\t}\n\treturn e.EncodeInt8(n)\n}\n\n// EncodeInt16 encodes an int16 in 3 bytes preserving type of the number.\nfunc (e *Encoder) EncodeInt16(n int16) error {\n\treturn e.write2(codes.Int16, uint16(n))\n}\n\nfunc (e *Encoder) encodeInt16Cond(n int16) error {\n\tif e.useCompact {\n\t\treturn e.EncodeInt(int64(n))\n\t}\n\treturn e.EncodeInt16(n)\n}\n\n// EncodeInt32 encodes an int32 in 5 bytes preserving type of the number.\nfunc (e *Encoder) EncodeInt32(n int32) error {\n\treturn e.write4(codes.Int32, uint32(n))\n}\n\nfunc (e *Encoder) encodeInt32Cond(n int32) error {\n\tif e.useCompact {\n\t\treturn e.EncodeInt(int64(n))\n\t}\n\treturn e.EncodeInt32(n)\n}\n\n// EncodeInt64 encodes an int64 in 9 bytes preserving type of the number.\nfunc (e *Encoder) EncodeInt64(n int64) error {\n\treturn e.write8(codes.Int64, uint64(n))\n}\n\nfunc (e *Encoder) encodeInt64Cond(n int64) error {\n\tif e.useCompact {\n\t\treturn e.EncodeInt(n)\n\t}\n\treturn e.EncodeInt64(n)\n}\n\n// EncodeUnsignedNumber encodes an uint64 in 1, 2, 3, 5, or 9 bytes.\n// Type of the number is lost during encoding.\nfunc (e *Encoder) EncodeUint(n uint64) error {\n\tif n <= math.MaxInt8 {\n\t\treturn e.w.WriteByte(byte(n))\n\t}\n\tif n <= math.MaxUint8 {\n\t\treturn e.EncodeUint8(uint8(n))\n\t}\n\tif n <= math.MaxUint16 {\n\t\treturn e.EncodeUint16(uint16(n))\n\t}\n\tif n <= math.MaxUint32 {\n\t\treturn e.EncodeUint32(uint32(n))\n\t}\n\treturn e.EncodeUint64(uint64(n))\n}\n\n// EncodeNumber encodes an int64 in 1, 2, 3, 5, or 9 bytes.\n// Type of number is lost during encoding.\nfunc (e *Encoder) EncodeInt(n int64) error {\n\tif n >= 0 {\n\t\treturn e.EncodeUint(uint64(n))\n\t}\n\tif n >= int64(int8(codes.NegFixedNumLow)) {\n\t\treturn e.w.WriteByte(byte(n))\n\t}\n\tif n >= math.MinInt8 {\n\t\treturn e.EncodeInt8(int8(n))\n\t}\n\tif n >= math.MinInt16 {\n\t\treturn e.EncodeInt16(int16(n))\n\t}\n\tif n >= math.MinInt32 {\n\t\treturn e.EncodeInt32(int32(n))\n\t}\n\treturn e.EncodeInt64(int64(n))\n}\n\nfunc (e *Encoder) EncodeFloat32(n float32) error {\n\treturn e.write4(codes.Float, math.Float32bits(n))\n}\n\nfunc (e *Encoder) EncodeFloat64(n float64) error {\n\treturn e.write8(codes.Double, math.Float64bits(n))\n}\n\nfunc (e *Encoder) write1(code codes.Code, n uint8) error {\n\te.buf = e.buf[:2]\n\te.buf[0] = byte(code)\n\te.buf[1] = byte(n)\n\treturn e.write(e.buf)\n}\n\nfunc (e *Encoder) write2(code codes.Code, n uint16) error {\n\te.buf = e.buf[:3]\n\te.buf[0] = byte(code)\n\te.buf[1] = byte(n >> 8)\n\te.buf[2] = byte(n)\n\treturn e.write(e.buf)\n}\n\nfunc (e *Encoder) write4(code codes.Code, n uint32) error {\n\te.buf = e.buf[:5]\n\te.buf[0] = byte(code)\n\te.buf[1] = byte(n >> 24)\n\te.buf[2] = byte(n >> 16)\n\te.buf[3] = byte(n >> 8)\n\te.buf[4] = byte(n)\n\treturn e.write(e.buf)\n}\n\nfunc (e *Encoder) write8(code codes.Code, n uint64) error {\n\te.buf = e.buf[:9]\n\te.buf[0] = byte(code)\n\te.buf[1] = byte(n >> 56)\n\te.buf[2] = byte(n >> 48)\n\te.buf[3] = byte(n >> 40)\n\te.buf[4] = byte(n >> 32)\n\te.buf[5] = byte(n >> 24)\n\te.buf[6] = byte(n >> 16)\n\te.buf[7] = byte(n >> 8)\n\te.buf[8] = byte(n)\n\treturn e.write(e.buf)\n}\n\nfunc encodeUint8CondValue(e *Encoder, v reflect.Value) error {\n\treturn e.encodeUint8Cond(uint8(v.Uint()))\n}\n\nfunc encodeUint16CondValue(e *Encoder, v reflect.Value) error {\n\treturn e.encodeUint16Cond(uint16(v.Uint()))\n}\n\nfunc encodeUint32CondValue(e *Encoder, v reflect.Value) error {\n\treturn e.encodeUint32Cond(uint32(v.Uint()))\n}\n\nfunc encodeUint64CondValue(e *Encoder, v reflect.Value) error {\n\treturn e.encodeUint64Cond(v.Uint())\n}\n\nfunc encodeInt8CondValue(e *Encoder, v reflect.Value) error {\n\treturn e.encodeInt8Cond(int8(v.Int()))\n}\n\nfunc encodeInt16CondValue(e *Encoder, v reflect.Value) error {\n\treturn e.encodeInt16Cond(int16(v.Int()))\n}\n\nfunc encodeInt32CondValue(e *Encoder, v reflect.Value) error {\n\treturn e.encodeInt32Cond(int32(v.Int()))\n}\n\nfunc encodeInt64CondValue(e *Encoder, v reflect.Value) error {\n\treturn e.encodeInt64Cond(v.Int())\n}\n\nfunc encodeFloat32Value(e *Encoder, v reflect.Value) error {\n\treturn e.EncodeFloat32(float32(v.Float()))\n}\n\nfunc encodeFloat64Value(e *Encoder, v reflect.Value) error {\n\treturn e.EncodeFloat64(v.Float())\n}\n"
  },
  {
    "path": "vendor/github.com/vmihailenco/msgpack/encode_slice.go",
    "content": "package msgpack\n\nimport (\n\t\"reflect\"\n\n\t\"github.com/vmihailenco/msgpack/codes\"\n)\n\nfunc encodeStringValue(e *Encoder, v reflect.Value) error {\n\treturn e.EncodeString(v.String())\n}\n\nfunc encodeByteSliceValue(e *Encoder, v reflect.Value) error {\n\treturn e.EncodeBytes(v.Bytes())\n}\n\nfunc encodeByteArrayValue(e *Encoder, v reflect.Value) error {\n\tif err := e.EncodeBytesLen(v.Len()); err != nil {\n\t\treturn err\n\t}\n\n\tif v.CanAddr() {\n\t\tb := v.Slice(0, v.Len()).Bytes()\n\t\treturn e.write(b)\n\t}\n\n\te.buf = grow(e.buf, v.Len())\n\treflect.Copy(reflect.ValueOf(e.buf), v)\n\treturn e.write(e.buf)\n}\n\nfunc grow(b []byte, n int) []byte {\n\tif cap(b) >= n {\n\t\treturn b[:n]\n\t}\n\tb = b[:cap(b)]\n\tb = append(b, make([]byte, n-len(b))...)\n\treturn b\n}\n\nfunc (e *Encoder) EncodeBytesLen(l int) error {\n\tif l < 256 {\n\t\treturn e.write1(codes.Bin8, uint8(l))\n\t}\n\tif l < 65536 {\n\t\treturn e.write2(codes.Bin16, uint16(l))\n\t}\n\treturn e.write4(codes.Bin32, uint32(l))\n}\n\nfunc (e *Encoder) encodeStrLen(l int) error {\n\tif l < 32 {\n\t\treturn e.writeCode(codes.FixedStrLow | codes.Code(l))\n\t}\n\tif l < 256 {\n\t\treturn e.write1(codes.Str8, uint8(l))\n\t}\n\tif l < 65536 {\n\t\treturn e.write2(codes.Str16, uint16(l))\n\t}\n\treturn e.write4(codes.Str32, uint32(l))\n}\n\nfunc (e *Encoder) EncodeString(v string) error {\n\tif err := e.encodeStrLen(len(v)); err != nil {\n\t\treturn err\n\t}\n\treturn e.writeString(v)\n}\n\nfunc (e *Encoder) EncodeBytes(v []byte) error {\n\tif v == nil {\n\t\treturn e.EncodeNil()\n\t}\n\tif err := e.EncodeBytesLen(len(v)); err != nil {\n\t\treturn err\n\t}\n\treturn e.write(v)\n}\n\nfunc (e *Encoder) EncodeArrayLen(l int) error {\n\tif l < 16 {\n\t\treturn e.writeCode(codes.FixedArrayLow | codes.Code(l))\n\t}\n\tif l < 65536 {\n\t\treturn e.write2(codes.Array16, uint16(l))\n\t}\n\treturn e.write4(codes.Array32, uint32(l))\n}\n\nfunc (e *Encoder) encodeStringSlice(s []string) error {\n\tif s == nil {\n\t\treturn e.EncodeNil()\n\t}\n\tif err := e.EncodeArrayLen(len(s)); err != nil {\n\t\treturn err\n\t}\n\tfor _, v := range s {\n\t\tif err := e.EncodeString(v); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc encodeSliceValue(e *Encoder, v reflect.Value) error {\n\tif v.IsNil() {\n\t\treturn e.EncodeNil()\n\t}\n\treturn encodeArrayValue(e, v)\n}\n\nfunc encodeArrayValue(e *Encoder, v reflect.Value) error {\n\tl := v.Len()\n\tif err := e.EncodeArrayLen(l); err != nil {\n\t\treturn err\n\t}\n\tfor i := 0; i < l; i++ {\n\t\tif err := e.EncodeValue(v.Index(i)); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/vmihailenco/msgpack/encode_value.go",
    "content": "package msgpack\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n)\n\nvar valueEncoders []encoderFunc\n\nfunc init() {\n\tvalueEncoders = []encoderFunc{\n\t\treflect.Bool:          encodeBoolValue,\n\t\treflect.Int:           encodeInt64CondValue,\n\t\treflect.Int8:          encodeInt8CondValue,\n\t\treflect.Int16:         encodeInt16CondValue,\n\t\treflect.Int32:         encodeInt32CondValue,\n\t\treflect.Int64:         encodeInt64CondValue,\n\t\treflect.Uint:          encodeUint64CondValue,\n\t\treflect.Uint8:         encodeUint8CondValue,\n\t\treflect.Uint16:        encodeUint16CondValue,\n\t\treflect.Uint32:        encodeUint32CondValue,\n\t\treflect.Uint64:        encodeUint64CondValue,\n\t\treflect.Float32:       encodeFloat32Value,\n\t\treflect.Float64:       encodeFloat64Value,\n\t\treflect.Complex64:     encodeUnsupportedValue,\n\t\treflect.Complex128:    encodeUnsupportedValue,\n\t\treflect.Array:         encodeArrayValue,\n\t\treflect.Chan:          encodeUnsupportedValue,\n\t\treflect.Func:          encodeUnsupportedValue,\n\t\treflect.Interface:     encodeInterfaceValue,\n\t\treflect.Map:           encodeMapValue,\n\t\treflect.Ptr:           encodeUnsupportedValue,\n\t\treflect.Slice:         encodeSliceValue,\n\t\treflect.String:        encodeStringValue,\n\t\treflect.Struct:        encodeStructValue,\n\t\treflect.UnsafePointer: encodeUnsupportedValue,\n\t}\n}\n\nfunc getEncoder(typ reflect.Type) encoderFunc {\n\tif encoder, ok := typEncMap[typ]; ok {\n\t\treturn encoder\n\t}\n\n\tif typ.Implements(customEncoderType) {\n\t\treturn encodeCustomValue\n\t}\n\tif typ.Implements(marshalerType) {\n\t\treturn marshalValue\n\t}\n\n\tkind := typ.Kind()\n\n\t// Addressable struct field value.\n\tif kind != reflect.Ptr {\n\t\tptr := reflect.PtrTo(typ)\n\t\tif ptr.Implements(customEncoderType) {\n\t\t\treturn encodeCustomValuePtr\n\t\t}\n\t\tif ptr.Implements(marshalerType) {\n\t\t\treturn marshalValuePtr\n\t\t}\n\t}\n\n\tif typ == errorType {\n\t\treturn encodeErrorValue\n\t}\n\n\tswitch kind {\n\tcase reflect.Ptr:\n\t\treturn ptrEncoderFunc(typ)\n\tcase reflect.Slice:\n\t\tif typ.Elem().Kind() == reflect.Uint8 {\n\t\t\treturn encodeByteSliceValue\n\t\t}\n\tcase reflect.Array:\n\t\tif typ.Elem().Kind() == reflect.Uint8 {\n\t\t\treturn encodeByteArrayValue\n\t\t}\n\tcase reflect.Map:\n\t\tif typ.Key() == stringType {\n\t\t\tswitch typ.Elem() {\n\t\t\tcase stringType:\n\t\t\t\treturn encodeMapStringStringValue\n\t\t\tcase interfaceType:\n\t\t\t\treturn encodeMapStringInterfaceValue\n\t\t\t}\n\t\t}\n\t}\n\treturn valueEncoders[kind]\n}\n\nfunc ptrEncoderFunc(typ reflect.Type) encoderFunc {\n\tencoder := getEncoder(typ.Elem())\n\treturn func(e *Encoder, v reflect.Value) error {\n\t\tif v.IsNil() {\n\t\t\treturn e.EncodeNil()\n\t\t}\n\t\treturn encoder(e, v.Elem())\n\t}\n}\n\nfunc encodeCustomValuePtr(e *Encoder, v reflect.Value) error {\n\tif !v.CanAddr() {\n\t\treturn fmt.Errorf(\"msgpack: Encode(non-addressable %T)\", v.Interface())\n\t}\n\tencoder := v.Addr().Interface().(CustomEncoder)\n\treturn encoder.EncodeMsgpack(e)\n}\n\nfunc encodeCustomValue(e *Encoder, v reflect.Value) error {\n\tswitch v.Kind() {\n\tcase reflect.Chan, reflect.Func, reflect.Interface, reflect.Map, reflect.Ptr, reflect.Slice:\n\t\tif v.IsNil() {\n\t\t\treturn e.EncodeNil()\n\t\t}\n\t}\n\n\tencoder := v.Interface().(CustomEncoder)\n\treturn encoder.EncodeMsgpack(e)\n}\n\nfunc marshalValuePtr(e *Encoder, v reflect.Value) error {\n\tif !v.CanAddr() {\n\t\treturn fmt.Errorf(\"msgpack: Encode(non-addressable %T)\", v.Interface())\n\t}\n\treturn marshalValue(e, v.Addr())\n}\n\nfunc marshalValue(e *Encoder, v reflect.Value) error {\n\tswitch v.Kind() {\n\tcase reflect.Chan, reflect.Func, reflect.Interface, reflect.Map, reflect.Ptr, reflect.Slice:\n\t\tif v.IsNil() {\n\t\t\treturn e.EncodeNil()\n\t\t}\n\t}\n\n\tmarshaler := v.Interface().(Marshaler)\n\tb, err := marshaler.MarshalMsgpack()\n\tif err != nil {\n\t\treturn err\n\t}\n\t_, err = e.w.Write(b)\n\treturn err\n}\n\nfunc encodeBoolValue(e *Encoder, v reflect.Value) error {\n\treturn e.EncodeBool(v.Bool())\n}\n\nfunc encodeInterfaceValue(e *Encoder, v reflect.Value) error {\n\tif v.IsNil() {\n\t\treturn e.EncodeNil()\n\t}\n\treturn e.EncodeValue(v.Elem())\n}\n\nfunc encodeErrorValue(e *Encoder, v reflect.Value) error {\n\tif v.IsNil() {\n\t\treturn e.EncodeNil()\n\t}\n\treturn e.EncodeString(v.Interface().(error).Error())\n}\n\nfunc encodeUnsupportedValue(e *Encoder, v reflect.Value) error {\n\treturn fmt.Errorf(\"msgpack: Encode(unsupported %s)\", v.Type())\n}\n"
  },
  {
    "path": "vendor/github.com/vmihailenco/msgpack/ext.go",
    "content": "package msgpack\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"sync\"\n\n\t\"github.com/vmihailenco/msgpack/codes\"\n)\n\ntype extInfo struct {\n\tType    reflect.Type\n\tDecoder decoderFunc\n}\n\nvar extTypes = make(map[int8]extInfo)\n\nvar bufferPool = &sync.Pool{\n\tNew: func() interface{} {\n\t\treturn new(bytes.Buffer)\n\t},\n}\n\n// RegisterExt records a type, identified by a value for that type,\n// under the provided id. That id will identify the concrete type of a value\n// sent or received as an interface variable. Only types that will be\n// transferred as implementations of interface values need to be registered.\n// Expecting to be used only during initialization, it panics if the mapping\n// between types and ids is not a bijection.\nfunc RegisterExt(id int8, value interface{}) {\n\ttyp := reflect.TypeOf(value)\n\tif typ.Kind() == reflect.Ptr {\n\t\ttyp = typ.Elem()\n\t}\n\tptr := reflect.PtrTo(typ)\n\n\tif _, ok := extTypes[id]; ok {\n\t\tpanic(fmt.Errorf(\"msgpack: ext with id=%d is already registered\", id))\n\t}\n\n\tregisterExt(id, ptr, getEncoder(ptr), getDecoder(ptr))\n\tregisterExt(id, typ, getEncoder(typ), getDecoder(typ))\n}\n\nfunc registerExt(id int8, typ reflect.Type, enc encoderFunc, dec decoderFunc) {\n\tif enc != nil {\n\t\ttypEncMap[typ] = makeExtEncoder(id, enc)\n\t}\n\tif dec != nil {\n\t\textTypes[id] = extInfo{\n\t\t\tType:    typ,\n\t\t\tDecoder: dec,\n\t\t}\n\t\ttypDecMap[typ] = makeExtDecoder(id, dec)\n\t}\n}\n\nfunc (e *Encoder) EncodeExtHeader(typeId int8, length int) error {\n\tif err := e.encodeExtLen(length); err != nil {\n\t\treturn err\n\t}\n\tif err := e.w.WriteByte(byte(typeId)); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc makeExtEncoder(typeId int8, enc encoderFunc) encoderFunc {\n\treturn func(e *Encoder, v reflect.Value) error {\n\t\tbuf := bufferPool.Get().(*bytes.Buffer)\n\t\tdefer bufferPool.Put(buf)\n\t\tbuf.Reset()\n\n\t\toldw := e.w\n\t\te.w = buf\n\t\terr := enc(e, v)\n\t\te.w = oldw\n\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\terr = e.EncodeExtHeader(typeId, buf.Len())\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn e.write(buf.Bytes())\n\t}\n}\n\nfunc makeExtDecoder(typeId int8, dec decoderFunc) decoderFunc {\n\treturn func(d *Decoder, v reflect.Value) error {\n\t\tc, err := d.PeekCode()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tif !codes.IsExt(c) {\n\t\t\treturn dec(d, v)\n\t\t}\n\n\t\tid, extLen, err := d.DecodeExtHeader()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tif int8(id) != typeId {\n\t\t\treturn fmt.Errorf(\"msgpack: got ext type=%d, wanted %d\", int8(id), typeId)\n\t\t}\n\n\t\td.extLen = extLen\n\t\treturn dec(d, v)\n\t}\n}\n\nfunc (e *Encoder) encodeExtLen(l int) error {\n\tswitch l {\n\tcase 1:\n\t\treturn e.writeCode(codes.FixExt1)\n\tcase 2:\n\t\treturn e.writeCode(codes.FixExt2)\n\tcase 4:\n\t\treturn e.writeCode(codes.FixExt4)\n\tcase 8:\n\t\treturn e.writeCode(codes.FixExt8)\n\tcase 16:\n\t\treturn e.writeCode(codes.FixExt16)\n\t}\n\tif l < 256 {\n\t\treturn e.write1(codes.Ext8, uint8(l))\n\t}\n\tif l < 65536 {\n\t\treturn e.write2(codes.Ext16, uint16(l))\n\t}\n\treturn e.write4(codes.Ext32, uint32(l))\n}\n\nfunc (d *Decoder) parseExtLen(c codes.Code) (int, error) {\n\tswitch c {\n\tcase codes.FixExt1:\n\t\treturn 1, nil\n\tcase codes.FixExt2:\n\t\treturn 2, nil\n\tcase codes.FixExt4:\n\t\treturn 4, nil\n\tcase codes.FixExt8:\n\t\treturn 8, nil\n\tcase codes.FixExt16:\n\t\treturn 16, nil\n\tcase codes.Ext8:\n\t\tn, err := d.uint8()\n\t\treturn int(n), err\n\tcase codes.Ext16:\n\t\tn, err := d.uint16()\n\t\treturn int(n), err\n\tcase codes.Ext32:\n\t\tn, err := d.uint32()\n\t\treturn int(n), err\n\tdefault:\n\t\treturn 0, fmt.Errorf(\"msgpack: invalid code=%x decoding ext length\", c)\n\t}\n}\n\nfunc (d *Decoder) decodeExtHeader(c codes.Code) (int8, int, error) {\n\tlength, err := d.parseExtLen(c)\n\tif err != nil {\n\t\treturn 0, 0, err\n\t}\n\n\ttypeId, err := d.readCode()\n\tif err != nil {\n\t\treturn 0, 0, err\n\t}\n\n\treturn int8(typeId), length, nil\n}\n\nfunc (d *Decoder) DecodeExtHeader() (typeId int8, length int, err error) {\n\tc, err := d.readCode()\n\tif err != nil {\n\t\treturn\n\t}\n\treturn d.decodeExtHeader(c)\n}\n\nfunc (d *Decoder) extInterface(c codes.Code) (interface{}, error) {\n\textId, extLen, err := d.decodeExtHeader(c)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tinfo, ok := extTypes[extId]\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"msgpack: unknown ext id=%d\", extId)\n\t}\n\n\tv := reflect.New(info.Type)\n\n\td.extLen = extLen\n\terr = info.Decoder(d, v.Elem())\n\td.extLen = 0\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn v.Interface(), nil\n}\n\nfunc (d *Decoder) skipExt(c codes.Code) error {\n\tn, err := d.parseExtLen(c)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn d.skipN(n + 1)\n}\n\nfunc (d *Decoder) skipExtHeader(c codes.Code) error {\n\t// Read ext type.\n\t_, err := d.readCode()\n\tif err != nil {\n\t\treturn err\n\t}\n\t// Read ext body len.\n\tfor i := 0; i < extHeaderLen(c); i++ {\n\t\t_, err := d.readCode()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc extHeaderLen(c codes.Code) int {\n\tswitch c {\n\tcase codes.Ext8:\n\t\treturn 1\n\tcase codes.Ext16:\n\t\treturn 2\n\tcase codes.Ext32:\n\t\treturn 4\n\t}\n\treturn 0\n}\n"
  },
  {
    "path": "vendor/github.com/vmihailenco/msgpack/msgpack.go",
    "content": "package msgpack\n\ntype Marshaler interface {\n\tMarshalMsgpack() ([]byte, error)\n}\n\ntype Unmarshaler interface {\n\tUnmarshalMsgpack([]byte) error\n}\n\ntype CustomEncoder interface {\n\tEncodeMsgpack(*Encoder) error\n}\n\ntype CustomDecoder interface {\n\tDecodeMsgpack(*Decoder) error\n}\n"
  },
  {
    "path": "vendor/github.com/vmihailenco/msgpack/tag.go",
    "content": "package msgpack\n\nimport (\n\t\"strings\"\n)\n\ntype tagOptions string\n\nfunc (o tagOptions) Get(name string) (string, bool) {\n\ts := string(o)\n\tfor len(s) > 0 {\n\t\tvar next string\n\t\tidx := strings.IndexByte(s, ',')\n\t\tif idx >= 0 {\n\t\t\ts, next = s[:idx], s[idx+1:]\n\t\t}\n\t\tif strings.HasPrefix(s, name) {\n\t\t\treturn s[len(name):], true\n\t\t}\n\t\ts = next\n\t}\n\treturn \"\", false\n}\n\nfunc (o tagOptions) Contains(name string) bool {\n\t_, ok := o.Get(name)\n\treturn ok\n}\n\nfunc parseTag(tag string) (string, tagOptions) {\n\tif idx := strings.IndexByte(tag, ','); idx != -1 {\n\t\tname := tag[:idx]\n\t\tif strings.IndexByte(name, ':') == -1 {\n\t\t\treturn name, tagOptions(tag[idx+1:])\n\t\t}\n\t}\n\n\tif strings.IndexByte(tag, ':') == -1 {\n\t\treturn tag, \"\"\n\t}\n\treturn \"\", tagOptions(tag)\n}\n"
  },
  {
    "path": "vendor/github.com/vmihailenco/msgpack/time.go",
    "content": "package msgpack\n\nimport (\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"time\"\n\n\t\"github.com/vmihailenco/msgpack/codes\"\n)\n\nvar timeExtId int8 = -1\n\nfunc init() {\n\ttimeType := reflect.TypeOf((*time.Time)(nil)).Elem()\n\tregisterExt(timeExtId, timeType, encodeTimeValue, decodeTimeValue)\n}\n\nfunc (e *Encoder) EncodeTime(tm time.Time) error {\n\tb := e.encodeTime(tm)\n\tif err := e.encodeExtLen(len(b)); err != nil {\n\t\treturn err\n\t}\n\tif err := e.w.WriteByte(byte(timeExtId)); err != nil {\n\t\treturn err\n\t}\n\treturn e.write(b)\n}\n\nfunc (e *Encoder) encodeTime(tm time.Time) []byte {\n\tif e.timeBuf == nil {\n\t\te.timeBuf = make([]byte, 12)\n\t}\n\n\tsecs := uint64(tm.Unix())\n\tif secs>>34 == 0 {\n\t\tdata := uint64(tm.Nanosecond())<<34 | secs\n\t\tif data&0xffffffff00000000 == 0 {\n\t\t\tb := e.timeBuf[:4]\n\t\t\tbinary.BigEndian.PutUint32(b, uint32(data))\n\t\t\treturn b\n\t\t} else {\n\t\t\tb := e.timeBuf[:8]\n\t\t\tbinary.BigEndian.PutUint64(b, data)\n\t\t\treturn b\n\t\t}\n\t}\n\n\tb := e.timeBuf[:12]\n\tbinary.BigEndian.PutUint32(b, uint32(tm.Nanosecond()))\n\tbinary.BigEndian.PutUint64(b[4:], uint64(secs))\n\treturn b\n}\n\nfunc (d *Decoder) DecodeTime() (time.Time, error) {\n\ttm, err := d.decodeTime()\n\tif err != nil {\n\t\treturn tm, err\n\t}\n\n\tif tm.IsZero() {\n\t\t// Assume that zero time does not have timezone information.\n\t\treturn tm.UTC(), nil\n\t}\n\treturn tm, nil\n}\n\nfunc (d *Decoder) decodeTime() (time.Time, error) {\n\textLen := d.extLen\n\td.extLen = 0\n\tif extLen == 0 {\n\t\tc, err := d.readCode()\n\t\tif err != nil {\n\t\t\treturn time.Time{}, err\n\t\t}\n\n\t\t// Legacy format.\n\t\tif c == codes.FixedArrayLow|2 {\n\t\t\tsec, err := d.DecodeInt64()\n\t\t\tif err != nil {\n\t\t\t\treturn time.Time{}, err\n\t\t\t}\n\n\t\t\tnsec, err := d.DecodeInt64()\n\t\t\tif err != nil {\n\t\t\t\treturn time.Time{}, err\n\t\t\t}\n\n\t\t\treturn time.Unix(sec, nsec), nil\n\t\t}\n\n\t\tif codes.IsString(c) {\n\t\t\ts, err := d.string(c)\n\t\t\tif err != nil {\n\t\t\t\treturn time.Time{}, err\n\t\t\t}\n\t\t\treturn time.Parse(time.RFC3339Nano, s)\n\t\t}\n\n\t\textLen, err = d.parseExtLen(c)\n\t\tif err != nil {\n\t\t\treturn time.Time{}, err\n\t\t}\n\n\t\t// Skip ext id.\n\t\t_, err = d.s.ReadByte()\n\t\tif err != nil {\n\t\t\treturn time.Time{}, nil\n\t\t}\n\t}\n\n\tb, err := d.readN(extLen)\n\tif err != nil {\n\t\treturn time.Time{}, err\n\t}\n\n\tswitch len(b) {\n\tcase 4:\n\t\tsec := binary.BigEndian.Uint32(b)\n\t\treturn time.Unix(int64(sec), 0), nil\n\tcase 8:\n\t\tsec := binary.BigEndian.Uint64(b)\n\t\tnsec := int64(sec >> 34)\n\t\tsec &= 0x00000003ffffffff\n\t\treturn time.Unix(int64(sec), nsec), nil\n\tcase 12:\n\t\tnsec := binary.BigEndian.Uint32(b)\n\t\tsec := binary.BigEndian.Uint64(b[4:])\n\t\treturn time.Unix(int64(sec), int64(nsec)), nil\n\tdefault:\n\t\terr = fmt.Errorf(\"msgpack: invalid ext len=%d decoding time\", extLen)\n\t\treturn time.Time{}, err\n\t}\n}\n\nfunc encodeTimeValue(e *Encoder, v reflect.Value) error {\n\ttm := v.Interface().(time.Time)\n\tb := e.encodeTime(tm)\n\treturn e.write(b)\n}\n\nfunc decodeTimeValue(d *Decoder, v reflect.Value) error {\n\ttm, err := d.DecodeTime()\n\tif err != nil {\n\t\treturn err\n\t}\n\tv.Set(reflect.ValueOf(tm))\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/vmihailenco/msgpack/types.go",
    "content": "package msgpack\n\nimport (\n\t\"reflect\"\n\t\"sync\"\n)\n\nvar errorType = reflect.TypeOf((*error)(nil)).Elem()\n\nvar customEncoderType = reflect.TypeOf((*CustomEncoder)(nil)).Elem()\nvar customDecoderType = reflect.TypeOf((*CustomDecoder)(nil)).Elem()\n\nvar marshalerType = reflect.TypeOf((*Marshaler)(nil)).Elem()\nvar unmarshalerType = reflect.TypeOf((*Unmarshaler)(nil)).Elem()\n\ntype encoderFunc func(*Encoder, reflect.Value) error\ntype decoderFunc func(*Decoder, reflect.Value) error\n\nvar typEncMap = make(map[reflect.Type]encoderFunc)\nvar typDecMap = make(map[reflect.Type]decoderFunc)\n\n// Register registers encoder and decoder functions for a value.\n// This is low level API and in most cases you should prefer implementing\n// Marshaler/CustomEncoder and Unmarshaler/CustomDecoder interfaces.\nfunc Register(value interface{}, enc encoderFunc, dec decoderFunc) {\n\ttyp := reflect.TypeOf(value)\n\tif enc != nil {\n\t\ttypEncMap[typ] = enc\n\t}\n\tif dec != nil {\n\t\ttypDecMap[typ] = dec\n\t}\n}\n\n//------------------------------------------------------------------------------\n\nvar structs = newStructCache(false)\nvar jsonStructs = newStructCache(true)\n\ntype structCache struct {\n\tmu sync.RWMutex\n\tm  map[reflect.Type]*fields\n\n\tuseJSONTag bool\n}\n\nfunc newStructCache(useJSONTag bool) *structCache {\n\treturn &structCache{\n\t\tm: make(map[reflect.Type]*fields),\n\n\t\tuseJSONTag: useJSONTag,\n\t}\n}\n\nfunc (m *structCache) Fields(typ reflect.Type) *fields {\n\tm.mu.RLock()\n\tfs, ok := m.m[typ]\n\tm.mu.RUnlock()\n\tif ok {\n\t\treturn fs\n\t}\n\n\tm.mu.Lock()\n\tfs, ok = m.m[typ]\n\tif !ok {\n\t\tfs = getFields(typ, m.useJSONTag)\n\t\tm.m[typ] = fs\n\t}\n\tm.mu.Unlock()\n\n\treturn fs\n}\n\n//------------------------------------------------------------------------------\n\ntype field struct {\n\tname      string\n\tindex     []int\n\tomitEmpty bool\n\tencoder   encoderFunc\n\tdecoder   decoderFunc\n}\n\nfunc (f *field) value(v reflect.Value) reflect.Value {\n\treturn fieldByIndex(v, f.index)\n}\n\nfunc (f *field) Omit(strct reflect.Value) bool {\n\treturn f.omitEmpty && isEmptyValue(f.value(strct))\n}\n\nfunc (f *field) EncodeValue(e *Encoder, strct reflect.Value) error {\n\treturn f.encoder(e, f.value(strct))\n}\n\nfunc (f *field) DecodeValue(d *Decoder, strct reflect.Value) error {\n\treturn f.decoder(d, f.value(strct))\n}\n\n//------------------------------------------------------------------------------\n\ntype fields struct {\n\tTable   map[string]*field\n\tList    []*field\n\tAsArray bool\n\n\thasOmitEmpty bool\n}\n\nfunc newFields(numField int) *fields {\n\treturn &fields{\n\t\tTable: make(map[string]*field, numField),\n\t\tList:  make([]*field, 0, numField),\n\t}\n}\n\nfunc (fs *fields) Add(field *field) {\n\tfs.Table[field.name] = field\n\tfs.List = append(fs.List, field)\n\tif field.omitEmpty {\n\t\tfs.hasOmitEmpty = true\n\t}\n}\n\nfunc (fs *fields) OmitEmpty(strct reflect.Value) []*field {\n\tif !fs.hasOmitEmpty {\n\t\treturn fs.List\n\t}\n\n\tfields := make([]*field, 0, len(fs.List))\n\tfor _, f := range fs.List {\n\t\tif !f.Omit(strct) {\n\t\t\tfields = append(fields, f)\n\t\t}\n\t}\n\treturn fields\n}\n\nfunc getFields(typ reflect.Type, useJSONTag bool) *fields {\n\tnumField := typ.NumField()\n\tfs := newFields(numField)\n\n\tvar omitEmpty bool\n\tfor i := 0; i < numField; i++ {\n\t\tf := typ.Field(i)\n\n\t\ttag := f.Tag.Get(\"msgpack\")\n\t\tif useJSONTag && tag == \"\" {\n\t\t\ttag = f.Tag.Get(\"json\")\n\t\t}\n\n\t\tname, opt := parseTag(tag)\n\t\tif name == \"-\" {\n\t\t\tcontinue\n\t\t}\n\n\t\tif f.Name == \"_msgpack\" {\n\t\t\tif opt.Contains(\"asArray\") {\n\t\t\t\tfs.AsArray = true\n\t\t\t}\n\t\t\tif opt.Contains(\"omitempty\") {\n\t\t\t\tomitEmpty = true\n\t\t\t}\n\t\t}\n\n\t\tif f.PkgPath != \"\" && !f.Anonymous {\n\t\t\tcontinue\n\t\t}\n\n\t\tfield := &field{\n\t\t\tname:      name,\n\t\t\tindex:     f.Index,\n\t\t\tomitEmpty: omitEmpty || opt.Contains(\"omitempty\"),\n\t\t\tencoder:   getEncoder(f.Type),\n\t\t\tdecoder:   getDecoder(f.Type),\n\t\t}\n\n\t\tif field.name == \"\" {\n\t\t\tfield.name = f.Name\n\t\t}\n\n\t\tif f.Anonymous && !opt.Contains(\"noinline\") {\n\t\t\tinline := opt.Contains(\"inline\")\n\t\t\tif inline {\n\t\t\t\tinlineFields(fs, f.Type, field, useJSONTag)\n\t\t\t} else {\n\t\t\t\tinline = autoinlineFields(fs, f.Type, field, useJSONTag)\n\t\t\t}\n\t\t\tif inline {\n\t\t\t\tfs.Table[field.name] = field\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\tfs.Add(field)\n\t}\n\treturn fs\n}\n\nvar encodeStructValuePtr uintptr\nvar decodeStructValuePtr uintptr\n\nfunc init() {\n\tencodeStructValuePtr = reflect.ValueOf(encodeStructValue).Pointer()\n\tdecodeStructValuePtr = reflect.ValueOf(decodeStructValue).Pointer()\n}\n\nfunc inlineFields(fs *fields, typ reflect.Type, f *field, useJSONTag bool) {\n\tinlinedFields := getFields(typ, useJSONTag).List\n\tfor _, field := range inlinedFields {\n\t\tif _, ok := fs.Table[field.name]; ok {\n\t\t\t// Don't inline shadowed fields.\n\t\t\tcontinue\n\t\t}\n\t\tfield.index = append(f.index, field.index...)\n\t\tfs.Add(field)\n\t}\n}\n\nfunc autoinlineFields(fs *fields, typ reflect.Type, f *field, useJSONTag bool) bool {\n\tvar encoder encoderFunc\n\tvar decoder decoderFunc\n\n\tif typ.Kind() == reflect.Struct {\n\t\tencoder = f.encoder\n\t\tdecoder = f.decoder\n\t} else {\n\t\tfor typ.Kind() == reflect.Ptr {\n\t\t\ttyp = typ.Elem()\n\t\t\tencoder = getEncoder(typ)\n\t\t\tdecoder = getDecoder(typ)\n\t\t}\n\t\tif typ.Kind() != reflect.Struct {\n\t\t\treturn false\n\t\t}\n\t}\n\n\tif reflect.ValueOf(encoder).Pointer() != encodeStructValuePtr {\n\t\treturn false\n\t}\n\tif reflect.ValueOf(decoder).Pointer() != decodeStructValuePtr {\n\t\treturn false\n\t}\n\n\tinlinedFields := getFields(typ, useJSONTag).List\n\tfor _, field := range inlinedFields {\n\t\tif _, ok := fs.Table[field.name]; ok {\n\t\t\t// Don't auto inline if there are shadowed fields.\n\t\t\treturn false\n\t\t}\n\t}\n\n\tfor _, field := range inlinedFields {\n\t\tfield.index = append(f.index, field.index...)\n\t\tfs.Add(field)\n\t}\n\treturn true\n}\n\nfunc isEmptyValue(v reflect.Value) bool {\n\tswitch v.Kind() {\n\tcase reflect.Array, reflect.Map, reflect.Slice, reflect.String:\n\t\treturn v.Len() == 0\n\tcase reflect.Bool:\n\t\treturn !v.Bool()\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\treturn v.Int() == 0\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:\n\t\treturn v.Uint() == 0\n\tcase reflect.Float32, reflect.Float64:\n\t\treturn v.Float() == 0\n\tcase reflect.Interface, reflect.Ptr:\n\t\treturn v.IsNil()\n\t}\n\treturn false\n}\n\nfunc fieldByIndex(v reflect.Value, index []int) reflect.Value {\n\tif len(index) == 1 {\n\t\treturn v.Field(index[0])\n\t}\n\tfor i, x := range index {\n\t\tif i > 0 {\n\t\t\tvar ok bool\n\t\t\tv, ok = indirectNew(v)\n\t\t\tif !ok {\n\t\t\t\treturn v\n\t\t\t}\n\t\t}\n\t\tv = v.Field(x)\n\t}\n\treturn v\n}\n\nfunc indirectNew(v reflect.Value) (reflect.Value, bool) {\n\tif v.Kind() == reflect.Ptr {\n\t\tif v.IsNil() {\n\t\t\tif !v.CanSet() {\n\t\t\t\treturn v, false\n\t\t\t}\n\t\t\telemType := v.Type().Elem()\n\t\t\tif elemType.Kind() != reflect.Struct {\n\t\t\t\treturn v, false\n\t\t\t}\n\t\t\tv.Set(reflect.New(elemType))\n\t\t}\n\t\tv = v.Elem()\n\t}\n\treturn v, true\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/LICENSE",
    "content": "MIT License\n\nCopyright (c) 2017-2018 Martin Atkins\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/capsule.go",
    "content": "package cty\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n)\n\ntype capsuleType struct {\n\ttypeImplSigil\n\tName   string\n\tGoType reflect.Type\n}\n\nfunc (t *capsuleType) Equals(other Type) bool {\n\tif otherP, ok := other.typeImpl.(*capsuleType); ok {\n\t\t// capsule types compare by pointer identity\n\t\treturn otherP == t\n\t}\n\treturn false\n}\n\nfunc (t *capsuleType) FriendlyName(mode friendlyTypeNameMode) string {\n\treturn t.Name\n}\n\nfunc (t *capsuleType) GoString() string {\n\t// To get a useful representation of our native type requires some\n\t// shenanigans.\n\tvictimVal := reflect.Zero(t.GoType)\n\treturn fmt.Sprintf(\"cty.Capsule(%q, reflect.TypeOf(%#v))\", t.Name, victimVal.Interface())\n}\n\n// Capsule creates a new Capsule type.\n//\n// A Capsule type is a special type that can be used to transport arbitrary\n// Go native values of a given type through the cty type system. A language\n// that uses cty as its type system might, for example, provide functions\n// that return capsule-typed values and then other functions that operate\n// on those values.\n//\n// From cty's perspective, Capsule types have a few interesting characteristics,\n// described in the following paragraphs.\n//\n// Each capsule type has an associated Go native type that it is able to\n// transport. Capsule types compare by identity, so each call to the\n// Capsule function creates an entirely-distinct cty Type, even if two calls\n// use the same native type.\n//\n// Each capsule-typed value contains a pointer to a value of the given native\n// type. A capsule-typed value supports no operations except equality, and\n// equality is implemented by pointer identity of the encapsulated pointer.\n//\n// The given name is used as the new type's \"friendly name\". This can be any\n// string in principle, but will usually be a short, all-lowercase name aimed\n// at users of the embedding language (i.e. not mention Go-specific details)\n// and will ideally not create ambiguity with any predefined cty type.\n//\n// Capsule types are never introduced by any standard cty operation, so a\n// calling application opts in to including them within its own type system\n// by creating them and introducing them via its own functions. At that point,\n// the application is responsible for dealing with any capsule-typed values\n// that might be returned.\nfunc Capsule(name string, nativeType reflect.Type) Type {\n\treturn Type{\n\t\t&capsuleType{\n\t\t\tName:   name,\n\t\t\tGoType: nativeType,\n\t\t},\n\t}\n}\n\n// IsCapsuleType returns true if this type is a capsule type, as created\n// by cty.Capsule .\nfunc (t Type) IsCapsuleType() bool {\n\t_, ok := t.typeImpl.(*capsuleType)\n\treturn ok\n}\n\n// EncapsulatedType returns the encapsulated native type of a capsule type,\n// or panics if the receiver is not a Capsule type.\n//\n// Is IsCapsuleType to determine if this method is safe to call.\nfunc (t Type) EncapsulatedType() reflect.Type {\n\timpl, ok := t.typeImpl.(*capsuleType)\n\tif !ok {\n\t\tpanic(\"not a capsule type\")\n\t}\n\treturn impl.GoType\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/collection.go",
    "content": "package cty\n\nimport (\n\t\"errors\"\n)\n\ntype collectionTypeImpl interface {\n\tElementType() Type\n}\n\n// IsCollectionType returns true if the given type supports the operations\n// that are defined for all collection types.\nfunc (t Type) IsCollectionType() bool {\n\t_, ok := t.typeImpl.(collectionTypeImpl)\n\treturn ok\n}\n\n// ElementType returns the element type of the receiver if it is a collection\n// type, or panics if it is not. Use IsCollectionType first to test whether\n// this method will succeed.\nfunc (t Type) ElementType() Type {\n\tif ct, ok := t.typeImpl.(collectionTypeImpl); ok {\n\t\treturn ct.ElementType()\n\t}\n\tpanic(errors.New(\"not a collection type\"))\n}\n\n// ElementCallback is a callback type used for iterating over elements of\n// collections and attributes of objects.\n//\n// The types of key and value depend on what type is being iterated over.\n// Return true to stop iterating after the current element, or false to\n// continue iterating.\ntype ElementCallback func(key Value, val Value) (stop bool)\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/convert/compare_types.go",
    "content": "package convert\n\nimport (\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// compareTypes implements a preference order for unification.\n//\n// The result of this method is not useful for anything other than unification\n// preferences, since it assumes that the caller will verify that any suggested\n// conversion is actually possible and it is thus able to to make certain\n// optimistic assumptions.\nfunc compareTypes(a cty.Type, b cty.Type) int {\n\n\t// DynamicPseudoType always has lowest preference, because anything can\n\t// convert to it (it acts as a placeholder for \"any type\") and we want\n\t// to optimistically assume that any dynamics will converge on matching\n\t// their neighbors.\n\tif a == cty.DynamicPseudoType || b == cty.DynamicPseudoType {\n\t\tif a != cty.DynamicPseudoType {\n\t\t\treturn -1\n\t\t}\n\t\tif b != cty.DynamicPseudoType {\n\t\t\treturn 1\n\t\t}\n\t\treturn 0\n\t}\n\n\tif a.IsPrimitiveType() && b.IsPrimitiveType() {\n\t\t// String is a supertype of all primitive types, because we can\n\t\t// represent all primitive values as specially-formatted strings.\n\t\tif a == cty.String || b == cty.String {\n\t\t\tif a != cty.String {\n\t\t\t\treturn 1\n\t\t\t}\n\t\t\tif b != cty.String {\n\t\t\t\treturn -1\n\t\t\t}\n\t\t\treturn 0\n\t\t}\n\t}\n\n\tif a.IsListType() && b.IsListType() {\n\t\treturn compareTypes(a.ElementType(), b.ElementType())\n\t}\n\tif a.IsSetType() && b.IsSetType() {\n\t\treturn compareTypes(a.ElementType(), b.ElementType())\n\t}\n\tif a.IsMapType() && b.IsMapType() {\n\t\treturn compareTypes(a.ElementType(), b.ElementType())\n\t}\n\n\t// From this point on we may have swapped the two items in order to\n\t// simplify our cases. Therefore any non-zero return after this point\n\t// must be multiplied by \"swap\" to potentially invert the return value\n\t// if needed.\n\tswap := 1\n\tswitch {\n\tcase a.IsTupleType() && b.IsListType():\n\t\tfallthrough\n\tcase a.IsObjectType() && b.IsMapType():\n\t\tfallthrough\n\tcase a.IsSetType() && b.IsTupleType():\n\t\tfallthrough\n\tcase a.IsSetType() && b.IsListType():\n\t\ta, b = b, a\n\t\tswap = -1\n\t}\n\n\tif b.IsSetType() && (a.IsTupleType() || a.IsListType()) {\n\t\t// We'll just optimistically assume that the element types are\n\t\t// unifyable/convertible, and let a second recursive pass\n\t\t// figure out how to make that so.\n\t\treturn -1 * swap\n\t}\n\n\tif a.IsListType() && b.IsTupleType() {\n\t\t// We'll just optimistically assume that the tuple's element types\n\t\t// can be unified into something compatible with the list's element\n\t\t// type.\n\t\treturn -1 * swap\n\t}\n\n\tif a.IsMapType() && b.IsObjectType() {\n\t\t// We'll just optimistically assume that the object's attribute types\n\t\t// can be unified into something compatible with the map's element\n\t\t// type.\n\t\treturn -1 * swap\n\t}\n\n\t// For object and tuple types, comparing two types doesn't really tell\n\t// the whole story because it may be possible to construct a new type C\n\t// that is the supertype of both A and B by unifying each attribute/element\n\t// separately. That possibility is handled by Unify as a follow-up if\n\t// type sorting is insufficient to produce a valid result.\n\t//\n\t// Here we will take care of the simple possibilities where no new type\n\t// is needed.\n\tif a.IsObjectType() && b.IsObjectType() {\n\t\tatysA := a.AttributeTypes()\n\t\tatysB := b.AttributeTypes()\n\n\t\tif len(atysA) != len(atysB) {\n\t\t\treturn 0\n\t\t}\n\n\t\thasASuper := false\n\t\thasBSuper := false\n\t\tfor k := range atysA {\n\t\t\tif _, has := atysB[k]; !has {\n\t\t\t\treturn 0\n\t\t\t}\n\n\t\t\tcmp := compareTypes(atysA[k], atysB[k])\n\t\t\tif cmp < 0 {\n\t\t\t\thasASuper = true\n\t\t\t} else if cmp > 0 {\n\t\t\t\thasBSuper = true\n\t\t\t}\n\t\t}\n\n\t\tswitch {\n\t\tcase hasASuper && hasBSuper:\n\t\t\treturn 0\n\t\tcase hasASuper:\n\t\t\treturn -1 * swap\n\t\tcase hasBSuper:\n\t\t\treturn 1 * swap\n\t\tdefault:\n\t\t\treturn 0\n\t\t}\n\t}\n\tif a.IsTupleType() && b.IsTupleType() {\n\t\tetysA := a.TupleElementTypes()\n\t\tetysB := b.TupleElementTypes()\n\n\t\tif len(etysA) != len(etysB) {\n\t\t\treturn 0\n\t\t}\n\n\t\thasASuper := false\n\t\thasBSuper := false\n\t\tfor i := range etysA {\n\t\t\tcmp := compareTypes(etysA[i], etysB[i])\n\t\t\tif cmp < 0 {\n\t\t\t\thasASuper = true\n\t\t\t} else if cmp > 0 {\n\t\t\t\thasBSuper = true\n\t\t\t}\n\t\t}\n\n\t\tswitch {\n\t\tcase hasASuper && hasBSuper:\n\t\t\treturn 0\n\t\tcase hasASuper:\n\t\t\treturn -1 * swap\n\t\tcase hasBSuper:\n\t\t\treturn 1 * swap\n\t\tdefault:\n\t\t\treturn 0\n\t\t}\n\t}\n\n\treturn 0\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/convert/conversion.go",
    "content": "package convert\n\nimport (\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// conversion is an internal variant of Conversion that carries around\n// a cty.Path to be used in error responses.\ntype conversion func(cty.Value, cty.Path) (cty.Value, error)\n\nfunc getConversion(in cty.Type, out cty.Type, unsafe bool) conversion {\n\tconv := getConversionKnown(in, out, unsafe)\n\tif conv == nil {\n\t\treturn nil\n\t}\n\n\t// Wrap the conversion in some standard checks that we don't want to\n\t// have to repeat in every conversion function.\n\treturn func(in cty.Value, path cty.Path) (cty.Value, error) {\n\t\tif out == cty.DynamicPseudoType {\n\t\t\t// Conversion to DynamicPseudoType always just passes through verbatim.\n\t\t\treturn in, nil\n\t\t}\n\t\tif !in.IsKnown() {\n\t\t\treturn cty.UnknownVal(out), nil\n\t\t}\n\t\tif in.IsNull() {\n\t\t\t// We'll pass through nulls, albeit type converted, and let\n\t\t\t// the caller deal with whatever handling they want to do in\n\t\t\t// case null values are considered valid in some applications.\n\t\t\treturn cty.NullVal(out), nil\n\t\t}\n\n\t\treturn conv(in, path)\n\t}\n}\n\nfunc getConversionKnown(in cty.Type, out cty.Type, unsafe bool) conversion {\n\tswitch {\n\n\tcase out == cty.DynamicPseudoType:\n\t\t// Conversion *to* DynamicPseudoType means that the caller wishes\n\t\t// to allow any type in this position, so we'll produce a do-nothing\n\t\t// conversion that just passes through the value as-is.\n\t\treturn dynamicPassthrough\n\n\tcase unsafe && in == cty.DynamicPseudoType:\n\t\t// Conversion *from* DynamicPseudoType means that we have a value\n\t\t// whose type isn't yet known during type checking. For these we will\n\t\t// assume that conversion will succeed and deal with any errors that\n\t\t// result (which is why we can only do this when \"unsafe\" is set).\n\t\treturn dynamicFixup(out)\n\n\tcase in.IsPrimitiveType() && out.IsPrimitiveType():\n\t\tconv := primitiveConversionsSafe[in][out]\n\t\tif conv != nil {\n\t\t\treturn conv\n\t\t}\n\t\tif unsafe {\n\t\t\treturn primitiveConversionsUnsafe[in][out]\n\t\t}\n\t\treturn nil\n\n\tcase out.IsObjectType() && in.IsObjectType():\n\t\treturn conversionObjectToObject(in, out, unsafe)\n\n\tcase out.IsTupleType() && in.IsTupleType():\n\t\treturn conversionTupleToTuple(in, out, unsafe)\n\n\tcase out.IsListType() && (in.IsListType() || in.IsSetType()):\n\t\tinEty := in.ElementType()\n\t\toutEty := out.ElementType()\n\t\tif inEty.Equals(outEty) {\n\t\t\t// This indicates that we're converting from list to set with\n\t\t\t// the same element type, so we don't need an element converter.\n\t\t\treturn conversionCollectionToList(outEty, nil)\n\t\t}\n\n\t\tconvEty := getConversion(inEty, outEty, unsafe)\n\t\tif convEty == nil {\n\t\t\treturn nil\n\t\t}\n\t\treturn conversionCollectionToList(outEty, convEty)\n\n\tcase out.IsSetType() && (in.IsListType() || in.IsSetType()):\n\t\tif in.IsListType() && !unsafe {\n\t\t\t// Conversion from list to map is unsafe because it will lose\n\t\t\t// information: the ordering will not be preserved, and any\n\t\t\t// duplicate elements will be conflated.\n\t\t\treturn nil\n\t\t}\n\t\tinEty := in.ElementType()\n\t\toutEty := out.ElementType()\n\t\tconvEty := getConversion(inEty, outEty, unsafe)\n\t\tif inEty.Equals(outEty) {\n\t\t\t// This indicates that we're converting from set to list with\n\t\t\t// the same element type, so we don't need an element converter.\n\t\t\treturn conversionCollectionToSet(outEty, nil)\n\t\t}\n\n\t\tif convEty == nil {\n\t\t\treturn nil\n\t\t}\n\t\treturn conversionCollectionToSet(outEty, convEty)\n\n\tcase out.IsMapType() && in.IsMapType():\n\t\tinEty := in.ElementType()\n\t\toutEty := out.ElementType()\n\t\tconvEty := getConversion(inEty, outEty, unsafe)\n\t\tif convEty == nil {\n\t\t\treturn nil\n\t\t}\n\t\treturn conversionCollectionToMap(outEty, convEty)\n\n\tcase out.IsListType() && in.IsTupleType():\n\t\toutEty := out.ElementType()\n\t\treturn conversionTupleToList(in, outEty, unsafe)\n\n\tcase out.IsSetType() && in.IsTupleType():\n\t\toutEty := out.ElementType()\n\t\treturn conversionTupleToSet(in, outEty, unsafe)\n\n\tcase out.IsMapType() && in.IsObjectType():\n\t\toutEty := out.ElementType()\n\t\treturn conversionObjectToMap(in, outEty, unsafe)\n\n\tdefault:\n\t\treturn nil\n\n\t}\n}\n\n// retConversion wraps a conversion (internal type) so it can be returned\n// as a Conversion (public type).\nfunc retConversion(conv conversion) Conversion {\n\tif conv == nil {\n\t\treturn nil\n\t}\n\n\treturn func(in cty.Value) (cty.Value, error) {\n\t\treturn conv(in, cty.Path(nil))\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/convert/conversion_collection.go",
    "content": "package convert\n\nimport (\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// conversionCollectionToList returns a conversion that will apply the given\n// conversion to all of the elements of a collection (something that supports\n// ForEachElement and LengthInt) and then returns the result as a list.\n//\n// \"conv\" can be nil if the elements are expected to already be of the\n// correct type and just need to be re-wrapped into a list. (For example,\n// if we're converting from a set into a list of the same element type.)\nfunc conversionCollectionToList(ety cty.Type, conv conversion) conversion {\n\treturn func(val cty.Value, path cty.Path) (cty.Value, error) {\n\t\telems := make([]cty.Value, 0, val.LengthInt())\n\t\ti := int64(0)\n\t\tpath = append(path, nil)\n\t\tit := val.ElementIterator()\n\t\tfor it.Next() {\n\t\t\t_, val := it.Element()\n\t\t\tvar err error\n\n\t\t\tpath[len(path)-1] = cty.IndexStep{\n\t\t\t\tKey: cty.NumberIntVal(i),\n\t\t\t}\n\n\t\t\tif conv != nil {\n\t\t\t\tval, err = conv(val, path)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn cty.NilVal, err\n\t\t\t\t}\n\t\t\t}\n\t\t\telems = append(elems, val)\n\n\t\t\ti++\n\t\t}\n\n\t\tif len(elems) == 0 {\n\t\t\treturn cty.ListValEmpty(ety), nil\n\t\t}\n\n\t\treturn cty.ListVal(elems), nil\n\t}\n}\n\n// conversionCollectionToSet returns a conversion that will apply the given\n// conversion to all of the elements of a collection (something that supports\n// ForEachElement and LengthInt) and then returns the result as a set.\n//\n// \"conv\" can be nil if the elements are expected to already be of the\n// correct type and just need to be re-wrapped into a set. (For example,\n// if we're converting from a list into a set of the same element type.)\nfunc conversionCollectionToSet(ety cty.Type, conv conversion) conversion {\n\treturn func(val cty.Value, path cty.Path) (cty.Value, error) {\n\t\telems := make([]cty.Value, 0, val.LengthInt())\n\t\ti := int64(0)\n\t\tpath = append(path, nil)\n\t\tit := val.ElementIterator()\n\t\tfor it.Next() {\n\t\t\t_, val := it.Element()\n\t\t\tvar err error\n\n\t\t\tpath[len(path)-1] = cty.IndexStep{\n\t\t\t\tKey: cty.NumberIntVal(i),\n\t\t\t}\n\n\t\t\tif conv != nil {\n\t\t\t\tval, err = conv(val, path)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn cty.NilVal, err\n\t\t\t\t}\n\t\t\t}\n\t\t\telems = append(elems, val)\n\n\t\t\ti++\n\t\t}\n\n\t\tif len(elems) == 0 {\n\t\t\treturn cty.SetValEmpty(ety), nil\n\t\t}\n\n\t\treturn cty.SetVal(elems), nil\n\t}\n}\n\n// conversionCollectionToMap returns a conversion that will apply the given\n// conversion to all of the elements of a collection (something that supports\n// ForEachElement and LengthInt) and then returns the result as a map.\n//\n// \"conv\" can be nil if the elements are expected to already be of the\n// correct type and just need to be re-wrapped into a map.\nfunc conversionCollectionToMap(ety cty.Type, conv conversion) conversion {\n\treturn func(val cty.Value, path cty.Path) (cty.Value, error) {\n\t\telems := make(map[string]cty.Value, 0)\n\t\tpath = append(path, nil)\n\t\tit := val.ElementIterator()\n\t\tfor it.Next() {\n\t\t\tkey, val := it.Element()\n\t\t\tvar err error\n\n\t\t\tpath[len(path)-1] = cty.IndexStep{\n\t\t\t\tKey: key,\n\t\t\t}\n\n\t\t\tkeyStr, err := Convert(key, cty.String)\n\t\t\tif err != nil {\n\t\t\t\t// Should never happen, because keys can only be numbers or\n\t\t\t\t// strings and both can convert to string.\n\t\t\t\treturn cty.DynamicVal, path.NewErrorf(\"cannot convert key type %s to string for map\", key.Type().FriendlyName())\n\t\t\t}\n\n\t\t\tif conv != nil {\n\t\t\t\tval, err = conv(val, path)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn cty.NilVal, err\n\t\t\t\t}\n\t\t\t}\n\n\t\t\telems[keyStr.AsString()] = val\n\t\t}\n\n\t\tif len(elems) == 0 {\n\t\t\treturn cty.MapValEmpty(ety), nil\n\t\t}\n\n\t\treturn cty.MapVal(elems), nil\n\t}\n}\n\n// conversionTupleToSet returns a conversion that will take a value of the\n// given tuple type and return a set of the given element type.\n//\n// Will panic if the given tupleType isn't actually a tuple type.\nfunc conversionTupleToSet(tupleType cty.Type, listEty cty.Type, unsafe bool) conversion {\n\ttupleEtys := tupleType.TupleElementTypes()\n\n\tif len(tupleEtys) == 0 {\n\t\t// Empty tuple short-circuit\n\t\treturn func(val cty.Value, path cty.Path) (cty.Value, error) {\n\t\t\treturn cty.SetValEmpty(listEty), nil\n\t\t}\n\t}\n\n\tif listEty == cty.DynamicPseudoType {\n\t\t// This is a special case where the caller wants us to find\n\t\t// a suitable single type that all elements can convert to, if\n\t\t// possible.\n\t\tlistEty, _ = unify(tupleEtys, unsafe)\n\t\tif listEty == cty.NilType {\n\t\t\treturn nil\n\t\t}\n\t}\n\n\telemConvs := make([]conversion, len(tupleEtys))\n\tfor i, tupleEty := range tupleEtys {\n\t\tif tupleEty.Equals(listEty) {\n\t\t\t// no conversion required\n\t\t\tcontinue\n\t\t}\n\n\t\telemConvs[i] = getConversion(tupleEty, listEty, unsafe)\n\t\tif elemConvs[i] == nil {\n\t\t\t// If any of our element conversions are impossible, then the our\n\t\t\t// whole conversion is impossible.\n\t\t\treturn nil\n\t\t}\n\t}\n\n\t// If we fall out here then a conversion is possible, using the\n\t// element conversions in elemConvs\n\treturn func(val cty.Value, path cty.Path) (cty.Value, error) {\n\t\telems := make([]cty.Value, 0, len(elemConvs))\n\t\tpath = append(path, nil)\n\t\ti := int64(0)\n\t\tit := val.ElementIterator()\n\t\tfor it.Next() {\n\t\t\t_, val := it.Element()\n\t\t\tvar err error\n\n\t\t\tpath[len(path)-1] = cty.IndexStep{\n\t\t\t\tKey: cty.NumberIntVal(i),\n\t\t\t}\n\n\t\t\tconv := elemConvs[i]\n\t\t\tif conv != nil {\n\t\t\t\tval, err = conv(val, path)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn cty.NilVal, err\n\t\t\t\t}\n\t\t\t}\n\t\t\telems = append(elems, val)\n\n\t\t\ti++\n\t\t}\n\n\t\treturn cty.SetVal(elems), nil\n\t}\n}\n\n// conversionTupleToList returns a conversion that will take a value of the\n// given tuple type and return a list of the given element type.\n//\n// Will panic if the given tupleType isn't actually a tuple type.\nfunc conversionTupleToList(tupleType cty.Type, listEty cty.Type, unsafe bool) conversion {\n\ttupleEtys := tupleType.TupleElementTypes()\n\n\tif len(tupleEtys) == 0 {\n\t\t// Empty tuple short-circuit\n\t\treturn func(val cty.Value, path cty.Path) (cty.Value, error) {\n\t\t\treturn cty.ListValEmpty(listEty), nil\n\t\t}\n\t}\n\n\tif listEty == cty.DynamicPseudoType {\n\t\t// This is a special case where the caller wants us to find\n\t\t// a suitable single type that all elements can convert to, if\n\t\t// possible.\n\t\tlistEty, _ = unify(tupleEtys, unsafe)\n\t\tif listEty == cty.NilType {\n\t\t\treturn nil\n\t\t}\n\t}\n\n\telemConvs := make([]conversion, len(tupleEtys))\n\tfor i, tupleEty := range tupleEtys {\n\t\tif tupleEty.Equals(listEty) {\n\t\t\t// no conversion required\n\t\t\tcontinue\n\t\t}\n\n\t\telemConvs[i] = getConversion(tupleEty, listEty, unsafe)\n\t\tif elemConvs[i] == nil {\n\t\t\t// If any of our element conversions are impossible, then the our\n\t\t\t// whole conversion is impossible.\n\t\t\treturn nil\n\t\t}\n\t}\n\n\t// If we fall out here then a conversion is possible, using the\n\t// element conversions in elemConvs\n\treturn func(val cty.Value, path cty.Path) (cty.Value, error) {\n\t\telems := make([]cty.Value, 0, len(elemConvs))\n\t\tpath = append(path, nil)\n\t\ti := int64(0)\n\t\tit := val.ElementIterator()\n\t\tfor it.Next() {\n\t\t\t_, val := it.Element()\n\t\t\tvar err error\n\n\t\t\tpath[len(path)-1] = cty.IndexStep{\n\t\t\t\tKey: cty.NumberIntVal(i),\n\t\t\t}\n\n\t\t\tconv := elemConvs[i]\n\t\t\tif conv != nil {\n\t\t\t\tval, err = conv(val, path)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn cty.NilVal, err\n\t\t\t\t}\n\t\t\t}\n\t\t\telems = append(elems, val)\n\n\t\t\ti++\n\t\t}\n\n\t\treturn cty.ListVal(elems), nil\n\t}\n}\n\n// conversionObjectToMap returns a conversion that will take a value of the\n// given object type and return a map of the given element type.\n//\n// Will panic if the given objectType isn't actually an object type.\nfunc conversionObjectToMap(objectType cty.Type, mapEty cty.Type, unsafe bool) conversion {\n\tobjectAtys := objectType.AttributeTypes()\n\n\tif len(objectAtys) == 0 {\n\t\t// Empty object short-circuit\n\t\treturn func(val cty.Value, path cty.Path) (cty.Value, error) {\n\t\t\treturn cty.MapValEmpty(mapEty), nil\n\t\t}\n\t}\n\n\tif mapEty == cty.DynamicPseudoType {\n\t\t// This is a special case where the caller wants us to find\n\t\t// a suitable single type that all elements can convert to, if\n\t\t// possible.\n\t\tobjectAtysList := make([]cty.Type, 0, len(objectAtys))\n\t\tfor _, aty := range objectAtys {\n\t\t\tobjectAtysList = append(objectAtysList, aty)\n\t\t}\n\t\tmapEty, _ = unify(objectAtysList, unsafe)\n\t\tif mapEty == cty.NilType {\n\t\t\treturn nil\n\t\t}\n\t}\n\n\telemConvs := make(map[string]conversion, len(objectAtys))\n\tfor name, objectAty := range objectAtys {\n\t\tif objectAty.Equals(mapEty) {\n\t\t\t// no conversion required\n\t\t\tcontinue\n\t\t}\n\n\t\telemConvs[name] = getConversion(objectAty, mapEty, unsafe)\n\t\tif elemConvs[name] == nil {\n\t\t\t// If any of our element conversions are impossible, then the our\n\t\t\t// whole conversion is impossible.\n\t\t\treturn nil\n\t\t}\n\t}\n\n\t// If we fall out here then a conversion is possible, using the\n\t// element conversions in elemConvs\n\treturn func(val cty.Value, path cty.Path) (cty.Value, error) {\n\t\telems := make(map[string]cty.Value, len(elemConvs))\n\t\tpath = append(path, nil)\n\t\tit := val.ElementIterator()\n\t\tfor it.Next() {\n\t\t\tname, val := it.Element()\n\t\t\tvar err error\n\n\t\t\tpath[len(path)-1] = cty.IndexStep{\n\t\t\t\tKey: name,\n\t\t\t}\n\n\t\t\tconv := elemConvs[name.AsString()]\n\t\t\tif conv != nil {\n\t\t\t\tval, err = conv(val, path)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn cty.NilVal, err\n\t\t\t\t}\n\t\t\t}\n\t\t\telems[name.AsString()] = val\n\t\t}\n\n\t\treturn cty.MapVal(elems), nil\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/convert/conversion_dynamic.go",
    "content": "package convert\n\nimport (\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// dynamicFixup deals with just-in-time conversions of values that were\n// input-typed as cty.DynamicPseudoType during analysis, ensuring that\n// we end up with the desired output type once the value is known, or\n// failing with an error if that is not possible.\n//\n// This is in the spirit of the cty philosophy of optimistically assuming that\n// DynamicPseudoType values will become the intended value eventually, and\n// dealing with any inconsistencies during final evaluation.\nfunc dynamicFixup(wantType cty.Type) conversion {\n\treturn func(in cty.Value, path cty.Path) (cty.Value, error) {\n\t\tret, err := Convert(in, wantType)\n\t\tif err != nil {\n\t\t\t// Re-wrap this error so that the returned path is relative\n\t\t\t// to the caller's original value, rather than relative to our\n\t\t\t// conversion value here.\n\t\t\treturn cty.NilVal, path.NewError(err)\n\t\t}\n\t\treturn ret, nil\n\t}\n}\n\n// dynamicPassthrough is an identity conversion that is used when the\n// target type is DynamicPseudoType, indicating that the caller doesn't care\n// which type is returned.\nfunc dynamicPassthrough(in cty.Value, path cty.Path) (cty.Value, error) {\n\treturn in, nil\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/convert/conversion_object.go",
    "content": "package convert\n\nimport (\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// conversionObjectToObject returns a conversion that will make the input\n// object type conform to the output object type, if possible.\n//\n// Conversion is possible only if the output type is a subset of the input\n// type, meaning that each attribute of the output type has a corresponding\n// attribute in the input type where a recursive conversion is available.\n//\n// Shallow object conversions work the same for both safe and unsafe modes,\n// but the safety flag is passed on to recursive conversions and may thus\n// limit the above definition of \"subset\".\nfunc conversionObjectToObject(in, out cty.Type, unsafe bool) conversion {\n\tinAtys := in.AttributeTypes()\n\toutAtys := out.AttributeTypes()\n\tattrConvs := make(map[string]conversion)\n\n\tfor name, outAty := range outAtys {\n\t\tinAty, exists := inAtys[name]\n\t\tif !exists {\n\t\t\t// No conversion is available, then.\n\t\t\treturn nil\n\t\t}\n\n\t\tif inAty.Equals(outAty) {\n\t\t\t// No conversion needed, but we'll still record the attribute\n\t\t\t// in our map for later reference.\n\t\t\tattrConvs[name] = nil\n\t\t\tcontinue\n\t\t}\n\n\t\tattrConvs[name] = getConversion(inAty, outAty, unsafe)\n\t\tif attrConvs[name] == nil {\n\t\t\t// If a recursive conversion isn't available, then our top-level\n\t\t\t// configuration is impossible too.\n\t\t\treturn nil\n\t\t}\n\t}\n\n\t// If we get here then a conversion is possible, using the attribute\n\t// conversions given in attrConvs.\n\treturn func(val cty.Value, path cty.Path) (cty.Value, error) {\n\t\tattrVals := make(map[string]cty.Value, len(attrConvs))\n\t\tpath = append(path, nil)\n\t\tpathStep := &path[len(path)-1]\n\n\t\tfor it := val.ElementIterator(); it.Next(); {\n\t\t\tnameVal, val := it.Element()\n\t\t\tvar err error\n\n\t\t\tname := nameVal.AsString()\n\t\t\t*pathStep = cty.GetAttrStep{\n\t\t\t\tName: name,\n\t\t\t}\n\n\t\t\tconv, exists := attrConvs[name]\n\t\t\tif !exists {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif conv != nil {\n\t\t\t\tval, err = conv(val, path)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn cty.NilVal, err\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tattrVals[name] = val\n\t\t}\n\n\t\treturn cty.ObjectVal(attrVals), nil\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/convert/conversion_primitive.go",
    "content": "package convert\n\nimport (\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\nvar stringTrue = cty.StringVal(\"true\")\nvar stringFalse = cty.StringVal(\"false\")\n\nvar primitiveConversionsSafe = map[cty.Type]map[cty.Type]conversion{\n\tcty.Number: {\n\t\tcty.String: func(val cty.Value, path cty.Path) (cty.Value, error) {\n\t\t\tf := val.AsBigFloat()\n\t\t\treturn cty.StringVal(f.Text('f', -1)), nil\n\t\t},\n\t},\n\tcty.Bool: {\n\t\tcty.String: func(val cty.Value, path cty.Path) (cty.Value, error) {\n\t\t\tif val.True() {\n\t\t\t\treturn stringTrue, nil\n\t\t\t} else {\n\t\t\t\treturn stringFalse, nil\n\t\t\t}\n\t\t},\n\t},\n}\n\nvar primitiveConversionsUnsafe = map[cty.Type]map[cty.Type]conversion{\n\tcty.String: {\n\t\tcty.Number: func(val cty.Value, path cty.Path) (cty.Value, error) {\n\t\t\tv, err := cty.ParseNumberVal(val.AsString())\n\t\t\tif err != nil {\n\t\t\t\treturn cty.NilVal, path.NewErrorf(\"a number is required\")\n\t\t\t}\n\t\t\treturn v, nil\n\t\t},\n\t\tcty.Bool: func(val cty.Value, path cty.Path) (cty.Value, error) {\n\t\t\tswitch val.AsString() {\n\t\t\tcase \"true\", \"1\":\n\t\t\t\treturn cty.True, nil\n\t\t\tcase \"false\", \"0\":\n\t\t\t\treturn cty.False, nil\n\t\t\tdefault:\n\t\t\t\treturn cty.NilVal, path.NewErrorf(\"a bool is required\")\n\t\t\t}\n\t\t},\n\t},\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/convert/conversion_tuple.go",
    "content": "package convert\n\nimport (\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// conversionTupleToTuple returns a conversion that will make the input\n// tuple type conform to the output tuple type, if possible.\n//\n// Conversion is possible only if the two tuple types have the same number\n// of elements and the corresponding elements by index can be converted.\n//\n// Shallow tuple conversions work the same for both safe and unsafe modes,\n// but the safety flag is passed on to recursive conversions and may thus\n// limit which element type conversions are possible.\nfunc conversionTupleToTuple(in, out cty.Type, unsafe bool) conversion {\n\tinEtys := in.TupleElementTypes()\n\toutEtys := out.TupleElementTypes()\n\n\tif len(inEtys) != len(outEtys) {\n\t\treturn nil // no conversion is possible\n\t}\n\n\telemConvs := make([]conversion, len(inEtys))\n\n\tfor i, outEty := range outEtys {\n\t\tinEty := inEtys[i]\n\n\t\tif inEty.Equals(outEty) {\n\t\t\t// No conversion needed, so we can leave this one nil.\n\t\t\tcontinue\n\t\t}\n\n\t\telemConvs[i] = getConversion(inEty, outEty, unsafe)\n\t\tif elemConvs[i] == nil {\n\t\t\t// If a recursive conversion isn't available, then our top-level\n\t\t\t// configuration is impossible too.\n\t\t\treturn nil\n\t\t}\n\t}\n\n\t// If we get here then a conversion is possible, using the element\n\t// conversions given in elemConvs.\n\treturn func(val cty.Value, path cty.Path) (cty.Value, error) {\n\t\telemVals := make([]cty.Value, len(elemConvs))\n\t\tpath = append(path, nil)\n\t\tpathStep := &path[len(path)-1]\n\n\t\ti := 0\n\t\tfor it := val.ElementIterator(); it.Next(); i++ {\n\t\t\t_, val := it.Element()\n\t\t\tvar err error\n\n\t\t\t*pathStep = cty.IndexStep{\n\t\t\t\tKey: cty.NumberIntVal(int64(i)),\n\t\t\t}\n\n\t\t\tconv := elemConvs[i]\n\t\t\tif conv != nil {\n\t\t\t\tval, err = conv(val, path)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn cty.NilVal, err\n\t\t\t\t}\n\t\t\t}\n\n\t\t\telemVals[i] = val\n\t\t}\n\n\t\treturn cty.TupleVal(elemVals), nil\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/convert/doc.go",
    "content": "// Package convert contains some routines for converting between cty types.\n// The intent of providing this package is to encourage applications using\n// cty to have consistent type conversion behavior for maximal interoperability\n// when Values pass from one application to another.\n//\n// The conversions are categorized into two categories. \"Safe\" conversions are\n// ones that are guaranteed to succeed if given a non-null value of the\n// appropriate source type. \"Unsafe\" conversions, on the other hand, are valid\n// for only a subset of input values, and thus may fail with an error when\n// called for values outside of that valid subset.\n//\n// The functions whose names end in Unsafe support all of the conversions that\n// are supported by the corresponding functions whose names do not have that\n// suffix, and then additional unsafe conversions as well.\npackage convert\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/convert/mismatch_msg.go",
    "content": "package convert\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"sort\"\n\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// MismatchMessage is a helper to return an English-language description of\n// the differences between got and want, phrased as a reason why got does\n// not conform to want.\n//\n// This function does not itself attempt conversion, and so it should generally\n// be used only after a conversion has failed, to report the conversion failure\n// to an English-speaking user. The result will be confusing got is actually\n// conforming to or convertable to want.\n//\n// The shorthand helper function Convert uses this function internally to\n// produce its error messages, so callers of that function do not need to\n// also use MismatchMessage.\n//\n// This function is similar to Type.TestConformance, but it is tailored to\n// describing conversion failures and so the messages it generates relate\n// specifically to the conversion rules implemented in this package.\nfunc MismatchMessage(got, want cty.Type) string {\n\tswitch {\n\n\tcase got.IsObjectType() && want.IsObjectType():\n\t\t// If both types are object types then we may be able to say something\n\t\t// about their respective attributes.\n\t\treturn mismatchMessageObjects(got, want)\n\n\tcase got.IsTupleType() && want.IsListType() && want.ElementType() == cty.DynamicPseudoType:\n\t\t// If conversion from tuple to list failed then it's because we couldn't\n\t\t// find a common type to convert all of the tuple elements to.\n\t\treturn \"all list elements must have the same type\"\n\n\tcase got.IsTupleType() && want.IsSetType() && want.ElementType() == cty.DynamicPseudoType:\n\t\t// If conversion from tuple to set failed then it's because we couldn't\n\t\t// find a common type to convert all of the tuple elements to.\n\t\treturn \"all set elements must have the same type\"\n\n\tcase got.IsObjectType() && want.IsMapType() && want.ElementType() == cty.DynamicPseudoType:\n\t\t// If conversion from object to map failed then it's because we couldn't\n\t\t// find a common type to convert all of the object attributes to.\n\t\treturn \"all map elements must have the same type\"\n\n\tcase (got.IsTupleType() || got.IsObjectType()) && want.IsCollectionType():\n\t\treturn mismatchMessageCollectionsFromStructural(got, want)\n\n\tcase got.IsCollectionType() && want.IsCollectionType():\n\t\treturn mismatchMessageCollectionsFromCollections(got, want)\n\n\tdefault:\n\t\t// If we have nothing better to say, we'll just state what was required.\n\t\treturn want.FriendlyNameForConstraint() + \" required\"\n\t}\n}\n\nfunc mismatchMessageObjects(got, want cty.Type) string {\n\t// Per our conversion rules, \"got\" is allowed to be a superset of \"want\",\n\t// and so we'll produce error messages here under that assumption.\n\tgotAtys := got.AttributeTypes()\n\twantAtys := want.AttributeTypes()\n\n\t// If we find missing attributes then we'll report those in preference,\n\t// but if not then we will report a maximum of one non-conforming\n\t// attribute, just to keep our messages relatively terse.\n\t// We'll also prefer to report a recursive type error from an _unsafe_\n\t// conversion over a safe one, because these are subjectively more\n\t// \"serious\".\n\tvar missingAttrs []string\n\tvar unsafeMismatchAttr string\n\tvar safeMismatchAttr string\n\n\tfor name, wantAty := range wantAtys {\n\t\tgotAty, exists := gotAtys[name]\n\t\tif !exists {\n\t\t\tmissingAttrs = append(missingAttrs, name)\n\t\t\tcontinue\n\t\t}\n\n\t\t// We'll now try to convert these attributes in isolation and\n\t\t// see if we have a nested conversion error to report.\n\t\t// We'll try an unsafe conversion first, and then fall back on\n\t\t// safe if unsafe is possible.\n\n\t\t// If we already have an unsafe mismatch attr error then we won't bother\n\t\t// hunting for another one.\n\t\tif unsafeMismatchAttr != \"\" {\n\t\t\tcontinue\n\t\t}\n\t\tif conv := GetConversionUnsafe(gotAty, wantAty); conv == nil {\n\t\t\tunsafeMismatchAttr = fmt.Sprintf(\"attribute %q: %s\", name, MismatchMessage(gotAty, wantAty))\n\t\t}\n\n\t\t// If we already have a safe mismatch attr error then we won't bother\n\t\t// hunting for another one.\n\t\tif safeMismatchAttr != \"\" {\n\t\t\tcontinue\n\t\t}\n\t\tif conv := GetConversion(gotAty, wantAty); conv == nil {\n\t\t\tsafeMismatchAttr = fmt.Sprintf(\"attribute %q: %s\", name, MismatchMessage(gotAty, wantAty))\n\t\t}\n\t}\n\n\t// We should now have collected at least one problem. If we have more than\n\t// one then we'll use our preference order to decide what is most important\n\t// to report.\n\tswitch {\n\n\tcase len(missingAttrs) != 0:\n\t\tsort.Strings(missingAttrs)\n\t\tswitch len(missingAttrs) {\n\t\tcase 1:\n\t\t\treturn fmt.Sprintf(\"attribute %q is required\", missingAttrs[0])\n\t\tcase 2:\n\t\t\treturn fmt.Sprintf(\"attributes %q and %q are required\", missingAttrs[0], missingAttrs[1])\n\t\tdefault:\n\t\t\tsort.Strings(missingAttrs)\n\t\t\tvar buf bytes.Buffer\n\t\t\tfor _, name := range missingAttrs[:len(missingAttrs)-1] {\n\t\t\t\tfmt.Fprintf(&buf, \"%q, \", name)\n\t\t\t}\n\t\t\tfmt.Fprintf(&buf, \"and %q\", missingAttrs[len(missingAttrs)-1])\n\t\t\treturn fmt.Sprintf(\"attributes %s are required\", buf.Bytes())\n\t\t}\n\n\tcase unsafeMismatchAttr != \"\":\n\t\treturn unsafeMismatchAttr\n\n\tcase safeMismatchAttr != \"\":\n\t\treturn safeMismatchAttr\n\n\tdefault:\n\t\t// We should never get here, but if we do then we'll return\n\t\t// just a generic message.\n\t\treturn \"incorrect object attributes\"\n\t}\n}\n\nfunc mismatchMessageCollectionsFromStructural(got, want cty.Type) string {\n\t// First some straightforward cases where the kind is just altogether wrong.\n\tswitch {\n\tcase want.IsListType() && !got.IsTupleType():\n\t\treturn want.FriendlyNameForConstraint() + \" required\"\n\tcase want.IsSetType() && !got.IsTupleType():\n\t\treturn want.FriendlyNameForConstraint() + \" required\"\n\tcase want.IsMapType() && !got.IsObjectType():\n\t\treturn want.FriendlyNameForConstraint() + \" required\"\n\t}\n\n\t// If the kinds are matched well enough then we'll move on to checking\n\t// individual elements.\n\twantEty := want.ElementType()\n\tswitch {\n\tcase got.IsTupleType():\n\t\tfor i, gotEty := range got.TupleElementTypes() {\n\t\t\tif gotEty.Equals(wantEty) {\n\t\t\t\tcontinue // exact match, so no problem\n\t\t\t}\n\t\t\tif conv := getConversion(gotEty, wantEty, true); conv != nil {\n\t\t\t\tcontinue // conversion is available, so no problem\n\t\t\t}\n\t\t\treturn fmt.Sprintf(\"element %d: %s\", i, MismatchMessage(gotEty, wantEty))\n\t\t}\n\n\t\t// If we get down here then something weird is going on but we'll\n\t\t// return a reasonable fallback message anyway.\n\t\treturn fmt.Sprintf(\"all elements must be %s\", wantEty.FriendlyNameForConstraint())\n\n\tcase got.IsObjectType():\n\t\tfor name, gotAty := range got.AttributeTypes() {\n\t\t\tif gotAty.Equals(wantEty) {\n\t\t\t\tcontinue // exact match, so no problem\n\t\t\t}\n\t\t\tif conv := getConversion(gotAty, wantEty, true); conv != nil {\n\t\t\t\tcontinue // conversion is available, so no problem\n\t\t\t}\n\t\t\treturn fmt.Sprintf(\"element %q: %s\", name, MismatchMessage(gotAty, wantEty))\n\t\t}\n\n\t\t// If we get down here then something weird is going on but we'll\n\t\t// return a reasonable fallback message anyway.\n\t\treturn fmt.Sprintf(\"all elements must be %s\", wantEty.FriendlyNameForConstraint())\n\n\tdefault:\n\t\t// Should not be possible to get here since we only call this function\n\t\t// with got as structural types, but...\n\t\treturn want.FriendlyNameForConstraint() + \" required\"\n\t}\n}\n\nfunc mismatchMessageCollectionsFromCollections(got, want cty.Type) string {\n\t// First some straightforward cases where the kind is just altogether wrong.\n\tswitch {\n\tcase want.IsListType() && !(got.IsListType() || got.IsSetType()):\n\t\treturn want.FriendlyNameForConstraint() + \" required\"\n\tcase want.IsSetType() && !(got.IsListType() || got.IsSetType()):\n\t\treturn want.FriendlyNameForConstraint() + \" required\"\n\tcase want.IsMapType() && !got.IsMapType():\n\t\treturn want.FriendlyNameForConstraint() + \" required\"\n\t}\n\n\t// If the kinds are matched well enough then we'll check the element types.\n\tgotEty := got.ElementType()\n\twantEty := want.ElementType()\n\tnoun := \"element type\"\n\tswitch {\n\tcase want.IsListType():\n\t\tnoun = \"list element type\"\n\tcase want.IsSetType():\n\t\tnoun = \"set element type\"\n\tcase want.IsMapType():\n\t\tnoun = \"map element type\"\n\t}\n\treturn fmt.Sprintf(\"incorrect %s: %s\", noun, MismatchMessage(gotEty, wantEty))\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/convert/public.go",
    "content": "package convert\n\nimport (\n\t\"errors\"\n\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// This file contains the public interface of this package, which is intended\n// to be a small, convenient interface designed for easy integration into\n// a hypothetical language type checker and interpreter.\n\n// Conversion is a named function type representing a conversion from a\n// value of one type to a value of another type.\n//\n// The source type for a conversion is always the source type given to\n// the function that returned the Conversion, but there is no way to recover\n// that from a Conversion value itself. If a Conversion is given a value\n// that is not of its expected type (with the exception of DynamicPseudoType,\n// which is always supported) then the function may panic or produce undefined\n// results.\ntype Conversion func(in cty.Value) (out cty.Value, err error)\n\n// GetConversion returns a Conversion between the given in and out Types if\n// a safe one is available, or returns nil otherwise.\nfunc GetConversion(in cty.Type, out cty.Type) Conversion {\n\treturn retConversion(getConversion(in, out, false))\n}\n\n// GetConversionUnsafe returns a Conversion between the given in and out Types\n// if either a safe or unsafe one is available, or returns nil otherwise.\nfunc GetConversionUnsafe(in cty.Type, out cty.Type) Conversion {\n\treturn retConversion(getConversion(in, out, true))\n}\n\n// Convert returns the result of converting the given value to the given type\n// if an safe or unsafe conversion is available, or returns an error if such a\n// conversion is impossible.\n//\n// This is a convenience wrapper around calling GetConversionUnsafe and then\n// immediately passing the given value to the resulting function.\nfunc Convert(in cty.Value, want cty.Type) (cty.Value, error) {\n\tif in.Type().Equals(want) {\n\t\treturn in, nil\n\t}\n\n\tconv := GetConversionUnsafe(in.Type(), want)\n\tif conv == nil {\n\t\treturn cty.NilVal, errors.New(MismatchMessage(in.Type(), want))\n\t}\n\treturn conv(in)\n}\n\n// Unify attempts to find the most general type that can be converted from\n// all of the given types. If this is possible, that type is returned along\n// with a slice of necessary conversions for some of the given types.\n//\n// If no common supertype can be found, this function returns cty.NilType and\n// a nil slice.\n//\n// If a common supertype *can* be found, the returned slice will always be\n// non-nil and will contain a non-nil conversion for each given type that\n// needs to be converted, with indices corresponding to the input slice.\n// Any given type that does *not* need conversion (because it is already of\n// the appropriate type) will have a nil Conversion.\n//\n// cty.DynamicPseudoType is, as usual, a special case. If the given type list\n// contains a mixture of dynamic and non-dynamic types, the dynamic types are\n// disregarded for type selection and a conversion is returned for them that\n// will attempt a late conversion of the given value to the target type,\n// failing with a conversion error if the eventual concrete type is not\n// compatible. If *all* given types are DynamicPseudoType, or in the\n// degenerate case of an empty slice of types, the returned type is itself\n// cty.DynamicPseudoType and no conversions are attempted.\nfunc Unify(types []cty.Type) (cty.Type, []Conversion) {\n\treturn unify(types, false)\n}\n\n// UnifyUnsafe is the same as Unify except that it may return unsafe\n// conversions in situations where a safe conversion isn't also available.\nfunc UnifyUnsafe(types []cty.Type) (cty.Type, []Conversion) {\n\treturn unify(types, true)\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/convert/sort_types.go",
    "content": "package convert\n\nimport (\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// sortTypes produces an ordering of the given types that serves as a\n// preference order for the result of unification of the given types.\n// The return value is a slice of indices into the given slice, and will\n// thus always be the same length as the given slice.\n//\n// The goal is that the most general of the given types will appear first\n// in the ordering. If there are uncomparable pairs of types in the list\n// then they will appear in an undefined order, and the unification pass\n// will presumably then fail.\nfunc sortTypes(tys []cty.Type) []int {\n\tl := len(tys)\n\n\t// First we build a graph whose edges represent \"more general than\",\n\t// which we will then do a topological sort of.\n\tedges := make([][]int, l)\n\tfor i := 0; i < (l - 1); i++ {\n\t\tfor j := i + 1; j < l; j++ {\n\t\t\tcmp := compareTypes(tys[i], tys[j])\n\t\t\tswitch {\n\t\t\tcase cmp < 0:\n\t\t\t\tedges[i] = append(edges[i], j)\n\t\t\tcase cmp > 0:\n\t\t\t\tedges[j] = append(edges[j], i)\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compute the in-degree of each node\n\tinDegree := make([]int, l)\n\tfor _, outs := range edges {\n\t\tfor _, j := range outs {\n\t\t\tinDegree[j]++\n\t\t}\n\t}\n\n\t// The array backing our result will double as our queue for visiting\n\t// the nodes, with the queue slice moving along this array until it\n\t// is empty and positioned at the end of the array. Thus our visiting\n\t// order is also our result order.\n\tresult := make([]int, l)\n\tqueue := result[0:0]\n\n\t// Initialize the queue with any item of in-degree 0, preserving\n\t// their relative order.\n\tfor i, n := range inDegree {\n\t\tif n == 0 {\n\t\t\tqueue = append(queue, i)\n\t\t}\n\t}\n\n\tfor len(queue) != 0 {\n\t\ti := queue[0]\n\t\tqueue = queue[1:]\n\t\tfor _, j := range edges[i] {\n\t\t\tinDegree[j]--\n\t\t\tif inDegree[j] == 0 {\n\t\t\t\tqueue = append(queue, j)\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/convert/unify.go",
    "content": "package convert\n\nimport (\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// The current unify implementation is somewhat inefficient, but we accept this\n// under the assumption that it will generally be used with small numbers of\n// types and with types of reasonable complexity. However, it does have a\n// \"happy path\" where all of the given types are equal.\n//\n// This function is likely to have poor performance in cases where any given\n// types are very complex (lots of deeply-nested structures) or if the list\n// of types itself is very large. In particular, it will walk the nested type\n// structure under the given types several times, especially when given a\n// list of types for which unification is not possible, since each permutation\n// will be tried to determine that result.\nfunc unify(types []cty.Type, unsafe bool) (cty.Type, []Conversion) {\n\tif len(types) == 0 {\n\t\t// Degenerate case\n\t\treturn cty.NilType, nil\n\t}\n\n\t// If all of the given types are of the same structural kind, we may be\n\t// able to construct a new type that they can all be unified to, even if\n\t// that is not one of the given types. We must try this before the general\n\t// behavior below because in unsafe mode we can convert an object type to\n\t// a subset of that type, which would be a much less useful conversion for\n\t// unification purposes.\n\t{\n\t\tobjectCt := 0\n\t\ttupleCt := 0\n\t\tdynamicCt := 0\n\t\tfor _, ty := range types {\n\t\t\tswitch {\n\t\t\tcase ty.IsObjectType():\n\t\t\t\tobjectCt++\n\t\t\tcase ty.IsTupleType():\n\t\t\t\ttupleCt++\n\t\t\tcase ty == cty.DynamicPseudoType:\n\t\t\t\tdynamicCt++\n\t\t\tdefault:\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tswitch {\n\t\tcase objectCt > 0 && (objectCt+dynamicCt) == len(types):\n\t\t\treturn unifyObjectTypes(types, unsafe, dynamicCt > 0)\n\t\tcase tupleCt > 0 && (tupleCt+dynamicCt) == len(types):\n\t\t\treturn unifyTupleTypes(types, unsafe, dynamicCt > 0)\n\t\tcase objectCt > 0 && tupleCt > 0:\n\t\t\t// Can never unify object and tuple types since they have incompatible kinds\n\t\t\treturn cty.NilType, nil\n\t\t}\n\t}\n\n\tprefOrder := sortTypes(types)\n\n\t// sortTypes gives us an order where earlier items are preferable as\n\t// our result type. We'll now walk through these and choose the first\n\t// one we encounter for which conversions exist for all source types.\n\tconversions := make([]Conversion, len(types))\nPreferences:\n\tfor _, wantTypeIdx := range prefOrder {\n\t\twantType := types[wantTypeIdx]\n\t\tfor i, tryType := range types {\n\t\t\tif i == wantTypeIdx {\n\t\t\t\t// Don't need to convert our wanted type to itself\n\t\t\t\tconversions[i] = nil\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif tryType.Equals(wantType) {\n\t\t\t\tconversions[i] = nil\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif unsafe {\n\t\t\t\tconversions[i] = GetConversionUnsafe(tryType, wantType)\n\t\t\t} else {\n\t\t\t\tconversions[i] = GetConversion(tryType, wantType)\n\t\t\t}\n\n\t\t\tif conversions[i] == nil {\n\t\t\t\t// wantType is not a suitable unification type, so we'll\n\t\t\t\t// try the next one in our preference order.\n\t\t\t\tcontinue Preferences\n\t\t\t}\n\t\t}\n\n\t\treturn wantType, conversions\n\t}\n\n\t// If we fall out here, no unification is possible\n\treturn cty.NilType, nil\n}\n\nfunc unifyObjectTypes(types []cty.Type, unsafe bool, hasDynamic bool) (cty.Type, []Conversion) {\n\t// If we had any dynamic types in the input here then we can't predict\n\t// what path we'll take through here once these become known types, so\n\t// we'll conservatively produce DynamicVal for these.\n\tif hasDynamic {\n\t\treturn unifyAllAsDynamic(types)\n\t}\n\n\t// There are two different ways we can succeed here:\n\t// - If all of the given object types have the same set of attribute names\n\t//   and the corresponding types are all unifyable, then we construct that\n\t//   type.\n\t// - If the given object types have different attribute names or their\n\t//   corresponding types are not unifyable, we'll instead try to unify\n\t//   all of the attribute types together to produce a map type.\n\t//\n\t// Our unification behavior is intentionally stricter than our conversion\n\t// behavior for subset object types because user intent is different with\n\t// unification use-cases: it makes sense to allow {\"foo\":true} to convert\n\t// to emptyobjectval, but unifying an object with an attribute with the\n\t// empty object type should be an error because unifying to the empty\n\t// object type would be suprising and useless.\n\n\tfirstAttrs := types[0].AttributeTypes()\n\tfor _, ty := range types[1:] {\n\t\tthisAttrs := ty.AttributeTypes()\n\t\tif len(thisAttrs) != len(firstAttrs) {\n\t\t\t// If number of attributes is different then there can be no\n\t\t\t// object type in common.\n\t\t\treturn unifyObjectTypesToMap(types, unsafe)\n\t\t}\n\t\tfor name := range thisAttrs {\n\t\t\tif _, ok := firstAttrs[name]; !ok {\n\t\t\t\t// If attribute names don't exactly match then there can be\n\t\t\t\t// no object type in common.\n\t\t\t\treturn unifyObjectTypesToMap(types, unsafe)\n\t\t\t}\n\t\t}\n\t}\n\n\t// If we get here then we've proven that all of the given object types\n\t// have exactly the same set of attribute names, though the types may\n\t// differ.\n\tretAtys := make(map[string]cty.Type)\n\tatysAcross := make([]cty.Type, len(types))\n\tfor name := range firstAttrs {\n\t\tfor i, ty := range types {\n\t\t\tatysAcross[i] = ty.AttributeType(name)\n\t\t}\n\t\tretAtys[name], _ = unify(atysAcross, unsafe)\n\t\tif retAtys[name] == cty.NilType {\n\t\t\t// Cannot unify this attribute alone, which means that unification\n\t\t\t// of everything down to a map type can't be possible either.\n\t\t\treturn cty.NilType, nil\n\t\t}\n\t}\n\tretTy := cty.Object(retAtys)\n\n\tconversions := make([]Conversion, len(types))\n\tfor i, ty := range types {\n\t\tif ty.Equals(retTy) {\n\t\t\tcontinue\n\t\t}\n\t\tif unsafe {\n\t\t\tconversions[i] = GetConversionUnsafe(ty, retTy)\n\t\t} else {\n\t\t\tconversions[i] = GetConversion(ty, retTy)\n\t\t}\n\t\tif conversions[i] == nil {\n\t\t\t// Shouldn't be reachable, since we were able to unify\n\t\t\treturn unifyObjectTypesToMap(types, unsafe)\n\t\t}\n\t}\n\n\treturn retTy, conversions\n}\n\nfunc unifyObjectTypesToMap(types []cty.Type, unsafe bool) (cty.Type, []Conversion) {\n\t// This is our fallback case for unifyObjectTypes, where we see if we can\n\t// construct a map type that can accept all of the attribute types.\n\n\tvar atys []cty.Type\n\tfor _, ty := range types {\n\t\tfor _, aty := range ty.AttributeTypes() {\n\t\t\tatys = append(atys, aty)\n\t\t}\n\t}\n\n\tety, _ := unify(atys, unsafe)\n\tif ety == cty.NilType {\n\t\treturn cty.NilType, nil\n\t}\n\n\tretTy := cty.Map(ety)\n\tconversions := make([]Conversion, len(types))\n\tfor i, ty := range types {\n\t\tif ty.Equals(retTy) {\n\t\t\tcontinue\n\t\t}\n\t\tif unsafe {\n\t\t\tconversions[i] = GetConversionUnsafe(ty, retTy)\n\t\t} else {\n\t\t\tconversions[i] = GetConversion(ty, retTy)\n\t\t}\n\t\tif conversions[i] == nil {\n\t\t\treturn cty.NilType, nil\n\t\t}\n\t}\n\treturn retTy, conversions\n}\n\nfunc unifyTupleTypes(types []cty.Type, unsafe bool, hasDynamic bool) (cty.Type, []Conversion) {\n\t// If we had any dynamic types in the input here then we can't predict\n\t// what path we'll take through here once these become known types, so\n\t// we'll conservatively produce DynamicVal for these.\n\tif hasDynamic {\n\t\treturn unifyAllAsDynamic(types)\n\t}\n\n\t// There are two different ways we can succeed here:\n\t// - If all of the given tuple types have the same sequence of element types\n\t//   and the corresponding types are all unifyable, then we construct that\n\t//   type.\n\t// - If the given tuple types have different element types or their\n\t//   corresponding types are not unifyable, we'll instead try to unify\n\t//   all of the elements types together to produce a list type.\n\n\tfirstEtys := types[0].TupleElementTypes()\n\tfor _, ty := range types[1:] {\n\t\tthisEtys := ty.TupleElementTypes()\n\t\tif len(thisEtys) != len(firstEtys) {\n\t\t\t// If number of elements is different then there can be no\n\t\t\t// tuple type in common.\n\t\t\treturn unifyTupleTypesToList(types, unsafe)\n\t\t}\n\t}\n\n\t// If we get here then we've proven that all of the given tuple types\n\t// have the same number of elements, though the types may differ.\n\tretEtys := make([]cty.Type, len(firstEtys))\n\tatysAcross := make([]cty.Type, len(types))\n\tfor idx := range firstEtys {\n\t\tfor tyI, ty := range types {\n\t\t\tatysAcross[tyI] = ty.TupleElementTypes()[idx]\n\t\t}\n\t\tretEtys[idx], _ = unify(atysAcross, unsafe)\n\t\tif retEtys[idx] == cty.NilType {\n\t\t\t// Cannot unify this element alone, which means that unification\n\t\t\t// of everything down to a map type can't be possible either.\n\t\t\treturn cty.NilType, nil\n\t\t}\n\t}\n\tretTy := cty.Tuple(retEtys)\n\n\tconversions := make([]Conversion, len(types))\n\tfor i, ty := range types {\n\t\tif ty.Equals(retTy) {\n\t\t\tcontinue\n\t\t}\n\t\tif unsafe {\n\t\t\tconversions[i] = GetConversionUnsafe(ty, retTy)\n\t\t} else {\n\t\t\tconversions[i] = GetConversion(ty, retTy)\n\t\t}\n\t\tif conversions[i] == nil {\n\t\t\t// Shouldn't be reachable, since we were able to unify\n\t\t\treturn unifyTupleTypesToList(types, unsafe)\n\t\t}\n\t}\n\n\treturn retTy, conversions\n}\n\nfunc unifyTupleTypesToList(types []cty.Type, unsafe bool) (cty.Type, []Conversion) {\n\t// This is our fallback case for unifyTupleTypes, where we see if we can\n\t// construct a list type that can accept all of the element types.\n\n\tvar etys []cty.Type\n\tfor _, ty := range types {\n\t\tfor _, ety := range ty.TupleElementTypes() {\n\t\t\tetys = append(etys, ety)\n\t\t}\n\t}\n\n\tety, _ := unify(etys, unsafe)\n\tif ety == cty.NilType {\n\t\treturn cty.NilType, nil\n\t}\n\n\tretTy := cty.List(ety)\n\tconversions := make([]Conversion, len(types))\n\tfor i, ty := range types {\n\t\tif ty.Equals(retTy) {\n\t\t\tcontinue\n\t\t}\n\t\tif unsafe {\n\t\t\tconversions[i] = GetConversionUnsafe(ty, retTy)\n\t\t} else {\n\t\t\tconversions[i] = GetConversion(ty, retTy)\n\t\t}\n\t\tif conversions[i] == nil {\n\t\t\t// Shouldn't be reachable, since we were able to unify\n\t\t\treturn unifyObjectTypesToMap(types, unsafe)\n\t\t}\n\t}\n\treturn retTy, conversions\n}\n\nfunc unifyAllAsDynamic(types []cty.Type) (cty.Type, []Conversion) {\n\tconversions := make([]Conversion, len(types))\n\tfor i := range conversions {\n\t\tconversions[i] = func(cty.Value) (cty.Value, error) {\n\t\t\treturn cty.DynamicVal, nil\n\t\t}\n\t}\n\treturn cty.DynamicPseudoType, conversions\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/doc.go",
    "content": "// Package cty (pronounced see-tie) provides some infrastructure for a type\n// system that might be useful for applications that need to represent\n// configuration values provided by the user whose types are not known\n// at compile time, particularly if the calling application also allows\n// such values to be used in expressions.\n//\n// The type system consists of primitive types Number, String and Bool, as\n// well as List and Map collection types and Object types that can have\n// arbitrarily-typed sets of attributes.\n//\n// A set of operations is defined on these types, which is accessible via\n// the wrapper struct Value, which annotates the raw, internal representation\n// of a value with its corresponding type.\n//\n// This package is oriented towards being a building block for configuration\n// languages used to bootstrap an application. It is not optimized for use\n// in tight loops where CPU time or memory pressure are a concern.\npackage cty\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/element_iterator.go",
    "content": "package cty\n\nimport (\n\t\"sort\"\n\n\t\"github.com/zclconf/go-cty/cty/set\"\n)\n\n// ElementIterator is the interface type returned by Value.ElementIterator to\n// allow the caller to iterate over elements of a collection-typed value.\n//\n// Its usage pattern is as follows:\n//\n//     it := val.ElementIterator()\n//     for it.Next() {\n//         key, val := it.Element()\n//         // ...\n//     }\ntype ElementIterator interface {\n\tNext() bool\n\tElement() (key Value, value Value)\n}\n\nfunc canElementIterator(val Value) bool {\n\tswitch {\n\tcase val.ty.IsListType():\n\t\treturn true\n\tcase val.ty.IsMapType():\n\t\treturn true\n\tcase val.ty.IsSetType():\n\t\treturn true\n\tcase val.ty.IsTupleType():\n\t\treturn true\n\tcase val.ty.IsObjectType():\n\t\treturn true\n\tdefault:\n\t\treturn false\n\t}\n}\n\nfunc elementIterator(val Value) ElementIterator {\n\tswitch {\n\tcase val.ty.IsListType():\n\t\treturn &listElementIterator{\n\t\t\tety:  val.ty.ElementType(),\n\t\t\tvals: val.v.([]interface{}),\n\t\t\tidx:  -1,\n\t\t}\n\tcase val.ty.IsMapType():\n\t\t// We iterate the keys in a predictable lexicographical order so\n\t\t// that results will always be stable given the same input map.\n\t\trawMap := val.v.(map[string]interface{})\n\t\tkeys := make([]string, 0, len(rawMap))\n\t\tfor key := range rawMap {\n\t\t\tkeys = append(keys, key)\n\t\t}\n\t\tsort.Strings(keys)\n\n\t\treturn &mapElementIterator{\n\t\t\tety:  val.ty.ElementType(),\n\t\t\tvals: rawMap,\n\t\t\tkeys: keys,\n\t\t\tidx:  -1,\n\t\t}\n\tcase val.ty.IsSetType():\n\t\trawSet := val.v.(set.Set)\n\t\treturn &setElementIterator{\n\t\t\tety:   val.ty.ElementType(),\n\t\t\tsetIt: rawSet.Iterator(),\n\t\t}\n\tcase val.ty.IsTupleType():\n\t\treturn &tupleElementIterator{\n\t\t\tetys: val.ty.TupleElementTypes(),\n\t\t\tvals: val.v.([]interface{}),\n\t\t\tidx:  -1,\n\t\t}\n\tcase val.ty.IsObjectType():\n\t\t// We iterate the keys in a predictable lexicographical order so\n\t\t// that results will always be stable given the same object type.\n\t\tatys := val.ty.AttributeTypes()\n\t\tkeys := make([]string, 0, len(atys))\n\t\tfor key := range atys {\n\t\t\tkeys = append(keys, key)\n\t\t}\n\t\tsort.Strings(keys)\n\n\t\treturn &objectElementIterator{\n\t\t\tatys:      atys,\n\t\t\tvals:      val.v.(map[string]interface{}),\n\t\t\tattrNames: keys,\n\t\t\tidx:       -1,\n\t\t}\n\tdefault:\n\t\tpanic(\"attempt to iterate on non-collection, non-tuple type\")\n\t}\n}\n\ntype listElementIterator struct {\n\tety  Type\n\tvals []interface{}\n\tidx  int\n}\n\nfunc (it *listElementIterator) Element() (Value, Value) {\n\ti := it.idx\n\treturn NumberIntVal(int64(i)), Value{\n\t\tty: it.ety,\n\t\tv:  it.vals[i],\n\t}\n}\n\nfunc (it *listElementIterator) Next() bool {\n\tit.idx++\n\treturn it.idx < len(it.vals)\n}\n\ntype mapElementIterator struct {\n\tety  Type\n\tvals map[string]interface{}\n\tkeys []string\n\tidx  int\n}\n\nfunc (it *mapElementIterator) Element() (Value, Value) {\n\tkey := it.keys[it.idx]\n\treturn StringVal(key), Value{\n\t\tty: it.ety,\n\t\tv:  it.vals[key],\n\t}\n}\n\nfunc (it *mapElementIterator) Next() bool {\n\tit.idx++\n\treturn it.idx < len(it.keys)\n}\n\ntype setElementIterator struct {\n\tety   Type\n\tsetIt *set.Iterator\n}\n\nfunc (it *setElementIterator) Element() (Value, Value) {\n\tval := Value{\n\t\tty: it.ety,\n\t\tv:  it.setIt.Value(),\n\t}\n\treturn val, val\n}\n\nfunc (it *setElementIterator) Next() bool {\n\treturn it.setIt.Next()\n}\n\ntype tupleElementIterator struct {\n\tetys []Type\n\tvals []interface{}\n\tidx  int\n}\n\nfunc (it *tupleElementIterator) Element() (Value, Value) {\n\ti := it.idx\n\treturn NumberIntVal(int64(i)), Value{\n\t\tty: it.etys[i],\n\t\tv:  it.vals[i],\n\t}\n}\n\nfunc (it *tupleElementIterator) Next() bool {\n\tit.idx++\n\treturn it.idx < len(it.vals)\n}\n\ntype objectElementIterator struct {\n\tatys      map[string]Type\n\tvals      map[string]interface{}\n\tattrNames []string\n\tidx       int\n}\n\nfunc (it *objectElementIterator) Element() (Value, Value) {\n\tkey := it.attrNames[it.idx]\n\treturn StringVal(key), Value{\n\t\tty: it.atys[key],\n\t\tv:  it.vals[key],\n\t}\n}\n\nfunc (it *objectElementIterator) Next() bool {\n\tit.idx++\n\treturn it.idx < len(it.attrNames)\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/error.go",
    "content": "package cty\n\nimport (\n\t\"fmt\"\n)\n\n// PathError is a specialization of error that represents where in a\n// potentially-deep data structure an error occured, using a Path.\ntype PathError struct {\n\terror\n\tPath Path\n}\n\nfunc errorf(path Path, f string, args ...interface{}) error {\n\t// We need to copy the Path because often our caller builds it by\n\t// continually mutating the same underlying buffer.\n\tsPath := make(Path, len(path))\n\tcopy(sPath, path)\n\treturn PathError{\n\t\terror: fmt.Errorf(f, args...),\n\t\tPath:  sPath,\n\t}\n}\n\n// NewErrorf creates a new PathError for the current path by passing the\n// given format and arguments to fmt.Errorf and then wrapping the result\n// similarly to NewError.\nfunc (p Path) NewErrorf(f string, args ...interface{}) error {\n\treturn errorf(p, f, args...)\n}\n\n// NewError creates a new PathError for the current path, wrapping the given\n// error.\nfunc (p Path) NewError(err error) error {\n\t// if we're being asked to wrap an existing PathError then our new\n\t// PathError will be the concatenation of the two paths, ensuring\n\t// that we still get a single flat PathError that's thus easier for\n\t// callers to deal with.\n\tperr, wrappingPath := err.(PathError)\n\tpathLen := len(p)\n\tif wrappingPath {\n\t\tpathLen = pathLen + len(perr.Path)\n\t}\n\n\tsPath := make(Path, pathLen)\n\tcopy(sPath, p)\n\tif wrappingPath {\n\t\tcopy(sPath[len(p):], perr.Path)\n\t}\n\n\treturn PathError{\n\t\terror: err,\n\t\tPath:  sPath,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/function/argument.go",
    "content": "package function\n\nimport (\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// Parameter represents a parameter to a function.\ntype Parameter struct {\n\t// Name is an optional name for the argument. This package ignores this\n\t// value, but callers may use it for documentation, etc.\n\tName string\n\n\t// A type that any argument for this parameter must conform to.\n\t// cty.DynamicPseudoType can be used, either at top-level or nested\n\t// in a parameterized type, to indicate that any type should be\n\t// permitted, to allow the definition of type-generic functions.\n\tType cty.Type\n\n\t// If AllowNull is set then null values may be passed into this\n\t// argument's slot in both the type-check function and the implementation\n\t// function. If not set, such values are rejected by the built-in\n\t// checking rules.\n\tAllowNull bool\n\n\t// If AllowUnknown is set then unknown values may be passed into this\n\t// argument's slot in the implementation function. If not set, any\n\t// unknown values will cause the function to immediately return\n\t// an unkonwn value without calling the implementation function, thus\n\t// freeing the function implementer from dealing with this case.\n\tAllowUnknown bool\n\n\t// If AllowDynamicType is set then DynamicVal may be passed into this\n\t// argument's slot in the implementation function. If not set, any\n\t// dynamic values will cause the function to immediately return\n\t// DynamicVal value without calling the implementation function, thus\n\t// freeing the function implementer from dealing with this case.\n\t//\n\t// Note that DynamicVal is also unknown, so in order to receive dynamic\n\t// *values* it is also necessary to set AllowUnknown.\n\t//\n\t// However, it is valid to set AllowDynamicType without AllowUnknown, in\n\t// which case a dynamic value may be passed to the type checking function\n\t// but will not make it to the *implementation* function. Instead, an\n\t// unknown value of the type returned by the type-check function will be\n\t// returned. This is suggested for functions that have a static return\n\t// type since it allows the return value to be typed even if the input\n\t// values are not, thus improving the type-check accuracy of derived\n\t// values.\n\tAllowDynamicType bool\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/function/doc.go",
    "content": "// Package function builds on the functionality of cty by modeling functions\n// that operate on cty Values.\n//\n// Functions are, at their core, Go anonymous functions. However, this package\n// wraps around them utility functions for parameter type checking, etc.\npackage function\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/function/error.go",
    "content": "package function\n\nimport (\n\t\"fmt\"\n\t\"runtime/debug\"\n)\n\n// ArgError represents an error with one of the arguments in a call. The\n// attribute Index represents the zero-based index of the argument in question.\n//\n// Its error *may* be a cty.PathError, in which case the error actually\n// pertains to a nested value within the data structure passed as the argument.\ntype ArgError struct {\n\terror\n\tIndex int\n}\n\nfunc NewArgErrorf(i int, f string, args ...interface{}) error {\n\treturn ArgError{\n\t\terror: fmt.Errorf(f, args...),\n\t\tIndex: i,\n\t}\n}\n\nfunc NewArgError(i int, err error) error {\n\treturn ArgError{\n\t\terror: err,\n\t\tIndex: i,\n\t}\n}\n\n// PanicError indicates that a panic occurred while executing either a\n// function's type or implementation function. This is captured and wrapped\n// into a normal error so that callers (expected to be language runtimes)\n// are freed from having to deal with panics in buggy functions.\ntype PanicError struct {\n\tValue interface{}\n\tStack []byte\n}\n\nfunc errorForPanic(val interface{}) error {\n\treturn PanicError{\n\t\tValue: val,\n\t\tStack: debug.Stack(),\n\t}\n}\n\nfunc (e PanicError) Error() string {\n\treturn fmt.Sprintf(\"panic in function implementation: %s\\n%s\", e.Value, e.Stack)\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/function/function.go",
    "content": "package function\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// Function represents a function. This is the main type in this package.\ntype Function struct {\n\tspec *Spec\n}\n\n// Spec is the specification of a function, used to instantiate\n// a new Function.\ntype Spec struct {\n\t// Params is a description of the positional parameters for the function.\n\t// The standard checking logic rejects any calls that do not provide\n\t// arguments conforming to this definition, freeing the function\n\t// implementer from dealing with such inconsistencies.\n\tParams []Parameter\n\n\t// VarParam is an optional specification of additional \"varargs\" the\n\t// function accepts. If this is non-nil then callers may provide an\n\t// arbitrary number of additional arguments (after those matching with\n\t// the fixed parameters in Params) that conform to the given specification,\n\t// which will appear as additional values in the slices of values\n\t// provided to the type and implementation functions.\n\tVarParam *Parameter\n\n\t// Type is the TypeFunc that decides the return type of the function\n\t// given its arguments, which may be Unknown. See the documentation\n\t// of TypeFunc for more information.\n\t//\n\t// Use StaticReturnType if the function's return type does not vary\n\t// depending on its arguments.\n\tType TypeFunc\n\n\t// Impl is the ImplFunc that implements the function's behavior.\n\t//\n\t// Functions are expected to behave as pure functions, and not create\n\t// any visible side-effects.\n\t//\n\t// If a TypeFunc is also provided, the value returned from Impl *must*\n\t// conform to the type it returns, or a call to the function will panic.\n\tImpl ImplFunc\n}\n\n// New creates a new function with the given specification.\n//\n// After passing a Spec to this function, the caller must no longer read from\n// or mutate it.\nfunc New(spec *Spec) Function {\n\tf := Function{\n\t\tspec: spec,\n\t}\n\treturn f\n}\n\n// TypeFunc is a callback type for determining the return type of a function\n// given its arguments.\n//\n// Any of the values passed to this function may be unknown, even if the\n// parameters are not configured to accept unknowns.\n//\n// If any of the given values are *not* unknown, the TypeFunc may use the\n// values for pre-validation and for choosing the return type. For example,\n// a hypothetical JSON-unmarshalling function could return\n// cty.DynamicPseudoType if the given JSON string is unknown, but return\n// a concrete type based on the JSON structure if the JSON string is already\n// known.\ntype TypeFunc func(args []cty.Value) (cty.Type, error)\n\n// ImplFunc is a callback type for the main implementation of a function.\n//\n// \"args\" are the values for the arguments, and this slice will always be at\n// least as long as the argument definition slice for the function.\n//\n// \"retType\" is the type returned from the Type callback, included as a\n// convenience to avoid the need to re-compute the return type for generic\n// functions whose return type is a function of the arguments.\ntype ImplFunc func(args []cty.Value, retType cty.Type) (cty.Value, error)\n\n// StaticReturnType returns a TypeFunc that always returns the given type.\n//\n// This is provided as a convenience for defining a function whose return\n// type does not depend on the argument types.\nfunc StaticReturnType(ty cty.Type) TypeFunc {\n\treturn func([]cty.Value) (cty.Type, error) {\n\t\treturn ty, nil\n\t}\n}\n\n// ReturnType returns the return type of a function given a set of candidate\n// argument types, or returns an error if the given types are unacceptable.\n//\n// If the caller already knows values for at least some of the arguments\n// it can be better to call ReturnTypeForValues, since certain functions may\n// determine their return types from their values and return DynamicVal if\n// the values are unknown.\nfunc (f Function) ReturnType(argTypes []cty.Type) (cty.Type, error) {\n\tvals := make([]cty.Value, len(argTypes))\n\tfor i, ty := range argTypes {\n\t\tvals[i] = cty.UnknownVal(ty)\n\t}\n\treturn f.ReturnTypeForValues(vals)\n}\n\n// ReturnTypeForValues is similar to ReturnType but can be used if the caller\n// already knows the values of some or all of the arguments, in which case\n// the function may be able to determine a more definite result if its\n// return type depends on the argument *values*.\n//\n// For any arguments whose values are not known, pass an Unknown value of\n// the appropriate type.\nfunc (f Function) ReturnTypeForValues(args []cty.Value) (ty cty.Type, err error) {\n\tvar posArgs []cty.Value\n\tvar varArgs []cty.Value\n\n\tif f.spec.VarParam == nil {\n\t\tif len(args) != len(f.spec.Params) {\n\t\t\treturn cty.Type{}, fmt.Errorf(\n\t\t\t\t\"wrong number of arguments (%d required; %d given)\",\n\t\t\t\tlen(f.spec.Params), len(args),\n\t\t\t)\n\t\t}\n\n\t\tposArgs = args\n\t\tvarArgs = nil\n\t} else {\n\t\tif len(args) < len(f.spec.Params) {\n\t\t\treturn cty.Type{}, fmt.Errorf(\n\t\t\t\t\"wrong number of arguments (at least %d required; %d given)\",\n\t\t\t\tlen(f.spec.Params), len(args),\n\t\t\t)\n\t\t}\n\n\t\tposArgs = args[0:len(f.spec.Params)]\n\t\tvarArgs = args[len(f.spec.Params):]\n\t}\n\n\tfor i, spec := range f.spec.Params {\n\t\tval := posArgs[i]\n\n\t\tif val.IsNull() && !spec.AllowNull {\n\t\t\treturn cty.Type{}, NewArgErrorf(i, \"argument must not be null\")\n\t\t}\n\n\t\t// AllowUnknown is ignored for type-checking, since we expect to be\n\t\t// able to type check with unknown values. We *do* still need to deal\n\t\t// with DynamicPseudoType here though, since the Type function might\n\t\t// not be ready to deal with that.\n\n\t\tif val.Type() == cty.DynamicPseudoType {\n\t\t\tif !spec.AllowDynamicType {\n\t\t\t\treturn cty.DynamicPseudoType, nil\n\t\t\t}\n\t\t} else if errs := val.Type().TestConformance(spec.Type); errs != nil {\n\t\t\t// For now we'll just return the first error in the set, since\n\t\t\t// we don't have a good way to return the whole list here.\n\t\t\t// Would be good to do something better at some point...\n\t\t\treturn cty.Type{}, NewArgError(i, errs[0])\n\t\t}\n\t}\n\n\tif varArgs != nil {\n\t\tspec := f.spec.VarParam\n\t\tfor i, val := range varArgs {\n\t\t\trealI := i + len(posArgs)\n\n\t\t\tif val.IsNull() && !spec.AllowNull {\n\t\t\t\treturn cty.Type{}, NewArgErrorf(realI, \"argument must not be null\")\n\t\t\t}\n\n\t\t\tif val.Type() == cty.DynamicPseudoType {\n\t\t\t\tif !spec.AllowDynamicType {\n\t\t\t\t\treturn cty.DynamicPseudoType, nil\n\t\t\t\t}\n\t\t\t} else if errs := val.Type().TestConformance(spec.Type); errs != nil {\n\t\t\t\t// For now we'll just return the first error in the set, since\n\t\t\t\t// we don't have a good way to return the whole list here.\n\t\t\t\t// Would be good to do something better at some point...\n\t\t\t\treturn cty.Type{}, NewArgError(i, errs[0])\n\t\t\t}\n\t\t}\n\t}\n\n\t// Intercept any panics from the function and return them as normal errors,\n\t// so a calling language runtime doesn't need to deal with panics.\n\tdefer func() {\n\t\tif r := recover(); r != nil {\n\t\t\tty = cty.NilType\n\t\t\terr = errorForPanic(r)\n\t\t}\n\t}()\n\n\treturn f.spec.Type(args)\n}\n\n// Call actually calls the function with the given arguments, which must\n// conform to the function's parameter specification or an error will be\n// returned.\nfunc (f Function) Call(args []cty.Value) (val cty.Value, err error) {\n\texpectedType, err := f.ReturnTypeForValues(args)\n\tif err != nil {\n\t\treturn cty.NilVal, err\n\t}\n\n\t// Type checking already dealt with most situations relating to our\n\t// parameter specification, but we still need to deal with unknown\n\t// values.\n\tposArgs := args[:len(f.spec.Params)]\n\tvarArgs := args[len(f.spec.Params):]\n\n\tfor i, spec := range f.spec.Params {\n\t\tval := posArgs[i]\n\n\t\tif !val.IsKnown() && !spec.AllowUnknown {\n\t\t\treturn cty.UnknownVal(expectedType), nil\n\t\t}\n\t}\n\n\tif f.spec.VarParam != nil {\n\t\tspec := f.spec.VarParam\n\t\tfor _, val := range varArgs {\n\t\t\tif !val.IsKnown() && !spec.AllowUnknown {\n\t\t\t\treturn cty.UnknownVal(expectedType), nil\n\t\t\t}\n\t\t}\n\t}\n\n\tvar retVal cty.Value\n\t{\n\t\t// Intercept any panics from the function and return them as normal errors,\n\t\t// so a calling language runtime doesn't need to deal with panics.\n\t\tdefer func() {\n\t\t\tif r := recover(); r != nil {\n\t\t\t\tval = cty.NilVal\n\t\t\t\terr = errorForPanic(r)\n\t\t\t}\n\t\t}()\n\n\t\tretVal, err = f.spec.Impl(args, expectedType)\n\t\tif err != nil {\n\t\t\treturn cty.NilVal, err\n\t\t}\n\t}\n\n\t// Returned value must conform to what the Type function expected, to\n\t// protect callers from having to deal with inconsistencies.\n\tif errs := retVal.Type().TestConformance(expectedType); errs != nil {\n\t\tpanic(fmt.Errorf(\n\t\t\t\"returned value %#v does not conform to expected return type %#v: %s\",\n\t\t\tretVal, expectedType, errs[0],\n\t\t))\n\t}\n\n\treturn retVal, nil\n}\n\n// ProxyFunc the type returned by the method Function.Proxy.\ntype ProxyFunc func(args ...cty.Value) (cty.Value, error)\n\n// Proxy returns a function that can be called with cty.Value arguments\n// to run the function. This is provided as a convenience for when using\n// a function directly within Go code.\nfunc (f Function) Proxy() ProxyFunc {\n\treturn func(args ...cty.Value) (cty.Value, error) {\n\t\treturn f.Call(args)\n\t}\n}\n\n// Params returns information about the function's fixed positional parameters.\n// This does not include information about any variadic arguments accepted;\n// for that, call VarParam.\nfunc (f Function) Params() []Parameter {\n\tnew := make([]Parameter, len(f.spec.Params))\n\tcopy(new, f.spec.Params)\n\treturn new\n}\n\n// VarParam returns information about the variadic arguments the function\n// expects, or nil if the function is not variadic.\nfunc (f Function) VarParam() *Parameter {\n\tif f.spec.VarParam == nil {\n\t\treturn nil\n\t}\n\n\tret := *f.spec.VarParam\n\treturn &ret\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/function/stdlib/bool.go",
    "content": "package stdlib\n\nimport (\n\t\"github.com/zclconf/go-cty/cty\"\n\t\"github.com/zclconf/go-cty/cty/function\"\n)\n\nvar NotFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName:             \"val\",\n\t\t\tType:             cty.Bool,\n\t\t\tAllowDynamicType: true,\n\t\t},\n\t},\n\tType: function.StaticReturnType(cty.Bool),\n\tImpl: func(args []cty.Value, retType cty.Type) (cty.Value, error) {\n\t\treturn args[0].Not(), nil\n\t},\n})\n\nvar AndFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName:             \"a\",\n\t\t\tType:             cty.Bool,\n\t\t\tAllowDynamicType: true,\n\t\t},\n\t\t{\n\t\t\tName:             \"b\",\n\t\t\tType:             cty.Bool,\n\t\t\tAllowDynamicType: true,\n\t\t},\n\t},\n\tType: function.StaticReturnType(cty.Bool),\n\tImpl: func(args []cty.Value, retType cty.Type) (cty.Value, error) {\n\t\treturn args[0].And(args[1]), nil\n\t},\n})\n\nvar OrFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName:             \"a\",\n\t\t\tType:             cty.Bool,\n\t\t\tAllowDynamicType: true,\n\t\t},\n\t\t{\n\t\t\tName:             \"b\",\n\t\t\tType:             cty.Bool,\n\t\t\tAllowDynamicType: true,\n\t\t},\n\t},\n\tType: function.StaticReturnType(cty.Bool),\n\tImpl: func(args []cty.Value, retType cty.Type) (cty.Value, error) {\n\t\treturn args[0].Or(args[1]), nil\n\t},\n})\n\n// Not returns the logical complement of the given boolean value.\nfunc Not(num cty.Value) (cty.Value, error) {\n\treturn NotFunc.Call([]cty.Value{num})\n}\n\n// And returns true if and only if both of the given boolean values are true.\nfunc And(a, b cty.Value) (cty.Value, error) {\n\treturn AndFunc.Call([]cty.Value{a, b})\n}\n\n// Or returns true if either of the given boolean values are true.\nfunc Or(a, b cty.Value) (cty.Value, error) {\n\treturn OrFunc.Call([]cty.Value{a, b})\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/function/stdlib/bytes.go",
    "content": "package stdlib\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\n\t\"github.com/zclconf/go-cty/cty\"\n\t\"github.com/zclconf/go-cty/cty/function\"\n\t\"github.com/zclconf/go-cty/cty/gocty\"\n)\n\n// Bytes is a capsule type that can be used with the binary functions to\n// support applications that need to support raw buffers in addition to\n// UTF-8 strings.\nvar Bytes = cty.Capsule(\"bytes\", reflect.TypeOf([]byte(nil)))\n\n// BytesVal creates a new Bytes value from the given buffer, which must be\n// non-nil or this function will panic.\n//\n// Once a byte slice has been wrapped in a Bytes capsule, its underlying array\n// must be considered immutable.\nfunc BytesVal(buf []byte) cty.Value {\n\tif buf == nil {\n\t\tpanic(\"can't make Bytes value from nil slice\")\n\t}\n\n\treturn cty.CapsuleVal(Bytes, &buf)\n}\n\n// BytesLen is a Function that returns the length of the buffer encapsulated\n// in a Bytes value.\nvar BytesLenFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName:             \"buf\",\n\t\t\tType:             Bytes,\n\t\t\tAllowDynamicType: true,\n\t\t},\n\t},\n\tType: function.StaticReturnType(cty.Number),\n\tImpl: func(args []cty.Value, retType cty.Type) (cty.Value, error) {\n\t\tbufPtr := args[0].EncapsulatedValue().(*[]byte)\n\t\treturn cty.NumberIntVal(int64(len(*bufPtr))), nil\n\t},\n})\n\n// BytesSlice is a Function that returns a slice of the given Bytes value.\nvar BytesSliceFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName:             \"buf\",\n\t\t\tType:             Bytes,\n\t\t\tAllowDynamicType: true,\n\t\t},\n\t\t{\n\t\t\tName:             \"offset\",\n\t\t\tType:             cty.Number,\n\t\t\tAllowDynamicType: true,\n\t\t},\n\t\t{\n\t\t\tName:             \"length\",\n\t\t\tType:             cty.Number,\n\t\t\tAllowDynamicType: true,\n\t\t},\n\t},\n\tType: function.StaticReturnType(Bytes),\n\tImpl: func(args []cty.Value, retType cty.Type) (cty.Value, error) {\n\t\tbufPtr := args[0].EncapsulatedValue().(*[]byte)\n\n\t\tvar offset, length int\n\n\t\tvar err error\n\t\terr = gocty.FromCtyValue(args[1], &offset)\n\t\tif err != nil {\n\t\t\treturn cty.NilVal, err\n\t\t}\n\t\terr = gocty.FromCtyValue(args[2], &length)\n\t\tif err != nil {\n\t\t\treturn cty.NilVal, err\n\t\t}\n\n\t\tif offset < 0 || length < 0 {\n\t\t\treturn cty.NilVal, fmt.Errorf(\"offset and length must be non-negative\")\n\t\t}\n\n\t\tif offset > len(*bufPtr) {\n\t\t\treturn cty.NilVal, fmt.Errorf(\n\t\t\t\t\"offset %d is greater than total buffer length %d\",\n\t\t\t\toffset, len(*bufPtr),\n\t\t\t)\n\t\t}\n\n\t\tend := offset + length\n\n\t\tif end > len(*bufPtr) {\n\t\t\treturn cty.NilVal, fmt.Errorf(\n\t\t\t\t\"offset %d + length %d is greater than total buffer length %d\",\n\t\t\t\toffset, length, len(*bufPtr),\n\t\t\t)\n\t\t}\n\n\t\treturn BytesVal((*bufPtr)[offset:end]), nil\n\t},\n})\n\nfunc BytesLen(buf cty.Value) (cty.Value, error) {\n\treturn BytesLenFunc.Call([]cty.Value{buf})\n}\n\nfunc BytesSlice(buf cty.Value, offset cty.Value, length cty.Value) (cty.Value, error) {\n\treturn BytesSliceFunc.Call([]cty.Value{buf, offset, length})\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/function/stdlib/collection.go",
    "content": "package stdlib\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/zclconf/go-cty/cty\"\n\t\"github.com/zclconf/go-cty/cty/function\"\n\t\"github.com/zclconf/go-cty/cty/gocty\"\n)\n\nvar HasIndexFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName:             \"collection\",\n\t\t\tType:             cty.DynamicPseudoType,\n\t\t\tAllowDynamicType: true,\n\t\t},\n\t\t{\n\t\t\tName:             \"key\",\n\t\t\tType:             cty.DynamicPseudoType,\n\t\t\tAllowDynamicType: true,\n\t\t},\n\t},\n\tType: func(args []cty.Value) (ret cty.Type, err error) {\n\t\tcollTy := args[0].Type()\n\t\tif !(collTy.IsTupleType() || collTy.IsListType() || collTy.IsMapType() || collTy == cty.DynamicPseudoType) {\n\t\t\treturn cty.NilType, fmt.Errorf(\"collection must be a list, a map or a tuple\")\n\t\t}\n\t\treturn cty.Bool, nil\n\t},\n\tImpl: func(args []cty.Value, retType cty.Type) (ret cty.Value, err error) {\n\t\treturn args[0].HasIndex(args[1]), nil\n\t},\n})\n\nvar IndexFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName: \"collection\",\n\t\t\tType: cty.DynamicPseudoType,\n\t\t},\n\t\t{\n\t\t\tName:             \"key\",\n\t\t\tType:             cty.DynamicPseudoType,\n\t\t\tAllowDynamicType: true,\n\t\t},\n\t},\n\tType: func(args []cty.Value) (ret cty.Type, err error) {\n\t\tcollTy := args[0].Type()\n\t\tkey := args[1]\n\t\tkeyTy := key.Type()\n\t\tswitch {\n\t\tcase collTy.IsTupleType():\n\t\t\tif keyTy != cty.Number && keyTy != cty.DynamicPseudoType {\n\t\t\t\treturn cty.NilType, fmt.Errorf(\"key for tuple must be number\")\n\t\t\t}\n\t\t\tif !key.IsKnown() {\n\t\t\t\treturn cty.DynamicPseudoType, nil\n\t\t\t}\n\t\t\tvar idx int\n\t\t\terr := gocty.FromCtyValue(key, &idx)\n\t\t\tif err != nil {\n\t\t\t\treturn cty.NilType, fmt.Errorf(\"invalid key for tuple: %s\", err)\n\t\t\t}\n\n\t\t\tetys := collTy.TupleElementTypes()\n\n\t\t\tif idx >= len(etys) || idx < 0 {\n\t\t\t\treturn cty.NilType, fmt.Errorf(\"key must be between 0 and %d inclusive\", len(etys))\n\t\t\t}\n\n\t\t\treturn etys[idx], nil\n\n\t\tcase collTy.IsListType():\n\t\t\tif keyTy != cty.Number && keyTy != cty.DynamicPseudoType {\n\t\t\t\treturn cty.NilType, fmt.Errorf(\"key for list must be number\")\n\t\t\t}\n\n\t\t\treturn collTy.ElementType(), nil\n\n\t\tcase collTy.IsMapType():\n\t\t\tif keyTy != cty.String && keyTy != cty.DynamicPseudoType {\n\t\t\t\treturn cty.NilType, fmt.Errorf(\"key for map must be string\")\n\t\t\t}\n\n\t\t\treturn collTy.ElementType(), nil\n\n\t\tdefault:\n\t\t\treturn cty.NilType, fmt.Errorf(\"collection must be a list, a map or a tuple\")\n\t\t}\n\t},\n\tImpl: func(args []cty.Value, retType cty.Type) (ret cty.Value, err error) {\n\t\thas, err := HasIndex(args[0], args[1])\n\t\tif err != nil {\n\t\t\treturn cty.NilVal, err\n\t\t}\n\t\tif has.False() { // safe because collection and key are guaranteed known here\n\t\t\treturn cty.NilVal, fmt.Errorf(\"invalid index\")\n\t\t}\n\n\t\treturn args[0].Index(args[1]), nil\n\t},\n})\n\nvar LengthFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName:             \"collection\",\n\t\t\tType:             cty.DynamicPseudoType,\n\t\t\tAllowDynamicType: true,\n\t\t},\n\t},\n\tType: func(args []cty.Value) (ret cty.Type, err error) {\n\t\tcollTy := args[0].Type()\n\t\tif !(collTy.IsTupleType() || collTy.IsListType() || collTy.IsMapType() || collTy.IsSetType() || collTy == cty.DynamicPseudoType) {\n\t\t\treturn cty.NilType, fmt.Errorf(\"collection must be a list, a map or a tuple\")\n\t\t}\n\t\treturn cty.Number, nil\n\t},\n\tImpl: func(args []cty.Value, retType cty.Type) (ret cty.Value, err error) {\n\t\treturn args[0].Length(), nil\n\t},\n})\n\n// HasIndex determines whether the given collection can be indexed with the\n// given key.\nfunc HasIndex(collection cty.Value, key cty.Value) (cty.Value, error) {\n\treturn HasIndexFunc.Call([]cty.Value{collection, key})\n}\n\n// Index returns an element from the given collection using the given key,\n// or returns an error if there is no element for the given key.\nfunc Index(collection cty.Value, key cty.Value) (cty.Value, error) {\n\treturn IndexFunc.Call([]cty.Value{collection, key})\n}\n\n// Length returns the number of elements in the given collection.\nfunc Length(collection cty.Value) (cty.Value, error) {\n\treturn LengthFunc.Call([]cty.Value{collection})\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/function/stdlib/csv.go",
    "content": "package stdlib\n\nimport (\n\t\"encoding/csv\"\n\t\"fmt\"\n\t\"io\"\n\t\"strings\"\n\n\t\"github.com/zclconf/go-cty/cty\"\n\t\"github.com/zclconf/go-cty/cty/function\"\n)\n\nvar CSVDecodeFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName: \"str\",\n\t\t\tType: cty.String,\n\t\t},\n\t},\n\tType: func(args []cty.Value) (cty.Type, error) {\n\t\tstr := args[0]\n\t\tif !str.IsKnown() {\n\t\t\treturn cty.DynamicPseudoType, nil\n\t\t}\n\n\t\tr := strings.NewReader(str.AsString())\n\t\tcr := csv.NewReader(r)\n\t\theaders, err := cr.Read()\n\t\tif err == io.EOF {\n\t\t\treturn cty.DynamicPseudoType, fmt.Errorf(\"missing header line\")\n\t\t}\n\t\tif err != nil {\n\t\t\treturn cty.DynamicPseudoType, err\n\t\t}\n\n\t\tatys := make(map[string]cty.Type, len(headers))\n\t\tfor _, name := range headers {\n\t\t\tif _, exists := atys[name]; exists {\n\t\t\t\treturn cty.DynamicPseudoType, fmt.Errorf(\"duplicate column name %q\", name)\n\t\t\t}\n\t\t\tatys[name] = cty.String\n\t\t}\n\t\treturn cty.List(cty.Object(atys)), nil\n\t},\n\tImpl: func(args []cty.Value, retType cty.Type) (cty.Value, error) {\n\t\tety := retType.ElementType()\n\t\tatys := ety.AttributeTypes()\n\t\tstr := args[0]\n\t\tr := strings.NewReader(str.AsString())\n\t\tcr := csv.NewReader(r)\n\t\tcr.FieldsPerRecord = len(atys)\n\n\t\t// Read the header row first, since that'll tell us which indices\n\t\t// map to which attribute names.\n\t\theaders, err := cr.Read()\n\t\tif err != nil {\n\t\t\treturn cty.DynamicVal, err\n\t\t}\n\n\t\tvar rows []cty.Value\n\t\tfor {\n\t\t\tcols, err := cr.Read()\n\t\t\tif err == io.EOF {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\treturn cty.DynamicVal, err\n\t\t\t}\n\n\t\t\tvals := make(map[string]cty.Value, len(cols))\n\t\t\tfor i, str := range cols {\n\t\t\t\tname := headers[i]\n\t\t\t\tvals[name] = cty.StringVal(str)\n\t\t\t}\n\t\t\trows = append(rows, cty.ObjectVal(vals))\n\t\t}\n\n\t\tif len(rows) == 0 {\n\t\t\treturn cty.ListValEmpty(ety), nil\n\t\t}\n\t\treturn cty.ListVal(rows), nil\n\t},\n})\n\n// CSVDecode parses the given CSV (RFC 4180) string and, if it is valid,\n// returns a list of objects representing the rows.\n//\n// The result is always a list of some object type. The first row of the\n// input is used to determine the object attributes, and subsequent rows\n// determine the values of those attributes.\nfunc CSVDecode(str cty.Value) (cty.Value, error) {\n\treturn CSVDecodeFunc.Call([]cty.Value{str})\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/function/stdlib/datetime.go",
    "content": "package stdlib\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"fmt\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/zclconf/go-cty/cty\"\n\t\"github.com/zclconf/go-cty/cty/function\"\n)\n\nvar FormatDateFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName: \"format\",\n\t\t\tType: cty.String,\n\t\t},\n\t\t{\n\t\t\tName: \"time\",\n\t\t\tType: cty.String,\n\t\t},\n\t},\n\tType: function.StaticReturnType(cty.String),\n\tImpl: func(args []cty.Value, retType cty.Type) (cty.Value, error) {\n\t\tformatStr := args[0].AsString()\n\t\ttimeStr := args[1].AsString()\n\t\tt, err := parseTimestamp(timeStr)\n\t\tif err != nil {\n\t\t\treturn cty.DynamicVal, function.NewArgError(1, err)\n\t\t}\n\n\t\tvar buf bytes.Buffer\n\t\tsc := bufio.NewScanner(strings.NewReader(formatStr))\n\t\tsc.Split(splitDateFormat)\n\t\tconst esc = '\\''\n\t\tfor sc.Scan() {\n\t\t\ttok := sc.Bytes()\n\n\t\t\t// The leading byte signals the token type\n\t\t\tswitch {\n\t\t\tcase tok[0] == esc:\n\t\t\t\tif tok[len(tok)-1] != esc || len(tok) == 1 {\n\t\t\t\t\treturn cty.DynamicVal, function.NewArgErrorf(0, \"unterminated literal '\")\n\t\t\t\t}\n\t\t\t\tif len(tok) == 2 {\n\t\t\t\t\t// Must be a single escaped quote, ''\n\t\t\t\t\tbuf.WriteByte(esc)\n\t\t\t\t} else {\n\t\t\t\t\t// The content (until a closing esc) is printed out verbatim\n\t\t\t\t\t// except that we must un-double any double-esc escapes in\n\t\t\t\t\t// the middle of the string.\n\t\t\t\t\traw := tok[1 : len(tok)-1]\n\t\t\t\t\tfor i := 0; i < len(raw); i++ {\n\t\t\t\t\t\tbuf.WriteByte(raw[i])\n\t\t\t\t\t\tif raw[i] == esc {\n\t\t\t\t\t\t\ti++ // skip the escaped quote\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\tcase startsDateFormatVerb(tok[0]):\n\t\t\t\tswitch tok[0] {\n\t\t\t\tcase 'Y':\n\t\t\t\t\ty := t.Year()\n\t\t\t\t\tswitch len(tok) {\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\tfmt.Fprintf(&buf, \"%02d\", y%100)\n\t\t\t\t\tcase 4:\n\t\t\t\t\t\tfmt.Fprintf(&buf, \"%04d\", y)\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn cty.DynamicVal, function.NewArgErrorf(0, \"invalid date format verb %q: year must either be \\\"YY\\\" or \\\"YYYY\\\"\", tok)\n\t\t\t\t\t}\n\t\t\t\tcase 'M':\n\t\t\t\t\tm := t.Month()\n\t\t\t\t\tswitch len(tok) {\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tfmt.Fprintf(&buf, \"%d\", m)\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\tfmt.Fprintf(&buf, \"%02d\", m)\n\t\t\t\t\tcase 3:\n\t\t\t\t\t\tbuf.WriteString(m.String()[:3])\n\t\t\t\t\tcase 4:\n\t\t\t\t\t\tbuf.WriteString(m.String())\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn cty.DynamicVal, function.NewArgErrorf(0, \"invalid date format verb %q: month must be \\\"M\\\", \\\"MM\\\", \\\"MMM\\\", or \\\"MMMM\\\"\", tok)\n\t\t\t\t\t}\n\t\t\t\tcase 'D':\n\t\t\t\t\td := t.Day()\n\t\t\t\t\tswitch len(tok) {\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tfmt.Fprintf(&buf, \"%d\", d)\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\tfmt.Fprintf(&buf, \"%02d\", d)\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn cty.DynamicVal, function.NewArgErrorf(0, \"invalid date format verb %q: day of month must either be \\\"D\\\" or \\\"DD\\\"\", tok)\n\t\t\t\t\t}\n\t\t\t\tcase 'E':\n\t\t\t\t\td := t.Weekday()\n\t\t\t\t\tswitch len(tok) {\n\t\t\t\t\tcase 3:\n\t\t\t\t\t\tbuf.WriteString(d.String()[:3])\n\t\t\t\t\tcase 4:\n\t\t\t\t\t\tbuf.WriteString(d.String())\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn cty.DynamicVal, function.NewArgErrorf(0, \"invalid date format verb %q: day of week must either be \\\"EEE\\\" or \\\"EEEE\\\"\", tok)\n\t\t\t\t\t}\n\t\t\t\tcase 'h':\n\t\t\t\t\th := t.Hour()\n\t\t\t\t\tswitch len(tok) {\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tfmt.Fprintf(&buf, \"%d\", h)\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\tfmt.Fprintf(&buf, \"%02d\", h)\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn cty.DynamicVal, function.NewArgErrorf(0, \"invalid date format verb %q: 24-hour must either be \\\"h\\\" or \\\"hh\\\"\", tok)\n\t\t\t\t\t}\n\t\t\t\tcase 'H':\n\t\t\t\t\th := t.Hour() % 12\n\t\t\t\t\tif h == 0 {\n\t\t\t\t\t\th = 12\n\t\t\t\t\t}\n\t\t\t\t\tswitch len(tok) {\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tfmt.Fprintf(&buf, \"%d\", h)\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\tfmt.Fprintf(&buf, \"%02d\", h)\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn cty.DynamicVal, function.NewArgErrorf(0, \"invalid date format verb %q: 12-hour must either be \\\"H\\\" or \\\"HH\\\"\", tok)\n\t\t\t\t\t}\n\t\t\t\tcase 'A', 'a':\n\t\t\t\t\tif len(tok) != 2 {\n\t\t\t\t\t\treturn cty.DynamicVal, function.NewArgErrorf(0, \"invalid date format verb %q: must be \\\"%s%s\\\"\", tok, tok[0:1], tok[0:1])\n\t\t\t\t\t}\n\t\t\t\t\tupper := tok[0] == 'A'\n\t\t\t\t\tswitch t.Hour() / 12 {\n\t\t\t\t\tcase 0:\n\t\t\t\t\t\tif upper {\n\t\t\t\t\t\t\tbuf.WriteString(\"AM\")\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tbuf.WriteString(\"am\")\n\t\t\t\t\t\t}\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tif upper {\n\t\t\t\t\t\t\tbuf.WriteString(\"PM\")\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tbuf.WriteString(\"pm\")\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\tcase 'm':\n\t\t\t\t\tm := t.Minute()\n\t\t\t\t\tswitch len(tok) {\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tfmt.Fprintf(&buf, \"%d\", m)\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\tfmt.Fprintf(&buf, \"%02d\", m)\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn cty.DynamicVal, function.NewArgErrorf(0, \"invalid date format verb %q: minute must either be \\\"m\\\" or \\\"mm\\\"\", tok)\n\t\t\t\t\t}\n\t\t\t\tcase 's':\n\t\t\t\t\ts := t.Second()\n\t\t\t\t\tswitch len(tok) {\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tfmt.Fprintf(&buf, \"%d\", s)\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\tfmt.Fprintf(&buf, \"%02d\", s)\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn cty.DynamicVal, function.NewArgErrorf(0, \"invalid date format verb %q: second must either be \\\"s\\\" or \\\"ss\\\"\", tok)\n\t\t\t\t\t}\n\t\t\t\tcase 'Z':\n\t\t\t\t\t// We'll just lean on Go's own formatter for this one, since\n\t\t\t\t\t// the necessary information is unexported.\n\t\t\t\t\tswitch len(tok) {\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tbuf.WriteString(t.Format(\"Z07:00\"))\n\t\t\t\t\tcase 3:\n\t\t\t\t\t\tstr := t.Format(\"-0700\")\n\t\t\t\t\t\tswitch str {\n\t\t\t\t\t\tcase \"+0000\":\n\t\t\t\t\t\t\tbuf.WriteString(\"UTC\")\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tbuf.WriteString(str)\n\t\t\t\t\t\t}\n\t\t\t\t\tcase 4:\n\t\t\t\t\t\tbuf.WriteString(t.Format(\"-0700\"))\n\t\t\t\t\tcase 5:\n\t\t\t\t\t\tbuf.WriteString(t.Format(\"-07:00\"))\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn cty.DynamicVal, function.NewArgErrorf(0, \"invalid date format verb %q: timezone must be Z, ZZZZ, or ZZZZZ\", tok)\n\t\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\treturn cty.DynamicVal, function.NewArgErrorf(0, \"invalid date format verb %q\", tok)\n\t\t\t\t}\n\n\t\t\tdefault:\n\t\t\t\t// Any other starting character indicates a literal sequence\n\t\t\t\tbuf.Write(tok)\n\t\t\t}\n\t\t}\n\n\t\treturn cty.StringVal(buf.String()), nil\n\t},\n})\n\n// FormatDate reformats a timestamp given in RFC3339 syntax into another time\n// syntax defined by a given format string.\n//\n// The format string uses letter mnemonics to represent portions of the\n// timestamp, with repetition signifying length variants of each portion.\n// Single quote characters ' can be used to quote sequences of literal letters\n// that should not be interpreted as formatting mnemonics.\n//\n// The full set of supported mnemonic sequences is listed below:\n//\n//     YY       Year modulo 100 zero-padded to two digits, like \"06\".\n//     YYYY     Four (or more) digit year, like \"2006\".\n//     M        Month number, like \"1\" for January.\n//     MM       Month number zero-padded to two digits, like \"01\".\n//     MMM      English month name abbreviated to three letters, like \"Jan\".\n//     MMMM     English month name unabbreviated, like \"January\".\n//     D        Day of month number, like \"2\".\n//     DD       Day of month number zero-padded to two digits, like \"02\".\n//     EEE      English day of week name abbreviated to three letters, like \"Mon\".\n//     EEEE     English day of week name unabbreviated, like \"Monday\".\n//     h        24-hour number, like \"2\".\n//     hh       24-hour number zero-padded to two digits, like \"02\".\n//     H        12-hour number, like \"2\".\n//     HH       12-hour number zero-padded to two digits, like \"02\".\n//     AA       Hour AM/PM marker in uppercase, like \"AM\".\n//     aa       Hour AM/PM marker in lowercase, like \"am\".\n//     m        Minute within hour, like \"5\".\n//     mm       Minute within hour zero-padded to two digits, like \"05\".\n//     s        Second within minute, like \"9\".\n//     ss       Second within minute zero-padded to two digits, like \"09\".\n//     ZZZZ     Timezone offset with just sign and digit, like \"-0800\".\n//     ZZZZZ    Timezone offset with colon separating hours and minutes, like \"-08:00\".\n//     Z        Like ZZZZZ but with a special case \"Z\" for UTC.\n//     ZZZ      Like ZZZZ but with a special case \"UTC\" for UTC.\n//\n// The format syntax is optimized mainly for generating machine-oriented\n// timestamps rather than human-oriented timestamps; the English language\n// portions of the output reflect the use of English names in a number of\n// machine-readable date formatting standards. For presentation to humans,\n// a locale-aware time formatter (not included in this package) is a better\n// choice.\n//\n// The format syntax is not compatible with that of any other language, but\n// is optimized so that patterns for common standard date formats can be\n// recognized quickly even by a reader unfamiliar with the format syntax.\nfunc FormatDate(format cty.Value, timestamp cty.Value) (cty.Value, error) {\n\treturn FormatDateFunc.Call([]cty.Value{format, timestamp})\n}\n\nfunc parseTimestamp(ts string) (time.Time, error) {\n\tt, err := time.Parse(time.RFC3339, ts)\n\tif err != nil {\n\t\tswitch err := err.(type) {\n\t\tcase *time.ParseError:\n\t\t\t// If err is s time.ParseError then its string representation is not\n\t\t\t// appropriate since it relies on details of Go's strange date format\n\t\t\t// representation, which a caller of our functions is not expected\n\t\t\t// to be familiar with.\n\t\t\t//\n\t\t\t// Therefore we do some light transformation to get a more suitable\n\t\t\t// error that should make more sense to our callers. These are\n\t\t\t// still not awesome error messages, but at least they refer to\n\t\t\t// the timestamp portions by name rather than by Go's example\n\t\t\t// values.\n\t\t\tif err.LayoutElem == \"\" && err.ValueElem == \"\" && err.Message != \"\" {\n\t\t\t\t// For some reason err.Message is populated with a \": \" prefix\n\t\t\t\t// by the time package.\n\t\t\t\treturn time.Time{}, fmt.Errorf(\"not a valid RFC3339 timestamp%s\", err.Message)\n\t\t\t}\n\t\t\tvar what string\n\t\t\tswitch err.LayoutElem {\n\t\t\tcase \"2006\":\n\t\t\t\twhat = \"year\"\n\t\t\tcase \"01\":\n\t\t\t\twhat = \"month\"\n\t\t\tcase \"02\":\n\t\t\t\twhat = \"day of month\"\n\t\t\tcase \"15\":\n\t\t\t\twhat = \"hour\"\n\t\t\tcase \"04\":\n\t\t\t\twhat = \"minute\"\n\t\t\tcase \"05\":\n\t\t\t\twhat = \"second\"\n\t\t\tcase \"Z07:00\":\n\t\t\t\twhat = \"UTC offset\"\n\t\t\tcase \"T\":\n\t\t\t\treturn time.Time{}, fmt.Errorf(\"not a valid RFC3339 timestamp: missing required time introducer 'T'\")\n\t\t\tcase \":\", \"-\":\n\t\t\t\tif err.ValueElem == \"\" {\n\t\t\t\t\treturn time.Time{}, fmt.Errorf(\"not a valid RFC3339 timestamp: end of string where %q is expected\", err.LayoutElem)\n\t\t\t\t} else {\n\t\t\t\t\treturn time.Time{}, fmt.Errorf(\"not a valid RFC3339 timestamp: found %q where %q is expected\", err.ValueElem, err.LayoutElem)\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\t// Should never get here, because time.RFC3339 includes only the\n\t\t\t\t// above portions, but since that might change in future we'll\n\t\t\t\t// be robust here.\n\t\t\t\twhat = \"timestamp segment\"\n\t\t\t}\n\t\t\tif err.ValueElem == \"\" {\n\t\t\t\treturn time.Time{}, fmt.Errorf(\"not a valid RFC3339 timestamp: end of string before %s\", what)\n\t\t\t} else {\n\t\t\t\treturn time.Time{}, fmt.Errorf(\"not a valid RFC3339 timestamp: cannot use %q as %s\", err.ValueElem, what)\n\t\t\t}\n\t\t}\n\t\treturn time.Time{}, err\n\t}\n\treturn t, nil\n}\n\n// splitDataFormat is a bufio.SplitFunc used to tokenize a date format.\nfunc splitDateFormat(data []byte, atEOF bool) (advance int, token []byte, err error) {\n\tif len(data) == 0 {\n\t\treturn 0, nil, nil\n\t}\n\n\tconst esc = '\\''\n\n\tswitch {\n\n\tcase data[0] == esc:\n\t\t// If we have another quote immediately after then this is a single\n\t\t// escaped escape.\n\t\tif len(data) > 1 && data[1] == esc {\n\t\t\treturn 2, data[:2], nil\n\t\t}\n\n\t\t// Beginning of quoted sequence, so we will seek forward until we find\n\t\t// the closing quote, ignoring escaped quotes along the way.\n\t\tfor i := 1; i < len(data); i++ {\n\t\t\tif data[i] == esc {\n\t\t\t\tif (i + 1) == len(data) {\n\t\t\t\t\t// We need at least one more byte to decide if this is an\n\t\t\t\t\t// escape or a terminator.\n\t\t\t\t\treturn 0, nil, nil\n\t\t\t\t}\n\t\t\t\tif data[i+1] == esc {\n\t\t\t\t\ti++ // doubled-up quotes are an escape sequence\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\t// We've found the closing quote\n\t\t\t\treturn i + 1, data[:i+1], nil\n\t\t\t}\n\t\t}\n\t\t// If we fall out here then we need more bytes to find the end,\n\t\t// unless we're already at the end with an unclosed quote.\n\t\tif atEOF {\n\t\t\treturn len(data), data, nil\n\t\t}\n\t\treturn 0, nil, nil\n\n\tcase startsDateFormatVerb(data[0]):\n\t\trep := data[0]\n\t\tfor i := 1; i < len(data); i++ {\n\t\t\tif data[i] != rep {\n\t\t\t\treturn i, data[:i], nil\n\t\t\t}\n\t\t}\n\t\tif atEOF {\n\t\t\treturn len(data), data, nil\n\t\t}\n\t\t// We need more data to decide if we've found the end\n\t\treturn 0, nil, nil\n\n\tdefault:\n\t\tfor i := 1; i < len(data); i++ {\n\t\t\tif data[i] == esc || startsDateFormatVerb(data[i]) {\n\t\t\t\treturn i, data[:i], nil\n\t\t\t}\n\t\t}\n\t\t// We might not actually be at the end of a literal sequence,\n\t\t// but that doesn't matter since we'll concat them back together\n\t\t// anyway.\n\t\treturn len(data), data, nil\n\t}\n}\n\nfunc startsDateFormatVerb(b byte) bool {\n\treturn (b >= 'a' && b <= 'z') || (b >= 'A' && b <= 'Z')\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/function/stdlib/doc.go",
    "content": "// Package stdlib is a collection of cty functions that are expected to be\n// generally useful, and are thus factored out into this shared library in\n// the hope that cty-using applications will have consistent behavior when\n// using these functions.\n//\n// See the parent package \"function\" for more information on the purpose\n// and usage of cty functions.\n//\n// This package contains both Go functions, which provide convenient access\n// to call the functions from Go code, and the Function objects themselves.\n// The latter follow the naming scheme of appending \"Func\" to the end of\n// the function name.\npackage stdlib\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/function/stdlib/format.go",
    "content": "package stdlib\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"math/big\"\n\t\"strings\"\n\n\t\"github.com/apparentlymart/go-textseg/textseg\"\n\n\t\"github.com/zclconf/go-cty/cty\"\n\t\"github.com/zclconf/go-cty/cty/convert\"\n\t\"github.com/zclconf/go-cty/cty/function\"\n\t\"github.com/zclconf/go-cty/cty/json\"\n)\n\n//go:generate ragel -Z format_fsm.rl\n//go:generate gofmt -w format_fsm.go\n\nvar FormatFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName: \"format\",\n\t\t\tType: cty.String,\n\t\t},\n\t},\n\tVarParam: &function.Parameter{\n\t\tName:      \"args\",\n\t\tType:      cty.DynamicPseudoType,\n\t\tAllowNull: true,\n\t},\n\tType: function.StaticReturnType(cty.String),\n\tImpl: func(args []cty.Value, retType cty.Type) (cty.Value, error) {\n\t\tfor _, arg := range args[1:] {\n\t\t\tif !arg.IsWhollyKnown() {\n\t\t\t\t// We require all nested values to be known because the only\n\t\t\t\t// thing we can do for a collection/structural type is print\n\t\t\t\t// it as JSON and that requires it to be wholly known.\n\t\t\t\treturn cty.UnknownVal(cty.String), nil\n\t\t\t}\n\t\t}\n\t\tstr, err := formatFSM(args[0].AsString(), args[1:])\n\t\treturn cty.StringVal(str), err\n\t},\n})\n\nvar FormatListFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName: \"format\",\n\t\t\tType: cty.String,\n\t\t},\n\t},\n\tVarParam: &function.Parameter{\n\t\tName:         \"args\",\n\t\tType:         cty.DynamicPseudoType,\n\t\tAllowNull:    true,\n\t\tAllowUnknown: true,\n\t},\n\tType: function.StaticReturnType(cty.List(cty.String)),\n\tImpl: func(args []cty.Value, retType cty.Type) (cty.Value, error) {\n\t\tfmtVal := args[0]\n\t\targs = args[1:]\n\n\t\tif len(args) == 0 {\n\t\t\t// With no arguments, this function is equivalent to Format, but\n\t\t\t// returning a single-element list result.\n\t\t\tresult, err := Format(fmtVal, args...)\n\t\t\treturn cty.ListVal([]cty.Value{result}), err\n\t\t}\n\n\t\tfmtStr := fmtVal.AsString()\n\n\t\t// Each of our arguments will be dealt with either as an iterator\n\t\t// or as a single value. Iterators are used for sequence-type values\n\t\t// (lists, sets, tuples) while everything else is treated as a\n\t\t// single value. The sequences we iterate over are required to be\n\t\t// all the same length.\n\t\titerLen := -1\n\t\tlenChooser := -1\n\t\titerators := make([]cty.ElementIterator, len(args))\n\t\tsingleVals := make([]cty.Value, len(args))\n\t\tfor i, arg := range args {\n\t\t\targTy := arg.Type()\n\t\t\tswitch {\n\t\t\tcase (argTy.IsListType() || argTy.IsSetType() || argTy.IsTupleType()) && !arg.IsNull():\n\t\t\t\tif !argTy.IsTupleType() && !arg.IsKnown() {\n\t\t\t\t\t// We can't iterate this one at all yet then, so we can't\n\t\t\t\t\t// yet produce a result.\n\t\t\t\t\treturn cty.UnknownVal(retType), nil\n\t\t\t\t}\n\t\t\t\tthisLen := arg.LengthInt()\n\t\t\t\tif iterLen == -1 {\n\t\t\t\t\titerLen = thisLen\n\t\t\t\t\tlenChooser = i\n\t\t\t\t} else {\n\t\t\t\t\tif thisLen != iterLen {\n\t\t\t\t\t\treturn cty.NullVal(cty.List(cty.String)), function.NewArgErrorf(\n\t\t\t\t\t\t\ti+1,\n\t\t\t\t\t\t\t\"argument %d has length %d, which is inconsistent with argument %d of length %d\",\n\t\t\t\t\t\t\ti+1, thisLen,\n\t\t\t\t\t\t\tlenChooser+1, iterLen,\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\titerators[i] = arg.ElementIterator()\n\t\t\tdefault:\n\t\t\t\tsingleVals[i] = arg\n\t\t\t}\n\t\t}\n\n\t\tif iterLen == 0 {\n\t\t\t// If our sequences are all empty then our result must be empty.\n\t\t\treturn cty.ListValEmpty(cty.String), nil\n\t\t}\n\n\t\tif iterLen == -1 {\n\t\t\t// If we didn't encounter any iterables at all then we're going\n\t\t\t// to just do one iteration with items from singleVals.\n\t\t\titerLen = 1\n\t\t}\n\n\t\tret := make([]cty.Value, 0, iterLen)\n\t\tfmtArgs := make([]cty.Value, len(iterators))\n\tResults:\n\t\tfor iterIdx := 0; iterIdx < iterLen; iterIdx++ {\n\n\t\t\t// Construct our arguments for a single format call\n\t\t\tfor i := range fmtArgs {\n\t\t\t\tswitch {\n\t\t\t\tcase iterators[i] != nil:\n\t\t\t\t\titerator := iterators[i]\n\t\t\t\t\titerator.Next()\n\t\t\t\t\t_, val := iterator.Element()\n\t\t\t\t\tfmtArgs[i] = val\n\t\t\t\tdefault:\n\t\t\t\t\tfmtArgs[i] = singleVals[i]\n\t\t\t\t}\n\n\t\t\t\t// If any of the arguments to this call would be unknown then\n\t\t\t\t// this particular result is unknown, but we'll keep going\n\t\t\t\t// to see if any other iterations can produce known values.\n\t\t\t\tif !fmtArgs[i].IsWhollyKnown() {\n\t\t\t\t\t// We require all nested values to be known because the only\n\t\t\t\t\t// thing we can do for a collection/structural type is print\n\t\t\t\t\t// it as JSON and that requires it to be wholly known.\n\t\t\t\t\tret = append(ret, cty.UnknownVal(cty.String))\n\t\t\t\t\tcontinue Results\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tstr, err := formatFSM(fmtStr, fmtArgs)\n\t\t\tif err != nil {\n\t\t\t\treturn cty.NullVal(cty.List(cty.String)), fmt.Errorf(\n\t\t\t\t\t\"error on format iteration %d: %s\", iterIdx, err,\n\t\t\t\t)\n\t\t\t}\n\n\t\t\tret = append(ret, cty.StringVal(str))\n\t\t}\n\n\t\treturn cty.ListVal(ret), nil\n\t},\n})\n\n// Format produces a string representation of zero or more values using a\n// format string similar to the \"printf\" function in C.\n//\n// It supports the following \"verbs\":\n//\n//     %%      Literal percent sign, consuming no value\n//     %v      A default formatting of the value based on type, as described below.\n//     %#v     JSON serialization of the value\n//     %t      Converts to boolean and then produces \"true\" or \"false\"\n//     %b      Converts to number, requires integer, produces binary representation\n//     %d      Converts to number, requires integer, produces decimal representation\n//     %o      Converts to number, requires integer, produces octal representation\n//     %x      Converts to number, requires integer, produces hexadecimal representation\n//             with lowercase letters\n//     %X      Like %x but with uppercase letters\n//     %e      Converts to number, produces scientific notation like -1.234456e+78\n//     %E      Like %e but with an uppercase \"E\" representing the exponent\n//     %f      Converts to number, produces decimal representation with fractional\n//             part but no exponent, like 123.456\n//     %g      %e for large exponents or %f otherwise\n//     %G      %E for large exponents or %f otherwise\n//     %s      Converts to string and produces the string's characters\n//     %q      Converts to string and produces JSON-quoted string representation,\n//             like %v.\n//\n// The default format selections made by %v are:\n//\n//     string  %s\n//     number  %g\n//     bool    %t\n//     other   %#v\n//\n// Null values produce the literal keyword \"null\" for %v and %#v, and produce\n// an error otherwise.\n//\n// Width is specified by an optional decimal number immediately preceding the\n// verb letter. If absent, the width is whatever is necessary to represent the\n// value. Precision is specified after the (optional) width by a period\n// followed by a decimal number. If no period is present, a default precision\n// is used. A period with no following number is invalid.\n// For examples:\n//\n//     %f     default width, default precision\n//     %9f    width 9, default precision\n//     %.2f   default width, precision 2\n//     %9.2f  width 9, precision 2\n//\n// Width and precision are measured in unicode characters (grapheme clusters).\n//\n// For most values, width is the minimum number of characters to output,\n// padding the formatted form with spaces if necessary.\n//\n// For strings, precision limits the length of the input to be formatted (not\n// the size of the output), truncating if necessary.\n//\n// For numbers, width sets the minimum width of the field and precision sets\n// the number of places after the decimal, if appropriate, except that for\n// %g/%G precision sets the total number of significant digits.\n//\n// The following additional symbols can be used immediately after the percent\n// introducer as flags:\n//\n//           (a space) leave a space where the sign would be if number is positive\n//     +     Include a sign for a number even if it is positive (numeric only)\n//     -     Pad with spaces on the left rather than the right\n//     0     Pad with zeros rather than spaces.\n//\n// Flag characters are ignored for verbs that do not support them.\n//\n// By default, % sequences consume successive arguments starting with the first.\n// Introducing a [n] sequence immediately before the verb letter, where n is a\n// decimal integer, explicitly chooses a particular value argument by its\n// one-based index. Subsequent calls without an explicit index will then\n// proceed with n+1, n+2, etc.\n//\n// An error is produced if the format string calls for an impossible conversion\n// or accesses more values than are given. An error is produced also for\n// an unsupported format verb.\nfunc Format(format cty.Value, vals ...cty.Value) (cty.Value, error) {\n\targs := make([]cty.Value, 0, len(vals)+1)\n\targs = append(args, format)\n\targs = append(args, vals...)\n\treturn FormatFunc.Call(args)\n}\n\n// FormatList applies the same formatting behavior as Format, but accepts\n// a mixture of list and non-list values as arguments. Any list arguments\n// passed must have the same length, which dictates the length of the\n// resulting list.\n//\n// Any non-list arguments are used repeatedly for each iteration over the\n// list arguments. The list arguments are iterated in order by key, so\n// corresponding items are formatted together.\nfunc FormatList(format cty.Value, vals ...cty.Value) (cty.Value, error) {\n\targs := make([]cty.Value, 0, len(vals)+1)\n\targs = append(args, format)\n\targs = append(args, vals...)\n\treturn FormatListFunc.Call(args)\n}\n\ntype formatVerb struct {\n\tRaw    string\n\tOffset int\n\n\tArgNum int\n\tMode   rune\n\n\tZero  bool\n\tSharp bool\n\tPlus  bool\n\tMinus bool\n\tSpace bool\n\n\tHasPrec bool\n\tPrec    int\n\n\tHasWidth bool\n\tWidth    int\n}\n\n// formatAppend is called by formatFSM (generated by format_fsm.rl) for each\n// formatting sequence that is encountered.\nfunc formatAppend(verb *formatVerb, buf *bytes.Buffer, args []cty.Value) error {\n\targIdx := verb.ArgNum - 1\n\tif argIdx >= len(args) {\n\t\treturn fmt.Errorf(\n\t\t\t\"not enough arguments for %q at %d: need index %d but have %d total\",\n\t\t\tverb.Raw, verb.Offset,\n\t\t\tverb.ArgNum, len(args),\n\t\t)\n\t}\n\targ := args[argIdx]\n\n\tif verb.Mode != 'v' && arg.IsNull() {\n\t\treturn fmt.Errorf(\"unsupported value for %q at %d: null value cannot be formatted\", verb.Raw, verb.Offset)\n\t}\n\n\t// Normalize to make some things easier for downstream formatters\n\tif !verb.HasWidth {\n\t\tverb.Width = -1\n\t}\n\tif !verb.HasPrec {\n\t\tverb.Prec = -1\n\t}\n\n\t// For our first pass we'll ensure the verb is supported and then fan\n\t// out to other functions based on what conversion is needed.\n\tswitch verb.Mode {\n\n\tcase 'v':\n\t\treturn formatAppendAsIs(verb, buf, arg)\n\n\tcase 't':\n\t\treturn formatAppendBool(verb, buf, arg)\n\n\tcase 'b', 'd', 'o', 'x', 'X', 'e', 'E', 'f', 'g', 'G':\n\t\treturn formatAppendNumber(verb, buf, arg)\n\n\tcase 's', 'q':\n\t\treturn formatAppendString(verb, buf, arg)\n\n\tdefault:\n\t\treturn fmt.Errorf(\"unsupported format verb %q in %q at offset %d\", verb.Mode, verb.Raw, verb.Offset)\n\t}\n}\n\nfunc formatAppendAsIs(verb *formatVerb, buf *bytes.Buffer, arg cty.Value) error {\n\n\tif !verb.Sharp && !arg.IsNull() {\n\t\t// Unless the caller overrode it with the sharp flag, we'll try some\n\t\t// specialized formats before we fall back on JSON.\n\t\tswitch arg.Type() {\n\t\tcase cty.String:\n\t\t\tfmted := arg.AsString()\n\t\t\tfmted = formatPadWidth(verb, fmted)\n\t\t\tbuf.WriteString(fmted)\n\t\t\treturn nil\n\t\tcase cty.Number:\n\t\t\tbf := arg.AsBigFloat()\n\t\t\tfmted := bf.Text('g', -1)\n\t\t\tfmted = formatPadWidth(verb, fmted)\n\t\t\tbuf.WriteString(fmted)\n\t\t\treturn nil\n\t\t}\n\t}\n\n\tjb, err := json.Marshal(arg, arg.Type())\n\tif err != nil {\n\t\treturn fmt.Errorf(\"unsupported value for %q at %d: %s\", verb.Raw, verb.Offset, err)\n\t}\n\tfmted := formatPadWidth(verb, string(jb))\n\tbuf.WriteString(fmted)\n\n\treturn nil\n}\n\nfunc formatAppendBool(verb *formatVerb, buf *bytes.Buffer, arg cty.Value) error {\n\tvar err error\n\targ, err = convert.Convert(arg, cty.Bool)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"unsupported value for %q at %d: %s\", verb.Raw, verb.Offset, err)\n\t}\n\n\tif arg.True() {\n\t\tbuf.WriteString(\"true\")\n\t} else {\n\t\tbuf.WriteString(\"false\")\n\t}\n\treturn nil\n}\n\nfunc formatAppendNumber(verb *formatVerb, buf *bytes.Buffer, arg cty.Value) error {\n\tvar err error\n\targ, err = convert.Convert(arg, cty.Number)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"unsupported value for %q at %d: %s\", verb.Raw, verb.Offset, err)\n\t}\n\n\tswitch verb.Mode {\n\tcase 'b', 'd', 'o', 'x', 'X':\n\t\treturn formatAppendInteger(verb, buf, arg)\n\tdefault:\n\t\tbf := arg.AsBigFloat()\n\n\t\t// For floats our format syntax is a subset of Go's, so it's\n\t\t// safe for us to just lean on the existing Go implementation.\n\t\tfmtstr := formatStripIndexSegment(verb.Raw)\n\t\tfmted := fmt.Sprintf(fmtstr, bf)\n\t\tbuf.WriteString(fmted)\n\t\treturn nil\n\t}\n}\n\nfunc formatAppendInteger(verb *formatVerb, buf *bytes.Buffer, arg cty.Value) error {\n\tbf := arg.AsBigFloat()\n\tbi, acc := bf.Int(nil)\n\tif acc != big.Exact {\n\t\treturn fmt.Errorf(\"unsupported value for %q at %d: an integer is required\", verb.Raw, verb.Offset)\n\t}\n\n\t// For integers our format syntax is a subset of Go's, so it's\n\t// safe for us to just lean on the existing Go implementation.\n\tfmtstr := formatStripIndexSegment(verb.Raw)\n\tfmted := fmt.Sprintf(fmtstr, bi)\n\tbuf.WriteString(fmted)\n\treturn nil\n}\n\nfunc formatAppendString(verb *formatVerb, buf *bytes.Buffer, arg cty.Value) error {\n\tvar err error\n\targ, err = convert.Convert(arg, cty.String)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"unsupported value for %q at %d: %s\", verb.Raw, verb.Offset, err)\n\t}\n\n\t// We _cannot_ directly use the Go fmt.Sprintf implementation for strings\n\t// because it measures widths and precisions in runes rather than grapheme\n\t// clusters.\n\n\tstr := arg.AsString()\n\tif verb.Prec > 0 {\n\t\tstrB := []byte(str)\n\t\tpos := 0\n\t\twanted := verb.Prec\n\t\tfor i := 0; i < wanted; i++ {\n\t\t\tnext := strB[pos:]\n\t\t\tif len(next) == 0 {\n\t\t\t\t// ran out of characters before we hit our max width\n\t\t\t\tbreak\n\t\t\t}\n\t\t\td, _, _ := textseg.ScanGraphemeClusters(strB[pos:], true)\n\t\t\tpos += d\n\t\t}\n\t\tstr = str[:pos]\n\t}\n\n\tswitch verb.Mode {\n\tcase 's':\n\t\tfmted := formatPadWidth(verb, str)\n\t\tbuf.WriteString(fmted)\n\tcase 'q':\n\t\tjb, err := json.Marshal(cty.StringVal(str), cty.String)\n\t\tif err != nil {\n\t\t\t// Should never happen, since we know this is a known, non-null string\n\t\t\tpanic(fmt.Errorf(\"failed to marshal %#v as JSON: %s\", arg, err))\n\t\t}\n\t\tfmted := formatPadWidth(verb, string(jb))\n\t\tbuf.WriteString(fmted)\n\tdefault:\n\t\t// Should never happen because formatAppend should've already validated\n\t\tpanic(fmt.Errorf(\"invalid string formatting mode %q\", verb.Mode))\n\t}\n\treturn nil\n}\n\nfunc formatPadWidth(verb *formatVerb, fmted string) string {\n\tif verb.Width < 0 {\n\t\treturn fmted\n\t}\n\n\t// Safe to ignore errors because ScanGraphemeClusters cannot produce errors\n\tgivenLen, _ := textseg.TokenCount([]byte(fmted), textseg.ScanGraphemeClusters)\n\twantLen := verb.Width\n\tif givenLen >= wantLen {\n\t\treturn fmted\n\t}\n\n\tpadLen := wantLen - givenLen\n\tpadChar := \" \"\n\tif verb.Zero {\n\t\tpadChar = \"0\"\n\t}\n\tpads := strings.Repeat(padChar, padLen)\n\n\tif verb.Minus {\n\t\treturn fmted + pads\n\t}\n\treturn pads + fmted\n}\n\n// formatStripIndexSegment strips out any [nnn] segment present in a verb\n// string so that we can pass it through to Go's fmt.Sprintf with a single\n// argument. This is used in cases where we're just leaning on Go's formatter\n// because it's a superset of ours.\nfunc formatStripIndexSegment(rawVerb string) string {\n\t// We assume the string has already been validated here, since we should\n\t// only be using this function with strings that were accepted by our\n\t// scanner in formatFSM.\n\tstart := strings.Index(rawVerb, \"[\")\n\tend := strings.Index(rawVerb, \"]\")\n\tif start == -1 || end == -1 {\n\t\treturn rawVerb\n\t}\n\n\treturn rawVerb[:start] + rawVerb[end+1:]\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/function/stdlib/format_fsm.go",
    "content": "// line 1 \"format_fsm.rl\"\n// This file is generated from format_fsm.rl. DO NOT EDIT.\n\n// line 5 \"format_fsm.rl\"\n\npackage stdlib\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"unicode/utf8\"\n\n\t\"github.com/zclconf/go-cty/cty\"\n\t\"github.com/zclconf/go-cty/cty/function\"\n)\n\n// line 21 \"format_fsm.go\"\nvar _formatfsm_actions []byte = []byte{\n\t0, 1, 0, 1, 1, 1, 2, 1, 4,\n\t1, 5, 1, 6, 1, 7, 1, 8,\n\t1, 9, 1, 10, 1, 11, 1, 14,\n\t1, 16, 1, 17, 1, 18, 2, 3,\n\t4, 2, 12, 10, 2, 12, 16, 2,\n\t12, 18, 2, 13, 14, 2, 15, 10,\n\t2, 15, 18,\n}\n\nvar _formatfsm_key_offsets []byte = []byte{\n\t0, 0, 14, 27, 34, 36, 39, 43,\n\t51,\n}\n\nvar _formatfsm_trans_keys []byte = []byte{\n\t32, 35, 37, 43, 45, 46, 48, 91,\n\t49, 57, 65, 90, 97, 122, 32, 35,\n\t43, 45, 46, 48, 91, 49, 57, 65,\n\t90, 97, 122, 91, 48, 57, 65, 90,\n\t97, 122, 49, 57, 93, 48, 57, 65,\n\t90, 97, 122, 46, 91, 48, 57, 65,\n\t90, 97, 122, 37,\n}\n\nvar _formatfsm_single_lengths []byte = []byte{\n\t0, 8, 7, 1, 0, 1, 0, 2,\n\t1,\n}\n\nvar _formatfsm_range_lengths []byte = []byte{\n\t0, 3, 3, 3, 1, 1, 2, 3,\n\t0,\n}\n\nvar _formatfsm_index_offsets []byte = []byte{\n\t0, 0, 12, 23, 28, 30, 33, 36,\n\t42,\n}\n\nvar _formatfsm_indicies []byte = []byte{\n\t1, 2, 3, 4, 5, 6, 7, 10,\n\t8, 9, 9, 0, 1, 2, 4, 5,\n\t6, 7, 10, 8, 9, 9, 0, 13,\n\t11, 12, 12, 0, 14, 0, 15, 14,\n\t0, 9, 9, 0, 16, 19, 17, 18,\n\t18, 0, 20, 3,\n}\n\nvar _formatfsm_trans_targs []byte = []byte{\n\t0, 2, 2, 8, 2, 2, 3, 2,\n\t7, 8, 4, 3, 8, 4, 5, 6,\n\t3, 7, 8, 4, 1,\n}\n\nvar _formatfsm_trans_actions []byte = []byte{\n\t7, 17, 9, 3, 15, 13, 25, 11,\n\t43, 29, 19, 27, 49, 46, 21, 0,\n\t37, 23, 40, 34, 1,\n}\n\nvar _formatfsm_eof_actions []byte = []byte{\n\t0, 31, 31, 31, 31, 31, 31, 31,\n\t5,\n}\n\nconst formatfsm_start int = 8\nconst formatfsm_first_final int = 8\nconst formatfsm_error int = 0\n\nconst formatfsm_en_main int = 8\n\n// line 20 \"format_fsm.rl\"\n\nfunc formatFSM(format string, a []cty.Value) (string, error) {\n\tvar buf bytes.Buffer\n\tdata := format\n\tnextArg := 1 // arg numbers are 1-based\n\tvar verb formatVerb\n\thighestArgIdx := 0 // zero means \"none\", since arg numbers are 1-based\n\n\t// line 159 \"format_fsm.rl\"\n\n\t// Ragel state\n\tp := 0          // \"Pointer\" into data\n\tpe := len(data) // End-of-data \"pointer\"\n\tcs := 0         // current state (will be initialized by ragel-generated code)\n\tts := 0\n\tte := 0\n\teof := pe\n\n\t// Keep Go compiler happy even if generated code doesn't use these\n\t_ = ts\n\t_ = te\n\t_ = eof\n\n\t// line 123 \"format_fsm.go\"\n\t{\n\t\tcs = formatfsm_start\n\t}\n\n\t// line 128 \"format_fsm.go\"\n\t{\n\t\tvar _klen int\n\t\tvar _trans int\n\t\tvar _acts int\n\t\tvar _nacts uint\n\t\tvar _keys int\n\t\tif p == pe {\n\t\t\tgoto _test_eof\n\t\t}\n\t\tif cs == 0 {\n\t\t\tgoto _out\n\t\t}\n\t_resume:\n\t\t_keys = int(_formatfsm_key_offsets[cs])\n\t\t_trans = int(_formatfsm_index_offsets[cs])\n\n\t\t_klen = int(_formatfsm_single_lengths[cs])\n\t\tif _klen > 0 {\n\t\t\t_lower := int(_keys)\n\t\t\tvar _mid int\n\t\t\t_upper := int(_keys + _klen - 1)\n\t\t\tfor {\n\t\t\t\tif _upper < _lower {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\t_mid = _lower + ((_upper - _lower) >> 1)\n\t\t\t\tswitch {\n\t\t\t\tcase data[p] < _formatfsm_trans_keys[_mid]:\n\t\t\t\t\t_upper = _mid - 1\n\t\t\t\tcase data[p] > _formatfsm_trans_keys[_mid]:\n\t\t\t\t\t_lower = _mid + 1\n\t\t\t\tdefault:\n\t\t\t\t\t_trans += int(_mid - int(_keys))\n\t\t\t\t\tgoto _match\n\t\t\t\t}\n\t\t\t}\n\t\t\t_keys += _klen\n\t\t\t_trans += _klen\n\t\t}\n\n\t\t_klen = int(_formatfsm_range_lengths[cs])\n\t\tif _klen > 0 {\n\t\t\t_lower := int(_keys)\n\t\t\tvar _mid int\n\t\t\t_upper := int(_keys + (_klen << 1) - 2)\n\t\t\tfor {\n\t\t\t\tif _upper < _lower {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\t_mid = _lower + (((_upper - _lower) >> 1) & ^1)\n\t\t\t\tswitch {\n\t\t\t\tcase data[p] < _formatfsm_trans_keys[_mid]:\n\t\t\t\t\t_upper = _mid - 2\n\t\t\t\tcase data[p] > _formatfsm_trans_keys[_mid+1]:\n\t\t\t\t\t_lower = _mid + 2\n\t\t\t\tdefault:\n\t\t\t\t\t_trans += int((_mid - int(_keys)) >> 1)\n\t\t\t\t\tgoto _match\n\t\t\t\t}\n\t\t\t}\n\t\t\t_trans += _klen\n\t\t}\n\n\t_match:\n\t\t_trans = int(_formatfsm_indicies[_trans])\n\t\tcs = int(_formatfsm_trans_targs[_trans])\n\n\t\tif _formatfsm_trans_actions[_trans] == 0 {\n\t\t\tgoto _again\n\t\t}\n\n\t\t_acts = int(_formatfsm_trans_actions[_trans])\n\t\t_nacts = uint(_formatfsm_actions[_acts])\n\t\t_acts++\n\t\tfor ; _nacts > 0; _nacts-- {\n\t\t\t_acts++\n\t\t\tswitch _formatfsm_actions[_acts-1] {\n\t\t\tcase 0:\n\t\t\t\t// line 31 \"format_fsm.rl\"\n\n\t\t\t\tverb = formatVerb{\n\t\t\t\t\tArgNum: nextArg,\n\t\t\t\t\tPrec:   -1,\n\t\t\t\t\tWidth:  -1,\n\t\t\t\t}\n\t\t\t\tts = p\n\n\t\t\tcase 1:\n\t\t\t\t// line 40 \"format_fsm.rl\"\n\n\t\t\t\tbuf.WriteByte(data[p])\n\n\t\t\tcase 4:\n\t\t\t\t// line 51 \"format_fsm.rl\"\n\n\t\t\t\t// We'll try to slurp a whole UTF-8 sequence here, to give the user\n\t\t\t\t// better feedback.\n\t\t\t\tr, _ := utf8.DecodeRuneInString(data[p:])\n\t\t\t\treturn buf.String(), fmt.Errorf(\"unrecognized format character %q at offset %d\", r, p)\n\n\t\t\tcase 5:\n\t\t\t\t// line 58 \"format_fsm.rl\"\n\n\t\t\t\tverb.Sharp = true\n\n\t\t\tcase 6:\n\t\t\t\t// line 61 \"format_fsm.rl\"\n\n\t\t\t\tverb.Zero = true\n\n\t\t\tcase 7:\n\t\t\t\t// line 64 \"format_fsm.rl\"\n\n\t\t\t\tverb.Minus = true\n\n\t\t\tcase 8:\n\t\t\t\t// line 67 \"format_fsm.rl\"\n\n\t\t\t\tverb.Plus = true\n\n\t\t\tcase 9:\n\t\t\t\t// line 70 \"format_fsm.rl\"\n\n\t\t\t\tverb.Space = true\n\n\t\t\tcase 10:\n\t\t\t\t// line 74 \"format_fsm.rl\"\n\n\t\t\t\tverb.ArgNum = 0\n\n\t\t\tcase 11:\n\t\t\t\t// line 77 \"format_fsm.rl\"\n\n\t\t\t\tverb.ArgNum = (10 * verb.ArgNum) + (int(data[p]) - '0')\n\n\t\t\tcase 12:\n\t\t\t\t// line 81 \"format_fsm.rl\"\n\n\t\t\t\tverb.HasWidth = true\n\n\t\t\tcase 13:\n\t\t\t\t// line 84 \"format_fsm.rl\"\n\n\t\t\t\tverb.Width = 0\n\n\t\t\tcase 14:\n\t\t\t\t// line 87 \"format_fsm.rl\"\n\n\t\t\t\tverb.Width = (10 * verb.Width) + (int(data[p]) - '0')\n\n\t\t\tcase 15:\n\t\t\t\t// line 91 \"format_fsm.rl\"\n\n\t\t\t\tverb.HasPrec = true\n\n\t\t\tcase 16:\n\t\t\t\t// line 94 \"format_fsm.rl\"\n\n\t\t\t\tverb.Prec = 0\n\n\t\t\tcase 17:\n\t\t\t\t// line 97 \"format_fsm.rl\"\n\n\t\t\t\tverb.Prec = (10 * verb.Prec) + (int(data[p]) - '0')\n\n\t\t\tcase 18:\n\t\t\t\t// line 101 \"format_fsm.rl\"\n\n\t\t\t\tverb.Mode = rune(data[p])\n\t\t\t\tte = p + 1\n\t\t\t\tverb.Raw = data[ts:te]\n\t\t\t\tverb.Offset = ts\n\n\t\t\t\tif verb.ArgNum > highestArgIdx {\n\t\t\t\t\thighestArgIdx = verb.ArgNum\n\t\t\t\t}\n\n\t\t\t\terr := formatAppend(&verb, &buf, a)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn buf.String(), err\n\t\t\t\t}\n\t\t\t\tnextArg = verb.ArgNum + 1\n\n\t\t\t\t// line 330 \"format_fsm.go\"\n\t\t\t}\n\t\t}\n\n\t_again:\n\t\tif cs == 0 {\n\t\t\tgoto _out\n\t\t}\n\t\tp++\n\t\tif p != pe {\n\t\t\tgoto _resume\n\t\t}\n\t_test_eof:\n\t\t{\n\t\t}\n\t\tif p == eof {\n\t\t\t__acts := _formatfsm_eof_actions[cs]\n\t\t\t__nacts := uint(_formatfsm_actions[__acts])\n\t\t\t__acts++\n\t\t\tfor ; __nacts > 0; __nacts-- {\n\t\t\t\t__acts++\n\t\t\t\tswitch _formatfsm_actions[__acts-1] {\n\t\t\t\tcase 2:\n\t\t\t\t\t// line 44 \"format_fsm.rl\"\n\n\t\t\t\tcase 3:\n\t\t\t\t\t// line 47 \"format_fsm.rl\"\n\n\t\t\t\t\treturn buf.String(), fmt.Errorf(\"invalid format string starting at offset %d\", p)\n\n\t\t\t\tcase 4:\n\t\t\t\t\t// line 51 \"format_fsm.rl\"\n\n\t\t\t\t\t// We'll try to slurp a whole UTF-8 sequence here, to give the user\n\t\t\t\t\t// better feedback.\n\t\t\t\t\tr, _ := utf8.DecodeRuneInString(data[p:])\n\t\t\t\t\treturn buf.String(), fmt.Errorf(\"unrecognized format character %q at offset %d\", r, p)\n\n\t\t\t\t\t// line 369 \"format_fsm.go\"\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t_out:\n\t\t{\n\t\t}\n\t}\n\n\t// line 177 \"format_fsm.rl\"\n\n\t// If we fall out here without being in a final state then we've\n\t// encountered something that the scanner can't match, which should\n\t// be impossible (the scanner matches all bytes _somehow_) but we'll\n\t// flag it anyway rather than just losing data from the end.\n\tif cs < formatfsm_first_final {\n\t\treturn buf.String(), fmt.Errorf(\"extraneous characters beginning at offset %d\", p)\n\t}\n\n\tif highestArgIdx < len(a) {\n\t\t// Extraneous args are an error, to more easily detect mistakes\n\t\tfirstBad := highestArgIdx + 1\n\t\tif highestArgIdx == 0 {\n\t\t\t// Custom error message for this case\n\t\t\treturn buf.String(), function.NewArgErrorf(firstBad, \"too many arguments; no verbs in format string\")\n\t\t}\n\t\treturn buf.String(), function.NewArgErrorf(firstBad, \"too many arguments; only %d used by format string\", highestArgIdx)\n\t}\n\n\treturn buf.String(), nil\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/function/stdlib/general.go",
    "content": "package stdlib\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/zclconf/go-cty/cty\"\n\t\"github.com/zclconf/go-cty/cty/convert\"\n\t\"github.com/zclconf/go-cty/cty/function\"\n)\n\nvar EqualFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName:             \"a\",\n\t\t\tType:             cty.DynamicPseudoType,\n\t\t\tAllowUnknown:     true,\n\t\t\tAllowDynamicType: true,\n\t\t\tAllowNull:        true,\n\t\t},\n\t\t{\n\t\t\tName:             \"b\",\n\t\t\tType:             cty.DynamicPseudoType,\n\t\t\tAllowUnknown:     true,\n\t\t\tAllowDynamicType: true,\n\t\t\tAllowNull:        true,\n\t\t},\n\t},\n\tType: function.StaticReturnType(cty.Bool),\n\tImpl: func(args []cty.Value, retType cty.Type) (ret cty.Value, err error) {\n\t\treturn args[0].Equals(args[1]), nil\n\t},\n})\n\nvar NotEqualFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName:             \"a\",\n\t\t\tType:             cty.DynamicPseudoType,\n\t\t\tAllowUnknown:     true,\n\t\t\tAllowDynamicType: true,\n\t\t\tAllowNull:        true,\n\t\t},\n\t\t{\n\t\t\tName:             \"b\",\n\t\t\tType:             cty.DynamicPseudoType,\n\t\t\tAllowUnknown:     true,\n\t\t\tAllowDynamicType: true,\n\t\t\tAllowNull:        true,\n\t\t},\n\t},\n\tType: function.StaticReturnType(cty.Bool),\n\tImpl: func(args []cty.Value, retType cty.Type) (ret cty.Value, err error) {\n\t\treturn args[0].Equals(args[1]).Not(), nil\n\t},\n})\n\nvar CoalesceFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{},\n\tVarParam: &function.Parameter{\n\t\tName:             \"vals\",\n\t\tType:             cty.DynamicPseudoType,\n\t\tAllowUnknown:     true,\n\t\tAllowDynamicType: true,\n\t\tAllowNull:        true,\n\t},\n\tType: func(args []cty.Value) (ret cty.Type, err error) {\n\t\targTypes := make([]cty.Type, len(args))\n\t\tfor i, val := range args {\n\t\t\targTypes[i] = val.Type()\n\t\t}\n\t\tretType, _ := convert.UnifyUnsafe(argTypes)\n\t\tif retType == cty.NilType {\n\t\t\treturn cty.NilType, fmt.Errorf(\"all arguments must have the same type\")\n\t\t}\n\t\treturn retType, nil\n\t},\n\tImpl: func(args []cty.Value, retType cty.Type) (ret cty.Value, err error) {\n\t\tfor _, argVal := range args {\n\t\t\tif !argVal.IsKnown() {\n\t\t\t\treturn cty.UnknownVal(retType), nil\n\t\t\t}\n\t\t\tif argVal.IsNull() {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\treturn convert.Convert(argVal, retType)\n\t\t}\n\t\treturn cty.NilVal, fmt.Errorf(\"no non-null arguments\")\n\t},\n})\n\n// Equal determines whether the two given values are equal, returning a\n// bool value.\nfunc Equal(a cty.Value, b cty.Value) (cty.Value, error) {\n\treturn EqualFunc.Call([]cty.Value{a, b})\n}\n\n// NotEqual is the opposite of Equal.\nfunc NotEqual(a cty.Value, b cty.Value) (cty.Value, error) {\n\treturn NotEqualFunc.Call([]cty.Value{a, b})\n}\n\n// Coalesce returns the first of the given arguments that is not null. If\n// all arguments are null, an error is produced.\nfunc Coalesce(vals ...cty.Value) (cty.Value, error) {\n\treturn CoalesceFunc.Call(vals)\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/function/stdlib/json.go",
    "content": "package stdlib\n\nimport (\n\t\"github.com/zclconf/go-cty/cty\"\n\t\"github.com/zclconf/go-cty/cty/function\"\n\t\"github.com/zclconf/go-cty/cty/json\"\n)\n\nvar JSONEncodeFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName:             \"val\",\n\t\t\tType:             cty.DynamicPseudoType,\n\t\t\tAllowDynamicType: true,\n\t\t},\n\t},\n\tType: function.StaticReturnType(cty.String),\n\tImpl: func(args []cty.Value, retType cty.Type) (cty.Value, error) {\n\t\tval := args[0]\n\t\tif !val.IsWhollyKnown() {\n\t\t\t// We can't serialize unknowns, so if the value is unknown or\n\t\t\t// contains any _nested_ unknowns then our result must be\n\t\t\t// unknown.\n\t\t\treturn cty.UnknownVal(retType), nil\n\t\t}\n\n\t\tbuf, err := json.Marshal(val, val.Type())\n\t\tif err != nil {\n\t\t\treturn cty.NilVal, err\n\t\t}\n\n\t\treturn cty.StringVal(string(buf)), nil\n\t},\n})\n\nvar JSONDecodeFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName: \"str\",\n\t\t\tType: cty.String,\n\t\t},\n\t},\n\tType: func(args []cty.Value) (cty.Type, error) {\n\t\tstr := args[0]\n\t\tif !str.IsKnown() {\n\t\t\treturn cty.DynamicPseudoType, nil\n\t\t}\n\n\t\tbuf := []byte(str.AsString())\n\t\treturn json.ImpliedType(buf)\n\t},\n\tImpl: func(args []cty.Value, retType cty.Type) (cty.Value, error) {\n\t\tbuf := []byte(args[0].AsString())\n\t\treturn json.Unmarshal(buf, retType)\n\t},\n})\n\n// JSONEncode returns a JSON serialization of the given value.\nfunc JSONEncode(val cty.Value) (cty.Value, error) {\n\treturn JSONEncodeFunc.Call([]cty.Value{val})\n}\n\n// JSONDecode parses the given JSON string and, if it is valid, returns the\n// value it represents.\n//\n// Note that applying JSONDecode to the result of JSONEncode may not produce\n// an identically-typed result, since JSON encoding is lossy for cty Types.\n// The resulting value will consist only of primitive types, object types, and\n// tuple types.\nfunc JSONDecode(str cty.Value) (cty.Value, error) {\n\treturn JSONDecodeFunc.Call([]cty.Value{str})\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/function/stdlib/number.go",
    "content": "package stdlib\n\nimport (\n\t\"fmt\"\n\t\"math/big\"\n\n\t\"github.com/zclconf/go-cty/cty\"\n\t\"github.com/zclconf/go-cty/cty/function\"\n)\n\nvar AbsoluteFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName:             \"num\",\n\t\t\tType:             cty.Number,\n\t\t\tAllowDynamicType: true,\n\t\t},\n\t},\n\tType: function.StaticReturnType(cty.Number),\n\tImpl: func(args []cty.Value, retType cty.Type) (cty.Value, error) {\n\t\treturn args[0].Absolute(), nil\n\t},\n})\n\nvar AddFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName:             \"a\",\n\t\t\tType:             cty.Number,\n\t\t\tAllowDynamicType: true,\n\t\t},\n\t\t{\n\t\t\tName:             \"b\",\n\t\t\tType:             cty.Number,\n\t\t\tAllowDynamicType: true,\n\t\t},\n\t},\n\tType: function.StaticReturnType(cty.Number),\n\tImpl: func(args []cty.Value, retType cty.Type) (ret cty.Value, err error) {\n\t\t// big.Float.Add can panic if the input values are opposing infinities,\n\t\t// so we must catch that here in order to remain within\n\t\t// the cty Function abstraction.\n\t\tdefer func() {\n\t\t\tif r := recover(); r != nil {\n\t\t\t\tif _, ok := r.(big.ErrNaN); ok {\n\t\t\t\t\tret = cty.NilVal\n\t\t\t\t\terr = fmt.Errorf(\"can't compute sum of opposing infinities\")\n\t\t\t\t} else {\n\t\t\t\t\t// not a panic we recognize\n\t\t\t\t\tpanic(r)\n\t\t\t\t}\n\t\t\t}\n\t\t}()\n\t\treturn args[0].Add(args[1]), nil\n\t},\n})\n\nvar SubtractFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName:             \"a\",\n\t\t\tType:             cty.Number,\n\t\t\tAllowDynamicType: true,\n\t\t},\n\t\t{\n\t\t\tName:             \"b\",\n\t\t\tType:             cty.Number,\n\t\t\tAllowDynamicType: true,\n\t\t},\n\t},\n\tType: function.StaticReturnType(cty.Number),\n\tImpl: func(args []cty.Value, retType cty.Type) (ret cty.Value, err error) {\n\t\t// big.Float.Sub can panic if the input values are infinities,\n\t\t// so we must catch that here in order to remain within\n\t\t// the cty Function abstraction.\n\t\tdefer func() {\n\t\t\tif r := recover(); r != nil {\n\t\t\t\tif _, ok := r.(big.ErrNaN); ok {\n\t\t\t\t\tret = cty.NilVal\n\t\t\t\t\terr = fmt.Errorf(\"can't subtract infinity from itself\")\n\t\t\t\t} else {\n\t\t\t\t\t// not a panic we recognize\n\t\t\t\t\tpanic(r)\n\t\t\t\t}\n\t\t\t}\n\t\t}()\n\t\treturn args[0].Subtract(args[1]), nil\n\t},\n})\n\nvar MultiplyFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName:             \"a\",\n\t\t\tType:             cty.Number,\n\t\t\tAllowDynamicType: true,\n\t\t},\n\t\t{\n\t\t\tName:             \"b\",\n\t\t\tType:             cty.Number,\n\t\t\tAllowDynamicType: true,\n\t\t},\n\t},\n\tType: function.StaticReturnType(cty.Number),\n\tImpl: func(args []cty.Value, retType cty.Type) (ret cty.Value, err error) {\n\t\t// big.Float.Mul can panic if the input values are both zero or both\n\t\t// infinity, so we must catch that here in order to remain within\n\t\t// the cty Function abstraction.\n\t\tdefer func() {\n\t\t\tif r := recover(); r != nil {\n\t\t\t\tif _, ok := r.(big.ErrNaN); ok {\n\t\t\t\t\tret = cty.NilVal\n\t\t\t\t\terr = fmt.Errorf(\"can't multiply zero by infinity\")\n\t\t\t\t} else {\n\t\t\t\t\t// not a panic we recognize\n\t\t\t\t\tpanic(r)\n\t\t\t\t}\n\t\t\t}\n\t\t}()\n\n\t\treturn args[0].Multiply(args[1]), nil\n\t},\n})\n\nvar DivideFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName:             \"a\",\n\t\t\tType:             cty.Number,\n\t\t\tAllowDynamicType: true,\n\t\t},\n\t\t{\n\t\t\tName:             \"b\",\n\t\t\tType:             cty.Number,\n\t\t\tAllowDynamicType: true,\n\t\t},\n\t},\n\tType: function.StaticReturnType(cty.Number),\n\tImpl: func(args []cty.Value, retType cty.Type) (ret cty.Value, err error) {\n\t\t// big.Float.Quo can panic if the input values are both zero or both\n\t\t// infinity, so we must catch that here in order to remain within\n\t\t// the cty Function abstraction.\n\t\tdefer func() {\n\t\t\tif r := recover(); r != nil {\n\t\t\t\tif _, ok := r.(big.ErrNaN); ok {\n\t\t\t\t\tret = cty.NilVal\n\t\t\t\t\terr = fmt.Errorf(\"can't divide zero by zero or infinity by infinity\")\n\t\t\t\t} else {\n\t\t\t\t\t// not a panic we recognize\n\t\t\t\t\tpanic(r)\n\t\t\t\t}\n\t\t\t}\n\t\t}()\n\n\t\treturn args[0].Divide(args[1]), nil\n\t},\n})\n\nvar ModuloFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName:             \"a\",\n\t\t\tType:             cty.Number,\n\t\t\tAllowDynamicType: true,\n\t\t},\n\t\t{\n\t\t\tName:             \"b\",\n\t\t\tType:             cty.Number,\n\t\t\tAllowDynamicType: true,\n\t\t},\n\t},\n\tType: function.StaticReturnType(cty.Number),\n\tImpl: func(args []cty.Value, retType cty.Type) (ret cty.Value, err error) {\n\t\t// big.Float.Mul can panic if the input values are both zero or both\n\t\t// infinity, so we must catch that here in order to remain within\n\t\t// the cty Function abstraction.\n\t\tdefer func() {\n\t\t\tif r := recover(); r != nil {\n\t\t\t\tif _, ok := r.(big.ErrNaN); ok {\n\t\t\t\t\tret = cty.NilVal\n\t\t\t\t\terr = fmt.Errorf(\"can't use modulo with zero and infinity\")\n\t\t\t\t} else {\n\t\t\t\t\t// not a panic we recognize\n\t\t\t\t\tpanic(r)\n\t\t\t\t}\n\t\t\t}\n\t\t}()\n\n\t\treturn args[0].Modulo(args[1]), nil\n\t},\n})\n\nvar GreaterThanFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName:             \"a\",\n\t\t\tType:             cty.Number,\n\t\t\tAllowDynamicType: true,\n\t\t},\n\t\t{\n\t\t\tName:             \"b\",\n\t\t\tType:             cty.Number,\n\t\t\tAllowDynamicType: true,\n\t\t},\n\t},\n\tType: function.StaticReturnType(cty.Bool),\n\tImpl: func(args []cty.Value, retType cty.Type) (ret cty.Value, err error) {\n\t\treturn args[0].GreaterThan(args[1]), nil\n\t},\n})\n\nvar GreaterThanOrEqualToFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName:             \"a\",\n\t\t\tType:             cty.Number,\n\t\t\tAllowDynamicType: true,\n\t\t},\n\t\t{\n\t\t\tName:             \"b\",\n\t\t\tType:             cty.Number,\n\t\t\tAllowDynamicType: true,\n\t\t},\n\t},\n\tType: function.StaticReturnType(cty.Bool),\n\tImpl: func(args []cty.Value, retType cty.Type) (ret cty.Value, err error) {\n\t\treturn args[0].GreaterThanOrEqualTo(args[1]), nil\n\t},\n})\n\nvar LessThanFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName:             \"a\",\n\t\t\tType:             cty.Number,\n\t\t\tAllowDynamicType: true,\n\t\t},\n\t\t{\n\t\t\tName:             \"b\",\n\t\t\tType:             cty.Number,\n\t\t\tAllowDynamicType: true,\n\t\t},\n\t},\n\tType: function.StaticReturnType(cty.Bool),\n\tImpl: func(args []cty.Value, retType cty.Type) (ret cty.Value, err error) {\n\t\treturn args[0].LessThan(args[1]), nil\n\t},\n})\n\nvar LessThanOrEqualToFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName:             \"a\",\n\t\t\tType:             cty.Number,\n\t\t\tAllowDynamicType: true,\n\t\t},\n\t\t{\n\t\t\tName:             \"b\",\n\t\t\tType:             cty.Number,\n\t\t\tAllowDynamicType: true,\n\t\t},\n\t},\n\tType: function.StaticReturnType(cty.Bool),\n\tImpl: func(args []cty.Value, retType cty.Type) (ret cty.Value, err error) {\n\t\treturn args[0].LessThanOrEqualTo(args[1]), nil\n\t},\n})\n\nvar NegateFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName:             \"num\",\n\t\t\tType:             cty.Number,\n\t\t\tAllowDynamicType: true,\n\t\t},\n\t},\n\tType: function.StaticReturnType(cty.Number),\n\tImpl: func(args []cty.Value, retType cty.Type) (cty.Value, error) {\n\t\treturn args[0].Negate(), nil\n\t},\n})\n\nvar MinFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{},\n\tVarParam: &function.Parameter{\n\t\tName:             \"numbers\",\n\t\tType:             cty.Number,\n\t\tAllowDynamicType: true,\n\t},\n\tType: function.StaticReturnType(cty.Number),\n\tImpl: func(args []cty.Value, retType cty.Type) (cty.Value, error) {\n\t\tif len(args) == 0 {\n\t\t\treturn cty.NilVal, fmt.Errorf(\"must pass at least one number\")\n\t\t}\n\n\t\tmin := cty.PositiveInfinity\n\t\tfor _, num := range args {\n\t\t\tif num.LessThan(min).True() {\n\t\t\t\tmin = num\n\t\t\t}\n\t\t}\n\n\t\treturn min, nil\n\t},\n})\n\nvar MaxFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{},\n\tVarParam: &function.Parameter{\n\t\tName:             \"numbers\",\n\t\tType:             cty.Number,\n\t\tAllowDynamicType: true,\n\t},\n\tType: function.StaticReturnType(cty.Number),\n\tImpl: func(args []cty.Value, retType cty.Type) (cty.Value, error) {\n\t\tif len(args) == 0 {\n\t\t\treturn cty.NilVal, fmt.Errorf(\"must pass at least one number\")\n\t\t}\n\n\t\tmax := cty.NegativeInfinity\n\t\tfor _, num := range args {\n\t\t\tif num.GreaterThan(max).True() {\n\t\t\t\tmax = num\n\t\t\t}\n\t\t}\n\n\t\treturn max, nil\n\t},\n})\n\nvar IntFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName:             \"num\",\n\t\t\tType:             cty.Number,\n\t\t\tAllowDynamicType: true,\n\t\t},\n\t},\n\tType: function.StaticReturnType(cty.Number),\n\tImpl: func(args []cty.Value, retType cty.Type) (cty.Value, error) {\n\t\tbf := args[0].AsBigFloat()\n\t\tif bf.IsInt() {\n\t\t\treturn args[0], nil\n\t\t}\n\t\tbi, _ := bf.Int(nil)\n\t\tbf = (&big.Float{}).SetInt(bi)\n\t\treturn cty.NumberVal(bf), nil\n\t},\n})\n\n// Absolute returns the magnitude of the given number, without its sign.\n// That is, it turns negative values into positive values.\nfunc Absolute(num cty.Value) (cty.Value, error) {\n\treturn AbsoluteFunc.Call([]cty.Value{num})\n}\n\n// Add returns the sum of the two given numbers.\nfunc Add(a cty.Value, b cty.Value) (cty.Value, error) {\n\treturn AddFunc.Call([]cty.Value{a, b})\n}\n\n// Subtract returns the difference between the two given numbers.\nfunc Subtract(a cty.Value, b cty.Value) (cty.Value, error) {\n\treturn SubtractFunc.Call([]cty.Value{a, b})\n}\n\n// Multiply returns the product of the two given numbers.\nfunc Multiply(a cty.Value, b cty.Value) (cty.Value, error) {\n\treturn MultiplyFunc.Call([]cty.Value{a, b})\n}\n\n// Divide returns a divided by b, where both a and b are numbers.\nfunc Divide(a cty.Value, b cty.Value) (cty.Value, error) {\n\treturn DivideFunc.Call([]cty.Value{a, b})\n}\n\n// Negate returns the given number multipled by -1.\nfunc Negate(num cty.Value) (cty.Value, error) {\n\treturn NegateFunc.Call([]cty.Value{num})\n}\n\n// LessThan returns true if a is less than b.\nfunc LessThan(a cty.Value, b cty.Value) (cty.Value, error) {\n\treturn LessThanFunc.Call([]cty.Value{a, b})\n}\n\n// LessThanOrEqualTo returns true if a is less than b.\nfunc LessThanOrEqualTo(a cty.Value, b cty.Value) (cty.Value, error) {\n\treturn LessThanOrEqualToFunc.Call([]cty.Value{a, b})\n}\n\n// GreaterThan returns true if a is less than b.\nfunc GreaterThan(a cty.Value, b cty.Value) (cty.Value, error) {\n\treturn GreaterThanFunc.Call([]cty.Value{a, b})\n}\n\n// GreaterThanOrEqualTo returns true if a is less than b.\nfunc GreaterThanOrEqualTo(a cty.Value, b cty.Value) (cty.Value, error) {\n\treturn GreaterThanOrEqualToFunc.Call([]cty.Value{a, b})\n}\n\n// Modulo returns the remainder of a divided by b under integer division,\n// where both a and b are numbers.\nfunc Modulo(a cty.Value, b cty.Value) (cty.Value, error) {\n\treturn ModuloFunc.Call([]cty.Value{a, b})\n}\n\n// Min returns the minimum number from the given numbers.\nfunc Min(numbers ...cty.Value) (cty.Value, error) {\n\treturn MinFunc.Call(numbers)\n}\n\n// Max returns the maximum number from the given numbers.\nfunc Max(numbers ...cty.Value) (cty.Value, error) {\n\treturn MaxFunc.Call(numbers)\n}\n\n// Int removes the fractional component of the given number returning an\n// integer representing the whole number component, rounding towards zero.\n// For example, -1.5 becomes -1.\n//\n// If an infinity is passed to Int, an error is returned.\nfunc Int(num cty.Value) (cty.Value, error) {\n\tif num == cty.PositiveInfinity || num == cty.NegativeInfinity {\n\t\treturn cty.NilVal, fmt.Errorf(\"can't truncate infinity to an integer\")\n\t}\n\treturn IntFunc.Call([]cty.Value{num})\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/function/stdlib/regexp.go",
    "content": "package stdlib\n\nimport (\n\t\"fmt\"\n\t\"regexp\"\n\tresyntax \"regexp/syntax\"\n\n\t\"github.com/zclconf/go-cty/cty\"\n\t\"github.com/zclconf/go-cty/cty/function\"\n)\n\nvar RegexFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName: \"pattern\",\n\t\t\tType: cty.String,\n\t\t},\n\t\t{\n\t\t\tName: \"string\",\n\t\t\tType: cty.String,\n\t\t},\n\t},\n\tType: func(args []cty.Value) (cty.Type, error) {\n\t\tif !args[0].IsKnown() {\n\t\t\t// We can't predict our type without seeing our pattern\n\t\t\treturn cty.DynamicPseudoType, nil\n\t\t}\n\n\t\tretTy, err := regexPatternResultType(args[0].AsString())\n\t\tif err != nil {\n\t\t\terr = function.NewArgError(0, err)\n\t\t}\n\t\treturn retTy, err\n\t},\n\tImpl: func(args []cty.Value, retType cty.Type) (cty.Value, error) {\n\t\tif retType == cty.DynamicPseudoType {\n\t\t\treturn cty.DynamicVal, nil\n\t\t}\n\n\t\tre, err := regexp.Compile(args[0].AsString())\n\t\tif err != nil {\n\t\t\t// Should never happen, since we checked this in the Type function above.\n\t\t\treturn cty.NilVal, function.NewArgErrorf(0, \"error parsing pattern: %s\", err)\n\t\t}\n\t\tstr := args[1].AsString()\n\n\t\tcaptureIdxs := re.FindStringSubmatchIndex(str)\n\t\tif captureIdxs == nil {\n\t\t\treturn cty.NilVal, fmt.Errorf(\"pattern did not match any part of the given string\")\n\t\t}\n\n\t\treturn regexPatternResult(re, str, captureIdxs, retType), nil\n\t},\n})\n\nvar RegexAllFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName: \"pattern\",\n\t\t\tType: cty.String,\n\t\t},\n\t\t{\n\t\t\tName: \"string\",\n\t\t\tType: cty.String,\n\t\t},\n\t},\n\tType: func(args []cty.Value) (cty.Type, error) {\n\t\tif !args[0].IsKnown() {\n\t\t\t// We can't predict our type without seeing our pattern,\n\t\t\t// but we do know it'll always be a list of something.\n\t\t\treturn cty.List(cty.DynamicPseudoType), nil\n\t\t}\n\n\t\tretTy, err := regexPatternResultType(args[0].AsString())\n\t\tif err != nil {\n\t\t\terr = function.NewArgError(0, err)\n\t\t}\n\t\treturn cty.List(retTy), err\n\t},\n\tImpl: func(args []cty.Value, retType cty.Type) (cty.Value, error) {\n\t\tety := retType.ElementType()\n\t\tif ety == cty.DynamicPseudoType {\n\t\t\treturn cty.DynamicVal, nil\n\t\t}\n\n\t\tre, err := regexp.Compile(args[0].AsString())\n\t\tif err != nil {\n\t\t\t// Should never happen, since we checked this in the Type function above.\n\t\t\treturn cty.NilVal, function.NewArgErrorf(0, \"error parsing pattern: %s\", err)\n\t\t}\n\t\tstr := args[1].AsString()\n\n\t\tcaptureIdxsEach := re.FindAllStringSubmatchIndex(str, -1)\n\t\tif len(captureIdxsEach) == 0 {\n\t\t\treturn cty.ListValEmpty(ety), nil\n\t\t}\n\n\t\telems := make([]cty.Value, len(captureIdxsEach))\n\t\tfor i, captureIdxs := range captureIdxsEach {\n\t\t\telems[i] = regexPatternResult(re, str, captureIdxs, ety)\n\t\t}\n\t\treturn cty.ListVal(elems), nil\n\t},\n})\n\n// Regex is a function that extracts one or more substrings from a given\n// string by applying a regular expression pattern, describing the first\n// match.\n//\n// The return type depends on the composition of the capture groups (if any)\n// in the pattern:\n//\n//   - If there are no capture groups at all, the result is a single string\n//     representing the entire matched pattern.\n//   - If all of the capture groups are named, the result is an object whose\n//     keys are the named groups and whose values are their sub-matches, or\n//     null if a particular sub-group was inside another group that didn't\n//     match.\n//   - If none of the capture groups are named, the result is a tuple whose\n//     elements are the sub-groups in order and whose values are their\n//     sub-matches, or null if a particular sub-group was inside another group\n//     that didn't match.\n//   - It is invalid to use both named and un-named capture groups together in\n//     the same pattern.\n//\n// If the pattern doesn't match, this function returns an error. To test for\n// a match, call RegexAll and check if the length of the result is greater\n// than zero.\nfunc Regex(pattern, str cty.Value) (cty.Value, error) {\n\treturn RegexFunc.Call([]cty.Value{pattern, str})\n}\n\n// RegexAll is similar to Regex but it finds all of the non-overlapping matches\n// in the given string and returns a list of them.\n//\n// The result type is always a list, whose element type is deduced from the\n// pattern in the same way as the return type for Regex is decided.\n//\n// If the pattern doesn't match at all, this function returns an empty list.\nfunc RegexAll(pattern, str cty.Value) (cty.Value, error) {\n\treturn RegexAllFunc.Call([]cty.Value{pattern, str})\n}\n\n// regexPatternResultType parses the given regular expression pattern and\n// returns the structural type that would be returned to represent its\n// capture groups.\n//\n// Returns an error if parsing fails or if the pattern uses a mixture of\n// named and unnamed capture groups, which is not permitted.\nfunc regexPatternResultType(pattern string) (cty.Type, error) {\n\tre, rawErr := regexp.Compile(pattern)\n\tswitch err := rawErr.(type) {\n\tcase *resyntax.Error:\n\t\treturn cty.NilType, fmt.Errorf(\"invalid regexp pattern: %s in %s\", err.Code, err.Expr)\n\tcase error:\n\t\t// Should never happen, since all regexp compile errors should\n\t\t// be resyntax.Error, but just in case...\n\t\treturn cty.NilType, fmt.Errorf(\"error parsing pattern: %s\", err)\n\t}\n\n\tallNames := re.SubexpNames()[1:]\n\tvar names []string\n\tunnamed := 0\n\tfor _, name := range allNames {\n\t\tif name == \"\" {\n\t\t\tunnamed++\n\t\t} else {\n\t\t\tif names == nil {\n\t\t\t\tnames = make([]string, 0, len(allNames))\n\t\t\t}\n\t\t\tnames = append(names, name)\n\t\t}\n\t}\n\tswitch {\n\tcase unnamed == 0 && len(names) == 0:\n\t\t// If there are no capture groups at all then we'll return just a\n\t\t// single string for the whole match.\n\t\treturn cty.String, nil\n\tcase unnamed > 0 && len(names) > 0:\n\t\treturn cty.NilType, fmt.Errorf(\"invalid regexp pattern: cannot mix both named and unnamed capture groups\")\n\tcase unnamed > 0:\n\t\t// For unnamed captures, we return a tuple of them all in order.\n\t\tetys := make([]cty.Type, unnamed)\n\t\tfor i := range etys {\n\t\t\tetys[i] = cty.String\n\t\t}\n\t\treturn cty.Tuple(etys), nil\n\tdefault:\n\t\t// For named captures, we return an object using the capture names\n\t\t// as keys.\n\t\tatys := make(map[string]cty.Type, len(names))\n\t\tfor _, name := range names {\n\t\t\tatys[name] = cty.String\n\t\t}\n\t\treturn cty.Object(atys), nil\n\t}\n}\n\nfunc regexPatternResult(re *regexp.Regexp, str string, captureIdxs []int, retType cty.Type) cty.Value {\n\tswitch {\n\tcase retType == cty.String:\n\t\tstart, end := captureIdxs[0], captureIdxs[1]\n\t\treturn cty.StringVal(str[start:end])\n\tcase retType.IsTupleType():\n\t\tcaptureIdxs = captureIdxs[2:] // index 0 is the whole pattern span, which we ignore by skipping one pair\n\t\tvals := make([]cty.Value, len(captureIdxs)/2)\n\t\tfor i := range vals {\n\t\t\tstart, end := captureIdxs[i*2], captureIdxs[i*2+1]\n\t\t\tif start < 0 || end < 0 {\n\t\t\t\tvals[i] = cty.NullVal(cty.String) // Did not match anything because containing group didn't match\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tvals[i] = cty.StringVal(str[start:end])\n\t\t}\n\t\treturn cty.TupleVal(vals)\n\tcase retType.IsObjectType():\n\t\tcaptureIdxs = captureIdxs[2:] // index 0 is the whole pattern span, which we ignore by skipping one pair\n\t\tvals := make(map[string]cty.Value, len(captureIdxs)/2)\n\t\tnames := re.SubexpNames()[1:]\n\t\tfor i, name := range names {\n\t\t\tstart, end := captureIdxs[i*2], captureIdxs[i*2+1]\n\t\t\tif start < 0 || end < 0 {\n\t\t\t\tvals[name] = cty.NullVal(cty.String) // Did not match anything because containing group didn't match\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tvals[name] = cty.StringVal(str[start:end])\n\t\t}\n\t\treturn cty.ObjectVal(vals)\n\tdefault:\n\t\t// Should never happen\n\t\tpanic(fmt.Sprintf(\"invalid return type %#v\", retType))\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/function/stdlib/sequence.go",
    "content": "package stdlib\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/zclconf/go-cty/cty\"\n\t\"github.com/zclconf/go-cty/cty/convert\"\n\t\"github.com/zclconf/go-cty/cty/function\"\n)\n\nvar ConcatFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{},\n\tVarParam: &function.Parameter{\n\t\tName: \"seqs\",\n\t\tType: cty.DynamicPseudoType,\n\t},\n\tType: func(args []cty.Value) (ret cty.Type, err error) {\n\t\tif len(args) == 0 {\n\t\t\treturn cty.NilType, fmt.Errorf(\"at least one argument is required\")\n\t\t}\n\n\t\tif args[0].Type().IsListType() {\n\t\t\t// Possibly we're going to return a list, if all of our other\n\t\t\t// args are also lists and we can find a common element type.\n\t\t\ttys := make([]cty.Type, len(args))\n\t\t\tfor i, val := range args {\n\t\t\t\tty := val.Type()\n\t\t\t\tif !ty.IsListType() {\n\t\t\t\t\ttys = nil\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\ttys[i] = ty\n\t\t\t}\n\n\t\t\tif tys != nil {\n\t\t\t\tcommonType, _ := convert.UnifyUnsafe(tys)\n\t\t\t\tif commonType != cty.NilType {\n\t\t\t\t\treturn commonType, nil\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tetys := make([]cty.Type, 0, len(args))\n\t\tfor i, val := range args {\n\t\t\tety := val.Type()\n\t\t\tswitch {\n\t\t\tcase ety.IsTupleType():\n\t\t\t\tetys = append(etys, ety.TupleElementTypes()...)\n\t\t\tcase ety.IsListType():\n\t\t\t\tif !val.IsKnown() {\n\t\t\t\t\t// We need to know the list to count its elements to\n\t\t\t\t\t// build our tuple type, so any concat of an unknown\n\t\t\t\t\t// list can't be typed yet.\n\t\t\t\t\treturn cty.DynamicPseudoType, nil\n\t\t\t\t}\n\n\t\t\t\tl := val.LengthInt()\n\t\t\t\tsubEty := ety.ElementType()\n\t\t\t\tfor j := 0; j < l; j++ {\n\t\t\t\t\tetys = append(etys, subEty)\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\treturn cty.NilType, function.NewArgErrorf(\n\t\t\t\t\ti, \"all arguments must be lists or tuples; got %s\",\n\t\t\t\t\tety.FriendlyName(),\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\treturn cty.Tuple(etys), nil\n\t},\n\tImpl: func(args []cty.Value, retType cty.Type) (ret cty.Value, err error) {\n\t\tswitch {\n\t\tcase retType.IsListType():\n\t\t\t// If retType is a list type then we know that all of the\n\t\t\t// given values will be lists and that they will either be of\n\t\t\t// retType or of something we can convert to retType.\n\t\t\tvals := make([]cty.Value, 0, len(args))\n\t\t\tfor i, list := range args {\n\t\t\t\tlist, err = convert.Convert(list, retType)\n\t\t\t\tif err != nil {\n\t\t\t\t\t// Conversion might fail because we used UnifyUnsafe\n\t\t\t\t\t// to choose our return type.\n\t\t\t\t\treturn cty.NilVal, function.NewArgError(i, err)\n\t\t\t\t}\n\n\t\t\t\tit := list.ElementIterator()\n\t\t\t\tfor it.Next() {\n\t\t\t\t\t_, v := it.Element()\n\t\t\t\t\tvals = append(vals, v)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif len(vals) == 0 {\n\t\t\t\treturn cty.ListValEmpty(retType.ElementType()), nil\n\t\t\t}\n\n\t\t\treturn cty.ListVal(vals), nil\n\t\tcase retType.IsTupleType():\n\t\t\t// If retType is a tuple type then we could have a mixture of\n\t\t\t// lists and tuples but we know they all have known values\n\t\t\t// (because our params don't AllowUnknown) and we know that\n\t\t\t// concatenating them all together will produce a tuple of\n\t\t\t// retType because of the work we did in the Type function above.\n\t\t\tvals := make([]cty.Value, 0, len(args))\n\n\t\t\tfor _, seq := range args {\n\t\t\t\t// Both lists and tuples support ElementIterator, so this is easy.\n\t\t\t\tit := seq.ElementIterator()\n\t\t\t\tfor it.Next() {\n\t\t\t\t\t_, v := it.Element()\n\t\t\t\t\tvals = append(vals, v)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn cty.TupleVal(vals), nil\n\t\tdefault:\n\t\t\t// should never happen if Type is working correctly above\n\t\t\tpanic(\"unsupported return type\")\n\t\t}\n\t},\n})\n\nvar RangeFunc = function.New(&function.Spec{\n\tVarParam: &function.Parameter{\n\t\tName: \"params\",\n\t\tType: cty.Number,\n\t},\n\tType: function.StaticReturnType(cty.List(cty.Number)),\n\tImpl: func(args []cty.Value, retType cty.Type) (ret cty.Value, err error) {\n\t\tvar start, end, step cty.Value\n\t\tswitch len(args) {\n\t\tcase 1:\n\t\t\tif args[0].LessThan(cty.Zero).True() {\n\t\t\t\tstart, end, step = cty.Zero, args[0], cty.NumberIntVal(-1)\n\t\t\t} else {\n\t\t\t\tstart, end, step = cty.Zero, args[0], cty.NumberIntVal(1)\n\t\t\t}\n\t\tcase 2:\n\t\t\tif args[1].LessThan(args[0]).True() {\n\t\t\t\tstart, end, step = args[0], args[1], cty.NumberIntVal(-1)\n\t\t\t} else {\n\t\t\t\tstart, end, step = args[0], args[1], cty.NumberIntVal(1)\n\t\t\t}\n\t\tcase 3:\n\t\t\tstart, end, step = args[0], args[1], args[2]\n\t\tdefault:\n\t\t\treturn cty.NilVal, fmt.Errorf(\"must have one, two, or three arguments\")\n\t\t}\n\n\t\tvar vals []cty.Value\n\n\t\tif step == cty.Zero {\n\t\t\treturn cty.NilVal, function.NewArgErrorf(2, \"step must not be zero\")\n\t\t}\n\t\tdown := step.LessThan(cty.Zero).True()\n\n\t\tif down {\n\t\t\tif end.GreaterThan(start).True() {\n\t\t\t\treturn cty.NilVal, function.NewArgErrorf(1, \"end must be less than start when step is negative\")\n\t\t\t}\n\t\t} else {\n\t\t\tif end.LessThan(start).True() {\n\t\t\t\treturn cty.NilVal, function.NewArgErrorf(1, \"end must be greater than start when step is positive\")\n\t\t\t}\n\t\t}\n\n\t\tnum := start\n\t\tfor {\n\t\t\tif down {\n\t\t\t\tif num.LessThanOrEqualTo(end).True() {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif num.GreaterThanOrEqualTo(end).True() {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif len(vals) >= 1024 {\n\t\t\t\t// Artificial limit to prevent bad arguments from consuming huge amounts of memory\n\t\t\t\treturn cty.NilVal, fmt.Errorf(\"more than 1024 values were generated; either decrease the difference between start and end or use a smaller step\")\n\t\t\t}\n\t\t\tvals = append(vals, num)\n\t\t\tnum = num.Add(step)\n\t\t}\n\t\tif len(vals) == 0 {\n\t\t\treturn cty.ListValEmpty(cty.Number), nil\n\t\t}\n\t\treturn cty.ListVal(vals), nil\n\t},\n})\n\n// Concat takes one or more sequences (lists or tuples) and returns the single\n// sequence that results from concatenating them together in order.\n//\n// If all of the given sequences are lists of the same element type then the\n// result is a list of that type. Otherwise, the result is a of a tuple type\n// constructed from the given sequence types.\nfunc Concat(seqs ...cty.Value) (cty.Value, error) {\n\treturn ConcatFunc.Call(seqs)\n}\n\n// Range creates a list of numbers by starting from the given starting value,\n// then adding the given step value until the result is greater than or\n// equal to the given stopping value. Each intermediate result becomes an\n// element in the resulting list.\n//\n// When all three parameters are set, the order is (start, end, step). If\n// only two parameters are set, they are the start and end respectively and\n// step defaults to 1. If only one argument is set, it gives the end value\n// with start defaulting to 0 and step defaulting to 1.\n//\n// Because the resulting list must be fully buffered in memory, there is an\n// artificial cap of 1024 elements, after which this function will return\n// an error to avoid consuming unbounded amounts of memory. The Range function\n// is primarily intended for creating small lists of indices to iterate over,\n// so there should be no reason to generate huge lists with it.\nfunc Range(params ...cty.Value) (cty.Value, error) {\n\treturn RangeFunc.Call(params)\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/function/stdlib/set.go",
    "content": "package stdlib\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/zclconf/go-cty/cty/convert\"\n\n\t\"github.com/zclconf/go-cty/cty\"\n\t\"github.com/zclconf/go-cty/cty/function\"\n)\n\nvar SetHasElementFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName:             \"set\",\n\t\t\tType:             cty.Set(cty.DynamicPseudoType),\n\t\t\tAllowDynamicType: true,\n\t\t},\n\t\t{\n\t\t\tName:             \"elem\",\n\t\t\tType:             cty.DynamicPseudoType,\n\t\t\tAllowDynamicType: true,\n\t\t},\n\t},\n\tType: function.StaticReturnType(cty.Bool),\n\tImpl: func(args []cty.Value, retType cty.Type) (ret cty.Value, err error) {\n\t\treturn args[0].HasElement(args[1]), nil\n\t},\n})\n\nvar SetUnionFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName:             \"first_set\",\n\t\t\tType:             cty.Set(cty.DynamicPseudoType),\n\t\t\tAllowDynamicType: true,\n\t\t},\n\t},\n\tVarParam: &function.Parameter{\n\t\tName:             \"other_sets\",\n\t\tType:             cty.Set(cty.DynamicPseudoType),\n\t\tAllowDynamicType: true,\n\t},\n\tType: setOperationReturnType,\n\tImpl: setOperationImpl(func(s1, s2 cty.ValueSet) cty.ValueSet {\n\t\treturn s1.Union(s2)\n\t}),\n})\n\nvar SetIntersectionFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName:             \"first_set\",\n\t\t\tType:             cty.Set(cty.DynamicPseudoType),\n\t\t\tAllowDynamicType: true,\n\t\t},\n\t},\n\tVarParam: &function.Parameter{\n\t\tName:             \"other_sets\",\n\t\tType:             cty.Set(cty.DynamicPseudoType),\n\t\tAllowDynamicType: true,\n\t},\n\tType: setOperationReturnType,\n\tImpl: setOperationImpl(func(s1, s2 cty.ValueSet) cty.ValueSet {\n\t\treturn s1.Intersection(s2)\n\t}),\n})\n\nvar SetSubtractFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName:             \"a\",\n\t\t\tType:             cty.Set(cty.DynamicPseudoType),\n\t\t\tAllowDynamicType: true,\n\t\t},\n\t\t{\n\t\t\tName:             \"b\",\n\t\t\tType:             cty.Set(cty.DynamicPseudoType),\n\t\t\tAllowDynamicType: true,\n\t\t},\n\t},\n\tType: setOperationReturnType,\n\tImpl: setOperationImpl(func(s1, s2 cty.ValueSet) cty.ValueSet {\n\t\treturn s1.Subtract(s2)\n\t}),\n})\n\nvar SetSymmetricDifferenceFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName:             \"first_set\",\n\t\t\tType:             cty.Set(cty.DynamicPseudoType),\n\t\t\tAllowDynamicType: true,\n\t\t},\n\t},\n\tVarParam: &function.Parameter{\n\t\tName:             \"other_sets\",\n\t\tType:             cty.Set(cty.DynamicPseudoType),\n\t\tAllowDynamicType: true,\n\t},\n\tType: setOperationReturnType,\n\tImpl: setOperationImpl(func(s1, s2 cty.ValueSet) cty.ValueSet {\n\t\treturn s1.Subtract(s2)\n\t}),\n})\n\n// SetHasElement determines whether the given set contains the given value as an\n// element.\nfunc SetHasElement(set cty.Value, elem cty.Value) (cty.Value, error) {\n\treturn SetHasElementFunc.Call([]cty.Value{set, elem})\n}\n\n// SetUnion returns a new set containing all of the elements from the given\n// sets, which must have element types that can all be converted to some\n// common type using the standard type unification rules. If conversion\n// is not possible, an error is returned.\n//\n// The union operation is performed after type conversion, which may result\n// in some previously-distinct values being conflated.\n//\n// At least one set must be provided.\nfunc SetUnion(sets ...cty.Value) (cty.Value, error) {\n\treturn SetUnionFunc.Call(sets)\n}\n\n// Intersection returns a new set containing the elements that exist\n// in all of the given sets, which must have element types that can all be\n// converted to some common type using the standard type unification rules.\n// If conversion is not possible, an error is returned.\n//\n// The intersection operation is performed after type conversion, which may\n// result in some previously-distinct values being conflated.\n//\n// At least one set must be provided.\nfunc SetIntersection(sets ...cty.Value) (cty.Value, error) {\n\treturn SetIntersectionFunc.Call(sets)\n}\n\n// SetSubtract returns a new set containing the elements from the\n// first set that are not present in the second set. The sets must have\n// element types that can both be converted to some common type using the\n// standard type unification rules. If conversion is not possible, an error\n// is returned.\n//\n// The subtract operation is performed after type conversion, which may\n// result in some previously-distinct values being conflated.\nfunc SetSubtract(a, b cty.Value) (cty.Value, error) {\n\treturn SetSubtractFunc.Call([]cty.Value{a, b})\n}\n\n// SetSymmetricDifference returns a new set containing elements that appear\n// in any of the given sets but not multiple. The sets must have\n// element types that can all be converted to some common type using the\n// standard type unification rules. If conversion is not possible, an error\n// is returned.\n//\n// The difference operation is performed after type conversion, which may\n// result in some previously-distinct values being conflated.\nfunc SetSymmetricDifference(sets ...cty.Value) (cty.Value, error) {\n\treturn SetSymmetricDifferenceFunc.Call(sets)\n}\n\nfunc setOperationReturnType(args []cty.Value) (ret cty.Type, err error) {\n\tvar etys []cty.Type\n\tfor _, arg := range args {\n\t\tetys = append(etys, arg.Type().ElementType())\n\t}\n\tnewEty, _ := convert.UnifyUnsafe(etys)\n\tif newEty == cty.NilType {\n\t\treturn cty.NilType, fmt.Errorf(\"given sets must all have compatible element types\")\n\t}\n\treturn cty.Set(newEty), nil\n}\n\nfunc setOperationImpl(f func(s1, s2 cty.ValueSet) cty.ValueSet) function.ImplFunc {\n\treturn func(args []cty.Value, retType cty.Type) (ret cty.Value, err error) {\n\t\tfirst := args[0]\n\t\tfirst, err = convert.Convert(first, retType)\n\t\tif err != nil {\n\t\t\treturn cty.NilVal, function.NewArgError(0, err)\n\t\t}\n\n\t\tset := first.AsValueSet()\n\t\tfor i, arg := range args[1:] {\n\t\t\targ, err := convert.Convert(arg, retType)\n\t\t\tif err != nil {\n\t\t\t\treturn cty.NilVal, function.NewArgError(i+1, err)\n\t\t\t}\n\n\t\t\targSet := arg.AsValueSet()\n\t\t\tset = f(set, argSet)\n\t\t}\n\t\treturn cty.SetValFromValueSet(set), nil\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/function/stdlib/string.go",
    "content": "package stdlib\n\nimport (\n\t\"strings\"\n\n\t\"github.com/zclconf/go-cty/cty\"\n\t\"github.com/zclconf/go-cty/cty/function\"\n\t\"github.com/zclconf/go-cty/cty/gocty\"\n\t\"github.com/apparentlymart/go-textseg/textseg\"\n)\n\nvar UpperFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName:             \"str\",\n\t\t\tType:             cty.String,\n\t\t\tAllowDynamicType: true,\n\t\t},\n\t},\n\tType: function.StaticReturnType(cty.String),\n\tImpl: func(args []cty.Value, retType cty.Type) (cty.Value, error) {\n\t\tin := args[0].AsString()\n\t\tout := strings.ToUpper(in)\n\t\treturn cty.StringVal(out), nil\n\t},\n})\n\nvar LowerFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName:             \"str\",\n\t\t\tType:             cty.String,\n\t\t\tAllowDynamicType: true,\n\t\t},\n\t},\n\tType: function.StaticReturnType(cty.String),\n\tImpl: func(args []cty.Value, retType cty.Type) (cty.Value, error) {\n\t\tin := args[0].AsString()\n\t\tout := strings.ToLower(in)\n\t\treturn cty.StringVal(out), nil\n\t},\n})\n\nvar ReverseFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName:             \"str\",\n\t\t\tType:             cty.String,\n\t\t\tAllowDynamicType: true,\n\t\t},\n\t},\n\tType: function.StaticReturnType(cty.String),\n\tImpl: func(args []cty.Value, retType cty.Type) (cty.Value, error) {\n\t\tin := []byte(args[0].AsString())\n\t\tout := make([]byte, len(in))\n\t\tpos := len(out)\n\n\t\tinB := []byte(in)\n\t\tfor i := 0; i < len(in); {\n\t\t\td, _, _ := textseg.ScanGraphemeClusters(inB[i:], true)\n\t\t\tcluster := in[i : i+d]\n\t\t\tpos -= len(cluster)\n\t\t\tcopy(out[pos:], cluster)\n\t\t\ti += d\n\t\t}\n\n\t\treturn cty.StringVal(string(out)), nil\n\t},\n})\n\nvar StrlenFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName:             \"str\",\n\t\t\tType:             cty.String,\n\t\t\tAllowDynamicType: true,\n\t\t},\n\t},\n\tType: function.StaticReturnType(cty.Number),\n\tImpl: func(args []cty.Value, retType cty.Type) (cty.Value, error) {\n\t\tin := args[0].AsString()\n\t\tl := 0\n\n\t\tinB := []byte(in)\n\t\tfor i := 0; i < len(in); {\n\t\t\td, _, _ := textseg.ScanGraphemeClusters(inB[i:], true)\n\t\t\tl++\n\t\t\ti += d\n\t\t}\n\n\t\treturn cty.NumberIntVal(int64(l)), nil\n\t},\n})\n\nvar SubstrFunc = function.New(&function.Spec{\n\tParams: []function.Parameter{\n\t\t{\n\t\t\tName:             \"str\",\n\t\t\tType:             cty.String,\n\t\t\tAllowDynamicType: true,\n\t\t},\n\t\t{\n\t\t\tName:             \"offset\",\n\t\t\tType:             cty.Number,\n\t\t\tAllowDynamicType: true,\n\t\t},\n\t\t{\n\t\t\tName:             \"length\",\n\t\t\tType:             cty.Number,\n\t\t\tAllowDynamicType: true,\n\t\t},\n\t},\n\tType: function.StaticReturnType(cty.String),\n\tImpl: func(args []cty.Value, retType cty.Type) (cty.Value, error) {\n\t\tin := []byte(args[0].AsString())\n\t\tvar offset, length int\n\n\t\tvar err error\n\t\terr = gocty.FromCtyValue(args[1], &offset)\n\t\tif err != nil {\n\t\t\treturn cty.NilVal, err\n\t\t}\n\t\terr = gocty.FromCtyValue(args[2], &length)\n\t\tif err != nil {\n\t\t\treturn cty.NilVal, err\n\t\t}\n\n\t\tif offset < 0 {\n\t\t\ttotalLenNum, err := Strlen(args[0])\n\t\t\tif err != nil {\n\t\t\t\t// should never happen\n\t\t\t\tpanic(\"Stdlen returned an error\")\n\t\t\t}\n\n\t\t\tvar totalLen int\n\t\t\terr = gocty.FromCtyValue(totalLenNum, &totalLen)\n\t\t\tif err != nil {\n\t\t\t\t// should never happen\n\t\t\t\tpanic(\"Stdlen returned a non-int number\")\n\t\t\t}\n\n\t\t\toffset += totalLen\n\t\t}\n\n\t\tsub := in\n\t\tpos := 0\n\t\tvar i int\n\n\t\t// First we'll seek forward to our offset\n\t\tif offset > 0 {\n\t\t\tfor i = 0; i < len(sub); {\n\t\t\t\td, _, _ := textseg.ScanGraphemeClusters(sub[i:], true)\n\t\t\t\ti += d\n\t\t\t\tpos++\n\t\t\t\tif pos == offset {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tif i >= len(in) {\n\t\t\t\t\treturn cty.StringVal(\"\"), nil\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tsub = sub[i:]\n\t\t}\n\n\t\tif length < 0 {\n\t\t\t// Taking the remainder of the string is a fast path since\n\t\t\t// we can just return the rest of the buffer verbatim.\n\t\t\treturn cty.StringVal(string(sub)), nil\n\t\t}\n\n\t\t// Otherwise we need to start seeking forward again until we\n\t\t// reach the length we want.\n\t\tpos = 0\n\t\tfor i = 0; i < len(sub); {\n\t\t\td, _, _ := textseg.ScanGraphemeClusters(sub[i:], true)\n\t\t\ti += d\n\t\t\tpos++\n\t\t\tif pos == length {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\tsub = sub[:i]\n\n\t\treturn cty.StringVal(string(sub)), nil\n\t},\n})\n\n// Upper is a Function that converts a given string to uppercase.\nfunc Upper(str cty.Value) (cty.Value, error) {\n\treturn UpperFunc.Call([]cty.Value{str})\n}\n\n// Lower is a Function that converts a given string to lowercase.\nfunc Lower(str cty.Value) (cty.Value, error) {\n\treturn LowerFunc.Call([]cty.Value{str})\n}\n\n// Reverse is a Function that reverses the order of the characters in the\n// given string.\n//\n// As usual, \"character\" for the sake of this function is a grapheme cluster,\n// so combining diacritics (for example) will be considered together as a\n// single character.\nfunc Reverse(str cty.Value) (cty.Value, error) {\n\treturn ReverseFunc.Call([]cty.Value{str})\n}\n\n// Strlen is a Function that returns the length of the given string in\n// characters.\n//\n// As usual, \"character\" for the sake of this function is a grapheme cluster,\n// so combining diacritics (for example) will be considered together as a\n// single character.\nfunc Strlen(str cty.Value) (cty.Value, error) {\n\treturn StrlenFunc.Call([]cty.Value{str})\n}\n\n// Substr is a Function that extracts a sequence of characters from another\n// string and creates a new string.\n//\n// As usual, \"character\" for the sake of this function is a grapheme cluster,\n// so combining diacritics (for example) will be considered together as a\n// single character.\n//\n// The \"offset\" index may be negative, in which case it is relative to the\n// end of the given string.\n//\n// The \"length\" may be -1, in which case the remainder of the string after\n// the given offset will be returned.\nfunc Substr(str cty.Value, offset cty.Value, length cty.Value) (cty.Value, error) {\n\treturn SubstrFunc.Call([]cty.Value{str, offset, length})\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/function/unpredictable.go",
    "content": "package function\n\nimport (\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// Unpredictable wraps a given function such that it retains the same arguments\n// and type checking behavior but will return an unknown value when called.\n//\n// It is recommended that most functions be \"pure\", which is to say that they\n// will always produce the same value given particular input. However,\n// sometimes it is necessary to offer functions whose behavior depends on\n// some external state, such as reading a file or determining the current time.\n// In such cases, an unpredictable wrapper might be used to stand in for\n// the function during some sort of prior \"checking\" phase in order to delay\n// the actual effect until later.\n//\n// While Unpredictable can support a function that isn't pure in its\n// implementation, it still expects a function to be pure in its type checking\n// behavior, except for the special case of returning cty.DynamicPseudoType\n// if it is not yet able to predict its return value based on current argument\n// information.\nfunc Unpredictable(f Function) Function {\n\tnewSpec := *f.spec // shallow copy\n\tnewSpec.Impl = unpredictableImpl\n\treturn New(&newSpec)\n}\n\nfunc unpredictableImpl(args []cty.Value, retType cty.Type) (cty.Value, error) {\n\treturn cty.UnknownVal(retType), nil\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/gob.go",
    "content": "package cty\n\nimport (\n\t\"bytes\"\n\t\"encoding/gob\"\n\t\"fmt\"\n\t\"math/big\"\n)\n\n// GobEncode is an implementation of the gob.GobEncoder interface, which\n// allows Values to be included in structures encoded with encoding/gob.\n//\n// Currently it is not possible to represent values of capsule types in gob,\n// because the types themselves cannot be represented.\nfunc (val Value) GobEncode() ([]byte, error) {\n\tbuf := &bytes.Buffer{}\n\tenc := gob.NewEncoder(buf)\n\n\tgv := gobValue{\n\t\tVersion: 0,\n\t\tTy:      val.ty,\n\t\tV:       val.v,\n\t}\n\n\terr := enc.Encode(gv)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"error encoding cty.Value: %s\", err)\n\t}\n\n\treturn buf.Bytes(), nil\n}\n\n// GobDecode is an implementation of the gob.GobDecoder interface, which\n// inverts the operation performed by GobEncode. See the documentation of\n// GobEncode for considerations when using cty.Value instances with gob.\nfunc (val *Value) GobDecode(buf []byte) error {\n\tr := bytes.NewReader(buf)\n\tdec := gob.NewDecoder(r)\n\n\tvar gv gobValue\n\terr := dec.Decode(&gv)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"error decoding cty.Value: %s\", err)\n\t}\n\tif gv.Version != 0 {\n\t\treturn fmt.Errorf(\"unsupported cty.Value encoding version %d; only 0 is supported\", gv.Version)\n\t}\n\n\t// big.Float seems to, for some reason, lose its \"pointerness\" when we\n\t// round-trip it, so we'll fix that here.\n\tif bf, ok := gv.V.(big.Float); ok {\n\t\tgv.V = &bf\n\t}\n\n\tval.ty = gv.Ty\n\tval.v = gv.V\n\n\treturn nil\n}\n\n// GobEncode is an implementation of the gob.GobEncoder interface, which\n// allows Types to be included in structures encoded with encoding/gob.\n//\n// Currently it is not possible to represent capsule types in gob.\nfunc (t Type) GobEncode() ([]byte, error) {\n\tbuf := &bytes.Buffer{}\n\tenc := gob.NewEncoder(buf)\n\n\tgt := gobType{\n\t\tVersion: 0,\n\t\tImpl:    t.typeImpl,\n\t}\n\n\terr := enc.Encode(gt)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"error encoding cty.Type: %s\", err)\n\t}\n\n\treturn buf.Bytes(), nil\n}\n\n// GobDecode is an implementatino of the gob.GobDecoder interface, which\n// reverses the encoding performed by GobEncode to allow types to be recovered\n// from gob buffers.\nfunc (t *Type) GobDecode(buf []byte) error {\n\tr := bytes.NewReader(buf)\n\tdec := gob.NewDecoder(r)\n\n\tvar gt gobType\n\terr := dec.Decode(&gt)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"error decoding cty.Type: %s\", err)\n\t}\n\tif gt.Version != 0 {\n\t\treturn fmt.Errorf(\"unsupported cty.Type encoding version %d; only 0 is supported\", gt.Version)\n\t}\n\n\tt.typeImpl = gt.Impl\n\n\treturn nil\n}\n\n// Capsule types cannot currently be gob-encoded, because they rely on pointer\n// equality and we have no way to recover the original pointer on decode.\nfunc (t *capsuleType) GobEncode() ([]byte, error) {\n\treturn nil, fmt.Errorf(\"cannot gob-encode capsule type %q\", t.FriendlyName(friendlyTypeName))\n}\n\nfunc (t *capsuleType) GobDecode() ([]byte, error) {\n\treturn nil, fmt.Errorf(\"cannot gob-decode capsule type %q\", t.FriendlyName(friendlyTypeName))\n}\n\ntype gobValue struct {\n\tVersion int\n\tTy      Type\n\tV       interface{}\n}\n\ntype gobType struct {\n\tVersion int\n\tImpl    typeImpl\n}\n\ntype gobCapsuleTypeImpl struct {\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/gocty/doc.go",
    "content": "// Package gocty deals with converting between cty Values and native go\n// values.\n//\n// It operates under a similar principle to the encoding/json and\n// encoding/xml packages in the standard library, using reflection to\n// populate native Go data structures from cty values and vice-versa.\npackage gocty\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/gocty/helpers.go",
    "content": "package gocty\n\nimport (\n\t\"math/big\"\n\t\"reflect\"\n\n\t\"github.com/zclconf/go-cty/cty\"\n\t\"github.com/zclconf/go-cty/cty/set\"\n)\n\nvar valueType = reflect.TypeOf(cty.Value{})\nvar typeType = reflect.TypeOf(cty.Type{})\n\nvar setType = reflect.TypeOf(set.Set{})\n\nvar bigFloatType = reflect.TypeOf(big.Float{})\nvar bigIntType = reflect.TypeOf(big.Int{})\n\nvar emptyInterfaceType = reflect.TypeOf(interface{}(nil))\n\nvar stringType = reflect.TypeOf(\"\")\n\n// structTagIndices interrogates the fields of the given type (which must\n// be a struct type, or we'll panic) and returns a map from the cty\n// attribute names declared via struct tags to the indices of the\n// fields holding those tags.\n//\n// This function will panic if two fields within the struct are tagged with\n// the same cty attribute name.\nfunc structTagIndices(st reflect.Type) map[string]int {\n\tct := st.NumField()\n\tret := make(map[string]int, ct)\n\n\tfor i := 0; i < ct; i++ {\n\t\tfield := st.Field(i)\n\t\tattrName := field.Tag.Get(\"cty\")\n\t\tif attrName != \"\" {\n\t\t\tret[attrName] = i\n\t\t}\n\t}\n\n\treturn ret\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/gocty/in.go",
    "content": "package gocty\n\nimport (\n\t\"math/big\"\n\t\"reflect\"\n\n\t\"github.com/zclconf/go-cty/cty\"\n\t\"github.com/zclconf/go-cty/cty/convert\"\n\t\"github.com/zclconf/go-cty/cty/set\"\n)\n\n// ToCtyValue produces a cty.Value from a Go value. The result will conform\n// to the given type, or an error will be returned if this is not possible.\n//\n// The target type serves as a hint to resolve ambiguities in the mapping.\n// For example, the Go type set.Set tells us that the value is a set but\n// does not describe the set's element type. This also allows for convenient\n// conversions, such as populating a set from a slice rather than having to\n// first explicitly instantiate a set.Set.\n//\n// The audience of this function is assumed to be the developers of Go code\n// that is integrating with cty, and thus the error messages it returns are\n// presented from Go's perspective. These messages are thus not appropriate\n// for display to end-users. An error returned from ToCtyValue represents a\n// bug in the calling program, not user error.\nfunc ToCtyValue(val interface{}, ty cty.Type) (cty.Value, error) {\n\t// 'path' starts off as empty but will grow for each level of recursive\n\t// call we make, so by the time toCtyValue returns it is likely to have\n\t// unused capacity on the end of it, depending on how deeply-recursive\n\t// the given Type is.\n\tpath := make(cty.Path, 0)\n\treturn toCtyValue(reflect.ValueOf(val), ty, path)\n}\n\nfunc toCtyValue(val reflect.Value, ty cty.Type, path cty.Path) (cty.Value, error) {\n\tif val != (reflect.Value{}) && val.Type().AssignableTo(valueType) {\n\t\t// If the source value is a cty.Value then we'll try to just pass\n\t\t// through to the target type directly.\n\t\treturn toCtyPassthrough(val, ty, path)\n\t}\n\n\tswitch ty {\n\tcase cty.Bool:\n\t\treturn toCtyBool(val, path)\n\tcase cty.Number:\n\t\treturn toCtyNumber(val, path)\n\tcase cty.String:\n\t\treturn toCtyString(val, path)\n\tcase cty.DynamicPseudoType:\n\t\treturn toCtyDynamic(val, path)\n\t}\n\n\tswitch {\n\tcase ty.IsListType():\n\t\treturn toCtyList(val, ty.ElementType(), path)\n\tcase ty.IsMapType():\n\t\treturn toCtyMap(val, ty.ElementType(), path)\n\tcase ty.IsSetType():\n\t\treturn toCtySet(val, ty.ElementType(), path)\n\tcase ty.IsObjectType():\n\t\treturn toCtyObject(val, ty.AttributeTypes(), path)\n\tcase ty.IsTupleType():\n\t\treturn toCtyTuple(val, ty.TupleElementTypes(), path)\n\tcase ty.IsCapsuleType():\n\t\treturn toCtyCapsule(val, ty, path)\n\t}\n\n\t// We should never fall out here\n\treturn cty.NilVal, path.NewErrorf(\"unsupported target type %#v\", ty)\n}\n\nfunc toCtyBool(val reflect.Value, path cty.Path) (cty.Value, error) {\n\tif val = toCtyUnwrapPointer(val); !val.IsValid() {\n\t\treturn cty.NullVal(cty.Bool), nil\n\t}\n\n\tswitch val.Kind() {\n\n\tcase reflect.Bool:\n\t\treturn cty.BoolVal(val.Bool()), nil\n\n\tdefault:\n\t\treturn cty.NilVal, path.NewErrorf(\"can't convert Go %s to bool\", val.Kind())\n\n\t}\n\n}\n\nfunc toCtyNumber(val reflect.Value, path cty.Path) (cty.Value, error) {\n\tif val = toCtyUnwrapPointer(val); !val.IsValid() {\n\t\treturn cty.NullVal(cty.Number), nil\n\t}\n\n\tswitch val.Kind() {\n\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\treturn cty.NumberIntVal(val.Int()), nil\n\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:\n\t\treturn cty.NumberUIntVal(val.Uint()), nil\n\n\tcase reflect.Float32, reflect.Float64:\n\t\treturn cty.NumberFloatVal(val.Float()), nil\n\n\tcase reflect.Struct:\n\t\tif val.Type().AssignableTo(bigIntType) {\n\t\t\tbigInt := val.Interface().(big.Int)\n\t\t\tbigFloat := (&big.Float{}).SetInt(&bigInt)\n\t\t\tval = reflect.ValueOf(*bigFloat)\n\t\t}\n\n\t\tif val.Type().AssignableTo(bigFloatType) {\n\t\t\tbigFloat := val.Interface().(big.Float)\n\t\t\treturn cty.NumberVal(&bigFloat), nil\n\t\t}\n\n\t\tfallthrough\n\tdefault:\n\t\treturn cty.NilVal, path.NewErrorf(\"can't convert Go %s to number\", val.Kind())\n\n\t}\n\n}\n\nfunc toCtyString(val reflect.Value, path cty.Path) (cty.Value, error) {\n\tif val = toCtyUnwrapPointer(val); !val.IsValid() {\n\t\treturn cty.NullVal(cty.String), nil\n\t}\n\n\tswitch val.Kind() {\n\n\tcase reflect.String:\n\t\treturn cty.StringVal(val.String()), nil\n\n\tdefault:\n\t\treturn cty.NilVal, path.NewErrorf(\"can't convert Go %s to string\", val.Kind())\n\n\t}\n\n}\n\nfunc toCtyList(val reflect.Value, ety cty.Type, path cty.Path) (cty.Value, error) {\n\tif val = toCtyUnwrapPointer(val); !val.IsValid() {\n\t\treturn cty.NullVal(cty.List(ety)), nil\n\t}\n\n\tswitch val.Kind() {\n\n\tcase reflect.Slice:\n\t\tif val.IsNil() {\n\t\t\treturn cty.NullVal(cty.List(ety)), nil\n\t\t}\n\t\tfallthrough\n\tcase reflect.Array:\n\t\tif val.Len() == 0 {\n\t\t\treturn cty.ListValEmpty(ety), nil\n\t\t}\n\n\t\t// While we work on our elements we'll temporarily grow\n\t\t// path to give us a place to put our index step.\n\t\tpath = append(path, cty.PathStep(nil))\n\n\t\tvals := make([]cty.Value, val.Len())\n\t\tfor i := range vals {\n\t\t\tvar err error\n\t\t\tpath[len(path)-1] = cty.IndexStep{\n\t\t\t\tKey: cty.NumberIntVal(int64(i)),\n\t\t\t}\n\t\t\tvals[i], err = toCtyValue(val.Index(i), ety, path)\n\t\t\tif err != nil {\n\t\t\t\treturn cty.NilVal, err\n\t\t\t}\n\t\t}\n\n\t\t// Discard our extra path segment, retaining it as extra capacity\n\t\t// for future appending to the path.\n\t\tpath = path[:len(path)-1]\n\n\t\treturn cty.ListVal(vals), nil\n\n\tdefault:\n\t\treturn cty.NilVal, path.NewErrorf(\"can't convert Go %s to %#v\", val.Kind(), cty.List(ety))\n\n\t}\n}\n\nfunc toCtyMap(val reflect.Value, ety cty.Type, path cty.Path) (cty.Value, error) {\n\tif val = toCtyUnwrapPointer(val); !val.IsValid() {\n\t\treturn cty.NullVal(cty.Map(ety)), nil\n\t}\n\n\tswitch val.Kind() {\n\n\tcase reflect.Map:\n\t\tif val.IsNil() {\n\t\t\treturn cty.NullVal(cty.Map(ety)), nil\n\t\t}\n\n\t\tif val.Len() == 0 {\n\t\t\treturn cty.MapValEmpty(ety), nil\n\t\t}\n\n\t\tkeyType := val.Type().Key()\n\t\tif keyType.Kind() != reflect.String {\n\t\t\treturn cty.NilVal, path.NewErrorf(\"can't convert Go map with key type %s; key type must be string\", keyType)\n\t\t}\n\n\t\t// While we work on our elements we'll temporarily grow\n\t\t// path to give us a place to put our index step.\n\t\tpath = append(path, cty.PathStep(nil))\n\n\t\tvals := make(map[string]cty.Value, val.Len())\n\t\tfor _, kv := range val.MapKeys() {\n\t\t\tk := kv.String()\n\t\t\tvar err error\n\t\t\tpath[len(path)-1] = cty.IndexStep{\n\t\t\t\tKey: cty.StringVal(k),\n\t\t\t}\n\t\t\tvals[k], err = toCtyValue(val.MapIndex(reflect.ValueOf(k)), ety, path)\n\t\t\tif err != nil {\n\t\t\t\treturn cty.NilVal, err\n\t\t\t}\n\t\t}\n\n\t\t// Discard our extra path segment, retaining it as extra capacity\n\t\t// for future appending to the path.\n\t\tpath = path[:len(path)-1]\n\n\t\treturn cty.MapVal(vals), nil\n\n\tdefault:\n\t\treturn cty.NilVal, path.NewErrorf(\"can't convert Go %s to %#v\", val.Kind(), cty.Map(ety))\n\n\t}\n}\n\nfunc toCtySet(val reflect.Value, ety cty.Type, path cty.Path) (cty.Value, error) {\n\tif val = toCtyUnwrapPointer(val); !val.IsValid() {\n\t\treturn cty.NullVal(cty.Set(ety)), nil\n\t}\n\n\tvar vals []cty.Value\n\n\tswitch val.Kind() {\n\n\tcase reflect.Slice:\n\t\tif val.IsNil() {\n\t\t\treturn cty.NullVal(cty.Set(ety)), nil\n\t\t}\n\t\tfallthrough\n\tcase reflect.Array:\n\t\tif val.Len() == 0 {\n\t\t\treturn cty.SetValEmpty(ety), nil\n\t\t}\n\n\t\tvals = make([]cty.Value, val.Len())\n\t\tfor i := range vals {\n\t\t\tvar err error\n\t\t\tvals[i], err = toCtyValue(val.Index(i), ety, path)\n\t\t\tif err != nil {\n\t\t\t\treturn cty.NilVal, err\n\t\t\t}\n\t\t}\n\n\tcase reflect.Struct:\n\n\t\tif !val.Type().AssignableTo(setType) {\n\t\t\treturn cty.NilVal, path.NewErrorf(\"can't convert Go %s to %#v\", val.Type(), cty.Set(ety))\n\t\t}\n\n\t\trawSet := val.Interface().(set.Set)\n\t\tinVals := rawSet.Values()\n\n\t\tif len(inVals) == 0 {\n\t\t\treturn cty.SetValEmpty(ety), nil\n\t\t}\n\n\t\tvals = make([]cty.Value, len(inVals))\n\t\tfor i := range inVals {\n\t\t\tvar err error\n\t\t\tvals[i], err = toCtyValue(reflect.ValueOf(inVals[i]), ety, path)\n\t\t\tif err != nil {\n\t\t\t\treturn cty.NilVal, err\n\t\t\t}\n\t\t}\n\n\tdefault:\n\t\treturn cty.NilVal, path.NewErrorf(\"can't convert Go %s to %#v\", val.Kind(), cty.Set(ety))\n\n\t}\n\n\treturn cty.SetVal(vals), nil\n}\n\nfunc toCtyObject(val reflect.Value, attrTypes map[string]cty.Type, path cty.Path) (cty.Value, error) {\n\tif val = toCtyUnwrapPointer(val); !val.IsValid() {\n\t\treturn cty.NullVal(cty.Object(attrTypes)), nil\n\t}\n\n\tswitch val.Kind() {\n\n\tcase reflect.Map:\n\t\tif val.IsNil() {\n\t\t\treturn cty.NullVal(cty.Object(attrTypes)), nil\n\t\t}\n\n\t\tkeyType := val.Type().Key()\n\t\tif keyType.Kind() != reflect.String {\n\t\t\treturn cty.NilVal, path.NewErrorf(\"can't convert Go map with key type %s; key type must be string\", keyType)\n\t\t}\n\n\t\tif len(attrTypes) == 0 {\n\t\t\treturn cty.EmptyObjectVal, nil\n\t\t}\n\n\t\t// While we work on our elements we'll temporarily grow\n\t\t// path to give us a place to put our GetAttr step.\n\t\tpath = append(path, cty.PathStep(nil))\n\n\t\thaveKeys := make(map[string]struct{}, val.Len())\n\t\tfor _, kv := range val.MapKeys() {\n\t\t\thaveKeys[kv.String()] = struct{}{}\n\t\t}\n\n\t\tvals := make(map[string]cty.Value, len(attrTypes))\n\t\tfor k, at := range attrTypes {\n\t\t\tvar err error\n\t\t\tpath[len(path)-1] = cty.GetAttrStep{\n\t\t\t\tName: k,\n\t\t\t}\n\n\t\t\tif _, have := haveKeys[k]; !have {\n\t\t\t\tvals[k] = cty.NullVal(at)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tvals[k], err = toCtyValue(val.MapIndex(reflect.ValueOf(k)), at, path)\n\t\t\tif err != nil {\n\t\t\t\treturn cty.NilVal, err\n\t\t\t}\n\t\t}\n\n\t\t// Discard our extra path segment, retaining it as extra capacity\n\t\t// for future appending to the path.\n\t\tpath = path[:len(path)-1]\n\n\t\treturn cty.ObjectVal(vals), nil\n\n\tcase reflect.Struct:\n\t\tif len(attrTypes) == 0 {\n\t\t\treturn cty.EmptyObjectVal, nil\n\t\t}\n\n\t\t// While we work on our elements we'll temporarily grow\n\t\t// path to give us a place to put our GetAttr step.\n\t\tpath = append(path, cty.PathStep(nil))\n\n\t\tattrFields := structTagIndices(val.Type())\n\n\t\tvals := make(map[string]cty.Value, len(attrTypes))\n\t\tfor k, at := range attrTypes {\n\t\t\tpath[len(path)-1] = cty.GetAttrStep{\n\t\t\t\tName: k,\n\t\t\t}\n\n\t\t\tif fieldIdx, have := attrFields[k]; have {\n\t\t\t\tvar err error\n\t\t\t\tvals[k], err = toCtyValue(val.Field(fieldIdx), at, path)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn cty.NilVal, err\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvals[k] = cty.NullVal(at)\n\t\t\t}\n\t\t}\n\n\t\t// Discard our extra path segment, retaining it as extra capacity\n\t\t// for future appending to the path.\n\t\tpath = path[:len(path)-1]\n\n\t\treturn cty.ObjectVal(vals), nil\n\n\tdefault:\n\t\treturn cty.NilVal, path.NewErrorf(\"can't convert Go %s to %#v\", val.Kind(), cty.Object(attrTypes))\n\n\t}\n}\n\nfunc toCtyTuple(val reflect.Value, elemTypes []cty.Type, path cty.Path) (cty.Value, error) {\n\tif val = toCtyUnwrapPointer(val); !val.IsValid() {\n\t\treturn cty.NullVal(cty.Tuple(elemTypes)), nil\n\t}\n\n\tswitch val.Kind() {\n\n\tcase reflect.Slice:\n\t\tif val.IsNil() {\n\t\t\treturn cty.NullVal(cty.Tuple(elemTypes)), nil\n\t\t}\n\n\t\tif val.Len() != len(elemTypes) {\n\t\t\treturn cty.NilVal, path.NewErrorf(\"wrong number of elements %d; need %d\", val.Len(), len(elemTypes))\n\t\t}\n\n\t\tif len(elemTypes) == 0 {\n\t\t\treturn cty.EmptyTupleVal, nil\n\t\t}\n\n\t\t// While we work on our elements we'll temporarily grow\n\t\t// path to give us a place to put our Index step.\n\t\tpath = append(path, cty.PathStep(nil))\n\n\t\tvals := make([]cty.Value, len(elemTypes))\n\t\tfor i, ety := range elemTypes {\n\t\t\tvar err error\n\n\t\t\tpath[len(path)-1] = cty.IndexStep{\n\t\t\t\tKey: cty.NumberIntVal(int64(i)),\n\t\t\t}\n\n\t\t\tvals[i], err = toCtyValue(val.Index(i), ety, path)\n\t\t\tif err != nil {\n\t\t\t\treturn cty.NilVal, err\n\t\t\t}\n\t\t}\n\n\t\t// Discard our extra path segment, retaining it as extra capacity\n\t\t// for future appending to the path.\n\t\tpath = path[:len(path)-1]\n\n\t\treturn cty.TupleVal(vals), nil\n\n\tcase reflect.Struct:\n\t\tfieldCount := val.Type().NumField()\n\t\tif fieldCount != len(elemTypes) {\n\t\t\treturn cty.NilVal, path.NewErrorf(\"wrong number of struct fields %d; need %d\", fieldCount, len(elemTypes))\n\t\t}\n\n\t\tif len(elemTypes) == 0 {\n\t\t\treturn cty.EmptyTupleVal, nil\n\t\t}\n\n\t\t// While we work on our elements we'll temporarily grow\n\t\t// path to give us a place to put our Index step.\n\t\tpath = append(path, cty.PathStep(nil))\n\n\t\tvals := make([]cty.Value, len(elemTypes))\n\t\tfor i, ety := range elemTypes {\n\t\t\tvar err error\n\n\t\t\tpath[len(path)-1] = cty.IndexStep{\n\t\t\t\tKey: cty.NumberIntVal(int64(i)),\n\t\t\t}\n\n\t\t\tvals[i], err = toCtyValue(val.Field(i), ety, path)\n\t\t\tif err != nil {\n\t\t\t\treturn cty.NilVal, err\n\t\t\t}\n\t\t}\n\n\t\t// Discard our extra path segment, retaining it as extra capacity\n\t\t// for future appending to the path.\n\t\tpath = path[:len(path)-1]\n\n\t\treturn cty.TupleVal(vals), nil\n\n\tdefault:\n\t\treturn cty.NilVal, path.NewErrorf(\"can't convert Go %s to %#v\", val.Kind(), cty.Tuple(elemTypes))\n\n\t}\n}\n\nfunc toCtyCapsule(val reflect.Value, capsuleType cty.Type, path cty.Path) (cty.Value, error) {\n\tif val = toCtyUnwrapPointer(val); !val.IsValid() {\n\t\treturn cty.NullVal(capsuleType), nil\n\t}\n\n\tif val.Kind() != reflect.Ptr {\n\t\tif !val.CanAddr() {\n\t\t\treturn cty.NilVal, path.NewErrorf(\"source value for capsule %#v must be addressable\", capsuleType)\n\t\t}\n\n\t\tval = val.Addr()\n\t}\n\n\tif !val.Type().Elem().AssignableTo(capsuleType.EncapsulatedType()) {\n\t\treturn cty.NilVal, path.NewErrorf(\"value of type %T not compatible with capsule %#v\", val.Interface(), capsuleType)\n\t}\n\n\treturn cty.CapsuleVal(capsuleType, val.Interface()), nil\n}\n\nfunc toCtyDynamic(val reflect.Value, path cty.Path) (cty.Value, error) {\n\tif val = toCtyUnwrapPointer(val); !val.IsValid() {\n\t\treturn cty.NullVal(cty.DynamicPseudoType), nil\n\t}\n\n\tswitch val.Kind() {\n\n\tcase reflect.Struct:\n\t\tif !val.Type().AssignableTo(valueType) {\n\t\t\treturn cty.NilVal, path.NewErrorf(\"can't convert Go %s dynamically; only cty.Value allowed\", val.Type())\n\t\t}\n\n\t\treturn val.Interface().(cty.Value), nil\n\n\tdefault:\n\t\treturn cty.NilVal, path.NewErrorf(\"can't convert Go %s dynamically; only cty.Value allowed\", val.Kind())\n\n\t}\n\n}\n\nfunc toCtyPassthrough(wrappedVal reflect.Value, wantTy cty.Type, path cty.Path) (cty.Value, error) {\n\tif wrappedVal = toCtyUnwrapPointer(wrappedVal); !wrappedVal.IsValid() {\n\t\treturn cty.NullVal(wantTy), nil\n\t}\n\n\tgivenVal := wrappedVal.Interface().(cty.Value)\n\n\tval, err := convert.Convert(givenVal, wantTy)\n\tif err != nil {\n\t\treturn cty.NilVal, path.NewErrorf(\"unsuitable value: %s\", err)\n\t}\n\treturn val, nil\n}\n\n// toCtyUnwrapPointer is a helper for dealing with Go pointers. It has three\n// possible outcomes:\n//\n// - Given value isn't a pointer, so it's just returned as-is.\n// - Given value is a non-nil pointer, in which case it is dereferenced\n//   and the result returned.\n// - Given value is a nil pointer, in which case an invalid value is returned.\n//\n// For nested pointer types, like **int, they are all dereferenced in turn\n// until a non-pointer value is found, or until a nil pointer is encountered.\nfunc toCtyUnwrapPointer(val reflect.Value) reflect.Value {\n\tfor val.Kind() == reflect.Ptr || val.Kind() == reflect.Interface {\n\t\tif val.IsNil() {\n\t\t\treturn reflect.Value{}\n\t\t}\n\n\t\tval = val.Elem()\n\t}\n\n\treturn val\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/gocty/out.go",
    "content": "package gocty\n\nimport (\n\t\"math\"\n\t\"math/big\"\n\t\"reflect\"\n\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// FromCtyValue assigns a cty.Value to a reflect.Value, which must be a pointer,\n// using a fixed set of conversion rules.\n//\n// This function considers its audience to be the creator of the cty Value\n// given, and thus the error messages it generates are (unlike with ToCtyValue)\n// presented in cty terminology that is generally appropriate to return to\n// end-users in applications where cty data structures are built from\n// user-provided configuration. In particular this means that if incorrect\n// target types are provided by the calling application the resulting error\n// messages are likely to be confusing, since we assume that the given target\n// type is correct and the cty.Value is where the error lies.\n//\n// If an error is returned, the target data structure may have been partially\n// populated, but the degree to which this is true is an implementation\n// detail that the calling application should not rely on.\n//\n// The function will panic if given a non-pointer as the Go value target,\n// since that is considered to be a bug in the calling program.\nfunc FromCtyValue(val cty.Value, target interface{}) error {\n\ttVal := reflect.ValueOf(target)\n\tif tVal.Kind() != reflect.Ptr {\n\t\tpanic(\"target value is not a pointer\")\n\t}\n\tif tVal.IsNil() {\n\t\tpanic(\"target value is nil pointer\")\n\t}\n\n\t// 'path' starts off as empty but will grow for each level of recursive\n\t// call we make, so by the time fromCtyValue returns it is likely to have\n\t// unused capacity on the end of it, depending on how deeply-recursive\n\t// the given cty.Value is.\n\tpath := make(cty.Path, 0)\n\treturn fromCtyValue(val, tVal, path)\n}\n\nfunc fromCtyValue(val cty.Value, target reflect.Value, path cty.Path) error {\n\tty := val.Type()\n\n\tdeepTarget := fromCtyPopulatePtr(target, false)\n\n\t// If we're decoding into a cty.Value then we just pass through the\n\t// value as-is, to enable partial decoding. This is the only situation\n\t// where unknown values are permitted.\n\tif deepTarget.Kind() == reflect.Struct && deepTarget.Type().AssignableTo(valueType) {\n\t\tdeepTarget.Set(reflect.ValueOf(val))\n\t\treturn nil\n\t}\n\n\t// Lists and maps can be nil without indirection, but everything else\n\t// requires a pointer and we set it immediately to nil.\n\t// We also make an exception for capsule types because we want to handle\n\t// pointers specially for these.\n\t// (fromCtyList and fromCtyMap must therefore deal with val.IsNull, while\n\t// other types can assume no nulls after this point.)\n\tif val.IsNull() && !val.Type().IsListType() && !val.Type().IsMapType() && !val.Type().IsCapsuleType() {\n\t\ttarget = fromCtyPopulatePtr(target, true)\n\t\tif target.Kind() != reflect.Ptr {\n\t\t\treturn path.NewErrorf(\"null value is not allowed\")\n\t\t}\n\n\t\ttarget.Set(reflect.Zero(target.Type()))\n\t\treturn nil\n\t}\n\n\ttarget = deepTarget\n\n\tif !val.IsKnown() {\n\t\treturn path.NewErrorf(\"value must be known\")\n\t}\n\n\tswitch ty {\n\tcase cty.Bool:\n\t\treturn fromCtyBool(val, target, path)\n\tcase cty.Number:\n\t\treturn fromCtyNumber(val, target, path)\n\tcase cty.String:\n\t\treturn fromCtyString(val, target, path)\n\t}\n\n\tswitch {\n\tcase ty.IsListType():\n\t\treturn fromCtyList(val, target, path)\n\tcase ty.IsMapType():\n\t\treturn fromCtyMap(val, target, path)\n\tcase ty.IsSetType():\n\t\treturn fromCtySet(val, target, path)\n\tcase ty.IsObjectType():\n\t\treturn fromCtyObject(val, target, path)\n\tcase ty.IsTupleType():\n\t\treturn fromCtyTuple(val, target, path)\n\tcase ty.IsCapsuleType():\n\t\treturn fromCtyCapsule(val, target, path)\n\t}\n\n\t// We should never fall out here; reaching here indicates a bug in this\n\t// function.\n\treturn path.NewErrorf(\"unsupported source type %#v\", ty)\n}\n\nfunc fromCtyBool(val cty.Value, target reflect.Value, path cty.Path) error {\n\tswitch target.Kind() {\n\n\tcase reflect.Bool:\n\t\ttarget.SetBool(val.True())\n\t\treturn nil\n\n\tdefault:\n\t\treturn likelyRequiredTypesError(path, target)\n\n\t}\n}\n\nfunc fromCtyNumber(val cty.Value, target reflect.Value, path cty.Path) error {\n\tbf := val.AsBigFloat()\n\n\tswitch target.Kind() {\n\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\treturn fromCtyNumberInt(bf, target, path)\n\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:\n\t\treturn fromCtyNumberUInt(bf, target, path)\n\n\tcase reflect.Float32, reflect.Float64:\n\t\treturn fromCtyNumberFloat(bf, target, path)\n\n\tcase reflect.Struct:\n\t\treturn fromCtyNumberBig(bf, target, path)\n\n\tdefault:\n\t\treturn likelyRequiredTypesError(path, target)\n\n\t}\n}\n\nfunc fromCtyNumberInt(bf *big.Float, target reflect.Value, path cty.Path) error {\n\t// Doing this with switch rather than << arithmetic because << with\n\t// result >32-bits is not portable to 32-bit systems.\n\tvar min int64\n\tvar max int64\n\tswitch target.Type().Bits() {\n\tcase 8:\n\t\tmin = math.MinInt8\n\t\tmax = math.MaxInt8\n\tcase 16:\n\t\tmin = math.MinInt16\n\t\tmax = math.MaxInt16\n\tcase 32:\n\t\tmin = math.MinInt32\n\t\tmax = math.MaxInt32\n\tcase 64:\n\t\tmin = math.MinInt64\n\t\tmax = math.MaxInt64\n\tdefault:\n\t\tpanic(\"weird number of bits in target int\")\n\t}\n\n\tiv, accuracy := bf.Int64()\n\tif accuracy != big.Exact || iv < min || iv > max {\n\t\treturn path.NewErrorf(\"value must be a whole number, between %d and %d\", min, max)\n\t}\n\n\ttarget.SetInt(iv)\n\treturn nil\n}\n\nfunc fromCtyNumberUInt(bf *big.Float, target reflect.Value, path cty.Path) error {\n\t// Doing this with switch rather than << arithmetic because << with\n\t// result >32-bits is not portable to 32-bit systems.\n\tvar max uint64\n\tswitch target.Type().Bits() {\n\tcase 8:\n\t\tmax = math.MaxUint8\n\tcase 16:\n\t\tmax = math.MaxUint16\n\tcase 32:\n\t\tmax = math.MaxUint32\n\tcase 64:\n\t\tmax = math.MaxUint64\n\tdefault:\n\t\tpanic(\"weird number of bits in target uint\")\n\t}\n\n\tiv, accuracy := bf.Uint64()\n\tif accuracy != big.Exact || iv > max {\n\t\treturn path.NewErrorf(\"value must be a whole number, between 0 and %d inclusive\", max)\n\t}\n\n\ttarget.SetUint(iv)\n\treturn nil\n}\n\nfunc fromCtyNumberFloat(bf *big.Float, target reflect.Value, path cty.Path) error {\n\tswitch target.Kind() {\n\tcase reflect.Float32, reflect.Float64:\n\t\tfv, accuracy := bf.Float64()\n\t\tif accuracy != big.Exact {\n\t\t\t// We allow the precision to be truncated as part of our conversion,\n\t\t\t// but we don't want to silently introduce infinities.\n\t\t\tif math.IsInf(fv, 0) {\n\t\t\t\treturn path.NewErrorf(\"value must be between %f and %f inclusive\", -math.MaxFloat64, math.MaxFloat64)\n\t\t\t}\n\t\t}\n\t\ttarget.SetFloat(fv)\n\t\treturn nil\n\tdefault:\n\t\tpanic(\"unsupported kind of float\")\n\t}\n}\n\nfunc fromCtyNumberBig(bf *big.Float, target reflect.Value, path cty.Path) error {\n\tswitch {\n\n\tcase bigFloatType.ConvertibleTo(target.Type()):\n\t\t// Easy!\n\t\ttarget.Set(reflect.ValueOf(bf).Elem().Convert(target.Type()))\n\t\treturn nil\n\n\tcase bigIntType.ConvertibleTo(target.Type()):\n\t\tbi, accuracy := bf.Int(nil)\n\t\tif accuracy != big.Exact {\n\t\t\treturn path.NewErrorf(\"value must be a whole number\")\n\t\t}\n\t\ttarget.Set(reflect.ValueOf(bi).Elem().Convert(target.Type()))\n\t\treturn nil\n\n\tdefault:\n\t\treturn likelyRequiredTypesError(path, target)\n\t}\n}\n\nfunc fromCtyString(val cty.Value, target reflect.Value, path cty.Path) error {\n\tswitch target.Kind() {\n\tcase reflect.String:\n\t\ttarget.SetString(val.AsString())\n\t\treturn nil\n\n\tdefault:\n\t\treturn likelyRequiredTypesError(path, target)\n\n\t}\n}\n\nfunc fromCtyList(val cty.Value, target reflect.Value, path cty.Path) error {\n\tswitch target.Kind() {\n\n\tcase reflect.Slice:\n\t\tif val.IsNull() {\n\t\t\ttarget.Set(reflect.Zero(target.Type()))\n\t\t\treturn nil\n\t\t}\n\n\t\tlength := val.LengthInt()\n\t\ttv := reflect.MakeSlice(target.Type(), length, length)\n\n\t\tpath = append(path, nil)\n\n\t\ti := 0\n\t\tvar err error\n\t\tval.ForEachElement(func(key cty.Value, val cty.Value) bool {\n\t\t\tpath[len(path)-1] = cty.IndexStep{\n\t\t\t\tKey: cty.NumberIntVal(int64(i)),\n\t\t\t}\n\n\t\t\ttargetElem := tv.Index(i)\n\t\t\terr = fromCtyValue(val, targetElem, path)\n\t\t\tif err != nil {\n\t\t\t\treturn true\n\t\t\t}\n\n\t\t\ti++\n\t\t\treturn false\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tpath = path[:len(path)-1]\n\n\t\ttarget.Set(tv)\n\t\treturn nil\n\n\tcase reflect.Array:\n\t\tif val.IsNull() {\n\t\t\treturn path.NewErrorf(\"null value is not allowed\")\n\t\t}\n\n\t\tlength := val.LengthInt()\n\t\tif length != target.Len() {\n\t\t\treturn path.NewErrorf(\"must be a list of length %d\", target.Len())\n\t\t}\n\n\t\tpath = append(path, nil)\n\n\t\ti := 0\n\t\tvar err error\n\t\tval.ForEachElement(func(key cty.Value, val cty.Value) bool {\n\t\t\tpath[len(path)-1] = cty.IndexStep{\n\t\t\t\tKey: cty.NumberIntVal(int64(i)),\n\t\t\t}\n\n\t\t\ttargetElem := target.Index(i)\n\t\t\terr = fromCtyValue(val, targetElem, path)\n\t\t\tif err != nil {\n\t\t\t\treturn true\n\t\t\t}\n\n\t\t\ti++\n\t\t\treturn false\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tpath = path[:len(path)-1]\n\n\t\treturn nil\n\n\tdefault:\n\t\treturn likelyRequiredTypesError(path, target)\n\n\t}\n}\n\nfunc fromCtyMap(val cty.Value, target reflect.Value, path cty.Path) error {\n\n\tswitch target.Kind() {\n\n\tcase reflect.Map:\n\t\tif val.IsNull() {\n\t\t\ttarget.Set(reflect.Zero(target.Type()))\n\t\t\treturn nil\n\t\t}\n\n\t\ttv := reflect.MakeMap(target.Type())\n\t\tet := target.Type().Elem()\n\n\t\tpath = append(path, nil)\n\n\t\tvar err error\n\t\tval.ForEachElement(func(key cty.Value, val cty.Value) bool {\n\t\t\tpath[len(path)-1] = cty.IndexStep{\n\t\t\t\tKey: key,\n\t\t\t}\n\n\t\t\tks := key.AsString()\n\n\t\t\ttargetElem := reflect.New(et)\n\t\t\terr = fromCtyValue(val, targetElem, path)\n\n\t\t\ttv.SetMapIndex(reflect.ValueOf(ks), targetElem.Elem())\n\n\t\t\treturn err != nil\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tpath = path[:len(path)-1]\n\n\t\ttarget.Set(tv)\n\t\treturn nil\n\n\tdefault:\n\t\treturn likelyRequiredTypesError(path, target)\n\n\t}\n}\n\nfunc fromCtySet(val cty.Value, target reflect.Value, path cty.Path) error {\n\tswitch target.Kind() {\n\n\tcase reflect.Slice:\n\t\tif val.IsNull() {\n\t\t\ttarget.Set(reflect.Zero(target.Type()))\n\t\t\treturn nil\n\t\t}\n\n\t\tlength := val.LengthInt()\n\t\ttv := reflect.MakeSlice(target.Type(), length, length)\n\n\t\ti := 0\n\t\tvar err error\n\t\tval.ForEachElement(func(key cty.Value, val cty.Value) bool {\n\t\t\ttargetElem := tv.Index(i)\n\t\t\terr = fromCtyValue(val, targetElem, path)\n\t\t\tif err != nil {\n\t\t\t\treturn true\n\t\t\t}\n\n\t\t\ti++\n\t\t\treturn false\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\ttarget.Set(tv)\n\t\treturn nil\n\n\tcase reflect.Array:\n\t\tif val.IsNull() {\n\t\t\treturn path.NewErrorf(\"null value is not allowed\")\n\t\t}\n\n\t\tlength := val.LengthInt()\n\t\tif length != target.Len() {\n\t\t\treturn path.NewErrorf(\"must be a set of length %d\", target.Len())\n\t\t}\n\n\t\ti := 0\n\t\tvar err error\n\t\tval.ForEachElement(func(key cty.Value, val cty.Value) bool {\n\t\t\ttargetElem := target.Index(i)\n\t\t\terr = fromCtyValue(val, targetElem, path)\n\t\t\tif err != nil {\n\t\t\t\treturn true\n\t\t\t}\n\n\t\t\ti++\n\t\t\treturn false\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\treturn nil\n\n\t// TODO: decode into set.Set instance\n\n\tdefault:\n\t\treturn likelyRequiredTypesError(path, target)\n\n\t}\n}\n\nfunc fromCtyObject(val cty.Value, target reflect.Value, path cty.Path) error {\n\n\tswitch target.Kind() {\n\n\tcase reflect.Struct:\n\n\t\tattrTypes := val.Type().AttributeTypes()\n\t\ttargetFields := structTagIndices(target.Type())\n\n\t\tpath = append(path, nil)\n\n\t\tfor k, i := range targetFields {\n\t\t\tif _, exists := attrTypes[k]; !exists {\n\t\t\t\t// If the field in question isn't able to represent nil,\n\t\t\t\t// that's an error.\n\t\t\t\tfk := target.Field(i).Kind()\n\t\t\t\tswitch fk {\n\t\t\t\tcase reflect.Ptr, reflect.Slice, reflect.Map, reflect.Interface:\n\t\t\t\t\t// okay\n\t\t\t\tdefault:\n\t\t\t\t\treturn path.NewErrorf(\"missing required attribute %q\", k)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor k := range attrTypes {\n\t\t\tpath[len(path)-1] = cty.GetAttrStep{\n\t\t\t\tName: k,\n\t\t\t}\n\n\t\t\tfieldIdx, exists := targetFields[k]\n\t\t\tif !exists {\n\t\t\t\treturn path.NewErrorf(\"unsupported attribute %q\", k)\n\t\t\t}\n\n\t\t\tev := val.GetAttr(k)\n\n\t\t\ttargetField := target.Field(fieldIdx)\n\t\t\terr := fromCtyValue(ev, targetField, path)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\n\t\tpath = path[:len(path)-1]\n\n\t\treturn nil\n\n\tdefault:\n\t\treturn likelyRequiredTypesError(path, target)\n\n\t}\n}\n\nfunc fromCtyTuple(val cty.Value, target reflect.Value, path cty.Path) error {\n\n\tswitch target.Kind() {\n\n\tcase reflect.Struct:\n\n\t\telemTypes := val.Type().TupleElementTypes()\n\t\tfieldCount := target.Type().NumField()\n\n\t\tif fieldCount != len(elemTypes) {\n\t\t\treturn path.NewErrorf(\"a tuple of %d elements is required\", fieldCount)\n\t\t}\n\n\t\tpath = append(path, nil)\n\n\t\tfor i := range elemTypes {\n\t\t\tpath[len(path)-1] = cty.IndexStep{\n\t\t\t\tKey: cty.NumberIntVal(int64(i)),\n\t\t\t}\n\n\t\t\tev := val.Index(cty.NumberIntVal(int64(i)))\n\n\t\t\ttargetField := target.Field(i)\n\t\t\terr := fromCtyValue(ev, targetField, path)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\n\t\tpath = path[:len(path)-1]\n\n\t\treturn nil\n\n\tdefault:\n\t\treturn likelyRequiredTypesError(path, target)\n\n\t}\n}\n\nfunc fromCtyCapsule(val cty.Value, target reflect.Value, path cty.Path) error {\n\n\tif target.Kind() == reflect.Ptr {\n\t\t// Walk through indirection until we get to the last pointer,\n\t\t// which we might set to null below.\n\t\ttarget = fromCtyPopulatePtr(target, true)\n\n\t\tif val.IsNull() {\n\t\t\ttarget.Set(reflect.Zero(target.Type()))\n\t\t\treturn nil\n\t\t}\n\n\t\t// Since a capsule contains a pointer to an object, we'll preserve\n\t\t// that pointer on the way out and thus allow the caller to recover\n\t\t// the original object, rather than a copy of it.\n\n\t\teType := val.Type().EncapsulatedType()\n\n\t\tif !eType.AssignableTo(target.Elem().Type()) {\n\t\t\t// Our interface contract promises that we won't expose Go\n\t\t\t// implementation details in error messages, so we need to keep\n\t\t\t// this vague. This can only arise if a calling application has\n\t\t\t// more than one capsule type in play and a user mixes them up.\n\t\t\treturn path.NewErrorf(\"incorrect type %s\", val.Type().FriendlyName())\n\t\t}\n\n\t\ttarget.Set(reflect.ValueOf(val.EncapsulatedValue()))\n\n\t\treturn nil\n\t} else {\n\t\tif val.IsNull() {\n\t\t\treturn path.NewErrorf(\"null value is not allowed\")\n\t\t}\n\n\t\t// If our target isn't a pointer then we will attempt to copy\n\t\t// the encapsulated value into it.\n\n\t\teType := val.Type().EncapsulatedType()\n\n\t\tif !eType.AssignableTo(target.Type()) {\n\t\t\t// Our interface contract promises that we won't expose Go\n\t\t\t// implementation details in error messages, so we need to keep\n\t\t\t// this vague. This can only arise if a calling application has\n\t\t\t// more than one capsule type in play and a user mixes them up.\n\t\t\treturn path.NewErrorf(\"incorrect type %s\", val.Type().FriendlyName())\n\t\t}\n\n\t\t// We know that EncapsulatedValue is always a pointer, so we\n\t\t// can safely call .Elem on its reflect.Value.\n\t\ttarget.Set(reflect.ValueOf(val.EncapsulatedValue()).Elem())\n\n\t\treturn nil\n\t}\n\n}\n\n// fromCtyPopulatePtr recognizes when target is a pointer type and allocates\n// a value to assign to that pointer, which it returns.\n//\n// If the given value has multiple levels of indirection, like **int, these\n// will be processed in turn so that the return value is guaranteed to be\n// a non-pointer.\n//\n// As an exception, if decodingNull is true then the returned value will be\n// the final level of pointer, if any, so that the caller can assign it\n// as nil to represent a null value. If the given target value is not a pointer\n// at all then the returned value will be just the given target, so the caller\n// must test if the returned value is a pointer before trying to assign nil\n// to it.\nfunc fromCtyPopulatePtr(target reflect.Value, decodingNull bool) reflect.Value {\n\tfor {\n\t\tif target.Kind() == reflect.Interface && !target.IsNil() {\n\t\t\te := target.Elem()\n\t\t\tif e.Kind() == reflect.Ptr && !e.IsNil() && (!decodingNull || e.Elem().Kind() == reflect.Ptr) {\n\t\t\t\ttarget = e\n\t\t\t}\n\t\t}\n\n\t\tif target.Kind() != reflect.Ptr {\n\t\t\tbreak\n\t\t}\n\n\t\t// Stop early if we're decodingNull and we've found our last indirection\n\t\tif target.Elem().Kind() != reflect.Ptr && decodingNull && target.CanSet() {\n\t\t\tbreak\n\t\t}\n\n\t\tif target.IsNil() {\n\t\t\ttarget.Set(reflect.New(target.Type().Elem()))\n\t\t}\n\n\t\ttarget = target.Elem()\n\t}\n\treturn target\n}\n\n// likelyRequiredTypesError returns an error that states which types are\n// acceptable by making some assumptions about what types we support for\n// each target Go kind. It's not a precise science but it allows us to return\n// an error message that is cty-user-oriented rather than Go-oriented.\n//\n// Generally these error messages should be a matter of last resort, since\n// the calling application should be validating user-provided value types\n// before decoding anyway.\nfunc likelyRequiredTypesError(path cty.Path, target reflect.Value) error {\n\tswitch target.Kind() {\n\n\tcase reflect.Bool:\n\t\treturn path.NewErrorf(\"bool value is required\")\n\n\tcase reflect.String:\n\t\treturn path.NewErrorf(\"string value is required\")\n\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\tfallthrough\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:\n\t\tfallthrough\n\tcase reflect.Float32, reflect.Float64:\n\t\treturn path.NewErrorf(\"number value is required\")\n\n\tcase reflect.Slice, reflect.Array:\n\t\treturn path.NewErrorf(\"list or set value is required\")\n\n\tcase reflect.Map:\n\t\treturn path.NewErrorf(\"map or object value is required\")\n\n\tcase reflect.Struct:\n\t\tswitch {\n\n\t\tcase target.Type().AssignableTo(bigFloatType) || target.Type().AssignableTo(bigIntType):\n\t\t\treturn path.NewErrorf(\"number value is required\")\n\n\t\tcase target.Type().AssignableTo(setType):\n\t\t\treturn path.NewErrorf(\"set or list value is required\")\n\n\t\tdefault:\n\t\t\treturn path.NewErrorf(\"object or tuple value is required\")\n\n\t\t}\n\n\tdefault:\n\t\t// We should avoid getting into this path, since this error\n\t\t// message is rather useless.\n\t\treturn path.NewErrorf(\"incorrect type\")\n\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/gocty/type_implied.go",
    "content": "package gocty\n\nimport (\n\t\"reflect\"\n\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// ImpliedType takes an arbitrary Go value (as an interface{}) and attempts\n// to find a suitable cty.Type instance that could be used for a conversion\n// with ToCtyValue.\n//\n// This allows -- for simple situations at least -- types to be defined just\n// once in Go and the cty types derived from the Go types, but in the process\n// it makes some assumptions that may be undesirable so applications are\n// encouraged to build their cty types directly if exacting control is\n// required.\n//\n// Not all Go types can be represented as cty types, so an error may be\n// returned which is usually considered to be a bug in the calling program.\n// In particular, ImpliedType will never use capsule types in its returned\n// type, because it cannot know the capsule types supported by the calling\n// program.\nfunc ImpliedType(gv interface{}) (cty.Type, error) {\n\trt := reflect.TypeOf(gv)\n\tvar path cty.Path\n\treturn impliedType(rt, path)\n}\n\nfunc impliedType(rt reflect.Type, path cty.Path) (cty.Type, error) {\n\tswitch rt.Kind() {\n\n\tcase reflect.Ptr:\n\t\treturn impliedType(rt.Elem(), path)\n\n\t// Primitive types\n\tcase reflect.Bool:\n\t\treturn cty.Bool, nil\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\treturn cty.Number, nil\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:\n\t\treturn cty.Number, nil\n\tcase reflect.Float32, reflect.Float64:\n\t\treturn cty.Number, nil\n\tcase reflect.String:\n\t\treturn cty.String, nil\n\n\t// Collection types\n\tcase reflect.Slice:\n\t\tpath := append(path, cty.IndexStep{Key: cty.UnknownVal(cty.Number)})\n\t\tety, err := impliedType(rt.Elem(), path)\n\t\tif err != nil {\n\t\t\treturn cty.NilType, err\n\t\t}\n\t\treturn cty.List(ety), nil\n\tcase reflect.Map:\n\t\tif !stringType.AssignableTo(rt.Key()) {\n\t\t\treturn cty.NilType, path.NewErrorf(\"no cty.Type for %s (must have string keys)\", rt)\n\t\t}\n\t\tpath := append(path, cty.IndexStep{Key: cty.UnknownVal(cty.String)})\n\t\tety, err := impliedType(rt.Elem(), path)\n\t\tif err != nil {\n\t\t\treturn cty.NilType, err\n\t\t}\n\t\treturn cty.Map(ety), nil\n\n\t// Structural types\n\tcase reflect.Struct:\n\t\treturn impliedStructType(rt, path)\n\n\tdefault:\n\t\treturn cty.NilType, path.NewErrorf(\"no cty.Type for %s\", rt)\n\t}\n}\n\nfunc impliedStructType(rt reflect.Type, path cty.Path) (cty.Type, error) {\n\tif valueType.AssignableTo(rt) {\n\t\t// Special case: cty.Value represents cty.DynamicPseudoType, for\n\t\t// type conformance checking.\n\t\treturn cty.DynamicPseudoType, nil\n\t}\n\n\tfieldIdxs := structTagIndices(rt)\n\tif len(fieldIdxs) == 0 {\n\t\treturn cty.NilType, path.NewErrorf(\"no cty.Type for %s (no cty field tags)\", rt)\n\t}\n\n\tatys := make(map[string]cty.Type, len(fieldIdxs))\n\n\t{\n\t\t// Temporary extension of path for attributes\n\t\tpath := append(path, nil)\n\n\t\tfor k, fi := range fieldIdxs {\n\t\t\tpath[len(path)-1] = cty.GetAttrStep{Name: k}\n\n\t\t\tft := rt.Field(fi).Type\n\t\t\taty, err := impliedType(ft, path)\n\t\t\tif err != nil {\n\t\t\t\treturn cty.NilType, err\n\t\t\t}\n\n\t\t\tatys[k] = aty\n\t\t}\n\t}\n\n\treturn cty.Object(atys), nil\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/helper.go",
    "content": "package cty\n\nimport (\n\t\"fmt\"\n)\n\n// anyUnknown is a helper to easily check if a set of values contains any\n// unknowns, for operations that short-circuit to return unknown in that case.\nfunc anyUnknown(values ...Value) bool {\n\tfor _, val := range values {\n\t\tif val.v == unknown {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// typeCheck tests whether all of the given values belong to the given type.\n// If the given types are a mixture of the given type and the dynamic\n// pseudo-type then a short-circuit dynamic value is returned. If the given\n// values are all of the correct type but at least one is unknown then\n// a short-circuit unknown value is returned. If any other types appear then\n// an error is returned. Otherwise (finally!) the result is nil, nil.\nfunc typeCheck(required Type, ret Type, values ...Value) (shortCircuit *Value, err error) {\n\thasDynamic := false\n\thasUnknown := false\n\n\tfor i, val := range values {\n\t\tif val.ty == DynamicPseudoType {\n\t\t\thasDynamic = true\n\t\t\tcontinue\n\t\t}\n\n\t\tif !val.Type().Equals(required) {\n\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\"type mismatch: want %s but value %d is %s\",\n\t\t\t\trequired.FriendlyName(),\n\t\t\t\ti, val.ty.FriendlyName(),\n\t\t\t)\n\t\t}\n\n\t\tif val.v == unknown {\n\t\t\thasUnknown = true\n\t\t}\n\t}\n\n\tif hasDynamic {\n\t\treturn &DynamicVal, nil\n\t}\n\n\tif hasUnknown {\n\t\tret := UnknownVal(ret)\n\t\treturn &ret, nil\n\t}\n\n\treturn nil, nil\n}\n\n// mustTypeCheck is a wrapper around typeCheck that immediately panics if\n// any error is returned.\nfunc mustTypeCheck(required Type, ret Type, values ...Value) *Value {\n\tshortCircuit, err := typeCheck(required, ret, values...)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn shortCircuit\n}\n\n// shortCircuitForceType takes the return value from mustTypeCheck and\n// replaces it with an unknown of the given type if the original value was\n// DynamicVal.\n//\n// This is useful for operations that are specified to always return a\n// particular type, since then a dynamic result can safely be \"upgrade\" to\n// a strongly-typed unknown, which then allows subsequent operations to\n// be actually type-checked.\n//\n// It is safe to use this only if the operation in question is defined as\n// returning either a value of the given type or panicking, since we know\n// then that subsequent operations won't run if the operation panics.\n//\n// If the given short-circuit value is *not* DynamicVal then it must be\n// of the given type, or this function will panic.\nfunc forceShortCircuitType(shortCircuit *Value, ty Type) *Value {\n\tif shortCircuit == nil {\n\t\treturn nil\n\t}\n\n\tif shortCircuit.ty == DynamicPseudoType {\n\t\tret := UnknownVal(ty)\n\t\treturn &ret\n\t}\n\n\tif !shortCircuit.ty.Equals(ty) {\n\t\tpanic(\"forceShortCircuitType got value of wrong type\")\n\t}\n\n\treturn shortCircuit\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/json/doc.go",
    "content": "// Package json provides functions for serializing cty types and values in\n// JSON format, and for decoding them again.\n//\n// Since the cty type system is a superset of the JSON type system,\n// round-tripping through JSON is lossy unless type information is provided\n// both at encoding time and decoding time. Callers of this package are\n// therefore suggested to define their expected structure as a cty.Type\n// and pass it in consistently both when encoding and when decoding, though\n// default (type-lossy) behavior is provided for situations where the precise\n// representation of the data is not significant.\npackage json\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/json/marshal.go",
    "content": "package json\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"sort\"\n\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\nfunc marshal(val cty.Value, t cty.Type, path cty.Path, b *bytes.Buffer) error {\n\t// If we're going to decode as DynamicPseudoType then we need to save\n\t// dynamic type information to recover the real type.\n\tif t == cty.DynamicPseudoType && val.Type() != cty.DynamicPseudoType {\n\t\treturn marshalDynamic(val, path, b)\n\t}\n\n\tif val.IsNull() {\n\t\tb.WriteString(\"null\")\n\t\treturn nil\n\t}\n\n\tif !val.IsKnown() {\n\t\treturn path.NewErrorf(\"value is not known\")\n\t}\n\n\t// The caller should've guaranteed that the given val is conformant with\n\t// the given type t, so we'll proceed under that assumption here.\n\n\tswitch {\n\tcase t.IsPrimitiveType():\n\t\tswitch t {\n\t\tcase cty.String:\n\t\t\tjson, err := json.Marshal(val.AsString())\n\t\t\tif err != nil {\n\t\t\t\treturn path.NewErrorf(\"failed to serialize value: %s\", err)\n\t\t\t}\n\t\t\tb.Write(json)\n\t\t\treturn nil\n\t\tcase cty.Number:\n\t\t\tif val.RawEquals(cty.PositiveInfinity) || val.RawEquals(cty.NegativeInfinity) {\n\t\t\t\treturn path.NewErrorf(\"cannot serialize infinity as JSON\")\n\t\t\t}\n\t\t\tb.WriteString(val.AsBigFloat().Text('f', -1))\n\t\t\treturn nil\n\t\tcase cty.Bool:\n\t\t\tif val.True() {\n\t\t\t\tb.WriteString(\"true\")\n\t\t\t} else {\n\t\t\t\tb.WriteString(\"false\")\n\t\t\t}\n\t\t\treturn nil\n\t\tdefault:\n\t\t\tpanic(\"unsupported primitive type\")\n\t\t}\n\tcase t.IsListType(), t.IsSetType():\n\t\tb.WriteRune('[')\n\t\tfirst := true\n\t\tety := t.ElementType()\n\t\tit := val.ElementIterator()\n\t\tpath := append(path, nil) // local override of 'path' with extra element\n\t\tfor it.Next() {\n\t\t\tif !first {\n\t\t\t\tb.WriteRune(',')\n\t\t\t}\n\t\t\tek, ev := it.Element()\n\t\t\tpath[len(path)-1] = cty.IndexStep{\n\t\t\t\tKey: ek,\n\t\t\t}\n\t\t\terr := marshal(ev, ety, path, b)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tfirst = false\n\t\t}\n\t\tb.WriteRune(']')\n\t\treturn nil\n\tcase t.IsMapType():\n\t\tb.WriteRune('{')\n\t\tfirst := true\n\t\tety := t.ElementType()\n\t\tit := val.ElementIterator()\n\t\tpath := append(path, nil) // local override of 'path' with extra element\n\t\tfor it.Next() {\n\t\t\tif !first {\n\t\t\t\tb.WriteRune(',')\n\t\t\t}\n\t\t\tek, ev := it.Element()\n\t\t\tpath[len(path)-1] = cty.IndexStep{\n\t\t\t\tKey: ek,\n\t\t\t}\n\t\t\tvar err error\n\t\t\terr = marshal(ek, ek.Type(), path, b)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tb.WriteRune(':')\n\t\t\terr = marshal(ev, ety, path, b)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tfirst = false\n\t\t}\n\t\tb.WriteRune('}')\n\t\treturn nil\n\tcase t.IsTupleType():\n\t\tb.WriteRune('[')\n\t\tetys := t.TupleElementTypes()\n\t\tit := val.ElementIterator()\n\t\tpath := append(path, nil) // local override of 'path' with extra element\n\t\ti := 0\n\t\tfor it.Next() {\n\t\t\tif i > 0 {\n\t\t\t\tb.WriteRune(',')\n\t\t\t}\n\t\t\tety := etys[i]\n\t\t\tek, ev := it.Element()\n\t\t\tpath[len(path)-1] = cty.IndexStep{\n\t\t\t\tKey: ek,\n\t\t\t}\n\t\t\terr := marshal(ev, ety, path, b)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\ti++\n\t\t}\n\t\tb.WriteRune(']')\n\t\treturn nil\n\tcase t.IsObjectType():\n\t\tb.WriteRune('{')\n\t\tatys := t.AttributeTypes()\n\t\tpath := append(path, nil) // local override of 'path' with extra element\n\n\t\tnames := make([]string, 0, len(atys))\n\t\tfor k := range atys {\n\t\t\tnames = append(names, k)\n\t\t}\n\t\tsort.Strings(names)\n\n\t\tfor i, k := range names {\n\t\t\taty := atys[k]\n\t\t\tif i > 0 {\n\t\t\t\tb.WriteRune(',')\n\t\t\t}\n\t\t\tav := val.GetAttr(k)\n\t\t\tpath[len(path)-1] = cty.GetAttrStep{\n\t\t\t\tName: k,\n\t\t\t}\n\t\t\tvar err error\n\t\t\terr = marshal(cty.StringVal(k), cty.String, path, b)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tb.WriteRune(':')\n\t\t\terr = marshal(av, aty, path, b)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t\tb.WriteRune('}')\n\t\treturn nil\n\tcase t.IsCapsuleType():\n\t\trawVal := val.EncapsulatedValue()\n\t\tjsonVal, err := json.Marshal(rawVal)\n\t\tif err != nil {\n\t\t\treturn path.NewError(err)\n\t\t}\n\t\tb.Write(jsonVal)\n\t\treturn nil\n\tdefault:\n\t\t// should never happen\n\t\treturn path.NewErrorf(\"cannot JSON-serialize %s\", t.FriendlyName())\n\t}\n}\n\n// marshalDynamic adds an extra wrapping object containing dynamic type\n// information for the given value.\nfunc marshalDynamic(val cty.Value, path cty.Path, b *bytes.Buffer) error {\n\ttypeJSON, err := MarshalType(val.Type())\n\tif err != nil {\n\t\treturn path.NewErrorf(\"failed to serialize type: %s\", err)\n\t}\n\tb.WriteString(`{\"value\":`)\n\tmarshal(val, val.Type(), path, b)\n\tb.WriteString(`,\"type\":`)\n\tb.Write(typeJSON)\n\tb.WriteRune('}')\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/json/simple.go",
    "content": "package json\n\nimport (\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// SimpleJSONValue is a wrapper around cty.Value that adds implementations of\n// json.Marshaler and json.Unmarshaler for simple-but-type-lossy automatic\n// encoding and decoding of values.\n//\n// The couplet Marshal and Unmarshal both take extra type information to\n// inform the encoding and decoding process so that all of the cty types\n// can be represented even though JSON's type system is a subset.\n//\n// SimpleJSONValue instead takes the approach of discarding the value's type\n// information and then deriving a new type from the stored structure when\n// decoding. This results in the same data being returned but not necessarily\n// with exactly the same type.\n//\n// For information on how types are inferred when decoding, see the\n// documentation of the function ImpliedType.\ntype SimpleJSONValue struct {\n\tcty.Value\n}\n\n// MarshalJSON is an implementation of json.Marshaler. See the documentation\n// of SimpleJSONValue for more information.\nfunc (v SimpleJSONValue) MarshalJSON() ([]byte, error) {\n\treturn Marshal(v.Value, v.Type())\n}\n\n// UnmarshalJSON is an implementation of json.Unmarshaler. See the\n// documentation of SimpleJSONValue for more information.\nfunc (v *SimpleJSONValue) UnmarshalJSON(buf []byte) error {\n\tt, err := ImpliedType(buf)\n\tif err != nil {\n\t\treturn err\n\t}\n\tv.Value, err = Unmarshal(buf, t)\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/json/type.go",
    "content": "package json\n\nimport (\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// MarshalType returns a JSON serialization of the given type.\n//\n// This is just a thin wrapper around t.MarshalJSON, for symmetry with\n// UnmarshalType.\nfunc MarshalType(t cty.Type) ([]byte, error) {\n\treturn t.MarshalJSON()\n}\n\n// UnmarshalType decodes a JSON serialization of the given type as produced\n// by either Type.MarshalJSON or MarshalType.\n//\n// This is a convenience wrapper around Type.UnmarshalJSON.\nfunc UnmarshalType(buf []byte) (cty.Type, error) {\n\tvar t cty.Type\n\terr := t.UnmarshalJSON(buf)\n\treturn t, err\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/json/type_implied.go",
    "content": "package json\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"fmt\"\n\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// ImpliedType returns the cty Type implied by the structure of the given\n// JSON-compliant buffer. This function implements the default type mapping\n// behavior used when decoding arbitrary JSON without explicit cty Type\n// information.\n//\n// The rules are as follows:\n//\n// JSON strings, numbers and bools map to their equivalent primitive type in\n// cty.\n//\n// JSON objects map to cty object types, with the attributes defined by the\n// object keys and the types of their values.\n//\n// JSON arrays map to cty tuple types, with the elements defined by the\n// types of the array members.\n//\n// Any nulls are typed as DynamicPseudoType, so callers of this function\n// must be prepared to deal with this. Callers that do not wish to deal with\n// dynamic typing should not use this function and should instead describe\n// their required types explicitly with a cty.Type instance when decoding.\n//\n// Any JSON syntax errors will be returned as an error, and the type will\n// be the invalid value cty.NilType.\nfunc ImpliedType(buf []byte) (cty.Type, error) {\n\tr := bytes.NewReader(buf)\n\tdec := json.NewDecoder(r)\n\tdec.UseNumber()\n\n\tty, err := impliedType(dec)\n\tif err != nil {\n\t\treturn cty.NilType, err\n\t}\n\n\tif dec.More() {\n\t\treturn cty.NilType, fmt.Errorf(\"extraneous data after JSON object\")\n\t}\n\n\treturn ty, nil\n}\n\nfunc impliedType(dec *json.Decoder) (cty.Type, error) {\n\ttok, err := dec.Token()\n\tif err != nil {\n\t\treturn cty.NilType, err\n\t}\n\n\treturn impliedTypeForTok(tok, dec)\n}\n\nfunc impliedTypeForTok(tok json.Token, dec *json.Decoder) (cty.Type, error) {\n\tif tok == nil {\n\t\treturn cty.DynamicPseudoType, nil\n\t}\n\n\tswitch ttok := tok.(type) {\n\tcase bool:\n\t\treturn cty.Bool, nil\n\n\tcase json.Number:\n\t\treturn cty.Number, nil\n\n\tcase string:\n\t\treturn cty.String, nil\n\n\tcase json.Delim:\n\n\t\tswitch rune(ttok) {\n\t\tcase '{':\n\t\t\treturn impliedObjectType(dec)\n\t\tcase '[':\n\t\t\treturn impliedTupleType(dec)\n\t\tdefault:\n\t\t\treturn cty.NilType, fmt.Errorf(\"unexpected token %q\", ttok)\n\t\t}\n\n\tdefault:\n\t\treturn cty.NilType, fmt.Errorf(\"unsupported JSON token %#v\", tok)\n\t}\n}\n\nfunc impliedObjectType(dec *json.Decoder) (cty.Type, error) {\n\t// By the time we get in here, we've already consumed the { delimiter\n\t// and so our next token should be the first object key.\n\n\tvar atys map[string]cty.Type\n\n\tfor {\n\t\t// Read the object key first\n\t\ttok, err := dec.Token()\n\t\tif err != nil {\n\t\t\treturn cty.NilType, err\n\t\t}\n\n\t\tif ttok, ok := tok.(json.Delim); ok {\n\t\t\tif rune(ttok) != '}' {\n\t\t\t\treturn cty.NilType, fmt.Errorf(\"unexpected delimiter %q\", ttok)\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\n\t\tkey, ok := tok.(string)\n\t\tif !ok {\n\t\t\treturn cty.NilType, fmt.Errorf(\"expected string but found %T\", tok)\n\t\t}\n\n\t\t// Now read the value\n\t\ttok, err = dec.Token()\n\t\tif err != nil {\n\t\t\treturn cty.NilType, err\n\t\t}\n\n\t\taty, err := impliedTypeForTok(tok, dec)\n\t\tif err != nil {\n\t\t\treturn cty.NilType, err\n\t\t}\n\n\t\tif atys == nil {\n\t\t\tatys = make(map[string]cty.Type)\n\t\t}\n\t\tatys[key] = aty\n\t}\n\n\tif len(atys) == 0 {\n\t\treturn cty.EmptyObject, nil\n\t}\n\n\treturn cty.Object(atys), nil\n}\n\nfunc impliedTupleType(dec *json.Decoder) (cty.Type, error) {\n\t// By the time we get in here, we've already consumed the [ delimiter\n\t// and so our next token should be the first value.\n\n\tvar etys []cty.Type\n\n\tfor {\n\t\ttok, err := dec.Token()\n\t\tif err != nil {\n\t\t\treturn cty.NilType, err\n\t\t}\n\n\t\tif ttok, ok := tok.(json.Delim); ok {\n\t\t\tif rune(ttok) == ']' {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\tety, err := impliedTypeForTok(tok, dec)\n\t\tif err != nil {\n\t\t\treturn cty.NilType, err\n\t\t}\n\t\tetys = append(etys, ety)\n\t}\n\n\tif len(etys) == 0 {\n\t\treturn cty.EmptyTuple, nil\n\t}\n\n\treturn cty.Tuple(etys), nil\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/json/unmarshal.go",
    "content": "package json\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"reflect\"\n\n\t\"github.com/zclconf/go-cty/cty\"\n\t\"github.com/zclconf/go-cty/cty/convert\"\n)\n\nfunc unmarshal(buf []byte, t cty.Type, path cty.Path) (cty.Value, error) {\n\tdec := bufDecoder(buf)\n\n\ttok, err := dec.Token()\n\tif err != nil {\n\t\treturn cty.NilVal, path.NewError(err)\n\t}\n\n\tif tok == nil {\n\t\treturn cty.NullVal(t), nil\n\t}\n\n\tif t == cty.DynamicPseudoType {\n\t\treturn unmarshalDynamic(buf, path)\n\t}\n\n\tswitch {\n\tcase t.IsPrimitiveType():\n\t\tval, err := unmarshalPrimitive(tok, t, path)\n\t\tif err != nil {\n\t\t\treturn cty.NilVal, err\n\t\t}\n\t\treturn val, nil\n\tcase t.IsListType():\n\t\treturn unmarshalList(buf, t.ElementType(), path)\n\tcase t.IsSetType():\n\t\treturn unmarshalSet(buf, t.ElementType(), path)\n\tcase t.IsMapType():\n\t\treturn unmarshalMap(buf, t.ElementType(), path)\n\tcase t.IsTupleType():\n\t\treturn unmarshalTuple(buf, t.TupleElementTypes(), path)\n\tcase t.IsObjectType():\n\t\treturn unmarshalObject(buf, t.AttributeTypes(), path)\n\tcase t.IsCapsuleType():\n\t\treturn unmarshalCapsule(buf, t, path)\n\tdefault:\n\t\treturn cty.NilVal, path.NewErrorf(\"unsupported type %s\", t.FriendlyName())\n\t}\n}\n\nfunc unmarshalPrimitive(tok json.Token, t cty.Type, path cty.Path) (cty.Value, error) {\n\n\tswitch t {\n\tcase cty.Bool:\n\t\tswitch v := tok.(type) {\n\t\tcase bool:\n\t\t\treturn cty.BoolVal(v), nil\n\t\tcase string:\n\t\t\tval, err := convert.Convert(cty.StringVal(v), t)\n\t\t\tif err != nil {\n\t\t\t\treturn cty.NilVal, path.NewError(err)\n\t\t\t}\n\t\t\treturn val, nil\n\t\tdefault:\n\t\t\treturn cty.NilVal, path.NewErrorf(\"bool is required\")\n\t\t}\n\tcase cty.Number:\n\t\tif v, ok := tok.(json.Number); ok {\n\t\t\ttok = string(v)\n\t\t}\n\t\tswitch v := tok.(type) {\n\t\tcase string:\n\t\t\tval, err := cty.ParseNumberVal(v)\n\t\t\tif err != nil {\n\t\t\t\treturn cty.NilVal, path.NewError(err)\n\t\t\t}\n\t\t\treturn val, nil\n\t\tdefault:\n\t\t\treturn cty.NilVal, path.NewErrorf(\"number is required\")\n\t\t}\n\tcase cty.String:\n\t\tswitch v := tok.(type) {\n\t\tcase string:\n\t\t\treturn cty.StringVal(v), nil\n\t\tcase json.Number:\n\t\t\treturn cty.StringVal(string(v)), nil\n\t\tcase bool:\n\t\t\tval, err := convert.Convert(cty.BoolVal(v), t)\n\t\t\tif err != nil {\n\t\t\t\treturn cty.NilVal, path.NewError(err)\n\t\t\t}\n\t\t\treturn val, nil\n\t\tdefault:\n\t\t\treturn cty.NilVal, path.NewErrorf(\"string is required\")\n\t\t}\n\tdefault:\n\t\t// should never happen\n\t\tpanic(\"unsupported primitive type\")\n\t}\n}\n\nfunc unmarshalList(buf []byte, ety cty.Type, path cty.Path) (cty.Value, error) {\n\tdec := bufDecoder(buf)\n\tif err := requireDelim(dec, '['); err != nil {\n\t\treturn cty.NilVal, path.NewError(err)\n\t}\n\n\tvar vals []cty.Value\n\n\t{\n\t\tpath := append(path, nil)\n\t\tvar idx int64\n\n\t\tfor dec.More() {\n\t\t\tpath[len(path)-1] = cty.IndexStep{\n\t\t\t\tKey: cty.NumberIntVal(idx),\n\t\t\t}\n\t\t\tidx++\n\n\t\t\trawVal, err := readRawValue(dec)\n\t\t\tif err != nil {\n\t\t\t\treturn cty.NilVal, path.NewErrorf(\"failed to read list value: %s\", err)\n\t\t\t}\n\n\t\t\tel, err := unmarshal(rawVal, ety, path)\n\t\t\tif err != nil {\n\t\t\t\treturn cty.NilVal, err\n\t\t\t}\n\n\t\t\tvals = append(vals, el)\n\t\t}\n\t}\n\n\tif err := requireDelim(dec, ']'); err != nil {\n\t\treturn cty.NilVal, path.NewError(err)\n\t}\n\n\tif len(vals) == 0 {\n\t\treturn cty.ListValEmpty(ety), nil\n\t}\n\n\treturn cty.ListVal(vals), nil\n}\n\nfunc unmarshalSet(buf []byte, ety cty.Type, path cty.Path) (cty.Value, error) {\n\tdec := bufDecoder(buf)\n\tif err := requireDelim(dec, '['); err != nil {\n\t\treturn cty.NilVal, path.NewError(err)\n\t}\n\n\tvar vals []cty.Value\n\n\t{\n\t\tpath := append(path, nil)\n\n\t\tfor dec.More() {\n\t\t\tpath[len(path)-1] = cty.IndexStep{\n\t\t\t\tKey: cty.UnknownVal(ety),\n\t\t\t}\n\n\t\t\trawVal, err := readRawValue(dec)\n\t\t\tif err != nil {\n\t\t\t\treturn cty.NilVal, path.NewErrorf(\"failed to read set value: %s\", err)\n\t\t\t}\n\n\t\t\tel, err := unmarshal(rawVal, ety, path)\n\t\t\tif err != nil {\n\t\t\t\treturn cty.NilVal, err\n\t\t\t}\n\n\t\t\tvals = append(vals, el)\n\t\t}\n\t}\n\n\tif err := requireDelim(dec, ']'); err != nil {\n\t\treturn cty.NilVal, path.NewError(err)\n\t}\n\n\tif len(vals) == 0 {\n\t\treturn cty.SetValEmpty(ety), nil\n\t}\n\n\treturn cty.SetVal(vals), nil\n}\n\nfunc unmarshalMap(buf []byte, ety cty.Type, path cty.Path) (cty.Value, error) {\n\tdec := bufDecoder(buf)\n\tif err := requireDelim(dec, '{'); err != nil {\n\t\treturn cty.NilVal, path.NewError(err)\n\t}\n\n\tvals := make(map[string]cty.Value)\n\n\t{\n\t\tpath := append(path, nil)\n\n\t\tfor dec.More() {\n\t\t\tpath[len(path)-1] = cty.IndexStep{\n\t\t\t\tKey: cty.UnknownVal(cty.String),\n\t\t\t}\n\n\t\t\tvar err error\n\n\t\t\tk, err := requireObjectKey(dec)\n\t\t\tif err != nil {\n\t\t\t\treturn cty.NilVal, path.NewErrorf(\"failed to read map key: %s\", err)\n\t\t\t}\n\n\t\t\tpath[len(path)-1] = cty.IndexStep{\n\t\t\t\tKey: cty.StringVal(k),\n\t\t\t}\n\n\t\t\trawVal, err := readRawValue(dec)\n\t\t\tif err != nil {\n\t\t\t\treturn cty.NilVal, path.NewErrorf(\"failed to read map value: %s\", err)\n\t\t\t}\n\n\t\t\tel, err := unmarshal(rawVal, ety, path)\n\t\t\tif err != nil {\n\t\t\t\treturn cty.NilVal, err\n\t\t\t}\n\n\t\t\tvals[k] = el\n\t\t}\n\t}\n\n\tif err := requireDelim(dec, '}'); err != nil {\n\t\treturn cty.NilVal, path.NewError(err)\n\t}\n\n\tif len(vals) == 0 {\n\t\treturn cty.MapValEmpty(ety), nil\n\t}\n\n\treturn cty.MapVal(vals), nil\n}\n\nfunc unmarshalTuple(buf []byte, etys []cty.Type, path cty.Path) (cty.Value, error) {\n\tdec := bufDecoder(buf)\n\tif err := requireDelim(dec, '['); err != nil {\n\t\treturn cty.NilVal, path.NewError(err)\n\t}\n\n\tvar vals []cty.Value\n\n\t{\n\t\tpath := append(path, nil)\n\t\tvar idx int\n\n\t\tfor dec.More() {\n\t\t\tif idx >= len(etys) {\n\t\t\t\treturn cty.NilVal, path[:len(path)-1].NewErrorf(\"too many tuple elements (need %d)\", len(etys))\n\t\t\t}\n\n\t\t\tpath[len(path)-1] = cty.IndexStep{\n\t\t\t\tKey: cty.NumberIntVal(int64(idx)),\n\t\t\t}\n\t\t\tety := etys[idx]\n\t\t\tidx++\n\n\t\t\trawVal, err := readRawValue(dec)\n\t\t\tif err != nil {\n\t\t\t\treturn cty.NilVal, path.NewErrorf(\"failed to read tuple value: %s\", err)\n\t\t\t}\n\n\t\t\tel, err := unmarshal(rawVal, ety, path)\n\t\t\tif err != nil {\n\t\t\t\treturn cty.NilVal, err\n\t\t\t}\n\n\t\t\tvals = append(vals, el)\n\t\t}\n\t}\n\n\tif err := requireDelim(dec, ']'); err != nil {\n\t\treturn cty.NilVal, path.NewError(err)\n\t}\n\n\tif len(vals) != len(etys) {\n\t\treturn cty.NilVal, path[:len(path)-1].NewErrorf(\"not enough tuple elements (need %d)\", len(etys))\n\t}\n\n\tif len(vals) == 0 {\n\t\treturn cty.EmptyTupleVal, nil\n\t}\n\n\treturn cty.TupleVal(vals), nil\n}\n\nfunc unmarshalObject(buf []byte, atys map[string]cty.Type, path cty.Path) (cty.Value, error) {\n\tdec := bufDecoder(buf)\n\tif err := requireDelim(dec, '{'); err != nil {\n\t\treturn cty.NilVal, path.NewError(err)\n\t}\n\n\tvals := make(map[string]cty.Value)\n\n\t{\n\t\tobjPath := path           // some errors report from the object's perspective\n\t\tpath := append(path, nil) // path to a specific attribute\n\n\t\tfor dec.More() {\n\n\t\t\tvar err error\n\n\t\t\tk, err := requireObjectKey(dec)\n\t\t\tif err != nil {\n\t\t\t\treturn cty.NilVal, path.NewErrorf(\"failed to read object key: %s\", err)\n\t\t\t}\n\n\t\t\taty, ok := atys[k]\n\t\t\tif !ok {\n\t\t\t\treturn cty.NilVal, objPath.NewErrorf(\"unsupported attribute %q\", k)\n\t\t\t}\n\n\t\t\tpath[len(path)-1] = cty.GetAttrStep{\n\t\t\t\tName: k,\n\t\t\t}\n\n\t\t\trawVal, err := readRawValue(dec)\n\t\t\tif err != nil {\n\t\t\t\treturn cty.NilVal, path.NewErrorf(\"failed to read object value: %s\", err)\n\t\t\t}\n\n\t\t\tel, err := unmarshal(rawVal, aty, path)\n\t\t\tif err != nil {\n\t\t\t\treturn cty.NilVal, err\n\t\t\t}\n\n\t\t\tvals[k] = el\n\t\t}\n\t}\n\n\tif err := requireDelim(dec, '}'); err != nil {\n\t\treturn cty.NilVal, path.NewError(err)\n\t}\n\n\t// Make sure we have a value for every attribute\n\tfor k, aty := range atys {\n\t\tif _, exists := vals[k]; !exists {\n\t\t\tvals[k] = cty.NullVal(aty)\n\t\t}\n\t}\n\n\tif len(vals) == 0 {\n\t\treturn cty.EmptyObjectVal, nil\n\t}\n\n\treturn cty.ObjectVal(vals), nil\n}\n\nfunc unmarshalCapsule(buf []byte, t cty.Type, path cty.Path) (cty.Value, error) {\n\trawType := t.EncapsulatedType()\n\tptrPtr := reflect.New(reflect.PtrTo(rawType))\n\tptrPtr.Elem().Set(reflect.New(rawType))\n\tptr := ptrPtr.Elem().Interface()\n\terr := json.Unmarshal(buf, ptr)\n\tif err != nil {\n\t\treturn cty.NilVal, path.NewError(err)\n\t}\n\n\treturn cty.CapsuleVal(t, ptr), nil\n}\n\nfunc unmarshalDynamic(buf []byte, path cty.Path) (cty.Value, error) {\n\tdec := bufDecoder(buf)\n\tif err := requireDelim(dec, '{'); err != nil {\n\t\treturn cty.NilVal, path.NewError(err)\n\t}\n\n\tvar t cty.Type\n\tvar valBody []byte // defer actual decoding until we know the type\n\n\tfor dec.More() {\n\t\tvar err error\n\n\t\tkey, err := requireObjectKey(dec)\n\t\tif err != nil {\n\t\t\treturn cty.NilVal, path.NewErrorf(\"failed to read dynamic type descriptor key: %s\", err)\n\t\t}\n\n\t\trawVal, err := readRawValue(dec)\n\t\tif err != nil {\n\t\t\treturn cty.NilVal, path.NewErrorf(\"failed to read dynamic type descriptor value: %s\", err)\n\t\t}\n\n\t\tswitch key {\n\t\tcase \"type\":\n\t\t\terr := json.Unmarshal(rawVal, &t)\n\t\t\tif err != nil {\n\t\t\t\treturn cty.NilVal, path.NewErrorf(\"failed to decode type for dynamic value: %s\", err)\n\t\t\t}\n\t\tcase \"value\":\n\t\t\tvalBody = rawVal\n\t\tdefault:\n\t\t\treturn cty.NilVal, path.NewErrorf(\"invalid key %q in dynamically-typed value\", key)\n\t\t}\n\n\t}\n\n\tif err := requireDelim(dec, '}'); err != nil {\n\t\treturn cty.NilVal, path.NewError(err)\n\t}\n\n\tif t == cty.NilType {\n\t\treturn cty.NilVal, path.NewErrorf(\"missing type in dynamically-typed value\")\n\t}\n\tif valBody == nil {\n\t\treturn cty.NilVal, path.NewErrorf(\"missing value in dynamically-typed value\")\n\t}\n\n\tval, err := Unmarshal([]byte(valBody), t)\n\tif err != nil {\n\t\treturn cty.NilVal, path.NewError(err)\n\t}\n\treturn val, nil\n}\n\nfunc requireDelim(dec *json.Decoder, d rune) error {\n\ttok, err := dec.Token()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif tok != json.Delim(d) {\n\t\treturn fmt.Errorf(\"missing expected %c\", d)\n\t}\n\n\treturn nil\n}\n\nfunc requireObjectKey(dec *json.Decoder) (string, error) {\n\ttok, err := dec.Token()\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tif s, ok := tok.(string); ok {\n\t\treturn s, nil\n\t}\n\treturn \"\", fmt.Errorf(\"missing expected object key\")\n}\n\nfunc readRawValue(dec *json.Decoder) ([]byte, error) {\n\tvar rawVal json.RawMessage\n\terr := dec.Decode(&rawVal)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn []byte(rawVal), nil\n}\n\nfunc bufDecoder(buf []byte) *json.Decoder {\n\tr := bytes.NewReader(buf)\n\tdec := json.NewDecoder(r)\n\tdec.UseNumber()\n\treturn dec\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/json/value.go",
    "content": "package json\n\nimport (\n\t\"bytes\"\n\n\t\"github.com/zclconf/go-cty/cty\"\n\t\"github.com/zclconf/go-cty/cty/convert\"\n)\n\n// Marshal produces a JSON representation of the given value that can later\n// be decoded into a value of the given type.\n//\n// A type is specified separately to allow for the given type to include\n// cty.DynamicPseudoType to represent situations where any type is permitted\n// and so type information must be included to allow recovery of the stored\n// structure when decoding.\n//\n// The given type will also be used to attempt automatic conversions of any\n// non-conformant types in the given value, although this will not always\n// be possible. If the value cannot be made to be conformant then an error is\n// returned, which may be a cty.PathError.\n//\n// Capsule-typed values can be marshalled, but with some caveats. Since\n// capsule values are compared by pointer equality, it is impossible to recover\n// a value that will compare equal to the original value. Additionally,\n// it's not possible to JSON-serialize the capsule type itself, so it's not\n// valid to use capsule types within parts of the value that are conformed to\n// cty.DynamicPseudoType. Otherwise, a capsule value can be used as long as\n// the encapsulated type itself is serializable with the Marshal function\n// in encoding/json.\nfunc Marshal(val cty.Value, t cty.Type) ([]byte, error) {\n\terrs := val.Type().TestConformance(t)\n\tif errs != nil {\n\t\t// Attempt a conversion\n\t\tvar err error\n\t\tval, err = convert.Convert(val, t)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\t// From this point onward, val can be assumed to be conforming to t.\n\n\tbuf := &bytes.Buffer{}\n\tvar path cty.Path\n\terr := marshal(val, t, path, buf)\n\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn buf.Bytes(), nil\n}\n\n// Unmarshal decodes a JSON representation of the given value into a cty Value\n// conforming to the given type.\n//\n// While decoding, type conversions will be done where possible to make\n// the result conformant even if the types given in JSON are not exactly\n// correct. If conversion isn't possible then an error is returned, which\n// may be a cty.PathError.\nfunc Unmarshal(buf []byte, t cty.Type) (cty.Value, error) {\n\tvar path cty.Path\n\treturn unmarshal(buf, t, path)\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/json.go",
    "content": "package cty\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"fmt\"\n)\n\n// MarshalJSON is an implementation of json.Marshaler that allows Type\n// instances to be serialized as JSON.\n//\n// All standard types can be serialized, but capsule types cannot since there\n// is no way to automatically recover the original pointer and capsule types\n// compare by equality.\nfunc (t Type) MarshalJSON() ([]byte, error) {\n\tswitch impl := t.typeImpl.(type) {\n\tcase primitiveType:\n\t\tswitch impl.Kind {\n\t\tcase primitiveTypeBool:\n\t\t\treturn []byte{'\"', 'b', 'o', 'o', 'l', '\"'}, nil\n\t\tcase primitiveTypeNumber:\n\t\t\treturn []byte{'\"', 'n', 'u', 'm', 'b', 'e', 'r', '\"'}, nil\n\t\tcase primitiveTypeString:\n\t\t\treturn []byte{'\"', 's', 't', 'r', 'i', 'n', 'g', '\"'}, nil\n\t\tdefault:\n\t\t\tpanic(\"unknown primitive type kind\")\n\t\t}\n\tcase typeList, typeMap, typeSet:\n\t\tbuf := &bytes.Buffer{}\n\t\tetyJSON, err := t.ElementType().MarshalJSON()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tbuf.WriteRune('[')\n\t\tswitch impl.(type) {\n\t\tcase typeList:\n\t\t\tbuf.WriteString(`\"list\"`)\n\t\tcase typeMap:\n\t\t\tbuf.WriteString(`\"map\"`)\n\t\tcase typeSet:\n\t\t\tbuf.WriteString(`\"set\"`)\n\t\t}\n\t\tbuf.WriteRune(',')\n\t\tbuf.Write(etyJSON)\n\t\tbuf.WriteRune(']')\n\t\treturn buf.Bytes(), nil\n\tcase typeObject:\n\t\tbuf := &bytes.Buffer{}\n\t\tatysJSON, err := json.Marshal(t.AttributeTypes())\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tbuf.WriteString(`[\"object\",`)\n\t\tbuf.Write(atysJSON)\n\t\tbuf.WriteRune(']')\n\t\treturn buf.Bytes(), nil\n\tcase typeTuple:\n\t\tbuf := &bytes.Buffer{}\n\t\tetysJSON, err := json.Marshal(t.TupleElementTypes())\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tbuf.WriteString(`[\"tuple\",`)\n\t\tbuf.Write(etysJSON)\n\t\tbuf.WriteRune(']')\n\t\treturn buf.Bytes(), nil\n\tcase pseudoTypeDynamic:\n\t\treturn []byte{'\"', 'd', 'y', 'n', 'a', 'm', 'i', 'c', '\"'}, nil\n\tcase *capsuleType:\n\t\treturn nil, fmt.Errorf(\"type not allowed: %s\", t.FriendlyName())\n\tdefault:\n\t\t// should never happen\n\t\tpanic(\"unknown type implementation\")\n\t}\n}\n\n// UnmarshalJSON is the opposite of MarshalJSON. See the documentation of\n// MarshalJSON for information on the limitations of JSON serialization of\n// types.\nfunc (t *Type) UnmarshalJSON(buf []byte) error {\n\tr := bytes.NewReader(buf)\n\tdec := json.NewDecoder(r)\n\n\ttok, err := dec.Token()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tswitch v := tok.(type) {\n\tcase string:\n\t\tswitch v {\n\t\tcase \"bool\":\n\t\t\t*t = Bool\n\t\tcase \"number\":\n\t\t\t*t = Number\n\t\tcase \"string\":\n\t\t\t*t = String\n\t\tcase \"dynamic\":\n\t\t\t*t = DynamicPseudoType\n\t\tdefault:\n\t\t\treturn fmt.Errorf(\"invalid primitive type name %q\", v)\n\t\t}\n\n\t\tif dec.More() {\n\t\t\treturn fmt.Errorf(\"extraneous data after type description\")\n\t\t}\n\t\treturn nil\n\tcase json.Delim:\n\t\tif rune(v) != '[' {\n\t\t\treturn fmt.Errorf(\"invalid complex type description\")\n\t\t}\n\n\t\ttok, err = dec.Token()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tkind, ok := tok.(string)\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"invalid complex type kind name\")\n\t\t}\n\n\t\tswitch kind {\n\t\tcase \"list\":\n\t\t\tvar ety Type\n\t\t\terr = dec.Decode(&ety)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\t*t = List(ety)\n\t\tcase \"map\":\n\t\t\tvar ety Type\n\t\t\terr = dec.Decode(&ety)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\t*t = Map(ety)\n\t\tcase \"set\":\n\t\t\tvar ety Type\n\t\t\terr = dec.Decode(&ety)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\t*t = Set(ety)\n\t\tcase \"object\":\n\t\t\tvar atys map[string]Type\n\t\t\terr = dec.Decode(&atys)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\t*t = Object(atys)\n\t\tcase \"tuple\":\n\t\t\tvar etys []Type\n\t\t\terr = dec.Decode(&etys)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\t*t = Tuple(etys)\n\t\tdefault:\n\t\t\treturn fmt.Errorf(\"invalid complex type kind name\")\n\t\t}\n\n\t\ttok, err = dec.Token()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif delim, ok := tok.(json.Delim); !ok || rune(delim) != ']' || dec.More() {\n\t\t\treturn fmt.Errorf(\"unexpected extra data in type description\")\n\t\t}\n\n\t\treturn nil\n\n\tdefault:\n\t\treturn fmt.Errorf(\"invalid type description\")\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/list_type.go",
    "content": "package cty\n\nimport (\n\t\"fmt\"\n)\n\n// TypeList instances represent specific list types. Each distinct ElementType\n// creates a distinct, non-equal list type.\ntype typeList struct {\n\ttypeImplSigil\n\tElementTypeT Type\n}\n\n// List creates a map type with the given element Type.\n//\n// List types are CollectionType implementations.\nfunc List(elem Type) Type {\n\treturn Type{\n\t\ttypeList{\n\t\t\tElementTypeT: elem,\n\t\t},\n\t}\n}\n\n// Equals returns true if the other Type is a list whose element type is\n// equal to that of the receiver.\nfunc (t typeList) Equals(other Type) bool {\n\tot, isList := other.typeImpl.(typeList)\n\tif !isList {\n\t\treturn false\n\t}\n\n\treturn t.ElementTypeT.Equals(ot.ElementTypeT)\n}\n\nfunc (t typeList) FriendlyName(mode friendlyTypeNameMode) string {\n\telemName := t.ElementTypeT.friendlyNameMode(mode)\n\tif mode == friendlyTypeConstraintName {\n\t\tif t.ElementTypeT == DynamicPseudoType {\n\t\t\telemName = \"any single type\"\n\t\t}\n\t}\n\treturn \"list of \" + elemName\n}\n\nfunc (t typeList) ElementType() Type {\n\treturn t.ElementTypeT\n}\n\nfunc (t typeList) GoString() string {\n\treturn fmt.Sprintf(\"cty.List(%#v)\", t.ElementTypeT)\n}\n\n// IsListType returns true if the given type is a list type, regardless of its\n// element type.\nfunc (t Type) IsListType() bool {\n\t_, ok := t.typeImpl.(typeList)\n\treturn ok\n}\n\n// ListElementType is a convenience method that checks if the given type is\n// a list type, returning a pointer to its element type if so and nil\n// otherwise. This is intended to allow convenient conditional branches,\n// like so:\n//\n//     if et := t.ListElementType(); et != nil {\n//         // Do something with *et\n//     }\nfunc (t Type) ListElementType() *Type {\n\tif lt, ok := t.typeImpl.(typeList); ok {\n\t\treturn &lt.ElementTypeT\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/map_type.go",
    "content": "package cty\n\nimport (\n\t\"fmt\"\n)\n\n// TypeList instances represent specific list types. Each distinct ElementType\n// creates a distinct, non-equal list type.\ntype typeMap struct {\n\ttypeImplSigil\n\tElementTypeT Type\n}\n\n// Map creates a map type with the given element Type.\n//\n// Map types are CollectionType implementations.\nfunc Map(elem Type) Type {\n\treturn Type{\n\t\ttypeMap{\n\t\t\tElementTypeT: elem,\n\t\t},\n\t}\n}\n\n// Equals returns true if the other Type is a map whose element type is\n// equal to that of the receiver.\nfunc (t typeMap) Equals(other Type) bool {\n\tot, isMap := other.typeImpl.(typeMap)\n\tif !isMap {\n\t\treturn false\n\t}\n\n\treturn t.ElementTypeT.Equals(ot.ElementTypeT)\n}\n\nfunc (t typeMap) FriendlyName(mode friendlyTypeNameMode) string {\n\telemName := t.ElementTypeT.friendlyNameMode(mode)\n\tif mode == friendlyTypeConstraintName {\n\t\tif t.ElementTypeT == DynamicPseudoType {\n\t\t\telemName = \"any single type\"\n\t\t}\n\t}\n\treturn \"map of \" + elemName\n}\n\nfunc (t typeMap) ElementType() Type {\n\treturn t.ElementTypeT\n}\n\nfunc (t typeMap) GoString() string {\n\treturn fmt.Sprintf(\"cty.Map(%#v)\", t.ElementTypeT)\n}\n\n// IsMapType returns true if the given type is a list type, regardless of its\n// element type.\nfunc (t Type) IsMapType() bool {\n\t_, ok := t.typeImpl.(typeMap)\n\treturn ok\n}\n\n// MapElementType is a convenience method that checks if the given type is\n// a map type, returning a pointer to its element type if so and nil\n// otherwise. This is intended to allow convenient conditional branches,\n// like so:\n//\n//     if et := t.MapElementType(); et != nil {\n//         // Do something with *et\n//     }\nfunc (t Type) MapElementType() *Type {\n\tif lt, ok := t.typeImpl.(typeMap); ok {\n\t\treturn &lt.ElementTypeT\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/msgpack/doc.go",
    "content": "// Package msgpack provides functions for serializing cty values in the\n// msgpack encoding, and decoding them again.\n//\n// If the same type information is provided both at encoding and decoding time\n// then values can be round-tripped without loss, except for capsule types\n// which are not currently supported.\n//\n// If any unknown values are passed to Marshal then they will be represented\n// using a msgpack extension with type code zero, which is understood by\n// the Unmarshal function within this package but will not be understood by\n// a generic (non-cty-aware) msgpack decoder. Ensure that no unknown values\n// are used if interoperability with other msgpack implementations is\n// required.\npackage msgpack\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/msgpack/dynamic.go",
    "content": "package msgpack\n\nimport (\n\t\"bytes\"\n\n\t\"github.com/vmihailenco/msgpack\"\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\ntype dynamicVal struct {\n\tValue cty.Value\n\tPath  cty.Path\n}\n\nfunc (dv *dynamicVal) MarshalMsgpack() ([]byte, error) {\n\t// Rather than defining a msgpack-specific serialization of types,\n\t// instead we use the existing JSON serialization.\n\ttypeJSON, err := dv.Value.Type().MarshalJSON()\n\tif err != nil {\n\t\treturn nil, dv.Path.NewErrorf(\"failed to serialize type: %s\", err)\n\t}\n\tvar buf bytes.Buffer\n\tenc := msgpack.NewEncoder(&buf)\n\tenc.EncodeArrayLen(2)\n\tenc.EncodeBytes(typeJSON)\n\terr = marshal(dv.Value, dv.Value.Type(), dv.Path, enc)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn buf.Bytes(), nil\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/msgpack/infinity.go",
    "content": "package msgpack\n\nimport (\n\t\"math\"\n)\n\nvar negativeInfinity = math.Inf(-1)\nvar positiveInfinity = math.Inf(1)\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/msgpack/marshal.go",
    "content": "package msgpack\n\nimport (\n\t\"bytes\"\n\t\"math/big\"\n\t\"sort\"\n\n\t\"github.com/vmihailenco/msgpack\"\n\t\"github.com/zclconf/go-cty/cty\"\n\t\"github.com/zclconf/go-cty/cty/convert\"\n)\n\n// Marshal produces a msgpack serialization of the given value that\n// can be decoded into the given type later using Unmarshal.\n//\n// The given value must conform to the given type, or an error will\n// be returned.\nfunc Marshal(val cty.Value, ty cty.Type) ([]byte, error) {\n\terrs := val.Type().TestConformance(ty)\n\tif errs != nil {\n\t\t// Attempt a conversion\n\t\tvar err error\n\t\tval, err = convert.Convert(val, ty)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\t// From this point onward, val can be assumed to be conforming to t.\n\n\tvar path cty.Path\n\tvar buf bytes.Buffer\n\tenc := msgpack.NewEncoder(&buf)\n\n\terr := marshal(val, ty, path, enc)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn buf.Bytes(), nil\n}\n\nfunc marshal(val cty.Value, ty cty.Type, path cty.Path, enc *msgpack.Encoder) error {\n\t// If we're going to decode as DynamicPseudoType then we need to save\n\t// dynamic type information to recover the real type.\n\tif ty == cty.DynamicPseudoType && val.Type() != cty.DynamicPseudoType {\n\t\treturn marshalDynamic(val, path, enc)\n\t}\n\n\tif !val.IsKnown() {\n\t\terr := enc.Encode(unknownVal)\n\t\tif err != nil {\n\t\t\treturn path.NewError(err)\n\t\t}\n\t\treturn nil\n\t}\n\tif val.IsNull() {\n\t\terr := enc.EncodeNil()\n\t\tif err != nil {\n\t\t\treturn path.NewError(err)\n\t\t}\n\t\treturn nil\n\t}\n\n\t// The caller should've guaranteed that the given val is conformant with\n\t// the given type ty, so we'll proceed under that assumption here.\n\tswitch {\n\tcase ty.IsPrimitiveType():\n\t\tswitch ty {\n\t\tcase cty.String:\n\t\t\terr := enc.EncodeString(val.AsString())\n\t\t\tif err != nil {\n\t\t\t\treturn path.NewError(err)\n\t\t\t}\n\t\t\treturn nil\n\t\tcase cty.Number:\n\t\t\tvar err error\n\t\t\tswitch {\n\t\t\tcase val.RawEquals(cty.PositiveInfinity):\n\t\t\t\terr = enc.EncodeFloat64(positiveInfinity)\n\t\t\tcase val.RawEquals(cty.NegativeInfinity):\n\t\t\t\terr = enc.EncodeFloat64(negativeInfinity)\n\t\t\tdefault:\n\t\t\t\tbf := val.AsBigFloat()\n\t\t\t\tif iv, acc := bf.Int64(); acc == big.Exact {\n\t\t\t\t\terr = enc.EncodeInt(iv)\n\t\t\t\t} else if fv, acc := bf.Float64(); acc == big.Exact {\n\t\t\t\t\terr = enc.EncodeFloat64(fv)\n\t\t\t\t} else {\n\t\t\t\t\terr = enc.EncodeString(bf.Text('f', -1))\n\t\t\t\t}\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\treturn path.NewError(err)\n\t\t\t}\n\t\t\treturn nil\n\t\tcase cty.Bool:\n\t\t\terr := enc.EncodeBool(val.True())\n\t\t\tif err != nil {\n\t\t\t\treturn path.NewError(err)\n\t\t\t}\n\t\t\treturn nil\n\t\tdefault:\n\t\t\tpanic(\"unsupported primitive type\")\n\t\t}\n\tcase ty.IsListType(), ty.IsSetType():\n\t\tenc.EncodeArrayLen(val.LengthInt())\n\t\tety := ty.ElementType()\n\t\tit := val.ElementIterator()\n\t\tpath := append(path, nil) // local override of 'path' with extra element\n\t\tfor it.Next() {\n\t\t\tek, ev := it.Element()\n\t\t\tpath[len(path)-1] = cty.IndexStep{\n\t\t\t\tKey: ek,\n\t\t\t}\n\t\t\terr := marshal(ev, ety, path, enc)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t\treturn nil\n\tcase ty.IsMapType():\n\t\tenc.EncodeMapLen(val.LengthInt())\n\t\tety := ty.ElementType()\n\t\tit := val.ElementIterator()\n\t\tpath := append(path, nil) // local override of 'path' with extra element\n\t\tfor it.Next() {\n\t\t\tek, ev := it.Element()\n\t\t\tpath[len(path)-1] = cty.IndexStep{\n\t\t\t\tKey: ek,\n\t\t\t}\n\t\t\tvar err error\n\t\t\terr = marshal(ek, ek.Type(), path, enc)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\terr = marshal(ev, ety, path, enc)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t\treturn nil\n\tcase ty.IsTupleType():\n\t\tetys := ty.TupleElementTypes()\n\t\tit := val.ElementIterator()\n\t\tpath := append(path, nil) // local override of 'path' with extra element\n\t\ti := 0\n\t\tenc.EncodeArrayLen(len(etys))\n\t\tfor it.Next() {\n\t\t\tety := etys[i]\n\t\t\tek, ev := it.Element()\n\t\t\tpath[len(path)-1] = cty.IndexStep{\n\t\t\t\tKey: ek,\n\t\t\t}\n\t\t\terr := marshal(ev, ety, path, enc)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\ti++\n\t\t}\n\t\treturn nil\n\tcase ty.IsObjectType():\n\t\tatys := ty.AttributeTypes()\n\t\tpath := append(path, nil) // local override of 'path' with extra element\n\n\t\tnames := make([]string, 0, len(atys))\n\t\tfor k := range atys {\n\t\t\tnames = append(names, k)\n\t\t}\n\t\tsort.Strings(names)\n\n\t\tenc.EncodeMapLen(len(names))\n\n\t\tfor _, k := range names {\n\t\t\taty := atys[k]\n\t\t\tav := val.GetAttr(k)\n\t\t\tpath[len(path)-1] = cty.GetAttrStep{\n\t\t\t\tName: k,\n\t\t\t}\n\t\t\tvar err error\n\t\t\terr = marshal(cty.StringVal(k), cty.String, path, enc)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\terr = marshal(av, aty, path, enc)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t\treturn nil\n\tcase ty.IsCapsuleType():\n\t\treturn path.NewErrorf(\"capsule types not supported for msgpack encoding\")\n\tdefault:\n\t\t// should never happen\n\t\treturn path.NewErrorf(\"cannot msgpack-serialize %s\", ty.FriendlyName())\n\t}\n}\n\n// marshalDynamic adds an extra wrapping object containing dynamic type\n// information for the given value.\nfunc marshalDynamic(val cty.Value, path cty.Path, enc *msgpack.Encoder) error {\n\tdv := dynamicVal{\n\t\tValue: val,\n\t\tPath:  path,\n\t}\n\treturn enc.Encode(&dv)\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/msgpack/type_implied.go",
    "content": "package msgpack\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\n\t\"github.com/vmihailenco/msgpack\"\n\tmsgpackcodes \"github.com/vmihailenco/msgpack/codes\"\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// ImpliedType returns the cty Type implied by the structure of the given\n// msgpack-compliant buffer. This function implements the default type mapping\n// behavior used when decoding arbitrary msgpack without explicit cty Type\n// information.\n//\n// The rules are as follows:\n//\n// msgpack strings, numbers and bools map to their equivalent primitive type in\n// cty.\n//\n// msgpack maps become cty object types, with the attributes defined by the\n// map keys and the types of their values.\n//\n// msgpack arrays become cty tuple types, with the elements defined by the\n// types of the array members.\n//\n// Any nulls are typed as DynamicPseudoType, so callers of this function\n// must be prepared to deal with this. Callers that do not wish to deal with\n// dynamic typing should not use this function and should instead describe\n// their required types explicitly with a cty.Type instance when decoding.\n//\n// Any unknown values are similarly typed as DynamicPseudoType, because these\n// do not carry type information on the wire.\n//\n// Any parse errors will be returned as an error, and the type will be the\n// invalid value cty.NilType.\nfunc ImpliedType(buf []byte) (cty.Type, error) {\n\tr := bytes.NewReader(buf)\n\tdec := msgpack.NewDecoder(r)\n\n\tty, err := impliedType(dec)\n\tif err != nil {\n\t\treturn cty.NilType, err\n\t}\n\n\t// We must now be at the end of the buffer\n\terr = dec.Skip()\n\tif err != io.EOF {\n\t\treturn ty, fmt.Errorf(\"extra bytes after msgpack value\")\n\t}\n\n\treturn ty, nil\n}\n\nfunc impliedType(dec *msgpack.Decoder) (cty.Type, error) {\n\t// If this function returns with a nil error then it must have already\n\t// consumed the next value from the decoder, since when called recursively\n\t// the caller will be expecting to find a following value here.\n\n\tcode, err := dec.PeekCode()\n\tif err != nil {\n\t\treturn cty.NilType, err\n\t}\n\n\tswitch {\n\n\tcase code == msgpackcodes.Nil || msgpackcodes.IsExt(code):\n\t\terr := dec.Skip()\n\t\treturn cty.DynamicPseudoType, err\n\n\tcase code == msgpackcodes.True || code == msgpackcodes.False:\n\t\t_, err := dec.DecodeBool()\n\t\treturn cty.Bool, err\n\n\tcase msgpackcodes.IsFixedNum(code):\n\t\t_, err := dec.DecodeInt64()\n\t\treturn cty.Number, err\n\n\tcase code == msgpackcodes.Int8 || code == msgpackcodes.Int16 || code == msgpackcodes.Int32 || code == msgpackcodes.Int64:\n\t\t_, err := dec.DecodeInt64()\n\t\treturn cty.Number, err\n\n\tcase code == msgpackcodes.Uint8 || code == msgpackcodes.Uint16 || code == msgpackcodes.Uint32 || code == msgpackcodes.Uint64:\n\t\t_, err := dec.DecodeUint64()\n\t\treturn cty.Number, err\n\n\tcase code == msgpackcodes.Float || code == msgpackcodes.Double:\n\t\t_, err := dec.DecodeFloat64()\n\t\treturn cty.Number, err\n\n\tcase msgpackcodes.IsString(code):\n\t\t_, err := dec.DecodeString()\n\t\treturn cty.String, err\n\n\tcase msgpackcodes.IsFixedMap(code) || code == msgpackcodes.Map16 || code == msgpackcodes.Map32:\n\t\treturn impliedObjectType(dec)\n\n\tcase msgpackcodes.IsFixedArray(code) || code == msgpackcodes.Array16 || code == msgpackcodes.Array32:\n\t\treturn impliedTupleType(dec)\n\n\tdefault:\n\t\treturn cty.NilType, fmt.Errorf(\"unsupported msgpack code %#v\", code)\n\t}\n}\n\nfunc impliedObjectType(dec *msgpack.Decoder) (cty.Type, error) {\n\t// If we get in here then we've already peeked the next code and know\n\t// it's some sort of map.\n\tl, err := dec.DecodeMapLen()\n\tif err != nil {\n\t\treturn cty.DynamicPseudoType, nil\n\t}\n\n\tvar atys map[string]cty.Type\n\n\tfor i := 0; i < l; i++ {\n\t\t// Read the map key first. We require maps to be strings, but msgpack\n\t\t// doesn't so we're prepared to error here if not.\n\t\tk, err := dec.DecodeString()\n\t\tif err != nil {\n\t\t\treturn cty.DynamicPseudoType, err\n\t\t}\n\n\t\taty, err := impliedType(dec)\n\t\tif err != nil {\n\t\t\treturn cty.DynamicPseudoType, err\n\t\t}\n\n\t\tif atys == nil {\n\t\t\tatys = make(map[string]cty.Type)\n\t\t}\n\t\tatys[k] = aty\n\t}\n\n\tif len(atys) == 0 {\n\t\treturn cty.EmptyObject, nil\n\t}\n\n\treturn cty.Object(atys), nil\n}\n\nfunc impliedTupleType(dec *msgpack.Decoder) (cty.Type, error) {\n\t// If we get in here then we've already peeked the next code and know\n\t// it's some sort of array.\n\tl, err := dec.DecodeArrayLen()\n\tif err != nil {\n\t\treturn cty.DynamicPseudoType, nil\n\t}\n\n\tif l == 0 {\n\t\treturn cty.EmptyTuple, nil\n\t}\n\n\tetys := make([]cty.Type, l)\n\n\tfor i := 0; i < l; i++ {\n\t\tety, err := impliedType(dec)\n\t\tif err != nil {\n\t\t\treturn cty.DynamicPseudoType, err\n\t\t}\n\t\tetys[i] = ety\n\t}\n\n\treturn cty.Tuple(etys), nil\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/msgpack/unknown.go",
    "content": "package msgpack\n\ntype unknownType struct{}\n\nvar unknownVal = unknownType{}\n\n// unknownValBytes is the raw bytes of the msgpack fixext1 value we\n// write to represent an unknown value. It's an extension value of\n// type zero whose value is irrelevant. Since it's irrelevant, we\n// set it to a single byte whose value is also zero, since that's\n// the most compact possible representation.\nvar unknownValBytes = []byte{0xd4, 0, 0}\n\nfunc (uv unknownType) MarshalMsgpack() ([]byte, error) {\n\treturn unknownValBytes, nil\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/msgpack/unmarshal.go",
    "content": "package msgpack\n\nimport (\n\t\"bytes\"\n\n\t\"github.com/vmihailenco/msgpack\"\n\tmsgpackCodes \"github.com/vmihailenco/msgpack/codes\"\n\t\"github.com/zclconf/go-cty/cty\"\n)\n\n// Unmarshal interprets the given bytes as a msgpack-encoded cty Value of\n// the given type, returning the result.\n//\n// If an error is returned, the error is written with a hypothetical\n// end-user that wrote the msgpack file as its audience, using cty type\n// system concepts rather than Go type system concepts.\nfunc Unmarshal(b []byte, ty cty.Type) (cty.Value, error) {\n\tr := bytes.NewReader(b)\n\tdec := msgpack.NewDecoder(r)\n\n\tvar path cty.Path\n\treturn unmarshal(dec, ty, path)\n}\n\nfunc unmarshal(dec *msgpack.Decoder, ty cty.Type, path cty.Path) (cty.Value, error) {\n\tpeek, err := dec.PeekCode()\n\tif err != nil {\n\t\treturn cty.DynamicVal, path.NewError(err)\n\t}\n\tif msgpackCodes.IsExt(peek) {\n\t\t// We just assume _all_ extensions are unknown values,\n\t\t// since we don't have any other extensions.\n\t\tdec.Skip() // skip what we've peeked\n\t\treturn cty.UnknownVal(ty), nil\n\t}\n\tif ty == cty.DynamicPseudoType {\n\t\treturn unmarshalDynamic(dec, path)\n\t}\n\tif peek == msgpackCodes.Nil {\n\t\tdec.Skip() // skip what we've peeked\n\t\treturn cty.NullVal(ty), nil\n\t}\n\n\tswitch {\n\tcase ty.IsPrimitiveType():\n\t\tval, err := unmarshalPrimitive(dec, ty, path)\n\t\tif err != nil {\n\t\t\treturn cty.NilVal, err\n\t\t}\n\t\treturn val, nil\n\tcase ty.IsListType():\n\t\treturn unmarshalList(dec, ty.ElementType(), path)\n\tcase ty.IsSetType():\n\t\treturn unmarshalSet(dec, ty.ElementType(), path)\n\tcase ty.IsMapType():\n\t\treturn unmarshalMap(dec, ty.ElementType(), path)\n\tcase ty.IsTupleType():\n\t\treturn unmarshalTuple(dec, ty.TupleElementTypes(), path)\n\tcase ty.IsObjectType():\n\t\treturn unmarshalObject(dec, ty.AttributeTypes(), path)\n\tdefault:\n\t\treturn cty.NilVal, path.NewErrorf(\"unsupported type %s\", ty.FriendlyName())\n\t}\n}\n\nfunc unmarshalPrimitive(dec *msgpack.Decoder, ty cty.Type, path cty.Path) (cty.Value, error) {\n\tswitch ty {\n\tcase cty.Bool:\n\t\trv, err := dec.DecodeBool()\n\t\tif err != nil {\n\t\t\treturn cty.DynamicVal, path.NewErrorf(\"bool is required\")\n\t\t}\n\t\treturn cty.BoolVal(rv), nil\n\tcase cty.Number:\n\t\t// Marshal will try int and float first, if the value can be\n\t\t// losslessly represented in these encodings, and then fall\n\t\t// back on a string if the number is too large or too precise.\n\t\tpeek, err := dec.PeekCode()\n\t\tif err != nil {\n\t\t\treturn cty.DynamicVal, path.NewErrorf(\"number is required\")\n\t\t}\n\n\t\tif msgpackCodes.IsFixedNum(peek) {\n\t\t\trv, err := dec.DecodeInt64()\n\t\t\tif err != nil {\n\t\t\t\treturn cty.DynamicVal, path.NewErrorf(\"number is required\")\n\t\t\t}\n\t\t\treturn cty.NumberIntVal(rv), nil\n\t\t}\n\n\t\tswitch peek {\n\t\tcase msgpackCodes.Int8, msgpackCodes.Int16, msgpackCodes.Int32, msgpackCodes.Int64:\n\t\t\trv, err := dec.DecodeInt64()\n\t\t\tif err != nil {\n\t\t\t\treturn cty.DynamicVal, path.NewErrorf(\"number is required\")\n\t\t\t}\n\t\t\treturn cty.NumberIntVal(rv), nil\n\t\tcase msgpackCodes.Uint8, msgpackCodes.Uint16, msgpackCodes.Uint32, msgpackCodes.Uint64:\n\t\t\trv, err := dec.DecodeUint64()\n\t\t\tif err != nil {\n\t\t\t\treturn cty.DynamicVal, path.NewErrorf(\"number is required\")\n\t\t\t}\n\t\t\treturn cty.NumberUIntVal(rv), nil\n\t\tcase msgpackCodes.Float, msgpackCodes.Double:\n\t\t\trv, err := dec.DecodeFloat64()\n\t\t\tif err != nil {\n\t\t\t\treturn cty.DynamicVal, path.NewErrorf(\"number is required\")\n\t\t\t}\n\t\t\treturn cty.NumberFloatVal(rv), nil\n\t\tdefault:\n\t\t\trv, err := dec.DecodeString()\n\t\t\tif err != nil {\n\t\t\t\treturn cty.DynamicVal, path.NewErrorf(\"number is required\")\n\t\t\t}\n\t\t\tv, err := cty.ParseNumberVal(rv)\n\t\t\tif err != nil {\n\t\t\t\treturn cty.DynamicVal, path.NewErrorf(\"number is required\")\n\t\t\t}\n\t\t\treturn v, nil\n\t\t}\n\tcase cty.String:\n\t\trv, err := dec.DecodeString()\n\t\tif err != nil {\n\t\t\treturn cty.DynamicVal, path.NewErrorf(\"string is required\")\n\t\t}\n\t\treturn cty.StringVal(rv), nil\n\tdefault:\n\t\t// should never happen\n\t\tpanic(\"unsupported primitive type\")\n\t}\n}\n\nfunc unmarshalList(dec *msgpack.Decoder, ety cty.Type, path cty.Path) (cty.Value, error) {\n\tlength, err := dec.DecodeArrayLen()\n\tif err != nil {\n\t\treturn cty.DynamicVal, path.NewErrorf(\"a list is required\")\n\t}\n\n\tswitch {\n\tcase length < 0:\n\t\treturn cty.NullVal(cty.List(ety)), nil\n\tcase length == 0:\n\t\treturn cty.ListValEmpty(ety), nil\n\t}\n\n\tvals := make([]cty.Value, 0, length)\n\tpath = append(path, nil)\n\tfor i := 0; i < length; i++ {\n\t\tpath[len(path)-1] = cty.IndexStep{\n\t\t\tKey: cty.NumberIntVal(int64(i)),\n\t\t}\n\n\t\tval, err := unmarshal(dec, ety, path)\n\t\tif err != nil {\n\t\t\treturn cty.DynamicVal, err\n\t\t}\n\n\t\tvals = append(vals, val)\n\t}\n\n\treturn cty.ListVal(vals), nil\n}\n\nfunc unmarshalSet(dec *msgpack.Decoder, ety cty.Type, path cty.Path) (cty.Value, error) {\n\tlength, err := dec.DecodeArrayLen()\n\tif err != nil {\n\t\treturn cty.DynamicVal, path.NewErrorf(\"a set is required\")\n\t}\n\n\tswitch {\n\tcase length < 0:\n\t\treturn cty.NullVal(cty.Set(ety)), nil\n\tcase length == 0:\n\t\treturn cty.SetValEmpty(ety), nil\n\t}\n\n\tvals := make([]cty.Value, 0, length)\n\tpath = append(path, nil)\n\tfor i := 0; i < length; i++ {\n\t\tpath[len(path)-1] = cty.IndexStep{\n\t\t\tKey: cty.NumberIntVal(int64(i)),\n\t\t}\n\n\t\tval, err := unmarshal(dec, ety, path)\n\t\tif err != nil {\n\t\t\treturn cty.DynamicVal, err\n\t\t}\n\n\t\tvals = append(vals, val)\n\t}\n\n\treturn cty.SetVal(vals), nil\n}\n\nfunc unmarshalMap(dec *msgpack.Decoder, ety cty.Type, path cty.Path) (cty.Value, error) {\n\tlength, err := dec.DecodeMapLen()\n\tif err != nil {\n\t\treturn cty.DynamicVal, path.NewErrorf(\"a map is required\")\n\t}\n\n\tswitch {\n\tcase length < 0:\n\t\treturn cty.NullVal(cty.Map(ety)), nil\n\tcase length == 0:\n\t\treturn cty.MapValEmpty(ety), nil\n\t}\n\n\tvals := make(map[string]cty.Value, length)\n\tpath = append(path, nil)\n\tfor i := 0; i < length; i++ {\n\t\tkey, err := dec.DecodeString()\n\t\tif err != nil {\n\t\t\tpath[:len(path)-1].NewErrorf(\"non-string key in map\")\n\t\t}\n\n\t\tpath[len(path)-1] = cty.IndexStep{\n\t\t\tKey: cty.StringVal(key),\n\t\t}\n\n\t\tval, err := unmarshal(dec, ety, path)\n\t\tif err != nil {\n\t\t\treturn cty.DynamicVal, err\n\t\t}\n\n\t\tvals[key] = val\n\t}\n\n\treturn cty.MapVal(vals), nil\n}\n\nfunc unmarshalTuple(dec *msgpack.Decoder, etys []cty.Type, path cty.Path) (cty.Value, error) {\n\tlength, err := dec.DecodeArrayLen()\n\tif err != nil {\n\t\treturn cty.DynamicVal, path.NewErrorf(\"a tuple is required\")\n\t}\n\n\tswitch {\n\tcase length < 0:\n\t\treturn cty.NullVal(cty.Tuple(etys)), nil\n\tcase length == 0:\n\t\treturn cty.TupleVal(nil), nil\n\tcase length != len(etys):\n\t\treturn cty.DynamicVal, path.NewErrorf(\"a tuple of length %d is required\", len(etys))\n\t}\n\n\tvals := make([]cty.Value, 0, length)\n\tpath = append(path, nil)\n\tfor i := 0; i < length; i++ {\n\t\tpath[len(path)-1] = cty.IndexStep{\n\t\t\tKey: cty.NumberIntVal(int64(i)),\n\t\t}\n\t\tety := etys[i]\n\n\t\tval, err := unmarshal(dec, ety, path)\n\t\tif err != nil {\n\t\t\treturn cty.DynamicVal, err\n\t\t}\n\n\t\tvals = append(vals, val)\n\t}\n\n\treturn cty.TupleVal(vals), nil\n}\n\nfunc unmarshalObject(dec *msgpack.Decoder, atys map[string]cty.Type, path cty.Path) (cty.Value, error) {\n\tlength, err := dec.DecodeMapLen()\n\tif err != nil {\n\t\treturn cty.DynamicVal, path.NewErrorf(\"an object is required\")\n\t}\n\n\tswitch {\n\tcase length < 0:\n\t\treturn cty.NullVal(cty.Object(atys)), nil\n\tcase length == 0:\n\t\treturn cty.ObjectVal(nil), nil\n\tcase length != len(atys):\n\t\treturn cty.DynamicVal, path.NewErrorf(\"an object with %d attributes is required (%d given)\",\n\t\t\tlen(atys), length)\n\t}\n\n\tvals := make(map[string]cty.Value, length)\n\tpath = append(path, nil)\n\tfor i := 0; i < length; i++ {\n\t\tkey, err := dec.DecodeString()\n\t\tif err != nil {\n\t\t\treturn cty.DynamicVal, path[:len(path)-1].NewErrorf(\"all keys must be strings\")\n\t\t}\n\n\t\tpath[len(path)-1] = cty.IndexStep{\n\t\t\tKey: cty.StringVal(key),\n\t\t}\n\t\taty, exists := atys[key]\n\t\tif !exists {\n\t\t\treturn cty.DynamicVal, path.NewErrorf(\"unsupported attribute\")\n\t\t}\n\n\t\tval, err := unmarshal(dec, aty, path)\n\t\tif err != nil {\n\t\t\treturn cty.DynamicVal, err\n\t\t}\n\n\t\tvals[key] = val\n\t}\n\n\treturn cty.ObjectVal(vals), nil\n}\n\nfunc unmarshalDynamic(dec *msgpack.Decoder, path cty.Path) (cty.Value, error) {\n\tlength, err := dec.DecodeArrayLen()\n\tif err != nil {\n\t\treturn cty.DynamicVal, path.NewError(err)\n\t}\n\n\tswitch {\n\tcase length == -1:\n\t\treturn cty.NullVal(cty.DynamicPseudoType), nil\n\tcase length != 2:\n\t\treturn cty.DynamicVal, path.NewErrorf(\n\t\t\t\"dynamic value array must have exactly two elements\",\n\t\t)\n\t}\n\n\ttypeJSON, err := dec.DecodeBytes()\n\tif err != nil {\n\t\treturn cty.DynamicVal, path.NewError(err)\n\t}\n\tvar ty cty.Type\n\terr = (&ty).UnmarshalJSON(typeJSON)\n\tif err != nil {\n\t\treturn cty.DynamicVal, path.NewError(err)\n\t}\n\n\treturn unmarshal(dec, ty, path)\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/null.go",
    "content": "package cty\n\n// NullVal returns a null value of the given type. A null can be created of any\n// type, but operations on such values will always panic. Calling applications\n// are encouraged to use nulls only sparingly, particularly when user-provided\n// expressions are to be evaluated, since the precence of nulls creates a\n// much higher chance of evaluation errors that can't be caught by a type\n// checker.\nfunc NullVal(t Type) Value {\n\treturn Value{\n\t\tty: t,\n\t\tv:  nil,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/object_type.go",
    "content": "package cty\n\nimport (\n\t\"fmt\"\n)\n\ntype typeObject struct {\n\ttypeImplSigil\n\tAttrTypes map[string]Type\n}\n\n// Object creates an object type with the given attribute types.\n//\n// After a map is passed to this function the caller must no longer access it,\n// since ownership is transferred to this library.\nfunc Object(attrTypes map[string]Type) Type {\n\tattrTypesNorm := make(map[string]Type, len(attrTypes))\n\tfor k, v := range attrTypes {\n\t\tattrTypesNorm[NormalizeString(k)] = v\n\t}\n\n\treturn Type{\n\t\ttypeObject{\n\t\t\tAttrTypes: attrTypesNorm,\n\t\t},\n\t}\n}\n\nfunc (t typeObject) Equals(other Type) bool {\n\tif ot, ok := other.typeImpl.(typeObject); ok {\n\t\tif len(t.AttrTypes) != len(ot.AttrTypes) {\n\t\t\t// Fast path: if we don't have the same number of attributes\n\t\t\t// then we can't possibly be equal. This also avoids the need\n\t\t\t// to test attributes in both directions below, since we know\n\t\t\t// there can't be extras in \"other\".\n\t\t\treturn false\n\t\t}\n\n\t\tfor attr, ty := range t.AttrTypes {\n\t\t\toty, ok := ot.AttrTypes[attr]\n\t\t\tif !ok {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif !oty.Equals(ty) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc (t typeObject) FriendlyName(mode friendlyTypeNameMode) string {\n\t// There isn't really a friendly way to write an object type due to its\n\t// complexity, so we'll just do something English-ish. Callers will\n\t// probably want to make some extra effort to avoid ever printing out\n\t// an object type FriendlyName in its entirety. For example, could\n\t// produce an error message by diffing two object types and saying\n\t// something like \"Expected attribute foo to be string, but got number\".\n\t// TODO: Finish this\n\treturn \"object\"\n}\n\nfunc (t typeObject) GoString() string {\n\tif len(t.AttrTypes) == 0 {\n\t\treturn \"cty.EmptyObject\"\n\t}\n\treturn fmt.Sprintf(\"cty.Object(%#v)\", t.AttrTypes)\n}\n\n// EmptyObject is a shorthand for Object(map[string]Type{}), to more\n// easily talk about the empty object type.\nvar EmptyObject Type\n\n// EmptyObjectVal is the only possible non-null, non-unknown value of type\n// EmptyObject.\nvar EmptyObjectVal Value\n\nfunc init() {\n\tEmptyObject = Object(map[string]Type{})\n\tEmptyObjectVal = Value{\n\t\tty: EmptyObject,\n\t\tv:  map[string]interface{}{},\n\t}\n}\n\n// IsObjectType returns true if the given type is an object type, regardless\n// of its element type.\nfunc (t Type) IsObjectType() bool {\n\t_, ok := t.typeImpl.(typeObject)\n\treturn ok\n}\n\n// HasAttribute returns true if the receiver has an attribute with the given\n// name, regardless of its type. Will panic if the reciever isn't an object\n// type; use IsObjectType to determine whether this operation will succeed.\nfunc (t Type) HasAttribute(name string) bool {\n\tname = NormalizeString(name)\n\tif ot, ok := t.typeImpl.(typeObject); ok {\n\t\t_, hasAttr := ot.AttrTypes[name]\n\t\treturn hasAttr\n\t}\n\tpanic(\"HasAttribute on non-object Type\")\n}\n\n// AttributeType returns the type of the attribute with the given name. Will\n// panic if the receiver is not an object type (use IsObjectType to confirm)\n// or if the object type has no such attribute (use HasAttribute to confirm).\nfunc (t Type) AttributeType(name string) Type {\n\tname = NormalizeString(name)\n\tif ot, ok := t.typeImpl.(typeObject); ok {\n\t\taty, hasAttr := ot.AttrTypes[name]\n\t\tif !hasAttr {\n\t\t\tpanic(\"no such attribute\")\n\t\t}\n\t\treturn aty\n\t}\n\tpanic(\"AttributeType on non-object Type\")\n}\n\n// AttributeTypes returns a map from attribute names to their associated\n// types. Will panic if the receiver is not an object type (use IsObjectType\n// to confirm).\n//\n// The returned map is part of the internal state of the type, and is provided\n// for read access only. It is forbidden for any caller to modify the returned\n// map. For many purposes the attribute-related methods of Value are more\n// appropriate and more convenient to use.\nfunc (t Type) AttributeTypes() map[string]Type {\n\tif ot, ok := t.typeImpl.(typeObject); ok {\n\t\treturn ot.AttrTypes\n\t}\n\tpanic(\"AttributeTypes on non-object Type\")\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/path.go",
    "content": "package cty\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n)\n\n// A Path is a sequence of operations to locate a nested value within a\n// data structure.\n//\n// The empty Path represents the given item. Any PathSteps within represent\n// taking a single step down into a data structure.\n//\n// Path has some convenience methods for gradually constructing a path,\n// but callers can also feel free to just produce a slice of PathStep manually\n// and convert to this type, which may be more appropriate in environments\n// where memory pressure is a concern.\n//\n// Although a Path is technically mutable, by convention callers should not\n// mutate a path once it has been built and passed to some other subsystem.\n// Instead, use Copy and then mutate the copy before using it.\ntype Path []PathStep\n\n// PathStep represents a single step down into a data structure, as part\n// of a Path. PathStep is a closed interface, meaning that the only\n// permitted implementations are those within this package.\ntype PathStep interface {\n\tpathStepSigil() pathStepImpl\n\tApply(Value) (Value, error)\n}\n\n// embed pathImpl into a struct to declare it a PathStep implementation\ntype pathStepImpl struct{}\n\nfunc (p pathStepImpl) pathStepSigil() pathStepImpl {\n\treturn p\n}\n\n// Index returns a new Path that is the reciever with an IndexStep appended\n// to the end.\n//\n// This is provided as a convenient way to construct paths, but each call\n// will create garbage so it should not be used where memory pressure is a\n// concern.\nfunc (p Path) Index(v Value) Path {\n\tret := make(Path, len(p)+1)\n\tcopy(ret, p)\n\tret[len(p)] = IndexStep{\n\t\tKey: v,\n\t}\n\treturn ret\n}\n\n// IndexPath is a convenience method to start a new Path with an IndexStep.\nfunc IndexPath(v Value) Path {\n\treturn Path{}.Index(v)\n}\n\n// GetAttr returns a new Path that is the reciever with a GetAttrStep appended\n// to the end.\n//\n// This is provided as a convenient way to construct paths, but each call\n// will create garbage so it should not be used where memory pressure is a\n// concern.\nfunc (p Path) GetAttr(name string) Path {\n\tret := make(Path, len(p)+1)\n\tcopy(ret, p)\n\tret[len(p)] = GetAttrStep{\n\t\tName: name,\n\t}\n\treturn ret\n}\n\n// GetAttrPath is a convenience method to start a new Path with a GetAttrStep.\nfunc GetAttrPath(name string) Path {\n\treturn Path{}.GetAttr(name)\n}\n\n// Apply applies each of the steps in turn to successive values starting with\n// the given value, and returns the result. If any step returns an error,\n// the whole operation returns an error.\nfunc (p Path) Apply(val Value) (Value, error) {\n\tvar err error\n\tfor i, step := range p {\n\t\tval, err = step.Apply(val)\n\t\tif err != nil {\n\t\t\treturn NilVal, fmt.Errorf(\"at step %d: %s\", i, err)\n\t\t}\n\t}\n\treturn val, nil\n}\n\n// LastStep applies the given path up to the last step and then returns\n// the resulting value and the final step.\n//\n// This is useful when dealing with assignment operations, since in that\n// case the *value* of the last step is not important (and may not, in fact,\n// present at all) and we care only about its location.\n//\n// Since LastStep applies all steps except the last, it will return errors\n// for those steps in the same way as Apply does.\n//\n// If the path has *no* steps then the returned PathStep will be nil,\n// representing that any operation should be applied directly to the\n// given value.\nfunc (p Path) LastStep(val Value) (Value, PathStep, error) {\n\tvar err error\n\n\tif len(p) == 0 {\n\t\treturn val, nil, nil\n\t}\n\n\tjourney := p[:len(p)-1]\n\tval, err = journey.Apply(val)\n\tif err != nil {\n\t\treturn NilVal, nil, err\n\t}\n\treturn val, p[len(p)-1], nil\n}\n\n// Copy makes a shallow copy of the receiver. Often when paths are passed to\n// caller code they come with the constraint that they are valid only until\n// the caller returns, due to how they are constructed internally. Callers\n// can use Copy to conveniently produce a copy of the value that _they_ control\n// the validity of.\nfunc (p Path) Copy() Path {\n\tret := make(Path, len(p))\n\tcopy(ret, p)\n\treturn ret\n}\n\n// IndexStep is a Step implementation representing applying the index operation\n// to a value, which must be of either a list, map, or set type.\n//\n// When describing a path through a *type* rather than a concrete value,\n// the Key may be an unknown value, indicating that the step applies to\n// *any* key of the given type.\n//\n// When indexing into a set, the Key is actually the element being accessed\n// itself, since in sets elements are their own identity.\ntype IndexStep struct {\n\tpathStepImpl\n\tKey Value\n}\n\n// Apply returns the value resulting from indexing the given value with\n// our key value.\nfunc (s IndexStep) Apply(val Value) (Value, error) {\n\tif val == NilVal || val.IsNull() {\n\t\treturn NilVal, errors.New(\"cannot index a null value\")\n\t}\n\n\tswitch s.Key.Type() {\n\tcase Number:\n\t\tif !(val.Type().IsListType() || val.Type().IsTupleType()) {\n\t\t\treturn NilVal, errors.New(\"not a list type\")\n\t\t}\n\tcase String:\n\t\tif !val.Type().IsMapType() {\n\t\t\treturn NilVal, errors.New(\"not a map type\")\n\t\t}\n\tdefault:\n\t\treturn NilVal, errors.New(\"key value not number or string\")\n\t}\n\n\thas := val.HasIndex(s.Key)\n\tif !has.IsKnown() {\n\t\treturn UnknownVal(val.Type().ElementType()), nil\n\t}\n\tif !has.True() {\n\t\treturn NilVal, errors.New(\"value does not have given index key\")\n\t}\n\n\treturn val.Index(s.Key), nil\n}\n\nfunc (s IndexStep) GoString() string {\n\treturn fmt.Sprintf(\"cty.IndexStep{Key:%#v}\", s.Key)\n}\n\n// GetAttrStep is a Step implementation representing retrieving an attribute\n// from a value, which must be of an object type.\ntype GetAttrStep struct {\n\tpathStepImpl\n\tName string\n}\n\n// Apply returns the value of our named attribute from the given value, which\n// must be of an object type that has a value of that name.\nfunc (s GetAttrStep) Apply(val Value) (Value, error) {\n\tif val == NilVal || val.IsNull() {\n\t\treturn NilVal, errors.New(\"cannot access attributes on a null value\")\n\t}\n\n\tif !val.Type().IsObjectType() {\n\t\treturn NilVal, errors.New(\"not an object type\")\n\t}\n\n\tif !val.Type().HasAttribute(s.Name) {\n\t\treturn NilVal, fmt.Errorf(\"object has no attribute %q\", s.Name)\n\t}\n\n\treturn val.GetAttr(s.Name), nil\n}\n\nfunc (s GetAttrStep) GoString() string {\n\treturn fmt.Sprintf(\"cty.GetAttrStep{Name:%q}\", s.Name)\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/path_set.go",
    "content": "package cty\n\nimport (\n\t\"fmt\"\n\t\"hash/crc64\"\n\n\t\"github.com/zclconf/go-cty/cty/set\"\n)\n\n// PathSet represents a set of Path objects. This can be used, for example,\n// to talk about a subset of paths within a value that meet some criteria,\n// without directly modifying the values at those paths.\ntype PathSet struct {\n\tset set.Set\n}\n\n// NewPathSet creates and returns a PathSet, with initial contents optionally\n// set by the given arguments.\nfunc NewPathSet(paths ...Path) PathSet {\n\tret := PathSet{\n\t\tset: set.NewSet(pathSetRules{}),\n\t}\n\n\tfor _, path := range paths {\n\t\tret.Add(path)\n\t}\n\n\treturn ret\n}\n\n// Add inserts a single given path into the set.\n//\n// Paths are immutable after construction by convention. It is particularly\n// important not to mutate a path after it has been placed into a PathSet.\n// If a Path is mutated while in a set, behavior is undefined.\nfunc (s PathSet) Add(path Path) {\n\ts.set.Add(path)\n}\n\n// AddAllSteps is like Add but it also adds all of the steps leading to\n// the given path.\n//\n// For example, if given a path representing \"foo.bar\", it will add both\n// \"foo\" and \"bar\".\nfunc (s PathSet) AddAllSteps(path Path) {\n\tfor i := 1; i <= len(path); i++ {\n\t\ts.Add(path[:i])\n\t}\n}\n\n// Has returns true if the given path is in the receiving set.\nfunc (s PathSet) Has(path Path) bool {\n\treturn s.set.Has(path)\n}\n\n// List makes and returns a slice of all of the paths in the receiving set,\n// in an undefined but consistent order.\nfunc (s PathSet) List() []Path {\n\tif s.Empty() {\n\t\treturn nil\n\t}\n\tret := make([]Path, 0, s.set.Length())\n\tfor it := s.set.Iterator(); it.Next(); {\n\t\tret = append(ret, it.Value().(Path))\n\t}\n\treturn ret\n}\n\n// Remove modifies the receving set to no longer include the given path.\n// If the given path was already absent, this is a no-op.\nfunc (s PathSet) Remove(path Path) {\n\ts.set.Remove(path)\n}\n\n// Empty returns true if the length of the receiving set is zero.\nfunc (s PathSet) Empty() bool {\n\treturn s.set.Length() == 0\n}\n\n// Union returns a new set whose contents are the union of the receiver and\n// the given other set.\nfunc (s PathSet) Union(other PathSet) PathSet {\n\treturn PathSet{\n\t\tset: s.set.Union(other.set),\n\t}\n}\n\n// Intersection returns a new set whose contents are the intersection of the\n// receiver and the given other set.\nfunc (s PathSet) Intersection(other PathSet) PathSet {\n\treturn PathSet{\n\t\tset: s.set.Intersection(other.set),\n\t}\n}\n\n// Subtract returns a new set whose contents are those from the receiver with\n// any elements of the other given set subtracted.\nfunc (s PathSet) Subtract(other PathSet) PathSet {\n\treturn PathSet{\n\t\tset: s.set.Subtract(other.set),\n\t}\n}\n\n// SymmetricDifference returns a new set whose contents are the symmetric\n// difference of the receiver and the given other set.\nfunc (s PathSet) SymmetricDifference(other PathSet) PathSet {\n\treturn PathSet{\n\t\tset: s.set.SymmetricDifference(other.set),\n\t}\n}\n\n// Equal returns true if and only if both the receiver and the given other\n// set contain exactly the same paths.\nfunc (s PathSet) Equal(other PathSet) bool {\n\tif s.set.Length() != other.set.Length() {\n\t\treturn false\n\t}\n\t// Now we know the lengths are the same we only need to test in one\n\t// direction whether everything in one is in the other.\n\tfor it := s.set.Iterator(); it.Next(); {\n\t\tif !other.set.Has(it.Value()) {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\nvar crc64Table = crc64.MakeTable(crc64.ISO)\n\nvar indexStepPlaceholder = []byte(\"#\")\n\n// pathSetRules is an implementation of set.Rules from the set package,\n// used internally within PathSet.\ntype pathSetRules struct {\n}\n\nfunc (r pathSetRules) Hash(v interface{}) int {\n\tpath := v.(Path)\n\thash := crc64.New(crc64Table)\n\n\tfor _, rawStep := range path {\n\t\tswitch step := rawStep.(type) {\n\t\tcase GetAttrStep:\n\t\t\t// (this creates some garbage converting the string name to a\n\t\t\t// []byte, but that's okay since cty is not designed to be\n\t\t\t// used in tight loops under memory pressure.)\n\t\t\thash.Write([]byte(step.Name))\n\t\tdefault:\n\t\t\t// For any other step type we just append a predefined value,\n\t\t\t// which means that e.g. all indexes into a given collection will\n\t\t\t// hash to the same value but we assume that collections are\n\t\t\t// small and thus this won't hurt too much.\n\t\t\thash.Write(indexStepPlaceholder)\n\t\t}\n\t}\n\n\t// We discard half of the hash on 32-bit platforms; collisions just make\n\t// our lookups take marginally longer, so not a big deal.\n\treturn int(hash.Sum64())\n}\n\nfunc (r pathSetRules) Equivalent(a, b interface{}) bool {\n\taPath := a.(Path)\n\tbPath := b.(Path)\n\n\tif len(aPath) != len(bPath) {\n\t\treturn false\n\t}\n\n\tfor i := range aPath {\n\t\tswitch aStep := aPath[i].(type) {\n\t\tcase GetAttrStep:\n\t\t\tbStep, ok := bPath[i].(GetAttrStep)\n\t\t\tif !ok {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tif aStep.Name != bStep.Name {\n\t\t\t\treturn false\n\t\t\t}\n\t\tcase IndexStep:\n\t\t\tbStep, ok := bPath[i].(IndexStep)\n\t\t\tif !ok {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\teq := aStep.Key.Equals(bStep.Key)\n\t\t\tif !eq.IsKnown() || eq.False() {\n\t\t\t\treturn false\n\t\t\t}\n\t\tdefault:\n\t\t\t// Should never happen, since we document PathStep as a closed type.\n\t\t\tpanic(fmt.Errorf(\"unsupported step type %T\", aStep))\n\t\t}\n\t}\n\n\treturn true\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/primitive_type.go",
    "content": "package cty\n\nimport \"math/big\"\n\n// primitiveType is the hidden implementation of the various primitive types\n// that are exposed as variables in this package.\ntype primitiveType struct {\n\ttypeImplSigil\n\tKind primitiveTypeKind\n}\n\ntype primitiveTypeKind byte\n\nconst (\n\tprimitiveTypeBool   primitiveTypeKind = 'B'\n\tprimitiveTypeNumber primitiveTypeKind = 'N'\n\tprimitiveTypeString primitiveTypeKind = 'S'\n)\n\nfunc (t primitiveType) Equals(other Type) bool {\n\tif otherP, ok := other.typeImpl.(primitiveType); ok {\n\t\treturn otherP.Kind == t.Kind\n\t}\n\treturn false\n}\n\nfunc (t primitiveType) FriendlyName(mode friendlyTypeNameMode) string {\n\tswitch t.Kind {\n\tcase primitiveTypeBool:\n\t\treturn \"bool\"\n\tcase primitiveTypeNumber:\n\t\treturn \"number\"\n\tcase primitiveTypeString:\n\t\treturn \"string\"\n\tdefault:\n\t\t// should never happen\n\t\tpanic(\"invalid primitive type\")\n\t}\n}\n\nfunc (t primitiveType) GoString() string {\n\tswitch t.Kind {\n\tcase primitiveTypeBool:\n\t\treturn \"cty.Bool\"\n\tcase primitiveTypeNumber:\n\t\treturn \"cty.Number\"\n\tcase primitiveTypeString:\n\t\treturn \"cty.String\"\n\tdefault:\n\t\t// should never happen\n\t\tpanic(\"invalid primitive type\")\n\t}\n}\n\n// Number is the numeric type. Number values are arbitrary-precision\n// decimal numbers, which can then be converted into Go's various numeric\n// types only if they are in the appropriate range.\nvar Number Type\n\n// String is the string type. String values are sequences of unicode codepoints\n// encoded internally as UTF-8.\nvar String Type\n\n// Bool is the boolean type. The two values of this type are True and False.\nvar Bool Type\n\n// True is the truthy value of type Bool\nvar True Value\n\n// False is the falsey value of type Bool\nvar False Value\n\n// Zero is a number value representing exactly zero.\nvar Zero Value\n\n// PositiveInfinity is a Number value representing positive infinity\nvar PositiveInfinity Value\n\n// NegativeInfinity is a Number value representing negative infinity\nvar NegativeInfinity Value\n\nfunc init() {\n\tNumber = Type{\n\t\tprimitiveType{Kind: primitiveTypeNumber},\n\t}\n\tString = Type{\n\t\tprimitiveType{Kind: primitiveTypeString},\n\t}\n\tBool = Type{\n\t\tprimitiveType{Kind: primitiveTypeBool},\n\t}\n\tTrue = Value{\n\t\tty: Bool,\n\t\tv:  true,\n\t}\n\tFalse = Value{\n\t\tty: Bool,\n\t\tv:  false,\n\t}\n\tZero = Value{\n\t\tty: Number,\n\t\tv:  big.NewFloat(0),\n\t}\n\tPositiveInfinity = Value{\n\t\tty: Number,\n\t\tv:  (&big.Float{}).SetInf(false),\n\t}\n\tNegativeInfinity = Value{\n\t\tty: Number,\n\t\tv:  (&big.Float{}).SetInf(true),\n\t}\n}\n\n// IsPrimitiveType returns true if and only if the reciever is a primitive\n// type, which means it's either number, string, or bool. Any two primitive\n// types can be safely compared for equality using the standard == operator\n// without panic, which is not a guarantee that holds for all types. Primitive\n// types can therefore also be used in switch statements.\nfunc (t Type) IsPrimitiveType() bool {\n\t_, ok := t.typeImpl.(primitiveType)\n\treturn ok\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/set/gob.go",
    "content": "package set\n\nimport (\n\t\"bytes\"\n\t\"encoding/gob\"\n\t\"fmt\"\n)\n\n// GobEncode is an implementation of the interface gob.GobEncoder, allowing\n// sets to be included in structures encoded via gob.\n//\n// The set rules are included in the serialized value, so the caller must\n// register its concrete rules type with gob.Register before using a\n// set in a gob, and possibly also implement GobEncode/GobDecode to customize\n// how any parameters are persisted.\n//\n// The set elements are also included, so if they are of non-primitive types\n// they too must be registered with gob.\n//\n// If the produced gob values will persist for a long time, the caller must\n// ensure compatibility of the rules implementation. In particular, if the\n// definition of element equivalence changes between encoding and decoding\n// then two distinct stored elements may be considered equivalent on decoding,\n// causing the recovered set to have fewer elements than when it was stored.\nfunc (s Set) GobEncode() ([]byte, error) {\n\tgs := gobSet{\n\t\tVersion: 0,\n\t\tRules:   s.rules,\n\t\tValues:  s.Values(),\n\t}\n\n\tbuf := &bytes.Buffer{}\n\tenc := gob.NewEncoder(buf)\n\terr := enc.Encode(gs)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"error encoding set.Set: %s\", err)\n\t}\n\n\treturn buf.Bytes(), nil\n}\n\n// GobDecode is the opposite of GobEncode. See GobEncode for information\n// on the requirements for and caveats of including set values in gobs.\nfunc (s *Set) GobDecode(buf []byte) error {\n\tr := bytes.NewReader(buf)\n\tdec := gob.NewDecoder(r)\n\n\tvar gs gobSet\n\terr := dec.Decode(&gs)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"error decoding set.Set: %s\", err)\n\t}\n\tif gs.Version != 0 {\n\t\treturn fmt.Errorf(\"unsupported set.Set encoding version %d; need 0\", gs.Version)\n\t}\n\n\tvictim := NewSetFromSlice(gs.Rules, gs.Values)\n\ts.vals = victim.vals\n\ts.rules = victim.rules\n\treturn nil\n}\n\ntype gobSet struct {\n\tVersion int\n\tRules   Rules\n\n\t// The bucket-based representation is for efficient in-memory access, but\n\t// for serialization it's enough to just retain the values themselves,\n\t// which we can re-bucket using the rules (which may have changed!) when\n\t// we re-inflate.\n\tValues []interface{}\n}\n\nfunc init() {\n\tgob.Register([]interface{}(nil))\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/set/iterator.go",
    "content": "package set\n\ntype Iterator struct {\n\tvals []interface{}\n\tidx  int\n}\n\nfunc (it *Iterator) Value() interface{} {\n\treturn it.vals[it.idx]\n}\n\nfunc (it *Iterator) Next() bool {\n\tit.idx++\n\treturn it.idx < len(it.vals)\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/set/ops.go",
    "content": "package set\n\nimport (\n\t\"sort\"\n)\n\n// Add inserts the given value into the receiving Set.\n//\n// This mutates the set in-place. This operation is not thread-safe.\nfunc (s Set) Add(val interface{}) {\n\thv := s.rules.Hash(val)\n\tif _, ok := s.vals[hv]; !ok {\n\t\ts.vals[hv] = make([]interface{}, 0, 1)\n\t}\n\tbucket := s.vals[hv]\n\n\t// See if an equivalent value is already present\n\tfor _, ev := range bucket {\n\t\tif s.rules.Equivalent(val, ev) {\n\t\t\treturn\n\t\t}\n\t}\n\n\ts.vals[hv] = append(bucket, val)\n}\n\n// Remove deletes the given value from the receiving set, if indeed it was\n// there in the first place. If the value is not present, this is a no-op.\nfunc (s Set) Remove(val interface{}) {\n\thv := s.rules.Hash(val)\n\tbucket, ok := s.vals[hv]\n\tif !ok {\n\t\treturn\n\t}\n\n\tfor i, ev := range bucket {\n\t\tif s.rules.Equivalent(val, ev) {\n\t\t\tnewBucket := make([]interface{}, 0, len(bucket)-1)\n\t\t\tnewBucket = append(newBucket, bucket[:i]...)\n\t\t\tnewBucket = append(newBucket, bucket[i+1:]...)\n\t\t\tif len(newBucket) > 0 {\n\t\t\t\ts.vals[hv] = newBucket\n\t\t\t} else {\n\t\t\t\tdelete(s.vals, hv)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t}\n}\n\n// Has returns true if the given value is in the receiving set, or false if\n// it is not.\nfunc (s Set) Has(val interface{}) bool {\n\thv := s.rules.Hash(val)\n\tbucket, ok := s.vals[hv]\n\tif !ok {\n\t\treturn false\n\t}\n\n\tfor _, ev := range bucket {\n\t\tif s.rules.Equivalent(val, ev) {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// Copy performs a shallow copy of the receiving set, returning a new set\n// with the same rules and elements.\nfunc (s Set) Copy() Set {\n\tret := NewSet(s.rules)\n\tfor k, v := range s.vals {\n\t\tret.vals[k] = v\n\t}\n\treturn ret\n}\n\n// Iterator returns an iterator over values in the set. If the set's rules\n// implement OrderedRules then the result is ordered per those rules. If\n// no order is provided, or if it is not a total order, then the iteration\n// order is undefined but consistent for a particular version of cty. Do not\n// rely on specific ordering between cty releases unless the rules order is a\n// total order.\n//\n// The pattern for using the returned iterator is:\n//\n//     it := set.Iterator()\n//     for it.Next() {\n//         val := it.Value()\n//         // ...\n//     }\n//\n// Once an iterator has been created for a set, the set *must not* be mutated\n// until the iterator is no longer in use.\nfunc (s Set) Iterator() *Iterator {\n\tvals := s.Values()\n\n\treturn &Iterator{\n\t\tvals: vals,\n\t\tidx:  -1,\n\t}\n}\n\n// EachValue calls the given callback once for each value in the set, in an\n// undefined order that callers should not depend on.\nfunc (s Set) EachValue(cb func(interface{})) {\n\tit := s.Iterator()\n\tfor it.Next() {\n\t\tcb(it.Value())\n\t}\n}\n\n// Values returns a slice of all the values in the set. If the set rules have\n// an order then the result is in that order. If no order is provided or if\n// it is not a total order then the result order is undefined, but consistent\n// for a particular set value within a specific release of cty.\nfunc (s Set) Values() []interface{} {\n\tvar ret []interface{}\n\t// Sort the bucketIds to ensure that we always traverse in a\n\t// consistent order.\n\tbucketIDs := make([]int, 0, len(s.vals))\n\tfor id := range s.vals {\n\t\tbucketIDs = append(bucketIDs, id)\n\t}\n\tsort.Ints(bucketIDs)\n\n\tfor _, bucketID := range bucketIDs {\n\t\tret = append(ret, s.vals[bucketID]...)\n\t}\n\n\tif orderRules, ok := s.rules.(OrderedRules); ok {\n\t\tsort.SliceStable(ret, func(i, j int) bool {\n\t\t\treturn orderRules.Less(ret[i], ret[j])\n\t\t})\n\t}\n\n\treturn ret\n}\n\n// Length returns the number of values in the set.\nfunc (s Set) Length() int {\n\tvar count int\n\tfor _, bucket := range s.vals {\n\t\tcount = count + len(bucket)\n\t}\n\treturn count\n}\n\n// Union returns a new set that contains all of the members of both the\n// receiving set and the given set. Both sets must have the same rules, or\n// else this function will panic.\nfunc (s1 Set) Union(s2 Set) Set {\n\tmustHaveSameRules(s1, s2)\n\trs := NewSet(s1.rules)\n\ts1.EachValue(func(v interface{}) {\n\t\trs.Add(v)\n\t})\n\ts2.EachValue(func(v interface{}) {\n\t\trs.Add(v)\n\t})\n\treturn rs\n}\n\n// Intersection returns a new set that contains the values that both the\n// receiver and given sets have in common. Both sets must have the same rules,\n// or else this function will panic.\nfunc (s1 Set) Intersection(s2 Set) Set {\n\tmustHaveSameRules(s1, s2)\n\trs := NewSet(s1.rules)\n\ts1.EachValue(func(v interface{}) {\n\t\tif s2.Has(v) {\n\t\t\trs.Add(v)\n\t\t}\n\t})\n\treturn rs\n}\n\n// Subtract returns a new set that contains all of the values from the receiver\n// that are not also in the given set. Both sets must have the same rules,\n// or else this function will panic.\nfunc (s1 Set) Subtract(s2 Set) Set {\n\tmustHaveSameRules(s1, s2)\n\trs := NewSet(s1.rules)\n\ts1.EachValue(func(v interface{}) {\n\t\tif !s2.Has(v) {\n\t\t\trs.Add(v)\n\t\t}\n\t})\n\treturn rs\n}\n\n// SymmetricDifference returns a new set that contains all of the values from\n// both the receiver and given sets, except those that both sets have in\n// common. Both sets must have the same rules, or else this function will\n// panic.\nfunc (s1 Set) SymmetricDifference(s2 Set) Set {\n\tmustHaveSameRules(s1, s2)\n\trs := NewSet(s1.rules)\n\ts1.EachValue(func(v interface{}) {\n\t\tif !s2.Has(v) {\n\t\t\trs.Add(v)\n\t\t}\n\t})\n\ts2.EachValue(func(v interface{}) {\n\t\tif !s1.Has(v) {\n\t\t\trs.Add(v)\n\t\t}\n\t})\n\treturn rs\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/set/rules.go",
    "content": "package set\n\n// Rules represents the operations that define membership for a Set.\n//\n// Each Set has a Rules instance, whose methods must satisfy the interface\n// contracts given below for any value that will be added to the set.\ntype Rules interface {\n\t// Hash returns an int that somewhat-uniquely identifies the given value.\n\t//\n\t// A good hash function will minimize collisions for values that will be\n\t// added to the set, though collisions *are* permitted. Collisions will\n\t// simply reduce the efficiency of operations on the set.\n\tHash(interface{}) int\n\n\t// Equivalent returns true if and only if the two values are considered\n\t// equivalent for the sake of set membership. Two values that are\n\t// equivalent cannot exist in the set at the same time, and if two\n\t// equivalent values are added it is undefined which one will be\n\t// returned when enumerating all of the set members.\n\t//\n\t// Two values that are equivalent *must* result in the same hash value,\n\t// though it is *not* required that two values with the same hash value\n\t// be equivalent.\n\tEquivalent(interface{}, interface{}) bool\n}\n\n// OrderedRules is an extension of Rules that can apply a partial order to\n// element values. When a set's Rules implements OrderedRules an iterator\n// over the set will return items in the order described by the rules.\n//\n// If the given order is not a total order (that is, some pairs of non-equivalent\n// elements do not have a defined order) then the resulting iteration order\n// is undefined but consistent for a particular version of cty. The exact\n// order in that case is not part of the contract and is subject to change\n// between versions.\ntype OrderedRules interface {\n\tRules\n\n\t// Less returns true if and only if the first argument should sort before\n\t// the second argument. If the second argument should sort before the first\n\t// or if there is no defined order for the values, return false.\n\tLess(interface{}, interface{}) bool\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/set/set.go",
    "content": "package set\n\nimport (\n\t\"fmt\"\n)\n\n// Set is an implementation of the concept of a set: a collection where all\n// values are conceptually either in or out of the set, but the members are\n// not ordered.\n//\n// This type primarily exists to be the internal type of sets in cty, but\n// it is considered to be at the same level of abstraction as Go's built in\n// slice and map collection types, and so should make no cty-specific\n// assumptions.\n//\n// Set operations are not thread safe. It is the caller's responsibility to\n// provide mutex guarantees where necessary.\n//\n// Set operations are not optimized to minimize memory pressure. Mutating\n// a set will generally create garbage and so should perhaps be avoided in\n// tight loops where memory pressure is a concern.\ntype Set struct {\n\tvals  map[int][]interface{}\n\trules Rules\n}\n\n// NewSet returns an empty set with the membership rules given.\nfunc NewSet(rules Rules) Set {\n\treturn Set{\n\t\tvals:  map[int][]interface{}{},\n\t\trules: rules,\n\t}\n}\n\nfunc NewSetFromSlice(rules Rules, vals []interface{}) Set {\n\ts := NewSet(rules)\n\tfor _, v := range vals {\n\t\ts.Add(v)\n\t}\n\treturn s\n}\n\nfunc sameRules(s1 Set, s2 Set) bool {\n\treturn s1.rules == s2.rules\n}\n\nfunc mustHaveSameRules(s1 Set, s2 Set) {\n\tif !sameRules(s1, s2) {\n\t\tpanic(fmt.Errorf(\"incompatible set rules: %#v, %#v\", s1.rules, s2.rules))\n\t}\n}\n\n// HasRules returns true if and only if the receiving set has the given rules\n// instance as its rules.\nfunc (s Set) HasRules(rules Rules) bool {\n\treturn s.rules == rules\n}\n\n// Rules returns the receiving set's rules instance.\nfunc (s Set) Rules() Rules {\n\treturn s.rules\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/set_helper.go",
    "content": "package cty\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/zclconf/go-cty/cty/set\"\n)\n\n// ValueSet is to cty.Set what []cty.Value is to cty.List and\n// map[string]cty.Value is to cty.Map. It's provided to allow callers a\n// convenient interface for manipulating sets before wrapping them in cty.Set\n// values using cty.SetValFromValueSet.\n//\n// Unlike value slices and value maps, ValueSet instances have a single\n// homogenous element type because that is a requirement of the underlying\n// set implementation, which uses the element type to select a suitable\n// hashing function.\n//\n// Set mutations are not concurrency-safe.\ntype ValueSet struct {\n\t// ValueSet is just a thin wrapper around a set.Set with our value-oriented\n\t// \"rules\" applied. We do this so that the caller can work in terms of\n\t// cty.Value objects even though the set internals use the raw values.\n\ts set.Set\n}\n\n// NewValueSet creates and returns a new ValueSet with the given element type.\nfunc NewValueSet(ety Type) ValueSet {\n\treturn newValueSet(set.NewSet(setRules{Type: ety}))\n}\n\nfunc newValueSet(s set.Set) ValueSet {\n\treturn ValueSet{\n\t\ts: s,\n\t}\n}\n\n// ElementType returns the element type for the receiving ValueSet.\nfunc (s ValueSet) ElementType() Type {\n\treturn s.s.Rules().(setRules).Type\n}\n\n// Add inserts the given value into the receiving set.\nfunc (s ValueSet) Add(v Value) {\n\ts.requireElementType(v)\n\ts.s.Add(v.v)\n}\n\n// Remove deletes the given value from the receiving set, if indeed it was\n// there in the first place. If the value is not present, this is a no-op.\nfunc (s ValueSet) Remove(v Value) {\n\ts.requireElementType(v)\n\ts.s.Remove(v.v)\n}\n\n// Has returns true if the given value is in the receiving set, or false if\n// it is not.\nfunc (s ValueSet) Has(v Value) bool {\n\ts.requireElementType(v)\n\treturn s.s.Has(v.v)\n}\n\n// Copy performs a shallow copy of the receiving set, returning a new set\n// with the same rules and elements.\nfunc (s ValueSet) Copy() ValueSet {\n\treturn newValueSet(s.s.Copy())\n}\n\n// Length returns the number of values in the set.\nfunc (s ValueSet) Length() int {\n\treturn s.s.Length()\n}\n\n// Values returns a slice of all of the values in the set in no particular\n// order.\nfunc (s ValueSet) Values() []Value {\n\tl := s.s.Length()\n\tif l == 0 {\n\t\treturn nil\n\t}\n\tret := make([]Value, 0, l)\n\tety := s.ElementType()\n\tfor it := s.s.Iterator(); it.Next(); {\n\t\tret = append(ret, Value{\n\t\t\tty: ety,\n\t\t\tv:  it.Value(),\n\t\t})\n\t}\n\treturn ret\n}\n\n// Union returns a new set that contains all of the members of both the\n// receiving set and the given set. Both sets must have the same element type,\n// or else this function will panic.\nfunc (s ValueSet) Union(other ValueSet) ValueSet {\n\treturn newValueSet(s.s.Union(other.s))\n}\n\n// Intersection returns a new set that contains the values that both the\n// receiver and given sets have in common. Both sets must have the same element\n// type, or else this function will panic.\nfunc (s ValueSet) Intersection(other ValueSet) ValueSet {\n\treturn newValueSet(s.s.Intersection(other.s))\n}\n\n// Subtract returns a new set that contains all of the values from the receiver\n// that are not also in the given set. Both sets must have the same element\n// type, or else this function will panic.\nfunc (s ValueSet) Subtract(other ValueSet) ValueSet {\n\treturn newValueSet(s.s.Subtract(other.s))\n}\n\n// SymmetricDifference returns a new set that contains all of the values from\n// both the receiver and given sets, except those that both sets have in\n// common. Both sets must have the same element type, or else this function\n// will panic.\nfunc (s ValueSet) SymmetricDifference(other ValueSet) ValueSet {\n\treturn newValueSet(s.s.SymmetricDifference(other.s))\n}\n\n// requireElementType panics if the given value is not of the set's element type.\nfunc (s ValueSet) requireElementType(v Value) {\n\tif !v.Type().Equals(s.ElementType()) {\n\t\tpanic(fmt.Errorf(\"attempt to use %#v value with set of %#v\", v.Type(), s.ElementType()))\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/set_internals.go",
    "content": "package cty\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"hash/crc32\"\n\t\"math/big\"\n\t\"sort\"\n\n\t\"github.com/zclconf/go-cty/cty/set\"\n)\n\n// setRules provides a Rules implementation for the ./set package that\n// respects the equality rules for cty values of the given type.\n//\n// This implementation expects that values added to the set will be\n// valid internal values for the given Type, which is to say that wrapping\n// the given value in a Value struct along with the ruleset's type should\n// produce a valid, working Value.\ntype setRules struct {\n\tType Type\n}\n\nvar _ set.OrderedRules = setRules{}\n\n// Hash returns a hash value for the receiver that can be used for equality\n// checks where some inaccuracy is tolerable.\n//\n// The hash function is value-type-specific, so it is not meaningful to compare\n// hash results for values of different types.\n//\n// This function is not safe to use for security-related applications, since\n// the hash used is not strong enough.\nfunc (val Value) Hash() int {\n\thashBytes := makeSetHashBytes(val)\n\treturn int(crc32.ChecksumIEEE(hashBytes))\n}\n\nfunc (r setRules) Hash(v interface{}) int {\n\treturn Value{\n\t\tty: r.Type,\n\t\tv:  v,\n\t}.Hash()\n}\n\nfunc (r setRules) Equivalent(v1 interface{}, v2 interface{}) bool {\n\tv1v := Value{\n\t\tty: r.Type,\n\t\tv:  v1,\n\t}\n\tv2v := Value{\n\t\tty: r.Type,\n\t\tv:  v2,\n\t}\n\n\teqv := v1v.Equals(v2v)\n\n\t// By comparing the result to true we ensure that an Unknown result,\n\t// which will result if either value is unknown, will be considered\n\t// as non-equivalent. Two unknown values are not equivalent for the\n\t// sake of set membership.\n\treturn eqv.v == true\n}\n\n// Less is an implementation of set.OrderedRules so that we can iterate over\n// set elements in a consistent order, where such an order is possible.\nfunc (r setRules) Less(v1, v2 interface{}) bool {\n\tv1v := Value{\n\t\tty: r.Type,\n\t\tv:  v1,\n\t}\n\tv2v := Value{\n\t\tty: r.Type,\n\t\tv:  v2,\n\t}\n\n\tif v1v.RawEquals(v2v) { // Easy case: if they are equal then v1 can't be less\n\t\treturn false\n\t}\n\n\t// Null values always sort after non-null values\n\tif v2v.IsNull() && !v1v.IsNull() {\n\t\treturn true\n\t} else if v1v.IsNull() {\n\t\treturn false\n\t}\n\t// Unknown values always sort after known values\n\tif v1v.IsKnown() && !v2v.IsKnown() {\n\t\treturn true\n\t} else if !v1v.IsKnown() {\n\t\treturn false\n\t}\n\n\tswitch r.Type {\n\tcase String:\n\t\t// String values sort lexicographically\n\t\treturn v1v.AsString() < v2v.AsString()\n\tcase Bool:\n\t\t// Weird to have a set of bools, but if we do then false sorts before true.\n\t\tif v2v.True() || !v1v.True() {\n\t\t\treturn true\n\t\t}\n\t\treturn false\n\tcase Number:\n\t\tv1f := v1v.AsBigFloat()\n\t\tv2f := v2v.AsBigFloat()\n\t\treturn v1f.Cmp(v2f) < 0\n\tdefault:\n\t\t// No other types have a well-defined ordering, so we just produce a\n\t\t// default consistent-but-undefined ordering then. This situation is\n\t\t// not considered a compatibility constraint; callers should rely only\n\t\t// on the ordering rules for primitive values.\n\t\tv1h := makeSetHashBytes(v1v)\n\t\tv2h := makeSetHashBytes(v2v)\n\t\treturn bytes.Compare(v1h, v2h) < 0\n\t}\n}\n\nfunc makeSetHashBytes(val Value) []byte {\n\tvar buf bytes.Buffer\n\tappendSetHashBytes(val, &buf)\n\treturn buf.Bytes()\n}\n\nfunc appendSetHashBytes(val Value, buf *bytes.Buffer) {\n\t// Exactly what bytes we generate here don't matter as long as the following\n\t// constraints hold:\n\t// - Unknown and null values all generate distinct strings from\n\t//   each other and from any normal value of the given type.\n\t// - The delimiter used to separate items in a compound structure can\n\t//   never appear literally in any of its elements.\n\t// Since we don't support hetrogenous lists we don't need to worry about\n\t// collisions between values of different types, apart from\n\t// PseudoTypeDynamic.\n\t// If in practice we *do* get a collision then it's not a big deal because\n\t// the Equivalent function will still distinguish values, but set\n\t// performance will be best if we are able to produce a distinct string\n\t// for each distinct value, unknown values notwithstanding.\n\tif !val.IsKnown() {\n\t\tbuf.WriteRune('?')\n\t\treturn\n\t}\n\tif val.IsNull() {\n\t\tbuf.WriteRune('~')\n\t\treturn\n\t}\n\n\tswitch val.ty {\n\tcase Number:\n\t\tbuf.WriteString(val.v.(*big.Float).String())\n\t\treturn\n\tcase Bool:\n\t\tif val.v.(bool) {\n\t\t\tbuf.WriteRune('T')\n\t\t} else {\n\t\t\tbuf.WriteRune('F')\n\t\t}\n\t\treturn\n\tcase String:\n\t\tbuf.WriteString(fmt.Sprintf(\"%q\", val.v.(string)))\n\t\treturn\n\t}\n\n\tif val.ty.IsMapType() {\n\t\tbuf.WriteRune('{')\n\t\tval.ForEachElement(func(keyVal, elementVal Value) bool {\n\t\t\tappendSetHashBytes(keyVal, buf)\n\t\t\tbuf.WriteRune(':')\n\t\t\tappendSetHashBytes(elementVal, buf)\n\t\t\tbuf.WriteRune(';')\n\t\t\treturn false\n\t\t})\n\t\tbuf.WriteRune('}')\n\t\treturn\n\t}\n\n\tif val.ty.IsListType() || val.ty.IsSetType() {\n\t\tbuf.WriteRune('[')\n\t\tval.ForEachElement(func(keyVal, elementVal Value) bool {\n\t\t\tappendSetHashBytes(elementVal, buf)\n\t\t\tbuf.WriteRune(';')\n\t\t\treturn false\n\t\t})\n\t\tbuf.WriteRune(']')\n\t\treturn\n\t}\n\n\tif val.ty.IsObjectType() {\n\t\tbuf.WriteRune('<')\n\t\tattrNames := make([]string, 0, len(val.ty.AttributeTypes()))\n\t\tfor attrName := range val.ty.AttributeTypes() {\n\t\t\tattrNames = append(attrNames, attrName)\n\t\t}\n\t\tsort.Strings(attrNames)\n\t\tfor _, attrName := range attrNames {\n\t\t\tappendSetHashBytes(val.GetAttr(attrName), buf)\n\t\t\tbuf.WriteRune(';')\n\t\t}\n\t\tbuf.WriteRune('>')\n\t\treturn\n\t}\n\n\tif val.ty.IsTupleType() {\n\t\tbuf.WriteRune('<')\n\t\tval.ForEachElement(func(keyVal, elementVal Value) bool {\n\t\t\tappendSetHashBytes(elementVal, buf)\n\t\t\tbuf.WriteRune(';')\n\t\t\treturn false\n\t\t})\n\t\tbuf.WriteRune('>')\n\t\treturn\n\t}\n\n\t// should never get down here\n\tpanic(\"unsupported type in set hash\")\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/set_type.go",
    "content": "package cty\n\nimport (\n\t\"fmt\"\n)\n\ntype typeSet struct {\n\ttypeImplSigil\n\tElementTypeT Type\n}\n\n// Set creates a set type with the given element Type.\n//\n// Set types are CollectionType implementations.\nfunc Set(elem Type) Type {\n\treturn Type{\n\t\ttypeSet{\n\t\t\tElementTypeT: elem,\n\t\t},\n\t}\n}\n\n// Equals returns true if the other Type is a set whose element type is\n// equal to that of the receiver.\nfunc (t typeSet) Equals(other Type) bool {\n\tot, isSet := other.typeImpl.(typeSet)\n\tif !isSet {\n\t\treturn false\n\t}\n\n\treturn t.ElementTypeT.Equals(ot.ElementTypeT)\n}\n\nfunc (t typeSet) FriendlyName(mode friendlyTypeNameMode) string {\n\telemName := t.ElementTypeT.friendlyNameMode(mode)\n\tif mode == friendlyTypeConstraintName {\n\t\tif t.ElementTypeT == DynamicPseudoType {\n\t\t\telemName = \"any single type\"\n\t\t}\n\t}\n\treturn \"set of \" + elemName\n}\n\nfunc (t typeSet) ElementType() Type {\n\treturn t.ElementTypeT\n}\n\nfunc (t typeSet) GoString() string {\n\treturn fmt.Sprintf(\"cty.Set(%#v)\", t.ElementTypeT)\n}\n\n// IsSetType returns true if the given type is a list type, regardless of its\n// element type.\nfunc (t Type) IsSetType() bool {\n\t_, ok := t.typeImpl.(typeSet)\n\treturn ok\n}\n\n// SetElementType is a convenience method that checks if the given type is\n// a set type, returning a pointer to its element type if so and nil\n// otherwise. This is intended to allow convenient conditional branches,\n// like so:\n//\n//     if et := t.SetElementType(); et != nil {\n//         // Do something with *et\n//     }\nfunc (t Type) SetElementType() *Type {\n\tif lt, ok := t.typeImpl.(typeSet); ok {\n\t\treturn &lt.ElementTypeT\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/tuple_type.go",
    "content": "package cty\n\nimport (\n\t\"fmt\"\n)\n\ntype typeTuple struct {\n\ttypeImplSigil\n\tElemTypes []Type\n}\n\n// Tuple creates a tuple type with the given element types.\n//\n// After a slice is passed to this function the caller must no longer access\n// the underlying array, since ownership is transferred to this library.\nfunc Tuple(elemTypes []Type) Type {\n\treturn Type{\n\t\ttypeTuple{\n\t\t\tElemTypes: elemTypes,\n\t\t},\n\t}\n}\n\nfunc (t typeTuple) Equals(other Type) bool {\n\tif ot, ok := other.typeImpl.(typeTuple); ok {\n\t\tif len(t.ElemTypes) != len(ot.ElemTypes) {\n\t\t\t// Fast path: if we don't have the same number of elements\n\t\t\t// then we can't possibly be equal.\n\t\t\treturn false\n\t\t}\n\n\t\tfor i, ty := range t.ElemTypes {\n\t\t\toty := ot.ElemTypes[i]\n\t\t\tif !ok {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif !oty.Equals(ty) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc (t typeTuple) FriendlyName(mode friendlyTypeNameMode) string {\n\t// There isn't really a friendly way to write a tuple type due to its\n\t// complexity, so we'll just do something English-ish. Callers will\n\t// probably want to make some extra effort to avoid ever printing out\n\t// a tuple type FriendlyName in its entirety. For example, could\n\t// produce an error message by diffing two object types and saying\n\t// something like \"Expected attribute foo to be string, but got number\".\n\t// TODO: Finish this\n\treturn \"tuple\"\n}\n\nfunc (t typeTuple) GoString() string {\n\tif len(t.ElemTypes) == 0 {\n\t\treturn \"cty.EmptyTuple\"\n\t}\n\treturn fmt.Sprintf(\"cty.Tuple(%#v)\", t.ElemTypes)\n}\n\n// EmptyTuple is a shorthand for Tuple([]Type{}), to more easily talk about\n// the empty tuple type.\nvar EmptyTuple Type\n\n// EmptyTupleVal is the only possible non-null, non-unknown value of type\n// EmptyTuple.\nvar EmptyTupleVal Value\n\nfunc init() {\n\tEmptyTuple = Tuple([]Type{})\n\tEmptyTupleVal = Value{\n\t\tty: EmptyTuple,\n\t\tv:  []interface{}{},\n\t}\n}\n\n// IsTupleType returns true if the given type is an object type, regardless\n// of its element type.\nfunc (t Type) IsTupleType() bool {\n\t_, ok := t.typeImpl.(typeTuple)\n\treturn ok\n}\n\n// Length returns the number of elements of the receiving tuple type.\n// Will panic if the reciever isn't a tuple type; use IsTupleType to determine\n// whether this operation will succeed.\nfunc (t Type) Length() int {\n\tif ot, ok := t.typeImpl.(typeTuple); ok {\n\t\treturn len(ot.ElemTypes)\n\t}\n\tpanic(\"Length on non-tuple Type\")\n}\n\n// TupleElementType returns the type of the element with the given index. Will\n// panic if the receiver is not a tuple type (use IsTupleType to confirm)\n// or if the index is out of range (use Length to confirm).\nfunc (t Type) TupleElementType(idx int) Type {\n\tif ot, ok := t.typeImpl.(typeTuple); ok {\n\t\treturn ot.ElemTypes[idx]\n\t}\n\tpanic(\"TupleElementType on non-tuple Type\")\n}\n\n// TupleElementTypes returns a slice of the recieving tuple type's element\n// types. Will panic if the receiver is not a tuple type (use IsTupleType\n// to confirm).\n//\n// The returned slice is part of the internal state of the type, and is provided\n// for read access only. It is forbidden for any caller to modify the\n// underlying array. For many purposes the element-related methods of Value\n// are more appropriate and more convenient to use.\nfunc (t Type) TupleElementTypes() []Type {\n\tif ot, ok := t.typeImpl.(typeTuple); ok {\n\t\treturn ot.ElemTypes\n\t}\n\tpanic(\"TupleElementTypes on non-tuple Type\")\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/type.go",
    "content": "package cty\n\n// Type represents value types within the type system.\n//\n// This is a closed interface type, meaning that only the concrete\n// implementations provided within this package are considered valid.\ntype Type struct {\n\ttypeImpl\n}\n\ntype typeImpl interface {\n\t// isTypeImpl is a do-nothing method that exists only to express\n\t// that a type is an implementation of typeImpl.\n\tisTypeImpl() typeImplSigil\n\n\t// Equals returns true if the other given Type exactly equals the\n\t// receiver Type.\n\tEquals(other Type) bool\n\n\t// FriendlyName returns a human-friendly *English* name for the given\n\t// type.\n\tFriendlyName(mode friendlyTypeNameMode) string\n\n\t// GoString implements the GoStringer interface from package fmt.\n\tGoString() string\n}\n\n// Base implementation of Type to embed into concrete implementations\n// to signal that they are implementations of Type.\ntype typeImplSigil struct{}\n\nfunc (t typeImplSigil) isTypeImpl() typeImplSigil {\n\treturn typeImplSigil{}\n}\n\n// Equals returns true if the other given Type exactly equals the receiver\n// type.\nfunc (t Type) Equals(other Type) bool {\n\treturn t.typeImpl.Equals(other)\n}\n\n// FriendlyName returns a human-friendly *English* name for the given type.\nfunc (t Type) FriendlyName() string {\n\treturn t.typeImpl.FriendlyName(friendlyTypeName)\n}\n\n// FriendlyNameForConstraint is similar to FriendlyName except that the\n// result is specialized for describing type _constraints_ rather than types\n// themselves. This is more appropriate when reporting that a particular value\n// does not conform to an expected type constraint.\n//\n// In particular, this function uses the term \"any type\" to refer to\n// cty.DynamicPseudoType, rather than \"dynamic\" as returned by FriendlyName.\nfunc (t Type) FriendlyNameForConstraint() string {\n\treturn t.typeImpl.FriendlyName(friendlyTypeConstraintName)\n}\n\n// friendlyNameMode is an internal combination of the various FriendlyName*\n// variants that just directly takes a mode, for easy passthrough for\n// recursive name construction.\nfunc (t Type) friendlyNameMode(mode friendlyTypeNameMode) string {\n\treturn t.typeImpl.FriendlyName(mode)\n}\n\n// GoString returns a string approximating how the receiver type would be\n// expressed in Go source code.\nfunc (t Type) GoString() string {\n\tif t.typeImpl == nil {\n\t\treturn \"cty.NilType\"\n\t}\n\n\treturn t.typeImpl.GoString()\n}\n\n// NilType is an invalid type used when a function is returning an error\n// and has no useful type to return. It should not be used and any methods\n// called on it will panic.\nvar NilType = Type{}\n\n// HasDynamicTypes returns true either if the receiver is itself\n// DynamicPseudoType or if it is a compound type whose descendent elements\n// are DynamicPseudoType.\nfunc (t Type) HasDynamicTypes() bool {\n\tswitch {\n\tcase t == DynamicPseudoType:\n\t\treturn true\n\tcase t.IsPrimitiveType():\n\t\treturn false\n\tcase t.IsCollectionType():\n\t\treturn false\n\tcase t.IsObjectType():\n\t\tattrTypes := t.AttributeTypes()\n\t\tfor _, at := range attrTypes {\n\t\t\tif at.HasDynamicTypes() {\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\t\treturn false\n\tcase t.IsTupleType():\n\t\telemTypes := t.TupleElementTypes()\n\t\tfor _, et := range elemTypes {\n\t\t\tif et.HasDynamicTypes() {\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\t\treturn false\n\tcase t.IsCapsuleType():\n\t\treturn false\n\tdefault:\n\t\t// Should never happen, since above should be exhaustive\n\t\tpanic(\"HasDynamicTypes does not support the given type\")\n\t}\n}\n\ntype friendlyTypeNameMode rune\n\nconst (\n\tfriendlyTypeName           friendlyTypeNameMode = 'N'\n\tfriendlyTypeConstraintName friendlyTypeNameMode = 'C'\n)\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/type_conform.go",
    "content": "package cty\n\n// TestConformance recursively walks the receiver and the given other type and\n// returns nil if the receiver *conforms* to the given type.\n//\n// Type conformance is similar to type equality but has one crucial difference:\n// PseudoTypeDynamic can be used within the given type to represent that\n// *any* type is allowed.\n//\n// If any non-conformities are found, the returned slice will be non-nil and\n// contain at least one error value. It will be nil if the type is entirely\n// conformant.\n//\n// Note that the special behavior of PseudoTypeDynamic is the *only* exception\n// to normal type equality. Calling applications may wish to apply their own\n// automatic conversion logic to the given data structure to create a more\n// liberal notion of conformance to a type.\n//\n// Returned errors are usually (but not always) PathError instances that\n// indicate where in the structure the error was found. If a returned error\n// is of that type then the error message is written for (English-speaking)\n// end-users working within the cty type system, not mentioning any Go-oriented\n// implementation details.\nfunc (t Type) TestConformance(other Type) []error {\n\tpath := make(Path, 0)\n\tvar errs []error\n\ttestConformance(t, other, path, &errs)\n\treturn errs\n}\n\nfunc testConformance(given Type, want Type, path Path, errs *[]error) {\n\tif want.Equals(DynamicPseudoType) {\n\t\t// anything goes!\n\t\treturn\n\t}\n\n\tif given.Equals(want) {\n\t\t// Any equal types are always conformant\n\t\treturn\n\t}\n\n\t// The remainder of this function is concerned with detecting\n\t// and reporting the specific non-conformance, since we wouldn't\n\t// have got here if the types were not divergent.\n\t// We treat compound structures as special so that we can report\n\t// specifically what is non-conforming, rather than simply returning\n\t// the entire type names and letting the user puzzle it out.\n\n\tif given.IsObjectType() && want.IsObjectType() {\n\t\tgivenAttrs := given.AttributeTypes()\n\t\twantAttrs := want.AttributeTypes()\n\n\t\tfor k := range givenAttrs {\n\t\t\tif _, exists := wantAttrs[k]; !exists {\n\t\t\t\t*errs = append(\n\t\t\t\t\t*errs,\n\t\t\t\t\terrorf(path, \"unsupported attribute %q\", k),\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\tfor k := range wantAttrs {\n\t\t\tif _, exists := givenAttrs[k]; !exists {\n\t\t\t\t*errs = append(\n\t\t\t\t\t*errs,\n\t\t\t\t\terrorf(path, \"missing required attribute %q\", k),\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\n\t\tpath = append(path, nil)\n\t\tpathIdx := len(path) - 1\n\n\t\tfor k, wantAttrType := range wantAttrs {\n\t\t\tif givenAttrType, exists := givenAttrs[k]; exists {\n\t\t\t\tpath[pathIdx] = GetAttrStep{Name: k}\n\t\t\t\ttestConformance(givenAttrType, wantAttrType, path, errs)\n\t\t\t}\n\t\t}\n\n\t\tpath = path[0:pathIdx]\n\n\t\treturn\n\t}\n\n\tif given.IsTupleType() && want.IsTupleType() {\n\t\tgivenElems := given.TupleElementTypes()\n\t\twantElems := want.TupleElementTypes()\n\n\t\tif len(givenElems) != len(wantElems) {\n\t\t\t*errs = append(\n\t\t\t\t*errs,\n\t\t\t\terrorf(path, \"%d elements are required, but got %d\", len(wantElems), len(givenElems)),\n\t\t\t)\n\t\t\treturn\n\t\t}\n\n\t\tpath = append(path, nil)\n\t\tpathIdx := len(path) - 1\n\n\t\tfor i, wantElemType := range wantElems {\n\t\t\tgivenElemType := givenElems[i]\n\t\t\tpath[pathIdx] = IndexStep{Key: NumberIntVal(int64(i))}\n\t\t\ttestConformance(givenElemType, wantElemType, path, errs)\n\t\t}\n\n\t\tpath = path[0:pathIdx]\n\n\t\treturn\n\t}\n\n\tif given.IsListType() && want.IsListType() {\n\t\tpath = append(path, IndexStep{Key: UnknownVal(Number)})\n\t\tpathIdx := len(path) - 1\n\t\ttestConformance(given.ElementType(), want.ElementType(), path, errs)\n\t\tpath = path[0:pathIdx]\n\t\treturn\n\t}\n\n\tif given.IsMapType() && want.IsMapType() {\n\t\tpath = append(path, IndexStep{Key: UnknownVal(String)})\n\t\tpathIdx := len(path) - 1\n\t\ttestConformance(given.ElementType(), want.ElementType(), path, errs)\n\t\tpath = path[0:pathIdx]\n\t\treturn\n\t}\n\n\tif given.IsSetType() && want.IsSetType() {\n\t\tpath = append(path, IndexStep{Key: UnknownVal(given.ElementType())})\n\t\tpathIdx := len(path) - 1\n\t\ttestConformance(given.ElementType(), want.ElementType(), path, errs)\n\t\tpath = path[0:pathIdx]\n\t\treturn\n\t}\n\n\t*errs = append(\n\t\t*errs,\n\t\terrorf(path, \"%s required, but received %s\", want.FriendlyName(), given.FriendlyName()),\n\t)\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/types_to_register.go",
    "content": "package cty\n\nimport (\n\t\"encoding/gob\"\n\t\"fmt\"\n\t\"math/big\"\n\t\"strings\"\n\n\t\"github.com/zclconf/go-cty/cty/set\"\n)\n\n// InternalTypesToRegister is a slice of values that covers all of the\n// internal types used in the representation of cty.Type and cty.Value\n// across all cty Types.\n//\n// This is intended to be used to register these types with encoding\n// packages that require registration of types used in interfaces, such as\n// encoding/gob, thus allowing cty types and values to be included in streams\n// created from those packages. However, registering with gob is not necessary\n// since that is done automatically as a side-effect of importing this package.\n//\n// Callers should not do anything with the values here except pass them on\n// verbatim to a registration function.\n//\n// If the calling application uses Capsule types that wrap local structs either\n// directly or indirectly, these structs may also need to be registered in\n// order to support encoding and decoding of values of these types. That is the\n// responsibility of the calling application.\nvar InternalTypesToRegister []interface{}\n\nfunc init() {\n\tInternalTypesToRegister = []interface{}{\n\t\tprimitiveType{},\n\t\ttypeList{},\n\t\ttypeMap{},\n\t\ttypeObject{},\n\t\ttypeSet{},\n\t\tsetRules{},\n\t\tset.Set{},\n\t\ttypeTuple{},\n\t\tbig.Float{},\n\t\tcapsuleType{},\n\t\t[]interface{}(nil),\n\t\tmap[string]interface{}(nil),\n\t}\n\n\t// Register these with gob here, rather than in gob.go, to ensure\n\t// that this will always happen after we build the above.\n\tfor _, tv := range InternalTypesToRegister {\n\t\ttypeName := fmt.Sprintf(\"%T\", tv)\n\t\tif strings.HasPrefix(typeName, \"cty.\") {\n\t\t\tgob.RegisterName(fmt.Sprintf(\"github.com/zclconf/go-cty/%s\", typeName), tv)\n\t\t} else {\n\t\t\tgob.Register(tv)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/unknown.go",
    "content": "package cty\n\n// unknownType is the placeholder type used for the sigil value representing\n// \"Unknown\", to make it unambigiously distinct from any other possible value.\ntype unknownType struct {\n}\n\n// Unknown is a special value that can be\nvar unknown interface{} = &unknownType{}\n\n// UnknownVal returns an Value that represents an unknown value of the given\n// type. Unknown values can be used to represent a value that is\n// not yet known. Its meaning is undefined in cty, but it could be used by\n// an calling application to allow partial evaluation.\n//\n// Unknown values of any type can be created of any type. All operations on\n// Unknown values themselves return Unknown.\nfunc UnknownVal(t Type) Value {\n\treturn Value{\n\t\tty: t,\n\t\tv:  unknown,\n\t}\n}\n\nfunc (t unknownType) GoString() string {\n\t// This is the stringification of our internal unknown marker. The\n\t// stringification of the public representation of unknowns is in\n\t// Value.GoString.\n\treturn \"cty.unknown\"\n}\n\ntype pseudoTypeDynamic struct {\n\ttypeImplSigil\n}\n\n// DynamicPseudoType represents the dynamic pseudo-type.\n//\n// This type can represent situations where a type is not yet known. Its\n// meaning is undefined in cty, but it could be used by a calling\n// application to allow expression type checking with some types not yet known.\n// For example, the application might optimistically permit any operation on\n// values of this type in type checking, allowing a partial type-check result,\n// and then repeat the check when more information is known to get the\n// final, concrete type.\n//\n// It is a pseudo-type because it is used only as a sigil to the calling\n// application. \"Unknown\" is the only valid value of this pseudo-type, so\n// operations on values of this type will always short-circuit as per\n// the rules for that special value.\nvar DynamicPseudoType Type\n\nfunc (t pseudoTypeDynamic) Equals(other Type) bool {\n\t_, ok := other.typeImpl.(pseudoTypeDynamic)\n\treturn ok\n}\n\nfunc (t pseudoTypeDynamic) FriendlyName(mode friendlyTypeNameMode) string {\n\tswitch mode {\n\tcase friendlyTypeConstraintName:\n\t\treturn \"any type\"\n\tdefault:\n\t\treturn \"dynamic\"\n\t}\n}\n\nfunc (t pseudoTypeDynamic) GoString() string {\n\treturn \"cty.DynamicPseudoType\"\n}\n\n// DynamicVal is the only valid value of the pseudo-type dynamic.\n// This value can be used as a placeholder where a value or expression's\n// type and value are both unknown, thus allowing partial evaluation. See\n// the docs for DynamicPseudoType for more information.\nvar DynamicVal Value\n\nfunc init() {\n\tDynamicPseudoType = Type{\n\t\tpseudoTypeDynamic{},\n\t}\n\tDynamicVal = Value{\n\t\tty: DynamicPseudoType,\n\t\tv:  unknown,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/unknown_as_null.go",
    "content": "package cty\n\n// UnknownAsNull returns a value of the same type as the given value but\n// with any unknown values (including nested values) replaced with null\n// values of the same type.\n//\n// This can be useful if a result is to be serialized in a format that can't\n// represent unknowns, such as JSON, as long as the caller does not need to\n// retain the unknown value information.\nfunc UnknownAsNull(val Value) Value {\n\tty := val.Type()\n\tswitch {\n\tcase val.IsNull():\n\t\treturn val\n\tcase !val.IsKnown():\n\t\treturn NullVal(ty)\n\tcase ty.IsListType() || ty.IsTupleType() || ty.IsSetType():\n\t\tlength := val.LengthInt()\n\t\tif length == 0 {\n\t\t\t// If there are no elements then we can't have unknowns\n\t\t\treturn val\n\t\t}\n\t\tvals := make([]Value, 0, length)\n\t\tit := val.ElementIterator()\n\t\tfor it.Next() {\n\t\t\t_, v := it.Element()\n\t\t\tvals = append(vals, UnknownAsNull(v))\n\t\t}\n\t\tswitch {\n\t\tcase ty.IsListType():\n\t\t\treturn ListVal(vals)\n\t\tcase ty.IsTupleType():\n\t\t\treturn TupleVal(vals)\n\t\tdefault:\n\t\t\treturn SetVal(vals)\n\t\t}\n\tcase ty.IsMapType() || ty.IsObjectType():\n\t\tvar length int\n\t\tswitch {\n\t\tcase ty.IsMapType():\n\t\t\tlength = val.LengthInt()\n\t\tdefault:\n\t\t\tlength = len(val.Type().AttributeTypes())\n\t\t}\n\t\tif length == 0 {\n\t\t\t// If there are no elements then we can't have unknowns\n\t\t\treturn val\n\t\t}\n\t\tvals := make(map[string]Value, length)\n\t\tit := val.ElementIterator()\n\t\tfor it.Next() {\n\t\t\tk, v := it.Element()\n\t\t\tvals[k.AsString()] = UnknownAsNull(v)\n\t\t}\n\t\tswitch {\n\t\tcase ty.IsMapType():\n\t\t\treturn MapVal(vals)\n\t\tdefault:\n\t\t\treturn ObjectVal(vals)\n\t\t}\n\t}\n\n\treturn val\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/value.go",
    "content": "package cty\n\n// Value represents a value of a particular type, and is the interface by\n// which operations are executed on typed values.\n//\n// Value has two different classes of method. Operation methods stay entirely\n// within the type system (methods accept and return Value instances) and\n// are intended for use in implementing a language in terms of cty, while\n// integration methods either enter or leave the type system, working with\n// native Go values. Operation methods are guaranteed to support all of the\n// expected short-circuit behavior for unknown and dynamic values, while\n// integration methods may not.\n//\n// The philosophy for the operations API is that it's the caller's\n// responsibility to ensure that the given types and values satisfy the\n// specified invariants during a separate type check, so that the caller is\n// able to return errors to its user from the application's own perspective.\n//\n// Consequently the design of these methods assumes such checks have already\n// been done and panics if any invariants turn out not to be satisfied. These\n// panic errors are not intended to be handled, but rather indicate a bug in\n// the calling application that should be fixed with more checks prior to\n// executing operations.\n//\n// A related consequence of this philosophy is that no automatic type\n// conversions are done. If a method specifies that its argument must be\n// number then it's the caller's responsibility to do that conversion before\n// the call, thus allowing the application to have more constrained conversion\n// rules than are offered by the built-in converter where necessary.\ntype Value struct {\n\tty Type\n\tv  interface{}\n}\n\n// Type returns the type of the value.\nfunc (val Value) Type() Type {\n\treturn val.ty\n}\n\n// IsKnown returns true if the value is known. That is, if it is not\n// the result of the unknown value constructor Unknown(...), and is not\n// the result of an operation on another unknown value.\n//\n// Unknown values are only produced either directly or as a result of\n// operating on other unknown values, and so an application that never\n// introduces Unknown values can be guaranteed to never receive any either.\nfunc (val Value) IsKnown() bool {\n\treturn val.v != unknown\n}\n\n// IsNull returns true if the value is null. Values of any type can be\n// null, but any operations on a null value will panic. No operation ever\n// produces null, so an application that never introduces Null values can\n// be guaranteed to never receive any either.\nfunc (val Value) IsNull() bool {\n\treturn val.v == nil\n}\n\n// NilVal is an invalid Value that can be used as a placeholder when returning\n// with an error from a function that returns (Value, error).\n//\n// NilVal is *not* a valid error and so no operations may be performed on it.\n// Any attempt to use it will result in a panic.\n//\n// This should not be confused with the idea of a Null value, as returned by\n// NullVal. NilVal is a nil within the *Go* type system, and is invalid in\n// the cty type system. Null values *do* exist in the cty type system.\nvar NilVal = Value{\n\tty: Type{typeImpl: nil},\n\tv:  nil,\n}\n\n// IsWhollyKnown is an extension of IsKnown that also recursively checks\n// inside collections and structures to see if there are any nested unknown\n// values.\nfunc (val Value) IsWhollyKnown() bool {\n\tif !val.IsKnown() {\n\t\treturn false\n\t}\n\n\tif val.IsNull() {\n\t\t// Can't recurse into a null, so we're done\n\t\treturn true\n\t}\n\n\tswitch {\n\tcase val.CanIterateElements():\n\t\tfor it := val.ElementIterator(); it.Next(); {\n\t\t\t_, ev := it.Element()\n\t\t\tif !ev.IsWhollyKnown() {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\treturn true\n\tdefault:\n\t\treturn true\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/value_init.go",
    "content": "package cty\n\nimport (\n\t\"fmt\"\n\t\"math/big\"\n\t\"reflect\"\n\n\t\"golang.org/x/text/unicode/norm\"\n\n\t\"github.com/zclconf/go-cty/cty/set\"\n)\n\n// BoolVal returns a Value of type Number whose internal value is the given\n// bool.\nfunc BoolVal(v bool) Value {\n\treturn Value{\n\t\tty: Bool,\n\t\tv:  v,\n\t}\n}\n\n// NumberVal returns a Value of type Number whose internal value is the given\n// big.Float. The returned value becomes the owner of the big.Float object,\n// and so it's forbidden for the caller to mutate the object after it's\n// wrapped in this way.\nfunc NumberVal(v *big.Float) Value {\n\treturn Value{\n\t\tty: Number,\n\t\tv:  v,\n\t}\n}\n\n// ParseNumberVal returns a Value of type number produced by parsing the given\n// string as a decimal real number. To ensure that two identical strings will\n// always produce an equal number, always use this function to derive a number\n// from a string; it will ensure that the precision and rounding mode for the\n// internal big decimal is configured in a consistent way.\n//\n// If the given string cannot be parsed as a number, the returned error has\n// the message \"a number is required\", making it suitable to return to an\n// end-user to signal a type conversion error.\n//\n// If the given string contains a number that becomes a recurring fraction\n// when expressed in binary then it will be truncated to have a 512-bit\n// mantissa. Note that this is a higher precision than that of a float64,\n// so coverting the same decimal number first to float64 and then calling\n// NumberFloatVal will not produce an equal result; the conversion first\n// to float64 will round the mantissa to fewer than 512 bits.\nfunc ParseNumberVal(s string) (Value, error) {\n\t// Base 10, precision 512, and rounding to nearest even is the standard\n\t// way to handle numbers arriving as strings.\n\tf, _, err := big.ParseFloat(s, 10, 512, big.ToNearestEven)\n\tif err != nil {\n\t\treturn NilVal, fmt.Errorf(\"a number is required\")\n\t}\n\treturn NumberVal(f), nil\n}\n\n// MustParseNumberVal is like ParseNumberVal but it will panic in case of any\n// error. It can be used during initialization or any other situation where\n// the given string is a constant or otherwise known to be correct by the\n// caller.\nfunc MustParseNumberVal(s string) Value {\n\tret, err := ParseNumberVal(s)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn ret\n}\n\n// NumberIntVal returns a Value of type Number whose internal value is equal\n// to the given integer.\nfunc NumberIntVal(v int64) Value {\n\treturn NumberVal(new(big.Float).SetInt64(v))\n}\n\n// NumberUIntVal returns a Value of type Number whose internal value is equal\n// to the given unsigned integer.\nfunc NumberUIntVal(v uint64) Value {\n\treturn NumberVal(new(big.Float).SetUint64(v))\n}\n\n// NumberFloatVal returns a Value of type Number whose internal value is\n// equal to the given float.\nfunc NumberFloatVal(v float64) Value {\n\treturn NumberVal(new(big.Float).SetFloat64(v))\n}\n\n// StringVal returns a Value of type String whose internal value is the\n// given string.\n//\n// Strings must be UTF-8 encoded sequences of valid unicode codepoints, and\n// they are NFC-normalized on entry into the world of cty values.\n//\n// If the given string is not valid UTF-8 then behavior of string operations\n// is undefined.\nfunc StringVal(v string) Value {\n\treturn Value{\n\t\tty: String,\n\t\tv:  NormalizeString(v),\n\t}\n}\n\n// NormalizeString applies the same normalization that cty applies when\n// constructing string values.\n//\n// A return value from this function can be meaningfully compared byte-for-byte\n// with a Value.AsString result.\nfunc NormalizeString(s string) string {\n\treturn norm.NFC.String(s)\n}\n\n// ObjectVal returns a Value of an object type whose structure is defined\n// by the key names and value types in the given map.\nfunc ObjectVal(attrs map[string]Value) Value {\n\tattrTypes := make(map[string]Type, len(attrs))\n\tattrVals := make(map[string]interface{}, len(attrs))\n\n\tfor attr, val := range attrs {\n\t\tattr = NormalizeString(attr)\n\t\tattrTypes[attr] = val.ty\n\t\tattrVals[attr] = val.v\n\t}\n\n\treturn Value{\n\t\tty: Object(attrTypes),\n\t\tv:  attrVals,\n\t}\n}\n\n// TupleVal returns a Value of a tuple type whose element types are\n// defined by the value types in the given slice.\nfunc TupleVal(elems []Value) Value {\n\telemTypes := make([]Type, len(elems))\n\telemVals := make([]interface{}, len(elems))\n\n\tfor i, val := range elems {\n\t\telemTypes[i] = val.ty\n\t\telemVals[i] = val.v\n\t}\n\n\treturn Value{\n\t\tty: Tuple(elemTypes),\n\t\tv:  elemVals,\n\t}\n}\n\n// ListVal returns a Value of list type whose element type is defined by\n// the types of the given values, which must be homogenous.\n//\n// If the types are not all consistent (aside from elements that are of the\n// dynamic pseudo-type) then this function will panic. It will panic also\n// if the given list is empty, since then the element type cannot be inferred.\n// (See also ListValEmpty.)\nfunc ListVal(vals []Value) Value {\n\tif len(vals) == 0 {\n\t\tpanic(\"must not call ListVal with empty slice\")\n\t}\n\telementType := DynamicPseudoType\n\trawList := make([]interface{}, len(vals))\n\n\tfor i, val := range vals {\n\t\tif elementType == DynamicPseudoType {\n\t\t\telementType = val.ty\n\t\t} else if val.ty != DynamicPseudoType && !elementType.Equals(val.ty) {\n\t\t\tpanic(fmt.Errorf(\n\t\t\t\t\"inconsistent list element types (%#v then %#v)\",\n\t\t\t\telementType, val.ty,\n\t\t\t))\n\t\t}\n\n\t\trawList[i] = val.v\n\t}\n\n\treturn Value{\n\t\tty: List(elementType),\n\t\tv:  rawList,\n\t}\n}\n\n// ListValEmpty returns an empty list of the given element type.\nfunc ListValEmpty(element Type) Value {\n\treturn Value{\n\t\tty: List(element),\n\t\tv:  []interface{}{},\n\t}\n}\n\n// MapVal returns a Value of a map type whose element type is defined by\n// the types of the given values, which must be homogenous.\n//\n// If the types are not all consistent (aside from elements that are of the\n// dynamic pseudo-type) then this function will panic. It will panic also\n// if the given map is empty, since then the element type cannot be inferred.\n// (See also MapValEmpty.)\nfunc MapVal(vals map[string]Value) Value {\n\tif len(vals) == 0 {\n\t\tpanic(\"must not call MapVal with empty map\")\n\t}\n\telementType := DynamicPseudoType\n\trawMap := make(map[string]interface{}, len(vals))\n\n\tfor key, val := range vals {\n\t\tif elementType == DynamicPseudoType {\n\t\t\telementType = val.ty\n\t\t} else if val.ty != DynamicPseudoType && !elementType.Equals(val.ty) {\n\t\t\tpanic(fmt.Errorf(\n\t\t\t\t\"inconsistent map element types (%#v then %#v)\",\n\t\t\t\telementType, val.ty,\n\t\t\t))\n\t\t}\n\n\t\trawMap[NormalizeString(key)] = val.v\n\t}\n\n\treturn Value{\n\t\tty: Map(elementType),\n\t\tv:  rawMap,\n\t}\n}\n\n// MapValEmpty returns an empty map of the given element type.\nfunc MapValEmpty(element Type) Value {\n\treturn Value{\n\t\tty: Map(element),\n\t\tv:  map[string]interface{}{},\n\t}\n}\n\n// SetVal returns a Value of set type whose element type is defined by\n// the types of the given values, which must be homogenous.\n//\n// If the types are not all consistent (aside from elements that are of the\n// dynamic pseudo-type) then this function will panic. It will panic also\n// if the given list is empty, since then the element type cannot be inferred.\n// (See also SetValEmpty.)\nfunc SetVal(vals []Value) Value {\n\tif len(vals) == 0 {\n\t\tpanic(\"must not call SetVal with empty slice\")\n\t}\n\telementType := DynamicPseudoType\n\trawList := make([]interface{}, len(vals))\n\n\tfor i, val := range vals {\n\t\tif elementType == DynamicPseudoType {\n\t\t\telementType = val.ty\n\t\t} else if val.ty != DynamicPseudoType && !elementType.Equals(val.ty) {\n\t\t\tpanic(fmt.Errorf(\n\t\t\t\t\"inconsistent set element types (%#v then %#v)\",\n\t\t\t\telementType, val.ty,\n\t\t\t))\n\t\t}\n\n\t\trawList[i] = val.v\n\t}\n\n\trawVal := set.NewSetFromSlice(setRules{elementType}, rawList)\n\n\treturn Value{\n\t\tty: Set(elementType),\n\t\tv:  rawVal,\n\t}\n}\n\n// SetValFromValueSet returns a Value of set type based on an already-constructed\n// ValueSet.\n//\n// The element type of the returned value is the element type of the given\n// set.\nfunc SetValFromValueSet(s ValueSet) Value {\n\tety := s.ElementType()\n\trawVal := s.s.Copy() // copy so caller can't mutate what we wrap\n\n\treturn Value{\n\t\tty: Set(ety),\n\t\tv:  rawVal,\n\t}\n}\n\n// SetValEmpty returns an empty set of the given element type.\nfunc SetValEmpty(element Type) Value {\n\treturn Value{\n\t\tty: Set(element),\n\t\tv:  set.NewSet(setRules{element}),\n\t}\n}\n\n// CapsuleVal creates a value of the given capsule type using the given\n// wrapVal, which must be a pointer to a value of the capsule type's native\n// type.\n//\n// This function will panic if the given type is not a capsule type, if\n// the given wrapVal is not compatible with the given capsule type, or if\n// wrapVal is not a pointer.\nfunc CapsuleVal(ty Type, wrapVal interface{}) Value {\n\tif !ty.IsCapsuleType() {\n\t\tpanic(\"not a capsule type\")\n\t}\n\n\twv := reflect.ValueOf(wrapVal)\n\tif wv.Kind() != reflect.Ptr {\n\t\tpanic(\"wrapVal is not a pointer\")\n\t}\n\n\tit := ty.typeImpl.(*capsuleType).GoType\n\tif !wv.Type().Elem().AssignableTo(it) {\n\t\tpanic(\"wrapVal target is not compatible with the given capsule type\")\n\t}\n\n\treturn Value{\n\t\tty: ty,\n\t\tv:  wrapVal,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/value_ops.go",
    "content": "package cty\n\nimport (\n\t\"fmt\"\n\t\"math/big\"\n\t\"reflect\"\n\n\t\"github.com/zclconf/go-cty/cty/set\"\n)\n\n// GoString is an implementation of fmt.GoStringer that produces concise\n// source-like representations of values suitable for use in debug messages.\nfunc (val Value) GoString() string {\n\tif val == NilVal {\n\t\treturn \"cty.NilVal\"\n\t}\n\n\tif val.IsNull() {\n\t\treturn fmt.Sprintf(\"cty.NullVal(%#v)\", val.ty)\n\t}\n\tif val == DynamicVal { // is unknown, so must be before the IsKnown check below\n\t\treturn \"cty.DynamicVal\"\n\t}\n\tif !val.IsKnown() {\n\t\treturn fmt.Sprintf(\"cty.UnknownVal(%#v)\", val.ty)\n\t}\n\n\t// By the time we reach here we've dealt with all of the exceptions around\n\t// unknowns and nulls, so we're guaranteed that the values are the\n\t// canonical internal representation of the given type.\n\n\tswitch val.ty {\n\tcase Bool:\n\t\tif val.v.(bool) {\n\t\t\treturn \"cty.True\"\n\t\t}\n\t\treturn \"cty.False\"\n\tcase Number:\n\t\tfv := val.v.(*big.Float)\n\t\t// We'll try to use NumberIntVal or NumberFloatVal if we can, since\n\t\t// the fully-general initializer call is pretty ugly-looking.\n\t\tif fv.IsInt() {\n\t\t\treturn fmt.Sprintf(\"cty.NumberIntVal(%#v)\", fv)\n\t\t}\n\t\tif rfv, accuracy := fv.Float64(); accuracy == big.Exact {\n\t\t\treturn fmt.Sprintf(\"cty.NumberFloatVal(%#v)\", rfv)\n\t\t}\n\t\treturn fmt.Sprintf(\"cty.MustParseNumberVal(%q)\", fv.Text('f', -1))\n\tcase String:\n\t\treturn fmt.Sprintf(\"cty.StringVal(%#v)\", val.v)\n\t}\n\n\tswitch {\n\tcase val.ty.IsSetType():\n\t\tvals := val.AsValueSlice()\n\t\tif len(vals) == 0 {\n\t\t\treturn fmt.Sprintf(\"cty.SetValEmpty(%#v)\", val.ty.ElementType())\n\t\t}\n\t\treturn fmt.Sprintf(\"cty.SetVal(%#v)\", vals)\n\tcase val.ty.IsListType():\n\t\tvals := val.AsValueSlice()\n\t\tif len(vals) == 0 {\n\t\t\treturn fmt.Sprintf(\"cty.ListValEmpty(%#v)\", val.ty.ElementType())\n\t\t}\n\t\treturn fmt.Sprintf(\"cty.ListVal(%#v)\", vals)\n\tcase val.ty.IsMapType():\n\t\tvals := val.AsValueMap()\n\t\tif len(vals) == 0 {\n\t\t\treturn fmt.Sprintf(\"cty.MapValEmpty(%#v)\", val.ty.ElementType())\n\t\t}\n\t\treturn fmt.Sprintf(\"cty.MapVal(%#v)\", vals)\n\tcase val.ty.IsTupleType():\n\t\tif val.ty.Equals(EmptyTuple) {\n\t\t\treturn \"cty.EmptyTupleVal\"\n\t\t}\n\t\tvals := val.AsValueSlice()\n\t\treturn fmt.Sprintf(\"cty.TupleVal(%#v)\", vals)\n\tcase val.ty.IsObjectType():\n\t\tif val.ty.Equals(EmptyObject) {\n\t\t\treturn \"cty.EmptyObjectVal\"\n\t\t}\n\t\tvals := val.AsValueMap()\n\t\treturn fmt.Sprintf(\"cty.ObjectVal(%#v)\", vals)\n\tcase val.ty.IsCapsuleType():\n\t\treturn fmt.Sprintf(\"cty.CapsuleVal(%#v, %#v)\", val.ty, val.v)\n\t}\n\n\t// Default exposes implementation details, so should actually cover\n\t// all of the cases above for good caller UX.\n\treturn fmt.Sprintf(\"cty.Value{ty: %#v, v: %#v}\", val.ty, val.v)\n}\n\n// Equals returns True if the receiver and the given other value have the\n// same type and are exactly equal in value.\n//\n// As a special case, two null values are always equal regardless of type.\n//\n// The usual short-circuit rules apply, so the result will be unknown if\n// either of the given values are.\n//\n// Use RawEquals to compare if two values are equal *ignoring* the\n// short-circuit rules and the exception for null values.\nfunc (val Value) Equals(other Value) Value {\n\t// Start by handling Unknown values before considering types.\n\t// This needs to be done since Null values are always equal regardless of\n\t// type.\n\tswitch {\n\tcase !val.IsKnown() && !other.IsKnown():\n\t\t// both unknown\n\t\treturn UnknownVal(Bool)\n\tcase val.IsKnown() && !other.IsKnown():\n\t\tswitch {\n\t\tcase val.IsNull(), other.ty.HasDynamicTypes():\n\t\t\t// If known is Null, we need to wait for the unkown value since\n\t\t\t// nulls of any type are equal.\n\t\t\t// An unkown with a dynamic type compares as unknown, which we need\n\t\t\t// to check before the type comparison below.\n\t\t\treturn UnknownVal(Bool)\n\t\tcase !val.ty.Equals(other.ty):\n\t\t\t// There is no null comparison or dynamic types, so unequal types\n\t\t\t// will never be equal.\n\t\t\treturn False\n\t\tdefault:\n\t\t\treturn UnknownVal(Bool)\n\t\t}\n\tcase other.IsKnown() && !val.IsKnown():\n\t\tswitch {\n\t\tcase other.IsNull(), val.ty.HasDynamicTypes():\n\t\t\t// If known is Null, we need to wait for the unkown value since\n\t\t\t// nulls of any type are equal.\n\t\t\t// An unkown with a dynamic type compares as unknown, which we need\n\t\t\t// to check before the type comparison below.\n\t\t\treturn UnknownVal(Bool)\n\t\tcase !other.ty.Equals(val.ty):\n\t\t\t// There's no null comparison or dynamic types, so unequal types\n\t\t\t// will never be equal.\n\t\t\treturn False\n\t\tdefault:\n\t\t\treturn UnknownVal(Bool)\n\t\t}\n\t}\n\n\tswitch {\n\tcase val.IsNull() && other.IsNull():\n\t\t// Nulls are always equal, regardless of type\n\t\treturn BoolVal(true)\n\tcase val.IsNull() || other.IsNull():\n\t\t// If only one is null then the result must be false\n\t\treturn BoolVal(false)\n\t}\n\n\tif val.ty.HasDynamicTypes() || other.ty.HasDynamicTypes() {\n\t\treturn UnknownVal(Bool)\n\t}\n\n\tif !val.ty.Equals(other.ty) {\n\t\treturn BoolVal(false)\n\t}\n\n\tty := val.ty\n\tresult := false\n\n\tswitch {\n\tcase ty == Number:\n\t\tresult = val.v.(*big.Float).Cmp(other.v.(*big.Float)) == 0\n\tcase ty == Bool:\n\t\tresult = val.v.(bool) == other.v.(bool)\n\tcase ty == String:\n\t\t// Simple equality is safe because we NFC-normalize strings as they\n\t\t// enter our world from StringVal, and so we can assume strings are\n\t\t// always in normal form.\n\t\tresult = val.v.(string) == other.v.(string)\n\tcase ty.IsObjectType():\n\t\toty := ty.typeImpl.(typeObject)\n\t\tresult = true\n\t\tfor attr, aty := range oty.AttrTypes {\n\t\t\tlhs := Value{\n\t\t\t\tty: aty,\n\t\t\t\tv:  val.v.(map[string]interface{})[attr],\n\t\t\t}\n\t\t\trhs := Value{\n\t\t\t\tty: aty,\n\t\t\t\tv:  other.v.(map[string]interface{})[attr],\n\t\t\t}\n\t\t\teq := lhs.Equals(rhs)\n\t\t\tif !eq.IsKnown() {\n\t\t\t\treturn UnknownVal(Bool)\n\t\t\t}\n\t\t\tif eq.False() {\n\t\t\t\tresult = false\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\tcase ty.IsTupleType():\n\t\ttty := ty.typeImpl.(typeTuple)\n\t\tresult = true\n\t\tfor i, ety := range tty.ElemTypes {\n\t\t\tlhs := Value{\n\t\t\t\tty: ety,\n\t\t\t\tv:  val.v.([]interface{})[i],\n\t\t\t}\n\t\t\trhs := Value{\n\t\t\t\tty: ety,\n\t\t\t\tv:  other.v.([]interface{})[i],\n\t\t\t}\n\t\t\teq := lhs.Equals(rhs)\n\t\t\tif !eq.IsKnown() {\n\t\t\t\treturn UnknownVal(Bool)\n\t\t\t}\n\t\t\tif eq.False() {\n\t\t\t\tresult = false\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\tcase ty.IsListType():\n\t\tety := ty.typeImpl.(typeList).ElementTypeT\n\t\tif len(val.v.([]interface{})) == len(other.v.([]interface{})) {\n\t\t\tresult = true\n\t\t\tfor i := range val.v.([]interface{}) {\n\t\t\t\tlhs := Value{\n\t\t\t\t\tty: ety,\n\t\t\t\t\tv:  val.v.([]interface{})[i],\n\t\t\t\t}\n\t\t\t\trhs := Value{\n\t\t\t\t\tty: ety,\n\t\t\t\t\tv:  other.v.([]interface{})[i],\n\t\t\t\t}\n\t\t\t\teq := lhs.Equals(rhs)\n\t\t\t\tif !eq.IsKnown() {\n\t\t\t\t\treturn UnknownVal(Bool)\n\t\t\t\t}\n\t\t\t\tif eq.False() {\n\t\t\t\t\tresult = false\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\tcase ty.IsSetType():\n\t\ts1 := val.v.(set.Set)\n\t\ts2 := other.v.(set.Set)\n\t\tequal := true\n\n\t\t// Note that by our definition of sets it's never possible for two\n\t\t// sets that contain unknown values (directly or indicrectly) to\n\t\t// ever be equal, even if they are otherwise identical.\n\n\t\t// FIXME: iterating both lists and checking each item is not the\n\t\t// ideal implementation here, but it works with the primitives we\n\t\t// have in the set implementation. Perhaps the set implementation\n\t\t// can provide its own equality test later.\n\t\ts1.EachValue(func(v interface{}) {\n\t\t\tif !s2.Has(v) {\n\t\t\t\tequal = false\n\t\t\t}\n\t\t})\n\t\ts2.EachValue(func(v interface{}) {\n\t\t\tif !s1.Has(v) {\n\t\t\t\tequal = false\n\t\t\t}\n\t\t})\n\n\t\tresult = equal\n\tcase ty.IsMapType():\n\t\tety := ty.typeImpl.(typeMap).ElementTypeT\n\t\tif len(val.v.(map[string]interface{})) == len(other.v.(map[string]interface{})) {\n\t\t\tresult = true\n\t\t\tfor k := range val.v.(map[string]interface{}) {\n\t\t\t\tif _, ok := other.v.(map[string]interface{})[k]; !ok {\n\t\t\t\t\tresult = false\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tlhs := Value{\n\t\t\t\t\tty: ety,\n\t\t\t\t\tv:  val.v.(map[string]interface{})[k],\n\t\t\t\t}\n\t\t\t\trhs := Value{\n\t\t\t\t\tty: ety,\n\t\t\t\t\tv:  other.v.(map[string]interface{})[k],\n\t\t\t\t}\n\t\t\t\teq := lhs.Equals(rhs)\n\t\t\t\tif !eq.IsKnown() {\n\t\t\t\t\treturn UnknownVal(Bool)\n\t\t\t\t}\n\t\t\t\tif eq.False() {\n\t\t\t\t\tresult = false\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\tcase ty.IsCapsuleType():\n\t\t// A capsule type's encapsulated value is a pointer to a value of its\n\t\t// native type, so we can just compare these to get the identity test\n\t\t// we need.\n\t\treturn BoolVal(val.v == other.v)\n\n\tdefault:\n\t\t// should never happen\n\t\tpanic(fmt.Errorf(\"unsupported value type %#v in Equals\", ty))\n\t}\n\n\treturn BoolVal(result)\n}\n\n// NotEqual is a shorthand for Equals followed by Not.\nfunc (val Value) NotEqual(other Value) Value {\n\treturn val.Equals(other).Not()\n}\n\n// True returns true if the receiver is True, false if False, and panics if\n// the receiver is not of type Bool.\n//\n// This is a helper function to help write application logic that works with\n// values, rather than a first-class operation. It does not work with unknown\n// or null values. For more robust handling with unknown value\n// short-circuiting, use val.Equals(cty.True).\nfunc (val Value) True() bool {\n\tif val.ty != Bool {\n\t\tpanic(\"not bool\")\n\t}\n\treturn val.Equals(True).v.(bool)\n}\n\n// False is the opposite of True.\nfunc (val Value) False() bool {\n\treturn !val.True()\n}\n\n// RawEquals returns true if and only if the two given values have the same\n// type and equal value, ignoring the usual short-circuit rules about\n// unknowns and dynamic types.\n//\n// This method is more appropriate for testing than for real use, since it\n// skips over usual semantics around unknowns but as a consequence allows\n// testing the result of another operation that is expected to return unknown.\n// It returns a primitive Go bool rather than a Value to remind us that it\n// is not a first-class value operation.\nfunc (val Value) RawEquals(other Value) bool {\n\tif !val.ty.Equals(other.ty) {\n\t\treturn false\n\t}\n\tif (!val.IsKnown()) && (!other.IsKnown()) {\n\t\treturn true\n\t}\n\tif (val.IsKnown() && !other.IsKnown()) || (other.IsKnown() && !val.IsKnown()) {\n\t\treturn false\n\t}\n\tif val.IsNull() && other.IsNull() {\n\t\treturn true\n\t}\n\tif (val.IsNull() && !other.IsNull()) || (other.IsNull() && !val.IsNull()) {\n\t\treturn false\n\t}\n\tif val.ty == DynamicPseudoType && other.ty == DynamicPseudoType {\n\t\treturn true\n\t}\n\n\tty := val.ty\n\tswitch {\n\tcase ty == Number || ty == Bool || ty == String || ty == DynamicPseudoType:\n\t\treturn val.Equals(other).True()\n\tcase ty.IsObjectType():\n\t\toty := ty.typeImpl.(typeObject)\n\t\tfor attr, aty := range oty.AttrTypes {\n\t\t\tlhs := Value{\n\t\t\t\tty: aty,\n\t\t\t\tv:  val.v.(map[string]interface{})[attr],\n\t\t\t}\n\t\t\trhs := Value{\n\t\t\t\tty: aty,\n\t\t\t\tv:  other.v.(map[string]interface{})[attr],\n\t\t\t}\n\t\t\teq := lhs.RawEquals(rhs)\n\t\t\tif !eq {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\treturn true\n\tcase ty.IsTupleType():\n\t\ttty := ty.typeImpl.(typeTuple)\n\t\tfor i, ety := range tty.ElemTypes {\n\t\t\tlhs := Value{\n\t\t\t\tty: ety,\n\t\t\t\tv:  val.v.([]interface{})[i],\n\t\t\t}\n\t\t\trhs := Value{\n\t\t\t\tty: ety,\n\t\t\t\tv:  other.v.([]interface{})[i],\n\t\t\t}\n\t\t\teq := lhs.RawEquals(rhs)\n\t\t\tif !eq {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\treturn true\n\tcase ty.IsListType():\n\t\tety := ty.typeImpl.(typeList).ElementTypeT\n\t\tif len(val.v.([]interface{})) == len(other.v.([]interface{})) {\n\t\t\tfor i := range val.v.([]interface{}) {\n\t\t\t\tlhs := Value{\n\t\t\t\t\tty: ety,\n\t\t\t\t\tv:  val.v.([]interface{})[i],\n\t\t\t\t}\n\t\t\t\trhs := Value{\n\t\t\t\t\tty: ety,\n\t\t\t\t\tv:  other.v.([]interface{})[i],\n\t\t\t\t}\n\t\t\t\teq := lhs.RawEquals(rhs)\n\t\t\t\tif !eq {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true\n\t\t}\n\t\treturn false\n\tcase ty.IsSetType():\n\t\ts1 := val.v.(set.Set)\n\t\ts2 := other.v.(set.Set)\n\n\t\t// Since we're intentionally ignoring our rule that two unknowns\n\t\t// are never equal, we can cheat here.\n\t\t// (This isn't 100% right since e.g. it will fail if the set contains\n\t\t// numbers that are infinite, which DeepEqual can't compare properly.\n\t\t// We're accepting that limitation for simplicity here, since this\n\t\t// function is here primarily for testing.)\n\t\treturn reflect.DeepEqual(s1, s2)\n\n\tcase ty.IsMapType():\n\t\tety := ty.typeImpl.(typeMap).ElementTypeT\n\t\tif len(val.v.(map[string]interface{})) == len(other.v.(map[string]interface{})) {\n\t\t\tfor k := range val.v.(map[string]interface{}) {\n\t\t\t\tif _, ok := other.v.(map[string]interface{})[k]; !ok {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tlhs := Value{\n\t\t\t\t\tty: ety,\n\t\t\t\t\tv:  val.v.(map[string]interface{})[k],\n\t\t\t\t}\n\t\t\t\trhs := Value{\n\t\t\t\t\tty: ety,\n\t\t\t\t\tv:  other.v.(map[string]interface{})[k],\n\t\t\t\t}\n\t\t\t\teq := lhs.RawEquals(rhs)\n\t\t\t\tif !eq {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true\n\t\t}\n\t\treturn false\n\tcase ty.IsCapsuleType():\n\t\t// A capsule type's encapsulated value is a pointer to a value of its\n\t\t// native type, so we can just compare these to get the identity test\n\t\t// we need.\n\t\treturn val.v == other.v\n\n\tdefault:\n\t\t// should never happen\n\t\tpanic(fmt.Errorf(\"unsupported value type %#v in RawEquals\", ty))\n\t}\n}\n\n// Add returns the sum of the receiver and the given other value. Both values\n// must be numbers; this method will panic if not.\nfunc (val Value) Add(other Value) Value {\n\tif shortCircuit := mustTypeCheck(Number, Number, val, other); shortCircuit != nil {\n\t\tshortCircuit = forceShortCircuitType(shortCircuit, Number)\n\t\treturn *shortCircuit\n\t}\n\n\tret := new(big.Float)\n\tret.Add(val.v.(*big.Float), other.v.(*big.Float))\n\treturn NumberVal(ret)\n}\n\n// Subtract returns receiver minus the given other value. Both values must be\n// numbers; this method will panic if not.\nfunc (val Value) Subtract(other Value) Value {\n\tif shortCircuit := mustTypeCheck(Number, Number, val, other); shortCircuit != nil {\n\t\tshortCircuit = forceShortCircuitType(shortCircuit, Number)\n\t\treturn *shortCircuit\n\t}\n\n\treturn val.Add(other.Negate())\n}\n\n// Negate returns the numeric negative of the receiver, which must be a number.\n// This method will panic when given a value of any other type.\nfunc (val Value) Negate() Value {\n\tif shortCircuit := mustTypeCheck(Number, Number, val); shortCircuit != nil {\n\t\tshortCircuit = forceShortCircuitType(shortCircuit, Number)\n\t\treturn *shortCircuit\n\t}\n\n\tret := new(big.Float).Neg(val.v.(*big.Float))\n\treturn NumberVal(ret)\n}\n\n// Multiply returns the product of the receiver and the given other value.\n// Both values must be numbers; this method will panic if not.\nfunc (val Value) Multiply(other Value) Value {\n\tif shortCircuit := mustTypeCheck(Number, Number, val, other); shortCircuit != nil {\n\t\tshortCircuit = forceShortCircuitType(shortCircuit, Number)\n\t\treturn *shortCircuit\n\t}\n\n\tret := new(big.Float)\n\tret.Mul(val.v.(*big.Float), other.v.(*big.Float))\n\treturn NumberVal(ret)\n}\n\n// Divide returns the quotient of the receiver and the given other value.\n// Both values must be numbers; this method will panic if not.\n//\n// If the \"other\" value is exactly zero, this operation will return either\n// PositiveInfinity or NegativeInfinity, depending on the sign of the\n// receiver value. For some use-cases the presence of infinities may be\n// undesirable, in which case the caller should check whether the\n// other value equals zero before calling and raise an error instead.\n//\n// If both values are zero or infinity, this function will panic with\n// an instance of big.ErrNaN.\nfunc (val Value) Divide(other Value) Value {\n\tif shortCircuit := mustTypeCheck(Number, Number, val, other); shortCircuit != nil {\n\t\tshortCircuit = forceShortCircuitType(shortCircuit, Number)\n\t\treturn *shortCircuit\n\t}\n\n\tret := new(big.Float)\n\tret.Quo(val.v.(*big.Float), other.v.(*big.Float))\n\treturn NumberVal(ret)\n}\n\n// Modulo returns the remainder of an integer division of the receiver and\n// the given other value. Both values must be numbers; this method will panic\n// if not.\n//\n// If the \"other\" value is exactly zero, this operation will return either\n// PositiveInfinity or NegativeInfinity, depending on the sign of the\n// receiver value. For some use-cases the presence of infinities may be\n// undesirable, in which case the caller should check whether the\n// other value equals zero before calling and raise an error instead.\n//\n// This operation is primarily here for use with nonzero natural numbers.\n// Modulo with \"other\" as a non-natural number gets somewhat philosophical,\n// and this function takes a position on what that should mean, but callers\n// may wish to disallow such things outright or implement their own modulo\n// if they disagree with the interpretation used here.\nfunc (val Value) Modulo(other Value) Value {\n\tif shortCircuit := mustTypeCheck(Number, Number, val, other); shortCircuit != nil {\n\t\tshortCircuit = forceShortCircuitType(shortCircuit, Number)\n\t\treturn *shortCircuit\n\t}\n\n\t// We cheat a bit here with infinities, just abusing the Multiply operation\n\t// to get an infinite result of the correct sign.\n\tif val == PositiveInfinity || val == NegativeInfinity || other == PositiveInfinity || other == NegativeInfinity {\n\t\treturn val.Multiply(other)\n\t}\n\n\tif other.RawEquals(Zero) {\n\t\treturn val\n\t}\n\n\t// FIXME: This is a bit clumsy. Should come back later and see if there's a\n\t// more straightforward way to do this.\n\trat := val.Divide(other)\n\tratFloorInt := &big.Int{}\n\trat.v.(*big.Float).Int(ratFloorInt)\n\twork := (&big.Float{}).SetInt(ratFloorInt)\n\twork.Mul(other.v.(*big.Float), work)\n\twork.Sub(val.v.(*big.Float), work)\n\n\treturn NumberVal(work)\n}\n\n// Absolute returns the absolute (signless) value of the receiver, which must\n// be a number or this method will panic.\nfunc (val Value) Absolute() Value {\n\tif shortCircuit := mustTypeCheck(Number, Number, val); shortCircuit != nil {\n\t\tshortCircuit = forceShortCircuitType(shortCircuit, Number)\n\t\treturn *shortCircuit\n\t}\n\n\tret := (&big.Float{}).Abs(val.v.(*big.Float))\n\treturn NumberVal(ret)\n}\n\n// GetAttr returns the value of the given attribute of the receiver, which\n// must be of an object type that has an attribute of the given name.\n// This method will panic if the receiver type is not compatible.\n//\n// The method will also panic if the given attribute name is not defined\n// for the value's type. Use the attribute-related methods on Type to\n// check for the validity of an attribute before trying to use it.\n//\n// This method may be called on a value whose type is DynamicPseudoType,\n// in which case the result will also be DynamicVal.\nfunc (val Value) GetAttr(name string) Value {\n\tif val.ty == DynamicPseudoType {\n\t\treturn DynamicVal\n\t}\n\n\tif !val.ty.IsObjectType() {\n\t\tpanic(\"value is not an object\")\n\t}\n\n\tname = NormalizeString(name)\n\tif !val.ty.HasAttribute(name) {\n\t\tpanic(\"value has no attribute of that name\")\n\t}\n\n\tattrType := val.ty.AttributeType(name)\n\n\tif !val.IsKnown() {\n\t\treturn UnknownVal(attrType)\n\t}\n\n\treturn Value{\n\t\tty: attrType,\n\t\tv:  val.v.(map[string]interface{})[name],\n\t}\n}\n\n// Index returns the value of an element of the receiver, which must have\n// either a list, map or tuple type. This method will panic if the receiver\n// type is not compatible.\n//\n// The key value must be the correct type for the receving collection: a\n// number if the collection is a list or tuple, or a string if it is a map.\n// In the case of a list or tuple, the given number must be convertable to int\n// or this method will panic. The key may alternatively be of\n// DynamicPseudoType, in which case the result itself is an unknown of the\n// collection's element type.\n//\n// The result is of the receiver collection's element type, or in the case\n// of a tuple the type of the specific element index requested.\n//\n// This method may be called on a value whose type is DynamicPseudoType,\n// in which case the result will also be the DynamicValue.\nfunc (val Value) Index(key Value) Value {\n\tif val.ty == DynamicPseudoType {\n\t\treturn DynamicVal\n\t}\n\n\tswitch {\n\tcase val.Type().IsListType():\n\t\telty := val.Type().ElementType()\n\t\tif key.Type() == DynamicPseudoType {\n\t\t\treturn UnknownVal(elty)\n\t\t}\n\n\t\tif key.Type() != Number {\n\t\t\tpanic(\"element key for list must be number\")\n\t\t}\n\t\tif !key.IsKnown() {\n\t\t\treturn UnknownVal(elty)\n\t\t}\n\n\t\tif !val.IsKnown() {\n\t\t\treturn UnknownVal(elty)\n\t\t}\n\n\t\tindex, accuracy := key.v.(*big.Float).Int64()\n\t\tif accuracy != big.Exact || index < 0 {\n\t\t\tpanic(\"element key for list must be non-negative integer\")\n\t\t}\n\n\t\treturn Value{\n\t\t\tty: elty,\n\t\t\tv:  val.v.([]interface{})[index],\n\t\t}\n\tcase val.Type().IsMapType():\n\t\telty := val.Type().ElementType()\n\t\tif key.Type() == DynamicPseudoType {\n\t\t\treturn UnknownVal(elty)\n\t\t}\n\n\t\tif key.Type() != String {\n\t\t\tpanic(\"element key for map must be string\")\n\t\t}\n\t\tif !key.IsKnown() {\n\t\t\treturn UnknownVal(elty)\n\t\t}\n\n\t\tif !val.IsKnown() {\n\t\t\treturn UnknownVal(elty)\n\t\t}\n\n\t\tkeyStr := key.v.(string)\n\n\t\treturn Value{\n\t\t\tty: elty,\n\t\t\tv:  val.v.(map[string]interface{})[keyStr],\n\t\t}\n\tcase val.Type().IsTupleType():\n\t\tif key.Type() == DynamicPseudoType {\n\t\t\treturn DynamicVal\n\t\t}\n\n\t\tif key.Type() != Number {\n\t\t\tpanic(\"element key for tuple must be number\")\n\t\t}\n\t\tif !key.IsKnown() {\n\t\t\treturn DynamicVal\n\t\t}\n\n\t\tindex, accuracy := key.v.(*big.Float).Int64()\n\t\tif accuracy != big.Exact || index < 0 {\n\t\t\tpanic(\"element key for list must be non-negative integer\")\n\t\t}\n\n\t\teltys := val.Type().TupleElementTypes()\n\n\t\tif !val.IsKnown() {\n\t\t\treturn UnknownVal(eltys[index])\n\t\t}\n\n\t\treturn Value{\n\t\t\tty: eltys[index],\n\t\t\tv:  val.v.([]interface{})[index],\n\t\t}\n\tdefault:\n\t\tpanic(\"not a list, map, or tuple type\")\n\t}\n}\n\n// HasIndex returns True if the receiver (which must be supported for Index)\n// has an element with the given index key, or False if it does not.\n//\n// The result will be UnknownVal(Bool) if either the collection or the\n// key value are unknown.\n//\n// This method will panic if the receiver is not indexable, but does not\n// impose any panic-causing type constraints on the key.\nfunc (val Value) HasIndex(key Value) Value {\n\tif val.ty == DynamicPseudoType {\n\t\treturn UnknownVal(Bool)\n\t}\n\n\tswitch {\n\tcase val.Type().IsListType():\n\t\tif key.Type() == DynamicPseudoType {\n\t\t\treturn UnknownVal(Bool)\n\t\t}\n\n\t\tif key.Type() != Number {\n\t\t\treturn False\n\t\t}\n\t\tif !key.IsKnown() {\n\t\t\treturn UnknownVal(Bool)\n\t\t}\n\t\tif !val.IsKnown() {\n\t\t\treturn UnknownVal(Bool)\n\t\t}\n\n\t\tindex, accuracy := key.v.(*big.Float).Int64()\n\t\tif accuracy != big.Exact || index < 0 {\n\t\t\treturn False\n\t\t}\n\n\t\treturn BoolVal(int(index) < len(val.v.([]interface{})) && index >= 0)\n\tcase val.Type().IsMapType():\n\t\tif key.Type() == DynamicPseudoType {\n\t\t\treturn UnknownVal(Bool)\n\t\t}\n\n\t\tif key.Type() != String {\n\t\t\treturn False\n\t\t}\n\t\tif !key.IsKnown() {\n\t\t\treturn UnknownVal(Bool)\n\t\t}\n\t\tif !val.IsKnown() {\n\t\t\treturn UnknownVal(Bool)\n\t\t}\n\n\t\tkeyStr := key.v.(string)\n\t\t_, exists := val.v.(map[string]interface{})[keyStr]\n\n\t\treturn BoolVal(exists)\n\tcase val.Type().IsTupleType():\n\t\tif key.Type() == DynamicPseudoType {\n\t\t\treturn UnknownVal(Bool)\n\t\t}\n\n\t\tif key.Type() != Number {\n\t\t\treturn False\n\t\t}\n\t\tif !key.IsKnown() {\n\t\t\treturn UnknownVal(Bool)\n\t\t}\n\n\t\tindex, accuracy := key.v.(*big.Float).Int64()\n\t\tif accuracy != big.Exact || index < 0 {\n\t\t\treturn False\n\t\t}\n\n\t\tlength := val.Type().Length()\n\t\treturn BoolVal(int(index) < length && index >= 0)\n\tdefault:\n\t\tpanic(\"not a list, map, or tuple type\")\n\t}\n}\n\n// HasElement returns True if the receiver (which must be of a set type)\n// has the given value as an element, or False if it does not.\n//\n// The result will be UnknownVal(Bool) if either the set or the\n// given value are unknown.\n//\n// This method will panic if the receiver is not a set, or if it is a null set.\nfunc (val Value) HasElement(elem Value) Value {\n\tty := val.Type()\n\n\tif !ty.IsSetType() {\n\t\tpanic(\"not a set type\")\n\t}\n\tif !val.IsKnown() || !elem.IsKnown() {\n\t\treturn UnknownVal(Bool)\n\t}\n\tif val.IsNull() {\n\t\tpanic(\"can't call HasElement on a nil value\")\n\t}\n\tif !ty.ElementType().Equals(elem.Type()) {\n\t\treturn False\n\t}\n\n\ts := val.v.(set.Set)\n\treturn BoolVal(s.Has(elem.v))\n}\n\n// Length returns the length of the receiver, which must be a collection type\n// or tuple type, as a number value. If the receiver is not a compatible type\n// then this method will panic.\n//\n// If the receiver is unknown then the result is also unknown.\n//\n// If the receiver is null then this function will panic.\n//\n// Note that Length is not supported for strings. To determine the length\n// of a string, call AsString and take the length of the native Go string\n// that is returned.\nfunc (val Value) Length() Value {\n\tif val.Type().IsTupleType() {\n\t\t// For tuples, we can return the length even if the value is not known.\n\t\treturn NumberIntVal(int64(val.Type().Length()))\n\t}\n\n\tif !val.IsKnown() {\n\t\treturn UnknownVal(Number)\n\t}\n\n\treturn NumberIntVal(int64(val.LengthInt()))\n}\n\n// LengthInt is like Length except it returns an int. It has the same behavior\n// as Length except that it will panic if the receiver is unknown.\n//\n// This is an integration method provided for the convenience of code bridging\n// into Go's type system.\nfunc (val Value) LengthInt() int {\n\tif val.Type().IsTupleType() {\n\t\t// For tuples, we can return the length even if the value is not known.\n\t\treturn val.Type().Length()\n\t}\n\tif val.Type().IsObjectType() {\n\t\t// For objects, the length is the number of attributes associated with the type.\n\t\treturn len(val.Type().AttributeTypes())\n\t}\n\tif !val.IsKnown() {\n\t\tpanic(\"value is not known\")\n\t}\n\tif val.IsNull() {\n\t\tpanic(\"value is null\")\n\t}\n\n\tswitch {\n\n\tcase val.ty.IsListType():\n\t\treturn len(val.v.([]interface{}))\n\n\tcase val.ty.IsSetType():\n\t\treturn val.v.(set.Set).Length()\n\n\tcase val.ty.IsMapType():\n\t\treturn len(val.v.(map[string]interface{}))\n\n\tdefault:\n\t\tpanic(\"value is not a collection\")\n\t}\n}\n\n// ElementIterator returns an ElementIterator for iterating the elements\n// of the receiver, which must be a collection type, a tuple type, or an object\n// type. If called on a method of any other type, this method will panic.\n//\n// The value must be Known and non-Null, or this method will panic.\n//\n// If the receiver is of a list type, the returned keys will be of type Number\n// and the values will be of the list's element type.\n//\n// If the receiver is of a map type, the returned keys will be of type String\n// and the value will be of the map's element type. Elements are passed in\n// ascending lexicographical order by key.\n//\n// If the receiver is of a set type, each element is returned as both the\n// key and the value, since set members are their own identity.\n//\n// If the receiver is of a tuple type, the returned keys will be of type Number\n// and the value will be of the corresponding element's type.\n//\n// If the receiver is of an object type, the returned keys will be of type\n// String and the value will be of the corresponding attributes's type.\n//\n// ElementIterator is an integration method, so it cannot handle Unknown\n// values. This method will panic if the receiver is Unknown.\nfunc (val Value) ElementIterator() ElementIterator {\n\tif !val.IsKnown() {\n\t\tpanic(\"can't use ElementIterator on unknown value\")\n\t}\n\tif val.IsNull() {\n\t\tpanic(\"can't use ElementIterator on null value\")\n\t}\n\treturn elementIterator(val)\n}\n\n// CanIterateElements returns true if the receiver can support the\n// ElementIterator method (and by extension, ForEachElement) without panic.\nfunc (val Value) CanIterateElements() bool {\n\treturn canElementIterator(val)\n}\n\n// ForEachElement executes a given callback function for each element of\n// the receiver, which must be a collection type or tuple type, or this method\n// will panic.\n//\n// ForEachElement uses ElementIterator internally, and so the values passed\n// to the callback are as described for ElementIterator.\n//\n// Returns true if the iteration exited early due to the callback function\n// returning true, or false if the loop ran to completion.\n//\n// ForEachElement is an integration method, so it cannot handle Unknown\n// values. This method will panic if the receiver is Unknown.\nfunc (val Value) ForEachElement(cb ElementCallback) bool {\n\tit := val.ElementIterator()\n\tfor it.Next() {\n\t\tkey, val := it.Element()\n\t\tstop := cb(key, val)\n\t\tif stop {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// Not returns the logical inverse of the receiver, which must be of type\n// Bool or this method will panic.\nfunc (val Value) Not() Value {\n\tif shortCircuit := mustTypeCheck(Bool, Bool, val); shortCircuit != nil {\n\t\tshortCircuit = forceShortCircuitType(shortCircuit, Bool)\n\t\treturn *shortCircuit\n\t}\n\n\treturn BoolVal(!val.v.(bool))\n}\n\n// And returns the result of logical AND with the receiver and the other given\n// value, which must both be of type Bool or this method will panic.\nfunc (val Value) And(other Value) Value {\n\tif shortCircuit := mustTypeCheck(Bool, Bool, val, other); shortCircuit != nil {\n\t\tshortCircuit = forceShortCircuitType(shortCircuit, Bool)\n\t\treturn *shortCircuit\n\t}\n\n\treturn BoolVal(val.v.(bool) && other.v.(bool))\n}\n\n// Or returns the result of logical OR with the receiver and the other given\n// value, which must both be of type Bool or this method will panic.\nfunc (val Value) Or(other Value) Value {\n\tif shortCircuit := mustTypeCheck(Bool, Bool, val, other); shortCircuit != nil {\n\t\tshortCircuit = forceShortCircuitType(shortCircuit, Bool)\n\t\treturn *shortCircuit\n\t}\n\n\treturn BoolVal(val.v.(bool) || other.v.(bool))\n}\n\n// LessThan returns True if the receiver is less than the other given value,\n// which must both be numbers or this method will panic.\nfunc (val Value) LessThan(other Value) Value {\n\tif shortCircuit := mustTypeCheck(Number, Bool, val, other); shortCircuit != nil {\n\t\tshortCircuit = forceShortCircuitType(shortCircuit, Bool)\n\t\treturn *shortCircuit\n\t}\n\n\treturn BoolVal(val.v.(*big.Float).Cmp(other.v.(*big.Float)) < 0)\n}\n\n// GreaterThan returns True if the receiver is greater than the other given\n// value, which must both be numbers or this method will panic.\nfunc (val Value) GreaterThan(other Value) Value {\n\tif shortCircuit := mustTypeCheck(Number, Bool, val, other); shortCircuit != nil {\n\t\tshortCircuit = forceShortCircuitType(shortCircuit, Bool)\n\t\treturn *shortCircuit\n\t}\n\n\treturn BoolVal(val.v.(*big.Float).Cmp(other.v.(*big.Float)) > 0)\n}\n\n// LessThanOrEqualTo is equivalent to LessThan and Equal combined with Or.\nfunc (val Value) LessThanOrEqualTo(other Value) Value {\n\treturn val.LessThan(other).Or(val.Equals(other))\n}\n\n// GreaterThanOrEqualTo is equivalent to GreaterThan and Equal combined with Or.\nfunc (val Value) GreaterThanOrEqualTo(other Value) Value {\n\treturn val.GreaterThan(other).Or(val.Equals(other))\n}\n\n// AsString returns the native string from a non-null, non-unknown cty.String\n// value, or panics if called on any other value.\nfunc (val Value) AsString() string {\n\tif val.ty != String {\n\t\tpanic(\"not a string\")\n\t}\n\tif val.IsNull() {\n\t\tpanic(\"value is null\")\n\t}\n\tif !val.IsKnown() {\n\t\tpanic(\"value is unknown\")\n\t}\n\n\treturn val.v.(string)\n}\n\n// AsBigFloat returns a big.Float representation of a non-null, non-unknown\n// cty.Number value, or panics if called on any other value.\n//\n// For more convenient conversions to other native numeric types, use the\n// \"gocty\" package.\nfunc (val Value) AsBigFloat() *big.Float {\n\tif val.ty != Number {\n\t\tpanic(\"not a number\")\n\t}\n\tif val.IsNull() {\n\t\tpanic(\"value is null\")\n\t}\n\tif !val.IsKnown() {\n\t\tpanic(\"value is unknown\")\n\t}\n\n\t// Copy the float so that callers can't mutate our internal state\n\tret := *(val.v.(*big.Float))\n\n\treturn &ret\n}\n\n// AsValueSlice returns a []cty.Value representation of a non-null, non-unknown\n// value of any type that CanIterateElements, or panics if called on\n// any other value.\n//\n// For more convenient conversions to slices of more specific types, use\n// the \"gocty\" package.\nfunc (val Value) AsValueSlice() []Value {\n\tl := val.LengthInt()\n\tif l == 0 {\n\t\treturn nil\n\t}\n\n\tret := make([]Value, 0, l)\n\tfor it := val.ElementIterator(); it.Next(); {\n\t\t_, v := it.Element()\n\t\tret = append(ret, v)\n\t}\n\treturn ret\n}\n\n// AsValueMap returns a map[string]cty.Value representation of a non-null,\n// non-unknown value of any type that CanIterateElements, or panics if called\n// on any other value.\n//\n// For more convenient conversions to maps of more specific types, use\n// the \"gocty\" package.\nfunc (val Value) AsValueMap() map[string]Value {\n\tl := val.LengthInt()\n\tif l == 0 {\n\t\treturn nil\n\t}\n\n\tret := make(map[string]Value, l)\n\tfor it := val.ElementIterator(); it.Next(); {\n\t\tk, v := it.Element()\n\t\tret[k.AsString()] = v\n\t}\n\treturn ret\n}\n\n// AsValueSet returns a ValueSet representation of a non-null,\n// non-unknown value of any collection type, or panics if called\n// on any other value.\n//\n// Unlike AsValueSlice and AsValueMap, this method requires specifically a\n// collection type (list, set or map) and does not allow structural types\n// (tuple or object), because the ValueSet type requires homogenous\n// element types.\n//\n// The returned ValueSet can store only values of the receiver's element type.\nfunc (val Value) AsValueSet() ValueSet {\n\tif !val.Type().IsCollectionType() {\n\t\tpanic(\"not a collection type\")\n\t}\n\n\t// We don't give the caller our own set.Set (assuming we're a cty.Set value)\n\t// because then the caller could mutate our internals, which is forbidden.\n\t// Instead, we will construct a new set and append our elements into it.\n\tret := NewValueSet(val.Type().ElementType())\n\tfor it := val.ElementIterator(); it.Next(); {\n\t\t_, v := it.Element()\n\t\tret.Add(v)\n\t}\n\treturn ret\n}\n\n// EncapsulatedValue returns the native value encapsulated in a non-null,\n// non-unknown capsule-typed value, or panics if called on any other value.\n//\n// The result is the same pointer that was passed to CapsuleVal to create\n// the value. Since cty considers values to be immutable, it is strongly\n// recommended to treat the encapsulated value itself as immutable too.\nfunc (val Value) EncapsulatedValue() interface{} {\n\tif !val.Type().IsCapsuleType() {\n\t\tpanic(\"not a capsule-typed value\")\n\t}\n\n\treturn val.v\n}\n"
  },
  {
    "path": "vendor/github.com/zclconf/go-cty/cty/walk.go",
    "content": "package cty\n\n// Walk visits all of the values in a possibly-complex structure, calling\n// a given function for each value.\n//\n// For example, given a list of strings the callback would first be called\n// with the whole list and then called once for each element of the list.\n//\n// The callback function may prevent recursive visits to child values by\n// returning false. The callback function my halt the walk altogether by\n// returning a non-nil error. If the returned error is about the element\n// currently being visited, it is recommended to use the provided path\n// value to produce a PathError describing that context.\n//\n// The path passed to the given function may not be used after that function\n// returns, since its backing array is re-used for other calls.\nfunc Walk(val Value, cb func(Path, Value) (bool, error)) error {\n\tvar path Path\n\treturn walk(path, val, cb)\n}\n\nfunc walk(path Path, val Value, cb func(Path, Value) (bool, error)) error {\n\tdeeper, err := cb(path, val)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif !deeper {\n\t\treturn nil\n\t}\n\n\tif val.IsNull() || !val.IsKnown() {\n\t\t// Can't recurse into null or unknown values, regardless of type\n\t\treturn nil\n\t}\n\n\tty := val.Type()\n\tswitch {\n\tcase ty.IsObjectType():\n\t\tfor it := val.ElementIterator(); it.Next(); {\n\t\t\tnameVal, av := it.Element()\n\t\t\tpath := append(path, GetAttrStep{\n\t\t\t\tName: nameVal.AsString(),\n\t\t\t})\n\t\t\terr := walk(path, av, cb)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\tcase val.CanIterateElements():\n\t\tfor it := val.ElementIterator(); it.Next(); {\n\t\t\tkv, ev := it.Element()\n\t\t\tpath := append(path, IndexStep{\n\t\t\t\tKey: kv,\n\t\t\t})\n\t\t\terr := walk(path, ev, cb)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\n// Transform visits all of the values in a possibly-complex structure,\n// calling a given function for each value which has an opportunity to\n// replace that value.\n//\n// Unlike Walk, Transform visits child nodes first, so for a list of strings\n// it would first visit the strings and then the _new_ list constructed\n// from the transformed values of the list items.\n//\n// This is useful for creating the effect of being able to make deep mutations\n// to a value even though values are immutable. However, it's the responsibility\n// of the given function to preserve expected invariants, such as homogenity of\n// element types in collections; this function can panic if such invariants\n// are violated, just as if new values were constructed directly using the\n// value constructor functions. An easy way to preserve invariants is to\n// ensure that the transform function never changes the value type.\n//\n// The callback function my halt the walk altogether by\n// returning a non-nil error. If the returned error is about the element\n// currently being visited, it is recommended to use the provided path\n// value to produce a PathError describing that context.\n//\n// The path passed to the given function may not be used after that function\n// returns, since its backing array is re-used for other calls.\nfunc Transform(val Value, cb func(Path, Value) (Value, error)) (Value, error) {\n\tvar path Path\n\treturn transform(path, val, cb)\n}\n\nfunc transform(path Path, val Value, cb func(Path, Value) (Value, error)) (Value, error) {\n\tty := val.Type()\n\tvar newVal Value\n\n\tswitch {\n\n\tcase val.IsNull() || !val.IsKnown():\n\t\t// Can't recurse into null or unknown values, regardless of type\n\t\tnewVal = val\n\n\tcase ty.IsListType() || ty.IsSetType() || ty.IsTupleType():\n\t\tl := val.LengthInt()\n\t\tswitch l {\n\t\tcase 0:\n\t\t\t// No deep transform for an empty sequence\n\t\t\tnewVal = val\n\t\tdefault:\n\t\t\telems := make([]Value, 0, l)\n\t\t\tfor it := val.ElementIterator(); it.Next(); {\n\t\t\t\tkv, ev := it.Element()\n\t\t\t\tpath := append(path, IndexStep{\n\t\t\t\t\tKey: kv,\n\t\t\t\t})\n\t\t\t\tnewEv, err := transform(path, ev, cb)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn DynamicVal, err\n\t\t\t\t}\n\t\t\t\telems = append(elems, newEv)\n\t\t\t}\n\t\t\tswitch {\n\t\t\tcase ty.IsListType():\n\t\t\t\tnewVal = ListVal(elems)\n\t\t\tcase ty.IsSetType():\n\t\t\t\tnewVal = SetVal(elems)\n\t\t\tcase ty.IsTupleType():\n\t\t\t\tnewVal = TupleVal(elems)\n\t\t\tdefault:\n\t\t\t\tpanic(\"unknown sequence type\") // should never happen because of the case we are in\n\t\t\t}\n\t\t}\n\n\tcase ty.IsMapType():\n\t\tl := val.LengthInt()\n\t\tswitch l {\n\t\tcase 0:\n\t\t\t// No deep transform for an empty map\n\t\t\tnewVal = val\n\t\tdefault:\n\t\t\telems := make(map[string]Value)\n\t\t\tfor it := val.ElementIterator(); it.Next(); {\n\t\t\t\tkv, ev := it.Element()\n\t\t\t\tpath := append(path, IndexStep{\n\t\t\t\t\tKey: kv,\n\t\t\t\t})\n\t\t\t\tnewEv, err := transform(path, ev, cb)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn DynamicVal, err\n\t\t\t\t}\n\t\t\t\telems[kv.AsString()] = newEv\n\t\t\t}\n\t\t\tnewVal = MapVal(elems)\n\t\t}\n\n\tcase ty.IsObjectType():\n\t\tswitch {\n\t\tcase ty.Equals(EmptyObject):\n\t\t\t// No deep transform for an empty object\n\t\t\tnewVal = val\n\t\tdefault:\n\t\t\tatys := ty.AttributeTypes()\n\t\t\tnewAVs := make(map[string]Value)\n\t\t\tfor name := range atys {\n\t\t\t\tav := val.GetAttr(name)\n\t\t\t\tpath := append(path, GetAttrStep{\n\t\t\t\t\tName: name,\n\t\t\t\t})\n\t\t\t\tnewAV, err := transform(path, av, cb)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn DynamicVal, err\n\t\t\t\t}\n\t\t\t\tnewAVs[name] = newAV\n\t\t\t}\n\t\t\tnewVal = ObjectVal(newAVs)\n\t\t}\n\n\tdefault:\n\t\tnewVal = val\n\t}\n\n\treturn cb(path, newVal)\n}\n"
  },
  {
    "path": "vendor/go.opencensus.io/LICENSE",
    "content": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License."
  },
  {
    "path": "vendor/go.opencensus.io/internal/internal.go",
    "content": "// Copyright 2017, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage internal // import \"go.opencensus.io/internal\"\n\nimport (\n\t\"fmt\"\n\t\"time\"\n\n\topencensus \"go.opencensus.io\"\n)\n\n// UserAgent is the user agent to be added to the outgoing\n// requests from the exporters.\nvar UserAgent = fmt.Sprintf(\"opencensus-go/%s\", opencensus.Version())\n\n// MonotonicEndTime returns the end time at present\n// but offset from start, monotonically.\n//\n// The monotonic clock is used in subtractions hence\n// the duration since start added back to start gives\n// end as a monotonic time.\n// See https://golang.org/pkg/time/#hdr-Monotonic_Clocks\nfunc MonotonicEndTime(start time.Time) time.Time {\n\treturn start.Add(time.Now().Sub(start))\n}\n"
  },
  {
    "path": "vendor/go.opencensus.io/internal/sanitize.go",
    "content": "// Copyright 2017, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage internal\n\nimport (\n\t\"strings\"\n\t\"unicode\"\n)\n\nconst labelKeySizeLimit = 100\n\n// Sanitize returns a string that is trunacated to 100 characters if it's too\n// long, and replaces non-alphanumeric characters to underscores.\nfunc Sanitize(s string) string {\n\tif len(s) == 0 {\n\t\treturn s\n\t}\n\tif len(s) > labelKeySizeLimit {\n\t\ts = s[:labelKeySizeLimit]\n\t}\n\ts = strings.Map(sanitizeRune, s)\n\tif unicode.IsDigit(rune(s[0])) {\n\t\ts = \"key_\" + s\n\t}\n\tif s[0] == '_' {\n\t\ts = \"key\" + s\n\t}\n\treturn s\n}\n\n// converts anything that is not a letter or digit to an underscore\nfunc sanitizeRune(r rune) rune {\n\tif unicode.IsLetter(r) || unicode.IsDigit(r) {\n\t\treturn r\n\t}\n\t// Everything else turns into an underscore\n\treturn '_'\n}\n"
  },
  {
    "path": "vendor/go.opencensus.io/internal/tagencoding/tagencoding.go",
    "content": "// Copyright 2017, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\n\n// Package tagencoding contains the tag encoding\n// used interally by the stats collector.\npackage tagencoding // import \"go.opencensus.io/internal/tagencoding\"\n\n// Values represent the encoded buffer for the values.\ntype Values struct {\n\tBuffer     []byte\n\tWriteIndex int\n\tReadIndex  int\n}\n\nfunc (vb *Values) growIfRequired(expected int) {\n\tif len(vb.Buffer)-vb.WriteIndex < expected {\n\t\ttmp := make([]byte, 2*(len(vb.Buffer)+1)+expected)\n\t\tcopy(tmp, vb.Buffer)\n\t\tvb.Buffer = tmp\n\t}\n}\n\n// WriteValue is the helper method to encode Values from map[Key][]byte.\nfunc (vb *Values) WriteValue(v []byte) {\n\tlength := len(v) & 0xff\n\tvb.growIfRequired(1 + length)\n\n\t// writing length of v\n\tvb.Buffer[vb.WriteIndex] = byte(length)\n\tvb.WriteIndex++\n\n\tif length == 0 {\n\t\t// No value was encoded for this key\n\t\treturn\n\t}\n\n\t// writing v\n\tcopy(vb.Buffer[vb.WriteIndex:], v[:length])\n\tvb.WriteIndex += length\n}\n\n// ReadValue is the helper method to decode Values to a map[Key][]byte.\nfunc (vb *Values) ReadValue() []byte {\n\t// read length of v\n\tlength := int(vb.Buffer[vb.ReadIndex])\n\tvb.ReadIndex++\n\tif length == 0 {\n\t\t// No value was encoded for this key\n\t\treturn nil\n\t}\n\n\t// read value of v\n\tv := make([]byte, length)\n\tendIdx := vb.ReadIndex + length\n\tcopy(v, vb.Buffer[vb.ReadIndex:endIdx])\n\tvb.ReadIndex = endIdx\n\treturn v\n}\n\n// Bytes returns a reference to already written bytes in the Buffer.\nfunc (vb *Values) Bytes() []byte {\n\treturn vb.Buffer[:vb.WriteIndex]\n}\n"
  },
  {
    "path": "vendor/go.opencensus.io/internal/traceinternals.go",
    "content": "// Copyright 2017, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage internal\n\nimport (\n\t\"time\"\n)\n\n// Trace allows internal access to some trace functionality.\n// TODO(#412): remove this\nvar Trace interface{}\n\n// LocalSpanStoreEnabled true if the local span store is enabled.\nvar LocalSpanStoreEnabled bool\n\n// BucketConfiguration stores the number of samples to store for span buckets\n// for successful and failed spans for a particular span name.\ntype BucketConfiguration struct {\n\tName                 string\n\tMaxRequestsSucceeded int\n\tMaxRequestsErrors    int\n}\n\n// PerMethodSummary is a summary of the spans stored for a single span name.\ntype PerMethodSummary struct {\n\tActive         int\n\tLatencyBuckets []LatencyBucketSummary\n\tErrorBuckets   []ErrorBucketSummary\n}\n\n// LatencyBucketSummary is a summary of a latency bucket.\ntype LatencyBucketSummary struct {\n\tMinLatency, MaxLatency time.Duration\n\tSize                   int\n}\n\n// ErrorBucketSummary is a summary of an error bucket.\ntype ErrorBucketSummary struct {\n\tErrorCode int32\n\tSize      int\n}\n"
  },
  {
    "path": "vendor/go.opencensus.io/metric/metricdata/doc.go",
    "content": "// Copyright 2018, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// Package metricdata contains the metrics data model.\n//\n// This is an EXPERIMENTAL package, and may change in arbitrary ways without\n// notice.\npackage metricdata // import \"go.opencensus.io/metric/metricdata\"\n"
  },
  {
    "path": "vendor/go.opencensus.io/metric/metricdata/exemplar.go",
    "content": "// Copyright 2018, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage metricdata\n\nimport (\n\t\"time\"\n)\n\n// Exemplars keys.\nconst (\n\tAttachmentKeySpanContext = \"SpanContext\"\n)\n\n// Exemplar is an example data point associated with each bucket of a\n// distribution type aggregation.\n//\n// Their purpose is to provide an example of the kind of thing\n// (request, RPC, trace span, etc.) that resulted in that measurement.\ntype Exemplar struct {\n\tValue       float64     // the value that was recorded\n\tTimestamp   time.Time   // the time the value was recorded\n\tAttachments Attachments // attachments (if any)\n}\n\n// Attachments is a map of extra values associated with a recorded data point.\ntype Attachments map[string]interface{}\n"
  },
  {
    "path": "vendor/go.opencensus.io/metric/metricdata/label.go",
    "content": "// Copyright 2018, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage metricdata\n\n// LabelKey represents key of a label. It has optional\n// description attribute.\ntype LabelKey struct {\n\tKey         string\n\tDescription string\n}\n\n// LabelValue represents the value of a label.\n// The zero value represents a missing label value, which may be treated\n// differently to an empty string value by some back ends.\ntype LabelValue struct {\n\tValue   string // string value of the label\n\tPresent bool   // flag that indicated whether a value is present or not\n}\n\n// NewLabelValue creates a new non-nil LabelValue that represents the given string.\nfunc NewLabelValue(val string) LabelValue {\n\treturn LabelValue{Value: val, Present: true}\n}\n"
  },
  {
    "path": "vendor/go.opencensus.io/metric/metricdata/metric.go",
    "content": "// Copyright 2018, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage metricdata\n\nimport (\n\t\"time\"\n\n\t\"go.opencensus.io/resource\"\n)\n\n// Descriptor holds metadata about a metric.\ntype Descriptor struct {\n\tName        string     // full name of the metric\n\tDescription string     // human-readable description\n\tUnit        Unit       // units for the measure\n\tType        Type       // type of measure\n\tLabelKeys   []LabelKey // label keys\n}\n\n// Metric represents a quantity measured against a resource with different\n// label value combinations.\ntype Metric struct {\n\tDescriptor Descriptor         // metric descriptor\n\tResource   *resource.Resource // resource against which this was measured\n\tTimeSeries []*TimeSeries      // one time series for each combination of label values\n}\n\n// TimeSeries is a sequence of points associated with a combination of label\n// values.\ntype TimeSeries struct {\n\tLabelValues []LabelValue // label values, same order as keys in the metric descriptor\n\tPoints      []Point      // points sequence\n\tStartTime   time.Time    // time we started recording this time series\n}\n"
  },
  {
    "path": "vendor/go.opencensus.io/metric/metricdata/point.go",
    "content": "// Copyright 2018, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage metricdata\n\nimport (\n\t\"time\"\n)\n\n// Point is a single data point of a time series.\ntype Point struct {\n\t// Time is the point in time that this point represents in a time series.\n\tTime time.Time\n\t// Value is the value of this point. Prefer using ReadValue to switching on\n\t// the value type, since new value types might be added.\n\tValue interface{}\n}\n\n//go:generate stringer -type ValueType\n\n// NewFloat64Point creates a new Point holding a float64 value.\nfunc NewFloat64Point(t time.Time, val float64) Point {\n\treturn Point{\n\t\tValue: val,\n\t\tTime:  t,\n\t}\n}\n\n// NewInt64Point creates a new Point holding an int64 value.\nfunc NewInt64Point(t time.Time, val int64) Point {\n\treturn Point{\n\t\tValue: val,\n\t\tTime:  t,\n\t}\n}\n\n// NewDistributionPoint creates a new Point holding a Distribution value.\nfunc NewDistributionPoint(t time.Time, val *Distribution) Point {\n\treturn Point{\n\t\tValue: val,\n\t\tTime:  t,\n\t}\n}\n\n// NewSummaryPoint creates a new Point holding a Summary value.\nfunc NewSummaryPoint(t time.Time, val *Summary) Point {\n\treturn Point{\n\t\tValue: val,\n\t\tTime:  t,\n\t}\n}\n\n// ValueVisitor allows reading the value of a point.\ntype ValueVisitor interface {\n\tVisitFloat64Value(float64)\n\tVisitInt64Value(int64)\n\tVisitDistributionValue(*Distribution)\n\tVisitSummaryValue(*Summary)\n}\n\n// ReadValue accepts a ValueVisitor and calls the appropriate method with the\n// value of this point.\n// Consumers of Point should use this in preference to switching on the type\n// of the value directly, since new value types may be added.\nfunc (p Point) ReadValue(vv ValueVisitor) {\n\tswitch v := p.Value.(type) {\n\tcase int64:\n\t\tvv.VisitInt64Value(v)\n\tcase float64:\n\t\tvv.VisitFloat64Value(v)\n\tcase *Distribution:\n\t\tvv.VisitDistributionValue(v)\n\tcase *Summary:\n\t\tvv.VisitSummaryValue(v)\n\tdefault:\n\t\tpanic(\"unexpected value type\")\n\t}\n}\n\n// Distribution contains summary statistics for a population of values. It\n// optionally contains a histogram representing the distribution of those\n// values across a set of buckets.\ntype Distribution struct {\n\t// Count is the number of values in the population. Must be non-negative. This value\n\t// must equal the sum of the values in bucket_counts if a histogram is\n\t// provided.\n\tCount int64\n\t// Sum is the sum of the values in the population. If count is zero then this field\n\t// must be zero.\n\tSum float64\n\t// SumOfSquaredDeviation is the sum of squared deviations from the mean of the values in the\n\t// population. For values x_i this is:\n\t//\n\t//     Sum[i=1..n]((x_i - mean)^2)\n\t//\n\t// Knuth, \"The Art of Computer Programming\", Vol. 2, page 323, 3rd edition\n\t// describes Welford's method for accumulating this sum in one pass.\n\t//\n\t// If count is zero then this field must be zero.\n\tSumOfSquaredDeviation float64\n\t// BucketOptions describes the bounds of the histogram buckets in this\n\t// distribution.\n\t//\n\t// A Distribution may optionally contain a histogram of the values in the\n\t// population.\n\t//\n\t// If nil, there is no associated histogram.\n\tBucketOptions *BucketOptions\n\t// Bucket If the distribution does not have a histogram, then omit this field.\n\t// If there is a histogram, then the sum of the values in the Bucket counts\n\t// must equal the value in the count field of the distribution.\n\tBuckets []Bucket\n}\n\n// BucketOptions describes the bounds of the histogram buckets in this\n// distribution.\ntype BucketOptions struct {\n\t// Bounds specifies a set of bucket upper bounds.\n\t// This defines len(bounds) + 1 (= N) buckets. The boundaries for bucket\n\t// index i are:\n\t//\n\t// [0, Bounds[i]) for i == 0\n\t// [Bounds[i-1], Bounds[i]) for 0 < i < N-1\n\t// [Bounds[i-1], +infinity) for i == N-1\n\tBounds []float64\n}\n\n// Bucket represents a single bucket (value range) in a distribution.\ntype Bucket struct {\n\t// Count is the number of values in each bucket of the histogram, as described in\n\t// bucket_bounds.\n\tCount int64\n\t// Exemplar associated with this bucket (if any).\n\tExemplar *Exemplar\n}\n\n// Summary is a representation of percentiles.\ntype Summary struct {\n\t// Count is the cumulative count (if available).\n\tCount int64\n\t// Sum is the cumulative sum of values  (if available).\n\tSum float64\n\t// HasCountAndSum is true if Count and Sum are available.\n\tHasCountAndSum bool\n\t// Snapshot represents percentiles calculated over an arbitrary time window.\n\t// The values in this struct can be reset at arbitrary unknown times, with\n\t// the requirement that all of them are reset at the same time.\n\tSnapshot Snapshot\n}\n\n// Snapshot represents percentiles over an arbitrary time.\n// The values in this struct can be reset at arbitrary unknown times, with\n// the requirement that all of them are reset at the same time.\ntype Snapshot struct {\n\t// Count is the number of values in the snapshot. Optional since some systems don't\n\t// expose this. Set to 0 if not available.\n\tCount int64\n\t// Sum is the sum of values in the snapshot. Optional since some systems don't\n\t// expose this. If count is 0 then this field must be zero.\n\tSum float64\n\t// Percentiles is a map from percentile (range (0-100.0]) to the value of\n\t// the percentile.\n\tPercentiles map[float64]float64\n}\n\n//go:generate stringer -type Type\n\n// Type is the overall type of metric, including its value type and whether it\n// represents a cumulative total (since the start time) or if it represents a\n// gauge value.\ntype Type int\n\n// Metric types.\nconst (\n\tTypeGaugeInt64 Type = iota\n\tTypeGaugeFloat64\n\tTypeGaugeDistribution\n\tTypeCumulativeInt64\n\tTypeCumulativeFloat64\n\tTypeCumulativeDistribution\n\tTypeSummary\n)\n"
  },
  {
    "path": "vendor/go.opencensus.io/metric/metricdata/type_string.go",
    "content": "// Code generated by \"stringer -type Type\"; DO NOT EDIT.\n\npackage metricdata\n\nimport \"strconv\"\n\nconst _Type_name = \"TypeGaugeInt64TypeGaugeFloat64TypeGaugeDistributionTypeCumulativeInt64TypeCumulativeFloat64TypeCumulativeDistributionTypeSummary\"\n\nvar _Type_index = [...]uint8{0, 14, 30, 51, 70, 91, 117, 128}\n\nfunc (i Type) String() string {\n\tif i < 0 || i >= Type(len(_Type_index)-1) {\n\t\treturn \"Type(\" + strconv.FormatInt(int64(i), 10) + \")\"\n\t}\n\treturn _Type_name[_Type_index[i]:_Type_index[i+1]]\n}\n"
  },
  {
    "path": "vendor/go.opencensus.io/metric/metricdata/unit.go",
    "content": "// Copyright 2018, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage metricdata\n\n// Unit is a string encoded according to the case-sensitive abbreviations from the\n// Unified Code for Units of Measure: http://unitsofmeasure.org/ucum.html\ntype Unit string\n\n// Predefined units. To record against a unit not represented here, create your\n// own Unit type constant from a string.\nconst (\n\tUnitDimensionless Unit = \"1\"\n\tUnitBytes         Unit = \"By\"\n\tUnitMilliseconds  Unit = \"ms\"\n)\n"
  },
  {
    "path": "vendor/go.opencensus.io/metric/metricproducer/manager.go",
    "content": "// Copyright 2019, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage metricproducer\n\nimport (\n\t\"sync\"\n)\n\n// Manager maintains a list of active producers. Producers can register\n// with the manager to allow readers to read all metrics provided by them.\n// Readers can retrieve all producers registered with the manager,\n// read metrics from the producers and export them.\ntype Manager struct {\n\tmu        sync.RWMutex\n\tproducers map[Producer]struct{}\n}\n\nvar prodMgr *Manager\nvar once sync.Once\n\n// GlobalManager is a single instance of producer manager\n// that is used by all producers and all readers.\nfunc GlobalManager() *Manager {\n\tonce.Do(func() {\n\t\tprodMgr = &Manager{}\n\t\tprodMgr.producers = make(map[Producer]struct{})\n\t})\n\treturn prodMgr\n}\n\n// AddProducer adds the producer to the Manager if it is not already present.\nfunc (pm *Manager) AddProducer(producer Producer) {\n\tif producer == nil {\n\t\treturn\n\t}\n\tpm.mu.Lock()\n\tdefer pm.mu.Unlock()\n\tpm.producers[producer] = struct{}{}\n}\n\n// DeleteProducer deletes the producer from the Manager if it is present.\nfunc (pm *Manager) DeleteProducer(producer Producer) {\n\tif producer == nil {\n\t\treturn\n\t}\n\tpm.mu.Lock()\n\tdefer pm.mu.Unlock()\n\tdelete(pm.producers, producer)\n}\n\n// GetAll returns a slice of all producer currently registered with\n// the Manager. For each call it generates a new slice. The slice\n// should not be cached as registration may change at any time. It is\n// typically called periodically by exporter to read metrics from\n// the producers.\nfunc (pm *Manager) GetAll() []Producer {\n\tpm.mu.Lock()\n\tdefer pm.mu.Unlock()\n\tproducers := make([]Producer, len(pm.producers))\n\ti := 0\n\tfor producer := range pm.producers {\n\t\tproducers[i] = producer\n\t\ti++\n\t}\n\treturn producers\n}\n"
  },
  {
    "path": "vendor/go.opencensus.io/metric/metricproducer/producer.go",
    "content": "// Copyright 2019, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage metricproducer\n\nimport (\n\t\"go.opencensus.io/metric/metricdata\"\n)\n\n// Producer is a source of metrics.\ntype Producer interface {\n\t// Read should return the current values of all metrics supported by this\n\t// metric provider.\n\t// The returned metrics should be unique for each combination of name and\n\t// resource.\n\tRead() []*metricdata.Metric\n}\n"
  },
  {
    "path": "vendor/go.opencensus.io/opencensus.go",
    "content": "// Copyright 2017, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// Package opencensus contains Go support for OpenCensus.\npackage opencensus // import \"go.opencensus.io\"\n\n// Version is the current release version of OpenCensus in use.\nfunc Version() string {\n\treturn \"0.23.0\"\n}\n"
  },
  {
    "path": "vendor/go.opencensus.io/plugin/ochttp/client.go",
    "content": "// Copyright 2018, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage ochttp\n\nimport (\n\t\"net/http\"\n\t\"net/http/httptrace\"\n\n\t\"go.opencensus.io/trace\"\n\t\"go.opencensus.io/trace/propagation\"\n)\n\n// Transport is an http.RoundTripper that instruments all outgoing requests with\n// OpenCensus stats and tracing.\n//\n// The zero value is intended to be a useful default, but for\n// now it's recommended that you explicitly set Propagation, since the default\n// for this may change.\ntype Transport struct {\n\t// Base may be set to wrap another http.RoundTripper that does the actual\n\t// requests. By default http.DefaultTransport is used.\n\t//\n\t// If base HTTP roundtripper implements CancelRequest,\n\t// the returned round tripper will be cancelable.\n\tBase http.RoundTripper\n\n\t// Propagation defines how traces are propagated. If unspecified, a default\n\t// (currently B3 format) will be used.\n\tPropagation propagation.HTTPFormat\n\n\t// StartOptions are applied to the span started by this Transport around each\n\t// request.\n\t//\n\t// StartOptions.SpanKind will always be set to trace.SpanKindClient\n\t// for spans started by this transport.\n\tStartOptions trace.StartOptions\n\n\t// GetStartOptions allows to set start options per request. If set,\n\t// StartOptions is going to be ignored.\n\tGetStartOptions func(*http.Request) trace.StartOptions\n\n\t// NameFromRequest holds the function to use for generating the span name\n\t// from the information found in the outgoing HTTP Request. By default the\n\t// name equals the URL Path.\n\tFormatSpanName func(*http.Request) string\n\n\t// NewClientTrace may be set to a function allowing the current *trace.Span\n\t// to be annotated with HTTP request event information emitted by the\n\t// httptrace package.\n\tNewClientTrace func(*http.Request, *trace.Span) *httptrace.ClientTrace\n\n\t// TODO: Implement tag propagation for HTTP.\n}\n\n// RoundTrip implements http.RoundTripper, delegating to Base and recording stats and traces for the request.\nfunc (t *Transport) RoundTrip(req *http.Request) (*http.Response, error) {\n\trt := t.base()\n\tif isHealthEndpoint(req.URL.Path) {\n\t\treturn rt.RoundTrip(req)\n\t}\n\t// TODO: remove excessive nesting of http.RoundTrippers here.\n\tformat := t.Propagation\n\tif format == nil {\n\t\tformat = defaultFormat\n\t}\n\tspanNameFormatter := t.FormatSpanName\n\tif spanNameFormatter == nil {\n\t\tspanNameFormatter = spanNameFromURL\n\t}\n\n\tstartOpts := t.StartOptions\n\tif t.GetStartOptions != nil {\n\t\tstartOpts = t.GetStartOptions(req)\n\t}\n\n\trt = &traceTransport{\n\t\tbase:   rt,\n\t\tformat: format,\n\t\tstartOptions: trace.StartOptions{\n\t\t\tSampler:  startOpts.Sampler,\n\t\t\tSpanKind: trace.SpanKindClient,\n\t\t},\n\t\tformatSpanName: spanNameFormatter,\n\t\tnewClientTrace: t.NewClientTrace,\n\t}\n\trt = statsTransport{base: rt}\n\treturn rt.RoundTrip(req)\n}\n\nfunc (t *Transport) base() http.RoundTripper {\n\tif t.Base != nil {\n\t\treturn t.Base\n\t}\n\treturn http.DefaultTransport\n}\n\n// CancelRequest cancels an in-flight request by closing its connection.\nfunc (t *Transport) CancelRequest(req *http.Request) {\n\ttype canceler interface {\n\t\tCancelRequest(*http.Request)\n\t}\n\tif cr, ok := t.base().(canceler); ok {\n\t\tcr.CancelRequest(req)\n\t}\n}\n"
  },
  {
    "path": "vendor/go.opencensus.io/plugin/ochttp/client_stats.go",
    "content": "// Copyright 2018, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage ochttp\n\nimport (\n\t\"context\"\n\t\"io\"\n\t\"net/http\"\n\t\"strconv\"\n\t\"sync\"\n\t\"time\"\n\n\t\"go.opencensus.io/stats\"\n\t\"go.opencensus.io/tag\"\n)\n\n// statsTransport is an http.RoundTripper that collects stats for the outgoing requests.\ntype statsTransport struct {\n\tbase http.RoundTripper\n}\n\n// RoundTrip implements http.RoundTripper, delegating to Base and recording stats for the request.\nfunc (t statsTransport) RoundTrip(req *http.Request) (*http.Response, error) {\n\tctx, _ := tag.New(req.Context(),\n\t\ttag.Upsert(KeyClientHost, req.Host),\n\t\ttag.Upsert(Host, req.Host),\n\t\ttag.Upsert(KeyClientPath, req.URL.Path),\n\t\ttag.Upsert(Path, req.URL.Path),\n\t\ttag.Upsert(KeyClientMethod, req.Method),\n\t\ttag.Upsert(Method, req.Method))\n\treq = req.WithContext(ctx)\n\ttrack := &tracker{\n\t\tstart: time.Now(),\n\t\tctx:   ctx,\n\t}\n\tif req.Body == nil {\n\t\t// TODO: Handle cases where ContentLength is not set.\n\t\ttrack.reqSize = -1\n\t} else if req.ContentLength > 0 {\n\t\ttrack.reqSize = req.ContentLength\n\t}\n\tstats.Record(ctx, ClientRequestCount.M(1))\n\n\t// Perform request.\n\tresp, err := t.base.RoundTrip(req)\n\n\tif err != nil {\n\t\ttrack.statusCode = http.StatusInternalServerError\n\t\ttrack.end()\n\t} else {\n\t\ttrack.statusCode = resp.StatusCode\n\t\tif req.Method != \"HEAD\" {\n\t\t\ttrack.respContentLength = resp.ContentLength\n\t\t}\n\t\tif resp.Body == nil {\n\t\t\ttrack.end()\n\t\t} else {\n\t\t\ttrack.body = resp.Body\n\t\t\tresp.Body = wrappedBody(track, resp.Body)\n\t\t}\n\t}\n\treturn resp, err\n}\n\n// CancelRequest cancels an in-flight request by closing its connection.\nfunc (t statsTransport) CancelRequest(req *http.Request) {\n\ttype canceler interface {\n\t\tCancelRequest(*http.Request)\n\t}\n\tif cr, ok := t.base.(canceler); ok {\n\t\tcr.CancelRequest(req)\n\t}\n}\n\ntype tracker struct {\n\tctx               context.Context\n\trespSize          int64\n\trespContentLength int64\n\treqSize           int64\n\tstart             time.Time\n\tbody              io.ReadCloser\n\tstatusCode        int\n\tendOnce           sync.Once\n}\n\nvar _ io.ReadCloser = (*tracker)(nil)\n\nfunc (t *tracker) end() {\n\tt.endOnce.Do(func() {\n\t\tlatencyMs := float64(time.Since(t.start)) / float64(time.Millisecond)\n\t\trespSize := t.respSize\n\t\tif t.respSize == 0 && t.respContentLength > 0 {\n\t\t\trespSize = t.respContentLength\n\t\t}\n\t\tm := []stats.Measurement{\n\t\t\tClientSentBytes.M(t.reqSize),\n\t\t\tClientReceivedBytes.M(respSize),\n\t\t\tClientRoundtripLatency.M(latencyMs),\n\t\t\tClientLatency.M(latencyMs),\n\t\t\tClientResponseBytes.M(t.respSize),\n\t\t}\n\t\tif t.reqSize >= 0 {\n\t\t\tm = append(m, ClientRequestBytes.M(t.reqSize))\n\t\t}\n\n\t\tstats.RecordWithTags(t.ctx, []tag.Mutator{\n\t\t\ttag.Upsert(StatusCode, strconv.Itoa(t.statusCode)),\n\t\t\ttag.Upsert(KeyClientStatus, strconv.Itoa(t.statusCode)),\n\t\t}, m...)\n\t})\n}\n\nfunc (t *tracker) Read(b []byte) (int, error) {\n\tn, err := t.body.Read(b)\n\tt.respSize += int64(n)\n\tswitch err {\n\tcase nil:\n\t\treturn n, nil\n\tcase io.EOF:\n\t\tt.end()\n\t}\n\treturn n, err\n}\n\nfunc (t *tracker) Close() error {\n\t// Invoking endSpan on Close will help catch the cases\n\t// in which a read returned a non-nil error, we set the\n\t// span status but didn't end the span.\n\tt.end()\n\treturn t.body.Close()\n}\n"
  },
  {
    "path": "vendor/go.opencensus.io/plugin/ochttp/doc.go",
    "content": "// Copyright 2018, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// Package ochttp provides OpenCensus instrumentation for net/http package.\n//\n// For server instrumentation, see Handler. For client-side instrumentation,\n// see Transport.\npackage ochttp // import \"go.opencensus.io/plugin/ochttp\"\n"
  },
  {
    "path": "vendor/go.opencensus.io/plugin/ochttp/propagation/b3/b3.go",
    "content": "// Copyright 2018, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// Package b3 contains a propagation.HTTPFormat implementation\n// for B3 propagation. See https://github.com/openzipkin/b3-propagation\n// for more details.\npackage b3 // import \"go.opencensus.io/plugin/ochttp/propagation/b3\"\n\nimport (\n\t\"encoding/hex\"\n\t\"net/http\"\n\n\t\"go.opencensus.io/trace\"\n\t\"go.opencensus.io/trace/propagation\"\n)\n\n// B3 headers that OpenCensus understands.\nconst (\n\tTraceIDHeader = \"X-B3-TraceId\"\n\tSpanIDHeader  = \"X-B3-SpanId\"\n\tSampledHeader = \"X-B3-Sampled\"\n)\n\n// HTTPFormat implements propagation.HTTPFormat to propagate\n// traces in HTTP headers in B3 propagation format.\n// HTTPFormat skips the X-B3-ParentId and X-B3-Flags headers\n// because there are additional fields not represented in the\n// OpenCensus span context. Spans created from the incoming\n// header will be the direct children of the client-side span.\n// Similarly, receiver of the outgoing spans should use client-side\n// span created by OpenCensus as the parent.\ntype HTTPFormat struct{}\n\nvar _ propagation.HTTPFormat = (*HTTPFormat)(nil)\n\n// SpanContextFromRequest extracts a B3 span context from incoming requests.\nfunc (f *HTTPFormat) SpanContextFromRequest(req *http.Request) (sc trace.SpanContext, ok bool) {\n\ttid, ok := ParseTraceID(req.Header.Get(TraceIDHeader))\n\tif !ok {\n\t\treturn trace.SpanContext{}, false\n\t}\n\tsid, ok := ParseSpanID(req.Header.Get(SpanIDHeader))\n\tif !ok {\n\t\treturn trace.SpanContext{}, false\n\t}\n\tsampled, _ := ParseSampled(req.Header.Get(SampledHeader))\n\treturn trace.SpanContext{\n\t\tTraceID:      tid,\n\t\tSpanID:       sid,\n\t\tTraceOptions: sampled,\n\t}, true\n}\n\n// ParseTraceID parses the value of the X-B3-TraceId header.\nfunc ParseTraceID(tid string) (trace.TraceID, bool) {\n\tif tid == \"\" {\n\t\treturn trace.TraceID{}, false\n\t}\n\tb, err := hex.DecodeString(tid)\n\tif err != nil {\n\t\treturn trace.TraceID{}, false\n\t}\n\tvar traceID trace.TraceID\n\tif len(b) <= 8 {\n\t\t// The lower 64-bits.\n\t\tstart := 8 + (8 - len(b))\n\t\tcopy(traceID[start:], b)\n\t} else {\n\t\tstart := 16 - len(b)\n\t\tcopy(traceID[start:], b)\n\t}\n\n\treturn traceID, true\n}\n\n// ParseSpanID parses the value of the X-B3-SpanId or X-B3-ParentSpanId headers.\nfunc ParseSpanID(sid string) (spanID trace.SpanID, ok bool) {\n\tif sid == \"\" {\n\t\treturn trace.SpanID{}, false\n\t}\n\tb, err := hex.DecodeString(sid)\n\tif err != nil {\n\t\treturn trace.SpanID{}, false\n\t}\n\tstart := 8 - len(b)\n\tcopy(spanID[start:], b)\n\treturn spanID, true\n}\n\n// ParseSampled parses the value of the X-B3-Sampled header.\nfunc ParseSampled(sampled string) (trace.TraceOptions, bool) {\n\tswitch sampled {\n\tcase \"true\", \"1\":\n\t\treturn trace.TraceOptions(1), true\n\tdefault:\n\t\treturn trace.TraceOptions(0), false\n\t}\n}\n\n// SpanContextToRequest modifies the given request to include B3 headers.\nfunc (f *HTTPFormat) SpanContextToRequest(sc trace.SpanContext, req *http.Request) {\n\treq.Header.Set(TraceIDHeader, hex.EncodeToString(sc.TraceID[:]))\n\treq.Header.Set(SpanIDHeader, hex.EncodeToString(sc.SpanID[:]))\n\n\tvar sampled string\n\tif sc.IsSampled() {\n\t\tsampled = \"1\"\n\t} else {\n\t\tsampled = \"0\"\n\t}\n\treq.Header.Set(SampledHeader, sampled)\n}\n"
  },
  {
    "path": "vendor/go.opencensus.io/plugin/ochttp/route.go",
    "content": "// Copyright 2018, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage ochttp\n\nimport (\n\t\"context\"\n\t\"net/http\"\n\n\t\"go.opencensus.io/tag\"\n)\n\n// SetRoute sets the http_server_route tag to the given value.\n// It's useful when an HTTP framework does not support the http.Handler interface\n// and using WithRouteTag is not an option, but provides a way to hook into the request flow.\nfunc SetRoute(ctx context.Context, route string) {\n\tif a, ok := ctx.Value(addedTagsKey{}).(*addedTags); ok {\n\t\ta.t = append(a.t, tag.Upsert(KeyServerRoute, route))\n\t}\n}\n\n// WithRouteTag returns an http.Handler that records stats with the\n// http_server_route tag set to the given value.\nfunc WithRouteTag(handler http.Handler, route string) http.Handler {\n\treturn taggedHandlerFunc(func(w http.ResponseWriter, r *http.Request) []tag.Mutator {\n\t\taddRoute := []tag.Mutator{tag.Upsert(KeyServerRoute, route)}\n\t\tctx, _ := tag.New(r.Context(), addRoute...)\n\t\tr = r.WithContext(ctx)\n\t\thandler.ServeHTTP(w, r)\n\t\treturn addRoute\n\t})\n}\n\n// taggedHandlerFunc is a http.Handler that returns tags describing the\n// processing of the request. These tags will be recorded along with the\n// measures in this package at the end of the request.\ntype taggedHandlerFunc func(w http.ResponseWriter, r *http.Request) []tag.Mutator\n\nfunc (h taggedHandlerFunc) ServeHTTP(w http.ResponseWriter, r *http.Request) {\n\ttags := h(w, r)\n\tif a, ok := r.Context().Value(addedTagsKey{}).(*addedTags); ok {\n\t\ta.t = append(a.t, tags...)\n\t}\n}\n\ntype addedTagsKey struct{}\n\ntype addedTags struct {\n\tt []tag.Mutator\n}\n"
  },
  {
    "path": "vendor/go.opencensus.io/plugin/ochttp/server.go",
    "content": "// Copyright 2018, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage ochttp\n\nimport (\n\t\"context\"\n\t\"io\"\n\t\"net/http\"\n\t\"strconv\"\n\t\"sync\"\n\t\"time\"\n\n\t\"go.opencensus.io/stats\"\n\t\"go.opencensus.io/tag\"\n\t\"go.opencensus.io/trace\"\n\t\"go.opencensus.io/trace/propagation\"\n)\n\n// Handler is an http.Handler wrapper to instrument your HTTP server with\n// OpenCensus. It supports both stats and tracing.\n//\n// Tracing\n//\n// This handler is aware of the incoming request's span, reading it from request\n// headers as configured using the Propagation field.\n// The extracted span can be accessed from the incoming request's\n// context.\n//\n//    span := trace.FromContext(r.Context())\n//\n// The server span will be automatically ended at the end of ServeHTTP.\ntype Handler struct {\n\t// Propagation defines how traces are propagated. If unspecified,\n\t// B3 propagation will be used.\n\tPropagation propagation.HTTPFormat\n\n\t// Handler is the handler used to handle the incoming request.\n\tHandler http.Handler\n\n\t// StartOptions are applied to the span started by this Handler around each\n\t// request.\n\t//\n\t// StartOptions.SpanKind will always be set to trace.SpanKindServer\n\t// for spans started by this transport.\n\tStartOptions trace.StartOptions\n\n\t// GetStartOptions allows to set start options per request. If set,\n\t// StartOptions is going to be ignored.\n\tGetStartOptions func(*http.Request) trace.StartOptions\n\n\t// IsPublicEndpoint should be set to true for publicly accessible HTTP(S)\n\t// servers. If true, any trace metadata set on the incoming request will\n\t// be added as a linked trace instead of being added as a parent of the\n\t// current trace.\n\tIsPublicEndpoint bool\n\n\t// FormatSpanName holds the function to use for generating the span name\n\t// from the information found in the incoming HTTP Request. By default the\n\t// name equals the URL Path.\n\tFormatSpanName func(*http.Request) string\n}\n\nfunc (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {\n\tvar tags addedTags\n\tr, traceEnd := h.startTrace(w, r)\n\tdefer traceEnd()\n\tw, statsEnd := h.startStats(w, r)\n\tdefer statsEnd(&tags)\n\thandler := h.Handler\n\tif handler == nil {\n\t\thandler = http.DefaultServeMux\n\t}\n\tr = r.WithContext(context.WithValue(r.Context(), addedTagsKey{}, &tags))\n\thandler.ServeHTTP(w, r)\n}\n\nfunc (h *Handler) startTrace(w http.ResponseWriter, r *http.Request) (*http.Request, func()) {\n\tif isHealthEndpoint(r.URL.Path) {\n\t\treturn r, func() {}\n\t}\n\tvar name string\n\tif h.FormatSpanName == nil {\n\t\tname = spanNameFromURL(r)\n\t} else {\n\t\tname = h.FormatSpanName(r)\n\t}\n\tctx := r.Context()\n\n\tstartOpts := h.StartOptions\n\tif h.GetStartOptions != nil {\n\t\tstartOpts = h.GetStartOptions(r)\n\t}\n\n\tvar span *trace.Span\n\tsc, ok := h.extractSpanContext(r)\n\tif ok && !h.IsPublicEndpoint {\n\t\tctx, span = trace.StartSpanWithRemoteParent(ctx, name, sc,\n\t\t\ttrace.WithSampler(startOpts.Sampler),\n\t\t\ttrace.WithSpanKind(trace.SpanKindServer))\n\t} else {\n\t\tctx, span = trace.StartSpan(ctx, name,\n\t\t\ttrace.WithSampler(startOpts.Sampler),\n\t\t\ttrace.WithSpanKind(trace.SpanKindServer),\n\t\t)\n\t\tif ok {\n\t\t\tspan.AddLink(trace.Link{\n\t\t\t\tTraceID:    sc.TraceID,\n\t\t\t\tSpanID:     sc.SpanID,\n\t\t\t\tType:       trace.LinkTypeParent,\n\t\t\t\tAttributes: nil,\n\t\t\t})\n\t\t}\n\t}\n\tspan.AddAttributes(requestAttrs(r)...)\n\tif r.Body == nil {\n\t\t// TODO: Handle cases where ContentLength is not set.\n\t} else if r.ContentLength > 0 {\n\t\tspan.AddMessageReceiveEvent(0, /* TODO: messageID */\n\t\t\tint64(r.ContentLength), -1)\n\t}\n\treturn r.WithContext(ctx), span.End\n}\n\nfunc (h *Handler) extractSpanContext(r *http.Request) (trace.SpanContext, bool) {\n\tif h.Propagation == nil {\n\t\treturn defaultFormat.SpanContextFromRequest(r)\n\t}\n\treturn h.Propagation.SpanContextFromRequest(r)\n}\n\nfunc (h *Handler) startStats(w http.ResponseWriter, r *http.Request) (http.ResponseWriter, func(tags *addedTags)) {\n\tctx, _ := tag.New(r.Context(),\n\t\ttag.Upsert(Host, r.Host),\n\t\ttag.Upsert(Path, r.URL.Path),\n\t\ttag.Upsert(Method, r.Method))\n\ttrack := &trackingResponseWriter{\n\t\tstart:  time.Now(),\n\t\tctx:    ctx,\n\t\twriter: w,\n\t}\n\tif r.Body == nil {\n\t\t// TODO: Handle cases where ContentLength is not set.\n\t\ttrack.reqSize = -1\n\t} else if r.ContentLength > 0 {\n\t\ttrack.reqSize = r.ContentLength\n\t}\n\tstats.Record(ctx, ServerRequestCount.M(1))\n\treturn track.wrappedResponseWriter(), track.end\n}\n\ntype trackingResponseWriter struct {\n\tctx        context.Context\n\treqSize    int64\n\trespSize   int64\n\tstart      time.Time\n\tstatusCode int\n\tstatusLine string\n\tendOnce    sync.Once\n\twriter     http.ResponseWriter\n}\n\n// Compile time assertion for ResponseWriter interface\nvar _ http.ResponseWriter = (*trackingResponseWriter)(nil)\n\nvar logTagsErrorOnce sync.Once\n\nfunc (t *trackingResponseWriter) end(tags *addedTags) {\n\tt.endOnce.Do(func() {\n\t\tif t.statusCode == 0 {\n\t\t\tt.statusCode = 200\n\t\t}\n\n\t\tspan := trace.FromContext(t.ctx)\n\t\tspan.SetStatus(TraceStatus(t.statusCode, t.statusLine))\n\t\tspan.AddAttributes(trace.Int64Attribute(StatusCodeAttribute, int64(t.statusCode)))\n\n\t\tm := []stats.Measurement{\n\t\t\tServerLatency.M(float64(time.Since(t.start)) / float64(time.Millisecond)),\n\t\t\tServerResponseBytes.M(t.respSize),\n\t\t}\n\t\tif t.reqSize >= 0 {\n\t\t\tm = append(m, ServerRequestBytes.M(t.reqSize))\n\t\t}\n\t\tallTags := make([]tag.Mutator, len(tags.t)+1)\n\t\tallTags[0] = tag.Upsert(StatusCode, strconv.Itoa(t.statusCode))\n\t\tcopy(allTags[1:], tags.t)\n\t\tstats.RecordWithTags(t.ctx, allTags, m...)\n\t})\n}\n\nfunc (t *trackingResponseWriter) Header() http.Header {\n\treturn t.writer.Header()\n}\n\nfunc (t *trackingResponseWriter) Write(data []byte) (int, error) {\n\tn, err := t.writer.Write(data)\n\tt.respSize += int64(n)\n\t// Add message event for request bytes sent.\n\tspan := trace.FromContext(t.ctx)\n\tspan.AddMessageSendEvent(0 /* TODO: messageID */, int64(n), -1)\n\treturn n, err\n}\n\nfunc (t *trackingResponseWriter) WriteHeader(statusCode int) {\n\tt.writer.WriteHeader(statusCode)\n\tt.statusCode = statusCode\n\tt.statusLine = http.StatusText(t.statusCode)\n}\n\n// wrappedResponseWriter returns a wrapped version of the original\n//  ResponseWriter and only implements the same combination of additional\n// interfaces as the original.\n// This implementation is based on https://github.com/felixge/httpsnoop.\nfunc (t *trackingResponseWriter) wrappedResponseWriter() http.ResponseWriter {\n\tvar (\n\t\thj, i0 = t.writer.(http.Hijacker)\n\t\tcn, i1 = t.writer.(http.CloseNotifier)\n\t\tpu, i2 = t.writer.(http.Pusher)\n\t\tfl, i3 = t.writer.(http.Flusher)\n\t\trf, i4 = t.writer.(io.ReaderFrom)\n\t)\n\n\tswitch {\n\tcase !i0 && !i1 && !i2 && !i3 && !i4:\n\t\treturn struct {\n\t\t\thttp.ResponseWriter\n\t\t}{t}\n\tcase !i0 && !i1 && !i2 && !i3 && i4:\n\t\treturn struct {\n\t\t\thttp.ResponseWriter\n\t\t\tio.ReaderFrom\n\t\t}{t, rf}\n\tcase !i0 && !i1 && !i2 && i3 && !i4:\n\t\treturn struct {\n\t\t\thttp.ResponseWriter\n\t\t\thttp.Flusher\n\t\t}{t, fl}\n\tcase !i0 && !i1 && !i2 && i3 && i4:\n\t\treturn struct {\n\t\t\thttp.ResponseWriter\n\t\t\thttp.Flusher\n\t\t\tio.ReaderFrom\n\t\t}{t, fl, rf}\n\tcase !i0 && !i1 && i2 && !i3 && !i4:\n\t\treturn struct {\n\t\t\thttp.ResponseWriter\n\t\t\thttp.Pusher\n\t\t}{t, pu}\n\tcase !i0 && !i1 && i2 && !i3 && i4:\n\t\treturn struct {\n\t\t\thttp.ResponseWriter\n\t\t\thttp.Pusher\n\t\t\tio.ReaderFrom\n\t\t}{t, pu, rf}\n\tcase !i0 && !i1 && i2 && i3 && !i4:\n\t\treturn struct {\n\t\t\thttp.ResponseWriter\n\t\t\thttp.Pusher\n\t\t\thttp.Flusher\n\t\t}{t, pu, fl}\n\tcase !i0 && !i1 && i2 && i3 && i4:\n\t\treturn struct {\n\t\t\thttp.ResponseWriter\n\t\t\thttp.Pusher\n\t\t\thttp.Flusher\n\t\t\tio.ReaderFrom\n\t\t}{t, pu, fl, rf}\n\tcase !i0 && i1 && !i2 && !i3 && !i4:\n\t\treturn struct {\n\t\t\thttp.ResponseWriter\n\t\t\thttp.CloseNotifier\n\t\t}{t, cn}\n\tcase !i0 && i1 && !i2 && !i3 && i4:\n\t\treturn struct {\n\t\t\thttp.ResponseWriter\n\t\t\thttp.CloseNotifier\n\t\t\tio.ReaderFrom\n\t\t}{t, cn, rf}\n\tcase !i0 && i1 && !i2 && i3 && !i4:\n\t\treturn struct {\n\t\t\thttp.ResponseWriter\n\t\t\thttp.CloseNotifier\n\t\t\thttp.Flusher\n\t\t}{t, cn, fl}\n\tcase !i0 && i1 && !i2 && i3 && i4:\n\t\treturn struct {\n\t\t\thttp.ResponseWriter\n\t\t\thttp.CloseNotifier\n\t\t\thttp.Flusher\n\t\t\tio.ReaderFrom\n\t\t}{t, cn, fl, rf}\n\tcase !i0 && i1 && i2 && !i3 && !i4:\n\t\treturn struct {\n\t\t\thttp.ResponseWriter\n\t\t\thttp.CloseNotifier\n\t\t\thttp.Pusher\n\t\t}{t, cn, pu}\n\tcase !i0 && i1 && i2 && !i3 && i4:\n\t\treturn struct {\n\t\t\thttp.ResponseWriter\n\t\t\thttp.CloseNotifier\n\t\t\thttp.Pusher\n\t\t\tio.ReaderFrom\n\t\t}{t, cn, pu, rf}\n\tcase !i0 && i1 && i2 && i3 && !i4:\n\t\treturn struct {\n\t\t\thttp.ResponseWriter\n\t\t\thttp.CloseNotifier\n\t\t\thttp.Pusher\n\t\t\thttp.Flusher\n\t\t}{t, cn, pu, fl}\n\tcase !i0 && i1 && i2 && i3 && i4:\n\t\treturn struct {\n\t\t\thttp.ResponseWriter\n\t\t\thttp.CloseNotifier\n\t\t\thttp.Pusher\n\t\t\thttp.Flusher\n\t\t\tio.ReaderFrom\n\t\t}{t, cn, pu, fl, rf}\n\tcase i0 && !i1 && !i2 && !i3 && !i4:\n\t\treturn struct {\n\t\t\thttp.ResponseWriter\n\t\t\thttp.Hijacker\n\t\t}{t, hj}\n\tcase i0 && !i1 && !i2 && !i3 && i4:\n\t\treturn struct {\n\t\t\thttp.ResponseWriter\n\t\t\thttp.Hijacker\n\t\t\tio.ReaderFrom\n\t\t}{t, hj, rf}\n\tcase i0 && !i1 && !i2 && i3 && !i4:\n\t\treturn struct {\n\t\t\thttp.ResponseWriter\n\t\t\thttp.Hijacker\n\t\t\thttp.Flusher\n\t\t}{t, hj, fl}\n\tcase i0 && !i1 && !i2 && i3 && i4:\n\t\treturn struct {\n\t\t\thttp.ResponseWriter\n\t\t\thttp.Hijacker\n\t\t\thttp.Flusher\n\t\t\tio.ReaderFrom\n\t\t}{t, hj, fl, rf}\n\tcase i0 && !i1 && i2 && !i3 && !i4:\n\t\treturn struct {\n\t\t\thttp.ResponseWriter\n\t\t\thttp.Hijacker\n\t\t\thttp.Pusher\n\t\t}{t, hj, pu}\n\tcase i0 && !i1 && i2 && !i3 && i4:\n\t\treturn struct {\n\t\t\thttp.ResponseWriter\n\t\t\thttp.Hijacker\n\t\t\thttp.Pusher\n\t\t\tio.ReaderFrom\n\t\t}{t, hj, pu, rf}\n\tcase i0 && !i1 && i2 && i3 && !i4:\n\t\treturn struct {\n\t\t\thttp.ResponseWriter\n\t\t\thttp.Hijacker\n\t\t\thttp.Pusher\n\t\t\thttp.Flusher\n\t\t}{t, hj, pu, fl}\n\tcase i0 && !i1 && i2 && i3 && i4:\n\t\treturn struct {\n\t\t\thttp.ResponseWriter\n\t\t\thttp.Hijacker\n\t\t\thttp.Pusher\n\t\t\thttp.Flusher\n\t\t\tio.ReaderFrom\n\t\t}{t, hj, pu, fl, rf}\n\tcase i0 && i1 && !i2 && !i3 && !i4:\n\t\treturn struct {\n\t\t\thttp.ResponseWriter\n\t\t\thttp.Hijacker\n\t\t\thttp.CloseNotifier\n\t\t}{t, hj, cn}\n\tcase i0 && i1 && !i2 && !i3 && i4:\n\t\treturn struct {\n\t\t\thttp.ResponseWriter\n\t\t\thttp.Hijacker\n\t\t\thttp.CloseNotifier\n\t\t\tio.ReaderFrom\n\t\t}{t, hj, cn, rf}\n\tcase i0 && i1 && !i2 && i3 && !i4:\n\t\treturn struct {\n\t\t\thttp.ResponseWriter\n\t\t\thttp.Hijacker\n\t\t\thttp.CloseNotifier\n\t\t\thttp.Flusher\n\t\t}{t, hj, cn, fl}\n\tcase i0 && i1 && !i2 && i3 && i4:\n\t\treturn struct {\n\t\t\thttp.ResponseWriter\n\t\t\thttp.Hijacker\n\t\t\thttp.CloseNotifier\n\t\t\thttp.Flusher\n\t\t\tio.ReaderFrom\n\t\t}{t, hj, cn, fl, rf}\n\tcase i0 && i1 && i2 && !i3 && !i4:\n\t\treturn struct {\n\t\t\thttp.ResponseWriter\n\t\t\thttp.Hijacker\n\t\t\thttp.CloseNotifier\n\t\t\thttp.Pusher\n\t\t}{t, hj, cn, pu}\n\tcase i0 && i1 && i2 && !i3 && i4:\n\t\treturn struct {\n\t\t\thttp.ResponseWriter\n\t\t\thttp.Hijacker\n\t\t\thttp.CloseNotifier\n\t\t\thttp.Pusher\n\t\t\tio.ReaderFrom\n\t\t}{t, hj, cn, pu, rf}\n\tcase i0 && i1 && i2 && i3 && !i4:\n\t\treturn struct {\n\t\t\thttp.ResponseWriter\n\t\t\thttp.Hijacker\n\t\t\thttp.CloseNotifier\n\t\t\thttp.Pusher\n\t\t\thttp.Flusher\n\t\t}{t, hj, cn, pu, fl}\n\tcase i0 && i1 && i2 && i3 && i4:\n\t\treturn struct {\n\t\t\thttp.ResponseWriter\n\t\t\thttp.Hijacker\n\t\t\thttp.CloseNotifier\n\t\t\thttp.Pusher\n\t\t\thttp.Flusher\n\t\t\tio.ReaderFrom\n\t\t}{t, hj, cn, pu, fl, rf}\n\tdefault:\n\t\treturn struct {\n\t\t\thttp.ResponseWriter\n\t\t}{t}\n\t}\n}\n"
  },
  {
    "path": "vendor/go.opencensus.io/plugin/ochttp/span_annotating_client_trace.go",
    "content": "// Copyright 2018, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage ochttp\n\nimport (\n\t\"crypto/tls\"\n\t\"net/http\"\n\t\"net/http/httptrace\"\n\t\"strings\"\n\n\t\"go.opencensus.io/trace\"\n)\n\ntype spanAnnotator struct {\n\tsp *trace.Span\n}\n\n// TODO: Remove NewSpanAnnotator at the next release.\n\n// NewSpanAnnotator returns a httptrace.ClientTrace which annotates\n// all emitted httptrace events on the provided Span.\n// Deprecated: Use NewSpanAnnotatingClientTrace instead\nfunc NewSpanAnnotator(r *http.Request, s *trace.Span) *httptrace.ClientTrace {\n\treturn NewSpanAnnotatingClientTrace(r, s)\n}\n\n// NewSpanAnnotatingClientTrace returns a httptrace.ClientTrace which annotates\n// all emitted httptrace events on the provided Span.\nfunc NewSpanAnnotatingClientTrace(_ *http.Request, s *trace.Span) *httptrace.ClientTrace {\n\tsa := spanAnnotator{sp: s}\n\n\treturn &httptrace.ClientTrace{\n\t\tGetConn:              sa.getConn,\n\t\tGotConn:              sa.gotConn,\n\t\tPutIdleConn:          sa.putIdleConn,\n\t\tGotFirstResponseByte: sa.gotFirstResponseByte,\n\t\tGot100Continue:       sa.got100Continue,\n\t\tDNSStart:             sa.dnsStart,\n\t\tDNSDone:              sa.dnsDone,\n\t\tConnectStart:         sa.connectStart,\n\t\tConnectDone:          sa.connectDone,\n\t\tTLSHandshakeStart:    sa.tlsHandshakeStart,\n\t\tTLSHandshakeDone:     sa.tlsHandshakeDone,\n\t\tWroteHeaders:         sa.wroteHeaders,\n\t\tWait100Continue:      sa.wait100Continue,\n\t\tWroteRequest:         sa.wroteRequest,\n\t}\n}\n\nfunc (s spanAnnotator) getConn(hostPort string) {\n\tattrs := []trace.Attribute{\n\t\ttrace.StringAttribute(\"httptrace.get_connection.host_port\", hostPort),\n\t}\n\ts.sp.Annotate(attrs, \"GetConn\")\n}\n\nfunc (s spanAnnotator) gotConn(info httptrace.GotConnInfo) {\n\tattrs := []trace.Attribute{\n\t\ttrace.BoolAttribute(\"httptrace.got_connection.reused\", info.Reused),\n\t\ttrace.BoolAttribute(\"httptrace.got_connection.was_idle\", info.WasIdle),\n\t}\n\tif info.WasIdle {\n\t\tattrs = append(attrs,\n\t\t\ttrace.StringAttribute(\"httptrace.got_connection.idle_time\", info.IdleTime.String()))\n\t}\n\ts.sp.Annotate(attrs, \"GotConn\")\n}\n\n// PutIdleConn implements a httptrace.ClientTrace hook\nfunc (s spanAnnotator) putIdleConn(err error) {\n\tvar attrs []trace.Attribute\n\tif err != nil {\n\t\tattrs = append(attrs,\n\t\t\ttrace.StringAttribute(\"httptrace.put_idle_connection.error\", err.Error()))\n\t}\n\ts.sp.Annotate(attrs, \"PutIdleConn\")\n}\n\nfunc (s spanAnnotator) gotFirstResponseByte() {\n\ts.sp.Annotate(nil, \"GotFirstResponseByte\")\n}\n\nfunc (s spanAnnotator) got100Continue() {\n\ts.sp.Annotate(nil, \"Got100Continue\")\n}\n\nfunc (s spanAnnotator) dnsStart(info httptrace.DNSStartInfo) {\n\tattrs := []trace.Attribute{\n\t\ttrace.StringAttribute(\"httptrace.dns_start.host\", info.Host),\n\t}\n\ts.sp.Annotate(attrs, \"DNSStart\")\n}\n\nfunc (s spanAnnotator) dnsDone(info httptrace.DNSDoneInfo) {\n\tvar addrs []string\n\tfor _, addr := range info.Addrs {\n\t\taddrs = append(addrs, addr.String())\n\t}\n\tattrs := []trace.Attribute{\n\t\ttrace.StringAttribute(\"httptrace.dns_done.addrs\", strings.Join(addrs, \" , \")),\n\t}\n\tif info.Err != nil {\n\t\tattrs = append(attrs,\n\t\t\ttrace.StringAttribute(\"httptrace.dns_done.error\", info.Err.Error()))\n\t}\n\ts.sp.Annotate(attrs, \"DNSDone\")\n}\n\nfunc (s spanAnnotator) connectStart(network, addr string) {\n\tattrs := []trace.Attribute{\n\t\ttrace.StringAttribute(\"httptrace.connect_start.network\", network),\n\t\ttrace.StringAttribute(\"httptrace.connect_start.addr\", addr),\n\t}\n\ts.sp.Annotate(attrs, \"ConnectStart\")\n}\n\nfunc (s spanAnnotator) connectDone(network, addr string, err error) {\n\tattrs := []trace.Attribute{\n\t\ttrace.StringAttribute(\"httptrace.connect_done.network\", network),\n\t\ttrace.StringAttribute(\"httptrace.connect_done.addr\", addr),\n\t}\n\tif err != nil {\n\t\tattrs = append(attrs,\n\t\t\ttrace.StringAttribute(\"httptrace.connect_done.error\", err.Error()))\n\t}\n\ts.sp.Annotate(attrs, \"ConnectDone\")\n}\n\nfunc (s spanAnnotator) tlsHandshakeStart() {\n\ts.sp.Annotate(nil, \"TLSHandshakeStart\")\n}\n\nfunc (s spanAnnotator) tlsHandshakeDone(_ tls.ConnectionState, err error) {\n\tvar attrs []trace.Attribute\n\tif err != nil {\n\t\tattrs = append(attrs,\n\t\t\ttrace.StringAttribute(\"httptrace.tls_handshake_done.error\", err.Error()))\n\t}\n\ts.sp.Annotate(attrs, \"TLSHandshakeDone\")\n}\n\nfunc (s spanAnnotator) wroteHeaders() {\n\ts.sp.Annotate(nil, \"WroteHeaders\")\n}\n\nfunc (s spanAnnotator) wait100Continue() {\n\ts.sp.Annotate(nil, \"Wait100Continue\")\n}\n\nfunc (s spanAnnotator) wroteRequest(info httptrace.WroteRequestInfo) {\n\tvar attrs []trace.Attribute\n\tif info.Err != nil {\n\t\tattrs = append(attrs,\n\t\t\ttrace.StringAttribute(\"httptrace.wrote_request.error\", info.Err.Error()))\n\t}\n\ts.sp.Annotate(attrs, \"WroteRequest\")\n}\n"
  },
  {
    "path": "vendor/go.opencensus.io/plugin/ochttp/stats.go",
    "content": "// Copyright 2018, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage ochttp\n\nimport (\n\t\"go.opencensus.io/stats\"\n\t\"go.opencensus.io/stats/view\"\n\t\"go.opencensus.io/tag\"\n)\n\n// Deprecated: client HTTP measures.\nvar (\n\t// Deprecated: Use a Count aggregation over one of the other client measures to achieve the same effect.\n\tClientRequestCount = stats.Int64(\n\t\t\"opencensus.io/http/client/request_count\",\n\t\t\"Number of HTTP requests started\",\n\t\tstats.UnitDimensionless)\n\t// Deprecated: Use ClientSentBytes.\n\tClientRequestBytes = stats.Int64(\n\t\t\"opencensus.io/http/client/request_bytes\",\n\t\t\"HTTP request body size if set as ContentLength (uncompressed)\",\n\t\tstats.UnitBytes)\n\t// Deprecated: Use ClientReceivedBytes.\n\tClientResponseBytes = stats.Int64(\n\t\t\"opencensus.io/http/client/response_bytes\",\n\t\t\"HTTP response body size (uncompressed)\",\n\t\tstats.UnitBytes)\n\t// Deprecated: Use ClientRoundtripLatency.\n\tClientLatency = stats.Float64(\n\t\t\"opencensus.io/http/client/latency\",\n\t\t\"End-to-end latency\",\n\t\tstats.UnitMilliseconds)\n)\n\n// The following client HTTP measures are supported for use in custom views.\nvar (\n\tClientSentBytes = stats.Int64(\n\t\t\"opencensus.io/http/client/sent_bytes\",\n\t\t\"Total bytes sent in request body (not including headers)\",\n\t\tstats.UnitBytes,\n\t)\n\tClientReceivedBytes = stats.Int64(\n\t\t\"opencensus.io/http/client/received_bytes\",\n\t\t\"Total bytes received in response bodies (not including headers but including error responses with bodies)\",\n\t\tstats.UnitBytes,\n\t)\n\tClientRoundtripLatency = stats.Float64(\n\t\t\"opencensus.io/http/client/roundtrip_latency\",\n\t\t\"Time between first byte of request headers sent to last byte of response received, or terminal error\",\n\t\tstats.UnitMilliseconds,\n\t)\n)\n\n// The following server HTTP measures are supported for use in custom views:\nvar (\n\tServerRequestCount = stats.Int64(\n\t\t\"opencensus.io/http/server/request_count\",\n\t\t\"Number of HTTP requests started\",\n\t\tstats.UnitDimensionless)\n\tServerRequestBytes = stats.Int64(\n\t\t\"opencensus.io/http/server/request_bytes\",\n\t\t\"HTTP request body size if set as ContentLength (uncompressed)\",\n\t\tstats.UnitBytes)\n\tServerResponseBytes = stats.Int64(\n\t\t\"opencensus.io/http/server/response_bytes\",\n\t\t\"HTTP response body size (uncompressed)\",\n\t\tstats.UnitBytes)\n\tServerLatency = stats.Float64(\n\t\t\"opencensus.io/http/server/latency\",\n\t\t\"End-to-end latency\",\n\t\tstats.UnitMilliseconds)\n)\n\n// The following tags are applied to stats recorded by this package. Host, Path\n// and Method are applied to all measures. StatusCode is not applied to\n// ClientRequestCount or ServerRequestCount, since it is recorded before the status is known.\nvar (\n\t// Host is the value of the HTTP Host header.\n\t//\n\t// The value of this tag can be controlled by the HTTP client, so you need\n\t// to watch out for potentially generating high-cardinality labels in your\n\t// metrics backend if you use this tag in views.\n\tHost, _ = tag.NewKey(\"http.host\")\n\n\t// StatusCode is the numeric HTTP response status code,\n\t// or \"error\" if a transport error occurred and no status code was read.\n\tStatusCode, _ = tag.NewKey(\"http.status\")\n\n\t// Path is the URL path (not including query string) in the request.\n\t//\n\t// The value of this tag can be controlled by the HTTP client, so you need\n\t// to watch out for potentially generating high-cardinality labels in your\n\t// metrics backend if you use this tag in views.\n\tPath, _ = tag.NewKey(\"http.path\")\n\n\t// Method is the HTTP method of the request, capitalized (GET, POST, etc.).\n\tMethod, _ = tag.NewKey(\"http.method\")\n\n\t// KeyServerRoute is a low cardinality string representing the logical\n\t// handler of the request. This is usually the pattern registered on the a\n\t// ServeMux (or similar string).\n\tKeyServerRoute, _ = tag.NewKey(\"http_server_route\")\n)\n\n// Client tag keys.\nvar (\n\t// KeyClientMethod is the HTTP method, capitalized (i.e. GET, POST, PUT, DELETE, etc.).\n\tKeyClientMethod, _ = tag.NewKey(\"http_client_method\")\n\t// KeyClientPath is the URL path (not including query string).\n\tKeyClientPath, _ = tag.NewKey(\"http_client_path\")\n\t// KeyClientStatus is the HTTP status code as an integer (e.g. 200, 404, 500.), or \"error\" if no response status line was received.\n\tKeyClientStatus, _ = tag.NewKey(\"http_client_status\")\n\t// KeyClientHost is the value of the request Host header.\n\tKeyClientHost, _ = tag.NewKey(\"http_client_host\")\n)\n\n// Default distributions used by views in this package.\nvar (\n\tDefaultSizeDistribution    = view.Distribution(1024, 2048, 4096, 16384, 65536, 262144, 1048576, 4194304, 16777216, 67108864, 268435456, 1073741824, 4294967296)\n\tDefaultLatencyDistribution = view.Distribution(1, 2, 3, 4, 5, 6, 8, 10, 13, 16, 20, 25, 30, 40, 50, 65, 80, 100, 130, 160, 200, 250, 300, 400, 500, 650, 800, 1000, 2000, 5000, 10000, 20000, 50000, 100000)\n)\n\n// Package ochttp provides some convenience views for client measures.\n// You still need to register these views for data to actually be collected.\nvar (\n\tClientSentBytesDistribution = &view.View{\n\t\tName:        \"opencensus.io/http/client/sent_bytes\",\n\t\tMeasure:     ClientSentBytes,\n\t\tAggregation: DefaultSizeDistribution,\n\t\tDescription: \"Total bytes sent in request body (not including headers), by HTTP method and response status\",\n\t\tTagKeys:     []tag.Key{KeyClientMethod, KeyClientStatus},\n\t}\n\n\tClientReceivedBytesDistribution = &view.View{\n\t\tName:        \"opencensus.io/http/client/received_bytes\",\n\t\tMeasure:     ClientReceivedBytes,\n\t\tAggregation: DefaultSizeDistribution,\n\t\tDescription: \"Total bytes received in response bodies (not including headers but including error responses with bodies), by HTTP method and response status\",\n\t\tTagKeys:     []tag.Key{KeyClientMethod, KeyClientStatus},\n\t}\n\n\tClientRoundtripLatencyDistribution = &view.View{\n\t\tName:        \"opencensus.io/http/client/roundtrip_latency\",\n\t\tMeasure:     ClientRoundtripLatency,\n\t\tAggregation: DefaultLatencyDistribution,\n\t\tDescription: \"End-to-end latency, by HTTP method and response status\",\n\t\tTagKeys:     []tag.Key{KeyClientMethod, KeyClientStatus},\n\t}\n\n\tClientCompletedCount = &view.View{\n\t\tName:        \"opencensus.io/http/client/completed_count\",\n\t\tMeasure:     ClientRoundtripLatency,\n\t\tAggregation: view.Count(),\n\t\tDescription: \"Count of completed requests, by HTTP method and response status\",\n\t\tTagKeys:     []tag.Key{KeyClientMethod, KeyClientStatus},\n\t}\n)\n\n// Deprecated: Old client Views.\nvar (\n\t// Deprecated: No direct replacement, but see ClientCompletedCount.\n\tClientRequestCountView = &view.View{\n\t\tName:        \"opencensus.io/http/client/request_count\",\n\t\tDescription: \"Count of HTTP requests started\",\n\t\tMeasure:     ClientRequestCount,\n\t\tAggregation: view.Count(),\n\t}\n\n\t// Deprecated: Use ClientSentBytesDistribution.\n\tClientRequestBytesView = &view.View{\n\t\tName:        \"opencensus.io/http/client/request_bytes\",\n\t\tDescription: \"Size distribution of HTTP request body\",\n\t\tMeasure:     ClientSentBytes,\n\t\tAggregation: DefaultSizeDistribution,\n\t}\n\n\t// Deprecated: Use ClientReceivedBytesDistribution instead.\n\tClientResponseBytesView = &view.View{\n\t\tName:        \"opencensus.io/http/client/response_bytes\",\n\t\tDescription: \"Size distribution of HTTP response body\",\n\t\tMeasure:     ClientReceivedBytes,\n\t\tAggregation: DefaultSizeDistribution,\n\t}\n\n\t// Deprecated: Use ClientRoundtripLatencyDistribution instead.\n\tClientLatencyView = &view.View{\n\t\tName:        \"opencensus.io/http/client/latency\",\n\t\tDescription: \"Latency distribution of HTTP requests\",\n\t\tMeasure:     ClientRoundtripLatency,\n\t\tAggregation: DefaultLatencyDistribution,\n\t}\n\n\t// Deprecated: Use ClientCompletedCount instead.\n\tClientRequestCountByMethod = &view.View{\n\t\tName:        \"opencensus.io/http/client/request_count_by_method\",\n\t\tDescription: \"Client request count by HTTP method\",\n\t\tTagKeys:     []tag.Key{Method},\n\t\tMeasure:     ClientSentBytes,\n\t\tAggregation: view.Count(),\n\t}\n\n\t// Deprecated: Use ClientCompletedCount instead.\n\tClientResponseCountByStatusCode = &view.View{\n\t\tName:        \"opencensus.io/http/client/response_count_by_status_code\",\n\t\tDescription: \"Client response count by status code\",\n\t\tTagKeys:     []tag.Key{StatusCode},\n\t\tMeasure:     ClientRoundtripLatency,\n\t\tAggregation: view.Count(),\n\t}\n)\n\n// Package ochttp provides some convenience views for server measures.\n// You still need to register these views for data to actually be collected.\nvar (\n\tServerRequestCountView = &view.View{\n\t\tName:        \"opencensus.io/http/server/request_count\",\n\t\tDescription: \"Count of HTTP requests started\",\n\t\tMeasure:     ServerRequestCount,\n\t\tAggregation: view.Count(),\n\t}\n\n\tServerRequestBytesView = &view.View{\n\t\tName:        \"opencensus.io/http/server/request_bytes\",\n\t\tDescription: \"Size distribution of HTTP request body\",\n\t\tMeasure:     ServerRequestBytes,\n\t\tAggregation: DefaultSizeDistribution,\n\t}\n\n\tServerResponseBytesView = &view.View{\n\t\tName:        \"opencensus.io/http/server/response_bytes\",\n\t\tDescription: \"Size distribution of HTTP response body\",\n\t\tMeasure:     ServerResponseBytes,\n\t\tAggregation: DefaultSizeDistribution,\n\t}\n\n\tServerLatencyView = &view.View{\n\t\tName:        \"opencensus.io/http/server/latency\",\n\t\tDescription: \"Latency distribution of HTTP requests\",\n\t\tMeasure:     ServerLatency,\n\t\tAggregation: DefaultLatencyDistribution,\n\t}\n\n\tServerRequestCountByMethod = &view.View{\n\t\tName:        \"opencensus.io/http/server/request_count_by_method\",\n\t\tDescription: \"Server request count by HTTP method\",\n\t\tTagKeys:     []tag.Key{Method},\n\t\tMeasure:     ServerRequestCount,\n\t\tAggregation: view.Count(),\n\t}\n\n\tServerResponseCountByStatusCode = &view.View{\n\t\tName:        \"opencensus.io/http/server/response_count_by_status_code\",\n\t\tDescription: \"Server response count by status code\",\n\t\tTagKeys:     []tag.Key{StatusCode},\n\t\tMeasure:     ServerLatency,\n\t\tAggregation: view.Count(),\n\t}\n)\n\n// DefaultClientViews are the default client views provided by this package.\n// Deprecated: No replacement. Register the views you would like individually.\nvar DefaultClientViews = []*view.View{\n\tClientRequestCountView,\n\tClientRequestBytesView,\n\tClientResponseBytesView,\n\tClientLatencyView,\n\tClientRequestCountByMethod,\n\tClientResponseCountByStatusCode,\n}\n\n// DefaultServerViews are the default server views provided by this package.\n// Deprecated: No replacement. Register the views you would like individually.\nvar DefaultServerViews = []*view.View{\n\tServerRequestCountView,\n\tServerRequestBytesView,\n\tServerResponseBytesView,\n\tServerLatencyView,\n\tServerRequestCountByMethod,\n\tServerResponseCountByStatusCode,\n}\n"
  },
  {
    "path": "vendor/go.opencensus.io/plugin/ochttp/trace.go",
    "content": "// Copyright 2018, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage ochttp\n\nimport (\n\t\"io\"\n\t\"net/http\"\n\t\"net/http/httptrace\"\n\n\t\"go.opencensus.io/plugin/ochttp/propagation/b3\"\n\t\"go.opencensus.io/trace\"\n\t\"go.opencensus.io/trace/propagation\"\n)\n\n// TODO(jbd): Add godoc examples.\n\nvar defaultFormat propagation.HTTPFormat = &b3.HTTPFormat{}\n\n// Attributes recorded on the span for the requests.\n// Only trace exporters will need them.\nconst (\n\tHostAttribute       = \"http.host\"\n\tMethodAttribute     = \"http.method\"\n\tPathAttribute       = \"http.path\"\n\tURLAttribute        = \"http.url\"\n\tUserAgentAttribute  = \"http.user_agent\"\n\tStatusCodeAttribute = \"http.status_code\"\n)\n\ntype traceTransport struct {\n\tbase           http.RoundTripper\n\tstartOptions   trace.StartOptions\n\tformat         propagation.HTTPFormat\n\tformatSpanName func(*http.Request) string\n\tnewClientTrace func(*http.Request, *trace.Span) *httptrace.ClientTrace\n}\n\n// TODO(jbd): Add message events for request and response size.\n\n// RoundTrip creates a trace.Span and inserts it into the outgoing request's headers.\n// The created span can follow a parent span, if a parent is presented in\n// the request's context.\nfunc (t *traceTransport) RoundTrip(req *http.Request) (*http.Response, error) {\n\tname := t.formatSpanName(req)\n\t// TODO(jbd): Discuss whether we want to prefix\n\t// outgoing requests with Sent.\n\tctx, span := trace.StartSpan(req.Context(), name,\n\t\ttrace.WithSampler(t.startOptions.Sampler),\n\t\ttrace.WithSpanKind(trace.SpanKindClient))\n\n\tif t.newClientTrace != nil {\n\t\treq = req.WithContext(httptrace.WithClientTrace(ctx, t.newClientTrace(req, span)))\n\t} else {\n\t\treq = req.WithContext(ctx)\n\t}\n\n\tif t.format != nil {\n\t\t// SpanContextToRequest will modify its Request argument, which is\n\t\t// contrary to the contract for http.RoundTripper, so we need to\n\t\t// pass it a copy of the Request.\n\t\t// However, the Request struct itself was already copied by\n\t\t// the WithContext calls above and so we just need to copy the header.\n\t\theader := make(http.Header)\n\t\tfor k, v := range req.Header {\n\t\t\theader[k] = v\n\t\t}\n\t\treq.Header = header\n\t\tt.format.SpanContextToRequest(span.SpanContext(), req)\n\t}\n\n\tspan.AddAttributes(requestAttrs(req)...)\n\tresp, err := t.base.RoundTrip(req)\n\tif err != nil {\n\t\tspan.SetStatus(trace.Status{Code: trace.StatusCodeUnknown, Message: err.Error()})\n\t\tspan.End()\n\t\treturn resp, err\n\t}\n\n\tspan.AddAttributes(responseAttrs(resp)...)\n\tspan.SetStatus(TraceStatus(resp.StatusCode, resp.Status))\n\n\t// span.End() will be invoked after\n\t// a read from resp.Body returns io.EOF or when\n\t// resp.Body.Close() is invoked.\n\tbt := &bodyTracker{rc: resp.Body, span: span}\n\tresp.Body = wrappedBody(bt, resp.Body)\n\treturn resp, err\n}\n\n// bodyTracker wraps a response.Body and invokes\n// trace.EndSpan on encountering io.EOF on reading\n// the body of the original response.\ntype bodyTracker struct {\n\trc   io.ReadCloser\n\tspan *trace.Span\n}\n\nvar _ io.ReadCloser = (*bodyTracker)(nil)\n\nfunc (bt *bodyTracker) Read(b []byte) (int, error) {\n\tn, err := bt.rc.Read(b)\n\n\tswitch err {\n\tcase nil:\n\t\treturn n, nil\n\tcase io.EOF:\n\t\tbt.span.End()\n\tdefault:\n\t\t// For all other errors, set the span status\n\t\tbt.span.SetStatus(trace.Status{\n\t\t\t// Code 2 is the error code for Internal server error.\n\t\t\tCode:    2,\n\t\t\tMessage: err.Error(),\n\t\t})\n\t}\n\treturn n, err\n}\n\nfunc (bt *bodyTracker) Close() error {\n\t// Invoking endSpan on Close will help catch the cases\n\t// in which a read returned a non-nil error, we set the\n\t// span status but didn't end the span.\n\tbt.span.End()\n\treturn bt.rc.Close()\n}\n\n// CancelRequest cancels an in-flight request by closing its connection.\nfunc (t *traceTransport) CancelRequest(req *http.Request) {\n\ttype canceler interface {\n\t\tCancelRequest(*http.Request)\n\t}\n\tif cr, ok := t.base.(canceler); ok {\n\t\tcr.CancelRequest(req)\n\t}\n}\n\nfunc spanNameFromURL(req *http.Request) string {\n\treturn req.URL.Path\n}\n\nfunc requestAttrs(r *http.Request) []trace.Attribute {\n\tuserAgent := r.UserAgent()\n\n\tattrs := make([]trace.Attribute, 0, 5)\n\tattrs = append(attrs,\n\t\ttrace.StringAttribute(PathAttribute, r.URL.Path),\n\t\ttrace.StringAttribute(URLAttribute, r.URL.String()),\n\t\ttrace.StringAttribute(HostAttribute, r.Host),\n\t\ttrace.StringAttribute(MethodAttribute, r.Method),\n\t)\n\n\tif userAgent != \"\" {\n\t\tattrs = append(attrs, trace.StringAttribute(UserAgentAttribute, userAgent))\n\t}\n\n\treturn attrs\n}\n\nfunc responseAttrs(resp *http.Response) []trace.Attribute {\n\treturn []trace.Attribute{\n\t\ttrace.Int64Attribute(StatusCodeAttribute, int64(resp.StatusCode)),\n\t}\n}\n\n// TraceStatus is a utility to convert the HTTP status code to a trace.Status that\n// represents the outcome as closely as possible.\nfunc TraceStatus(httpStatusCode int, statusLine string) trace.Status {\n\tvar code int32\n\tif httpStatusCode < 200 || httpStatusCode >= 400 {\n\t\tcode = trace.StatusCodeUnknown\n\t}\n\tswitch httpStatusCode {\n\tcase 499:\n\t\tcode = trace.StatusCodeCancelled\n\tcase http.StatusBadRequest:\n\t\tcode = trace.StatusCodeInvalidArgument\n\tcase http.StatusGatewayTimeout:\n\t\tcode = trace.StatusCodeDeadlineExceeded\n\tcase http.StatusNotFound:\n\t\tcode = trace.StatusCodeNotFound\n\tcase http.StatusForbidden:\n\t\tcode = trace.StatusCodePermissionDenied\n\tcase http.StatusUnauthorized: // 401 is actually unauthenticated.\n\t\tcode = trace.StatusCodeUnauthenticated\n\tcase http.StatusTooManyRequests:\n\t\tcode = trace.StatusCodeResourceExhausted\n\tcase http.StatusNotImplemented:\n\t\tcode = trace.StatusCodeUnimplemented\n\tcase http.StatusServiceUnavailable:\n\t\tcode = trace.StatusCodeUnavailable\n\tcase http.StatusOK:\n\t\tcode = trace.StatusCodeOK\n\t}\n\treturn trace.Status{Code: code, Message: codeToStr[code]}\n}\n\nvar codeToStr = map[int32]string{\n\ttrace.StatusCodeOK:                 `OK`,\n\ttrace.StatusCodeCancelled:          `CANCELLED`,\n\ttrace.StatusCodeUnknown:            `UNKNOWN`,\n\ttrace.StatusCodeInvalidArgument:    `INVALID_ARGUMENT`,\n\ttrace.StatusCodeDeadlineExceeded:   `DEADLINE_EXCEEDED`,\n\ttrace.StatusCodeNotFound:           `NOT_FOUND`,\n\ttrace.StatusCodeAlreadyExists:      `ALREADY_EXISTS`,\n\ttrace.StatusCodePermissionDenied:   `PERMISSION_DENIED`,\n\ttrace.StatusCodeResourceExhausted:  `RESOURCE_EXHAUSTED`,\n\ttrace.StatusCodeFailedPrecondition: `FAILED_PRECONDITION`,\n\ttrace.StatusCodeAborted:            `ABORTED`,\n\ttrace.StatusCodeOutOfRange:         `OUT_OF_RANGE`,\n\ttrace.StatusCodeUnimplemented:      `UNIMPLEMENTED`,\n\ttrace.StatusCodeInternal:           `INTERNAL`,\n\ttrace.StatusCodeUnavailable:        `UNAVAILABLE`,\n\ttrace.StatusCodeDataLoss:           `DATA_LOSS`,\n\ttrace.StatusCodeUnauthenticated:    `UNAUTHENTICATED`,\n}\n\nfunc isHealthEndpoint(path string) bool {\n\t// Health checking is pretty frequent and\n\t// traces collected for health endpoints\n\t// can be extremely noisy and expensive.\n\t// Disable canonical health checking endpoints\n\t// like /healthz and /_ah/health for now.\n\tif path == \"/healthz\" || path == \"/_ah/health\" {\n\t\treturn true\n\t}\n\treturn false\n}\n"
  },
  {
    "path": "vendor/go.opencensus.io/plugin/ochttp/wrapped_body.go",
    "content": "// Copyright 2019, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage ochttp\n\nimport (\n\t\"io\"\n)\n\n// wrappedBody returns a wrapped version of the original\n// Body and only implements the same combination of additional\n// interfaces as the original.\nfunc wrappedBody(wrapper io.ReadCloser, body io.ReadCloser) io.ReadCloser {\n\tvar (\n\t\twr, i0 = body.(io.Writer)\n\t)\n\tswitch {\n\tcase !i0:\n\t\treturn struct {\n\t\t\tio.ReadCloser\n\t\t}{wrapper}\n\n\tcase i0:\n\t\treturn struct {\n\t\t\tio.ReadCloser\n\t\t\tio.Writer\n\t\t}{wrapper, wr}\n\tdefault:\n\t\treturn struct {\n\t\t\tio.ReadCloser\n\t\t}{wrapper}\n\t}\n}\n"
  },
  {
    "path": "vendor/go.opencensus.io/resource/resource.go",
    "content": "// Copyright 2018, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// Package resource provides functionality for resource, which capture\n// identifying information about the entities for which signals are exported.\npackage resource\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"os\"\n\t\"regexp\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// Environment variables used by FromEnv to decode a resource.\nconst (\n\tEnvVarType   = \"OC_RESOURCE_TYPE\"\n\tEnvVarLabels = \"OC_RESOURCE_LABELS\"\n)\n\n// Resource describes an entity about which identifying information and metadata is exposed.\n// For example, a type \"k8s.io/container\" may hold labels describing the pod name and namespace.\ntype Resource struct {\n\tType   string\n\tLabels map[string]string\n}\n\n// EncodeLabels encodes a labels map to a string as provided via the OC_RESOURCE_LABELS environment variable.\nfunc EncodeLabels(labels map[string]string) string {\n\tsortedKeys := make([]string, 0, len(labels))\n\tfor k := range labels {\n\t\tsortedKeys = append(sortedKeys, k)\n\t}\n\tsort.Strings(sortedKeys)\n\n\ts := \"\"\n\tfor i, k := range sortedKeys {\n\t\tif i > 0 {\n\t\t\ts += \",\"\n\t\t}\n\t\ts += k + \"=\" + strconv.Quote(labels[k])\n\t}\n\treturn s\n}\n\nvar labelRegex = regexp.MustCompile(`^\\s*([[:ascii:]]{1,256}?)=(\"[[:ascii:]]{0,256}?\")\\s*,`)\n\n// DecodeLabels decodes a serialized label map as used in the OC_RESOURCE_LABELS variable.\n// A list of labels of the form `<key1>=\"<value1>\",<key2>=\"<value2>\",...` is accepted.\n// Domain names and paths are accepted as label keys.\n// Most users will want to use FromEnv instead.\nfunc DecodeLabels(s string) (map[string]string, error) {\n\tm := map[string]string{}\n\t// Ensure a trailing comma, which allows us to keep the regex simpler\n\ts = strings.TrimRight(strings.TrimSpace(s), \",\") + \",\"\n\n\tfor len(s) > 0 {\n\t\tmatch := labelRegex.FindStringSubmatch(s)\n\t\tif len(match) == 0 {\n\t\t\treturn nil, fmt.Errorf(\"invalid label formatting, remainder: %s\", s)\n\t\t}\n\t\tv := match[2]\n\t\tif v == \"\" {\n\t\t\tv = match[3]\n\t\t} else {\n\t\t\tvar err error\n\t\t\tif v, err = strconv.Unquote(v); err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"invalid label formatting, remainder: %s, err: %s\", s, err)\n\t\t\t}\n\t\t}\n\t\tm[match[1]] = v\n\n\t\ts = s[len(match[0]):]\n\t}\n\treturn m, nil\n}\n\n// FromEnv is a detector that loads resource information from the OC_RESOURCE_TYPE\n// and OC_RESOURCE_labelS environment variables.\nfunc FromEnv(context.Context) (*Resource, error) {\n\tres := &Resource{\n\t\tType: strings.TrimSpace(os.Getenv(EnvVarType)),\n\t}\n\tlabels := strings.TrimSpace(os.Getenv(EnvVarLabels))\n\tif labels == \"\" {\n\t\treturn res, nil\n\t}\n\tvar err error\n\tif res.Labels, err = DecodeLabels(labels); err != nil {\n\t\treturn nil, err\n\t}\n\treturn res, nil\n}\n\nvar _ Detector = FromEnv\n\n// merge resource information from b into a. In case of a collision, a takes precedence.\nfunc merge(a, b *Resource) *Resource {\n\tif a == nil {\n\t\treturn b\n\t}\n\tif b == nil {\n\t\treturn a\n\t}\n\tres := &Resource{\n\t\tType:   a.Type,\n\t\tLabels: map[string]string{},\n\t}\n\tif res.Type == \"\" {\n\t\tres.Type = b.Type\n\t}\n\tfor k, v := range b.Labels {\n\t\tres.Labels[k] = v\n\t}\n\t// Labels from resource a overwrite labels from resource b.\n\tfor k, v := range a.Labels {\n\t\tres.Labels[k] = v\n\t}\n\treturn res\n}\n\n// Detector attempts to detect resource information.\n// If the detector cannot find resource information, the returned resource is nil but no\n// error is returned.\n// An error is only returned on unexpected failures.\ntype Detector func(context.Context) (*Resource, error)\n\n// MultiDetector returns a Detector that calls all input detectors in order and\n// merges each result with the previous one. In case a type of label key is already set,\n// the first set value is takes precedence.\n// It returns on the first error that a sub-detector encounters.\nfunc MultiDetector(detectors ...Detector) Detector {\n\treturn func(ctx context.Context) (*Resource, error) {\n\t\treturn detectAll(ctx, detectors...)\n\t}\n}\n\n// detectall calls all input detectors sequentially an merges each result with the previous one.\n// It returns on the first error that a sub-detector encounters.\nfunc detectAll(ctx context.Context, detectors ...Detector) (*Resource, error) {\n\tvar res *Resource\n\tfor _, d := range detectors {\n\t\tr, err := d(ctx)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tres = merge(res, r)\n\t}\n\treturn res, nil\n}\n"
  },
  {
    "path": "vendor/go.opencensus.io/stats/doc.go",
    "content": "// Copyright 2017, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\n\n/*\nPackage stats contains support for OpenCensus stats recording.\n\nOpenCensus allows users to create typed measures, record measurements,\naggregate the collected data, and export the aggregated data.\n\nMeasures\n\nA measure represents a type of data point to be tracked and recorded.\nFor example, latency, request Mb/s, and response Mb/s are measures\nto collect from a server.\n\nMeasure constructors such as Int64 and Float64 automatically\nregister the measure by the given name. Each registered measure needs\nto be unique by name. Measures also have a description and a unit.\n\nLibraries can define and export measures. Application authors can then\ncreate views and collect and break down measures by the tags they are\ninterested in.\n\nRecording measurements\n\nMeasurement is a data point to be collected for a measure. For example,\nfor a latency (ms) measure, 100 is a measurement that represents a 100ms\nlatency event. Measurements are created from measures with\nthe current context. Tags from the current context are recorded with the\nmeasurements if they are any.\n\nRecorded measurements are dropped immediately if no views are registered for them.\nThere is usually no need to conditionally enable and disable\nrecording to reduce cost. Recording of measurements is cheap.\n\nLibraries can always record measurements, and applications can later decide\non which measurements they want to collect by registering views. This allows\nlibraries to turn on the instrumentation by default.\n\nExemplars\n\nFor a given recorded measurement, the associated exemplar is a diagnostic map\nthat gives more information about the measurement.\n\nWhen aggregated using a Distribution aggregation, an exemplar is kept for each\nbucket in the Distribution. This allows you to easily find an example of a\nmeasurement that fell into each bucket.\n\nFor example, if you also use the OpenCensus trace package and you\nrecord a measurement with a context that contains a sampled trace span,\nthen the trace span will be added to the exemplar associated with the measurement.\n\nWhen exported to a supporting back end, you should be able to easily navigate\nto example traces that fell into each bucket in the Distribution.\n\n*/\npackage stats // import \"go.opencensus.io/stats\"\n"
  },
  {
    "path": "vendor/go.opencensus.io/stats/internal/record.go",
    "content": "// Copyright 2018, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage internal\n\nimport (\n\t\"go.opencensus.io/tag\"\n)\n\n// DefaultRecorder will be called for each Record call.\nvar DefaultRecorder func(tags *tag.Map, measurement interface{}, attachments map[string]interface{})\n\n// SubscriptionReporter reports when a view subscribed with a measure.\nvar SubscriptionReporter func(measure string)\n"
  },
  {
    "path": "vendor/go.opencensus.io/stats/measure.go",
    "content": "// Copyright 2017, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\n\npackage stats\n\nimport (\n\t\"sync\"\n\t\"sync/atomic\"\n)\n\n// Measure represents a single numeric value to be tracked and recorded.\n// For example, latency, request bytes, and response bytes could be measures\n// to collect from a server.\n//\n// Measures by themselves have no outside effects. In order to be exported,\n// the measure needs to be used in a View. If no Views are defined over a\n// measure, there is very little cost in recording it.\ntype Measure interface {\n\t// Name returns the name of this measure.\n\t//\n\t// Measure names are globally unique (among all libraries linked into your program).\n\t// We recommend prefixing the measure name with a domain name relevant to your\n\t// project or application.\n\t//\n\t// Measure names are never sent over the wire or exported to backends.\n\t// They are only used to create Views.\n\tName() string\n\n\t// Description returns the human-readable description of this measure.\n\tDescription() string\n\n\t// Unit returns the units for the values this measure takes on.\n\t//\n\t// Units are encoded according to the case-sensitive abbreviations from the\n\t// Unified Code for Units of Measure: http://unitsofmeasure.org/ucum.html\n\tUnit() string\n}\n\n// measureDescriptor is the untyped descriptor associated with each measure.\n// Int64Measure and Float64Measure wrap measureDescriptor to provide typed\n// recording APIs.\n// Two Measures with the same name will have the same measureDescriptor.\ntype measureDescriptor struct {\n\tsubs int32 // access atomically\n\n\tname        string\n\tdescription string\n\tunit        string\n}\n\nfunc (m *measureDescriptor) subscribe() {\n\tatomic.StoreInt32(&m.subs, 1)\n}\n\nfunc (m *measureDescriptor) subscribed() bool {\n\treturn atomic.LoadInt32(&m.subs) == 1\n}\n\nvar (\n\tmu       sync.RWMutex\n\tmeasures = make(map[string]*measureDescriptor)\n)\n\nfunc registerMeasureHandle(name, desc, unit string) *measureDescriptor {\n\tmu.Lock()\n\tdefer mu.Unlock()\n\n\tif stored, ok := measures[name]; ok {\n\t\treturn stored\n\t}\n\tm := &measureDescriptor{\n\t\tname:        name,\n\t\tdescription: desc,\n\t\tunit:        unit,\n\t}\n\tmeasures[name] = m\n\treturn m\n}\n\n// Measurement is the numeric value measured when recording stats. Each measure\n// provides methods to create measurements of their kind. For example, Int64Measure\n// provides M to convert an int64 into a measurement.\ntype Measurement struct {\n\tv    float64\n\tm    Measure\n\tdesc *measureDescriptor\n}\n\n// Value returns the value of the Measurement as a float64.\nfunc (m Measurement) Value() float64 {\n\treturn m.v\n}\n\n// Measure returns the Measure from which this Measurement was created.\nfunc (m Measurement) Measure() Measure {\n\treturn m.m\n}\n"
  },
  {
    "path": "vendor/go.opencensus.io/stats/measure_float64.go",
    "content": "// Copyright 2017, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\n\npackage stats\n\n// Float64Measure is a measure for float64 values.\ntype Float64Measure struct {\n\tdesc *measureDescriptor\n}\n\n// M creates a new float64 measurement.\n// Use Record to record measurements.\nfunc (m *Float64Measure) M(v float64) Measurement {\n\treturn Measurement{\n\t\tm:    m,\n\t\tdesc: m.desc,\n\t\tv:    v,\n\t}\n}\n\n// Float64 creates a new measure for float64 values.\n//\n// See the documentation for interface Measure for more guidance on the\n// parameters of this function.\nfunc Float64(name, description, unit string) *Float64Measure {\n\tmi := registerMeasureHandle(name, description, unit)\n\treturn &Float64Measure{mi}\n}\n\n// Name returns the name of the measure.\nfunc (m *Float64Measure) Name() string {\n\treturn m.desc.name\n}\n\n// Description returns the description of the measure.\nfunc (m *Float64Measure) Description() string {\n\treturn m.desc.description\n}\n\n// Unit returns the unit of the measure.\nfunc (m *Float64Measure) Unit() string {\n\treturn m.desc.unit\n}\n"
  },
  {
    "path": "vendor/go.opencensus.io/stats/measure_int64.go",
    "content": "// Copyright 2017, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\n\npackage stats\n\n// Int64Measure is a measure for int64 values.\ntype Int64Measure struct {\n\tdesc *measureDescriptor\n}\n\n// M creates a new int64 measurement.\n// Use Record to record measurements.\nfunc (m *Int64Measure) M(v int64) Measurement {\n\treturn Measurement{\n\t\tm:    m,\n\t\tdesc: m.desc,\n\t\tv:    float64(v),\n\t}\n}\n\n// Int64 creates a new measure for int64 values.\n//\n// See the documentation for interface Measure for more guidance on the\n// parameters of this function.\nfunc Int64(name, description, unit string) *Int64Measure {\n\tmi := registerMeasureHandle(name, description, unit)\n\treturn &Int64Measure{mi}\n}\n\n// Name returns the name of the measure.\nfunc (m *Int64Measure) Name() string {\n\treturn m.desc.name\n}\n\n// Description returns the description of the measure.\nfunc (m *Int64Measure) Description() string {\n\treturn m.desc.description\n}\n\n// Unit returns the unit of the measure.\nfunc (m *Int64Measure) Unit() string {\n\treturn m.desc.unit\n}\n"
  },
  {
    "path": "vendor/go.opencensus.io/stats/record.go",
    "content": "// Copyright 2018, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\n\npackage stats\n\nimport (\n\t\"context\"\n\n\t\"go.opencensus.io/metric/metricdata\"\n\t\"go.opencensus.io/stats/internal\"\n\t\"go.opencensus.io/tag\"\n)\n\nfunc init() {\n\tinternal.SubscriptionReporter = func(measure string) {\n\t\tmu.Lock()\n\t\tmeasures[measure].subscribe()\n\t\tmu.Unlock()\n\t}\n}\n\ntype recordOptions struct {\n\tattachments  metricdata.Attachments\n\tmutators     []tag.Mutator\n\tmeasurements []Measurement\n}\n\n// WithAttachments applies provided exemplar attachments.\nfunc WithAttachments(attachments metricdata.Attachments) Options {\n\treturn func(ro *recordOptions) {\n\t\tro.attachments = attachments\n\t}\n}\n\n// WithTags applies provided tag mutators.\nfunc WithTags(mutators ...tag.Mutator) Options {\n\treturn func(ro *recordOptions) {\n\t\tro.mutators = mutators\n\t}\n}\n\n// WithMeasurements applies provided measurements.\nfunc WithMeasurements(measurements ...Measurement) Options {\n\treturn func(ro *recordOptions) {\n\t\tro.measurements = measurements\n\t}\n}\n\n// Options apply changes to recordOptions.\ntype Options func(*recordOptions)\n\nfunc createRecordOption(ros ...Options) *recordOptions {\n\to := &recordOptions{}\n\tfor _, ro := range ros {\n\t\tro(o)\n\t}\n\treturn o\n}\n\n// Record records one or multiple measurements with the same context at once.\n// If there are any tags in the context, measurements will be tagged with them.\nfunc Record(ctx context.Context, ms ...Measurement) {\n\tRecordWithOptions(ctx, WithMeasurements(ms...))\n}\n\n// RecordWithTags records one or multiple measurements at once.\n//\n// Measurements will be tagged with the tags in the context mutated by the mutators.\n// RecordWithTags is useful if you want to record with tag mutations but don't want\n// to propagate the mutations in the context.\nfunc RecordWithTags(ctx context.Context, mutators []tag.Mutator, ms ...Measurement) error {\n\treturn RecordWithOptions(ctx, WithTags(mutators...), WithMeasurements(ms...))\n}\n\n// RecordWithOptions records measurements from the given options (if any) against context\n// and tags and attachments in the options (if any).\n// If there are any tags in the context, measurements will be tagged with them.\nfunc RecordWithOptions(ctx context.Context, ros ...Options) error {\n\to := createRecordOption(ros...)\n\tif len(o.measurements) == 0 {\n\t\treturn nil\n\t}\n\trecorder := internal.DefaultRecorder\n\tif recorder == nil {\n\t\treturn nil\n\t}\n\trecord := false\n\tfor _, m := range o.measurements {\n\t\tif m.desc.subscribed() {\n\t\t\trecord = true\n\t\t\tbreak\n\t\t}\n\t}\n\tif !record {\n\t\treturn nil\n\t}\n\tif len(o.mutators) > 0 {\n\t\tvar err error\n\t\tif ctx, err = tag.New(ctx, o.mutators...); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\trecorder(tag.FromContext(ctx), o.measurements, o.attachments)\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/go.opencensus.io/stats/units.go",
    "content": "// Copyright 2018, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\n\npackage stats\n\n// Units are encoded according to the case-sensitive abbreviations from the\n// Unified Code for Units of Measure: http://unitsofmeasure.org/ucum.html\nconst (\n\tUnitNone          = \"1\" // Deprecated: Use UnitDimensionless.\n\tUnitDimensionless = \"1\"\n\tUnitBytes         = \"By\"\n\tUnitMilliseconds  = \"ms\"\n)\n"
  },
  {
    "path": "vendor/go.opencensus.io/stats/view/aggregation.go",
    "content": "// Copyright 2017, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\n\npackage view\n\n// AggType represents the type of aggregation function used on a View.\ntype AggType int\n\n// All available aggregation types.\nconst (\n\tAggTypeNone         AggType = iota // no aggregation; reserved for future use.\n\tAggTypeCount                       // the count aggregation, see Count.\n\tAggTypeSum                         // the sum aggregation, see Sum.\n\tAggTypeDistribution                // the distribution aggregation, see Distribution.\n\tAggTypeLastValue                   // the last value aggregation, see LastValue.\n)\n\nfunc (t AggType) String() string {\n\treturn aggTypeName[t]\n}\n\nvar aggTypeName = map[AggType]string{\n\tAggTypeNone:         \"None\",\n\tAggTypeCount:        \"Count\",\n\tAggTypeSum:          \"Sum\",\n\tAggTypeDistribution: \"Distribution\",\n\tAggTypeLastValue:    \"LastValue\",\n}\n\n// Aggregation represents a data aggregation method. Use one of the functions:\n// Count, Sum, or Distribution to construct an Aggregation.\ntype Aggregation struct {\n\tType    AggType   // Type is the AggType of this Aggregation.\n\tBuckets []float64 // Buckets are the bucket endpoints if this Aggregation represents a distribution, see Distribution.\n\n\tnewData func() AggregationData\n}\n\nvar (\n\taggCount = &Aggregation{\n\t\tType: AggTypeCount,\n\t\tnewData: func() AggregationData {\n\t\t\treturn &CountData{}\n\t\t},\n\t}\n\taggSum = &Aggregation{\n\t\tType: AggTypeSum,\n\t\tnewData: func() AggregationData {\n\t\t\treturn &SumData{}\n\t\t},\n\t}\n)\n\n// Count indicates that data collected and aggregated\n// with this method will be turned into a count value.\n// For example, total number of accepted requests can be\n// aggregated by using Count.\nfunc Count() *Aggregation {\n\treturn aggCount\n}\n\n// Sum indicates that data collected and aggregated\n// with this method will be summed up.\n// For example, accumulated request bytes can be aggregated by using\n// Sum.\nfunc Sum() *Aggregation {\n\treturn aggSum\n}\n\n// Distribution indicates that the desired aggregation is\n// a histogram distribution.\n//\n// A distribution aggregation may contain a histogram of the values in the\n// population. The bucket boundaries for that histogram are described\n// by the bounds. This defines len(bounds)+1 buckets.\n//\n// If len(bounds) >= 2 then the boundaries for bucket index i are:\n//\n//     [-infinity, bounds[i]) for i = 0\n//     [bounds[i-1], bounds[i]) for 0 < i < length\n//     [bounds[i-1], +infinity) for i = length\n//\n// If len(bounds) is 0 then there is no histogram associated with the\n// distribution. There will be a single bucket with boundaries\n// (-infinity, +infinity).\n//\n// If len(bounds) is 1 then there is no finite buckets, and that single\n// element is the common boundary of the overflow and underflow buckets.\nfunc Distribution(bounds ...float64) *Aggregation {\n\treturn &Aggregation{\n\t\tType:    AggTypeDistribution,\n\t\tBuckets: bounds,\n\t\tnewData: func() AggregationData {\n\t\t\treturn newDistributionData(bounds)\n\t\t},\n\t}\n}\n\n// LastValue only reports the last value recorded using this\n// aggregation. All other measurements will be dropped.\nfunc LastValue() *Aggregation {\n\treturn &Aggregation{\n\t\tType: AggTypeLastValue,\n\t\tnewData: func() AggregationData {\n\t\t\treturn &LastValueData{}\n\t\t},\n\t}\n}\n"
  },
  {
    "path": "vendor/go.opencensus.io/stats/view/aggregation_data.go",
    "content": "// Copyright 2017, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\n\npackage view\n\nimport (\n\t\"math\"\n\t\"time\"\n\n\t\"go.opencensus.io/metric/metricdata\"\n)\n\n// AggregationData represents an aggregated value from a collection.\n// They are reported on the view data during exporting.\n// Mosts users won't directly access aggregration data.\ntype AggregationData interface {\n\tisAggregationData() bool\n\taddSample(v float64, attachments map[string]interface{}, t time.Time)\n\tclone() AggregationData\n\tequal(other AggregationData) bool\n\ttoPoint(t metricdata.Type, time time.Time) metricdata.Point\n}\n\nconst epsilon = 1e-9\n\n// CountData is the aggregated data for the Count aggregation.\n// A count aggregation processes data and counts the recordings.\n//\n// Most users won't directly access count data.\ntype CountData struct {\n\tValue int64\n}\n\nfunc (a *CountData) isAggregationData() bool { return true }\n\nfunc (a *CountData) addSample(_ float64, _ map[string]interface{}, _ time.Time) {\n\ta.Value = a.Value + 1\n}\n\nfunc (a *CountData) clone() AggregationData {\n\treturn &CountData{Value: a.Value}\n}\n\nfunc (a *CountData) equal(other AggregationData) bool {\n\ta2, ok := other.(*CountData)\n\tif !ok {\n\t\treturn false\n\t}\n\n\treturn a.Value == a2.Value\n}\n\nfunc (a *CountData) toPoint(metricType metricdata.Type, t time.Time) metricdata.Point {\n\tswitch metricType {\n\tcase metricdata.TypeCumulativeInt64:\n\t\treturn metricdata.NewInt64Point(t, a.Value)\n\tdefault:\n\t\tpanic(\"unsupported metricdata.Type\")\n\t}\n}\n\n// SumData is the aggregated data for the Sum aggregation.\n// A sum aggregation processes data and sums up the recordings.\n//\n// Most users won't directly access sum data.\ntype SumData struct {\n\tValue float64\n}\n\nfunc (a *SumData) isAggregationData() bool { return true }\n\nfunc (a *SumData) addSample(v float64, _ map[string]interface{}, _ time.Time) {\n\ta.Value += v\n}\n\nfunc (a *SumData) clone() AggregationData {\n\treturn &SumData{Value: a.Value}\n}\n\nfunc (a *SumData) equal(other AggregationData) bool {\n\ta2, ok := other.(*SumData)\n\tif !ok {\n\t\treturn false\n\t}\n\treturn math.Pow(a.Value-a2.Value, 2) < epsilon\n}\n\nfunc (a *SumData) toPoint(metricType metricdata.Type, t time.Time) metricdata.Point {\n\tswitch metricType {\n\tcase metricdata.TypeCumulativeInt64:\n\t\treturn metricdata.NewInt64Point(t, int64(a.Value))\n\tcase metricdata.TypeCumulativeFloat64:\n\t\treturn metricdata.NewFloat64Point(t, a.Value)\n\tdefault:\n\t\tpanic(\"unsupported metricdata.Type\")\n\t}\n}\n\n// DistributionData is the aggregated data for the\n// Distribution aggregation.\n//\n// Most users won't directly access distribution data.\n//\n// For a distribution with N bounds, the associated DistributionData will have\n// N+1 buckets.\ntype DistributionData struct {\n\tCount           int64   // number of data points aggregated\n\tMin             float64 // minimum value in the distribution\n\tMax             float64 // max value in the distribution\n\tMean            float64 // mean of the distribution\n\tSumOfSquaredDev float64 // sum of the squared deviation from the mean\n\tCountPerBucket  []int64 // number of occurrences per bucket\n\t// ExemplarsPerBucket is slice the same length as CountPerBucket containing\n\t// an exemplar for the associated bucket, or nil.\n\tExemplarsPerBucket []*metricdata.Exemplar\n\tbounds             []float64 // histogram distribution of the values\n}\n\nfunc newDistributionData(bounds []float64) *DistributionData {\n\tbucketCount := len(bounds) + 1\n\treturn &DistributionData{\n\t\tCountPerBucket:     make([]int64, bucketCount),\n\t\tExemplarsPerBucket: make([]*metricdata.Exemplar, bucketCount),\n\t\tbounds:             bounds,\n\t\tMin:                math.MaxFloat64,\n\t\tMax:                math.SmallestNonzeroFloat64,\n\t}\n}\n\n// Sum returns the sum of all samples collected.\nfunc (a *DistributionData) Sum() float64 { return a.Mean * float64(a.Count) }\n\nfunc (a *DistributionData) variance() float64 {\n\tif a.Count <= 1 {\n\t\treturn 0\n\t}\n\treturn a.SumOfSquaredDev / float64(a.Count-1)\n}\n\nfunc (a *DistributionData) isAggregationData() bool { return true }\n\n// TODO(songy23): support exemplar attachments.\nfunc (a *DistributionData) addSample(v float64, attachments map[string]interface{}, t time.Time) {\n\tif v < a.Min {\n\t\ta.Min = v\n\t}\n\tif v > a.Max {\n\t\ta.Max = v\n\t}\n\ta.Count++\n\ta.addToBucket(v, attachments, t)\n\n\tif a.Count == 1 {\n\t\ta.Mean = v\n\t\treturn\n\t}\n\n\toldMean := a.Mean\n\ta.Mean = a.Mean + (v-a.Mean)/float64(a.Count)\n\ta.SumOfSquaredDev = a.SumOfSquaredDev + (v-oldMean)*(v-a.Mean)\n}\n\nfunc (a *DistributionData) addToBucket(v float64, attachments map[string]interface{}, t time.Time) {\n\tvar count *int64\n\tvar i int\n\tvar b float64\n\tfor i, b = range a.bounds {\n\t\tif v < b {\n\t\t\tcount = &a.CountPerBucket[i]\n\t\t\tbreak\n\t\t}\n\t}\n\tif count == nil { // Last bucket.\n\t\ti = len(a.bounds)\n\t\tcount = &a.CountPerBucket[i]\n\t}\n\t*count++\n\tif exemplar := getExemplar(v, attachments, t); exemplar != nil {\n\t\ta.ExemplarsPerBucket[i] = exemplar\n\t}\n}\n\nfunc getExemplar(v float64, attachments map[string]interface{}, t time.Time) *metricdata.Exemplar {\n\tif len(attachments) == 0 {\n\t\treturn nil\n\t}\n\treturn &metricdata.Exemplar{\n\t\tValue:       v,\n\t\tTimestamp:   t,\n\t\tAttachments: attachments,\n\t}\n}\n\nfunc (a *DistributionData) clone() AggregationData {\n\tc := *a\n\tc.CountPerBucket = append([]int64(nil), a.CountPerBucket...)\n\tc.ExemplarsPerBucket = append([]*metricdata.Exemplar(nil), a.ExemplarsPerBucket...)\n\treturn &c\n}\n\nfunc (a *DistributionData) equal(other AggregationData) bool {\n\ta2, ok := other.(*DistributionData)\n\tif !ok {\n\t\treturn false\n\t}\n\tif a2 == nil {\n\t\treturn false\n\t}\n\tif len(a.CountPerBucket) != len(a2.CountPerBucket) {\n\t\treturn false\n\t}\n\tfor i := range a.CountPerBucket {\n\t\tif a.CountPerBucket[i] != a2.CountPerBucket[i] {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn a.Count == a2.Count && a.Min == a2.Min && a.Max == a2.Max && math.Pow(a.Mean-a2.Mean, 2) < epsilon && math.Pow(a.variance()-a2.variance(), 2) < epsilon\n}\n\nfunc (a *DistributionData) toPoint(metricType metricdata.Type, t time.Time) metricdata.Point {\n\tswitch metricType {\n\tcase metricdata.TypeCumulativeDistribution:\n\t\tbuckets := []metricdata.Bucket{}\n\t\tfor i := 0; i < len(a.CountPerBucket); i++ {\n\t\t\tbuckets = append(buckets, metricdata.Bucket{\n\t\t\t\tCount:    a.CountPerBucket[i],\n\t\t\t\tExemplar: a.ExemplarsPerBucket[i],\n\t\t\t})\n\t\t}\n\t\tbucketOptions := &metricdata.BucketOptions{Bounds: a.bounds}\n\n\t\tval := &metricdata.Distribution{\n\t\t\tCount:                 a.Count,\n\t\t\tSum:                   a.Sum(),\n\t\t\tSumOfSquaredDeviation: a.SumOfSquaredDev,\n\t\t\tBucketOptions:         bucketOptions,\n\t\t\tBuckets:               buckets,\n\t\t}\n\t\treturn metricdata.NewDistributionPoint(t, val)\n\n\tdefault:\n\t\t// TODO: [rghetia] when we have a use case for TypeGaugeDistribution.\n\t\tpanic(\"unsupported metricdata.Type\")\n\t}\n}\n\n// LastValueData returns the last value recorded for LastValue aggregation.\ntype LastValueData struct {\n\tValue float64\n}\n\nfunc (l *LastValueData) isAggregationData() bool {\n\treturn true\n}\n\nfunc (l *LastValueData) addSample(v float64, _ map[string]interface{}, _ time.Time) {\n\tl.Value = v\n}\n\nfunc (l *LastValueData) clone() AggregationData {\n\treturn &LastValueData{l.Value}\n}\n\nfunc (l *LastValueData) equal(other AggregationData) bool {\n\ta2, ok := other.(*LastValueData)\n\tif !ok {\n\t\treturn false\n\t}\n\treturn l.Value == a2.Value\n}\n\nfunc (l *LastValueData) toPoint(metricType metricdata.Type, t time.Time) metricdata.Point {\n\tswitch metricType {\n\tcase metricdata.TypeGaugeInt64:\n\t\treturn metricdata.NewInt64Point(t, int64(l.Value))\n\tcase metricdata.TypeGaugeFloat64:\n\t\treturn metricdata.NewFloat64Point(t, l.Value)\n\tdefault:\n\t\tpanic(\"unsupported metricdata.Type\")\n\t}\n}\n"
  },
  {
    "path": "vendor/go.opencensus.io/stats/view/collector.go",
    "content": "// Copyright 2017, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\n\npackage view\n\nimport (\n\t\"sort\"\n\t\"time\"\n\n\t\"go.opencensus.io/internal/tagencoding\"\n\t\"go.opencensus.io/tag\"\n)\n\ntype collector struct {\n\t// signatures holds the aggregations values for each unique tag signature\n\t// (values for all keys) to its aggregator.\n\tsignatures map[string]AggregationData\n\t// Aggregation is the description of the aggregation to perform for this\n\t// view.\n\ta *Aggregation\n}\n\nfunc (c *collector) addSample(s string, v float64, attachments map[string]interface{}, t time.Time) {\n\taggregator, ok := c.signatures[s]\n\tif !ok {\n\t\taggregator = c.a.newData()\n\t\tc.signatures[s] = aggregator\n\t}\n\taggregator.addSample(v, attachments, t)\n}\n\n// collectRows returns a snapshot of the collected Row values.\nfunc (c *collector) collectedRows(keys []tag.Key) []*Row {\n\trows := make([]*Row, 0, len(c.signatures))\n\tfor sig, aggregator := range c.signatures {\n\t\ttags := decodeTags([]byte(sig), keys)\n\t\trow := &Row{Tags: tags, Data: aggregator.clone()}\n\t\trows = append(rows, row)\n\t}\n\treturn rows\n}\n\nfunc (c *collector) clearRows() {\n\tc.signatures = make(map[string]AggregationData)\n}\n\n// encodeWithKeys encodes the map by using values\n// only associated with the keys provided.\nfunc encodeWithKeys(m *tag.Map, keys []tag.Key) []byte {\n\tvb := &tagencoding.Values{\n\t\tBuffer: make([]byte, len(keys)),\n\t}\n\tfor _, k := range keys {\n\t\tv, _ := m.Value(k)\n\t\tvb.WriteValue([]byte(v))\n\t}\n\treturn vb.Bytes()\n}\n\n// decodeTags decodes tags from the buffer and\n// orders them by the keys.\nfunc decodeTags(buf []byte, keys []tag.Key) []tag.Tag {\n\tvb := &tagencoding.Values{Buffer: buf}\n\tvar tags []tag.Tag\n\tfor _, k := range keys {\n\t\tv := vb.ReadValue()\n\t\tif v != nil {\n\t\t\ttags = append(tags, tag.Tag{Key: k, Value: string(v)})\n\t\t}\n\t}\n\tvb.ReadIndex = 0\n\tsort.Slice(tags, func(i, j int) bool { return tags[i].Key.Name() < tags[j].Key.Name() })\n\treturn tags\n}\n"
  },
  {
    "path": "vendor/go.opencensus.io/stats/view/doc.go",
    "content": "// Copyright 2017, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\n\n// Package view contains support for collecting and exposing aggregates over stats.\n//\n// In order to collect measurements, views need to be defined and registered.\n// A view allows recorded measurements to be filtered and aggregated.\n//\n// All recorded measurements can be grouped by a list of tags.\n//\n// OpenCensus provides several aggregation methods: Count, Distribution and Sum.\n//\n// Count only counts the number of measurement points recorded.\n// Distribution provides statistical summary of the aggregated data by counting\n// how many recorded measurements fall into each bucket.\n// Sum adds up the measurement values.\n// LastValue just keeps track of the most recently recorded measurement value.\n// All aggregations are cumulative.\n//\n// Views can be registerd and unregistered at any time during program execution.\n//\n// Libraries can define views but it is recommended that in most cases registering\n// views be left up to applications.\n//\n// Exporting\n//\n// Collected and aggregated data can be exported to a metric collection\n// backend by registering its exporter.\n//\n// Multiple exporters can be registered to upload the data to various\n// different back ends.\npackage view // import \"go.opencensus.io/stats/view\"\n\n// TODO(acetechnologist): Add a link to the language independent OpenCensus\n// spec when it is available.\n"
  },
  {
    "path": "vendor/go.opencensus.io/stats/view/export.go",
    "content": "// Copyright 2017, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage view\n\nimport \"sync\"\n\nvar (\n\texportersMu sync.RWMutex // guards exporters\n\texporters   = make(map[Exporter]struct{})\n)\n\n// Exporter exports the collected records as view data.\n//\n// The ExportView method should return quickly; if an\n// Exporter takes a significant amount of time to\n// process a Data, that work should be done on another goroutine.\n//\n// It is safe to assume that ExportView will not be called concurrently from\n// multiple goroutines.\n//\n// The Data should not be modified.\ntype Exporter interface {\n\tExportView(viewData *Data)\n}\n\n// RegisterExporter registers an exporter.\n// Collected data will be reported via all the\n// registered exporters. Once you no longer\n// want data to be exported, invoke UnregisterExporter\n// with the previously registered exporter.\n//\n// Binaries can register exporters, libraries shouldn't register exporters.\nfunc RegisterExporter(e Exporter) {\n\texportersMu.Lock()\n\tdefer exportersMu.Unlock()\n\n\texporters[e] = struct{}{}\n}\n\n// UnregisterExporter unregisters an exporter.\nfunc UnregisterExporter(e Exporter) {\n\texportersMu.Lock()\n\tdefer exportersMu.Unlock()\n\n\tdelete(exporters, e)\n}\n"
  },
  {
    "path": "vendor/go.opencensus.io/stats/view/view.go",
    "content": "// Copyright 2017, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\n\npackage view\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"sort\"\n\t\"sync/atomic\"\n\t\"time\"\n\n\t\"go.opencensus.io/metric/metricdata\"\n\t\"go.opencensus.io/stats\"\n\t\"go.opencensus.io/tag\"\n)\n\n// View allows users to aggregate the recorded stats.Measurements.\n// Views need to be passed to the Register function to be before data will be\n// collected and sent to Exporters.\ntype View struct {\n\tName        string // Name of View. Must be unique. If unset, will default to the name of the Measure.\n\tDescription string // Description is a human-readable description for this view.\n\n\t// TagKeys are the tag keys describing the grouping of this view.\n\t// A single Row will be produced for each combination of associated tag values.\n\tTagKeys []tag.Key\n\n\t// Measure is a stats.Measure to aggregate in this view.\n\tMeasure stats.Measure\n\n\t// Aggregation is the aggregation function tp apply to the set of Measurements.\n\tAggregation *Aggregation\n}\n\n// WithName returns a copy of the View with a new name. This is useful for\n// renaming views to cope with limitations placed on metric names by various\n// backends.\nfunc (v *View) WithName(name string) *View {\n\tvNew := *v\n\tvNew.Name = name\n\treturn &vNew\n}\n\n// same compares two views and returns true if they represent the same aggregation.\nfunc (v *View) same(other *View) bool {\n\tif v == other {\n\t\treturn true\n\t}\n\tif v == nil {\n\t\treturn false\n\t}\n\treturn reflect.DeepEqual(v.Aggregation, other.Aggregation) &&\n\t\tv.Measure.Name() == other.Measure.Name()\n}\n\n// ErrNegativeBucketBounds error returned if histogram contains negative bounds.\n//\n// Deprecated: this should not be public.\nvar ErrNegativeBucketBounds = errors.New(\"negative bucket bounds not supported\")\n\n// canonicalize canonicalizes v by setting explicit\n// defaults for Name and Description and sorting the TagKeys\nfunc (v *View) canonicalize() error {\n\tif v.Measure == nil {\n\t\treturn fmt.Errorf(\"cannot register view %q: measure not set\", v.Name)\n\t}\n\tif v.Aggregation == nil {\n\t\treturn fmt.Errorf(\"cannot register view %q: aggregation not set\", v.Name)\n\t}\n\tif v.Name == \"\" {\n\t\tv.Name = v.Measure.Name()\n\t}\n\tif v.Description == \"\" {\n\t\tv.Description = v.Measure.Description()\n\t}\n\tif err := checkViewName(v.Name); err != nil {\n\t\treturn err\n\t}\n\tsort.Slice(v.TagKeys, func(i, j int) bool {\n\t\treturn v.TagKeys[i].Name() < v.TagKeys[j].Name()\n\t})\n\tsort.Float64s(v.Aggregation.Buckets)\n\tfor _, b := range v.Aggregation.Buckets {\n\t\tif b < 0 {\n\t\t\treturn ErrNegativeBucketBounds\n\t\t}\n\t}\n\t// drop 0 bucket silently.\n\tv.Aggregation.Buckets = dropZeroBounds(v.Aggregation.Buckets...)\n\n\treturn nil\n}\n\nfunc dropZeroBounds(bounds ...float64) []float64 {\n\tfor i, bound := range bounds {\n\t\tif bound > 0 {\n\t\t\treturn bounds[i:]\n\t\t}\n\t}\n\treturn []float64{}\n}\n\n// viewInternal is the internal representation of a View.\ntype viewInternal struct {\n\tview             *View  // view is the canonicalized View definition associated with this view.\n\tsubscribed       uint32 // 1 if someone is subscribed and data need to be exported, use atomic to access\n\tcollector        *collector\n\tmetricDescriptor *metricdata.Descriptor\n}\n\nfunc newViewInternal(v *View) (*viewInternal, error) {\n\treturn &viewInternal{\n\t\tview:             v,\n\t\tcollector:        &collector{make(map[string]AggregationData), v.Aggregation},\n\t\tmetricDescriptor: viewToMetricDescriptor(v),\n\t}, nil\n}\n\nfunc (v *viewInternal) subscribe() {\n\tatomic.StoreUint32(&v.subscribed, 1)\n}\n\nfunc (v *viewInternal) unsubscribe() {\n\tatomic.StoreUint32(&v.subscribed, 0)\n}\n\n// isSubscribed returns true if the view is exporting\n// data by subscription.\nfunc (v *viewInternal) isSubscribed() bool {\n\treturn atomic.LoadUint32(&v.subscribed) == 1\n}\n\nfunc (v *viewInternal) clearRows() {\n\tv.collector.clearRows()\n}\n\nfunc (v *viewInternal) collectedRows() []*Row {\n\treturn v.collector.collectedRows(v.view.TagKeys)\n}\n\nfunc (v *viewInternal) addSample(m *tag.Map, val float64, attachments map[string]interface{}, t time.Time) {\n\tif !v.isSubscribed() {\n\t\treturn\n\t}\n\tsig := string(encodeWithKeys(m, v.view.TagKeys))\n\tv.collector.addSample(sig, val, attachments, t)\n}\n\n// A Data is a set of rows about usage of the single measure associated\n// with the given view. Each row is specific to a unique set of tags.\ntype Data struct {\n\tView       *View\n\tStart, End time.Time\n\tRows       []*Row\n}\n\n// Row is the collected value for a specific set of key value pairs a.k.a tags.\ntype Row struct {\n\tTags []tag.Tag\n\tData AggregationData\n}\n\nfunc (r *Row) String() string {\n\tvar buffer bytes.Buffer\n\tbuffer.WriteString(\"{ \")\n\tbuffer.WriteString(\"{ \")\n\tfor _, t := range r.Tags {\n\t\tbuffer.WriteString(fmt.Sprintf(\"{%v %v}\", t.Key.Name(), t.Value))\n\t}\n\tbuffer.WriteString(\" }\")\n\tbuffer.WriteString(fmt.Sprintf(\"%v\", r.Data))\n\tbuffer.WriteString(\" }\")\n\treturn buffer.String()\n}\n\n// Equal returns true if both rows are equal. Tags are expected to be ordered\n// by the key name. Even both rows have the same tags but the tags appear in\n// different orders it will return false.\nfunc (r *Row) Equal(other *Row) bool {\n\tif r == other {\n\t\treturn true\n\t}\n\treturn reflect.DeepEqual(r.Tags, other.Tags) && r.Data.equal(other.Data)\n}\n\nconst maxNameLength = 255\n\n// Returns true if the given string contains only printable characters.\nfunc isPrintable(str string) bool {\n\tfor _, r := range str {\n\t\tif !(r >= ' ' && r <= '~') {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\nfunc checkViewName(name string) error {\n\tif len(name) > maxNameLength {\n\t\treturn fmt.Errorf(\"view name cannot be larger than %v\", maxNameLength)\n\t}\n\tif !isPrintable(name) {\n\t\treturn fmt.Errorf(\"view name needs to be an ASCII string\")\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/go.opencensus.io/stats/view/view_to_metric.go",
    "content": "// Copyright 2019, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\n\npackage view\n\nimport (\n\t\"time\"\n\n\t\"go.opencensus.io/metric/metricdata\"\n\t\"go.opencensus.io/stats\"\n)\n\nfunc getUnit(unit string) metricdata.Unit {\n\tswitch unit {\n\tcase \"1\":\n\t\treturn metricdata.UnitDimensionless\n\tcase \"ms\":\n\t\treturn metricdata.UnitMilliseconds\n\tcase \"By\":\n\t\treturn metricdata.UnitBytes\n\t}\n\treturn metricdata.UnitDimensionless\n}\n\nfunc getType(v *View) metricdata.Type {\n\tm := v.Measure\n\tagg := v.Aggregation\n\n\tswitch agg.Type {\n\tcase AggTypeSum:\n\t\tswitch m.(type) {\n\t\tcase *stats.Int64Measure:\n\t\t\treturn metricdata.TypeCumulativeInt64\n\t\tcase *stats.Float64Measure:\n\t\t\treturn metricdata.TypeCumulativeFloat64\n\t\tdefault:\n\t\t\tpanic(\"unexpected measure type\")\n\t\t}\n\tcase AggTypeDistribution:\n\t\treturn metricdata.TypeCumulativeDistribution\n\tcase AggTypeLastValue:\n\t\tswitch m.(type) {\n\t\tcase *stats.Int64Measure:\n\t\t\treturn metricdata.TypeGaugeInt64\n\t\tcase *stats.Float64Measure:\n\t\t\treturn metricdata.TypeGaugeFloat64\n\t\tdefault:\n\t\t\tpanic(\"unexpected measure type\")\n\t\t}\n\tcase AggTypeCount:\n\t\tswitch m.(type) {\n\t\tcase *stats.Int64Measure:\n\t\t\treturn metricdata.TypeCumulativeInt64\n\t\tcase *stats.Float64Measure:\n\t\t\treturn metricdata.TypeCumulativeInt64\n\t\tdefault:\n\t\t\tpanic(\"unexpected measure type\")\n\t\t}\n\tdefault:\n\t\tpanic(\"unexpected aggregation type\")\n\t}\n}\n\nfunc getLabelKeys(v *View) []metricdata.LabelKey {\n\tlabelKeys := []metricdata.LabelKey{}\n\tfor _, k := range v.TagKeys {\n\t\tlabelKeys = append(labelKeys, metricdata.LabelKey{Key: k.Name()})\n\t}\n\treturn labelKeys\n}\n\nfunc viewToMetricDescriptor(v *View) *metricdata.Descriptor {\n\treturn &metricdata.Descriptor{\n\t\tName:        v.Name,\n\t\tDescription: v.Description,\n\t\tUnit:        getUnit(v.Measure.Unit()),\n\t\tType:        getType(v),\n\t\tLabelKeys:   getLabelKeys(v),\n\t}\n}\n\nfunc toLabelValues(row *Row, expectedKeys []metricdata.LabelKey) []metricdata.LabelValue {\n\tlabelValues := []metricdata.LabelValue{}\n\ttagMap := make(map[string]string)\n\tfor _, tag := range row.Tags {\n\t\ttagMap[tag.Key.Name()] = tag.Value\n\t}\n\n\tfor _, key := range expectedKeys {\n\t\tif val, ok := tagMap[key.Key]; ok {\n\t\t\tlabelValues = append(labelValues, metricdata.NewLabelValue(val))\n\t\t} else {\n\t\t\tlabelValues = append(labelValues, metricdata.LabelValue{})\n\t\t}\n\t}\n\treturn labelValues\n}\n\nfunc rowToTimeseries(v *viewInternal, row *Row, now time.Time, startTime time.Time) *metricdata.TimeSeries {\n\treturn &metricdata.TimeSeries{\n\t\tPoints:      []metricdata.Point{row.Data.toPoint(v.metricDescriptor.Type, now)},\n\t\tLabelValues: toLabelValues(row, v.metricDescriptor.LabelKeys),\n\t\tStartTime:   startTime,\n\t}\n}\n\nfunc viewToMetric(v *viewInternal, now time.Time, startTime time.Time) *metricdata.Metric {\n\tif v.metricDescriptor.Type == metricdata.TypeGaugeInt64 ||\n\t\tv.metricDescriptor.Type == metricdata.TypeGaugeFloat64 {\n\t\tstartTime = time.Time{}\n\t}\n\n\trows := v.collectedRows()\n\tif len(rows) == 0 {\n\t\treturn nil\n\t}\n\n\tts := []*metricdata.TimeSeries{}\n\tfor _, row := range rows {\n\t\tts = append(ts, rowToTimeseries(v, row, now, startTime))\n\t}\n\n\tm := &metricdata.Metric{\n\t\tDescriptor: *v.metricDescriptor,\n\t\tTimeSeries: ts,\n\t}\n\treturn m\n}\n"
  },
  {
    "path": "vendor/go.opencensus.io/stats/view/worker.go",
    "content": "// Copyright 2017, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\n\npackage view\n\nimport (\n\t\"fmt\"\n\t\"sync\"\n\t\"time\"\n\n\t\"go.opencensus.io/metric/metricdata\"\n\t\"go.opencensus.io/metric/metricproducer\"\n\t\"go.opencensus.io/stats\"\n\t\"go.opencensus.io/stats/internal\"\n\t\"go.opencensus.io/tag\"\n)\n\nfunc init() {\n\tdefaultWorker = newWorker()\n\tgo defaultWorker.start()\n\tinternal.DefaultRecorder = record\n}\n\ntype measureRef struct {\n\tmeasure string\n\tviews   map[*viewInternal]struct{}\n}\n\ntype worker struct {\n\tmeasures   map[string]*measureRef\n\tviews      map[string]*viewInternal\n\tstartTimes map[*viewInternal]time.Time\n\n\ttimer      *time.Ticker\n\tc          chan command\n\tquit, done chan bool\n\tmu         sync.RWMutex\n}\n\nvar defaultWorker *worker\n\nvar defaultReportingDuration = 10 * time.Second\n\n// Find returns a registered view associated with this name.\n// If no registered view is found, nil is returned.\nfunc Find(name string) (v *View) {\n\treq := &getViewByNameReq{\n\t\tname: name,\n\t\tc:    make(chan *getViewByNameResp),\n\t}\n\tdefaultWorker.c <- req\n\tresp := <-req.c\n\treturn resp.v\n}\n\n// Register begins collecting data for the given views.\n// Once a view is registered, it reports data to the registered exporters.\nfunc Register(views ...*View) error {\n\treq := &registerViewReq{\n\t\tviews: views,\n\t\terr:   make(chan error),\n\t}\n\tdefaultWorker.c <- req\n\treturn <-req.err\n}\n\n// Unregister the given views. Data will not longer be exported for these views\n// after Unregister returns.\n// It is not necessary to unregister from views you expect to collect for the\n// duration of your program execution.\nfunc Unregister(views ...*View) {\n\tnames := make([]string, len(views))\n\tfor i := range views {\n\t\tnames[i] = views[i].Name\n\t}\n\treq := &unregisterFromViewReq{\n\t\tviews: names,\n\t\tdone:  make(chan struct{}),\n\t}\n\tdefaultWorker.c <- req\n\t<-req.done\n}\n\n// RetrieveData gets a snapshot of the data collected for the the view registered\n// with the given name. It is intended for testing only.\nfunc RetrieveData(viewName string) ([]*Row, error) {\n\treq := &retrieveDataReq{\n\t\tnow: time.Now(),\n\t\tv:   viewName,\n\t\tc:   make(chan *retrieveDataResp),\n\t}\n\tdefaultWorker.c <- req\n\tresp := <-req.c\n\treturn resp.rows, resp.err\n}\n\nfunc record(tags *tag.Map, ms interface{}, attachments map[string]interface{}) {\n\treq := &recordReq{\n\t\ttm:          tags,\n\t\tms:          ms.([]stats.Measurement),\n\t\tattachments: attachments,\n\t\tt:           time.Now(),\n\t}\n\tdefaultWorker.c <- req\n}\n\n// SetReportingPeriod sets the interval between reporting aggregated views in\n// the program. If duration is less than or equal to zero, it enables the\n// default behavior.\n//\n// Note: each exporter makes different promises about what the lowest supported\n// duration is. For example, the Stackdriver exporter recommends a value no\n// lower than 1 minute. Consult each exporter per your needs.\nfunc SetReportingPeriod(d time.Duration) {\n\t// TODO(acetechnologist): ensure that the duration d is more than a certain\n\t// value. e.g. 1s\n\treq := &setReportingPeriodReq{\n\t\td: d,\n\t\tc: make(chan bool),\n\t}\n\tdefaultWorker.c <- req\n\t<-req.c // don't return until the timer is set to the new duration.\n}\n\nfunc newWorker() *worker {\n\treturn &worker{\n\t\tmeasures:   make(map[string]*measureRef),\n\t\tviews:      make(map[string]*viewInternal),\n\t\tstartTimes: make(map[*viewInternal]time.Time),\n\t\ttimer:      time.NewTicker(defaultReportingDuration),\n\t\tc:          make(chan command, 1024),\n\t\tquit:       make(chan bool),\n\t\tdone:       make(chan bool),\n\t}\n}\n\nfunc (w *worker) start() {\n\tprodMgr := metricproducer.GlobalManager()\n\tprodMgr.AddProducer(w)\n\n\tfor {\n\t\tselect {\n\t\tcase cmd := <-w.c:\n\t\t\tcmd.handleCommand(w)\n\t\tcase <-w.timer.C:\n\t\t\tw.reportUsage(time.Now())\n\t\tcase <-w.quit:\n\t\t\tw.timer.Stop()\n\t\t\tclose(w.c)\n\t\t\tw.done <- true\n\t\t\treturn\n\t\t}\n\t}\n}\n\nfunc (w *worker) stop() {\n\tprodMgr := metricproducer.GlobalManager()\n\tprodMgr.DeleteProducer(w)\n\n\tw.quit <- true\n\t<-w.done\n}\n\nfunc (w *worker) getMeasureRef(name string) *measureRef {\n\tif mr, ok := w.measures[name]; ok {\n\t\treturn mr\n\t}\n\tmr := &measureRef{\n\t\tmeasure: name,\n\t\tviews:   make(map[*viewInternal]struct{}),\n\t}\n\tw.measures[name] = mr\n\treturn mr\n}\n\nfunc (w *worker) tryRegisterView(v *View) (*viewInternal, error) {\n\tw.mu.Lock()\n\tdefer w.mu.Unlock()\n\tvi, err := newViewInternal(v)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif x, ok := w.views[vi.view.Name]; ok {\n\t\tif !x.view.same(vi.view) {\n\t\t\treturn nil, fmt.Errorf(\"cannot register view %q; a different view with the same name is already registered\", v.Name)\n\t\t}\n\n\t\t// the view is already registered so there is nothing to do and the\n\t\t// command is considered successful.\n\t\treturn x, nil\n\t}\n\tw.views[vi.view.Name] = vi\n\tref := w.getMeasureRef(vi.view.Measure.Name())\n\tref.views[vi] = struct{}{}\n\treturn vi, nil\n}\n\nfunc (w *worker) unregisterView(viewName string) {\n\tw.mu.Lock()\n\tdefer w.mu.Unlock()\n\tdelete(w.views, viewName)\n}\n\nfunc (w *worker) reportView(v *viewInternal, now time.Time) {\n\tif !v.isSubscribed() {\n\t\treturn\n\t}\n\trows := v.collectedRows()\n\t_, ok := w.startTimes[v]\n\tif !ok {\n\t\tw.startTimes[v] = now\n\t}\n\tviewData := &Data{\n\t\tView:  v.view,\n\t\tStart: w.startTimes[v],\n\t\tEnd:   time.Now(),\n\t\tRows:  rows,\n\t}\n\texportersMu.Lock()\n\tfor e := range exporters {\n\t\te.ExportView(viewData)\n\t}\n\texportersMu.Unlock()\n}\n\nfunc (w *worker) reportUsage(now time.Time) {\n\tw.mu.Lock()\n\tdefer w.mu.Unlock()\n\tfor _, v := range w.views {\n\t\tw.reportView(v, now)\n\t}\n}\n\nfunc (w *worker) toMetric(v *viewInternal, now time.Time) *metricdata.Metric {\n\tif !v.isSubscribed() {\n\t\treturn nil\n\t}\n\n\t_, ok := w.startTimes[v]\n\tif !ok {\n\t\tw.startTimes[v] = now\n\t}\n\n\tvar startTime time.Time\n\tif v.metricDescriptor.Type == metricdata.TypeGaugeInt64 ||\n\t\tv.metricDescriptor.Type == metricdata.TypeGaugeFloat64 {\n\t\tstartTime = time.Time{}\n\t} else {\n\t\tstartTime = w.startTimes[v]\n\t}\n\n\treturn viewToMetric(v, now, startTime)\n}\n\n// Read reads all view data and returns them as metrics.\n// It is typically invoked by metric reader to export stats in metric format.\nfunc (w *worker) Read() []*metricdata.Metric {\n\tw.mu.Lock()\n\tdefer w.mu.Unlock()\n\tnow := time.Now()\n\tmetrics := make([]*metricdata.Metric, 0, len(w.views))\n\tfor _, v := range w.views {\n\t\tmetric := w.toMetric(v, now)\n\t\tif metric != nil {\n\t\t\tmetrics = append(metrics, metric)\n\t\t}\n\t}\n\treturn metrics\n}\n"
  },
  {
    "path": "vendor/go.opencensus.io/stats/view/worker_commands.go",
    "content": "// Copyright 2017, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\n\npackage view\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"strings\"\n\t\"time\"\n\n\t\"go.opencensus.io/stats\"\n\t\"go.opencensus.io/stats/internal\"\n\t\"go.opencensus.io/tag\"\n)\n\ntype command interface {\n\thandleCommand(w *worker)\n}\n\n// getViewByNameReq is the command to get a view given its name.\ntype getViewByNameReq struct {\n\tname string\n\tc    chan *getViewByNameResp\n}\n\ntype getViewByNameResp struct {\n\tv *View\n}\n\nfunc (cmd *getViewByNameReq) handleCommand(w *worker) {\n\tv := w.views[cmd.name]\n\tif v == nil {\n\t\tcmd.c <- &getViewByNameResp{nil}\n\t\treturn\n\t}\n\tcmd.c <- &getViewByNameResp{v.view}\n}\n\n// registerViewReq is the command to register a view.\ntype registerViewReq struct {\n\tviews []*View\n\terr   chan error\n}\n\nfunc (cmd *registerViewReq) handleCommand(w *worker) {\n\tfor _, v := range cmd.views {\n\t\tif err := v.canonicalize(); err != nil {\n\t\t\tcmd.err <- err\n\t\t\treturn\n\t\t}\n\t}\n\tvar errstr []string\n\tfor _, view := range cmd.views {\n\t\tvi, err := w.tryRegisterView(view)\n\t\tif err != nil {\n\t\t\terrstr = append(errstr, fmt.Sprintf(\"%s: %v\", view.Name, err))\n\t\t\tcontinue\n\t\t}\n\t\tinternal.SubscriptionReporter(view.Measure.Name())\n\t\tvi.subscribe()\n\t}\n\tif len(errstr) > 0 {\n\t\tcmd.err <- errors.New(strings.Join(errstr, \"\\n\"))\n\t} else {\n\t\tcmd.err <- nil\n\t}\n}\n\n// unregisterFromViewReq is the command to unregister to a view. Has no\n// impact on the data collection for client that are pulling data from the\n// library.\ntype unregisterFromViewReq struct {\n\tviews []string\n\tdone  chan struct{}\n}\n\nfunc (cmd *unregisterFromViewReq) handleCommand(w *worker) {\n\tfor _, name := range cmd.views {\n\t\tvi, ok := w.views[name]\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Report pending data for this view before removing it.\n\t\tw.reportView(vi, time.Now())\n\n\t\tvi.unsubscribe()\n\t\tif !vi.isSubscribed() {\n\t\t\t// this was the last subscription and view is not collecting anymore.\n\t\t\t// The collected data can be cleared.\n\t\t\tvi.clearRows()\n\t\t}\n\t\tw.unregisterView(name)\n\t}\n\tcmd.done <- struct{}{}\n}\n\n// retrieveDataReq is the command to retrieve data for a view.\ntype retrieveDataReq struct {\n\tnow time.Time\n\tv   string\n\tc   chan *retrieveDataResp\n}\n\ntype retrieveDataResp struct {\n\trows []*Row\n\terr  error\n}\n\nfunc (cmd *retrieveDataReq) handleCommand(w *worker) {\n\tw.mu.Lock()\n\tdefer w.mu.Unlock()\n\tvi, ok := w.views[cmd.v]\n\tif !ok {\n\t\tcmd.c <- &retrieveDataResp{\n\t\t\tnil,\n\t\t\tfmt.Errorf(\"cannot retrieve data; view %q is not registered\", cmd.v),\n\t\t}\n\t\treturn\n\t}\n\n\tif !vi.isSubscribed() {\n\t\tcmd.c <- &retrieveDataResp{\n\t\t\tnil,\n\t\t\tfmt.Errorf(\"cannot retrieve data; view %q has no subscriptions or collection is not forcibly started\", cmd.v),\n\t\t}\n\t\treturn\n\t}\n\tcmd.c <- &retrieveDataResp{\n\t\tvi.collectedRows(),\n\t\tnil,\n\t}\n}\n\n// recordReq is the command to record data related to multiple measures\n// at once.\ntype recordReq struct {\n\ttm          *tag.Map\n\tms          []stats.Measurement\n\tattachments map[string]interface{}\n\tt           time.Time\n}\n\nfunc (cmd *recordReq) handleCommand(w *worker) {\n\tw.mu.Lock()\n\tdefer w.mu.Unlock()\n\tfor _, m := range cmd.ms {\n\t\tif (m == stats.Measurement{}) { // not registered\n\t\t\tcontinue\n\t\t}\n\t\tref := w.getMeasureRef(m.Measure().Name())\n\t\tfor v := range ref.views {\n\t\t\tv.addSample(cmd.tm, m.Value(), cmd.attachments, time.Now())\n\t\t}\n\t}\n}\n\n// setReportingPeriodReq is the command to modify the duration between\n// reporting the collected data to the registered clients.\ntype setReportingPeriodReq struct {\n\td time.Duration\n\tc chan bool\n}\n\nfunc (cmd *setReportingPeriodReq) handleCommand(w *worker) {\n\tw.timer.Stop()\n\tif cmd.d <= 0 {\n\t\tw.timer = time.NewTicker(defaultReportingDuration)\n\t} else {\n\t\tw.timer = time.NewTicker(cmd.d)\n\t}\n\tcmd.c <- true\n}\n"
  },
  {
    "path": "vendor/go.opencensus.io/tag/context.go",
    "content": "// Copyright 2017, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\n\npackage tag\n\nimport (\n\t\"context\"\n)\n\n// FromContext returns the tag map stored in the context.\nfunc FromContext(ctx context.Context) *Map {\n\t// The returned tag map shouldn't be mutated.\n\tts := ctx.Value(mapCtxKey)\n\tif ts == nil {\n\t\treturn nil\n\t}\n\treturn ts.(*Map)\n}\n\n// NewContext creates a new context with the given tag map.\n// To propagate a tag map to downstream methods and downstream RPCs, add a tag map\n// to the current context. NewContext will return a copy of the current context,\n// and put the tag map into the returned one.\n// If there is already a tag map in the current context, it will be replaced with m.\nfunc NewContext(ctx context.Context, m *Map) context.Context {\n\treturn context.WithValue(ctx, mapCtxKey, m)\n}\n\ntype ctxKey struct{}\n\nvar mapCtxKey = ctxKey{}\n"
  },
  {
    "path": "vendor/go.opencensus.io/tag/doc.go",
    "content": "// Copyright 2017, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\n\n/*\nPackage tag contains OpenCensus tags.\n\nTags are key-value pairs. Tags provide additional cardinality to\nthe OpenCensus instrumentation data.\n\nTags can be propagated on the wire and in the same\nprocess via context.Context. Encode and Decode should be\nused to represent tags into their binary propagation form.\n*/\npackage tag // import \"go.opencensus.io/tag\"\n"
  },
  {
    "path": "vendor/go.opencensus.io/tag/key.go",
    "content": "// Copyright 2017, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\n\npackage tag\n\n// Key represents a tag key.\ntype Key struct {\n\tname string\n}\n\n// NewKey creates or retrieves a string key identified by name.\n// Calling NewKey consequently with the same name returns the same key.\nfunc NewKey(name string) (Key, error) {\n\tif !checkKeyName(name) {\n\t\treturn Key{}, errInvalidKeyName\n\t}\n\treturn Key{name: name}, nil\n}\n\n// MustNewKey creates or retrieves a string key identified by name.\n// An invalid key name raises a panic.\nfunc MustNewKey(name string) Key {\n\tk, err := NewKey(name)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn k\n}\n\n// Name returns the name of the key.\nfunc (k Key) Name() string {\n\treturn k.name\n}\n"
  },
  {
    "path": "vendor/go.opencensus.io/tag/map.go",
    "content": "// Copyright 2017, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\n\npackage tag\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"fmt\"\n\t\"sort\"\n)\n\n// Tag is a key value pair that can be propagated on wire.\ntype Tag struct {\n\tKey   Key\n\tValue string\n}\n\ntype tagContent struct {\n\tvalue string\n\tm     metadatas\n}\n\n// Map is a map of tags. Use New to create a context containing\n// a new Map.\ntype Map struct {\n\tm map[Key]tagContent\n}\n\n// Value returns the value for the key if a value for the key exists.\nfunc (m *Map) Value(k Key) (string, bool) {\n\tif m == nil {\n\t\treturn \"\", false\n\t}\n\tv, ok := m.m[k]\n\treturn v.value, ok\n}\n\nfunc (m *Map) String() string {\n\tif m == nil {\n\t\treturn \"nil\"\n\t}\n\tkeys := make([]Key, 0, len(m.m))\n\tfor k := range m.m {\n\t\tkeys = append(keys, k)\n\t}\n\tsort.Slice(keys, func(i, j int) bool { return keys[i].Name() < keys[j].Name() })\n\n\tvar buffer bytes.Buffer\n\tbuffer.WriteString(\"{ \")\n\tfor _, k := range keys {\n\t\tbuffer.WriteString(fmt.Sprintf(\"{%v %v}\", k.name, m.m[k]))\n\t}\n\tbuffer.WriteString(\" }\")\n\treturn buffer.String()\n}\n\nfunc (m *Map) insert(k Key, v string, md metadatas) {\n\tif _, ok := m.m[k]; ok {\n\t\treturn\n\t}\n\tm.m[k] = tagContent{value: v, m: md}\n}\n\nfunc (m *Map) update(k Key, v string, md metadatas) {\n\tif _, ok := m.m[k]; ok {\n\t\tm.m[k] = tagContent{value: v, m: md}\n\t}\n}\n\nfunc (m *Map) upsert(k Key, v string, md metadatas) {\n\tm.m[k] = tagContent{value: v, m: md}\n}\n\nfunc (m *Map) delete(k Key) {\n\tdelete(m.m, k)\n}\n\nfunc newMap() *Map {\n\treturn &Map{m: make(map[Key]tagContent)}\n}\n\n// Mutator modifies a tag map.\ntype Mutator interface {\n\tMutate(t *Map) (*Map, error)\n}\n\n// Insert returns a mutator that inserts a\n// value associated with k. If k already exists in the tag map,\n// mutator doesn't update the value.\n// Metadata applies metadata to the tag. It is optional.\n// Metadatas are applied in the order in which it is provided.\n// If more than one metadata updates the same attribute then\n// the update from the last metadata prevails.\nfunc Insert(k Key, v string, mds ...Metadata) Mutator {\n\treturn &mutator{\n\t\tfn: func(m *Map) (*Map, error) {\n\t\t\tif !checkValue(v) {\n\t\t\t\treturn nil, errInvalidValue\n\t\t\t}\n\t\t\tm.insert(k, v, createMetadatas(mds...))\n\t\t\treturn m, nil\n\t\t},\n\t}\n}\n\n// Update returns a mutator that updates the\n// value of the tag associated with k with v. If k doesn't\n// exists in the tag map, the mutator doesn't insert the value.\n// Metadata applies metadata to the tag. It is optional.\n// Metadatas are applied in the order in which it is provided.\n// If more than one metadata updates the same attribute then\n// the update from the last metadata prevails.\nfunc Update(k Key, v string, mds ...Metadata) Mutator {\n\treturn &mutator{\n\t\tfn: func(m *Map) (*Map, error) {\n\t\t\tif !checkValue(v) {\n\t\t\t\treturn nil, errInvalidValue\n\t\t\t}\n\t\t\tm.update(k, v, createMetadatas(mds...))\n\t\t\treturn m, nil\n\t\t},\n\t}\n}\n\n// Upsert returns a mutator that upserts the\n// value of the tag associated with k with v. It inserts the\n// value if k doesn't exist already. It mutates the value\n// if k already exists.\n// Metadata applies metadata to the tag. It is optional.\n// Metadatas are applied in the order in which it is provided.\n// If more than one metadata updates the same attribute then\n// the update from the last metadata prevails.\nfunc Upsert(k Key, v string, mds ...Metadata) Mutator {\n\treturn &mutator{\n\t\tfn: func(m *Map) (*Map, error) {\n\t\t\tif !checkValue(v) {\n\t\t\t\treturn nil, errInvalidValue\n\t\t\t}\n\t\t\tm.upsert(k, v, createMetadatas(mds...))\n\t\t\treturn m, nil\n\t\t},\n\t}\n}\n\nfunc createMetadatas(mds ...Metadata) metadatas {\n\tvar metas metadatas\n\tif len(mds) > 0 {\n\t\tfor _, md := range mds {\n\t\t\tif md != nil {\n\t\t\t\tmd(&metas)\n\t\t\t}\n\t\t}\n\t} else {\n\t\tWithTTL(TTLUnlimitedPropagation)(&metas)\n\t}\n\treturn metas\n\n}\n\n// Delete returns a mutator that deletes\n// the value associated with k.\nfunc Delete(k Key) Mutator {\n\treturn &mutator{\n\t\tfn: func(m *Map) (*Map, error) {\n\t\t\tm.delete(k)\n\t\t\treturn m, nil\n\t\t},\n\t}\n}\n\n// New returns a new context that contains a tag map\n// originated from the incoming context and modified\n// with the provided mutators.\nfunc New(ctx context.Context, mutator ...Mutator) (context.Context, error) {\n\tm := newMap()\n\torig := FromContext(ctx)\n\tif orig != nil {\n\t\tfor k, v := range orig.m {\n\t\t\tif !checkKeyName(k.Name()) {\n\t\t\t\treturn ctx, fmt.Errorf(\"key:%q: %v\", k, errInvalidKeyName)\n\t\t\t}\n\t\t\tif !checkValue(v.value) {\n\t\t\t\treturn ctx, fmt.Errorf(\"key:%q value:%q: %v\", k.Name(), v, errInvalidValue)\n\t\t\t}\n\t\t\tm.insert(k, v.value, v.m)\n\t\t}\n\t}\n\tvar err error\n\tfor _, mod := range mutator {\n\t\tm, err = mod.Mutate(m)\n\t\tif err != nil {\n\t\t\treturn ctx, err\n\t\t}\n\t}\n\treturn NewContext(ctx, m), nil\n}\n\n// Do is similar to pprof.Do: a convenience for installing the tags\n// from the context as Go profiler labels. This allows you to\n// correlated runtime profiling with stats.\n//\n// It converts the key/values from the given map to Go profiler labels\n// and calls pprof.Do.\n//\n// Do is going to do nothing if your Go version is below 1.9.\nfunc Do(ctx context.Context, f func(ctx context.Context)) {\n\tdo(ctx, f)\n}\n\ntype mutator struct {\n\tfn func(t *Map) (*Map, error)\n}\n\nfunc (m *mutator) Mutate(t *Map) (*Map, error) {\n\treturn m.fn(t)\n}\n"
  },
  {
    "path": "vendor/go.opencensus.io/tag/map_codec.go",
    "content": "// Copyright 2017, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\n\npackage tag\n\nimport (\n\t\"encoding/binary\"\n\t\"fmt\"\n)\n\n// KeyType defines the types of keys allowed. Currently only keyTypeString is\n// supported.\ntype keyType byte\n\nconst (\n\tkeyTypeString keyType = iota\n\tkeyTypeInt64\n\tkeyTypeTrue\n\tkeyTypeFalse\n\n\ttagsVersionID = byte(0)\n)\n\ntype encoderGRPC struct {\n\tbuf               []byte\n\twriteIdx, readIdx int\n}\n\n// writeKeyString writes the fieldID '0' followed by the key string and value\n// string.\nfunc (eg *encoderGRPC) writeTagString(k, v string) {\n\teg.writeByte(byte(keyTypeString))\n\teg.writeStringWithVarintLen(k)\n\teg.writeStringWithVarintLen(v)\n}\n\nfunc (eg *encoderGRPC) writeTagUint64(k string, i uint64) {\n\teg.writeByte(byte(keyTypeInt64))\n\teg.writeStringWithVarintLen(k)\n\teg.writeUint64(i)\n}\n\nfunc (eg *encoderGRPC) writeTagTrue(k string) {\n\teg.writeByte(byte(keyTypeTrue))\n\teg.writeStringWithVarintLen(k)\n}\n\nfunc (eg *encoderGRPC) writeTagFalse(k string) {\n\teg.writeByte(byte(keyTypeFalse))\n\teg.writeStringWithVarintLen(k)\n}\n\nfunc (eg *encoderGRPC) writeBytesWithVarintLen(bytes []byte) {\n\tlength := len(bytes)\n\n\teg.growIfRequired(binary.MaxVarintLen64 + length)\n\teg.writeIdx += binary.PutUvarint(eg.buf[eg.writeIdx:], uint64(length))\n\tcopy(eg.buf[eg.writeIdx:], bytes)\n\teg.writeIdx += length\n}\n\nfunc (eg *encoderGRPC) writeStringWithVarintLen(s string) {\n\tlength := len(s)\n\n\teg.growIfRequired(binary.MaxVarintLen64 + length)\n\teg.writeIdx += binary.PutUvarint(eg.buf[eg.writeIdx:], uint64(length))\n\tcopy(eg.buf[eg.writeIdx:], s)\n\teg.writeIdx += length\n}\n\nfunc (eg *encoderGRPC) writeByte(v byte) {\n\teg.growIfRequired(1)\n\teg.buf[eg.writeIdx] = v\n\teg.writeIdx++\n}\n\nfunc (eg *encoderGRPC) writeUint32(i uint32) {\n\teg.growIfRequired(4)\n\tbinary.LittleEndian.PutUint32(eg.buf[eg.writeIdx:], i)\n\teg.writeIdx += 4\n}\n\nfunc (eg *encoderGRPC) writeUint64(i uint64) {\n\teg.growIfRequired(8)\n\tbinary.LittleEndian.PutUint64(eg.buf[eg.writeIdx:], i)\n\teg.writeIdx += 8\n}\n\nfunc (eg *encoderGRPC) readByte() byte {\n\tb := eg.buf[eg.readIdx]\n\teg.readIdx++\n\treturn b\n}\n\nfunc (eg *encoderGRPC) readUint32() uint32 {\n\ti := binary.LittleEndian.Uint32(eg.buf[eg.readIdx:])\n\teg.readIdx += 4\n\treturn i\n}\n\nfunc (eg *encoderGRPC) readUint64() uint64 {\n\ti := binary.LittleEndian.Uint64(eg.buf[eg.readIdx:])\n\teg.readIdx += 8\n\treturn i\n}\n\nfunc (eg *encoderGRPC) readBytesWithVarintLen() ([]byte, error) {\n\tif eg.readEnded() {\n\t\treturn nil, fmt.Errorf(\"unexpected end while readBytesWithVarintLen '%x' starting at idx '%v'\", eg.buf, eg.readIdx)\n\t}\n\tlength, valueStart := binary.Uvarint(eg.buf[eg.readIdx:])\n\tif valueStart <= 0 {\n\t\treturn nil, fmt.Errorf(\"unexpected end while readBytesWithVarintLen '%x' starting at idx '%v'\", eg.buf, eg.readIdx)\n\t}\n\n\tvalueStart += eg.readIdx\n\tvalueEnd := valueStart + int(length)\n\tif valueEnd > len(eg.buf) {\n\t\treturn nil, fmt.Errorf(\"malformed encoding: length:%v, upper:%v, maxLength:%v\", length, valueEnd, len(eg.buf))\n\t}\n\n\teg.readIdx = valueEnd\n\treturn eg.buf[valueStart:valueEnd], nil\n}\n\nfunc (eg *encoderGRPC) readStringWithVarintLen() (string, error) {\n\tbytes, err := eg.readBytesWithVarintLen()\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn string(bytes), nil\n}\n\nfunc (eg *encoderGRPC) growIfRequired(expected int) {\n\tif len(eg.buf)-eg.writeIdx < expected {\n\t\ttmp := make([]byte, 2*(len(eg.buf)+1)+expected)\n\t\tcopy(tmp, eg.buf)\n\t\teg.buf = tmp\n\t}\n}\n\nfunc (eg *encoderGRPC) readEnded() bool {\n\treturn eg.readIdx >= len(eg.buf)\n}\n\nfunc (eg *encoderGRPC) bytes() []byte {\n\treturn eg.buf[:eg.writeIdx]\n}\n\n// Encode encodes the tag map into a []byte. It is useful to propagate\n// the tag maps on wire in binary format.\nfunc Encode(m *Map) []byte {\n\tif m == nil {\n\t\treturn nil\n\t}\n\teg := &encoderGRPC{\n\t\tbuf: make([]byte, len(m.m)),\n\t}\n\teg.writeByte(byte(tagsVersionID))\n\tfor k, v := range m.m {\n\t\tif v.m.ttl.ttl == valueTTLUnlimitedPropagation {\n\t\t\teg.writeByte(byte(keyTypeString))\n\t\t\teg.writeStringWithVarintLen(k.name)\n\t\t\teg.writeBytesWithVarintLen([]byte(v.value))\n\t\t}\n\t}\n\treturn eg.bytes()\n}\n\n// Decode decodes the given []byte into a tag map.\nfunc Decode(bytes []byte) (*Map, error) {\n\tts := newMap()\n\terr := DecodeEach(bytes, ts.upsert)\n\tif err != nil {\n\t\t// no partial failures\n\t\treturn nil, err\n\t}\n\treturn ts, nil\n}\n\n// DecodeEach decodes the given serialized tag map, calling handler for each\n// tag key and value decoded.\nfunc DecodeEach(bytes []byte, fn func(key Key, val string, md metadatas)) error {\n\teg := &encoderGRPC{\n\t\tbuf: bytes,\n\t}\n\tif len(eg.buf) == 0 {\n\t\treturn nil\n\t}\n\n\tversion := eg.readByte()\n\tif version > tagsVersionID {\n\t\treturn fmt.Errorf(\"cannot decode: unsupported version: %q; supports only up to: %q\", version, tagsVersionID)\n\t}\n\n\tfor !eg.readEnded() {\n\t\ttyp := keyType(eg.readByte())\n\n\t\tif typ != keyTypeString {\n\t\t\treturn fmt.Errorf(\"cannot decode: invalid key type: %q\", typ)\n\t\t}\n\n\t\tk, err := eg.readBytesWithVarintLen()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tv, err := eg.readBytesWithVarintLen()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tkey, err := NewKey(string(k))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tval := string(v)\n\t\tif !checkValue(val) {\n\t\t\treturn errInvalidValue\n\t\t}\n\t\tfn(key, val, createMetadatas(WithTTL(TTLUnlimitedPropagation)))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/go.opencensus.io/tag/metadata.go",
    "content": "// Copyright 2019, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//\n\npackage tag\n\nconst (\n\t// valueTTLNoPropagation prevents tag from propagating.\n\tvalueTTLNoPropagation = 0\n\n\t// valueTTLUnlimitedPropagation allows tag to propagate without any limits on number of hops.\n\tvalueTTLUnlimitedPropagation = -1\n)\n\n// TTL is metadata that specifies number of hops a tag can propagate.\n// Details about TTL metadata is specified at https://github.com/census-instrumentation/opencensus-specs/blob/master/tags/TagMap.md#tagmetadata\ntype TTL struct {\n\tttl int\n}\n\nvar (\n\t// TTLUnlimitedPropagation is TTL metadata that allows tag to propagate without any limits on number of hops.\n\tTTLUnlimitedPropagation = TTL{ttl: valueTTLUnlimitedPropagation}\n\n\t// TTLNoPropagation is TTL metadata that prevents tag from propagating.\n\tTTLNoPropagation = TTL{ttl: valueTTLNoPropagation}\n)\n\ntype metadatas struct {\n\tttl TTL\n}\n\n// Metadata applies metadatas specified by the function.\ntype Metadata func(*metadatas)\n\n// WithTTL applies metadata with provided ttl.\nfunc WithTTL(ttl TTL) Metadata {\n\treturn func(m *metadatas) {\n\t\tm.ttl = ttl\n\t}\n}\n"
  },
  {
    "path": "vendor/go.opencensus.io/tag/profile_19.go",
    "content": "// Copyright 2018, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// +build go1.9\n\npackage tag\n\nimport (\n\t\"context\"\n\t\"runtime/pprof\"\n)\n\nfunc do(ctx context.Context, f func(ctx context.Context)) {\n\tm := FromContext(ctx)\n\tkeyvals := make([]string, 0, 2*len(m.m))\n\tfor k, v := range m.m {\n\t\tkeyvals = append(keyvals, k.Name(), v.value)\n\t}\n\tpprof.Do(ctx, pprof.Labels(keyvals...), f)\n}\n"
  },
  {
    "path": "vendor/go.opencensus.io/tag/profile_not19.go",
    "content": "// Copyright 2018, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// +build !go1.9\n\npackage tag\n\nimport \"context\"\n\nfunc do(ctx context.Context, f func(ctx context.Context)) {\n\tf(ctx)\n}\n"
  },
  {
    "path": "vendor/go.opencensus.io/tag/validate.go",
    "content": "// Copyright 2017, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage tag\n\nimport \"errors\"\n\nconst (\n\tmaxKeyLength = 255\n\n\t// valid are restricted to US-ASCII subset (range 0x20 (' ') to 0x7e ('~')).\n\tvalidKeyValueMin = 32\n\tvalidKeyValueMax = 126\n)\n\nvar (\n\terrInvalidKeyName = errors.New(\"invalid key name: only ASCII characters accepted; max length must be 255 characters\")\n\terrInvalidValue   = errors.New(\"invalid value: only ASCII characters accepted; max length must be 255 characters\")\n)\n\nfunc checkKeyName(name string) bool {\n\tif len(name) == 0 {\n\t\treturn false\n\t}\n\tif len(name) > maxKeyLength {\n\t\treturn false\n\t}\n\treturn isASCII(name)\n}\n\nfunc isASCII(s string) bool {\n\tfor _, c := range s {\n\t\tif (c < validKeyValueMin) || (c > validKeyValueMax) {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\nfunc checkValue(v string) bool {\n\tif len(v) > maxKeyLength {\n\t\treturn false\n\t}\n\treturn isASCII(v)\n}\n"
  },
  {
    "path": "vendor/go.opencensus.io/trace/basetypes.go",
    "content": "// Copyright 2017, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage trace\n\nimport (\n\t\"fmt\"\n\t\"time\"\n)\n\ntype (\n\t// TraceID is a 16-byte identifier for a set of spans.\n\tTraceID [16]byte\n\n\t// SpanID is an 8-byte identifier for a single span.\n\tSpanID [8]byte\n)\n\nfunc (t TraceID) String() string {\n\treturn fmt.Sprintf(\"%02x\", t[:])\n}\n\nfunc (s SpanID) String() string {\n\treturn fmt.Sprintf(\"%02x\", s[:])\n}\n\n// Annotation represents a text annotation with a set of attributes and a timestamp.\ntype Annotation struct {\n\tTime       time.Time\n\tMessage    string\n\tAttributes map[string]interface{}\n}\n\n// Attribute represents a key-value pair on a span, link or annotation.\n// Construct with one of: BoolAttribute, Int64Attribute, or StringAttribute.\ntype Attribute struct {\n\tkey   string\n\tvalue interface{}\n}\n\n// BoolAttribute returns a bool-valued attribute.\nfunc BoolAttribute(key string, value bool) Attribute {\n\treturn Attribute{key: key, value: value}\n}\n\n// Int64Attribute returns an int64-valued attribute.\nfunc Int64Attribute(key string, value int64) Attribute {\n\treturn Attribute{key: key, value: value}\n}\n\n// Float64Attribute returns a float64-valued attribute.\nfunc Float64Attribute(key string, value float64) Attribute {\n\treturn Attribute{key: key, value: value}\n}\n\n// StringAttribute returns a string-valued attribute.\nfunc StringAttribute(key string, value string) Attribute {\n\treturn Attribute{key: key, value: value}\n}\n\n// LinkType specifies the relationship between the span that had the link\n// added, and the linked span.\ntype LinkType int32\n\n// LinkType values.\nconst (\n\tLinkTypeUnspecified LinkType = iota // The relationship of the two spans is unknown.\n\tLinkTypeChild                       // The linked span is a child of the current span.\n\tLinkTypeParent                      // The linked span is the parent of the current span.\n)\n\n// Link represents a reference from one span to another span.\ntype Link struct {\n\tTraceID TraceID\n\tSpanID  SpanID\n\tType    LinkType\n\t// Attributes is a set of attributes on the link.\n\tAttributes map[string]interface{}\n}\n\n// MessageEventType specifies the type of message event.\ntype MessageEventType int32\n\n// MessageEventType values.\nconst (\n\tMessageEventTypeUnspecified MessageEventType = iota // Unknown event type.\n\tMessageEventTypeSent                                // Indicates a sent RPC message.\n\tMessageEventTypeRecv                                // Indicates a received RPC message.\n)\n\n// MessageEvent represents an event describing a message sent or received on the network.\ntype MessageEvent struct {\n\tTime                 time.Time\n\tEventType            MessageEventType\n\tMessageID            int64\n\tUncompressedByteSize int64\n\tCompressedByteSize   int64\n}\n\n// Status is the status of a Span.\ntype Status struct {\n\t// Code is a status code.  Zero indicates success.\n\t//\n\t// If Code will be propagated to Google APIs, it ideally should be a value from\n\t// https://github.com/googleapis/googleapis/blob/master/google/rpc/code.proto .\n\tCode    int32\n\tMessage string\n}\n"
  },
  {
    "path": "vendor/go.opencensus.io/trace/config.go",
    "content": "// Copyright 2018, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage trace\n\nimport (\n\t\"sync\"\n\n\t\"go.opencensus.io/trace/internal\"\n)\n\n// Config represents the global tracing configuration.\ntype Config struct {\n\t// DefaultSampler is the default sampler used when creating new spans.\n\tDefaultSampler Sampler\n\n\t// IDGenerator is for internal use only.\n\tIDGenerator internal.IDGenerator\n\n\t// MaxAnnotationEventsPerSpan is max number of annotation events per span\n\tMaxAnnotationEventsPerSpan int\n\n\t// MaxMessageEventsPerSpan is max number of message events per span\n\tMaxMessageEventsPerSpan int\n\n\t// MaxAnnotationEventsPerSpan is max number of attributes per span\n\tMaxAttributesPerSpan int\n\n\t// MaxLinksPerSpan is max number of links per span\n\tMaxLinksPerSpan int\n}\n\nvar configWriteMu sync.Mutex\n\nconst (\n\t// DefaultMaxAnnotationEventsPerSpan is default max number of annotation events per span\n\tDefaultMaxAnnotationEventsPerSpan = 32\n\n\t// DefaultMaxMessageEventsPerSpan is default max number of message events per span\n\tDefaultMaxMessageEventsPerSpan = 128\n\n\t// DefaultMaxAttributesPerSpan is default max number of attributes per span\n\tDefaultMaxAttributesPerSpan = 32\n\n\t// DefaultMaxLinksPerSpan is default max number of links per span\n\tDefaultMaxLinksPerSpan = 32\n)\n\n// ApplyConfig applies changes to the global tracing configuration.\n//\n// Fields not provided in the given config are going to be preserved.\nfunc ApplyConfig(cfg Config) {\n\tconfigWriteMu.Lock()\n\tdefer configWriteMu.Unlock()\n\tc := *config.Load().(*Config)\n\tif cfg.DefaultSampler != nil {\n\t\tc.DefaultSampler = cfg.DefaultSampler\n\t}\n\tif cfg.IDGenerator != nil {\n\t\tc.IDGenerator = cfg.IDGenerator\n\t}\n\tif cfg.MaxAnnotationEventsPerSpan > 0 {\n\t\tc.MaxAnnotationEventsPerSpan = cfg.MaxAnnotationEventsPerSpan\n\t}\n\tif cfg.MaxMessageEventsPerSpan > 0 {\n\t\tc.MaxMessageEventsPerSpan = cfg.MaxMessageEventsPerSpan\n\t}\n\tif cfg.MaxAttributesPerSpan > 0 {\n\t\tc.MaxAttributesPerSpan = cfg.MaxAttributesPerSpan\n\t}\n\tif cfg.MaxLinksPerSpan > 0 {\n\t\tc.MaxLinksPerSpan = cfg.MaxLinksPerSpan\n\t}\n\tconfig.Store(&c)\n}\n"
  },
  {
    "path": "vendor/go.opencensus.io/trace/doc.go",
    "content": "// Copyright 2017, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n/*\nPackage trace contains support for OpenCensus distributed tracing.\n\nThe following assumes a basic familiarity with OpenCensus concepts.\nSee http://opencensus.io\n\n\nExporting Traces\n\nTo export collected tracing data, register at least one exporter. You can use\none of the provided exporters or write your own.\n\n    trace.RegisterExporter(exporter)\n\nBy default, traces will be sampled relatively rarely. To change the sampling\nfrequency for your entire program, call ApplyConfig. Use a ProbabilitySampler\nto sample a subset of traces, or use AlwaysSample to collect a trace on every run:\n\n    trace.ApplyConfig(trace.Config{DefaultSampler: trace.AlwaysSample()})\n\nBe careful about using trace.AlwaysSample in a production application with\nsignificant traffic: a new trace will be started and exported for every request.\n\nAdding Spans to a Trace\n\nA trace consists of a tree of spans. In Go, the current span is carried in a\ncontext.Context.\n\nIt is common to want to capture all the activity of a function call in a span. For\nthis to work, the function must take a context.Context as a parameter. Add these two\nlines to the top of the function:\n\n    ctx, span := trace.StartSpan(ctx, \"example.com/Run\")\n    defer span.End()\n\nStartSpan will create a new top-level span if the context\ndoesn't contain another span, otherwise it will create a child span.\n*/\npackage trace // import \"go.opencensus.io/trace\"\n"
  },
  {
    "path": "vendor/go.opencensus.io/trace/evictedqueue.go",
    "content": "// Copyright 2019, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage trace\n\ntype evictedQueue struct {\n\tqueue        []interface{}\n\tcapacity     int\n\tdroppedCount int\n}\n\nfunc newEvictedQueue(capacity int) *evictedQueue {\n\teq := &evictedQueue{\n\t\tcapacity: capacity,\n\t\tqueue:    make([]interface{}, 0),\n\t}\n\n\treturn eq\n}\n\nfunc (eq *evictedQueue) add(value interface{}) {\n\tif len(eq.queue) == eq.capacity {\n\t\teq.queue = eq.queue[1:]\n\t\teq.droppedCount++\n\t}\n\teq.queue = append(eq.queue, value)\n}\n"
  },
  {
    "path": "vendor/go.opencensus.io/trace/export.go",
    "content": "// Copyright 2017, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage trace\n\nimport (\n\t\"sync\"\n\t\"sync/atomic\"\n\t\"time\"\n)\n\n// Exporter is a type for functions that receive sampled trace spans.\n//\n// The ExportSpan method should be safe for concurrent use and should return\n// quickly; if an Exporter takes a significant amount of time to process a\n// SpanData, that work should be done on another goroutine.\n//\n// The SpanData should not be modified, but a pointer to it can be kept.\ntype Exporter interface {\n\tExportSpan(s *SpanData)\n}\n\ntype exportersMap map[Exporter]struct{}\n\nvar (\n\texporterMu sync.Mutex\n\texporters  atomic.Value\n)\n\n// RegisterExporter adds to the list of Exporters that will receive sampled\n// trace spans.\n//\n// Binaries can register exporters, libraries shouldn't register exporters.\nfunc RegisterExporter(e Exporter) {\n\texporterMu.Lock()\n\tnew := make(exportersMap)\n\tif old, ok := exporters.Load().(exportersMap); ok {\n\t\tfor k, v := range old {\n\t\t\tnew[k] = v\n\t\t}\n\t}\n\tnew[e] = struct{}{}\n\texporters.Store(new)\n\texporterMu.Unlock()\n}\n\n// UnregisterExporter removes from the list of Exporters the Exporter that was\n// registered with the given name.\nfunc UnregisterExporter(e Exporter) {\n\texporterMu.Lock()\n\tnew := make(exportersMap)\n\tif old, ok := exporters.Load().(exportersMap); ok {\n\t\tfor k, v := range old {\n\t\t\tnew[k] = v\n\t\t}\n\t}\n\tdelete(new, e)\n\texporters.Store(new)\n\texporterMu.Unlock()\n}\n\n// SpanData contains all the information collected by a Span.\ntype SpanData struct {\n\tSpanContext\n\tParentSpanID SpanID\n\tSpanKind     int\n\tName         string\n\tStartTime    time.Time\n\t// The wall clock time of EndTime will be adjusted to always be offset\n\t// from StartTime by the duration of the span.\n\tEndTime time.Time\n\t// The values of Attributes each have type string, bool, or int64.\n\tAttributes    map[string]interface{}\n\tAnnotations   []Annotation\n\tMessageEvents []MessageEvent\n\tStatus\n\tLinks                    []Link\n\tHasRemoteParent          bool\n\tDroppedAttributeCount    int\n\tDroppedAnnotationCount   int\n\tDroppedMessageEventCount int\n\tDroppedLinkCount         int\n\n\t// ChildSpanCount holds the number of child span created for this span.\n\tChildSpanCount int\n}\n"
  },
  {
    "path": "vendor/go.opencensus.io/trace/internal/internal.go",
    "content": "// Copyright 2018, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// Package internal provides trace internals.\npackage internal\n\n// IDGenerator allows custom generators for TraceId and SpanId.\ntype IDGenerator interface {\n\tNewTraceID() [16]byte\n\tNewSpanID() [8]byte\n}\n"
  },
  {
    "path": "vendor/go.opencensus.io/trace/lrumap.go",
    "content": "// Copyright 2019, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage trace\n\nimport (\n\t\"github.com/hashicorp/golang-lru/simplelru\"\n)\n\ntype lruMap struct {\n\tsimpleLruMap *simplelru.LRU\n\tdroppedCount int\n}\n\nfunc newLruMap(size int) *lruMap {\n\tlm := &lruMap{}\n\tlm.simpleLruMap, _ = simplelru.NewLRU(size, nil)\n\treturn lm\n}\n\nfunc (lm *lruMap) add(key, value interface{}) {\n\tevicted := lm.simpleLruMap.Add(key, value)\n\tif evicted {\n\t\tlm.droppedCount++\n\t}\n}\n"
  },
  {
    "path": "vendor/go.opencensus.io/trace/propagation/propagation.go",
    "content": "// Copyright 2017, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// Package propagation implements the binary trace context format.\npackage propagation // import \"go.opencensus.io/trace/propagation\"\n\n// TODO: link to external spec document.\n\n// BinaryFormat format:\n//\n// Binary value: <version_id><version_format>\n// version_id: 1 byte representing the version id.\n//\n// For version_id = 0:\n//\n// version_format: <field><field>\n// field_format: <field_id><field_format>\n//\n// Fields:\n//\n// TraceId: (field_id = 0, len = 16, default = \"0000000000000000\") - 16-byte array representing the trace_id.\n// SpanId: (field_id = 1, len = 8, default = \"00000000\") - 8-byte array representing the span_id.\n// TraceOptions: (field_id = 2, len = 1, default = \"0\") - 1-byte array representing the trace_options.\n//\n// Fields MUST be encoded using the field id order (smaller to higher).\n//\n// Valid value example:\n//\n// {0, 0, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 1, 97,\n// 98, 99, 100, 101, 102, 103, 104, 2, 1}\n//\n// version_id = 0;\n// trace_id = {64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79}\n// span_id = {97, 98, 99, 100, 101, 102, 103, 104};\n// trace_options = {1};\n\nimport (\n\t\"net/http\"\n\n\t\"go.opencensus.io/trace\"\n)\n\n// Binary returns the binary format representation of a SpanContext.\n//\n// If sc is the zero value, Binary returns nil.\nfunc Binary(sc trace.SpanContext) []byte {\n\tif sc == (trace.SpanContext{}) {\n\t\treturn nil\n\t}\n\tvar b [29]byte\n\tcopy(b[2:18], sc.TraceID[:])\n\tb[18] = 1\n\tcopy(b[19:27], sc.SpanID[:])\n\tb[27] = 2\n\tb[28] = uint8(sc.TraceOptions)\n\treturn b[:]\n}\n\n// FromBinary returns the SpanContext represented by b.\n//\n// If b has an unsupported version ID or contains no TraceID, FromBinary\n// returns with ok==false.\nfunc FromBinary(b []byte) (sc trace.SpanContext, ok bool) {\n\tif len(b) == 0 || b[0] != 0 {\n\t\treturn trace.SpanContext{}, false\n\t}\n\tb = b[1:]\n\tif len(b) >= 17 && b[0] == 0 {\n\t\tcopy(sc.TraceID[:], b[1:17])\n\t\tb = b[17:]\n\t} else {\n\t\treturn trace.SpanContext{}, false\n\t}\n\tif len(b) >= 9 && b[0] == 1 {\n\t\tcopy(sc.SpanID[:], b[1:9])\n\t\tb = b[9:]\n\t}\n\tif len(b) >= 2 && b[0] == 2 {\n\t\tsc.TraceOptions = trace.TraceOptions(b[1])\n\t}\n\treturn sc, true\n}\n\n// HTTPFormat implementations propagate span contexts\n// in HTTP requests.\n//\n// SpanContextFromRequest extracts a span context from incoming\n// requests.\n//\n// SpanContextToRequest modifies the given request to include the given\n// span context.\ntype HTTPFormat interface {\n\tSpanContextFromRequest(req *http.Request) (sc trace.SpanContext, ok bool)\n\tSpanContextToRequest(sc trace.SpanContext, req *http.Request)\n}\n\n// TODO(jbd): Find a more representative but short name for HTTPFormat.\n"
  },
  {
    "path": "vendor/go.opencensus.io/trace/sampling.go",
    "content": "// Copyright 2017, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage trace\n\nimport (\n\t\"encoding/binary\"\n)\n\nconst defaultSamplingProbability = 1e-4\n\n// Sampler decides whether a trace should be sampled and exported.\ntype Sampler func(SamplingParameters) SamplingDecision\n\n// SamplingParameters contains the values passed to a Sampler.\ntype SamplingParameters struct {\n\tParentContext   SpanContext\n\tTraceID         TraceID\n\tSpanID          SpanID\n\tName            string\n\tHasRemoteParent bool\n}\n\n// SamplingDecision is the value returned by a Sampler.\ntype SamplingDecision struct {\n\tSample bool\n}\n\n// ProbabilitySampler returns a Sampler that samples a given fraction of traces.\n//\n// It also samples spans whose parents are sampled.\nfunc ProbabilitySampler(fraction float64) Sampler {\n\tif !(fraction >= 0) {\n\t\tfraction = 0\n\t} else if fraction >= 1 {\n\t\treturn AlwaysSample()\n\t}\n\n\ttraceIDUpperBound := uint64(fraction * (1 << 63))\n\treturn Sampler(func(p SamplingParameters) SamplingDecision {\n\t\tif p.ParentContext.IsSampled() {\n\t\t\treturn SamplingDecision{Sample: true}\n\t\t}\n\t\tx := binary.BigEndian.Uint64(p.TraceID[0:8]) >> 1\n\t\treturn SamplingDecision{Sample: x < traceIDUpperBound}\n\t})\n}\n\n// AlwaysSample returns a Sampler that samples every trace.\n// Be careful about using this sampler in a production application with\n// significant traffic: a new trace will be started and exported for every\n// request.\nfunc AlwaysSample() Sampler {\n\treturn func(p SamplingParameters) SamplingDecision {\n\t\treturn SamplingDecision{Sample: true}\n\t}\n}\n\n// NeverSample returns a Sampler that samples no traces.\nfunc NeverSample() Sampler {\n\treturn func(p SamplingParameters) SamplingDecision {\n\t\treturn SamplingDecision{Sample: false}\n\t}\n}\n"
  },
  {
    "path": "vendor/go.opencensus.io/trace/spanbucket.go",
    "content": "// Copyright 2017, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage trace\n\nimport (\n\t\"time\"\n)\n\n// samplePeriod is the minimum time between accepting spans in a single bucket.\nconst samplePeriod = time.Second\n\n// defaultLatencies contains the default latency bucket bounds.\n// TODO: consider defaults, make configurable\nvar defaultLatencies = [...]time.Duration{\n\t10 * time.Microsecond,\n\t100 * time.Microsecond,\n\ttime.Millisecond,\n\t10 * time.Millisecond,\n\t100 * time.Millisecond,\n\ttime.Second,\n\t10 * time.Second,\n\ttime.Minute,\n}\n\n// bucket is a container for a set of spans for a particular error code or latency range.\ntype bucket struct {\n\tnextTime  time.Time   // next time we can accept a span\n\tbuffer    []*SpanData // circular buffer of spans\n\tnextIndex int         // location next SpanData should be placed in buffer\n\toverflow  bool        // whether the circular buffer has wrapped around\n}\n\nfunc makeBucket(bufferSize int) bucket {\n\treturn bucket{\n\t\tbuffer: make([]*SpanData, bufferSize),\n\t}\n}\n\n// add adds a span to the bucket, if nextTime has been reached.\nfunc (b *bucket) add(s *SpanData) {\n\tif s.EndTime.Before(b.nextTime) {\n\t\treturn\n\t}\n\tif len(b.buffer) == 0 {\n\t\treturn\n\t}\n\tb.nextTime = s.EndTime.Add(samplePeriod)\n\tb.buffer[b.nextIndex] = s\n\tb.nextIndex++\n\tif b.nextIndex == len(b.buffer) {\n\t\tb.nextIndex = 0\n\t\tb.overflow = true\n\t}\n}\n\n// size returns the number of spans in the bucket.\nfunc (b *bucket) size() int {\n\tif b.overflow {\n\t\treturn len(b.buffer)\n\t}\n\treturn b.nextIndex\n}\n\n// span returns the ith span in the bucket.\nfunc (b *bucket) span(i int) *SpanData {\n\tif !b.overflow {\n\t\treturn b.buffer[i]\n\t}\n\tif i < len(b.buffer)-b.nextIndex {\n\t\treturn b.buffer[b.nextIndex+i]\n\t}\n\treturn b.buffer[b.nextIndex+i-len(b.buffer)]\n}\n\n// resize changes the size of the bucket to n, keeping up to n existing spans.\nfunc (b *bucket) resize(n int) {\n\tcur := b.size()\n\tnewBuffer := make([]*SpanData, n)\n\tif cur < n {\n\t\tfor i := 0; i < cur; i++ {\n\t\t\tnewBuffer[i] = b.span(i)\n\t\t}\n\t\tb.buffer = newBuffer\n\t\tb.nextIndex = cur\n\t\tb.overflow = false\n\t\treturn\n\t}\n\tfor i := 0; i < n; i++ {\n\t\tnewBuffer[i] = b.span(i + cur - n)\n\t}\n\tb.buffer = newBuffer\n\tb.nextIndex = 0\n\tb.overflow = true\n}\n\n// latencyBucket returns the appropriate bucket number for a given latency.\nfunc latencyBucket(latency time.Duration) int {\n\ti := 0\n\tfor i < len(defaultLatencies) && latency >= defaultLatencies[i] {\n\t\ti++\n\t}\n\treturn i\n}\n\n// latencyBucketBounds returns the lower and upper bounds for a latency bucket\n// number.\n//\n// The lower bound is inclusive, the upper bound is exclusive (except for the\n// last bucket.)\nfunc latencyBucketBounds(index int) (lower time.Duration, upper time.Duration) {\n\tif index == 0 {\n\t\treturn 0, defaultLatencies[index]\n\t}\n\tif index == len(defaultLatencies) {\n\t\treturn defaultLatencies[index-1], 1<<63 - 1\n\t}\n\treturn defaultLatencies[index-1], defaultLatencies[index]\n}\n"
  },
  {
    "path": "vendor/go.opencensus.io/trace/spanstore.go",
    "content": "// Copyright 2017, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage trace\n\nimport (\n\t\"sync\"\n\t\"time\"\n\n\t\"go.opencensus.io/internal\"\n)\n\nconst (\n\tmaxBucketSize     = 100000\n\tdefaultBucketSize = 10\n)\n\nvar (\n\tssmu       sync.RWMutex // protects spanStores\n\tspanStores = make(map[string]*spanStore)\n)\n\n// This exists purely to avoid exposing internal methods used by z-Pages externally.\ntype internalOnly struct{}\n\nfunc init() {\n\t//TODO(#412): remove\n\tinternal.Trace = &internalOnly{}\n}\n\n// ReportActiveSpans returns the active spans for the given name.\nfunc (i internalOnly) ReportActiveSpans(name string) []*SpanData {\n\ts := spanStoreForName(name)\n\tif s == nil {\n\t\treturn nil\n\t}\n\tvar out []*SpanData\n\ts.mu.Lock()\n\tdefer s.mu.Unlock()\n\tfor span := range s.active {\n\t\tout = append(out, span.makeSpanData())\n\t}\n\treturn out\n}\n\n// ReportSpansByError returns a sample of error spans.\n//\n// If code is nonzero, only spans with that status code are returned.\nfunc (i internalOnly) ReportSpansByError(name string, code int32) []*SpanData {\n\ts := spanStoreForName(name)\n\tif s == nil {\n\t\treturn nil\n\t}\n\tvar out []*SpanData\n\ts.mu.Lock()\n\tdefer s.mu.Unlock()\n\tif code != 0 {\n\t\tif b, ok := s.errors[code]; ok {\n\t\t\tfor _, sd := range b.buffer {\n\t\t\t\tif sd == nil {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tout = append(out, sd)\n\t\t\t}\n\t\t}\n\t} else {\n\t\tfor _, b := range s.errors {\n\t\t\tfor _, sd := range b.buffer {\n\t\t\t\tif sd == nil {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tout = append(out, sd)\n\t\t\t}\n\t\t}\n\t}\n\treturn out\n}\n\n// ConfigureBucketSizes sets the number of spans to keep per latency and error\n// bucket for different span names.\nfunc (i internalOnly) ConfigureBucketSizes(bcs []internal.BucketConfiguration) {\n\tfor _, bc := range bcs {\n\t\tlatencyBucketSize := bc.MaxRequestsSucceeded\n\t\tif latencyBucketSize < 0 {\n\t\t\tlatencyBucketSize = 0\n\t\t}\n\t\tif latencyBucketSize > maxBucketSize {\n\t\t\tlatencyBucketSize = maxBucketSize\n\t\t}\n\t\terrorBucketSize := bc.MaxRequestsErrors\n\t\tif errorBucketSize < 0 {\n\t\t\terrorBucketSize = 0\n\t\t}\n\t\tif errorBucketSize > maxBucketSize {\n\t\t\terrorBucketSize = maxBucketSize\n\t\t}\n\t\tspanStoreSetSize(bc.Name, latencyBucketSize, errorBucketSize)\n\t}\n}\n\n// ReportSpansPerMethod returns a summary of what spans are being stored for each span name.\nfunc (i internalOnly) ReportSpansPerMethod() map[string]internal.PerMethodSummary {\n\tout := make(map[string]internal.PerMethodSummary)\n\tssmu.RLock()\n\tdefer ssmu.RUnlock()\n\tfor name, s := range spanStores {\n\t\ts.mu.Lock()\n\t\tp := internal.PerMethodSummary{\n\t\t\tActive: len(s.active),\n\t\t}\n\t\tfor code, b := range s.errors {\n\t\t\tp.ErrorBuckets = append(p.ErrorBuckets, internal.ErrorBucketSummary{\n\t\t\t\tErrorCode: code,\n\t\t\t\tSize:      b.size(),\n\t\t\t})\n\t\t}\n\t\tfor i, b := range s.latency {\n\t\t\tmin, max := latencyBucketBounds(i)\n\t\t\tp.LatencyBuckets = append(p.LatencyBuckets, internal.LatencyBucketSummary{\n\t\t\t\tMinLatency: min,\n\t\t\t\tMaxLatency: max,\n\t\t\t\tSize:       b.size(),\n\t\t\t})\n\t\t}\n\t\ts.mu.Unlock()\n\t\tout[name] = p\n\t}\n\treturn out\n}\n\n// ReportSpansByLatency returns a sample of successful spans.\n//\n// minLatency is the minimum latency of spans to be returned.\n// maxLatency, if nonzero, is the maximum latency of spans to be returned.\nfunc (i internalOnly) ReportSpansByLatency(name string, minLatency, maxLatency time.Duration) []*SpanData {\n\ts := spanStoreForName(name)\n\tif s == nil {\n\t\treturn nil\n\t}\n\tvar out []*SpanData\n\ts.mu.Lock()\n\tdefer s.mu.Unlock()\n\tfor i, b := range s.latency {\n\t\tmin, max := latencyBucketBounds(i)\n\t\tif i+1 != len(s.latency) && max <= minLatency {\n\t\t\tcontinue\n\t\t}\n\t\tif maxLatency != 0 && maxLatency < min {\n\t\t\tcontinue\n\t\t}\n\t\tfor _, sd := range b.buffer {\n\t\t\tif sd == nil {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif minLatency != 0 || maxLatency != 0 {\n\t\t\t\td := sd.EndTime.Sub(sd.StartTime)\n\t\t\t\tif d < minLatency {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif maxLatency != 0 && d > maxLatency {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\t\t\tout = append(out, sd)\n\t\t}\n\t}\n\treturn out\n}\n\n// spanStore keeps track of spans stored for a particular span name.\n//\n// It contains all active spans; a sample of spans for failed requests,\n// categorized by error code; and a sample of spans for successful requests,\n// bucketed by latency.\ntype spanStore struct {\n\tmu                     sync.Mutex // protects everything below.\n\tactive                 map[*Span]struct{}\n\terrors                 map[int32]*bucket\n\tlatency                []bucket\n\tmaxSpansPerErrorBucket int\n}\n\n// newSpanStore creates a span store.\nfunc newSpanStore(name string, latencyBucketSize int, errorBucketSize int) *spanStore {\n\ts := &spanStore{\n\t\tactive:                 make(map[*Span]struct{}),\n\t\tlatency:                make([]bucket, len(defaultLatencies)+1),\n\t\tmaxSpansPerErrorBucket: errorBucketSize,\n\t}\n\tfor i := range s.latency {\n\t\ts.latency[i] = makeBucket(latencyBucketSize)\n\t}\n\treturn s\n}\n\n// spanStoreForName returns the spanStore for the given name.\n//\n// It returns nil if it doesn't exist.\nfunc spanStoreForName(name string) *spanStore {\n\tvar s *spanStore\n\tssmu.RLock()\n\ts, _ = spanStores[name]\n\tssmu.RUnlock()\n\treturn s\n}\n\n// spanStoreForNameCreateIfNew returns the spanStore for the given name.\n//\n// It creates it if it didn't exist.\nfunc spanStoreForNameCreateIfNew(name string) *spanStore {\n\tssmu.RLock()\n\ts, ok := spanStores[name]\n\tssmu.RUnlock()\n\tif ok {\n\t\treturn s\n\t}\n\tssmu.Lock()\n\tdefer ssmu.Unlock()\n\ts, ok = spanStores[name]\n\tif ok {\n\t\treturn s\n\t}\n\ts = newSpanStore(name, defaultBucketSize, defaultBucketSize)\n\tspanStores[name] = s\n\treturn s\n}\n\n// spanStoreSetSize resizes the spanStore for the given name.\n//\n// It creates it if it didn't exist.\nfunc spanStoreSetSize(name string, latencyBucketSize int, errorBucketSize int) {\n\tssmu.RLock()\n\ts, ok := spanStores[name]\n\tssmu.RUnlock()\n\tif ok {\n\t\ts.resize(latencyBucketSize, errorBucketSize)\n\t\treturn\n\t}\n\tssmu.Lock()\n\tdefer ssmu.Unlock()\n\ts, ok = spanStores[name]\n\tif ok {\n\t\ts.resize(latencyBucketSize, errorBucketSize)\n\t\treturn\n\t}\n\ts = newSpanStore(name, latencyBucketSize, errorBucketSize)\n\tspanStores[name] = s\n}\n\nfunc (s *spanStore) resize(latencyBucketSize int, errorBucketSize int) {\n\ts.mu.Lock()\n\tfor i := range s.latency {\n\t\ts.latency[i].resize(latencyBucketSize)\n\t}\n\tfor _, b := range s.errors {\n\t\tb.resize(errorBucketSize)\n\t}\n\ts.maxSpansPerErrorBucket = errorBucketSize\n\ts.mu.Unlock()\n}\n\n// add adds a span to the active bucket of the spanStore.\nfunc (s *spanStore) add(span *Span) {\n\ts.mu.Lock()\n\ts.active[span] = struct{}{}\n\ts.mu.Unlock()\n}\n\n// finished removes a span from the active set, and adds a corresponding\n// SpanData to a latency or error bucket.\nfunc (s *spanStore) finished(span *Span, sd *SpanData) {\n\tlatency := sd.EndTime.Sub(sd.StartTime)\n\tif latency < 0 {\n\t\tlatency = 0\n\t}\n\tcode := sd.Status.Code\n\n\ts.mu.Lock()\n\tdelete(s.active, span)\n\tif code == 0 {\n\t\ts.latency[latencyBucket(latency)].add(sd)\n\t} else {\n\t\tif s.errors == nil {\n\t\t\ts.errors = make(map[int32]*bucket)\n\t\t}\n\t\tif b := s.errors[code]; b != nil {\n\t\t\tb.add(sd)\n\t\t} else {\n\t\t\tb := makeBucket(s.maxSpansPerErrorBucket)\n\t\t\ts.errors[code] = &b\n\t\t\tb.add(sd)\n\t\t}\n\t}\n\ts.mu.Unlock()\n}\n"
  },
  {
    "path": "vendor/go.opencensus.io/trace/status_codes.go",
    "content": "// Copyright 2018, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage trace\n\n// Status codes for use with Span.SetStatus. These correspond to the status\n// codes used by gRPC defined here: https://github.com/googleapis/googleapis/blob/master/google/rpc/code.proto\nconst (\n\tStatusCodeOK                 = 0\n\tStatusCodeCancelled          = 1\n\tStatusCodeUnknown            = 2\n\tStatusCodeInvalidArgument    = 3\n\tStatusCodeDeadlineExceeded   = 4\n\tStatusCodeNotFound           = 5\n\tStatusCodeAlreadyExists      = 6\n\tStatusCodePermissionDenied   = 7\n\tStatusCodeResourceExhausted  = 8\n\tStatusCodeFailedPrecondition = 9\n\tStatusCodeAborted            = 10\n\tStatusCodeOutOfRange         = 11\n\tStatusCodeUnimplemented      = 12\n\tStatusCodeInternal           = 13\n\tStatusCodeUnavailable        = 14\n\tStatusCodeDataLoss           = 15\n\tStatusCodeUnauthenticated    = 16\n)\n"
  },
  {
    "path": "vendor/go.opencensus.io/trace/trace.go",
    "content": "// Copyright 2017, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage trace\n\nimport (\n\t\"context\"\n\tcrand \"crypto/rand\"\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"math/rand\"\n\t\"sync\"\n\t\"sync/atomic\"\n\t\"time\"\n\n\t\"go.opencensus.io/internal\"\n\t\"go.opencensus.io/trace/tracestate\"\n)\n\n// Span represents a span of a trace.  It has an associated SpanContext, and\n// stores data accumulated while the span is active.\n//\n// Ideally users should interact with Spans by calling the functions in this\n// package that take a Context parameter.\ntype Span struct {\n\t// data contains information recorded about the span.\n\t//\n\t// It will be non-nil if we are exporting the span or recording events for it.\n\t// Otherwise, data is nil, and the Span is simply a carrier for the\n\t// SpanContext, so that the trace ID is propagated.\n\tdata        *SpanData\n\tmu          sync.Mutex // protects the contents of *data (but not the pointer value.)\n\tspanContext SpanContext\n\n\t// lruAttributes are capped at configured limit. When the capacity is reached an oldest entry\n\t// is removed to create room for a new entry.\n\tlruAttributes *lruMap\n\n\t// annotations are stored in FIFO queue capped by configured limit.\n\tannotations *evictedQueue\n\n\t// messageEvents are stored in FIFO queue capped by configured limit.\n\tmessageEvents *evictedQueue\n\n\t// links are stored in FIFO queue capped by configured limit.\n\tlinks *evictedQueue\n\n\t// spanStore is the spanStore this span belongs to, if any, otherwise it is nil.\n\t*spanStore\n\tendOnce sync.Once\n\n\texecutionTracerTaskEnd func() // ends the execution tracer span\n}\n\n// IsRecordingEvents returns true if events are being recorded for this span.\n// Use this check to avoid computing expensive annotations when they will never\n// be used.\nfunc (s *Span) IsRecordingEvents() bool {\n\tif s == nil {\n\t\treturn false\n\t}\n\treturn s.data != nil\n}\n\n// TraceOptions contains options associated with a trace span.\ntype TraceOptions uint32\n\n// IsSampled returns true if the span will be exported.\nfunc (sc SpanContext) IsSampled() bool {\n\treturn sc.TraceOptions.IsSampled()\n}\n\n// setIsSampled sets the TraceOptions bit that determines whether the span will be exported.\nfunc (sc *SpanContext) setIsSampled(sampled bool) {\n\tif sampled {\n\t\tsc.TraceOptions |= 1\n\t} else {\n\t\tsc.TraceOptions &= ^TraceOptions(1)\n\t}\n}\n\n// IsSampled returns true if the span will be exported.\nfunc (t TraceOptions) IsSampled() bool {\n\treturn t&1 == 1\n}\n\n// SpanContext contains the state that must propagate across process boundaries.\n//\n// SpanContext is not an implementation of context.Context.\n// TODO: add reference to external Census docs for SpanContext.\ntype SpanContext struct {\n\tTraceID      TraceID\n\tSpanID       SpanID\n\tTraceOptions TraceOptions\n\tTracestate   *tracestate.Tracestate\n}\n\ntype contextKey struct{}\n\n// FromContext returns the Span stored in a context, or nil if there isn't one.\nfunc FromContext(ctx context.Context) *Span {\n\ts, _ := ctx.Value(contextKey{}).(*Span)\n\treturn s\n}\n\n// NewContext returns a new context with the given Span attached.\nfunc NewContext(parent context.Context, s *Span) context.Context {\n\treturn context.WithValue(parent, contextKey{}, s)\n}\n\n// All available span kinds. Span kind must be either one of these values.\nconst (\n\tSpanKindUnspecified = iota\n\tSpanKindServer\n\tSpanKindClient\n)\n\n// StartOptions contains options concerning how a span is started.\ntype StartOptions struct {\n\t// Sampler to consult for this Span. If provided, it is always consulted.\n\t//\n\t// If not provided, then the behavior differs based on whether\n\t// the parent of this Span is remote, local, or there is no parent.\n\t// In the case of a remote parent or no parent, the\n\t// default sampler (see Config) will be consulted. Otherwise,\n\t// when there is a non-remote parent, no new sampling decision will be made:\n\t// we will preserve the sampling of the parent.\n\tSampler Sampler\n\n\t// SpanKind represents the kind of a span. If none is set,\n\t// SpanKindUnspecified is used.\n\tSpanKind int\n}\n\n// StartOption apply changes to StartOptions.\ntype StartOption func(*StartOptions)\n\n// WithSpanKind makes new spans to be created with the given kind.\nfunc WithSpanKind(spanKind int) StartOption {\n\treturn func(o *StartOptions) {\n\t\to.SpanKind = spanKind\n\t}\n}\n\n// WithSampler makes new spans to be be created with a custom sampler.\n// Otherwise, the global sampler is used.\nfunc WithSampler(sampler Sampler) StartOption {\n\treturn func(o *StartOptions) {\n\t\to.Sampler = sampler\n\t}\n}\n\n// StartSpan starts a new child span of the current span in the context. If\n// there is no span in the context, creates a new trace and span.\n//\n// Returned context contains the newly created span. You can use it to\n// propagate the returned span in process.\nfunc StartSpan(ctx context.Context, name string, o ...StartOption) (context.Context, *Span) {\n\tvar opts StartOptions\n\tvar parent SpanContext\n\tif p := FromContext(ctx); p != nil {\n\t\tp.addChild()\n\t\tparent = p.spanContext\n\t}\n\tfor _, op := range o {\n\t\top(&opts)\n\t}\n\tspan := startSpanInternal(name, parent != SpanContext{}, parent, false, opts)\n\n\tctx, end := startExecutionTracerTask(ctx, name)\n\tspan.executionTracerTaskEnd = end\n\treturn NewContext(ctx, span), span\n}\n\n// StartSpanWithRemoteParent starts a new child span of the span from the given parent.\n//\n// If the incoming context contains a parent, it ignores. StartSpanWithRemoteParent is\n// preferred for cases where the parent is propagated via an incoming request.\n//\n// Returned context contains the newly created span. You can use it to\n// propagate the returned span in process.\nfunc StartSpanWithRemoteParent(ctx context.Context, name string, parent SpanContext, o ...StartOption) (context.Context, *Span) {\n\tvar opts StartOptions\n\tfor _, op := range o {\n\t\top(&opts)\n\t}\n\tspan := startSpanInternal(name, parent != SpanContext{}, parent, true, opts)\n\tctx, end := startExecutionTracerTask(ctx, name)\n\tspan.executionTracerTaskEnd = end\n\treturn NewContext(ctx, span), span\n}\n\nfunc startSpanInternal(name string, hasParent bool, parent SpanContext, remoteParent bool, o StartOptions) *Span {\n\tspan := &Span{}\n\tspan.spanContext = parent\n\n\tcfg := config.Load().(*Config)\n\n\tif !hasParent {\n\t\tspan.spanContext.TraceID = cfg.IDGenerator.NewTraceID()\n\t}\n\tspan.spanContext.SpanID = cfg.IDGenerator.NewSpanID()\n\tsampler := cfg.DefaultSampler\n\n\tif !hasParent || remoteParent || o.Sampler != nil {\n\t\t// If this span is the child of a local span and no Sampler is set in the\n\t\t// options, keep the parent's TraceOptions.\n\t\t//\n\t\t// Otherwise, consult the Sampler in the options if it is non-nil, otherwise\n\t\t// the default sampler.\n\t\tif o.Sampler != nil {\n\t\t\tsampler = o.Sampler\n\t\t}\n\t\tspan.spanContext.setIsSampled(sampler(SamplingParameters{\n\t\t\tParentContext:   parent,\n\t\t\tTraceID:         span.spanContext.TraceID,\n\t\t\tSpanID:          span.spanContext.SpanID,\n\t\t\tName:            name,\n\t\t\tHasRemoteParent: remoteParent}).Sample)\n\t}\n\n\tif !internal.LocalSpanStoreEnabled && !span.spanContext.IsSampled() {\n\t\treturn span\n\t}\n\n\tspan.data = &SpanData{\n\t\tSpanContext:     span.spanContext,\n\t\tStartTime:       time.Now(),\n\t\tSpanKind:        o.SpanKind,\n\t\tName:            name,\n\t\tHasRemoteParent: remoteParent,\n\t}\n\tspan.lruAttributes = newLruMap(cfg.MaxAttributesPerSpan)\n\tspan.annotations = newEvictedQueue(cfg.MaxAnnotationEventsPerSpan)\n\tspan.messageEvents = newEvictedQueue(cfg.MaxMessageEventsPerSpan)\n\tspan.links = newEvictedQueue(cfg.MaxLinksPerSpan)\n\n\tif hasParent {\n\t\tspan.data.ParentSpanID = parent.SpanID\n\t}\n\tif internal.LocalSpanStoreEnabled {\n\t\tvar ss *spanStore\n\t\tss = spanStoreForNameCreateIfNew(name)\n\t\tif ss != nil {\n\t\t\tspan.spanStore = ss\n\t\t\tss.add(span)\n\t\t}\n\t}\n\n\treturn span\n}\n\n// End ends the span.\nfunc (s *Span) End() {\n\tif s == nil {\n\t\treturn\n\t}\n\tif s.executionTracerTaskEnd != nil {\n\t\ts.executionTracerTaskEnd()\n\t}\n\tif !s.IsRecordingEvents() {\n\t\treturn\n\t}\n\ts.endOnce.Do(func() {\n\t\texp, _ := exporters.Load().(exportersMap)\n\t\tmustExport := s.spanContext.IsSampled() && len(exp) > 0\n\t\tif s.spanStore != nil || mustExport {\n\t\t\tsd := s.makeSpanData()\n\t\t\tsd.EndTime = internal.MonotonicEndTime(sd.StartTime)\n\t\t\tif s.spanStore != nil {\n\t\t\t\ts.spanStore.finished(s, sd)\n\t\t\t}\n\t\t\tif mustExport {\n\t\t\t\tfor e := range exp {\n\t\t\t\t\te.ExportSpan(sd)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t})\n}\n\n// makeSpanData produces a SpanData representing the current state of the Span.\n// It requires that s.data is non-nil.\nfunc (s *Span) makeSpanData() *SpanData {\n\tvar sd SpanData\n\ts.mu.Lock()\n\tsd = *s.data\n\tif s.lruAttributes.simpleLruMap.Len() > 0 {\n\t\tsd.Attributes = s.lruAttributesToAttributeMap()\n\t\tsd.DroppedAttributeCount = s.lruAttributes.droppedCount\n\t}\n\tif len(s.annotations.queue) > 0 {\n\t\tsd.Annotations = s.interfaceArrayToAnnotationArray()\n\t\tsd.DroppedAnnotationCount = s.annotations.droppedCount\n\t}\n\tif len(s.messageEvents.queue) > 0 {\n\t\tsd.MessageEvents = s.interfaceArrayToMessageEventArray()\n\t\tsd.DroppedMessageEventCount = s.messageEvents.droppedCount\n\t}\n\tif len(s.links.queue) > 0 {\n\t\tsd.Links = s.interfaceArrayToLinksArray()\n\t\tsd.DroppedLinkCount = s.links.droppedCount\n\t}\n\ts.mu.Unlock()\n\treturn &sd\n}\n\n// SpanContext returns the SpanContext of the span.\nfunc (s *Span) SpanContext() SpanContext {\n\tif s == nil {\n\t\treturn SpanContext{}\n\t}\n\treturn s.spanContext\n}\n\n// SetName sets the name of the span, if it is recording events.\nfunc (s *Span) SetName(name string) {\n\tif !s.IsRecordingEvents() {\n\t\treturn\n\t}\n\ts.mu.Lock()\n\ts.data.Name = name\n\ts.mu.Unlock()\n}\n\n// SetStatus sets the status of the span, if it is recording events.\nfunc (s *Span) SetStatus(status Status) {\n\tif !s.IsRecordingEvents() {\n\t\treturn\n\t}\n\ts.mu.Lock()\n\ts.data.Status = status\n\ts.mu.Unlock()\n}\n\nfunc (s *Span) interfaceArrayToLinksArray() []Link {\n\tlinksArr := make([]Link, 0)\n\tfor _, value := range s.links.queue {\n\t\tlinksArr = append(linksArr, value.(Link))\n\t}\n\treturn linksArr\n}\n\nfunc (s *Span) interfaceArrayToMessageEventArray() []MessageEvent {\n\tmessageEventArr := make([]MessageEvent, 0)\n\tfor _, value := range s.messageEvents.queue {\n\t\tmessageEventArr = append(messageEventArr, value.(MessageEvent))\n\t}\n\treturn messageEventArr\n}\n\nfunc (s *Span) interfaceArrayToAnnotationArray() []Annotation {\n\tannotationArr := make([]Annotation, 0)\n\tfor _, value := range s.annotations.queue {\n\t\tannotationArr = append(annotationArr, value.(Annotation))\n\t}\n\treturn annotationArr\n}\n\nfunc (s *Span) lruAttributesToAttributeMap() map[string]interface{} {\n\tattributes := make(map[string]interface{})\n\tfor _, key := range s.lruAttributes.simpleLruMap.Keys() {\n\t\tvalue, ok := s.lruAttributes.simpleLruMap.Get(key)\n\t\tif ok {\n\t\t\tkeyStr := key.(string)\n\t\t\tattributes[keyStr] = value\n\t\t}\n\t}\n\treturn attributes\n}\n\nfunc (s *Span) copyToCappedAttributes(attributes []Attribute) {\n\tfor _, a := range attributes {\n\t\ts.lruAttributes.add(a.key, a.value)\n\t}\n}\n\nfunc (s *Span) addChild() {\n\tif !s.IsRecordingEvents() {\n\t\treturn\n\t}\n\ts.mu.Lock()\n\ts.data.ChildSpanCount++\n\ts.mu.Unlock()\n}\n\n// AddAttributes sets attributes in the span.\n//\n// Existing attributes whose keys appear in the attributes parameter are overwritten.\nfunc (s *Span) AddAttributes(attributes ...Attribute) {\n\tif !s.IsRecordingEvents() {\n\t\treturn\n\t}\n\ts.mu.Lock()\n\ts.copyToCappedAttributes(attributes)\n\ts.mu.Unlock()\n}\n\n// copyAttributes copies a slice of Attributes into a map.\nfunc copyAttributes(m map[string]interface{}, attributes []Attribute) {\n\tfor _, a := range attributes {\n\t\tm[a.key] = a.value\n\t}\n}\n\nfunc (s *Span) lazyPrintfInternal(attributes []Attribute, format string, a ...interface{}) {\n\tnow := time.Now()\n\tmsg := fmt.Sprintf(format, a...)\n\tvar m map[string]interface{}\n\ts.mu.Lock()\n\tif len(attributes) != 0 {\n\t\tm = make(map[string]interface{})\n\t\tcopyAttributes(m, attributes)\n\t}\n\ts.annotations.add(Annotation{\n\t\tTime:       now,\n\t\tMessage:    msg,\n\t\tAttributes: m,\n\t})\n\ts.mu.Unlock()\n}\n\nfunc (s *Span) printStringInternal(attributes []Attribute, str string) {\n\tnow := time.Now()\n\tvar a map[string]interface{}\n\ts.mu.Lock()\n\tif len(attributes) != 0 {\n\t\ta = make(map[string]interface{})\n\t\tcopyAttributes(a, attributes)\n\t}\n\ts.annotations.add(Annotation{\n\t\tTime:       now,\n\t\tMessage:    str,\n\t\tAttributes: a,\n\t})\n\ts.mu.Unlock()\n}\n\n// Annotate adds an annotation with attributes.\n// Attributes can be nil.\nfunc (s *Span) Annotate(attributes []Attribute, str string) {\n\tif !s.IsRecordingEvents() {\n\t\treturn\n\t}\n\ts.printStringInternal(attributes, str)\n}\n\n// Annotatef adds an annotation with attributes.\nfunc (s *Span) Annotatef(attributes []Attribute, format string, a ...interface{}) {\n\tif !s.IsRecordingEvents() {\n\t\treturn\n\t}\n\ts.lazyPrintfInternal(attributes, format, a...)\n}\n\n// AddMessageSendEvent adds a message send event to the span.\n//\n// messageID is an identifier for the message, which is recommended to be\n// unique in this span and the same between the send event and the receive\n// event (this allows to identify a message between the sender and receiver).\n// For example, this could be a sequence id.\nfunc (s *Span) AddMessageSendEvent(messageID, uncompressedByteSize, compressedByteSize int64) {\n\tif !s.IsRecordingEvents() {\n\t\treturn\n\t}\n\tnow := time.Now()\n\ts.mu.Lock()\n\ts.messageEvents.add(MessageEvent{\n\t\tTime:                 now,\n\t\tEventType:            MessageEventTypeSent,\n\t\tMessageID:            messageID,\n\t\tUncompressedByteSize: uncompressedByteSize,\n\t\tCompressedByteSize:   compressedByteSize,\n\t})\n\ts.mu.Unlock()\n}\n\n// AddMessageReceiveEvent adds a message receive event to the span.\n//\n// messageID is an identifier for the message, which is recommended to be\n// unique in this span and the same between the send event and the receive\n// event (this allows to identify a message between the sender and receiver).\n// For example, this could be a sequence id.\nfunc (s *Span) AddMessageReceiveEvent(messageID, uncompressedByteSize, compressedByteSize int64) {\n\tif !s.IsRecordingEvents() {\n\t\treturn\n\t}\n\tnow := time.Now()\n\ts.mu.Lock()\n\ts.messageEvents.add(MessageEvent{\n\t\tTime:                 now,\n\t\tEventType:            MessageEventTypeRecv,\n\t\tMessageID:            messageID,\n\t\tUncompressedByteSize: uncompressedByteSize,\n\t\tCompressedByteSize:   compressedByteSize,\n\t})\n\ts.mu.Unlock()\n}\n\n// AddLink adds a link to the span.\nfunc (s *Span) AddLink(l Link) {\n\tif !s.IsRecordingEvents() {\n\t\treturn\n\t}\n\ts.mu.Lock()\n\ts.links.add(l)\n\ts.mu.Unlock()\n}\n\nfunc (s *Span) String() string {\n\tif s == nil {\n\t\treturn \"<nil>\"\n\t}\n\tif s.data == nil {\n\t\treturn fmt.Sprintf(\"span %s\", s.spanContext.SpanID)\n\t}\n\ts.mu.Lock()\n\tstr := fmt.Sprintf(\"span %s %q\", s.spanContext.SpanID, s.data.Name)\n\ts.mu.Unlock()\n\treturn str\n}\n\nvar config atomic.Value // access atomically\n\nfunc init() {\n\tgen := &defaultIDGenerator{}\n\t// initialize traceID and spanID generators.\n\tvar rngSeed int64\n\tfor _, p := range []interface{}{\n\t\t&rngSeed, &gen.traceIDAdd, &gen.nextSpanID, &gen.spanIDInc,\n\t} {\n\t\tbinary.Read(crand.Reader, binary.LittleEndian, p)\n\t}\n\tgen.traceIDRand = rand.New(rand.NewSource(rngSeed))\n\tgen.spanIDInc |= 1\n\n\tconfig.Store(&Config{\n\t\tDefaultSampler:             ProbabilitySampler(defaultSamplingProbability),\n\t\tIDGenerator:                gen,\n\t\tMaxAttributesPerSpan:       DefaultMaxAttributesPerSpan,\n\t\tMaxAnnotationEventsPerSpan: DefaultMaxAnnotationEventsPerSpan,\n\t\tMaxMessageEventsPerSpan:    DefaultMaxMessageEventsPerSpan,\n\t\tMaxLinksPerSpan:            DefaultMaxLinksPerSpan,\n\t})\n}\n\ntype defaultIDGenerator struct {\n\tsync.Mutex\n\n\t// Please keep these as the first fields\n\t// so that these 8 byte fields will be aligned on addresses\n\t// divisible by 8, on both 32-bit and 64-bit machines when\n\t// performing atomic increments and accesses.\n\t// See:\n\t// * https://github.com/census-instrumentation/opencensus-go/issues/587\n\t// * https://github.com/census-instrumentation/opencensus-go/issues/865\n\t// * https://golang.org/pkg/sync/atomic/#pkg-note-BUG\n\tnextSpanID uint64\n\tspanIDInc  uint64\n\n\ttraceIDAdd  [2]uint64\n\ttraceIDRand *rand.Rand\n}\n\n// NewSpanID returns a non-zero span ID from a randomly-chosen sequence.\nfunc (gen *defaultIDGenerator) NewSpanID() [8]byte {\n\tvar id uint64\n\tfor id == 0 {\n\t\tid = atomic.AddUint64(&gen.nextSpanID, gen.spanIDInc)\n\t}\n\tvar sid [8]byte\n\tbinary.LittleEndian.PutUint64(sid[:], id)\n\treturn sid\n}\n\n// NewTraceID returns a non-zero trace ID from a randomly-chosen sequence.\n// mu should be held while this function is called.\nfunc (gen *defaultIDGenerator) NewTraceID() [16]byte {\n\tvar tid [16]byte\n\t// Construct the trace ID from two outputs of traceIDRand, with a constant\n\t// added to each half for additional entropy.\n\tgen.Lock()\n\tbinary.LittleEndian.PutUint64(tid[0:8], gen.traceIDRand.Uint64()+gen.traceIDAdd[0])\n\tbinary.LittleEndian.PutUint64(tid[8:16], gen.traceIDRand.Uint64()+gen.traceIDAdd[1])\n\tgen.Unlock()\n\treturn tid\n}\n"
  },
  {
    "path": "vendor/go.opencensus.io/trace/trace_go11.go",
    "content": "// Copyright 2018, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// +build go1.11\n\npackage trace\n\nimport (\n\t\"context\"\n\tt \"runtime/trace\"\n)\n\nfunc startExecutionTracerTask(ctx context.Context, name string) (context.Context, func()) {\n\tif !t.IsEnabled() {\n\t\t// Avoid additional overhead if\n\t\t// runtime/trace is not enabled.\n\t\treturn ctx, func() {}\n\t}\n\tnctx, task := t.NewTask(ctx, name)\n\treturn nctx, task.End\n}\n"
  },
  {
    "path": "vendor/go.opencensus.io/trace/trace_nongo11.go",
    "content": "// Copyright 2018, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// +build !go1.11\n\npackage trace\n\nimport (\n\t\"context\"\n)\n\nfunc startExecutionTracerTask(ctx context.Context, name string) (context.Context, func()) {\n\treturn ctx, func() {}\n}\n"
  },
  {
    "path": "vendor/go.opencensus.io/trace/tracestate/tracestate.go",
    "content": "// Copyright 2018, OpenCensus Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// Package tracestate implements support for the Tracestate header of the\n// W3C TraceContext propagation format.\npackage tracestate\n\nimport (\n\t\"fmt\"\n\t\"regexp\"\n)\n\nconst (\n\tkeyMaxSize       = 256\n\tvalueMaxSize     = 256\n\tmaxKeyValuePairs = 32\n)\n\nconst (\n\tkeyWithoutVendorFormat = `[a-z][_0-9a-z\\-\\*\\/]{0,255}`\n\tkeyWithVendorFormat    = `[a-z][_0-9a-z\\-\\*\\/]{0,240}@[a-z][_0-9a-z\\-\\*\\/]{0,13}`\n\tkeyFormat              = `(` + keyWithoutVendorFormat + `)|(` + keyWithVendorFormat + `)`\n\tvalueFormat            = `[\\x20-\\x2b\\x2d-\\x3c\\x3e-\\x7e]{0,255}[\\x21-\\x2b\\x2d-\\x3c\\x3e-\\x7e]`\n)\n\nvar keyValidationRegExp = regexp.MustCompile(`^(` + keyFormat + `)$`)\nvar valueValidationRegExp = regexp.MustCompile(`^(` + valueFormat + `)$`)\n\n// Tracestate represents tracing-system specific context in a list of key-value pairs. Tracestate allows different\n// vendors propagate additional information and inter-operate with their legacy Id formats.\ntype Tracestate struct {\n\tentries []Entry\n}\n\n// Entry represents one key-value pair in a list of key-value pair of Tracestate.\ntype Entry struct {\n\t// Key is an opaque string up to 256 characters printable. It MUST begin with a lowercase letter,\n\t// and can only contain lowercase letters a-z, digits 0-9, underscores _, dashes -, asterisks *, and\n\t// forward slashes /.\n\tKey string\n\n\t// Value is an opaque string up to 256 characters printable ASCII RFC0020 characters (i.e., the\n\t// range 0x20 to 0x7E) except comma , and =.\n\tValue string\n}\n\n// Entries returns a slice of Entry.\nfunc (ts *Tracestate) Entries() []Entry {\n\tif ts == nil {\n\t\treturn nil\n\t}\n\treturn ts.entries\n}\n\nfunc (ts *Tracestate) remove(key string) *Entry {\n\tfor index, entry := range ts.entries {\n\t\tif entry.Key == key {\n\t\t\tts.entries = append(ts.entries[:index], ts.entries[index+1:]...)\n\t\t\treturn &entry\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (ts *Tracestate) add(entries []Entry) error {\n\tfor _, entry := range entries {\n\t\tts.remove(entry.Key)\n\t}\n\tif len(ts.entries)+len(entries) > maxKeyValuePairs {\n\t\treturn fmt.Errorf(\"adding %d key-value pairs to current %d pairs exceeds the limit of %d\",\n\t\t\tlen(entries), len(ts.entries), maxKeyValuePairs)\n\t}\n\tts.entries = append(entries, ts.entries...)\n\treturn nil\n}\n\nfunc isValid(entry Entry) bool {\n\treturn keyValidationRegExp.MatchString(entry.Key) &&\n\t\tvalueValidationRegExp.MatchString(entry.Value)\n}\n\nfunc containsDuplicateKey(entries ...Entry) (string, bool) {\n\tkeyMap := make(map[string]int)\n\tfor _, entry := range entries {\n\t\tif _, ok := keyMap[entry.Key]; ok {\n\t\t\treturn entry.Key, true\n\t\t}\n\t\tkeyMap[entry.Key] = 1\n\t}\n\treturn \"\", false\n}\n\nfunc areEntriesValid(entries ...Entry) (*Entry, bool) {\n\tfor _, entry := range entries {\n\t\tif !isValid(entry) {\n\t\t\treturn &entry, false\n\t\t}\n\t}\n\treturn nil, true\n}\n\n// New creates a Tracestate object from a parent and/or entries (key-value pair).\n// Entries from the parent are copied if present. The entries passed to this function\n// are inserted in front of those copied from the parent. If an entry copied from the\n// parent contains the same key as one of the entry in entries then the entry copied\n// from the parent is removed. See add func.\n//\n// An error is returned with nil Tracestate if\n//  1. one or more entry in entries is invalid.\n//  2. two or more entries in the input entries have the same key.\n//  3. the number of entries combined from the parent and the input entries exceeds maxKeyValuePairs.\n//     (duplicate entry is counted only once).\nfunc New(parent *Tracestate, entries ...Entry) (*Tracestate, error) {\n\tif parent == nil && len(entries) == 0 {\n\t\treturn nil, nil\n\t}\n\tif entry, ok := areEntriesValid(entries...); !ok {\n\t\treturn nil, fmt.Errorf(\"key-value pair {%s, %s} is invalid\", entry.Key, entry.Value)\n\t}\n\n\tif key, duplicate := containsDuplicateKey(entries...); duplicate {\n\t\treturn nil, fmt.Errorf(\"contains duplicate keys (%s)\", key)\n\t}\n\n\ttracestate := Tracestate{}\n\n\tif parent != nil && len(parent.entries) > 0 {\n\t\ttracestate.entries = append([]Entry{}, parent.entries...)\n\t}\n\n\terr := tracestate.add(entries)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &tracestate, nil\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/LICENSE",
    "content": "Copyright (c) 2009 The Go Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/PATENTS",
    "content": "Additional IP Rights Grant (Patents)\n\n\"This implementation\" means the copyrightable works distributed by\nGoogle as part of the Go project.\n\nGoogle hereby grants to You a perpetual, worldwide, non-exclusive,\nno-charge, royalty-free, irrevocable (except as stated in this section)\npatent license to make, have made, use, offer to sell, sell, import,\ntransfer and otherwise run, modify and propagate the contents of this\nimplementation of Go, where such license applies only to those patent\nclaims, both currently owned or controlled by Google and acquired in\nthe future, licensable by Google that are necessarily infringed by this\nimplementation of Go.  This grant does not include claims that would be\ninfringed only as a consequence of further modification of this\nimplementation.  If you or your agent or exclusive licensee institute or\norder or agree to the institution of patent litigation against any\nentity (including a cross-claim or counterclaim in a lawsuit) alleging\nthat this implementation of Go or any code incorporated within this\nimplementation of Go constitutes direct or contributory patent\ninfringement, or inducement of patent infringement, then any patent\nrights granted to you under this License for this implementation of Go\nshall terminate as of the date such litigation is filed.\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/bcrypt/base64.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage bcrypt\n\nimport \"encoding/base64\"\n\nconst alphabet = \"./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\"\n\nvar bcEncoding = base64.NewEncoding(alphabet)\n\nfunc base64Encode(src []byte) []byte {\n\tn := bcEncoding.EncodedLen(len(src))\n\tdst := make([]byte, n)\n\tbcEncoding.Encode(dst, src)\n\tfor dst[n-1] == '=' {\n\t\tn--\n\t}\n\treturn dst[:n]\n}\n\nfunc base64Decode(src []byte) ([]byte, error) {\n\tnumOfEquals := 4 - (len(src) % 4)\n\tfor i := 0; i < numOfEquals; i++ {\n\t\tsrc = append(src, '=')\n\t}\n\n\tdst := make([]byte, bcEncoding.DecodedLen(len(src)))\n\tn, err := bcEncoding.Decode(dst, src)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn dst[:n], nil\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/bcrypt/bcrypt.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package bcrypt implements Provos and Mazières's bcrypt adaptive hashing\n// algorithm. See http://www.usenix.org/event/usenix99/provos/provos.pdf\npackage bcrypt // import \"golang.org/x/crypto/bcrypt\"\n\n// The code is a port of Provos and Mazières's C implementation.\nimport (\n\t\"crypto/rand\"\n\t\"crypto/subtle\"\n\t\"errors\"\n\t\"fmt\"\n\t\"golang.org/x/crypto/blowfish\"\n\t\"io\"\n\t\"strconv\"\n)\n\nconst (\n\tMinCost     int = 4  // the minimum allowable cost as passed in to GenerateFromPassword\n\tMaxCost     int = 31 // the maximum allowable cost as passed in to GenerateFromPassword\n\tDefaultCost int = 10 // the cost that will actually be set if a cost below MinCost is passed into GenerateFromPassword\n)\n\n// The error returned from CompareHashAndPassword when a password and hash do\n// not match.\nvar ErrMismatchedHashAndPassword = errors.New(\"crypto/bcrypt: hashedPassword is not the hash of the given password\")\n\n// The error returned from CompareHashAndPassword when a hash is too short to\n// be a bcrypt hash.\nvar ErrHashTooShort = errors.New(\"crypto/bcrypt: hashedSecret too short to be a bcrypted password\")\n\n// The error returned from CompareHashAndPassword when a hash was created with\n// a bcrypt algorithm newer than this implementation.\ntype HashVersionTooNewError byte\n\nfunc (hv HashVersionTooNewError) Error() string {\n\treturn fmt.Sprintf(\"crypto/bcrypt: bcrypt algorithm version '%c' requested is newer than current version '%c'\", byte(hv), majorVersion)\n}\n\n// The error returned from CompareHashAndPassword when a hash starts with something other than '$'\ntype InvalidHashPrefixError byte\n\nfunc (ih InvalidHashPrefixError) Error() string {\n\treturn fmt.Sprintf(\"crypto/bcrypt: bcrypt hashes must start with '$', but hashedSecret started with '%c'\", byte(ih))\n}\n\ntype InvalidCostError int\n\nfunc (ic InvalidCostError) Error() string {\n\treturn fmt.Sprintf(\"crypto/bcrypt: cost %d is outside allowed range (%d,%d)\", int(ic), int(MinCost), int(MaxCost))\n}\n\nconst (\n\tmajorVersion       = '2'\n\tminorVersion       = 'a'\n\tmaxSaltSize        = 16\n\tmaxCryptedHashSize = 23\n\tencodedSaltSize    = 22\n\tencodedHashSize    = 31\n\tminHashSize        = 59\n)\n\n// magicCipherData is an IV for the 64 Blowfish encryption calls in\n// bcrypt(). It's the string \"OrpheanBeholderScryDoubt\" in big-endian bytes.\nvar magicCipherData = []byte{\n\t0x4f, 0x72, 0x70, 0x68,\n\t0x65, 0x61, 0x6e, 0x42,\n\t0x65, 0x68, 0x6f, 0x6c,\n\t0x64, 0x65, 0x72, 0x53,\n\t0x63, 0x72, 0x79, 0x44,\n\t0x6f, 0x75, 0x62, 0x74,\n}\n\ntype hashed struct {\n\thash  []byte\n\tsalt  []byte\n\tcost  int // allowed range is MinCost to MaxCost\n\tmajor byte\n\tminor byte\n}\n\n// GenerateFromPassword returns the bcrypt hash of the password at the given\n// cost. If the cost given is less than MinCost, the cost will be set to\n// DefaultCost, instead. Use CompareHashAndPassword, as defined in this package,\n// to compare the returned hashed password with its cleartext version.\nfunc GenerateFromPassword(password []byte, cost int) ([]byte, error) {\n\tp, err := newFromPassword(password, cost)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn p.Hash(), nil\n}\n\n// CompareHashAndPassword compares a bcrypt hashed password with its possible\n// plaintext equivalent. Returns nil on success, or an error on failure.\nfunc CompareHashAndPassword(hashedPassword, password []byte) error {\n\tp, err := newFromHash(hashedPassword)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\totherHash, err := bcrypt(password, p.cost, p.salt)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\totherP := &hashed{otherHash, p.salt, p.cost, p.major, p.minor}\n\tif subtle.ConstantTimeCompare(p.Hash(), otherP.Hash()) == 1 {\n\t\treturn nil\n\t}\n\n\treturn ErrMismatchedHashAndPassword\n}\n\n// Cost returns the hashing cost used to create the given hashed\n// password. When, in the future, the hashing cost of a password system needs\n// to be increased in order to adjust for greater computational power, this\n// function allows one to establish which passwords need to be updated.\nfunc Cost(hashedPassword []byte) (int, error) {\n\tp, err := newFromHash(hashedPassword)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn p.cost, nil\n}\n\nfunc newFromPassword(password []byte, cost int) (*hashed, error) {\n\tif cost < MinCost {\n\t\tcost = DefaultCost\n\t}\n\tp := new(hashed)\n\tp.major = majorVersion\n\tp.minor = minorVersion\n\n\terr := checkCost(cost)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tp.cost = cost\n\n\tunencodedSalt := make([]byte, maxSaltSize)\n\t_, err = io.ReadFull(rand.Reader, unencodedSalt)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tp.salt = base64Encode(unencodedSalt)\n\thash, err := bcrypt(password, p.cost, p.salt)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tp.hash = hash\n\treturn p, err\n}\n\nfunc newFromHash(hashedSecret []byte) (*hashed, error) {\n\tif len(hashedSecret) < minHashSize {\n\t\treturn nil, ErrHashTooShort\n\t}\n\tp := new(hashed)\n\tn, err := p.decodeVersion(hashedSecret)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\thashedSecret = hashedSecret[n:]\n\tn, err = p.decodeCost(hashedSecret)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\thashedSecret = hashedSecret[n:]\n\n\t// The \"+2\" is here because we'll have to append at most 2 '=' to the salt\n\t// when base64 decoding it in expensiveBlowfishSetup().\n\tp.salt = make([]byte, encodedSaltSize, encodedSaltSize+2)\n\tcopy(p.salt, hashedSecret[:encodedSaltSize])\n\n\thashedSecret = hashedSecret[encodedSaltSize:]\n\tp.hash = make([]byte, len(hashedSecret))\n\tcopy(p.hash, hashedSecret)\n\n\treturn p, nil\n}\n\nfunc bcrypt(password []byte, cost int, salt []byte) ([]byte, error) {\n\tcipherData := make([]byte, len(magicCipherData))\n\tcopy(cipherData, magicCipherData)\n\n\tc, err := expensiveBlowfishSetup(password, uint32(cost), salt)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tfor i := 0; i < 24; i += 8 {\n\t\tfor j := 0; j < 64; j++ {\n\t\t\tc.Encrypt(cipherData[i:i+8], cipherData[i:i+8])\n\t\t}\n\t}\n\n\t// Bug compatibility with C bcrypt implementations. We only encode 23 of\n\t// the 24 bytes encrypted.\n\thsh := base64Encode(cipherData[:maxCryptedHashSize])\n\treturn hsh, nil\n}\n\nfunc expensiveBlowfishSetup(key []byte, cost uint32, salt []byte) (*blowfish.Cipher, error) {\n\n\tcsalt, err := base64Decode(salt)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Bug compatibility with C bcrypt implementations. They use the trailing\n\t// NULL in the key string during expansion.\n\tckey := append(key, 0)\n\n\tc, err := blowfish.NewSaltedCipher(ckey, csalt)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar i, rounds uint64\n\trounds = 1 << cost\n\tfor i = 0; i < rounds; i++ {\n\t\tblowfish.ExpandKey(ckey, c)\n\t\tblowfish.ExpandKey(csalt, c)\n\t}\n\n\treturn c, nil\n}\n\nfunc (p *hashed) Hash() []byte {\n\tarr := make([]byte, 60)\n\tarr[0] = '$'\n\tarr[1] = p.major\n\tn := 2\n\tif p.minor != 0 {\n\t\tarr[2] = p.minor\n\t\tn = 3\n\t}\n\tarr[n] = '$'\n\tn += 1\n\tcopy(arr[n:], []byte(fmt.Sprintf(\"%02d\", p.cost)))\n\tn += 2\n\tarr[n] = '$'\n\tn += 1\n\tcopy(arr[n:], p.salt)\n\tn += encodedSaltSize\n\tcopy(arr[n:], p.hash)\n\tn += encodedHashSize\n\treturn arr[:n]\n}\n\nfunc (p *hashed) decodeVersion(sbytes []byte) (int, error) {\n\tif sbytes[0] != '$' {\n\t\treturn -1, InvalidHashPrefixError(sbytes[0])\n\t}\n\tif sbytes[1] > majorVersion {\n\t\treturn -1, HashVersionTooNewError(sbytes[1])\n\t}\n\tp.major = sbytes[1]\n\tn := 3\n\tif sbytes[2] != '$' {\n\t\tp.minor = sbytes[2]\n\t\tn++\n\t}\n\treturn n, nil\n}\n\n// sbytes should begin where decodeVersion left off.\nfunc (p *hashed) decodeCost(sbytes []byte) (int, error) {\n\tcost, err := strconv.Atoi(string(sbytes[0:2]))\n\tif err != nil {\n\t\treturn -1, err\n\t}\n\terr = checkCost(cost)\n\tif err != nil {\n\t\treturn -1, err\n\t}\n\tp.cost = cost\n\treturn 3, nil\n}\n\nfunc (p *hashed) String() string {\n\treturn fmt.Sprintf(\"&{hash: %#v, salt: %#v, cost: %d, major: %c, minor: %c}\", string(p.hash), p.salt, p.cost, p.major, p.minor)\n}\n\nfunc checkCost(cost int) error {\n\tif cost < MinCost || cost > MaxCost {\n\t\treturn InvalidCostError(cost)\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/blowfish/block.go",
    "content": "// Copyright 2010 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage blowfish\n\n// getNextWord returns the next big-endian uint32 value from the byte slice\n// at the given position in a circular manner, updating the position.\nfunc getNextWord(b []byte, pos *int) uint32 {\n\tvar w uint32\n\tj := *pos\n\tfor i := 0; i < 4; i++ {\n\t\tw = w<<8 | uint32(b[j])\n\t\tj++\n\t\tif j >= len(b) {\n\t\t\tj = 0\n\t\t}\n\t}\n\t*pos = j\n\treturn w\n}\n\n// ExpandKey performs a key expansion on the given *Cipher. Specifically, it\n// performs the Blowfish algorithm's key schedule which sets up the *Cipher's\n// pi and substitution tables for calls to Encrypt. This is used, primarily,\n// by the bcrypt package to reuse the Blowfish key schedule during its\n// set up. It's unlikely that you need to use this directly.\nfunc ExpandKey(key []byte, c *Cipher) {\n\tj := 0\n\tfor i := 0; i < 18; i++ {\n\t\t// Using inlined getNextWord for performance.\n\t\tvar d uint32\n\t\tfor k := 0; k < 4; k++ {\n\t\t\td = d<<8 | uint32(key[j])\n\t\t\tj++\n\t\t\tif j >= len(key) {\n\t\t\t\tj = 0\n\t\t\t}\n\t\t}\n\t\tc.p[i] ^= d\n\t}\n\n\tvar l, r uint32\n\tfor i := 0; i < 18; i += 2 {\n\t\tl, r = encryptBlock(l, r, c)\n\t\tc.p[i], c.p[i+1] = l, r\n\t}\n\n\tfor i := 0; i < 256; i += 2 {\n\t\tl, r = encryptBlock(l, r, c)\n\t\tc.s0[i], c.s0[i+1] = l, r\n\t}\n\tfor i := 0; i < 256; i += 2 {\n\t\tl, r = encryptBlock(l, r, c)\n\t\tc.s1[i], c.s1[i+1] = l, r\n\t}\n\tfor i := 0; i < 256; i += 2 {\n\t\tl, r = encryptBlock(l, r, c)\n\t\tc.s2[i], c.s2[i+1] = l, r\n\t}\n\tfor i := 0; i < 256; i += 2 {\n\t\tl, r = encryptBlock(l, r, c)\n\t\tc.s3[i], c.s3[i+1] = l, r\n\t}\n}\n\n// This is similar to ExpandKey, but folds the salt during the key\n// schedule. While ExpandKey is essentially expandKeyWithSalt with an all-zero\n// salt passed in, reusing ExpandKey turns out to be a place of inefficiency\n// and specializing it here is useful.\nfunc expandKeyWithSalt(key []byte, salt []byte, c *Cipher) {\n\tj := 0\n\tfor i := 0; i < 18; i++ {\n\t\tc.p[i] ^= getNextWord(key, &j)\n\t}\n\n\tj = 0\n\tvar l, r uint32\n\tfor i := 0; i < 18; i += 2 {\n\t\tl ^= getNextWord(salt, &j)\n\t\tr ^= getNextWord(salt, &j)\n\t\tl, r = encryptBlock(l, r, c)\n\t\tc.p[i], c.p[i+1] = l, r\n\t}\n\n\tfor i := 0; i < 256; i += 2 {\n\t\tl ^= getNextWord(salt, &j)\n\t\tr ^= getNextWord(salt, &j)\n\t\tl, r = encryptBlock(l, r, c)\n\t\tc.s0[i], c.s0[i+1] = l, r\n\t}\n\n\tfor i := 0; i < 256; i += 2 {\n\t\tl ^= getNextWord(salt, &j)\n\t\tr ^= getNextWord(salt, &j)\n\t\tl, r = encryptBlock(l, r, c)\n\t\tc.s1[i], c.s1[i+1] = l, r\n\t}\n\n\tfor i := 0; i < 256; i += 2 {\n\t\tl ^= getNextWord(salt, &j)\n\t\tr ^= getNextWord(salt, &j)\n\t\tl, r = encryptBlock(l, r, c)\n\t\tc.s2[i], c.s2[i+1] = l, r\n\t}\n\n\tfor i := 0; i < 256; i += 2 {\n\t\tl ^= getNextWord(salt, &j)\n\t\tr ^= getNextWord(salt, &j)\n\t\tl, r = encryptBlock(l, r, c)\n\t\tc.s3[i], c.s3[i+1] = l, r\n\t}\n}\n\nfunc encryptBlock(l, r uint32, c *Cipher) (uint32, uint32) {\n\txl, xr := l, r\n\txl ^= c.p[0]\n\txr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[1]\n\txl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[2]\n\txr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[3]\n\txl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[4]\n\txr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[5]\n\txl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[6]\n\txr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[7]\n\txl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[8]\n\txr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[9]\n\txl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[10]\n\txr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[11]\n\txl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[12]\n\txr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[13]\n\txl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[14]\n\txr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[15]\n\txl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[16]\n\txr ^= c.p[17]\n\treturn xr, xl\n}\n\nfunc decryptBlock(l, r uint32, c *Cipher) (uint32, uint32) {\n\txl, xr := l, r\n\txl ^= c.p[17]\n\txr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[16]\n\txl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[15]\n\txr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[14]\n\txl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[13]\n\txr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[12]\n\txl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[11]\n\txr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[10]\n\txl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[9]\n\txr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[8]\n\txl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[7]\n\txr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[6]\n\txl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[5]\n\txr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[4]\n\txl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[3]\n\txr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[2]\n\txl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[1]\n\txr ^= c.p[0]\n\treturn xr, xl\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/blowfish/cipher.go",
    "content": "// Copyright 2010 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package blowfish implements Bruce Schneier's Blowfish encryption algorithm.\npackage blowfish // import \"golang.org/x/crypto/blowfish\"\n\n// The code is a port of Bruce Schneier's C implementation.\n// See http://www.schneier.com/blowfish.html.\n\nimport \"strconv\"\n\n// The Blowfish block size in bytes.\nconst BlockSize = 8\n\n// A Cipher is an instance of Blowfish encryption using a particular key.\ntype Cipher struct {\n\tp              [18]uint32\n\ts0, s1, s2, s3 [256]uint32\n}\n\ntype KeySizeError int\n\nfunc (k KeySizeError) Error() string {\n\treturn \"crypto/blowfish: invalid key size \" + strconv.Itoa(int(k))\n}\n\n// NewCipher creates and returns a Cipher.\n// The key argument should be the Blowfish key, from 1 to 56 bytes.\nfunc NewCipher(key []byte) (*Cipher, error) {\n\tvar result Cipher\n\tif k := len(key); k < 1 || k > 56 {\n\t\treturn nil, KeySizeError(k)\n\t}\n\tinitCipher(&result)\n\tExpandKey(key, &result)\n\treturn &result, nil\n}\n\n// NewSaltedCipher creates a returns a Cipher that folds a salt into its key\n// schedule. For most purposes, NewCipher, instead of NewSaltedCipher, is\n// sufficient and desirable. For bcrypt compatiblity, the key can be over 56\n// bytes.\nfunc NewSaltedCipher(key, salt []byte) (*Cipher, error) {\n\tif len(salt) == 0 {\n\t\treturn NewCipher(key)\n\t}\n\tvar result Cipher\n\tif k := len(key); k < 1 {\n\t\treturn nil, KeySizeError(k)\n\t}\n\tinitCipher(&result)\n\texpandKeyWithSalt(key, salt, &result)\n\treturn &result, nil\n}\n\n// BlockSize returns the Blowfish block size, 8 bytes.\n// It is necessary to satisfy the Block interface in the\n// package \"crypto/cipher\".\nfunc (c *Cipher) BlockSize() int { return BlockSize }\n\n// Encrypt encrypts the 8-byte buffer src using the key k\n// and stores the result in dst.\n// Note that for amounts of data larger than a block,\n// it is not safe to just call Encrypt on successive blocks;\n// instead, use an encryption mode like CBC (see crypto/cipher/cbc.go).\nfunc (c *Cipher) Encrypt(dst, src []byte) {\n\tl := uint32(src[0])<<24 | uint32(src[1])<<16 | uint32(src[2])<<8 | uint32(src[3])\n\tr := uint32(src[4])<<24 | uint32(src[5])<<16 | uint32(src[6])<<8 | uint32(src[7])\n\tl, r = encryptBlock(l, r, c)\n\tdst[0], dst[1], dst[2], dst[3] = byte(l>>24), byte(l>>16), byte(l>>8), byte(l)\n\tdst[4], dst[5], dst[6], dst[7] = byte(r>>24), byte(r>>16), byte(r>>8), byte(r)\n}\n\n// Decrypt decrypts the 8-byte buffer src using the key k\n// and stores the result in dst.\nfunc (c *Cipher) Decrypt(dst, src []byte) {\n\tl := uint32(src[0])<<24 | uint32(src[1])<<16 | uint32(src[2])<<8 | uint32(src[3])\n\tr := uint32(src[4])<<24 | uint32(src[5])<<16 | uint32(src[6])<<8 | uint32(src[7])\n\tl, r = decryptBlock(l, r, c)\n\tdst[0], dst[1], dst[2], dst[3] = byte(l>>24), byte(l>>16), byte(l>>8), byte(l)\n\tdst[4], dst[5], dst[6], dst[7] = byte(r>>24), byte(r>>16), byte(r>>8), byte(r)\n}\n\nfunc initCipher(c *Cipher) {\n\tcopy(c.p[0:], p[0:])\n\tcopy(c.s0[0:], s0[0:])\n\tcopy(c.s1[0:], s1[0:])\n\tcopy(c.s2[0:], s2[0:])\n\tcopy(c.s3[0:], s3[0:])\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/blowfish/const.go",
    "content": "// Copyright 2010 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// The startup permutation array and substitution boxes.\n// They are the hexadecimal digits of PI; see:\n// http://www.schneier.com/code/constants.txt.\n\npackage blowfish\n\nvar s0 = [256]uint32{\n\t0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7, 0xb8e1afed, 0x6a267e96,\n\t0xba7c9045, 0xf12c7f99, 0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16,\n\t0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e, 0x0d95748f, 0x728eb658,\n\t0x718bcd58, 0x82154aee, 0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013,\n\t0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef, 0x8e79dcb0, 0x603a180e,\n\t0x6c9e0e8b, 0xb01e8a3e, 0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60,\n\t0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440, 0x55ca396a, 0x2aab10b6,\n\t0xb4cc5c34, 0x1141e8ce, 0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a,\n\t0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e, 0xafd6ba33, 0x6c24cf5c,\n\t0x7a325381, 0x28958677, 0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193,\n\t0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032, 0xef845d5d, 0xe98575b1,\n\t0xdc262302, 0xeb651b88, 0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239,\n\t0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e, 0x21c66842, 0xf6e96c9a,\n\t0x670c9c61, 0xabd388f0, 0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3,\n\t0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98, 0xa1f1651d, 0x39af0176,\n\t0x66ca593e, 0x82430e88, 0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe,\n\t0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6, 0x4ed3aa62, 0x363f7706,\n\t0x1bfedf72, 0x429b023d, 0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b,\n\t0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7, 0xe3fe501a, 0xb6794c3b,\n\t0x976ce0bd, 0x04c006ba, 0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463,\n\t0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f, 0x6dfc511f, 0x9b30952c,\n\t0xcc814544, 0xaf5ebd09, 0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3,\n\t0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb, 0x5579c0bd, 0x1a60320a,\n\t0xd6a100c6, 0x402c7279, 0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8,\n\t0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab, 0x323db5fa, 0xfd238760,\n\t0x53317b48, 0x3e00df82, 0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, 0xdf1769db,\n\t0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573, 0x695b27b0, 0xbbca58c8,\n\t0xe1ffa35d, 0xb8f011a0, 0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b,\n\t0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790, 0xe1ddf2da, 0xa4cb7e33,\n\t0x62fb1341, 0xcee4c6e8, 0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4,\n\t0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0, 0xd08ed1d0, 0xafc725e0,\n\t0x8e3c5b2f, 0x8e7594b7, 0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c,\n\t0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad, 0x2f2f2218, 0xbe0e1777,\n\t0xea752dfe, 0x8b021fa1, 0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299,\n\t0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9, 0x165fa266, 0x80957705,\n\t0x93cc7314, 0x211a1477, 0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf,\n\t0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49, 0x00250e2d, 0x2071b35e,\n\t0x226800bb, 0x57b8e0af, 0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa,\n\t0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5, 0x83260376, 0x6295cfa9,\n\t0x11c81968, 0x4e734a41, 0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915,\n\t0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400, 0x08ba6fb5, 0x571be91f,\n\t0xf296ec6b, 0x2a0dd915, 0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664,\n\t0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a,\n}\n\nvar s1 = [256]uint32{\n\t0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623, 0xad6ea6b0, 0x49a7df7d,\n\t0x9cee60b8, 0x8fedb266, 0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1,\n\t0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e, 0x3f54989a, 0x5b429d65,\n\t0x6b8fe4d6, 0x99f73fd6, 0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1,\n\t0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e, 0x09686b3f, 0x3ebaefc9,\n\t0x3c971814, 0x6b6a70a1, 0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737,\n\t0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8, 0xb03ada37, 0xf0500c0d,\n\t0xf01c1f04, 0x0200b3ff, 0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd,\n\t0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701, 0x3ae5e581, 0x37c2dadc,\n\t0xc8b57634, 0x9af3dda7, 0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41,\n\t0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331, 0x4e548b38, 0x4f6db908,\n\t0x6f420d03, 0xf60a04bf, 0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af,\n\t0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e, 0x5512721f, 0x2e6b7124,\n\t0x501adde6, 0x9f84cd87, 0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c,\n\t0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2, 0xef1c1847, 0x3215d908,\n\t0xdd433b37, 0x24c2ba16, 0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd,\n\t0x71dff89e, 0x10314e55, 0x81ac77d6, 0x5f11199b, 0x043556f1, 0xd7a3c76b,\n\t0x3c11183b, 0x5924a509, 0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e,\n\t0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3, 0x771fe71c, 0x4e3d06fa,\n\t0x2965dcb9, 0x99e71d0f, 0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a,\n\t0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4, 0xf2f74ea7, 0x361d2b3d,\n\t0x1939260f, 0x19c27960, 0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66,\n\t0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x018cff28, 0xc332ddef, 0xbe6c5aa5,\n\t0x65582185, 0x68ab9802, 0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84,\n\t0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510, 0x13cca830, 0xeb61bd96,\n\t0x0334fe1e, 0xaa0363cf, 0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14,\n\t0xeecc86bc, 0x60622ca7, 0x9cab5cab, 0xb2f3846e, 0x648b1eaf, 0x19bdf0ca,\n\t0xa02369b9, 0x655abb50, 0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7,\n\t0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8, 0xf837889a, 0x97e32d77,\n\t0x11ed935f, 0x16681281, 0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99,\n\t0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696, 0xcdb30aeb, 0x532e3054,\n\t0x8fd948e4, 0x6dbc3128, 0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73,\n\t0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0, 0x45eee2b6, 0xa3aaabea,\n\t0xdb6c4f15, 0xfacb4fd0, 0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105,\n\t0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250, 0xcf62a1f2, 0x5b8d2646,\n\t0xfc8883a0, 0xc1c7b6a3, 0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285,\n\t0x095bbf00, 0xad19489d, 0x1462b174, 0x23820e00, 0x58428d2a, 0x0c55f5ea,\n\t0x1dadf43e, 0x233f7061, 0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb,\n\t0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e, 0xa6078084, 0x19f8509e,\n\t0xe8efd855, 0x61d99735, 0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc,\n\t0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9, 0xdb73dbd3, 0x105588cd,\n\t0x675fda79, 0xe3674340, 0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20,\n\t0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7,\n}\n\nvar s2 = [256]uint32{\n\t0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934, 0x411520f7, 0x7602d4f7,\n\t0xbcf46b2e, 0xd4a20068, 0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af,\n\t0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840, 0x4d95fc1d, 0x96b591af,\n\t0x70f4ddd3, 0x66a02f45, 0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, 0x31cb8504,\n\t0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a, 0x28507825, 0x530429f4,\n\t0x0a2c86da, 0xe9b66dfb, 0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee,\n\t0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6, 0xaace1e7c, 0xd3375fec,\n\t0xce78a399, 0x406b2a42, 0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b,\n\t0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2, 0x3a6efa74, 0xdd5b4332,\n\t0x6841e7f7, 0xca7820fb, 0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527,\n\t0x55533a3a, 0x20838d87, 0xfe6ba9b7, 0xd096954b, 0x55a867bc, 0xa1159a58,\n\t0xcca92963, 0x99e1db33, 0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c,\n\t0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3, 0x95c11548, 0xe4c66d22,\n\t0x48c1133f, 0xc70f86dc, 0x07f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17,\n\t0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564, 0x257b7834, 0x602a9c60,\n\t0xdff8e8a3, 0x1f636c1b, 0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115,\n\t0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922, 0x85b2a20e, 0xe6ba0d99,\n\t0xde720c8c, 0x2da2f728, 0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0,\n\t0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e, 0x0a476341, 0x992eff74,\n\t0x3a6f6eab, 0xf4f8fd37, 0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d,\n\t0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804, 0xf1290dc7, 0xcc00ffa3,\n\t0xb5390f92, 0x690fed0b, 0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3,\n\t0xbb132f88, 0x515bad24, 0x7b9479bf, 0x763bd6eb, 0x37392eb3, 0xcc115979,\n\t0x8026e297, 0xf42e312d, 0x6842ada7, 0xc66a2b3b, 0x12754ccc, 0x782ef11c,\n\t0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350, 0x1a6b1018, 0x11caedfa,\n\t0x3d25bdd8, 0xe2e1c3c9, 0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a,\n\t0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe, 0x9dbc8057, 0xf0f7c086,\n\t0x60787bf8, 0x6003604d, 0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc,\n\t0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f, 0x77a057be, 0xbde8ae24,\n\t0x55464299, 0xbf582e61, 0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2,\n\t0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9b9, 0x7aeb2661, 0x8b1ddf84,\n\t0x846a0e79, 0x915f95e2, 0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c,\n\t0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e, 0xb77f19b6, 0xe0a9dc09,\n\t0x662d09a1, 0xc4324633, 0xe85a1f02, 0x09f0be8c, 0x4a99a025, 0x1d6efe10,\n\t0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169, 0xdcb7da83, 0x573906fe,\n\t0xa1e2ce9b, 0x4fcd7f52, 0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027,\n\t0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5, 0xf0177a28, 0xc0f586e0,\n\t0x006058aa, 0x30dc7d62, 0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634,\n\t0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76, 0x6f05e409, 0x4b7c0188,\n\t0x39720a3d, 0x7c927c24, 0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc,\n\t0xed545578, 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4, 0x1e50ef5e, 0xb161e6f8,\n\t0xa28514d9, 0x6c51133c, 0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837,\n\t0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0,\n}\n\nvar s3 = [256]uint32{\n\t0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b, 0x5cb0679e, 0x4fa33742,\n\t0xd3822740, 0x99bc9bbe, 0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b,\n\t0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4, 0x5748ab2f, 0xbc946e79,\n\t0xc6a376d2, 0x6549c2c8, 0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6,\n\t0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304, 0xa1fad5f0, 0x6a2d519a,\n\t0x63ef8ce2, 0x9a86ee22, 0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4,\n\t0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6, 0x2826a2f9, 0xa73a3ae1,\n\t0x4ba99586, 0xef5562e9, 0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59,\n\t0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593, 0xe990fd5a, 0x9e34d797,\n\t0x2cf0b7d9, 0x022b8b51, 0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28,\n\t0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c, 0xe029ac71, 0xe019a5e6,\n\t0x47b0acfd, 0xed93fa9b, 0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28,\n\t0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c, 0x15056dd4, 0x88f46dba,\n\t0x03a16125, 0x0564f0bd, 0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a,\n\t0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319, 0x7533d928, 0xb155fdf5,\n\t0x03563482, 0x8aba3cbb, 0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f,\n\t0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991, 0xea7a90c2, 0xfb3e7bce,\n\t0x5121ce64, 0x774fbe32, 0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680,\n\t0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166, 0xb39a460a, 0x6445c0dd,\n\t0x586cdecf, 0x1c20c8ae, 0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb,\n\t0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5, 0x72eacea8, 0xfa6484bb,\n\t0x8d6612ae, 0xbf3c6f47, 0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370,\n\t0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d, 0x4040cb08, 0x4eb4e2cc,\n\t0x34d2466a, 0x0115af84, 0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048,\n\t0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8, 0x611560b1, 0xe7933fdc,\n\t0xbb3a792b, 0x344525bd, 0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9,\n\t0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7, 0x1a908749, 0xd44fbd9a,\n\t0xd0dadecb, 0xd50ada38, 0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f,\n\t0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c, 0xbf97222c, 0x15e6fc2a,\n\t0x0f91fc71, 0x9b941525, 0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1,\n\t0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442, 0xe0ec6e0e, 0x1698db3b,\n\t0x4c98a0be, 0x3278e964, 0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e,\n\t0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8, 0xdf359f8d, 0x9b992f2e,\n\t0xe60b6f47, 0x0fe3f11d, 0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f,\n\t0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299, 0xf523f357, 0xa6327623,\n\t0x93a83531, 0x56cccd02, 0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc,\n\t0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614, 0xe6c6c7bd, 0x327a140a,\n\t0x45e1d006, 0xc3f27b9a, 0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6,\n\t0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b, 0x53113ec0, 0x1640e3d3,\n\t0x38abbd60, 0x2547adf0, 0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060,\n\t0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e, 0x1948c25c, 0x02fb8a8c,\n\t0x01c36ae4, 0xd6ebe1f9, 0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f,\n\t0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6,\n}\n\nvar p = [18]uint32{\n\t0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, 0xa4093822, 0x299f31d0,\n\t0x082efa98, 0xec4e6c89, 0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c,\n\t0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917, 0x9216d5d9, 0x8979fb1b,\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/cast5/cast5.go",
    "content": "// Copyright 2010 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package cast5 implements CAST5, as defined in RFC 2144. CAST5 is a common\n// OpenPGP cipher.\npackage cast5 // import \"golang.org/x/crypto/cast5\"\n\nimport \"errors\"\n\nconst BlockSize = 8\nconst KeySize = 16\n\ntype Cipher struct {\n\tmasking [16]uint32\n\trotate  [16]uint8\n}\n\nfunc NewCipher(key []byte) (c *Cipher, err error) {\n\tif len(key) != KeySize {\n\t\treturn nil, errors.New(\"CAST5: keys must be 16 bytes\")\n\t}\n\n\tc = new(Cipher)\n\tc.keySchedule(key)\n\treturn\n}\n\nfunc (c *Cipher) BlockSize() int {\n\treturn BlockSize\n}\n\nfunc (c *Cipher) Encrypt(dst, src []byte) {\n\tl := uint32(src[0])<<24 | uint32(src[1])<<16 | uint32(src[2])<<8 | uint32(src[3])\n\tr := uint32(src[4])<<24 | uint32(src[5])<<16 | uint32(src[6])<<8 | uint32(src[7])\n\n\tl, r = r, l^f1(r, c.masking[0], c.rotate[0])\n\tl, r = r, l^f2(r, c.masking[1], c.rotate[1])\n\tl, r = r, l^f3(r, c.masking[2], c.rotate[2])\n\tl, r = r, l^f1(r, c.masking[3], c.rotate[3])\n\n\tl, r = r, l^f2(r, c.masking[4], c.rotate[4])\n\tl, r = r, l^f3(r, c.masking[5], c.rotate[5])\n\tl, r = r, l^f1(r, c.masking[6], c.rotate[6])\n\tl, r = r, l^f2(r, c.masking[7], c.rotate[7])\n\n\tl, r = r, l^f3(r, c.masking[8], c.rotate[8])\n\tl, r = r, l^f1(r, c.masking[9], c.rotate[9])\n\tl, r = r, l^f2(r, c.masking[10], c.rotate[10])\n\tl, r = r, l^f3(r, c.masking[11], c.rotate[11])\n\n\tl, r = r, l^f1(r, c.masking[12], c.rotate[12])\n\tl, r = r, l^f2(r, c.masking[13], c.rotate[13])\n\tl, r = r, l^f3(r, c.masking[14], c.rotate[14])\n\tl, r = r, l^f1(r, c.masking[15], c.rotate[15])\n\n\tdst[0] = uint8(r >> 24)\n\tdst[1] = uint8(r >> 16)\n\tdst[2] = uint8(r >> 8)\n\tdst[3] = uint8(r)\n\tdst[4] = uint8(l >> 24)\n\tdst[5] = uint8(l >> 16)\n\tdst[6] = uint8(l >> 8)\n\tdst[7] = uint8(l)\n}\n\nfunc (c *Cipher) Decrypt(dst, src []byte) {\n\tl := uint32(src[0])<<24 | uint32(src[1])<<16 | uint32(src[2])<<8 | uint32(src[3])\n\tr := uint32(src[4])<<24 | uint32(src[5])<<16 | uint32(src[6])<<8 | uint32(src[7])\n\n\tl, r = r, l^f1(r, c.masking[15], c.rotate[15])\n\tl, r = r, l^f3(r, c.masking[14], c.rotate[14])\n\tl, r = r, l^f2(r, c.masking[13], c.rotate[13])\n\tl, r = r, l^f1(r, c.masking[12], c.rotate[12])\n\n\tl, r = r, l^f3(r, c.masking[11], c.rotate[11])\n\tl, r = r, l^f2(r, c.masking[10], c.rotate[10])\n\tl, r = r, l^f1(r, c.masking[9], c.rotate[9])\n\tl, r = r, l^f3(r, c.masking[8], c.rotate[8])\n\n\tl, r = r, l^f2(r, c.masking[7], c.rotate[7])\n\tl, r = r, l^f1(r, c.masking[6], c.rotate[6])\n\tl, r = r, l^f3(r, c.masking[5], c.rotate[5])\n\tl, r = r, l^f2(r, c.masking[4], c.rotate[4])\n\n\tl, r = r, l^f1(r, c.masking[3], c.rotate[3])\n\tl, r = r, l^f3(r, c.masking[2], c.rotate[2])\n\tl, r = r, l^f2(r, c.masking[1], c.rotate[1])\n\tl, r = r, l^f1(r, c.masking[0], c.rotate[0])\n\n\tdst[0] = uint8(r >> 24)\n\tdst[1] = uint8(r >> 16)\n\tdst[2] = uint8(r >> 8)\n\tdst[3] = uint8(r)\n\tdst[4] = uint8(l >> 24)\n\tdst[5] = uint8(l >> 16)\n\tdst[6] = uint8(l >> 8)\n\tdst[7] = uint8(l)\n}\n\ntype keyScheduleA [4][7]uint8\ntype keyScheduleB [4][5]uint8\n\n// keyScheduleRound contains the magic values for a round of the key schedule.\n// The keyScheduleA deals with the lines like:\n//   z0z1z2z3 = x0x1x2x3 ^ S5[xD] ^ S6[xF] ^ S7[xC] ^ S8[xE] ^ S7[x8]\n// Conceptually, both x and z are in the same array, x first. The first\n// element describes which word of this array gets written to and the\n// second, which word gets read. So, for the line above, it's \"4, 0\", because\n// it's writing to the first word of z, which, being after x, is word 4, and\n// reading from the first word of x: word 0.\n//\n// Next are the indexes into the S-boxes. Now the array is treated as bytes. So\n// \"xD\" is 0xd. The first byte of z is written as \"16 + 0\", just to be clear\n// that it's z that we're indexing.\n//\n// keyScheduleB deals with lines like:\n//   K1 = S5[z8] ^ S6[z9] ^ S7[z7] ^ S8[z6] ^ S5[z2]\n// \"K1\" is ignored because key words are always written in order. So the five\n// elements are the S-box indexes. They use the same form as in keyScheduleA,\n// above.\n\ntype keyScheduleRound struct{}\ntype keySchedule []keyScheduleRound\n\nvar schedule = []struct {\n\ta keyScheduleA\n\tb keyScheduleB\n}{\n\t{\n\t\tkeyScheduleA{\n\t\t\t{4, 0, 0xd, 0xf, 0xc, 0xe, 0x8},\n\t\t\t{5, 2, 16 + 0, 16 + 2, 16 + 1, 16 + 3, 0xa},\n\t\t\t{6, 3, 16 + 7, 16 + 6, 16 + 5, 16 + 4, 9},\n\t\t\t{7, 1, 16 + 0xa, 16 + 9, 16 + 0xb, 16 + 8, 0xb},\n\t\t},\n\t\tkeyScheduleB{\n\t\t\t{16 + 8, 16 + 9, 16 + 7, 16 + 6, 16 + 2},\n\t\t\t{16 + 0xa, 16 + 0xb, 16 + 5, 16 + 4, 16 + 6},\n\t\t\t{16 + 0xc, 16 + 0xd, 16 + 3, 16 + 2, 16 + 9},\n\t\t\t{16 + 0xe, 16 + 0xf, 16 + 1, 16 + 0, 16 + 0xc},\n\t\t},\n\t},\n\t{\n\t\tkeyScheduleA{\n\t\t\t{0, 6, 16 + 5, 16 + 7, 16 + 4, 16 + 6, 16 + 0},\n\t\t\t{1, 4, 0, 2, 1, 3, 16 + 2},\n\t\t\t{2, 5, 7, 6, 5, 4, 16 + 1},\n\t\t\t{3, 7, 0xa, 9, 0xb, 8, 16 + 3},\n\t\t},\n\t\tkeyScheduleB{\n\t\t\t{3, 2, 0xc, 0xd, 8},\n\t\t\t{1, 0, 0xe, 0xf, 0xd},\n\t\t\t{7, 6, 8, 9, 3},\n\t\t\t{5, 4, 0xa, 0xb, 7},\n\t\t},\n\t},\n\t{\n\t\tkeyScheduleA{\n\t\t\t{4, 0, 0xd, 0xf, 0xc, 0xe, 8},\n\t\t\t{5, 2, 16 + 0, 16 + 2, 16 + 1, 16 + 3, 0xa},\n\t\t\t{6, 3, 16 + 7, 16 + 6, 16 + 5, 16 + 4, 9},\n\t\t\t{7, 1, 16 + 0xa, 16 + 9, 16 + 0xb, 16 + 8, 0xb},\n\t\t},\n\t\tkeyScheduleB{\n\t\t\t{16 + 3, 16 + 2, 16 + 0xc, 16 + 0xd, 16 + 9},\n\t\t\t{16 + 1, 16 + 0, 16 + 0xe, 16 + 0xf, 16 + 0xc},\n\t\t\t{16 + 7, 16 + 6, 16 + 8, 16 + 9, 16 + 2},\n\t\t\t{16 + 5, 16 + 4, 16 + 0xa, 16 + 0xb, 16 + 6},\n\t\t},\n\t},\n\t{\n\t\tkeyScheduleA{\n\t\t\t{0, 6, 16 + 5, 16 + 7, 16 + 4, 16 + 6, 16 + 0},\n\t\t\t{1, 4, 0, 2, 1, 3, 16 + 2},\n\t\t\t{2, 5, 7, 6, 5, 4, 16 + 1},\n\t\t\t{3, 7, 0xa, 9, 0xb, 8, 16 + 3},\n\t\t},\n\t\tkeyScheduleB{\n\t\t\t{8, 9, 7, 6, 3},\n\t\t\t{0xa, 0xb, 5, 4, 7},\n\t\t\t{0xc, 0xd, 3, 2, 8},\n\t\t\t{0xe, 0xf, 1, 0, 0xd},\n\t\t},\n\t},\n}\n\nfunc (c *Cipher) keySchedule(in []byte) {\n\tvar t [8]uint32\n\tvar k [32]uint32\n\n\tfor i := 0; i < 4; i++ {\n\t\tj := i * 4\n\t\tt[i] = uint32(in[j])<<24 | uint32(in[j+1])<<16 | uint32(in[j+2])<<8 | uint32(in[j+3])\n\t}\n\n\tx := []byte{6, 7, 4, 5}\n\tki := 0\n\n\tfor half := 0; half < 2; half++ {\n\t\tfor _, round := range schedule {\n\t\t\tfor j := 0; j < 4; j++ {\n\t\t\t\tvar a [7]uint8\n\t\t\t\tcopy(a[:], round.a[j][:])\n\t\t\t\tw := t[a[1]]\n\t\t\t\tw ^= sBox[4][(t[a[2]>>2]>>(24-8*(a[2]&3)))&0xff]\n\t\t\t\tw ^= sBox[5][(t[a[3]>>2]>>(24-8*(a[3]&3)))&0xff]\n\t\t\t\tw ^= sBox[6][(t[a[4]>>2]>>(24-8*(a[4]&3)))&0xff]\n\t\t\t\tw ^= sBox[7][(t[a[5]>>2]>>(24-8*(a[5]&3)))&0xff]\n\t\t\t\tw ^= sBox[x[j]][(t[a[6]>>2]>>(24-8*(a[6]&3)))&0xff]\n\t\t\t\tt[a[0]] = w\n\t\t\t}\n\n\t\t\tfor j := 0; j < 4; j++ {\n\t\t\t\tvar b [5]uint8\n\t\t\t\tcopy(b[:], round.b[j][:])\n\t\t\t\tw := sBox[4][(t[b[0]>>2]>>(24-8*(b[0]&3)))&0xff]\n\t\t\t\tw ^= sBox[5][(t[b[1]>>2]>>(24-8*(b[1]&3)))&0xff]\n\t\t\t\tw ^= sBox[6][(t[b[2]>>2]>>(24-8*(b[2]&3)))&0xff]\n\t\t\t\tw ^= sBox[7][(t[b[3]>>2]>>(24-8*(b[3]&3)))&0xff]\n\t\t\t\tw ^= sBox[4+j][(t[b[4]>>2]>>(24-8*(b[4]&3)))&0xff]\n\t\t\t\tk[ki] = w\n\t\t\t\tki++\n\t\t\t}\n\t\t}\n\t}\n\n\tfor i := 0; i < 16; i++ {\n\t\tc.masking[i] = k[i]\n\t\tc.rotate[i] = uint8(k[16+i] & 0x1f)\n\t}\n}\n\n// These are the three 'f' functions. See RFC 2144, section 2.2.\nfunc f1(d, m uint32, r uint8) uint32 {\n\tt := m + d\n\tI := (t << r) | (t >> (32 - r))\n\treturn ((sBox[0][I>>24] ^ sBox[1][(I>>16)&0xff]) - sBox[2][(I>>8)&0xff]) + sBox[3][I&0xff]\n}\n\nfunc f2(d, m uint32, r uint8) uint32 {\n\tt := m ^ d\n\tI := (t << r) | (t >> (32 - r))\n\treturn ((sBox[0][I>>24] - sBox[1][(I>>16)&0xff]) + sBox[2][(I>>8)&0xff]) ^ sBox[3][I&0xff]\n}\n\nfunc f3(d, m uint32, r uint8) uint32 {\n\tt := m - d\n\tI := (t << r) | (t >> (32 - r))\n\treturn ((sBox[0][I>>24] + sBox[1][(I>>16)&0xff]) ^ sBox[2][(I>>8)&0xff]) - sBox[3][I&0xff]\n}\n\nvar sBox = [8][256]uint32{\n\t{\n\t\t0x30fb40d4, 0x9fa0ff0b, 0x6beccd2f, 0x3f258c7a, 0x1e213f2f, 0x9c004dd3, 0x6003e540, 0xcf9fc949,\n\t\t0xbfd4af27, 0x88bbbdb5, 0xe2034090, 0x98d09675, 0x6e63a0e0, 0x15c361d2, 0xc2e7661d, 0x22d4ff8e,\n\t\t0x28683b6f, 0xc07fd059, 0xff2379c8, 0x775f50e2, 0x43c340d3, 0xdf2f8656, 0x887ca41a, 0xa2d2bd2d,\n\t\t0xa1c9e0d6, 0x346c4819, 0x61b76d87, 0x22540f2f, 0x2abe32e1, 0xaa54166b, 0x22568e3a, 0xa2d341d0,\n\t\t0x66db40c8, 0xa784392f, 0x004dff2f, 0x2db9d2de, 0x97943fac, 0x4a97c1d8, 0x527644b7, 0xb5f437a7,\n\t\t0xb82cbaef, 0xd751d159, 0x6ff7f0ed, 0x5a097a1f, 0x827b68d0, 0x90ecf52e, 0x22b0c054, 0xbc8e5935,\n\t\t0x4b6d2f7f, 0x50bb64a2, 0xd2664910, 0xbee5812d, 0xb7332290, 0xe93b159f, 0xb48ee411, 0x4bff345d,\n\t\t0xfd45c240, 0xad31973f, 0xc4f6d02e, 0x55fc8165, 0xd5b1caad, 0xa1ac2dae, 0xa2d4b76d, 0xc19b0c50,\n\t\t0x882240f2, 0x0c6e4f38, 0xa4e4bfd7, 0x4f5ba272, 0x564c1d2f, 0xc59c5319, 0xb949e354, 0xb04669fe,\n\t\t0xb1b6ab8a, 0xc71358dd, 0x6385c545, 0x110f935d, 0x57538ad5, 0x6a390493, 0xe63d37e0, 0x2a54f6b3,\n\t\t0x3a787d5f, 0x6276a0b5, 0x19a6fcdf, 0x7a42206a, 0x29f9d4d5, 0xf61b1891, 0xbb72275e, 0xaa508167,\n\t\t0x38901091, 0xc6b505eb, 0x84c7cb8c, 0x2ad75a0f, 0x874a1427, 0xa2d1936b, 0x2ad286af, 0xaa56d291,\n\t\t0xd7894360, 0x425c750d, 0x93b39e26, 0x187184c9, 0x6c00b32d, 0x73e2bb14, 0xa0bebc3c, 0x54623779,\n\t\t0x64459eab, 0x3f328b82, 0x7718cf82, 0x59a2cea6, 0x04ee002e, 0x89fe78e6, 0x3fab0950, 0x325ff6c2,\n\t\t0x81383f05, 0x6963c5c8, 0x76cb5ad6, 0xd49974c9, 0xca180dcf, 0x380782d5, 0xc7fa5cf6, 0x8ac31511,\n\t\t0x35e79e13, 0x47da91d0, 0xf40f9086, 0xa7e2419e, 0x31366241, 0x051ef495, 0xaa573b04, 0x4a805d8d,\n\t\t0x548300d0, 0x00322a3c, 0xbf64cddf, 0xba57a68e, 0x75c6372b, 0x50afd341, 0xa7c13275, 0x915a0bf5,\n\t\t0x6b54bfab, 0x2b0b1426, 0xab4cc9d7, 0x449ccd82, 0xf7fbf265, 0xab85c5f3, 0x1b55db94, 0xaad4e324,\n\t\t0xcfa4bd3f, 0x2deaa3e2, 0x9e204d02, 0xc8bd25ac, 0xeadf55b3, 0xd5bd9e98, 0xe31231b2, 0x2ad5ad6c,\n\t\t0x954329de, 0xadbe4528, 0xd8710f69, 0xaa51c90f, 0xaa786bf6, 0x22513f1e, 0xaa51a79b, 0x2ad344cc,\n\t\t0x7b5a41f0, 0xd37cfbad, 0x1b069505, 0x41ece491, 0xb4c332e6, 0x032268d4, 0xc9600acc, 0xce387e6d,\n\t\t0xbf6bb16c, 0x6a70fb78, 0x0d03d9c9, 0xd4df39de, 0xe01063da, 0x4736f464, 0x5ad328d8, 0xb347cc96,\n\t\t0x75bb0fc3, 0x98511bfb, 0x4ffbcc35, 0xb58bcf6a, 0xe11f0abc, 0xbfc5fe4a, 0xa70aec10, 0xac39570a,\n\t\t0x3f04442f, 0x6188b153, 0xe0397a2e, 0x5727cb79, 0x9ceb418f, 0x1cacd68d, 0x2ad37c96, 0x0175cb9d,\n\t\t0xc69dff09, 0xc75b65f0, 0xd9db40d8, 0xec0e7779, 0x4744ead4, 0xb11c3274, 0xdd24cb9e, 0x7e1c54bd,\n\t\t0xf01144f9, 0xd2240eb1, 0x9675b3fd, 0xa3ac3755, 0xd47c27af, 0x51c85f4d, 0x56907596, 0xa5bb15e6,\n\t\t0x580304f0, 0xca042cf1, 0x011a37ea, 0x8dbfaadb, 0x35ba3e4a, 0x3526ffa0, 0xc37b4d09, 0xbc306ed9,\n\t\t0x98a52666, 0x5648f725, 0xff5e569d, 0x0ced63d0, 0x7c63b2cf, 0x700b45e1, 0xd5ea50f1, 0x85a92872,\n\t\t0xaf1fbda7, 0xd4234870, 0xa7870bf3, 0x2d3b4d79, 0x42e04198, 0x0cd0ede7, 0x26470db8, 0xf881814c,\n\t\t0x474d6ad7, 0x7c0c5e5c, 0xd1231959, 0x381b7298, 0xf5d2f4db, 0xab838653, 0x6e2f1e23, 0x83719c9e,\n\t\t0xbd91e046, 0x9a56456e, 0xdc39200c, 0x20c8c571, 0x962bda1c, 0xe1e696ff, 0xb141ab08, 0x7cca89b9,\n\t\t0x1a69e783, 0x02cc4843, 0xa2f7c579, 0x429ef47d, 0x427b169c, 0x5ac9f049, 0xdd8f0f00, 0x5c8165bf,\n\t},\n\t{\n\t\t0x1f201094, 0xef0ba75b, 0x69e3cf7e, 0x393f4380, 0xfe61cf7a, 0xeec5207a, 0x55889c94, 0x72fc0651,\n\t\t0xada7ef79, 0x4e1d7235, 0xd55a63ce, 0xde0436ba, 0x99c430ef, 0x5f0c0794, 0x18dcdb7d, 0xa1d6eff3,\n\t\t0xa0b52f7b, 0x59e83605, 0xee15b094, 0xe9ffd909, 0xdc440086, 0xef944459, 0xba83ccb3, 0xe0c3cdfb,\n\t\t0xd1da4181, 0x3b092ab1, 0xf997f1c1, 0xa5e6cf7b, 0x01420ddb, 0xe4e7ef5b, 0x25a1ff41, 0xe180f806,\n\t\t0x1fc41080, 0x179bee7a, 0xd37ac6a9, 0xfe5830a4, 0x98de8b7f, 0x77e83f4e, 0x79929269, 0x24fa9f7b,\n\t\t0xe113c85b, 0xacc40083, 0xd7503525, 0xf7ea615f, 0x62143154, 0x0d554b63, 0x5d681121, 0xc866c359,\n\t\t0x3d63cf73, 0xcee234c0, 0xd4d87e87, 0x5c672b21, 0x071f6181, 0x39f7627f, 0x361e3084, 0xe4eb573b,\n\t\t0x602f64a4, 0xd63acd9c, 0x1bbc4635, 0x9e81032d, 0x2701f50c, 0x99847ab4, 0xa0e3df79, 0xba6cf38c,\n\t\t0x10843094, 0x2537a95e, 0xf46f6ffe, 0xa1ff3b1f, 0x208cfb6a, 0x8f458c74, 0xd9e0a227, 0x4ec73a34,\n\t\t0xfc884f69, 0x3e4de8df, 0xef0e0088, 0x3559648d, 0x8a45388c, 0x1d804366, 0x721d9bfd, 0xa58684bb,\n\t\t0xe8256333, 0x844e8212, 0x128d8098, 0xfed33fb4, 0xce280ae1, 0x27e19ba5, 0xd5a6c252, 0xe49754bd,\n\t\t0xc5d655dd, 0xeb667064, 0x77840b4d, 0xa1b6a801, 0x84db26a9, 0xe0b56714, 0x21f043b7, 0xe5d05860,\n\t\t0x54f03084, 0x066ff472, 0xa31aa153, 0xdadc4755, 0xb5625dbf, 0x68561be6, 0x83ca6b94, 0x2d6ed23b,\n\t\t0xeccf01db, 0xa6d3d0ba, 0xb6803d5c, 0xaf77a709, 0x33b4a34c, 0x397bc8d6, 0x5ee22b95, 0x5f0e5304,\n\t\t0x81ed6f61, 0x20e74364, 0xb45e1378, 0xde18639b, 0x881ca122, 0xb96726d1, 0x8049a7e8, 0x22b7da7b,\n\t\t0x5e552d25, 0x5272d237, 0x79d2951c, 0xc60d894c, 0x488cb402, 0x1ba4fe5b, 0xa4b09f6b, 0x1ca815cf,\n\t\t0xa20c3005, 0x8871df63, 0xb9de2fcb, 0x0cc6c9e9, 0x0beeff53, 0xe3214517, 0xb4542835, 0x9f63293c,\n\t\t0xee41e729, 0x6e1d2d7c, 0x50045286, 0x1e6685f3, 0xf33401c6, 0x30a22c95, 0x31a70850, 0x60930f13,\n\t\t0x73f98417, 0xa1269859, 0xec645c44, 0x52c877a9, 0xcdff33a6, 0xa02b1741, 0x7cbad9a2, 0x2180036f,\n\t\t0x50d99c08, 0xcb3f4861, 0xc26bd765, 0x64a3f6ab, 0x80342676, 0x25a75e7b, 0xe4e6d1fc, 0x20c710e6,\n\t\t0xcdf0b680, 0x17844d3b, 0x31eef84d, 0x7e0824e4, 0x2ccb49eb, 0x846a3bae, 0x8ff77888, 0xee5d60f6,\n\t\t0x7af75673, 0x2fdd5cdb, 0xa11631c1, 0x30f66f43, 0xb3faec54, 0x157fd7fa, 0xef8579cc, 0xd152de58,\n\t\t0xdb2ffd5e, 0x8f32ce19, 0x306af97a, 0x02f03ef8, 0x99319ad5, 0xc242fa0f, 0xa7e3ebb0, 0xc68e4906,\n\t\t0xb8da230c, 0x80823028, 0xdcdef3c8, 0xd35fb171, 0x088a1bc8, 0xbec0c560, 0x61a3c9e8, 0xbca8f54d,\n\t\t0xc72feffa, 0x22822e99, 0x82c570b4, 0xd8d94e89, 0x8b1c34bc, 0x301e16e6, 0x273be979, 0xb0ffeaa6,\n\t\t0x61d9b8c6, 0x00b24869, 0xb7ffce3f, 0x08dc283b, 0x43daf65a, 0xf7e19798, 0x7619b72f, 0x8f1c9ba4,\n\t\t0xdc8637a0, 0x16a7d3b1, 0x9fc393b7, 0xa7136eeb, 0xc6bcc63e, 0x1a513742, 0xef6828bc, 0x520365d6,\n\t\t0x2d6a77ab, 0x3527ed4b, 0x821fd216, 0x095c6e2e, 0xdb92f2fb, 0x5eea29cb, 0x145892f5, 0x91584f7f,\n\t\t0x5483697b, 0x2667a8cc, 0x85196048, 0x8c4bacea, 0x833860d4, 0x0d23e0f9, 0x6c387e8a, 0x0ae6d249,\n\t\t0xb284600c, 0xd835731d, 0xdcb1c647, 0xac4c56ea, 0x3ebd81b3, 0x230eabb0, 0x6438bc87, 0xf0b5b1fa,\n\t\t0x8f5ea2b3, 0xfc184642, 0x0a036b7a, 0x4fb089bd, 0x649da589, 0xa345415e, 0x5c038323, 0x3e5d3bb9,\n\t\t0x43d79572, 0x7e6dd07c, 0x06dfdf1e, 0x6c6cc4ef, 0x7160a539, 0x73bfbe70, 0x83877605, 0x4523ecf1,\n\t},\n\t{\n\t\t0x8defc240, 0x25fa5d9f, 0xeb903dbf, 0xe810c907, 0x47607fff, 0x369fe44b, 0x8c1fc644, 0xaececa90,\n\t\t0xbeb1f9bf, 0xeefbcaea, 0xe8cf1950, 0x51df07ae, 0x920e8806, 0xf0ad0548, 0xe13c8d83, 0x927010d5,\n\t\t0x11107d9f, 0x07647db9, 0xb2e3e4d4, 0x3d4f285e, 0xb9afa820, 0xfade82e0, 0xa067268b, 0x8272792e,\n\t\t0x553fb2c0, 0x489ae22b, 0xd4ef9794, 0x125e3fbc, 0x21fffcee, 0x825b1bfd, 0x9255c5ed, 0x1257a240,\n\t\t0x4e1a8302, 0xbae07fff, 0x528246e7, 0x8e57140e, 0x3373f7bf, 0x8c9f8188, 0xa6fc4ee8, 0xc982b5a5,\n\t\t0xa8c01db7, 0x579fc264, 0x67094f31, 0xf2bd3f5f, 0x40fff7c1, 0x1fb78dfc, 0x8e6bd2c1, 0x437be59b,\n\t\t0x99b03dbf, 0xb5dbc64b, 0x638dc0e6, 0x55819d99, 0xa197c81c, 0x4a012d6e, 0xc5884a28, 0xccc36f71,\n\t\t0xb843c213, 0x6c0743f1, 0x8309893c, 0x0feddd5f, 0x2f7fe850, 0xd7c07f7e, 0x02507fbf, 0x5afb9a04,\n\t\t0xa747d2d0, 0x1651192e, 0xaf70bf3e, 0x58c31380, 0x5f98302e, 0x727cc3c4, 0x0a0fb402, 0x0f7fef82,\n\t\t0x8c96fdad, 0x5d2c2aae, 0x8ee99a49, 0x50da88b8, 0x8427f4a0, 0x1eac5790, 0x796fb449, 0x8252dc15,\n\t\t0xefbd7d9b, 0xa672597d, 0xada840d8, 0x45f54504, 0xfa5d7403, 0xe83ec305, 0x4f91751a, 0x925669c2,\n\t\t0x23efe941, 0xa903f12e, 0x60270df2, 0x0276e4b6, 0x94fd6574, 0x927985b2, 0x8276dbcb, 0x02778176,\n\t\t0xf8af918d, 0x4e48f79e, 0x8f616ddf, 0xe29d840e, 0x842f7d83, 0x340ce5c8, 0x96bbb682, 0x93b4b148,\n\t\t0xef303cab, 0x984faf28, 0x779faf9b, 0x92dc560d, 0x224d1e20, 0x8437aa88, 0x7d29dc96, 0x2756d3dc,\n\t\t0x8b907cee, 0xb51fd240, 0xe7c07ce3, 0xe566b4a1, 0xc3e9615e, 0x3cf8209d, 0x6094d1e3, 0xcd9ca341,\n\t\t0x5c76460e, 0x00ea983b, 0xd4d67881, 0xfd47572c, 0xf76cedd9, 0xbda8229c, 0x127dadaa, 0x438a074e,\n\t\t0x1f97c090, 0x081bdb8a, 0x93a07ebe, 0xb938ca15, 0x97b03cff, 0x3dc2c0f8, 0x8d1ab2ec, 0x64380e51,\n\t\t0x68cc7bfb, 0xd90f2788, 0x12490181, 0x5de5ffd4, 0xdd7ef86a, 0x76a2e214, 0xb9a40368, 0x925d958f,\n\t\t0x4b39fffa, 0xba39aee9, 0xa4ffd30b, 0xfaf7933b, 0x6d498623, 0x193cbcfa, 0x27627545, 0x825cf47a,\n\t\t0x61bd8ba0, 0xd11e42d1, 0xcead04f4, 0x127ea392, 0x10428db7, 0x8272a972, 0x9270c4a8, 0x127de50b,\n\t\t0x285ba1c8, 0x3c62f44f, 0x35c0eaa5, 0xe805d231, 0x428929fb, 0xb4fcdf82, 0x4fb66a53, 0x0e7dc15b,\n\t\t0x1f081fab, 0x108618ae, 0xfcfd086d, 0xf9ff2889, 0x694bcc11, 0x236a5cae, 0x12deca4d, 0x2c3f8cc5,\n\t\t0xd2d02dfe, 0xf8ef5896, 0xe4cf52da, 0x95155b67, 0x494a488c, 0xb9b6a80c, 0x5c8f82bc, 0x89d36b45,\n\t\t0x3a609437, 0xec00c9a9, 0x44715253, 0x0a874b49, 0xd773bc40, 0x7c34671c, 0x02717ef6, 0x4feb5536,\n\t\t0xa2d02fff, 0xd2bf60c4, 0xd43f03c0, 0x50b4ef6d, 0x07478cd1, 0x006e1888, 0xa2e53f55, 0xb9e6d4bc,\n\t\t0xa2048016, 0x97573833, 0xd7207d67, 0xde0f8f3d, 0x72f87b33, 0xabcc4f33, 0x7688c55d, 0x7b00a6b0,\n\t\t0x947b0001, 0x570075d2, 0xf9bb88f8, 0x8942019e, 0x4264a5ff, 0x856302e0, 0x72dbd92b, 0xee971b69,\n\t\t0x6ea22fde, 0x5f08ae2b, 0xaf7a616d, 0xe5c98767, 0xcf1febd2, 0x61efc8c2, 0xf1ac2571, 0xcc8239c2,\n\t\t0x67214cb8, 0xb1e583d1, 0xb7dc3e62, 0x7f10bdce, 0xf90a5c38, 0x0ff0443d, 0x606e6dc6, 0x60543a49,\n\t\t0x5727c148, 0x2be98a1d, 0x8ab41738, 0x20e1be24, 0xaf96da0f, 0x68458425, 0x99833be5, 0x600d457d,\n\t\t0x282f9350, 0x8334b362, 0xd91d1120, 0x2b6d8da0, 0x642b1e31, 0x9c305a00, 0x52bce688, 0x1b03588a,\n\t\t0xf7baefd5, 0x4142ed9c, 0xa4315c11, 0x83323ec5, 0xdfef4636, 0xa133c501, 0xe9d3531c, 0xee353783,\n\t},\n\t{\n\t\t0x9db30420, 0x1fb6e9de, 0xa7be7bef, 0xd273a298, 0x4a4f7bdb, 0x64ad8c57, 0x85510443, 0xfa020ed1,\n\t\t0x7e287aff, 0xe60fb663, 0x095f35a1, 0x79ebf120, 0xfd059d43, 0x6497b7b1, 0xf3641f63, 0x241e4adf,\n\t\t0x28147f5f, 0x4fa2b8cd, 0xc9430040, 0x0cc32220, 0xfdd30b30, 0xc0a5374f, 0x1d2d00d9, 0x24147b15,\n\t\t0xee4d111a, 0x0fca5167, 0x71ff904c, 0x2d195ffe, 0x1a05645f, 0x0c13fefe, 0x081b08ca, 0x05170121,\n\t\t0x80530100, 0xe83e5efe, 0xac9af4f8, 0x7fe72701, 0xd2b8ee5f, 0x06df4261, 0xbb9e9b8a, 0x7293ea25,\n\t\t0xce84ffdf, 0xf5718801, 0x3dd64b04, 0xa26f263b, 0x7ed48400, 0x547eebe6, 0x446d4ca0, 0x6cf3d6f5,\n\t\t0x2649abdf, 0xaea0c7f5, 0x36338cc1, 0x503f7e93, 0xd3772061, 0x11b638e1, 0x72500e03, 0xf80eb2bb,\n\t\t0xabe0502e, 0xec8d77de, 0x57971e81, 0xe14f6746, 0xc9335400, 0x6920318f, 0x081dbb99, 0xffc304a5,\n\t\t0x4d351805, 0x7f3d5ce3, 0xa6c866c6, 0x5d5bcca9, 0xdaec6fea, 0x9f926f91, 0x9f46222f, 0x3991467d,\n\t\t0xa5bf6d8e, 0x1143c44f, 0x43958302, 0xd0214eeb, 0x022083b8, 0x3fb6180c, 0x18f8931e, 0x281658e6,\n\t\t0x26486e3e, 0x8bd78a70, 0x7477e4c1, 0xb506e07c, 0xf32d0a25, 0x79098b02, 0xe4eabb81, 0x28123b23,\n\t\t0x69dead38, 0x1574ca16, 0xdf871b62, 0x211c40b7, 0xa51a9ef9, 0x0014377b, 0x041e8ac8, 0x09114003,\n\t\t0xbd59e4d2, 0xe3d156d5, 0x4fe876d5, 0x2f91a340, 0x557be8de, 0x00eae4a7, 0x0ce5c2ec, 0x4db4bba6,\n\t\t0xe756bdff, 0xdd3369ac, 0xec17b035, 0x06572327, 0x99afc8b0, 0x56c8c391, 0x6b65811c, 0x5e146119,\n\t\t0x6e85cb75, 0xbe07c002, 0xc2325577, 0x893ff4ec, 0x5bbfc92d, 0xd0ec3b25, 0xb7801ab7, 0x8d6d3b24,\n\t\t0x20c763ef, 0xc366a5fc, 0x9c382880, 0x0ace3205, 0xaac9548a, 0xeca1d7c7, 0x041afa32, 0x1d16625a,\n\t\t0x6701902c, 0x9b757a54, 0x31d477f7, 0x9126b031, 0x36cc6fdb, 0xc70b8b46, 0xd9e66a48, 0x56e55a79,\n\t\t0x026a4ceb, 0x52437eff, 0x2f8f76b4, 0x0df980a5, 0x8674cde3, 0xedda04eb, 0x17a9be04, 0x2c18f4df,\n\t\t0xb7747f9d, 0xab2af7b4, 0xefc34d20, 0x2e096b7c, 0x1741a254, 0xe5b6a035, 0x213d42f6, 0x2c1c7c26,\n\t\t0x61c2f50f, 0x6552daf9, 0xd2c231f8, 0x25130f69, 0xd8167fa2, 0x0418f2c8, 0x001a96a6, 0x0d1526ab,\n\t\t0x63315c21, 0x5e0a72ec, 0x49bafefd, 0x187908d9, 0x8d0dbd86, 0x311170a7, 0x3e9b640c, 0xcc3e10d7,\n\t\t0xd5cad3b6, 0x0caec388, 0xf73001e1, 0x6c728aff, 0x71eae2a1, 0x1f9af36e, 0xcfcbd12f, 0xc1de8417,\n\t\t0xac07be6b, 0xcb44a1d8, 0x8b9b0f56, 0x013988c3, 0xb1c52fca, 0xb4be31cd, 0xd8782806, 0x12a3a4e2,\n\t\t0x6f7de532, 0x58fd7eb6, 0xd01ee900, 0x24adffc2, 0xf4990fc5, 0x9711aac5, 0x001d7b95, 0x82e5e7d2,\n\t\t0x109873f6, 0x00613096, 0xc32d9521, 0xada121ff, 0x29908415, 0x7fbb977f, 0xaf9eb3db, 0x29c9ed2a,\n\t\t0x5ce2a465, 0xa730f32c, 0xd0aa3fe8, 0x8a5cc091, 0xd49e2ce7, 0x0ce454a9, 0xd60acd86, 0x015f1919,\n\t\t0x77079103, 0xdea03af6, 0x78a8565e, 0xdee356df, 0x21f05cbe, 0x8b75e387, 0xb3c50651, 0xb8a5c3ef,\n\t\t0xd8eeb6d2, 0xe523be77, 0xc2154529, 0x2f69efdf, 0xafe67afb, 0xf470c4b2, 0xf3e0eb5b, 0xd6cc9876,\n\t\t0x39e4460c, 0x1fda8538, 0x1987832f, 0xca007367, 0xa99144f8, 0x296b299e, 0x492fc295, 0x9266beab,\n\t\t0xb5676e69, 0x9bd3ddda, 0xdf7e052f, 0xdb25701c, 0x1b5e51ee, 0xf65324e6, 0x6afce36c, 0x0316cc04,\n\t\t0x8644213e, 0xb7dc59d0, 0x7965291f, 0xccd6fd43, 0x41823979, 0x932bcdf6, 0xb657c34d, 0x4edfd282,\n\t\t0x7ae5290c, 0x3cb9536b, 0x851e20fe, 0x9833557e, 0x13ecf0b0, 0xd3ffb372, 0x3f85c5c1, 0x0aef7ed2,\n\t},\n\t{\n\t\t0x7ec90c04, 0x2c6e74b9, 0x9b0e66df, 0xa6337911, 0xb86a7fff, 0x1dd358f5, 0x44dd9d44, 0x1731167f,\n\t\t0x08fbf1fa, 0xe7f511cc, 0xd2051b00, 0x735aba00, 0x2ab722d8, 0x386381cb, 0xacf6243a, 0x69befd7a,\n\t\t0xe6a2e77f, 0xf0c720cd, 0xc4494816, 0xccf5c180, 0x38851640, 0x15b0a848, 0xe68b18cb, 0x4caadeff,\n\t\t0x5f480a01, 0x0412b2aa, 0x259814fc, 0x41d0efe2, 0x4e40b48d, 0x248eb6fb, 0x8dba1cfe, 0x41a99b02,\n\t\t0x1a550a04, 0xba8f65cb, 0x7251f4e7, 0x95a51725, 0xc106ecd7, 0x97a5980a, 0xc539b9aa, 0x4d79fe6a,\n\t\t0xf2f3f763, 0x68af8040, 0xed0c9e56, 0x11b4958b, 0xe1eb5a88, 0x8709e6b0, 0xd7e07156, 0x4e29fea7,\n\t\t0x6366e52d, 0x02d1c000, 0xc4ac8e05, 0x9377f571, 0x0c05372a, 0x578535f2, 0x2261be02, 0xd642a0c9,\n\t\t0xdf13a280, 0x74b55bd2, 0x682199c0, 0xd421e5ec, 0x53fb3ce8, 0xc8adedb3, 0x28a87fc9, 0x3d959981,\n\t\t0x5c1ff900, 0xfe38d399, 0x0c4eff0b, 0x062407ea, 0xaa2f4fb1, 0x4fb96976, 0x90c79505, 0xb0a8a774,\n\t\t0xef55a1ff, 0xe59ca2c2, 0xa6b62d27, 0xe66a4263, 0xdf65001f, 0x0ec50966, 0xdfdd55bc, 0x29de0655,\n\t\t0x911e739a, 0x17af8975, 0x32c7911c, 0x89f89468, 0x0d01e980, 0x524755f4, 0x03b63cc9, 0x0cc844b2,\n\t\t0xbcf3f0aa, 0x87ac36e9, 0xe53a7426, 0x01b3d82b, 0x1a9e7449, 0x64ee2d7e, 0xcddbb1da, 0x01c94910,\n\t\t0xb868bf80, 0x0d26f3fd, 0x9342ede7, 0x04a5c284, 0x636737b6, 0x50f5b616, 0xf24766e3, 0x8eca36c1,\n\t\t0x136e05db, 0xfef18391, 0xfb887a37, 0xd6e7f7d4, 0xc7fb7dc9, 0x3063fcdf, 0xb6f589de, 0xec2941da,\n\t\t0x26e46695, 0xb7566419, 0xf654efc5, 0xd08d58b7, 0x48925401, 0xc1bacb7f, 0xe5ff550f, 0xb6083049,\n\t\t0x5bb5d0e8, 0x87d72e5a, 0xab6a6ee1, 0x223a66ce, 0xc62bf3cd, 0x9e0885f9, 0x68cb3e47, 0x086c010f,\n\t\t0xa21de820, 0xd18b69de, 0xf3f65777, 0xfa02c3f6, 0x407edac3, 0xcbb3d550, 0x1793084d, 0xb0d70eba,\n\t\t0x0ab378d5, 0xd951fb0c, 0xded7da56, 0x4124bbe4, 0x94ca0b56, 0x0f5755d1, 0xe0e1e56e, 0x6184b5be,\n\t\t0x580a249f, 0x94f74bc0, 0xe327888e, 0x9f7b5561, 0xc3dc0280, 0x05687715, 0x646c6bd7, 0x44904db3,\n\t\t0x66b4f0a3, 0xc0f1648a, 0x697ed5af, 0x49e92ff6, 0x309e374f, 0x2cb6356a, 0x85808573, 0x4991f840,\n\t\t0x76f0ae02, 0x083be84d, 0x28421c9a, 0x44489406, 0x736e4cb8, 0xc1092910, 0x8bc95fc6, 0x7d869cf4,\n\t\t0x134f616f, 0x2e77118d, 0xb31b2be1, 0xaa90b472, 0x3ca5d717, 0x7d161bba, 0x9cad9010, 0xaf462ba2,\n\t\t0x9fe459d2, 0x45d34559, 0xd9f2da13, 0xdbc65487, 0xf3e4f94e, 0x176d486f, 0x097c13ea, 0x631da5c7,\n\t\t0x445f7382, 0x175683f4, 0xcdc66a97, 0x70be0288, 0xb3cdcf72, 0x6e5dd2f3, 0x20936079, 0x459b80a5,\n\t\t0xbe60e2db, 0xa9c23101, 0xeba5315c, 0x224e42f2, 0x1c5c1572, 0xf6721b2c, 0x1ad2fff3, 0x8c25404e,\n\t\t0x324ed72f, 0x4067b7fd, 0x0523138e, 0x5ca3bc78, 0xdc0fd66e, 0x75922283, 0x784d6b17, 0x58ebb16e,\n\t\t0x44094f85, 0x3f481d87, 0xfcfeae7b, 0x77b5ff76, 0x8c2302bf, 0xaaf47556, 0x5f46b02a, 0x2b092801,\n\t\t0x3d38f5f7, 0x0ca81f36, 0x52af4a8a, 0x66d5e7c0, 0xdf3b0874, 0x95055110, 0x1b5ad7a8, 0xf61ed5ad,\n\t\t0x6cf6e479, 0x20758184, 0xd0cefa65, 0x88f7be58, 0x4a046826, 0x0ff6f8f3, 0xa09c7f70, 0x5346aba0,\n\t\t0x5ce96c28, 0xe176eda3, 0x6bac307f, 0x376829d2, 0x85360fa9, 0x17e3fe2a, 0x24b79767, 0xf5a96b20,\n\t\t0xd6cd2595, 0x68ff1ebf, 0x7555442c, 0xf19f06be, 0xf9e0659a, 0xeeb9491d, 0x34010718, 0xbb30cab8,\n\t\t0xe822fe15, 0x88570983, 0x750e6249, 0xda627e55, 0x5e76ffa8, 0xb1534546, 0x6d47de08, 0xefe9e7d4,\n\t},\n\t{\n\t\t0xf6fa8f9d, 0x2cac6ce1, 0x4ca34867, 0xe2337f7c, 0x95db08e7, 0x016843b4, 0xeced5cbc, 0x325553ac,\n\t\t0xbf9f0960, 0xdfa1e2ed, 0x83f0579d, 0x63ed86b9, 0x1ab6a6b8, 0xde5ebe39, 0xf38ff732, 0x8989b138,\n\t\t0x33f14961, 0xc01937bd, 0xf506c6da, 0xe4625e7e, 0xa308ea99, 0x4e23e33c, 0x79cbd7cc, 0x48a14367,\n\t\t0xa3149619, 0xfec94bd5, 0xa114174a, 0xeaa01866, 0xa084db2d, 0x09a8486f, 0xa888614a, 0x2900af98,\n\t\t0x01665991, 0xe1992863, 0xc8f30c60, 0x2e78ef3c, 0xd0d51932, 0xcf0fec14, 0xf7ca07d2, 0xd0a82072,\n\t\t0xfd41197e, 0x9305a6b0, 0xe86be3da, 0x74bed3cd, 0x372da53c, 0x4c7f4448, 0xdab5d440, 0x6dba0ec3,\n\t\t0x083919a7, 0x9fbaeed9, 0x49dbcfb0, 0x4e670c53, 0x5c3d9c01, 0x64bdb941, 0x2c0e636a, 0xba7dd9cd,\n\t\t0xea6f7388, 0xe70bc762, 0x35f29adb, 0x5c4cdd8d, 0xf0d48d8c, 0xb88153e2, 0x08a19866, 0x1ae2eac8,\n\t\t0x284caf89, 0xaa928223, 0x9334be53, 0x3b3a21bf, 0x16434be3, 0x9aea3906, 0xefe8c36e, 0xf890cdd9,\n\t\t0x80226dae, 0xc340a4a3, 0xdf7e9c09, 0xa694a807, 0x5b7c5ecc, 0x221db3a6, 0x9a69a02f, 0x68818a54,\n\t\t0xceb2296f, 0x53c0843a, 0xfe893655, 0x25bfe68a, 0xb4628abc, 0xcf222ebf, 0x25ac6f48, 0xa9a99387,\n\t\t0x53bddb65, 0xe76ffbe7, 0xe967fd78, 0x0ba93563, 0x8e342bc1, 0xe8a11be9, 0x4980740d, 0xc8087dfc,\n\t\t0x8de4bf99, 0xa11101a0, 0x7fd37975, 0xda5a26c0, 0xe81f994f, 0x9528cd89, 0xfd339fed, 0xb87834bf,\n\t\t0x5f04456d, 0x22258698, 0xc9c4c83b, 0x2dc156be, 0x4f628daa, 0x57f55ec5, 0xe2220abe, 0xd2916ebf,\n\t\t0x4ec75b95, 0x24f2c3c0, 0x42d15d99, 0xcd0d7fa0, 0x7b6e27ff, 0xa8dc8af0, 0x7345c106, 0xf41e232f,\n\t\t0x35162386, 0xe6ea8926, 0x3333b094, 0x157ec6f2, 0x372b74af, 0x692573e4, 0xe9a9d848, 0xf3160289,\n\t\t0x3a62ef1d, 0xa787e238, 0xf3a5f676, 0x74364853, 0x20951063, 0x4576698d, 0xb6fad407, 0x592af950,\n\t\t0x36f73523, 0x4cfb6e87, 0x7da4cec0, 0x6c152daa, 0xcb0396a8, 0xc50dfe5d, 0xfcd707ab, 0x0921c42f,\n\t\t0x89dff0bb, 0x5fe2be78, 0x448f4f33, 0x754613c9, 0x2b05d08d, 0x48b9d585, 0xdc049441, 0xc8098f9b,\n\t\t0x7dede786, 0xc39a3373, 0x42410005, 0x6a091751, 0x0ef3c8a6, 0x890072d6, 0x28207682, 0xa9a9f7be,\n\t\t0xbf32679d, 0xd45b5b75, 0xb353fd00, 0xcbb0e358, 0x830f220a, 0x1f8fb214, 0xd372cf08, 0xcc3c4a13,\n\t\t0x8cf63166, 0x061c87be, 0x88c98f88, 0x6062e397, 0x47cf8e7a, 0xb6c85283, 0x3cc2acfb, 0x3fc06976,\n\t\t0x4e8f0252, 0x64d8314d, 0xda3870e3, 0x1e665459, 0xc10908f0, 0x513021a5, 0x6c5b68b7, 0x822f8aa0,\n\t\t0x3007cd3e, 0x74719eef, 0xdc872681, 0x073340d4, 0x7e432fd9, 0x0c5ec241, 0x8809286c, 0xf592d891,\n\t\t0x08a930f6, 0x957ef305, 0xb7fbffbd, 0xc266e96f, 0x6fe4ac98, 0xb173ecc0, 0xbc60b42a, 0x953498da,\n\t\t0xfba1ae12, 0x2d4bd736, 0x0f25faab, 0xa4f3fceb, 0xe2969123, 0x257f0c3d, 0x9348af49, 0x361400bc,\n\t\t0xe8816f4a, 0x3814f200, 0xa3f94043, 0x9c7a54c2, 0xbc704f57, 0xda41e7f9, 0xc25ad33a, 0x54f4a084,\n\t\t0xb17f5505, 0x59357cbe, 0xedbd15c8, 0x7f97c5ab, 0xba5ac7b5, 0xb6f6deaf, 0x3a479c3a, 0x5302da25,\n\t\t0x653d7e6a, 0x54268d49, 0x51a477ea, 0x5017d55b, 0xd7d25d88, 0x44136c76, 0x0404a8c8, 0xb8e5a121,\n\t\t0xb81a928a, 0x60ed5869, 0x97c55b96, 0xeaec991b, 0x29935913, 0x01fdb7f1, 0x088e8dfa, 0x9ab6f6f5,\n\t\t0x3b4cbf9f, 0x4a5de3ab, 0xe6051d35, 0xa0e1d855, 0xd36b4cf1, 0xf544edeb, 0xb0e93524, 0xbebb8fbd,\n\t\t0xa2d762cf, 0x49c92f54, 0x38b5f331, 0x7128a454, 0x48392905, 0xa65b1db8, 0x851c97bd, 0xd675cf2f,\n\t},\n\t{\n\t\t0x85e04019, 0x332bf567, 0x662dbfff, 0xcfc65693, 0x2a8d7f6f, 0xab9bc912, 0xde6008a1, 0x2028da1f,\n\t\t0x0227bce7, 0x4d642916, 0x18fac300, 0x50f18b82, 0x2cb2cb11, 0xb232e75c, 0x4b3695f2, 0xb28707de,\n\t\t0xa05fbcf6, 0xcd4181e9, 0xe150210c, 0xe24ef1bd, 0xb168c381, 0xfde4e789, 0x5c79b0d8, 0x1e8bfd43,\n\t\t0x4d495001, 0x38be4341, 0x913cee1d, 0x92a79c3f, 0x089766be, 0xbaeeadf4, 0x1286becf, 0xb6eacb19,\n\t\t0x2660c200, 0x7565bde4, 0x64241f7a, 0x8248dca9, 0xc3b3ad66, 0x28136086, 0x0bd8dfa8, 0x356d1cf2,\n\t\t0x107789be, 0xb3b2e9ce, 0x0502aa8f, 0x0bc0351e, 0x166bf52a, 0xeb12ff82, 0xe3486911, 0xd34d7516,\n\t\t0x4e7b3aff, 0x5f43671b, 0x9cf6e037, 0x4981ac83, 0x334266ce, 0x8c9341b7, 0xd0d854c0, 0xcb3a6c88,\n\t\t0x47bc2829, 0x4725ba37, 0xa66ad22b, 0x7ad61f1e, 0x0c5cbafa, 0x4437f107, 0xb6e79962, 0x42d2d816,\n\t\t0x0a961288, 0xe1a5c06e, 0x13749e67, 0x72fc081a, 0xb1d139f7, 0xf9583745, 0xcf19df58, 0xbec3f756,\n\t\t0xc06eba30, 0x07211b24, 0x45c28829, 0xc95e317f, 0xbc8ec511, 0x38bc46e9, 0xc6e6fa14, 0xbae8584a,\n\t\t0xad4ebc46, 0x468f508b, 0x7829435f, 0xf124183b, 0x821dba9f, 0xaff60ff4, 0xea2c4e6d, 0x16e39264,\n\t\t0x92544a8b, 0x009b4fc3, 0xaba68ced, 0x9ac96f78, 0x06a5b79a, 0xb2856e6e, 0x1aec3ca9, 0xbe838688,\n\t\t0x0e0804e9, 0x55f1be56, 0xe7e5363b, 0xb3a1f25d, 0xf7debb85, 0x61fe033c, 0x16746233, 0x3c034c28,\n\t\t0xda6d0c74, 0x79aac56c, 0x3ce4e1ad, 0x51f0c802, 0x98f8f35a, 0x1626a49f, 0xeed82b29, 0x1d382fe3,\n\t\t0x0c4fb99a, 0xbb325778, 0x3ec6d97b, 0x6e77a6a9, 0xcb658b5c, 0xd45230c7, 0x2bd1408b, 0x60c03eb7,\n\t\t0xb9068d78, 0xa33754f4, 0xf430c87d, 0xc8a71302, 0xb96d8c32, 0xebd4e7be, 0xbe8b9d2d, 0x7979fb06,\n\t\t0xe7225308, 0x8b75cf77, 0x11ef8da4, 0xe083c858, 0x8d6b786f, 0x5a6317a6, 0xfa5cf7a0, 0x5dda0033,\n\t\t0xf28ebfb0, 0xf5b9c310, 0xa0eac280, 0x08b9767a, 0xa3d9d2b0, 0x79d34217, 0x021a718d, 0x9ac6336a,\n\t\t0x2711fd60, 0x438050e3, 0x069908a8, 0x3d7fedc4, 0x826d2bef, 0x4eeb8476, 0x488dcf25, 0x36c9d566,\n\t\t0x28e74e41, 0xc2610aca, 0x3d49a9cf, 0xbae3b9df, 0xb65f8de6, 0x92aeaf64, 0x3ac7d5e6, 0x9ea80509,\n\t\t0xf22b017d, 0xa4173f70, 0xdd1e16c3, 0x15e0d7f9, 0x50b1b887, 0x2b9f4fd5, 0x625aba82, 0x6a017962,\n\t\t0x2ec01b9c, 0x15488aa9, 0xd716e740, 0x40055a2c, 0x93d29a22, 0xe32dbf9a, 0x058745b9, 0x3453dc1e,\n\t\t0xd699296e, 0x496cff6f, 0x1c9f4986, 0xdfe2ed07, 0xb87242d1, 0x19de7eae, 0x053e561a, 0x15ad6f8c,\n\t\t0x66626c1c, 0x7154c24c, 0xea082b2a, 0x93eb2939, 0x17dcb0f0, 0x58d4f2ae, 0x9ea294fb, 0x52cf564c,\n\t\t0x9883fe66, 0x2ec40581, 0x763953c3, 0x01d6692e, 0xd3a0c108, 0xa1e7160e, 0xe4f2dfa6, 0x693ed285,\n\t\t0x74904698, 0x4c2b0edd, 0x4f757656, 0x5d393378, 0xa132234f, 0x3d321c5d, 0xc3f5e194, 0x4b269301,\n\t\t0xc79f022f, 0x3c997e7e, 0x5e4f9504, 0x3ffafbbd, 0x76f7ad0e, 0x296693f4, 0x3d1fce6f, 0xc61e45be,\n\t\t0xd3b5ab34, 0xf72bf9b7, 0x1b0434c0, 0x4e72b567, 0x5592a33d, 0xb5229301, 0xcfd2a87f, 0x60aeb767,\n\t\t0x1814386b, 0x30bcc33d, 0x38a0c07d, 0xfd1606f2, 0xc363519b, 0x589dd390, 0x5479f8e6, 0x1cb8d647,\n\t\t0x97fd61a9, 0xea7759f4, 0x2d57539d, 0x569a58cf, 0xe84e63ad, 0x462e1b78, 0x6580f87e, 0xf3817914,\n\t\t0x91da55f4, 0x40a230f3, 0xd1988f35, 0xb6e318d2, 0x3ffa50bc, 0x3d40f021, 0xc3c0bdae, 0x4958c24c,\n\t\t0x518f36b2, 0x84b1d370, 0x0fedce83, 0x878ddada, 0xf2a279c7, 0x94e01be8, 0x90716f4b, 0x954b8aa3,\n\t},\n\t{\n\t\t0xe216300d, 0xbbddfffc, 0xa7ebdabd, 0x35648095, 0x7789f8b7, 0xe6c1121b, 0x0e241600, 0x052ce8b5,\n\t\t0x11a9cfb0, 0xe5952f11, 0xece7990a, 0x9386d174, 0x2a42931c, 0x76e38111, 0xb12def3a, 0x37ddddfc,\n\t\t0xde9adeb1, 0x0a0cc32c, 0xbe197029, 0x84a00940, 0xbb243a0f, 0xb4d137cf, 0xb44e79f0, 0x049eedfd,\n\t\t0x0b15a15d, 0x480d3168, 0x8bbbde5a, 0x669ded42, 0xc7ece831, 0x3f8f95e7, 0x72df191b, 0x7580330d,\n\t\t0x94074251, 0x5c7dcdfa, 0xabbe6d63, 0xaa402164, 0xb301d40a, 0x02e7d1ca, 0x53571dae, 0x7a3182a2,\n\t\t0x12a8ddec, 0xfdaa335d, 0x176f43e8, 0x71fb46d4, 0x38129022, 0xce949ad4, 0xb84769ad, 0x965bd862,\n\t\t0x82f3d055, 0x66fb9767, 0x15b80b4e, 0x1d5b47a0, 0x4cfde06f, 0xc28ec4b8, 0x57e8726e, 0x647a78fc,\n\t\t0x99865d44, 0x608bd593, 0x6c200e03, 0x39dc5ff6, 0x5d0b00a3, 0xae63aff2, 0x7e8bd632, 0x70108c0c,\n\t\t0xbbd35049, 0x2998df04, 0x980cf42a, 0x9b6df491, 0x9e7edd53, 0x06918548, 0x58cb7e07, 0x3b74ef2e,\n\t\t0x522fffb1, 0xd24708cc, 0x1c7e27cd, 0xa4eb215b, 0x3cf1d2e2, 0x19b47a38, 0x424f7618, 0x35856039,\n\t\t0x9d17dee7, 0x27eb35e6, 0xc9aff67b, 0x36baf5b8, 0x09c467cd, 0xc18910b1, 0xe11dbf7b, 0x06cd1af8,\n\t\t0x7170c608, 0x2d5e3354, 0xd4de495a, 0x64c6d006, 0xbcc0c62c, 0x3dd00db3, 0x708f8f34, 0x77d51b42,\n\t\t0x264f620f, 0x24b8d2bf, 0x15c1b79e, 0x46a52564, 0xf8d7e54e, 0x3e378160, 0x7895cda5, 0x859c15a5,\n\t\t0xe6459788, 0xc37bc75f, 0xdb07ba0c, 0x0676a3ab, 0x7f229b1e, 0x31842e7b, 0x24259fd7, 0xf8bef472,\n\t\t0x835ffcb8, 0x6df4c1f2, 0x96f5b195, 0xfd0af0fc, 0xb0fe134c, 0xe2506d3d, 0x4f9b12ea, 0xf215f225,\n\t\t0xa223736f, 0x9fb4c428, 0x25d04979, 0x34c713f8, 0xc4618187, 0xea7a6e98, 0x7cd16efc, 0x1436876c,\n\t\t0xf1544107, 0xbedeee14, 0x56e9af27, 0xa04aa441, 0x3cf7c899, 0x92ecbae6, 0xdd67016d, 0x151682eb,\n\t\t0xa842eedf, 0xfdba60b4, 0xf1907b75, 0x20e3030f, 0x24d8c29e, 0xe139673b, 0xefa63fb8, 0x71873054,\n\t\t0xb6f2cf3b, 0x9f326442, 0xcb15a4cc, 0xb01a4504, 0xf1e47d8d, 0x844a1be5, 0xbae7dfdc, 0x42cbda70,\n\t\t0xcd7dae0a, 0x57e85b7a, 0xd53f5af6, 0x20cf4d8c, 0xcea4d428, 0x79d130a4, 0x3486ebfb, 0x33d3cddc,\n\t\t0x77853b53, 0x37effcb5, 0xc5068778, 0xe580b3e6, 0x4e68b8f4, 0xc5c8b37e, 0x0d809ea2, 0x398feb7c,\n\t\t0x132a4f94, 0x43b7950e, 0x2fee7d1c, 0x223613bd, 0xdd06caa2, 0x37df932b, 0xc4248289, 0xacf3ebc3,\n\t\t0x5715f6b7, 0xef3478dd, 0xf267616f, 0xc148cbe4, 0x9052815e, 0x5e410fab, 0xb48a2465, 0x2eda7fa4,\n\t\t0xe87b40e4, 0xe98ea084, 0x5889e9e1, 0xefd390fc, 0xdd07d35b, 0xdb485694, 0x38d7e5b2, 0x57720101,\n\t\t0x730edebc, 0x5b643113, 0x94917e4f, 0x503c2fba, 0x646f1282, 0x7523d24a, 0xe0779695, 0xf9c17a8f,\n\t\t0x7a5b2121, 0xd187b896, 0x29263a4d, 0xba510cdf, 0x81f47c9f, 0xad1163ed, 0xea7b5965, 0x1a00726e,\n\t\t0x11403092, 0x00da6d77, 0x4a0cdd61, 0xad1f4603, 0x605bdfb0, 0x9eedc364, 0x22ebe6a8, 0xcee7d28a,\n\t\t0xa0e736a0, 0x5564a6b9, 0x10853209, 0xc7eb8f37, 0x2de705ca, 0x8951570f, 0xdf09822b, 0xbd691a6c,\n\t\t0xaa12e4f2, 0x87451c0f, 0xe0f6a27a, 0x3ada4819, 0x4cf1764f, 0x0d771c2b, 0x67cdb156, 0x350d8384,\n\t\t0x5938fa0f, 0x42399ef3, 0x36997b07, 0x0e84093d, 0x4aa93e61, 0x8360d87b, 0x1fa98b0c, 0x1149382c,\n\t\t0xe97625a5, 0x0614d1b7, 0x0e25244b, 0x0c768347, 0x589e8d82, 0x0d2059d1, 0xa466bb1e, 0xf8da0a82,\n\t\t0x04f19130, 0xba6e4ec0, 0x99265164, 0x1ee7230d, 0x50b2ad80, 0xeaee6801, 0x8db2a283, 0xea8bf59e,\n\t},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/openpgp/armor/armor.go",
    "content": "// Copyright 2010 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package armor implements OpenPGP ASCII Armor, see RFC 4880. OpenPGP Armor is\n// very similar to PEM except that it has an additional CRC checksum.\npackage armor // import \"golang.org/x/crypto/openpgp/armor\"\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"encoding/base64\"\n\t\"golang.org/x/crypto/openpgp/errors\"\n\t\"io\"\n)\n\n// A Block represents an OpenPGP armored structure.\n//\n// The encoded form is:\n//    -----BEGIN Type-----\n//    Headers\n//\n//    base64-encoded Bytes\n//    '=' base64 encoded checksum\n//    -----END Type-----\n// where Headers is a possibly empty sequence of Key: Value lines.\n//\n// Since the armored data can be very large, this package presents a streaming\n// interface.\ntype Block struct {\n\tType    string            // The type, taken from the preamble (i.e. \"PGP SIGNATURE\").\n\tHeader  map[string]string // Optional headers.\n\tBody    io.Reader         // A Reader from which the contents can be read\n\tlReader lineReader\n\toReader openpgpReader\n}\n\nvar ArmorCorrupt error = errors.StructuralError(\"armor invalid\")\n\nconst crc24Init = 0xb704ce\nconst crc24Poly = 0x1864cfb\nconst crc24Mask = 0xffffff\n\n// crc24 calculates the OpenPGP checksum as specified in RFC 4880, section 6.1\nfunc crc24(crc uint32, d []byte) uint32 {\n\tfor _, b := range d {\n\t\tcrc ^= uint32(b) << 16\n\t\tfor i := 0; i < 8; i++ {\n\t\t\tcrc <<= 1\n\t\t\tif crc&0x1000000 != 0 {\n\t\t\t\tcrc ^= crc24Poly\n\t\t\t}\n\t\t}\n\t}\n\treturn crc\n}\n\nvar armorStart = []byte(\"-----BEGIN \")\nvar armorEnd = []byte(\"-----END \")\nvar armorEndOfLine = []byte(\"-----\")\n\n// lineReader wraps a line based reader. It watches for the end of an armor\n// block and records the expected CRC value.\ntype lineReader struct {\n\tin  *bufio.Reader\n\tbuf []byte\n\teof bool\n\tcrc uint32\n}\n\nfunc (l *lineReader) Read(p []byte) (n int, err error) {\n\tif l.eof {\n\t\treturn 0, io.EOF\n\t}\n\n\tif len(l.buf) > 0 {\n\t\tn = copy(p, l.buf)\n\t\tl.buf = l.buf[n:]\n\t\treturn\n\t}\n\n\tline, isPrefix, err := l.in.ReadLine()\n\tif err != nil {\n\t\treturn\n\t}\n\tif isPrefix {\n\t\treturn 0, ArmorCorrupt\n\t}\n\n\tif len(line) == 5 && line[0] == '=' {\n\t\t// This is the checksum line\n\t\tvar expectedBytes [3]byte\n\t\tvar m int\n\t\tm, err = base64.StdEncoding.Decode(expectedBytes[0:], line[1:])\n\t\tif m != 3 || err != nil {\n\t\t\treturn\n\t\t}\n\t\tl.crc = uint32(expectedBytes[0])<<16 |\n\t\t\tuint32(expectedBytes[1])<<8 |\n\t\t\tuint32(expectedBytes[2])\n\n\t\tline, _, err = l.in.ReadLine()\n\t\tif err != nil && err != io.EOF {\n\t\t\treturn\n\t\t}\n\t\tif !bytes.HasPrefix(line, armorEnd) {\n\t\t\treturn 0, ArmorCorrupt\n\t\t}\n\n\t\tl.eof = true\n\t\treturn 0, io.EOF\n\t}\n\n\tif len(line) > 96 {\n\t\treturn 0, ArmorCorrupt\n\t}\n\n\tn = copy(p, line)\n\tbytesToSave := len(line) - n\n\tif bytesToSave > 0 {\n\t\tif cap(l.buf) < bytesToSave {\n\t\t\tl.buf = make([]byte, 0, bytesToSave)\n\t\t}\n\t\tl.buf = l.buf[0:bytesToSave]\n\t\tcopy(l.buf, line[n:])\n\t}\n\n\treturn\n}\n\n// openpgpReader passes Read calls to the underlying base64 decoder, but keeps\n// a running CRC of the resulting data and checks the CRC against the value\n// found by the lineReader at EOF.\ntype openpgpReader struct {\n\tlReader    *lineReader\n\tb64Reader  io.Reader\n\tcurrentCRC uint32\n}\n\nfunc (r *openpgpReader) Read(p []byte) (n int, err error) {\n\tn, err = r.b64Reader.Read(p)\n\tr.currentCRC = crc24(r.currentCRC, p[:n])\n\n\tif err == io.EOF {\n\t\tif r.lReader.crc != uint32(r.currentCRC&crc24Mask) {\n\t\t\treturn 0, ArmorCorrupt\n\t\t}\n\t}\n\n\treturn\n}\n\n// Decode reads a PGP armored block from the given Reader. It will ignore\n// leading garbage. If it doesn't find a block, it will return nil, io.EOF. The\n// given Reader is not usable after calling this function: an arbitrary amount\n// of data may have been read past the end of the block.\nfunc Decode(in io.Reader) (p *Block, err error) {\n\tr := bufio.NewReaderSize(in, 100)\n\tvar line []byte\n\tignoreNext := false\n\nTryNextBlock:\n\tp = nil\n\n\t// Skip leading garbage\n\tfor {\n\t\tignoreThis := ignoreNext\n\t\tline, ignoreNext, err = r.ReadLine()\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t\tif ignoreNext || ignoreThis {\n\t\t\tcontinue\n\t\t}\n\t\tline = bytes.TrimSpace(line)\n\t\tif len(line) > len(armorStart)+len(armorEndOfLine) && bytes.HasPrefix(line, armorStart) {\n\t\t\tbreak\n\t\t}\n\t}\n\n\tp = new(Block)\n\tp.Type = string(line[len(armorStart) : len(line)-len(armorEndOfLine)])\n\tp.Header = make(map[string]string)\n\tnextIsContinuation := false\n\tvar lastKey string\n\n\t// Read headers\n\tfor {\n\t\tisContinuation := nextIsContinuation\n\t\tline, nextIsContinuation, err = r.ReadLine()\n\t\tif err != nil {\n\t\t\tp = nil\n\t\t\treturn\n\t\t}\n\t\tif isContinuation {\n\t\t\tp.Header[lastKey] += string(line)\n\t\t\tcontinue\n\t\t}\n\t\tline = bytes.TrimSpace(line)\n\t\tif len(line) == 0 {\n\t\t\tbreak\n\t\t}\n\n\t\ti := bytes.Index(line, []byte(\": \"))\n\t\tif i == -1 {\n\t\t\tgoto TryNextBlock\n\t\t}\n\t\tlastKey = string(line[:i])\n\t\tp.Header[lastKey] = string(line[i+2:])\n\t}\n\n\tp.lReader.in = r\n\tp.oReader.currentCRC = crc24Init\n\tp.oReader.lReader = &p.lReader\n\tp.oReader.b64Reader = base64.NewDecoder(base64.StdEncoding, &p.lReader)\n\tp.Body = &p.oReader\n\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/openpgp/armor/encode.go",
    "content": "// Copyright 2010 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage armor\n\nimport (\n\t\"encoding/base64\"\n\t\"io\"\n)\n\nvar armorHeaderSep = []byte(\": \")\nvar blockEnd = []byte(\"\\n=\")\nvar newline = []byte(\"\\n\")\nvar armorEndOfLineOut = []byte(\"-----\\n\")\n\n// writeSlices writes its arguments to the given Writer.\nfunc writeSlices(out io.Writer, slices ...[]byte) (err error) {\n\tfor _, s := range slices {\n\t\t_, err = out.Write(s)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn\n}\n\n// lineBreaker breaks data across several lines, all of the same byte length\n// (except possibly the last). Lines are broken with a single '\\n'.\ntype lineBreaker struct {\n\tlineLength  int\n\tline        []byte\n\tused        int\n\tout         io.Writer\n\thaveWritten bool\n}\n\nfunc newLineBreaker(out io.Writer, lineLength int) *lineBreaker {\n\treturn &lineBreaker{\n\t\tlineLength: lineLength,\n\t\tline:       make([]byte, lineLength),\n\t\tused:       0,\n\t\tout:        out,\n\t}\n}\n\nfunc (l *lineBreaker) Write(b []byte) (n int, err error) {\n\tn = len(b)\n\n\tif n == 0 {\n\t\treturn\n\t}\n\n\tif l.used == 0 && l.haveWritten {\n\t\t_, err = l.out.Write([]byte{'\\n'})\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t}\n\n\tif l.used+len(b) < l.lineLength {\n\t\tl.used += copy(l.line[l.used:], b)\n\t\treturn\n\t}\n\n\tl.haveWritten = true\n\t_, err = l.out.Write(l.line[0:l.used])\n\tif err != nil {\n\t\treturn\n\t}\n\texcess := l.lineLength - l.used\n\tl.used = 0\n\n\t_, err = l.out.Write(b[0:excess])\n\tif err != nil {\n\t\treturn\n\t}\n\n\t_, err = l.Write(b[excess:])\n\treturn\n}\n\nfunc (l *lineBreaker) Close() (err error) {\n\tif l.used > 0 {\n\t\t_, err = l.out.Write(l.line[0:l.used])\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t}\n\n\treturn\n}\n\n// encoding keeps track of a running CRC24 over the data which has been written\n// to it and outputs a OpenPGP checksum when closed, followed by an armor\n// trailer.\n//\n// It's built into a stack of io.Writers:\n//    encoding -> base64 encoder -> lineBreaker -> out\ntype encoding struct {\n\tout       io.Writer\n\tbreaker   *lineBreaker\n\tb64       io.WriteCloser\n\tcrc       uint32\n\tblockType []byte\n}\n\nfunc (e *encoding) Write(data []byte) (n int, err error) {\n\te.crc = crc24(e.crc, data)\n\treturn e.b64.Write(data)\n}\n\nfunc (e *encoding) Close() (err error) {\n\terr = e.b64.Close()\n\tif err != nil {\n\t\treturn\n\t}\n\te.breaker.Close()\n\n\tvar checksumBytes [3]byte\n\tchecksumBytes[0] = byte(e.crc >> 16)\n\tchecksumBytes[1] = byte(e.crc >> 8)\n\tchecksumBytes[2] = byte(e.crc)\n\n\tvar b64ChecksumBytes [4]byte\n\tbase64.StdEncoding.Encode(b64ChecksumBytes[:], checksumBytes[:])\n\n\treturn writeSlices(e.out, blockEnd, b64ChecksumBytes[:], newline, armorEnd, e.blockType, armorEndOfLine)\n}\n\n// Encode returns a WriteCloser which will encode the data written to it in\n// OpenPGP armor.\nfunc Encode(out io.Writer, blockType string, headers map[string]string) (w io.WriteCloser, err error) {\n\tbType := []byte(blockType)\n\terr = writeSlices(out, armorStart, bType, armorEndOfLineOut)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tfor k, v := range headers {\n\t\terr = writeSlices(out, []byte(k), armorHeaderSep, []byte(v), newline)\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t}\n\n\t_, err = out.Write(newline)\n\tif err != nil {\n\t\treturn\n\t}\n\n\te := &encoding{\n\t\tout:       out,\n\t\tbreaker:   newLineBreaker(out, 64),\n\t\tcrc:       crc24Init,\n\t\tblockType: bType,\n\t}\n\te.b64 = base64.NewEncoder(base64.StdEncoding, e.breaker)\n\treturn e, nil\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/openpgp/canonical_text.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage openpgp\n\nimport \"hash\"\n\n// NewCanonicalTextHash reformats text written to it into the canonical\n// form and then applies the hash h.  See RFC 4880, section 5.2.1.\nfunc NewCanonicalTextHash(h hash.Hash) hash.Hash {\n\treturn &canonicalTextHash{h, 0}\n}\n\ntype canonicalTextHash struct {\n\th hash.Hash\n\ts int\n}\n\nvar newline = []byte{'\\r', '\\n'}\n\nfunc (cth *canonicalTextHash) Write(buf []byte) (int, error) {\n\tstart := 0\n\n\tfor i, c := range buf {\n\t\tswitch cth.s {\n\t\tcase 0:\n\t\t\tif c == '\\r' {\n\t\t\t\tcth.s = 1\n\t\t\t} else if c == '\\n' {\n\t\t\t\tcth.h.Write(buf[start:i])\n\t\t\t\tcth.h.Write(newline)\n\t\t\t\tstart = i + 1\n\t\t\t}\n\t\tcase 1:\n\t\t\tcth.s = 0\n\t\t}\n\t}\n\n\tcth.h.Write(buf[start:])\n\treturn len(buf), nil\n}\n\nfunc (cth *canonicalTextHash) Sum(in []byte) []byte {\n\treturn cth.h.Sum(in)\n}\n\nfunc (cth *canonicalTextHash) Reset() {\n\tcth.h.Reset()\n\tcth.s = 0\n}\n\nfunc (cth *canonicalTextHash) Size() int {\n\treturn cth.h.Size()\n}\n\nfunc (cth *canonicalTextHash) BlockSize() int {\n\treturn cth.h.BlockSize()\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/openpgp/elgamal/elgamal.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package elgamal implements ElGamal encryption, suitable for OpenPGP,\n// as specified in \"A Public-Key Cryptosystem and a Signature Scheme Based on\n// Discrete Logarithms,\" IEEE Transactions on Information Theory, v. IT-31,\n// n. 4, 1985, pp. 469-472.\n//\n// This form of ElGamal embeds PKCS#1 v1.5 padding, which may make it\n// unsuitable for other protocols. RSA should be used in preference in any\n// case.\npackage elgamal // import \"golang.org/x/crypto/openpgp/elgamal\"\n\nimport (\n\t\"crypto/rand\"\n\t\"crypto/subtle\"\n\t\"errors\"\n\t\"io\"\n\t\"math/big\"\n)\n\n// PublicKey represents an ElGamal public key.\ntype PublicKey struct {\n\tG, P, Y *big.Int\n}\n\n// PrivateKey represents an ElGamal private key.\ntype PrivateKey struct {\n\tPublicKey\n\tX *big.Int\n}\n\n// Encrypt encrypts the given message to the given public key. The result is a\n// pair of integers. Errors can result from reading random, or because msg is\n// too large to be encrypted to the public key.\nfunc Encrypt(random io.Reader, pub *PublicKey, msg []byte) (c1, c2 *big.Int, err error) {\n\tpLen := (pub.P.BitLen() + 7) / 8\n\tif len(msg) > pLen-11 {\n\t\terr = errors.New(\"elgamal: message too long\")\n\t\treturn\n\t}\n\n\t// EM = 0x02 || PS || 0x00 || M\n\tem := make([]byte, pLen-1)\n\tem[0] = 2\n\tps, mm := em[1:len(em)-len(msg)-1], em[len(em)-len(msg):]\n\terr = nonZeroRandomBytes(ps, random)\n\tif err != nil {\n\t\treturn\n\t}\n\tem[len(em)-len(msg)-1] = 0\n\tcopy(mm, msg)\n\n\tm := new(big.Int).SetBytes(em)\n\n\tk, err := rand.Int(random, pub.P)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tc1 = new(big.Int).Exp(pub.G, k, pub.P)\n\ts := new(big.Int).Exp(pub.Y, k, pub.P)\n\tc2 = s.Mul(s, m)\n\tc2.Mod(c2, pub.P)\n\n\treturn\n}\n\n// Decrypt takes two integers, resulting from an ElGamal encryption, and\n// returns the plaintext of the message. An error can result only if the\n// ciphertext is invalid. Users should keep in mind that this is a padding\n// oracle and thus, if exposed to an adaptive chosen ciphertext attack, can\n// be used to break the cryptosystem.  See ``Chosen Ciphertext Attacks\n// Against Protocols Based on the RSA Encryption Standard PKCS #1'', Daniel\n// Bleichenbacher, Advances in Cryptology (Crypto '98),\nfunc Decrypt(priv *PrivateKey, c1, c2 *big.Int) (msg []byte, err error) {\n\ts := new(big.Int).Exp(c1, priv.X, priv.P)\n\ts.ModInverse(s, priv.P)\n\ts.Mul(s, c2)\n\ts.Mod(s, priv.P)\n\tem := s.Bytes()\n\n\tfirstByteIsTwo := subtle.ConstantTimeByteEq(em[0], 2)\n\n\t// The remainder of the plaintext must be a string of non-zero random\n\t// octets, followed by a 0, followed by the message.\n\t//   lookingForIndex: 1 iff we are still looking for the zero.\n\t//   index: the offset of the first zero byte.\n\tvar lookingForIndex, index int\n\tlookingForIndex = 1\n\n\tfor i := 1; i < len(em); i++ {\n\t\tequals0 := subtle.ConstantTimeByteEq(em[i], 0)\n\t\tindex = subtle.ConstantTimeSelect(lookingForIndex&equals0, i, index)\n\t\tlookingForIndex = subtle.ConstantTimeSelect(equals0, 0, lookingForIndex)\n\t}\n\n\tif firstByteIsTwo != 1 || lookingForIndex != 0 || index < 9 {\n\t\treturn nil, errors.New(\"elgamal: decryption error\")\n\t}\n\treturn em[index+1:], nil\n}\n\n// nonZeroRandomBytes fills the given slice with non-zero random octets.\nfunc nonZeroRandomBytes(s []byte, rand io.Reader) (err error) {\n\t_, err = io.ReadFull(rand, s)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tfor i := 0; i < len(s); i++ {\n\t\tfor s[i] == 0 {\n\t\t\t_, err = io.ReadFull(rand, s[i:i+1])\n\t\t\tif err != nil {\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t}\n\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/openpgp/errors/errors.go",
    "content": "// Copyright 2010 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package errors contains common error types for the OpenPGP packages.\npackage errors // import \"golang.org/x/crypto/openpgp/errors\"\n\nimport (\n\t\"strconv\"\n)\n\n// A StructuralError is returned when OpenPGP data is found to be syntactically\n// invalid.\ntype StructuralError string\n\nfunc (s StructuralError) Error() string {\n\treturn \"openpgp: invalid data: \" + string(s)\n}\n\n// UnsupportedError indicates that, although the OpenPGP data is valid, it\n// makes use of currently unimplemented features.\ntype UnsupportedError string\n\nfunc (s UnsupportedError) Error() string {\n\treturn \"openpgp: unsupported feature: \" + string(s)\n}\n\n// InvalidArgumentError indicates that the caller is in error and passed an\n// incorrect value.\ntype InvalidArgumentError string\n\nfunc (i InvalidArgumentError) Error() string {\n\treturn \"openpgp: invalid argument: \" + string(i)\n}\n\n// SignatureError indicates that a syntactically valid signature failed to\n// validate.\ntype SignatureError string\n\nfunc (b SignatureError) Error() string {\n\treturn \"openpgp: invalid signature: \" + string(b)\n}\n\ntype keyIncorrectError int\n\nfunc (ki keyIncorrectError) Error() string {\n\treturn \"openpgp: incorrect key\"\n}\n\nvar ErrKeyIncorrect error = keyIncorrectError(0)\n\ntype unknownIssuerError int\n\nfunc (unknownIssuerError) Error() string {\n\treturn \"openpgp: signature made by unknown entity\"\n}\n\nvar ErrUnknownIssuer error = unknownIssuerError(0)\n\ntype keyRevokedError int\n\nfunc (keyRevokedError) Error() string {\n\treturn \"openpgp: signature made by revoked key\"\n}\n\nvar ErrKeyRevoked error = keyRevokedError(0)\n\ntype UnknownPacketTypeError uint8\n\nfunc (upte UnknownPacketTypeError) Error() string {\n\treturn \"openpgp: unknown packet type: \" + strconv.Itoa(int(upte))\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/openpgp/keys.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage openpgp\n\nimport (\n\t\"crypto/rsa\"\n\t\"io\"\n\t\"time\"\n\n\t\"golang.org/x/crypto/openpgp/armor\"\n\t\"golang.org/x/crypto/openpgp/errors\"\n\t\"golang.org/x/crypto/openpgp/packet\"\n)\n\n// PublicKeyType is the armor type for a PGP public key.\nvar PublicKeyType = \"PGP PUBLIC KEY BLOCK\"\n\n// PrivateKeyType is the armor type for a PGP private key.\nvar PrivateKeyType = \"PGP PRIVATE KEY BLOCK\"\n\n// An Entity represents the components of an OpenPGP key: a primary public key\n// (which must be a signing key), one or more identities claimed by that key,\n// and zero or more subkeys, which may be encryption keys.\ntype Entity struct {\n\tPrimaryKey  *packet.PublicKey\n\tPrivateKey  *packet.PrivateKey\n\tIdentities  map[string]*Identity // indexed by Identity.Name\n\tRevocations []*packet.Signature\n\tSubkeys     []Subkey\n}\n\n// An Identity represents an identity claimed by an Entity and zero or more\n// assertions by other entities about that claim.\ntype Identity struct {\n\tName          string // by convention, has the form \"Full Name (comment) <email@example.com>\"\n\tUserId        *packet.UserId\n\tSelfSignature *packet.Signature\n\tSignatures    []*packet.Signature\n}\n\n// A Subkey is an additional public key in an Entity. Subkeys can be used for\n// encryption.\ntype Subkey struct {\n\tPublicKey  *packet.PublicKey\n\tPrivateKey *packet.PrivateKey\n\tSig        *packet.Signature\n}\n\n// A Key identifies a specific public key in an Entity. This is either the\n// Entity's primary key or a subkey.\ntype Key struct {\n\tEntity        *Entity\n\tPublicKey     *packet.PublicKey\n\tPrivateKey    *packet.PrivateKey\n\tSelfSignature *packet.Signature\n}\n\n// A KeyRing provides access to public and private keys.\ntype KeyRing interface {\n\t// KeysById returns the set of keys that have the given key id.\n\tKeysById(id uint64) []Key\n\t// KeysByIdAndUsage returns the set of keys with the given id\n\t// that also meet the key usage given by requiredUsage.\n\t// The requiredUsage is expressed as the bitwise-OR of\n\t// packet.KeyFlag* values.\n\tKeysByIdUsage(id uint64, requiredUsage byte) []Key\n\t// DecryptionKeys returns all private keys that are valid for\n\t// decryption.\n\tDecryptionKeys() []Key\n}\n\n// primaryIdentity returns the Identity marked as primary or the first identity\n// if none are so marked.\nfunc (e *Entity) primaryIdentity() *Identity {\n\tvar firstIdentity *Identity\n\tfor _, ident := range e.Identities {\n\t\tif firstIdentity == nil {\n\t\t\tfirstIdentity = ident\n\t\t}\n\t\tif ident.SelfSignature.IsPrimaryId != nil && *ident.SelfSignature.IsPrimaryId {\n\t\t\treturn ident\n\t\t}\n\t}\n\treturn firstIdentity\n}\n\n// encryptionKey returns the best candidate Key for encrypting a message to the\n// given Entity.\nfunc (e *Entity) encryptionKey(now time.Time) (Key, bool) {\n\tcandidateSubkey := -1\n\n\t// Iterate the keys to find the newest key\n\tvar maxTime time.Time\n\tfor i, subkey := range e.Subkeys {\n\t\tif subkey.Sig.FlagsValid &&\n\t\t\tsubkey.Sig.FlagEncryptCommunications &&\n\t\t\tsubkey.PublicKey.PubKeyAlgo.CanEncrypt() &&\n\t\t\t!subkey.Sig.KeyExpired(now) &&\n\t\t\t(maxTime.IsZero() || subkey.Sig.CreationTime.After(maxTime)) {\n\t\t\tcandidateSubkey = i\n\t\t\tmaxTime = subkey.Sig.CreationTime\n\t\t}\n\t}\n\n\tif candidateSubkey != -1 {\n\t\tsubkey := e.Subkeys[candidateSubkey]\n\t\treturn Key{e, subkey.PublicKey, subkey.PrivateKey, subkey.Sig}, true\n\t}\n\n\t// If we don't have any candidate subkeys for encryption and\n\t// the primary key doesn't have any usage metadata then we\n\t// assume that the primary key is ok. Or, if the primary key is\n\t// marked as ok to encrypt to, then we can obviously use it.\n\ti := e.primaryIdentity()\n\tif !i.SelfSignature.FlagsValid || i.SelfSignature.FlagEncryptCommunications &&\n\t\te.PrimaryKey.PubKeyAlgo.CanEncrypt() &&\n\t\t!i.SelfSignature.KeyExpired(now) {\n\t\treturn Key{e, e.PrimaryKey, e.PrivateKey, i.SelfSignature}, true\n\t}\n\n\t// This Entity appears to be signing only.\n\treturn Key{}, false\n}\n\n// signingKey return the best candidate Key for signing a message with this\n// Entity.\nfunc (e *Entity) signingKey(now time.Time) (Key, bool) {\n\tcandidateSubkey := -1\n\n\tfor i, subkey := range e.Subkeys {\n\t\tif subkey.Sig.FlagsValid &&\n\t\t\tsubkey.Sig.FlagSign &&\n\t\t\tsubkey.PublicKey.PubKeyAlgo.CanSign() &&\n\t\t\t!subkey.Sig.KeyExpired(now) {\n\t\t\tcandidateSubkey = i\n\t\t\tbreak\n\t\t}\n\t}\n\n\tif candidateSubkey != -1 {\n\t\tsubkey := e.Subkeys[candidateSubkey]\n\t\treturn Key{e, subkey.PublicKey, subkey.PrivateKey, subkey.Sig}, true\n\t}\n\n\t// If we have no candidate subkey then we assume that it's ok to sign\n\t// with the primary key.\n\ti := e.primaryIdentity()\n\tif !i.SelfSignature.FlagsValid || i.SelfSignature.FlagSign &&\n\t\t!i.SelfSignature.KeyExpired(now) {\n\t\treturn Key{e, e.PrimaryKey, e.PrivateKey, i.SelfSignature}, true\n\t}\n\n\treturn Key{}, false\n}\n\n// An EntityList contains one or more Entities.\ntype EntityList []*Entity\n\n// KeysById returns the set of keys that have the given key id.\nfunc (el EntityList) KeysById(id uint64) (keys []Key) {\n\tfor _, e := range el {\n\t\tif e.PrimaryKey.KeyId == id {\n\t\t\tvar selfSig *packet.Signature\n\t\t\tfor _, ident := range e.Identities {\n\t\t\t\tif selfSig == nil {\n\t\t\t\t\tselfSig = ident.SelfSignature\n\t\t\t\t} else if ident.SelfSignature.IsPrimaryId != nil && *ident.SelfSignature.IsPrimaryId {\n\t\t\t\t\tselfSig = ident.SelfSignature\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tkeys = append(keys, Key{e, e.PrimaryKey, e.PrivateKey, selfSig})\n\t\t}\n\n\t\tfor _, subKey := range e.Subkeys {\n\t\t\tif subKey.PublicKey.KeyId == id {\n\t\t\t\tkeys = append(keys, Key{e, subKey.PublicKey, subKey.PrivateKey, subKey.Sig})\n\t\t\t}\n\t\t}\n\t}\n\treturn\n}\n\n// KeysByIdAndUsage returns the set of keys with the given id that also meet\n// the key usage given by requiredUsage.  The requiredUsage is expressed as\n// the bitwise-OR of packet.KeyFlag* values.\nfunc (el EntityList) KeysByIdUsage(id uint64, requiredUsage byte) (keys []Key) {\n\tfor _, key := range el.KeysById(id) {\n\t\tif len(key.Entity.Revocations) > 0 {\n\t\t\tcontinue\n\t\t}\n\n\t\tif key.SelfSignature.RevocationReason != nil {\n\t\t\tcontinue\n\t\t}\n\n\t\tif key.SelfSignature.FlagsValid && requiredUsage != 0 {\n\t\t\tvar usage byte\n\t\t\tif key.SelfSignature.FlagCertify {\n\t\t\t\tusage |= packet.KeyFlagCertify\n\t\t\t}\n\t\t\tif key.SelfSignature.FlagSign {\n\t\t\t\tusage |= packet.KeyFlagSign\n\t\t\t}\n\t\t\tif key.SelfSignature.FlagEncryptCommunications {\n\t\t\t\tusage |= packet.KeyFlagEncryptCommunications\n\t\t\t}\n\t\t\tif key.SelfSignature.FlagEncryptStorage {\n\t\t\t\tusage |= packet.KeyFlagEncryptStorage\n\t\t\t}\n\t\t\tif usage&requiredUsage != requiredUsage {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\tkeys = append(keys, key)\n\t}\n\treturn\n}\n\n// DecryptionKeys returns all private keys that are valid for decryption.\nfunc (el EntityList) DecryptionKeys() (keys []Key) {\n\tfor _, e := range el {\n\t\tfor _, subKey := range e.Subkeys {\n\t\t\tif subKey.PrivateKey != nil && (!subKey.Sig.FlagsValid || subKey.Sig.FlagEncryptStorage || subKey.Sig.FlagEncryptCommunications) {\n\t\t\t\tkeys = append(keys, Key{e, subKey.PublicKey, subKey.PrivateKey, subKey.Sig})\n\t\t\t}\n\t\t}\n\t}\n\treturn\n}\n\n// ReadArmoredKeyRing reads one or more public/private keys from an armor keyring file.\nfunc ReadArmoredKeyRing(r io.Reader) (EntityList, error) {\n\tblock, err := armor.Decode(r)\n\tif err == io.EOF {\n\t\treturn nil, errors.InvalidArgumentError(\"no armored data found\")\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif block.Type != PublicKeyType && block.Type != PrivateKeyType {\n\t\treturn nil, errors.InvalidArgumentError(\"expected public or private key block, got: \" + block.Type)\n\t}\n\n\treturn ReadKeyRing(block.Body)\n}\n\n// ReadKeyRing reads one or more public/private keys. Unsupported keys are\n// ignored as long as at least a single valid key is found.\nfunc ReadKeyRing(r io.Reader) (el EntityList, err error) {\n\tpackets := packet.NewReader(r)\n\tvar lastUnsupportedError error\n\n\tfor {\n\t\tvar e *Entity\n\t\te, err = ReadEntity(packets)\n\t\tif err != nil {\n\t\t\t// TODO: warn about skipped unsupported/unreadable keys\n\t\t\tif _, ok := err.(errors.UnsupportedError); ok {\n\t\t\t\tlastUnsupportedError = err\n\t\t\t\terr = readToNextPublicKey(packets)\n\t\t\t} else if _, ok := err.(errors.StructuralError); ok {\n\t\t\t\t// Skip unreadable, badly-formatted keys\n\t\t\t\tlastUnsupportedError = err\n\t\t\t\terr = readToNextPublicKey(packets)\n\t\t\t}\n\t\t\tif err == io.EOF {\n\t\t\t\terr = nil\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\tel = nil\n\t\t\t\tbreak\n\t\t\t}\n\t\t} else {\n\t\t\tel = append(el, e)\n\t\t}\n\t}\n\n\tif len(el) == 0 && err == nil {\n\t\terr = lastUnsupportedError\n\t}\n\treturn\n}\n\n// readToNextPublicKey reads packets until the start of the entity and leaves\n// the first packet of the new entity in the Reader.\nfunc readToNextPublicKey(packets *packet.Reader) (err error) {\n\tvar p packet.Packet\n\tfor {\n\t\tp, err = packets.Next()\n\t\tif err == io.EOF {\n\t\t\treturn\n\t\t} else if err != nil {\n\t\t\tif _, ok := err.(errors.UnsupportedError); ok {\n\t\t\t\terr = nil\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn\n\t\t}\n\n\t\tif pk, ok := p.(*packet.PublicKey); ok && !pk.IsSubkey {\n\t\t\tpackets.Unread(p)\n\t\t\treturn\n\t\t}\n\t}\n\n\tpanic(\"unreachable\")\n}\n\n// ReadEntity reads an entity (public key, identities, subkeys etc) from the\n// given Reader.\nfunc ReadEntity(packets *packet.Reader) (*Entity, error) {\n\te := new(Entity)\n\te.Identities = make(map[string]*Identity)\n\n\tp, err := packets.Next()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar ok bool\n\tif e.PrimaryKey, ok = p.(*packet.PublicKey); !ok {\n\t\tif e.PrivateKey, ok = p.(*packet.PrivateKey); !ok {\n\t\t\tpackets.Unread(p)\n\t\t\treturn nil, errors.StructuralError(\"first packet was not a public/private key\")\n\t\t} else {\n\t\t\te.PrimaryKey = &e.PrivateKey.PublicKey\n\t\t}\n\t}\n\n\tif !e.PrimaryKey.PubKeyAlgo.CanSign() {\n\t\treturn nil, errors.StructuralError(\"primary key cannot be used for signatures\")\n\t}\n\n\tvar current *Identity\n\tvar revocations []*packet.Signature\nEachPacket:\n\tfor {\n\t\tp, err := packets.Next()\n\t\tif err == io.EOF {\n\t\t\tbreak\n\t\t} else if err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tswitch pkt := p.(type) {\n\t\tcase *packet.UserId:\n\t\t\tcurrent = new(Identity)\n\t\t\tcurrent.Name = pkt.Id\n\t\t\tcurrent.UserId = pkt\n\t\t\te.Identities[pkt.Id] = current\n\n\t\t\tfor {\n\t\t\t\tp, err = packets.Next()\n\t\t\t\tif err == io.EOF {\n\t\t\t\t\treturn nil, io.ErrUnexpectedEOF\n\t\t\t\t} else if err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\n\t\t\t\tsig, ok := p.(*packet.Signature)\n\t\t\t\tif !ok {\n\t\t\t\t\treturn nil, errors.StructuralError(\"user ID packet not followed by self-signature\")\n\t\t\t\t}\n\n\t\t\t\tif (sig.SigType == packet.SigTypePositiveCert || sig.SigType == packet.SigTypeGenericCert) && sig.IssuerKeyId != nil && *sig.IssuerKeyId == e.PrimaryKey.KeyId {\n\t\t\t\t\tif err = e.PrimaryKey.VerifyUserIdSignature(pkt.Id, e.PrimaryKey, sig); err != nil {\n\t\t\t\t\t\treturn nil, errors.StructuralError(\"user ID self-signature invalid: \" + err.Error())\n\t\t\t\t\t}\n\t\t\t\t\tcurrent.SelfSignature = sig\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tcurrent.Signatures = append(current.Signatures, sig)\n\t\t\t}\n\t\tcase *packet.Signature:\n\t\t\tif pkt.SigType == packet.SigTypeKeyRevocation {\n\t\t\t\trevocations = append(revocations, pkt)\n\t\t\t} else if pkt.SigType == packet.SigTypeDirectSignature {\n\t\t\t\t// TODO: RFC4880 5.2.1 permits signatures\n\t\t\t\t// directly on keys (eg. to bind additional\n\t\t\t\t// revocation keys).\n\t\t\t} else if current == nil {\n\t\t\t\treturn nil, errors.StructuralError(\"signature packet found before user id packet\")\n\t\t\t} else {\n\t\t\t\tcurrent.Signatures = append(current.Signatures, pkt)\n\t\t\t}\n\t\tcase *packet.PrivateKey:\n\t\t\tif pkt.IsSubkey == false {\n\t\t\t\tpackets.Unread(p)\n\t\t\t\tbreak EachPacket\n\t\t\t}\n\t\t\terr = addSubkey(e, packets, &pkt.PublicKey, pkt)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\tcase *packet.PublicKey:\n\t\t\tif pkt.IsSubkey == false {\n\t\t\t\tpackets.Unread(p)\n\t\t\t\tbreak EachPacket\n\t\t\t}\n\t\t\terr = addSubkey(e, packets, pkt, nil)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\tdefault:\n\t\t\t// we ignore unknown packets\n\t\t}\n\t}\n\n\tif len(e.Identities) == 0 {\n\t\treturn nil, errors.StructuralError(\"entity without any identities\")\n\t}\n\n\tfor _, revocation := range revocations {\n\t\terr = e.PrimaryKey.VerifyRevocationSignature(revocation)\n\t\tif err == nil {\n\t\t\te.Revocations = append(e.Revocations, revocation)\n\t\t} else {\n\t\t\t// TODO: RFC 4880 5.2.3.15 defines revocation keys.\n\t\t\treturn nil, errors.StructuralError(\"revocation signature signed by alternate key\")\n\t\t}\n\t}\n\n\treturn e, nil\n}\n\nfunc addSubkey(e *Entity, packets *packet.Reader, pub *packet.PublicKey, priv *packet.PrivateKey) error {\n\tvar subKey Subkey\n\tsubKey.PublicKey = pub\n\tsubKey.PrivateKey = priv\n\tp, err := packets.Next()\n\tif err == io.EOF {\n\t\treturn io.ErrUnexpectedEOF\n\t}\n\tif err != nil {\n\t\treturn errors.StructuralError(\"subkey signature invalid: \" + err.Error())\n\t}\n\tvar ok bool\n\tsubKey.Sig, ok = p.(*packet.Signature)\n\tif !ok {\n\t\treturn errors.StructuralError(\"subkey packet not followed by signature\")\n\t}\n\tif subKey.Sig.SigType != packet.SigTypeSubkeyBinding && subKey.Sig.SigType != packet.SigTypeSubkeyRevocation {\n\t\treturn errors.StructuralError(\"subkey signature with wrong type\")\n\t}\n\terr = e.PrimaryKey.VerifyKeySignature(subKey.PublicKey, subKey.Sig)\n\tif err != nil {\n\t\treturn errors.StructuralError(\"subkey signature invalid: \" + err.Error())\n\t}\n\te.Subkeys = append(e.Subkeys, subKey)\n\treturn nil\n}\n\nconst defaultRSAKeyBits = 2048\n\n// NewEntity returns an Entity that contains a fresh RSA/RSA keypair with a\n// single identity composed of the given full name, comment and email, any of\n// which may be empty but must not contain any of \"()<>\\x00\".\n// If config is nil, sensible defaults will be used.\nfunc NewEntity(name, comment, email string, config *packet.Config) (*Entity, error) {\n\tcurrentTime := config.Now()\n\n\tbits := defaultRSAKeyBits\n\tif config != nil && config.RSABits != 0 {\n\t\tbits = config.RSABits\n\t}\n\n\tuid := packet.NewUserId(name, comment, email)\n\tif uid == nil {\n\t\treturn nil, errors.InvalidArgumentError(\"user id field contained invalid characters\")\n\t}\n\tsigningPriv, err := rsa.GenerateKey(config.Random(), bits)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tencryptingPriv, err := rsa.GenerateKey(config.Random(), bits)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\te := &Entity{\n\t\tPrimaryKey: packet.NewRSAPublicKey(currentTime, &signingPriv.PublicKey),\n\t\tPrivateKey: packet.NewRSAPrivateKey(currentTime, signingPriv),\n\t\tIdentities: make(map[string]*Identity),\n\t}\n\tisPrimaryId := true\n\te.Identities[uid.Id] = &Identity{\n\t\tName:   uid.Name,\n\t\tUserId: uid,\n\t\tSelfSignature: &packet.Signature{\n\t\t\tCreationTime: currentTime,\n\t\t\tSigType:      packet.SigTypePositiveCert,\n\t\t\tPubKeyAlgo:   packet.PubKeyAlgoRSA,\n\t\t\tHash:         config.Hash(),\n\t\t\tIsPrimaryId:  &isPrimaryId,\n\t\t\tFlagsValid:   true,\n\t\t\tFlagSign:     true,\n\t\t\tFlagCertify:  true,\n\t\t\tIssuerKeyId:  &e.PrimaryKey.KeyId,\n\t\t},\n\t}\n\n\te.Subkeys = make([]Subkey, 1)\n\te.Subkeys[0] = Subkey{\n\t\tPublicKey:  packet.NewRSAPublicKey(currentTime, &encryptingPriv.PublicKey),\n\t\tPrivateKey: packet.NewRSAPrivateKey(currentTime, encryptingPriv),\n\t\tSig: &packet.Signature{\n\t\t\tCreationTime:              currentTime,\n\t\t\tSigType:                   packet.SigTypeSubkeyBinding,\n\t\t\tPubKeyAlgo:                packet.PubKeyAlgoRSA,\n\t\t\tHash:                      config.Hash(),\n\t\t\tFlagsValid:                true,\n\t\t\tFlagEncryptStorage:        true,\n\t\t\tFlagEncryptCommunications: true,\n\t\t\tIssuerKeyId:               &e.PrimaryKey.KeyId,\n\t\t},\n\t}\n\te.Subkeys[0].PublicKey.IsSubkey = true\n\te.Subkeys[0].PrivateKey.IsSubkey = true\n\n\treturn e, nil\n}\n\n// SerializePrivate serializes an Entity, including private key material, to\n// the given Writer. For now, it must only be used on an Entity returned from\n// NewEntity.\n// If config is nil, sensible defaults will be used.\nfunc (e *Entity) SerializePrivate(w io.Writer, config *packet.Config) (err error) {\n\terr = e.PrivateKey.Serialize(w)\n\tif err != nil {\n\t\treturn\n\t}\n\tfor _, ident := range e.Identities {\n\t\terr = ident.UserId.Serialize(w)\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t\terr = ident.SelfSignature.SignUserId(ident.UserId.Id, e.PrimaryKey, e.PrivateKey, config)\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t\terr = ident.SelfSignature.Serialize(w)\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t}\n\tfor _, subkey := range e.Subkeys {\n\t\terr = subkey.PrivateKey.Serialize(w)\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t\terr = subkey.Sig.SignKey(subkey.PublicKey, e.PrivateKey, config)\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t\terr = subkey.Sig.Serialize(w)\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t}\n\treturn nil\n}\n\n// Serialize writes the public part of the given Entity to w. (No private\n// key material will be output).\nfunc (e *Entity) Serialize(w io.Writer) error {\n\terr := e.PrimaryKey.Serialize(w)\n\tif err != nil {\n\t\treturn err\n\t}\n\tfor _, ident := range e.Identities {\n\t\terr = ident.UserId.Serialize(w)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\terr = ident.SelfSignature.Serialize(w)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfor _, sig := range ident.Signatures {\n\t\t\terr = sig.Serialize(w)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t}\n\tfor _, subkey := range e.Subkeys {\n\t\terr = subkey.PublicKey.Serialize(w)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\terr = subkey.Sig.Serialize(w)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// SignIdentity adds a signature to e, from signer, attesting that identity is\n// associated with e. The provided identity must already be an element of\n// e.Identities and the private key of signer must have been decrypted if\n// necessary.\n// If config is nil, sensible defaults will be used.\nfunc (e *Entity) SignIdentity(identity string, signer *Entity, config *packet.Config) error {\n\tif signer.PrivateKey == nil {\n\t\treturn errors.InvalidArgumentError(\"signing Entity must have a private key\")\n\t}\n\tif signer.PrivateKey.Encrypted {\n\t\treturn errors.InvalidArgumentError(\"signing Entity's private key must be decrypted\")\n\t}\n\tident, ok := e.Identities[identity]\n\tif !ok {\n\t\treturn errors.InvalidArgumentError(\"given identity string not found in Entity\")\n\t}\n\n\tsig := &packet.Signature{\n\t\tSigType:      packet.SigTypeGenericCert,\n\t\tPubKeyAlgo:   signer.PrivateKey.PubKeyAlgo,\n\t\tHash:         config.Hash(),\n\t\tCreationTime: config.Now(),\n\t\tIssuerKeyId:  &signer.PrivateKey.KeyId,\n\t}\n\tif err := sig.SignUserId(identity, e.PrimaryKey, signer.PrivateKey, config); err != nil {\n\t\treturn err\n\t}\n\tident.Signatures = append(ident.Signatures, sig)\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/openpgp/packet/compressed.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage packet\n\nimport (\n\t\"compress/bzip2\"\n\t\"compress/flate\"\n\t\"compress/zlib\"\n\t\"golang.org/x/crypto/openpgp/errors\"\n\t\"io\"\n\t\"strconv\"\n)\n\n// Compressed represents a compressed OpenPGP packet. The decompressed contents\n// will contain more OpenPGP packets. See RFC 4880, section 5.6.\ntype Compressed struct {\n\tBody io.Reader\n}\n\nconst (\n\tNoCompression      = flate.NoCompression\n\tBestSpeed          = flate.BestSpeed\n\tBestCompression    = flate.BestCompression\n\tDefaultCompression = flate.DefaultCompression\n)\n\n// CompressionConfig contains compressor configuration settings.\ntype CompressionConfig struct {\n\t// Level is the compression level to use. It must be set to\n\t// between -1 and 9, with -1 causing the compressor to use the\n\t// default compression level, 0 causing the compressor to use\n\t// no compression and 1 to 9 representing increasing (better,\n\t// slower) compression levels. If Level is less than -1 or\n\t// more then 9, a non-nil error will be returned during\n\t// encryption. See the constants above for convenient common\n\t// settings for Level.\n\tLevel int\n}\n\nfunc (c *Compressed) parse(r io.Reader) error {\n\tvar buf [1]byte\n\t_, err := readFull(r, buf[:])\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tswitch buf[0] {\n\tcase 1:\n\t\tc.Body = flate.NewReader(r)\n\tcase 2:\n\t\tc.Body, err = zlib.NewReader(r)\n\tcase 3:\n\t\tc.Body = bzip2.NewReader(r)\n\tdefault:\n\t\terr = errors.UnsupportedError(\"unknown compression algorithm: \" + strconv.Itoa(int(buf[0])))\n\t}\n\n\treturn err\n}\n\n// compressedWriterCloser represents the serialized compression stream\n// header and the compressor. Its Close() method ensures that both the\n// compressor and serialized stream header are closed. Its Write()\n// method writes to the compressor.\ntype compressedWriteCloser struct {\n\tsh io.Closer      // Stream Header\n\tc  io.WriteCloser // Compressor\n}\n\nfunc (cwc compressedWriteCloser) Write(p []byte) (int, error) {\n\treturn cwc.c.Write(p)\n}\n\nfunc (cwc compressedWriteCloser) Close() (err error) {\n\terr = cwc.c.Close()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn cwc.sh.Close()\n}\n\n// SerializeCompressed serializes a compressed data packet to w and\n// returns a WriteCloser to which the literal data packets themselves\n// can be written and which MUST be closed on completion. If cc is\n// nil, sensible defaults will be used to configure the compression\n// algorithm.\nfunc SerializeCompressed(w io.WriteCloser, algo CompressionAlgo, cc *CompressionConfig) (literaldata io.WriteCloser, err error) {\n\tcompressed, err := serializeStreamHeader(w, packetTypeCompressed)\n\tif err != nil {\n\t\treturn\n\t}\n\n\t_, err = compressed.Write([]byte{uint8(algo)})\n\tif err != nil {\n\t\treturn\n\t}\n\n\tlevel := DefaultCompression\n\tif cc != nil {\n\t\tlevel = cc.Level\n\t}\n\n\tvar compressor io.WriteCloser\n\tswitch algo {\n\tcase CompressionZIP:\n\t\tcompressor, err = flate.NewWriter(compressed, level)\n\tcase CompressionZLIB:\n\t\tcompressor, err = zlib.NewWriterLevel(compressed, level)\n\tdefault:\n\t\ts := strconv.Itoa(int(algo))\n\t\terr = errors.UnsupportedError(\"Unsupported compression algorithm: \" + s)\n\t}\n\tif err != nil {\n\t\treturn\n\t}\n\n\tliteraldata = compressedWriteCloser{compressed, compressor}\n\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/openpgp/packet/config.go",
    "content": "// Copyright 2012 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage packet\n\nimport (\n\t\"crypto\"\n\t\"crypto/rand\"\n\t\"io\"\n\t\"time\"\n)\n\n// Config collects a number of parameters along with sensible defaults.\n// A nil *Config is valid and results in all default values.\ntype Config struct {\n\t// Rand provides the source of entropy.\n\t// If nil, the crypto/rand Reader is used.\n\tRand io.Reader\n\t// DefaultHash is the default hash function to be used.\n\t// If zero, SHA-256 is used.\n\tDefaultHash crypto.Hash\n\t// DefaultCipher is the cipher to be used.\n\t// If zero, AES-128 is used.\n\tDefaultCipher CipherFunction\n\t// Time returns the current time as the number of seconds since the\n\t// epoch. If Time is nil, time.Now is used.\n\tTime func() time.Time\n\t// DefaultCompressionAlgo is the compression algorithm to be\n\t// applied to the plaintext before encryption. If zero, no\n\t// compression is done.\n\tDefaultCompressionAlgo CompressionAlgo\n\t// CompressionConfig configures the compression settings.\n\tCompressionConfig *CompressionConfig\n\t// S2KCount is only used for symmetric encryption. It\n\t// determines the strength of the passphrase stretching when\n\t// the said passphrase is hashed to produce a key. S2KCount\n\t// should be between 1024 and 65011712, inclusive. If Config\n\t// is nil or S2KCount is 0, the value 65536 used. Not all\n\t// values in the above range can be represented. S2KCount will\n\t// be rounded up to the next representable value if it cannot\n\t// be encoded exactly. When set, it is strongly encrouraged to\n\t// use a value that is at least 65536. See RFC 4880 Section\n\t// 3.7.1.3.\n\tS2KCount int\n\t// RSABits is the number of bits in new RSA keys made with NewEntity.\n\t// If zero, then 2048 bit keys are created.\n\tRSABits int\n}\n\nfunc (c *Config) Random() io.Reader {\n\tif c == nil || c.Rand == nil {\n\t\treturn rand.Reader\n\t}\n\treturn c.Rand\n}\n\nfunc (c *Config) Hash() crypto.Hash {\n\tif c == nil || uint(c.DefaultHash) == 0 {\n\t\treturn crypto.SHA256\n\t}\n\treturn c.DefaultHash\n}\n\nfunc (c *Config) Cipher() CipherFunction {\n\tif c == nil || uint8(c.DefaultCipher) == 0 {\n\t\treturn CipherAES128\n\t}\n\treturn c.DefaultCipher\n}\n\nfunc (c *Config) Now() time.Time {\n\tif c == nil || c.Time == nil {\n\t\treturn time.Now()\n\t}\n\treturn c.Time()\n}\n\nfunc (c *Config) Compression() CompressionAlgo {\n\tif c == nil {\n\t\treturn CompressionNone\n\t}\n\treturn c.DefaultCompressionAlgo\n}\n\nfunc (c *Config) PasswordHashIterations() int {\n\tif c == nil || c.S2KCount == 0 {\n\t\treturn 0\n\t}\n\treturn c.S2KCount\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/openpgp/packet/encrypted_key.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage packet\n\nimport (\n\t\"crypto/rsa\"\n\t\"encoding/binary\"\n\t\"io\"\n\t\"math/big\"\n\t\"strconv\"\n\n\t\"golang.org/x/crypto/openpgp/elgamal\"\n\t\"golang.org/x/crypto/openpgp/errors\"\n)\n\nconst encryptedKeyVersion = 3\n\n// EncryptedKey represents a public-key encrypted session key. See RFC 4880,\n// section 5.1.\ntype EncryptedKey struct {\n\tKeyId      uint64\n\tAlgo       PublicKeyAlgorithm\n\tCipherFunc CipherFunction // only valid after a successful Decrypt\n\tKey        []byte         // only valid after a successful Decrypt\n\n\tencryptedMPI1, encryptedMPI2 parsedMPI\n}\n\nfunc (e *EncryptedKey) parse(r io.Reader) (err error) {\n\tvar buf [10]byte\n\t_, err = readFull(r, buf[:])\n\tif err != nil {\n\t\treturn\n\t}\n\tif buf[0] != encryptedKeyVersion {\n\t\treturn errors.UnsupportedError(\"unknown EncryptedKey version \" + strconv.Itoa(int(buf[0])))\n\t}\n\te.KeyId = binary.BigEndian.Uint64(buf[1:9])\n\te.Algo = PublicKeyAlgorithm(buf[9])\n\tswitch e.Algo {\n\tcase PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly:\n\t\te.encryptedMPI1.bytes, e.encryptedMPI1.bitLength, err = readMPI(r)\n\tcase PubKeyAlgoElGamal:\n\t\te.encryptedMPI1.bytes, e.encryptedMPI1.bitLength, err = readMPI(r)\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t\te.encryptedMPI2.bytes, e.encryptedMPI2.bitLength, err = readMPI(r)\n\t}\n\t_, err = consumeAll(r)\n\treturn\n}\n\nfunc checksumKeyMaterial(key []byte) uint16 {\n\tvar checksum uint16\n\tfor _, v := range key {\n\t\tchecksum += uint16(v)\n\t}\n\treturn checksum\n}\n\n// Decrypt decrypts an encrypted session key with the given private key. The\n// private key must have been decrypted first.\n// If config is nil, sensible defaults will be used.\nfunc (e *EncryptedKey) Decrypt(priv *PrivateKey, config *Config) error {\n\tvar err error\n\tvar b []byte\n\n\t// TODO(agl): use session key decryption routines here to avoid\n\t// padding oracle attacks.\n\tswitch priv.PubKeyAlgo {\n\tcase PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly:\n\t\tb, err = rsa.DecryptPKCS1v15(config.Random(), priv.PrivateKey.(*rsa.PrivateKey), e.encryptedMPI1.bytes)\n\tcase PubKeyAlgoElGamal:\n\t\tc1 := new(big.Int).SetBytes(e.encryptedMPI1.bytes)\n\t\tc2 := new(big.Int).SetBytes(e.encryptedMPI2.bytes)\n\t\tb, err = elgamal.Decrypt(priv.PrivateKey.(*elgamal.PrivateKey), c1, c2)\n\tdefault:\n\t\terr = errors.InvalidArgumentError(\"cannot decrypted encrypted session key with private key of type \" + strconv.Itoa(int(priv.PubKeyAlgo)))\n\t}\n\n\tif err != nil {\n\t\treturn err\n\t}\n\n\te.CipherFunc = CipherFunction(b[0])\n\te.Key = b[1 : len(b)-2]\n\texpectedChecksum := uint16(b[len(b)-2])<<8 | uint16(b[len(b)-1])\n\tchecksum := checksumKeyMaterial(e.Key)\n\tif checksum != expectedChecksum {\n\t\treturn errors.StructuralError(\"EncryptedKey checksum incorrect\")\n\t}\n\n\treturn nil\n}\n\n// Serialize writes the encrypted key packet, e, to w.\nfunc (e *EncryptedKey) Serialize(w io.Writer) error {\n\tvar mpiLen int\n\tswitch e.Algo {\n\tcase PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly:\n\t\tmpiLen = 2 + len(e.encryptedMPI1.bytes)\n\tcase PubKeyAlgoElGamal:\n\t\tmpiLen = 2 + len(e.encryptedMPI1.bytes) + 2 + len(e.encryptedMPI2.bytes)\n\tdefault:\n\t\treturn errors.InvalidArgumentError(\"don't know how to serialize encrypted key type \" + strconv.Itoa(int(e.Algo)))\n\t}\n\n\tserializeHeader(w, packetTypeEncryptedKey, 1 /* version */ +8 /* key id */ +1 /* algo */ +mpiLen)\n\n\tw.Write([]byte{encryptedKeyVersion})\n\tbinary.Write(w, binary.BigEndian, e.KeyId)\n\tw.Write([]byte{byte(e.Algo)})\n\n\tswitch e.Algo {\n\tcase PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly:\n\t\twriteMPIs(w, e.encryptedMPI1)\n\tcase PubKeyAlgoElGamal:\n\t\twriteMPIs(w, e.encryptedMPI1, e.encryptedMPI2)\n\tdefault:\n\t\tpanic(\"internal error\")\n\t}\n\n\treturn nil\n}\n\n// SerializeEncryptedKey serializes an encrypted key packet to w that contains\n// key, encrypted to pub.\n// If config is nil, sensible defaults will be used.\nfunc SerializeEncryptedKey(w io.Writer, pub *PublicKey, cipherFunc CipherFunction, key []byte, config *Config) error {\n\tvar buf [10]byte\n\tbuf[0] = encryptedKeyVersion\n\tbinary.BigEndian.PutUint64(buf[1:9], pub.KeyId)\n\tbuf[9] = byte(pub.PubKeyAlgo)\n\n\tkeyBlock := make([]byte, 1 /* cipher type */ +len(key)+2 /* checksum */)\n\tkeyBlock[0] = byte(cipherFunc)\n\tcopy(keyBlock[1:], key)\n\tchecksum := checksumKeyMaterial(key)\n\tkeyBlock[1+len(key)] = byte(checksum >> 8)\n\tkeyBlock[1+len(key)+1] = byte(checksum)\n\n\tswitch pub.PubKeyAlgo {\n\tcase PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly:\n\t\treturn serializeEncryptedKeyRSA(w, config.Random(), buf, pub.PublicKey.(*rsa.PublicKey), keyBlock)\n\tcase PubKeyAlgoElGamal:\n\t\treturn serializeEncryptedKeyElGamal(w, config.Random(), buf, pub.PublicKey.(*elgamal.PublicKey), keyBlock)\n\tcase PubKeyAlgoDSA, PubKeyAlgoRSASignOnly:\n\t\treturn errors.InvalidArgumentError(\"cannot encrypt to public key of type \" + strconv.Itoa(int(pub.PubKeyAlgo)))\n\t}\n\n\treturn errors.UnsupportedError(\"encrypting a key to public key of type \" + strconv.Itoa(int(pub.PubKeyAlgo)))\n}\n\nfunc serializeEncryptedKeyRSA(w io.Writer, rand io.Reader, header [10]byte, pub *rsa.PublicKey, keyBlock []byte) error {\n\tcipherText, err := rsa.EncryptPKCS1v15(rand, pub, keyBlock)\n\tif err != nil {\n\t\treturn errors.InvalidArgumentError(\"RSA encryption failed: \" + err.Error())\n\t}\n\n\tpacketLen := 10 /* header length */ + 2 /* mpi size */ + len(cipherText)\n\n\terr = serializeHeader(w, packetTypeEncryptedKey, packetLen)\n\tif err != nil {\n\t\treturn err\n\t}\n\t_, err = w.Write(header[:])\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn writeMPI(w, 8*uint16(len(cipherText)), cipherText)\n}\n\nfunc serializeEncryptedKeyElGamal(w io.Writer, rand io.Reader, header [10]byte, pub *elgamal.PublicKey, keyBlock []byte) error {\n\tc1, c2, err := elgamal.Encrypt(rand, pub, keyBlock)\n\tif err != nil {\n\t\treturn errors.InvalidArgumentError(\"ElGamal encryption failed: \" + err.Error())\n\t}\n\n\tpacketLen := 10 /* header length */\n\tpacketLen += 2 /* mpi size */ + (c1.BitLen()+7)/8\n\tpacketLen += 2 /* mpi size */ + (c2.BitLen()+7)/8\n\n\terr = serializeHeader(w, packetTypeEncryptedKey, packetLen)\n\tif err != nil {\n\t\treturn err\n\t}\n\t_, err = w.Write(header[:])\n\tif err != nil {\n\t\treturn err\n\t}\n\terr = writeBig(w, c1)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn writeBig(w, c2)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/openpgp/packet/literal.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage packet\n\nimport (\n\t\"encoding/binary\"\n\t\"io\"\n)\n\n// LiteralData represents an encrypted file. See RFC 4880, section 5.9.\ntype LiteralData struct {\n\tIsBinary bool\n\tFileName string\n\tTime     uint32 // Unix epoch time. Either creation time or modification time. 0 means undefined.\n\tBody     io.Reader\n}\n\n// ForEyesOnly returns whether the contents of the LiteralData have been marked\n// as especially sensitive.\nfunc (l *LiteralData) ForEyesOnly() bool {\n\treturn l.FileName == \"_CONSOLE\"\n}\n\nfunc (l *LiteralData) parse(r io.Reader) (err error) {\n\tvar buf [256]byte\n\n\t_, err = readFull(r, buf[:2])\n\tif err != nil {\n\t\treturn\n\t}\n\n\tl.IsBinary = buf[0] == 'b'\n\tfileNameLen := int(buf[1])\n\n\t_, err = readFull(r, buf[:fileNameLen])\n\tif err != nil {\n\t\treturn\n\t}\n\n\tl.FileName = string(buf[:fileNameLen])\n\n\t_, err = readFull(r, buf[:4])\n\tif err != nil {\n\t\treturn\n\t}\n\n\tl.Time = binary.BigEndian.Uint32(buf[:4])\n\tl.Body = r\n\treturn\n}\n\n// SerializeLiteral serializes a literal data packet to w and returns a\n// WriteCloser to which the data itself can be written and which MUST be closed\n// on completion. The fileName is truncated to 255 bytes.\nfunc SerializeLiteral(w io.WriteCloser, isBinary bool, fileName string, time uint32) (plaintext io.WriteCloser, err error) {\n\tvar buf [4]byte\n\tbuf[0] = 't'\n\tif isBinary {\n\t\tbuf[0] = 'b'\n\t}\n\tif len(fileName) > 255 {\n\t\tfileName = fileName[:255]\n\t}\n\tbuf[1] = byte(len(fileName))\n\n\tinner, err := serializeStreamHeader(w, packetTypeLiteralData)\n\tif err != nil {\n\t\treturn\n\t}\n\n\t_, err = inner.Write(buf[:2])\n\tif err != nil {\n\t\treturn\n\t}\n\t_, err = inner.Write([]byte(fileName))\n\tif err != nil {\n\t\treturn\n\t}\n\tbinary.BigEndian.PutUint32(buf[:], time)\n\t_, err = inner.Write(buf[:])\n\tif err != nil {\n\t\treturn\n\t}\n\n\tplaintext = inner\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/openpgp/packet/ocfb.go",
    "content": "// Copyright 2010 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// OpenPGP CFB Mode. http://tools.ietf.org/html/rfc4880#section-13.9\n\npackage packet\n\nimport (\n\t\"crypto/cipher\"\n)\n\ntype ocfbEncrypter struct {\n\tb       cipher.Block\n\tfre     []byte\n\toutUsed int\n}\n\n// An OCFBResyncOption determines if the \"resynchronization step\" of OCFB is\n// performed.\ntype OCFBResyncOption bool\n\nconst (\n\tOCFBResync   OCFBResyncOption = true\n\tOCFBNoResync OCFBResyncOption = false\n)\n\n// NewOCFBEncrypter returns a cipher.Stream which encrypts data with OpenPGP's\n// cipher feedback mode using the given cipher.Block, and an initial amount of\n// ciphertext.  randData must be random bytes and be the same length as the\n// cipher.Block's block size. Resync determines if the \"resynchronization step\"\n// from RFC 4880, 13.9 step 7 is performed. Different parts of OpenPGP vary on\n// this point.\nfunc NewOCFBEncrypter(block cipher.Block, randData []byte, resync OCFBResyncOption) (cipher.Stream, []byte) {\n\tblockSize := block.BlockSize()\n\tif len(randData) != blockSize {\n\t\treturn nil, nil\n\t}\n\n\tx := &ocfbEncrypter{\n\t\tb:       block,\n\t\tfre:     make([]byte, blockSize),\n\t\toutUsed: 0,\n\t}\n\tprefix := make([]byte, blockSize+2)\n\n\tblock.Encrypt(x.fre, x.fre)\n\tfor i := 0; i < blockSize; i++ {\n\t\tprefix[i] = randData[i] ^ x.fre[i]\n\t}\n\n\tblock.Encrypt(x.fre, prefix[:blockSize])\n\tprefix[blockSize] = x.fre[0] ^ randData[blockSize-2]\n\tprefix[blockSize+1] = x.fre[1] ^ randData[blockSize-1]\n\n\tif resync {\n\t\tblock.Encrypt(x.fre, prefix[2:])\n\t} else {\n\t\tx.fre[0] = prefix[blockSize]\n\t\tx.fre[1] = prefix[blockSize+1]\n\t\tx.outUsed = 2\n\t}\n\treturn x, prefix\n}\n\nfunc (x *ocfbEncrypter) XORKeyStream(dst, src []byte) {\n\tfor i := 0; i < len(src); i++ {\n\t\tif x.outUsed == len(x.fre) {\n\t\t\tx.b.Encrypt(x.fre, x.fre)\n\t\t\tx.outUsed = 0\n\t\t}\n\n\t\tx.fre[x.outUsed] ^= src[i]\n\t\tdst[i] = x.fre[x.outUsed]\n\t\tx.outUsed++\n\t}\n}\n\ntype ocfbDecrypter struct {\n\tb       cipher.Block\n\tfre     []byte\n\toutUsed int\n}\n\n// NewOCFBDecrypter returns a cipher.Stream which decrypts data with OpenPGP's\n// cipher feedback mode using the given cipher.Block. Prefix must be the first\n// blockSize + 2 bytes of the ciphertext, where blockSize is the cipher.Block's\n// block size. If an incorrect key is detected then nil is returned. On\n// successful exit, blockSize+2 bytes of decrypted data are written into\n// prefix. Resync determines if the \"resynchronization step\" from RFC 4880,\n// 13.9 step 7 is performed. Different parts of OpenPGP vary on this point.\nfunc NewOCFBDecrypter(block cipher.Block, prefix []byte, resync OCFBResyncOption) cipher.Stream {\n\tblockSize := block.BlockSize()\n\tif len(prefix) != blockSize+2 {\n\t\treturn nil\n\t}\n\n\tx := &ocfbDecrypter{\n\t\tb:       block,\n\t\tfre:     make([]byte, blockSize),\n\t\toutUsed: 0,\n\t}\n\tprefixCopy := make([]byte, len(prefix))\n\tcopy(prefixCopy, prefix)\n\n\tblock.Encrypt(x.fre, x.fre)\n\tfor i := 0; i < blockSize; i++ {\n\t\tprefixCopy[i] ^= x.fre[i]\n\t}\n\n\tblock.Encrypt(x.fre, prefix[:blockSize])\n\tprefixCopy[blockSize] ^= x.fre[0]\n\tprefixCopy[blockSize+1] ^= x.fre[1]\n\n\tif prefixCopy[blockSize-2] != prefixCopy[blockSize] ||\n\t\tprefixCopy[blockSize-1] != prefixCopy[blockSize+1] {\n\t\treturn nil\n\t}\n\n\tif resync {\n\t\tblock.Encrypt(x.fre, prefix[2:])\n\t} else {\n\t\tx.fre[0] = prefix[blockSize]\n\t\tx.fre[1] = prefix[blockSize+1]\n\t\tx.outUsed = 2\n\t}\n\tcopy(prefix, prefixCopy)\n\treturn x\n}\n\nfunc (x *ocfbDecrypter) XORKeyStream(dst, src []byte) {\n\tfor i := 0; i < len(src); i++ {\n\t\tif x.outUsed == len(x.fre) {\n\t\t\tx.b.Encrypt(x.fre, x.fre)\n\t\t\tx.outUsed = 0\n\t\t}\n\n\t\tc := src[i]\n\t\tdst[i] = x.fre[x.outUsed] ^ src[i]\n\t\tx.fre[x.outUsed] = c\n\t\tx.outUsed++\n\t}\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/openpgp/packet/one_pass_signature.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage packet\n\nimport (\n\t\"crypto\"\n\t\"encoding/binary\"\n\t\"golang.org/x/crypto/openpgp/errors\"\n\t\"golang.org/x/crypto/openpgp/s2k\"\n\t\"io\"\n\t\"strconv\"\n)\n\n// OnePassSignature represents a one-pass signature packet. See RFC 4880,\n// section 5.4.\ntype OnePassSignature struct {\n\tSigType    SignatureType\n\tHash       crypto.Hash\n\tPubKeyAlgo PublicKeyAlgorithm\n\tKeyId      uint64\n\tIsLast     bool\n}\n\nconst onePassSignatureVersion = 3\n\nfunc (ops *OnePassSignature) parse(r io.Reader) (err error) {\n\tvar buf [13]byte\n\n\t_, err = readFull(r, buf[:])\n\tif err != nil {\n\t\treturn\n\t}\n\tif buf[0] != onePassSignatureVersion {\n\t\terr = errors.UnsupportedError(\"one-pass-signature packet version \" + strconv.Itoa(int(buf[0])))\n\t}\n\n\tvar ok bool\n\tops.Hash, ok = s2k.HashIdToHash(buf[2])\n\tif !ok {\n\t\treturn errors.UnsupportedError(\"hash function: \" + strconv.Itoa(int(buf[2])))\n\t}\n\n\tops.SigType = SignatureType(buf[1])\n\tops.PubKeyAlgo = PublicKeyAlgorithm(buf[3])\n\tops.KeyId = binary.BigEndian.Uint64(buf[4:12])\n\tops.IsLast = buf[12] != 0\n\treturn\n}\n\n// Serialize marshals the given OnePassSignature to w.\nfunc (ops *OnePassSignature) Serialize(w io.Writer) error {\n\tvar buf [13]byte\n\tbuf[0] = onePassSignatureVersion\n\tbuf[1] = uint8(ops.SigType)\n\tvar ok bool\n\tbuf[2], ok = s2k.HashToHashId(ops.Hash)\n\tif !ok {\n\t\treturn errors.UnsupportedError(\"hash type: \" + strconv.Itoa(int(ops.Hash)))\n\t}\n\tbuf[3] = uint8(ops.PubKeyAlgo)\n\tbinary.BigEndian.PutUint64(buf[4:12], ops.KeyId)\n\tif ops.IsLast {\n\t\tbuf[12] = 1\n\t}\n\n\tif err := serializeHeader(w, packetTypeOnePassSignature, len(buf)); err != nil {\n\t\treturn err\n\t}\n\t_, err := w.Write(buf[:])\n\treturn err\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/openpgp/packet/opaque.go",
    "content": "// Copyright 2012 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage packet\n\nimport (\n\t\"bytes\"\n\t\"io\"\n\t\"io/ioutil\"\n\n\t\"golang.org/x/crypto/openpgp/errors\"\n)\n\n// OpaquePacket represents an OpenPGP packet as raw, unparsed data. This is\n// useful for splitting and storing the original packet contents separately,\n// handling unsupported packet types or accessing parts of the packet not yet\n// implemented by this package.\ntype OpaquePacket struct {\n\t// Packet type\n\tTag uint8\n\t// Reason why the packet was parsed opaquely\n\tReason error\n\t// Binary contents of the packet data\n\tContents []byte\n}\n\nfunc (op *OpaquePacket) parse(r io.Reader) (err error) {\n\top.Contents, err = ioutil.ReadAll(r)\n\treturn\n}\n\n// Serialize marshals the packet to a writer in its original form, including\n// the packet header.\nfunc (op *OpaquePacket) Serialize(w io.Writer) (err error) {\n\terr = serializeHeader(w, packetType(op.Tag), len(op.Contents))\n\tif err == nil {\n\t\t_, err = w.Write(op.Contents)\n\t}\n\treturn\n}\n\n// Parse attempts to parse the opaque contents into a structure supported by\n// this package. If the packet is not known then the result will be another\n// OpaquePacket.\nfunc (op *OpaquePacket) Parse() (p Packet, err error) {\n\thdr := bytes.NewBuffer(nil)\n\terr = serializeHeader(hdr, packetType(op.Tag), len(op.Contents))\n\tif err != nil {\n\t\top.Reason = err\n\t\treturn op, err\n\t}\n\tp, err = Read(io.MultiReader(hdr, bytes.NewBuffer(op.Contents)))\n\tif err != nil {\n\t\top.Reason = err\n\t\tp = op\n\t}\n\treturn\n}\n\n// OpaqueReader reads OpaquePackets from an io.Reader.\ntype OpaqueReader struct {\n\tr io.Reader\n}\n\nfunc NewOpaqueReader(r io.Reader) *OpaqueReader {\n\treturn &OpaqueReader{r: r}\n}\n\n// Read the next OpaquePacket.\nfunc (or *OpaqueReader) Next() (op *OpaquePacket, err error) {\n\ttag, _, contents, err := readHeader(or.r)\n\tif err != nil {\n\t\treturn\n\t}\n\top = &OpaquePacket{Tag: uint8(tag), Reason: err}\n\terr = op.parse(contents)\n\tif err != nil {\n\t\tconsumeAll(contents)\n\t}\n\treturn\n}\n\n// OpaqueSubpacket represents an unparsed OpenPGP subpacket,\n// as found in signature and user attribute packets.\ntype OpaqueSubpacket struct {\n\tSubType  uint8\n\tContents []byte\n}\n\n// OpaqueSubpackets extracts opaque, unparsed OpenPGP subpackets from\n// their byte representation.\nfunc OpaqueSubpackets(contents []byte) (result []*OpaqueSubpacket, err error) {\n\tvar (\n\t\tsubHeaderLen int\n\t\tsubPacket    *OpaqueSubpacket\n\t)\n\tfor len(contents) > 0 {\n\t\tsubHeaderLen, subPacket, err = nextSubpacket(contents)\n\t\tif err != nil {\n\t\t\tbreak\n\t\t}\n\t\tresult = append(result, subPacket)\n\t\tcontents = contents[subHeaderLen+len(subPacket.Contents):]\n\t}\n\treturn\n}\n\nfunc nextSubpacket(contents []byte) (subHeaderLen int, subPacket *OpaqueSubpacket, err error) {\n\t// RFC 4880, section 5.2.3.1\n\tvar subLen uint32\n\tif len(contents) < 1 {\n\t\tgoto Truncated\n\t}\n\tsubPacket = &OpaqueSubpacket{}\n\tswitch {\n\tcase contents[0] < 192:\n\t\tsubHeaderLen = 2 // 1 length byte, 1 subtype byte\n\t\tif len(contents) < subHeaderLen {\n\t\t\tgoto Truncated\n\t\t}\n\t\tsubLen = uint32(contents[0])\n\t\tcontents = contents[1:]\n\tcase contents[0] < 255:\n\t\tsubHeaderLen = 3 // 2 length bytes, 1 subtype\n\t\tif len(contents) < subHeaderLen {\n\t\t\tgoto Truncated\n\t\t}\n\t\tsubLen = uint32(contents[0]-192)<<8 + uint32(contents[1]) + 192\n\t\tcontents = contents[2:]\n\tdefault:\n\t\tsubHeaderLen = 6 // 5 length bytes, 1 subtype\n\t\tif len(contents) < subHeaderLen {\n\t\t\tgoto Truncated\n\t\t}\n\t\tsubLen = uint32(contents[1])<<24 |\n\t\t\tuint32(contents[2])<<16 |\n\t\t\tuint32(contents[3])<<8 |\n\t\t\tuint32(contents[4])\n\t\tcontents = contents[5:]\n\t}\n\tif subLen > uint32(len(contents)) || subLen == 0 {\n\t\tgoto Truncated\n\t}\n\tsubPacket.SubType = contents[0]\n\tsubPacket.Contents = contents[1:subLen]\n\treturn\nTruncated:\n\terr = errors.StructuralError(\"subpacket truncated\")\n\treturn\n}\n\nfunc (osp *OpaqueSubpacket) Serialize(w io.Writer) (err error) {\n\tbuf := make([]byte, 6)\n\tn := serializeSubpacketLength(buf, len(osp.Contents)+1)\n\tbuf[n] = osp.SubType\n\tif _, err = w.Write(buf[:n+1]); err != nil {\n\t\treturn\n\t}\n\t_, err = w.Write(osp.Contents)\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/openpgp/packet/packet.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package packet implements parsing and serialization of OpenPGP packets, as\n// specified in RFC 4880.\npackage packet // import \"golang.org/x/crypto/openpgp/packet\"\n\nimport (\n\t\"bufio\"\n\t\"crypto/aes\"\n\t\"crypto/cipher\"\n\t\"crypto/des\"\n\t\"golang.org/x/crypto/cast5\"\n\t\"golang.org/x/crypto/openpgp/errors\"\n\t\"io\"\n\t\"math/big\"\n)\n\n// readFull is the same as io.ReadFull except that reading zero bytes returns\n// ErrUnexpectedEOF rather than EOF.\nfunc readFull(r io.Reader, buf []byte) (n int, err error) {\n\tn, err = io.ReadFull(r, buf)\n\tif err == io.EOF {\n\t\terr = io.ErrUnexpectedEOF\n\t}\n\treturn\n}\n\n// readLength reads an OpenPGP length from r. See RFC 4880, section 4.2.2.\nfunc readLength(r io.Reader) (length int64, isPartial bool, err error) {\n\tvar buf [4]byte\n\t_, err = readFull(r, buf[:1])\n\tif err != nil {\n\t\treturn\n\t}\n\tswitch {\n\tcase buf[0] < 192:\n\t\tlength = int64(buf[0])\n\tcase buf[0] < 224:\n\t\tlength = int64(buf[0]-192) << 8\n\t\t_, err = readFull(r, buf[0:1])\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t\tlength += int64(buf[0]) + 192\n\tcase buf[0] < 255:\n\t\tlength = int64(1) << (buf[0] & 0x1f)\n\t\tisPartial = true\n\tdefault:\n\t\t_, err = readFull(r, buf[0:4])\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t\tlength = int64(buf[0])<<24 |\n\t\t\tint64(buf[1])<<16 |\n\t\t\tint64(buf[2])<<8 |\n\t\t\tint64(buf[3])\n\t}\n\treturn\n}\n\n// partialLengthReader wraps an io.Reader and handles OpenPGP partial lengths.\n// The continuation lengths are parsed and removed from the stream and EOF is\n// returned at the end of the packet. See RFC 4880, section 4.2.2.4.\ntype partialLengthReader struct {\n\tr         io.Reader\n\tremaining int64\n\tisPartial bool\n}\n\nfunc (r *partialLengthReader) Read(p []byte) (n int, err error) {\n\tfor r.remaining == 0 {\n\t\tif !r.isPartial {\n\t\t\treturn 0, io.EOF\n\t\t}\n\t\tr.remaining, r.isPartial, err = readLength(r.r)\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t}\n\n\ttoRead := int64(len(p))\n\tif toRead > r.remaining {\n\t\ttoRead = r.remaining\n\t}\n\n\tn, err = r.r.Read(p[:int(toRead)])\n\tr.remaining -= int64(n)\n\tif n < int(toRead) && err == io.EOF {\n\t\terr = io.ErrUnexpectedEOF\n\t}\n\treturn\n}\n\n// partialLengthWriter writes a stream of data using OpenPGP partial lengths.\n// See RFC 4880, section 4.2.2.4.\ntype partialLengthWriter struct {\n\tw          io.WriteCloser\n\tlengthByte [1]byte\n}\n\nfunc (w *partialLengthWriter) Write(p []byte) (n int, err error) {\n\tfor len(p) > 0 {\n\t\tfor power := uint(14); power < 32; power-- {\n\t\t\tl := 1 << power\n\t\t\tif len(p) >= l {\n\t\t\t\tw.lengthByte[0] = 224 + uint8(power)\n\t\t\t\t_, err = w.w.Write(w.lengthByte[:])\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tvar m int\n\t\t\t\tm, err = w.w.Write(p[:l])\n\t\t\t\tn += m\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tp = p[l:]\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\treturn\n}\n\nfunc (w *partialLengthWriter) Close() error {\n\tw.lengthByte[0] = 0\n\t_, err := w.w.Write(w.lengthByte[:])\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn w.w.Close()\n}\n\n// A spanReader is an io.LimitReader, but it returns ErrUnexpectedEOF if the\n// underlying Reader returns EOF before the limit has been reached.\ntype spanReader struct {\n\tr io.Reader\n\tn int64\n}\n\nfunc (l *spanReader) Read(p []byte) (n int, err error) {\n\tif l.n <= 0 {\n\t\treturn 0, io.EOF\n\t}\n\tif int64(len(p)) > l.n {\n\t\tp = p[0:l.n]\n\t}\n\tn, err = l.r.Read(p)\n\tl.n -= int64(n)\n\tif l.n > 0 && err == io.EOF {\n\t\terr = io.ErrUnexpectedEOF\n\t}\n\treturn\n}\n\n// readHeader parses a packet header and returns an io.Reader which will return\n// the contents of the packet. See RFC 4880, section 4.2.\nfunc readHeader(r io.Reader) (tag packetType, length int64, contents io.Reader, err error) {\n\tvar buf [4]byte\n\t_, err = io.ReadFull(r, buf[:1])\n\tif err != nil {\n\t\treturn\n\t}\n\tif buf[0]&0x80 == 0 {\n\t\terr = errors.StructuralError(\"tag byte does not have MSB set\")\n\t\treturn\n\t}\n\tif buf[0]&0x40 == 0 {\n\t\t// Old format packet\n\t\ttag = packetType((buf[0] & 0x3f) >> 2)\n\t\tlengthType := buf[0] & 3\n\t\tif lengthType == 3 {\n\t\t\tlength = -1\n\t\t\tcontents = r\n\t\t\treturn\n\t\t}\n\t\tlengthBytes := 1 << lengthType\n\t\t_, err = readFull(r, buf[0:lengthBytes])\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t\tfor i := 0; i < lengthBytes; i++ {\n\t\t\tlength <<= 8\n\t\t\tlength |= int64(buf[i])\n\t\t}\n\t\tcontents = &spanReader{r, length}\n\t\treturn\n\t}\n\n\t// New format packet\n\ttag = packetType(buf[0] & 0x3f)\n\tlength, isPartial, err := readLength(r)\n\tif err != nil {\n\t\treturn\n\t}\n\tif isPartial {\n\t\tcontents = &partialLengthReader{\n\t\t\tremaining: length,\n\t\t\tisPartial: true,\n\t\t\tr:         r,\n\t\t}\n\t\tlength = -1\n\t} else {\n\t\tcontents = &spanReader{r, length}\n\t}\n\treturn\n}\n\n// serializeHeader writes an OpenPGP packet header to w. See RFC 4880, section\n// 4.2.\nfunc serializeHeader(w io.Writer, ptype packetType, length int) (err error) {\n\tvar buf [6]byte\n\tvar n int\n\n\tbuf[0] = 0x80 | 0x40 | byte(ptype)\n\tif length < 192 {\n\t\tbuf[1] = byte(length)\n\t\tn = 2\n\t} else if length < 8384 {\n\t\tlength -= 192\n\t\tbuf[1] = 192 + byte(length>>8)\n\t\tbuf[2] = byte(length)\n\t\tn = 3\n\t} else {\n\t\tbuf[1] = 255\n\t\tbuf[2] = byte(length >> 24)\n\t\tbuf[3] = byte(length >> 16)\n\t\tbuf[4] = byte(length >> 8)\n\t\tbuf[5] = byte(length)\n\t\tn = 6\n\t}\n\n\t_, err = w.Write(buf[:n])\n\treturn\n}\n\n// serializeStreamHeader writes an OpenPGP packet header to w where the\n// length of the packet is unknown. It returns a io.WriteCloser which can be\n// used to write the contents of the packet. See RFC 4880, section 4.2.\nfunc serializeStreamHeader(w io.WriteCloser, ptype packetType) (out io.WriteCloser, err error) {\n\tvar buf [1]byte\n\tbuf[0] = 0x80 | 0x40 | byte(ptype)\n\t_, err = w.Write(buf[:])\n\tif err != nil {\n\t\treturn\n\t}\n\tout = &partialLengthWriter{w: w}\n\treturn\n}\n\n// Packet represents an OpenPGP packet. Users are expected to try casting\n// instances of this interface to specific packet types.\ntype Packet interface {\n\tparse(io.Reader) error\n}\n\n// consumeAll reads from the given Reader until error, returning the number of\n// bytes read.\nfunc consumeAll(r io.Reader) (n int64, err error) {\n\tvar m int\n\tvar buf [1024]byte\n\n\tfor {\n\t\tm, err = r.Read(buf[:])\n\t\tn += int64(m)\n\t\tif err == io.EOF {\n\t\t\terr = nil\n\t\t\treturn\n\t\t}\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t}\n\n\tpanic(\"unreachable\")\n}\n\n// packetType represents the numeric ids of the different OpenPGP packet types. See\n// http://www.iana.org/assignments/pgp-parameters/pgp-parameters.xhtml#pgp-parameters-2\ntype packetType uint8\n\nconst (\n\tpacketTypeEncryptedKey              packetType = 1\n\tpacketTypeSignature                 packetType = 2\n\tpacketTypeSymmetricKeyEncrypted     packetType = 3\n\tpacketTypeOnePassSignature          packetType = 4\n\tpacketTypePrivateKey                packetType = 5\n\tpacketTypePublicKey                 packetType = 6\n\tpacketTypePrivateSubkey             packetType = 7\n\tpacketTypeCompressed                packetType = 8\n\tpacketTypeSymmetricallyEncrypted    packetType = 9\n\tpacketTypeLiteralData               packetType = 11\n\tpacketTypeUserId                    packetType = 13\n\tpacketTypePublicSubkey              packetType = 14\n\tpacketTypeUserAttribute             packetType = 17\n\tpacketTypeSymmetricallyEncryptedMDC packetType = 18\n)\n\n// peekVersion detects the version of a public key packet about to\n// be read. A bufio.Reader at the original position of the io.Reader\n// is returned.\nfunc peekVersion(r io.Reader) (bufr *bufio.Reader, ver byte, err error) {\n\tbufr = bufio.NewReader(r)\n\tvar verBuf []byte\n\tif verBuf, err = bufr.Peek(1); err != nil {\n\t\treturn\n\t}\n\tver = verBuf[0]\n\treturn\n}\n\n// Read reads a single OpenPGP packet from the given io.Reader. If there is an\n// error parsing a packet, the whole packet is consumed from the input.\nfunc Read(r io.Reader) (p Packet, err error) {\n\ttag, _, contents, err := readHeader(r)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tswitch tag {\n\tcase packetTypeEncryptedKey:\n\t\tp = new(EncryptedKey)\n\tcase packetTypeSignature:\n\t\tvar version byte\n\t\t// Detect signature version\n\t\tif contents, version, err = peekVersion(contents); err != nil {\n\t\t\treturn\n\t\t}\n\t\tif version < 4 {\n\t\t\tp = new(SignatureV3)\n\t\t} else {\n\t\t\tp = new(Signature)\n\t\t}\n\tcase packetTypeSymmetricKeyEncrypted:\n\t\tp = new(SymmetricKeyEncrypted)\n\tcase packetTypeOnePassSignature:\n\t\tp = new(OnePassSignature)\n\tcase packetTypePrivateKey, packetTypePrivateSubkey:\n\t\tpk := new(PrivateKey)\n\t\tif tag == packetTypePrivateSubkey {\n\t\t\tpk.IsSubkey = true\n\t\t}\n\t\tp = pk\n\tcase packetTypePublicKey, packetTypePublicSubkey:\n\t\tvar version byte\n\t\tif contents, version, err = peekVersion(contents); err != nil {\n\t\t\treturn\n\t\t}\n\t\tisSubkey := tag == packetTypePublicSubkey\n\t\tif version < 4 {\n\t\t\tp = &PublicKeyV3{IsSubkey: isSubkey}\n\t\t} else {\n\t\t\tp = &PublicKey{IsSubkey: isSubkey}\n\t\t}\n\tcase packetTypeCompressed:\n\t\tp = new(Compressed)\n\tcase packetTypeSymmetricallyEncrypted:\n\t\tp = new(SymmetricallyEncrypted)\n\tcase packetTypeLiteralData:\n\t\tp = new(LiteralData)\n\tcase packetTypeUserId:\n\t\tp = new(UserId)\n\tcase packetTypeUserAttribute:\n\t\tp = new(UserAttribute)\n\tcase packetTypeSymmetricallyEncryptedMDC:\n\t\tse := new(SymmetricallyEncrypted)\n\t\tse.MDC = true\n\t\tp = se\n\tdefault:\n\t\terr = errors.UnknownPacketTypeError(tag)\n\t}\n\tif p != nil {\n\t\terr = p.parse(contents)\n\t}\n\tif err != nil {\n\t\tconsumeAll(contents)\n\t}\n\treturn\n}\n\n// SignatureType represents the different semantic meanings of an OpenPGP\n// signature. See RFC 4880, section 5.2.1.\ntype SignatureType uint8\n\nconst (\n\tSigTypeBinary            SignatureType = 0\n\tSigTypeText                            = 1\n\tSigTypeGenericCert                     = 0x10\n\tSigTypePersonaCert                     = 0x11\n\tSigTypeCasualCert                      = 0x12\n\tSigTypePositiveCert                    = 0x13\n\tSigTypeSubkeyBinding                   = 0x18\n\tSigTypePrimaryKeyBinding               = 0x19\n\tSigTypeDirectSignature                 = 0x1F\n\tSigTypeKeyRevocation                   = 0x20\n\tSigTypeSubkeyRevocation                = 0x28\n)\n\n// PublicKeyAlgorithm represents the different public key system specified for\n// OpenPGP. See\n// http://www.iana.org/assignments/pgp-parameters/pgp-parameters.xhtml#pgp-parameters-12\ntype PublicKeyAlgorithm uint8\n\nconst (\n\tPubKeyAlgoRSA            PublicKeyAlgorithm = 1\n\tPubKeyAlgoRSAEncryptOnly PublicKeyAlgorithm = 2\n\tPubKeyAlgoRSASignOnly    PublicKeyAlgorithm = 3\n\tPubKeyAlgoElGamal        PublicKeyAlgorithm = 16\n\tPubKeyAlgoDSA            PublicKeyAlgorithm = 17\n\t// RFC 6637, Section 5.\n\tPubKeyAlgoECDH  PublicKeyAlgorithm = 18\n\tPubKeyAlgoECDSA PublicKeyAlgorithm = 19\n)\n\n// CanEncrypt returns true if it's possible to encrypt a message to a public\n// key of the given type.\nfunc (pka PublicKeyAlgorithm) CanEncrypt() bool {\n\tswitch pka {\n\tcase PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoElGamal:\n\t\treturn true\n\t}\n\treturn false\n}\n\n// CanSign returns true if it's possible for a public key of the given type to\n// sign a message.\nfunc (pka PublicKeyAlgorithm) CanSign() bool {\n\tswitch pka {\n\tcase PubKeyAlgoRSA, PubKeyAlgoRSASignOnly, PubKeyAlgoDSA, PubKeyAlgoECDSA:\n\t\treturn true\n\t}\n\treturn false\n}\n\n// CipherFunction represents the different block ciphers specified for OpenPGP. See\n// http://www.iana.org/assignments/pgp-parameters/pgp-parameters.xhtml#pgp-parameters-13\ntype CipherFunction uint8\n\nconst (\n\tCipher3DES   CipherFunction = 2\n\tCipherCAST5  CipherFunction = 3\n\tCipherAES128 CipherFunction = 7\n\tCipherAES192 CipherFunction = 8\n\tCipherAES256 CipherFunction = 9\n)\n\n// KeySize returns the key size, in bytes, of cipher.\nfunc (cipher CipherFunction) KeySize() int {\n\tswitch cipher {\n\tcase Cipher3DES:\n\t\treturn 24\n\tcase CipherCAST5:\n\t\treturn cast5.KeySize\n\tcase CipherAES128:\n\t\treturn 16\n\tcase CipherAES192:\n\t\treturn 24\n\tcase CipherAES256:\n\t\treturn 32\n\t}\n\treturn 0\n}\n\n// blockSize returns the block size, in bytes, of cipher.\nfunc (cipher CipherFunction) blockSize() int {\n\tswitch cipher {\n\tcase Cipher3DES:\n\t\treturn des.BlockSize\n\tcase CipherCAST5:\n\t\treturn 8\n\tcase CipherAES128, CipherAES192, CipherAES256:\n\t\treturn 16\n\t}\n\treturn 0\n}\n\n// new returns a fresh instance of the given cipher.\nfunc (cipher CipherFunction) new(key []byte) (block cipher.Block) {\n\tswitch cipher {\n\tcase Cipher3DES:\n\t\tblock, _ = des.NewTripleDESCipher(key)\n\tcase CipherCAST5:\n\t\tblock, _ = cast5.NewCipher(key)\n\tcase CipherAES128, CipherAES192, CipherAES256:\n\t\tblock, _ = aes.NewCipher(key)\n\t}\n\treturn\n}\n\n// readMPI reads a big integer from r. The bit length returned is the bit\n// length that was specified in r. This is preserved so that the integer can be\n// reserialized exactly.\nfunc readMPI(r io.Reader) (mpi []byte, bitLength uint16, err error) {\n\tvar buf [2]byte\n\t_, err = readFull(r, buf[0:])\n\tif err != nil {\n\t\treturn\n\t}\n\tbitLength = uint16(buf[0])<<8 | uint16(buf[1])\n\tnumBytes := (int(bitLength) + 7) / 8\n\tmpi = make([]byte, numBytes)\n\t_, err = readFull(r, mpi)\n\treturn\n}\n\n// mpiLength returns the length of the given *big.Int when serialized as an\n// MPI.\nfunc mpiLength(n *big.Int) (mpiLengthInBytes int) {\n\tmpiLengthInBytes = 2 /* MPI length */\n\tmpiLengthInBytes += (n.BitLen() + 7) / 8\n\treturn\n}\n\n// writeMPI serializes a big integer to w.\nfunc writeMPI(w io.Writer, bitLength uint16, mpiBytes []byte) (err error) {\n\t_, err = w.Write([]byte{byte(bitLength >> 8), byte(bitLength)})\n\tif err == nil {\n\t\t_, err = w.Write(mpiBytes)\n\t}\n\treturn\n}\n\n// writeBig serializes a *big.Int to w.\nfunc writeBig(w io.Writer, i *big.Int) error {\n\treturn writeMPI(w, uint16(i.BitLen()), i.Bytes())\n}\n\n// CompressionAlgo Represents the different compression algorithms\n// supported by OpenPGP (except for BZIP2, which is not currently\n// supported). See Section 9.3 of RFC 4880.\ntype CompressionAlgo uint8\n\nconst (\n\tCompressionNone CompressionAlgo = 0\n\tCompressionZIP  CompressionAlgo = 1\n\tCompressionZLIB CompressionAlgo = 2\n)\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/openpgp/packet/private_key.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage packet\n\nimport (\n\t\"bytes\"\n\t\"crypto/cipher\"\n\t\"crypto/dsa\"\n\t\"crypto/rsa\"\n\t\"crypto/sha1\"\n\t\"golang.org/x/crypto/openpgp/elgamal\"\n\t\"golang.org/x/crypto/openpgp/errors\"\n\t\"golang.org/x/crypto/openpgp/s2k\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"math/big\"\n\t\"strconv\"\n\t\"time\"\n)\n\n// PrivateKey represents a possibly encrypted private key. See RFC 4880,\n// section 5.5.3.\ntype PrivateKey struct {\n\tPublicKey\n\tEncrypted     bool // if true then the private key is unavailable until Decrypt has been called.\n\tencryptedData []byte\n\tcipher        CipherFunction\n\ts2k           func(out, in []byte)\n\tPrivateKey    interface{} // An *rsa.PrivateKey or *dsa.PrivateKey.\n\tsha1Checksum  bool\n\tiv            []byte\n}\n\nfunc NewRSAPrivateKey(currentTime time.Time, priv *rsa.PrivateKey) *PrivateKey {\n\tpk := new(PrivateKey)\n\tpk.PublicKey = *NewRSAPublicKey(currentTime, &priv.PublicKey)\n\tpk.PrivateKey = priv\n\treturn pk\n}\n\nfunc NewDSAPrivateKey(currentTime time.Time, priv *dsa.PrivateKey) *PrivateKey {\n\tpk := new(PrivateKey)\n\tpk.PublicKey = *NewDSAPublicKey(currentTime, &priv.PublicKey)\n\tpk.PrivateKey = priv\n\treturn pk\n}\n\nfunc NewElGamalPrivateKey(currentTime time.Time, priv *elgamal.PrivateKey) *PrivateKey {\n\tpk := new(PrivateKey)\n\tpk.PublicKey = *NewElGamalPublicKey(currentTime, &priv.PublicKey)\n\tpk.PrivateKey = priv\n\treturn pk\n}\n\nfunc (pk *PrivateKey) parse(r io.Reader) (err error) {\n\terr = (&pk.PublicKey).parse(r)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar buf [1]byte\n\t_, err = readFull(r, buf[:])\n\tif err != nil {\n\t\treturn\n\t}\n\n\ts2kType := buf[0]\n\n\tswitch s2kType {\n\tcase 0:\n\t\tpk.s2k = nil\n\t\tpk.Encrypted = false\n\tcase 254, 255:\n\t\t_, err = readFull(r, buf[:])\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t\tpk.cipher = CipherFunction(buf[0])\n\t\tpk.Encrypted = true\n\t\tpk.s2k, err = s2k.Parse(r)\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t\tif s2kType == 254 {\n\t\t\tpk.sha1Checksum = true\n\t\t}\n\tdefault:\n\t\treturn errors.UnsupportedError(\"deprecated s2k function in private key\")\n\t}\n\n\tif pk.Encrypted {\n\t\tblockSize := pk.cipher.blockSize()\n\t\tif blockSize == 0 {\n\t\t\treturn errors.UnsupportedError(\"unsupported cipher in private key: \" + strconv.Itoa(int(pk.cipher)))\n\t\t}\n\t\tpk.iv = make([]byte, blockSize)\n\t\t_, err = readFull(r, pk.iv)\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t}\n\n\tpk.encryptedData, err = ioutil.ReadAll(r)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tif !pk.Encrypted {\n\t\treturn pk.parsePrivateKey(pk.encryptedData)\n\t}\n\n\treturn\n}\n\nfunc mod64kHash(d []byte) uint16 {\n\tvar h uint16\n\tfor _, b := range d {\n\t\th += uint16(b)\n\t}\n\treturn h\n}\n\nfunc (pk *PrivateKey) Serialize(w io.Writer) (err error) {\n\t// TODO(agl): support encrypted private keys\n\tbuf := bytes.NewBuffer(nil)\n\terr = pk.PublicKey.serializeWithoutHeaders(buf)\n\tif err != nil {\n\t\treturn\n\t}\n\tbuf.WriteByte(0 /* no encryption */)\n\n\tprivateKeyBuf := bytes.NewBuffer(nil)\n\n\tswitch priv := pk.PrivateKey.(type) {\n\tcase *rsa.PrivateKey:\n\t\terr = serializeRSAPrivateKey(privateKeyBuf, priv)\n\tcase *dsa.PrivateKey:\n\t\terr = serializeDSAPrivateKey(privateKeyBuf, priv)\n\tcase *elgamal.PrivateKey:\n\t\terr = serializeElGamalPrivateKey(privateKeyBuf, priv)\n\tdefault:\n\t\terr = errors.InvalidArgumentError(\"unknown private key type\")\n\t}\n\tif err != nil {\n\t\treturn\n\t}\n\n\tptype := packetTypePrivateKey\n\tcontents := buf.Bytes()\n\tprivateKeyBytes := privateKeyBuf.Bytes()\n\tif pk.IsSubkey {\n\t\tptype = packetTypePrivateSubkey\n\t}\n\terr = serializeHeader(w, ptype, len(contents)+len(privateKeyBytes)+2)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, err = w.Write(contents)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, err = w.Write(privateKeyBytes)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tchecksum := mod64kHash(privateKeyBytes)\n\tvar checksumBytes [2]byte\n\tchecksumBytes[0] = byte(checksum >> 8)\n\tchecksumBytes[1] = byte(checksum)\n\t_, err = w.Write(checksumBytes[:])\n\n\treturn\n}\n\nfunc serializeRSAPrivateKey(w io.Writer, priv *rsa.PrivateKey) error {\n\terr := writeBig(w, priv.D)\n\tif err != nil {\n\t\treturn err\n\t}\n\terr = writeBig(w, priv.Primes[1])\n\tif err != nil {\n\t\treturn err\n\t}\n\terr = writeBig(w, priv.Primes[0])\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn writeBig(w, priv.Precomputed.Qinv)\n}\n\nfunc serializeDSAPrivateKey(w io.Writer, priv *dsa.PrivateKey) error {\n\treturn writeBig(w, priv.X)\n}\n\nfunc serializeElGamalPrivateKey(w io.Writer, priv *elgamal.PrivateKey) error {\n\treturn writeBig(w, priv.X)\n}\n\n// Decrypt decrypts an encrypted private key using a passphrase.\nfunc (pk *PrivateKey) Decrypt(passphrase []byte) error {\n\tif !pk.Encrypted {\n\t\treturn nil\n\t}\n\n\tkey := make([]byte, pk.cipher.KeySize())\n\tpk.s2k(key, passphrase)\n\tblock := pk.cipher.new(key)\n\tcfb := cipher.NewCFBDecrypter(block, pk.iv)\n\n\tdata := make([]byte, len(pk.encryptedData))\n\tcfb.XORKeyStream(data, pk.encryptedData)\n\n\tif pk.sha1Checksum {\n\t\tif len(data) < sha1.Size {\n\t\t\treturn errors.StructuralError(\"truncated private key data\")\n\t\t}\n\t\th := sha1.New()\n\t\th.Write(data[:len(data)-sha1.Size])\n\t\tsum := h.Sum(nil)\n\t\tif !bytes.Equal(sum, data[len(data)-sha1.Size:]) {\n\t\t\treturn errors.StructuralError(\"private key checksum failure\")\n\t\t}\n\t\tdata = data[:len(data)-sha1.Size]\n\t} else {\n\t\tif len(data) < 2 {\n\t\t\treturn errors.StructuralError(\"truncated private key data\")\n\t\t}\n\t\tvar sum uint16\n\t\tfor i := 0; i < len(data)-2; i++ {\n\t\t\tsum += uint16(data[i])\n\t\t}\n\t\tif data[len(data)-2] != uint8(sum>>8) ||\n\t\t\tdata[len(data)-1] != uint8(sum) {\n\t\t\treturn errors.StructuralError(\"private key checksum failure\")\n\t\t}\n\t\tdata = data[:len(data)-2]\n\t}\n\n\treturn pk.parsePrivateKey(data)\n}\n\nfunc (pk *PrivateKey) parsePrivateKey(data []byte) (err error) {\n\tswitch pk.PublicKey.PubKeyAlgo {\n\tcase PubKeyAlgoRSA, PubKeyAlgoRSASignOnly, PubKeyAlgoRSAEncryptOnly:\n\t\treturn pk.parseRSAPrivateKey(data)\n\tcase PubKeyAlgoDSA:\n\t\treturn pk.parseDSAPrivateKey(data)\n\tcase PubKeyAlgoElGamal:\n\t\treturn pk.parseElGamalPrivateKey(data)\n\t}\n\tpanic(\"impossible\")\n}\n\nfunc (pk *PrivateKey) parseRSAPrivateKey(data []byte) (err error) {\n\trsaPub := pk.PublicKey.PublicKey.(*rsa.PublicKey)\n\trsaPriv := new(rsa.PrivateKey)\n\trsaPriv.PublicKey = *rsaPub\n\n\tbuf := bytes.NewBuffer(data)\n\td, _, err := readMPI(buf)\n\tif err != nil {\n\t\treturn\n\t}\n\tp, _, err := readMPI(buf)\n\tif err != nil {\n\t\treturn\n\t}\n\tq, _, err := readMPI(buf)\n\tif err != nil {\n\t\treturn\n\t}\n\n\trsaPriv.D = new(big.Int).SetBytes(d)\n\trsaPriv.Primes = make([]*big.Int, 2)\n\trsaPriv.Primes[0] = new(big.Int).SetBytes(p)\n\trsaPriv.Primes[1] = new(big.Int).SetBytes(q)\n\tif err := rsaPriv.Validate(); err != nil {\n\t\treturn err\n\t}\n\trsaPriv.Precompute()\n\tpk.PrivateKey = rsaPriv\n\tpk.Encrypted = false\n\tpk.encryptedData = nil\n\n\treturn nil\n}\n\nfunc (pk *PrivateKey) parseDSAPrivateKey(data []byte) (err error) {\n\tdsaPub := pk.PublicKey.PublicKey.(*dsa.PublicKey)\n\tdsaPriv := new(dsa.PrivateKey)\n\tdsaPriv.PublicKey = *dsaPub\n\n\tbuf := bytes.NewBuffer(data)\n\tx, _, err := readMPI(buf)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tdsaPriv.X = new(big.Int).SetBytes(x)\n\tpk.PrivateKey = dsaPriv\n\tpk.Encrypted = false\n\tpk.encryptedData = nil\n\n\treturn nil\n}\n\nfunc (pk *PrivateKey) parseElGamalPrivateKey(data []byte) (err error) {\n\tpub := pk.PublicKey.PublicKey.(*elgamal.PublicKey)\n\tpriv := new(elgamal.PrivateKey)\n\tpriv.PublicKey = *pub\n\n\tbuf := bytes.NewBuffer(data)\n\tx, _, err := readMPI(buf)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tpriv.X = new(big.Int).SetBytes(x)\n\tpk.PrivateKey = priv\n\tpk.Encrypted = false\n\tpk.encryptedData = nil\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/openpgp/packet/public_key.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage packet\n\nimport (\n\t\"bytes\"\n\t\"crypto\"\n\t\"crypto/dsa\"\n\t\"crypto/ecdsa\"\n\t\"crypto/elliptic\"\n\t\"crypto/rsa\"\n\t\"crypto/sha1\"\n\t_ \"crypto/sha256\"\n\t_ \"crypto/sha512\"\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"hash\"\n\t\"io\"\n\t\"math/big\"\n\t\"strconv\"\n\t\"time\"\n\n\t\"golang.org/x/crypto/openpgp/elgamal\"\n\t\"golang.org/x/crypto/openpgp/errors\"\n)\n\nvar (\n\t// NIST curve P-256\n\toidCurveP256 []byte = []byte{0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x07}\n\t// NIST curve P-384\n\toidCurveP384 []byte = []byte{0x2B, 0x81, 0x04, 0x00, 0x22}\n\t// NIST curve P-521\n\toidCurveP521 []byte = []byte{0x2B, 0x81, 0x04, 0x00, 0x23}\n)\n\nconst maxOIDLength = 8\n\n// ecdsaKey stores the algorithm-specific fields for ECDSA keys.\n// as defined in RFC 6637, Section 9.\ntype ecdsaKey struct {\n\t// oid contains the OID byte sequence identifying the elliptic curve used\n\toid []byte\n\t// p contains the elliptic curve point that represents the public key\n\tp parsedMPI\n}\n\n// parseOID reads the OID for the curve as defined in RFC 6637, Section 9.\nfunc parseOID(r io.Reader) (oid []byte, err error) {\n\tbuf := make([]byte, maxOIDLength)\n\tif _, err = readFull(r, buf[:1]); err != nil {\n\t\treturn\n\t}\n\toidLen := buf[0]\n\tif int(oidLen) > len(buf) {\n\t\terr = errors.UnsupportedError(\"invalid oid length: \" + strconv.Itoa(int(oidLen)))\n\t\treturn\n\t}\n\toid = buf[:oidLen]\n\t_, err = readFull(r, oid)\n\treturn\n}\n\nfunc (f *ecdsaKey) parse(r io.Reader) (err error) {\n\tif f.oid, err = parseOID(r); err != nil {\n\t\treturn err\n\t}\n\tf.p.bytes, f.p.bitLength, err = readMPI(r)\n\treturn\n}\n\nfunc (f *ecdsaKey) serialize(w io.Writer) (err error) {\n\tbuf := make([]byte, maxOIDLength+1)\n\tbuf[0] = byte(len(f.oid))\n\tcopy(buf[1:], f.oid)\n\tif _, err = w.Write(buf[:len(f.oid)+1]); err != nil {\n\t\treturn\n\t}\n\treturn writeMPIs(w, f.p)\n}\n\nfunc (f *ecdsaKey) newECDSA() (*ecdsa.PublicKey, error) {\n\tvar c elliptic.Curve\n\tif bytes.Equal(f.oid, oidCurveP256) {\n\t\tc = elliptic.P256()\n\t} else if bytes.Equal(f.oid, oidCurveP384) {\n\t\tc = elliptic.P384()\n\t} else if bytes.Equal(f.oid, oidCurveP521) {\n\t\tc = elliptic.P521()\n\t} else {\n\t\treturn nil, errors.UnsupportedError(fmt.Sprintf(\"unsupported oid: %x\", f.oid))\n\t}\n\tx, y := elliptic.Unmarshal(c, f.p.bytes)\n\tif x == nil {\n\t\treturn nil, errors.UnsupportedError(\"failed to parse EC point\")\n\t}\n\treturn &ecdsa.PublicKey{Curve: c, X: x, Y: y}, nil\n}\n\nfunc (f *ecdsaKey) byteLen() int {\n\treturn 1 + len(f.oid) + 2 + len(f.p.bytes)\n}\n\ntype kdfHashFunction byte\ntype kdfAlgorithm byte\n\n// ecdhKdf stores key derivation function parameters\n// used for ECDH encryption. See RFC 6637, Section 9.\ntype ecdhKdf struct {\n\tKdfHash kdfHashFunction\n\tKdfAlgo kdfAlgorithm\n}\n\nfunc (f *ecdhKdf) parse(r io.Reader) (err error) {\n\tbuf := make([]byte, 1)\n\tif _, err = readFull(r, buf); err != nil {\n\t\treturn\n\t}\n\tkdfLen := int(buf[0])\n\tif kdfLen < 3 {\n\t\treturn errors.UnsupportedError(\"Unsupported ECDH KDF length: \" + strconv.Itoa(kdfLen))\n\t}\n\tbuf = make([]byte, kdfLen)\n\tif _, err = readFull(r, buf); err != nil {\n\t\treturn\n\t}\n\treserved := int(buf[0])\n\tf.KdfHash = kdfHashFunction(buf[1])\n\tf.KdfAlgo = kdfAlgorithm(buf[2])\n\tif reserved != 0x01 {\n\t\treturn errors.UnsupportedError(\"Unsupported KDF reserved field: \" + strconv.Itoa(reserved))\n\t}\n\treturn\n}\n\nfunc (f *ecdhKdf) serialize(w io.Writer) (err error) {\n\tbuf := make([]byte, 4)\n\t// See RFC 6637, Section 9, Algorithm-Specific Fields for ECDH keys.\n\tbuf[0] = byte(0x03) // Length of the following fields\n\tbuf[1] = byte(0x01) // Reserved for future extensions, must be 1 for now\n\tbuf[2] = byte(f.KdfHash)\n\tbuf[3] = byte(f.KdfAlgo)\n\t_, err = w.Write(buf[:])\n\treturn\n}\n\nfunc (f *ecdhKdf) byteLen() int {\n\treturn 4\n}\n\n// PublicKey represents an OpenPGP public key. See RFC 4880, section 5.5.2.\ntype PublicKey struct {\n\tCreationTime time.Time\n\tPubKeyAlgo   PublicKeyAlgorithm\n\tPublicKey    interface{} // *rsa.PublicKey, *dsa.PublicKey or *ecdsa.PublicKey\n\tFingerprint  [20]byte\n\tKeyId        uint64\n\tIsSubkey     bool\n\n\tn, e, p, q, g, y parsedMPI\n\n\t// RFC 6637 fields\n\tec   *ecdsaKey\n\tecdh *ecdhKdf\n}\n\n// signingKey provides a convenient abstraction over signature verification\n// for v3 and v4 public keys.\ntype signingKey interface {\n\tSerializeSignaturePrefix(io.Writer)\n\tserializeWithoutHeaders(io.Writer) error\n}\n\nfunc fromBig(n *big.Int) parsedMPI {\n\treturn parsedMPI{\n\t\tbytes:     n.Bytes(),\n\t\tbitLength: uint16(n.BitLen()),\n\t}\n}\n\n// NewRSAPublicKey returns a PublicKey that wraps the given rsa.PublicKey.\nfunc NewRSAPublicKey(creationTime time.Time, pub *rsa.PublicKey) *PublicKey {\n\tpk := &PublicKey{\n\t\tCreationTime: creationTime,\n\t\tPubKeyAlgo:   PubKeyAlgoRSA,\n\t\tPublicKey:    pub,\n\t\tn:            fromBig(pub.N),\n\t\te:            fromBig(big.NewInt(int64(pub.E))),\n\t}\n\n\tpk.setFingerPrintAndKeyId()\n\treturn pk\n}\n\n// NewDSAPublicKey returns a PublicKey that wraps the given dsa.PublicKey.\nfunc NewDSAPublicKey(creationTime time.Time, pub *dsa.PublicKey) *PublicKey {\n\tpk := &PublicKey{\n\t\tCreationTime: creationTime,\n\t\tPubKeyAlgo:   PubKeyAlgoDSA,\n\t\tPublicKey:    pub,\n\t\tp:            fromBig(pub.P),\n\t\tq:            fromBig(pub.Q),\n\t\tg:            fromBig(pub.G),\n\t\ty:            fromBig(pub.Y),\n\t}\n\n\tpk.setFingerPrintAndKeyId()\n\treturn pk\n}\n\n// NewElGamalPublicKey returns a PublicKey that wraps the given elgamal.PublicKey.\nfunc NewElGamalPublicKey(creationTime time.Time, pub *elgamal.PublicKey) *PublicKey {\n\tpk := &PublicKey{\n\t\tCreationTime: creationTime,\n\t\tPubKeyAlgo:   PubKeyAlgoElGamal,\n\t\tPublicKey:    pub,\n\t\tp:            fromBig(pub.P),\n\t\tg:            fromBig(pub.G),\n\t\ty:            fromBig(pub.Y),\n\t}\n\n\tpk.setFingerPrintAndKeyId()\n\treturn pk\n}\n\nfunc (pk *PublicKey) parse(r io.Reader) (err error) {\n\t// RFC 4880, section 5.5.2\n\tvar buf [6]byte\n\t_, err = readFull(r, buf[:])\n\tif err != nil {\n\t\treturn\n\t}\n\tif buf[0] != 4 {\n\t\treturn errors.UnsupportedError(\"public key version\")\n\t}\n\tpk.CreationTime = time.Unix(int64(uint32(buf[1])<<24|uint32(buf[2])<<16|uint32(buf[3])<<8|uint32(buf[4])), 0)\n\tpk.PubKeyAlgo = PublicKeyAlgorithm(buf[5])\n\tswitch pk.PubKeyAlgo {\n\tcase PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoRSASignOnly:\n\t\terr = pk.parseRSA(r)\n\tcase PubKeyAlgoDSA:\n\t\terr = pk.parseDSA(r)\n\tcase PubKeyAlgoElGamal:\n\t\terr = pk.parseElGamal(r)\n\tcase PubKeyAlgoECDSA:\n\t\tpk.ec = new(ecdsaKey)\n\t\tif err = pk.ec.parse(r); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tpk.PublicKey, err = pk.ec.newECDSA()\n\tcase PubKeyAlgoECDH:\n\t\tpk.ec = new(ecdsaKey)\n\t\tif err = pk.ec.parse(r); err != nil {\n\t\t\treturn\n\t\t}\n\t\tpk.ecdh = new(ecdhKdf)\n\t\tif err = pk.ecdh.parse(r); err != nil {\n\t\t\treturn\n\t\t}\n\t\t// The ECDH key is stored in an ecdsa.PublicKey for convenience.\n\t\tpk.PublicKey, err = pk.ec.newECDSA()\n\tdefault:\n\t\terr = errors.UnsupportedError(\"public key type: \" + strconv.Itoa(int(pk.PubKeyAlgo)))\n\t}\n\tif err != nil {\n\t\treturn\n\t}\n\n\tpk.setFingerPrintAndKeyId()\n\treturn\n}\n\nfunc (pk *PublicKey) setFingerPrintAndKeyId() {\n\t// RFC 4880, section 12.2\n\tfingerPrint := sha1.New()\n\tpk.SerializeSignaturePrefix(fingerPrint)\n\tpk.serializeWithoutHeaders(fingerPrint)\n\tcopy(pk.Fingerprint[:], fingerPrint.Sum(nil))\n\tpk.KeyId = binary.BigEndian.Uint64(pk.Fingerprint[12:20])\n}\n\n// parseRSA parses RSA public key material from the given Reader. See RFC 4880,\n// section 5.5.2.\nfunc (pk *PublicKey) parseRSA(r io.Reader) (err error) {\n\tpk.n.bytes, pk.n.bitLength, err = readMPI(r)\n\tif err != nil {\n\t\treturn\n\t}\n\tpk.e.bytes, pk.e.bitLength, err = readMPI(r)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tif len(pk.e.bytes) > 3 {\n\t\terr = errors.UnsupportedError(\"large public exponent\")\n\t\treturn\n\t}\n\trsa := &rsa.PublicKey{\n\t\tN: new(big.Int).SetBytes(pk.n.bytes),\n\t\tE: 0,\n\t}\n\tfor i := 0; i < len(pk.e.bytes); i++ {\n\t\trsa.E <<= 8\n\t\trsa.E |= int(pk.e.bytes[i])\n\t}\n\tpk.PublicKey = rsa\n\treturn\n}\n\n// parseDSA parses DSA public key material from the given Reader. See RFC 4880,\n// section 5.5.2.\nfunc (pk *PublicKey) parseDSA(r io.Reader) (err error) {\n\tpk.p.bytes, pk.p.bitLength, err = readMPI(r)\n\tif err != nil {\n\t\treturn\n\t}\n\tpk.q.bytes, pk.q.bitLength, err = readMPI(r)\n\tif err != nil {\n\t\treturn\n\t}\n\tpk.g.bytes, pk.g.bitLength, err = readMPI(r)\n\tif err != nil {\n\t\treturn\n\t}\n\tpk.y.bytes, pk.y.bitLength, err = readMPI(r)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tdsa := new(dsa.PublicKey)\n\tdsa.P = new(big.Int).SetBytes(pk.p.bytes)\n\tdsa.Q = new(big.Int).SetBytes(pk.q.bytes)\n\tdsa.G = new(big.Int).SetBytes(pk.g.bytes)\n\tdsa.Y = new(big.Int).SetBytes(pk.y.bytes)\n\tpk.PublicKey = dsa\n\treturn\n}\n\n// parseElGamal parses ElGamal public key material from the given Reader. See\n// RFC 4880, section 5.5.2.\nfunc (pk *PublicKey) parseElGamal(r io.Reader) (err error) {\n\tpk.p.bytes, pk.p.bitLength, err = readMPI(r)\n\tif err != nil {\n\t\treturn\n\t}\n\tpk.g.bytes, pk.g.bitLength, err = readMPI(r)\n\tif err != nil {\n\t\treturn\n\t}\n\tpk.y.bytes, pk.y.bitLength, err = readMPI(r)\n\tif err != nil {\n\t\treturn\n\t}\n\n\telgamal := new(elgamal.PublicKey)\n\telgamal.P = new(big.Int).SetBytes(pk.p.bytes)\n\telgamal.G = new(big.Int).SetBytes(pk.g.bytes)\n\telgamal.Y = new(big.Int).SetBytes(pk.y.bytes)\n\tpk.PublicKey = elgamal\n\treturn\n}\n\n// SerializeSignaturePrefix writes the prefix for this public key to the given Writer.\n// The prefix is used when calculating a signature over this public key. See\n// RFC 4880, section 5.2.4.\nfunc (pk *PublicKey) SerializeSignaturePrefix(h io.Writer) {\n\tvar pLength uint16\n\tswitch pk.PubKeyAlgo {\n\tcase PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoRSASignOnly:\n\t\tpLength += 2 + uint16(len(pk.n.bytes))\n\t\tpLength += 2 + uint16(len(pk.e.bytes))\n\tcase PubKeyAlgoDSA:\n\t\tpLength += 2 + uint16(len(pk.p.bytes))\n\t\tpLength += 2 + uint16(len(pk.q.bytes))\n\t\tpLength += 2 + uint16(len(pk.g.bytes))\n\t\tpLength += 2 + uint16(len(pk.y.bytes))\n\tcase PubKeyAlgoElGamal:\n\t\tpLength += 2 + uint16(len(pk.p.bytes))\n\t\tpLength += 2 + uint16(len(pk.g.bytes))\n\t\tpLength += 2 + uint16(len(pk.y.bytes))\n\tcase PubKeyAlgoECDSA:\n\t\tpLength += uint16(pk.ec.byteLen())\n\tcase PubKeyAlgoECDH:\n\t\tpLength += uint16(pk.ec.byteLen())\n\t\tpLength += uint16(pk.ecdh.byteLen())\n\tdefault:\n\t\tpanic(\"unknown public key algorithm\")\n\t}\n\tpLength += 6\n\th.Write([]byte{0x99, byte(pLength >> 8), byte(pLength)})\n\treturn\n}\n\nfunc (pk *PublicKey) Serialize(w io.Writer) (err error) {\n\tlength := 6 // 6 byte header\n\n\tswitch pk.PubKeyAlgo {\n\tcase PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoRSASignOnly:\n\t\tlength += 2 + len(pk.n.bytes)\n\t\tlength += 2 + len(pk.e.bytes)\n\tcase PubKeyAlgoDSA:\n\t\tlength += 2 + len(pk.p.bytes)\n\t\tlength += 2 + len(pk.q.bytes)\n\t\tlength += 2 + len(pk.g.bytes)\n\t\tlength += 2 + len(pk.y.bytes)\n\tcase PubKeyAlgoElGamal:\n\t\tlength += 2 + len(pk.p.bytes)\n\t\tlength += 2 + len(pk.g.bytes)\n\t\tlength += 2 + len(pk.y.bytes)\n\tcase PubKeyAlgoECDSA:\n\t\tlength += pk.ec.byteLen()\n\tcase PubKeyAlgoECDH:\n\t\tlength += pk.ec.byteLen()\n\t\tlength += pk.ecdh.byteLen()\n\tdefault:\n\t\tpanic(\"unknown public key algorithm\")\n\t}\n\n\tpacketType := packetTypePublicKey\n\tif pk.IsSubkey {\n\t\tpacketType = packetTypePublicSubkey\n\t}\n\terr = serializeHeader(w, packetType, length)\n\tif err != nil {\n\t\treturn\n\t}\n\treturn pk.serializeWithoutHeaders(w)\n}\n\n// serializeWithoutHeaders marshals the PublicKey to w in the form of an\n// OpenPGP public key packet, not including the packet header.\nfunc (pk *PublicKey) serializeWithoutHeaders(w io.Writer) (err error) {\n\tvar buf [6]byte\n\tbuf[0] = 4\n\tt := uint32(pk.CreationTime.Unix())\n\tbuf[1] = byte(t >> 24)\n\tbuf[2] = byte(t >> 16)\n\tbuf[3] = byte(t >> 8)\n\tbuf[4] = byte(t)\n\tbuf[5] = byte(pk.PubKeyAlgo)\n\n\t_, err = w.Write(buf[:])\n\tif err != nil {\n\t\treturn\n\t}\n\n\tswitch pk.PubKeyAlgo {\n\tcase PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoRSASignOnly:\n\t\treturn writeMPIs(w, pk.n, pk.e)\n\tcase PubKeyAlgoDSA:\n\t\treturn writeMPIs(w, pk.p, pk.q, pk.g, pk.y)\n\tcase PubKeyAlgoElGamal:\n\t\treturn writeMPIs(w, pk.p, pk.g, pk.y)\n\tcase PubKeyAlgoECDSA:\n\t\treturn pk.ec.serialize(w)\n\tcase PubKeyAlgoECDH:\n\t\tif err = pk.ec.serialize(w); err != nil {\n\t\t\treturn\n\t\t}\n\t\treturn pk.ecdh.serialize(w)\n\t}\n\treturn errors.InvalidArgumentError(\"bad public-key algorithm\")\n}\n\n// CanSign returns true iff this public key can generate signatures\nfunc (pk *PublicKey) CanSign() bool {\n\treturn pk.PubKeyAlgo != PubKeyAlgoRSAEncryptOnly && pk.PubKeyAlgo != PubKeyAlgoElGamal\n}\n\n// VerifySignature returns nil iff sig is a valid signature, made by this\n// public key, of the data hashed into signed. signed is mutated by this call.\nfunc (pk *PublicKey) VerifySignature(signed hash.Hash, sig *Signature) (err error) {\n\tif !pk.CanSign() {\n\t\treturn errors.InvalidArgumentError(\"public key cannot generate signatures\")\n\t}\n\n\tsigned.Write(sig.HashSuffix)\n\thashBytes := signed.Sum(nil)\n\n\tif hashBytes[0] != sig.HashTag[0] || hashBytes[1] != sig.HashTag[1] {\n\t\treturn errors.SignatureError(\"hash tag doesn't match\")\n\t}\n\n\tif pk.PubKeyAlgo != sig.PubKeyAlgo {\n\t\treturn errors.InvalidArgumentError(\"public key and signature use different algorithms\")\n\t}\n\n\tswitch pk.PubKeyAlgo {\n\tcase PubKeyAlgoRSA, PubKeyAlgoRSASignOnly:\n\t\trsaPublicKey, _ := pk.PublicKey.(*rsa.PublicKey)\n\t\terr = rsa.VerifyPKCS1v15(rsaPublicKey, sig.Hash, hashBytes, sig.RSASignature.bytes)\n\t\tif err != nil {\n\t\t\treturn errors.SignatureError(\"RSA verification failure\")\n\t\t}\n\t\treturn nil\n\tcase PubKeyAlgoDSA:\n\t\tdsaPublicKey, _ := pk.PublicKey.(*dsa.PublicKey)\n\t\t// Need to truncate hashBytes to match FIPS 186-3 section 4.6.\n\t\tsubgroupSize := (dsaPublicKey.Q.BitLen() + 7) / 8\n\t\tif len(hashBytes) > subgroupSize {\n\t\t\thashBytes = hashBytes[:subgroupSize]\n\t\t}\n\t\tif !dsa.Verify(dsaPublicKey, hashBytes, new(big.Int).SetBytes(sig.DSASigR.bytes), new(big.Int).SetBytes(sig.DSASigS.bytes)) {\n\t\t\treturn errors.SignatureError(\"DSA verification failure\")\n\t\t}\n\t\treturn nil\n\tcase PubKeyAlgoECDSA:\n\t\tecdsaPublicKey := pk.PublicKey.(*ecdsa.PublicKey)\n\t\tif !ecdsa.Verify(ecdsaPublicKey, hashBytes, new(big.Int).SetBytes(sig.ECDSASigR.bytes), new(big.Int).SetBytes(sig.ECDSASigS.bytes)) {\n\t\t\treturn errors.SignatureError(\"ECDSA verification failure\")\n\t\t}\n\t\treturn nil\n\tdefault:\n\t\treturn errors.SignatureError(\"Unsupported public key algorithm used in signature\")\n\t}\n\tpanic(\"unreachable\")\n}\n\n// VerifySignatureV3 returns nil iff sig is a valid signature, made by this\n// public key, of the data hashed into signed. signed is mutated by this call.\nfunc (pk *PublicKey) VerifySignatureV3(signed hash.Hash, sig *SignatureV3) (err error) {\n\tif !pk.CanSign() {\n\t\treturn errors.InvalidArgumentError(\"public key cannot generate signatures\")\n\t}\n\n\tsuffix := make([]byte, 5)\n\tsuffix[0] = byte(sig.SigType)\n\tbinary.BigEndian.PutUint32(suffix[1:], uint32(sig.CreationTime.Unix()))\n\tsigned.Write(suffix)\n\thashBytes := signed.Sum(nil)\n\n\tif hashBytes[0] != sig.HashTag[0] || hashBytes[1] != sig.HashTag[1] {\n\t\treturn errors.SignatureError(\"hash tag doesn't match\")\n\t}\n\n\tif pk.PubKeyAlgo != sig.PubKeyAlgo {\n\t\treturn errors.InvalidArgumentError(\"public key and signature use different algorithms\")\n\t}\n\n\tswitch pk.PubKeyAlgo {\n\tcase PubKeyAlgoRSA, PubKeyAlgoRSASignOnly:\n\t\trsaPublicKey := pk.PublicKey.(*rsa.PublicKey)\n\t\tif err = rsa.VerifyPKCS1v15(rsaPublicKey, sig.Hash, hashBytes, sig.RSASignature.bytes); err != nil {\n\t\t\treturn errors.SignatureError(\"RSA verification failure\")\n\t\t}\n\t\treturn\n\tcase PubKeyAlgoDSA:\n\t\tdsaPublicKey := pk.PublicKey.(*dsa.PublicKey)\n\t\t// Need to truncate hashBytes to match FIPS 186-3 section 4.6.\n\t\tsubgroupSize := (dsaPublicKey.Q.BitLen() + 7) / 8\n\t\tif len(hashBytes) > subgroupSize {\n\t\t\thashBytes = hashBytes[:subgroupSize]\n\t\t}\n\t\tif !dsa.Verify(dsaPublicKey, hashBytes, new(big.Int).SetBytes(sig.DSASigR.bytes), new(big.Int).SetBytes(sig.DSASigS.bytes)) {\n\t\t\treturn errors.SignatureError(\"DSA verification failure\")\n\t\t}\n\t\treturn nil\n\tdefault:\n\t\tpanic(\"shouldn't happen\")\n\t}\n\tpanic(\"unreachable\")\n}\n\n// keySignatureHash returns a Hash of the message that needs to be signed for\n// pk to assert a subkey relationship to signed.\nfunc keySignatureHash(pk, signed signingKey, hashFunc crypto.Hash) (h hash.Hash, err error) {\n\tif !hashFunc.Available() {\n\t\treturn nil, errors.UnsupportedError(\"hash function\")\n\t}\n\th = hashFunc.New()\n\n\t// RFC 4880, section 5.2.4\n\tpk.SerializeSignaturePrefix(h)\n\tpk.serializeWithoutHeaders(h)\n\tsigned.SerializeSignaturePrefix(h)\n\tsigned.serializeWithoutHeaders(h)\n\treturn\n}\n\n// VerifyKeySignature returns nil iff sig is a valid signature, made by this\n// public key, of signed.\nfunc (pk *PublicKey) VerifyKeySignature(signed *PublicKey, sig *Signature) error {\n\th, err := keySignatureHash(pk, signed, sig.Hash)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif err = pk.VerifySignature(h, sig); err != nil {\n\t\treturn err\n\t}\n\n\tif sig.FlagSign {\n\t\t// Signing subkeys must be cross-signed. See\n\t\t// https://www.gnupg.org/faq/subkey-cross-certify.html.\n\t\tif sig.EmbeddedSignature == nil {\n\t\t\treturn errors.StructuralError(\"signing subkey is missing cross-signature\")\n\t\t}\n\t\t// Verify the cross-signature. This is calculated over the same\n\t\t// data as the main signature, so we cannot just recursively\n\t\t// call signed.VerifyKeySignature(...)\n\t\tif h, err = keySignatureHash(pk, signed, sig.EmbeddedSignature.Hash); err != nil {\n\t\t\treturn errors.StructuralError(\"error while hashing for cross-signature: \" + err.Error())\n\t\t}\n\t\tif err := signed.VerifySignature(h, sig.EmbeddedSignature); err != nil {\n\t\t\treturn errors.StructuralError(\"error while verifying cross-signature: \" + err.Error())\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc keyRevocationHash(pk signingKey, hashFunc crypto.Hash) (h hash.Hash, err error) {\n\tif !hashFunc.Available() {\n\t\treturn nil, errors.UnsupportedError(\"hash function\")\n\t}\n\th = hashFunc.New()\n\n\t// RFC 4880, section 5.2.4\n\tpk.SerializeSignaturePrefix(h)\n\tpk.serializeWithoutHeaders(h)\n\n\treturn\n}\n\n// VerifyRevocationSignature returns nil iff sig is a valid signature, made by this\n// public key.\nfunc (pk *PublicKey) VerifyRevocationSignature(sig *Signature) (err error) {\n\th, err := keyRevocationHash(pk, sig.Hash)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn pk.VerifySignature(h, sig)\n}\n\n// userIdSignatureHash returns a Hash of the message that needs to be signed\n// to assert that pk is a valid key for id.\nfunc userIdSignatureHash(id string, pk *PublicKey, hashFunc crypto.Hash) (h hash.Hash, err error) {\n\tif !hashFunc.Available() {\n\t\treturn nil, errors.UnsupportedError(\"hash function\")\n\t}\n\th = hashFunc.New()\n\n\t// RFC 4880, section 5.2.4\n\tpk.SerializeSignaturePrefix(h)\n\tpk.serializeWithoutHeaders(h)\n\n\tvar buf [5]byte\n\tbuf[0] = 0xb4\n\tbuf[1] = byte(len(id) >> 24)\n\tbuf[2] = byte(len(id) >> 16)\n\tbuf[3] = byte(len(id) >> 8)\n\tbuf[4] = byte(len(id))\n\th.Write(buf[:])\n\th.Write([]byte(id))\n\n\treturn\n}\n\n// VerifyUserIdSignature returns nil iff sig is a valid signature, made by this\n// public key, that id is the identity of pub.\nfunc (pk *PublicKey) VerifyUserIdSignature(id string, pub *PublicKey, sig *Signature) (err error) {\n\th, err := userIdSignatureHash(id, pub, sig.Hash)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn pk.VerifySignature(h, sig)\n}\n\n// VerifyUserIdSignatureV3 returns nil iff sig is a valid signature, made by this\n// public key, that id is the identity of pub.\nfunc (pk *PublicKey) VerifyUserIdSignatureV3(id string, pub *PublicKey, sig *SignatureV3) (err error) {\n\th, err := userIdSignatureV3Hash(id, pub, sig.Hash)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn pk.VerifySignatureV3(h, sig)\n}\n\n// KeyIdString returns the public key's fingerprint in capital hex\n// (e.g. \"6C7EE1B8621CC013\").\nfunc (pk *PublicKey) KeyIdString() string {\n\treturn fmt.Sprintf(\"%X\", pk.Fingerprint[12:20])\n}\n\n// KeyIdShortString returns the short form of public key's fingerprint\n// in capital hex, as shown by gpg --list-keys (e.g. \"621CC013\").\nfunc (pk *PublicKey) KeyIdShortString() string {\n\treturn fmt.Sprintf(\"%X\", pk.Fingerprint[16:20])\n}\n\n// A parsedMPI is used to store the contents of a big integer, along with the\n// bit length that was specified in the original input. This allows the MPI to\n// be reserialized exactly.\ntype parsedMPI struct {\n\tbytes     []byte\n\tbitLength uint16\n}\n\n// writeMPIs is a utility function for serializing several big integers to the\n// given Writer.\nfunc writeMPIs(w io.Writer, mpis ...parsedMPI) (err error) {\n\tfor _, mpi := range mpis {\n\t\terr = writeMPI(w, mpi.bitLength, mpi.bytes)\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t}\n\treturn\n}\n\n// BitLength returns the bit length for the given public key.\nfunc (pk *PublicKey) BitLength() (bitLength uint16, err error) {\n\tswitch pk.PubKeyAlgo {\n\tcase PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoRSASignOnly:\n\t\tbitLength = pk.n.bitLength\n\tcase PubKeyAlgoDSA:\n\t\tbitLength = pk.p.bitLength\n\tcase PubKeyAlgoElGamal:\n\t\tbitLength = pk.p.bitLength\n\tdefault:\n\t\terr = errors.InvalidArgumentError(\"bad public-key algorithm\")\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/openpgp/packet/public_key_v3.go",
    "content": "// Copyright 2013 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage packet\n\nimport (\n\t\"crypto\"\n\t\"crypto/md5\"\n\t\"crypto/rsa\"\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"hash\"\n\t\"io\"\n\t\"math/big\"\n\t\"strconv\"\n\t\"time\"\n\n\t\"golang.org/x/crypto/openpgp/errors\"\n)\n\n// PublicKeyV3 represents older, version 3 public keys. These keys are less secure and\n// should not be used for signing or encrypting. They are supported here only for\n// parsing version 3 key material and validating signatures.\n// See RFC 4880, section 5.5.2.\ntype PublicKeyV3 struct {\n\tCreationTime time.Time\n\tDaysToExpire uint16\n\tPubKeyAlgo   PublicKeyAlgorithm\n\tPublicKey    *rsa.PublicKey\n\tFingerprint  [16]byte\n\tKeyId        uint64\n\tIsSubkey     bool\n\n\tn, e parsedMPI\n}\n\n// newRSAPublicKeyV3 returns a PublicKey that wraps the given rsa.PublicKey.\n// Included here for testing purposes only. RFC 4880, section 5.5.2:\n// \"an implementation MUST NOT generate a V3 key, but MAY accept it.\"\nfunc newRSAPublicKeyV3(creationTime time.Time, pub *rsa.PublicKey) *PublicKeyV3 {\n\tpk := &PublicKeyV3{\n\t\tCreationTime: creationTime,\n\t\tPublicKey:    pub,\n\t\tn:            fromBig(pub.N),\n\t\te:            fromBig(big.NewInt(int64(pub.E))),\n\t}\n\n\tpk.setFingerPrintAndKeyId()\n\treturn pk\n}\n\nfunc (pk *PublicKeyV3) parse(r io.Reader) (err error) {\n\t// RFC 4880, section 5.5.2\n\tvar buf [8]byte\n\tif _, err = readFull(r, buf[:]); err != nil {\n\t\treturn\n\t}\n\tif buf[0] < 2 || buf[0] > 3 {\n\t\treturn errors.UnsupportedError(\"public key version\")\n\t}\n\tpk.CreationTime = time.Unix(int64(uint32(buf[1])<<24|uint32(buf[2])<<16|uint32(buf[3])<<8|uint32(buf[4])), 0)\n\tpk.DaysToExpire = binary.BigEndian.Uint16(buf[5:7])\n\tpk.PubKeyAlgo = PublicKeyAlgorithm(buf[7])\n\tswitch pk.PubKeyAlgo {\n\tcase PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoRSASignOnly:\n\t\terr = pk.parseRSA(r)\n\tdefault:\n\t\terr = errors.UnsupportedError(\"public key type: \" + strconv.Itoa(int(pk.PubKeyAlgo)))\n\t}\n\tif err != nil {\n\t\treturn\n\t}\n\n\tpk.setFingerPrintAndKeyId()\n\treturn\n}\n\nfunc (pk *PublicKeyV3) setFingerPrintAndKeyId() {\n\t// RFC 4880, section 12.2\n\tfingerPrint := md5.New()\n\tfingerPrint.Write(pk.n.bytes)\n\tfingerPrint.Write(pk.e.bytes)\n\tfingerPrint.Sum(pk.Fingerprint[:0])\n\tpk.KeyId = binary.BigEndian.Uint64(pk.n.bytes[len(pk.n.bytes)-8:])\n}\n\n// parseRSA parses RSA public key material from the given Reader. See RFC 4880,\n// section 5.5.2.\nfunc (pk *PublicKeyV3) parseRSA(r io.Reader) (err error) {\n\tif pk.n.bytes, pk.n.bitLength, err = readMPI(r); err != nil {\n\t\treturn\n\t}\n\tif pk.e.bytes, pk.e.bitLength, err = readMPI(r); err != nil {\n\t\treturn\n\t}\n\n\t// RFC 4880 Section 12.2 requires the low 8 bytes of the\n\t// modulus to form the key id.\n\tif len(pk.n.bytes) < 8 {\n\t\treturn errors.StructuralError(\"v3 public key modulus is too short\")\n\t}\n\tif len(pk.e.bytes) > 3 {\n\t\terr = errors.UnsupportedError(\"large public exponent\")\n\t\treturn\n\t}\n\trsa := &rsa.PublicKey{N: new(big.Int).SetBytes(pk.n.bytes)}\n\tfor i := 0; i < len(pk.e.bytes); i++ {\n\t\trsa.E <<= 8\n\t\trsa.E |= int(pk.e.bytes[i])\n\t}\n\tpk.PublicKey = rsa\n\treturn\n}\n\n// SerializeSignaturePrefix writes the prefix for this public key to the given Writer.\n// The prefix is used when calculating a signature over this public key. See\n// RFC 4880, section 5.2.4.\nfunc (pk *PublicKeyV3) SerializeSignaturePrefix(w io.Writer) {\n\tvar pLength uint16\n\tswitch pk.PubKeyAlgo {\n\tcase PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoRSASignOnly:\n\t\tpLength += 2 + uint16(len(pk.n.bytes))\n\t\tpLength += 2 + uint16(len(pk.e.bytes))\n\tdefault:\n\t\tpanic(\"unknown public key algorithm\")\n\t}\n\tpLength += 6\n\tw.Write([]byte{0x99, byte(pLength >> 8), byte(pLength)})\n\treturn\n}\n\nfunc (pk *PublicKeyV3) Serialize(w io.Writer) (err error) {\n\tlength := 8 // 8 byte header\n\n\tswitch pk.PubKeyAlgo {\n\tcase PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoRSASignOnly:\n\t\tlength += 2 + len(pk.n.bytes)\n\t\tlength += 2 + len(pk.e.bytes)\n\tdefault:\n\t\tpanic(\"unknown public key algorithm\")\n\t}\n\n\tpacketType := packetTypePublicKey\n\tif pk.IsSubkey {\n\t\tpacketType = packetTypePublicSubkey\n\t}\n\tif err = serializeHeader(w, packetType, length); err != nil {\n\t\treturn\n\t}\n\treturn pk.serializeWithoutHeaders(w)\n}\n\n// serializeWithoutHeaders marshals the PublicKey to w in the form of an\n// OpenPGP public key packet, not including the packet header.\nfunc (pk *PublicKeyV3) serializeWithoutHeaders(w io.Writer) (err error) {\n\tvar buf [8]byte\n\t// Version 3\n\tbuf[0] = 3\n\t// Creation time\n\tt := uint32(pk.CreationTime.Unix())\n\tbuf[1] = byte(t >> 24)\n\tbuf[2] = byte(t >> 16)\n\tbuf[3] = byte(t >> 8)\n\tbuf[4] = byte(t)\n\t// Days to expire\n\tbuf[5] = byte(pk.DaysToExpire >> 8)\n\tbuf[6] = byte(pk.DaysToExpire)\n\t// Public key algorithm\n\tbuf[7] = byte(pk.PubKeyAlgo)\n\n\tif _, err = w.Write(buf[:]); err != nil {\n\t\treturn\n\t}\n\n\tswitch pk.PubKeyAlgo {\n\tcase PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoRSASignOnly:\n\t\treturn writeMPIs(w, pk.n, pk.e)\n\t}\n\treturn errors.InvalidArgumentError(\"bad public-key algorithm\")\n}\n\n// CanSign returns true iff this public key can generate signatures\nfunc (pk *PublicKeyV3) CanSign() bool {\n\treturn pk.PubKeyAlgo != PubKeyAlgoRSAEncryptOnly\n}\n\n// VerifySignatureV3 returns nil iff sig is a valid signature, made by this\n// public key, of the data hashed into signed. signed is mutated by this call.\nfunc (pk *PublicKeyV3) VerifySignatureV3(signed hash.Hash, sig *SignatureV3) (err error) {\n\tif !pk.CanSign() {\n\t\treturn errors.InvalidArgumentError(\"public key cannot generate signatures\")\n\t}\n\n\tsuffix := make([]byte, 5)\n\tsuffix[0] = byte(sig.SigType)\n\tbinary.BigEndian.PutUint32(suffix[1:], uint32(sig.CreationTime.Unix()))\n\tsigned.Write(suffix)\n\thashBytes := signed.Sum(nil)\n\n\tif hashBytes[0] != sig.HashTag[0] || hashBytes[1] != sig.HashTag[1] {\n\t\treturn errors.SignatureError(\"hash tag doesn't match\")\n\t}\n\n\tif pk.PubKeyAlgo != sig.PubKeyAlgo {\n\t\treturn errors.InvalidArgumentError(\"public key and signature use different algorithms\")\n\t}\n\n\tswitch pk.PubKeyAlgo {\n\tcase PubKeyAlgoRSA, PubKeyAlgoRSASignOnly:\n\t\tif err = rsa.VerifyPKCS1v15(pk.PublicKey, sig.Hash, hashBytes, sig.RSASignature.bytes); err != nil {\n\t\t\treturn errors.SignatureError(\"RSA verification failure\")\n\t\t}\n\t\treturn\n\tdefault:\n\t\t// V3 public keys only support RSA.\n\t\tpanic(\"shouldn't happen\")\n\t}\n\tpanic(\"unreachable\")\n}\n\n// VerifyUserIdSignatureV3 returns nil iff sig is a valid signature, made by this\n// public key, that id is the identity of pub.\nfunc (pk *PublicKeyV3) VerifyUserIdSignatureV3(id string, pub *PublicKeyV3, sig *SignatureV3) (err error) {\n\th, err := userIdSignatureV3Hash(id, pk, sig.Hash)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn pk.VerifySignatureV3(h, sig)\n}\n\n// VerifyKeySignatureV3 returns nil iff sig is a valid signature, made by this\n// public key, of signed.\nfunc (pk *PublicKeyV3) VerifyKeySignatureV3(signed *PublicKeyV3, sig *SignatureV3) (err error) {\n\th, err := keySignatureHash(pk, signed, sig.Hash)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn pk.VerifySignatureV3(h, sig)\n}\n\n// userIdSignatureV3Hash returns a Hash of the message that needs to be signed\n// to assert that pk is a valid key for id.\nfunc userIdSignatureV3Hash(id string, pk signingKey, hfn crypto.Hash) (h hash.Hash, err error) {\n\tif !hfn.Available() {\n\t\treturn nil, errors.UnsupportedError(\"hash function\")\n\t}\n\th = hfn.New()\n\n\t// RFC 4880, section 5.2.4\n\tpk.SerializeSignaturePrefix(h)\n\tpk.serializeWithoutHeaders(h)\n\n\th.Write([]byte(id))\n\n\treturn\n}\n\n// KeyIdString returns the public key's fingerprint in capital hex\n// (e.g. \"6C7EE1B8621CC013\").\nfunc (pk *PublicKeyV3) KeyIdString() string {\n\treturn fmt.Sprintf(\"%X\", pk.KeyId)\n}\n\n// KeyIdShortString returns the short form of public key's fingerprint\n// in capital hex, as shown by gpg --list-keys (e.g. \"621CC013\").\nfunc (pk *PublicKeyV3) KeyIdShortString() string {\n\treturn fmt.Sprintf(\"%X\", pk.KeyId&0xFFFFFFFF)\n}\n\n// BitLength returns the bit length for the given public key.\nfunc (pk *PublicKeyV3) BitLength() (bitLength uint16, err error) {\n\tswitch pk.PubKeyAlgo {\n\tcase PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoRSASignOnly:\n\t\tbitLength = pk.n.bitLength\n\tdefault:\n\t\terr = errors.InvalidArgumentError(\"bad public-key algorithm\")\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/openpgp/packet/reader.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage packet\n\nimport (\n\t\"golang.org/x/crypto/openpgp/errors\"\n\t\"io\"\n)\n\n// Reader reads packets from an io.Reader and allows packets to be 'unread' so\n// that they result from the next call to Next.\ntype Reader struct {\n\tq       []Packet\n\treaders []io.Reader\n}\n\n// New io.Readers are pushed when a compressed or encrypted packet is processed\n// and recursively treated as a new source of packets. However, a carefully\n// crafted packet can trigger an infinite recursive sequence of packets. See\n// http://mumble.net/~campbell/misc/pgp-quine\n// https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2013-4402\n// This constant limits the number of recursive packets that may be pushed.\nconst maxReaders = 32\n\n// Next returns the most recently unread Packet, or reads another packet from\n// the top-most io.Reader. Unknown packet types are skipped.\nfunc (r *Reader) Next() (p Packet, err error) {\n\tif len(r.q) > 0 {\n\t\tp = r.q[len(r.q)-1]\n\t\tr.q = r.q[:len(r.q)-1]\n\t\treturn\n\t}\n\n\tfor len(r.readers) > 0 {\n\t\tp, err = Read(r.readers[len(r.readers)-1])\n\t\tif err == nil {\n\t\t\treturn\n\t\t}\n\t\tif err == io.EOF {\n\t\t\tr.readers = r.readers[:len(r.readers)-1]\n\t\t\tcontinue\n\t\t}\n\t\tif _, ok := err.(errors.UnknownPacketTypeError); !ok {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\treturn nil, io.EOF\n}\n\n// Push causes the Reader to start reading from a new io.Reader. When an EOF\n// error is seen from the new io.Reader, it is popped and the Reader continues\n// to read from the next most recent io.Reader. Push returns a StructuralError\n// if pushing the reader would exceed the maximum recursion level, otherwise it\n// returns nil.\nfunc (r *Reader) Push(reader io.Reader) (err error) {\n\tif len(r.readers) >= maxReaders {\n\t\treturn errors.StructuralError(\"too many layers of packets\")\n\t}\n\tr.readers = append(r.readers, reader)\n\treturn nil\n}\n\n// Unread causes the given Packet to be returned from the next call to Next.\nfunc (r *Reader) Unread(p Packet) {\n\tr.q = append(r.q, p)\n}\n\nfunc NewReader(r io.Reader) *Reader {\n\treturn &Reader{\n\t\tq:       nil,\n\t\treaders: []io.Reader{r},\n\t}\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/openpgp/packet/signature.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage packet\n\nimport (\n\t\"bytes\"\n\t\"crypto\"\n\t\"crypto/dsa\"\n\t\"crypto/rsa\"\n\t\"encoding/binary\"\n\t\"hash\"\n\t\"io\"\n\t\"strconv\"\n\t\"time\"\n\n\t\"golang.org/x/crypto/openpgp/errors\"\n\t\"golang.org/x/crypto/openpgp/s2k\"\n)\n\nconst (\n\t// See RFC 4880, section 5.2.3.21 for details.\n\tKeyFlagCertify = 1 << iota\n\tKeyFlagSign\n\tKeyFlagEncryptCommunications\n\tKeyFlagEncryptStorage\n)\n\n// Signature represents a signature. See RFC 4880, section 5.2.\ntype Signature struct {\n\tSigType    SignatureType\n\tPubKeyAlgo PublicKeyAlgorithm\n\tHash       crypto.Hash\n\n\t// HashSuffix is extra data that is hashed in after the signed data.\n\tHashSuffix []byte\n\t// HashTag contains the first two bytes of the hash for fast rejection\n\t// of bad signed data.\n\tHashTag      [2]byte\n\tCreationTime time.Time\n\n\tRSASignature         parsedMPI\n\tDSASigR, DSASigS     parsedMPI\n\tECDSASigR, ECDSASigS parsedMPI\n\n\t// rawSubpackets contains the unparsed subpackets, in order.\n\trawSubpackets []outputSubpacket\n\n\t// The following are optional so are nil when not included in the\n\t// signature.\n\n\tSigLifetimeSecs, KeyLifetimeSecs                        *uint32\n\tPreferredSymmetric, PreferredHash, PreferredCompression []uint8\n\tIssuerKeyId                                             *uint64\n\tIsPrimaryId                                             *bool\n\n\t// FlagsValid is set if any flags were given. See RFC 4880, section\n\t// 5.2.3.21 for details.\n\tFlagsValid                                                           bool\n\tFlagCertify, FlagSign, FlagEncryptCommunications, FlagEncryptStorage bool\n\n\t// RevocationReason is set if this signature has been revoked.\n\t// See RFC 4880, section 5.2.3.23 for details.\n\tRevocationReason     *uint8\n\tRevocationReasonText string\n\n\t// MDC is set if this signature has a feature packet that indicates\n\t// support for MDC subpackets.\n\tMDC bool\n\n\t// EmbeddedSignature, if non-nil, is a signature of the parent key, by\n\t// this key. This prevents an attacker from claiming another's signing\n\t// subkey as their own.\n\tEmbeddedSignature *Signature\n\n\toutSubpackets []outputSubpacket\n}\n\nfunc (sig *Signature) parse(r io.Reader) (err error) {\n\t// RFC 4880, section 5.2.3\n\tvar buf [5]byte\n\t_, err = readFull(r, buf[:1])\n\tif err != nil {\n\t\treturn\n\t}\n\tif buf[0] != 4 {\n\t\terr = errors.UnsupportedError(\"signature packet version \" + strconv.Itoa(int(buf[0])))\n\t\treturn\n\t}\n\n\t_, err = readFull(r, buf[:5])\n\tif err != nil {\n\t\treturn\n\t}\n\tsig.SigType = SignatureType(buf[0])\n\tsig.PubKeyAlgo = PublicKeyAlgorithm(buf[1])\n\tswitch sig.PubKeyAlgo {\n\tcase PubKeyAlgoRSA, PubKeyAlgoRSASignOnly, PubKeyAlgoDSA, PubKeyAlgoECDSA:\n\tdefault:\n\t\terr = errors.UnsupportedError(\"public key algorithm \" + strconv.Itoa(int(sig.PubKeyAlgo)))\n\t\treturn\n\t}\n\n\tvar ok bool\n\tsig.Hash, ok = s2k.HashIdToHash(buf[2])\n\tif !ok {\n\t\treturn errors.UnsupportedError(\"hash function \" + strconv.Itoa(int(buf[2])))\n\t}\n\n\thashedSubpacketsLength := int(buf[3])<<8 | int(buf[4])\n\tl := 6 + hashedSubpacketsLength\n\tsig.HashSuffix = make([]byte, l+6)\n\tsig.HashSuffix[0] = 4\n\tcopy(sig.HashSuffix[1:], buf[:5])\n\thashedSubpackets := sig.HashSuffix[6:l]\n\t_, err = readFull(r, hashedSubpackets)\n\tif err != nil {\n\t\treturn\n\t}\n\t// See RFC 4880, section 5.2.4\n\ttrailer := sig.HashSuffix[l:]\n\ttrailer[0] = 4\n\ttrailer[1] = 0xff\n\ttrailer[2] = uint8(l >> 24)\n\ttrailer[3] = uint8(l >> 16)\n\ttrailer[4] = uint8(l >> 8)\n\ttrailer[5] = uint8(l)\n\n\terr = parseSignatureSubpackets(sig, hashedSubpackets, true)\n\tif err != nil {\n\t\treturn\n\t}\n\n\t_, err = readFull(r, buf[:2])\n\tif err != nil {\n\t\treturn\n\t}\n\tunhashedSubpacketsLength := int(buf[0])<<8 | int(buf[1])\n\tunhashedSubpackets := make([]byte, unhashedSubpacketsLength)\n\t_, err = readFull(r, unhashedSubpackets)\n\tif err != nil {\n\t\treturn\n\t}\n\terr = parseSignatureSubpackets(sig, unhashedSubpackets, false)\n\tif err != nil {\n\t\treturn\n\t}\n\n\t_, err = readFull(r, sig.HashTag[:2])\n\tif err != nil {\n\t\treturn\n\t}\n\n\tswitch sig.PubKeyAlgo {\n\tcase PubKeyAlgoRSA, PubKeyAlgoRSASignOnly:\n\t\tsig.RSASignature.bytes, sig.RSASignature.bitLength, err = readMPI(r)\n\tcase PubKeyAlgoDSA:\n\t\tsig.DSASigR.bytes, sig.DSASigR.bitLength, err = readMPI(r)\n\t\tif err == nil {\n\t\t\tsig.DSASigS.bytes, sig.DSASigS.bitLength, err = readMPI(r)\n\t\t}\n\tcase PubKeyAlgoECDSA:\n\t\tsig.ECDSASigR.bytes, sig.ECDSASigR.bitLength, err = readMPI(r)\n\t\tif err == nil {\n\t\t\tsig.ECDSASigS.bytes, sig.ECDSASigS.bitLength, err = readMPI(r)\n\t\t}\n\tdefault:\n\t\tpanic(\"unreachable\")\n\t}\n\treturn\n}\n\n// parseSignatureSubpackets parses subpackets of the main signature packet. See\n// RFC 4880, section 5.2.3.1.\nfunc parseSignatureSubpackets(sig *Signature, subpackets []byte, isHashed bool) (err error) {\n\tfor len(subpackets) > 0 {\n\t\tsubpackets, err = parseSignatureSubpacket(sig, subpackets, isHashed)\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t}\n\n\tif sig.CreationTime.IsZero() {\n\t\terr = errors.StructuralError(\"no creation time in signature\")\n\t}\n\n\treturn\n}\n\ntype signatureSubpacketType uint8\n\nconst (\n\tcreationTimeSubpacket        signatureSubpacketType = 2\n\tsignatureExpirationSubpacket signatureSubpacketType = 3\n\tkeyExpirationSubpacket       signatureSubpacketType = 9\n\tprefSymmetricAlgosSubpacket  signatureSubpacketType = 11\n\tissuerSubpacket              signatureSubpacketType = 16\n\tprefHashAlgosSubpacket       signatureSubpacketType = 21\n\tprefCompressionSubpacket     signatureSubpacketType = 22\n\tprimaryUserIdSubpacket       signatureSubpacketType = 25\n\tkeyFlagsSubpacket            signatureSubpacketType = 27\n\treasonForRevocationSubpacket signatureSubpacketType = 29\n\tfeaturesSubpacket            signatureSubpacketType = 30\n\tembeddedSignatureSubpacket   signatureSubpacketType = 32\n)\n\n// parseSignatureSubpacket parses a single subpacket. len(subpacket) is >= 1.\nfunc parseSignatureSubpacket(sig *Signature, subpacket []byte, isHashed bool) (rest []byte, err error) {\n\t// RFC 4880, section 5.2.3.1\n\tvar (\n\t\tlength     uint32\n\t\tpacketType signatureSubpacketType\n\t\tisCritical bool\n\t)\n\tswitch {\n\tcase subpacket[0] < 192:\n\t\tlength = uint32(subpacket[0])\n\t\tsubpacket = subpacket[1:]\n\tcase subpacket[0] < 255:\n\t\tif len(subpacket) < 2 {\n\t\t\tgoto Truncated\n\t\t}\n\t\tlength = uint32(subpacket[0]-192)<<8 + uint32(subpacket[1]) + 192\n\t\tsubpacket = subpacket[2:]\n\tdefault:\n\t\tif len(subpacket) < 5 {\n\t\t\tgoto Truncated\n\t\t}\n\t\tlength = uint32(subpacket[1])<<24 |\n\t\t\tuint32(subpacket[2])<<16 |\n\t\t\tuint32(subpacket[3])<<8 |\n\t\t\tuint32(subpacket[4])\n\t\tsubpacket = subpacket[5:]\n\t}\n\tif length > uint32(len(subpacket)) {\n\t\tgoto Truncated\n\t}\n\trest = subpacket[length:]\n\tsubpacket = subpacket[:length]\n\tif len(subpacket) == 0 {\n\t\terr = errors.StructuralError(\"zero length signature subpacket\")\n\t\treturn\n\t}\n\tpacketType = signatureSubpacketType(subpacket[0] & 0x7f)\n\tisCritical = subpacket[0]&0x80 == 0x80\n\tsubpacket = subpacket[1:]\n\tsig.rawSubpackets = append(sig.rawSubpackets, outputSubpacket{isHashed, packetType, isCritical, subpacket})\n\tswitch packetType {\n\tcase creationTimeSubpacket:\n\t\tif !isHashed {\n\t\t\terr = errors.StructuralError(\"signature creation time in non-hashed area\")\n\t\t\treturn\n\t\t}\n\t\tif len(subpacket) != 4 {\n\t\t\terr = errors.StructuralError(\"signature creation time not four bytes\")\n\t\t\treturn\n\t\t}\n\t\tt := binary.BigEndian.Uint32(subpacket)\n\t\tsig.CreationTime = time.Unix(int64(t), 0)\n\tcase signatureExpirationSubpacket:\n\t\t// Signature expiration time, section 5.2.3.10\n\t\tif !isHashed {\n\t\t\treturn\n\t\t}\n\t\tif len(subpacket) != 4 {\n\t\t\terr = errors.StructuralError(\"expiration subpacket with bad length\")\n\t\t\treturn\n\t\t}\n\t\tsig.SigLifetimeSecs = new(uint32)\n\t\t*sig.SigLifetimeSecs = binary.BigEndian.Uint32(subpacket)\n\tcase keyExpirationSubpacket:\n\t\t// Key expiration time, section 5.2.3.6\n\t\tif !isHashed {\n\t\t\treturn\n\t\t}\n\t\tif len(subpacket) != 4 {\n\t\t\terr = errors.StructuralError(\"key expiration subpacket with bad length\")\n\t\t\treturn\n\t\t}\n\t\tsig.KeyLifetimeSecs = new(uint32)\n\t\t*sig.KeyLifetimeSecs = binary.BigEndian.Uint32(subpacket)\n\tcase prefSymmetricAlgosSubpacket:\n\t\t// Preferred symmetric algorithms, section 5.2.3.7\n\t\tif !isHashed {\n\t\t\treturn\n\t\t}\n\t\tsig.PreferredSymmetric = make([]byte, len(subpacket))\n\t\tcopy(sig.PreferredSymmetric, subpacket)\n\tcase issuerSubpacket:\n\t\t// Issuer, section 5.2.3.5\n\t\tif len(subpacket) != 8 {\n\t\t\terr = errors.StructuralError(\"issuer subpacket with bad length\")\n\t\t\treturn\n\t\t}\n\t\tsig.IssuerKeyId = new(uint64)\n\t\t*sig.IssuerKeyId = binary.BigEndian.Uint64(subpacket)\n\tcase prefHashAlgosSubpacket:\n\t\t// Preferred hash algorithms, section 5.2.3.8\n\t\tif !isHashed {\n\t\t\treturn\n\t\t}\n\t\tsig.PreferredHash = make([]byte, len(subpacket))\n\t\tcopy(sig.PreferredHash, subpacket)\n\tcase prefCompressionSubpacket:\n\t\t// Preferred compression algorithms, section 5.2.3.9\n\t\tif !isHashed {\n\t\t\treturn\n\t\t}\n\t\tsig.PreferredCompression = make([]byte, len(subpacket))\n\t\tcopy(sig.PreferredCompression, subpacket)\n\tcase primaryUserIdSubpacket:\n\t\t// Primary User ID, section 5.2.3.19\n\t\tif !isHashed {\n\t\t\treturn\n\t\t}\n\t\tif len(subpacket) != 1 {\n\t\t\terr = errors.StructuralError(\"primary user id subpacket with bad length\")\n\t\t\treturn\n\t\t}\n\t\tsig.IsPrimaryId = new(bool)\n\t\tif subpacket[0] > 0 {\n\t\t\t*sig.IsPrimaryId = true\n\t\t}\n\tcase keyFlagsSubpacket:\n\t\t// Key flags, section 5.2.3.21\n\t\tif !isHashed {\n\t\t\treturn\n\t\t}\n\t\tif len(subpacket) == 0 {\n\t\t\terr = errors.StructuralError(\"empty key flags subpacket\")\n\t\t\treturn\n\t\t}\n\t\tsig.FlagsValid = true\n\t\tif subpacket[0]&KeyFlagCertify != 0 {\n\t\t\tsig.FlagCertify = true\n\t\t}\n\t\tif subpacket[0]&KeyFlagSign != 0 {\n\t\t\tsig.FlagSign = true\n\t\t}\n\t\tif subpacket[0]&KeyFlagEncryptCommunications != 0 {\n\t\t\tsig.FlagEncryptCommunications = true\n\t\t}\n\t\tif subpacket[0]&KeyFlagEncryptStorage != 0 {\n\t\t\tsig.FlagEncryptStorage = true\n\t\t}\n\tcase reasonForRevocationSubpacket:\n\t\t// Reason For Revocation, section 5.2.3.23\n\t\tif !isHashed {\n\t\t\treturn\n\t\t}\n\t\tif len(subpacket) == 0 {\n\t\t\terr = errors.StructuralError(\"empty revocation reason subpacket\")\n\t\t\treturn\n\t\t}\n\t\tsig.RevocationReason = new(uint8)\n\t\t*sig.RevocationReason = subpacket[0]\n\t\tsig.RevocationReasonText = string(subpacket[1:])\n\tcase featuresSubpacket:\n\t\t// Features subpacket, section 5.2.3.24 specifies a very general\n\t\t// mechanism for OpenPGP implementations to signal support for new\n\t\t// features. In practice, the subpacket is used exclusively to\n\t\t// indicate support for MDC-protected encryption.\n\t\tsig.MDC = len(subpacket) >= 1 && subpacket[0]&1 == 1\n\tcase embeddedSignatureSubpacket:\n\t\t// Only usage is in signatures that cross-certify\n\t\t// signing subkeys. section 5.2.3.26 describes the\n\t\t// format, with its usage described in section 11.1\n\t\tif sig.EmbeddedSignature != nil {\n\t\t\terr = errors.StructuralError(\"Cannot have multiple embedded signatures\")\n\t\t\treturn\n\t\t}\n\t\tsig.EmbeddedSignature = new(Signature)\n\t\t// Embedded signatures are required to be v4 signatures see\n\t\t// section 12.1. However, we only parse v4 signatures in this\n\t\t// file anyway.\n\t\tif err := sig.EmbeddedSignature.parse(bytes.NewBuffer(subpacket)); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif sigType := sig.EmbeddedSignature.SigType; sigType != SigTypePrimaryKeyBinding {\n\t\t\treturn nil, errors.StructuralError(\"cross-signature has unexpected type \" + strconv.Itoa(int(sigType)))\n\t\t}\n\tdefault:\n\t\tif isCritical {\n\t\t\terr = errors.UnsupportedError(\"unknown critical signature subpacket type \" + strconv.Itoa(int(packetType)))\n\t\t\treturn\n\t\t}\n\t}\n\treturn\n\nTruncated:\n\terr = errors.StructuralError(\"signature subpacket truncated\")\n\treturn\n}\n\n// subpacketLengthLength returns the length, in bytes, of an encoded length value.\nfunc subpacketLengthLength(length int) int {\n\tif length < 192 {\n\t\treturn 1\n\t}\n\tif length < 16320 {\n\t\treturn 2\n\t}\n\treturn 5\n}\n\n// serializeSubpacketLength marshals the given length into to.\nfunc serializeSubpacketLength(to []byte, length int) int {\n\t// RFC 4880, Section 4.2.2.\n\tif length < 192 {\n\t\tto[0] = byte(length)\n\t\treturn 1\n\t}\n\tif length < 16320 {\n\t\tlength -= 192\n\t\tto[0] = byte((length >> 8) + 192)\n\t\tto[1] = byte(length)\n\t\treturn 2\n\t}\n\tto[0] = 255\n\tto[1] = byte(length >> 24)\n\tto[2] = byte(length >> 16)\n\tto[3] = byte(length >> 8)\n\tto[4] = byte(length)\n\treturn 5\n}\n\n// subpacketsLength returns the serialized length, in bytes, of the given\n// subpackets.\nfunc subpacketsLength(subpackets []outputSubpacket, hashed bool) (length int) {\n\tfor _, subpacket := range subpackets {\n\t\tif subpacket.hashed == hashed {\n\t\t\tlength += subpacketLengthLength(len(subpacket.contents) + 1)\n\t\t\tlength += 1 // type byte\n\t\t\tlength += len(subpacket.contents)\n\t\t}\n\t}\n\treturn\n}\n\n// serializeSubpackets marshals the given subpackets into to.\nfunc serializeSubpackets(to []byte, subpackets []outputSubpacket, hashed bool) {\n\tfor _, subpacket := range subpackets {\n\t\tif subpacket.hashed == hashed {\n\t\t\tn := serializeSubpacketLength(to, len(subpacket.contents)+1)\n\t\t\tto[n] = byte(subpacket.subpacketType)\n\t\t\tto = to[1+n:]\n\t\t\tn = copy(to, subpacket.contents)\n\t\t\tto = to[n:]\n\t\t}\n\t}\n\treturn\n}\n\n// KeyExpired returns whether sig is a self-signature of a key that has\n// expired.\nfunc (sig *Signature) KeyExpired(currentTime time.Time) bool {\n\tif sig.KeyLifetimeSecs == nil {\n\t\treturn false\n\t}\n\texpiry := sig.CreationTime.Add(time.Duration(*sig.KeyLifetimeSecs) * time.Second)\n\treturn currentTime.After(expiry)\n}\n\n// buildHashSuffix constructs the HashSuffix member of sig in preparation for signing.\nfunc (sig *Signature) buildHashSuffix() (err error) {\n\thashedSubpacketsLen := subpacketsLength(sig.outSubpackets, true)\n\n\tvar ok bool\n\tl := 6 + hashedSubpacketsLen\n\tsig.HashSuffix = make([]byte, l+6)\n\tsig.HashSuffix[0] = 4\n\tsig.HashSuffix[1] = uint8(sig.SigType)\n\tsig.HashSuffix[2] = uint8(sig.PubKeyAlgo)\n\tsig.HashSuffix[3], ok = s2k.HashToHashId(sig.Hash)\n\tif !ok {\n\t\tsig.HashSuffix = nil\n\t\treturn errors.InvalidArgumentError(\"hash cannot be represented in OpenPGP: \" + strconv.Itoa(int(sig.Hash)))\n\t}\n\tsig.HashSuffix[4] = byte(hashedSubpacketsLen >> 8)\n\tsig.HashSuffix[5] = byte(hashedSubpacketsLen)\n\tserializeSubpackets(sig.HashSuffix[6:l], sig.outSubpackets, true)\n\ttrailer := sig.HashSuffix[l:]\n\ttrailer[0] = 4\n\ttrailer[1] = 0xff\n\ttrailer[2] = byte(l >> 24)\n\ttrailer[3] = byte(l >> 16)\n\ttrailer[4] = byte(l >> 8)\n\ttrailer[5] = byte(l)\n\treturn\n}\n\nfunc (sig *Signature) signPrepareHash(h hash.Hash) (digest []byte, err error) {\n\terr = sig.buildHashSuffix()\n\tif err != nil {\n\t\treturn\n\t}\n\n\th.Write(sig.HashSuffix)\n\tdigest = h.Sum(nil)\n\tcopy(sig.HashTag[:], digest)\n\treturn\n}\n\n// Sign signs a message with a private key. The hash, h, must contain\n// the hash of the message to be signed and will be mutated by this function.\n// On success, the signature is stored in sig. Call Serialize to write it out.\n// If config is nil, sensible defaults will be used.\nfunc (sig *Signature) Sign(h hash.Hash, priv *PrivateKey, config *Config) (err error) {\n\tsig.outSubpackets = sig.buildSubpackets()\n\tdigest, err := sig.signPrepareHash(h)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tswitch priv.PubKeyAlgo {\n\tcase PubKeyAlgoRSA, PubKeyAlgoRSASignOnly:\n\t\tsig.RSASignature.bytes, err = rsa.SignPKCS1v15(config.Random(), priv.PrivateKey.(*rsa.PrivateKey), sig.Hash, digest)\n\t\tsig.RSASignature.bitLength = uint16(8 * len(sig.RSASignature.bytes))\n\tcase PubKeyAlgoDSA:\n\t\tdsaPriv := priv.PrivateKey.(*dsa.PrivateKey)\n\n\t\t// Need to truncate hashBytes to match FIPS 186-3 section 4.6.\n\t\tsubgroupSize := (dsaPriv.Q.BitLen() + 7) / 8\n\t\tif len(digest) > subgroupSize {\n\t\t\tdigest = digest[:subgroupSize]\n\t\t}\n\t\tr, s, err := dsa.Sign(config.Random(), dsaPriv, digest)\n\t\tif err == nil {\n\t\t\tsig.DSASigR.bytes = r.Bytes()\n\t\t\tsig.DSASigR.bitLength = uint16(8 * len(sig.DSASigR.bytes))\n\t\t\tsig.DSASigS.bytes = s.Bytes()\n\t\t\tsig.DSASigS.bitLength = uint16(8 * len(sig.DSASigS.bytes))\n\t\t}\n\tdefault:\n\t\terr = errors.UnsupportedError(\"public key algorithm: \" + strconv.Itoa(int(sig.PubKeyAlgo)))\n\t}\n\n\treturn\n}\n\n// SignUserId computes a signature from priv, asserting that pub is a valid\n// key for the identity id.  On success, the signature is stored in sig. Call\n// Serialize to write it out.\n// If config is nil, sensible defaults will be used.\nfunc (sig *Signature) SignUserId(id string, pub *PublicKey, priv *PrivateKey, config *Config) error {\n\th, err := userIdSignatureHash(id, pub, sig.Hash)\n\tif err != nil {\n\t\treturn nil\n\t}\n\treturn sig.Sign(h, priv, config)\n}\n\n// SignKey computes a signature from priv, asserting that pub is a subkey. On\n// success, the signature is stored in sig. Call Serialize to write it out.\n// If config is nil, sensible defaults will be used.\nfunc (sig *Signature) SignKey(pub *PublicKey, priv *PrivateKey, config *Config) error {\n\th, err := keySignatureHash(&priv.PublicKey, pub, sig.Hash)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn sig.Sign(h, priv, config)\n}\n\n// Serialize marshals sig to w. Sign, SignUserId or SignKey must have been\n// called first.\nfunc (sig *Signature) Serialize(w io.Writer) (err error) {\n\tif len(sig.outSubpackets) == 0 {\n\t\tsig.outSubpackets = sig.rawSubpackets\n\t}\n\tif sig.RSASignature.bytes == nil && sig.DSASigR.bytes == nil && sig.ECDSASigR.bytes == nil {\n\t\treturn errors.InvalidArgumentError(\"Signature: need to call Sign, SignUserId or SignKey before Serialize\")\n\t}\n\n\tsigLength := 0\n\tswitch sig.PubKeyAlgo {\n\tcase PubKeyAlgoRSA, PubKeyAlgoRSASignOnly:\n\t\tsigLength = 2 + len(sig.RSASignature.bytes)\n\tcase PubKeyAlgoDSA:\n\t\tsigLength = 2 + len(sig.DSASigR.bytes)\n\t\tsigLength += 2 + len(sig.DSASigS.bytes)\n\tcase PubKeyAlgoECDSA:\n\t\tsigLength = 2 + len(sig.ECDSASigR.bytes)\n\t\tsigLength += 2 + len(sig.ECDSASigS.bytes)\n\tdefault:\n\t\tpanic(\"impossible\")\n\t}\n\n\tunhashedSubpacketsLen := subpacketsLength(sig.outSubpackets, false)\n\tlength := len(sig.HashSuffix) - 6 /* trailer not included */ +\n\t\t2 /* length of unhashed subpackets */ + unhashedSubpacketsLen +\n\t\t2 /* hash tag */ + sigLength\n\terr = serializeHeader(w, packetTypeSignature, length)\n\tif err != nil {\n\t\treturn\n\t}\n\n\t_, err = w.Write(sig.HashSuffix[:len(sig.HashSuffix)-6])\n\tif err != nil {\n\t\treturn\n\t}\n\n\tunhashedSubpackets := make([]byte, 2+unhashedSubpacketsLen)\n\tunhashedSubpackets[0] = byte(unhashedSubpacketsLen >> 8)\n\tunhashedSubpackets[1] = byte(unhashedSubpacketsLen)\n\tserializeSubpackets(unhashedSubpackets[2:], sig.outSubpackets, false)\n\n\t_, err = w.Write(unhashedSubpackets)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, err = w.Write(sig.HashTag[:])\n\tif err != nil {\n\t\treturn\n\t}\n\n\tswitch sig.PubKeyAlgo {\n\tcase PubKeyAlgoRSA, PubKeyAlgoRSASignOnly:\n\t\terr = writeMPIs(w, sig.RSASignature)\n\tcase PubKeyAlgoDSA:\n\t\terr = writeMPIs(w, sig.DSASigR, sig.DSASigS)\n\tcase PubKeyAlgoECDSA:\n\t\terr = writeMPIs(w, sig.ECDSASigR, sig.ECDSASigS)\n\tdefault:\n\t\tpanic(\"impossible\")\n\t}\n\treturn\n}\n\n// outputSubpacket represents a subpacket to be marshaled.\ntype outputSubpacket struct {\n\thashed        bool // true if this subpacket is in the hashed area.\n\tsubpacketType signatureSubpacketType\n\tisCritical    bool\n\tcontents      []byte\n}\n\nfunc (sig *Signature) buildSubpackets() (subpackets []outputSubpacket) {\n\tcreationTime := make([]byte, 4)\n\tbinary.BigEndian.PutUint32(creationTime, uint32(sig.CreationTime.Unix()))\n\tsubpackets = append(subpackets, outputSubpacket{true, creationTimeSubpacket, false, creationTime})\n\n\tif sig.IssuerKeyId != nil {\n\t\tkeyId := make([]byte, 8)\n\t\tbinary.BigEndian.PutUint64(keyId, *sig.IssuerKeyId)\n\t\tsubpackets = append(subpackets, outputSubpacket{true, issuerSubpacket, false, keyId})\n\t}\n\n\tif sig.SigLifetimeSecs != nil && *sig.SigLifetimeSecs != 0 {\n\t\tsigLifetime := make([]byte, 4)\n\t\tbinary.BigEndian.PutUint32(sigLifetime, *sig.SigLifetimeSecs)\n\t\tsubpackets = append(subpackets, outputSubpacket{true, signatureExpirationSubpacket, true, sigLifetime})\n\t}\n\n\t// Key flags may only appear in self-signatures or certification signatures.\n\n\tif sig.FlagsValid {\n\t\tvar flags byte\n\t\tif sig.FlagCertify {\n\t\t\tflags |= KeyFlagCertify\n\t\t}\n\t\tif sig.FlagSign {\n\t\t\tflags |= KeyFlagSign\n\t\t}\n\t\tif sig.FlagEncryptCommunications {\n\t\t\tflags |= KeyFlagEncryptCommunications\n\t\t}\n\t\tif sig.FlagEncryptStorage {\n\t\t\tflags |= KeyFlagEncryptStorage\n\t\t}\n\t\tsubpackets = append(subpackets, outputSubpacket{true, keyFlagsSubpacket, false, []byte{flags}})\n\t}\n\n\t// The following subpackets may only appear in self-signatures\n\n\tif sig.KeyLifetimeSecs != nil && *sig.KeyLifetimeSecs != 0 {\n\t\tkeyLifetime := make([]byte, 4)\n\t\tbinary.BigEndian.PutUint32(keyLifetime, *sig.KeyLifetimeSecs)\n\t\tsubpackets = append(subpackets, outputSubpacket{true, keyExpirationSubpacket, true, keyLifetime})\n\t}\n\n\tif sig.IsPrimaryId != nil && *sig.IsPrimaryId {\n\t\tsubpackets = append(subpackets, outputSubpacket{true, primaryUserIdSubpacket, false, []byte{1}})\n\t}\n\n\tif len(sig.PreferredSymmetric) > 0 {\n\t\tsubpackets = append(subpackets, outputSubpacket{true, prefSymmetricAlgosSubpacket, false, sig.PreferredSymmetric})\n\t}\n\n\tif len(sig.PreferredHash) > 0 {\n\t\tsubpackets = append(subpackets, outputSubpacket{true, prefHashAlgosSubpacket, false, sig.PreferredHash})\n\t}\n\n\tif len(sig.PreferredCompression) > 0 {\n\t\tsubpackets = append(subpackets, outputSubpacket{true, prefCompressionSubpacket, false, sig.PreferredCompression})\n\t}\n\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/openpgp/packet/signature_v3.go",
    "content": "// Copyright 2013 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage packet\n\nimport (\n\t\"crypto\"\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"io\"\n\t\"strconv\"\n\t\"time\"\n\n\t\"golang.org/x/crypto/openpgp/errors\"\n\t\"golang.org/x/crypto/openpgp/s2k\"\n)\n\n// SignatureV3 represents older version 3 signatures. These signatures are less secure\n// than version 4 and should not be used to create new signatures. They are included\n// here for backwards compatibility to read and validate with older key material.\n// See RFC 4880, section 5.2.2.\ntype SignatureV3 struct {\n\tSigType      SignatureType\n\tCreationTime time.Time\n\tIssuerKeyId  uint64\n\tPubKeyAlgo   PublicKeyAlgorithm\n\tHash         crypto.Hash\n\tHashTag      [2]byte\n\n\tRSASignature     parsedMPI\n\tDSASigR, DSASigS parsedMPI\n}\n\nfunc (sig *SignatureV3) parse(r io.Reader) (err error) {\n\t// RFC 4880, section 5.2.2\n\tvar buf [8]byte\n\tif _, err = readFull(r, buf[:1]); err != nil {\n\t\treturn\n\t}\n\tif buf[0] < 2 || buf[0] > 3 {\n\t\terr = errors.UnsupportedError(\"signature packet version \" + strconv.Itoa(int(buf[0])))\n\t\treturn\n\t}\n\tif _, err = readFull(r, buf[:1]); err != nil {\n\t\treturn\n\t}\n\tif buf[0] != 5 {\n\t\terr = errors.UnsupportedError(\n\t\t\t\"invalid hashed material length \" + strconv.Itoa(int(buf[0])))\n\t\treturn\n\t}\n\n\t// Read hashed material: signature type + creation time\n\tif _, err = readFull(r, buf[:5]); err != nil {\n\t\treturn\n\t}\n\tsig.SigType = SignatureType(buf[0])\n\tt := binary.BigEndian.Uint32(buf[1:5])\n\tsig.CreationTime = time.Unix(int64(t), 0)\n\n\t// Eight-octet Key ID of signer.\n\tif _, err = readFull(r, buf[:8]); err != nil {\n\t\treturn\n\t}\n\tsig.IssuerKeyId = binary.BigEndian.Uint64(buf[:])\n\n\t// Public-key and hash algorithm\n\tif _, err = readFull(r, buf[:2]); err != nil {\n\t\treturn\n\t}\n\tsig.PubKeyAlgo = PublicKeyAlgorithm(buf[0])\n\tswitch sig.PubKeyAlgo {\n\tcase PubKeyAlgoRSA, PubKeyAlgoRSASignOnly, PubKeyAlgoDSA:\n\tdefault:\n\t\terr = errors.UnsupportedError(\"public key algorithm \" + strconv.Itoa(int(sig.PubKeyAlgo)))\n\t\treturn\n\t}\n\tvar ok bool\n\tif sig.Hash, ok = s2k.HashIdToHash(buf[1]); !ok {\n\t\treturn errors.UnsupportedError(\"hash function \" + strconv.Itoa(int(buf[2])))\n\t}\n\n\t// Two-octet field holding left 16 bits of signed hash value.\n\tif _, err = readFull(r, sig.HashTag[:2]); err != nil {\n\t\treturn\n\t}\n\n\tswitch sig.PubKeyAlgo {\n\tcase PubKeyAlgoRSA, PubKeyAlgoRSASignOnly:\n\t\tsig.RSASignature.bytes, sig.RSASignature.bitLength, err = readMPI(r)\n\tcase PubKeyAlgoDSA:\n\t\tif sig.DSASigR.bytes, sig.DSASigR.bitLength, err = readMPI(r); err != nil {\n\t\t\treturn\n\t\t}\n\t\tsig.DSASigS.bytes, sig.DSASigS.bitLength, err = readMPI(r)\n\tdefault:\n\t\tpanic(\"unreachable\")\n\t}\n\treturn\n}\n\n// Serialize marshals sig to w. Sign, SignUserId or SignKey must have been\n// called first.\nfunc (sig *SignatureV3) Serialize(w io.Writer) (err error) {\n\tbuf := make([]byte, 8)\n\n\t// Write the sig type and creation time\n\tbuf[0] = byte(sig.SigType)\n\tbinary.BigEndian.PutUint32(buf[1:5], uint32(sig.CreationTime.Unix()))\n\tif _, err = w.Write(buf[:5]); err != nil {\n\t\treturn\n\t}\n\n\t// Write the issuer long key ID\n\tbinary.BigEndian.PutUint64(buf[:8], sig.IssuerKeyId)\n\tif _, err = w.Write(buf[:8]); err != nil {\n\t\treturn\n\t}\n\n\t// Write public key algorithm, hash ID, and hash value\n\tbuf[0] = byte(sig.PubKeyAlgo)\n\thashId, ok := s2k.HashToHashId(sig.Hash)\n\tif !ok {\n\t\treturn errors.UnsupportedError(fmt.Sprintf(\"hash function %v\", sig.Hash))\n\t}\n\tbuf[1] = hashId\n\tcopy(buf[2:4], sig.HashTag[:])\n\tif _, err = w.Write(buf[:4]); err != nil {\n\t\treturn\n\t}\n\n\tif sig.RSASignature.bytes == nil && sig.DSASigR.bytes == nil {\n\t\treturn errors.InvalidArgumentError(\"Signature: need to call Sign, SignUserId or SignKey before Serialize\")\n\t}\n\n\tswitch sig.PubKeyAlgo {\n\tcase PubKeyAlgoRSA, PubKeyAlgoRSASignOnly:\n\t\terr = writeMPIs(w, sig.RSASignature)\n\tcase PubKeyAlgoDSA:\n\t\terr = writeMPIs(w, sig.DSASigR, sig.DSASigS)\n\tdefault:\n\t\tpanic(\"impossible\")\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/openpgp/packet/symmetric_key_encrypted.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage packet\n\nimport (\n\t\"bytes\"\n\t\"crypto/cipher\"\n\t\"io\"\n\t\"strconv\"\n\n\t\"golang.org/x/crypto/openpgp/errors\"\n\t\"golang.org/x/crypto/openpgp/s2k\"\n)\n\n// This is the largest session key that we'll support. Since no 512-bit cipher\n// has even been seriously used, this is comfortably large.\nconst maxSessionKeySizeInBytes = 64\n\n// SymmetricKeyEncrypted represents a passphrase protected session key. See RFC\n// 4880, section 5.3.\ntype SymmetricKeyEncrypted struct {\n\tCipherFunc   CipherFunction\n\ts2k          func(out, in []byte)\n\tencryptedKey []byte\n}\n\nconst symmetricKeyEncryptedVersion = 4\n\nfunc (ske *SymmetricKeyEncrypted) parse(r io.Reader) error {\n\t// RFC 4880, section 5.3.\n\tvar buf [2]byte\n\tif _, err := readFull(r, buf[:]); err != nil {\n\t\treturn err\n\t}\n\tif buf[0] != symmetricKeyEncryptedVersion {\n\t\treturn errors.UnsupportedError(\"SymmetricKeyEncrypted version\")\n\t}\n\tske.CipherFunc = CipherFunction(buf[1])\n\n\tif ske.CipherFunc.KeySize() == 0 {\n\t\treturn errors.UnsupportedError(\"unknown cipher: \" + strconv.Itoa(int(buf[1])))\n\t}\n\n\tvar err error\n\tske.s2k, err = s2k.Parse(r)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tencryptedKey := make([]byte, maxSessionKeySizeInBytes)\n\t// The session key may follow. We just have to try and read to find\n\t// out. If it exists then we limit it to maxSessionKeySizeInBytes.\n\tn, err := readFull(r, encryptedKey)\n\tif err != nil && err != io.ErrUnexpectedEOF {\n\t\treturn err\n\t}\n\n\tif n != 0 {\n\t\tif n == maxSessionKeySizeInBytes {\n\t\t\treturn errors.UnsupportedError(\"oversized encrypted session key\")\n\t\t}\n\t\tske.encryptedKey = encryptedKey[:n]\n\t}\n\n\treturn nil\n}\n\n// Decrypt attempts to decrypt an encrypted session key and returns the key and\n// the cipher to use when decrypting a subsequent Symmetrically Encrypted Data\n// packet.\nfunc (ske *SymmetricKeyEncrypted) Decrypt(passphrase []byte) ([]byte, CipherFunction, error) {\n\tkey := make([]byte, ske.CipherFunc.KeySize())\n\tske.s2k(key, passphrase)\n\n\tif len(ske.encryptedKey) == 0 {\n\t\treturn key, ske.CipherFunc, nil\n\t}\n\n\t// the IV is all zeros\n\tiv := make([]byte, ske.CipherFunc.blockSize())\n\tc := cipher.NewCFBDecrypter(ske.CipherFunc.new(key), iv)\n\tplaintextKey := make([]byte, len(ske.encryptedKey))\n\tc.XORKeyStream(plaintextKey, ske.encryptedKey)\n\tcipherFunc := CipherFunction(plaintextKey[0])\n\tif cipherFunc.blockSize() == 0 {\n\t\treturn nil, ske.CipherFunc, errors.UnsupportedError(\"unknown cipher: \" + strconv.Itoa(int(cipherFunc)))\n\t}\n\tplaintextKey = plaintextKey[1:]\n\tif l := len(plaintextKey); l == 0 || l%cipherFunc.blockSize() != 0 {\n\t\treturn nil, cipherFunc, errors.StructuralError(\"length of decrypted key not a multiple of block size\")\n\t}\n\n\treturn plaintextKey, cipherFunc, nil\n}\n\n// SerializeSymmetricKeyEncrypted serializes a symmetric key packet to w. The\n// packet contains a random session key, encrypted by a key derived from the\n// given passphrase. The session key is returned and must be passed to\n// SerializeSymmetricallyEncrypted.\n// If config is nil, sensible defaults will be used.\nfunc SerializeSymmetricKeyEncrypted(w io.Writer, passphrase []byte, config *Config) (key []byte, err error) {\n\tcipherFunc := config.Cipher()\n\tkeySize := cipherFunc.KeySize()\n\tif keySize == 0 {\n\t\treturn nil, errors.UnsupportedError(\"unknown cipher: \" + strconv.Itoa(int(cipherFunc)))\n\t}\n\n\ts2kBuf := new(bytes.Buffer)\n\tkeyEncryptingKey := make([]byte, keySize)\n\t// s2k.Serialize salts and stretches the passphrase, and writes the\n\t// resulting key to keyEncryptingKey and the s2k descriptor to s2kBuf.\n\terr = s2k.Serialize(s2kBuf, keyEncryptingKey, config.Random(), passphrase, &s2k.Config{Hash: config.Hash(), S2KCount: config.PasswordHashIterations()})\n\tif err != nil {\n\t\treturn\n\t}\n\ts2kBytes := s2kBuf.Bytes()\n\n\tpacketLength := 2 /* header */ + len(s2kBytes) + 1 /* cipher type */ + keySize\n\terr = serializeHeader(w, packetTypeSymmetricKeyEncrypted, packetLength)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tvar buf [2]byte\n\tbuf[0] = symmetricKeyEncryptedVersion\n\tbuf[1] = byte(cipherFunc)\n\t_, err = w.Write(buf[:])\n\tif err != nil {\n\t\treturn\n\t}\n\t_, err = w.Write(s2kBytes)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tsessionKey := make([]byte, keySize)\n\t_, err = io.ReadFull(config.Random(), sessionKey)\n\tif err != nil {\n\t\treturn\n\t}\n\tiv := make([]byte, cipherFunc.blockSize())\n\tc := cipher.NewCFBEncrypter(cipherFunc.new(keyEncryptingKey), iv)\n\tencryptedCipherAndKey := make([]byte, keySize+1)\n\tc.XORKeyStream(encryptedCipherAndKey, buf[1:])\n\tc.XORKeyStream(encryptedCipherAndKey[1:], sessionKey)\n\t_, err = w.Write(encryptedCipherAndKey)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tkey = sessionKey\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/openpgp/packet/symmetrically_encrypted.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage packet\n\nimport (\n\t\"crypto/cipher\"\n\t\"crypto/sha1\"\n\t\"crypto/subtle\"\n\t\"golang.org/x/crypto/openpgp/errors\"\n\t\"hash\"\n\t\"io\"\n\t\"strconv\"\n)\n\n// SymmetricallyEncrypted represents a symmetrically encrypted byte string. The\n// encrypted contents will consist of more OpenPGP packets. See RFC 4880,\n// sections 5.7 and 5.13.\ntype SymmetricallyEncrypted struct {\n\tMDC      bool // true iff this is a type 18 packet and thus has an embedded MAC.\n\tcontents io.Reader\n\tprefix   []byte\n}\n\nconst symmetricallyEncryptedVersion = 1\n\nfunc (se *SymmetricallyEncrypted) parse(r io.Reader) error {\n\tif se.MDC {\n\t\t// See RFC 4880, section 5.13.\n\t\tvar buf [1]byte\n\t\t_, err := readFull(r, buf[:])\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif buf[0] != symmetricallyEncryptedVersion {\n\t\t\treturn errors.UnsupportedError(\"unknown SymmetricallyEncrypted version\")\n\t\t}\n\t}\n\tse.contents = r\n\treturn nil\n}\n\n// Decrypt returns a ReadCloser, from which the decrypted contents of the\n// packet can be read. An incorrect key can, with high probability, be detected\n// immediately and this will result in a KeyIncorrect error being returned.\nfunc (se *SymmetricallyEncrypted) Decrypt(c CipherFunction, key []byte) (io.ReadCloser, error) {\n\tkeySize := c.KeySize()\n\tif keySize == 0 {\n\t\treturn nil, errors.UnsupportedError(\"unknown cipher: \" + strconv.Itoa(int(c)))\n\t}\n\tif len(key) != keySize {\n\t\treturn nil, errors.InvalidArgumentError(\"SymmetricallyEncrypted: incorrect key length\")\n\t}\n\n\tif se.prefix == nil {\n\t\tse.prefix = make([]byte, c.blockSize()+2)\n\t\t_, err := readFull(se.contents, se.prefix)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t} else if len(se.prefix) != c.blockSize()+2 {\n\t\treturn nil, errors.InvalidArgumentError(\"can't try ciphers with different block lengths\")\n\t}\n\n\tocfbResync := OCFBResync\n\tif se.MDC {\n\t\t// MDC packets use a different form of OCFB mode.\n\t\tocfbResync = OCFBNoResync\n\t}\n\n\ts := NewOCFBDecrypter(c.new(key), se.prefix, ocfbResync)\n\tif s == nil {\n\t\treturn nil, errors.ErrKeyIncorrect\n\t}\n\n\tplaintext := cipher.StreamReader{S: s, R: se.contents}\n\n\tif se.MDC {\n\t\t// MDC packets have an embedded hash that we need to check.\n\t\th := sha1.New()\n\t\th.Write(se.prefix)\n\t\treturn &seMDCReader{in: plaintext, h: h}, nil\n\t}\n\n\t// Otherwise, we just need to wrap plaintext so that it's a valid ReadCloser.\n\treturn seReader{plaintext}, nil\n}\n\n// seReader wraps an io.Reader with a no-op Close method.\ntype seReader struct {\n\tin io.Reader\n}\n\nfunc (ser seReader) Read(buf []byte) (int, error) {\n\treturn ser.in.Read(buf)\n}\n\nfunc (ser seReader) Close() error {\n\treturn nil\n}\n\nconst mdcTrailerSize = 1 /* tag byte */ + 1 /* length byte */ + sha1.Size\n\n// An seMDCReader wraps an io.Reader, maintains a running hash and keeps hold\n// of the most recent 22 bytes (mdcTrailerSize). Upon EOF, those bytes form an\n// MDC packet containing a hash of the previous contents which is checked\n// against the running hash. See RFC 4880, section 5.13.\ntype seMDCReader struct {\n\tin          io.Reader\n\th           hash.Hash\n\ttrailer     [mdcTrailerSize]byte\n\tscratch     [mdcTrailerSize]byte\n\ttrailerUsed int\n\terror       bool\n\teof         bool\n}\n\nfunc (ser *seMDCReader) Read(buf []byte) (n int, err error) {\n\tif ser.error {\n\t\terr = io.ErrUnexpectedEOF\n\t\treturn\n\t}\n\tif ser.eof {\n\t\terr = io.EOF\n\t\treturn\n\t}\n\n\t// If we haven't yet filled the trailer buffer then we must do that\n\t// first.\n\tfor ser.trailerUsed < mdcTrailerSize {\n\t\tn, err = ser.in.Read(ser.trailer[ser.trailerUsed:])\n\t\tser.trailerUsed += n\n\t\tif err == io.EOF {\n\t\t\tif ser.trailerUsed != mdcTrailerSize {\n\t\t\t\tn = 0\n\t\t\t\terr = io.ErrUnexpectedEOF\n\t\t\t\tser.error = true\n\t\t\t\treturn\n\t\t\t}\n\t\t\tser.eof = true\n\t\t\tn = 0\n\t\t\treturn\n\t\t}\n\n\t\tif err != nil {\n\t\t\tn = 0\n\t\t\treturn\n\t\t}\n\t}\n\n\t// If it's a short read then we read into a temporary buffer and shift\n\t// the data into the caller's buffer.\n\tif len(buf) <= mdcTrailerSize {\n\t\tn, err = readFull(ser.in, ser.scratch[:len(buf)])\n\t\tcopy(buf, ser.trailer[:n])\n\t\tser.h.Write(buf[:n])\n\t\tcopy(ser.trailer[:], ser.trailer[n:])\n\t\tcopy(ser.trailer[mdcTrailerSize-n:], ser.scratch[:])\n\t\tif n < len(buf) {\n\t\t\tser.eof = true\n\t\t\terr = io.EOF\n\t\t}\n\t\treturn\n\t}\n\n\tn, err = ser.in.Read(buf[mdcTrailerSize:])\n\tcopy(buf, ser.trailer[:])\n\tser.h.Write(buf[:n])\n\tcopy(ser.trailer[:], buf[n:])\n\n\tif err == io.EOF {\n\t\tser.eof = true\n\t}\n\treturn\n}\n\n// This is a new-format packet tag byte for a type 19 (MDC) packet.\nconst mdcPacketTagByte = byte(0x80) | 0x40 | 19\n\nfunc (ser *seMDCReader) Close() error {\n\tif ser.error {\n\t\treturn errors.SignatureError(\"error during reading\")\n\t}\n\n\tfor !ser.eof {\n\t\t// We haven't seen EOF so we need to read to the end\n\t\tvar buf [1024]byte\n\t\t_, err := ser.Read(buf[:])\n\t\tif err == io.EOF {\n\t\t\tbreak\n\t\t}\n\t\tif err != nil {\n\t\t\treturn errors.SignatureError(\"error during reading\")\n\t\t}\n\t}\n\n\tif ser.trailer[0] != mdcPacketTagByte || ser.trailer[1] != sha1.Size {\n\t\treturn errors.SignatureError(\"MDC packet not found\")\n\t}\n\tser.h.Write(ser.trailer[:2])\n\n\tfinal := ser.h.Sum(nil)\n\tif subtle.ConstantTimeCompare(final, ser.trailer[2:]) != 1 {\n\t\treturn errors.SignatureError(\"hash mismatch\")\n\t}\n\treturn nil\n}\n\n// An seMDCWriter writes through to an io.WriteCloser while maintains a running\n// hash of the data written. On close, it emits an MDC packet containing the\n// running hash.\ntype seMDCWriter struct {\n\tw io.WriteCloser\n\th hash.Hash\n}\n\nfunc (w *seMDCWriter) Write(buf []byte) (n int, err error) {\n\tw.h.Write(buf)\n\treturn w.w.Write(buf)\n}\n\nfunc (w *seMDCWriter) Close() (err error) {\n\tvar buf [mdcTrailerSize]byte\n\n\tbuf[0] = mdcPacketTagByte\n\tbuf[1] = sha1.Size\n\tw.h.Write(buf[:2])\n\tdigest := w.h.Sum(nil)\n\tcopy(buf[2:], digest)\n\n\t_, err = w.w.Write(buf[:])\n\tif err != nil {\n\t\treturn\n\t}\n\treturn w.w.Close()\n}\n\n// noOpCloser is like an ioutil.NopCloser, but for an io.Writer.\ntype noOpCloser struct {\n\tw io.Writer\n}\n\nfunc (c noOpCloser) Write(data []byte) (n int, err error) {\n\treturn c.w.Write(data)\n}\n\nfunc (c noOpCloser) Close() error {\n\treturn nil\n}\n\n// SerializeSymmetricallyEncrypted serializes a symmetrically encrypted packet\n// to w and returns a WriteCloser to which the to-be-encrypted packets can be\n// written.\n// If config is nil, sensible defaults will be used.\nfunc SerializeSymmetricallyEncrypted(w io.Writer, c CipherFunction, key []byte, config *Config) (contents io.WriteCloser, err error) {\n\tif c.KeySize() != len(key) {\n\t\treturn nil, errors.InvalidArgumentError(\"SymmetricallyEncrypted.Serialize: bad key length\")\n\t}\n\twriteCloser := noOpCloser{w}\n\tciphertext, err := serializeStreamHeader(writeCloser, packetTypeSymmetricallyEncryptedMDC)\n\tif err != nil {\n\t\treturn\n\t}\n\n\t_, err = ciphertext.Write([]byte{symmetricallyEncryptedVersion})\n\tif err != nil {\n\t\treturn\n\t}\n\n\tblock := c.new(key)\n\tblockSize := block.BlockSize()\n\tiv := make([]byte, blockSize)\n\t_, err = config.Random().Read(iv)\n\tif err != nil {\n\t\treturn\n\t}\n\ts, prefix := NewOCFBEncrypter(block, iv, OCFBNoResync)\n\t_, err = ciphertext.Write(prefix)\n\tif err != nil {\n\t\treturn\n\t}\n\tplaintext := cipher.StreamWriter{S: s, W: ciphertext}\n\n\th := sha1.New()\n\th.Write(iv)\n\th.Write(iv[blockSize-2:])\n\tcontents = &seMDCWriter{w: plaintext, h: h}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/openpgp/packet/userattribute.go",
    "content": "// Copyright 2013 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage packet\n\nimport (\n\t\"bytes\"\n\t\"image\"\n\t\"image/jpeg\"\n\t\"io\"\n\t\"io/ioutil\"\n)\n\nconst UserAttrImageSubpacket = 1\n\n// UserAttribute is capable of storing other types of data about a user\n// beyond name, email and a text comment. In practice, user attributes are typically used\n// to store a signed thumbnail photo JPEG image of the user.\n// See RFC 4880, section 5.12.\ntype UserAttribute struct {\n\tContents []*OpaqueSubpacket\n}\n\n// NewUserAttributePhoto creates a user attribute packet\n// containing the given images.\nfunc NewUserAttributePhoto(photos ...image.Image) (uat *UserAttribute, err error) {\n\tuat = new(UserAttribute)\n\tfor _, photo := range photos {\n\t\tvar buf bytes.Buffer\n\t\t// RFC 4880, Section 5.12.1.\n\t\tdata := []byte{\n\t\t\t0x10, 0x00, // Little-endian image header length (16 bytes)\n\t\t\t0x01,       // Image header version 1\n\t\t\t0x01,       // JPEG\n\t\t\t0, 0, 0, 0, // 12 reserved octets, must be all zero.\n\t\t\t0, 0, 0, 0,\n\t\t\t0, 0, 0, 0}\n\t\tif _, err = buf.Write(data); err != nil {\n\t\t\treturn\n\t\t}\n\t\tif err = jpeg.Encode(&buf, photo, nil); err != nil {\n\t\t\treturn\n\t\t}\n\t\tuat.Contents = append(uat.Contents, &OpaqueSubpacket{\n\t\t\tSubType:  UserAttrImageSubpacket,\n\t\t\tContents: buf.Bytes()})\n\t}\n\treturn\n}\n\n// NewUserAttribute creates a new user attribute packet containing the given subpackets.\nfunc NewUserAttribute(contents ...*OpaqueSubpacket) *UserAttribute {\n\treturn &UserAttribute{Contents: contents}\n}\n\nfunc (uat *UserAttribute) parse(r io.Reader) (err error) {\n\t// RFC 4880, section 5.13\n\tb, err := ioutil.ReadAll(r)\n\tif err != nil {\n\t\treturn\n\t}\n\tuat.Contents, err = OpaqueSubpackets(b)\n\treturn\n}\n\n// Serialize marshals the user attribute to w in the form of an OpenPGP packet, including\n// header.\nfunc (uat *UserAttribute) Serialize(w io.Writer) (err error) {\n\tvar buf bytes.Buffer\n\tfor _, sp := range uat.Contents {\n\t\tsp.Serialize(&buf)\n\t}\n\tif err = serializeHeader(w, packetTypeUserAttribute, buf.Len()); err != nil {\n\t\treturn err\n\t}\n\t_, err = w.Write(buf.Bytes())\n\treturn\n}\n\n// ImageData returns zero or more byte slices, each containing\n// JPEG File Interchange Format (JFIF), for each photo in the\n// the user attribute packet.\nfunc (uat *UserAttribute) ImageData() (imageData [][]byte) {\n\tfor _, sp := range uat.Contents {\n\t\tif sp.SubType == UserAttrImageSubpacket && len(sp.Contents) > 16 {\n\t\t\timageData = append(imageData, sp.Contents[16:])\n\t\t}\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/openpgp/packet/userid.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage packet\n\nimport (\n\t\"io\"\n\t\"io/ioutil\"\n\t\"strings\"\n)\n\n// UserId contains text that is intended to represent the name and email\n// address of the key holder. See RFC 4880, section 5.11. By convention, this\n// takes the form \"Full Name (Comment) <email@example.com>\"\ntype UserId struct {\n\tId string // By convention, this takes the form \"Full Name (Comment) <email@example.com>\" which is split out in the fields below.\n\n\tName, Comment, Email string\n}\n\nfunc hasInvalidCharacters(s string) bool {\n\tfor _, c := range s {\n\t\tswitch c {\n\t\tcase '(', ')', '<', '>', 0:\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// NewUserId returns a UserId or nil if any of the arguments contain invalid\n// characters. The invalid characters are '\\x00', '(', ')', '<' and '>'\nfunc NewUserId(name, comment, email string) *UserId {\n\t// RFC 4880 doesn't deal with the structure of userid strings; the\n\t// name, comment and email form is just a convention. However, there's\n\t// no convention about escaping the metacharacters and GPG just refuses\n\t// to create user ids where, say, the name contains a '('. We mirror\n\t// this behaviour.\n\n\tif hasInvalidCharacters(name) || hasInvalidCharacters(comment) || hasInvalidCharacters(email) {\n\t\treturn nil\n\t}\n\n\tuid := new(UserId)\n\tuid.Name, uid.Comment, uid.Email = name, comment, email\n\tuid.Id = name\n\tif len(comment) > 0 {\n\t\tif len(uid.Id) > 0 {\n\t\t\tuid.Id += \" \"\n\t\t}\n\t\tuid.Id += \"(\"\n\t\tuid.Id += comment\n\t\tuid.Id += \")\"\n\t}\n\tif len(email) > 0 {\n\t\tif len(uid.Id) > 0 {\n\t\t\tuid.Id += \" \"\n\t\t}\n\t\tuid.Id += \"<\"\n\t\tuid.Id += email\n\t\tuid.Id += \">\"\n\t}\n\treturn uid\n}\n\nfunc (uid *UserId) parse(r io.Reader) (err error) {\n\t// RFC 4880, section 5.11\n\tb, err := ioutil.ReadAll(r)\n\tif err != nil {\n\t\treturn\n\t}\n\tuid.Id = string(b)\n\tuid.Name, uid.Comment, uid.Email = parseUserId(uid.Id)\n\treturn\n}\n\n// Serialize marshals uid to w in the form of an OpenPGP packet, including\n// header.\nfunc (uid *UserId) Serialize(w io.Writer) error {\n\terr := serializeHeader(w, packetTypeUserId, len(uid.Id))\n\tif err != nil {\n\t\treturn err\n\t}\n\t_, err = w.Write([]byte(uid.Id))\n\treturn err\n}\n\n// parseUserId extracts the name, comment and email from a user id string that\n// is formatted as \"Full Name (Comment) <email@example.com>\".\nfunc parseUserId(id string) (name, comment, email string) {\n\tvar n, c, e struct {\n\t\tstart, end int\n\t}\n\tvar state int\n\n\tfor offset, rune := range id {\n\t\tswitch state {\n\t\tcase 0:\n\t\t\t// Entering name\n\t\t\tn.start = offset\n\t\t\tstate = 1\n\t\t\tfallthrough\n\t\tcase 1:\n\t\t\t// In name\n\t\t\tif rune == '(' {\n\t\t\t\tstate = 2\n\t\t\t\tn.end = offset\n\t\t\t} else if rune == '<' {\n\t\t\t\tstate = 5\n\t\t\t\tn.end = offset\n\t\t\t}\n\t\tcase 2:\n\t\t\t// Entering comment\n\t\t\tc.start = offset\n\t\t\tstate = 3\n\t\t\tfallthrough\n\t\tcase 3:\n\t\t\t// In comment\n\t\t\tif rune == ')' {\n\t\t\t\tstate = 4\n\t\t\t\tc.end = offset\n\t\t\t}\n\t\tcase 4:\n\t\t\t// Between comment and email\n\t\t\tif rune == '<' {\n\t\t\t\tstate = 5\n\t\t\t}\n\t\tcase 5:\n\t\t\t// Entering email\n\t\t\te.start = offset\n\t\t\tstate = 6\n\t\t\tfallthrough\n\t\tcase 6:\n\t\t\t// In email\n\t\t\tif rune == '>' {\n\t\t\t\tstate = 7\n\t\t\t\te.end = offset\n\t\t\t}\n\t\tdefault:\n\t\t\t// After email\n\t\t}\n\t}\n\tswitch state {\n\tcase 1:\n\t\t// ended in the name\n\t\tn.end = len(id)\n\tcase 3:\n\t\t// ended in comment\n\t\tc.end = len(id)\n\tcase 6:\n\t\t// ended in email\n\t\te.end = len(id)\n\t}\n\n\tname = strings.TrimSpace(id[n.start:n.end])\n\tcomment = strings.TrimSpace(id[c.start:c.end])\n\temail = strings.TrimSpace(id[e.start:e.end])\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/openpgp/read.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package openpgp implements high level operations on OpenPGP messages.\npackage openpgp // import \"golang.org/x/crypto/openpgp\"\n\nimport (\n\t\"crypto\"\n\t_ \"crypto/sha256\"\n\t\"hash\"\n\t\"io\"\n\t\"strconv\"\n\n\t\"golang.org/x/crypto/openpgp/armor\"\n\t\"golang.org/x/crypto/openpgp/errors\"\n\t\"golang.org/x/crypto/openpgp/packet\"\n)\n\n// SignatureType is the armor type for a PGP signature.\nvar SignatureType = \"PGP SIGNATURE\"\n\n// readArmored reads an armored block with the given type.\nfunc readArmored(r io.Reader, expectedType string) (body io.Reader, err error) {\n\tblock, err := armor.Decode(r)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tif block.Type != expectedType {\n\t\treturn nil, errors.InvalidArgumentError(\"expected '\" + expectedType + \"', got: \" + block.Type)\n\t}\n\n\treturn block.Body, nil\n}\n\n// MessageDetails contains the result of parsing an OpenPGP encrypted and/or\n// signed message.\ntype MessageDetails struct {\n\tIsEncrypted              bool                // true if the message was encrypted.\n\tEncryptedToKeyIds        []uint64            // the list of recipient key ids.\n\tIsSymmetricallyEncrypted bool                // true if a passphrase could have decrypted the message.\n\tDecryptedWith            Key                 // the private key used to decrypt the message, if any.\n\tIsSigned                 bool                // true if the message is signed.\n\tSignedByKeyId            uint64              // the key id of the signer, if any.\n\tSignedBy                 *Key                // the key of the signer, if available.\n\tLiteralData              *packet.LiteralData // the metadata of the contents\n\tUnverifiedBody           io.Reader           // the contents of the message.\n\n\t// If IsSigned is true and SignedBy is non-zero then the signature will\n\t// be verified as UnverifiedBody is read. The signature cannot be\n\t// checked until the whole of UnverifiedBody is read so UnverifiedBody\n\t// must be consumed until EOF before the data can trusted. Even if a\n\t// message isn't signed (or the signer is unknown) the data may contain\n\t// an authentication code that is only checked once UnverifiedBody has\n\t// been consumed. Once EOF has been seen, the following fields are\n\t// valid. (An authentication code failure is reported as a\n\t// SignatureError error when reading from UnverifiedBody.)\n\tSignatureError error             // nil if the signature is good.\n\tSignature      *packet.Signature // the signature packet itself.\n\n\tdecrypted io.ReadCloser\n}\n\n// A PromptFunction is used as a callback by functions that may need to decrypt\n// a private key, or prompt for a passphrase. It is called with a list of\n// acceptable, encrypted private keys and a boolean that indicates whether a\n// passphrase is usable. It should either decrypt a private key or return a\n// passphrase to try. If the decrypted private key or given passphrase isn't\n// correct, the function will be called again, forever. Any error returned will\n// be passed up.\ntype PromptFunction func(keys []Key, symmetric bool) ([]byte, error)\n\n// A keyEnvelopePair is used to store a private key with the envelope that\n// contains a symmetric key, encrypted with that key.\ntype keyEnvelopePair struct {\n\tkey          Key\n\tencryptedKey *packet.EncryptedKey\n}\n\n// ReadMessage parses an OpenPGP message that may be signed and/or encrypted.\n// The given KeyRing should contain both public keys (for signature\n// verification) and, possibly encrypted, private keys for decrypting.\n// If config is nil, sensible defaults will be used.\nfunc ReadMessage(r io.Reader, keyring KeyRing, prompt PromptFunction, config *packet.Config) (md *MessageDetails, err error) {\n\tvar p packet.Packet\n\n\tvar symKeys []*packet.SymmetricKeyEncrypted\n\tvar pubKeys []keyEnvelopePair\n\tvar se *packet.SymmetricallyEncrypted\n\n\tpackets := packet.NewReader(r)\n\tmd = new(MessageDetails)\n\tmd.IsEncrypted = true\n\n\t// The message, if encrypted, starts with a number of packets\n\t// containing an encrypted decryption key. The decryption key is either\n\t// encrypted to a public key, or with a passphrase. This loop\n\t// collects these packets.\nParsePackets:\n\tfor {\n\t\tp, err = packets.Next()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tswitch p := p.(type) {\n\t\tcase *packet.SymmetricKeyEncrypted:\n\t\t\t// This packet contains the decryption key encrypted with a passphrase.\n\t\t\tmd.IsSymmetricallyEncrypted = true\n\t\t\tsymKeys = append(symKeys, p)\n\t\tcase *packet.EncryptedKey:\n\t\t\t// This packet contains the decryption key encrypted to a public key.\n\t\t\tmd.EncryptedToKeyIds = append(md.EncryptedToKeyIds, p.KeyId)\n\t\t\tswitch p.Algo {\n\t\t\tcase packet.PubKeyAlgoRSA, packet.PubKeyAlgoRSAEncryptOnly, packet.PubKeyAlgoElGamal:\n\t\t\t\tbreak\n\t\t\tdefault:\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tvar keys []Key\n\t\t\tif p.KeyId == 0 {\n\t\t\t\tkeys = keyring.DecryptionKeys()\n\t\t\t} else {\n\t\t\t\tkeys = keyring.KeysById(p.KeyId)\n\t\t\t}\n\t\t\tfor _, k := range keys {\n\t\t\t\tpubKeys = append(pubKeys, keyEnvelopePair{k, p})\n\t\t\t}\n\t\tcase *packet.SymmetricallyEncrypted:\n\t\t\tse = p\n\t\t\tbreak ParsePackets\n\t\tcase *packet.Compressed, *packet.LiteralData, *packet.OnePassSignature:\n\t\t\t// This message isn't encrypted.\n\t\t\tif len(symKeys) != 0 || len(pubKeys) != 0 {\n\t\t\t\treturn nil, errors.StructuralError(\"key material not followed by encrypted message\")\n\t\t\t}\n\t\t\tpackets.Unread(p)\n\t\t\treturn readSignedMessage(packets, nil, keyring)\n\t\t}\n\t}\n\n\tvar candidates []Key\n\tvar decrypted io.ReadCloser\n\n\t// Now that we have the list of encrypted keys we need to decrypt at\n\t// least one of them or, if we cannot, we need to call the prompt\n\t// function so that it can decrypt a key or give us a passphrase.\nFindKey:\n\tfor {\n\t\t// See if any of the keys already have a private key available\n\t\tcandidates = candidates[:0]\n\t\tcandidateFingerprints := make(map[string]bool)\n\n\t\tfor _, pk := range pubKeys {\n\t\t\tif pk.key.PrivateKey == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif !pk.key.PrivateKey.Encrypted {\n\t\t\t\tif len(pk.encryptedKey.Key) == 0 {\n\t\t\t\t\tpk.encryptedKey.Decrypt(pk.key.PrivateKey, config)\n\t\t\t\t}\n\t\t\t\tif len(pk.encryptedKey.Key) == 0 {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tdecrypted, err = se.Decrypt(pk.encryptedKey.CipherFunc, pk.encryptedKey.Key)\n\t\t\t\tif err != nil && err != errors.ErrKeyIncorrect {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tif decrypted != nil {\n\t\t\t\t\tmd.DecryptedWith = pk.key\n\t\t\t\t\tbreak FindKey\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfpr := string(pk.key.PublicKey.Fingerprint[:])\n\t\t\t\tif v := candidateFingerprints[fpr]; v {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tcandidates = append(candidates, pk.key)\n\t\t\t\tcandidateFingerprints[fpr] = true\n\t\t\t}\n\t\t}\n\n\t\tif len(candidates) == 0 && len(symKeys) == 0 {\n\t\t\treturn nil, errors.ErrKeyIncorrect\n\t\t}\n\n\t\tif prompt == nil {\n\t\t\treturn nil, errors.ErrKeyIncorrect\n\t\t}\n\n\t\tpassphrase, err := prompt(candidates, len(symKeys) != 0)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\t// Try the symmetric passphrase first\n\t\tif len(symKeys) != 0 && passphrase != nil {\n\t\t\tfor _, s := range symKeys {\n\t\t\t\tkey, cipherFunc, err := s.Decrypt(passphrase)\n\t\t\t\tif err == nil {\n\t\t\t\t\tdecrypted, err = se.Decrypt(cipherFunc, key)\n\t\t\t\t\tif err != nil && err != errors.ErrKeyIncorrect {\n\t\t\t\t\t\treturn nil, err\n\t\t\t\t\t}\n\t\t\t\t\tif decrypted != nil {\n\t\t\t\t\t\tbreak FindKey\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}\n\t\t}\n\t}\n\n\tmd.decrypted = decrypted\n\tif err := packets.Push(decrypted); err != nil {\n\t\treturn nil, err\n\t}\n\treturn readSignedMessage(packets, md, keyring)\n}\n\n// readSignedMessage reads a possibly signed message if mdin is non-zero then\n// that structure is updated and returned. Otherwise a fresh MessageDetails is\n// used.\nfunc readSignedMessage(packets *packet.Reader, mdin *MessageDetails, keyring KeyRing) (md *MessageDetails, err error) {\n\tif mdin == nil {\n\t\tmdin = new(MessageDetails)\n\t}\n\tmd = mdin\n\n\tvar p packet.Packet\n\tvar h hash.Hash\n\tvar wrappedHash hash.Hash\nFindLiteralData:\n\tfor {\n\t\tp, err = packets.Next()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tswitch p := p.(type) {\n\t\tcase *packet.Compressed:\n\t\t\tif err := packets.Push(p.Body); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\tcase *packet.OnePassSignature:\n\t\t\tif !p.IsLast {\n\t\t\t\treturn nil, errors.UnsupportedError(\"nested signatures\")\n\t\t\t}\n\n\t\t\th, wrappedHash, err = hashForSignature(p.Hash, p.SigType)\n\t\t\tif err != nil {\n\t\t\t\tmd = nil\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tmd.IsSigned = true\n\t\t\tmd.SignedByKeyId = p.KeyId\n\t\t\tkeys := keyring.KeysByIdUsage(p.KeyId, packet.KeyFlagSign)\n\t\t\tif len(keys) > 0 {\n\t\t\t\tmd.SignedBy = &keys[0]\n\t\t\t}\n\t\tcase *packet.LiteralData:\n\t\t\tmd.LiteralData = p\n\t\t\tbreak FindLiteralData\n\t\t}\n\t}\n\n\tif md.SignedBy != nil {\n\t\tmd.UnverifiedBody = &signatureCheckReader{packets, h, wrappedHash, md}\n\t} else if md.decrypted != nil {\n\t\tmd.UnverifiedBody = checkReader{md}\n\t} else {\n\t\tmd.UnverifiedBody = md.LiteralData.Body\n\t}\n\n\treturn md, nil\n}\n\n// hashForSignature returns a pair of hashes that can be used to verify a\n// signature. The signature may specify that the contents of the signed message\n// should be preprocessed (i.e. to normalize line endings). Thus this function\n// returns two hashes. The second should be used to hash the message itself and\n// performs any needed preprocessing.\nfunc hashForSignature(hashId crypto.Hash, sigType packet.SignatureType) (hash.Hash, hash.Hash, error) {\n\tif !hashId.Available() {\n\t\treturn nil, nil, errors.UnsupportedError(\"hash not available: \" + strconv.Itoa(int(hashId)))\n\t}\n\th := hashId.New()\n\n\tswitch sigType {\n\tcase packet.SigTypeBinary:\n\t\treturn h, h, nil\n\tcase packet.SigTypeText:\n\t\treturn h, NewCanonicalTextHash(h), nil\n\t}\n\n\treturn nil, nil, errors.UnsupportedError(\"unsupported signature type: \" + strconv.Itoa(int(sigType)))\n}\n\n// checkReader wraps an io.Reader from a LiteralData packet. When it sees EOF\n// it closes the ReadCloser from any SymmetricallyEncrypted packet to trigger\n// MDC checks.\ntype checkReader struct {\n\tmd *MessageDetails\n}\n\nfunc (cr checkReader) Read(buf []byte) (n int, err error) {\n\tn, err = cr.md.LiteralData.Body.Read(buf)\n\tif err == io.EOF {\n\t\tmdcErr := cr.md.decrypted.Close()\n\t\tif mdcErr != nil {\n\t\t\terr = mdcErr\n\t\t}\n\t}\n\treturn\n}\n\n// signatureCheckReader wraps an io.Reader from a LiteralData packet and hashes\n// the data as it is read. When it sees an EOF from the underlying io.Reader\n// it parses and checks a trailing Signature packet and triggers any MDC checks.\ntype signatureCheckReader struct {\n\tpackets        *packet.Reader\n\th, wrappedHash hash.Hash\n\tmd             *MessageDetails\n}\n\nfunc (scr *signatureCheckReader) Read(buf []byte) (n int, err error) {\n\tn, err = scr.md.LiteralData.Body.Read(buf)\n\tscr.wrappedHash.Write(buf[:n])\n\tif err == io.EOF {\n\t\tvar p packet.Packet\n\t\tp, scr.md.SignatureError = scr.packets.Next()\n\t\tif scr.md.SignatureError != nil {\n\t\t\treturn\n\t\t}\n\n\t\tvar ok bool\n\t\tif scr.md.Signature, ok = p.(*packet.Signature); !ok {\n\t\t\tscr.md.SignatureError = errors.StructuralError(\"LiteralData not followed by Signature\")\n\t\t\treturn\n\t\t}\n\n\t\tscr.md.SignatureError = scr.md.SignedBy.PublicKey.VerifySignature(scr.h, scr.md.Signature)\n\n\t\t// The SymmetricallyEncrypted packet, if any, might have an\n\t\t// unsigned hash of its own. In order to check this we need to\n\t\t// close that Reader.\n\t\tif scr.md.decrypted != nil {\n\t\t\tmdcErr := scr.md.decrypted.Close()\n\t\t\tif mdcErr != nil {\n\t\t\t\terr = mdcErr\n\t\t\t}\n\t\t}\n\t}\n\treturn\n}\n\n// CheckDetachedSignature takes a signed file and a detached signature and\n// returns the signer if the signature is valid. If the signer isn't known,\n// ErrUnknownIssuer is returned.\nfunc CheckDetachedSignature(keyring KeyRing, signed, signature io.Reader) (signer *Entity, err error) {\n\tvar issuerKeyId uint64\n\tvar hashFunc crypto.Hash\n\tvar sigType packet.SignatureType\n\tvar keys []Key\n\tvar p packet.Packet\n\n\tpackets := packet.NewReader(signature)\n\tfor {\n\t\tp, err = packets.Next()\n\t\tif err == io.EOF {\n\t\t\treturn nil, errors.ErrUnknownIssuer\n\t\t}\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tswitch sig := p.(type) {\n\t\tcase *packet.Signature:\n\t\t\tif sig.IssuerKeyId == nil {\n\t\t\t\treturn nil, errors.StructuralError(\"signature doesn't have an issuer\")\n\t\t\t}\n\t\t\tissuerKeyId = *sig.IssuerKeyId\n\t\t\thashFunc = sig.Hash\n\t\t\tsigType = sig.SigType\n\t\tcase *packet.SignatureV3:\n\t\t\tissuerKeyId = sig.IssuerKeyId\n\t\t\thashFunc = sig.Hash\n\t\t\tsigType = sig.SigType\n\t\tdefault:\n\t\t\treturn nil, errors.StructuralError(\"non signature packet found\")\n\t\t}\n\n\t\tkeys = keyring.KeysByIdUsage(issuerKeyId, packet.KeyFlagSign)\n\t\tif len(keys) > 0 {\n\t\t\tbreak\n\t\t}\n\t}\n\n\tif len(keys) == 0 {\n\t\tpanic(\"unreachable\")\n\t}\n\n\th, wrappedHash, err := hashForSignature(hashFunc, sigType)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif _, err := io.Copy(wrappedHash, signed); err != nil && err != io.EOF {\n\t\treturn nil, err\n\t}\n\n\tfor _, key := range keys {\n\t\tswitch sig := p.(type) {\n\t\tcase *packet.Signature:\n\t\t\terr = key.PublicKey.VerifySignature(h, sig)\n\t\tcase *packet.SignatureV3:\n\t\t\terr = key.PublicKey.VerifySignatureV3(h, sig)\n\t\tdefault:\n\t\t\tpanic(\"unreachable\")\n\t\t}\n\n\t\tif err == nil {\n\t\t\treturn key.Entity, nil\n\t\t}\n\t}\n\n\treturn nil, err\n}\n\n// CheckArmoredDetachedSignature performs the same actions as\n// CheckDetachedSignature but expects the signature to be armored.\nfunc CheckArmoredDetachedSignature(keyring KeyRing, signed, signature io.Reader) (signer *Entity, err error) {\n\tbody, err := readArmored(signature, SignatureType)\n\tif err != nil {\n\t\treturn\n\t}\n\n\treturn CheckDetachedSignature(keyring, signed, body)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/openpgp/s2k/s2k.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package s2k implements the various OpenPGP string-to-key transforms as\n// specified in RFC 4800 section 3.7.1.\npackage s2k // import \"golang.org/x/crypto/openpgp/s2k\"\n\nimport (\n\t\"crypto\"\n\t\"hash\"\n\t\"io\"\n\t\"strconv\"\n\n\t\"golang.org/x/crypto/openpgp/errors\"\n)\n\n// Config collects configuration parameters for s2k key-stretching\n// transformatioms. A nil *Config is valid and results in all default\n// values. Currently, Config is used only by the Serialize function in\n// this package.\ntype Config struct {\n\t// Hash is the default hash function to be used. If\n\t// nil, SHA1 is used.\n\tHash crypto.Hash\n\t// S2KCount is only used for symmetric encryption. It\n\t// determines the strength of the passphrase stretching when\n\t// the said passphrase is hashed to produce a key. S2KCount\n\t// should be between 1024 and 65011712, inclusive. If Config\n\t// is nil or S2KCount is 0, the value 65536 used. Not all\n\t// values in the above range can be represented. S2KCount will\n\t// be rounded up to the next representable value if it cannot\n\t// be encoded exactly. When set, it is strongly encrouraged to\n\t// use a value that is at least 65536. See RFC 4880 Section\n\t// 3.7.1.3.\n\tS2KCount int\n}\n\nfunc (c *Config) hash() crypto.Hash {\n\tif c == nil || uint(c.Hash) == 0 {\n\t\t// SHA1 is the historical default in this package.\n\t\treturn crypto.SHA1\n\t}\n\n\treturn c.Hash\n}\n\nfunc (c *Config) encodedCount() uint8 {\n\tif c == nil || c.S2KCount == 0 {\n\t\treturn 96 // The common case. Correspoding to 65536\n\t}\n\n\ti := c.S2KCount\n\tswitch {\n\t// Behave like GPG. Should we make 65536 the lowest value used?\n\tcase i < 1024:\n\t\ti = 1024\n\tcase i > 65011712:\n\t\ti = 65011712\n\t}\n\n\treturn encodeCount(i)\n}\n\n// encodeCount converts an iterative \"count\" in the range 1024 to\n// 65011712, inclusive, to an encoded count. The return value is the\n// octet that is actually stored in the GPG file. encodeCount panics\n// if i is not in the above range (encodedCount above takes care to\n// pass i in the correct range). See RFC 4880 Section 3.7.7.1.\nfunc encodeCount(i int) uint8 {\n\tif i < 1024 || i > 65011712 {\n\t\tpanic(\"count arg i outside the required range\")\n\t}\n\n\tfor encoded := 0; encoded < 256; encoded++ {\n\t\tcount := decodeCount(uint8(encoded))\n\t\tif count >= i {\n\t\t\treturn uint8(encoded)\n\t\t}\n\t}\n\n\treturn 255\n}\n\n// decodeCount returns the s2k mode 3 iterative \"count\" corresponding to\n// the encoded octet c.\nfunc decodeCount(c uint8) int {\n\treturn (16 + int(c&15)) << (uint32(c>>4) + 6)\n}\n\n// Simple writes to out the result of computing the Simple S2K function (RFC\n// 4880, section 3.7.1.1) using the given hash and input passphrase.\nfunc Simple(out []byte, h hash.Hash, in []byte) {\n\tSalted(out, h, in, nil)\n}\n\nvar zero [1]byte\n\n// Salted writes to out the result of computing the Salted S2K function (RFC\n// 4880, section 3.7.1.2) using the given hash, input passphrase and salt.\nfunc Salted(out []byte, h hash.Hash, in []byte, salt []byte) {\n\tdone := 0\n\tvar digest []byte\n\n\tfor i := 0; done < len(out); i++ {\n\t\th.Reset()\n\t\tfor j := 0; j < i; j++ {\n\t\t\th.Write(zero[:])\n\t\t}\n\t\th.Write(salt)\n\t\th.Write(in)\n\t\tdigest = h.Sum(digest[:0])\n\t\tn := copy(out[done:], digest)\n\t\tdone += n\n\t}\n}\n\n// Iterated writes to out the result of computing the Iterated and Salted S2K\n// function (RFC 4880, section 3.7.1.3) using the given hash, input passphrase,\n// salt and iteration count.\nfunc Iterated(out []byte, h hash.Hash, in []byte, salt []byte, count int) {\n\tcombined := make([]byte, len(in)+len(salt))\n\tcopy(combined, salt)\n\tcopy(combined[len(salt):], in)\n\n\tif count < len(combined) {\n\t\tcount = len(combined)\n\t}\n\n\tdone := 0\n\tvar digest []byte\n\tfor i := 0; done < len(out); i++ {\n\t\th.Reset()\n\t\tfor j := 0; j < i; j++ {\n\t\t\th.Write(zero[:])\n\t\t}\n\t\twritten := 0\n\t\tfor written < count {\n\t\t\tif written+len(combined) > count {\n\t\t\t\ttodo := count - written\n\t\t\t\th.Write(combined[:todo])\n\t\t\t\twritten = count\n\t\t\t} else {\n\t\t\t\th.Write(combined)\n\t\t\t\twritten += len(combined)\n\t\t\t}\n\t\t}\n\t\tdigest = h.Sum(digest[:0])\n\t\tn := copy(out[done:], digest)\n\t\tdone += n\n\t}\n}\n\n// Parse reads a binary specification for a string-to-key transformation from r\n// and returns a function which performs that transform.\nfunc Parse(r io.Reader) (f func(out, in []byte), err error) {\n\tvar buf [9]byte\n\n\t_, err = io.ReadFull(r, buf[:2])\n\tif err != nil {\n\t\treturn\n\t}\n\n\thash, ok := HashIdToHash(buf[1])\n\tif !ok {\n\t\treturn nil, errors.UnsupportedError(\"hash for S2K function: \" + strconv.Itoa(int(buf[1])))\n\t}\n\tif !hash.Available() {\n\t\treturn nil, errors.UnsupportedError(\"hash not available: \" + strconv.Itoa(int(hash)))\n\t}\n\th := hash.New()\n\n\tswitch buf[0] {\n\tcase 0:\n\t\tf := func(out, in []byte) {\n\t\t\tSimple(out, h, in)\n\t\t}\n\t\treturn f, nil\n\tcase 1:\n\t\t_, err = io.ReadFull(r, buf[:8])\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t\tf := func(out, in []byte) {\n\t\t\tSalted(out, h, in, buf[:8])\n\t\t}\n\t\treturn f, nil\n\tcase 3:\n\t\t_, err = io.ReadFull(r, buf[:9])\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t\tcount := decodeCount(buf[8])\n\t\tf := func(out, in []byte) {\n\t\t\tIterated(out, h, in, buf[:8], count)\n\t\t}\n\t\treturn f, nil\n\t}\n\n\treturn nil, errors.UnsupportedError(\"S2K function\")\n}\n\n// Serialize salts and stretches the given passphrase and writes the\n// resulting key into key. It also serializes an S2K descriptor to\n// w. The key stretching can be configured with c, which may be\n// nil. In that case, sensible defaults will be used.\nfunc Serialize(w io.Writer, key []byte, rand io.Reader, passphrase []byte, c *Config) error {\n\tvar buf [11]byte\n\tbuf[0] = 3 /* iterated and salted */\n\tbuf[1], _ = HashToHashId(c.hash())\n\tsalt := buf[2:10]\n\tif _, err := io.ReadFull(rand, salt); err != nil {\n\t\treturn err\n\t}\n\tencodedCount := c.encodedCount()\n\tcount := decodeCount(encodedCount)\n\tbuf[10] = encodedCount\n\tif _, err := w.Write(buf[:]); err != nil {\n\t\treturn err\n\t}\n\n\tIterated(key, c.hash().New(), passphrase, salt, count)\n\treturn nil\n}\n\n// hashToHashIdMapping contains pairs relating OpenPGP's hash identifier with\n// Go's crypto.Hash type. See RFC 4880, section 9.4.\nvar hashToHashIdMapping = []struct {\n\tid   byte\n\thash crypto.Hash\n\tname string\n}{\n\t{1, crypto.MD5, \"MD5\"},\n\t{2, crypto.SHA1, \"SHA1\"},\n\t{3, crypto.RIPEMD160, \"RIPEMD160\"},\n\t{8, crypto.SHA256, \"SHA256\"},\n\t{9, crypto.SHA384, \"SHA384\"},\n\t{10, crypto.SHA512, \"SHA512\"},\n\t{11, crypto.SHA224, \"SHA224\"},\n}\n\n// HashIdToHash returns a crypto.Hash which corresponds to the given OpenPGP\n// hash id.\nfunc HashIdToHash(id byte) (h crypto.Hash, ok bool) {\n\tfor _, m := range hashToHashIdMapping {\n\t\tif m.id == id {\n\t\t\treturn m.hash, true\n\t\t}\n\t}\n\treturn 0, false\n}\n\n// HashIdToString returns the name of the hash function corresponding to the\n// given OpenPGP hash id, or panics if id is unknown.\nfunc HashIdToString(id byte) (name string, ok bool) {\n\tfor _, m := range hashToHashIdMapping {\n\t\tif m.id == id {\n\t\t\treturn m.name, true\n\t\t}\n\t}\n\n\treturn \"\", false\n}\n\n// HashIdToHash returns an OpenPGP hash id which corresponds the given Hash.\nfunc HashToHashId(h crypto.Hash) (id byte, ok bool) {\n\tfor _, m := range hashToHashIdMapping {\n\t\tif m.hash == h {\n\t\t\treturn m.id, true\n\t\t}\n\t}\n\treturn 0, false\n}\n"
  },
  {
    "path": "vendor/golang.org/x/crypto/openpgp/write.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage openpgp\n\nimport (\n\t\"crypto\"\n\t\"hash\"\n\t\"io\"\n\t\"strconv\"\n\t\"time\"\n\n\t\"golang.org/x/crypto/openpgp/armor\"\n\t\"golang.org/x/crypto/openpgp/errors\"\n\t\"golang.org/x/crypto/openpgp/packet\"\n\t\"golang.org/x/crypto/openpgp/s2k\"\n)\n\n// DetachSign signs message with the private key from signer (which must\n// already have been decrypted) and writes the signature to w.\n// If config is nil, sensible defaults will be used.\nfunc DetachSign(w io.Writer, signer *Entity, message io.Reader, config *packet.Config) error {\n\treturn detachSign(w, signer, message, packet.SigTypeBinary, config)\n}\n\n// ArmoredDetachSign signs message with the private key from signer (which\n// must already have been decrypted) and writes an armored signature to w.\n// If config is nil, sensible defaults will be used.\nfunc ArmoredDetachSign(w io.Writer, signer *Entity, message io.Reader, config *packet.Config) (err error) {\n\treturn armoredDetachSign(w, signer, message, packet.SigTypeBinary, config)\n}\n\n// DetachSignText signs message (after canonicalising the line endings) with\n// the private key from signer (which must already have been decrypted) and\n// writes the signature to w.\n// If config is nil, sensible defaults will be used.\nfunc DetachSignText(w io.Writer, signer *Entity, message io.Reader, config *packet.Config) error {\n\treturn detachSign(w, signer, message, packet.SigTypeText, config)\n}\n\n// ArmoredDetachSignText signs message (after canonicalising the line endings)\n// with the private key from signer (which must already have been decrypted)\n// and writes an armored signature to w.\n// If config is nil, sensible defaults will be used.\nfunc ArmoredDetachSignText(w io.Writer, signer *Entity, message io.Reader, config *packet.Config) error {\n\treturn armoredDetachSign(w, signer, message, packet.SigTypeText, config)\n}\n\nfunc armoredDetachSign(w io.Writer, signer *Entity, message io.Reader, sigType packet.SignatureType, config *packet.Config) (err error) {\n\tout, err := armor.Encode(w, SignatureType, nil)\n\tif err != nil {\n\t\treturn\n\t}\n\terr = detachSign(out, signer, message, sigType, config)\n\tif err != nil {\n\t\treturn\n\t}\n\treturn out.Close()\n}\n\nfunc detachSign(w io.Writer, signer *Entity, message io.Reader, sigType packet.SignatureType, config *packet.Config) (err error) {\n\tif signer.PrivateKey == nil {\n\t\treturn errors.InvalidArgumentError(\"signing key doesn't have a private key\")\n\t}\n\tif signer.PrivateKey.Encrypted {\n\t\treturn errors.InvalidArgumentError(\"signing key is encrypted\")\n\t}\n\n\tsig := new(packet.Signature)\n\tsig.SigType = sigType\n\tsig.PubKeyAlgo = signer.PrivateKey.PubKeyAlgo\n\tsig.Hash = config.Hash()\n\tsig.CreationTime = config.Now()\n\tsig.IssuerKeyId = &signer.PrivateKey.KeyId\n\n\th, wrappedHash, err := hashForSignature(sig.Hash, sig.SigType)\n\tif err != nil {\n\t\treturn\n\t}\n\tio.Copy(wrappedHash, message)\n\n\terr = sig.Sign(h, signer.PrivateKey, config)\n\tif err != nil {\n\t\treturn\n\t}\n\n\treturn sig.Serialize(w)\n}\n\n// FileHints contains metadata about encrypted files. This metadata is, itself,\n// encrypted.\ntype FileHints struct {\n\t// IsBinary can be set to hint that the contents are binary data.\n\tIsBinary bool\n\t// FileName hints at the name of the file that should be written. It's\n\t// truncated to 255 bytes if longer. It may be empty to suggest that the\n\t// file should not be written to disk. It may be equal to \"_CONSOLE\" to\n\t// suggest the data should not be written to disk.\n\tFileName string\n\t// ModTime contains the modification time of the file, or the zero time if not applicable.\n\tModTime time.Time\n}\n\n// SymmetricallyEncrypt acts like gpg -c: it encrypts a file with a passphrase.\n// The resulting WriteCloser must be closed after the contents of the file have\n// been written.\n// If config is nil, sensible defaults will be used.\nfunc SymmetricallyEncrypt(ciphertext io.Writer, passphrase []byte, hints *FileHints, config *packet.Config) (plaintext io.WriteCloser, err error) {\n\tif hints == nil {\n\t\thints = &FileHints{}\n\t}\n\n\tkey, err := packet.SerializeSymmetricKeyEncrypted(ciphertext, passphrase, config)\n\tif err != nil {\n\t\treturn\n\t}\n\tw, err := packet.SerializeSymmetricallyEncrypted(ciphertext, config.Cipher(), key, config)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tliteraldata := w\n\tif algo := config.Compression(); algo != packet.CompressionNone {\n\t\tvar compConfig *packet.CompressionConfig\n\t\tif config != nil {\n\t\t\tcompConfig = config.CompressionConfig\n\t\t}\n\t\tliteraldata, err = packet.SerializeCompressed(w, algo, compConfig)\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t}\n\n\tvar epochSeconds uint32\n\tif !hints.ModTime.IsZero() {\n\t\tepochSeconds = uint32(hints.ModTime.Unix())\n\t}\n\treturn packet.SerializeLiteral(literaldata, hints.IsBinary, hints.FileName, epochSeconds)\n}\n\n// intersectPreferences mutates and returns a prefix of a that contains only\n// the values in the intersection of a and b. The order of a is preserved.\nfunc intersectPreferences(a []uint8, b []uint8) (intersection []uint8) {\n\tvar j int\n\tfor _, v := range a {\n\t\tfor _, v2 := range b {\n\t\t\tif v == v2 {\n\t\t\t\ta[j] = v\n\t\t\t\tj++\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a[:j]\n}\n\nfunc hashToHashId(h crypto.Hash) uint8 {\n\tv, ok := s2k.HashToHashId(h)\n\tif !ok {\n\t\tpanic(\"tried to convert unknown hash\")\n\t}\n\treturn v\n}\n\n// Encrypt encrypts a message to a number of recipients and, optionally, signs\n// it. hints contains optional information, that is also encrypted, that aids\n// the recipients in processing the message. The resulting WriteCloser must\n// be closed after the contents of the file have been written.\n// If config is nil, sensible defaults will be used.\nfunc Encrypt(ciphertext io.Writer, to []*Entity, signed *Entity, hints *FileHints, config *packet.Config) (plaintext io.WriteCloser, err error) {\n\tvar signer *packet.PrivateKey\n\tif signed != nil {\n\t\tsignKey, ok := signed.signingKey(config.Now())\n\t\tif !ok {\n\t\t\treturn nil, errors.InvalidArgumentError(\"no valid signing keys\")\n\t\t}\n\t\tsigner = signKey.PrivateKey\n\t\tif signer == nil {\n\t\t\treturn nil, errors.InvalidArgumentError(\"no private key in signing key\")\n\t\t}\n\t\tif signer.Encrypted {\n\t\t\treturn nil, errors.InvalidArgumentError(\"signing key must be decrypted\")\n\t\t}\n\t}\n\n\t// These are the possible ciphers that we'll use for the message.\n\tcandidateCiphers := []uint8{\n\t\tuint8(packet.CipherAES128),\n\t\tuint8(packet.CipherAES256),\n\t\tuint8(packet.CipherCAST5),\n\t}\n\t// These are the possible hash functions that we'll use for the signature.\n\tcandidateHashes := []uint8{\n\t\thashToHashId(crypto.SHA256),\n\t\thashToHashId(crypto.SHA512),\n\t\thashToHashId(crypto.SHA1),\n\t\thashToHashId(crypto.RIPEMD160),\n\t}\n\t// In the event that a recipient doesn't specify any supported ciphers\n\t// or hash functions, these are the ones that we assume that every\n\t// implementation supports.\n\tdefaultCiphers := candidateCiphers[len(candidateCiphers)-1:]\n\tdefaultHashes := candidateHashes[len(candidateHashes)-1:]\n\n\tencryptKeys := make([]Key, len(to))\n\tfor i := range to {\n\t\tvar ok bool\n\t\tencryptKeys[i], ok = to[i].encryptionKey(config.Now())\n\t\tif !ok {\n\t\t\treturn nil, errors.InvalidArgumentError(\"cannot encrypt a message to key id \" + strconv.FormatUint(to[i].PrimaryKey.KeyId, 16) + \" because it has no encryption keys\")\n\t\t}\n\n\t\tsig := to[i].primaryIdentity().SelfSignature\n\n\t\tpreferredSymmetric := sig.PreferredSymmetric\n\t\tif len(preferredSymmetric) == 0 {\n\t\t\tpreferredSymmetric = defaultCiphers\n\t\t}\n\t\tpreferredHashes := sig.PreferredHash\n\t\tif len(preferredHashes) == 0 {\n\t\t\tpreferredHashes = defaultHashes\n\t\t}\n\t\tcandidateCiphers = intersectPreferences(candidateCiphers, preferredSymmetric)\n\t\tcandidateHashes = intersectPreferences(candidateHashes, preferredHashes)\n\t}\n\n\tif len(candidateCiphers) == 0 || len(candidateHashes) == 0 {\n\t\treturn nil, errors.InvalidArgumentError(\"cannot encrypt because recipient set shares no common algorithms\")\n\t}\n\n\tcipher := packet.CipherFunction(candidateCiphers[0])\n\t// If the cipher specifed by config is a candidate, we'll use that.\n\tconfiguredCipher := config.Cipher()\n\tfor _, c := range candidateCiphers {\n\t\tcipherFunc := packet.CipherFunction(c)\n\t\tif cipherFunc == configuredCipher {\n\t\t\tcipher = cipherFunc\n\t\t\tbreak\n\t\t}\n\t}\n\n\tvar hash crypto.Hash\n\tfor _, hashId := range candidateHashes {\n\t\tif h, ok := s2k.HashIdToHash(hashId); ok && h.Available() {\n\t\t\thash = h\n\t\t\tbreak\n\t\t}\n\t}\n\n\t// If the hash specified by config is a candidate, we'll use that.\n\tif configuredHash := config.Hash(); configuredHash.Available() {\n\t\tfor _, hashId := range candidateHashes {\n\t\t\tif h, ok := s2k.HashIdToHash(hashId); ok && h == configuredHash {\n\t\t\t\thash = h\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\n\tif hash == 0 {\n\t\thashId := candidateHashes[0]\n\t\tname, ok := s2k.HashIdToString(hashId)\n\t\tif !ok {\n\t\t\tname = \"#\" + strconv.Itoa(int(hashId))\n\t\t}\n\t\treturn nil, errors.InvalidArgumentError(\"cannot encrypt because no candidate hash functions are compiled in. (Wanted \" + name + \" in this case.)\")\n\t}\n\n\tsymKey := make([]byte, cipher.KeySize())\n\tif _, err := io.ReadFull(config.Random(), symKey); err != nil {\n\t\treturn nil, err\n\t}\n\n\tfor _, key := range encryptKeys {\n\t\tif err := packet.SerializeEncryptedKey(ciphertext, key.PublicKey, cipher, symKey, config); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\tencryptedData, err := packet.SerializeSymmetricallyEncrypted(ciphertext, cipher, symKey, config)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tif signer != nil {\n\t\tops := &packet.OnePassSignature{\n\t\t\tSigType:    packet.SigTypeBinary,\n\t\t\tHash:       hash,\n\t\t\tPubKeyAlgo: signer.PubKeyAlgo,\n\t\t\tKeyId:      signer.KeyId,\n\t\t\tIsLast:     true,\n\t\t}\n\t\tif err := ops.Serialize(encryptedData); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\tif hints == nil {\n\t\thints = &FileHints{}\n\t}\n\n\tw := encryptedData\n\tif signer != nil {\n\t\t// If we need to write a signature packet after the literal\n\t\t// data then we need to stop literalData from closing\n\t\t// encryptedData.\n\t\tw = noOpCloser{encryptedData}\n\n\t}\n\tvar epochSeconds uint32\n\tif !hints.ModTime.IsZero() {\n\t\tepochSeconds = uint32(hints.ModTime.Unix())\n\t}\n\tliteralData, err := packet.SerializeLiteral(w, hints.IsBinary, hints.FileName, epochSeconds)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif signer != nil {\n\t\treturn signatureWriter{encryptedData, literalData, hash, hash.New(), signer, config}, nil\n\t}\n\treturn literalData, nil\n}\n\n// signatureWriter hashes the contents of a message while passing it along to\n// literalData. When closed, it closes literalData, writes a signature packet\n// to encryptedData and then also closes encryptedData.\ntype signatureWriter struct {\n\tencryptedData io.WriteCloser\n\tliteralData   io.WriteCloser\n\thashType      crypto.Hash\n\th             hash.Hash\n\tsigner        *packet.PrivateKey\n\tconfig        *packet.Config\n}\n\nfunc (s signatureWriter) Write(data []byte) (int, error) {\n\ts.h.Write(data)\n\treturn s.literalData.Write(data)\n}\n\nfunc (s signatureWriter) Close() error {\n\tsig := &packet.Signature{\n\t\tSigType:      packet.SigTypeBinary,\n\t\tPubKeyAlgo:   s.signer.PubKeyAlgo,\n\t\tHash:         s.hashType,\n\t\tCreationTime: s.config.Now(),\n\t\tIssuerKeyId:  &s.signer.KeyId,\n\t}\n\n\tif err := sig.Sign(s.h, s.signer, s.config); err != nil {\n\t\treturn err\n\t}\n\tif err := s.literalData.Close(); err != nil {\n\t\treturn err\n\t}\n\tif err := sig.Serialize(s.encryptedData); err != nil {\n\t\treturn err\n\t}\n\treturn s.encryptedData.Close()\n}\n\n// noOpCloser is like an ioutil.NopCloser, but for an io.Writer.\n// TODO: we have two of these in OpenPGP packages alone. This probably needs\n// to be promoted somewhere more common.\ntype noOpCloser struct {\n\tw io.Writer\n}\n\nfunc (c noOpCloser) Write(data []byte) (n int, err error) {\n\treturn c.w.Write(data)\n}\n\nfunc (c noOpCloser) Close() error {\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/golang.org/x/net/LICENSE",
    "content": "Copyright (c) 2009 The Go Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "vendor/golang.org/x/net/PATENTS",
    "content": "Additional IP Rights Grant (Patents)\n\n\"This implementation\" means the copyrightable works distributed by\nGoogle as part of the Go project.\n\nGoogle hereby grants to You a perpetual, worldwide, non-exclusive,\nno-charge, royalty-free, irrevocable (except as stated in this section)\npatent license to make, have made, use, offer to sell, sell, import,\ntransfer and otherwise run, modify and propagate the contents of this\nimplementation of Go, where such license applies only to those patent\nclaims, both currently owned or controlled by Google and acquired in\nthe future, licensable by Google that are necessarily infringed by this\nimplementation of Go.  This grant does not include claims that would be\ninfringed only as a consequence of further modification of this\nimplementation.  If you or your agent or exclusive licensee institute or\norder or agree to the institution of patent litigation against any\nentity (including a cross-claim or counterclaim in a lawsuit) alleging\nthat this implementation of Go or any code incorporated within this\nimplementation of Go constitutes direct or contributory patent\ninfringement, or inducement of patent infringement, then any patent\nrights granted to you under this License for this implementation of Go\nshall terminate as of the date such litigation is filed.\n"
  },
  {
    "path": "vendor/golang.org/x/net/context/context.go",
    "content": "// Copyright 2014 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package context defines the Context type, which carries deadlines,\n// cancelation signals, and other request-scoped values across API boundaries\n// and between processes.\n// As of Go 1.7 this package is available in the standard library under the\n// name context.  https://golang.org/pkg/context.\n//\n// Incoming requests to a server should create a Context, and outgoing calls to\n// servers should accept a Context. The chain of function calls between must\n// propagate the Context, optionally replacing it with a modified copy created\n// using WithDeadline, WithTimeout, WithCancel, or WithValue.\n//\n// Programs that use Contexts should follow these rules to keep interfaces\n// consistent across packages and enable static analysis tools to check context\n// propagation:\n//\n// Do not store Contexts inside a struct type; instead, pass a Context\n// explicitly to each function that needs it. The Context should be the first\n// parameter, typically named ctx:\n//\n// \tfunc DoSomething(ctx context.Context, arg Arg) error {\n// \t\t// ... use ctx ...\n// \t}\n//\n// Do not pass a nil Context, even if a function permits it. Pass context.TODO\n// if you are unsure about which Context to use.\n//\n// Use context Values only for request-scoped data that transits processes and\n// APIs, not for passing optional parameters to functions.\n//\n// The same Context may be passed to functions running in different goroutines;\n// Contexts are safe for simultaneous use by multiple goroutines.\n//\n// See http://blog.golang.org/context for example code for a server that uses\n// Contexts.\npackage context // import \"golang.org/x/net/context\"\n\n// Background returns a non-nil, empty Context. It is never canceled, has no\n// values, and has no deadline. It is typically used by the main function,\n// initialization, and tests, and as the top-level Context for incoming\n// requests.\nfunc Background() Context {\n\treturn background\n}\n\n// TODO returns a non-nil, empty Context. Code should use context.TODO when\n// it's unclear which Context to use or it is not yet available (because the\n// surrounding function has not yet been extended to accept a Context\n// parameter).  TODO is recognized by static analysis tools that determine\n// whether Contexts are propagated correctly in a program.\nfunc TODO() Context {\n\treturn todo\n}\n"
  },
  {
    "path": "vendor/golang.org/x/net/context/ctxhttp/ctxhttp.go",
    "content": "// Copyright 2016 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package ctxhttp provides helper functions for performing context-aware HTTP requests.\npackage ctxhttp // import \"golang.org/x/net/context/ctxhttp\"\n\nimport (\n\t\"context\"\n\t\"io\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"strings\"\n)\n\n// Do sends an HTTP request with the provided http.Client and returns\n// an HTTP response.\n//\n// If the client is nil, http.DefaultClient is used.\n//\n// The provided ctx must be non-nil. If it is canceled or times out,\n// ctx.Err() will be returned.\nfunc Do(ctx context.Context, client *http.Client, req *http.Request) (*http.Response, error) {\n\tif client == nil {\n\t\tclient = http.DefaultClient\n\t}\n\tresp, err := client.Do(req.WithContext(ctx))\n\t// If we got an error, and the context has been canceled,\n\t// the context's error is probably more useful.\n\tif err != nil {\n\t\tselect {\n\t\tcase <-ctx.Done():\n\t\t\terr = ctx.Err()\n\t\tdefault:\n\t\t}\n\t}\n\treturn resp, err\n}\n\n// Get issues a GET request via the Do function.\nfunc Get(ctx context.Context, client *http.Client, url string) (*http.Response, error) {\n\treq, err := http.NewRequest(\"GET\", url, nil)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn Do(ctx, client, req)\n}\n\n// Head issues a HEAD request via the Do function.\nfunc Head(ctx context.Context, client *http.Client, url string) (*http.Response, error) {\n\treq, err := http.NewRequest(\"HEAD\", url, nil)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn Do(ctx, client, req)\n}\n\n// Post issues a POST request via the Do function.\nfunc Post(ctx context.Context, client *http.Client, url string, bodyType string, body io.Reader) (*http.Response, error) {\n\treq, err := http.NewRequest(\"POST\", url, body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.Header.Set(\"Content-Type\", bodyType)\n\treturn Do(ctx, client, req)\n}\n\n// PostForm issues a POST request via the Do function.\nfunc PostForm(ctx context.Context, client *http.Client, url string, data url.Values) (*http.Response, error) {\n\treturn Post(ctx, client, url, \"application/x-www-form-urlencoded\", strings.NewReader(data.Encode()))\n}\n"
  },
  {
    "path": "vendor/golang.org/x/net/context/go17.go",
    "content": "// Copyright 2016 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build go1.7\n\npackage context\n\nimport (\n\t\"context\" // standard library's context, as of Go 1.7\n\t\"time\"\n)\n\nvar (\n\ttodo       = context.TODO()\n\tbackground = context.Background()\n)\n\n// Canceled is the error returned by Context.Err when the context is canceled.\nvar Canceled = context.Canceled\n\n// DeadlineExceeded is the error returned by Context.Err when the context's\n// deadline passes.\nvar DeadlineExceeded = context.DeadlineExceeded\n\n// WithCancel returns a copy of parent with a new Done channel. The returned\n// context's Done channel is closed when the returned cancel function is called\n// or when the parent context's Done channel is closed, whichever happens first.\n//\n// Canceling this context releases resources associated with it, so code should\n// call cancel as soon as the operations running in this Context complete.\nfunc WithCancel(parent Context) (ctx Context, cancel CancelFunc) {\n\tctx, f := context.WithCancel(parent)\n\treturn ctx, CancelFunc(f)\n}\n\n// WithDeadline returns a copy of the parent context with the deadline adjusted\n// to be no later than d. If the parent's deadline is already earlier than d,\n// WithDeadline(parent, d) is semantically equivalent to parent. The returned\n// context's Done channel is closed when the deadline expires, when the returned\n// cancel function is called, or when the parent context's Done channel is\n// closed, whichever happens first.\n//\n// Canceling this context releases resources associated with it, so code should\n// call cancel as soon as the operations running in this Context complete.\nfunc WithDeadline(parent Context, deadline time.Time) (Context, CancelFunc) {\n\tctx, f := context.WithDeadline(parent, deadline)\n\treturn ctx, CancelFunc(f)\n}\n\n// WithTimeout returns WithDeadline(parent, time.Now().Add(timeout)).\n//\n// Canceling this context releases resources associated with it, so code should\n// call cancel as soon as the operations running in this Context complete:\n//\n// \tfunc slowOperationWithTimeout(ctx context.Context) (Result, error) {\n// \t\tctx, cancel := context.WithTimeout(ctx, 100*time.Millisecond)\n// \t\tdefer cancel()  // releases resources if slowOperation completes before timeout elapses\n// \t\treturn slowOperation(ctx)\n// \t}\nfunc WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc) {\n\treturn WithDeadline(parent, time.Now().Add(timeout))\n}\n\n// WithValue returns a copy of parent in which the value associated with key is\n// val.\n//\n// Use context Values only for request-scoped data that transits processes and\n// APIs, not for passing optional parameters to functions.\nfunc WithValue(parent Context, key interface{}, val interface{}) Context {\n\treturn context.WithValue(parent, key, val)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/net/context/go19.go",
    "content": "// Copyright 2017 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build go1.9\n\npackage context\n\nimport \"context\" // standard library's context, as of Go 1.7\n\n// A Context carries a deadline, a cancelation signal, and other values across\n// API boundaries.\n//\n// Context's methods may be called by multiple goroutines simultaneously.\ntype Context = context.Context\n\n// A CancelFunc tells an operation to abandon its work.\n// A CancelFunc does not wait for the work to stop.\n// After the first call, subsequent calls to a CancelFunc do nothing.\ntype CancelFunc = context.CancelFunc\n"
  },
  {
    "path": "vendor/golang.org/x/net/context/pre_go17.go",
    "content": "// Copyright 2014 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build !go1.7\n\npackage context\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"sync\"\n\t\"time\"\n)\n\n// An emptyCtx is never canceled, has no values, and has no deadline. It is not\n// struct{}, since vars of this type must have distinct addresses.\ntype emptyCtx int\n\nfunc (*emptyCtx) Deadline() (deadline time.Time, ok bool) {\n\treturn\n}\n\nfunc (*emptyCtx) Done() <-chan struct{} {\n\treturn nil\n}\n\nfunc (*emptyCtx) Err() error {\n\treturn nil\n}\n\nfunc (*emptyCtx) Value(key interface{}) interface{} {\n\treturn nil\n}\n\nfunc (e *emptyCtx) String() string {\n\tswitch e {\n\tcase background:\n\t\treturn \"context.Background\"\n\tcase todo:\n\t\treturn \"context.TODO\"\n\t}\n\treturn \"unknown empty Context\"\n}\n\nvar (\n\tbackground = new(emptyCtx)\n\ttodo       = new(emptyCtx)\n)\n\n// Canceled is the error returned by Context.Err when the context is canceled.\nvar Canceled = errors.New(\"context canceled\")\n\n// DeadlineExceeded is the error returned by Context.Err when the context's\n// deadline passes.\nvar DeadlineExceeded = errors.New(\"context deadline exceeded\")\n\n// WithCancel returns a copy of parent with a new Done channel. The returned\n// context's Done channel is closed when the returned cancel function is called\n// or when the parent context's Done channel is closed, whichever happens first.\n//\n// Canceling this context releases resources associated with it, so code should\n// call cancel as soon as the operations running in this Context complete.\nfunc WithCancel(parent Context) (ctx Context, cancel CancelFunc) {\n\tc := newCancelCtx(parent)\n\tpropagateCancel(parent, c)\n\treturn c, func() { c.cancel(true, Canceled) }\n}\n\n// newCancelCtx returns an initialized cancelCtx.\nfunc newCancelCtx(parent Context) *cancelCtx {\n\treturn &cancelCtx{\n\t\tContext: parent,\n\t\tdone:    make(chan struct{}),\n\t}\n}\n\n// propagateCancel arranges for child to be canceled when parent is.\nfunc propagateCancel(parent Context, child canceler) {\n\tif parent.Done() == nil {\n\t\treturn // parent is never canceled\n\t}\n\tif p, ok := parentCancelCtx(parent); ok {\n\t\tp.mu.Lock()\n\t\tif p.err != nil {\n\t\t\t// parent has already been canceled\n\t\t\tchild.cancel(false, p.err)\n\t\t} else {\n\t\t\tif p.children == nil {\n\t\t\t\tp.children = make(map[canceler]bool)\n\t\t\t}\n\t\t\tp.children[child] = true\n\t\t}\n\t\tp.mu.Unlock()\n\t} else {\n\t\tgo func() {\n\t\t\tselect {\n\t\t\tcase <-parent.Done():\n\t\t\t\tchild.cancel(false, parent.Err())\n\t\t\tcase <-child.Done():\n\t\t\t}\n\t\t}()\n\t}\n}\n\n// parentCancelCtx follows a chain of parent references until it finds a\n// *cancelCtx. This function understands how each of the concrete types in this\n// package represents its parent.\nfunc parentCancelCtx(parent Context) (*cancelCtx, bool) {\n\tfor {\n\t\tswitch c := parent.(type) {\n\t\tcase *cancelCtx:\n\t\t\treturn c, true\n\t\tcase *timerCtx:\n\t\t\treturn c.cancelCtx, true\n\t\tcase *valueCtx:\n\t\t\tparent = c.Context\n\t\tdefault:\n\t\t\treturn nil, false\n\t\t}\n\t}\n}\n\n// removeChild removes a context from its parent.\nfunc removeChild(parent Context, child canceler) {\n\tp, ok := parentCancelCtx(parent)\n\tif !ok {\n\t\treturn\n\t}\n\tp.mu.Lock()\n\tif p.children != nil {\n\t\tdelete(p.children, child)\n\t}\n\tp.mu.Unlock()\n}\n\n// A canceler is a context type that can be canceled directly. The\n// implementations are *cancelCtx and *timerCtx.\ntype canceler interface {\n\tcancel(removeFromParent bool, err error)\n\tDone() <-chan struct{}\n}\n\n// A cancelCtx can be canceled. When canceled, it also cancels any children\n// that implement canceler.\ntype cancelCtx struct {\n\tContext\n\n\tdone chan struct{} // closed by the first cancel call.\n\n\tmu       sync.Mutex\n\tchildren map[canceler]bool // set to nil by the first cancel call\n\terr      error             // set to non-nil by the first cancel call\n}\n\nfunc (c *cancelCtx) Done() <-chan struct{} {\n\treturn c.done\n}\n\nfunc (c *cancelCtx) Err() error {\n\tc.mu.Lock()\n\tdefer c.mu.Unlock()\n\treturn c.err\n}\n\nfunc (c *cancelCtx) String() string {\n\treturn fmt.Sprintf(\"%v.WithCancel\", c.Context)\n}\n\n// cancel closes c.done, cancels each of c's children, and, if\n// removeFromParent is true, removes c from its parent's children.\nfunc (c *cancelCtx) cancel(removeFromParent bool, err error) {\n\tif err == nil {\n\t\tpanic(\"context: internal error: missing cancel error\")\n\t}\n\tc.mu.Lock()\n\tif c.err != nil {\n\t\tc.mu.Unlock()\n\t\treturn // already canceled\n\t}\n\tc.err = err\n\tclose(c.done)\n\tfor child := range c.children {\n\t\t// NOTE: acquiring the child's lock while holding parent's lock.\n\t\tchild.cancel(false, err)\n\t}\n\tc.children = nil\n\tc.mu.Unlock()\n\n\tif removeFromParent {\n\t\tremoveChild(c.Context, c)\n\t}\n}\n\n// WithDeadline returns a copy of the parent context with the deadline adjusted\n// to be no later than d. If the parent's deadline is already earlier than d,\n// WithDeadline(parent, d) is semantically equivalent to parent. The returned\n// context's Done channel is closed when the deadline expires, when the returned\n// cancel function is called, or when the parent context's Done channel is\n// closed, whichever happens first.\n//\n// Canceling this context releases resources associated with it, so code should\n// call cancel as soon as the operations running in this Context complete.\nfunc WithDeadline(parent Context, deadline time.Time) (Context, CancelFunc) {\n\tif cur, ok := parent.Deadline(); ok && cur.Before(deadline) {\n\t\t// The current deadline is already sooner than the new one.\n\t\treturn WithCancel(parent)\n\t}\n\tc := &timerCtx{\n\t\tcancelCtx: newCancelCtx(parent),\n\t\tdeadline:  deadline,\n\t}\n\tpropagateCancel(parent, c)\n\td := deadline.Sub(time.Now())\n\tif d <= 0 {\n\t\tc.cancel(true, DeadlineExceeded) // deadline has already passed\n\t\treturn c, func() { c.cancel(true, Canceled) }\n\t}\n\tc.mu.Lock()\n\tdefer c.mu.Unlock()\n\tif c.err == nil {\n\t\tc.timer = time.AfterFunc(d, func() {\n\t\t\tc.cancel(true, DeadlineExceeded)\n\t\t})\n\t}\n\treturn c, func() { c.cancel(true, Canceled) }\n}\n\n// A timerCtx carries a timer and a deadline. It embeds a cancelCtx to\n// implement Done and Err. It implements cancel by stopping its timer then\n// delegating to cancelCtx.cancel.\ntype timerCtx struct {\n\t*cancelCtx\n\ttimer *time.Timer // Under cancelCtx.mu.\n\n\tdeadline time.Time\n}\n\nfunc (c *timerCtx) Deadline() (deadline time.Time, ok bool) {\n\treturn c.deadline, true\n}\n\nfunc (c *timerCtx) String() string {\n\treturn fmt.Sprintf(\"%v.WithDeadline(%s [%s])\", c.cancelCtx.Context, c.deadline, c.deadline.Sub(time.Now()))\n}\n\nfunc (c *timerCtx) cancel(removeFromParent bool, err error) {\n\tc.cancelCtx.cancel(false, err)\n\tif removeFromParent {\n\t\t// Remove this timerCtx from its parent cancelCtx's children.\n\t\tremoveChild(c.cancelCtx.Context, c)\n\t}\n\tc.mu.Lock()\n\tif c.timer != nil {\n\t\tc.timer.Stop()\n\t\tc.timer = nil\n\t}\n\tc.mu.Unlock()\n}\n\n// WithTimeout returns WithDeadline(parent, time.Now().Add(timeout)).\n//\n// Canceling this context releases resources associated with it, so code should\n// call cancel as soon as the operations running in this Context complete:\n//\n// \tfunc slowOperationWithTimeout(ctx context.Context) (Result, error) {\n// \t\tctx, cancel := context.WithTimeout(ctx, 100*time.Millisecond)\n// \t\tdefer cancel()  // releases resources if slowOperation completes before timeout elapses\n// \t\treturn slowOperation(ctx)\n// \t}\nfunc WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc) {\n\treturn WithDeadline(parent, time.Now().Add(timeout))\n}\n\n// WithValue returns a copy of parent in which the value associated with key is\n// val.\n//\n// Use context Values only for request-scoped data that transits processes and\n// APIs, not for passing optional parameters to functions.\nfunc WithValue(parent Context, key interface{}, val interface{}) Context {\n\treturn &valueCtx{parent, key, val}\n}\n\n// A valueCtx carries a key-value pair. It implements Value for that key and\n// delegates all other calls to the embedded Context.\ntype valueCtx struct {\n\tContext\n\tkey, val interface{}\n}\n\nfunc (c *valueCtx) String() string {\n\treturn fmt.Sprintf(\"%v.WithValue(%#v, %#v)\", c.Context, c.key, c.val)\n}\n\nfunc (c *valueCtx) Value(key interface{}) interface{} {\n\tif c.key == key {\n\t\treturn c.val\n\t}\n\treturn c.Context.Value(key)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/net/context/pre_go19.go",
    "content": "// Copyright 2014 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build !go1.9\n\npackage context\n\nimport \"time\"\n\n// A Context carries a deadline, a cancelation signal, and other values across\n// API boundaries.\n//\n// Context's methods may be called by multiple goroutines simultaneously.\ntype Context interface {\n\t// Deadline returns the time when work done on behalf of this context\n\t// should be canceled. Deadline returns ok==false when no deadline is\n\t// set. Successive calls to Deadline return the same results.\n\tDeadline() (deadline time.Time, ok bool)\n\n\t// Done returns a channel that's closed when work done on behalf of this\n\t// context should be canceled. Done may return nil if this context can\n\t// never be canceled. Successive calls to Done return the same value.\n\t//\n\t// WithCancel arranges for Done to be closed when cancel is called;\n\t// WithDeadline arranges for Done to be closed when the deadline\n\t// expires; WithTimeout arranges for Done to be closed when the timeout\n\t// elapses.\n\t//\n\t// Done is provided for use in select statements:\n\t//\n\t//  // Stream generates values with DoSomething and sends them to out\n\t//  // until DoSomething returns an error or ctx.Done is closed.\n\t//  func Stream(ctx context.Context, out chan<- Value) error {\n\t//  \tfor {\n\t//  \t\tv, err := DoSomething(ctx)\n\t//  \t\tif err != nil {\n\t//  \t\t\treturn err\n\t//  \t\t}\n\t//  \t\tselect {\n\t//  \t\tcase <-ctx.Done():\n\t//  \t\t\treturn ctx.Err()\n\t//  \t\tcase out <- v:\n\t//  \t\t}\n\t//  \t}\n\t//  }\n\t//\n\t// See http://blog.golang.org/pipelines for more examples of how to use\n\t// a Done channel for cancelation.\n\tDone() <-chan struct{}\n\n\t// Err returns a non-nil error value after Done is closed. Err returns\n\t// Canceled if the context was canceled or DeadlineExceeded if the\n\t// context's deadline passed. No other values for Err are defined.\n\t// After Done is closed, successive calls to Err return the same value.\n\tErr() error\n\n\t// Value returns the value associated with this context for key, or nil\n\t// if no value is associated with key. Successive calls to Value with\n\t// the same key returns the same result.\n\t//\n\t// Use context values only for request-scoped data that transits\n\t// processes and API boundaries, not for passing optional parameters to\n\t// functions.\n\t//\n\t// A key identifies a specific value in a Context. Functions that wish\n\t// to store values in Context typically allocate a key in a global\n\t// variable then use that key as the argument to context.WithValue and\n\t// Context.Value. A key can be any type that supports equality;\n\t// packages should define keys as an unexported type to avoid\n\t// collisions.\n\t//\n\t// Packages that define a Context key should provide type-safe accessors\n\t// for the values stores using that key:\n\t//\n\t// \t// Package user defines a User type that's stored in Contexts.\n\t// \tpackage user\n\t//\n\t// \timport \"golang.org/x/net/context\"\n\t//\n\t// \t// User is the type of value stored in the Contexts.\n\t// \ttype User struct {...}\n\t//\n\t// \t// key is an unexported type for keys defined in this package.\n\t// \t// This prevents collisions with keys defined in other packages.\n\t// \ttype key int\n\t//\n\t// \t// userKey is the key for user.User values in Contexts. It is\n\t// \t// unexported; clients use user.NewContext and user.FromContext\n\t// \t// instead of using this key directly.\n\t// \tvar userKey key = 0\n\t//\n\t// \t// NewContext returns a new Context that carries value u.\n\t// \tfunc NewContext(ctx context.Context, u *User) context.Context {\n\t// \t\treturn context.WithValue(ctx, userKey, u)\n\t// \t}\n\t//\n\t// \t// FromContext returns the User value stored in ctx, if any.\n\t// \tfunc FromContext(ctx context.Context) (*User, bool) {\n\t// \t\tu, ok := ctx.Value(userKey).(*User)\n\t// \t\treturn u, ok\n\t// \t}\n\tValue(key interface{}) interface{}\n}\n\n// A CancelFunc tells an operation to abandon its work.\n// A CancelFunc does not wait for the work to stop.\n// After the first call, subsequent calls to a CancelFunc do nothing.\ntype CancelFunc func()\n"
  },
  {
    "path": "vendor/golang.org/x/net/http/httpguts/guts.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package httpguts provides functions implementing various details\n// of the HTTP specification.\n//\n// This package is shared by the standard library (which vendors it)\n// and x/net/http2. It comes with no API stability promise.\npackage httpguts\n\nimport (\n\t\"net/textproto\"\n\t\"strings\"\n)\n\n// ValidTrailerHeader reports whether name is a valid header field name to appear\n// in trailers.\n// See RFC 7230, Section 4.1.2\nfunc ValidTrailerHeader(name string) bool {\n\tname = textproto.CanonicalMIMEHeaderKey(name)\n\tif strings.HasPrefix(name, \"If-\") || badTrailer[name] {\n\t\treturn false\n\t}\n\treturn true\n}\n\nvar badTrailer = map[string]bool{\n\t\"Authorization\":       true,\n\t\"Cache-Control\":       true,\n\t\"Connection\":          true,\n\t\"Content-Encoding\":    true,\n\t\"Content-Length\":      true,\n\t\"Content-Range\":       true,\n\t\"Content-Type\":        true,\n\t\"Expect\":              true,\n\t\"Host\":                true,\n\t\"Keep-Alive\":          true,\n\t\"Max-Forwards\":        true,\n\t\"Pragma\":              true,\n\t\"Proxy-Authenticate\":  true,\n\t\"Proxy-Authorization\": true,\n\t\"Proxy-Connection\":    true,\n\t\"Range\":               true,\n\t\"Realm\":               true,\n\t\"Te\":                  true,\n\t\"Trailer\":             true,\n\t\"Transfer-Encoding\":   true,\n\t\"Www-Authenticate\":    true,\n}\n"
  },
  {
    "path": "vendor/golang.org/x/net/http/httpguts/httplex.go",
    "content": "// Copyright 2016 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage httpguts\n\nimport (\n\t\"net\"\n\t\"strings\"\n\t\"unicode/utf8\"\n\n\t\"golang.org/x/net/idna\"\n)\n\nvar isTokenTable = [127]bool{\n\t'!':  true,\n\t'#':  true,\n\t'$':  true,\n\t'%':  true,\n\t'&':  true,\n\t'\\'': true,\n\t'*':  true,\n\t'+':  true,\n\t'-':  true,\n\t'.':  true,\n\t'0':  true,\n\t'1':  true,\n\t'2':  true,\n\t'3':  true,\n\t'4':  true,\n\t'5':  true,\n\t'6':  true,\n\t'7':  true,\n\t'8':  true,\n\t'9':  true,\n\t'A':  true,\n\t'B':  true,\n\t'C':  true,\n\t'D':  true,\n\t'E':  true,\n\t'F':  true,\n\t'G':  true,\n\t'H':  true,\n\t'I':  true,\n\t'J':  true,\n\t'K':  true,\n\t'L':  true,\n\t'M':  true,\n\t'N':  true,\n\t'O':  true,\n\t'P':  true,\n\t'Q':  true,\n\t'R':  true,\n\t'S':  true,\n\t'T':  true,\n\t'U':  true,\n\t'W':  true,\n\t'V':  true,\n\t'X':  true,\n\t'Y':  true,\n\t'Z':  true,\n\t'^':  true,\n\t'_':  true,\n\t'`':  true,\n\t'a':  true,\n\t'b':  true,\n\t'c':  true,\n\t'd':  true,\n\t'e':  true,\n\t'f':  true,\n\t'g':  true,\n\t'h':  true,\n\t'i':  true,\n\t'j':  true,\n\t'k':  true,\n\t'l':  true,\n\t'm':  true,\n\t'n':  true,\n\t'o':  true,\n\t'p':  true,\n\t'q':  true,\n\t'r':  true,\n\t's':  true,\n\t't':  true,\n\t'u':  true,\n\t'v':  true,\n\t'w':  true,\n\t'x':  true,\n\t'y':  true,\n\t'z':  true,\n\t'|':  true,\n\t'~':  true,\n}\n\nfunc IsTokenRune(r rune) bool {\n\ti := int(r)\n\treturn i < len(isTokenTable) && isTokenTable[i]\n}\n\nfunc isNotToken(r rune) bool {\n\treturn !IsTokenRune(r)\n}\n\n// HeaderValuesContainsToken reports whether any string in values\n// contains the provided token, ASCII case-insensitively.\nfunc HeaderValuesContainsToken(values []string, token string) bool {\n\tfor _, v := range values {\n\t\tif headerValueContainsToken(v, token) {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// isOWS reports whether b is an optional whitespace byte, as defined\n// by RFC 7230 section 3.2.3.\nfunc isOWS(b byte) bool { return b == ' ' || b == '\\t' }\n\n// trimOWS returns x with all optional whitespace removes from the\n// beginning and end.\nfunc trimOWS(x string) string {\n\t// TODO: consider using strings.Trim(x, \" \\t\") instead,\n\t// if and when it's fast enough. See issue 10292.\n\t// But this ASCII-only code will probably always beat UTF-8\n\t// aware code.\n\tfor len(x) > 0 && isOWS(x[0]) {\n\t\tx = x[1:]\n\t}\n\tfor len(x) > 0 && isOWS(x[len(x)-1]) {\n\t\tx = x[:len(x)-1]\n\t}\n\treturn x\n}\n\n// headerValueContainsToken reports whether v (assumed to be a\n// 0#element, in the ABNF extension described in RFC 7230 section 7)\n// contains token amongst its comma-separated tokens, ASCII\n// case-insensitively.\nfunc headerValueContainsToken(v string, token string) bool {\n\tv = trimOWS(v)\n\tif comma := strings.IndexByte(v, ','); comma != -1 {\n\t\treturn tokenEqual(trimOWS(v[:comma]), token) || headerValueContainsToken(v[comma+1:], token)\n\t}\n\treturn tokenEqual(v, token)\n}\n\n// lowerASCII returns the ASCII lowercase version of b.\nfunc lowerASCII(b byte) byte {\n\tif 'A' <= b && b <= 'Z' {\n\t\treturn b + ('a' - 'A')\n\t}\n\treturn b\n}\n\n// tokenEqual reports whether t1 and t2 are equal, ASCII case-insensitively.\nfunc tokenEqual(t1, t2 string) bool {\n\tif len(t1) != len(t2) {\n\t\treturn false\n\t}\n\tfor i, b := range t1 {\n\t\tif b >= utf8.RuneSelf {\n\t\t\t// No UTF-8 or non-ASCII allowed in tokens.\n\t\t\treturn false\n\t\t}\n\t\tif lowerASCII(byte(b)) != lowerASCII(t2[i]) {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\n// isLWS reports whether b is linear white space, according\n// to http://www.w3.org/Protocols/rfc2616/rfc2616-sec2.html#sec2.2\n//      LWS            = [CRLF] 1*( SP | HT )\nfunc isLWS(b byte) bool { return b == ' ' || b == '\\t' }\n\n// isCTL reports whether b is a control byte, according\n// to http://www.w3.org/Protocols/rfc2616/rfc2616-sec2.html#sec2.2\n//      CTL            = <any US-ASCII control character\n//                       (octets 0 - 31) and DEL (127)>\nfunc isCTL(b byte) bool {\n\tconst del = 0x7f // a CTL\n\treturn b < ' ' || b == del\n}\n\n// ValidHeaderFieldName reports whether v is a valid HTTP/1.x header name.\n// HTTP/2 imposes the additional restriction that uppercase ASCII\n// letters are not allowed.\n//\n//  RFC 7230 says:\n//   header-field   = field-name \":\" OWS field-value OWS\n//   field-name     = token\n//   token          = 1*tchar\n//   tchar = \"!\" / \"#\" / \"$\" / \"%\" / \"&\" / \"'\" / \"*\" / \"+\" / \"-\" / \".\" /\n//           \"^\" / \"_\" / \"`\" / \"|\" / \"~\" / DIGIT / ALPHA\nfunc ValidHeaderFieldName(v string) bool {\n\tif len(v) == 0 {\n\t\treturn false\n\t}\n\tfor _, r := range v {\n\t\tif !IsTokenRune(r) {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\n// ValidHostHeader reports whether h is a valid host header.\nfunc ValidHostHeader(h string) bool {\n\t// The latest spec is actually this:\n\t//\n\t// http://tools.ietf.org/html/rfc7230#section-5.4\n\t//     Host = uri-host [ \":\" port ]\n\t//\n\t// Where uri-host is:\n\t//     http://tools.ietf.org/html/rfc3986#section-3.2.2\n\t//\n\t// But we're going to be much more lenient for now and just\n\t// search for any byte that's not a valid byte in any of those\n\t// expressions.\n\tfor i := 0; i < len(h); i++ {\n\t\tif !validHostByte[h[i]] {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\n// See the validHostHeader comment.\nvar validHostByte = [256]bool{\n\t'0': true, '1': true, '2': true, '3': true, '4': true, '5': true, '6': true, '7': true,\n\t'8': true, '9': true,\n\n\t'a': true, 'b': true, 'c': true, 'd': true, 'e': true, 'f': true, 'g': true, 'h': true,\n\t'i': true, 'j': true, 'k': true, 'l': true, 'm': true, 'n': true, 'o': true, 'p': true,\n\t'q': true, 'r': true, 's': true, 't': true, 'u': true, 'v': true, 'w': true, 'x': true,\n\t'y': true, 'z': true,\n\n\t'A': true, 'B': true, 'C': true, 'D': true, 'E': true, 'F': true, 'G': true, 'H': true,\n\t'I': true, 'J': true, 'K': true, 'L': true, 'M': true, 'N': true, 'O': true, 'P': true,\n\t'Q': true, 'R': true, 'S': true, 'T': true, 'U': true, 'V': true, 'W': true, 'X': true,\n\t'Y': true, 'Z': true,\n\n\t'!':  true, // sub-delims\n\t'$':  true, // sub-delims\n\t'%':  true, // pct-encoded (and used in IPv6 zones)\n\t'&':  true, // sub-delims\n\t'(':  true, // sub-delims\n\t')':  true, // sub-delims\n\t'*':  true, // sub-delims\n\t'+':  true, // sub-delims\n\t',':  true, // sub-delims\n\t'-':  true, // unreserved\n\t'.':  true, // unreserved\n\t':':  true, // IPv6address + Host expression's optional port\n\t';':  true, // sub-delims\n\t'=':  true, // sub-delims\n\t'[':  true,\n\t'\\'': true, // sub-delims\n\t']':  true,\n\t'_':  true, // unreserved\n\t'~':  true, // unreserved\n}\n\n// ValidHeaderFieldValue reports whether v is a valid \"field-value\" according to\n// http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2 :\n//\n//        message-header = field-name \":\" [ field-value ]\n//        field-value    = *( field-content | LWS )\n//        field-content  = <the OCTETs making up the field-value\n//                         and consisting of either *TEXT or combinations\n//                         of token, separators, and quoted-string>\n//\n// http://www.w3.org/Protocols/rfc2616/rfc2616-sec2.html#sec2.2 :\n//\n//        TEXT           = <any OCTET except CTLs,\n//                          but including LWS>\n//        LWS            = [CRLF] 1*( SP | HT )\n//        CTL            = <any US-ASCII control character\n//                         (octets 0 - 31) and DEL (127)>\n//\n// RFC 7230 says:\n//  field-value    = *( field-content / obs-fold )\n//  obj-fold       =  N/A to http2, and deprecated\n//  field-content  = field-vchar [ 1*( SP / HTAB ) field-vchar ]\n//  field-vchar    = VCHAR / obs-text\n//  obs-text       = %x80-FF\n//  VCHAR          = \"any visible [USASCII] character\"\n//\n// http2 further says: \"Similarly, HTTP/2 allows header field values\n// that are not valid. While most of the values that can be encoded\n// will not alter header field parsing, carriage return (CR, ASCII\n// 0xd), line feed (LF, ASCII 0xa), and the zero character (NUL, ASCII\n// 0x0) might be exploited by an attacker if they are translated\n// verbatim. Any request or response that contains a character not\n// permitted in a header field value MUST be treated as malformed\n// (Section 8.1.2.6). Valid characters are defined by the\n// field-content ABNF rule in Section 3.2 of [RFC7230].\"\n//\n// This function does not (yet?) properly handle the rejection of\n// strings that begin or end with SP or HTAB.\nfunc ValidHeaderFieldValue(v string) bool {\n\tfor i := 0; i < len(v); i++ {\n\t\tb := v[i]\n\t\tif isCTL(b) && !isLWS(b) {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\nfunc isASCII(s string) bool {\n\tfor i := 0; i < len(s); i++ {\n\t\tif s[i] >= utf8.RuneSelf {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\n// PunycodeHostPort returns the IDNA Punycode version\n// of the provided \"host\" or \"host:port\" string.\nfunc PunycodeHostPort(v string) (string, error) {\n\tif isASCII(v) {\n\t\treturn v, nil\n\t}\n\n\thost, port, err := net.SplitHostPort(v)\n\tif err != nil {\n\t\t// The input 'v' argument was just a \"host\" argument,\n\t\t// without a port. This error should not be returned\n\t\t// to the caller.\n\t\thost = v\n\t\tport = \"\"\n\t}\n\thost, err = idna.ToASCII(host)\n\tif err != nil {\n\t\t// Non-UTF-8? Not representable in Punycode, in any\n\t\t// case.\n\t\treturn \"\", err\n\t}\n\tif port == \"\" {\n\t\treturn host, nil\n\t}\n\treturn net.JoinHostPort(host, port), nil\n}\n"
  },
  {
    "path": "vendor/golang.org/x/net/http2/ciphers.go",
    "content": "// Copyright 2017 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage http2\n\n// A list of the possible cipher suite ids. Taken from\n// https://www.iana.org/assignments/tls-parameters/tls-parameters.txt\n\nconst (\n\tcipher_TLS_NULL_WITH_NULL_NULL               uint16 = 0x0000\n\tcipher_TLS_RSA_WITH_NULL_MD5                 uint16 = 0x0001\n\tcipher_TLS_RSA_WITH_NULL_SHA                 uint16 = 0x0002\n\tcipher_TLS_RSA_EXPORT_WITH_RC4_40_MD5        uint16 = 0x0003\n\tcipher_TLS_RSA_WITH_RC4_128_MD5              uint16 = 0x0004\n\tcipher_TLS_RSA_WITH_RC4_128_SHA              uint16 = 0x0005\n\tcipher_TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5    uint16 = 0x0006\n\tcipher_TLS_RSA_WITH_IDEA_CBC_SHA             uint16 = 0x0007\n\tcipher_TLS_RSA_EXPORT_WITH_DES40_CBC_SHA     uint16 = 0x0008\n\tcipher_TLS_RSA_WITH_DES_CBC_SHA              uint16 = 0x0009\n\tcipher_TLS_RSA_WITH_3DES_EDE_CBC_SHA         uint16 = 0x000A\n\tcipher_TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA  uint16 = 0x000B\n\tcipher_TLS_DH_DSS_WITH_DES_CBC_SHA           uint16 = 0x000C\n\tcipher_TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA      uint16 = 0x000D\n\tcipher_TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA  uint16 = 0x000E\n\tcipher_TLS_DH_RSA_WITH_DES_CBC_SHA           uint16 = 0x000F\n\tcipher_TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA      uint16 = 0x0010\n\tcipher_TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA uint16 = 0x0011\n\tcipher_TLS_DHE_DSS_WITH_DES_CBC_SHA          uint16 = 0x0012\n\tcipher_TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA     uint16 = 0x0013\n\tcipher_TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA uint16 = 0x0014\n\tcipher_TLS_DHE_RSA_WITH_DES_CBC_SHA          uint16 = 0x0015\n\tcipher_TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA     uint16 = 0x0016\n\tcipher_TLS_DH_anon_EXPORT_WITH_RC4_40_MD5    uint16 = 0x0017\n\tcipher_TLS_DH_anon_WITH_RC4_128_MD5          uint16 = 0x0018\n\tcipher_TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA uint16 = 0x0019\n\tcipher_TLS_DH_anon_WITH_DES_CBC_SHA          uint16 = 0x001A\n\tcipher_TLS_DH_anon_WITH_3DES_EDE_CBC_SHA     uint16 = 0x001B\n\t// Reserved uint16 =  0x001C-1D\n\tcipher_TLS_KRB5_WITH_DES_CBC_SHA             uint16 = 0x001E\n\tcipher_TLS_KRB5_WITH_3DES_EDE_CBC_SHA        uint16 = 0x001F\n\tcipher_TLS_KRB5_WITH_RC4_128_SHA             uint16 = 0x0020\n\tcipher_TLS_KRB5_WITH_IDEA_CBC_SHA            uint16 = 0x0021\n\tcipher_TLS_KRB5_WITH_DES_CBC_MD5             uint16 = 0x0022\n\tcipher_TLS_KRB5_WITH_3DES_EDE_CBC_MD5        uint16 = 0x0023\n\tcipher_TLS_KRB5_WITH_RC4_128_MD5             uint16 = 0x0024\n\tcipher_TLS_KRB5_WITH_IDEA_CBC_MD5            uint16 = 0x0025\n\tcipher_TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA   uint16 = 0x0026\n\tcipher_TLS_KRB5_EXPORT_WITH_RC2_CBC_40_SHA   uint16 = 0x0027\n\tcipher_TLS_KRB5_EXPORT_WITH_RC4_40_SHA       uint16 = 0x0028\n\tcipher_TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5   uint16 = 0x0029\n\tcipher_TLS_KRB5_EXPORT_WITH_RC2_CBC_40_MD5   uint16 = 0x002A\n\tcipher_TLS_KRB5_EXPORT_WITH_RC4_40_MD5       uint16 = 0x002B\n\tcipher_TLS_PSK_WITH_NULL_SHA                 uint16 = 0x002C\n\tcipher_TLS_DHE_PSK_WITH_NULL_SHA             uint16 = 0x002D\n\tcipher_TLS_RSA_PSK_WITH_NULL_SHA             uint16 = 0x002E\n\tcipher_TLS_RSA_WITH_AES_128_CBC_SHA          uint16 = 0x002F\n\tcipher_TLS_DH_DSS_WITH_AES_128_CBC_SHA       uint16 = 0x0030\n\tcipher_TLS_DH_RSA_WITH_AES_128_CBC_SHA       uint16 = 0x0031\n\tcipher_TLS_DHE_DSS_WITH_AES_128_CBC_SHA      uint16 = 0x0032\n\tcipher_TLS_DHE_RSA_WITH_AES_128_CBC_SHA      uint16 = 0x0033\n\tcipher_TLS_DH_anon_WITH_AES_128_CBC_SHA      uint16 = 0x0034\n\tcipher_TLS_RSA_WITH_AES_256_CBC_SHA          uint16 = 0x0035\n\tcipher_TLS_DH_DSS_WITH_AES_256_CBC_SHA       uint16 = 0x0036\n\tcipher_TLS_DH_RSA_WITH_AES_256_CBC_SHA       uint16 = 0x0037\n\tcipher_TLS_DHE_DSS_WITH_AES_256_CBC_SHA      uint16 = 0x0038\n\tcipher_TLS_DHE_RSA_WITH_AES_256_CBC_SHA      uint16 = 0x0039\n\tcipher_TLS_DH_anon_WITH_AES_256_CBC_SHA      uint16 = 0x003A\n\tcipher_TLS_RSA_WITH_NULL_SHA256              uint16 = 0x003B\n\tcipher_TLS_RSA_WITH_AES_128_CBC_SHA256       uint16 = 0x003C\n\tcipher_TLS_RSA_WITH_AES_256_CBC_SHA256       uint16 = 0x003D\n\tcipher_TLS_DH_DSS_WITH_AES_128_CBC_SHA256    uint16 = 0x003E\n\tcipher_TLS_DH_RSA_WITH_AES_128_CBC_SHA256    uint16 = 0x003F\n\tcipher_TLS_DHE_DSS_WITH_AES_128_CBC_SHA256   uint16 = 0x0040\n\tcipher_TLS_RSA_WITH_CAMELLIA_128_CBC_SHA     uint16 = 0x0041\n\tcipher_TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA  uint16 = 0x0042\n\tcipher_TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA  uint16 = 0x0043\n\tcipher_TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA uint16 = 0x0044\n\tcipher_TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA uint16 = 0x0045\n\tcipher_TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA uint16 = 0x0046\n\t// Reserved uint16 =  0x0047-4F\n\t// Reserved uint16 =  0x0050-58\n\t// Reserved uint16 =  0x0059-5C\n\t// Unassigned uint16 =  0x005D-5F\n\t// Reserved uint16 =  0x0060-66\n\tcipher_TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 uint16 = 0x0067\n\tcipher_TLS_DH_DSS_WITH_AES_256_CBC_SHA256  uint16 = 0x0068\n\tcipher_TLS_DH_RSA_WITH_AES_256_CBC_SHA256  uint16 = 0x0069\n\tcipher_TLS_DHE_DSS_WITH_AES_256_CBC_SHA256 uint16 = 0x006A\n\tcipher_TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 uint16 = 0x006B\n\tcipher_TLS_DH_anon_WITH_AES_128_CBC_SHA256 uint16 = 0x006C\n\tcipher_TLS_DH_anon_WITH_AES_256_CBC_SHA256 uint16 = 0x006D\n\t// Unassigned uint16 =  0x006E-83\n\tcipher_TLS_RSA_WITH_CAMELLIA_256_CBC_SHA        uint16 = 0x0084\n\tcipher_TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA     uint16 = 0x0085\n\tcipher_TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA     uint16 = 0x0086\n\tcipher_TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA    uint16 = 0x0087\n\tcipher_TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA    uint16 = 0x0088\n\tcipher_TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA    uint16 = 0x0089\n\tcipher_TLS_PSK_WITH_RC4_128_SHA                 uint16 = 0x008A\n\tcipher_TLS_PSK_WITH_3DES_EDE_CBC_SHA            uint16 = 0x008B\n\tcipher_TLS_PSK_WITH_AES_128_CBC_SHA             uint16 = 0x008C\n\tcipher_TLS_PSK_WITH_AES_256_CBC_SHA             uint16 = 0x008D\n\tcipher_TLS_DHE_PSK_WITH_RC4_128_SHA             uint16 = 0x008E\n\tcipher_TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA        uint16 = 0x008F\n\tcipher_TLS_DHE_PSK_WITH_AES_128_CBC_SHA         uint16 = 0x0090\n\tcipher_TLS_DHE_PSK_WITH_AES_256_CBC_SHA         uint16 = 0x0091\n\tcipher_TLS_RSA_PSK_WITH_RC4_128_SHA             uint16 = 0x0092\n\tcipher_TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA        uint16 = 0x0093\n\tcipher_TLS_RSA_PSK_WITH_AES_128_CBC_SHA         uint16 = 0x0094\n\tcipher_TLS_RSA_PSK_WITH_AES_256_CBC_SHA         uint16 = 0x0095\n\tcipher_TLS_RSA_WITH_SEED_CBC_SHA                uint16 = 0x0096\n\tcipher_TLS_DH_DSS_WITH_SEED_CBC_SHA             uint16 = 0x0097\n\tcipher_TLS_DH_RSA_WITH_SEED_CBC_SHA             uint16 = 0x0098\n\tcipher_TLS_DHE_DSS_WITH_SEED_CBC_SHA            uint16 = 0x0099\n\tcipher_TLS_DHE_RSA_WITH_SEED_CBC_SHA            uint16 = 0x009A\n\tcipher_TLS_DH_anon_WITH_SEED_CBC_SHA            uint16 = 0x009B\n\tcipher_TLS_RSA_WITH_AES_128_GCM_SHA256          uint16 = 0x009C\n\tcipher_TLS_RSA_WITH_AES_256_GCM_SHA384          uint16 = 0x009D\n\tcipher_TLS_DHE_RSA_WITH_AES_128_GCM_SHA256      uint16 = 0x009E\n\tcipher_TLS_DHE_RSA_WITH_AES_256_GCM_SHA384      uint16 = 0x009F\n\tcipher_TLS_DH_RSA_WITH_AES_128_GCM_SHA256       uint16 = 0x00A0\n\tcipher_TLS_DH_RSA_WITH_AES_256_GCM_SHA384       uint16 = 0x00A1\n\tcipher_TLS_DHE_DSS_WITH_AES_128_GCM_SHA256      uint16 = 0x00A2\n\tcipher_TLS_DHE_DSS_WITH_AES_256_GCM_SHA384      uint16 = 0x00A3\n\tcipher_TLS_DH_DSS_WITH_AES_128_GCM_SHA256       uint16 = 0x00A4\n\tcipher_TLS_DH_DSS_WITH_AES_256_GCM_SHA384       uint16 = 0x00A5\n\tcipher_TLS_DH_anon_WITH_AES_128_GCM_SHA256      uint16 = 0x00A6\n\tcipher_TLS_DH_anon_WITH_AES_256_GCM_SHA384      uint16 = 0x00A7\n\tcipher_TLS_PSK_WITH_AES_128_GCM_SHA256          uint16 = 0x00A8\n\tcipher_TLS_PSK_WITH_AES_256_GCM_SHA384          uint16 = 0x00A9\n\tcipher_TLS_DHE_PSK_WITH_AES_128_GCM_SHA256      uint16 = 0x00AA\n\tcipher_TLS_DHE_PSK_WITH_AES_256_GCM_SHA384      uint16 = 0x00AB\n\tcipher_TLS_RSA_PSK_WITH_AES_128_GCM_SHA256      uint16 = 0x00AC\n\tcipher_TLS_RSA_PSK_WITH_AES_256_GCM_SHA384      uint16 = 0x00AD\n\tcipher_TLS_PSK_WITH_AES_128_CBC_SHA256          uint16 = 0x00AE\n\tcipher_TLS_PSK_WITH_AES_256_CBC_SHA384          uint16 = 0x00AF\n\tcipher_TLS_PSK_WITH_NULL_SHA256                 uint16 = 0x00B0\n\tcipher_TLS_PSK_WITH_NULL_SHA384                 uint16 = 0x00B1\n\tcipher_TLS_DHE_PSK_WITH_AES_128_CBC_SHA256      uint16 = 0x00B2\n\tcipher_TLS_DHE_PSK_WITH_AES_256_CBC_SHA384      uint16 = 0x00B3\n\tcipher_TLS_DHE_PSK_WITH_NULL_SHA256             uint16 = 0x00B4\n\tcipher_TLS_DHE_PSK_WITH_NULL_SHA384             uint16 = 0x00B5\n\tcipher_TLS_RSA_PSK_WITH_AES_128_CBC_SHA256      uint16 = 0x00B6\n\tcipher_TLS_RSA_PSK_WITH_AES_256_CBC_SHA384      uint16 = 0x00B7\n\tcipher_TLS_RSA_PSK_WITH_NULL_SHA256             uint16 = 0x00B8\n\tcipher_TLS_RSA_PSK_WITH_NULL_SHA384             uint16 = 0x00B9\n\tcipher_TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256     uint16 = 0x00BA\n\tcipher_TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256  uint16 = 0x00BB\n\tcipher_TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256  uint16 = 0x00BC\n\tcipher_TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256 uint16 = 0x00BD\n\tcipher_TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 uint16 = 0x00BE\n\tcipher_TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA256 uint16 = 0x00BF\n\tcipher_TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256     uint16 = 0x00C0\n\tcipher_TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256  uint16 = 0x00C1\n\tcipher_TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256  uint16 = 0x00C2\n\tcipher_TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256 uint16 = 0x00C3\n\tcipher_TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 uint16 = 0x00C4\n\tcipher_TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA256 uint16 = 0x00C5\n\t// Unassigned uint16 =  0x00C6-FE\n\tcipher_TLS_EMPTY_RENEGOTIATION_INFO_SCSV uint16 = 0x00FF\n\t// Unassigned uint16 =  0x01-55,*\n\tcipher_TLS_FALLBACK_SCSV uint16 = 0x5600\n\t// Unassigned                                   uint16 = 0x5601 - 0xC000\n\tcipher_TLS_ECDH_ECDSA_WITH_NULL_SHA                 uint16 = 0xC001\n\tcipher_TLS_ECDH_ECDSA_WITH_RC4_128_SHA              uint16 = 0xC002\n\tcipher_TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA         uint16 = 0xC003\n\tcipher_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA          uint16 = 0xC004\n\tcipher_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA          uint16 = 0xC005\n\tcipher_TLS_ECDHE_ECDSA_WITH_NULL_SHA                uint16 = 0xC006\n\tcipher_TLS_ECDHE_ECDSA_WITH_RC4_128_SHA             uint16 = 0xC007\n\tcipher_TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA        uint16 = 0xC008\n\tcipher_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA         uint16 = 0xC009\n\tcipher_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA         uint16 = 0xC00A\n\tcipher_TLS_ECDH_RSA_WITH_NULL_SHA                   uint16 = 0xC00B\n\tcipher_TLS_ECDH_RSA_WITH_RC4_128_SHA                uint16 = 0xC00C\n\tcipher_TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA           uint16 = 0xC00D\n\tcipher_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA            uint16 = 0xC00E\n\tcipher_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA            uint16 = 0xC00F\n\tcipher_TLS_ECDHE_RSA_WITH_NULL_SHA                  uint16 = 0xC010\n\tcipher_TLS_ECDHE_RSA_WITH_RC4_128_SHA               uint16 = 0xC011\n\tcipher_TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA          uint16 = 0xC012\n\tcipher_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA           uint16 = 0xC013\n\tcipher_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA           uint16 = 0xC014\n\tcipher_TLS_ECDH_anon_WITH_NULL_SHA                  uint16 = 0xC015\n\tcipher_TLS_ECDH_anon_WITH_RC4_128_SHA               uint16 = 0xC016\n\tcipher_TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA          uint16 = 0xC017\n\tcipher_TLS_ECDH_anon_WITH_AES_128_CBC_SHA           uint16 = 0xC018\n\tcipher_TLS_ECDH_anon_WITH_AES_256_CBC_SHA           uint16 = 0xC019\n\tcipher_TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA            uint16 = 0xC01A\n\tcipher_TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA        uint16 = 0xC01B\n\tcipher_TLS_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA        uint16 = 0xC01C\n\tcipher_TLS_SRP_SHA_WITH_AES_128_CBC_SHA             uint16 = 0xC01D\n\tcipher_TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA         uint16 = 0xC01E\n\tcipher_TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA         uint16 = 0xC01F\n\tcipher_TLS_SRP_SHA_WITH_AES_256_CBC_SHA             uint16 = 0xC020\n\tcipher_TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA         uint16 = 0xC021\n\tcipher_TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA         uint16 = 0xC022\n\tcipher_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256      uint16 = 0xC023\n\tcipher_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384      uint16 = 0xC024\n\tcipher_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256       uint16 = 0xC025\n\tcipher_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384       uint16 = 0xC026\n\tcipher_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256        uint16 = 0xC027\n\tcipher_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384        uint16 = 0xC028\n\tcipher_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256         uint16 = 0xC029\n\tcipher_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384         uint16 = 0xC02A\n\tcipher_TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256      uint16 = 0xC02B\n\tcipher_TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384      uint16 = 0xC02C\n\tcipher_TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256       uint16 = 0xC02D\n\tcipher_TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384       uint16 = 0xC02E\n\tcipher_TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256        uint16 = 0xC02F\n\tcipher_TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384        uint16 = 0xC030\n\tcipher_TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256         uint16 = 0xC031\n\tcipher_TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384         uint16 = 0xC032\n\tcipher_TLS_ECDHE_PSK_WITH_RC4_128_SHA               uint16 = 0xC033\n\tcipher_TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA          uint16 = 0xC034\n\tcipher_TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA           uint16 = 0xC035\n\tcipher_TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA           uint16 = 0xC036\n\tcipher_TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256        uint16 = 0xC037\n\tcipher_TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384        uint16 = 0xC038\n\tcipher_TLS_ECDHE_PSK_WITH_NULL_SHA                  uint16 = 0xC039\n\tcipher_TLS_ECDHE_PSK_WITH_NULL_SHA256               uint16 = 0xC03A\n\tcipher_TLS_ECDHE_PSK_WITH_NULL_SHA384               uint16 = 0xC03B\n\tcipher_TLS_RSA_WITH_ARIA_128_CBC_SHA256             uint16 = 0xC03C\n\tcipher_TLS_RSA_WITH_ARIA_256_CBC_SHA384             uint16 = 0xC03D\n\tcipher_TLS_DH_DSS_WITH_ARIA_128_CBC_SHA256          uint16 = 0xC03E\n\tcipher_TLS_DH_DSS_WITH_ARIA_256_CBC_SHA384          uint16 = 0xC03F\n\tcipher_TLS_DH_RSA_WITH_ARIA_128_CBC_SHA256          uint16 = 0xC040\n\tcipher_TLS_DH_RSA_WITH_ARIA_256_CBC_SHA384          uint16 = 0xC041\n\tcipher_TLS_DHE_DSS_WITH_ARIA_128_CBC_SHA256         uint16 = 0xC042\n\tcipher_TLS_DHE_DSS_WITH_ARIA_256_CBC_SHA384         uint16 = 0xC043\n\tcipher_TLS_DHE_RSA_WITH_ARIA_128_CBC_SHA256         uint16 = 0xC044\n\tcipher_TLS_DHE_RSA_WITH_ARIA_256_CBC_SHA384         uint16 = 0xC045\n\tcipher_TLS_DH_anon_WITH_ARIA_128_CBC_SHA256         uint16 = 0xC046\n\tcipher_TLS_DH_anon_WITH_ARIA_256_CBC_SHA384         uint16 = 0xC047\n\tcipher_TLS_ECDHE_ECDSA_WITH_ARIA_128_CBC_SHA256     uint16 = 0xC048\n\tcipher_TLS_ECDHE_ECDSA_WITH_ARIA_256_CBC_SHA384     uint16 = 0xC049\n\tcipher_TLS_ECDH_ECDSA_WITH_ARIA_128_CBC_SHA256      uint16 = 0xC04A\n\tcipher_TLS_ECDH_ECDSA_WITH_ARIA_256_CBC_SHA384      uint16 = 0xC04B\n\tcipher_TLS_ECDHE_RSA_WITH_ARIA_128_CBC_SHA256       uint16 = 0xC04C\n\tcipher_TLS_ECDHE_RSA_WITH_ARIA_256_CBC_SHA384       uint16 = 0xC04D\n\tcipher_TLS_ECDH_RSA_WITH_ARIA_128_CBC_SHA256        uint16 = 0xC04E\n\tcipher_TLS_ECDH_RSA_WITH_ARIA_256_CBC_SHA384        uint16 = 0xC04F\n\tcipher_TLS_RSA_WITH_ARIA_128_GCM_SHA256             uint16 = 0xC050\n\tcipher_TLS_RSA_WITH_ARIA_256_GCM_SHA384             uint16 = 0xC051\n\tcipher_TLS_DHE_RSA_WITH_ARIA_128_GCM_SHA256         uint16 = 0xC052\n\tcipher_TLS_DHE_RSA_WITH_ARIA_256_GCM_SHA384         uint16 = 0xC053\n\tcipher_TLS_DH_RSA_WITH_ARIA_128_GCM_SHA256          uint16 = 0xC054\n\tcipher_TLS_DH_RSA_WITH_ARIA_256_GCM_SHA384          uint16 = 0xC055\n\tcipher_TLS_DHE_DSS_WITH_ARIA_128_GCM_SHA256         uint16 = 0xC056\n\tcipher_TLS_DHE_DSS_WITH_ARIA_256_GCM_SHA384         uint16 = 0xC057\n\tcipher_TLS_DH_DSS_WITH_ARIA_128_GCM_SHA256          uint16 = 0xC058\n\tcipher_TLS_DH_DSS_WITH_ARIA_256_GCM_SHA384          uint16 = 0xC059\n\tcipher_TLS_DH_anon_WITH_ARIA_128_GCM_SHA256         uint16 = 0xC05A\n\tcipher_TLS_DH_anon_WITH_ARIA_256_GCM_SHA384         uint16 = 0xC05B\n\tcipher_TLS_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256     uint16 = 0xC05C\n\tcipher_TLS_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384     uint16 = 0xC05D\n\tcipher_TLS_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256      uint16 = 0xC05E\n\tcipher_TLS_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384      uint16 = 0xC05F\n\tcipher_TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256       uint16 = 0xC060\n\tcipher_TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384       uint16 = 0xC061\n\tcipher_TLS_ECDH_RSA_WITH_ARIA_128_GCM_SHA256        uint16 = 0xC062\n\tcipher_TLS_ECDH_RSA_WITH_ARIA_256_GCM_SHA384        uint16 = 0xC063\n\tcipher_TLS_PSK_WITH_ARIA_128_CBC_SHA256             uint16 = 0xC064\n\tcipher_TLS_PSK_WITH_ARIA_256_CBC_SHA384             uint16 = 0xC065\n\tcipher_TLS_DHE_PSK_WITH_ARIA_128_CBC_SHA256         uint16 = 0xC066\n\tcipher_TLS_DHE_PSK_WITH_ARIA_256_CBC_SHA384         uint16 = 0xC067\n\tcipher_TLS_RSA_PSK_WITH_ARIA_128_CBC_SHA256         uint16 = 0xC068\n\tcipher_TLS_RSA_PSK_WITH_ARIA_256_CBC_SHA384         uint16 = 0xC069\n\tcipher_TLS_PSK_WITH_ARIA_128_GCM_SHA256             uint16 = 0xC06A\n\tcipher_TLS_PSK_WITH_ARIA_256_GCM_SHA384             uint16 = 0xC06B\n\tcipher_TLS_DHE_PSK_WITH_ARIA_128_GCM_SHA256         uint16 = 0xC06C\n\tcipher_TLS_DHE_PSK_WITH_ARIA_256_GCM_SHA384         uint16 = 0xC06D\n\tcipher_TLS_RSA_PSK_WITH_ARIA_128_GCM_SHA256         uint16 = 0xC06E\n\tcipher_TLS_RSA_PSK_WITH_ARIA_256_GCM_SHA384         uint16 = 0xC06F\n\tcipher_TLS_ECDHE_PSK_WITH_ARIA_128_CBC_SHA256       uint16 = 0xC070\n\tcipher_TLS_ECDHE_PSK_WITH_ARIA_256_CBC_SHA384       uint16 = 0xC071\n\tcipher_TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 uint16 = 0xC072\n\tcipher_TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 uint16 = 0xC073\n\tcipher_TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256  uint16 = 0xC074\n\tcipher_TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384  uint16 = 0xC075\n\tcipher_TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256   uint16 = 0xC076\n\tcipher_TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384   uint16 = 0xC077\n\tcipher_TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256    uint16 = 0xC078\n\tcipher_TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384    uint16 = 0xC079\n\tcipher_TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256         uint16 = 0xC07A\n\tcipher_TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384         uint16 = 0xC07B\n\tcipher_TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256     uint16 = 0xC07C\n\tcipher_TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384     uint16 = 0xC07D\n\tcipher_TLS_DH_RSA_WITH_CAMELLIA_128_GCM_SHA256      uint16 = 0xC07E\n\tcipher_TLS_DH_RSA_WITH_CAMELLIA_256_GCM_SHA384      uint16 = 0xC07F\n\tcipher_TLS_DHE_DSS_WITH_CAMELLIA_128_GCM_SHA256     uint16 = 0xC080\n\tcipher_TLS_DHE_DSS_WITH_CAMELLIA_256_GCM_SHA384     uint16 = 0xC081\n\tcipher_TLS_DH_DSS_WITH_CAMELLIA_128_GCM_SHA256      uint16 = 0xC082\n\tcipher_TLS_DH_DSS_WITH_CAMELLIA_256_GCM_SHA384      uint16 = 0xC083\n\tcipher_TLS_DH_anon_WITH_CAMELLIA_128_GCM_SHA256     uint16 = 0xC084\n\tcipher_TLS_DH_anon_WITH_CAMELLIA_256_GCM_SHA384     uint16 = 0xC085\n\tcipher_TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256 uint16 = 0xC086\n\tcipher_TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384 uint16 = 0xC087\n\tcipher_TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256  uint16 = 0xC088\n\tcipher_TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384  uint16 = 0xC089\n\tcipher_TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256   uint16 = 0xC08A\n\tcipher_TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384   uint16 = 0xC08B\n\tcipher_TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256    uint16 = 0xC08C\n\tcipher_TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384    uint16 = 0xC08D\n\tcipher_TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256         uint16 = 0xC08E\n\tcipher_TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384         uint16 = 0xC08F\n\tcipher_TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256     uint16 = 0xC090\n\tcipher_TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384     uint16 = 0xC091\n\tcipher_TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256     uint16 = 0xC092\n\tcipher_TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384     uint16 = 0xC093\n\tcipher_TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256         uint16 = 0xC094\n\tcipher_TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384         uint16 = 0xC095\n\tcipher_TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256     uint16 = 0xC096\n\tcipher_TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384     uint16 = 0xC097\n\tcipher_TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256     uint16 = 0xC098\n\tcipher_TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384     uint16 = 0xC099\n\tcipher_TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256   uint16 = 0xC09A\n\tcipher_TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384   uint16 = 0xC09B\n\tcipher_TLS_RSA_WITH_AES_128_CCM                     uint16 = 0xC09C\n\tcipher_TLS_RSA_WITH_AES_256_CCM                     uint16 = 0xC09D\n\tcipher_TLS_DHE_RSA_WITH_AES_128_CCM                 uint16 = 0xC09E\n\tcipher_TLS_DHE_RSA_WITH_AES_256_CCM                 uint16 = 0xC09F\n\tcipher_TLS_RSA_WITH_AES_128_CCM_8                   uint16 = 0xC0A0\n\tcipher_TLS_RSA_WITH_AES_256_CCM_8                   uint16 = 0xC0A1\n\tcipher_TLS_DHE_RSA_WITH_AES_128_CCM_8               uint16 = 0xC0A2\n\tcipher_TLS_DHE_RSA_WITH_AES_256_CCM_8               uint16 = 0xC0A3\n\tcipher_TLS_PSK_WITH_AES_128_CCM                     uint16 = 0xC0A4\n\tcipher_TLS_PSK_WITH_AES_256_CCM                     uint16 = 0xC0A5\n\tcipher_TLS_DHE_PSK_WITH_AES_128_CCM                 uint16 = 0xC0A6\n\tcipher_TLS_DHE_PSK_WITH_AES_256_CCM                 uint16 = 0xC0A7\n\tcipher_TLS_PSK_WITH_AES_128_CCM_8                   uint16 = 0xC0A8\n\tcipher_TLS_PSK_WITH_AES_256_CCM_8                   uint16 = 0xC0A9\n\tcipher_TLS_PSK_DHE_WITH_AES_128_CCM_8               uint16 = 0xC0AA\n\tcipher_TLS_PSK_DHE_WITH_AES_256_CCM_8               uint16 = 0xC0AB\n\tcipher_TLS_ECDHE_ECDSA_WITH_AES_128_CCM             uint16 = 0xC0AC\n\tcipher_TLS_ECDHE_ECDSA_WITH_AES_256_CCM             uint16 = 0xC0AD\n\tcipher_TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8           uint16 = 0xC0AE\n\tcipher_TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8           uint16 = 0xC0AF\n\t// Unassigned uint16 =  0xC0B0-FF\n\t// Unassigned uint16 =  0xC1-CB,*\n\t// Unassigned uint16 =  0xCC00-A7\n\tcipher_TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256   uint16 = 0xCCA8\n\tcipher_TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 uint16 = 0xCCA9\n\tcipher_TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256     uint16 = 0xCCAA\n\tcipher_TLS_PSK_WITH_CHACHA20_POLY1305_SHA256         uint16 = 0xCCAB\n\tcipher_TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256   uint16 = 0xCCAC\n\tcipher_TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256     uint16 = 0xCCAD\n\tcipher_TLS_RSA_PSK_WITH_CHACHA20_POLY1305_SHA256     uint16 = 0xCCAE\n)\n\n// isBadCipher reports whether the cipher is blacklisted by the HTTP/2 spec.\n// References:\n// https://tools.ietf.org/html/rfc7540#appendix-A\n// Reject cipher suites from Appendix A.\n// \"This list includes those cipher suites that do not\n// offer an ephemeral key exchange and those that are\n// based on the TLS null, stream or block cipher type\"\nfunc isBadCipher(cipher uint16) bool {\n\tswitch cipher {\n\tcase cipher_TLS_NULL_WITH_NULL_NULL,\n\t\tcipher_TLS_RSA_WITH_NULL_MD5,\n\t\tcipher_TLS_RSA_WITH_NULL_SHA,\n\t\tcipher_TLS_RSA_EXPORT_WITH_RC4_40_MD5,\n\t\tcipher_TLS_RSA_WITH_RC4_128_MD5,\n\t\tcipher_TLS_RSA_WITH_RC4_128_SHA,\n\t\tcipher_TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5,\n\t\tcipher_TLS_RSA_WITH_IDEA_CBC_SHA,\n\t\tcipher_TLS_RSA_EXPORT_WITH_DES40_CBC_SHA,\n\t\tcipher_TLS_RSA_WITH_DES_CBC_SHA,\n\t\tcipher_TLS_RSA_WITH_3DES_EDE_CBC_SHA,\n\t\tcipher_TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA,\n\t\tcipher_TLS_DH_DSS_WITH_DES_CBC_SHA,\n\t\tcipher_TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA,\n\t\tcipher_TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA,\n\t\tcipher_TLS_DH_RSA_WITH_DES_CBC_SHA,\n\t\tcipher_TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA,\n\t\tcipher_TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA,\n\t\tcipher_TLS_DHE_DSS_WITH_DES_CBC_SHA,\n\t\tcipher_TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA,\n\t\tcipher_TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA,\n\t\tcipher_TLS_DHE_RSA_WITH_DES_CBC_SHA,\n\t\tcipher_TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA,\n\t\tcipher_TLS_DH_anon_EXPORT_WITH_RC4_40_MD5,\n\t\tcipher_TLS_DH_anon_WITH_RC4_128_MD5,\n\t\tcipher_TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA,\n\t\tcipher_TLS_DH_anon_WITH_DES_CBC_SHA,\n\t\tcipher_TLS_DH_anon_WITH_3DES_EDE_CBC_SHA,\n\t\tcipher_TLS_KRB5_WITH_DES_CBC_SHA,\n\t\tcipher_TLS_KRB5_WITH_3DES_EDE_CBC_SHA,\n\t\tcipher_TLS_KRB5_WITH_RC4_128_SHA,\n\t\tcipher_TLS_KRB5_WITH_IDEA_CBC_SHA,\n\t\tcipher_TLS_KRB5_WITH_DES_CBC_MD5,\n\t\tcipher_TLS_KRB5_WITH_3DES_EDE_CBC_MD5,\n\t\tcipher_TLS_KRB5_WITH_RC4_128_MD5,\n\t\tcipher_TLS_KRB5_WITH_IDEA_CBC_MD5,\n\t\tcipher_TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA,\n\t\tcipher_TLS_KRB5_EXPORT_WITH_RC2_CBC_40_SHA,\n\t\tcipher_TLS_KRB5_EXPORT_WITH_RC4_40_SHA,\n\t\tcipher_TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5,\n\t\tcipher_TLS_KRB5_EXPORT_WITH_RC2_CBC_40_MD5,\n\t\tcipher_TLS_KRB5_EXPORT_WITH_RC4_40_MD5,\n\t\tcipher_TLS_PSK_WITH_NULL_SHA,\n\t\tcipher_TLS_DHE_PSK_WITH_NULL_SHA,\n\t\tcipher_TLS_RSA_PSK_WITH_NULL_SHA,\n\t\tcipher_TLS_RSA_WITH_AES_128_CBC_SHA,\n\t\tcipher_TLS_DH_DSS_WITH_AES_128_CBC_SHA,\n\t\tcipher_TLS_DH_RSA_WITH_AES_128_CBC_SHA,\n\t\tcipher_TLS_DHE_DSS_WITH_AES_128_CBC_SHA,\n\t\tcipher_TLS_DHE_RSA_WITH_AES_128_CBC_SHA,\n\t\tcipher_TLS_DH_anon_WITH_AES_128_CBC_SHA,\n\t\tcipher_TLS_RSA_WITH_AES_256_CBC_SHA,\n\t\tcipher_TLS_DH_DSS_WITH_AES_256_CBC_SHA,\n\t\tcipher_TLS_DH_RSA_WITH_AES_256_CBC_SHA,\n\t\tcipher_TLS_DHE_DSS_WITH_AES_256_CBC_SHA,\n\t\tcipher_TLS_DHE_RSA_WITH_AES_256_CBC_SHA,\n\t\tcipher_TLS_DH_anon_WITH_AES_256_CBC_SHA,\n\t\tcipher_TLS_RSA_WITH_NULL_SHA256,\n\t\tcipher_TLS_RSA_WITH_AES_128_CBC_SHA256,\n\t\tcipher_TLS_RSA_WITH_AES_256_CBC_SHA256,\n\t\tcipher_TLS_DH_DSS_WITH_AES_128_CBC_SHA256,\n\t\tcipher_TLS_DH_RSA_WITH_AES_128_CBC_SHA256,\n\t\tcipher_TLS_DHE_DSS_WITH_AES_128_CBC_SHA256,\n\t\tcipher_TLS_RSA_WITH_CAMELLIA_128_CBC_SHA,\n\t\tcipher_TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA,\n\t\tcipher_TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA,\n\t\tcipher_TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA,\n\t\tcipher_TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA,\n\t\tcipher_TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA,\n\t\tcipher_TLS_DHE_RSA_WITH_AES_128_CBC_SHA256,\n\t\tcipher_TLS_DH_DSS_WITH_AES_256_CBC_SHA256,\n\t\tcipher_TLS_DH_RSA_WITH_AES_256_CBC_SHA256,\n\t\tcipher_TLS_DHE_DSS_WITH_AES_256_CBC_SHA256,\n\t\tcipher_TLS_DHE_RSA_WITH_AES_256_CBC_SHA256,\n\t\tcipher_TLS_DH_anon_WITH_AES_128_CBC_SHA256,\n\t\tcipher_TLS_DH_anon_WITH_AES_256_CBC_SHA256,\n\t\tcipher_TLS_RSA_WITH_CAMELLIA_256_CBC_SHA,\n\t\tcipher_TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA,\n\t\tcipher_TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA,\n\t\tcipher_TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA,\n\t\tcipher_TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA,\n\t\tcipher_TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA,\n\t\tcipher_TLS_PSK_WITH_RC4_128_SHA,\n\t\tcipher_TLS_PSK_WITH_3DES_EDE_CBC_SHA,\n\t\tcipher_TLS_PSK_WITH_AES_128_CBC_SHA,\n\t\tcipher_TLS_PSK_WITH_AES_256_CBC_SHA,\n\t\tcipher_TLS_DHE_PSK_WITH_RC4_128_SHA,\n\t\tcipher_TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA,\n\t\tcipher_TLS_DHE_PSK_WITH_AES_128_CBC_SHA,\n\t\tcipher_TLS_DHE_PSK_WITH_AES_256_CBC_SHA,\n\t\tcipher_TLS_RSA_PSK_WITH_RC4_128_SHA,\n\t\tcipher_TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA,\n\t\tcipher_TLS_RSA_PSK_WITH_AES_128_CBC_SHA,\n\t\tcipher_TLS_RSA_PSK_WITH_AES_256_CBC_SHA,\n\t\tcipher_TLS_RSA_WITH_SEED_CBC_SHA,\n\t\tcipher_TLS_DH_DSS_WITH_SEED_CBC_SHA,\n\t\tcipher_TLS_DH_RSA_WITH_SEED_CBC_SHA,\n\t\tcipher_TLS_DHE_DSS_WITH_SEED_CBC_SHA,\n\t\tcipher_TLS_DHE_RSA_WITH_SEED_CBC_SHA,\n\t\tcipher_TLS_DH_anon_WITH_SEED_CBC_SHA,\n\t\tcipher_TLS_RSA_WITH_AES_128_GCM_SHA256,\n\t\tcipher_TLS_RSA_WITH_AES_256_GCM_SHA384,\n\t\tcipher_TLS_DH_RSA_WITH_AES_128_GCM_SHA256,\n\t\tcipher_TLS_DH_RSA_WITH_AES_256_GCM_SHA384,\n\t\tcipher_TLS_DH_DSS_WITH_AES_128_GCM_SHA256,\n\t\tcipher_TLS_DH_DSS_WITH_AES_256_GCM_SHA384,\n\t\tcipher_TLS_DH_anon_WITH_AES_128_GCM_SHA256,\n\t\tcipher_TLS_DH_anon_WITH_AES_256_GCM_SHA384,\n\t\tcipher_TLS_PSK_WITH_AES_128_GCM_SHA256,\n\t\tcipher_TLS_PSK_WITH_AES_256_GCM_SHA384,\n\t\tcipher_TLS_RSA_PSK_WITH_AES_128_GCM_SHA256,\n\t\tcipher_TLS_RSA_PSK_WITH_AES_256_GCM_SHA384,\n\t\tcipher_TLS_PSK_WITH_AES_128_CBC_SHA256,\n\t\tcipher_TLS_PSK_WITH_AES_256_CBC_SHA384,\n\t\tcipher_TLS_PSK_WITH_NULL_SHA256,\n\t\tcipher_TLS_PSK_WITH_NULL_SHA384,\n\t\tcipher_TLS_DHE_PSK_WITH_AES_128_CBC_SHA256,\n\t\tcipher_TLS_DHE_PSK_WITH_AES_256_CBC_SHA384,\n\t\tcipher_TLS_DHE_PSK_WITH_NULL_SHA256,\n\t\tcipher_TLS_DHE_PSK_WITH_NULL_SHA384,\n\t\tcipher_TLS_RSA_PSK_WITH_AES_128_CBC_SHA256,\n\t\tcipher_TLS_RSA_PSK_WITH_AES_256_CBC_SHA384,\n\t\tcipher_TLS_RSA_PSK_WITH_NULL_SHA256,\n\t\tcipher_TLS_RSA_PSK_WITH_NULL_SHA384,\n\t\tcipher_TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256,\n\t\tcipher_TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256,\n\t\tcipher_TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256,\n\t\tcipher_TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256,\n\t\tcipher_TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256,\n\t\tcipher_TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA256,\n\t\tcipher_TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256,\n\t\tcipher_TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256,\n\t\tcipher_TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256,\n\t\tcipher_TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256,\n\t\tcipher_TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256,\n\t\tcipher_TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA256,\n\t\tcipher_TLS_EMPTY_RENEGOTIATION_INFO_SCSV,\n\t\tcipher_TLS_ECDH_ECDSA_WITH_NULL_SHA,\n\t\tcipher_TLS_ECDH_ECDSA_WITH_RC4_128_SHA,\n\t\tcipher_TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA,\n\t\tcipher_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA,\n\t\tcipher_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA,\n\t\tcipher_TLS_ECDHE_ECDSA_WITH_NULL_SHA,\n\t\tcipher_TLS_ECDHE_ECDSA_WITH_RC4_128_SHA,\n\t\tcipher_TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA,\n\t\tcipher_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,\n\t\tcipher_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,\n\t\tcipher_TLS_ECDH_RSA_WITH_NULL_SHA,\n\t\tcipher_TLS_ECDH_RSA_WITH_RC4_128_SHA,\n\t\tcipher_TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA,\n\t\tcipher_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA,\n\t\tcipher_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA,\n\t\tcipher_TLS_ECDHE_RSA_WITH_NULL_SHA,\n\t\tcipher_TLS_ECDHE_RSA_WITH_RC4_128_SHA,\n\t\tcipher_TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA,\n\t\tcipher_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,\n\t\tcipher_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,\n\t\tcipher_TLS_ECDH_anon_WITH_NULL_SHA,\n\t\tcipher_TLS_ECDH_anon_WITH_RC4_128_SHA,\n\t\tcipher_TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA,\n\t\tcipher_TLS_ECDH_anon_WITH_AES_128_CBC_SHA,\n\t\tcipher_TLS_ECDH_anon_WITH_AES_256_CBC_SHA,\n\t\tcipher_TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA,\n\t\tcipher_TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA,\n\t\tcipher_TLS_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA,\n\t\tcipher_TLS_SRP_SHA_WITH_AES_128_CBC_SHA,\n\t\tcipher_TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA,\n\t\tcipher_TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA,\n\t\tcipher_TLS_SRP_SHA_WITH_AES_256_CBC_SHA,\n\t\tcipher_TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA,\n\t\tcipher_TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA,\n\t\tcipher_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,\n\t\tcipher_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,\n\t\tcipher_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256,\n\t\tcipher_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384,\n\t\tcipher_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,\n\t\tcipher_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,\n\t\tcipher_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256,\n\t\tcipher_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384,\n\t\tcipher_TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256,\n\t\tcipher_TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384,\n\t\tcipher_TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256,\n\t\tcipher_TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384,\n\t\tcipher_TLS_ECDHE_PSK_WITH_RC4_128_SHA,\n\t\tcipher_TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA,\n\t\tcipher_TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA,\n\t\tcipher_TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA,\n\t\tcipher_TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256,\n\t\tcipher_TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384,\n\t\tcipher_TLS_ECDHE_PSK_WITH_NULL_SHA,\n\t\tcipher_TLS_ECDHE_PSK_WITH_NULL_SHA256,\n\t\tcipher_TLS_ECDHE_PSK_WITH_NULL_SHA384,\n\t\tcipher_TLS_RSA_WITH_ARIA_128_CBC_SHA256,\n\t\tcipher_TLS_RSA_WITH_ARIA_256_CBC_SHA384,\n\t\tcipher_TLS_DH_DSS_WITH_ARIA_128_CBC_SHA256,\n\t\tcipher_TLS_DH_DSS_WITH_ARIA_256_CBC_SHA384,\n\t\tcipher_TLS_DH_RSA_WITH_ARIA_128_CBC_SHA256,\n\t\tcipher_TLS_DH_RSA_WITH_ARIA_256_CBC_SHA384,\n\t\tcipher_TLS_DHE_DSS_WITH_ARIA_128_CBC_SHA256,\n\t\tcipher_TLS_DHE_DSS_WITH_ARIA_256_CBC_SHA384,\n\t\tcipher_TLS_DHE_RSA_WITH_ARIA_128_CBC_SHA256,\n\t\tcipher_TLS_DHE_RSA_WITH_ARIA_256_CBC_SHA384,\n\t\tcipher_TLS_DH_anon_WITH_ARIA_128_CBC_SHA256,\n\t\tcipher_TLS_DH_anon_WITH_ARIA_256_CBC_SHA384,\n\t\tcipher_TLS_ECDHE_ECDSA_WITH_ARIA_128_CBC_SHA256,\n\t\tcipher_TLS_ECDHE_ECDSA_WITH_ARIA_256_CBC_SHA384,\n\t\tcipher_TLS_ECDH_ECDSA_WITH_ARIA_128_CBC_SHA256,\n\t\tcipher_TLS_ECDH_ECDSA_WITH_ARIA_256_CBC_SHA384,\n\t\tcipher_TLS_ECDHE_RSA_WITH_ARIA_128_CBC_SHA256,\n\t\tcipher_TLS_ECDHE_RSA_WITH_ARIA_256_CBC_SHA384,\n\t\tcipher_TLS_ECDH_RSA_WITH_ARIA_128_CBC_SHA256,\n\t\tcipher_TLS_ECDH_RSA_WITH_ARIA_256_CBC_SHA384,\n\t\tcipher_TLS_RSA_WITH_ARIA_128_GCM_SHA256,\n\t\tcipher_TLS_RSA_WITH_ARIA_256_GCM_SHA384,\n\t\tcipher_TLS_DH_RSA_WITH_ARIA_128_GCM_SHA256,\n\t\tcipher_TLS_DH_RSA_WITH_ARIA_256_GCM_SHA384,\n\t\tcipher_TLS_DH_DSS_WITH_ARIA_128_GCM_SHA256,\n\t\tcipher_TLS_DH_DSS_WITH_ARIA_256_GCM_SHA384,\n\t\tcipher_TLS_DH_anon_WITH_ARIA_128_GCM_SHA256,\n\t\tcipher_TLS_DH_anon_WITH_ARIA_256_GCM_SHA384,\n\t\tcipher_TLS_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256,\n\t\tcipher_TLS_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384,\n\t\tcipher_TLS_ECDH_RSA_WITH_ARIA_128_GCM_SHA256,\n\t\tcipher_TLS_ECDH_RSA_WITH_ARIA_256_GCM_SHA384,\n\t\tcipher_TLS_PSK_WITH_ARIA_128_CBC_SHA256,\n\t\tcipher_TLS_PSK_WITH_ARIA_256_CBC_SHA384,\n\t\tcipher_TLS_DHE_PSK_WITH_ARIA_128_CBC_SHA256,\n\t\tcipher_TLS_DHE_PSK_WITH_ARIA_256_CBC_SHA384,\n\t\tcipher_TLS_RSA_PSK_WITH_ARIA_128_CBC_SHA256,\n\t\tcipher_TLS_RSA_PSK_WITH_ARIA_256_CBC_SHA384,\n\t\tcipher_TLS_PSK_WITH_ARIA_128_GCM_SHA256,\n\t\tcipher_TLS_PSK_WITH_ARIA_256_GCM_SHA384,\n\t\tcipher_TLS_RSA_PSK_WITH_ARIA_128_GCM_SHA256,\n\t\tcipher_TLS_RSA_PSK_WITH_ARIA_256_GCM_SHA384,\n\t\tcipher_TLS_ECDHE_PSK_WITH_ARIA_128_CBC_SHA256,\n\t\tcipher_TLS_ECDHE_PSK_WITH_ARIA_256_CBC_SHA384,\n\t\tcipher_TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256,\n\t\tcipher_TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384,\n\t\tcipher_TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256,\n\t\tcipher_TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384,\n\t\tcipher_TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256,\n\t\tcipher_TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384,\n\t\tcipher_TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256,\n\t\tcipher_TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384,\n\t\tcipher_TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256,\n\t\tcipher_TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384,\n\t\tcipher_TLS_DH_RSA_WITH_CAMELLIA_128_GCM_SHA256,\n\t\tcipher_TLS_DH_RSA_WITH_CAMELLIA_256_GCM_SHA384,\n\t\tcipher_TLS_DH_DSS_WITH_CAMELLIA_128_GCM_SHA256,\n\t\tcipher_TLS_DH_DSS_WITH_CAMELLIA_256_GCM_SHA384,\n\t\tcipher_TLS_DH_anon_WITH_CAMELLIA_128_GCM_SHA256,\n\t\tcipher_TLS_DH_anon_WITH_CAMELLIA_256_GCM_SHA384,\n\t\tcipher_TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256,\n\t\tcipher_TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384,\n\t\tcipher_TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256,\n\t\tcipher_TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384,\n\t\tcipher_TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256,\n\t\tcipher_TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384,\n\t\tcipher_TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256,\n\t\tcipher_TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384,\n\t\tcipher_TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256,\n\t\tcipher_TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384,\n\t\tcipher_TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256,\n\t\tcipher_TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384,\n\t\tcipher_TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256,\n\t\tcipher_TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384,\n\t\tcipher_TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256,\n\t\tcipher_TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384,\n\t\tcipher_TLS_RSA_WITH_AES_128_CCM,\n\t\tcipher_TLS_RSA_WITH_AES_256_CCM,\n\t\tcipher_TLS_RSA_WITH_AES_128_CCM_8,\n\t\tcipher_TLS_RSA_WITH_AES_256_CCM_8,\n\t\tcipher_TLS_PSK_WITH_AES_128_CCM,\n\t\tcipher_TLS_PSK_WITH_AES_256_CCM,\n\t\tcipher_TLS_PSK_WITH_AES_128_CCM_8,\n\t\tcipher_TLS_PSK_WITH_AES_256_CCM_8:\n\t\treturn true\n\tdefault:\n\t\treturn false\n\t}\n}\n"
  },
  {
    "path": "vendor/golang.org/x/net/http2/client_conn_pool.go",
    "content": "// Copyright 2015 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Transport code's client connection pooling.\n\npackage http2\n\nimport (\n\t\"crypto/tls\"\n\t\"net/http\"\n\t\"sync\"\n)\n\n// ClientConnPool manages a pool of HTTP/2 client connections.\ntype ClientConnPool interface {\n\tGetClientConn(req *http.Request, addr string) (*ClientConn, error)\n\tMarkDead(*ClientConn)\n}\n\n// clientConnPoolIdleCloser is the interface implemented by ClientConnPool\n// implementations which can close their idle connections.\ntype clientConnPoolIdleCloser interface {\n\tClientConnPool\n\tcloseIdleConnections()\n}\n\nvar (\n\t_ clientConnPoolIdleCloser = (*clientConnPool)(nil)\n\t_ clientConnPoolIdleCloser = noDialClientConnPool{}\n)\n\n// TODO: use singleflight for dialing and addConnCalls?\ntype clientConnPool struct {\n\tt *Transport\n\n\tmu sync.Mutex // TODO: maybe switch to RWMutex\n\t// TODO: add support for sharing conns based on cert names\n\t// (e.g. share conn for googleapis.com and appspot.com)\n\tconns        map[string][]*ClientConn // key is host:port\n\tdialing      map[string]*dialCall     // currently in-flight dials\n\tkeys         map[*ClientConn][]string\n\taddConnCalls map[string]*addConnCall // in-flight addConnIfNeede calls\n}\n\nfunc (p *clientConnPool) GetClientConn(req *http.Request, addr string) (*ClientConn, error) {\n\treturn p.getClientConn(req, addr, dialOnMiss)\n}\n\nconst (\n\tdialOnMiss   = true\n\tnoDialOnMiss = false\n)\n\n// shouldTraceGetConn reports whether getClientConn should call any\n// ClientTrace.GetConn hook associated with the http.Request.\n//\n// This complexity is needed to avoid double calls of the GetConn hook\n// during the back-and-forth between net/http and x/net/http2 (when the\n// net/http.Transport is upgraded to also speak http2), as well as support\n// the case where x/net/http2 is being used directly.\nfunc (p *clientConnPool) shouldTraceGetConn(st clientConnIdleState) bool {\n\t// If our Transport wasn't made via ConfigureTransport, always\n\t// trace the GetConn hook if provided, because that means the\n\t// http2 package is being used directly and it's the one\n\t// dialing, as opposed to net/http.\n\tif _, ok := p.t.ConnPool.(noDialClientConnPool); !ok {\n\t\treturn true\n\t}\n\t// Otherwise, only use the GetConn hook if this connection has\n\t// been used previously for other requests. For fresh\n\t// connections, the net/http package does the dialing.\n\treturn !st.freshConn\n}\n\nfunc (p *clientConnPool) getClientConn(req *http.Request, addr string, dialOnMiss bool) (*ClientConn, error) {\n\tif isConnectionCloseRequest(req) && dialOnMiss {\n\t\t// It gets its own connection.\n\t\ttraceGetConn(req, addr)\n\t\tconst singleUse = true\n\t\tcc, err := p.t.dialClientConn(addr, singleUse)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn cc, nil\n\t}\n\tp.mu.Lock()\n\tfor _, cc := range p.conns[addr] {\n\t\tif st := cc.idleState(); st.canTakeNewRequest {\n\t\t\tif p.shouldTraceGetConn(st) {\n\t\t\t\ttraceGetConn(req, addr)\n\t\t\t}\n\t\t\tp.mu.Unlock()\n\t\t\treturn cc, nil\n\t\t}\n\t}\n\tif !dialOnMiss {\n\t\tp.mu.Unlock()\n\t\treturn nil, ErrNoCachedConn\n\t}\n\ttraceGetConn(req, addr)\n\tcall := p.getStartDialLocked(addr)\n\tp.mu.Unlock()\n\t<-call.done\n\treturn call.res, call.err\n}\n\n// dialCall is an in-flight Transport dial call to a host.\ntype dialCall struct {\n\tp    *clientConnPool\n\tdone chan struct{} // closed when done\n\tres  *ClientConn   // valid after done is closed\n\terr  error         // valid after done is closed\n}\n\n// requires p.mu is held.\nfunc (p *clientConnPool) getStartDialLocked(addr string) *dialCall {\n\tif call, ok := p.dialing[addr]; ok {\n\t\t// A dial is already in-flight. Don't start another.\n\t\treturn call\n\t}\n\tcall := &dialCall{p: p, done: make(chan struct{})}\n\tif p.dialing == nil {\n\t\tp.dialing = make(map[string]*dialCall)\n\t}\n\tp.dialing[addr] = call\n\tgo call.dial(addr)\n\treturn call\n}\n\n// run in its own goroutine.\nfunc (c *dialCall) dial(addr string) {\n\tconst singleUse = false // shared conn\n\tc.res, c.err = c.p.t.dialClientConn(addr, singleUse)\n\tclose(c.done)\n\n\tc.p.mu.Lock()\n\tdelete(c.p.dialing, addr)\n\tif c.err == nil {\n\t\tc.p.addConnLocked(addr, c.res)\n\t}\n\tc.p.mu.Unlock()\n}\n\n// addConnIfNeeded makes a NewClientConn out of c if a connection for key doesn't\n// already exist. It coalesces concurrent calls with the same key.\n// This is used by the http1 Transport code when it creates a new connection. Because\n// the http1 Transport doesn't de-dup TCP dials to outbound hosts (because it doesn't know\n// the protocol), it can get into a situation where it has multiple TLS connections.\n// This code decides which ones live or die.\n// The return value used is whether c was used.\n// c is never closed.\nfunc (p *clientConnPool) addConnIfNeeded(key string, t *Transport, c *tls.Conn) (used bool, err error) {\n\tp.mu.Lock()\n\tfor _, cc := range p.conns[key] {\n\t\tif cc.CanTakeNewRequest() {\n\t\t\tp.mu.Unlock()\n\t\t\treturn false, nil\n\t\t}\n\t}\n\tcall, dup := p.addConnCalls[key]\n\tif !dup {\n\t\tif p.addConnCalls == nil {\n\t\t\tp.addConnCalls = make(map[string]*addConnCall)\n\t\t}\n\t\tcall = &addConnCall{\n\t\t\tp:    p,\n\t\t\tdone: make(chan struct{}),\n\t\t}\n\t\tp.addConnCalls[key] = call\n\t\tgo call.run(t, key, c)\n\t}\n\tp.mu.Unlock()\n\n\t<-call.done\n\tif call.err != nil {\n\t\treturn false, call.err\n\t}\n\treturn !dup, nil\n}\n\ntype addConnCall struct {\n\tp    *clientConnPool\n\tdone chan struct{} // closed when done\n\terr  error\n}\n\nfunc (c *addConnCall) run(t *Transport, key string, tc *tls.Conn) {\n\tcc, err := t.NewClientConn(tc)\n\n\tp := c.p\n\tp.mu.Lock()\n\tif err != nil {\n\t\tc.err = err\n\t} else {\n\t\tp.addConnLocked(key, cc)\n\t}\n\tdelete(p.addConnCalls, key)\n\tp.mu.Unlock()\n\tclose(c.done)\n}\n\nfunc (p *clientConnPool) addConn(key string, cc *ClientConn) {\n\tp.mu.Lock()\n\tp.addConnLocked(key, cc)\n\tp.mu.Unlock()\n}\n\n// p.mu must be held\nfunc (p *clientConnPool) addConnLocked(key string, cc *ClientConn) {\n\tfor _, v := range p.conns[key] {\n\t\tif v == cc {\n\t\t\treturn\n\t\t}\n\t}\n\tif p.conns == nil {\n\t\tp.conns = make(map[string][]*ClientConn)\n\t}\n\tif p.keys == nil {\n\t\tp.keys = make(map[*ClientConn][]string)\n\t}\n\tp.conns[key] = append(p.conns[key], cc)\n\tp.keys[cc] = append(p.keys[cc], key)\n}\n\nfunc (p *clientConnPool) MarkDead(cc *ClientConn) {\n\tp.mu.Lock()\n\tdefer p.mu.Unlock()\n\tfor _, key := range p.keys[cc] {\n\t\tvv, ok := p.conns[key]\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\t\tnewList := filterOutClientConn(vv, cc)\n\t\tif len(newList) > 0 {\n\t\t\tp.conns[key] = newList\n\t\t} else {\n\t\t\tdelete(p.conns, key)\n\t\t}\n\t}\n\tdelete(p.keys, cc)\n}\n\nfunc (p *clientConnPool) closeIdleConnections() {\n\tp.mu.Lock()\n\tdefer p.mu.Unlock()\n\t// TODO: don't close a cc if it was just added to the pool\n\t// milliseconds ago and has never been used. There's currently\n\t// a small race window with the HTTP/1 Transport's integration\n\t// where it can add an idle conn just before using it, and\n\t// somebody else can concurrently call CloseIdleConns and\n\t// break some caller's RoundTrip.\n\tfor _, vv := range p.conns {\n\t\tfor _, cc := range vv {\n\t\t\tcc.closeIfIdle()\n\t\t}\n\t}\n}\n\nfunc filterOutClientConn(in []*ClientConn, exclude *ClientConn) []*ClientConn {\n\tout := in[:0]\n\tfor _, v := range in {\n\t\tif v != exclude {\n\t\t\tout = append(out, v)\n\t\t}\n\t}\n\t// If we filtered it out, zero out the last item to prevent\n\t// the GC from seeing it.\n\tif len(in) != len(out) {\n\t\tin[len(in)-1] = nil\n\t}\n\treturn out\n}\n\n// noDialClientConnPool is an implementation of http2.ClientConnPool\n// which never dials. We let the HTTP/1.1 client dial and use its TLS\n// connection instead.\ntype noDialClientConnPool struct{ *clientConnPool }\n\nfunc (p noDialClientConnPool) GetClientConn(req *http.Request, addr string) (*ClientConn, error) {\n\treturn p.getClientConn(req, addr, noDialOnMiss)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/net/http2/databuffer.go",
    "content": "// Copyright 2014 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage http2\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"sync\"\n)\n\n// Buffer chunks are allocated from a pool to reduce pressure on GC.\n// The maximum wasted space per dataBuffer is 2x the largest size class,\n// which happens when the dataBuffer has multiple chunks and there is\n// one unread byte in both the first and last chunks. We use a few size\n// classes to minimize overheads for servers that typically receive very\n// small request bodies.\n//\n// TODO: Benchmark to determine if the pools are necessary. The GC may have\n// improved enough that we can instead allocate chunks like this:\n// make([]byte, max(16<<10, expectedBytesRemaining))\nvar (\n\tdataChunkSizeClasses = []int{\n\t\t1 << 10,\n\t\t2 << 10,\n\t\t4 << 10,\n\t\t8 << 10,\n\t\t16 << 10,\n\t}\n\tdataChunkPools = [...]sync.Pool{\n\t\t{New: func() interface{} { return make([]byte, 1<<10) }},\n\t\t{New: func() interface{} { return make([]byte, 2<<10) }},\n\t\t{New: func() interface{} { return make([]byte, 4<<10) }},\n\t\t{New: func() interface{} { return make([]byte, 8<<10) }},\n\t\t{New: func() interface{} { return make([]byte, 16<<10) }},\n\t}\n)\n\nfunc getDataBufferChunk(size int64) []byte {\n\ti := 0\n\tfor ; i < len(dataChunkSizeClasses)-1; i++ {\n\t\tif size <= int64(dataChunkSizeClasses[i]) {\n\t\t\tbreak\n\t\t}\n\t}\n\treturn dataChunkPools[i].Get().([]byte)\n}\n\nfunc putDataBufferChunk(p []byte) {\n\tfor i, n := range dataChunkSizeClasses {\n\t\tif len(p) == n {\n\t\t\tdataChunkPools[i].Put(p)\n\t\t\treturn\n\t\t}\n\t}\n\tpanic(fmt.Sprintf(\"unexpected buffer len=%v\", len(p)))\n}\n\n// dataBuffer is an io.ReadWriter backed by a list of data chunks.\n// Each dataBuffer is used to read DATA frames on a single stream.\n// The buffer is divided into chunks so the server can limit the\n// total memory used by a single connection without limiting the\n// request body size on any single stream.\ntype dataBuffer struct {\n\tchunks   [][]byte\n\tr        int   // next byte to read is chunks[0][r]\n\tw        int   // next byte to write is chunks[len(chunks)-1][w]\n\tsize     int   // total buffered bytes\n\texpected int64 // we expect at least this many bytes in future Write calls (ignored if <= 0)\n}\n\nvar errReadEmpty = errors.New(\"read from empty dataBuffer\")\n\n// Read copies bytes from the buffer into p.\n// It is an error to read when no data is available.\nfunc (b *dataBuffer) Read(p []byte) (int, error) {\n\tif b.size == 0 {\n\t\treturn 0, errReadEmpty\n\t}\n\tvar ntotal int\n\tfor len(p) > 0 && b.size > 0 {\n\t\treadFrom := b.bytesFromFirstChunk()\n\t\tn := copy(p, readFrom)\n\t\tp = p[n:]\n\t\tntotal += n\n\t\tb.r += n\n\t\tb.size -= n\n\t\t// If the first chunk has been consumed, advance to the next chunk.\n\t\tif b.r == len(b.chunks[0]) {\n\t\t\tputDataBufferChunk(b.chunks[0])\n\t\t\tend := len(b.chunks) - 1\n\t\t\tcopy(b.chunks[:end], b.chunks[1:])\n\t\t\tb.chunks[end] = nil\n\t\t\tb.chunks = b.chunks[:end]\n\t\t\tb.r = 0\n\t\t}\n\t}\n\treturn ntotal, nil\n}\n\nfunc (b *dataBuffer) bytesFromFirstChunk() []byte {\n\tif len(b.chunks) == 1 {\n\t\treturn b.chunks[0][b.r:b.w]\n\t}\n\treturn b.chunks[0][b.r:]\n}\n\n// Len returns the number of bytes of the unread portion of the buffer.\nfunc (b *dataBuffer) Len() int {\n\treturn b.size\n}\n\n// Write appends p to the buffer.\nfunc (b *dataBuffer) Write(p []byte) (int, error) {\n\tntotal := len(p)\n\tfor len(p) > 0 {\n\t\t// If the last chunk is empty, allocate a new chunk. Try to allocate\n\t\t// enough to fully copy p plus any additional bytes we expect to\n\t\t// receive. However, this may allocate less than len(p).\n\t\twant := int64(len(p))\n\t\tif b.expected > want {\n\t\t\twant = b.expected\n\t\t}\n\t\tchunk := b.lastChunkOrAlloc(want)\n\t\tn := copy(chunk[b.w:], p)\n\t\tp = p[n:]\n\t\tb.w += n\n\t\tb.size += n\n\t\tb.expected -= int64(n)\n\t}\n\treturn ntotal, nil\n}\n\nfunc (b *dataBuffer) lastChunkOrAlloc(want int64) []byte {\n\tif len(b.chunks) != 0 {\n\t\tlast := b.chunks[len(b.chunks)-1]\n\t\tif b.w < len(last) {\n\t\t\treturn last\n\t\t}\n\t}\n\tchunk := getDataBufferChunk(want)\n\tb.chunks = append(b.chunks, chunk)\n\tb.w = 0\n\treturn chunk\n}\n"
  },
  {
    "path": "vendor/golang.org/x/net/http2/errors.go",
    "content": "// Copyright 2014 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage http2\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n)\n\n// An ErrCode is an unsigned 32-bit error code as defined in the HTTP/2 spec.\ntype ErrCode uint32\n\nconst (\n\tErrCodeNo                 ErrCode = 0x0\n\tErrCodeProtocol           ErrCode = 0x1\n\tErrCodeInternal           ErrCode = 0x2\n\tErrCodeFlowControl        ErrCode = 0x3\n\tErrCodeSettingsTimeout    ErrCode = 0x4\n\tErrCodeStreamClosed       ErrCode = 0x5\n\tErrCodeFrameSize          ErrCode = 0x6\n\tErrCodeRefusedStream      ErrCode = 0x7\n\tErrCodeCancel             ErrCode = 0x8\n\tErrCodeCompression        ErrCode = 0x9\n\tErrCodeConnect            ErrCode = 0xa\n\tErrCodeEnhanceYourCalm    ErrCode = 0xb\n\tErrCodeInadequateSecurity ErrCode = 0xc\n\tErrCodeHTTP11Required     ErrCode = 0xd\n)\n\nvar errCodeName = map[ErrCode]string{\n\tErrCodeNo:                 \"NO_ERROR\",\n\tErrCodeProtocol:           \"PROTOCOL_ERROR\",\n\tErrCodeInternal:           \"INTERNAL_ERROR\",\n\tErrCodeFlowControl:        \"FLOW_CONTROL_ERROR\",\n\tErrCodeSettingsTimeout:    \"SETTINGS_TIMEOUT\",\n\tErrCodeStreamClosed:       \"STREAM_CLOSED\",\n\tErrCodeFrameSize:          \"FRAME_SIZE_ERROR\",\n\tErrCodeRefusedStream:      \"REFUSED_STREAM\",\n\tErrCodeCancel:             \"CANCEL\",\n\tErrCodeCompression:        \"COMPRESSION_ERROR\",\n\tErrCodeConnect:            \"CONNECT_ERROR\",\n\tErrCodeEnhanceYourCalm:    \"ENHANCE_YOUR_CALM\",\n\tErrCodeInadequateSecurity: \"INADEQUATE_SECURITY\",\n\tErrCodeHTTP11Required:     \"HTTP_1_1_REQUIRED\",\n}\n\nfunc (e ErrCode) String() string {\n\tif s, ok := errCodeName[e]; ok {\n\t\treturn s\n\t}\n\treturn fmt.Sprintf(\"unknown error code 0x%x\", uint32(e))\n}\n\n// ConnectionError is an error that results in the termination of the\n// entire connection.\ntype ConnectionError ErrCode\n\nfunc (e ConnectionError) Error() string { return fmt.Sprintf(\"connection error: %s\", ErrCode(e)) }\n\n// StreamError is an error that only affects one stream within an\n// HTTP/2 connection.\ntype StreamError struct {\n\tStreamID uint32\n\tCode     ErrCode\n\tCause    error // optional additional detail\n}\n\nfunc streamError(id uint32, code ErrCode) StreamError {\n\treturn StreamError{StreamID: id, Code: code}\n}\n\nfunc (e StreamError) Error() string {\n\tif e.Cause != nil {\n\t\treturn fmt.Sprintf(\"stream error: stream ID %d; %v; %v\", e.StreamID, e.Code, e.Cause)\n\t}\n\treturn fmt.Sprintf(\"stream error: stream ID %d; %v\", e.StreamID, e.Code)\n}\n\n// 6.9.1 The Flow Control Window\n// \"If a sender receives a WINDOW_UPDATE that causes a flow control\n// window to exceed this maximum it MUST terminate either the stream\n// or the connection, as appropriate. For streams, [...]; for the\n// connection, a GOAWAY frame with a FLOW_CONTROL_ERROR code.\"\ntype goAwayFlowError struct{}\n\nfunc (goAwayFlowError) Error() string { return \"connection exceeded flow control window size\" }\n\n// connError represents an HTTP/2 ConnectionError error code, along\n// with a string (for debugging) explaining why.\n//\n// Errors of this type are only returned by the frame parser functions\n// and converted into ConnectionError(Code), after stashing away\n// the Reason into the Framer's errDetail field, accessible via\n// the (*Framer).ErrorDetail method.\ntype connError struct {\n\tCode   ErrCode // the ConnectionError error code\n\tReason string  // additional reason\n}\n\nfunc (e connError) Error() string {\n\treturn fmt.Sprintf(\"http2: connection error: %v: %v\", e.Code, e.Reason)\n}\n\ntype pseudoHeaderError string\n\nfunc (e pseudoHeaderError) Error() string {\n\treturn fmt.Sprintf(\"invalid pseudo-header %q\", string(e))\n}\n\ntype duplicatePseudoHeaderError string\n\nfunc (e duplicatePseudoHeaderError) Error() string {\n\treturn fmt.Sprintf(\"duplicate pseudo-header %q\", string(e))\n}\n\ntype headerFieldNameError string\n\nfunc (e headerFieldNameError) Error() string {\n\treturn fmt.Sprintf(\"invalid header field name %q\", string(e))\n}\n\ntype headerFieldValueError string\n\nfunc (e headerFieldValueError) Error() string {\n\treturn fmt.Sprintf(\"invalid header field value %q\", string(e))\n}\n\nvar (\n\terrMixPseudoHeaderTypes = errors.New(\"mix of request and response pseudo headers\")\n\terrPseudoAfterRegular   = errors.New(\"pseudo header field after regular\")\n)\n"
  },
  {
    "path": "vendor/golang.org/x/net/http2/flow.go",
    "content": "// Copyright 2014 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Flow control\n\npackage http2\n\n// flow is the flow control window's size.\ntype flow struct {\n\t// n is the number of DATA bytes we're allowed to send.\n\t// A flow is kept both on a conn and a per-stream.\n\tn int32\n\n\t// conn points to the shared connection-level flow that is\n\t// shared by all streams on that conn. It is nil for the flow\n\t// that's on the conn directly.\n\tconn *flow\n}\n\nfunc (f *flow) setConnFlow(cf *flow) { f.conn = cf }\n\nfunc (f *flow) available() int32 {\n\tn := f.n\n\tif f.conn != nil && f.conn.n < n {\n\t\tn = f.conn.n\n\t}\n\treturn n\n}\n\nfunc (f *flow) take(n int32) {\n\tif n > f.available() {\n\t\tpanic(\"internal error: took too much\")\n\t}\n\tf.n -= n\n\tif f.conn != nil {\n\t\tf.conn.n -= n\n\t}\n}\n\n// add adds n bytes (positive or negative) to the flow control window.\n// It returns false if the sum would exceed 2^31-1.\nfunc (f *flow) add(n int32) bool {\n\tsum := f.n + n\n\tif (sum > n) == (f.n > 0) {\n\t\tf.n = sum\n\t\treturn true\n\t}\n\treturn false\n}\n"
  },
  {
    "path": "vendor/golang.org/x/net/http2/frame.go",
    "content": "// Copyright 2014 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage http2\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"log\"\n\t\"strings\"\n\t\"sync\"\n\n\t\"golang.org/x/net/http/httpguts\"\n\t\"golang.org/x/net/http2/hpack\"\n)\n\nconst frameHeaderLen = 9\n\nvar padZeros = make([]byte, 255) // zeros for padding\n\n// A FrameType is a registered frame type as defined in\n// http://http2.github.io/http2-spec/#rfc.section.11.2\ntype FrameType uint8\n\nconst (\n\tFrameData         FrameType = 0x0\n\tFrameHeaders      FrameType = 0x1\n\tFramePriority     FrameType = 0x2\n\tFrameRSTStream    FrameType = 0x3\n\tFrameSettings     FrameType = 0x4\n\tFramePushPromise  FrameType = 0x5\n\tFramePing         FrameType = 0x6\n\tFrameGoAway       FrameType = 0x7\n\tFrameWindowUpdate FrameType = 0x8\n\tFrameContinuation FrameType = 0x9\n)\n\nvar frameName = map[FrameType]string{\n\tFrameData:         \"DATA\",\n\tFrameHeaders:      \"HEADERS\",\n\tFramePriority:     \"PRIORITY\",\n\tFrameRSTStream:    \"RST_STREAM\",\n\tFrameSettings:     \"SETTINGS\",\n\tFramePushPromise:  \"PUSH_PROMISE\",\n\tFramePing:         \"PING\",\n\tFrameGoAway:       \"GOAWAY\",\n\tFrameWindowUpdate: \"WINDOW_UPDATE\",\n\tFrameContinuation: \"CONTINUATION\",\n}\n\nfunc (t FrameType) String() string {\n\tif s, ok := frameName[t]; ok {\n\t\treturn s\n\t}\n\treturn fmt.Sprintf(\"UNKNOWN_FRAME_TYPE_%d\", uint8(t))\n}\n\n// Flags is a bitmask of HTTP/2 flags.\n// The meaning of flags varies depending on the frame type.\ntype Flags uint8\n\n// Has reports whether f contains all (0 or more) flags in v.\nfunc (f Flags) Has(v Flags) bool {\n\treturn (f & v) == v\n}\n\n// Frame-specific FrameHeader flag bits.\nconst (\n\t// Data Frame\n\tFlagDataEndStream Flags = 0x1\n\tFlagDataPadded    Flags = 0x8\n\n\t// Headers Frame\n\tFlagHeadersEndStream  Flags = 0x1\n\tFlagHeadersEndHeaders Flags = 0x4\n\tFlagHeadersPadded     Flags = 0x8\n\tFlagHeadersPriority   Flags = 0x20\n\n\t// Settings Frame\n\tFlagSettingsAck Flags = 0x1\n\n\t// Ping Frame\n\tFlagPingAck Flags = 0x1\n\n\t// Continuation Frame\n\tFlagContinuationEndHeaders Flags = 0x4\n\n\tFlagPushPromiseEndHeaders Flags = 0x4\n\tFlagPushPromisePadded     Flags = 0x8\n)\n\nvar flagName = map[FrameType]map[Flags]string{\n\tFrameData: {\n\t\tFlagDataEndStream: \"END_STREAM\",\n\t\tFlagDataPadded:    \"PADDED\",\n\t},\n\tFrameHeaders: {\n\t\tFlagHeadersEndStream:  \"END_STREAM\",\n\t\tFlagHeadersEndHeaders: \"END_HEADERS\",\n\t\tFlagHeadersPadded:     \"PADDED\",\n\t\tFlagHeadersPriority:   \"PRIORITY\",\n\t},\n\tFrameSettings: {\n\t\tFlagSettingsAck: \"ACK\",\n\t},\n\tFramePing: {\n\t\tFlagPingAck: \"ACK\",\n\t},\n\tFrameContinuation: {\n\t\tFlagContinuationEndHeaders: \"END_HEADERS\",\n\t},\n\tFramePushPromise: {\n\t\tFlagPushPromiseEndHeaders: \"END_HEADERS\",\n\t\tFlagPushPromisePadded:     \"PADDED\",\n\t},\n}\n\n// a frameParser parses a frame given its FrameHeader and payload\n// bytes. The length of payload will always equal fh.Length (which\n// might be 0).\ntype frameParser func(fc *frameCache, fh FrameHeader, payload []byte) (Frame, error)\n\nvar frameParsers = map[FrameType]frameParser{\n\tFrameData:         parseDataFrame,\n\tFrameHeaders:      parseHeadersFrame,\n\tFramePriority:     parsePriorityFrame,\n\tFrameRSTStream:    parseRSTStreamFrame,\n\tFrameSettings:     parseSettingsFrame,\n\tFramePushPromise:  parsePushPromise,\n\tFramePing:         parsePingFrame,\n\tFrameGoAway:       parseGoAwayFrame,\n\tFrameWindowUpdate: parseWindowUpdateFrame,\n\tFrameContinuation: parseContinuationFrame,\n}\n\nfunc typeFrameParser(t FrameType) frameParser {\n\tif f := frameParsers[t]; f != nil {\n\t\treturn f\n\t}\n\treturn parseUnknownFrame\n}\n\n// A FrameHeader is the 9 byte header of all HTTP/2 frames.\n//\n// See http://http2.github.io/http2-spec/#FrameHeader\ntype FrameHeader struct {\n\tvalid bool // caller can access []byte fields in the Frame\n\n\t// Type is the 1 byte frame type. There are ten standard frame\n\t// types, but extension frame types may be written by WriteRawFrame\n\t// and will be returned by ReadFrame (as UnknownFrame).\n\tType FrameType\n\n\t// Flags are the 1 byte of 8 potential bit flags per frame.\n\t// They are specific to the frame type.\n\tFlags Flags\n\n\t// Length is the length of the frame, not including the 9 byte header.\n\t// The maximum size is one byte less than 16MB (uint24), but only\n\t// frames up to 16KB are allowed without peer agreement.\n\tLength uint32\n\n\t// StreamID is which stream this frame is for. Certain frames\n\t// are not stream-specific, in which case this field is 0.\n\tStreamID uint32\n}\n\n// Header returns h. It exists so FrameHeaders can be embedded in other\n// specific frame types and implement the Frame interface.\nfunc (h FrameHeader) Header() FrameHeader { return h }\n\nfunc (h FrameHeader) String() string {\n\tvar buf bytes.Buffer\n\tbuf.WriteString(\"[FrameHeader \")\n\th.writeDebug(&buf)\n\tbuf.WriteByte(']')\n\treturn buf.String()\n}\n\nfunc (h FrameHeader) writeDebug(buf *bytes.Buffer) {\n\tbuf.WriteString(h.Type.String())\n\tif h.Flags != 0 {\n\t\tbuf.WriteString(\" flags=\")\n\t\tset := 0\n\t\tfor i := uint8(0); i < 8; i++ {\n\t\t\tif h.Flags&(1<<i) == 0 {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tset++\n\t\t\tif set > 1 {\n\t\t\t\tbuf.WriteByte('|')\n\t\t\t}\n\t\t\tname := flagName[h.Type][Flags(1<<i)]\n\t\t\tif name != \"\" {\n\t\t\t\tbuf.WriteString(name)\n\t\t\t} else {\n\t\t\t\tfmt.Fprintf(buf, \"0x%x\", 1<<i)\n\t\t\t}\n\t\t}\n\t}\n\tif h.StreamID != 0 {\n\t\tfmt.Fprintf(buf, \" stream=%d\", h.StreamID)\n\t}\n\tfmt.Fprintf(buf, \" len=%d\", h.Length)\n}\n\nfunc (h *FrameHeader) checkValid() {\n\tif !h.valid {\n\t\tpanic(\"Frame accessor called on non-owned Frame\")\n\t}\n}\n\nfunc (h *FrameHeader) invalidate() { h.valid = false }\n\n// frame header bytes.\n// Used only by ReadFrameHeader.\nvar fhBytes = sync.Pool{\n\tNew: func() interface{} {\n\t\tbuf := make([]byte, frameHeaderLen)\n\t\treturn &buf\n\t},\n}\n\n// ReadFrameHeader reads 9 bytes from r and returns a FrameHeader.\n// Most users should use Framer.ReadFrame instead.\nfunc ReadFrameHeader(r io.Reader) (FrameHeader, error) {\n\tbufp := fhBytes.Get().(*[]byte)\n\tdefer fhBytes.Put(bufp)\n\treturn readFrameHeader(*bufp, r)\n}\n\nfunc readFrameHeader(buf []byte, r io.Reader) (FrameHeader, error) {\n\t_, err := io.ReadFull(r, buf[:frameHeaderLen])\n\tif err != nil {\n\t\treturn FrameHeader{}, err\n\t}\n\treturn FrameHeader{\n\t\tLength:   (uint32(buf[0])<<16 | uint32(buf[1])<<8 | uint32(buf[2])),\n\t\tType:     FrameType(buf[3]),\n\t\tFlags:    Flags(buf[4]),\n\t\tStreamID: binary.BigEndian.Uint32(buf[5:]) & (1<<31 - 1),\n\t\tvalid:    true,\n\t}, nil\n}\n\n// A Frame is the base interface implemented by all frame types.\n// Callers will generally type-assert the specific frame type:\n// *HeadersFrame, *SettingsFrame, *WindowUpdateFrame, etc.\n//\n// Frames are only valid until the next call to Framer.ReadFrame.\ntype Frame interface {\n\tHeader() FrameHeader\n\n\t// invalidate is called by Framer.ReadFrame to make this\n\t// frame's buffers as being invalid, since the subsequent\n\t// frame will reuse them.\n\tinvalidate()\n}\n\n// A Framer reads and writes Frames.\ntype Framer struct {\n\tr         io.Reader\n\tlastFrame Frame\n\terrDetail error\n\n\t// lastHeaderStream is non-zero if the last frame was an\n\t// unfinished HEADERS/CONTINUATION.\n\tlastHeaderStream uint32\n\n\tmaxReadSize uint32\n\theaderBuf   [frameHeaderLen]byte\n\n\t// TODO: let getReadBuf be configurable, and use a less memory-pinning\n\t// allocator in server.go to minimize memory pinned for many idle conns.\n\t// Will probably also need to make frame invalidation have a hook too.\n\tgetReadBuf func(size uint32) []byte\n\treadBuf    []byte // cache for default getReadBuf\n\n\tmaxWriteSize uint32 // zero means unlimited; TODO: implement\n\n\tw    io.Writer\n\twbuf []byte\n\n\t// AllowIllegalWrites permits the Framer's Write methods to\n\t// write frames that do not conform to the HTTP/2 spec. This\n\t// permits using the Framer to test other HTTP/2\n\t// implementations' conformance to the spec.\n\t// If false, the Write methods will prefer to return an error\n\t// rather than comply.\n\tAllowIllegalWrites bool\n\n\t// AllowIllegalReads permits the Framer's ReadFrame method\n\t// to return non-compliant frames or frame orders.\n\t// This is for testing and permits using the Framer to test\n\t// other HTTP/2 implementations' conformance to the spec.\n\t// It is not compatible with ReadMetaHeaders.\n\tAllowIllegalReads bool\n\n\t// ReadMetaHeaders if non-nil causes ReadFrame to merge\n\t// HEADERS and CONTINUATION frames together and return\n\t// MetaHeadersFrame instead.\n\tReadMetaHeaders *hpack.Decoder\n\n\t// MaxHeaderListSize is the http2 MAX_HEADER_LIST_SIZE.\n\t// It's used only if ReadMetaHeaders is set; 0 means a sane default\n\t// (currently 16MB)\n\t// If the limit is hit, MetaHeadersFrame.Truncated is set true.\n\tMaxHeaderListSize uint32\n\n\t// TODO: track which type of frame & with which flags was sent\n\t// last. Then return an error (unless AllowIllegalWrites) if\n\t// we're in the middle of a header block and a\n\t// non-Continuation or Continuation on a different stream is\n\t// attempted to be written.\n\n\tlogReads, logWrites bool\n\n\tdebugFramer       *Framer // only use for logging written writes\n\tdebugFramerBuf    *bytes.Buffer\n\tdebugReadLoggerf  func(string, ...interface{})\n\tdebugWriteLoggerf func(string, ...interface{})\n\n\tframeCache *frameCache // nil if frames aren't reused (default)\n}\n\nfunc (fr *Framer) maxHeaderListSize() uint32 {\n\tif fr.MaxHeaderListSize == 0 {\n\t\treturn 16 << 20 // sane default, per docs\n\t}\n\treturn fr.MaxHeaderListSize\n}\n\nfunc (f *Framer) startWrite(ftype FrameType, flags Flags, streamID uint32) {\n\t// Write the FrameHeader.\n\tf.wbuf = append(f.wbuf[:0],\n\t\t0, // 3 bytes of length, filled in in endWrite\n\t\t0,\n\t\t0,\n\t\tbyte(ftype),\n\t\tbyte(flags),\n\t\tbyte(streamID>>24),\n\t\tbyte(streamID>>16),\n\t\tbyte(streamID>>8),\n\t\tbyte(streamID))\n}\n\nfunc (f *Framer) endWrite() error {\n\t// Now that we know the final size, fill in the FrameHeader in\n\t// the space previously reserved for it. Abuse append.\n\tlength := len(f.wbuf) - frameHeaderLen\n\tif length >= (1 << 24) {\n\t\treturn ErrFrameTooLarge\n\t}\n\t_ = append(f.wbuf[:0],\n\t\tbyte(length>>16),\n\t\tbyte(length>>8),\n\t\tbyte(length))\n\tif f.logWrites {\n\t\tf.logWrite()\n\t}\n\n\tn, err := f.w.Write(f.wbuf)\n\tif err == nil && n != len(f.wbuf) {\n\t\terr = io.ErrShortWrite\n\t}\n\treturn err\n}\n\nfunc (f *Framer) logWrite() {\n\tif f.debugFramer == nil {\n\t\tf.debugFramerBuf = new(bytes.Buffer)\n\t\tf.debugFramer = NewFramer(nil, f.debugFramerBuf)\n\t\tf.debugFramer.logReads = false // we log it ourselves, saying \"wrote\" below\n\t\t// Let us read anything, even if we accidentally wrote it\n\t\t// in the wrong order:\n\t\tf.debugFramer.AllowIllegalReads = true\n\t}\n\tf.debugFramerBuf.Write(f.wbuf)\n\tfr, err := f.debugFramer.ReadFrame()\n\tif err != nil {\n\t\tf.debugWriteLoggerf(\"http2: Framer %p: failed to decode just-written frame\", f)\n\t\treturn\n\t}\n\tf.debugWriteLoggerf(\"http2: Framer %p: wrote %v\", f, summarizeFrame(fr))\n}\n\nfunc (f *Framer) writeByte(v byte)     { f.wbuf = append(f.wbuf, v) }\nfunc (f *Framer) writeBytes(v []byte)  { f.wbuf = append(f.wbuf, v...) }\nfunc (f *Framer) writeUint16(v uint16) { f.wbuf = append(f.wbuf, byte(v>>8), byte(v)) }\nfunc (f *Framer) writeUint32(v uint32) {\n\tf.wbuf = append(f.wbuf, byte(v>>24), byte(v>>16), byte(v>>8), byte(v))\n}\n\nconst (\n\tminMaxFrameSize = 1 << 14\n\tmaxFrameSize    = 1<<24 - 1\n)\n\n// SetReuseFrames allows the Framer to reuse Frames.\n// If called on a Framer, Frames returned by calls to ReadFrame are only\n// valid until the next call to ReadFrame.\nfunc (fr *Framer) SetReuseFrames() {\n\tif fr.frameCache != nil {\n\t\treturn\n\t}\n\tfr.frameCache = &frameCache{}\n}\n\ntype frameCache struct {\n\tdataFrame DataFrame\n}\n\nfunc (fc *frameCache) getDataFrame() *DataFrame {\n\tif fc == nil {\n\t\treturn &DataFrame{}\n\t}\n\treturn &fc.dataFrame\n}\n\n// NewFramer returns a Framer that writes frames to w and reads them from r.\nfunc NewFramer(w io.Writer, r io.Reader) *Framer {\n\tfr := &Framer{\n\t\tw:                 w,\n\t\tr:                 r,\n\t\tlogReads:          logFrameReads,\n\t\tlogWrites:         logFrameWrites,\n\t\tdebugReadLoggerf:  log.Printf,\n\t\tdebugWriteLoggerf: log.Printf,\n\t}\n\tfr.getReadBuf = func(size uint32) []byte {\n\t\tif cap(fr.readBuf) >= int(size) {\n\t\t\treturn fr.readBuf[:size]\n\t\t}\n\t\tfr.readBuf = make([]byte, size)\n\t\treturn fr.readBuf\n\t}\n\tfr.SetMaxReadFrameSize(maxFrameSize)\n\treturn fr\n}\n\n// SetMaxReadFrameSize sets the maximum size of a frame\n// that will be read by a subsequent call to ReadFrame.\n// It is the caller's responsibility to advertise this\n// limit with a SETTINGS frame.\nfunc (fr *Framer) SetMaxReadFrameSize(v uint32) {\n\tif v > maxFrameSize {\n\t\tv = maxFrameSize\n\t}\n\tfr.maxReadSize = v\n}\n\n// ErrorDetail returns a more detailed error of the last error\n// returned by Framer.ReadFrame. For instance, if ReadFrame\n// returns a StreamError with code PROTOCOL_ERROR, ErrorDetail\n// will say exactly what was invalid. ErrorDetail is not guaranteed\n// to return a non-nil value and like the rest of the http2 package,\n// its return value is not protected by an API compatibility promise.\n// ErrorDetail is reset after the next call to ReadFrame.\nfunc (fr *Framer) ErrorDetail() error {\n\treturn fr.errDetail\n}\n\n// ErrFrameTooLarge is returned from Framer.ReadFrame when the peer\n// sends a frame that is larger than declared with SetMaxReadFrameSize.\nvar ErrFrameTooLarge = errors.New(\"http2: frame too large\")\n\n// terminalReadFrameError reports whether err is an unrecoverable\n// error from ReadFrame and no other frames should be read.\nfunc terminalReadFrameError(err error) bool {\n\tif _, ok := err.(StreamError); ok {\n\t\treturn false\n\t}\n\treturn err != nil\n}\n\n// ReadFrame reads a single frame. The returned Frame is only valid\n// until the next call to ReadFrame.\n//\n// If the frame is larger than previously set with SetMaxReadFrameSize, the\n// returned error is ErrFrameTooLarge. Other errors may be of type\n// ConnectionError, StreamError, or anything else from the underlying\n// reader.\nfunc (fr *Framer) ReadFrame() (Frame, error) {\n\tfr.errDetail = nil\n\tif fr.lastFrame != nil {\n\t\tfr.lastFrame.invalidate()\n\t}\n\tfh, err := readFrameHeader(fr.headerBuf[:], fr.r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif fh.Length > fr.maxReadSize {\n\t\treturn nil, ErrFrameTooLarge\n\t}\n\tpayload := fr.getReadBuf(fh.Length)\n\tif _, err := io.ReadFull(fr.r, payload); err != nil {\n\t\treturn nil, err\n\t}\n\tf, err := typeFrameParser(fh.Type)(fr.frameCache, fh, payload)\n\tif err != nil {\n\t\tif ce, ok := err.(connError); ok {\n\t\t\treturn nil, fr.connError(ce.Code, ce.Reason)\n\t\t}\n\t\treturn nil, err\n\t}\n\tif err := fr.checkFrameOrder(f); err != nil {\n\t\treturn nil, err\n\t}\n\tif fr.logReads {\n\t\tfr.debugReadLoggerf(\"http2: Framer %p: read %v\", fr, summarizeFrame(f))\n\t}\n\tif fh.Type == FrameHeaders && fr.ReadMetaHeaders != nil {\n\t\treturn fr.readMetaFrame(f.(*HeadersFrame))\n\t}\n\treturn f, nil\n}\n\n// connError returns ConnectionError(code) but first\n// stashes away a public reason to the caller can optionally relay it\n// to the peer before hanging up on them. This might help others debug\n// their implementations.\nfunc (fr *Framer) connError(code ErrCode, reason string) error {\n\tfr.errDetail = errors.New(reason)\n\treturn ConnectionError(code)\n}\n\n// checkFrameOrder reports an error if f is an invalid frame to return\n// next from ReadFrame. Mostly it checks whether HEADERS and\n// CONTINUATION frames are contiguous.\nfunc (fr *Framer) checkFrameOrder(f Frame) error {\n\tlast := fr.lastFrame\n\tfr.lastFrame = f\n\tif fr.AllowIllegalReads {\n\t\treturn nil\n\t}\n\n\tfh := f.Header()\n\tif fr.lastHeaderStream != 0 {\n\t\tif fh.Type != FrameContinuation {\n\t\t\treturn fr.connError(ErrCodeProtocol,\n\t\t\t\tfmt.Sprintf(\"got %s for stream %d; expected CONTINUATION following %s for stream %d\",\n\t\t\t\t\tfh.Type, fh.StreamID,\n\t\t\t\t\tlast.Header().Type, fr.lastHeaderStream))\n\t\t}\n\t\tif fh.StreamID != fr.lastHeaderStream {\n\t\t\treturn fr.connError(ErrCodeProtocol,\n\t\t\t\tfmt.Sprintf(\"got CONTINUATION for stream %d; expected stream %d\",\n\t\t\t\t\tfh.StreamID, fr.lastHeaderStream))\n\t\t}\n\t} else if fh.Type == FrameContinuation {\n\t\treturn fr.connError(ErrCodeProtocol, fmt.Sprintf(\"unexpected CONTINUATION for stream %d\", fh.StreamID))\n\t}\n\n\tswitch fh.Type {\n\tcase FrameHeaders, FrameContinuation:\n\t\tif fh.Flags.Has(FlagHeadersEndHeaders) {\n\t\t\tfr.lastHeaderStream = 0\n\t\t} else {\n\t\t\tfr.lastHeaderStream = fh.StreamID\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// A DataFrame conveys arbitrary, variable-length sequences of octets\n// associated with a stream.\n// See http://http2.github.io/http2-spec/#rfc.section.6.1\ntype DataFrame struct {\n\tFrameHeader\n\tdata []byte\n}\n\nfunc (f *DataFrame) StreamEnded() bool {\n\treturn f.FrameHeader.Flags.Has(FlagDataEndStream)\n}\n\n// Data returns the frame's data octets, not including any padding\n// size byte or padding suffix bytes.\n// The caller must not retain the returned memory past the next\n// call to ReadFrame.\nfunc (f *DataFrame) Data() []byte {\n\tf.checkValid()\n\treturn f.data\n}\n\nfunc parseDataFrame(fc *frameCache, fh FrameHeader, payload []byte) (Frame, error) {\n\tif fh.StreamID == 0 {\n\t\t// DATA frames MUST be associated with a stream. If a\n\t\t// DATA frame is received whose stream identifier\n\t\t// field is 0x0, the recipient MUST respond with a\n\t\t// connection error (Section 5.4.1) of type\n\t\t// PROTOCOL_ERROR.\n\t\treturn nil, connError{ErrCodeProtocol, \"DATA frame with stream ID 0\"}\n\t}\n\tf := fc.getDataFrame()\n\tf.FrameHeader = fh\n\n\tvar padSize byte\n\tif fh.Flags.Has(FlagDataPadded) {\n\t\tvar err error\n\t\tpayload, padSize, err = readByte(payload)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\tif int(padSize) > len(payload) {\n\t\t// If the length of the padding is greater than the\n\t\t// length of the frame payload, the recipient MUST\n\t\t// treat this as a connection error.\n\t\t// Filed: https://github.com/http2/http2-spec/issues/610\n\t\treturn nil, connError{ErrCodeProtocol, \"pad size larger than data payload\"}\n\t}\n\tf.data = payload[:len(payload)-int(padSize)]\n\treturn f, nil\n}\n\nvar (\n\terrStreamID    = errors.New(\"invalid stream ID\")\n\terrDepStreamID = errors.New(\"invalid dependent stream ID\")\n\terrPadLength   = errors.New(\"pad length too large\")\n\terrPadBytes    = errors.New(\"padding bytes must all be zeros unless AllowIllegalWrites is enabled\")\n)\n\nfunc validStreamIDOrZero(streamID uint32) bool {\n\treturn streamID&(1<<31) == 0\n}\n\nfunc validStreamID(streamID uint32) bool {\n\treturn streamID != 0 && streamID&(1<<31) == 0\n}\n\n// WriteData writes a DATA frame.\n//\n// It will perform exactly one Write to the underlying Writer.\n// It is the caller's responsibility not to violate the maximum frame size\n// and to not call other Write methods concurrently.\nfunc (f *Framer) WriteData(streamID uint32, endStream bool, data []byte) error {\n\treturn f.WriteDataPadded(streamID, endStream, data, nil)\n}\n\n// WriteDataPadded writes a DATA frame with optional padding.\n//\n// If pad is nil, the padding bit is not sent.\n// The length of pad must not exceed 255 bytes.\n// The bytes of pad must all be zero, unless f.AllowIllegalWrites is set.\n//\n// It will perform exactly one Write to the underlying Writer.\n// It is the caller's responsibility not to violate the maximum frame size\n// and to not call other Write methods concurrently.\nfunc (f *Framer) WriteDataPadded(streamID uint32, endStream bool, data, pad []byte) error {\n\tif !validStreamID(streamID) && !f.AllowIllegalWrites {\n\t\treturn errStreamID\n\t}\n\tif len(pad) > 0 {\n\t\tif len(pad) > 255 {\n\t\t\treturn errPadLength\n\t\t}\n\t\tif !f.AllowIllegalWrites {\n\t\t\tfor _, b := range pad {\n\t\t\t\tif b != 0 {\n\t\t\t\t\t// \"Padding octets MUST be set to zero when sending.\"\n\t\t\t\t\treturn errPadBytes\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tvar flags Flags\n\tif endStream {\n\t\tflags |= FlagDataEndStream\n\t}\n\tif pad != nil {\n\t\tflags |= FlagDataPadded\n\t}\n\tf.startWrite(FrameData, flags, streamID)\n\tif pad != nil {\n\t\tf.wbuf = append(f.wbuf, byte(len(pad)))\n\t}\n\tf.wbuf = append(f.wbuf, data...)\n\tf.wbuf = append(f.wbuf, pad...)\n\treturn f.endWrite()\n}\n\n// A SettingsFrame conveys configuration parameters that affect how\n// endpoints communicate, such as preferences and constraints on peer\n// behavior.\n//\n// See http://http2.github.io/http2-spec/#SETTINGS\ntype SettingsFrame struct {\n\tFrameHeader\n\tp []byte\n}\n\nfunc parseSettingsFrame(_ *frameCache, fh FrameHeader, p []byte) (Frame, error) {\n\tif fh.Flags.Has(FlagSettingsAck) && fh.Length > 0 {\n\t\t// When this (ACK 0x1) bit is set, the payload of the\n\t\t// SETTINGS frame MUST be empty. Receipt of a\n\t\t// SETTINGS frame with the ACK flag set and a length\n\t\t// field value other than 0 MUST be treated as a\n\t\t// connection error (Section 5.4.1) of type\n\t\t// FRAME_SIZE_ERROR.\n\t\treturn nil, ConnectionError(ErrCodeFrameSize)\n\t}\n\tif fh.StreamID != 0 {\n\t\t// SETTINGS frames always apply to a connection,\n\t\t// never a single stream. The stream identifier for a\n\t\t// SETTINGS frame MUST be zero (0x0).  If an endpoint\n\t\t// receives a SETTINGS frame whose stream identifier\n\t\t// field is anything other than 0x0, the endpoint MUST\n\t\t// respond with a connection error (Section 5.4.1) of\n\t\t// type PROTOCOL_ERROR.\n\t\treturn nil, ConnectionError(ErrCodeProtocol)\n\t}\n\tif len(p)%6 != 0 {\n\t\t// Expecting even number of 6 byte settings.\n\t\treturn nil, ConnectionError(ErrCodeFrameSize)\n\t}\n\tf := &SettingsFrame{FrameHeader: fh, p: p}\n\tif v, ok := f.Value(SettingInitialWindowSize); ok && v > (1<<31)-1 {\n\t\t// Values above the maximum flow control window size of 2^31 - 1 MUST\n\t\t// be treated as a connection error (Section 5.4.1) of type\n\t\t// FLOW_CONTROL_ERROR.\n\t\treturn nil, ConnectionError(ErrCodeFlowControl)\n\t}\n\treturn f, nil\n}\n\nfunc (f *SettingsFrame) IsAck() bool {\n\treturn f.FrameHeader.Flags.Has(FlagSettingsAck)\n}\n\nfunc (f *SettingsFrame) Value(id SettingID) (v uint32, ok bool) {\n\tf.checkValid()\n\tfor i := 0; i < f.NumSettings(); i++ {\n\t\tif s := f.Setting(i); s.ID == id {\n\t\t\treturn s.Val, true\n\t\t}\n\t}\n\treturn 0, false\n}\n\n// Setting returns the setting from the frame at the given 0-based index.\n// The index must be >= 0 and less than f.NumSettings().\nfunc (f *SettingsFrame) Setting(i int) Setting {\n\tbuf := f.p\n\treturn Setting{\n\t\tID:  SettingID(binary.BigEndian.Uint16(buf[i*6 : i*6+2])),\n\t\tVal: binary.BigEndian.Uint32(buf[i*6+2 : i*6+6]),\n\t}\n}\n\nfunc (f *SettingsFrame) NumSettings() int { return len(f.p) / 6 }\n\n// HasDuplicates reports whether f contains any duplicate setting IDs.\nfunc (f *SettingsFrame) HasDuplicates() bool {\n\tnum := f.NumSettings()\n\tif num == 0 {\n\t\treturn false\n\t}\n\t// If it's small enough (the common case), just do the n^2\n\t// thing and avoid a map allocation.\n\tif num < 10 {\n\t\tfor i := 0; i < num; i++ {\n\t\t\tidi := f.Setting(i).ID\n\t\t\tfor j := i + 1; j < num; j++ {\n\t\t\t\tidj := f.Setting(j).ID\n\t\t\t\tif idi == idj {\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn false\n\t}\n\tseen := map[SettingID]bool{}\n\tfor i := 0; i < num; i++ {\n\t\tid := f.Setting(i).ID\n\t\tif seen[id] {\n\t\t\treturn true\n\t\t}\n\t\tseen[id] = true\n\t}\n\treturn false\n}\n\n// ForeachSetting runs fn for each setting.\n// It stops and returns the first error.\nfunc (f *SettingsFrame) ForeachSetting(fn func(Setting) error) error {\n\tf.checkValid()\n\tfor i := 0; i < f.NumSettings(); i++ {\n\t\tif err := fn(f.Setting(i)); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// WriteSettings writes a SETTINGS frame with zero or more settings\n// specified and the ACK bit not set.\n//\n// It will perform exactly one Write to the underlying Writer.\n// It is the caller's responsibility to not call other Write methods concurrently.\nfunc (f *Framer) WriteSettings(settings ...Setting) error {\n\tf.startWrite(FrameSettings, 0, 0)\n\tfor _, s := range settings {\n\t\tf.writeUint16(uint16(s.ID))\n\t\tf.writeUint32(s.Val)\n\t}\n\treturn f.endWrite()\n}\n\n// WriteSettingsAck writes an empty SETTINGS frame with the ACK bit set.\n//\n// It will perform exactly one Write to the underlying Writer.\n// It is the caller's responsibility to not call other Write methods concurrently.\nfunc (f *Framer) WriteSettingsAck() error {\n\tf.startWrite(FrameSettings, FlagSettingsAck, 0)\n\treturn f.endWrite()\n}\n\n// A PingFrame is a mechanism for measuring a minimal round trip time\n// from the sender, as well as determining whether an idle connection\n// is still functional.\n// See http://http2.github.io/http2-spec/#rfc.section.6.7\ntype PingFrame struct {\n\tFrameHeader\n\tData [8]byte\n}\n\nfunc (f *PingFrame) IsAck() bool { return f.Flags.Has(FlagPingAck) }\n\nfunc parsePingFrame(_ *frameCache, fh FrameHeader, payload []byte) (Frame, error) {\n\tif len(payload) != 8 {\n\t\treturn nil, ConnectionError(ErrCodeFrameSize)\n\t}\n\tif fh.StreamID != 0 {\n\t\treturn nil, ConnectionError(ErrCodeProtocol)\n\t}\n\tf := &PingFrame{FrameHeader: fh}\n\tcopy(f.Data[:], payload)\n\treturn f, nil\n}\n\nfunc (f *Framer) WritePing(ack bool, data [8]byte) error {\n\tvar flags Flags\n\tif ack {\n\t\tflags = FlagPingAck\n\t}\n\tf.startWrite(FramePing, flags, 0)\n\tf.writeBytes(data[:])\n\treturn f.endWrite()\n}\n\n// A GoAwayFrame informs the remote peer to stop creating streams on this connection.\n// See http://http2.github.io/http2-spec/#rfc.section.6.8\ntype GoAwayFrame struct {\n\tFrameHeader\n\tLastStreamID uint32\n\tErrCode      ErrCode\n\tdebugData    []byte\n}\n\n// DebugData returns any debug data in the GOAWAY frame. Its contents\n// are not defined.\n// The caller must not retain the returned memory past the next\n// call to ReadFrame.\nfunc (f *GoAwayFrame) DebugData() []byte {\n\tf.checkValid()\n\treturn f.debugData\n}\n\nfunc parseGoAwayFrame(_ *frameCache, fh FrameHeader, p []byte) (Frame, error) {\n\tif fh.StreamID != 0 {\n\t\treturn nil, ConnectionError(ErrCodeProtocol)\n\t}\n\tif len(p) < 8 {\n\t\treturn nil, ConnectionError(ErrCodeFrameSize)\n\t}\n\treturn &GoAwayFrame{\n\t\tFrameHeader:  fh,\n\t\tLastStreamID: binary.BigEndian.Uint32(p[:4]) & (1<<31 - 1),\n\t\tErrCode:      ErrCode(binary.BigEndian.Uint32(p[4:8])),\n\t\tdebugData:    p[8:],\n\t}, nil\n}\n\nfunc (f *Framer) WriteGoAway(maxStreamID uint32, code ErrCode, debugData []byte) error {\n\tf.startWrite(FrameGoAway, 0, 0)\n\tf.writeUint32(maxStreamID & (1<<31 - 1))\n\tf.writeUint32(uint32(code))\n\tf.writeBytes(debugData)\n\treturn f.endWrite()\n}\n\n// An UnknownFrame is the frame type returned when the frame type is unknown\n// or no specific frame type parser exists.\ntype UnknownFrame struct {\n\tFrameHeader\n\tp []byte\n}\n\n// Payload returns the frame's payload (after the header).  It is not\n// valid to call this method after a subsequent call to\n// Framer.ReadFrame, nor is it valid to retain the returned slice.\n// The memory is owned by the Framer and is invalidated when the next\n// frame is read.\nfunc (f *UnknownFrame) Payload() []byte {\n\tf.checkValid()\n\treturn f.p\n}\n\nfunc parseUnknownFrame(_ *frameCache, fh FrameHeader, p []byte) (Frame, error) {\n\treturn &UnknownFrame{fh, p}, nil\n}\n\n// A WindowUpdateFrame is used to implement flow control.\n// See http://http2.github.io/http2-spec/#rfc.section.6.9\ntype WindowUpdateFrame struct {\n\tFrameHeader\n\tIncrement uint32 // never read with high bit set\n}\n\nfunc parseWindowUpdateFrame(_ *frameCache, fh FrameHeader, p []byte) (Frame, error) {\n\tif len(p) != 4 {\n\t\treturn nil, ConnectionError(ErrCodeFrameSize)\n\t}\n\tinc := binary.BigEndian.Uint32(p[:4]) & 0x7fffffff // mask off high reserved bit\n\tif inc == 0 {\n\t\t// A receiver MUST treat the receipt of a\n\t\t// WINDOW_UPDATE frame with an flow control window\n\t\t// increment of 0 as a stream error (Section 5.4.2) of\n\t\t// type PROTOCOL_ERROR; errors on the connection flow\n\t\t// control window MUST be treated as a connection\n\t\t// error (Section 5.4.1).\n\t\tif fh.StreamID == 0 {\n\t\t\treturn nil, ConnectionError(ErrCodeProtocol)\n\t\t}\n\t\treturn nil, streamError(fh.StreamID, ErrCodeProtocol)\n\t}\n\treturn &WindowUpdateFrame{\n\t\tFrameHeader: fh,\n\t\tIncrement:   inc,\n\t}, nil\n}\n\n// WriteWindowUpdate writes a WINDOW_UPDATE frame.\n// The increment value must be between 1 and 2,147,483,647, inclusive.\n// If the Stream ID is zero, the window update applies to the\n// connection as a whole.\nfunc (f *Framer) WriteWindowUpdate(streamID, incr uint32) error {\n\t// \"The legal range for the increment to the flow control window is 1 to 2^31-1 (2,147,483,647) octets.\"\n\tif (incr < 1 || incr > 2147483647) && !f.AllowIllegalWrites {\n\t\treturn errors.New(\"illegal window increment value\")\n\t}\n\tf.startWrite(FrameWindowUpdate, 0, streamID)\n\tf.writeUint32(incr)\n\treturn f.endWrite()\n}\n\n// A HeadersFrame is used to open a stream and additionally carries a\n// header block fragment.\ntype HeadersFrame struct {\n\tFrameHeader\n\n\t// Priority is set if FlagHeadersPriority is set in the FrameHeader.\n\tPriority PriorityParam\n\n\theaderFragBuf []byte // not owned\n}\n\nfunc (f *HeadersFrame) HeaderBlockFragment() []byte {\n\tf.checkValid()\n\treturn f.headerFragBuf\n}\n\nfunc (f *HeadersFrame) HeadersEnded() bool {\n\treturn f.FrameHeader.Flags.Has(FlagHeadersEndHeaders)\n}\n\nfunc (f *HeadersFrame) StreamEnded() bool {\n\treturn f.FrameHeader.Flags.Has(FlagHeadersEndStream)\n}\n\nfunc (f *HeadersFrame) HasPriority() bool {\n\treturn f.FrameHeader.Flags.Has(FlagHeadersPriority)\n}\n\nfunc parseHeadersFrame(_ *frameCache, fh FrameHeader, p []byte) (_ Frame, err error) {\n\thf := &HeadersFrame{\n\t\tFrameHeader: fh,\n\t}\n\tif fh.StreamID == 0 {\n\t\t// HEADERS frames MUST be associated with a stream. If a HEADERS frame\n\t\t// is received whose stream identifier field is 0x0, the recipient MUST\n\t\t// respond with a connection error (Section 5.4.1) of type\n\t\t// PROTOCOL_ERROR.\n\t\treturn nil, connError{ErrCodeProtocol, \"HEADERS frame with stream ID 0\"}\n\t}\n\tvar padLength uint8\n\tif fh.Flags.Has(FlagHeadersPadded) {\n\t\tif p, padLength, err = readByte(p); err != nil {\n\t\t\treturn\n\t\t}\n\t}\n\tif fh.Flags.Has(FlagHeadersPriority) {\n\t\tvar v uint32\n\t\tp, v, err = readUint32(p)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\thf.Priority.StreamDep = v & 0x7fffffff\n\t\thf.Priority.Exclusive = (v != hf.Priority.StreamDep) // high bit was set\n\t\tp, hf.Priority.Weight, err = readByte(p)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\tif len(p)-int(padLength) <= 0 {\n\t\treturn nil, streamError(fh.StreamID, ErrCodeProtocol)\n\t}\n\thf.headerFragBuf = p[:len(p)-int(padLength)]\n\treturn hf, nil\n}\n\n// HeadersFrameParam are the parameters for writing a HEADERS frame.\ntype HeadersFrameParam struct {\n\t// StreamID is the required Stream ID to initiate.\n\tStreamID uint32\n\t// BlockFragment is part (or all) of a Header Block.\n\tBlockFragment []byte\n\n\t// EndStream indicates that the header block is the last that\n\t// the endpoint will send for the identified stream. Setting\n\t// this flag causes the stream to enter one of \"half closed\"\n\t// states.\n\tEndStream bool\n\n\t// EndHeaders indicates that this frame contains an entire\n\t// header block and is not followed by any\n\t// CONTINUATION frames.\n\tEndHeaders bool\n\n\t// PadLength is the optional number of bytes of zeros to add\n\t// to this frame.\n\tPadLength uint8\n\n\t// Priority, if non-zero, includes stream priority information\n\t// in the HEADER frame.\n\tPriority PriorityParam\n}\n\n// WriteHeaders writes a single HEADERS frame.\n//\n// This is a low-level header writing method. Encoding headers and\n// splitting them into any necessary CONTINUATION frames is handled\n// elsewhere.\n//\n// It will perform exactly one Write to the underlying Writer.\n// It is the caller's responsibility to not call other Write methods concurrently.\nfunc (f *Framer) WriteHeaders(p HeadersFrameParam) error {\n\tif !validStreamID(p.StreamID) && !f.AllowIllegalWrites {\n\t\treturn errStreamID\n\t}\n\tvar flags Flags\n\tif p.PadLength != 0 {\n\t\tflags |= FlagHeadersPadded\n\t}\n\tif p.EndStream {\n\t\tflags |= FlagHeadersEndStream\n\t}\n\tif p.EndHeaders {\n\t\tflags |= FlagHeadersEndHeaders\n\t}\n\tif !p.Priority.IsZero() {\n\t\tflags |= FlagHeadersPriority\n\t}\n\tf.startWrite(FrameHeaders, flags, p.StreamID)\n\tif p.PadLength != 0 {\n\t\tf.writeByte(p.PadLength)\n\t}\n\tif !p.Priority.IsZero() {\n\t\tv := p.Priority.StreamDep\n\t\tif !validStreamIDOrZero(v) && !f.AllowIllegalWrites {\n\t\t\treturn errDepStreamID\n\t\t}\n\t\tif p.Priority.Exclusive {\n\t\t\tv |= 1 << 31\n\t\t}\n\t\tf.writeUint32(v)\n\t\tf.writeByte(p.Priority.Weight)\n\t}\n\tf.wbuf = append(f.wbuf, p.BlockFragment...)\n\tf.wbuf = append(f.wbuf, padZeros[:p.PadLength]...)\n\treturn f.endWrite()\n}\n\n// A PriorityFrame specifies the sender-advised priority of a stream.\n// See http://http2.github.io/http2-spec/#rfc.section.6.3\ntype PriorityFrame struct {\n\tFrameHeader\n\tPriorityParam\n}\n\n// PriorityParam are the stream prioritzation parameters.\ntype PriorityParam struct {\n\t// StreamDep is a 31-bit stream identifier for the\n\t// stream that this stream depends on. Zero means no\n\t// dependency.\n\tStreamDep uint32\n\n\t// Exclusive is whether the dependency is exclusive.\n\tExclusive bool\n\n\t// Weight is the stream's zero-indexed weight. It should be\n\t// set together with StreamDep, or neither should be set. Per\n\t// the spec, \"Add one to the value to obtain a weight between\n\t// 1 and 256.\"\n\tWeight uint8\n}\n\nfunc (p PriorityParam) IsZero() bool {\n\treturn p == PriorityParam{}\n}\n\nfunc parsePriorityFrame(_ *frameCache, fh FrameHeader, payload []byte) (Frame, error) {\n\tif fh.StreamID == 0 {\n\t\treturn nil, connError{ErrCodeProtocol, \"PRIORITY frame with stream ID 0\"}\n\t}\n\tif len(payload) != 5 {\n\t\treturn nil, connError{ErrCodeFrameSize, fmt.Sprintf(\"PRIORITY frame payload size was %d; want 5\", len(payload))}\n\t}\n\tv := binary.BigEndian.Uint32(payload[:4])\n\tstreamID := v & 0x7fffffff // mask off high bit\n\treturn &PriorityFrame{\n\t\tFrameHeader: fh,\n\t\tPriorityParam: PriorityParam{\n\t\t\tWeight:    payload[4],\n\t\t\tStreamDep: streamID,\n\t\t\tExclusive: streamID != v, // was high bit set?\n\t\t},\n\t}, nil\n}\n\n// WritePriority writes a PRIORITY frame.\n//\n// It will perform exactly one Write to the underlying Writer.\n// It is the caller's responsibility to not call other Write methods concurrently.\nfunc (f *Framer) WritePriority(streamID uint32, p PriorityParam) error {\n\tif !validStreamID(streamID) && !f.AllowIllegalWrites {\n\t\treturn errStreamID\n\t}\n\tif !validStreamIDOrZero(p.StreamDep) {\n\t\treturn errDepStreamID\n\t}\n\tf.startWrite(FramePriority, 0, streamID)\n\tv := p.StreamDep\n\tif p.Exclusive {\n\t\tv |= 1 << 31\n\t}\n\tf.writeUint32(v)\n\tf.writeByte(p.Weight)\n\treturn f.endWrite()\n}\n\n// A RSTStreamFrame allows for abnormal termination of a stream.\n// See http://http2.github.io/http2-spec/#rfc.section.6.4\ntype RSTStreamFrame struct {\n\tFrameHeader\n\tErrCode ErrCode\n}\n\nfunc parseRSTStreamFrame(_ *frameCache, fh FrameHeader, p []byte) (Frame, error) {\n\tif len(p) != 4 {\n\t\treturn nil, ConnectionError(ErrCodeFrameSize)\n\t}\n\tif fh.StreamID == 0 {\n\t\treturn nil, ConnectionError(ErrCodeProtocol)\n\t}\n\treturn &RSTStreamFrame{fh, ErrCode(binary.BigEndian.Uint32(p[:4]))}, nil\n}\n\n// WriteRSTStream writes a RST_STREAM frame.\n//\n// It will perform exactly one Write to the underlying Writer.\n// It is the caller's responsibility to not call other Write methods concurrently.\nfunc (f *Framer) WriteRSTStream(streamID uint32, code ErrCode) error {\n\tif !validStreamID(streamID) && !f.AllowIllegalWrites {\n\t\treturn errStreamID\n\t}\n\tf.startWrite(FrameRSTStream, 0, streamID)\n\tf.writeUint32(uint32(code))\n\treturn f.endWrite()\n}\n\n// A ContinuationFrame is used to continue a sequence of header block fragments.\n// See http://http2.github.io/http2-spec/#rfc.section.6.10\ntype ContinuationFrame struct {\n\tFrameHeader\n\theaderFragBuf []byte\n}\n\nfunc parseContinuationFrame(_ *frameCache, fh FrameHeader, p []byte) (Frame, error) {\n\tif fh.StreamID == 0 {\n\t\treturn nil, connError{ErrCodeProtocol, \"CONTINUATION frame with stream ID 0\"}\n\t}\n\treturn &ContinuationFrame{fh, p}, nil\n}\n\nfunc (f *ContinuationFrame) HeaderBlockFragment() []byte {\n\tf.checkValid()\n\treturn f.headerFragBuf\n}\n\nfunc (f *ContinuationFrame) HeadersEnded() bool {\n\treturn f.FrameHeader.Flags.Has(FlagContinuationEndHeaders)\n}\n\n// WriteContinuation writes a CONTINUATION frame.\n//\n// It will perform exactly one Write to the underlying Writer.\n// It is the caller's responsibility to not call other Write methods concurrently.\nfunc (f *Framer) WriteContinuation(streamID uint32, endHeaders bool, headerBlockFragment []byte) error {\n\tif !validStreamID(streamID) && !f.AllowIllegalWrites {\n\t\treturn errStreamID\n\t}\n\tvar flags Flags\n\tif endHeaders {\n\t\tflags |= FlagContinuationEndHeaders\n\t}\n\tf.startWrite(FrameContinuation, flags, streamID)\n\tf.wbuf = append(f.wbuf, headerBlockFragment...)\n\treturn f.endWrite()\n}\n\n// A PushPromiseFrame is used to initiate a server stream.\n// See http://http2.github.io/http2-spec/#rfc.section.6.6\ntype PushPromiseFrame struct {\n\tFrameHeader\n\tPromiseID     uint32\n\theaderFragBuf []byte // not owned\n}\n\nfunc (f *PushPromiseFrame) HeaderBlockFragment() []byte {\n\tf.checkValid()\n\treturn f.headerFragBuf\n}\n\nfunc (f *PushPromiseFrame) HeadersEnded() bool {\n\treturn f.FrameHeader.Flags.Has(FlagPushPromiseEndHeaders)\n}\n\nfunc parsePushPromise(_ *frameCache, fh FrameHeader, p []byte) (_ Frame, err error) {\n\tpp := &PushPromiseFrame{\n\t\tFrameHeader: fh,\n\t}\n\tif pp.StreamID == 0 {\n\t\t// PUSH_PROMISE frames MUST be associated with an existing,\n\t\t// peer-initiated stream. The stream identifier of a\n\t\t// PUSH_PROMISE frame indicates the stream it is associated\n\t\t// with. If the stream identifier field specifies the value\n\t\t// 0x0, a recipient MUST respond with a connection error\n\t\t// (Section 5.4.1) of type PROTOCOL_ERROR.\n\t\treturn nil, ConnectionError(ErrCodeProtocol)\n\t}\n\t// The PUSH_PROMISE frame includes optional padding.\n\t// Padding fields and flags are identical to those defined for DATA frames\n\tvar padLength uint8\n\tif fh.Flags.Has(FlagPushPromisePadded) {\n\t\tif p, padLength, err = readByte(p); err != nil {\n\t\t\treturn\n\t\t}\n\t}\n\n\tp, pp.PromiseID, err = readUint32(p)\n\tif err != nil {\n\t\treturn\n\t}\n\tpp.PromiseID = pp.PromiseID & (1<<31 - 1)\n\n\tif int(padLength) > len(p) {\n\t\t// like the DATA frame, error out if padding is longer than the body.\n\t\treturn nil, ConnectionError(ErrCodeProtocol)\n\t}\n\tpp.headerFragBuf = p[:len(p)-int(padLength)]\n\treturn pp, nil\n}\n\n// PushPromiseParam are the parameters for writing a PUSH_PROMISE frame.\ntype PushPromiseParam struct {\n\t// StreamID is the required Stream ID to initiate.\n\tStreamID uint32\n\n\t// PromiseID is the required Stream ID which this\n\t// Push Promises\n\tPromiseID uint32\n\n\t// BlockFragment is part (or all) of a Header Block.\n\tBlockFragment []byte\n\n\t// EndHeaders indicates that this frame contains an entire\n\t// header block and is not followed by any\n\t// CONTINUATION frames.\n\tEndHeaders bool\n\n\t// PadLength is the optional number of bytes of zeros to add\n\t// to this frame.\n\tPadLength uint8\n}\n\n// WritePushPromise writes a single PushPromise Frame.\n//\n// As with Header Frames, This is the low level call for writing\n// individual frames. Continuation frames are handled elsewhere.\n//\n// It will perform exactly one Write to the underlying Writer.\n// It is the caller's responsibility to not call other Write methods concurrently.\nfunc (f *Framer) WritePushPromise(p PushPromiseParam) error {\n\tif !validStreamID(p.StreamID) && !f.AllowIllegalWrites {\n\t\treturn errStreamID\n\t}\n\tvar flags Flags\n\tif p.PadLength != 0 {\n\t\tflags |= FlagPushPromisePadded\n\t}\n\tif p.EndHeaders {\n\t\tflags |= FlagPushPromiseEndHeaders\n\t}\n\tf.startWrite(FramePushPromise, flags, p.StreamID)\n\tif p.PadLength != 0 {\n\t\tf.writeByte(p.PadLength)\n\t}\n\tif !validStreamID(p.PromiseID) && !f.AllowIllegalWrites {\n\t\treturn errStreamID\n\t}\n\tf.writeUint32(p.PromiseID)\n\tf.wbuf = append(f.wbuf, p.BlockFragment...)\n\tf.wbuf = append(f.wbuf, padZeros[:p.PadLength]...)\n\treturn f.endWrite()\n}\n\n// WriteRawFrame writes a raw frame. This can be used to write\n// extension frames unknown to this package.\nfunc (f *Framer) WriteRawFrame(t FrameType, flags Flags, streamID uint32, payload []byte) error {\n\tf.startWrite(t, flags, streamID)\n\tf.writeBytes(payload)\n\treturn f.endWrite()\n}\n\nfunc readByte(p []byte) (remain []byte, b byte, err error) {\n\tif len(p) == 0 {\n\t\treturn nil, 0, io.ErrUnexpectedEOF\n\t}\n\treturn p[1:], p[0], nil\n}\n\nfunc readUint32(p []byte) (remain []byte, v uint32, err error) {\n\tif len(p) < 4 {\n\t\treturn nil, 0, io.ErrUnexpectedEOF\n\t}\n\treturn p[4:], binary.BigEndian.Uint32(p[:4]), nil\n}\n\ntype streamEnder interface {\n\tStreamEnded() bool\n}\n\ntype headersEnder interface {\n\tHeadersEnded() bool\n}\n\ntype headersOrContinuation interface {\n\theadersEnder\n\tHeaderBlockFragment() []byte\n}\n\n// A MetaHeadersFrame is the representation of one HEADERS frame and\n// zero or more contiguous CONTINUATION frames and the decoding of\n// their HPACK-encoded contents.\n//\n// This type of frame does not appear on the wire and is only returned\n// by the Framer when Framer.ReadMetaHeaders is set.\ntype MetaHeadersFrame struct {\n\t*HeadersFrame\n\n\t// Fields are the fields contained in the HEADERS and\n\t// CONTINUATION frames. The underlying slice is owned by the\n\t// Framer and must not be retained after the next call to\n\t// ReadFrame.\n\t//\n\t// Fields are guaranteed to be in the correct http2 order and\n\t// not have unknown pseudo header fields or invalid header\n\t// field names or values. Required pseudo header fields may be\n\t// missing, however. Use the MetaHeadersFrame.Pseudo accessor\n\t// method access pseudo headers.\n\tFields []hpack.HeaderField\n\n\t// Truncated is whether the max header list size limit was hit\n\t// and Fields is incomplete. The hpack decoder state is still\n\t// valid, however.\n\tTruncated bool\n}\n\n// PseudoValue returns the given pseudo header field's value.\n// The provided pseudo field should not contain the leading colon.\nfunc (mh *MetaHeadersFrame) PseudoValue(pseudo string) string {\n\tfor _, hf := range mh.Fields {\n\t\tif !hf.IsPseudo() {\n\t\t\treturn \"\"\n\t\t}\n\t\tif hf.Name[1:] == pseudo {\n\t\t\treturn hf.Value\n\t\t}\n\t}\n\treturn \"\"\n}\n\n// RegularFields returns the regular (non-pseudo) header fields of mh.\n// The caller does not own the returned slice.\nfunc (mh *MetaHeadersFrame) RegularFields() []hpack.HeaderField {\n\tfor i, hf := range mh.Fields {\n\t\tif !hf.IsPseudo() {\n\t\t\treturn mh.Fields[i:]\n\t\t}\n\t}\n\treturn nil\n}\n\n// PseudoFields returns the pseudo header fields of mh.\n// The caller does not own the returned slice.\nfunc (mh *MetaHeadersFrame) PseudoFields() []hpack.HeaderField {\n\tfor i, hf := range mh.Fields {\n\t\tif !hf.IsPseudo() {\n\t\t\treturn mh.Fields[:i]\n\t\t}\n\t}\n\treturn mh.Fields\n}\n\nfunc (mh *MetaHeadersFrame) checkPseudos() error {\n\tvar isRequest, isResponse bool\n\tpf := mh.PseudoFields()\n\tfor i, hf := range pf {\n\t\tswitch hf.Name {\n\t\tcase \":method\", \":path\", \":scheme\", \":authority\":\n\t\t\tisRequest = true\n\t\tcase \":status\":\n\t\t\tisResponse = true\n\t\tdefault:\n\t\t\treturn pseudoHeaderError(hf.Name)\n\t\t}\n\t\t// Check for duplicates.\n\t\t// This would be a bad algorithm, but N is 4.\n\t\t// And this doesn't allocate.\n\t\tfor _, hf2 := range pf[:i] {\n\t\t\tif hf.Name == hf2.Name {\n\t\t\t\treturn duplicatePseudoHeaderError(hf.Name)\n\t\t\t}\n\t\t}\n\t}\n\tif isRequest && isResponse {\n\t\treturn errMixPseudoHeaderTypes\n\t}\n\treturn nil\n}\n\nfunc (fr *Framer) maxHeaderStringLen() int {\n\tv := fr.maxHeaderListSize()\n\tif uint32(int(v)) == v {\n\t\treturn int(v)\n\t}\n\t// They had a crazy big number for MaxHeaderBytes anyway,\n\t// so give them unlimited header lengths:\n\treturn 0\n}\n\n// readMetaFrame returns 0 or more CONTINUATION frames from fr and\n// merge them into the provided hf and returns a MetaHeadersFrame\n// with the decoded hpack values.\nfunc (fr *Framer) readMetaFrame(hf *HeadersFrame) (*MetaHeadersFrame, error) {\n\tif fr.AllowIllegalReads {\n\t\treturn nil, errors.New(\"illegal use of AllowIllegalReads with ReadMetaHeaders\")\n\t}\n\tmh := &MetaHeadersFrame{\n\t\tHeadersFrame: hf,\n\t}\n\tvar remainSize = fr.maxHeaderListSize()\n\tvar sawRegular bool\n\n\tvar invalid error // pseudo header field errors\n\thdec := fr.ReadMetaHeaders\n\thdec.SetEmitEnabled(true)\n\thdec.SetMaxStringLength(fr.maxHeaderStringLen())\n\thdec.SetEmitFunc(func(hf hpack.HeaderField) {\n\t\tif VerboseLogs && fr.logReads {\n\t\t\tfr.debugReadLoggerf(\"http2: decoded hpack field %+v\", hf)\n\t\t}\n\t\tif !httpguts.ValidHeaderFieldValue(hf.Value) {\n\t\t\tinvalid = headerFieldValueError(hf.Value)\n\t\t}\n\t\tisPseudo := strings.HasPrefix(hf.Name, \":\")\n\t\tif isPseudo {\n\t\t\tif sawRegular {\n\t\t\t\tinvalid = errPseudoAfterRegular\n\t\t\t}\n\t\t} else {\n\t\t\tsawRegular = true\n\t\t\tif !validWireHeaderFieldName(hf.Name) {\n\t\t\t\tinvalid = headerFieldNameError(hf.Name)\n\t\t\t}\n\t\t}\n\n\t\tif invalid != nil {\n\t\t\thdec.SetEmitEnabled(false)\n\t\t\treturn\n\t\t}\n\n\t\tsize := hf.Size()\n\t\tif size > remainSize {\n\t\t\thdec.SetEmitEnabled(false)\n\t\t\tmh.Truncated = true\n\t\t\treturn\n\t\t}\n\t\tremainSize -= size\n\n\t\tmh.Fields = append(mh.Fields, hf)\n\t})\n\t// Lose reference to MetaHeadersFrame:\n\tdefer hdec.SetEmitFunc(func(hf hpack.HeaderField) {})\n\n\tvar hc headersOrContinuation = hf\n\tfor {\n\t\tfrag := hc.HeaderBlockFragment()\n\t\tif _, err := hdec.Write(frag); err != nil {\n\t\t\treturn nil, ConnectionError(ErrCodeCompression)\n\t\t}\n\n\t\tif hc.HeadersEnded() {\n\t\t\tbreak\n\t\t}\n\t\tif f, err := fr.ReadFrame(); err != nil {\n\t\t\treturn nil, err\n\t\t} else {\n\t\t\thc = f.(*ContinuationFrame) // guaranteed by checkFrameOrder\n\t\t}\n\t}\n\n\tmh.HeadersFrame.headerFragBuf = nil\n\tmh.HeadersFrame.invalidate()\n\n\tif err := hdec.Close(); err != nil {\n\t\treturn nil, ConnectionError(ErrCodeCompression)\n\t}\n\tif invalid != nil {\n\t\tfr.errDetail = invalid\n\t\tif VerboseLogs {\n\t\t\tlog.Printf(\"http2: invalid header: %v\", invalid)\n\t\t}\n\t\treturn nil, StreamError{mh.StreamID, ErrCodeProtocol, invalid}\n\t}\n\tif err := mh.checkPseudos(); err != nil {\n\t\tfr.errDetail = err\n\t\tif VerboseLogs {\n\t\t\tlog.Printf(\"http2: invalid pseudo headers: %v\", err)\n\t\t}\n\t\treturn nil, StreamError{mh.StreamID, ErrCodeProtocol, err}\n\t}\n\treturn mh, nil\n}\n\nfunc summarizeFrame(f Frame) string {\n\tvar buf bytes.Buffer\n\tf.Header().writeDebug(&buf)\n\tswitch f := f.(type) {\n\tcase *SettingsFrame:\n\t\tn := 0\n\t\tf.ForeachSetting(func(s Setting) error {\n\t\t\tn++\n\t\t\tif n == 1 {\n\t\t\t\tbuf.WriteString(\", settings:\")\n\t\t\t}\n\t\t\tfmt.Fprintf(&buf, \" %v=%v,\", s.ID, s.Val)\n\t\t\treturn nil\n\t\t})\n\t\tif n > 0 {\n\t\t\tbuf.Truncate(buf.Len() - 1) // remove trailing comma\n\t\t}\n\tcase *DataFrame:\n\t\tdata := f.Data()\n\t\tconst max = 256\n\t\tif len(data) > max {\n\t\t\tdata = data[:max]\n\t\t}\n\t\tfmt.Fprintf(&buf, \" data=%q\", data)\n\t\tif len(f.Data()) > max {\n\t\t\tfmt.Fprintf(&buf, \" (%d bytes omitted)\", len(f.Data())-max)\n\t\t}\n\tcase *WindowUpdateFrame:\n\t\tif f.StreamID == 0 {\n\t\t\tbuf.WriteString(\" (conn)\")\n\t\t}\n\t\tfmt.Fprintf(&buf, \" incr=%v\", f.Increment)\n\tcase *PingFrame:\n\t\tfmt.Fprintf(&buf, \" ping=%q\", f.Data[:])\n\tcase *GoAwayFrame:\n\t\tfmt.Fprintf(&buf, \" LastStreamID=%v ErrCode=%v Debug=%q\",\n\t\t\tf.LastStreamID, f.ErrCode, f.debugData)\n\tcase *RSTStreamFrame:\n\t\tfmt.Fprintf(&buf, \" ErrCode=%v\", f.ErrCode)\n\t}\n\treturn buf.String()\n}\n"
  },
  {
    "path": "vendor/golang.org/x/net/http2/go111.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build go1.11\n\npackage http2\n\nimport (\n\t\"net/http/httptrace\"\n\t\"net/textproto\"\n)\n\nfunc traceHasWroteHeaderField(trace *httptrace.ClientTrace) bool {\n\treturn trace != nil && trace.WroteHeaderField != nil\n}\n\nfunc traceWroteHeaderField(trace *httptrace.ClientTrace, k, v string) {\n\tif trace != nil && trace.WroteHeaderField != nil {\n\t\ttrace.WroteHeaderField(k, []string{v})\n\t}\n}\n\nfunc traceGot1xxResponseFunc(trace *httptrace.ClientTrace) func(int, textproto.MIMEHeader) error {\n\tif trace != nil {\n\t\treturn trace.Got1xxResponse\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/golang.org/x/net/http2/gotrack.go",
    "content": "// Copyright 2014 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Defensive debug-only utility to track that functions run on the\n// goroutine that they're supposed to.\n\npackage http2\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"runtime\"\n\t\"strconv\"\n\t\"sync\"\n)\n\nvar DebugGoroutines = os.Getenv(\"DEBUG_HTTP2_GOROUTINES\") == \"1\"\n\ntype goroutineLock uint64\n\nfunc newGoroutineLock() goroutineLock {\n\tif !DebugGoroutines {\n\t\treturn 0\n\t}\n\treturn goroutineLock(curGoroutineID())\n}\n\nfunc (g goroutineLock) check() {\n\tif !DebugGoroutines {\n\t\treturn\n\t}\n\tif curGoroutineID() != uint64(g) {\n\t\tpanic(\"running on the wrong goroutine\")\n\t}\n}\n\nfunc (g goroutineLock) checkNotOn() {\n\tif !DebugGoroutines {\n\t\treturn\n\t}\n\tif curGoroutineID() == uint64(g) {\n\t\tpanic(\"running on the wrong goroutine\")\n\t}\n}\n\nvar goroutineSpace = []byte(\"goroutine \")\n\nfunc curGoroutineID() uint64 {\n\tbp := littleBuf.Get().(*[]byte)\n\tdefer littleBuf.Put(bp)\n\tb := *bp\n\tb = b[:runtime.Stack(b, false)]\n\t// Parse the 4707 out of \"goroutine 4707 [\"\n\tb = bytes.TrimPrefix(b, goroutineSpace)\n\ti := bytes.IndexByte(b, ' ')\n\tif i < 0 {\n\t\tpanic(fmt.Sprintf(\"No space found in %q\", b))\n\t}\n\tb = b[:i]\n\tn, err := parseUintBytes(b, 10, 64)\n\tif err != nil {\n\t\tpanic(fmt.Sprintf(\"Failed to parse goroutine ID out of %q: %v\", b, err))\n\t}\n\treturn n\n}\n\nvar littleBuf = sync.Pool{\n\tNew: func() interface{} {\n\t\tbuf := make([]byte, 64)\n\t\treturn &buf\n\t},\n}\n\n// parseUintBytes is like strconv.ParseUint, but using a []byte.\nfunc parseUintBytes(s []byte, base int, bitSize int) (n uint64, err error) {\n\tvar cutoff, maxVal uint64\n\n\tif bitSize == 0 {\n\t\tbitSize = int(strconv.IntSize)\n\t}\n\n\ts0 := s\n\tswitch {\n\tcase len(s) < 1:\n\t\terr = strconv.ErrSyntax\n\t\tgoto Error\n\n\tcase 2 <= base && base <= 36:\n\t\t// valid base; nothing to do\n\n\tcase base == 0:\n\t\t// Look for octal, hex prefix.\n\t\tswitch {\n\t\tcase s[0] == '0' && len(s) > 1 && (s[1] == 'x' || s[1] == 'X'):\n\t\t\tbase = 16\n\t\t\ts = s[2:]\n\t\t\tif len(s) < 1 {\n\t\t\t\terr = strconv.ErrSyntax\n\t\t\t\tgoto Error\n\t\t\t}\n\t\tcase s[0] == '0':\n\t\t\tbase = 8\n\t\tdefault:\n\t\t\tbase = 10\n\t\t}\n\n\tdefault:\n\t\terr = errors.New(\"invalid base \" + strconv.Itoa(base))\n\t\tgoto Error\n\t}\n\n\tn = 0\n\tcutoff = cutoff64(base)\n\tmaxVal = 1<<uint(bitSize) - 1\n\n\tfor i := 0; i < len(s); i++ {\n\t\tvar v byte\n\t\td := s[i]\n\t\tswitch {\n\t\tcase '0' <= d && d <= '9':\n\t\t\tv = d - '0'\n\t\tcase 'a' <= d && d <= 'z':\n\t\t\tv = d - 'a' + 10\n\t\tcase 'A' <= d && d <= 'Z':\n\t\t\tv = d - 'A' + 10\n\t\tdefault:\n\t\t\tn = 0\n\t\t\terr = strconv.ErrSyntax\n\t\t\tgoto Error\n\t\t}\n\t\tif int(v) >= base {\n\t\t\tn = 0\n\t\t\terr = strconv.ErrSyntax\n\t\t\tgoto Error\n\t\t}\n\n\t\tif n >= cutoff {\n\t\t\t// n*base overflows\n\t\t\tn = 1<<64 - 1\n\t\t\terr = strconv.ErrRange\n\t\t\tgoto Error\n\t\t}\n\t\tn *= uint64(base)\n\n\t\tn1 := n + uint64(v)\n\t\tif n1 < n || n1 > maxVal {\n\t\t\t// n+v overflows\n\t\t\tn = 1<<64 - 1\n\t\t\terr = strconv.ErrRange\n\t\t\tgoto Error\n\t\t}\n\t\tn = n1\n\t}\n\n\treturn n, nil\n\nError:\n\treturn n, &strconv.NumError{Func: \"ParseUint\", Num: string(s0), Err: err}\n}\n\n// Return the first number n such that n*base >= 1<<64.\nfunc cutoff64(base int) uint64 {\n\tif base < 2 {\n\t\treturn 0\n\t}\n\treturn (1<<64-1)/uint64(base) + 1\n}\n"
  },
  {
    "path": "vendor/golang.org/x/net/http2/headermap.go",
    "content": "// Copyright 2014 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage http2\n\nimport (\n\t\"net/http\"\n\t\"strings\"\n\t\"sync\"\n)\n\nvar (\n\tcommonBuildOnce   sync.Once\n\tcommonLowerHeader map[string]string // Go-Canonical-Case -> lower-case\n\tcommonCanonHeader map[string]string // lower-case -> Go-Canonical-Case\n)\n\nfunc buildCommonHeaderMapsOnce() {\n\tcommonBuildOnce.Do(buildCommonHeaderMaps)\n}\n\nfunc buildCommonHeaderMaps() {\n\tcommon := []string{\n\t\t\"accept\",\n\t\t\"accept-charset\",\n\t\t\"accept-encoding\",\n\t\t\"accept-language\",\n\t\t\"accept-ranges\",\n\t\t\"age\",\n\t\t\"access-control-allow-origin\",\n\t\t\"allow\",\n\t\t\"authorization\",\n\t\t\"cache-control\",\n\t\t\"content-disposition\",\n\t\t\"content-encoding\",\n\t\t\"content-language\",\n\t\t\"content-length\",\n\t\t\"content-location\",\n\t\t\"content-range\",\n\t\t\"content-type\",\n\t\t\"cookie\",\n\t\t\"date\",\n\t\t\"etag\",\n\t\t\"expect\",\n\t\t\"expires\",\n\t\t\"from\",\n\t\t\"host\",\n\t\t\"if-match\",\n\t\t\"if-modified-since\",\n\t\t\"if-none-match\",\n\t\t\"if-unmodified-since\",\n\t\t\"last-modified\",\n\t\t\"link\",\n\t\t\"location\",\n\t\t\"max-forwards\",\n\t\t\"proxy-authenticate\",\n\t\t\"proxy-authorization\",\n\t\t\"range\",\n\t\t\"referer\",\n\t\t\"refresh\",\n\t\t\"retry-after\",\n\t\t\"server\",\n\t\t\"set-cookie\",\n\t\t\"strict-transport-security\",\n\t\t\"trailer\",\n\t\t\"transfer-encoding\",\n\t\t\"user-agent\",\n\t\t\"vary\",\n\t\t\"via\",\n\t\t\"www-authenticate\",\n\t}\n\tcommonLowerHeader = make(map[string]string, len(common))\n\tcommonCanonHeader = make(map[string]string, len(common))\n\tfor _, v := range common {\n\t\tchk := http.CanonicalHeaderKey(v)\n\t\tcommonLowerHeader[chk] = v\n\t\tcommonCanonHeader[v] = chk\n\t}\n}\n\nfunc lowerHeader(v string) string {\n\tbuildCommonHeaderMapsOnce()\n\tif s, ok := commonLowerHeader[v]; ok {\n\t\treturn s\n\t}\n\treturn strings.ToLower(v)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/net/http2/hpack/encode.go",
    "content": "// Copyright 2014 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage hpack\n\nimport (\n\t\"io\"\n)\n\nconst (\n\tuint32Max              = ^uint32(0)\n\tinitialHeaderTableSize = 4096\n)\n\ntype Encoder struct {\n\tdynTab dynamicTable\n\t// minSize is the minimum table size set by\n\t// SetMaxDynamicTableSize after the previous Header Table Size\n\t// Update.\n\tminSize uint32\n\t// maxSizeLimit is the maximum table size this encoder\n\t// supports. This will protect the encoder from too large\n\t// size.\n\tmaxSizeLimit uint32\n\t// tableSizeUpdate indicates whether \"Header Table Size\n\t// Update\" is required.\n\ttableSizeUpdate bool\n\tw               io.Writer\n\tbuf             []byte\n}\n\n// NewEncoder returns a new Encoder which performs HPACK encoding. An\n// encoded data is written to w.\nfunc NewEncoder(w io.Writer) *Encoder {\n\te := &Encoder{\n\t\tminSize:         uint32Max,\n\t\tmaxSizeLimit:    initialHeaderTableSize,\n\t\ttableSizeUpdate: false,\n\t\tw:               w,\n\t}\n\te.dynTab.table.init()\n\te.dynTab.setMaxSize(initialHeaderTableSize)\n\treturn e\n}\n\n// WriteField encodes f into a single Write to e's underlying Writer.\n// This function may also produce bytes for \"Header Table Size Update\"\n// if necessary. If produced, it is done before encoding f.\nfunc (e *Encoder) WriteField(f HeaderField) error {\n\te.buf = e.buf[:0]\n\n\tif e.tableSizeUpdate {\n\t\te.tableSizeUpdate = false\n\t\tif e.minSize < e.dynTab.maxSize {\n\t\t\te.buf = appendTableSize(e.buf, e.minSize)\n\t\t}\n\t\te.minSize = uint32Max\n\t\te.buf = appendTableSize(e.buf, e.dynTab.maxSize)\n\t}\n\n\tidx, nameValueMatch := e.searchTable(f)\n\tif nameValueMatch {\n\t\te.buf = appendIndexed(e.buf, idx)\n\t} else {\n\t\tindexing := e.shouldIndex(f)\n\t\tif indexing {\n\t\t\te.dynTab.add(f)\n\t\t}\n\n\t\tif idx == 0 {\n\t\t\te.buf = appendNewName(e.buf, f, indexing)\n\t\t} else {\n\t\t\te.buf = appendIndexedName(e.buf, f, idx, indexing)\n\t\t}\n\t}\n\tn, err := e.w.Write(e.buf)\n\tif err == nil && n != len(e.buf) {\n\t\terr = io.ErrShortWrite\n\t}\n\treturn err\n}\n\n// searchTable searches f in both stable and dynamic header tables.\n// The static header table is searched first. Only when there is no\n// exact match for both name and value, the dynamic header table is\n// then searched. If there is no match, i is 0. If both name and value\n// match, i is the matched index and nameValueMatch becomes true. If\n// only name matches, i points to that index and nameValueMatch\n// becomes false.\nfunc (e *Encoder) searchTable(f HeaderField) (i uint64, nameValueMatch bool) {\n\ti, nameValueMatch = staticTable.search(f)\n\tif nameValueMatch {\n\t\treturn i, true\n\t}\n\n\tj, nameValueMatch := e.dynTab.table.search(f)\n\tif nameValueMatch || (i == 0 && j != 0) {\n\t\treturn j + uint64(staticTable.len()), nameValueMatch\n\t}\n\n\treturn i, false\n}\n\n// SetMaxDynamicTableSize changes the dynamic header table size to v.\n// The actual size is bounded by the value passed to\n// SetMaxDynamicTableSizeLimit.\nfunc (e *Encoder) SetMaxDynamicTableSize(v uint32) {\n\tif v > e.maxSizeLimit {\n\t\tv = e.maxSizeLimit\n\t}\n\tif v < e.minSize {\n\t\te.minSize = v\n\t}\n\te.tableSizeUpdate = true\n\te.dynTab.setMaxSize(v)\n}\n\n// SetMaxDynamicTableSizeLimit changes the maximum value that can be\n// specified in SetMaxDynamicTableSize to v. By default, it is set to\n// 4096, which is the same size of the default dynamic header table\n// size described in HPACK specification. If the current maximum\n// dynamic header table size is strictly greater than v, \"Header Table\n// Size Update\" will be done in the next WriteField call and the\n// maximum dynamic header table size is truncated to v.\nfunc (e *Encoder) SetMaxDynamicTableSizeLimit(v uint32) {\n\te.maxSizeLimit = v\n\tif e.dynTab.maxSize > v {\n\t\te.tableSizeUpdate = true\n\t\te.dynTab.setMaxSize(v)\n\t}\n}\n\n// shouldIndex reports whether f should be indexed.\nfunc (e *Encoder) shouldIndex(f HeaderField) bool {\n\treturn !f.Sensitive && f.Size() <= e.dynTab.maxSize\n}\n\n// appendIndexed appends index i, as encoded in \"Indexed Header Field\"\n// representation, to dst and returns the extended buffer.\nfunc appendIndexed(dst []byte, i uint64) []byte {\n\tfirst := len(dst)\n\tdst = appendVarInt(dst, 7, i)\n\tdst[first] |= 0x80\n\treturn dst\n}\n\n// appendNewName appends f, as encoded in one of \"Literal Header field\n// - New Name\" representation variants, to dst and returns the\n// extended buffer.\n//\n// If f.Sensitive is true, \"Never Indexed\" representation is used. If\n// f.Sensitive is false and indexing is true, \"Inremental Indexing\"\n// representation is used.\nfunc appendNewName(dst []byte, f HeaderField, indexing bool) []byte {\n\tdst = append(dst, encodeTypeByte(indexing, f.Sensitive))\n\tdst = appendHpackString(dst, f.Name)\n\treturn appendHpackString(dst, f.Value)\n}\n\n// appendIndexedName appends f and index i referring indexed name\n// entry, as encoded in one of \"Literal Header field - Indexed Name\"\n// representation variants, to dst and returns the extended buffer.\n//\n// If f.Sensitive is true, \"Never Indexed\" representation is used. If\n// f.Sensitive is false and indexing is true, \"Incremental Indexing\"\n// representation is used.\nfunc appendIndexedName(dst []byte, f HeaderField, i uint64, indexing bool) []byte {\n\tfirst := len(dst)\n\tvar n byte\n\tif indexing {\n\t\tn = 6\n\t} else {\n\t\tn = 4\n\t}\n\tdst = appendVarInt(dst, n, i)\n\tdst[first] |= encodeTypeByte(indexing, f.Sensitive)\n\treturn appendHpackString(dst, f.Value)\n}\n\n// appendTableSize appends v, as encoded in \"Header Table Size Update\"\n// representation, to dst and returns the extended buffer.\nfunc appendTableSize(dst []byte, v uint32) []byte {\n\tfirst := len(dst)\n\tdst = appendVarInt(dst, 5, uint64(v))\n\tdst[first] |= 0x20\n\treturn dst\n}\n\n// appendVarInt appends i, as encoded in variable integer form using n\n// bit prefix, to dst and returns the extended buffer.\n//\n// See\n// http://http2.github.io/http2-spec/compression.html#integer.representation\nfunc appendVarInt(dst []byte, n byte, i uint64) []byte {\n\tk := uint64((1 << n) - 1)\n\tif i < k {\n\t\treturn append(dst, byte(i))\n\t}\n\tdst = append(dst, byte(k))\n\ti -= k\n\tfor ; i >= 128; i >>= 7 {\n\t\tdst = append(dst, byte(0x80|(i&0x7f)))\n\t}\n\treturn append(dst, byte(i))\n}\n\n// appendHpackString appends s, as encoded in \"String Literal\"\n// representation, to dst and returns the extended buffer.\n//\n// s will be encoded in Huffman codes only when it produces strictly\n// shorter byte string.\nfunc appendHpackString(dst []byte, s string) []byte {\n\thuffmanLength := HuffmanEncodeLength(s)\n\tif huffmanLength < uint64(len(s)) {\n\t\tfirst := len(dst)\n\t\tdst = appendVarInt(dst, 7, huffmanLength)\n\t\tdst = AppendHuffmanString(dst, s)\n\t\tdst[first] |= 0x80\n\t} else {\n\t\tdst = appendVarInt(dst, 7, uint64(len(s)))\n\t\tdst = append(dst, s...)\n\t}\n\treturn dst\n}\n\n// encodeTypeByte returns type byte. If sensitive is true, type byte\n// for \"Never Indexed\" representation is returned. If sensitive is\n// false and indexing is true, type byte for \"Incremental Indexing\"\n// representation is returned. Otherwise, type byte for \"Without\n// Indexing\" is returned.\nfunc encodeTypeByte(indexing, sensitive bool) byte {\n\tif sensitive {\n\t\treturn 0x10\n\t}\n\tif indexing {\n\t\treturn 0x40\n\t}\n\treturn 0\n}\n"
  },
  {
    "path": "vendor/golang.org/x/net/http2/hpack/hpack.go",
    "content": "// Copyright 2014 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package hpack implements HPACK, a compression format for\n// efficiently representing HTTP header fields in the context of HTTP/2.\n//\n// See http://tools.ietf.org/html/draft-ietf-httpbis-header-compression-09\npackage hpack\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n)\n\n// A DecodingError is something the spec defines as a decoding error.\ntype DecodingError struct {\n\tErr error\n}\n\nfunc (de DecodingError) Error() string {\n\treturn fmt.Sprintf(\"decoding error: %v\", de.Err)\n}\n\n// An InvalidIndexError is returned when an encoder references a table\n// entry before the static table or after the end of the dynamic table.\ntype InvalidIndexError int\n\nfunc (e InvalidIndexError) Error() string {\n\treturn fmt.Sprintf(\"invalid indexed representation index %d\", int(e))\n}\n\n// A HeaderField is a name-value pair. Both the name and value are\n// treated as opaque sequences of octets.\ntype HeaderField struct {\n\tName, Value string\n\n\t// Sensitive means that this header field should never be\n\t// indexed.\n\tSensitive bool\n}\n\n// IsPseudo reports whether the header field is an http2 pseudo header.\n// That is, it reports whether it starts with a colon.\n// It is not otherwise guaranteed to be a valid pseudo header field,\n// though.\nfunc (hf HeaderField) IsPseudo() bool {\n\treturn len(hf.Name) != 0 && hf.Name[0] == ':'\n}\n\nfunc (hf HeaderField) String() string {\n\tvar suffix string\n\tif hf.Sensitive {\n\t\tsuffix = \" (sensitive)\"\n\t}\n\treturn fmt.Sprintf(\"header field %q = %q%s\", hf.Name, hf.Value, suffix)\n}\n\n// Size returns the size of an entry per RFC 7541 section 4.1.\nfunc (hf HeaderField) Size() uint32 {\n\t// http://http2.github.io/http2-spec/compression.html#rfc.section.4.1\n\t// \"The size of the dynamic table is the sum of the size of\n\t// its entries. The size of an entry is the sum of its name's\n\t// length in octets (as defined in Section 5.2), its value's\n\t// length in octets (see Section 5.2), plus 32.  The size of\n\t// an entry is calculated using the length of the name and\n\t// value without any Huffman encoding applied.\"\n\n\t// This can overflow if somebody makes a large HeaderField\n\t// Name and/or Value by hand, but we don't care, because that\n\t// won't happen on the wire because the encoding doesn't allow\n\t// it.\n\treturn uint32(len(hf.Name) + len(hf.Value) + 32)\n}\n\n// A Decoder is the decoding context for incremental processing of\n// header blocks.\ntype Decoder struct {\n\tdynTab dynamicTable\n\temit   func(f HeaderField)\n\n\temitEnabled bool // whether calls to emit are enabled\n\tmaxStrLen   int  // 0 means unlimited\n\n\t// buf is the unparsed buffer. It's only written to\n\t// saveBuf if it was truncated in the middle of a header\n\t// block. Because it's usually not owned, we can only\n\t// process it under Write.\n\tbuf []byte // not owned; only valid during Write\n\n\t// saveBuf is previous data passed to Write which we weren't able\n\t// to fully parse before. Unlike buf, we own this data.\n\tsaveBuf bytes.Buffer\n\n\tfirstField bool // processing the first field of the header block\n}\n\n// NewDecoder returns a new decoder with the provided maximum dynamic\n// table size. The emitFunc will be called for each valid field\n// parsed, in the same goroutine as calls to Write, before Write returns.\nfunc NewDecoder(maxDynamicTableSize uint32, emitFunc func(f HeaderField)) *Decoder {\n\td := &Decoder{\n\t\temit:        emitFunc,\n\t\temitEnabled: true,\n\t\tfirstField:  true,\n\t}\n\td.dynTab.table.init()\n\td.dynTab.allowedMaxSize = maxDynamicTableSize\n\td.dynTab.setMaxSize(maxDynamicTableSize)\n\treturn d\n}\n\n// ErrStringLength is returned by Decoder.Write when the max string length\n// (as configured by Decoder.SetMaxStringLength) would be violated.\nvar ErrStringLength = errors.New(\"hpack: string too long\")\n\n// SetMaxStringLength sets the maximum size of a HeaderField name or\n// value string. If a string exceeds this length (even after any\n// decompression), Write will return ErrStringLength.\n// A value of 0 means unlimited and is the default from NewDecoder.\nfunc (d *Decoder) SetMaxStringLength(n int) {\n\td.maxStrLen = n\n}\n\n// SetEmitFunc changes the callback used when new header fields\n// are decoded.\n// It must be non-nil. It does not affect EmitEnabled.\nfunc (d *Decoder) SetEmitFunc(emitFunc func(f HeaderField)) {\n\td.emit = emitFunc\n}\n\n// SetEmitEnabled controls whether the emitFunc provided to NewDecoder\n// should be called. The default is true.\n//\n// This facility exists to let servers enforce MAX_HEADER_LIST_SIZE\n// while still decoding and keeping in-sync with decoder state, but\n// without doing unnecessary decompression or generating unnecessary\n// garbage for header fields past the limit.\nfunc (d *Decoder) SetEmitEnabled(v bool) { d.emitEnabled = v }\n\n// EmitEnabled reports whether calls to the emitFunc provided to NewDecoder\n// are currently enabled. The default is true.\nfunc (d *Decoder) EmitEnabled() bool { return d.emitEnabled }\n\n// TODO: add method *Decoder.Reset(maxSize, emitFunc) to let callers re-use Decoders and their\n// underlying buffers for garbage reasons.\n\nfunc (d *Decoder) SetMaxDynamicTableSize(v uint32) {\n\td.dynTab.setMaxSize(v)\n}\n\n// SetAllowedMaxDynamicTableSize sets the upper bound that the encoded\n// stream (via dynamic table size updates) may set the maximum size\n// to.\nfunc (d *Decoder) SetAllowedMaxDynamicTableSize(v uint32) {\n\td.dynTab.allowedMaxSize = v\n}\n\ntype dynamicTable struct {\n\t// http://http2.github.io/http2-spec/compression.html#rfc.section.2.3.2\n\ttable          headerFieldTable\n\tsize           uint32 // in bytes\n\tmaxSize        uint32 // current maxSize\n\tallowedMaxSize uint32 // maxSize may go up to this, inclusive\n}\n\nfunc (dt *dynamicTable) setMaxSize(v uint32) {\n\tdt.maxSize = v\n\tdt.evict()\n}\n\nfunc (dt *dynamicTable) add(f HeaderField) {\n\tdt.table.addEntry(f)\n\tdt.size += f.Size()\n\tdt.evict()\n}\n\n// If we're too big, evict old stuff.\nfunc (dt *dynamicTable) evict() {\n\tvar n int\n\tfor dt.size > dt.maxSize && n < dt.table.len() {\n\t\tdt.size -= dt.table.ents[n].Size()\n\t\tn++\n\t}\n\tdt.table.evictOldest(n)\n}\n\nfunc (d *Decoder) maxTableIndex() int {\n\t// This should never overflow. RFC 7540 Section 6.5.2 limits the size of\n\t// the dynamic table to 2^32 bytes, where each entry will occupy more than\n\t// one byte. Further, the staticTable has a fixed, small length.\n\treturn d.dynTab.table.len() + staticTable.len()\n}\n\nfunc (d *Decoder) at(i uint64) (hf HeaderField, ok bool) {\n\t// See Section 2.3.3.\n\tif i == 0 {\n\t\treturn\n\t}\n\tif i <= uint64(staticTable.len()) {\n\t\treturn staticTable.ents[i-1], true\n\t}\n\tif i > uint64(d.maxTableIndex()) {\n\t\treturn\n\t}\n\t// In the dynamic table, newer entries have lower indices.\n\t// However, dt.ents[0] is the oldest entry. Hence, dt.ents is\n\t// the reversed dynamic table.\n\tdt := d.dynTab.table\n\treturn dt.ents[dt.len()-(int(i)-staticTable.len())], true\n}\n\n// Decode decodes an entire block.\n//\n// TODO: remove this method and make it incremental later? This is\n// easier for debugging now.\nfunc (d *Decoder) DecodeFull(p []byte) ([]HeaderField, error) {\n\tvar hf []HeaderField\n\tsaveFunc := d.emit\n\tdefer func() { d.emit = saveFunc }()\n\td.emit = func(f HeaderField) { hf = append(hf, f) }\n\tif _, err := d.Write(p); err != nil {\n\t\treturn nil, err\n\t}\n\tif err := d.Close(); err != nil {\n\t\treturn nil, err\n\t}\n\treturn hf, nil\n}\n\n// Close declares that the decoding is complete and resets the Decoder\n// to be reused again for a new header block. If there is any remaining\n// data in the decoder's buffer, Close returns an error.\nfunc (d *Decoder) Close() error {\n\tif d.saveBuf.Len() > 0 {\n\t\td.saveBuf.Reset()\n\t\treturn DecodingError{errors.New(\"truncated headers\")}\n\t}\n\td.firstField = true\n\treturn nil\n}\n\nfunc (d *Decoder) Write(p []byte) (n int, err error) {\n\tif len(p) == 0 {\n\t\t// Prevent state machine CPU attacks (making us redo\n\t\t// work up to the point of finding out we don't have\n\t\t// enough data)\n\t\treturn\n\t}\n\t// Only copy the data if we have to. Optimistically assume\n\t// that p will contain a complete header block.\n\tif d.saveBuf.Len() == 0 {\n\t\td.buf = p\n\t} else {\n\t\td.saveBuf.Write(p)\n\t\td.buf = d.saveBuf.Bytes()\n\t\td.saveBuf.Reset()\n\t}\n\n\tfor len(d.buf) > 0 {\n\t\terr = d.parseHeaderFieldRepr()\n\t\tif err == errNeedMore {\n\t\t\t// Extra paranoia, making sure saveBuf won't\n\t\t\t// get too large. All the varint and string\n\t\t\t// reading code earlier should already catch\n\t\t\t// overlong things and return ErrStringLength,\n\t\t\t// but keep this as a last resort.\n\t\t\tconst varIntOverhead = 8 // conservative\n\t\t\tif d.maxStrLen != 0 && int64(len(d.buf)) > 2*(int64(d.maxStrLen)+varIntOverhead) {\n\t\t\t\treturn 0, ErrStringLength\n\t\t\t}\n\t\t\td.saveBuf.Write(d.buf)\n\t\t\treturn len(p), nil\n\t\t}\n\t\td.firstField = false\n\t\tif err != nil {\n\t\t\tbreak\n\t\t}\n\t}\n\treturn len(p), err\n}\n\n// errNeedMore is an internal sentinel error value that means the\n// buffer is truncated and we need to read more data before we can\n// continue parsing.\nvar errNeedMore = errors.New(\"need more data\")\n\ntype indexType int\n\nconst (\n\tindexedTrue indexType = iota\n\tindexedFalse\n\tindexedNever\n)\n\nfunc (v indexType) indexed() bool   { return v == indexedTrue }\nfunc (v indexType) sensitive() bool { return v == indexedNever }\n\n// returns errNeedMore if there isn't enough data available.\n// any other error is fatal.\n// consumes d.buf iff it returns nil.\n// precondition: must be called with len(d.buf) > 0\nfunc (d *Decoder) parseHeaderFieldRepr() error {\n\tb := d.buf[0]\n\tswitch {\n\tcase b&128 != 0:\n\t\t// Indexed representation.\n\t\t// High bit set?\n\t\t// http://http2.github.io/http2-spec/compression.html#rfc.section.6.1\n\t\treturn d.parseFieldIndexed()\n\tcase b&192 == 64:\n\t\t// 6.2.1 Literal Header Field with Incremental Indexing\n\t\t// 0b10xxxxxx: top two bits are 10\n\t\t// http://http2.github.io/http2-spec/compression.html#rfc.section.6.2.1\n\t\treturn d.parseFieldLiteral(6, indexedTrue)\n\tcase b&240 == 0:\n\t\t// 6.2.2 Literal Header Field without Indexing\n\t\t// 0b0000xxxx: top four bits are 0000\n\t\t// http://http2.github.io/http2-spec/compression.html#rfc.section.6.2.2\n\t\treturn d.parseFieldLiteral(4, indexedFalse)\n\tcase b&240 == 16:\n\t\t// 6.2.3 Literal Header Field never Indexed\n\t\t// 0b0001xxxx: top four bits are 0001\n\t\t// http://http2.github.io/http2-spec/compression.html#rfc.section.6.2.3\n\t\treturn d.parseFieldLiteral(4, indexedNever)\n\tcase b&224 == 32:\n\t\t// 6.3 Dynamic Table Size Update\n\t\t// Top three bits are '001'.\n\t\t// http://http2.github.io/http2-spec/compression.html#rfc.section.6.3\n\t\treturn d.parseDynamicTableSizeUpdate()\n\t}\n\n\treturn DecodingError{errors.New(\"invalid encoding\")}\n}\n\n// (same invariants and behavior as parseHeaderFieldRepr)\nfunc (d *Decoder) parseFieldIndexed() error {\n\tbuf := d.buf\n\tidx, buf, err := readVarInt(7, buf)\n\tif err != nil {\n\t\treturn err\n\t}\n\thf, ok := d.at(idx)\n\tif !ok {\n\t\treturn DecodingError{InvalidIndexError(idx)}\n\t}\n\td.buf = buf\n\treturn d.callEmit(HeaderField{Name: hf.Name, Value: hf.Value})\n}\n\n// (same invariants and behavior as parseHeaderFieldRepr)\nfunc (d *Decoder) parseFieldLiteral(n uint8, it indexType) error {\n\tbuf := d.buf\n\tnameIdx, buf, err := readVarInt(n, buf)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tvar hf HeaderField\n\twantStr := d.emitEnabled || it.indexed()\n\tif nameIdx > 0 {\n\t\tihf, ok := d.at(nameIdx)\n\t\tif !ok {\n\t\t\treturn DecodingError{InvalidIndexError(nameIdx)}\n\t\t}\n\t\thf.Name = ihf.Name\n\t} else {\n\t\thf.Name, buf, err = d.readString(buf, wantStr)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\thf.Value, buf, err = d.readString(buf, wantStr)\n\tif err != nil {\n\t\treturn err\n\t}\n\td.buf = buf\n\tif it.indexed() {\n\t\td.dynTab.add(hf)\n\t}\n\thf.Sensitive = it.sensitive()\n\treturn d.callEmit(hf)\n}\n\nfunc (d *Decoder) callEmit(hf HeaderField) error {\n\tif d.maxStrLen != 0 {\n\t\tif len(hf.Name) > d.maxStrLen || len(hf.Value) > d.maxStrLen {\n\t\t\treturn ErrStringLength\n\t\t}\n\t}\n\tif d.emitEnabled {\n\t\td.emit(hf)\n\t}\n\treturn nil\n}\n\n// (same invariants and behavior as parseHeaderFieldRepr)\nfunc (d *Decoder) parseDynamicTableSizeUpdate() error {\n\t// RFC 7541, sec 4.2: This dynamic table size update MUST occur at the\n\t// beginning of the first header block following the change to the dynamic table size.\n\tif !d.firstField && d.dynTab.size > 0 {\n\t\treturn DecodingError{errors.New(\"dynamic table size update MUST occur at the beginning of a header block\")}\n\t}\n\n\tbuf := d.buf\n\tsize, buf, err := readVarInt(5, buf)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif size > uint64(d.dynTab.allowedMaxSize) {\n\t\treturn DecodingError{errors.New(\"dynamic table size update too large\")}\n\t}\n\td.dynTab.setMaxSize(uint32(size))\n\td.buf = buf\n\treturn nil\n}\n\nvar errVarintOverflow = DecodingError{errors.New(\"varint integer overflow\")}\n\n// readVarInt reads an unsigned variable length integer off the\n// beginning of p. n is the parameter as described in\n// http://http2.github.io/http2-spec/compression.html#rfc.section.5.1.\n//\n// n must always be between 1 and 8.\n//\n// The returned remain buffer is either a smaller suffix of p, or err != nil.\n// The error is errNeedMore if p doesn't contain a complete integer.\nfunc readVarInt(n byte, p []byte) (i uint64, remain []byte, err error) {\n\tif n < 1 || n > 8 {\n\t\tpanic(\"bad n\")\n\t}\n\tif len(p) == 0 {\n\t\treturn 0, p, errNeedMore\n\t}\n\ti = uint64(p[0])\n\tif n < 8 {\n\t\ti &= (1 << uint64(n)) - 1\n\t}\n\tif i < (1<<uint64(n))-1 {\n\t\treturn i, p[1:], nil\n\t}\n\n\torigP := p\n\tp = p[1:]\n\tvar m uint64\n\tfor len(p) > 0 {\n\t\tb := p[0]\n\t\tp = p[1:]\n\t\ti += uint64(b&127) << m\n\t\tif b&128 == 0 {\n\t\t\treturn i, p, nil\n\t\t}\n\t\tm += 7\n\t\tif m >= 63 { // TODO: proper overflow check. making this up.\n\t\t\treturn 0, origP, errVarintOverflow\n\t\t}\n\t}\n\treturn 0, origP, errNeedMore\n}\n\n// readString decodes an hpack string from p.\n//\n// wantStr is whether s will be used. If false, decompression and\n// []byte->string garbage are skipped if s will be ignored\n// anyway. This does mean that huffman decoding errors for non-indexed\n// strings past the MAX_HEADER_LIST_SIZE are ignored, but the server\n// is returning an error anyway, and because they're not indexed, the error\n// won't affect the decoding state.\nfunc (d *Decoder) readString(p []byte, wantStr bool) (s string, remain []byte, err error) {\n\tif len(p) == 0 {\n\t\treturn \"\", p, errNeedMore\n\t}\n\tisHuff := p[0]&128 != 0\n\tstrLen, p, err := readVarInt(7, p)\n\tif err != nil {\n\t\treturn \"\", p, err\n\t}\n\tif d.maxStrLen != 0 && strLen > uint64(d.maxStrLen) {\n\t\treturn \"\", nil, ErrStringLength\n\t}\n\tif uint64(len(p)) < strLen {\n\t\treturn \"\", p, errNeedMore\n\t}\n\tif !isHuff {\n\t\tif wantStr {\n\t\t\ts = string(p[:strLen])\n\t\t}\n\t\treturn s, p[strLen:], nil\n\t}\n\n\tif wantStr {\n\t\tbuf := bufPool.Get().(*bytes.Buffer)\n\t\tbuf.Reset() // don't trust others\n\t\tdefer bufPool.Put(buf)\n\t\tif err := huffmanDecode(buf, d.maxStrLen, p[:strLen]); err != nil {\n\t\t\tbuf.Reset()\n\t\t\treturn \"\", nil, err\n\t\t}\n\t\ts = buf.String()\n\t\tbuf.Reset() // be nice to GC\n\t}\n\treturn s, p[strLen:], nil\n}\n"
  },
  {
    "path": "vendor/golang.org/x/net/http2/hpack/huffman.go",
    "content": "// Copyright 2014 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage hpack\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"io\"\n\t\"sync\"\n)\n\nvar bufPool = sync.Pool{\n\tNew: func() interface{} { return new(bytes.Buffer) },\n}\n\n// HuffmanDecode decodes the string in v and writes the expanded\n// result to w, returning the number of bytes written to w and the\n// Write call's return value. At most one Write call is made.\nfunc HuffmanDecode(w io.Writer, v []byte) (int, error) {\n\tbuf := bufPool.Get().(*bytes.Buffer)\n\tbuf.Reset()\n\tdefer bufPool.Put(buf)\n\tif err := huffmanDecode(buf, 0, v); err != nil {\n\t\treturn 0, err\n\t}\n\treturn w.Write(buf.Bytes())\n}\n\n// HuffmanDecodeToString decodes the string in v.\nfunc HuffmanDecodeToString(v []byte) (string, error) {\n\tbuf := bufPool.Get().(*bytes.Buffer)\n\tbuf.Reset()\n\tdefer bufPool.Put(buf)\n\tif err := huffmanDecode(buf, 0, v); err != nil {\n\t\treturn \"\", err\n\t}\n\treturn buf.String(), nil\n}\n\n// ErrInvalidHuffman is returned for errors found decoding\n// Huffman-encoded strings.\nvar ErrInvalidHuffman = errors.New(\"hpack: invalid Huffman-encoded data\")\n\n// huffmanDecode decodes v to buf.\n// If maxLen is greater than 0, attempts to write more to buf than\n// maxLen bytes will return ErrStringLength.\nfunc huffmanDecode(buf *bytes.Buffer, maxLen int, v []byte) error {\n\trootHuffmanNode := getRootHuffmanNode()\n\tn := rootHuffmanNode\n\t// cur is the bit buffer that has not been fed into n.\n\t// cbits is the number of low order bits in cur that are valid.\n\t// sbits is the number of bits of the symbol prefix being decoded.\n\tcur, cbits, sbits := uint(0), uint8(0), uint8(0)\n\tfor _, b := range v {\n\t\tcur = cur<<8 | uint(b)\n\t\tcbits += 8\n\t\tsbits += 8\n\t\tfor cbits >= 8 {\n\t\t\tidx := byte(cur >> (cbits - 8))\n\t\t\tn = n.children[idx]\n\t\t\tif n == nil {\n\t\t\t\treturn ErrInvalidHuffman\n\t\t\t}\n\t\t\tif n.children == nil {\n\t\t\t\tif maxLen != 0 && buf.Len() == maxLen {\n\t\t\t\t\treturn ErrStringLength\n\t\t\t\t}\n\t\t\t\tbuf.WriteByte(n.sym)\n\t\t\t\tcbits -= n.codeLen\n\t\t\t\tn = rootHuffmanNode\n\t\t\t\tsbits = cbits\n\t\t\t} else {\n\t\t\t\tcbits -= 8\n\t\t\t}\n\t\t}\n\t}\n\tfor cbits > 0 {\n\t\tn = n.children[byte(cur<<(8-cbits))]\n\t\tif n == nil {\n\t\t\treturn ErrInvalidHuffman\n\t\t}\n\t\tif n.children != nil || n.codeLen > cbits {\n\t\t\tbreak\n\t\t}\n\t\tif maxLen != 0 && buf.Len() == maxLen {\n\t\t\treturn ErrStringLength\n\t\t}\n\t\tbuf.WriteByte(n.sym)\n\t\tcbits -= n.codeLen\n\t\tn = rootHuffmanNode\n\t\tsbits = cbits\n\t}\n\tif sbits > 7 {\n\t\t// Either there was an incomplete symbol, or overlong padding.\n\t\t// Both are decoding errors per RFC 7541 section 5.2.\n\t\treturn ErrInvalidHuffman\n\t}\n\tif mask := uint(1<<cbits - 1); cur&mask != mask {\n\t\t// Trailing bits must be a prefix of EOS per RFC 7541 section 5.2.\n\t\treturn ErrInvalidHuffman\n\t}\n\n\treturn nil\n}\n\ntype node struct {\n\t// children is non-nil for internal nodes\n\tchildren *[256]*node\n\n\t// The following are only valid if children is nil:\n\tcodeLen uint8 // number of bits that led to the output of sym\n\tsym     byte  // output symbol\n}\n\nfunc newInternalNode() *node {\n\treturn &node{children: new([256]*node)}\n}\n\nvar (\n\tbuildRootOnce       sync.Once\n\tlazyRootHuffmanNode *node\n)\n\nfunc getRootHuffmanNode() *node {\n\tbuildRootOnce.Do(buildRootHuffmanNode)\n\treturn lazyRootHuffmanNode\n}\n\nfunc buildRootHuffmanNode() {\n\tif len(huffmanCodes) != 256 {\n\t\tpanic(\"unexpected size\")\n\t}\n\tlazyRootHuffmanNode = newInternalNode()\n\tfor i, code := range huffmanCodes {\n\t\taddDecoderNode(byte(i), code, huffmanCodeLen[i])\n\t}\n}\n\nfunc addDecoderNode(sym byte, code uint32, codeLen uint8) {\n\tcur := lazyRootHuffmanNode\n\tfor codeLen > 8 {\n\t\tcodeLen -= 8\n\t\ti := uint8(code >> codeLen)\n\t\tif cur.children[i] == nil {\n\t\t\tcur.children[i] = newInternalNode()\n\t\t}\n\t\tcur = cur.children[i]\n\t}\n\tshift := 8 - codeLen\n\tstart, end := int(uint8(code<<shift)), int(1<<shift)\n\tfor i := start; i < start+end; i++ {\n\t\tcur.children[i] = &node{sym: sym, codeLen: codeLen}\n\t}\n}\n\n// AppendHuffmanString appends s, as encoded in Huffman codes, to dst\n// and returns the extended buffer.\nfunc AppendHuffmanString(dst []byte, s string) []byte {\n\trembits := uint8(8)\n\n\tfor i := 0; i < len(s); i++ {\n\t\tif rembits == 8 {\n\t\t\tdst = append(dst, 0)\n\t\t}\n\t\tdst, rembits = appendByteToHuffmanCode(dst, rembits, s[i])\n\t}\n\n\tif rembits < 8 {\n\t\t// special EOS symbol\n\t\tcode := uint32(0x3fffffff)\n\t\tnbits := uint8(30)\n\n\t\tt := uint8(code >> (nbits - rembits))\n\t\tdst[len(dst)-1] |= t\n\t}\n\n\treturn dst\n}\n\n// HuffmanEncodeLength returns the number of bytes required to encode\n// s in Huffman codes. The result is round up to byte boundary.\nfunc HuffmanEncodeLength(s string) uint64 {\n\tn := uint64(0)\n\tfor i := 0; i < len(s); i++ {\n\t\tn += uint64(huffmanCodeLen[s[i]])\n\t}\n\treturn (n + 7) / 8\n}\n\n// appendByteToHuffmanCode appends Huffman code for c to dst and\n// returns the extended buffer and the remaining bits in the last\n// element. The appending is not byte aligned and the remaining bits\n// in the last element of dst is given in rembits.\nfunc appendByteToHuffmanCode(dst []byte, rembits uint8, c byte) ([]byte, uint8) {\n\tcode := huffmanCodes[c]\n\tnbits := huffmanCodeLen[c]\n\n\tfor {\n\t\tif rembits > nbits {\n\t\t\tt := uint8(code << (rembits - nbits))\n\t\t\tdst[len(dst)-1] |= t\n\t\t\trembits -= nbits\n\t\t\tbreak\n\t\t}\n\n\t\tt := uint8(code >> (nbits - rembits))\n\t\tdst[len(dst)-1] |= t\n\n\t\tnbits -= rembits\n\t\trembits = 8\n\n\t\tif nbits == 0 {\n\t\t\tbreak\n\t\t}\n\n\t\tdst = append(dst, 0)\n\t}\n\n\treturn dst, rembits\n}\n"
  },
  {
    "path": "vendor/golang.org/x/net/http2/hpack/tables.go",
    "content": "// Copyright 2014 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage hpack\n\nimport (\n\t\"fmt\"\n)\n\n// headerFieldTable implements a list of HeaderFields.\n// This is used to implement the static and dynamic tables.\ntype headerFieldTable struct {\n\t// For static tables, entries are never evicted.\n\t//\n\t// For dynamic tables, entries are evicted from ents[0] and added to the end.\n\t// Each entry has a unique id that starts at one and increments for each\n\t// entry that is added. This unique id is stable across evictions, meaning\n\t// it can be used as a pointer to a specific entry. As in hpack, unique ids\n\t// are 1-based. The unique id for ents[k] is k + evictCount + 1.\n\t//\n\t// Zero is not a valid unique id.\n\t//\n\t// evictCount should not overflow in any remotely practical situation. In\n\t// practice, we will have one dynamic table per HTTP/2 connection. If we\n\t// assume a very powerful server that handles 1M QPS per connection and each\n\t// request adds (then evicts) 100 entries from the table, it would still take\n\t// 2M years for evictCount to overflow.\n\tents       []HeaderField\n\tevictCount uint64\n\n\t// byName maps a HeaderField name to the unique id of the newest entry with\n\t// the same name. See above for a definition of \"unique id\".\n\tbyName map[string]uint64\n\n\t// byNameValue maps a HeaderField name/value pair to the unique id of the newest\n\t// entry with the same name and value. See above for a definition of \"unique id\".\n\tbyNameValue map[pairNameValue]uint64\n}\n\ntype pairNameValue struct {\n\tname, value string\n}\n\nfunc (t *headerFieldTable) init() {\n\tt.byName = make(map[string]uint64)\n\tt.byNameValue = make(map[pairNameValue]uint64)\n}\n\n// len reports the number of entries in the table.\nfunc (t *headerFieldTable) len() int {\n\treturn len(t.ents)\n}\n\n// addEntry adds a new entry.\nfunc (t *headerFieldTable) addEntry(f HeaderField) {\n\tid := uint64(t.len()) + t.evictCount + 1\n\tt.byName[f.Name] = id\n\tt.byNameValue[pairNameValue{f.Name, f.Value}] = id\n\tt.ents = append(t.ents, f)\n}\n\n// evictOldest evicts the n oldest entries in the table.\nfunc (t *headerFieldTable) evictOldest(n int) {\n\tif n > t.len() {\n\t\tpanic(fmt.Sprintf(\"evictOldest(%v) on table with %v entries\", n, t.len()))\n\t}\n\tfor k := 0; k < n; k++ {\n\t\tf := t.ents[k]\n\t\tid := t.evictCount + uint64(k) + 1\n\t\tif t.byName[f.Name] == id {\n\t\t\tdelete(t.byName, f.Name)\n\t\t}\n\t\tif p := (pairNameValue{f.Name, f.Value}); t.byNameValue[p] == id {\n\t\t\tdelete(t.byNameValue, p)\n\t\t}\n\t}\n\tcopy(t.ents, t.ents[n:])\n\tfor k := t.len() - n; k < t.len(); k++ {\n\t\tt.ents[k] = HeaderField{} // so strings can be garbage collected\n\t}\n\tt.ents = t.ents[:t.len()-n]\n\tif t.evictCount+uint64(n) < t.evictCount {\n\t\tpanic(\"evictCount overflow\")\n\t}\n\tt.evictCount += uint64(n)\n}\n\n// search finds f in the table. If there is no match, i is 0.\n// If both name and value match, i is the matched index and nameValueMatch\n// becomes true. If only name matches, i points to that index and\n// nameValueMatch becomes false.\n//\n// The returned index is a 1-based HPACK index. For dynamic tables, HPACK says\n// that index 1 should be the newest entry, but t.ents[0] is the oldest entry,\n// meaning t.ents is reversed for dynamic tables. Hence, when t is a dynamic\n// table, the return value i actually refers to the entry t.ents[t.len()-i].\n//\n// All tables are assumed to be a dynamic tables except for the global\n// staticTable pointer.\n//\n// See Section 2.3.3.\nfunc (t *headerFieldTable) search(f HeaderField) (i uint64, nameValueMatch bool) {\n\tif !f.Sensitive {\n\t\tif id := t.byNameValue[pairNameValue{f.Name, f.Value}]; id != 0 {\n\t\t\treturn t.idToIndex(id), true\n\t\t}\n\t}\n\tif id := t.byName[f.Name]; id != 0 {\n\t\treturn t.idToIndex(id), false\n\t}\n\treturn 0, false\n}\n\n// idToIndex converts a unique id to an HPACK index.\n// See Section 2.3.3.\nfunc (t *headerFieldTable) idToIndex(id uint64) uint64 {\n\tif id <= t.evictCount {\n\t\tpanic(fmt.Sprintf(\"id (%v) <= evictCount (%v)\", id, t.evictCount))\n\t}\n\tk := id - t.evictCount - 1 // convert id to an index t.ents[k]\n\tif t != staticTable {\n\t\treturn uint64(t.len()) - k // dynamic table\n\t}\n\treturn k + 1\n}\n\n// http://tools.ietf.org/html/draft-ietf-httpbis-header-compression-07#appendix-B\nvar staticTable = newStaticTable()\nvar staticTableEntries = [...]HeaderField{\n\t{Name: \":authority\"},\n\t{Name: \":method\", Value: \"GET\"},\n\t{Name: \":method\", Value: \"POST\"},\n\t{Name: \":path\", Value: \"/\"},\n\t{Name: \":path\", Value: \"/index.html\"},\n\t{Name: \":scheme\", Value: \"http\"},\n\t{Name: \":scheme\", Value: \"https\"},\n\t{Name: \":status\", Value: \"200\"},\n\t{Name: \":status\", Value: \"204\"},\n\t{Name: \":status\", Value: \"206\"},\n\t{Name: \":status\", Value: \"304\"},\n\t{Name: \":status\", Value: \"400\"},\n\t{Name: \":status\", Value: \"404\"},\n\t{Name: \":status\", Value: \"500\"},\n\t{Name: \"accept-charset\"},\n\t{Name: \"accept-encoding\", Value: \"gzip, deflate\"},\n\t{Name: \"accept-language\"},\n\t{Name: \"accept-ranges\"},\n\t{Name: \"accept\"},\n\t{Name: \"access-control-allow-origin\"},\n\t{Name: \"age\"},\n\t{Name: \"allow\"},\n\t{Name: \"authorization\"},\n\t{Name: \"cache-control\"},\n\t{Name: \"content-disposition\"},\n\t{Name: \"content-encoding\"},\n\t{Name: \"content-language\"},\n\t{Name: \"content-length\"},\n\t{Name: \"content-location\"},\n\t{Name: \"content-range\"},\n\t{Name: \"content-type\"},\n\t{Name: \"cookie\"},\n\t{Name: \"date\"},\n\t{Name: \"etag\"},\n\t{Name: \"expect\"},\n\t{Name: \"expires\"},\n\t{Name: \"from\"},\n\t{Name: \"host\"},\n\t{Name: \"if-match\"},\n\t{Name: \"if-modified-since\"},\n\t{Name: \"if-none-match\"},\n\t{Name: \"if-range\"},\n\t{Name: \"if-unmodified-since\"},\n\t{Name: \"last-modified\"},\n\t{Name: \"link\"},\n\t{Name: \"location\"},\n\t{Name: \"max-forwards\"},\n\t{Name: \"proxy-authenticate\"},\n\t{Name: \"proxy-authorization\"},\n\t{Name: \"range\"},\n\t{Name: \"referer\"},\n\t{Name: \"refresh\"},\n\t{Name: \"retry-after\"},\n\t{Name: \"server\"},\n\t{Name: \"set-cookie\"},\n\t{Name: \"strict-transport-security\"},\n\t{Name: \"transfer-encoding\"},\n\t{Name: \"user-agent\"},\n\t{Name: \"vary\"},\n\t{Name: \"via\"},\n\t{Name: \"www-authenticate\"},\n}\n\nfunc newStaticTable() *headerFieldTable {\n\tt := &headerFieldTable{}\n\tt.init()\n\tfor _, e := range staticTableEntries[:] {\n\t\tt.addEntry(e)\n\t}\n\treturn t\n}\n\nvar huffmanCodes = [256]uint32{\n\t0x1ff8,\n\t0x7fffd8,\n\t0xfffffe2,\n\t0xfffffe3,\n\t0xfffffe4,\n\t0xfffffe5,\n\t0xfffffe6,\n\t0xfffffe7,\n\t0xfffffe8,\n\t0xffffea,\n\t0x3ffffffc,\n\t0xfffffe9,\n\t0xfffffea,\n\t0x3ffffffd,\n\t0xfffffeb,\n\t0xfffffec,\n\t0xfffffed,\n\t0xfffffee,\n\t0xfffffef,\n\t0xffffff0,\n\t0xffffff1,\n\t0xffffff2,\n\t0x3ffffffe,\n\t0xffffff3,\n\t0xffffff4,\n\t0xffffff5,\n\t0xffffff6,\n\t0xffffff7,\n\t0xffffff8,\n\t0xffffff9,\n\t0xffffffa,\n\t0xffffffb,\n\t0x14,\n\t0x3f8,\n\t0x3f9,\n\t0xffa,\n\t0x1ff9,\n\t0x15,\n\t0xf8,\n\t0x7fa,\n\t0x3fa,\n\t0x3fb,\n\t0xf9,\n\t0x7fb,\n\t0xfa,\n\t0x16,\n\t0x17,\n\t0x18,\n\t0x0,\n\t0x1,\n\t0x2,\n\t0x19,\n\t0x1a,\n\t0x1b,\n\t0x1c,\n\t0x1d,\n\t0x1e,\n\t0x1f,\n\t0x5c,\n\t0xfb,\n\t0x7ffc,\n\t0x20,\n\t0xffb,\n\t0x3fc,\n\t0x1ffa,\n\t0x21,\n\t0x5d,\n\t0x5e,\n\t0x5f,\n\t0x60,\n\t0x61,\n\t0x62,\n\t0x63,\n\t0x64,\n\t0x65,\n\t0x66,\n\t0x67,\n\t0x68,\n\t0x69,\n\t0x6a,\n\t0x6b,\n\t0x6c,\n\t0x6d,\n\t0x6e,\n\t0x6f,\n\t0x70,\n\t0x71,\n\t0x72,\n\t0xfc,\n\t0x73,\n\t0xfd,\n\t0x1ffb,\n\t0x7fff0,\n\t0x1ffc,\n\t0x3ffc,\n\t0x22,\n\t0x7ffd,\n\t0x3,\n\t0x23,\n\t0x4,\n\t0x24,\n\t0x5,\n\t0x25,\n\t0x26,\n\t0x27,\n\t0x6,\n\t0x74,\n\t0x75,\n\t0x28,\n\t0x29,\n\t0x2a,\n\t0x7,\n\t0x2b,\n\t0x76,\n\t0x2c,\n\t0x8,\n\t0x9,\n\t0x2d,\n\t0x77,\n\t0x78,\n\t0x79,\n\t0x7a,\n\t0x7b,\n\t0x7ffe,\n\t0x7fc,\n\t0x3ffd,\n\t0x1ffd,\n\t0xffffffc,\n\t0xfffe6,\n\t0x3fffd2,\n\t0xfffe7,\n\t0xfffe8,\n\t0x3fffd3,\n\t0x3fffd4,\n\t0x3fffd5,\n\t0x7fffd9,\n\t0x3fffd6,\n\t0x7fffda,\n\t0x7fffdb,\n\t0x7fffdc,\n\t0x7fffdd,\n\t0x7fffde,\n\t0xffffeb,\n\t0x7fffdf,\n\t0xffffec,\n\t0xffffed,\n\t0x3fffd7,\n\t0x7fffe0,\n\t0xffffee,\n\t0x7fffe1,\n\t0x7fffe2,\n\t0x7fffe3,\n\t0x7fffe4,\n\t0x1fffdc,\n\t0x3fffd8,\n\t0x7fffe5,\n\t0x3fffd9,\n\t0x7fffe6,\n\t0x7fffe7,\n\t0xffffef,\n\t0x3fffda,\n\t0x1fffdd,\n\t0xfffe9,\n\t0x3fffdb,\n\t0x3fffdc,\n\t0x7fffe8,\n\t0x7fffe9,\n\t0x1fffde,\n\t0x7fffea,\n\t0x3fffdd,\n\t0x3fffde,\n\t0xfffff0,\n\t0x1fffdf,\n\t0x3fffdf,\n\t0x7fffeb,\n\t0x7fffec,\n\t0x1fffe0,\n\t0x1fffe1,\n\t0x3fffe0,\n\t0x1fffe2,\n\t0x7fffed,\n\t0x3fffe1,\n\t0x7fffee,\n\t0x7fffef,\n\t0xfffea,\n\t0x3fffe2,\n\t0x3fffe3,\n\t0x3fffe4,\n\t0x7ffff0,\n\t0x3fffe5,\n\t0x3fffe6,\n\t0x7ffff1,\n\t0x3ffffe0,\n\t0x3ffffe1,\n\t0xfffeb,\n\t0x7fff1,\n\t0x3fffe7,\n\t0x7ffff2,\n\t0x3fffe8,\n\t0x1ffffec,\n\t0x3ffffe2,\n\t0x3ffffe3,\n\t0x3ffffe4,\n\t0x7ffffde,\n\t0x7ffffdf,\n\t0x3ffffe5,\n\t0xfffff1,\n\t0x1ffffed,\n\t0x7fff2,\n\t0x1fffe3,\n\t0x3ffffe6,\n\t0x7ffffe0,\n\t0x7ffffe1,\n\t0x3ffffe7,\n\t0x7ffffe2,\n\t0xfffff2,\n\t0x1fffe4,\n\t0x1fffe5,\n\t0x3ffffe8,\n\t0x3ffffe9,\n\t0xffffffd,\n\t0x7ffffe3,\n\t0x7ffffe4,\n\t0x7ffffe5,\n\t0xfffec,\n\t0xfffff3,\n\t0xfffed,\n\t0x1fffe6,\n\t0x3fffe9,\n\t0x1fffe7,\n\t0x1fffe8,\n\t0x7ffff3,\n\t0x3fffea,\n\t0x3fffeb,\n\t0x1ffffee,\n\t0x1ffffef,\n\t0xfffff4,\n\t0xfffff5,\n\t0x3ffffea,\n\t0x7ffff4,\n\t0x3ffffeb,\n\t0x7ffffe6,\n\t0x3ffffec,\n\t0x3ffffed,\n\t0x7ffffe7,\n\t0x7ffffe8,\n\t0x7ffffe9,\n\t0x7ffffea,\n\t0x7ffffeb,\n\t0xffffffe,\n\t0x7ffffec,\n\t0x7ffffed,\n\t0x7ffffee,\n\t0x7ffffef,\n\t0x7fffff0,\n\t0x3ffffee,\n}\n\nvar huffmanCodeLen = [256]uint8{\n\t13, 23, 28, 28, 28, 28, 28, 28, 28, 24, 30, 28, 28, 30, 28, 28,\n\t28, 28, 28, 28, 28, 28, 30, 28, 28, 28, 28, 28, 28, 28, 28, 28,\n\t6, 10, 10, 12, 13, 6, 8, 11, 10, 10, 8, 11, 8, 6, 6, 6,\n\t5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 7, 8, 15, 6, 12, 10,\n\t13, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,\n\t7, 7, 7, 7, 7, 7, 7, 7, 8, 7, 8, 13, 19, 13, 14, 6,\n\t15, 5, 6, 5, 6, 5, 6, 6, 6, 5, 7, 7, 6, 6, 6, 5,\n\t6, 7, 6, 5, 5, 6, 7, 7, 7, 7, 7, 15, 11, 14, 13, 28,\n\t20, 22, 20, 20, 22, 22, 22, 23, 22, 23, 23, 23, 23, 23, 24, 23,\n\t24, 24, 22, 23, 24, 23, 23, 23, 23, 21, 22, 23, 22, 23, 23, 24,\n\t22, 21, 20, 22, 22, 23, 23, 21, 23, 22, 22, 24, 21, 22, 23, 23,\n\t21, 21, 22, 21, 23, 22, 23, 23, 20, 22, 22, 22, 23, 22, 22, 23,\n\t26, 26, 20, 19, 22, 23, 22, 25, 26, 26, 26, 27, 27, 26, 24, 25,\n\t19, 21, 26, 27, 27, 26, 27, 24, 21, 21, 26, 26, 28, 27, 27, 27,\n\t20, 24, 20, 21, 22, 21, 21, 23, 22, 22, 25, 25, 24, 24, 26, 23,\n\t26, 27, 26, 26, 27, 27, 27, 27, 27, 28, 27, 27, 27, 27, 27, 26,\n}\n"
  },
  {
    "path": "vendor/golang.org/x/net/http2/http2.go",
    "content": "// Copyright 2014 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package http2 implements the HTTP/2 protocol.\n//\n// This package is low-level and intended to be used directly by very\n// few people. Most users will use it indirectly through the automatic\n// use by the net/http package (from Go 1.6 and later).\n// For use in earlier Go versions see ConfigureServer. (Transport support\n// requires Go 1.6 or later)\n//\n// See https://http2.github.io/ for more information on HTTP/2.\n//\n// See https://http2.golang.org/ for a test server running this code.\n//\npackage http2 // import \"golang.org/x/net/http2\"\n\nimport (\n\t\"bufio\"\n\t\"crypto/tls\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"os\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\n\t\"golang.org/x/net/http/httpguts\"\n)\n\nvar (\n\tVerboseLogs    bool\n\tlogFrameWrites bool\n\tlogFrameReads  bool\n\tinTests        bool\n)\n\nfunc init() {\n\te := os.Getenv(\"GODEBUG\")\n\tif strings.Contains(e, \"http2debug=1\") {\n\t\tVerboseLogs = true\n\t}\n\tif strings.Contains(e, \"http2debug=2\") {\n\t\tVerboseLogs = true\n\t\tlogFrameWrites = true\n\t\tlogFrameReads = true\n\t}\n}\n\nconst (\n\t// ClientPreface is the string that must be sent by new\n\t// connections from clients.\n\tClientPreface = \"PRI * HTTP/2.0\\r\\n\\r\\nSM\\r\\n\\r\\n\"\n\n\t// SETTINGS_MAX_FRAME_SIZE default\n\t// http://http2.github.io/http2-spec/#rfc.section.6.5.2\n\tinitialMaxFrameSize = 16384\n\n\t// NextProtoTLS is the NPN/ALPN protocol negotiated during\n\t// HTTP/2's TLS setup.\n\tNextProtoTLS = \"h2\"\n\n\t// http://http2.github.io/http2-spec/#SettingValues\n\tinitialHeaderTableSize = 4096\n\n\tinitialWindowSize = 65535 // 6.9.2 Initial Flow Control Window Size\n\n\tdefaultMaxReadFrameSize = 1 << 20\n)\n\nvar (\n\tclientPreface = []byte(ClientPreface)\n)\n\ntype streamState int\n\n// HTTP/2 stream states.\n//\n// See http://tools.ietf.org/html/rfc7540#section-5.1.\n//\n// For simplicity, the server code merges \"reserved (local)\" into\n// \"half-closed (remote)\". This is one less state transition to track.\n// The only downside is that we send PUSH_PROMISEs slightly less\n// liberally than allowable. More discussion here:\n// https://lists.w3.org/Archives/Public/ietf-http-wg/2016JulSep/0599.html\n//\n// \"reserved (remote)\" is omitted since the client code does not\n// support server push.\nconst (\n\tstateIdle streamState = iota\n\tstateOpen\n\tstateHalfClosedLocal\n\tstateHalfClosedRemote\n\tstateClosed\n)\n\nvar stateName = [...]string{\n\tstateIdle:             \"Idle\",\n\tstateOpen:             \"Open\",\n\tstateHalfClosedLocal:  \"HalfClosedLocal\",\n\tstateHalfClosedRemote: \"HalfClosedRemote\",\n\tstateClosed:           \"Closed\",\n}\n\nfunc (st streamState) String() string {\n\treturn stateName[st]\n}\n\n// Setting is a setting parameter: which setting it is, and its value.\ntype Setting struct {\n\t// ID is which setting is being set.\n\t// See http://http2.github.io/http2-spec/#SettingValues\n\tID SettingID\n\n\t// Val is the value.\n\tVal uint32\n}\n\nfunc (s Setting) String() string {\n\treturn fmt.Sprintf(\"[%v = %d]\", s.ID, s.Val)\n}\n\n// Valid reports whether the setting is valid.\nfunc (s Setting) Valid() error {\n\t// Limits and error codes from 6.5.2 Defined SETTINGS Parameters\n\tswitch s.ID {\n\tcase SettingEnablePush:\n\t\tif s.Val != 1 && s.Val != 0 {\n\t\t\treturn ConnectionError(ErrCodeProtocol)\n\t\t}\n\tcase SettingInitialWindowSize:\n\t\tif s.Val > 1<<31-1 {\n\t\t\treturn ConnectionError(ErrCodeFlowControl)\n\t\t}\n\tcase SettingMaxFrameSize:\n\t\tif s.Val < 16384 || s.Val > 1<<24-1 {\n\t\t\treturn ConnectionError(ErrCodeProtocol)\n\t\t}\n\t}\n\treturn nil\n}\n\n// A SettingID is an HTTP/2 setting as defined in\n// http://http2.github.io/http2-spec/#iana-settings\ntype SettingID uint16\n\nconst (\n\tSettingHeaderTableSize      SettingID = 0x1\n\tSettingEnablePush           SettingID = 0x2\n\tSettingMaxConcurrentStreams SettingID = 0x3\n\tSettingInitialWindowSize    SettingID = 0x4\n\tSettingMaxFrameSize         SettingID = 0x5\n\tSettingMaxHeaderListSize    SettingID = 0x6\n)\n\nvar settingName = map[SettingID]string{\n\tSettingHeaderTableSize:      \"HEADER_TABLE_SIZE\",\n\tSettingEnablePush:           \"ENABLE_PUSH\",\n\tSettingMaxConcurrentStreams: \"MAX_CONCURRENT_STREAMS\",\n\tSettingInitialWindowSize:    \"INITIAL_WINDOW_SIZE\",\n\tSettingMaxFrameSize:         \"MAX_FRAME_SIZE\",\n\tSettingMaxHeaderListSize:    \"MAX_HEADER_LIST_SIZE\",\n}\n\nfunc (s SettingID) String() string {\n\tif v, ok := settingName[s]; ok {\n\t\treturn v\n\t}\n\treturn fmt.Sprintf(\"UNKNOWN_SETTING_%d\", uint16(s))\n}\n\nvar (\n\terrInvalidHeaderFieldName  = errors.New(\"http2: invalid header field name\")\n\terrInvalidHeaderFieldValue = errors.New(\"http2: invalid header field value\")\n)\n\n// validWireHeaderFieldName reports whether v is a valid header field\n// name (key). See httpguts.ValidHeaderName for the base rules.\n//\n// Further, http2 says:\n//   \"Just as in HTTP/1.x, header field names are strings of ASCII\n//   characters that are compared in a case-insensitive\n//   fashion. However, header field names MUST be converted to\n//   lowercase prior to their encoding in HTTP/2. \"\nfunc validWireHeaderFieldName(v string) bool {\n\tif len(v) == 0 {\n\t\treturn false\n\t}\n\tfor _, r := range v {\n\t\tif !httpguts.IsTokenRune(r) {\n\t\t\treturn false\n\t\t}\n\t\tif 'A' <= r && r <= 'Z' {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\nfunc httpCodeString(code int) string {\n\tswitch code {\n\tcase 200:\n\t\treturn \"200\"\n\tcase 404:\n\t\treturn \"404\"\n\t}\n\treturn strconv.Itoa(code)\n}\n\n// from pkg io\ntype stringWriter interface {\n\tWriteString(s string) (n int, err error)\n}\n\n// A gate lets two goroutines coordinate their activities.\ntype gate chan struct{}\n\nfunc (g gate) Done() { g <- struct{}{} }\nfunc (g gate) Wait() { <-g }\n\n// A closeWaiter is like a sync.WaitGroup but only goes 1 to 0 (open to closed).\ntype closeWaiter chan struct{}\n\n// Init makes a closeWaiter usable.\n// It exists because so a closeWaiter value can be placed inside a\n// larger struct and have the Mutex and Cond's memory in the same\n// allocation.\nfunc (cw *closeWaiter) Init() {\n\t*cw = make(chan struct{})\n}\n\n// Close marks the closeWaiter as closed and unblocks any waiters.\nfunc (cw closeWaiter) Close() {\n\tclose(cw)\n}\n\n// Wait waits for the closeWaiter to become closed.\nfunc (cw closeWaiter) Wait() {\n\t<-cw\n}\n\n// bufferedWriter is a buffered writer that writes to w.\n// Its buffered writer is lazily allocated as needed, to minimize\n// idle memory usage with many connections.\ntype bufferedWriter struct {\n\tw  io.Writer     // immutable\n\tbw *bufio.Writer // non-nil when data is buffered\n}\n\nfunc newBufferedWriter(w io.Writer) *bufferedWriter {\n\treturn &bufferedWriter{w: w}\n}\n\n// bufWriterPoolBufferSize is the size of bufio.Writer's\n// buffers created using bufWriterPool.\n//\n// TODO: pick a less arbitrary value? this is a bit under\n// (3 x typical 1500 byte MTU) at least. Other than that,\n// not much thought went into it.\nconst bufWriterPoolBufferSize = 4 << 10\n\nvar bufWriterPool = sync.Pool{\n\tNew: func() interface{} {\n\t\treturn bufio.NewWriterSize(nil, bufWriterPoolBufferSize)\n\t},\n}\n\nfunc (w *bufferedWriter) Available() int {\n\tif w.bw == nil {\n\t\treturn bufWriterPoolBufferSize\n\t}\n\treturn w.bw.Available()\n}\n\nfunc (w *bufferedWriter) Write(p []byte) (n int, err error) {\n\tif w.bw == nil {\n\t\tbw := bufWriterPool.Get().(*bufio.Writer)\n\t\tbw.Reset(w.w)\n\t\tw.bw = bw\n\t}\n\treturn w.bw.Write(p)\n}\n\nfunc (w *bufferedWriter) Flush() error {\n\tbw := w.bw\n\tif bw == nil {\n\t\treturn nil\n\t}\n\terr := bw.Flush()\n\tbw.Reset(nil)\n\tbufWriterPool.Put(bw)\n\tw.bw = nil\n\treturn err\n}\n\nfunc mustUint31(v int32) uint32 {\n\tif v < 0 || v > 2147483647 {\n\t\tpanic(\"out of range\")\n\t}\n\treturn uint32(v)\n}\n\n// bodyAllowedForStatus reports whether a given response status code\n// permits a body. See RFC 7230, section 3.3.\nfunc bodyAllowedForStatus(status int) bool {\n\tswitch {\n\tcase status >= 100 && status <= 199:\n\t\treturn false\n\tcase status == 204:\n\t\treturn false\n\tcase status == 304:\n\t\treturn false\n\t}\n\treturn true\n}\n\ntype httpError struct {\n\tmsg     string\n\ttimeout bool\n}\n\nfunc (e *httpError) Error() string   { return e.msg }\nfunc (e *httpError) Timeout() bool   { return e.timeout }\nfunc (e *httpError) Temporary() bool { return true }\n\nvar errTimeout error = &httpError{msg: \"http2: timeout awaiting response headers\", timeout: true}\n\ntype connectionStater interface {\n\tConnectionState() tls.ConnectionState\n}\n\nvar sorterPool = sync.Pool{New: func() interface{} { return new(sorter) }}\n\ntype sorter struct {\n\tv []string // owned by sorter\n}\n\nfunc (s *sorter) Len() int           { return len(s.v) }\nfunc (s *sorter) Swap(i, j int)      { s.v[i], s.v[j] = s.v[j], s.v[i] }\nfunc (s *sorter) Less(i, j int) bool { return s.v[i] < s.v[j] }\n\n// Keys returns the sorted keys of h.\n//\n// The returned slice is only valid until s used again or returned to\n// its pool.\nfunc (s *sorter) Keys(h http.Header) []string {\n\tkeys := s.v[:0]\n\tfor k := range h {\n\t\tkeys = append(keys, k)\n\t}\n\ts.v = keys\n\tsort.Sort(s)\n\treturn keys\n}\n\nfunc (s *sorter) SortStrings(ss []string) {\n\t// Our sorter works on s.v, which sorter owns, so\n\t// stash it away while we sort the user's buffer.\n\tsave := s.v\n\ts.v = ss\n\tsort.Sort(s)\n\ts.v = save\n}\n\n// validPseudoPath reports whether v is a valid :path pseudo-header\n// value. It must be either:\n//\n//     *) a non-empty string starting with '/'\n//     *) the string '*', for OPTIONS requests.\n//\n// For now this is only used a quick check for deciding when to clean\n// up Opaque URLs before sending requests from the Transport.\n// See golang.org/issue/16847\n//\n// We used to enforce that the path also didn't start with \"//\", but\n// Google's GFE accepts such paths and Chrome sends them, so ignore\n// that part of the spec. See golang.org/issue/19103.\nfunc validPseudoPath(v string) bool {\n\treturn (len(v) > 0 && v[0] == '/') || v == \"*\"\n}\n"
  },
  {
    "path": "vendor/golang.org/x/net/http2/not_go111.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build !go1.11\n\npackage http2\n\nimport (\n\t\"net/http/httptrace\"\n\t\"net/textproto\"\n)\n\nfunc traceHasWroteHeaderField(trace *httptrace.ClientTrace) bool { return false }\n\nfunc traceWroteHeaderField(trace *httptrace.ClientTrace, k, v string) {}\n\nfunc traceGot1xxResponseFunc(trace *httptrace.ClientTrace) func(int, textproto.MIMEHeader) error {\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/golang.org/x/net/http2/pipe.go",
    "content": "// Copyright 2014 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage http2\n\nimport (\n\t\"errors\"\n\t\"io\"\n\t\"sync\"\n)\n\n// pipe is a goroutine-safe io.Reader/io.Writer pair. It's like\n// io.Pipe except there are no PipeReader/PipeWriter halves, and the\n// underlying buffer is an interface. (io.Pipe is always unbuffered)\ntype pipe struct {\n\tmu       sync.Mutex\n\tc        sync.Cond     // c.L lazily initialized to &p.mu\n\tb        pipeBuffer    // nil when done reading\n\terr      error         // read error once empty. non-nil means closed.\n\tbreakErr error         // immediate read error (caller doesn't see rest of b)\n\tdonec    chan struct{} // closed on error\n\treadFn   func()        // optional code to run in Read before error\n}\n\ntype pipeBuffer interface {\n\tLen() int\n\tio.Writer\n\tio.Reader\n}\n\nfunc (p *pipe) Len() int {\n\tp.mu.Lock()\n\tdefer p.mu.Unlock()\n\tif p.b == nil {\n\t\treturn 0\n\t}\n\treturn p.b.Len()\n}\n\n// Read waits until data is available and copies bytes\n// from the buffer into p.\nfunc (p *pipe) Read(d []byte) (n int, err error) {\n\tp.mu.Lock()\n\tdefer p.mu.Unlock()\n\tif p.c.L == nil {\n\t\tp.c.L = &p.mu\n\t}\n\tfor {\n\t\tif p.breakErr != nil {\n\t\t\treturn 0, p.breakErr\n\t\t}\n\t\tif p.b != nil && p.b.Len() > 0 {\n\t\t\treturn p.b.Read(d)\n\t\t}\n\t\tif p.err != nil {\n\t\t\tif p.readFn != nil {\n\t\t\t\tp.readFn()     // e.g. copy trailers\n\t\t\t\tp.readFn = nil // not sticky like p.err\n\t\t\t}\n\t\t\tp.b = nil\n\t\t\treturn 0, p.err\n\t\t}\n\t\tp.c.Wait()\n\t}\n}\n\nvar errClosedPipeWrite = errors.New(\"write on closed buffer\")\n\n// Write copies bytes from p into the buffer and wakes a reader.\n// It is an error to write more data than the buffer can hold.\nfunc (p *pipe) Write(d []byte) (n int, err error) {\n\tp.mu.Lock()\n\tdefer p.mu.Unlock()\n\tif p.c.L == nil {\n\t\tp.c.L = &p.mu\n\t}\n\tdefer p.c.Signal()\n\tif p.err != nil {\n\t\treturn 0, errClosedPipeWrite\n\t}\n\tif p.breakErr != nil {\n\t\treturn len(d), nil // discard when there is no reader\n\t}\n\treturn p.b.Write(d)\n}\n\n// CloseWithError causes the next Read (waking up a current blocked\n// Read if needed) to return the provided err after all data has been\n// read.\n//\n// The error must be non-nil.\nfunc (p *pipe) CloseWithError(err error) { p.closeWithError(&p.err, err, nil) }\n\n// BreakWithError causes the next Read (waking up a current blocked\n// Read if needed) to return the provided err immediately, without\n// waiting for unread data.\nfunc (p *pipe) BreakWithError(err error) { p.closeWithError(&p.breakErr, err, nil) }\n\n// closeWithErrorAndCode is like CloseWithError but also sets some code to run\n// in the caller's goroutine before returning the error.\nfunc (p *pipe) closeWithErrorAndCode(err error, fn func()) { p.closeWithError(&p.err, err, fn) }\n\nfunc (p *pipe) closeWithError(dst *error, err error, fn func()) {\n\tif err == nil {\n\t\tpanic(\"err must be non-nil\")\n\t}\n\tp.mu.Lock()\n\tdefer p.mu.Unlock()\n\tif p.c.L == nil {\n\t\tp.c.L = &p.mu\n\t}\n\tdefer p.c.Signal()\n\tif *dst != nil {\n\t\t// Already been done.\n\t\treturn\n\t}\n\tp.readFn = fn\n\tif dst == &p.breakErr {\n\t\tp.b = nil\n\t}\n\t*dst = err\n\tp.closeDoneLocked()\n}\n\n// requires p.mu be held.\nfunc (p *pipe) closeDoneLocked() {\n\tif p.donec == nil {\n\t\treturn\n\t}\n\t// Close if unclosed. This isn't racy since we always\n\t// hold p.mu while closing.\n\tselect {\n\tcase <-p.donec:\n\tdefault:\n\t\tclose(p.donec)\n\t}\n}\n\n// Err returns the error (if any) first set by BreakWithError or CloseWithError.\nfunc (p *pipe) Err() error {\n\tp.mu.Lock()\n\tdefer p.mu.Unlock()\n\tif p.breakErr != nil {\n\t\treturn p.breakErr\n\t}\n\treturn p.err\n}\n\n// Done returns a channel which is closed if and when this pipe is closed\n// with CloseWithError.\nfunc (p *pipe) Done() <-chan struct{} {\n\tp.mu.Lock()\n\tdefer p.mu.Unlock()\n\tif p.donec == nil {\n\t\tp.donec = make(chan struct{})\n\t\tif p.err != nil || p.breakErr != nil {\n\t\t\t// Already hit an error.\n\t\t\tp.closeDoneLocked()\n\t\t}\n\t}\n\treturn p.donec\n}\n"
  },
  {
    "path": "vendor/golang.org/x/net/http2/server.go",
    "content": "// Copyright 2014 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// TODO: turn off the serve goroutine when idle, so\n// an idle conn only has the readFrames goroutine active. (which could\n// also be optimized probably to pin less memory in crypto/tls). This\n// would involve tracking when the serve goroutine is active (atomic\n// int32 read/CAS probably?) and starting it up when frames arrive,\n// and shutting it down when all handlers exit. the occasional PING\n// packets could use time.AfterFunc to call sc.wakeStartServeLoop()\n// (which is a no-op if already running) and then queue the PING write\n// as normal. The serve loop would then exit in most cases (if no\n// Handlers running) and not be woken up again until the PING packet\n// returns.\n\n// TODO (maybe): add a mechanism for Handlers to going into\n// half-closed-local mode (rw.(io.Closer) test?) but not exit their\n// handler, and continue to be able to read from the\n// Request.Body. This would be a somewhat semantic change from HTTP/1\n// (or at least what we expose in net/http), so I'd probably want to\n// add it there too. For now, this package says that returning from\n// the Handler ServeHTTP function means you're both done reading and\n// done writing, without a way to stop just one or the other.\n\npackage http2\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"context\"\n\t\"crypto/tls\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"log\"\n\t\"math\"\n\t\"net\"\n\t\"net/http\"\n\t\"net/textproto\"\n\t\"net/url\"\n\t\"os\"\n\t\"reflect\"\n\t\"runtime\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\t\"time\"\n\n\t\"golang.org/x/net/http/httpguts\"\n\t\"golang.org/x/net/http2/hpack\"\n)\n\nconst (\n\tprefaceTimeout        = 10 * time.Second\n\tfirstSettingsTimeout  = 2 * time.Second // should be in-flight with preface anyway\n\thandlerChunkWriteSize = 4 << 10\n\tdefaultMaxStreams     = 250 // TODO: make this 100 as the GFE seems to?\n)\n\nvar (\n\terrClientDisconnected = errors.New(\"client disconnected\")\n\terrClosedBody         = errors.New(\"body closed by handler\")\n\terrHandlerComplete    = errors.New(\"http2: request body closed due to handler exiting\")\n\terrStreamClosed       = errors.New(\"http2: stream closed\")\n)\n\nvar responseWriterStatePool = sync.Pool{\n\tNew: func() interface{} {\n\t\trws := &responseWriterState{}\n\t\trws.bw = bufio.NewWriterSize(chunkWriter{rws}, handlerChunkWriteSize)\n\t\treturn rws\n\t},\n}\n\n// Test hooks.\nvar (\n\ttestHookOnConn        func()\n\ttestHookGetServerConn func(*serverConn)\n\ttestHookOnPanicMu     *sync.Mutex // nil except in tests\n\ttestHookOnPanic       func(sc *serverConn, panicVal interface{}) (rePanic bool)\n)\n\n// Server is an HTTP/2 server.\ntype Server struct {\n\t// MaxHandlers limits the number of http.Handler ServeHTTP goroutines\n\t// which may run at a time over all connections.\n\t// Negative or zero no limit.\n\t// TODO: implement\n\tMaxHandlers int\n\n\t// MaxConcurrentStreams optionally specifies the number of\n\t// concurrent streams that each client may have open at a\n\t// time. This is unrelated to the number of http.Handler goroutines\n\t// which may be active globally, which is MaxHandlers.\n\t// If zero, MaxConcurrentStreams defaults to at least 100, per\n\t// the HTTP/2 spec's recommendations.\n\tMaxConcurrentStreams uint32\n\n\t// MaxReadFrameSize optionally specifies the largest frame\n\t// this server is willing to read. A valid value is between\n\t// 16k and 16M, inclusive. If zero or otherwise invalid, a\n\t// default value is used.\n\tMaxReadFrameSize uint32\n\n\t// PermitProhibitedCipherSuites, if true, permits the use of\n\t// cipher suites prohibited by the HTTP/2 spec.\n\tPermitProhibitedCipherSuites bool\n\n\t// IdleTimeout specifies how long until idle clients should be\n\t// closed with a GOAWAY frame. PING frames are not considered\n\t// activity for the purposes of IdleTimeout.\n\tIdleTimeout time.Duration\n\n\t// MaxUploadBufferPerConnection is the size of the initial flow\n\t// control window for each connections. The HTTP/2 spec does not\n\t// allow this to be smaller than 65535 or larger than 2^32-1.\n\t// If the value is outside this range, a default value will be\n\t// used instead.\n\tMaxUploadBufferPerConnection int32\n\n\t// MaxUploadBufferPerStream is the size of the initial flow control\n\t// window for each stream. The HTTP/2 spec does not allow this to\n\t// be larger than 2^32-1. If the value is zero or larger than the\n\t// maximum, a default value will be used instead.\n\tMaxUploadBufferPerStream int32\n\n\t// NewWriteScheduler constructs a write scheduler for a connection.\n\t// If nil, a default scheduler is chosen.\n\tNewWriteScheduler func() WriteScheduler\n\n\t// Internal state. This is a pointer (rather than embedded directly)\n\t// so that we don't embed a Mutex in this struct, which will make the\n\t// struct non-copyable, which might break some callers.\n\tstate *serverInternalState\n}\n\nfunc (s *Server) initialConnRecvWindowSize() int32 {\n\tif s.MaxUploadBufferPerConnection > initialWindowSize {\n\t\treturn s.MaxUploadBufferPerConnection\n\t}\n\treturn 1 << 20\n}\n\nfunc (s *Server) initialStreamRecvWindowSize() int32 {\n\tif s.MaxUploadBufferPerStream > 0 {\n\t\treturn s.MaxUploadBufferPerStream\n\t}\n\treturn 1 << 20\n}\n\nfunc (s *Server) maxReadFrameSize() uint32 {\n\tif v := s.MaxReadFrameSize; v >= minMaxFrameSize && v <= maxFrameSize {\n\t\treturn v\n\t}\n\treturn defaultMaxReadFrameSize\n}\n\nfunc (s *Server) maxConcurrentStreams() uint32 {\n\tif v := s.MaxConcurrentStreams; v > 0 {\n\t\treturn v\n\t}\n\treturn defaultMaxStreams\n}\n\ntype serverInternalState struct {\n\tmu          sync.Mutex\n\tactiveConns map[*serverConn]struct{}\n}\n\nfunc (s *serverInternalState) registerConn(sc *serverConn) {\n\tif s == nil {\n\t\treturn // if the Server was used without calling ConfigureServer\n\t}\n\ts.mu.Lock()\n\ts.activeConns[sc] = struct{}{}\n\ts.mu.Unlock()\n}\n\nfunc (s *serverInternalState) unregisterConn(sc *serverConn) {\n\tif s == nil {\n\t\treturn // if the Server was used without calling ConfigureServer\n\t}\n\ts.mu.Lock()\n\tdelete(s.activeConns, sc)\n\ts.mu.Unlock()\n}\n\nfunc (s *serverInternalState) startGracefulShutdown() {\n\tif s == nil {\n\t\treturn // if the Server was used without calling ConfigureServer\n\t}\n\ts.mu.Lock()\n\tfor sc := range s.activeConns {\n\t\tsc.startGracefulShutdown()\n\t}\n\ts.mu.Unlock()\n}\n\n// ConfigureServer adds HTTP/2 support to a net/http Server.\n//\n// The configuration conf may be nil.\n//\n// ConfigureServer must be called before s begins serving.\nfunc ConfigureServer(s *http.Server, conf *Server) error {\n\tif s == nil {\n\t\tpanic(\"nil *http.Server\")\n\t}\n\tif conf == nil {\n\t\tconf = new(Server)\n\t}\n\tconf.state = &serverInternalState{activeConns: make(map[*serverConn]struct{})}\n\tif h1, h2 := s, conf; h2.IdleTimeout == 0 {\n\t\tif h1.IdleTimeout != 0 {\n\t\t\th2.IdleTimeout = h1.IdleTimeout\n\t\t} else {\n\t\t\th2.IdleTimeout = h1.ReadTimeout\n\t\t}\n\t}\n\ts.RegisterOnShutdown(conf.state.startGracefulShutdown)\n\n\tif s.TLSConfig == nil {\n\t\ts.TLSConfig = new(tls.Config)\n\t} else if s.TLSConfig.CipherSuites != nil {\n\t\t// If they already provided a CipherSuite list, return\n\t\t// an error if it has a bad order or is missing\n\t\t// ECDHE_RSA_WITH_AES_128_GCM_SHA256 or ECDHE_ECDSA_WITH_AES_128_GCM_SHA256.\n\t\thaveRequired := false\n\t\tsawBad := false\n\t\tfor i, cs := range s.TLSConfig.CipherSuites {\n\t\t\tswitch cs {\n\t\t\tcase tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,\n\t\t\t\t// Alternative MTI cipher to not discourage ECDSA-only servers.\n\t\t\t\t// See http://golang.org/cl/30721 for further information.\n\t\t\t\ttls.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256:\n\t\t\t\thaveRequired = true\n\t\t\t}\n\t\t\tif isBadCipher(cs) {\n\t\t\t\tsawBad = true\n\t\t\t} else if sawBad {\n\t\t\t\treturn fmt.Errorf(\"http2: TLSConfig.CipherSuites index %d contains an HTTP/2-approved cipher suite (%#04x), but it comes after unapproved cipher suites. With this configuration, clients that don't support previous, approved cipher suites may be given an unapproved one and reject the connection.\", i, cs)\n\t\t\t}\n\t\t}\n\t\tif !haveRequired {\n\t\t\treturn fmt.Errorf(\"http2: TLSConfig.CipherSuites is missing an HTTP/2-required AES_128_GCM_SHA256 cipher.\")\n\t\t}\n\t}\n\n\t// Note: not setting MinVersion to tls.VersionTLS12,\n\t// as we don't want to interfere with HTTP/1.1 traffic\n\t// on the user's server. We enforce TLS 1.2 later once\n\t// we accept a connection. Ideally this should be done\n\t// during next-proto selection, but using TLS <1.2 with\n\t// HTTP/2 is still the client's bug.\n\n\ts.TLSConfig.PreferServerCipherSuites = true\n\n\thaveNPN := false\n\tfor _, p := range s.TLSConfig.NextProtos {\n\t\tif p == NextProtoTLS {\n\t\t\thaveNPN = true\n\t\t\tbreak\n\t\t}\n\t}\n\tif !haveNPN {\n\t\ts.TLSConfig.NextProtos = append(s.TLSConfig.NextProtos, NextProtoTLS)\n\t}\n\n\tif s.TLSNextProto == nil {\n\t\ts.TLSNextProto = map[string]func(*http.Server, *tls.Conn, http.Handler){}\n\t}\n\tprotoHandler := func(hs *http.Server, c *tls.Conn, h http.Handler) {\n\t\tif testHookOnConn != nil {\n\t\t\ttestHookOnConn()\n\t\t}\n\t\tconf.ServeConn(c, &ServeConnOpts{\n\t\t\tHandler:    h,\n\t\t\tBaseConfig: hs,\n\t\t})\n\t}\n\ts.TLSNextProto[NextProtoTLS] = protoHandler\n\treturn nil\n}\n\n// ServeConnOpts are options for the Server.ServeConn method.\ntype ServeConnOpts struct {\n\t// BaseConfig optionally sets the base configuration\n\t// for values. If nil, defaults are used.\n\tBaseConfig *http.Server\n\n\t// Handler specifies which handler to use for processing\n\t// requests. If nil, BaseConfig.Handler is used. If BaseConfig\n\t// or BaseConfig.Handler is nil, http.DefaultServeMux is used.\n\tHandler http.Handler\n}\n\nfunc (o *ServeConnOpts) baseConfig() *http.Server {\n\tif o != nil && o.BaseConfig != nil {\n\t\treturn o.BaseConfig\n\t}\n\treturn new(http.Server)\n}\n\nfunc (o *ServeConnOpts) handler() http.Handler {\n\tif o != nil {\n\t\tif o.Handler != nil {\n\t\t\treturn o.Handler\n\t\t}\n\t\tif o.BaseConfig != nil && o.BaseConfig.Handler != nil {\n\t\t\treturn o.BaseConfig.Handler\n\t\t}\n\t}\n\treturn http.DefaultServeMux\n}\n\n// ServeConn serves HTTP/2 requests on the provided connection and\n// blocks until the connection is no longer readable.\n//\n// ServeConn starts speaking HTTP/2 assuming that c has not had any\n// reads or writes. It writes its initial settings frame and expects\n// to be able to read the preface and settings frame from the\n// client. If c has a ConnectionState method like a *tls.Conn, the\n// ConnectionState is used to verify the TLS ciphersuite and to set\n// the Request.TLS field in Handlers.\n//\n// ServeConn does not support h2c by itself. Any h2c support must be\n// implemented in terms of providing a suitably-behaving net.Conn.\n//\n// The opts parameter is optional. If nil, default values are used.\nfunc (s *Server) ServeConn(c net.Conn, opts *ServeConnOpts) {\n\tbaseCtx, cancel := serverConnBaseContext(c, opts)\n\tdefer cancel()\n\n\tsc := &serverConn{\n\t\tsrv:                         s,\n\t\ths:                          opts.baseConfig(),\n\t\tconn:                        c,\n\t\tbaseCtx:                     baseCtx,\n\t\tremoteAddrStr:               c.RemoteAddr().String(),\n\t\tbw:                          newBufferedWriter(c),\n\t\thandler:                     opts.handler(),\n\t\tstreams:                     make(map[uint32]*stream),\n\t\treadFrameCh:                 make(chan readFrameResult),\n\t\twantWriteFrameCh:            make(chan FrameWriteRequest, 8),\n\t\tserveMsgCh:                  make(chan interface{}, 8),\n\t\twroteFrameCh:                make(chan frameWriteResult, 1), // buffered; one send in writeFrameAsync\n\t\tbodyReadCh:                  make(chan bodyReadMsg),         // buffering doesn't matter either way\n\t\tdoneServing:                 make(chan struct{}),\n\t\tclientMaxStreams:            math.MaxUint32, // Section 6.5.2: \"Initially, there is no limit to this value\"\n\t\tadvMaxStreams:               s.maxConcurrentStreams(),\n\t\tinitialStreamSendWindowSize: initialWindowSize,\n\t\tmaxFrameSize:                initialMaxFrameSize,\n\t\theaderTableSize:             initialHeaderTableSize,\n\t\tserveG:                      newGoroutineLock(),\n\t\tpushEnabled:                 true,\n\t}\n\n\ts.state.registerConn(sc)\n\tdefer s.state.unregisterConn(sc)\n\n\t// The net/http package sets the write deadline from the\n\t// http.Server.WriteTimeout during the TLS handshake, but then\n\t// passes the connection off to us with the deadline already set.\n\t// Write deadlines are set per stream in serverConn.newStream.\n\t// Disarm the net.Conn write deadline here.\n\tif sc.hs.WriteTimeout != 0 {\n\t\tsc.conn.SetWriteDeadline(time.Time{})\n\t}\n\n\tif s.NewWriteScheduler != nil {\n\t\tsc.writeSched = s.NewWriteScheduler()\n\t} else {\n\t\tsc.writeSched = NewRandomWriteScheduler()\n\t}\n\n\t// These start at the RFC-specified defaults. If there is a higher\n\t// configured value for inflow, that will be updated when we send a\n\t// WINDOW_UPDATE shortly after sending SETTINGS.\n\tsc.flow.add(initialWindowSize)\n\tsc.inflow.add(initialWindowSize)\n\tsc.hpackEncoder = hpack.NewEncoder(&sc.headerWriteBuf)\n\n\tfr := NewFramer(sc.bw, c)\n\tfr.ReadMetaHeaders = hpack.NewDecoder(initialHeaderTableSize, nil)\n\tfr.MaxHeaderListSize = sc.maxHeaderListSize()\n\tfr.SetMaxReadFrameSize(s.maxReadFrameSize())\n\tsc.framer = fr\n\n\tif tc, ok := c.(connectionStater); ok {\n\t\tsc.tlsState = new(tls.ConnectionState)\n\t\t*sc.tlsState = tc.ConnectionState()\n\t\t// 9.2 Use of TLS Features\n\t\t// An implementation of HTTP/2 over TLS MUST use TLS\n\t\t// 1.2 or higher with the restrictions on feature set\n\t\t// and cipher suite described in this section. Due to\n\t\t// implementation limitations, it might not be\n\t\t// possible to fail TLS negotiation. An endpoint MUST\n\t\t// immediately terminate an HTTP/2 connection that\n\t\t// does not meet the TLS requirements described in\n\t\t// this section with a connection error (Section\n\t\t// 5.4.1) of type INADEQUATE_SECURITY.\n\t\tif sc.tlsState.Version < tls.VersionTLS12 {\n\t\t\tsc.rejectConn(ErrCodeInadequateSecurity, \"TLS version too low\")\n\t\t\treturn\n\t\t}\n\n\t\tif sc.tlsState.ServerName == \"\" {\n\t\t\t// Client must use SNI, but we don't enforce that anymore,\n\t\t\t// since it was causing problems when connecting to bare IP\n\t\t\t// addresses during development.\n\t\t\t//\n\t\t\t// TODO: optionally enforce? Or enforce at the time we receive\n\t\t\t// a new request, and verify the ServerName matches the :authority?\n\t\t\t// But that precludes proxy situations, perhaps.\n\t\t\t//\n\t\t\t// So for now, do nothing here again.\n\t\t}\n\n\t\tif !s.PermitProhibitedCipherSuites && isBadCipher(sc.tlsState.CipherSuite) {\n\t\t\t// \"Endpoints MAY choose to generate a connection error\n\t\t\t// (Section 5.4.1) of type INADEQUATE_SECURITY if one of\n\t\t\t// the prohibited cipher suites are negotiated.\"\n\t\t\t//\n\t\t\t// We choose that. In my opinion, the spec is weak\n\t\t\t// here. It also says both parties must support at least\n\t\t\t// TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 so there's no\n\t\t\t// excuses here. If we really must, we could allow an\n\t\t\t// \"AllowInsecureWeakCiphers\" option on the server later.\n\t\t\t// Let's see how it plays out first.\n\t\t\tsc.rejectConn(ErrCodeInadequateSecurity, fmt.Sprintf(\"Prohibited TLS 1.2 Cipher Suite: %x\", sc.tlsState.CipherSuite))\n\t\t\treturn\n\t\t}\n\t}\n\n\tif hook := testHookGetServerConn; hook != nil {\n\t\thook(sc)\n\t}\n\tsc.serve()\n}\n\nfunc serverConnBaseContext(c net.Conn, opts *ServeConnOpts) (ctx context.Context, cancel func()) {\n\tctx, cancel = context.WithCancel(context.Background())\n\tctx = context.WithValue(ctx, http.LocalAddrContextKey, c.LocalAddr())\n\tif hs := opts.baseConfig(); hs != nil {\n\t\tctx = context.WithValue(ctx, http.ServerContextKey, hs)\n\t}\n\treturn\n}\n\nfunc (sc *serverConn) rejectConn(err ErrCode, debug string) {\n\tsc.vlogf(\"http2: server rejecting conn: %v, %s\", err, debug)\n\t// ignoring errors. hanging up anyway.\n\tsc.framer.WriteGoAway(0, err, []byte(debug))\n\tsc.bw.Flush()\n\tsc.conn.Close()\n}\n\ntype serverConn struct {\n\t// Immutable:\n\tsrv              *Server\n\ths               *http.Server\n\tconn             net.Conn\n\tbw               *bufferedWriter // writing to conn\n\thandler          http.Handler\n\tbaseCtx          context.Context\n\tframer           *Framer\n\tdoneServing      chan struct{}          // closed when serverConn.serve ends\n\treadFrameCh      chan readFrameResult   // written by serverConn.readFrames\n\twantWriteFrameCh chan FrameWriteRequest // from handlers -> serve\n\twroteFrameCh     chan frameWriteResult  // from writeFrameAsync -> serve, tickles more frame writes\n\tbodyReadCh       chan bodyReadMsg       // from handlers -> serve\n\tserveMsgCh       chan interface{}       // misc messages & code to send to / run on the serve loop\n\tflow             flow                   // conn-wide (not stream-specific) outbound flow control\n\tinflow           flow                   // conn-wide inbound flow control\n\ttlsState         *tls.ConnectionState   // shared by all handlers, like net/http\n\tremoteAddrStr    string\n\twriteSched       WriteScheduler\n\n\t// Everything following is owned by the serve loop; use serveG.check():\n\tserveG                      goroutineLock // used to verify funcs are on serve()\n\tpushEnabled                 bool\n\tsawFirstSettings            bool // got the initial SETTINGS frame after the preface\n\tneedToSendSettingsAck       bool\n\tunackedSettings             int    // how many SETTINGS have we sent without ACKs?\n\tclientMaxStreams            uint32 // SETTINGS_MAX_CONCURRENT_STREAMS from client (our PUSH_PROMISE limit)\n\tadvMaxStreams               uint32 // our SETTINGS_MAX_CONCURRENT_STREAMS advertised the client\n\tcurClientStreams            uint32 // number of open streams initiated by the client\n\tcurPushedStreams            uint32 // number of open streams initiated by server push\n\tmaxClientStreamID           uint32 // max ever seen from client (odd), or 0 if there have been no client requests\n\tmaxPushPromiseID            uint32 // ID of the last push promise (even), or 0 if there have been no pushes\n\tstreams                     map[uint32]*stream\n\tinitialStreamSendWindowSize int32\n\tmaxFrameSize                int32\n\theaderTableSize             uint32\n\tpeerMaxHeaderListSize       uint32            // zero means unknown (default)\n\tcanonHeader                 map[string]string // http2-lower-case -> Go-Canonical-Case\n\twritingFrame                bool              // started writing a frame (on serve goroutine or separate)\n\twritingFrameAsync           bool              // started a frame on its own goroutine but haven't heard back on wroteFrameCh\n\tneedsFrameFlush             bool              // last frame write wasn't a flush\n\tinGoAway                    bool              // we've started to or sent GOAWAY\n\tinFrameScheduleLoop         bool              // whether we're in the scheduleFrameWrite loop\n\tneedToSendGoAway            bool              // we need to schedule a GOAWAY frame write\n\tgoAwayCode                  ErrCode\n\tshutdownTimer               *time.Timer // nil until used\n\tidleTimer                   *time.Timer // nil if unused\n\n\t// Owned by the writeFrameAsync goroutine:\n\theaderWriteBuf bytes.Buffer\n\thpackEncoder   *hpack.Encoder\n\n\t// Used by startGracefulShutdown.\n\tshutdownOnce sync.Once\n}\n\nfunc (sc *serverConn) maxHeaderListSize() uint32 {\n\tn := sc.hs.MaxHeaderBytes\n\tif n <= 0 {\n\t\tn = http.DefaultMaxHeaderBytes\n\t}\n\t// http2's count is in a slightly different unit and includes 32 bytes per pair.\n\t// So, take the net/http.Server value and pad it up a bit, assuming 10 headers.\n\tconst perFieldOverhead = 32 // per http2 spec\n\tconst typicalHeaders = 10   // conservative\n\treturn uint32(n + typicalHeaders*perFieldOverhead)\n}\n\nfunc (sc *serverConn) curOpenStreams() uint32 {\n\tsc.serveG.check()\n\treturn sc.curClientStreams + sc.curPushedStreams\n}\n\n// stream represents a stream. This is the minimal metadata needed by\n// the serve goroutine. Most of the actual stream state is owned by\n// the http.Handler's goroutine in the responseWriter. Because the\n// responseWriter's responseWriterState is recycled at the end of a\n// handler, this struct intentionally has no pointer to the\n// *responseWriter{,State} itself, as the Handler ending nils out the\n// responseWriter's state field.\ntype stream struct {\n\t// immutable:\n\tsc        *serverConn\n\tid        uint32\n\tbody      *pipe       // non-nil if expecting DATA frames\n\tcw        closeWaiter // closed wait stream transitions to closed state\n\tctx       context.Context\n\tcancelCtx func()\n\n\t// owned by serverConn's serve loop:\n\tbodyBytes        int64   // body bytes seen so far\n\tdeclBodyBytes    int64   // or -1 if undeclared\n\tflow             flow    // limits writing from Handler to client\n\tinflow           flow    // what the client is allowed to POST/etc to us\n\tparent           *stream // or nil\n\tnumTrailerValues int64\n\tweight           uint8\n\tstate            streamState\n\tresetQueued      bool        // RST_STREAM queued for write; set by sc.resetStream\n\tgotTrailerHeader bool        // HEADER frame for trailers was seen\n\twroteHeaders     bool        // whether we wrote headers (not status 100)\n\twriteDeadline    *time.Timer // nil if unused\n\n\ttrailer    http.Header // accumulated trailers\n\treqTrailer http.Header // handler's Request.Trailer\n}\n\nfunc (sc *serverConn) Framer() *Framer  { return sc.framer }\nfunc (sc *serverConn) CloseConn() error { return sc.conn.Close() }\nfunc (sc *serverConn) Flush() error     { return sc.bw.Flush() }\nfunc (sc *serverConn) HeaderEncoder() (*hpack.Encoder, *bytes.Buffer) {\n\treturn sc.hpackEncoder, &sc.headerWriteBuf\n}\n\nfunc (sc *serverConn) state(streamID uint32) (streamState, *stream) {\n\tsc.serveG.check()\n\t// http://tools.ietf.org/html/rfc7540#section-5.1\n\tif st, ok := sc.streams[streamID]; ok {\n\t\treturn st.state, st\n\t}\n\t// \"The first use of a new stream identifier implicitly closes all\n\t// streams in the \"idle\" state that might have been initiated by\n\t// that peer with a lower-valued stream identifier. For example, if\n\t// a client sends a HEADERS frame on stream 7 without ever sending a\n\t// frame on stream 5, then stream 5 transitions to the \"closed\"\n\t// state when the first frame for stream 7 is sent or received.\"\n\tif streamID%2 == 1 {\n\t\tif streamID <= sc.maxClientStreamID {\n\t\t\treturn stateClosed, nil\n\t\t}\n\t} else {\n\t\tif streamID <= sc.maxPushPromiseID {\n\t\t\treturn stateClosed, nil\n\t\t}\n\t}\n\treturn stateIdle, nil\n}\n\n// setConnState calls the net/http ConnState hook for this connection, if configured.\n// Note that the net/http package does StateNew and StateClosed for us.\n// There is currently no plan for StateHijacked or hijacking HTTP/2 connections.\nfunc (sc *serverConn) setConnState(state http.ConnState) {\n\tif sc.hs.ConnState != nil {\n\t\tsc.hs.ConnState(sc.conn, state)\n\t}\n}\n\nfunc (sc *serverConn) vlogf(format string, args ...interface{}) {\n\tif VerboseLogs {\n\t\tsc.logf(format, args...)\n\t}\n}\n\nfunc (sc *serverConn) logf(format string, args ...interface{}) {\n\tif lg := sc.hs.ErrorLog; lg != nil {\n\t\tlg.Printf(format, args...)\n\t} else {\n\t\tlog.Printf(format, args...)\n\t}\n}\n\n// errno returns v's underlying uintptr, else 0.\n//\n// TODO: remove this helper function once http2 can use build\n// tags. See comment in isClosedConnError.\nfunc errno(v error) uintptr {\n\tif rv := reflect.ValueOf(v); rv.Kind() == reflect.Uintptr {\n\t\treturn uintptr(rv.Uint())\n\t}\n\treturn 0\n}\n\n// isClosedConnError reports whether err is an error from use of a closed\n// network connection.\nfunc isClosedConnError(err error) bool {\n\tif err == nil {\n\t\treturn false\n\t}\n\n\t// TODO: remove this string search and be more like the Windows\n\t// case below. That might involve modifying the standard library\n\t// to return better error types.\n\tstr := err.Error()\n\tif strings.Contains(str, \"use of closed network connection\") {\n\t\treturn true\n\t}\n\n\t// TODO(bradfitz): x/tools/cmd/bundle doesn't really support\n\t// build tags, so I can't make an http2_windows.go file with\n\t// Windows-specific stuff. Fix that and move this, once we\n\t// have a way to bundle this into std's net/http somehow.\n\tif runtime.GOOS == \"windows\" {\n\t\tif oe, ok := err.(*net.OpError); ok && oe.Op == \"read\" {\n\t\t\tif se, ok := oe.Err.(*os.SyscallError); ok && se.Syscall == \"wsarecv\" {\n\t\t\t\tconst WSAECONNABORTED = 10053\n\t\t\t\tconst WSAECONNRESET = 10054\n\t\t\t\tif n := errno(se.Err); n == WSAECONNRESET || n == WSAECONNABORTED {\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn false\n}\n\nfunc (sc *serverConn) condlogf(err error, format string, args ...interface{}) {\n\tif err == nil {\n\t\treturn\n\t}\n\tif err == io.EOF || err == io.ErrUnexpectedEOF || isClosedConnError(err) || err == errPrefaceTimeout {\n\t\t// Boring, expected errors.\n\t\tsc.vlogf(format, args...)\n\t} else {\n\t\tsc.logf(format, args...)\n\t}\n}\n\nfunc (sc *serverConn) canonicalHeader(v string) string {\n\tsc.serveG.check()\n\tbuildCommonHeaderMapsOnce()\n\tcv, ok := commonCanonHeader[v]\n\tif ok {\n\t\treturn cv\n\t}\n\tcv, ok = sc.canonHeader[v]\n\tif ok {\n\t\treturn cv\n\t}\n\tif sc.canonHeader == nil {\n\t\tsc.canonHeader = make(map[string]string)\n\t}\n\tcv = http.CanonicalHeaderKey(v)\n\tsc.canonHeader[v] = cv\n\treturn cv\n}\n\ntype readFrameResult struct {\n\tf   Frame // valid until readMore is called\n\terr error\n\n\t// readMore should be called once the consumer no longer needs or\n\t// retains f. After readMore, f is invalid and more frames can be\n\t// read.\n\treadMore func()\n}\n\n// readFrames is the loop that reads incoming frames.\n// It takes care to only read one frame at a time, blocking until the\n// consumer is done with the frame.\n// It's run on its own goroutine.\nfunc (sc *serverConn) readFrames() {\n\tgate := make(gate)\n\tgateDone := gate.Done\n\tfor {\n\t\tf, err := sc.framer.ReadFrame()\n\t\tselect {\n\t\tcase sc.readFrameCh <- readFrameResult{f, err, gateDone}:\n\t\tcase <-sc.doneServing:\n\t\t\treturn\n\t\t}\n\t\tselect {\n\t\tcase <-gate:\n\t\tcase <-sc.doneServing:\n\t\t\treturn\n\t\t}\n\t\tif terminalReadFrameError(err) {\n\t\t\treturn\n\t\t}\n\t}\n}\n\n// frameWriteResult is the message passed from writeFrameAsync to the serve goroutine.\ntype frameWriteResult struct {\n\twr  FrameWriteRequest // what was written (or attempted)\n\terr error             // result of the writeFrame call\n}\n\n// writeFrameAsync runs in its own goroutine and writes a single frame\n// and then reports when it's done.\n// At most one goroutine can be running writeFrameAsync at a time per\n// serverConn.\nfunc (sc *serverConn) writeFrameAsync(wr FrameWriteRequest) {\n\terr := wr.write.writeFrame(sc)\n\tsc.wroteFrameCh <- frameWriteResult{wr, err}\n}\n\nfunc (sc *serverConn) closeAllStreamsOnConnClose() {\n\tsc.serveG.check()\n\tfor _, st := range sc.streams {\n\t\tsc.closeStream(st, errClientDisconnected)\n\t}\n}\n\nfunc (sc *serverConn) stopShutdownTimer() {\n\tsc.serveG.check()\n\tif t := sc.shutdownTimer; t != nil {\n\t\tt.Stop()\n\t}\n}\n\nfunc (sc *serverConn) notePanic() {\n\t// Note: this is for serverConn.serve panicking, not http.Handler code.\n\tif testHookOnPanicMu != nil {\n\t\ttestHookOnPanicMu.Lock()\n\t\tdefer testHookOnPanicMu.Unlock()\n\t}\n\tif testHookOnPanic != nil {\n\t\tif e := recover(); e != nil {\n\t\t\tif testHookOnPanic(sc, e) {\n\t\t\t\tpanic(e)\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc (sc *serverConn) serve() {\n\tsc.serveG.check()\n\tdefer sc.notePanic()\n\tdefer sc.conn.Close()\n\tdefer sc.closeAllStreamsOnConnClose()\n\tdefer sc.stopShutdownTimer()\n\tdefer close(sc.doneServing) // unblocks handlers trying to send\n\n\tif VerboseLogs {\n\t\tsc.vlogf(\"http2: server connection from %v on %p\", sc.conn.RemoteAddr(), sc.hs)\n\t}\n\n\tsc.writeFrame(FrameWriteRequest{\n\t\twrite: writeSettings{\n\t\t\t{SettingMaxFrameSize, sc.srv.maxReadFrameSize()},\n\t\t\t{SettingMaxConcurrentStreams, sc.advMaxStreams},\n\t\t\t{SettingMaxHeaderListSize, sc.maxHeaderListSize()},\n\t\t\t{SettingInitialWindowSize, uint32(sc.srv.initialStreamRecvWindowSize())},\n\t\t},\n\t})\n\tsc.unackedSettings++\n\n\t// Each connection starts with intialWindowSize inflow tokens.\n\t// If a higher value is configured, we add more tokens.\n\tif diff := sc.srv.initialConnRecvWindowSize() - initialWindowSize; diff > 0 {\n\t\tsc.sendWindowUpdate(nil, int(diff))\n\t}\n\n\tif err := sc.readPreface(); err != nil {\n\t\tsc.condlogf(err, \"http2: server: error reading preface from client %v: %v\", sc.conn.RemoteAddr(), err)\n\t\treturn\n\t}\n\t// Now that we've got the preface, get us out of the\n\t// \"StateNew\" state. We can't go directly to idle, though.\n\t// Active means we read some data and anticipate a request. We'll\n\t// do another Active when we get a HEADERS frame.\n\tsc.setConnState(http.StateActive)\n\tsc.setConnState(http.StateIdle)\n\n\tif sc.srv.IdleTimeout != 0 {\n\t\tsc.idleTimer = time.AfterFunc(sc.srv.IdleTimeout, sc.onIdleTimer)\n\t\tdefer sc.idleTimer.Stop()\n\t}\n\n\tgo sc.readFrames() // closed by defer sc.conn.Close above\n\n\tsettingsTimer := time.AfterFunc(firstSettingsTimeout, sc.onSettingsTimer)\n\tdefer settingsTimer.Stop()\n\n\tloopNum := 0\n\tfor {\n\t\tloopNum++\n\t\tselect {\n\t\tcase wr := <-sc.wantWriteFrameCh:\n\t\t\tif se, ok := wr.write.(StreamError); ok {\n\t\t\t\tsc.resetStream(se)\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tsc.writeFrame(wr)\n\t\tcase res := <-sc.wroteFrameCh:\n\t\t\tsc.wroteFrame(res)\n\t\tcase res := <-sc.readFrameCh:\n\t\t\tif !sc.processFrameFromReader(res) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tres.readMore()\n\t\t\tif settingsTimer != nil {\n\t\t\t\tsettingsTimer.Stop()\n\t\t\t\tsettingsTimer = nil\n\t\t\t}\n\t\tcase m := <-sc.bodyReadCh:\n\t\t\tsc.noteBodyRead(m.st, m.n)\n\t\tcase msg := <-sc.serveMsgCh:\n\t\t\tswitch v := msg.(type) {\n\t\t\tcase func(int):\n\t\t\t\tv(loopNum) // for testing\n\t\t\tcase *serverMessage:\n\t\t\t\tswitch v {\n\t\t\t\tcase settingsTimerMsg:\n\t\t\t\t\tsc.logf(\"timeout waiting for SETTINGS frames from %v\", sc.conn.RemoteAddr())\n\t\t\t\t\treturn\n\t\t\t\tcase idleTimerMsg:\n\t\t\t\t\tsc.vlogf(\"connection is idle\")\n\t\t\t\t\tsc.goAway(ErrCodeNo)\n\t\t\t\tcase shutdownTimerMsg:\n\t\t\t\t\tsc.vlogf(\"GOAWAY close timer fired; closing conn from %v\", sc.conn.RemoteAddr())\n\t\t\t\t\treturn\n\t\t\t\tcase gracefulShutdownMsg:\n\t\t\t\t\tsc.startGracefulShutdownInternal()\n\t\t\t\tdefault:\n\t\t\t\t\tpanic(\"unknown timer\")\n\t\t\t\t}\n\t\t\tcase *startPushRequest:\n\t\t\t\tsc.startPush(v)\n\t\t\tdefault:\n\t\t\t\tpanic(fmt.Sprintf(\"unexpected type %T\", v))\n\t\t\t}\n\t\t}\n\n\t\t// Start the shutdown timer after sending a GOAWAY. When sending GOAWAY\n\t\t// with no error code (graceful shutdown), don't start the timer until\n\t\t// all open streams have been completed.\n\t\tsentGoAway := sc.inGoAway && !sc.needToSendGoAway && !sc.writingFrame\n\t\tgracefulShutdownComplete := sc.goAwayCode == ErrCodeNo && sc.curOpenStreams() == 0\n\t\tif sentGoAway && sc.shutdownTimer == nil && (sc.goAwayCode != ErrCodeNo || gracefulShutdownComplete) {\n\t\t\tsc.shutDownIn(goAwayTimeout)\n\t\t}\n\t}\n}\n\nfunc (sc *serverConn) awaitGracefulShutdown(sharedCh <-chan struct{}, privateCh chan struct{}) {\n\tselect {\n\tcase <-sc.doneServing:\n\tcase <-sharedCh:\n\t\tclose(privateCh)\n\t}\n}\n\ntype serverMessage int\n\n// Message values sent to serveMsgCh.\nvar (\n\tsettingsTimerMsg    = new(serverMessage)\n\tidleTimerMsg        = new(serverMessage)\n\tshutdownTimerMsg    = new(serverMessage)\n\tgracefulShutdownMsg = new(serverMessage)\n)\n\nfunc (sc *serverConn) onSettingsTimer() { sc.sendServeMsg(settingsTimerMsg) }\nfunc (sc *serverConn) onIdleTimer()     { sc.sendServeMsg(idleTimerMsg) }\nfunc (sc *serverConn) onShutdownTimer() { sc.sendServeMsg(shutdownTimerMsg) }\n\nfunc (sc *serverConn) sendServeMsg(msg interface{}) {\n\tsc.serveG.checkNotOn() // NOT\n\tselect {\n\tcase sc.serveMsgCh <- msg:\n\tcase <-sc.doneServing:\n\t}\n}\n\nvar errPrefaceTimeout = errors.New(\"timeout waiting for client preface\")\n\n// readPreface reads the ClientPreface greeting from the peer or\n// returns errPrefaceTimeout on timeout, or an error if the greeting\n// is invalid.\nfunc (sc *serverConn) readPreface() error {\n\terrc := make(chan error, 1)\n\tgo func() {\n\t\t// Read the client preface\n\t\tbuf := make([]byte, len(ClientPreface))\n\t\tif _, err := io.ReadFull(sc.conn, buf); err != nil {\n\t\t\terrc <- err\n\t\t} else if !bytes.Equal(buf, clientPreface) {\n\t\t\terrc <- fmt.Errorf(\"bogus greeting %q\", buf)\n\t\t} else {\n\t\t\terrc <- nil\n\t\t}\n\t}()\n\ttimer := time.NewTimer(prefaceTimeout) // TODO: configurable on *Server?\n\tdefer timer.Stop()\n\tselect {\n\tcase <-timer.C:\n\t\treturn errPrefaceTimeout\n\tcase err := <-errc:\n\t\tif err == nil {\n\t\t\tif VerboseLogs {\n\t\t\t\tsc.vlogf(\"http2: server: client %v said hello\", sc.conn.RemoteAddr())\n\t\t\t}\n\t\t}\n\t\treturn err\n\t}\n}\n\nvar errChanPool = sync.Pool{\n\tNew: func() interface{} { return make(chan error, 1) },\n}\n\nvar writeDataPool = sync.Pool{\n\tNew: func() interface{} { return new(writeData) },\n}\n\n// writeDataFromHandler writes DATA response frames from a handler on\n// the given stream.\nfunc (sc *serverConn) writeDataFromHandler(stream *stream, data []byte, endStream bool) error {\n\tch := errChanPool.Get().(chan error)\n\twriteArg := writeDataPool.Get().(*writeData)\n\t*writeArg = writeData{stream.id, data, endStream}\n\terr := sc.writeFrameFromHandler(FrameWriteRequest{\n\t\twrite:  writeArg,\n\t\tstream: stream,\n\t\tdone:   ch,\n\t})\n\tif err != nil {\n\t\treturn err\n\t}\n\tvar frameWriteDone bool // the frame write is done (successfully or not)\n\tselect {\n\tcase err = <-ch:\n\t\tframeWriteDone = true\n\tcase <-sc.doneServing:\n\t\treturn errClientDisconnected\n\tcase <-stream.cw:\n\t\t// If both ch and stream.cw were ready (as might\n\t\t// happen on the final Write after an http.Handler\n\t\t// ends), prefer the write result. Otherwise this\n\t\t// might just be us successfully closing the stream.\n\t\t// The writeFrameAsync and serve goroutines guarantee\n\t\t// that the ch send will happen before the stream.cw\n\t\t// close.\n\t\tselect {\n\t\tcase err = <-ch:\n\t\t\tframeWriteDone = true\n\t\tdefault:\n\t\t\treturn errStreamClosed\n\t\t}\n\t}\n\terrChanPool.Put(ch)\n\tif frameWriteDone {\n\t\twriteDataPool.Put(writeArg)\n\t}\n\treturn err\n}\n\n// writeFrameFromHandler sends wr to sc.wantWriteFrameCh, but aborts\n// if the connection has gone away.\n//\n// This must not be run from the serve goroutine itself, else it might\n// deadlock writing to sc.wantWriteFrameCh (which is only mildly\n// buffered and is read by serve itself). If you're on the serve\n// goroutine, call writeFrame instead.\nfunc (sc *serverConn) writeFrameFromHandler(wr FrameWriteRequest) error {\n\tsc.serveG.checkNotOn() // NOT\n\tselect {\n\tcase sc.wantWriteFrameCh <- wr:\n\t\treturn nil\n\tcase <-sc.doneServing:\n\t\t// Serve loop is gone.\n\t\t// Client has closed their connection to the server.\n\t\treturn errClientDisconnected\n\t}\n}\n\n// writeFrame schedules a frame to write and sends it if there's nothing\n// already being written.\n//\n// There is no pushback here (the serve goroutine never blocks). It's\n// the http.Handlers that block, waiting for their previous frames to\n// make it onto the wire\n//\n// If you're not on the serve goroutine, use writeFrameFromHandler instead.\nfunc (sc *serverConn) writeFrame(wr FrameWriteRequest) {\n\tsc.serveG.check()\n\n\t// If true, wr will not be written and wr.done will not be signaled.\n\tvar ignoreWrite bool\n\n\t// We are not allowed to write frames on closed streams. RFC 7540 Section\n\t// 5.1.1 says: \"An endpoint MUST NOT send frames other than PRIORITY on\n\t// a closed stream.\" Our server never sends PRIORITY, so that exception\n\t// does not apply.\n\t//\n\t// The serverConn might close an open stream while the stream's handler\n\t// is still running. For example, the server might close a stream when it\n\t// receives bad data from the client. If this happens, the handler might\n\t// attempt to write a frame after the stream has been closed (since the\n\t// handler hasn't yet been notified of the close). In this case, we simply\n\t// ignore the frame. The handler will notice that the stream is closed when\n\t// it waits for the frame to be written.\n\t//\n\t// As an exception to this rule, we allow sending RST_STREAM after close.\n\t// This allows us to immediately reject new streams without tracking any\n\t// state for those streams (except for the queued RST_STREAM frame). This\n\t// may result in duplicate RST_STREAMs in some cases, but the client should\n\t// ignore those.\n\tif wr.StreamID() != 0 {\n\t\t_, isReset := wr.write.(StreamError)\n\t\tif state, _ := sc.state(wr.StreamID()); state == stateClosed && !isReset {\n\t\t\tignoreWrite = true\n\t\t}\n\t}\n\n\t// Don't send a 100-continue response if we've already sent headers.\n\t// See golang.org/issue/14030.\n\tswitch wr.write.(type) {\n\tcase *writeResHeaders:\n\t\twr.stream.wroteHeaders = true\n\tcase write100ContinueHeadersFrame:\n\t\tif wr.stream.wroteHeaders {\n\t\t\t// We do not need to notify wr.done because this frame is\n\t\t\t// never written with wr.done != nil.\n\t\t\tif wr.done != nil {\n\t\t\t\tpanic(\"wr.done != nil for write100ContinueHeadersFrame\")\n\t\t\t}\n\t\t\tignoreWrite = true\n\t\t}\n\t}\n\n\tif !ignoreWrite {\n\t\tsc.writeSched.Push(wr)\n\t}\n\tsc.scheduleFrameWrite()\n}\n\n// startFrameWrite starts a goroutine to write wr (in a separate\n// goroutine since that might block on the network), and updates the\n// serve goroutine's state about the world, updated from info in wr.\nfunc (sc *serverConn) startFrameWrite(wr FrameWriteRequest) {\n\tsc.serveG.check()\n\tif sc.writingFrame {\n\t\tpanic(\"internal error: can only be writing one frame at a time\")\n\t}\n\n\tst := wr.stream\n\tif st != nil {\n\t\tswitch st.state {\n\t\tcase stateHalfClosedLocal:\n\t\t\tswitch wr.write.(type) {\n\t\t\tcase StreamError, handlerPanicRST, writeWindowUpdate:\n\t\t\t\t// RFC 7540 Section 5.1 allows sending RST_STREAM, PRIORITY, and WINDOW_UPDATE\n\t\t\t\t// in this state. (We never send PRIORITY from the server, so that is not checked.)\n\t\t\tdefault:\n\t\t\t\tpanic(fmt.Sprintf(\"internal error: attempt to send frame on a half-closed-local stream: %v\", wr))\n\t\t\t}\n\t\tcase stateClosed:\n\t\t\tpanic(fmt.Sprintf(\"internal error: attempt to send frame on a closed stream: %v\", wr))\n\t\t}\n\t}\n\tif wpp, ok := wr.write.(*writePushPromise); ok {\n\t\tvar err error\n\t\twpp.promisedID, err = wpp.allocatePromisedID()\n\t\tif err != nil {\n\t\t\tsc.writingFrameAsync = false\n\t\t\twr.replyToWriter(err)\n\t\t\treturn\n\t\t}\n\t}\n\n\tsc.writingFrame = true\n\tsc.needsFrameFlush = true\n\tif wr.write.staysWithinBuffer(sc.bw.Available()) {\n\t\tsc.writingFrameAsync = false\n\t\terr := wr.write.writeFrame(sc)\n\t\tsc.wroteFrame(frameWriteResult{wr, err})\n\t} else {\n\t\tsc.writingFrameAsync = true\n\t\tgo sc.writeFrameAsync(wr)\n\t}\n}\n\n// errHandlerPanicked is the error given to any callers blocked in a read from\n// Request.Body when the main goroutine panics. Since most handlers read in the\n// main ServeHTTP goroutine, this will show up rarely.\nvar errHandlerPanicked = errors.New(\"http2: handler panicked\")\n\n// wroteFrame is called on the serve goroutine with the result of\n// whatever happened on writeFrameAsync.\nfunc (sc *serverConn) wroteFrame(res frameWriteResult) {\n\tsc.serveG.check()\n\tif !sc.writingFrame {\n\t\tpanic(\"internal error: expected to be already writing a frame\")\n\t}\n\tsc.writingFrame = false\n\tsc.writingFrameAsync = false\n\n\twr := res.wr\n\n\tif writeEndsStream(wr.write) {\n\t\tst := wr.stream\n\t\tif st == nil {\n\t\t\tpanic(\"internal error: expecting non-nil stream\")\n\t\t}\n\t\tswitch st.state {\n\t\tcase stateOpen:\n\t\t\t// Here we would go to stateHalfClosedLocal in\n\t\t\t// theory, but since our handler is done and\n\t\t\t// the net/http package provides no mechanism\n\t\t\t// for closing a ResponseWriter while still\n\t\t\t// reading data (see possible TODO at top of\n\t\t\t// this file), we go into closed state here\n\t\t\t// anyway, after telling the peer we're\n\t\t\t// hanging up on them. We'll transition to\n\t\t\t// stateClosed after the RST_STREAM frame is\n\t\t\t// written.\n\t\t\tst.state = stateHalfClosedLocal\n\t\t\t// Section 8.1: a server MAY request that the client abort\n\t\t\t// transmission of a request without error by sending a\n\t\t\t// RST_STREAM with an error code of NO_ERROR after sending\n\t\t\t// a complete response.\n\t\t\tsc.resetStream(streamError(st.id, ErrCodeNo))\n\t\tcase stateHalfClosedRemote:\n\t\t\tsc.closeStream(st, errHandlerComplete)\n\t\t}\n\t} else {\n\t\tswitch v := wr.write.(type) {\n\t\tcase StreamError:\n\t\t\t// st may be unknown if the RST_STREAM was generated to reject bad input.\n\t\t\tif st, ok := sc.streams[v.StreamID]; ok {\n\t\t\t\tsc.closeStream(st, v)\n\t\t\t}\n\t\tcase handlerPanicRST:\n\t\t\tsc.closeStream(wr.stream, errHandlerPanicked)\n\t\t}\n\t}\n\n\t// Reply (if requested) to unblock the ServeHTTP goroutine.\n\twr.replyToWriter(res.err)\n\n\tsc.scheduleFrameWrite()\n}\n\n// scheduleFrameWrite tickles the frame writing scheduler.\n//\n// If a frame is already being written, nothing happens. This will be called again\n// when the frame is done being written.\n//\n// If a frame isn't being written we need to send one, the best frame\n// to send is selected, preferring first things that aren't\n// stream-specific (e.g. ACKing settings), and then finding the\n// highest priority stream.\n//\n// If a frame isn't being written and there's nothing else to send, we\n// flush the write buffer.\nfunc (sc *serverConn) scheduleFrameWrite() {\n\tsc.serveG.check()\n\tif sc.writingFrame || sc.inFrameScheduleLoop {\n\t\treturn\n\t}\n\tsc.inFrameScheduleLoop = true\n\tfor !sc.writingFrameAsync {\n\t\tif sc.needToSendGoAway {\n\t\t\tsc.needToSendGoAway = false\n\t\t\tsc.startFrameWrite(FrameWriteRequest{\n\t\t\t\twrite: &writeGoAway{\n\t\t\t\t\tmaxStreamID: sc.maxClientStreamID,\n\t\t\t\t\tcode:        sc.goAwayCode,\n\t\t\t\t},\n\t\t\t})\n\t\t\tcontinue\n\t\t}\n\t\tif sc.needToSendSettingsAck {\n\t\t\tsc.needToSendSettingsAck = false\n\t\t\tsc.startFrameWrite(FrameWriteRequest{write: writeSettingsAck{}})\n\t\t\tcontinue\n\t\t}\n\t\tif !sc.inGoAway || sc.goAwayCode == ErrCodeNo {\n\t\t\tif wr, ok := sc.writeSched.Pop(); ok {\n\t\t\t\tsc.startFrameWrite(wr)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\t\tif sc.needsFrameFlush {\n\t\t\tsc.startFrameWrite(FrameWriteRequest{write: flushFrameWriter{}})\n\t\t\tsc.needsFrameFlush = false // after startFrameWrite, since it sets this true\n\t\t\tcontinue\n\t\t}\n\t\tbreak\n\t}\n\tsc.inFrameScheduleLoop = false\n}\n\n// startGracefulShutdown gracefully shuts down a connection. This\n// sends GOAWAY with ErrCodeNo to tell the client we're gracefully\n// shutting down. The connection isn't closed until all current\n// streams are done.\n//\n// startGracefulShutdown returns immediately; it does not wait until\n// the connection has shut down.\nfunc (sc *serverConn) startGracefulShutdown() {\n\tsc.serveG.checkNotOn() // NOT\n\tsc.shutdownOnce.Do(func() { sc.sendServeMsg(gracefulShutdownMsg) })\n}\n\n// After sending GOAWAY, the connection will close after goAwayTimeout.\n// If we close the connection immediately after sending GOAWAY, there may\n// be unsent data in our kernel receive buffer, which will cause the kernel\n// to send a TCP RST on close() instead of a FIN. This RST will abort the\n// connection immediately, whether or not the client had received the GOAWAY.\n//\n// Ideally we should delay for at least 1 RTT + epsilon so the client has\n// a chance to read the GOAWAY and stop sending messages. Measuring RTT\n// is hard, so we approximate with 1 second. See golang.org/issue/18701.\n//\n// This is a var so it can be shorter in tests, where all requests uses the\n// loopback interface making the expected RTT very small.\n//\n// TODO: configurable?\nvar goAwayTimeout = 1 * time.Second\n\nfunc (sc *serverConn) startGracefulShutdownInternal() {\n\tsc.goAway(ErrCodeNo)\n}\n\nfunc (sc *serverConn) goAway(code ErrCode) {\n\tsc.serveG.check()\n\tif sc.inGoAway {\n\t\treturn\n\t}\n\tsc.inGoAway = true\n\tsc.needToSendGoAway = true\n\tsc.goAwayCode = code\n\tsc.scheduleFrameWrite()\n}\n\nfunc (sc *serverConn) shutDownIn(d time.Duration) {\n\tsc.serveG.check()\n\tsc.shutdownTimer = time.AfterFunc(d, sc.onShutdownTimer)\n}\n\nfunc (sc *serverConn) resetStream(se StreamError) {\n\tsc.serveG.check()\n\tsc.writeFrame(FrameWriteRequest{write: se})\n\tif st, ok := sc.streams[se.StreamID]; ok {\n\t\tst.resetQueued = true\n\t}\n}\n\n// processFrameFromReader processes the serve loop's read from readFrameCh from the\n// frame-reading goroutine.\n// processFrameFromReader returns whether the connection should be kept open.\nfunc (sc *serverConn) processFrameFromReader(res readFrameResult) bool {\n\tsc.serveG.check()\n\terr := res.err\n\tif err != nil {\n\t\tif err == ErrFrameTooLarge {\n\t\t\tsc.goAway(ErrCodeFrameSize)\n\t\t\treturn true // goAway will close the loop\n\t\t}\n\t\tclientGone := err == io.EOF || err == io.ErrUnexpectedEOF || isClosedConnError(err)\n\t\tif clientGone {\n\t\t\t// TODO: could we also get into this state if\n\t\t\t// the peer does a half close\n\t\t\t// (e.g. CloseWrite) because they're done\n\t\t\t// sending frames but they're still wanting\n\t\t\t// our open replies?  Investigate.\n\t\t\t// TODO: add CloseWrite to crypto/tls.Conn first\n\t\t\t// so we have a way to test this? I suppose\n\t\t\t// just for testing we could have a non-TLS mode.\n\t\t\treturn false\n\t\t}\n\t} else {\n\t\tf := res.f\n\t\tif VerboseLogs {\n\t\t\tsc.vlogf(\"http2: server read frame %v\", summarizeFrame(f))\n\t\t}\n\t\terr = sc.processFrame(f)\n\t\tif err == nil {\n\t\t\treturn true\n\t\t}\n\t}\n\n\tswitch ev := err.(type) {\n\tcase StreamError:\n\t\tsc.resetStream(ev)\n\t\treturn true\n\tcase goAwayFlowError:\n\t\tsc.goAway(ErrCodeFlowControl)\n\t\treturn true\n\tcase ConnectionError:\n\t\tsc.logf(\"http2: server connection error from %v: %v\", sc.conn.RemoteAddr(), ev)\n\t\tsc.goAway(ErrCode(ev))\n\t\treturn true // goAway will handle shutdown\n\tdefault:\n\t\tif res.err != nil {\n\t\t\tsc.vlogf(\"http2: server closing client connection; error reading frame from client %s: %v\", sc.conn.RemoteAddr(), err)\n\t\t} else {\n\t\t\tsc.logf(\"http2: server closing client connection: %v\", err)\n\t\t}\n\t\treturn false\n\t}\n}\n\nfunc (sc *serverConn) processFrame(f Frame) error {\n\tsc.serveG.check()\n\n\t// First frame received must be SETTINGS.\n\tif !sc.sawFirstSettings {\n\t\tif _, ok := f.(*SettingsFrame); !ok {\n\t\t\treturn ConnectionError(ErrCodeProtocol)\n\t\t}\n\t\tsc.sawFirstSettings = true\n\t}\n\n\tswitch f := f.(type) {\n\tcase *SettingsFrame:\n\t\treturn sc.processSettings(f)\n\tcase *MetaHeadersFrame:\n\t\treturn sc.processHeaders(f)\n\tcase *WindowUpdateFrame:\n\t\treturn sc.processWindowUpdate(f)\n\tcase *PingFrame:\n\t\treturn sc.processPing(f)\n\tcase *DataFrame:\n\t\treturn sc.processData(f)\n\tcase *RSTStreamFrame:\n\t\treturn sc.processResetStream(f)\n\tcase *PriorityFrame:\n\t\treturn sc.processPriority(f)\n\tcase *GoAwayFrame:\n\t\treturn sc.processGoAway(f)\n\tcase *PushPromiseFrame:\n\t\t// A client cannot push. Thus, servers MUST treat the receipt of a PUSH_PROMISE\n\t\t// frame as a connection error (Section 5.4.1) of type PROTOCOL_ERROR.\n\t\treturn ConnectionError(ErrCodeProtocol)\n\tdefault:\n\t\tsc.vlogf(\"http2: server ignoring frame: %v\", f.Header())\n\t\treturn nil\n\t}\n}\n\nfunc (sc *serverConn) processPing(f *PingFrame) error {\n\tsc.serveG.check()\n\tif f.IsAck() {\n\t\t// 6.7 PING: \" An endpoint MUST NOT respond to PING frames\n\t\t// containing this flag.\"\n\t\treturn nil\n\t}\n\tif f.StreamID != 0 {\n\t\t// \"PING frames are not associated with any individual\n\t\t// stream. If a PING frame is received with a stream\n\t\t// identifier field value other than 0x0, the recipient MUST\n\t\t// respond with a connection error (Section 5.4.1) of type\n\t\t// PROTOCOL_ERROR.\"\n\t\treturn ConnectionError(ErrCodeProtocol)\n\t}\n\tif sc.inGoAway && sc.goAwayCode != ErrCodeNo {\n\t\treturn nil\n\t}\n\tsc.writeFrame(FrameWriteRequest{write: writePingAck{f}})\n\treturn nil\n}\n\nfunc (sc *serverConn) processWindowUpdate(f *WindowUpdateFrame) error {\n\tsc.serveG.check()\n\tswitch {\n\tcase f.StreamID != 0: // stream-level flow control\n\t\tstate, st := sc.state(f.StreamID)\n\t\tif state == stateIdle {\n\t\t\t// Section 5.1: \"Receiving any frame other than HEADERS\n\t\t\t// or PRIORITY on a stream in this state MUST be\n\t\t\t// treated as a connection error (Section 5.4.1) of\n\t\t\t// type PROTOCOL_ERROR.\"\n\t\t\treturn ConnectionError(ErrCodeProtocol)\n\t\t}\n\t\tif st == nil {\n\t\t\t// \"WINDOW_UPDATE can be sent by a peer that has sent a\n\t\t\t// frame bearing the END_STREAM flag. This means that a\n\t\t\t// receiver could receive a WINDOW_UPDATE frame on a \"half\n\t\t\t// closed (remote)\" or \"closed\" stream. A receiver MUST\n\t\t\t// NOT treat this as an error, see Section 5.1.\"\n\t\t\treturn nil\n\t\t}\n\t\tif !st.flow.add(int32(f.Increment)) {\n\t\t\treturn streamError(f.StreamID, ErrCodeFlowControl)\n\t\t}\n\tdefault: // connection-level flow control\n\t\tif !sc.flow.add(int32(f.Increment)) {\n\t\t\treturn goAwayFlowError{}\n\t\t}\n\t}\n\tsc.scheduleFrameWrite()\n\treturn nil\n}\n\nfunc (sc *serverConn) processResetStream(f *RSTStreamFrame) error {\n\tsc.serveG.check()\n\n\tstate, st := sc.state(f.StreamID)\n\tif state == stateIdle {\n\t\t// 6.4 \"RST_STREAM frames MUST NOT be sent for a\n\t\t// stream in the \"idle\" state. If a RST_STREAM frame\n\t\t// identifying an idle stream is received, the\n\t\t// recipient MUST treat this as a connection error\n\t\t// (Section 5.4.1) of type PROTOCOL_ERROR.\n\t\treturn ConnectionError(ErrCodeProtocol)\n\t}\n\tif st != nil {\n\t\tst.cancelCtx()\n\t\tsc.closeStream(st, streamError(f.StreamID, f.ErrCode))\n\t}\n\treturn nil\n}\n\nfunc (sc *serverConn) closeStream(st *stream, err error) {\n\tsc.serveG.check()\n\tif st.state == stateIdle || st.state == stateClosed {\n\t\tpanic(fmt.Sprintf(\"invariant; can't close stream in state %v\", st.state))\n\t}\n\tst.state = stateClosed\n\tif st.writeDeadline != nil {\n\t\tst.writeDeadline.Stop()\n\t}\n\tif st.isPushed() {\n\t\tsc.curPushedStreams--\n\t} else {\n\t\tsc.curClientStreams--\n\t}\n\tdelete(sc.streams, st.id)\n\tif len(sc.streams) == 0 {\n\t\tsc.setConnState(http.StateIdle)\n\t\tif sc.srv.IdleTimeout != 0 {\n\t\t\tsc.idleTimer.Reset(sc.srv.IdleTimeout)\n\t\t}\n\t\tif h1ServerKeepAlivesDisabled(sc.hs) {\n\t\t\tsc.startGracefulShutdownInternal()\n\t\t}\n\t}\n\tif p := st.body; p != nil {\n\t\t// Return any buffered unread bytes worth of conn-level flow control.\n\t\t// See golang.org/issue/16481\n\t\tsc.sendWindowUpdate(nil, p.Len())\n\n\t\tp.CloseWithError(err)\n\t}\n\tst.cw.Close() // signals Handler's CloseNotifier, unblocks writes, etc\n\tsc.writeSched.CloseStream(st.id)\n}\n\nfunc (sc *serverConn) processSettings(f *SettingsFrame) error {\n\tsc.serveG.check()\n\tif f.IsAck() {\n\t\tsc.unackedSettings--\n\t\tif sc.unackedSettings < 0 {\n\t\t\t// Why is the peer ACKing settings we never sent?\n\t\t\t// The spec doesn't mention this case, but\n\t\t\t// hang up on them anyway.\n\t\t\treturn ConnectionError(ErrCodeProtocol)\n\t\t}\n\t\treturn nil\n\t}\n\tif f.NumSettings() > 100 || f.HasDuplicates() {\n\t\t// This isn't actually in the spec, but hang up on\n\t\t// suspiciously large settings frames or those with\n\t\t// duplicate entries.\n\t\treturn ConnectionError(ErrCodeProtocol)\n\t}\n\tif err := f.ForeachSetting(sc.processSetting); err != nil {\n\t\treturn err\n\t}\n\tsc.needToSendSettingsAck = true\n\tsc.scheduleFrameWrite()\n\treturn nil\n}\n\nfunc (sc *serverConn) processSetting(s Setting) error {\n\tsc.serveG.check()\n\tif err := s.Valid(); err != nil {\n\t\treturn err\n\t}\n\tif VerboseLogs {\n\t\tsc.vlogf(\"http2: server processing setting %v\", s)\n\t}\n\tswitch s.ID {\n\tcase SettingHeaderTableSize:\n\t\tsc.headerTableSize = s.Val\n\t\tsc.hpackEncoder.SetMaxDynamicTableSize(s.Val)\n\tcase SettingEnablePush:\n\t\tsc.pushEnabled = s.Val != 0\n\tcase SettingMaxConcurrentStreams:\n\t\tsc.clientMaxStreams = s.Val\n\tcase SettingInitialWindowSize:\n\t\treturn sc.processSettingInitialWindowSize(s.Val)\n\tcase SettingMaxFrameSize:\n\t\tsc.maxFrameSize = int32(s.Val) // the maximum valid s.Val is < 2^31\n\tcase SettingMaxHeaderListSize:\n\t\tsc.peerMaxHeaderListSize = s.Val\n\tdefault:\n\t\t// Unknown setting: \"An endpoint that receives a SETTINGS\n\t\t// frame with any unknown or unsupported identifier MUST\n\t\t// ignore that setting.\"\n\t\tif VerboseLogs {\n\t\t\tsc.vlogf(\"http2: server ignoring unknown setting %v\", s)\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (sc *serverConn) processSettingInitialWindowSize(val uint32) error {\n\tsc.serveG.check()\n\t// Note: val already validated to be within range by\n\t// processSetting's Valid call.\n\n\t// \"A SETTINGS frame can alter the initial flow control window\n\t// size for all current streams. When the value of\n\t// SETTINGS_INITIAL_WINDOW_SIZE changes, a receiver MUST\n\t// adjust the size of all stream flow control windows that it\n\t// maintains by the difference between the new value and the\n\t// old value.\"\n\told := sc.initialStreamSendWindowSize\n\tsc.initialStreamSendWindowSize = int32(val)\n\tgrowth := int32(val) - old // may be negative\n\tfor _, st := range sc.streams {\n\t\tif !st.flow.add(growth) {\n\t\t\t// 6.9.2 Initial Flow Control Window Size\n\t\t\t// \"An endpoint MUST treat a change to\n\t\t\t// SETTINGS_INITIAL_WINDOW_SIZE that causes any flow\n\t\t\t// control window to exceed the maximum size as a\n\t\t\t// connection error (Section 5.4.1) of type\n\t\t\t// FLOW_CONTROL_ERROR.\"\n\t\t\treturn ConnectionError(ErrCodeFlowControl)\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (sc *serverConn) processData(f *DataFrame) error {\n\tsc.serveG.check()\n\tif sc.inGoAway && sc.goAwayCode != ErrCodeNo {\n\t\treturn nil\n\t}\n\tdata := f.Data()\n\n\t// \"If a DATA frame is received whose stream is not in \"open\"\n\t// or \"half closed (local)\" state, the recipient MUST respond\n\t// with a stream error (Section 5.4.2) of type STREAM_CLOSED.\"\n\tid := f.Header().StreamID\n\tstate, st := sc.state(id)\n\tif id == 0 || state == stateIdle {\n\t\t// Section 5.1: \"Receiving any frame other than HEADERS\n\t\t// or PRIORITY on a stream in this state MUST be\n\t\t// treated as a connection error (Section 5.4.1) of\n\t\t// type PROTOCOL_ERROR.\"\n\t\treturn ConnectionError(ErrCodeProtocol)\n\t}\n\tif st == nil || state != stateOpen || st.gotTrailerHeader || st.resetQueued {\n\t\t// This includes sending a RST_STREAM if the stream is\n\t\t// in stateHalfClosedLocal (which currently means that\n\t\t// the http.Handler returned, so it's done reading &\n\t\t// done writing). Try to stop the client from sending\n\t\t// more DATA.\n\n\t\t// But still enforce their connection-level flow control,\n\t\t// and return any flow control bytes since we're not going\n\t\t// to consume them.\n\t\tif sc.inflow.available() < int32(f.Length) {\n\t\t\treturn streamError(id, ErrCodeFlowControl)\n\t\t}\n\t\t// Deduct the flow control from inflow, since we're\n\t\t// going to immediately add it back in\n\t\t// sendWindowUpdate, which also schedules sending the\n\t\t// frames.\n\t\tsc.inflow.take(int32(f.Length))\n\t\tsc.sendWindowUpdate(nil, int(f.Length)) // conn-level\n\n\t\tif st != nil && st.resetQueued {\n\t\t\t// Already have a stream error in flight. Don't send another.\n\t\t\treturn nil\n\t\t}\n\t\treturn streamError(id, ErrCodeStreamClosed)\n\t}\n\tif st.body == nil {\n\t\tpanic(\"internal error: should have a body in this state\")\n\t}\n\n\t// Sender sending more than they'd declared?\n\tif st.declBodyBytes != -1 && st.bodyBytes+int64(len(data)) > st.declBodyBytes {\n\t\tst.body.CloseWithError(fmt.Errorf(\"sender tried to send more than declared Content-Length of %d bytes\", st.declBodyBytes))\n\t\t// RFC 7540, sec 8.1.2.6: A request or response is also malformed if the\n\t\t// value of a content-length header field does not equal the sum of the\n\t\t// DATA frame payload lengths that form the body.\n\t\treturn streamError(id, ErrCodeProtocol)\n\t}\n\tif f.Length > 0 {\n\t\t// Check whether the client has flow control quota.\n\t\tif st.inflow.available() < int32(f.Length) {\n\t\t\treturn streamError(id, ErrCodeFlowControl)\n\t\t}\n\t\tst.inflow.take(int32(f.Length))\n\n\t\tif len(data) > 0 {\n\t\t\twrote, err := st.body.Write(data)\n\t\t\tif err != nil {\n\t\t\t\treturn streamError(id, ErrCodeStreamClosed)\n\t\t\t}\n\t\t\tif wrote != len(data) {\n\t\t\t\tpanic(\"internal error: bad Writer\")\n\t\t\t}\n\t\t\tst.bodyBytes += int64(len(data))\n\t\t}\n\n\t\t// Return any padded flow control now, since we won't\n\t\t// refund it later on body reads.\n\t\tif pad := int32(f.Length) - int32(len(data)); pad > 0 {\n\t\t\tsc.sendWindowUpdate32(nil, pad)\n\t\t\tsc.sendWindowUpdate32(st, pad)\n\t\t}\n\t}\n\tif f.StreamEnded() {\n\t\tst.endStream()\n\t}\n\treturn nil\n}\n\nfunc (sc *serverConn) processGoAway(f *GoAwayFrame) error {\n\tsc.serveG.check()\n\tif f.ErrCode != ErrCodeNo {\n\t\tsc.logf(\"http2: received GOAWAY %+v, starting graceful shutdown\", f)\n\t} else {\n\t\tsc.vlogf(\"http2: received GOAWAY %+v, starting graceful shutdown\", f)\n\t}\n\tsc.startGracefulShutdownInternal()\n\t// http://tools.ietf.org/html/rfc7540#section-6.8\n\t// We should not create any new streams, which means we should disable push.\n\tsc.pushEnabled = false\n\treturn nil\n}\n\n// isPushed reports whether the stream is server-initiated.\nfunc (st *stream) isPushed() bool {\n\treturn st.id%2 == 0\n}\n\n// endStream closes a Request.Body's pipe. It is called when a DATA\n// frame says a request body is over (or after trailers).\nfunc (st *stream) endStream() {\n\tsc := st.sc\n\tsc.serveG.check()\n\n\tif st.declBodyBytes != -1 && st.declBodyBytes != st.bodyBytes {\n\t\tst.body.CloseWithError(fmt.Errorf(\"request declared a Content-Length of %d but only wrote %d bytes\",\n\t\t\tst.declBodyBytes, st.bodyBytes))\n\t} else {\n\t\tst.body.closeWithErrorAndCode(io.EOF, st.copyTrailersToHandlerRequest)\n\t\tst.body.CloseWithError(io.EOF)\n\t}\n\tst.state = stateHalfClosedRemote\n}\n\n// copyTrailersToHandlerRequest is run in the Handler's goroutine in\n// its Request.Body.Read just before it gets io.EOF.\nfunc (st *stream) copyTrailersToHandlerRequest() {\n\tfor k, vv := range st.trailer {\n\t\tif _, ok := st.reqTrailer[k]; ok {\n\t\t\t// Only copy it over it was pre-declared.\n\t\t\tst.reqTrailer[k] = vv\n\t\t}\n\t}\n}\n\n// onWriteTimeout is run on its own goroutine (from time.AfterFunc)\n// when the stream's WriteTimeout has fired.\nfunc (st *stream) onWriteTimeout() {\n\tst.sc.writeFrameFromHandler(FrameWriteRequest{write: streamError(st.id, ErrCodeInternal)})\n}\n\nfunc (sc *serverConn) processHeaders(f *MetaHeadersFrame) error {\n\tsc.serveG.check()\n\tid := f.StreamID\n\tif sc.inGoAway {\n\t\t// Ignore.\n\t\treturn nil\n\t}\n\t// http://tools.ietf.org/html/rfc7540#section-5.1.1\n\t// Streams initiated by a client MUST use odd-numbered stream\n\t// identifiers. [...] An endpoint that receives an unexpected\n\t// stream identifier MUST respond with a connection error\n\t// (Section 5.4.1) of type PROTOCOL_ERROR.\n\tif id%2 != 1 {\n\t\treturn ConnectionError(ErrCodeProtocol)\n\t}\n\t// A HEADERS frame can be used to create a new stream or\n\t// send a trailer for an open one. If we already have a stream\n\t// open, let it process its own HEADERS frame (trailers at this\n\t// point, if it's valid).\n\tif st := sc.streams[f.StreamID]; st != nil {\n\t\tif st.resetQueued {\n\t\t\t// We're sending RST_STREAM to close the stream, so don't bother\n\t\t\t// processing this frame.\n\t\t\treturn nil\n\t\t}\n\t\t// RFC 7540, sec 5.1: If an endpoint receives additional frames, other than\n\t\t// WINDOW_UPDATE, PRIORITY, or RST_STREAM, for a stream that is in\n\t\t// this state, it MUST respond with a stream error (Section 5.4.2) of\n\t\t// type STREAM_CLOSED.\n\t\tif st.state == stateHalfClosedRemote {\n\t\t\treturn streamError(id, ErrCodeStreamClosed)\n\t\t}\n\t\treturn st.processTrailerHeaders(f)\n\t}\n\n\t// [...] The identifier of a newly established stream MUST be\n\t// numerically greater than all streams that the initiating\n\t// endpoint has opened or reserved. [...]  An endpoint that\n\t// receives an unexpected stream identifier MUST respond with\n\t// a connection error (Section 5.4.1) of type PROTOCOL_ERROR.\n\tif id <= sc.maxClientStreamID {\n\t\treturn ConnectionError(ErrCodeProtocol)\n\t}\n\tsc.maxClientStreamID = id\n\n\tif sc.idleTimer != nil {\n\t\tsc.idleTimer.Stop()\n\t}\n\n\t// http://tools.ietf.org/html/rfc7540#section-5.1.2\n\t// [...] Endpoints MUST NOT exceed the limit set by their peer. An\n\t// endpoint that receives a HEADERS frame that causes their\n\t// advertised concurrent stream limit to be exceeded MUST treat\n\t// this as a stream error (Section 5.4.2) of type PROTOCOL_ERROR\n\t// or REFUSED_STREAM.\n\tif sc.curClientStreams+1 > sc.advMaxStreams {\n\t\tif sc.unackedSettings == 0 {\n\t\t\t// They should know better.\n\t\t\treturn streamError(id, ErrCodeProtocol)\n\t\t}\n\t\t// Assume it's a network race, where they just haven't\n\t\t// received our last SETTINGS update. But actually\n\t\t// this can't happen yet, because we don't yet provide\n\t\t// a way for users to adjust server parameters at\n\t\t// runtime.\n\t\treturn streamError(id, ErrCodeRefusedStream)\n\t}\n\n\tinitialState := stateOpen\n\tif f.StreamEnded() {\n\t\tinitialState = stateHalfClosedRemote\n\t}\n\tst := sc.newStream(id, 0, initialState)\n\n\tif f.HasPriority() {\n\t\tif err := checkPriority(f.StreamID, f.Priority); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsc.writeSched.AdjustStream(st.id, f.Priority)\n\t}\n\n\trw, req, err := sc.newWriterAndRequest(st, f)\n\tif err != nil {\n\t\treturn err\n\t}\n\tst.reqTrailer = req.Trailer\n\tif st.reqTrailer != nil {\n\t\tst.trailer = make(http.Header)\n\t}\n\tst.body = req.Body.(*requestBody).pipe // may be nil\n\tst.declBodyBytes = req.ContentLength\n\n\thandler := sc.handler.ServeHTTP\n\tif f.Truncated {\n\t\t// Their header list was too long. Send a 431 error.\n\t\thandler = handleHeaderListTooLong\n\t} else if err := checkValidHTTP2RequestHeaders(req.Header); err != nil {\n\t\thandler = new400Handler(err)\n\t}\n\n\t// The net/http package sets the read deadline from the\n\t// http.Server.ReadTimeout during the TLS handshake, but then\n\t// passes the connection off to us with the deadline already\n\t// set. Disarm it here after the request headers are read,\n\t// similar to how the http1 server works. Here it's\n\t// technically more like the http1 Server's ReadHeaderTimeout\n\t// (in Go 1.8), though. That's a more sane option anyway.\n\tif sc.hs.ReadTimeout != 0 {\n\t\tsc.conn.SetReadDeadline(time.Time{})\n\t}\n\n\tgo sc.runHandler(rw, req, handler)\n\treturn nil\n}\n\nfunc (st *stream) processTrailerHeaders(f *MetaHeadersFrame) error {\n\tsc := st.sc\n\tsc.serveG.check()\n\tif st.gotTrailerHeader {\n\t\treturn ConnectionError(ErrCodeProtocol)\n\t}\n\tst.gotTrailerHeader = true\n\tif !f.StreamEnded() {\n\t\treturn streamError(st.id, ErrCodeProtocol)\n\t}\n\n\tif len(f.PseudoFields()) > 0 {\n\t\treturn streamError(st.id, ErrCodeProtocol)\n\t}\n\tif st.trailer != nil {\n\t\tfor _, hf := range f.RegularFields() {\n\t\t\tkey := sc.canonicalHeader(hf.Name)\n\t\t\tif !httpguts.ValidTrailerHeader(key) {\n\t\t\t\t// TODO: send more details to the peer somehow. But http2 has\n\t\t\t\t// no way to send debug data at a stream level. Discuss with\n\t\t\t\t// HTTP folk.\n\t\t\t\treturn streamError(st.id, ErrCodeProtocol)\n\t\t\t}\n\t\t\tst.trailer[key] = append(st.trailer[key], hf.Value)\n\t\t}\n\t}\n\tst.endStream()\n\treturn nil\n}\n\nfunc checkPriority(streamID uint32, p PriorityParam) error {\n\tif streamID == p.StreamDep {\n\t\t// Section 5.3.1: \"A stream cannot depend on itself. An endpoint MUST treat\n\t\t// this as a stream error (Section 5.4.2) of type PROTOCOL_ERROR.\"\n\t\t// Section 5.3.3 says that a stream can depend on one of its dependencies,\n\t\t// so it's only self-dependencies that are forbidden.\n\t\treturn streamError(streamID, ErrCodeProtocol)\n\t}\n\treturn nil\n}\n\nfunc (sc *serverConn) processPriority(f *PriorityFrame) error {\n\tif sc.inGoAway {\n\t\treturn nil\n\t}\n\tif err := checkPriority(f.StreamID, f.PriorityParam); err != nil {\n\t\treturn err\n\t}\n\tsc.writeSched.AdjustStream(f.StreamID, f.PriorityParam)\n\treturn nil\n}\n\nfunc (sc *serverConn) newStream(id, pusherID uint32, state streamState) *stream {\n\tsc.serveG.check()\n\tif id == 0 {\n\t\tpanic(\"internal error: cannot create stream with id 0\")\n\t}\n\n\tctx, cancelCtx := context.WithCancel(sc.baseCtx)\n\tst := &stream{\n\t\tsc:        sc,\n\t\tid:        id,\n\t\tstate:     state,\n\t\tctx:       ctx,\n\t\tcancelCtx: cancelCtx,\n\t}\n\tst.cw.Init()\n\tst.flow.conn = &sc.flow // link to conn-level counter\n\tst.flow.add(sc.initialStreamSendWindowSize)\n\tst.inflow.conn = &sc.inflow // link to conn-level counter\n\tst.inflow.add(sc.srv.initialStreamRecvWindowSize())\n\tif sc.hs.WriteTimeout != 0 {\n\t\tst.writeDeadline = time.AfterFunc(sc.hs.WriteTimeout, st.onWriteTimeout)\n\t}\n\n\tsc.streams[id] = st\n\tsc.writeSched.OpenStream(st.id, OpenStreamOptions{PusherID: pusherID})\n\tif st.isPushed() {\n\t\tsc.curPushedStreams++\n\t} else {\n\t\tsc.curClientStreams++\n\t}\n\tif sc.curOpenStreams() == 1 {\n\t\tsc.setConnState(http.StateActive)\n\t}\n\n\treturn st\n}\n\nfunc (sc *serverConn) newWriterAndRequest(st *stream, f *MetaHeadersFrame) (*responseWriter, *http.Request, error) {\n\tsc.serveG.check()\n\n\trp := requestParam{\n\t\tmethod:    f.PseudoValue(\"method\"),\n\t\tscheme:    f.PseudoValue(\"scheme\"),\n\t\tauthority: f.PseudoValue(\"authority\"),\n\t\tpath:      f.PseudoValue(\"path\"),\n\t}\n\n\tisConnect := rp.method == \"CONNECT\"\n\tif isConnect {\n\t\tif rp.path != \"\" || rp.scheme != \"\" || rp.authority == \"\" {\n\t\t\treturn nil, nil, streamError(f.StreamID, ErrCodeProtocol)\n\t\t}\n\t} else if rp.method == \"\" || rp.path == \"\" || (rp.scheme != \"https\" && rp.scheme != \"http\") {\n\t\t// See 8.1.2.6 Malformed Requests and Responses:\n\t\t//\n\t\t// Malformed requests or responses that are detected\n\t\t// MUST be treated as a stream error (Section 5.4.2)\n\t\t// of type PROTOCOL_ERROR.\"\n\t\t//\n\t\t// 8.1.2.3 Request Pseudo-Header Fields\n\t\t// \"All HTTP/2 requests MUST include exactly one valid\n\t\t// value for the :method, :scheme, and :path\n\t\t// pseudo-header fields\"\n\t\treturn nil, nil, streamError(f.StreamID, ErrCodeProtocol)\n\t}\n\n\tbodyOpen := !f.StreamEnded()\n\tif rp.method == \"HEAD\" && bodyOpen {\n\t\t// HEAD requests can't have bodies\n\t\treturn nil, nil, streamError(f.StreamID, ErrCodeProtocol)\n\t}\n\n\trp.header = make(http.Header)\n\tfor _, hf := range f.RegularFields() {\n\t\trp.header.Add(sc.canonicalHeader(hf.Name), hf.Value)\n\t}\n\tif rp.authority == \"\" {\n\t\trp.authority = rp.header.Get(\"Host\")\n\t}\n\n\trw, req, err := sc.newWriterAndRequestNoBody(st, rp)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\tif bodyOpen {\n\t\tif vv, ok := rp.header[\"Content-Length\"]; ok {\n\t\t\treq.ContentLength, _ = strconv.ParseInt(vv[0], 10, 64)\n\t\t} else {\n\t\t\treq.ContentLength = -1\n\t\t}\n\t\treq.Body.(*requestBody).pipe = &pipe{\n\t\t\tb: &dataBuffer{expected: req.ContentLength},\n\t\t}\n\t}\n\treturn rw, req, nil\n}\n\ntype requestParam struct {\n\tmethod                  string\n\tscheme, authority, path string\n\theader                  http.Header\n}\n\nfunc (sc *serverConn) newWriterAndRequestNoBody(st *stream, rp requestParam) (*responseWriter, *http.Request, error) {\n\tsc.serveG.check()\n\n\tvar tlsState *tls.ConnectionState // nil if not scheme https\n\tif rp.scheme == \"https\" {\n\t\ttlsState = sc.tlsState\n\t}\n\n\tneedsContinue := rp.header.Get(\"Expect\") == \"100-continue\"\n\tif needsContinue {\n\t\trp.header.Del(\"Expect\")\n\t}\n\t// Merge Cookie headers into one \"; \"-delimited value.\n\tif cookies := rp.header[\"Cookie\"]; len(cookies) > 1 {\n\t\trp.header.Set(\"Cookie\", strings.Join(cookies, \"; \"))\n\t}\n\n\t// Setup Trailers\n\tvar trailer http.Header\n\tfor _, v := range rp.header[\"Trailer\"] {\n\t\tfor _, key := range strings.Split(v, \",\") {\n\t\t\tkey = http.CanonicalHeaderKey(strings.TrimSpace(key))\n\t\t\tswitch key {\n\t\t\tcase \"Transfer-Encoding\", \"Trailer\", \"Content-Length\":\n\t\t\t\t// Bogus. (copy of http1 rules)\n\t\t\t\t// Ignore.\n\t\t\tdefault:\n\t\t\t\tif trailer == nil {\n\t\t\t\t\ttrailer = make(http.Header)\n\t\t\t\t}\n\t\t\t\ttrailer[key] = nil\n\t\t\t}\n\t\t}\n\t}\n\tdelete(rp.header, \"Trailer\")\n\n\tvar url_ *url.URL\n\tvar requestURI string\n\tif rp.method == \"CONNECT\" {\n\t\turl_ = &url.URL{Host: rp.authority}\n\t\trequestURI = rp.authority // mimic HTTP/1 server behavior\n\t} else {\n\t\tvar err error\n\t\turl_, err = url.ParseRequestURI(rp.path)\n\t\tif err != nil {\n\t\t\treturn nil, nil, streamError(st.id, ErrCodeProtocol)\n\t\t}\n\t\trequestURI = rp.path\n\t}\n\n\tbody := &requestBody{\n\t\tconn:          sc,\n\t\tstream:        st,\n\t\tneedsContinue: needsContinue,\n\t}\n\treq := &http.Request{\n\t\tMethod:     rp.method,\n\t\tURL:        url_,\n\t\tRemoteAddr: sc.remoteAddrStr,\n\t\tHeader:     rp.header,\n\t\tRequestURI: requestURI,\n\t\tProto:      \"HTTP/2.0\",\n\t\tProtoMajor: 2,\n\t\tProtoMinor: 0,\n\t\tTLS:        tlsState,\n\t\tHost:       rp.authority,\n\t\tBody:       body,\n\t\tTrailer:    trailer,\n\t}\n\treq = req.WithContext(st.ctx)\n\n\trws := responseWriterStatePool.Get().(*responseWriterState)\n\tbwSave := rws.bw\n\t*rws = responseWriterState{} // zero all the fields\n\trws.conn = sc\n\trws.bw = bwSave\n\trws.bw.Reset(chunkWriter{rws})\n\trws.stream = st\n\trws.req = req\n\trws.body = body\n\n\trw := &responseWriter{rws: rws}\n\treturn rw, req, nil\n}\n\n// Run on its own goroutine.\nfunc (sc *serverConn) runHandler(rw *responseWriter, req *http.Request, handler func(http.ResponseWriter, *http.Request)) {\n\tdidPanic := true\n\tdefer func() {\n\t\trw.rws.stream.cancelCtx()\n\t\tif didPanic {\n\t\t\te := recover()\n\t\t\tsc.writeFrameFromHandler(FrameWriteRequest{\n\t\t\t\twrite:  handlerPanicRST{rw.rws.stream.id},\n\t\t\t\tstream: rw.rws.stream,\n\t\t\t})\n\t\t\t// Same as net/http:\n\t\t\tif e != nil && e != http.ErrAbortHandler {\n\t\t\t\tconst size = 64 << 10\n\t\t\t\tbuf := make([]byte, size)\n\t\t\t\tbuf = buf[:runtime.Stack(buf, false)]\n\t\t\t\tsc.logf(\"http2: panic serving %v: %v\\n%s\", sc.conn.RemoteAddr(), e, buf)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t\trw.handlerDone()\n\t}()\n\thandler(rw, req)\n\tdidPanic = false\n}\n\nfunc handleHeaderListTooLong(w http.ResponseWriter, r *http.Request) {\n\t// 10.5.1 Limits on Header Block Size:\n\t// .. \"A server that receives a larger header block than it is\n\t// willing to handle can send an HTTP 431 (Request Header Fields Too\n\t// Large) status code\"\n\tconst statusRequestHeaderFieldsTooLarge = 431 // only in Go 1.6+\n\tw.WriteHeader(statusRequestHeaderFieldsTooLarge)\n\tio.WriteString(w, \"<h1>HTTP Error 431</h1><p>Request Header Field(s) Too Large</p>\")\n}\n\n// called from handler goroutines.\n// h may be nil.\nfunc (sc *serverConn) writeHeaders(st *stream, headerData *writeResHeaders) error {\n\tsc.serveG.checkNotOn() // NOT on\n\tvar errc chan error\n\tif headerData.h != nil {\n\t\t// If there's a header map (which we don't own), so we have to block on\n\t\t// waiting for this frame to be written, so an http.Flush mid-handler\n\t\t// writes out the correct value of keys, before a handler later potentially\n\t\t// mutates it.\n\t\terrc = errChanPool.Get().(chan error)\n\t}\n\tif err := sc.writeFrameFromHandler(FrameWriteRequest{\n\t\twrite:  headerData,\n\t\tstream: st,\n\t\tdone:   errc,\n\t}); err != nil {\n\t\treturn err\n\t}\n\tif errc != nil {\n\t\tselect {\n\t\tcase err := <-errc:\n\t\t\terrChanPool.Put(errc)\n\t\t\treturn err\n\t\tcase <-sc.doneServing:\n\t\t\treturn errClientDisconnected\n\t\tcase <-st.cw:\n\t\t\treturn errStreamClosed\n\t\t}\n\t}\n\treturn nil\n}\n\n// called from handler goroutines.\nfunc (sc *serverConn) write100ContinueHeaders(st *stream) {\n\tsc.writeFrameFromHandler(FrameWriteRequest{\n\t\twrite:  write100ContinueHeadersFrame{st.id},\n\t\tstream: st,\n\t})\n}\n\n// A bodyReadMsg tells the server loop that the http.Handler read n\n// bytes of the DATA from the client on the given stream.\ntype bodyReadMsg struct {\n\tst *stream\n\tn  int\n}\n\n// called from handler goroutines.\n// Notes that the handler for the given stream ID read n bytes of its body\n// and schedules flow control tokens to be sent.\nfunc (sc *serverConn) noteBodyReadFromHandler(st *stream, n int, err error) {\n\tsc.serveG.checkNotOn() // NOT on\n\tif n > 0 {\n\t\tselect {\n\t\tcase sc.bodyReadCh <- bodyReadMsg{st, n}:\n\t\tcase <-sc.doneServing:\n\t\t}\n\t}\n}\n\nfunc (sc *serverConn) noteBodyRead(st *stream, n int) {\n\tsc.serveG.check()\n\tsc.sendWindowUpdate(nil, n) // conn-level\n\tif st.state != stateHalfClosedRemote && st.state != stateClosed {\n\t\t// Don't send this WINDOW_UPDATE if the stream is closed\n\t\t// remotely.\n\t\tsc.sendWindowUpdate(st, n)\n\t}\n}\n\n// st may be nil for conn-level\nfunc (sc *serverConn) sendWindowUpdate(st *stream, n int) {\n\tsc.serveG.check()\n\t// \"The legal range for the increment to the flow control\n\t// window is 1 to 2^31-1 (2,147,483,647) octets.\"\n\t// A Go Read call on 64-bit machines could in theory read\n\t// a larger Read than this. Very unlikely, but we handle it here\n\t// rather than elsewhere for now.\n\tconst maxUint31 = 1<<31 - 1\n\tfor n >= maxUint31 {\n\t\tsc.sendWindowUpdate32(st, maxUint31)\n\t\tn -= maxUint31\n\t}\n\tsc.sendWindowUpdate32(st, int32(n))\n}\n\n// st may be nil for conn-level\nfunc (sc *serverConn) sendWindowUpdate32(st *stream, n int32) {\n\tsc.serveG.check()\n\tif n == 0 {\n\t\treturn\n\t}\n\tif n < 0 {\n\t\tpanic(\"negative update\")\n\t}\n\tvar streamID uint32\n\tif st != nil {\n\t\tstreamID = st.id\n\t}\n\tsc.writeFrame(FrameWriteRequest{\n\t\twrite:  writeWindowUpdate{streamID: streamID, n: uint32(n)},\n\t\tstream: st,\n\t})\n\tvar ok bool\n\tif st == nil {\n\t\tok = sc.inflow.add(n)\n\t} else {\n\t\tok = st.inflow.add(n)\n\t}\n\tif !ok {\n\t\tpanic(\"internal error; sent too many window updates without decrements?\")\n\t}\n}\n\n// requestBody is the Handler's Request.Body type.\n// Read and Close may be called concurrently.\ntype requestBody struct {\n\tstream        *stream\n\tconn          *serverConn\n\tclosed        bool  // for use by Close only\n\tsawEOF        bool  // for use by Read only\n\tpipe          *pipe // non-nil if we have a HTTP entity message body\n\tneedsContinue bool  // need to send a 100-continue\n}\n\nfunc (b *requestBody) Close() error {\n\tif b.pipe != nil && !b.closed {\n\t\tb.pipe.BreakWithError(errClosedBody)\n\t}\n\tb.closed = true\n\treturn nil\n}\n\nfunc (b *requestBody) Read(p []byte) (n int, err error) {\n\tif b.needsContinue {\n\t\tb.needsContinue = false\n\t\tb.conn.write100ContinueHeaders(b.stream)\n\t}\n\tif b.pipe == nil || b.sawEOF {\n\t\treturn 0, io.EOF\n\t}\n\tn, err = b.pipe.Read(p)\n\tif err == io.EOF {\n\t\tb.sawEOF = true\n\t}\n\tif b.conn == nil && inTests {\n\t\treturn\n\t}\n\tb.conn.noteBodyReadFromHandler(b.stream, n, err)\n\treturn\n}\n\n// responseWriter is the http.ResponseWriter implementation. It's\n// intentionally small (1 pointer wide) to minimize garbage. The\n// responseWriterState pointer inside is zeroed at the end of a\n// request (in handlerDone) and calls on the responseWriter thereafter\n// simply crash (caller's mistake), but the much larger responseWriterState\n// and buffers are reused between multiple requests.\ntype responseWriter struct {\n\trws *responseWriterState\n}\n\n// Optional http.ResponseWriter interfaces implemented.\nvar (\n\t_ http.CloseNotifier = (*responseWriter)(nil)\n\t_ http.Flusher       = (*responseWriter)(nil)\n\t_ stringWriter       = (*responseWriter)(nil)\n)\n\ntype responseWriterState struct {\n\t// immutable within a request:\n\tstream *stream\n\treq    *http.Request\n\tbody   *requestBody // to close at end of request, if DATA frames didn't\n\tconn   *serverConn\n\n\t// TODO: adjust buffer writing sizes based on server config, frame size updates from peer, etc\n\tbw *bufio.Writer // writing to a chunkWriter{this *responseWriterState}\n\n\t// mutated by http.Handler goroutine:\n\thandlerHeader http.Header // nil until called\n\tsnapHeader    http.Header // snapshot of handlerHeader at WriteHeader time\n\ttrailers      []string    // set in writeChunk\n\tstatus        int         // status code passed to WriteHeader\n\twroteHeader   bool        // WriteHeader called (explicitly or implicitly). Not necessarily sent to user yet.\n\tsentHeader    bool        // have we sent the header frame?\n\thandlerDone   bool        // handler has finished\n\tdirty         bool        // a Write failed; don't reuse this responseWriterState\n\n\tsentContentLen int64 // non-zero if handler set a Content-Length header\n\twroteBytes     int64\n\n\tcloseNotifierMu sync.Mutex // guards closeNotifierCh\n\tcloseNotifierCh chan bool  // nil until first used\n}\n\ntype chunkWriter struct{ rws *responseWriterState }\n\nfunc (cw chunkWriter) Write(p []byte) (n int, err error) { return cw.rws.writeChunk(p) }\n\nfunc (rws *responseWriterState) hasTrailers() bool { return len(rws.trailers) > 0 }\n\nfunc (rws *responseWriterState) hasNonemptyTrailers() bool {\n\tfor _, trailer := range rws.trailers {\n\t\tif _, ok := rws.handlerHeader[trailer]; ok {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// declareTrailer is called for each Trailer header when the\n// response header is written. It notes that a header will need to be\n// written in the trailers at the end of the response.\nfunc (rws *responseWriterState) declareTrailer(k string) {\n\tk = http.CanonicalHeaderKey(k)\n\tif !httpguts.ValidTrailerHeader(k) {\n\t\t// Forbidden by RFC 7230, section 4.1.2.\n\t\trws.conn.logf(\"ignoring invalid trailer %q\", k)\n\t\treturn\n\t}\n\tif !strSliceContains(rws.trailers, k) {\n\t\trws.trailers = append(rws.trailers, k)\n\t}\n}\n\n// writeChunk writes chunks from the bufio.Writer. But because\n// bufio.Writer may bypass its chunking, sometimes p may be\n// arbitrarily large.\n//\n// writeChunk is also responsible (on the first chunk) for sending the\n// HEADER response.\nfunc (rws *responseWriterState) writeChunk(p []byte) (n int, err error) {\n\tif !rws.wroteHeader {\n\t\trws.writeHeader(200)\n\t}\n\n\tisHeadResp := rws.req.Method == \"HEAD\"\n\tif !rws.sentHeader {\n\t\trws.sentHeader = true\n\t\tvar ctype, clen string\n\t\tif clen = rws.snapHeader.Get(\"Content-Length\"); clen != \"\" {\n\t\t\trws.snapHeader.Del(\"Content-Length\")\n\t\t\tclen64, err := strconv.ParseInt(clen, 10, 64)\n\t\t\tif err == nil && clen64 >= 0 {\n\t\t\t\trws.sentContentLen = clen64\n\t\t\t} else {\n\t\t\t\tclen = \"\"\n\t\t\t}\n\t\t}\n\t\tif clen == \"\" && rws.handlerDone && bodyAllowedForStatus(rws.status) && (len(p) > 0 || !isHeadResp) {\n\t\t\tclen = strconv.Itoa(len(p))\n\t\t}\n\t\t_, hasContentType := rws.snapHeader[\"Content-Type\"]\n\t\tif !hasContentType && bodyAllowedForStatus(rws.status) && len(p) > 0 {\n\t\t\tctype = http.DetectContentType(p)\n\t\t}\n\t\tvar date string\n\t\tif _, ok := rws.snapHeader[\"Date\"]; !ok {\n\t\t\t// TODO(bradfitz): be faster here, like net/http? measure.\n\t\t\tdate = time.Now().UTC().Format(http.TimeFormat)\n\t\t}\n\n\t\tfor _, v := range rws.snapHeader[\"Trailer\"] {\n\t\t\tforeachHeaderElement(v, rws.declareTrailer)\n\t\t}\n\n\t\t// \"Connection\" headers aren't allowed in HTTP/2 (RFC 7540, 8.1.2.2),\n\t\t// but respect \"Connection\" == \"close\" to mean sending a GOAWAY and tearing\n\t\t// down the TCP connection when idle, like we do for HTTP/1.\n\t\t// TODO: remove more Connection-specific header fields here, in addition\n\t\t// to \"Connection\".\n\t\tif _, ok := rws.snapHeader[\"Connection\"]; ok {\n\t\t\tv := rws.snapHeader.Get(\"Connection\")\n\t\t\tdelete(rws.snapHeader, \"Connection\")\n\t\t\tif v == \"close\" {\n\t\t\t\trws.conn.startGracefulShutdown()\n\t\t\t}\n\t\t}\n\n\t\tendStream := (rws.handlerDone && !rws.hasTrailers() && len(p) == 0) || isHeadResp\n\t\terr = rws.conn.writeHeaders(rws.stream, &writeResHeaders{\n\t\t\tstreamID:      rws.stream.id,\n\t\t\thttpResCode:   rws.status,\n\t\t\th:             rws.snapHeader,\n\t\t\tendStream:     endStream,\n\t\t\tcontentType:   ctype,\n\t\t\tcontentLength: clen,\n\t\t\tdate:          date,\n\t\t})\n\t\tif err != nil {\n\t\t\trws.dirty = true\n\t\t\treturn 0, err\n\t\t}\n\t\tif endStream {\n\t\t\treturn 0, nil\n\t\t}\n\t}\n\tif isHeadResp {\n\t\treturn len(p), nil\n\t}\n\tif len(p) == 0 && !rws.handlerDone {\n\t\treturn 0, nil\n\t}\n\n\tif rws.handlerDone {\n\t\trws.promoteUndeclaredTrailers()\n\t}\n\n\t// only send trailers if they have actually been defined by the\n\t// server handler.\n\thasNonemptyTrailers := rws.hasNonemptyTrailers()\n\tendStream := rws.handlerDone && !hasNonemptyTrailers\n\tif len(p) > 0 || endStream {\n\t\t// only send a 0 byte DATA frame if we're ending the stream.\n\t\tif err := rws.conn.writeDataFromHandler(rws.stream, p, endStream); err != nil {\n\t\t\trws.dirty = true\n\t\t\treturn 0, err\n\t\t}\n\t}\n\n\tif rws.handlerDone && hasNonemptyTrailers {\n\t\terr = rws.conn.writeHeaders(rws.stream, &writeResHeaders{\n\t\t\tstreamID:  rws.stream.id,\n\t\t\th:         rws.handlerHeader,\n\t\t\ttrailers:  rws.trailers,\n\t\t\tendStream: true,\n\t\t})\n\t\tif err != nil {\n\t\t\trws.dirty = true\n\t\t}\n\t\treturn len(p), err\n\t}\n\treturn len(p), nil\n}\n\n// TrailerPrefix is a magic prefix for ResponseWriter.Header map keys\n// that, if present, signals that the map entry is actually for\n// the response trailers, and not the response headers. The prefix\n// is stripped after the ServeHTTP call finishes and the values are\n// sent in the trailers.\n//\n// This mechanism is intended only for trailers that are not known\n// prior to the headers being written. If the set of trailers is fixed\n// or known before the header is written, the normal Go trailers mechanism\n// is preferred:\n//    https://golang.org/pkg/net/http/#ResponseWriter\n//    https://golang.org/pkg/net/http/#example_ResponseWriter_trailers\nconst TrailerPrefix = \"Trailer:\"\n\n// promoteUndeclaredTrailers permits http.Handlers to set trailers\n// after the header has already been flushed. Because the Go\n// ResponseWriter interface has no way to set Trailers (only the\n// Header), and because we didn't want to expand the ResponseWriter\n// interface, and because nobody used trailers, and because RFC 7230\n// says you SHOULD (but not must) predeclare any trailers in the\n// header, the official ResponseWriter rules said trailers in Go must\n// be predeclared, and then we reuse the same ResponseWriter.Header()\n// map to mean both Headers and Trailers. When it's time to write the\n// Trailers, we pick out the fields of Headers that were declared as\n// trailers. That worked for a while, until we found the first major\n// user of Trailers in the wild: gRPC (using them only over http2),\n// and gRPC libraries permit setting trailers mid-stream without\n// predeclarnig them. So: change of plans. We still permit the old\n// way, but we also permit this hack: if a Header() key begins with\n// \"Trailer:\", the suffix of that key is a Trailer. Because ':' is an\n// invalid token byte anyway, there is no ambiguity. (And it's already\n// filtered out) It's mildly hacky, but not terrible.\n//\n// This method runs after the Handler is done and promotes any Header\n// fields to be trailers.\nfunc (rws *responseWriterState) promoteUndeclaredTrailers() {\n\tfor k, vv := range rws.handlerHeader {\n\t\tif !strings.HasPrefix(k, TrailerPrefix) {\n\t\t\tcontinue\n\t\t}\n\t\ttrailerKey := strings.TrimPrefix(k, TrailerPrefix)\n\t\trws.declareTrailer(trailerKey)\n\t\trws.handlerHeader[http.CanonicalHeaderKey(trailerKey)] = vv\n\t}\n\n\tif len(rws.trailers) > 1 {\n\t\tsorter := sorterPool.Get().(*sorter)\n\t\tsorter.SortStrings(rws.trailers)\n\t\tsorterPool.Put(sorter)\n\t}\n}\n\nfunc (w *responseWriter) Flush() {\n\trws := w.rws\n\tif rws == nil {\n\t\tpanic(\"Header called after Handler finished\")\n\t}\n\tif rws.bw.Buffered() > 0 {\n\t\tif err := rws.bw.Flush(); err != nil {\n\t\t\t// Ignore the error. The frame writer already knows.\n\t\t\treturn\n\t\t}\n\t} else {\n\t\t// The bufio.Writer won't call chunkWriter.Write\n\t\t// (writeChunk with zero bytes, so we have to do it\n\t\t// ourselves to force the HTTP response header and/or\n\t\t// final DATA frame (with END_STREAM) to be sent.\n\t\trws.writeChunk(nil)\n\t}\n}\n\nfunc (w *responseWriter) CloseNotify() <-chan bool {\n\trws := w.rws\n\tif rws == nil {\n\t\tpanic(\"CloseNotify called after Handler finished\")\n\t}\n\trws.closeNotifierMu.Lock()\n\tch := rws.closeNotifierCh\n\tif ch == nil {\n\t\tch = make(chan bool, 1)\n\t\trws.closeNotifierCh = ch\n\t\tcw := rws.stream.cw\n\t\tgo func() {\n\t\t\tcw.Wait() // wait for close\n\t\t\tch <- true\n\t\t}()\n\t}\n\trws.closeNotifierMu.Unlock()\n\treturn ch\n}\n\nfunc (w *responseWriter) Header() http.Header {\n\trws := w.rws\n\tif rws == nil {\n\t\tpanic(\"Header called after Handler finished\")\n\t}\n\tif rws.handlerHeader == nil {\n\t\trws.handlerHeader = make(http.Header)\n\t}\n\treturn rws.handlerHeader\n}\n\n// checkWriteHeaderCode is a copy of net/http's checkWriteHeaderCode.\nfunc checkWriteHeaderCode(code int) {\n\t// Issue 22880: require valid WriteHeader status codes.\n\t// For now we only enforce that it's three digits.\n\t// In the future we might block things over 599 (600 and above aren't defined\n\t// at http://httpwg.org/specs/rfc7231.html#status.codes)\n\t// and we might block under 200 (once we have more mature 1xx support).\n\t// But for now any three digits.\n\t//\n\t// We used to send \"HTTP/1.1 000 0\" on the wire in responses but there's\n\t// no equivalent bogus thing we can realistically send in HTTP/2,\n\t// so we'll consistently panic instead and help people find their bugs\n\t// early. (We can't return an error from WriteHeader even if we wanted to.)\n\tif code < 100 || code > 999 {\n\t\tpanic(fmt.Sprintf(\"invalid WriteHeader code %v\", code))\n\t}\n}\n\nfunc (w *responseWriter) WriteHeader(code int) {\n\trws := w.rws\n\tif rws == nil {\n\t\tpanic(\"WriteHeader called after Handler finished\")\n\t}\n\trws.writeHeader(code)\n}\n\nfunc (rws *responseWriterState) writeHeader(code int) {\n\tif !rws.wroteHeader {\n\t\tcheckWriteHeaderCode(code)\n\t\trws.wroteHeader = true\n\t\trws.status = code\n\t\tif len(rws.handlerHeader) > 0 {\n\t\t\trws.snapHeader = cloneHeader(rws.handlerHeader)\n\t\t}\n\t}\n}\n\nfunc cloneHeader(h http.Header) http.Header {\n\th2 := make(http.Header, len(h))\n\tfor k, vv := range h {\n\t\tvv2 := make([]string, len(vv))\n\t\tcopy(vv2, vv)\n\t\th2[k] = vv2\n\t}\n\treturn h2\n}\n\n// The Life Of A Write is like this:\n//\n// * Handler calls w.Write or w.WriteString ->\n// * -> rws.bw (*bufio.Writer) ->\n// * (Handler might call Flush)\n// * -> chunkWriter{rws}\n// * -> responseWriterState.writeChunk(p []byte)\n// * -> responseWriterState.writeChunk (most of the magic; see comment there)\nfunc (w *responseWriter) Write(p []byte) (n int, err error) {\n\treturn w.write(len(p), p, \"\")\n}\n\nfunc (w *responseWriter) WriteString(s string) (n int, err error) {\n\treturn w.write(len(s), nil, s)\n}\n\n// either dataB or dataS is non-zero.\nfunc (w *responseWriter) write(lenData int, dataB []byte, dataS string) (n int, err error) {\n\trws := w.rws\n\tif rws == nil {\n\t\tpanic(\"Write called after Handler finished\")\n\t}\n\tif !rws.wroteHeader {\n\t\tw.WriteHeader(200)\n\t}\n\tif !bodyAllowedForStatus(rws.status) {\n\t\treturn 0, http.ErrBodyNotAllowed\n\t}\n\trws.wroteBytes += int64(len(dataB)) + int64(len(dataS)) // only one can be set\n\tif rws.sentContentLen != 0 && rws.wroteBytes > rws.sentContentLen {\n\t\t// TODO: send a RST_STREAM\n\t\treturn 0, errors.New(\"http2: handler wrote more than declared Content-Length\")\n\t}\n\n\tif dataB != nil {\n\t\treturn rws.bw.Write(dataB)\n\t} else {\n\t\treturn rws.bw.WriteString(dataS)\n\t}\n}\n\nfunc (w *responseWriter) handlerDone() {\n\trws := w.rws\n\tdirty := rws.dirty\n\trws.handlerDone = true\n\tw.Flush()\n\tw.rws = nil\n\tif !dirty {\n\t\t// Only recycle the pool if all prior Write calls to\n\t\t// the serverConn goroutine completed successfully. If\n\t\t// they returned earlier due to resets from the peer\n\t\t// there might still be write goroutines outstanding\n\t\t// from the serverConn referencing the rws memory. See\n\t\t// issue 20704.\n\t\tresponseWriterStatePool.Put(rws)\n\t}\n}\n\n// Push errors.\nvar (\n\tErrRecursivePush    = errors.New(\"http2: recursive push not allowed\")\n\tErrPushLimitReached = errors.New(\"http2: push would exceed peer's SETTINGS_MAX_CONCURRENT_STREAMS\")\n)\n\nvar _ http.Pusher = (*responseWriter)(nil)\n\nfunc (w *responseWriter) Push(target string, opts *http.PushOptions) error {\n\tst := w.rws.stream\n\tsc := st.sc\n\tsc.serveG.checkNotOn()\n\n\t// No recursive pushes: \"PUSH_PROMISE frames MUST only be sent on a peer-initiated stream.\"\n\t// http://tools.ietf.org/html/rfc7540#section-6.6\n\tif st.isPushed() {\n\t\treturn ErrRecursivePush\n\t}\n\n\tif opts == nil {\n\t\topts = new(http.PushOptions)\n\t}\n\n\t// Default options.\n\tif opts.Method == \"\" {\n\t\topts.Method = \"GET\"\n\t}\n\tif opts.Header == nil {\n\t\topts.Header = http.Header{}\n\t}\n\twantScheme := \"http\"\n\tif w.rws.req.TLS != nil {\n\t\twantScheme = \"https\"\n\t}\n\n\t// Validate the request.\n\tu, err := url.Parse(target)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif u.Scheme == \"\" {\n\t\tif !strings.HasPrefix(target, \"/\") {\n\t\t\treturn fmt.Errorf(\"target must be an absolute URL or an absolute path: %q\", target)\n\t\t}\n\t\tu.Scheme = wantScheme\n\t\tu.Host = w.rws.req.Host\n\t} else {\n\t\tif u.Scheme != wantScheme {\n\t\t\treturn fmt.Errorf(\"cannot push URL with scheme %q from request with scheme %q\", u.Scheme, wantScheme)\n\t\t}\n\t\tif u.Host == \"\" {\n\t\t\treturn errors.New(\"URL must have a host\")\n\t\t}\n\t}\n\tfor k := range opts.Header {\n\t\tif strings.HasPrefix(k, \":\") {\n\t\t\treturn fmt.Errorf(\"promised request headers cannot include pseudo header %q\", k)\n\t\t}\n\t\t// These headers are meaningful only if the request has a body,\n\t\t// but PUSH_PROMISE requests cannot have a body.\n\t\t// http://tools.ietf.org/html/rfc7540#section-8.2\n\t\t// Also disallow Host, since the promised URL must be absolute.\n\t\tswitch strings.ToLower(k) {\n\t\tcase \"content-length\", \"content-encoding\", \"trailer\", \"te\", \"expect\", \"host\":\n\t\t\treturn fmt.Errorf(\"promised request headers cannot include %q\", k)\n\t\t}\n\t}\n\tif err := checkValidHTTP2RequestHeaders(opts.Header); err != nil {\n\t\treturn err\n\t}\n\n\t// The RFC effectively limits promised requests to GET and HEAD:\n\t// \"Promised requests MUST be cacheable [GET, HEAD, or POST], and MUST be safe [GET or HEAD]\"\n\t// http://tools.ietf.org/html/rfc7540#section-8.2\n\tif opts.Method != \"GET\" && opts.Method != \"HEAD\" {\n\t\treturn fmt.Errorf(\"method %q must be GET or HEAD\", opts.Method)\n\t}\n\n\tmsg := &startPushRequest{\n\t\tparent: st,\n\t\tmethod: opts.Method,\n\t\turl:    u,\n\t\theader: cloneHeader(opts.Header),\n\t\tdone:   errChanPool.Get().(chan error),\n\t}\n\n\tselect {\n\tcase <-sc.doneServing:\n\t\treturn errClientDisconnected\n\tcase <-st.cw:\n\t\treturn errStreamClosed\n\tcase sc.serveMsgCh <- msg:\n\t}\n\n\tselect {\n\tcase <-sc.doneServing:\n\t\treturn errClientDisconnected\n\tcase <-st.cw:\n\t\treturn errStreamClosed\n\tcase err := <-msg.done:\n\t\terrChanPool.Put(msg.done)\n\t\treturn err\n\t}\n}\n\ntype startPushRequest struct {\n\tparent *stream\n\tmethod string\n\turl    *url.URL\n\theader http.Header\n\tdone   chan error\n}\n\nfunc (sc *serverConn) startPush(msg *startPushRequest) {\n\tsc.serveG.check()\n\n\t// http://tools.ietf.org/html/rfc7540#section-6.6.\n\t// PUSH_PROMISE frames MUST only be sent on a peer-initiated stream that\n\t// is in either the \"open\" or \"half-closed (remote)\" state.\n\tif msg.parent.state != stateOpen && msg.parent.state != stateHalfClosedRemote {\n\t\t// responseWriter.Push checks that the stream is peer-initiaed.\n\t\tmsg.done <- errStreamClosed\n\t\treturn\n\t}\n\n\t// http://tools.ietf.org/html/rfc7540#section-6.6.\n\tif !sc.pushEnabled {\n\t\tmsg.done <- http.ErrNotSupported\n\t\treturn\n\t}\n\n\t// PUSH_PROMISE frames must be sent in increasing order by stream ID, so\n\t// we allocate an ID for the promised stream lazily, when the PUSH_PROMISE\n\t// is written. Once the ID is allocated, we start the request handler.\n\tallocatePromisedID := func() (uint32, error) {\n\t\tsc.serveG.check()\n\n\t\t// Check this again, just in case. Technically, we might have received\n\t\t// an updated SETTINGS by the time we got around to writing this frame.\n\t\tif !sc.pushEnabled {\n\t\t\treturn 0, http.ErrNotSupported\n\t\t}\n\t\t// http://tools.ietf.org/html/rfc7540#section-6.5.2.\n\t\tif sc.curPushedStreams+1 > sc.clientMaxStreams {\n\t\t\treturn 0, ErrPushLimitReached\n\t\t}\n\n\t\t// http://tools.ietf.org/html/rfc7540#section-5.1.1.\n\t\t// Streams initiated by the server MUST use even-numbered identifiers.\n\t\t// A server that is unable to establish a new stream identifier can send a GOAWAY\n\t\t// frame so that the client is forced to open a new connection for new streams.\n\t\tif sc.maxPushPromiseID+2 >= 1<<31 {\n\t\t\tsc.startGracefulShutdownInternal()\n\t\t\treturn 0, ErrPushLimitReached\n\t\t}\n\t\tsc.maxPushPromiseID += 2\n\t\tpromisedID := sc.maxPushPromiseID\n\n\t\t// http://tools.ietf.org/html/rfc7540#section-8.2.\n\t\t// Strictly speaking, the new stream should start in \"reserved (local)\", then\n\t\t// transition to \"half closed (remote)\" after sending the initial HEADERS, but\n\t\t// we start in \"half closed (remote)\" for simplicity.\n\t\t// See further comments at the definition of stateHalfClosedRemote.\n\t\tpromised := sc.newStream(promisedID, msg.parent.id, stateHalfClosedRemote)\n\t\trw, req, err := sc.newWriterAndRequestNoBody(promised, requestParam{\n\t\t\tmethod:    msg.method,\n\t\t\tscheme:    msg.url.Scheme,\n\t\t\tauthority: msg.url.Host,\n\t\t\tpath:      msg.url.RequestURI(),\n\t\t\theader:    cloneHeader(msg.header), // clone since handler runs concurrently with writing the PUSH_PROMISE\n\t\t})\n\t\tif err != nil {\n\t\t\t// Should not happen, since we've already validated msg.url.\n\t\t\tpanic(fmt.Sprintf(\"newWriterAndRequestNoBody(%+v): %v\", msg.url, err))\n\t\t}\n\n\t\tgo sc.runHandler(rw, req, sc.handler.ServeHTTP)\n\t\treturn promisedID, nil\n\t}\n\n\tsc.writeFrame(FrameWriteRequest{\n\t\twrite: &writePushPromise{\n\t\t\tstreamID:           msg.parent.id,\n\t\t\tmethod:             msg.method,\n\t\t\turl:                msg.url,\n\t\t\th:                  msg.header,\n\t\t\tallocatePromisedID: allocatePromisedID,\n\t\t},\n\t\tstream: msg.parent,\n\t\tdone:   msg.done,\n\t})\n}\n\n// foreachHeaderElement splits v according to the \"#rule\" construction\n// in RFC 7230 section 7 and calls fn for each non-empty element.\nfunc foreachHeaderElement(v string, fn func(string)) {\n\tv = textproto.TrimString(v)\n\tif v == \"\" {\n\t\treturn\n\t}\n\tif !strings.Contains(v, \",\") {\n\t\tfn(v)\n\t\treturn\n\t}\n\tfor _, f := range strings.Split(v, \",\") {\n\t\tif f = textproto.TrimString(f); f != \"\" {\n\t\t\tfn(f)\n\t\t}\n\t}\n}\n\n// From http://httpwg.org/specs/rfc7540.html#rfc.section.8.1.2.2\nvar connHeaders = []string{\n\t\"Connection\",\n\t\"Keep-Alive\",\n\t\"Proxy-Connection\",\n\t\"Transfer-Encoding\",\n\t\"Upgrade\",\n}\n\n// checkValidHTTP2RequestHeaders checks whether h is a valid HTTP/2 request,\n// per RFC 7540 Section 8.1.2.2.\n// The returned error is reported to users.\nfunc checkValidHTTP2RequestHeaders(h http.Header) error {\n\tfor _, k := range connHeaders {\n\t\tif _, ok := h[k]; ok {\n\t\t\treturn fmt.Errorf(\"request header %q is not valid in HTTP/2\", k)\n\t\t}\n\t}\n\tte := h[\"Te\"]\n\tif len(te) > 0 && (len(te) > 1 || (te[0] != \"trailers\" && te[0] != \"\")) {\n\t\treturn errors.New(`request header \"TE\" may only be \"trailers\" in HTTP/2`)\n\t}\n\treturn nil\n}\n\nfunc new400Handler(err error) http.HandlerFunc {\n\treturn func(w http.ResponseWriter, r *http.Request) {\n\t\thttp.Error(w, err.Error(), http.StatusBadRequest)\n\t}\n}\n\n// h1ServerKeepAlivesDisabled reports whether hs has its keep-alives\n// disabled. See comments on h1ServerShutdownChan above for why\n// the code is written this way.\nfunc h1ServerKeepAlivesDisabled(hs *http.Server) bool {\n\tvar x interface{} = hs\n\ttype I interface {\n\t\tdoKeepAlives() bool\n\t}\n\tif hs, ok := x.(I); ok {\n\t\treturn !hs.doKeepAlives()\n\t}\n\treturn false\n}\n"
  },
  {
    "path": "vendor/golang.org/x/net/http2/transport.go",
    "content": "// Copyright 2015 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Transport code.\n\npackage http2\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"compress/gzip\"\n\t\"context\"\n\t\"crypto/rand\"\n\t\"crypto/tls\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"log\"\n\t\"math\"\n\tmathrand \"math/rand\"\n\t\"net\"\n\t\"net/http\"\n\t\"net/http/httptrace\"\n\t\"net/textproto\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\t\"sync/atomic\"\n\t\"time\"\n\n\t\"golang.org/x/net/http/httpguts\"\n\t\"golang.org/x/net/http2/hpack\"\n\t\"golang.org/x/net/idna\"\n)\n\nconst (\n\t// transportDefaultConnFlow is how many connection-level flow control\n\t// tokens we give the server at start-up, past the default 64k.\n\ttransportDefaultConnFlow = 1 << 30\n\n\t// transportDefaultStreamFlow is how many stream-level flow\n\t// control tokens we announce to the peer, and how many bytes\n\t// we buffer per stream.\n\ttransportDefaultStreamFlow = 4 << 20\n\n\t// transportDefaultStreamMinRefresh is the minimum number of bytes we'll send\n\t// a stream-level WINDOW_UPDATE for at a time.\n\ttransportDefaultStreamMinRefresh = 4 << 10\n\n\tdefaultUserAgent = \"Go-http-client/2.0\"\n)\n\n// Transport is an HTTP/2 Transport.\n//\n// A Transport internally caches connections to servers. It is safe\n// for concurrent use by multiple goroutines.\ntype Transport struct {\n\t// DialTLS specifies an optional dial function for creating\n\t// TLS connections for requests.\n\t//\n\t// If DialTLS is nil, tls.Dial is used.\n\t//\n\t// If the returned net.Conn has a ConnectionState method like tls.Conn,\n\t// it will be used to set http.Response.TLS.\n\tDialTLS func(network, addr string, cfg *tls.Config) (net.Conn, error)\n\n\t// TLSClientConfig specifies the TLS configuration to use with\n\t// tls.Client. If nil, the default configuration is used.\n\tTLSClientConfig *tls.Config\n\n\t// ConnPool optionally specifies an alternate connection pool to use.\n\t// If nil, the default is used.\n\tConnPool ClientConnPool\n\n\t// DisableCompression, if true, prevents the Transport from\n\t// requesting compression with an \"Accept-Encoding: gzip\"\n\t// request header when the Request contains no existing\n\t// Accept-Encoding value. If the Transport requests gzip on\n\t// its own and gets a gzipped response, it's transparently\n\t// decoded in the Response.Body. However, if the user\n\t// explicitly requested gzip it is not automatically\n\t// uncompressed.\n\tDisableCompression bool\n\n\t// AllowHTTP, if true, permits HTTP/2 requests using the insecure,\n\t// plain-text \"http\" scheme. Note that this does not enable h2c support.\n\tAllowHTTP bool\n\n\t// MaxHeaderListSize is the http2 SETTINGS_MAX_HEADER_LIST_SIZE to\n\t// send in the initial settings frame. It is how many bytes\n\t// of response headers are allowed. Unlike the http2 spec, zero here\n\t// means to use a default limit (currently 10MB). If you actually\n\t// want to advertise an ulimited value to the peer, Transport\n\t// interprets the highest possible value here (0xffffffff or 1<<32-1)\n\t// to mean no limit.\n\tMaxHeaderListSize uint32\n\n\t// StrictMaxConcurrentStreams controls whether the server's\n\t// SETTINGS_MAX_CONCURRENT_STREAMS should be respected\n\t// globally. If false, new TCP connections are created to the\n\t// server as needed to keep each under the per-connection\n\t// SETTINGS_MAX_CONCURRENT_STREAMS limit. If true, the\n\t// server's SETTINGS_MAX_CONCURRENT_STREAMS is interpreted as\n\t// a global limit and callers of RoundTrip block when needed,\n\t// waiting for their turn.\n\tStrictMaxConcurrentStreams bool\n\n\t// t1, if non-nil, is the standard library Transport using\n\t// this transport. Its settings are used (but not its\n\t// RoundTrip method, etc).\n\tt1 *http.Transport\n\n\tconnPoolOnce  sync.Once\n\tconnPoolOrDef ClientConnPool // non-nil version of ConnPool\n}\n\nfunc (t *Transport) maxHeaderListSize() uint32 {\n\tif t.MaxHeaderListSize == 0 {\n\t\treturn 10 << 20\n\t}\n\tif t.MaxHeaderListSize == 0xffffffff {\n\t\treturn 0\n\t}\n\treturn t.MaxHeaderListSize\n}\n\nfunc (t *Transport) disableCompression() bool {\n\treturn t.DisableCompression || (t.t1 != nil && t.t1.DisableCompression)\n}\n\n// ConfigureTransport configures a net/http HTTP/1 Transport to use HTTP/2.\n// It returns an error if t1 has already been HTTP/2-enabled.\nfunc ConfigureTransport(t1 *http.Transport) error {\n\t_, err := configureTransport(t1)\n\treturn err\n}\n\nfunc configureTransport(t1 *http.Transport) (*Transport, error) {\n\tconnPool := new(clientConnPool)\n\tt2 := &Transport{\n\t\tConnPool: noDialClientConnPool{connPool},\n\t\tt1:       t1,\n\t}\n\tconnPool.t = t2\n\tif err := registerHTTPSProtocol(t1, noDialH2RoundTripper{t2}); err != nil {\n\t\treturn nil, err\n\t}\n\tif t1.TLSClientConfig == nil {\n\t\tt1.TLSClientConfig = new(tls.Config)\n\t}\n\tif !strSliceContains(t1.TLSClientConfig.NextProtos, \"h2\") {\n\t\tt1.TLSClientConfig.NextProtos = append([]string{\"h2\"}, t1.TLSClientConfig.NextProtos...)\n\t}\n\tif !strSliceContains(t1.TLSClientConfig.NextProtos, \"http/1.1\") {\n\t\tt1.TLSClientConfig.NextProtos = append(t1.TLSClientConfig.NextProtos, \"http/1.1\")\n\t}\n\tupgradeFn := func(authority string, c *tls.Conn) http.RoundTripper {\n\t\taddr := authorityAddr(\"https\", authority)\n\t\tif used, err := connPool.addConnIfNeeded(addr, t2, c); err != nil {\n\t\t\tgo c.Close()\n\t\t\treturn erringRoundTripper{err}\n\t\t} else if !used {\n\t\t\t// Turns out we don't need this c.\n\t\t\t// For example, two goroutines made requests to the same host\n\t\t\t// at the same time, both kicking off TCP dials. (since protocol\n\t\t\t// was unknown)\n\t\t\tgo c.Close()\n\t\t}\n\t\treturn t2\n\t}\n\tif m := t1.TLSNextProto; len(m) == 0 {\n\t\tt1.TLSNextProto = map[string]func(string, *tls.Conn) http.RoundTripper{\n\t\t\t\"h2\": upgradeFn,\n\t\t}\n\t} else {\n\t\tm[\"h2\"] = upgradeFn\n\t}\n\treturn t2, nil\n}\n\nfunc (t *Transport) connPool() ClientConnPool {\n\tt.connPoolOnce.Do(t.initConnPool)\n\treturn t.connPoolOrDef\n}\n\nfunc (t *Transport) initConnPool() {\n\tif t.ConnPool != nil {\n\t\tt.connPoolOrDef = t.ConnPool\n\t} else {\n\t\tt.connPoolOrDef = &clientConnPool{t: t}\n\t}\n}\n\n// ClientConn is the state of a single HTTP/2 client connection to an\n// HTTP/2 server.\ntype ClientConn struct {\n\tt         *Transport\n\ttconn     net.Conn             // usually *tls.Conn, except specialized impls\n\ttlsState  *tls.ConnectionState // nil only for specialized impls\n\treused    uint32               // whether conn is being reused; atomic\n\tsingleUse bool                 // whether being used for a single http.Request\n\n\t// readLoop goroutine fields:\n\treaderDone chan struct{} // closed on error\n\treaderErr  error         // set before readerDone is closed\n\n\tidleTimeout time.Duration // or 0 for never\n\tidleTimer   *time.Timer\n\n\tmu              sync.Mutex // guards following\n\tcond            *sync.Cond // hold mu; broadcast on flow/closed changes\n\tflow            flow       // our conn-level flow control quota (cs.flow is per stream)\n\tinflow          flow       // peer's conn-level flow control\n\tclosing         bool\n\tclosed          bool\n\twantSettingsAck bool                     // we sent a SETTINGS frame and haven't heard back\n\tgoAway          *GoAwayFrame             // if non-nil, the GoAwayFrame we received\n\tgoAwayDebug     string                   // goAway frame's debug data, retained as a string\n\tstreams         map[uint32]*clientStream // client-initiated\n\tnextStreamID    uint32\n\tpendingRequests int                       // requests blocked and waiting to be sent because len(streams) == maxConcurrentStreams\n\tpings           map[[8]byte]chan struct{} // in flight ping data to notification channel\n\tbw              *bufio.Writer\n\tbr              *bufio.Reader\n\tfr              *Framer\n\tlastActive      time.Time\n\t// Settings from peer: (also guarded by mu)\n\tmaxFrameSize          uint32\n\tmaxConcurrentStreams  uint32\n\tpeerMaxHeaderListSize uint64\n\tinitialWindowSize     uint32\n\n\thbuf    bytes.Buffer // HPACK encoder writes into this\n\thenc    *hpack.Encoder\n\tfreeBuf [][]byte\n\n\twmu  sync.Mutex // held while writing; acquire AFTER mu if holding both\n\twerr error      // first write error that has occurred\n}\n\n// clientStream is the state for a single HTTP/2 stream. One of these\n// is created for each Transport.RoundTrip call.\ntype clientStream struct {\n\tcc            *ClientConn\n\treq           *http.Request\n\ttrace         *httptrace.ClientTrace // or nil\n\tID            uint32\n\tresc          chan resAndError\n\tbufPipe       pipe // buffered pipe with the flow-controlled response payload\n\tstartedWrite  bool // started request body write; guarded by cc.mu\n\trequestedGzip bool\n\ton100         func() // optional code to run if get a 100 continue response\n\n\tflow        flow  // guarded by cc.mu\n\tinflow      flow  // guarded by cc.mu\n\tbytesRemain int64 // -1 means unknown; owned by transportResponseBody.Read\n\treadErr     error // sticky read error; owned by transportResponseBody.Read\n\tstopReqBody error // if non-nil, stop writing req body; guarded by cc.mu\n\tdidReset    bool  // whether we sent a RST_STREAM to the server; guarded by cc.mu\n\n\tpeerReset chan struct{} // closed on peer reset\n\tresetErr  error         // populated before peerReset is closed\n\n\tdone chan struct{} // closed when stream remove from cc.streams map; close calls guarded by cc.mu\n\n\t// owned by clientConnReadLoop:\n\tfirstByte    bool  // got the first response byte\n\tpastHeaders  bool  // got first MetaHeadersFrame (actual headers)\n\tpastTrailers bool  // got optional second MetaHeadersFrame (trailers)\n\tnum1xx       uint8 // number of 1xx responses seen\n\n\ttrailer    http.Header  // accumulated trailers\n\tresTrailer *http.Header // client's Response.Trailer\n}\n\n// awaitRequestCancel waits for the user to cancel a request or for the done\n// channel to be signaled. A non-nil error is returned only if the request was\n// canceled.\nfunc awaitRequestCancel(req *http.Request, done <-chan struct{}) error {\n\tctx := req.Context()\n\tif req.Cancel == nil && ctx.Done() == nil {\n\t\treturn nil\n\t}\n\tselect {\n\tcase <-req.Cancel:\n\t\treturn errRequestCanceled\n\tcase <-ctx.Done():\n\t\treturn ctx.Err()\n\tcase <-done:\n\t\treturn nil\n\t}\n}\n\nvar got1xxFuncForTests func(int, textproto.MIMEHeader) error\n\n// get1xxTraceFunc returns the value of request's httptrace.ClientTrace.Got1xxResponse func,\n// if any. It returns nil if not set or if the Go version is too old.\nfunc (cs *clientStream) get1xxTraceFunc() func(int, textproto.MIMEHeader) error {\n\tif fn := got1xxFuncForTests; fn != nil {\n\t\treturn fn\n\t}\n\treturn traceGot1xxResponseFunc(cs.trace)\n}\n\n// awaitRequestCancel waits for the user to cancel a request, its context to\n// expire, or for the request to be done (any way it might be removed from the\n// cc.streams map: peer reset, successful completion, TCP connection breakage,\n// etc). If the request is canceled, then cs will be canceled and closed.\nfunc (cs *clientStream) awaitRequestCancel(req *http.Request) {\n\tif err := awaitRequestCancel(req, cs.done); err != nil {\n\t\tcs.cancelStream()\n\t\tcs.bufPipe.CloseWithError(err)\n\t}\n}\n\nfunc (cs *clientStream) cancelStream() {\n\tcc := cs.cc\n\tcc.mu.Lock()\n\tdidReset := cs.didReset\n\tcs.didReset = true\n\tcc.mu.Unlock()\n\n\tif !didReset {\n\t\tcc.writeStreamReset(cs.ID, ErrCodeCancel, nil)\n\t\tcc.forgetStreamID(cs.ID)\n\t}\n}\n\n// checkResetOrDone reports any error sent in a RST_STREAM frame by the\n// server, or errStreamClosed if the stream is complete.\nfunc (cs *clientStream) checkResetOrDone() error {\n\tselect {\n\tcase <-cs.peerReset:\n\t\treturn cs.resetErr\n\tcase <-cs.done:\n\t\treturn errStreamClosed\n\tdefault:\n\t\treturn nil\n\t}\n}\n\nfunc (cs *clientStream) getStartedWrite() bool {\n\tcc := cs.cc\n\tcc.mu.Lock()\n\tdefer cc.mu.Unlock()\n\treturn cs.startedWrite\n}\n\nfunc (cs *clientStream) abortRequestBodyWrite(err error) {\n\tif err == nil {\n\t\tpanic(\"nil error\")\n\t}\n\tcc := cs.cc\n\tcc.mu.Lock()\n\tcs.stopReqBody = err\n\tcc.cond.Broadcast()\n\tcc.mu.Unlock()\n}\n\ntype stickyErrWriter struct {\n\tw   io.Writer\n\terr *error\n}\n\nfunc (sew stickyErrWriter) Write(p []byte) (n int, err error) {\n\tif *sew.err != nil {\n\t\treturn 0, *sew.err\n\t}\n\tn, err = sew.w.Write(p)\n\t*sew.err = err\n\treturn\n}\n\n// noCachedConnError is the concrete type of ErrNoCachedConn, which\n// needs to be detected by net/http regardless of whether it's its\n// bundled version (in h2_bundle.go with a rewritten type name) or\n// from a user's x/net/http2. As such, as it has a unique method name\n// (IsHTTP2NoCachedConnError) that net/http sniffs for via func\n// isNoCachedConnError.\ntype noCachedConnError struct{}\n\nfunc (noCachedConnError) IsHTTP2NoCachedConnError() {}\nfunc (noCachedConnError) Error() string             { return \"http2: no cached connection was available\" }\n\n// isNoCachedConnError reports whether err is of type noCachedConnError\n// or its equivalent renamed type in net/http2's h2_bundle.go. Both types\n// may coexist in the same running program.\nfunc isNoCachedConnError(err error) bool {\n\t_, ok := err.(interface{ IsHTTP2NoCachedConnError() })\n\treturn ok\n}\n\nvar ErrNoCachedConn error = noCachedConnError{}\n\n// RoundTripOpt are options for the Transport.RoundTripOpt method.\ntype RoundTripOpt struct {\n\t// OnlyCachedConn controls whether RoundTripOpt may\n\t// create a new TCP connection. If set true and\n\t// no cached connection is available, RoundTripOpt\n\t// will return ErrNoCachedConn.\n\tOnlyCachedConn bool\n}\n\nfunc (t *Transport) RoundTrip(req *http.Request) (*http.Response, error) {\n\treturn t.RoundTripOpt(req, RoundTripOpt{})\n}\n\n// authorityAddr returns a given authority (a host/IP, or host:port / ip:port)\n// and returns a host:port. The port 443 is added if needed.\nfunc authorityAddr(scheme string, authority string) (addr string) {\n\thost, port, err := net.SplitHostPort(authority)\n\tif err != nil { // authority didn't have a port\n\t\tport = \"443\"\n\t\tif scheme == \"http\" {\n\t\t\tport = \"80\"\n\t\t}\n\t\thost = authority\n\t}\n\tif a, err := idna.ToASCII(host); err == nil {\n\t\thost = a\n\t}\n\t// IPv6 address literal, without a port:\n\tif strings.HasPrefix(host, \"[\") && strings.HasSuffix(host, \"]\") {\n\t\treturn host + \":\" + port\n\t}\n\treturn net.JoinHostPort(host, port)\n}\n\n// RoundTripOpt is like RoundTrip, but takes options.\nfunc (t *Transport) RoundTripOpt(req *http.Request, opt RoundTripOpt) (*http.Response, error) {\n\tif !(req.URL.Scheme == \"https\" || (req.URL.Scheme == \"http\" && t.AllowHTTP)) {\n\t\treturn nil, errors.New(\"http2: unsupported scheme\")\n\t}\n\n\taddr := authorityAddr(req.URL.Scheme, req.URL.Host)\n\tfor retry := 0; ; retry++ {\n\t\tcc, err := t.connPool().GetClientConn(req, addr)\n\t\tif err != nil {\n\t\t\tt.vlogf(\"http2: Transport failed to get client conn for %s: %v\", addr, err)\n\t\t\treturn nil, err\n\t\t}\n\t\treused := !atomic.CompareAndSwapUint32(&cc.reused, 0, 1)\n\t\ttraceGotConn(req, cc, reused)\n\t\tres, gotErrAfterReqBodyWrite, err := cc.roundTrip(req)\n\t\tif err != nil && retry <= 6 {\n\t\t\tif req, err = shouldRetryRequest(req, err, gotErrAfterReqBodyWrite); err == nil {\n\t\t\t\t// After the first retry, do exponential backoff with 10% jitter.\n\t\t\t\tif retry == 0 {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tbackoff := float64(uint(1) << (uint(retry) - 1))\n\t\t\t\tbackoff += backoff * (0.1 * mathrand.Float64())\n\t\t\t\tselect {\n\t\t\t\tcase <-time.After(time.Second * time.Duration(backoff)):\n\t\t\t\t\tcontinue\n\t\t\t\tcase <-req.Context().Done():\n\t\t\t\t\treturn nil, req.Context().Err()\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif err != nil {\n\t\t\tt.vlogf(\"RoundTrip failure: %v\", err)\n\t\t\treturn nil, err\n\t\t}\n\t\treturn res, nil\n\t}\n}\n\n// CloseIdleConnections closes any connections which were previously\n// connected from previous requests but are now sitting idle.\n// It does not interrupt any connections currently in use.\nfunc (t *Transport) CloseIdleConnections() {\n\tif cp, ok := t.connPool().(clientConnPoolIdleCloser); ok {\n\t\tcp.closeIdleConnections()\n\t}\n}\n\nvar (\n\terrClientConnClosed    = errors.New(\"http2: client conn is closed\")\n\terrClientConnUnusable  = errors.New(\"http2: client conn not usable\")\n\terrClientConnGotGoAway = errors.New(\"http2: Transport received Server's graceful shutdown GOAWAY\")\n)\n\n// shouldRetryRequest is called by RoundTrip when a request fails to get\n// response headers. It is always called with a non-nil error.\n// It returns either a request to retry (either the same request, or a\n// modified clone), or an error if the request can't be replayed.\nfunc shouldRetryRequest(req *http.Request, err error, afterBodyWrite bool) (*http.Request, error) {\n\tif !canRetryError(err) {\n\t\treturn nil, err\n\t}\n\t// If the Body is nil (or http.NoBody), it's safe to reuse\n\t// this request and its Body.\n\tif req.Body == nil || req.Body == http.NoBody {\n\t\treturn req, nil\n\t}\n\n\t// If the request body can be reset back to its original\n\t// state via the optional req.GetBody, do that.\n\tif req.GetBody != nil {\n\t\t// TODO: consider a req.Body.Close here? or audit that all caller paths do?\n\t\tbody, err := req.GetBody()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tnewReq := *req\n\t\tnewReq.Body = body\n\t\treturn &newReq, nil\n\t}\n\n\t// The Request.Body can't reset back to the beginning, but we\n\t// don't seem to have started to read from it yet, so reuse\n\t// the request directly. The \"afterBodyWrite\" means the\n\t// bodyWrite process has started, which becomes true before\n\t// the first Read.\n\tif !afterBodyWrite {\n\t\treturn req, nil\n\t}\n\n\treturn nil, fmt.Errorf(\"http2: Transport: cannot retry err [%v] after Request.Body was written; define Request.GetBody to avoid this error\", err)\n}\n\nfunc canRetryError(err error) bool {\n\tif err == errClientConnUnusable || err == errClientConnGotGoAway {\n\t\treturn true\n\t}\n\tif se, ok := err.(StreamError); ok {\n\t\treturn se.Code == ErrCodeRefusedStream\n\t}\n\treturn false\n}\n\nfunc (t *Transport) dialClientConn(addr string, singleUse bool) (*ClientConn, error) {\n\thost, _, err := net.SplitHostPort(addr)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\ttconn, err := t.dialTLS()(\"tcp\", addr, t.newTLSConfig(host))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn t.newClientConn(tconn, singleUse)\n}\n\nfunc (t *Transport) newTLSConfig(host string) *tls.Config {\n\tcfg := new(tls.Config)\n\tif t.TLSClientConfig != nil {\n\t\t*cfg = *t.TLSClientConfig.Clone()\n\t}\n\tif !strSliceContains(cfg.NextProtos, NextProtoTLS) {\n\t\tcfg.NextProtos = append([]string{NextProtoTLS}, cfg.NextProtos...)\n\t}\n\tif cfg.ServerName == \"\" {\n\t\tcfg.ServerName = host\n\t}\n\treturn cfg\n}\n\nfunc (t *Transport) dialTLS() func(string, string, *tls.Config) (net.Conn, error) {\n\tif t.DialTLS != nil {\n\t\treturn t.DialTLS\n\t}\n\treturn t.dialTLSDefault\n}\n\nfunc (t *Transport) dialTLSDefault(network, addr string, cfg *tls.Config) (net.Conn, error) {\n\tcn, err := tls.Dial(network, addr, cfg)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif err := cn.Handshake(); err != nil {\n\t\treturn nil, err\n\t}\n\tif !cfg.InsecureSkipVerify {\n\t\tif err := cn.VerifyHostname(cfg.ServerName); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\tstate := cn.ConnectionState()\n\tif p := state.NegotiatedProtocol; p != NextProtoTLS {\n\t\treturn nil, fmt.Errorf(\"http2: unexpected ALPN protocol %q; want %q\", p, NextProtoTLS)\n\t}\n\tif !state.NegotiatedProtocolIsMutual {\n\t\treturn nil, errors.New(\"http2: could not negotiate protocol mutually\")\n\t}\n\treturn cn, nil\n}\n\n// disableKeepAlives reports whether connections should be closed as\n// soon as possible after handling the first request.\nfunc (t *Transport) disableKeepAlives() bool {\n\treturn t.t1 != nil && t.t1.DisableKeepAlives\n}\n\nfunc (t *Transport) expectContinueTimeout() time.Duration {\n\tif t.t1 == nil {\n\t\treturn 0\n\t}\n\treturn t.t1.ExpectContinueTimeout\n}\n\nfunc (t *Transport) NewClientConn(c net.Conn) (*ClientConn, error) {\n\treturn t.newClientConn(c, false)\n}\n\nfunc (t *Transport) newClientConn(c net.Conn, singleUse bool) (*ClientConn, error) {\n\tcc := &ClientConn{\n\t\tt:                     t,\n\t\ttconn:                 c,\n\t\treaderDone:            make(chan struct{}),\n\t\tnextStreamID:          1,\n\t\tmaxFrameSize:          16 << 10,           // spec default\n\t\tinitialWindowSize:     65535,              // spec default\n\t\tmaxConcurrentStreams:  1000,               // \"infinite\", per spec. 1000 seems good enough.\n\t\tpeerMaxHeaderListSize: 0xffffffffffffffff, // \"infinite\", per spec. Use 2^64-1 instead.\n\t\tstreams:               make(map[uint32]*clientStream),\n\t\tsingleUse:             singleUse,\n\t\twantSettingsAck:       true,\n\t\tpings:                 make(map[[8]byte]chan struct{}),\n\t}\n\tif d := t.idleConnTimeout(); d != 0 {\n\t\tcc.idleTimeout = d\n\t\tcc.idleTimer = time.AfterFunc(d, cc.onIdleTimeout)\n\t}\n\tif VerboseLogs {\n\t\tt.vlogf(\"http2: Transport creating client conn %p to %v\", cc, c.RemoteAddr())\n\t}\n\n\tcc.cond = sync.NewCond(&cc.mu)\n\tcc.flow.add(int32(initialWindowSize))\n\n\t// TODO: adjust this writer size to account for frame size +\n\t// MTU + crypto/tls record padding.\n\tcc.bw = bufio.NewWriter(stickyErrWriter{c, &cc.werr})\n\tcc.br = bufio.NewReader(c)\n\tcc.fr = NewFramer(cc.bw, cc.br)\n\tcc.fr.ReadMetaHeaders = hpack.NewDecoder(initialHeaderTableSize, nil)\n\tcc.fr.MaxHeaderListSize = t.maxHeaderListSize()\n\n\t// TODO: SetMaxDynamicTableSize, SetMaxDynamicTableSizeLimit on\n\t// henc in response to SETTINGS frames?\n\tcc.henc = hpack.NewEncoder(&cc.hbuf)\n\n\tif t.AllowHTTP {\n\t\tcc.nextStreamID = 3\n\t}\n\n\tif cs, ok := c.(connectionStater); ok {\n\t\tstate := cs.ConnectionState()\n\t\tcc.tlsState = &state\n\t}\n\n\tinitialSettings := []Setting{\n\t\t{ID: SettingEnablePush, Val: 0},\n\t\t{ID: SettingInitialWindowSize, Val: transportDefaultStreamFlow},\n\t}\n\tif max := t.maxHeaderListSize(); max != 0 {\n\t\tinitialSettings = append(initialSettings, Setting{ID: SettingMaxHeaderListSize, Val: max})\n\t}\n\n\tcc.bw.Write(clientPreface)\n\tcc.fr.WriteSettings(initialSettings...)\n\tcc.fr.WriteWindowUpdate(0, transportDefaultConnFlow)\n\tcc.inflow.add(transportDefaultConnFlow + initialWindowSize)\n\tcc.bw.Flush()\n\tif cc.werr != nil {\n\t\treturn nil, cc.werr\n\t}\n\n\tgo cc.readLoop()\n\treturn cc, nil\n}\n\nfunc (cc *ClientConn) setGoAway(f *GoAwayFrame) {\n\tcc.mu.Lock()\n\tdefer cc.mu.Unlock()\n\n\told := cc.goAway\n\tcc.goAway = f\n\n\t// Merge the previous and current GoAway error frames.\n\tif cc.goAwayDebug == \"\" {\n\t\tcc.goAwayDebug = string(f.DebugData())\n\t}\n\tif old != nil && old.ErrCode != ErrCodeNo {\n\t\tcc.goAway.ErrCode = old.ErrCode\n\t}\n\tlast := f.LastStreamID\n\tfor streamID, cs := range cc.streams {\n\t\tif streamID > last {\n\t\t\tselect {\n\t\t\tcase cs.resc <- resAndError{err: errClientConnGotGoAway}:\n\t\t\tdefault:\n\t\t\t}\n\t\t}\n\t}\n}\n\n// CanTakeNewRequest reports whether the connection can take a new request,\n// meaning it has not been closed or received or sent a GOAWAY.\nfunc (cc *ClientConn) CanTakeNewRequest() bool {\n\tcc.mu.Lock()\n\tdefer cc.mu.Unlock()\n\treturn cc.canTakeNewRequestLocked()\n}\n\n// clientConnIdleState describes the suitability of a client\n// connection to initiate a new RoundTrip request.\ntype clientConnIdleState struct {\n\tcanTakeNewRequest bool\n\tfreshConn         bool // whether it's unused by any previous request\n}\n\nfunc (cc *ClientConn) idleState() clientConnIdleState {\n\tcc.mu.Lock()\n\tdefer cc.mu.Unlock()\n\treturn cc.idleStateLocked()\n}\n\nfunc (cc *ClientConn) idleStateLocked() (st clientConnIdleState) {\n\tif cc.singleUse && cc.nextStreamID > 1 {\n\t\treturn\n\t}\n\tvar maxConcurrentOkay bool\n\tif cc.t.StrictMaxConcurrentStreams {\n\t\t// We'll tell the caller we can take a new request to\n\t\t// prevent the caller from dialing a new TCP\n\t\t// connection, but then we'll block later before\n\t\t// writing it.\n\t\tmaxConcurrentOkay = true\n\t} else {\n\t\tmaxConcurrentOkay = int64(len(cc.streams)+1) < int64(cc.maxConcurrentStreams)\n\t}\n\n\tst.canTakeNewRequest = cc.goAway == nil && !cc.closed && !cc.closing && maxConcurrentOkay &&\n\t\tint64(cc.nextStreamID)+2*int64(cc.pendingRequests) < math.MaxInt32\n\tst.freshConn = cc.nextStreamID == 1 && st.canTakeNewRequest\n\treturn\n}\n\nfunc (cc *ClientConn) canTakeNewRequestLocked() bool {\n\tst := cc.idleStateLocked()\n\treturn st.canTakeNewRequest\n}\n\n// onIdleTimeout is called from a time.AfterFunc goroutine. It will\n// only be called when we're idle, but because we're coming from a new\n// goroutine, there could be a new request coming in at the same time,\n// so this simply calls the synchronized closeIfIdle to shut down this\n// connection. The timer could just call closeIfIdle, but this is more\n// clear.\nfunc (cc *ClientConn) onIdleTimeout() {\n\tcc.closeIfIdle()\n}\n\nfunc (cc *ClientConn) closeIfIdle() {\n\tcc.mu.Lock()\n\tif len(cc.streams) > 0 {\n\t\tcc.mu.Unlock()\n\t\treturn\n\t}\n\tcc.closed = true\n\tnextID := cc.nextStreamID\n\t// TODO: do clients send GOAWAY too? maybe? Just Close:\n\tcc.mu.Unlock()\n\n\tif VerboseLogs {\n\t\tcc.vlogf(\"http2: Transport closing idle conn %p (forSingleUse=%v, maxStream=%v)\", cc, cc.singleUse, nextID-2)\n\t}\n\tcc.tconn.Close()\n}\n\nvar shutdownEnterWaitStateHook = func() {}\n\n// Shutdown gracefully close the client connection, waiting for running streams to complete.\nfunc (cc *ClientConn) Shutdown(ctx context.Context) error {\n\tif err := cc.sendGoAway(); err != nil {\n\t\treturn err\n\t}\n\t// Wait for all in-flight streams to complete or connection to close\n\tdone := make(chan error, 1)\n\tcancelled := false // guarded by cc.mu\n\tgo func() {\n\t\tcc.mu.Lock()\n\t\tdefer cc.mu.Unlock()\n\t\tfor {\n\t\t\tif len(cc.streams) == 0 || cc.closed {\n\t\t\t\tcc.closed = true\n\t\t\t\tdone <- cc.tconn.Close()\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif cancelled {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcc.cond.Wait()\n\t\t}\n\t}()\n\tshutdownEnterWaitStateHook()\n\tselect {\n\tcase err := <-done:\n\t\treturn err\n\tcase <-ctx.Done():\n\t\tcc.mu.Lock()\n\t\t// Free the goroutine above\n\t\tcancelled = true\n\t\tcc.cond.Broadcast()\n\t\tcc.mu.Unlock()\n\t\treturn ctx.Err()\n\t}\n}\n\nfunc (cc *ClientConn) sendGoAway() error {\n\tcc.mu.Lock()\n\tdefer cc.mu.Unlock()\n\tcc.wmu.Lock()\n\tdefer cc.wmu.Unlock()\n\tif cc.closing {\n\t\t// GOAWAY sent already\n\t\treturn nil\n\t}\n\t// Send a graceful shutdown frame to server\n\tmaxStreamID := cc.nextStreamID\n\tif err := cc.fr.WriteGoAway(maxStreamID, ErrCodeNo, nil); err != nil {\n\t\treturn err\n\t}\n\tif err := cc.bw.Flush(); err != nil {\n\t\treturn err\n\t}\n\t// Prevent new requests\n\tcc.closing = true\n\treturn nil\n}\n\n// Close closes the client connection immediately.\n//\n// In-flight requests are interrupted. For a graceful shutdown, use Shutdown instead.\nfunc (cc *ClientConn) Close() error {\n\tcc.mu.Lock()\n\tdefer cc.cond.Broadcast()\n\tdefer cc.mu.Unlock()\n\terr := errors.New(\"http2: client connection force closed via ClientConn.Close\")\n\tfor id, cs := range cc.streams {\n\t\tselect {\n\t\tcase cs.resc <- resAndError{err: err}:\n\t\tdefault:\n\t\t}\n\t\tcs.bufPipe.CloseWithError(err)\n\t\tdelete(cc.streams, id)\n\t}\n\tcc.closed = true\n\treturn cc.tconn.Close()\n}\n\nconst maxAllocFrameSize = 512 << 10\n\n// frameBuffer returns a scratch buffer suitable for writing DATA frames.\n// They're capped at the min of the peer's max frame size or 512KB\n// (kinda arbitrarily), but definitely capped so we don't allocate 4GB\n// bufers.\nfunc (cc *ClientConn) frameScratchBuffer() []byte {\n\tcc.mu.Lock()\n\tsize := cc.maxFrameSize\n\tif size > maxAllocFrameSize {\n\t\tsize = maxAllocFrameSize\n\t}\n\tfor i, buf := range cc.freeBuf {\n\t\tif len(buf) >= int(size) {\n\t\t\tcc.freeBuf[i] = nil\n\t\t\tcc.mu.Unlock()\n\t\t\treturn buf[:size]\n\t\t}\n\t}\n\tcc.mu.Unlock()\n\treturn make([]byte, size)\n}\n\nfunc (cc *ClientConn) putFrameScratchBuffer(buf []byte) {\n\tcc.mu.Lock()\n\tdefer cc.mu.Unlock()\n\tconst maxBufs = 4 // arbitrary; 4 concurrent requests per conn? investigate.\n\tif len(cc.freeBuf) < maxBufs {\n\t\tcc.freeBuf = append(cc.freeBuf, buf)\n\t\treturn\n\t}\n\tfor i, old := range cc.freeBuf {\n\t\tif old == nil {\n\t\t\tcc.freeBuf[i] = buf\n\t\t\treturn\n\t\t}\n\t}\n\t// forget about it.\n}\n\n// errRequestCanceled is a copy of net/http's errRequestCanceled because it's not\n// exported. At least they'll be DeepEqual for h1-vs-h2 comparisons tests.\nvar errRequestCanceled = errors.New(\"net/http: request canceled\")\n\nfunc commaSeparatedTrailers(req *http.Request) (string, error) {\n\tkeys := make([]string, 0, len(req.Trailer))\n\tfor k := range req.Trailer {\n\t\tk = http.CanonicalHeaderKey(k)\n\t\tswitch k {\n\t\tcase \"Transfer-Encoding\", \"Trailer\", \"Content-Length\":\n\t\t\treturn \"\", &badStringError{\"invalid Trailer key\", k}\n\t\t}\n\t\tkeys = append(keys, k)\n\t}\n\tif len(keys) > 0 {\n\t\tsort.Strings(keys)\n\t\treturn strings.Join(keys, \",\"), nil\n\t}\n\treturn \"\", nil\n}\n\nfunc (cc *ClientConn) responseHeaderTimeout() time.Duration {\n\tif cc.t.t1 != nil {\n\t\treturn cc.t.t1.ResponseHeaderTimeout\n\t}\n\t// No way to do this (yet?) with just an http2.Transport. Probably\n\t// no need. Request.Cancel this is the new way. We only need to support\n\t// this for compatibility with the old http.Transport fields when\n\t// we're doing transparent http2.\n\treturn 0\n}\n\n// checkConnHeaders checks whether req has any invalid connection-level headers.\n// per RFC 7540 section 8.1.2.2: Connection-Specific Header Fields.\n// Certain headers are special-cased as okay but not transmitted later.\nfunc checkConnHeaders(req *http.Request) error {\n\tif v := req.Header.Get(\"Upgrade\"); v != \"\" {\n\t\treturn fmt.Errorf(\"http2: invalid Upgrade request header: %q\", req.Header[\"Upgrade\"])\n\t}\n\tif vv := req.Header[\"Transfer-Encoding\"]; len(vv) > 0 && (len(vv) > 1 || vv[0] != \"\" && vv[0] != \"chunked\") {\n\t\treturn fmt.Errorf(\"http2: invalid Transfer-Encoding request header: %q\", vv)\n\t}\n\tif vv := req.Header[\"Connection\"]; len(vv) > 0 && (len(vv) > 1 || vv[0] != \"\" && !strings.EqualFold(vv[0], \"close\") && !strings.EqualFold(vv[0], \"keep-alive\")) {\n\t\treturn fmt.Errorf(\"http2: invalid Connection request header: %q\", vv)\n\t}\n\treturn nil\n}\n\n// actualContentLength returns a sanitized version of\n// req.ContentLength, where 0 actually means zero (not unknown) and -1\n// means unknown.\nfunc actualContentLength(req *http.Request) int64 {\n\tif req.Body == nil || req.Body == http.NoBody {\n\t\treturn 0\n\t}\n\tif req.ContentLength != 0 {\n\t\treturn req.ContentLength\n\t}\n\treturn -1\n}\n\nfunc (cc *ClientConn) RoundTrip(req *http.Request) (*http.Response, error) {\n\tresp, _, err := cc.roundTrip(req)\n\treturn resp, err\n}\n\nfunc (cc *ClientConn) roundTrip(req *http.Request) (res *http.Response, gotErrAfterReqBodyWrite bool, err error) {\n\tif err := checkConnHeaders(req); err != nil {\n\t\treturn nil, false, err\n\t}\n\tif cc.idleTimer != nil {\n\t\tcc.idleTimer.Stop()\n\t}\n\n\ttrailers, err := commaSeparatedTrailers(req)\n\tif err != nil {\n\t\treturn nil, false, err\n\t}\n\thasTrailers := trailers != \"\"\n\n\tcc.mu.Lock()\n\tif err := cc.awaitOpenSlotForRequest(req); err != nil {\n\t\tcc.mu.Unlock()\n\t\treturn nil, false, err\n\t}\n\n\tbody := req.Body\n\tcontentLen := actualContentLength(req)\n\thasBody := contentLen != 0\n\n\t// TODO(bradfitz): this is a copy of the logic in net/http. Unify somewhere?\n\tvar requestedGzip bool\n\tif !cc.t.disableCompression() &&\n\t\treq.Header.Get(\"Accept-Encoding\") == \"\" &&\n\t\treq.Header.Get(\"Range\") == \"\" &&\n\t\treq.Method != \"HEAD\" {\n\t\t// Request gzip only, not deflate. Deflate is ambiguous and\n\t\t// not as universally supported anyway.\n\t\t// See: http://www.gzip.org/zlib/zlib_faq.html#faq38\n\t\t//\n\t\t// Note that we don't request this for HEAD requests,\n\t\t// due to a bug in nginx:\n\t\t//   http://trac.nginx.org/nginx/ticket/358\n\t\t//   https://golang.org/issue/5522\n\t\t//\n\t\t// We don't request gzip if the request is for a range, since\n\t\t// auto-decoding a portion of a gzipped document will just fail\n\t\t// anyway. See https://golang.org/issue/8923\n\t\trequestedGzip = true\n\t}\n\n\t// we send: HEADERS{1}, CONTINUATION{0,} + DATA{0,} (DATA is\n\t// sent by writeRequestBody below, along with any Trailers,\n\t// again in form HEADERS{1}, CONTINUATION{0,})\n\thdrs, err := cc.encodeHeaders(req, requestedGzip, trailers, contentLen)\n\tif err != nil {\n\t\tcc.mu.Unlock()\n\t\treturn nil, false, err\n\t}\n\n\tcs := cc.newStream()\n\tcs.req = req\n\tcs.trace = httptrace.ContextClientTrace(req.Context())\n\tcs.requestedGzip = requestedGzip\n\tbodyWriter := cc.t.getBodyWriterState(cs, body)\n\tcs.on100 = bodyWriter.on100\n\n\tcc.wmu.Lock()\n\tendStream := !hasBody && !hasTrailers\n\twerr := cc.writeHeaders(cs.ID, endStream, int(cc.maxFrameSize), hdrs)\n\tcc.wmu.Unlock()\n\ttraceWroteHeaders(cs.trace)\n\tcc.mu.Unlock()\n\n\tif werr != nil {\n\t\tif hasBody {\n\t\t\treq.Body.Close() // per RoundTripper contract\n\t\t\tbodyWriter.cancel()\n\t\t}\n\t\tcc.forgetStreamID(cs.ID)\n\t\t// Don't bother sending a RST_STREAM (our write already failed;\n\t\t// no need to keep writing)\n\t\ttraceWroteRequest(cs.trace, werr)\n\t\treturn nil, false, werr\n\t}\n\n\tvar respHeaderTimer <-chan time.Time\n\tif hasBody {\n\t\tbodyWriter.scheduleBodyWrite()\n\t} else {\n\t\ttraceWroteRequest(cs.trace, nil)\n\t\tif d := cc.responseHeaderTimeout(); d != 0 {\n\t\t\ttimer := time.NewTimer(d)\n\t\t\tdefer timer.Stop()\n\t\t\trespHeaderTimer = timer.C\n\t\t}\n\t}\n\n\treadLoopResCh := cs.resc\n\tbodyWritten := false\n\tctx := req.Context()\n\n\thandleReadLoopResponse := func(re resAndError) (*http.Response, bool, error) {\n\t\tres := re.res\n\t\tif re.err != nil || res.StatusCode > 299 {\n\t\t\t// On error or status code 3xx, 4xx, 5xx, etc abort any\n\t\t\t// ongoing write, assuming that the server doesn't care\n\t\t\t// about our request body. If the server replied with 1xx or\n\t\t\t// 2xx, however, then assume the server DOES potentially\n\t\t\t// want our body (e.g. full-duplex streaming:\n\t\t\t// golang.org/issue/13444). If it turns out the server\n\t\t\t// doesn't, they'll RST_STREAM us soon enough. This is a\n\t\t\t// heuristic to avoid adding knobs to Transport. Hopefully\n\t\t\t// we can keep it.\n\t\t\tbodyWriter.cancel()\n\t\t\tcs.abortRequestBodyWrite(errStopReqBodyWrite)\n\t\t}\n\t\tif re.err != nil {\n\t\t\tcc.forgetStreamID(cs.ID)\n\t\t\treturn nil, cs.getStartedWrite(), re.err\n\t\t}\n\t\tres.Request = req\n\t\tres.TLS = cc.tlsState\n\t\treturn res, false, nil\n\t}\n\n\tfor {\n\t\tselect {\n\t\tcase re := <-readLoopResCh:\n\t\t\treturn handleReadLoopResponse(re)\n\t\tcase <-respHeaderTimer:\n\t\t\tif !hasBody || bodyWritten {\n\t\t\t\tcc.writeStreamReset(cs.ID, ErrCodeCancel, nil)\n\t\t\t} else {\n\t\t\t\tbodyWriter.cancel()\n\t\t\t\tcs.abortRequestBodyWrite(errStopReqBodyWriteAndCancel)\n\t\t\t}\n\t\t\tcc.forgetStreamID(cs.ID)\n\t\t\treturn nil, cs.getStartedWrite(), errTimeout\n\t\tcase <-ctx.Done():\n\t\t\tif !hasBody || bodyWritten {\n\t\t\t\tcc.writeStreamReset(cs.ID, ErrCodeCancel, nil)\n\t\t\t} else {\n\t\t\t\tbodyWriter.cancel()\n\t\t\t\tcs.abortRequestBodyWrite(errStopReqBodyWriteAndCancel)\n\t\t\t}\n\t\t\tcc.forgetStreamID(cs.ID)\n\t\t\treturn nil, cs.getStartedWrite(), ctx.Err()\n\t\tcase <-req.Cancel:\n\t\t\tif !hasBody || bodyWritten {\n\t\t\t\tcc.writeStreamReset(cs.ID, ErrCodeCancel, nil)\n\t\t\t} else {\n\t\t\t\tbodyWriter.cancel()\n\t\t\t\tcs.abortRequestBodyWrite(errStopReqBodyWriteAndCancel)\n\t\t\t}\n\t\t\tcc.forgetStreamID(cs.ID)\n\t\t\treturn nil, cs.getStartedWrite(), errRequestCanceled\n\t\tcase <-cs.peerReset:\n\t\t\t// processResetStream already removed the\n\t\t\t// stream from the streams map; no need for\n\t\t\t// forgetStreamID.\n\t\t\treturn nil, cs.getStartedWrite(), cs.resetErr\n\t\tcase err := <-bodyWriter.resc:\n\t\t\t// Prefer the read loop's response, if available. Issue 16102.\n\t\t\tselect {\n\t\t\tcase re := <-readLoopResCh:\n\t\t\t\treturn handleReadLoopResponse(re)\n\t\t\tdefault:\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\tcc.forgetStreamID(cs.ID)\n\t\t\t\treturn nil, cs.getStartedWrite(), err\n\t\t\t}\n\t\t\tbodyWritten = true\n\t\t\tif d := cc.responseHeaderTimeout(); d != 0 {\n\t\t\t\ttimer := time.NewTimer(d)\n\t\t\t\tdefer timer.Stop()\n\t\t\t\trespHeaderTimer = timer.C\n\t\t\t}\n\t\t}\n\t}\n}\n\n// awaitOpenSlotForRequest waits until len(streams) < maxConcurrentStreams.\n// Must hold cc.mu.\nfunc (cc *ClientConn) awaitOpenSlotForRequest(req *http.Request) error {\n\tvar waitingForConn chan struct{}\n\tvar waitingForConnErr error // guarded by cc.mu\n\tfor {\n\t\tcc.lastActive = time.Now()\n\t\tif cc.closed || !cc.canTakeNewRequestLocked() {\n\t\t\tif waitingForConn != nil {\n\t\t\t\tclose(waitingForConn)\n\t\t\t}\n\t\t\treturn errClientConnUnusable\n\t\t}\n\t\tif int64(len(cc.streams))+1 <= int64(cc.maxConcurrentStreams) {\n\t\t\tif waitingForConn != nil {\n\t\t\t\tclose(waitingForConn)\n\t\t\t}\n\t\t\treturn nil\n\t\t}\n\t\t// Unfortunately, we cannot wait on a condition variable and channel at\n\t\t// the same time, so instead, we spin up a goroutine to check if the\n\t\t// request is canceled while we wait for a slot to open in the connection.\n\t\tif waitingForConn == nil {\n\t\t\twaitingForConn = make(chan struct{})\n\t\t\tgo func() {\n\t\t\t\tif err := awaitRequestCancel(req, waitingForConn); err != nil {\n\t\t\t\t\tcc.mu.Lock()\n\t\t\t\t\twaitingForConnErr = err\n\t\t\t\t\tcc.cond.Broadcast()\n\t\t\t\t\tcc.mu.Unlock()\n\t\t\t\t}\n\t\t\t}()\n\t\t}\n\t\tcc.pendingRequests++\n\t\tcc.cond.Wait()\n\t\tcc.pendingRequests--\n\t\tif waitingForConnErr != nil {\n\t\t\treturn waitingForConnErr\n\t\t}\n\t}\n}\n\n// requires cc.wmu be held\nfunc (cc *ClientConn) writeHeaders(streamID uint32, endStream bool, maxFrameSize int, hdrs []byte) error {\n\tfirst := true // first frame written (HEADERS is first, then CONTINUATION)\n\tfor len(hdrs) > 0 && cc.werr == nil {\n\t\tchunk := hdrs\n\t\tif len(chunk) > maxFrameSize {\n\t\t\tchunk = chunk[:maxFrameSize]\n\t\t}\n\t\thdrs = hdrs[len(chunk):]\n\t\tendHeaders := len(hdrs) == 0\n\t\tif first {\n\t\t\tcc.fr.WriteHeaders(HeadersFrameParam{\n\t\t\t\tStreamID:      streamID,\n\t\t\t\tBlockFragment: chunk,\n\t\t\t\tEndStream:     endStream,\n\t\t\t\tEndHeaders:    endHeaders,\n\t\t\t})\n\t\t\tfirst = false\n\t\t} else {\n\t\t\tcc.fr.WriteContinuation(streamID, endHeaders, chunk)\n\t\t}\n\t}\n\t// TODO(bradfitz): this Flush could potentially block (as\n\t// could the WriteHeaders call(s) above), which means they\n\t// wouldn't respond to Request.Cancel being readable. That's\n\t// rare, but this should probably be in a goroutine.\n\tcc.bw.Flush()\n\treturn cc.werr\n}\n\n// internal error values; they don't escape to callers\nvar (\n\t// abort request body write; don't send cancel\n\terrStopReqBodyWrite = errors.New(\"http2: aborting request body write\")\n\n\t// abort request body write, but send stream reset of cancel.\n\terrStopReqBodyWriteAndCancel = errors.New(\"http2: canceling request\")\n)\n\nfunc (cs *clientStream) writeRequestBody(body io.Reader, bodyCloser io.Closer) (err error) {\n\tcc := cs.cc\n\tsentEnd := false // whether we sent the final DATA frame w/ END_STREAM\n\tbuf := cc.frameScratchBuffer()\n\tdefer cc.putFrameScratchBuffer(buf)\n\n\tdefer func() {\n\t\ttraceWroteRequest(cs.trace, err)\n\t\t// TODO: write h12Compare test showing whether\n\t\t// Request.Body is closed by the Transport,\n\t\t// and in multiple cases: server replies <=299 and >299\n\t\t// while still writing request body\n\t\tcerr := bodyCloser.Close()\n\t\tif err == nil {\n\t\t\terr = cerr\n\t\t}\n\t}()\n\n\treq := cs.req\n\thasTrailers := req.Trailer != nil\n\n\tvar sawEOF bool\n\tfor !sawEOF {\n\t\tn, err := body.Read(buf)\n\t\tif err == io.EOF {\n\t\t\tsawEOF = true\n\t\t\terr = nil\n\t\t} else if err != nil {\n\t\t\tcc.writeStreamReset(cs.ID, ErrCodeCancel, err)\n\t\t\treturn err\n\t\t}\n\n\t\tremain := buf[:n]\n\t\tfor len(remain) > 0 && err == nil {\n\t\t\tvar allowed int32\n\t\t\tallowed, err = cs.awaitFlowControl(len(remain))\n\t\t\tswitch {\n\t\t\tcase err == errStopReqBodyWrite:\n\t\t\t\treturn err\n\t\t\tcase err == errStopReqBodyWriteAndCancel:\n\t\t\t\tcc.writeStreamReset(cs.ID, ErrCodeCancel, nil)\n\t\t\t\treturn err\n\t\t\tcase err != nil:\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tcc.wmu.Lock()\n\t\t\tdata := remain[:allowed]\n\t\t\tremain = remain[allowed:]\n\t\t\tsentEnd = sawEOF && len(remain) == 0 && !hasTrailers\n\t\t\terr = cc.fr.WriteData(cs.ID, sentEnd, data)\n\t\t\tif err == nil {\n\t\t\t\t// TODO(bradfitz): this flush is for latency, not bandwidth.\n\t\t\t\t// Most requests won't need this. Make this opt-in or\n\t\t\t\t// opt-out?  Use some heuristic on the body type? Nagel-like\n\t\t\t\t// timers?  Based on 'n'? Only last chunk of this for loop,\n\t\t\t\t// unless flow control tokens are low? For now, always.\n\t\t\t\t// If we change this, see comment below.\n\t\t\t\terr = cc.bw.Flush()\n\t\t\t}\n\t\t\tcc.wmu.Unlock()\n\t\t}\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tif sentEnd {\n\t\t// Already sent END_STREAM (which implies we have no\n\t\t// trailers) and flushed, because currently all\n\t\t// WriteData frames above get a flush. So we're done.\n\t\treturn nil\n\t}\n\n\tvar trls []byte\n\tif hasTrailers {\n\t\tcc.mu.Lock()\n\t\ttrls, err = cc.encodeTrailers(req)\n\t\tcc.mu.Unlock()\n\t\tif err != nil {\n\t\t\tcc.writeStreamReset(cs.ID, ErrCodeInternal, err)\n\t\t\tcc.forgetStreamID(cs.ID)\n\t\t\treturn err\n\t\t}\n\t}\n\n\tcc.mu.Lock()\n\tmaxFrameSize := int(cc.maxFrameSize)\n\tcc.mu.Unlock()\n\n\tcc.wmu.Lock()\n\tdefer cc.wmu.Unlock()\n\n\t// Two ways to send END_STREAM: either with trailers, or\n\t// with an empty DATA frame.\n\tif len(trls) > 0 {\n\t\terr = cc.writeHeaders(cs.ID, true, maxFrameSize, trls)\n\t} else {\n\t\terr = cc.fr.WriteData(cs.ID, true, nil)\n\t}\n\tif ferr := cc.bw.Flush(); ferr != nil && err == nil {\n\t\terr = ferr\n\t}\n\treturn err\n}\n\n// awaitFlowControl waits for [1, min(maxBytes, cc.cs.maxFrameSize)] flow\n// control tokens from the server.\n// It returns either the non-zero number of tokens taken or an error\n// if the stream is dead.\nfunc (cs *clientStream) awaitFlowControl(maxBytes int) (taken int32, err error) {\n\tcc := cs.cc\n\tcc.mu.Lock()\n\tdefer cc.mu.Unlock()\n\tfor {\n\t\tif cc.closed {\n\t\t\treturn 0, errClientConnClosed\n\t\t}\n\t\tif cs.stopReqBody != nil {\n\t\t\treturn 0, cs.stopReqBody\n\t\t}\n\t\tif err := cs.checkResetOrDone(); err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\tif a := cs.flow.available(); a > 0 {\n\t\t\ttake := a\n\t\t\tif int(take) > maxBytes {\n\n\t\t\t\ttake = int32(maxBytes) // can't truncate int; take is int32\n\t\t\t}\n\t\t\tif take > int32(cc.maxFrameSize) {\n\t\t\t\ttake = int32(cc.maxFrameSize)\n\t\t\t}\n\t\t\tcs.flow.take(take)\n\t\t\treturn take, nil\n\t\t}\n\t\tcc.cond.Wait()\n\t}\n}\n\ntype badStringError struct {\n\twhat string\n\tstr  string\n}\n\nfunc (e *badStringError) Error() string { return fmt.Sprintf(\"%s %q\", e.what, e.str) }\n\n// requires cc.mu be held.\nfunc (cc *ClientConn) encodeHeaders(req *http.Request, addGzipHeader bool, trailers string, contentLength int64) ([]byte, error) {\n\tcc.hbuf.Reset()\n\n\thost := req.Host\n\tif host == \"\" {\n\t\thost = req.URL.Host\n\t}\n\thost, err := httpguts.PunycodeHostPort(host)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar path string\n\tif req.Method != \"CONNECT\" {\n\t\tpath = req.URL.RequestURI()\n\t\tif !validPseudoPath(path) {\n\t\t\torig := path\n\t\t\tpath = strings.TrimPrefix(path, req.URL.Scheme+\"://\"+host)\n\t\t\tif !validPseudoPath(path) {\n\t\t\t\tif req.URL.Opaque != \"\" {\n\t\t\t\t\treturn nil, fmt.Errorf(\"invalid request :path %q from URL.Opaque = %q\", orig, req.URL.Opaque)\n\t\t\t\t} else {\n\t\t\t\t\treturn nil, fmt.Errorf(\"invalid request :path %q\", orig)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check for any invalid headers and return an error before we\n\t// potentially pollute our hpack state. (We want to be able to\n\t// continue to reuse the hpack encoder for future requests)\n\tfor k, vv := range req.Header {\n\t\tif !httpguts.ValidHeaderFieldName(k) {\n\t\t\treturn nil, fmt.Errorf(\"invalid HTTP header name %q\", k)\n\t\t}\n\t\tfor _, v := range vv {\n\t\t\tif !httpguts.ValidHeaderFieldValue(v) {\n\t\t\t\treturn nil, fmt.Errorf(\"invalid HTTP header value %q for header %q\", v, k)\n\t\t\t}\n\t\t}\n\t}\n\n\tenumerateHeaders := func(f func(name, value string)) {\n\t\t// 8.1.2.3 Request Pseudo-Header Fields\n\t\t// The :path pseudo-header field includes the path and query parts of the\n\t\t// target URI (the path-absolute production and optionally a '?' character\n\t\t// followed by the query production (see Sections 3.3 and 3.4 of\n\t\t// [RFC3986]).\n\t\tf(\":authority\", host)\n\t\tm := req.Method\n\t\tif m == \"\" {\n\t\t\tm = http.MethodGet\n\t\t}\n\t\tf(\":method\", m)\n\t\tif req.Method != \"CONNECT\" {\n\t\t\tf(\":path\", path)\n\t\t\tf(\":scheme\", req.URL.Scheme)\n\t\t}\n\t\tif trailers != \"\" {\n\t\t\tf(\"trailer\", trailers)\n\t\t}\n\n\t\tvar didUA bool\n\t\tfor k, vv := range req.Header {\n\t\t\tif strings.EqualFold(k, \"host\") || strings.EqualFold(k, \"content-length\") {\n\t\t\t\t// Host is :authority, already sent.\n\t\t\t\t// Content-Length is automatic, set below.\n\t\t\t\tcontinue\n\t\t\t} else if strings.EqualFold(k, \"connection\") || strings.EqualFold(k, \"proxy-connection\") ||\n\t\t\t\tstrings.EqualFold(k, \"transfer-encoding\") || strings.EqualFold(k, \"upgrade\") ||\n\t\t\t\tstrings.EqualFold(k, \"keep-alive\") {\n\t\t\t\t// Per 8.1.2.2 Connection-Specific Header\n\t\t\t\t// Fields, don't send connection-specific\n\t\t\t\t// fields. We have already checked if any\n\t\t\t\t// are error-worthy so just ignore the rest.\n\t\t\t\tcontinue\n\t\t\t} else if strings.EqualFold(k, \"user-agent\") {\n\t\t\t\t// Match Go's http1 behavior: at most one\n\t\t\t\t// User-Agent. If set to nil or empty string,\n\t\t\t\t// then omit it. Otherwise if not mentioned,\n\t\t\t\t// include the default (below).\n\t\t\t\tdidUA = true\n\t\t\t\tif len(vv) < 1 {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tvv = vv[:1]\n\t\t\t\tif vv[0] == \"\" {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor _, v := range vv {\n\t\t\t\tf(k, v)\n\t\t\t}\n\t\t}\n\t\tif shouldSendReqContentLength(req.Method, contentLength) {\n\t\t\tf(\"content-length\", strconv.FormatInt(contentLength, 10))\n\t\t}\n\t\tif addGzipHeader {\n\t\t\tf(\"accept-encoding\", \"gzip\")\n\t\t}\n\t\tif !didUA {\n\t\t\tf(\"user-agent\", defaultUserAgent)\n\t\t}\n\t}\n\n\t// Do a first pass over the headers counting bytes to ensure\n\t// we don't exceed cc.peerMaxHeaderListSize. This is done as a\n\t// separate pass before encoding the headers to prevent\n\t// modifying the hpack state.\n\thlSize := uint64(0)\n\tenumerateHeaders(func(name, value string) {\n\t\thf := hpack.HeaderField{Name: name, Value: value}\n\t\thlSize += uint64(hf.Size())\n\t})\n\n\tif hlSize > cc.peerMaxHeaderListSize {\n\t\treturn nil, errRequestHeaderListSize\n\t}\n\n\ttrace := httptrace.ContextClientTrace(req.Context())\n\ttraceHeaders := traceHasWroteHeaderField(trace)\n\n\t// Header list size is ok. Write the headers.\n\tenumerateHeaders(func(name, value string) {\n\t\tname = strings.ToLower(name)\n\t\tcc.writeHeader(name, value)\n\t\tif traceHeaders {\n\t\t\ttraceWroteHeaderField(trace, name, value)\n\t\t}\n\t})\n\n\treturn cc.hbuf.Bytes(), nil\n}\n\n// shouldSendReqContentLength reports whether the http2.Transport should send\n// a \"content-length\" request header. This logic is basically a copy of the net/http\n// transferWriter.shouldSendContentLength.\n// The contentLength is the corrected contentLength (so 0 means actually 0, not unknown).\n// -1 means unknown.\nfunc shouldSendReqContentLength(method string, contentLength int64) bool {\n\tif contentLength > 0 {\n\t\treturn true\n\t}\n\tif contentLength < 0 {\n\t\treturn false\n\t}\n\t// For zero bodies, whether we send a content-length depends on the method.\n\t// It also kinda doesn't matter for http2 either way, with END_STREAM.\n\tswitch method {\n\tcase \"POST\", \"PUT\", \"PATCH\":\n\t\treturn true\n\tdefault:\n\t\treturn false\n\t}\n}\n\n// requires cc.mu be held.\nfunc (cc *ClientConn) encodeTrailers(req *http.Request) ([]byte, error) {\n\tcc.hbuf.Reset()\n\n\thlSize := uint64(0)\n\tfor k, vv := range req.Trailer {\n\t\tfor _, v := range vv {\n\t\t\thf := hpack.HeaderField{Name: k, Value: v}\n\t\t\thlSize += uint64(hf.Size())\n\t\t}\n\t}\n\tif hlSize > cc.peerMaxHeaderListSize {\n\t\treturn nil, errRequestHeaderListSize\n\t}\n\n\tfor k, vv := range req.Trailer {\n\t\t// Transfer-Encoding, etc.. have already been filtered at the\n\t\t// start of RoundTrip\n\t\tlowKey := strings.ToLower(k)\n\t\tfor _, v := range vv {\n\t\t\tcc.writeHeader(lowKey, v)\n\t\t}\n\t}\n\treturn cc.hbuf.Bytes(), nil\n}\n\nfunc (cc *ClientConn) writeHeader(name, value string) {\n\tif VerboseLogs {\n\t\tlog.Printf(\"http2: Transport encoding header %q = %q\", name, value)\n\t}\n\tcc.henc.WriteField(hpack.HeaderField{Name: name, Value: value})\n}\n\ntype resAndError struct {\n\tres *http.Response\n\terr error\n}\n\n// requires cc.mu be held.\nfunc (cc *ClientConn) newStream() *clientStream {\n\tcs := &clientStream{\n\t\tcc:        cc,\n\t\tID:        cc.nextStreamID,\n\t\tresc:      make(chan resAndError, 1),\n\t\tpeerReset: make(chan struct{}),\n\t\tdone:      make(chan struct{}),\n\t}\n\tcs.flow.add(int32(cc.initialWindowSize))\n\tcs.flow.setConnFlow(&cc.flow)\n\tcs.inflow.add(transportDefaultStreamFlow)\n\tcs.inflow.setConnFlow(&cc.inflow)\n\tcc.nextStreamID += 2\n\tcc.streams[cs.ID] = cs\n\treturn cs\n}\n\nfunc (cc *ClientConn) forgetStreamID(id uint32) {\n\tcc.streamByID(id, true)\n}\n\nfunc (cc *ClientConn) streamByID(id uint32, andRemove bool) *clientStream {\n\tcc.mu.Lock()\n\tdefer cc.mu.Unlock()\n\tcs := cc.streams[id]\n\tif andRemove && cs != nil && !cc.closed {\n\t\tcc.lastActive = time.Now()\n\t\tdelete(cc.streams, id)\n\t\tif len(cc.streams) == 0 && cc.idleTimer != nil {\n\t\t\tcc.idleTimer.Reset(cc.idleTimeout)\n\t\t}\n\t\tclose(cs.done)\n\t\t// Wake up checkResetOrDone via clientStream.awaitFlowControl and\n\t\t// wake up RoundTrip if there is a pending request.\n\t\tcc.cond.Broadcast()\n\t}\n\treturn cs\n}\n\n// clientConnReadLoop is the state owned by the clientConn's frame-reading readLoop.\ntype clientConnReadLoop struct {\n\tcc            *ClientConn\n\tcloseWhenIdle bool\n}\n\n// readLoop runs in its own goroutine and reads and dispatches frames.\nfunc (cc *ClientConn) readLoop() {\n\trl := &clientConnReadLoop{cc: cc}\n\tdefer rl.cleanup()\n\tcc.readerErr = rl.run()\n\tif ce, ok := cc.readerErr.(ConnectionError); ok {\n\t\tcc.wmu.Lock()\n\t\tcc.fr.WriteGoAway(0, ErrCode(ce), nil)\n\t\tcc.wmu.Unlock()\n\t}\n}\n\n// GoAwayError is returned by the Transport when the server closes the\n// TCP connection after sending a GOAWAY frame.\ntype GoAwayError struct {\n\tLastStreamID uint32\n\tErrCode      ErrCode\n\tDebugData    string\n}\n\nfunc (e GoAwayError) Error() string {\n\treturn fmt.Sprintf(\"http2: server sent GOAWAY and closed the connection; LastStreamID=%v, ErrCode=%v, debug=%q\",\n\t\te.LastStreamID, e.ErrCode, e.DebugData)\n}\n\nfunc isEOFOrNetReadError(err error) bool {\n\tif err == io.EOF {\n\t\treturn true\n\t}\n\tne, ok := err.(*net.OpError)\n\treturn ok && ne.Op == \"read\"\n}\n\nfunc (rl *clientConnReadLoop) cleanup() {\n\tcc := rl.cc\n\tdefer cc.tconn.Close()\n\tdefer cc.t.connPool().MarkDead(cc)\n\tdefer close(cc.readerDone)\n\n\tif cc.idleTimer != nil {\n\t\tcc.idleTimer.Stop()\n\t}\n\n\t// Close any response bodies if the server closes prematurely.\n\t// TODO: also do this if we've written the headers but not\n\t// gotten a response yet.\n\terr := cc.readerErr\n\tcc.mu.Lock()\n\tif cc.goAway != nil && isEOFOrNetReadError(err) {\n\t\terr = GoAwayError{\n\t\t\tLastStreamID: cc.goAway.LastStreamID,\n\t\t\tErrCode:      cc.goAway.ErrCode,\n\t\t\tDebugData:    cc.goAwayDebug,\n\t\t}\n\t} else if err == io.EOF {\n\t\terr = io.ErrUnexpectedEOF\n\t}\n\tfor _, cs := range cc.streams {\n\t\tcs.bufPipe.CloseWithError(err) // no-op if already closed\n\t\tselect {\n\t\tcase cs.resc <- resAndError{err: err}:\n\t\tdefault:\n\t\t}\n\t\tclose(cs.done)\n\t}\n\tcc.closed = true\n\tcc.cond.Broadcast()\n\tcc.mu.Unlock()\n}\n\nfunc (rl *clientConnReadLoop) run() error {\n\tcc := rl.cc\n\trl.closeWhenIdle = cc.t.disableKeepAlives() || cc.singleUse\n\tgotReply := false // ever saw a HEADERS reply\n\tgotSettings := false\n\tfor {\n\t\tf, err := cc.fr.ReadFrame()\n\t\tif err != nil {\n\t\t\tcc.vlogf(\"http2: Transport readFrame error on conn %p: (%T) %v\", cc, err, err)\n\t\t}\n\t\tif se, ok := err.(StreamError); ok {\n\t\t\tif cs := cc.streamByID(se.StreamID, false); cs != nil {\n\t\t\t\tcs.cc.writeStreamReset(cs.ID, se.Code, err)\n\t\t\t\tcs.cc.forgetStreamID(cs.ID)\n\t\t\t\tif se.Cause == nil {\n\t\t\t\t\tse.Cause = cc.fr.errDetail\n\t\t\t\t}\n\t\t\t\trl.endStreamError(cs, se)\n\t\t\t}\n\t\t\tcontinue\n\t\t} else if err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif VerboseLogs {\n\t\t\tcc.vlogf(\"http2: Transport received %s\", summarizeFrame(f))\n\t\t}\n\t\tif !gotSettings {\n\t\t\tif _, ok := f.(*SettingsFrame); !ok {\n\t\t\t\tcc.logf(\"protocol error: received %T before a SETTINGS frame\", f)\n\t\t\t\treturn ConnectionError(ErrCodeProtocol)\n\t\t\t}\n\t\t\tgotSettings = true\n\t\t}\n\t\tmaybeIdle := false // whether frame might transition us to idle\n\n\t\tswitch f := f.(type) {\n\t\tcase *MetaHeadersFrame:\n\t\t\terr = rl.processHeaders(f)\n\t\t\tmaybeIdle = true\n\t\t\tgotReply = true\n\t\tcase *DataFrame:\n\t\t\terr = rl.processData(f)\n\t\t\tmaybeIdle = true\n\t\tcase *GoAwayFrame:\n\t\t\terr = rl.processGoAway(f)\n\t\t\tmaybeIdle = true\n\t\tcase *RSTStreamFrame:\n\t\t\terr = rl.processResetStream(f)\n\t\t\tmaybeIdle = true\n\t\tcase *SettingsFrame:\n\t\t\terr = rl.processSettings(f)\n\t\tcase *PushPromiseFrame:\n\t\t\terr = rl.processPushPromise(f)\n\t\tcase *WindowUpdateFrame:\n\t\t\terr = rl.processWindowUpdate(f)\n\t\tcase *PingFrame:\n\t\t\terr = rl.processPing(f)\n\t\tdefault:\n\t\t\tcc.logf(\"Transport: unhandled response frame type %T\", f)\n\t\t}\n\t\tif err != nil {\n\t\t\tif VerboseLogs {\n\t\t\t\tcc.vlogf(\"http2: Transport conn %p received error from processing frame %v: %v\", cc, summarizeFrame(f), err)\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\t\tif rl.closeWhenIdle && gotReply && maybeIdle {\n\t\t\tcc.closeIfIdle()\n\t\t}\n\t}\n}\n\nfunc (rl *clientConnReadLoop) processHeaders(f *MetaHeadersFrame) error {\n\tcc := rl.cc\n\tcs := cc.streamByID(f.StreamID, false)\n\tif cs == nil {\n\t\t// We'd get here if we canceled a request while the\n\t\t// server had its response still in flight. So if this\n\t\t// was just something we canceled, ignore it.\n\t\treturn nil\n\t}\n\tif f.StreamEnded() {\n\t\t// Issue 20521: If the stream has ended, streamByID() causes\n\t\t// clientStream.done to be closed, which causes the request's bodyWriter\n\t\t// to be closed with an errStreamClosed, which may be received by\n\t\t// clientConn.RoundTrip before the result of processing these headers.\n\t\t// Deferring stream closure allows the header processing to occur first.\n\t\t// clientConn.RoundTrip may still receive the bodyWriter error first, but\n\t\t// the fix for issue 16102 prioritises any response.\n\t\t//\n\t\t// Issue 22413: If there is no request body, we should close the\n\t\t// stream before writing to cs.resc so that the stream is closed\n\t\t// immediately once RoundTrip returns.\n\t\tif cs.req.Body != nil {\n\t\t\tdefer cc.forgetStreamID(f.StreamID)\n\t\t} else {\n\t\t\tcc.forgetStreamID(f.StreamID)\n\t\t}\n\t}\n\tif !cs.firstByte {\n\t\tif cs.trace != nil {\n\t\t\t// TODO(bradfitz): move first response byte earlier,\n\t\t\t// when we first read the 9 byte header, not waiting\n\t\t\t// until all the HEADERS+CONTINUATION frames have been\n\t\t\t// merged. This works for now.\n\t\t\ttraceFirstResponseByte(cs.trace)\n\t\t}\n\t\tcs.firstByte = true\n\t}\n\tif !cs.pastHeaders {\n\t\tcs.pastHeaders = true\n\t} else {\n\t\treturn rl.processTrailers(cs, f)\n\t}\n\n\tres, err := rl.handleResponse(cs, f)\n\tif err != nil {\n\t\tif _, ok := err.(ConnectionError); ok {\n\t\t\treturn err\n\t\t}\n\t\t// Any other error type is a stream error.\n\t\tcs.cc.writeStreamReset(f.StreamID, ErrCodeProtocol, err)\n\t\tcc.forgetStreamID(cs.ID)\n\t\tcs.resc <- resAndError{err: err}\n\t\treturn nil // return nil from process* funcs to keep conn alive\n\t}\n\tif res == nil {\n\t\t// (nil, nil) special case. See handleResponse docs.\n\t\treturn nil\n\t}\n\tcs.resTrailer = &res.Trailer\n\tcs.resc <- resAndError{res: res}\n\treturn nil\n}\n\n// may return error types nil, or ConnectionError. Any other error value\n// is a StreamError of type ErrCodeProtocol. The returned error in that case\n// is the detail.\n//\n// As a special case, handleResponse may return (nil, nil) to skip the\n// frame (currently only used for 1xx responses).\nfunc (rl *clientConnReadLoop) handleResponse(cs *clientStream, f *MetaHeadersFrame) (*http.Response, error) {\n\tif f.Truncated {\n\t\treturn nil, errResponseHeaderListSize\n\t}\n\n\tstatus := f.PseudoValue(\"status\")\n\tif status == \"\" {\n\t\treturn nil, errors.New(\"malformed response from server: missing status pseudo header\")\n\t}\n\tstatusCode, err := strconv.Atoi(status)\n\tif err != nil {\n\t\treturn nil, errors.New(\"malformed response from server: malformed non-numeric status pseudo header\")\n\t}\n\n\theader := make(http.Header)\n\tres := &http.Response{\n\t\tProto:      \"HTTP/2.0\",\n\t\tProtoMajor: 2,\n\t\tHeader:     header,\n\t\tStatusCode: statusCode,\n\t\tStatus:     status + \" \" + http.StatusText(statusCode),\n\t}\n\tfor _, hf := range f.RegularFields() {\n\t\tkey := http.CanonicalHeaderKey(hf.Name)\n\t\tif key == \"Trailer\" {\n\t\t\tt := res.Trailer\n\t\t\tif t == nil {\n\t\t\t\tt = make(http.Header)\n\t\t\t\tres.Trailer = t\n\t\t\t}\n\t\t\tforeachHeaderElement(hf.Value, func(v string) {\n\t\t\t\tt[http.CanonicalHeaderKey(v)] = nil\n\t\t\t})\n\t\t} else {\n\t\t\theader[key] = append(header[key], hf.Value)\n\t\t}\n\t}\n\n\tif statusCode >= 100 && statusCode <= 199 {\n\t\tcs.num1xx++\n\t\tconst max1xxResponses = 5 // arbitrary bound on number of informational responses, same as net/http\n\t\tif cs.num1xx > max1xxResponses {\n\t\t\treturn nil, errors.New(\"http2: too many 1xx informational responses\")\n\t\t}\n\t\tif fn := cs.get1xxTraceFunc(); fn != nil {\n\t\t\tif err := fn(statusCode, textproto.MIMEHeader(header)); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t}\n\t\tif statusCode == 100 {\n\t\t\ttraceGot100Continue(cs.trace)\n\t\t\tif cs.on100 != nil {\n\t\t\t\tcs.on100() // forces any write delay timer to fire\n\t\t\t}\n\t\t}\n\t\tcs.pastHeaders = false // do it all again\n\t\treturn nil, nil\n\t}\n\n\tstreamEnded := f.StreamEnded()\n\tisHead := cs.req.Method == \"HEAD\"\n\tif !streamEnded || isHead {\n\t\tres.ContentLength = -1\n\t\tif clens := res.Header[\"Content-Length\"]; len(clens) == 1 {\n\t\t\tif clen64, err := strconv.ParseInt(clens[0], 10, 64); err == nil {\n\t\t\t\tres.ContentLength = clen64\n\t\t\t} else {\n\t\t\t\t// TODO: care? unlike http/1, it won't mess up our framing, so it's\n\t\t\t\t// more safe smuggling-wise to ignore.\n\t\t\t}\n\t\t} else if len(clens) > 1 {\n\t\t\t// TODO: care? unlike http/1, it won't mess up our framing, so it's\n\t\t\t// more safe smuggling-wise to ignore.\n\t\t}\n\t}\n\n\tif streamEnded || isHead {\n\t\tres.Body = noBody\n\t\treturn res, nil\n\t}\n\n\tcs.bufPipe = pipe{b: &dataBuffer{expected: res.ContentLength}}\n\tcs.bytesRemain = res.ContentLength\n\tres.Body = transportResponseBody{cs}\n\tgo cs.awaitRequestCancel(cs.req)\n\n\tif cs.requestedGzip && res.Header.Get(\"Content-Encoding\") == \"gzip\" {\n\t\tres.Header.Del(\"Content-Encoding\")\n\t\tres.Header.Del(\"Content-Length\")\n\t\tres.ContentLength = -1\n\t\tres.Body = &gzipReader{body: res.Body}\n\t\tres.Uncompressed = true\n\t}\n\treturn res, nil\n}\n\nfunc (rl *clientConnReadLoop) processTrailers(cs *clientStream, f *MetaHeadersFrame) error {\n\tif cs.pastTrailers {\n\t\t// Too many HEADERS frames for this stream.\n\t\treturn ConnectionError(ErrCodeProtocol)\n\t}\n\tcs.pastTrailers = true\n\tif !f.StreamEnded() {\n\t\t// We expect that any headers for trailers also\n\t\t// has END_STREAM.\n\t\treturn ConnectionError(ErrCodeProtocol)\n\t}\n\tif len(f.PseudoFields()) > 0 {\n\t\t// No pseudo header fields are defined for trailers.\n\t\t// TODO: ConnectionError might be overly harsh? Check.\n\t\treturn ConnectionError(ErrCodeProtocol)\n\t}\n\n\ttrailer := make(http.Header)\n\tfor _, hf := range f.RegularFields() {\n\t\tkey := http.CanonicalHeaderKey(hf.Name)\n\t\ttrailer[key] = append(trailer[key], hf.Value)\n\t}\n\tcs.trailer = trailer\n\n\trl.endStream(cs)\n\treturn nil\n}\n\n// transportResponseBody is the concrete type of Transport.RoundTrip's\n// Response.Body. It is an io.ReadCloser. On Read, it reads from cs.body.\n// On Close it sends RST_STREAM if EOF wasn't already seen.\ntype transportResponseBody struct {\n\tcs *clientStream\n}\n\nfunc (b transportResponseBody) Read(p []byte) (n int, err error) {\n\tcs := b.cs\n\tcc := cs.cc\n\n\tif cs.readErr != nil {\n\t\treturn 0, cs.readErr\n\t}\n\tn, err = b.cs.bufPipe.Read(p)\n\tif cs.bytesRemain != -1 {\n\t\tif int64(n) > cs.bytesRemain {\n\t\t\tn = int(cs.bytesRemain)\n\t\t\tif err == nil {\n\t\t\t\terr = errors.New(\"net/http: server replied with more than declared Content-Length; truncated\")\n\t\t\t\tcc.writeStreamReset(cs.ID, ErrCodeProtocol, err)\n\t\t\t}\n\t\t\tcs.readErr = err\n\t\t\treturn int(cs.bytesRemain), err\n\t\t}\n\t\tcs.bytesRemain -= int64(n)\n\t\tif err == io.EOF && cs.bytesRemain > 0 {\n\t\t\terr = io.ErrUnexpectedEOF\n\t\t\tcs.readErr = err\n\t\t\treturn n, err\n\t\t}\n\t}\n\tif n == 0 {\n\t\t// No flow control tokens to send back.\n\t\treturn\n\t}\n\n\tcc.mu.Lock()\n\tdefer cc.mu.Unlock()\n\n\tvar connAdd, streamAdd int32\n\t// Check the conn-level first, before the stream-level.\n\tif v := cc.inflow.available(); v < transportDefaultConnFlow/2 {\n\t\tconnAdd = transportDefaultConnFlow - v\n\t\tcc.inflow.add(connAdd)\n\t}\n\tif err == nil { // No need to refresh if the stream is over or failed.\n\t\t// Consider any buffered body data (read from the conn but not\n\t\t// consumed by the client) when computing flow control for this\n\t\t// stream.\n\t\tv := int(cs.inflow.available()) + cs.bufPipe.Len()\n\t\tif v < transportDefaultStreamFlow-transportDefaultStreamMinRefresh {\n\t\t\tstreamAdd = int32(transportDefaultStreamFlow - v)\n\t\t\tcs.inflow.add(streamAdd)\n\t\t}\n\t}\n\tif connAdd != 0 || streamAdd != 0 {\n\t\tcc.wmu.Lock()\n\t\tdefer cc.wmu.Unlock()\n\t\tif connAdd != 0 {\n\t\t\tcc.fr.WriteWindowUpdate(0, mustUint31(connAdd))\n\t\t}\n\t\tif streamAdd != 0 {\n\t\t\tcc.fr.WriteWindowUpdate(cs.ID, mustUint31(streamAdd))\n\t\t}\n\t\tcc.bw.Flush()\n\t}\n\treturn\n}\n\nvar errClosedResponseBody = errors.New(\"http2: response body closed\")\n\nfunc (b transportResponseBody) Close() error {\n\tcs := b.cs\n\tcc := cs.cc\n\n\tserverSentStreamEnd := cs.bufPipe.Err() == io.EOF\n\tunread := cs.bufPipe.Len()\n\n\tif unread > 0 || !serverSentStreamEnd {\n\t\tcc.mu.Lock()\n\t\tcc.wmu.Lock()\n\t\tif !serverSentStreamEnd {\n\t\t\tcc.fr.WriteRSTStream(cs.ID, ErrCodeCancel)\n\t\t\tcs.didReset = true\n\t\t}\n\t\t// Return connection-level flow control.\n\t\tif unread > 0 {\n\t\t\tcc.inflow.add(int32(unread))\n\t\t\tcc.fr.WriteWindowUpdate(0, uint32(unread))\n\t\t}\n\t\tcc.bw.Flush()\n\t\tcc.wmu.Unlock()\n\t\tcc.mu.Unlock()\n\t}\n\n\tcs.bufPipe.BreakWithError(errClosedResponseBody)\n\tcc.forgetStreamID(cs.ID)\n\treturn nil\n}\n\nfunc (rl *clientConnReadLoop) processData(f *DataFrame) error {\n\tcc := rl.cc\n\tcs := cc.streamByID(f.StreamID, f.StreamEnded())\n\tdata := f.Data()\n\tif cs == nil {\n\t\tcc.mu.Lock()\n\t\tneverSent := cc.nextStreamID\n\t\tcc.mu.Unlock()\n\t\tif f.StreamID >= neverSent {\n\t\t\t// We never asked for this.\n\t\t\tcc.logf(\"http2: Transport received unsolicited DATA frame; closing connection\")\n\t\t\treturn ConnectionError(ErrCodeProtocol)\n\t\t}\n\t\t// We probably did ask for this, but canceled. Just ignore it.\n\t\t// TODO: be stricter here? only silently ignore things which\n\t\t// we canceled, but not things which were closed normally\n\t\t// by the peer? Tough without accumulating too much state.\n\n\t\t// But at least return their flow control:\n\t\tif f.Length > 0 {\n\t\t\tcc.mu.Lock()\n\t\t\tcc.inflow.add(int32(f.Length))\n\t\t\tcc.mu.Unlock()\n\n\t\t\tcc.wmu.Lock()\n\t\t\tcc.fr.WriteWindowUpdate(0, uint32(f.Length))\n\t\t\tcc.bw.Flush()\n\t\t\tcc.wmu.Unlock()\n\t\t}\n\t\treturn nil\n\t}\n\tif !cs.firstByte {\n\t\tcc.logf(\"protocol error: received DATA before a HEADERS frame\")\n\t\trl.endStreamError(cs, StreamError{\n\t\t\tStreamID: f.StreamID,\n\t\t\tCode:     ErrCodeProtocol,\n\t\t})\n\t\treturn nil\n\t}\n\tif f.Length > 0 {\n\t\tif cs.req.Method == \"HEAD\" && len(data) > 0 {\n\t\t\tcc.logf(\"protocol error: received DATA on a HEAD request\")\n\t\t\trl.endStreamError(cs, StreamError{\n\t\t\t\tStreamID: f.StreamID,\n\t\t\t\tCode:     ErrCodeProtocol,\n\t\t\t})\n\t\t\treturn nil\n\t\t}\n\t\t// Check connection-level flow control.\n\t\tcc.mu.Lock()\n\t\tif cs.inflow.available() >= int32(f.Length) {\n\t\t\tcs.inflow.take(int32(f.Length))\n\t\t} else {\n\t\t\tcc.mu.Unlock()\n\t\t\treturn ConnectionError(ErrCodeFlowControl)\n\t\t}\n\t\t// Return any padded flow control now, since we won't\n\t\t// refund it later on body reads.\n\t\tvar refund int\n\t\tif pad := int(f.Length) - len(data); pad > 0 {\n\t\t\trefund += pad\n\t\t}\n\t\t// Return len(data) now if the stream is already closed,\n\t\t// since data will never be read.\n\t\tdidReset := cs.didReset\n\t\tif didReset {\n\t\t\trefund += len(data)\n\t\t}\n\t\tif refund > 0 {\n\t\t\tcc.inflow.add(int32(refund))\n\t\t\tcc.wmu.Lock()\n\t\t\tcc.fr.WriteWindowUpdate(0, uint32(refund))\n\t\t\tif !didReset {\n\t\t\t\tcs.inflow.add(int32(refund))\n\t\t\t\tcc.fr.WriteWindowUpdate(cs.ID, uint32(refund))\n\t\t\t}\n\t\t\tcc.bw.Flush()\n\t\t\tcc.wmu.Unlock()\n\t\t}\n\t\tcc.mu.Unlock()\n\n\t\tif len(data) > 0 && !didReset {\n\t\t\tif _, err := cs.bufPipe.Write(data); err != nil {\n\t\t\t\trl.endStreamError(cs, err)\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t}\n\n\tif f.StreamEnded() {\n\t\trl.endStream(cs)\n\t}\n\treturn nil\n}\n\nvar errInvalidTrailers = errors.New(\"http2: invalid trailers\")\n\nfunc (rl *clientConnReadLoop) endStream(cs *clientStream) {\n\t// TODO: check that any declared content-length matches, like\n\t// server.go's (*stream).endStream method.\n\trl.endStreamError(cs, nil)\n}\n\nfunc (rl *clientConnReadLoop) endStreamError(cs *clientStream, err error) {\n\tvar code func()\n\tif err == nil {\n\t\terr = io.EOF\n\t\tcode = cs.copyTrailers\n\t}\n\tif isConnectionCloseRequest(cs.req) {\n\t\trl.closeWhenIdle = true\n\t}\n\tcs.bufPipe.closeWithErrorAndCode(err, code)\n\n\tselect {\n\tcase cs.resc <- resAndError{err: err}:\n\tdefault:\n\t}\n}\n\nfunc (cs *clientStream) copyTrailers() {\n\tfor k, vv := range cs.trailer {\n\t\tt := cs.resTrailer\n\t\tif *t == nil {\n\t\t\t*t = make(http.Header)\n\t\t}\n\t\t(*t)[k] = vv\n\t}\n}\n\nfunc (rl *clientConnReadLoop) processGoAway(f *GoAwayFrame) error {\n\tcc := rl.cc\n\tcc.t.connPool().MarkDead(cc)\n\tif f.ErrCode != 0 {\n\t\t// TODO: deal with GOAWAY more. particularly the error code\n\t\tcc.vlogf(\"transport got GOAWAY with error code = %v\", f.ErrCode)\n\t}\n\tcc.setGoAway(f)\n\treturn nil\n}\n\nfunc (rl *clientConnReadLoop) processSettings(f *SettingsFrame) error {\n\tcc := rl.cc\n\tcc.mu.Lock()\n\tdefer cc.mu.Unlock()\n\n\tif f.IsAck() {\n\t\tif cc.wantSettingsAck {\n\t\t\tcc.wantSettingsAck = false\n\t\t\treturn nil\n\t\t}\n\t\treturn ConnectionError(ErrCodeProtocol)\n\t}\n\n\terr := f.ForeachSetting(func(s Setting) error {\n\t\tswitch s.ID {\n\t\tcase SettingMaxFrameSize:\n\t\t\tcc.maxFrameSize = s.Val\n\t\tcase SettingMaxConcurrentStreams:\n\t\t\tcc.maxConcurrentStreams = s.Val\n\t\tcase SettingMaxHeaderListSize:\n\t\t\tcc.peerMaxHeaderListSize = uint64(s.Val)\n\t\tcase SettingInitialWindowSize:\n\t\t\t// Values above the maximum flow-control\n\t\t\t// window size of 2^31-1 MUST be treated as a\n\t\t\t// connection error (Section 5.4.1) of type\n\t\t\t// FLOW_CONTROL_ERROR.\n\t\t\tif s.Val > math.MaxInt32 {\n\t\t\t\treturn ConnectionError(ErrCodeFlowControl)\n\t\t\t}\n\n\t\t\t// Adjust flow control of currently-open\n\t\t\t// frames by the difference of the old initial\n\t\t\t// window size and this one.\n\t\t\tdelta := int32(s.Val) - int32(cc.initialWindowSize)\n\t\t\tfor _, cs := range cc.streams {\n\t\t\t\tcs.flow.add(delta)\n\t\t\t}\n\t\t\tcc.cond.Broadcast()\n\n\t\t\tcc.initialWindowSize = s.Val\n\t\tdefault:\n\t\t\t// TODO(bradfitz): handle more settings? SETTINGS_HEADER_TABLE_SIZE probably.\n\t\t\tcc.vlogf(\"Unhandled Setting: %v\", s)\n\t\t}\n\t\treturn nil\n\t})\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tcc.wmu.Lock()\n\tdefer cc.wmu.Unlock()\n\n\tcc.fr.WriteSettingsAck()\n\tcc.bw.Flush()\n\treturn cc.werr\n}\n\nfunc (rl *clientConnReadLoop) processWindowUpdate(f *WindowUpdateFrame) error {\n\tcc := rl.cc\n\tcs := cc.streamByID(f.StreamID, false)\n\tif f.StreamID != 0 && cs == nil {\n\t\treturn nil\n\t}\n\n\tcc.mu.Lock()\n\tdefer cc.mu.Unlock()\n\n\tfl := &cc.flow\n\tif cs != nil {\n\t\tfl = &cs.flow\n\t}\n\tif !fl.add(int32(f.Increment)) {\n\t\treturn ConnectionError(ErrCodeFlowControl)\n\t}\n\tcc.cond.Broadcast()\n\treturn nil\n}\n\nfunc (rl *clientConnReadLoop) processResetStream(f *RSTStreamFrame) error {\n\tcs := rl.cc.streamByID(f.StreamID, true)\n\tif cs == nil {\n\t\t// TODO: return error if server tries to RST_STEAM an idle stream\n\t\treturn nil\n\t}\n\tselect {\n\tcase <-cs.peerReset:\n\t\t// Already reset.\n\t\t// This is the only goroutine\n\t\t// which closes this, so there\n\t\t// isn't a race.\n\tdefault:\n\t\terr := streamError(cs.ID, f.ErrCode)\n\t\tcs.resetErr = err\n\t\tclose(cs.peerReset)\n\t\tcs.bufPipe.CloseWithError(err)\n\t\tcs.cc.cond.Broadcast() // wake up checkResetOrDone via clientStream.awaitFlowControl\n\t}\n\treturn nil\n}\n\n// Ping sends a PING frame to the server and waits for the ack.\nfunc (cc *ClientConn) Ping(ctx context.Context) error {\n\tc := make(chan struct{})\n\t// Generate a random payload\n\tvar p [8]byte\n\tfor {\n\t\tif _, err := rand.Read(p[:]); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcc.mu.Lock()\n\t\t// check for dup before insert\n\t\tif _, found := cc.pings[p]; !found {\n\t\t\tcc.pings[p] = c\n\t\t\tcc.mu.Unlock()\n\t\t\tbreak\n\t\t}\n\t\tcc.mu.Unlock()\n\t}\n\tcc.wmu.Lock()\n\tif err := cc.fr.WritePing(false, p); err != nil {\n\t\tcc.wmu.Unlock()\n\t\treturn err\n\t}\n\tif err := cc.bw.Flush(); err != nil {\n\t\tcc.wmu.Unlock()\n\t\treturn err\n\t}\n\tcc.wmu.Unlock()\n\tselect {\n\tcase <-c:\n\t\treturn nil\n\tcase <-ctx.Done():\n\t\treturn ctx.Err()\n\tcase <-cc.readerDone:\n\t\t// connection closed\n\t\treturn cc.readerErr\n\t}\n}\n\nfunc (rl *clientConnReadLoop) processPing(f *PingFrame) error {\n\tif f.IsAck() {\n\t\tcc := rl.cc\n\t\tcc.mu.Lock()\n\t\tdefer cc.mu.Unlock()\n\t\t// If ack, notify listener if any\n\t\tif c, ok := cc.pings[f.Data]; ok {\n\t\t\tclose(c)\n\t\t\tdelete(cc.pings, f.Data)\n\t\t}\n\t\treturn nil\n\t}\n\tcc := rl.cc\n\tcc.wmu.Lock()\n\tdefer cc.wmu.Unlock()\n\tif err := cc.fr.WritePing(true, f.Data); err != nil {\n\t\treturn err\n\t}\n\treturn cc.bw.Flush()\n}\n\nfunc (rl *clientConnReadLoop) processPushPromise(f *PushPromiseFrame) error {\n\t// We told the peer we don't want them.\n\t// Spec says:\n\t// \"PUSH_PROMISE MUST NOT be sent if the SETTINGS_ENABLE_PUSH\n\t// setting of the peer endpoint is set to 0. An endpoint that\n\t// has set this setting and has received acknowledgement MUST\n\t// treat the receipt of a PUSH_PROMISE frame as a connection\n\t// error (Section 5.4.1) of type PROTOCOL_ERROR.\"\n\treturn ConnectionError(ErrCodeProtocol)\n}\n\nfunc (cc *ClientConn) writeStreamReset(streamID uint32, code ErrCode, err error) {\n\t// TODO: map err to more interesting error codes, once the\n\t// HTTP community comes up with some. But currently for\n\t// RST_STREAM there's no equivalent to GOAWAY frame's debug\n\t// data, and the error codes are all pretty vague (\"cancel\").\n\tcc.wmu.Lock()\n\tcc.fr.WriteRSTStream(streamID, code)\n\tcc.bw.Flush()\n\tcc.wmu.Unlock()\n}\n\nvar (\n\terrResponseHeaderListSize = errors.New(\"http2: response header list larger than advertised limit\")\n\terrRequestHeaderListSize  = errors.New(\"http2: request header list larger than peer's advertised limit\")\n\terrPseudoTrailers         = errors.New(\"http2: invalid pseudo header in trailers\")\n)\n\nfunc (cc *ClientConn) logf(format string, args ...interface{}) {\n\tcc.t.logf(format, args...)\n}\n\nfunc (cc *ClientConn) vlogf(format string, args ...interface{}) {\n\tcc.t.vlogf(format, args...)\n}\n\nfunc (t *Transport) vlogf(format string, args ...interface{}) {\n\tif VerboseLogs {\n\t\tt.logf(format, args...)\n\t}\n}\n\nfunc (t *Transport) logf(format string, args ...interface{}) {\n\tlog.Printf(format, args...)\n}\n\nvar noBody io.ReadCloser = ioutil.NopCloser(bytes.NewReader(nil))\n\nfunc strSliceContains(ss []string, s string) bool {\n\tfor _, v := range ss {\n\t\tif v == s {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\ntype erringRoundTripper struct{ err error }\n\nfunc (rt erringRoundTripper) RoundTrip(*http.Request) (*http.Response, error) { return nil, rt.err }\n\n// gzipReader wraps a response body so it can lazily\n// call gzip.NewReader on the first call to Read\ntype gzipReader struct {\n\tbody io.ReadCloser // underlying Response.Body\n\tzr   *gzip.Reader  // lazily-initialized gzip reader\n\tzerr error         // sticky error\n}\n\nfunc (gz *gzipReader) Read(p []byte) (n int, err error) {\n\tif gz.zerr != nil {\n\t\treturn 0, gz.zerr\n\t}\n\tif gz.zr == nil {\n\t\tgz.zr, err = gzip.NewReader(gz.body)\n\t\tif err != nil {\n\t\t\tgz.zerr = err\n\t\t\treturn 0, err\n\t\t}\n\t}\n\treturn gz.zr.Read(p)\n}\n\nfunc (gz *gzipReader) Close() error {\n\treturn gz.body.Close()\n}\n\ntype errorReader struct{ err error }\n\nfunc (r errorReader) Read(p []byte) (int, error) { return 0, r.err }\n\n// bodyWriterState encapsulates various state around the Transport's writing\n// of the request body, particularly regarding doing delayed writes of the body\n// when the request contains \"Expect: 100-continue\".\ntype bodyWriterState struct {\n\tcs     *clientStream\n\ttimer  *time.Timer   // if non-nil, we're doing a delayed write\n\tfnonce *sync.Once    // to call fn with\n\tfn     func()        // the code to run in the goroutine, writing the body\n\tresc   chan error    // result of fn's execution\n\tdelay  time.Duration // how long we should delay a delayed write for\n}\n\nfunc (t *Transport) getBodyWriterState(cs *clientStream, body io.Reader) (s bodyWriterState) {\n\ts.cs = cs\n\tif body == nil {\n\t\treturn\n\t}\n\tresc := make(chan error, 1)\n\ts.resc = resc\n\ts.fn = func() {\n\t\tcs.cc.mu.Lock()\n\t\tcs.startedWrite = true\n\t\tcs.cc.mu.Unlock()\n\t\tresc <- cs.writeRequestBody(body, cs.req.Body)\n\t}\n\ts.delay = t.expectContinueTimeout()\n\tif s.delay == 0 ||\n\t\t!httpguts.HeaderValuesContainsToken(\n\t\t\tcs.req.Header[\"Expect\"],\n\t\t\t\"100-continue\") {\n\t\treturn\n\t}\n\ts.fnonce = new(sync.Once)\n\n\t// Arm the timer with a very large duration, which we'll\n\t// intentionally lower later. It has to be large now because\n\t// we need a handle to it before writing the headers, but the\n\t// s.delay value is defined to not start until after the\n\t// request headers were written.\n\tconst hugeDuration = 365 * 24 * time.Hour\n\ts.timer = time.AfterFunc(hugeDuration, func() {\n\t\ts.fnonce.Do(s.fn)\n\t})\n\treturn\n}\n\nfunc (s bodyWriterState) cancel() {\n\tif s.timer != nil {\n\t\ts.timer.Stop()\n\t}\n}\n\nfunc (s bodyWriterState) on100() {\n\tif s.timer == nil {\n\t\t// If we didn't do a delayed write, ignore the server's\n\t\t// bogus 100 continue response.\n\t\treturn\n\t}\n\ts.timer.Stop()\n\tgo func() { s.fnonce.Do(s.fn) }()\n}\n\n// scheduleBodyWrite starts writing the body, either immediately (in\n// the common case) or after the delay timeout. It should not be\n// called until after the headers have been written.\nfunc (s bodyWriterState) scheduleBodyWrite() {\n\tif s.timer == nil {\n\t\t// We're not doing a delayed write (see\n\t\t// getBodyWriterState), so just start the writing\n\t\t// goroutine immediately.\n\t\tgo s.fn()\n\t\treturn\n\t}\n\ttraceWait100Continue(s.cs.trace)\n\tif s.timer.Stop() {\n\t\ts.timer.Reset(s.delay)\n\t}\n}\n\n// isConnectionCloseRequest reports whether req should use its own\n// connection for a single request and then close the connection.\nfunc isConnectionCloseRequest(req *http.Request) bool {\n\treturn req.Close || httpguts.HeaderValuesContainsToken(req.Header[\"Connection\"], \"close\")\n}\n\n// registerHTTPSProtocol calls Transport.RegisterProtocol but\n// converting panics into errors.\nfunc registerHTTPSProtocol(t *http.Transport, rt noDialH2RoundTripper) (err error) {\n\tdefer func() {\n\t\tif e := recover(); e != nil {\n\t\t\terr = fmt.Errorf(\"%v\", e)\n\t\t}\n\t}()\n\tt.RegisterProtocol(\"https\", rt)\n\treturn nil\n}\n\n// noDialH2RoundTripper is a RoundTripper which only tries to complete the request\n// if there's already has a cached connection to the host.\n// (The field is exported so it can be accessed via reflect from net/http; tested\n// by TestNoDialH2RoundTripperType)\ntype noDialH2RoundTripper struct{ *Transport }\n\nfunc (rt noDialH2RoundTripper) RoundTrip(req *http.Request) (*http.Response, error) {\n\tres, err := rt.Transport.RoundTrip(req)\n\tif isNoCachedConnError(err) {\n\t\treturn nil, http.ErrSkipAltProtocol\n\t}\n\treturn res, err\n}\n\nfunc (t *Transport) idleConnTimeout() time.Duration {\n\tif t.t1 != nil {\n\t\treturn t.t1.IdleConnTimeout\n\t}\n\treturn 0\n}\n\nfunc traceGetConn(req *http.Request, hostPort string) {\n\ttrace := httptrace.ContextClientTrace(req.Context())\n\tif trace == nil || trace.GetConn == nil {\n\t\treturn\n\t}\n\ttrace.GetConn(hostPort)\n}\n\nfunc traceGotConn(req *http.Request, cc *ClientConn, reused bool) {\n\ttrace := httptrace.ContextClientTrace(req.Context())\n\tif trace == nil || trace.GotConn == nil {\n\t\treturn\n\t}\n\tci := httptrace.GotConnInfo{Conn: cc.tconn}\n\tci.Reused = reused\n\tcc.mu.Lock()\n\tci.WasIdle = len(cc.streams) == 0 && reused\n\tif ci.WasIdle && !cc.lastActive.IsZero() {\n\t\tci.IdleTime = time.Now().Sub(cc.lastActive)\n\t}\n\tcc.mu.Unlock()\n\n\ttrace.GotConn(ci)\n}\n\nfunc traceWroteHeaders(trace *httptrace.ClientTrace) {\n\tif trace != nil && trace.WroteHeaders != nil {\n\t\ttrace.WroteHeaders()\n\t}\n}\n\nfunc traceGot100Continue(trace *httptrace.ClientTrace) {\n\tif trace != nil && trace.Got100Continue != nil {\n\t\ttrace.Got100Continue()\n\t}\n}\n\nfunc traceWait100Continue(trace *httptrace.ClientTrace) {\n\tif trace != nil && trace.Wait100Continue != nil {\n\t\ttrace.Wait100Continue()\n\t}\n}\n\nfunc traceWroteRequest(trace *httptrace.ClientTrace, err error) {\n\tif trace != nil && trace.WroteRequest != nil {\n\t\ttrace.WroteRequest(httptrace.WroteRequestInfo{Err: err})\n\t}\n}\n\nfunc traceFirstResponseByte(trace *httptrace.ClientTrace) {\n\tif trace != nil && trace.GotFirstResponseByte != nil {\n\t\ttrace.GotFirstResponseByte()\n\t}\n}\n"
  },
  {
    "path": "vendor/golang.org/x/net/http2/write.go",
    "content": "// Copyright 2014 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage http2\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"log\"\n\t\"net/http\"\n\t\"net/url\"\n\n\t\"golang.org/x/net/http/httpguts\"\n\t\"golang.org/x/net/http2/hpack\"\n)\n\n// writeFramer is implemented by any type that is used to write frames.\ntype writeFramer interface {\n\twriteFrame(writeContext) error\n\n\t// staysWithinBuffer reports whether this writer promises that\n\t// it will only write less than or equal to size bytes, and it\n\t// won't Flush the write context.\n\tstaysWithinBuffer(size int) bool\n}\n\n// writeContext is the interface needed by the various frame writer\n// types below. All the writeFrame methods below are scheduled via the\n// frame writing scheduler (see writeScheduler in writesched.go).\n//\n// This interface is implemented by *serverConn.\n//\n// TODO: decide whether to a) use this in the client code (which didn't\n// end up using this yet, because it has a simpler design, not\n// currently implementing priorities), or b) delete this and\n// make the server code a bit more concrete.\ntype writeContext interface {\n\tFramer() *Framer\n\tFlush() error\n\tCloseConn() error\n\t// HeaderEncoder returns an HPACK encoder that writes to the\n\t// returned buffer.\n\tHeaderEncoder() (*hpack.Encoder, *bytes.Buffer)\n}\n\n// writeEndsStream reports whether w writes a frame that will transition\n// the stream to a half-closed local state. This returns false for RST_STREAM,\n// which closes the entire stream (not just the local half).\nfunc writeEndsStream(w writeFramer) bool {\n\tswitch v := w.(type) {\n\tcase *writeData:\n\t\treturn v.endStream\n\tcase *writeResHeaders:\n\t\treturn v.endStream\n\tcase nil:\n\t\t// This can only happen if the caller reuses w after it's\n\t\t// been intentionally nil'ed out to prevent use. Keep this\n\t\t// here to catch future refactoring breaking it.\n\t\tpanic(\"writeEndsStream called on nil writeFramer\")\n\t}\n\treturn false\n}\n\ntype flushFrameWriter struct{}\n\nfunc (flushFrameWriter) writeFrame(ctx writeContext) error {\n\treturn ctx.Flush()\n}\n\nfunc (flushFrameWriter) staysWithinBuffer(max int) bool { return false }\n\ntype writeSettings []Setting\n\nfunc (s writeSettings) staysWithinBuffer(max int) bool {\n\tconst settingSize = 6 // uint16 + uint32\n\treturn frameHeaderLen+settingSize*len(s) <= max\n\n}\n\nfunc (s writeSettings) writeFrame(ctx writeContext) error {\n\treturn ctx.Framer().WriteSettings([]Setting(s)...)\n}\n\ntype writeGoAway struct {\n\tmaxStreamID uint32\n\tcode        ErrCode\n}\n\nfunc (p *writeGoAway) writeFrame(ctx writeContext) error {\n\terr := ctx.Framer().WriteGoAway(p.maxStreamID, p.code, nil)\n\tctx.Flush() // ignore error: we're hanging up on them anyway\n\treturn err\n}\n\nfunc (*writeGoAway) staysWithinBuffer(max int) bool { return false } // flushes\n\ntype writeData struct {\n\tstreamID  uint32\n\tp         []byte\n\tendStream bool\n}\n\nfunc (w *writeData) String() string {\n\treturn fmt.Sprintf(\"writeData(stream=%d, p=%d, endStream=%v)\", w.streamID, len(w.p), w.endStream)\n}\n\nfunc (w *writeData) writeFrame(ctx writeContext) error {\n\treturn ctx.Framer().WriteData(w.streamID, w.endStream, w.p)\n}\n\nfunc (w *writeData) staysWithinBuffer(max int) bool {\n\treturn frameHeaderLen+len(w.p) <= max\n}\n\n// handlerPanicRST is the message sent from handler goroutines when\n// the handler panics.\ntype handlerPanicRST struct {\n\tStreamID uint32\n}\n\nfunc (hp handlerPanicRST) writeFrame(ctx writeContext) error {\n\treturn ctx.Framer().WriteRSTStream(hp.StreamID, ErrCodeInternal)\n}\n\nfunc (hp handlerPanicRST) staysWithinBuffer(max int) bool { return frameHeaderLen+4 <= max }\n\nfunc (se StreamError) writeFrame(ctx writeContext) error {\n\treturn ctx.Framer().WriteRSTStream(se.StreamID, se.Code)\n}\n\nfunc (se StreamError) staysWithinBuffer(max int) bool { return frameHeaderLen+4 <= max }\n\ntype writePingAck struct{ pf *PingFrame }\n\nfunc (w writePingAck) writeFrame(ctx writeContext) error {\n\treturn ctx.Framer().WritePing(true, w.pf.Data)\n}\n\nfunc (w writePingAck) staysWithinBuffer(max int) bool { return frameHeaderLen+len(w.pf.Data) <= max }\n\ntype writeSettingsAck struct{}\n\nfunc (writeSettingsAck) writeFrame(ctx writeContext) error {\n\treturn ctx.Framer().WriteSettingsAck()\n}\n\nfunc (writeSettingsAck) staysWithinBuffer(max int) bool { return frameHeaderLen <= max }\n\n// splitHeaderBlock splits headerBlock into fragments so that each fragment fits\n// in a single frame, then calls fn for each fragment. firstFrag/lastFrag are true\n// for the first/last fragment, respectively.\nfunc splitHeaderBlock(ctx writeContext, headerBlock []byte, fn func(ctx writeContext, frag []byte, firstFrag, lastFrag bool) error) error {\n\t// For now we're lazy and just pick the minimum MAX_FRAME_SIZE\n\t// that all peers must support (16KB). Later we could care\n\t// more and send larger frames if the peer advertised it, but\n\t// there's little point. Most headers are small anyway (so we\n\t// generally won't have CONTINUATION frames), and extra frames\n\t// only waste 9 bytes anyway.\n\tconst maxFrameSize = 16384\n\n\tfirst := true\n\tfor len(headerBlock) > 0 {\n\t\tfrag := headerBlock\n\t\tif len(frag) > maxFrameSize {\n\t\t\tfrag = frag[:maxFrameSize]\n\t\t}\n\t\theaderBlock = headerBlock[len(frag):]\n\t\tif err := fn(ctx, frag, first, len(headerBlock) == 0); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfirst = false\n\t}\n\treturn nil\n}\n\n// writeResHeaders is a request to write a HEADERS and 0+ CONTINUATION frames\n// for HTTP response headers or trailers from a server handler.\ntype writeResHeaders struct {\n\tstreamID    uint32\n\thttpResCode int         // 0 means no \":status\" line\n\th           http.Header // may be nil\n\ttrailers    []string    // if non-nil, which keys of h to write. nil means all.\n\tendStream   bool\n\n\tdate          string\n\tcontentType   string\n\tcontentLength string\n}\n\nfunc encKV(enc *hpack.Encoder, k, v string) {\n\tif VerboseLogs {\n\t\tlog.Printf(\"http2: server encoding header %q = %q\", k, v)\n\t}\n\tenc.WriteField(hpack.HeaderField{Name: k, Value: v})\n}\n\nfunc (w *writeResHeaders) staysWithinBuffer(max int) bool {\n\t// TODO: this is a common one. It'd be nice to return true\n\t// here and get into the fast path if we could be clever and\n\t// calculate the size fast enough, or at least a conservative\n\t// upper bound that usually fires. (Maybe if w.h and\n\t// w.trailers are nil, so we don't need to enumerate it.)\n\t// Otherwise I'm afraid that just calculating the length to\n\t// answer this question would be slower than the ~2µs benefit.\n\treturn false\n}\n\nfunc (w *writeResHeaders) writeFrame(ctx writeContext) error {\n\tenc, buf := ctx.HeaderEncoder()\n\tbuf.Reset()\n\n\tif w.httpResCode != 0 {\n\t\tencKV(enc, \":status\", httpCodeString(w.httpResCode))\n\t}\n\n\tencodeHeaders(enc, w.h, w.trailers)\n\n\tif w.contentType != \"\" {\n\t\tencKV(enc, \"content-type\", w.contentType)\n\t}\n\tif w.contentLength != \"\" {\n\t\tencKV(enc, \"content-length\", w.contentLength)\n\t}\n\tif w.date != \"\" {\n\t\tencKV(enc, \"date\", w.date)\n\t}\n\n\theaderBlock := buf.Bytes()\n\tif len(headerBlock) == 0 && w.trailers == nil {\n\t\tpanic(\"unexpected empty hpack\")\n\t}\n\n\treturn splitHeaderBlock(ctx, headerBlock, w.writeHeaderBlock)\n}\n\nfunc (w *writeResHeaders) writeHeaderBlock(ctx writeContext, frag []byte, firstFrag, lastFrag bool) error {\n\tif firstFrag {\n\t\treturn ctx.Framer().WriteHeaders(HeadersFrameParam{\n\t\t\tStreamID:      w.streamID,\n\t\t\tBlockFragment: frag,\n\t\t\tEndStream:     w.endStream,\n\t\t\tEndHeaders:    lastFrag,\n\t\t})\n\t} else {\n\t\treturn ctx.Framer().WriteContinuation(w.streamID, lastFrag, frag)\n\t}\n}\n\n// writePushPromise is a request to write a PUSH_PROMISE and 0+ CONTINUATION frames.\ntype writePushPromise struct {\n\tstreamID uint32   // pusher stream\n\tmethod   string   // for :method\n\turl      *url.URL // for :scheme, :authority, :path\n\th        http.Header\n\n\t// Creates an ID for a pushed stream. This runs on serveG just before\n\t// the frame is written. The returned ID is copied to promisedID.\n\tallocatePromisedID func() (uint32, error)\n\tpromisedID         uint32\n}\n\nfunc (w *writePushPromise) staysWithinBuffer(max int) bool {\n\t// TODO: see writeResHeaders.staysWithinBuffer\n\treturn false\n}\n\nfunc (w *writePushPromise) writeFrame(ctx writeContext) error {\n\tenc, buf := ctx.HeaderEncoder()\n\tbuf.Reset()\n\n\tencKV(enc, \":method\", w.method)\n\tencKV(enc, \":scheme\", w.url.Scheme)\n\tencKV(enc, \":authority\", w.url.Host)\n\tencKV(enc, \":path\", w.url.RequestURI())\n\tencodeHeaders(enc, w.h, nil)\n\n\theaderBlock := buf.Bytes()\n\tif len(headerBlock) == 0 {\n\t\tpanic(\"unexpected empty hpack\")\n\t}\n\n\treturn splitHeaderBlock(ctx, headerBlock, w.writeHeaderBlock)\n}\n\nfunc (w *writePushPromise) writeHeaderBlock(ctx writeContext, frag []byte, firstFrag, lastFrag bool) error {\n\tif firstFrag {\n\t\treturn ctx.Framer().WritePushPromise(PushPromiseParam{\n\t\t\tStreamID:      w.streamID,\n\t\t\tPromiseID:     w.promisedID,\n\t\t\tBlockFragment: frag,\n\t\t\tEndHeaders:    lastFrag,\n\t\t})\n\t} else {\n\t\treturn ctx.Framer().WriteContinuation(w.streamID, lastFrag, frag)\n\t}\n}\n\ntype write100ContinueHeadersFrame struct {\n\tstreamID uint32\n}\n\nfunc (w write100ContinueHeadersFrame) writeFrame(ctx writeContext) error {\n\tenc, buf := ctx.HeaderEncoder()\n\tbuf.Reset()\n\tencKV(enc, \":status\", \"100\")\n\treturn ctx.Framer().WriteHeaders(HeadersFrameParam{\n\t\tStreamID:      w.streamID,\n\t\tBlockFragment: buf.Bytes(),\n\t\tEndStream:     false,\n\t\tEndHeaders:    true,\n\t})\n}\n\nfunc (w write100ContinueHeadersFrame) staysWithinBuffer(max int) bool {\n\t// Sloppy but conservative:\n\treturn 9+2*(len(\":status\")+len(\"100\")) <= max\n}\n\ntype writeWindowUpdate struct {\n\tstreamID uint32 // or 0 for conn-level\n\tn        uint32\n}\n\nfunc (wu writeWindowUpdate) staysWithinBuffer(max int) bool { return frameHeaderLen+4 <= max }\n\nfunc (wu writeWindowUpdate) writeFrame(ctx writeContext) error {\n\treturn ctx.Framer().WriteWindowUpdate(wu.streamID, wu.n)\n}\n\n// encodeHeaders encodes an http.Header. If keys is not nil, then (k, h[k])\n// is encoded only if k is in keys.\nfunc encodeHeaders(enc *hpack.Encoder, h http.Header, keys []string) {\n\tif keys == nil {\n\t\tsorter := sorterPool.Get().(*sorter)\n\t\t// Using defer here, since the returned keys from the\n\t\t// sorter.Keys method is only valid until the sorter\n\t\t// is returned:\n\t\tdefer sorterPool.Put(sorter)\n\t\tkeys = sorter.Keys(h)\n\t}\n\tfor _, k := range keys {\n\t\tvv := h[k]\n\t\tk = lowerHeader(k)\n\t\tif !validWireHeaderFieldName(k) {\n\t\t\t// Skip it as backup paranoia. Per\n\t\t\t// golang.org/issue/14048, these should\n\t\t\t// already be rejected at a higher level.\n\t\t\tcontinue\n\t\t}\n\t\tisTE := k == \"transfer-encoding\"\n\t\tfor _, v := range vv {\n\t\t\tif !httpguts.ValidHeaderFieldValue(v) {\n\t\t\t\t// TODO: return an error? golang.org/issue/14048\n\t\t\t\t// For now just omit it.\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\t// TODO: more of \"8.1.2.2 Connection-Specific Header Fields\"\n\t\t\tif isTE && v != \"trailers\" {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tencKV(enc, k, v)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "vendor/golang.org/x/net/http2/writesched.go",
    "content": "// Copyright 2014 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage http2\n\nimport \"fmt\"\n\n// WriteScheduler is the interface implemented by HTTP/2 write schedulers.\n// Methods are never called concurrently.\ntype WriteScheduler interface {\n\t// OpenStream opens a new stream in the write scheduler.\n\t// It is illegal to call this with streamID=0 or with a streamID that is\n\t// already open -- the call may panic.\n\tOpenStream(streamID uint32, options OpenStreamOptions)\n\n\t// CloseStream closes a stream in the write scheduler. Any frames queued on\n\t// this stream should be discarded. It is illegal to call this on a stream\n\t// that is not open -- the call may panic.\n\tCloseStream(streamID uint32)\n\n\t// AdjustStream adjusts the priority of the given stream. This may be called\n\t// on a stream that has not yet been opened or has been closed. Note that\n\t// RFC 7540 allows PRIORITY frames to be sent on streams in any state. See:\n\t// https://tools.ietf.org/html/rfc7540#section-5.1\n\tAdjustStream(streamID uint32, priority PriorityParam)\n\n\t// Push queues a frame in the scheduler. In most cases, this will not be\n\t// called with wr.StreamID()!=0 unless that stream is currently open. The one\n\t// exception is RST_STREAM frames, which may be sent on idle or closed streams.\n\tPush(wr FrameWriteRequest)\n\n\t// Pop dequeues the next frame to write. Returns false if no frames can\n\t// be written. Frames with a given wr.StreamID() are Pop'd in the same\n\t// order they are Push'd.\n\tPop() (wr FrameWriteRequest, ok bool)\n}\n\n// OpenStreamOptions specifies extra options for WriteScheduler.OpenStream.\ntype OpenStreamOptions struct {\n\t// PusherID is zero if the stream was initiated by the client. Otherwise,\n\t// PusherID names the stream that pushed the newly opened stream.\n\tPusherID uint32\n}\n\n// FrameWriteRequest is a request to write a frame.\ntype FrameWriteRequest struct {\n\t// write is the interface value that does the writing, once the\n\t// WriteScheduler has selected this frame to write. The write\n\t// functions are all defined in write.go.\n\twrite writeFramer\n\n\t// stream is the stream on which this frame will be written.\n\t// nil for non-stream frames like PING and SETTINGS.\n\tstream *stream\n\n\t// done, if non-nil, must be a buffered channel with space for\n\t// 1 message and is sent the return value from write (or an\n\t// earlier error) when the frame has been written.\n\tdone chan error\n}\n\n// StreamID returns the id of the stream this frame will be written to.\n// 0 is used for non-stream frames such as PING and SETTINGS.\nfunc (wr FrameWriteRequest) StreamID() uint32 {\n\tif wr.stream == nil {\n\t\tif se, ok := wr.write.(StreamError); ok {\n\t\t\t// (*serverConn).resetStream doesn't set\n\t\t\t// stream because it doesn't necessarily have\n\t\t\t// one. So special case this type of write\n\t\t\t// message.\n\t\t\treturn se.StreamID\n\t\t}\n\t\treturn 0\n\t}\n\treturn wr.stream.id\n}\n\n// DataSize returns the number of flow control bytes that must be consumed\n// to write this entire frame. This is 0 for non-DATA frames.\nfunc (wr FrameWriteRequest) DataSize() int {\n\tif wd, ok := wr.write.(*writeData); ok {\n\t\treturn len(wd.p)\n\t}\n\treturn 0\n}\n\n// Consume consumes min(n, available) bytes from this frame, where available\n// is the number of flow control bytes available on the stream. Consume returns\n// 0, 1, or 2 frames, where the integer return value gives the number of frames\n// returned.\n//\n// If flow control prevents consuming any bytes, this returns (_, _, 0). If\n// the entire frame was consumed, this returns (wr, _, 1). Otherwise, this\n// returns (consumed, rest, 2), where 'consumed' contains the consumed bytes and\n// 'rest' contains the remaining bytes. The consumed bytes are deducted from the\n// underlying stream's flow control budget.\nfunc (wr FrameWriteRequest) Consume(n int32) (FrameWriteRequest, FrameWriteRequest, int) {\n\tvar empty FrameWriteRequest\n\n\t// Non-DATA frames are always consumed whole.\n\twd, ok := wr.write.(*writeData)\n\tif !ok || len(wd.p) == 0 {\n\t\treturn wr, empty, 1\n\t}\n\n\t// Might need to split after applying limits.\n\tallowed := wr.stream.flow.available()\n\tif n < allowed {\n\t\tallowed = n\n\t}\n\tif wr.stream.sc.maxFrameSize < allowed {\n\t\tallowed = wr.stream.sc.maxFrameSize\n\t}\n\tif allowed <= 0 {\n\t\treturn empty, empty, 0\n\t}\n\tif len(wd.p) > int(allowed) {\n\t\twr.stream.flow.take(allowed)\n\t\tconsumed := FrameWriteRequest{\n\t\t\tstream: wr.stream,\n\t\t\twrite: &writeData{\n\t\t\t\tstreamID: wd.streamID,\n\t\t\t\tp:        wd.p[:allowed],\n\t\t\t\t// Even if the original had endStream set, there\n\t\t\t\t// are bytes remaining because len(wd.p) > allowed,\n\t\t\t\t// so we know endStream is false.\n\t\t\t\tendStream: false,\n\t\t\t},\n\t\t\t// Our caller is blocking on the final DATA frame, not\n\t\t\t// this intermediate frame, so no need to wait.\n\t\t\tdone: nil,\n\t\t}\n\t\trest := FrameWriteRequest{\n\t\t\tstream: wr.stream,\n\t\t\twrite: &writeData{\n\t\t\t\tstreamID:  wd.streamID,\n\t\t\t\tp:         wd.p[allowed:],\n\t\t\t\tendStream: wd.endStream,\n\t\t\t},\n\t\t\tdone: wr.done,\n\t\t}\n\t\treturn consumed, rest, 2\n\t}\n\n\t// The frame is consumed whole.\n\t// NB: This cast cannot overflow because allowed is <= math.MaxInt32.\n\twr.stream.flow.take(int32(len(wd.p)))\n\treturn wr, empty, 1\n}\n\n// String is for debugging only.\nfunc (wr FrameWriteRequest) String() string {\n\tvar des string\n\tif s, ok := wr.write.(fmt.Stringer); ok {\n\t\tdes = s.String()\n\t} else {\n\t\tdes = fmt.Sprintf(\"%T\", wr.write)\n\t}\n\treturn fmt.Sprintf(\"[FrameWriteRequest stream=%d, ch=%v, writer=%v]\", wr.StreamID(), wr.done != nil, des)\n}\n\n// replyToWriter sends err to wr.done and panics if the send must block\n// This does nothing if wr.done is nil.\nfunc (wr *FrameWriteRequest) replyToWriter(err error) {\n\tif wr.done == nil {\n\t\treturn\n\t}\n\tselect {\n\tcase wr.done <- err:\n\tdefault:\n\t\tpanic(fmt.Sprintf(\"unbuffered done channel passed in for type %T\", wr.write))\n\t}\n\twr.write = nil // prevent use (assume it's tainted after wr.done send)\n}\n\n// writeQueue is used by implementations of WriteScheduler.\ntype writeQueue struct {\n\ts []FrameWriteRequest\n}\n\nfunc (q *writeQueue) empty() bool { return len(q.s) == 0 }\n\nfunc (q *writeQueue) push(wr FrameWriteRequest) {\n\tq.s = append(q.s, wr)\n}\n\nfunc (q *writeQueue) shift() FrameWriteRequest {\n\tif len(q.s) == 0 {\n\t\tpanic(\"invalid use of queue\")\n\t}\n\twr := q.s[0]\n\t// TODO: less copy-happy queue.\n\tcopy(q.s, q.s[1:])\n\tq.s[len(q.s)-1] = FrameWriteRequest{}\n\tq.s = q.s[:len(q.s)-1]\n\treturn wr\n}\n\n// consume consumes up to n bytes from q.s[0]. If the frame is\n// entirely consumed, it is removed from the queue. If the frame\n// is partially consumed, the frame is kept with the consumed\n// bytes removed. Returns true iff any bytes were consumed.\nfunc (q *writeQueue) consume(n int32) (FrameWriteRequest, bool) {\n\tif len(q.s) == 0 {\n\t\treturn FrameWriteRequest{}, false\n\t}\n\tconsumed, rest, numresult := q.s[0].Consume(n)\n\tswitch numresult {\n\tcase 0:\n\t\treturn FrameWriteRequest{}, false\n\tcase 1:\n\t\tq.shift()\n\tcase 2:\n\t\tq.s[0] = rest\n\t}\n\treturn consumed, true\n}\n\ntype writeQueuePool []*writeQueue\n\n// put inserts an unused writeQueue into the pool.\nfunc (p *writeQueuePool) put(q *writeQueue) {\n\tfor i := range q.s {\n\t\tq.s[i] = FrameWriteRequest{}\n\t}\n\tq.s = q.s[:0]\n\t*p = append(*p, q)\n}\n\n// get returns an empty writeQueue.\nfunc (p *writeQueuePool) get() *writeQueue {\n\tln := len(*p)\n\tif ln == 0 {\n\t\treturn new(writeQueue)\n\t}\n\tx := ln - 1\n\tq := (*p)[x]\n\t(*p)[x] = nil\n\t*p = (*p)[:x]\n\treturn q\n}\n"
  },
  {
    "path": "vendor/golang.org/x/net/http2/writesched_priority.go",
    "content": "// Copyright 2016 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage http2\n\nimport (\n\t\"fmt\"\n\t\"math\"\n\t\"sort\"\n)\n\n// RFC 7540, Section 5.3.5: the default weight is 16.\nconst priorityDefaultWeight = 15 // 16 = 15 + 1\n\n// PriorityWriteSchedulerConfig configures a priorityWriteScheduler.\ntype PriorityWriteSchedulerConfig struct {\n\t// MaxClosedNodesInTree controls the maximum number of closed streams to\n\t// retain in the priority tree. Setting this to zero saves a small amount\n\t// of memory at the cost of performance.\n\t//\n\t// See RFC 7540, Section 5.3.4:\n\t//   \"It is possible for a stream to become closed while prioritization\n\t//   information ... is in transit. ... This potentially creates suboptimal\n\t//   prioritization, since the stream could be given a priority that is\n\t//   different from what is intended. To avoid these problems, an endpoint\n\t//   SHOULD retain stream prioritization state for a period after streams\n\t//   become closed. The longer state is retained, the lower the chance that\n\t//   streams are assigned incorrect or default priority values.\"\n\tMaxClosedNodesInTree int\n\n\t// MaxIdleNodesInTree controls the maximum number of idle streams to\n\t// retain in the priority tree. Setting this to zero saves a small amount\n\t// of memory at the cost of performance.\n\t//\n\t// See RFC 7540, Section 5.3.4:\n\t//   Similarly, streams that are in the \"idle\" state can be assigned\n\t//   priority or become a parent of other streams. This allows for the\n\t//   creation of a grouping node in the dependency tree, which enables\n\t//   more flexible expressions of priority. Idle streams begin with a\n\t//   default priority (Section 5.3.5).\n\tMaxIdleNodesInTree int\n\n\t// ThrottleOutOfOrderWrites enables write throttling to help ensure that\n\t// data is delivered in priority order. This works around a race where\n\t// stream B depends on stream A and both streams are about to call Write\n\t// to queue DATA frames. If B wins the race, a naive scheduler would eagerly\n\t// write as much data from B as possible, but this is suboptimal because A\n\t// is a higher-priority stream. With throttling enabled, we write a small\n\t// amount of data from B to minimize the amount of bandwidth that B can\n\t// steal from A.\n\tThrottleOutOfOrderWrites bool\n}\n\n// NewPriorityWriteScheduler constructs a WriteScheduler that schedules\n// frames by following HTTP/2 priorities as described in RFC 7540 Section 5.3.\n// If cfg is nil, default options are used.\nfunc NewPriorityWriteScheduler(cfg *PriorityWriteSchedulerConfig) WriteScheduler {\n\tif cfg == nil {\n\t\t// For justification of these defaults, see:\n\t\t// https://docs.google.com/document/d/1oLhNg1skaWD4_DtaoCxdSRN5erEXrH-KnLrMwEpOtFY\n\t\tcfg = &PriorityWriteSchedulerConfig{\n\t\t\tMaxClosedNodesInTree:     10,\n\t\t\tMaxIdleNodesInTree:       10,\n\t\t\tThrottleOutOfOrderWrites: false,\n\t\t}\n\t}\n\n\tws := &priorityWriteScheduler{\n\t\tnodes:                make(map[uint32]*priorityNode),\n\t\tmaxClosedNodesInTree: cfg.MaxClosedNodesInTree,\n\t\tmaxIdleNodesInTree:   cfg.MaxIdleNodesInTree,\n\t\tenableWriteThrottle:  cfg.ThrottleOutOfOrderWrites,\n\t}\n\tws.nodes[0] = &ws.root\n\tif cfg.ThrottleOutOfOrderWrites {\n\t\tws.writeThrottleLimit = 1024\n\t} else {\n\t\tws.writeThrottleLimit = math.MaxInt32\n\t}\n\treturn ws\n}\n\ntype priorityNodeState int\n\nconst (\n\tpriorityNodeOpen priorityNodeState = iota\n\tpriorityNodeClosed\n\tpriorityNodeIdle\n)\n\n// priorityNode is a node in an HTTP/2 priority tree.\n// Each node is associated with a single stream ID.\n// See RFC 7540, Section 5.3.\ntype priorityNode struct {\n\tq            writeQueue        // queue of pending frames to write\n\tid           uint32            // id of the stream, or 0 for the root of the tree\n\tweight       uint8             // the actual weight is weight+1, so the value is in [1,256]\n\tstate        priorityNodeState // open | closed | idle\n\tbytes        int64             // number of bytes written by this node, or 0 if closed\n\tsubtreeBytes int64             // sum(node.bytes) of all nodes in this subtree\n\n\t// These links form the priority tree.\n\tparent     *priorityNode\n\tkids       *priorityNode // start of the kids list\n\tprev, next *priorityNode // doubly-linked list of siblings\n}\n\nfunc (n *priorityNode) setParent(parent *priorityNode) {\n\tif n == parent {\n\t\tpanic(\"setParent to self\")\n\t}\n\tif n.parent == parent {\n\t\treturn\n\t}\n\t// Unlink from current parent.\n\tif parent := n.parent; parent != nil {\n\t\tif n.prev == nil {\n\t\t\tparent.kids = n.next\n\t\t} else {\n\t\t\tn.prev.next = n.next\n\t\t}\n\t\tif n.next != nil {\n\t\t\tn.next.prev = n.prev\n\t\t}\n\t}\n\t// Link to new parent.\n\t// If parent=nil, remove n from the tree.\n\t// Always insert at the head of parent.kids (this is assumed by walkReadyInOrder).\n\tn.parent = parent\n\tif parent == nil {\n\t\tn.next = nil\n\t\tn.prev = nil\n\t} else {\n\t\tn.next = parent.kids\n\t\tn.prev = nil\n\t\tif n.next != nil {\n\t\t\tn.next.prev = n\n\t\t}\n\t\tparent.kids = n\n\t}\n}\n\nfunc (n *priorityNode) addBytes(b int64) {\n\tn.bytes += b\n\tfor ; n != nil; n = n.parent {\n\t\tn.subtreeBytes += b\n\t}\n}\n\n// walkReadyInOrder iterates over the tree in priority order, calling f for each node\n// with a non-empty write queue. When f returns true, this funcion returns true and the\n// walk halts. tmp is used as scratch space for sorting.\n//\n// f(n, openParent) takes two arguments: the node to visit, n, and a bool that is true\n// if any ancestor p of n is still open (ignoring the root node).\nfunc (n *priorityNode) walkReadyInOrder(openParent bool, tmp *[]*priorityNode, f func(*priorityNode, bool) bool) bool {\n\tif !n.q.empty() && f(n, openParent) {\n\t\treturn true\n\t}\n\tif n.kids == nil {\n\t\treturn false\n\t}\n\n\t// Don't consider the root \"open\" when updating openParent since\n\t// we can't send data frames on the root stream (only control frames).\n\tif n.id != 0 {\n\t\topenParent = openParent || (n.state == priorityNodeOpen)\n\t}\n\n\t// Common case: only one kid or all kids have the same weight.\n\t// Some clients don't use weights; other clients (like web browsers)\n\t// use mostly-linear priority trees.\n\tw := n.kids.weight\n\tneedSort := false\n\tfor k := n.kids.next; k != nil; k = k.next {\n\t\tif k.weight != w {\n\t\t\tneedSort = true\n\t\t\tbreak\n\t\t}\n\t}\n\tif !needSort {\n\t\tfor k := n.kids; k != nil; k = k.next {\n\t\t\tif k.walkReadyInOrder(openParent, tmp, f) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\t\treturn false\n\t}\n\n\t// Uncommon case: sort the child nodes. We remove the kids from the parent,\n\t// then re-insert after sorting so we can reuse tmp for future sort calls.\n\t*tmp = (*tmp)[:0]\n\tfor n.kids != nil {\n\t\t*tmp = append(*tmp, n.kids)\n\t\tn.kids.setParent(nil)\n\t}\n\tsort.Sort(sortPriorityNodeSiblings(*tmp))\n\tfor i := len(*tmp) - 1; i >= 0; i-- {\n\t\t(*tmp)[i].setParent(n) // setParent inserts at the head of n.kids\n\t}\n\tfor k := n.kids; k != nil; k = k.next {\n\t\tif k.walkReadyInOrder(openParent, tmp, f) {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\ntype sortPriorityNodeSiblings []*priorityNode\n\nfunc (z sortPriorityNodeSiblings) Len() int      { return len(z) }\nfunc (z sortPriorityNodeSiblings) Swap(i, k int) { z[i], z[k] = z[k], z[i] }\nfunc (z sortPriorityNodeSiblings) Less(i, k int) bool {\n\t// Prefer the subtree that has sent fewer bytes relative to its weight.\n\t// See sections 5.3.2 and 5.3.4.\n\twi, bi := float64(z[i].weight+1), float64(z[i].subtreeBytes)\n\twk, bk := float64(z[k].weight+1), float64(z[k].subtreeBytes)\n\tif bi == 0 && bk == 0 {\n\t\treturn wi >= wk\n\t}\n\tif bk == 0 {\n\t\treturn false\n\t}\n\treturn bi/bk <= wi/wk\n}\n\ntype priorityWriteScheduler struct {\n\t// root is the root of the priority tree, where root.id = 0.\n\t// The root queues control frames that are not associated with any stream.\n\troot priorityNode\n\n\t// nodes maps stream ids to priority tree nodes.\n\tnodes map[uint32]*priorityNode\n\n\t// maxID is the maximum stream id in nodes.\n\tmaxID uint32\n\n\t// lists of nodes that have been closed or are idle, but are kept in\n\t// the tree for improved prioritization. When the lengths exceed either\n\t// maxClosedNodesInTree or maxIdleNodesInTree, old nodes are discarded.\n\tclosedNodes, idleNodes []*priorityNode\n\n\t// From the config.\n\tmaxClosedNodesInTree int\n\tmaxIdleNodesInTree   int\n\twriteThrottleLimit   int32\n\tenableWriteThrottle  bool\n\n\t// tmp is scratch space for priorityNode.walkReadyInOrder to reduce allocations.\n\ttmp []*priorityNode\n\n\t// pool of empty queues for reuse.\n\tqueuePool writeQueuePool\n}\n\nfunc (ws *priorityWriteScheduler) OpenStream(streamID uint32, options OpenStreamOptions) {\n\t// The stream may be currently idle but cannot be opened or closed.\n\tif curr := ws.nodes[streamID]; curr != nil {\n\t\tif curr.state != priorityNodeIdle {\n\t\t\tpanic(fmt.Sprintf(\"stream %d already opened\", streamID))\n\t\t}\n\t\tcurr.state = priorityNodeOpen\n\t\treturn\n\t}\n\n\t// RFC 7540, Section 5.3.5:\n\t//  \"All streams are initially assigned a non-exclusive dependency on stream 0x0.\n\t//  Pushed streams initially depend on their associated stream. In both cases,\n\t//  streams are assigned a default weight of 16.\"\n\tparent := ws.nodes[options.PusherID]\n\tif parent == nil {\n\t\tparent = &ws.root\n\t}\n\tn := &priorityNode{\n\t\tq:      *ws.queuePool.get(),\n\t\tid:     streamID,\n\t\tweight: priorityDefaultWeight,\n\t\tstate:  priorityNodeOpen,\n\t}\n\tn.setParent(parent)\n\tws.nodes[streamID] = n\n\tif streamID > ws.maxID {\n\t\tws.maxID = streamID\n\t}\n}\n\nfunc (ws *priorityWriteScheduler) CloseStream(streamID uint32) {\n\tif streamID == 0 {\n\t\tpanic(\"violation of WriteScheduler interface: cannot close stream 0\")\n\t}\n\tif ws.nodes[streamID] == nil {\n\t\tpanic(fmt.Sprintf(\"violation of WriteScheduler interface: unknown stream %d\", streamID))\n\t}\n\tif ws.nodes[streamID].state != priorityNodeOpen {\n\t\tpanic(fmt.Sprintf(\"violation of WriteScheduler interface: stream %d already closed\", streamID))\n\t}\n\n\tn := ws.nodes[streamID]\n\tn.state = priorityNodeClosed\n\tn.addBytes(-n.bytes)\n\n\tq := n.q\n\tws.queuePool.put(&q)\n\tn.q.s = nil\n\tif ws.maxClosedNodesInTree > 0 {\n\t\tws.addClosedOrIdleNode(&ws.closedNodes, ws.maxClosedNodesInTree, n)\n\t} else {\n\t\tws.removeNode(n)\n\t}\n}\n\nfunc (ws *priorityWriteScheduler) AdjustStream(streamID uint32, priority PriorityParam) {\n\tif streamID == 0 {\n\t\tpanic(\"adjustPriority on root\")\n\t}\n\n\t// If streamID does not exist, there are two cases:\n\t// - A closed stream that has been removed (this will have ID <= maxID)\n\t// - An idle stream that is being used for \"grouping\" (this will have ID > maxID)\n\tn := ws.nodes[streamID]\n\tif n == nil {\n\t\tif streamID <= ws.maxID || ws.maxIdleNodesInTree == 0 {\n\t\t\treturn\n\t\t}\n\t\tws.maxID = streamID\n\t\tn = &priorityNode{\n\t\t\tq:      *ws.queuePool.get(),\n\t\t\tid:     streamID,\n\t\t\tweight: priorityDefaultWeight,\n\t\t\tstate:  priorityNodeIdle,\n\t\t}\n\t\tn.setParent(&ws.root)\n\t\tws.nodes[streamID] = n\n\t\tws.addClosedOrIdleNode(&ws.idleNodes, ws.maxIdleNodesInTree, n)\n\t}\n\n\t// Section 5.3.1: A dependency on a stream that is not currently in the tree\n\t// results in that stream being given a default priority (Section 5.3.5).\n\tparent := ws.nodes[priority.StreamDep]\n\tif parent == nil {\n\t\tn.setParent(&ws.root)\n\t\tn.weight = priorityDefaultWeight\n\t\treturn\n\t}\n\n\t// Ignore if the client tries to make a node its own parent.\n\tif n == parent {\n\t\treturn\n\t}\n\n\t// Section 5.3.3:\n\t//   \"If a stream is made dependent on one of its own dependencies, the\n\t//   formerly dependent stream is first moved to be dependent on the\n\t//   reprioritized stream's previous parent. The moved dependency retains\n\t//   its weight.\"\n\t//\n\t// That is: if parent depends on n, move parent to depend on n.parent.\n\tfor x := parent.parent; x != nil; x = x.parent {\n\t\tif x == n {\n\t\t\tparent.setParent(n.parent)\n\t\t\tbreak\n\t\t}\n\t}\n\n\t// Section 5.3.3: The exclusive flag causes the stream to become the sole\n\t// dependency of its parent stream, causing other dependencies to become\n\t// dependent on the exclusive stream.\n\tif priority.Exclusive {\n\t\tk := parent.kids\n\t\tfor k != nil {\n\t\t\tnext := k.next\n\t\t\tif k != n {\n\t\t\t\tk.setParent(n)\n\t\t\t}\n\t\t\tk = next\n\t\t}\n\t}\n\n\tn.setParent(parent)\n\tn.weight = priority.Weight\n}\n\nfunc (ws *priorityWriteScheduler) Push(wr FrameWriteRequest) {\n\tvar n *priorityNode\n\tif id := wr.StreamID(); id == 0 {\n\t\tn = &ws.root\n\t} else {\n\t\tn = ws.nodes[id]\n\t\tif n == nil {\n\t\t\t// id is an idle or closed stream. wr should not be a HEADERS or\n\t\t\t// DATA frame. However, wr can be a RST_STREAM. In this case, we\n\t\t\t// push wr onto the root, rather than creating a new priorityNode,\n\t\t\t// since RST_STREAM is tiny and the stream's priority is unknown\n\t\t\t// anyway. See issue #17919.\n\t\t\tif wr.DataSize() > 0 {\n\t\t\t\tpanic(\"add DATA on non-open stream\")\n\t\t\t}\n\t\t\tn = &ws.root\n\t\t}\n\t}\n\tn.q.push(wr)\n}\n\nfunc (ws *priorityWriteScheduler) Pop() (wr FrameWriteRequest, ok bool) {\n\tws.root.walkReadyInOrder(false, &ws.tmp, func(n *priorityNode, openParent bool) bool {\n\t\tlimit := int32(math.MaxInt32)\n\t\tif openParent {\n\t\t\tlimit = ws.writeThrottleLimit\n\t\t}\n\t\twr, ok = n.q.consume(limit)\n\t\tif !ok {\n\t\t\treturn false\n\t\t}\n\t\tn.addBytes(int64(wr.DataSize()))\n\t\t// If B depends on A and B continuously has data available but A\n\t\t// does not, gradually increase the throttling limit to allow B to\n\t\t// steal more and more bandwidth from A.\n\t\tif openParent {\n\t\t\tws.writeThrottleLimit += 1024\n\t\t\tif ws.writeThrottleLimit < 0 {\n\t\t\t\tws.writeThrottleLimit = math.MaxInt32\n\t\t\t}\n\t\t} else if ws.enableWriteThrottle {\n\t\t\tws.writeThrottleLimit = 1024\n\t\t}\n\t\treturn true\n\t})\n\treturn wr, ok\n}\n\nfunc (ws *priorityWriteScheduler) addClosedOrIdleNode(list *[]*priorityNode, maxSize int, n *priorityNode) {\n\tif maxSize == 0 {\n\t\treturn\n\t}\n\tif len(*list) == maxSize {\n\t\t// Remove the oldest node, then shift left.\n\t\tws.removeNode((*list)[0])\n\t\tx := (*list)[1:]\n\t\tcopy(*list, x)\n\t\t*list = (*list)[:len(x)]\n\t}\n\t*list = append(*list, n)\n}\n\nfunc (ws *priorityWriteScheduler) removeNode(n *priorityNode) {\n\tfor k := n.kids; k != nil; k = k.next {\n\t\tk.setParent(n.parent)\n\t}\n\tn.setParent(nil)\n\tdelete(ws.nodes, n.id)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/net/http2/writesched_random.go",
    "content": "// Copyright 2014 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage http2\n\nimport \"math\"\n\n// NewRandomWriteScheduler constructs a WriteScheduler that ignores HTTP/2\n// priorities. Control frames like SETTINGS and PING are written before DATA\n// frames, but if no control frames are queued and multiple streams have queued\n// HEADERS or DATA frames, Pop selects a ready stream arbitrarily.\nfunc NewRandomWriteScheduler() WriteScheduler {\n\treturn &randomWriteScheduler{sq: make(map[uint32]*writeQueue)}\n}\n\ntype randomWriteScheduler struct {\n\t// zero are frames not associated with a specific stream.\n\tzero writeQueue\n\n\t// sq contains the stream-specific queues, keyed by stream ID.\n\t// When a stream is idle or closed, it's deleted from the map.\n\tsq map[uint32]*writeQueue\n\n\t// pool of empty queues for reuse.\n\tqueuePool writeQueuePool\n}\n\nfunc (ws *randomWriteScheduler) OpenStream(streamID uint32, options OpenStreamOptions) {\n\t// no-op: idle streams are not tracked\n}\n\nfunc (ws *randomWriteScheduler) CloseStream(streamID uint32) {\n\tq, ok := ws.sq[streamID]\n\tif !ok {\n\t\treturn\n\t}\n\tdelete(ws.sq, streamID)\n\tws.queuePool.put(q)\n}\n\nfunc (ws *randomWriteScheduler) AdjustStream(streamID uint32, priority PriorityParam) {\n\t// no-op: priorities are ignored\n}\n\nfunc (ws *randomWriteScheduler) Push(wr FrameWriteRequest) {\n\tid := wr.StreamID()\n\tif id == 0 {\n\t\tws.zero.push(wr)\n\t\treturn\n\t}\n\tq, ok := ws.sq[id]\n\tif !ok {\n\t\tq = ws.queuePool.get()\n\t\tws.sq[id] = q\n\t}\n\tq.push(wr)\n}\n\nfunc (ws *randomWriteScheduler) Pop() (FrameWriteRequest, bool) {\n\t// Control frames first.\n\tif !ws.zero.empty() {\n\t\treturn ws.zero.shift(), true\n\t}\n\t// Iterate over all non-idle streams until finding one that can be consumed.\n\tfor _, q := range ws.sq {\n\t\tif wr, ok := q.consume(math.MaxInt32); ok {\n\t\t\treturn wr, true\n\t\t}\n\t}\n\treturn FrameWriteRequest{}, false\n}\n"
  },
  {
    "path": "vendor/golang.org/x/net/idna/idna10.0.0.go",
    "content": "// Code generated by running \"go generate\" in golang.org/x/text. DO NOT EDIT.\n\n// Copyright 2016 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build go1.10\n\n// Package idna implements IDNA2008 using the compatibility processing\n// defined by UTS (Unicode Technical Standard) #46, which defines a standard to\n// deal with the transition from IDNA2003.\n//\n// IDNA2008 (Internationalized Domain Names for Applications), is defined in RFC\n// 5890, RFC 5891, RFC 5892, RFC 5893 and RFC 5894.\n// UTS #46 is defined in https://www.unicode.org/reports/tr46.\n// See https://unicode.org/cldr/utility/idna.jsp for a visualization of the\n// differences between these two standards.\npackage idna // import \"golang.org/x/net/idna\"\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n\t\"unicode/utf8\"\n\n\t\"golang.org/x/text/secure/bidirule\"\n\t\"golang.org/x/text/unicode/bidi\"\n\t\"golang.org/x/text/unicode/norm\"\n)\n\n// NOTE: Unlike common practice in Go APIs, the functions will return a\n// sanitized domain name in case of errors. Browsers sometimes use a partially\n// evaluated string as lookup.\n// TODO: the current error handling is, in my opinion, the least opinionated.\n// Other strategies are also viable, though:\n// Option 1) Return an empty string in case of error, but allow the user to\n//    specify explicitly which errors to ignore.\n// Option 2) Return the partially evaluated string if it is itself a valid\n//    string, otherwise return the empty string in case of error.\n// Option 3) Option 1 and 2.\n// Option 4) Always return an empty string for now and implement Option 1 as\n//    needed, and document that the return string may not be empty in case of\n//    error in the future.\n// I think Option 1 is best, but it is quite opinionated.\n\n// ToASCII is a wrapper for Punycode.ToASCII.\nfunc ToASCII(s string) (string, error) {\n\treturn Punycode.process(s, true)\n}\n\n// ToUnicode is a wrapper for Punycode.ToUnicode.\nfunc ToUnicode(s string) (string, error) {\n\treturn Punycode.process(s, false)\n}\n\n// An Option configures a Profile at creation time.\ntype Option func(*options)\n\n// Transitional sets a Profile to use the Transitional mapping as defined in UTS\n// #46. This will cause, for example, \"ß\" to be mapped to \"ss\". Using the\n// transitional mapping provides a compromise between IDNA2003 and IDNA2008\n// compatibility. It is used by most browsers when resolving domain names. This\n// option is only meaningful if combined with MapForLookup.\nfunc Transitional(transitional bool) Option {\n\treturn func(o *options) { o.transitional = true }\n}\n\n// VerifyDNSLength sets whether a Profile should fail if any of the IDN parts\n// are longer than allowed by the RFC.\nfunc VerifyDNSLength(verify bool) Option {\n\treturn func(o *options) { o.verifyDNSLength = verify }\n}\n\n// RemoveLeadingDots removes leading label separators. Leading runes that map to\n// dots, such as U+3002 IDEOGRAPHIC FULL STOP, are removed as well.\n//\n// This is the behavior suggested by the UTS #46 and is adopted by some\n// browsers.\nfunc RemoveLeadingDots(remove bool) Option {\n\treturn func(o *options) { o.removeLeadingDots = remove }\n}\n\n// ValidateLabels sets whether to check the mandatory label validation criteria\n// as defined in Section 5.4 of RFC 5891. This includes testing for correct use\n// of hyphens ('-'), normalization, validity of runes, and the context rules.\nfunc ValidateLabels(enable bool) Option {\n\treturn func(o *options) {\n\t\t// Don't override existing mappings, but set one that at least checks\n\t\t// normalization if it is not set.\n\t\tif o.mapping == nil && enable {\n\t\t\to.mapping = normalize\n\t\t}\n\t\to.trie = trie\n\t\to.validateLabels = enable\n\t\to.fromPuny = validateFromPunycode\n\t}\n}\n\n// StrictDomainName limits the set of permissible ASCII characters to those\n// allowed in domain names as defined in RFC 1034 (A-Z, a-z, 0-9 and the\n// hyphen). This is set by default for MapForLookup and ValidateForRegistration.\n//\n// This option is useful, for instance, for browsers that allow characters\n// outside this range, for example a '_' (U+005F LOW LINE). See\n// http://www.rfc-editor.org/std/std3.txt for more details This option\n// corresponds to the UseSTD3ASCIIRules option in UTS #46.\nfunc StrictDomainName(use bool) Option {\n\treturn func(o *options) {\n\t\to.trie = trie\n\t\to.useSTD3Rules = use\n\t\to.fromPuny = validateFromPunycode\n\t}\n}\n\n// NOTE: the following options pull in tables. The tables should not be linked\n// in as long as the options are not used.\n\n// BidiRule enables the Bidi rule as defined in RFC 5893. Any application\n// that relies on proper validation of labels should include this rule.\nfunc BidiRule() Option {\n\treturn func(o *options) { o.bidirule = bidirule.ValidString }\n}\n\n// ValidateForRegistration sets validation options to verify that a given IDN is\n// properly formatted for registration as defined by Section 4 of RFC 5891.\nfunc ValidateForRegistration() Option {\n\treturn func(o *options) {\n\t\to.mapping = validateRegistration\n\t\tStrictDomainName(true)(o)\n\t\tValidateLabels(true)(o)\n\t\tVerifyDNSLength(true)(o)\n\t\tBidiRule()(o)\n\t}\n}\n\n// MapForLookup sets validation and mapping options such that a given IDN is\n// transformed for domain name lookup according to the requirements set out in\n// Section 5 of RFC 5891. The mappings follow the recommendations of RFC 5894,\n// RFC 5895 and UTS 46. It does not add the Bidi Rule. Use the BidiRule option\n// to add this check.\n//\n// The mappings include normalization and mapping case, width and other\n// compatibility mappings.\nfunc MapForLookup() Option {\n\treturn func(o *options) {\n\t\to.mapping = validateAndMap\n\t\tStrictDomainName(true)(o)\n\t\tValidateLabels(true)(o)\n\t}\n}\n\ntype options struct {\n\ttransitional      bool\n\tuseSTD3Rules      bool\n\tvalidateLabels    bool\n\tverifyDNSLength   bool\n\tremoveLeadingDots bool\n\n\ttrie *idnaTrie\n\n\t// fromPuny calls validation rules when converting A-labels to U-labels.\n\tfromPuny func(p *Profile, s string) error\n\n\t// mapping implements a validation and mapping step as defined in RFC 5895\n\t// or UTS 46, tailored to, for example, domain registration or lookup.\n\tmapping func(p *Profile, s string) (mapped string, isBidi bool, err error)\n\n\t// bidirule, if specified, checks whether s conforms to the Bidi Rule\n\t// defined in RFC 5893.\n\tbidirule func(s string) bool\n}\n\n// A Profile defines the configuration of an IDNA mapper.\ntype Profile struct {\n\toptions\n}\n\nfunc apply(o *options, opts []Option) {\n\tfor _, f := range opts {\n\t\tf(o)\n\t}\n}\n\n// New creates a new Profile.\n//\n// With no options, the returned Profile is the most permissive and equals the\n// Punycode Profile. Options can be passed to further restrict the Profile. The\n// MapForLookup and ValidateForRegistration options set a collection of options,\n// for lookup and registration purposes respectively, which can be tailored by\n// adding more fine-grained options, where later options override earlier\n// options.\nfunc New(o ...Option) *Profile {\n\tp := &Profile{}\n\tapply(&p.options, o)\n\treturn p\n}\n\n// ToASCII converts a domain or domain label to its ASCII form. For example,\n// ToASCII(\"bücher.example.com\") is \"xn--bcher-kva.example.com\", and\n// ToASCII(\"golang\") is \"golang\". If an error is encountered it will return\n// an error and a (partially) processed result.\nfunc (p *Profile) ToASCII(s string) (string, error) {\n\treturn p.process(s, true)\n}\n\n// ToUnicode converts a domain or domain label to its Unicode form. For example,\n// ToUnicode(\"xn--bcher-kva.example.com\") is \"bücher.example.com\", and\n// ToUnicode(\"golang\") is \"golang\". If an error is encountered it will return\n// an error and a (partially) processed result.\nfunc (p *Profile) ToUnicode(s string) (string, error) {\n\tpp := *p\n\tpp.transitional = false\n\treturn pp.process(s, false)\n}\n\n// String reports a string with a description of the profile for debugging\n// purposes. The string format may change with different versions.\nfunc (p *Profile) String() string {\n\ts := \"\"\n\tif p.transitional {\n\t\ts = \"Transitional\"\n\t} else {\n\t\ts = \"NonTransitional\"\n\t}\n\tif p.useSTD3Rules {\n\t\ts += \":UseSTD3Rules\"\n\t}\n\tif p.validateLabels {\n\t\ts += \":ValidateLabels\"\n\t}\n\tif p.verifyDNSLength {\n\t\ts += \":VerifyDNSLength\"\n\t}\n\treturn s\n}\n\nvar (\n\t// Punycode is a Profile that does raw punycode processing with a minimum\n\t// of validation.\n\tPunycode *Profile = punycode\n\n\t// Lookup is the recommended profile for looking up domain names, according\n\t// to Section 5 of RFC 5891. The exact configuration of this profile may\n\t// change over time.\n\tLookup *Profile = lookup\n\n\t// Display is the recommended profile for displaying domain names.\n\t// The configuration of this profile may change over time.\n\tDisplay *Profile = display\n\n\t// Registration is the recommended profile for checking whether a given\n\t// IDN is valid for registration, according to Section 4 of RFC 5891.\n\tRegistration *Profile = registration\n\n\tpunycode = &Profile{}\n\tlookup   = &Profile{options{\n\t\ttransitional:   true,\n\t\tuseSTD3Rules:   true,\n\t\tvalidateLabels: true,\n\t\ttrie:           trie,\n\t\tfromPuny:       validateFromPunycode,\n\t\tmapping:        validateAndMap,\n\t\tbidirule:       bidirule.ValidString,\n\t}}\n\tdisplay = &Profile{options{\n\t\tuseSTD3Rules:   true,\n\t\tvalidateLabels: true,\n\t\ttrie:           trie,\n\t\tfromPuny:       validateFromPunycode,\n\t\tmapping:        validateAndMap,\n\t\tbidirule:       bidirule.ValidString,\n\t}}\n\tregistration = &Profile{options{\n\t\tuseSTD3Rules:    true,\n\t\tvalidateLabels:  true,\n\t\tverifyDNSLength: true,\n\t\ttrie:            trie,\n\t\tfromPuny:        validateFromPunycode,\n\t\tmapping:         validateRegistration,\n\t\tbidirule:        bidirule.ValidString,\n\t}}\n\n\t// TODO: profiles\n\t// Register: recommended for approving domain names: don't do any mappings\n\t// but rather reject on invalid input. Bundle or block deviation characters.\n)\n\ntype labelError struct{ label, code_ string }\n\nfunc (e labelError) code() string { return e.code_ }\nfunc (e labelError) Error() string {\n\treturn fmt.Sprintf(\"idna: invalid label %q\", e.label)\n}\n\ntype runeError rune\n\nfunc (e runeError) code() string { return \"P1\" }\nfunc (e runeError) Error() string {\n\treturn fmt.Sprintf(\"idna: disallowed rune %U\", e)\n}\n\n// process implements the algorithm described in section 4 of UTS #46,\n// see https://www.unicode.org/reports/tr46.\nfunc (p *Profile) process(s string, toASCII bool) (string, error) {\n\tvar err error\n\tvar isBidi bool\n\tif p.mapping != nil {\n\t\ts, isBidi, err = p.mapping(p, s)\n\t}\n\t// Remove leading empty labels.\n\tif p.removeLeadingDots {\n\t\tfor ; len(s) > 0 && s[0] == '.'; s = s[1:] {\n\t\t}\n\t}\n\t// TODO: allow for a quick check of the tables data.\n\t// It seems like we should only create this error on ToASCII, but the\n\t// UTS 46 conformance tests suggests we should always check this.\n\tif err == nil && p.verifyDNSLength && s == \"\" {\n\t\terr = &labelError{s, \"A4\"}\n\t}\n\tlabels := labelIter{orig: s}\n\tfor ; !labels.done(); labels.next() {\n\t\tlabel := labels.label()\n\t\tif label == \"\" {\n\t\t\t// Empty labels are not okay. The label iterator skips the last\n\t\t\t// label if it is empty.\n\t\t\tif err == nil && p.verifyDNSLength {\n\t\t\t\terr = &labelError{s, \"A4\"}\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\tif strings.HasPrefix(label, acePrefix) {\n\t\t\tu, err2 := decode(label[len(acePrefix):])\n\t\t\tif err2 != nil {\n\t\t\t\tif err == nil {\n\t\t\t\t\terr = err2\n\t\t\t\t}\n\t\t\t\t// Spec says keep the old label.\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tisBidi = isBidi || bidirule.DirectionString(u) != bidi.LeftToRight\n\t\t\tlabels.set(u)\n\t\t\tif err == nil && p.validateLabels {\n\t\t\t\terr = p.fromPuny(p, u)\n\t\t\t}\n\t\t\tif err == nil {\n\t\t\t\t// This should be called on NonTransitional, according to the\n\t\t\t\t// spec, but that currently does not have any effect. Use the\n\t\t\t\t// original profile to preserve options.\n\t\t\t\terr = p.validateLabel(u)\n\t\t\t}\n\t\t} else if err == nil {\n\t\t\terr = p.validateLabel(label)\n\t\t}\n\t}\n\tif isBidi && p.bidirule != nil && err == nil {\n\t\tfor labels.reset(); !labels.done(); labels.next() {\n\t\t\tif !p.bidirule(labels.label()) {\n\t\t\t\terr = &labelError{s, \"B\"}\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\tif toASCII {\n\t\tfor labels.reset(); !labels.done(); labels.next() {\n\t\t\tlabel := labels.label()\n\t\t\tif !ascii(label) {\n\t\t\t\ta, err2 := encode(acePrefix, label)\n\t\t\t\tif err == nil {\n\t\t\t\t\terr = err2\n\t\t\t\t}\n\t\t\t\tlabel = a\n\t\t\t\tlabels.set(a)\n\t\t\t}\n\t\t\tn := len(label)\n\t\t\tif p.verifyDNSLength && err == nil && (n == 0 || n > 63) {\n\t\t\t\terr = &labelError{label, \"A4\"}\n\t\t\t}\n\t\t}\n\t}\n\ts = labels.result()\n\tif toASCII && p.verifyDNSLength && err == nil {\n\t\t// Compute the length of the domain name minus the root label and its dot.\n\t\tn := len(s)\n\t\tif n > 0 && s[n-1] == '.' {\n\t\t\tn--\n\t\t}\n\t\tif len(s) < 1 || n > 253 {\n\t\t\terr = &labelError{s, \"A4\"}\n\t\t}\n\t}\n\treturn s, err\n}\n\nfunc normalize(p *Profile, s string) (mapped string, isBidi bool, err error) {\n\t// TODO: consider first doing a quick check to see if any of these checks\n\t// need to be done. This will make it slower in the general case, but\n\t// faster in the common case.\n\tmapped = norm.NFC.String(s)\n\tisBidi = bidirule.DirectionString(mapped) == bidi.RightToLeft\n\treturn mapped, isBidi, nil\n}\n\nfunc validateRegistration(p *Profile, s string) (idem string, bidi bool, err error) {\n\t// TODO: filter need for normalization in loop below.\n\tif !norm.NFC.IsNormalString(s) {\n\t\treturn s, false, &labelError{s, \"V1\"}\n\t}\n\tfor i := 0; i < len(s); {\n\t\tv, sz := trie.lookupString(s[i:])\n\t\tif sz == 0 {\n\t\t\treturn s, bidi, runeError(utf8.RuneError)\n\t\t}\n\t\tbidi = bidi || info(v).isBidi(s[i:])\n\t\t// Copy bytes not copied so far.\n\t\tswitch p.simplify(info(v).category()) {\n\t\t// TODO: handle the NV8 defined in the Unicode idna data set to allow\n\t\t// for strict conformance to IDNA2008.\n\t\tcase valid, deviation:\n\t\tcase disallowed, mapped, unknown, ignored:\n\t\t\tr, _ := utf8.DecodeRuneInString(s[i:])\n\t\t\treturn s, bidi, runeError(r)\n\t\t}\n\t\ti += sz\n\t}\n\treturn s, bidi, nil\n}\n\nfunc (c info) isBidi(s string) bool {\n\tif !c.isMapped() {\n\t\treturn c&attributesMask == rtl\n\t}\n\t// TODO: also store bidi info for mapped data. This is possible, but a bit\n\t// cumbersome and not for the common case.\n\tp, _ := bidi.LookupString(s)\n\tswitch p.Class() {\n\tcase bidi.R, bidi.AL, bidi.AN:\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc validateAndMap(p *Profile, s string) (vm string, bidi bool, err error) {\n\tvar (\n\t\tb []byte\n\t\tk int\n\t)\n\t// combinedInfoBits contains the or-ed bits of all runes. We use this\n\t// to derive the mayNeedNorm bit later. This may trigger normalization\n\t// overeagerly, but it will not do so in the common case. The end result\n\t// is another 10% saving on BenchmarkProfile for the common case.\n\tvar combinedInfoBits info\n\tfor i := 0; i < len(s); {\n\t\tv, sz := trie.lookupString(s[i:])\n\t\tif sz == 0 {\n\t\t\tb = append(b, s[k:i]...)\n\t\t\tb = append(b, \"\\ufffd\"...)\n\t\t\tk = len(s)\n\t\t\tif err == nil {\n\t\t\t\terr = runeError(utf8.RuneError)\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\t\tcombinedInfoBits |= info(v)\n\t\tbidi = bidi || info(v).isBidi(s[i:])\n\t\tstart := i\n\t\ti += sz\n\t\t// Copy bytes not copied so far.\n\t\tswitch p.simplify(info(v).category()) {\n\t\tcase valid:\n\t\t\tcontinue\n\t\tcase disallowed:\n\t\t\tif err == nil {\n\t\t\t\tr, _ := utf8.DecodeRuneInString(s[start:])\n\t\t\t\terr = runeError(r)\n\t\t\t}\n\t\t\tcontinue\n\t\tcase mapped, deviation:\n\t\t\tb = append(b, s[k:start]...)\n\t\t\tb = info(v).appendMapping(b, s[start:i])\n\t\tcase ignored:\n\t\t\tb = append(b, s[k:start]...)\n\t\t\t// drop the rune\n\t\tcase unknown:\n\t\t\tb = append(b, s[k:start]...)\n\t\t\tb = append(b, \"\\ufffd\"...)\n\t\t}\n\t\tk = i\n\t}\n\tif k == 0 {\n\t\t// No changes so far.\n\t\tif combinedInfoBits&mayNeedNorm != 0 {\n\t\t\ts = norm.NFC.String(s)\n\t\t}\n\t} else {\n\t\tb = append(b, s[k:]...)\n\t\tif norm.NFC.QuickSpan(b) != len(b) {\n\t\t\tb = norm.NFC.Bytes(b)\n\t\t}\n\t\t// TODO: the punycode converters require strings as input.\n\t\ts = string(b)\n\t}\n\treturn s, bidi, err\n}\n\n// A labelIter allows iterating over domain name labels.\ntype labelIter struct {\n\torig     string\n\tslice    []string\n\tcurStart int\n\tcurEnd   int\n\ti        int\n}\n\nfunc (l *labelIter) reset() {\n\tl.curStart = 0\n\tl.curEnd = 0\n\tl.i = 0\n}\n\nfunc (l *labelIter) done() bool {\n\treturn l.curStart >= len(l.orig)\n}\n\nfunc (l *labelIter) result() string {\n\tif l.slice != nil {\n\t\treturn strings.Join(l.slice, \".\")\n\t}\n\treturn l.orig\n}\n\nfunc (l *labelIter) label() string {\n\tif l.slice != nil {\n\t\treturn l.slice[l.i]\n\t}\n\tp := strings.IndexByte(l.orig[l.curStart:], '.')\n\tl.curEnd = l.curStart + p\n\tif p == -1 {\n\t\tl.curEnd = len(l.orig)\n\t}\n\treturn l.orig[l.curStart:l.curEnd]\n}\n\n// next sets the value to the next label. It skips the last label if it is empty.\nfunc (l *labelIter) next() {\n\tl.i++\n\tif l.slice != nil {\n\t\tif l.i >= len(l.slice) || l.i == len(l.slice)-1 && l.slice[l.i] == \"\" {\n\t\t\tl.curStart = len(l.orig)\n\t\t}\n\t} else {\n\t\tl.curStart = l.curEnd + 1\n\t\tif l.curStart == len(l.orig)-1 && l.orig[l.curStart] == '.' {\n\t\t\tl.curStart = len(l.orig)\n\t\t}\n\t}\n}\n\nfunc (l *labelIter) set(s string) {\n\tif l.slice == nil {\n\t\tl.slice = strings.Split(l.orig, \".\")\n\t}\n\tl.slice[l.i] = s\n}\n\n// acePrefix is the ASCII Compatible Encoding prefix.\nconst acePrefix = \"xn--\"\n\nfunc (p *Profile) simplify(cat category) category {\n\tswitch cat {\n\tcase disallowedSTD3Mapped:\n\t\tif p.useSTD3Rules {\n\t\t\tcat = disallowed\n\t\t} else {\n\t\t\tcat = mapped\n\t\t}\n\tcase disallowedSTD3Valid:\n\t\tif p.useSTD3Rules {\n\t\t\tcat = disallowed\n\t\t} else {\n\t\t\tcat = valid\n\t\t}\n\tcase deviation:\n\t\tif !p.transitional {\n\t\t\tcat = valid\n\t\t}\n\tcase validNV8, validXV8:\n\t\t// TODO: handle V2008\n\t\tcat = valid\n\t}\n\treturn cat\n}\n\nfunc validateFromPunycode(p *Profile, s string) error {\n\tif !norm.NFC.IsNormalString(s) {\n\t\treturn &labelError{s, \"V1\"}\n\t}\n\t// TODO: detect whether string may have to be normalized in the following\n\t// loop.\n\tfor i := 0; i < len(s); {\n\t\tv, sz := trie.lookupString(s[i:])\n\t\tif sz == 0 {\n\t\t\treturn runeError(utf8.RuneError)\n\t\t}\n\t\tif c := p.simplify(info(v).category()); c != valid && c != deviation {\n\t\t\treturn &labelError{s, \"V6\"}\n\t\t}\n\t\ti += sz\n\t}\n\treturn nil\n}\n\nconst (\n\tzwnj = \"\\u200c\"\n\tzwj  = \"\\u200d\"\n)\n\ntype joinState int8\n\nconst (\n\tstateStart joinState = iota\n\tstateVirama\n\tstateBefore\n\tstateBeforeVirama\n\tstateAfter\n\tstateFAIL\n)\n\nvar joinStates = [][numJoinTypes]joinState{\n\tstateStart: {\n\t\tjoiningL:   stateBefore,\n\t\tjoiningD:   stateBefore,\n\t\tjoinZWNJ:   stateFAIL,\n\t\tjoinZWJ:    stateFAIL,\n\t\tjoinVirama: stateVirama,\n\t},\n\tstateVirama: {\n\t\tjoiningL: stateBefore,\n\t\tjoiningD: stateBefore,\n\t},\n\tstateBefore: {\n\t\tjoiningL:   stateBefore,\n\t\tjoiningD:   stateBefore,\n\t\tjoiningT:   stateBefore,\n\t\tjoinZWNJ:   stateAfter,\n\t\tjoinZWJ:    stateFAIL,\n\t\tjoinVirama: stateBeforeVirama,\n\t},\n\tstateBeforeVirama: {\n\t\tjoiningL: stateBefore,\n\t\tjoiningD: stateBefore,\n\t\tjoiningT: stateBefore,\n\t},\n\tstateAfter: {\n\t\tjoiningL:   stateFAIL,\n\t\tjoiningD:   stateBefore,\n\t\tjoiningT:   stateAfter,\n\t\tjoiningR:   stateStart,\n\t\tjoinZWNJ:   stateFAIL,\n\t\tjoinZWJ:    stateFAIL,\n\t\tjoinVirama: stateAfter, // no-op as we can't accept joiners here\n\t},\n\tstateFAIL: {\n\t\t0:          stateFAIL,\n\t\tjoiningL:   stateFAIL,\n\t\tjoiningD:   stateFAIL,\n\t\tjoiningT:   stateFAIL,\n\t\tjoiningR:   stateFAIL,\n\t\tjoinZWNJ:   stateFAIL,\n\t\tjoinZWJ:    stateFAIL,\n\t\tjoinVirama: stateFAIL,\n\t},\n}\n\n// validateLabel validates the criteria from Section 4.1. Item 1, 4, and 6 are\n// already implicitly satisfied by the overall implementation.\nfunc (p *Profile) validateLabel(s string) (err error) {\n\tif s == \"\" {\n\t\tif p.verifyDNSLength {\n\t\t\treturn &labelError{s, \"A4\"}\n\t\t}\n\t\treturn nil\n\t}\n\tif !p.validateLabels {\n\t\treturn nil\n\t}\n\ttrie := p.trie // p.validateLabels is only set if trie is set.\n\tif len(s) > 4 && s[2] == '-' && s[3] == '-' {\n\t\treturn &labelError{s, \"V2\"}\n\t}\n\tif s[0] == '-' || s[len(s)-1] == '-' {\n\t\treturn &labelError{s, \"V3\"}\n\t}\n\t// TODO: merge the use of this in the trie.\n\tv, sz := trie.lookupString(s)\n\tx := info(v)\n\tif x.isModifier() {\n\t\treturn &labelError{s, \"V5\"}\n\t}\n\t// Quickly return in the absence of zero-width (non) joiners.\n\tif strings.Index(s, zwj) == -1 && strings.Index(s, zwnj) == -1 {\n\t\treturn nil\n\t}\n\tst := stateStart\n\tfor i := 0; ; {\n\t\tjt := x.joinType()\n\t\tif s[i:i+sz] == zwj {\n\t\t\tjt = joinZWJ\n\t\t} else if s[i:i+sz] == zwnj {\n\t\t\tjt = joinZWNJ\n\t\t}\n\t\tst = joinStates[st][jt]\n\t\tif x.isViramaModifier() {\n\t\t\tst = joinStates[st][joinVirama]\n\t\t}\n\t\tif i += sz; i == len(s) {\n\t\t\tbreak\n\t\t}\n\t\tv, sz = trie.lookupString(s[i:])\n\t\tx = info(v)\n\t}\n\tif st == stateFAIL || st == stateAfter {\n\t\treturn &labelError{s, \"C\"}\n\t}\n\treturn nil\n}\n\nfunc ascii(s string) bool {\n\tfor i := 0; i < len(s); i++ {\n\t\tif s[i] >= utf8.RuneSelf {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n"
  },
  {
    "path": "vendor/golang.org/x/net/idna/idna9.0.0.go",
    "content": "// Code generated by running \"go generate\" in golang.org/x/text. DO NOT EDIT.\n\n// Copyright 2016 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build !go1.10\n\n// Package idna implements IDNA2008 using the compatibility processing\n// defined by UTS (Unicode Technical Standard) #46, which defines a standard to\n// deal with the transition from IDNA2003.\n//\n// IDNA2008 (Internationalized Domain Names for Applications), is defined in RFC\n// 5890, RFC 5891, RFC 5892, RFC 5893 and RFC 5894.\n// UTS #46 is defined in https://www.unicode.org/reports/tr46.\n// See https://unicode.org/cldr/utility/idna.jsp for a visualization of the\n// differences between these two standards.\npackage idna // import \"golang.org/x/net/idna\"\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n\t\"unicode/utf8\"\n\n\t\"golang.org/x/text/secure/bidirule\"\n\t\"golang.org/x/text/unicode/norm\"\n)\n\n// NOTE: Unlike common practice in Go APIs, the functions will return a\n// sanitized domain name in case of errors. Browsers sometimes use a partially\n// evaluated string as lookup.\n// TODO: the current error handling is, in my opinion, the least opinionated.\n// Other strategies are also viable, though:\n// Option 1) Return an empty string in case of error, but allow the user to\n//    specify explicitly which errors to ignore.\n// Option 2) Return the partially evaluated string if it is itself a valid\n//    string, otherwise return the empty string in case of error.\n// Option 3) Option 1 and 2.\n// Option 4) Always return an empty string for now and implement Option 1 as\n//    needed, and document that the return string may not be empty in case of\n//    error in the future.\n// I think Option 1 is best, but it is quite opinionated.\n\n// ToASCII is a wrapper for Punycode.ToASCII.\nfunc ToASCII(s string) (string, error) {\n\treturn Punycode.process(s, true)\n}\n\n// ToUnicode is a wrapper for Punycode.ToUnicode.\nfunc ToUnicode(s string) (string, error) {\n\treturn Punycode.process(s, false)\n}\n\n// An Option configures a Profile at creation time.\ntype Option func(*options)\n\n// Transitional sets a Profile to use the Transitional mapping as defined in UTS\n// #46. This will cause, for example, \"ß\" to be mapped to \"ss\". Using the\n// transitional mapping provides a compromise between IDNA2003 and IDNA2008\n// compatibility. It is used by most browsers when resolving domain names. This\n// option is only meaningful if combined with MapForLookup.\nfunc Transitional(transitional bool) Option {\n\treturn func(o *options) { o.transitional = true }\n}\n\n// VerifyDNSLength sets whether a Profile should fail if any of the IDN parts\n// are longer than allowed by the RFC.\nfunc VerifyDNSLength(verify bool) Option {\n\treturn func(o *options) { o.verifyDNSLength = verify }\n}\n\n// RemoveLeadingDots removes leading label separators. Leading runes that map to\n// dots, such as U+3002 IDEOGRAPHIC FULL STOP, are removed as well.\n//\n// This is the behavior suggested by the UTS #46 and is adopted by some\n// browsers.\nfunc RemoveLeadingDots(remove bool) Option {\n\treturn func(o *options) { o.removeLeadingDots = remove }\n}\n\n// ValidateLabels sets whether to check the mandatory label validation criteria\n// as defined in Section 5.4 of RFC 5891. This includes testing for correct use\n// of hyphens ('-'), normalization, validity of runes, and the context rules.\nfunc ValidateLabels(enable bool) Option {\n\treturn func(o *options) {\n\t\t// Don't override existing mappings, but set one that at least checks\n\t\t// normalization if it is not set.\n\t\tif o.mapping == nil && enable {\n\t\t\to.mapping = normalize\n\t\t}\n\t\to.trie = trie\n\t\to.validateLabels = enable\n\t\to.fromPuny = validateFromPunycode\n\t}\n}\n\n// StrictDomainName limits the set of permissable ASCII characters to those\n// allowed in domain names as defined in RFC 1034 (A-Z, a-z, 0-9 and the\n// hyphen). This is set by default for MapForLookup and ValidateForRegistration.\n//\n// This option is useful, for instance, for browsers that allow characters\n// outside this range, for example a '_' (U+005F LOW LINE). See\n// http://www.rfc-editor.org/std/std3.txt for more details This option\n// corresponds to the UseSTD3ASCIIRules option in UTS #46.\nfunc StrictDomainName(use bool) Option {\n\treturn func(o *options) {\n\t\to.trie = trie\n\t\to.useSTD3Rules = use\n\t\to.fromPuny = validateFromPunycode\n\t}\n}\n\n// NOTE: the following options pull in tables. The tables should not be linked\n// in as long as the options are not used.\n\n// BidiRule enables the Bidi rule as defined in RFC 5893. Any application\n// that relies on proper validation of labels should include this rule.\nfunc BidiRule() Option {\n\treturn func(o *options) { o.bidirule = bidirule.ValidString }\n}\n\n// ValidateForRegistration sets validation options to verify that a given IDN is\n// properly formatted for registration as defined by Section 4 of RFC 5891.\nfunc ValidateForRegistration() Option {\n\treturn func(o *options) {\n\t\to.mapping = validateRegistration\n\t\tStrictDomainName(true)(o)\n\t\tValidateLabels(true)(o)\n\t\tVerifyDNSLength(true)(o)\n\t\tBidiRule()(o)\n\t}\n}\n\n// MapForLookup sets validation and mapping options such that a given IDN is\n// transformed for domain name lookup according to the requirements set out in\n// Section 5 of RFC 5891. The mappings follow the recommendations of RFC 5894,\n// RFC 5895 and UTS 46. It does not add the Bidi Rule. Use the BidiRule option\n// to add this check.\n//\n// The mappings include normalization and mapping case, width and other\n// compatibility mappings.\nfunc MapForLookup() Option {\n\treturn func(o *options) {\n\t\to.mapping = validateAndMap\n\t\tStrictDomainName(true)(o)\n\t\tValidateLabels(true)(o)\n\t\tRemoveLeadingDots(true)(o)\n\t}\n}\n\ntype options struct {\n\ttransitional      bool\n\tuseSTD3Rules      bool\n\tvalidateLabels    bool\n\tverifyDNSLength   bool\n\tremoveLeadingDots bool\n\n\ttrie *idnaTrie\n\n\t// fromPuny calls validation rules when converting A-labels to U-labels.\n\tfromPuny func(p *Profile, s string) error\n\n\t// mapping implements a validation and mapping step as defined in RFC 5895\n\t// or UTS 46, tailored to, for example, domain registration or lookup.\n\tmapping func(p *Profile, s string) (string, error)\n\n\t// bidirule, if specified, checks whether s conforms to the Bidi Rule\n\t// defined in RFC 5893.\n\tbidirule func(s string) bool\n}\n\n// A Profile defines the configuration of a IDNA mapper.\ntype Profile struct {\n\toptions\n}\n\nfunc apply(o *options, opts []Option) {\n\tfor _, f := range opts {\n\t\tf(o)\n\t}\n}\n\n// New creates a new Profile.\n//\n// With no options, the returned Profile is the most permissive and equals the\n// Punycode Profile. Options can be passed to further restrict the Profile. The\n// MapForLookup and ValidateForRegistration options set a collection of options,\n// for lookup and registration purposes respectively, which can be tailored by\n// adding more fine-grained options, where later options override earlier\n// options.\nfunc New(o ...Option) *Profile {\n\tp := &Profile{}\n\tapply(&p.options, o)\n\treturn p\n}\n\n// ToASCII converts a domain or domain label to its ASCII form. For example,\n// ToASCII(\"bücher.example.com\") is \"xn--bcher-kva.example.com\", and\n// ToASCII(\"golang\") is \"golang\". If an error is encountered it will return\n// an error and a (partially) processed result.\nfunc (p *Profile) ToASCII(s string) (string, error) {\n\treturn p.process(s, true)\n}\n\n// ToUnicode converts a domain or domain label to its Unicode form. For example,\n// ToUnicode(\"xn--bcher-kva.example.com\") is \"bücher.example.com\", and\n// ToUnicode(\"golang\") is \"golang\". If an error is encountered it will return\n// an error and a (partially) processed result.\nfunc (p *Profile) ToUnicode(s string) (string, error) {\n\tpp := *p\n\tpp.transitional = false\n\treturn pp.process(s, false)\n}\n\n// String reports a string with a description of the profile for debugging\n// purposes. The string format may change with different versions.\nfunc (p *Profile) String() string {\n\ts := \"\"\n\tif p.transitional {\n\t\ts = \"Transitional\"\n\t} else {\n\t\ts = \"NonTransitional\"\n\t}\n\tif p.useSTD3Rules {\n\t\ts += \":UseSTD3Rules\"\n\t}\n\tif p.validateLabels {\n\t\ts += \":ValidateLabels\"\n\t}\n\tif p.verifyDNSLength {\n\t\ts += \":VerifyDNSLength\"\n\t}\n\treturn s\n}\n\nvar (\n\t// Punycode is a Profile that does raw punycode processing with a minimum\n\t// of validation.\n\tPunycode *Profile = punycode\n\n\t// Lookup is the recommended profile for looking up domain names, according\n\t// to Section 5 of RFC 5891. The exact configuration of this profile may\n\t// change over time.\n\tLookup *Profile = lookup\n\n\t// Display is the recommended profile for displaying domain names.\n\t// The configuration of this profile may change over time.\n\tDisplay *Profile = display\n\n\t// Registration is the recommended profile for checking whether a given\n\t// IDN is valid for registration, according to Section 4 of RFC 5891.\n\tRegistration *Profile = registration\n\n\tpunycode = &Profile{}\n\tlookup   = &Profile{options{\n\t\ttransitional:      true,\n\t\tuseSTD3Rules:      true,\n\t\tvalidateLabels:    true,\n\t\tremoveLeadingDots: true,\n\t\ttrie:              trie,\n\t\tfromPuny:          validateFromPunycode,\n\t\tmapping:           validateAndMap,\n\t\tbidirule:          bidirule.ValidString,\n\t}}\n\tdisplay = &Profile{options{\n\t\tuseSTD3Rules:      true,\n\t\tvalidateLabels:    true,\n\t\tremoveLeadingDots: true,\n\t\ttrie:              trie,\n\t\tfromPuny:          validateFromPunycode,\n\t\tmapping:           validateAndMap,\n\t\tbidirule:          bidirule.ValidString,\n\t}}\n\tregistration = &Profile{options{\n\t\tuseSTD3Rules:    true,\n\t\tvalidateLabels:  true,\n\t\tverifyDNSLength: true,\n\t\ttrie:            trie,\n\t\tfromPuny:        validateFromPunycode,\n\t\tmapping:         validateRegistration,\n\t\tbidirule:        bidirule.ValidString,\n\t}}\n\n\t// TODO: profiles\n\t// Register: recommended for approving domain names: don't do any mappings\n\t// but rather reject on invalid input. Bundle or block deviation characters.\n)\n\ntype labelError struct{ label, code_ string }\n\nfunc (e labelError) code() string { return e.code_ }\nfunc (e labelError) Error() string {\n\treturn fmt.Sprintf(\"idna: invalid label %q\", e.label)\n}\n\ntype runeError rune\n\nfunc (e runeError) code() string { return \"P1\" }\nfunc (e runeError) Error() string {\n\treturn fmt.Sprintf(\"idna: disallowed rune %U\", e)\n}\n\n// process implements the algorithm described in section 4 of UTS #46,\n// see https://www.unicode.org/reports/tr46.\nfunc (p *Profile) process(s string, toASCII bool) (string, error) {\n\tvar err error\n\tif p.mapping != nil {\n\t\ts, err = p.mapping(p, s)\n\t}\n\t// Remove leading empty labels.\n\tif p.removeLeadingDots {\n\t\tfor ; len(s) > 0 && s[0] == '.'; s = s[1:] {\n\t\t}\n\t}\n\t// It seems like we should only create this error on ToASCII, but the\n\t// UTS 46 conformance tests suggests we should always check this.\n\tif err == nil && p.verifyDNSLength && s == \"\" {\n\t\terr = &labelError{s, \"A4\"}\n\t}\n\tlabels := labelIter{orig: s}\n\tfor ; !labels.done(); labels.next() {\n\t\tlabel := labels.label()\n\t\tif label == \"\" {\n\t\t\t// Empty labels are not okay. The label iterator skips the last\n\t\t\t// label if it is empty.\n\t\t\tif err == nil && p.verifyDNSLength {\n\t\t\t\terr = &labelError{s, \"A4\"}\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\tif strings.HasPrefix(label, acePrefix) {\n\t\t\tu, err2 := decode(label[len(acePrefix):])\n\t\t\tif err2 != nil {\n\t\t\t\tif err == nil {\n\t\t\t\t\terr = err2\n\t\t\t\t}\n\t\t\t\t// Spec says keep the old label.\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tlabels.set(u)\n\t\t\tif err == nil && p.validateLabels {\n\t\t\t\terr = p.fromPuny(p, u)\n\t\t\t}\n\t\t\tif err == nil {\n\t\t\t\t// This should be called on NonTransitional, according to the\n\t\t\t\t// spec, but that currently does not have any effect. Use the\n\t\t\t\t// original profile to preserve options.\n\t\t\t\terr = p.validateLabel(u)\n\t\t\t}\n\t\t} else if err == nil {\n\t\t\terr = p.validateLabel(label)\n\t\t}\n\t}\n\tif toASCII {\n\t\tfor labels.reset(); !labels.done(); labels.next() {\n\t\t\tlabel := labels.label()\n\t\t\tif !ascii(label) {\n\t\t\t\ta, err2 := encode(acePrefix, label)\n\t\t\t\tif err == nil {\n\t\t\t\t\terr = err2\n\t\t\t\t}\n\t\t\t\tlabel = a\n\t\t\t\tlabels.set(a)\n\t\t\t}\n\t\t\tn := len(label)\n\t\t\tif p.verifyDNSLength && err == nil && (n == 0 || n > 63) {\n\t\t\t\terr = &labelError{label, \"A4\"}\n\t\t\t}\n\t\t}\n\t}\n\ts = labels.result()\n\tif toASCII && p.verifyDNSLength && err == nil {\n\t\t// Compute the length of the domain name minus the root label and its dot.\n\t\tn := len(s)\n\t\tif n > 0 && s[n-1] == '.' {\n\t\t\tn--\n\t\t}\n\t\tif len(s) < 1 || n > 253 {\n\t\t\terr = &labelError{s, \"A4\"}\n\t\t}\n\t}\n\treturn s, err\n}\n\nfunc normalize(p *Profile, s string) (string, error) {\n\treturn norm.NFC.String(s), nil\n}\n\nfunc validateRegistration(p *Profile, s string) (string, error) {\n\tif !norm.NFC.IsNormalString(s) {\n\t\treturn s, &labelError{s, \"V1\"}\n\t}\n\tfor i := 0; i < len(s); {\n\t\tv, sz := trie.lookupString(s[i:])\n\t\t// Copy bytes not copied so far.\n\t\tswitch p.simplify(info(v).category()) {\n\t\t// TODO: handle the NV8 defined in the Unicode idna data set to allow\n\t\t// for strict conformance to IDNA2008.\n\t\tcase valid, deviation:\n\t\tcase disallowed, mapped, unknown, ignored:\n\t\t\tr, _ := utf8.DecodeRuneInString(s[i:])\n\t\t\treturn s, runeError(r)\n\t\t}\n\t\ti += sz\n\t}\n\treturn s, nil\n}\n\nfunc validateAndMap(p *Profile, s string) (string, error) {\n\tvar (\n\t\terr error\n\t\tb   []byte\n\t\tk   int\n\t)\n\tfor i := 0; i < len(s); {\n\t\tv, sz := trie.lookupString(s[i:])\n\t\tstart := i\n\t\ti += sz\n\t\t// Copy bytes not copied so far.\n\t\tswitch p.simplify(info(v).category()) {\n\t\tcase valid:\n\t\t\tcontinue\n\t\tcase disallowed:\n\t\t\tif err == nil {\n\t\t\t\tr, _ := utf8.DecodeRuneInString(s[start:])\n\t\t\t\terr = runeError(r)\n\t\t\t}\n\t\t\tcontinue\n\t\tcase mapped, deviation:\n\t\t\tb = append(b, s[k:start]...)\n\t\t\tb = info(v).appendMapping(b, s[start:i])\n\t\tcase ignored:\n\t\t\tb = append(b, s[k:start]...)\n\t\t\t// drop the rune\n\t\tcase unknown:\n\t\t\tb = append(b, s[k:start]...)\n\t\t\tb = append(b, \"\\ufffd\"...)\n\t\t}\n\t\tk = i\n\t}\n\tif k == 0 {\n\t\t// No changes so far.\n\t\ts = norm.NFC.String(s)\n\t} else {\n\t\tb = append(b, s[k:]...)\n\t\tif norm.NFC.QuickSpan(b) != len(b) {\n\t\t\tb = norm.NFC.Bytes(b)\n\t\t}\n\t\t// TODO: the punycode converters require strings as input.\n\t\ts = string(b)\n\t}\n\treturn s, err\n}\n\n// A labelIter allows iterating over domain name labels.\ntype labelIter struct {\n\torig     string\n\tslice    []string\n\tcurStart int\n\tcurEnd   int\n\ti        int\n}\n\nfunc (l *labelIter) reset() {\n\tl.curStart = 0\n\tl.curEnd = 0\n\tl.i = 0\n}\n\nfunc (l *labelIter) done() bool {\n\treturn l.curStart >= len(l.orig)\n}\n\nfunc (l *labelIter) result() string {\n\tif l.slice != nil {\n\t\treturn strings.Join(l.slice, \".\")\n\t}\n\treturn l.orig\n}\n\nfunc (l *labelIter) label() string {\n\tif l.slice != nil {\n\t\treturn l.slice[l.i]\n\t}\n\tp := strings.IndexByte(l.orig[l.curStart:], '.')\n\tl.curEnd = l.curStart + p\n\tif p == -1 {\n\t\tl.curEnd = len(l.orig)\n\t}\n\treturn l.orig[l.curStart:l.curEnd]\n}\n\n// next sets the value to the next label. It skips the last label if it is empty.\nfunc (l *labelIter) next() {\n\tl.i++\n\tif l.slice != nil {\n\t\tif l.i >= len(l.slice) || l.i == len(l.slice)-1 && l.slice[l.i] == \"\" {\n\t\t\tl.curStart = len(l.orig)\n\t\t}\n\t} else {\n\t\tl.curStart = l.curEnd + 1\n\t\tif l.curStart == len(l.orig)-1 && l.orig[l.curStart] == '.' {\n\t\t\tl.curStart = len(l.orig)\n\t\t}\n\t}\n}\n\nfunc (l *labelIter) set(s string) {\n\tif l.slice == nil {\n\t\tl.slice = strings.Split(l.orig, \".\")\n\t}\n\tl.slice[l.i] = s\n}\n\n// acePrefix is the ASCII Compatible Encoding prefix.\nconst acePrefix = \"xn--\"\n\nfunc (p *Profile) simplify(cat category) category {\n\tswitch cat {\n\tcase disallowedSTD3Mapped:\n\t\tif p.useSTD3Rules {\n\t\t\tcat = disallowed\n\t\t} else {\n\t\t\tcat = mapped\n\t\t}\n\tcase disallowedSTD3Valid:\n\t\tif p.useSTD3Rules {\n\t\t\tcat = disallowed\n\t\t} else {\n\t\t\tcat = valid\n\t\t}\n\tcase deviation:\n\t\tif !p.transitional {\n\t\t\tcat = valid\n\t\t}\n\tcase validNV8, validXV8:\n\t\t// TODO: handle V2008\n\t\tcat = valid\n\t}\n\treturn cat\n}\n\nfunc validateFromPunycode(p *Profile, s string) error {\n\tif !norm.NFC.IsNormalString(s) {\n\t\treturn &labelError{s, \"V1\"}\n\t}\n\tfor i := 0; i < len(s); {\n\t\tv, sz := trie.lookupString(s[i:])\n\t\tif c := p.simplify(info(v).category()); c != valid && c != deviation {\n\t\t\treturn &labelError{s, \"V6\"}\n\t\t}\n\t\ti += sz\n\t}\n\treturn nil\n}\n\nconst (\n\tzwnj = \"\\u200c\"\n\tzwj  = \"\\u200d\"\n)\n\ntype joinState int8\n\nconst (\n\tstateStart joinState = iota\n\tstateVirama\n\tstateBefore\n\tstateBeforeVirama\n\tstateAfter\n\tstateFAIL\n)\n\nvar joinStates = [][numJoinTypes]joinState{\n\tstateStart: {\n\t\tjoiningL:   stateBefore,\n\t\tjoiningD:   stateBefore,\n\t\tjoinZWNJ:   stateFAIL,\n\t\tjoinZWJ:    stateFAIL,\n\t\tjoinVirama: stateVirama,\n\t},\n\tstateVirama: {\n\t\tjoiningL: stateBefore,\n\t\tjoiningD: stateBefore,\n\t},\n\tstateBefore: {\n\t\tjoiningL:   stateBefore,\n\t\tjoiningD:   stateBefore,\n\t\tjoiningT:   stateBefore,\n\t\tjoinZWNJ:   stateAfter,\n\t\tjoinZWJ:    stateFAIL,\n\t\tjoinVirama: stateBeforeVirama,\n\t},\n\tstateBeforeVirama: {\n\t\tjoiningL: stateBefore,\n\t\tjoiningD: stateBefore,\n\t\tjoiningT: stateBefore,\n\t},\n\tstateAfter: {\n\t\tjoiningL:   stateFAIL,\n\t\tjoiningD:   stateBefore,\n\t\tjoiningT:   stateAfter,\n\t\tjoiningR:   stateStart,\n\t\tjoinZWNJ:   stateFAIL,\n\t\tjoinZWJ:    stateFAIL,\n\t\tjoinVirama: stateAfter, // no-op as we can't accept joiners here\n\t},\n\tstateFAIL: {\n\t\t0:          stateFAIL,\n\t\tjoiningL:   stateFAIL,\n\t\tjoiningD:   stateFAIL,\n\t\tjoiningT:   stateFAIL,\n\t\tjoiningR:   stateFAIL,\n\t\tjoinZWNJ:   stateFAIL,\n\t\tjoinZWJ:    stateFAIL,\n\t\tjoinVirama: stateFAIL,\n\t},\n}\n\n// validateLabel validates the criteria from Section 4.1. Item 1, 4, and 6 are\n// already implicitly satisfied by the overall implementation.\nfunc (p *Profile) validateLabel(s string) error {\n\tif s == \"\" {\n\t\tif p.verifyDNSLength {\n\t\t\treturn &labelError{s, \"A4\"}\n\t\t}\n\t\treturn nil\n\t}\n\tif p.bidirule != nil && !p.bidirule(s) {\n\t\treturn &labelError{s, \"B\"}\n\t}\n\tif !p.validateLabels {\n\t\treturn nil\n\t}\n\ttrie := p.trie // p.validateLabels is only set if trie is set.\n\tif len(s) > 4 && s[2] == '-' && s[3] == '-' {\n\t\treturn &labelError{s, \"V2\"}\n\t}\n\tif s[0] == '-' || s[len(s)-1] == '-' {\n\t\treturn &labelError{s, \"V3\"}\n\t}\n\t// TODO: merge the use of this in the trie.\n\tv, sz := trie.lookupString(s)\n\tx := info(v)\n\tif x.isModifier() {\n\t\treturn &labelError{s, \"V5\"}\n\t}\n\t// Quickly return in the absence of zero-width (non) joiners.\n\tif strings.Index(s, zwj) == -1 && strings.Index(s, zwnj) == -1 {\n\t\treturn nil\n\t}\n\tst := stateStart\n\tfor i := 0; ; {\n\t\tjt := x.joinType()\n\t\tif s[i:i+sz] == zwj {\n\t\t\tjt = joinZWJ\n\t\t} else if s[i:i+sz] == zwnj {\n\t\t\tjt = joinZWNJ\n\t\t}\n\t\tst = joinStates[st][jt]\n\t\tif x.isViramaModifier() {\n\t\t\tst = joinStates[st][joinVirama]\n\t\t}\n\t\tif i += sz; i == len(s) {\n\t\t\tbreak\n\t\t}\n\t\tv, sz = trie.lookupString(s[i:])\n\t\tx = info(v)\n\t}\n\tif st == stateFAIL || st == stateAfter {\n\t\treturn &labelError{s, \"C\"}\n\t}\n\treturn nil\n}\n\nfunc ascii(s string) bool {\n\tfor i := 0; i < len(s); i++ {\n\t\tif s[i] >= utf8.RuneSelf {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n"
  },
  {
    "path": "vendor/golang.org/x/net/idna/punycode.go",
    "content": "// Code generated by running \"go generate\" in golang.org/x/text. DO NOT EDIT.\n\n// Copyright 2016 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage idna\n\n// This file implements the Punycode algorithm from RFC 3492.\n\nimport (\n\t\"math\"\n\t\"strings\"\n\t\"unicode/utf8\"\n)\n\n// These parameter values are specified in section 5.\n//\n// All computation is done with int32s, so that overflow behavior is identical\n// regardless of whether int is 32-bit or 64-bit.\nconst (\n\tbase        int32 = 36\n\tdamp        int32 = 700\n\tinitialBias int32 = 72\n\tinitialN    int32 = 128\n\tskew        int32 = 38\n\ttmax        int32 = 26\n\ttmin        int32 = 1\n)\n\nfunc punyError(s string) error { return &labelError{s, \"A3\"} }\n\n// decode decodes a string as specified in section 6.2.\nfunc decode(encoded string) (string, error) {\n\tif encoded == \"\" {\n\t\treturn \"\", nil\n\t}\n\tpos := 1 + strings.LastIndex(encoded, \"-\")\n\tif pos == 1 {\n\t\treturn \"\", punyError(encoded)\n\t}\n\tif pos == len(encoded) {\n\t\treturn encoded[:len(encoded)-1], nil\n\t}\n\toutput := make([]rune, 0, len(encoded))\n\tif pos != 0 {\n\t\tfor _, r := range encoded[:pos-1] {\n\t\t\toutput = append(output, r)\n\t\t}\n\t}\n\ti, n, bias := int32(0), initialN, initialBias\n\tfor pos < len(encoded) {\n\t\toldI, w := i, int32(1)\n\t\tfor k := base; ; k += base {\n\t\t\tif pos == len(encoded) {\n\t\t\t\treturn \"\", punyError(encoded)\n\t\t\t}\n\t\t\tdigit, ok := decodeDigit(encoded[pos])\n\t\t\tif !ok {\n\t\t\t\treturn \"\", punyError(encoded)\n\t\t\t}\n\t\t\tpos++\n\t\t\ti += digit * w\n\t\t\tif i < 0 {\n\t\t\t\treturn \"\", punyError(encoded)\n\t\t\t}\n\t\t\tt := k - bias\n\t\t\tif t < tmin {\n\t\t\t\tt = tmin\n\t\t\t} else if t > tmax {\n\t\t\t\tt = tmax\n\t\t\t}\n\t\t\tif digit < t {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tw *= base - t\n\t\t\tif w >= math.MaxInt32/base {\n\t\t\t\treturn \"\", punyError(encoded)\n\t\t\t}\n\t\t}\n\t\tx := int32(len(output) + 1)\n\t\tbias = adapt(i-oldI, x, oldI == 0)\n\t\tn += i / x\n\t\ti %= x\n\t\tif n > utf8.MaxRune || len(output) >= 1024 {\n\t\t\treturn \"\", punyError(encoded)\n\t\t}\n\t\toutput = append(output, 0)\n\t\tcopy(output[i+1:], output[i:])\n\t\toutput[i] = n\n\t\ti++\n\t}\n\treturn string(output), nil\n}\n\n// encode encodes a string as specified in section 6.3 and prepends prefix to\n// the result.\n//\n// The \"while h < length(input)\" line in the specification becomes \"for\n// remaining != 0\" in the Go code, because len(s) in Go is in bytes, not runes.\nfunc encode(prefix, s string) (string, error) {\n\toutput := make([]byte, len(prefix), len(prefix)+1+2*len(s))\n\tcopy(output, prefix)\n\tdelta, n, bias := int32(0), initialN, initialBias\n\tb, remaining := int32(0), int32(0)\n\tfor _, r := range s {\n\t\tif r < 0x80 {\n\t\t\tb++\n\t\t\toutput = append(output, byte(r))\n\t\t} else {\n\t\t\tremaining++\n\t\t}\n\t}\n\th := b\n\tif b > 0 {\n\t\toutput = append(output, '-')\n\t}\n\tfor remaining != 0 {\n\t\tm := int32(0x7fffffff)\n\t\tfor _, r := range s {\n\t\t\tif m > r && r >= n {\n\t\t\t\tm = r\n\t\t\t}\n\t\t}\n\t\tdelta += (m - n) * (h + 1)\n\t\tif delta < 0 {\n\t\t\treturn \"\", punyError(s)\n\t\t}\n\t\tn = m\n\t\tfor _, r := range s {\n\t\t\tif r < n {\n\t\t\t\tdelta++\n\t\t\t\tif delta < 0 {\n\t\t\t\t\treturn \"\", punyError(s)\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif r > n {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tq := delta\n\t\t\tfor k := base; ; k += base {\n\t\t\t\tt := k - bias\n\t\t\t\tif t < tmin {\n\t\t\t\t\tt = tmin\n\t\t\t\t} else if t > tmax {\n\t\t\t\t\tt = tmax\n\t\t\t\t}\n\t\t\t\tif q < t {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\toutput = append(output, encodeDigit(t+(q-t)%(base-t)))\n\t\t\t\tq = (q - t) / (base - t)\n\t\t\t}\n\t\t\toutput = append(output, encodeDigit(q))\n\t\t\tbias = adapt(delta, h+1, h == b)\n\t\t\tdelta = 0\n\t\t\th++\n\t\t\tremaining--\n\t\t}\n\t\tdelta++\n\t\tn++\n\t}\n\treturn string(output), nil\n}\n\nfunc decodeDigit(x byte) (digit int32, ok bool) {\n\tswitch {\n\tcase '0' <= x && x <= '9':\n\t\treturn int32(x - ('0' - 26)), true\n\tcase 'A' <= x && x <= 'Z':\n\t\treturn int32(x - 'A'), true\n\tcase 'a' <= x && x <= 'z':\n\t\treturn int32(x - 'a'), true\n\t}\n\treturn 0, false\n}\n\nfunc encodeDigit(digit int32) byte {\n\tswitch {\n\tcase 0 <= digit && digit < 26:\n\t\treturn byte(digit + 'a')\n\tcase 26 <= digit && digit < 36:\n\t\treturn byte(digit + ('0' - 26))\n\t}\n\tpanic(\"idna: internal error in punycode encoding\")\n}\n\n// adapt is the bias adaptation function specified in section 6.1.\nfunc adapt(delta, numPoints int32, firstTime bool) int32 {\n\tif firstTime {\n\t\tdelta /= damp\n\t} else {\n\t\tdelta /= 2\n\t}\n\tdelta += delta / numPoints\n\tk := int32(0)\n\tfor delta > ((base-tmin)*tmax)/2 {\n\t\tdelta /= base - tmin\n\t\tk += base\n\t}\n\treturn k + (base-tmin+1)*delta/(delta+skew)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/net/idna/tables10.0.0.go",
    "content": "// Code generated by running \"go generate\" in golang.org/x/text. DO NOT EDIT.\n\n// +build go1.10,!go1.13\n\npackage idna\n\n// UnicodeVersion is the Unicode version from which the tables in this package are derived.\nconst UnicodeVersion = \"10.0.0\"\n\nvar mappings string = \"\" + // Size: 8175 bytes\n\t\"\\x00\\x01 \\x03 ̈\\x01a\\x03 ̄\\x012\\x013\\x03 ́\\x03 ̧\\x011\\x01o\\x051⁄4\\x051⁄2\" +\n\t\"\\x053⁄4\\x03i̇\\x03l·\\x03ʼn\\x01s\\x03dž\\x03ⱥ\\x03ⱦ\\x01h\\x01j\\x01r\\x01w\\x01y\" +\n\t\"\\x03 ̆\\x03 ̇\\x03 ̊\\x03 ̨\\x03 ̃\\x03 ̋\\x01l\\x01x\\x04̈́\\x03 ι\\x01;\\x05 ̈́\" +\n\t\"\\x04եւ\\x04اٴ\\x04وٴ\\x04ۇٴ\\x04يٴ\\x06क़\\x06ख़\\x06ग़\\x06ज़\\x06ड़\\x06ढ़\\x06फ़\" +\n\t\"\\x06य़\\x06ড়\\x06ঢ়\\x06য়\\x06ਲ਼\\x06ਸ਼\\x06ਖ਼\\x06ਗ਼\\x06ਜ਼\\x06ਫ਼\\x06ଡ଼\\x06ଢ଼\" +\n\t\"\\x06ํา\\x06ໍາ\\x06ຫນ\\x06ຫມ\\x06གྷ\\x06ཌྷ\\x06དྷ\\x06བྷ\\x06ཛྷ\\x06ཀྵ\\x06ཱི\\x06ཱུ\" +\n\t\"\\x06ྲྀ\\x09ྲཱྀ\\x06ླྀ\\x09ླཱྀ\\x06ཱྀ\\x06ྒྷ\\x06ྜྷ\\x06ྡྷ\\x06ྦྷ\\x06ྫྷ\\x06ྐྵ\\x02\" +\n\t\"в\\x02д\\x02о\\x02с\\x02т\\x02ъ\\x02ѣ\\x02æ\\x01b\\x01d\\x01e\\x02ǝ\\x01g\\x01i\\x01k\" +\n\t\"\\x01m\\x01n\\x02ȣ\\x01p\\x01t\\x01u\\x02ɐ\\x02ɑ\\x02ə\\x02ɛ\\x02ɜ\\x02ŋ\\x02ɔ\\x02ɯ\" +\n\t\"\\x01v\\x02β\\x02γ\\x02δ\\x02φ\\x02χ\\x02ρ\\x02н\\x02ɒ\\x01c\\x02ɕ\\x02ð\\x01f\\x02ɟ\" +\n\t\"\\x02ɡ\\x02ɥ\\x02ɨ\\x02ɩ\\x02ɪ\\x02ʝ\\x02ɭ\\x02ʟ\\x02ɱ\\x02ɰ\\x02ɲ\\x02ɳ\\x02ɴ\\x02ɵ\" +\n\t\"\\x02ɸ\\x02ʂ\\x02ʃ\\x02ƫ\\x02ʉ\\x02ʊ\\x02ʋ\\x02ʌ\\x01z\\x02ʐ\\x02ʑ\\x02ʒ\\x02θ\\x02ss\" +\n\t\"\\x02ά\\x02έ\\x02ή\\x02ί\\x02ό\\x02ύ\\x02ώ\\x05ἀι\\x05ἁι\\x05ἂι\\x05ἃι\\x05ἄι\\x05ἅι\" +\n\t\"\\x05ἆι\\x05ἇι\\x05ἠι\\x05ἡι\\x05ἢι\\x05ἣι\\x05ἤι\\x05ἥι\\x05ἦι\\x05ἧι\\x05ὠι\\x05ὡι\" +\n\t\"\\x05ὢι\\x05ὣι\\x05ὤι\\x05ὥι\\x05ὦι\\x05ὧι\\x05ὰι\\x04αι\\x04άι\\x05ᾶι\\x02ι\\x05 ̈͂\" +\n\t\"\\x05ὴι\\x04ηι\\x04ήι\\x05ῆι\\x05 ̓̀\\x05 ̓́\\x05 ̓͂\\x02ΐ\\x05 ̔̀\\x05 ̔́\\x05 ̔͂\" +\n\t\"\\x02ΰ\\x05 ̈̀\\x01`\\x05ὼι\\x04ωι\\x04ώι\\x05ῶι\\x06′′\\x09′′′\\x06‵‵\\x09‵‵‵\\x02!\" +\n\t\"!\\x02??\\x02?!\\x02!?\\x0c′′′′\\x010\\x014\\x015\\x016\\x017\\x018\\x019\\x01+\\x01=\" +\n\t\"\\x01(\\x01)\\x02rs\\x02ħ\\x02no\\x01q\\x02sm\\x02tm\\x02ω\\x02å\\x02א\\x02ב\\x02ג\" +\n\t\"\\x02ד\\x02π\\x051⁄7\\x051⁄9\\x061⁄10\\x051⁄3\\x052⁄3\\x051⁄5\\x052⁄5\\x053⁄5\\x054\" +\n\t\"⁄5\\x051⁄6\\x055⁄6\\x051⁄8\\x053⁄8\\x055⁄8\\x057⁄8\\x041⁄\\x02ii\\x02iv\\x02vi\" +\n\t\"\\x04viii\\x02ix\\x02xi\\x050⁄3\\x06∫∫\\x09∫∫∫\\x06∮∮\\x09∮∮∮\\x0210\\x0211\\x0212\" +\n\t\"\\x0213\\x0214\\x0215\\x0216\\x0217\\x0218\\x0219\\x0220\\x04(10)\\x04(11)\\x04(12)\" +\n\t\"\\x04(13)\\x04(14)\\x04(15)\\x04(16)\\x04(17)\\x04(18)\\x04(19)\\x04(20)\\x0c∫∫∫∫\" +\n\t\"\\x02==\\x05⫝̸\\x02ɫ\\x02ɽ\\x02ȿ\\x02ɀ\\x01.\\x04 ゙\\x04 ゚\\x06より\\x06コト\\x05(ᄀ)\\x05\" +\n\t\"(ᄂ)\\x05(ᄃ)\\x05(ᄅ)\\x05(ᄆ)\\x05(ᄇ)\\x05(ᄉ)\\x05(ᄋ)\\x05(ᄌ)\\x05(ᄎ)\\x05(ᄏ)\\x05(ᄐ\" +\n\t\")\\x05(ᄑ)\\x05(ᄒ)\\x05(가)\\x05(나)\\x05(다)\\x05(라)\\x05(마)\\x05(바)\\x05(사)\\x05(아)\" +\n\t\"\\x05(자)\\x05(차)\\x05(카)\\x05(타)\\x05(파)\\x05(하)\\x05(주)\\x08(오전)\\x08(오후)\\x05(一)\" +\n\t\"\\x05(二)\\x05(三)\\x05(四)\\x05(五)\\x05(六)\\x05(七)\\x05(八)\\x05(九)\\x05(十)\\x05(月)\" +\n\t\"\\x05(火)\\x05(水)\\x05(木)\\x05(金)\\x05(土)\\x05(日)\\x05(株)\\x05(有)\\x05(社)\\x05(名)\" +\n\t\"\\x05(特)\\x05(財)\\x05(祝)\\x05(労)\\x05(代)\\x05(呼)\\x05(学)\\x05(監)\\x05(企)\\x05(資)\" +\n\t\"\\x05(協)\\x05(祭)\\x05(休)\\x05(自)\\x05(至)\\x0221\\x0222\\x0223\\x0224\\x0225\\x0226\" +\n\t\"\\x0227\\x0228\\x0229\\x0230\\x0231\\x0232\\x0233\\x0234\\x0235\\x06참고\\x06주의\\x0236\" +\n\t\"\\x0237\\x0238\\x0239\\x0240\\x0241\\x0242\\x0243\\x0244\\x0245\\x0246\\x0247\\x0248\" +\n\t\"\\x0249\\x0250\\x041月\\x042月\\x043月\\x044月\\x045月\\x046月\\x047月\\x048月\\x049月\\x0510\" +\n\t\"月\\x0511月\\x0512月\\x02hg\\x02ev\\x0cアパート\\x0cアルファ\\x0cアンペア\\x09アール\\x0cイニング\\x09\" +\n\t\"インチ\\x09ウォン\\x0fエスクード\\x0cエーカー\\x09オンス\\x09オーム\\x09カイリ\\x0cカラット\\x0cカロリー\\x09ガロ\" +\n\t\"ン\\x09ガンマ\\x06ギガ\\x09ギニー\\x0cキュリー\\x0cギルダー\\x06キロ\\x0fキログラム\\x12キロメートル\\x0fキロワッ\" +\n\t\"ト\\x09グラム\\x0fグラムトン\\x0fクルゼイロ\\x0cクローネ\\x09ケース\\x09コルナ\\x09コーポ\\x0cサイクル\\x0fサンチ\" +\n\t\"ーム\\x0cシリング\\x09センチ\\x09セント\\x09ダース\\x06デシ\\x06ドル\\x06トン\\x06ナノ\\x09ノット\\x09ハイツ\" +\n\t\"\\x0fパーセント\\x09パーツ\\x0cバーレル\\x0fピアストル\\x09ピクル\\x06ピコ\\x06ビル\\x0fファラッド\\x0cフィート\" +\n\t\"\\x0fブッシェル\\x09フラン\\x0fヘクタール\\x06ペソ\\x09ペニヒ\\x09ヘルツ\\x09ペンス\\x09ページ\\x09ベータ\\x0cポイ\" +\n\t\"ント\\x09ボルト\\x06ホン\\x09ポンド\\x09ホール\\x09ホーン\\x0cマイクロ\\x09マイル\\x09マッハ\\x09マルク\\x0fマ\" +\n\t\"ンション\\x0cミクロン\\x06ミリ\\x0fミリバール\\x06メガ\\x0cメガトン\\x0cメートル\\x09ヤード\\x09ヤール\\x09ユアン\" +\n\t\"\\x0cリットル\\x06リラ\\x09ルピー\\x0cルーブル\\x06レム\\x0fレントゲン\\x09ワット\\x040点\\x041点\\x042点\" +\n\t\"\\x043点\\x044点\\x045点\\x046点\\x047点\\x048点\\x049点\\x0510点\\x0511点\\x0512点\\x0513点\" +\n\t\"\\x0514点\\x0515点\\x0516点\\x0517点\\x0518点\\x0519点\\x0520点\\x0521点\\x0522点\\x0523点\" +\n\t\"\\x0524点\\x02da\\x02au\\x02ov\\x02pc\\x02dm\\x02iu\\x06平成\\x06昭和\\x06大正\\x06明治\\x0c株\" +\n\t\"式会社\\x02pa\\x02na\\x02ma\\x02ka\\x02kb\\x02mb\\x02gb\\x04kcal\\x02pf\\x02nf\\x02m\" +\n\t\"g\\x02kg\\x02hz\\x02ml\\x02dl\\x02kl\\x02fm\\x02nm\\x02mm\\x02cm\\x02km\\x02m2\\x02m\" +\n\t\"3\\x05m∕s\\x06m∕s2\\x07rad∕s\\x08rad∕s2\\x02ps\\x02ns\\x02ms\\x02pv\\x02nv\\x02mv\" +\n\t\"\\x02kv\\x02pw\\x02nw\\x02mw\\x02kw\\x02bq\\x02cc\\x02cd\\x06c∕kg\\x02db\\x02gy\\x02\" +\n\t\"ha\\x02hp\\x02in\\x02kk\\x02kt\\x02lm\\x02ln\\x02lx\\x02ph\\x02pr\\x02sr\\x02sv\\x02\" +\n\t\"wb\\x05v∕m\\x05a∕m\\x041日\\x042日\\x043日\\x044日\\x045日\\x046日\\x047日\\x048日\\x049日\" +\n\t\"\\x0510日\\x0511日\\x0512日\\x0513日\\x0514日\\x0515日\\x0516日\\x0517日\\x0518日\\x0519日\" +\n\t\"\\x0520日\\x0521日\\x0522日\\x0523日\\x0524日\\x0525日\\x0526日\\x0527日\\x0528日\\x0529日\" +\n\t\"\\x0530日\\x0531日\\x02ь\\x02ɦ\\x02ɬ\\x02ʞ\\x02ʇ\\x02œ\\x04𤋮\\x04𢡊\\x04𢡄\\x04𣏕\\x04𥉉\" +\n\t\"\\x04𥳐\\x04𧻓\\x02ff\\x02fi\\x02fl\\x02st\\x04մն\\x04մե\\x04մի\\x04վն\\x04մխ\\x04יִ\" +\n\t\"\\x04ײַ\\x02ע\\x02ה\\x02כ\\x02ל\\x02ם\\x02ר\\x02ת\\x04שׁ\\x04שׂ\\x06שּׁ\\x06שּׂ\\x04א\" +\n\t\"ַ\\x04אָ\\x04אּ\\x04בּ\\x04גּ\\x04דּ\\x04הּ\\x04וּ\\x04זּ\\x04טּ\\x04יּ\\x04ךּ\\x04\" +\n\t\"כּ\\x04לּ\\x04מּ\\x04נּ\\x04סּ\\x04ףּ\\x04פּ\\x04צּ\\x04קּ\\x04רּ\\x04שּ\\x04תּ\" +\n\t\"\\x04וֹ\\x04בֿ\\x04כֿ\\x04פֿ\\x04אל\\x02ٱ\\x02ٻ\\x02پ\\x02ڀ\\x02ٺ\\x02ٿ\\x02ٹ\\x02ڤ\" +\n\t\"\\x02ڦ\\x02ڄ\\x02ڃ\\x02چ\\x02ڇ\\x02ڍ\\x02ڌ\\x02ڎ\\x02ڈ\\x02ژ\\x02ڑ\\x02ک\\x02گ\\x02ڳ\" +\n\t\"\\x02ڱ\\x02ں\\x02ڻ\\x02ۀ\\x02ہ\\x02ھ\\x02ے\\x02ۓ\\x02ڭ\\x02ۇ\\x02ۆ\\x02ۈ\\x02ۋ\\x02ۅ\" +\n\t\"\\x02ۉ\\x02ې\\x02ى\\x04ئا\\x04ئە\\x04ئو\\x04ئۇ\\x04ئۆ\\x04ئۈ\\x04ئې\\x04ئى\\x02ی\\x04\" +\n\t\"ئج\\x04ئح\\x04ئم\\x04ئي\\x04بج\\x04بح\\x04بخ\\x04بم\\x04بى\\x04بي\\x04تج\\x04تح\" +\n\t\"\\x04تخ\\x04تم\\x04تى\\x04تي\\x04ثج\\x04ثم\\x04ثى\\x04ثي\\x04جح\\x04جم\\x04حج\\x04حم\" +\n\t\"\\x04خج\\x04خح\\x04خم\\x04سج\\x04سح\\x04سخ\\x04سم\\x04صح\\x04صم\\x04ضج\\x04ضح\\x04ضخ\" +\n\t\"\\x04ضم\\x04طح\\x04طم\\x04ظم\\x04عج\\x04عم\\x04غج\\x04غم\\x04فج\\x04فح\\x04فخ\\x04فم\" +\n\t\"\\x04فى\\x04في\\x04قح\\x04قم\\x04قى\\x04قي\\x04كا\\x04كج\\x04كح\\x04كخ\\x04كل\\x04كم\" +\n\t\"\\x04كى\\x04كي\\x04لج\\x04لح\\x04لخ\\x04لم\\x04لى\\x04لي\\x04مج\\x04مح\\x04مخ\\x04مم\" +\n\t\"\\x04مى\\x04مي\\x04نج\\x04نح\\x04نخ\\x04نم\\x04نى\\x04ني\\x04هج\\x04هم\\x04هى\\x04هي\" +\n\t\"\\x04يج\\x04يح\\x04يخ\\x04يم\\x04يى\\x04يي\\x04ذٰ\\x04رٰ\\x04ىٰ\\x05 ٌّ\\x05 ٍّ\\x05\" +\n\t\" َّ\\x05 ُّ\\x05 ِّ\\x05 ّٰ\\x04ئر\\x04ئز\\x04ئن\\x04بر\\x04بز\\x04بن\\x04تر\\x04تز\" +\n\t\"\\x04تن\\x04ثر\\x04ثز\\x04ثن\\x04ما\\x04نر\\x04نز\\x04نن\\x04ير\\x04يز\\x04ين\\x04ئخ\" +\n\t\"\\x04ئه\\x04به\\x04ته\\x04صخ\\x04له\\x04نه\\x04هٰ\\x04يه\\x04ثه\\x04سه\\x04شم\\x04شه\" +\n\t\"\\x06ـَّ\\x06ـُّ\\x06ـِّ\\x04طى\\x04طي\\x04عى\\x04عي\\x04غى\\x04غي\\x04سى\\x04سي\" +\n\t\"\\x04شى\\x04شي\\x04حى\\x04حي\\x04جى\\x04جي\\x04خى\\x04خي\\x04صى\\x04صي\\x04ضى\\x04ضي\" +\n\t\"\\x04شج\\x04شح\\x04شخ\\x04شر\\x04سر\\x04صر\\x04ضر\\x04اً\\x06تجم\\x06تحج\\x06تحم\" +\n\t\"\\x06تخم\\x06تمج\\x06تمح\\x06تمخ\\x06جمح\\x06حمي\\x06حمى\\x06سحج\\x06سجح\\x06سجى\" +\n\t\"\\x06سمح\\x06سمج\\x06سمم\\x06صحح\\x06صمم\\x06شحم\\x06شجي\\x06شمخ\\x06شمم\\x06ضحى\" +\n\t\"\\x06ضخم\\x06طمح\\x06طمم\\x06طمي\\x06عجم\\x06عمم\\x06عمى\\x06غمم\\x06غمي\\x06غمى\" +\n\t\"\\x06فخم\\x06قمح\\x06قمم\\x06لحم\\x06لحي\\x06لحى\\x06لجج\\x06لخم\\x06لمح\\x06محج\" +\n\t\"\\x06محم\\x06محي\\x06مجح\\x06مجم\\x06مخج\\x06مخم\\x06مجخ\\x06همج\\x06همم\\x06نحم\" +\n\t\"\\x06نحى\\x06نجم\\x06نجى\\x06نمي\\x06نمى\\x06يمم\\x06بخي\\x06تجي\\x06تجى\\x06تخي\" +\n\t\"\\x06تخى\\x06تمي\\x06تمى\\x06جمي\\x06جحى\\x06جمى\\x06سخى\\x06صحي\\x06شحي\\x06ضحي\" +\n\t\"\\x06لجي\\x06لمي\\x06يحي\\x06يجي\\x06يمي\\x06ممي\\x06قمي\\x06نحي\\x06عمي\\x06كمي\" +\n\t\"\\x06نجح\\x06مخي\\x06لجم\\x06كمم\\x06جحي\\x06حجي\\x06مجي\\x06فمي\\x06بحي\\x06سخي\" +\n\t\"\\x06نجي\\x06صلے\\x06قلے\\x08الله\\x08اكبر\\x08محمد\\x08صلعم\\x08رسول\\x08عليه\" +\n\t\"\\x08وسلم\\x06صلى!صلى الله عليه وسلم\\x0fجل جلاله\\x08ریال\\x01,\\x01:\\x01!\" +\n\t\"\\x01?\\x01_\\x01{\\x01}\\x01[\\x01]\\x01#\\x01&\\x01*\\x01-\\x01<\\x01>\\x01\\\\\\x01$\" +\n\t\"\\x01%\\x01@\\x04ـً\\x04ـَ\\x04ـُ\\x04ـِ\\x04ـّ\\x04ـْ\\x02ء\\x02آ\\x02أ\\x02ؤ\\x02إ\" +\n\t\"\\x02ئ\\x02ا\\x02ب\\x02ة\\x02ت\\x02ث\\x02ج\\x02ح\\x02خ\\x02د\\x02ذ\\x02ر\\x02ز\\x02س\" +\n\t\"\\x02ش\\x02ص\\x02ض\\x02ط\\x02ظ\\x02ع\\x02غ\\x02ف\\x02ق\\x02ك\\x02ل\\x02م\\x02ن\\x02ه\" +\n\t\"\\x02و\\x02ي\\x04لآ\\x04لأ\\x04لإ\\x04لا\\x01\\x22\\x01'\\x01/\\x01^\\x01|\\x01~\\x02¢\" +\n\t\"\\x02£\\x02¬\\x02¦\\x02¥\\x08𝅗𝅥\\x08𝅘𝅥\\x0c𝅘𝅥𝅮\\x0c𝅘𝅥𝅯\\x0c𝅘𝅥𝅰\\x0c𝅘𝅥𝅱\\x0c𝅘𝅥𝅲\\x08𝆹\" +\n\t\"𝅥\\x08𝆺𝅥\\x0c𝆹𝅥𝅮\\x0c𝆺𝅥𝅮\\x0c𝆹𝅥𝅯\\x0c𝆺𝅥𝅯\\x02ı\\x02ȷ\\x02α\\x02ε\\x02ζ\\x02η\\x02\" +\n\t\"κ\\x02λ\\x02μ\\x02ν\\x02ξ\\x02ο\\x02σ\\x02τ\\x02υ\\x02ψ\\x03∇\\x03∂\\x02ϝ\\x02ٮ\\x02ڡ\" +\n\t\"\\x02ٯ\\x020,\\x021,\\x022,\\x023,\\x024,\\x025,\\x026,\\x027,\\x028,\\x029,\\x03(a)\" +\n\t\"\\x03(b)\\x03(c)\\x03(d)\\x03(e)\\x03(f)\\x03(g)\\x03(h)\\x03(i)\\x03(j)\\x03(k)\" +\n\t\"\\x03(l)\\x03(m)\\x03(n)\\x03(o)\\x03(p)\\x03(q)\\x03(r)\\x03(s)\\x03(t)\\x03(u)\" +\n\t\"\\x03(v)\\x03(w)\\x03(x)\\x03(y)\\x03(z)\\x07〔s〕\\x02wz\\x02hv\\x02sd\\x03ppv\\x02w\" +\n\t\"c\\x02mc\\x02md\\x02dj\\x06ほか\\x06ココ\\x03サ\\x03手\\x03字\\x03双\\x03デ\\x03二\\x03多\\x03解\" +\n\t\"\\x03天\\x03交\\x03映\\x03無\\x03料\\x03前\\x03後\\x03再\\x03新\\x03初\\x03終\\x03生\\x03販\\x03声\" +\n\t\"\\x03吹\\x03演\\x03投\\x03捕\\x03一\\x03三\\x03遊\\x03左\\x03中\\x03右\\x03指\\x03走\\x03打\\x03禁\" +\n\t\"\\x03空\\x03合\\x03満\\x03有\\x03月\\x03申\\x03割\\x03営\\x03配\\x09〔本〕\\x09〔三〕\\x09〔二〕\\x09〔安\" +\n\t\"〕\\x09〔点〕\\x09〔打〕\\x09〔盗〕\\x09〔勝〕\\x09〔敗〕\\x03得\\x03可\\x03丽\\x03丸\\x03乁\\x03你\\x03\" +\n\t\"侮\\x03侻\\x03倂\\x03偺\\x03備\\x03僧\\x03像\\x03㒞\\x03免\\x03兔\\x03兤\\x03具\\x03㒹\\x03內\\x03\" +\n\t\"冗\\x03冤\\x03仌\\x03冬\\x03况\\x03凵\\x03刃\\x03㓟\\x03刻\\x03剆\\x03剷\\x03㔕\\x03勇\\x03勉\\x03\" +\n\t\"勤\\x03勺\\x03包\\x03匆\\x03北\\x03卉\\x03卑\\x03博\\x03即\\x03卽\\x03卿\\x03灰\\x03及\\x03叟\\x03\" +\n\t\"叫\\x03叱\\x03吆\\x03咞\\x03吸\\x03呈\\x03周\\x03咢\\x03哶\\x03唐\\x03啓\\x03啣\\x03善\\x03喙\\x03\" +\n\t\"喫\\x03喳\\x03嗂\\x03圖\\x03嘆\\x03圗\\x03噑\\x03噴\\x03切\\x03壮\\x03城\\x03埴\\x03堍\\x03型\\x03\" +\n\t\"堲\\x03報\\x03墬\\x03売\\x03壷\\x03夆\\x03夢\\x03奢\\x03姬\\x03娛\\x03娧\\x03姘\\x03婦\\x03㛮\\x03\" +\n\t\"嬈\\x03嬾\\x03寃\\x03寘\\x03寧\\x03寳\\x03寿\\x03将\\x03尢\\x03㞁\\x03屠\\x03屮\\x03峀\\x03岍\\x03\" +\n\t\"嵃\\x03嵮\\x03嵫\\x03嵼\\x03巡\\x03巢\\x03㠯\\x03巽\\x03帨\\x03帽\\x03幩\\x03㡢\\x03㡼\\x03庰\\x03\" +\n\t\"庳\\x03庶\\x03廊\\x03廾\\x03舁\\x03弢\\x03㣇\\x03形\\x03彫\\x03㣣\\x03徚\\x03忍\\x03志\\x03忹\\x03\" +\n\t\"悁\\x03㤺\\x03㤜\\x03悔\\x03惇\\x03慈\\x03慌\\x03慎\\x03慺\\x03憎\\x03憲\\x03憤\\x03憯\\x03懞\\x03\" +\n\t\"懲\\x03懶\\x03成\\x03戛\\x03扝\\x03抱\\x03拔\\x03捐\\x03挽\\x03拼\\x03捨\\x03掃\\x03揤\\x03搢\\x03\" +\n\t\"揅\\x03掩\\x03㨮\\x03摩\\x03摾\\x03撝\\x03摷\\x03㩬\\x03敏\\x03敬\\x03旣\\x03書\\x03晉\\x03㬙\\x03\" +\n\t\"暑\\x03㬈\\x03㫤\\x03冒\\x03冕\\x03最\\x03暜\\x03肭\\x03䏙\\x03朗\\x03望\\x03朡\\x03杞\\x03杓\\x03\" +\n\t\"㭉\\x03柺\\x03枅\\x03桒\\x03梅\\x03梎\\x03栟\\x03椔\\x03㮝\\x03楂\\x03榣\\x03槪\\x03檨\\x03櫛\\x03\" +\n\t\"㰘\\x03次\\x03歔\\x03㱎\\x03歲\\x03殟\\x03殺\\x03殻\\x03汎\\x03沿\\x03泍\\x03汧\\x03洖\\x03派\\x03\" +\n\t\"海\\x03流\\x03浩\\x03浸\\x03涅\\x03洴\\x03港\\x03湮\\x03㴳\\x03滋\\x03滇\\x03淹\\x03潮\\x03濆\\x03\" +\n\t\"瀹\\x03瀞\\x03瀛\\x03㶖\\x03灊\\x03災\\x03灷\\x03炭\\x03煅\\x03熜\\x03爨\\x03爵\\x03牐\\x03犀\\x03\" +\n\t\"犕\\x03獺\\x03王\\x03㺬\\x03玥\\x03㺸\\x03瑇\\x03瑜\\x03瑱\\x03璅\\x03瓊\\x03㼛\\x03甤\\x03甾\\x03\" +\n\t\"異\\x03瘐\\x03㿼\\x03䀈\\x03直\\x03眞\\x03真\\x03睊\\x03䀹\\x03瞋\\x03䁆\\x03䂖\\x03硎\\x03碌\\x03\" +\n\t\"磌\\x03䃣\\x03祖\\x03福\\x03秫\\x03䄯\\x03穀\\x03穊\\x03穏\\x03䈂\\x03篆\\x03築\\x03䈧\\x03糒\\x03\" +\n\t\"䊠\\x03糨\\x03糣\\x03紀\\x03絣\\x03䌁\\x03緇\\x03縂\\x03繅\\x03䌴\\x03䍙\\x03罺\\x03羕\\x03翺\\x03\" +\n\t\"者\\x03聠\\x03聰\\x03䏕\\x03育\\x03脃\\x03䐋\\x03脾\\x03媵\\x03舄\\x03辞\\x03䑫\\x03芑\\x03芋\\x03\" +\n\t\"芝\\x03劳\\x03花\\x03芳\\x03芽\\x03苦\\x03若\\x03茝\\x03荣\\x03莭\\x03茣\\x03莽\\x03菧\\x03著\\x03\" +\n\t\"荓\\x03菊\\x03菌\\x03菜\\x03䔫\\x03蓱\\x03蓳\\x03蔖\\x03蕤\\x03䕝\\x03䕡\\x03䕫\\x03虐\\x03虜\\x03\" +\n\t\"虧\\x03虩\\x03蚩\\x03蚈\\x03蜎\\x03蛢\\x03蝹\\x03蜨\\x03蝫\\x03螆\\x03蟡\\x03蠁\\x03䗹\\x03衠\\x03\" +\n\t\"衣\\x03裗\\x03裞\\x03䘵\\x03裺\\x03㒻\\x03䚾\\x03䛇\\x03誠\\x03諭\\x03變\\x03豕\\x03貫\\x03賁\\x03\" +\n\t\"贛\\x03起\\x03跋\\x03趼\\x03跰\\x03軔\\x03輸\\x03邔\\x03郱\\x03鄑\\x03鄛\\x03鈸\\x03鋗\\x03鋘\\x03\" +\n\t\"鉼\\x03鏹\\x03鐕\\x03開\\x03䦕\\x03閷\\x03䧦\\x03雃\\x03嶲\\x03霣\\x03䩮\\x03䩶\\x03韠\\x03䪲\\x03\" +\n\t\"頋\\x03頩\\x03飢\\x03䬳\\x03餩\\x03馧\\x03駂\\x03駾\\x03䯎\\x03鬒\\x03鱀\\x03鳽\\x03䳎\\x03䳭\\x03\" +\n\t\"鵧\\x03䳸\\x03麻\\x03䵖\\x03黹\\x03黾\\x03鼅\\x03鼏\\x03鼖\\x03鼻\"\n\nvar xorData string = \"\" + // Size: 4855 bytes\n\t\"\\x02\\x0c\\x09\\x02\\xb0\\xec\\x02\\xad\\xd8\\x02\\xad\\xd9\\x02\\x06\\x07\\x02\\x0f\\x12\" +\n\t\"\\x02\\x0f\\x1f\\x02\\x0f\\x1d\\x02\\x01\\x13\\x02\\x0f\\x16\\x02\\x0f\\x0b\\x02\\x0f3\" +\n\t\"\\x02\\x0f7\\x02\\x0f?\\x02\\x0f/\\x02\\x0f*\\x02\\x0c&\\x02\\x0c*\\x02\\x0c;\\x02\\x0c9\" +\n\t\"\\x02\\x0c%\\x02\\xab\\xed\\x02\\xab\\xe2\\x02\\xab\\xe3\\x02\\xa9\\xe0\\x02\\xa9\\xe1\" +\n\t\"\\x02\\xa9\\xe6\\x02\\xa3\\xcb\\x02\\xa3\\xc8\\x02\\xa3\\xc9\\x02\\x01#\\x02\\x01\\x08\" +\n\t\"\\x02\\x0e>\\x02\\x0e'\\x02\\x0f\\x03\\x02\\x03\\x0d\\x02\\x03\\x09\\x02\\x03\\x17\\x02\" +\n\t\"\\x03\\x0e\\x02\\x02\\x03\\x02\\x011\\x02\\x01\\x00\\x02\\x01\\x10\\x02\\x03<\\x02\\x07\" +\n\t\"\\x0d\\x02\\x02\\x0c\\x02\\x0c0\\x02\\x01\\x03\\x02\\x01\\x01\\x02\\x01 \\x02\\x01\\x22\" +\n\t\"\\x02\\x01)\\x02\\x01\\x0a\\x02\\x01\\x0c\\x02\\x02\\x06\\x02\\x02\\x02\\x02\\x03\\x10\" +\n\t\"\\x03\\x037 \\x03\\x0b+\\x03\\x02\\x01\\x04\\x02\\x01\\x02\\x02\\x019\\x02\\x03\\x1c\\x02\" +\n\t\"\\x02$\\x03\\x80p$\\x02\\x03:\\x02\\x03\\x0a\\x03\\xc1r.\\x03\\xc1r,\\x03\\xc1r\\x02\" +\n\t\"\\x02\\x02:\\x02\\x02>\\x02\\x02,\\x02\\x02\\x10\\x02\\x02\\x00\\x03\\xc1s<\\x03\\xc1s*\" +\n\t\"\\x03\\xc2L$\\x03\\xc2L;\\x02\\x09)\\x02\\x0a\\x19\\x03\\x83\\xab\\xe3\\x03\\x83\\xab\" +\n\t\"\\xf2\\x03 4\\xe0\\x03\\x81\\xab\\xea\\x03\\x81\\xab\\xf3\\x03 4\\xef\\x03\\x96\\xe1\\xcd\" +\n\t\"\\x03\\x84\\xe5\\xc3\\x02\\x0d\\x11\\x03\\x8b\\xec\\xcb\\x03\\x94\\xec\\xcf\\x03\\x9a\\xec\" +\n\t\"\\xc2\\x03\\x8b\\xec\\xdb\\x03\\x94\\xec\\xdf\\x03\\x9a\\xec\\xd2\\x03\\x01\\x0c!\\x03\" +\n\t\"\\x01\\x0c#\\x03ʠ\\x9d\\x03ʣ\\x9c\\x03ʢ\\x9f\\x03ʥ\\x9e\\x03ʤ\\x91\\x03ʧ\\x90\\x03ʦ\\x93\" +\n\t\"\\x03ʩ\\x92\\x03ʨ\\x95\\x03\\xca\\xf3\\xb5\\x03\\xca\\xf0\\xb4\\x03\\xca\\xf1\\xb7\\x03\" +\n\t\"\\xca\\xf6\\xb6\\x03\\xca\\xf7\\x89\\x03\\xca\\xf4\\x88\\x03\\xca\\xf5\\x8b\\x03\\xca\\xfa\" +\n\t\"\\x8a\\x03\\xca\\xfb\\x8d\\x03\\xca\\xf8\\x8c\\x03\\xca\\xf9\\x8f\\x03\\xca\\xfe\\x8e\\x03\" +\n\t\"\\xca\\xff\\x81\\x03\\xca\\xfc\\x80\\x03\\xca\\xfd\\x83\\x03\\xca\\xe2\\x82\\x03\\xca\\xe3\" +\n\t\"\\x85\\x03\\xca\\xe0\\x84\\x03\\xca\\xe1\\x87\\x03\\xca\\xe6\\x86\\x03\\xca\\xe7\\x99\\x03\" +\n\t\"\\xca\\xe4\\x98\\x03\\xca\\xe5\\x9b\\x03\\xca\\xea\\x9a\\x03\\xca\\xeb\\x9d\\x03\\xca\\xe8\" +\n\t\"\\x9c\\x03ؓ\\x89\\x03ߔ\\x8b\\x02\\x010\\x03\\x03\\x04\\x1e\\x03\\x04\\x15\\x12\\x03\\x0b\" +\n\t\"\\x05,\\x03\\x06\\x04\\x00\\x03\\x06\\x04)\\x03\\x06\\x044\\x03\\x06\\x04<\\x03\\x06\\x05\" +\n\t\"\\x1d\\x03\\x06\\x06\\x00\\x03\\x06\\x06\\x0a\\x03\\x06\\x06'\\x03\\x06\\x062\\x03\\x0786\" +\n\t\"\\x03\\x079/\\x03\\x079 \\x03\\x07:\\x0e\\x03\\x07:\\x1b\\x03\\x07:%\\x03\\x07;/\\x03\" +\n\t\"\\x07;%\\x03\\x074\\x11\\x03\\x076\\x09\\x03\\x077*\\x03\\x070\\x01\\x03\\x070\\x0f\\x03\" +\n\t\"\\x070.\\x03\\x071\\x16\\x03\\x071\\x04\\x03\\x0710\\x03\\x072\\x18\\x03\\x072-\\x03\" +\n\t\"\\x073\\x14\\x03\\x073>\\x03\\x07'\\x09\\x03\\x07 \\x00\\x03\\x07\\x1f\\x0b\\x03\\x07\" +\n\t\"\\x18#\\x03\\x07\\x18(\\x03\\x07\\x186\\x03\\x07\\x18\\x03\\x03\\x07\\x19\\x16\\x03\\x07\" +\n\t\"\\x116\\x03\\x07\\x12'\\x03\\x07\\x13\\x10\\x03\\x07\\x0c&\\x03\\x07\\x0c\\x08\\x03\\x07\" +\n\t\"\\x0c\\x13\\x03\\x07\\x0d\\x02\\x03\\x07\\x0d\\x1c\\x03\\x07\\x0b5\\x03\\x07\\x0b\\x0a\" +\n\t\"\\x03\\x07\\x0b\\x01\\x03\\x07\\x0b\\x0f\\x03\\x07\\x05\\x00\\x03\\x07\\x05\\x09\\x03\\x07\" +\n\t\"\\x05\\x0b\\x03\\x07\\x07\\x01\\x03\\x07\\x07\\x08\\x03\\x07\\x00<\\x03\\x07\\x00+\\x03\" +\n\t\"\\x07\\x01)\\x03\\x07\\x01\\x1b\\x03\\x07\\x01\\x08\\x03\\x07\\x03?\\x03\\x0445\\x03\\x04\" +\n\t\"4\\x08\\x03\\x0454\\x03\\x04)/\\x03\\x04)5\\x03\\x04+\\x05\\x03\\x04+\\x14\\x03\\x04+ \" +\n\t\"\\x03\\x04+<\\x03\\x04*&\\x03\\x04*\\x22\\x03\\x04&8\\x03\\x04!\\x01\\x03\\x04!\\x22\" +\n\t\"\\x03\\x04\\x11+\\x03\\x04\\x10.\\x03\\x04\\x104\\x03\\x04\\x13=\\x03\\x04\\x12\\x04\\x03\" +\n\t\"\\x04\\x12\\x0a\\x03\\x04\\x0d\\x1d\\x03\\x04\\x0d\\x07\\x03\\x04\\x0d \\x03\\x05<>\\x03\" +\n\t\"\\x055<\\x03\\x055!\\x03\\x055#\\x03\\x055&\\x03\\x054\\x1d\\x03\\x054\\x02\\x03\\x054\" +\n\t\"\\x07\\x03\\x0571\\x03\\x053\\x1a\\x03\\x053\\x16\\x03\\x05.<\\x03\\x05.\\x07\\x03\\x05)\" +\n\t\":\\x03\\x05)<\\x03\\x05)\\x0c\\x03\\x05)\\x15\\x03\\x05+-\\x03\\x05+5\\x03\\x05$\\x1e\" +\n\t\"\\x03\\x05$\\x14\\x03\\x05'\\x04\\x03\\x05'\\x14\\x03\\x05&\\x02\\x03\\x05\\x226\\x03\" +\n\t\"\\x05\\x22\\x0c\\x03\\x05\\x22\\x1c\\x03\\x05\\x19\\x0a\\x03\\x05\\x1b\\x09\\x03\\x05\\x1b\" +\n\t\"\\x0c\\x03\\x05\\x14\\x07\\x03\\x05\\x16?\\x03\\x05\\x16\\x0c\\x03\\x05\\x0c\\x05\\x03\" +\n\t\"\\x05\\x0e\\x0f\\x03\\x05\\x01\\x0e\\x03\\x05\\x00(\\x03\\x05\\x030\\x03\\x05\\x03\\x06\" +\n\t\"\\x03\\x0a==\\x03\\x0a=1\\x03\\x0a=,\\x03\\x0a=\\x0c\\x03\\x0a??\\x03\\x0a<\\x08\\x03\" +\n\t\"\\x0a9!\\x03\\x0a9)\\x03\\x0a97\\x03\\x0a99\\x03\\x0a6\\x0a\\x03\\x0a6\\x1c\\x03\\x0a6\" +\n\t\"\\x17\\x03\\x0a7'\\x03\\x0a78\\x03\\x0a73\\x03\\x0a'\\x01\\x03\\x0a'&\\x03\\x0a\\x1f\" +\n\t\"\\x0e\\x03\\x0a\\x1f\\x03\\x03\\x0a\\x1f3\\x03\\x0a\\x1b/\\x03\\x0a\\x18\\x19\\x03\\x0a\" +\n\t\"\\x19\\x01\\x03\\x0a\\x16\\x14\\x03\\x0a\\x0e\\x22\\x03\\x0a\\x0f\\x10\\x03\\x0a\\x0f\\x02\" +\n\t\"\\x03\\x0a\\x0f \\x03\\x0a\\x0c\\x04\\x03\\x0a\\x0b>\\x03\\x0a\\x0b+\\x03\\x0a\\x08/\\x03\" +\n\t\"\\x0a\\x046\\x03\\x0a\\x05\\x14\\x03\\x0a\\x00\\x04\\x03\\x0a\\x00\\x10\\x03\\x0a\\x00\" +\n\t\"\\x14\\x03\\x0b<3\\x03\\x0b;*\\x03\\x0b9\\x22\\x03\\x0b9)\\x03\\x0b97\\x03\\x0b+\\x10\" +\n\t\"\\x03\\x0b((\\x03\\x0b&5\\x03\\x0b$\\x1c\\x03\\x0b$\\x12\\x03\\x0b%\\x04\\x03\\x0b#<\" +\n\t\"\\x03\\x0b#0\\x03\\x0b#\\x0d\\x03\\x0b#\\x19\\x03\\x0b!:\\x03\\x0b!\\x1f\\x03\\x0b!\\x00\" +\n\t\"\\x03\\x0b\\x1e5\\x03\\x0b\\x1c\\x1d\\x03\\x0b\\x1d-\\x03\\x0b\\x1d(\\x03\\x0b\\x18.\\x03\" +\n\t\"\\x0b\\x18 \\x03\\x0b\\x18\\x16\\x03\\x0b\\x14\\x13\\x03\\x0b\\x15$\\x03\\x0b\\x15\\x22\" +\n\t\"\\x03\\x0b\\x12\\x1b\\x03\\x0b\\x12\\x10\\x03\\x0b\\x132\\x03\\x0b\\x13=\\x03\\x0b\\x12\" +\n\t\"\\x18\\x03\\x0b\\x0c&\\x03\\x0b\\x061\\x03\\x0b\\x06:\\x03\\x0b\\x05#\\x03\\x0b\\x05<\" +\n\t\"\\x03\\x0b\\x04\\x0b\\x03\\x0b\\x04\\x04\\x03\\x0b\\x04\\x1b\\x03\\x0b\\x042\\x03\\x0b\" +\n\t\"\\x041\\x03\\x0b\\x03\\x03\\x03\\x0b\\x03\\x1d\\x03\\x0b\\x03/\\x03\\x0b\\x03+\\x03\\x0b\" +\n\t\"\\x02\\x1b\\x03\\x0b\\x02\\x00\\x03\\x0b\\x01\\x1e\\x03\\x0b\\x01\\x08\\x03\\x0b\\x015\" +\n\t\"\\x03\\x06\\x0d9\\x03\\x06\\x0d=\\x03\\x06\\x0d?\\x03\\x02\\x001\\x03\\x02\\x003\\x03\" +\n\t\"\\x02\\x02\\x19\\x03\\x02\\x006\\x03\\x02\\x02\\x1b\\x03\\x02\\x004\\x03\\x02\\x00<\\x03\" +\n\t\"\\x02\\x02\\x0a\\x03\\x02\\x02\\x0e\\x03\\x02\\x01\\x1a\\x03\\x02\\x01\\x07\\x03\\x02\\x01\" +\n\t\"\\x05\\x03\\x02\\x01\\x0b\\x03\\x02\\x01%\\x03\\x02\\x01\\x0c\\x03\\x02\\x01\\x04\\x03\" +\n\t\"\\x02\\x01\\x1c\\x03\\x02\\x00.\\x03\\x02\\x002\\x03\\x02\\x00>\\x03\\x02\\x00\\x12\\x03\" +\n\t\"\\x02\\x00\\x16\\x03\\x02\\x011\\x03\\x02\\x013\\x03\\x02\\x02 \\x03\\x02\\x02%\\x03\\x02\" +\n\t\"\\x02$\\x03\\x02\\x028\\x03\\x02\\x02;\\x03\\x02\\x024\\x03\\x02\\x012\\x03\\x02\\x022\" +\n\t\"\\x03\\x02\\x02/\\x03\\x02\\x01,\\x03\\x02\\x01\\x13\\x03\\x02\\x01\\x16\\x03\\x02\\x01\" +\n\t\"\\x11\\x03\\x02\\x01\\x1e\\x03\\x02\\x01\\x15\\x03\\x02\\x01\\x17\\x03\\x02\\x01\\x0f\\x03\" +\n\t\"\\x02\\x01\\x08\\x03\\x02\\x00?\\x03\\x02\\x03\\x07\\x03\\x02\\x03\\x0d\\x03\\x02\\x03\" +\n\t\"\\x13\\x03\\x02\\x03\\x1d\\x03\\x02\\x03\\x1f\\x03\\x02\\x00\\x03\\x03\\x02\\x00\\x0d\\x03\" +\n\t\"\\x02\\x00\\x01\\x03\\x02\\x00\\x1b\\x03\\x02\\x00\\x19\\x03\\x02\\x00\\x18\\x03\\x02\\x00\" +\n\t\"\\x13\\x03\\x02\\x00/\\x03\\x07>\\x12\\x03\\x07<\\x1f\\x03\\x07>\\x1d\\x03\\x06\\x1d\\x0e\" +\n\t\"\\x03\\x07>\\x1c\\x03\\x07>:\\x03\\x07>\\x13\\x03\\x04\\x12+\\x03\\x07?\\x03\\x03\\x07>\" +\n\t\"\\x02\\x03\\x06\\x224\\x03\\x06\\x1a.\\x03\\x07<%\\x03\\x06\\x1c\\x0b\\x03\\x0609\\x03\" +\n\t\"\\x05\\x1f\\x01\\x03\\x04'\\x08\\x03\\x93\\xfd\\xf5\\x03\\x02\\x0d \\x03\\x02\\x0d#\\x03\" +\n\t\"\\x02\\x0d!\\x03\\x02\\x0d&\\x03\\x02\\x0d\\x22\\x03\\x02\\x0d/\\x03\\x02\\x0d,\\x03\\x02\" +\n\t\"\\x0d$\\x03\\x02\\x0d'\\x03\\x02\\x0d%\\x03\\x02\\x0d;\\x03\\x02\\x0d=\\x03\\x02\\x0d?\" +\n\t\"\\x03\\x099.\\x03\\x08\\x0b7\\x03\\x08\\x02\\x14\\x03\\x08\\x14\\x0d\\x03\\x08.:\\x03\" +\n\t\"\\x089'\\x03\\x0f\\x0b\\x18\\x03\\x0f\\x1c1\\x03\\x0f\\x17&\\x03\\x0f9\\x1f\\x03\\x0f0\" +\n\t\"\\x0c\\x03\\x0e\\x0a9\\x03\\x0e\\x056\\x03\\x0e\\x1c#\\x03\\x0f\\x13\\x0e\\x03\\x072\\x00\" +\n\t\"\\x03\\x070\\x0d\\x03\\x072\\x0b\\x03\\x06\\x11\\x18\\x03\\x070\\x10\\x03\\x06\\x0f(\\x03\" +\n\t\"\\x072\\x05\\x03\\x06\\x0f,\\x03\\x073\\x15\\x03\\x06\\x07\\x08\\x03\\x05\\x16\\x02\\x03\" +\n\t\"\\x04\\x0b \\x03\\x05:8\\x03\\x05\\x16%\\x03\\x0a\\x0d\\x1f\\x03\\x06\\x16\\x10\\x03\\x05\" +\n\t\"\\x1d5\\x03\\x05*;\\x03\\x05\\x16\\x1b\\x03\\x04.-\\x03\\x06\\x1a\\x19\\x03\\x04\\x03,\" +\n\t\"\\x03\\x0b87\\x03\\x04/\\x0a\\x03\\x06\\x00,\\x03\\x04-\\x01\\x03\\x04\\x1e-\\x03\\x06/(\" +\n\t\"\\x03\\x0a\\x0b5\\x03\\x06\\x0e7\\x03\\x06\\x07.\\x03\\x0597\\x03\\x0a*%\\x03\\x0760\" +\n\t\"\\x03\\x06\\x0c;\\x03\\x05'\\x00\\x03\\x072.\\x03\\x072\\x08\\x03\\x06=\\x01\\x03\\x06\" +\n\t\"\\x05\\x1b\\x03\\x06\\x06\\x12\\x03\\x06$=\\x03\\x06'\\x0d\\x03\\x04\\x11\\x0f\\x03\\x076\" +\n\t\",\\x03\\x06\\x07;\\x03\\x06.,\\x03\\x86\\xf9\\xea\\x03\\x8f\\xff\\xeb\\x02\\x092\\x02\" +\n\t\"\\x095\\x02\\x094\\x02\\x09;\\x02\\x09>\\x02\\x098\\x02\\x09*\\x02\\x09/\\x02\\x09,\\x02\" +\n\t\"\\x09%\\x02\\x09&\\x02\\x09#\\x02\\x09 \\x02\\x08!\\x02\\x08%\\x02\\x08$\\x02\\x08+\\x02\" +\n\t\"\\x08.\\x02\\x08*\\x02\\x08&\\x02\\x088\\x02\\x08>\\x02\\x084\\x02\\x086\\x02\\x080\\x02\" +\n\t\"\\x08\\x10\\x02\\x08\\x17\\x02\\x08\\x12\\x02\\x08\\x1d\\x02\\x08\\x1f\\x02\\x08\\x13\\x02\" +\n\t\"\\x08\\x15\\x02\\x08\\x14\\x02\\x08\\x0c\\x03\\x8b\\xfd\\xd0\\x03\\x81\\xec\\xc6\\x03\\x87\" +\n\t\"\\xe0\\x8a\\x03-2\\xe3\\x03\\x80\\xef\\xe4\\x03-2\\xea\\x03\\x88\\xe6\\xeb\\x03\\x8e\\xe6\" +\n\t\"\\xe8\\x03\\x84\\xe6\\xe9\\x03\\x97\\xe6\\xee\\x03-2\\xf9\\x03-2\\xf6\\x03\\x8e\\xe3\\xad\" +\n\t\"\\x03\\x80\\xe3\\x92\\x03\\x88\\xe3\\x90\\x03\\x8e\\xe3\\x90\\x03\\x80\\xe3\\x97\\x03\\x88\" +\n\t\"\\xe3\\x95\\x03\\x88\\xfe\\xcb\\x03\\x8e\\xfe\\xca\\x03\\x84\\xfe\\xcd\\x03\\x91\\xef\\xc9\" +\n\t\"\\x03-2\\xc1\\x03-2\\xc0\\x03-2\\xcb\\x03\\x88@\\x09\\x03\\x8e@\\x08\\x03\\x8f\\xe0\\xf5\" +\n\t\"\\x03\\x8e\\xe6\\xf9\\x03\\x8e\\xe0\\xfa\\x03\\x93\\xff\\xf4\\x03\\x84\\xee\\xd3\\x03\\x0b\" +\n\t\"(\\x04\\x023 \\x021;\\x02\\x01*\\x03\\x0b#\\x10\\x03\\x0b 0\\x03\\x0b!\\x10\\x03\\x0b!0\" +\n\t\"\\x03\\x07\\x15\\x08\\x03\\x09?5\\x03\\x07\\x1f\\x08\\x03\\x07\\x17\\x0b\\x03\\x09\\x1f\" +\n\t\"\\x15\\x03\\x0b\\x1c7\\x03\\x0a+#\\x03\\x06\\x1a\\x1b\\x03\\x06\\x1a\\x14\\x03\\x0a\\x01\" +\n\t\"\\x18\\x03\\x06#\\x1b\\x03\\x0a2\\x0c\\x03\\x0a\\x01\\x04\\x03\\x09#;\\x03\\x08='\\x03\" +\n\t\"\\x08\\x1a\\x0a\\x03\\x07</\\x03\\x07:+\\x03\\x07\\x07*\\x03\\x06&\\x1c\\x03\\x09\\x0c\" +\n\t\"\\x16\\x03\\x09\\x10\\x0e\\x03\\x08'\\x0f\\x03\\x08+\\x09\\x03\\x074%\\x03\\x06!3\\x03\" +\n\t\"\\x06\\x03+\\x03\\x0b\\x1e\\x19\\x03\\x0a))\\x03\\x09\\x08\\x19\\x03\\x08,\\x05\\x03\\x07\" +\n\t\"<2\\x03\\x06\\x1c>\\x03\\x0a\\x111\\x03\\x09\\x1b\\x09\\x03\\x073.\\x03\\x07\\x01\\x00\" +\n\t\"\\x03\\x09/,\\x03\\x07#>\\x03\\x07\\x048\\x03\\x0a\\x1f\\x22\\x03\\x098>\\x03\\x09\\x11\" +\n\t\"\\x00\\x03\\x08/\\x17\\x03\\x06'\\x22\\x03\\x0b\\x1a+\\x03\\x0a\\x22\\x19\\x03\\x0a/1\" +\n\t\"\\x03\\x0974\\x03\\x09\\x0f\\x22\\x03\\x08,\\x22\\x03\\x08?\\x14\\x03\\x07$5\\x03\\x07<3\" +\n\t\"\\x03\\x07=*\\x03\\x07\\x13\\x18\\x03\\x068\\x0a\\x03\\x06\\x09\\x16\\x03\\x06\\x13\\x00\" +\n\t\"\\x03\\x08\\x067\\x03\\x08\\x01\\x03\\x03\\x08\\x12\\x1d\\x03\\x07+7\\x03\\x06(;\\x03\" +\n\t\"\\x06\\x1c?\\x03\\x07\\x0e\\x17\\x03\\x0a\\x06\\x1d\\x03\\x0a\\x19\\x07\\x03\\x08\\x14$\" +\n\t\"\\x03\\x07$;\\x03\\x08,$\\x03\\x08\\x06\\x0d\\x03\\x07\\x16\\x0a\\x03\\x06>>\\x03\\x0a\" +\n\t\"\\x06\\x12\\x03\\x0a\\x14)\\x03\\x09\\x0d\\x1f\\x03\\x09\\x12\\x17\\x03\\x09\\x19\\x01\" +\n\t\"\\x03\\x08\\x11 \\x03\\x08\\x1d'\\x03\\x06<\\x1a\\x03\\x0a.\\x00\\x03\\x07'\\x18\\x03\" +\n\t\"\\x0a\\x22\\x08\\x03\\x08\\x0d\\x0a\\x03\\x08\\x13)\\x03\\x07*)\\x03\\x06<,\\x03\\x07\" +\n\t\"\\x0b\\x1a\\x03\\x09.\\x14\\x03\\x09\\x0d\\x1e\\x03\\x07\\x0e#\\x03\\x0b\\x1d'\\x03\\x0a\" +\n\t\"\\x0a8\\x03\\x09%2\\x03\\x08+&\\x03\\x080\\x12\\x03\\x0a)4\\x03\\x08\\x06\\x1f\\x03\\x0b\" +\n\t\"\\x1b\\x1a\\x03\\x0a\\x1b\\x0f\\x03\\x0b\\x1d*\\x03\\x09\\x16$\\x03\\x090\\x11\\x03\\x08\" +\n\t\"\\x11\\x08\\x03\\x0a*(\\x03\\x0a\\x042\\x03\\x089,\\x03\\x074'\\x03\\x07\\x0f\\x05\\x03\" +\n\t\"\\x09\\x0b\\x0a\\x03\\x07\\x1b\\x01\\x03\\x09\\x17:\\x03\\x09.\\x0d\\x03\\x07.\\x11\\x03\" +\n\t\"\\x09+\\x15\\x03\\x080\\x13\\x03\\x0b\\x1f\\x19\\x03\\x0a \\x11\\x03\\x0a\\x220\\x03\\x09\" +\n\t\"\\x07;\\x03\\x08\\x16\\x1c\\x03\\x07,\\x13\\x03\\x07\\x0e/\\x03\\x06\\x221\\x03\\x0a.\" +\n\t\"\\x0a\\x03\\x0a7\\x02\\x03\\x0a\\x032\\x03\\x0a\\x1d.\\x03\\x091\\x06\\x03\\x09\\x19:\" +\n\t\"\\x03\\x08\\x02/\\x03\\x060+\\x03\\x06\\x0f-\\x03\\x06\\x1c\\x1f\\x03\\x06\\x1d\\x07\\x03\" +\n\t\"\\x0a,\\x11\\x03\\x09=\\x0d\\x03\\x09\\x0b;\\x03\\x07\\x1b/\\x03\\x0a\\x1f:\\x03\\x09 \" +\n\t\"\\x1f\\x03\\x09.\\x10\\x03\\x094\\x0b\\x03\\x09\\x1a1\\x03\\x08#\\x1a\\x03\\x084\\x1d\" +\n\t\"\\x03\\x08\\x01\\x1f\\x03\\x08\\x11\\x22\\x03\\x07'8\\x03\\x07\\x1a>\\x03\\x0757\\x03\" +\n\t\"\\x06&9\\x03\\x06+\\x11\\x03\\x0a.\\x0b\\x03\\x0a,>\\x03\\x0a4#\\x03\\x08%\\x17\\x03\" +\n\t\"\\x07\\x05\\x22\\x03\\x07\\x0c\\x0b\\x03\\x0a\\x1d+\\x03\\x0a\\x19\\x16\\x03\\x09+\\x1f\" +\n\t\"\\x03\\x09\\x08\\x0b\\x03\\x08\\x16\\x18\\x03\\x08+\\x12\\x03\\x0b\\x1d\\x0c\\x03\\x0a=\" +\n\t\"\\x10\\x03\\x0a\\x09\\x0d\\x03\\x0a\\x10\\x11\\x03\\x09&0\\x03\\x08(\\x1f\\x03\\x087\\x07\" +\n\t\"\\x03\\x08\\x185\\x03\\x07'6\\x03\\x06.\\x05\\x03\\x06=\\x04\\x03\\x06;;\\x03\\x06\\x06,\" +\n\t\"\\x03\\x0b\\x18>\\x03\\x08\\x00\\x18\\x03\\x06 \\x03\\x03\\x06<\\x00\\x03\\x09%\\x18\\x03\" +\n\t\"\\x0b\\x1c<\\x03\\x0a%!\\x03\\x0a\\x09\\x12\\x03\\x0a\\x16\\x02\\x03\\x090'\\x03\\x09\" +\n\t\"\\x0e=\\x03\\x08 \\x0e\\x03\\x08>\\x03\\x03\\x074>\\x03\\x06&?\\x03\\x06\\x19\\x09\\x03\" +\n\t\"\\x06?(\\x03\\x0a-\\x0e\\x03\\x09:3\\x03\\x098:\\x03\\x09\\x12\\x0b\\x03\\x09\\x1d\\x17\" +\n\t\"\\x03\\x087\\x05\\x03\\x082\\x14\\x03\\x08\\x06%\\x03\\x08\\x13\\x1f\\x03\\x06\\x06\\x0e\" +\n\t\"\\x03\\x0a\\x22<\\x03\\x09/<\\x03\\x06>+\\x03\\x0a'?\\x03\\x0a\\x13\\x0c\\x03\\x09\\x10<\" +\n\t\"\\x03\\x07\\x1b=\\x03\\x0a\\x19\\x13\\x03\\x09\\x22\\x1d\\x03\\x09\\x07\\x0d\\x03\\x08)\" +\n\t\"\\x1c\\x03\\x06=\\x1a\\x03\\x0a/4\\x03\\x0a7\\x11\\x03\\x0a\\x16:\\x03\\x09?3\\x03\\x09:\" +\n\t\"/\\x03\\x09\\x05\\x0a\\x03\\x09\\x14\\x06\\x03\\x087\\x22\\x03\\x080\\x07\\x03\\x08\\x1a\" +\n\t\"\\x1f\\x03\\x07\\x04(\\x03\\x07\\x04\\x09\\x03\\x06 %\\x03\\x06<\\x08\\x03\\x0a+\\x14\" +\n\t\"\\x03\\x09\\x1d\\x16\\x03\\x0a70\\x03\\x08 >\\x03\\x0857\\x03\\x070\\x0a\\x03\\x06=\\x12\" +\n\t\"\\x03\\x06\\x16%\\x03\\x06\\x1d,\\x03\\x099#\\x03\\x09\\x10>\\x03\\x07 \\x1e\\x03\\x08\" +\n\t\"\\x0c<\\x03\\x08\\x0b\\x18\\x03\\x08\\x15+\\x03\\x08,:\\x03\\x08%\\x22\\x03\\x07\\x0a$\" +\n\t\"\\x03\\x0b\\x1c=\\x03\\x07+\\x08\\x03\\x0a/\\x05\\x03\\x0a \\x07\\x03\\x0a\\x12'\\x03\" +\n\t\"\\x09#\\x11\\x03\\x08\\x1b\\x15\\x03\\x0a\\x06\\x01\\x03\\x09\\x1c\\x1b\\x03\\x0922\\x03\" +\n\t\"\\x07\\x14<\\x03\\x07\\x09\\x04\\x03\\x061\\x04\\x03\\x07\\x0e\\x01\\x03\\x0a\\x13\\x18\" +\n\t\"\\x03\\x0a-\\x0c\\x03\\x0a?\\x0d\\x03\\x0a\\x09\\x0a\\x03\\x091&\\x03\\x0a/\\x0b\\x03\" +\n\t\"\\x08$<\\x03\\x083\\x1d\\x03\\x08\\x0c$\\x03\\x08\\x0d\\x07\\x03\\x08\\x0d?\\x03\\x08\" +\n\t\"\\x0e\\x14\\x03\\x065\\x0a\\x03\\x08\\x1a#\\x03\\x08\\x16#\\x03\\x0702\\x03\\x07\\x03\" +\n\t\"\\x1a\\x03\\x06(\\x1d\\x03\\x06+\\x1b\\x03\\x06\\x0b\\x05\\x03\\x06\\x0b\\x17\\x03\\x06\" +\n\t\"\\x0c\\x04\\x03\\x06\\x1e\\x19\\x03\\x06+0\\x03\\x062\\x18\\x03\\x0b\\x16\\x1e\\x03\\x0a+\" +\n\t\"\\x16\\x03\\x0a-?\\x03\\x0a#:\\x03\\x0a#\\x10\\x03\\x0a%$\\x03\\x0a>+\\x03\\x0a01\\x03\" +\n\t\"\\x0a1\\x10\\x03\\x0a\\x099\\x03\\x0a\\x0a\\x12\\x03\\x0a\\x19\\x1f\\x03\\x0a\\x19\\x12\" +\n\t\"\\x03\\x09*)\\x03\\x09-\\x16\\x03\\x09.1\\x03\\x09.2\\x03\\x09<\\x0e\\x03\\x09> \\x03\" +\n\t\"\\x093\\x12\\x03\\x09\\x0b\\x01\\x03\\x09\\x1c2\\x03\\x09\\x11\\x1c\\x03\\x09\\x15%\\x03\" +\n\t\"\\x08,&\\x03\\x08!\\x22\\x03\\x089(\\x03\\x08\\x0b\\x1a\\x03\\x08\\x0d2\\x03\\x08\\x0c\" +\n\t\"\\x04\\x03\\x08\\x0c\\x06\\x03\\x08\\x0c\\x1f\\x03\\x08\\x0c\\x0c\\x03\\x08\\x0f\\x1f\\x03\" +\n\t\"\\x08\\x0f\\x1d\\x03\\x08\\x00\\x14\\x03\\x08\\x03\\x14\\x03\\x08\\x06\\x16\\x03\\x08\\x1e\" +\n\t\"#\\x03\\x08\\x11\\x11\\x03\\x08\\x10\\x18\\x03\\x08\\x14(\\x03\\x07)\\x1e\\x03\\x07.1\" +\n\t\"\\x03\\x07 $\\x03\\x07 '\\x03\\x078\\x08\\x03\\x07\\x0d0\\x03\\x07\\x0f7\\x03\\x07\\x05#\" +\n\t\"\\x03\\x07\\x05\\x1a\\x03\\x07\\x1a7\\x03\\x07\\x1d-\\x03\\x07\\x17\\x10\\x03\\x06)\\x1f\" +\n\t\"\\x03\\x062\\x0b\\x03\\x066\\x16\\x03\\x06\\x09\\x11\\x03\\x09(\\x1e\\x03\\x07!5\\x03\" +\n\t\"\\x0b\\x11\\x16\\x03\\x0a/\\x04\\x03\\x0a,\\x1a\\x03\\x0b\\x173\\x03\\x0a,1\\x03\\x0a/5\" +\n\t\"\\x03\\x0a\\x221\\x03\\x0a\\x22\\x0d\\x03\\x0a?%\\x03\\x0a<,\\x03\\x0a?#\\x03\\x0a>\\x19\" +\n\t\"\\x03\\x0a\\x08&\\x03\\x0a\\x0b\\x0e\\x03\\x0a\\x0c:\\x03\\x0a\\x0c+\\x03\\x0a\\x03\\x22\" +\n\t\"\\x03\\x0a\\x06)\\x03\\x0a\\x11\\x10\\x03\\x0a\\x11\\x1a\\x03\\x0a\\x17-\\x03\\x0a\\x14(\" +\n\t\"\\x03\\x09)\\x1e\\x03\\x09/\\x09\\x03\\x09.\\x00\\x03\\x09,\\x07\\x03\\x09/*\\x03\\x09-9\" +\n\t\"\\x03\\x09\\x228\\x03\\x09%\\x09\\x03\\x09:\\x12\\x03\\x09;\\x1d\\x03\\x09?\\x06\\x03\" +\n\t\"\\x093%\\x03\\x096\\x05\\x03\\x096\\x08\\x03\\x097\\x02\\x03\\x09\\x07,\\x03\\x09\\x04,\" +\n\t\"\\x03\\x09\\x1f\\x16\\x03\\x09\\x11\\x03\\x03\\x09\\x11\\x12\\x03\\x09\\x168\\x03\\x08*\" +\n\t\"\\x05\\x03\\x08/2\\x03\\x084:\\x03\\x08\\x22+\\x03\\x08 0\\x03\\x08&\\x0a\\x03\\x08;\" +\n\t\"\\x10\\x03\\x08>$\\x03\\x08>\\x18\\x03\\x0829\\x03\\x082:\\x03\\x081,\\x03\\x081<\\x03\" +\n\t\"\\x081\\x1c\\x03\\x087#\\x03\\x087*\\x03\\x08\\x09'\\x03\\x08\\x00\\x1d\\x03\\x08\\x05-\" +\n\t\"\\x03\\x08\\x1f4\\x03\\x08\\x1d\\x04\\x03\\x08\\x16\\x0f\\x03\\x07*7\\x03\\x07'!\\x03\" +\n\t\"\\x07%\\x1b\\x03\\x077\\x0c\\x03\\x07\\x0c1\\x03\\x07\\x0c.\\x03\\x07\\x00\\x06\\x03\\x07\" +\n\t\"\\x01\\x02\\x03\\x07\\x010\\x03\\x07\\x06=\\x03\\x07\\x01\\x03\\x03\\x07\\x01\\x13\\x03\" +\n\t\"\\x07\\x06\\x06\\x03\\x07\\x05\\x0a\\x03\\x07\\x1f\\x09\\x03\\x07\\x17:\\x03\\x06*1\\x03\" +\n\t\"\\x06-\\x1d\\x03\\x06\\x223\\x03\\x062:\\x03\\x060$\\x03\\x066\\x1e\\x03\\x064\\x12\\x03\" +\n\t\"\\x0645\\x03\\x06\\x0b\\x00\\x03\\x06\\x0b7\\x03\\x06\\x07\\x1f\\x03\\x06\\x15\\x12\\x03\" +\n\t\"\\x0c\\x05\\x0f\\x03\\x0b+\\x0b\\x03\\x0b+-\\x03\\x06\\x16\\x1b\\x03\\x06\\x15\\x17\\x03\" +\n\t\"\\x89\\xca\\xea\\x03\\x89\\xca\\xe8\\x03\\x0c8\\x10\\x03\\x0c8\\x01\\x03\\x0c8\\x0f\\x03\" +\n\t\"\\x0d8%\\x03\\x0d8!\\x03\\x0c8-\\x03\\x0c8/\\x03\\x0c8+\\x03\\x0c87\\x03\\x0c85\\x03\" +\n\t\"\\x0c9\\x09\\x03\\x0c9\\x0d\\x03\\x0c9\\x0f\\x03\\x0c9\\x0b\\x03\\xcfu\\x0c\\x03\\xcfu\" +\n\t\"\\x0f\\x03\\xcfu\\x0e\\x03\\xcfu\\x09\\x03\\x0c9\\x10\\x03\\x0d9\\x0c\\x03\\xcf`;\\x03\" +\n\t\"\\xcf`>\\x03\\xcf`9\\x03\\xcf`8\\x03\\xcf`7\\x03\\xcf`*\\x03\\xcf`-\\x03\\xcf`,\\x03\" +\n\t\"\\x0d\\x1b\\x1a\\x03\\x0d\\x1b&\\x03\\x0c=.\\x03\\x0c=%\\x03\\x0c>\\x1e\\x03\\x0c>\\x14\" +\n\t\"\\x03\\x0c?\\x06\\x03\\x0c?\\x0b\\x03\\x0c?\\x0c\\x03\\x0c?\\x0d\\x03\\x0c?\\x02\\x03\" +\n\t\"\\x0c>\\x0f\\x03\\x0c>\\x08\\x03\\x0c>\\x09\\x03\\x0c>,\\x03\\x0c>\\x0c\\x03\\x0c?\\x13\" +\n\t\"\\x03\\x0c?\\x16\\x03\\x0c?\\x15\\x03\\x0c?\\x1c\\x03\\x0c?\\x1f\\x03\\x0c?\\x1d\\x03\" +\n\t\"\\x0c?\\x1a\\x03\\x0c?\\x17\\x03\\x0c?\\x08\\x03\\x0c?\\x09\\x03\\x0c?\\x0e\\x03\\x0c?\" +\n\t\"\\x04\\x03\\x0c?\\x05\\x03\\x0c<?\\x03\\x0c=\\x00\\x03\\x0c=\\x06\\x03\\x0c=\\x05\\x03\" +\n\t\"\\x0c=\\x0c\\x03\\x0c=\\x0f\\x03\\x0c=\\x0d\\x03\\x0c=\\x0b\\x03\\x0c=\\x07\\x03\\x0c=\" +\n\t\"\\x19\\x03\\x0c=\\x15\\x03\\x0c=\\x11\\x03\\x0c=1\\x03\\x0c=3\\x03\\x0c=0\\x03\\x0c=>\" +\n\t\"\\x03\\x0c=2\\x03\\x0c=6\\x03\\x0c<\\x07\\x03\\x0c<\\x05\\x03\\x0e:!\\x03\\x0e:#\\x03\" +\n\t\"\\x0e8\\x09\\x03\\x0e:&\\x03\\x0e8\\x0b\\x03\\x0e:$\\x03\\x0e:,\\x03\\x0e8\\x1a\\x03\" +\n\t\"\\x0e8\\x1e\\x03\\x0e:*\\x03\\x0e:7\\x03\\x0e:5\\x03\\x0e:;\\x03\\x0e:\\x15\\x03\\x0e:<\" +\n\t\"\\x03\\x0e:4\\x03\\x0e:'\\x03\\x0e:-\\x03\\x0e:%\\x03\\x0e:?\\x03\\x0e:=\\x03\\x0e:)\" +\n\t\"\\x03\\x0e:/\\x03\\xcfs'\\x03\\x0d=\\x0f\\x03\\x0d+*\\x03\\x0d99\\x03\\x0d9;\\x03\\x0d9\" +\n\t\"?\\x03\\x0d)\\x0d\\x03\\x0d(%\\x02\\x01\\x18\\x02\\x01(\\x02\\x01\\x1e\\x03\\x0f$!\\x03\" +\n\t\"\\x0f87\\x03\\x0f4\\x0e\\x03\\x0f5\\x1d\\x03\\x06'\\x03\\x03\\x0f\\x08\\x18\\x03\\x0f\" +\n\t\"\\x0d\\x1b\\x03\\x0e2=\\x03\\x0e;\\x08\\x03\\x0e:\\x0b\\x03\\x0e\\x06$\\x03\\x0e\\x0d)\" +\n\t\"\\x03\\x0e\\x16\\x1f\\x03\\x0e\\x16\\x1b\\x03\\x0d$\\x0a\\x03\\x05,\\x1d\\x03\\x0d. \\x03\" +\n\t\"\\x0d.#\\x03\\x0c(/\\x03\\x09%\\x02\\x03\\x0d90\\x03\\x0d\\x0e4\\x03\\x0d\\x0d\\x0f\\x03\" +\n\t\"\\x0c#\\x00\\x03\\x0c,\\x1e\\x03\\x0c2\\x0e\\x03\\x0c\\x01\\x17\\x03\\x0c\\x09:\\x03\\x0e\" +\n\t\"\\x173\\x03\\x0c\\x08\\x03\\x03\\x0c\\x11\\x07\\x03\\x0c\\x10\\x18\\x03\\x0c\\x1f\\x1c\" +\n\t\"\\x03\\x0c\\x19\\x0e\\x03\\x0c\\x1a\\x1f\\x03\\x0f0>\\x03\\x0b->\\x03\\x0b<+\\x03\\x0b8\" +\n\t\"\\x13\\x03\\x0b\\x043\\x03\\x0b\\x14\\x03\\x03\\x0b\\x16%\\x03\\x0d\\x22&\\x03\\x0b\\x1a\" +\n\t\"\\x1a\\x03\\x0b\\x1a\\x04\\x03\\x0a%9\\x03\\x0a&2\\x03\\x0a&0\\x03\\x0a!\\x1a\\x03\\x0a!\" +\n\t\"7\\x03\\x0a5\\x10\\x03\\x0a=4\\x03\\x0a?\\x0e\\x03\\x0a>\\x10\\x03\\x0a\\x00 \\x03\\x0a\" +\n\t\"\\x0f:\\x03\\x0a\\x0f9\\x03\\x0a\\x0b\\x0a\\x03\\x0a\\x17%\\x03\\x0a\\x1b-\\x03\\x09-\" +\n\t\"\\x1a\\x03\\x09,4\\x03\\x09.,\\x03\\x09)\\x09\\x03\\x096!\\x03\\x091\\x1f\\x03\\x093\" +\n\t\"\\x16\\x03\\x0c+\\x1f\\x03\\x098 \\x03\\x098=\\x03\\x0c(\\x1a\\x03\\x0c(\\x16\\x03\\x09\" +\n\t\"\\x0a+\\x03\\x09\\x16\\x12\\x03\\x09\\x13\\x0e\\x03\\x09\\x153\\x03\\x08)!\\x03\\x09\\x1a\" +\n\t\"\\x01\\x03\\x09\\x18\\x01\\x03\\x08%#\\x03\\x08>\\x22\\x03\\x08\\x05%\\x03\\x08\\x02*\" +\n\t\"\\x03\\x08\\x15;\\x03\\x08\\x1b7\\x03\\x0f\\x07\\x1d\\x03\\x0f\\x04\\x03\\x03\\x070\\x0c\" +\n\t\"\\x03\\x07;\\x0b\\x03\\x07\\x08\\x17\\x03\\x07\\x12\\x06\\x03\\x06/-\\x03\\x0671\\x03\" +\n\t\"\\x065+\\x03\\x06>7\\x03\\x06\\x049\\x03\\x05+\\x1e\\x03\\x05,\\x17\\x03\\x05 \\x1d\\x03\" +\n\t\"\\x05\\x22\\x05\\x03\\x050\\x1d\"\n\n// lookup returns the trie value for the first UTF-8 encoding in s and\n// the width in bytes of this encoding. The size will be 0 if s does not\n// hold enough bytes to complete the encoding. len(s) must be greater than 0.\nfunc (t *idnaTrie) lookup(s []byte) (v uint16, sz int) {\n\tc0 := s[0]\n\tswitch {\n\tcase c0 < 0x80: // is ASCII\n\t\treturn idnaValues[c0], 1\n\tcase c0 < 0xC2:\n\t\treturn 0, 1 // Illegal UTF-8: not a starter, not ASCII.\n\tcase c0 < 0xE0: // 2-byte UTF-8\n\t\tif len(s) < 2 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := idnaIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c1), 2\n\tcase c0 < 0xF0: // 3-byte UTF-8\n\t\tif len(s) < 3 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := idnaIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to := uint32(i)<<6 + uint32(c1)\n\t\ti = idnaIndex[o]\n\t\tc2 := s[2]\n\t\tif c2 < 0x80 || 0xC0 <= c2 {\n\t\t\treturn 0, 2 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c2), 3\n\tcase c0 < 0xF8: // 4-byte UTF-8\n\t\tif len(s) < 4 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := idnaIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to := uint32(i)<<6 + uint32(c1)\n\t\ti = idnaIndex[o]\n\t\tc2 := s[2]\n\t\tif c2 < 0x80 || 0xC0 <= c2 {\n\t\t\treturn 0, 2 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to = uint32(i)<<6 + uint32(c2)\n\t\ti = idnaIndex[o]\n\t\tc3 := s[3]\n\t\tif c3 < 0x80 || 0xC0 <= c3 {\n\t\t\treturn 0, 3 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c3), 4\n\t}\n\t// Illegal rune\n\treturn 0, 1\n}\n\n// lookupUnsafe returns the trie value for the first UTF-8 encoding in s.\n// s must start with a full and valid UTF-8 encoded rune.\nfunc (t *idnaTrie) lookupUnsafe(s []byte) uint16 {\n\tc0 := s[0]\n\tif c0 < 0x80 { // is ASCII\n\t\treturn idnaValues[c0]\n\t}\n\ti := idnaIndex[c0]\n\tif c0 < 0xE0 { // 2-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[1])\n\t}\n\ti = idnaIndex[uint32(i)<<6+uint32(s[1])]\n\tif c0 < 0xF0 { // 3-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[2])\n\t}\n\ti = idnaIndex[uint32(i)<<6+uint32(s[2])]\n\tif c0 < 0xF8 { // 4-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[3])\n\t}\n\treturn 0\n}\n\n// lookupString returns the trie value for the first UTF-8 encoding in s and\n// the width in bytes of this encoding. The size will be 0 if s does not\n// hold enough bytes to complete the encoding. len(s) must be greater than 0.\nfunc (t *idnaTrie) lookupString(s string) (v uint16, sz int) {\n\tc0 := s[0]\n\tswitch {\n\tcase c0 < 0x80: // is ASCII\n\t\treturn idnaValues[c0], 1\n\tcase c0 < 0xC2:\n\t\treturn 0, 1 // Illegal UTF-8: not a starter, not ASCII.\n\tcase c0 < 0xE0: // 2-byte UTF-8\n\t\tif len(s) < 2 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := idnaIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c1), 2\n\tcase c0 < 0xF0: // 3-byte UTF-8\n\t\tif len(s) < 3 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := idnaIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to := uint32(i)<<6 + uint32(c1)\n\t\ti = idnaIndex[o]\n\t\tc2 := s[2]\n\t\tif c2 < 0x80 || 0xC0 <= c2 {\n\t\t\treturn 0, 2 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c2), 3\n\tcase c0 < 0xF8: // 4-byte UTF-8\n\t\tif len(s) < 4 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := idnaIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to := uint32(i)<<6 + uint32(c1)\n\t\ti = idnaIndex[o]\n\t\tc2 := s[2]\n\t\tif c2 < 0x80 || 0xC0 <= c2 {\n\t\t\treturn 0, 2 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to = uint32(i)<<6 + uint32(c2)\n\t\ti = idnaIndex[o]\n\t\tc3 := s[3]\n\t\tif c3 < 0x80 || 0xC0 <= c3 {\n\t\t\treturn 0, 3 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c3), 4\n\t}\n\t// Illegal rune\n\treturn 0, 1\n}\n\n// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s.\n// s must start with a full and valid UTF-8 encoded rune.\nfunc (t *idnaTrie) lookupStringUnsafe(s string) uint16 {\n\tc0 := s[0]\n\tif c0 < 0x80 { // is ASCII\n\t\treturn idnaValues[c0]\n\t}\n\ti := idnaIndex[c0]\n\tif c0 < 0xE0 { // 2-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[1])\n\t}\n\ti = idnaIndex[uint32(i)<<6+uint32(s[1])]\n\tif c0 < 0xF0 { // 3-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[2])\n\t}\n\ti = idnaIndex[uint32(i)<<6+uint32(s[2])]\n\tif c0 < 0xF8 { // 4-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[3])\n\t}\n\treturn 0\n}\n\n// idnaTrie. Total size: 29052 bytes (28.37 KiB). Checksum: ef06e7ecc26f36dd.\ntype idnaTrie struct{}\n\nfunc newIdnaTrie(i int) *idnaTrie {\n\treturn &idnaTrie{}\n}\n\n// lookupValue determines the type of block n and looks up the value for b.\nfunc (t *idnaTrie) lookupValue(n uint32, b byte) uint16 {\n\tswitch {\n\tcase n < 125:\n\t\treturn uint16(idnaValues[n<<6+uint32(b)])\n\tdefault:\n\t\tn -= 125\n\t\treturn uint16(idnaSparse.lookup(n, b))\n\t}\n}\n\n// idnaValues: 127 blocks, 8128 entries, 16256 bytes\n// The third block is the zero block.\nvar idnaValues = [8128]uint16{\n\t// Block 0x0, offset 0x0\n\t0x00: 0x0080, 0x01: 0x0080, 0x02: 0x0080, 0x03: 0x0080, 0x04: 0x0080, 0x05: 0x0080,\n\t0x06: 0x0080, 0x07: 0x0080, 0x08: 0x0080, 0x09: 0x0080, 0x0a: 0x0080, 0x0b: 0x0080,\n\t0x0c: 0x0080, 0x0d: 0x0080, 0x0e: 0x0080, 0x0f: 0x0080, 0x10: 0x0080, 0x11: 0x0080,\n\t0x12: 0x0080, 0x13: 0x0080, 0x14: 0x0080, 0x15: 0x0080, 0x16: 0x0080, 0x17: 0x0080,\n\t0x18: 0x0080, 0x19: 0x0080, 0x1a: 0x0080, 0x1b: 0x0080, 0x1c: 0x0080, 0x1d: 0x0080,\n\t0x1e: 0x0080, 0x1f: 0x0080, 0x20: 0x0080, 0x21: 0x0080, 0x22: 0x0080, 0x23: 0x0080,\n\t0x24: 0x0080, 0x25: 0x0080, 0x26: 0x0080, 0x27: 0x0080, 0x28: 0x0080, 0x29: 0x0080,\n\t0x2a: 0x0080, 0x2b: 0x0080, 0x2c: 0x0080, 0x2d: 0x0008, 0x2e: 0x0008, 0x2f: 0x0080,\n\t0x30: 0x0008, 0x31: 0x0008, 0x32: 0x0008, 0x33: 0x0008, 0x34: 0x0008, 0x35: 0x0008,\n\t0x36: 0x0008, 0x37: 0x0008, 0x38: 0x0008, 0x39: 0x0008, 0x3a: 0x0080, 0x3b: 0x0080,\n\t0x3c: 0x0080, 0x3d: 0x0080, 0x3e: 0x0080, 0x3f: 0x0080,\n\t// Block 0x1, offset 0x40\n\t0x40: 0x0080, 0x41: 0xe105, 0x42: 0xe105, 0x43: 0xe105, 0x44: 0xe105, 0x45: 0xe105,\n\t0x46: 0xe105, 0x47: 0xe105, 0x48: 0xe105, 0x49: 0xe105, 0x4a: 0xe105, 0x4b: 0xe105,\n\t0x4c: 0xe105, 0x4d: 0xe105, 0x4e: 0xe105, 0x4f: 0xe105, 0x50: 0xe105, 0x51: 0xe105,\n\t0x52: 0xe105, 0x53: 0xe105, 0x54: 0xe105, 0x55: 0xe105, 0x56: 0xe105, 0x57: 0xe105,\n\t0x58: 0xe105, 0x59: 0xe105, 0x5a: 0xe105, 0x5b: 0x0080, 0x5c: 0x0080, 0x5d: 0x0080,\n\t0x5e: 0x0080, 0x5f: 0x0080, 0x60: 0x0080, 0x61: 0x0008, 0x62: 0x0008, 0x63: 0x0008,\n\t0x64: 0x0008, 0x65: 0x0008, 0x66: 0x0008, 0x67: 0x0008, 0x68: 0x0008, 0x69: 0x0008,\n\t0x6a: 0x0008, 0x6b: 0x0008, 0x6c: 0x0008, 0x6d: 0x0008, 0x6e: 0x0008, 0x6f: 0x0008,\n\t0x70: 0x0008, 0x71: 0x0008, 0x72: 0x0008, 0x73: 0x0008, 0x74: 0x0008, 0x75: 0x0008,\n\t0x76: 0x0008, 0x77: 0x0008, 0x78: 0x0008, 0x79: 0x0008, 0x7a: 0x0008, 0x7b: 0x0080,\n\t0x7c: 0x0080, 0x7d: 0x0080, 0x7e: 0x0080, 0x7f: 0x0080,\n\t// Block 0x2, offset 0x80\n\t// Block 0x3, offset 0xc0\n\t0xc0: 0x0040, 0xc1: 0x0040, 0xc2: 0x0040, 0xc3: 0x0040, 0xc4: 0x0040, 0xc5: 0x0040,\n\t0xc6: 0x0040, 0xc7: 0x0040, 0xc8: 0x0040, 0xc9: 0x0040, 0xca: 0x0040, 0xcb: 0x0040,\n\t0xcc: 0x0040, 0xcd: 0x0040, 0xce: 0x0040, 0xcf: 0x0040, 0xd0: 0x0040, 0xd1: 0x0040,\n\t0xd2: 0x0040, 0xd3: 0x0040, 0xd4: 0x0040, 0xd5: 0x0040, 0xd6: 0x0040, 0xd7: 0x0040,\n\t0xd8: 0x0040, 0xd9: 0x0040, 0xda: 0x0040, 0xdb: 0x0040, 0xdc: 0x0040, 0xdd: 0x0040,\n\t0xde: 0x0040, 0xdf: 0x0040, 0xe0: 0x000a, 0xe1: 0x0018, 0xe2: 0x0018, 0xe3: 0x0018,\n\t0xe4: 0x0018, 0xe5: 0x0018, 0xe6: 0x0018, 0xe7: 0x0018, 0xe8: 0x001a, 0xe9: 0x0018,\n\t0xea: 0x0039, 0xeb: 0x0018, 0xec: 0x0018, 0xed: 0x03c0, 0xee: 0x0018, 0xef: 0x004a,\n\t0xf0: 0x0018, 0xf1: 0x0018, 0xf2: 0x0069, 0xf3: 0x0079, 0xf4: 0x008a, 0xf5: 0x0005,\n\t0xf6: 0x0018, 0xf7: 0x0008, 0xf8: 0x00aa, 0xf9: 0x00c9, 0xfa: 0x00d9, 0xfb: 0x0018,\n\t0xfc: 0x00e9, 0xfd: 0x0119, 0xfe: 0x0149, 0xff: 0x0018,\n\t// Block 0x4, offset 0x100\n\t0x100: 0xe00d, 0x101: 0x0008, 0x102: 0xe00d, 0x103: 0x0008, 0x104: 0xe00d, 0x105: 0x0008,\n\t0x106: 0xe00d, 0x107: 0x0008, 0x108: 0xe00d, 0x109: 0x0008, 0x10a: 0xe00d, 0x10b: 0x0008,\n\t0x10c: 0xe00d, 0x10d: 0x0008, 0x10e: 0xe00d, 0x10f: 0x0008, 0x110: 0xe00d, 0x111: 0x0008,\n\t0x112: 0xe00d, 0x113: 0x0008, 0x114: 0xe00d, 0x115: 0x0008, 0x116: 0xe00d, 0x117: 0x0008,\n\t0x118: 0xe00d, 0x119: 0x0008, 0x11a: 0xe00d, 0x11b: 0x0008, 0x11c: 0xe00d, 0x11d: 0x0008,\n\t0x11e: 0xe00d, 0x11f: 0x0008, 0x120: 0xe00d, 0x121: 0x0008, 0x122: 0xe00d, 0x123: 0x0008,\n\t0x124: 0xe00d, 0x125: 0x0008, 0x126: 0xe00d, 0x127: 0x0008, 0x128: 0xe00d, 0x129: 0x0008,\n\t0x12a: 0xe00d, 0x12b: 0x0008, 0x12c: 0xe00d, 0x12d: 0x0008, 0x12e: 0xe00d, 0x12f: 0x0008,\n\t0x130: 0x0179, 0x131: 0x0008, 0x132: 0x0035, 0x133: 0x004d, 0x134: 0xe00d, 0x135: 0x0008,\n\t0x136: 0xe00d, 0x137: 0x0008, 0x138: 0x0008, 0x139: 0xe01d, 0x13a: 0x0008, 0x13b: 0xe03d,\n\t0x13c: 0x0008, 0x13d: 0xe01d, 0x13e: 0x0008, 0x13f: 0x0199,\n\t// Block 0x5, offset 0x140\n\t0x140: 0x0199, 0x141: 0xe01d, 0x142: 0x0008, 0x143: 0xe03d, 0x144: 0x0008, 0x145: 0xe01d,\n\t0x146: 0x0008, 0x147: 0xe07d, 0x148: 0x0008, 0x149: 0x01b9, 0x14a: 0xe00d, 0x14b: 0x0008,\n\t0x14c: 0xe00d, 0x14d: 0x0008, 0x14e: 0xe00d, 0x14f: 0x0008, 0x150: 0xe00d, 0x151: 0x0008,\n\t0x152: 0xe00d, 0x153: 0x0008, 0x154: 0xe00d, 0x155: 0x0008, 0x156: 0xe00d, 0x157: 0x0008,\n\t0x158: 0xe00d, 0x159: 0x0008, 0x15a: 0xe00d, 0x15b: 0x0008, 0x15c: 0xe00d, 0x15d: 0x0008,\n\t0x15e: 0xe00d, 0x15f: 0x0008, 0x160: 0xe00d, 0x161: 0x0008, 0x162: 0xe00d, 0x163: 0x0008,\n\t0x164: 0xe00d, 0x165: 0x0008, 0x166: 0xe00d, 0x167: 0x0008, 0x168: 0xe00d, 0x169: 0x0008,\n\t0x16a: 0xe00d, 0x16b: 0x0008, 0x16c: 0xe00d, 0x16d: 0x0008, 0x16e: 0xe00d, 0x16f: 0x0008,\n\t0x170: 0xe00d, 0x171: 0x0008, 0x172: 0xe00d, 0x173: 0x0008, 0x174: 0xe00d, 0x175: 0x0008,\n\t0x176: 0xe00d, 0x177: 0x0008, 0x178: 0x0065, 0x179: 0xe01d, 0x17a: 0x0008, 0x17b: 0xe03d,\n\t0x17c: 0x0008, 0x17d: 0xe01d, 0x17e: 0x0008, 0x17f: 0x01d9,\n\t// Block 0x6, offset 0x180\n\t0x180: 0x0008, 0x181: 0x007d, 0x182: 0xe00d, 0x183: 0x0008, 0x184: 0xe00d, 0x185: 0x0008,\n\t0x186: 0x007d, 0x187: 0xe07d, 0x188: 0x0008, 0x189: 0x0095, 0x18a: 0x00ad, 0x18b: 0xe03d,\n\t0x18c: 0x0008, 0x18d: 0x0008, 0x18e: 0x00c5, 0x18f: 0x00dd, 0x190: 0x00f5, 0x191: 0xe01d,\n\t0x192: 0x0008, 0x193: 0x010d, 0x194: 0x0125, 0x195: 0x0008, 0x196: 0x013d, 0x197: 0x013d,\n\t0x198: 0xe00d, 0x199: 0x0008, 0x19a: 0x0008, 0x19b: 0x0008, 0x19c: 0x010d, 0x19d: 0x0155,\n\t0x19e: 0x0008, 0x19f: 0x016d, 0x1a0: 0xe00d, 0x1a1: 0x0008, 0x1a2: 0xe00d, 0x1a3: 0x0008,\n\t0x1a4: 0xe00d, 0x1a5: 0x0008, 0x1a6: 0x0185, 0x1a7: 0xe07d, 0x1a8: 0x0008, 0x1a9: 0x019d,\n\t0x1aa: 0x0008, 0x1ab: 0x0008, 0x1ac: 0xe00d, 0x1ad: 0x0008, 0x1ae: 0x0185, 0x1af: 0xe0fd,\n\t0x1b0: 0x0008, 0x1b1: 0x01b5, 0x1b2: 0x01cd, 0x1b3: 0xe03d, 0x1b4: 0x0008, 0x1b5: 0xe01d,\n\t0x1b6: 0x0008, 0x1b7: 0x01e5, 0x1b8: 0xe00d, 0x1b9: 0x0008, 0x1ba: 0x0008, 0x1bb: 0x0008,\n\t0x1bc: 0xe00d, 0x1bd: 0x0008, 0x1be: 0x0008, 0x1bf: 0x0008,\n\t// Block 0x7, offset 0x1c0\n\t0x1c0: 0x0008, 0x1c1: 0x0008, 0x1c2: 0x0008, 0x1c3: 0x0008, 0x1c4: 0x01e9, 0x1c5: 0x01e9,\n\t0x1c6: 0x01e9, 0x1c7: 0x01fd, 0x1c8: 0x0215, 0x1c9: 0x022d, 0x1ca: 0x0245, 0x1cb: 0x025d,\n\t0x1cc: 0x0275, 0x1cd: 0xe01d, 0x1ce: 0x0008, 0x1cf: 0xe0fd, 0x1d0: 0x0008, 0x1d1: 0xe01d,\n\t0x1d2: 0x0008, 0x1d3: 0xe03d, 0x1d4: 0x0008, 0x1d5: 0xe01d, 0x1d6: 0x0008, 0x1d7: 0xe07d,\n\t0x1d8: 0x0008, 0x1d9: 0xe01d, 0x1da: 0x0008, 0x1db: 0xe03d, 0x1dc: 0x0008, 0x1dd: 0x0008,\n\t0x1de: 0xe00d, 0x1df: 0x0008, 0x1e0: 0xe00d, 0x1e1: 0x0008, 0x1e2: 0xe00d, 0x1e3: 0x0008,\n\t0x1e4: 0xe00d, 0x1e5: 0x0008, 0x1e6: 0xe00d, 0x1e7: 0x0008, 0x1e8: 0xe00d, 0x1e9: 0x0008,\n\t0x1ea: 0xe00d, 0x1eb: 0x0008, 0x1ec: 0xe00d, 0x1ed: 0x0008, 0x1ee: 0xe00d, 0x1ef: 0x0008,\n\t0x1f0: 0x0008, 0x1f1: 0x028d, 0x1f2: 0x02a5, 0x1f3: 0x02bd, 0x1f4: 0xe00d, 0x1f5: 0x0008,\n\t0x1f6: 0x02d5, 0x1f7: 0x02ed, 0x1f8: 0xe00d, 0x1f9: 0x0008, 0x1fa: 0xe00d, 0x1fb: 0x0008,\n\t0x1fc: 0xe00d, 0x1fd: 0x0008, 0x1fe: 0xe00d, 0x1ff: 0x0008,\n\t// Block 0x8, offset 0x200\n\t0x200: 0xe00d, 0x201: 0x0008, 0x202: 0xe00d, 0x203: 0x0008, 0x204: 0xe00d, 0x205: 0x0008,\n\t0x206: 0xe00d, 0x207: 0x0008, 0x208: 0xe00d, 0x209: 0x0008, 0x20a: 0xe00d, 0x20b: 0x0008,\n\t0x20c: 0xe00d, 0x20d: 0x0008, 0x20e: 0xe00d, 0x20f: 0x0008, 0x210: 0xe00d, 0x211: 0x0008,\n\t0x212: 0xe00d, 0x213: 0x0008, 0x214: 0xe00d, 0x215: 0x0008, 0x216: 0xe00d, 0x217: 0x0008,\n\t0x218: 0xe00d, 0x219: 0x0008, 0x21a: 0xe00d, 0x21b: 0x0008, 0x21c: 0xe00d, 0x21d: 0x0008,\n\t0x21e: 0xe00d, 0x21f: 0x0008, 0x220: 0x0305, 0x221: 0x0008, 0x222: 0xe00d, 0x223: 0x0008,\n\t0x224: 0xe00d, 0x225: 0x0008, 0x226: 0xe00d, 0x227: 0x0008, 0x228: 0xe00d, 0x229: 0x0008,\n\t0x22a: 0xe00d, 0x22b: 0x0008, 0x22c: 0xe00d, 0x22d: 0x0008, 0x22e: 0xe00d, 0x22f: 0x0008,\n\t0x230: 0xe00d, 0x231: 0x0008, 0x232: 0xe00d, 0x233: 0x0008, 0x234: 0x0008, 0x235: 0x0008,\n\t0x236: 0x0008, 0x237: 0x0008, 0x238: 0x0008, 0x239: 0x0008, 0x23a: 0x0209, 0x23b: 0xe03d,\n\t0x23c: 0x0008, 0x23d: 0x031d, 0x23e: 0x0229, 0x23f: 0x0008,\n\t// Block 0x9, offset 0x240\n\t0x240: 0x0008, 0x241: 0x0008, 0x242: 0x0018, 0x243: 0x0018, 0x244: 0x0018, 0x245: 0x0018,\n\t0x246: 0x0008, 0x247: 0x0008, 0x248: 0x0008, 0x249: 0x0008, 0x24a: 0x0008, 0x24b: 0x0008,\n\t0x24c: 0x0008, 0x24d: 0x0008, 0x24e: 0x0008, 0x24f: 0x0008, 0x250: 0x0008, 0x251: 0x0008,\n\t0x252: 0x0018, 0x253: 0x0018, 0x254: 0x0018, 0x255: 0x0018, 0x256: 0x0018, 0x257: 0x0018,\n\t0x258: 0x029a, 0x259: 0x02ba, 0x25a: 0x02da, 0x25b: 0x02fa, 0x25c: 0x031a, 0x25d: 0x033a,\n\t0x25e: 0x0018, 0x25f: 0x0018, 0x260: 0x03ad, 0x261: 0x0359, 0x262: 0x01d9, 0x263: 0x0369,\n\t0x264: 0x03c5, 0x265: 0x0018, 0x266: 0x0018, 0x267: 0x0018, 0x268: 0x0018, 0x269: 0x0018,\n\t0x26a: 0x0018, 0x26b: 0x0018, 0x26c: 0x0008, 0x26d: 0x0018, 0x26e: 0x0008, 0x26f: 0x0018,\n\t0x270: 0x0018, 0x271: 0x0018, 0x272: 0x0018, 0x273: 0x0018, 0x274: 0x0018, 0x275: 0x0018,\n\t0x276: 0x0018, 0x277: 0x0018, 0x278: 0x0018, 0x279: 0x0018, 0x27a: 0x0018, 0x27b: 0x0018,\n\t0x27c: 0x0018, 0x27d: 0x0018, 0x27e: 0x0018, 0x27f: 0x0018,\n\t// Block 0xa, offset 0x280\n\t0x280: 0x03dd, 0x281: 0x03dd, 0x282: 0x3308, 0x283: 0x03f5, 0x284: 0x0379, 0x285: 0x040d,\n\t0x286: 0x3308, 0x287: 0x3308, 0x288: 0x3308, 0x289: 0x3308, 0x28a: 0x3308, 0x28b: 0x3308,\n\t0x28c: 0x3308, 0x28d: 0x3308, 0x28e: 0x3308, 0x28f: 0x33c0, 0x290: 0x3308, 0x291: 0x3308,\n\t0x292: 0x3308, 0x293: 0x3308, 0x294: 0x3308, 0x295: 0x3308, 0x296: 0x3308, 0x297: 0x3308,\n\t0x298: 0x3308, 0x299: 0x3308, 0x29a: 0x3308, 0x29b: 0x3308, 0x29c: 0x3308, 0x29d: 0x3308,\n\t0x29e: 0x3308, 0x29f: 0x3308, 0x2a0: 0x3308, 0x2a1: 0x3308, 0x2a2: 0x3308, 0x2a3: 0x3308,\n\t0x2a4: 0x3308, 0x2a5: 0x3308, 0x2a6: 0x3308, 0x2a7: 0x3308, 0x2a8: 0x3308, 0x2a9: 0x3308,\n\t0x2aa: 0x3308, 0x2ab: 0x3308, 0x2ac: 0x3308, 0x2ad: 0x3308, 0x2ae: 0x3308, 0x2af: 0x3308,\n\t0x2b0: 0xe00d, 0x2b1: 0x0008, 0x2b2: 0xe00d, 0x2b3: 0x0008, 0x2b4: 0x0425, 0x2b5: 0x0008,\n\t0x2b6: 0xe00d, 0x2b7: 0x0008, 0x2b8: 0x0040, 0x2b9: 0x0040, 0x2ba: 0x03a2, 0x2bb: 0x0008,\n\t0x2bc: 0x0008, 0x2bd: 0x0008, 0x2be: 0x03c2, 0x2bf: 0x043d,\n\t// Block 0xb, offset 0x2c0\n\t0x2c0: 0x0040, 0x2c1: 0x0040, 0x2c2: 0x0040, 0x2c3: 0x0040, 0x2c4: 0x008a, 0x2c5: 0x03d2,\n\t0x2c6: 0xe155, 0x2c7: 0x0455, 0x2c8: 0xe12d, 0x2c9: 0xe13d, 0x2ca: 0xe12d, 0x2cb: 0x0040,\n\t0x2cc: 0x03dd, 0x2cd: 0x0040, 0x2ce: 0x046d, 0x2cf: 0x0485, 0x2d0: 0x0008, 0x2d1: 0xe105,\n\t0x2d2: 0xe105, 0x2d3: 0xe105, 0x2d4: 0xe105, 0x2d5: 0xe105, 0x2d6: 0xe105, 0x2d7: 0xe105,\n\t0x2d8: 0xe105, 0x2d9: 0xe105, 0x2da: 0xe105, 0x2db: 0xe105, 0x2dc: 0xe105, 0x2dd: 0xe105,\n\t0x2de: 0xe105, 0x2df: 0xe105, 0x2e0: 0x049d, 0x2e1: 0x049d, 0x2e2: 0x0040, 0x2e3: 0x049d,\n\t0x2e4: 0x049d, 0x2e5: 0x049d, 0x2e6: 0x049d, 0x2e7: 0x049d, 0x2e8: 0x049d, 0x2e9: 0x049d,\n\t0x2ea: 0x049d, 0x2eb: 0x049d, 0x2ec: 0x0008, 0x2ed: 0x0008, 0x2ee: 0x0008, 0x2ef: 0x0008,\n\t0x2f0: 0x0008, 0x2f1: 0x0008, 0x2f2: 0x0008, 0x2f3: 0x0008, 0x2f4: 0x0008, 0x2f5: 0x0008,\n\t0x2f6: 0x0008, 0x2f7: 0x0008, 0x2f8: 0x0008, 0x2f9: 0x0008, 0x2fa: 0x0008, 0x2fb: 0x0008,\n\t0x2fc: 0x0008, 0x2fd: 0x0008, 0x2fe: 0x0008, 0x2ff: 0x0008,\n\t// Block 0xc, offset 0x300\n\t0x300: 0x0008, 0x301: 0x0008, 0x302: 0xe00f, 0x303: 0x0008, 0x304: 0x0008, 0x305: 0x0008,\n\t0x306: 0x0008, 0x307: 0x0008, 0x308: 0x0008, 0x309: 0x0008, 0x30a: 0x0008, 0x30b: 0x0008,\n\t0x30c: 0x0008, 0x30d: 0x0008, 0x30e: 0x0008, 0x30f: 0xe0c5, 0x310: 0x04b5, 0x311: 0x04cd,\n\t0x312: 0xe0bd, 0x313: 0xe0f5, 0x314: 0xe0fd, 0x315: 0xe09d, 0x316: 0xe0b5, 0x317: 0x0008,\n\t0x318: 0xe00d, 0x319: 0x0008, 0x31a: 0xe00d, 0x31b: 0x0008, 0x31c: 0xe00d, 0x31d: 0x0008,\n\t0x31e: 0xe00d, 0x31f: 0x0008, 0x320: 0xe00d, 0x321: 0x0008, 0x322: 0xe00d, 0x323: 0x0008,\n\t0x324: 0xe00d, 0x325: 0x0008, 0x326: 0xe00d, 0x327: 0x0008, 0x328: 0xe00d, 0x329: 0x0008,\n\t0x32a: 0xe00d, 0x32b: 0x0008, 0x32c: 0xe00d, 0x32d: 0x0008, 0x32e: 0xe00d, 0x32f: 0x0008,\n\t0x330: 0x04e5, 0x331: 0xe185, 0x332: 0xe18d, 0x333: 0x0008, 0x334: 0x04fd, 0x335: 0x03dd,\n\t0x336: 0x0018, 0x337: 0xe07d, 0x338: 0x0008, 0x339: 0xe1d5, 0x33a: 0xe00d, 0x33b: 0x0008,\n\t0x33c: 0x0008, 0x33d: 0x0515, 0x33e: 0x052d, 0x33f: 0x052d,\n\t// Block 0xd, offset 0x340\n\t0x340: 0x0008, 0x341: 0x0008, 0x342: 0x0008, 0x343: 0x0008, 0x344: 0x0008, 0x345: 0x0008,\n\t0x346: 0x0008, 0x347: 0x0008, 0x348: 0x0008, 0x349: 0x0008, 0x34a: 0x0008, 0x34b: 0x0008,\n\t0x34c: 0x0008, 0x34d: 0x0008, 0x34e: 0x0008, 0x34f: 0x0008, 0x350: 0x0008, 0x351: 0x0008,\n\t0x352: 0x0008, 0x353: 0x0008, 0x354: 0x0008, 0x355: 0x0008, 0x356: 0x0008, 0x357: 0x0008,\n\t0x358: 0x0008, 0x359: 0x0008, 0x35a: 0x0008, 0x35b: 0x0008, 0x35c: 0x0008, 0x35d: 0x0008,\n\t0x35e: 0x0008, 0x35f: 0x0008, 0x360: 0xe00d, 0x361: 0x0008, 0x362: 0xe00d, 0x363: 0x0008,\n\t0x364: 0xe00d, 0x365: 0x0008, 0x366: 0xe00d, 0x367: 0x0008, 0x368: 0xe00d, 0x369: 0x0008,\n\t0x36a: 0xe00d, 0x36b: 0x0008, 0x36c: 0xe00d, 0x36d: 0x0008, 0x36e: 0xe00d, 0x36f: 0x0008,\n\t0x370: 0xe00d, 0x371: 0x0008, 0x372: 0xe00d, 0x373: 0x0008, 0x374: 0xe00d, 0x375: 0x0008,\n\t0x376: 0xe00d, 0x377: 0x0008, 0x378: 0xe00d, 0x379: 0x0008, 0x37a: 0xe00d, 0x37b: 0x0008,\n\t0x37c: 0xe00d, 0x37d: 0x0008, 0x37e: 0xe00d, 0x37f: 0x0008,\n\t// Block 0xe, offset 0x380\n\t0x380: 0xe00d, 0x381: 0x0008, 0x382: 0x0018, 0x383: 0x3308, 0x384: 0x3308, 0x385: 0x3308,\n\t0x386: 0x3308, 0x387: 0x3308, 0x388: 0x3318, 0x389: 0x3318, 0x38a: 0xe00d, 0x38b: 0x0008,\n\t0x38c: 0xe00d, 0x38d: 0x0008, 0x38e: 0xe00d, 0x38f: 0x0008, 0x390: 0xe00d, 0x391: 0x0008,\n\t0x392: 0xe00d, 0x393: 0x0008, 0x394: 0xe00d, 0x395: 0x0008, 0x396: 0xe00d, 0x397: 0x0008,\n\t0x398: 0xe00d, 0x399: 0x0008, 0x39a: 0xe00d, 0x39b: 0x0008, 0x39c: 0xe00d, 0x39d: 0x0008,\n\t0x39e: 0xe00d, 0x39f: 0x0008, 0x3a0: 0xe00d, 0x3a1: 0x0008, 0x3a2: 0xe00d, 0x3a3: 0x0008,\n\t0x3a4: 0xe00d, 0x3a5: 0x0008, 0x3a6: 0xe00d, 0x3a7: 0x0008, 0x3a8: 0xe00d, 0x3a9: 0x0008,\n\t0x3aa: 0xe00d, 0x3ab: 0x0008, 0x3ac: 0xe00d, 0x3ad: 0x0008, 0x3ae: 0xe00d, 0x3af: 0x0008,\n\t0x3b0: 0xe00d, 0x3b1: 0x0008, 0x3b2: 0xe00d, 0x3b3: 0x0008, 0x3b4: 0xe00d, 0x3b5: 0x0008,\n\t0x3b6: 0xe00d, 0x3b7: 0x0008, 0x3b8: 0xe00d, 0x3b9: 0x0008, 0x3ba: 0xe00d, 0x3bb: 0x0008,\n\t0x3bc: 0xe00d, 0x3bd: 0x0008, 0x3be: 0xe00d, 0x3bf: 0x0008,\n\t// Block 0xf, offset 0x3c0\n\t0x3c0: 0x0040, 0x3c1: 0xe01d, 0x3c2: 0x0008, 0x3c3: 0xe03d, 0x3c4: 0x0008, 0x3c5: 0xe01d,\n\t0x3c6: 0x0008, 0x3c7: 0xe07d, 0x3c8: 0x0008, 0x3c9: 0xe01d, 0x3ca: 0x0008, 0x3cb: 0xe03d,\n\t0x3cc: 0x0008, 0x3cd: 0xe01d, 0x3ce: 0x0008, 0x3cf: 0x0008, 0x3d0: 0xe00d, 0x3d1: 0x0008,\n\t0x3d2: 0xe00d, 0x3d3: 0x0008, 0x3d4: 0xe00d, 0x3d5: 0x0008, 0x3d6: 0xe00d, 0x3d7: 0x0008,\n\t0x3d8: 0xe00d, 0x3d9: 0x0008, 0x3da: 0xe00d, 0x3db: 0x0008, 0x3dc: 0xe00d, 0x3dd: 0x0008,\n\t0x3de: 0xe00d, 0x3df: 0x0008, 0x3e0: 0xe00d, 0x3e1: 0x0008, 0x3e2: 0xe00d, 0x3e3: 0x0008,\n\t0x3e4: 0xe00d, 0x3e5: 0x0008, 0x3e6: 0xe00d, 0x3e7: 0x0008, 0x3e8: 0xe00d, 0x3e9: 0x0008,\n\t0x3ea: 0xe00d, 0x3eb: 0x0008, 0x3ec: 0xe00d, 0x3ed: 0x0008, 0x3ee: 0xe00d, 0x3ef: 0x0008,\n\t0x3f0: 0xe00d, 0x3f1: 0x0008, 0x3f2: 0xe00d, 0x3f3: 0x0008, 0x3f4: 0xe00d, 0x3f5: 0x0008,\n\t0x3f6: 0xe00d, 0x3f7: 0x0008, 0x3f8: 0xe00d, 0x3f9: 0x0008, 0x3fa: 0xe00d, 0x3fb: 0x0008,\n\t0x3fc: 0xe00d, 0x3fd: 0x0008, 0x3fe: 0xe00d, 0x3ff: 0x0008,\n\t// Block 0x10, offset 0x400\n\t0x400: 0xe00d, 0x401: 0x0008, 0x402: 0xe00d, 0x403: 0x0008, 0x404: 0xe00d, 0x405: 0x0008,\n\t0x406: 0xe00d, 0x407: 0x0008, 0x408: 0xe00d, 0x409: 0x0008, 0x40a: 0xe00d, 0x40b: 0x0008,\n\t0x40c: 0xe00d, 0x40d: 0x0008, 0x40e: 0xe00d, 0x40f: 0x0008, 0x410: 0xe00d, 0x411: 0x0008,\n\t0x412: 0xe00d, 0x413: 0x0008, 0x414: 0xe00d, 0x415: 0x0008, 0x416: 0xe00d, 0x417: 0x0008,\n\t0x418: 0xe00d, 0x419: 0x0008, 0x41a: 0xe00d, 0x41b: 0x0008, 0x41c: 0xe00d, 0x41d: 0x0008,\n\t0x41e: 0xe00d, 0x41f: 0x0008, 0x420: 0xe00d, 0x421: 0x0008, 0x422: 0xe00d, 0x423: 0x0008,\n\t0x424: 0xe00d, 0x425: 0x0008, 0x426: 0xe00d, 0x427: 0x0008, 0x428: 0xe00d, 0x429: 0x0008,\n\t0x42a: 0xe00d, 0x42b: 0x0008, 0x42c: 0xe00d, 0x42d: 0x0008, 0x42e: 0xe00d, 0x42f: 0x0008,\n\t0x430: 0x0040, 0x431: 0x03f5, 0x432: 0x03f5, 0x433: 0x03f5, 0x434: 0x03f5, 0x435: 0x03f5,\n\t0x436: 0x03f5, 0x437: 0x03f5, 0x438: 0x03f5, 0x439: 0x03f5, 0x43a: 0x03f5, 0x43b: 0x03f5,\n\t0x43c: 0x03f5, 0x43d: 0x03f5, 0x43e: 0x03f5, 0x43f: 0x03f5,\n\t// Block 0x11, offset 0x440\n\t0x440: 0x0840, 0x441: 0x0840, 0x442: 0x0840, 0x443: 0x0840, 0x444: 0x0840, 0x445: 0x0840,\n\t0x446: 0x0018, 0x447: 0x0018, 0x448: 0x0818, 0x449: 0x0018, 0x44a: 0x0018, 0x44b: 0x0818,\n\t0x44c: 0x0018, 0x44d: 0x0818, 0x44e: 0x0018, 0x44f: 0x0018, 0x450: 0x3308, 0x451: 0x3308,\n\t0x452: 0x3308, 0x453: 0x3308, 0x454: 0x3308, 0x455: 0x3308, 0x456: 0x3308, 0x457: 0x3308,\n\t0x458: 0x3308, 0x459: 0x3308, 0x45a: 0x3308, 0x45b: 0x0818, 0x45c: 0x0b40, 0x45d: 0x0040,\n\t0x45e: 0x0818, 0x45f: 0x0818, 0x460: 0x0a08, 0x461: 0x0808, 0x462: 0x0c08, 0x463: 0x0c08,\n\t0x464: 0x0c08, 0x465: 0x0c08, 0x466: 0x0a08, 0x467: 0x0c08, 0x468: 0x0a08, 0x469: 0x0c08,\n\t0x46a: 0x0a08, 0x46b: 0x0a08, 0x46c: 0x0a08, 0x46d: 0x0a08, 0x46e: 0x0a08, 0x46f: 0x0c08,\n\t0x470: 0x0c08, 0x471: 0x0c08, 0x472: 0x0c08, 0x473: 0x0a08, 0x474: 0x0a08, 0x475: 0x0a08,\n\t0x476: 0x0a08, 0x477: 0x0a08, 0x478: 0x0a08, 0x479: 0x0a08, 0x47a: 0x0a08, 0x47b: 0x0a08,\n\t0x47c: 0x0a08, 0x47d: 0x0a08, 0x47e: 0x0a08, 0x47f: 0x0a08,\n\t// Block 0x12, offset 0x480\n\t0x480: 0x0818, 0x481: 0x0a08, 0x482: 0x0a08, 0x483: 0x0a08, 0x484: 0x0a08, 0x485: 0x0a08,\n\t0x486: 0x0a08, 0x487: 0x0a08, 0x488: 0x0c08, 0x489: 0x0a08, 0x48a: 0x0a08, 0x48b: 0x3308,\n\t0x48c: 0x3308, 0x48d: 0x3308, 0x48e: 0x3308, 0x48f: 0x3308, 0x490: 0x3308, 0x491: 0x3308,\n\t0x492: 0x3308, 0x493: 0x3308, 0x494: 0x3308, 0x495: 0x3308, 0x496: 0x3308, 0x497: 0x3308,\n\t0x498: 0x3308, 0x499: 0x3308, 0x49a: 0x3308, 0x49b: 0x3308, 0x49c: 0x3308, 0x49d: 0x3308,\n\t0x49e: 0x3308, 0x49f: 0x3308, 0x4a0: 0x0808, 0x4a1: 0x0808, 0x4a2: 0x0808, 0x4a3: 0x0808,\n\t0x4a4: 0x0808, 0x4a5: 0x0808, 0x4a6: 0x0808, 0x4a7: 0x0808, 0x4a8: 0x0808, 0x4a9: 0x0808,\n\t0x4aa: 0x0018, 0x4ab: 0x0818, 0x4ac: 0x0818, 0x4ad: 0x0818, 0x4ae: 0x0a08, 0x4af: 0x0a08,\n\t0x4b0: 0x3308, 0x4b1: 0x0c08, 0x4b2: 0x0c08, 0x4b3: 0x0c08, 0x4b4: 0x0808, 0x4b5: 0x0429,\n\t0x4b6: 0x0451, 0x4b7: 0x0479, 0x4b8: 0x04a1, 0x4b9: 0x0a08, 0x4ba: 0x0a08, 0x4bb: 0x0a08,\n\t0x4bc: 0x0a08, 0x4bd: 0x0a08, 0x4be: 0x0a08, 0x4bf: 0x0a08,\n\t// Block 0x13, offset 0x4c0\n\t0x4c0: 0x0c08, 0x4c1: 0x0a08, 0x4c2: 0x0a08, 0x4c3: 0x0c08, 0x4c4: 0x0c08, 0x4c5: 0x0c08,\n\t0x4c6: 0x0c08, 0x4c7: 0x0c08, 0x4c8: 0x0c08, 0x4c9: 0x0c08, 0x4ca: 0x0c08, 0x4cb: 0x0c08,\n\t0x4cc: 0x0a08, 0x4cd: 0x0c08, 0x4ce: 0x0a08, 0x4cf: 0x0c08, 0x4d0: 0x0a08, 0x4d1: 0x0a08,\n\t0x4d2: 0x0c08, 0x4d3: 0x0c08, 0x4d4: 0x0818, 0x4d5: 0x0c08, 0x4d6: 0x3308, 0x4d7: 0x3308,\n\t0x4d8: 0x3308, 0x4d9: 0x3308, 0x4da: 0x3308, 0x4db: 0x3308, 0x4dc: 0x3308, 0x4dd: 0x0840,\n\t0x4de: 0x0018, 0x4df: 0x3308, 0x4e0: 0x3308, 0x4e1: 0x3308, 0x4e2: 0x3308, 0x4e3: 0x3308,\n\t0x4e4: 0x3308, 0x4e5: 0x0808, 0x4e6: 0x0808, 0x4e7: 0x3308, 0x4e8: 0x3308, 0x4e9: 0x0018,\n\t0x4ea: 0x3308, 0x4eb: 0x3308, 0x4ec: 0x3308, 0x4ed: 0x3308, 0x4ee: 0x0c08, 0x4ef: 0x0c08,\n\t0x4f0: 0x0008, 0x4f1: 0x0008, 0x4f2: 0x0008, 0x4f3: 0x0008, 0x4f4: 0x0008, 0x4f5: 0x0008,\n\t0x4f6: 0x0008, 0x4f7: 0x0008, 0x4f8: 0x0008, 0x4f9: 0x0008, 0x4fa: 0x0a08, 0x4fb: 0x0a08,\n\t0x4fc: 0x0a08, 0x4fd: 0x0808, 0x4fe: 0x0808, 0x4ff: 0x0a08,\n\t// Block 0x14, offset 0x500\n\t0x500: 0x0818, 0x501: 0x0818, 0x502: 0x0818, 0x503: 0x0818, 0x504: 0x0818, 0x505: 0x0818,\n\t0x506: 0x0818, 0x507: 0x0818, 0x508: 0x0818, 0x509: 0x0818, 0x50a: 0x0818, 0x50b: 0x0818,\n\t0x50c: 0x0818, 0x50d: 0x0818, 0x50e: 0x0040, 0x50f: 0x0b40, 0x510: 0x0c08, 0x511: 0x3308,\n\t0x512: 0x0a08, 0x513: 0x0a08, 0x514: 0x0a08, 0x515: 0x0c08, 0x516: 0x0c08, 0x517: 0x0c08,\n\t0x518: 0x0c08, 0x519: 0x0c08, 0x51a: 0x0a08, 0x51b: 0x0a08, 0x51c: 0x0a08, 0x51d: 0x0a08,\n\t0x51e: 0x0c08, 0x51f: 0x0a08, 0x520: 0x0a08, 0x521: 0x0a08, 0x522: 0x0a08, 0x523: 0x0a08,\n\t0x524: 0x0a08, 0x525: 0x0a08, 0x526: 0x0a08, 0x527: 0x0a08, 0x528: 0x0c08, 0x529: 0x0a08,\n\t0x52a: 0x0c08, 0x52b: 0x0a08, 0x52c: 0x0c08, 0x52d: 0x0a08, 0x52e: 0x0a08, 0x52f: 0x0c08,\n\t0x530: 0x3308, 0x531: 0x3308, 0x532: 0x3308, 0x533: 0x3308, 0x534: 0x3308, 0x535: 0x3308,\n\t0x536: 0x3308, 0x537: 0x3308, 0x538: 0x3308, 0x539: 0x3308, 0x53a: 0x3308, 0x53b: 0x3308,\n\t0x53c: 0x3308, 0x53d: 0x3308, 0x53e: 0x3308, 0x53f: 0x3308,\n\t// Block 0x15, offset 0x540\n\t0x540: 0x0c08, 0x541: 0x0a08, 0x542: 0x0a08, 0x543: 0x0a08, 0x544: 0x0a08, 0x545: 0x0a08,\n\t0x546: 0x0c08, 0x547: 0x0c08, 0x548: 0x0a08, 0x549: 0x0c08, 0x54a: 0x0a08, 0x54b: 0x0a08,\n\t0x54c: 0x0a08, 0x54d: 0x0a08, 0x54e: 0x0a08, 0x54f: 0x0a08, 0x550: 0x0a08, 0x551: 0x0a08,\n\t0x552: 0x0a08, 0x553: 0x0a08, 0x554: 0x0c08, 0x555: 0x0a08, 0x556: 0x0808, 0x557: 0x0808,\n\t0x558: 0x0808, 0x559: 0x3308, 0x55a: 0x3308, 0x55b: 0x3308, 0x55c: 0x0040, 0x55d: 0x0040,\n\t0x55e: 0x0818, 0x55f: 0x0040, 0x560: 0x0a08, 0x561: 0x0808, 0x562: 0x0a08, 0x563: 0x0a08,\n\t0x564: 0x0a08, 0x565: 0x0a08, 0x566: 0x0808, 0x567: 0x0c08, 0x568: 0x0a08, 0x569: 0x0c08,\n\t0x56a: 0x0c08, 0x56b: 0x0040, 0x56c: 0x0040, 0x56d: 0x0040, 0x56e: 0x0040, 0x56f: 0x0040,\n\t0x570: 0x0040, 0x571: 0x0040, 0x572: 0x0040, 0x573: 0x0040, 0x574: 0x0040, 0x575: 0x0040,\n\t0x576: 0x0040, 0x577: 0x0040, 0x578: 0x0040, 0x579: 0x0040, 0x57a: 0x0040, 0x57b: 0x0040,\n\t0x57c: 0x0040, 0x57d: 0x0040, 0x57e: 0x0040, 0x57f: 0x0040,\n\t// Block 0x16, offset 0x580\n\t0x580: 0x3008, 0x581: 0x3308, 0x582: 0x3308, 0x583: 0x3308, 0x584: 0x3308, 0x585: 0x3308,\n\t0x586: 0x3308, 0x587: 0x3308, 0x588: 0x3308, 0x589: 0x3008, 0x58a: 0x3008, 0x58b: 0x3008,\n\t0x58c: 0x3008, 0x58d: 0x3b08, 0x58e: 0x3008, 0x58f: 0x3008, 0x590: 0x0008, 0x591: 0x3308,\n\t0x592: 0x3308, 0x593: 0x3308, 0x594: 0x3308, 0x595: 0x3308, 0x596: 0x3308, 0x597: 0x3308,\n\t0x598: 0x04c9, 0x599: 0x0501, 0x59a: 0x0539, 0x59b: 0x0571, 0x59c: 0x05a9, 0x59d: 0x05e1,\n\t0x59e: 0x0619, 0x59f: 0x0651, 0x5a0: 0x0008, 0x5a1: 0x0008, 0x5a2: 0x3308, 0x5a3: 0x3308,\n\t0x5a4: 0x0018, 0x5a5: 0x0018, 0x5a6: 0x0008, 0x5a7: 0x0008, 0x5a8: 0x0008, 0x5a9: 0x0008,\n\t0x5aa: 0x0008, 0x5ab: 0x0008, 0x5ac: 0x0008, 0x5ad: 0x0008, 0x5ae: 0x0008, 0x5af: 0x0008,\n\t0x5b0: 0x0018, 0x5b1: 0x0008, 0x5b2: 0x0008, 0x5b3: 0x0008, 0x5b4: 0x0008, 0x5b5: 0x0008,\n\t0x5b6: 0x0008, 0x5b7: 0x0008, 0x5b8: 0x0008, 0x5b9: 0x0008, 0x5ba: 0x0008, 0x5bb: 0x0008,\n\t0x5bc: 0x0008, 0x5bd: 0x0008, 0x5be: 0x0008, 0x5bf: 0x0008,\n\t// Block 0x17, offset 0x5c0\n\t0x5c0: 0x0008, 0x5c1: 0x3308, 0x5c2: 0x3008, 0x5c3: 0x3008, 0x5c4: 0x0040, 0x5c5: 0x0008,\n\t0x5c6: 0x0008, 0x5c7: 0x0008, 0x5c8: 0x0008, 0x5c9: 0x0008, 0x5ca: 0x0008, 0x5cb: 0x0008,\n\t0x5cc: 0x0008, 0x5cd: 0x0040, 0x5ce: 0x0040, 0x5cf: 0x0008, 0x5d0: 0x0008, 0x5d1: 0x0040,\n\t0x5d2: 0x0040, 0x5d3: 0x0008, 0x5d4: 0x0008, 0x5d5: 0x0008, 0x5d6: 0x0008, 0x5d7: 0x0008,\n\t0x5d8: 0x0008, 0x5d9: 0x0008, 0x5da: 0x0008, 0x5db: 0x0008, 0x5dc: 0x0008, 0x5dd: 0x0008,\n\t0x5de: 0x0008, 0x5df: 0x0008, 0x5e0: 0x0008, 0x5e1: 0x0008, 0x5e2: 0x0008, 0x5e3: 0x0008,\n\t0x5e4: 0x0008, 0x5e5: 0x0008, 0x5e6: 0x0008, 0x5e7: 0x0008, 0x5e8: 0x0008, 0x5e9: 0x0040,\n\t0x5ea: 0x0008, 0x5eb: 0x0008, 0x5ec: 0x0008, 0x5ed: 0x0008, 0x5ee: 0x0008, 0x5ef: 0x0008,\n\t0x5f0: 0x0008, 0x5f1: 0x0040, 0x5f2: 0x0008, 0x5f3: 0x0040, 0x5f4: 0x0040, 0x5f5: 0x0040,\n\t0x5f6: 0x0008, 0x5f7: 0x0008, 0x5f8: 0x0008, 0x5f9: 0x0008, 0x5fa: 0x0040, 0x5fb: 0x0040,\n\t0x5fc: 0x3308, 0x5fd: 0x0008, 0x5fe: 0x3008, 0x5ff: 0x3008,\n\t// Block 0x18, offset 0x600\n\t0x600: 0x3008, 0x601: 0x3308, 0x602: 0x3308, 0x603: 0x3308, 0x604: 0x3308, 0x605: 0x0040,\n\t0x606: 0x0040, 0x607: 0x3008, 0x608: 0x3008, 0x609: 0x0040, 0x60a: 0x0040, 0x60b: 0x3008,\n\t0x60c: 0x3008, 0x60d: 0x3b08, 0x60e: 0x0008, 0x60f: 0x0040, 0x610: 0x0040, 0x611: 0x0040,\n\t0x612: 0x0040, 0x613: 0x0040, 0x614: 0x0040, 0x615: 0x0040, 0x616: 0x0040, 0x617: 0x3008,\n\t0x618: 0x0040, 0x619: 0x0040, 0x61a: 0x0040, 0x61b: 0x0040, 0x61c: 0x0689, 0x61d: 0x06c1,\n\t0x61e: 0x0040, 0x61f: 0x06f9, 0x620: 0x0008, 0x621: 0x0008, 0x622: 0x3308, 0x623: 0x3308,\n\t0x624: 0x0040, 0x625: 0x0040, 0x626: 0x0008, 0x627: 0x0008, 0x628: 0x0008, 0x629: 0x0008,\n\t0x62a: 0x0008, 0x62b: 0x0008, 0x62c: 0x0008, 0x62d: 0x0008, 0x62e: 0x0008, 0x62f: 0x0008,\n\t0x630: 0x0008, 0x631: 0x0008, 0x632: 0x0018, 0x633: 0x0018, 0x634: 0x0018, 0x635: 0x0018,\n\t0x636: 0x0018, 0x637: 0x0018, 0x638: 0x0018, 0x639: 0x0018, 0x63a: 0x0018, 0x63b: 0x0018,\n\t0x63c: 0x0008, 0x63d: 0x0018, 0x63e: 0x0040, 0x63f: 0x0040,\n\t// Block 0x19, offset 0x640\n\t0x640: 0x0040, 0x641: 0x3308, 0x642: 0x3308, 0x643: 0x3008, 0x644: 0x0040, 0x645: 0x0008,\n\t0x646: 0x0008, 0x647: 0x0008, 0x648: 0x0008, 0x649: 0x0008, 0x64a: 0x0008, 0x64b: 0x0040,\n\t0x64c: 0x0040, 0x64d: 0x0040, 0x64e: 0x0040, 0x64f: 0x0008, 0x650: 0x0008, 0x651: 0x0040,\n\t0x652: 0x0040, 0x653: 0x0008, 0x654: 0x0008, 0x655: 0x0008, 0x656: 0x0008, 0x657: 0x0008,\n\t0x658: 0x0008, 0x659: 0x0008, 0x65a: 0x0008, 0x65b: 0x0008, 0x65c: 0x0008, 0x65d: 0x0008,\n\t0x65e: 0x0008, 0x65f: 0x0008, 0x660: 0x0008, 0x661: 0x0008, 0x662: 0x0008, 0x663: 0x0008,\n\t0x664: 0x0008, 0x665: 0x0008, 0x666: 0x0008, 0x667: 0x0008, 0x668: 0x0008, 0x669: 0x0040,\n\t0x66a: 0x0008, 0x66b: 0x0008, 0x66c: 0x0008, 0x66d: 0x0008, 0x66e: 0x0008, 0x66f: 0x0008,\n\t0x670: 0x0008, 0x671: 0x0040, 0x672: 0x0008, 0x673: 0x0731, 0x674: 0x0040, 0x675: 0x0008,\n\t0x676: 0x0769, 0x677: 0x0040, 0x678: 0x0008, 0x679: 0x0008, 0x67a: 0x0040, 0x67b: 0x0040,\n\t0x67c: 0x3308, 0x67d: 0x0040, 0x67e: 0x3008, 0x67f: 0x3008,\n\t// Block 0x1a, offset 0x680\n\t0x680: 0x3008, 0x681: 0x3308, 0x682: 0x3308, 0x683: 0x0040, 0x684: 0x0040, 0x685: 0x0040,\n\t0x686: 0x0040, 0x687: 0x3308, 0x688: 0x3308, 0x689: 0x0040, 0x68a: 0x0040, 0x68b: 0x3308,\n\t0x68c: 0x3308, 0x68d: 0x3b08, 0x68e: 0x0040, 0x68f: 0x0040, 0x690: 0x0040, 0x691: 0x3308,\n\t0x692: 0x0040, 0x693: 0x0040, 0x694: 0x0040, 0x695: 0x0040, 0x696: 0x0040, 0x697: 0x0040,\n\t0x698: 0x0040, 0x699: 0x07a1, 0x69a: 0x07d9, 0x69b: 0x0811, 0x69c: 0x0008, 0x69d: 0x0040,\n\t0x69e: 0x0849, 0x69f: 0x0040, 0x6a0: 0x0040, 0x6a1: 0x0040, 0x6a2: 0x0040, 0x6a3: 0x0040,\n\t0x6a4: 0x0040, 0x6a5: 0x0040, 0x6a6: 0x0008, 0x6a7: 0x0008, 0x6a8: 0x0008, 0x6a9: 0x0008,\n\t0x6aa: 0x0008, 0x6ab: 0x0008, 0x6ac: 0x0008, 0x6ad: 0x0008, 0x6ae: 0x0008, 0x6af: 0x0008,\n\t0x6b0: 0x3308, 0x6b1: 0x3308, 0x6b2: 0x0008, 0x6b3: 0x0008, 0x6b4: 0x0008, 0x6b5: 0x3308,\n\t0x6b6: 0x0040, 0x6b7: 0x0040, 0x6b8: 0x0040, 0x6b9: 0x0040, 0x6ba: 0x0040, 0x6bb: 0x0040,\n\t0x6bc: 0x0040, 0x6bd: 0x0040, 0x6be: 0x0040, 0x6bf: 0x0040,\n\t// Block 0x1b, offset 0x6c0\n\t0x6c0: 0x0040, 0x6c1: 0x3308, 0x6c2: 0x3308, 0x6c3: 0x3008, 0x6c4: 0x0040, 0x6c5: 0x0008,\n\t0x6c6: 0x0008, 0x6c7: 0x0008, 0x6c8: 0x0008, 0x6c9: 0x0008, 0x6ca: 0x0008, 0x6cb: 0x0008,\n\t0x6cc: 0x0008, 0x6cd: 0x0008, 0x6ce: 0x0040, 0x6cf: 0x0008, 0x6d0: 0x0008, 0x6d1: 0x0008,\n\t0x6d2: 0x0040, 0x6d3: 0x0008, 0x6d4: 0x0008, 0x6d5: 0x0008, 0x6d6: 0x0008, 0x6d7: 0x0008,\n\t0x6d8: 0x0008, 0x6d9: 0x0008, 0x6da: 0x0008, 0x6db: 0x0008, 0x6dc: 0x0008, 0x6dd: 0x0008,\n\t0x6de: 0x0008, 0x6df: 0x0008, 0x6e0: 0x0008, 0x6e1: 0x0008, 0x6e2: 0x0008, 0x6e3: 0x0008,\n\t0x6e4: 0x0008, 0x6e5: 0x0008, 0x6e6: 0x0008, 0x6e7: 0x0008, 0x6e8: 0x0008, 0x6e9: 0x0040,\n\t0x6ea: 0x0008, 0x6eb: 0x0008, 0x6ec: 0x0008, 0x6ed: 0x0008, 0x6ee: 0x0008, 0x6ef: 0x0008,\n\t0x6f0: 0x0008, 0x6f1: 0x0040, 0x6f2: 0x0008, 0x6f3: 0x0008, 0x6f4: 0x0040, 0x6f5: 0x0008,\n\t0x6f6: 0x0008, 0x6f7: 0x0008, 0x6f8: 0x0008, 0x6f9: 0x0008, 0x6fa: 0x0040, 0x6fb: 0x0040,\n\t0x6fc: 0x3308, 0x6fd: 0x0008, 0x6fe: 0x3008, 0x6ff: 0x3008,\n\t// Block 0x1c, offset 0x700\n\t0x700: 0x3008, 0x701: 0x3308, 0x702: 0x3308, 0x703: 0x3308, 0x704: 0x3308, 0x705: 0x3308,\n\t0x706: 0x0040, 0x707: 0x3308, 0x708: 0x3308, 0x709: 0x3008, 0x70a: 0x0040, 0x70b: 0x3008,\n\t0x70c: 0x3008, 0x70d: 0x3b08, 0x70e: 0x0040, 0x70f: 0x0040, 0x710: 0x0008, 0x711: 0x0040,\n\t0x712: 0x0040, 0x713: 0x0040, 0x714: 0x0040, 0x715: 0x0040, 0x716: 0x0040, 0x717: 0x0040,\n\t0x718: 0x0040, 0x719: 0x0040, 0x71a: 0x0040, 0x71b: 0x0040, 0x71c: 0x0040, 0x71d: 0x0040,\n\t0x71e: 0x0040, 0x71f: 0x0040, 0x720: 0x0008, 0x721: 0x0008, 0x722: 0x3308, 0x723: 0x3308,\n\t0x724: 0x0040, 0x725: 0x0040, 0x726: 0x0008, 0x727: 0x0008, 0x728: 0x0008, 0x729: 0x0008,\n\t0x72a: 0x0008, 0x72b: 0x0008, 0x72c: 0x0008, 0x72d: 0x0008, 0x72e: 0x0008, 0x72f: 0x0008,\n\t0x730: 0x0018, 0x731: 0x0018, 0x732: 0x0040, 0x733: 0x0040, 0x734: 0x0040, 0x735: 0x0040,\n\t0x736: 0x0040, 0x737: 0x0040, 0x738: 0x0040, 0x739: 0x0008, 0x73a: 0x3308, 0x73b: 0x3308,\n\t0x73c: 0x3308, 0x73d: 0x3308, 0x73e: 0x3308, 0x73f: 0x3308,\n\t// Block 0x1d, offset 0x740\n\t0x740: 0x0040, 0x741: 0x3308, 0x742: 0x3008, 0x743: 0x3008, 0x744: 0x0040, 0x745: 0x0008,\n\t0x746: 0x0008, 0x747: 0x0008, 0x748: 0x0008, 0x749: 0x0008, 0x74a: 0x0008, 0x74b: 0x0008,\n\t0x74c: 0x0008, 0x74d: 0x0040, 0x74e: 0x0040, 0x74f: 0x0008, 0x750: 0x0008, 0x751: 0x0040,\n\t0x752: 0x0040, 0x753: 0x0008, 0x754: 0x0008, 0x755: 0x0008, 0x756: 0x0008, 0x757: 0x0008,\n\t0x758: 0x0008, 0x759: 0x0008, 0x75a: 0x0008, 0x75b: 0x0008, 0x75c: 0x0008, 0x75d: 0x0008,\n\t0x75e: 0x0008, 0x75f: 0x0008, 0x760: 0x0008, 0x761: 0x0008, 0x762: 0x0008, 0x763: 0x0008,\n\t0x764: 0x0008, 0x765: 0x0008, 0x766: 0x0008, 0x767: 0x0008, 0x768: 0x0008, 0x769: 0x0040,\n\t0x76a: 0x0008, 0x76b: 0x0008, 0x76c: 0x0008, 0x76d: 0x0008, 0x76e: 0x0008, 0x76f: 0x0008,\n\t0x770: 0x0008, 0x771: 0x0040, 0x772: 0x0008, 0x773: 0x0008, 0x774: 0x0040, 0x775: 0x0008,\n\t0x776: 0x0008, 0x777: 0x0008, 0x778: 0x0008, 0x779: 0x0008, 0x77a: 0x0040, 0x77b: 0x0040,\n\t0x77c: 0x3308, 0x77d: 0x0008, 0x77e: 0x3008, 0x77f: 0x3308,\n\t// Block 0x1e, offset 0x780\n\t0x780: 0x3008, 0x781: 0x3308, 0x782: 0x3308, 0x783: 0x3308, 0x784: 0x3308, 0x785: 0x0040,\n\t0x786: 0x0040, 0x787: 0x3008, 0x788: 0x3008, 0x789: 0x0040, 0x78a: 0x0040, 0x78b: 0x3008,\n\t0x78c: 0x3008, 0x78d: 0x3b08, 0x78e: 0x0040, 0x78f: 0x0040, 0x790: 0x0040, 0x791: 0x0040,\n\t0x792: 0x0040, 0x793: 0x0040, 0x794: 0x0040, 0x795: 0x0040, 0x796: 0x3308, 0x797: 0x3008,\n\t0x798: 0x0040, 0x799: 0x0040, 0x79a: 0x0040, 0x79b: 0x0040, 0x79c: 0x0881, 0x79d: 0x08b9,\n\t0x79e: 0x0040, 0x79f: 0x0008, 0x7a0: 0x0008, 0x7a1: 0x0008, 0x7a2: 0x3308, 0x7a3: 0x3308,\n\t0x7a4: 0x0040, 0x7a5: 0x0040, 0x7a6: 0x0008, 0x7a7: 0x0008, 0x7a8: 0x0008, 0x7a9: 0x0008,\n\t0x7aa: 0x0008, 0x7ab: 0x0008, 0x7ac: 0x0008, 0x7ad: 0x0008, 0x7ae: 0x0008, 0x7af: 0x0008,\n\t0x7b0: 0x0018, 0x7b1: 0x0008, 0x7b2: 0x0018, 0x7b3: 0x0018, 0x7b4: 0x0018, 0x7b5: 0x0018,\n\t0x7b6: 0x0018, 0x7b7: 0x0018, 0x7b8: 0x0040, 0x7b9: 0x0040, 0x7ba: 0x0040, 0x7bb: 0x0040,\n\t0x7bc: 0x0040, 0x7bd: 0x0040, 0x7be: 0x0040, 0x7bf: 0x0040,\n\t// Block 0x1f, offset 0x7c0\n\t0x7c0: 0x0040, 0x7c1: 0x0040, 0x7c2: 0x3308, 0x7c3: 0x0008, 0x7c4: 0x0040, 0x7c5: 0x0008,\n\t0x7c6: 0x0008, 0x7c7: 0x0008, 0x7c8: 0x0008, 0x7c9: 0x0008, 0x7ca: 0x0008, 0x7cb: 0x0040,\n\t0x7cc: 0x0040, 0x7cd: 0x0040, 0x7ce: 0x0008, 0x7cf: 0x0008, 0x7d0: 0x0008, 0x7d1: 0x0040,\n\t0x7d2: 0x0008, 0x7d3: 0x0008, 0x7d4: 0x0008, 0x7d5: 0x0008, 0x7d6: 0x0040, 0x7d7: 0x0040,\n\t0x7d8: 0x0040, 0x7d9: 0x0008, 0x7da: 0x0008, 0x7db: 0x0040, 0x7dc: 0x0008, 0x7dd: 0x0040,\n\t0x7de: 0x0008, 0x7df: 0x0008, 0x7e0: 0x0040, 0x7e1: 0x0040, 0x7e2: 0x0040, 0x7e3: 0x0008,\n\t0x7e4: 0x0008, 0x7e5: 0x0040, 0x7e6: 0x0040, 0x7e7: 0x0040, 0x7e8: 0x0008, 0x7e9: 0x0008,\n\t0x7ea: 0x0008, 0x7eb: 0x0040, 0x7ec: 0x0040, 0x7ed: 0x0040, 0x7ee: 0x0008, 0x7ef: 0x0008,\n\t0x7f0: 0x0008, 0x7f1: 0x0008, 0x7f2: 0x0008, 0x7f3: 0x0008, 0x7f4: 0x0008, 0x7f5: 0x0008,\n\t0x7f6: 0x0008, 0x7f7: 0x0008, 0x7f8: 0x0008, 0x7f9: 0x0008, 0x7fa: 0x0040, 0x7fb: 0x0040,\n\t0x7fc: 0x0040, 0x7fd: 0x0040, 0x7fe: 0x3008, 0x7ff: 0x3008,\n\t// Block 0x20, offset 0x800\n\t0x800: 0x3308, 0x801: 0x3008, 0x802: 0x3008, 0x803: 0x3008, 0x804: 0x3008, 0x805: 0x0040,\n\t0x806: 0x3308, 0x807: 0x3308, 0x808: 0x3308, 0x809: 0x0040, 0x80a: 0x3308, 0x80b: 0x3308,\n\t0x80c: 0x3308, 0x80d: 0x3b08, 0x80e: 0x0040, 0x80f: 0x0040, 0x810: 0x0040, 0x811: 0x0040,\n\t0x812: 0x0040, 0x813: 0x0040, 0x814: 0x0040, 0x815: 0x3308, 0x816: 0x3308, 0x817: 0x0040,\n\t0x818: 0x0008, 0x819: 0x0008, 0x81a: 0x0008, 0x81b: 0x0040, 0x81c: 0x0040, 0x81d: 0x0040,\n\t0x81e: 0x0040, 0x81f: 0x0040, 0x820: 0x0008, 0x821: 0x0008, 0x822: 0x3308, 0x823: 0x3308,\n\t0x824: 0x0040, 0x825: 0x0040, 0x826: 0x0008, 0x827: 0x0008, 0x828: 0x0008, 0x829: 0x0008,\n\t0x82a: 0x0008, 0x82b: 0x0008, 0x82c: 0x0008, 0x82d: 0x0008, 0x82e: 0x0008, 0x82f: 0x0008,\n\t0x830: 0x0040, 0x831: 0x0040, 0x832: 0x0040, 0x833: 0x0040, 0x834: 0x0040, 0x835: 0x0040,\n\t0x836: 0x0040, 0x837: 0x0040, 0x838: 0x0018, 0x839: 0x0018, 0x83a: 0x0018, 0x83b: 0x0018,\n\t0x83c: 0x0018, 0x83d: 0x0018, 0x83e: 0x0018, 0x83f: 0x0018,\n\t// Block 0x21, offset 0x840\n\t0x840: 0x0008, 0x841: 0x3308, 0x842: 0x3008, 0x843: 0x3008, 0x844: 0x0040, 0x845: 0x0008,\n\t0x846: 0x0008, 0x847: 0x0008, 0x848: 0x0008, 0x849: 0x0008, 0x84a: 0x0008, 0x84b: 0x0008,\n\t0x84c: 0x0008, 0x84d: 0x0040, 0x84e: 0x0008, 0x84f: 0x0008, 0x850: 0x0008, 0x851: 0x0040,\n\t0x852: 0x0008, 0x853: 0x0008, 0x854: 0x0008, 0x855: 0x0008, 0x856: 0x0008, 0x857: 0x0008,\n\t0x858: 0x0008, 0x859: 0x0008, 0x85a: 0x0008, 0x85b: 0x0008, 0x85c: 0x0008, 0x85d: 0x0008,\n\t0x85e: 0x0008, 0x85f: 0x0008, 0x860: 0x0008, 0x861: 0x0008, 0x862: 0x0008, 0x863: 0x0008,\n\t0x864: 0x0008, 0x865: 0x0008, 0x866: 0x0008, 0x867: 0x0008, 0x868: 0x0008, 0x869: 0x0040,\n\t0x86a: 0x0008, 0x86b: 0x0008, 0x86c: 0x0008, 0x86d: 0x0008, 0x86e: 0x0008, 0x86f: 0x0008,\n\t0x870: 0x0008, 0x871: 0x0008, 0x872: 0x0008, 0x873: 0x0008, 0x874: 0x0040, 0x875: 0x0008,\n\t0x876: 0x0008, 0x877: 0x0008, 0x878: 0x0008, 0x879: 0x0008, 0x87a: 0x0040, 0x87b: 0x0040,\n\t0x87c: 0x3308, 0x87d: 0x0008, 0x87e: 0x3008, 0x87f: 0x3308,\n\t// Block 0x22, offset 0x880\n\t0x880: 0x3008, 0x881: 0x3008, 0x882: 0x3008, 0x883: 0x3008, 0x884: 0x3008, 0x885: 0x0040,\n\t0x886: 0x3308, 0x887: 0x3008, 0x888: 0x3008, 0x889: 0x0040, 0x88a: 0x3008, 0x88b: 0x3008,\n\t0x88c: 0x3308, 0x88d: 0x3b08, 0x88e: 0x0040, 0x88f: 0x0040, 0x890: 0x0040, 0x891: 0x0040,\n\t0x892: 0x0040, 0x893: 0x0040, 0x894: 0x0040, 0x895: 0x3008, 0x896: 0x3008, 0x897: 0x0040,\n\t0x898: 0x0040, 0x899: 0x0040, 0x89a: 0x0040, 0x89b: 0x0040, 0x89c: 0x0040, 0x89d: 0x0040,\n\t0x89e: 0x0008, 0x89f: 0x0040, 0x8a0: 0x0008, 0x8a1: 0x0008, 0x8a2: 0x3308, 0x8a3: 0x3308,\n\t0x8a4: 0x0040, 0x8a5: 0x0040, 0x8a6: 0x0008, 0x8a7: 0x0008, 0x8a8: 0x0008, 0x8a9: 0x0008,\n\t0x8aa: 0x0008, 0x8ab: 0x0008, 0x8ac: 0x0008, 0x8ad: 0x0008, 0x8ae: 0x0008, 0x8af: 0x0008,\n\t0x8b0: 0x0040, 0x8b1: 0x0008, 0x8b2: 0x0008, 0x8b3: 0x0040, 0x8b4: 0x0040, 0x8b5: 0x0040,\n\t0x8b6: 0x0040, 0x8b7: 0x0040, 0x8b8: 0x0040, 0x8b9: 0x0040, 0x8ba: 0x0040, 0x8bb: 0x0040,\n\t0x8bc: 0x0040, 0x8bd: 0x0040, 0x8be: 0x0040, 0x8bf: 0x0040,\n\t// Block 0x23, offset 0x8c0\n\t0x8c0: 0x3008, 0x8c1: 0x3308, 0x8c2: 0x3308, 0x8c3: 0x3308, 0x8c4: 0x3308, 0x8c5: 0x0040,\n\t0x8c6: 0x3008, 0x8c7: 0x3008, 0x8c8: 0x3008, 0x8c9: 0x0040, 0x8ca: 0x3008, 0x8cb: 0x3008,\n\t0x8cc: 0x3008, 0x8cd: 0x3b08, 0x8ce: 0x0008, 0x8cf: 0x0018, 0x8d0: 0x0040, 0x8d1: 0x0040,\n\t0x8d2: 0x0040, 0x8d3: 0x0040, 0x8d4: 0x0008, 0x8d5: 0x0008, 0x8d6: 0x0008, 0x8d7: 0x3008,\n\t0x8d8: 0x0018, 0x8d9: 0x0018, 0x8da: 0x0018, 0x8db: 0x0018, 0x8dc: 0x0018, 0x8dd: 0x0018,\n\t0x8de: 0x0018, 0x8df: 0x0008, 0x8e0: 0x0008, 0x8e1: 0x0008, 0x8e2: 0x3308, 0x8e3: 0x3308,\n\t0x8e4: 0x0040, 0x8e5: 0x0040, 0x8e6: 0x0008, 0x8e7: 0x0008, 0x8e8: 0x0008, 0x8e9: 0x0008,\n\t0x8ea: 0x0008, 0x8eb: 0x0008, 0x8ec: 0x0008, 0x8ed: 0x0008, 0x8ee: 0x0008, 0x8ef: 0x0008,\n\t0x8f0: 0x0018, 0x8f1: 0x0018, 0x8f2: 0x0018, 0x8f3: 0x0018, 0x8f4: 0x0018, 0x8f5: 0x0018,\n\t0x8f6: 0x0018, 0x8f7: 0x0018, 0x8f8: 0x0018, 0x8f9: 0x0018, 0x8fa: 0x0008, 0x8fb: 0x0008,\n\t0x8fc: 0x0008, 0x8fd: 0x0008, 0x8fe: 0x0008, 0x8ff: 0x0008,\n\t// Block 0x24, offset 0x900\n\t0x900: 0x0040, 0x901: 0x0008, 0x902: 0x0008, 0x903: 0x0040, 0x904: 0x0008, 0x905: 0x0040,\n\t0x906: 0x0040, 0x907: 0x0008, 0x908: 0x0008, 0x909: 0x0040, 0x90a: 0x0008, 0x90b: 0x0040,\n\t0x90c: 0x0040, 0x90d: 0x0008, 0x90e: 0x0040, 0x90f: 0x0040, 0x910: 0x0040, 0x911: 0x0040,\n\t0x912: 0x0040, 0x913: 0x0040, 0x914: 0x0008, 0x915: 0x0008, 0x916: 0x0008, 0x917: 0x0008,\n\t0x918: 0x0040, 0x919: 0x0008, 0x91a: 0x0008, 0x91b: 0x0008, 0x91c: 0x0008, 0x91d: 0x0008,\n\t0x91e: 0x0008, 0x91f: 0x0008, 0x920: 0x0040, 0x921: 0x0008, 0x922: 0x0008, 0x923: 0x0008,\n\t0x924: 0x0040, 0x925: 0x0008, 0x926: 0x0040, 0x927: 0x0008, 0x928: 0x0040, 0x929: 0x0040,\n\t0x92a: 0x0008, 0x92b: 0x0008, 0x92c: 0x0040, 0x92d: 0x0008, 0x92e: 0x0008, 0x92f: 0x0008,\n\t0x930: 0x0008, 0x931: 0x3308, 0x932: 0x0008, 0x933: 0x0929, 0x934: 0x3308, 0x935: 0x3308,\n\t0x936: 0x3308, 0x937: 0x3308, 0x938: 0x3308, 0x939: 0x3308, 0x93a: 0x0040, 0x93b: 0x3308,\n\t0x93c: 0x3308, 0x93d: 0x0008, 0x93e: 0x0040, 0x93f: 0x0040,\n\t// Block 0x25, offset 0x940\n\t0x940: 0x0008, 0x941: 0x0008, 0x942: 0x0008, 0x943: 0x09d1, 0x944: 0x0008, 0x945: 0x0008,\n\t0x946: 0x0008, 0x947: 0x0008, 0x948: 0x0040, 0x949: 0x0008, 0x94a: 0x0008, 0x94b: 0x0008,\n\t0x94c: 0x0008, 0x94d: 0x0a09, 0x94e: 0x0008, 0x94f: 0x0008, 0x950: 0x0008, 0x951: 0x0008,\n\t0x952: 0x0a41, 0x953: 0x0008, 0x954: 0x0008, 0x955: 0x0008, 0x956: 0x0008, 0x957: 0x0a79,\n\t0x958: 0x0008, 0x959: 0x0008, 0x95a: 0x0008, 0x95b: 0x0008, 0x95c: 0x0ab1, 0x95d: 0x0008,\n\t0x95e: 0x0008, 0x95f: 0x0008, 0x960: 0x0008, 0x961: 0x0008, 0x962: 0x0008, 0x963: 0x0008,\n\t0x964: 0x0008, 0x965: 0x0008, 0x966: 0x0008, 0x967: 0x0008, 0x968: 0x0008, 0x969: 0x0ae9,\n\t0x96a: 0x0008, 0x96b: 0x0008, 0x96c: 0x0008, 0x96d: 0x0040, 0x96e: 0x0040, 0x96f: 0x0040,\n\t0x970: 0x0040, 0x971: 0x3308, 0x972: 0x3308, 0x973: 0x0b21, 0x974: 0x3308, 0x975: 0x0b59,\n\t0x976: 0x0b91, 0x977: 0x0bc9, 0x978: 0x0c19, 0x979: 0x0c51, 0x97a: 0x3308, 0x97b: 0x3308,\n\t0x97c: 0x3308, 0x97d: 0x3308, 0x97e: 0x3308, 0x97f: 0x3008,\n\t// Block 0x26, offset 0x980\n\t0x980: 0x3308, 0x981: 0x0ca1, 0x982: 0x3308, 0x983: 0x3308, 0x984: 0x3b08, 0x985: 0x0018,\n\t0x986: 0x3308, 0x987: 0x3308, 0x988: 0x0008, 0x989: 0x0008, 0x98a: 0x0008, 0x98b: 0x0008,\n\t0x98c: 0x0008, 0x98d: 0x3308, 0x98e: 0x3308, 0x98f: 0x3308, 0x990: 0x3308, 0x991: 0x3308,\n\t0x992: 0x3308, 0x993: 0x0cd9, 0x994: 0x3308, 0x995: 0x3308, 0x996: 0x3308, 0x997: 0x3308,\n\t0x998: 0x0040, 0x999: 0x3308, 0x99a: 0x3308, 0x99b: 0x3308, 0x99c: 0x3308, 0x99d: 0x0d11,\n\t0x99e: 0x3308, 0x99f: 0x3308, 0x9a0: 0x3308, 0x9a1: 0x3308, 0x9a2: 0x0d49, 0x9a3: 0x3308,\n\t0x9a4: 0x3308, 0x9a5: 0x3308, 0x9a6: 0x3308, 0x9a7: 0x0d81, 0x9a8: 0x3308, 0x9a9: 0x3308,\n\t0x9aa: 0x3308, 0x9ab: 0x3308, 0x9ac: 0x0db9, 0x9ad: 0x3308, 0x9ae: 0x3308, 0x9af: 0x3308,\n\t0x9b0: 0x3308, 0x9b1: 0x3308, 0x9b2: 0x3308, 0x9b3: 0x3308, 0x9b4: 0x3308, 0x9b5: 0x3308,\n\t0x9b6: 0x3308, 0x9b7: 0x3308, 0x9b8: 0x3308, 0x9b9: 0x0df1, 0x9ba: 0x3308, 0x9bb: 0x3308,\n\t0x9bc: 0x3308, 0x9bd: 0x0040, 0x9be: 0x0018, 0x9bf: 0x0018,\n\t// Block 0x27, offset 0x9c0\n\t0x9c0: 0x0008, 0x9c1: 0x0008, 0x9c2: 0x0008, 0x9c3: 0x0008, 0x9c4: 0x0008, 0x9c5: 0x0008,\n\t0x9c6: 0x0008, 0x9c7: 0x0008, 0x9c8: 0x0008, 0x9c9: 0x0008, 0x9ca: 0x0008, 0x9cb: 0x0008,\n\t0x9cc: 0x0008, 0x9cd: 0x0008, 0x9ce: 0x0008, 0x9cf: 0x0008, 0x9d0: 0x0008, 0x9d1: 0x0008,\n\t0x9d2: 0x0008, 0x9d3: 0x0008, 0x9d4: 0x0008, 0x9d5: 0x0008, 0x9d6: 0x0008, 0x9d7: 0x0008,\n\t0x9d8: 0x0008, 0x9d9: 0x0008, 0x9da: 0x0008, 0x9db: 0x0008, 0x9dc: 0x0008, 0x9dd: 0x0008,\n\t0x9de: 0x0008, 0x9df: 0x0008, 0x9e0: 0x0008, 0x9e1: 0x0008, 0x9e2: 0x0008, 0x9e3: 0x0008,\n\t0x9e4: 0x0008, 0x9e5: 0x0008, 0x9e6: 0x0008, 0x9e7: 0x0008, 0x9e8: 0x0008, 0x9e9: 0x0008,\n\t0x9ea: 0x0008, 0x9eb: 0x0008, 0x9ec: 0x0039, 0x9ed: 0x0ed1, 0x9ee: 0x0ee9, 0x9ef: 0x0008,\n\t0x9f0: 0x0ef9, 0x9f1: 0x0f09, 0x9f2: 0x0f19, 0x9f3: 0x0f31, 0x9f4: 0x0249, 0x9f5: 0x0f41,\n\t0x9f6: 0x0259, 0x9f7: 0x0f51, 0x9f8: 0x0359, 0x9f9: 0x0f61, 0x9fa: 0x0f71, 0x9fb: 0x0008,\n\t0x9fc: 0x00d9, 0x9fd: 0x0f81, 0x9fe: 0x0f99, 0x9ff: 0x0269,\n\t// Block 0x28, offset 0xa00\n\t0xa00: 0x0fa9, 0xa01: 0x0fb9, 0xa02: 0x0279, 0xa03: 0x0039, 0xa04: 0x0fc9, 0xa05: 0x0fe1,\n\t0xa06: 0x059d, 0xa07: 0x0ee9, 0xa08: 0x0ef9, 0xa09: 0x0f09, 0xa0a: 0x0ff9, 0xa0b: 0x1011,\n\t0xa0c: 0x1029, 0xa0d: 0x0f31, 0xa0e: 0x0008, 0xa0f: 0x0f51, 0xa10: 0x0f61, 0xa11: 0x1041,\n\t0xa12: 0x00d9, 0xa13: 0x1059, 0xa14: 0x05b5, 0xa15: 0x05b5, 0xa16: 0x0f99, 0xa17: 0x0fa9,\n\t0xa18: 0x0fb9, 0xa19: 0x059d, 0xa1a: 0x1071, 0xa1b: 0x1089, 0xa1c: 0x05cd, 0xa1d: 0x1099,\n\t0xa1e: 0x10b1, 0xa1f: 0x10c9, 0xa20: 0x10e1, 0xa21: 0x10f9, 0xa22: 0x0f41, 0xa23: 0x0269,\n\t0xa24: 0x0fb9, 0xa25: 0x1089, 0xa26: 0x1099, 0xa27: 0x10b1, 0xa28: 0x1111, 0xa29: 0x10e1,\n\t0xa2a: 0x10f9, 0xa2b: 0x0008, 0xa2c: 0x0008, 0xa2d: 0x0008, 0xa2e: 0x0008, 0xa2f: 0x0008,\n\t0xa30: 0x0008, 0xa31: 0x0008, 0xa32: 0x0008, 0xa33: 0x0008, 0xa34: 0x0008, 0xa35: 0x0008,\n\t0xa36: 0x0008, 0xa37: 0x0008, 0xa38: 0x1129, 0xa39: 0x0008, 0xa3a: 0x0008, 0xa3b: 0x0008,\n\t0xa3c: 0x0008, 0xa3d: 0x0008, 0xa3e: 0x0008, 0xa3f: 0x0008,\n\t// Block 0x29, offset 0xa40\n\t0xa40: 0x0008, 0xa41: 0x0008, 0xa42: 0x0008, 0xa43: 0x0008, 0xa44: 0x0008, 0xa45: 0x0008,\n\t0xa46: 0x0008, 0xa47: 0x0008, 0xa48: 0x0008, 0xa49: 0x0008, 0xa4a: 0x0008, 0xa4b: 0x0008,\n\t0xa4c: 0x0008, 0xa4d: 0x0008, 0xa4e: 0x0008, 0xa4f: 0x0008, 0xa50: 0x0008, 0xa51: 0x0008,\n\t0xa52: 0x0008, 0xa53: 0x0008, 0xa54: 0x0008, 0xa55: 0x0008, 0xa56: 0x0008, 0xa57: 0x0008,\n\t0xa58: 0x0008, 0xa59: 0x0008, 0xa5a: 0x0008, 0xa5b: 0x1141, 0xa5c: 0x1159, 0xa5d: 0x1169,\n\t0xa5e: 0x1181, 0xa5f: 0x1029, 0xa60: 0x1199, 0xa61: 0x11a9, 0xa62: 0x11c1, 0xa63: 0x11d9,\n\t0xa64: 0x11f1, 0xa65: 0x1209, 0xa66: 0x1221, 0xa67: 0x05e5, 0xa68: 0x1239, 0xa69: 0x1251,\n\t0xa6a: 0xe17d, 0xa6b: 0x1269, 0xa6c: 0x1281, 0xa6d: 0x1299, 0xa6e: 0x12b1, 0xa6f: 0x12c9,\n\t0xa70: 0x12e1, 0xa71: 0x12f9, 0xa72: 0x1311, 0xa73: 0x1329, 0xa74: 0x1341, 0xa75: 0x1359,\n\t0xa76: 0x1371, 0xa77: 0x1389, 0xa78: 0x05fd, 0xa79: 0x13a1, 0xa7a: 0x13b9, 0xa7b: 0x13d1,\n\t0xa7c: 0x13e1, 0xa7d: 0x13f9, 0xa7e: 0x1411, 0xa7f: 0x1429,\n\t// Block 0x2a, offset 0xa80\n\t0xa80: 0xe00d, 0xa81: 0x0008, 0xa82: 0xe00d, 0xa83: 0x0008, 0xa84: 0xe00d, 0xa85: 0x0008,\n\t0xa86: 0xe00d, 0xa87: 0x0008, 0xa88: 0xe00d, 0xa89: 0x0008, 0xa8a: 0xe00d, 0xa8b: 0x0008,\n\t0xa8c: 0xe00d, 0xa8d: 0x0008, 0xa8e: 0xe00d, 0xa8f: 0x0008, 0xa90: 0xe00d, 0xa91: 0x0008,\n\t0xa92: 0xe00d, 0xa93: 0x0008, 0xa94: 0xe00d, 0xa95: 0x0008, 0xa96: 0xe00d, 0xa97: 0x0008,\n\t0xa98: 0xe00d, 0xa99: 0x0008, 0xa9a: 0xe00d, 0xa9b: 0x0008, 0xa9c: 0xe00d, 0xa9d: 0x0008,\n\t0xa9e: 0xe00d, 0xa9f: 0x0008, 0xaa0: 0xe00d, 0xaa1: 0x0008, 0xaa2: 0xe00d, 0xaa3: 0x0008,\n\t0xaa4: 0xe00d, 0xaa5: 0x0008, 0xaa6: 0xe00d, 0xaa7: 0x0008, 0xaa8: 0xe00d, 0xaa9: 0x0008,\n\t0xaaa: 0xe00d, 0xaab: 0x0008, 0xaac: 0xe00d, 0xaad: 0x0008, 0xaae: 0xe00d, 0xaaf: 0x0008,\n\t0xab0: 0xe00d, 0xab1: 0x0008, 0xab2: 0xe00d, 0xab3: 0x0008, 0xab4: 0xe00d, 0xab5: 0x0008,\n\t0xab6: 0xe00d, 0xab7: 0x0008, 0xab8: 0xe00d, 0xab9: 0x0008, 0xaba: 0xe00d, 0xabb: 0x0008,\n\t0xabc: 0xe00d, 0xabd: 0x0008, 0xabe: 0xe00d, 0xabf: 0x0008,\n\t// Block 0x2b, offset 0xac0\n\t0xac0: 0xe00d, 0xac1: 0x0008, 0xac2: 0xe00d, 0xac3: 0x0008, 0xac4: 0xe00d, 0xac5: 0x0008,\n\t0xac6: 0xe00d, 0xac7: 0x0008, 0xac8: 0xe00d, 0xac9: 0x0008, 0xaca: 0xe00d, 0xacb: 0x0008,\n\t0xacc: 0xe00d, 0xacd: 0x0008, 0xace: 0xe00d, 0xacf: 0x0008, 0xad0: 0xe00d, 0xad1: 0x0008,\n\t0xad2: 0xe00d, 0xad3: 0x0008, 0xad4: 0xe00d, 0xad5: 0x0008, 0xad6: 0x0008, 0xad7: 0x0008,\n\t0xad8: 0x0008, 0xad9: 0x0008, 0xada: 0x0615, 0xadb: 0x0635, 0xadc: 0x0008, 0xadd: 0x0008,\n\t0xade: 0x1441, 0xadf: 0x0008, 0xae0: 0xe00d, 0xae1: 0x0008, 0xae2: 0xe00d, 0xae3: 0x0008,\n\t0xae4: 0xe00d, 0xae5: 0x0008, 0xae6: 0xe00d, 0xae7: 0x0008, 0xae8: 0xe00d, 0xae9: 0x0008,\n\t0xaea: 0xe00d, 0xaeb: 0x0008, 0xaec: 0xe00d, 0xaed: 0x0008, 0xaee: 0xe00d, 0xaef: 0x0008,\n\t0xaf0: 0xe00d, 0xaf1: 0x0008, 0xaf2: 0xe00d, 0xaf3: 0x0008, 0xaf4: 0xe00d, 0xaf5: 0x0008,\n\t0xaf6: 0xe00d, 0xaf7: 0x0008, 0xaf8: 0xe00d, 0xaf9: 0x0008, 0xafa: 0xe00d, 0xafb: 0x0008,\n\t0xafc: 0xe00d, 0xafd: 0x0008, 0xafe: 0xe00d, 0xaff: 0x0008,\n\t// Block 0x2c, offset 0xb00\n\t0xb00: 0x0008, 0xb01: 0x0008, 0xb02: 0x0008, 0xb03: 0x0008, 0xb04: 0x0008, 0xb05: 0x0008,\n\t0xb06: 0x0040, 0xb07: 0x0040, 0xb08: 0xe045, 0xb09: 0xe045, 0xb0a: 0xe045, 0xb0b: 0xe045,\n\t0xb0c: 0xe045, 0xb0d: 0xe045, 0xb0e: 0x0040, 0xb0f: 0x0040, 0xb10: 0x0008, 0xb11: 0x0008,\n\t0xb12: 0x0008, 0xb13: 0x0008, 0xb14: 0x0008, 0xb15: 0x0008, 0xb16: 0x0008, 0xb17: 0x0008,\n\t0xb18: 0x0040, 0xb19: 0xe045, 0xb1a: 0x0040, 0xb1b: 0xe045, 0xb1c: 0x0040, 0xb1d: 0xe045,\n\t0xb1e: 0x0040, 0xb1f: 0xe045, 0xb20: 0x0008, 0xb21: 0x0008, 0xb22: 0x0008, 0xb23: 0x0008,\n\t0xb24: 0x0008, 0xb25: 0x0008, 0xb26: 0x0008, 0xb27: 0x0008, 0xb28: 0xe045, 0xb29: 0xe045,\n\t0xb2a: 0xe045, 0xb2b: 0xe045, 0xb2c: 0xe045, 0xb2d: 0xe045, 0xb2e: 0xe045, 0xb2f: 0xe045,\n\t0xb30: 0x0008, 0xb31: 0x1459, 0xb32: 0x0008, 0xb33: 0x1471, 0xb34: 0x0008, 0xb35: 0x1489,\n\t0xb36: 0x0008, 0xb37: 0x14a1, 0xb38: 0x0008, 0xb39: 0x14b9, 0xb3a: 0x0008, 0xb3b: 0x14d1,\n\t0xb3c: 0x0008, 0xb3d: 0x14e9, 0xb3e: 0x0040, 0xb3f: 0x0040,\n\t// Block 0x2d, offset 0xb40\n\t0xb40: 0x1501, 0xb41: 0x1531, 0xb42: 0x1561, 0xb43: 0x1591, 0xb44: 0x15c1, 0xb45: 0x15f1,\n\t0xb46: 0x1621, 0xb47: 0x1651, 0xb48: 0x1501, 0xb49: 0x1531, 0xb4a: 0x1561, 0xb4b: 0x1591,\n\t0xb4c: 0x15c1, 0xb4d: 0x15f1, 0xb4e: 0x1621, 0xb4f: 0x1651, 0xb50: 0x1681, 0xb51: 0x16b1,\n\t0xb52: 0x16e1, 0xb53: 0x1711, 0xb54: 0x1741, 0xb55: 0x1771, 0xb56: 0x17a1, 0xb57: 0x17d1,\n\t0xb58: 0x1681, 0xb59: 0x16b1, 0xb5a: 0x16e1, 0xb5b: 0x1711, 0xb5c: 0x1741, 0xb5d: 0x1771,\n\t0xb5e: 0x17a1, 0xb5f: 0x17d1, 0xb60: 0x1801, 0xb61: 0x1831, 0xb62: 0x1861, 0xb63: 0x1891,\n\t0xb64: 0x18c1, 0xb65: 0x18f1, 0xb66: 0x1921, 0xb67: 0x1951, 0xb68: 0x1801, 0xb69: 0x1831,\n\t0xb6a: 0x1861, 0xb6b: 0x1891, 0xb6c: 0x18c1, 0xb6d: 0x18f1, 0xb6e: 0x1921, 0xb6f: 0x1951,\n\t0xb70: 0x0008, 0xb71: 0x0008, 0xb72: 0x1981, 0xb73: 0x19b1, 0xb74: 0x19d9, 0xb75: 0x0040,\n\t0xb76: 0x0008, 0xb77: 0x1a01, 0xb78: 0xe045, 0xb79: 0xe045, 0xb7a: 0x064d, 0xb7b: 0x1459,\n\t0xb7c: 0x19b1, 0xb7d: 0x0666, 0xb7e: 0x1a31, 0xb7f: 0x0686,\n\t// Block 0x2e, offset 0xb80\n\t0xb80: 0x06a6, 0xb81: 0x1a4a, 0xb82: 0x1a79, 0xb83: 0x1aa9, 0xb84: 0x1ad1, 0xb85: 0x0040,\n\t0xb86: 0x0008, 0xb87: 0x1af9, 0xb88: 0x06c5, 0xb89: 0x1471, 0xb8a: 0x06dd, 0xb8b: 0x1489,\n\t0xb8c: 0x1aa9, 0xb8d: 0x1b2a, 0xb8e: 0x1b5a, 0xb8f: 0x1b8a, 0xb90: 0x0008, 0xb91: 0x0008,\n\t0xb92: 0x0008, 0xb93: 0x1bb9, 0xb94: 0x0040, 0xb95: 0x0040, 0xb96: 0x0008, 0xb97: 0x0008,\n\t0xb98: 0xe045, 0xb99: 0xe045, 0xb9a: 0x06f5, 0xb9b: 0x14a1, 0xb9c: 0x0040, 0xb9d: 0x1bd2,\n\t0xb9e: 0x1c02, 0xb9f: 0x1c32, 0xba0: 0x0008, 0xba1: 0x0008, 0xba2: 0x0008, 0xba3: 0x1c61,\n\t0xba4: 0x0008, 0xba5: 0x0008, 0xba6: 0x0008, 0xba7: 0x0008, 0xba8: 0xe045, 0xba9: 0xe045,\n\t0xbaa: 0x070d, 0xbab: 0x14d1, 0xbac: 0xe04d, 0xbad: 0x1c7a, 0xbae: 0x03d2, 0xbaf: 0x1caa,\n\t0xbb0: 0x0040, 0xbb1: 0x0040, 0xbb2: 0x1cb9, 0xbb3: 0x1ce9, 0xbb4: 0x1d11, 0xbb5: 0x0040,\n\t0xbb6: 0x0008, 0xbb7: 0x1d39, 0xbb8: 0x0725, 0xbb9: 0x14b9, 0xbba: 0x0515, 0xbbb: 0x14e9,\n\t0xbbc: 0x1ce9, 0xbbd: 0x073e, 0xbbe: 0x075e, 0xbbf: 0x0040,\n\t// Block 0x2f, offset 0xbc0\n\t0xbc0: 0x000a, 0xbc1: 0x000a, 0xbc2: 0x000a, 0xbc3: 0x000a, 0xbc4: 0x000a, 0xbc5: 0x000a,\n\t0xbc6: 0x000a, 0xbc7: 0x000a, 0xbc8: 0x000a, 0xbc9: 0x000a, 0xbca: 0x000a, 0xbcb: 0x03c0,\n\t0xbcc: 0x0003, 0xbcd: 0x0003, 0xbce: 0x0340, 0xbcf: 0x0b40, 0xbd0: 0x0018, 0xbd1: 0xe00d,\n\t0xbd2: 0x0018, 0xbd3: 0x0018, 0xbd4: 0x0018, 0xbd5: 0x0018, 0xbd6: 0x0018, 0xbd7: 0x077e,\n\t0xbd8: 0x0018, 0xbd9: 0x0018, 0xbda: 0x0018, 0xbdb: 0x0018, 0xbdc: 0x0018, 0xbdd: 0x0018,\n\t0xbde: 0x0018, 0xbdf: 0x0018, 0xbe0: 0x0018, 0xbe1: 0x0018, 0xbe2: 0x0018, 0xbe3: 0x0018,\n\t0xbe4: 0x0040, 0xbe5: 0x0040, 0xbe6: 0x0040, 0xbe7: 0x0018, 0xbe8: 0x0040, 0xbe9: 0x0040,\n\t0xbea: 0x0340, 0xbeb: 0x0340, 0xbec: 0x0340, 0xbed: 0x0340, 0xbee: 0x0340, 0xbef: 0x000a,\n\t0xbf0: 0x0018, 0xbf1: 0x0018, 0xbf2: 0x0018, 0xbf3: 0x1d69, 0xbf4: 0x1da1, 0xbf5: 0x0018,\n\t0xbf6: 0x1df1, 0xbf7: 0x1e29, 0xbf8: 0x0018, 0xbf9: 0x0018, 0xbfa: 0x0018, 0xbfb: 0x0018,\n\t0xbfc: 0x1e7a, 0xbfd: 0x0018, 0xbfe: 0x079e, 0xbff: 0x0018,\n\t// Block 0x30, offset 0xc00\n\t0xc00: 0x0018, 0xc01: 0x0018, 0xc02: 0x0018, 0xc03: 0x0018, 0xc04: 0x0018, 0xc05: 0x0018,\n\t0xc06: 0x0018, 0xc07: 0x1e92, 0xc08: 0x1eaa, 0xc09: 0x1ec2, 0xc0a: 0x0018, 0xc0b: 0x0018,\n\t0xc0c: 0x0018, 0xc0d: 0x0018, 0xc0e: 0x0018, 0xc0f: 0x0018, 0xc10: 0x0018, 0xc11: 0x0018,\n\t0xc12: 0x0018, 0xc13: 0x0018, 0xc14: 0x0018, 0xc15: 0x0018, 0xc16: 0x0018, 0xc17: 0x1ed9,\n\t0xc18: 0x0018, 0xc19: 0x0018, 0xc1a: 0x0018, 0xc1b: 0x0018, 0xc1c: 0x0018, 0xc1d: 0x0018,\n\t0xc1e: 0x0018, 0xc1f: 0x000a, 0xc20: 0x03c0, 0xc21: 0x0340, 0xc22: 0x0340, 0xc23: 0x0340,\n\t0xc24: 0x03c0, 0xc25: 0x0040, 0xc26: 0x0040, 0xc27: 0x0040, 0xc28: 0x0040, 0xc29: 0x0040,\n\t0xc2a: 0x0340, 0xc2b: 0x0340, 0xc2c: 0x0340, 0xc2d: 0x0340, 0xc2e: 0x0340, 0xc2f: 0x0340,\n\t0xc30: 0x1f41, 0xc31: 0x0f41, 0xc32: 0x0040, 0xc33: 0x0040, 0xc34: 0x1f51, 0xc35: 0x1f61,\n\t0xc36: 0x1f71, 0xc37: 0x1f81, 0xc38: 0x1f91, 0xc39: 0x1fa1, 0xc3a: 0x1fb2, 0xc3b: 0x07bd,\n\t0xc3c: 0x1fc2, 0xc3d: 0x1fd2, 0xc3e: 0x1fe2, 0xc3f: 0x0f71,\n\t// Block 0x31, offset 0xc40\n\t0xc40: 0x1f41, 0xc41: 0x00c9, 0xc42: 0x0069, 0xc43: 0x0079, 0xc44: 0x1f51, 0xc45: 0x1f61,\n\t0xc46: 0x1f71, 0xc47: 0x1f81, 0xc48: 0x1f91, 0xc49: 0x1fa1, 0xc4a: 0x1fb2, 0xc4b: 0x07d5,\n\t0xc4c: 0x1fc2, 0xc4d: 0x1fd2, 0xc4e: 0x1fe2, 0xc4f: 0x0040, 0xc50: 0x0039, 0xc51: 0x0f09,\n\t0xc52: 0x00d9, 0xc53: 0x0369, 0xc54: 0x0ff9, 0xc55: 0x0249, 0xc56: 0x0f51, 0xc57: 0x0359,\n\t0xc58: 0x0f61, 0xc59: 0x0f71, 0xc5a: 0x0f99, 0xc5b: 0x01d9, 0xc5c: 0x0fa9, 0xc5d: 0x0040,\n\t0xc5e: 0x0040, 0xc5f: 0x0040, 0xc60: 0x0018, 0xc61: 0x0018, 0xc62: 0x0018, 0xc63: 0x0018,\n\t0xc64: 0x0018, 0xc65: 0x0018, 0xc66: 0x0018, 0xc67: 0x0018, 0xc68: 0x1ff1, 0xc69: 0x0018,\n\t0xc6a: 0x0018, 0xc6b: 0x0018, 0xc6c: 0x0018, 0xc6d: 0x0018, 0xc6e: 0x0018, 0xc6f: 0x0018,\n\t0xc70: 0x0018, 0xc71: 0x0018, 0xc72: 0x0018, 0xc73: 0x0018, 0xc74: 0x0018, 0xc75: 0x0018,\n\t0xc76: 0x0018, 0xc77: 0x0018, 0xc78: 0x0018, 0xc79: 0x0018, 0xc7a: 0x0018, 0xc7b: 0x0018,\n\t0xc7c: 0x0018, 0xc7d: 0x0018, 0xc7e: 0x0018, 0xc7f: 0x0018,\n\t// Block 0x32, offset 0xc80\n\t0xc80: 0x07ee, 0xc81: 0x080e, 0xc82: 0x1159, 0xc83: 0x082d, 0xc84: 0x0018, 0xc85: 0x084e,\n\t0xc86: 0x086e, 0xc87: 0x1011, 0xc88: 0x0018, 0xc89: 0x088d, 0xc8a: 0x0f31, 0xc8b: 0x0249,\n\t0xc8c: 0x0249, 0xc8d: 0x0249, 0xc8e: 0x0249, 0xc8f: 0x2009, 0xc90: 0x0f41, 0xc91: 0x0f41,\n\t0xc92: 0x0359, 0xc93: 0x0359, 0xc94: 0x0018, 0xc95: 0x0f71, 0xc96: 0x2021, 0xc97: 0x0018,\n\t0xc98: 0x0018, 0xc99: 0x0f99, 0xc9a: 0x2039, 0xc9b: 0x0269, 0xc9c: 0x0269, 0xc9d: 0x0269,\n\t0xc9e: 0x0018, 0xc9f: 0x0018, 0xca0: 0x2049, 0xca1: 0x08ad, 0xca2: 0x2061, 0xca3: 0x0018,\n\t0xca4: 0x13d1, 0xca5: 0x0018, 0xca6: 0x2079, 0xca7: 0x0018, 0xca8: 0x13d1, 0xca9: 0x0018,\n\t0xcaa: 0x0f51, 0xcab: 0x2091, 0xcac: 0x0ee9, 0xcad: 0x1159, 0xcae: 0x0018, 0xcaf: 0x0f09,\n\t0xcb0: 0x0f09, 0xcb1: 0x1199, 0xcb2: 0x0040, 0xcb3: 0x0f61, 0xcb4: 0x00d9, 0xcb5: 0x20a9,\n\t0xcb6: 0x20c1, 0xcb7: 0x20d9, 0xcb8: 0x20f1, 0xcb9: 0x0f41, 0xcba: 0x0018, 0xcbb: 0x08cd,\n\t0xcbc: 0x2109, 0xcbd: 0x10b1, 0xcbe: 0x10b1, 0xcbf: 0x2109,\n\t// Block 0x33, offset 0xcc0\n\t0xcc0: 0x08ed, 0xcc1: 0x0018, 0xcc2: 0x0018, 0xcc3: 0x0018, 0xcc4: 0x0018, 0xcc5: 0x0ef9,\n\t0xcc6: 0x0ef9, 0xcc7: 0x0f09, 0xcc8: 0x0f41, 0xcc9: 0x0259, 0xcca: 0x0018, 0xccb: 0x0018,\n\t0xccc: 0x0018, 0xccd: 0x0018, 0xcce: 0x0008, 0xccf: 0x0018, 0xcd0: 0x2121, 0xcd1: 0x2151,\n\t0xcd2: 0x2181, 0xcd3: 0x21b9, 0xcd4: 0x21e9, 0xcd5: 0x2219, 0xcd6: 0x2249, 0xcd7: 0x2279,\n\t0xcd8: 0x22a9, 0xcd9: 0x22d9, 0xcda: 0x2309, 0xcdb: 0x2339, 0xcdc: 0x2369, 0xcdd: 0x2399,\n\t0xcde: 0x23c9, 0xcdf: 0x23f9, 0xce0: 0x0f41, 0xce1: 0x2421, 0xce2: 0x0905, 0xce3: 0x2439,\n\t0xce4: 0x1089, 0xce5: 0x2451, 0xce6: 0x0925, 0xce7: 0x2469, 0xce8: 0x2491, 0xce9: 0x0369,\n\t0xcea: 0x24a9, 0xceb: 0x0945, 0xcec: 0x0359, 0xced: 0x1159, 0xcee: 0x0ef9, 0xcef: 0x0f61,\n\t0xcf0: 0x0f41, 0xcf1: 0x2421, 0xcf2: 0x0965, 0xcf3: 0x2439, 0xcf4: 0x1089, 0xcf5: 0x2451,\n\t0xcf6: 0x0985, 0xcf7: 0x2469, 0xcf8: 0x2491, 0xcf9: 0x0369, 0xcfa: 0x24a9, 0xcfb: 0x09a5,\n\t0xcfc: 0x0359, 0xcfd: 0x1159, 0xcfe: 0x0ef9, 0xcff: 0x0f61,\n\t// Block 0x34, offset 0xd00\n\t0xd00: 0x0018, 0xd01: 0x0018, 0xd02: 0x0018, 0xd03: 0x0018, 0xd04: 0x0018, 0xd05: 0x0018,\n\t0xd06: 0x0018, 0xd07: 0x0018, 0xd08: 0x0018, 0xd09: 0x0018, 0xd0a: 0x0018, 0xd0b: 0x0040,\n\t0xd0c: 0x0040, 0xd0d: 0x0040, 0xd0e: 0x0040, 0xd0f: 0x0040, 0xd10: 0x0040, 0xd11: 0x0040,\n\t0xd12: 0x0040, 0xd13: 0x0040, 0xd14: 0x0040, 0xd15: 0x0040, 0xd16: 0x0040, 0xd17: 0x0040,\n\t0xd18: 0x0040, 0xd19: 0x0040, 0xd1a: 0x0040, 0xd1b: 0x0040, 0xd1c: 0x0040, 0xd1d: 0x0040,\n\t0xd1e: 0x0040, 0xd1f: 0x0040, 0xd20: 0x00c9, 0xd21: 0x0069, 0xd22: 0x0079, 0xd23: 0x1f51,\n\t0xd24: 0x1f61, 0xd25: 0x1f71, 0xd26: 0x1f81, 0xd27: 0x1f91, 0xd28: 0x1fa1, 0xd29: 0x2601,\n\t0xd2a: 0x2619, 0xd2b: 0x2631, 0xd2c: 0x2649, 0xd2d: 0x2661, 0xd2e: 0x2679, 0xd2f: 0x2691,\n\t0xd30: 0x26a9, 0xd31: 0x26c1, 0xd32: 0x26d9, 0xd33: 0x26f1, 0xd34: 0x0a06, 0xd35: 0x0a26,\n\t0xd36: 0x0a46, 0xd37: 0x0a66, 0xd38: 0x0a86, 0xd39: 0x0aa6, 0xd3a: 0x0ac6, 0xd3b: 0x0ae6,\n\t0xd3c: 0x0b06, 0xd3d: 0x270a, 0xd3e: 0x2732, 0xd3f: 0x275a,\n\t// Block 0x35, offset 0xd40\n\t0xd40: 0x2782, 0xd41: 0x27aa, 0xd42: 0x27d2, 0xd43: 0x27fa, 0xd44: 0x2822, 0xd45: 0x284a,\n\t0xd46: 0x2872, 0xd47: 0x289a, 0xd48: 0x0040, 0xd49: 0x0040, 0xd4a: 0x0040, 0xd4b: 0x0040,\n\t0xd4c: 0x0040, 0xd4d: 0x0040, 0xd4e: 0x0040, 0xd4f: 0x0040, 0xd50: 0x0040, 0xd51: 0x0040,\n\t0xd52: 0x0040, 0xd53: 0x0040, 0xd54: 0x0040, 0xd55: 0x0040, 0xd56: 0x0040, 0xd57: 0x0040,\n\t0xd58: 0x0040, 0xd59: 0x0040, 0xd5a: 0x0040, 0xd5b: 0x0040, 0xd5c: 0x0b26, 0xd5d: 0x0b46,\n\t0xd5e: 0x0b66, 0xd5f: 0x0b86, 0xd60: 0x0ba6, 0xd61: 0x0bc6, 0xd62: 0x0be6, 0xd63: 0x0c06,\n\t0xd64: 0x0c26, 0xd65: 0x0c46, 0xd66: 0x0c66, 0xd67: 0x0c86, 0xd68: 0x0ca6, 0xd69: 0x0cc6,\n\t0xd6a: 0x0ce6, 0xd6b: 0x0d06, 0xd6c: 0x0d26, 0xd6d: 0x0d46, 0xd6e: 0x0d66, 0xd6f: 0x0d86,\n\t0xd70: 0x0da6, 0xd71: 0x0dc6, 0xd72: 0x0de6, 0xd73: 0x0e06, 0xd74: 0x0e26, 0xd75: 0x0e46,\n\t0xd76: 0x0039, 0xd77: 0x0ee9, 0xd78: 0x1159, 0xd79: 0x0ef9, 0xd7a: 0x0f09, 0xd7b: 0x1199,\n\t0xd7c: 0x0f31, 0xd7d: 0x0249, 0xd7e: 0x0f41, 0xd7f: 0x0259,\n\t// Block 0x36, offset 0xd80\n\t0xd80: 0x0f51, 0xd81: 0x0359, 0xd82: 0x0f61, 0xd83: 0x0f71, 0xd84: 0x00d9, 0xd85: 0x0f99,\n\t0xd86: 0x2039, 0xd87: 0x0269, 0xd88: 0x01d9, 0xd89: 0x0fa9, 0xd8a: 0x0fb9, 0xd8b: 0x1089,\n\t0xd8c: 0x0279, 0xd8d: 0x0369, 0xd8e: 0x0289, 0xd8f: 0x13d1, 0xd90: 0x0039, 0xd91: 0x0ee9,\n\t0xd92: 0x1159, 0xd93: 0x0ef9, 0xd94: 0x0f09, 0xd95: 0x1199, 0xd96: 0x0f31, 0xd97: 0x0249,\n\t0xd98: 0x0f41, 0xd99: 0x0259, 0xd9a: 0x0f51, 0xd9b: 0x0359, 0xd9c: 0x0f61, 0xd9d: 0x0f71,\n\t0xd9e: 0x00d9, 0xd9f: 0x0f99, 0xda0: 0x2039, 0xda1: 0x0269, 0xda2: 0x01d9, 0xda3: 0x0fa9,\n\t0xda4: 0x0fb9, 0xda5: 0x1089, 0xda6: 0x0279, 0xda7: 0x0369, 0xda8: 0x0289, 0xda9: 0x13d1,\n\t0xdaa: 0x1f41, 0xdab: 0x0018, 0xdac: 0x0018, 0xdad: 0x0018, 0xdae: 0x0018, 0xdaf: 0x0018,\n\t0xdb0: 0x0018, 0xdb1: 0x0018, 0xdb2: 0x0018, 0xdb3: 0x0018, 0xdb4: 0x0018, 0xdb5: 0x0018,\n\t0xdb6: 0x0018, 0xdb7: 0x0018, 0xdb8: 0x0018, 0xdb9: 0x0018, 0xdba: 0x0018, 0xdbb: 0x0018,\n\t0xdbc: 0x0018, 0xdbd: 0x0018, 0xdbe: 0x0018, 0xdbf: 0x0018,\n\t// Block 0x37, offset 0xdc0\n\t0xdc0: 0x0008, 0xdc1: 0x0008, 0xdc2: 0x0008, 0xdc3: 0x0008, 0xdc4: 0x0008, 0xdc5: 0x0008,\n\t0xdc6: 0x0008, 0xdc7: 0x0008, 0xdc8: 0x0008, 0xdc9: 0x0008, 0xdca: 0x0008, 0xdcb: 0x0008,\n\t0xdcc: 0x0008, 0xdcd: 0x0008, 0xdce: 0x0008, 0xdcf: 0x0008, 0xdd0: 0x0008, 0xdd1: 0x0008,\n\t0xdd2: 0x0008, 0xdd3: 0x0008, 0xdd4: 0x0008, 0xdd5: 0x0008, 0xdd6: 0x0008, 0xdd7: 0x0008,\n\t0xdd8: 0x0008, 0xdd9: 0x0008, 0xdda: 0x0008, 0xddb: 0x0008, 0xddc: 0x0008, 0xddd: 0x0008,\n\t0xdde: 0x0008, 0xddf: 0x0040, 0xde0: 0xe00d, 0xde1: 0x0008, 0xde2: 0x2971, 0xde3: 0x0ebd,\n\t0xde4: 0x2989, 0xde5: 0x0008, 0xde6: 0x0008, 0xde7: 0xe07d, 0xde8: 0x0008, 0xde9: 0xe01d,\n\t0xdea: 0x0008, 0xdeb: 0xe03d, 0xdec: 0x0008, 0xded: 0x0fe1, 0xdee: 0x1281, 0xdef: 0x0fc9,\n\t0xdf0: 0x1141, 0xdf1: 0x0008, 0xdf2: 0xe00d, 0xdf3: 0x0008, 0xdf4: 0x0008, 0xdf5: 0xe01d,\n\t0xdf6: 0x0008, 0xdf7: 0x0008, 0xdf8: 0x0008, 0xdf9: 0x0008, 0xdfa: 0x0008, 0xdfb: 0x0008,\n\t0xdfc: 0x0259, 0xdfd: 0x1089, 0xdfe: 0x29a1, 0xdff: 0x29b9,\n\t// Block 0x38, offset 0xe00\n\t0xe00: 0xe00d, 0xe01: 0x0008, 0xe02: 0xe00d, 0xe03: 0x0008, 0xe04: 0xe00d, 0xe05: 0x0008,\n\t0xe06: 0xe00d, 0xe07: 0x0008, 0xe08: 0xe00d, 0xe09: 0x0008, 0xe0a: 0xe00d, 0xe0b: 0x0008,\n\t0xe0c: 0xe00d, 0xe0d: 0x0008, 0xe0e: 0xe00d, 0xe0f: 0x0008, 0xe10: 0xe00d, 0xe11: 0x0008,\n\t0xe12: 0xe00d, 0xe13: 0x0008, 0xe14: 0xe00d, 0xe15: 0x0008, 0xe16: 0xe00d, 0xe17: 0x0008,\n\t0xe18: 0xe00d, 0xe19: 0x0008, 0xe1a: 0xe00d, 0xe1b: 0x0008, 0xe1c: 0xe00d, 0xe1d: 0x0008,\n\t0xe1e: 0xe00d, 0xe1f: 0x0008, 0xe20: 0xe00d, 0xe21: 0x0008, 0xe22: 0xe00d, 0xe23: 0x0008,\n\t0xe24: 0x0008, 0xe25: 0x0018, 0xe26: 0x0018, 0xe27: 0x0018, 0xe28: 0x0018, 0xe29: 0x0018,\n\t0xe2a: 0x0018, 0xe2b: 0xe03d, 0xe2c: 0x0008, 0xe2d: 0xe01d, 0xe2e: 0x0008, 0xe2f: 0x3308,\n\t0xe30: 0x3308, 0xe31: 0x3308, 0xe32: 0xe00d, 0xe33: 0x0008, 0xe34: 0x0040, 0xe35: 0x0040,\n\t0xe36: 0x0040, 0xe37: 0x0040, 0xe38: 0x0040, 0xe39: 0x0018, 0xe3a: 0x0018, 0xe3b: 0x0018,\n\t0xe3c: 0x0018, 0xe3d: 0x0018, 0xe3e: 0x0018, 0xe3f: 0x0018,\n\t// Block 0x39, offset 0xe40\n\t0xe40: 0x26fd, 0xe41: 0x271d, 0xe42: 0x273d, 0xe43: 0x275d, 0xe44: 0x277d, 0xe45: 0x279d,\n\t0xe46: 0x27bd, 0xe47: 0x27dd, 0xe48: 0x27fd, 0xe49: 0x281d, 0xe4a: 0x283d, 0xe4b: 0x285d,\n\t0xe4c: 0x287d, 0xe4d: 0x289d, 0xe4e: 0x28bd, 0xe4f: 0x28dd, 0xe50: 0x28fd, 0xe51: 0x291d,\n\t0xe52: 0x293d, 0xe53: 0x295d, 0xe54: 0x297d, 0xe55: 0x299d, 0xe56: 0x0040, 0xe57: 0x0040,\n\t0xe58: 0x0040, 0xe59: 0x0040, 0xe5a: 0x0040, 0xe5b: 0x0040, 0xe5c: 0x0040, 0xe5d: 0x0040,\n\t0xe5e: 0x0040, 0xe5f: 0x0040, 0xe60: 0x0040, 0xe61: 0x0040, 0xe62: 0x0040, 0xe63: 0x0040,\n\t0xe64: 0x0040, 0xe65: 0x0040, 0xe66: 0x0040, 0xe67: 0x0040, 0xe68: 0x0040, 0xe69: 0x0040,\n\t0xe6a: 0x0040, 0xe6b: 0x0040, 0xe6c: 0x0040, 0xe6d: 0x0040, 0xe6e: 0x0040, 0xe6f: 0x0040,\n\t0xe70: 0x0040, 0xe71: 0x0040, 0xe72: 0x0040, 0xe73: 0x0040, 0xe74: 0x0040, 0xe75: 0x0040,\n\t0xe76: 0x0040, 0xe77: 0x0040, 0xe78: 0x0040, 0xe79: 0x0040, 0xe7a: 0x0040, 0xe7b: 0x0040,\n\t0xe7c: 0x0040, 0xe7d: 0x0040, 0xe7e: 0x0040, 0xe7f: 0x0040,\n\t// Block 0x3a, offset 0xe80\n\t0xe80: 0x000a, 0xe81: 0x0018, 0xe82: 0x29d1, 0xe83: 0x0018, 0xe84: 0x0018, 0xe85: 0x0008,\n\t0xe86: 0x0008, 0xe87: 0x0008, 0xe88: 0x0018, 0xe89: 0x0018, 0xe8a: 0x0018, 0xe8b: 0x0018,\n\t0xe8c: 0x0018, 0xe8d: 0x0018, 0xe8e: 0x0018, 0xe8f: 0x0018, 0xe90: 0x0018, 0xe91: 0x0018,\n\t0xe92: 0x0018, 0xe93: 0x0018, 0xe94: 0x0018, 0xe95: 0x0018, 0xe96: 0x0018, 0xe97: 0x0018,\n\t0xe98: 0x0018, 0xe99: 0x0018, 0xe9a: 0x0018, 0xe9b: 0x0018, 0xe9c: 0x0018, 0xe9d: 0x0018,\n\t0xe9e: 0x0018, 0xe9f: 0x0018, 0xea0: 0x0018, 0xea1: 0x0018, 0xea2: 0x0018, 0xea3: 0x0018,\n\t0xea4: 0x0018, 0xea5: 0x0018, 0xea6: 0x0018, 0xea7: 0x0018, 0xea8: 0x0018, 0xea9: 0x0018,\n\t0xeaa: 0x3308, 0xeab: 0x3308, 0xeac: 0x3308, 0xead: 0x3308, 0xeae: 0x3018, 0xeaf: 0x3018,\n\t0xeb0: 0x0018, 0xeb1: 0x0018, 0xeb2: 0x0018, 0xeb3: 0x0018, 0xeb4: 0x0018, 0xeb5: 0x0018,\n\t0xeb6: 0xe125, 0xeb7: 0x0018, 0xeb8: 0x29bd, 0xeb9: 0x29dd, 0xeba: 0x29fd, 0xebb: 0x0018,\n\t0xebc: 0x0008, 0xebd: 0x0018, 0xebe: 0x0018, 0xebf: 0x0018,\n\t// Block 0x3b, offset 0xec0\n\t0xec0: 0x2b3d, 0xec1: 0x2b5d, 0xec2: 0x2b7d, 0xec3: 0x2b9d, 0xec4: 0x2bbd, 0xec5: 0x2bdd,\n\t0xec6: 0x2bdd, 0xec7: 0x2bdd, 0xec8: 0x2bfd, 0xec9: 0x2bfd, 0xeca: 0x2bfd, 0xecb: 0x2bfd,\n\t0xecc: 0x2c1d, 0xecd: 0x2c1d, 0xece: 0x2c1d, 0xecf: 0x2c3d, 0xed0: 0x2c5d, 0xed1: 0x2c5d,\n\t0xed2: 0x2a7d, 0xed3: 0x2a7d, 0xed4: 0x2c5d, 0xed5: 0x2c5d, 0xed6: 0x2c7d, 0xed7: 0x2c7d,\n\t0xed8: 0x2c5d, 0xed9: 0x2c5d, 0xeda: 0x2a7d, 0xedb: 0x2a7d, 0xedc: 0x2c5d, 0xedd: 0x2c5d,\n\t0xede: 0x2c3d, 0xedf: 0x2c3d, 0xee0: 0x2c9d, 0xee1: 0x2c9d, 0xee2: 0x2cbd, 0xee3: 0x2cbd,\n\t0xee4: 0x0040, 0xee5: 0x2cdd, 0xee6: 0x2cfd, 0xee7: 0x2d1d, 0xee8: 0x2d1d, 0xee9: 0x2d3d,\n\t0xeea: 0x2d5d, 0xeeb: 0x2d7d, 0xeec: 0x2d9d, 0xeed: 0x2dbd, 0xeee: 0x2ddd, 0xeef: 0x2dfd,\n\t0xef0: 0x2e1d, 0xef1: 0x2e3d, 0xef2: 0x2e3d, 0xef3: 0x2e5d, 0xef4: 0x2e7d, 0xef5: 0x2e7d,\n\t0xef6: 0x2e9d, 0xef7: 0x2ebd, 0xef8: 0x2e5d, 0xef9: 0x2edd, 0xefa: 0x2efd, 0xefb: 0x2edd,\n\t0xefc: 0x2e5d, 0xefd: 0x2f1d, 0xefe: 0x2f3d, 0xeff: 0x2f5d,\n\t// Block 0x3c, offset 0xf00\n\t0xf00: 0x2f7d, 0xf01: 0x2f9d, 0xf02: 0x2cfd, 0xf03: 0x2cdd, 0xf04: 0x2fbd, 0xf05: 0x2fdd,\n\t0xf06: 0x2ffd, 0xf07: 0x301d, 0xf08: 0x303d, 0xf09: 0x305d, 0xf0a: 0x307d, 0xf0b: 0x309d,\n\t0xf0c: 0x30bd, 0xf0d: 0x30dd, 0xf0e: 0x30fd, 0xf0f: 0x0040, 0xf10: 0x0018, 0xf11: 0x0018,\n\t0xf12: 0x311d, 0xf13: 0x313d, 0xf14: 0x315d, 0xf15: 0x317d, 0xf16: 0x319d, 0xf17: 0x31bd,\n\t0xf18: 0x31dd, 0xf19: 0x31fd, 0xf1a: 0x321d, 0xf1b: 0x323d, 0xf1c: 0x315d, 0xf1d: 0x325d,\n\t0xf1e: 0x327d, 0xf1f: 0x329d, 0xf20: 0x0008, 0xf21: 0x0008, 0xf22: 0x0008, 0xf23: 0x0008,\n\t0xf24: 0x0008, 0xf25: 0x0008, 0xf26: 0x0008, 0xf27: 0x0008, 0xf28: 0x0008, 0xf29: 0x0008,\n\t0xf2a: 0x0008, 0xf2b: 0x0008, 0xf2c: 0x0008, 0xf2d: 0x0008, 0xf2e: 0x0008, 0xf2f: 0x0008,\n\t0xf30: 0x0008, 0xf31: 0x0008, 0xf32: 0x0008, 0xf33: 0x0008, 0xf34: 0x0008, 0xf35: 0x0008,\n\t0xf36: 0x0008, 0xf37: 0x0008, 0xf38: 0x0008, 0xf39: 0x0008, 0xf3a: 0x0008, 0xf3b: 0x0040,\n\t0xf3c: 0x0040, 0xf3d: 0x0040, 0xf3e: 0x0040, 0xf3f: 0x0040,\n\t// Block 0x3d, offset 0xf40\n\t0xf40: 0x36a2, 0xf41: 0x36d2, 0xf42: 0x3702, 0xf43: 0x3732, 0xf44: 0x32bd, 0xf45: 0x32dd,\n\t0xf46: 0x32fd, 0xf47: 0x331d, 0xf48: 0x0018, 0xf49: 0x0018, 0xf4a: 0x0018, 0xf4b: 0x0018,\n\t0xf4c: 0x0018, 0xf4d: 0x0018, 0xf4e: 0x0018, 0xf4f: 0x0018, 0xf50: 0x333d, 0xf51: 0x3761,\n\t0xf52: 0x3779, 0xf53: 0x3791, 0xf54: 0x37a9, 0xf55: 0x37c1, 0xf56: 0x37d9, 0xf57: 0x37f1,\n\t0xf58: 0x3809, 0xf59: 0x3821, 0xf5a: 0x3839, 0xf5b: 0x3851, 0xf5c: 0x3869, 0xf5d: 0x3881,\n\t0xf5e: 0x3899, 0xf5f: 0x38b1, 0xf60: 0x335d, 0xf61: 0x337d, 0xf62: 0x339d, 0xf63: 0x33bd,\n\t0xf64: 0x33dd, 0xf65: 0x33dd, 0xf66: 0x33fd, 0xf67: 0x341d, 0xf68: 0x343d, 0xf69: 0x345d,\n\t0xf6a: 0x347d, 0xf6b: 0x349d, 0xf6c: 0x34bd, 0xf6d: 0x34dd, 0xf6e: 0x34fd, 0xf6f: 0x351d,\n\t0xf70: 0x353d, 0xf71: 0x355d, 0xf72: 0x357d, 0xf73: 0x359d, 0xf74: 0x35bd, 0xf75: 0x35dd,\n\t0xf76: 0x35fd, 0xf77: 0x361d, 0xf78: 0x363d, 0xf79: 0x365d, 0xf7a: 0x367d, 0xf7b: 0x369d,\n\t0xf7c: 0x38c9, 0xf7d: 0x3901, 0xf7e: 0x36bd, 0xf7f: 0x0018,\n\t// Block 0x3e, offset 0xf80\n\t0xf80: 0x36dd, 0xf81: 0x36fd, 0xf82: 0x371d, 0xf83: 0x373d, 0xf84: 0x375d, 0xf85: 0x377d,\n\t0xf86: 0x379d, 0xf87: 0x37bd, 0xf88: 0x37dd, 0xf89: 0x37fd, 0xf8a: 0x381d, 0xf8b: 0x383d,\n\t0xf8c: 0x385d, 0xf8d: 0x387d, 0xf8e: 0x389d, 0xf8f: 0x38bd, 0xf90: 0x38dd, 0xf91: 0x38fd,\n\t0xf92: 0x391d, 0xf93: 0x393d, 0xf94: 0x395d, 0xf95: 0x397d, 0xf96: 0x399d, 0xf97: 0x39bd,\n\t0xf98: 0x39dd, 0xf99: 0x39fd, 0xf9a: 0x3a1d, 0xf9b: 0x3a3d, 0xf9c: 0x3a5d, 0xf9d: 0x3a7d,\n\t0xf9e: 0x3a9d, 0xf9f: 0x3abd, 0xfa0: 0x3add, 0xfa1: 0x3afd, 0xfa2: 0x3b1d, 0xfa3: 0x3b3d,\n\t0xfa4: 0x3b5d, 0xfa5: 0x3b7d, 0xfa6: 0x127d, 0xfa7: 0x3b9d, 0xfa8: 0x3bbd, 0xfa9: 0x3bdd,\n\t0xfaa: 0x3bfd, 0xfab: 0x3c1d, 0xfac: 0x3c3d, 0xfad: 0x3c5d, 0xfae: 0x239d, 0xfaf: 0x3c7d,\n\t0xfb0: 0x3c9d, 0xfb1: 0x3939, 0xfb2: 0x3951, 0xfb3: 0x3969, 0xfb4: 0x3981, 0xfb5: 0x3999,\n\t0xfb6: 0x39b1, 0xfb7: 0x39c9, 0xfb8: 0x39e1, 0xfb9: 0x39f9, 0xfba: 0x3a11, 0xfbb: 0x3a29,\n\t0xfbc: 0x3a41, 0xfbd: 0x3a59, 0xfbe: 0x3a71, 0xfbf: 0x3a89,\n\t// Block 0x3f, offset 0xfc0\n\t0xfc0: 0x3aa1, 0xfc1: 0x3ac9, 0xfc2: 0x3af1, 0xfc3: 0x3b19, 0xfc4: 0x3b41, 0xfc5: 0x3b69,\n\t0xfc6: 0x3b91, 0xfc7: 0x3bb9, 0xfc8: 0x3be1, 0xfc9: 0x3c09, 0xfca: 0x3c39, 0xfcb: 0x3c69,\n\t0xfcc: 0x3c99, 0xfcd: 0x3cbd, 0xfce: 0x3cb1, 0xfcf: 0x3cdd, 0xfd0: 0x3cfd, 0xfd1: 0x3d15,\n\t0xfd2: 0x3d2d, 0xfd3: 0x3d45, 0xfd4: 0x3d5d, 0xfd5: 0x3d5d, 0xfd6: 0x3d45, 0xfd7: 0x3d75,\n\t0xfd8: 0x07bd, 0xfd9: 0x3d8d, 0xfda: 0x3da5, 0xfdb: 0x3dbd, 0xfdc: 0x3dd5, 0xfdd: 0x3ded,\n\t0xfde: 0x3e05, 0xfdf: 0x3e1d, 0xfe0: 0x3e35, 0xfe1: 0x3e4d, 0xfe2: 0x3e65, 0xfe3: 0x3e7d,\n\t0xfe4: 0x3e95, 0xfe5: 0x3e95, 0xfe6: 0x3ead, 0xfe7: 0x3ead, 0xfe8: 0x3ec5, 0xfe9: 0x3ec5,\n\t0xfea: 0x3edd, 0xfeb: 0x3ef5, 0xfec: 0x3f0d, 0xfed: 0x3f25, 0xfee: 0x3f3d, 0xfef: 0x3f3d,\n\t0xff0: 0x3f55, 0xff1: 0x3f55, 0xff2: 0x3f55, 0xff3: 0x3f6d, 0xff4: 0x3f85, 0xff5: 0x3f9d,\n\t0xff6: 0x3fb5, 0xff7: 0x3f9d, 0xff8: 0x3fcd, 0xff9: 0x3fe5, 0xffa: 0x3f6d, 0xffb: 0x3ffd,\n\t0xffc: 0x4015, 0xffd: 0x4015, 0xffe: 0x4015, 0xfff: 0x0040,\n\t// Block 0x40, offset 0x1000\n\t0x1000: 0x3cc9, 0x1001: 0x3d31, 0x1002: 0x3d99, 0x1003: 0x3e01, 0x1004: 0x3e51, 0x1005: 0x3eb9,\n\t0x1006: 0x3f09, 0x1007: 0x3f59, 0x1008: 0x3fd9, 0x1009: 0x4041, 0x100a: 0x4091, 0x100b: 0x40e1,\n\t0x100c: 0x4131, 0x100d: 0x4199, 0x100e: 0x4201, 0x100f: 0x4251, 0x1010: 0x42a1, 0x1011: 0x42d9,\n\t0x1012: 0x4329, 0x1013: 0x4391, 0x1014: 0x43f9, 0x1015: 0x4431, 0x1016: 0x44b1, 0x1017: 0x4549,\n\t0x1018: 0x45c9, 0x1019: 0x4619, 0x101a: 0x4699, 0x101b: 0x4719, 0x101c: 0x4781, 0x101d: 0x47d1,\n\t0x101e: 0x4821, 0x101f: 0x4871, 0x1020: 0x48d9, 0x1021: 0x4959, 0x1022: 0x49c1, 0x1023: 0x4a11,\n\t0x1024: 0x4a61, 0x1025: 0x4ab1, 0x1026: 0x4ae9, 0x1027: 0x4b21, 0x1028: 0x4b59, 0x1029: 0x4b91,\n\t0x102a: 0x4be1, 0x102b: 0x4c31, 0x102c: 0x4cb1, 0x102d: 0x4d01, 0x102e: 0x4d69, 0x102f: 0x4de9,\n\t0x1030: 0x4e39, 0x1031: 0x4e71, 0x1032: 0x4ea9, 0x1033: 0x4f29, 0x1034: 0x4f91, 0x1035: 0x5011,\n\t0x1036: 0x5061, 0x1037: 0x50e1, 0x1038: 0x5119, 0x1039: 0x5169, 0x103a: 0x51b9, 0x103b: 0x5209,\n\t0x103c: 0x5259, 0x103d: 0x52a9, 0x103e: 0x5311, 0x103f: 0x5361,\n\t// Block 0x41, offset 0x1040\n\t0x1040: 0x5399, 0x1041: 0x53e9, 0x1042: 0x5439, 0x1043: 0x5489, 0x1044: 0x54f1, 0x1045: 0x5541,\n\t0x1046: 0x5591, 0x1047: 0x55e1, 0x1048: 0x5661, 0x1049: 0x56c9, 0x104a: 0x5701, 0x104b: 0x5781,\n\t0x104c: 0x57b9, 0x104d: 0x5821, 0x104e: 0x5889, 0x104f: 0x58d9, 0x1050: 0x5929, 0x1051: 0x5979,\n\t0x1052: 0x59e1, 0x1053: 0x5a19, 0x1054: 0x5a69, 0x1055: 0x5ad1, 0x1056: 0x5b09, 0x1057: 0x5b89,\n\t0x1058: 0x5bd9, 0x1059: 0x5c01, 0x105a: 0x5c29, 0x105b: 0x5c51, 0x105c: 0x5c79, 0x105d: 0x5ca1,\n\t0x105e: 0x5cc9, 0x105f: 0x5cf1, 0x1060: 0x5d19, 0x1061: 0x5d41, 0x1062: 0x5d69, 0x1063: 0x5d99,\n\t0x1064: 0x5dc9, 0x1065: 0x5df9, 0x1066: 0x5e29, 0x1067: 0x5e59, 0x1068: 0x5e89, 0x1069: 0x5eb9,\n\t0x106a: 0x5ee9, 0x106b: 0x5f19, 0x106c: 0x5f49, 0x106d: 0x5f79, 0x106e: 0x5fa9, 0x106f: 0x5fd9,\n\t0x1070: 0x6009, 0x1071: 0x402d, 0x1072: 0x6039, 0x1073: 0x6051, 0x1074: 0x404d, 0x1075: 0x6069,\n\t0x1076: 0x6081, 0x1077: 0x6099, 0x1078: 0x406d, 0x1079: 0x406d, 0x107a: 0x60b1, 0x107b: 0x60c9,\n\t0x107c: 0x6101, 0x107d: 0x6139, 0x107e: 0x6171, 0x107f: 0x61a9,\n\t// Block 0x42, offset 0x1080\n\t0x1080: 0x6211, 0x1081: 0x6229, 0x1082: 0x408d, 0x1083: 0x6241, 0x1084: 0x6259, 0x1085: 0x6271,\n\t0x1086: 0x6289, 0x1087: 0x62a1, 0x1088: 0x40ad, 0x1089: 0x62b9, 0x108a: 0x62e1, 0x108b: 0x62f9,\n\t0x108c: 0x40cd, 0x108d: 0x40cd, 0x108e: 0x6311, 0x108f: 0x6329, 0x1090: 0x6341, 0x1091: 0x40ed,\n\t0x1092: 0x410d, 0x1093: 0x412d, 0x1094: 0x414d, 0x1095: 0x416d, 0x1096: 0x6359, 0x1097: 0x6371,\n\t0x1098: 0x6389, 0x1099: 0x63a1, 0x109a: 0x63b9, 0x109b: 0x418d, 0x109c: 0x63d1, 0x109d: 0x63e9,\n\t0x109e: 0x6401, 0x109f: 0x41ad, 0x10a0: 0x41cd, 0x10a1: 0x6419, 0x10a2: 0x41ed, 0x10a3: 0x420d,\n\t0x10a4: 0x422d, 0x10a5: 0x6431, 0x10a6: 0x424d, 0x10a7: 0x6449, 0x10a8: 0x6479, 0x10a9: 0x6211,\n\t0x10aa: 0x426d, 0x10ab: 0x428d, 0x10ac: 0x42ad, 0x10ad: 0x42cd, 0x10ae: 0x64b1, 0x10af: 0x64f1,\n\t0x10b0: 0x6539, 0x10b1: 0x6551, 0x10b2: 0x42ed, 0x10b3: 0x6569, 0x10b4: 0x6581, 0x10b5: 0x6599,\n\t0x10b6: 0x430d, 0x10b7: 0x65b1, 0x10b8: 0x65c9, 0x10b9: 0x65b1, 0x10ba: 0x65e1, 0x10bb: 0x65f9,\n\t0x10bc: 0x432d, 0x10bd: 0x6611, 0x10be: 0x6629, 0x10bf: 0x6611,\n\t// Block 0x43, offset 0x10c0\n\t0x10c0: 0x434d, 0x10c1: 0x436d, 0x10c2: 0x0040, 0x10c3: 0x6641, 0x10c4: 0x6659, 0x10c5: 0x6671,\n\t0x10c6: 0x6689, 0x10c7: 0x0040, 0x10c8: 0x66c1, 0x10c9: 0x66d9, 0x10ca: 0x66f1, 0x10cb: 0x6709,\n\t0x10cc: 0x6721, 0x10cd: 0x6739, 0x10ce: 0x6401, 0x10cf: 0x6751, 0x10d0: 0x6769, 0x10d1: 0x6781,\n\t0x10d2: 0x438d, 0x10d3: 0x6799, 0x10d4: 0x6289, 0x10d5: 0x43ad, 0x10d6: 0x43cd, 0x10d7: 0x67b1,\n\t0x10d8: 0x0040, 0x10d9: 0x43ed, 0x10da: 0x67c9, 0x10db: 0x67e1, 0x10dc: 0x67f9, 0x10dd: 0x6811,\n\t0x10de: 0x6829, 0x10df: 0x6859, 0x10e0: 0x6889, 0x10e1: 0x68b1, 0x10e2: 0x68d9, 0x10e3: 0x6901,\n\t0x10e4: 0x6929, 0x10e5: 0x6951, 0x10e6: 0x6979, 0x10e7: 0x69a1, 0x10e8: 0x69c9, 0x10e9: 0x69f1,\n\t0x10ea: 0x6a21, 0x10eb: 0x6a51, 0x10ec: 0x6a81, 0x10ed: 0x6ab1, 0x10ee: 0x6ae1, 0x10ef: 0x6b11,\n\t0x10f0: 0x6b41, 0x10f1: 0x6b71, 0x10f2: 0x6ba1, 0x10f3: 0x6bd1, 0x10f4: 0x6c01, 0x10f5: 0x6c31,\n\t0x10f6: 0x6c61, 0x10f7: 0x6c91, 0x10f8: 0x6cc1, 0x10f9: 0x6cf1, 0x10fa: 0x6d21, 0x10fb: 0x6d51,\n\t0x10fc: 0x6d81, 0x10fd: 0x6db1, 0x10fe: 0x6de1, 0x10ff: 0x440d,\n\t// Block 0x44, offset 0x1100\n\t0x1100: 0xe00d, 0x1101: 0x0008, 0x1102: 0xe00d, 0x1103: 0x0008, 0x1104: 0xe00d, 0x1105: 0x0008,\n\t0x1106: 0xe00d, 0x1107: 0x0008, 0x1108: 0xe00d, 0x1109: 0x0008, 0x110a: 0xe00d, 0x110b: 0x0008,\n\t0x110c: 0xe00d, 0x110d: 0x0008, 0x110e: 0xe00d, 0x110f: 0x0008, 0x1110: 0xe00d, 0x1111: 0x0008,\n\t0x1112: 0xe00d, 0x1113: 0x0008, 0x1114: 0xe00d, 0x1115: 0x0008, 0x1116: 0xe00d, 0x1117: 0x0008,\n\t0x1118: 0xe00d, 0x1119: 0x0008, 0x111a: 0xe00d, 0x111b: 0x0008, 0x111c: 0xe00d, 0x111d: 0x0008,\n\t0x111e: 0xe00d, 0x111f: 0x0008, 0x1120: 0xe00d, 0x1121: 0x0008, 0x1122: 0xe00d, 0x1123: 0x0008,\n\t0x1124: 0xe00d, 0x1125: 0x0008, 0x1126: 0xe00d, 0x1127: 0x0008, 0x1128: 0xe00d, 0x1129: 0x0008,\n\t0x112a: 0xe00d, 0x112b: 0x0008, 0x112c: 0xe00d, 0x112d: 0x0008, 0x112e: 0x0008, 0x112f: 0x3308,\n\t0x1130: 0x3318, 0x1131: 0x3318, 0x1132: 0x3318, 0x1133: 0x0018, 0x1134: 0x3308, 0x1135: 0x3308,\n\t0x1136: 0x3308, 0x1137: 0x3308, 0x1138: 0x3308, 0x1139: 0x3308, 0x113a: 0x3308, 0x113b: 0x3308,\n\t0x113c: 0x3308, 0x113d: 0x3308, 0x113e: 0x0018, 0x113f: 0x0008,\n\t// Block 0x45, offset 0x1140\n\t0x1140: 0xe00d, 0x1141: 0x0008, 0x1142: 0xe00d, 0x1143: 0x0008, 0x1144: 0xe00d, 0x1145: 0x0008,\n\t0x1146: 0xe00d, 0x1147: 0x0008, 0x1148: 0xe00d, 0x1149: 0x0008, 0x114a: 0xe00d, 0x114b: 0x0008,\n\t0x114c: 0xe00d, 0x114d: 0x0008, 0x114e: 0xe00d, 0x114f: 0x0008, 0x1150: 0xe00d, 0x1151: 0x0008,\n\t0x1152: 0xe00d, 0x1153: 0x0008, 0x1154: 0xe00d, 0x1155: 0x0008, 0x1156: 0xe00d, 0x1157: 0x0008,\n\t0x1158: 0xe00d, 0x1159: 0x0008, 0x115a: 0xe00d, 0x115b: 0x0008, 0x115c: 0x0ea1, 0x115d: 0x6e11,\n\t0x115e: 0x3308, 0x115f: 0x3308, 0x1160: 0x0008, 0x1161: 0x0008, 0x1162: 0x0008, 0x1163: 0x0008,\n\t0x1164: 0x0008, 0x1165: 0x0008, 0x1166: 0x0008, 0x1167: 0x0008, 0x1168: 0x0008, 0x1169: 0x0008,\n\t0x116a: 0x0008, 0x116b: 0x0008, 0x116c: 0x0008, 0x116d: 0x0008, 0x116e: 0x0008, 0x116f: 0x0008,\n\t0x1170: 0x0008, 0x1171: 0x0008, 0x1172: 0x0008, 0x1173: 0x0008, 0x1174: 0x0008, 0x1175: 0x0008,\n\t0x1176: 0x0008, 0x1177: 0x0008, 0x1178: 0x0008, 0x1179: 0x0008, 0x117a: 0x0008, 0x117b: 0x0008,\n\t0x117c: 0x0008, 0x117d: 0x0008, 0x117e: 0x0008, 0x117f: 0x0008,\n\t// Block 0x46, offset 0x1180\n\t0x1180: 0x0018, 0x1181: 0x0018, 0x1182: 0x0018, 0x1183: 0x0018, 0x1184: 0x0018, 0x1185: 0x0018,\n\t0x1186: 0x0018, 0x1187: 0x0018, 0x1188: 0x0018, 0x1189: 0x0018, 0x118a: 0x0018, 0x118b: 0x0018,\n\t0x118c: 0x0018, 0x118d: 0x0018, 0x118e: 0x0018, 0x118f: 0x0018, 0x1190: 0x0018, 0x1191: 0x0018,\n\t0x1192: 0x0018, 0x1193: 0x0018, 0x1194: 0x0018, 0x1195: 0x0018, 0x1196: 0x0018, 0x1197: 0x0008,\n\t0x1198: 0x0008, 0x1199: 0x0008, 0x119a: 0x0008, 0x119b: 0x0008, 0x119c: 0x0008, 0x119d: 0x0008,\n\t0x119e: 0x0008, 0x119f: 0x0008, 0x11a0: 0x0018, 0x11a1: 0x0018, 0x11a2: 0xe00d, 0x11a3: 0x0008,\n\t0x11a4: 0xe00d, 0x11a5: 0x0008, 0x11a6: 0xe00d, 0x11a7: 0x0008, 0x11a8: 0xe00d, 0x11a9: 0x0008,\n\t0x11aa: 0xe00d, 0x11ab: 0x0008, 0x11ac: 0xe00d, 0x11ad: 0x0008, 0x11ae: 0xe00d, 0x11af: 0x0008,\n\t0x11b0: 0x0008, 0x11b1: 0x0008, 0x11b2: 0xe00d, 0x11b3: 0x0008, 0x11b4: 0xe00d, 0x11b5: 0x0008,\n\t0x11b6: 0xe00d, 0x11b7: 0x0008, 0x11b8: 0xe00d, 0x11b9: 0x0008, 0x11ba: 0xe00d, 0x11bb: 0x0008,\n\t0x11bc: 0xe00d, 0x11bd: 0x0008, 0x11be: 0xe00d, 0x11bf: 0x0008,\n\t// Block 0x47, offset 0x11c0\n\t0x11c0: 0xe00d, 0x11c1: 0x0008, 0x11c2: 0xe00d, 0x11c3: 0x0008, 0x11c4: 0xe00d, 0x11c5: 0x0008,\n\t0x11c6: 0xe00d, 0x11c7: 0x0008, 0x11c8: 0xe00d, 0x11c9: 0x0008, 0x11ca: 0xe00d, 0x11cb: 0x0008,\n\t0x11cc: 0xe00d, 0x11cd: 0x0008, 0x11ce: 0xe00d, 0x11cf: 0x0008, 0x11d0: 0xe00d, 0x11d1: 0x0008,\n\t0x11d2: 0xe00d, 0x11d3: 0x0008, 0x11d4: 0xe00d, 0x11d5: 0x0008, 0x11d6: 0xe00d, 0x11d7: 0x0008,\n\t0x11d8: 0xe00d, 0x11d9: 0x0008, 0x11da: 0xe00d, 0x11db: 0x0008, 0x11dc: 0xe00d, 0x11dd: 0x0008,\n\t0x11de: 0xe00d, 0x11df: 0x0008, 0x11e0: 0xe00d, 0x11e1: 0x0008, 0x11e2: 0xe00d, 0x11e3: 0x0008,\n\t0x11e4: 0xe00d, 0x11e5: 0x0008, 0x11e6: 0xe00d, 0x11e7: 0x0008, 0x11e8: 0xe00d, 0x11e9: 0x0008,\n\t0x11ea: 0xe00d, 0x11eb: 0x0008, 0x11ec: 0xe00d, 0x11ed: 0x0008, 0x11ee: 0xe00d, 0x11ef: 0x0008,\n\t0x11f0: 0xe0fd, 0x11f1: 0x0008, 0x11f2: 0x0008, 0x11f3: 0x0008, 0x11f4: 0x0008, 0x11f5: 0x0008,\n\t0x11f6: 0x0008, 0x11f7: 0x0008, 0x11f8: 0x0008, 0x11f9: 0xe01d, 0x11fa: 0x0008, 0x11fb: 0xe03d,\n\t0x11fc: 0x0008, 0x11fd: 0x442d, 0x11fe: 0xe00d, 0x11ff: 0x0008,\n\t// Block 0x48, offset 0x1200\n\t0x1200: 0xe00d, 0x1201: 0x0008, 0x1202: 0xe00d, 0x1203: 0x0008, 0x1204: 0xe00d, 0x1205: 0x0008,\n\t0x1206: 0xe00d, 0x1207: 0x0008, 0x1208: 0x0008, 0x1209: 0x0018, 0x120a: 0x0018, 0x120b: 0xe03d,\n\t0x120c: 0x0008, 0x120d: 0x11d9, 0x120e: 0x0008, 0x120f: 0x0008, 0x1210: 0xe00d, 0x1211: 0x0008,\n\t0x1212: 0xe00d, 0x1213: 0x0008, 0x1214: 0x0008, 0x1215: 0x0008, 0x1216: 0xe00d, 0x1217: 0x0008,\n\t0x1218: 0xe00d, 0x1219: 0x0008, 0x121a: 0xe00d, 0x121b: 0x0008, 0x121c: 0xe00d, 0x121d: 0x0008,\n\t0x121e: 0xe00d, 0x121f: 0x0008, 0x1220: 0xe00d, 0x1221: 0x0008, 0x1222: 0xe00d, 0x1223: 0x0008,\n\t0x1224: 0xe00d, 0x1225: 0x0008, 0x1226: 0xe00d, 0x1227: 0x0008, 0x1228: 0xe00d, 0x1229: 0x0008,\n\t0x122a: 0x6e29, 0x122b: 0x1029, 0x122c: 0x11c1, 0x122d: 0x6e41, 0x122e: 0x1221, 0x122f: 0x0040,\n\t0x1230: 0x6e59, 0x1231: 0x6e71, 0x1232: 0x1239, 0x1233: 0x444d, 0x1234: 0xe00d, 0x1235: 0x0008,\n\t0x1236: 0xe00d, 0x1237: 0x0008, 0x1238: 0x0040, 0x1239: 0x0040, 0x123a: 0x0040, 0x123b: 0x0040,\n\t0x123c: 0x0040, 0x123d: 0x0040, 0x123e: 0x0040, 0x123f: 0x0040,\n\t// Block 0x49, offset 0x1240\n\t0x1240: 0x64d5, 0x1241: 0x64f5, 0x1242: 0x6515, 0x1243: 0x6535, 0x1244: 0x6555, 0x1245: 0x6575,\n\t0x1246: 0x6595, 0x1247: 0x65b5, 0x1248: 0x65d5, 0x1249: 0x65f5, 0x124a: 0x6615, 0x124b: 0x6635,\n\t0x124c: 0x6655, 0x124d: 0x6675, 0x124e: 0x0008, 0x124f: 0x0008, 0x1250: 0x6695, 0x1251: 0x0008,\n\t0x1252: 0x66b5, 0x1253: 0x0008, 0x1254: 0x0008, 0x1255: 0x66d5, 0x1256: 0x66f5, 0x1257: 0x6715,\n\t0x1258: 0x6735, 0x1259: 0x6755, 0x125a: 0x6775, 0x125b: 0x6795, 0x125c: 0x67b5, 0x125d: 0x67d5,\n\t0x125e: 0x67f5, 0x125f: 0x0008, 0x1260: 0x6815, 0x1261: 0x0008, 0x1262: 0x6835, 0x1263: 0x0008,\n\t0x1264: 0x0008, 0x1265: 0x6855, 0x1266: 0x6875, 0x1267: 0x0008, 0x1268: 0x0008, 0x1269: 0x0008,\n\t0x126a: 0x6895, 0x126b: 0x68b5, 0x126c: 0x68d5, 0x126d: 0x68f5, 0x126e: 0x6915, 0x126f: 0x6935,\n\t0x1270: 0x6955, 0x1271: 0x6975, 0x1272: 0x6995, 0x1273: 0x69b5, 0x1274: 0x69d5, 0x1275: 0x69f5,\n\t0x1276: 0x6a15, 0x1277: 0x6a35, 0x1278: 0x6a55, 0x1279: 0x6a75, 0x127a: 0x6a95, 0x127b: 0x6ab5,\n\t0x127c: 0x6ad5, 0x127d: 0x6af5, 0x127e: 0x6b15, 0x127f: 0x6b35,\n\t// Block 0x4a, offset 0x1280\n\t0x1280: 0x7a95, 0x1281: 0x7ab5, 0x1282: 0x7ad5, 0x1283: 0x7af5, 0x1284: 0x7b15, 0x1285: 0x7b35,\n\t0x1286: 0x7b55, 0x1287: 0x7b75, 0x1288: 0x7b95, 0x1289: 0x7bb5, 0x128a: 0x7bd5, 0x128b: 0x7bf5,\n\t0x128c: 0x7c15, 0x128d: 0x7c35, 0x128e: 0x7c55, 0x128f: 0x6ec9, 0x1290: 0x6ef1, 0x1291: 0x6f19,\n\t0x1292: 0x7c75, 0x1293: 0x7c95, 0x1294: 0x7cb5, 0x1295: 0x6f41, 0x1296: 0x6f69, 0x1297: 0x6f91,\n\t0x1298: 0x7cd5, 0x1299: 0x7cf5, 0x129a: 0x0040, 0x129b: 0x0040, 0x129c: 0x0040, 0x129d: 0x0040,\n\t0x129e: 0x0040, 0x129f: 0x0040, 0x12a0: 0x0040, 0x12a1: 0x0040, 0x12a2: 0x0040, 0x12a3: 0x0040,\n\t0x12a4: 0x0040, 0x12a5: 0x0040, 0x12a6: 0x0040, 0x12a7: 0x0040, 0x12a8: 0x0040, 0x12a9: 0x0040,\n\t0x12aa: 0x0040, 0x12ab: 0x0040, 0x12ac: 0x0040, 0x12ad: 0x0040, 0x12ae: 0x0040, 0x12af: 0x0040,\n\t0x12b0: 0x0040, 0x12b1: 0x0040, 0x12b2: 0x0040, 0x12b3: 0x0040, 0x12b4: 0x0040, 0x12b5: 0x0040,\n\t0x12b6: 0x0040, 0x12b7: 0x0040, 0x12b8: 0x0040, 0x12b9: 0x0040, 0x12ba: 0x0040, 0x12bb: 0x0040,\n\t0x12bc: 0x0040, 0x12bd: 0x0040, 0x12be: 0x0040, 0x12bf: 0x0040,\n\t// Block 0x4b, offset 0x12c0\n\t0x12c0: 0x6fb9, 0x12c1: 0x6fd1, 0x12c2: 0x6fe9, 0x12c3: 0x7d15, 0x12c4: 0x7d35, 0x12c5: 0x7001,\n\t0x12c6: 0x7001, 0x12c7: 0x0040, 0x12c8: 0x0040, 0x12c9: 0x0040, 0x12ca: 0x0040, 0x12cb: 0x0040,\n\t0x12cc: 0x0040, 0x12cd: 0x0040, 0x12ce: 0x0040, 0x12cf: 0x0040, 0x12d0: 0x0040, 0x12d1: 0x0040,\n\t0x12d2: 0x0040, 0x12d3: 0x7019, 0x12d4: 0x7041, 0x12d5: 0x7069, 0x12d6: 0x7091, 0x12d7: 0x70b9,\n\t0x12d8: 0x0040, 0x12d9: 0x0040, 0x12da: 0x0040, 0x12db: 0x0040, 0x12dc: 0x0040, 0x12dd: 0x70e1,\n\t0x12de: 0x3308, 0x12df: 0x7109, 0x12e0: 0x7131, 0x12e1: 0x20a9, 0x12e2: 0x20f1, 0x12e3: 0x7149,\n\t0x12e4: 0x7161, 0x12e5: 0x7179, 0x12e6: 0x7191, 0x12e7: 0x71a9, 0x12e8: 0x71c1, 0x12e9: 0x1fb2,\n\t0x12ea: 0x71d9, 0x12eb: 0x7201, 0x12ec: 0x7229, 0x12ed: 0x7261, 0x12ee: 0x7299, 0x12ef: 0x72c1,\n\t0x12f0: 0x72e9, 0x12f1: 0x7311, 0x12f2: 0x7339, 0x12f3: 0x7361, 0x12f4: 0x7389, 0x12f5: 0x73b1,\n\t0x12f6: 0x73d9, 0x12f7: 0x0040, 0x12f8: 0x7401, 0x12f9: 0x7429, 0x12fa: 0x7451, 0x12fb: 0x7479,\n\t0x12fc: 0x74a1, 0x12fd: 0x0040, 0x12fe: 0x74c9, 0x12ff: 0x0040,\n\t// Block 0x4c, offset 0x1300\n\t0x1300: 0x74f1, 0x1301: 0x7519, 0x1302: 0x0040, 0x1303: 0x7541, 0x1304: 0x7569, 0x1305: 0x0040,\n\t0x1306: 0x7591, 0x1307: 0x75b9, 0x1308: 0x75e1, 0x1309: 0x7609, 0x130a: 0x7631, 0x130b: 0x7659,\n\t0x130c: 0x7681, 0x130d: 0x76a9, 0x130e: 0x76d1, 0x130f: 0x76f9, 0x1310: 0x7721, 0x1311: 0x7721,\n\t0x1312: 0x7739, 0x1313: 0x7739, 0x1314: 0x7739, 0x1315: 0x7739, 0x1316: 0x7751, 0x1317: 0x7751,\n\t0x1318: 0x7751, 0x1319: 0x7751, 0x131a: 0x7769, 0x131b: 0x7769, 0x131c: 0x7769, 0x131d: 0x7769,\n\t0x131e: 0x7781, 0x131f: 0x7781, 0x1320: 0x7781, 0x1321: 0x7781, 0x1322: 0x7799, 0x1323: 0x7799,\n\t0x1324: 0x7799, 0x1325: 0x7799, 0x1326: 0x77b1, 0x1327: 0x77b1, 0x1328: 0x77b1, 0x1329: 0x77b1,\n\t0x132a: 0x77c9, 0x132b: 0x77c9, 0x132c: 0x77c9, 0x132d: 0x77c9, 0x132e: 0x77e1, 0x132f: 0x77e1,\n\t0x1330: 0x77e1, 0x1331: 0x77e1, 0x1332: 0x77f9, 0x1333: 0x77f9, 0x1334: 0x77f9, 0x1335: 0x77f9,\n\t0x1336: 0x7811, 0x1337: 0x7811, 0x1338: 0x7811, 0x1339: 0x7811, 0x133a: 0x7829, 0x133b: 0x7829,\n\t0x133c: 0x7829, 0x133d: 0x7829, 0x133e: 0x7841, 0x133f: 0x7841,\n\t// Block 0x4d, offset 0x1340\n\t0x1340: 0x7841, 0x1341: 0x7841, 0x1342: 0x7859, 0x1343: 0x7859, 0x1344: 0x7871, 0x1345: 0x7871,\n\t0x1346: 0x7889, 0x1347: 0x7889, 0x1348: 0x78a1, 0x1349: 0x78a1, 0x134a: 0x78b9, 0x134b: 0x78b9,\n\t0x134c: 0x78d1, 0x134d: 0x78d1, 0x134e: 0x78e9, 0x134f: 0x78e9, 0x1350: 0x78e9, 0x1351: 0x78e9,\n\t0x1352: 0x7901, 0x1353: 0x7901, 0x1354: 0x7901, 0x1355: 0x7901, 0x1356: 0x7919, 0x1357: 0x7919,\n\t0x1358: 0x7919, 0x1359: 0x7919, 0x135a: 0x7931, 0x135b: 0x7931, 0x135c: 0x7931, 0x135d: 0x7931,\n\t0x135e: 0x7949, 0x135f: 0x7949, 0x1360: 0x7961, 0x1361: 0x7961, 0x1362: 0x7961, 0x1363: 0x7961,\n\t0x1364: 0x7979, 0x1365: 0x7979, 0x1366: 0x7991, 0x1367: 0x7991, 0x1368: 0x7991, 0x1369: 0x7991,\n\t0x136a: 0x79a9, 0x136b: 0x79a9, 0x136c: 0x79a9, 0x136d: 0x79a9, 0x136e: 0x79c1, 0x136f: 0x79c1,\n\t0x1370: 0x79d9, 0x1371: 0x79d9, 0x1372: 0x0818, 0x1373: 0x0818, 0x1374: 0x0818, 0x1375: 0x0818,\n\t0x1376: 0x0818, 0x1377: 0x0818, 0x1378: 0x0818, 0x1379: 0x0818, 0x137a: 0x0818, 0x137b: 0x0818,\n\t0x137c: 0x0818, 0x137d: 0x0818, 0x137e: 0x0818, 0x137f: 0x0818,\n\t// Block 0x4e, offset 0x1380\n\t0x1380: 0x0818, 0x1381: 0x0818, 0x1382: 0x0040, 0x1383: 0x0040, 0x1384: 0x0040, 0x1385: 0x0040,\n\t0x1386: 0x0040, 0x1387: 0x0040, 0x1388: 0x0040, 0x1389: 0x0040, 0x138a: 0x0040, 0x138b: 0x0040,\n\t0x138c: 0x0040, 0x138d: 0x0040, 0x138e: 0x0040, 0x138f: 0x0040, 0x1390: 0x0040, 0x1391: 0x0040,\n\t0x1392: 0x0040, 0x1393: 0x79f1, 0x1394: 0x79f1, 0x1395: 0x79f1, 0x1396: 0x79f1, 0x1397: 0x7a09,\n\t0x1398: 0x7a09, 0x1399: 0x7a21, 0x139a: 0x7a21, 0x139b: 0x7a39, 0x139c: 0x7a39, 0x139d: 0x0479,\n\t0x139e: 0x7a51, 0x139f: 0x7a51, 0x13a0: 0x7a69, 0x13a1: 0x7a69, 0x13a2: 0x7a81, 0x13a3: 0x7a81,\n\t0x13a4: 0x7a99, 0x13a5: 0x7a99, 0x13a6: 0x7a99, 0x13a7: 0x7a99, 0x13a8: 0x7ab1, 0x13a9: 0x7ab1,\n\t0x13aa: 0x7ac9, 0x13ab: 0x7ac9, 0x13ac: 0x7af1, 0x13ad: 0x7af1, 0x13ae: 0x7b19, 0x13af: 0x7b19,\n\t0x13b0: 0x7b41, 0x13b1: 0x7b41, 0x13b2: 0x7b69, 0x13b3: 0x7b69, 0x13b4: 0x7b91, 0x13b5: 0x7b91,\n\t0x13b6: 0x7bb9, 0x13b7: 0x7bb9, 0x13b8: 0x7bb9, 0x13b9: 0x7be1, 0x13ba: 0x7be1, 0x13bb: 0x7be1,\n\t0x13bc: 0x7c09, 0x13bd: 0x7c09, 0x13be: 0x7c09, 0x13bf: 0x7c09,\n\t// Block 0x4f, offset 0x13c0\n\t0x13c0: 0x85f9, 0x13c1: 0x8621, 0x13c2: 0x8649, 0x13c3: 0x8671, 0x13c4: 0x8699, 0x13c5: 0x86c1,\n\t0x13c6: 0x86e9, 0x13c7: 0x8711, 0x13c8: 0x8739, 0x13c9: 0x8761, 0x13ca: 0x8789, 0x13cb: 0x87b1,\n\t0x13cc: 0x87d9, 0x13cd: 0x8801, 0x13ce: 0x8829, 0x13cf: 0x8851, 0x13d0: 0x8879, 0x13d1: 0x88a1,\n\t0x13d2: 0x88c9, 0x13d3: 0x88f1, 0x13d4: 0x8919, 0x13d5: 0x8941, 0x13d6: 0x8969, 0x13d7: 0x8991,\n\t0x13d8: 0x89b9, 0x13d9: 0x89e1, 0x13da: 0x8a09, 0x13db: 0x8a31, 0x13dc: 0x8a59, 0x13dd: 0x8a81,\n\t0x13de: 0x8aaa, 0x13df: 0x8ada, 0x13e0: 0x8b0a, 0x13e1: 0x8b3a, 0x13e2: 0x8b6a, 0x13e3: 0x8b9a,\n\t0x13e4: 0x8bc9, 0x13e5: 0x8bf1, 0x13e6: 0x7c71, 0x13e7: 0x8c19, 0x13e8: 0x7be1, 0x13e9: 0x7c99,\n\t0x13ea: 0x8c41, 0x13eb: 0x8c69, 0x13ec: 0x7d39, 0x13ed: 0x8c91, 0x13ee: 0x7d61, 0x13ef: 0x7d89,\n\t0x13f0: 0x8cb9, 0x13f1: 0x8ce1, 0x13f2: 0x7e29, 0x13f3: 0x8d09, 0x13f4: 0x7e51, 0x13f5: 0x7e79,\n\t0x13f6: 0x8d31, 0x13f7: 0x8d59, 0x13f8: 0x7ec9, 0x13f9: 0x8d81, 0x13fa: 0x7ef1, 0x13fb: 0x7f19,\n\t0x13fc: 0x83a1, 0x13fd: 0x83c9, 0x13fe: 0x8441, 0x13ff: 0x8469,\n\t// Block 0x50, offset 0x1400\n\t0x1400: 0x8491, 0x1401: 0x8531, 0x1402: 0x8559, 0x1403: 0x8581, 0x1404: 0x85a9, 0x1405: 0x8649,\n\t0x1406: 0x8671, 0x1407: 0x8699, 0x1408: 0x8da9, 0x1409: 0x8739, 0x140a: 0x8dd1, 0x140b: 0x8df9,\n\t0x140c: 0x8829, 0x140d: 0x8e21, 0x140e: 0x8851, 0x140f: 0x8879, 0x1410: 0x8a81, 0x1411: 0x8e49,\n\t0x1412: 0x8e71, 0x1413: 0x89b9, 0x1414: 0x8e99, 0x1415: 0x89e1, 0x1416: 0x8a09, 0x1417: 0x7c21,\n\t0x1418: 0x7c49, 0x1419: 0x8ec1, 0x141a: 0x7c71, 0x141b: 0x8ee9, 0x141c: 0x7cc1, 0x141d: 0x7ce9,\n\t0x141e: 0x7d11, 0x141f: 0x7d39, 0x1420: 0x8f11, 0x1421: 0x7db1, 0x1422: 0x7dd9, 0x1423: 0x7e01,\n\t0x1424: 0x7e29, 0x1425: 0x8f39, 0x1426: 0x7ec9, 0x1427: 0x7f41, 0x1428: 0x7f69, 0x1429: 0x7f91,\n\t0x142a: 0x7fb9, 0x142b: 0x7fe1, 0x142c: 0x8031, 0x142d: 0x8059, 0x142e: 0x8081, 0x142f: 0x80a9,\n\t0x1430: 0x80d1, 0x1431: 0x80f9, 0x1432: 0x8f61, 0x1433: 0x8121, 0x1434: 0x8149, 0x1435: 0x8171,\n\t0x1436: 0x8199, 0x1437: 0x81c1, 0x1438: 0x81e9, 0x1439: 0x8239, 0x143a: 0x8261, 0x143b: 0x8289,\n\t0x143c: 0x82b1, 0x143d: 0x82d9, 0x143e: 0x8301, 0x143f: 0x8329,\n\t// Block 0x51, offset 0x1440\n\t0x1440: 0x8351, 0x1441: 0x8379, 0x1442: 0x83f1, 0x1443: 0x8419, 0x1444: 0x84b9, 0x1445: 0x84e1,\n\t0x1446: 0x8509, 0x1447: 0x8531, 0x1448: 0x8559, 0x1449: 0x85d1, 0x144a: 0x85f9, 0x144b: 0x8621,\n\t0x144c: 0x8649, 0x144d: 0x8f89, 0x144e: 0x86c1, 0x144f: 0x86e9, 0x1450: 0x8711, 0x1451: 0x8739,\n\t0x1452: 0x87b1, 0x1453: 0x87d9, 0x1454: 0x8801, 0x1455: 0x8829, 0x1456: 0x8fb1, 0x1457: 0x88a1,\n\t0x1458: 0x88c9, 0x1459: 0x8fd9, 0x145a: 0x8941, 0x145b: 0x8969, 0x145c: 0x8991, 0x145d: 0x89b9,\n\t0x145e: 0x9001, 0x145f: 0x7c71, 0x1460: 0x8ee9, 0x1461: 0x7d39, 0x1462: 0x8f11, 0x1463: 0x7e29,\n\t0x1464: 0x8f39, 0x1465: 0x7ec9, 0x1466: 0x9029, 0x1467: 0x80d1, 0x1468: 0x9051, 0x1469: 0x9079,\n\t0x146a: 0x90a1, 0x146b: 0x8531, 0x146c: 0x8559, 0x146d: 0x8649, 0x146e: 0x8829, 0x146f: 0x8fb1,\n\t0x1470: 0x89b9, 0x1471: 0x9001, 0x1472: 0x90c9, 0x1473: 0x9101, 0x1474: 0x9139, 0x1475: 0x9171,\n\t0x1476: 0x9199, 0x1477: 0x91c1, 0x1478: 0x91e9, 0x1479: 0x9211, 0x147a: 0x9239, 0x147b: 0x9261,\n\t0x147c: 0x9289, 0x147d: 0x92b1, 0x147e: 0x92d9, 0x147f: 0x9301,\n\t// Block 0x52, offset 0x1480\n\t0x1480: 0x9329, 0x1481: 0x9351, 0x1482: 0x9379, 0x1483: 0x93a1, 0x1484: 0x93c9, 0x1485: 0x93f1,\n\t0x1486: 0x9419, 0x1487: 0x9441, 0x1488: 0x9469, 0x1489: 0x9491, 0x148a: 0x94b9, 0x148b: 0x94e1,\n\t0x148c: 0x9079, 0x148d: 0x9509, 0x148e: 0x9531, 0x148f: 0x9559, 0x1490: 0x9581, 0x1491: 0x9171,\n\t0x1492: 0x9199, 0x1493: 0x91c1, 0x1494: 0x91e9, 0x1495: 0x9211, 0x1496: 0x9239, 0x1497: 0x9261,\n\t0x1498: 0x9289, 0x1499: 0x92b1, 0x149a: 0x92d9, 0x149b: 0x9301, 0x149c: 0x9329, 0x149d: 0x9351,\n\t0x149e: 0x9379, 0x149f: 0x93a1, 0x14a0: 0x93c9, 0x14a1: 0x93f1, 0x14a2: 0x9419, 0x14a3: 0x9441,\n\t0x14a4: 0x9469, 0x14a5: 0x9491, 0x14a6: 0x94b9, 0x14a7: 0x94e1, 0x14a8: 0x9079, 0x14a9: 0x9509,\n\t0x14aa: 0x9531, 0x14ab: 0x9559, 0x14ac: 0x9581, 0x14ad: 0x9491, 0x14ae: 0x94b9, 0x14af: 0x94e1,\n\t0x14b0: 0x9079, 0x14b1: 0x9051, 0x14b2: 0x90a1, 0x14b3: 0x8211, 0x14b4: 0x8059, 0x14b5: 0x8081,\n\t0x14b6: 0x80a9, 0x14b7: 0x9491, 0x14b8: 0x94b9, 0x14b9: 0x94e1, 0x14ba: 0x8211, 0x14bb: 0x8239,\n\t0x14bc: 0x95a9, 0x14bd: 0x95a9, 0x14be: 0x0018, 0x14bf: 0x0018,\n\t// Block 0x53, offset 0x14c0\n\t0x14c0: 0x0040, 0x14c1: 0x0040, 0x14c2: 0x0040, 0x14c3: 0x0040, 0x14c4: 0x0040, 0x14c5: 0x0040,\n\t0x14c6: 0x0040, 0x14c7: 0x0040, 0x14c8: 0x0040, 0x14c9: 0x0040, 0x14ca: 0x0040, 0x14cb: 0x0040,\n\t0x14cc: 0x0040, 0x14cd: 0x0040, 0x14ce: 0x0040, 0x14cf: 0x0040, 0x14d0: 0x95d1, 0x14d1: 0x9609,\n\t0x14d2: 0x9609, 0x14d3: 0x9641, 0x14d4: 0x9679, 0x14d5: 0x96b1, 0x14d6: 0x96e9, 0x14d7: 0x9721,\n\t0x14d8: 0x9759, 0x14d9: 0x9759, 0x14da: 0x9791, 0x14db: 0x97c9, 0x14dc: 0x9801, 0x14dd: 0x9839,\n\t0x14de: 0x9871, 0x14df: 0x98a9, 0x14e0: 0x98a9, 0x14e1: 0x98e1, 0x14e2: 0x9919, 0x14e3: 0x9919,\n\t0x14e4: 0x9951, 0x14e5: 0x9951, 0x14e6: 0x9989, 0x14e7: 0x99c1, 0x14e8: 0x99c1, 0x14e9: 0x99f9,\n\t0x14ea: 0x9a31, 0x14eb: 0x9a31, 0x14ec: 0x9a69, 0x14ed: 0x9a69, 0x14ee: 0x9aa1, 0x14ef: 0x9ad9,\n\t0x14f0: 0x9ad9, 0x14f1: 0x9b11, 0x14f2: 0x9b11, 0x14f3: 0x9b49, 0x14f4: 0x9b81, 0x14f5: 0x9bb9,\n\t0x14f6: 0x9bf1, 0x14f7: 0x9bf1, 0x14f8: 0x9c29, 0x14f9: 0x9c61, 0x14fa: 0x9c99, 0x14fb: 0x9cd1,\n\t0x14fc: 0x9d09, 0x14fd: 0x9d09, 0x14fe: 0x9d41, 0x14ff: 0x9d79,\n\t// Block 0x54, offset 0x1500\n\t0x1500: 0xa949, 0x1501: 0xa981, 0x1502: 0xa9b9, 0x1503: 0xa8a1, 0x1504: 0x9bb9, 0x1505: 0x9989,\n\t0x1506: 0xa9f1, 0x1507: 0xaa29, 0x1508: 0x0040, 0x1509: 0x0040, 0x150a: 0x0040, 0x150b: 0x0040,\n\t0x150c: 0x0040, 0x150d: 0x0040, 0x150e: 0x0040, 0x150f: 0x0040, 0x1510: 0x0040, 0x1511: 0x0040,\n\t0x1512: 0x0040, 0x1513: 0x0040, 0x1514: 0x0040, 0x1515: 0x0040, 0x1516: 0x0040, 0x1517: 0x0040,\n\t0x1518: 0x0040, 0x1519: 0x0040, 0x151a: 0x0040, 0x151b: 0x0040, 0x151c: 0x0040, 0x151d: 0x0040,\n\t0x151e: 0x0040, 0x151f: 0x0040, 0x1520: 0x0040, 0x1521: 0x0040, 0x1522: 0x0040, 0x1523: 0x0040,\n\t0x1524: 0x0040, 0x1525: 0x0040, 0x1526: 0x0040, 0x1527: 0x0040, 0x1528: 0x0040, 0x1529: 0x0040,\n\t0x152a: 0x0040, 0x152b: 0x0040, 0x152c: 0x0040, 0x152d: 0x0040, 0x152e: 0x0040, 0x152f: 0x0040,\n\t0x1530: 0xaa61, 0x1531: 0xaa99, 0x1532: 0xaad1, 0x1533: 0xab19, 0x1534: 0xab61, 0x1535: 0xaba9,\n\t0x1536: 0xabf1, 0x1537: 0xac39, 0x1538: 0xac81, 0x1539: 0xacc9, 0x153a: 0xad02, 0x153b: 0xae12,\n\t0x153c: 0xae91, 0x153d: 0x0018, 0x153e: 0x0040, 0x153f: 0x0040,\n\t// Block 0x55, offset 0x1540\n\t0x1540: 0x33c0, 0x1541: 0x33c0, 0x1542: 0x33c0, 0x1543: 0x33c0, 0x1544: 0x33c0, 0x1545: 0x33c0,\n\t0x1546: 0x33c0, 0x1547: 0x33c0, 0x1548: 0x33c0, 0x1549: 0x33c0, 0x154a: 0x33c0, 0x154b: 0x33c0,\n\t0x154c: 0x33c0, 0x154d: 0x33c0, 0x154e: 0x33c0, 0x154f: 0x33c0, 0x1550: 0xaeda, 0x1551: 0x7d55,\n\t0x1552: 0x0040, 0x1553: 0xaeea, 0x1554: 0x03c2, 0x1555: 0xaefa, 0x1556: 0xaf0a, 0x1557: 0x7d75,\n\t0x1558: 0x7d95, 0x1559: 0x0040, 0x155a: 0x0040, 0x155b: 0x0040, 0x155c: 0x0040, 0x155d: 0x0040,\n\t0x155e: 0x0040, 0x155f: 0x0040, 0x1560: 0x3308, 0x1561: 0x3308, 0x1562: 0x3308, 0x1563: 0x3308,\n\t0x1564: 0x3308, 0x1565: 0x3308, 0x1566: 0x3308, 0x1567: 0x3308, 0x1568: 0x3308, 0x1569: 0x3308,\n\t0x156a: 0x3308, 0x156b: 0x3308, 0x156c: 0x3308, 0x156d: 0x3308, 0x156e: 0x3308, 0x156f: 0x3308,\n\t0x1570: 0x0040, 0x1571: 0x7db5, 0x1572: 0x7dd5, 0x1573: 0xaf1a, 0x1574: 0xaf1a, 0x1575: 0x1fd2,\n\t0x1576: 0x1fe2, 0x1577: 0xaf2a, 0x1578: 0xaf3a, 0x1579: 0x7df5, 0x157a: 0x7e15, 0x157b: 0x7e35,\n\t0x157c: 0x7df5, 0x157d: 0x7e55, 0x157e: 0x7e75, 0x157f: 0x7e55,\n\t// Block 0x56, offset 0x1580\n\t0x1580: 0x7e95, 0x1581: 0x7eb5, 0x1582: 0x7ed5, 0x1583: 0x7eb5, 0x1584: 0x7ef5, 0x1585: 0x0018,\n\t0x1586: 0x0018, 0x1587: 0xaf4a, 0x1588: 0xaf5a, 0x1589: 0x7f16, 0x158a: 0x7f36, 0x158b: 0x7f56,\n\t0x158c: 0x7f76, 0x158d: 0xaf1a, 0x158e: 0xaf1a, 0x158f: 0xaf1a, 0x1590: 0xaeda, 0x1591: 0x7f95,\n\t0x1592: 0x0040, 0x1593: 0x0040, 0x1594: 0x03c2, 0x1595: 0xaeea, 0x1596: 0xaf0a, 0x1597: 0xaefa,\n\t0x1598: 0x7fb5, 0x1599: 0x1fd2, 0x159a: 0x1fe2, 0x159b: 0xaf2a, 0x159c: 0xaf3a, 0x159d: 0x7e95,\n\t0x159e: 0x7ef5, 0x159f: 0xaf6a, 0x15a0: 0xaf7a, 0x15a1: 0xaf8a, 0x15a2: 0x1fb2, 0x15a3: 0xaf99,\n\t0x15a4: 0xafaa, 0x15a5: 0xafba, 0x15a6: 0x1fc2, 0x15a7: 0x0040, 0x15a8: 0xafca, 0x15a9: 0xafda,\n\t0x15aa: 0xafea, 0x15ab: 0xaffa, 0x15ac: 0x0040, 0x15ad: 0x0040, 0x15ae: 0x0040, 0x15af: 0x0040,\n\t0x15b0: 0x7fd6, 0x15b1: 0xb009, 0x15b2: 0x7ff6, 0x15b3: 0x0808, 0x15b4: 0x8016, 0x15b5: 0x0040,\n\t0x15b6: 0x8036, 0x15b7: 0xb031, 0x15b8: 0x8056, 0x15b9: 0xb059, 0x15ba: 0x8076, 0x15bb: 0xb081,\n\t0x15bc: 0x8096, 0x15bd: 0xb0a9, 0x15be: 0x80b6, 0x15bf: 0xb0d1,\n\t// Block 0x57, offset 0x15c0\n\t0x15c0: 0xb0f9, 0x15c1: 0xb111, 0x15c2: 0xb111, 0x15c3: 0xb129, 0x15c4: 0xb129, 0x15c5: 0xb141,\n\t0x15c6: 0xb141, 0x15c7: 0xb159, 0x15c8: 0xb159, 0x15c9: 0xb171, 0x15ca: 0xb171, 0x15cb: 0xb171,\n\t0x15cc: 0xb171, 0x15cd: 0xb189, 0x15ce: 0xb189, 0x15cf: 0xb1a1, 0x15d0: 0xb1a1, 0x15d1: 0xb1a1,\n\t0x15d2: 0xb1a1, 0x15d3: 0xb1b9, 0x15d4: 0xb1b9, 0x15d5: 0xb1d1, 0x15d6: 0xb1d1, 0x15d7: 0xb1d1,\n\t0x15d8: 0xb1d1, 0x15d9: 0xb1e9, 0x15da: 0xb1e9, 0x15db: 0xb1e9, 0x15dc: 0xb1e9, 0x15dd: 0xb201,\n\t0x15de: 0xb201, 0x15df: 0xb201, 0x15e0: 0xb201, 0x15e1: 0xb219, 0x15e2: 0xb219, 0x15e3: 0xb219,\n\t0x15e4: 0xb219, 0x15e5: 0xb231, 0x15e6: 0xb231, 0x15e7: 0xb231, 0x15e8: 0xb231, 0x15e9: 0xb249,\n\t0x15ea: 0xb249, 0x15eb: 0xb261, 0x15ec: 0xb261, 0x15ed: 0xb279, 0x15ee: 0xb279, 0x15ef: 0xb291,\n\t0x15f0: 0xb291, 0x15f1: 0xb2a9, 0x15f2: 0xb2a9, 0x15f3: 0xb2a9, 0x15f4: 0xb2a9, 0x15f5: 0xb2c1,\n\t0x15f6: 0xb2c1, 0x15f7: 0xb2c1, 0x15f8: 0xb2c1, 0x15f9: 0xb2d9, 0x15fa: 0xb2d9, 0x15fb: 0xb2d9,\n\t0x15fc: 0xb2d9, 0x15fd: 0xb2f1, 0x15fe: 0xb2f1, 0x15ff: 0xb2f1,\n\t// Block 0x58, offset 0x1600\n\t0x1600: 0xb2f1, 0x1601: 0xb309, 0x1602: 0xb309, 0x1603: 0xb309, 0x1604: 0xb309, 0x1605: 0xb321,\n\t0x1606: 0xb321, 0x1607: 0xb321, 0x1608: 0xb321, 0x1609: 0xb339, 0x160a: 0xb339, 0x160b: 0xb339,\n\t0x160c: 0xb339, 0x160d: 0xb351, 0x160e: 0xb351, 0x160f: 0xb351, 0x1610: 0xb351, 0x1611: 0xb369,\n\t0x1612: 0xb369, 0x1613: 0xb369, 0x1614: 0xb369, 0x1615: 0xb381, 0x1616: 0xb381, 0x1617: 0xb381,\n\t0x1618: 0xb381, 0x1619: 0xb399, 0x161a: 0xb399, 0x161b: 0xb399, 0x161c: 0xb399, 0x161d: 0xb3b1,\n\t0x161e: 0xb3b1, 0x161f: 0xb3b1, 0x1620: 0xb3b1, 0x1621: 0xb3c9, 0x1622: 0xb3c9, 0x1623: 0xb3c9,\n\t0x1624: 0xb3c9, 0x1625: 0xb3e1, 0x1626: 0xb3e1, 0x1627: 0xb3e1, 0x1628: 0xb3e1, 0x1629: 0xb3f9,\n\t0x162a: 0xb3f9, 0x162b: 0xb3f9, 0x162c: 0xb3f9, 0x162d: 0xb411, 0x162e: 0xb411, 0x162f: 0x7ab1,\n\t0x1630: 0x7ab1, 0x1631: 0xb429, 0x1632: 0xb429, 0x1633: 0xb429, 0x1634: 0xb429, 0x1635: 0xb441,\n\t0x1636: 0xb441, 0x1637: 0xb469, 0x1638: 0xb469, 0x1639: 0xb491, 0x163a: 0xb491, 0x163b: 0xb4b9,\n\t0x163c: 0xb4b9, 0x163d: 0x0040, 0x163e: 0x0040, 0x163f: 0x03c0,\n\t// Block 0x59, offset 0x1640\n\t0x1640: 0x0040, 0x1641: 0xaefa, 0x1642: 0xb4e2, 0x1643: 0xaf6a, 0x1644: 0xafda, 0x1645: 0xafea,\n\t0x1646: 0xaf7a, 0x1647: 0xb4f2, 0x1648: 0x1fd2, 0x1649: 0x1fe2, 0x164a: 0xaf8a, 0x164b: 0x1fb2,\n\t0x164c: 0xaeda, 0x164d: 0xaf99, 0x164e: 0x29d1, 0x164f: 0xb502, 0x1650: 0x1f41, 0x1651: 0x00c9,\n\t0x1652: 0x0069, 0x1653: 0x0079, 0x1654: 0x1f51, 0x1655: 0x1f61, 0x1656: 0x1f71, 0x1657: 0x1f81,\n\t0x1658: 0x1f91, 0x1659: 0x1fa1, 0x165a: 0xaeea, 0x165b: 0x03c2, 0x165c: 0xafaa, 0x165d: 0x1fc2,\n\t0x165e: 0xafba, 0x165f: 0xaf0a, 0x1660: 0xaffa, 0x1661: 0x0039, 0x1662: 0x0ee9, 0x1663: 0x1159,\n\t0x1664: 0x0ef9, 0x1665: 0x0f09, 0x1666: 0x1199, 0x1667: 0x0f31, 0x1668: 0x0249, 0x1669: 0x0f41,\n\t0x166a: 0x0259, 0x166b: 0x0f51, 0x166c: 0x0359, 0x166d: 0x0f61, 0x166e: 0x0f71, 0x166f: 0x00d9,\n\t0x1670: 0x0f99, 0x1671: 0x2039, 0x1672: 0x0269, 0x1673: 0x01d9, 0x1674: 0x0fa9, 0x1675: 0x0fb9,\n\t0x1676: 0x1089, 0x1677: 0x0279, 0x1678: 0x0369, 0x1679: 0x0289, 0x167a: 0x13d1, 0x167b: 0xaf4a,\n\t0x167c: 0xafca, 0x167d: 0xaf5a, 0x167e: 0xb512, 0x167f: 0xaf1a,\n\t// Block 0x5a, offset 0x1680\n\t0x1680: 0x1caa, 0x1681: 0x0039, 0x1682: 0x0ee9, 0x1683: 0x1159, 0x1684: 0x0ef9, 0x1685: 0x0f09,\n\t0x1686: 0x1199, 0x1687: 0x0f31, 0x1688: 0x0249, 0x1689: 0x0f41, 0x168a: 0x0259, 0x168b: 0x0f51,\n\t0x168c: 0x0359, 0x168d: 0x0f61, 0x168e: 0x0f71, 0x168f: 0x00d9, 0x1690: 0x0f99, 0x1691: 0x2039,\n\t0x1692: 0x0269, 0x1693: 0x01d9, 0x1694: 0x0fa9, 0x1695: 0x0fb9, 0x1696: 0x1089, 0x1697: 0x0279,\n\t0x1698: 0x0369, 0x1699: 0x0289, 0x169a: 0x13d1, 0x169b: 0xaf2a, 0x169c: 0xb522, 0x169d: 0xaf3a,\n\t0x169e: 0xb532, 0x169f: 0x80d5, 0x16a0: 0x80f5, 0x16a1: 0x29d1, 0x16a2: 0x8115, 0x16a3: 0x8115,\n\t0x16a4: 0x8135, 0x16a5: 0x8155, 0x16a6: 0x8175, 0x16a7: 0x8195, 0x16a8: 0x81b5, 0x16a9: 0x81d5,\n\t0x16aa: 0x81f5, 0x16ab: 0x8215, 0x16ac: 0x8235, 0x16ad: 0x8255, 0x16ae: 0x8275, 0x16af: 0x8295,\n\t0x16b0: 0x82b5, 0x16b1: 0x82d5, 0x16b2: 0x82f5, 0x16b3: 0x8315, 0x16b4: 0x8335, 0x16b5: 0x8355,\n\t0x16b6: 0x8375, 0x16b7: 0x8395, 0x16b8: 0x83b5, 0x16b9: 0x83d5, 0x16ba: 0x83f5, 0x16bb: 0x8415,\n\t0x16bc: 0x81b5, 0x16bd: 0x8435, 0x16be: 0x8455, 0x16bf: 0x8215,\n\t// Block 0x5b, offset 0x16c0\n\t0x16c0: 0x8475, 0x16c1: 0x8495, 0x16c2: 0x84b5, 0x16c3: 0x84d5, 0x16c4: 0x84f5, 0x16c5: 0x8515,\n\t0x16c6: 0x8535, 0x16c7: 0x8555, 0x16c8: 0x84d5, 0x16c9: 0x8575, 0x16ca: 0x84d5, 0x16cb: 0x8595,\n\t0x16cc: 0x8595, 0x16cd: 0x85b5, 0x16ce: 0x85b5, 0x16cf: 0x85d5, 0x16d0: 0x8515, 0x16d1: 0x85f5,\n\t0x16d2: 0x8615, 0x16d3: 0x85f5, 0x16d4: 0x8635, 0x16d5: 0x8615, 0x16d6: 0x8655, 0x16d7: 0x8655,\n\t0x16d8: 0x8675, 0x16d9: 0x8675, 0x16da: 0x8695, 0x16db: 0x8695, 0x16dc: 0x8615, 0x16dd: 0x8115,\n\t0x16de: 0x86b5, 0x16df: 0x86d5, 0x16e0: 0x0040, 0x16e1: 0x86f5, 0x16e2: 0x8715, 0x16e3: 0x8735,\n\t0x16e4: 0x8755, 0x16e5: 0x8735, 0x16e6: 0x8775, 0x16e7: 0x8795, 0x16e8: 0x87b5, 0x16e9: 0x87b5,\n\t0x16ea: 0x87d5, 0x16eb: 0x87d5, 0x16ec: 0x87f5, 0x16ed: 0x87f5, 0x16ee: 0x87d5, 0x16ef: 0x87d5,\n\t0x16f0: 0x8815, 0x16f1: 0x8835, 0x16f2: 0x8855, 0x16f3: 0x8875, 0x16f4: 0x8895, 0x16f5: 0x88b5,\n\t0x16f6: 0x88b5, 0x16f7: 0x88b5, 0x16f8: 0x88d5, 0x16f9: 0x88d5, 0x16fa: 0x88d5, 0x16fb: 0x88d5,\n\t0x16fc: 0x87b5, 0x16fd: 0x87b5, 0x16fe: 0x87b5, 0x16ff: 0x0040,\n\t// Block 0x5c, offset 0x1700\n\t0x1700: 0x0040, 0x1701: 0x0040, 0x1702: 0x8715, 0x1703: 0x86f5, 0x1704: 0x88f5, 0x1705: 0x86f5,\n\t0x1706: 0x8715, 0x1707: 0x86f5, 0x1708: 0x0040, 0x1709: 0x0040, 0x170a: 0x8915, 0x170b: 0x8715,\n\t0x170c: 0x8935, 0x170d: 0x88f5, 0x170e: 0x8935, 0x170f: 0x8715, 0x1710: 0x0040, 0x1711: 0x0040,\n\t0x1712: 0x8955, 0x1713: 0x8975, 0x1714: 0x8875, 0x1715: 0x8935, 0x1716: 0x88f5, 0x1717: 0x8935,\n\t0x1718: 0x0040, 0x1719: 0x0040, 0x171a: 0x8995, 0x171b: 0x89b5, 0x171c: 0x8995, 0x171d: 0x0040,\n\t0x171e: 0x0040, 0x171f: 0x0040, 0x1720: 0xb541, 0x1721: 0xb559, 0x1722: 0xb571, 0x1723: 0x89d6,\n\t0x1724: 0xb589, 0x1725: 0xb5a1, 0x1726: 0x89f5, 0x1727: 0x0040, 0x1728: 0x8a15, 0x1729: 0x8a35,\n\t0x172a: 0x8a55, 0x172b: 0x8a35, 0x172c: 0x8a75, 0x172d: 0x8a95, 0x172e: 0x8ab5, 0x172f: 0x0040,\n\t0x1730: 0x0040, 0x1731: 0x0040, 0x1732: 0x0040, 0x1733: 0x0040, 0x1734: 0x0040, 0x1735: 0x0040,\n\t0x1736: 0x0040, 0x1737: 0x0040, 0x1738: 0x0040, 0x1739: 0x0340, 0x173a: 0x0340, 0x173b: 0x0340,\n\t0x173c: 0x0040, 0x173d: 0x0040, 0x173e: 0x0040, 0x173f: 0x0040,\n\t// Block 0x5d, offset 0x1740\n\t0x1740: 0x0a08, 0x1741: 0x0a08, 0x1742: 0x0a08, 0x1743: 0x0a08, 0x1744: 0x0a08, 0x1745: 0x0c08,\n\t0x1746: 0x0808, 0x1747: 0x0c08, 0x1748: 0x0818, 0x1749: 0x0c08, 0x174a: 0x0c08, 0x174b: 0x0808,\n\t0x174c: 0x0808, 0x174d: 0x0908, 0x174e: 0x0c08, 0x174f: 0x0c08, 0x1750: 0x0c08, 0x1751: 0x0c08,\n\t0x1752: 0x0c08, 0x1753: 0x0a08, 0x1754: 0x0a08, 0x1755: 0x0a08, 0x1756: 0x0a08, 0x1757: 0x0908,\n\t0x1758: 0x0a08, 0x1759: 0x0a08, 0x175a: 0x0a08, 0x175b: 0x0a08, 0x175c: 0x0a08, 0x175d: 0x0c08,\n\t0x175e: 0x0a08, 0x175f: 0x0a08, 0x1760: 0x0a08, 0x1761: 0x0c08, 0x1762: 0x0808, 0x1763: 0x0808,\n\t0x1764: 0x0c08, 0x1765: 0x3308, 0x1766: 0x3308, 0x1767: 0x0040, 0x1768: 0x0040, 0x1769: 0x0040,\n\t0x176a: 0x0040, 0x176b: 0x0a18, 0x176c: 0x0a18, 0x176d: 0x0a18, 0x176e: 0x0a18, 0x176f: 0x0c18,\n\t0x1770: 0x0818, 0x1771: 0x0818, 0x1772: 0x0818, 0x1773: 0x0818, 0x1774: 0x0818, 0x1775: 0x0818,\n\t0x1776: 0x0818, 0x1777: 0x0040, 0x1778: 0x0040, 0x1779: 0x0040, 0x177a: 0x0040, 0x177b: 0x0040,\n\t0x177c: 0x0040, 0x177d: 0x0040, 0x177e: 0x0040, 0x177f: 0x0040,\n\t// Block 0x5e, offset 0x1780\n\t0x1780: 0x0a08, 0x1781: 0x0c08, 0x1782: 0x0a08, 0x1783: 0x0c08, 0x1784: 0x0c08, 0x1785: 0x0c08,\n\t0x1786: 0x0a08, 0x1787: 0x0a08, 0x1788: 0x0a08, 0x1789: 0x0c08, 0x178a: 0x0a08, 0x178b: 0x0a08,\n\t0x178c: 0x0c08, 0x178d: 0x0a08, 0x178e: 0x0c08, 0x178f: 0x0c08, 0x1790: 0x0a08, 0x1791: 0x0c08,\n\t0x1792: 0x0040, 0x1793: 0x0040, 0x1794: 0x0040, 0x1795: 0x0040, 0x1796: 0x0040, 0x1797: 0x0040,\n\t0x1798: 0x0040, 0x1799: 0x0818, 0x179a: 0x0818, 0x179b: 0x0818, 0x179c: 0x0818, 0x179d: 0x0040,\n\t0x179e: 0x0040, 0x179f: 0x0040, 0x17a0: 0x0040, 0x17a1: 0x0040, 0x17a2: 0x0040, 0x17a3: 0x0040,\n\t0x17a4: 0x0040, 0x17a5: 0x0040, 0x17a6: 0x0040, 0x17a7: 0x0040, 0x17a8: 0x0040, 0x17a9: 0x0c18,\n\t0x17aa: 0x0c18, 0x17ab: 0x0c18, 0x17ac: 0x0c18, 0x17ad: 0x0a18, 0x17ae: 0x0a18, 0x17af: 0x0818,\n\t0x17b0: 0x0040, 0x17b1: 0x0040, 0x17b2: 0x0040, 0x17b3: 0x0040, 0x17b4: 0x0040, 0x17b5: 0x0040,\n\t0x17b6: 0x0040, 0x17b7: 0x0040, 0x17b8: 0x0040, 0x17b9: 0x0040, 0x17ba: 0x0040, 0x17bb: 0x0040,\n\t0x17bc: 0x0040, 0x17bd: 0x0040, 0x17be: 0x0040, 0x17bf: 0x0040,\n\t// Block 0x5f, offset 0x17c0\n\t0x17c0: 0x3308, 0x17c1: 0x3308, 0x17c2: 0x3008, 0x17c3: 0x3008, 0x17c4: 0x0040, 0x17c5: 0x0008,\n\t0x17c6: 0x0008, 0x17c7: 0x0008, 0x17c8: 0x0008, 0x17c9: 0x0008, 0x17ca: 0x0008, 0x17cb: 0x0008,\n\t0x17cc: 0x0008, 0x17cd: 0x0040, 0x17ce: 0x0040, 0x17cf: 0x0008, 0x17d0: 0x0008, 0x17d1: 0x0040,\n\t0x17d2: 0x0040, 0x17d3: 0x0008, 0x17d4: 0x0008, 0x17d5: 0x0008, 0x17d6: 0x0008, 0x17d7: 0x0008,\n\t0x17d8: 0x0008, 0x17d9: 0x0008, 0x17da: 0x0008, 0x17db: 0x0008, 0x17dc: 0x0008, 0x17dd: 0x0008,\n\t0x17de: 0x0008, 0x17df: 0x0008, 0x17e0: 0x0008, 0x17e1: 0x0008, 0x17e2: 0x0008, 0x17e3: 0x0008,\n\t0x17e4: 0x0008, 0x17e5: 0x0008, 0x17e6: 0x0008, 0x17e7: 0x0008, 0x17e8: 0x0008, 0x17e9: 0x0040,\n\t0x17ea: 0x0008, 0x17eb: 0x0008, 0x17ec: 0x0008, 0x17ed: 0x0008, 0x17ee: 0x0008, 0x17ef: 0x0008,\n\t0x17f0: 0x0008, 0x17f1: 0x0040, 0x17f2: 0x0008, 0x17f3: 0x0008, 0x17f4: 0x0040, 0x17f5: 0x0008,\n\t0x17f6: 0x0008, 0x17f7: 0x0008, 0x17f8: 0x0008, 0x17f9: 0x0008, 0x17fa: 0x0040, 0x17fb: 0x0040,\n\t0x17fc: 0x3308, 0x17fd: 0x0008, 0x17fe: 0x3008, 0x17ff: 0x3008,\n\t// Block 0x60, offset 0x1800\n\t0x1800: 0x3308, 0x1801: 0x3008, 0x1802: 0x3008, 0x1803: 0x3008, 0x1804: 0x3008, 0x1805: 0x0040,\n\t0x1806: 0x0040, 0x1807: 0x3008, 0x1808: 0x3008, 0x1809: 0x0040, 0x180a: 0x0040, 0x180b: 0x3008,\n\t0x180c: 0x3008, 0x180d: 0x3808, 0x180e: 0x0040, 0x180f: 0x0040, 0x1810: 0x0008, 0x1811: 0x0040,\n\t0x1812: 0x0040, 0x1813: 0x0040, 0x1814: 0x0040, 0x1815: 0x0040, 0x1816: 0x0040, 0x1817: 0x3008,\n\t0x1818: 0x0040, 0x1819: 0x0040, 0x181a: 0x0040, 0x181b: 0x0040, 0x181c: 0x0040, 0x181d: 0x0008,\n\t0x181e: 0x0008, 0x181f: 0x0008, 0x1820: 0x0008, 0x1821: 0x0008, 0x1822: 0x3008, 0x1823: 0x3008,\n\t0x1824: 0x0040, 0x1825: 0x0040, 0x1826: 0x3308, 0x1827: 0x3308, 0x1828: 0x3308, 0x1829: 0x3308,\n\t0x182a: 0x3308, 0x182b: 0x3308, 0x182c: 0x3308, 0x182d: 0x0040, 0x182e: 0x0040, 0x182f: 0x0040,\n\t0x1830: 0x3308, 0x1831: 0x3308, 0x1832: 0x3308, 0x1833: 0x3308, 0x1834: 0x3308, 0x1835: 0x0040,\n\t0x1836: 0x0040, 0x1837: 0x0040, 0x1838: 0x0040, 0x1839: 0x0040, 0x183a: 0x0040, 0x183b: 0x0040,\n\t0x183c: 0x0040, 0x183d: 0x0040, 0x183e: 0x0040, 0x183f: 0x0040,\n\t// Block 0x61, offset 0x1840\n\t0x1840: 0x0039, 0x1841: 0x0ee9, 0x1842: 0x1159, 0x1843: 0x0ef9, 0x1844: 0x0f09, 0x1845: 0x1199,\n\t0x1846: 0x0f31, 0x1847: 0x0249, 0x1848: 0x0f41, 0x1849: 0x0259, 0x184a: 0x0f51, 0x184b: 0x0359,\n\t0x184c: 0x0f61, 0x184d: 0x0f71, 0x184e: 0x00d9, 0x184f: 0x0f99, 0x1850: 0x2039, 0x1851: 0x0269,\n\t0x1852: 0x01d9, 0x1853: 0x0fa9, 0x1854: 0x0fb9, 0x1855: 0x1089, 0x1856: 0x0279, 0x1857: 0x0369,\n\t0x1858: 0x0289, 0x1859: 0x13d1, 0x185a: 0x0039, 0x185b: 0x0ee9, 0x185c: 0x1159, 0x185d: 0x0ef9,\n\t0x185e: 0x0f09, 0x185f: 0x1199, 0x1860: 0x0f31, 0x1861: 0x0249, 0x1862: 0x0f41, 0x1863: 0x0259,\n\t0x1864: 0x0f51, 0x1865: 0x0359, 0x1866: 0x0f61, 0x1867: 0x0f71, 0x1868: 0x00d9, 0x1869: 0x0f99,\n\t0x186a: 0x2039, 0x186b: 0x0269, 0x186c: 0x01d9, 0x186d: 0x0fa9, 0x186e: 0x0fb9, 0x186f: 0x1089,\n\t0x1870: 0x0279, 0x1871: 0x0369, 0x1872: 0x0289, 0x1873: 0x13d1, 0x1874: 0x0039, 0x1875: 0x0ee9,\n\t0x1876: 0x1159, 0x1877: 0x0ef9, 0x1878: 0x0f09, 0x1879: 0x1199, 0x187a: 0x0f31, 0x187b: 0x0249,\n\t0x187c: 0x0f41, 0x187d: 0x0259, 0x187e: 0x0f51, 0x187f: 0x0359,\n\t// Block 0x62, offset 0x1880\n\t0x1880: 0x0f61, 0x1881: 0x0f71, 0x1882: 0x00d9, 0x1883: 0x0f99, 0x1884: 0x2039, 0x1885: 0x0269,\n\t0x1886: 0x01d9, 0x1887: 0x0fa9, 0x1888: 0x0fb9, 0x1889: 0x1089, 0x188a: 0x0279, 0x188b: 0x0369,\n\t0x188c: 0x0289, 0x188d: 0x13d1, 0x188e: 0x0039, 0x188f: 0x0ee9, 0x1890: 0x1159, 0x1891: 0x0ef9,\n\t0x1892: 0x0f09, 0x1893: 0x1199, 0x1894: 0x0f31, 0x1895: 0x0040, 0x1896: 0x0f41, 0x1897: 0x0259,\n\t0x1898: 0x0f51, 0x1899: 0x0359, 0x189a: 0x0f61, 0x189b: 0x0f71, 0x189c: 0x00d9, 0x189d: 0x0f99,\n\t0x189e: 0x2039, 0x189f: 0x0269, 0x18a0: 0x01d9, 0x18a1: 0x0fa9, 0x18a2: 0x0fb9, 0x18a3: 0x1089,\n\t0x18a4: 0x0279, 0x18a5: 0x0369, 0x18a6: 0x0289, 0x18a7: 0x13d1, 0x18a8: 0x0039, 0x18a9: 0x0ee9,\n\t0x18aa: 0x1159, 0x18ab: 0x0ef9, 0x18ac: 0x0f09, 0x18ad: 0x1199, 0x18ae: 0x0f31, 0x18af: 0x0249,\n\t0x18b0: 0x0f41, 0x18b1: 0x0259, 0x18b2: 0x0f51, 0x18b3: 0x0359, 0x18b4: 0x0f61, 0x18b5: 0x0f71,\n\t0x18b6: 0x00d9, 0x18b7: 0x0f99, 0x18b8: 0x2039, 0x18b9: 0x0269, 0x18ba: 0x01d9, 0x18bb: 0x0fa9,\n\t0x18bc: 0x0fb9, 0x18bd: 0x1089, 0x18be: 0x0279, 0x18bf: 0x0369,\n\t// Block 0x63, offset 0x18c0\n\t0x18c0: 0x0289, 0x18c1: 0x13d1, 0x18c2: 0x0039, 0x18c3: 0x0ee9, 0x18c4: 0x1159, 0x18c5: 0x0ef9,\n\t0x18c6: 0x0f09, 0x18c7: 0x1199, 0x18c8: 0x0f31, 0x18c9: 0x0249, 0x18ca: 0x0f41, 0x18cb: 0x0259,\n\t0x18cc: 0x0f51, 0x18cd: 0x0359, 0x18ce: 0x0f61, 0x18cf: 0x0f71, 0x18d0: 0x00d9, 0x18d1: 0x0f99,\n\t0x18d2: 0x2039, 0x18d3: 0x0269, 0x18d4: 0x01d9, 0x18d5: 0x0fa9, 0x18d6: 0x0fb9, 0x18d7: 0x1089,\n\t0x18d8: 0x0279, 0x18d9: 0x0369, 0x18da: 0x0289, 0x18db: 0x13d1, 0x18dc: 0x0039, 0x18dd: 0x0040,\n\t0x18de: 0x1159, 0x18df: 0x0ef9, 0x18e0: 0x0040, 0x18e1: 0x0040, 0x18e2: 0x0f31, 0x18e3: 0x0040,\n\t0x18e4: 0x0040, 0x18e5: 0x0259, 0x18e6: 0x0f51, 0x18e7: 0x0040, 0x18e8: 0x0040, 0x18e9: 0x0f71,\n\t0x18ea: 0x00d9, 0x18eb: 0x0f99, 0x18ec: 0x2039, 0x18ed: 0x0040, 0x18ee: 0x01d9, 0x18ef: 0x0fa9,\n\t0x18f0: 0x0fb9, 0x18f1: 0x1089, 0x18f2: 0x0279, 0x18f3: 0x0369, 0x18f4: 0x0289, 0x18f5: 0x13d1,\n\t0x18f6: 0x0039, 0x18f7: 0x0ee9, 0x18f8: 0x1159, 0x18f9: 0x0ef9, 0x18fa: 0x0040, 0x18fb: 0x1199,\n\t0x18fc: 0x0040, 0x18fd: 0x0249, 0x18fe: 0x0f41, 0x18ff: 0x0259,\n\t// Block 0x64, offset 0x1900\n\t0x1900: 0x0f51, 0x1901: 0x0359, 0x1902: 0x0f61, 0x1903: 0x0f71, 0x1904: 0x0040, 0x1905: 0x0f99,\n\t0x1906: 0x2039, 0x1907: 0x0269, 0x1908: 0x01d9, 0x1909: 0x0fa9, 0x190a: 0x0fb9, 0x190b: 0x1089,\n\t0x190c: 0x0279, 0x190d: 0x0369, 0x190e: 0x0289, 0x190f: 0x13d1, 0x1910: 0x0039, 0x1911: 0x0ee9,\n\t0x1912: 0x1159, 0x1913: 0x0ef9, 0x1914: 0x0f09, 0x1915: 0x1199, 0x1916: 0x0f31, 0x1917: 0x0249,\n\t0x1918: 0x0f41, 0x1919: 0x0259, 0x191a: 0x0f51, 0x191b: 0x0359, 0x191c: 0x0f61, 0x191d: 0x0f71,\n\t0x191e: 0x00d9, 0x191f: 0x0f99, 0x1920: 0x2039, 0x1921: 0x0269, 0x1922: 0x01d9, 0x1923: 0x0fa9,\n\t0x1924: 0x0fb9, 0x1925: 0x1089, 0x1926: 0x0279, 0x1927: 0x0369, 0x1928: 0x0289, 0x1929: 0x13d1,\n\t0x192a: 0x0039, 0x192b: 0x0ee9, 0x192c: 0x1159, 0x192d: 0x0ef9, 0x192e: 0x0f09, 0x192f: 0x1199,\n\t0x1930: 0x0f31, 0x1931: 0x0249, 0x1932: 0x0f41, 0x1933: 0x0259, 0x1934: 0x0f51, 0x1935: 0x0359,\n\t0x1936: 0x0f61, 0x1937: 0x0f71, 0x1938: 0x00d9, 0x1939: 0x0f99, 0x193a: 0x2039, 0x193b: 0x0269,\n\t0x193c: 0x01d9, 0x193d: 0x0fa9, 0x193e: 0x0fb9, 0x193f: 0x1089,\n\t// Block 0x65, offset 0x1940\n\t0x1940: 0x0279, 0x1941: 0x0369, 0x1942: 0x0289, 0x1943: 0x13d1, 0x1944: 0x0039, 0x1945: 0x0ee9,\n\t0x1946: 0x0040, 0x1947: 0x0ef9, 0x1948: 0x0f09, 0x1949: 0x1199, 0x194a: 0x0f31, 0x194b: 0x0040,\n\t0x194c: 0x0040, 0x194d: 0x0259, 0x194e: 0x0f51, 0x194f: 0x0359, 0x1950: 0x0f61, 0x1951: 0x0f71,\n\t0x1952: 0x00d9, 0x1953: 0x0f99, 0x1954: 0x2039, 0x1955: 0x0040, 0x1956: 0x01d9, 0x1957: 0x0fa9,\n\t0x1958: 0x0fb9, 0x1959: 0x1089, 0x195a: 0x0279, 0x195b: 0x0369, 0x195c: 0x0289, 0x195d: 0x0040,\n\t0x195e: 0x0039, 0x195f: 0x0ee9, 0x1960: 0x1159, 0x1961: 0x0ef9, 0x1962: 0x0f09, 0x1963: 0x1199,\n\t0x1964: 0x0f31, 0x1965: 0x0249, 0x1966: 0x0f41, 0x1967: 0x0259, 0x1968: 0x0f51, 0x1969: 0x0359,\n\t0x196a: 0x0f61, 0x196b: 0x0f71, 0x196c: 0x00d9, 0x196d: 0x0f99, 0x196e: 0x2039, 0x196f: 0x0269,\n\t0x1970: 0x01d9, 0x1971: 0x0fa9, 0x1972: 0x0fb9, 0x1973: 0x1089, 0x1974: 0x0279, 0x1975: 0x0369,\n\t0x1976: 0x0289, 0x1977: 0x13d1, 0x1978: 0x0039, 0x1979: 0x0ee9, 0x197a: 0x0040, 0x197b: 0x0ef9,\n\t0x197c: 0x0f09, 0x197d: 0x1199, 0x197e: 0x0f31, 0x197f: 0x0040,\n\t// Block 0x66, offset 0x1980\n\t0x1980: 0x0f41, 0x1981: 0x0259, 0x1982: 0x0f51, 0x1983: 0x0359, 0x1984: 0x0f61, 0x1985: 0x0040,\n\t0x1986: 0x00d9, 0x1987: 0x0040, 0x1988: 0x0040, 0x1989: 0x0040, 0x198a: 0x01d9, 0x198b: 0x0fa9,\n\t0x198c: 0x0fb9, 0x198d: 0x1089, 0x198e: 0x0279, 0x198f: 0x0369, 0x1990: 0x0289, 0x1991: 0x0040,\n\t0x1992: 0x0039, 0x1993: 0x0ee9, 0x1994: 0x1159, 0x1995: 0x0ef9, 0x1996: 0x0f09, 0x1997: 0x1199,\n\t0x1998: 0x0f31, 0x1999: 0x0249, 0x199a: 0x0f41, 0x199b: 0x0259, 0x199c: 0x0f51, 0x199d: 0x0359,\n\t0x199e: 0x0f61, 0x199f: 0x0f71, 0x19a0: 0x00d9, 0x19a1: 0x0f99, 0x19a2: 0x2039, 0x19a3: 0x0269,\n\t0x19a4: 0x01d9, 0x19a5: 0x0fa9, 0x19a6: 0x0fb9, 0x19a7: 0x1089, 0x19a8: 0x0279, 0x19a9: 0x0369,\n\t0x19aa: 0x0289, 0x19ab: 0x13d1, 0x19ac: 0x0039, 0x19ad: 0x0ee9, 0x19ae: 0x1159, 0x19af: 0x0ef9,\n\t0x19b0: 0x0f09, 0x19b1: 0x1199, 0x19b2: 0x0f31, 0x19b3: 0x0249, 0x19b4: 0x0f41, 0x19b5: 0x0259,\n\t0x19b6: 0x0f51, 0x19b7: 0x0359, 0x19b8: 0x0f61, 0x19b9: 0x0f71, 0x19ba: 0x00d9, 0x19bb: 0x0f99,\n\t0x19bc: 0x2039, 0x19bd: 0x0269, 0x19be: 0x01d9, 0x19bf: 0x0fa9,\n\t// Block 0x67, offset 0x19c0\n\t0x19c0: 0x0fb9, 0x19c1: 0x1089, 0x19c2: 0x0279, 0x19c3: 0x0369, 0x19c4: 0x0289, 0x19c5: 0x13d1,\n\t0x19c6: 0x0039, 0x19c7: 0x0ee9, 0x19c8: 0x1159, 0x19c9: 0x0ef9, 0x19ca: 0x0f09, 0x19cb: 0x1199,\n\t0x19cc: 0x0f31, 0x19cd: 0x0249, 0x19ce: 0x0f41, 0x19cf: 0x0259, 0x19d0: 0x0f51, 0x19d1: 0x0359,\n\t0x19d2: 0x0f61, 0x19d3: 0x0f71, 0x19d4: 0x00d9, 0x19d5: 0x0f99, 0x19d6: 0x2039, 0x19d7: 0x0269,\n\t0x19d8: 0x01d9, 0x19d9: 0x0fa9, 0x19da: 0x0fb9, 0x19db: 0x1089, 0x19dc: 0x0279, 0x19dd: 0x0369,\n\t0x19de: 0x0289, 0x19df: 0x13d1, 0x19e0: 0x0039, 0x19e1: 0x0ee9, 0x19e2: 0x1159, 0x19e3: 0x0ef9,\n\t0x19e4: 0x0f09, 0x19e5: 0x1199, 0x19e6: 0x0f31, 0x19e7: 0x0249, 0x19e8: 0x0f41, 0x19e9: 0x0259,\n\t0x19ea: 0x0f51, 0x19eb: 0x0359, 0x19ec: 0x0f61, 0x19ed: 0x0f71, 0x19ee: 0x00d9, 0x19ef: 0x0f99,\n\t0x19f0: 0x2039, 0x19f1: 0x0269, 0x19f2: 0x01d9, 0x19f3: 0x0fa9, 0x19f4: 0x0fb9, 0x19f5: 0x1089,\n\t0x19f6: 0x0279, 0x19f7: 0x0369, 0x19f8: 0x0289, 0x19f9: 0x13d1, 0x19fa: 0x0039, 0x19fb: 0x0ee9,\n\t0x19fc: 0x1159, 0x19fd: 0x0ef9, 0x19fe: 0x0f09, 0x19ff: 0x1199,\n\t// Block 0x68, offset 0x1a00\n\t0x1a00: 0x0f31, 0x1a01: 0x0249, 0x1a02: 0x0f41, 0x1a03: 0x0259, 0x1a04: 0x0f51, 0x1a05: 0x0359,\n\t0x1a06: 0x0f61, 0x1a07: 0x0f71, 0x1a08: 0x00d9, 0x1a09: 0x0f99, 0x1a0a: 0x2039, 0x1a0b: 0x0269,\n\t0x1a0c: 0x01d9, 0x1a0d: 0x0fa9, 0x1a0e: 0x0fb9, 0x1a0f: 0x1089, 0x1a10: 0x0279, 0x1a11: 0x0369,\n\t0x1a12: 0x0289, 0x1a13: 0x13d1, 0x1a14: 0x0039, 0x1a15: 0x0ee9, 0x1a16: 0x1159, 0x1a17: 0x0ef9,\n\t0x1a18: 0x0f09, 0x1a19: 0x1199, 0x1a1a: 0x0f31, 0x1a1b: 0x0249, 0x1a1c: 0x0f41, 0x1a1d: 0x0259,\n\t0x1a1e: 0x0f51, 0x1a1f: 0x0359, 0x1a20: 0x0f61, 0x1a21: 0x0f71, 0x1a22: 0x00d9, 0x1a23: 0x0f99,\n\t0x1a24: 0x2039, 0x1a25: 0x0269, 0x1a26: 0x01d9, 0x1a27: 0x0fa9, 0x1a28: 0x0fb9, 0x1a29: 0x1089,\n\t0x1a2a: 0x0279, 0x1a2b: 0x0369, 0x1a2c: 0x0289, 0x1a2d: 0x13d1, 0x1a2e: 0x0039, 0x1a2f: 0x0ee9,\n\t0x1a30: 0x1159, 0x1a31: 0x0ef9, 0x1a32: 0x0f09, 0x1a33: 0x1199, 0x1a34: 0x0f31, 0x1a35: 0x0249,\n\t0x1a36: 0x0f41, 0x1a37: 0x0259, 0x1a38: 0x0f51, 0x1a39: 0x0359, 0x1a3a: 0x0f61, 0x1a3b: 0x0f71,\n\t0x1a3c: 0x00d9, 0x1a3d: 0x0f99, 0x1a3e: 0x2039, 0x1a3f: 0x0269,\n\t// Block 0x69, offset 0x1a40\n\t0x1a40: 0x01d9, 0x1a41: 0x0fa9, 0x1a42: 0x0fb9, 0x1a43: 0x1089, 0x1a44: 0x0279, 0x1a45: 0x0369,\n\t0x1a46: 0x0289, 0x1a47: 0x13d1, 0x1a48: 0x0039, 0x1a49: 0x0ee9, 0x1a4a: 0x1159, 0x1a4b: 0x0ef9,\n\t0x1a4c: 0x0f09, 0x1a4d: 0x1199, 0x1a4e: 0x0f31, 0x1a4f: 0x0249, 0x1a50: 0x0f41, 0x1a51: 0x0259,\n\t0x1a52: 0x0f51, 0x1a53: 0x0359, 0x1a54: 0x0f61, 0x1a55: 0x0f71, 0x1a56: 0x00d9, 0x1a57: 0x0f99,\n\t0x1a58: 0x2039, 0x1a59: 0x0269, 0x1a5a: 0x01d9, 0x1a5b: 0x0fa9, 0x1a5c: 0x0fb9, 0x1a5d: 0x1089,\n\t0x1a5e: 0x0279, 0x1a5f: 0x0369, 0x1a60: 0x0289, 0x1a61: 0x13d1, 0x1a62: 0x0039, 0x1a63: 0x0ee9,\n\t0x1a64: 0x1159, 0x1a65: 0x0ef9, 0x1a66: 0x0f09, 0x1a67: 0x1199, 0x1a68: 0x0f31, 0x1a69: 0x0249,\n\t0x1a6a: 0x0f41, 0x1a6b: 0x0259, 0x1a6c: 0x0f51, 0x1a6d: 0x0359, 0x1a6e: 0x0f61, 0x1a6f: 0x0f71,\n\t0x1a70: 0x00d9, 0x1a71: 0x0f99, 0x1a72: 0x2039, 0x1a73: 0x0269, 0x1a74: 0x01d9, 0x1a75: 0x0fa9,\n\t0x1a76: 0x0fb9, 0x1a77: 0x1089, 0x1a78: 0x0279, 0x1a79: 0x0369, 0x1a7a: 0x0289, 0x1a7b: 0x13d1,\n\t0x1a7c: 0x0039, 0x1a7d: 0x0ee9, 0x1a7e: 0x1159, 0x1a7f: 0x0ef9,\n\t// Block 0x6a, offset 0x1a80\n\t0x1a80: 0x0f09, 0x1a81: 0x1199, 0x1a82: 0x0f31, 0x1a83: 0x0249, 0x1a84: 0x0f41, 0x1a85: 0x0259,\n\t0x1a86: 0x0f51, 0x1a87: 0x0359, 0x1a88: 0x0f61, 0x1a89: 0x0f71, 0x1a8a: 0x00d9, 0x1a8b: 0x0f99,\n\t0x1a8c: 0x2039, 0x1a8d: 0x0269, 0x1a8e: 0x01d9, 0x1a8f: 0x0fa9, 0x1a90: 0x0fb9, 0x1a91: 0x1089,\n\t0x1a92: 0x0279, 0x1a93: 0x0369, 0x1a94: 0x0289, 0x1a95: 0x13d1, 0x1a96: 0x0039, 0x1a97: 0x0ee9,\n\t0x1a98: 0x1159, 0x1a99: 0x0ef9, 0x1a9a: 0x0f09, 0x1a9b: 0x1199, 0x1a9c: 0x0f31, 0x1a9d: 0x0249,\n\t0x1a9e: 0x0f41, 0x1a9f: 0x0259, 0x1aa0: 0x0f51, 0x1aa1: 0x0359, 0x1aa2: 0x0f61, 0x1aa3: 0x0f71,\n\t0x1aa4: 0x00d9, 0x1aa5: 0x0f99, 0x1aa6: 0x2039, 0x1aa7: 0x0269, 0x1aa8: 0x01d9, 0x1aa9: 0x0fa9,\n\t0x1aaa: 0x0fb9, 0x1aab: 0x1089, 0x1aac: 0x0279, 0x1aad: 0x0369, 0x1aae: 0x0289, 0x1aaf: 0x13d1,\n\t0x1ab0: 0x0039, 0x1ab1: 0x0ee9, 0x1ab2: 0x1159, 0x1ab3: 0x0ef9, 0x1ab4: 0x0f09, 0x1ab5: 0x1199,\n\t0x1ab6: 0x0f31, 0x1ab7: 0x0249, 0x1ab8: 0x0f41, 0x1ab9: 0x0259, 0x1aba: 0x0f51, 0x1abb: 0x0359,\n\t0x1abc: 0x0f61, 0x1abd: 0x0f71, 0x1abe: 0x00d9, 0x1abf: 0x0f99,\n\t// Block 0x6b, offset 0x1ac0\n\t0x1ac0: 0x2039, 0x1ac1: 0x0269, 0x1ac2: 0x01d9, 0x1ac3: 0x0fa9, 0x1ac4: 0x0fb9, 0x1ac5: 0x1089,\n\t0x1ac6: 0x0279, 0x1ac7: 0x0369, 0x1ac8: 0x0289, 0x1ac9: 0x13d1, 0x1aca: 0x0039, 0x1acb: 0x0ee9,\n\t0x1acc: 0x1159, 0x1acd: 0x0ef9, 0x1ace: 0x0f09, 0x1acf: 0x1199, 0x1ad0: 0x0f31, 0x1ad1: 0x0249,\n\t0x1ad2: 0x0f41, 0x1ad3: 0x0259, 0x1ad4: 0x0f51, 0x1ad5: 0x0359, 0x1ad6: 0x0f61, 0x1ad7: 0x0f71,\n\t0x1ad8: 0x00d9, 0x1ad9: 0x0f99, 0x1ada: 0x2039, 0x1adb: 0x0269, 0x1adc: 0x01d9, 0x1add: 0x0fa9,\n\t0x1ade: 0x0fb9, 0x1adf: 0x1089, 0x1ae0: 0x0279, 0x1ae1: 0x0369, 0x1ae2: 0x0289, 0x1ae3: 0x13d1,\n\t0x1ae4: 0xba81, 0x1ae5: 0xba99, 0x1ae6: 0x0040, 0x1ae7: 0x0040, 0x1ae8: 0xbab1, 0x1ae9: 0x1099,\n\t0x1aea: 0x10b1, 0x1aeb: 0x10c9, 0x1aec: 0xbac9, 0x1aed: 0xbae1, 0x1aee: 0xbaf9, 0x1aef: 0x1429,\n\t0x1af0: 0x1a31, 0x1af1: 0xbb11, 0x1af2: 0xbb29, 0x1af3: 0xbb41, 0x1af4: 0xbb59, 0x1af5: 0xbb71,\n\t0x1af6: 0xbb89, 0x1af7: 0x2109, 0x1af8: 0x1111, 0x1af9: 0x1429, 0x1afa: 0xbba1, 0x1afb: 0xbbb9,\n\t0x1afc: 0xbbd1, 0x1afd: 0x10e1, 0x1afe: 0x10f9, 0x1aff: 0xbbe9,\n\t// Block 0x6c, offset 0x1b00\n\t0x1b00: 0x2079, 0x1b01: 0xbc01, 0x1b02: 0xbab1, 0x1b03: 0x1099, 0x1b04: 0x10b1, 0x1b05: 0x10c9,\n\t0x1b06: 0xbac9, 0x1b07: 0xbae1, 0x1b08: 0xbaf9, 0x1b09: 0x1429, 0x1b0a: 0x1a31, 0x1b0b: 0xbb11,\n\t0x1b0c: 0xbb29, 0x1b0d: 0xbb41, 0x1b0e: 0xbb59, 0x1b0f: 0xbb71, 0x1b10: 0xbb89, 0x1b11: 0x2109,\n\t0x1b12: 0x1111, 0x1b13: 0xbba1, 0x1b14: 0xbba1, 0x1b15: 0xbbb9, 0x1b16: 0xbbd1, 0x1b17: 0x10e1,\n\t0x1b18: 0x10f9, 0x1b19: 0xbbe9, 0x1b1a: 0x2079, 0x1b1b: 0xbc21, 0x1b1c: 0xbac9, 0x1b1d: 0x1429,\n\t0x1b1e: 0xbb11, 0x1b1f: 0x10e1, 0x1b20: 0x1111, 0x1b21: 0x2109, 0x1b22: 0xbab1, 0x1b23: 0x1099,\n\t0x1b24: 0x10b1, 0x1b25: 0x10c9, 0x1b26: 0xbac9, 0x1b27: 0xbae1, 0x1b28: 0xbaf9, 0x1b29: 0x1429,\n\t0x1b2a: 0x1a31, 0x1b2b: 0xbb11, 0x1b2c: 0xbb29, 0x1b2d: 0xbb41, 0x1b2e: 0xbb59, 0x1b2f: 0xbb71,\n\t0x1b30: 0xbb89, 0x1b31: 0x2109, 0x1b32: 0x1111, 0x1b33: 0x1429, 0x1b34: 0xbba1, 0x1b35: 0xbbb9,\n\t0x1b36: 0xbbd1, 0x1b37: 0x10e1, 0x1b38: 0x10f9, 0x1b39: 0xbbe9, 0x1b3a: 0x2079, 0x1b3b: 0xbc01,\n\t0x1b3c: 0xbab1, 0x1b3d: 0x1099, 0x1b3e: 0x10b1, 0x1b3f: 0x10c9,\n\t// Block 0x6d, offset 0x1b40\n\t0x1b40: 0xbac9, 0x1b41: 0xbae1, 0x1b42: 0xbaf9, 0x1b43: 0x1429, 0x1b44: 0x1a31, 0x1b45: 0xbb11,\n\t0x1b46: 0xbb29, 0x1b47: 0xbb41, 0x1b48: 0xbb59, 0x1b49: 0xbb71, 0x1b4a: 0xbb89, 0x1b4b: 0x2109,\n\t0x1b4c: 0x1111, 0x1b4d: 0xbba1, 0x1b4e: 0xbba1, 0x1b4f: 0xbbb9, 0x1b50: 0xbbd1, 0x1b51: 0x10e1,\n\t0x1b52: 0x10f9, 0x1b53: 0xbbe9, 0x1b54: 0x2079, 0x1b55: 0xbc21, 0x1b56: 0xbac9, 0x1b57: 0x1429,\n\t0x1b58: 0xbb11, 0x1b59: 0x10e1, 0x1b5a: 0x1111, 0x1b5b: 0x2109, 0x1b5c: 0xbab1, 0x1b5d: 0x1099,\n\t0x1b5e: 0x10b1, 0x1b5f: 0x10c9, 0x1b60: 0xbac9, 0x1b61: 0xbae1, 0x1b62: 0xbaf9, 0x1b63: 0x1429,\n\t0x1b64: 0x1a31, 0x1b65: 0xbb11, 0x1b66: 0xbb29, 0x1b67: 0xbb41, 0x1b68: 0xbb59, 0x1b69: 0xbb71,\n\t0x1b6a: 0xbb89, 0x1b6b: 0x2109, 0x1b6c: 0x1111, 0x1b6d: 0x1429, 0x1b6e: 0xbba1, 0x1b6f: 0xbbb9,\n\t0x1b70: 0xbbd1, 0x1b71: 0x10e1, 0x1b72: 0x10f9, 0x1b73: 0xbbe9, 0x1b74: 0x2079, 0x1b75: 0xbc01,\n\t0x1b76: 0xbab1, 0x1b77: 0x1099, 0x1b78: 0x10b1, 0x1b79: 0x10c9, 0x1b7a: 0xbac9, 0x1b7b: 0xbae1,\n\t0x1b7c: 0xbaf9, 0x1b7d: 0x1429, 0x1b7e: 0x1a31, 0x1b7f: 0xbb11,\n\t// Block 0x6e, offset 0x1b80\n\t0x1b80: 0xbb29, 0x1b81: 0xbb41, 0x1b82: 0xbb59, 0x1b83: 0xbb71, 0x1b84: 0xbb89, 0x1b85: 0x2109,\n\t0x1b86: 0x1111, 0x1b87: 0xbba1, 0x1b88: 0xbba1, 0x1b89: 0xbbb9, 0x1b8a: 0xbbd1, 0x1b8b: 0x10e1,\n\t0x1b8c: 0x10f9, 0x1b8d: 0xbbe9, 0x1b8e: 0x2079, 0x1b8f: 0xbc21, 0x1b90: 0xbac9, 0x1b91: 0x1429,\n\t0x1b92: 0xbb11, 0x1b93: 0x10e1, 0x1b94: 0x1111, 0x1b95: 0x2109, 0x1b96: 0xbab1, 0x1b97: 0x1099,\n\t0x1b98: 0x10b1, 0x1b99: 0x10c9, 0x1b9a: 0xbac9, 0x1b9b: 0xbae1, 0x1b9c: 0xbaf9, 0x1b9d: 0x1429,\n\t0x1b9e: 0x1a31, 0x1b9f: 0xbb11, 0x1ba0: 0xbb29, 0x1ba1: 0xbb41, 0x1ba2: 0xbb59, 0x1ba3: 0xbb71,\n\t0x1ba4: 0xbb89, 0x1ba5: 0x2109, 0x1ba6: 0x1111, 0x1ba7: 0x1429, 0x1ba8: 0xbba1, 0x1ba9: 0xbbb9,\n\t0x1baa: 0xbbd1, 0x1bab: 0x10e1, 0x1bac: 0x10f9, 0x1bad: 0xbbe9, 0x1bae: 0x2079, 0x1baf: 0xbc01,\n\t0x1bb0: 0xbab1, 0x1bb1: 0x1099, 0x1bb2: 0x10b1, 0x1bb3: 0x10c9, 0x1bb4: 0xbac9, 0x1bb5: 0xbae1,\n\t0x1bb6: 0xbaf9, 0x1bb7: 0x1429, 0x1bb8: 0x1a31, 0x1bb9: 0xbb11, 0x1bba: 0xbb29, 0x1bbb: 0xbb41,\n\t0x1bbc: 0xbb59, 0x1bbd: 0xbb71, 0x1bbe: 0xbb89, 0x1bbf: 0x2109,\n\t// Block 0x6f, offset 0x1bc0\n\t0x1bc0: 0x1111, 0x1bc1: 0xbba1, 0x1bc2: 0xbba1, 0x1bc3: 0xbbb9, 0x1bc4: 0xbbd1, 0x1bc5: 0x10e1,\n\t0x1bc6: 0x10f9, 0x1bc7: 0xbbe9, 0x1bc8: 0x2079, 0x1bc9: 0xbc21, 0x1bca: 0xbac9, 0x1bcb: 0x1429,\n\t0x1bcc: 0xbb11, 0x1bcd: 0x10e1, 0x1bce: 0x1111, 0x1bcf: 0x2109, 0x1bd0: 0xbab1, 0x1bd1: 0x1099,\n\t0x1bd2: 0x10b1, 0x1bd3: 0x10c9, 0x1bd4: 0xbac9, 0x1bd5: 0xbae1, 0x1bd6: 0xbaf9, 0x1bd7: 0x1429,\n\t0x1bd8: 0x1a31, 0x1bd9: 0xbb11, 0x1bda: 0xbb29, 0x1bdb: 0xbb41, 0x1bdc: 0xbb59, 0x1bdd: 0xbb71,\n\t0x1bde: 0xbb89, 0x1bdf: 0x2109, 0x1be0: 0x1111, 0x1be1: 0x1429, 0x1be2: 0xbba1, 0x1be3: 0xbbb9,\n\t0x1be4: 0xbbd1, 0x1be5: 0x10e1, 0x1be6: 0x10f9, 0x1be7: 0xbbe9, 0x1be8: 0x2079, 0x1be9: 0xbc01,\n\t0x1bea: 0xbab1, 0x1beb: 0x1099, 0x1bec: 0x10b1, 0x1bed: 0x10c9, 0x1bee: 0xbac9, 0x1bef: 0xbae1,\n\t0x1bf0: 0xbaf9, 0x1bf1: 0x1429, 0x1bf2: 0x1a31, 0x1bf3: 0xbb11, 0x1bf4: 0xbb29, 0x1bf5: 0xbb41,\n\t0x1bf6: 0xbb59, 0x1bf7: 0xbb71, 0x1bf8: 0xbb89, 0x1bf9: 0x2109, 0x1bfa: 0x1111, 0x1bfb: 0xbba1,\n\t0x1bfc: 0xbba1, 0x1bfd: 0xbbb9, 0x1bfe: 0xbbd1, 0x1bff: 0x10e1,\n\t// Block 0x70, offset 0x1c00\n\t0x1c00: 0x10f9, 0x1c01: 0xbbe9, 0x1c02: 0x2079, 0x1c03: 0xbc21, 0x1c04: 0xbac9, 0x1c05: 0x1429,\n\t0x1c06: 0xbb11, 0x1c07: 0x10e1, 0x1c08: 0x1111, 0x1c09: 0x2109, 0x1c0a: 0xbc41, 0x1c0b: 0xbc41,\n\t0x1c0c: 0x0040, 0x1c0d: 0x0040, 0x1c0e: 0x1f41, 0x1c0f: 0x00c9, 0x1c10: 0x0069, 0x1c11: 0x0079,\n\t0x1c12: 0x1f51, 0x1c13: 0x1f61, 0x1c14: 0x1f71, 0x1c15: 0x1f81, 0x1c16: 0x1f91, 0x1c17: 0x1fa1,\n\t0x1c18: 0x1f41, 0x1c19: 0x00c9, 0x1c1a: 0x0069, 0x1c1b: 0x0079, 0x1c1c: 0x1f51, 0x1c1d: 0x1f61,\n\t0x1c1e: 0x1f71, 0x1c1f: 0x1f81, 0x1c20: 0x1f91, 0x1c21: 0x1fa1, 0x1c22: 0x1f41, 0x1c23: 0x00c9,\n\t0x1c24: 0x0069, 0x1c25: 0x0079, 0x1c26: 0x1f51, 0x1c27: 0x1f61, 0x1c28: 0x1f71, 0x1c29: 0x1f81,\n\t0x1c2a: 0x1f91, 0x1c2b: 0x1fa1, 0x1c2c: 0x1f41, 0x1c2d: 0x00c9, 0x1c2e: 0x0069, 0x1c2f: 0x0079,\n\t0x1c30: 0x1f51, 0x1c31: 0x1f61, 0x1c32: 0x1f71, 0x1c33: 0x1f81, 0x1c34: 0x1f91, 0x1c35: 0x1fa1,\n\t0x1c36: 0x1f41, 0x1c37: 0x00c9, 0x1c38: 0x0069, 0x1c39: 0x0079, 0x1c3a: 0x1f51, 0x1c3b: 0x1f61,\n\t0x1c3c: 0x1f71, 0x1c3d: 0x1f81, 0x1c3e: 0x1f91, 0x1c3f: 0x1fa1,\n\t// Block 0x71, offset 0x1c40\n\t0x1c40: 0xe115, 0x1c41: 0xe115, 0x1c42: 0xe135, 0x1c43: 0xe135, 0x1c44: 0xe115, 0x1c45: 0xe115,\n\t0x1c46: 0xe175, 0x1c47: 0xe175, 0x1c48: 0xe115, 0x1c49: 0xe115, 0x1c4a: 0xe135, 0x1c4b: 0xe135,\n\t0x1c4c: 0xe115, 0x1c4d: 0xe115, 0x1c4e: 0xe1f5, 0x1c4f: 0xe1f5, 0x1c50: 0xe115, 0x1c51: 0xe115,\n\t0x1c52: 0xe135, 0x1c53: 0xe135, 0x1c54: 0xe115, 0x1c55: 0xe115, 0x1c56: 0xe175, 0x1c57: 0xe175,\n\t0x1c58: 0xe115, 0x1c59: 0xe115, 0x1c5a: 0xe135, 0x1c5b: 0xe135, 0x1c5c: 0xe115, 0x1c5d: 0xe115,\n\t0x1c5e: 0x8b05, 0x1c5f: 0x8b05, 0x1c60: 0x04b5, 0x1c61: 0x04b5, 0x1c62: 0x0a08, 0x1c63: 0x0a08,\n\t0x1c64: 0x0a08, 0x1c65: 0x0a08, 0x1c66: 0x0a08, 0x1c67: 0x0a08, 0x1c68: 0x0a08, 0x1c69: 0x0a08,\n\t0x1c6a: 0x0a08, 0x1c6b: 0x0a08, 0x1c6c: 0x0a08, 0x1c6d: 0x0a08, 0x1c6e: 0x0a08, 0x1c6f: 0x0a08,\n\t0x1c70: 0x0a08, 0x1c71: 0x0a08, 0x1c72: 0x0a08, 0x1c73: 0x0a08, 0x1c74: 0x0a08, 0x1c75: 0x0a08,\n\t0x1c76: 0x0a08, 0x1c77: 0x0a08, 0x1c78: 0x0a08, 0x1c79: 0x0a08, 0x1c7a: 0x0a08, 0x1c7b: 0x0a08,\n\t0x1c7c: 0x0a08, 0x1c7d: 0x0a08, 0x1c7e: 0x0a08, 0x1c7f: 0x0a08,\n\t// Block 0x72, offset 0x1c80\n\t0x1c80: 0xb189, 0x1c81: 0xb1a1, 0x1c82: 0xb201, 0x1c83: 0xb249, 0x1c84: 0x0040, 0x1c85: 0xb411,\n\t0x1c86: 0xb291, 0x1c87: 0xb219, 0x1c88: 0xb309, 0x1c89: 0xb429, 0x1c8a: 0xb399, 0x1c8b: 0xb3b1,\n\t0x1c8c: 0xb3c9, 0x1c8d: 0xb3e1, 0x1c8e: 0xb2a9, 0x1c8f: 0xb339, 0x1c90: 0xb369, 0x1c91: 0xb2d9,\n\t0x1c92: 0xb381, 0x1c93: 0xb279, 0x1c94: 0xb2c1, 0x1c95: 0xb1d1, 0x1c96: 0xb1e9, 0x1c97: 0xb231,\n\t0x1c98: 0xb261, 0x1c99: 0xb2f1, 0x1c9a: 0xb321, 0x1c9b: 0xb351, 0x1c9c: 0xbc59, 0x1c9d: 0x7949,\n\t0x1c9e: 0xbc71, 0x1c9f: 0xbc89, 0x1ca0: 0x0040, 0x1ca1: 0xb1a1, 0x1ca2: 0xb201, 0x1ca3: 0x0040,\n\t0x1ca4: 0xb3f9, 0x1ca5: 0x0040, 0x1ca6: 0x0040, 0x1ca7: 0xb219, 0x1ca8: 0x0040, 0x1ca9: 0xb429,\n\t0x1caa: 0xb399, 0x1cab: 0xb3b1, 0x1cac: 0xb3c9, 0x1cad: 0xb3e1, 0x1cae: 0xb2a9, 0x1caf: 0xb339,\n\t0x1cb0: 0xb369, 0x1cb1: 0xb2d9, 0x1cb2: 0xb381, 0x1cb3: 0x0040, 0x1cb4: 0xb2c1, 0x1cb5: 0xb1d1,\n\t0x1cb6: 0xb1e9, 0x1cb7: 0xb231, 0x1cb8: 0x0040, 0x1cb9: 0xb2f1, 0x1cba: 0x0040, 0x1cbb: 0xb351,\n\t0x1cbc: 0x0040, 0x1cbd: 0x0040, 0x1cbe: 0x0040, 0x1cbf: 0x0040,\n\t// Block 0x73, offset 0x1cc0\n\t0x1cc0: 0x0040, 0x1cc1: 0x0040, 0x1cc2: 0xb201, 0x1cc3: 0x0040, 0x1cc4: 0x0040, 0x1cc5: 0x0040,\n\t0x1cc6: 0x0040, 0x1cc7: 0xb219, 0x1cc8: 0x0040, 0x1cc9: 0xb429, 0x1cca: 0x0040, 0x1ccb: 0xb3b1,\n\t0x1ccc: 0x0040, 0x1ccd: 0xb3e1, 0x1cce: 0xb2a9, 0x1ccf: 0xb339, 0x1cd0: 0x0040, 0x1cd1: 0xb2d9,\n\t0x1cd2: 0xb381, 0x1cd3: 0x0040, 0x1cd4: 0xb2c1, 0x1cd5: 0x0040, 0x1cd6: 0x0040, 0x1cd7: 0xb231,\n\t0x1cd8: 0x0040, 0x1cd9: 0xb2f1, 0x1cda: 0x0040, 0x1cdb: 0xb351, 0x1cdc: 0x0040, 0x1cdd: 0x7949,\n\t0x1cde: 0x0040, 0x1cdf: 0xbc89, 0x1ce0: 0x0040, 0x1ce1: 0xb1a1, 0x1ce2: 0xb201, 0x1ce3: 0x0040,\n\t0x1ce4: 0xb3f9, 0x1ce5: 0x0040, 0x1ce6: 0x0040, 0x1ce7: 0xb219, 0x1ce8: 0xb309, 0x1ce9: 0xb429,\n\t0x1cea: 0xb399, 0x1ceb: 0x0040, 0x1cec: 0xb3c9, 0x1ced: 0xb3e1, 0x1cee: 0xb2a9, 0x1cef: 0xb339,\n\t0x1cf0: 0xb369, 0x1cf1: 0xb2d9, 0x1cf2: 0xb381, 0x1cf3: 0x0040, 0x1cf4: 0xb2c1, 0x1cf5: 0xb1d1,\n\t0x1cf6: 0xb1e9, 0x1cf7: 0xb231, 0x1cf8: 0x0040, 0x1cf9: 0xb2f1, 0x1cfa: 0xb321, 0x1cfb: 0xb351,\n\t0x1cfc: 0xbc59, 0x1cfd: 0x0040, 0x1cfe: 0xbc71, 0x1cff: 0x0040,\n\t// Block 0x74, offset 0x1d00\n\t0x1d00: 0xb189, 0x1d01: 0xb1a1, 0x1d02: 0xb201, 0x1d03: 0xb249, 0x1d04: 0xb3f9, 0x1d05: 0xb411,\n\t0x1d06: 0xb291, 0x1d07: 0xb219, 0x1d08: 0xb309, 0x1d09: 0xb429, 0x1d0a: 0x0040, 0x1d0b: 0xb3b1,\n\t0x1d0c: 0xb3c9, 0x1d0d: 0xb3e1, 0x1d0e: 0xb2a9, 0x1d0f: 0xb339, 0x1d10: 0xb369, 0x1d11: 0xb2d9,\n\t0x1d12: 0xb381, 0x1d13: 0xb279, 0x1d14: 0xb2c1, 0x1d15: 0xb1d1, 0x1d16: 0xb1e9, 0x1d17: 0xb231,\n\t0x1d18: 0xb261, 0x1d19: 0xb2f1, 0x1d1a: 0xb321, 0x1d1b: 0xb351, 0x1d1c: 0x0040, 0x1d1d: 0x0040,\n\t0x1d1e: 0x0040, 0x1d1f: 0x0040, 0x1d20: 0x0040, 0x1d21: 0xb1a1, 0x1d22: 0xb201, 0x1d23: 0xb249,\n\t0x1d24: 0x0040, 0x1d25: 0xb411, 0x1d26: 0xb291, 0x1d27: 0xb219, 0x1d28: 0xb309, 0x1d29: 0xb429,\n\t0x1d2a: 0x0040, 0x1d2b: 0xb3b1, 0x1d2c: 0xb3c9, 0x1d2d: 0xb3e1, 0x1d2e: 0xb2a9, 0x1d2f: 0xb339,\n\t0x1d30: 0xb369, 0x1d31: 0xb2d9, 0x1d32: 0xb381, 0x1d33: 0xb279, 0x1d34: 0xb2c1, 0x1d35: 0xb1d1,\n\t0x1d36: 0xb1e9, 0x1d37: 0xb231, 0x1d38: 0xb261, 0x1d39: 0xb2f1, 0x1d3a: 0xb321, 0x1d3b: 0xb351,\n\t0x1d3c: 0x0040, 0x1d3d: 0x0040, 0x1d3e: 0x0040, 0x1d3f: 0x0040,\n\t// Block 0x75, offset 0x1d40\n\t0x1d40: 0x0040, 0x1d41: 0xbca2, 0x1d42: 0xbcba, 0x1d43: 0xbcd2, 0x1d44: 0xbcea, 0x1d45: 0xbd02,\n\t0x1d46: 0xbd1a, 0x1d47: 0xbd32, 0x1d48: 0xbd4a, 0x1d49: 0xbd62, 0x1d4a: 0xbd7a, 0x1d4b: 0x0018,\n\t0x1d4c: 0x0018, 0x1d4d: 0x0040, 0x1d4e: 0x0040, 0x1d4f: 0x0040, 0x1d50: 0xbd92, 0x1d51: 0xbdb2,\n\t0x1d52: 0xbdd2, 0x1d53: 0xbdf2, 0x1d54: 0xbe12, 0x1d55: 0xbe32, 0x1d56: 0xbe52, 0x1d57: 0xbe72,\n\t0x1d58: 0xbe92, 0x1d59: 0xbeb2, 0x1d5a: 0xbed2, 0x1d5b: 0xbef2, 0x1d5c: 0xbf12, 0x1d5d: 0xbf32,\n\t0x1d5e: 0xbf52, 0x1d5f: 0xbf72, 0x1d60: 0xbf92, 0x1d61: 0xbfb2, 0x1d62: 0xbfd2, 0x1d63: 0xbff2,\n\t0x1d64: 0xc012, 0x1d65: 0xc032, 0x1d66: 0xc052, 0x1d67: 0xc072, 0x1d68: 0xc092, 0x1d69: 0xc0b2,\n\t0x1d6a: 0xc0d1, 0x1d6b: 0x1159, 0x1d6c: 0x0269, 0x1d6d: 0x6671, 0x1d6e: 0xc111, 0x1d6f: 0x0040,\n\t0x1d70: 0x0039, 0x1d71: 0x0ee9, 0x1d72: 0x1159, 0x1d73: 0x0ef9, 0x1d74: 0x0f09, 0x1d75: 0x1199,\n\t0x1d76: 0x0f31, 0x1d77: 0x0249, 0x1d78: 0x0f41, 0x1d79: 0x0259, 0x1d7a: 0x0f51, 0x1d7b: 0x0359,\n\t0x1d7c: 0x0f61, 0x1d7d: 0x0f71, 0x1d7e: 0x00d9, 0x1d7f: 0x0f99,\n\t// Block 0x76, offset 0x1d80\n\t0x1d80: 0x2039, 0x1d81: 0x0269, 0x1d82: 0x01d9, 0x1d83: 0x0fa9, 0x1d84: 0x0fb9, 0x1d85: 0x1089,\n\t0x1d86: 0x0279, 0x1d87: 0x0369, 0x1d88: 0x0289, 0x1d89: 0x13d1, 0x1d8a: 0xc129, 0x1d8b: 0x65b1,\n\t0x1d8c: 0xc141, 0x1d8d: 0x1441, 0x1d8e: 0xc159, 0x1d8f: 0xc179, 0x1d90: 0x0018, 0x1d91: 0x0018,\n\t0x1d92: 0x0018, 0x1d93: 0x0018, 0x1d94: 0x0018, 0x1d95: 0x0018, 0x1d96: 0x0018, 0x1d97: 0x0018,\n\t0x1d98: 0x0018, 0x1d99: 0x0018, 0x1d9a: 0x0018, 0x1d9b: 0x0018, 0x1d9c: 0x0018, 0x1d9d: 0x0018,\n\t0x1d9e: 0x0018, 0x1d9f: 0x0018, 0x1da0: 0x0018, 0x1da1: 0x0018, 0x1da2: 0x0018, 0x1da3: 0x0018,\n\t0x1da4: 0x0018, 0x1da5: 0x0018, 0x1da6: 0x0018, 0x1da7: 0x0018, 0x1da8: 0x0018, 0x1da9: 0x0018,\n\t0x1daa: 0xc191, 0x1dab: 0xc1a9, 0x1dac: 0x0040, 0x1dad: 0x0040, 0x1dae: 0x0040, 0x1daf: 0x0040,\n\t0x1db0: 0x0018, 0x1db1: 0x0018, 0x1db2: 0x0018, 0x1db3: 0x0018, 0x1db4: 0x0018, 0x1db5: 0x0018,\n\t0x1db6: 0x0018, 0x1db7: 0x0018, 0x1db8: 0x0018, 0x1db9: 0x0018, 0x1dba: 0x0018, 0x1dbb: 0x0018,\n\t0x1dbc: 0x0018, 0x1dbd: 0x0018, 0x1dbe: 0x0018, 0x1dbf: 0x0018,\n\t// Block 0x77, offset 0x1dc0\n\t0x1dc0: 0xc1d9, 0x1dc1: 0xc211, 0x1dc2: 0xc249, 0x1dc3: 0x0040, 0x1dc4: 0x0040, 0x1dc5: 0x0040,\n\t0x1dc6: 0x0040, 0x1dc7: 0x0040, 0x1dc8: 0x0040, 0x1dc9: 0x0040, 0x1dca: 0x0040, 0x1dcb: 0x0040,\n\t0x1dcc: 0x0040, 0x1dcd: 0x0040, 0x1dce: 0x0040, 0x1dcf: 0x0040, 0x1dd0: 0xc269, 0x1dd1: 0xc289,\n\t0x1dd2: 0xc2a9, 0x1dd3: 0xc2c9, 0x1dd4: 0xc2e9, 0x1dd5: 0xc309, 0x1dd6: 0xc329, 0x1dd7: 0xc349,\n\t0x1dd8: 0xc369, 0x1dd9: 0xc389, 0x1dda: 0xc3a9, 0x1ddb: 0xc3c9, 0x1ddc: 0xc3e9, 0x1ddd: 0xc409,\n\t0x1dde: 0xc429, 0x1ddf: 0xc449, 0x1de0: 0xc469, 0x1de1: 0xc489, 0x1de2: 0xc4a9, 0x1de3: 0xc4c9,\n\t0x1de4: 0xc4e9, 0x1de5: 0xc509, 0x1de6: 0xc529, 0x1de7: 0xc549, 0x1de8: 0xc569, 0x1de9: 0xc589,\n\t0x1dea: 0xc5a9, 0x1deb: 0xc5c9, 0x1dec: 0xc5e9, 0x1ded: 0xc609, 0x1dee: 0xc629, 0x1def: 0xc649,\n\t0x1df0: 0xc669, 0x1df1: 0xc689, 0x1df2: 0xc6a9, 0x1df3: 0xc6c9, 0x1df4: 0xc6e9, 0x1df5: 0xc709,\n\t0x1df6: 0xc729, 0x1df7: 0xc749, 0x1df8: 0xc769, 0x1df9: 0xc789, 0x1dfa: 0xc7a9, 0x1dfb: 0xc7c9,\n\t0x1dfc: 0x0040, 0x1dfd: 0x0040, 0x1dfe: 0x0040, 0x1dff: 0x0040,\n\t// Block 0x78, offset 0x1e00\n\t0x1e00: 0xcaf9, 0x1e01: 0xcb19, 0x1e02: 0xcb39, 0x1e03: 0x8b1d, 0x1e04: 0xcb59, 0x1e05: 0xcb79,\n\t0x1e06: 0xcb99, 0x1e07: 0xcbb9, 0x1e08: 0xcbd9, 0x1e09: 0xcbf9, 0x1e0a: 0xcc19, 0x1e0b: 0xcc39,\n\t0x1e0c: 0xcc59, 0x1e0d: 0x8b3d, 0x1e0e: 0xcc79, 0x1e0f: 0xcc99, 0x1e10: 0xccb9, 0x1e11: 0xccd9,\n\t0x1e12: 0x8b5d, 0x1e13: 0xccf9, 0x1e14: 0xcd19, 0x1e15: 0xc429, 0x1e16: 0x8b7d, 0x1e17: 0xcd39,\n\t0x1e18: 0xcd59, 0x1e19: 0xcd79, 0x1e1a: 0xcd99, 0x1e1b: 0xcdb9, 0x1e1c: 0x8b9d, 0x1e1d: 0xcdd9,\n\t0x1e1e: 0xcdf9, 0x1e1f: 0xce19, 0x1e20: 0xce39, 0x1e21: 0xce59, 0x1e22: 0xc789, 0x1e23: 0xce79,\n\t0x1e24: 0xce99, 0x1e25: 0xceb9, 0x1e26: 0xced9, 0x1e27: 0xcef9, 0x1e28: 0xcf19, 0x1e29: 0xcf39,\n\t0x1e2a: 0xcf59, 0x1e2b: 0xcf79, 0x1e2c: 0xcf99, 0x1e2d: 0xcfb9, 0x1e2e: 0xcfd9, 0x1e2f: 0xcff9,\n\t0x1e30: 0xd019, 0x1e31: 0xd039, 0x1e32: 0xd039, 0x1e33: 0xd039, 0x1e34: 0x8bbd, 0x1e35: 0xd059,\n\t0x1e36: 0xd079, 0x1e37: 0xd099, 0x1e38: 0x8bdd, 0x1e39: 0xd0b9, 0x1e3a: 0xd0d9, 0x1e3b: 0xd0f9,\n\t0x1e3c: 0xd119, 0x1e3d: 0xd139, 0x1e3e: 0xd159, 0x1e3f: 0xd179,\n\t// Block 0x79, offset 0x1e40\n\t0x1e40: 0xd199, 0x1e41: 0xd1b9, 0x1e42: 0xd1d9, 0x1e43: 0xd1f9, 0x1e44: 0xd219, 0x1e45: 0xd239,\n\t0x1e46: 0xd239, 0x1e47: 0xd259, 0x1e48: 0xd279, 0x1e49: 0xd299, 0x1e4a: 0xd2b9, 0x1e4b: 0xd2d9,\n\t0x1e4c: 0xd2f9, 0x1e4d: 0xd319, 0x1e4e: 0xd339, 0x1e4f: 0xd359, 0x1e50: 0xd379, 0x1e51: 0xd399,\n\t0x1e52: 0xd3b9, 0x1e53: 0xd3d9, 0x1e54: 0xd3f9, 0x1e55: 0xd419, 0x1e56: 0xd439, 0x1e57: 0xd459,\n\t0x1e58: 0xd479, 0x1e59: 0x8bfd, 0x1e5a: 0xd499, 0x1e5b: 0xd4b9, 0x1e5c: 0xd4d9, 0x1e5d: 0xc309,\n\t0x1e5e: 0xd4f9, 0x1e5f: 0xd519, 0x1e60: 0x8c1d, 0x1e61: 0x8c3d, 0x1e62: 0xd539, 0x1e63: 0xd559,\n\t0x1e64: 0xd579, 0x1e65: 0xd599, 0x1e66: 0xd5b9, 0x1e67: 0xd5d9, 0x1e68: 0x2040, 0x1e69: 0xd5f9,\n\t0x1e6a: 0xd619, 0x1e6b: 0xd619, 0x1e6c: 0x8c5d, 0x1e6d: 0xd639, 0x1e6e: 0xd659, 0x1e6f: 0xd679,\n\t0x1e70: 0xd699, 0x1e71: 0x8c7d, 0x1e72: 0xd6b9, 0x1e73: 0xd6d9, 0x1e74: 0x2040, 0x1e75: 0xd6f9,\n\t0x1e76: 0xd719, 0x1e77: 0xd739, 0x1e78: 0xd759, 0x1e79: 0xd779, 0x1e7a: 0xd799, 0x1e7b: 0x8c9d,\n\t0x1e7c: 0xd7b9, 0x1e7d: 0x8cbd, 0x1e7e: 0xd7d9, 0x1e7f: 0xd7f9,\n\t// Block 0x7a, offset 0x1e80\n\t0x1e80: 0xd819, 0x1e81: 0xd839, 0x1e82: 0xd859, 0x1e83: 0xd879, 0x1e84: 0xd899, 0x1e85: 0xd8b9,\n\t0x1e86: 0xd8d9, 0x1e87: 0xd8f9, 0x1e88: 0xd919, 0x1e89: 0x8cdd, 0x1e8a: 0xd939, 0x1e8b: 0xd959,\n\t0x1e8c: 0xd979, 0x1e8d: 0xd999, 0x1e8e: 0xd9b9, 0x1e8f: 0x8cfd, 0x1e90: 0xd9d9, 0x1e91: 0x8d1d,\n\t0x1e92: 0x8d3d, 0x1e93: 0xd9f9, 0x1e94: 0xda19, 0x1e95: 0xda19, 0x1e96: 0xda39, 0x1e97: 0x8d5d,\n\t0x1e98: 0x8d7d, 0x1e99: 0xda59, 0x1e9a: 0xda79, 0x1e9b: 0xda99, 0x1e9c: 0xdab9, 0x1e9d: 0xdad9,\n\t0x1e9e: 0xdaf9, 0x1e9f: 0xdb19, 0x1ea0: 0xdb39, 0x1ea1: 0xdb59, 0x1ea2: 0xdb79, 0x1ea3: 0xdb99,\n\t0x1ea4: 0x8d9d, 0x1ea5: 0xdbb9, 0x1ea6: 0xdbd9, 0x1ea7: 0xdbf9, 0x1ea8: 0xdc19, 0x1ea9: 0xdbf9,\n\t0x1eaa: 0xdc39, 0x1eab: 0xdc59, 0x1eac: 0xdc79, 0x1ead: 0xdc99, 0x1eae: 0xdcb9, 0x1eaf: 0xdcd9,\n\t0x1eb0: 0xdcf9, 0x1eb1: 0xdd19, 0x1eb2: 0xdd39, 0x1eb3: 0xdd59, 0x1eb4: 0xdd79, 0x1eb5: 0xdd99,\n\t0x1eb6: 0xddb9, 0x1eb7: 0xddd9, 0x1eb8: 0x8dbd, 0x1eb9: 0xddf9, 0x1eba: 0xde19, 0x1ebb: 0xde39,\n\t0x1ebc: 0xde59, 0x1ebd: 0xde79, 0x1ebe: 0x8ddd, 0x1ebf: 0xde99,\n\t// Block 0x7b, offset 0x1ec0\n\t0x1ec0: 0xe599, 0x1ec1: 0xe5b9, 0x1ec2: 0xe5d9, 0x1ec3: 0xe5f9, 0x1ec4: 0xe619, 0x1ec5: 0xe639,\n\t0x1ec6: 0x8efd, 0x1ec7: 0xe659, 0x1ec8: 0xe679, 0x1ec9: 0xe699, 0x1eca: 0xe6b9, 0x1ecb: 0xe6d9,\n\t0x1ecc: 0xe6f9, 0x1ecd: 0x8f1d, 0x1ece: 0xe719, 0x1ecf: 0xe739, 0x1ed0: 0x8f3d, 0x1ed1: 0x8f5d,\n\t0x1ed2: 0xe759, 0x1ed3: 0xe779, 0x1ed4: 0xe799, 0x1ed5: 0xe7b9, 0x1ed6: 0xe7d9, 0x1ed7: 0xe7f9,\n\t0x1ed8: 0xe819, 0x1ed9: 0xe839, 0x1eda: 0xe859, 0x1edb: 0x8f7d, 0x1edc: 0xe879, 0x1edd: 0x8f9d,\n\t0x1ede: 0xe899, 0x1edf: 0x2040, 0x1ee0: 0xe8b9, 0x1ee1: 0xe8d9, 0x1ee2: 0xe8f9, 0x1ee3: 0x8fbd,\n\t0x1ee4: 0xe919, 0x1ee5: 0xe939, 0x1ee6: 0x8fdd, 0x1ee7: 0x8ffd, 0x1ee8: 0xe959, 0x1ee9: 0xe979,\n\t0x1eea: 0xe999, 0x1eeb: 0xe9b9, 0x1eec: 0xe9d9, 0x1eed: 0xe9d9, 0x1eee: 0xe9f9, 0x1eef: 0xea19,\n\t0x1ef0: 0xea39, 0x1ef1: 0xea59, 0x1ef2: 0xea79, 0x1ef3: 0xea99, 0x1ef4: 0xeab9, 0x1ef5: 0x901d,\n\t0x1ef6: 0xead9, 0x1ef7: 0x903d, 0x1ef8: 0xeaf9, 0x1ef9: 0x905d, 0x1efa: 0xeb19, 0x1efb: 0x907d,\n\t0x1efc: 0x909d, 0x1efd: 0x90bd, 0x1efe: 0xeb39, 0x1eff: 0xeb59,\n\t// Block 0x7c, offset 0x1f00\n\t0x1f00: 0xeb79, 0x1f01: 0x90dd, 0x1f02: 0x90fd, 0x1f03: 0x911d, 0x1f04: 0x913d, 0x1f05: 0xeb99,\n\t0x1f06: 0xebb9, 0x1f07: 0xebb9, 0x1f08: 0xebd9, 0x1f09: 0xebf9, 0x1f0a: 0xec19, 0x1f0b: 0xec39,\n\t0x1f0c: 0xec59, 0x1f0d: 0x915d, 0x1f0e: 0xec79, 0x1f0f: 0xec99, 0x1f10: 0xecb9, 0x1f11: 0xecd9,\n\t0x1f12: 0x917d, 0x1f13: 0xecf9, 0x1f14: 0x919d, 0x1f15: 0x91bd, 0x1f16: 0xed19, 0x1f17: 0xed39,\n\t0x1f18: 0xed59, 0x1f19: 0xed79, 0x1f1a: 0xed99, 0x1f1b: 0xedb9, 0x1f1c: 0x91dd, 0x1f1d: 0x91fd,\n\t0x1f1e: 0x921d, 0x1f1f: 0x2040, 0x1f20: 0xedd9, 0x1f21: 0x923d, 0x1f22: 0xedf9, 0x1f23: 0xee19,\n\t0x1f24: 0xee39, 0x1f25: 0x925d, 0x1f26: 0xee59, 0x1f27: 0xee79, 0x1f28: 0xee99, 0x1f29: 0xeeb9,\n\t0x1f2a: 0xeed9, 0x1f2b: 0x927d, 0x1f2c: 0xeef9, 0x1f2d: 0xef19, 0x1f2e: 0xef39, 0x1f2f: 0xef59,\n\t0x1f30: 0xef79, 0x1f31: 0xef99, 0x1f32: 0x929d, 0x1f33: 0x92bd, 0x1f34: 0xefb9, 0x1f35: 0x92dd,\n\t0x1f36: 0xefd9, 0x1f37: 0x92fd, 0x1f38: 0xeff9, 0x1f39: 0xf019, 0x1f3a: 0xf039, 0x1f3b: 0x931d,\n\t0x1f3c: 0x933d, 0x1f3d: 0xf059, 0x1f3e: 0x935d, 0x1f3f: 0xf079,\n\t// Block 0x7d, offset 0x1f40\n\t0x1f40: 0xf6b9, 0x1f41: 0xf6d9, 0x1f42: 0xf6f9, 0x1f43: 0xf719, 0x1f44: 0xf739, 0x1f45: 0x951d,\n\t0x1f46: 0xf759, 0x1f47: 0xf779, 0x1f48: 0xf799, 0x1f49: 0xf7b9, 0x1f4a: 0xf7d9, 0x1f4b: 0x953d,\n\t0x1f4c: 0x955d, 0x1f4d: 0xf7f9, 0x1f4e: 0xf819, 0x1f4f: 0xf839, 0x1f50: 0xf859, 0x1f51: 0xf879,\n\t0x1f52: 0xf899, 0x1f53: 0x957d, 0x1f54: 0xf8b9, 0x1f55: 0xf8d9, 0x1f56: 0xf8f9, 0x1f57: 0xf919,\n\t0x1f58: 0x959d, 0x1f59: 0x95bd, 0x1f5a: 0xf939, 0x1f5b: 0xf959, 0x1f5c: 0xf979, 0x1f5d: 0x95dd,\n\t0x1f5e: 0xf999, 0x1f5f: 0xf9b9, 0x1f60: 0x6815, 0x1f61: 0x95fd, 0x1f62: 0xf9d9, 0x1f63: 0xf9f9,\n\t0x1f64: 0xfa19, 0x1f65: 0x961d, 0x1f66: 0xfa39, 0x1f67: 0xfa59, 0x1f68: 0xfa79, 0x1f69: 0xfa99,\n\t0x1f6a: 0xfab9, 0x1f6b: 0xfad9, 0x1f6c: 0xfaf9, 0x1f6d: 0x963d, 0x1f6e: 0xfb19, 0x1f6f: 0xfb39,\n\t0x1f70: 0xfb59, 0x1f71: 0x965d, 0x1f72: 0xfb79, 0x1f73: 0xfb99, 0x1f74: 0xfbb9, 0x1f75: 0xfbd9,\n\t0x1f76: 0x7b35, 0x1f77: 0x967d, 0x1f78: 0xfbf9, 0x1f79: 0xfc19, 0x1f7a: 0xfc39, 0x1f7b: 0x969d,\n\t0x1f7c: 0xfc59, 0x1f7d: 0x96bd, 0x1f7e: 0xfc79, 0x1f7f: 0xfc79,\n\t// Block 0x7e, offset 0x1f80\n\t0x1f80: 0xfc99, 0x1f81: 0x96dd, 0x1f82: 0xfcb9, 0x1f83: 0xfcd9, 0x1f84: 0xfcf9, 0x1f85: 0xfd19,\n\t0x1f86: 0xfd39, 0x1f87: 0xfd59, 0x1f88: 0xfd79, 0x1f89: 0x96fd, 0x1f8a: 0xfd99, 0x1f8b: 0xfdb9,\n\t0x1f8c: 0xfdd9, 0x1f8d: 0xfdf9, 0x1f8e: 0xfe19, 0x1f8f: 0xfe39, 0x1f90: 0x971d, 0x1f91: 0xfe59,\n\t0x1f92: 0x973d, 0x1f93: 0x975d, 0x1f94: 0x977d, 0x1f95: 0xfe79, 0x1f96: 0xfe99, 0x1f97: 0xfeb9,\n\t0x1f98: 0xfed9, 0x1f99: 0xfef9, 0x1f9a: 0xff19, 0x1f9b: 0xff39, 0x1f9c: 0xff59, 0x1f9d: 0x979d,\n\t0x1f9e: 0x0040, 0x1f9f: 0x0040, 0x1fa0: 0x0040, 0x1fa1: 0x0040, 0x1fa2: 0x0040, 0x1fa3: 0x0040,\n\t0x1fa4: 0x0040, 0x1fa5: 0x0040, 0x1fa6: 0x0040, 0x1fa7: 0x0040, 0x1fa8: 0x0040, 0x1fa9: 0x0040,\n\t0x1faa: 0x0040, 0x1fab: 0x0040, 0x1fac: 0x0040, 0x1fad: 0x0040, 0x1fae: 0x0040, 0x1faf: 0x0040,\n\t0x1fb0: 0x0040, 0x1fb1: 0x0040, 0x1fb2: 0x0040, 0x1fb3: 0x0040, 0x1fb4: 0x0040, 0x1fb5: 0x0040,\n\t0x1fb6: 0x0040, 0x1fb7: 0x0040, 0x1fb8: 0x0040, 0x1fb9: 0x0040, 0x1fba: 0x0040, 0x1fbb: 0x0040,\n\t0x1fbc: 0x0040, 0x1fbd: 0x0040, 0x1fbe: 0x0040, 0x1fbf: 0x0040,\n}\n\n// idnaIndex: 36 blocks, 2304 entries, 4608 bytes\n// Block 0 is the zero block.\nvar idnaIndex = [2304]uint16{\n\t// Block 0x0, offset 0x0\n\t// Block 0x1, offset 0x40\n\t// Block 0x2, offset 0x80\n\t// Block 0x3, offset 0xc0\n\t0xc2: 0x01, 0xc3: 0x7d, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x04, 0xc7: 0x05,\n\t0xc8: 0x06, 0xc9: 0x7e, 0xca: 0x7f, 0xcb: 0x07, 0xcc: 0x80, 0xcd: 0x08, 0xce: 0x09, 0xcf: 0x0a,\n\t0xd0: 0x81, 0xd1: 0x0b, 0xd2: 0x0c, 0xd3: 0x0d, 0xd4: 0x0e, 0xd5: 0x82, 0xd6: 0x83, 0xd7: 0x84,\n\t0xd8: 0x0f, 0xd9: 0x10, 0xda: 0x85, 0xdb: 0x11, 0xdc: 0x12, 0xdd: 0x86, 0xde: 0x87, 0xdf: 0x88,\n\t0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, 0xe4: 0x06, 0xe5: 0x07, 0xe6: 0x07, 0xe7: 0x07,\n\t0xe8: 0x07, 0xe9: 0x08, 0xea: 0x09, 0xeb: 0x07, 0xec: 0x07, 0xed: 0x0a, 0xee: 0x0b, 0xef: 0x0c,\n\t0xf0: 0x1d, 0xf1: 0x1e, 0xf2: 0x1e, 0xf3: 0x20, 0xf4: 0x21,\n\t// Block 0x4, offset 0x100\n\t0x120: 0x89, 0x121: 0x13, 0x122: 0x8a, 0x123: 0x8b, 0x124: 0x8c, 0x125: 0x14, 0x126: 0x15, 0x127: 0x16,\n\t0x128: 0x17, 0x129: 0x18, 0x12a: 0x19, 0x12b: 0x1a, 0x12c: 0x1b, 0x12d: 0x1c, 0x12e: 0x1d, 0x12f: 0x8d,\n\t0x130: 0x8e, 0x131: 0x1e, 0x132: 0x1f, 0x133: 0x20, 0x134: 0x8f, 0x135: 0x21, 0x136: 0x90, 0x137: 0x91,\n\t0x138: 0x92, 0x139: 0x93, 0x13a: 0x22, 0x13b: 0x94, 0x13c: 0x95, 0x13d: 0x23, 0x13e: 0x24, 0x13f: 0x96,\n\t// Block 0x5, offset 0x140\n\t0x140: 0x97, 0x141: 0x98, 0x142: 0x99, 0x143: 0x9a, 0x144: 0x9b, 0x145: 0x9c, 0x146: 0x9d, 0x147: 0x9e,\n\t0x148: 0x9f, 0x149: 0xa0, 0x14a: 0xa1, 0x14b: 0xa2, 0x14c: 0xa3, 0x14d: 0xa4, 0x14e: 0xa5, 0x14f: 0xa6,\n\t0x150: 0xa7, 0x151: 0x9f, 0x152: 0x9f, 0x153: 0x9f, 0x154: 0x9f, 0x155: 0x9f, 0x156: 0x9f, 0x157: 0x9f,\n\t0x158: 0x9f, 0x159: 0xa8, 0x15a: 0xa9, 0x15b: 0xaa, 0x15c: 0xab, 0x15d: 0xac, 0x15e: 0xad, 0x15f: 0xae,\n\t0x160: 0xaf, 0x161: 0xb0, 0x162: 0xb1, 0x163: 0xb2, 0x164: 0xb3, 0x165: 0xb4, 0x166: 0xb5, 0x167: 0xb6,\n\t0x168: 0xb7, 0x169: 0xb8, 0x16a: 0xb9, 0x16b: 0xba, 0x16c: 0xbb, 0x16d: 0xbc, 0x16e: 0xbd, 0x16f: 0xbe,\n\t0x170: 0xbf, 0x171: 0xc0, 0x172: 0xc1, 0x173: 0xc2, 0x174: 0x25, 0x175: 0x26, 0x176: 0x27, 0x177: 0xc3,\n\t0x178: 0x28, 0x179: 0x28, 0x17a: 0x29, 0x17b: 0x28, 0x17c: 0xc4, 0x17d: 0x2a, 0x17e: 0x2b, 0x17f: 0x2c,\n\t// Block 0x6, offset 0x180\n\t0x180: 0x2d, 0x181: 0x2e, 0x182: 0x2f, 0x183: 0xc5, 0x184: 0x30, 0x185: 0x31, 0x186: 0xc6, 0x187: 0x9b,\n\t0x188: 0xc7, 0x189: 0xc8, 0x18a: 0x9b, 0x18b: 0x9b, 0x18c: 0xc9, 0x18d: 0x9b, 0x18e: 0x9b, 0x18f: 0x9b,\n\t0x190: 0xca, 0x191: 0x32, 0x192: 0x33, 0x193: 0x34, 0x194: 0x9b, 0x195: 0x9b, 0x196: 0x9b, 0x197: 0x9b,\n\t0x198: 0x9b, 0x199: 0x9b, 0x19a: 0x9b, 0x19b: 0x9b, 0x19c: 0x9b, 0x19d: 0x9b, 0x19e: 0x9b, 0x19f: 0x9b,\n\t0x1a0: 0x9b, 0x1a1: 0x9b, 0x1a2: 0x9b, 0x1a3: 0x9b, 0x1a4: 0x9b, 0x1a5: 0x9b, 0x1a6: 0x9b, 0x1a7: 0x9b,\n\t0x1a8: 0xcb, 0x1a9: 0xcc, 0x1aa: 0x9b, 0x1ab: 0xcd, 0x1ac: 0x9b, 0x1ad: 0xce, 0x1ae: 0xcf, 0x1af: 0xd0,\n\t0x1b0: 0xd1, 0x1b1: 0x35, 0x1b2: 0x28, 0x1b3: 0x36, 0x1b4: 0xd2, 0x1b5: 0xd3, 0x1b6: 0xd4, 0x1b7: 0xd5,\n\t0x1b8: 0xd6, 0x1b9: 0xd7, 0x1ba: 0xd8, 0x1bb: 0xd9, 0x1bc: 0xda, 0x1bd: 0xdb, 0x1be: 0xdc, 0x1bf: 0x37,\n\t// Block 0x7, offset 0x1c0\n\t0x1c0: 0x38, 0x1c1: 0xdd, 0x1c2: 0xde, 0x1c3: 0xdf, 0x1c4: 0xe0, 0x1c5: 0x39, 0x1c6: 0x3a, 0x1c7: 0xe1,\n\t0x1c8: 0xe2, 0x1c9: 0x3b, 0x1ca: 0x3c, 0x1cb: 0x3d, 0x1cc: 0x3e, 0x1cd: 0x3f, 0x1ce: 0x40, 0x1cf: 0x41,\n\t0x1d0: 0x9f, 0x1d1: 0x9f, 0x1d2: 0x9f, 0x1d3: 0x9f, 0x1d4: 0x9f, 0x1d5: 0x9f, 0x1d6: 0x9f, 0x1d7: 0x9f,\n\t0x1d8: 0x9f, 0x1d9: 0x9f, 0x1da: 0x9f, 0x1db: 0x9f, 0x1dc: 0x9f, 0x1dd: 0x9f, 0x1de: 0x9f, 0x1df: 0x9f,\n\t0x1e0: 0x9f, 0x1e1: 0x9f, 0x1e2: 0x9f, 0x1e3: 0x9f, 0x1e4: 0x9f, 0x1e5: 0x9f, 0x1e6: 0x9f, 0x1e7: 0x9f,\n\t0x1e8: 0x9f, 0x1e9: 0x9f, 0x1ea: 0x9f, 0x1eb: 0x9f, 0x1ec: 0x9f, 0x1ed: 0x9f, 0x1ee: 0x9f, 0x1ef: 0x9f,\n\t0x1f0: 0x9f, 0x1f1: 0x9f, 0x1f2: 0x9f, 0x1f3: 0x9f, 0x1f4: 0x9f, 0x1f5: 0x9f, 0x1f6: 0x9f, 0x1f7: 0x9f,\n\t0x1f8: 0x9f, 0x1f9: 0x9f, 0x1fa: 0x9f, 0x1fb: 0x9f, 0x1fc: 0x9f, 0x1fd: 0x9f, 0x1fe: 0x9f, 0x1ff: 0x9f,\n\t// Block 0x8, offset 0x200\n\t0x200: 0x9f, 0x201: 0x9f, 0x202: 0x9f, 0x203: 0x9f, 0x204: 0x9f, 0x205: 0x9f, 0x206: 0x9f, 0x207: 0x9f,\n\t0x208: 0x9f, 0x209: 0x9f, 0x20a: 0x9f, 0x20b: 0x9f, 0x20c: 0x9f, 0x20d: 0x9f, 0x20e: 0x9f, 0x20f: 0x9f,\n\t0x210: 0x9f, 0x211: 0x9f, 0x212: 0x9f, 0x213: 0x9f, 0x214: 0x9f, 0x215: 0x9f, 0x216: 0x9f, 0x217: 0x9f,\n\t0x218: 0x9f, 0x219: 0x9f, 0x21a: 0x9f, 0x21b: 0x9f, 0x21c: 0x9f, 0x21d: 0x9f, 0x21e: 0x9f, 0x21f: 0x9f,\n\t0x220: 0x9f, 0x221: 0x9f, 0x222: 0x9f, 0x223: 0x9f, 0x224: 0x9f, 0x225: 0x9f, 0x226: 0x9f, 0x227: 0x9f,\n\t0x228: 0x9f, 0x229: 0x9f, 0x22a: 0x9f, 0x22b: 0x9f, 0x22c: 0x9f, 0x22d: 0x9f, 0x22e: 0x9f, 0x22f: 0x9f,\n\t0x230: 0x9f, 0x231: 0x9f, 0x232: 0x9f, 0x233: 0x9f, 0x234: 0x9f, 0x235: 0x9f, 0x236: 0xb2, 0x237: 0x9b,\n\t0x238: 0x9f, 0x239: 0x9f, 0x23a: 0x9f, 0x23b: 0x9f, 0x23c: 0x9f, 0x23d: 0x9f, 0x23e: 0x9f, 0x23f: 0x9f,\n\t// Block 0x9, offset 0x240\n\t0x240: 0x9f, 0x241: 0x9f, 0x242: 0x9f, 0x243: 0x9f, 0x244: 0x9f, 0x245: 0x9f, 0x246: 0x9f, 0x247: 0x9f,\n\t0x248: 0x9f, 0x249: 0x9f, 0x24a: 0x9f, 0x24b: 0x9f, 0x24c: 0x9f, 0x24d: 0x9f, 0x24e: 0x9f, 0x24f: 0x9f,\n\t0x250: 0x9f, 0x251: 0x9f, 0x252: 0x9f, 0x253: 0x9f, 0x254: 0x9f, 0x255: 0x9f, 0x256: 0x9f, 0x257: 0x9f,\n\t0x258: 0x9f, 0x259: 0x9f, 0x25a: 0x9f, 0x25b: 0x9f, 0x25c: 0x9f, 0x25d: 0x9f, 0x25e: 0x9f, 0x25f: 0x9f,\n\t0x260: 0x9f, 0x261: 0x9f, 0x262: 0x9f, 0x263: 0x9f, 0x264: 0x9f, 0x265: 0x9f, 0x266: 0x9f, 0x267: 0x9f,\n\t0x268: 0x9f, 0x269: 0x9f, 0x26a: 0x9f, 0x26b: 0x9f, 0x26c: 0x9f, 0x26d: 0x9f, 0x26e: 0x9f, 0x26f: 0x9f,\n\t0x270: 0x9f, 0x271: 0x9f, 0x272: 0x9f, 0x273: 0x9f, 0x274: 0x9f, 0x275: 0x9f, 0x276: 0x9f, 0x277: 0x9f,\n\t0x278: 0x9f, 0x279: 0x9f, 0x27a: 0x9f, 0x27b: 0x9f, 0x27c: 0x9f, 0x27d: 0x9f, 0x27e: 0x9f, 0x27f: 0x9f,\n\t// Block 0xa, offset 0x280\n\t0x280: 0x9f, 0x281: 0x9f, 0x282: 0x9f, 0x283: 0x9f, 0x284: 0x9f, 0x285: 0x9f, 0x286: 0x9f, 0x287: 0x9f,\n\t0x288: 0x9f, 0x289: 0x9f, 0x28a: 0x9f, 0x28b: 0x9f, 0x28c: 0x9f, 0x28d: 0x9f, 0x28e: 0x9f, 0x28f: 0x9f,\n\t0x290: 0x9f, 0x291: 0x9f, 0x292: 0x9f, 0x293: 0x9f, 0x294: 0x9f, 0x295: 0x9f, 0x296: 0x9f, 0x297: 0x9f,\n\t0x298: 0x9f, 0x299: 0x9f, 0x29a: 0x9f, 0x29b: 0x9f, 0x29c: 0x9f, 0x29d: 0x9f, 0x29e: 0x9f, 0x29f: 0x9f,\n\t0x2a0: 0x9f, 0x2a1: 0x9f, 0x2a2: 0x9f, 0x2a3: 0x9f, 0x2a4: 0x9f, 0x2a5: 0x9f, 0x2a6: 0x9f, 0x2a7: 0x9f,\n\t0x2a8: 0x9f, 0x2a9: 0x9f, 0x2aa: 0x9f, 0x2ab: 0x9f, 0x2ac: 0x9f, 0x2ad: 0x9f, 0x2ae: 0x9f, 0x2af: 0x9f,\n\t0x2b0: 0x9f, 0x2b1: 0x9f, 0x2b2: 0x9f, 0x2b3: 0x9f, 0x2b4: 0x9f, 0x2b5: 0x9f, 0x2b6: 0x9f, 0x2b7: 0x9f,\n\t0x2b8: 0x9f, 0x2b9: 0x9f, 0x2ba: 0x9f, 0x2bb: 0x9f, 0x2bc: 0x9f, 0x2bd: 0x9f, 0x2be: 0x9f, 0x2bf: 0xe3,\n\t// Block 0xb, offset 0x2c0\n\t0x2c0: 0x9f, 0x2c1: 0x9f, 0x2c2: 0x9f, 0x2c3: 0x9f, 0x2c4: 0x9f, 0x2c5: 0x9f, 0x2c6: 0x9f, 0x2c7: 0x9f,\n\t0x2c8: 0x9f, 0x2c9: 0x9f, 0x2ca: 0x9f, 0x2cb: 0x9f, 0x2cc: 0x9f, 0x2cd: 0x9f, 0x2ce: 0x9f, 0x2cf: 0x9f,\n\t0x2d0: 0x9f, 0x2d1: 0x9f, 0x2d2: 0xe4, 0x2d3: 0xe5, 0x2d4: 0x9f, 0x2d5: 0x9f, 0x2d6: 0x9f, 0x2d7: 0x9f,\n\t0x2d8: 0xe6, 0x2d9: 0x42, 0x2da: 0x43, 0x2db: 0xe7, 0x2dc: 0x44, 0x2dd: 0x45, 0x2de: 0x46, 0x2df: 0xe8,\n\t0x2e0: 0xe9, 0x2e1: 0xea, 0x2e2: 0xeb, 0x2e3: 0xec, 0x2e4: 0xed, 0x2e5: 0xee, 0x2e6: 0xef, 0x2e7: 0xf0,\n\t0x2e8: 0xf1, 0x2e9: 0xf2, 0x2ea: 0xf3, 0x2eb: 0xf4, 0x2ec: 0xf5, 0x2ed: 0xf6, 0x2ee: 0xf7, 0x2ef: 0xf8,\n\t0x2f0: 0x9f, 0x2f1: 0x9f, 0x2f2: 0x9f, 0x2f3: 0x9f, 0x2f4: 0x9f, 0x2f5: 0x9f, 0x2f6: 0x9f, 0x2f7: 0x9f,\n\t0x2f8: 0x9f, 0x2f9: 0x9f, 0x2fa: 0x9f, 0x2fb: 0x9f, 0x2fc: 0x9f, 0x2fd: 0x9f, 0x2fe: 0x9f, 0x2ff: 0x9f,\n\t// Block 0xc, offset 0x300\n\t0x300: 0x9f, 0x301: 0x9f, 0x302: 0x9f, 0x303: 0x9f, 0x304: 0x9f, 0x305: 0x9f, 0x306: 0x9f, 0x307: 0x9f,\n\t0x308: 0x9f, 0x309: 0x9f, 0x30a: 0x9f, 0x30b: 0x9f, 0x30c: 0x9f, 0x30d: 0x9f, 0x30e: 0x9f, 0x30f: 0x9f,\n\t0x310: 0x9f, 0x311: 0x9f, 0x312: 0x9f, 0x313: 0x9f, 0x314: 0x9f, 0x315: 0x9f, 0x316: 0x9f, 0x317: 0x9f,\n\t0x318: 0x9f, 0x319: 0x9f, 0x31a: 0x9f, 0x31b: 0x9f, 0x31c: 0x9f, 0x31d: 0x9f, 0x31e: 0xf9, 0x31f: 0xfa,\n\t// Block 0xd, offset 0x340\n\t0x340: 0xba, 0x341: 0xba, 0x342: 0xba, 0x343: 0xba, 0x344: 0xba, 0x345: 0xba, 0x346: 0xba, 0x347: 0xba,\n\t0x348: 0xba, 0x349: 0xba, 0x34a: 0xba, 0x34b: 0xba, 0x34c: 0xba, 0x34d: 0xba, 0x34e: 0xba, 0x34f: 0xba,\n\t0x350: 0xba, 0x351: 0xba, 0x352: 0xba, 0x353: 0xba, 0x354: 0xba, 0x355: 0xba, 0x356: 0xba, 0x357: 0xba,\n\t0x358: 0xba, 0x359: 0xba, 0x35a: 0xba, 0x35b: 0xba, 0x35c: 0xba, 0x35d: 0xba, 0x35e: 0xba, 0x35f: 0xba,\n\t0x360: 0xba, 0x361: 0xba, 0x362: 0xba, 0x363: 0xba, 0x364: 0xba, 0x365: 0xba, 0x366: 0xba, 0x367: 0xba,\n\t0x368: 0xba, 0x369: 0xba, 0x36a: 0xba, 0x36b: 0xba, 0x36c: 0xba, 0x36d: 0xba, 0x36e: 0xba, 0x36f: 0xba,\n\t0x370: 0xba, 0x371: 0xba, 0x372: 0xba, 0x373: 0xba, 0x374: 0xba, 0x375: 0xba, 0x376: 0xba, 0x377: 0xba,\n\t0x378: 0xba, 0x379: 0xba, 0x37a: 0xba, 0x37b: 0xba, 0x37c: 0xba, 0x37d: 0xba, 0x37e: 0xba, 0x37f: 0xba,\n\t// Block 0xe, offset 0x380\n\t0x380: 0xba, 0x381: 0xba, 0x382: 0xba, 0x383: 0xba, 0x384: 0xba, 0x385: 0xba, 0x386: 0xba, 0x387: 0xba,\n\t0x388: 0xba, 0x389: 0xba, 0x38a: 0xba, 0x38b: 0xba, 0x38c: 0xba, 0x38d: 0xba, 0x38e: 0xba, 0x38f: 0xba,\n\t0x390: 0xba, 0x391: 0xba, 0x392: 0xba, 0x393: 0xba, 0x394: 0xba, 0x395: 0xba, 0x396: 0xba, 0x397: 0xba,\n\t0x398: 0xba, 0x399: 0xba, 0x39a: 0xba, 0x39b: 0xba, 0x39c: 0xba, 0x39d: 0xba, 0x39e: 0xba, 0x39f: 0xba,\n\t0x3a0: 0xba, 0x3a1: 0xba, 0x3a2: 0xba, 0x3a3: 0xba, 0x3a4: 0xfb, 0x3a5: 0xfc, 0x3a6: 0xfd, 0x3a7: 0xfe,\n\t0x3a8: 0x47, 0x3a9: 0xff, 0x3aa: 0x100, 0x3ab: 0x48, 0x3ac: 0x49, 0x3ad: 0x4a, 0x3ae: 0x4b, 0x3af: 0x4c,\n\t0x3b0: 0x101, 0x3b1: 0x4d, 0x3b2: 0x4e, 0x3b3: 0x4f, 0x3b4: 0x50, 0x3b5: 0x51, 0x3b6: 0x102, 0x3b7: 0x52,\n\t0x3b8: 0x53, 0x3b9: 0x54, 0x3ba: 0x55, 0x3bb: 0x56, 0x3bc: 0x57, 0x3bd: 0x58, 0x3be: 0x59, 0x3bf: 0x5a,\n\t// Block 0xf, offset 0x3c0\n\t0x3c0: 0x103, 0x3c1: 0x104, 0x3c2: 0x9f, 0x3c3: 0x105, 0x3c4: 0x106, 0x3c5: 0x9b, 0x3c6: 0x107, 0x3c7: 0x108,\n\t0x3c8: 0xba, 0x3c9: 0xba, 0x3ca: 0x109, 0x3cb: 0x10a, 0x3cc: 0x10b, 0x3cd: 0x10c, 0x3ce: 0x10d, 0x3cf: 0x10e,\n\t0x3d0: 0x10f, 0x3d1: 0x9f, 0x3d2: 0x110, 0x3d3: 0x111, 0x3d4: 0x112, 0x3d5: 0x113, 0x3d6: 0xba, 0x3d7: 0xba,\n\t0x3d8: 0x9f, 0x3d9: 0x9f, 0x3da: 0x9f, 0x3db: 0x9f, 0x3dc: 0x114, 0x3dd: 0x115, 0x3de: 0xba, 0x3df: 0xba,\n\t0x3e0: 0x116, 0x3e1: 0x117, 0x3e2: 0x118, 0x3e3: 0x119, 0x3e4: 0x11a, 0x3e5: 0xba, 0x3e6: 0x11b, 0x3e7: 0x11c,\n\t0x3e8: 0x11d, 0x3e9: 0x11e, 0x3ea: 0x11f, 0x3eb: 0x5b, 0x3ec: 0x120, 0x3ed: 0x121, 0x3ee: 0x5c, 0x3ef: 0xba,\n\t0x3f0: 0x122, 0x3f1: 0x123, 0x3f2: 0x124, 0x3f3: 0x125, 0x3f4: 0xba, 0x3f5: 0xba, 0x3f6: 0xba, 0x3f7: 0xba,\n\t0x3f8: 0xba, 0x3f9: 0x126, 0x3fa: 0xba, 0x3fb: 0xba, 0x3fc: 0xba, 0x3fd: 0xba, 0x3fe: 0xba, 0x3ff: 0xba,\n\t// Block 0x10, offset 0x400\n\t0x400: 0x127, 0x401: 0x128, 0x402: 0x129, 0x403: 0x12a, 0x404: 0x12b, 0x405: 0x12c, 0x406: 0x12d, 0x407: 0x12e,\n\t0x408: 0x12f, 0x409: 0xba, 0x40a: 0x130, 0x40b: 0x131, 0x40c: 0x5d, 0x40d: 0x5e, 0x40e: 0xba, 0x40f: 0xba,\n\t0x410: 0x132, 0x411: 0x133, 0x412: 0x134, 0x413: 0x135, 0x414: 0xba, 0x415: 0xba, 0x416: 0x136, 0x417: 0x137,\n\t0x418: 0x138, 0x419: 0x139, 0x41a: 0x13a, 0x41b: 0x13b, 0x41c: 0x13c, 0x41d: 0xba, 0x41e: 0xba, 0x41f: 0xba,\n\t0x420: 0xba, 0x421: 0xba, 0x422: 0x13d, 0x423: 0x13e, 0x424: 0xba, 0x425: 0xba, 0x426: 0xba, 0x427: 0xba,\n\t0x428: 0x13f, 0x429: 0x140, 0x42a: 0x141, 0x42b: 0x142, 0x42c: 0xba, 0x42d: 0xba, 0x42e: 0xba, 0x42f: 0xba,\n\t0x430: 0x143, 0x431: 0x144, 0x432: 0x145, 0x433: 0xba, 0x434: 0x146, 0x435: 0x147, 0x436: 0xba, 0x437: 0xba,\n\t0x438: 0xba, 0x439: 0xba, 0x43a: 0xba, 0x43b: 0xba, 0x43c: 0xba, 0x43d: 0xba, 0x43e: 0xba, 0x43f: 0xba,\n\t// Block 0x11, offset 0x440\n\t0x440: 0x9f, 0x441: 0x9f, 0x442: 0x9f, 0x443: 0x9f, 0x444: 0x9f, 0x445: 0x9f, 0x446: 0x9f, 0x447: 0x9f,\n\t0x448: 0x9f, 0x449: 0x9f, 0x44a: 0x9f, 0x44b: 0x9f, 0x44c: 0x9f, 0x44d: 0x9f, 0x44e: 0x148, 0x44f: 0xba,\n\t0x450: 0x9b, 0x451: 0x149, 0x452: 0x9f, 0x453: 0x9f, 0x454: 0x9f, 0x455: 0x14a, 0x456: 0xba, 0x457: 0xba,\n\t0x458: 0xba, 0x459: 0xba, 0x45a: 0xba, 0x45b: 0xba, 0x45c: 0xba, 0x45d: 0xba, 0x45e: 0xba, 0x45f: 0xba,\n\t0x460: 0xba, 0x461: 0xba, 0x462: 0xba, 0x463: 0xba, 0x464: 0xba, 0x465: 0xba, 0x466: 0xba, 0x467: 0xba,\n\t0x468: 0xba, 0x469: 0xba, 0x46a: 0xba, 0x46b: 0xba, 0x46c: 0xba, 0x46d: 0xba, 0x46e: 0xba, 0x46f: 0xba,\n\t0x470: 0xba, 0x471: 0xba, 0x472: 0xba, 0x473: 0xba, 0x474: 0xba, 0x475: 0xba, 0x476: 0xba, 0x477: 0xba,\n\t0x478: 0xba, 0x479: 0xba, 0x47a: 0xba, 0x47b: 0xba, 0x47c: 0xba, 0x47d: 0xba, 0x47e: 0xba, 0x47f: 0xba,\n\t// Block 0x12, offset 0x480\n\t0x480: 0x9f, 0x481: 0x9f, 0x482: 0x9f, 0x483: 0x9f, 0x484: 0x9f, 0x485: 0x9f, 0x486: 0x9f, 0x487: 0x9f,\n\t0x488: 0x9f, 0x489: 0x9f, 0x48a: 0x9f, 0x48b: 0x9f, 0x48c: 0x9f, 0x48d: 0x9f, 0x48e: 0x9f, 0x48f: 0x9f,\n\t0x490: 0x14b, 0x491: 0xba, 0x492: 0xba, 0x493: 0xba, 0x494: 0xba, 0x495: 0xba, 0x496: 0xba, 0x497: 0xba,\n\t0x498: 0xba, 0x499: 0xba, 0x49a: 0xba, 0x49b: 0xba, 0x49c: 0xba, 0x49d: 0xba, 0x49e: 0xba, 0x49f: 0xba,\n\t0x4a0: 0xba, 0x4a1: 0xba, 0x4a2: 0xba, 0x4a3: 0xba, 0x4a4: 0xba, 0x4a5: 0xba, 0x4a6: 0xba, 0x4a7: 0xba,\n\t0x4a8: 0xba, 0x4a9: 0xba, 0x4aa: 0xba, 0x4ab: 0xba, 0x4ac: 0xba, 0x4ad: 0xba, 0x4ae: 0xba, 0x4af: 0xba,\n\t0x4b0: 0xba, 0x4b1: 0xba, 0x4b2: 0xba, 0x4b3: 0xba, 0x4b4: 0xba, 0x4b5: 0xba, 0x4b6: 0xba, 0x4b7: 0xba,\n\t0x4b8: 0xba, 0x4b9: 0xba, 0x4ba: 0xba, 0x4bb: 0xba, 0x4bc: 0xba, 0x4bd: 0xba, 0x4be: 0xba, 0x4bf: 0xba,\n\t// Block 0x13, offset 0x4c0\n\t0x4c0: 0xba, 0x4c1: 0xba, 0x4c2: 0xba, 0x4c3: 0xba, 0x4c4: 0xba, 0x4c5: 0xba, 0x4c6: 0xba, 0x4c7: 0xba,\n\t0x4c8: 0xba, 0x4c9: 0xba, 0x4ca: 0xba, 0x4cb: 0xba, 0x4cc: 0xba, 0x4cd: 0xba, 0x4ce: 0xba, 0x4cf: 0xba,\n\t0x4d0: 0x9f, 0x4d1: 0x9f, 0x4d2: 0x9f, 0x4d3: 0x9f, 0x4d4: 0x9f, 0x4d5: 0x9f, 0x4d6: 0x9f, 0x4d7: 0x9f,\n\t0x4d8: 0x9f, 0x4d9: 0x14c, 0x4da: 0xba, 0x4db: 0xba, 0x4dc: 0xba, 0x4dd: 0xba, 0x4de: 0xba, 0x4df: 0xba,\n\t0x4e0: 0xba, 0x4e1: 0xba, 0x4e2: 0xba, 0x4e3: 0xba, 0x4e4: 0xba, 0x4e5: 0xba, 0x4e6: 0xba, 0x4e7: 0xba,\n\t0x4e8: 0xba, 0x4e9: 0xba, 0x4ea: 0xba, 0x4eb: 0xba, 0x4ec: 0xba, 0x4ed: 0xba, 0x4ee: 0xba, 0x4ef: 0xba,\n\t0x4f0: 0xba, 0x4f1: 0xba, 0x4f2: 0xba, 0x4f3: 0xba, 0x4f4: 0xba, 0x4f5: 0xba, 0x4f6: 0xba, 0x4f7: 0xba,\n\t0x4f8: 0xba, 0x4f9: 0xba, 0x4fa: 0xba, 0x4fb: 0xba, 0x4fc: 0xba, 0x4fd: 0xba, 0x4fe: 0xba, 0x4ff: 0xba,\n\t// Block 0x14, offset 0x500\n\t0x500: 0xba, 0x501: 0xba, 0x502: 0xba, 0x503: 0xba, 0x504: 0xba, 0x505: 0xba, 0x506: 0xba, 0x507: 0xba,\n\t0x508: 0xba, 0x509: 0xba, 0x50a: 0xba, 0x50b: 0xba, 0x50c: 0xba, 0x50d: 0xba, 0x50e: 0xba, 0x50f: 0xba,\n\t0x510: 0xba, 0x511: 0xba, 0x512: 0xba, 0x513: 0xba, 0x514: 0xba, 0x515: 0xba, 0x516: 0xba, 0x517: 0xba,\n\t0x518: 0xba, 0x519: 0xba, 0x51a: 0xba, 0x51b: 0xba, 0x51c: 0xba, 0x51d: 0xba, 0x51e: 0xba, 0x51f: 0xba,\n\t0x520: 0x9f, 0x521: 0x9f, 0x522: 0x9f, 0x523: 0x9f, 0x524: 0x9f, 0x525: 0x9f, 0x526: 0x9f, 0x527: 0x9f,\n\t0x528: 0x142, 0x529: 0x14d, 0x52a: 0xba, 0x52b: 0x14e, 0x52c: 0x14f, 0x52d: 0x150, 0x52e: 0x151, 0x52f: 0xba,\n\t0x530: 0xba, 0x531: 0xba, 0x532: 0xba, 0x533: 0xba, 0x534: 0xba, 0x535: 0xba, 0x536: 0xba, 0x537: 0xba,\n\t0x538: 0xba, 0x539: 0xba, 0x53a: 0xba, 0x53b: 0xba, 0x53c: 0x9f, 0x53d: 0x152, 0x53e: 0x153, 0x53f: 0x154,\n\t// Block 0x15, offset 0x540\n\t0x540: 0x9f, 0x541: 0x9f, 0x542: 0x9f, 0x543: 0x9f, 0x544: 0x9f, 0x545: 0x9f, 0x546: 0x9f, 0x547: 0x9f,\n\t0x548: 0x9f, 0x549: 0x9f, 0x54a: 0x9f, 0x54b: 0x9f, 0x54c: 0x9f, 0x54d: 0x9f, 0x54e: 0x9f, 0x54f: 0x9f,\n\t0x550: 0x9f, 0x551: 0x9f, 0x552: 0x9f, 0x553: 0x9f, 0x554: 0x9f, 0x555: 0x9f, 0x556: 0x9f, 0x557: 0x9f,\n\t0x558: 0x9f, 0x559: 0x9f, 0x55a: 0x9f, 0x55b: 0x9f, 0x55c: 0x9f, 0x55d: 0x9f, 0x55e: 0x9f, 0x55f: 0x155,\n\t0x560: 0x9f, 0x561: 0x9f, 0x562: 0x9f, 0x563: 0x9f, 0x564: 0x9f, 0x565: 0x9f, 0x566: 0x9f, 0x567: 0x9f,\n\t0x568: 0x9f, 0x569: 0x9f, 0x56a: 0x9f, 0x56b: 0x156, 0x56c: 0xba, 0x56d: 0xba, 0x56e: 0xba, 0x56f: 0xba,\n\t0x570: 0xba, 0x571: 0xba, 0x572: 0xba, 0x573: 0xba, 0x574: 0xba, 0x575: 0xba, 0x576: 0xba, 0x577: 0xba,\n\t0x578: 0xba, 0x579: 0xba, 0x57a: 0xba, 0x57b: 0xba, 0x57c: 0xba, 0x57d: 0xba, 0x57e: 0xba, 0x57f: 0xba,\n\t// Block 0x16, offset 0x580\n\t0x580: 0x9f, 0x581: 0x9f, 0x582: 0x9f, 0x583: 0x9f, 0x584: 0x157, 0x585: 0x158, 0x586: 0x9f, 0x587: 0x9f,\n\t0x588: 0x9f, 0x589: 0x9f, 0x58a: 0x9f, 0x58b: 0x159, 0x58c: 0xba, 0x58d: 0xba, 0x58e: 0xba, 0x58f: 0xba,\n\t0x590: 0xba, 0x591: 0xba, 0x592: 0xba, 0x593: 0xba, 0x594: 0xba, 0x595: 0xba, 0x596: 0xba, 0x597: 0xba,\n\t0x598: 0xba, 0x599: 0xba, 0x59a: 0xba, 0x59b: 0xba, 0x59c: 0xba, 0x59d: 0xba, 0x59e: 0xba, 0x59f: 0xba,\n\t0x5a0: 0xba, 0x5a1: 0xba, 0x5a2: 0xba, 0x5a3: 0xba, 0x5a4: 0xba, 0x5a5: 0xba, 0x5a6: 0xba, 0x5a7: 0xba,\n\t0x5a8: 0xba, 0x5a9: 0xba, 0x5aa: 0xba, 0x5ab: 0xba, 0x5ac: 0xba, 0x5ad: 0xba, 0x5ae: 0xba, 0x5af: 0xba,\n\t0x5b0: 0x9f, 0x5b1: 0x15a, 0x5b2: 0x15b, 0x5b3: 0xba, 0x5b4: 0xba, 0x5b5: 0xba, 0x5b6: 0xba, 0x5b7: 0xba,\n\t0x5b8: 0xba, 0x5b9: 0xba, 0x5ba: 0xba, 0x5bb: 0xba, 0x5bc: 0xba, 0x5bd: 0xba, 0x5be: 0xba, 0x5bf: 0xba,\n\t// Block 0x17, offset 0x5c0\n\t0x5c0: 0x9b, 0x5c1: 0x9b, 0x5c2: 0x9b, 0x5c3: 0x15c, 0x5c4: 0x15d, 0x5c5: 0x15e, 0x5c6: 0x15f, 0x5c7: 0x160,\n\t0x5c8: 0x9b, 0x5c9: 0x161, 0x5ca: 0xba, 0x5cb: 0xba, 0x5cc: 0x9b, 0x5cd: 0x162, 0x5ce: 0xba, 0x5cf: 0xba,\n\t0x5d0: 0x5f, 0x5d1: 0x60, 0x5d2: 0x61, 0x5d3: 0x62, 0x5d4: 0x63, 0x5d5: 0x64, 0x5d6: 0x65, 0x5d7: 0x66,\n\t0x5d8: 0x67, 0x5d9: 0x68, 0x5da: 0x69, 0x5db: 0x6a, 0x5dc: 0x6b, 0x5dd: 0x6c, 0x5de: 0x6d, 0x5df: 0x6e,\n\t0x5e0: 0x9b, 0x5e1: 0x9b, 0x5e2: 0x9b, 0x5e3: 0x9b, 0x5e4: 0x9b, 0x5e5: 0x9b, 0x5e6: 0x9b, 0x5e7: 0x9b,\n\t0x5e8: 0x163, 0x5e9: 0x164, 0x5ea: 0x165, 0x5eb: 0xba, 0x5ec: 0xba, 0x5ed: 0xba, 0x5ee: 0xba, 0x5ef: 0xba,\n\t0x5f0: 0xba, 0x5f1: 0xba, 0x5f2: 0xba, 0x5f3: 0xba, 0x5f4: 0xba, 0x5f5: 0xba, 0x5f6: 0xba, 0x5f7: 0xba,\n\t0x5f8: 0xba, 0x5f9: 0xba, 0x5fa: 0xba, 0x5fb: 0xba, 0x5fc: 0xba, 0x5fd: 0xba, 0x5fe: 0xba, 0x5ff: 0xba,\n\t// Block 0x18, offset 0x600\n\t0x600: 0x166, 0x601: 0xba, 0x602: 0xba, 0x603: 0xba, 0x604: 0xba, 0x605: 0xba, 0x606: 0xba, 0x607: 0xba,\n\t0x608: 0xba, 0x609: 0xba, 0x60a: 0xba, 0x60b: 0xba, 0x60c: 0xba, 0x60d: 0xba, 0x60e: 0xba, 0x60f: 0xba,\n\t0x610: 0xba, 0x611: 0xba, 0x612: 0xba, 0x613: 0xba, 0x614: 0xba, 0x615: 0xba, 0x616: 0xba, 0x617: 0xba,\n\t0x618: 0xba, 0x619: 0xba, 0x61a: 0xba, 0x61b: 0xba, 0x61c: 0xba, 0x61d: 0xba, 0x61e: 0xba, 0x61f: 0xba,\n\t0x620: 0x122, 0x621: 0x122, 0x622: 0x122, 0x623: 0x167, 0x624: 0x6f, 0x625: 0x168, 0x626: 0xba, 0x627: 0xba,\n\t0x628: 0xba, 0x629: 0xba, 0x62a: 0xba, 0x62b: 0xba, 0x62c: 0xba, 0x62d: 0xba, 0x62e: 0xba, 0x62f: 0xba,\n\t0x630: 0xba, 0x631: 0xba, 0x632: 0xba, 0x633: 0xba, 0x634: 0xba, 0x635: 0xba, 0x636: 0xba, 0x637: 0xba,\n\t0x638: 0x70, 0x639: 0x71, 0x63a: 0x72, 0x63b: 0x169, 0x63c: 0xba, 0x63d: 0xba, 0x63e: 0xba, 0x63f: 0xba,\n\t// Block 0x19, offset 0x640\n\t0x640: 0x16a, 0x641: 0x9b, 0x642: 0x16b, 0x643: 0x16c, 0x644: 0x73, 0x645: 0x74, 0x646: 0x16d, 0x647: 0x16e,\n\t0x648: 0x75, 0x649: 0x16f, 0x64a: 0xba, 0x64b: 0xba, 0x64c: 0x9b, 0x64d: 0x9b, 0x64e: 0x9b, 0x64f: 0x9b,\n\t0x650: 0x9b, 0x651: 0x9b, 0x652: 0x9b, 0x653: 0x9b, 0x654: 0x9b, 0x655: 0x9b, 0x656: 0x9b, 0x657: 0x9b,\n\t0x658: 0x9b, 0x659: 0x9b, 0x65a: 0x9b, 0x65b: 0x170, 0x65c: 0x9b, 0x65d: 0x171, 0x65e: 0x9b, 0x65f: 0x172,\n\t0x660: 0x173, 0x661: 0x174, 0x662: 0x175, 0x663: 0xba, 0x664: 0x176, 0x665: 0x177, 0x666: 0x178, 0x667: 0x179,\n\t0x668: 0xba, 0x669: 0xba, 0x66a: 0xba, 0x66b: 0xba, 0x66c: 0xba, 0x66d: 0xba, 0x66e: 0xba, 0x66f: 0xba,\n\t0x670: 0xba, 0x671: 0xba, 0x672: 0xba, 0x673: 0xba, 0x674: 0xba, 0x675: 0xba, 0x676: 0xba, 0x677: 0xba,\n\t0x678: 0xba, 0x679: 0xba, 0x67a: 0xba, 0x67b: 0xba, 0x67c: 0xba, 0x67d: 0xba, 0x67e: 0xba, 0x67f: 0xba,\n\t// Block 0x1a, offset 0x680\n\t0x680: 0x9f, 0x681: 0x9f, 0x682: 0x9f, 0x683: 0x9f, 0x684: 0x9f, 0x685: 0x9f, 0x686: 0x9f, 0x687: 0x9f,\n\t0x688: 0x9f, 0x689: 0x9f, 0x68a: 0x9f, 0x68b: 0x9f, 0x68c: 0x9f, 0x68d: 0x9f, 0x68e: 0x9f, 0x68f: 0x9f,\n\t0x690: 0x9f, 0x691: 0x9f, 0x692: 0x9f, 0x693: 0x9f, 0x694: 0x9f, 0x695: 0x9f, 0x696: 0x9f, 0x697: 0x9f,\n\t0x698: 0x9f, 0x699: 0x9f, 0x69a: 0x9f, 0x69b: 0x17a, 0x69c: 0x9f, 0x69d: 0x9f, 0x69e: 0x9f, 0x69f: 0x9f,\n\t0x6a0: 0x9f, 0x6a1: 0x9f, 0x6a2: 0x9f, 0x6a3: 0x9f, 0x6a4: 0x9f, 0x6a5: 0x9f, 0x6a6: 0x9f, 0x6a7: 0x9f,\n\t0x6a8: 0x9f, 0x6a9: 0x9f, 0x6aa: 0x9f, 0x6ab: 0x9f, 0x6ac: 0x9f, 0x6ad: 0x9f, 0x6ae: 0x9f, 0x6af: 0x9f,\n\t0x6b0: 0x9f, 0x6b1: 0x9f, 0x6b2: 0x9f, 0x6b3: 0x9f, 0x6b4: 0x9f, 0x6b5: 0x9f, 0x6b6: 0x9f, 0x6b7: 0x9f,\n\t0x6b8: 0x9f, 0x6b9: 0x9f, 0x6ba: 0x9f, 0x6bb: 0x9f, 0x6bc: 0x9f, 0x6bd: 0x9f, 0x6be: 0x9f, 0x6bf: 0x9f,\n\t// Block 0x1b, offset 0x6c0\n\t0x6c0: 0x9f, 0x6c1: 0x9f, 0x6c2: 0x9f, 0x6c3: 0x9f, 0x6c4: 0x9f, 0x6c5: 0x9f, 0x6c6: 0x9f, 0x6c7: 0x9f,\n\t0x6c8: 0x9f, 0x6c9: 0x9f, 0x6ca: 0x9f, 0x6cb: 0x9f, 0x6cc: 0x9f, 0x6cd: 0x9f, 0x6ce: 0x9f, 0x6cf: 0x9f,\n\t0x6d0: 0x9f, 0x6d1: 0x9f, 0x6d2: 0x9f, 0x6d3: 0x9f, 0x6d4: 0x9f, 0x6d5: 0x9f, 0x6d6: 0x9f, 0x6d7: 0x9f,\n\t0x6d8: 0x9f, 0x6d9: 0x9f, 0x6da: 0x9f, 0x6db: 0x9f, 0x6dc: 0x17b, 0x6dd: 0x9f, 0x6de: 0x9f, 0x6df: 0x9f,\n\t0x6e0: 0x17c, 0x6e1: 0x9f, 0x6e2: 0x9f, 0x6e3: 0x9f, 0x6e4: 0x9f, 0x6e5: 0x9f, 0x6e6: 0x9f, 0x6e7: 0x9f,\n\t0x6e8: 0x9f, 0x6e9: 0x9f, 0x6ea: 0x9f, 0x6eb: 0x9f, 0x6ec: 0x9f, 0x6ed: 0x9f, 0x6ee: 0x9f, 0x6ef: 0x9f,\n\t0x6f0: 0x9f, 0x6f1: 0x9f, 0x6f2: 0x9f, 0x6f3: 0x9f, 0x6f4: 0x9f, 0x6f5: 0x9f, 0x6f6: 0x9f, 0x6f7: 0x9f,\n\t0x6f8: 0x9f, 0x6f9: 0x9f, 0x6fa: 0x9f, 0x6fb: 0x9f, 0x6fc: 0x9f, 0x6fd: 0x9f, 0x6fe: 0x9f, 0x6ff: 0x9f,\n\t// Block 0x1c, offset 0x700\n\t0x700: 0x9f, 0x701: 0x9f, 0x702: 0x9f, 0x703: 0x9f, 0x704: 0x9f, 0x705: 0x9f, 0x706: 0x9f, 0x707: 0x9f,\n\t0x708: 0x9f, 0x709: 0x9f, 0x70a: 0x9f, 0x70b: 0x9f, 0x70c: 0x9f, 0x70d: 0x9f, 0x70e: 0x9f, 0x70f: 0x9f,\n\t0x710: 0x9f, 0x711: 0x9f, 0x712: 0x9f, 0x713: 0x9f, 0x714: 0x9f, 0x715: 0x9f, 0x716: 0x9f, 0x717: 0x9f,\n\t0x718: 0x9f, 0x719: 0x9f, 0x71a: 0x9f, 0x71b: 0x9f, 0x71c: 0x9f, 0x71d: 0x9f, 0x71e: 0x9f, 0x71f: 0x9f,\n\t0x720: 0x9f, 0x721: 0x9f, 0x722: 0x9f, 0x723: 0x9f, 0x724: 0x9f, 0x725: 0x9f, 0x726: 0x9f, 0x727: 0x9f,\n\t0x728: 0x9f, 0x729: 0x9f, 0x72a: 0x9f, 0x72b: 0x9f, 0x72c: 0x9f, 0x72d: 0x9f, 0x72e: 0x9f, 0x72f: 0x9f,\n\t0x730: 0x9f, 0x731: 0x9f, 0x732: 0x9f, 0x733: 0x9f, 0x734: 0x9f, 0x735: 0x9f, 0x736: 0x9f, 0x737: 0x9f,\n\t0x738: 0x9f, 0x739: 0x9f, 0x73a: 0x17d, 0x73b: 0x9f, 0x73c: 0x9f, 0x73d: 0x9f, 0x73e: 0x9f, 0x73f: 0x9f,\n\t// Block 0x1d, offset 0x740\n\t0x740: 0x9f, 0x741: 0x9f, 0x742: 0x9f, 0x743: 0x9f, 0x744: 0x9f, 0x745: 0x9f, 0x746: 0x9f, 0x747: 0x9f,\n\t0x748: 0x9f, 0x749: 0x9f, 0x74a: 0x9f, 0x74b: 0x9f, 0x74c: 0x9f, 0x74d: 0x9f, 0x74e: 0x9f, 0x74f: 0x9f,\n\t0x750: 0x9f, 0x751: 0x9f, 0x752: 0x9f, 0x753: 0x9f, 0x754: 0x9f, 0x755: 0x9f, 0x756: 0x9f, 0x757: 0x9f,\n\t0x758: 0x9f, 0x759: 0x9f, 0x75a: 0x9f, 0x75b: 0x9f, 0x75c: 0x9f, 0x75d: 0x9f, 0x75e: 0x9f, 0x75f: 0x9f,\n\t0x760: 0x9f, 0x761: 0x9f, 0x762: 0x9f, 0x763: 0x9f, 0x764: 0x9f, 0x765: 0x9f, 0x766: 0x9f, 0x767: 0x9f,\n\t0x768: 0x9f, 0x769: 0x9f, 0x76a: 0x9f, 0x76b: 0x9f, 0x76c: 0x9f, 0x76d: 0x9f, 0x76e: 0x9f, 0x76f: 0x17e,\n\t0x770: 0xba, 0x771: 0xba, 0x772: 0xba, 0x773: 0xba, 0x774: 0xba, 0x775: 0xba, 0x776: 0xba, 0x777: 0xba,\n\t0x778: 0xba, 0x779: 0xba, 0x77a: 0xba, 0x77b: 0xba, 0x77c: 0xba, 0x77d: 0xba, 0x77e: 0xba, 0x77f: 0xba,\n\t// Block 0x1e, offset 0x780\n\t0x780: 0xba, 0x781: 0xba, 0x782: 0xba, 0x783: 0xba, 0x784: 0xba, 0x785: 0xba, 0x786: 0xba, 0x787: 0xba,\n\t0x788: 0xba, 0x789: 0xba, 0x78a: 0xba, 0x78b: 0xba, 0x78c: 0xba, 0x78d: 0xba, 0x78e: 0xba, 0x78f: 0xba,\n\t0x790: 0xba, 0x791: 0xba, 0x792: 0xba, 0x793: 0xba, 0x794: 0xba, 0x795: 0xba, 0x796: 0xba, 0x797: 0xba,\n\t0x798: 0xba, 0x799: 0xba, 0x79a: 0xba, 0x79b: 0xba, 0x79c: 0xba, 0x79d: 0xba, 0x79e: 0xba, 0x79f: 0xba,\n\t0x7a0: 0x76, 0x7a1: 0x77, 0x7a2: 0x78, 0x7a3: 0x17f, 0x7a4: 0x79, 0x7a5: 0x7a, 0x7a6: 0x180, 0x7a7: 0x7b,\n\t0x7a8: 0x7c, 0x7a9: 0xba, 0x7aa: 0xba, 0x7ab: 0xba, 0x7ac: 0xba, 0x7ad: 0xba, 0x7ae: 0xba, 0x7af: 0xba,\n\t0x7b0: 0xba, 0x7b1: 0xba, 0x7b2: 0xba, 0x7b3: 0xba, 0x7b4: 0xba, 0x7b5: 0xba, 0x7b6: 0xba, 0x7b7: 0xba,\n\t0x7b8: 0xba, 0x7b9: 0xba, 0x7ba: 0xba, 0x7bb: 0xba, 0x7bc: 0xba, 0x7bd: 0xba, 0x7be: 0xba, 0x7bf: 0xba,\n\t// Block 0x1f, offset 0x7c0\n\t0x7d0: 0x0d, 0x7d1: 0x0e, 0x7d2: 0x0f, 0x7d3: 0x10, 0x7d4: 0x11, 0x7d5: 0x0b, 0x7d6: 0x12, 0x7d7: 0x07,\n\t0x7d8: 0x13, 0x7d9: 0x0b, 0x7da: 0x0b, 0x7db: 0x14, 0x7dc: 0x0b, 0x7dd: 0x15, 0x7de: 0x16, 0x7df: 0x17,\n\t0x7e0: 0x07, 0x7e1: 0x07, 0x7e2: 0x07, 0x7e3: 0x07, 0x7e4: 0x07, 0x7e5: 0x07, 0x7e6: 0x07, 0x7e7: 0x07,\n\t0x7e8: 0x07, 0x7e9: 0x07, 0x7ea: 0x18, 0x7eb: 0x19, 0x7ec: 0x1a, 0x7ed: 0x07, 0x7ee: 0x1b, 0x7ef: 0x1c,\n\t0x7f0: 0x0b, 0x7f1: 0x0b, 0x7f2: 0x0b, 0x7f3: 0x0b, 0x7f4: 0x0b, 0x7f5: 0x0b, 0x7f6: 0x0b, 0x7f7: 0x0b,\n\t0x7f8: 0x0b, 0x7f9: 0x0b, 0x7fa: 0x0b, 0x7fb: 0x0b, 0x7fc: 0x0b, 0x7fd: 0x0b, 0x7fe: 0x0b, 0x7ff: 0x0b,\n\t// Block 0x20, offset 0x800\n\t0x800: 0x0b, 0x801: 0x0b, 0x802: 0x0b, 0x803: 0x0b, 0x804: 0x0b, 0x805: 0x0b, 0x806: 0x0b, 0x807: 0x0b,\n\t0x808: 0x0b, 0x809: 0x0b, 0x80a: 0x0b, 0x80b: 0x0b, 0x80c: 0x0b, 0x80d: 0x0b, 0x80e: 0x0b, 0x80f: 0x0b,\n\t0x810: 0x0b, 0x811: 0x0b, 0x812: 0x0b, 0x813: 0x0b, 0x814: 0x0b, 0x815: 0x0b, 0x816: 0x0b, 0x817: 0x0b,\n\t0x818: 0x0b, 0x819: 0x0b, 0x81a: 0x0b, 0x81b: 0x0b, 0x81c: 0x0b, 0x81d: 0x0b, 0x81e: 0x0b, 0x81f: 0x0b,\n\t0x820: 0x0b, 0x821: 0x0b, 0x822: 0x0b, 0x823: 0x0b, 0x824: 0x0b, 0x825: 0x0b, 0x826: 0x0b, 0x827: 0x0b,\n\t0x828: 0x0b, 0x829: 0x0b, 0x82a: 0x0b, 0x82b: 0x0b, 0x82c: 0x0b, 0x82d: 0x0b, 0x82e: 0x0b, 0x82f: 0x0b,\n\t0x830: 0x0b, 0x831: 0x0b, 0x832: 0x0b, 0x833: 0x0b, 0x834: 0x0b, 0x835: 0x0b, 0x836: 0x0b, 0x837: 0x0b,\n\t0x838: 0x0b, 0x839: 0x0b, 0x83a: 0x0b, 0x83b: 0x0b, 0x83c: 0x0b, 0x83d: 0x0b, 0x83e: 0x0b, 0x83f: 0x0b,\n\t// Block 0x21, offset 0x840\n\t0x840: 0x181, 0x841: 0x182, 0x842: 0xba, 0x843: 0xba, 0x844: 0x183, 0x845: 0x183, 0x846: 0x183, 0x847: 0x184,\n\t0x848: 0xba, 0x849: 0xba, 0x84a: 0xba, 0x84b: 0xba, 0x84c: 0xba, 0x84d: 0xba, 0x84e: 0xba, 0x84f: 0xba,\n\t0x850: 0xba, 0x851: 0xba, 0x852: 0xba, 0x853: 0xba, 0x854: 0xba, 0x855: 0xba, 0x856: 0xba, 0x857: 0xba,\n\t0x858: 0xba, 0x859: 0xba, 0x85a: 0xba, 0x85b: 0xba, 0x85c: 0xba, 0x85d: 0xba, 0x85e: 0xba, 0x85f: 0xba,\n\t0x860: 0xba, 0x861: 0xba, 0x862: 0xba, 0x863: 0xba, 0x864: 0xba, 0x865: 0xba, 0x866: 0xba, 0x867: 0xba,\n\t0x868: 0xba, 0x869: 0xba, 0x86a: 0xba, 0x86b: 0xba, 0x86c: 0xba, 0x86d: 0xba, 0x86e: 0xba, 0x86f: 0xba,\n\t0x870: 0xba, 0x871: 0xba, 0x872: 0xba, 0x873: 0xba, 0x874: 0xba, 0x875: 0xba, 0x876: 0xba, 0x877: 0xba,\n\t0x878: 0xba, 0x879: 0xba, 0x87a: 0xba, 0x87b: 0xba, 0x87c: 0xba, 0x87d: 0xba, 0x87e: 0xba, 0x87f: 0xba,\n\t// Block 0x22, offset 0x880\n\t0x880: 0x0b, 0x881: 0x0b, 0x882: 0x0b, 0x883: 0x0b, 0x884: 0x0b, 0x885: 0x0b, 0x886: 0x0b, 0x887: 0x0b,\n\t0x888: 0x0b, 0x889: 0x0b, 0x88a: 0x0b, 0x88b: 0x0b, 0x88c: 0x0b, 0x88d: 0x0b, 0x88e: 0x0b, 0x88f: 0x0b,\n\t0x890: 0x0b, 0x891: 0x0b, 0x892: 0x0b, 0x893: 0x0b, 0x894: 0x0b, 0x895: 0x0b, 0x896: 0x0b, 0x897: 0x0b,\n\t0x898: 0x0b, 0x899: 0x0b, 0x89a: 0x0b, 0x89b: 0x0b, 0x89c: 0x0b, 0x89d: 0x0b, 0x89e: 0x0b, 0x89f: 0x0b,\n\t0x8a0: 0x1f, 0x8a1: 0x0b, 0x8a2: 0x0b, 0x8a3: 0x0b, 0x8a4: 0x0b, 0x8a5: 0x0b, 0x8a6: 0x0b, 0x8a7: 0x0b,\n\t0x8a8: 0x0b, 0x8a9: 0x0b, 0x8aa: 0x0b, 0x8ab: 0x0b, 0x8ac: 0x0b, 0x8ad: 0x0b, 0x8ae: 0x0b, 0x8af: 0x0b,\n\t0x8b0: 0x0b, 0x8b1: 0x0b, 0x8b2: 0x0b, 0x8b3: 0x0b, 0x8b4: 0x0b, 0x8b5: 0x0b, 0x8b6: 0x0b, 0x8b7: 0x0b,\n\t0x8b8: 0x0b, 0x8b9: 0x0b, 0x8ba: 0x0b, 0x8bb: 0x0b, 0x8bc: 0x0b, 0x8bd: 0x0b, 0x8be: 0x0b, 0x8bf: 0x0b,\n\t// Block 0x23, offset 0x8c0\n\t0x8c0: 0x0b, 0x8c1: 0x0b, 0x8c2: 0x0b, 0x8c3: 0x0b, 0x8c4: 0x0b, 0x8c5: 0x0b, 0x8c6: 0x0b, 0x8c7: 0x0b,\n\t0x8c8: 0x0b, 0x8c9: 0x0b, 0x8ca: 0x0b, 0x8cb: 0x0b, 0x8cc: 0x0b, 0x8cd: 0x0b, 0x8ce: 0x0b, 0x8cf: 0x0b,\n}\n\n// idnaSparseOffset: 264 entries, 528 bytes\nvar idnaSparseOffset = []uint16{0x0, 0x8, 0x19, 0x25, 0x27, 0x2c, 0x34, 0x3f, 0x4b, 0x4f, 0x5e, 0x63, 0x6b, 0x77, 0x85, 0x8a, 0x93, 0xa3, 0xb1, 0xbd, 0xc9, 0xda, 0xe4, 0xeb, 0xf8, 0x109, 0x110, 0x11b, 0x12a, 0x138, 0x142, 0x144, 0x149, 0x14c, 0x14f, 0x151, 0x15d, 0x168, 0x170, 0x176, 0x17c, 0x181, 0x186, 0x189, 0x18d, 0x193, 0x198, 0x1a4, 0x1ae, 0x1b4, 0x1c5, 0x1cf, 0x1d2, 0x1da, 0x1dd, 0x1ea, 0x1f2, 0x1f6, 0x1fd, 0x205, 0x215, 0x221, 0x223, 0x22d, 0x239, 0x245, 0x251, 0x259, 0x25e, 0x268, 0x279, 0x27d, 0x288, 0x28c, 0x295, 0x29d, 0x2a3, 0x2a8, 0x2ab, 0x2af, 0x2b5, 0x2b9, 0x2bd, 0x2c3, 0x2ca, 0x2d0, 0x2d8, 0x2df, 0x2ea, 0x2f4, 0x2f8, 0x2fb, 0x301, 0x305, 0x307, 0x30a, 0x30c, 0x30f, 0x319, 0x31c, 0x32b, 0x32f, 0x334, 0x337, 0x33b, 0x340, 0x345, 0x34b, 0x351, 0x360, 0x366, 0x36a, 0x379, 0x37e, 0x386, 0x390, 0x39b, 0x3a3, 0x3b4, 0x3bd, 0x3cd, 0x3da, 0x3e4, 0x3e9, 0x3f6, 0x3fa, 0x3ff, 0x401, 0x405, 0x407, 0x40b, 0x414, 0x41a, 0x41e, 0x42e, 0x438, 0x43d, 0x440, 0x446, 0x44d, 0x452, 0x456, 0x45c, 0x461, 0x46a, 0x46f, 0x475, 0x47c, 0x483, 0x48a, 0x48e, 0x493, 0x496, 0x49b, 0x4a7, 0x4ad, 0x4b2, 0x4b9, 0x4c1, 0x4c6, 0x4ca, 0x4da, 0x4e1, 0x4e5, 0x4e9, 0x4f0, 0x4f2, 0x4f5, 0x4f8, 0x4fc, 0x500, 0x506, 0x50f, 0x51b, 0x522, 0x52b, 0x533, 0x53a, 0x548, 0x555, 0x562, 0x56b, 0x56f, 0x57d, 0x585, 0x590, 0x599, 0x59f, 0x5a7, 0x5b0, 0x5ba, 0x5bd, 0x5c9, 0x5cc, 0x5d1, 0x5de, 0x5e7, 0x5f3, 0x5f6, 0x600, 0x609, 0x615, 0x622, 0x62a, 0x62d, 0x632, 0x635, 0x638, 0x63b, 0x642, 0x649, 0x64d, 0x658, 0x65b, 0x661, 0x666, 0x66a, 0x66d, 0x670, 0x673, 0x676, 0x679, 0x67e, 0x688, 0x68b, 0x68f, 0x69e, 0x6aa, 0x6ae, 0x6b3, 0x6b8, 0x6bc, 0x6c1, 0x6ca, 0x6d5, 0x6db, 0x6e3, 0x6e7, 0x6eb, 0x6f1, 0x6f7, 0x6fc, 0x6ff, 0x70f, 0x716, 0x719, 0x71c, 0x720, 0x726, 0x72b, 0x730, 0x735, 0x738, 0x73d, 0x740, 0x743, 0x747, 0x74b, 0x74e, 0x75e, 0x76f, 0x774, 0x776, 0x778}\n\n// idnaSparseValues: 1915 entries, 7660 bytes\nvar idnaSparseValues = [1915]valueRange{\n\t// Block 0x0, offset 0x0\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0xe105, lo: 0x80, hi: 0x96},\n\t{value: 0x0018, lo: 0x97, hi: 0x97},\n\t{value: 0xe105, lo: 0x98, hi: 0x9e},\n\t{value: 0x001f, lo: 0x9f, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xb6},\n\t{value: 0x0018, lo: 0xb7, hi: 0xb7},\n\t{value: 0x0008, lo: 0xb8, hi: 0xbf},\n\t// Block 0x1, offset 0x8\n\t{value: 0x0000, lo: 0x10},\n\t{value: 0x0008, lo: 0x80, hi: 0x80},\n\t{value: 0xe01d, lo: 0x81, hi: 0x81},\n\t{value: 0x0008, lo: 0x82, hi: 0x82},\n\t{value: 0x0335, lo: 0x83, hi: 0x83},\n\t{value: 0x034d, lo: 0x84, hi: 0x84},\n\t{value: 0x0365, lo: 0x85, hi: 0x85},\n\t{value: 0xe00d, lo: 0x86, hi: 0x86},\n\t{value: 0x0008, lo: 0x87, hi: 0x87},\n\t{value: 0xe00d, lo: 0x88, hi: 0x88},\n\t{value: 0x0008, lo: 0x89, hi: 0x89},\n\t{value: 0xe00d, lo: 0x8a, hi: 0x8a},\n\t{value: 0x0008, lo: 0x8b, hi: 0x8b},\n\t{value: 0xe00d, lo: 0x8c, hi: 0x8c},\n\t{value: 0x0008, lo: 0x8d, hi: 0x8d},\n\t{value: 0xe00d, lo: 0x8e, hi: 0x8e},\n\t{value: 0x0008, lo: 0x8f, hi: 0xbf},\n\t// Block 0x2, offset 0x19\n\t{value: 0x0000, lo: 0x0b},\n\t{value: 0x0008, lo: 0x80, hi: 0xaf},\n\t{value: 0x0249, lo: 0xb0, hi: 0xb0},\n\t{value: 0x037d, lo: 0xb1, hi: 0xb1},\n\t{value: 0x0259, lo: 0xb2, hi: 0xb2},\n\t{value: 0x0269, lo: 0xb3, hi: 0xb3},\n\t{value: 0x034d, lo: 0xb4, hi: 0xb4},\n\t{value: 0x0395, lo: 0xb5, hi: 0xb5},\n\t{value: 0xe1bd, lo: 0xb6, hi: 0xb6},\n\t{value: 0x0279, lo: 0xb7, hi: 0xb7},\n\t{value: 0x0289, lo: 0xb8, hi: 0xb8},\n\t{value: 0x0008, lo: 0xb9, hi: 0xbf},\n\t// Block 0x3, offset 0x25\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x3308, lo: 0x80, hi: 0xbf},\n\t// Block 0x4, offset 0x27\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x03f5, lo: 0x80, hi: 0x8f},\n\t{value: 0xe105, lo: 0x90, hi: 0x9f},\n\t{value: 0x049d, lo: 0xa0, hi: 0xaf},\n\t{value: 0x0008, lo: 0xb0, hi: 0xbf},\n\t// Block 0x5, offset 0x2c\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0xe185, lo: 0x80, hi: 0x8f},\n\t{value: 0x0545, lo: 0x90, hi: 0x96},\n\t{value: 0x0040, lo: 0x97, hi: 0x98},\n\t{value: 0x0008, lo: 0x99, hi: 0x99},\n\t{value: 0x0018, lo: 0x9a, hi: 0x9f},\n\t{value: 0x0040, lo: 0xa0, hi: 0xa0},\n\t{value: 0x0008, lo: 0xa1, hi: 0xbf},\n\t// Block 0x6, offset 0x34\n\t{value: 0x0000, lo: 0x0a},\n\t{value: 0x0008, lo: 0x80, hi: 0x86},\n\t{value: 0x0401, lo: 0x87, hi: 0x87},\n\t{value: 0x0040, lo: 0x88, hi: 0x88},\n\t{value: 0x0018, lo: 0x89, hi: 0x8a},\n\t{value: 0x0040, lo: 0x8b, hi: 0x8c},\n\t{value: 0x0018, lo: 0x8d, hi: 0x8f},\n\t{value: 0x0040, lo: 0x90, hi: 0x90},\n\t{value: 0x3308, lo: 0x91, hi: 0xbd},\n\t{value: 0x0818, lo: 0xbe, hi: 0xbe},\n\t{value: 0x3308, lo: 0xbf, hi: 0xbf},\n\t// Block 0x7, offset 0x3f\n\t{value: 0x0000, lo: 0x0b},\n\t{value: 0x0818, lo: 0x80, hi: 0x80},\n\t{value: 0x3308, lo: 0x81, hi: 0x82},\n\t{value: 0x0818, lo: 0x83, hi: 0x83},\n\t{value: 0x3308, lo: 0x84, hi: 0x85},\n\t{value: 0x0818, lo: 0x86, hi: 0x86},\n\t{value: 0x3308, lo: 0x87, hi: 0x87},\n\t{value: 0x0040, lo: 0x88, hi: 0x8f},\n\t{value: 0x0808, lo: 0x90, hi: 0xaa},\n\t{value: 0x0040, lo: 0xab, hi: 0xaf},\n\t{value: 0x0808, lo: 0xb0, hi: 0xb4},\n\t{value: 0x0040, lo: 0xb5, hi: 0xbf},\n\t// Block 0x8, offset 0x4b\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0a08, lo: 0x80, hi: 0x87},\n\t{value: 0x0c08, lo: 0x88, hi: 0x99},\n\t{value: 0x0a08, lo: 0x9a, hi: 0xbf},\n\t// Block 0x9, offset 0x4f\n\t{value: 0x0000, lo: 0x0e},\n\t{value: 0x3308, lo: 0x80, hi: 0x8a},\n\t{value: 0x0040, lo: 0x8b, hi: 0x8c},\n\t{value: 0x0c08, lo: 0x8d, hi: 0x8d},\n\t{value: 0x0a08, lo: 0x8e, hi: 0x98},\n\t{value: 0x0c08, lo: 0x99, hi: 0x9b},\n\t{value: 0x0a08, lo: 0x9c, hi: 0xaa},\n\t{value: 0x0c08, lo: 0xab, hi: 0xac},\n\t{value: 0x0a08, lo: 0xad, hi: 0xb0},\n\t{value: 0x0c08, lo: 0xb1, hi: 0xb1},\n\t{value: 0x0a08, lo: 0xb2, hi: 0xb2},\n\t{value: 0x0c08, lo: 0xb3, hi: 0xb4},\n\t{value: 0x0a08, lo: 0xb5, hi: 0xb7},\n\t{value: 0x0c08, lo: 0xb8, hi: 0xb9},\n\t{value: 0x0a08, lo: 0xba, hi: 0xbf},\n\t// Block 0xa, offset 0x5e\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0808, lo: 0x80, hi: 0xa5},\n\t{value: 0x3308, lo: 0xa6, hi: 0xb0},\n\t{value: 0x0808, lo: 0xb1, hi: 0xb1},\n\t{value: 0x0040, lo: 0xb2, hi: 0xbf},\n\t// Block 0xb, offset 0x63\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0x0808, lo: 0x80, hi: 0x89},\n\t{value: 0x0a08, lo: 0x8a, hi: 0xaa},\n\t{value: 0x3308, lo: 0xab, hi: 0xb3},\n\t{value: 0x0808, lo: 0xb4, hi: 0xb5},\n\t{value: 0x0018, lo: 0xb6, hi: 0xb9},\n\t{value: 0x0818, lo: 0xba, hi: 0xba},\n\t{value: 0x0040, lo: 0xbb, hi: 0xbf},\n\t// Block 0xc, offset 0x6b\n\t{value: 0x0000, lo: 0x0b},\n\t{value: 0x0808, lo: 0x80, hi: 0x95},\n\t{value: 0x3308, lo: 0x96, hi: 0x99},\n\t{value: 0x0808, lo: 0x9a, hi: 0x9a},\n\t{value: 0x3308, lo: 0x9b, hi: 0xa3},\n\t{value: 0x0808, lo: 0xa4, hi: 0xa4},\n\t{value: 0x3308, lo: 0xa5, hi: 0xa7},\n\t{value: 0x0808, lo: 0xa8, hi: 0xa8},\n\t{value: 0x3308, lo: 0xa9, hi: 0xad},\n\t{value: 0x0040, lo: 0xae, hi: 0xaf},\n\t{value: 0x0818, lo: 0xb0, hi: 0xbe},\n\t{value: 0x0040, lo: 0xbf, hi: 0xbf},\n\t// Block 0xd, offset 0x77\n\t{value: 0x0000, lo: 0x0d},\n\t{value: 0x0040, lo: 0x80, hi: 0x9f},\n\t{value: 0x0a08, lo: 0xa0, hi: 0xa9},\n\t{value: 0x0c08, lo: 0xaa, hi: 0xac},\n\t{value: 0x0808, lo: 0xad, hi: 0xad},\n\t{value: 0x0c08, lo: 0xae, hi: 0xae},\n\t{value: 0x0a08, lo: 0xaf, hi: 0xb0},\n\t{value: 0x0c08, lo: 0xb1, hi: 0xb2},\n\t{value: 0x0a08, lo: 0xb3, hi: 0xb4},\n\t{value: 0x0040, lo: 0xb5, hi: 0xb5},\n\t{value: 0x0a08, lo: 0xb6, hi: 0xb8},\n\t{value: 0x0c08, lo: 0xb9, hi: 0xb9},\n\t{value: 0x0a08, lo: 0xba, hi: 0xbd},\n\t{value: 0x0040, lo: 0xbe, hi: 0xbf},\n\t// Block 0xe, offset 0x85\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0040, lo: 0x80, hi: 0x93},\n\t{value: 0x3308, lo: 0x94, hi: 0xa1},\n\t{value: 0x0840, lo: 0xa2, hi: 0xa2},\n\t{value: 0x3308, lo: 0xa3, hi: 0xbf},\n\t// Block 0xf, offset 0x8a\n\t{value: 0x0000, lo: 0x08},\n\t{value: 0x3308, lo: 0x80, hi: 0x82},\n\t{value: 0x3008, lo: 0x83, hi: 0x83},\n\t{value: 0x0008, lo: 0x84, hi: 0xb9},\n\t{value: 0x3308, lo: 0xba, hi: 0xba},\n\t{value: 0x3008, lo: 0xbb, hi: 0xbb},\n\t{value: 0x3308, lo: 0xbc, hi: 0xbc},\n\t{value: 0x0008, lo: 0xbd, hi: 0xbd},\n\t{value: 0x3008, lo: 0xbe, hi: 0xbf},\n\t// Block 0x10, offset 0x93\n\t{value: 0x0000, lo: 0x0f},\n\t{value: 0x3308, lo: 0x80, hi: 0x80},\n\t{value: 0x3008, lo: 0x81, hi: 0x82},\n\t{value: 0x0040, lo: 0x83, hi: 0x85},\n\t{value: 0x3008, lo: 0x86, hi: 0x88},\n\t{value: 0x0040, lo: 0x89, hi: 0x89},\n\t{value: 0x3008, lo: 0x8a, hi: 0x8c},\n\t{value: 0x3b08, lo: 0x8d, hi: 0x8d},\n\t{value: 0x0040, lo: 0x8e, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x90},\n\t{value: 0x0040, lo: 0x91, hi: 0x96},\n\t{value: 0x3008, lo: 0x97, hi: 0x97},\n\t{value: 0x0040, lo: 0x98, hi: 0xa5},\n\t{value: 0x0008, lo: 0xa6, hi: 0xaf},\n\t{value: 0x0018, lo: 0xb0, hi: 0xba},\n\t{value: 0x0040, lo: 0xbb, hi: 0xbf},\n\t// Block 0x11, offset 0xa3\n\t{value: 0x0000, lo: 0x0d},\n\t{value: 0x3308, lo: 0x80, hi: 0x80},\n\t{value: 0x3008, lo: 0x81, hi: 0x83},\n\t{value: 0x0040, lo: 0x84, hi: 0x84},\n\t{value: 0x0008, lo: 0x85, hi: 0x8c},\n\t{value: 0x0040, lo: 0x8d, hi: 0x8d},\n\t{value: 0x0008, lo: 0x8e, hi: 0x90},\n\t{value: 0x0040, lo: 0x91, hi: 0x91},\n\t{value: 0x0008, lo: 0x92, hi: 0xa8},\n\t{value: 0x0040, lo: 0xa9, hi: 0xa9},\n\t{value: 0x0008, lo: 0xaa, hi: 0xb9},\n\t{value: 0x0040, lo: 0xba, hi: 0xbc},\n\t{value: 0x0008, lo: 0xbd, hi: 0xbd},\n\t{value: 0x3308, lo: 0xbe, hi: 0xbf},\n\t// Block 0x12, offset 0xb1\n\t{value: 0x0000, lo: 0x0b},\n\t{value: 0x3308, lo: 0x80, hi: 0x81},\n\t{value: 0x3008, lo: 0x82, hi: 0x83},\n\t{value: 0x0040, lo: 0x84, hi: 0x84},\n\t{value: 0x0008, lo: 0x85, hi: 0x8c},\n\t{value: 0x0040, lo: 0x8d, hi: 0x8d},\n\t{value: 0x0008, lo: 0x8e, hi: 0x90},\n\t{value: 0x0040, lo: 0x91, hi: 0x91},\n\t{value: 0x0008, lo: 0x92, hi: 0xba},\n\t{value: 0x3b08, lo: 0xbb, hi: 0xbc},\n\t{value: 0x0008, lo: 0xbd, hi: 0xbd},\n\t{value: 0x3008, lo: 0xbe, hi: 0xbf},\n\t// Block 0x13, offset 0xbd\n\t{value: 0x0000, lo: 0x0b},\n\t{value: 0x0040, lo: 0x80, hi: 0x81},\n\t{value: 0x3008, lo: 0x82, hi: 0x83},\n\t{value: 0x0040, lo: 0x84, hi: 0x84},\n\t{value: 0x0008, lo: 0x85, hi: 0x96},\n\t{value: 0x0040, lo: 0x97, hi: 0x99},\n\t{value: 0x0008, lo: 0x9a, hi: 0xb1},\n\t{value: 0x0040, lo: 0xb2, hi: 0xb2},\n\t{value: 0x0008, lo: 0xb3, hi: 0xbb},\n\t{value: 0x0040, lo: 0xbc, hi: 0xbc},\n\t{value: 0x0008, lo: 0xbd, hi: 0xbd},\n\t{value: 0x0040, lo: 0xbe, hi: 0xbf},\n\t// Block 0x14, offset 0xc9\n\t{value: 0x0000, lo: 0x10},\n\t{value: 0x0008, lo: 0x80, hi: 0x86},\n\t{value: 0x0040, lo: 0x87, hi: 0x89},\n\t{value: 0x3b08, lo: 0x8a, hi: 0x8a},\n\t{value: 0x0040, lo: 0x8b, hi: 0x8e},\n\t{value: 0x3008, lo: 0x8f, hi: 0x91},\n\t{value: 0x3308, lo: 0x92, hi: 0x94},\n\t{value: 0x0040, lo: 0x95, hi: 0x95},\n\t{value: 0x3308, lo: 0x96, hi: 0x96},\n\t{value: 0x0040, lo: 0x97, hi: 0x97},\n\t{value: 0x3008, lo: 0x98, hi: 0x9f},\n\t{value: 0x0040, lo: 0xa0, hi: 0xa5},\n\t{value: 0x0008, lo: 0xa6, hi: 0xaf},\n\t{value: 0x0040, lo: 0xb0, hi: 0xb1},\n\t{value: 0x3008, lo: 0xb2, hi: 0xb3},\n\t{value: 0x0018, lo: 0xb4, hi: 0xb4},\n\t{value: 0x0040, lo: 0xb5, hi: 0xbf},\n\t// Block 0x15, offset 0xda\n\t{value: 0x0000, lo: 0x09},\n\t{value: 0x0040, lo: 0x80, hi: 0x80},\n\t{value: 0x0008, lo: 0x81, hi: 0xb0},\n\t{value: 0x3308, lo: 0xb1, hi: 0xb1},\n\t{value: 0x0008, lo: 0xb2, hi: 0xb2},\n\t{value: 0x08f1, lo: 0xb3, hi: 0xb3},\n\t{value: 0x3308, lo: 0xb4, hi: 0xb9},\n\t{value: 0x3b08, lo: 0xba, hi: 0xba},\n\t{value: 0x0040, lo: 0xbb, hi: 0xbe},\n\t{value: 0x0018, lo: 0xbf, hi: 0xbf},\n\t// Block 0x16, offset 0xe4\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0x0008, lo: 0x80, hi: 0x86},\n\t{value: 0x3308, lo: 0x87, hi: 0x8e},\n\t{value: 0x0018, lo: 0x8f, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x99},\n\t{value: 0x0018, lo: 0x9a, hi: 0x9b},\n\t{value: 0x0040, lo: 0x9c, hi: 0xbf},\n\t// Block 0x17, offset 0xeb\n\t{value: 0x0000, lo: 0x0c},\n\t{value: 0x0008, lo: 0x80, hi: 0x84},\n\t{value: 0x0040, lo: 0x85, hi: 0x85},\n\t{value: 0x0008, lo: 0x86, hi: 0x86},\n\t{value: 0x0040, lo: 0x87, hi: 0x87},\n\t{value: 0x3308, lo: 0x88, hi: 0x8d},\n\t{value: 0x0040, lo: 0x8e, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x99},\n\t{value: 0x0040, lo: 0x9a, hi: 0x9b},\n\t{value: 0x0961, lo: 0x9c, hi: 0x9c},\n\t{value: 0x0999, lo: 0x9d, hi: 0x9d},\n\t{value: 0x0008, lo: 0x9e, hi: 0x9f},\n\t{value: 0x0040, lo: 0xa0, hi: 0xbf},\n\t// Block 0x18, offset 0xf8\n\t{value: 0x0000, lo: 0x10},\n\t{value: 0x0008, lo: 0x80, hi: 0x80},\n\t{value: 0x0018, lo: 0x81, hi: 0x8a},\n\t{value: 0x0008, lo: 0x8b, hi: 0x8b},\n\t{value: 0xe03d, lo: 0x8c, hi: 0x8c},\n\t{value: 0x0018, lo: 0x8d, hi: 0x97},\n\t{value: 0x3308, lo: 0x98, hi: 0x99},\n\t{value: 0x0018, lo: 0x9a, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xa9},\n\t{value: 0x0018, lo: 0xaa, hi: 0xb4},\n\t{value: 0x3308, lo: 0xb5, hi: 0xb5},\n\t{value: 0x0018, lo: 0xb6, hi: 0xb6},\n\t{value: 0x3308, lo: 0xb7, hi: 0xb7},\n\t{value: 0x0018, lo: 0xb8, hi: 0xb8},\n\t{value: 0x3308, lo: 0xb9, hi: 0xb9},\n\t{value: 0x0018, lo: 0xba, hi: 0xbd},\n\t{value: 0x3008, lo: 0xbe, hi: 0xbf},\n\t// Block 0x19, offset 0x109\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0x0018, lo: 0x80, hi: 0x85},\n\t{value: 0x3308, lo: 0x86, hi: 0x86},\n\t{value: 0x0018, lo: 0x87, hi: 0x8c},\n\t{value: 0x0040, lo: 0x8d, hi: 0x8d},\n\t{value: 0x0018, lo: 0x8e, hi: 0x9a},\n\t{value: 0x0040, lo: 0x9b, hi: 0xbf},\n\t// Block 0x1a, offset 0x110\n\t{value: 0x0000, lo: 0x0a},\n\t{value: 0x0008, lo: 0x80, hi: 0xaa},\n\t{value: 0x3008, lo: 0xab, hi: 0xac},\n\t{value: 0x3308, lo: 0xad, hi: 0xb0},\n\t{value: 0x3008, lo: 0xb1, hi: 0xb1},\n\t{value: 0x3308, lo: 0xb2, hi: 0xb7},\n\t{value: 0x3008, lo: 0xb8, hi: 0xb8},\n\t{value: 0x3b08, lo: 0xb9, hi: 0xba},\n\t{value: 0x3008, lo: 0xbb, hi: 0xbc},\n\t{value: 0x3308, lo: 0xbd, hi: 0xbe},\n\t{value: 0x0008, lo: 0xbf, hi: 0xbf},\n\t// Block 0x1b, offset 0x11b\n\t{value: 0x0000, lo: 0x0e},\n\t{value: 0x0008, lo: 0x80, hi: 0x89},\n\t{value: 0x0018, lo: 0x8a, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x95},\n\t{value: 0x3008, lo: 0x96, hi: 0x97},\n\t{value: 0x3308, lo: 0x98, hi: 0x99},\n\t{value: 0x0008, lo: 0x9a, hi: 0x9d},\n\t{value: 0x3308, lo: 0x9e, hi: 0xa0},\n\t{value: 0x0008, lo: 0xa1, hi: 0xa1},\n\t{value: 0x3008, lo: 0xa2, hi: 0xa4},\n\t{value: 0x0008, lo: 0xa5, hi: 0xa6},\n\t{value: 0x3008, lo: 0xa7, hi: 0xad},\n\t{value: 0x0008, lo: 0xae, hi: 0xb0},\n\t{value: 0x3308, lo: 0xb1, hi: 0xb4},\n\t{value: 0x0008, lo: 0xb5, hi: 0xbf},\n\t// Block 0x1c, offset 0x12a\n\t{value: 0x0000, lo: 0x0d},\n\t{value: 0x0008, lo: 0x80, hi: 0x81},\n\t{value: 0x3308, lo: 0x82, hi: 0x82},\n\t{value: 0x3008, lo: 0x83, hi: 0x84},\n\t{value: 0x3308, lo: 0x85, hi: 0x86},\n\t{value: 0x3008, lo: 0x87, hi: 0x8c},\n\t{value: 0x3308, lo: 0x8d, hi: 0x8d},\n\t{value: 0x0008, lo: 0x8e, hi: 0x8e},\n\t{value: 0x3008, lo: 0x8f, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x99},\n\t{value: 0x3008, lo: 0x9a, hi: 0x9c},\n\t{value: 0x3308, lo: 0x9d, hi: 0x9d},\n\t{value: 0x0018, lo: 0x9e, hi: 0x9f},\n\t{value: 0x0040, lo: 0xa0, hi: 0xbf},\n\t// Block 0x1d, offset 0x138\n\t{value: 0x0000, lo: 0x09},\n\t{value: 0x0040, lo: 0x80, hi: 0x86},\n\t{value: 0x055d, lo: 0x87, hi: 0x87},\n\t{value: 0x0040, lo: 0x88, hi: 0x8c},\n\t{value: 0x055d, lo: 0x8d, hi: 0x8d},\n\t{value: 0x0040, lo: 0x8e, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0xba},\n\t{value: 0x0018, lo: 0xbb, hi: 0xbb},\n\t{value: 0xe105, lo: 0xbc, hi: 0xbc},\n\t{value: 0x0008, lo: 0xbd, hi: 0xbf},\n\t// Block 0x1e, offset 0x142\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x0018, lo: 0x80, hi: 0xbf},\n\t// Block 0x1f, offset 0x144\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0018, lo: 0x80, hi: 0x9e},\n\t{value: 0x0040, lo: 0x9f, hi: 0xa0},\n\t{value: 0x2018, lo: 0xa1, hi: 0xb5},\n\t{value: 0x0018, lo: 0xb6, hi: 0xbf},\n\t// Block 0x20, offset 0x149\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0018, lo: 0x80, hi: 0xa7},\n\t{value: 0x2018, lo: 0xa8, hi: 0xbf},\n\t// Block 0x21, offset 0x14c\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x2018, lo: 0x80, hi: 0x82},\n\t{value: 0x0018, lo: 0x83, hi: 0xbf},\n\t// Block 0x22, offset 0x14f\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x0008, lo: 0x80, hi: 0xbf},\n\t// Block 0x23, offset 0x151\n\t{value: 0x0000, lo: 0x0b},\n\t{value: 0x0008, lo: 0x80, hi: 0x88},\n\t{value: 0x0040, lo: 0x89, hi: 0x89},\n\t{value: 0x0008, lo: 0x8a, hi: 0x8d},\n\t{value: 0x0040, lo: 0x8e, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x96},\n\t{value: 0x0040, lo: 0x97, hi: 0x97},\n\t{value: 0x0008, lo: 0x98, hi: 0x98},\n\t{value: 0x0040, lo: 0x99, hi: 0x99},\n\t{value: 0x0008, lo: 0x9a, hi: 0x9d},\n\t{value: 0x0040, lo: 0x9e, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xbf},\n\t// Block 0x24, offset 0x15d\n\t{value: 0x0000, lo: 0x0a},\n\t{value: 0x0008, lo: 0x80, hi: 0x88},\n\t{value: 0x0040, lo: 0x89, hi: 0x89},\n\t{value: 0x0008, lo: 0x8a, hi: 0x8d},\n\t{value: 0x0040, lo: 0x8e, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0xb0},\n\t{value: 0x0040, lo: 0xb1, hi: 0xb1},\n\t{value: 0x0008, lo: 0xb2, hi: 0xb5},\n\t{value: 0x0040, lo: 0xb6, hi: 0xb7},\n\t{value: 0x0008, lo: 0xb8, hi: 0xbe},\n\t{value: 0x0040, lo: 0xbf, hi: 0xbf},\n\t// Block 0x25, offset 0x168\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0x0008, lo: 0x80, hi: 0x80},\n\t{value: 0x0040, lo: 0x81, hi: 0x81},\n\t{value: 0x0008, lo: 0x82, hi: 0x85},\n\t{value: 0x0040, lo: 0x86, hi: 0x87},\n\t{value: 0x0008, lo: 0x88, hi: 0x96},\n\t{value: 0x0040, lo: 0x97, hi: 0x97},\n\t{value: 0x0008, lo: 0x98, hi: 0xbf},\n\t// Block 0x26, offset 0x170\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x0008, lo: 0x80, hi: 0x90},\n\t{value: 0x0040, lo: 0x91, hi: 0x91},\n\t{value: 0x0008, lo: 0x92, hi: 0x95},\n\t{value: 0x0040, lo: 0x96, hi: 0x97},\n\t{value: 0x0008, lo: 0x98, hi: 0xbf},\n\t// Block 0x27, offset 0x176\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x0008, lo: 0x80, hi: 0x9a},\n\t{value: 0x0040, lo: 0x9b, hi: 0x9c},\n\t{value: 0x3308, lo: 0x9d, hi: 0x9f},\n\t{value: 0x0018, lo: 0xa0, hi: 0xbc},\n\t{value: 0x0040, lo: 0xbd, hi: 0xbf},\n\t// Block 0x28, offset 0x17c\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0008, lo: 0x80, hi: 0x8f},\n\t{value: 0x0018, lo: 0x90, hi: 0x99},\n\t{value: 0x0040, lo: 0x9a, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xbf},\n\t// Block 0x29, offset 0x181\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0008, lo: 0x80, hi: 0xb5},\n\t{value: 0x0040, lo: 0xb6, hi: 0xb7},\n\t{value: 0xe045, lo: 0xb8, hi: 0xbd},\n\t{value: 0x0040, lo: 0xbe, hi: 0xbf},\n\t// Block 0x2a, offset 0x186\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0018, lo: 0x80, hi: 0x80},\n\t{value: 0x0008, lo: 0x81, hi: 0xbf},\n\t// Block 0x2b, offset 0x189\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0008, lo: 0x80, hi: 0xac},\n\t{value: 0x0018, lo: 0xad, hi: 0xae},\n\t{value: 0x0008, lo: 0xaf, hi: 0xbf},\n\t// Block 0x2c, offset 0x18d\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x0040, lo: 0x80, hi: 0x80},\n\t{value: 0x0008, lo: 0x81, hi: 0x9a},\n\t{value: 0x0018, lo: 0x9b, hi: 0x9c},\n\t{value: 0x0040, lo: 0x9d, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xbf},\n\t// Block 0x2d, offset 0x193\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0008, lo: 0x80, hi: 0xaa},\n\t{value: 0x0018, lo: 0xab, hi: 0xb0},\n\t{value: 0x0008, lo: 0xb1, hi: 0xb8},\n\t{value: 0x0040, lo: 0xb9, hi: 0xbf},\n\t// Block 0x2e, offset 0x198\n\t{value: 0x0000, lo: 0x0b},\n\t{value: 0x0008, lo: 0x80, hi: 0x8c},\n\t{value: 0x0040, lo: 0x8d, hi: 0x8d},\n\t{value: 0x0008, lo: 0x8e, hi: 0x91},\n\t{value: 0x3308, lo: 0x92, hi: 0x93},\n\t{value: 0x3b08, lo: 0x94, hi: 0x94},\n\t{value: 0x0040, lo: 0x95, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xb1},\n\t{value: 0x3308, lo: 0xb2, hi: 0xb3},\n\t{value: 0x3b08, lo: 0xb4, hi: 0xb4},\n\t{value: 0x0018, lo: 0xb5, hi: 0xb6},\n\t{value: 0x0040, lo: 0xb7, hi: 0xbf},\n\t// Block 0x2f, offset 0x1a4\n\t{value: 0x0000, lo: 0x09},\n\t{value: 0x0008, lo: 0x80, hi: 0x91},\n\t{value: 0x3308, lo: 0x92, hi: 0x93},\n\t{value: 0x0040, lo: 0x94, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xac},\n\t{value: 0x0040, lo: 0xad, hi: 0xad},\n\t{value: 0x0008, lo: 0xae, hi: 0xb0},\n\t{value: 0x0040, lo: 0xb1, hi: 0xb1},\n\t{value: 0x3308, lo: 0xb2, hi: 0xb3},\n\t{value: 0x0040, lo: 0xb4, hi: 0xbf},\n\t// Block 0x30, offset 0x1ae\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x0008, lo: 0x80, hi: 0xb3},\n\t{value: 0x3340, lo: 0xb4, hi: 0xb5},\n\t{value: 0x3008, lo: 0xb6, hi: 0xb6},\n\t{value: 0x3308, lo: 0xb7, hi: 0xbd},\n\t{value: 0x3008, lo: 0xbe, hi: 0xbf},\n\t// Block 0x31, offset 0x1b4\n\t{value: 0x0000, lo: 0x10},\n\t{value: 0x3008, lo: 0x80, hi: 0x85},\n\t{value: 0x3308, lo: 0x86, hi: 0x86},\n\t{value: 0x3008, lo: 0x87, hi: 0x88},\n\t{value: 0x3308, lo: 0x89, hi: 0x91},\n\t{value: 0x3b08, lo: 0x92, hi: 0x92},\n\t{value: 0x3308, lo: 0x93, hi: 0x93},\n\t{value: 0x0018, lo: 0x94, hi: 0x96},\n\t{value: 0x0008, lo: 0x97, hi: 0x97},\n\t{value: 0x0018, lo: 0x98, hi: 0x9b},\n\t{value: 0x0008, lo: 0x9c, hi: 0x9c},\n\t{value: 0x3308, lo: 0x9d, hi: 0x9d},\n\t{value: 0x0040, lo: 0x9e, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xa9},\n\t{value: 0x0040, lo: 0xaa, hi: 0xaf},\n\t{value: 0x0018, lo: 0xb0, hi: 0xb9},\n\t{value: 0x0040, lo: 0xba, hi: 0xbf},\n\t// Block 0x32, offset 0x1c5\n\t{value: 0x0000, lo: 0x09},\n\t{value: 0x0018, lo: 0x80, hi: 0x85},\n\t{value: 0x0040, lo: 0x86, hi: 0x86},\n\t{value: 0x0218, lo: 0x87, hi: 0x87},\n\t{value: 0x0018, lo: 0x88, hi: 0x8a},\n\t{value: 0x33c0, lo: 0x8b, hi: 0x8d},\n\t{value: 0x0040, lo: 0x8e, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x99},\n\t{value: 0x0040, lo: 0x9a, hi: 0x9f},\n\t{value: 0x0208, lo: 0xa0, hi: 0xbf},\n\t// Block 0x33, offset 0x1cf\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0208, lo: 0x80, hi: 0xb7},\n\t{value: 0x0040, lo: 0xb8, hi: 0xbf},\n\t// Block 0x34, offset 0x1d2\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0x0008, lo: 0x80, hi: 0x84},\n\t{value: 0x3308, lo: 0x85, hi: 0x86},\n\t{value: 0x0208, lo: 0x87, hi: 0xa8},\n\t{value: 0x3308, lo: 0xa9, hi: 0xa9},\n\t{value: 0x0208, lo: 0xaa, hi: 0xaa},\n\t{value: 0x0040, lo: 0xab, hi: 0xaf},\n\t{value: 0x0008, lo: 0xb0, hi: 0xbf},\n\t// Block 0x35, offset 0x1da\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0008, lo: 0x80, hi: 0xb5},\n\t{value: 0x0040, lo: 0xb6, hi: 0xbf},\n\t// Block 0x36, offset 0x1dd\n\t{value: 0x0000, lo: 0x0c},\n\t{value: 0x0008, lo: 0x80, hi: 0x9e},\n\t{value: 0x0040, lo: 0x9f, hi: 0x9f},\n\t{value: 0x3308, lo: 0xa0, hi: 0xa2},\n\t{value: 0x3008, lo: 0xa3, hi: 0xa6},\n\t{value: 0x3308, lo: 0xa7, hi: 0xa8},\n\t{value: 0x3008, lo: 0xa9, hi: 0xab},\n\t{value: 0x0040, lo: 0xac, hi: 0xaf},\n\t{value: 0x3008, lo: 0xb0, hi: 0xb1},\n\t{value: 0x3308, lo: 0xb2, hi: 0xb2},\n\t{value: 0x3008, lo: 0xb3, hi: 0xb8},\n\t{value: 0x3308, lo: 0xb9, hi: 0xbb},\n\t{value: 0x0040, lo: 0xbc, hi: 0xbf},\n\t// Block 0x37, offset 0x1ea\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0x0018, lo: 0x80, hi: 0x80},\n\t{value: 0x0040, lo: 0x81, hi: 0x83},\n\t{value: 0x0018, lo: 0x84, hi: 0x85},\n\t{value: 0x0008, lo: 0x86, hi: 0xad},\n\t{value: 0x0040, lo: 0xae, hi: 0xaf},\n\t{value: 0x0008, lo: 0xb0, hi: 0xb4},\n\t{value: 0x0040, lo: 0xb5, hi: 0xbf},\n\t// Block 0x38, offset 0x1f2\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0008, lo: 0x80, hi: 0xab},\n\t{value: 0x0040, lo: 0xac, hi: 0xaf},\n\t{value: 0x0008, lo: 0xb0, hi: 0xbf},\n\t// Block 0x39, offset 0x1f6\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0x0008, lo: 0x80, hi: 0x89},\n\t{value: 0x0040, lo: 0x8a, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x99},\n\t{value: 0x0028, lo: 0x9a, hi: 0x9a},\n\t{value: 0x0040, lo: 0x9b, hi: 0x9d},\n\t{value: 0x0018, lo: 0x9e, hi: 0xbf},\n\t// Block 0x3a, offset 0x1fd\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0x0008, lo: 0x80, hi: 0x96},\n\t{value: 0x3308, lo: 0x97, hi: 0x98},\n\t{value: 0x3008, lo: 0x99, hi: 0x9a},\n\t{value: 0x3308, lo: 0x9b, hi: 0x9b},\n\t{value: 0x0040, lo: 0x9c, hi: 0x9d},\n\t{value: 0x0018, lo: 0x9e, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xbf},\n\t// Block 0x3b, offset 0x205\n\t{value: 0x0000, lo: 0x0f},\n\t{value: 0x0008, lo: 0x80, hi: 0x94},\n\t{value: 0x3008, lo: 0x95, hi: 0x95},\n\t{value: 0x3308, lo: 0x96, hi: 0x96},\n\t{value: 0x3008, lo: 0x97, hi: 0x97},\n\t{value: 0x3308, lo: 0x98, hi: 0x9e},\n\t{value: 0x0040, lo: 0x9f, hi: 0x9f},\n\t{value: 0x3b08, lo: 0xa0, hi: 0xa0},\n\t{value: 0x3008, lo: 0xa1, hi: 0xa1},\n\t{value: 0x3308, lo: 0xa2, hi: 0xa2},\n\t{value: 0x3008, lo: 0xa3, hi: 0xa4},\n\t{value: 0x3308, lo: 0xa5, hi: 0xac},\n\t{value: 0x3008, lo: 0xad, hi: 0xb2},\n\t{value: 0x3308, lo: 0xb3, hi: 0xbc},\n\t{value: 0x0040, lo: 0xbd, hi: 0xbe},\n\t{value: 0x3308, lo: 0xbf, hi: 0xbf},\n\t// Block 0x3c, offset 0x215\n\t{value: 0x0000, lo: 0x0b},\n\t{value: 0x0008, lo: 0x80, hi: 0x89},\n\t{value: 0x0040, lo: 0x8a, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x99},\n\t{value: 0x0040, lo: 0x9a, hi: 0x9f},\n\t{value: 0x0018, lo: 0xa0, hi: 0xa6},\n\t{value: 0x0008, lo: 0xa7, hi: 0xa7},\n\t{value: 0x0018, lo: 0xa8, hi: 0xad},\n\t{value: 0x0040, lo: 0xae, hi: 0xaf},\n\t{value: 0x3308, lo: 0xb0, hi: 0xbd},\n\t{value: 0x3318, lo: 0xbe, hi: 0xbe},\n\t{value: 0x0040, lo: 0xbf, hi: 0xbf},\n\t// Block 0x3d, offset 0x221\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x0040, lo: 0x80, hi: 0xbf},\n\t// Block 0x3e, offset 0x223\n\t{value: 0x0000, lo: 0x09},\n\t{value: 0x3308, lo: 0x80, hi: 0x83},\n\t{value: 0x3008, lo: 0x84, hi: 0x84},\n\t{value: 0x0008, lo: 0x85, hi: 0xb3},\n\t{value: 0x3308, lo: 0xb4, hi: 0xb4},\n\t{value: 0x3008, lo: 0xb5, hi: 0xb5},\n\t{value: 0x3308, lo: 0xb6, hi: 0xba},\n\t{value: 0x3008, lo: 0xbb, hi: 0xbb},\n\t{value: 0x3308, lo: 0xbc, hi: 0xbc},\n\t{value: 0x3008, lo: 0xbd, hi: 0xbf},\n\t// Block 0x3f, offset 0x22d\n\t{value: 0x0000, lo: 0x0b},\n\t{value: 0x3008, lo: 0x80, hi: 0x81},\n\t{value: 0x3308, lo: 0x82, hi: 0x82},\n\t{value: 0x3008, lo: 0x83, hi: 0x83},\n\t{value: 0x3808, lo: 0x84, hi: 0x84},\n\t{value: 0x0008, lo: 0x85, hi: 0x8b},\n\t{value: 0x0040, lo: 0x8c, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x99},\n\t{value: 0x0018, lo: 0x9a, hi: 0xaa},\n\t{value: 0x3308, lo: 0xab, hi: 0xb3},\n\t{value: 0x0018, lo: 0xb4, hi: 0xbc},\n\t{value: 0x0040, lo: 0xbd, hi: 0xbf},\n\t// Block 0x40, offset 0x239\n\t{value: 0x0000, lo: 0x0b},\n\t{value: 0x3308, lo: 0x80, hi: 0x81},\n\t{value: 0x3008, lo: 0x82, hi: 0x82},\n\t{value: 0x0008, lo: 0x83, hi: 0xa0},\n\t{value: 0x3008, lo: 0xa1, hi: 0xa1},\n\t{value: 0x3308, lo: 0xa2, hi: 0xa5},\n\t{value: 0x3008, lo: 0xa6, hi: 0xa7},\n\t{value: 0x3308, lo: 0xa8, hi: 0xa9},\n\t{value: 0x3808, lo: 0xaa, hi: 0xaa},\n\t{value: 0x3b08, lo: 0xab, hi: 0xab},\n\t{value: 0x3308, lo: 0xac, hi: 0xad},\n\t{value: 0x0008, lo: 0xae, hi: 0xbf},\n\t// Block 0x41, offset 0x245\n\t{value: 0x0000, lo: 0x0b},\n\t{value: 0x0008, lo: 0x80, hi: 0xa5},\n\t{value: 0x3308, lo: 0xa6, hi: 0xa6},\n\t{value: 0x3008, lo: 0xa7, hi: 0xa7},\n\t{value: 0x3308, lo: 0xa8, hi: 0xa9},\n\t{value: 0x3008, lo: 0xaa, hi: 0xac},\n\t{value: 0x3308, lo: 0xad, hi: 0xad},\n\t{value: 0x3008, lo: 0xae, hi: 0xae},\n\t{value: 0x3308, lo: 0xaf, hi: 0xb1},\n\t{value: 0x3808, lo: 0xb2, hi: 0xb3},\n\t{value: 0x0040, lo: 0xb4, hi: 0xbb},\n\t{value: 0x0018, lo: 0xbc, hi: 0xbf},\n\t// Block 0x42, offset 0x251\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0x0008, lo: 0x80, hi: 0xa3},\n\t{value: 0x3008, lo: 0xa4, hi: 0xab},\n\t{value: 0x3308, lo: 0xac, hi: 0xb3},\n\t{value: 0x3008, lo: 0xb4, hi: 0xb5},\n\t{value: 0x3308, lo: 0xb6, hi: 0xb7},\n\t{value: 0x0040, lo: 0xb8, hi: 0xba},\n\t{value: 0x0018, lo: 0xbb, hi: 0xbf},\n\t// Block 0x43, offset 0x259\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0008, lo: 0x80, hi: 0x89},\n\t{value: 0x0040, lo: 0x8a, hi: 0x8c},\n\t{value: 0x0008, lo: 0x8d, hi: 0xbd},\n\t{value: 0x0018, lo: 0xbe, hi: 0xbf},\n\t// Block 0x44, offset 0x25e\n\t{value: 0x0000, lo: 0x09},\n\t{value: 0x0e29, lo: 0x80, hi: 0x80},\n\t{value: 0x0e41, lo: 0x81, hi: 0x81},\n\t{value: 0x0e59, lo: 0x82, hi: 0x82},\n\t{value: 0x0e71, lo: 0x83, hi: 0x83},\n\t{value: 0x0e89, lo: 0x84, hi: 0x85},\n\t{value: 0x0ea1, lo: 0x86, hi: 0x86},\n\t{value: 0x0eb9, lo: 0x87, hi: 0x87},\n\t{value: 0x057d, lo: 0x88, hi: 0x88},\n\t{value: 0x0040, lo: 0x89, hi: 0xbf},\n\t// Block 0x45, offset 0x268\n\t{value: 0x0000, lo: 0x10},\n\t{value: 0x0018, lo: 0x80, hi: 0x87},\n\t{value: 0x0040, lo: 0x88, hi: 0x8f},\n\t{value: 0x3308, lo: 0x90, hi: 0x92},\n\t{value: 0x0018, lo: 0x93, hi: 0x93},\n\t{value: 0x3308, lo: 0x94, hi: 0xa0},\n\t{value: 0x3008, lo: 0xa1, hi: 0xa1},\n\t{value: 0x3308, lo: 0xa2, hi: 0xa8},\n\t{value: 0x0008, lo: 0xa9, hi: 0xac},\n\t{value: 0x3308, lo: 0xad, hi: 0xad},\n\t{value: 0x0008, lo: 0xae, hi: 0xb1},\n\t{value: 0x3008, lo: 0xb2, hi: 0xb3},\n\t{value: 0x3308, lo: 0xb4, hi: 0xb4},\n\t{value: 0x0008, lo: 0xb5, hi: 0xb6},\n\t{value: 0x3008, lo: 0xb7, hi: 0xb7},\n\t{value: 0x3308, lo: 0xb8, hi: 0xb9},\n\t{value: 0x0040, lo: 0xba, hi: 0xbf},\n\t// Block 0x46, offset 0x279\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x3308, lo: 0x80, hi: 0xb9},\n\t{value: 0x0040, lo: 0xba, hi: 0xba},\n\t{value: 0x3308, lo: 0xbb, hi: 0xbf},\n\t// Block 0x47, offset 0x27d\n\t{value: 0x0000, lo: 0x0a},\n\t{value: 0x0008, lo: 0x80, hi: 0x87},\n\t{value: 0xe045, lo: 0x88, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x95},\n\t{value: 0x0040, lo: 0x96, hi: 0x97},\n\t{value: 0xe045, lo: 0x98, hi: 0x9d},\n\t{value: 0x0040, lo: 0x9e, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xa7},\n\t{value: 0xe045, lo: 0xa8, hi: 0xaf},\n\t{value: 0x0008, lo: 0xb0, hi: 0xb7},\n\t{value: 0xe045, lo: 0xb8, hi: 0xbf},\n\t// Block 0x48, offset 0x288\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0040, lo: 0x80, hi: 0x8f},\n\t{value: 0x3318, lo: 0x90, hi: 0xb0},\n\t{value: 0x0040, lo: 0xb1, hi: 0xbf},\n\t// Block 0x49, offset 0x28c\n\t{value: 0x0000, lo: 0x08},\n\t{value: 0x0018, lo: 0x80, hi: 0x82},\n\t{value: 0x0040, lo: 0x83, hi: 0x83},\n\t{value: 0x0008, lo: 0x84, hi: 0x84},\n\t{value: 0x0018, lo: 0x85, hi: 0x88},\n\t{value: 0x24c1, lo: 0x89, hi: 0x89},\n\t{value: 0x0018, lo: 0x8a, hi: 0x8b},\n\t{value: 0x0040, lo: 0x8c, hi: 0x8f},\n\t{value: 0x0018, lo: 0x90, hi: 0xbf},\n\t// Block 0x4a, offset 0x295\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0x0018, lo: 0x80, hi: 0xab},\n\t{value: 0x24f1, lo: 0xac, hi: 0xac},\n\t{value: 0x2529, lo: 0xad, hi: 0xad},\n\t{value: 0x0018, lo: 0xae, hi: 0xae},\n\t{value: 0x2579, lo: 0xaf, hi: 0xaf},\n\t{value: 0x25b1, lo: 0xb0, hi: 0xb0},\n\t{value: 0x0018, lo: 0xb1, hi: 0xbf},\n\t// Block 0x4b, offset 0x29d\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x0018, lo: 0x80, hi: 0x9f},\n\t{value: 0x0080, lo: 0xa0, hi: 0xa0},\n\t{value: 0x0018, lo: 0xa1, hi: 0xad},\n\t{value: 0x0080, lo: 0xae, hi: 0xaf},\n\t{value: 0x0018, lo: 0xb0, hi: 0xbf},\n\t// Block 0x4c, offset 0x2a3\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0018, lo: 0x80, hi: 0xa8},\n\t{value: 0x09c5, lo: 0xa9, hi: 0xa9},\n\t{value: 0x09e5, lo: 0xaa, hi: 0xaa},\n\t{value: 0x0018, lo: 0xab, hi: 0xbf},\n\t// Block 0x4d, offset 0x2a8\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0018, lo: 0x80, hi: 0xa6},\n\t{value: 0x0040, lo: 0xa7, hi: 0xbf},\n\t// Block 0x4e, offset 0x2ab\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0018, lo: 0x80, hi: 0x8b},\n\t{value: 0x28c1, lo: 0x8c, hi: 0x8c},\n\t{value: 0x0018, lo: 0x8d, hi: 0xbf},\n\t// Block 0x4f, offset 0x2af\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x0018, lo: 0x80, hi: 0xb3},\n\t{value: 0x0e66, lo: 0xb4, hi: 0xb4},\n\t{value: 0x292a, lo: 0xb5, hi: 0xb5},\n\t{value: 0x0e86, lo: 0xb6, hi: 0xb6},\n\t{value: 0x0018, lo: 0xb7, hi: 0xbf},\n\t// Block 0x50, offset 0x2b5\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0018, lo: 0x80, hi: 0x9b},\n\t{value: 0x2941, lo: 0x9c, hi: 0x9c},\n\t{value: 0x0018, lo: 0x9d, hi: 0xbf},\n\t// Block 0x51, offset 0x2b9\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0018, lo: 0x80, hi: 0xb3},\n\t{value: 0x0040, lo: 0xb4, hi: 0xb5},\n\t{value: 0x0018, lo: 0xb6, hi: 0xbf},\n\t// Block 0x52, offset 0x2bd\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x0018, lo: 0x80, hi: 0x95},\n\t{value: 0x0040, lo: 0x96, hi: 0x97},\n\t{value: 0x0018, lo: 0x98, hi: 0xb9},\n\t{value: 0x0040, lo: 0xba, hi: 0xbc},\n\t{value: 0x0018, lo: 0xbd, hi: 0xbf},\n\t// Block 0x53, offset 0x2c3\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0x0018, lo: 0x80, hi: 0x88},\n\t{value: 0x0040, lo: 0x89, hi: 0x89},\n\t{value: 0x0018, lo: 0x8a, hi: 0x92},\n\t{value: 0x0040, lo: 0x93, hi: 0xab},\n\t{value: 0x0018, lo: 0xac, hi: 0xaf},\n\t{value: 0x0040, lo: 0xb0, hi: 0xbf},\n\t// Block 0x54, offset 0x2ca\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0xe185, lo: 0x80, hi: 0x8f},\n\t{value: 0x03f5, lo: 0x90, hi: 0x9f},\n\t{value: 0x0ea5, lo: 0xa0, hi: 0xae},\n\t{value: 0x0040, lo: 0xaf, hi: 0xaf},\n\t{value: 0x0008, lo: 0xb0, hi: 0xbf},\n\t// Block 0x55, offset 0x2d0\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0x0008, lo: 0x80, hi: 0xa5},\n\t{value: 0x0040, lo: 0xa6, hi: 0xa6},\n\t{value: 0x0008, lo: 0xa7, hi: 0xa7},\n\t{value: 0x0040, lo: 0xa8, hi: 0xac},\n\t{value: 0x0008, lo: 0xad, hi: 0xad},\n\t{value: 0x0040, lo: 0xae, hi: 0xaf},\n\t{value: 0x0008, lo: 0xb0, hi: 0xbf},\n\t// Block 0x56, offset 0x2d8\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0x0008, lo: 0x80, hi: 0xa7},\n\t{value: 0x0040, lo: 0xa8, hi: 0xae},\n\t{value: 0xe075, lo: 0xaf, hi: 0xaf},\n\t{value: 0x0018, lo: 0xb0, hi: 0xb0},\n\t{value: 0x0040, lo: 0xb1, hi: 0xbe},\n\t{value: 0x3b08, lo: 0xbf, hi: 0xbf},\n\t// Block 0x57, offset 0x2df\n\t{value: 0x0000, lo: 0x0a},\n\t{value: 0x0008, lo: 0x80, hi: 0x96},\n\t{value: 0x0040, lo: 0x97, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xa6},\n\t{value: 0x0040, lo: 0xa7, hi: 0xa7},\n\t{value: 0x0008, lo: 0xa8, hi: 0xae},\n\t{value: 0x0040, lo: 0xaf, hi: 0xaf},\n\t{value: 0x0008, lo: 0xb0, hi: 0xb6},\n\t{value: 0x0040, lo: 0xb7, hi: 0xb7},\n\t{value: 0x0008, lo: 0xb8, hi: 0xbe},\n\t{value: 0x0040, lo: 0xbf, hi: 0xbf},\n\t// Block 0x58, offset 0x2ea\n\t{value: 0x0000, lo: 0x09},\n\t{value: 0x0008, lo: 0x80, hi: 0x86},\n\t{value: 0x0040, lo: 0x87, hi: 0x87},\n\t{value: 0x0008, lo: 0x88, hi: 0x8e},\n\t{value: 0x0040, lo: 0x8f, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x96},\n\t{value: 0x0040, lo: 0x97, hi: 0x97},\n\t{value: 0x0008, lo: 0x98, hi: 0x9e},\n\t{value: 0x0040, lo: 0x9f, hi: 0x9f},\n\t{value: 0x3308, lo: 0xa0, hi: 0xbf},\n\t// Block 0x59, offset 0x2f4\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0018, lo: 0x80, hi: 0xae},\n\t{value: 0x0008, lo: 0xaf, hi: 0xaf},\n\t{value: 0x0018, lo: 0xb0, hi: 0xbf},\n\t// Block 0x5a, offset 0x2f8\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0018, lo: 0x80, hi: 0x89},\n\t{value: 0x0040, lo: 0x8a, hi: 0xbf},\n\t// Block 0x5b, offset 0x2fb\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x0018, lo: 0x80, hi: 0x99},\n\t{value: 0x0040, lo: 0x9a, hi: 0x9a},\n\t{value: 0x0018, lo: 0x9b, hi: 0x9e},\n\t{value: 0x0edd, lo: 0x9f, hi: 0x9f},\n\t{value: 0x0018, lo: 0xa0, hi: 0xbf},\n\t// Block 0x5c, offset 0x301\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0018, lo: 0x80, hi: 0xb2},\n\t{value: 0x0efd, lo: 0xb3, hi: 0xb3},\n\t{value: 0x0040, lo: 0xb4, hi: 0xbf},\n\t// Block 0x5d, offset 0x305\n\t{value: 0x0020, lo: 0x01},\n\t{value: 0x0f1d, lo: 0x80, hi: 0xbf},\n\t// Block 0x5e, offset 0x307\n\t{value: 0x0020, lo: 0x02},\n\t{value: 0x171d, lo: 0x80, hi: 0x8f},\n\t{value: 0x18fd, lo: 0x90, hi: 0xbf},\n\t// Block 0x5f, offset 0x30a\n\t{value: 0x0020, lo: 0x01},\n\t{value: 0x1efd, lo: 0x80, hi: 0xbf},\n\t// Block 0x60, offset 0x30c\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0040, lo: 0x80, hi: 0x80},\n\t{value: 0x0008, lo: 0x81, hi: 0xbf},\n\t// Block 0x61, offset 0x30f\n\t{value: 0x0000, lo: 0x09},\n\t{value: 0x0008, lo: 0x80, hi: 0x96},\n\t{value: 0x0040, lo: 0x97, hi: 0x98},\n\t{value: 0x3308, lo: 0x99, hi: 0x9a},\n\t{value: 0x29e2, lo: 0x9b, hi: 0x9b},\n\t{value: 0x2a0a, lo: 0x9c, hi: 0x9c},\n\t{value: 0x0008, lo: 0x9d, hi: 0x9e},\n\t{value: 0x2a31, lo: 0x9f, hi: 0x9f},\n\t{value: 0x0018, lo: 0xa0, hi: 0xa0},\n\t{value: 0x0008, lo: 0xa1, hi: 0xbf},\n\t// Block 0x62, offset 0x319\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0008, lo: 0x80, hi: 0xbe},\n\t{value: 0x2a69, lo: 0xbf, hi: 0xbf},\n\t// Block 0x63, offset 0x31c\n\t{value: 0x0000, lo: 0x0e},\n\t{value: 0x0040, lo: 0x80, hi: 0x84},\n\t{value: 0x0008, lo: 0x85, hi: 0xae},\n\t{value: 0x0040, lo: 0xaf, hi: 0xb0},\n\t{value: 0x2a1d, lo: 0xb1, hi: 0xb1},\n\t{value: 0x2a3d, lo: 0xb2, hi: 0xb2},\n\t{value: 0x2a5d, lo: 0xb3, hi: 0xb3},\n\t{value: 0x2a7d, lo: 0xb4, hi: 0xb4},\n\t{value: 0x2a5d, lo: 0xb5, hi: 0xb5},\n\t{value: 0x2a9d, lo: 0xb6, hi: 0xb6},\n\t{value: 0x2abd, lo: 0xb7, hi: 0xb7},\n\t{value: 0x2add, lo: 0xb8, hi: 0xb9},\n\t{value: 0x2afd, lo: 0xba, hi: 0xbb},\n\t{value: 0x2b1d, lo: 0xbc, hi: 0xbd},\n\t{value: 0x2afd, lo: 0xbe, hi: 0xbf},\n\t// Block 0x64, offset 0x32b\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0018, lo: 0x80, hi: 0xa3},\n\t{value: 0x0040, lo: 0xa4, hi: 0xaf},\n\t{value: 0x0008, lo: 0xb0, hi: 0xbf},\n\t// Block 0x65, offset 0x32f\n\t{value: 0x0030, lo: 0x04},\n\t{value: 0x2aa2, lo: 0x80, hi: 0x9d},\n\t{value: 0x305a, lo: 0x9e, hi: 0x9e},\n\t{value: 0x0040, lo: 0x9f, hi: 0x9f},\n\t{value: 0x30a2, lo: 0xa0, hi: 0xbf},\n\t// Block 0x66, offset 0x334\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0008, lo: 0x80, hi: 0xaa},\n\t{value: 0x0040, lo: 0xab, hi: 0xbf},\n\t// Block 0x67, offset 0x337\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0008, lo: 0x80, hi: 0x8c},\n\t{value: 0x0040, lo: 0x8d, hi: 0x8f},\n\t{value: 0x0018, lo: 0x90, hi: 0xbf},\n\t// Block 0x68, offset 0x33b\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0018, lo: 0x80, hi: 0x86},\n\t{value: 0x0040, lo: 0x87, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0xbd},\n\t{value: 0x0018, lo: 0xbe, hi: 0xbf},\n\t// Block 0x69, offset 0x340\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0008, lo: 0x80, hi: 0x8c},\n\t{value: 0x0018, lo: 0x8d, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0xab},\n\t{value: 0x0040, lo: 0xac, hi: 0xbf},\n\t// Block 0x6a, offset 0x345\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x0008, lo: 0x80, hi: 0xa5},\n\t{value: 0x0018, lo: 0xa6, hi: 0xaf},\n\t{value: 0x3308, lo: 0xb0, hi: 0xb1},\n\t{value: 0x0018, lo: 0xb2, hi: 0xb7},\n\t{value: 0x0040, lo: 0xb8, hi: 0xbf},\n\t// Block 0x6b, offset 0x34b\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x0040, lo: 0x80, hi: 0xb6},\n\t{value: 0x0008, lo: 0xb7, hi: 0xb7},\n\t{value: 0x2009, lo: 0xb8, hi: 0xb8},\n\t{value: 0x6e89, lo: 0xb9, hi: 0xb9},\n\t{value: 0x0008, lo: 0xba, hi: 0xbf},\n\t// Block 0x6c, offset 0x351\n\t{value: 0x0000, lo: 0x0e},\n\t{value: 0x0008, lo: 0x80, hi: 0x81},\n\t{value: 0x3308, lo: 0x82, hi: 0x82},\n\t{value: 0x0008, lo: 0x83, hi: 0x85},\n\t{value: 0x3b08, lo: 0x86, hi: 0x86},\n\t{value: 0x0008, lo: 0x87, hi: 0x8a},\n\t{value: 0x3308, lo: 0x8b, hi: 0x8b},\n\t{value: 0x0008, lo: 0x8c, hi: 0xa2},\n\t{value: 0x3008, lo: 0xa3, hi: 0xa4},\n\t{value: 0x3308, lo: 0xa5, hi: 0xa6},\n\t{value: 0x3008, lo: 0xa7, hi: 0xa7},\n\t{value: 0x0018, lo: 0xa8, hi: 0xab},\n\t{value: 0x0040, lo: 0xac, hi: 0xaf},\n\t{value: 0x0018, lo: 0xb0, hi: 0xb9},\n\t{value: 0x0040, lo: 0xba, hi: 0xbf},\n\t// Block 0x6d, offset 0x360\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x0208, lo: 0x80, hi: 0xb1},\n\t{value: 0x0108, lo: 0xb2, hi: 0xb2},\n\t{value: 0x0008, lo: 0xb3, hi: 0xb3},\n\t{value: 0x0018, lo: 0xb4, hi: 0xb7},\n\t{value: 0x0040, lo: 0xb8, hi: 0xbf},\n\t// Block 0x6e, offset 0x366\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x3008, lo: 0x80, hi: 0x81},\n\t{value: 0x0008, lo: 0x82, hi: 0xb3},\n\t{value: 0x3008, lo: 0xb4, hi: 0xbf},\n\t// Block 0x6f, offset 0x36a\n\t{value: 0x0000, lo: 0x0e},\n\t{value: 0x3008, lo: 0x80, hi: 0x83},\n\t{value: 0x3b08, lo: 0x84, hi: 0x84},\n\t{value: 0x3308, lo: 0x85, hi: 0x85},\n\t{value: 0x0040, lo: 0x86, hi: 0x8d},\n\t{value: 0x0018, lo: 0x8e, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x99},\n\t{value: 0x0040, lo: 0x9a, hi: 0x9f},\n\t{value: 0x3308, lo: 0xa0, hi: 0xb1},\n\t{value: 0x0008, lo: 0xb2, hi: 0xb7},\n\t{value: 0x0018, lo: 0xb8, hi: 0xba},\n\t{value: 0x0008, lo: 0xbb, hi: 0xbb},\n\t{value: 0x0018, lo: 0xbc, hi: 0xbc},\n\t{value: 0x0008, lo: 0xbd, hi: 0xbd},\n\t{value: 0x0040, lo: 0xbe, hi: 0xbf},\n\t// Block 0x70, offset 0x379\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0008, lo: 0x80, hi: 0xa5},\n\t{value: 0x3308, lo: 0xa6, hi: 0xad},\n\t{value: 0x0018, lo: 0xae, hi: 0xaf},\n\t{value: 0x0008, lo: 0xb0, hi: 0xbf},\n\t// Block 0x71, offset 0x37e\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0x0008, lo: 0x80, hi: 0x86},\n\t{value: 0x3308, lo: 0x87, hi: 0x91},\n\t{value: 0x3008, lo: 0x92, hi: 0x92},\n\t{value: 0x3808, lo: 0x93, hi: 0x93},\n\t{value: 0x0040, lo: 0x94, hi: 0x9e},\n\t{value: 0x0018, lo: 0x9f, hi: 0xbc},\n\t{value: 0x0040, lo: 0xbd, hi: 0xbf},\n\t// Block 0x72, offset 0x386\n\t{value: 0x0000, lo: 0x09},\n\t{value: 0x3308, lo: 0x80, hi: 0x82},\n\t{value: 0x3008, lo: 0x83, hi: 0x83},\n\t{value: 0x0008, lo: 0x84, hi: 0xb2},\n\t{value: 0x3308, lo: 0xb3, hi: 0xb3},\n\t{value: 0x3008, lo: 0xb4, hi: 0xb5},\n\t{value: 0x3308, lo: 0xb6, hi: 0xb9},\n\t{value: 0x3008, lo: 0xba, hi: 0xbb},\n\t{value: 0x3308, lo: 0xbc, hi: 0xbc},\n\t{value: 0x3008, lo: 0xbd, hi: 0xbf},\n\t// Block 0x73, offset 0x390\n\t{value: 0x0000, lo: 0x0a},\n\t{value: 0x3808, lo: 0x80, hi: 0x80},\n\t{value: 0x0018, lo: 0x81, hi: 0x8d},\n\t{value: 0x0040, lo: 0x8e, hi: 0x8e},\n\t{value: 0x0008, lo: 0x8f, hi: 0x99},\n\t{value: 0x0040, lo: 0x9a, hi: 0x9d},\n\t{value: 0x0018, lo: 0x9e, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xa4},\n\t{value: 0x3308, lo: 0xa5, hi: 0xa5},\n\t{value: 0x0008, lo: 0xa6, hi: 0xbe},\n\t{value: 0x0040, lo: 0xbf, hi: 0xbf},\n\t// Block 0x74, offset 0x39b\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0x0008, lo: 0x80, hi: 0xa8},\n\t{value: 0x3308, lo: 0xa9, hi: 0xae},\n\t{value: 0x3008, lo: 0xaf, hi: 0xb0},\n\t{value: 0x3308, lo: 0xb1, hi: 0xb2},\n\t{value: 0x3008, lo: 0xb3, hi: 0xb4},\n\t{value: 0x3308, lo: 0xb5, hi: 0xb6},\n\t{value: 0x0040, lo: 0xb7, hi: 0xbf},\n\t// Block 0x75, offset 0x3a3\n\t{value: 0x0000, lo: 0x10},\n\t{value: 0x0008, lo: 0x80, hi: 0x82},\n\t{value: 0x3308, lo: 0x83, hi: 0x83},\n\t{value: 0x0008, lo: 0x84, hi: 0x8b},\n\t{value: 0x3308, lo: 0x8c, hi: 0x8c},\n\t{value: 0x3008, lo: 0x8d, hi: 0x8d},\n\t{value: 0x0040, lo: 0x8e, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x99},\n\t{value: 0x0040, lo: 0x9a, hi: 0x9b},\n\t{value: 0x0018, lo: 0x9c, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xb6},\n\t{value: 0x0018, lo: 0xb7, hi: 0xb9},\n\t{value: 0x0008, lo: 0xba, hi: 0xba},\n\t{value: 0x3008, lo: 0xbb, hi: 0xbb},\n\t{value: 0x3308, lo: 0xbc, hi: 0xbc},\n\t{value: 0x3008, lo: 0xbd, hi: 0xbd},\n\t{value: 0x0008, lo: 0xbe, hi: 0xbf},\n\t// Block 0x76, offset 0x3b4\n\t{value: 0x0000, lo: 0x08},\n\t{value: 0x0008, lo: 0x80, hi: 0xaf},\n\t{value: 0x3308, lo: 0xb0, hi: 0xb0},\n\t{value: 0x0008, lo: 0xb1, hi: 0xb1},\n\t{value: 0x3308, lo: 0xb2, hi: 0xb4},\n\t{value: 0x0008, lo: 0xb5, hi: 0xb6},\n\t{value: 0x3308, lo: 0xb7, hi: 0xb8},\n\t{value: 0x0008, lo: 0xb9, hi: 0xbd},\n\t{value: 0x3308, lo: 0xbe, hi: 0xbf},\n\t// Block 0x77, offset 0x3bd\n\t{value: 0x0000, lo: 0x0f},\n\t{value: 0x0008, lo: 0x80, hi: 0x80},\n\t{value: 0x3308, lo: 0x81, hi: 0x81},\n\t{value: 0x0008, lo: 0x82, hi: 0x82},\n\t{value: 0x0040, lo: 0x83, hi: 0x9a},\n\t{value: 0x0008, lo: 0x9b, hi: 0x9d},\n\t{value: 0x0018, lo: 0x9e, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xaa},\n\t{value: 0x3008, lo: 0xab, hi: 0xab},\n\t{value: 0x3308, lo: 0xac, hi: 0xad},\n\t{value: 0x3008, lo: 0xae, hi: 0xaf},\n\t{value: 0x0018, lo: 0xb0, hi: 0xb1},\n\t{value: 0x0008, lo: 0xb2, hi: 0xb4},\n\t{value: 0x3008, lo: 0xb5, hi: 0xb5},\n\t{value: 0x3b08, lo: 0xb6, hi: 0xb6},\n\t{value: 0x0040, lo: 0xb7, hi: 0xbf},\n\t// Block 0x78, offset 0x3cd\n\t{value: 0x0000, lo: 0x0c},\n\t{value: 0x0040, lo: 0x80, hi: 0x80},\n\t{value: 0x0008, lo: 0x81, hi: 0x86},\n\t{value: 0x0040, lo: 0x87, hi: 0x88},\n\t{value: 0x0008, lo: 0x89, hi: 0x8e},\n\t{value: 0x0040, lo: 0x8f, hi: 0x90},\n\t{value: 0x0008, lo: 0x91, hi: 0x96},\n\t{value: 0x0040, lo: 0x97, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xa6},\n\t{value: 0x0040, lo: 0xa7, hi: 0xa7},\n\t{value: 0x0008, lo: 0xa8, hi: 0xae},\n\t{value: 0x0040, lo: 0xaf, hi: 0xaf},\n\t{value: 0x0008, lo: 0xb0, hi: 0xbf},\n\t// Block 0x79, offset 0x3da\n\t{value: 0x0000, lo: 0x09},\n\t{value: 0x0008, lo: 0x80, hi: 0x9a},\n\t{value: 0x0018, lo: 0x9b, hi: 0x9b},\n\t{value: 0x4465, lo: 0x9c, hi: 0x9c},\n\t{value: 0x447d, lo: 0x9d, hi: 0x9d},\n\t{value: 0x2971, lo: 0x9e, hi: 0x9e},\n\t{value: 0xe06d, lo: 0x9f, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xa5},\n\t{value: 0x0040, lo: 0xa6, hi: 0xaf},\n\t{value: 0x4495, lo: 0xb0, hi: 0xbf},\n\t// Block 0x7a, offset 0x3e4\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x44b5, lo: 0x80, hi: 0x8f},\n\t{value: 0x44d5, lo: 0x90, hi: 0x9f},\n\t{value: 0x44f5, lo: 0xa0, hi: 0xaf},\n\t{value: 0x44d5, lo: 0xb0, hi: 0xbf},\n\t// Block 0x7b, offset 0x3e9\n\t{value: 0x0000, lo: 0x0c},\n\t{value: 0x0008, lo: 0x80, hi: 0xa2},\n\t{value: 0x3008, lo: 0xa3, hi: 0xa4},\n\t{value: 0x3308, lo: 0xa5, hi: 0xa5},\n\t{value: 0x3008, lo: 0xa6, hi: 0xa7},\n\t{value: 0x3308, lo: 0xa8, hi: 0xa8},\n\t{value: 0x3008, lo: 0xa9, hi: 0xaa},\n\t{value: 0x0018, lo: 0xab, hi: 0xab},\n\t{value: 0x3008, lo: 0xac, hi: 0xac},\n\t{value: 0x3b08, lo: 0xad, hi: 0xad},\n\t{value: 0x0040, lo: 0xae, hi: 0xaf},\n\t{value: 0x0008, lo: 0xb0, hi: 0xb9},\n\t{value: 0x0040, lo: 0xba, hi: 0xbf},\n\t// Block 0x7c, offset 0x3f6\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0008, lo: 0x80, hi: 0xa3},\n\t{value: 0x0040, lo: 0xa4, hi: 0xaf},\n\t{value: 0x0018, lo: 0xb0, hi: 0xbf},\n\t// Block 0x7d, offset 0x3fa\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0018, lo: 0x80, hi: 0x86},\n\t{value: 0x0040, lo: 0x87, hi: 0x8a},\n\t{value: 0x0018, lo: 0x8b, hi: 0xbb},\n\t{value: 0x0040, lo: 0xbc, hi: 0xbf},\n\t// Block 0x7e, offset 0x3ff\n\t{value: 0x0020, lo: 0x01},\n\t{value: 0x4515, lo: 0x80, hi: 0xbf},\n\t// Block 0x7f, offset 0x401\n\t{value: 0x0020, lo: 0x03},\n\t{value: 0x4d15, lo: 0x80, hi: 0x94},\n\t{value: 0x4ad5, lo: 0x95, hi: 0x95},\n\t{value: 0x4fb5, lo: 0x96, hi: 0xbf},\n\t// Block 0x80, offset 0x405\n\t{value: 0x0020, lo: 0x01},\n\t{value: 0x54f5, lo: 0x80, hi: 0xbf},\n\t// Block 0x81, offset 0x407\n\t{value: 0x0020, lo: 0x03},\n\t{value: 0x5cf5, lo: 0x80, hi: 0x84},\n\t{value: 0x5655, lo: 0x85, hi: 0x85},\n\t{value: 0x5d95, lo: 0x86, hi: 0xbf},\n\t// Block 0x82, offset 0x40b\n\t{value: 0x0020, lo: 0x08},\n\t{value: 0x6b55, lo: 0x80, hi: 0x8f},\n\t{value: 0x6d15, lo: 0x90, hi: 0x90},\n\t{value: 0x6d55, lo: 0x91, hi: 0xab},\n\t{value: 0x6ea1, lo: 0xac, hi: 0xac},\n\t{value: 0x70b5, lo: 0xad, hi: 0xad},\n\t{value: 0x0040, lo: 0xae, hi: 0xae},\n\t{value: 0x0040, lo: 0xaf, hi: 0xaf},\n\t{value: 0x70d5, lo: 0xb0, hi: 0xbf},\n\t// Block 0x83, offset 0x414\n\t{value: 0x0020, lo: 0x05},\n\t{value: 0x72d5, lo: 0x80, hi: 0xad},\n\t{value: 0x6535, lo: 0xae, hi: 0xae},\n\t{value: 0x7895, lo: 0xaf, hi: 0xb5},\n\t{value: 0x6f55, lo: 0xb6, hi: 0xb6},\n\t{value: 0x7975, lo: 0xb7, hi: 0xbf},\n\t// Block 0x84, offset 0x41a\n\t{value: 0x0028, lo: 0x03},\n\t{value: 0x7c21, lo: 0x80, hi: 0x82},\n\t{value: 0x7be1, lo: 0x83, hi: 0x83},\n\t{value: 0x7c99, lo: 0x84, hi: 0xbf},\n\t// Block 0x85, offset 0x41e\n\t{value: 0x0038, lo: 0x0f},\n\t{value: 0x9db1, lo: 0x80, hi: 0x83},\n\t{value: 0x9e59, lo: 0x84, hi: 0x85},\n\t{value: 0x9e91, lo: 0x86, hi: 0x87},\n\t{value: 0x9ec9, lo: 0x88, hi: 0x8f},\n\t{value: 0x0040, lo: 0x90, hi: 0x90},\n\t{value: 0x0040, lo: 0x91, hi: 0x91},\n\t{value: 0xa089, lo: 0x92, hi: 0x97},\n\t{value: 0xa1a1, lo: 0x98, hi: 0x9c},\n\t{value: 0xa281, lo: 0x9d, hi: 0xb3},\n\t{value: 0x9d41, lo: 0xb4, hi: 0xb4},\n\t{value: 0x9db1, lo: 0xb5, hi: 0xb5},\n\t{value: 0xa789, lo: 0xb6, hi: 0xbb},\n\t{value: 0xa869, lo: 0xbc, hi: 0xbc},\n\t{value: 0xa7f9, lo: 0xbd, hi: 0xbd},\n\t{value: 0xa8d9, lo: 0xbe, hi: 0xbf},\n\t// Block 0x86, offset 0x42e\n\t{value: 0x0000, lo: 0x09},\n\t{value: 0x0008, lo: 0x80, hi: 0x8b},\n\t{value: 0x0040, lo: 0x8c, hi: 0x8c},\n\t{value: 0x0008, lo: 0x8d, hi: 0xa6},\n\t{value: 0x0040, lo: 0xa7, hi: 0xa7},\n\t{value: 0x0008, lo: 0xa8, hi: 0xba},\n\t{value: 0x0040, lo: 0xbb, hi: 0xbb},\n\t{value: 0x0008, lo: 0xbc, hi: 0xbd},\n\t{value: 0x0040, lo: 0xbe, hi: 0xbe},\n\t{value: 0x0008, lo: 0xbf, hi: 0xbf},\n\t// Block 0x87, offset 0x438\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0008, lo: 0x80, hi: 0x8d},\n\t{value: 0x0040, lo: 0x8e, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x9d},\n\t{value: 0x0040, lo: 0x9e, hi: 0xbf},\n\t// Block 0x88, offset 0x43d\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0008, lo: 0x80, hi: 0xba},\n\t{value: 0x0040, lo: 0xbb, hi: 0xbf},\n\t// Block 0x89, offset 0x440\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x0018, lo: 0x80, hi: 0x82},\n\t{value: 0x0040, lo: 0x83, hi: 0x86},\n\t{value: 0x0018, lo: 0x87, hi: 0xb3},\n\t{value: 0x0040, lo: 0xb4, hi: 0xb6},\n\t{value: 0x0018, lo: 0xb7, hi: 0xbf},\n\t// Block 0x8a, offset 0x446\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0x0018, lo: 0x80, hi: 0x8e},\n\t{value: 0x0040, lo: 0x8f, hi: 0x8f},\n\t{value: 0x0018, lo: 0x90, hi: 0x9b},\n\t{value: 0x0040, lo: 0x9c, hi: 0x9f},\n\t{value: 0x0018, lo: 0xa0, hi: 0xa0},\n\t{value: 0x0040, lo: 0xa1, hi: 0xbf},\n\t// Block 0x8b, offset 0x44d\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0040, lo: 0x80, hi: 0x8f},\n\t{value: 0x0018, lo: 0x90, hi: 0xbc},\n\t{value: 0x3308, lo: 0xbd, hi: 0xbd},\n\t{value: 0x0040, lo: 0xbe, hi: 0xbf},\n\t// Block 0x8c, offset 0x452\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0008, lo: 0x80, hi: 0x9c},\n\t{value: 0x0040, lo: 0x9d, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xbf},\n\t// Block 0x8d, offset 0x456\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x0008, lo: 0x80, hi: 0x90},\n\t{value: 0x0040, lo: 0x91, hi: 0x9f},\n\t{value: 0x3308, lo: 0xa0, hi: 0xa0},\n\t{value: 0x0018, lo: 0xa1, hi: 0xbb},\n\t{value: 0x0040, lo: 0xbc, hi: 0xbf},\n\t// Block 0x8e, offset 0x45c\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0008, lo: 0x80, hi: 0x9f},\n\t{value: 0x0018, lo: 0xa0, hi: 0xa3},\n\t{value: 0x0040, lo: 0xa4, hi: 0xac},\n\t{value: 0x0008, lo: 0xad, hi: 0xbf},\n\t// Block 0x8f, offset 0x461\n\t{value: 0x0000, lo: 0x08},\n\t{value: 0x0008, lo: 0x80, hi: 0x80},\n\t{value: 0x0018, lo: 0x81, hi: 0x81},\n\t{value: 0x0008, lo: 0x82, hi: 0x89},\n\t{value: 0x0018, lo: 0x8a, hi: 0x8a},\n\t{value: 0x0040, lo: 0x8b, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0xb5},\n\t{value: 0x3308, lo: 0xb6, hi: 0xba},\n\t{value: 0x0040, lo: 0xbb, hi: 0xbf},\n\t// Block 0x90, offset 0x46a\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0008, lo: 0x80, hi: 0x9d},\n\t{value: 0x0040, lo: 0x9e, hi: 0x9e},\n\t{value: 0x0018, lo: 0x9f, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xbf},\n\t// Block 0x91, offset 0x46f\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x0008, lo: 0x80, hi: 0x83},\n\t{value: 0x0040, lo: 0x84, hi: 0x87},\n\t{value: 0x0008, lo: 0x88, hi: 0x8f},\n\t{value: 0x0018, lo: 0x90, hi: 0x95},\n\t{value: 0x0040, lo: 0x96, hi: 0xbf},\n\t// Block 0x92, offset 0x475\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0xe145, lo: 0x80, hi: 0x87},\n\t{value: 0xe1c5, lo: 0x88, hi: 0x8f},\n\t{value: 0xe145, lo: 0x90, hi: 0x97},\n\t{value: 0x8ad5, lo: 0x98, hi: 0x9f},\n\t{value: 0x8aed, lo: 0xa0, hi: 0xa7},\n\t{value: 0x0008, lo: 0xa8, hi: 0xbf},\n\t// Block 0x93, offset 0x47c\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0x0008, lo: 0x80, hi: 0x9d},\n\t{value: 0x0040, lo: 0x9e, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xa9},\n\t{value: 0x0040, lo: 0xaa, hi: 0xaf},\n\t{value: 0x8aed, lo: 0xb0, hi: 0xb7},\n\t{value: 0x8ad5, lo: 0xb8, hi: 0xbf},\n\t// Block 0x94, offset 0x483\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0xe145, lo: 0x80, hi: 0x87},\n\t{value: 0xe1c5, lo: 0x88, hi: 0x8f},\n\t{value: 0xe145, lo: 0x90, hi: 0x93},\n\t{value: 0x0040, lo: 0x94, hi: 0x97},\n\t{value: 0x0008, lo: 0x98, hi: 0xbb},\n\t{value: 0x0040, lo: 0xbc, hi: 0xbf},\n\t// Block 0x95, offset 0x48a\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0008, lo: 0x80, hi: 0xa7},\n\t{value: 0x0040, lo: 0xa8, hi: 0xaf},\n\t{value: 0x0008, lo: 0xb0, hi: 0xbf},\n\t// Block 0x96, offset 0x48e\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0008, lo: 0x80, hi: 0xa3},\n\t{value: 0x0040, lo: 0xa4, hi: 0xae},\n\t{value: 0x0018, lo: 0xaf, hi: 0xaf},\n\t{value: 0x0040, lo: 0xb0, hi: 0xbf},\n\t// Block 0x97, offset 0x493\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0008, lo: 0x80, hi: 0xb6},\n\t{value: 0x0040, lo: 0xb7, hi: 0xbf},\n\t// Block 0x98, offset 0x496\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0008, lo: 0x80, hi: 0x95},\n\t{value: 0x0040, lo: 0x96, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xa7},\n\t{value: 0x0040, lo: 0xa8, hi: 0xbf},\n\t// Block 0x99, offset 0x49b\n\t{value: 0x0000, lo: 0x0b},\n\t{value: 0x0808, lo: 0x80, hi: 0x85},\n\t{value: 0x0040, lo: 0x86, hi: 0x87},\n\t{value: 0x0808, lo: 0x88, hi: 0x88},\n\t{value: 0x0040, lo: 0x89, hi: 0x89},\n\t{value: 0x0808, lo: 0x8a, hi: 0xb5},\n\t{value: 0x0040, lo: 0xb6, hi: 0xb6},\n\t{value: 0x0808, lo: 0xb7, hi: 0xb8},\n\t{value: 0x0040, lo: 0xb9, hi: 0xbb},\n\t{value: 0x0808, lo: 0xbc, hi: 0xbc},\n\t{value: 0x0040, lo: 0xbd, hi: 0xbe},\n\t{value: 0x0808, lo: 0xbf, hi: 0xbf},\n\t// Block 0x9a, offset 0x4a7\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x0808, lo: 0x80, hi: 0x95},\n\t{value: 0x0040, lo: 0x96, hi: 0x96},\n\t{value: 0x0818, lo: 0x97, hi: 0x9f},\n\t{value: 0x0808, lo: 0xa0, hi: 0xb6},\n\t{value: 0x0818, lo: 0xb7, hi: 0xbf},\n\t// Block 0x9b, offset 0x4ad\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0808, lo: 0x80, hi: 0x9e},\n\t{value: 0x0040, lo: 0x9f, hi: 0xa6},\n\t{value: 0x0818, lo: 0xa7, hi: 0xaf},\n\t{value: 0x0040, lo: 0xb0, hi: 0xbf},\n\t// Block 0x9c, offset 0x4b2\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0x0040, lo: 0x80, hi: 0x9f},\n\t{value: 0x0808, lo: 0xa0, hi: 0xb2},\n\t{value: 0x0040, lo: 0xb3, hi: 0xb3},\n\t{value: 0x0808, lo: 0xb4, hi: 0xb5},\n\t{value: 0x0040, lo: 0xb6, hi: 0xba},\n\t{value: 0x0818, lo: 0xbb, hi: 0xbf},\n\t// Block 0x9d, offset 0x4b9\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0x0808, lo: 0x80, hi: 0x95},\n\t{value: 0x0818, lo: 0x96, hi: 0x9b},\n\t{value: 0x0040, lo: 0x9c, hi: 0x9e},\n\t{value: 0x0018, lo: 0x9f, hi: 0x9f},\n\t{value: 0x0808, lo: 0xa0, hi: 0xb9},\n\t{value: 0x0040, lo: 0xba, hi: 0xbe},\n\t{value: 0x0818, lo: 0xbf, hi: 0xbf},\n\t// Block 0x9e, offset 0x4c1\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0808, lo: 0x80, hi: 0xb7},\n\t{value: 0x0040, lo: 0xb8, hi: 0xbb},\n\t{value: 0x0818, lo: 0xbc, hi: 0xbd},\n\t{value: 0x0808, lo: 0xbe, hi: 0xbf},\n\t// Block 0x9f, offset 0x4c6\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0818, lo: 0x80, hi: 0x8f},\n\t{value: 0x0040, lo: 0x90, hi: 0x91},\n\t{value: 0x0818, lo: 0x92, hi: 0xbf},\n\t// Block 0xa0, offset 0x4ca\n\t{value: 0x0000, lo: 0x0f},\n\t{value: 0x0808, lo: 0x80, hi: 0x80},\n\t{value: 0x3308, lo: 0x81, hi: 0x83},\n\t{value: 0x0040, lo: 0x84, hi: 0x84},\n\t{value: 0x3308, lo: 0x85, hi: 0x86},\n\t{value: 0x0040, lo: 0x87, hi: 0x8b},\n\t{value: 0x3308, lo: 0x8c, hi: 0x8f},\n\t{value: 0x0808, lo: 0x90, hi: 0x93},\n\t{value: 0x0040, lo: 0x94, hi: 0x94},\n\t{value: 0x0808, lo: 0x95, hi: 0x97},\n\t{value: 0x0040, lo: 0x98, hi: 0x98},\n\t{value: 0x0808, lo: 0x99, hi: 0xb3},\n\t{value: 0x0040, lo: 0xb4, hi: 0xb7},\n\t{value: 0x3308, lo: 0xb8, hi: 0xba},\n\t{value: 0x0040, lo: 0xbb, hi: 0xbe},\n\t{value: 0x3b08, lo: 0xbf, hi: 0xbf},\n\t// Block 0xa1, offset 0x4da\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0x0818, lo: 0x80, hi: 0x87},\n\t{value: 0x0040, lo: 0x88, hi: 0x8f},\n\t{value: 0x0818, lo: 0x90, hi: 0x98},\n\t{value: 0x0040, lo: 0x99, hi: 0x9f},\n\t{value: 0x0808, lo: 0xa0, hi: 0xbc},\n\t{value: 0x0818, lo: 0xbd, hi: 0xbf},\n\t// Block 0xa2, offset 0x4e1\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0808, lo: 0x80, hi: 0x9c},\n\t{value: 0x0818, lo: 0x9d, hi: 0x9f},\n\t{value: 0x0040, lo: 0xa0, hi: 0xbf},\n\t// Block 0xa3, offset 0x4e5\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0808, lo: 0x80, hi: 0xb5},\n\t{value: 0x0040, lo: 0xb6, hi: 0xb8},\n\t{value: 0x0018, lo: 0xb9, hi: 0xbf},\n\t// Block 0xa4, offset 0x4e9\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0x0808, lo: 0x80, hi: 0x95},\n\t{value: 0x0040, lo: 0x96, hi: 0x97},\n\t{value: 0x0818, lo: 0x98, hi: 0x9f},\n\t{value: 0x0808, lo: 0xa0, hi: 0xb2},\n\t{value: 0x0040, lo: 0xb3, hi: 0xb7},\n\t{value: 0x0818, lo: 0xb8, hi: 0xbf},\n\t// Block 0xa5, offset 0x4f0\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x0808, lo: 0x80, hi: 0xbf},\n\t// Block 0xa6, offset 0x4f2\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0808, lo: 0x80, hi: 0x88},\n\t{value: 0x0040, lo: 0x89, hi: 0xbf},\n\t// Block 0xa7, offset 0x4f5\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x03dd, lo: 0x80, hi: 0xb2},\n\t{value: 0x0040, lo: 0xb3, hi: 0xbf},\n\t// Block 0xa8, offset 0x4f8\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0808, lo: 0x80, hi: 0xb2},\n\t{value: 0x0040, lo: 0xb3, hi: 0xb9},\n\t{value: 0x0818, lo: 0xba, hi: 0xbf},\n\t// Block 0xa9, offset 0x4fc\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0040, lo: 0x80, hi: 0x9f},\n\t{value: 0x0818, lo: 0xa0, hi: 0xbe},\n\t{value: 0x0040, lo: 0xbf, hi: 0xbf},\n\t// Block 0xaa, offset 0x500\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x3008, lo: 0x80, hi: 0x80},\n\t{value: 0x3308, lo: 0x81, hi: 0x81},\n\t{value: 0x3008, lo: 0x82, hi: 0x82},\n\t{value: 0x0008, lo: 0x83, hi: 0xb7},\n\t{value: 0x3308, lo: 0xb8, hi: 0xbf},\n\t// Block 0xab, offset 0x506\n\t{value: 0x0000, lo: 0x08},\n\t{value: 0x3308, lo: 0x80, hi: 0x85},\n\t{value: 0x3b08, lo: 0x86, hi: 0x86},\n\t{value: 0x0018, lo: 0x87, hi: 0x8d},\n\t{value: 0x0040, lo: 0x8e, hi: 0x91},\n\t{value: 0x0018, lo: 0x92, hi: 0xa5},\n\t{value: 0x0008, lo: 0xa6, hi: 0xaf},\n\t{value: 0x0040, lo: 0xb0, hi: 0xbe},\n\t{value: 0x3b08, lo: 0xbf, hi: 0xbf},\n\t// Block 0xac, offset 0x50f\n\t{value: 0x0000, lo: 0x0b},\n\t{value: 0x3308, lo: 0x80, hi: 0x81},\n\t{value: 0x3008, lo: 0x82, hi: 0x82},\n\t{value: 0x0008, lo: 0x83, hi: 0xaf},\n\t{value: 0x3008, lo: 0xb0, hi: 0xb2},\n\t{value: 0x3308, lo: 0xb3, hi: 0xb6},\n\t{value: 0x3008, lo: 0xb7, hi: 0xb8},\n\t{value: 0x3b08, lo: 0xb9, hi: 0xb9},\n\t{value: 0x3308, lo: 0xba, hi: 0xba},\n\t{value: 0x0018, lo: 0xbb, hi: 0xbc},\n\t{value: 0x0340, lo: 0xbd, hi: 0xbd},\n\t{value: 0x0018, lo: 0xbe, hi: 0xbf},\n\t// Block 0xad, offset 0x51b\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0x0018, lo: 0x80, hi: 0x81},\n\t{value: 0x0040, lo: 0x82, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0xa8},\n\t{value: 0x0040, lo: 0xa9, hi: 0xaf},\n\t{value: 0x0008, lo: 0xb0, hi: 0xb9},\n\t{value: 0x0040, lo: 0xba, hi: 0xbf},\n\t// Block 0xae, offset 0x522\n\t{value: 0x0000, lo: 0x08},\n\t{value: 0x3308, lo: 0x80, hi: 0x82},\n\t{value: 0x0008, lo: 0x83, hi: 0xa6},\n\t{value: 0x3308, lo: 0xa7, hi: 0xab},\n\t{value: 0x3008, lo: 0xac, hi: 0xac},\n\t{value: 0x3308, lo: 0xad, hi: 0xb2},\n\t{value: 0x3b08, lo: 0xb3, hi: 0xb4},\n\t{value: 0x0040, lo: 0xb5, hi: 0xb5},\n\t{value: 0x0008, lo: 0xb6, hi: 0xbf},\n\t// Block 0xaf, offset 0x52b\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0x0018, lo: 0x80, hi: 0x83},\n\t{value: 0x0040, lo: 0x84, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0xb2},\n\t{value: 0x3308, lo: 0xb3, hi: 0xb3},\n\t{value: 0x0018, lo: 0xb4, hi: 0xb5},\n\t{value: 0x0008, lo: 0xb6, hi: 0xb6},\n\t{value: 0x0040, lo: 0xb7, hi: 0xbf},\n\t// Block 0xb0, offset 0x533\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0x3308, lo: 0x80, hi: 0x81},\n\t{value: 0x3008, lo: 0x82, hi: 0x82},\n\t{value: 0x0008, lo: 0x83, hi: 0xb2},\n\t{value: 0x3008, lo: 0xb3, hi: 0xb5},\n\t{value: 0x3308, lo: 0xb6, hi: 0xbe},\n\t{value: 0x3008, lo: 0xbf, hi: 0xbf},\n\t// Block 0xb1, offset 0x53a\n\t{value: 0x0000, lo: 0x0d},\n\t{value: 0x3808, lo: 0x80, hi: 0x80},\n\t{value: 0x0008, lo: 0x81, hi: 0x84},\n\t{value: 0x0018, lo: 0x85, hi: 0x89},\n\t{value: 0x3308, lo: 0x8a, hi: 0x8c},\n\t{value: 0x0018, lo: 0x8d, hi: 0x8d},\n\t{value: 0x0040, lo: 0x8e, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x9a},\n\t{value: 0x0018, lo: 0x9b, hi: 0x9b},\n\t{value: 0x0008, lo: 0x9c, hi: 0x9c},\n\t{value: 0x0018, lo: 0x9d, hi: 0x9f},\n\t{value: 0x0040, lo: 0xa0, hi: 0xa0},\n\t{value: 0x0018, lo: 0xa1, hi: 0xb4},\n\t{value: 0x0040, lo: 0xb5, hi: 0xbf},\n\t// Block 0xb2, offset 0x548\n\t{value: 0x0000, lo: 0x0c},\n\t{value: 0x0008, lo: 0x80, hi: 0x91},\n\t{value: 0x0040, lo: 0x92, hi: 0x92},\n\t{value: 0x0008, lo: 0x93, hi: 0xab},\n\t{value: 0x3008, lo: 0xac, hi: 0xae},\n\t{value: 0x3308, lo: 0xaf, hi: 0xb1},\n\t{value: 0x3008, lo: 0xb2, hi: 0xb3},\n\t{value: 0x3308, lo: 0xb4, hi: 0xb4},\n\t{value: 0x3808, lo: 0xb5, hi: 0xb5},\n\t{value: 0x3308, lo: 0xb6, hi: 0xb7},\n\t{value: 0x0018, lo: 0xb8, hi: 0xbd},\n\t{value: 0x3308, lo: 0xbe, hi: 0xbe},\n\t{value: 0x0040, lo: 0xbf, hi: 0xbf},\n\t// Block 0xb3, offset 0x555\n\t{value: 0x0000, lo: 0x0c},\n\t{value: 0x0008, lo: 0x80, hi: 0x86},\n\t{value: 0x0040, lo: 0x87, hi: 0x87},\n\t{value: 0x0008, lo: 0x88, hi: 0x88},\n\t{value: 0x0040, lo: 0x89, hi: 0x89},\n\t{value: 0x0008, lo: 0x8a, hi: 0x8d},\n\t{value: 0x0040, lo: 0x8e, hi: 0x8e},\n\t{value: 0x0008, lo: 0x8f, hi: 0x9d},\n\t{value: 0x0040, lo: 0x9e, hi: 0x9e},\n\t{value: 0x0008, lo: 0x9f, hi: 0xa8},\n\t{value: 0x0018, lo: 0xa9, hi: 0xa9},\n\t{value: 0x0040, lo: 0xaa, hi: 0xaf},\n\t{value: 0x0008, lo: 0xb0, hi: 0xbf},\n\t// Block 0xb4, offset 0x562\n\t{value: 0x0000, lo: 0x08},\n\t{value: 0x0008, lo: 0x80, hi: 0x9e},\n\t{value: 0x3308, lo: 0x9f, hi: 0x9f},\n\t{value: 0x3008, lo: 0xa0, hi: 0xa2},\n\t{value: 0x3308, lo: 0xa3, hi: 0xa9},\n\t{value: 0x3b08, lo: 0xaa, hi: 0xaa},\n\t{value: 0x0040, lo: 0xab, hi: 0xaf},\n\t{value: 0x0008, lo: 0xb0, hi: 0xb9},\n\t{value: 0x0040, lo: 0xba, hi: 0xbf},\n\t// Block 0xb5, offset 0x56b\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0008, lo: 0x80, hi: 0xb4},\n\t{value: 0x3008, lo: 0xb5, hi: 0xb7},\n\t{value: 0x3308, lo: 0xb8, hi: 0xbf},\n\t// Block 0xb6, offset 0x56f\n\t{value: 0x0000, lo: 0x0d},\n\t{value: 0x3008, lo: 0x80, hi: 0x81},\n\t{value: 0x3b08, lo: 0x82, hi: 0x82},\n\t{value: 0x3308, lo: 0x83, hi: 0x84},\n\t{value: 0x3008, lo: 0x85, hi: 0x85},\n\t{value: 0x3308, lo: 0x86, hi: 0x86},\n\t{value: 0x0008, lo: 0x87, hi: 0x8a},\n\t{value: 0x0018, lo: 0x8b, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x99},\n\t{value: 0x0040, lo: 0x9a, hi: 0x9a},\n\t{value: 0x0018, lo: 0x9b, hi: 0x9b},\n\t{value: 0x0040, lo: 0x9c, hi: 0x9c},\n\t{value: 0x0018, lo: 0x9d, hi: 0x9d},\n\t{value: 0x0040, lo: 0x9e, hi: 0xbf},\n\t// Block 0xb7, offset 0x57d\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0x0008, lo: 0x80, hi: 0xaf},\n\t{value: 0x3008, lo: 0xb0, hi: 0xb2},\n\t{value: 0x3308, lo: 0xb3, hi: 0xb8},\n\t{value: 0x3008, lo: 0xb9, hi: 0xb9},\n\t{value: 0x3308, lo: 0xba, hi: 0xba},\n\t{value: 0x3008, lo: 0xbb, hi: 0xbe},\n\t{value: 0x3308, lo: 0xbf, hi: 0xbf},\n\t// Block 0xb8, offset 0x585\n\t{value: 0x0000, lo: 0x0a},\n\t{value: 0x3308, lo: 0x80, hi: 0x80},\n\t{value: 0x3008, lo: 0x81, hi: 0x81},\n\t{value: 0x3b08, lo: 0x82, hi: 0x82},\n\t{value: 0x3308, lo: 0x83, hi: 0x83},\n\t{value: 0x0008, lo: 0x84, hi: 0x85},\n\t{value: 0x0018, lo: 0x86, hi: 0x86},\n\t{value: 0x0008, lo: 0x87, hi: 0x87},\n\t{value: 0x0040, lo: 0x88, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x99},\n\t{value: 0x0040, lo: 0x9a, hi: 0xbf},\n\t// Block 0xb9, offset 0x590\n\t{value: 0x0000, lo: 0x08},\n\t{value: 0x0008, lo: 0x80, hi: 0xae},\n\t{value: 0x3008, lo: 0xaf, hi: 0xb1},\n\t{value: 0x3308, lo: 0xb2, hi: 0xb5},\n\t{value: 0x0040, lo: 0xb6, hi: 0xb7},\n\t{value: 0x3008, lo: 0xb8, hi: 0xbb},\n\t{value: 0x3308, lo: 0xbc, hi: 0xbd},\n\t{value: 0x3008, lo: 0xbe, hi: 0xbe},\n\t{value: 0x3b08, lo: 0xbf, hi: 0xbf},\n\t// Block 0xba, offset 0x599\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x3308, lo: 0x80, hi: 0x80},\n\t{value: 0x0018, lo: 0x81, hi: 0x97},\n\t{value: 0x0008, lo: 0x98, hi: 0x9b},\n\t{value: 0x3308, lo: 0x9c, hi: 0x9d},\n\t{value: 0x0040, lo: 0x9e, hi: 0xbf},\n\t// Block 0xbb, offset 0x59f\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0x0008, lo: 0x80, hi: 0xaf},\n\t{value: 0x3008, lo: 0xb0, hi: 0xb2},\n\t{value: 0x3308, lo: 0xb3, hi: 0xba},\n\t{value: 0x3008, lo: 0xbb, hi: 0xbc},\n\t{value: 0x3308, lo: 0xbd, hi: 0xbd},\n\t{value: 0x3008, lo: 0xbe, hi: 0xbe},\n\t{value: 0x3b08, lo: 0xbf, hi: 0xbf},\n\t// Block 0xbc, offset 0x5a7\n\t{value: 0x0000, lo: 0x08},\n\t{value: 0x3308, lo: 0x80, hi: 0x80},\n\t{value: 0x0018, lo: 0x81, hi: 0x83},\n\t{value: 0x0008, lo: 0x84, hi: 0x84},\n\t{value: 0x0040, lo: 0x85, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x99},\n\t{value: 0x0040, lo: 0x9a, hi: 0x9f},\n\t{value: 0x0018, lo: 0xa0, hi: 0xac},\n\t{value: 0x0040, lo: 0xad, hi: 0xbf},\n\t// Block 0xbd, offset 0x5b0\n\t{value: 0x0000, lo: 0x09},\n\t{value: 0x0008, lo: 0x80, hi: 0xaa},\n\t{value: 0x3308, lo: 0xab, hi: 0xab},\n\t{value: 0x3008, lo: 0xac, hi: 0xac},\n\t{value: 0x3308, lo: 0xad, hi: 0xad},\n\t{value: 0x3008, lo: 0xae, hi: 0xaf},\n\t{value: 0x3308, lo: 0xb0, hi: 0xb5},\n\t{value: 0x3808, lo: 0xb6, hi: 0xb6},\n\t{value: 0x3308, lo: 0xb7, hi: 0xb7},\n\t{value: 0x0040, lo: 0xb8, hi: 0xbf},\n\t// Block 0xbe, offset 0x5ba\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0008, lo: 0x80, hi: 0x89},\n\t{value: 0x0040, lo: 0x8a, hi: 0xbf},\n\t// Block 0xbf, offset 0x5bd\n\t{value: 0x0000, lo: 0x0b},\n\t{value: 0x0008, lo: 0x80, hi: 0x99},\n\t{value: 0x0040, lo: 0x9a, hi: 0x9c},\n\t{value: 0x3308, lo: 0x9d, hi: 0x9f},\n\t{value: 0x3008, lo: 0xa0, hi: 0xa1},\n\t{value: 0x3308, lo: 0xa2, hi: 0xa5},\n\t{value: 0x3008, lo: 0xa6, hi: 0xa6},\n\t{value: 0x3308, lo: 0xa7, hi: 0xaa},\n\t{value: 0x3b08, lo: 0xab, hi: 0xab},\n\t{value: 0x0040, lo: 0xac, hi: 0xaf},\n\t{value: 0x0008, lo: 0xb0, hi: 0xb9},\n\t{value: 0x0018, lo: 0xba, hi: 0xbf},\n\t// Block 0xc0, offset 0x5c9\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0040, lo: 0x80, hi: 0x9f},\n\t{value: 0x049d, lo: 0xa0, hi: 0xbf},\n\t// Block 0xc1, offset 0x5cc\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0008, lo: 0x80, hi: 0xa9},\n\t{value: 0x0018, lo: 0xaa, hi: 0xb2},\n\t{value: 0x0040, lo: 0xb3, hi: 0xbe},\n\t{value: 0x0008, lo: 0xbf, hi: 0xbf},\n\t// Block 0xc2, offset 0x5d1\n\t{value: 0x0000, lo: 0x0c},\n\t{value: 0x0008, lo: 0x80, hi: 0x80},\n\t{value: 0x3308, lo: 0x81, hi: 0x86},\n\t{value: 0x3008, lo: 0x87, hi: 0x88},\n\t{value: 0x3308, lo: 0x89, hi: 0x8a},\n\t{value: 0x0008, lo: 0x8b, hi: 0xb2},\n\t{value: 0x3308, lo: 0xb3, hi: 0xb3},\n\t{value: 0x3b08, lo: 0xb4, hi: 0xb4},\n\t{value: 0x3308, lo: 0xb5, hi: 0xb8},\n\t{value: 0x3008, lo: 0xb9, hi: 0xb9},\n\t{value: 0x0008, lo: 0xba, hi: 0xba},\n\t{value: 0x3308, lo: 0xbb, hi: 0xbe},\n\t{value: 0x0018, lo: 0xbf, hi: 0xbf},\n\t// Block 0xc3, offset 0x5de\n\t{value: 0x0000, lo: 0x08},\n\t{value: 0x0018, lo: 0x80, hi: 0x86},\n\t{value: 0x3b08, lo: 0x87, hi: 0x87},\n\t{value: 0x0040, lo: 0x88, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x90},\n\t{value: 0x3308, lo: 0x91, hi: 0x96},\n\t{value: 0x3008, lo: 0x97, hi: 0x98},\n\t{value: 0x3308, lo: 0x99, hi: 0x9b},\n\t{value: 0x0008, lo: 0x9c, hi: 0xbf},\n\t// Block 0xc4, offset 0x5e7\n\t{value: 0x0000, lo: 0x0b},\n\t{value: 0x0008, lo: 0x80, hi: 0x83},\n\t{value: 0x0040, lo: 0x84, hi: 0x85},\n\t{value: 0x0008, lo: 0x86, hi: 0x89},\n\t{value: 0x3308, lo: 0x8a, hi: 0x96},\n\t{value: 0x3008, lo: 0x97, hi: 0x97},\n\t{value: 0x3308, lo: 0x98, hi: 0x98},\n\t{value: 0x3b08, lo: 0x99, hi: 0x99},\n\t{value: 0x0018, lo: 0x9a, hi: 0x9c},\n\t{value: 0x0040, lo: 0x9d, hi: 0x9d},\n\t{value: 0x0018, lo: 0x9e, hi: 0xa2},\n\t{value: 0x0040, lo: 0xa3, hi: 0xbf},\n\t// Block 0xc5, offset 0x5f3\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0008, lo: 0x80, hi: 0xb8},\n\t{value: 0x0040, lo: 0xb9, hi: 0xbf},\n\t// Block 0xc6, offset 0x5f6\n\t{value: 0x0000, lo: 0x09},\n\t{value: 0x0008, lo: 0x80, hi: 0x88},\n\t{value: 0x0040, lo: 0x89, hi: 0x89},\n\t{value: 0x0008, lo: 0x8a, hi: 0xae},\n\t{value: 0x3008, lo: 0xaf, hi: 0xaf},\n\t{value: 0x3308, lo: 0xb0, hi: 0xb6},\n\t{value: 0x0040, lo: 0xb7, hi: 0xb7},\n\t{value: 0x3308, lo: 0xb8, hi: 0xbd},\n\t{value: 0x3008, lo: 0xbe, hi: 0xbe},\n\t{value: 0x3b08, lo: 0xbf, hi: 0xbf},\n\t// Block 0xc7, offset 0x600\n\t{value: 0x0000, lo: 0x08},\n\t{value: 0x0008, lo: 0x80, hi: 0x80},\n\t{value: 0x0018, lo: 0x81, hi: 0x85},\n\t{value: 0x0040, lo: 0x86, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x99},\n\t{value: 0x0018, lo: 0x9a, hi: 0xac},\n\t{value: 0x0040, lo: 0xad, hi: 0xaf},\n\t{value: 0x0018, lo: 0xb0, hi: 0xb1},\n\t{value: 0x0008, lo: 0xb2, hi: 0xbf},\n\t// Block 0xc8, offset 0x609\n\t{value: 0x0000, lo: 0x0b},\n\t{value: 0x0008, lo: 0x80, hi: 0x8f},\n\t{value: 0x0040, lo: 0x90, hi: 0x91},\n\t{value: 0x3308, lo: 0x92, hi: 0xa7},\n\t{value: 0x0040, lo: 0xa8, hi: 0xa8},\n\t{value: 0x3008, lo: 0xa9, hi: 0xa9},\n\t{value: 0x3308, lo: 0xaa, hi: 0xb0},\n\t{value: 0x3008, lo: 0xb1, hi: 0xb1},\n\t{value: 0x3308, lo: 0xb2, hi: 0xb3},\n\t{value: 0x3008, lo: 0xb4, hi: 0xb4},\n\t{value: 0x3308, lo: 0xb5, hi: 0xb6},\n\t{value: 0x0040, lo: 0xb7, hi: 0xbf},\n\t// Block 0xc9, offset 0x615\n\t{value: 0x0000, lo: 0x0c},\n\t{value: 0x0008, lo: 0x80, hi: 0x86},\n\t{value: 0x0040, lo: 0x87, hi: 0x87},\n\t{value: 0x0008, lo: 0x88, hi: 0x89},\n\t{value: 0x0040, lo: 0x8a, hi: 0x8a},\n\t{value: 0x0008, lo: 0x8b, hi: 0xb0},\n\t{value: 0x3308, lo: 0xb1, hi: 0xb6},\n\t{value: 0x0040, lo: 0xb7, hi: 0xb9},\n\t{value: 0x3308, lo: 0xba, hi: 0xba},\n\t{value: 0x0040, lo: 0xbb, hi: 0xbb},\n\t{value: 0x3308, lo: 0xbc, hi: 0xbd},\n\t{value: 0x0040, lo: 0xbe, hi: 0xbe},\n\t{value: 0x3308, lo: 0xbf, hi: 0xbf},\n\t// Block 0xca, offset 0x622\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0x3308, lo: 0x80, hi: 0x83},\n\t{value: 0x3b08, lo: 0x84, hi: 0x85},\n\t{value: 0x0008, lo: 0x86, hi: 0x86},\n\t{value: 0x3308, lo: 0x87, hi: 0x87},\n\t{value: 0x0040, lo: 0x88, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x99},\n\t{value: 0x0040, lo: 0x9a, hi: 0xbf},\n\t// Block 0xcb, offset 0x62a\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0008, lo: 0x80, hi: 0x99},\n\t{value: 0x0040, lo: 0x9a, hi: 0xbf},\n\t// Block 0xcc, offset 0x62d\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0018, lo: 0x80, hi: 0xae},\n\t{value: 0x0040, lo: 0xaf, hi: 0xaf},\n\t{value: 0x0018, lo: 0xb0, hi: 0xb4},\n\t{value: 0x0040, lo: 0xb5, hi: 0xbf},\n\t// Block 0xcd, offset 0x632\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0008, lo: 0x80, hi: 0x83},\n\t{value: 0x0040, lo: 0x84, hi: 0xbf},\n\t// Block 0xce, offset 0x635\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0008, lo: 0x80, hi: 0xae},\n\t{value: 0x0040, lo: 0xaf, hi: 0xbf},\n\t// Block 0xcf, offset 0x638\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0008, lo: 0x80, hi: 0x86},\n\t{value: 0x0040, lo: 0x87, hi: 0xbf},\n\t// Block 0xd0, offset 0x63b\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0x0008, lo: 0x80, hi: 0x9e},\n\t{value: 0x0040, lo: 0x9f, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xa9},\n\t{value: 0x0040, lo: 0xaa, hi: 0xad},\n\t{value: 0x0018, lo: 0xae, hi: 0xaf},\n\t{value: 0x0040, lo: 0xb0, hi: 0xbf},\n\t// Block 0xd1, offset 0x642\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0x0040, lo: 0x80, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0xad},\n\t{value: 0x0040, lo: 0xae, hi: 0xaf},\n\t{value: 0x3308, lo: 0xb0, hi: 0xb4},\n\t{value: 0x0018, lo: 0xb5, hi: 0xb5},\n\t{value: 0x0040, lo: 0xb6, hi: 0xbf},\n\t// Block 0xd2, offset 0x649\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0008, lo: 0x80, hi: 0xaf},\n\t{value: 0x3308, lo: 0xb0, hi: 0xb6},\n\t{value: 0x0018, lo: 0xb7, hi: 0xbf},\n\t// Block 0xd3, offset 0x64d\n\t{value: 0x0000, lo: 0x0a},\n\t{value: 0x0008, lo: 0x80, hi: 0x83},\n\t{value: 0x0018, lo: 0x84, hi: 0x85},\n\t{value: 0x0040, lo: 0x86, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x99},\n\t{value: 0x0040, lo: 0x9a, hi: 0x9a},\n\t{value: 0x0018, lo: 0x9b, hi: 0xa1},\n\t{value: 0x0040, lo: 0xa2, hi: 0xa2},\n\t{value: 0x0008, lo: 0xa3, hi: 0xb7},\n\t{value: 0x0040, lo: 0xb8, hi: 0xbc},\n\t{value: 0x0008, lo: 0xbd, hi: 0xbf},\n\t// Block 0xd4, offset 0x658\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0008, lo: 0x80, hi: 0x8f},\n\t{value: 0x0040, lo: 0x90, hi: 0xbf},\n\t// Block 0xd5, offset 0x65b\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x0008, lo: 0x80, hi: 0x84},\n\t{value: 0x0040, lo: 0x85, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x90},\n\t{value: 0x3008, lo: 0x91, hi: 0xbe},\n\t{value: 0x0040, lo: 0xbf, hi: 0xbf},\n\t// Block 0xd6, offset 0x661\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0040, lo: 0x80, hi: 0x8e},\n\t{value: 0x3308, lo: 0x8f, hi: 0x92},\n\t{value: 0x0008, lo: 0x93, hi: 0x9f},\n\t{value: 0x0040, lo: 0xa0, hi: 0xbf},\n\t// Block 0xd7, offset 0x666\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0040, lo: 0x80, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xa1},\n\t{value: 0x0040, lo: 0xa2, hi: 0xbf},\n\t// Block 0xd8, offset 0x66a\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0008, lo: 0x80, hi: 0xac},\n\t{value: 0x0040, lo: 0xad, hi: 0xbf},\n\t// Block 0xd9, offset 0x66d\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0008, lo: 0x80, hi: 0xb2},\n\t{value: 0x0040, lo: 0xb3, hi: 0xbf},\n\t// Block 0xda, offset 0x670\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0008, lo: 0x80, hi: 0x9e},\n\t{value: 0x0040, lo: 0x9f, hi: 0xbf},\n\t// Block 0xdb, offset 0x673\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0040, lo: 0x80, hi: 0xaf},\n\t{value: 0x0008, lo: 0xb0, hi: 0xbf},\n\t// Block 0xdc, offset 0x676\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0008, lo: 0x80, hi: 0xbb},\n\t{value: 0x0040, lo: 0xbc, hi: 0xbf},\n\t// Block 0xdd, offset 0x679\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0008, lo: 0x80, hi: 0xaa},\n\t{value: 0x0040, lo: 0xab, hi: 0xaf},\n\t{value: 0x0008, lo: 0xb0, hi: 0xbc},\n\t{value: 0x0040, lo: 0xbd, hi: 0xbf},\n\t// Block 0xde, offset 0x67e\n\t{value: 0x0000, lo: 0x09},\n\t{value: 0x0008, lo: 0x80, hi: 0x88},\n\t{value: 0x0040, lo: 0x89, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x99},\n\t{value: 0x0040, lo: 0x9a, hi: 0x9b},\n\t{value: 0x0018, lo: 0x9c, hi: 0x9c},\n\t{value: 0x3308, lo: 0x9d, hi: 0x9e},\n\t{value: 0x0018, lo: 0x9f, hi: 0x9f},\n\t{value: 0x03c0, lo: 0xa0, hi: 0xa3},\n\t{value: 0x0040, lo: 0xa4, hi: 0xbf},\n\t// Block 0xdf, offset 0x688\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0018, lo: 0x80, hi: 0xb5},\n\t{value: 0x0040, lo: 0xb6, hi: 0xbf},\n\t// Block 0xe0, offset 0x68b\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0018, lo: 0x80, hi: 0xa6},\n\t{value: 0x0040, lo: 0xa7, hi: 0xa8},\n\t{value: 0x0018, lo: 0xa9, hi: 0xbf},\n\t// Block 0xe1, offset 0x68f\n\t{value: 0x0000, lo: 0x0e},\n\t{value: 0x0018, lo: 0x80, hi: 0x9d},\n\t{value: 0xb5b9, lo: 0x9e, hi: 0x9e},\n\t{value: 0xb601, lo: 0x9f, hi: 0x9f},\n\t{value: 0xb649, lo: 0xa0, hi: 0xa0},\n\t{value: 0xb6b1, lo: 0xa1, hi: 0xa1},\n\t{value: 0xb719, lo: 0xa2, hi: 0xa2},\n\t{value: 0xb781, lo: 0xa3, hi: 0xa3},\n\t{value: 0xb7e9, lo: 0xa4, hi: 0xa4},\n\t{value: 0x3018, lo: 0xa5, hi: 0xa6},\n\t{value: 0x3318, lo: 0xa7, hi: 0xa9},\n\t{value: 0x0018, lo: 0xaa, hi: 0xac},\n\t{value: 0x3018, lo: 0xad, hi: 0xb2},\n\t{value: 0x0340, lo: 0xb3, hi: 0xba},\n\t{value: 0x3318, lo: 0xbb, hi: 0xbf},\n\t// Block 0xe2, offset 0x69e\n\t{value: 0x0000, lo: 0x0b},\n\t{value: 0x3318, lo: 0x80, hi: 0x82},\n\t{value: 0x0018, lo: 0x83, hi: 0x84},\n\t{value: 0x3318, lo: 0x85, hi: 0x8b},\n\t{value: 0x0018, lo: 0x8c, hi: 0xa9},\n\t{value: 0x3318, lo: 0xaa, hi: 0xad},\n\t{value: 0x0018, lo: 0xae, hi: 0xba},\n\t{value: 0xb851, lo: 0xbb, hi: 0xbb},\n\t{value: 0xb899, lo: 0xbc, hi: 0xbc},\n\t{value: 0xb8e1, lo: 0xbd, hi: 0xbd},\n\t{value: 0xb949, lo: 0xbe, hi: 0xbe},\n\t{value: 0xb9b1, lo: 0xbf, hi: 0xbf},\n\t// Block 0xe3, offset 0x6aa\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0xba19, lo: 0x80, hi: 0x80},\n\t{value: 0x0018, lo: 0x81, hi: 0xa8},\n\t{value: 0x0040, lo: 0xa9, hi: 0xbf},\n\t// Block 0xe4, offset 0x6ae\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0018, lo: 0x80, hi: 0x81},\n\t{value: 0x3318, lo: 0x82, hi: 0x84},\n\t{value: 0x0018, lo: 0x85, hi: 0x85},\n\t{value: 0x0040, lo: 0x86, hi: 0xbf},\n\t// Block 0xe5, offset 0x6b3\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0018, lo: 0x80, hi: 0x96},\n\t{value: 0x0040, lo: 0x97, hi: 0x9f},\n\t{value: 0x0018, lo: 0xa0, hi: 0xb1},\n\t{value: 0x0040, lo: 0xb2, hi: 0xbf},\n\t// Block 0xe6, offset 0x6b8\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x3308, lo: 0x80, hi: 0xb6},\n\t{value: 0x0018, lo: 0xb7, hi: 0xba},\n\t{value: 0x3308, lo: 0xbb, hi: 0xbf},\n\t// Block 0xe7, offset 0x6bc\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x3308, lo: 0x80, hi: 0xac},\n\t{value: 0x0018, lo: 0xad, hi: 0xb4},\n\t{value: 0x3308, lo: 0xb5, hi: 0xb5},\n\t{value: 0x0018, lo: 0xb6, hi: 0xbf},\n\t// Block 0xe8, offset 0x6c1\n\t{value: 0x0000, lo: 0x08},\n\t{value: 0x0018, lo: 0x80, hi: 0x83},\n\t{value: 0x3308, lo: 0x84, hi: 0x84},\n\t{value: 0x0018, lo: 0x85, hi: 0x8b},\n\t{value: 0x0040, lo: 0x8c, hi: 0x9a},\n\t{value: 0x3308, lo: 0x9b, hi: 0x9f},\n\t{value: 0x0040, lo: 0xa0, hi: 0xa0},\n\t{value: 0x3308, lo: 0xa1, hi: 0xaf},\n\t{value: 0x0040, lo: 0xb0, hi: 0xbf},\n\t// Block 0xe9, offset 0x6ca\n\t{value: 0x0000, lo: 0x0a},\n\t{value: 0x3308, lo: 0x80, hi: 0x86},\n\t{value: 0x0040, lo: 0x87, hi: 0x87},\n\t{value: 0x3308, lo: 0x88, hi: 0x98},\n\t{value: 0x0040, lo: 0x99, hi: 0x9a},\n\t{value: 0x3308, lo: 0x9b, hi: 0xa1},\n\t{value: 0x0040, lo: 0xa2, hi: 0xa2},\n\t{value: 0x3308, lo: 0xa3, hi: 0xa4},\n\t{value: 0x0040, lo: 0xa5, hi: 0xa5},\n\t{value: 0x3308, lo: 0xa6, hi: 0xaa},\n\t{value: 0x0040, lo: 0xab, hi: 0xbf},\n\t// Block 0xea, offset 0x6d5\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x0808, lo: 0x80, hi: 0x84},\n\t{value: 0x0040, lo: 0x85, hi: 0x86},\n\t{value: 0x0818, lo: 0x87, hi: 0x8f},\n\t{value: 0x3308, lo: 0x90, hi: 0x96},\n\t{value: 0x0040, lo: 0x97, hi: 0xbf},\n\t// Block 0xeb, offset 0x6db\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0x0a08, lo: 0x80, hi: 0x83},\n\t{value: 0x3308, lo: 0x84, hi: 0x8a},\n\t{value: 0x0040, lo: 0x8b, hi: 0x8f},\n\t{value: 0x0808, lo: 0x90, hi: 0x99},\n\t{value: 0x0040, lo: 0x9a, hi: 0x9d},\n\t{value: 0x0818, lo: 0x9e, hi: 0x9f},\n\t{value: 0x0040, lo: 0xa0, hi: 0xbf},\n\t// Block 0xec, offset 0x6e3\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0040, lo: 0x80, hi: 0xaf},\n\t{value: 0x0018, lo: 0xb0, hi: 0xb1},\n\t{value: 0x0040, lo: 0xb2, hi: 0xbf},\n\t// Block 0xed, offset 0x6e7\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0018, lo: 0x80, hi: 0xab},\n\t{value: 0x0040, lo: 0xac, hi: 0xaf},\n\t{value: 0x0018, lo: 0xb0, hi: 0xbf},\n\t// Block 0xee, offset 0x6eb\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x0018, lo: 0x80, hi: 0x93},\n\t{value: 0x0040, lo: 0x94, hi: 0x9f},\n\t{value: 0x0018, lo: 0xa0, hi: 0xae},\n\t{value: 0x0040, lo: 0xaf, hi: 0xb0},\n\t{value: 0x0018, lo: 0xb1, hi: 0xbf},\n\t// Block 0xef, offset 0x6f1\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x0040, lo: 0x80, hi: 0x80},\n\t{value: 0x0018, lo: 0x81, hi: 0x8f},\n\t{value: 0x0040, lo: 0x90, hi: 0x90},\n\t{value: 0x0018, lo: 0x91, hi: 0xb5},\n\t{value: 0x0040, lo: 0xb6, hi: 0xbf},\n\t// Block 0xf0, offset 0x6f7\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0018, lo: 0x80, hi: 0x8f},\n\t{value: 0xc1c1, lo: 0x90, hi: 0x90},\n\t{value: 0x0018, lo: 0x91, hi: 0xac},\n\t{value: 0x0040, lo: 0xad, hi: 0xbf},\n\t// Block 0xf1, offset 0x6fc\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0040, lo: 0x80, hi: 0xa5},\n\t{value: 0x0018, lo: 0xa6, hi: 0xbf},\n\t// Block 0xf2, offset 0x6ff\n\t{value: 0x0000, lo: 0x0f},\n\t{value: 0xc7e9, lo: 0x80, hi: 0x80},\n\t{value: 0xc839, lo: 0x81, hi: 0x81},\n\t{value: 0xc889, lo: 0x82, hi: 0x82},\n\t{value: 0xc8d9, lo: 0x83, hi: 0x83},\n\t{value: 0xc929, lo: 0x84, hi: 0x84},\n\t{value: 0xc979, lo: 0x85, hi: 0x85},\n\t{value: 0xc9c9, lo: 0x86, hi: 0x86},\n\t{value: 0xca19, lo: 0x87, hi: 0x87},\n\t{value: 0xca69, lo: 0x88, hi: 0x88},\n\t{value: 0x0040, lo: 0x89, hi: 0x8f},\n\t{value: 0xcab9, lo: 0x90, hi: 0x90},\n\t{value: 0xcad9, lo: 0x91, hi: 0x91},\n\t{value: 0x0040, lo: 0x92, hi: 0x9f},\n\t{value: 0x0018, lo: 0xa0, hi: 0xa5},\n\t{value: 0x0040, lo: 0xa6, hi: 0xbf},\n\t// Block 0xf3, offset 0x70f\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0x0018, lo: 0x80, hi: 0x94},\n\t{value: 0x0040, lo: 0x95, hi: 0x9f},\n\t{value: 0x0018, lo: 0xa0, hi: 0xac},\n\t{value: 0x0040, lo: 0xad, hi: 0xaf},\n\t{value: 0x0018, lo: 0xb0, hi: 0xb8},\n\t{value: 0x0040, lo: 0xb9, hi: 0xbf},\n\t// Block 0xf4, offset 0x716\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0018, lo: 0x80, hi: 0xb3},\n\t{value: 0x0040, lo: 0xb4, hi: 0xbf},\n\t// Block 0xf5, offset 0x719\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0018, lo: 0x80, hi: 0x94},\n\t{value: 0x0040, lo: 0x95, hi: 0xbf},\n\t// Block 0xf6, offset 0x71c\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0018, lo: 0x80, hi: 0x8b},\n\t{value: 0x0040, lo: 0x8c, hi: 0x8f},\n\t{value: 0x0018, lo: 0x90, hi: 0xbf},\n\t// Block 0xf7, offset 0x720\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x0018, lo: 0x80, hi: 0x87},\n\t{value: 0x0040, lo: 0x88, hi: 0x8f},\n\t{value: 0x0018, lo: 0x90, hi: 0x99},\n\t{value: 0x0040, lo: 0x9a, hi: 0x9f},\n\t{value: 0x0018, lo: 0xa0, hi: 0xbf},\n\t// Block 0xf8, offset 0x726\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0018, lo: 0x80, hi: 0x87},\n\t{value: 0x0040, lo: 0x88, hi: 0x8f},\n\t{value: 0x0018, lo: 0x90, hi: 0xad},\n\t{value: 0x0040, lo: 0xae, hi: 0xbf},\n\t// Block 0xf9, offset 0x72b\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0018, lo: 0x80, hi: 0x8b},\n\t{value: 0x0040, lo: 0x8c, hi: 0x8f},\n\t{value: 0x0018, lo: 0x90, hi: 0xbe},\n\t{value: 0x0040, lo: 0xbf, hi: 0xbf},\n\t// Block 0xfa, offset 0x730\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0018, lo: 0x80, hi: 0x8c},\n\t{value: 0x0040, lo: 0x8d, hi: 0x8f},\n\t{value: 0x0018, lo: 0x90, hi: 0xab},\n\t{value: 0x0040, lo: 0xac, hi: 0xbf},\n\t// Block 0xfb, offset 0x735\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0018, lo: 0x80, hi: 0x97},\n\t{value: 0x0040, lo: 0x98, hi: 0xbf},\n\t// Block 0xfc, offset 0x738\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0018, lo: 0x80, hi: 0x80},\n\t{value: 0x0040, lo: 0x81, hi: 0x8f},\n\t{value: 0x0018, lo: 0x90, hi: 0xa6},\n\t{value: 0x0040, lo: 0xa7, hi: 0xbf},\n\t// Block 0xfd, offset 0x73d\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0008, lo: 0x80, hi: 0x96},\n\t{value: 0x0040, lo: 0x97, hi: 0xbf},\n\t// Block 0xfe, offset 0x740\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0008, lo: 0x80, hi: 0xb4},\n\t{value: 0x0040, lo: 0xb5, hi: 0xbf},\n\t// Block 0xff, offset 0x743\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0008, lo: 0x80, hi: 0x9d},\n\t{value: 0x0040, lo: 0x9e, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xbf},\n\t// Block 0x100, offset 0x747\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0008, lo: 0x80, hi: 0xa1},\n\t{value: 0x0040, lo: 0xa2, hi: 0xaf},\n\t{value: 0x0008, lo: 0xb0, hi: 0xbf},\n\t// Block 0x101, offset 0x74b\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0008, lo: 0x80, hi: 0xa0},\n\t{value: 0x0040, lo: 0xa1, hi: 0xbf},\n\t// Block 0x102, offset 0x74e\n\t{value: 0x0020, lo: 0x0f},\n\t{value: 0xdeb9, lo: 0x80, hi: 0x89},\n\t{value: 0x8dfd, lo: 0x8a, hi: 0x8a},\n\t{value: 0xdff9, lo: 0x8b, hi: 0x9c},\n\t{value: 0x8e1d, lo: 0x9d, hi: 0x9d},\n\t{value: 0xe239, lo: 0x9e, hi: 0xa2},\n\t{value: 0x8e3d, lo: 0xa3, hi: 0xa3},\n\t{value: 0xe2d9, lo: 0xa4, hi: 0xab},\n\t{value: 0x7ed5, lo: 0xac, hi: 0xac},\n\t{value: 0xe3d9, lo: 0xad, hi: 0xaf},\n\t{value: 0x8e5d, lo: 0xb0, hi: 0xb0},\n\t{value: 0xe439, lo: 0xb1, hi: 0xb6},\n\t{value: 0x8e7d, lo: 0xb7, hi: 0xb9},\n\t{value: 0xe4f9, lo: 0xba, hi: 0xba},\n\t{value: 0x8edd, lo: 0xbb, hi: 0xbb},\n\t{value: 0xe519, lo: 0xbc, hi: 0xbf},\n\t// Block 0x103, offset 0x75e\n\t{value: 0x0020, lo: 0x10},\n\t{value: 0x937d, lo: 0x80, hi: 0x80},\n\t{value: 0xf099, lo: 0x81, hi: 0x86},\n\t{value: 0x939d, lo: 0x87, hi: 0x8a},\n\t{value: 0xd9f9, lo: 0x8b, hi: 0x8b},\n\t{value: 0xf159, lo: 0x8c, hi: 0x96},\n\t{value: 0x941d, lo: 0x97, hi: 0x97},\n\t{value: 0xf2b9, lo: 0x98, hi: 0xa3},\n\t{value: 0x943d, lo: 0xa4, hi: 0xa6},\n\t{value: 0xf439, lo: 0xa7, hi: 0xaa},\n\t{value: 0x949d, lo: 0xab, hi: 0xab},\n\t{value: 0xf4b9, lo: 0xac, hi: 0xac},\n\t{value: 0x94bd, lo: 0xad, hi: 0xad},\n\t{value: 0xf4d9, lo: 0xae, hi: 0xaf},\n\t{value: 0x94dd, lo: 0xb0, hi: 0xb1},\n\t{value: 0xf519, lo: 0xb2, hi: 0xbe},\n\t{value: 0x2040, lo: 0xbf, hi: 0xbf},\n\t// Block 0x104, offset 0x76f\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0040, lo: 0x80, hi: 0x80},\n\t{value: 0x0340, lo: 0x81, hi: 0x81},\n\t{value: 0x0040, lo: 0x82, hi: 0x9f},\n\t{value: 0x0340, lo: 0xa0, hi: 0xbf},\n\t// Block 0x105, offset 0x774\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x0340, lo: 0x80, hi: 0xbf},\n\t// Block 0x106, offset 0x776\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x33c0, lo: 0x80, hi: 0xbf},\n\t// Block 0x107, offset 0x778\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x33c0, lo: 0x80, hi: 0xaf},\n\t{value: 0x0040, lo: 0xb0, hi: 0xbf},\n}\n\n// Total table size 42114 bytes (41KiB); checksum: 355A58A4\n"
  },
  {
    "path": "vendor/golang.org/x/net/idna/tables11.0.0.go",
    "content": "// Code generated by running \"go generate\" in golang.org/x/text. DO NOT EDIT.\n\n// +build go1.13\n\npackage idna\n\n// UnicodeVersion is the Unicode version from which the tables in this package are derived.\nconst UnicodeVersion = \"11.0.0\"\n\nvar mappings string = \"\" + // Size: 8175 bytes\n\t\"\\x00\\x01 \\x03 ̈\\x01a\\x03 ̄\\x012\\x013\\x03 ́\\x03 ̧\\x011\\x01o\\x051⁄4\\x051⁄2\" +\n\t\"\\x053⁄4\\x03i̇\\x03l·\\x03ʼn\\x01s\\x03dž\\x03ⱥ\\x03ⱦ\\x01h\\x01j\\x01r\\x01w\\x01y\" +\n\t\"\\x03 ̆\\x03 ̇\\x03 ̊\\x03 ̨\\x03 ̃\\x03 ̋\\x01l\\x01x\\x04̈́\\x03 ι\\x01;\\x05 ̈́\" +\n\t\"\\x04եւ\\x04اٴ\\x04وٴ\\x04ۇٴ\\x04يٴ\\x06क़\\x06ख़\\x06ग़\\x06ज़\\x06ड़\\x06ढ़\\x06फ़\" +\n\t\"\\x06य़\\x06ড়\\x06ঢ়\\x06য়\\x06ਲ਼\\x06ਸ਼\\x06ਖ਼\\x06ਗ਼\\x06ਜ਼\\x06ਫ਼\\x06ଡ଼\\x06ଢ଼\" +\n\t\"\\x06ํา\\x06ໍາ\\x06ຫນ\\x06ຫມ\\x06གྷ\\x06ཌྷ\\x06དྷ\\x06བྷ\\x06ཛྷ\\x06ཀྵ\\x06ཱི\\x06ཱུ\" +\n\t\"\\x06ྲྀ\\x09ྲཱྀ\\x06ླྀ\\x09ླཱྀ\\x06ཱྀ\\x06ྒྷ\\x06ྜྷ\\x06ྡྷ\\x06ྦྷ\\x06ྫྷ\\x06ྐྵ\\x02\" +\n\t\"в\\x02д\\x02о\\x02с\\x02т\\x02ъ\\x02ѣ\\x02æ\\x01b\\x01d\\x01e\\x02ǝ\\x01g\\x01i\\x01k\" +\n\t\"\\x01m\\x01n\\x02ȣ\\x01p\\x01t\\x01u\\x02ɐ\\x02ɑ\\x02ə\\x02ɛ\\x02ɜ\\x02ŋ\\x02ɔ\\x02ɯ\" +\n\t\"\\x01v\\x02β\\x02γ\\x02δ\\x02φ\\x02χ\\x02ρ\\x02н\\x02ɒ\\x01c\\x02ɕ\\x02ð\\x01f\\x02ɟ\" +\n\t\"\\x02ɡ\\x02ɥ\\x02ɨ\\x02ɩ\\x02ɪ\\x02ʝ\\x02ɭ\\x02ʟ\\x02ɱ\\x02ɰ\\x02ɲ\\x02ɳ\\x02ɴ\\x02ɵ\" +\n\t\"\\x02ɸ\\x02ʂ\\x02ʃ\\x02ƫ\\x02ʉ\\x02ʊ\\x02ʋ\\x02ʌ\\x01z\\x02ʐ\\x02ʑ\\x02ʒ\\x02θ\\x02ss\" +\n\t\"\\x02ά\\x02έ\\x02ή\\x02ί\\x02ό\\x02ύ\\x02ώ\\x05ἀι\\x05ἁι\\x05ἂι\\x05ἃι\\x05ἄι\\x05ἅι\" +\n\t\"\\x05ἆι\\x05ἇι\\x05ἠι\\x05ἡι\\x05ἢι\\x05ἣι\\x05ἤι\\x05ἥι\\x05ἦι\\x05ἧι\\x05ὠι\\x05ὡι\" +\n\t\"\\x05ὢι\\x05ὣι\\x05ὤι\\x05ὥι\\x05ὦι\\x05ὧι\\x05ὰι\\x04αι\\x04άι\\x05ᾶι\\x02ι\\x05 ̈͂\" +\n\t\"\\x05ὴι\\x04ηι\\x04ήι\\x05ῆι\\x05 ̓̀\\x05 ̓́\\x05 ̓͂\\x02ΐ\\x05 ̔̀\\x05 ̔́\\x05 ̔͂\" +\n\t\"\\x02ΰ\\x05 ̈̀\\x01`\\x05ὼι\\x04ωι\\x04ώι\\x05ῶι\\x06′′\\x09′′′\\x06‵‵\\x09‵‵‵\\x02!\" +\n\t\"!\\x02??\\x02?!\\x02!?\\x0c′′′′\\x010\\x014\\x015\\x016\\x017\\x018\\x019\\x01+\\x01=\" +\n\t\"\\x01(\\x01)\\x02rs\\x02ħ\\x02no\\x01q\\x02sm\\x02tm\\x02ω\\x02å\\x02א\\x02ב\\x02ג\" +\n\t\"\\x02ד\\x02π\\x051⁄7\\x051⁄9\\x061⁄10\\x051⁄3\\x052⁄3\\x051⁄5\\x052⁄5\\x053⁄5\\x054\" +\n\t\"⁄5\\x051⁄6\\x055⁄6\\x051⁄8\\x053⁄8\\x055⁄8\\x057⁄8\\x041⁄\\x02ii\\x02iv\\x02vi\" +\n\t\"\\x04viii\\x02ix\\x02xi\\x050⁄3\\x06∫∫\\x09∫∫∫\\x06∮∮\\x09∮∮∮\\x0210\\x0211\\x0212\" +\n\t\"\\x0213\\x0214\\x0215\\x0216\\x0217\\x0218\\x0219\\x0220\\x04(10)\\x04(11)\\x04(12)\" +\n\t\"\\x04(13)\\x04(14)\\x04(15)\\x04(16)\\x04(17)\\x04(18)\\x04(19)\\x04(20)\\x0c∫∫∫∫\" +\n\t\"\\x02==\\x05⫝̸\\x02ɫ\\x02ɽ\\x02ȿ\\x02ɀ\\x01.\\x04 ゙\\x04 ゚\\x06より\\x06コト\\x05(ᄀ)\\x05\" +\n\t\"(ᄂ)\\x05(ᄃ)\\x05(ᄅ)\\x05(ᄆ)\\x05(ᄇ)\\x05(ᄉ)\\x05(ᄋ)\\x05(ᄌ)\\x05(ᄎ)\\x05(ᄏ)\\x05(ᄐ\" +\n\t\")\\x05(ᄑ)\\x05(ᄒ)\\x05(가)\\x05(나)\\x05(다)\\x05(라)\\x05(마)\\x05(바)\\x05(사)\\x05(아)\" +\n\t\"\\x05(자)\\x05(차)\\x05(카)\\x05(타)\\x05(파)\\x05(하)\\x05(주)\\x08(오전)\\x08(오후)\\x05(一)\" +\n\t\"\\x05(二)\\x05(三)\\x05(四)\\x05(五)\\x05(六)\\x05(七)\\x05(八)\\x05(九)\\x05(十)\\x05(月)\" +\n\t\"\\x05(火)\\x05(水)\\x05(木)\\x05(金)\\x05(土)\\x05(日)\\x05(株)\\x05(有)\\x05(社)\\x05(名)\" +\n\t\"\\x05(特)\\x05(財)\\x05(祝)\\x05(労)\\x05(代)\\x05(呼)\\x05(学)\\x05(監)\\x05(企)\\x05(資)\" +\n\t\"\\x05(協)\\x05(祭)\\x05(休)\\x05(自)\\x05(至)\\x0221\\x0222\\x0223\\x0224\\x0225\\x0226\" +\n\t\"\\x0227\\x0228\\x0229\\x0230\\x0231\\x0232\\x0233\\x0234\\x0235\\x06참고\\x06주의\\x0236\" +\n\t\"\\x0237\\x0238\\x0239\\x0240\\x0241\\x0242\\x0243\\x0244\\x0245\\x0246\\x0247\\x0248\" +\n\t\"\\x0249\\x0250\\x041月\\x042月\\x043月\\x044月\\x045月\\x046月\\x047月\\x048月\\x049月\\x0510\" +\n\t\"月\\x0511月\\x0512月\\x02hg\\x02ev\\x0cアパート\\x0cアルファ\\x0cアンペア\\x09アール\\x0cイニング\\x09\" +\n\t\"インチ\\x09ウォン\\x0fエスクード\\x0cエーカー\\x09オンス\\x09オーム\\x09カイリ\\x0cカラット\\x0cカロリー\\x09ガロ\" +\n\t\"ン\\x09ガンマ\\x06ギガ\\x09ギニー\\x0cキュリー\\x0cギルダー\\x06キロ\\x0fキログラム\\x12キロメートル\\x0fキロワッ\" +\n\t\"ト\\x09グラム\\x0fグラムトン\\x0fクルゼイロ\\x0cクローネ\\x09ケース\\x09コルナ\\x09コーポ\\x0cサイクル\\x0fサンチ\" +\n\t\"ーム\\x0cシリング\\x09センチ\\x09セント\\x09ダース\\x06デシ\\x06ドル\\x06トン\\x06ナノ\\x09ノット\\x09ハイツ\" +\n\t\"\\x0fパーセント\\x09パーツ\\x0cバーレル\\x0fピアストル\\x09ピクル\\x06ピコ\\x06ビル\\x0fファラッド\\x0cフィート\" +\n\t\"\\x0fブッシェル\\x09フラン\\x0fヘクタール\\x06ペソ\\x09ペニヒ\\x09ヘルツ\\x09ペンス\\x09ページ\\x09ベータ\\x0cポイ\" +\n\t\"ント\\x09ボルト\\x06ホン\\x09ポンド\\x09ホール\\x09ホーン\\x0cマイクロ\\x09マイル\\x09マッハ\\x09マルク\\x0fマ\" +\n\t\"ンション\\x0cミクロン\\x06ミリ\\x0fミリバール\\x06メガ\\x0cメガトン\\x0cメートル\\x09ヤード\\x09ヤール\\x09ユアン\" +\n\t\"\\x0cリットル\\x06リラ\\x09ルピー\\x0cルーブル\\x06レム\\x0fレントゲン\\x09ワット\\x040点\\x041点\\x042点\" +\n\t\"\\x043点\\x044点\\x045点\\x046点\\x047点\\x048点\\x049点\\x0510点\\x0511点\\x0512点\\x0513点\" +\n\t\"\\x0514点\\x0515点\\x0516点\\x0517点\\x0518点\\x0519点\\x0520点\\x0521点\\x0522点\\x0523点\" +\n\t\"\\x0524点\\x02da\\x02au\\x02ov\\x02pc\\x02dm\\x02iu\\x06平成\\x06昭和\\x06大正\\x06明治\\x0c株\" +\n\t\"式会社\\x02pa\\x02na\\x02ma\\x02ka\\x02kb\\x02mb\\x02gb\\x04kcal\\x02pf\\x02nf\\x02m\" +\n\t\"g\\x02kg\\x02hz\\x02ml\\x02dl\\x02kl\\x02fm\\x02nm\\x02mm\\x02cm\\x02km\\x02m2\\x02m\" +\n\t\"3\\x05m∕s\\x06m∕s2\\x07rad∕s\\x08rad∕s2\\x02ps\\x02ns\\x02ms\\x02pv\\x02nv\\x02mv\" +\n\t\"\\x02kv\\x02pw\\x02nw\\x02mw\\x02kw\\x02bq\\x02cc\\x02cd\\x06c∕kg\\x02db\\x02gy\\x02\" +\n\t\"ha\\x02hp\\x02in\\x02kk\\x02kt\\x02lm\\x02ln\\x02lx\\x02ph\\x02pr\\x02sr\\x02sv\\x02\" +\n\t\"wb\\x05v∕m\\x05a∕m\\x041日\\x042日\\x043日\\x044日\\x045日\\x046日\\x047日\\x048日\\x049日\" +\n\t\"\\x0510日\\x0511日\\x0512日\\x0513日\\x0514日\\x0515日\\x0516日\\x0517日\\x0518日\\x0519日\" +\n\t\"\\x0520日\\x0521日\\x0522日\\x0523日\\x0524日\\x0525日\\x0526日\\x0527日\\x0528日\\x0529日\" +\n\t\"\\x0530日\\x0531日\\x02ь\\x02ɦ\\x02ɬ\\x02ʞ\\x02ʇ\\x02œ\\x04𤋮\\x04𢡊\\x04𢡄\\x04𣏕\\x04𥉉\" +\n\t\"\\x04𥳐\\x04𧻓\\x02ff\\x02fi\\x02fl\\x02st\\x04մն\\x04մե\\x04մի\\x04վն\\x04մխ\\x04יִ\" +\n\t\"\\x04ײַ\\x02ע\\x02ה\\x02כ\\x02ל\\x02ם\\x02ר\\x02ת\\x04שׁ\\x04שׂ\\x06שּׁ\\x06שּׂ\\x04א\" +\n\t\"ַ\\x04אָ\\x04אּ\\x04בּ\\x04גּ\\x04דּ\\x04הּ\\x04וּ\\x04זּ\\x04טּ\\x04יּ\\x04ךּ\\x04\" +\n\t\"כּ\\x04לּ\\x04מּ\\x04נּ\\x04סּ\\x04ףּ\\x04פּ\\x04צּ\\x04קּ\\x04רּ\\x04שּ\\x04תּ\" +\n\t\"\\x04וֹ\\x04בֿ\\x04כֿ\\x04פֿ\\x04אל\\x02ٱ\\x02ٻ\\x02پ\\x02ڀ\\x02ٺ\\x02ٿ\\x02ٹ\\x02ڤ\" +\n\t\"\\x02ڦ\\x02ڄ\\x02ڃ\\x02چ\\x02ڇ\\x02ڍ\\x02ڌ\\x02ڎ\\x02ڈ\\x02ژ\\x02ڑ\\x02ک\\x02گ\\x02ڳ\" +\n\t\"\\x02ڱ\\x02ں\\x02ڻ\\x02ۀ\\x02ہ\\x02ھ\\x02ے\\x02ۓ\\x02ڭ\\x02ۇ\\x02ۆ\\x02ۈ\\x02ۋ\\x02ۅ\" +\n\t\"\\x02ۉ\\x02ې\\x02ى\\x04ئا\\x04ئە\\x04ئو\\x04ئۇ\\x04ئۆ\\x04ئۈ\\x04ئې\\x04ئى\\x02ی\\x04\" +\n\t\"ئج\\x04ئح\\x04ئم\\x04ئي\\x04بج\\x04بح\\x04بخ\\x04بم\\x04بى\\x04بي\\x04تج\\x04تح\" +\n\t\"\\x04تخ\\x04تم\\x04تى\\x04تي\\x04ثج\\x04ثم\\x04ثى\\x04ثي\\x04جح\\x04جم\\x04حج\\x04حم\" +\n\t\"\\x04خج\\x04خح\\x04خم\\x04سج\\x04سح\\x04سخ\\x04سم\\x04صح\\x04صم\\x04ضج\\x04ضح\\x04ضخ\" +\n\t\"\\x04ضم\\x04طح\\x04طم\\x04ظم\\x04عج\\x04عم\\x04غج\\x04غم\\x04فج\\x04فح\\x04فخ\\x04فم\" +\n\t\"\\x04فى\\x04في\\x04قح\\x04قم\\x04قى\\x04قي\\x04كا\\x04كج\\x04كح\\x04كخ\\x04كل\\x04كم\" +\n\t\"\\x04كى\\x04كي\\x04لج\\x04لح\\x04لخ\\x04لم\\x04لى\\x04لي\\x04مج\\x04مح\\x04مخ\\x04مم\" +\n\t\"\\x04مى\\x04مي\\x04نج\\x04نح\\x04نخ\\x04نم\\x04نى\\x04ني\\x04هج\\x04هم\\x04هى\\x04هي\" +\n\t\"\\x04يج\\x04يح\\x04يخ\\x04يم\\x04يى\\x04يي\\x04ذٰ\\x04رٰ\\x04ىٰ\\x05 ٌّ\\x05 ٍّ\\x05\" +\n\t\" َّ\\x05 ُّ\\x05 ِّ\\x05 ّٰ\\x04ئر\\x04ئز\\x04ئن\\x04بر\\x04بز\\x04بن\\x04تر\\x04تز\" +\n\t\"\\x04تن\\x04ثر\\x04ثز\\x04ثن\\x04ما\\x04نر\\x04نز\\x04نن\\x04ير\\x04يز\\x04ين\\x04ئخ\" +\n\t\"\\x04ئه\\x04به\\x04ته\\x04صخ\\x04له\\x04نه\\x04هٰ\\x04يه\\x04ثه\\x04سه\\x04شم\\x04شه\" +\n\t\"\\x06ـَّ\\x06ـُّ\\x06ـِّ\\x04طى\\x04طي\\x04عى\\x04عي\\x04غى\\x04غي\\x04سى\\x04سي\" +\n\t\"\\x04شى\\x04شي\\x04حى\\x04حي\\x04جى\\x04جي\\x04خى\\x04خي\\x04صى\\x04صي\\x04ضى\\x04ضي\" +\n\t\"\\x04شج\\x04شح\\x04شخ\\x04شر\\x04سر\\x04صر\\x04ضر\\x04اً\\x06تجم\\x06تحج\\x06تحم\" +\n\t\"\\x06تخم\\x06تمج\\x06تمح\\x06تمخ\\x06جمح\\x06حمي\\x06حمى\\x06سحج\\x06سجح\\x06سجى\" +\n\t\"\\x06سمح\\x06سمج\\x06سمم\\x06صحح\\x06صمم\\x06شحم\\x06شجي\\x06شمخ\\x06شمم\\x06ضحى\" +\n\t\"\\x06ضخم\\x06طمح\\x06طمم\\x06طمي\\x06عجم\\x06عمم\\x06عمى\\x06غمم\\x06غمي\\x06غمى\" +\n\t\"\\x06فخم\\x06قمح\\x06قمم\\x06لحم\\x06لحي\\x06لحى\\x06لجج\\x06لخم\\x06لمح\\x06محج\" +\n\t\"\\x06محم\\x06محي\\x06مجح\\x06مجم\\x06مخج\\x06مخم\\x06مجخ\\x06همج\\x06همم\\x06نحم\" +\n\t\"\\x06نحى\\x06نجم\\x06نجى\\x06نمي\\x06نمى\\x06يمم\\x06بخي\\x06تجي\\x06تجى\\x06تخي\" +\n\t\"\\x06تخى\\x06تمي\\x06تمى\\x06جمي\\x06جحى\\x06جمى\\x06سخى\\x06صحي\\x06شحي\\x06ضحي\" +\n\t\"\\x06لجي\\x06لمي\\x06يحي\\x06يجي\\x06يمي\\x06ممي\\x06قمي\\x06نحي\\x06عمي\\x06كمي\" +\n\t\"\\x06نجح\\x06مخي\\x06لجم\\x06كمم\\x06جحي\\x06حجي\\x06مجي\\x06فمي\\x06بحي\\x06سخي\" +\n\t\"\\x06نجي\\x06صلے\\x06قلے\\x08الله\\x08اكبر\\x08محمد\\x08صلعم\\x08رسول\\x08عليه\" +\n\t\"\\x08وسلم\\x06صلى!صلى الله عليه وسلم\\x0fجل جلاله\\x08ریال\\x01,\\x01:\\x01!\" +\n\t\"\\x01?\\x01_\\x01{\\x01}\\x01[\\x01]\\x01#\\x01&\\x01*\\x01-\\x01<\\x01>\\x01\\\\\\x01$\" +\n\t\"\\x01%\\x01@\\x04ـً\\x04ـَ\\x04ـُ\\x04ـِ\\x04ـّ\\x04ـْ\\x02ء\\x02آ\\x02أ\\x02ؤ\\x02إ\" +\n\t\"\\x02ئ\\x02ا\\x02ب\\x02ة\\x02ت\\x02ث\\x02ج\\x02ح\\x02خ\\x02د\\x02ذ\\x02ر\\x02ز\\x02س\" +\n\t\"\\x02ش\\x02ص\\x02ض\\x02ط\\x02ظ\\x02ع\\x02غ\\x02ف\\x02ق\\x02ك\\x02ل\\x02م\\x02ن\\x02ه\" +\n\t\"\\x02و\\x02ي\\x04لآ\\x04لأ\\x04لإ\\x04لا\\x01\\x22\\x01'\\x01/\\x01^\\x01|\\x01~\\x02¢\" +\n\t\"\\x02£\\x02¬\\x02¦\\x02¥\\x08𝅗𝅥\\x08𝅘𝅥\\x0c𝅘𝅥𝅮\\x0c𝅘𝅥𝅯\\x0c𝅘𝅥𝅰\\x0c𝅘𝅥𝅱\\x0c𝅘𝅥𝅲\\x08𝆹\" +\n\t\"𝅥\\x08𝆺𝅥\\x0c𝆹𝅥𝅮\\x0c𝆺𝅥𝅮\\x0c𝆹𝅥𝅯\\x0c𝆺𝅥𝅯\\x02ı\\x02ȷ\\x02α\\x02ε\\x02ζ\\x02η\\x02\" +\n\t\"κ\\x02λ\\x02μ\\x02ν\\x02ξ\\x02ο\\x02σ\\x02τ\\x02υ\\x02ψ\\x03∇\\x03∂\\x02ϝ\\x02ٮ\\x02ڡ\" +\n\t\"\\x02ٯ\\x020,\\x021,\\x022,\\x023,\\x024,\\x025,\\x026,\\x027,\\x028,\\x029,\\x03(a)\" +\n\t\"\\x03(b)\\x03(c)\\x03(d)\\x03(e)\\x03(f)\\x03(g)\\x03(h)\\x03(i)\\x03(j)\\x03(k)\" +\n\t\"\\x03(l)\\x03(m)\\x03(n)\\x03(o)\\x03(p)\\x03(q)\\x03(r)\\x03(s)\\x03(t)\\x03(u)\" +\n\t\"\\x03(v)\\x03(w)\\x03(x)\\x03(y)\\x03(z)\\x07〔s〕\\x02wz\\x02hv\\x02sd\\x03ppv\\x02w\" +\n\t\"c\\x02mc\\x02md\\x02dj\\x06ほか\\x06ココ\\x03サ\\x03手\\x03字\\x03双\\x03デ\\x03二\\x03多\\x03解\" +\n\t\"\\x03天\\x03交\\x03映\\x03無\\x03料\\x03前\\x03後\\x03再\\x03新\\x03初\\x03終\\x03生\\x03販\\x03声\" +\n\t\"\\x03吹\\x03演\\x03投\\x03捕\\x03一\\x03三\\x03遊\\x03左\\x03中\\x03右\\x03指\\x03走\\x03打\\x03禁\" +\n\t\"\\x03空\\x03合\\x03満\\x03有\\x03月\\x03申\\x03割\\x03営\\x03配\\x09〔本〕\\x09〔三〕\\x09〔二〕\\x09〔安\" +\n\t\"〕\\x09〔点〕\\x09〔打〕\\x09〔盗〕\\x09〔勝〕\\x09〔敗〕\\x03得\\x03可\\x03丽\\x03丸\\x03乁\\x03你\\x03\" +\n\t\"侮\\x03侻\\x03倂\\x03偺\\x03備\\x03僧\\x03像\\x03㒞\\x03免\\x03兔\\x03兤\\x03具\\x03㒹\\x03內\\x03\" +\n\t\"冗\\x03冤\\x03仌\\x03冬\\x03况\\x03凵\\x03刃\\x03㓟\\x03刻\\x03剆\\x03剷\\x03㔕\\x03勇\\x03勉\\x03\" +\n\t\"勤\\x03勺\\x03包\\x03匆\\x03北\\x03卉\\x03卑\\x03博\\x03即\\x03卽\\x03卿\\x03灰\\x03及\\x03叟\\x03\" +\n\t\"叫\\x03叱\\x03吆\\x03咞\\x03吸\\x03呈\\x03周\\x03咢\\x03哶\\x03唐\\x03啓\\x03啣\\x03善\\x03喙\\x03\" +\n\t\"喫\\x03喳\\x03嗂\\x03圖\\x03嘆\\x03圗\\x03噑\\x03噴\\x03切\\x03壮\\x03城\\x03埴\\x03堍\\x03型\\x03\" +\n\t\"堲\\x03報\\x03墬\\x03売\\x03壷\\x03夆\\x03夢\\x03奢\\x03姬\\x03娛\\x03娧\\x03姘\\x03婦\\x03㛮\\x03\" +\n\t\"嬈\\x03嬾\\x03寃\\x03寘\\x03寧\\x03寳\\x03寿\\x03将\\x03尢\\x03㞁\\x03屠\\x03屮\\x03峀\\x03岍\\x03\" +\n\t\"嵃\\x03嵮\\x03嵫\\x03嵼\\x03巡\\x03巢\\x03㠯\\x03巽\\x03帨\\x03帽\\x03幩\\x03㡢\\x03㡼\\x03庰\\x03\" +\n\t\"庳\\x03庶\\x03廊\\x03廾\\x03舁\\x03弢\\x03㣇\\x03形\\x03彫\\x03㣣\\x03徚\\x03忍\\x03志\\x03忹\\x03\" +\n\t\"悁\\x03㤺\\x03㤜\\x03悔\\x03惇\\x03慈\\x03慌\\x03慎\\x03慺\\x03憎\\x03憲\\x03憤\\x03憯\\x03懞\\x03\" +\n\t\"懲\\x03懶\\x03成\\x03戛\\x03扝\\x03抱\\x03拔\\x03捐\\x03挽\\x03拼\\x03捨\\x03掃\\x03揤\\x03搢\\x03\" +\n\t\"揅\\x03掩\\x03㨮\\x03摩\\x03摾\\x03撝\\x03摷\\x03㩬\\x03敏\\x03敬\\x03旣\\x03書\\x03晉\\x03㬙\\x03\" +\n\t\"暑\\x03㬈\\x03㫤\\x03冒\\x03冕\\x03最\\x03暜\\x03肭\\x03䏙\\x03朗\\x03望\\x03朡\\x03杞\\x03杓\\x03\" +\n\t\"㭉\\x03柺\\x03枅\\x03桒\\x03梅\\x03梎\\x03栟\\x03椔\\x03㮝\\x03楂\\x03榣\\x03槪\\x03檨\\x03櫛\\x03\" +\n\t\"㰘\\x03次\\x03歔\\x03㱎\\x03歲\\x03殟\\x03殺\\x03殻\\x03汎\\x03沿\\x03泍\\x03汧\\x03洖\\x03派\\x03\" +\n\t\"海\\x03流\\x03浩\\x03浸\\x03涅\\x03洴\\x03港\\x03湮\\x03㴳\\x03滋\\x03滇\\x03淹\\x03潮\\x03濆\\x03\" +\n\t\"瀹\\x03瀞\\x03瀛\\x03㶖\\x03灊\\x03災\\x03灷\\x03炭\\x03煅\\x03熜\\x03爨\\x03爵\\x03牐\\x03犀\\x03\" +\n\t\"犕\\x03獺\\x03王\\x03㺬\\x03玥\\x03㺸\\x03瑇\\x03瑜\\x03瑱\\x03璅\\x03瓊\\x03㼛\\x03甤\\x03甾\\x03\" +\n\t\"異\\x03瘐\\x03㿼\\x03䀈\\x03直\\x03眞\\x03真\\x03睊\\x03䀹\\x03瞋\\x03䁆\\x03䂖\\x03硎\\x03碌\\x03\" +\n\t\"磌\\x03䃣\\x03祖\\x03福\\x03秫\\x03䄯\\x03穀\\x03穊\\x03穏\\x03䈂\\x03篆\\x03築\\x03䈧\\x03糒\\x03\" +\n\t\"䊠\\x03糨\\x03糣\\x03紀\\x03絣\\x03䌁\\x03緇\\x03縂\\x03繅\\x03䌴\\x03䍙\\x03罺\\x03羕\\x03翺\\x03\" +\n\t\"者\\x03聠\\x03聰\\x03䏕\\x03育\\x03脃\\x03䐋\\x03脾\\x03媵\\x03舄\\x03辞\\x03䑫\\x03芑\\x03芋\\x03\" +\n\t\"芝\\x03劳\\x03花\\x03芳\\x03芽\\x03苦\\x03若\\x03茝\\x03荣\\x03莭\\x03茣\\x03莽\\x03菧\\x03著\\x03\" +\n\t\"荓\\x03菊\\x03菌\\x03菜\\x03䔫\\x03蓱\\x03蓳\\x03蔖\\x03蕤\\x03䕝\\x03䕡\\x03䕫\\x03虐\\x03虜\\x03\" +\n\t\"虧\\x03虩\\x03蚩\\x03蚈\\x03蜎\\x03蛢\\x03蝹\\x03蜨\\x03蝫\\x03螆\\x03蟡\\x03蠁\\x03䗹\\x03衠\\x03\" +\n\t\"衣\\x03裗\\x03裞\\x03䘵\\x03裺\\x03㒻\\x03䚾\\x03䛇\\x03誠\\x03諭\\x03變\\x03豕\\x03貫\\x03賁\\x03\" +\n\t\"贛\\x03起\\x03跋\\x03趼\\x03跰\\x03軔\\x03輸\\x03邔\\x03郱\\x03鄑\\x03鄛\\x03鈸\\x03鋗\\x03鋘\\x03\" +\n\t\"鉼\\x03鏹\\x03鐕\\x03開\\x03䦕\\x03閷\\x03䧦\\x03雃\\x03嶲\\x03霣\\x03䩮\\x03䩶\\x03韠\\x03䪲\\x03\" +\n\t\"頋\\x03頩\\x03飢\\x03䬳\\x03餩\\x03馧\\x03駂\\x03駾\\x03䯎\\x03鬒\\x03鱀\\x03鳽\\x03䳎\\x03䳭\\x03\" +\n\t\"鵧\\x03䳸\\x03麻\\x03䵖\\x03黹\\x03黾\\x03鼅\\x03鼏\\x03鼖\\x03鼻\"\n\nvar xorData string = \"\" + // Size: 4855 bytes\n\t\"\\x02\\x0c\\x09\\x02\\xb0\\xec\\x02\\xad\\xd8\\x02\\xad\\xd9\\x02\\x06\\x07\\x02\\x0f\\x12\" +\n\t\"\\x02\\x0f\\x1f\\x02\\x0f\\x1d\\x02\\x01\\x13\\x02\\x0f\\x16\\x02\\x0f\\x0b\\x02\\x0f3\" +\n\t\"\\x02\\x0f7\\x02\\x0f?\\x02\\x0f/\\x02\\x0f*\\x02\\x0c&\\x02\\x0c*\\x02\\x0c;\\x02\\x0c9\" +\n\t\"\\x02\\x0c%\\x02\\xab\\xed\\x02\\xab\\xe2\\x02\\xab\\xe3\\x02\\xa9\\xe0\\x02\\xa9\\xe1\" +\n\t\"\\x02\\xa9\\xe6\\x02\\xa3\\xcb\\x02\\xa3\\xc8\\x02\\xa3\\xc9\\x02\\x01#\\x02\\x01\\x08\" +\n\t\"\\x02\\x0e>\\x02\\x0e'\\x02\\x0f\\x03\\x02\\x03\\x0d\\x02\\x03\\x09\\x02\\x03\\x17\\x02\" +\n\t\"\\x03\\x0e\\x02\\x02\\x03\\x02\\x011\\x02\\x01\\x00\\x02\\x01\\x10\\x02\\x03<\\x02\\x07\" +\n\t\"\\x0d\\x02\\x02\\x0c\\x02\\x0c0\\x02\\x01\\x03\\x02\\x01\\x01\\x02\\x01 \\x02\\x01\\x22\" +\n\t\"\\x02\\x01)\\x02\\x01\\x0a\\x02\\x01\\x0c\\x02\\x02\\x06\\x02\\x02\\x02\\x02\\x03\\x10\" +\n\t\"\\x03\\x037 \\x03\\x0b+\\x03\\x02\\x01\\x04\\x02\\x01\\x02\\x02\\x019\\x02\\x03\\x1c\\x02\" +\n\t\"\\x02$\\x03\\x80p$\\x02\\x03:\\x02\\x03\\x0a\\x03\\xc1r.\\x03\\xc1r,\\x03\\xc1r\\x02\" +\n\t\"\\x02\\x02:\\x02\\x02>\\x02\\x02,\\x02\\x02\\x10\\x02\\x02\\x00\\x03\\xc1s<\\x03\\xc1s*\" +\n\t\"\\x03\\xc2L$\\x03\\xc2L;\\x02\\x09)\\x02\\x0a\\x19\\x03\\x83\\xab\\xe3\\x03\\x83\\xab\" +\n\t\"\\xf2\\x03 4\\xe0\\x03\\x81\\xab\\xea\\x03\\x81\\xab\\xf3\\x03 4\\xef\\x03\\x96\\xe1\\xcd\" +\n\t\"\\x03\\x84\\xe5\\xc3\\x02\\x0d\\x11\\x03\\x8b\\xec\\xcb\\x03\\x94\\xec\\xcf\\x03\\x9a\\xec\" +\n\t\"\\xc2\\x03\\x8b\\xec\\xdb\\x03\\x94\\xec\\xdf\\x03\\x9a\\xec\\xd2\\x03\\x01\\x0c!\\x03\" +\n\t\"\\x01\\x0c#\\x03ʠ\\x9d\\x03ʣ\\x9c\\x03ʢ\\x9f\\x03ʥ\\x9e\\x03ʤ\\x91\\x03ʧ\\x90\\x03ʦ\\x93\" +\n\t\"\\x03ʩ\\x92\\x03ʨ\\x95\\x03\\xca\\xf3\\xb5\\x03\\xca\\xf0\\xb4\\x03\\xca\\xf1\\xb7\\x03\" +\n\t\"\\xca\\xf6\\xb6\\x03\\xca\\xf7\\x89\\x03\\xca\\xf4\\x88\\x03\\xca\\xf5\\x8b\\x03\\xca\\xfa\" +\n\t\"\\x8a\\x03\\xca\\xfb\\x8d\\x03\\xca\\xf8\\x8c\\x03\\xca\\xf9\\x8f\\x03\\xca\\xfe\\x8e\\x03\" +\n\t\"\\xca\\xff\\x81\\x03\\xca\\xfc\\x80\\x03\\xca\\xfd\\x83\\x03\\xca\\xe2\\x82\\x03\\xca\\xe3\" +\n\t\"\\x85\\x03\\xca\\xe0\\x84\\x03\\xca\\xe1\\x87\\x03\\xca\\xe6\\x86\\x03\\xca\\xe7\\x99\\x03\" +\n\t\"\\xca\\xe4\\x98\\x03\\xca\\xe5\\x9b\\x03\\xca\\xea\\x9a\\x03\\xca\\xeb\\x9d\\x03\\xca\\xe8\" +\n\t\"\\x9c\\x03ؓ\\x89\\x03ߔ\\x8b\\x02\\x010\\x03\\x03\\x04\\x1e\\x03\\x04\\x15\\x12\\x03\\x0b\" +\n\t\"\\x05,\\x03\\x06\\x04\\x00\\x03\\x06\\x04)\\x03\\x06\\x044\\x03\\x06\\x04<\\x03\\x06\\x05\" +\n\t\"\\x1d\\x03\\x06\\x06\\x00\\x03\\x06\\x06\\x0a\\x03\\x06\\x06'\\x03\\x06\\x062\\x03\\x0786\" +\n\t\"\\x03\\x079/\\x03\\x079 \\x03\\x07:\\x0e\\x03\\x07:\\x1b\\x03\\x07:%\\x03\\x07;/\\x03\" +\n\t\"\\x07;%\\x03\\x074\\x11\\x03\\x076\\x09\\x03\\x077*\\x03\\x070\\x01\\x03\\x070\\x0f\\x03\" +\n\t\"\\x070.\\x03\\x071\\x16\\x03\\x071\\x04\\x03\\x0710\\x03\\x072\\x18\\x03\\x072-\\x03\" +\n\t\"\\x073\\x14\\x03\\x073>\\x03\\x07'\\x09\\x03\\x07 \\x00\\x03\\x07\\x1f\\x0b\\x03\\x07\" +\n\t\"\\x18#\\x03\\x07\\x18(\\x03\\x07\\x186\\x03\\x07\\x18\\x03\\x03\\x07\\x19\\x16\\x03\\x07\" +\n\t\"\\x116\\x03\\x07\\x12'\\x03\\x07\\x13\\x10\\x03\\x07\\x0c&\\x03\\x07\\x0c\\x08\\x03\\x07\" +\n\t\"\\x0c\\x13\\x03\\x07\\x0d\\x02\\x03\\x07\\x0d\\x1c\\x03\\x07\\x0b5\\x03\\x07\\x0b\\x0a\" +\n\t\"\\x03\\x07\\x0b\\x01\\x03\\x07\\x0b\\x0f\\x03\\x07\\x05\\x00\\x03\\x07\\x05\\x09\\x03\\x07\" +\n\t\"\\x05\\x0b\\x03\\x07\\x07\\x01\\x03\\x07\\x07\\x08\\x03\\x07\\x00<\\x03\\x07\\x00+\\x03\" +\n\t\"\\x07\\x01)\\x03\\x07\\x01\\x1b\\x03\\x07\\x01\\x08\\x03\\x07\\x03?\\x03\\x0445\\x03\\x04\" +\n\t\"4\\x08\\x03\\x0454\\x03\\x04)/\\x03\\x04)5\\x03\\x04+\\x05\\x03\\x04+\\x14\\x03\\x04+ \" +\n\t\"\\x03\\x04+<\\x03\\x04*&\\x03\\x04*\\x22\\x03\\x04&8\\x03\\x04!\\x01\\x03\\x04!\\x22\" +\n\t\"\\x03\\x04\\x11+\\x03\\x04\\x10.\\x03\\x04\\x104\\x03\\x04\\x13=\\x03\\x04\\x12\\x04\\x03\" +\n\t\"\\x04\\x12\\x0a\\x03\\x04\\x0d\\x1d\\x03\\x04\\x0d\\x07\\x03\\x04\\x0d \\x03\\x05<>\\x03\" +\n\t\"\\x055<\\x03\\x055!\\x03\\x055#\\x03\\x055&\\x03\\x054\\x1d\\x03\\x054\\x02\\x03\\x054\" +\n\t\"\\x07\\x03\\x0571\\x03\\x053\\x1a\\x03\\x053\\x16\\x03\\x05.<\\x03\\x05.\\x07\\x03\\x05)\" +\n\t\":\\x03\\x05)<\\x03\\x05)\\x0c\\x03\\x05)\\x15\\x03\\x05+-\\x03\\x05+5\\x03\\x05$\\x1e\" +\n\t\"\\x03\\x05$\\x14\\x03\\x05'\\x04\\x03\\x05'\\x14\\x03\\x05&\\x02\\x03\\x05\\x226\\x03\" +\n\t\"\\x05\\x22\\x0c\\x03\\x05\\x22\\x1c\\x03\\x05\\x19\\x0a\\x03\\x05\\x1b\\x09\\x03\\x05\\x1b\" +\n\t\"\\x0c\\x03\\x05\\x14\\x07\\x03\\x05\\x16?\\x03\\x05\\x16\\x0c\\x03\\x05\\x0c\\x05\\x03\" +\n\t\"\\x05\\x0e\\x0f\\x03\\x05\\x01\\x0e\\x03\\x05\\x00(\\x03\\x05\\x030\\x03\\x05\\x03\\x06\" +\n\t\"\\x03\\x0a==\\x03\\x0a=1\\x03\\x0a=,\\x03\\x0a=\\x0c\\x03\\x0a??\\x03\\x0a<\\x08\\x03\" +\n\t\"\\x0a9!\\x03\\x0a9)\\x03\\x0a97\\x03\\x0a99\\x03\\x0a6\\x0a\\x03\\x0a6\\x1c\\x03\\x0a6\" +\n\t\"\\x17\\x03\\x0a7'\\x03\\x0a78\\x03\\x0a73\\x03\\x0a'\\x01\\x03\\x0a'&\\x03\\x0a\\x1f\" +\n\t\"\\x0e\\x03\\x0a\\x1f\\x03\\x03\\x0a\\x1f3\\x03\\x0a\\x1b/\\x03\\x0a\\x18\\x19\\x03\\x0a\" +\n\t\"\\x19\\x01\\x03\\x0a\\x16\\x14\\x03\\x0a\\x0e\\x22\\x03\\x0a\\x0f\\x10\\x03\\x0a\\x0f\\x02\" +\n\t\"\\x03\\x0a\\x0f \\x03\\x0a\\x0c\\x04\\x03\\x0a\\x0b>\\x03\\x0a\\x0b+\\x03\\x0a\\x08/\\x03\" +\n\t\"\\x0a\\x046\\x03\\x0a\\x05\\x14\\x03\\x0a\\x00\\x04\\x03\\x0a\\x00\\x10\\x03\\x0a\\x00\" +\n\t\"\\x14\\x03\\x0b<3\\x03\\x0b;*\\x03\\x0b9\\x22\\x03\\x0b9)\\x03\\x0b97\\x03\\x0b+\\x10\" +\n\t\"\\x03\\x0b((\\x03\\x0b&5\\x03\\x0b$\\x1c\\x03\\x0b$\\x12\\x03\\x0b%\\x04\\x03\\x0b#<\" +\n\t\"\\x03\\x0b#0\\x03\\x0b#\\x0d\\x03\\x0b#\\x19\\x03\\x0b!:\\x03\\x0b!\\x1f\\x03\\x0b!\\x00\" +\n\t\"\\x03\\x0b\\x1e5\\x03\\x0b\\x1c\\x1d\\x03\\x0b\\x1d-\\x03\\x0b\\x1d(\\x03\\x0b\\x18.\\x03\" +\n\t\"\\x0b\\x18 \\x03\\x0b\\x18\\x16\\x03\\x0b\\x14\\x13\\x03\\x0b\\x15$\\x03\\x0b\\x15\\x22\" +\n\t\"\\x03\\x0b\\x12\\x1b\\x03\\x0b\\x12\\x10\\x03\\x0b\\x132\\x03\\x0b\\x13=\\x03\\x0b\\x12\" +\n\t\"\\x18\\x03\\x0b\\x0c&\\x03\\x0b\\x061\\x03\\x0b\\x06:\\x03\\x0b\\x05#\\x03\\x0b\\x05<\" +\n\t\"\\x03\\x0b\\x04\\x0b\\x03\\x0b\\x04\\x04\\x03\\x0b\\x04\\x1b\\x03\\x0b\\x042\\x03\\x0b\" +\n\t\"\\x041\\x03\\x0b\\x03\\x03\\x03\\x0b\\x03\\x1d\\x03\\x0b\\x03/\\x03\\x0b\\x03+\\x03\\x0b\" +\n\t\"\\x02\\x1b\\x03\\x0b\\x02\\x00\\x03\\x0b\\x01\\x1e\\x03\\x0b\\x01\\x08\\x03\\x0b\\x015\" +\n\t\"\\x03\\x06\\x0d9\\x03\\x06\\x0d=\\x03\\x06\\x0d?\\x03\\x02\\x001\\x03\\x02\\x003\\x03\" +\n\t\"\\x02\\x02\\x19\\x03\\x02\\x006\\x03\\x02\\x02\\x1b\\x03\\x02\\x004\\x03\\x02\\x00<\\x03\" +\n\t\"\\x02\\x02\\x0a\\x03\\x02\\x02\\x0e\\x03\\x02\\x01\\x1a\\x03\\x02\\x01\\x07\\x03\\x02\\x01\" +\n\t\"\\x05\\x03\\x02\\x01\\x0b\\x03\\x02\\x01%\\x03\\x02\\x01\\x0c\\x03\\x02\\x01\\x04\\x03\" +\n\t\"\\x02\\x01\\x1c\\x03\\x02\\x00.\\x03\\x02\\x002\\x03\\x02\\x00>\\x03\\x02\\x00\\x12\\x03\" +\n\t\"\\x02\\x00\\x16\\x03\\x02\\x011\\x03\\x02\\x013\\x03\\x02\\x02 \\x03\\x02\\x02%\\x03\\x02\" +\n\t\"\\x02$\\x03\\x02\\x028\\x03\\x02\\x02;\\x03\\x02\\x024\\x03\\x02\\x012\\x03\\x02\\x022\" +\n\t\"\\x03\\x02\\x02/\\x03\\x02\\x01,\\x03\\x02\\x01\\x13\\x03\\x02\\x01\\x16\\x03\\x02\\x01\" +\n\t\"\\x11\\x03\\x02\\x01\\x1e\\x03\\x02\\x01\\x15\\x03\\x02\\x01\\x17\\x03\\x02\\x01\\x0f\\x03\" +\n\t\"\\x02\\x01\\x08\\x03\\x02\\x00?\\x03\\x02\\x03\\x07\\x03\\x02\\x03\\x0d\\x03\\x02\\x03\" +\n\t\"\\x13\\x03\\x02\\x03\\x1d\\x03\\x02\\x03\\x1f\\x03\\x02\\x00\\x03\\x03\\x02\\x00\\x0d\\x03\" +\n\t\"\\x02\\x00\\x01\\x03\\x02\\x00\\x1b\\x03\\x02\\x00\\x19\\x03\\x02\\x00\\x18\\x03\\x02\\x00\" +\n\t\"\\x13\\x03\\x02\\x00/\\x03\\x07>\\x12\\x03\\x07<\\x1f\\x03\\x07>\\x1d\\x03\\x06\\x1d\\x0e\" +\n\t\"\\x03\\x07>\\x1c\\x03\\x07>:\\x03\\x07>\\x13\\x03\\x04\\x12+\\x03\\x07?\\x03\\x03\\x07>\" +\n\t\"\\x02\\x03\\x06\\x224\\x03\\x06\\x1a.\\x03\\x07<%\\x03\\x06\\x1c\\x0b\\x03\\x0609\\x03\" +\n\t\"\\x05\\x1f\\x01\\x03\\x04'\\x08\\x03\\x93\\xfd\\xf5\\x03\\x02\\x0d \\x03\\x02\\x0d#\\x03\" +\n\t\"\\x02\\x0d!\\x03\\x02\\x0d&\\x03\\x02\\x0d\\x22\\x03\\x02\\x0d/\\x03\\x02\\x0d,\\x03\\x02\" +\n\t\"\\x0d$\\x03\\x02\\x0d'\\x03\\x02\\x0d%\\x03\\x02\\x0d;\\x03\\x02\\x0d=\\x03\\x02\\x0d?\" +\n\t\"\\x03\\x099.\\x03\\x08\\x0b7\\x03\\x08\\x02\\x14\\x03\\x08\\x14\\x0d\\x03\\x08.:\\x03\" +\n\t\"\\x089'\\x03\\x0f\\x0b\\x18\\x03\\x0f\\x1c1\\x03\\x0f\\x17&\\x03\\x0f9\\x1f\\x03\\x0f0\" +\n\t\"\\x0c\\x03\\x0e\\x0a9\\x03\\x0e\\x056\\x03\\x0e\\x1c#\\x03\\x0f\\x13\\x0e\\x03\\x072\\x00\" +\n\t\"\\x03\\x070\\x0d\\x03\\x072\\x0b\\x03\\x06\\x11\\x18\\x03\\x070\\x10\\x03\\x06\\x0f(\\x03\" +\n\t\"\\x072\\x05\\x03\\x06\\x0f,\\x03\\x073\\x15\\x03\\x06\\x07\\x08\\x03\\x05\\x16\\x02\\x03\" +\n\t\"\\x04\\x0b \\x03\\x05:8\\x03\\x05\\x16%\\x03\\x0a\\x0d\\x1f\\x03\\x06\\x16\\x10\\x03\\x05\" +\n\t\"\\x1d5\\x03\\x05*;\\x03\\x05\\x16\\x1b\\x03\\x04.-\\x03\\x06\\x1a\\x19\\x03\\x04\\x03,\" +\n\t\"\\x03\\x0b87\\x03\\x04/\\x0a\\x03\\x06\\x00,\\x03\\x04-\\x01\\x03\\x04\\x1e-\\x03\\x06/(\" +\n\t\"\\x03\\x0a\\x0b5\\x03\\x06\\x0e7\\x03\\x06\\x07.\\x03\\x0597\\x03\\x0a*%\\x03\\x0760\" +\n\t\"\\x03\\x06\\x0c;\\x03\\x05'\\x00\\x03\\x072.\\x03\\x072\\x08\\x03\\x06=\\x01\\x03\\x06\" +\n\t\"\\x05\\x1b\\x03\\x06\\x06\\x12\\x03\\x06$=\\x03\\x06'\\x0d\\x03\\x04\\x11\\x0f\\x03\\x076\" +\n\t\",\\x03\\x06\\x07;\\x03\\x06.,\\x03\\x86\\xf9\\xea\\x03\\x8f\\xff\\xeb\\x02\\x092\\x02\" +\n\t\"\\x095\\x02\\x094\\x02\\x09;\\x02\\x09>\\x02\\x098\\x02\\x09*\\x02\\x09/\\x02\\x09,\\x02\" +\n\t\"\\x09%\\x02\\x09&\\x02\\x09#\\x02\\x09 \\x02\\x08!\\x02\\x08%\\x02\\x08$\\x02\\x08+\\x02\" +\n\t\"\\x08.\\x02\\x08*\\x02\\x08&\\x02\\x088\\x02\\x08>\\x02\\x084\\x02\\x086\\x02\\x080\\x02\" +\n\t\"\\x08\\x10\\x02\\x08\\x17\\x02\\x08\\x12\\x02\\x08\\x1d\\x02\\x08\\x1f\\x02\\x08\\x13\\x02\" +\n\t\"\\x08\\x15\\x02\\x08\\x14\\x02\\x08\\x0c\\x03\\x8b\\xfd\\xd0\\x03\\x81\\xec\\xc6\\x03\\x87\" +\n\t\"\\xe0\\x8a\\x03-2\\xe3\\x03\\x80\\xef\\xe4\\x03-2\\xea\\x03\\x88\\xe6\\xeb\\x03\\x8e\\xe6\" +\n\t\"\\xe8\\x03\\x84\\xe6\\xe9\\x03\\x97\\xe6\\xee\\x03-2\\xf9\\x03-2\\xf6\\x03\\x8e\\xe3\\xad\" +\n\t\"\\x03\\x80\\xe3\\x92\\x03\\x88\\xe3\\x90\\x03\\x8e\\xe3\\x90\\x03\\x80\\xe3\\x97\\x03\\x88\" +\n\t\"\\xe3\\x95\\x03\\x88\\xfe\\xcb\\x03\\x8e\\xfe\\xca\\x03\\x84\\xfe\\xcd\\x03\\x91\\xef\\xc9\" +\n\t\"\\x03-2\\xc1\\x03-2\\xc0\\x03-2\\xcb\\x03\\x88@\\x09\\x03\\x8e@\\x08\\x03\\x8f\\xe0\\xf5\" +\n\t\"\\x03\\x8e\\xe6\\xf9\\x03\\x8e\\xe0\\xfa\\x03\\x93\\xff\\xf4\\x03\\x84\\xee\\xd3\\x03\\x0b\" +\n\t\"(\\x04\\x023 \\x021;\\x02\\x01*\\x03\\x0b#\\x10\\x03\\x0b 0\\x03\\x0b!\\x10\\x03\\x0b!0\" +\n\t\"\\x03\\x07\\x15\\x08\\x03\\x09?5\\x03\\x07\\x1f\\x08\\x03\\x07\\x17\\x0b\\x03\\x09\\x1f\" +\n\t\"\\x15\\x03\\x0b\\x1c7\\x03\\x0a+#\\x03\\x06\\x1a\\x1b\\x03\\x06\\x1a\\x14\\x03\\x0a\\x01\" +\n\t\"\\x18\\x03\\x06#\\x1b\\x03\\x0a2\\x0c\\x03\\x0a\\x01\\x04\\x03\\x09#;\\x03\\x08='\\x03\" +\n\t\"\\x08\\x1a\\x0a\\x03\\x07</\\x03\\x07:+\\x03\\x07\\x07*\\x03\\x06&\\x1c\\x03\\x09\\x0c\" +\n\t\"\\x16\\x03\\x09\\x10\\x0e\\x03\\x08'\\x0f\\x03\\x08+\\x09\\x03\\x074%\\x03\\x06!3\\x03\" +\n\t\"\\x06\\x03+\\x03\\x0b\\x1e\\x19\\x03\\x0a))\\x03\\x09\\x08\\x19\\x03\\x08,\\x05\\x03\\x07\" +\n\t\"<2\\x03\\x06\\x1c>\\x03\\x0a\\x111\\x03\\x09\\x1b\\x09\\x03\\x073.\\x03\\x07\\x01\\x00\" +\n\t\"\\x03\\x09/,\\x03\\x07#>\\x03\\x07\\x048\\x03\\x0a\\x1f\\x22\\x03\\x098>\\x03\\x09\\x11\" +\n\t\"\\x00\\x03\\x08/\\x17\\x03\\x06'\\x22\\x03\\x0b\\x1a+\\x03\\x0a\\x22\\x19\\x03\\x0a/1\" +\n\t\"\\x03\\x0974\\x03\\x09\\x0f\\x22\\x03\\x08,\\x22\\x03\\x08?\\x14\\x03\\x07$5\\x03\\x07<3\" +\n\t\"\\x03\\x07=*\\x03\\x07\\x13\\x18\\x03\\x068\\x0a\\x03\\x06\\x09\\x16\\x03\\x06\\x13\\x00\" +\n\t\"\\x03\\x08\\x067\\x03\\x08\\x01\\x03\\x03\\x08\\x12\\x1d\\x03\\x07+7\\x03\\x06(;\\x03\" +\n\t\"\\x06\\x1c?\\x03\\x07\\x0e\\x17\\x03\\x0a\\x06\\x1d\\x03\\x0a\\x19\\x07\\x03\\x08\\x14$\" +\n\t\"\\x03\\x07$;\\x03\\x08,$\\x03\\x08\\x06\\x0d\\x03\\x07\\x16\\x0a\\x03\\x06>>\\x03\\x0a\" +\n\t\"\\x06\\x12\\x03\\x0a\\x14)\\x03\\x09\\x0d\\x1f\\x03\\x09\\x12\\x17\\x03\\x09\\x19\\x01\" +\n\t\"\\x03\\x08\\x11 \\x03\\x08\\x1d'\\x03\\x06<\\x1a\\x03\\x0a.\\x00\\x03\\x07'\\x18\\x03\" +\n\t\"\\x0a\\x22\\x08\\x03\\x08\\x0d\\x0a\\x03\\x08\\x13)\\x03\\x07*)\\x03\\x06<,\\x03\\x07\" +\n\t\"\\x0b\\x1a\\x03\\x09.\\x14\\x03\\x09\\x0d\\x1e\\x03\\x07\\x0e#\\x03\\x0b\\x1d'\\x03\\x0a\" +\n\t\"\\x0a8\\x03\\x09%2\\x03\\x08+&\\x03\\x080\\x12\\x03\\x0a)4\\x03\\x08\\x06\\x1f\\x03\\x0b\" +\n\t\"\\x1b\\x1a\\x03\\x0a\\x1b\\x0f\\x03\\x0b\\x1d*\\x03\\x09\\x16$\\x03\\x090\\x11\\x03\\x08\" +\n\t\"\\x11\\x08\\x03\\x0a*(\\x03\\x0a\\x042\\x03\\x089,\\x03\\x074'\\x03\\x07\\x0f\\x05\\x03\" +\n\t\"\\x09\\x0b\\x0a\\x03\\x07\\x1b\\x01\\x03\\x09\\x17:\\x03\\x09.\\x0d\\x03\\x07.\\x11\\x03\" +\n\t\"\\x09+\\x15\\x03\\x080\\x13\\x03\\x0b\\x1f\\x19\\x03\\x0a \\x11\\x03\\x0a\\x220\\x03\\x09\" +\n\t\"\\x07;\\x03\\x08\\x16\\x1c\\x03\\x07,\\x13\\x03\\x07\\x0e/\\x03\\x06\\x221\\x03\\x0a.\" +\n\t\"\\x0a\\x03\\x0a7\\x02\\x03\\x0a\\x032\\x03\\x0a\\x1d.\\x03\\x091\\x06\\x03\\x09\\x19:\" +\n\t\"\\x03\\x08\\x02/\\x03\\x060+\\x03\\x06\\x0f-\\x03\\x06\\x1c\\x1f\\x03\\x06\\x1d\\x07\\x03\" +\n\t\"\\x0a,\\x11\\x03\\x09=\\x0d\\x03\\x09\\x0b;\\x03\\x07\\x1b/\\x03\\x0a\\x1f:\\x03\\x09 \" +\n\t\"\\x1f\\x03\\x09.\\x10\\x03\\x094\\x0b\\x03\\x09\\x1a1\\x03\\x08#\\x1a\\x03\\x084\\x1d\" +\n\t\"\\x03\\x08\\x01\\x1f\\x03\\x08\\x11\\x22\\x03\\x07'8\\x03\\x07\\x1a>\\x03\\x0757\\x03\" +\n\t\"\\x06&9\\x03\\x06+\\x11\\x03\\x0a.\\x0b\\x03\\x0a,>\\x03\\x0a4#\\x03\\x08%\\x17\\x03\" +\n\t\"\\x07\\x05\\x22\\x03\\x07\\x0c\\x0b\\x03\\x0a\\x1d+\\x03\\x0a\\x19\\x16\\x03\\x09+\\x1f\" +\n\t\"\\x03\\x09\\x08\\x0b\\x03\\x08\\x16\\x18\\x03\\x08+\\x12\\x03\\x0b\\x1d\\x0c\\x03\\x0a=\" +\n\t\"\\x10\\x03\\x0a\\x09\\x0d\\x03\\x0a\\x10\\x11\\x03\\x09&0\\x03\\x08(\\x1f\\x03\\x087\\x07\" +\n\t\"\\x03\\x08\\x185\\x03\\x07'6\\x03\\x06.\\x05\\x03\\x06=\\x04\\x03\\x06;;\\x03\\x06\\x06,\" +\n\t\"\\x03\\x0b\\x18>\\x03\\x08\\x00\\x18\\x03\\x06 \\x03\\x03\\x06<\\x00\\x03\\x09%\\x18\\x03\" +\n\t\"\\x0b\\x1c<\\x03\\x0a%!\\x03\\x0a\\x09\\x12\\x03\\x0a\\x16\\x02\\x03\\x090'\\x03\\x09\" +\n\t\"\\x0e=\\x03\\x08 \\x0e\\x03\\x08>\\x03\\x03\\x074>\\x03\\x06&?\\x03\\x06\\x19\\x09\\x03\" +\n\t\"\\x06?(\\x03\\x0a-\\x0e\\x03\\x09:3\\x03\\x098:\\x03\\x09\\x12\\x0b\\x03\\x09\\x1d\\x17\" +\n\t\"\\x03\\x087\\x05\\x03\\x082\\x14\\x03\\x08\\x06%\\x03\\x08\\x13\\x1f\\x03\\x06\\x06\\x0e\" +\n\t\"\\x03\\x0a\\x22<\\x03\\x09/<\\x03\\x06>+\\x03\\x0a'?\\x03\\x0a\\x13\\x0c\\x03\\x09\\x10<\" +\n\t\"\\x03\\x07\\x1b=\\x03\\x0a\\x19\\x13\\x03\\x09\\x22\\x1d\\x03\\x09\\x07\\x0d\\x03\\x08)\" +\n\t\"\\x1c\\x03\\x06=\\x1a\\x03\\x0a/4\\x03\\x0a7\\x11\\x03\\x0a\\x16:\\x03\\x09?3\\x03\\x09:\" +\n\t\"/\\x03\\x09\\x05\\x0a\\x03\\x09\\x14\\x06\\x03\\x087\\x22\\x03\\x080\\x07\\x03\\x08\\x1a\" +\n\t\"\\x1f\\x03\\x07\\x04(\\x03\\x07\\x04\\x09\\x03\\x06 %\\x03\\x06<\\x08\\x03\\x0a+\\x14\" +\n\t\"\\x03\\x09\\x1d\\x16\\x03\\x0a70\\x03\\x08 >\\x03\\x0857\\x03\\x070\\x0a\\x03\\x06=\\x12\" +\n\t\"\\x03\\x06\\x16%\\x03\\x06\\x1d,\\x03\\x099#\\x03\\x09\\x10>\\x03\\x07 \\x1e\\x03\\x08\" +\n\t\"\\x0c<\\x03\\x08\\x0b\\x18\\x03\\x08\\x15+\\x03\\x08,:\\x03\\x08%\\x22\\x03\\x07\\x0a$\" +\n\t\"\\x03\\x0b\\x1c=\\x03\\x07+\\x08\\x03\\x0a/\\x05\\x03\\x0a \\x07\\x03\\x0a\\x12'\\x03\" +\n\t\"\\x09#\\x11\\x03\\x08\\x1b\\x15\\x03\\x0a\\x06\\x01\\x03\\x09\\x1c\\x1b\\x03\\x0922\\x03\" +\n\t\"\\x07\\x14<\\x03\\x07\\x09\\x04\\x03\\x061\\x04\\x03\\x07\\x0e\\x01\\x03\\x0a\\x13\\x18\" +\n\t\"\\x03\\x0a-\\x0c\\x03\\x0a?\\x0d\\x03\\x0a\\x09\\x0a\\x03\\x091&\\x03\\x0a/\\x0b\\x03\" +\n\t\"\\x08$<\\x03\\x083\\x1d\\x03\\x08\\x0c$\\x03\\x08\\x0d\\x07\\x03\\x08\\x0d?\\x03\\x08\" +\n\t\"\\x0e\\x14\\x03\\x065\\x0a\\x03\\x08\\x1a#\\x03\\x08\\x16#\\x03\\x0702\\x03\\x07\\x03\" +\n\t\"\\x1a\\x03\\x06(\\x1d\\x03\\x06+\\x1b\\x03\\x06\\x0b\\x05\\x03\\x06\\x0b\\x17\\x03\\x06\" +\n\t\"\\x0c\\x04\\x03\\x06\\x1e\\x19\\x03\\x06+0\\x03\\x062\\x18\\x03\\x0b\\x16\\x1e\\x03\\x0a+\" +\n\t\"\\x16\\x03\\x0a-?\\x03\\x0a#:\\x03\\x0a#\\x10\\x03\\x0a%$\\x03\\x0a>+\\x03\\x0a01\\x03\" +\n\t\"\\x0a1\\x10\\x03\\x0a\\x099\\x03\\x0a\\x0a\\x12\\x03\\x0a\\x19\\x1f\\x03\\x0a\\x19\\x12\" +\n\t\"\\x03\\x09*)\\x03\\x09-\\x16\\x03\\x09.1\\x03\\x09.2\\x03\\x09<\\x0e\\x03\\x09> \\x03\" +\n\t\"\\x093\\x12\\x03\\x09\\x0b\\x01\\x03\\x09\\x1c2\\x03\\x09\\x11\\x1c\\x03\\x09\\x15%\\x03\" +\n\t\"\\x08,&\\x03\\x08!\\x22\\x03\\x089(\\x03\\x08\\x0b\\x1a\\x03\\x08\\x0d2\\x03\\x08\\x0c\" +\n\t\"\\x04\\x03\\x08\\x0c\\x06\\x03\\x08\\x0c\\x1f\\x03\\x08\\x0c\\x0c\\x03\\x08\\x0f\\x1f\\x03\" +\n\t\"\\x08\\x0f\\x1d\\x03\\x08\\x00\\x14\\x03\\x08\\x03\\x14\\x03\\x08\\x06\\x16\\x03\\x08\\x1e\" +\n\t\"#\\x03\\x08\\x11\\x11\\x03\\x08\\x10\\x18\\x03\\x08\\x14(\\x03\\x07)\\x1e\\x03\\x07.1\" +\n\t\"\\x03\\x07 $\\x03\\x07 '\\x03\\x078\\x08\\x03\\x07\\x0d0\\x03\\x07\\x0f7\\x03\\x07\\x05#\" +\n\t\"\\x03\\x07\\x05\\x1a\\x03\\x07\\x1a7\\x03\\x07\\x1d-\\x03\\x07\\x17\\x10\\x03\\x06)\\x1f\" +\n\t\"\\x03\\x062\\x0b\\x03\\x066\\x16\\x03\\x06\\x09\\x11\\x03\\x09(\\x1e\\x03\\x07!5\\x03\" +\n\t\"\\x0b\\x11\\x16\\x03\\x0a/\\x04\\x03\\x0a,\\x1a\\x03\\x0b\\x173\\x03\\x0a,1\\x03\\x0a/5\" +\n\t\"\\x03\\x0a\\x221\\x03\\x0a\\x22\\x0d\\x03\\x0a?%\\x03\\x0a<,\\x03\\x0a?#\\x03\\x0a>\\x19\" +\n\t\"\\x03\\x0a\\x08&\\x03\\x0a\\x0b\\x0e\\x03\\x0a\\x0c:\\x03\\x0a\\x0c+\\x03\\x0a\\x03\\x22\" +\n\t\"\\x03\\x0a\\x06)\\x03\\x0a\\x11\\x10\\x03\\x0a\\x11\\x1a\\x03\\x0a\\x17-\\x03\\x0a\\x14(\" +\n\t\"\\x03\\x09)\\x1e\\x03\\x09/\\x09\\x03\\x09.\\x00\\x03\\x09,\\x07\\x03\\x09/*\\x03\\x09-9\" +\n\t\"\\x03\\x09\\x228\\x03\\x09%\\x09\\x03\\x09:\\x12\\x03\\x09;\\x1d\\x03\\x09?\\x06\\x03\" +\n\t\"\\x093%\\x03\\x096\\x05\\x03\\x096\\x08\\x03\\x097\\x02\\x03\\x09\\x07,\\x03\\x09\\x04,\" +\n\t\"\\x03\\x09\\x1f\\x16\\x03\\x09\\x11\\x03\\x03\\x09\\x11\\x12\\x03\\x09\\x168\\x03\\x08*\" +\n\t\"\\x05\\x03\\x08/2\\x03\\x084:\\x03\\x08\\x22+\\x03\\x08 0\\x03\\x08&\\x0a\\x03\\x08;\" +\n\t\"\\x10\\x03\\x08>$\\x03\\x08>\\x18\\x03\\x0829\\x03\\x082:\\x03\\x081,\\x03\\x081<\\x03\" +\n\t\"\\x081\\x1c\\x03\\x087#\\x03\\x087*\\x03\\x08\\x09'\\x03\\x08\\x00\\x1d\\x03\\x08\\x05-\" +\n\t\"\\x03\\x08\\x1f4\\x03\\x08\\x1d\\x04\\x03\\x08\\x16\\x0f\\x03\\x07*7\\x03\\x07'!\\x03\" +\n\t\"\\x07%\\x1b\\x03\\x077\\x0c\\x03\\x07\\x0c1\\x03\\x07\\x0c.\\x03\\x07\\x00\\x06\\x03\\x07\" +\n\t\"\\x01\\x02\\x03\\x07\\x010\\x03\\x07\\x06=\\x03\\x07\\x01\\x03\\x03\\x07\\x01\\x13\\x03\" +\n\t\"\\x07\\x06\\x06\\x03\\x07\\x05\\x0a\\x03\\x07\\x1f\\x09\\x03\\x07\\x17:\\x03\\x06*1\\x03\" +\n\t\"\\x06-\\x1d\\x03\\x06\\x223\\x03\\x062:\\x03\\x060$\\x03\\x066\\x1e\\x03\\x064\\x12\\x03\" +\n\t\"\\x0645\\x03\\x06\\x0b\\x00\\x03\\x06\\x0b7\\x03\\x06\\x07\\x1f\\x03\\x06\\x15\\x12\\x03\" +\n\t\"\\x0c\\x05\\x0f\\x03\\x0b+\\x0b\\x03\\x0b+-\\x03\\x06\\x16\\x1b\\x03\\x06\\x15\\x17\\x03\" +\n\t\"\\x89\\xca\\xea\\x03\\x89\\xca\\xe8\\x03\\x0c8\\x10\\x03\\x0c8\\x01\\x03\\x0c8\\x0f\\x03\" +\n\t\"\\x0d8%\\x03\\x0d8!\\x03\\x0c8-\\x03\\x0c8/\\x03\\x0c8+\\x03\\x0c87\\x03\\x0c85\\x03\" +\n\t\"\\x0c9\\x09\\x03\\x0c9\\x0d\\x03\\x0c9\\x0f\\x03\\x0c9\\x0b\\x03\\xcfu\\x0c\\x03\\xcfu\" +\n\t\"\\x0f\\x03\\xcfu\\x0e\\x03\\xcfu\\x09\\x03\\x0c9\\x10\\x03\\x0d9\\x0c\\x03\\xcf`;\\x03\" +\n\t\"\\xcf`>\\x03\\xcf`9\\x03\\xcf`8\\x03\\xcf`7\\x03\\xcf`*\\x03\\xcf`-\\x03\\xcf`,\\x03\" +\n\t\"\\x0d\\x1b\\x1a\\x03\\x0d\\x1b&\\x03\\x0c=.\\x03\\x0c=%\\x03\\x0c>\\x1e\\x03\\x0c>\\x14\" +\n\t\"\\x03\\x0c?\\x06\\x03\\x0c?\\x0b\\x03\\x0c?\\x0c\\x03\\x0c?\\x0d\\x03\\x0c?\\x02\\x03\" +\n\t\"\\x0c>\\x0f\\x03\\x0c>\\x08\\x03\\x0c>\\x09\\x03\\x0c>,\\x03\\x0c>\\x0c\\x03\\x0c?\\x13\" +\n\t\"\\x03\\x0c?\\x16\\x03\\x0c?\\x15\\x03\\x0c?\\x1c\\x03\\x0c?\\x1f\\x03\\x0c?\\x1d\\x03\" +\n\t\"\\x0c?\\x1a\\x03\\x0c?\\x17\\x03\\x0c?\\x08\\x03\\x0c?\\x09\\x03\\x0c?\\x0e\\x03\\x0c?\" +\n\t\"\\x04\\x03\\x0c?\\x05\\x03\\x0c<?\\x03\\x0c=\\x00\\x03\\x0c=\\x06\\x03\\x0c=\\x05\\x03\" +\n\t\"\\x0c=\\x0c\\x03\\x0c=\\x0f\\x03\\x0c=\\x0d\\x03\\x0c=\\x0b\\x03\\x0c=\\x07\\x03\\x0c=\" +\n\t\"\\x19\\x03\\x0c=\\x15\\x03\\x0c=\\x11\\x03\\x0c=1\\x03\\x0c=3\\x03\\x0c=0\\x03\\x0c=>\" +\n\t\"\\x03\\x0c=2\\x03\\x0c=6\\x03\\x0c<\\x07\\x03\\x0c<\\x05\\x03\\x0e:!\\x03\\x0e:#\\x03\" +\n\t\"\\x0e8\\x09\\x03\\x0e:&\\x03\\x0e8\\x0b\\x03\\x0e:$\\x03\\x0e:,\\x03\\x0e8\\x1a\\x03\" +\n\t\"\\x0e8\\x1e\\x03\\x0e:*\\x03\\x0e:7\\x03\\x0e:5\\x03\\x0e:;\\x03\\x0e:\\x15\\x03\\x0e:<\" +\n\t\"\\x03\\x0e:4\\x03\\x0e:'\\x03\\x0e:-\\x03\\x0e:%\\x03\\x0e:?\\x03\\x0e:=\\x03\\x0e:)\" +\n\t\"\\x03\\x0e:/\\x03\\xcfs'\\x03\\x0d=\\x0f\\x03\\x0d+*\\x03\\x0d99\\x03\\x0d9;\\x03\\x0d9\" +\n\t\"?\\x03\\x0d)\\x0d\\x03\\x0d(%\\x02\\x01\\x18\\x02\\x01(\\x02\\x01\\x1e\\x03\\x0f$!\\x03\" +\n\t\"\\x0f87\\x03\\x0f4\\x0e\\x03\\x0f5\\x1d\\x03\\x06'\\x03\\x03\\x0f\\x08\\x18\\x03\\x0f\" +\n\t\"\\x0d\\x1b\\x03\\x0e2=\\x03\\x0e;\\x08\\x03\\x0e:\\x0b\\x03\\x0e\\x06$\\x03\\x0e\\x0d)\" +\n\t\"\\x03\\x0e\\x16\\x1f\\x03\\x0e\\x16\\x1b\\x03\\x0d$\\x0a\\x03\\x05,\\x1d\\x03\\x0d. \\x03\" +\n\t\"\\x0d.#\\x03\\x0c(/\\x03\\x09%\\x02\\x03\\x0d90\\x03\\x0d\\x0e4\\x03\\x0d\\x0d\\x0f\\x03\" +\n\t\"\\x0c#\\x00\\x03\\x0c,\\x1e\\x03\\x0c2\\x0e\\x03\\x0c\\x01\\x17\\x03\\x0c\\x09:\\x03\\x0e\" +\n\t\"\\x173\\x03\\x0c\\x08\\x03\\x03\\x0c\\x11\\x07\\x03\\x0c\\x10\\x18\\x03\\x0c\\x1f\\x1c\" +\n\t\"\\x03\\x0c\\x19\\x0e\\x03\\x0c\\x1a\\x1f\\x03\\x0f0>\\x03\\x0b->\\x03\\x0b<+\\x03\\x0b8\" +\n\t\"\\x13\\x03\\x0b\\x043\\x03\\x0b\\x14\\x03\\x03\\x0b\\x16%\\x03\\x0d\\x22&\\x03\\x0b\\x1a\" +\n\t\"\\x1a\\x03\\x0b\\x1a\\x04\\x03\\x0a%9\\x03\\x0a&2\\x03\\x0a&0\\x03\\x0a!\\x1a\\x03\\x0a!\" +\n\t\"7\\x03\\x0a5\\x10\\x03\\x0a=4\\x03\\x0a?\\x0e\\x03\\x0a>\\x10\\x03\\x0a\\x00 \\x03\\x0a\" +\n\t\"\\x0f:\\x03\\x0a\\x0f9\\x03\\x0a\\x0b\\x0a\\x03\\x0a\\x17%\\x03\\x0a\\x1b-\\x03\\x09-\" +\n\t\"\\x1a\\x03\\x09,4\\x03\\x09.,\\x03\\x09)\\x09\\x03\\x096!\\x03\\x091\\x1f\\x03\\x093\" +\n\t\"\\x16\\x03\\x0c+\\x1f\\x03\\x098 \\x03\\x098=\\x03\\x0c(\\x1a\\x03\\x0c(\\x16\\x03\\x09\" +\n\t\"\\x0a+\\x03\\x09\\x16\\x12\\x03\\x09\\x13\\x0e\\x03\\x09\\x153\\x03\\x08)!\\x03\\x09\\x1a\" +\n\t\"\\x01\\x03\\x09\\x18\\x01\\x03\\x08%#\\x03\\x08>\\x22\\x03\\x08\\x05%\\x03\\x08\\x02*\" +\n\t\"\\x03\\x08\\x15;\\x03\\x08\\x1b7\\x03\\x0f\\x07\\x1d\\x03\\x0f\\x04\\x03\\x03\\x070\\x0c\" +\n\t\"\\x03\\x07;\\x0b\\x03\\x07\\x08\\x17\\x03\\x07\\x12\\x06\\x03\\x06/-\\x03\\x0671\\x03\" +\n\t\"\\x065+\\x03\\x06>7\\x03\\x06\\x049\\x03\\x05+\\x1e\\x03\\x05,\\x17\\x03\\x05 \\x1d\\x03\" +\n\t\"\\x05\\x22\\x05\\x03\\x050\\x1d\"\n\n// lookup returns the trie value for the first UTF-8 encoding in s and\n// the width in bytes of this encoding. The size will be 0 if s does not\n// hold enough bytes to complete the encoding. len(s) must be greater than 0.\nfunc (t *idnaTrie) lookup(s []byte) (v uint16, sz int) {\n\tc0 := s[0]\n\tswitch {\n\tcase c0 < 0x80: // is ASCII\n\t\treturn idnaValues[c0], 1\n\tcase c0 < 0xC2:\n\t\treturn 0, 1 // Illegal UTF-8: not a starter, not ASCII.\n\tcase c0 < 0xE0: // 2-byte UTF-8\n\t\tif len(s) < 2 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := idnaIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c1), 2\n\tcase c0 < 0xF0: // 3-byte UTF-8\n\t\tif len(s) < 3 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := idnaIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to := uint32(i)<<6 + uint32(c1)\n\t\ti = idnaIndex[o]\n\t\tc2 := s[2]\n\t\tif c2 < 0x80 || 0xC0 <= c2 {\n\t\t\treturn 0, 2 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c2), 3\n\tcase c0 < 0xF8: // 4-byte UTF-8\n\t\tif len(s) < 4 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := idnaIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to := uint32(i)<<6 + uint32(c1)\n\t\ti = idnaIndex[o]\n\t\tc2 := s[2]\n\t\tif c2 < 0x80 || 0xC0 <= c2 {\n\t\t\treturn 0, 2 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to = uint32(i)<<6 + uint32(c2)\n\t\ti = idnaIndex[o]\n\t\tc3 := s[3]\n\t\tif c3 < 0x80 || 0xC0 <= c3 {\n\t\t\treturn 0, 3 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c3), 4\n\t}\n\t// Illegal rune\n\treturn 0, 1\n}\n\n// lookupUnsafe returns the trie value for the first UTF-8 encoding in s.\n// s must start with a full and valid UTF-8 encoded rune.\nfunc (t *idnaTrie) lookupUnsafe(s []byte) uint16 {\n\tc0 := s[0]\n\tif c0 < 0x80 { // is ASCII\n\t\treturn idnaValues[c0]\n\t}\n\ti := idnaIndex[c0]\n\tif c0 < 0xE0 { // 2-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[1])\n\t}\n\ti = idnaIndex[uint32(i)<<6+uint32(s[1])]\n\tif c0 < 0xF0 { // 3-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[2])\n\t}\n\ti = idnaIndex[uint32(i)<<6+uint32(s[2])]\n\tif c0 < 0xF8 { // 4-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[3])\n\t}\n\treturn 0\n}\n\n// lookupString returns the trie value for the first UTF-8 encoding in s and\n// the width in bytes of this encoding. The size will be 0 if s does not\n// hold enough bytes to complete the encoding. len(s) must be greater than 0.\nfunc (t *idnaTrie) lookupString(s string) (v uint16, sz int) {\n\tc0 := s[0]\n\tswitch {\n\tcase c0 < 0x80: // is ASCII\n\t\treturn idnaValues[c0], 1\n\tcase c0 < 0xC2:\n\t\treturn 0, 1 // Illegal UTF-8: not a starter, not ASCII.\n\tcase c0 < 0xE0: // 2-byte UTF-8\n\t\tif len(s) < 2 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := idnaIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c1), 2\n\tcase c0 < 0xF0: // 3-byte UTF-8\n\t\tif len(s) < 3 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := idnaIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to := uint32(i)<<6 + uint32(c1)\n\t\ti = idnaIndex[o]\n\t\tc2 := s[2]\n\t\tif c2 < 0x80 || 0xC0 <= c2 {\n\t\t\treturn 0, 2 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c2), 3\n\tcase c0 < 0xF8: // 4-byte UTF-8\n\t\tif len(s) < 4 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := idnaIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to := uint32(i)<<6 + uint32(c1)\n\t\ti = idnaIndex[o]\n\t\tc2 := s[2]\n\t\tif c2 < 0x80 || 0xC0 <= c2 {\n\t\t\treturn 0, 2 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to = uint32(i)<<6 + uint32(c2)\n\t\ti = idnaIndex[o]\n\t\tc3 := s[3]\n\t\tif c3 < 0x80 || 0xC0 <= c3 {\n\t\t\treturn 0, 3 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c3), 4\n\t}\n\t// Illegal rune\n\treturn 0, 1\n}\n\n// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s.\n// s must start with a full and valid UTF-8 encoded rune.\nfunc (t *idnaTrie) lookupStringUnsafe(s string) uint16 {\n\tc0 := s[0]\n\tif c0 < 0x80 { // is ASCII\n\t\treturn idnaValues[c0]\n\t}\n\ti := idnaIndex[c0]\n\tif c0 < 0xE0 { // 2-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[1])\n\t}\n\ti = idnaIndex[uint32(i)<<6+uint32(s[1])]\n\tif c0 < 0xF0 { // 3-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[2])\n\t}\n\ti = idnaIndex[uint32(i)<<6+uint32(s[2])]\n\tif c0 < 0xF8 { // 4-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[3])\n\t}\n\treturn 0\n}\n\n// idnaTrie. Total size: 29404 bytes (28.71 KiB). Checksum: 848c45acb5f7991c.\ntype idnaTrie struct{}\n\nfunc newIdnaTrie(i int) *idnaTrie {\n\treturn &idnaTrie{}\n}\n\n// lookupValue determines the type of block n and looks up the value for b.\nfunc (t *idnaTrie) lookupValue(n uint32, b byte) uint16 {\n\tswitch {\n\tcase n < 125:\n\t\treturn uint16(idnaValues[n<<6+uint32(b)])\n\tdefault:\n\t\tn -= 125\n\t\treturn uint16(idnaSparse.lookup(n, b))\n\t}\n}\n\n// idnaValues: 127 blocks, 8128 entries, 16256 bytes\n// The third block is the zero block.\nvar idnaValues = [8128]uint16{\n\t// Block 0x0, offset 0x0\n\t0x00: 0x0080, 0x01: 0x0080, 0x02: 0x0080, 0x03: 0x0080, 0x04: 0x0080, 0x05: 0x0080,\n\t0x06: 0x0080, 0x07: 0x0080, 0x08: 0x0080, 0x09: 0x0080, 0x0a: 0x0080, 0x0b: 0x0080,\n\t0x0c: 0x0080, 0x0d: 0x0080, 0x0e: 0x0080, 0x0f: 0x0080, 0x10: 0x0080, 0x11: 0x0080,\n\t0x12: 0x0080, 0x13: 0x0080, 0x14: 0x0080, 0x15: 0x0080, 0x16: 0x0080, 0x17: 0x0080,\n\t0x18: 0x0080, 0x19: 0x0080, 0x1a: 0x0080, 0x1b: 0x0080, 0x1c: 0x0080, 0x1d: 0x0080,\n\t0x1e: 0x0080, 0x1f: 0x0080, 0x20: 0x0080, 0x21: 0x0080, 0x22: 0x0080, 0x23: 0x0080,\n\t0x24: 0x0080, 0x25: 0x0080, 0x26: 0x0080, 0x27: 0x0080, 0x28: 0x0080, 0x29: 0x0080,\n\t0x2a: 0x0080, 0x2b: 0x0080, 0x2c: 0x0080, 0x2d: 0x0008, 0x2e: 0x0008, 0x2f: 0x0080,\n\t0x30: 0x0008, 0x31: 0x0008, 0x32: 0x0008, 0x33: 0x0008, 0x34: 0x0008, 0x35: 0x0008,\n\t0x36: 0x0008, 0x37: 0x0008, 0x38: 0x0008, 0x39: 0x0008, 0x3a: 0x0080, 0x3b: 0x0080,\n\t0x3c: 0x0080, 0x3d: 0x0080, 0x3e: 0x0080, 0x3f: 0x0080,\n\t// Block 0x1, offset 0x40\n\t0x40: 0x0080, 0x41: 0xe105, 0x42: 0xe105, 0x43: 0xe105, 0x44: 0xe105, 0x45: 0xe105,\n\t0x46: 0xe105, 0x47: 0xe105, 0x48: 0xe105, 0x49: 0xe105, 0x4a: 0xe105, 0x4b: 0xe105,\n\t0x4c: 0xe105, 0x4d: 0xe105, 0x4e: 0xe105, 0x4f: 0xe105, 0x50: 0xe105, 0x51: 0xe105,\n\t0x52: 0xe105, 0x53: 0xe105, 0x54: 0xe105, 0x55: 0xe105, 0x56: 0xe105, 0x57: 0xe105,\n\t0x58: 0xe105, 0x59: 0xe105, 0x5a: 0xe105, 0x5b: 0x0080, 0x5c: 0x0080, 0x5d: 0x0080,\n\t0x5e: 0x0080, 0x5f: 0x0080, 0x60: 0x0080, 0x61: 0x0008, 0x62: 0x0008, 0x63: 0x0008,\n\t0x64: 0x0008, 0x65: 0x0008, 0x66: 0x0008, 0x67: 0x0008, 0x68: 0x0008, 0x69: 0x0008,\n\t0x6a: 0x0008, 0x6b: 0x0008, 0x6c: 0x0008, 0x6d: 0x0008, 0x6e: 0x0008, 0x6f: 0x0008,\n\t0x70: 0x0008, 0x71: 0x0008, 0x72: 0x0008, 0x73: 0x0008, 0x74: 0x0008, 0x75: 0x0008,\n\t0x76: 0x0008, 0x77: 0x0008, 0x78: 0x0008, 0x79: 0x0008, 0x7a: 0x0008, 0x7b: 0x0080,\n\t0x7c: 0x0080, 0x7d: 0x0080, 0x7e: 0x0080, 0x7f: 0x0080,\n\t// Block 0x2, offset 0x80\n\t// Block 0x3, offset 0xc0\n\t0xc0: 0x0040, 0xc1: 0x0040, 0xc2: 0x0040, 0xc3: 0x0040, 0xc4: 0x0040, 0xc5: 0x0040,\n\t0xc6: 0x0040, 0xc7: 0x0040, 0xc8: 0x0040, 0xc9: 0x0040, 0xca: 0x0040, 0xcb: 0x0040,\n\t0xcc: 0x0040, 0xcd: 0x0040, 0xce: 0x0040, 0xcf: 0x0040, 0xd0: 0x0040, 0xd1: 0x0040,\n\t0xd2: 0x0040, 0xd3: 0x0040, 0xd4: 0x0040, 0xd5: 0x0040, 0xd6: 0x0040, 0xd7: 0x0040,\n\t0xd8: 0x0040, 0xd9: 0x0040, 0xda: 0x0040, 0xdb: 0x0040, 0xdc: 0x0040, 0xdd: 0x0040,\n\t0xde: 0x0040, 0xdf: 0x0040, 0xe0: 0x000a, 0xe1: 0x0018, 0xe2: 0x0018, 0xe3: 0x0018,\n\t0xe4: 0x0018, 0xe5: 0x0018, 0xe6: 0x0018, 0xe7: 0x0018, 0xe8: 0x001a, 0xe9: 0x0018,\n\t0xea: 0x0039, 0xeb: 0x0018, 0xec: 0x0018, 0xed: 0x03c0, 0xee: 0x0018, 0xef: 0x004a,\n\t0xf0: 0x0018, 0xf1: 0x0018, 0xf2: 0x0069, 0xf3: 0x0079, 0xf4: 0x008a, 0xf5: 0x0005,\n\t0xf6: 0x0018, 0xf7: 0x0008, 0xf8: 0x00aa, 0xf9: 0x00c9, 0xfa: 0x00d9, 0xfb: 0x0018,\n\t0xfc: 0x00e9, 0xfd: 0x0119, 0xfe: 0x0149, 0xff: 0x0018,\n\t// Block 0x4, offset 0x100\n\t0x100: 0xe00d, 0x101: 0x0008, 0x102: 0xe00d, 0x103: 0x0008, 0x104: 0xe00d, 0x105: 0x0008,\n\t0x106: 0xe00d, 0x107: 0x0008, 0x108: 0xe00d, 0x109: 0x0008, 0x10a: 0xe00d, 0x10b: 0x0008,\n\t0x10c: 0xe00d, 0x10d: 0x0008, 0x10e: 0xe00d, 0x10f: 0x0008, 0x110: 0xe00d, 0x111: 0x0008,\n\t0x112: 0xe00d, 0x113: 0x0008, 0x114: 0xe00d, 0x115: 0x0008, 0x116: 0xe00d, 0x117: 0x0008,\n\t0x118: 0xe00d, 0x119: 0x0008, 0x11a: 0xe00d, 0x11b: 0x0008, 0x11c: 0xe00d, 0x11d: 0x0008,\n\t0x11e: 0xe00d, 0x11f: 0x0008, 0x120: 0xe00d, 0x121: 0x0008, 0x122: 0xe00d, 0x123: 0x0008,\n\t0x124: 0xe00d, 0x125: 0x0008, 0x126: 0xe00d, 0x127: 0x0008, 0x128: 0xe00d, 0x129: 0x0008,\n\t0x12a: 0xe00d, 0x12b: 0x0008, 0x12c: 0xe00d, 0x12d: 0x0008, 0x12e: 0xe00d, 0x12f: 0x0008,\n\t0x130: 0x0179, 0x131: 0x0008, 0x132: 0x0035, 0x133: 0x004d, 0x134: 0xe00d, 0x135: 0x0008,\n\t0x136: 0xe00d, 0x137: 0x0008, 0x138: 0x0008, 0x139: 0xe01d, 0x13a: 0x0008, 0x13b: 0xe03d,\n\t0x13c: 0x0008, 0x13d: 0xe01d, 0x13e: 0x0008, 0x13f: 0x0199,\n\t// Block 0x5, offset 0x140\n\t0x140: 0x0199, 0x141: 0xe01d, 0x142: 0x0008, 0x143: 0xe03d, 0x144: 0x0008, 0x145: 0xe01d,\n\t0x146: 0x0008, 0x147: 0xe07d, 0x148: 0x0008, 0x149: 0x01b9, 0x14a: 0xe00d, 0x14b: 0x0008,\n\t0x14c: 0xe00d, 0x14d: 0x0008, 0x14e: 0xe00d, 0x14f: 0x0008, 0x150: 0xe00d, 0x151: 0x0008,\n\t0x152: 0xe00d, 0x153: 0x0008, 0x154: 0xe00d, 0x155: 0x0008, 0x156: 0xe00d, 0x157: 0x0008,\n\t0x158: 0xe00d, 0x159: 0x0008, 0x15a: 0xe00d, 0x15b: 0x0008, 0x15c: 0xe00d, 0x15d: 0x0008,\n\t0x15e: 0xe00d, 0x15f: 0x0008, 0x160: 0xe00d, 0x161: 0x0008, 0x162: 0xe00d, 0x163: 0x0008,\n\t0x164: 0xe00d, 0x165: 0x0008, 0x166: 0xe00d, 0x167: 0x0008, 0x168: 0xe00d, 0x169: 0x0008,\n\t0x16a: 0xe00d, 0x16b: 0x0008, 0x16c: 0xe00d, 0x16d: 0x0008, 0x16e: 0xe00d, 0x16f: 0x0008,\n\t0x170: 0xe00d, 0x171: 0x0008, 0x172: 0xe00d, 0x173: 0x0008, 0x174: 0xe00d, 0x175: 0x0008,\n\t0x176: 0xe00d, 0x177: 0x0008, 0x178: 0x0065, 0x179: 0xe01d, 0x17a: 0x0008, 0x17b: 0xe03d,\n\t0x17c: 0x0008, 0x17d: 0xe01d, 0x17e: 0x0008, 0x17f: 0x01d9,\n\t// Block 0x6, offset 0x180\n\t0x180: 0x0008, 0x181: 0x007d, 0x182: 0xe00d, 0x183: 0x0008, 0x184: 0xe00d, 0x185: 0x0008,\n\t0x186: 0x007d, 0x187: 0xe07d, 0x188: 0x0008, 0x189: 0x0095, 0x18a: 0x00ad, 0x18b: 0xe03d,\n\t0x18c: 0x0008, 0x18d: 0x0008, 0x18e: 0x00c5, 0x18f: 0x00dd, 0x190: 0x00f5, 0x191: 0xe01d,\n\t0x192: 0x0008, 0x193: 0x010d, 0x194: 0x0125, 0x195: 0x0008, 0x196: 0x013d, 0x197: 0x013d,\n\t0x198: 0xe00d, 0x199: 0x0008, 0x19a: 0x0008, 0x19b: 0x0008, 0x19c: 0x010d, 0x19d: 0x0155,\n\t0x19e: 0x0008, 0x19f: 0x016d, 0x1a0: 0xe00d, 0x1a1: 0x0008, 0x1a2: 0xe00d, 0x1a3: 0x0008,\n\t0x1a4: 0xe00d, 0x1a5: 0x0008, 0x1a6: 0x0185, 0x1a7: 0xe07d, 0x1a8: 0x0008, 0x1a9: 0x019d,\n\t0x1aa: 0x0008, 0x1ab: 0x0008, 0x1ac: 0xe00d, 0x1ad: 0x0008, 0x1ae: 0x0185, 0x1af: 0xe0fd,\n\t0x1b0: 0x0008, 0x1b1: 0x01b5, 0x1b2: 0x01cd, 0x1b3: 0xe03d, 0x1b4: 0x0008, 0x1b5: 0xe01d,\n\t0x1b6: 0x0008, 0x1b7: 0x01e5, 0x1b8: 0xe00d, 0x1b9: 0x0008, 0x1ba: 0x0008, 0x1bb: 0x0008,\n\t0x1bc: 0xe00d, 0x1bd: 0x0008, 0x1be: 0x0008, 0x1bf: 0x0008,\n\t// Block 0x7, offset 0x1c0\n\t0x1c0: 0x0008, 0x1c1: 0x0008, 0x1c2: 0x0008, 0x1c3: 0x0008, 0x1c4: 0x01e9, 0x1c5: 0x01e9,\n\t0x1c6: 0x01e9, 0x1c7: 0x01fd, 0x1c8: 0x0215, 0x1c9: 0x022d, 0x1ca: 0x0245, 0x1cb: 0x025d,\n\t0x1cc: 0x0275, 0x1cd: 0xe01d, 0x1ce: 0x0008, 0x1cf: 0xe0fd, 0x1d0: 0x0008, 0x1d1: 0xe01d,\n\t0x1d2: 0x0008, 0x1d3: 0xe03d, 0x1d4: 0x0008, 0x1d5: 0xe01d, 0x1d6: 0x0008, 0x1d7: 0xe07d,\n\t0x1d8: 0x0008, 0x1d9: 0xe01d, 0x1da: 0x0008, 0x1db: 0xe03d, 0x1dc: 0x0008, 0x1dd: 0x0008,\n\t0x1de: 0xe00d, 0x1df: 0x0008, 0x1e0: 0xe00d, 0x1e1: 0x0008, 0x1e2: 0xe00d, 0x1e3: 0x0008,\n\t0x1e4: 0xe00d, 0x1e5: 0x0008, 0x1e6: 0xe00d, 0x1e7: 0x0008, 0x1e8: 0xe00d, 0x1e9: 0x0008,\n\t0x1ea: 0xe00d, 0x1eb: 0x0008, 0x1ec: 0xe00d, 0x1ed: 0x0008, 0x1ee: 0xe00d, 0x1ef: 0x0008,\n\t0x1f0: 0x0008, 0x1f1: 0x028d, 0x1f2: 0x02a5, 0x1f3: 0x02bd, 0x1f4: 0xe00d, 0x1f5: 0x0008,\n\t0x1f6: 0x02d5, 0x1f7: 0x02ed, 0x1f8: 0xe00d, 0x1f9: 0x0008, 0x1fa: 0xe00d, 0x1fb: 0x0008,\n\t0x1fc: 0xe00d, 0x1fd: 0x0008, 0x1fe: 0xe00d, 0x1ff: 0x0008,\n\t// Block 0x8, offset 0x200\n\t0x200: 0xe00d, 0x201: 0x0008, 0x202: 0xe00d, 0x203: 0x0008, 0x204: 0xe00d, 0x205: 0x0008,\n\t0x206: 0xe00d, 0x207: 0x0008, 0x208: 0xe00d, 0x209: 0x0008, 0x20a: 0xe00d, 0x20b: 0x0008,\n\t0x20c: 0xe00d, 0x20d: 0x0008, 0x20e: 0xe00d, 0x20f: 0x0008, 0x210: 0xe00d, 0x211: 0x0008,\n\t0x212: 0xe00d, 0x213: 0x0008, 0x214: 0xe00d, 0x215: 0x0008, 0x216: 0xe00d, 0x217: 0x0008,\n\t0x218: 0xe00d, 0x219: 0x0008, 0x21a: 0xe00d, 0x21b: 0x0008, 0x21c: 0xe00d, 0x21d: 0x0008,\n\t0x21e: 0xe00d, 0x21f: 0x0008, 0x220: 0x0305, 0x221: 0x0008, 0x222: 0xe00d, 0x223: 0x0008,\n\t0x224: 0xe00d, 0x225: 0x0008, 0x226: 0xe00d, 0x227: 0x0008, 0x228: 0xe00d, 0x229: 0x0008,\n\t0x22a: 0xe00d, 0x22b: 0x0008, 0x22c: 0xe00d, 0x22d: 0x0008, 0x22e: 0xe00d, 0x22f: 0x0008,\n\t0x230: 0xe00d, 0x231: 0x0008, 0x232: 0xe00d, 0x233: 0x0008, 0x234: 0x0008, 0x235: 0x0008,\n\t0x236: 0x0008, 0x237: 0x0008, 0x238: 0x0008, 0x239: 0x0008, 0x23a: 0x0209, 0x23b: 0xe03d,\n\t0x23c: 0x0008, 0x23d: 0x031d, 0x23e: 0x0229, 0x23f: 0x0008,\n\t// Block 0x9, offset 0x240\n\t0x240: 0x0008, 0x241: 0x0008, 0x242: 0x0018, 0x243: 0x0018, 0x244: 0x0018, 0x245: 0x0018,\n\t0x246: 0x0008, 0x247: 0x0008, 0x248: 0x0008, 0x249: 0x0008, 0x24a: 0x0008, 0x24b: 0x0008,\n\t0x24c: 0x0008, 0x24d: 0x0008, 0x24e: 0x0008, 0x24f: 0x0008, 0x250: 0x0008, 0x251: 0x0008,\n\t0x252: 0x0018, 0x253: 0x0018, 0x254: 0x0018, 0x255: 0x0018, 0x256: 0x0018, 0x257: 0x0018,\n\t0x258: 0x029a, 0x259: 0x02ba, 0x25a: 0x02da, 0x25b: 0x02fa, 0x25c: 0x031a, 0x25d: 0x033a,\n\t0x25e: 0x0018, 0x25f: 0x0018, 0x260: 0x03ad, 0x261: 0x0359, 0x262: 0x01d9, 0x263: 0x0369,\n\t0x264: 0x03c5, 0x265: 0x0018, 0x266: 0x0018, 0x267: 0x0018, 0x268: 0x0018, 0x269: 0x0018,\n\t0x26a: 0x0018, 0x26b: 0x0018, 0x26c: 0x0008, 0x26d: 0x0018, 0x26e: 0x0008, 0x26f: 0x0018,\n\t0x270: 0x0018, 0x271: 0x0018, 0x272: 0x0018, 0x273: 0x0018, 0x274: 0x0018, 0x275: 0x0018,\n\t0x276: 0x0018, 0x277: 0x0018, 0x278: 0x0018, 0x279: 0x0018, 0x27a: 0x0018, 0x27b: 0x0018,\n\t0x27c: 0x0018, 0x27d: 0x0018, 0x27e: 0x0018, 0x27f: 0x0018,\n\t// Block 0xa, offset 0x280\n\t0x280: 0x03dd, 0x281: 0x03dd, 0x282: 0x3308, 0x283: 0x03f5, 0x284: 0x0379, 0x285: 0x040d,\n\t0x286: 0x3308, 0x287: 0x3308, 0x288: 0x3308, 0x289: 0x3308, 0x28a: 0x3308, 0x28b: 0x3308,\n\t0x28c: 0x3308, 0x28d: 0x3308, 0x28e: 0x3308, 0x28f: 0x33c0, 0x290: 0x3308, 0x291: 0x3308,\n\t0x292: 0x3308, 0x293: 0x3308, 0x294: 0x3308, 0x295: 0x3308, 0x296: 0x3308, 0x297: 0x3308,\n\t0x298: 0x3308, 0x299: 0x3308, 0x29a: 0x3308, 0x29b: 0x3308, 0x29c: 0x3308, 0x29d: 0x3308,\n\t0x29e: 0x3308, 0x29f: 0x3308, 0x2a0: 0x3308, 0x2a1: 0x3308, 0x2a2: 0x3308, 0x2a3: 0x3308,\n\t0x2a4: 0x3308, 0x2a5: 0x3308, 0x2a6: 0x3308, 0x2a7: 0x3308, 0x2a8: 0x3308, 0x2a9: 0x3308,\n\t0x2aa: 0x3308, 0x2ab: 0x3308, 0x2ac: 0x3308, 0x2ad: 0x3308, 0x2ae: 0x3308, 0x2af: 0x3308,\n\t0x2b0: 0xe00d, 0x2b1: 0x0008, 0x2b2: 0xe00d, 0x2b3: 0x0008, 0x2b4: 0x0425, 0x2b5: 0x0008,\n\t0x2b6: 0xe00d, 0x2b7: 0x0008, 0x2b8: 0x0040, 0x2b9: 0x0040, 0x2ba: 0x03a2, 0x2bb: 0x0008,\n\t0x2bc: 0x0008, 0x2bd: 0x0008, 0x2be: 0x03c2, 0x2bf: 0x043d,\n\t// Block 0xb, offset 0x2c0\n\t0x2c0: 0x0040, 0x2c1: 0x0040, 0x2c2: 0x0040, 0x2c3: 0x0040, 0x2c4: 0x008a, 0x2c5: 0x03d2,\n\t0x2c6: 0xe155, 0x2c7: 0x0455, 0x2c8: 0xe12d, 0x2c9: 0xe13d, 0x2ca: 0xe12d, 0x2cb: 0x0040,\n\t0x2cc: 0x03dd, 0x2cd: 0x0040, 0x2ce: 0x046d, 0x2cf: 0x0485, 0x2d0: 0x0008, 0x2d1: 0xe105,\n\t0x2d2: 0xe105, 0x2d3: 0xe105, 0x2d4: 0xe105, 0x2d5: 0xe105, 0x2d6: 0xe105, 0x2d7: 0xe105,\n\t0x2d8: 0xe105, 0x2d9: 0xe105, 0x2da: 0xe105, 0x2db: 0xe105, 0x2dc: 0xe105, 0x2dd: 0xe105,\n\t0x2de: 0xe105, 0x2df: 0xe105, 0x2e0: 0x049d, 0x2e1: 0x049d, 0x2e2: 0x0040, 0x2e3: 0x049d,\n\t0x2e4: 0x049d, 0x2e5: 0x049d, 0x2e6: 0x049d, 0x2e7: 0x049d, 0x2e8: 0x049d, 0x2e9: 0x049d,\n\t0x2ea: 0x049d, 0x2eb: 0x049d, 0x2ec: 0x0008, 0x2ed: 0x0008, 0x2ee: 0x0008, 0x2ef: 0x0008,\n\t0x2f0: 0x0008, 0x2f1: 0x0008, 0x2f2: 0x0008, 0x2f3: 0x0008, 0x2f4: 0x0008, 0x2f5: 0x0008,\n\t0x2f6: 0x0008, 0x2f7: 0x0008, 0x2f8: 0x0008, 0x2f9: 0x0008, 0x2fa: 0x0008, 0x2fb: 0x0008,\n\t0x2fc: 0x0008, 0x2fd: 0x0008, 0x2fe: 0x0008, 0x2ff: 0x0008,\n\t// Block 0xc, offset 0x300\n\t0x300: 0x0008, 0x301: 0x0008, 0x302: 0xe00f, 0x303: 0x0008, 0x304: 0x0008, 0x305: 0x0008,\n\t0x306: 0x0008, 0x307: 0x0008, 0x308: 0x0008, 0x309: 0x0008, 0x30a: 0x0008, 0x30b: 0x0008,\n\t0x30c: 0x0008, 0x30d: 0x0008, 0x30e: 0x0008, 0x30f: 0xe0c5, 0x310: 0x04b5, 0x311: 0x04cd,\n\t0x312: 0xe0bd, 0x313: 0xe0f5, 0x314: 0xe0fd, 0x315: 0xe09d, 0x316: 0xe0b5, 0x317: 0x0008,\n\t0x318: 0xe00d, 0x319: 0x0008, 0x31a: 0xe00d, 0x31b: 0x0008, 0x31c: 0xe00d, 0x31d: 0x0008,\n\t0x31e: 0xe00d, 0x31f: 0x0008, 0x320: 0xe00d, 0x321: 0x0008, 0x322: 0xe00d, 0x323: 0x0008,\n\t0x324: 0xe00d, 0x325: 0x0008, 0x326: 0xe00d, 0x327: 0x0008, 0x328: 0xe00d, 0x329: 0x0008,\n\t0x32a: 0xe00d, 0x32b: 0x0008, 0x32c: 0xe00d, 0x32d: 0x0008, 0x32e: 0xe00d, 0x32f: 0x0008,\n\t0x330: 0x04e5, 0x331: 0xe185, 0x332: 0xe18d, 0x333: 0x0008, 0x334: 0x04fd, 0x335: 0x03dd,\n\t0x336: 0x0018, 0x337: 0xe07d, 0x338: 0x0008, 0x339: 0xe1d5, 0x33a: 0xe00d, 0x33b: 0x0008,\n\t0x33c: 0x0008, 0x33d: 0x0515, 0x33e: 0x052d, 0x33f: 0x052d,\n\t// Block 0xd, offset 0x340\n\t0x340: 0x0008, 0x341: 0x0008, 0x342: 0x0008, 0x343: 0x0008, 0x344: 0x0008, 0x345: 0x0008,\n\t0x346: 0x0008, 0x347: 0x0008, 0x348: 0x0008, 0x349: 0x0008, 0x34a: 0x0008, 0x34b: 0x0008,\n\t0x34c: 0x0008, 0x34d: 0x0008, 0x34e: 0x0008, 0x34f: 0x0008, 0x350: 0x0008, 0x351: 0x0008,\n\t0x352: 0x0008, 0x353: 0x0008, 0x354: 0x0008, 0x355: 0x0008, 0x356: 0x0008, 0x357: 0x0008,\n\t0x358: 0x0008, 0x359: 0x0008, 0x35a: 0x0008, 0x35b: 0x0008, 0x35c: 0x0008, 0x35d: 0x0008,\n\t0x35e: 0x0008, 0x35f: 0x0008, 0x360: 0xe00d, 0x361: 0x0008, 0x362: 0xe00d, 0x363: 0x0008,\n\t0x364: 0xe00d, 0x365: 0x0008, 0x366: 0xe00d, 0x367: 0x0008, 0x368: 0xe00d, 0x369: 0x0008,\n\t0x36a: 0xe00d, 0x36b: 0x0008, 0x36c: 0xe00d, 0x36d: 0x0008, 0x36e: 0xe00d, 0x36f: 0x0008,\n\t0x370: 0xe00d, 0x371: 0x0008, 0x372: 0xe00d, 0x373: 0x0008, 0x374: 0xe00d, 0x375: 0x0008,\n\t0x376: 0xe00d, 0x377: 0x0008, 0x378: 0xe00d, 0x379: 0x0008, 0x37a: 0xe00d, 0x37b: 0x0008,\n\t0x37c: 0xe00d, 0x37d: 0x0008, 0x37e: 0xe00d, 0x37f: 0x0008,\n\t// Block 0xe, offset 0x380\n\t0x380: 0xe00d, 0x381: 0x0008, 0x382: 0x0018, 0x383: 0x3308, 0x384: 0x3308, 0x385: 0x3308,\n\t0x386: 0x3308, 0x387: 0x3308, 0x388: 0x3318, 0x389: 0x3318, 0x38a: 0xe00d, 0x38b: 0x0008,\n\t0x38c: 0xe00d, 0x38d: 0x0008, 0x38e: 0xe00d, 0x38f: 0x0008, 0x390: 0xe00d, 0x391: 0x0008,\n\t0x392: 0xe00d, 0x393: 0x0008, 0x394: 0xe00d, 0x395: 0x0008, 0x396: 0xe00d, 0x397: 0x0008,\n\t0x398: 0xe00d, 0x399: 0x0008, 0x39a: 0xe00d, 0x39b: 0x0008, 0x39c: 0xe00d, 0x39d: 0x0008,\n\t0x39e: 0xe00d, 0x39f: 0x0008, 0x3a0: 0xe00d, 0x3a1: 0x0008, 0x3a2: 0xe00d, 0x3a3: 0x0008,\n\t0x3a4: 0xe00d, 0x3a5: 0x0008, 0x3a6: 0xe00d, 0x3a7: 0x0008, 0x3a8: 0xe00d, 0x3a9: 0x0008,\n\t0x3aa: 0xe00d, 0x3ab: 0x0008, 0x3ac: 0xe00d, 0x3ad: 0x0008, 0x3ae: 0xe00d, 0x3af: 0x0008,\n\t0x3b0: 0xe00d, 0x3b1: 0x0008, 0x3b2: 0xe00d, 0x3b3: 0x0008, 0x3b4: 0xe00d, 0x3b5: 0x0008,\n\t0x3b6: 0xe00d, 0x3b7: 0x0008, 0x3b8: 0xe00d, 0x3b9: 0x0008, 0x3ba: 0xe00d, 0x3bb: 0x0008,\n\t0x3bc: 0xe00d, 0x3bd: 0x0008, 0x3be: 0xe00d, 0x3bf: 0x0008,\n\t// Block 0xf, offset 0x3c0\n\t0x3c0: 0x0040, 0x3c1: 0xe01d, 0x3c2: 0x0008, 0x3c3: 0xe03d, 0x3c4: 0x0008, 0x3c5: 0xe01d,\n\t0x3c6: 0x0008, 0x3c7: 0xe07d, 0x3c8: 0x0008, 0x3c9: 0xe01d, 0x3ca: 0x0008, 0x3cb: 0xe03d,\n\t0x3cc: 0x0008, 0x3cd: 0xe01d, 0x3ce: 0x0008, 0x3cf: 0x0008, 0x3d0: 0xe00d, 0x3d1: 0x0008,\n\t0x3d2: 0xe00d, 0x3d3: 0x0008, 0x3d4: 0xe00d, 0x3d5: 0x0008, 0x3d6: 0xe00d, 0x3d7: 0x0008,\n\t0x3d8: 0xe00d, 0x3d9: 0x0008, 0x3da: 0xe00d, 0x3db: 0x0008, 0x3dc: 0xe00d, 0x3dd: 0x0008,\n\t0x3de: 0xe00d, 0x3df: 0x0008, 0x3e0: 0xe00d, 0x3e1: 0x0008, 0x3e2: 0xe00d, 0x3e3: 0x0008,\n\t0x3e4: 0xe00d, 0x3e5: 0x0008, 0x3e6: 0xe00d, 0x3e7: 0x0008, 0x3e8: 0xe00d, 0x3e9: 0x0008,\n\t0x3ea: 0xe00d, 0x3eb: 0x0008, 0x3ec: 0xe00d, 0x3ed: 0x0008, 0x3ee: 0xe00d, 0x3ef: 0x0008,\n\t0x3f0: 0xe00d, 0x3f1: 0x0008, 0x3f2: 0xe00d, 0x3f3: 0x0008, 0x3f4: 0xe00d, 0x3f5: 0x0008,\n\t0x3f6: 0xe00d, 0x3f7: 0x0008, 0x3f8: 0xe00d, 0x3f9: 0x0008, 0x3fa: 0xe00d, 0x3fb: 0x0008,\n\t0x3fc: 0xe00d, 0x3fd: 0x0008, 0x3fe: 0xe00d, 0x3ff: 0x0008,\n\t// Block 0x10, offset 0x400\n\t0x400: 0xe00d, 0x401: 0x0008, 0x402: 0xe00d, 0x403: 0x0008, 0x404: 0xe00d, 0x405: 0x0008,\n\t0x406: 0xe00d, 0x407: 0x0008, 0x408: 0xe00d, 0x409: 0x0008, 0x40a: 0xe00d, 0x40b: 0x0008,\n\t0x40c: 0xe00d, 0x40d: 0x0008, 0x40e: 0xe00d, 0x40f: 0x0008, 0x410: 0xe00d, 0x411: 0x0008,\n\t0x412: 0xe00d, 0x413: 0x0008, 0x414: 0xe00d, 0x415: 0x0008, 0x416: 0xe00d, 0x417: 0x0008,\n\t0x418: 0xe00d, 0x419: 0x0008, 0x41a: 0xe00d, 0x41b: 0x0008, 0x41c: 0xe00d, 0x41d: 0x0008,\n\t0x41e: 0xe00d, 0x41f: 0x0008, 0x420: 0xe00d, 0x421: 0x0008, 0x422: 0xe00d, 0x423: 0x0008,\n\t0x424: 0xe00d, 0x425: 0x0008, 0x426: 0xe00d, 0x427: 0x0008, 0x428: 0xe00d, 0x429: 0x0008,\n\t0x42a: 0xe00d, 0x42b: 0x0008, 0x42c: 0xe00d, 0x42d: 0x0008, 0x42e: 0xe00d, 0x42f: 0x0008,\n\t0x430: 0x0040, 0x431: 0x03f5, 0x432: 0x03f5, 0x433: 0x03f5, 0x434: 0x03f5, 0x435: 0x03f5,\n\t0x436: 0x03f5, 0x437: 0x03f5, 0x438: 0x03f5, 0x439: 0x03f5, 0x43a: 0x03f5, 0x43b: 0x03f5,\n\t0x43c: 0x03f5, 0x43d: 0x03f5, 0x43e: 0x03f5, 0x43f: 0x03f5,\n\t// Block 0x11, offset 0x440\n\t0x440: 0x0840, 0x441: 0x0840, 0x442: 0x0840, 0x443: 0x0840, 0x444: 0x0840, 0x445: 0x0840,\n\t0x446: 0x0018, 0x447: 0x0018, 0x448: 0x0818, 0x449: 0x0018, 0x44a: 0x0018, 0x44b: 0x0818,\n\t0x44c: 0x0018, 0x44d: 0x0818, 0x44e: 0x0018, 0x44f: 0x0018, 0x450: 0x3308, 0x451: 0x3308,\n\t0x452: 0x3308, 0x453: 0x3308, 0x454: 0x3308, 0x455: 0x3308, 0x456: 0x3308, 0x457: 0x3308,\n\t0x458: 0x3308, 0x459: 0x3308, 0x45a: 0x3308, 0x45b: 0x0818, 0x45c: 0x0b40, 0x45d: 0x0040,\n\t0x45e: 0x0818, 0x45f: 0x0818, 0x460: 0x0a08, 0x461: 0x0808, 0x462: 0x0c08, 0x463: 0x0c08,\n\t0x464: 0x0c08, 0x465: 0x0c08, 0x466: 0x0a08, 0x467: 0x0c08, 0x468: 0x0a08, 0x469: 0x0c08,\n\t0x46a: 0x0a08, 0x46b: 0x0a08, 0x46c: 0x0a08, 0x46d: 0x0a08, 0x46e: 0x0a08, 0x46f: 0x0c08,\n\t0x470: 0x0c08, 0x471: 0x0c08, 0x472: 0x0c08, 0x473: 0x0a08, 0x474: 0x0a08, 0x475: 0x0a08,\n\t0x476: 0x0a08, 0x477: 0x0a08, 0x478: 0x0a08, 0x479: 0x0a08, 0x47a: 0x0a08, 0x47b: 0x0a08,\n\t0x47c: 0x0a08, 0x47d: 0x0a08, 0x47e: 0x0a08, 0x47f: 0x0a08,\n\t// Block 0x12, offset 0x480\n\t0x480: 0x0818, 0x481: 0x0a08, 0x482: 0x0a08, 0x483: 0x0a08, 0x484: 0x0a08, 0x485: 0x0a08,\n\t0x486: 0x0a08, 0x487: 0x0a08, 0x488: 0x0c08, 0x489: 0x0a08, 0x48a: 0x0a08, 0x48b: 0x3308,\n\t0x48c: 0x3308, 0x48d: 0x3308, 0x48e: 0x3308, 0x48f: 0x3308, 0x490: 0x3308, 0x491: 0x3308,\n\t0x492: 0x3308, 0x493: 0x3308, 0x494: 0x3308, 0x495: 0x3308, 0x496: 0x3308, 0x497: 0x3308,\n\t0x498: 0x3308, 0x499: 0x3308, 0x49a: 0x3308, 0x49b: 0x3308, 0x49c: 0x3308, 0x49d: 0x3308,\n\t0x49e: 0x3308, 0x49f: 0x3308, 0x4a0: 0x0808, 0x4a1: 0x0808, 0x4a2: 0x0808, 0x4a3: 0x0808,\n\t0x4a4: 0x0808, 0x4a5: 0x0808, 0x4a6: 0x0808, 0x4a7: 0x0808, 0x4a8: 0x0808, 0x4a9: 0x0808,\n\t0x4aa: 0x0018, 0x4ab: 0x0818, 0x4ac: 0x0818, 0x4ad: 0x0818, 0x4ae: 0x0a08, 0x4af: 0x0a08,\n\t0x4b0: 0x3308, 0x4b1: 0x0c08, 0x4b2: 0x0c08, 0x4b3: 0x0c08, 0x4b4: 0x0808, 0x4b5: 0x0429,\n\t0x4b6: 0x0451, 0x4b7: 0x0479, 0x4b8: 0x04a1, 0x4b9: 0x0a08, 0x4ba: 0x0a08, 0x4bb: 0x0a08,\n\t0x4bc: 0x0a08, 0x4bd: 0x0a08, 0x4be: 0x0a08, 0x4bf: 0x0a08,\n\t// Block 0x13, offset 0x4c0\n\t0x4c0: 0x0c08, 0x4c1: 0x0a08, 0x4c2: 0x0a08, 0x4c3: 0x0c08, 0x4c4: 0x0c08, 0x4c5: 0x0c08,\n\t0x4c6: 0x0c08, 0x4c7: 0x0c08, 0x4c8: 0x0c08, 0x4c9: 0x0c08, 0x4ca: 0x0c08, 0x4cb: 0x0c08,\n\t0x4cc: 0x0a08, 0x4cd: 0x0c08, 0x4ce: 0x0a08, 0x4cf: 0x0c08, 0x4d0: 0x0a08, 0x4d1: 0x0a08,\n\t0x4d2: 0x0c08, 0x4d3: 0x0c08, 0x4d4: 0x0818, 0x4d5: 0x0c08, 0x4d6: 0x3308, 0x4d7: 0x3308,\n\t0x4d8: 0x3308, 0x4d9: 0x3308, 0x4da: 0x3308, 0x4db: 0x3308, 0x4dc: 0x3308, 0x4dd: 0x0840,\n\t0x4de: 0x0018, 0x4df: 0x3308, 0x4e0: 0x3308, 0x4e1: 0x3308, 0x4e2: 0x3308, 0x4e3: 0x3308,\n\t0x4e4: 0x3308, 0x4e5: 0x0808, 0x4e6: 0x0808, 0x4e7: 0x3308, 0x4e8: 0x3308, 0x4e9: 0x0018,\n\t0x4ea: 0x3308, 0x4eb: 0x3308, 0x4ec: 0x3308, 0x4ed: 0x3308, 0x4ee: 0x0c08, 0x4ef: 0x0c08,\n\t0x4f0: 0x0008, 0x4f1: 0x0008, 0x4f2: 0x0008, 0x4f3: 0x0008, 0x4f4: 0x0008, 0x4f5: 0x0008,\n\t0x4f6: 0x0008, 0x4f7: 0x0008, 0x4f8: 0x0008, 0x4f9: 0x0008, 0x4fa: 0x0a08, 0x4fb: 0x0a08,\n\t0x4fc: 0x0a08, 0x4fd: 0x0808, 0x4fe: 0x0808, 0x4ff: 0x0a08,\n\t// Block 0x14, offset 0x500\n\t0x500: 0x0818, 0x501: 0x0818, 0x502: 0x0818, 0x503: 0x0818, 0x504: 0x0818, 0x505: 0x0818,\n\t0x506: 0x0818, 0x507: 0x0818, 0x508: 0x0818, 0x509: 0x0818, 0x50a: 0x0818, 0x50b: 0x0818,\n\t0x50c: 0x0818, 0x50d: 0x0818, 0x50e: 0x0040, 0x50f: 0x0b40, 0x510: 0x0c08, 0x511: 0x3308,\n\t0x512: 0x0a08, 0x513: 0x0a08, 0x514: 0x0a08, 0x515: 0x0c08, 0x516: 0x0c08, 0x517: 0x0c08,\n\t0x518: 0x0c08, 0x519: 0x0c08, 0x51a: 0x0a08, 0x51b: 0x0a08, 0x51c: 0x0a08, 0x51d: 0x0a08,\n\t0x51e: 0x0c08, 0x51f: 0x0a08, 0x520: 0x0a08, 0x521: 0x0a08, 0x522: 0x0a08, 0x523: 0x0a08,\n\t0x524: 0x0a08, 0x525: 0x0a08, 0x526: 0x0a08, 0x527: 0x0a08, 0x528: 0x0c08, 0x529: 0x0a08,\n\t0x52a: 0x0c08, 0x52b: 0x0a08, 0x52c: 0x0c08, 0x52d: 0x0a08, 0x52e: 0x0a08, 0x52f: 0x0c08,\n\t0x530: 0x3308, 0x531: 0x3308, 0x532: 0x3308, 0x533: 0x3308, 0x534: 0x3308, 0x535: 0x3308,\n\t0x536: 0x3308, 0x537: 0x3308, 0x538: 0x3308, 0x539: 0x3308, 0x53a: 0x3308, 0x53b: 0x3308,\n\t0x53c: 0x3308, 0x53d: 0x3308, 0x53e: 0x3308, 0x53f: 0x3308,\n\t// Block 0x15, offset 0x540\n\t0x540: 0x0c08, 0x541: 0x0a08, 0x542: 0x0a08, 0x543: 0x0a08, 0x544: 0x0a08, 0x545: 0x0a08,\n\t0x546: 0x0c08, 0x547: 0x0c08, 0x548: 0x0a08, 0x549: 0x0c08, 0x54a: 0x0a08, 0x54b: 0x0a08,\n\t0x54c: 0x0a08, 0x54d: 0x0a08, 0x54e: 0x0a08, 0x54f: 0x0a08, 0x550: 0x0a08, 0x551: 0x0a08,\n\t0x552: 0x0a08, 0x553: 0x0a08, 0x554: 0x0c08, 0x555: 0x0a08, 0x556: 0x0808, 0x557: 0x0808,\n\t0x558: 0x0808, 0x559: 0x3308, 0x55a: 0x3308, 0x55b: 0x3308, 0x55c: 0x0040, 0x55d: 0x0040,\n\t0x55e: 0x0818, 0x55f: 0x0040, 0x560: 0x0a08, 0x561: 0x0808, 0x562: 0x0a08, 0x563: 0x0a08,\n\t0x564: 0x0a08, 0x565: 0x0a08, 0x566: 0x0808, 0x567: 0x0c08, 0x568: 0x0a08, 0x569: 0x0c08,\n\t0x56a: 0x0c08, 0x56b: 0x0040, 0x56c: 0x0040, 0x56d: 0x0040, 0x56e: 0x0040, 0x56f: 0x0040,\n\t0x570: 0x0040, 0x571: 0x0040, 0x572: 0x0040, 0x573: 0x0040, 0x574: 0x0040, 0x575: 0x0040,\n\t0x576: 0x0040, 0x577: 0x0040, 0x578: 0x0040, 0x579: 0x0040, 0x57a: 0x0040, 0x57b: 0x0040,\n\t0x57c: 0x0040, 0x57d: 0x0040, 0x57e: 0x0040, 0x57f: 0x0040,\n\t// Block 0x16, offset 0x580\n\t0x580: 0x3008, 0x581: 0x3308, 0x582: 0x3308, 0x583: 0x3308, 0x584: 0x3308, 0x585: 0x3308,\n\t0x586: 0x3308, 0x587: 0x3308, 0x588: 0x3308, 0x589: 0x3008, 0x58a: 0x3008, 0x58b: 0x3008,\n\t0x58c: 0x3008, 0x58d: 0x3b08, 0x58e: 0x3008, 0x58f: 0x3008, 0x590: 0x0008, 0x591: 0x3308,\n\t0x592: 0x3308, 0x593: 0x3308, 0x594: 0x3308, 0x595: 0x3308, 0x596: 0x3308, 0x597: 0x3308,\n\t0x598: 0x04c9, 0x599: 0x0501, 0x59a: 0x0539, 0x59b: 0x0571, 0x59c: 0x05a9, 0x59d: 0x05e1,\n\t0x59e: 0x0619, 0x59f: 0x0651, 0x5a0: 0x0008, 0x5a1: 0x0008, 0x5a2: 0x3308, 0x5a3: 0x3308,\n\t0x5a4: 0x0018, 0x5a5: 0x0018, 0x5a6: 0x0008, 0x5a7: 0x0008, 0x5a8: 0x0008, 0x5a9: 0x0008,\n\t0x5aa: 0x0008, 0x5ab: 0x0008, 0x5ac: 0x0008, 0x5ad: 0x0008, 0x5ae: 0x0008, 0x5af: 0x0008,\n\t0x5b0: 0x0018, 0x5b1: 0x0008, 0x5b2: 0x0008, 0x5b3: 0x0008, 0x5b4: 0x0008, 0x5b5: 0x0008,\n\t0x5b6: 0x0008, 0x5b7: 0x0008, 0x5b8: 0x0008, 0x5b9: 0x0008, 0x5ba: 0x0008, 0x5bb: 0x0008,\n\t0x5bc: 0x0008, 0x5bd: 0x0008, 0x5be: 0x0008, 0x5bf: 0x0008,\n\t// Block 0x17, offset 0x5c0\n\t0x5c0: 0x0008, 0x5c1: 0x3308, 0x5c2: 0x3008, 0x5c3: 0x3008, 0x5c4: 0x0040, 0x5c5: 0x0008,\n\t0x5c6: 0x0008, 0x5c7: 0x0008, 0x5c8: 0x0008, 0x5c9: 0x0008, 0x5ca: 0x0008, 0x5cb: 0x0008,\n\t0x5cc: 0x0008, 0x5cd: 0x0040, 0x5ce: 0x0040, 0x5cf: 0x0008, 0x5d0: 0x0008, 0x5d1: 0x0040,\n\t0x5d2: 0x0040, 0x5d3: 0x0008, 0x5d4: 0x0008, 0x5d5: 0x0008, 0x5d6: 0x0008, 0x5d7: 0x0008,\n\t0x5d8: 0x0008, 0x5d9: 0x0008, 0x5da: 0x0008, 0x5db: 0x0008, 0x5dc: 0x0008, 0x5dd: 0x0008,\n\t0x5de: 0x0008, 0x5df: 0x0008, 0x5e0: 0x0008, 0x5e1: 0x0008, 0x5e2: 0x0008, 0x5e3: 0x0008,\n\t0x5e4: 0x0008, 0x5e5: 0x0008, 0x5e6: 0x0008, 0x5e7: 0x0008, 0x5e8: 0x0008, 0x5e9: 0x0040,\n\t0x5ea: 0x0008, 0x5eb: 0x0008, 0x5ec: 0x0008, 0x5ed: 0x0008, 0x5ee: 0x0008, 0x5ef: 0x0008,\n\t0x5f0: 0x0008, 0x5f1: 0x0040, 0x5f2: 0x0008, 0x5f3: 0x0040, 0x5f4: 0x0040, 0x5f5: 0x0040,\n\t0x5f6: 0x0008, 0x5f7: 0x0008, 0x5f8: 0x0008, 0x5f9: 0x0008, 0x5fa: 0x0040, 0x5fb: 0x0040,\n\t0x5fc: 0x3308, 0x5fd: 0x0008, 0x5fe: 0x3008, 0x5ff: 0x3008,\n\t// Block 0x18, offset 0x600\n\t0x600: 0x3008, 0x601: 0x3308, 0x602: 0x3308, 0x603: 0x3308, 0x604: 0x3308, 0x605: 0x0040,\n\t0x606: 0x0040, 0x607: 0x3008, 0x608: 0x3008, 0x609: 0x0040, 0x60a: 0x0040, 0x60b: 0x3008,\n\t0x60c: 0x3008, 0x60d: 0x3b08, 0x60e: 0x0008, 0x60f: 0x0040, 0x610: 0x0040, 0x611: 0x0040,\n\t0x612: 0x0040, 0x613: 0x0040, 0x614: 0x0040, 0x615: 0x0040, 0x616: 0x0040, 0x617: 0x3008,\n\t0x618: 0x0040, 0x619: 0x0040, 0x61a: 0x0040, 0x61b: 0x0040, 0x61c: 0x0689, 0x61d: 0x06c1,\n\t0x61e: 0x0040, 0x61f: 0x06f9, 0x620: 0x0008, 0x621: 0x0008, 0x622: 0x3308, 0x623: 0x3308,\n\t0x624: 0x0040, 0x625: 0x0040, 0x626: 0x0008, 0x627: 0x0008, 0x628: 0x0008, 0x629: 0x0008,\n\t0x62a: 0x0008, 0x62b: 0x0008, 0x62c: 0x0008, 0x62d: 0x0008, 0x62e: 0x0008, 0x62f: 0x0008,\n\t0x630: 0x0008, 0x631: 0x0008, 0x632: 0x0018, 0x633: 0x0018, 0x634: 0x0018, 0x635: 0x0018,\n\t0x636: 0x0018, 0x637: 0x0018, 0x638: 0x0018, 0x639: 0x0018, 0x63a: 0x0018, 0x63b: 0x0018,\n\t0x63c: 0x0008, 0x63d: 0x0018, 0x63e: 0x3308, 0x63f: 0x0040,\n\t// Block 0x19, offset 0x640\n\t0x640: 0x0040, 0x641: 0x3308, 0x642: 0x3308, 0x643: 0x3008, 0x644: 0x0040, 0x645: 0x0008,\n\t0x646: 0x0008, 0x647: 0x0008, 0x648: 0x0008, 0x649: 0x0008, 0x64a: 0x0008, 0x64b: 0x0040,\n\t0x64c: 0x0040, 0x64d: 0x0040, 0x64e: 0x0040, 0x64f: 0x0008, 0x650: 0x0008, 0x651: 0x0040,\n\t0x652: 0x0040, 0x653: 0x0008, 0x654: 0x0008, 0x655: 0x0008, 0x656: 0x0008, 0x657: 0x0008,\n\t0x658: 0x0008, 0x659: 0x0008, 0x65a: 0x0008, 0x65b: 0x0008, 0x65c: 0x0008, 0x65d: 0x0008,\n\t0x65e: 0x0008, 0x65f: 0x0008, 0x660: 0x0008, 0x661: 0x0008, 0x662: 0x0008, 0x663: 0x0008,\n\t0x664: 0x0008, 0x665: 0x0008, 0x666: 0x0008, 0x667: 0x0008, 0x668: 0x0008, 0x669: 0x0040,\n\t0x66a: 0x0008, 0x66b: 0x0008, 0x66c: 0x0008, 0x66d: 0x0008, 0x66e: 0x0008, 0x66f: 0x0008,\n\t0x670: 0x0008, 0x671: 0x0040, 0x672: 0x0008, 0x673: 0x0731, 0x674: 0x0040, 0x675: 0x0008,\n\t0x676: 0x0769, 0x677: 0x0040, 0x678: 0x0008, 0x679: 0x0008, 0x67a: 0x0040, 0x67b: 0x0040,\n\t0x67c: 0x3308, 0x67d: 0x0040, 0x67e: 0x3008, 0x67f: 0x3008,\n\t// Block 0x1a, offset 0x680\n\t0x680: 0x3008, 0x681: 0x3308, 0x682: 0x3308, 0x683: 0x0040, 0x684: 0x0040, 0x685: 0x0040,\n\t0x686: 0x0040, 0x687: 0x3308, 0x688: 0x3308, 0x689: 0x0040, 0x68a: 0x0040, 0x68b: 0x3308,\n\t0x68c: 0x3308, 0x68d: 0x3b08, 0x68e: 0x0040, 0x68f: 0x0040, 0x690: 0x0040, 0x691: 0x3308,\n\t0x692: 0x0040, 0x693: 0x0040, 0x694: 0x0040, 0x695: 0x0040, 0x696: 0x0040, 0x697: 0x0040,\n\t0x698: 0x0040, 0x699: 0x07a1, 0x69a: 0x07d9, 0x69b: 0x0811, 0x69c: 0x0008, 0x69d: 0x0040,\n\t0x69e: 0x0849, 0x69f: 0x0040, 0x6a0: 0x0040, 0x6a1: 0x0040, 0x6a2: 0x0040, 0x6a3: 0x0040,\n\t0x6a4: 0x0040, 0x6a5: 0x0040, 0x6a6: 0x0008, 0x6a7: 0x0008, 0x6a8: 0x0008, 0x6a9: 0x0008,\n\t0x6aa: 0x0008, 0x6ab: 0x0008, 0x6ac: 0x0008, 0x6ad: 0x0008, 0x6ae: 0x0008, 0x6af: 0x0008,\n\t0x6b0: 0x3308, 0x6b1: 0x3308, 0x6b2: 0x0008, 0x6b3: 0x0008, 0x6b4: 0x0008, 0x6b5: 0x3308,\n\t0x6b6: 0x0018, 0x6b7: 0x0040, 0x6b8: 0x0040, 0x6b9: 0x0040, 0x6ba: 0x0040, 0x6bb: 0x0040,\n\t0x6bc: 0x0040, 0x6bd: 0x0040, 0x6be: 0x0040, 0x6bf: 0x0040,\n\t// Block 0x1b, offset 0x6c0\n\t0x6c0: 0x0040, 0x6c1: 0x3308, 0x6c2: 0x3308, 0x6c3: 0x3008, 0x6c4: 0x0040, 0x6c5: 0x0008,\n\t0x6c6: 0x0008, 0x6c7: 0x0008, 0x6c8: 0x0008, 0x6c9: 0x0008, 0x6ca: 0x0008, 0x6cb: 0x0008,\n\t0x6cc: 0x0008, 0x6cd: 0x0008, 0x6ce: 0x0040, 0x6cf: 0x0008, 0x6d0: 0x0008, 0x6d1: 0x0008,\n\t0x6d2: 0x0040, 0x6d3: 0x0008, 0x6d4: 0x0008, 0x6d5: 0x0008, 0x6d6: 0x0008, 0x6d7: 0x0008,\n\t0x6d8: 0x0008, 0x6d9: 0x0008, 0x6da: 0x0008, 0x6db: 0x0008, 0x6dc: 0x0008, 0x6dd: 0x0008,\n\t0x6de: 0x0008, 0x6df: 0x0008, 0x6e0: 0x0008, 0x6e1: 0x0008, 0x6e2: 0x0008, 0x6e3: 0x0008,\n\t0x6e4: 0x0008, 0x6e5: 0x0008, 0x6e6: 0x0008, 0x6e7: 0x0008, 0x6e8: 0x0008, 0x6e9: 0x0040,\n\t0x6ea: 0x0008, 0x6eb: 0x0008, 0x6ec: 0x0008, 0x6ed: 0x0008, 0x6ee: 0x0008, 0x6ef: 0x0008,\n\t0x6f0: 0x0008, 0x6f1: 0x0040, 0x6f2: 0x0008, 0x6f3: 0x0008, 0x6f4: 0x0040, 0x6f5: 0x0008,\n\t0x6f6: 0x0008, 0x6f7: 0x0008, 0x6f8: 0x0008, 0x6f9: 0x0008, 0x6fa: 0x0040, 0x6fb: 0x0040,\n\t0x6fc: 0x3308, 0x6fd: 0x0008, 0x6fe: 0x3008, 0x6ff: 0x3008,\n\t// Block 0x1c, offset 0x700\n\t0x700: 0x3008, 0x701: 0x3308, 0x702: 0x3308, 0x703: 0x3308, 0x704: 0x3308, 0x705: 0x3308,\n\t0x706: 0x0040, 0x707: 0x3308, 0x708: 0x3308, 0x709: 0x3008, 0x70a: 0x0040, 0x70b: 0x3008,\n\t0x70c: 0x3008, 0x70d: 0x3b08, 0x70e: 0x0040, 0x70f: 0x0040, 0x710: 0x0008, 0x711: 0x0040,\n\t0x712: 0x0040, 0x713: 0x0040, 0x714: 0x0040, 0x715: 0x0040, 0x716: 0x0040, 0x717: 0x0040,\n\t0x718: 0x0040, 0x719: 0x0040, 0x71a: 0x0040, 0x71b: 0x0040, 0x71c: 0x0040, 0x71d: 0x0040,\n\t0x71e: 0x0040, 0x71f: 0x0040, 0x720: 0x0008, 0x721: 0x0008, 0x722: 0x3308, 0x723: 0x3308,\n\t0x724: 0x0040, 0x725: 0x0040, 0x726: 0x0008, 0x727: 0x0008, 0x728: 0x0008, 0x729: 0x0008,\n\t0x72a: 0x0008, 0x72b: 0x0008, 0x72c: 0x0008, 0x72d: 0x0008, 0x72e: 0x0008, 0x72f: 0x0008,\n\t0x730: 0x0018, 0x731: 0x0018, 0x732: 0x0040, 0x733: 0x0040, 0x734: 0x0040, 0x735: 0x0040,\n\t0x736: 0x0040, 0x737: 0x0040, 0x738: 0x0040, 0x739: 0x0008, 0x73a: 0x3308, 0x73b: 0x3308,\n\t0x73c: 0x3308, 0x73d: 0x3308, 0x73e: 0x3308, 0x73f: 0x3308,\n\t// Block 0x1d, offset 0x740\n\t0x740: 0x0040, 0x741: 0x3308, 0x742: 0x3008, 0x743: 0x3008, 0x744: 0x0040, 0x745: 0x0008,\n\t0x746: 0x0008, 0x747: 0x0008, 0x748: 0x0008, 0x749: 0x0008, 0x74a: 0x0008, 0x74b: 0x0008,\n\t0x74c: 0x0008, 0x74d: 0x0040, 0x74e: 0x0040, 0x74f: 0x0008, 0x750: 0x0008, 0x751: 0x0040,\n\t0x752: 0x0040, 0x753: 0x0008, 0x754: 0x0008, 0x755: 0x0008, 0x756: 0x0008, 0x757: 0x0008,\n\t0x758: 0x0008, 0x759: 0x0008, 0x75a: 0x0008, 0x75b: 0x0008, 0x75c: 0x0008, 0x75d: 0x0008,\n\t0x75e: 0x0008, 0x75f: 0x0008, 0x760: 0x0008, 0x761: 0x0008, 0x762: 0x0008, 0x763: 0x0008,\n\t0x764: 0x0008, 0x765: 0x0008, 0x766: 0x0008, 0x767: 0x0008, 0x768: 0x0008, 0x769: 0x0040,\n\t0x76a: 0x0008, 0x76b: 0x0008, 0x76c: 0x0008, 0x76d: 0x0008, 0x76e: 0x0008, 0x76f: 0x0008,\n\t0x770: 0x0008, 0x771: 0x0040, 0x772: 0x0008, 0x773: 0x0008, 0x774: 0x0040, 0x775: 0x0008,\n\t0x776: 0x0008, 0x777: 0x0008, 0x778: 0x0008, 0x779: 0x0008, 0x77a: 0x0040, 0x77b: 0x0040,\n\t0x77c: 0x3308, 0x77d: 0x0008, 0x77e: 0x3008, 0x77f: 0x3308,\n\t// Block 0x1e, offset 0x780\n\t0x780: 0x3008, 0x781: 0x3308, 0x782: 0x3308, 0x783: 0x3308, 0x784: 0x3308, 0x785: 0x0040,\n\t0x786: 0x0040, 0x787: 0x3008, 0x788: 0x3008, 0x789: 0x0040, 0x78a: 0x0040, 0x78b: 0x3008,\n\t0x78c: 0x3008, 0x78d: 0x3b08, 0x78e: 0x0040, 0x78f: 0x0040, 0x790: 0x0040, 0x791: 0x0040,\n\t0x792: 0x0040, 0x793: 0x0040, 0x794: 0x0040, 0x795: 0x0040, 0x796: 0x3308, 0x797: 0x3008,\n\t0x798: 0x0040, 0x799: 0x0040, 0x79a: 0x0040, 0x79b: 0x0040, 0x79c: 0x0881, 0x79d: 0x08b9,\n\t0x79e: 0x0040, 0x79f: 0x0008, 0x7a0: 0x0008, 0x7a1: 0x0008, 0x7a2: 0x3308, 0x7a3: 0x3308,\n\t0x7a4: 0x0040, 0x7a5: 0x0040, 0x7a6: 0x0008, 0x7a7: 0x0008, 0x7a8: 0x0008, 0x7a9: 0x0008,\n\t0x7aa: 0x0008, 0x7ab: 0x0008, 0x7ac: 0x0008, 0x7ad: 0x0008, 0x7ae: 0x0008, 0x7af: 0x0008,\n\t0x7b0: 0x0018, 0x7b1: 0x0008, 0x7b2: 0x0018, 0x7b3: 0x0018, 0x7b4: 0x0018, 0x7b5: 0x0018,\n\t0x7b6: 0x0018, 0x7b7: 0x0018, 0x7b8: 0x0040, 0x7b9: 0x0040, 0x7ba: 0x0040, 0x7bb: 0x0040,\n\t0x7bc: 0x0040, 0x7bd: 0x0040, 0x7be: 0x0040, 0x7bf: 0x0040,\n\t// Block 0x1f, offset 0x7c0\n\t0x7c0: 0x0040, 0x7c1: 0x0040, 0x7c2: 0x3308, 0x7c3: 0x0008, 0x7c4: 0x0040, 0x7c5: 0x0008,\n\t0x7c6: 0x0008, 0x7c7: 0x0008, 0x7c8: 0x0008, 0x7c9: 0x0008, 0x7ca: 0x0008, 0x7cb: 0x0040,\n\t0x7cc: 0x0040, 0x7cd: 0x0040, 0x7ce: 0x0008, 0x7cf: 0x0008, 0x7d0: 0x0008, 0x7d1: 0x0040,\n\t0x7d2: 0x0008, 0x7d3: 0x0008, 0x7d4: 0x0008, 0x7d5: 0x0008, 0x7d6: 0x0040, 0x7d7: 0x0040,\n\t0x7d8: 0x0040, 0x7d9: 0x0008, 0x7da: 0x0008, 0x7db: 0x0040, 0x7dc: 0x0008, 0x7dd: 0x0040,\n\t0x7de: 0x0008, 0x7df: 0x0008, 0x7e0: 0x0040, 0x7e1: 0x0040, 0x7e2: 0x0040, 0x7e3: 0x0008,\n\t0x7e4: 0x0008, 0x7e5: 0x0040, 0x7e6: 0x0040, 0x7e7: 0x0040, 0x7e8: 0x0008, 0x7e9: 0x0008,\n\t0x7ea: 0x0008, 0x7eb: 0x0040, 0x7ec: 0x0040, 0x7ed: 0x0040, 0x7ee: 0x0008, 0x7ef: 0x0008,\n\t0x7f0: 0x0008, 0x7f1: 0x0008, 0x7f2: 0x0008, 0x7f3: 0x0008, 0x7f4: 0x0008, 0x7f5: 0x0008,\n\t0x7f6: 0x0008, 0x7f7: 0x0008, 0x7f8: 0x0008, 0x7f9: 0x0008, 0x7fa: 0x0040, 0x7fb: 0x0040,\n\t0x7fc: 0x0040, 0x7fd: 0x0040, 0x7fe: 0x3008, 0x7ff: 0x3008,\n\t// Block 0x20, offset 0x800\n\t0x800: 0x3308, 0x801: 0x3008, 0x802: 0x3008, 0x803: 0x3008, 0x804: 0x3008, 0x805: 0x0040,\n\t0x806: 0x3308, 0x807: 0x3308, 0x808: 0x3308, 0x809: 0x0040, 0x80a: 0x3308, 0x80b: 0x3308,\n\t0x80c: 0x3308, 0x80d: 0x3b08, 0x80e: 0x0040, 0x80f: 0x0040, 0x810: 0x0040, 0x811: 0x0040,\n\t0x812: 0x0040, 0x813: 0x0040, 0x814: 0x0040, 0x815: 0x3308, 0x816: 0x3308, 0x817: 0x0040,\n\t0x818: 0x0008, 0x819: 0x0008, 0x81a: 0x0008, 0x81b: 0x0040, 0x81c: 0x0040, 0x81d: 0x0040,\n\t0x81e: 0x0040, 0x81f: 0x0040, 0x820: 0x0008, 0x821: 0x0008, 0x822: 0x3308, 0x823: 0x3308,\n\t0x824: 0x0040, 0x825: 0x0040, 0x826: 0x0008, 0x827: 0x0008, 0x828: 0x0008, 0x829: 0x0008,\n\t0x82a: 0x0008, 0x82b: 0x0008, 0x82c: 0x0008, 0x82d: 0x0008, 0x82e: 0x0008, 0x82f: 0x0008,\n\t0x830: 0x0040, 0x831: 0x0040, 0x832: 0x0040, 0x833: 0x0040, 0x834: 0x0040, 0x835: 0x0040,\n\t0x836: 0x0040, 0x837: 0x0040, 0x838: 0x0018, 0x839: 0x0018, 0x83a: 0x0018, 0x83b: 0x0018,\n\t0x83c: 0x0018, 0x83d: 0x0018, 0x83e: 0x0018, 0x83f: 0x0018,\n\t// Block 0x21, offset 0x840\n\t0x840: 0x0008, 0x841: 0x3308, 0x842: 0x3008, 0x843: 0x3008, 0x844: 0x0018, 0x845: 0x0008,\n\t0x846: 0x0008, 0x847: 0x0008, 0x848: 0x0008, 0x849: 0x0008, 0x84a: 0x0008, 0x84b: 0x0008,\n\t0x84c: 0x0008, 0x84d: 0x0040, 0x84e: 0x0008, 0x84f: 0x0008, 0x850: 0x0008, 0x851: 0x0040,\n\t0x852: 0x0008, 0x853: 0x0008, 0x854: 0x0008, 0x855: 0x0008, 0x856: 0x0008, 0x857: 0x0008,\n\t0x858: 0x0008, 0x859: 0x0008, 0x85a: 0x0008, 0x85b: 0x0008, 0x85c: 0x0008, 0x85d: 0x0008,\n\t0x85e: 0x0008, 0x85f: 0x0008, 0x860: 0x0008, 0x861: 0x0008, 0x862: 0x0008, 0x863: 0x0008,\n\t0x864: 0x0008, 0x865: 0x0008, 0x866: 0x0008, 0x867: 0x0008, 0x868: 0x0008, 0x869: 0x0040,\n\t0x86a: 0x0008, 0x86b: 0x0008, 0x86c: 0x0008, 0x86d: 0x0008, 0x86e: 0x0008, 0x86f: 0x0008,\n\t0x870: 0x0008, 0x871: 0x0008, 0x872: 0x0008, 0x873: 0x0008, 0x874: 0x0040, 0x875: 0x0008,\n\t0x876: 0x0008, 0x877: 0x0008, 0x878: 0x0008, 0x879: 0x0008, 0x87a: 0x0040, 0x87b: 0x0040,\n\t0x87c: 0x3308, 0x87d: 0x0008, 0x87e: 0x3008, 0x87f: 0x3308,\n\t// Block 0x22, offset 0x880\n\t0x880: 0x3008, 0x881: 0x3008, 0x882: 0x3008, 0x883: 0x3008, 0x884: 0x3008, 0x885: 0x0040,\n\t0x886: 0x3308, 0x887: 0x3008, 0x888: 0x3008, 0x889: 0x0040, 0x88a: 0x3008, 0x88b: 0x3008,\n\t0x88c: 0x3308, 0x88d: 0x3b08, 0x88e: 0x0040, 0x88f: 0x0040, 0x890: 0x0040, 0x891: 0x0040,\n\t0x892: 0x0040, 0x893: 0x0040, 0x894: 0x0040, 0x895: 0x3008, 0x896: 0x3008, 0x897: 0x0040,\n\t0x898: 0x0040, 0x899: 0x0040, 0x89a: 0x0040, 0x89b: 0x0040, 0x89c: 0x0040, 0x89d: 0x0040,\n\t0x89e: 0x0008, 0x89f: 0x0040, 0x8a0: 0x0008, 0x8a1: 0x0008, 0x8a2: 0x3308, 0x8a3: 0x3308,\n\t0x8a4: 0x0040, 0x8a5: 0x0040, 0x8a6: 0x0008, 0x8a7: 0x0008, 0x8a8: 0x0008, 0x8a9: 0x0008,\n\t0x8aa: 0x0008, 0x8ab: 0x0008, 0x8ac: 0x0008, 0x8ad: 0x0008, 0x8ae: 0x0008, 0x8af: 0x0008,\n\t0x8b0: 0x0040, 0x8b1: 0x0008, 0x8b2: 0x0008, 0x8b3: 0x0040, 0x8b4: 0x0040, 0x8b5: 0x0040,\n\t0x8b6: 0x0040, 0x8b7: 0x0040, 0x8b8: 0x0040, 0x8b9: 0x0040, 0x8ba: 0x0040, 0x8bb: 0x0040,\n\t0x8bc: 0x0040, 0x8bd: 0x0040, 0x8be: 0x0040, 0x8bf: 0x0040,\n\t// Block 0x23, offset 0x8c0\n\t0x8c0: 0x3008, 0x8c1: 0x3308, 0x8c2: 0x3308, 0x8c3: 0x3308, 0x8c4: 0x3308, 0x8c5: 0x0040,\n\t0x8c6: 0x3008, 0x8c7: 0x3008, 0x8c8: 0x3008, 0x8c9: 0x0040, 0x8ca: 0x3008, 0x8cb: 0x3008,\n\t0x8cc: 0x3008, 0x8cd: 0x3b08, 0x8ce: 0x0008, 0x8cf: 0x0018, 0x8d0: 0x0040, 0x8d1: 0x0040,\n\t0x8d2: 0x0040, 0x8d3: 0x0040, 0x8d4: 0x0008, 0x8d5: 0x0008, 0x8d6: 0x0008, 0x8d7: 0x3008,\n\t0x8d8: 0x0018, 0x8d9: 0x0018, 0x8da: 0x0018, 0x8db: 0x0018, 0x8dc: 0x0018, 0x8dd: 0x0018,\n\t0x8de: 0x0018, 0x8df: 0x0008, 0x8e0: 0x0008, 0x8e1: 0x0008, 0x8e2: 0x3308, 0x8e3: 0x3308,\n\t0x8e4: 0x0040, 0x8e5: 0x0040, 0x8e6: 0x0008, 0x8e7: 0x0008, 0x8e8: 0x0008, 0x8e9: 0x0008,\n\t0x8ea: 0x0008, 0x8eb: 0x0008, 0x8ec: 0x0008, 0x8ed: 0x0008, 0x8ee: 0x0008, 0x8ef: 0x0008,\n\t0x8f0: 0x0018, 0x8f1: 0x0018, 0x8f2: 0x0018, 0x8f3: 0x0018, 0x8f4: 0x0018, 0x8f5: 0x0018,\n\t0x8f6: 0x0018, 0x8f7: 0x0018, 0x8f8: 0x0018, 0x8f9: 0x0018, 0x8fa: 0x0008, 0x8fb: 0x0008,\n\t0x8fc: 0x0008, 0x8fd: 0x0008, 0x8fe: 0x0008, 0x8ff: 0x0008,\n\t// Block 0x24, offset 0x900\n\t0x900: 0x0040, 0x901: 0x0008, 0x902: 0x0008, 0x903: 0x0040, 0x904: 0x0008, 0x905: 0x0040,\n\t0x906: 0x0040, 0x907: 0x0008, 0x908: 0x0008, 0x909: 0x0040, 0x90a: 0x0008, 0x90b: 0x0040,\n\t0x90c: 0x0040, 0x90d: 0x0008, 0x90e: 0x0040, 0x90f: 0x0040, 0x910: 0x0040, 0x911: 0x0040,\n\t0x912: 0x0040, 0x913: 0x0040, 0x914: 0x0008, 0x915: 0x0008, 0x916: 0x0008, 0x917: 0x0008,\n\t0x918: 0x0040, 0x919: 0x0008, 0x91a: 0x0008, 0x91b: 0x0008, 0x91c: 0x0008, 0x91d: 0x0008,\n\t0x91e: 0x0008, 0x91f: 0x0008, 0x920: 0x0040, 0x921: 0x0008, 0x922: 0x0008, 0x923: 0x0008,\n\t0x924: 0x0040, 0x925: 0x0008, 0x926: 0x0040, 0x927: 0x0008, 0x928: 0x0040, 0x929: 0x0040,\n\t0x92a: 0x0008, 0x92b: 0x0008, 0x92c: 0x0040, 0x92d: 0x0008, 0x92e: 0x0008, 0x92f: 0x0008,\n\t0x930: 0x0008, 0x931: 0x3308, 0x932: 0x0008, 0x933: 0x0929, 0x934: 0x3308, 0x935: 0x3308,\n\t0x936: 0x3308, 0x937: 0x3308, 0x938: 0x3308, 0x939: 0x3308, 0x93a: 0x0040, 0x93b: 0x3308,\n\t0x93c: 0x3308, 0x93d: 0x0008, 0x93e: 0x0040, 0x93f: 0x0040,\n\t// Block 0x25, offset 0x940\n\t0x940: 0x0008, 0x941: 0x0008, 0x942: 0x0008, 0x943: 0x09d1, 0x944: 0x0008, 0x945: 0x0008,\n\t0x946: 0x0008, 0x947: 0x0008, 0x948: 0x0040, 0x949: 0x0008, 0x94a: 0x0008, 0x94b: 0x0008,\n\t0x94c: 0x0008, 0x94d: 0x0a09, 0x94e: 0x0008, 0x94f: 0x0008, 0x950: 0x0008, 0x951: 0x0008,\n\t0x952: 0x0a41, 0x953: 0x0008, 0x954: 0x0008, 0x955: 0x0008, 0x956: 0x0008, 0x957: 0x0a79,\n\t0x958: 0x0008, 0x959: 0x0008, 0x95a: 0x0008, 0x95b: 0x0008, 0x95c: 0x0ab1, 0x95d: 0x0008,\n\t0x95e: 0x0008, 0x95f: 0x0008, 0x960: 0x0008, 0x961: 0x0008, 0x962: 0x0008, 0x963: 0x0008,\n\t0x964: 0x0008, 0x965: 0x0008, 0x966: 0x0008, 0x967: 0x0008, 0x968: 0x0008, 0x969: 0x0ae9,\n\t0x96a: 0x0008, 0x96b: 0x0008, 0x96c: 0x0008, 0x96d: 0x0040, 0x96e: 0x0040, 0x96f: 0x0040,\n\t0x970: 0x0040, 0x971: 0x3308, 0x972: 0x3308, 0x973: 0x0b21, 0x974: 0x3308, 0x975: 0x0b59,\n\t0x976: 0x0b91, 0x977: 0x0bc9, 0x978: 0x0c19, 0x979: 0x0c51, 0x97a: 0x3308, 0x97b: 0x3308,\n\t0x97c: 0x3308, 0x97d: 0x3308, 0x97e: 0x3308, 0x97f: 0x3008,\n\t// Block 0x26, offset 0x980\n\t0x980: 0x3308, 0x981: 0x0ca1, 0x982: 0x3308, 0x983: 0x3308, 0x984: 0x3b08, 0x985: 0x0018,\n\t0x986: 0x3308, 0x987: 0x3308, 0x988: 0x0008, 0x989: 0x0008, 0x98a: 0x0008, 0x98b: 0x0008,\n\t0x98c: 0x0008, 0x98d: 0x3308, 0x98e: 0x3308, 0x98f: 0x3308, 0x990: 0x3308, 0x991: 0x3308,\n\t0x992: 0x3308, 0x993: 0x0cd9, 0x994: 0x3308, 0x995: 0x3308, 0x996: 0x3308, 0x997: 0x3308,\n\t0x998: 0x0040, 0x999: 0x3308, 0x99a: 0x3308, 0x99b: 0x3308, 0x99c: 0x3308, 0x99d: 0x0d11,\n\t0x99e: 0x3308, 0x99f: 0x3308, 0x9a0: 0x3308, 0x9a1: 0x3308, 0x9a2: 0x0d49, 0x9a3: 0x3308,\n\t0x9a4: 0x3308, 0x9a5: 0x3308, 0x9a6: 0x3308, 0x9a7: 0x0d81, 0x9a8: 0x3308, 0x9a9: 0x3308,\n\t0x9aa: 0x3308, 0x9ab: 0x3308, 0x9ac: 0x0db9, 0x9ad: 0x3308, 0x9ae: 0x3308, 0x9af: 0x3308,\n\t0x9b0: 0x3308, 0x9b1: 0x3308, 0x9b2: 0x3308, 0x9b3: 0x3308, 0x9b4: 0x3308, 0x9b5: 0x3308,\n\t0x9b6: 0x3308, 0x9b7: 0x3308, 0x9b8: 0x3308, 0x9b9: 0x0df1, 0x9ba: 0x3308, 0x9bb: 0x3308,\n\t0x9bc: 0x3308, 0x9bd: 0x0040, 0x9be: 0x0018, 0x9bf: 0x0018,\n\t// Block 0x27, offset 0x9c0\n\t0x9c0: 0x0008, 0x9c1: 0x0008, 0x9c2: 0x0008, 0x9c3: 0x0008, 0x9c4: 0x0008, 0x9c5: 0x0008,\n\t0x9c6: 0x0008, 0x9c7: 0x0008, 0x9c8: 0x0008, 0x9c9: 0x0008, 0x9ca: 0x0008, 0x9cb: 0x0008,\n\t0x9cc: 0x0008, 0x9cd: 0x0008, 0x9ce: 0x0008, 0x9cf: 0x0008, 0x9d0: 0x0008, 0x9d1: 0x0008,\n\t0x9d2: 0x0008, 0x9d3: 0x0008, 0x9d4: 0x0008, 0x9d5: 0x0008, 0x9d6: 0x0008, 0x9d7: 0x0008,\n\t0x9d8: 0x0008, 0x9d9: 0x0008, 0x9da: 0x0008, 0x9db: 0x0008, 0x9dc: 0x0008, 0x9dd: 0x0008,\n\t0x9de: 0x0008, 0x9df: 0x0008, 0x9e0: 0x0008, 0x9e1: 0x0008, 0x9e2: 0x0008, 0x9e3: 0x0008,\n\t0x9e4: 0x0008, 0x9e5: 0x0008, 0x9e6: 0x0008, 0x9e7: 0x0008, 0x9e8: 0x0008, 0x9e9: 0x0008,\n\t0x9ea: 0x0008, 0x9eb: 0x0008, 0x9ec: 0x0039, 0x9ed: 0x0ed1, 0x9ee: 0x0ee9, 0x9ef: 0x0008,\n\t0x9f0: 0x0ef9, 0x9f1: 0x0f09, 0x9f2: 0x0f19, 0x9f3: 0x0f31, 0x9f4: 0x0249, 0x9f5: 0x0f41,\n\t0x9f6: 0x0259, 0x9f7: 0x0f51, 0x9f8: 0x0359, 0x9f9: 0x0f61, 0x9fa: 0x0f71, 0x9fb: 0x0008,\n\t0x9fc: 0x00d9, 0x9fd: 0x0f81, 0x9fe: 0x0f99, 0x9ff: 0x0269,\n\t// Block 0x28, offset 0xa00\n\t0xa00: 0x0fa9, 0xa01: 0x0fb9, 0xa02: 0x0279, 0xa03: 0x0039, 0xa04: 0x0fc9, 0xa05: 0x0fe1,\n\t0xa06: 0x059d, 0xa07: 0x0ee9, 0xa08: 0x0ef9, 0xa09: 0x0f09, 0xa0a: 0x0ff9, 0xa0b: 0x1011,\n\t0xa0c: 0x1029, 0xa0d: 0x0f31, 0xa0e: 0x0008, 0xa0f: 0x0f51, 0xa10: 0x0f61, 0xa11: 0x1041,\n\t0xa12: 0x00d9, 0xa13: 0x1059, 0xa14: 0x05b5, 0xa15: 0x05b5, 0xa16: 0x0f99, 0xa17: 0x0fa9,\n\t0xa18: 0x0fb9, 0xa19: 0x059d, 0xa1a: 0x1071, 0xa1b: 0x1089, 0xa1c: 0x05cd, 0xa1d: 0x1099,\n\t0xa1e: 0x10b1, 0xa1f: 0x10c9, 0xa20: 0x10e1, 0xa21: 0x10f9, 0xa22: 0x0f41, 0xa23: 0x0269,\n\t0xa24: 0x0fb9, 0xa25: 0x1089, 0xa26: 0x1099, 0xa27: 0x10b1, 0xa28: 0x1111, 0xa29: 0x10e1,\n\t0xa2a: 0x10f9, 0xa2b: 0x0008, 0xa2c: 0x0008, 0xa2d: 0x0008, 0xa2e: 0x0008, 0xa2f: 0x0008,\n\t0xa30: 0x0008, 0xa31: 0x0008, 0xa32: 0x0008, 0xa33: 0x0008, 0xa34: 0x0008, 0xa35: 0x0008,\n\t0xa36: 0x0008, 0xa37: 0x0008, 0xa38: 0x1129, 0xa39: 0x0008, 0xa3a: 0x0008, 0xa3b: 0x0008,\n\t0xa3c: 0x0008, 0xa3d: 0x0008, 0xa3e: 0x0008, 0xa3f: 0x0008,\n\t// Block 0x29, offset 0xa40\n\t0xa40: 0x0008, 0xa41: 0x0008, 0xa42: 0x0008, 0xa43: 0x0008, 0xa44: 0x0008, 0xa45: 0x0008,\n\t0xa46: 0x0008, 0xa47: 0x0008, 0xa48: 0x0008, 0xa49: 0x0008, 0xa4a: 0x0008, 0xa4b: 0x0008,\n\t0xa4c: 0x0008, 0xa4d: 0x0008, 0xa4e: 0x0008, 0xa4f: 0x0008, 0xa50: 0x0008, 0xa51: 0x0008,\n\t0xa52: 0x0008, 0xa53: 0x0008, 0xa54: 0x0008, 0xa55: 0x0008, 0xa56: 0x0008, 0xa57: 0x0008,\n\t0xa58: 0x0008, 0xa59: 0x0008, 0xa5a: 0x0008, 0xa5b: 0x1141, 0xa5c: 0x1159, 0xa5d: 0x1169,\n\t0xa5e: 0x1181, 0xa5f: 0x1029, 0xa60: 0x1199, 0xa61: 0x11a9, 0xa62: 0x11c1, 0xa63: 0x11d9,\n\t0xa64: 0x11f1, 0xa65: 0x1209, 0xa66: 0x1221, 0xa67: 0x05e5, 0xa68: 0x1239, 0xa69: 0x1251,\n\t0xa6a: 0xe17d, 0xa6b: 0x1269, 0xa6c: 0x1281, 0xa6d: 0x1299, 0xa6e: 0x12b1, 0xa6f: 0x12c9,\n\t0xa70: 0x12e1, 0xa71: 0x12f9, 0xa72: 0x1311, 0xa73: 0x1329, 0xa74: 0x1341, 0xa75: 0x1359,\n\t0xa76: 0x1371, 0xa77: 0x1389, 0xa78: 0x05fd, 0xa79: 0x13a1, 0xa7a: 0x13b9, 0xa7b: 0x13d1,\n\t0xa7c: 0x13e1, 0xa7d: 0x13f9, 0xa7e: 0x1411, 0xa7f: 0x1429,\n\t// Block 0x2a, offset 0xa80\n\t0xa80: 0xe00d, 0xa81: 0x0008, 0xa82: 0xe00d, 0xa83: 0x0008, 0xa84: 0xe00d, 0xa85: 0x0008,\n\t0xa86: 0xe00d, 0xa87: 0x0008, 0xa88: 0xe00d, 0xa89: 0x0008, 0xa8a: 0xe00d, 0xa8b: 0x0008,\n\t0xa8c: 0xe00d, 0xa8d: 0x0008, 0xa8e: 0xe00d, 0xa8f: 0x0008, 0xa90: 0xe00d, 0xa91: 0x0008,\n\t0xa92: 0xe00d, 0xa93: 0x0008, 0xa94: 0xe00d, 0xa95: 0x0008, 0xa96: 0xe00d, 0xa97: 0x0008,\n\t0xa98: 0xe00d, 0xa99: 0x0008, 0xa9a: 0xe00d, 0xa9b: 0x0008, 0xa9c: 0xe00d, 0xa9d: 0x0008,\n\t0xa9e: 0xe00d, 0xa9f: 0x0008, 0xaa0: 0xe00d, 0xaa1: 0x0008, 0xaa2: 0xe00d, 0xaa3: 0x0008,\n\t0xaa4: 0xe00d, 0xaa5: 0x0008, 0xaa6: 0xe00d, 0xaa7: 0x0008, 0xaa8: 0xe00d, 0xaa9: 0x0008,\n\t0xaaa: 0xe00d, 0xaab: 0x0008, 0xaac: 0xe00d, 0xaad: 0x0008, 0xaae: 0xe00d, 0xaaf: 0x0008,\n\t0xab0: 0xe00d, 0xab1: 0x0008, 0xab2: 0xe00d, 0xab3: 0x0008, 0xab4: 0xe00d, 0xab5: 0x0008,\n\t0xab6: 0xe00d, 0xab7: 0x0008, 0xab8: 0xe00d, 0xab9: 0x0008, 0xaba: 0xe00d, 0xabb: 0x0008,\n\t0xabc: 0xe00d, 0xabd: 0x0008, 0xabe: 0xe00d, 0xabf: 0x0008,\n\t// Block 0x2b, offset 0xac0\n\t0xac0: 0xe00d, 0xac1: 0x0008, 0xac2: 0xe00d, 0xac3: 0x0008, 0xac4: 0xe00d, 0xac5: 0x0008,\n\t0xac6: 0xe00d, 0xac7: 0x0008, 0xac8: 0xe00d, 0xac9: 0x0008, 0xaca: 0xe00d, 0xacb: 0x0008,\n\t0xacc: 0xe00d, 0xacd: 0x0008, 0xace: 0xe00d, 0xacf: 0x0008, 0xad0: 0xe00d, 0xad1: 0x0008,\n\t0xad2: 0xe00d, 0xad3: 0x0008, 0xad4: 0xe00d, 0xad5: 0x0008, 0xad6: 0x0008, 0xad7: 0x0008,\n\t0xad8: 0x0008, 0xad9: 0x0008, 0xada: 0x0615, 0xadb: 0x0635, 0xadc: 0x0008, 0xadd: 0x0008,\n\t0xade: 0x1441, 0xadf: 0x0008, 0xae0: 0xe00d, 0xae1: 0x0008, 0xae2: 0xe00d, 0xae3: 0x0008,\n\t0xae4: 0xe00d, 0xae5: 0x0008, 0xae6: 0xe00d, 0xae7: 0x0008, 0xae8: 0xe00d, 0xae9: 0x0008,\n\t0xaea: 0xe00d, 0xaeb: 0x0008, 0xaec: 0xe00d, 0xaed: 0x0008, 0xaee: 0xe00d, 0xaef: 0x0008,\n\t0xaf0: 0xe00d, 0xaf1: 0x0008, 0xaf2: 0xe00d, 0xaf3: 0x0008, 0xaf4: 0xe00d, 0xaf5: 0x0008,\n\t0xaf6: 0xe00d, 0xaf7: 0x0008, 0xaf8: 0xe00d, 0xaf9: 0x0008, 0xafa: 0xe00d, 0xafb: 0x0008,\n\t0xafc: 0xe00d, 0xafd: 0x0008, 0xafe: 0xe00d, 0xaff: 0x0008,\n\t// Block 0x2c, offset 0xb00\n\t0xb00: 0x0008, 0xb01: 0x0008, 0xb02: 0x0008, 0xb03: 0x0008, 0xb04: 0x0008, 0xb05: 0x0008,\n\t0xb06: 0x0040, 0xb07: 0x0040, 0xb08: 0xe045, 0xb09: 0xe045, 0xb0a: 0xe045, 0xb0b: 0xe045,\n\t0xb0c: 0xe045, 0xb0d: 0xe045, 0xb0e: 0x0040, 0xb0f: 0x0040, 0xb10: 0x0008, 0xb11: 0x0008,\n\t0xb12: 0x0008, 0xb13: 0x0008, 0xb14: 0x0008, 0xb15: 0x0008, 0xb16: 0x0008, 0xb17: 0x0008,\n\t0xb18: 0x0040, 0xb19: 0xe045, 0xb1a: 0x0040, 0xb1b: 0xe045, 0xb1c: 0x0040, 0xb1d: 0xe045,\n\t0xb1e: 0x0040, 0xb1f: 0xe045, 0xb20: 0x0008, 0xb21: 0x0008, 0xb22: 0x0008, 0xb23: 0x0008,\n\t0xb24: 0x0008, 0xb25: 0x0008, 0xb26: 0x0008, 0xb27: 0x0008, 0xb28: 0xe045, 0xb29: 0xe045,\n\t0xb2a: 0xe045, 0xb2b: 0xe045, 0xb2c: 0xe045, 0xb2d: 0xe045, 0xb2e: 0xe045, 0xb2f: 0xe045,\n\t0xb30: 0x0008, 0xb31: 0x1459, 0xb32: 0x0008, 0xb33: 0x1471, 0xb34: 0x0008, 0xb35: 0x1489,\n\t0xb36: 0x0008, 0xb37: 0x14a1, 0xb38: 0x0008, 0xb39: 0x14b9, 0xb3a: 0x0008, 0xb3b: 0x14d1,\n\t0xb3c: 0x0008, 0xb3d: 0x14e9, 0xb3e: 0x0040, 0xb3f: 0x0040,\n\t// Block 0x2d, offset 0xb40\n\t0xb40: 0x1501, 0xb41: 0x1531, 0xb42: 0x1561, 0xb43: 0x1591, 0xb44: 0x15c1, 0xb45: 0x15f1,\n\t0xb46: 0x1621, 0xb47: 0x1651, 0xb48: 0x1501, 0xb49: 0x1531, 0xb4a: 0x1561, 0xb4b: 0x1591,\n\t0xb4c: 0x15c1, 0xb4d: 0x15f1, 0xb4e: 0x1621, 0xb4f: 0x1651, 0xb50: 0x1681, 0xb51: 0x16b1,\n\t0xb52: 0x16e1, 0xb53: 0x1711, 0xb54: 0x1741, 0xb55: 0x1771, 0xb56: 0x17a1, 0xb57: 0x17d1,\n\t0xb58: 0x1681, 0xb59: 0x16b1, 0xb5a: 0x16e1, 0xb5b: 0x1711, 0xb5c: 0x1741, 0xb5d: 0x1771,\n\t0xb5e: 0x17a1, 0xb5f: 0x17d1, 0xb60: 0x1801, 0xb61: 0x1831, 0xb62: 0x1861, 0xb63: 0x1891,\n\t0xb64: 0x18c1, 0xb65: 0x18f1, 0xb66: 0x1921, 0xb67: 0x1951, 0xb68: 0x1801, 0xb69: 0x1831,\n\t0xb6a: 0x1861, 0xb6b: 0x1891, 0xb6c: 0x18c1, 0xb6d: 0x18f1, 0xb6e: 0x1921, 0xb6f: 0x1951,\n\t0xb70: 0x0008, 0xb71: 0x0008, 0xb72: 0x1981, 0xb73: 0x19b1, 0xb74: 0x19d9, 0xb75: 0x0040,\n\t0xb76: 0x0008, 0xb77: 0x1a01, 0xb78: 0xe045, 0xb79: 0xe045, 0xb7a: 0x064d, 0xb7b: 0x1459,\n\t0xb7c: 0x19b1, 0xb7d: 0x0666, 0xb7e: 0x1a31, 0xb7f: 0x0686,\n\t// Block 0x2e, offset 0xb80\n\t0xb80: 0x06a6, 0xb81: 0x1a4a, 0xb82: 0x1a79, 0xb83: 0x1aa9, 0xb84: 0x1ad1, 0xb85: 0x0040,\n\t0xb86: 0x0008, 0xb87: 0x1af9, 0xb88: 0x06c5, 0xb89: 0x1471, 0xb8a: 0x06dd, 0xb8b: 0x1489,\n\t0xb8c: 0x1aa9, 0xb8d: 0x1b2a, 0xb8e: 0x1b5a, 0xb8f: 0x1b8a, 0xb90: 0x0008, 0xb91: 0x0008,\n\t0xb92: 0x0008, 0xb93: 0x1bb9, 0xb94: 0x0040, 0xb95: 0x0040, 0xb96: 0x0008, 0xb97: 0x0008,\n\t0xb98: 0xe045, 0xb99: 0xe045, 0xb9a: 0x06f5, 0xb9b: 0x14a1, 0xb9c: 0x0040, 0xb9d: 0x1bd2,\n\t0xb9e: 0x1c02, 0xb9f: 0x1c32, 0xba0: 0x0008, 0xba1: 0x0008, 0xba2: 0x0008, 0xba3: 0x1c61,\n\t0xba4: 0x0008, 0xba5: 0x0008, 0xba6: 0x0008, 0xba7: 0x0008, 0xba8: 0xe045, 0xba9: 0xe045,\n\t0xbaa: 0x070d, 0xbab: 0x14d1, 0xbac: 0xe04d, 0xbad: 0x1c7a, 0xbae: 0x03d2, 0xbaf: 0x1caa,\n\t0xbb0: 0x0040, 0xbb1: 0x0040, 0xbb2: 0x1cb9, 0xbb3: 0x1ce9, 0xbb4: 0x1d11, 0xbb5: 0x0040,\n\t0xbb6: 0x0008, 0xbb7: 0x1d39, 0xbb8: 0x0725, 0xbb9: 0x14b9, 0xbba: 0x0515, 0xbbb: 0x14e9,\n\t0xbbc: 0x1ce9, 0xbbd: 0x073e, 0xbbe: 0x075e, 0xbbf: 0x0040,\n\t// Block 0x2f, offset 0xbc0\n\t0xbc0: 0x000a, 0xbc1: 0x000a, 0xbc2: 0x000a, 0xbc3: 0x000a, 0xbc4: 0x000a, 0xbc5: 0x000a,\n\t0xbc6: 0x000a, 0xbc7: 0x000a, 0xbc8: 0x000a, 0xbc9: 0x000a, 0xbca: 0x000a, 0xbcb: 0x03c0,\n\t0xbcc: 0x0003, 0xbcd: 0x0003, 0xbce: 0x0340, 0xbcf: 0x0b40, 0xbd0: 0x0018, 0xbd1: 0xe00d,\n\t0xbd2: 0x0018, 0xbd3: 0x0018, 0xbd4: 0x0018, 0xbd5: 0x0018, 0xbd6: 0x0018, 0xbd7: 0x077e,\n\t0xbd8: 0x0018, 0xbd9: 0x0018, 0xbda: 0x0018, 0xbdb: 0x0018, 0xbdc: 0x0018, 0xbdd: 0x0018,\n\t0xbde: 0x0018, 0xbdf: 0x0018, 0xbe0: 0x0018, 0xbe1: 0x0018, 0xbe2: 0x0018, 0xbe3: 0x0018,\n\t0xbe4: 0x0040, 0xbe5: 0x0040, 0xbe6: 0x0040, 0xbe7: 0x0018, 0xbe8: 0x0040, 0xbe9: 0x0040,\n\t0xbea: 0x0340, 0xbeb: 0x0340, 0xbec: 0x0340, 0xbed: 0x0340, 0xbee: 0x0340, 0xbef: 0x000a,\n\t0xbf0: 0x0018, 0xbf1: 0x0018, 0xbf2: 0x0018, 0xbf3: 0x1d69, 0xbf4: 0x1da1, 0xbf5: 0x0018,\n\t0xbf6: 0x1df1, 0xbf7: 0x1e29, 0xbf8: 0x0018, 0xbf9: 0x0018, 0xbfa: 0x0018, 0xbfb: 0x0018,\n\t0xbfc: 0x1e7a, 0xbfd: 0x0018, 0xbfe: 0x079e, 0xbff: 0x0018,\n\t// Block 0x30, offset 0xc00\n\t0xc00: 0x0018, 0xc01: 0x0018, 0xc02: 0x0018, 0xc03: 0x0018, 0xc04: 0x0018, 0xc05: 0x0018,\n\t0xc06: 0x0018, 0xc07: 0x1e92, 0xc08: 0x1eaa, 0xc09: 0x1ec2, 0xc0a: 0x0018, 0xc0b: 0x0018,\n\t0xc0c: 0x0018, 0xc0d: 0x0018, 0xc0e: 0x0018, 0xc0f: 0x0018, 0xc10: 0x0018, 0xc11: 0x0018,\n\t0xc12: 0x0018, 0xc13: 0x0018, 0xc14: 0x0018, 0xc15: 0x0018, 0xc16: 0x0018, 0xc17: 0x1ed9,\n\t0xc18: 0x0018, 0xc19: 0x0018, 0xc1a: 0x0018, 0xc1b: 0x0018, 0xc1c: 0x0018, 0xc1d: 0x0018,\n\t0xc1e: 0x0018, 0xc1f: 0x000a, 0xc20: 0x03c0, 0xc21: 0x0340, 0xc22: 0x0340, 0xc23: 0x0340,\n\t0xc24: 0x03c0, 0xc25: 0x0040, 0xc26: 0x0040, 0xc27: 0x0040, 0xc28: 0x0040, 0xc29: 0x0040,\n\t0xc2a: 0x0340, 0xc2b: 0x0340, 0xc2c: 0x0340, 0xc2d: 0x0340, 0xc2e: 0x0340, 0xc2f: 0x0340,\n\t0xc30: 0x1f41, 0xc31: 0x0f41, 0xc32: 0x0040, 0xc33: 0x0040, 0xc34: 0x1f51, 0xc35: 0x1f61,\n\t0xc36: 0x1f71, 0xc37: 0x1f81, 0xc38: 0x1f91, 0xc39: 0x1fa1, 0xc3a: 0x1fb2, 0xc3b: 0x07bd,\n\t0xc3c: 0x1fc2, 0xc3d: 0x1fd2, 0xc3e: 0x1fe2, 0xc3f: 0x0f71,\n\t// Block 0x31, offset 0xc40\n\t0xc40: 0x1f41, 0xc41: 0x00c9, 0xc42: 0x0069, 0xc43: 0x0079, 0xc44: 0x1f51, 0xc45: 0x1f61,\n\t0xc46: 0x1f71, 0xc47: 0x1f81, 0xc48: 0x1f91, 0xc49: 0x1fa1, 0xc4a: 0x1fb2, 0xc4b: 0x07d5,\n\t0xc4c: 0x1fc2, 0xc4d: 0x1fd2, 0xc4e: 0x1fe2, 0xc4f: 0x0040, 0xc50: 0x0039, 0xc51: 0x0f09,\n\t0xc52: 0x00d9, 0xc53: 0x0369, 0xc54: 0x0ff9, 0xc55: 0x0249, 0xc56: 0x0f51, 0xc57: 0x0359,\n\t0xc58: 0x0f61, 0xc59: 0x0f71, 0xc5a: 0x0f99, 0xc5b: 0x01d9, 0xc5c: 0x0fa9, 0xc5d: 0x0040,\n\t0xc5e: 0x0040, 0xc5f: 0x0040, 0xc60: 0x0018, 0xc61: 0x0018, 0xc62: 0x0018, 0xc63: 0x0018,\n\t0xc64: 0x0018, 0xc65: 0x0018, 0xc66: 0x0018, 0xc67: 0x0018, 0xc68: 0x1ff1, 0xc69: 0x0018,\n\t0xc6a: 0x0018, 0xc6b: 0x0018, 0xc6c: 0x0018, 0xc6d: 0x0018, 0xc6e: 0x0018, 0xc6f: 0x0018,\n\t0xc70: 0x0018, 0xc71: 0x0018, 0xc72: 0x0018, 0xc73: 0x0018, 0xc74: 0x0018, 0xc75: 0x0018,\n\t0xc76: 0x0018, 0xc77: 0x0018, 0xc78: 0x0018, 0xc79: 0x0018, 0xc7a: 0x0018, 0xc7b: 0x0018,\n\t0xc7c: 0x0018, 0xc7d: 0x0018, 0xc7e: 0x0018, 0xc7f: 0x0018,\n\t// Block 0x32, offset 0xc80\n\t0xc80: 0x07ee, 0xc81: 0x080e, 0xc82: 0x1159, 0xc83: 0x082d, 0xc84: 0x0018, 0xc85: 0x084e,\n\t0xc86: 0x086e, 0xc87: 0x1011, 0xc88: 0x0018, 0xc89: 0x088d, 0xc8a: 0x0f31, 0xc8b: 0x0249,\n\t0xc8c: 0x0249, 0xc8d: 0x0249, 0xc8e: 0x0249, 0xc8f: 0x2009, 0xc90: 0x0f41, 0xc91: 0x0f41,\n\t0xc92: 0x0359, 0xc93: 0x0359, 0xc94: 0x0018, 0xc95: 0x0f71, 0xc96: 0x2021, 0xc97: 0x0018,\n\t0xc98: 0x0018, 0xc99: 0x0f99, 0xc9a: 0x2039, 0xc9b: 0x0269, 0xc9c: 0x0269, 0xc9d: 0x0269,\n\t0xc9e: 0x0018, 0xc9f: 0x0018, 0xca0: 0x2049, 0xca1: 0x08ad, 0xca2: 0x2061, 0xca3: 0x0018,\n\t0xca4: 0x13d1, 0xca5: 0x0018, 0xca6: 0x2079, 0xca7: 0x0018, 0xca8: 0x13d1, 0xca9: 0x0018,\n\t0xcaa: 0x0f51, 0xcab: 0x2091, 0xcac: 0x0ee9, 0xcad: 0x1159, 0xcae: 0x0018, 0xcaf: 0x0f09,\n\t0xcb0: 0x0f09, 0xcb1: 0x1199, 0xcb2: 0x0040, 0xcb3: 0x0f61, 0xcb4: 0x00d9, 0xcb5: 0x20a9,\n\t0xcb6: 0x20c1, 0xcb7: 0x20d9, 0xcb8: 0x20f1, 0xcb9: 0x0f41, 0xcba: 0x0018, 0xcbb: 0x08cd,\n\t0xcbc: 0x2109, 0xcbd: 0x10b1, 0xcbe: 0x10b1, 0xcbf: 0x2109,\n\t// Block 0x33, offset 0xcc0\n\t0xcc0: 0x08ed, 0xcc1: 0x0018, 0xcc2: 0x0018, 0xcc3: 0x0018, 0xcc4: 0x0018, 0xcc5: 0x0ef9,\n\t0xcc6: 0x0ef9, 0xcc7: 0x0f09, 0xcc8: 0x0f41, 0xcc9: 0x0259, 0xcca: 0x0018, 0xccb: 0x0018,\n\t0xccc: 0x0018, 0xccd: 0x0018, 0xcce: 0x0008, 0xccf: 0x0018, 0xcd0: 0x2121, 0xcd1: 0x2151,\n\t0xcd2: 0x2181, 0xcd3: 0x21b9, 0xcd4: 0x21e9, 0xcd5: 0x2219, 0xcd6: 0x2249, 0xcd7: 0x2279,\n\t0xcd8: 0x22a9, 0xcd9: 0x22d9, 0xcda: 0x2309, 0xcdb: 0x2339, 0xcdc: 0x2369, 0xcdd: 0x2399,\n\t0xcde: 0x23c9, 0xcdf: 0x23f9, 0xce0: 0x0f41, 0xce1: 0x2421, 0xce2: 0x0905, 0xce3: 0x2439,\n\t0xce4: 0x1089, 0xce5: 0x2451, 0xce6: 0x0925, 0xce7: 0x2469, 0xce8: 0x2491, 0xce9: 0x0369,\n\t0xcea: 0x24a9, 0xceb: 0x0945, 0xcec: 0x0359, 0xced: 0x1159, 0xcee: 0x0ef9, 0xcef: 0x0f61,\n\t0xcf0: 0x0f41, 0xcf1: 0x2421, 0xcf2: 0x0965, 0xcf3: 0x2439, 0xcf4: 0x1089, 0xcf5: 0x2451,\n\t0xcf6: 0x0985, 0xcf7: 0x2469, 0xcf8: 0x2491, 0xcf9: 0x0369, 0xcfa: 0x24a9, 0xcfb: 0x09a5,\n\t0xcfc: 0x0359, 0xcfd: 0x1159, 0xcfe: 0x0ef9, 0xcff: 0x0f61,\n\t// Block 0x34, offset 0xd00\n\t0xd00: 0x0018, 0xd01: 0x0018, 0xd02: 0x0018, 0xd03: 0x0018, 0xd04: 0x0018, 0xd05: 0x0018,\n\t0xd06: 0x0018, 0xd07: 0x0018, 0xd08: 0x0018, 0xd09: 0x0018, 0xd0a: 0x0018, 0xd0b: 0x0040,\n\t0xd0c: 0x0040, 0xd0d: 0x0040, 0xd0e: 0x0040, 0xd0f: 0x0040, 0xd10: 0x0040, 0xd11: 0x0040,\n\t0xd12: 0x0040, 0xd13: 0x0040, 0xd14: 0x0040, 0xd15: 0x0040, 0xd16: 0x0040, 0xd17: 0x0040,\n\t0xd18: 0x0040, 0xd19: 0x0040, 0xd1a: 0x0040, 0xd1b: 0x0040, 0xd1c: 0x0040, 0xd1d: 0x0040,\n\t0xd1e: 0x0040, 0xd1f: 0x0040, 0xd20: 0x00c9, 0xd21: 0x0069, 0xd22: 0x0079, 0xd23: 0x1f51,\n\t0xd24: 0x1f61, 0xd25: 0x1f71, 0xd26: 0x1f81, 0xd27: 0x1f91, 0xd28: 0x1fa1, 0xd29: 0x2601,\n\t0xd2a: 0x2619, 0xd2b: 0x2631, 0xd2c: 0x2649, 0xd2d: 0x2661, 0xd2e: 0x2679, 0xd2f: 0x2691,\n\t0xd30: 0x26a9, 0xd31: 0x26c1, 0xd32: 0x26d9, 0xd33: 0x26f1, 0xd34: 0x0a06, 0xd35: 0x0a26,\n\t0xd36: 0x0a46, 0xd37: 0x0a66, 0xd38: 0x0a86, 0xd39: 0x0aa6, 0xd3a: 0x0ac6, 0xd3b: 0x0ae6,\n\t0xd3c: 0x0b06, 0xd3d: 0x270a, 0xd3e: 0x2732, 0xd3f: 0x275a,\n\t// Block 0x35, offset 0xd40\n\t0xd40: 0x2782, 0xd41: 0x27aa, 0xd42: 0x27d2, 0xd43: 0x27fa, 0xd44: 0x2822, 0xd45: 0x284a,\n\t0xd46: 0x2872, 0xd47: 0x289a, 0xd48: 0x0040, 0xd49: 0x0040, 0xd4a: 0x0040, 0xd4b: 0x0040,\n\t0xd4c: 0x0040, 0xd4d: 0x0040, 0xd4e: 0x0040, 0xd4f: 0x0040, 0xd50: 0x0040, 0xd51: 0x0040,\n\t0xd52: 0x0040, 0xd53: 0x0040, 0xd54: 0x0040, 0xd55: 0x0040, 0xd56: 0x0040, 0xd57: 0x0040,\n\t0xd58: 0x0040, 0xd59: 0x0040, 0xd5a: 0x0040, 0xd5b: 0x0040, 0xd5c: 0x0b26, 0xd5d: 0x0b46,\n\t0xd5e: 0x0b66, 0xd5f: 0x0b86, 0xd60: 0x0ba6, 0xd61: 0x0bc6, 0xd62: 0x0be6, 0xd63: 0x0c06,\n\t0xd64: 0x0c26, 0xd65: 0x0c46, 0xd66: 0x0c66, 0xd67: 0x0c86, 0xd68: 0x0ca6, 0xd69: 0x0cc6,\n\t0xd6a: 0x0ce6, 0xd6b: 0x0d06, 0xd6c: 0x0d26, 0xd6d: 0x0d46, 0xd6e: 0x0d66, 0xd6f: 0x0d86,\n\t0xd70: 0x0da6, 0xd71: 0x0dc6, 0xd72: 0x0de6, 0xd73: 0x0e06, 0xd74: 0x0e26, 0xd75: 0x0e46,\n\t0xd76: 0x0039, 0xd77: 0x0ee9, 0xd78: 0x1159, 0xd79: 0x0ef9, 0xd7a: 0x0f09, 0xd7b: 0x1199,\n\t0xd7c: 0x0f31, 0xd7d: 0x0249, 0xd7e: 0x0f41, 0xd7f: 0x0259,\n\t// Block 0x36, offset 0xd80\n\t0xd80: 0x0f51, 0xd81: 0x0359, 0xd82: 0x0f61, 0xd83: 0x0f71, 0xd84: 0x00d9, 0xd85: 0x0f99,\n\t0xd86: 0x2039, 0xd87: 0x0269, 0xd88: 0x01d9, 0xd89: 0x0fa9, 0xd8a: 0x0fb9, 0xd8b: 0x1089,\n\t0xd8c: 0x0279, 0xd8d: 0x0369, 0xd8e: 0x0289, 0xd8f: 0x13d1, 0xd90: 0x0039, 0xd91: 0x0ee9,\n\t0xd92: 0x1159, 0xd93: 0x0ef9, 0xd94: 0x0f09, 0xd95: 0x1199, 0xd96: 0x0f31, 0xd97: 0x0249,\n\t0xd98: 0x0f41, 0xd99: 0x0259, 0xd9a: 0x0f51, 0xd9b: 0x0359, 0xd9c: 0x0f61, 0xd9d: 0x0f71,\n\t0xd9e: 0x00d9, 0xd9f: 0x0f99, 0xda0: 0x2039, 0xda1: 0x0269, 0xda2: 0x01d9, 0xda3: 0x0fa9,\n\t0xda4: 0x0fb9, 0xda5: 0x1089, 0xda6: 0x0279, 0xda7: 0x0369, 0xda8: 0x0289, 0xda9: 0x13d1,\n\t0xdaa: 0x1f41, 0xdab: 0x0018, 0xdac: 0x0018, 0xdad: 0x0018, 0xdae: 0x0018, 0xdaf: 0x0018,\n\t0xdb0: 0x0018, 0xdb1: 0x0018, 0xdb2: 0x0018, 0xdb3: 0x0018, 0xdb4: 0x0018, 0xdb5: 0x0018,\n\t0xdb6: 0x0018, 0xdb7: 0x0018, 0xdb8: 0x0018, 0xdb9: 0x0018, 0xdba: 0x0018, 0xdbb: 0x0018,\n\t0xdbc: 0x0018, 0xdbd: 0x0018, 0xdbe: 0x0018, 0xdbf: 0x0018,\n\t// Block 0x37, offset 0xdc0\n\t0xdc0: 0x0008, 0xdc1: 0x0008, 0xdc2: 0x0008, 0xdc3: 0x0008, 0xdc4: 0x0008, 0xdc5: 0x0008,\n\t0xdc6: 0x0008, 0xdc7: 0x0008, 0xdc8: 0x0008, 0xdc9: 0x0008, 0xdca: 0x0008, 0xdcb: 0x0008,\n\t0xdcc: 0x0008, 0xdcd: 0x0008, 0xdce: 0x0008, 0xdcf: 0x0008, 0xdd0: 0x0008, 0xdd1: 0x0008,\n\t0xdd2: 0x0008, 0xdd3: 0x0008, 0xdd4: 0x0008, 0xdd5: 0x0008, 0xdd6: 0x0008, 0xdd7: 0x0008,\n\t0xdd8: 0x0008, 0xdd9: 0x0008, 0xdda: 0x0008, 0xddb: 0x0008, 0xddc: 0x0008, 0xddd: 0x0008,\n\t0xdde: 0x0008, 0xddf: 0x0040, 0xde0: 0xe00d, 0xde1: 0x0008, 0xde2: 0x2971, 0xde3: 0x0ebd,\n\t0xde4: 0x2989, 0xde5: 0x0008, 0xde6: 0x0008, 0xde7: 0xe07d, 0xde8: 0x0008, 0xde9: 0xe01d,\n\t0xdea: 0x0008, 0xdeb: 0xe03d, 0xdec: 0x0008, 0xded: 0x0fe1, 0xdee: 0x1281, 0xdef: 0x0fc9,\n\t0xdf0: 0x1141, 0xdf1: 0x0008, 0xdf2: 0xe00d, 0xdf3: 0x0008, 0xdf4: 0x0008, 0xdf5: 0xe01d,\n\t0xdf6: 0x0008, 0xdf7: 0x0008, 0xdf8: 0x0008, 0xdf9: 0x0008, 0xdfa: 0x0008, 0xdfb: 0x0008,\n\t0xdfc: 0x0259, 0xdfd: 0x1089, 0xdfe: 0x29a1, 0xdff: 0x29b9,\n\t// Block 0x38, offset 0xe00\n\t0xe00: 0xe00d, 0xe01: 0x0008, 0xe02: 0xe00d, 0xe03: 0x0008, 0xe04: 0xe00d, 0xe05: 0x0008,\n\t0xe06: 0xe00d, 0xe07: 0x0008, 0xe08: 0xe00d, 0xe09: 0x0008, 0xe0a: 0xe00d, 0xe0b: 0x0008,\n\t0xe0c: 0xe00d, 0xe0d: 0x0008, 0xe0e: 0xe00d, 0xe0f: 0x0008, 0xe10: 0xe00d, 0xe11: 0x0008,\n\t0xe12: 0xe00d, 0xe13: 0x0008, 0xe14: 0xe00d, 0xe15: 0x0008, 0xe16: 0xe00d, 0xe17: 0x0008,\n\t0xe18: 0xe00d, 0xe19: 0x0008, 0xe1a: 0xe00d, 0xe1b: 0x0008, 0xe1c: 0xe00d, 0xe1d: 0x0008,\n\t0xe1e: 0xe00d, 0xe1f: 0x0008, 0xe20: 0xe00d, 0xe21: 0x0008, 0xe22: 0xe00d, 0xe23: 0x0008,\n\t0xe24: 0x0008, 0xe25: 0x0018, 0xe26: 0x0018, 0xe27: 0x0018, 0xe28: 0x0018, 0xe29: 0x0018,\n\t0xe2a: 0x0018, 0xe2b: 0xe03d, 0xe2c: 0x0008, 0xe2d: 0xe01d, 0xe2e: 0x0008, 0xe2f: 0x3308,\n\t0xe30: 0x3308, 0xe31: 0x3308, 0xe32: 0xe00d, 0xe33: 0x0008, 0xe34: 0x0040, 0xe35: 0x0040,\n\t0xe36: 0x0040, 0xe37: 0x0040, 0xe38: 0x0040, 0xe39: 0x0018, 0xe3a: 0x0018, 0xe3b: 0x0018,\n\t0xe3c: 0x0018, 0xe3d: 0x0018, 0xe3e: 0x0018, 0xe3f: 0x0018,\n\t// Block 0x39, offset 0xe40\n\t0xe40: 0x26fd, 0xe41: 0x271d, 0xe42: 0x273d, 0xe43: 0x275d, 0xe44: 0x277d, 0xe45: 0x279d,\n\t0xe46: 0x27bd, 0xe47: 0x27dd, 0xe48: 0x27fd, 0xe49: 0x281d, 0xe4a: 0x283d, 0xe4b: 0x285d,\n\t0xe4c: 0x287d, 0xe4d: 0x289d, 0xe4e: 0x28bd, 0xe4f: 0x28dd, 0xe50: 0x28fd, 0xe51: 0x291d,\n\t0xe52: 0x293d, 0xe53: 0x295d, 0xe54: 0x297d, 0xe55: 0x299d, 0xe56: 0x0040, 0xe57: 0x0040,\n\t0xe58: 0x0040, 0xe59: 0x0040, 0xe5a: 0x0040, 0xe5b: 0x0040, 0xe5c: 0x0040, 0xe5d: 0x0040,\n\t0xe5e: 0x0040, 0xe5f: 0x0040, 0xe60: 0x0040, 0xe61: 0x0040, 0xe62: 0x0040, 0xe63: 0x0040,\n\t0xe64: 0x0040, 0xe65: 0x0040, 0xe66: 0x0040, 0xe67: 0x0040, 0xe68: 0x0040, 0xe69: 0x0040,\n\t0xe6a: 0x0040, 0xe6b: 0x0040, 0xe6c: 0x0040, 0xe6d: 0x0040, 0xe6e: 0x0040, 0xe6f: 0x0040,\n\t0xe70: 0x0040, 0xe71: 0x0040, 0xe72: 0x0040, 0xe73: 0x0040, 0xe74: 0x0040, 0xe75: 0x0040,\n\t0xe76: 0x0040, 0xe77: 0x0040, 0xe78: 0x0040, 0xe79: 0x0040, 0xe7a: 0x0040, 0xe7b: 0x0040,\n\t0xe7c: 0x0040, 0xe7d: 0x0040, 0xe7e: 0x0040, 0xe7f: 0x0040,\n\t// Block 0x3a, offset 0xe80\n\t0xe80: 0x000a, 0xe81: 0x0018, 0xe82: 0x29d1, 0xe83: 0x0018, 0xe84: 0x0018, 0xe85: 0x0008,\n\t0xe86: 0x0008, 0xe87: 0x0008, 0xe88: 0x0018, 0xe89: 0x0018, 0xe8a: 0x0018, 0xe8b: 0x0018,\n\t0xe8c: 0x0018, 0xe8d: 0x0018, 0xe8e: 0x0018, 0xe8f: 0x0018, 0xe90: 0x0018, 0xe91: 0x0018,\n\t0xe92: 0x0018, 0xe93: 0x0018, 0xe94: 0x0018, 0xe95: 0x0018, 0xe96: 0x0018, 0xe97: 0x0018,\n\t0xe98: 0x0018, 0xe99: 0x0018, 0xe9a: 0x0018, 0xe9b: 0x0018, 0xe9c: 0x0018, 0xe9d: 0x0018,\n\t0xe9e: 0x0018, 0xe9f: 0x0018, 0xea0: 0x0018, 0xea1: 0x0018, 0xea2: 0x0018, 0xea3: 0x0018,\n\t0xea4: 0x0018, 0xea5: 0x0018, 0xea6: 0x0018, 0xea7: 0x0018, 0xea8: 0x0018, 0xea9: 0x0018,\n\t0xeaa: 0x3308, 0xeab: 0x3308, 0xeac: 0x3308, 0xead: 0x3308, 0xeae: 0x3018, 0xeaf: 0x3018,\n\t0xeb0: 0x0018, 0xeb1: 0x0018, 0xeb2: 0x0018, 0xeb3: 0x0018, 0xeb4: 0x0018, 0xeb5: 0x0018,\n\t0xeb6: 0xe125, 0xeb7: 0x0018, 0xeb8: 0x29bd, 0xeb9: 0x29dd, 0xeba: 0x29fd, 0xebb: 0x0018,\n\t0xebc: 0x0008, 0xebd: 0x0018, 0xebe: 0x0018, 0xebf: 0x0018,\n\t// Block 0x3b, offset 0xec0\n\t0xec0: 0x2b3d, 0xec1: 0x2b5d, 0xec2: 0x2b7d, 0xec3: 0x2b9d, 0xec4: 0x2bbd, 0xec5: 0x2bdd,\n\t0xec6: 0x2bdd, 0xec7: 0x2bdd, 0xec8: 0x2bfd, 0xec9: 0x2bfd, 0xeca: 0x2bfd, 0xecb: 0x2bfd,\n\t0xecc: 0x2c1d, 0xecd: 0x2c1d, 0xece: 0x2c1d, 0xecf: 0x2c3d, 0xed0: 0x2c5d, 0xed1: 0x2c5d,\n\t0xed2: 0x2a7d, 0xed3: 0x2a7d, 0xed4: 0x2c5d, 0xed5: 0x2c5d, 0xed6: 0x2c7d, 0xed7: 0x2c7d,\n\t0xed8: 0x2c5d, 0xed9: 0x2c5d, 0xeda: 0x2a7d, 0xedb: 0x2a7d, 0xedc: 0x2c5d, 0xedd: 0x2c5d,\n\t0xede: 0x2c3d, 0xedf: 0x2c3d, 0xee0: 0x2c9d, 0xee1: 0x2c9d, 0xee2: 0x2cbd, 0xee3: 0x2cbd,\n\t0xee4: 0x0040, 0xee5: 0x2cdd, 0xee6: 0x2cfd, 0xee7: 0x2d1d, 0xee8: 0x2d1d, 0xee9: 0x2d3d,\n\t0xeea: 0x2d5d, 0xeeb: 0x2d7d, 0xeec: 0x2d9d, 0xeed: 0x2dbd, 0xeee: 0x2ddd, 0xeef: 0x2dfd,\n\t0xef0: 0x2e1d, 0xef1: 0x2e3d, 0xef2: 0x2e3d, 0xef3: 0x2e5d, 0xef4: 0x2e7d, 0xef5: 0x2e7d,\n\t0xef6: 0x2e9d, 0xef7: 0x2ebd, 0xef8: 0x2e5d, 0xef9: 0x2edd, 0xefa: 0x2efd, 0xefb: 0x2edd,\n\t0xefc: 0x2e5d, 0xefd: 0x2f1d, 0xefe: 0x2f3d, 0xeff: 0x2f5d,\n\t// Block 0x3c, offset 0xf00\n\t0xf00: 0x2f7d, 0xf01: 0x2f9d, 0xf02: 0x2cfd, 0xf03: 0x2cdd, 0xf04: 0x2fbd, 0xf05: 0x2fdd,\n\t0xf06: 0x2ffd, 0xf07: 0x301d, 0xf08: 0x303d, 0xf09: 0x305d, 0xf0a: 0x307d, 0xf0b: 0x309d,\n\t0xf0c: 0x30bd, 0xf0d: 0x30dd, 0xf0e: 0x30fd, 0xf0f: 0x0040, 0xf10: 0x0018, 0xf11: 0x0018,\n\t0xf12: 0x311d, 0xf13: 0x313d, 0xf14: 0x315d, 0xf15: 0x317d, 0xf16: 0x319d, 0xf17: 0x31bd,\n\t0xf18: 0x31dd, 0xf19: 0x31fd, 0xf1a: 0x321d, 0xf1b: 0x323d, 0xf1c: 0x315d, 0xf1d: 0x325d,\n\t0xf1e: 0x327d, 0xf1f: 0x329d, 0xf20: 0x0008, 0xf21: 0x0008, 0xf22: 0x0008, 0xf23: 0x0008,\n\t0xf24: 0x0008, 0xf25: 0x0008, 0xf26: 0x0008, 0xf27: 0x0008, 0xf28: 0x0008, 0xf29: 0x0008,\n\t0xf2a: 0x0008, 0xf2b: 0x0008, 0xf2c: 0x0008, 0xf2d: 0x0008, 0xf2e: 0x0008, 0xf2f: 0x0008,\n\t0xf30: 0x0008, 0xf31: 0x0008, 0xf32: 0x0008, 0xf33: 0x0008, 0xf34: 0x0008, 0xf35: 0x0008,\n\t0xf36: 0x0008, 0xf37: 0x0008, 0xf38: 0x0008, 0xf39: 0x0008, 0xf3a: 0x0008, 0xf3b: 0x0040,\n\t0xf3c: 0x0040, 0xf3d: 0x0040, 0xf3e: 0x0040, 0xf3f: 0x0040,\n\t// Block 0x3d, offset 0xf40\n\t0xf40: 0x36a2, 0xf41: 0x36d2, 0xf42: 0x3702, 0xf43: 0x3732, 0xf44: 0x32bd, 0xf45: 0x32dd,\n\t0xf46: 0x32fd, 0xf47: 0x331d, 0xf48: 0x0018, 0xf49: 0x0018, 0xf4a: 0x0018, 0xf4b: 0x0018,\n\t0xf4c: 0x0018, 0xf4d: 0x0018, 0xf4e: 0x0018, 0xf4f: 0x0018, 0xf50: 0x333d, 0xf51: 0x3761,\n\t0xf52: 0x3779, 0xf53: 0x3791, 0xf54: 0x37a9, 0xf55: 0x37c1, 0xf56: 0x37d9, 0xf57: 0x37f1,\n\t0xf58: 0x3809, 0xf59: 0x3821, 0xf5a: 0x3839, 0xf5b: 0x3851, 0xf5c: 0x3869, 0xf5d: 0x3881,\n\t0xf5e: 0x3899, 0xf5f: 0x38b1, 0xf60: 0x335d, 0xf61: 0x337d, 0xf62: 0x339d, 0xf63: 0x33bd,\n\t0xf64: 0x33dd, 0xf65: 0x33dd, 0xf66: 0x33fd, 0xf67: 0x341d, 0xf68: 0x343d, 0xf69: 0x345d,\n\t0xf6a: 0x347d, 0xf6b: 0x349d, 0xf6c: 0x34bd, 0xf6d: 0x34dd, 0xf6e: 0x34fd, 0xf6f: 0x351d,\n\t0xf70: 0x353d, 0xf71: 0x355d, 0xf72: 0x357d, 0xf73: 0x359d, 0xf74: 0x35bd, 0xf75: 0x35dd,\n\t0xf76: 0x35fd, 0xf77: 0x361d, 0xf78: 0x363d, 0xf79: 0x365d, 0xf7a: 0x367d, 0xf7b: 0x369d,\n\t0xf7c: 0x38c9, 0xf7d: 0x3901, 0xf7e: 0x36bd, 0xf7f: 0x0018,\n\t// Block 0x3e, offset 0xf80\n\t0xf80: 0x36dd, 0xf81: 0x36fd, 0xf82: 0x371d, 0xf83: 0x373d, 0xf84: 0x375d, 0xf85: 0x377d,\n\t0xf86: 0x379d, 0xf87: 0x37bd, 0xf88: 0x37dd, 0xf89: 0x37fd, 0xf8a: 0x381d, 0xf8b: 0x383d,\n\t0xf8c: 0x385d, 0xf8d: 0x387d, 0xf8e: 0x389d, 0xf8f: 0x38bd, 0xf90: 0x38dd, 0xf91: 0x38fd,\n\t0xf92: 0x391d, 0xf93: 0x393d, 0xf94: 0x395d, 0xf95: 0x397d, 0xf96: 0x399d, 0xf97: 0x39bd,\n\t0xf98: 0x39dd, 0xf99: 0x39fd, 0xf9a: 0x3a1d, 0xf9b: 0x3a3d, 0xf9c: 0x3a5d, 0xf9d: 0x3a7d,\n\t0xf9e: 0x3a9d, 0xf9f: 0x3abd, 0xfa0: 0x3add, 0xfa1: 0x3afd, 0xfa2: 0x3b1d, 0xfa3: 0x3b3d,\n\t0xfa4: 0x3b5d, 0xfa5: 0x3b7d, 0xfa6: 0x127d, 0xfa7: 0x3b9d, 0xfa8: 0x3bbd, 0xfa9: 0x3bdd,\n\t0xfaa: 0x3bfd, 0xfab: 0x3c1d, 0xfac: 0x3c3d, 0xfad: 0x3c5d, 0xfae: 0x239d, 0xfaf: 0x3c7d,\n\t0xfb0: 0x3c9d, 0xfb1: 0x3939, 0xfb2: 0x3951, 0xfb3: 0x3969, 0xfb4: 0x3981, 0xfb5: 0x3999,\n\t0xfb6: 0x39b1, 0xfb7: 0x39c9, 0xfb8: 0x39e1, 0xfb9: 0x39f9, 0xfba: 0x3a11, 0xfbb: 0x3a29,\n\t0xfbc: 0x3a41, 0xfbd: 0x3a59, 0xfbe: 0x3a71, 0xfbf: 0x3a89,\n\t// Block 0x3f, offset 0xfc0\n\t0xfc0: 0x3aa1, 0xfc1: 0x3ac9, 0xfc2: 0x3af1, 0xfc3: 0x3b19, 0xfc4: 0x3b41, 0xfc5: 0x3b69,\n\t0xfc6: 0x3b91, 0xfc7: 0x3bb9, 0xfc8: 0x3be1, 0xfc9: 0x3c09, 0xfca: 0x3c39, 0xfcb: 0x3c69,\n\t0xfcc: 0x3c99, 0xfcd: 0x3cbd, 0xfce: 0x3cb1, 0xfcf: 0x3cdd, 0xfd0: 0x3cfd, 0xfd1: 0x3d15,\n\t0xfd2: 0x3d2d, 0xfd3: 0x3d45, 0xfd4: 0x3d5d, 0xfd5: 0x3d5d, 0xfd6: 0x3d45, 0xfd7: 0x3d75,\n\t0xfd8: 0x07bd, 0xfd9: 0x3d8d, 0xfda: 0x3da5, 0xfdb: 0x3dbd, 0xfdc: 0x3dd5, 0xfdd: 0x3ded,\n\t0xfde: 0x3e05, 0xfdf: 0x3e1d, 0xfe0: 0x3e35, 0xfe1: 0x3e4d, 0xfe2: 0x3e65, 0xfe3: 0x3e7d,\n\t0xfe4: 0x3e95, 0xfe5: 0x3e95, 0xfe6: 0x3ead, 0xfe7: 0x3ead, 0xfe8: 0x3ec5, 0xfe9: 0x3ec5,\n\t0xfea: 0x3edd, 0xfeb: 0x3ef5, 0xfec: 0x3f0d, 0xfed: 0x3f25, 0xfee: 0x3f3d, 0xfef: 0x3f3d,\n\t0xff0: 0x3f55, 0xff1: 0x3f55, 0xff2: 0x3f55, 0xff3: 0x3f6d, 0xff4: 0x3f85, 0xff5: 0x3f9d,\n\t0xff6: 0x3fb5, 0xff7: 0x3f9d, 0xff8: 0x3fcd, 0xff9: 0x3fe5, 0xffa: 0x3f6d, 0xffb: 0x3ffd,\n\t0xffc: 0x4015, 0xffd: 0x4015, 0xffe: 0x4015, 0xfff: 0x0040,\n\t// Block 0x40, offset 0x1000\n\t0x1000: 0x3cc9, 0x1001: 0x3d31, 0x1002: 0x3d99, 0x1003: 0x3e01, 0x1004: 0x3e51, 0x1005: 0x3eb9,\n\t0x1006: 0x3f09, 0x1007: 0x3f59, 0x1008: 0x3fd9, 0x1009: 0x4041, 0x100a: 0x4091, 0x100b: 0x40e1,\n\t0x100c: 0x4131, 0x100d: 0x4199, 0x100e: 0x4201, 0x100f: 0x4251, 0x1010: 0x42a1, 0x1011: 0x42d9,\n\t0x1012: 0x4329, 0x1013: 0x4391, 0x1014: 0x43f9, 0x1015: 0x4431, 0x1016: 0x44b1, 0x1017: 0x4549,\n\t0x1018: 0x45c9, 0x1019: 0x4619, 0x101a: 0x4699, 0x101b: 0x4719, 0x101c: 0x4781, 0x101d: 0x47d1,\n\t0x101e: 0x4821, 0x101f: 0x4871, 0x1020: 0x48d9, 0x1021: 0x4959, 0x1022: 0x49c1, 0x1023: 0x4a11,\n\t0x1024: 0x4a61, 0x1025: 0x4ab1, 0x1026: 0x4ae9, 0x1027: 0x4b21, 0x1028: 0x4b59, 0x1029: 0x4b91,\n\t0x102a: 0x4be1, 0x102b: 0x4c31, 0x102c: 0x4cb1, 0x102d: 0x4d01, 0x102e: 0x4d69, 0x102f: 0x4de9,\n\t0x1030: 0x4e39, 0x1031: 0x4e71, 0x1032: 0x4ea9, 0x1033: 0x4f29, 0x1034: 0x4f91, 0x1035: 0x5011,\n\t0x1036: 0x5061, 0x1037: 0x50e1, 0x1038: 0x5119, 0x1039: 0x5169, 0x103a: 0x51b9, 0x103b: 0x5209,\n\t0x103c: 0x5259, 0x103d: 0x52a9, 0x103e: 0x5311, 0x103f: 0x5361,\n\t// Block 0x41, offset 0x1040\n\t0x1040: 0x5399, 0x1041: 0x53e9, 0x1042: 0x5439, 0x1043: 0x5489, 0x1044: 0x54f1, 0x1045: 0x5541,\n\t0x1046: 0x5591, 0x1047: 0x55e1, 0x1048: 0x5661, 0x1049: 0x56c9, 0x104a: 0x5701, 0x104b: 0x5781,\n\t0x104c: 0x57b9, 0x104d: 0x5821, 0x104e: 0x5889, 0x104f: 0x58d9, 0x1050: 0x5929, 0x1051: 0x5979,\n\t0x1052: 0x59e1, 0x1053: 0x5a19, 0x1054: 0x5a69, 0x1055: 0x5ad1, 0x1056: 0x5b09, 0x1057: 0x5b89,\n\t0x1058: 0x5bd9, 0x1059: 0x5c01, 0x105a: 0x5c29, 0x105b: 0x5c51, 0x105c: 0x5c79, 0x105d: 0x5ca1,\n\t0x105e: 0x5cc9, 0x105f: 0x5cf1, 0x1060: 0x5d19, 0x1061: 0x5d41, 0x1062: 0x5d69, 0x1063: 0x5d99,\n\t0x1064: 0x5dc9, 0x1065: 0x5df9, 0x1066: 0x5e29, 0x1067: 0x5e59, 0x1068: 0x5e89, 0x1069: 0x5eb9,\n\t0x106a: 0x5ee9, 0x106b: 0x5f19, 0x106c: 0x5f49, 0x106d: 0x5f79, 0x106e: 0x5fa9, 0x106f: 0x5fd9,\n\t0x1070: 0x6009, 0x1071: 0x402d, 0x1072: 0x6039, 0x1073: 0x6051, 0x1074: 0x404d, 0x1075: 0x6069,\n\t0x1076: 0x6081, 0x1077: 0x6099, 0x1078: 0x406d, 0x1079: 0x406d, 0x107a: 0x60b1, 0x107b: 0x60c9,\n\t0x107c: 0x6101, 0x107d: 0x6139, 0x107e: 0x6171, 0x107f: 0x61a9,\n\t// Block 0x42, offset 0x1080\n\t0x1080: 0x6211, 0x1081: 0x6229, 0x1082: 0x408d, 0x1083: 0x6241, 0x1084: 0x6259, 0x1085: 0x6271,\n\t0x1086: 0x6289, 0x1087: 0x62a1, 0x1088: 0x40ad, 0x1089: 0x62b9, 0x108a: 0x62e1, 0x108b: 0x62f9,\n\t0x108c: 0x40cd, 0x108d: 0x40cd, 0x108e: 0x6311, 0x108f: 0x6329, 0x1090: 0x6341, 0x1091: 0x40ed,\n\t0x1092: 0x410d, 0x1093: 0x412d, 0x1094: 0x414d, 0x1095: 0x416d, 0x1096: 0x6359, 0x1097: 0x6371,\n\t0x1098: 0x6389, 0x1099: 0x63a1, 0x109a: 0x63b9, 0x109b: 0x418d, 0x109c: 0x63d1, 0x109d: 0x63e9,\n\t0x109e: 0x6401, 0x109f: 0x41ad, 0x10a0: 0x41cd, 0x10a1: 0x6419, 0x10a2: 0x41ed, 0x10a3: 0x420d,\n\t0x10a4: 0x422d, 0x10a5: 0x6431, 0x10a6: 0x424d, 0x10a7: 0x6449, 0x10a8: 0x6479, 0x10a9: 0x6211,\n\t0x10aa: 0x426d, 0x10ab: 0x428d, 0x10ac: 0x42ad, 0x10ad: 0x42cd, 0x10ae: 0x64b1, 0x10af: 0x64f1,\n\t0x10b0: 0x6539, 0x10b1: 0x6551, 0x10b2: 0x42ed, 0x10b3: 0x6569, 0x10b4: 0x6581, 0x10b5: 0x6599,\n\t0x10b6: 0x430d, 0x10b7: 0x65b1, 0x10b8: 0x65c9, 0x10b9: 0x65b1, 0x10ba: 0x65e1, 0x10bb: 0x65f9,\n\t0x10bc: 0x432d, 0x10bd: 0x6611, 0x10be: 0x6629, 0x10bf: 0x6611,\n\t// Block 0x43, offset 0x10c0\n\t0x10c0: 0x434d, 0x10c1: 0x436d, 0x10c2: 0x0040, 0x10c3: 0x6641, 0x10c4: 0x6659, 0x10c5: 0x6671,\n\t0x10c6: 0x6689, 0x10c7: 0x0040, 0x10c8: 0x66c1, 0x10c9: 0x66d9, 0x10ca: 0x66f1, 0x10cb: 0x6709,\n\t0x10cc: 0x6721, 0x10cd: 0x6739, 0x10ce: 0x6401, 0x10cf: 0x6751, 0x10d0: 0x6769, 0x10d1: 0x6781,\n\t0x10d2: 0x438d, 0x10d3: 0x6799, 0x10d4: 0x6289, 0x10d5: 0x43ad, 0x10d6: 0x43cd, 0x10d7: 0x67b1,\n\t0x10d8: 0x0040, 0x10d9: 0x43ed, 0x10da: 0x67c9, 0x10db: 0x67e1, 0x10dc: 0x67f9, 0x10dd: 0x6811,\n\t0x10de: 0x6829, 0x10df: 0x6859, 0x10e0: 0x6889, 0x10e1: 0x68b1, 0x10e2: 0x68d9, 0x10e3: 0x6901,\n\t0x10e4: 0x6929, 0x10e5: 0x6951, 0x10e6: 0x6979, 0x10e7: 0x69a1, 0x10e8: 0x69c9, 0x10e9: 0x69f1,\n\t0x10ea: 0x6a21, 0x10eb: 0x6a51, 0x10ec: 0x6a81, 0x10ed: 0x6ab1, 0x10ee: 0x6ae1, 0x10ef: 0x6b11,\n\t0x10f0: 0x6b41, 0x10f1: 0x6b71, 0x10f2: 0x6ba1, 0x10f3: 0x6bd1, 0x10f4: 0x6c01, 0x10f5: 0x6c31,\n\t0x10f6: 0x6c61, 0x10f7: 0x6c91, 0x10f8: 0x6cc1, 0x10f9: 0x6cf1, 0x10fa: 0x6d21, 0x10fb: 0x6d51,\n\t0x10fc: 0x6d81, 0x10fd: 0x6db1, 0x10fe: 0x6de1, 0x10ff: 0x440d,\n\t// Block 0x44, offset 0x1100\n\t0x1100: 0xe00d, 0x1101: 0x0008, 0x1102: 0xe00d, 0x1103: 0x0008, 0x1104: 0xe00d, 0x1105: 0x0008,\n\t0x1106: 0xe00d, 0x1107: 0x0008, 0x1108: 0xe00d, 0x1109: 0x0008, 0x110a: 0xe00d, 0x110b: 0x0008,\n\t0x110c: 0xe00d, 0x110d: 0x0008, 0x110e: 0xe00d, 0x110f: 0x0008, 0x1110: 0xe00d, 0x1111: 0x0008,\n\t0x1112: 0xe00d, 0x1113: 0x0008, 0x1114: 0xe00d, 0x1115: 0x0008, 0x1116: 0xe00d, 0x1117: 0x0008,\n\t0x1118: 0xe00d, 0x1119: 0x0008, 0x111a: 0xe00d, 0x111b: 0x0008, 0x111c: 0xe00d, 0x111d: 0x0008,\n\t0x111e: 0xe00d, 0x111f: 0x0008, 0x1120: 0xe00d, 0x1121: 0x0008, 0x1122: 0xe00d, 0x1123: 0x0008,\n\t0x1124: 0xe00d, 0x1125: 0x0008, 0x1126: 0xe00d, 0x1127: 0x0008, 0x1128: 0xe00d, 0x1129: 0x0008,\n\t0x112a: 0xe00d, 0x112b: 0x0008, 0x112c: 0xe00d, 0x112d: 0x0008, 0x112e: 0x0008, 0x112f: 0x3308,\n\t0x1130: 0x3318, 0x1131: 0x3318, 0x1132: 0x3318, 0x1133: 0x0018, 0x1134: 0x3308, 0x1135: 0x3308,\n\t0x1136: 0x3308, 0x1137: 0x3308, 0x1138: 0x3308, 0x1139: 0x3308, 0x113a: 0x3308, 0x113b: 0x3308,\n\t0x113c: 0x3308, 0x113d: 0x3308, 0x113e: 0x0018, 0x113f: 0x0008,\n\t// Block 0x45, offset 0x1140\n\t0x1140: 0xe00d, 0x1141: 0x0008, 0x1142: 0xe00d, 0x1143: 0x0008, 0x1144: 0xe00d, 0x1145: 0x0008,\n\t0x1146: 0xe00d, 0x1147: 0x0008, 0x1148: 0xe00d, 0x1149: 0x0008, 0x114a: 0xe00d, 0x114b: 0x0008,\n\t0x114c: 0xe00d, 0x114d: 0x0008, 0x114e: 0xe00d, 0x114f: 0x0008, 0x1150: 0xe00d, 0x1151: 0x0008,\n\t0x1152: 0xe00d, 0x1153: 0x0008, 0x1154: 0xe00d, 0x1155: 0x0008, 0x1156: 0xe00d, 0x1157: 0x0008,\n\t0x1158: 0xe00d, 0x1159: 0x0008, 0x115a: 0xe00d, 0x115b: 0x0008, 0x115c: 0x0ea1, 0x115d: 0x6e11,\n\t0x115e: 0x3308, 0x115f: 0x3308, 0x1160: 0x0008, 0x1161: 0x0008, 0x1162: 0x0008, 0x1163: 0x0008,\n\t0x1164: 0x0008, 0x1165: 0x0008, 0x1166: 0x0008, 0x1167: 0x0008, 0x1168: 0x0008, 0x1169: 0x0008,\n\t0x116a: 0x0008, 0x116b: 0x0008, 0x116c: 0x0008, 0x116d: 0x0008, 0x116e: 0x0008, 0x116f: 0x0008,\n\t0x1170: 0x0008, 0x1171: 0x0008, 0x1172: 0x0008, 0x1173: 0x0008, 0x1174: 0x0008, 0x1175: 0x0008,\n\t0x1176: 0x0008, 0x1177: 0x0008, 0x1178: 0x0008, 0x1179: 0x0008, 0x117a: 0x0008, 0x117b: 0x0008,\n\t0x117c: 0x0008, 0x117d: 0x0008, 0x117e: 0x0008, 0x117f: 0x0008,\n\t// Block 0x46, offset 0x1180\n\t0x1180: 0x0018, 0x1181: 0x0018, 0x1182: 0x0018, 0x1183: 0x0018, 0x1184: 0x0018, 0x1185: 0x0018,\n\t0x1186: 0x0018, 0x1187: 0x0018, 0x1188: 0x0018, 0x1189: 0x0018, 0x118a: 0x0018, 0x118b: 0x0018,\n\t0x118c: 0x0018, 0x118d: 0x0018, 0x118e: 0x0018, 0x118f: 0x0018, 0x1190: 0x0018, 0x1191: 0x0018,\n\t0x1192: 0x0018, 0x1193: 0x0018, 0x1194: 0x0018, 0x1195: 0x0018, 0x1196: 0x0018, 0x1197: 0x0008,\n\t0x1198: 0x0008, 0x1199: 0x0008, 0x119a: 0x0008, 0x119b: 0x0008, 0x119c: 0x0008, 0x119d: 0x0008,\n\t0x119e: 0x0008, 0x119f: 0x0008, 0x11a0: 0x0018, 0x11a1: 0x0018, 0x11a2: 0xe00d, 0x11a3: 0x0008,\n\t0x11a4: 0xe00d, 0x11a5: 0x0008, 0x11a6: 0xe00d, 0x11a7: 0x0008, 0x11a8: 0xe00d, 0x11a9: 0x0008,\n\t0x11aa: 0xe00d, 0x11ab: 0x0008, 0x11ac: 0xe00d, 0x11ad: 0x0008, 0x11ae: 0xe00d, 0x11af: 0x0008,\n\t0x11b0: 0x0008, 0x11b1: 0x0008, 0x11b2: 0xe00d, 0x11b3: 0x0008, 0x11b4: 0xe00d, 0x11b5: 0x0008,\n\t0x11b6: 0xe00d, 0x11b7: 0x0008, 0x11b8: 0xe00d, 0x11b9: 0x0008, 0x11ba: 0xe00d, 0x11bb: 0x0008,\n\t0x11bc: 0xe00d, 0x11bd: 0x0008, 0x11be: 0xe00d, 0x11bf: 0x0008,\n\t// Block 0x47, offset 0x11c0\n\t0x11c0: 0xe00d, 0x11c1: 0x0008, 0x11c2: 0xe00d, 0x11c3: 0x0008, 0x11c4: 0xe00d, 0x11c5: 0x0008,\n\t0x11c6: 0xe00d, 0x11c7: 0x0008, 0x11c8: 0xe00d, 0x11c9: 0x0008, 0x11ca: 0xe00d, 0x11cb: 0x0008,\n\t0x11cc: 0xe00d, 0x11cd: 0x0008, 0x11ce: 0xe00d, 0x11cf: 0x0008, 0x11d0: 0xe00d, 0x11d1: 0x0008,\n\t0x11d2: 0xe00d, 0x11d3: 0x0008, 0x11d4: 0xe00d, 0x11d5: 0x0008, 0x11d6: 0xe00d, 0x11d7: 0x0008,\n\t0x11d8: 0xe00d, 0x11d9: 0x0008, 0x11da: 0xe00d, 0x11db: 0x0008, 0x11dc: 0xe00d, 0x11dd: 0x0008,\n\t0x11de: 0xe00d, 0x11df: 0x0008, 0x11e0: 0xe00d, 0x11e1: 0x0008, 0x11e2: 0xe00d, 0x11e3: 0x0008,\n\t0x11e4: 0xe00d, 0x11e5: 0x0008, 0x11e6: 0xe00d, 0x11e7: 0x0008, 0x11e8: 0xe00d, 0x11e9: 0x0008,\n\t0x11ea: 0xe00d, 0x11eb: 0x0008, 0x11ec: 0xe00d, 0x11ed: 0x0008, 0x11ee: 0xe00d, 0x11ef: 0x0008,\n\t0x11f0: 0xe0fd, 0x11f1: 0x0008, 0x11f2: 0x0008, 0x11f3: 0x0008, 0x11f4: 0x0008, 0x11f5: 0x0008,\n\t0x11f6: 0x0008, 0x11f7: 0x0008, 0x11f8: 0x0008, 0x11f9: 0xe01d, 0x11fa: 0x0008, 0x11fb: 0xe03d,\n\t0x11fc: 0x0008, 0x11fd: 0x442d, 0x11fe: 0xe00d, 0x11ff: 0x0008,\n\t// Block 0x48, offset 0x1200\n\t0x1200: 0xe00d, 0x1201: 0x0008, 0x1202: 0xe00d, 0x1203: 0x0008, 0x1204: 0xe00d, 0x1205: 0x0008,\n\t0x1206: 0xe00d, 0x1207: 0x0008, 0x1208: 0x0008, 0x1209: 0x0018, 0x120a: 0x0018, 0x120b: 0xe03d,\n\t0x120c: 0x0008, 0x120d: 0x11d9, 0x120e: 0x0008, 0x120f: 0x0008, 0x1210: 0xe00d, 0x1211: 0x0008,\n\t0x1212: 0xe00d, 0x1213: 0x0008, 0x1214: 0x0008, 0x1215: 0x0008, 0x1216: 0xe00d, 0x1217: 0x0008,\n\t0x1218: 0xe00d, 0x1219: 0x0008, 0x121a: 0xe00d, 0x121b: 0x0008, 0x121c: 0xe00d, 0x121d: 0x0008,\n\t0x121e: 0xe00d, 0x121f: 0x0008, 0x1220: 0xe00d, 0x1221: 0x0008, 0x1222: 0xe00d, 0x1223: 0x0008,\n\t0x1224: 0xe00d, 0x1225: 0x0008, 0x1226: 0xe00d, 0x1227: 0x0008, 0x1228: 0xe00d, 0x1229: 0x0008,\n\t0x122a: 0x6e29, 0x122b: 0x1029, 0x122c: 0x11c1, 0x122d: 0x6e41, 0x122e: 0x1221, 0x122f: 0x0008,\n\t0x1230: 0x6e59, 0x1231: 0x6e71, 0x1232: 0x1239, 0x1233: 0x444d, 0x1234: 0xe00d, 0x1235: 0x0008,\n\t0x1236: 0xe00d, 0x1237: 0x0008, 0x1238: 0x0040, 0x1239: 0x0008, 0x123a: 0x0040, 0x123b: 0x0040,\n\t0x123c: 0x0040, 0x123d: 0x0040, 0x123e: 0x0040, 0x123f: 0x0040,\n\t// Block 0x49, offset 0x1240\n\t0x1240: 0x64d5, 0x1241: 0x64f5, 0x1242: 0x6515, 0x1243: 0x6535, 0x1244: 0x6555, 0x1245: 0x6575,\n\t0x1246: 0x6595, 0x1247: 0x65b5, 0x1248: 0x65d5, 0x1249: 0x65f5, 0x124a: 0x6615, 0x124b: 0x6635,\n\t0x124c: 0x6655, 0x124d: 0x6675, 0x124e: 0x0008, 0x124f: 0x0008, 0x1250: 0x6695, 0x1251: 0x0008,\n\t0x1252: 0x66b5, 0x1253: 0x0008, 0x1254: 0x0008, 0x1255: 0x66d5, 0x1256: 0x66f5, 0x1257: 0x6715,\n\t0x1258: 0x6735, 0x1259: 0x6755, 0x125a: 0x6775, 0x125b: 0x6795, 0x125c: 0x67b5, 0x125d: 0x67d5,\n\t0x125e: 0x67f5, 0x125f: 0x0008, 0x1260: 0x6815, 0x1261: 0x0008, 0x1262: 0x6835, 0x1263: 0x0008,\n\t0x1264: 0x0008, 0x1265: 0x6855, 0x1266: 0x6875, 0x1267: 0x0008, 0x1268: 0x0008, 0x1269: 0x0008,\n\t0x126a: 0x6895, 0x126b: 0x68b5, 0x126c: 0x68d5, 0x126d: 0x68f5, 0x126e: 0x6915, 0x126f: 0x6935,\n\t0x1270: 0x6955, 0x1271: 0x6975, 0x1272: 0x6995, 0x1273: 0x69b5, 0x1274: 0x69d5, 0x1275: 0x69f5,\n\t0x1276: 0x6a15, 0x1277: 0x6a35, 0x1278: 0x6a55, 0x1279: 0x6a75, 0x127a: 0x6a95, 0x127b: 0x6ab5,\n\t0x127c: 0x6ad5, 0x127d: 0x6af5, 0x127e: 0x6b15, 0x127f: 0x6b35,\n\t// Block 0x4a, offset 0x1280\n\t0x1280: 0x7a95, 0x1281: 0x7ab5, 0x1282: 0x7ad5, 0x1283: 0x7af5, 0x1284: 0x7b15, 0x1285: 0x7b35,\n\t0x1286: 0x7b55, 0x1287: 0x7b75, 0x1288: 0x7b95, 0x1289: 0x7bb5, 0x128a: 0x7bd5, 0x128b: 0x7bf5,\n\t0x128c: 0x7c15, 0x128d: 0x7c35, 0x128e: 0x7c55, 0x128f: 0x6ec9, 0x1290: 0x6ef1, 0x1291: 0x6f19,\n\t0x1292: 0x7c75, 0x1293: 0x7c95, 0x1294: 0x7cb5, 0x1295: 0x6f41, 0x1296: 0x6f69, 0x1297: 0x6f91,\n\t0x1298: 0x7cd5, 0x1299: 0x7cf5, 0x129a: 0x0040, 0x129b: 0x0040, 0x129c: 0x0040, 0x129d: 0x0040,\n\t0x129e: 0x0040, 0x129f: 0x0040, 0x12a0: 0x0040, 0x12a1: 0x0040, 0x12a2: 0x0040, 0x12a3: 0x0040,\n\t0x12a4: 0x0040, 0x12a5: 0x0040, 0x12a6: 0x0040, 0x12a7: 0x0040, 0x12a8: 0x0040, 0x12a9: 0x0040,\n\t0x12aa: 0x0040, 0x12ab: 0x0040, 0x12ac: 0x0040, 0x12ad: 0x0040, 0x12ae: 0x0040, 0x12af: 0x0040,\n\t0x12b0: 0x0040, 0x12b1: 0x0040, 0x12b2: 0x0040, 0x12b3: 0x0040, 0x12b4: 0x0040, 0x12b5: 0x0040,\n\t0x12b6: 0x0040, 0x12b7: 0x0040, 0x12b8: 0x0040, 0x12b9: 0x0040, 0x12ba: 0x0040, 0x12bb: 0x0040,\n\t0x12bc: 0x0040, 0x12bd: 0x0040, 0x12be: 0x0040, 0x12bf: 0x0040,\n\t// Block 0x4b, offset 0x12c0\n\t0x12c0: 0x6fb9, 0x12c1: 0x6fd1, 0x12c2: 0x6fe9, 0x12c3: 0x7d15, 0x12c4: 0x7d35, 0x12c5: 0x7001,\n\t0x12c6: 0x7001, 0x12c7: 0x0040, 0x12c8: 0x0040, 0x12c9: 0x0040, 0x12ca: 0x0040, 0x12cb: 0x0040,\n\t0x12cc: 0x0040, 0x12cd: 0x0040, 0x12ce: 0x0040, 0x12cf: 0x0040, 0x12d0: 0x0040, 0x12d1: 0x0040,\n\t0x12d2: 0x0040, 0x12d3: 0x7019, 0x12d4: 0x7041, 0x12d5: 0x7069, 0x12d6: 0x7091, 0x12d7: 0x70b9,\n\t0x12d8: 0x0040, 0x12d9: 0x0040, 0x12da: 0x0040, 0x12db: 0x0040, 0x12dc: 0x0040, 0x12dd: 0x70e1,\n\t0x12de: 0x3308, 0x12df: 0x7109, 0x12e0: 0x7131, 0x12e1: 0x20a9, 0x12e2: 0x20f1, 0x12e3: 0x7149,\n\t0x12e4: 0x7161, 0x12e5: 0x7179, 0x12e6: 0x7191, 0x12e7: 0x71a9, 0x12e8: 0x71c1, 0x12e9: 0x1fb2,\n\t0x12ea: 0x71d9, 0x12eb: 0x7201, 0x12ec: 0x7229, 0x12ed: 0x7261, 0x12ee: 0x7299, 0x12ef: 0x72c1,\n\t0x12f0: 0x72e9, 0x12f1: 0x7311, 0x12f2: 0x7339, 0x12f3: 0x7361, 0x12f4: 0x7389, 0x12f5: 0x73b1,\n\t0x12f6: 0x73d9, 0x12f7: 0x0040, 0x12f8: 0x7401, 0x12f9: 0x7429, 0x12fa: 0x7451, 0x12fb: 0x7479,\n\t0x12fc: 0x74a1, 0x12fd: 0x0040, 0x12fe: 0x74c9, 0x12ff: 0x0040,\n\t// Block 0x4c, offset 0x1300\n\t0x1300: 0x74f1, 0x1301: 0x7519, 0x1302: 0x0040, 0x1303: 0x7541, 0x1304: 0x7569, 0x1305: 0x0040,\n\t0x1306: 0x7591, 0x1307: 0x75b9, 0x1308: 0x75e1, 0x1309: 0x7609, 0x130a: 0x7631, 0x130b: 0x7659,\n\t0x130c: 0x7681, 0x130d: 0x76a9, 0x130e: 0x76d1, 0x130f: 0x76f9, 0x1310: 0x7721, 0x1311: 0x7721,\n\t0x1312: 0x7739, 0x1313: 0x7739, 0x1314: 0x7739, 0x1315: 0x7739, 0x1316: 0x7751, 0x1317: 0x7751,\n\t0x1318: 0x7751, 0x1319: 0x7751, 0x131a: 0x7769, 0x131b: 0x7769, 0x131c: 0x7769, 0x131d: 0x7769,\n\t0x131e: 0x7781, 0x131f: 0x7781, 0x1320: 0x7781, 0x1321: 0x7781, 0x1322: 0x7799, 0x1323: 0x7799,\n\t0x1324: 0x7799, 0x1325: 0x7799, 0x1326: 0x77b1, 0x1327: 0x77b1, 0x1328: 0x77b1, 0x1329: 0x77b1,\n\t0x132a: 0x77c9, 0x132b: 0x77c9, 0x132c: 0x77c9, 0x132d: 0x77c9, 0x132e: 0x77e1, 0x132f: 0x77e1,\n\t0x1330: 0x77e1, 0x1331: 0x77e1, 0x1332: 0x77f9, 0x1333: 0x77f9, 0x1334: 0x77f9, 0x1335: 0x77f9,\n\t0x1336: 0x7811, 0x1337: 0x7811, 0x1338: 0x7811, 0x1339: 0x7811, 0x133a: 0x7829, 0x133b: 0x7829,\n\t0x133c: 0x7829, 0x133d: 0x7829, 0x133e: 0x7841, 0x133f: 0x7841,\n\t// Block 0x4d, offset 0x1340\n\t0x1340: 0x7841, 0x1341: 0x7841, 0x1342: 0x7859, 0x1343: 0x7859, 0x1344: 0x7871, 0x1345: 0x7871,\n\t0x1346: 0x7889, 0x1347: 0x7889, 0x1348: 0x78a1, 0x1349: 0x78a1, 0x134a: 0x78b9, 0x134b: 0x78b9,\n\t0x134c: 0x78d1, 0x134d: 0x78d1, 0x134e: 0x78e9, 0x134f: 0x78e9, 0x1350: 0x78e9, 0x1351: 0x78e9,\n\t0x1352: 0x7901, 0x1353: 0x7901, 0x1354: 0x7901, 0x1355: 0x7901, 0x1356: 0x7919, 0x1357: 0x7919,\n\t0x1358: 0x7919, 0x1359: 0x7919, 0x135a: 0x7931, 0x135b: 0x7931, 0x135c: 0x7931, 0x135d: 0x7931,\n\t0x135e: 0x7949, 0x135f: 0x7949, 0x1360: 0x7961, 0x1361: 0x7961, 0x1362: 0x7961, 0x1363: 0x7961,\n\t0x1364: 0x7979, 0x1365: 0x7979, 0x1366: 0x7991, 0x1367: 0x7991, 0x1368: 0x7991, 0x1369: 0x7991,\n\t0x136a: 0x79a9, 0x136b: 0x79a9, 0x136c: 0x79a9, 0x136d: 0x79a9, 0x136e: 0x79c1, 0x136f: 0x79c1,\n\t0x1370: 0x79d9, 0x1371: 0x79d9, 0x1372: 0x0818, 0x1373: 0x0818, 0x1374: 0x0818, 0x1375: 0x0818,\n\t0x1376: 0x0818, 0x1377: 0x0818, 0x1378: 0x0818, 0x1379: 0x0818, 0x137a: 0x0818, 0x137b: 0x0818,\n\t0x137c: 0x0818, 0x137d: 0x0818, 0x137e: 0x0818, 0x137f: 0x0818,\n\t// Block 0x4e, offset 0x1380\n\t0x1380: 0x0818, 0x1381: 0x0818, 0x1382: 0x0040, 0x1383: 0x0040, 0x1384: 0x0040, 0x1385: 0x0040,\n\t0x1386: 0x0040, 0x1387: 0x0040, 0x1388: 0x0040, 0x1389: 0x0040, 0x138a: 0x0040, 0x138b: 0x0040,\n\t0x138c: 0x0040, 0x138d: 0x0040, 0x138e: 0x0040, 0x138f: 0x0040, 0x1390: 0x0040, 0x1391: 0x0040,\n\t0x1392: 0x0040, 0x1393: 0x79f1, 0x1394: 0x79f1, 0x1395: 0x79f1, 0x1396: 0x79f1, 0x1397: 0x7a09,\n\t0x1398: 0x7a09, 0x1399: 0x7a21, 0x139a: 0x7a21, 0x139b: 0x7a39, 0x139c: 0x7a39, 0x139d: 0x0479,\n\t0x139e: 0x7a51, 0x139f: 0x7a51, 0x13a0: 0x7a69, 0x13a1: 0x7a69, 0x13a2: 0x7a81, 0x13a3: 0x7a81,\n\t0x13a4: 0x7a99, 0x13a5: 0x7a99, 0x13a6: 0x7a99, 0x13a7: 0x7a99, 0x13a8: 0x7ab1, 0x13a9: 0x7ab1,\n\t0x13aa: 0x7ac9, 0x13ab: 0x7ac9, 0x13ac: 0x7af1, 0x13ad: 0x7af1, 0x13ae: 0x7b19, 0x13af: 0x7b19,\n\t0x13b0: 0x7b41, 0x13b1: 0x7b41, 0x13b2: 0x7b69, 0x13b3: 0x7b69, 0x13b4: 0x7b91, 0x13b5: 0x7b91,\n\t0x13b6: 0x7bb9, 0x13b7: 0x7bb9, 0x13b8: 0x7bb9, 0x13b9: 0x7be1, 0x13ba: 0x7be1, 0x13bb: 0x7be1,\n\t0x13bc: 0x7c09, 0x13bd: 0x7c09, 0x13be: 0x7c09, 0x13bf: 0x7c09,\n\t// Block 0x4f, offset 0x13c0\n\t0x13c0: 0x85f9, 0x13c1: 0x8621, 0x13c2: 0x8649, 0x13c3: 0x8671, 0x13c4: 0x8699, 0x13c5: 0x86c1,\n\t0x13c6: 0x86e9, 0x13c7: 0x8711, 0x13c8: 0x8739, 0x13c9: 0x8761, 0x13ca: 0x8789, 0x13cb: 0x87b1,\n\t0x13cc: 0x87d9, 0x13cd: 0x8801, 0x13ce: 0x8829, 0x13cf: 0x8851, 0x13d0: 0x8879, 0x13d1: 0x88a1,\n\t0x13d2: 0x88c9, 0x13d3: 0x88f1, 0x13d4: 0x8919, 0x13d5: 0x8941, 0x13d6: 0x8969, 0x13d7: 0x8991,\n\t0x13d8: 0x89b9, 0x13d9: 0x89e1, 0x13da: 0x8a09, 0x13db: 0x8a31, 0x13dc: 0x8a59, 0x13dd: 0x8a81,\n\t0x13de: 0x8aaa, 0x13df: 0x8ada, 0x13e0: 0x8b0a, 0x13e1: 0x8b3a, 0x13e2: 0x8b6a, 0x13e3: 0x8b9a,\n\t0x13e4: 0x8bc9, 0x13e5: 0x8bf1, 0x13e6: 0x7c71, 0x13e7: 0x8c19, 0x13e8: 0x7be1, 0x13e9: 0x7c99,\n\t0x13ea: 0x8c41, 0x13eb: 0x8c69, 0x13ec: 0x7d39, 0x13ed: 0x8c91, 0x13ee: 0x7d61, 0x13ef: 0x7d89,\n\t0x13f0: 0x8cb9, 0x13f1: 0x8ce1, 0x13f2: 0x7e29, 0x13f3: 0x8d09, 0x13f4: 0x7e51, 0x13f5: 0x7e79,\n\t0x13f6: 0x8d31, 0x13f7: 0x8d59, 0x13f8: 0x7ec9, 0x13f9: 0x8d81, 0x13fa: 0x7ef1, 0x13fb: 0x7f19,\n\t0x13fc: 0x83a1, 0x13fd: 0x83c9, 0x13fe: 0x8441, 0x13ff: 0x8469,\n\t// Block 0x50, offset 0x1400\n\t0x1400: 0x8491, 0x1401: 0x8531, 0x1402: 0x8559, 0x1403: 0x8581, 0x1404: 0x85a9, 0x1405: 0x8649,\n\t0x1406: 0x8671, 0x1407: 0x8699, 0x1408: 0x8da9, 0x1409: 0x8739, 0x140a: 0x8dd1, 0x140b: 0x8df9,\n\t0x140c: 0x8829, 0x140d: 0x8e21, 0x140e: 0x8851, 0x140f: 0x8879, 0x1410: 0x8a81, 0x1411: 0x8e49,\n\t0x1412: 0x8e71, 0x1413: 0x89b9, 0x1414: 0x8e99, 0x1415: 0x89e1, 0x1416: 0x8a09, 0x1417: 0x7c21,\n\t0x1418: 0x7c49, 0x1419: 0x8ec1, 0x141a: 0x7c71, 0x141b: 0x8ee9, 0x141c: 0x7cc1, 0x141d: 0x7ce9,\n\t0x141e: 0x7d11, 0x141f: 0x7d39, 0x1420: 0x8f11, 0x1421: 0x7db1, 0x1422: 0x7dd9, 0x1423: 0x7e01,\n\t0x1424: 0x7e29, 0x1425: 0x8f39, 0x1426: 0x7ec9, 0x1427: 0x7f41, 0x1428: 0x7f69, 0x1429: 0x7f91,\n\t0x142a: 0x7fb9, 0x142b: 0x7fe1, 0x142c: 0x8031, 0x142d: 0x8059, 0x142e: 0x8081, 0x142f: 0x80a9,\n\t0x1430: 0x80d1, 0x1431: 0x80f9, 0x1432: 0x8f61, 0x1433: 0x8121, 0x1434: 0x8149, 0x1435: 0x8171,\n\t0x1436: 0x8199, 0x1437: 0x81c1, 0x1438: 0x81e9, 0x1439: 0x8239, 0x143a: 0x8261, 0x143b: 0x8289,\n\t0x143c: 0x82b1, 0x143d: 0x82d9, 0x143e: 0x8301, 0x143f: 0x8329,\n\t// Block 0x51, offset 0x1440\n\t0x1440: 0x8351, 0x1441: 0x8379, 0x1442: 0x83f1, 0x1443: 0x8419, 0x1444: 0x84b9, 0x1445: 0x84e1,\n\t0x1446: 0x8509, 0x1447: 0x8531, 0x1448: 0x8559, 0x1449: 0x85d1, 0x144a: 0x85f9, 0x144b: 0x8621,\n\t0x144c: 0x8649, 0x144d: 0x8f89, 0x144e: 0x86c1, 0x144f: 0x86e9, 0x1450: 0x8711, 0x1451: 0x8739,\n\t0x1452: 0x87b1, 0x1453: 0x87d9, 0x1454: 0x8801, 0x1455: 0x8829, 0x1456: 0x8fb1, 0x1457: 0x88a1,\n\t0x1458: 0x88c9, 0x1459: 0x8fd9, 0x145a: 0x8941, 0x145b: 0x8969, 0x145c: 0x8991, 0x145d: 0x89b9,\n\t0x145e: 0x9001, 0x145f: 0x7c71, 0x1460: 0x8ee9, 0x1461: 0x7d39, 0x1462: 0x8f11, 0x1463: 0x7e29,\n\t0x1464: 0x8f39, 0x1465: 0x7ec9, 0x1466: 0x9029, 0x1467: 0x80d1, 0x1468: 0x9051, 0x1469: 0x9079,\n\t0x146a: 0x90a1, 0x146b: 0x8531, 0x146c: 0x8559, 0x146d: 0x8649, 0x146e: 0x8829, 0x146f: 0x8fb1,\n\t0x1470: 0x89b9, 0x1471: 0x9001, 0x1472: 0x90c9, 0x1473: 0x9101, 0x1474: 0x9139, 0x1475: 0x9171,\n\t0x1476: 0x9199, 0x1477: 0x91c1, 0x1478: 0x91e9, 0x1479: 0x9211, 0x147a: 0x9239, 0x147b: 0x9261,\n\t0x147c: 0x9289, 0x147d: 0x92b1, 0x147e: 0x92d9, 0x147f: 0x9301,\n\t// Block 0x52, offset 0x1480\n\t0x1480: 0x9329, 0x1481: 0x9351, 0x1482: 0x9379, 0x1483: 0x93a1, 0x1484: 0x93c9, 0x1485: 0x93f1,\n\t0x1486: 0x9419, 0x1487: 0x9441, 0x1488: 0x9469, 0x1489: 0x9491, 0x148a: 0x94b9, 0x148b: 0x94e1,\n\t0x148c: 0x9079, 0x148d: 0x9509, 0x148e: 0x9531, 0x148f: 0x9559, 0x1490: 0x9581, 0x1491: 0x9171,\n\t0x1492: 0x9199, 0x1493: 0x91c1, 0x1494: 0x91e9, 0x1495: 0x9211, 0x1496: 0x9239, 0x1497: 0x9261,\n\t0x1498: 0x9289, 0x1499: 0x92b1, 0x149a: 0x92d9, 0x149b: 0x9301, 0x149c: 0x9329, 0x149d: 0x9351,\n\t0x149e: 0x9379, 0x149f: 0x93a1, 0x14a0: 0x93c9, 0x14a1: 0x93f1, 0x14a2: 0x9419, 0x14a3: 0x9441,\n\t0x14a4: 0x9469, 0x14a5: 0x9491, 0x14a6: 0x94b9, 0x14a7: 0x94e1, 0x14a8: 0x9079, 0x14a9: 0x9509,\n\t0x14aa: 0x9531, 0x14ab: 0x9559, 0x14ac: 0x9581, 0x14ad: 0x9491, 0x14ae: 0x94b9, 0x14af: 0x94e1,\n\t0x14b0: 0x9079, 0x14b1: 0x9051, 0x14b2: 0x90a1, 0x14b3: 0x8211, 0x14b4: 0x8059, 0x14b5: 0x8081,\n\t0x14b6: 0x80a9, 0x14b7: 0x9491, 0x14b8: 0x94b9, 0x14b9: 0x94e1, 0x14ba: 0x8211, 0x14bb: 0x8239,\n\t0x14bc: 0x95a9, 0x14bd: 0x95a9, 0x14be: 0x0018, 0x14bf: 0x0018,\n\t// Block 0x53, offset 0x14c0\n\t0x14c0: 0x0040, 0x14c1: 0x0040, 0x14c2: 0x0040, 0x14c3: 0x0040, 0x14c4: 0x0040, 0x14c5: 0x0040,\n\t0x14c6: 0x0040, 0x14c7: 0x0040, 0x14c8: 0x0040, 0x14c9: 0x0040, 0x14ca: 0x0040, 0x14cb: 0x0040,\n\t0x14cc: 0x0040, 0x14cd: 0x0040, 0x14ce: 0x0040, 0x14cf: 0x0040, 0x14d0: 0x95d1, 0x14d1: 0x9609,\n\t0x14d2: 0x9609, 0x14d3: 0x9641, 0x14d4: 0x9679, 0x14d5: 0x96b1, 0x14d6: 0x96e9, 0x14d7: 0x9721,\n\t0x14d8: 0x9759, 0x14d9: 0x9759, 0x14da: 0x9791, 0x14db: 0x97c9, 0x14dc: 0x9801, 0x14dd: 0x9839,\n\t0x14de: 0x9871, 0x14df: 0x98a9, 0x14e0: 0x98a9, 0x14e1: 0x98e1, 0x14e2: 0x9919, 0x14e3: 0x9919,\n\t0x14e4: 0x9951, 0x14e5: 0x9951, 0x14e6: 0x9989, 0x14e7: 0x99c1, 0x14e8: 0x99c1, 0x14e9: 0x99f9,\n\t0x14ea: 0x9a31, 0x14eb: 0x9a31, 0x14ec: 0x9a69, 0x14ed: 0x9a69, 0x14ee: 0x9aa1, 0x14ef: 0x9ad9,\n\t0x14f0: 0x9ad9, 0x14f1: 0x9b11, 0x14f2: 0x9b11, 0x14f3: 0x9b49, 0x14f4: 0x9b81, 0x14f5: 0x9bb9,\n\t0x14f6: 0x9bf1, 0x14f7: 0x9bf1, 0x14f8: 0x9c29, 0x14f9: 0x9c61, 0x14fa: 0x9c99, 0x14fb: 0x9cd1,\n\t0x14fc: 0x9d09, 0x14fd: 0x9d09, 0x14fe: 0x9d41, 0x14ff: 0x9d79,\n\t// Block 0x54, offset 0x1500\n\t0x1500: 0xa949, 0x1501: 0xa981, 0x1502: 0xa9b9, 0x1503: 0xa8a1, 0x1504: 0x9bb9, 0x1505: 0x9989,\n\t0x1506: 0xa9f1, 0x1507: 0xaa29, 0x1508: 0x0040, 0x1509: 0x0040, 0x150a: 0x0040, 0x150b: 0x0040,\n\t0x150c: 0x0040, 0x150d: 0x0040, 0x150e: 0x0040, 0x150f: 0x0040, 0x1510: 0x0040, 0x1511: 0x0040,\n\t0x1512: 0x0040, 0x1513: 0x0040, 0x1514: 0x0040, 0x1515: 0x0040, 0x1516: 0x0040, 0x1517: 0x0040,\n\t0x1518: 0x0040, 0x1519: 0x0040, 0x151a: 0x0040, 0x151b: 0x0040, 0x151c: 0x0040, 0x151d: 0x0040,\n\t0x151e: 0x0040, 0x151f: 0x0040, 0x1520: 0x0040, 0x1521: 0x0040, 0x1522: 0x0040, 0x1523: 0x0040,\n\t0x1524: 0x0040, 0x1525: 0x0040, 0x1526: 0x0040, 0x1527: 0x0040, 0x1528: 0x0040, 0x1529: 0x0040,\n\t0x152a: 0x0040, 0x152b: 0x0040, 0x152c: 0x0040, 0x152d: 0x0040, 0x152e: 0x0040, 0x152f: 0x0040,\n\t0x1530: 0xaa61, 0x1531: 0xaa99, 0x1532: 0xaad1, 0x1533: 0xab19, 0x1534: 0xab61, 0x1535: 0xaba9,\n\t0x1536: 0xabf1, 0x1537: 0xac39, 0x1538: 0xac81, 0x1539: 0xacc9, 0x153a: 0xad02, 0x153b: 0xae12,\n\t0x153c: 0xae91, 0x153d: 0x0018, 0x153e: 0x0040, 0x153f: 0x0040,\n\t// Block 0x55, offset 0x1540\n\t0x1540: 0x33c0, 0x1541: 0x33c0, 0x1542: 0x33c0, 0x1543: 0x33c0, 0x1544: 0x33c0, 0x1545: 0x33c0,\n\t0x1546: 0x33c0, 0x1547: 0x33c0, 0x1548: 0x33c0, 0x1549: 0x33c0, 0x154a: 0x33c0, 0x154b: 0x33c0,\n\t0x154c: 0x33c0, 0x154d: 0x33c0, 0x154e: 0x33c0, 0x154f: 0x33c0, 0x1550: 0xaeda, 0x1551: 0x7d55,\n\t0x1552: 0x0040, 0x1553: 0xaeea, 0x1554: 0x03c2, 0x1555: 0xaefa, 0x1556: 0xaf0a, 0x1557: 0x7d75,\n\t0x1558: 0x7d95, 0x1559: 0x0040, 0x155a: 0x0040, 0x155b: 0x0040, 0x155c: 0x0040, 0x155d: 0x0040,\n\t0x155e: 0x0040, 0x155f: 0x0040, 0x1560: 0x3308, 0x1561: 0x3308, 0x1562: 0x3308, 0x1563: 0x3308,\n\t0x1564: 0x3308, 0x1565: 0x3308, 0x1566: 0x3308, 0x1567: 0x3308, 0x1568: 0x3308, 0x1569: 0x3308,\n\t0x156a: 0x3308, 0x156b: 0x3308, 0x156c: 0x3308, 0x156d: 0x3308, 0x156e: 0x3308, 0x156f: 0x3308,\n\t0x1570: 0x0040, 0x1571: 0x7db5, 0x1572: 0x7dd5, 0x1573: 0xaf1a, 0x1574: 0xaf1a, 0x1575: 0x1fd2,\n\t0x1576: 0x1fe2, 0x1577: 0xaf2a, 0x1578: 0xaf3a, 0x1579: 0x7df5, 0x157a: 0x7e15, 0x157b: 0x7e35,\n\t0x157c: 0x7df5, 0x157d: 0x7e55, 0x157e: 0x7e75, 0x157f: 0x7e55,\n\t// Block 0x56, offset 0x1580\n\t0x1580: 0x7e95, 0x1581: 0x7eb5, 0x1582: 0x7ed5, 0x1583: 0x7eb5, 0x1584: 0x7ef5, 0x1585: 0x0018,\n\t0x1586: 0x0018, 0x1587: 0xaf4a, 0x1588: 0xaf5a, 0x1589: 0x7f16, 0x158a: 0x7f36, 0x158b: 0x7f56,\n\t0x158c: 0x7f76, 0x158d: 0xaf1a, 0x158e: 0xaf1a, 0x158f: 0xaf1a, 0x1590: 0xaeda, 0x1591: 0x7f95,\n\t0x1592: 0x0040, 0x1593: 0x0040, 0x1594: 0x03c2, 0x1595: 0xaeea, 0x1596: 0xaf0a, 0x1597: 0xaefa,\n\t0x1598: 0x7fb5, 0x1599: 0x1fd2, 0x159a: 0x1fe2, 0x159b: 0xaf2a, 0x159c: 0xaf3a, 0x159d: 0x7e95,\n\t0x159e: 0x7ef5, 0x159f: 0xaf6a, 0x15a0: 0xaf7a, 0x15a1: 0xaf8a, 0x15a2: 0x1fb2, 0x15a3: 0xaf99,\n\t0x15a4: 0xafaa, 0x15a5: 0xafba, 0x15a6: 0x1fc2, 0x15a7: 0x0040, 0x15a8: 0xafca, 0x15a9: 0xafda,\n\t0x15aa: 0xafea, 0x15ab: 0xaffa, 0x15ac: 0x0040, 0x15ad: 0x0040, 0x15ae: 0x0040, 0x15af: 0x0040,\n\t0x15b0: 0x7fd6, 0x15b1: 0xb009, 0x15b2: 0x7ff6, 0x15b3: 0x0808, 0x15b4: 0x8016, 0x15b5: 0x0040,\n\t0x15b6: 0x8036, 0x15b7: 0xb031, 0x15b8: 0x8056, 0x15b9: 0xb059, 0x15ba: 0x8076, 0x15bb: 0xb081,\n\t0x15bc: 0x8096, 0x15bd: 0xb0a9, 0x15be: 0x80b6, 0x15bf: 0xb0d1,\n\t// Block 0x57, offset 0x15c0\n\t0x15c0: 0xb0f9, 0x15c1: 0xb111, 0x15c2: 0xb111, 0x15c3: 0xb129, 0x15c4: 0xb129, 0x15c5: 0xb141,\n\t0x15c6: 0xb141, 0x15c7: 0xb159, 0x15c8: 0xb159, 0x15c9: 0xb171, 0x15ca: 0xb171, 0x15cb: 0xb171,\n\t0x15cc: 0xb171, 0x15cd: 0xb189, 0x15ce: 0xb189, 0x15cf: 0xb1a1, 0x15d0: 0xb1a1, 0x15d1: 0xb1a1,\n\t0x15d2: 0xb1a1, 0x15d3: 0xb1b9, 0x15d4: 0xb1b9, 0x15d5: 0xb1d1, 0x15d6: 0xb1d1, 0x15d7: 0xb1d1,\n\t0x15d8: 0xb1d1, 0x15d9: 0xb1e9, 0x15da: 0xb1e9, 0x15db: 0xb1e9, 0x15dc: 0xb1e9, 0x15dd: 0xb201,\n\t0x15de: 0xb201, 0x15df: 0xb201, 0x15e0: 0xb201, 0x15e1: 0xb219, 0x15e2: 0xb219, 0x15e3: 0xb219,\n\t0x15e4: 0xb219, 0x15e5: 0xb231, 0x15e6: 0xb231, 0x15e7: 0xb231, 0x15e8: 0xb231, 0x15e9: 0xb249,\n\t0x15ea: 0xb249, 0x15eb: 0xb261, 0x15ec: 0xb261, 0x15ed: 0xb279, 0x15ee: 0xb279, 0x15ef: 0xb291,\n\t0x15f0: 0xb291, 0x15f1: 0xb2a9, 0x15f2: 0xb2a9, 0x15f3: 0xb2a9, 0x15f4: 0xb2a9, 0x15f5: 0xb2c1,\n\t0x15f6: 0xb2c1, 0x15f7: 0xb2c1, 0x15f8: 0xb2c1, 0x15f9: 0xb2d9, 0x15fa: 0xb2d9, 0x15fb: 0xb2d9,\n\t0x15fc: 0xb2d9, 0x15fd: 0xb2f1, 0x15fe: 0xb2f1, 0x15ff: 0xb2f1,\n\t// Block 0x58, offset 0x1600\n\t0x1600: 0xb2f1, 0x1601: 0xb309, 0x1602: 0xb309, 0x1603: 0xb309, 0x1604: 0xb309, 0x1605: 0xb321,\n\t0x1606: 0xb321, 0x1607: 0xb321, 0x1608: 0xb321, 0x1609: 0xb339, 0x160a: 0xb339, 0x160b: 0xb339,\n\t0x160c: 0xb339, 0x160d: 0xb351, 0x160e: 0xb351, 0x160f: 0xb351, 0x1610: 0xb351, 0x1611: 0xb369,\n\t0x1612: 0xb369, 0x1613: 0xb369, 0x1614: 0xb369, 0x1615: 0xb381, 0x1616: 0xb381, 0x1617: 0xb381,\n\t0x1618: 0xb381, 0x1619: 0xb399, 0x161a: 0xb399, 0x161b: 0xb399, 0x161c: 0xb399, 0x161d: 0xb3b1,\n\t0x161e: 0xb3b1, 0x161f: 0xb3b1, 0x1620: 0xb3b1, 0x1621: 0xb3c9, 0x1622: 0xb3c9, 0x1623: 0xb3c9,\n\t0x1624: 0xb3c9, 0x1625: 0xb3e1, 0x1626: 0xb3e1, 0x1627: 0xb3e1, 0x1628: 0xb3e1, 0x1629: 0xb3f9,\n\t0x162a: 0xb3f9, 0x162b: 0xb3f9, 0x162c: 0xb3f9, 0x162d: 0xb411, 0x162e: 0xb411, 0x162f: 0x7ab1,\n\t0x1630: 0x7ab1, 0x1631: 0xb429, 0x1632: 0xb429, 0x1633: 0xb429, 0x1634: 0xb429, 0x1635: 0xb441,\n\t0x1636: 0xb441, 0x1637: 0xb469, 0x1638: 0xb469, 0x1639: 0xb491, 0x163a: 0xb491, 0x163b: 0xb4b9,\n\t0x163c: 0xb4b9, 0x163d: 0x0040, 0x163e: 0x0040, 0x163f: 0x03c0,\n\t// Block 0x59, offset 0x1640\n\t0x1640: 0x0040, 0x1641: 0xaefa, 0x1642: 0xb4e2, 0x1643: 0xaf6a, 0x1644: 0xafda, 0x1645: 0xafea,\n\t0x1646: 0xaf7a, 0x1647: 0xb4f2, 0x1648: 0x1fd2, 0x1649: 0x1fe2, 0x164a: 0xaf8a, 0x164b: 0x1fb2,\n\t0x164c: 0xaeda, 0x164d: 0xaf99, 0x164e: 0x29d1, 0x164f: 0xb502, 0x1650: 0x1f41, 0x1651: 0x00c9,\n\t0x1652: 0x0069, 0x1653: 0x0079, 0x1654: 0x1f51, 0x1655: 0x1f61, 0x1656: 0x1f71, 0x1657: 0x1f81,\n\t0x1658: 0x1f91, 0x1659: 0x1fa1, 0x165a: 0xaeea, 0x165b: 0x03c2, 0x165c: 0xafaa, 0x165d: 0x1fc2,\n\t0x165e: 0xafba, 0x165f: 0xaf0a, 0x1660: 0xaffa, 0x1661: 0x0039, 0x1662: 0x0ee9, 0x1663: 0x1159,\n\t0x1664: 0x0ef9, 0x1665: 0x0f09, 0x1666: 0x1199, 0x1667: 0x0f31, 0x1668: 0x0249, 0x1669: 0x0f41,\n\t0x166a: 0x0259, 0x166b: 0x0f51, 0x166c: 0x0359, 0x166d: 0x0f61, 0x166e: 0x0f71, 0x166f: 0x00d9,\n\t0x1670: 0x0f99, 0x1671: 0x2039, 0x1672: 0x0269, 0x1673: 0x01d9, 0x1674: 0x0fa9, 0x1675: 0x0fb9,\n\t0x1676: 0x1089, 0x1677: 0x0279, 0x1678: 0x0369, 0x1679: 0x0289, 0x167a: 0x13d1, 0x167b: 0xaf4a,\n\t0x167c: 0xafca, 0x167d: 0xaf5a, 0x167e: 0xb512, 0x167f: 0xaf1a,\n\t// Block 0x5a, offset 0x1680\n\t0x1680: 0x1caa, 0x1681: 0x0039, 0x1682: 0x0ee9, 0x1683: 0x1159, 0x1684: 0x0ef9, 0x1685: 0x0f09,\n\t0x1686: 0x1199, 0x1687: 0x0f31, 0x1688: 0x0249, 0x1689: 0x0f41, 0x168a: 0x0259, 0x168b: 0x0f51,\n\t0x168c: 0x0359, 0x168d: 0x0f61, 0x168e: 0x0f71, 0x168f: 0x00d9, 0x1690: 0x0f99, 0x1691: 0x2039,\n\t0x1692: 0x0269, 0x1693: 0x01d9, 0x1694: 0x0fa9, 0x1695: 0x0fb9, 0x1696: 0x1089, 0x1697: 0x0279,\n\t0x1698: 0x0369, 0x1699: 0x0289, 0x169a: 0x13d1, 0x169b: 0xaf2a, 0x169c: 0xb522, 0x169d: 0xaf3a,\n\t0x169e: 0xb532, 0x169f: 0x80d5, 0x16a0: 0x80f5, 0x16a1: 0x29d1, 0x16a2: 0x8115, 0x16a3: 0x8115,\n\t0x16a4: 0x8135, 0x16a5: 0x8155, 0x16a6: 0x8175, 0x16a7: 0x8195, 0x16a8: 0x81b5, 0x16a9: 0x81d5,\n\t0x16aa: 0x81f5, 0x16ab: 0x8215, 0x16ac: 0x8235, 0x16ad: 0x8255, 0x16ae: 0x8275, 0x16af: 0x8295,\n\t0x16b0: 0x82b5, 0x16b1: 0x82d5, 0x16b2: 0x82f5, 0x16b3: 0x8315, 0x16b4: 0x8335, 0x16b5: 0x8355,\n\t0x16b6: 0x8375, 0x16b7: 0x8395, 0x16b8: 0x83b5, 0x16b9: 0x83d5, 0x16ba: 0x83f5, 0x16bb: 0x8415,\n\t0x16bc: 0x81b5, 0x16bd: 0x8435, 0x16be: 0x8455, 0x16bf: 0x8215,\n\t// Block 0x5b, offset 0x16c0\n\t0x16c0: 0x8475, 0x16c1: 0x8495, 0x16c2: 0x84b5, 0x16c3: 0x84d5, 0x16c4: 0x84f5, 0x16c5: 0x8515,\n\t0x16c6: 0x8535, 0x16c7: 0x8555, 0x16c8: 0x84d5, 0x16c9: 0x8575, 0x16ca: 0x84d5, 0x16cb: 0x8595,\n\t0x16cc: 0x8595, 0x16cd: 0x85b5, 0x16ce: 0x85b5, 0x16cf: 0x85d5, 0x16d0: 0x8515, 0x16d1: 0x85f5,\n\t0x16d2: 0x8615, 0x16d3: 0x85f5, 0x16d4: 0x8635, 0x16d5: 0x8615, 0x16d6: 0x8655, 0x16d7: 0x8655,\n\t0x16d8: 0x8675, 0x16d9: 0x8675, 0x16da: 0x8695, 0x16db: 0x8695, 0x16dc: 0x8615, 0x16dd: 0x8115,\n\t0x16de: 0x86b5, 0x16df: 0x86d5, 0x16e0: 0x0040, 0x16e1: 0x86f5, 0x16e2: 0x8715, 0x16e3: 0x8735,\n\t0x16e4: 0x8755, 0x16e5: 0x8735, 0x16e6: 0x8775, 0x16e7: 0x8795, 0x16e8: 0x87b5, 0x16e9: 0x87b5,\n\t0x16ea: 0x87d5, 0x16eb: 0x87d5, 0x16ec: 0x87f5, 0x16ed: 0x87f5, 0x16ee: 0x87d5, 0x16ef: 0x87d5,\n\t0x16f0: 0x8815, 0x16f1: 0x8835, 0x16f2: 0x8855, 0x16f3: 0x8875, 0x16f4: 0x8895, 0x16f5: 0x88b5,\n\t0x16f6: 0x88b5, 0x16f7: 0x88b5, 0x16f8: 0x88d5, 0x16f9: 0x88d5, 0x16fa: 0x88d5, 0x16fb: 0x88d5,\n\t0x16fc: 0x87b5, 0x16fd: 0x87b5, 0x16fe: 0x87b5, 0x16ff: 0x0040,\n\t// Block 0x5c, offset 0x1700\n\t0x1700: 0x0040, 0x1701: 0x0040, 0x1702: 0x8715, 0x1703: 0x86f5, 0x1704: 0x88f5, 0x1705: 0x86f5,\n\t0x1706: 0x8715, 0x1707: 0x86f5, 0x1708: 0x0040, 0x1709: 0x0040, 0x170a: 0x8915, 0x170b: 0x8715,\n\t0x170c: 0x8935, 0x170d: 0x88f5, 0x170e: 0x8935, 0x170f: 0x8715, 0x1710: 0x0040, 0x1711: 0x0040,\n\t0x1712: 0x8955, 0x1713: 0x8975, 0x1714: 0x8875, 0x1715: 0x8935, 0x1716: 0x88f5, 0x1717: 0x8935,\n\t0x1718: 0x0040, 0x1719: 0x0040, 0x171a: 0x8995, 0x171b: 0x89b5, 0x171c: 0x8995, 0x171d: 0x0040,\n\t0x171e: 0x0040, 0x171f: 0x0040, 0x1720: 0xb541, 0x1721: 0xb559, 0x1722: 0xb571, 0x1723: 0x89d6,\n\t0x1724: 0xb589, 0x1725: 0xb5a1, 0x1726: 0x89f5, 0x1727: 0x0040, 0x1728: 0x8a15, 0x1729: 0x8a35,\n\t0x172a: 0x8a55, 0x172b: 0x8a35, 0x172c: 0x8a75, 0x172d: 0x8a95, 0x172e: 0x8ab5, 0x172f: 0x0040,\n\t0x1730: 0x0040, 0x1731: 0x0040, 0x1732: 0x0040, 0x1733: 0x0040, 0x1734: 0x0040, 0x1735: 0x0040,\n\t0x1736: 0x0040, 0x1737: 0x0040, 0x1738: 0x0040, 0x1739: 0x0340, 0x173a: 0x0340, 0x173b: 0x0340,\n\t0x173c: 0x0040, 0x173d: 0x0040, 0x173e: 0x0040, 0x173f: 0x0040,\n\t// Block 0x5d, offset 0x1740\n\t0x1740: 0x0a08, 0x1741: 0x0a08, 0x1742: 0x0a08, 0x1743: 0x0a08, 0x1744: 0x0a08, 0x1745: 0x0c08,\n\t0x1746: 0x0808, 0x1747: 0x0c08, 0x1748: 0x0818, 0x1749: 0x0c08, 0x174a: 0x0c08, 0x174b: 0x0808,\n\t0x174c: 0x0808, 0x174d: 0x0908, 0x174e: 0x0c08, 0x174f: 0x0c08, 0x1750: 0x0c08, 0x1751: 0x0c08,\n\t0x1752: 0x0c08, 0x1753: 0x0a08, 0x1754: 0x0a08, 0x1755: 0x0a08, 0x1756: 0x0a08, 0x1757: 0x0908,\n\t0x1758: 0x0a08, 0x1759: 0x0a08, 0x175a: 0x0a08, 0x175b: 0x0a08, 0x175c: 0x0a08, 0x175d: 0x0c08,\n\t0x175e: 0x0a08, 0x175f: 0x0a08, 0x1760: 0x0a08, 0x1761: 0x0c08, 0x1762: 0x0808, 0x1763: 0x0808,\n\t0x1764: 0x0c08, 0x1765: 0x3308, 0x1766: 0x3308, 0x1767: 0x0040, 0x1768: 0x0040, 0x1769: 0x0040,\n\t0x176a: 0x0040, 0x176b: 0x0a18, 0x176c: 0x0a18, 0x176d: 0x0a18, 0x176e: 0x0a18, 0x176f: 0x0c18,\n\t0x1770: 0x0818, 0x1771: 0x0818, 0x1772: 0x0818, 0x1773: 0x0818, 0x1774: 0x0818, 0x1775: 0x0818,\n\t0x1776: 0x0818, 0x1777: 0x0040, 0x1778: 0x0040, 0x1779: 0x0040, 0x177a: 0x0040, 0x177b: 0x0040,\n\t0x177c: 0x0040, 0x177d: 0x0040, 0x177e: 0x0040, 0x177f: 0x0040,\n\t// Block 0x5e, offset 0x1780\n\t0x1780: 0x0a08, 0x1781: 0x0c08, 0x1782: 0x0a08, 0x1783: 0x0c08, 0x1784: 0x0c08, 0x1785: 0x0c08,\n\t0x1786: 0x0a08, 0x1787: 0x0a08, 0x1788: 0x0a08, 0x1789: 0x0c08, 0x178a: 0x0a08, 0x178b: 0x0a08,\n\t0x178c: 0x0c08, 0x178d: 0x0a08, 0x178e: 0x0c08, 0x178f: 0x0c08, 0x1790: 0x0a08, 0x1791: 0x0c08,\n\t0x1792: 0x0040, 0x1793: 0x0040, 0x1794: 0x0040, 0x1795: 0x0040, 0x1796: 0x0040, 0x1797: 0x0040,\n\t0x1798: 0x0040, 0x1799: 0x0818, 0x179a: 0x0818, 0x179b: 0x0818, 0x179c: 0x0818, 0x179d: 0x0040,\n\t0x179e: 0x0040, 0x179f: 0x0040, 0x17a0: 0x0040, 0x17a1: 0x0040, 0x17a2: 0x0040, 0x17a3: 0x0040,\n\t0x17a4: 0x0040, 0x17a5: 0x0040, 0x17a6: 0x0040, 0x17a7: 0x0040, 0x17a8: 0x0040, 0x17a9: 0x0c18,\n\t0x17aa: 0x0c18, 0x17ab: 0x0c18, 0x17ac: 0x0c18, 0x17ad: 0x0a18, 0x17ae: 0x0a18, 0x17af: 0x0818,\n\t0x17b0: 0x0040, 0x17b1: 0x0040, 0x17b2: 0x0040, 0x17b3: 0x0040, 0x17b4: 0x0040, 0x17b5: 0x0040,\n\t0x17b6: 0x0040, 0x17b7: 0x0040, 0x17b8: 0x0040, 0x17b9: 0x0040, 0x17ba: 0x0040, 0x17bb: 0x0040,\n\t0x17bc: 0x0040, 0x17bd: 0x0040, 0x17be: 0x0040, 0x17bf: 0x0040,\n\t// Block 0x5f, offset 0x17c0\n\t0x17c0: 0x3308, 0x17c1: 0x3308, 0x17c2: 0x3008, 0x17c3: 0x3008, 0x17c4: 0x0040, 0x17c5: 0x0008,\n\t0x17c6: 0x0008, 0x17c7: 0x0008, 0x17c8: 0x0008, 0x17c9: 0x0008, 0x17ca: 0x0008, 0x17cb: 0x0008,\n\t0x17cc: 0x0008, 0x17cd: 0x0040, 0x17ce: 0x0040, 0x17cf: 0x0008, 0x17d0: 0x0008, 0x17d1: 0x0040,\n\t0x17d2: 0x0040, 0x17d3: 0x0008, 0x17d4: 0x0008, 0x17d5: 0x0008, 0x17d6: 0x0008, 0x17d7: 0x0008,\n\t0x17d8: 0x0008, 0x17d9: 0x0008, 0x17da: 0x0008, 0x17db: 0x0008, 0x17dc: 0x0008, 0x17dd: 0x0008,\n\t0x17de: 0x0008, 0x17df: 0x0008, 0x17e0: 0x0008, 0x17e1: 0x0008, 0x17e2: 0x0008, 0x17e3: 0x0008,\n\t0x17e4: 0x0008, 0x17e5: 0x0008, 0x17e6: 0x0008, 0x17e7: 0x0008, 0x17e8: 0x0008, 0x17e9: 0x0040,\n\t0x17ea: 0x0008, 0x17eb: 0x0008, 0x17ec: 0x0008, 0x17ed: 0x0008, 0x17ee: 0x0008, 0x17ef: 0x0008,\n\t0x17f0: 0x0008, 0x17f1: 0x0040, 0x17f2: 0x0008, 0x17f3: 0x0008, 0x17f4: 0x0040, 0x17f5: 0x0008,\n\t0x17f6: 0x0008, 0x17f7: 0x0008, 0x17f8: 0x0008, 0x17f9: 0x0008, 0x17fa: 0x0040, 0x17fb: 0x3308,\n\t0x17fc: 0x3308, 0x17fd: 0x0008, 0x17fe: 0x3008, 0x17ff: 0x3008,\n\t// Block 0x60, offset 0x1800\n\t0x1800: 0x3308, 0x1801: 0x3008, 0x1802: 0x3008, 0x1803: 0x3008, 0x1804: 0x3008, 0x1805: 0x0040,\n\t0x1806: 0x0040, 0x1807: 0x3008, 0x1808: 0x3008, 0x1809: 0x0040, 0x180a: 0x0040, 0x180b: 0x3008,\n\t0x180c: 0x3008, 0x180d: 0x3808, 0x180e: 0x0040, 0x180f: 0x0040, 0x1810: 0x0008, 0x1811: 0x0040,\n\t0x1812: 0x0040, 0x1813: 0x0040, 0x1814: 0x0040, 0x1815: 0x0040, 0x1816: 0x0040, 0x1817: 0x3008,\n\t0x1818: 0x0040, 0x1819: 0x0040, 0x181a: 0x0040, 0x181b: 0x0040, 0x181c: 0x0040, 0x181d: 0x0008,\n\t0x181e: 0x0008, 0x181f: 0x0008, 0x1820: 0x0008, 0x1821: 0x0008, 0x1822: 0x3008, 0x1823: 0x3008,\n\t0x1824: 0x0040, 0x1825: 0x0040, 0x1826: 0x3308, 0x1827: 0x3308, 0x1828: 0x3308, 0x1829: 0x3308,\n\t0x182a: 0x3308, 0x182b: 0x3308, 0x182c: 0x3308, 0x182d: 0x0040, 0x182e: 0x0040, 0x182f: 0x0040,\n\t0x1830: 0x3308, 0x1831: 0x3308, 0x1832: 0x3308, 0x1833: 0x3308, 0x1834: 0x3308, 0x1835: 0x0040,\n\t0x1836: 0x0040, 0x1837: 0x0040, 0x1838: 0x0040, 0x1839: 0x0040, 0x183a: 0x0040, 0x183b: 0x0040,\n\t0x183c: 0x0040, 0x183d: 0x0040, 0x183e: 0x0040, 0x183f: 0x0040,\n\t// Block 0x61, offset 0x1840\n\t0x1840: 0x0039, 0x1841: 0x0ee9, 0x1842: 0x1159, 0x1843: 0x0ef9, 0x1844: 0x0f09, 0x1845: 0x1199,\n\t0x1846: 0x0f31, 0x1847: 0x0249, 0x1848: 0x0f41, 0x1849: 0x0259, 0x184a: 0x0f51, 0x184b: 0x0359,\n\t0x184c: 0x0f61, 0x184d: 0x0f71, 0x184e: 0x00d9, 0x184f: 0x0f99, 0x1850: 0x2039, 0x1851: 0x0269,\n\t0x1852: 0x01d9, 0x1853: 0x0fa9, 0x1854: 0x0fb9, 0x1855: 0x1089, 0x1856: 0x0279, 0x1857: 0x0369,\n\t0x1858: 0x0289, 0x1859: 0x13d1, 0x185a: 0x0039, 0x185b: 0x0ee9, 0x185c: 0x1159, 0x185d: 0x0ef9,\n\t0x185e: 0x0f09, 0x185f: 0x1199, 0x1860: 0x0f31, 0x1861: 0x0249, 0x1862: 0x0f41, 0x1863: 0x0259,\n\t0x1864: 0x0f51, 0x1865: 0x0359, 0x1866: 0x0f61, 0x1867: 0x0f71, 0x1868: 0x00d9, 0x1869: 0x0f99,\n\t0x186a: 0x2039, 0x186b: 0x0269, 0x186c: 0x01d9, 0x186d: 0x0fa9, 0x186e: 0x0fb9, 0x186f: 0x1089,\n\t0x1870: 0x0279, 0x1871: 0x0369, 0x1872: 0x0289, 0x1873: 0x13d1, 0x1874: 0x0039, 0x1875: 0x0ee9,\n\t0x1876: 0x1159, 0x1877: 0x0ef9, 0x1878: 0x0f09, 0x1879: 0x1199, 0x187a: 0x0f31, 0x187b: 0x0249,\n\t0x187c: 0x0f41, 0x187d: 0x0259, 0x187e: 0x0f51, 0x187f: 0x0359,\n\t// Block 0x62, offset 0x1880\n\t0x1880: 0x0f61, 0x1881: 0x0f71, 0x1882: 0x00d9, 0x1883: 0x0f99, 0x1884: 0x2039, 0x1885: 0x0269,\n\t0x1886: 0x01d9, 0x1887: 0x0fa9, 0x1888: 0x0fb9, 0x1889: 0x1089, 0x188a: 0x0279, 0x188b: 0x0369,\n\t0x188c: 0x0289, 0x188d: 0x13d1, 0x188e: 0x0039, 0x188f: 0x0ee9, 0x1890: 0x1159, 0x1891: 0x0ef9,\n\t0x1892: 0x0f09, 0x1893: 0x1199, 0x1894: 0x0f31, 0x1895: 0x0040, 0x1896: 0x0f41, 0x1897: 0x0259,\n\t0x1898: 0x0f51, 0x1899: 0x0359, 0x189a: 0x0f61, 0x189b: 0x0f71, 0x189c: 0x00d9, 0x189d: 0x0f99,\n\t0x189e: 0x2039, 0x189f: 0x0269, 0x18a0: 0x01d9, 0x18a1: 0x0fa9, 0x18a2: 0x0fb9, 0x18a3: 0x1089,\n\t0x18a4: 0x0279, 0x18a5: 0x0369, 0x18a6: 0x0289, 0x18a7: 0x13d1, 0x18a8: 0x0039, 0x18a9: 0x0ee9,\n\t0x18aa: 0x1159, 0x18ab: 0x0ef9, 0x18ac: 0x0f09, 0x18ad: 0x1199, 0x18ae: 0x0f31, 0x18af: 0x0249,\n\t0x18b0: 0x0f41, 0x18b1: 0x0259, 0x18b2: 0x0f51, 0x18b3: 0x0359, 0x18b4: 0x0f61, 0x18b5: 0x0f71,\n\t0x18b6: 0x00d9, 0x18b7: 0x0f99, 0x18b8: 0x2039, 0x18b9: 0x0269, 0x18ba: 0x01d9, 0x18bb: 0x0fa9,\n\t0x18bc: 0x0fb9, 0x18bd: 0x1089, 0x18be: 0x0279, 0x18bf: 0x0369,\n\t// Block 0x63, offset 0x18c0\n\t0x18c0: 0x0289, 0x18c1: 0x13d1, 0x18c2: 0x0039, 0x18c3: 0x0ee9, 0x18c4: 0x1159, 0x18c5: 0x0ef9,\n\t0x18c6: 0x0f09, 0x18c7: 0x1199, 0x18c8: 0x0f31, 0x18c9: 0x0249, 0x18ca: 0x0f41, 0x18cb: 0x0259,\n\t0x18cc: 0x0f51, 0x18cd: 0x0359, 0x18ce: 0x0f61, 0x18cf: 0x0f71, 0x18d0: 0x00d9, 0x18d1: 0x0f99,\n\t0x18d2: 0x2039, 0x18d3: 0x0269, 0x18d4: 0x01d9, 0x18d5: 0x0fa9, 0x18d6: 0x0fb9, 0x18d7: 0x1089,\n\t0x18d8: 0x0279, 0x18d9: 0x0369, 0x18da: 0x0289, 0x18db: 0x13d1, 0x18dc: 0x0039, 0x18dd: 0x0040,\n\t0x18de: 0x1159, 0x18df: 0x0ef9, 0x18e0: 0x0040, 0x18e1: 0x0040, 0x18e2: 0x0f31, 0x18e3: 0x0040,\n\t0x18e4: 0x0040, 0x18e5: 0x0259, 0x18e6: 0x0f51, 0x18e7: 0x0040, 0x18e8: 0x0040, 0x18e9: 0x0f71,\n\t0x18ea: 0x00d9, 0x18eb: 0x0f99, 0x18ec: 0x2039, 0x18ed: 0x0040, 0x18ee: 0x01d9, 0x18ef: 0x0fa9,\n\t0x18f0: 0x0fb9, 0x18f1: 0x1089, 0x18f2: 0x0279, 0x18f3: 0x0369, 0x18f4: 0x0289, 0x18f5: 0x13d1,\n\t0x18f6: 0x0039, 0x18f7: 0x0ee9, 0x18f8: 0x1159, 0x18f9: 0x0ef9, 0x18fa: 0x0040, 0x18fb: 0x1199,\n\t0x18fc: 0x0040, 0x18fd: 0x0249, 0x18fe: 0x0f41, 0x18ff: 0x0259,\n\t// Block 0x64, offset 0x1900\n\t0x1900: 0x0f51, 0x1901: 0x0359, 0x1902: 0x0f61, 0x1903: 0x0f71, 0x1904: 0x0040, 0x1905: 0x0f99,\n\t0x1906: 0x2039, 0x1907: 0x0269, 0x1908: 0x01d9, 0x1909: 0x0fa9, 0x190a: 0x0fb9, 0x190b: 0x1089,\n\t0x190c: 0x0279, 0x190d: 0x0369, 0x190e: 0x0289, 0x190f: 0x13d1, 0x1910: 0x0039, 0x1911: 0x0ee9,\n\t0x1912: 0x1159, 0x1913: 0x0ef9, 0x1914: 0x0f09, 0x1915: 0x1199, 0x1916: 0x0f31, 0x1917: 0x0249,\n\t0x1918: 0x0f41, 0x1919: 0x0259, 0x191a: 0x0f51, 0x191b: 0x0359, 0x191c: 0x0f61, 0x191d: 0x0f71,\n\t0x191e: 0x00d9, 0x191f: 0x0f99, 0x1920: 0x2039, 0x1921: 0x0269, 0x1922: 0x01d9, 0x1923: 0x0fa9,\n\t0x1924: 0x0fb9, 0x1925: 0x1089, 0x1926: 0x0279, 0x1927: 0x0369, 0x1928: 0x0289, 0x1929: 0x13d1,\n\t0x192a: 0x0039, 0x192b: 0x0ee9, 0x192c: 0x1159, 0x192d: 0x0ef9, 0x192e: 0x0f09, 0x192f: 0x1199,\n\t0x1930: 0x0f31, 0x1931: 0x0249, 0x1932: 0x0f41, 0x1933: 0x0259, 0x1934: 0x0f51, 0x1935: 0x0359,\n\t0x1936: 0x0f61, 0x1937: 0x0f71, 0x1938: 0x00d9, 0x1939: 0x0f99, 0x193a: 0x2039, 0x193b: 0x0269,\n\t0x193c: 0x01d9, 0x193d: 0x0fa9, 0x193e: 0x0fb9, 0x193f: 0x1089,\n\t// Block 0x65, offset 0x1940\n\t0x1940: 0x0279, 0x1941: 0x0369, 0x1942: 0x0289, 0x1943: 0x13d1, 0x1944: 0x0039, 0x1945: 0x0ee9,\n\t0x1946: 0x0040, 0x1947: 0x0ef9, 0x1948: 0x0f09, 0x1949: 0x1199, 0x194a: 0x0f31, 0x194b: 0x0040,\n\t0x194c: 0x0040, 0x194d: 0x0259, 0x194e: 0x0f51, 0x194f: 0x0359, 0x1950: 0x0f61, 0x1951: 0x0f71,\n\t0x1952: 0x00d9, 0x1953: 0x0f99, 0x1954: 0x2039, 0x1955: 0x0040, 0x1956: 0x01d9, 0x1957: 0x0fa9,\n\t0x1958: 0x0fb9, 0x1959: 0x1089, 0x195a: 0x0279, 0x195b: 0x0369, 0x195c: 0x0289, 0x195d: 0x0040,\n\t0x195e: 0x0039, 0x195f: 0x0ee9, 0x1960: 0x1159, 0x1961: 0x0ef9, 0x1962: 0x0f09, 0x1963: 0x1199,\n\t0x1964: 0x0f31, 0x1965: 0x0249, 0x1966: 0x0f41, 0x1967: 0x0259, 0x1968: 0x0f51, 0x1969: 0x0359,\n\t0x196a: 0x0f61, 0x196b: 0x0f71, 0x196c: 0x00d9, 0x196d: 0x0f99, 0x196e: 0x2039, 0x196f: 0x0269,\n\t0x1970: 0x01d9, 0x1971: 0x0fa9, 0x1972: 0x0fb9, 0x1973: 0x1089, 0x1974: 0x0279, 0x1975: 0x0369,\n\t0x1976: 0x0289, 0x1977: 0x13d1, 0x1978: 0x0039, 0x1979: 0x0ee9, 0x197a: 0x0040, 0x197b: 0x0ef9,\n\t0x197c: 0x0f09, 0x197d: 0x1199, 0x197e: 0x0f31, 0x197f: 0x0040,\n\t// Block 0x66, offset 0x1980\n\t0x1980: 0x0f41, 0x1981: 0x0259, 0x1982: 0x0f51, 0x1983: 0x0359, 0x1984: 0x0f61, 0x1985: 0x0040,\n\t0x1986: 0x00d9, 0x1987: 0x0040, 0x1988: 0x0040, 0x1989: 0x0040, 0x198a: 0x01d9, 0x198b: 0x0fa9,\n\t0x198c: 0x0fb9, 0x198d: 0x1089, 0x198e: 0x0279, 0x198f: 0x0369, 0x1990: 0x0289, 0x1991: 0x0040,\n\t0x1992: 0x0039, 0x1993: 0x0ee9, 0x1994: 0x1159, 0x1995: 0x0ef9, 0x1996: 0x0f09, 0x1997: 0x1199,\n\t0x1998: 0x0f31, 0x1999: 0x0249, 0x199a: 0x0f41, 0x199b: 0x0259, 0x199c: 0x0f51, 0x199d: 0x0359,\n\t0x199e: 0x0f61, 0x199f: 0x0f71, 0x19a0: 0x00d9, 0x19a1: 0x0f99, 0x19a2: 0x2039, 0x19a3: 0x0269,\n\t0x19a4: 0x01d9, 0x19a5: 0x0fa9, 0x19a6: 0x0fb9, 0x19a7: 0x1089, 0x19a8: 0x0279, 0x19a9: 0x0369,\n\t0x19aa: 0x0289, 0x19ab: 0x13d1, 0x19ac: 0x0039, 0x19ad: 0x0ee9, 0x19ae: 0x1159, 0x19af: 0x0ef9,\n\t0x19b0: 0x0f09, 0x19b1: 0x1199, 0x19b2: 0x0f31, 0x19b3: 0x0249, 0x19b4: 0x0f41, 0x19b5: 0x0259,\n\t0x19b6: 0x0f51, 0x19b7: 0x0359, 0x19b8: 0x0f61, 0x19b9: 0x0f71, 0x19ba: 0x00d9, 0x19bb: 0x0f99,\n\t0x19bc: 0x2039, 0x19bd: 0x0269, 0x19be: 0x01d9, 0x19bf: 0x0fa9,\n\t// Block 0x67, offset 0x19c0\n\t0x19c0: 0x0fb9, 0x19c1: 0x1089, 0x19c2: 0x0279, 0x19c3: 0x0369, 0x19c4: 0x0289, 0x19c5: 0x13d1,\n\t0x19c6: 0x0039, 0x19c7: 0x0ee9, 0x19c8: 0x1159, 0x19c9: 0x0ef9, 0x19ca: 0x0f09, 0x19cb: 0x1199,\n\t0x19cc: 0x0f31, 0x19cd: 0x0249, 0x19ce: 0x0f41, 0x19cf: 0x0259, 0x19d0: 0x0f51, 0x19d1: 0x0359,\n\t0x19d2: 0x0f61, 0x19d3: 0x0f71, 0x19d4: 0x00d9, 0x19d5: 0x0f99, 0x19d6: 0x2039, 0x19d7: 0x0269,\n\t0x19d8: 0x01d9, 0x19d9: 0x0fa9, 0x19da: 0x0fb9, 0x19db: 0x1089, 0x19dc: 0x0279, 0x19dd: 0x0369,\n\t0x19de: 0x0289, 0x19df: 0x13d1, 0x19e0: 0x0039, 0x19e1: 0x0ee9, 0x19e2: 0x1159, 0x19e3: 0x0ef9,\n\t0x19e4: 0x0f09, 0x19e5: 0x1199, 0x19e6: 0x0f31, 0x19e7: 0x0249, 0x19e8: 0x0f41, 0x19e9: 0x0259,\n\t0x19ea: 0x0f51, 0x19eb: 0x0359, 0x19ec: 0x0f61, 0x19ed: 0x0f71, 0x19ee: 0x00d9, 0x19ef: 0x0f99,\n\t0x19f0: 0x2039, 0x19f1: 0x0269, 0x19f2: 0x01d9, 0x19f3: 0x0fa9, 0x19f4: 0x0fb9, 0x19f5: 0x1089,\n\t0x19f6: 0x0279, 0x19f7: 0x0369, 0x19f8: 0x0289, 0x19f9: 0x13d1, 0x19fa: 0x0039, 0x19fb: 0x0ee9,\n\t0x19fc: 0x1159, 0x19fd: 0x0ef9, 0x19fe: 0x0f09, 0x19ff: 0x1199,\n\t// Block 0x68, offset 0x1a00\n\t0x1a00: 0x0f31, 0x1a01: 0x0249, 0x1a02: 0x0f41, 0x1a03: 0x0259, 0x1a04: 0x0f51, 0x1a05: 0x0359,\n\t0x1a06: 0x0f61, 0x1a07: 0x0f71, 0x1a08: 0x00d9, 0x1a09: 0x0f99, 0x1a0a: 0x2039, 0x1a0b: 0x0269,\n\t0x1a0c: 0x01d9, 0x1a0d: 0x0fa9, 0x1a0e: 0x0fb9, 0x1a0f: 0x1089, 0x1a10: 0x0279, 0x1a11: 0x0369,\n\t0x1a12: 0x0289, 0x1a13: 0x13d1, 0x1a14: 0x0039, 0x1a15: 0x0ee9, 0x1a16: 0x1159, 0x1a17: 0x0ef9,\n\t0x1a18: 0x0f09, 0x1a19: 0x1199, 0x1a1a: 0x0f31, 0x1a1b: 0x0249, 0x1a1c: 0x0f41, 0x1a1d: 0x0259,\n\t0x1a1e: 0x0f51, 0x1a1f: 0x0359, 0x1a20: 0x0f61, 0x1a21: 0x0f71, 0x1a22: 0x00d9, 0x1a23: 0x0f99,\n\t0x1a24: 0x2039, 0x1a25: 0x0269, 0x1a26: 0x01d9, 0x1a27: 0x0fa9, 0x1a28: 0x0fb9, 0x1a29: 0x1089,\n\t0x1a2a: 0x0279, 0x1a2b: 0x0369, 0x1a2c: 0x0289, 0x1a2d: 0x13d1, 0x1a2e: 0x0039, 0x1a2f: 0x0ee9,\n\t0x1a30: 0x1159, 0x1a31: 0x0ef9, 0x1a32: 0x0f09, 0x1a33: 0x1199, 0x1a34: 0x0f31, 0x1a35: 0x0249,\n\t0x1a36: 0x0f41, 0x1a37: 0x0259, 0x1a38: 0x0f51, 0x1a39: 0x0359, 0x1a3a: 0x0f61, 0x1a3b: 0x0f71,\n\t0x1a3c: 0x00d9, 0x1a3d: 0x0f99, 0x1a3e: 0x2039, 0x1a3f: 0x0269,\n\t// Block 0x69, offset 0x1a40\n\t0x1a40: 0x01d9, 0x1a41: 0x0fa9, 0x1a42: 0x0fb9, 0x1a43: 0x1089, 0x1a44: 0x0279, 0x1a45: 0x0369,\n\t0x1a46: 0x0289, 0x1a47: 0x13d1, 0x1a48: 0x0039, 0x1a49: 0x0ee9, 0x1a4a: 0x1159, 0x1a4b: 0x0ef9,\n\t0x1a4c: 0x0f09, 0x1a4d: 0x1199, 0x1a4e: 0x0f31, 0x1a4f: 0x0249, 0x1a50: 0x0f41, 0x1a51: 0x0259,\n\t0x1a52: 0x0f51, 0x1a53: 0x0359, 0x1a54: 0x0f61, 0x1a55: 0x0f71, 0x1a56: 0x00d9, 0x1a57: 0x0f99,\n\t0x1a58: 0x2039, 0x1a59: 0x0269, 0x1a5a: 0x01d9, 0x1a5b: 0x0fa9, 0x1a5c: 0x0fb9, 0x1a5d: 0x1089,\n\t0x1a5e: 0x0279, 0x1a5f: 0x0369, 0x1a60: 0x0289, 0x1a61: 0x13d1, 0x1a62: 0x0039, 0x1a63: 0x0ee9,\n\t0x1a64: 0x1159, 0x1a65: 0x0ef9, 0x1a66: 0x0f09, 0x1a67: 0x1199, 0x1a68: 0x0f31, 0x1a69: 0x0249,\n\t0x1a6a: 0x0f41, 0x1a6b: 0x0259, 0x1a6c: 0x0f51, 0x1a6d: 0x0359, 0x1a6e: 0x0f61, 0x1a6f: 0x0f71,\n\t0x1a70: 0x00d9, 0x1a71: 0x0f99, 0x1a72: 0x2039, 0x1a73: 0x0269, 0x1a74: 0x01d9, 0x1a75: 0x0fa9,\n\t0x1a76: 0x0fb9, 0x1a77: 0x1089, 0x1a78: 0x0279, 0x1a79: 0x0369, 0x1a7a: 0x0289, 0x1a7b: 0x13d1,\n\t0x1a7c: 0x0039, 0x1a7d: 0x0ee9, 0x1a7e: 0x1159, 0x1a7f: 0x0ef9,\n\t// Block 0x6a, offset 0x1a80\n\t0x1a80: 0x0f09, 0x1a81: 0x1199, 0x1a82: 0x0f31, 0x1a83: 0x0249, 0x1a84: 0x0f41, 0x1a85: 0x0259,\n\t0x1a86: 0x0f51, 0x1a87: 0x0359, 0x1a88: 0x0f61, 0x1a89: 0x0f71, 0x1a8a: 0x00d9, 0x1a8b: 0x0f99,\n\t0x1a8c: 0x2039, 0x1a8d: 0x0269, 0x1a8e: 0x01d9, 0x1a8f: 0x0fa9, 0x1a90: 0x0fb9, 0x1a91: 0x1089,\n\t0x1a92: 0x0279, 0x1a93: 0x0369, 0x1a94: 0x0289, 0x1a95: 0x13d1, 0x1a96: 0x0039, 0x1a97: 0x0ee9,\n\t0x1a98: 0x1159, 0x1a99: 0x0ef9, 0x1a9a: 0x0f09, 0x1a9b: 0x1199, 0x1a9c: 0x0f31, 0x1a9d: 0x0249,\n\t0x1a9e: 0x0f41, 0x1a9f: 0x0259, 0x1aa0: 0x0f51, 0x1aa1: 0x0359, 0x1aa2: 0x0f61, 0x1aa3: 0x0f71,\n\t0x1aa4: 0x00d9, 0x1aa5: 0x0f99, 0x1aa6: 0x2039, 0x1aa7: 0x0269, 0x1aa8: 0x01d9, 0x1aa9: 0x0fa9,\n\t0x1aaa: 0x0fb9, 0x1aab: 0x1089, 0x1aac: 0x0279, 0x1aad: 0x0369, 0x1aae: 0x0289, 0x1aaf: 0x13d1,\n\t0x1ab0: 0x0039, 0x1ab1: 0x0ee9, 0x1ab2: 0x1159, 0x1ab3: 0x0ef9, 0x1ab4: 0x0f09, 0x1ab5: 0x1199,\n\t0x1ab6: 0x0f31, 0x1ab7: 0x0249, 0x1ab8: 0x0f41, 0x1ab9: 0x0259, 0x1aba: 0x0f51, 0x1abb: 0x0359,\n\t0x1abc: 0x0f61, 0x1abd: 0x0f71, 0x1abe: 0x00d9, 0x1abf: 0x0f99,\n\t// Block 0x6b, offset 0x1ac0\n\t0x1ac0: 0x2039, 0x1ac1: 0x0269, 0x1ac2: 0x01d9, 0x1ac3: 0x0fa9, 0x1ac4: 0x0fb9, 0x1ac5: 0x1089,\n\t0x1ac6: 0x0279, 0x1ac7: 0x0369, 0x1ac8: 0x0289, 0x1ac9: 0x13d1, 0x1aca: 0x0039, 0x1acb: 0x0ee9,\n\t0x1acc: 0x1159, 0x1acd: 0x0ef9, 0x1ace: 0x0f09, 0x1acf: 0x1199, 0x1ad0: 0x0f31, 0x1ad1: 0x0249,\n\t0x1ad2: 0x0f41, 0x1ad3: 0x0259, 0x1ad4: 0x0f51, 0x1ad5: 0x0359, 0x1ad6: 0x0f61, 0x1ad7: 0x0f71,\n\t0x1ad8: 0x00d9, 0x1ad9: 0x0f99, 0x1ada: 0x2039, 0x1adb: 0x0269, 0x1adc: 0x01d9, 0x1add: 0x0fa9,\n\t0x1ade: 0x0fb9, 0x1adf: 0x1089, 0x1ae0: 0x0279, 0x1ae1: 0x0369, 0x1ae2: 0x0289, 0x1ae3: 0x13d1,\n\t0x1ae4: 0xba81, 0x1ae5: 0xba99, 0x1ae6: 0x0040, 0x1ae7: 0x0040, 0x1ae8: 0xbab1, 0x1ae9: 0x1099,\n\t0x1aea: 0x10b1, 0x1aeb: 0x10c9, 0x1aec: 0xbac9, 0x1aed: 0xbae1, 0x1aee: 0xbaf9, 0x1aef: 0x1429,\n\t0x1af0: 0x1a31, 0x1af1: 0xbb11, 0x1af2: 0xbb29, 0x1af3: 0xbb41, 0x1af4: 0xbb59, 0x1af5: 0xbb71,\n\t0x1af6: 0xbb89, 0x1af7: 0x2109, 0x1af8: 0x1111, 0x1af9: 0x1429, 0x1afa: 0xbba1, 0x1afb: 0xbbb9,\n\t0x1afc: 0xbbd1, 0x1afd: 0x10e1, 0x1afe: 0x10f9, 0x1aff: 0xbbe9,\n\t// Block 0x6c, offset 0x1b00\n\t0x1b00: 0x2079, 0x1b01: 0xbc01, 0x1b02: 0xbab1, 0x1b03: 0x1099, 0x1b04: 0x10b1, 0x1b05: 0x10c9,\n\t0x1b06: 0xbac9, 0x1b07: 0xbae1, 0x1b08: 0xbaf9, 0x1b09: 0x1429, 0x1b0a: 0x1a31, 0x1b0b: 0xbb11,\n\t0x1b0c: 0xbb29, 0x1b0d: 0xbb41, 0x1b0e: 0xbb59, 0x1b0f: 0xbb71, 0x1b10: 0xbb89, 0x1b11: 0x2109,\n\t0x1b12: 0x1111, 0x1b13: 0xbba1, 0x1b14: 0xbba1, 0x1b15: 0xbbb9, 0x1b16: 0xbbd1, 0x1b17: 0x10e1,\n\t0x1b18: 0x10f9, 0x1b19: 0xbbe9, 0x1b1a: 0x2079, 0x1b1b: 0xbc21, 0x1b1c: 0xbac9, 0x1b1d: 0x1429,\n\t0x1b1e: 0xbb11, 0x1b1f: 0x10e1, 0x1b20: 0x1111, 0x1b21: 0x2109, 0x1b22: 0xbab1, 0x1b23: 0x1099,\n\t0x1b24: 0x10b1, 0x1b25: 0x10c9, 0x1b26: 0xbac9, 0x1b27: 0xbae1, 0x1b28: 0xbaf9, 0x1b29: 0x1429,\n\t0x1b2a: 0x1a31, 0x1b2b: 0xbb11, 0x1b2c: 0xbb29, 0x1b2d: 0xbb41, 0x1b2e: 0xbb59, 0x1b2f: 0xbb71,\n\t0x1b30: 0xbb89, 0x1b31: 0x2109, 0x1b32: 0x1111, 0x1b33: 0x1429, 0x1b34: 0xbba1, 0x1b35: 0xbbb9,\n\t0x1b36: 0xbbd1, 0x1b37: 0x10e1, 0x1b38: 0x10f9, 0x1b39: 0xbbe9, 0x1b3a: 0x2079, 0x1b3b: 0xbc01,\n\t0x1b3c: 0xbab1, 0x1b3d: 0x1099, 0x1b3e: 0x10b1, 0x1b3f: 0x10c9,\n\t// Block 0x6d, offset 0x1b40\n\t0x1b40: 0xbac9, 0x1b41: 0xbae1, 0x1b42: 0xbaf9, 0x1b43: 0x1429, 0x1b44: 0x1a31, 0x1b45: 0xbb11,\n\t0x1b46: 0xbb29, 0x1b47: 0xbb41, 0x1b48: 0xbb59, 0x1b49: 0xbb71, 0x1b4a: 0xbb89, 0x1b4b: 0x2109,\n\t0x1b4c: 0x1111, 0x1b4d: 0xbba1, 0x1b4e: 0xbba1, 0x1b4f: 0xbbb9, 0x1b50: 0xbbd1, 0x1b51: 0x10e1,\n\t0x1b52: 0x10f9, 0x1b53: 0xbbe9, 0x1b54: 0x2079, 0x1b55: 0xbc21, 0x1b56: 0xbac9, 0x1b57: 0x1429,\n\t0x1b58: 0xbb11, 0x1b59: 0x10e1, 0x1b5a: 0x1111, 0x1b5b: 0x2109, 0x1b5c: 0xbab1, 0x1b5d: 0x1099,\n\t0x1b5e: 0x10b1, 0x1b5f: 0x10c9, 0x1b60: 0xbac9, 0x1b61: 0xbae1, 0x1b62: 0xbaf9, 0x1b63: 0x1429,\n\t0x1b64: 0x1a31, 0x1b65: 0xbb11, 0x1b66: 0xbb29, 0x1b67: 0xbb41, 0x1b68: 0xbb59, 0x1b69: 0xbb71,\n\t0x1b6a: 0xbb89, 0x1b6b: 0x2109, 0x1b6c: 0x1111, 0x1b6d: 0x1429, 0x1b6e: 0xbba1, 0x1b6f: 0xbbb9,\n\t0x1b70: 0xbbd1, 0x1b71: 0x10e1, 0x1b72: 0x10f9, 0x1b73: 0xbbe9, 0x1b74: 0x2079, 0x1b75: 0xbc01,\n\t0x1b76: 0xbab1, 0x1b77: 0x1099, 0x1b78: 0x10b1, 0x1b79: 0x10c9, 0x1b7a: 0xbac9, 0x1b7b: 0xbae1,\n\t0x1b7c: 0xbaf9, 0x1b7d: 0x1429, 0x1b7e: 0x1a31, 0x1b7f: 0xbb11,\n\t// Block 0x6e, offset 0x1b80\n\t0x1b80: 0xbb29, 0x1b81: 0xbb41, 0x1b82: 0xbb59, 0x1b83: 0xbb71, 0x1b84: 0xbb89, 0x1b85: 0x2109,\n\t0x1b86: 0x1111, 0x1b87: 0xbba1, 0x1b88: 0xbba1, 0x1b89: 0xbbb9, 0x1b8a: 0xbbd1, 0x1b8b: 0x10e1,\n\t0x1b8c: 0x10f9, 0x1b8d: 0xbbe9, 0x1b8e: 0x2079, 0x1b8f: 0xbc21, 0x1b90: 0xbac9, 0x1b91: 0x1429,\n\t0x1b92: 0xbb11, 0x1b93: 0x10e1, 0x1b94: 0x1111, 0x1b95: 0x2109, 0x1b96: 0xbab1, 0x1b97: 0x1099,\n\t0x1b98: 0x10b1, 0x1b99: 0x10c9, 0x1b9a: 0xbac9, 0x1b9b: 0xbae1, 0x1b9c: 0xbaf9, 0x1b9d: 0x1429,\n\t0x1b9e: 0x1a31, 0x1b9f: 0xbb11, 0x1ba0: 0xbb29, 0x1ba1: 0xbb41, 0x1ba2: 0xbb59, 0x1ba3: 0xbb71,\n\t0x1ba4: 0xbb89, 0x1ba5: 0x2109, 0x1ba6: 0x1111, 0x1ba7: 0x1429, 0x1ba8: 0xbba1, 0x1ba9: 0xbbb9,\n\t0x1baa: 0xbbd1, 0x1bab: 0x10e1, 0x1bac: 0x10f9, 0x1bad: 0xbbe9, 0x1bae: 0x2079, 0x1baf: 0xbc01,\n\t0x1bb0: 0xbab1, 0x1bb1: 0x1099, 0x1bb2: 0x10b1, 0x1bb3: 0x10c9, 0x1bb4: 0xbac9, 0x1bb5: 0xbae1,\n\t0x1bb6: 0xbaf9, 0x1bb7: 0x1429, 0x1bb8: 0x1a31, 0x1bb9: 0xbb11, 0x1bba: 0xbb29, 0x1bbb: 0xbb41,\n\t0x1bbc: 0xbb59, 0x1bbd: 0xbb71, 0x1bbe: 0xbb89, 0x1bbf: 0x2109,\n\t// Block 0x6f, offset 0x1bc0\n\t0x1bc0: 0x1111, 0x1bc1: 0xbba1, 0x1bc2: 0xbba1, 0x1bc3: 0xbbb9, 0x1bc4: 0xbbd1, 0x1bc5: 0x10e1,\n\t0x1bc6: 0x10f9, 0x1bc7: 0xbbe9, 0x1bc8: 0x2079, 0x1bc9: 0xbc21, 0x1bca: 0xbac9, 0x1bcb: 0x1429,\n\t0x1bcc: 0xbb11, 0x1bcd: 0x10e1, 0x1bce: 0x1111, 0x1bcf: 0x2109, 0x1bd0: 0xbab1, 0x1bd1: 0x1099,\n\t0x1bd2: 0x10b1, 0x1bd3: 0x10c9, 0x1bd4: 0xbac9, 0x1bd5: 0xbae1, 0x1bd6: 0xbaf9, 0x1bd7: 0x1429,\n\t0x1bd8: 0x1a31, 0x1bd9: 0xbb11, 0x1bda: 0xbb29, 0x1bdb: 0xbb41, 0x1bdc: 0xbb59, 0x1bdd: 0xbb71,\n\t0x1bde: 0xbb89, 0x1bdf: 0x2109, 0x1be0: 0x1111, 0x1be1: 0x1429, 0x1be2: 0xbba1, 0x1be3: 0xbbb9,\n\t0x1be4: 0xbbd1, 0x1be5: 0x10e1, 0x1be6: 0x10f9, 0x1be7: 0xbbe9, 0x1be8: 0x2079, 0x1be9: 0xbc01,\n\t0x1bea: 0xbab1, 0x1beb: 0x1099, 0x1bec: 0x10b1, 0x1bed: 0x10c9, 0x1bee: 0xbac9, 0x1bef: 0xbae1,\n\t0x1bf0: 0xbaf9, 0x1bf1: 0x1429, 0x1bf2: 0x1a31, 0x1bf3: 0xbb11, 0x1bf4: 0xbb29, 0x1bf5: 0xbb41,\n\t0x1bf6: 0xbb59, 0x1bf7: 0xbb71, 0x1bf8: 0xbb89, 0x1bf9: 0x2109, 0x1bfa: 0x1111, 0x1bfb: 0xbba1,\n\t0x1bfc: 0xbba1, 0x1bfd: 0xbbb9, 0x1bfe: 0xbbd1, 0x1bff: 0x10e1,\n\t// Block 0x70, offset 0x1c00\n\t0x1c00: 0x10f9, 0x1c01: 0xbbe9, 0x1c02: 0x2079, 0x1c03: 0xbc21, 0x1c04: 0xbac9, 0x1c05: 0x1429,\n\t0x1c06: 0xbb11, 0x1c07: 0x10e1, 0x1c08: 0x1111, 0x1c09: 0x2109, 0x1c0a: 0xbc41, 0x1c0b: 0xbc41,\n\t0x1c0c: 0x0040, 0x1c0d: 0x0040, 0x1c0e: 0x1f41, 0x1c0f: 0x00c9, 0x1c10: 0x0069, 0x1c11: 0x0079,\n\t0x1c12: 0x1f51, 0x1c13: 0x1f61, 0x1c14: 0x1f71, 0x1c15: 0x1f81, 0x1c16: 0x1f91, 0x1c17: 0x1fa1,\n\t0x1c18: 0x1f41, 0x1c19: 0x00c9, 0x1c1a: 0x0069, 0x1c1b: 0x0079, 0x1c1c: 0x1f51, 0x1c1d: 0x1f61,\n\t0x1c1e: 0x1f71, 0x1c1f: 0x1f81, 0x1c20: 0x1f91, 0x1c21: 0x1fa1, 0x1c22: 0x1f41, 0x1c23: 0x00c9,\n\t0x1c24: 0x0069, 0x1c25: 0x0079, 0x1c26: 0x1f51, 0x1c27: 0x1f61, 0x1c28: 0x1f71, 0x1c29: 0x1f81,\n\t0x1c2a: 0x1f91, 0x1c2b: 0x1fa1, 0x1c2c: 0x1f41, 0x1c2d: 0x00c9, 0x1c2e: 0x0069, 0x1c2f: 0x0079,\n\t0x1c30: 0x1f51, 0x1c31: 0x1f61, 0x1c32: 0x1f71, 0x1c33: 0x1f81, 0x1c34: 0x1f91, 0x1c35: 0x1fa1,\n\t0x1c36: 0x1f41, 0x1c37: 0x00c9, 0x1c38: 0x0069, 0x1c39: 0x0079, 0x1c3a: 0x1f51, 0x1c3b: 0x1f61,\n\t0x1c3c: 0x1f71, 0x1c3d: 0x1f81, 0x1c3e: 0x1f91, 0x1c3f: 0x1fa1,\n\t// Block 0x71, offset 0x1c40\n\t0x1c40: 0xe115, 0x1c41: 0xe115, 0x1c42: 0xe135, 0x1c43: 0xe135, 0x1c44: 0xe115, 0x1c45: 0xe115,\n\t0x1c46: 0xe175, 0x1c47: 0xe175, 0x1c48: 0xe115, 0x1c49: 0xe115, 0x1c4a: 0xe135, 0x1c4b: 0xe135,\n\t0x1c4c: 0xe115, 0x1c4d: 0xe115, 0x1c4e: 0xe1f5, 0x1c4f: 0xe1f5, 0x1c50: 0xe115, 0x1c51: 0xe115,\n\t0x1c52: 0xe135, 0x1c53: 0xe135, 0x1c54: 0xe115, 0x1c55: 0xe115, 0x1c56: 0xe175, 0x1c57: 0xe175,\n\t0x1c58: 0xe115, 0x1c59: 0xe115, 0x1c5a: 0xe135, 0x1c5b: 0xe135, 0x1c5c: 0xe115, 0x1c5d: 0xe115,\n\t0x1c5e: 0x8b05, 0x1c5f: 0x8b05, 0x1c60: 0x04b5, 0x1c61: 0x04b5, 0x1c62: 0x0a08, 0x1c63: 0x0a08,\n\t0x1c64: 0x0a08, 0x1c65: 0x0a08, 0x1c66: 0x0a08, 0x1c67: 0x0a08, 0x1c68: 0x0a08, 0x1c69: 0x0a08,\n\t0x1c6a: 0x0a08, 0x1c6b: 0x0a08, 0x1c6c: 0x0a08, 0x1c6d: 0x0a08, 0x1c6e: 0x0a08, 0x1c6f: 0x0a08,\n\t0x1c70: 0x0a08, 0x1c71: 0x0a08, 0x1c72: 0x0a08, 0x1c73: 0x0a08, 0x1c74: 0x0a08, 0x1c75: 0x0a08,\n\t0x1c76: 0x0a08, 0x1c77: 0x0a08, 0x1c78: 0x0a08, 0x1c79: 0x0a08, 0x1c7a: 0x0a08, 0x1c7b: 0x0a08,\n\t0x1c7c: 0x0a08, 0x1c7d: 0x0a08, 0x1c7e: 0x0a08, 0x1c7f: 0x0a08,\n\t// Block 0x72, offset 0x1c80\n\t0x1c80: 0xb189, 0x1c81: 0xb1a1, 0x1c82: 0xb201, 0x1c83: 0xb249, 0x1c84: 0x0040, 0x1c85: 0xb411,\n\t0x1c86: 0xb291, 0x1c87: 0xb219, 0x1c88: 0xb309, 0x1c89: 0xb429, 0x1c8a: 0xb399, 0x1c8b: 0xb3b1,\n\t0x1c8c: 0xb3c9, 0x1c8d: 0xb3e1, 0x1c8e: 0xb2a9, 0x1c8f: 0xb339, 0x1c90: 0xb369, 0x1c91: 0xb2d9,\n\t0x1c92: 0xb381, 0x1c93: 0xb279, 0x1c94: 0xb2c1, 0x1c95: 0xb1d1, 0x1c96: 0xb1e9, 0x1c97: 0xb231,\n\t0x1c98: 0xb261, 0x1c99: 0xb2f1, 0x1c9a: 0xb321, 0x1c9b: 0xb351, 0x1c9c: 0xbc59, 0x1c9d: 0x7949,\n\t0x1c9e: 0xbc71, 0x1c9f: 0xbc89, 0x1ca0: 0x0040, 0x1ca1: 0xb1a1, 0x1ca2: 0xb201, 0x1ca3: 0x0040,\n\t0x1ca4: 0xb3f9, 0x1ca5: 0x0040, 0x1ca6: 0x0040, 0x1ca7: 0xb219, 0x1ca8: 0x0040, 0x1ca9: 0xb429,\n\t0x1caa: 0xb399, 0x1cab: 0xb3b1, 0x1cac: 0xb3c9, 0x1cad: 0xb3e1, 0x1cae: 0xb2a9, 0x1caf: 0xb339,\n\t0x1cb0: 0xb369, 0x1cb1: 0xb2d9, 0x1cb2: 0xb381, 0x1cb3: 0x0040, 0x1cb4: 0xb2c1, 0x1cb5: 0xb1d1,\n\t0x1cb6: 0xb1e9, 0x1cb7: 0xb231, 0x1cb8: 0x0040, 0x1cb9: 0xb2f1, 0x1cba: 0x0040, 0x1cbb: 0xb351,\n\t0x1cbc: 0x0040, 0x1cbd: 0x0040, 0x1cbe: 0x0040, 0x1cbf: 0x0040,\n\t// Block 0x73, offset 0x1cc0\n\t0x1cc0: 0x0040, 0x1cc1: 0x0040, 0x1cc2: 0xb201, 0x1cc3: 0x0040, 0x1cc4: 0x0040, 0x1cc5: 0x0040,\n\t0x1cc6: 0x0040, 0x1cc7: 0xb219, 0x1cc8: 0x0040, 0x1cc9: 0xb429, 0x1cca: 0x0040, 0x1ccb: 0xb3b1,\n\t0x1ccc: 0x0040, 0x1ccd: 0xb3e1, 0x1cce: 0xb2a9, 0x1ccf: 0xb339, 0x1cd0: 0x0040, 0x1cd1: 0xb2d9,\n\t0x1cd2: 0xb381, 0x1cd3: 0x0040, 0x1cd4: 0xb2c1, 0x1cd5: 0x0040, 0x1cd6: 0x0040, 0x1cd7: 0xb231,\n\t0x1cd8: 0x0040, 0x1cd9: 0xb2f1, 0x1cda: 0x0040, 0x1cdb: 0xb351, 0x1cdc: 0x0040, 0x1cdd: 0x7949,\n\t0x1cde: 0x0040, 0x1cdf: 0xbc89, 0x1ce0: 0x0040, 0x1ce1: 0xb1a1, 0x1ce2: 0xb201, 0x1ce3: 0x0040,\n\t0x1ce4: 0xb3f9, 0x1ce5: 0x0040, 0x1ce6: 0x0040, 0x1ce7: 0xb219, 0x1ce8: 0xb309, 0x1ce9: 0xb429,\n\t0x1cea: 0xb399, 0x1ceb: 0x0040, 0x1cec: 0xb3c9, 0x1ced: 0xb3e1, 0x1cee: 0xb2a9, 0x1cef: 0xb339,\n\t0x1cf0: 0xb369, 0x1cf1: 0xb2d9, 0x1cf2: 0xb381, 0x1cf3: 0x0040, 0x1cf4: 0xb2c1, 0x1cf5: 0xb1d1,\n\t0x1cf6: 0xb1e9, 0x1cf7: 0xb231, 0x1cf8: 0x0040, 0x1cf9: 0xb2f1, 0x1cfa: 0xb321, 0x1cfb: 0xb351,\n\t0x1cfc: 0xbc59, 0x1cfd: 0x0040, 0x1cfe: 0xbc71, 0x1cff: 0x0040,\n\t// Block 0x74, offset 0x1d00\n\t0x1d00: 0xb189, 0x1d01: 0xb1a1, 0x1d02: 0xb201, 0x1d03: 0xb249, 0x1d04: 0xb3f9, 0x1d05: 0xb411,\n\t0x1d06: 0xb291, 0x1d07: 0xb219, 0x1d08: 0xb309, 0x1d09: 0xb429, 0x1d0a: 0x0040, 0x1d0b: 0xb3b1,\n\t0x1d0c: 0xb3c9, 0x1d0d: 0xb3e1, 0x1d0e: 0xb2a9, 0x1d0f: 0xb339, 0x1d10: 0xb369, 0x1d11: 0xb2d9,\n\t0x1d12: 0xb381, 0x1d13: 0xb279, 0x1d14: 0xb2c1, 0x1d15: 0xb1d1, 0x1d16: 0xb1e9, 0x1d17: 0xb231,\n\t0x1d18: 0xb261, 0x1d19: 0xb2f1, 0x1d1a: 0xb321, 0x1d1b: 0xb351, 0x1d1c: 0x0040, 0x1d1d: 0x0040,\n\t0x1d1e: 0x0040, 0x1d1f: 0x0040, 0x1d20: 0x0040, 0x1d21: 0xb1a1, 0x1d22: 0xb201, 0x1d23: 0xb249,\n\t0x1d24: 0x0040, 0x1d25: 0xb411, 0x1d26: 0xb291, 0x1d27: 0xb219, 0x1d28: 0xb309, 0x1d29: 0xb429,\n\t0x1d2a: 0x0040, 0x1d2b: 0xb3b1, 0x1d2c: 0xb3c9, 0x1d2d: 0xb3e1, 0x1d2e: 0xb2a9, 0x1d2f: 0xb339,\n\t0x1d30: 0xb369, 0x1d31: 0xb2d9, 0x1d32: 0xb381, 0x1d33: 0xb279, 0x1d34: 0xb2c1, 0x1d35: 0xb1d1,\n\t0x1d36: 0xb1e9, 0x1d37: 0xb231, 0x1d38: 0xb261, 0x1d39: 0xb2f1, 0x1d3a: 0xb321, 0x1d3b: 0xb351,\n\t0x1d3c: 0x0040, 0x1d3d: 0x0040, 0x1d3e: 0x0040, 0x1d3f: 0x0040,\n\t// Block 0x75, offset 0x1d40\n\t0x1d40: 0x0040, 0x1d41: 0xbca2, 0x1d42: 0xbcba, 0x1d43: 0xbcd2, 0x1d44: 0xbcea, 0x1d45: 0xbd02,\n\t0x1d46: 0xbd1a, 0x1d47: 0xbd32, 0x1d48: 0xbd4a, 0x1d49: 0xbd62, 0x1d4a: 0xbd7a, 0x1d4b: 0x0018,\n\t0x1d4c: 0x0018, 0x1d4d: 0x0040, 0x1d4e: 0x0040, 0x1d4f: 0x0040, 0x1d50: 0xbd92, 0x1d51: 0xbdb2,\n\t0x1d52: 0xbdd2, 0x1d53: 0xbdf2, 0x1d54: 0xbe12, 0x1d55: 0xbe32, 0x1d56: 0xbe52, 0x1d57: 0xbe72,\n\t0x1d58: 0xbe92, 0x1d59: 0xbeb2, 0x1d5a: 0xbed2, 0x1d5b: 0xbef2, 0x1d5c: 0xbf12, 0x1d5d: 0xbf32,\n\t0x1d5e: 0xbf52, 0x1d5f: 0xbf72, 0x1d60: 0xbf92, 0x1d61: 0xbfb2, 0x1d62: 0xbfd2, 0x1d63: 0xbff2,\n\t0x1d64: 0xc012, 0x1d65: 0xc032, 0x1d66: 0xc052, 0x1d67: 0xc072, 0x1d68: 0xc092, 0x1d69: 0xc0b2,\n\t0x1d6a: 0xc0d1, 0x1d6b: 0x1159, 0x1d6c: 0x0269, 0x1d6d: 0x6671, 0x1d6e: 0xc111, 0x1d6f: 0x0018,\n\t0x1d70: 0x0039, 0x1d71: 0x0ee9, 0x1d72: 0x1159, 0x1d73: 0x0ef9, 0x1d74: 0x0f09, 0x1d75: 0x1199,\n\t0x1d76: 0x0f31, 0x1d77: 0x0249, 0x1d78: 0x0f41, 0x1d79: 0x0259, 0x1d7a: 0x0f51, 0x1d7b: 0x0359,\n\t0x1d7c: 0x0f61, 0x1d7d: 0x0f71, 0x1d7e: 0x00d9, 0x1d7f: 0x0f99,\n\t// Block 0x76, offset 0x1d80\n\t0x1d80: 0x2039, 0x1d81: 0x0269, 0x1d82: 0x01d9, 0x1d83: 0x0fa9, 0x1d84: 0x0fb9, 0x1d85: 0x1089,\n\t0x1d86: 0x0279, 0x1d87: 0x0369, 0x1d88: 0x0289, 0x1d89: 0x13d1, 0x1d8a: 0xc129, 0x1d8b: 0x65b1,\n\t0x1d8c: 0xc141, 0x1d8d: 0x1441, 0x1d8e: 0xc159, 0x1d8f: 0xc179, 0x1d90: 0x0018, 0x1d91: 0x0018,\n\t0x1d92: 0x0018, 0x1d93: 0x0018, 0x1d94: 0x0018, 0x1d95: 0x0018, 0x1d96: 0x0018, 0x1d97: 0x0018,\n\t0x1d98: 0x0018, 0x1d99: 0x0018, 0x1d9a: 0x0018, 0x1d9b: 0x0018, 0x1d9c: 0x0018, 0x1d9d: 0x0018,\n\t0x1d9e: 0x0018, 0x1d9f: 0x0018, 0x1da0: 0x0018, 0x1da1: 0x0018, 0x1da2: 0x0018, 0x1da3: 0x0018,\n\t0x1da4: 0x0018, 0x1da5: 0x0018, 0x1da6: 0x0018, 0x1da7: 0x0018, 0x1da8: 0x0018, 0x1da9: 0x0018,\n\t0x1daa: 0xc191, 0x1dab: 0xc1a9, 0x1dac: 0x0040, 0x1dad: 0x0040, 0x1dae: 0x0040, 0x1daf: 0x0040,\n\t0x1db0: 0x0018, 0x1db1: 0x0018, 0x1db2: 0x0018, 0x1db3: 0x0018, 0x1db4: 0x0018, 0x1db5: 0x0018,\n\t0x1db6: 0x0018, 0x1db7: 0x0018, 0x1db8: 0x0018, 0x1db9: 0x0018, 0x1dba: 0x0018, 0x1dbb: 0x0018,\n\t0x1dbc: 0x0018, 0x1dbd: 0x0018, 0x1dbe: 0x0018, 0x1dbf: 0x0018,\n\t// Block 0x77, offset 0x1dc0\n\t0x1dc0: 0xc1d9, 0x1dc1: 0xc211, 0x1dc2: 0xc249, 0x1dc3: 0x0040, 0x1dc4: 0x0040, 0x1dc5: 0x0040,\n\t0x1dc6: 0x0040, 0x1dc7: 0x0040, 0x1dc8: 0x0040, 0x1dc9: 0x0040, 0x1dca: 0x0040, 0x1dcb: 0x0040,\n\t0x1dcc: 0x0040, 0x1dcd: 0x0040, 0x1dce: 0x0040, 0x1dcf: 0x0040, 0x1dd0: 0xc269, 0x1dd1: 0xc289,\n\t0x1dd2: 0xc2a9, 0x1dd3: 0xc2c9, 0x1dd4: 0xc2e9, 0x1dd5: 0xc309, 0x1dd6: 0xc329, 0x1dd7: 0xc349,\n\t0x1dd8: 0xc369, 0x1dd9: 0xc389, 0x1dda: 0xc3a9, 0x1ddb: 0xc3c9, 0x1ddc: 0xc3e9, 0x1ddd: 0xc409,\n\t0x1dde: 0xc429, 0x1ddf: 0xc449, 0x1de0: 0xc469, 0x1de1: 0xc489, 0x1de2: 0xc4a9, 0x1de3: 0xc4c9,\n\t0x1de4: 0xc4e9, 0x1de5: 0xc509, 0x1de6: 0xc529, 0x1de7: 0xc549, 0x1de8: 0xc569, 0x1de9: 0xc589,\n\t0x1dea: 0xc5a9, 0x1deb: 0xc5c9, 0x1dec: 0xc5e9, 0x1ded: 0xc609, 0x1dee: 0xc629, 0x1def: 0xc649,\n\t0x1df0: 0xc669, 0x1df1: 0xc689, 0x1df2: 0xc6a9, 0x1df3: 0xc6c9, 0x1df4: 0xc6e9, 0x1df5: 0xc709,\n\t0x1df6: 0xc729, 0x1df7: 0xc749, 0x1df8: 0xc769, 0x1df9: 0xc789, 0x1dfa: 0xc7a9, 0x1dfb: 0xc7c9,\n\t0x1dfc: 0x0040, 0x1dfd: 0x0040, 0x1dfe: 0x0040, 0x1dff: 0x0040,\n\t// Block 0x78, offset 0x1e00\n\t0x1e00: 0xcaf9, 0x1e01: 0xcb19, 0x1e02: 0xcb39, 0x1e03: 0x8b1d, 0x1e04: 0xcb59, 0x1e05: 0xcb79,\n\t0x1e06: 0xcb99, 0x1e07: 0xcbb9, 0x1e08: 0xcbd9, 0x1e09: 0xcbf9, 0x1e0a: 0xcc19, 0x1e0b: 0xcc39,\n\t0x1e0c: 0xcc59, 0x1e0d: 0x8b3d, 0x1e0e: 0xcc79, 0x1e0f: 0xcc99, 0x1e10: 0xccb9, 0x1e11: 0xccd9,\n\t0x1e12: 0x8b5d, 0x1e13: 0xccf9, 0x1e14: 0xcd19, 0x1e15: 0xc429, 0x1e16: 0x8b7d, 0x1e17: 0xcd39,\n\t0x1e18: 0xcd59, 0x1e19: 0xcd79, 0x1e1a: 0xcd99, 0x1e1b: 0xcdb9, 0x1e1c: 0x8b9d, 0x1e1d: 0xcdd9,\n\t0x1e1e: 0xcdf9, 0x1e1f: 0xce19, 0x1e20: 0xce39, 0x1e21: 0xce59, 0x1e22: 0xc789, 0x1e23: 0xce79,\n\t0x1e24: 0xce99, 0x1e25: 0xceb9, 0x1e26: 0xced9, 0x1e27: 0xcef9, 0x1e28: 0xcf19, 0x1e29: 0xcf39,\n\t0x1e2a: 0xcf59, 0x1e2b: 0xcf79, 0x1e2c: 0xcf99, 0x1e2d: 0xcfb9, 0x1e2e: 0xcfd9, 0x1e2f: 0xcff9,\n\t0x1e30: 0xd019, 0x1e31: 0xd039, 0x1e32: 0xd039, 0x1e33: 0xd039, 0x1e34: 0x8bbd, 0x1e35: 0xd059,\n\t0x1e36: 0xd079, 0x1e37: 0xd099, 0x1e38: 0x8bdd, 0x1e39: 0xd0b9, 0x1e3a: 0xd0d9, 0x1e3b: 0xd0f9,\n\t0x1e3c: 0xd119, 0x1e3d: 0xd139, 0x1e3e: 0xd159, 0x1e3f: 0xd179,\n\t// Block 0x79, offset 0x1e40\n\t0x1e40: 0xd199, 0x1e41: 0xd1b9, 0x1e42: 0xd1d9, 0x1e43: 0xd1f9, 0x1e44: 0xd219, 0x1e45: 0xd239,\n\t0x1e46: 0xd239, 0x1e47: 0xd259, 0x1e48: 0xd279, 0x1e49: 0xd299, 0x1e4a: 0xd2b9, 0x1e4b: 0xd2d9,\n\t0x1e4c: 0xd2f9, 0x1e4d: 0xd319, 0x1e4e: 0xd339, 0x1e4f: 0xd359, 0x1e50: 0xd379, 0x1e51: 0xd399,\n\t0x1e52: 0xd3b9, 0x1e53: 0xd3d9, 0x1e54: 0xd3f9, 0x1e55: 0xd419, 0x1e56: 0xd439, 0x1e57: 0xd459,\n\t0x1e58: 0xd479, 0x1e59: 0x8bfd, 0x1e5a: 0xd499, 0x1e5b: 0xd4b9, 0x1e5c: 0xd4d9, 0x1e5d: 0xc309,\n\t0x1e5e: 0xd4f9, 0x1e5f: 0xd519, 0x1e60: 0x8c1d, 0x1e61: 0x8c3d, 0x1e62: 0xd539, 0x1e63: 0xd559,\n\t0x1e64: 0xd579, 0x1e65: 0xd599, 0x1e66: 0xd5b9, 0x1e67: 0xd5d9, 0x1e68: 0x2040, 0x1e69: 0xd5f9,\n\t0x1e6a: 0xd619, 0x1e6b: 0xd619, 0x1e6c: 0x8c5d, 0x1e6d: 0xd639, 0x1e6e: 0xd659, 0x1e6f: 0xd679,\n\t0x1e70: 0xd699, 0x1e71: 0x8c7d, 0x1e72: 0xd6b9, 0x1e73: 0xd6d9, 0x1e74: 0x2040, 0x1e75: 0xd6f9,\n\t0x1e76: 0xd719, 0x1e77: 0xd739, 0x1e78: 0xd759, 0x1e79: 0xd779, 0x1e7a: 0xd799, 0x1e7b: 0x8c9d,\n\t0x1e7c: 0xd7b9, 0x1e7d: 0x8cbd, 0x1e7e: 0xd7d9, 0x1e7f: 0xd7f9,\n\t// Block 0x7a, offset 0x1e80\n\t0x1e80: 0xd819, 0x1e81: 0xd839, 0x1e82: 0xd859, 0x1e83: 0xd879, 0x1e84: 0xd899, 0x1e85: 0xd8b9,\n\t0x1e86: 0xd8d9, 0x1e87: 0xd8f9, 0x1e88: 0xd919, 0x1e89: 0x8cdd, 0x1e8a: 0xd939, 0x1e8b: 0xd959,\n\t0x1e8c: 0xd979, 0x1e8d: 0xd999, 0x1e8e: 0xd9b9, 0x1e8f: 0x8cfd, 0x1e90: 0xd9d9, 0x1e91: 0x8d1d,\n\t0x1e92: 0x8d3d, 0x1e93: 0xd9f9, 0x1e94: 0xda19, 0x1e95: 0xda19, 0x1e96: 0xda39, 0x1e97: 0x8d5d,\n\t0x1e98: 0x8d7d, 0x1e99: 0xda59, 0x1e9a: 0xda79, 0x1e9b: 0xda99, 0x1e9c: 0xdab9, 0x1e9d: 0xdad9,\n\t0x1e9e: 0xdaf9, 0x1e9f: 0xdb19, 0x1ea0: 0xdb39, 0x1ea1: 0xdb59, 0x1ea2: 0xdb79, 0x1ea3: 0xdb99,\n\t0x1ea4: 0x8d9d, 0x1ea5: 0xdbb9, 0x1ea6: 0xdbd9, 0x1ea7: 0xdbf9, 0x1ea8: 0xdc19, 0x1ea9: 0xdbf9,\n\t0x1eaa: 0xdc39, 0x1eab: 0xdc59, 0x1eac: 0xdc79, 0x1ead: 0xdc99, 0x1eae: 0xdcb9, 0x1eaf: 0xdcd9,\n\t0x1eb0: 0xdcf9, 0x1eb1: 0xdd19, 0x1eb2: 0xdd39, 0x1eb3: 0xdd59, 0x1eb4: 0xdd79, 0x1eb5: 0xdd99,\n\t0x1eb6: 0xddb9, 0x1eb7: 0xddd9, 0x1eb8: 0x8dbd, 0x1eb9: 0xddf9, 0x1eba: 0xde19, 0x1ebb: 0xde39,\n\t0x1ebc: 0xde59, 0x1ebd: 0xde79, 0x1ebe: 0x8ddd, 0x1ebf: 0xde99,\n\t// Block 0x7b, offset 0x1ec0\n\t0x1ec0: 0xe599, 0x1ec1: 0xe5b9, 0x1ec2: 0xe5d9, 0x1ec3: 0xe5f9, 0x1ec4: 0xe619, 0x1ec5: 0xe639,\n\t0x1ec6: 0x8efd, 0x1ec7: 0xe659, 0x1ec8: 0xe679, 0x1ec9: 0xe699, 0x1eca: 0xe6b9, 0x1ecb: 0xe6d9,\n\t0x1ecc: 0xe6f9, 0x1ecd: 0x8f1d, 0x1ece: 0xe719, 0x1ecf: 0xe739, 0x1ed0: 0x8f3d, 0x1ed1: 0x8f5d,\n\t0x1ed2: 0xe759, 0x1ed3: 0xe779, 0x1ed4: 0xe799, 0x1ed5: 0xe7b9, 0x1ed6: 0xe7d9, 0x1ed7: 0xe7f9,\n\t0x1ed8: 0xe819, 0x1ed9: 0xe839, 0x1eda: 0xe859, 0x1edb: 0x8f7d, 0x1edc: 0xe879, 0x1edd: 0x8f9d,\n\t0x1ede: 0xe899, 0x1edf: 0x2040, 0x1ee0: 0xe8b9, 0x1ee1: 0xe8d9, 0x1ee2: 0xe8f9, 0x1ee3: 0x8fbd,\n\t0x1ee4: 0xe919, 0x1ee5: 0xe939, 0x1ee6: 0x8fdd, 0x1ee7: 0x8ffd, 0x1ee8: 0xe959, 0x1ee9: 0xe979,\n\t0x1eea: 0xe999, 0x1eeb: 0xe9b9, 0x1eec: 0xe9d9, 0x1eed: 0xe9d9, 0x1eee: 0xe9f9, 0x1eef: 0xea19,\n\t0x1ef0: 0xea39, 0x1ef1: 0xea59, 0x1ef2: 0xea79, 0x1ef3: 0xea99, 0x1ef4: 0xeab9, 0x1ef5: 0x901d,\n\t0x1ef6: 0xead9, 0x1ef7: 0x903d, 0x1ef8: 0xeaf9, 0x1ef9: 0x905d, 0x1efa: 0xeb19, 0x1efb: 0x907d,\n\t0x1efc: 0x909d, 0x1efd: 0x90bd, 0x1efe: 0xeb39, 0x1eff: 0xeb59,\n\t// Block 0x7c, offset 0x1f00\n\t0x1f00: 0xeb79, 0x1f01: 0x90dd, 0x1f02: 0x90fd, 0x1f03: 0x911d, 0x1f04: 0x913d, 0x1f05: 0xeb99,\n\t0x1f06: 0xebb9, 0x1f07: 0xebb9, 0x1f08: 0xebd9, 0x1f09: 0xebf9, 0x1f0a: 0xec19, 0x1f0b: 0xec39,\n\t0x1f0c: 0xec59, 0x1f0d: 0x915d, 0x1f0e: 0xec79, 0x1f0f: 0xec99, 0x1f10: 0xecb9, 0x1f11: 0xecd9,\n\t0x1f12: 0x917d, 0x1f13: 0xecf9, 0x1f14: 0x919d, 0x1f15: 0x91bd, 0x1f16: 0xed19, 0x1f17: 0xed39,\n\t0x1f18: 0xed59, 0x1f19: 0xed79, 0x1f1a: 0xed99, 0x1f1b: 0xedb9, 0x1f1c: 0x91dd, 0x1f1d: 0x91fd,\n\t0x1f1e: 0x921d, 0x1f1f: 0x2040, 0x1f20: 0xedd9, 0x1f21: 0x923d, 0x1f22: 0xedf9, 0x1f23: 0xee19,\n\t0x1f24: 0xee39, 0x1f25: 0x925d, 0x1f26: 0xee59, 0x1f27: 0xee79, 0x1f28: 0xee99, 0x1f29: 0xeeb9,\n\t0x1f2a: 0xeed9, 0x1f2b: 0x927d, 0x1f2c: 0xeef9, 0x1f2d: 0xef19, 0x1f2e: 0xef39, 0x1f2f: 0xef59,\n\t0x1f30: 0xef79, 0x1f31: 0xef99, 0x1f32: 0x929d, 0x1f33: 0x92bd, 0x1f34: 0xefb9, 0x1f35: 0x92dd,\n\t0x1f36: 0xefd9, 0x1f37: 0x92fd, 0x1f38: 0xeff9, 0x1f39: 0xf019, 0x1f3a: 0xf039, 0x1f3b: 0x931d,\n\t0x1f3c: 0x933d, 0x1f3d: 0xf059, 0x1f3e: 0x935d, 0x1f3f: 0xf079,\n\t// Block 0x7d, offset 0x1f40\n\t0x1f40: 0xf6b9, 0x1f41: 0xf6d9, 0x1f42: 0xf6f9, 0x1f43: 0xf719, 0x1f44: 0xf739, 0x1f45: 0x951d,\n\t0x1f46: 0xf759, 0x1f47: 0xf779, 0x1f48: 0xf799, 0x1f49: 0xf7b9, 0x1f4a: 0xf7d9, 0x1f4b: 0x953d,\n\t0x1f4c: 0x955d, 0x1f4d: 0xf7f9, 0x1f4e: 0xf819, 0x1f4f: 0xf839, 0x1f50: 0xf859, 0x1f51: 0xf879,\n\t0x1f52: 0xf899, 0x1f53: 0x957d, 0x1f54: 0xf8b9, 0x1f55: 0xf8d9, 0x1f56: 0xf8f9, 0x1f57: 0xf919,\n\t0x1f58: 0x959d, 0x1f59: 0x95bd, 0x1f5a: 0xf939, 0x1f5b: 0xf959, 0x1f5c: 0xf979, 0x1f5d: 0x95dd,\n\t0x1f5e: 0xf999, 0x1f5f: 0xf9b9, 0x1f60: 0x6815, 0x1f61: 0x95fd, 0x1f62: 0xf9d9, 0x1f63: 0xf9f9,\n\t0x1f64: 0xfa19, 0x1f65: 0x961d, 0x1f66: 0xfa39, 0x1f67: 0xfa59, 0x1f68: 0xfa79, 0x1f69: 0xfa99,\n\t0x1f6a: 0xfab9, 0x1f6b: 0xfad9, 0x1f6c: 0xfaf9, 0x1f6d: 0x963d, 0x1f6e: 0xfb19, 0x1f6f: 0xfb39,\n\t0x1f70: 0xfb59, 0x1f71: 0x965d, 0x1f72: 0xfb79, 0x1f73: 0xfb99, 0x1f74: 0xfbb9, 0x1f75: 0xfbd9,\n\t0x1f76: 0x7b35, 0x1f77: 0x967d, 0x1f78: 0xfbf9, 0x1f79: 0xfc19, 0x1f7a: 0xfc39, 0x1f7b: 0x969d,\n\t0x1f7c: 0xfc59, 0x1f7d: 0x96bd, 0x1f7e: 0xfc79, 0x1f7f: 0xfc79,\n\t// Block 0x7e, offset 0x1f80\n\t0x1f80: 0xfc99, 0x1f81: 0x96dd, 0x1f82: 0xfcb9, 0x1f83: 0xfcd9, 0x1f84: 0xfcf9, 0x1f85: 0xfd19,\n\t0x1f86: 0xfd39, 0x1f87: 0xfd59, 0x1f88: 0xfd79, 0x1f89: 0x96fd, 0x1f8a: 0xfd99, 0x1f8b: 0xfdb9,\n\t0x1f8c: 0xfdd9, 0x1f8d: 0xfdf9, 0x1f8e: 0xfe19, 0x1f8f: 0xfe39, 0x1f90: 0x971d, 0x1f91: 0xfe59,\n\t0x1f92: 0x973d, 0x1f93: 0x975d, 0x1f94: 0x977d, 0x1f95: 0xfe79, 0x1f96: 0xfe99, 0x1f97: 0xfeb9,\n\t0x1f98: 0xfed9, 0x1f99: 0xfef9, 0x1f9a: 0xff19, 0x1f9b: 0xff39, 0x1f9c: 0xff59, 0x1f9d: 0x979d,\n\t0x1f9e: 0x0040, 0x1f9f: 0x0040, 0x1fa0: 0x0040, 0x1fa1: 0x0040, 0x1fa2: 0x0040, 0x1fa3: 0x0040,\n\t0x1fa4: 0x0040, 0x1fa5: 0x0040, 0x1fa6: 0x0040, 0x1fa7: 0x0040, 0x1fa8: 0x0040, 0x1fa9: 0x0040,\n\t0x1faa: 0x0040, 0x1fab: 0x0040, 0x1fac: 0x0040, 0x1fad: 0x0040, 0x1fae: 0x0040, 0x1faf: 0x0040,\n\t0x1fb0: 0x0040, 0x1fb1: 0x0040, 0x1fb2: 0x0040, 0x1fb3: 0x0040, 0x1fb4: 0x0040, 0x1fb5: 0x0040,\n\t0x1fb6: 0x0040, 0x1fb7: 0x0040, 0x1fb8: 0x0040, 0x1fb9: 0x0040, 0x1fba: 0x0040, 0x1fbb: 0x0040,\n\t0x1fbc: 0x0040, 0x1fbd: 0x0040, 0x1fbe: 0x0040, 0x1fbf: 0x0040,\n}\n\n// idnaIndex: 36 blocks, 2304 entries, 4608 bytes\n// Block 0 is the zero block.\nvar idnaIndex = [2304]uint16{\n\t// Block 0x0, offset 0x0\n\t// Block 0x1, offset 0x40\n\t// Block 0x2, offset 0x80\n\t// Block 0x3, offset 0xc0\n\t0xc2: 0x01, 0xc3: 0x7d, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x04, 0xc7: 0x05,\n\t0xc8: 0x06, 0xc9: 0x7e, 0xca: 0x7f, 0xcb: 0x07, 0xcc: 0x80, 0xcd: 0x08, 0xce: 0x09, 0xcf: 0x0a,\n\t0xd0: 0x81, 0xd1: 0x0b, 0xd2: 0x0c, 0xd3: 0x0d, 0xd4: 0x0e, 0xd5: 0x82, 0xd6: 0x83, 0xd7: 0x84,\n\t0xd8: 0x0f, 0xd9: 0x10, 0xda: 0x85, 0xdb: 0x11, 0xdc: 0x12, 0xdd: 0x86, 0xde: 0x87, 0xdf: 0x88,\n\t0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, 0xe4: 0x06, 0xe5: 0x07, 0xe6: 0x07, 0xe7: 0x07,\n\t0xe8: 0x07, 0xe9: 0x08, 0xea: 0x09, 0xeb: 0x07, 0xec: 0x07, 0xed: 0x0a, 0xee: 0x0b, 0xef: 0x0c,\n\t0xf0: 0x1d, 0xf1: 0x1e, 0xf2: 0x1e, 0xf3: 0x20, 0xf4: 0x21,\n\t// Block 0x4, offset 0x100\n\t0x120: 0x89, 0x121: 0x13, 0x122: 0x8a, 0x123: 0x8b, 0x124: 0x8c, 0x125: 0x14, 0x126: 0x15, 0x127: 0x16,\n\t0x128: 0x17, 0x129: 0x18, 0x12a: 0x19, 0x12b: 0x1a, 0x12c: 0x1b, 0x12d: 0x1c, 0x12e: 0x1d, 0x12f: 0x8d,\n\t0x130: 0x8e, 0x131: 0x1e, 0x132: 0x1f, 0x133: 0x20, 0x134: 0x8f, 0x135: 0x21, 0x136: 0x90, 0x137: 0x91,\n\t0x138: 0x92, 0x139: 0x93, 0x13a: 0x22, 0x13b: 0x94, 0x13c: 0x95, 0x13d: 0x23, 0x13e: 0x24, 0x13f: 0x96,\n\t// Block 0x5, offset 0x140\n\t0x140: 0x97, 0x141: 0x98, 0x142: 0x99, 0x143: 0x9a, 0x144: 0x9b, 0x145: 0x9c, 0x146: 0x9d, 0x147: 0x9e,\n\t0x148: 0x9f, 0x149: 0xa0, 0x14a: 0xa1, 0x14b: 0xa2, 0x14c: 0xa3, 0x14d: 0xa4, 0x14e: 0xa5, 0x14f: 0xa6,\n\t0x150: 0xa7, 0x151: 0x9f, 0x152: 0x9f, 0x153: 0x9f, 0x154: 0x9f, 0x155: 0x9f, 0x156: 0x9f, 0x157: 0x9f,\n\t0x158: 0x9f, 0x159: 0xa8, 0x15a: 0xa9, 0x15b: 0xaa, 0x15c: 0xab, 0x15d: 0xac, 0x15e: 0xad, 0x15f: 0xae,\n\t0x160: 0xaf, 0x161: 0xb0, 0x162: 0xb1, 0x163: 0xb2, 0x164: 0xb3, 0x165: 0xb4, 0x166: 0xb5, 0x167: 0xb6,\n\t0x168: 0xb7, 0x169: 0xb8, 0x16a: 0xb9, 0x16b: 0xba, 0x16c: 0xbb, 0x16d: 0xbc, 0x16e: 0xbd, 0x16f: 0xbe,\n\t0x170: 0xbf, 0x171: 0xc0, 0x172: 0xc1, 0x173: 0xc2, 0x174: 0x25, 0x175: 0x26, 0x176: 0x27, 0x177: 0xc3,\n\t0x178: 0x28, 0x179: 0x28, 0x17a: 0x29, 0x17b: 0x28, 0x17c: 0xc4, 0x17d: 0x2a, 0x17e: 0x2b, 0x17f: 0x2c,\n\t// Block 0x6, offset 0x180\n\t0x180: 0x2d, 0x181: 0x2e, 0x182: 0x2f, 0x183: 0xc5, 0x184: 0x30, 0x185: 0x31, 0x186: 0xc6, 0x187: 0x9b,\n\t0x188: 0xc7, 0x189: 0xc8, 0x18a: 0x9b, 0x18b: 0x9b, 0x18c: 0xc9, 0x18d: 0x9b, 0x18e: 0x9b, 0x18f: 0x9b,\n\t0x190: 0xca, 0x191: 0x32, 0x192: 0x33, 0x193: 0x34, 0x194: 0x9b, 0x195: 0x9b, 0x196: 0x9b, 0x197: 0x9b,\n\t0x198: 0x9b, 0x199: 0x9b, 0x19a: 0x9b, 0x19b: 0x9b, 0x19c: 0x9b, 0x19d: 0x9b, 0x19e: 0x9b, 0x19f: 0x9b,\n\t0x1a0: 0x9b, 0x1a1: 0x9b, 0x1a2: 0x9b, 0x1a3: 0x9b, 0x1a4: 0x9b, 0x1a5: 0x9b, 0x1a6: 0x9b, 0x1a7: 0x9b,\n\t0x1a8: 0xcb, 0x1a9: 0xcc, 0x1aa: 0x9b, 0x1ab: 0xcd, 0x1ac: 0x9b, 0x1ad: 0xce, 0x1ae: 0xcf, 0x1af: 0xd0,\n\t0x1b0: 0xd1, 0x1b1: 0x35, 0x1b2: 0x28, 0x1b3: 0x36, 0x1b4: 0xd2, 0x1b5: 0xd3, 0x1b6: 0xd4, 0x1b7: 0xd5,\n\t0x1b8: 0xd6, 0x1b9: 0xd7, 0x1ba: 0xd8, 0x1bb: 0xd9, 0x1bc: 0xda, 0x1bd: 0xdb, 0x1be: 0xdc, 0x1bf: 0x37,\n\t// Block 0x7, offset 0x1c0\n\t0x1c0: 0x38, 0x1c1: 0xdd, 0x1c2: 0xde, 0x1c3: 0xdf, 0x1c4: 0xe0, 0x1c5: 0x39, 0x1c6: 0x3a, 0x1c7: 0xe1,\n\t0x1c8: 0xe2, 0x1c9: 0x3b, 0x1ca: 0x3c, 0x1cb: 0x3d, 0x1cc: 0x3e, 0x1cd: 0x3f, 0x1ce: 0x40, 0x1cf: 0x41,\n\t0x1d0: 0x9f, 0x1d1: 0x9f, 0x1d2: 0x9f, 0x1d3: 0x9f, 0x1d4: 0x9f, 0x1d5: 0x9f, 0x1d6: 0x9f, 0x1d7: 0x9f,\n\t0x1d8: 0x9f, 0x1d9: 0x9f, 0x1da: 0x9f, 0x1db: 0x9f, 0x1dc: 0x9f, 0x1dd: 0x9f, 0x1de: 0x9f, 0x1df: 0x9f,\n\t0x1e0: 0x9f, 0x1e1: 0x9f, 0x1e2: 0x9f, 0x1e3: 0x9f, 0x1e4: 0x9f, 0x1e5: 0x9f, 0x1e6: 0x9f, 0x1e7: 0x9f,\n\t0x1e8: 0x9f, 0x1e9: 0x9f, 0x1ea: 0x9f, 0x1eb: 0x9f, 0x1ec: 0x9f, 0x1ed: 0x9f, 0x1ee: 0x9f, 0x1ef: 0x9f,\n\t0x1f0: 0x9f, 0x1f1: 0x9f, 0x1f2: 0x9f, 0x1f3: 0x9f, 0x1f4: 0x9f, 0x1f5: 0x9f, 0x1f6: 0x9f, 0x1f7: 0x9f,\n\t0x1f8: 0x9f, 0x1f9: 0x9f, 0x1fa: 0x9f, 0x1fb: 0x9f, 0x1fc: 0x9f, 0x1fd: 0x9f, 0x1fe: 0x9f, 0x1ff: 0x9f,\n\t// Block 0x8, offset 0x200\n\t0x200: 0x9f, 0x201: 0x9f, 0x202: 0x9f, 0x203: 0x9f, 0x204: 0x9f, 0x205: 0x9f, 0x206: 0x9f, 0x207: 0x9f,\n\t0x208: 0x9f, 0x209: 0x9f, 0x20a: 0x9f, 0x20b: 0x9f, 0x20c: 0x9f, 0x20d: 0x9f, 0x20e: 0x9f, 0x20f: 0x9f,\n\t0x210: 0x9f, 0x211: 0x9f, 0x212: 0x9f, 0x213: 0x9f, 0x214: 0x9f, 0x215: 0x9f, 0x216: 0x9f, 0x217: 0x9f,\n\t0x218: 0x9f, 0x219: 0x9f, 0x21a: 0x9f, 0x21b: 0x9f, 0x21c: 0x9f, 0x21d: 0x9f, 0x21e: 0x9f, 0x21f: 0x9f,\n\t0x220: 0x9f, 0x221: 0x9f, 0x222: 0x9f, 0x223: 0x9f, 0x224: 0x9f, 0x225: 0x9f, 0x226: 0x9f, 0x227: 0x9f,\n\t0x228: 0x9f, 0x229: 0x9f, 0x22a: 0x9f, 0x22b: 0x9f, 0x22c: 0x9f, 0x22d: 0x9f, 0x22e: 0x9f, 0x22f: 0x9f,\n\t0x230: 0x9f, 0x231: 0x9f, 0x232: 0x9f, 0x233: 0x9f, 0x234: 0x9f, 0x235: 0x9f, 0x236: 0xb2, 0x237: 0x9b,\n\t0x238: 0x9f, 0x239: 0x9f, 0x23a: 0x9f, 0x23b: 0x9f, 0x23c: 0x9f, 0x23d: 0x9f, 0x23e: 0x9f, 0x23f: 0x9f,\n\t// Block 0x9, offset 0x240\n\t0x240: 0x9f, 0x241: 0x9f, 0x242: 0x9f, 0x243: 0x9f, 0x244: 0x9f, 0x245: 0x9f, 0x246: 0x9f, 0x247: 0x9f,\n\t0x248: 0x9f, 0x249: 0x9f, 0x24a: 0x9f, 0x24b: 0x9f, 0x24c: 0x9f, 0x24d: 0x9f, 0x24e: 0x9f, 0x24f: 0x9f,\n\t0x250: 0x9f, 0x251: 0x9f, 0x252: 0x9f, 0x253: 0x9f, 0x254: 0x9f, 0x255: 0x9f, 0x256: 0x9f, 0x257: 0x9f,\n\t0x258: 0x9f, 0x259: 0x9f, 0x25a: 0x9f, 0x25b: 0x9f, 0x25c: 0x9f, 0x25d: 0x9f, 0x25e: 0x9f, 0x25f: 0x9f,\n\t0x260: 0x9f, 0x261: 0x9f, 0x262: 0x9f, 0x263: 0x9f, 0x264: 0x9f, 0x265: 0x9f, 0x266: 0x9f, 0x267: 0x9f,\n\t0x268: 0x9f, 0x269: 0x9f, 0x26a: 0x9f, 0x26b: 0x9f, 0x26c: 0x9f, 0x26d: 0x9f, 0x26e: 0x9f, 0x26f: 0x9f,\n\t0x270: 0x9f, 0x271: 0x9f, 0x272: 0x9f, 0x273: 0x9f, 0x274: 0x9f, 0x275: 0x9f, 0x276: 0x9f, 0x277: 0x9f,\n\t0x278: 0x9f, 0x279: 0x9f, 0x27a: 0x9f, 0x27b: 0x9f, 0x27c: 0x9f, 0x27d: 0x9f, 0x27e: 0x9f, 0x27f: 0x9f,\n\t// Block 0xa, offset 0x280\n\t0x280: 0x9f, 0x281: 0x9f, 0x282: 0x9f, 0x283: 0x9f, 0x284: 0x9f, 0x285: 0x9f, 0x286: 0x9f, 0x287: 0x9f,\n\t0x288: 0x9f, 0x289: 0x9f, 0x28a: 0x9f, 0x28b: 0x9f, 0x28c: 0x9f, 0x28d: 0x9f, 0x28e: 0x9f, 0x28f: 0x9f,\n\t0x290: 0x9f, 0x291: 0x9f, 0x292: 0x9f, 0x293: 0x9f, 0x294: 0x9f, 0x295: 0x9f, 0x296: 0x9f, 0x297: 0x9f,\n\t0x298: 0x9f, 0x299: 0x9f, 0x29a: 0x9f, 0x29b: 0x9f, 0x29c: 0x9f, 0x29d: 0x9f, 0x29e: 0x9f, 0x29f: 0x9f,\n\t0x2a0: 0x9f, 0x2a1: 0x9f, 0x2a2: 0x9f, 0x2a3: 0x9f, 0x2a4: 0x9f, 0x2a5: 0x9f, 0x2a6: 0x9f, 0x2a7: 0x9f,\n\t0x2a8: 0x9f, 0x2a9: 0x9f, 0x2aa: 0x9f, 0x2ab: 0x9f, 0x2ac: 0x9f, 0x2ad: 0x9f, 0x2ae: 0x9f, 0x2af: 0x9f,\n\t0x2b0: 0x9f, 0x2b1: 0x9f, 0x2b2: 0x9f, 0x2b3: 0x9f, 0x2b4: 0x9f, 0x2b5: 0x9f, 0x2b6: 0x9f, 0x2b7: 0x9f,\n\t0x2b8: 0x9f, 0x2b9: 0x9f, 0x2ba: 0x9f, 0x2bb: 0x9f, 0x2bc: 0x9f, 0x2bd: 0x9f, 0x2be: 0x9f, 0x2bf: 0xe3,\n\t// Block 0xb, offset 0x2c0\n\t0x2c0: 0x9f, 0x2c1: 0x9f, 0x2c2: 0x9f, 0x2c3: 0x9f, 0x2c4: 0x9f, 0x2c5: 0x9f, 0x2c6: 0x9f, 0x2c7: 0x9f,\n\t0x2c8: 0x9f, 0x2c9: 0x9f, 0x2ca: 0x9f, 0x2cb: 0x9f, 0x2cc: 0x9f, 0x2cd: 0x9f, 0x2ce: 0x9f, 0x2cf: 0x9f,\n\t0x2d0: 0x9f, 0x2d1: 0x9f, 0x2d2: 0xe4, 0x2d3: 0xe5, 0x2d4: 0x9f, 0x2d5: 0x9f, 0x2d6: 0x9f, 0x2d7: 0x9f,\n\t0x2d8: 0xe6, 0x2d9: 0x42, 0x2da: 0x43, 0x2db: 0xe7, 0x2dc: 0x44, 0x2dd: 0x45, 0x2de: 0x46, 0x2df: 0xe8,\n\t0x2e0: 0xe9, 0x2e1: 0xea, 0x2e2: 0xeb, 0x2e3: 0xec, 0x2e4: 0xed, 0x2e5: 0xee, 0x2e6: 0xef, 0x2e7: 0xf0,\n\t0x2e8: 0xf1, 0x2e9: 0xf2, 0x2ea: 0xf3, 0x2eb: 0xf4, 0x2ec: 0xf5, 0x2ed: 0xf6, 0x2ee: 0xf7, 0x2ef: 0xf8,\n\t0x2f0: 0x9f, 0x2f1: 0x9f, 0x2f2: 0x9f, 0x2f3: 0x9f, 0x2f4: 0x9f, 0x2f5: 0x9f, 0x2f6: 0x9f, 0x2f7: 0x9f,\n\t0x2f8: 0x9f, 0x2f9: 0x9f, 0x2fa: 0x9f, 0x2fb: 0x9f, 0x2fc: 0x9f, 0x2fd: 0x9f, 0x2fe: 0x9f, 0x2ff: 0x9f,\n\t// Block 0xc, offset 0x300\n\t0x300: 0x9f, 0x301: 0x9f, 0x302: 0x9f, 0x303: 0x9f, 0x304: 0x9f, 0x305: 0x9f, 0x306: 0x9f, 0x307: 0x9f,\n\t0x308: 0x9f, 0x309: 0x9f, 0x30a: 0x9f, 0x30b: 0x9f, 0x30c: 0x9f, 0x30d: 0x9f, 0x30e: 0x9f, 0x30f: 0x9f,\n\t0x310: 0x9f, 0x311: 0x9f, 0x312: 0x9f, 0x313: 0x9f, 0x314: 0x9f, 0x315: 0x9f, 0x316: 0x9f, 0x317: 0x9f,\n\t0x318: 0x9f, 0x319: 0x9f, 0x31a: 0x9f, 0x31b: 0x9f, 0x31c: 0x9f, 0x31d: 0x9f, 0x31e: 0xf9, 0x31f: 0xfa,\n\t// Block 0xd, offset 0x340\n\t0x340: 0xba, 0x341: 0xba, 0x342: 0xba, 0x343: 0xba, 0x344: 0xba, 0x345: 0xba, 0x346: 0xba, 0x347: 0xba,\n\t0x348: 0xba, 0x349: 0xba, 0x34a: 0xba, 0x34b: 0xba, 0x34c: 0xba, 0x34d: 0xba, 0x34e: 0xba, 0x34f: 0xba,\n\t0x350: 0xba, 0x351: 0xba, 0x352: 0xba, 0x353: 0xba, 0x354: 0xba, 0x355: 0xba, 0x356: 0xba, 0x357: 0xba,\n\t0x358: 0xba, 0x359: 0xba, 0x35a: 0xba, 0x35b: 0xba, 0x35c: 0xba, 0x35d: 0xba, 0x35e: 0xba, 0x35f: 0xba,\n\t0x360: 0xba, 0x361: 0xba, 0x362: 0xba, 0x363: 0xba, 0x364: 0xba, 0x365: 0xba, 0x366: 0xba, 0x367: 0xba,\n\t0x368: 0xba, 0x369: 0xba, 0x36a: 0xba, 0x36b: 0xba, 0x36c: 0xba, 0x36d: 0xba, 0x36e: 0xba, 0x36f: 0xba,\n\t0x370: 0xba, 0x371: 0xba, 0x372: 0xba, 0x373: 0xba, 0x374: 0xba, 0x375: 0xba, 0x376: 0xba, 0x377: 0xba,\n\t0x378: 0xba, 0x379: 0xba, 0x37a: 0xba, 0x37b: 0xba, 0x37c: 0xba, 0x37d: 0xba, 0x37e: 0xba, 0x37f: 0xba,\n\t// Block 0xe, offset 0x380\n\t0x380: 0xba, 0x381: 0xba, 0x382: 0xba, 0x383: 0xba, 0x384: 0xba, 0x385: 0xba, 0x386: 0xba, 0x387: 0xba,\n\t0x388: 0xba, 0x389: 0xba, 0x38a: 0xba, 0x38b: 0xba, 0x38c: 0xba, 0x38d: 0xba, 0x38e: 0xba, 0x38f: 0xba,\n\t0x390: 0xba, 0x391: 0xba, 0x392: 0xba, 0x393: 0xba, 0x394: 0xba, 0x395: 0xba, 0x396: 0xba, 0x397: 0xba,\n\t0x398: 0xba, 0x399: 0xba, 0x39a: 0xba, 0x39b: 0xba, 0x39c: 0xba, 0x39d: 0xba, 0x39e: 0xba, 0x39f: 0xba,\n\t0x3a0: 0xba, 0x3a1: 0xba, 0x3a2: 0xba, 0x3a3: 0xba, 0x3a4: 0xfb, 0x3a5: 0xfc, 0x3a6: 0xfd, 0x3a7: 0xfe,\n\t0x3a8: 0x47, 0x3a9: 0xff, 0x3aa: 0x100, 0x3ab: 0x48, 0x3ac: 0x49, 0x3ad: 0x4a, 0x3ae: 0x4b, 0x3af: 0x4c,\n\t0x3b0: 0x101, 0x3b1: 0x4d, 0x3b2: 0x4e, 0x3b3: 0x4f, 0x3b4: 0x50, 0x3b5: 0x51, 0x3b6: 0x102, 0x3b7: 0x52,\n\t0x3b8: 0x53, 0x3b9: 0x54, 0x3ba: 0x55, 0x3bb: 0x56, 0x3bc: 0x57, 0x3bd: 0x58, 0x3be: 0x59, 0x3bf: 0x5a,\n\t// Block 0xf, offset 0x3c0\n\t0x3c0: 0x103, 0x3c1: 0x104, 0x3c2: 0x9f, 0x3c3: 0x105, 0x3c4: 0x106, 0x3c5: 0x9b, 0x3c6: 0x107, 0x3c7: 0x108,\n\t0x3c8: 0xba, 0x3c9: 0xba, 0x3ca: 0x109, 0x3cb: 0x10a, 0x3cc: 0x10b, 0x3cd: 0x10c, 0x3ce: 0x10d, 0x3cf: 0x10e,\n\t0x3d0: 0x10f, 0x3d1: 0x9f, 0x3d2: 0x110, 0x3d3: 0x111, 0x3d4: 0x112, 0x3d5: 0x113, 0x3d6: 0xba, 0x3d7: 0xba,\n\t0x3d8: 0x9f, 0x3d9: 0x9f, 0x3da: 0x9f, 0x3db: 0x9f, 0x3dc: 0x114, 0x3dd: 0x115, 0x3de: 0xba, 0x3df: 0xba,\n\t0x3e0: 0x116, 0x3e1: 0x117, 0x3e2: 0x118, 0x3e3: 0x119, 0x3e4: 0x11a, 0x3e5: 0xba, 0x3e6: 0x11b, 0x3e7: 0x11c,\n\t0x3e8: 0x11d, 0x3e9: 0x11e, 0x3ea: 0x11f, 0x3eb: 0x5b, 0x3ec: 0x120, 0x3ed: 0x121, 0x3ee: 0x5c, 0x3ef: 0xba,\n\t0x3f0: 0x122, 0x3f1: 0x123, 0x3f2: 0x124, 0x3f3: 0x125, 0x3f4: 0x126, 0x3f5: 0xba, 0x3f6: 0xba, 0x3f7: 0xba,\n\t0x3f8: 0xba, 0x3f9: 0x127, 0x3fa: 0xba, 0x3fb: 0xba, 0x3fc: 0x128, 0x3fd: 0x129, 0x3fe: 0xba, 0x3ff: 0xba,\n\t// Block 0x10, offset 0x400\n\t0x400: 0x12a, 0x401: 0x12b, 0x402: 0x12c, 0x403: 0x12d, 0x404: 0x12e, 0x405: 0x12f, 0x406: 0x130, 0x407: 0x131,\n\t0x408: 0x132, 0x409: 0xba, 0x40a: 0x133, 0x40b: 0x134, 0x40c: 0x5d, 0x40d: 0x5e, 0x40e: 0xba, 0x40f: 0xba,\n\t0x410: 0x135, 0x411: 0x136, 0x412: 0x137, 0x413: 0x138, 0x414: 0xba, 0x415: 0xba, 0x416: 0x139, 0x417: 0x13a,\n\t0x418: 0x13b, 0x419: 0x13c, 0x41a: 0x13d, 0x41b: 0x13e, 0x41c: 0x13f, 0x41d: 0xba, 0x41e: 0xba, 0x41f: 0xba,\n\t0x420: 0x140, 0x421: 0xba, 0x422: 0x141, 0x423: 0x142, 0x424: 0xba, 0x425: 0xba, 0x426: 0xba, 0x427: 0xba,\n\t0x428: 0x143, 0x429: 0x144, 0x42a: 0x145, 0x42b: 0x146, 0x42c: 0xba, 0x42d: 0xba, 0x42e: 0xba, 0x42f: 0xba,\n\t0x430: 0x147, 0x431: 0x148, 0x432: 0x149, 0x433: 0xba, 0x434: 0x14a, 0x435: 0x14b, 0x436: 0x14c, 0x437: 0xba,\n\t0x438: 0xba, 0x439: 0xba, 0x43a: 0xba, 0x43b: 0x14d, 0x43c: 0xba, 0x43d: 0xba, 0x43e: 0xba, 0x43f: 0xba,\n\t// Block 0x11, offset 0x440\n\t0x440: 0x9f, 0x441: 0x9f, 0x442: 0x9f, 0x443: 0x9f, 0x444: 0x9f, 0x445: 0x9f, 0x446: 0x9f, 0x447: 0x9f,\n\t0x448: 0x9f, 0x449: 0x9f, 0x44a: 0x9f, 0x44b: 0x9f, 0x44c: 0x9f, 0x44d: 0x9f, 0x44e: 0x14e, 0x44f: 0xba,\n\t0x450: 0x9b, 0x451: 0x14f, 0x452: 0x9f, 0x453: 0x9f, 0x454: 0x9f, 0x455: 0x150, 0x456: 0xba, 0x457: 0xba,\n\t0x458: 0xba, 0x459: 0xba, 0x45a: 0xba, 0x45b: 0xba, 0x45c: 0xba, 0x45d: 0xba, 0x45e: 0xba, 0x45f: 0xba,\n\t0x460: 0xba, 0x461: 0xba, 0x462: 0xba, 0x463: 0xba, 0x464: 0xba, 0x465: 0xba, 0x466: 0xba, 0x467: 0xba,\n\t0x468: 0xba, 0x469: 0xba, 0x46a: 0xba, 0x46b: 0xba, 0x46c: 0xba, 0x46d: 0xba, 0x46e: 0xba, 0x46f: 0xba,\n\t0x470: 0xba, 0x471: 0xba, 0x472: 0xba, 0x473: 0xba, 0x474: 0xba, 0x475: 0xba, 0x476: 0xba, 0x477: 0xba,\n\t0x478: 0xba, 0x479: 0xba, 0x47a: 0xba, 0x47b: 0xba, 0x47c: 0xba, 0x47d: 0xba, 0x47e: 0xba, 0x47f: 0xba,\n\t// Block 0x12, offset 0x480\n\t0x480: 0x9f, 0x481: 0x9f, 0x482: 0x9f, 0x483: 0x9f, 0x484: 0x9f, 0x485: 0x9f, 0x486: 0x9f, 0x487: 0x9f,\n\t0x488: 0x9f, 0x489: 0x9f, 0x48a: 0x9f, 0x48b: 0x9f, 0x48c: 0x9f, 0x48d: 0x9f, 0x48e: 0x9f, 0x48f: 0x9f,\n\t0x490: 0x151, 0x491: 0xba, 0x492: 0xba, 0x493: 0xba, 0x494: 0xba, 0x495: 0xba, 0x496: 0xba, 0x497: 0xba,\n\t0x498: 0xba, 0x499: 0xba, 0x49a: 0xba, 0x49b: 0xba, 0x49c: 0xba, 0x49d: 0xba, 0x49e: 0xba, 0x49f: 0xba,\n\t0x4a0: 0xba, 0x4a1: 0xba, 0x4a2: 0xba, 0x4a3: 0xba, 0x4a4: 0xba, 0x4a5: 0xba, 0x4a6: 0xba, 0x4a7: 0xba,\n\t0x4a8: 0xba, 0x4a9: 0xba, 0x4aa: 0xba, 0x4ab: 0xba, 0x4ac: 0xba, 0x4ad: 0xba, 0x4ae: 0xba, 0x4af: 0xba,\n\t0x4b0: 0xba, 0x4b1: 0xba, 0x4b2: 0xba, 0x4b3: 0xba, 0x4b4: 0xba, 0x4b5: 0xba, 0x4b6: 0xba, 0x4b7: 0xba,\n\t0x4b8: 0xba, 0x4b9: 0xba, 0x4ba: 0xba, 0x4bb: 0xba, 0x4bc: 0xba, 0x4bd: 0xba, 0x4be: 0xba, 0x4bf: 0xba,\n\t// Block 0x13, offset 0x4c0\n\t0x4c0: 0xba, 0x4c1: 0xba, 0x4c2: 0xba, 0x4c3: 0xba, 0x4c4: 0xba, 0x4c5: 0xba, 0x4c6: 0xba, 0x4c7: 0xba,\n\t0x4c8: 0xba, 0x4c9: 0xba, 0x4ca: 0xba, 0x4cb: 0xba, 0x4cc: 0xba, 0x4cd: 0xba, 0x4ce: 0xba, 0x4cf: 0xba,\n\t0x4d0: 0x9f, 0x4d1: 0x9f, 0x4d2: 0x9f, 0x4d3: 0x9f, 0x4d4: 0x9f, 0x4d5: 0x9f, 0x4d6: 0x9f, 0x4d7: 0x9f,\n\t0x4d8: 0x9f, 0x4d9: 0x152, 0x4da: 0xba, 0x4db: 0xba, 0x4dc: 0xba, 0x4dd: 0xba, 0x4de: 0xba, 0x4df: 0xba,\n\t0x4e0: 0xba, 0x4e1: 0xba, 0x4e2: 0xba, 0x4e3: 0xba, 0x4e4: 0xba, 0x4e5: 0xba, 0x4e6: 0xba, 0x4e7: 0xba,\n\t0x4e8: 0xba, 0x4e9: 0xba, 0x4ea: 0xba, 0x4eb: 0xba, 0x4ec: 0xba, 0x4ed: 0xba, 0x4ee: 0xba, 0x4ef: 0xba,\n\t0x4f0: 0xba, 0x4f1: 0xba, 0x4f2: 0xba, 0x4f3: 0xba, 0x4f4: 0xba, 0x4f5: 0xba, 0x4f6: 0xba, 0x4f7: 0xba,\n\t0x4f8: 0xba, 0x4f9: 0xba, 0x4fa: 0xba, 0x4fb: 0xba, 0x4fc: 0xba, 0x4fd: 0xba, 0x4fe: 0xba, 0x4ff: 0xba,\n\t// Block 0x14, offset 0x500\n\t0x500: 0xba, 0x501: 0xba, 0x502: 0xba, 0x503: 0xba, 0x504: 0xba, 0x505: 0xba, 0x506: 0xba, 0x507: 0xba,\n\t0x508: 0xba, 0x509: 0xba, 0x50a: 0xba, 0x50b: 0xba, 0x50c: 0xba, 0x50d: 0xba, 0x50e: 0xba, 0x50f: 0xba,\n\t0x510: 0xba, 0x511: 0xba, 0x512: 0xba, 0x513: 0xba, 0x514: 0xba, 0x515: 0xba, 0x516: 0xba, 0x517: 0xba,\n\t0x518: 0xba, 0x519: 0xba, 0x51a: 0xba, 0x51b: 0xba, 0x51c: 0xba, 0x51d: 0xba, 0x51e: 0xba, 0x51f: 0xba,\n\t0x520: 0x9f, 0x521: 0x9f, 0x522: 0x9f, 0x523: 0x9f, 0x524: 0x9f, 0x525: 0x9f, 0x526: 0x9f, 0x527: 0x9f,\n\t0x528: 0x146, 0x529: 0x153, 0x52a: 0xba, 0x52b: 0x154, 0x52c: 0x155, 0x52d: 0x156, 0x52e: 0x157, 0x52f: 0xba,\n\t0x530: 0xba, 0x531: 0xba, 0x532: 0xba, 0x533: 0xba, 0x534: 0xba, 0x535: 0xba, 0x536: 0xba, 0x537: 0xba,\n\t0x538: 0xba, 0x539: 0x158, 0x53a: 0x159, 0x53b: 0xba, 0x53c: 0x9f, 0x53d: 0x15a, 0x53e: 0x15b, 0x53f: 0x15c,\n\t// Block 0x15, offset 0x540\n\t0x540: 0x9f, 0x541: 0x9f, 0x542: 0x9f, 0x543: 0x9f, 0x544: 0x9f, 0x545: 0x9f, 0x546: 0x9f, 0x547: 0x9f,\n\t0x548: 0x9f, 0x549: 0x9f, 0x54a: 0x9f, 0x54b: 0x9f, 0x54c: 0x9f, 0x54d: 0x9f, 0x54e: 0x9f, 0x54f: 0x9f,\n\t0x550: 0x9f, 0x551: 0x9f, 0x552: 0x9f, 0x553: 0x9f, 0x554: 0x9f, 0x555: 0x9f, 0x556: 0x9f, 0x557: 0x9f,\n\t0x558: 0x9f, 0x559: 0x9f, 0x55a: 0x9f, 0x55b: 0x9f, 0x55c: 0x9f, 0x55d: 0x9f, 0x55e: 0x9f, 0x55f: 0x15d,\n\t0x560: 0x9f, 0x561: 0x9f, 0x562: 0x9f, 0x563: 0x9f, 0x564: 0x9f, 0x565: 0x9f, 0x566: 0x9f, 0x567: 0x9f,\n\t0x568: 0x9f, 0x569: 0x9f, 0x56a: 0x9f, 0x56b: 0x15e, 0x56c: 0xba, 0x56d: 0xba, 0x56e: 0xba, 0x56f: 0xba,\n\t0x570: 0xba, 0x571: 0xba, 0x572: 0xba, 0x573: 0xba, 0x574: 0xba, 0x575: 0xba, 0x576: 0xba, 0x577: 0xba,\n\t0x578: 0xba, 0x579: 0xba, 0x57a: 0xba, 0x57b: 0xba, 0x57c: 0xba, 0x57d: 0xba, 0x57e: 0xba, 0x57f: 0xba,\n\t// Block 0x16, offset 0x580\n\t0x580: 0x9f, 0x581: 0x9f, 0x582: 0x9f, 0x583: 0x9f, 0x584: 0x15f, 0x585: 0x160, 0x586: 0x9f, 0x587: 0x9f,\n\t0x588: 0x9f, 0x589: 0x9f, 0x58a: 0x9f, 0x58b: 0x161, 0x58c: 0xba, 0x58d: 0xba, 0x58e: 0xba, 0x58f: 0xba,\n\t0x590: 0xba, 0x591: 0xba, 0x592: 0xba, 0x593: 0xba, 0x594: 0xba, 0x595: 0xba, 0x596: 0xba, 0x597: 0xba,\n\t0x598: 0xba, 0x599: 0xba, 0x59a: 0xba, 0x59b: 0xba, 0x59c: 0xba, 0x59d: 0xba, 0x59e: 0xba, 0x59f: 0xba,\n\t0x5a0: 0xba, 0x5a1: 0xba, 0x5a2: 0xba, 0x5a3: 0xba, 0x5a4: 0xba, 0x5a5: 0xba, 0x5a6: 0xba, 0x5a7: 0xba,\n\t0x5a8: 0xba, 0x5a9: 0xba, 0x5aa: 0xba, 0x5ab: 0xba, 0x5ac: 0xba, 0x5ad: 0xba, 0x5ae: 0xba, 0x5af: 0xba,\n\t0x5b0: 0x9f, 0x5b1: 0x162, 0x5b2: 0x163, 0x5b3: 0xba, 0x5b4: 0xba, 0x5b5: 0xba, 0x5b6: 0xba, 0x5b7: 0xba,\n\t0x5b8: 0xba, 0x5b9: 0xba, 0x5ba: 0xba, 0x5bb: 0xba, 0x5bc: 0xba, 0x5bd: 0xba, 0x5be: 0xba, 0x5bf: 0xba,\n\t// Block 0x17, offset 0x5c0\n\t0x5c0: 0x9b, 0x5c1: 0x9b, 0x5c2: 0x9b, 0x5c3: 0x164, 0x5c4: 0x165, 0x5c5: 0x166, 0x5c6: 0x167, 0x5c7: 0x168,\n\t0x5c8: 0x9b, 0x5c9: 0x169, 0x5ca: 0xba, 0x5cb: 0x16a, 0x5cc: 0x9b, 0x5cd: 0x16b, 0x5ce: 0xba, 0x5cf: 0xba,\n\t0x5d0: 0x5f, 0x5d1: 0x60, 0x5d2: 0x61, 0x5d3: 0x62, 0x5d4: 0x63, 0x5d5: 0x64, 0x5d6: 0x65, 0x5d7: 0x66,\n\t0x5d8: 0x67, 0x5d9: 0x68, 0x5da: 0x69, 0x5db: 0x6a, 0x5dc: 0x6b, 0x5dd: 0x6c, 0x5de: 0x6d, 0x5df: 0x6e,\n\t0x5e0: 0x9b, 0x5e1: 0x9b, 0x5e2: 0x9b, 0x5e3: 0x9b, 0x5e4: 0x9b, 0x5e5: 0x9b, 0x5e6: 0x9b, 0x5e7: 0x9b,\n\t0x5e8: 0x16c, 0x5e9: 0x16d, 0x5ea: 0x16e, 0x5eb: 0xba, 0x5ec: 0xba, 0x5ed: 0xba, 0x5ee: 0xba, 0x5ef: 0xba,\n\t0x5f0: 0xba, 0x5f1: 0xba, 0x5f2: 0xba, 0x5f3: 0xba, 0x5f4: 0xba, 0x5f5: 0xba, 0x5f6: 0xba, 0x5f7: 0xba,\n\t0x5f8: 0xba, 0x5f9: 0xba, 0x5fa: 0xba, 0x5fb: 0xba, 0x5fc: 0xba, 0x5fd: 0xba, 0x5fe: 0xba, 0x5ff: 0xba,\n\t// Block 0x18, offset 0x600\n\t0x600: 0x16f, 0x601: 0xba, 0x602: 0xba, 0x603: 0xba, 0x604: 0xba, 0x605: 0xba, 0x606: 0xba, 0x607: 0xba,\n\t0x608: 0xba, 0x609: 0xba, 0x60a: 0xba, 0x60b: 0xba, 0x60c: 0xba, 0x60d: 0xba, 0x60e: 0xba, 0x60f: 0xba,\n\t0x610: 0xba, 0x611: 0xba, 0x612: 0xba, 0x613: 0xba, 0x614: 0xba, 0x615: 0xba, 0x616: 0xba, 0x617: 0xba,\n\t0x618: 0xba, 0x619: 0xba, 0x61a: 0xba, 0x61b: 0xba, 0x61c: 0xba, 0x61d: 0xba, 0x61e: 0xba, 0x61f: 0xba,\n\t0x620: 0x122, 0x621: 0x122, 0x622: 0x122, 0x623: 0x170, 0x624: 0x6f, 0x625: 0x171, 0x626: 0xba, 0x627: 0xba,\n\t0x628: 0xba, 0x629: 0xba, 0x62a: 0xba, 0x62b: 0xba, 0x62c: 0xba, 0x62d: 0xba, 0x62e: 0xba, 0x62f: 0xba,\n\t0x630: 0xba, 0x631: 0x172, 0x632: 0x173, 0x633: 0xba, 0x634: 0xba, 0x635: 0xba, 0x636: 0xba, 0x637: 0xba,\n\t0x638: 0x70, 0x639: 0x71, 0x63a: 0x72, 0x63b: 0x174, 0x63c: 0xba, 0x63d: 0xba, 0x63e: 0xba, 0x63f: 0xba,\n\t// Block 0x19, offset 0x640\n\t0x640: 0x175, 0x641: 0x9b, 0x642: 0x176, 0x643: 0x177, 0x644: 0x73, 0x645: 0x74, 0x646: 0x178, 0x647: 0x179,\n\t0x648: 0x75, 0x649: 0x17a, 0x64a: 0xba, 0x64b: 0xba, 0x64c: 0x9b, 0x64d: 0x9b, 0x64e: 0x9b, 0x64f: 0x9b,\n\t0x650: 0x9b, 0x651: 0x9b, 0x652: 0x9b, 0x653: 0x9b, 0x654: 0x9b, 0x655: 0x9b, 0x656: 0x9b, 0x657: 0x9b,\n\t0x658: 0x9b, 0x659: 0x9b, 0x65a: 0x9b, 0x65b: 0x17b, 0x65c: 0x9b, 0x65d: 0x17c, 0x65e: 0x9b, 0x65f: 0x17d,\n\t0x660: 0x17e, 0x661: 0x17f, 0x662: 0x180, 0x663: 0xba, 0x664: 0x181, 0x665: 0x182, 0x666: 0x183, 0x667: 0x184,\n\t0x668: 0xba, 0x669: 0x185, 0x66a: 0xba, 0x66b: 0xba, 0x66c: 0xba, 0x66d: 0xba, 0x66e: 0xba, 0x66f: 0xba,\n\t0x670: 0xba, 0x671: 0xba, 0x672: 0xba, 0x673: 0xba, 0x674: 0xba, 0x675: 0xba, 0x676: 0xba, 0x677: 0xba,\n\t0x678: 0xba, 0x679: 0xba, 0x67a: 0xba, 0x67b: 0xba, 0x67c: 0xba, 0x67d: 0xba, 0x67e: 0xba, 0x67f: 0xba,\n\t// Block 0x1a, offset 0x680\n\t0x680: 0x9f, 0x681: 0x9f, 0x682: 0x9f, 0x683: 0x9f, 0x684: 0x9f, 0x685: 0x9f, 0x686: 0x9f, 0x687: 0x9f,\n\t0x688: 0x9f, 0x689: 0x9f, 0x68a: 0x9f, 0x68b: 0x9f, 0x68c: 0x9f, 0x68d: 0x9f, 0x68e: 0x9f, 0x68f: 0x9f,\n\t0x690: 0x9f, 0x691: 0x9f, 0x692: 0x9f, 0x693: 0x9f, 0x694: 0x9f, 0x695: 0x9f, 0x696: 0x9f, 0x697: 0x9f,\n\t0x698: 0x9f, 0x699: 0x9f, 0x69a: 0x9f, 0x69b: 0x186, 0x69c: 0x9f, 0x69d: 0x9f, 0x69e: 0x9f, 0x69f: 0x9f,\n\t0x6a0: 0x9f, 0x6a1: 0x9f, 0x6a2: 0x9f, 0x6a3: 0x9f, 0x6a4: 0x9f, 0x6a5: 0x9f, 0x6a6: 0x9f, 0x6a7: 0x9f,\n\t0x6a8: 0x9f, 0x6a9: 0x9f, 0x6aa: 0x9f, 0x6ab: 0x9f, 0x6ac: 0x9f, 0x6ad: 0x9f, 0x6ae: 0x9f, 0x6af: 0x9f,\n\t0x6b0: 0x9f, 0x6b1: 0x9f, 0x6b2: 0x9f, 0x6b3: 0x9f, 0x6b4: 0x9f, 0x6b5: 0x9f, 0x6b6: 0x9f, 0x6b7: 0x9f,\n\t0x6b8: 0x9f, 0x6b9: 0x9f, 0x6ba: 0x9f, 0x6bb: 0x9f, 0x6bc: 0x9f, 0x6bd: 0x9f, 0x6be: 0x9f, 0x6bf: 0x9f,\n\t// Block 0x1b, offset 0x6c0\n\t0x6c0: 0x9f, 0x6c1: 0x9f, 0x6c2: 0x9f, 0x6c3: 0x9f, 0x6c4: 0x9f, 0x6c5: 0x9f, 0x6c6: 0x9f, 0x6c7: 0x9f,\n\t0x6c8: 0x9f, 0x6c9: 0x9f, 0x6ca: 0x9f, 0x6cb: 0x9f, 0x6cc: 0x9f, 0x6cd: 0x9f, 0x6ce: 0x9f, 0x6cf: 0x9f,\n\t0x6d0: 0x9f, 0x6d1: 0x9f, 0x6d2: 0x9f, 0x6d3: 0x9f, 0x6d4: 0x9f, 0x6d5: 0x9f, 0x6d6: 0x9f, 0x6d7: 0x9f,\n\t0x6d8: 0x9f, 0x6d9: 0x9f, 0x6da: 0x9f, 0x6db: 0x9f, 0x6dc: 0x187, 0x6dd: 0x9f, 0x6de: 0x9f, 0x6df: 0x9f,\n\t0x6e0: 0x188, 0x6e1: 0x9f, 0x6e2: 0x9f, 0x6e3: 0x9f, 0x6e4: 0x9f, 0x6e5: 0x9f, 0x6e6: 0x9f, 0x6e7: 0x9f,\n\t0x6e8: 0x9f, 0x6e9: 0x9f, 0x6ea: 0x9f, 0x6eb: 0x9f, 0x6ec: 0x9f, 0x6ed: 0x9f, 0x6ee: 0x9f, 0x6ef: 0x9f,\n\t0x6f0: 0x9f, 0x6f1: 0x9f, 0x6f2: 0x9f, 0x6f3: 0x9f, 0x6f4: 0x9f, 0x6f5: 0x9f, 0x6f6: 0x9f, 0x6f7: 0x9f,\n\t0x6f8: 0x9f, 0x6f9: 0x9f, 0x6fa: 0x9f, 0x6fb: 0x9f, 0x6fc: 0x9f, 0x6fd: 0x9f, 0x6fe: 0x9f, 0x6ff: 0x9f,\n\t// Block 0x1c, offset 0x700\n\t0x700: 0x9f, 0x701: 0x9f, 0x702: 0x9f, 0x703: 0x9f, 0x704: 0x9f, 0x705: 0x9f, 0x706: 0x9f, 0x707: 0x9f,\n\t0x708: 0x9f, 0x709: 0x9f, 0x70a: 0x9f, 0x70b: 0x9f, 0x70c: 0x9f, 0x70d: 0x9f, 0x70e: 0x9f, 0x70f: 0x9f,\n\t0x710: 0x9f, 0x711: 0x9f, 0x712: 0x9f, 0x713: 0x9f, 0x714: 0x9f, 0x715: 0x9f, 0x716: 0x9f, 0x717: 0x9f,\n\t0x718: 0x9f, 0x719: 0x9f, 0x71a: 0x9f, 0x71b: 0x9f, 0x71c: 0x9f, 0x71d: 0x9f, 0x71e: 0x9f, 0x71f: 0x9f,\n\t0x720: 0x9f, 0x721: 0x9f, 0x722: 0x9f, 0x723: 0x9f, 0x724: 0x9f, 0x725: 0x9f, 0x726: 0x9f, 0x727: 0x9f,\n\t0x728: 0x9f, 0x729: 0x9f, 0x72a: 0x9f, 0x72b: 0x9f, 0x72c: 0x9f, 0x72d: 0x9f, 0x72e: 0x9f, 0x72f: 0x9f,\n\t0x730: 0x9f, 0x731: 0x9f, 0x732: 0x9f, 0x733: 0x9f, 0x734: 0x9f, 0x735: 0x9f, 0x736: 0x9f, 0x737: 0x9f,\n\t0x738: 0x9f, 0x739: 0x9f, 0x73a: 0x189, 0x73b: 0x9f, 0x73c: 0x9f, 0x73d: 0x9f, 0x73e: 0x9f, 0x73f: 0x9f,\n\t// Block 0x1d, offset 0x740\n\t0x740: 0x9f, 0x741: 0x9f, 0x742: 0x9f, 0x743: 0x9f, 0x744: 0x9f, 0x745: 0x9f, 0x746: 0x9f, 0x747: 0x9f,\n\t0x748: 0x9f, 0x749: 0x9f, 0x74a: 0x9f, 0x74b: 0x9f, 0x74c: 0x9f, 0x74d: 0x9f, 0x74e: 0x9f, 0x74f: 0x9f,\n\t0x750: 0x9f, 0x751: 0x9f, 0x752: 0x9f, 0x753: 0x9f, 0x754: 0x9f, 0x755: 0x9f, 0x756: 0x9f, 0x757: 0x9f,\n\t0x758: 0x9f, 0x759: 0x9f, 0x75a: 0x9f, 0x75b: 0x9f, 0x75c: 0x9f, 0x75d: 0x9f, 0x75e: 0x9f, 0x75f: 0x9f,\n\t0x760: 0x9f, 0x761: 0x9f, 0x762: 0x9f, 0x763: 0x9f, 0x764: 0x9f, 0x765: 0x9f, 0x766: 0x9f, 0x767: 0x9f,\n\t0x768: 0x9f, 0x769: 0x9f, 0x76a: 0x9f, 0x76b: 0x9f, 0x76c: 0x9f, 0x76d: 0x9f, 0x76e: 0x9f, 0x76f: 0x18a,\n\t0x770: 0xba, 0x771: 0xba, 0x772: 0xba, 0x773: 0xba, 0x774: 0xba, 0x775: 0xba, 0x776: 0xba, 0x777: 0xba,\n\t0x778: 0xba, 0x779: 0xba, 0x77a: 0xba, 0x77b: 0xba, 0x77c: 0xba, 0x77d: 0xba, 0x77e: 0xba, 0x77f: 0xba,\n\t// Block 0x1e, offset 0x780\n\t0x780: 0xba, 0x781: 0xba, 0x782: 0xba, 0x783: 0xba, 0x784: 0xba, 0x785: 0xba, 0x786: 0xba, 0x787: 0xba,\n\t0x788: 0xba, 0x789: 0xba, 0x78a: 0xba, 0x78b: 0xba, 0x78c: 0xba, 0x78d: 0xba, 0x78e: 0xba, 0x78f: 0xba,\n\t0x790: 0xba, 0x791: 0xba, 0x792: 0xba, 0x793: 0xba, 0x794: 0xba, 0x795: 0xba, 0x796: 0xba, 0x797: 0xba,\n\t0x798: 0xba, 0x799: 0xba, 0x79a: 0xba, 0x79b: 0xba, 0x79c: 0xba, 0x79d: 0xba, 0x79e: 0xba, 0x79f: 0xba,\n\t0x7a0: 0x76, 0x7a1: 0x77, 0x7a2: 0x78, 0x7a3: 0x18b, 0x7a4: 0x79, 0x7a5: 0x7a, 0x7a6: 0x18c, 0x7a7: 0x7b,\n\t0x7a8: 0x7c, 0x7a9: 0xba, 0x7aa: 0xba, 0x7ab: 0xba, 0x7ac: 0xba, 0x7ad: 0xba, 0x7ae: 0xba, 0x7af: 0xba,\n\t0x7b0: 0xba, 0x7b1: 0xba, 0x7b2: 0xba, 0x7b3: 0xba, 0x7b4: 0xba, 0x7b5: 0xba, 0x7b6: 0xba, 0x7b7: 0xba,\n\t0x7b8: 0xba, 0x7b9: 0xba, 0x7ba: 0xba, 0x7bb: 0xba, 0x7bc: 0xba, 0x7bd: 0xba, 0x7be: 0xba, 0x7bf: 0xba,\n\t// Block 0x1f, offset 0x7c0\n\t0x7d0: 0x0d, 0x7d1: 0x0e, 0x7d2: 0x0f, 0x7d3: 0x10, 0x7d4: 0x11, 0x7d5: 0x0b, 0x7d6: 0x12, 0x7d7: 0x07,\n\t0x7d8: 0x13, 0x7d9: 0x0b, 0x7da: 0x0b, 0x7db: 0x14, 0x7dc: 0x0b, 0x7dd: 0x15, 0x7de: 0x16, 0x7df: 0x17,\n\t0x7e0: 0x07, 0x7e1: 0x07, 0x7e2: 0x07, 0x7e3: 0x07, 0x7e4: 0x07, 0x7e5: 0x07, 0x7e6: 0x07, 0x7e7: 0x07,\n\t0x7e8: 0x07, 0x7e9: 0x07, 0x7ea: 0x18, 0x7eb: 0x19, 0x7ec: 0x1a, 0x7ed: 0x07, 0x7ee: 0x1b, 0x7ef: 0x1c,\n\t0x7f0: 0x0b, 0x7f1: 0x0b, 0x7f2: 0x0b, 0x7f3: 0x0b, 0x7f4: 0x0b, 0x7f5: 0x0b, 0x7f6: 0x0b, 0x7f7: 0x0b,\n\t0x7f8: 0x0b, 0x7f9: 0x0b, 0x7fa: 0x0b, 0x7fb: 0x0b, 0x7fc: 0x0b, 0x7fd: 0x0b, 0x7fe: 0x0b, 0x7ff: 0x0b,\n\t// Block 0x20, offset 0x800\n\t0x800: 0x0b, 0x801: 0x0b, 0x802: 0x0b, 0x803: 0x0b, 0x804: 0x0b, 0x805: 0x0b, 0x806: 0x0b, 0x807: 0x0b,\n\t0x808: 0x0b, 0x809: 0x0b, 0x80a: 0x0b, 0x80b: 0x0b, 0x80c: 0x0b, 0x80d: 0x0b, 0x80e: 0x0b, 0x80f: 0x0b,\n\t0x810: 0x0b, 0x811: 0x0b, 0x812: 0x0b, 0x813: 0x0b, 0x814: 0x0b, 0x815: 0x0b, 0x816: 0x0b, 0x817: 0x0b,\n\t0x818: 0x0b, 0x819: 0x0b, 0x81a: 0x0b, 0x81b: 0x0b, 0x81c: 0x0b, 0x81d: 0x0b, 0x81e: 0x0b, 0x81f: 0x0b,\n\t0x820: 0x0b, 0x821: 0x0b, 0x822: 0x0b, 0x823: 0x0b, 0x824: 0x0b, 0x825: 0x0b, 0x826: 0x0b, 0x827: 0x0b,\n\t0x828: 0x0b, 0x829: 0x0b, 0x82a: 0x0b, 0x82b: 0x0b, 0x82c: 0x0b, 0x82d: 0x0b, 0x82e: 0x0b, 0x82f: 0x0b,\n\t0x830: 0x0b, 0x831: 0x0b, 0x832: 0x0b, 0x833: 0x0b, 0x834: 0x0b, 0x835: 0x0b, 0x836: 0x0b, 0x837: 0x0b,\n\t0x838: 0x0b, 0x839: 0x0b, 0x83a: 0x0b, 0x83b: 0x0b, 0x83c: 0x0b, 0x83d: 0x0b, 0x83e: 0x0b, 0x83f: 0x0b,\n\t// Block 0x21, offset 0x840\n\t0x840: 0x18d, 0x841: 0x18e, 0x842: 0xba, 0x843: 0xba, 0x844: 0x18f, 0x845: 0x18f, 0x846: 0x18f, 0x847: 0x190,\n\t0x848: 0xba, 0x849: 0xba, 0x84a: 0xba, 0x84b: 0xba, 0x84c: 0xba, 0x84d: 0xba, 0x84e: 0xba, 0x84f: 0xba,\n\t0x850: 0xba, 0x851: 0xba, 0x852: 0xba, 0x853: 0xba, 0x854: 0xba, 0x855: 0xba, 0x856: 0xba, 0x857: 0xba,\n\t0x858: 0xba, 0x859: 0xba, 0x85a: 0xba, 0x85b: 0xba, 0x85c: 0xba, 0x85d: 0xba, 0x85e: 0xba, 0x85f: 0xba,\n\t0x860: 0xba, 0x861: 0xba, 0x862: 0xba, 0x863: 0xba, 0x864: 0xba, 0x865: 0xba, 0x866: 0xba, 0x867: 0xba,\n\t0x868: 0xba, 0x869: 0xba, 0x86a: 0xba, 0x86b: 0xba, 0x86c: 0xba, 0x86d: 0xba, 0x86e: 0xba, 0x86f: 0xba,\n\t0x870: 0xba, 0x871: 0xba, 0x872: 0xba, 0x873: 0xba, 0x874: 0xba, 0x875: 0xba, 0x876: 0xba, 0x877: 0xba,\n\t0x878: 0xba, 0x879: 0xba, 0x87a: 0xba, 0x87b: 0xba, 0x87c: 0xba, 0x87d: 0xba, 0x87e: 0xba, 0x87f: 0xba,\n\t// Block 0x22, offset 0x880\n\t0x880: 0x0b, 0x881: 0x0b, 0x882: 0x0b, 0x883: 0x0b, 0x884: 0x0b, 0x885: 0x0b, 0x886: 0x0b, 0x887: 0x0b,\n\t0x888: 0x0b, 0x889: 0x0b, 0x88a: 0x0b, 0x88b: 0x0b, 0x88c: 0x0b, 0x88d: 0x0b, 0x88e: 0x0b, 0x88f: 0x0b,\n\t0x890: 0x0b, 0x891: 0x0b, 0x892: 0x0b, 0x893: 0x0b, 0x894: 0x0b, 0x895: 0x0b, 0x896: 0x0b, 0x897: 0x0b,\n\t0x898: 0x0b, 0x899: 0x0b, 0x89a: 0x0b, 0x89b: 0x0b, 0x89c: 0x0b, 0x89d: 0x0b, 0x89e: 0x0b, 0x89f: 0x0b,\n\t0x8a0: 0x1f, 0x8a1: 0x0b, 0x8a2: 0x0b, 0x8a3: 0x0b, 0x8a4: 0x0b, 0x8a5: 0x0b, 0x8a6: 0x0b, 0x8a7: 0x0b,\n\t0x8a8: 0x0b, 0x8a9: 0x0b, 0x8aa: 0x0b, 0x8ab: 0x0b, 0x8ac: 0x0b, 0x8ad: 0x0b, 0x8ae: 0x0b, 0x8af: 0x0b,\n\t0x8b0: 0x0b, 0x8b1: 0x0b, 0x8b2: 0x0b, 0x8b3: 0x0b, 0x8b4: 0x0b, 0x8b5: 0x0b, 0x8b6: 0x0b, 0x8b7: 0x0b,\n\t0x8b8: 0x0b, 0x8b9: 0x0b, 0x8ba: 0x0b, 0x8bb: 0x0b, 0x8bc: 0x0b, 0x8bd: 0x0b, 0x8be: 0x0b, 0x8bf: 0x0b,\n\t// Block 0x23, offset 0x8c0\n\t0x8c0: 0x0b, 0x8c1: 0x0b, 0x8c2: 0x0b, 0x8c3: 0x0b, 0x8c4: 0x0b, 0x8c5: 0x0b, 0x8c6: 0x0b, 0x8c7: 0x0b,\n\t0x8c8: 0x0b, 0x8c9: 0x0b, 0x8ca: 0x0b, 0x8cb: 0x0b, 0x8cc: 0x0b, 0x8cd: 0x0b, 0x8ce: 0x0b, 0x8cf: 0x0b,\n}\n\n// idnaSparseOffset: 276 entries, 552 bytes\nvar idnaSparseOffset = []uint16{0x0, 0x8, 0x19, 0x25, 0x27, 0x2c, 0x33, 0x3e, 0x4a, 0x4e, 0x5d, 0x62, 0x6c, 0x78, 0x86, 0x8b, 0x94, 0xa4, 0xb2, 0xbe, 0xca, 0xdb, 0xe5, 0xec, 0xf9, 0x10a, 0x111, 0x11c, 0x12b, 0x139, 0x143, 0x145, 0x14a, 0x14d, 0x150, 0x152, 0x15e, 0x169, 0x171, 0x177, 0x17d, 0x182, 0x187, 0x18a, 0x18e, 0x194, 0x199, 0x1a5, 0x1af, 0x1b5, 0x1c6, 0x1d0, 0x1d3, 0x1db, 0x1de, 0x1eb, 0x1f3, 0x1f7, 0x1fe, 0x206, 0x216, 0x222, 0x224, 0x22e, 0x23a, 0x246, 0x252, 0x25a, 0x25f, 0x269, 0x27a, 0x27e, 0x289, 0x28d, 0x296, 0x29e, 0x2a4, 0x2a9, 0x2ac, 0x2b0, 0x2b6, 0x2ba, 0x2be, 0x2c2, 0x2c7, 0x2cd, 0x2d5, 0x2dc, 0x2e7, 0x2f1, 0x2f5, 0x2f8, 0x2fe, 0x302, 0x304, 0x307, 0x309, 0x30c, 0x316, 0x319, 0x328, 0x32c, 0x331, 0x334, 0x338, 0x33d, 0x342, 0x348, 0x34e, 0x35d, 0x363, 0x367, 0x376, 0x37b, 0x383, 0x38d, 0x398, 0x3a0, 0x3b1, 0x3ba, 0x3ca, 0x3d7, 0x3e1, 0x3e6, 0x3f3, 0x3f7, 0x3fc, 0x3fe, 0x402, 0x404, 0x408, 0x411, 0x417, 0x41b, 0x42b, 0x435, 0x43a, 0x43d, 0x443, 0x44a, 0x44f, 0x453, 0x459, 0x45e, 0x467, 0x46c, 0x472, 0x479, 0x480, 0x487, 0x48b, 0x490, 0x493, 0x498, 0x4a4, 0x4aa, 0x4af, 0x4b6, 0x4be, 0x4c3, 0x4c7, 0x4d7, 0x4de, 0x4e2, 0x4e6, 0x4ed, 0x4ef, 0x4f2, 0x4f5, 0x4f9, 0x502, 0x506, 0x50e, 0x516, 0x51c, 0x525, 0x531, 0x538, 0x541, 0x54b, 0x552, 0x560, 0x56d, 0x57a, 0x583, 0x587, 0x596, 0x59e, 0x5a9, 0x5b2, 0x5b8, 0x5c0, 0x5c9, 0x5d3, 0x5d6, 0x5e2, 0x5eb, 0x5ee, 0x5f3, 0x5fe, 0x607, 0x613, 0x616, 0x620, 0x629, 0x635, 0x642, 0x64f, 0x65d, 0x664, 0x667, 0x66c, 0x66f, 0x672, 0x675, 0x67c, 0x683, 0x687, 0x692, 0x695, 0x698, 0x69b, 0x6a1, 0x6a6, 0x6aa, 0x6ad, 0x6b0, 0x6b3, 0x6b6, 0x6b9, 0x6be, 0x6c8, 0x6cb, 0x6cf, 0x6de, 0x6ea, 0x6ee, 0x6f3, 0x6f7, 0x6fc, 0x700, 0x705, 0x70e, 0x719, 0x71f, 0x727, 0x72a, 0x72d, 0x731, 0x735, 0x73b, 0x741, 0x746, 0x749, 0x759, 0x760, 0x763, 0x766, 0x76a, 0x770, 0x775, 0x77a, 0x782, 0x787, 0x78b, 0x78f, 0x792, 0x795, 0x799, 0x79d, 0x7a0, 0x7b0, 0x7c1, 0x7c6, 0x7c8, 0x7ca}\n\n// idnaSparseValues: 1997 entries, 7988 bytes\nvar idnaSparseValues = [1997]valueRange{\n\t// Block 0x0, offset 0x0\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0xe105, lo: 0x80, hi: 0x96},\n\t{value: 0x0018, lo: 0x97, hi: 0x97},\n\t{value: 0xe105, lo: 0x98, hi: 0x9e},\n\t{value: 0x001f, lo: 0x9f, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xb6},\n\t{value: 0x0018, lo: 0xb7, hi: 0xb7},\n\t{value: 0x0008, lo: 0xb8, hi: 0xbf},\n\t// Block 0x1, offset 0x8\n\t{value: 0x0000, lo: 0x10},\n\t{value: 0x0008, lo: 0x80, hi: 0x80},\n\t{value: 0xe01d, lo: 0x81, hi: 0x81},\n\t{value: 0x0008, lo: 0x82, hi: 0x82},\n\t{value: 0x0335, lo: 0x83, hi: 0x83},\n\t{value: 0x034d, lo: 0x84, hi: 0x84},\n\t{value: 0x0365, lo: 0x85, hi: 0x85},\n\t{value: 0xe00d, lo: 0x86, hi: 0x86},\n\t{value: 0x0008, lo: 0x87, hi: 0x87},\n\t{value: 0xe00d, lo: 0x88, hi: 0x88},\n\t{value: 0x0008, lo: 0x89, hi: 0x89},\n\t{value: 0xe00d, lo: 0x8a, hi: 0x8a},\n\t{value: 0x0008, lo: 0x8b, hi: 0x8b},\n\t{value: 0xe00d, lo: 0x8c, hi: 0x8c},\n\t{value: 0x0008, lo: 0x8d, hi: 0x8d},\n\t{value: 0xe00d, lo: 0x8e, hi: 0x8e},\n\t{value: 0x0008, lo: 0x8f, hi: 0xbf},\n\t// Block 0x2, offset 0x19\n\t{value: 0x0000, lo: 0x0b},\n\t{value: 0x0008, lo: 0x80, hi: 0xaf},\n\t{value: 0x0249, lo: 0xb0, hi: 0xb0},\n\t{value: 0x037d, lo: 0xb1, hi: 0xb1},\n\t{value: 0x0259, lo: 0xb2, hi: 0xb2},\n\t{value: 0x0269, lo: 0xb3, hi: 0xb3},\n\t{value: 0x034d, lo: 0xb4, hi: 0xb4},\n\t{value: 0x0395, lo: 0xb5, hi: 0xb5},\n\t{value: 0xe1bd, lo: 0xb6, hi: 0xb6},\n\t{value: 0x0279, lo: 0xb7, hi: 0xb7},\n\t{value: 0x0289, lo: 0xb8, hi: 0xb8},\n\t{value: 0x0008, lo: 0xb9, hi: 0xbf},\n\t// Block 0x3, offset 0x25\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x3308, lo: 0x80, hi: 0xbf},\n\t// Block 0x4, offset 0x27\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x03f5, lo: 0x80, hi: 0x8f},\n\t{value: 0xe105, lo: 0x90, hi: 0x9f},\n\t{value: 0x049d, lo: 0xa0, hi: 0xaf},\n\t{value: 0x0008, lo: 0xb0, hi: 0xbf},\n\t// Block 0x5, offset 0x2c\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0xe185, lo: 0x80, hi: 0x8f},\n\t{value: 0x0545, lo: 0x90, hi: 0x96},\n\t{value: 0x0040, lo: 0x97, hi: 0x98},\n\t{value: 0x0008, lo: 0x99, hi: 0x99},\n\t{value: 0x0018, lo: 0x9a, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xbf},\n\t// Block 0x6, offset 0x33\n\t{value: 0x0000, lo: 0x0a},\n\t{value: 0x0008, lo: 0x80, hi: 0x86},\n\t{value: 0x0401, lo: 0x87, hi: 0x87},\n\t{value: 0x0008, lo: 0x88, hi: 0x88},\n\t{value: 0x0018, lo: 0x89, hi: 0x8a},\n\t{value: 0x0040, lo: 0x8b, hi: 0x8c},\n\t{value: 0x0018, lo: 0x8d, hi: 0x8f},\n\t{value: 0x0040, lo: 0x90, hi: 0x90},\n\t{value: 0x3308, lo: 0x91, hi: 0xbd},\n\t{value: 0x0818, lo: 0xbe, hi: 0xbe},\n\t{value: 0x3308, lo: 0xbf, hi: 0xbf},\n\t// Block 0x7, offset 0x3e\n\t{value: 0x0000, lo: 0x0b},\n\t{value: 0x0818, lo: 0x80, hi: 0x80},\n\t{value: 0x3308, lo: 0x81, hi: 0x82},\n\t{value: 0x0818, lo: 0x83, hi: 0x83},\n\t{value: 0x3308, lo: 0x84, hi: 0x85},\n\t{value: 0x0818, lo: 0x86, hi: 0x86},\n\t{value: 0x3308, lo: 0x87, hi: 0x87},\n\t{value: 0x0040, lo: 0x88, hi: 0x8f},\n\t{value: 0x0808, lo: 0x90, hi: 0xaa},\n\t{value: 0x0040, lo: 0xab, hi: 0xae},\n\t{value: 0x0808, lo: 0xaf, hi: 0xb4},\n\t{value: 0x0040, lo: 0xb5, hi: 0xbf},\n\t// Block 0x8, offset 0x4a\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0a08, lo: 0x80, hi: 0x87},\n\t{value: 0x0c08, lo: 0x88, hi: 0x99},\n\t{value: 0x0a08, lo: 0x9a, hi: 0xbf},\n\t// Block 0x9, offset 0x4e\n\t{value: 0x0000, lo: 0x0e},\n\t{value: 0x3308, lo: 0x80, hi: 0x8a},\n\t{value: 0x0040, lo: 0x8b, hi: 0x8c},\n\t{value: 0x0c08, lo: 0x8d, hi: 0x8d},\n\t{value: 0x0a08, lo: 0x8e, hi: 0x98},\n\t{value: 0x0c08, lo: 0x99, hi: 0x9b},\n\t{value: 0x0a08, lo: 0x9c, hi: 0xaa},\n\t{value: 0x0c08, lo: 0xab, hi: 0xac},\n\t{value: 0x0a08, lo: 0xad, hi: 0xb0},\n\t{value: 0x0c08, lo: 0xb1, hi: 0xb1},\n\t{value: 0x0a08, lo: 0xb2, hi: 0xb2},\n\t{value: 0x0c08, lo: 0xb3, hi: 0xb4},\n\t{value: 0x0a08, lo: 0xb5, hi: 0xb7},\n\t{value: 0x0c08, lo: 0xb8, hi: 0xb9},\n\t{value: 0x0a08, lo: 0xba, hi: 0xbf},\n\t// Block 0xa, offset 0x5d\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0808, lo: 0x80, hi: 0xa5},\n\t{value: 0x3308, lo: 0xa6, hi: 0xb0},\n\t{value: 0x0808, lo: 0xb1, hi: 0xb1},\n\t{value: 0x0040, lo: 0xb2, hi: 0xbf},\n\t// Block 0xb, offset 0x62\n\t{value: 0x0000, lo: 0x09},\n\t{value: 0x0808, lo: 0x80, hi: 0x89},\n\t{value: 0x0a08, lo: 0x8a, hi: 0xaa},\n\t{value: 0x3308, lo: 0xab, hi: 0xb3},\n\t{value: 0x0808, lo: 0xb4, hi: 0xb5},\n\t{value: 0x0018, lo: 0xb6, hi: 0xb9},\n\t{value: 0x0818, lo: 0xba, hi: 0xba},\n\t{value: 0x0040, lo: 0xbb, hi: 0xbc},\n\t{value: 0x3308, lo: 0xbd, hi: 0xbd},\n\t{value: 0x0818, lo: 0xbe, hi: 0xbf},\n\t// Block 0xc, offset 0x6c\n\t{value: 0x0000, lo: 0x0b},\n\t{value: 0x0808, lo: 0x80, hi: 0x95},\n\t{value: 0x3308, lo: 0x96, hi: 0x99},\n\t{value: 0x0808, lo: 0x9a, hi: 0x9a},\n\t{value: 0x3308, lo: 0x9b, hi: 0xa3},\n\t{value: 0x0808, lo: 0xa4, hi: 0xa4},\n\t{value: 0x3308, lo: 0xa5, hi: 0xa7},\n\t{value: 0x0808, lo: 0xa8, hi: 0xa8},\n\t{value: 0x3308, lo: 0xa9, hi: 0xad},\n\t{value: 0x0040, lo: 0xae, hi: 0xaf},\n\t{value: 0x0818, lo: 0xb0, hi: 0xbe},\n\t{value: 0x0040, lo: 0xbf, hi: 0xbf},\n\t// Block 0xd, offset 0x78\n\t{value: 0x0000, lo: 0x0d},\n\t{value: 0x0040, lo: 0x80, hi: 0x9f},\n\t{value: 0x0a08, lo: 0xa0, hi: 0xa9},\n\t{value: 0x0c08, lo: 0xaa, hi: 0xac},\n\t{value: 0x0808, lo: 0xad, hi: 0xad},\n\t{value: 0x0c08, lo: 0xae, hi: 0xae},\n\t{value: 0x0a08, lo: 0xaf, hi: 0xb0},\n\t{value: 0x0c08, lo: 0xb1, hi: 0xb2},\n\t{value: 0x0a08, lo: 0xb3, hi: 0xb4},\n\t{value: 0x0040, lo: 0xb5, hi: 0xb5},\n\t{value: 0x0a08, lo: 0xb6, hi: 0xb8},\n\t{value: 0x0c08, lo: 0xb9, hi: 0xb9},\n\t{value: 0x0a08, lo: 0xba, hi: 0xbd},\n\t{value: 0x0040, lo: 0xbe, hi: 0xbf},\n\t// Block 0xe, offset 0x86\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0040, lo: 0x80, hi: 0x92},\n\t{value: 0x3308, lo: 0x93, hi: 0xa1},\n\t{value: 0x0840, lo: 0xa2, hi: 0xa2},\n\t{value: 0x3308, lo: 0xa3, hi: 0xbf},\n\t// Block 0xf, offset 0x8b\n\t{value: 0x0000, lo: 0x08},\n\t{value: 0x3308, lo: 0x80, hi: 0x82},\n\t{value: 0x3008, lo: 0x83, hi: 0x83},\n\t{value: 0x0008, lo: 0x84, hi: 0xb9},\n\t{value: 0x3308, lo: 0xba, hi: 0xba},\n\t{value: 0x3008, lo: 0xbb, hi: 0xbb},\n\t{value: 0x3308, lo: 0xbc, hi: 0xbc},\n\t{value: 0x0008, lo: 0xbd, hi: 0xbd},\n\t{value: 0x3008, lo: 0xbe, hi: 0xbf},\n\t// Block 0x10, offset 0x94\n\t{value: 0x0000, lo: 0x0f},\n\t{value: 0x3308, lo: 0x80, hi: 0x80},\n\t{value: 0x3008, lo: 0x81, hi: 0x82},\n\t{value: 0x0040, lo: 0x83, hi: 0x85},\n\t{value: 0x3008, lo: 0x86, hi: 0x88},\n\t{value: 0x0040, lo: 0x89, hi: 0x89},\n\t{value: 0x3008, lo: 0x8a, hi: 0x8c},\n\t{value: 0x3b08, lo: 0x8d, hi: 0x8d},\n\t{value: 0x0040, lo: 0x8e, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x90},\n\t{value: 0x0040, lo: 0x91, hi: 0x96},\n\t{value: 0x3008, lo: 0x97, hi: 0x97},\n\t{value: 0x0040, lo: 0x98, hi: 0xa5},\n\t{value: 0x0008, lo: 0xa6, hi: 0xaf},\n\t{value: 0x0018, lo: 0xb0, hi: 0xba},\n\t{value: 0x0040, lo: 0xbb, hi: 0xbf},\n\t// Block 0x11, offset 0xa4\n\t{value: 0x0000, lo: 0x0d},\n\t{value: 0x3308, lo: 0x80, hi: 0x80},\n\t{value: 0x3008, lo: 0x81, hi: 0x83},\n\t{value: 0x3308, lo: 0x84, hi: 0x84},\n\t{value: 0x0008, lo: 0x85, hi: 0x8c},\n\t{value: 0x0040, lo: 0x8d, hi: 0x8d},\n\t{value: 0x0008, lo: 0x8e, hi: 0x90},\n\t{value: 0x0040, lo: 0x91, hi: 0x91},\n\t{value: 0x0008, lo: 0x92, hi: 0xa8},\n\t{value: 0x0040, lo: 0xa9, hi: 0xa9},\n\t{value: 0x0008, lo: 0xaa, hi: 0xb9},\n\t{value: 0x0040, lo: 0xba, hi: 0xbc},\n\t{value: 0x0008, lo: 0xbd, hi: 0xbd},\n\t{value: 0x3308, lo: 0xbe, hi: 0xbf},\n\t// Block 0x12, offset 0xb2\n\t{value: 0x0000, lo: 0x0b},\n\t{value: 0x3308, lo: 0x80, hi: 0x81},\n\t{value: 0x3008, lo: 0x82, hi: 0x83},\n\t{value: 0x0040, lo: 0x84, hi: 0x84},\n\t{value: 0x0008, lo: 0x85, hi: 0x8c},\n\t{value: 0x0040, lo: 0x8d, hi: 0x8d},\n\t{value: 0x0008, lo: 0x8e, hi: 0x90},\n\t{value: 0x0040, lo: 0x91, hi: 0x91},\n\t{value: 0x0008, lo: 0x92, hi: 0xba},\n\t{value: 0x3b08, lo: 0xbb, hi: 0xbc},\n\t{value: 0x0008, lo: 0xbd, hi: 0xbd},\n\t{value: 0x3008, lo: 0xbe, hi: 0xbf},\n\t// Block 0x13, offset 0xbe\n\t{value: 0x0000, lo: 0x0b},\n\t{value: 0x0040, lo: 0x80, hi: 0x81},\n\t{value: 0x3008, lo: 0x82, hi: 0x83},\n\t{value: 0x0040, lo: 0x84, hi: 0x84},\n\t{value: 0x0008, lo: 0x85, hi: 0x96},\n\t{value: 0x0040, lo: 0x97, hi: 0x99},\n\t{value: 0x0008, lo: 0x9a, hi: 0xb1},\n\t{value: 0x0040, lo: 0xb2, hi: 0xb2},\n\t{value: 0x0008, lo: 0xb3, hi: 0xbb},\n\t{value: 0x0040, lo: 0xbc, hi: 0xbc},\n\t{value: 0x0008, lo: 0xbd, hi: 0xbd},\n\t{value: 0x0040, lo: 0xbe, hi: 0xbf},\n\t// Block 0x14, offset 0xca\n\t{value: 0x0000, lo: 0x10},\n\t{value: 0x0008, lo: 0x80, hi: 0x86},\n\t{value: 0x0040, lo: 0x87, hi: 0x89},\n\t{value: 0x3b08, lo: 0x8a, hi: 0x8a},\n\t{value: 0x0040, lo: 0x8b, hi: 0x8e},\n\t{value: 0x3008, lo: 0x8f, hi: 0x91},\n\t{value: 0x3308, lo: 0x92, hi: 0x94},\n\t{value: 0x0040, lo: 0x95, hi: 0x95},\n\t{value: 0x3308, lo: 0x96, hi: 0x96},\n\t{value: 0x0040, lo: 0x97, hi: 0x97},\n\t{value: 0x3008, lo: 0x98, hi: 0x9f},\n\t{value: 0x0040, lo: 0xa0, hi: 0xa5},\n\t{value: 0x0008, lo: 0xa6, hi: 0xaf},\n\t{value: 0x0040, lo: 0xb0, hi: 0xb1},\n\t{value: 0x3008, lo: 0xb2, hi: 0xb3},\n\t{value: 0x0018, lo: 0xb4, hi: 0xb4},\n\t{value: 0x0040, lo: 0xb5, hi: 0xbf},\n\t// Block 0x15, offset 0xdb\n\t{value: 0x0000, lo: 0x09},\n\t{value: 0x0040, lo: 0x80, hi: 0x80},\n\t{value: 0x0008, lo: 0x81, hi: 0xb0},\n\t{value: 0x3308, lo: 0xb1, hi: 0xb1},\n\t{value: 0x0008, lo: 0xb2, hi: 0xb2},\n\t{value: 0x08f1, lo: 0xb3, hi: 0xb3},\n\t{value: 0x3308, lo: 0xb4, hi: 0xb9},\n\t{value: 0x3b08, lo: 0xba, hi: 0xba},\n\t{value: 0x0040, lo: 0xbb, hi: 0xbe},\n\t{value: 0x0018, lo: 0xbf, hi: 0xbf},\n\t// Block 0x16, offset 0xe5\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0x0008, lo: 0x80, hi: 0x86},\n\t{value: 0x3308, lo: 0x87, hi: 0x8e},\n\t{value: 0x0018, lo: 0x8f, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x99},\n\t{value: 0x0018, lo: 0x9a, hi: 0x9b},\n\t{value: 0x0040, lo: 0x9c, hi: 0xbf},\n\t// Block 0x17, offset 0xec\n\t{value: 0x0000, lo: 0x0c},\n\t{value: 0x0008, lo: 0x80, hi: 0x84},\n\t{value: 0x0040, lo: 0x85, hi: 0x85},\n\t{value: 0x0008, lo: 0x86, hi: 0x86},\n\t{value: 0x0040, lo: 0x87, hi: 0x87},\n\t{value: 0x3308, lo: 0x88, hi: 0x8d},\n\t{value: 0x0040, lo: 0x8e, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x99},\n\t{value: 0x0040, lo: 0x9a, hi: 0x9b},\n\t{value: 0x0961, lo: 0x9c, hi: 0x9c},\n\t{value: 0x0999, lo: 0x9d, hi: 0x9d},\n\t{value: 0x0008, lo: 0x9e, hi: 0x9f},\n\t{value: 0x0040, lo: 0xa0, hi: 0xbf},\n\t// Block 0x18, offset 0xf9\n\t{value: 0x0000, lo: 0x10},\n\t{value: 0x0008, lo: 0x80, hi: 0x80},\n\t{value: 0x0018, lo: 0x81, hi: 0x8a},\n\t{value: 0x0008, lo: 0x8b, hi: 0x8b},\n\t{value: 0xe03d, lo: 0x8c, hi: 0x8c},\n\t{value: 0x0018, lo: 0x8d, hi: 0x97},\n\t{value: 0x3308, lo: 0x98, hi: 0x99},\n\t{value: 0x0018, lo: 0x9a, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xa9},\n\t{value: 0x0018, lo: 0xaa, hi: 0xb4},\n\t{value: 0x3308, lo: 0xb5, hi: 0xb5},\n\t{value: 0x0018, lo: 0xb6, hi: 0xb6},\n\t{value: 0x3308, lo: 0xb7, hi: 0xb7},\n\t{value: 0x0018, lo: 0xb8, hi: 0xb8},\n\t{value: 0x3308, lo: 0xb9, hi: 0xb9},\n\t{value: 0x0018, lo: 0xba, hi: 0xbd},\n\t{value: 0x3008, lo: 0xbe, hi: 0xbf},\n\t// Block 0x19, offset 0x10a\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0x0018, lo: 0x80, hi: 0x85},\n\t{value: 0x3308, lo: 0x86, hi: 0x86},\n\t{value: 0x0018, lo: 0x87, hi: 0x8c},\n\t{value: 0x0040, lo: 0x8d, hi: 0x8d},\n\t{value: 0x0018, lo: 0x8e, hi: 0x9a},\n\t{value: 0x0040, lo: 0x9b, hi: 0xbf},\n\t// Block 0x1a, offset 0x111\n\t{value: 0x0000, lo: 0x0a},\n\t{value: 0x0008, lo: 0x80, hi: 0xaa},\n\t{value: 0x3008, lo: 0xab, hi: 0xac},\n\t{value: 0x3308, lo: 0xad, hi: 0xb0},\n\t{value: 0x3008, lo: 0xb1, hi: 0xb1},\n\t{value: 0x3308, lo: 0xb2, hi: 0xb7},\n\t{value: 0x3008, lo: 0xb8, hi: 0xb8},\n\t{value: 0x3b08, lo: 0xb9, hi: 0xba},\n\t{value: 0x3008, lo: 0xbb, hi: 0xbc},\n\t{value: 0x3308, lo: 0xbd, hi: 0xbe},\n\t{value: 0x0008, lo: 0xbf, hi: 0xbf},\n\t// Block 0x1b, offset 0x11c\n\t{value: 0x0000, lo: 0x0e},\n\t{value: 0x0008, lo: 0x80, hi: 0x89},\n\t{value: 0x0018, lo: 0x8a, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x95},\n\t{value: 0x3008, lo: 0x96, hi: 0x97},\n\t{value: 0x3308, lo: 0x98, hi: 0x99},\n\t{value: 0x0008, lo: 0x9a, hi: 0x9d},\n\t{value: 0x3308, lo: 0x9e, hi: 0xa0},\n\t{value: 0x0008, lo: 0xa1, hi: 0xa1},\n\t{value: 0x3008, lo: 0xa2, hi: 0xa4},\n\t{value: 0x0008, lo: 0xa5, hi: 0xa6},\n\t{value: 0x3008, lo: 0xa7, hi: 0xad},\n\t{value: 0x0008, lo: 0xae, hi: 0xb0},\n\t{value: 0x3308, lo: 0xb1, hi: 0xb4},\n\t{value: 0x0008, lo: 0xb5, hi: 0xbf},\n\t// Block 0x1c, offset 0x12b\n\t{value: 0x0000, lo: 0x0d},\n\t{value: 0x0008, lo: 0x80, hi: 0x81},\n\t{value: 0x3308, lo: 0x82, hi: 0x82},\n\t{value: 0x3008, lo: 0x83, hi: 0x84},\n\t{value: 0x3308, lo: 0x85, hi: 0x86},\n\t{value: 0x3008, lo: 0x87, hi: 0x8c},\n\t{value: 0x3308, lo: 0x8d, hi: 0x8d},\n\t{value: 0x0008, lo: 0x8e, hi: 0x8e},\n\t{value: 0x3008, lo: 0x8f, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x99},\n\t{value: 0x3008, lo: 0x9a, hi: 0x9c},\n\t{value: 0x3308, lo: 0x9d, hi: 0x9d},\n\t{value: 0x0018, lo: 0x9e, hi: 0x9f},\n\t{value: 0x0040, lo: 0xa0, hi: 0xbf},\n\t// Block 0x1d, offset 0x139\n\t{value: 0x0000, lo: 0x09},\n\t{value: 0x0040, lo: 0x80, hi: 0x86},\n\t{value: 0x055d, lo: 0x87, hi: 0x87},\n\t{value: 0x0040, lo: 0x88, hi: 0x8c},\n\t{value: 0x055d, lo: 0x8d, hi: 0x8d},\n\t{value: 0x0040, lo: 0x8e, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0xba},\n\t{value: 0x0018, lo: 0xbb, hi: 0xbb},\n\t{value: 0xe105, lo: 0xbc, hi: 0xbc},\n\t{value: 0x0008, lo: 0xbd, hi: 0xbf},\n\t// Block 0x1e, offset 0x143\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x0018, lo: 0x80, hi: 0xbf},\n\t// Block 0x1f, offset 0x145\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0018, lo: 0x80, hi: 0x9e},\n\t{value: 0x0040, lo: 0x9f, hi: 0xa0},\n\t{value: 0x2018, lo: 0xa1, hi: 0xb5},\n\t{value: 0x0018, lo: 0xb6, hi: 0xbf},\n\t// Block 0x20, offset 0x14a\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0018, lo: 0x80, hi: 0xa7},\n\t{value: 0x2018, lo: 0xa8, hi: 0xbf},\n\t// Block 0x21, offset 0x14d\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x2018, lo: 0x80, hi: 0x82},\n\t{value: 0x0018, lo: 0x83, hi: 0xbf},\n\t// Block 0x22, offset 0x150\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x0008, lo: 0x80, hi: 0xbf},\n\t// Block 0x23, offset 0x152\n\t{value: 0x0000, lo: 0x0b},\n\t{value: 0x0008, lo: 0x80, hi: 0x88},\n\t{value: 0x0040, lo: 0x89, hi: 0x89},\n\t{value: 0x0008, lo: 0x8a, hi: 0x8d},\n\t{value: 0x0040, lo: 0x8e, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x96},\n\t{value: 0x0040, lo: 0x97, hi: 0x97},\n\t{value: 0x0008, lo: 0x98, hi: 0x98},\n\t{value: 0x0040, lo: 0x99, hi: 0x99},\n\t{value: 0x0008, lo: 0x9a, hi: 0x9d},\n\t{value: 0x0040, lo: 0x9e, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xbf},\n\t// Block 0x24, offset 0x15e\n\t{value: 0x0000, lo: 0x0a},\n\t{value: 0x0008, lo: 0x80, hi: 0x88},\n\t{value: 0x0040, lo: 0x89, hi: 0x89},\n\t{value: 0x0008, lo: 0x8a, hi: 0x8d},\n\t{value: 0x0040, lo: 0x8e, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0xb0},\n\t{value: 0x0040, lo: 0xb1, hi: 0xb1},\n\t{value: 0x0008, lo: 0xb2, hi: 0xb5},\n\t{value: 0x0040, lo: 0xb6, hi: 0xb7},\n\t{value: 0x0008, lo: 0xb8, hi: 0xbe},\n\t{value: 0x0040, lo: 0xbf, hi: 0xbf},\n\t// Block 0x25, offset 0x169\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0x0008, lo: 0x80, hi: 0x80},\n\t{value: 0x0040, lo: 0x81, hi: 0x81},\n\t{value: 0x0008, lo: 0x82, hi: 0x85},\n\t{value: 0x0040, lo: 0x86, hi: 0x87},\n\t{value: 0x0008, lo: 0x88, hi: 0x96},\n\t{value: 0x0040, lo: 0x97, hi: 0x97},\n\t{value: 0x0008, lo: 0x98, hi: 0xbf},\n\t// Block 0x26, offset 0x171\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x0008, lo: 0x80, hi: 0x90},\n\t{value: 0x0040, lo: 0x91, hi: 0x91},\n\t{value: 0x0008, lo: 0x92, hi: 0x95},\n\t{value: 0x0040, lo: 0x96, hi: 0x97},\n\t{value: 0x0008, lo: 0x98, hi: 0xbf},\n\t// Block 0x27, offset 0x177\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x0008, lo: 0x80, hi: 0x9a},\n\t{value: 0x0040, lo: 0x9b, hi: 0x9c},\n\t{value: 0x3308, lo: 0x9d, hi: 0x9f},\n\t{value: 0x0018, lo: 0xa0, hi: 0xbc},\n\t{value: 0x0040, lo: 0xbd, hi: 0xbf},\n\t// Block 0x28, offset 0x17d\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0008, lo: 0x80, hi: 0x8f},\n\t{value: 0x0018, lo: 0x90, hi: 0x99},\n\t{value: 0x0040, lo: 0x9a, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xbf},\n\t// Block 0x29, offset 0x182\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0008, lo: 0x80, hi: 0xb5},\n\t{value: 0x0040, lo: 0xb6, hi: 0xb7},\n\t{value: 0xe045, lo: 0xb8, hi: 0xbd},\n\t{value: 0x0040, lo: 0xbe, hi: 0xbf},\n\t// Block 0x2a, offset 0x187\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0018, lo: 0x80, hi: 0x80},\n\t{value: 0x0008, lo: 0x81, hi: 0xbf},\n\t// Block 0x2b, offset 0x18a\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0008, lo: 0x80, hi: 0xac},\n\t{value: 0x0018, lo: 0xad, hi: 0xae},\n\t{value: 0x0008, lo: 0xaf, hi: 0xbf},\n\t// Block 0x2c, offset 0x18e\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x0040, lo: 0x80, hi: 0x80},\n\t{value: 0x0008, lo: 0x81, hi: 0x9a},\n\t{value: 0x0018, lo: 0x9b, hi: 0x9c},\n\t{value: 0x0040, lo: 0x9d, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xbf},\n\t// Block 0x2d, offset 0x194\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0008, lo: 0x80, hi: 0xaa},\n\t{value: 0x0018, lo: 0xab, hi: 0xb0},\n\t{value: 0x0008, lo: 0xb1, hi: 0xb8},\n\t{value: 0x0040, lo: 0xb9, hi: 0xbf},\n\t// Block 0x2e, offset 0x199\n\t{value: 0x0000, lo: 0x0b},\n\t{value: 0x0008, lo: 0x80, hi: 0x8c},\n\t{value: 0x0040, lo: 0x8d, hi: 0x8d},\n\t{value: 0x0008, lo: 0x8e, hi: 0x91},\n\t{value: 0x3308, lo: 0x92, hi: 0x93},\n\t{value: 0x3b08, lo: 0x94, hi: 0x94},\n\t{value: 0x0040, lo: 0x95, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xb1},\n\t{value: 0x3308, lo: 0xb2, hi: 0xb3},\n\t{value: 0x3b08, lo: 0xb4, hi: 0xb4},\n\t{value: 0x0018, lo: 0xb5, hi: 0xb6},\n\t{value: 0x0040, lo: 0xb7, hi: 0xbf},\n\t// Block 0x2f, offset 0x1a5\n\t{value: 0x0000, lo: 0x09},\n\t{value: 0x0008, lo: 0x80, hi: 0x91},\n\t{value: 0x3308, lo: 0x92, hi: 0x93},\n\t{value: 0x0040, lo: 0x94, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xac},\n\t{value: 0x0040, lo: 0xad, hi: 0xad},\n\t{value: 0x0008, lo: 0xae, hi: 0xb0},\n\t{value: 0x0040, lo: 0xb1, hi: 0xb1},\n\t{value: 0x3308, lo: 0xb2, hi: 0xb3},\n\t{value: 0x0040, lo: 0xb4, hi: 0xbf},\n\t// Block 0x30, offset 0x1af\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x0008, lo: 0x80, hi: 0xb3},\n\t{value: 0x3340, lo: 0xb4, hi: 0xb5},\n\t{value: 0x3008, lo: 0xb6, hi: 0xb6},\n\t{value: 0x3308, lo: 0xb7, hi: 0xbd},\n\t{value: 0x3008, lo: 0xbe, hi: 0xbf},\n\t// Block 0x31, offset 0x1b5\n\t{value: 0x0000, lo: 0x10},\n\t{value: 0x3008, lo: 0x80, hi: 0x85},\n\t{value: 0x3308, lo: 0x86, hi: 0x86},\n\t{value: 0x3008, lo: 0x87, hi: 0x88},\n\t{value: 0x3308, lo: 0x89, hi: 0x91},\n\t{value: 0x3b08, lo: 0x92, hi: 0x92},\n\t{value: 0x3308, lo: 0x93, hi: 0x93},\n\t{value: 0x0018, lo: 0x94, hi: 0x96},\n\t{value: 0x0008, lo: 0x97, hi: 0x97},\n\t{value: 0x0018, lo: 0x98, hi: 0x9b},\n\t{value: 0x0008, lo: 0x9c, hi: 0x9c},\n\t{value: 0x3308, lo: 0x9d, hi: 0x9d},\n\t{value: 0x0040, lo: 0x9e, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xa9},\n\t{value: 0x0040, lo: 0xaa, hi: 0xaf},\n\t{value: 0x0018, lo: 0xb0, hi: 0xb9},\n\t{value: 0x0040, lo: 0xba, hi: 0xbf},\n\t// Block 0x32, offset 0x1c6\n\t{value: 0x0000, lo: 0x09},\n\t{value: 0x0018, lo: 0x80, hi: 0x85},\n\t{value: 0x0040, lo: 0x86, hi: 0x86},\n\t{value: 0x0218, lo: 0x87, hi: 0x87},\n\t{value: 0x0018, lo: 0x88, hi: 0x8a},\n\t{value: 0x33c0, lo: 0x8b, hi: 0x8d},\n\t{value: 0x0040, lo: 0x8e, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x99},\n\t{value: 0x0040, lo: 0x9a, hi: 0x9f},\n\t{value: 0x0208, lo: 0xa0, hi: 0xbf},\n\t// Block 0x33, offset 0x1d0\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0208, lo: 0x80, hi: 0xb8},\n\t{value: 0x0040, lo: 0xb9, hi: 0xbf},\n\t// Block 0x34, offset 0x1d3\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0x0008, lo: 0x80, hi: 0x84},\n\t{value: 0x3308, lo: 0x85, hi: 0x86},\n\t{value: 0x0208, lo: 0x87, hi: 0xa8},\n\t{value: 0x3308, lo: 0xa9, hi: 0xa9},\n\t{value: 0x0208, lo: 0xaa, hi: 0xaa},\n\t{value: 0x0040, lo: 0xab, hi: 0xaf},\n\t{value: 0x0008, lo: 0xb0, hi: 0xbf},\n\t// Block 0x35, offset 0x1db\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0008, lo: 0x80, hi: 0xb5},\n\t{value: 0x0040, lo: 0xb6, hi: 0xbf},\n\t// Block 0x36, offset 0x1de\n\t{value: 0x0000, lo: 0x0c},\n\t{value: 0x0008, lo: 0x80, hi: 0x9e},\n\t{value: 0x0040, lo: 0x9f, hi: 0x9f},\n\t{value: 0x3308, lo: 0xa0, hi: 0xa2},\n\t{value: 0x3008, lo: 0xa3, hi: 0xa6},\n\t{value: 0x3308, lo: 0xa7, hi: 0xa8},\n\t{value: 0x3008, lo: 0xa9, hi: 0xab},\n\t{value: 0x0040, lo: 0xac, hi: 0xaf},\n\t{value: 0x3008, lo: 0xb0, hi: 0xb1},\n\t{value: 0x3308, lo: 0xb2, hi: 0xb2},\n\t{value: 0x3008, lo: 0xb3, hi: 0xb8},\n\t{value: 0x3308, lo: 0xb9, hi: 0xbb},\n\t{value: 0x0040, lo: 0xbc, hi: 0xbf},\n\t// Block 0x37, offset 0x1eb\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0x0018, lo: 0x80, hi: 0x80},\n\t{value: 0x0040, lo: 0x81, hi: 0x83},\n\t{value: 0x0018, lo: 0x84, hi: 0x85},\n\t{value: 0x0008, lo: 0x86, hi: 0xad},\n\t{value: 0x0040, lo: 0xae, hi: 0xaf},\n\t{value: 0x0008, lo: 0xb0, hi: 0xb4},\n\t{value: 0x0040, lo: 0xb5, hi: 0xbf},\n\t// Block 0x38, offset 0x1f3\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0008, lo: 0x80, hi: 0xab},\n\t{value: 0x0040, lo: 0xac, hi: 0xaf},\n\t{value: 0x0008, lo: 0xb0, hi: 0xbf},\n\t// Block 0x39, offset 0x1f7\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0x0008, lo: 0x80, hi: 0x89},\n\t{value: 0x0040, lo: 0x8a, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x99},\n\t{value: 0x0028, lo: 0x9a, hi: 0x9a},\n\t{value: 0x0040, lo: 0x9b, hi: 0x9d},\n\t{value: 0x0018, lo: 0x9e, hi: 0xbf},\n\t// Block 0x3a, offset 0x1fe\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0x0008, lo: 0x80, hi: 0x96},\n\t{value: 0x3308, lo: 0x97, hi: 0x98},\n\t{value: 0x3008, lo: 0x99, hi: 0x9a},\n\t{value: 0x3308, lo: 0x9b, hi: 0x9b},\n\t{value: 0x0040, lo: 0x9c, hi: 0x9d},\n\t{value: 0x0018, lo: 0x9e, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xbf},\n\t// Block 0x3b, offset 0x206\n\t{value: 0x0000, lo: 0x0f},\n\t{value: 0x0008, lo: 0x80, hi: 0x94},\n\t{value: 0x3008, lo: 0x95, hi: 0x95},\n\t{value: 0x3308, lo: 0x96, hi: 0x96},\n\t{value: 0x3008, lo: 0x97, hi: 0x97},\n\t{value: 0x3308, lo: 0x98, hi: 0x9e},\n\t{value: 0x0040, lo: 0x9f, hi: 0x9f},\n\t{value: 0x3b08, lo: 0xa0, hi: 0xa0},\n\t{value: 0x3008, lo: 0xa1, hi: 0xa1},\n\t{value: 0x3308, lo: 0xa2, hi: 0xa2},\n\t{value: 0x3008, lo: 0xa3, hi: 0xa4},\n\t{value: 0x3308, lo: 0xa5, hi: 0xac},\n\t{value: 0x3008, lo: 0xad, hi: 0xb2},\n\t{value: 0x3308, lo: 0xb3, hi: 0xbc},\n\t{value: 0x0040, lo: 0xbd, hi: 0xbe},\n\t{value: 0x3308, lo: 0xbf, hi: 0xbf},\n\t// Block 0x3c, offset 0x216\n\t{value: 0x0000, lo: 0x0b},\n\t{value: 0x0008, lo: 0x80, hi: 0x89},\n\t{value: 0x0040, lo: 0x8a, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x99},\n\t{value: 0x0040, lo: 0x9a, hi: 0x9f},\n\t{value: 0x0018, lo: 0xa0, hi: 0xa6},\n\t{value: 0x0008, lo: 0xa7, hi: 0xa7},\n\t{value: 0x0018, lo: 0xa8, hi: 0xad},\n\t{value: 0x0040, lo: 0xae, hi: 0xaf},\n\t{value: 0x3308, lo: 0xb0, hi: 0xbd},\n\t{value: 0x3318, lo: 0xbe, hi: 0xbe},\n\t{value: 0x0040, lo: 0xbf, hi: 0xbf},\n\t// Block 0x3d, offset 0x222\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x0040, lo: 0x80, hi: 0xbf},\n\t// Block 0x3e, offset 0x224\n\t{value: 0x0000, lo: 0x09},\n\t{value: 0x3308, lo: 0x80, hi: 0x83},\n\t{value: 0x3008, lo: 0x84, hi: 0x84},\n\t{value: 0x0008, lo: 0x85, hi: 0xb3},\n\t{value: 0x3308, lo: 0xb4, hi: 0xb4},\n\t{value: 0x3008, lo: 0xb5, hi: 0xb5},\n\t{value: 0x3308, lo: 0xb6, hi: 0xba},\n\t{value: 0x3008, lo: 0xbb, hi: 0xbb},\n\t{value: 0x3308, lo: 0xbc, hi: 0xbc},\n\t{value: 0x3008, lo: 0xbd, hi: 0xbf},\n\t// Block 0x3f, offset 0x22e\n\t{value: 0x0000, lo: 0x0b},\n\t{value: 0x3008, lo: 0x80, hi: 0x81},\n\t{value: 0x3308, lo: 0x82, hi: 0x82},\n\t{value: 0x3008, lo: 0x83, hi: 0x83},\n\t{value: 0x3808, lo: 0x84, hi: 0x84},\n\t{value: 0x0008, lo: 0x85, hi: 0x8b},\n\t{value: 0x0040, lo: 0x8c, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x99},\n\t{value: 0x0018, lo: 0x9a, hi: 0xaa},\n\t{value: 0x3308, lo: 0xab, hi: 0xb3},\n\t{value: 0x0018, lo: 0xb4, hi: 0xbc},\n\t{value: 0x0040, lo: 0xbd, hi: 0xbf},\n\t// Block 0x40, offset 0x23a\n\t{value: 0x0000, lo: 0x0b},\n\t{value: 0x3308, lo: 0x80, hi: 0x81},\n\t{value: 0x3008, lo: 0x82, hi: 0x82},\n\t{value: 0x0008, lo: 0x83, hi: 0xa0},\n\t{value: 0x3008, lo: 0xa1, hi: 0xa1},\n\t{value: 0x3308, lo: 0xa2, hi: 0xa5},\n\t{value: 0x3008, lo: 0xa6, hi: 0xa7},\n\t{value: 0x3308, lo: 0xa8, hi: 0xa9},\n\t{value: 0x3808, lo: 0xaa, hi: 0xaa},\n\t{value: 0x3b08, lo: 0xab, hi: 0xab},\n\t{value: 0x3308, lo: 0xac, hi: 0xad},\n\t{value: 0x0008, lo: 0xae, hi: 0xbf},\n\t// Block 0x41, offset 0x246\n\t{value: 0x0000, lo: 0x0b},\n\t{value: 0x0008, lo: 0x80, hi: 0xa5},\n\t{value: 0x3308, lo: 0xa6, hi: 0xa6},\n\t{value: 0x3008, lo: 0xa7, hi: 0xa7},\n\t{value: 0x3308, lo: 0xa8, hi: 0xa9},\n\t{value: 0x3008, lo: 0xaa, hi: 0xac},\n\t{value: 0x3308, lo: 0xad, hi: 0xad},\n\t{value: 0x3008, lo: 0xae, hi: 0xae},\n\t{value: 0x3308, lo: 0xaf, hi: 0xb1},\n\t{value: 0x3808, lo: 0xb2, hi: 0xb3},\n\t{value: 0x0040, lo: 0xb4, hi: 0xbb},\n\t{value: 0x0018, lo: 0xbc, hi: 0xbf},\n\t// Block 0x42, offset 0x252\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0x0008, lo: 0x80, hi: 0xa3},\n\t{value: 0x3008, lo: 0xa4, hi: 0xab},\n\t{value: 0x3308, lo: 0xac, hi: 0xb3},\n\t{value: 0x3008, lo: 0xb4, hi: 0xb5},\n\t{value: 0x3308, lo: 0xb6, hi: 0xb7},\n\t{value: 0x0040, lo: 0xb8, hi: 0xba},\n\t{value: 0x0018, lo: 0xbb, hi: 0xbf},\n\t// Block 0x43, offset 0x25a\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0008, lo: 0x80, hi: 0x89},\n\t{value: 0x0040, lo: 0x8a, hi: 0x8c},\n\t{value: 0x0008, lo: 0x8d, hi: 0xbd},\n\t{value: 0x0018, lo: 0xbe, hi: 0xbf},\n\t// Block 0x44, offset 0x25f\n\t{value: 0x0000, lo: 0x09},\n\t{value: 0x0e29, lo: 0x80, hi: 0x80},\n\t{value: 0x0e41, lo: 0x81, hi: 0x81},\n\t{value: 0x0e59, lo: 0x82, hi: 0x82},\n\t{value: 0x0e71, lo: 0x83, hi: 0x83},\n\t{value: 0x0e89, lo: 0x84, hi: 0x85},\n\t{value: 0x0ea1, lo: 0x86, hi: 0x86},\n\t{value: 0x0eb9, lo: 0x87, hi: 0x87},\n\t{value: 0x057d, lo: 0x88, hi: 0x88},\n\t{value: 0x0040, lo: 0x89, hi: 0xbf},\n\t// Block 0x45, offset 0x269\n\t{value: 0x0000, lo: 0x10},\n\t{value: 0x0018, lo: 0x80, hi: 0x87},\n\t{value: 0x0040, lo: 0x88, hi: 0x8f},\n\t{value: 0x3308, lo: 0x90, hi: 0x92},\n\t{value: 0x0018, lo: 0x93, hi: 0x93},\n\t{value: 0x3308, lo: 0x94, hi: 0xa0},\n\t{value: 0x3008, lo: 0xa1, hi: 0xa1},\n\t{value: 0x3308, lo: 0xa2, hi: 0xa8},\n\t{value: 0x0008, lo: 0xa9, hi: 0xac},\n\t{value: 0x3308, lo: 0xad, hi: 0xad},\n\t{value: 0x0008, lo: 0xae, hi: 0xb1},\n\t{value: 0x3008, lo: 0xb2, hi: 0xb3},\n\t{value: 0x3308, lo: 0xb4, hi: 0xb4},\n\t{value: 0x0008, lo: 0xb5, hi: 0xb6},\n\t{value: 0x3008, lo: 0xb7, hi: 0xb7},\n\t{value: 0x3308, lo: 0xb8, hi: 0xb9},\n\t{value: 0x0040, lo: 0xba, hi: 0xbf},\n\t// Block 0x46, offset 0x27a\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x3308, lo: 0x80, hi: 0xb9},\n\t{value: 0x0040, lo: 0xba, hi: 0xba},\n\t{value: 0x3308, lo: 0xbb, hi: 0xbf},\n\t// Block 0x47, offset 0x27e\n\t{value: 0x0000, lo: 0x0a},\n\t{value: 0x0008, lo: 0x80, hi: 0x87},\n\t{value: 0xe045, lo: 0x88, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x95},\n\t{value: 0x0040, lo: 0x96, hi: 0x97},\n\t{value: 0xe045, lo: 0x98, hi: 0x9d},\n\t{value: 0x0040, lo: 0x9e, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xa7},\n\t{value: 0xe045, lo: 0xa8, hi: 0xaf},\n\t{value: 0x0008, lo: 0xb0, hi: 0xb7},\n\t{value: 0xe045, lo: 0xb8, hi: 0xbf},\n\t// Block 0x48, offset 0x289\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0040, lo: 0x80, hi: 0x8f},\n\t{value: 0x3318, lo: 0x90, hi: 0xb0},\n\t{value: 0x0040, lo: 0xb1, hi: 0xbf},\n\t// Block 0x49, offset 0x28d\n\t{value: 0x0000, lo: 0x08},\n\t{value: 0x0018, lo: 0x80, hi: 0x82},\n\t{value: 0x0040, lo: 0x83, hi: 0x83},\n\t{value: 0x0008, lo: 0x84, hi: 0x84},\n\t{value: 0x0018, lo: 0x85, hi: 0x88},\n\t{value: 0x24c1, lo: 0x89, hi: 0x89},\n\t{value: 0x0018, lo: 0x8a, hi: 0x8b},\n\t{value: 0x0040, lo: 0x8c, hi: 0x8f},\n\t{value: 0x0018, lo: 0x90, hi: 0xbf},\n\t// Block 0x4a, offset 0x296\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0x0018, lo: 0x80, hi: 0xab},\n\t{value: 0x24f1, lo: 0xac, hi: 0xac},\n\t{value: 0x2529, lo: 0xad, hi: 0xad},\n\t{value: 0x0018, lo: 0xae, hi: 0xae},\n\t{value: 0x2579, lo: 0xaf, hi: 0xaf},\n\t{value: 0x25b1, lo: 0xb0, hi: 0xb0},\n\t{value: 0x0018, lo: 0xb1, hi: 0xbf},\n\t// Block 0x4b, offset 0x29e\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x0018, lo: 0x80, hi: 0x9f},\n\t{value: 0x0080, lo: 0xa0, hi: 0xa0},\n\t{value: 0x0018, lo: 0xa1, hi: 0xad},\n\t{value: 0x0080, lo: 0xae, hi: 0xaf},\n\t{value: 0x0018, lo: 0xb0, hi: 0xbf},\n\t// Block 0x4c, offset 0x2a4\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0018, lo: 0x80, hi: 0xa8},\n\t{value: 0x09c5, lo: 0xa9, hi: 0xa9},\n\t{value: 0x09e5, lo: 0xaa, hi: 0xaa},\n\t{value: 0x0018, lo: 0xab, hi: 0xbf},\n\t// Block 0x4d, offset 0x2a9\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0018, lo: 0x80, hi: 0xa6},\n\t{value: 0x0040, lo: 0xa7, hi: 0xbf},\n\t// Block 0x4e, offset 0x2ac\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0018, lo: 0x80, hi: 0x8b},\n\t{value: 0x28c1, lo: 0x8c, hi: 0x8c},\n\t{value: 0x0018, lo: 0x8d, hi: 0xbf},\n\t// Block 0x4f, offset 0x2b0\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x0018, lo: 0x80, hi: 0xb3},\n\t{value: 0x0e66, lo: 0xb4, hi: 0xb4},\n\t{value: 0x292a, lo: 0xb5, hi: 0xb5},\n\t{value: 0x0e86, lo: 0xb6, hi: 0xb6},\n\t{value: 0x0018, lo: 0xb7, hi: 0xbf},\n\t// Block 0x50, offset 0x2b6\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0018, lo: 0x80, hi: 0x9b},\n\t{value: 0x2941, lo: 0x9c, hi: 0x9c},\n\t{value: 0x0018, lo: 0x9d, hi: 0xbf},\n\t// Block 0x51, offset 0x2ba\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0018, lo: 0x80, hi: 0xb3},\n\t{value: 0x0040, lo: 0xb4, hi: 0xb5},\n\t{value: 0x0018, lo: 0xb6, hi: 0xbf},\n\t// Block 0x52, offset 0x2be\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0018, lo: 0x80, hi: 0x95},\n\t{value: 0x0040, lo: 0x96, hi: 0x97},\n\t{value: 0x0018, lo: 0x98, hi: 0xbf},\n\t// Block 0x53, offset 0x2c2\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0018, lo: 0x80, hi: 0x88},\n\t{value: 0x0040, lo: 0x89, hi: 0x89},\n\t{value: 0x0018, lo: 0x8a, hi: 0xbe},\n\t{value: 0x0040, lo: 0xbf, hi: 0xbf},\n\t// Block 0x54, offset 0x2c7\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0xe185, lo: 0x80, hi: 0x8f},\n\t{value: 0x03f5, lo: 0x90, hi: 0x9f},\n\t{value: 0x0ea5, lo: 0xa0, hi: 0xae},\n\t{value: 0x0040, lo: 0xaf, hi: 0xaf},\n\t{value: 0x0008, lo: 0xb0, hi: 0xbf},\n\t// Block 0x55, offset 0x2cd\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0x0008, lo: 0x80, hi: 0xa5},\n\t{value: 0x0040, lo: 0xa6, hi: 0xa6},\n\t{value: 0x0008, lo: 0xa7, hi: 0xa7},\n\t{value: 0x0040, lo: 0xa8, hi: 0xac},\n\t{value: 0x0008, lo: 0xad, hi: 0xad},\n\t{value: 0x0040, lo: 0xae, hi: 0xaf},\n\t{value: 0x0008, lo: 0xb0, hi: 0xbf},\n\t// Block 0x56, offset 0x2d5\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0x0008, lo: 0x80, hi: 0xa7},\n\t{value: 0x0040, lo: 0xa8, hi: 0xae},\n\t{value: 0xe075, lo: 0xaf, hi: 0xaf},\n\t{value: 0x0018, lo: 0xb0, hi: 0xb0},\n\t{value: 0x0040, lo: 0xb1, hi: 0xbe},\n\t{value: 0x3b08, lo: 0xbf, hi: 0xbf},\n\t// Block 0x57, offset 0x2dc\n\t{value: 0x0000, lo: 0x0a},\n\t{value: 0x0008, lo: 0x80, hi: 0x96},\n\t{value: 0x0040, lo: 0x97, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xa6},\n\t{value: 0x0040, lo: 0xa7, hi: 0xa7},\n\t{value: 0x0008, lo: 0xa8, hi: 0xae},\n\t{value: 0x0040, lo: 0xaf, hi: 0xaf},\n\t{value: 0x0008, lo: 0xb0, hi: 0xb6},\n\t{value: 0x0040, lo: 0xb7, hi: 0xb7},\n\t{value: 0x0008, lo: 0xb8, hi: 0xbe},\n\t{value: 0x0040, lo: 0xbf, hi: 0xbf},\n\t// Block 0x58, offset 0x2e7\n\t{value: 0x0000, lo: 0x09},\n\t{value: 0x0008, lo: 0x80, hi: 0x86},\n\t{value: 0x0040, lo: 0x87, hi: 0x87},\n\t{value: 0x0008, lo: 0x88, hi: 0x8e},\n\t{value: 0x0040, lo: 0x8f, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x96},\n\t{value: 0x0040, lo: 0x97, hi: 0x97},\n\t{value: 0x0008, lo: 0x98, hi: 0x9e},\n\t{value: 0x0040, lo: 0x9f, hi: 0x9f},\n\t{value: 0x3308, lo: 0xa0, hi: 0xbf},\n\t// Block 0x59, offset 0x2f1\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0018, lo: 0x80, hi: 0xae},\n\t{value: 0x0008, lo: 0xaf, hi: 0xaf},\n\t{value: 0x0018, lo: 0xb0, hi: 0xbf},\n\t// Block 0x5a, offset 0x2f5\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0018, lo: 0x80, hi: 0x8e},\n\t{value: 0x0040, lo: 0x8f, hi: 0xbf},\n\t// Block 0x5b, offset 0x2f8\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x0018, lo: 0x80, hi: 0x99},\n\t{value: 0x0040, lo: 0x9a, hi: 0x9a},\n\t{value: 0x0018, lo: 0x9b, hi: 0x9e},\n\t{value: 0x0edd, lo: 0x9f, hi: 0x9f},\n\t{value: 0x0018, lo: 0xa0, hi: 0xbf},\n\t// Block 0x5c, offset 0x2fe\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0018, lo: 0x80, hi: 0xb2},\n\t{value: 0x0efd, lo: 0xb3, hi: 0xb3},\n\t{value: 0x0040, lo: 0xb4, hi: 0xbf},\n\t// Block 0x5d, offset 0x302\n\t{value: 0x0020, lo: 0x01},\n\t{value: 0x0f1d, lo: 0x80, hi: 0xbf},\n\t// Block 0x5e, offset 0x304\n\t{value: 0x0020, lo: 0x02},\n\t{value: 0x171d, lo: 0x80, hi: 0x8f},\n\t{value: 0x18fd, lo: 0x90, hi: 0xbf},\n\t// Block 0x5f, offset 0x307\n\t{value: 0x0020, lo: 0x01},\n\t{value: 0x1efd, lo: 0x80, hi: 0xbf},\n\t// Block 0x60, offset 0x309\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0040, lo: 0x80, hi: 0x80},\n\t{value: 0x0008, lo: 0x81, hi: 0xbf},\n\t// Block 0x61, offset 0x30c\n\t{value: 0x0000, lo: 0x09},\n\t{value: 0x0008, lo: 0x80, hi: 0x96},\n\t{value: 0x0040, lo: 0x97, hi: 0x98},\n\t{value: 0x3308, lo: 0x99, hi: 0x9a},\n\t{value: 0x29e2, lo: 0x9b, hi: 0x9b},\n\t{value: 0x2a0a, lo: 0x9c, hi: 0x9c},\n\t{value: 0x0008, lo: 0x9d, hi: 0x9e},\n\t{value: 0x2a31, lo: 0x9f, hi: 0x9f},\n\t{value: 0x0018, lo: 0xa0, hi: 0xa0},\n\t{value: 0x0008, lo: 0xa1, hi: 0xbf},\n\t// Block 0x62, offset 0x316\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0008, lo: 0x80, hi: 0xbe},\n\t{value: 0x2a69, lo: 0xbf, hi: 0xbf},\n\t// Block 0x63, offset 0x319\n\t{value: 0x0000, lo: 0x0e},\n\t{value: 0x0040, lo: 0x80, hi: 0x84},\n\t{value: 0x0008, lo: 0x85, hi: 0xaf},\n\t{value: 0x0040, lo: 0xb0, hi: 0xb0},\n\t{value: 0x2a1d, lo: 0xb1, hi: 0xb1},\n\t{value: 0x2a3d, lo: 0xb2, hi: 0xb2},\n\t{value: 0x2a5d, lo: 0xb3, hi: 0xb3},\n\t{value: 0x2a7d, lo: 0xb4, hi: 0xb4},\n\t{value: 0x2a5d, lo: 0xb5, hi: 0xb5},\n\t{value: 0x2a9d, lo: 0xb6, hi: 0xb6},\n\t{value: 0x2abd, lo: 0xb7, hi: 0xb7},\n\t{value: 0x2add, lo: 0xb8, hi: 0xb9},\n\t{value: 0x2afd, lo: 0xba, hi: 0xbb},\n\t{value: 0x2b1d, lo: 0xbc, hi: 0xbd},\n\t{value: 0x2afd, lo: 0xbe, hi: 0xbf},\n\t// Block 0x64, offset 0x328\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0018, lo: 0x80, hi: 0xa3},\n\t{value: 0x0040, lo: 0xa4, hi: 0xaf},\n\t{value: 0x0008, lo: 0xb0, hi: 0xbf},\n\t// Block 0x65, offset 0x32c\n\t{value: 0x0030, lo: 0x04},\n\t{value: 0x2aa2, lo: 0x80, hi: 0x9d},\n\t{value: 0x305a, lo: 0x9e, hi: 0x9e},\n\t{value: 0x0040, lo: 0x9f, hi: 0x9f},\n\t{value: 0x30a2, lo: 0xa0, hi: 0xbf},\n\t// Block 0x66, offset 0x331\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0008, lo: 0x80, hi: 0xaf},\n\t{value: 0x0040, lo: 0xb0, hi: 0xbf},\n\t// Block 0x67, offset 0x334\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0008, lo: 0x80, hi: 0x8c},\n\t{value: 0x0040, lo: 0x8d, hi: 0x8f},\n\t{value: 0x0018, lo: 0x90, hi: 0xbf},\n\t// Block 0x68, offset 0x338\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0018, lo: 0x80, hi: 0x86},\n\t{value: 0x0040, lo: 0x87, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0xbd},\n\t{value: 0x0018, lo: 0xbe, hi: 0xbf},\n\t// Block 0x69, offset 0x33d\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0008, lo: 0x80, hi: 0x8c},\n\t{value: 0x0018, lo: 0x8d, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0xab},\n\t{value: 0x0040, lo: 0xac, hi: 0xbf},\n\t// Block 0x6a, offset 0x342\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x0008, lo: 0x80, hi: 0xa5},\n\t{value: 0x0018, lo: 0xa6, hi: 0xaf},\n\t{value: 0x3308, lo: 0xb0, hi: 0xb1},\n\t{value: 0x0018, lo: 0xb2, hi: 0xb7},\n\t{value: 0x0040, lo: 0xb8, hi: 0xbf},\n\t// Block 0x6b, offset 0x348\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x0040, lo: 0x80, hi: 0xb6},\n\t{value: 0x0008, lo: 0xb7, hi: 0xb7},\n\t{value: 0x2009, lo: 0xb8, hi: 0xb8},\n\t{value: 0x6e89, lo: 0xb9, hi: 0xb9},\n\t{value: 0x0008, lo: 0xba, hi: 0xbf},\n\t// Block 0x6c, offset 0x34e\n\t{value: 0x0000, lo: 0x0e},\n\t{value: 0x0008, lo: 0x80, hi: 0x81},\n\t{value: 0x3308, lo: 0x82, hi: 0x82},\n\t{value: 0x0008, lo: 0x83, hi: 0x85},\n\t{value: 0x3b08, lo: 0x86, hi: 0x86},\n\t{value: 0x0008, lo: 0x87, hi: 0x8a},\n\t{value: 0x3308, lo: 0x8b, hi: 0x8b},\n\t{value: 0x0008, lo: 0x8c, hi: 0xa2},\n\t{value: 0x3008, lo: 0xa3, hi: 0xa4},\n\t{value: 0x3308, lo: 0xa5, hi: 0xa6},\n\t{value: 0x3008, lo: 0xa7, hi: 0xa7},\n\t{value: 0x0018, lo: 0xa8, hi: 0xab},\n\t{value: 0x0040, lo: 0xac, hi: 0xaf},\n\t{value: 0x0018, lo: 0xb0, hi: 0xb9},\n\t{value: 0x0040, lo: 0xba, hi: 0xbf},\n\t// Block 0x6d, offset 0x35d\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x0208, lo: 0x80, hi: 0xb1},\n\t{value: 0x0108, lo: 0xb2, hi: 0xb2},\n\t{value: 0x0008, lo: 0xb3, hi: 0xb3},\n\t{value: 0x0018, lo: 0xb4, hi: 0xb7},\n\t{value: 0x0040, lo: 0xb8, hi: 0xbf},\n\t// Block 0x6e, offset 0x363\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x3008, lo: 0x80, hi: 0x81},\n\t{value: 0x0008, lo: 0x82, hi: 0xb3},\n\t{value: 0x3008, lo: 0xb4, hi: 0xbf},\n\t// Block 0x6f, offset 0x367\n\t{value: 0x0000, lo: 0x0e},\n\t{value: 0x3008, lo: 0x80, hi: 0x83},\n\t{value: 0x3b08, lo: 0x84, hi: 0x84},\n\t{value: 0x3308, lo: 0x85, hi: 0x85},\n\t{value: 0x0040, lo: 0x86, hi: 0x8d},\n\t{value: 0x0018, lo: 0x8e, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x99},\n\t{value: 0x0040, lo: 0x9a, hi: 0x9f},\n\t{value: 0x3308, lo: 0xa0, hi: 0xb1},\n\t{value: 0x0008, lo: 0xb2, hi: 0xb7},\n\t{value: 0x0018, lo: 0xb8, hi: 0xba},\n\t{value: 0x0008, lo: 0xbb, hi: 0xbb},\n\t{value: 0x0018, lo: 0xbc, hi: 0xbc},\n\t{value: 0x0008, lo: 0xbd, hi: 0xbe},\n\t{value: 0x3308, lo: 0xbf, hi: 0xbf},\n\t// Block 0x70, offset 0x376\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0008, lo: 0x80, hi: 0xa5},\n\t{value: 0x3308, lo: 0xa6, hi: 0xad},\n\t{value: 0x0018, lo: 0xae, hi: 0xaf},\n\t{value: 0x0008, lo: 0xb0, hi: 0xbf},\n\t// Block 0x71, offset 0x37b\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0x0008, lo: 0x80, hi: 0x86},\n\t{value: 0x3308, lo: 0x87, hi: 0x91},\n\t{value: 0x3008, lo: 0x92, hi: 0x92},\n\t{value: 0x3808, lo: 0x93, hi: 0x93},\n\t{value: 0x0040, lo: 0x94, hi: 0x9e},\n\t{value: 0x0018, lo: 0x9f, hi: 0xbc},\n\t{value: 0x0040, lo: 0xbd, hi: 0xbf},\n\t// Block 0x72, offset 0x383\n\t{value: 0x0000, lo: 0x09},\n\t{value: 0x3308, lo: 0x80, hi: 0x82},\n\t{value: 0x3008, lo: 0x83, hi: 0x83},\n\t{value: 0x0008, lo: 0x84, hi: 0xb2},\n\t{value: 0x3308, lo: 0xb3, hi: 0xb3},\n\t{value: 0x3008, lo: 0xb4, hi: 0xb5},\n\t{value: 0x3308, lo: 0xb6, hi: 0xb9},\n\t{value: 0x3008, lo: 0xba, hi: 0xbb},\n\t{value: 0x3308, lo: 0xbc, hi: 0xbc},\n\t{value: 0x3008, lo: 0xbd, hi: 0xbf},\n\t// Block 0x73, offset 0x38d\n\t{value: 0x0000, lo: 0x0a},\n\t{value: 0x3808, lo: 0x80, hi: 0x80},\n\t{value: 0x0018, lo: 0x81, hi: 0x8d},\n\t{value: 0x0040, lo: 0x8e, hi: 0x8e},\n\t{value: 0x0008, lo: 0x8f, hi: 0x99},\n\t{value: 0x0040, lo: 0x9a, hi: 0x9d},\n\t{value: 0x0018, lo: 0x9e, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xa4},\n\t{value: 0x3308, lo: 0xa5, hi: 0xa5},\n\t{value: 0x0008, lo: 0xa6, hi: 0xbe},\n\t{value: 0x0040, lo: 0xbf, hi: 0xbf},\n\t// Block 0x74, offset 0x398\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0x0008, lo: 0x80, hi: 0xa8},\n\t{value: 0x3308, lo: 0xa9, hi: 0xae},\n\t{value: 0x3008, lo: 0xaf, hi: 0xb0},\n\t{value: 0x3308, lo: 0xb1, hi: 0xb2},\n\t{value: 0x3008, lo: 0xb3, hi: 0xb4},\n\t{value: 0x3308, lo: 0xb5, hi: 0xb6},\n\t{value: 0x0040, lo: 0xb7, hi: 0xbf},\n\t// Block 0x75, offset 0x3a0\n\t{value: 0x0000, lo: 0x10},\n\t{value: 0x0008, lo: 0x80, hi: 0x82},\n\t{value: 0x3308, lo: 0x83, hi: 0x83},\n\t{value: 0x0008, lo: 0x84, hi: 0x8b},\n\t{value: 0x3308, lo: 0x8c, hi: 0x8c},\n\t{value: 0x3008, lo: 0x8d, hi: 0x8d},\n\t{value: 0x0040, lo: 0x8e, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x99},\n\t{value: 0x0040, lo: 0x9a, hi: 0x9b},\n\t{value: 0x0018, lo: 0x9c, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xb6},\n\t{value: 0x0018, lo: 0xb7, hi: 0xb9},\n\t{value: 0x0008, lo: 0xba, hi: 0xba},\n\t{value: 0x3008, lo: 0xbb, hi: 0xbb},\n\t{value: 0x3308, lo: 0xbc, hi: 0xbc},\n\t{value: 0x3008, lo: 0xbd, hi: 0xbd},\n\t{value: 0x0008, lo: 0xbe, hi: 0xbf},\n\t// Block 0x76, offset 0x3b1\n\t{value: 0x0000, lo: 0x08},\n\t{value: 0x0008, lo: 0x80, hi: 0xaf},\n\t{value: 0x3308, lo: 0xb0, hi: 0xb0},\n\t{value: 0x0008, lo: 0xb1, hi: 0xb1},\n\t{value: 0x3308, lo: 0xb2, hi: 0xb4},\n\t{value: 0x0008, lo: 0xb5, hi: 0xb6},\n\t{value: 0x3308, lo: 0xb7, hi: 0xb8},\n\t{value: 0x0008, lo: 0xb9, hi: 0xbd},\n\t{value: 0x3308, lo: 0xbe, hi: 0xbf},\n\t// Block 0x77, offset 0x3ba\n\t{value: 0x0000, lo: 0x0f},\n\t{value: 0x0008, lo: 0x80, hi: 0x80},\n\t{value: 0x3308, lo: 0x81, hi: 0x81},\n\t{value: 0x0008, lo: 0x82, hi: 0x82},\n\t{value: 0x0040, lo: 0x83, hi: 0x9a},\n\t{value: 0x0008, lo: 0x9b, hi: 0x9d},\n\t{value: 0x0018, lo: 0x9e, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xaa},\n\t{value: 0x3008, lo: 0xab, hi: 0xab},\n\t{value: 0x3308, lo: 0xac, hi: 0xad},\n\t{value: 0x3008, lo: 0xae, hi: 0xaf},\n\t{value: 0x0018, lo: 0xb0, hi: 0xb1},\n\t{value: 0x0008, lo: 0xb2, hi: 0xb4},\n\t{value: 0x3008, lo: 0xb5, hi: 0xb5},\n\t{value: 0x3b08, lo: 0xb6, hi: 0xb6},\n\t{value: 0x0040, lo: 0xb7, hi: 0xbf},\n\t// Block 0x78, offset 0x3ca\n\t{value: 0x0000, lo: 0x0c},\n\t{value: 0x0040, lo: 0x80, hi: 0x80},\n\t{value: 0x0008, lo: 0x81, hi: 0x86},\n\t{value: 0x0040, lo: 0x87, hi: 0x88},\n\t{value: 0x0008, lo: 0x89, hi: 0x8e},\n\t{value: 0x0040, lo: 0x8f, hi: 0x90},\n\t{value: 0x0008, lo: 0x91, hi: 0x96},\n\t{value: 0x0040, lo: 0x97, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xa6},\n\t{value: 0x0040, lo: 0xa7, hi: 0xa7},\n\t{value: 0x0008, lo: 0xa8, hi: 0xae},\n\t{value: 0x0040, lo: 0xaf, hi: 0xaf},\n\t{value: 0x0008, lo: 0xb0, hi: 0xbf},\n\t// Block 0x79, offset 0x3d7\n\t{value: 0x0000, lo: 0x09},\n\t{value: 0x0008, lo: 0x80, hi: 0x9a},\n\t{value: 0x0018, lo: 0x9b, hi: 0x9b},\n\t{value: 0x4465, lo: 0x9c, hi: 0x9c},\n\t{value: 0x447d, lo: 0x9d, hi: 0x9d},\n\t{value: 0x2971, lo: 0x9e, hi: 0x9e},\n\t{value: 0xe06d, lo: 0x9f, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xa5},\n\t{value: 0x0040, lo: 0xa6, hi: 0xaf},\n\t{value: 0x4495, lo: 0xb0, hi: 0xbf},\n\t// Block 0x7a, offset 0x3e1\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x44b5, lo: 0x80, hi: 0x8f},\n\t{value: 0x44d5, lo: 0x90, hi: 0x9f},\n\t{value: 0x44f5, lo: 0xa0, hi: 0xaf},\n\t{value: 0x44d5, lo: 0xb0, hi: 0xbf},\n\t// Block 0x7b, offset 0x3e6\n\t{value: 0x0000, lo: 0x0c},\n\t{value: 0x0008, lo: 0x80, hi: 0xa2},\n\t{value: 0x3008, lo: 0xa3, hi: 0xa4},\n\t{value: 0x3308, lo: 0xa5, hi: 0xa5},\n\t{value: 0x3008, lo: 0xa6, hi: 0xa7},\n\t{value: 0x3308, lo: 0xa8, hi: 0xa8},\n\t{value: 0x3008, lo: 0xa9, hi: 0xaa},\n\t{value: 0x0018, lo: 0xab, hi: 0xab},\n\t{value: 0x3008, lo: 0xac, hi: 0xac},\n\t{value: 0x3b08, lo: 0xad, hi: 0xad},\n\t{value: 0x0040, lo: 0xae, hi: 0xaf},\n\t{value: 0x0008, lo: 0xb0, hi: 0xb9},\n\t{value: 0x0040, lo: 0xba, hi: 0xbf},\n\t// Block 0x7c, offset 0x3f3\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0008, lo: 0x80, hi: 0xa3},\n\t{value: 0x0040, lo: 0xa4, hi: 0xaf},\n\t{value: 0x0018, lo: 0xb0, hi: 0xbf},\n\t// Block 0x7d, offset 0x3f7\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0018, lo: 0x80, hi: 0x86},\n\t{value: 0x0040, lo: 0x87, hi: 0x8a},\n\t{value: 0x0018, lo: 0x8b, hi: 0xbb},\n\t{value: 0x0040, lo: 0xbc, hi: 0xbf},\n\t// Block 0x7e, offset 0x3fc\n\t{value: 0x0020, lo: 0x01},\n\t{value: 0x4515, lo: 0x80, hi: 0xbf},\n\t// Block 0x7f, offset 0x3fe\n\t{value: 0x0020, lo: 0x03},\n\t{value: 0x4d15, lo: 0x80, hi: 0x94},\n\t{value: 0x4ad5, lo: 0x95, hi: 0x95},\n\t{value: 0x4fb5, lo: 0x96, hi: 0xbf},\n\t// Block 0x80, offset 0x402\n\t{value: 0x0020, lo: 0x01},\n\t{value: 0x54f5, lo: 0x80, hi: 0xbf},\n\t// Block 0x81, offset 0x404\n\t{value: 0x0020, lo: 0x03},\n\t{value: 0x5cf5, lo: 0x80, hi: 0x84},\n\t{value: 0x5655, lo: 0x85, hi: 0x85},\n\t{value: 0x5d95, lo: 0x86, hi: 0xbf},\n\t// Block 0x82, offset 0x408\n\t{value: 0x0020, lo: 0x08},\n\t{value: 0x6b55, lo: 0x80, hi: 0x8f},\n\t{value: 0x6d15, lo: 0x90, hi: 0x90},\n\t{value: 0x6d55, lo: 0x91, hi: 0xab},\n\t{value: 0x6ea1, lo: 0xac, hi: 0xac},\n\t{value: 0x70b5, lo: 0xad, hi: 0xad},\n\t{value: 0x0040, lo: 0xae, hi: 0xae},\n\t{value: 0x0040, lo: 0xaf, hi: 0xaf},\n\t{value: 0x70d5, lo: 0xb0, hi: 0xbf},\n\t// Block 0x83, offset 0x411\n\t{value: 0x0020, lo: 0x05},\n\t{value: 0x72d5, lo: 0x80, hi: 0xad},\n\t{value: 0x6535, lo: 0xae, hi: 0xae},\n\t{value: 0x7895, lo: 0xaf, hi: 0xb5},\n\t{value: 0x6f55, lo: 0xb6, hi: 0xb6},\n\t{value: 0x7975, lo: 0xb7, hi: 0xbf},\n\t// Block 0x84, offset 0x417\n\t{value: 0x0028, lo: 0x03},\n\t{value: 0x7c21, lo: 0x80, hi: 0x82},\n\t{value: 0x7be1, lo: 0x83, hi: 0x83},\n\t{value: 0x7c99, lo: 0x84, hi: 0xbf},\n\t// Block 0x85, offset 0x41b\n\t{value: 0x0038, lo: 0x0f},\n\t{value: 0x9db1, lo: 0x80, hi: 0x83},\n\t{value: 0x9e59, lo: 0x84, hi: 0x85},\n\t{value: 0x9e91, lo: 0x86, hi: 0x87},\n\t{value: 0x9ec9, lo: 0x88, hi: 0x8f},\n\t{value: 0x0040, lo: 0x90, hi: 0x90},\n\t{value: 0x0040, lo: 0x91, hi: 0x91},\n\t{value: 0xa089, lo: 0x92, hi: 0x97},\n\t{value: 0xa1a1, lo: 0x98, hi: 0x9c},\n\t{value: 0xa281, lo: 0x9d, hi: 0xb3},\n\t{value: 0x9d41, lo: 0xb4, hi: 0xb4},\n\t{value: 0x9db1, lo: 0xb5, hi: 0xb5},\n\t{value: 0xa789, lo: 0xb6, hi: 0xbb},\n\t{value: 0xa869, lo: 0xbc, hi: 0xbc},\n\t{value: 0xa7f9, lo: 0xbd, hi: 0xbd},\n\t{value: 0xa8d9, lo: 0xbe, hi: 0xbf},\n\t// Block 0x86, offset 0x42b\n\t{value: 0x0000, lo: 0x09},\n\t{value: 0x0008, lo: 0x80, hi: 0x8b},\n\t{value: 0x0040, lo: 0x8c, hi: 0x8c},\n\t{value: 0x0008, lo: 0x8d, hi: 0xa6},\n\t{value: 0x0040, lo: 0xa7, hi: 0xa7},\n\t{value: 0x0008, lo: 0xa8, hi: 0xba},\n\t{value: 0x0040, lo: 0xbb, hi: 0xbb},\n\t{value: 0x0008, lo: 0xbc, hi: 0xbd},\n\t{value: 0x0040, lo: 0xbe, hi: 0xbe},\n\t{value: 0x0008, lo: 0xbf, hi: 0xbf},\n\t// Block 0x87, offset 0x435\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0008, lo: 0x80, hi: 0x8d},\n\t{value: 0x0040, lo: 0x8e, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x9d},\n\t{value: 0x0040, lo: 0x9e, hi: 0xbf},\n\t// Block 0x88, offset 0x43a\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0008, lo: 0x80, hi: 0xba},\n\t{value: 0x0040, lo: 0xbb, hi: 0xbf},\n\t// Block 0x89, offset 0x43d\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x0018, lo: 0x80, hi: 0x82},\n\t{value: 0x0040, lo: 0x83, hi: 0x86},\n\t{value: 0x0018, lo: 0x87, hi: 0xb3},\n\t{value: 0x0040, lo: 0xb4, hi: 0xb6},\n\t{value: 0x0018, lo: 0xb7, hi: 0xbf},\n\t// Block 0x8a, offset 0x443\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0x0018, lo: 0x80, hi: 0x8e},\n\t{value: 0x0040, lo: 0x8f, hi: 0x8f},\n\t{value: 0x0018, lo: 0x90, hi: 0x9b},\n\t{value: 0x0040, lo: 0x9c, hi: 0x9f},\n\t{value: 0x0018, lo: 0xa0, hi: 0xa0},\n\t{value: 0x0040, lo: 0xa1, hi: 0xbf},\n\t// Block 0x8b, offset 0x44a\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0040, lo: 0x80, hi: 0x8f},\n\t{value: 0x0018, lo: 0x90, hi: 0xbc},\n\t{value: 0x3308, lo: 0xbd, hi: 0xbd},\n\t{value: 0x0040, lo: 0xbe, hi: 0xbf},\n\t// Block 0x8c, offset 0x44f\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0008, lo: 0x80, hi: 0x9c},\n\t{value: 0x0040, lo: 0x9d, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xbf},\n\t// Block 0x8d, offset 0x453\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x0008, lo: 0x80, hi: 0x90},\n\t{value: 0x0040, lo: 0x91, hi: 0x9f},\n\t{value: 0x3308, lo: 0xa0, hi: 0xa0},\n\t{value: 0x0018, lo: 0xa1, hi: 0xbb},\n\t{value: 0x0040, lo: 0xbc, hi: 0xbf},\n\t// Block 0x8e, offset 0x459\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0008, lo: 0x80, hi: 0x9f},\n\t{value: 0x0018, lo: 0xa0, hi: 0xa3},\n\t{value: 0x0040, lo: 0xa4, hi: 0xac},\n\t{value: 0x0008, lo: 0xad, hi: 0xbf},\n\t// Block 0x8f, offset 0x45e\n\t{value: 0x0000, lo: 0x08},\n\t{value: 0x0008, lo: 0x80, hi: 0x80},\n\t{value: 0x0018, lo: 0x81, hi: 0x81},\n\t{value: 0x0008, lo: 0x82, hi: 0x89},\n\t{value: 0x0018, lo: 0x8a, hi: 0x8a},\n\t{value: 0x0040, lo: 0x8b, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0xb5},\n\t{value: 0x3308, lo: 0xb6, hi: 0xba},\n\t{value: 0x0040, lo: 0xbb, hi: 0xbf},\n\t// Block 0x90, offset 0x467\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0008, lo: 0x80, hi: 0x9d},\n\t{value: 0x0040, lo: 0x9e, hi: 0x9e},\n\t{value: 0x0018, lo: 0x9f, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xbf},\n\t// Block 0x91, offset 0x46c\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x0008, lo: 0x80, hi: 0x83},\n\t{value: 0x0040, lo: 0x84, hi: 0x87},\n\t{value: 0x0008, lo: 0x88, hi: 0x8f},\n\t{value: 0x0018, lo: 0x90, hi: 0x95},\n\t{value: 0x0040, lo: 0x96, hi: 0xbf},\n\t// Block 0x92, offset 0x472\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0xe145, lo: 0x80, hi: 0x87},\n\t{value: 0xe1c5, lo: 0x88, hi: 0x8f},\n\t{value: 0xe145, lo: 0x90, hi: 0x97},\n\t{value: 0x8ad5, lo: 0x98, hi: 0x9f},\n\t{value: 0x8aed, lo: 0xa0, hi: 0xa7},\n\t{value: 0x0008, lo: 0xa8, hi: 0xbf},\n\t// Block 0x93, offset 0x479\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0x0008, lo: 0x80, hi: 0x9d},\n\t{value: 0x0040, lo: 0x9e, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xa9},\n\t{value: 0x0040, lo: 0xaa, hi: 0xaf},\n\t{value: 0x8aed, lo: 0xb0, hi: 0xb7},\n\t{value: 0x8ad5, lo: 0xb8, hi: 0xbf},\n\t// Block 0x94, offset 0x480\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0xe145, lo: 0x80, hi: 0x87},\n\t{value: 0xe1c5, lo: 0x88, hi: 0x8f},\n\t{value: 0xe145, lo: 0x90, hi: 0x93},\n\t{value: 0x0040, lo: 0x94, hi: 0x97},\n\t{value: 0x0008, lo: 0x98, hi: 0xbb},\n\t{value: 0x0040, lo: 0xbc, hi: 0xbf},\n\t// Block 0x95, offset 0x487\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0008, lo: 0x80, hi: 0xa7},\n\t{value: 0x0040, lo: 0xa8, hi: 0xaf},\n\t{value: 0x0008, lo: 0xb0, hi: 0xbf},\n\t// Block 0x96, offset 0x48b\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0008, lo: 0x80, hi: 0xa3},\n\t{value: 0x0040, lo: 0xa4, hi: 0xae},\n\t{value: 0x0018, lo: 0xaf, hi: 0xaf},\n\t{value: 0x0040, lo: 0xb0, hi: 0xbf},\n\t// Block 0x97, offset 0x490\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0008, lo: 0x80, hi: 0xb6},\n\t{value: 0x0040, lo: 0xb7, hi: 0xbf},\n\t// Block 0x98, offset 0x493\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0008, lo: 0x80, hi: 0x95},\n\t{value: 0x0040, lo: 0x96, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xa7},\n\t{value: 0x0040, lo: 0xa8, hi: 0xbf},\n\t// Block 0x99, offset 0x498\n\t{value: 0x0000, lo: 0x0b},\n\t{value: 0x0808, lo: 0x80, hi: 0x85},\n\t{value: 0x0040, lo: 0x86, hi: 0x87},\n\t{value: 0x0808, lo: 0x88, hi: 0x88},\n\t{value: 0x0040, lo: 0x89, hi: 0x89},\n\t{value: 0x0808, lo: 0x8a, hi: 0xb5},\n\t{value: 0x0040, lo: 0xb6, hi: 0xb6},\n\t{value: 0x0808, lo: 0xb7, hi: 0xb8},\n\t{value: 0x0040, lo: 0xb9, hi: 0xbb},\n\t{value: 0x0808, lo: 0xbc, hi: 0xbc},\n\t{value: 0x0040, lo: 0xbd, hi: 0xbe},\n\t{value: 0x0808, lo: 0xbf, hi: 0xbf},\n\t// Block 0x9a, offset 0x4a4\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x0808, lo: 0x80, hi: 0x95},\n\t{value: 0x0040, lo: 0x96, hi: 0x96},\n\t{value: 0x0818, lo: 0x97, hi: 0x9f},\n\t{value: 0x0808, lo: 0xa0, hi: 0xb6},\n\t{value: 0x0818, lo: 0xb7, hi: 0xbf},\n\t// Block 0x9b, offset 0x4aa\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0808, lo: 0x80, hi: 0x9e},\n\t{value: 0x0040, lo: 0x9f, hi: 0xa6},\n\t{value: 0x0818, lo: 0xa7, hi: 0xaf},\n\t{value: 0x0040, lo: 0xb0, hi: 0xbf},\n\t// Block 0x9c, offset 0x4af\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0x0040, lo: 0x80, hi: 0x9f},\n\t{value: 0x0808, lo: 0xa0, hi: 0xb2},\n\t{value: 0x0040, lo: 0xb3, hi: 0xb3},\n\t{value: 0x0808, lo: 0xb4, hi: 0xb5},\n\t{value: 0x0040, lo: 0xb6, hi: 0xba},\n\t{value: 0x0818, lo: 0xbb, hi: 0xbf},\n\t// Block 0x9d, offset 0x4b6\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0x0808, lo: 0x80, hi: 0x95},\n\t{value: 0x0818, lo: 0x96, hi: 0x9b},\n\t{value: 0x0040, lo: 0x9c, hi: 0x9e},\n\t{value: 0x0018, lo: 0x9f, hi: 0x9f},\n\t{value: 0x0808, lo: 0xa0, hi: 0xb9},\n\t{value: 0x0040, lo: 0xba, hi: 0xbe},\n\t{value: 0x0818, lo: 0xbf, hi: 0xbf},\n\t// Block 0x9e, offset 0x4be\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0808, lo: 0x80, hi: 0xb7},\n\t{value: 0x0040, lo: 0xb8, hi: 0xbb},\n\t{value: 0x0818, lo: 0xbc, hi: 0xbd},\n\t{value: 0x0808, lo: 0xbe, hi: 0xbf},\n\t// Block 0x9f, offset 0x4c3\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0818, lo: 0x80, hi: 0x8f},\n\t{value: 0x0040, lo: 0x90, hi: 0x91},\n\t{value: 0x0818, lo: 0x92, hi: 0xbf},\n\t// Block 0xa0, offset 0x4c7\n\t{value: 0x0000, lo: 0x0f},\n\t{value: 0x0808, lo: 0x80, hi: 0x80},\n\t{value: 0x3308, lo: 0x81, hi: 0x83},\n\t{value: 0x0040, lo: 0x84, hi: 0x84},\n\t{value: 0x3308, lo: 0x85, hi: 0x86},\n\t{value: 0x0040, lo: 0x87, hi: 0x8b},\n\t{value: 0x3308, lo: 0x8c, hi: 0x8f},\n\t{value: 0x0808, lo: 0x90, hi: 0x93},\n\t{value: 0x0040, lo: 0x94, hi: 0x94},\n\t{value: 0x0808, lo: 0x95, hi: 0x97},\n\t{value: 0x0040, lo: 0x98, hi: 0x98},\n\t{value: 0x0808, lo: 0x99, hi: 0xb5},\n\t{value: 0x0040, lo: 0xb6, hi: 0xb7},\n\t{value: 0x3308, lo: 0xb8, hi: 0xba},\n\t{value: 0x0040, lo: 0xbb, hi: 0xbe},\n\t{value: 0x3b08, lo: 0xbf, hi: 0xbf},\n\t// Block 0xa1, offset 0x4d7\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0x0818, lo: 0x80, hi: 0x88},\n\t{value: 0x0040, lo: 0x89, hi: 0x8f},\n\t{value: 0x0818, lo: 0x90, hi: 0x98},\n\t{value: 0x0040, lo: 0x99, hi: 0x9f},\n\t{value: 0x0808, lo: 0xa0, hi: 0xbc},\n\t{value: 0x0818, lo: 0xbd, hi: 0xbf},\n\t// Block 0xa2, offset 0x4de\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0808, lo: 0x80, hi: 0x9c},\n\t{value: 0x0818, lo: 0x9d, hi: 0x9f},\n\t{value: 0x0040, lo: 0xa0, hi: 0xbf},\n\t// Block 0xa3, offset 0x4e2\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0808, lo: 0x80, hi: 0xb5},\n\t{value: 0x0040, lo: 0xb6, hi: 0xb8},\n\t{value: 0x0018, lo: 0xb9, hi: 0xbf},\n\t// Block 0xa4, offset 0x4e6\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0x0808, lo: 0x80, hi: 0x95},\n\t{value: 0x0040, lo: 0x96, hi: 0x97},\n\t{value: 0x0818, lo: 0x98, hi: 0x9f},\n\t{value: 0x0808, lo: 0xa0, hi: 0xb2},\n\t{value: 0x0040, lo: 0xb3, hi: 0xb7},\n\t{value: 0x0818, lo: 0xb8, hi: 0xbf},\n\t// Block 0xa5, offset 0x4ed\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x0808, lo: 0x80, hi: 0xbf},\n\t// Block 0xa6, offset 0x4ef\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0808, lo: 0x80, hi: 0x88},\n\t{value: 0x0040, lo: 0x89, hi: 0xbf},\n\t// Block 0xa7, offset 0x4f2\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x03dd, lo: 0x80, hi: 0xb2},\n\t{value: 0x0040, lo: 0xb3, hi: 0xbf},\n\t// Block 0xa8, offset 0x4f5\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0808, lo: 0x80, hi: 0xb2},\n\t{value: 0x0040, lo: 0xb3, hi: 0xb9},\n\t{value: 0x0818, lo: 0xba, hi: 0xbf},\n\t// Block 0xa9, offset 0x4f9\n\t{value: 0x0000, lo: 0x08},\n\t{value: 0x0908, lo: 0x80, hi: 0x80},\n\t{value: 0x0a08, lo: 0x81, hi: 0xa1},\n\t{value: 0x0c08, lo: 0xa2, hi: 0xa2},\n\t{value: 0x0a08, lo: 0xa3, hi: 0xa3},\n\t{value: 0x3308, lo: 0xa4, hi: 0xa7},\n\t{value: 0x0040, lo: 0xa8, hi: 0xaf},\n\t{value: 0x0808, lo: 0xb0, hi: 0xb9},\n\t{value: 0x0040, lo: 0xba, hi: 0xbf},\n\t// Block 0xaa, offset 0x502\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0040, lo: 0x80, hi: 0x9f},\n\t{value: 0x0818, lo: 0xa0, hi: 0xbe},\n\t{value: 0x0040, lo: 0xbf, hi: 0xbf},\n\t// Block 0xab, offset 0x506\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0x0808, lo: 0x80, hi: 0x9c},\n\t{value: 0x0818, lo: 0x9d, hi: 0xa6},\n\t{value: 0x0808, lo: 0xa7, hi: 0xa7},\n\t{value: 0x0040, lo: 0xa8, hi: 0xaf},\n\t{value: 0x0a08, lo: 0xb0, hi: 0xb2},\n\t{value: 0x0c08, lo: 0xb3, hi: 0xb3},\n\t{value: 0x0a08, lo: 0xb4, hi: 0xbf},\n\t// Block 0xac, offset 0x50e\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0x0a08, lo: 0x80, hi: 0x84},\n\t{value: 0x0808, lo: 0x85, hi: 0x85},\n\t{value: 0x3308, lo: 0x86, hi: 0x90},\n\t{value: 0x0a18, lo: 0x91, hi: 0x93},\n\t{value: 0x0c18, lo: 0x94, hi: 0x94},\n\t{value: 0x0818, lo: 0x95, hi: 0x99},\n\t{value: 0x0040, lo: 0x9a, hi: 0xbf},\n\t// Block 0xad, offset 0x516\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x3008, lo: 0x80, hi: 0x80},\n\t{value: 0x3308, lo: 0x81, hi: 0x81},\n\t{value: 0x3008, lo: 0x82, hi: 0x82},\n\t{value: 0x0008, lo: 0x83, hi: 0xb7},\n\t{value: 0x3308, lo: 0xb8, hi: 0xbf},\n\t// Block 0xae, offset 0x51c\n\t{value: 0x0000, lo: 0x08},\n\t{value: 0x3308, lo: 0x80, hi: 0x85},\n\t{value: 0x3b08, lo: 0x86, hi: 0x86},\n\t{value: 0x0018, lo: 0x87, hi: 0x8d},\n\t{value: 0x0040, lo: 0x8e, hi: 0x91},\n\t{value: 0x0018, lo: 0x92, hi: 0xa5},\n\t{value: 0x0008, lo: 0xa6, hi: 0xaf},\n\t{value: 0x0040, lo: 0xb0, hi: 0xbe},\n\t{value: 0x3b08, lo: 0xbf, hi: 0xbf},\n\t// Block 0xaf, offset 0x525\n\t{value: 0x0000, lo: 0x0b},\n\t{value: 0x3308, lo: 0x80, hi: 0x81},\n\t{value: 0x3008, lo: 0x82, hi: 0x82},\n\t{value: 0x0008, lo: 0x83, hi: 0xaf},\n\t{value: 0x3008, lo: 0xb0, hi: 0xb2},\n\t{value: 0x3308, lo: 0xb3, hi: 0xb6},\n\t{value: 0x3008, lo: 0xb7, hi: 0xb8},\n\t{value: 0x3b08, lo: 0xb9, hi: 0xb9},\n\t{value: 0x3308, lo: 0xba, hi: 0xba},\n\t{value: 0x0018, lo: 0xbb, hi: 0xbc},\n\t{value: 0x0040, lo: 0xbd, hi: 0xbd},\n\t{value: 0x0018, lo: 0xbe, hi: 0xbf},\n\t// Block 0xb0, offset 0x531\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0x0018, lo: 0x80, hi: 0x81},\n\t{value: 0x0040, lo: 0x82, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0xa8},\n\t{value: 0x0040, lo: 0xa9, hi: 0xaf},\n\t{value: 0x0008, lo: 0xb0, hi: 0xb9},\n\t{value: 0x0040, lo: 0xba, hi: 0xbf},\n\t// Block 0xb1, offset 0x538\n\t{value: 0x0000, lo: 0x08},\n\t{value: 0x3308, lo: 0x80, hi: 0x82},\n\t{value: 0x0008, lo: 0x83, hi: 0xa6},\n\t{value: 0x3308, lo: 0xa7, hi: 0xab},\n\t{value: 0x3008, lo: 0xac, hi: 0xac},\n\t{value: 0x3308, lo: 0xad, hi: 0xb2},\n\t{value: 0x3b08, lo: 0xb3, hi: 0xb4},\n\t{value: 0x0040, lo: 0xb5, hi: 0xb5},\n\t{value: 0x0008, lo: 0xb6, hi: 0xbf},\n\t// Block 0xb2, offset 0x541\n\t{value: 0x0000, lo: 0x09},\n\t{value: 0x0018, lo: 0x80, hi: 0x83},\n\t{value: 0x0008, lo: 0x84, hi: 0x84},\n\t{value: 0x3008, lo: 0x85, hi: 0x86},\n\t{value: 0x0040, lo: 0x87, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0xb2},\n\t{value: 0x3308, lo: 0xb3, hi: 0xb3},\n\t{value: 0x0018, lo: 0xb4, hi: 0xb5},\n\t{value: 0x0008, lo: 0xb6, hi: 0xb6},\n\t{value: 0x0040, lo: 0xb7, hi: 0xbf},\n\t// Block 0xb3, offset 0x54b\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0x3308, lo: 0x80, hi: 0x81},\n\t{value: 0x3008, lo: 0x82, hi: 0x82},\n\t{value: 0x0008, lo: 0x83, hi: 0xb2},\n\t{value: 0x3008, lo: 0xb3, hi: 0xb5},\n\t{value: 0x3308, lo: 0xb6, hi: 0xbe},\n\t{value: 0x3008, lo: 0xbf, hi: 0xbf},\n\t// Block 0xb4, offset 0x552\n\t{value: 0x0000, lo: 0x0d},\n\t{value: 0x3808, lo: 0x80, hi: 0x80},\n\t{value: 0x0008, lo: 0x81, hi: 0x84},\n\t{value: 0x0018, lo: 0x85, hi: 0x88},\n\t{value: 0x3308, lo: 0x89, hi: 0x8c},\n\t{value: 0x0018, lo: 0x8d, hi: 0x8d},\n\t{value: 0x0040, lo: 0x8e, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x9a},\n\t{value: 0x0018, lo: 0x9b, hi: 0x9b},\n\t{value: 0x0008, lo: 0x9c, hi: 0x9c},\n\t{value: 0x0018, lo: 0x9d, hi: 0x9f},\n\t{value: 0x0040, lo: 0xa0, hi: 0xa0},\n\t{value: 0x0018, lo: 0xa1, hi: 0xb4},\n\t{value: 0x0040, lo: 0xb5, hi: 0xbf},\n\t// Block 0xb5, offset 0x560\n\t{value: 0x0000, lo: 0x0c},\n\t{value: 0x0008, lo: 0x80, hi: 0x91},\n\t{value: 0x0040, lo: 0x92, hi: 0x92},\n\t{value: 0x0008, lo: 0x93, hi: 0xab},\n\t{value: 0x3008, lo: 0xac, hi: 0xae},\n\t{value: 0x3308, lo: 0xaf, hi: 0xb1},\n\t{value: 0x3008, lo: 0xb2, hi: 0xb3},\n\t{value: 0x3308, lo: 0xb4, hi: 0xb4},\n\t{value: 0x3808, lo: 0xb5, hi: 0xb5},\n\t{value: 0x3308, lo: 0xb6, hi: 0xb7},\n\t{value: 0x0018, lo: 0xb8, hi: 0xbd},\n\t{value: 0x3308, lo: 0xbe, hi: 0xbe},\n\t{value: 0x0040, lo: 0xbf, hi: 0xbf},\n\t// Block 0xb6, offset 0x56d\n\t{value: 0x0000, lo: 0x0c},\n\t{value: 0x0008, lo: 0x80, hi: 0x86},\n\t{value: 0x0040, lo: 0x87, hi: 0x87},\n\t{value: 0x0008, lo: 0x88, hi: 0x88},\n\t{value: 0x0040, lo: 0x89, hi: 0x89},\n\t{value: 0x0008, lo: 0x8a, hi: 0x8d},\n\t{value: 0x0040, lo: 0x8e, hi: 0x8e},\n\t{value: 0x0008, lo: 0x8f, hi: 0x9d},\n\t{value: 0x0040, lo: 0x9e, hi: 0x9e},\n\t{value: 0x0008, lo: 0x9f, hi: 0xa8},\n\t{value: 0x0018, lo: 0xa9, hi: 0xa9},\n\t{value: 0x0040, lo: 0xaa, hi: 0xaf},\n\t{value: 0x0008, lo: 0xb0, hi: 0xbf},\n\t// Block 0xb7, offset 0x57a\n\t{value: 0x0000, lo: 0x08},\n\t{value: 0x0008, lo: 0x80, hi: 0x9e},\n\t{value: 0x3308, lo: 0x9f, hi: 0x9f},\n\t{value: 0x3008, lo: 0xa0, hi: 0xa2},\n\t{value: 0x3308, lo: 0xa3, hi: 0xa9},\n\t{value: 0x3b08, lo: 0xaa, hi: 0xaa},\n\t{value: 0x0040, lo: 0xab, hi: 0xaf},\n\t{value: 0x0008, lo: 0xb0, hi: 0xb9},\n\t{value: 0x0040, lo: 0xba, hi: 0xbf},\n\t// Block 0xb8, offset 0x583\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0008, lo: 0x80, hi: 0xb4},\n\t{value: 0x3008, lo: 0xb5, hi: 0xb7},\n\t{value: 0x3308, lo: 0xb8, hi: 0xbf},\n\t// Block 0xb9, offset 0x587\n\t{value: 0x0000, lo: 0x0e},\n\t{value: 0x3008, lo: 0x80, hi: 0x81},\n\t{value: 0x3b08, lo: 0x82, hi: 0x82},\n\t{value: 0x3308, lo: 0x83, hi: 0x84},\n\t{value: 0x3008, lo: 0x85, hi: 0x85},\n\t{value: 0x3308, lo: 0x86, hi: 0x86},\n\t{value: 0x0008, lo: 0x87, hi: 0x8a},\n\t{value: 0x0018, lo: 0x8b, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x99},\n\t{value: 0x0040, lo: 0x9a, hi: 0x9a},\n\t{value: 0x0018, lo: 0x9b, hi: 0x9b},\n\t{value: 0x0040, lo: 0x9c, hi: 0x9c},\n\t{value: 0x0018, lo: 0x9d, hi: 0x9d},\n\t{value: 0x3308, lo: 0x9e, hi: 0x9e},\n\t{value: 0x0040, lo: 0x9f, hi: 0xbf},\n\t// Block 0xba, offset 0x596\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0x0008, lo: 0x80, hi: 0xaf},\n\t{value: 0x3008, lo: 0xb0, hi: 0xb2},\n\t{value: 0x3308, lo: 0xb3, hi: 0xb8},\n\t{value: 0x3008, lo: 0xb9, hi: 0xb9},\n\t{value: 0x3308, lo: 0xba, hi: 0xba},\n\t{value: 0x3008, lo: 0xbb, hi: 0xbe},\n\t{value: 0x3308, lo: 0xbf, hi: 0xbf},\n\t// Block 0xbb, offset 0x59e\n\t{value: 0x0000, lo: 0x0a},\n\t{value: 0x3308, lo: 0x80, hi: 0x80},\n\t{value: 0x3008, lo: 0x81, hi: 0x81},\n\t{value: 0x3b08, lo: 0x82, hi: 0x82},\n\t{value: 0x3308, lo: 0x83, hi: 0x83},\n\t{value: 0x0008, lo: 0x84, hi: 0x85},\n\t{value: 0x0018, lo: 0x86, hi: 0x86},\n\t{value: 0x0008, lo: 0x87, hi: 0x87},\n\t{value: 0x0040, lo: 0x88, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x99},\n\t{value: 0x0040, lo: 0x9a, hi: 0xbf},\n\t// Block 0xbc, offset 0x5a9\n\t{value: 0x0000, lo: 0x08},\n\t{value: 0x0008, lo: 0x80, hi: 0xae},\n\t{value: 0x3008, lo: 0xaf, hi: 0xb1},\n\t{value: 0x3308, lo: 0xb2, hi: 0xb5},\n\t{value: 0x0040, lo: 0xb6, hi: 0xb7},\n\t{value: 0x3008, lo: 0xb8, hi: 0xbb},\n\t{value: 0x3308, lo: 0xbc, hi: 0xbd},\n\t{value: 0x3008, lo: 0xbe, hi: 0xbe},\n\t{value: 0x3b08, lo: 0xbf, hi: 0xbf},\n\t// Block 0xbd, offset 0x5b2\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x3308, lo: 0x80, hi: 0x80},\n\t{value: 0x0018, lo: 0x81, hi: 0x97},\n\t{value: 0x0008, lo: 0x98, hi: 0x9b},\n\t{value: 0x3308, lo: 0x9c, hi: 0x9d},\n\t{value: 0x0040, lo: 0x9e, hi: 0xbf},\n\t// Block 0xbe, offset 0x5b8\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0x0008, lo: 0x80, hi: 0xaf},\n\t{value: 0x3008, lo: 0xb0, hi: 0xb2},\n\t{value: 0x3308, lo: 0xb3, hi: 0xba},\n\t{value: 0x3008, lo: 0xbb, hi: 0xbc},\n\t{value: 0x3308, lo: 0xbd, hi: 0xbd},\n\t{value: 0x3008, lo: 0xbe, hi: 0xbe},\n\t{value: 0x3b08, lo: 0xbf, hi: 0xbf},\n\t// Block 0xbf, offset 0x5c0\n\t{value: 0x0000, lo: 0x08},\n\t{value: 0x3308, lo: 0x80, hi: 0x80},\n\t{value: 0x0018, lo: 0x81, hi: 0x83},\n\t{value: 0x0008, lo: 0x84, hi: 0x84},\n\t{value: 0x0040, lo: 0x85, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x99},\n\t{value: 0x0040, lo: 0x9a, hi: 0x9f},\n\t{value: 0x0018, lo: 0xa0, hi: 0xac},\n\t{value: 0x0040, lo: 0xad, hi: 0xbf},\n\t// Block 0xc0, offset 0x5c9\n\t{value: 0x0000, lo: 0x09},\n\t{value: 0x0008, lo: 0x80, hi: 0xaa},\n\t{value: 0x3308, lo: 0xab, hi: 0xab},\n\t{value: 0x3008, lo: 0xac, hi: 0xac},\n\t{value: 0x3308, lo: 0xad, hi: 0xad},\n\t{value: 0x3008, lo: 0xae, hi: 0xaf},\n\t{value: 0x3308, lo: 0xb0, hi: 0xb5},\n\t{value: 0x3808, lo: 0xb6, hi: 0xb6},\n\t{value: 0x3308, lo: 0xb7, hi: 0xb7},\n\t{value: 0x0040, lo: 0xb8, hi: 0xbf},\n\t// Block 0xc1, offset 0x5d3\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0008, lo: 0x80, hi: 0x89},\n\t{value: 0x0040, lo: 0x8a, hi: 0xbf},\n\t// Block 0xc2, offset 0x5d6\n\t{value: 0x0000, lo: 0x0b},\n\t{value: 0x0008, lo: 0x80, hi: 0x9a},\n\t{value: 0x0040, lo: 0x9b, hi: 0x9c},\n\t{value: 0x3308, lo: 0x9d, hi: 0x9f},\n\t{value: 0x3008, lo: 0xa0, hi: 0xa1},\n\t{value: 0x3308, lo: 0xa2, hi: 0xa5},\n\t{value: 0x3008, lo: 0xa6, hi: 0xa6},\n\t{value: 0x3308, lo: 0xa7, hi: 0xaa},\n\t{value: 0x3b08, lo: 0xab, hi: 0xab},\n\t{value: 0x0040, lo: 0xac, hi: 0xaf},\n\t{value: 0x0008, lo: 0xb0, hi: 0xb9},\n\t{value: 0x0018, lo: 0xba, hi: 0xbf},\n\t// Block 0xc3, offset 0x5e2\n\t{value: 0x0000, lo: 0x08},\n\t{value: 0x0008, lo: 0x80, hi: 0xab},\n\t{value: 0x3008, lo: 0xac, hi: 0xae},\n\t{value: 0x3308, lo: 0xaf, hi: 0xb7},\n\t{value: 0x3008, lo: 0xb8, hi: 0xb8},\n\t{value: 0x3b08, lo: 0xb9, hi: 0xb9},\n\t{value: 0x3308, lo: 0xba, hi: 0xba},\n\t{value: 0x0018, lo: 0xbb, hi: 0xbb},\n\t{value: 0x0040, lo: 0xbc, hi: 0xbf},\n\t// Block 0xc4, offset 0x5eb\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0040, lo: 0x80, hi: 0x9f},\n\t{value: 0x049d, lo: 0xa0, hi: 0xbf},\n\t// Block 0xc5, offset 0x5ee\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0008, lo: 0x80, hi: 0xa9},\n\t{value: 0x0018, lo: 0xaa, hi: 0xb2},\n\t{value: 0x0040, lo: 0xb3, hi: 0xbe},\n\t{value: 0x0008, lo: 0xbf, hi: 0xbf},\n\t// Block 0xc6, offset 0x5f3\n\t{value: 0x0000, lo: 0x0a},\n\t{value: 0x0008, lo: 0x80, hi: 0x80},\n\t{value: 0x3308, lo: 0x81, hi: 0x8a},\n\t{value: 0x0008, lo: 0x8b, hi: 0xb2},\n\t{value: 0x3308, lo: 0xb3, hi: 0xb3},\n\t{value: 0x3b08, lo: 0xb4, hi: 0xb4},\n\t{value: 0x3308, lo: 0xb5, hi: 0xb8},\n\t{value: 0x3008, lo: 0xb9, hi: 0xb9},\n\t{value: 0x0008, lo: 0xba, hi: 0xba},\n\t{value: 0x3308, lo: 0xbb, hi: 0xbe},\n\t{value: 0x0018, lo: 0xbf, hi: 0xbf},\n\t// Block 0xc7, offset 0x5fe\n\t{value: 0x0000, lo: 0x08},\n\t{value: 0x0018, lo: 0x80, hi: 0x86},\n\t{value: 0x3b08, lo: 0x87, hi: 0x87},\n\t{value: 0x0040, lo: 0x88, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x90},\n\t{value: 0x3308, lo: 0x91, hi: 0x96},\n\t{value: 0x3008, lo: 0x97, hi: 0x98},\n\t{value: 0x3308, lo: 0x99, hi: 0x9b},\n\t{value: 0x0008, lo: 0x9c, hi: 0xbf},\n\t// Block 0xc8, offset 0x607\n\t{value: 0x0000, lo: 0x0b},\n\t{value: 0x0008, lo: 0x80, hi: 0x83},\n\t{value: 0x0040, lo: 0x84, hi: 0x85},\n\t{value: 0x0008, lo: 0x86, hi: 0x89},\n\t{value: 0x3308, lo: 0x8a, hi: 0x96},\n\t{value: 0x3008, lo: 0x97, hi: 0x97},\n\t{value: 0x3308, lo: 0x98, hi: 0x98},\n\t{value: 0x3b08, lo: 0x99, hi: 0x99},\n\t{value: 0x0018, lo: 0x9a, hi: 0x9c},\n\t{value: 0x0008, lo: 0x9d, hi: 0x9d},\n\t{value: 0x0018, lo: 0x9e, hi: 0xa2},\n\t{value: 0x0040, lo: 0xa3, hi: 0xbf},\n\t// Block 0xc9, offset 0x613\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0008, lo: 0x80, hi: 0xb8},\n\t{value: 0x0040, lo: 0xb9, hi: 0xbf},\n\t// Block 0xca, offset 0x616\n\t{value: 0x0000, lo: 0x09},\n\t{value: 0x0008, lo: 0x80, hi: 0x88},\n\t{value: 0x0040, lo: 0x89, hi: 0x89},\n\t{value: 0x0008, lo: 0x8a, hi: 0xae},\n\t{value: 0x3008, lo: 0xaf, hi: 0xaf},\n\t{value: 0x3308, lo: 0xb0, hi: 0xb6},\n\t{value: 0x0040, lo: 0xb7, hi: 0xb7},\n\t{value: 0x3308, lo: 0xb8, hi: 0xbd},\n\t{value: 0x3008, lo: 0xbe, hi: 0xbe},\n\t{value: 0x3b08, lo: 0xbf, hi: 0xbf},\n\t// Block 0xcb, offset 0x620\n\t{value: 0x0000, lo: 0x08},\n\t{value: 0x0008, lo: 0x80, hi: 0x80},\n\t{value: 0x0018, lo: 0x81, hi: 0x85},\n\t{value: 0x0040, lo: 0x86, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x99},\n\t{value: 0x0018, lo: 0x9a, hi: 0xac},\n\t{value: 0x0040, lo: 0xad, hi: 0xaf},\n\t{value: 0x0018, lo: 0xb0, hi: 0xb1},\n\t{value: 0x0008, lo: 0xb2, hi: 0xbf},\n\t// Block 0xcc, offset 0x629\n\t{value: 0x0000, lo: 0x0b},\n\t{value: 0x0008, lo: 0x80, hi: 0x8f},\n\t{value: 0x0040, lo: 0x90, hi: 0x91},\n\t{value: 0x3308, lo: 0x92, hi: 0xa7},\n\t{value: 0x0040, lo: 0xa8, hi: 0xa8},\n\t{value: 0x3008, lo: 0xa9, hi: 0xa9},\n\t{value: 0x3308, lo: 0xaa, hi: 0xb0},\n\t{value: 0x3008, lo: 0xb1, hi: 0xb1},\n\t{value: 0x3308, lo: 0xb2, hi: 0xb3},\n\t{value: 0x3008, lo: 0xb4, hi: 0xb4},\n\t{value: 0x3308, lo: 0xb5, hi: 0xb6},\n\t{value: 0x0040, lo: 0xb7, hi: 0xbf},\n\t// Block 0xcd, offset 0x635\n\t{value: 0x0000, lo: 0x0c},\n\t{value: 0x0008, lo: 0x80, hi: 0x86},\n\t{value: 0x0040, lo: 0x87, hi: 0x87},\n\t{value: 0x0008, lo: 0x88, hi: 0x89},\n\t{value: 0x0040, lo: 0x8a, hi: 0x8a},\n\t{value: 0x0008, lo: 0x8b, hi: 0xb0},\n\t{value: 0x3308, lo: 0xb1, hi: 0xb6},\n\t{value: 0x0040, lo: 0xb7, hi: 0xb9},\n\t{value: 0x3308, lo: 0xba, hi: 0xba},\n\t{value: 0x0040, lo: 0xbb, hi: 0xbb},\n\t{value: 0x3308, lo: 0xbc, hi: 0xbd},\n\t{value: 0x0040, lo: 0xbe, hi: 0xbe},\n\t{value: 0x3308, lo: 0xbf, hi: 0xbf},\n\t// Block 0xce, offset 0x642\n\t{value: 0x0000, lo: 0x0c},\n\t{value: 0x3308, lo: 0x80, hi: 0x83},\n\t{value: 0x3b08, lo: 0x84, hi: 0x85},\n\t{value: 0x0008, lo: 0x86, hi: 0x86},\n\t{value: 0x3308, lo: 0x87, hi: 0x87},\n\t{value: 0x0040, lo: 0x88, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x99},\n\t{value: 0x0040, lo: 0x9a, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xa5},\n\t{value: 0x0040, lo: 0xa6, hi: 0xa6},\n\t{value: 0x0008, lo: 0xa7, hi: 0xa8},\n\t{value: 0x0040, lo: 0xa9, hi: 0xa9},\n\t{value: 0x0008, lo: 0xaa, hi: 0xbf},\n\t// Block 0xcf, offset 0x64f\n\t{value: 0x0000, lo: 0x0d},\n\t{value: 0x0008, lo: 0x80, hi: 0x89},\n\t{value: 0x3008, lo: 0x8a, hi: 0x8e},\n\t{value: 0x0040, lo: 0x8f, hi: 0x8f},\n\t{value: 0x3308, lo: 0x90, hi: 0x91},\n\t{value: 0x0040, lo: 0x92, hi: 0x92},\n\t{value: 0x3008, lo: 0x93, hi: 0x94},\n\t{value: 0x3308, lo: 0x95, hi: 0x95},\n\t{value: 0x3008, lo: 0x96, hi: 0x96},\n\t{value: 0x3b08, lo: 0x97, hi: 0x97},\n\t{value: 0x0008, lo: 0x98, hi: 0x98},\n\t{value: 0x0040, lo: 0x99, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xa9},\n\t{value: 0x0040, lo: 0xaa, hi: 0xbf},\n\t// Block 0xd0, offset 0x65d\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0x0040, lo: 0x80, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xb2},\n\t{value: 0x3308, lo: 0xb3, hi: 0xb4},\n\t{value: 0x3008, lo: 0xb5, hi: 0xb6},\n\t{value: 0x0018, lo: 0xb7, hi: 0xb8},\n\t{value: 0x0040, lo: 0xb9, hi: 0xbf},\n\t// Block 0xd1, offset 0x664\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0008, lo: 0x80, hi: 0x99},\n\t{value: 0x0040, lo: 0x9a, hi: 0xbf},\n\t// Block 0xd2, offset 0x667\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0018, lo: 0x80, hi: 0xae},\n\t{value: 0x0040, lo: 0xaf, hi: 0xaf},\n\t{value: 0x0018, lo: 0xb0, hi: 0xb4},\n\t{value: 0x0040, lo: 0xb5, hi: 0xbf},\n\t// Block 0xd3, offset 0x66c\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0008, lo: 0x80, hi: 0x83},\n\t{value: 0x0040, lo: 0x84, hi: 0xbf},\n\t// Block 0xd4, offset 0x66f\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0008, lo: 0x80, hi: 0xae},\n\t{value: 0x0040, lo: 0xaf, hi: 0xbf},\n\t// Block 0xd5, offset 0x672\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0008, lo: 0x80, hi: 0x86},\n\t{value: 0x0040, lo: 0x87, hi: 0xbf},\n\t// Block 0xd6, offset 0x675\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0x0008, lo: 0x80, hi: 0x9e},\n\t{value: 0x0040, lo: 0x9f, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xa9},\n\t{value: 0x0040, lo: 0xaa, hi: 0xad},\n\t{value: 0x0018, lo: 0xae, hi: 0xaf},\n\t{value: 0x0040, lo: 0xb0, hi: 0xbf},\n\t// Block 0xd7, offset 0x67c\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0x0040, lo: 0x80, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0xad},\n\t{value: 0x0040, lo: 0xae, hi: 0xaf},\n\t{value: 0x3308, lo: 0xb0, hi: 0xb4},\n\t{value: 0x0018, lo: 0xb5, hi: 0xb5},\n\t{value: 0x0040, lo: 0xb6, hi: 0xbf},\n\t// Block 0xd8, offset 0x683\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0008, lo: 0x80, hi: 0xaf},\n\t{value: 0x3308, lo: 0xb0, hi: 0xb6},\n\t{value: 0x0018, lo: 0xb7, hi: 0xbf},\n\t// Block 0xd9, offset 0x687\n\t{value: 0x0000, lo: 0x0a},\n\t{value: 0x0008, lo: 0x80, hi: 0x83},\n\t{value: 0x0018, lo: 0x84, hi: 0x85},\n\t{value: 0x0040, lo: 0x86, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x99},\n\t{value: 0x0040, lo: 0x9a, hi: 0x9a},\n\t{value: 0x0018, lo: 0x9b, hi: 0xa1},\n\t{value: 0x0040, lo: 0xa2, hi: 0xa2},\n\t{value: 0x0008, lo: 0xa3, hi: 0xb7},\n\t{value: 0x0040, lo: 0xb8, hi: 0xbc},\n\t{value: 0x0008, lo: 0xbd, hi: 0xbf},\n\t// Block 0xda, offset 0x692\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0008, lo: 0x80, hi: 0x8f},\n\t{value: 0x0040, lo: 0x90, hi: 0xbf},\n\t// Block 0xdb, offset 0x695\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0040, lo: 0x80, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xbf},\n\t// Block 0xdc, offset 0x698\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0018, lo: 0x80, hi: 0x9a},\n\t{value: 0x0040, lo: 0x9b, hi: 0xbf},\n\t// Block 0xdd, offset 0x69b\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x0008, lo: 0x80, hi: 0x84},\n\t{value: 0x0040, lo: 0x85, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x90},\n\t{value: 0x3008, lo: 0x91, hi: 0xbe},\n\t{value: 0x0040, lo: 0xbf, hi: 0xbf},\n\t// Block 0xde, offset 0x6a1\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0040, lo: 0x80, hi: 0x8e},\n\t{value: 0x3308, lo: 0x8f, hi: 0x92},\n\t{value: 0x0008, lo: 0x93, hi: 0x9f},\n\t{value: 0x0040, lo: 0xa0, hi: 0xbf},\n\t// Block 0xdf, offset 0x6a6\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0040, lo: 0x80, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xa1},\n\t{value: 0x0040, lo: 0xa2, hi: 0xbf},\n\t// Block 0xe0, offset 0x6aa\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0008, lo: 0x80, hi: 0xb1},\n\t{value: 0x0040, lo: 0xb2, hi: 0xbf},\n\t// Block 0xe1, offset 0x6ad\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0008, lo: 0x80, hi: 0xb2},\n\t{value: 0x0040, lo: 0xb3, hi: 0xbf},\n\t// Block 0xe2, offset 0x6b0\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0008, lo: 0x80, hi: 0x9e},\n\t{value: 0x0040, lo: 0x9f, hi: 0xbf},\n\t// Block 0xe3, offset 0x6b3\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0040, lo: 0x80, hi: 0xaf},\n\t{value: 0x0008, lo: 0xb0, hi: 0xbf},\n\t// Block 0xe4, offset 0x6b6\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0008, lo: 0x80, hi: 0xbb},\n\t{value: 0x0040, lo: 0xbc, hi: 0xbf},\n\t// Block 0xe5, offset 0x6b9\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0008, lo: 0x80, hi: 0xaa},\n\t{value: 0x0040, lo: 0xab, hi: 0xaf},\n\t{value: 0x0008, lo: 0xb0, hi: 0xbc},\n\t{value: 0x0040, lo: 0xbd, hi: 0xbf},\n\t// Block 0xe6, offset 0x6be\n\t{value: 0x0000, lo: 0x09},\n\t{value: 0x0008, lo: 0x80, hi: 0x88},\n\t{value: 0x0040, lo: 0x89, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x99},\n\t{value: 0x0040, lo: 0x9a, hi: 0x9b},\n\t{value: 0x0018, lo: 0x9c, hi: 0x9c},\n\t{value: 0x3308, lo: 0x9d, hi: 0x9e},\n\t{value: 0x0018, lo: 0x9f, hi: 0x9f},\n\t{value: 0x03c0, lo: 0xa0, hi: 0xa3},\n\t{value: 0x0040, lo: 0xa4, hi: 0xbf},\n\t// Block 0xe7, offset 0x6c8\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0018, lo: 0x80, hi: 0xb5},\n\t{value: 0x0040, lo: 0xb6, hi: 0xbf},\n\t// Block 0xe8, offset 0x6cb\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0018, lo: 0x80, hi: 0xa6},\n\t{value: 0x0040, lo: 0xa7, hi: 0xa8},\n\t{value: 0x0018, lo: 0xa9, hi: 0xbf},\n\t// Block 0xe9, offset 0x6cf\n\t{value: 0x0000, lo: 0x0e},\n\t{value: 0x0018, lo: 0x80, hi: 0x9d},\n\t{value: 0xb5b9, lo: 0x9e, hi: 0x9e},\n\t{value: 0xb601, lo: 0x9f, hi: 0x9f},\n\t{value: 0xb649, lo: 0xa0, hi: 0xa0},\n\t{value: 0xb6b1, lo: 0xa1, hi: 0xa1},\n\t{value: 0xb719, lo: 0xa2, hi: 0xa2},\n\t{value: 0xb781, lo: 0xa3, hi: 0xa3},\n\t{value: 0xb7e9, lo: 0xa4, hi: 0xa4},\n\t{value: 0x3018, lo: 0xa5, hi: 0xa6},\n\t{value: 0x3318, lo: 0xa7, hi: 0xa9},\n\t{value: 0x0018, lo: 0xaa, hi: 0xac},\n\t{value: 0x3018, lo: 0xad, hi: 0xb2},\n\t{value: 0x0340, lo: 0xb3, hi: 0xba},\n\t{value: 0x3318, lo: 0xbb, hi: 0xbf},\n\t// Block 0xea, offset 0x6de\n\t{value: 0x0000, lo: 0x0b},\n\t{value: 0x3318, lo: 0x80, hi: 0x82},\n\t{value: 0x0018, lo: 0x83, hi: 0x84},\n\t{value: 0x3318, lo: 0x85, hi: 0x8b},\n\t{value: 0x0018, lo: 0x8c, hi: 0xa9},\n\t{value: 0x3318, lo: 0xaa, hi: 0xad},\n\t{value: 0x0018, lo: 0xae, hi: 0xba},\n\t{value: 0xb851, lo: 0xbb, hi: 0xbb},\n\t{value: 0xb899, lo: 0xbc, hi: 0xbc},\n\t{value: 0xb8e1, lo: 0xbd, hi: 0xbd},\n\t{value: 0xb949, lo: 0xbe, hi: 0xbe},\n\t{value: 0xb9b1, lo: 0xbf, hi: 0xbf},\n\t// Block 0xeb, offset 0x6ea\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0xba19, lo: 0x80, hi: 0x80},\n\t{value: 0x0018, lo: 0x81, hi: 0xa8},\n\t{value: 0x0040, lo: 0xa9, hi: 0xbf},\n\t// Block 0xec, offset 0x6ee\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0018, lo: 0x80, hi: 0x81},\n\t{value: 0x3318, lo: 0x82, hi: 0x84},\n\t{value: 0x0018, lo: 0x85, hi: 0x85},\n\t{value: 0x0040, lo: 0x86, hi: 0xbf},\n\t// Block 0xed, offset 0x6f3\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0040, lo: 0x80, hi: 0x9f},\n\t{value: 0x0018, lo: 0xa0, hi: 0xb3},\n\t{value: 0x0040, lo: 0xb4, hi: 0xbf},\n\t// Block 0xee, offset 0x6f7\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0018, lo: 0x80, hi: 0x96},\n\t{value: 0x0040, lo: 0x97, hi: 0x9f},\n\t{value: 0x0018, lo: 0xa0, hi: 0xb8},\n\t{value: 0x0040, lo: 0xb9, hi: 0xbf},\n\t// Block 0xef, offset 0x6fc\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x3308, lo: 0x80, hi: 0xb6},\n\t{value: 0x0018, lo: 0xb7, hi: 0xba},\n\t{value: 0x3308, lo: 0xbb, hi: 0xbf},\n\t// Block 0xf0, offset 0x700\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x3308, lo: 0x80, hi: 0xac},\n\t{value: 0x0018, lo: 0xad, hi: 0xb4},\n\t{value: 0x3308, lo: 0xb5, hi: 0xb5},\n\t{value: 0x0018, lo: 0xb6, hi: 0xbf},\n\t// Block 0xf1, offset 0x705\n\t{value: 0x0000, lo: 0x08},\n\t{value: 0x0018, lo: 0x80, hi: 0x83},\n\t{value: 0x3308, lo: 0x84, hi: 0x84},\n\t{value: 0x0018, lo: 0x85, hi: 0x8b},\n\t{value: 0x0040, lo: 0x8c, hi: 0x9a},\n\t{value: 0x3308, lo: 0x9b, hi: 0x9f},\n\t{value: 0x0040, lo: 0xa0, hi: 0xa0},\n\t{value: 0x3308, lo: 0xa1, hi: 0xaf},\n\t{value: 0x0040, lo: 0xb0, hi: 0xbf},\n\t// Block 0xf2, offset 0x70e\n\t{value: 0x0000, lo: 0x0a},\n\t{value: 0x3308, lo: 0x80, hi: 0x86},\n\t{value: 0x0040, lo: 0x87, hi: 0x87},\n\t{value: 0x3308, lo: 0x88, hi: 0x98},\n\t{value: 0x0040, lo: 0x99, hi: 0x9a},\n\t{value: 0x3308, lo: 0x9b, hi: 0xa1},\n\t{value: 0x0040, lo: 0xa2, hi: 0xa2},\n\t{value: 0x3308, lo: 0xa3, hi: 0xa4},\n\t{value: 0x0040, lo: 0xa5, hi: 0xa5},\n\t{value: 0x3308, lo: 0xa6, hi: 0xaa},\n\t{value: 0x0040, lo: 0xab, hi: 0xbf},\n\t// Block 0xf3, offset 0x719\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x0808, lo: 0x80, hi: 0x84},\n\t{value: 0x0040, lo: 0x85, hi: 0x86},\n\t{value: 0x0818, lo: 0x87, hi: 0x8f},\n\t{value: 0x3308, lo: 0x90, hi: 0x96},\n\t{value: 0x0040, lo: 0x97, hi: 0xbf},\n\t// Block 0xf4, offset 0x71f\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0x0a08, lo: 0x80, hi: 0x83},\n\t{value: 0x3308, lo: 0x84, hi: 0x8a},\n\t{value: 0x0040, lo: 0x8b, hi: 0x8f},\n\t{value: 0x0808, lo: 0x90, hi: 0x99},\n\t{value: 0x0040, lo: 0x9a, hi: 0x9d},\n\t{value: 0x0818, lo: 0x9e, hi: 0x9f},\n\t{value: 0x0040, lo: 0xa0, hi: 0xbf},\n\t// Block 0xf5, offset 0x727\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0040, lo: 0x80, hi: 0xb0},\n\t{value: 0x0818, lo: 0xb1, hi: 0xbf},\n\t// Block 0xf6, offset 0x72a\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0818, lo: 0x80, hi: 0xb4},\n\t{value: 0x0040, lo: 0xb5, hi: 0xbf},\n\t// Block 0xf7, offset 0x72d\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0040, lo: 0x80, hi: 0xaf},\n\t{value: 0x0018, lo: 0xb0, hi: 0xb1},\n\t{value: 0x0040, lo: 0xb2, hi: 0xbf},\n\t// Block 0xf8, offset 0x731\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0018, lo: 0x80, hi: 0xab},\n\t{value: 0x0040, lo: 0xac, hi: 0xaf},\n\t{value: 0x0018, lo: 0xb0, hi: 0xbf},\n\t// Block 0xf9, offset 0x735\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x0018, lo: 0x80, hi: 0x93},\n\t{value: 0x0040, lo: 0x94, hi: 0x9f},\n\t{value: 0x0018, lo: 0xa0, hi: 0xae},\n\t{value: 0x0040, lo: 0xaf, hi: 0xb0},\n\t{value: 0x0018, lo: 0xb1, hi: 0xbf},\n\t// Block 0xfa, offset 0x73b\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x0040, lo: 0x80, hi: 0x80},\n\t{value: 0x0018, lo: 0x81, hi: 0x8f},\n\t{value: 0x0040, lo: 0x90, hi: 0x90},\n\t{value: 0x0018, lo: 0x91, hi: 0xb5},\n\t{value: 0x0040, lo: 0xb6, hi: 0xbf},\n\t// Block 0xfb, offset 0x741\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0018, lo: 0x80, hi: 0x8f},\n\t{value: 0xc1c1, lo: 0x90, hi: 0x90},\n\t{value: 0x0018, lo: 0x91, hi: 0xac},\n\t{value: 0x0040, lo: 0xad, hi: 0xbf},\n\t// Block 0xfc, offset 0x746\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0040, lo: 0x80, hi: 0xa5},\n\t{value: 0x0018, lo: 0xa6, hi: 0xbf},\n\t// Block 0xfd, offset 0x749\n\t{value: 0x0000, lo: 0x0f},\n\t{value: 0xc7e9, lo: 0x80, hi: 0x80},\n\t{value: 0xc839, lo: 0x81, hi: 0x81},\n\t{value: 0xc889, lo: 0x82, hi: 0x82},\n\t{value: 0xc8d9, lo: 0x83, hi: 0x83},\n\t{value: 0xc929, lo: 0x84, hi: 0x84},\n\t{value: 0xc979, lo: 0x85, hi: 0x85},\n\t{value: 0xc9c9, lo: 0x86, hi: 0x86},\n\t{value: 0xca19, lo: 0x87, hi: 0x87},\n\t{value: 0xca69, lo: 0x88, hi: 0x88},\n\t{value: 0x0040, lo: 0x89, hi: 0x8f},\n\t{value: 0xcab9, lo: 0x90, hi: 0x90},\n\t{value: 0xcad9, lo: 0x91, hi: 0x91},\n\t{value: 0x0040, lo: 0x92, hi: 0x9f},\n\t{value: 0x0018, lo: 0xa0, hi: 0xa5},\n\t{value: 0x0040, lo: 0xa6, hi: 0xbf},\n\t// Block 0xfe, offset 0x759\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0x0018, lo: 0x80, hi: 0x94},\n\t{value: 0x0040, lo: 0x95, hi: 0x9f},\n\t{value: 0x0018, lo: 0xa0, hi: 0xac},\n\t{value: 0x0040, lo: 0xad, hi: 0xaf},\n\t{value: 0x0018, lo: 0xb0, hi: 0xb9},\n\t{value: 0x0040, lo: 0xba, hi: 0xbf},\n\t// Block 0xff, offset 0x760\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0018, lo: 0x80, hi: 0xb3},\n\t{value: 0x0040, lo: 0xb4, hi: 0xbf},\n\t// Block 0x100, offset 0x763\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0018, lo: 0x80, hi: 0x98},\n\t{value: 0x0040, lo: 0x99, hi: 0xbf},\n\t// Block 0x101, offset 0x766\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0018, lo: 0x80, hi: 0x8b},\n\t{value: 0x0040, lo: 0x8c, hi: 0x8f},\n\t{value: 0x0018, lo: 0x90, hi: 0xbf},\n\t// Block 0x102, offset 0x76a\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x0018, lo: 0x80, hi: 0x87},\n\t{value: 0x0040, lo: 0x88, hi: 0x8f},\n\t{value: 0x0018, lo: 0x90, hi: 0x99},\n\t{value: 0x0040, lo: 0x9a, hi: 0x9f},\n\t{value: 0x0018, lo: 0xa0, hi: 0xbf},\n\t// Block 0x103, offset 0x770\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0018, lo: 0x80, hi: 0x87},\n\t{value: 0x0040, lo: 0x88, hi: 0x8f},\n\t{value: 0x0018, lo: 0x90, hi: 0xad},\n\t{value: 0x0040, lo: 0xae, hi: 0xbf},\n\t// Block 0x104, offset 0x775\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0018, lo: 0x80, hi: 0x8b},\n\t{value: 0x0040, lo: 0x8c, hi: 0x8f},\n\t{value: 0x0018, lo: 0x90, hi: 0xbe},\n\t{value: 0x0040, lo: 0xbf, hi: 0xbf},\n\t// Block 0x105, offset 0x77a\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0x0018, lo: 0x80, hi: 0xb0},\n\t{value: 0x0040, lo: 0xb1, hi: 0xb2},\n\t{value: 0x0018, lo: 0xb3, hi: 0xb6},\n\t{value: 0x0040, lo: 0xb7, hi: 0xb9},\n\t{value: 0x0018, lo: 0xba, hi: 0xba},\n\t{value: 0x0040, lo: 0xbb, hi: 0xbb},\n\t{value: 0x0018, lo: 0xbc, hi: 0xbf},\n\t// Block 0x106, offset 0x782\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0018, lo: 0x80, hi: 0xa2},\n\t{value: 0x0040, lo: 0xa3, hi: 0xaf},\n\t{value: 0x0018, lo: 0xb0, hi: 0xb9},\n\t{value: 0x0040, lo: 0xba, hi: 0xbf},\n\t// Block 0x107, offset 0x787\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0018, lo: 0x80, hi: 0x82},\n\t{value: 0x0040, lo: 0x83, hi: 0x8f},\n\t{value: 0x0018, lo: 0x90, hi: 0xbf},\n\t// Block 0x108, offset 0x78b\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0040, lo: 0x80, hi: 0x9f},\n\t{value: 0x0018, lo: 0xa0, hi: 0xad},\n\t{value: 0x0040, lo: 0xae, hi: 0xbf},\n\t// Block 0x109, offset 0x78f\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0008, lo: 0x80, hi: 0x96},\n\t{value: 0x0040, lo: 0x97, hi: 0xbf},\n\t// Block 0x10a, offset 0x792\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0008, lo: 0x80, hi: 0xb4},\n\t{value: 0x0040, lo: 0xb5, hi: 0xbf},\n\t// Block 0x10b, offset 0x795\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0008, lo: 0x80, hi: 0x9d},\n\t{value: 0x0040, lo: 0x9e, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xbf},\n\t// Block 0x10c, offset 0x799\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0008, lo: 0x80, hi: 0xa1},\n\t{value: 0x0040, lo: 0xa2, hi: 0xaf},\n\t{value: 0x0008, lo: 0xb0, hi: 0xbf},\n\t// Block 0x10d, offset 0x79d\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0008, lo: 0x80, hi: 0xa0},\n\t{value: 0x0040, lo: 0xa1, hi: 0xbf},\n\t// Block 0x10e, offset 0x7a0\n\t{value: 0x0020, lo: 0x0f},\n\t{value: 0xdeb9, lo: 0x80, hi: 0x89},\n\t{value: 0x8dfd, lo: 0x8a, hi: 0x8a},\n\t{value: 0xdff9, lo: 0x8b, hi: 0x9c},\n\t{value: 0x8e1d, lo: 0x9d, hi: 0x9d},\n\t{value: 0xe239, lo: 0x9e, hi: 0xa2},\n\t{value: 0x8e3d, lo: 0xa3, hi: 0xa3},\n\t{value: 0xe2d9, lo: 0xa4, hi: 0xab},\n\t{value: 0x7ed5, lo: 0xac, hi: 0xac},\n\t{value: 0xe3d9, lo: 0xad, hi: 0xaf},\n\t{value: 0x8e5d, lo: 0xb0, hi: 0xb0},\n\t{value: 0xe439, lo: 0xb1, hi: 0xb6},\n\t{value: 0x8e7d, lo: 0xb7, hi: 0xb9},\n\t{value: 0xe4f9, lo: 0xba, hi: 0xba},\n\t{value: 0x8edd, lo: 0xbb, hi: 0xbb},\n\t{value: 0xe519, lo: 0xbc, hi: 0xbf},\n\t// Block 0x10f, offset 0x7b0\n\t{value: 0x0020, lo: 0x10},\n\t{value: 0x937d, lo: 0x80, hi: 0x80},\n\t{value: 0xf099, lo: 0x81, hi: 0x86},\n\t{value: 0x939d, lo: 0x87, hi: 0x8a},\n\t{value: 0xd9f9, lo: 0x8b, hi: 0x8b},\n\t{value: 0xf159, lo: 0x8c, hi: 0x96},\n\t{value: 0x941d, lo: 0x97, hi: 0x97},\n\t{value: 0xf2b9, lo: 0x98, hi: 0xa3},\n\t{value: 0x943d, lo: 0xa4, hi: 0xa6},\n\t{value: 0xf439, lo: 0xa7, hi: 0xaa},\n\t{value: 0x949d, lo: 0xab, hi: 0xab},\n\t{value: 0xf4b9, lo: 0xac, hi: 0xac},\n\t{value: 0x94bd, lo: 0xad, hi: 0xad},\n\t{value: 0xf4d9, lo: 0xae, hi: 0xaf},\n\t{value: 0x94dd, lo: 0xb0, hi: 0xb1},\n\t{value: 0xf519, lo: 0xb2, hi: 0xbe},\n\t{value: 0x2040, lo: 0xbf, hi: 0xbf},\n\t// Block 0x110, offset 0x7c1\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0040, lo: 0x80, hi: 0x80},\n\t{value: 0x0340, lo: 0x81, hi: 0x81},\n\t{value: 0x0040, lo: 0x82, hi: 0x9f},\n\t{value: 0x0340, lo: 0xa0, hi: 0xbf},\n\t// Block 0x111, offset 0x7c6\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x0340, lo: 0x80, hi: 0xbf},\n\t// Block 0x112, offset 0x7c8\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x33c0, lo: 0x80, hi: 0xbf},\n\t// Block 0x113, offset 0x7ca\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x33c0, lo: 0x80, hi: 0xaf},\n\t{value: 0x0040, lo: 0xb0, hi: 0xbf},\n}\n\n// Total table size 42466 bytes (41KiB); checksum: 355A58A4\n"
  },
  {
    "path": "vendor/golang.org/x/net/idna/tables9.0.0.go",
    "content": "// Code generated by running \"go generate\" in golang.org/x/text. DO NOT EDIT.\n\n// +build !go1.10\n\npackage idna\n\n// UnicodeVersion is the Unicode version from which the tables in this package are derived.\nconst UnicodeVersion = \"9.0.0\"\n\nvar mappings string = \"\" + // Size: 8175 bytes\n\t\"\\x00\\x01 \\x03 ̈\\x01a\\x03 ̄\\x012\\x013\\x03 ́\\x03 ̧\\x011\\x01o\\x051⁄4\\x051⁄2\" +\n\t\"\\x053⁄4\\x03i̇\\x03l·\\x03ʼn\\x01s\\x03dž\\x03ⱥ\\x03ⱦ\\x01h\\x01j\\x01r\\x01w\\x01y\" +\n\t\"\\x03 ̆\\x03 ̇\\x03 ̊\\x03 ̨\\x03 ̃\\x03 ̋\\x01l\\x01x\\x04̈́\\x03 ι\\x01;\\x05 ̈́\" +\n\t\"\\x04եւ\\x04اٴ\\x04وٴ\\x04ۇٴ\\x04يٴ\\x06क़\\x06ख़\\x06ग़\\x06ज़\\x06ड़\\x06ढ़\\x06फ़\" +\n\t\"\\x06य़\\x06ড়\\x06ঢ়\\x06য়\\x06ਲ਼\\x06ਸ਼\\x06ਖ਼\\x06ਗ਼\\x06ਜ਼\\x06ਫ਼\\x06ଡ଼\\x06ଢ଼\" +\n\t\"\\x06ํา\\x06ໍາ\\x06ຫນ\\x06ຫມ\\x06གྷ\\x06ཌྷ\\x06དྷ\\x06བྷ\\x06ཛྷ\\x06ཀྵ\\x06ཱི\\x06ཱུ\" +\n\t\"\\x06ྲྀ\\x09ྲཱྀ\\x06ླྀ\\x09ླཱྀ\\x06ཱྀ\\x06ྒྷ\\x06ྜྷ\\x06ྡྷ\\x06ྦྷ\\x06ྫྷ\\x06ྐྵ\\x02\" +\n\t\"в\\x02д\\x02о\\x02с\\x02т\\x02ъ\\x02ѣ\\x02æ\\x01b\\x01d\\x01e\\x02ǝ\\x01g\\x01i\\x01k\" +\n\t\"\\x01m\\x01n\\x02ȣ\\x01p\\x01t\\x01u\\x02ɐ\\x02ɑ\\x02ə\\x02ɛ\\x02ɜ\\x02ŋ\\x02ɔ\\x02ɯ\" +\n\t\"\\x01v\\x02β\\x02γ\\x02δ\\x02φ\\x02χ\\x02ρ\\x02н\\x02ɒ\\x01c\\x02ɕ\\x02ð\\x01f\\x02ɟ\" +\n\t\"\\x02ɡ\\x02ɥ\\x02ɨ\\x02ɩ\\x02ɪ\\x02ʝ\\x02ɭ\\x02ʟ\\x02ɱ\\x02ɰ\\x02ɲ\\x02ɳ\\x02ɴ\\x02ɵ\" +\n\t\"\\x02ɸ\\x02ʂ\\x02ʃ\\x02ƫ\\x02ʉ\\x02ʊ\\x02ʋ\\x02ʌ\\x01z\\x02ʐ\\x02ʑ\\x02ʒ\\x02θ\\x02ss\" +\n\t\"\\x02ά\\x02έ\\x02ή\\x02ί\\x02ό\\x02ύ\\x02ώ\\x05ἀι\\x05ἁι\\x05ἂι\\x05ἃι\\x05ἄι\\x05ἅι\" +\n\t\"\\x05ἆι\\x05ἇι\\x05ἠι\\x05ἡι\\x05ἢι\\x05ἣι\\x05ἤι\\x05ἥι\\x05ἦι\\x05ἧι\\x05ὠι\\x05ὡι\" +\n\t\"\\x05ὢι\\x05ὣι\\x05ὤι\\x05ὥι\\x05ὦι\\x05ὧι\\x05ὰι\\x04αι\\x04άι\\x05ᾶι\\x02ι\\x05 ̈͂\" +\n\t\"\\x05ὴι\\x04ηι\\x04ήι\\x05ῆι\\x05 ̓̀\\x05 ̓́\\x05 ̓͂\\x02ΐ\\x05 ̔̀\\x05 ̔́\\x05 ̔͂\" +\n\t\"\\x02ΰ\\x05 ̈̀\\x01`\\x05ὼι\\x04ωι\\x04ώι\\x05ῶι\\x06′′\\x09′′′\\x06‵‵\\x09‵‵‵\\x02!\" +\n\t\"!\\x02??\\x02?!\\x02!?\\x0c′′′′\\x010\\x014\\x015\\x016\\x017\\x018\\x019\\x01+\\x01=\" +\n\t\"\\x01(\\x01)\\x02rs\\x02ħ\\x02no\\x01q\\x02sm\\x02tm\\x02ω\\x02å\\x02א\\x02ב\\x02ג\" +\n\t\"\\x02ד\\x02π\\x051⁄7\\x051⁄9\\x061⁄10\\x051⁄3\\x052⁄3\\x051⁄5\\x052⁄5\\x053⁄5\\x054\" +\n\t\"⁄5\\x051⁄6\\x055⁄6\\x051⁄8\\x053⁄8\\x055⁄8\\x057⁄8\\x041⁄\\x02ii\\x02iv\\x02vi\" +\n\t\"\\x04viii\\x02ix\\x02xi\\x050⁄3\\x06∫∫\\x09∫∫∫\\x06∮∮\\x09∮∮∮\\x0210\\x0211\\x0212\" +\n\t\"\\x0213\\x0214\\x0215\\x0216\\x0217\\x0218\\x0219\\x0220\\x04(10)\\x04(11)\\x04(12)\" +\n\t\"\\x04(13)\\x04(14)\\x04(15)\\x04(16)\\x04(17)\\x04(18)\\x04(19)\\x04(20)\\x0c∫∫∫∫\" +\n\t\"\\x02==\\x05⫝̸\\x02ɫ\\x02ɽ\\x02ȿ\\x02ɀ\\x01.\\x04 ゙\\x04 ゚\\x06より\\x06コト\\x05(ᄀ)\\x05\" +\n\t\"(ᄂ)\\x05(ᄃ)\\x05(ᄅ)\\x05(ᄆ)\\x05(ᄇ)\\x05(ᄉ)\\x05(ᄋ)\\x05(ᄌ)\\x05(ᄎ)\\x05(ᄏ)\\x05(ᄐ\" +\n\t\")\\x05(ᄑ)\\x05(ᄒ)\\x05(가)\\x05(나)\\x05(다)\\x05(라)\\x05(마)\\x05(바)\\x05(사)\\x05(아)\" +\n\t\"\\x05(자)\\x05(차)\\x05(카)\\x05(타)\\x05(파)\\x05(하)\\x05(주)\\x08(오전)\\x08(오후)\\x05(一)\" +\n\t\"\\x05(二)\\x05(三)\\x05(四)\\x05(五)\\x05(六)\\x05(七)\\x05(八)\\x05(九)\\x05(十)\\x05(月)\" +\n\t\"\\x05(火)\\x05(水)\\x05(木)\\x05(金)\\x05(土)\\x05(日)\\x05(株)\\x05(有)\\x05(社)\\x05(名)\" +\n\t\"\\x05(特)\\x05(財)\\x05(祝)\\x05(労)\\x05(代)\\x05(呼)\\x05(学)\\x05(監)\\x05(企)\\x05(資)\" +\n\t\"\\x05(協)\\x05(祭)\\x05(休)\\x05(自)\\x05(至)\\x0221\\x0222\\x0223\\x0224\\x0225\\x0226\" +\n\t\"\\x0227\\x0228\\x0229\\x0230\\x0231\\x0232\\x0233\\x0234\\x0235\\x06참고\\x06주의\\x0236\" +\n\t\"\\x0237\\x0238\\x0239\\x0240\\x0241\\x0242\\x0243\\x0244\\x0245\\x0246\\x0247\\x0248\" +\n\t\"\\x0249\\x0250\\x041月\\x042月\\x043月\\x044月\\x045月\\x046月\\x047月\\x048月\\x049月\\x0510\" +\n\t\"月\\x0511月\\x0512月\\x02hg\\x02ev\\x0cアパート\\x0cアルファ\\x0cアンペア\\x09アール\\x0cイニング\\x09\" +\n\t\"インチ\\x09ウォン\\x0fエスクード\\x0cエーカー\\x09オンス\\x09オーム\\x09カイリ\\x0cカラット\\x0cカロリー\\x09ガロ\" +\n\t\"ン\\x09ガンマ\\x06ギガ\\x09ギニー\\x0cキュリー\\x0cギルダー\\x06キロ\\x0fキログラム\\x12キロメートル\\x0fキロワッ\" +\n\t\"ト\\x09グラム\\x0fグラムトン\\x0fクルゼイロ\\x0cクローネ\\x09ケース\\x09コルナ\\x09コーポ\\x0cサイクル\\x0fサンチ\" +\n\t\"ーム\\x0cシリング\\x09センチ\\x09セント\\x09ダース\\x06デシ\\x06ドル\\x06トン\\x06ナノ\\x09ノット\\x09ハイツ\" +\n\t\"\\x0fパーセント\\x09パーツ\\x0cバーレル\\x0fピアストル\\x09ピクル\\x06ピコ\\x06ビル\\x0fファラッド\\x0cフィート\" +\n\t\"\\x0fブッシェル\\x09フラン\\x0fヘクタール\\x06ペソ\\x09ペニヒ\\x09ヘルツ\\x09ペンス\\x09ページ\\x09ベータ\\x0cポイ\" +\n\t\"ント\\x09ボルト\\x06ホン\\x09ポンド\\x09ホール\\x09ホーン\\x0cマイクロ\\x09マイル\\x09マッハ\\x09マルク\\x0fマ\" +\n\t\"ンション\\x0cミクロン\\x06ミリ\\x0fミリバール\\x06メガ\\x0cメガトン\\x0cメートル\\x09ヤード\\x09ヤール\\x09ユアン\" +\n\t\"\\x0cリットル\\x06リラ\\x09ルピー\\x0cルーブル\\x06レム\\x0fレントゲン\\x09ワット\\x040点\\x041点\\x042点\" +\n\t\"\\x043点\\x044点\\x045点\\x046点\\x047点\\x048点\\x049点\\x0510点\\x0511点\\x0512点\\x0513点\" +\n\t\"\\x0514点\\x0515点\\x0516点\\x0517点\\x0518点\\x0519点\\x0520点\\x0521点\\x0522点\\x0523点\" +\n\t\"\\x0524点\\x02da\\x02au\\x02ov\\x02pc\\x02dm\\x02iu\\x06平成\\x06昭和\\x06大正\\x06明治\\x0c株\" +\n\t\"式会社\\x02pa\\x02na\\x02ma\\x02ka\\x02kb\\x02mb\\x02gb\\x04kcal\\x02pf\\x02nf\\x02m\" +\n\t\"g\\x02kg\\x02hz\\x02ml\\x02dl\\x02kl\\x02fm\\x02nm\\x02mm\\x02cm\\x02km\\x02m2\\x02m\" +\n\t\"3\\x05m∕s\\x06m∕s2\\x07rad∕s\\x08rad∕s2\\x02ps\\x02ns\\x02ms\\x02pv\\x02nv\\x02mv\" +\n\t\"\\x02kv\\x02pw\\x02nw\\x02mw\\x02kw\\x02bq\\x02cc\\x02cd\\x06c∕kg\\x02db\\x02gy\\x02\" +\n\t\"ha\\x02hp\\x02in\\x02kk\\x02kt\\x02lm\\x02ln\\x02lx\\x02ph\\x02pr\\x02sr\\x02sv\\x02\" +\n\t\"wb\\x05v∕m\\x05a∕m\\x041日\\x042日\\x043日\\x044日\\x045日\\x046日\\x047日\\x048日\\x049日\" +\n\t\"\\x0510日\\x0511日\\x0512日\\x0513日\\x0514日\\x0515日\\x0516日\\x0517日\\x0518日\\x0519日\" +\n\t\"\\x0520日\\x0521日\\x0522日\\x0523日\\x0524日\\x0525日\\x0526日\\x0527日\\x0528日\\x0529日\" +\n\t\"\\x0530日\\x0531日\\x02ь\\x02ɦ\\x02ɬ\\x02ʞ\\x02ʇ\\x02œ\\x04𤋮\\x04𢡊\\x04𢡄\\x04𣏕\\x04𥉉\" +\n\t\"\\x04𥳐\\x04𧻓\\x02ff\\x02fi\\x02fl\\x02st\\x04մն\\x04մե\\x04մի\\x04վն\\x04մխ\\x04יִ\" +\n\t\"\\x04ײַ\\x02ע\\x02ה\\x02כ\\x02ל\\x02ם\\x02ר\\x02ת\\x04שׁ\\x04שׂ\\x06שּׁ\\x06שּׂ\\x04א\" +\n\t\"ַ\\x04אָ\\x04אּ\\x04בּ\\x04גּ\\x04דּ\\x04הּ\\x04וּ\\x04זּ\\x04טּ\\x04יּ\\x04ךּ\\x04\" +\n\t\"כּ\\x04לּ\\x04מּ\\x04נּ\\x04סּ\\x04ףּ\\x04פּ\\x04צּ\\x04קּ\\x04רּ\\x04שּ\\x04תּ\" +\n\t\"\\x04וֹ\\x04בֿ\\x04כֿ\\x04פֿ\\x04אל\\x02ٱ\\x02ٻ\\x02پ\\x02ڀ\\x02ٺ\\x02ٿ\\x02ٹ\\x02ڤ\" +\n\t\"\\x02ڦ\\x02ڄ\\x02ڃ\\x02چ\\x02ڇ\\x02ڍ\\x02ڌ\\x02ڎ\\x02ڈ\\x02ژ\\x02ڑ\\x02ک\\x02گ\\x02ڳ\" +\n\t\"\\x02ڱ\\x02ں\\x02ڻ\\x02ۀ\\x02ہ\\x02ھ\\x02ے\\x02ۓ\\x02ڭ\\x02ۇ\\x02ۆ\\x02ۈ\\x02ۋ\\x02ۅ\" +\n\t\"\\x02ۉ\\x02ې\\x02ى\\x04ئا\\x04ئە\\x04ئو\\x04ئۇ\\x04ئۆ\\x04ئۈ\\x04ئې\\x04ئى\\x02ی\\x04\" +\n\t\"ئج\\x04ئح\\x04ئم\\x04ئي\\x04بج\\x04بح\\x04بخ\\x04بم\\x04بى\\x04بي\\x04تج\\x04تح\" +\n\t\"\\x04تخ\\x04تم\\x04تى\\x04تي\\x04ثج\\x04ثم\\x04ثى\\x04ثي\\x04جح\\x04جم\\x04حج\\x04حم\" +\n\t\"\\x04خج\\x04خح\\x04خم\\x04سج\\x04سح\\x04سخ\\x04سم\\x04صح\\x04صم\\x04ضج\\x04ضح\\x04ضخ\" +\n\t\"\\x04ضم\\x04طح\\x04طم\\x04ظم\\x04عج\\x04عم\\x04غج\\x04غم\\x04فج\\x04فح\\x04فخ\\x04فم\" +\n\t\"\\x04فى\\x04في\\x04قح\\x04قم\\x04قى\\x04قي\\x04كا\\x04كج\\x04كح\\x04كخ\\x04كل\\x04كم\" +\n\t\"\\x04كى\\x04كي\\x04لج\\x04لح\\x04لخ\\x04لم\\x04لى\\x04لي\\x04مج\\x04مح\\x04مخ\\x04مم\" +\n\t\"\\x04مى\\x04مي\\x04نج\\x04نح\\x04نخ\\x04نم\\x04نى\\x04ني\\x04هج\\x04هم\\x04هى\\x04هي\" +\n\t\"\\x04يج\\x04يح\\x04يخ\\x04يم\\x04يى\\x04يي\\x04ذٰ\\x04رٰ\\x04ىٰ\\x05 ٌّ\\x05 ٍّ\\x05\" +\n\t\" َّ\\x05 ُّ\\x05 ِّ\\x05 ّٰ\\x04ئر\\x04ئز\\x04ئن\\x04بر\\x04بز\\x04بن\\x04تر\\x04تز\" +\n\t\"\\x04تن\\x04ثر\\x04ثز\\x04ثن\\x04ما\\x04نر\\x04نز\\x04نن\\x04ير\\x04يز\\x04ين\\x04ئخ\" +\n\t\"\\x04ئه\\x04به\\x04ته\\x04صخ\\x04له\\x04نه\\x04هٰ\\x04يه\\x04ثه\\x04سه\\x04شم\\x04شه\" +\n\t\"\\x06ـَّ\\x06ـُّ\\x06ـِّ\\x04طى\\x04طي\\x04عى\\x04عي\\x04غى\\x04غي\\x04سى\\x04سي\" +\n\t\"\\x04شى\\x04شي\\x04حى\\x04حي\\x04جى\\x04جي\\x04خى\\x04خي\\x04صى\\x04صي\\x04ضى\\x04ضي\" +\n\t\"\\x04شج\\x04شح\\x04شخ\\x04شر\\x04سر\\x04صر\\x04ضر\\x04اً\\x06تجم\\x06تحج\\x06تحم\" +\n\t\"\\x06تخم\\x06تمج\\x06تمح\\x06تمخ\\x06جمح\\x06حمي\\x06حمى\\x06سحج\\x06سجح\\x06سجى\" +\n\t\"\\x06سمح\\x06سمج\\x06سمم\\x06صحح\\x06صمم\\x06شحم\\x06شجي\\x06شمخ\\x06شمم\\x06ضحى\" +\n\t\"\\x06ضخم\\x06طمح\\x06طمم\\x06طمي\\x06عجم\\x06عمم\\x06عمى\\x06غمم\\x06غمي\\x06غمى\" +\n\t\"\\x06فخم\\x06قمح\\x06قمم\\x06لحم\\x06لحي\\x06لحى\\x06لجج\\x06لخم\\x06لمح\\x06محج\" +\n\t\"\\x06محم\\x06محي\\x06مجح\\x06مجم\\x06مخج\\x06مخم\\x06مجخ\\x06همج\\x06همم\\x06نحم\" +\n\t\"\\x06نحى\\x06نجم\\x06نجى\\x06نمي\\x06نمى\\x06يمم\\x06بخي\\x06تجي\\x06تجى\\x06تخي\" +\n\t\"\\x06تخى\\x06تمي\\x06تمى\\x06جمي\\x06جحى\\x06جمى\\x06سخى\\x06صحي\\x06شحي\\x06ضحي\" +\n\t\"\\x06لجي\\x06لمي\\x06يحي\\x06يجي\\x06يمي\\x06ممي\\x06قمي\\x06نحي\\x06عمي\\x06كمي\" +\n\t\"\\x06نجح\\x06مخي\\x06لجم\\x06كمم\\x06جحي\\x06حجي\\x06مجي\\x06فمي\\x06بحي\\x06سخي\" +\n\t\"\\x06نجي\\x06صلے\\x06قلے\\x08الله\\x08اكبر\\x08محمد\\x08صلعم\\x08رسول\\x08عليه\" +\n\t\"\\x08وسلم\\x06صلى!صلى الله عليه وسلم\\x0fجل جلاله\\x08ریال\\x01,\\x01:\\x01!\" +\n\t\"\\x01?\\x01_\\x01{\\x01}\\x01[\\x01]\\x01#\\x01&\\x01*\\x01-\\x01<\\x01>\\x01\\\\\\x01$\" +\n\t\"\\x01%\\x01@\\x04ـً\\x04ـَ\\x04ـُ\\x04ـِ\\x04ـّ\\x04ـْ\\x02ء\\x02آ\\x02أ\\x02ؤ\\x02إ\" +\n\t\"\\x02ئ\\x02ا\\x02ب\\x02ة\\x02ت\\x02ث\\x02ج\\x02ح\\x02خ\\x02د\\x02ذ\\x02ر\\x02ز\\x02س\" +\n\t\"\\x02ش\\x02ص\\x02ض\\x02ط\\x02ظ\\x02ع\\x02غ\\x02ف\\x02ق\\x02ك\\x02ل\\x02م\\x02ن\\x02ه\" +\n\t\"\\x02و\\x02ي\\x04لآ\\x04لأ\\x04لإ\\x04لا\\x01\\x22\\x01'\\x01/\\x01^\\x01|\\x01~\\x02¢\" +\n\t\"\\x02£\\x02¬\\x02¦\\x02¥\\x08𝅗𝅥\\x08𝅘𝅥\\x0c𝅘𝅥𝅮\\x0c𝅘𝅥𝅯\\x0c𝅘𝅥𝅰\\x0c𝅘𝅥𝅱\\x0c𝅘𝅥𝅲\\x08𝆹\" +\n\t\"𝅥\\x08𝆺𝅥\\x0c𝆹𝅥𝅮\\x0c𝆺𝅥𝅮\\x0c𝆹𝅥𝅯\\x0c𝆺𝅥𝅯\\x02ı\\x02ȷ\\x02α\\x02ε\\x02ζ\\x02η\\x02\" +\n\t\"κ\\x02λ\\x02μ\\x02ν\\x02ξ\\x02ο\\x02σ\\x02τ\\x02υ\\x02ψ\\x03∇\\x03∂\\x02ϝ\\x02ٮ\\x02ڡ\" +\n\t\"\\x02ٯ\\x020,\\x021,\\x022,\\x023,\\x024,\\x025,\\x026,\\x027,\\x028,\\x029,\\x03(a)\" +\n\t\"\\x03(b)\\x03(c)\\x03(d)\\x03(e)\\x03(f)\\x03(g)\\x03(h)\\x03(i)\\x03(j)\\x03(k)\" +\n\t\"\\x03(l)\\x03(m)\\x03(n)\\x03(o)\\x03(p)\\x03(q)\\x03(r)\\x03(s)\\x03(t)\\x03(u)\" +\n\t\"\\x03(v)\\x03(w)\\x03(x)\\x03(y)\\x03(z)\\x07〔s〕\\x02wz\\x02hv\\x02sd\\x03ppv\\x02w\" +\n\t\"c\\x02mc\\x02md\\x02dj\\x06ほか\\x06ココ\\x03サ\\x03手\\x03字\\x03双\\x03デ\\x03二\\x03多\\x03解\" +\n\t\"\\x03天\\x03交\\x03映\\x03無\\x03料\\x03前\\x03後\\x03再\\x03新\\x03初\\x03終\\x03生\\x03販\\x03声\" +\n\t\"\\x03吹\\x03演\\x03投\\x03捕\\x03一\\x03三\\x03遊\\x03左\\x03中\\x03右\\x03指\\x03走\\x03打\\x03禁\" +\n\t\"\\x03空\\x03合\\x03満\\x03有\\x03月\\x03申\\x03割\\x03営\\x03配\\x09〔本〕\\x09〔三〕\\x09〔二〕\\x09〔安\" +\n\t\"〕\\x09〔点〕\\x09〔打〕\\x09〔盗〕\\x09〔勝〕\\x09〔敗〕\\x03得\\x03可\\x03丽\\x03丸\\x03乁\\x03你\\x03\" +\n\t\"侮\\x03侻\\x03倂\\x03偺\\x03備\\x03僧\\x03像\\x03㒞\\x03免\\x03兔\\x03兤\\x03具\\x03㒹\\x03內\\x03\" +\n\t\"冗\\x03冤\\x03仌\\x03冬\\x03况\\x03凵\\x03刃\\x03㓟\\x03刻\\x03剆\\x03剷\\x03㔕\\x03勇\\x03勉\\x03\" +\n\t\"勤\\x03勺\\x03包\\x03匆\\x03北\\x03卉\\x03卑\\x03博\\x03即\\x03卽\\x03卿\\x03灰\\x03及\\x03叟\\x03\" +\n\t\"叫\\x03叱\\x03吆\\x03咞\\x03吸\\x03呈\\x03周\\x03咢\\x03哶\\x03唐\\x03啓\\x03啣\\x03善\\x03喙\\x03\" +\n\t\"喫\\x03喳\\x03嗂\\x03圖\\x03嘆\\x03圗\\x03噑\\x03噴\\x03切\\x03壮\\x03城\\x03埴\\x03堍\\x03型\\x03\" +\n\t\"堲\\x03報\\x03墬\\x03売\\x03壷\\x03夆\\x03夢\\x03奢\\x03姬\\x03娛\\x03娧\\x03姘\\x03婦\\x03㛮\\x03\" +\n\t\"嬈\\x03嬾\\x03寃\\x03寘\\x03寧\\x03寳\\x03寿\\x03将\\x03尢\\x03㞁\\x03屠\\x03屮\\x03峀\\x03岍\\x03\" +\n\t\"嵃\\x03嵮\\x03嵫\\x03嵼\\x03巡\\x03巢\\x03㠯\\x03巽\\x03帨\\x03帽\\x03幩\\x03㡢\\x03㡼\\x03庰\\x03\" +\n\t\"庳\\x03庶\\x03廊\\x03廾\\x03舁\\x03弢\\x03㣇\\x03形\\x03彫\\x03㣣\\x03徚\\x03忍\\x03志\\x03忹\\x03\" +\n\t\"悁\\x03㤺\\x03㤜\\x03悔\\x03惇\\x03慈\\x03慌\\x03慎\\x03慺\\x03憎\\x03憲\\x03憤\\x03憯\\x03懞\\x03\" +\n\t\"懲\\x03懶\\x03成\\x03戛\\x03扝\\x03抱\\x03拔\\x03捐\\x03挽\\x03拼\\x03捨\\x03掃\\x03揤\\x03搢\\x03\" +\n\t\"揅\\x03掩\\x03㨮\\x03摩\\x03摾\\x03撝\\x03摷\\x03㩬\\x03敏\\x03敬\\x03旣\\x03書\\x03晉\\x03㬙\\x03\" +\n\t\"暑\\x03㬈\\x03㫤\\x03冒\\x03冕\\x03最\\x03暜\\x03肭\\x03䏙\\x03朗\\x03望\\x03朡\\x03杞\\x03杓\\x03\" +\n\t\"㭉\\x03柺\\x03枅\\x03桒\\x03梅\\x03梎\\x03栟\\x03椔\\x03㮝\\x03楂\\x03榣\\x03槪\\x03檨\\x03櫛\\x03\" +\n\t\"㰘\\x03次\\x03歔\\x03㱎\\x03歲\\x03殟\\x03殺\\x03殻\\x03汎\\x03沿\\x03泍\\x03汧\\x03洖\\x03派\\x03\" +\n\t\"海\\x03流\\x03浩\\x03浸\\x03涅\\x03洴\\x03港\\x03湮\\x03㴳\\x03滋\\x03滇\\x03淹\\x03潮\\x03濆\\x03\" +\n\t\"瀹\\x03瀞\\x03瀛\\x03㶖\\x03灊\\x03災\\x03灷\\x03炭\\x03煅\\x03熜\\x03爨\\x03爵\\x03牐\\x03犀\\x03\" +\n\t\"犕\\x03獺\\x03王\\x03㺬\\x03玥\\x03㺸\\x03瑇\\x03瑜\\x03瑱\\x03璅\\x03瓊\\x03㼛\\x03甤\\x03甾\\x03\" +\n\t\"異\\x03瘐\\x03㿼\\x03䀈\\x03直\\x03眞\\x03真\\x03睊\\x03䀹\\x03瞋\\x03䁆\\x03䂖\\x03硎\\x03碌\\x03\" +\n\t\"磌\\x03䃣\\x03祖\\x03福\\x03秫\\x03䄯\\x03穀\\x03穊\\x03穏\\x03䈂\\x03篆\\x03築\\x03䈧\\x03糒\\x03\" +\n\t\"䊠\\x03糨\\x03糣\\x03紀\\x03絣\\x03䌁\\x03緇\\x03縂\\x03繅\\x03䌴\\x03䍙\\x03罺\\x03羕\\x03翺\\x03\" +\n\t\"者\\x03聠\\x03聰\\x03䏕\\x03育\\x03脃\\x03䐋\\x03脾\\x03媵\\x03舄\\x03辞\\x03䑫\\x03芑\\x03芋\\x03\" +\n\t\"芝\\x03劳\\x03花\\x03芳\\x03芽\\x03苦\\x03若\\x03茝\\x03荣\\x03莭\\x03茣\\x03莽\\x03菧\\x03著\\x03\" +\n\t\"荓\\x03菊\\x03菌\\x03菜\\x03䔫\\x03蓱\\x03蓳\\x03蔖\\x03蕤\\x03䕝\\x03䕡\\x03䕫\\x03虐\\x03虜\\x03\" +\n\t\"虧\\x03虩\\x03蚩\\x03蚈\\x03蜎\\x03蛢\\x03蝹\\x03蜨\\x03蝫\\x03螆\\x03蟡\\x03蠁\\x03䗹\\x03衠\\x03\" +\n\t\"衣\\x03裗\\x03裞\\x03䘵\\x03裺\\x03㒻\\x03䚾\\x03䛇\\x03誠\\x03諭\\x03變\\x03豕\\x03貫\\x03賁\\x03\" +\n\t\"贛\\x03起\\x03跋\\x03趼\\x03跰\\x03軔\\x03輸\\x03邔\\x03郱\\x03鄑\\x03鄛\\x03鈸\\x03鋗\\x03鋘\\x03\" +\n\t\"鉼\\x03鏹\\x03鐕\\x03開\\x03䦕\\x03閷\\x03䧦\\x03雃\\x03嶲\\x03霣\\x03䩮\\x03䩶\\x03韠\\x03䪲\\x03\" +\n\t\"頋\\x03頩\\x03飢\\x03䬳\\x03餩\\x03馧\\x03駂\\x03駾\\x03䯎\\x03鬒\\x03鱀\\x03鳽\\x03䳎\\x03䳭\\x03\" +\n\t\"鵧\\x03䳸\\x03麻\\x03䵖\\x03黹\\x03黾\\x03鼅\\x03鼏\\x03鼖\\x03鼻\"\n\nvar xorData string = \"\" + // Size: 4855 bytes\n\t\"\\x02\\x0c\\x09\\x02\\xb0\\xec\\x02\\xad\\xd8\\x02\\xad\\xd9\\x02\\x06\\x07\\x02\\x0f\\x12\" +\n\t\"\\x02\\x0f\\x1f\\x02\\x0f\\x1d\\x02\\x01\\x13\\x02\\x0f\\x16\\x02\\x0f\\x0b\\x02\\x0f3\" +\n\t\"\\x02\\x0f7\\x02\\x0f?\\x02\\x0f/\\x02\\x0f*\\x02\\x0c&\\x02\\x0c*\\x02\\x0c;\\x02\\x0c9\" +\n\t\"\\x02\\x0c%\\x02\\xab\\xed\\x02\\xab\\xe2\\x02\\xab\\xe3\\x02\\xa9\\xe0\\x02\\xa9\\xe1\" +\n\t\"\\x02\\xa9\\xe6\\x02\\xa3\\xcb\\x02\\xa3\\xc8\\x02\\xa3\\xc9\\x02\\x01#\\x02\\x01\\x08\" +\n\t\"\\x02\\x0e>\\x02\\x0e'\\x02\\x0f\\x03\\x02\\x03\\x0d\\x02\\x03\\x09\\x02\\x03\\x17\\x02\" +\n\t\"\\x03\\x0e\\x02\\x02\\x03\\x02\\x011\\x02\\x01\\x00\\x02\\x01\\x10\\x02\\x03<\\x02\\x07\" +\n\t\"\\x0d\\x02\\x02\\x0c\\x02\\x0c0\\x02\\x01\\x03\\x02\\x01\\x01\\x02\\x01 \\x02\\x01\\x22\" +\n\t\"\\x02\\x01)\\x02\\x01\\x0a\\x02\\x01\\x0c\\x02\\x02\\x06\\x02\\x02\\x02\\x02\\x03\\x10\" +\n\t\"\\x03\\x037 \\x03\\x0b+\\x03\\x02\\x01\\x04\\x02\\x01\\x02\\x02\\x019\\x02\\x03\\x1c\\x02\" +\n\t\"\\x02$\\x03\\x80p$\\x02\\x03:\\x02\\x03\\x0a\\x03\\xc1r.\\x03\\xc1r,\\x03\\xc1r\\x02\" +\n\t\"\\x02\\x02:\\x02\\x02>\\x02\\x02,\\x02\\x02\\x10\\x02\\x02\\x00\\x03\\xc1s<\\x03\\xc1s*\" +\n\t\"\\x03\\xc2L$\\x03\\xc2L;\\x02\\x09)\\x02\\x0a\\x19\\x03\\x83\\xab\\xe3\\x03\\x83\\xab\" +\n\t\"\\xf2\\x03 4\\xe0\\x03\\x81\\xab\\xea\\x03\\x81\\xab\\xf3\\x03 4\\xef\\x03\\x96\\xe1\\xcd\" +\n\t\"\\x03\\x84\\xe5\\xc3\\x02\\x0d\\x11\\x03\\x8b\\xec\\xcb\\x03\\x94\\xec\\xcf\\x03\\x9a\\xec\" +\n\t\"\\xc2\\x03\\x8b\\xec\\xdb\\x03\\x94\\xec\\xdf\\x03\\x9a\\xec\\xd2\\x03\\x01\\x0c!\\x03\" +\n\t\"\\x01\\x0c#\\x03ʠ\\x9d\\x03ʣ\\x9c\\x03ʢ\\x9f\\x03ʥ\\x9e\\x03ʤ\\x91\\x03ʧ\\x90\\x03ʦ\\x93\" +\n\t\"\\x03ʩ\\x92\\x03ʨ\\x95\\x03\\xca\\xf3\\xb5\\x03\\xca\\xf0\\xb4\\x03\\xca\\xf1\\xb7\\x03\" +\n\t\"\\xca\\xf6\\xb6\\x03\\xca\\xf7\\x89\\x03\\xca\\xf4\\x88\\x03\\xca\\xf5\\x8b\\x03\\xca\\xfa\" +\n\t\"\\x8a\\x03\\xca\\xfb\\x8d\\x03\\xca\\xf8\\x8c\\x03\\xca\\xf9\\x8f\\x03\\xca\\xfe\\x8e\\x03\" +\n\t\"\\xca\\xff\\x81\\x03\\xca\\xfc\\x80\\x03\\xca\\xfd\\x83\\x03\\xca\\xe2\\x82\\x03\\xca\\xe3\" +\n\t\"\\x85\\x03\\xca\\xe0\\x84\\x03\\xca\\xe1\\x87\\x03\\xca\\xe6\\x86\\x03\\xca\\xe7\\x99\\x03\" +\n\t\"\\xca\\xe4\\x98\\x03\\xca\\xe5\\x9b\\x03\\xca\\xea\\x9a\\x03\\xca\\xeb\\x9d\\x03\\xca\\xe8\" +\n\t\"\\x9c\\x03ؓ\\x89\\x03ߔ\\x8b\\x02\\x010\\x03\\x03\\x04\\x1e\\x03\\x04\\x15\\x12\\x03\\x0b\" +\n\t\"\\x05,\\x03\\x06\\x04\\x00\\x03\\x06\\x04)\\x03\\x06\\x044\\x03\\x06\\x04<\\x03\\x06\\x05\" +\n\t\"\\x1d\\x03\\x06\\x06\\x00\\x03\\x06\\x06\\x0a\\x03\\x06\\x06'\\x03\\x06\\x062\\x03\\x0786\" +\n\t\"\\x03\\x079/\\x03\\x079 \\x03\\x07:\\x0e\\x03\\x07:\\x1b\\x03\\x07:%\\x03\\x07;/\\x03\" +\n\t\"\\x07;%\\x03\\x074\\x11\\x03\\x076\\x09\\x03\\x077*\\x03\\x070\\x01\\x03\\x070\\x0f\\x03\" +\n\t\"\\x070.\\x03\\x071\\x16\\x03\\x071\\x04\\x03\\x0710\\x03\\x072\\x18\\x03\\x072-\\x03\" +\n\t\"\\x073\\x14\\x03\\x073>\\x03\\x07'\\x09\\x03\\x07 \\x00\\x03\\x07\\x1f\\x0b\\x03\\x07\" +\n\t\"\\x18#\\x03\\x07\\x18(\\x03\\x07\\x186\\x03\\x07\\x18\\x03\\x03\\x07\\x19\\x16\\x03\\x07\" +\n\t\"\\x116\\x03\\x07\\x12'\\x03\\x07\\x13\\x10\\x03\\x07\\x0c&\\x03\\x07\\x0c\\x08\\x03\\x07\" +\n\t\"\\x0c\\x13\\x03\\x07\\x0d\\x02\\x03\\x07\\x0d\\x1c\\x03\\x07\\x0b5\\x03\\x07\\x0b\\x0a\" +\n\t\"\\x03\\x07\\x0b\\x01\\x03\\x07\\x0b\\x0f\\x03\\x07\\x05\\x00\\x03\\x07\\x05\\x09\\x03\\x07\" +\n\t\"\\x05\\x0b\\x03\\x07\\x07\\x01\\x03\\x07\\x07\\x08\\x03\\x07\\x00<\\x03\\x07\\x00+\\x03\" +\n\t\"\\x07\\x01)\\x03\\x07\\x01\\x1b\\x03\\x07\\x01\\x08\\x03\\x07\\x03?\\x03\\x0445\\x03\\x04\" +\n\t\"4\\x08\\x03\\x0454\\x03\\x04)/\\x03\\x04)5\\x03\\x04+\\x05\\x03\\x04+\\x14\\x03\\x04+ \" +\n\t\"\\x03\\x04+<\\x03\\x04*&\\x03\\x04*\\x22\\x03\\x04&8\\x03\\x04!\\x01\\x03\\x04!\\x22\" +\n\t\"\\x03\\x04\\x11+\\x03\\x04\\x10.\\x03\\x04\\x104\\x03\\x04\\x13=\\x03\\x04\\x12\\x04\\x03\" +\n\t\"\\x04\\x12\\x0a\\x03\\x04\\x0d\\x1d\\x03\\x04\\x0d\\x07\\x03\\x04\\x0d \\x03\\x05<>\\x03\" +\n\t\"\\x055<\\x03\\x055!\\x03\\x055#\\x03\\x055&\\x03\\x054\\x1d\\x03\\x054\\x02\\x03\\x054\" +\n\t\"\\x07\\x03\\x0571\\x03\\x053\\x1a\\x03\\x053\\x16\\x03\\x05.<\\x03\\x05.\\x07\\x03\\x05)\" +\n\t\":\\x03\\x05)<\\x03\\x05)\\x0c\\x03\\x05)\\x15\\x03\\x05+-\\x03\\x05+5\\x03\\x05$\\x1e\" +\n\t\"\\x03\\x05$\\x14\\x03\\x05'\\x04\\x03\\x05'\\x14\\x03\\x05&\\x02\\x03\\x05\\x226\\x03\" +\n\t\"\\x05\\x22\\x0c\\x03\\x05\\x22\\x1c\\x03\\x05\\x19\\x0a\\x03\\x05\\x1b\\x09\\x03\\x05\\x1b\" +\n\t\"\\x0c\\x03\\x05\\x14\\x07\\x03\\x05\\x16?\\x03\\x05\\x16\\x0c\\x03\\x05\\x0c\\x05\\x03\" +\n\t\"\\x05\\x0e\\x0f\\x03\\x05\\x01\\x0e\\x03\\x05\\x00(\\x03\\x05\\x030\\x03\\x05\\x03\\x06\" +\n\t\"\\x03\\x0a==\\x03\\x0a=1\\x03\\x0a=,\\x03\\x0a=\\x0c\\x03\\x0a??\\x03\\x0a<\\x08\\x03\" +\n\t\"\\x0a9!\\x03\\x0a9)\\x03\\x0a97\\x03\\x0a99\\x03\\x0a6\\x0a\\x03\\x0a6\\x1c\\x03\\x0a6\" +\n\t\"\\x17\\x03\\x0a7'\\x03\\x0a78\\x03\\x0a73\\x03\\x0a'\\x01\\x03\\x0a'&\\x03\\x0a\\x1f\" +\n\t\"\\x0e\\x03\\x0a\\x1f\\x03\\x03\\x0a\\x1f3\\x03\\x0a\\x1b/\\x03\\x0a\\x18\\x19\\x03\\x0a\" +\n\t\"\\x19\\x01\\x03\\x0a\\x16\\x14\\x03\\x0a\\x0e\\x22\\x03\\x0a\\x0f\\x10\\x03\\x0a\\x0f\\x02\" +\n\t\"\\x03\\x0a\\x0f \\x03\\x0a\\x0c\\x04\\x03\\x0a\\x0b>\\x03\\x0a\\x0b+\\x03\\x0a\\x08/\\x03\" +\n\t\"\\x0a\\x046\\x03\\x0a\\x05\\x14\\x03\\x0a\\x00\\x04\\x03\\x0a\\x00\\x10\\x03\\x0a\\x00\" +\n\t\"\\x14\\x03\\x0b<3\\x03\\x0b;*\\x03\\x0b9\\x22\\x03\\x0b9)\\x03\\x0b97\\x03\\x0b+\\x10\" +\n\t\"\\x03\\x0b((\\x03\\x0b&5\\x03\\x0b$\\x1c\\x03\\x0b$\\x12\\x03\\x0b%\\x04\\x03\\x0b#<\" +\n\t\"\\x03\\x0b#0\\x03\\x0b#\\x0d\\x03\\x0b#\\x19\\x03\\x0b!:\\x03\\x0b!\\x1f\\x03\\x0b!\\x00\" +\n\t\"\\x03\\x0b\\x1e5\\x03\\x0b\\x1c\\x1d\\x03\\x0b\\x1d-\\x03\\x0b\\x1d(\\x03\\x0b\\x18.\\x03\" +\n\t\"\\x0b\\x18 \\x03\\x0b\\x18\\x16\\x03\\x0b\\x14\\x13\\x03\\x0b\\x15$\\x03\\x0b\\x15\\x22\" +\n\t\"\\x03\\x0b\\x12\\x1b\\x03\\x0b\\x12\\x10\\x03\\x0b\\x132\\x03\\x0b\\x13=\\x03\\x0b\\x12\" +\n\t\"\\x18\\x03\\x0b\\x0c&\\x03\\x0b\\x061\\x03\\x0b\\x06:\\x03\\x0b\\x05#\\x03\\x0b\\x05<\" +\n\t\"\\x03\\x0b\\x04\\x0b\\x03\\x0b\\x04\\x04\\x03\\x0b\\x04\\x1b\\x03\\x0b\\x042\\x03\\x0b\" +\n\t\"\\x041\\x03\\x0b\\x03\\x03\\x03\\x0b\\x03\\x1d\\x03\\x0b\\x03/\\x03\\x0b\\x03+\\x03\\x0b\" +\n\t\"\\x02\\x1b\\x03\\x0b\\x02\\x00\\x03\\x0b\\x01\\x1e\\x03\\x0b\\x01\\x08\\x03\\x0b\\x015\" +\n\t\"\\x03\\x06\\x0d9\\x03\\x06\\x0d=\\x03\\x06\\x0d?\\x03\\x02\\x001\\x03\\x02\\x003\\x03\" +\n\t\"\\x02\\x02\\x19\\x03\\x02\\x006\\x03\\x02\\x02\\x1b\\x03\\x02\\x004\\x03\\x02\\x00<\\x03\" +\n\t\"\\x02\\x02\\x0a\\x03\\x02\\x02\\x0e\\x03\\x02\\x01\\x1a\\x03\\x02\\x01\\x07\\x03\\x02\\x01\" +\n\t\"\\x05\\x03\\x02\\x01\\x0b\\x03\\x02\\x01%\\x03\\x02\\x01\\x0c\\x03\\x02\\x01\\x04\\x03\" +\n\t\"\\x02\\x01\\x1c\\x03\\x02\\x00.\\x03\\x02\\x002\\x03\\x02\\x00>\\x03\\x02\\x00\\x12\\x03\" +\n\t\"\\x02\\x00\\x16\\x03\\x02\\x011\\x03\\x02\\x013\\x03\\x02\\x02 \\x03\\x02\\x02%\\x03\\x02\" +\n\t\"\\x02$\\x03\\x02\\x028\\x03\\x02\\x02;\\x03\\x02\\x024\\x03\\x02\\x012\\x03\\x02\\x022\" +\n\t\"\\x03\\x02\\x02/\\x03\\x02\\x01,\\x03\\x02\\x01\\x13\\x03\\x02\\x01\\x16\\x03\\x02\\x01\" +\n\t\"\\x11\\x03\\x02\\x01\\x1e\\x03\\x02\\x01\\x15\\x03\\x02\\x01\\x17\\x03\\x02\\x01\\x0f\\x03\" +\n\t\"\\x02\\x01\\x08\\x03\\x02\\x00?\\x03\\x02\\x03\\x07\\x03\\x02\\x03\\x0d\\x03\\x02\\x03\" +\n\t\"\\x13\\x03\\x02\\x03\\x1d\\x03\\x02\\x03\\x1f\\x03\\x02\\x00\\x03\\x03\\x02\\x00\\x0d\\x03\" +\n\t\"\\x02\\x00\\x01\\x03\\x02\\x00\\x1b\\x03\\x02\\x00\\x19\\x03\\x02\\x00\\x18\\x03\\x02\\x00\" +\n\t\"\\x13\\x03\\x02\\x00/\\x03\\x07>\\x12\\x03\\x07<\\x1f\\x03\\x07>\\x1d\\x03\\x06\\x1d\\x0e\" +\n\t\"\\x03\\x07>\\x1c\\x03\\x07>:\\x03\\x07>\\x13\\x03\\x04\\x12+\\x03\\x07?\\x03\\x03\\x07>\" +\n\t\"\\x02\\x03\\x06\\x224\\x03\\x06\\x1a.\\x03\\x07<%\\x03\\x06\\x1c\\x0b\\x03\\x0609\\x03\" +\n\t\"\\x05\\x1f\\x01\\x03\\x04'\\x08\\x03\\x93\\xfd\\xf5\\x03\\x02\\x0d \\x03\\x02\\x0d#\\x03\" +\n\t\"\\x02\\x0d!\\x03\\x02\\x0d&\\x03\\x02\\x0d\\x22\\x03\\x02\\x0d/\\x03\\x02\\x0d,\\x03\\x02\" +\n\t\"\\x0d$\\x03\\x02\\x0d'\\x03\\x02\\x0d%\\x03\\x02\\x0d;\\x03\\x02\\x0d=\\x03\\x02\\x0d?\" +\n\t\"\\x03\\x099.\\x03\\x08\\x0b7\\x03\\x08\\x02\\x14\\x03\\x08\\x14\\x0d\\x03\\x08.:\\x03\" +\n\t\"\\x089'\\x03\\x0f\\x0b\\x18\\x03\\x0f\\x1c1\\x03\\x0f\\x17&\\x03\\x0f9\\x1f\\x03\\x0f0\" +\n\t\"\\x0c\\x03\\x0e\\x0a9\\x03\\x0e\\x056\\x03\\x0e\\x1c#\\x03\\x0f\\x13\\x0e\\x03\\x072\\x00\" +\n\t\"\\x03\\x070\\x0d\\x03\\x072\\x0b\\x03\\x06\\x11\\x18\\x03\\x070\\x10\\x03\\x06\\x0f(\\x03\" +\n\t\"\\x072\\x05\\x03\\x06\\x0f,\\x03\\x073\\x15\\x03\\x06\\x07\\x08\\x03\\x05\\x16\\x02\\x03\" +\n\t\"\\x04\\x0b \\x03\\x05:8\\x03\\x05\\x16%\\x03\\x0a\\x0d\\x1f\\x03\\x06\\x16\\x10\\x03\\x05\" +\n\t\"\\x1d5\\x03\\x05*;\\x03\\x05\\x16\\x1b\\x03\\x04.-\\x03\\x06\\x1a\\x19\\x03\\x04\\x03,\" +\n\t\"\\x03\\x0b87\\x03\\x04/\\x0a\\x03\\x06\\x00,\\x03\\x04-\\x01\\x03\\x04\\x1e-\\x03\\x06/(\" +\n\t\"\\x03\\x0a\\x0b5\\x03\\x06\\x0e7\\x03\\x06\\x07.\\x03\\x0597\\x03\\x0a*%\\x03\\x0760\" +\n\t\"\\x03\\x06\\x0c;\\x03\\x05'\\x00\\x03\\x072.\\x03\\x072\\x08\\x03\\x06=\\x01\\x03\\x06\" +\n\t\"\\x05\\x1b\\x03\\x06\\x06\\x12\\x03\\x06$=\\x03\\x06'\\x0d\\x03\\x04\\x11\\x0f\\x03\\x076\" +\n\t\",\\x03\\x06\\x07;\\x03\\x06.,\\x03\\x86\\xf9\\xea\\x03\\x8f\\xff\\xeb\\x02\\x092\\x02\" +\n\t\"\\x095\\x02\\x094\\x02\\x09;\\x02\\x09>\\x02\\x098\\x02\\x09*\\x02\\x09/\\x02\\x09,\\x02\" +\n\t\"\\x09%\\x02\\x09&\\x02\\x09#\\x02\\x09 \\x02\\x08!\\x02\\x08%\\x02\\x08$\\x02\\x08+\\x02\" +\n\t\"\\x08.\\x02\\x08*\\x02\\x08&\\x02\\x088\\x02\\x08>\\x02\\x084\\x02\\x086\\x02\\x080\\x02\" +\n\t\"\\x08\\x10\\x02\\x08\\x17\\x02\\x08\\x12\\x02\\x08\\x1d\\x02\\x08\\x1f\\x02\\x08\\x13\\x02\" +\n\t\"\\x08\\x15\\x02\\x08\\x14\\x02\\x08\\x0c\\x03\\x8b\\xfd\\xd0\\x03\\x81\\xec\\xc6\\x03\\x87\" +\n\t\"\\xe0\\x8a\\x03-2\\xe3\\x03\\x80\\xef\\xe4\\x03-2\\xea\\x03\\x88\\xe6\\xeb\\x03\\x8e\\xe6\" +\n\t\"\\xe8\\x03\\x84\\xe6\\xe9\\x03\\x97\\xe6\\xee\\x03-2\\xf9\\x03-2\\xf6\\x03\\x8e\\xe3\\xad\" +\n\t\"\\x03\\x80\\xe3\\x92\\x03\\x88\\xe3\\x90\\x03\\x8e\\xe3\\x90\\x03\\x80\\xe3\\x97\\x03\\x88\" +\n\t\"\\xe3\\x95\\x03\\x88\\xfe\\xcb\\x03\\x8e\\xfe\\xca\\x03\\x84\\xfe\\xcd\\x03\\x91\\xef\\xc9\" +\n\t\"\\x03-2\\xc1\\x03-2\\xc0\\x03-2\\xcb\\x03\\x88@\\x09\\x03\\x8e@\\x08\\x03\\x8f\\xe0\\xf5\" +\n\t\"\\x03\\x8e\\xe6\\xf9\\x03\\x8e\\xe0\\xfa\\x03\\x93\\xff\\xf4\\x03\\x84\\xee\\xd3\\x03\\x0b\" +\n\t\"(\\x04\\x023 \\x021;\\x02\\x01*\\x03\\x0b#\\x10\\x03\\x0b 0\\x03\\x0b!\\x10\\x03\\x0b!0\" +\n\t\"\\x03\\x07\\x15\\x08\\x03\\x09?5\\x03\\x07\\x1f\\x08\\x03\\x07\\x17\\x0b\\x03\\x09\\x1f\" +\n\t\"\\x15\\x03\\x0b\\x1c7\\x03\\x0a+#\\x03\\x06\\x1a\\x1b\\x03\\x06\\x1a\\x14\\x03\\x0a\\x01\" +\n\t\"\\x18\\x03\\x06#\\x1b\\x03\\x0a2\\x0c\\x03\\x0a\\x01\\x04\\x03\\x09#;\\x03\\x08='\\x03\" +\n\t\"\\x08\\x1a\\x0a\\x03\\x07</\\x03\\x07:+\\x03\\x07\\x07*\\x03\\x06&\\x1c\\x03\\x09\\x0c\" +\n\t\"\\x16\\x03\\x09\\x10\\x0e\\x03\\x08'\\x0f\\x03\\x08+\\x09\\x03\\x074%\\x03\\x06!3\\x03\" +\n\t\"\\x06\\x03+\\x03\\x0b\\x1e\\x19\\x03\\x0a))\\x03\\x09\\x08\\x19\\x03\\x08,\\x05\\x03\\x07\" +\n\t\"<2\\x03\\x06\\x1c>\\x03\\x0a\\x111\\x03\\x09\\x1b\\x09\\x03\\x073.\\x03\\x07\\x01\\x00\" +\n\t\"\\x03\\x09/,\\x03\\x07#>\\x03\\x07\\x048\\x03\\x0a\\x1f\\x22\\x03\\x098>\\x03\\x09\\x11\" +\n\t\"\\x00\\x03\\x08/\\x17\\x03\\x06'\\x22\\x03\\x0b\\x1a+\\x03\\x0a\\x22\\x19\\x03\\x0a/1\" +\n\t\"\\x03\\x0974\\x03\\x09\\x0f\\x22\\x03\\x08,\\x22\\x03\\x08?\\x14\\x03\\x07$5\\x03\\x07<3\" +\n\t\"\\x03\\x07=*\\x03\\x07\\x13\\x18\\x03\\x068\\x0a\\x03\\x06\\x09\\x16\\x03\\x06\\x13\\x00\" +\n\t\"\\x03\\x08\\x067\\x03\\x08\\x01\\x03\\x03\\x08\\x12\\x1d\\x03\\x07+7\\x03\\x06(;\\x03\" +\n\t\"\\x06\\x1c?\\x03\\x07\\x0e\\x17\\x03\\x0a\\x06\\x1d\\x03\\x0a\\x19\\x07\\x03\\x08\\x14$\" +\n\t\"\\x03\\x07$;\\x03\\x08,$\\x03\\x08\\x06\\x0d\\x03\\x07\\x16\\x0a\\x03\\x06>>\\x03\\x0a\" +\n\t\"\\x06\\x12\\x03\\x0a\\x14)\\x03\\x09\\x0d\\x1f\\x03\\x09\\x12\\x17\\x03\\x09\\x19\\x01\" +\n\t\"\\x03\\x08\\x11 \\x03\\x08\\x1d'\\x03\\x06<\\x1a\\x03\\x0a.\\x00\\x03\\x07'\\x18\\x03\" +\n\t\"\\x0a\\x22\\x08\\x03\\x08\\x0d\\x0a\\x03\\x08\\x13)\\x03\\x07*)\\x03\\x06<,\\x03\\x07\" +\n\t\"\\x0b\\x1a\\x03\\x09.\\x14\\x03\\x09\\x0d\\x1e\\x03\\x07\\x0e#\\x03\\x0b\\x1d'\\x03\\x0a\" +\n\t\"\\x0a8\\x03\\x09%2\\x03\\x08+&\\x03\\x080\\x12\\x03\\x0a)4\\x03\\x08\\x06\\x1f\\x03\\x0b\" +\n\t\"\\x1b\\x1a\\x03\\x0a\\x1b\\x0f\\x03\\x0b\\x1d*\\x03\\x09\\x16$\\x03\\x090\\x11\\x03\\x08\" +\n\t\"\\x11\\x08\\x03\\x0a*(\\x03\\x0a\\x042\\x03\\x089,\\x03\\x074'\\x03\\x07\\x0f\\x05\\x03\" +\n\t\"\\x09\\x0b\\x0a\\x03\\x07\\x1b\\x01\\x03\\x09\\x17:\\x03\\x09.\\x0d\\x03\\x07.\\x11\\x03\" +\n\t\"\\x09+\\x15\\x03\\x080\\x13\\x03\\x0b\\x1f\\x19\\x03\\x0a \\x11\\x03\\x0a\\x220\\x03\\x09\" +\n\t\"\\x07;\\x03\\x08\\x16\\x1c\\x03\\x07,\\x13\\x03\\x07\\x0e/\\x03\\x06\\x221\\x03\\x0a.\" +\n\t\"\\x0a\\x03\\x0a7\\x02\\x03\\x0a\\x032\\x03\\x0a\\x1d.\\x03\\x091\\x06\\x03\\x09\\x19:\" +\n\t\"\\x03\\x08\\x02/\\x03\\x060+\\x03\\x06\\x0f-\\x03\\x06\\x1c\\x1f\\x03\\x06\\x1d\\x07\\x03\" +\n\t\"\\x0a,\\x11\\x03\\x09=\\x0d\\x03\\x09\\x0b;\\x03\\x07\\x1b/\\x03\\x0a\\x1f:\\x03\\x09 \" +\n\t\"\\x1f\\x03\\x09.\\x10\\x03\\x094\\x0b\\x03\\x09\\x1a1\\x03\\x08#\\x1a\\x03\\x084\\x1d\" +\n\t\"\\x03\\x08\\x01\\x1f\\x03\\x08\\x11\\x22\\x03\\x07'8\\x03\\x07\\x1a>\\x03\\x0757\\x03\" +\n\t\"\\x06&9\\x03\\x06+\\x11\\x03\\x0a.\\x0b\\x03\\x0a,>\\x03\\x0a4#\\x03\\x08%\\x17\\x03\" +\n\t\"\\x07\\x05\\x22\\x03\\x07\\x0c\\x0b\\x03\\x0a\\x1d+\\x03\\x0a\\x19\\x16\\x03\\x09+\\x1f\" +\n\t\"\\x03\\x09\\x08\\x0b\\x03\\x08\\x16\\x18\\x03\\x08+\\x12\\x03\\x0b\\x1d\\x0c\\x03\\x0a=\" +\n\t\"\\x10\\x03\\x0a\\x09\\x0d\\x03\\x0a\\x10\\x11\\x03\\x09&0\\x03\\x08(\\x1f\\x03\\x087\\x07\" +\n\t\"\\x03\\x08\\x185\\x03\\x07'6\\x03\\x06.\\x05\\x03\\x06=\\x04\\x03\\x06;;\\x03\\x06\\x06,\" +\n\t\"\\x03\\x0b\\x18>\\x03\\x08\\x00\\x18\\x03\\x06 \\x03\\x03\\x06<\\x00\\x03\\x09%\\x18\\x03\" +\n\t\"\\x0b\\x1c<\\x03\\x0a%!\\x03\\x0a\\x09\\x12\\x03\\x0a\\x16\\x02\\x03\\x090'\\x03\\x09\" +\n\t\"\\x0e=\\x03\\x08 \\x0e\\x03\\x08>\\x03\\x03\\x074>\\x03\\x06&?\\x03\\x06\\x19\\x09\\x03\" +\n\t\"\\x06?(\\x03\\x0a-\\x0e\\x03\\x09:3\\x03\\x098:\\x03\\x09\\x12\\x0b\\x03\\x09\\x1d\\x17\" +\n\t\"\\x03\\x087\\x05\\x03\\x082\\x14\\x03\\x08\\x06%\\x03\\x08\\x13\\x1f\\x03\\x06\\x06\\x0e\" +\n\t\"\\x03\\x0a\\x22<\\x03\\x09/<\\x03\\x06>+\\x03\\x0a'?\\x03\\x0a\\x13\\x0c\\x03\\x09\\x10<\" +\n\t\"\\x03\\x07\\x1b=\\x03\\x0a\\x19\\x13\\x03\\x09\\x22\\x1d\\x03\\x09\\x07\\x0d\\x03\\x08)\" +\n\t\"\\x1c\\x03\\x06=\\x1a\\x03\\x0a/4\\x03\\x0a7\\x11\\x03\\x0a\\x16:\\x03\\x09?3\\x03\\x09:\" +\n\t\"/\\x03\\x09\\x05\\x0a\\x03\\x09\\x14\\x06\\x03\\x087\\x22\\x03\\x080\\x07\\x03\\x08\\x1a\" +\n\t\"\\x1f\\x03\\x07\\x04(\\x03\\x07\\x04\\x09\\x03\\x06 %\\x03\\x06<\\x08\\x03\\x0a+\\x14\" +\n\t\"\\x03\\x09\\x1d\\x16\\x03\\x0a70\\x03\\x08 >\\x03\\x0857\\x03\\x070\\x0a\\x03\\x06=\\x12\" +\n\t\"\\x03\\x06\\x16%\\x03\\x06\\x1d,\\x03\\x099#\\x03\\x09\\x10>\\x03\\x07 \\x1e\\x03\\x08\" +\n\t\"\\x0c<\\x03\\x08\\x0b\\x18\\x03\\x08\\x15+\\x03\\x08,:\\x03\\x08%\\x22\\x03\\x07\\x0a$\" +\n\t\"\\x03\\x0b\\x1c=\\x03\\x07+\\x08\\x03\\x0a/\\x05\\x03\\x0a \\x07\\x03\\x0a\\x12'\\x03\" +\n\t\"\\x09#\\x11\\x03\\x08\\x1b\\x15\\x03\\x0a\\x06\\x01\\x03\\x09\\x1c\\x1b\\x03\\x0922\\x03\" +\n\t\"\\x07\\x14<\\x03\\x07\\x09\\x04\\x03\\x061\\x04\\x03\\x07\\x0e\\x01\\x03\\x0a\\x13\\x18\" +\n\t\"\\x03\\x0a-\\x0c\\x03\\x0a?\\x0d\\x03\\x0a\\x09\\x0a\\x03\\x091&\\x03\\x0a/\\x0b\\x03\" +\n\t\"\\x08$<\\x03\\x083\\x1d\\x03\\x08\\x0c$\\x03\\x08\\x0d\\x07\\x03\\x08\\x0d?\\x03\\x08\" +\n\t\"\\x0e\\x14\\x03\\x065\\x0a\\x03\\x08\\x1a#\\x03\\x08\\x16#\\x03\\x0702\\x03\\x07\\x03\" +\n\t\"\\x1a\\x03\\x06(\\x1d\\x03\\x06+\\x1b\\x03\\x06\\x0b\\x05\\x03\\x06\\x0b\\x17\\x03\\x06\" +\n\t\"\\x0c\\x04\\x03\\x06\\x1e\\x19\\x03\\x06+0\\x03\\x062\\x18\\x03\\x0b\\x16\\x1e\\x03\\x0a+\" +\n\t\"\\x16\\x03\\x0a-?\\x03\\x0a#:\\x03\\x0a#\\x10\\x03\\x0a%$\\x03\\x0a>+\\x03\\x0a01\\x03\" +\n\t\"\\x0a1\\x10\\x03\\x0a\\x099\\x03\\x0a\\x0a\\x12\\x03\\x0a\\x19\\x1f\\x03\\x0a\\x19\\x12\" +\n\t\"\\x03\\x09*)\\x03\\x09-\\x16\\x03\\x09.1\\x03\\x09.2\\x03\\x09<\\x0e\\x03\\x09> \\x03\" +\n\t\"\\x093\\x12\\x03\\x09\\x0b\\x01\\x03\\x09\\x1c2\\x03\\x09\\x11\\x1c\\x03\\x09\\x15%\\x03\" +\n\t\"\\x08,&\\x03\\x08!\\x22\\x03\\x089(\\x03\\x08\\x0b\\x1a\\x03\\x08\\x0d2\\x03\\x08\\x0c\" +\n\t\"\\x04\\x03\\x08\\x0c\\x06\\x03\\x08\\x0c\\x1f\\x03\\x08\\x0c\\x0c\\x03\\x08\\x0f\\x1f\\x03\" +\n\t\"\\x08\\x0f\\x1d\\x03\\x08\\x00\\x14\\x03\\x08\\x03\\x14\\x03\\x08\\x06\\x16\\x03\\x08\\x1e\" +\n\t\"#\\x03\\x08\\x11\\x11\\x03\\x08\\x10\\x18\\x03\\x08\\x14(\\x03\\x07)\\x1e\\x03\\x07.1\" +\n\t\"\\x03\\x07 $\\x03\\x07 '\\x03\\x078\\x08\\x03\\x07\\x0d0\\x03\\x07\\x0f7\\x03\\x07\\x05#\" +\n\t\"\\x03\\x07\\x05\\x1a\\x03\\x07\\x1a7\\x03\\x07\\x1d-\\x03\\x07\\x17\\x10\\x03\\x06)\\x1f\" +\n\t\"\\x03\\x062\\x0b\\x03\\x066\\x16\\x03\\x06\\x09\\x11\\x03\\x09(\\x1e\\x03\\x07!5\\x03\" +\n\t\"\\x0b\\x11\\x16\\x03\\x0a/\\x04\\x03\\x0a,\\x1a\\x03\\x0b\\x173\\x03\\x0a,1\\x03\\x0a/5\" +\n\t\"\\x03\\x0a\\x221\\x03\\x0a\\x22\\x0d\\x03\\x0a?%\\x03\\x0a<,\\x03\\x0a?#\\x03\\x0a>\\x19\" +\n\t\"\\x03\\x0a\\x08&\\x03\\x0a\\x0b\\x0e\\x03\\x0a\\x0c:\\x03\\x0a\\x0c+\\x03\\x0a\\x03\\x22\" +\n\t\"\\x03\\x0a\\x06)\\x03\\x0a\\x11\\x10\\x03\\x0a\\x11\\x1a\\x03\\x0a\\x17-\\x03\\x0a\\x14(\" +\n\t\"\\x03\\x09)\\x1e\\x03\\x09/\\x09\\x03\\x09.\\x00\\x03\\x09,\\x07\\x03\\x09/*\\x03\\x09-9\" +\n\t\"\\x03\\x09\\x228\\x03\\x09%\\x09\\x03\\x09:\\x12\\x03\\x09;\\x1d\\x03\\x09?\\x06\\x03\" +\n\t\"\\x093%\\x03\\x096\\x05\\x03\\x096\\x08\\x03\\x097\\x02\\x03\\x09\\x07,\\x03\\x09\\x04,\" +\n\t\"\\x03\\x09\\x1f\\x16\\x03\\x09\\x11\\x03\\x03\\x09\\x11\\x12\\x03\\x09\\x168\\x03\\x08*\" +\n\t\"\\x05\\x03\\x08/2\\x03\\x084:\\x03\\x08\\x22+\\x03\\x08 0\\x03\\x08&\\x0a\\x03\\x08;\" +\n\t\"\\x10\\x03\\x08>$\\x03\\x08>\\x18\\x03\\x0829\\x03\\x082:\\x03\\x081,\\x03\\x081<\\x03\" +\n\t\"\\x081\\x1c\\x03\\x087#\\x03\\x087*\\x03\\x08\\x09'\\x03\\x08\\x00\\x1d\\x03\\x08\\x05-\" +\n\t\"\\x03\\x08\\x1f4\\x03\\x08\\x1d\\x04\\x03\\x08\\x16\\x0f\\x03\\x07*7\\x03\\x07'!\\x03\" +\n\t\"\\x07%\\x1b\\x03\\x077\\x0c\\x03\\x07\\x0c1\\x03\\x07\\x0c.\\x03\\x07\\x00\\x06\\x03\\x07\" +\n\t\"\\x01\\x02\\x03\\x07\\x010\\x03\\x07\\x06=\\x03\\x07\\x01\\x03\\x03\\x07\\x01\\x13\\x03\" +\n\t\"\\x07\\x06\\x06\\x03\\x07\\x05\\x0a\\x03\\x07\\x1f\\x09\\x03\\x07\\x17:\\x03\\x06*1\\x03\" +\n\t\"\\x06-\\x1d\\x03\\x06\\x223\\x03\\x062:\\x03\\x060$\\x03\\x066\\x1e\\x03\\x064\\x12\\x03\" +\n\t\"\\x0645\\x03\\x06\\x0b\\x00\\x03\\x06\\x0b7\\x03\\x06\\x07\\x1f\\x03\\x06\\x15\\x12\\x03\" +\n\t\"\\x0c\\x05\\x0f\\x03\\x0b+\\x0b\\x03\\x0b+-\\x03\\x06\\x16\\x1b\\x03\\x06\\x15\\x17\\x03\" +\n\t\"\\x89\\xca\\xea\\x03\\x89\\xca\\xe8\\x03\\x0c8\\x10\\x03\\x0c8\\x01\\x03\\x0c8\\x0f\\x03\" +\n\t\"\\x0d8%\\x03\\x0d8!\\x03\\x0c8-\\x03\\x0c8/\\x03\\x0c8+\\x03\\x0c87\\x03\\x0c85\\x03\" +\n\t\"\\x0c9\\x09\\x03\\x0c9\\x0d\\x03\\x0c9\\x0f\\x03\\x0c9\\x0b\\x03\\xcfu\\x0c\\x03\\xcfu\" +\n\t\"\\x0f\\x03\\xcfu\\x0e\\x03\\xcfu\\x09\\x03\\x0c9\\x10\\x03\\x0d9\\x0c\\x03\\xcf`;\\x03\" +\n\t\"\\xcf`>\\x03\\xcf`9\\x03\\xcf`8\\x03\\xcf`7\\x03\\xcf`*\\x03\\xcf`-\\x03\\xcf`,\\x03\" +\n\t\"\\x0d\\x1b\\x1a\\x03\\x0d\\x1b&\\x03\\x0c=.\\x03\\x0c=%\\x03\\x0c>\\x1e\\x03\\x0c>\\x14\" +\n\t\"\\x03\\x0c?\\x06\\x03\\x0c?\\x0b\\x03\\x0c?\\x0c\\x03\\x0c?\\x0d\\x03\\x0c?\\x02\\x03\" +\n\t\"\\x0c>\\x0f\\x03\\x0c>\\x08\\x03\\x0c>\\x09\\x03\\x0c>,\\x03\\x0c>\\x0c\\x03\\x0c?\\x13\" +\n\t\"\\x03\\x0c?\\x16\\x03\\x0c?\\x15\\x03\\x0c?\\x1c\\x03\\x0c?\\x1f\\x03\\x0c?\\x1d\\x03\" +\n\t\"\\x0c?\\x1a\\x03\\x0c?\\x17\\x03\\x0c?\\x08\\x03\\x0c?\\x09\\x03\\x0c?\\x0e\\x03\\x0c?\" +\n\t\"\\x04\\x03\\x0c?\\x05\\x03\\x0c<?\\x03\\x0c=\\x00\\x03\\x0c=\\x06\\x03\\x0c=\\x05\\x03\" +\n\t\"\\x0c=\\x0c\\x03\\x0c=\\x0f\\x03\\x0c=\\x0d\\x03\\x0c=\\x0b\\x03\\x0c=\\x07\\x03\\x0c=\" +\n\t\"\\x19\\x03\\x0c=\\x15\\x03\\x0c=\\x11\\x03\\x0c=1\\x03\\x0c=3\\x03\\x0c=0\\x03\\x0c=>\" +\n\t\"\\x03\\x0c=2\\x03\\x0c=6\\x03\\x0c<\\x07\\x03\\x0c<\\x05\\x03\\x0e:!\\x03\\x0e:#\\x03\" +\n\t\"\\x0e8\\x09\\x03\\x0e:&\\x03\\x0e8\\x0b\\x03\\x0e:$\\x03\\x0e:,\\x03\\x0e8\\x1a\\x03\" +\n\t\"\\x0e8\\x1e\\x03\\x0e:*\\x03\\x0e:7\\x03\\x0e:5\\x03\\x0e:;\\x03\\x0e:\\x15\\x03\\x0e:<\" +\n\t\"\\x03\\x0e:4\\x03\\x0e:'\\x03\\x0e:-\\x03\\x0e:%\\x03\\x0e:?\\x03\\x0e:=\\x03\\x0e:)\" +\n\t\"\\x03\\x0e:/\\x03\\xcfs'\\x03\\x0d=\\x0f\\x03\\x0d+*\\x03\\x0d99\\x03\\x0d9;\\x03\\x0d9\" +\n\t\"?\\x03\\x0d)\\x0d\\x03\\x0d(%\\x02\\x01\\x18\\x02\\x01(\\x02\\x01\\x1e\\x03\\x0f$!\\x03\" +\n\t\"\\x0f87\\x03\\x0f4\\x0e\\x03\\x0f5\\x1d\\x03\\x06'\\x03\\x03\\x0f\\x08\\x18\\x03\\x0f\" +\n\t\"\\x0d\\x1b\\x03\\x0e2=\\x03\\x0e;\\x08\\x03\\x0e:\\x0b\\x03\\x0e\\x06$\\x03\\x0e\\x0d)\" +\n\t\"\\x03\\x0e\\x16\\x1f\\x03\\x0e\\x16\\x1b\\x03\\x0d$\\x0a\\x03\\x05,\\x1d\\x03\\x0d. \\x03\" +\n\t\"\\x0d.#\\x03\\x0c(/\\x03\\x09%\\x02\\x03\\x0d90\\x03\\x0d\\x0e4\\x03\\x0d\\x0d\\x0f\\x03\" +\n\t\"\\x0c#\\x00\\x03\\x0c,\\x1e\\x03\\x0c2\\x0e\\x03\\x0c\\x01\\x17\\x03\\x0c\\x09:\\x03\\x0e\" +\n\t\"\\x173\\x03\\x0c\\x08\\x03\\x03\\x0c\\x11\\x07\\x03\\x0c\\x10\\x18\\x03\\x0c\\x1f\\x1c\" +\n\t\"\\x03\\x0c\\x19\\x0e\\x03\\x0c\\x1a\\x1f\\x03\\x0f0>\\x03\\x0b->\\x03\\x0b<+\\x03\\x0b8\" +\n\t\"\\x13\\x03\\x0b\\x043\\x03\\x0b\\x14\\x03\\x03\\x0b\\x16%\\x03\\x0d\\x22&\\x03\\x0b\\x1a\" +\n\t\"\\x1a\\x03\\x0b\\x1a\\x04\\x03\\x0a%9\\x03\\x0a&2\\x03\\x0a&0\\x03\\x0a!\\x1a\\x03\\x0a!\" +\n\t\"7\\x03\\x0a5\\x10\\x03\\x0a=4\\x03\\x0a?\\x0e\\x03\\x0a>\\x10\\x03\\x0a\\x00 \\x03\\x0a\" +\n\t\"\\x0f:\\x03\\x0a\\x0f9\\x03\\x0a\\x0b\\x0a\\x03\\x0a\\x17%\\x03\\x0a\\x1b-\\x03\\x09-\" +\n\t\"\\x1a\\x03\\x09,4\\x03\\x09.,\\x03\\x09)\\x09\\x03\\x096!\\x03\\x091\\x1f\\x03\\x093\" +\n\t\"\\x16\\x03\\x0c+\\x1f\\x03\\x098 \\x03\\x098=\\x03\\x0c(\\x1a\\x03\\x0c(\\x16\\x03\\x09\" +\n\t\"\\x0a+\\x03\\x09\\x16\\x12\\x03\\x09\\x13\\x0e\\x03\\x09\\x153\\x03\\x08)!\\x03\\x09\\x1a\" +\n\t\"\\x01\\x03\\x09\\x18\\x01\\x03\\x08%#\\x03\\x08>\\x22\\x03\\x08\\x05%\\x03\\x08\\x02*\" +\n\t\"\\x03\\x08\\x15;\\x03\\x08\\x1b7\\x03\\x0f\\x07\\x1d\\x03\\x0f\\x04\\x03\\x03\\x070\\x0c\" +\n\t\"\\x03\\x07;\\x0b\\x03\\x07\\x08\\x17\\x03\\x07\\x12\\x06\\x03\\x06/-\\x03\\x0671\\x03\" +\n\t\"\\x065+\\x03\\x06>7\\x03\\x06\\x049\\x03\\x05+\\x1e\\x03\\x05,\\x17\\x03\\x05 \\x1d\\x03\" +\n\t\"\\x05\\x22\\x05\\x03\\x050\\x1d\"\n\n// lookup returns the trie value for the first UTF-8 encoding in s and\n// the width in bytes of this encoding. The size will be 0 if s does not\n// hold enough bytes to complete the encoding. len(s) must be greater than 0.\nfunc (t *idnaTrie) lookup(s []byte) (v uint16, sz int) {\n\tc0 := s[0]\n\tswitch {\n\tcase c0 < 0x80: // is ASCII\n\t\treturn idnaValues[c0], 1\n\tcase c0 < 0xC2:\n\t\treturn 0, 1 // Illegal UTF-8: not a starter, not ASCII.\n\tcase c0 < 0xE0: // 2-byte UTF-8\n\t\tif len(s) < 2 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := idnaIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c1), 2\n\tcase c0 < 0xF0: // 3-byte UTF-8\n\t\tif len(s) < 3 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := idnaIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to := uint32(i)<<6 + uint32(c1)\n\t\ti = idnaIndex[o]\n\t\tc2 := s[2]\n\t\tif c2 < 0x80 || 0xC0 <= c2 {\n\t\t\treturn 0, 2 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c2), 3\n\tcase c0 < 0xF8: // 4-byte UTF-8\n\t\tif len(s) < 4 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := idnaIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to := uint32(i)<<6 + uint32(c1)\n\t\ti = idnaIndex[o]\n\t\tc2 := s[2]\n\t\tif c2 < 0x80 || 0xC0 <= c2 {\n\t\t\treturn 0, 2 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to = uint32(i)<<6 + uint32(c2)\n\t\ti = idnaIndex[o]\n\t\tc3 := s[3]\n\t\tif c3 < 0x80 || 0xC0 <= c3 {\n\t\t\treturn 0, 3 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c3), 4\n\t}\n\t// Illegal rune\n\treturn 0, 1\n}\n\n// lookupUnsafe returns the trie value for the first UTF-8 encoding in s.\n// s must start with a full and valid UTF-8 encoded rune.\nfunc (t *idnaTrie) lookupUnsafe(s []byte) uint16 {\n\tc0 := s[0]\n\tif c0 < 0x80 { // is ASCII\n\t\treturn idnaValues[c0]\n\t}\n\ti := idnaIndex[c0]\n\tif c0 < 0xE0 { // 2-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[1])\n\t}\n\ti = idnaIndex[uint32(i)<<6+uint32(s[1])]\n\tif c0 < 0xF0 { // 3-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[2])\n\t}\n\ti = idnaIndex[uint32(i)<<6+uint32(s[2])]\n\tif c0 < 0xF8 { // 4-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[3])\n\t}\n\treturn 0\n}\n\n// lookupString returns the trie value for the first UTF-8 encoding in s and\n// the width in bytes of this encoding. The size will be 0 if s does not\n// hold enough bytes to complete the encoding. len(s) must be greater than 0.\nfunc (t *idnaTrie) lookupString(s string) (v uint16, sz int) {\n\tc0 := s[0]\n\tswitch {\n\tcase c0 < 0x80: // is ASCII\n\t\treturn idnaValues[c0], 1\n\tcase c0 < 0xC2:\n\t\treturn 0, 1 // Illegal UTF-8: not a starter, not ASCII.\n\tcase c0 < 0xE0: // 2-byte UTF-8\n\t\tif len(s) < 2 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := idnaIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c1), 2\n\tcase c0 < 0xF0: // 3-byte UTF-8\n\t\tif len(s) < 3 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := idnaIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to := uint32(i)<<6 + uint32(c1)\n\t\ti = idnaIndex[o]\n\t\tc2 := s[2]\n\t\tif c2 < 0x80 || 0xC0 <= c2 {\n\t\t\treturn 0, 2 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c2), 3\n\tcase c0 < 0xF8: // 4-byte UTF-8\n\t\tif len(s) < 4 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := idnaIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to := uint32(i)<<6 + uint32(c1)\n\t\ti = idnaIndex[o]\n\t\tc2 := s[2]\n\t\tif c2 < 0x80 || 0xC0 <= c2 {\n\t\t\treturn 0, 2 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to = uint32(i)<<6 + uint32(c2)\n\t\ti = idnaIndex[o]\n\t\tc3 := s[3]\n\t\tif c3 < 0x80 || 0xC0 <= c3 {\n\t\t\treturn 0, 3 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c3), 4\n\t}\n\t// Illegal rune\n\treturn 0, 1\n}\n\n// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s.\n// s must start with a full and valid UTF-8 encoded rune.\nfunc (t *idnaTrie) lookupStringUnsafe(s string) uint16 {\n\tc0 := s[0]\n\tif c0 < 0x80 { // is ASCII\n\t\treturn idnaValues[c0]\n\t}\n\ti := idnaIndex[c0]\n\tif c0 < 0xE0 { // 2-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[1])\n\t}\n\ti = idnaIndex[uint32(i)<<6+uint32(s[1])]\n\tif c0 < 0xF0 { // 3-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[2])\n\t}\n\ti = idnaIndex[uint32(i)<<6+uint32(s[2])]\n\tif c0 < 0xF8 { // 4-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[3])\n\t}\n\treturn 0\n}\n\n// idnaTrie. Total size: 28600 bytes (27.93 KiB). Checksum: 95575047b5d8fff.\ntype idnaTrie struct{}\n\nfunc newIdnaTrie(i int) *idnaTrie {\n\treturn &idnaTrie{}\n}\n\n// lookupValue determines the type of block n and looks up the value for b.\nfunc (t *idnaTrie) lookupValue(n uint32, b byte) uint16 {\n\tswitch {\n\tcase n < 124:\n\t\treturn uint16(idnaValues[n<<6+uint32(b)])\n\tdefault:\n\t\tn -= 124\n\t\treturn uint16(idnaSparse.lookup(n, b))\n\t}\n}\n\n// idnaValues: 126 blocks, 8064 entries, 16128 bytes\n// The third block is the zero block.\nvar idnaValues = [8064]uint16{\n\t// Block 0x0, offset 0x0\n\t0x00: 0x0080, 0x01: 0x0080, 0x02: 0x0080, 0x03: 0x0080, 0x04: 0x0080, 0x05: 0x0080,\n\t0x06: 0x0080, 0x07: 0x0080, 0x08: 0x0080, 0x09: 0x0080, 0x0a: 0x0080, 0x0b: 0x0080,\n\t0x0c: 0x0080, 0x0d: 0x0080, 0x0e: 0x0080, 0x0f: 0x0080, 0x10: 0x0080, 0x11: 0x0080,\n\t0x12: 0x0080, 0x13: 0x0080, 0x14: 0x0080, 0x15: 0x0080, 0x16: 0x0080, 0x17: 0x0080,\n\t0x18: 0x0080, 0x19: 0x0080, 0x1a: 0x0080, 0x1b: 0x0080, 0x1c: 0x0080, 0x1d: 0x0080,\n\t0x1e: 0x0080, 0x1f: 0x0080, 0x20: 0x0080, 0x21: 0x0080, 0x22: 0x0080, 0x23: 0x0080,\n\t0x24: 0x0080, 0x25: 0x0080, 0x26: 0x0080, 0x27: 0x0080, 0x28: 0x0080, 0x29: 0x0080,\n\t0x2a: 0x0080, 0x2b: 0x0080, 0x2c: 0x0080, 0x2d: 0x0008, 0x2e: 0x0008, 0x2f: 0x0080,\n\t0x30: 0x0008, 0x31: 0x0008, 0x32: 0x0008, 0x33: 0x0008, 0x34: 0x0008, 0x35: 0x0008,\n\t0x36: 0x0008, 0x37: 0x0008, 0x38: 0x0008, 0x39: 0x0008, 0x3a: 0x0080, 0x3b: 0x0080,\n\t0x3c: 0x0080, 0x3d: 0x0080, 0x3e: 0x0080, 0x3f: 0x0080,\n\t// Block 0x1, offset 0x40\n\t0x40: 0x0080, 0x41: 0xe105, 0x42: 0xe105, 0x43: 0xe105, 0x44: 0xe105, 0x45: 0xe105,\n\t0x46: 0xe105, 0x47: 0xe105, 0x48: 0xe105, 0x49: 0xe105, 0x4a: 0xe105, 0x4b: 0xe105,\n\t0x4c: 0xe105, 0x4d: 0xe105, 0x4e: 0xe105, 0x4f: 0xe105, 0x50: 0xe105, 0x51: 0xe105,\n\t0x52: 0xe105, 0x53: 0xe105, 0x54: 0xe105, 0x55: 0xe105, 0x56: 0xe105, 0x57: 0xe105,\n\t0x58: 0xe105, 0x59: 0xe105, 0x5a: 0xe105, 0x5b: 0x0080, 0x5c: 0x0080, 0x5d: 0x0080,\n\t0x5e: 0x0080, 0x5f: 0x0080, 0x60: 0x0080, 0x61: 0x0008, 0x62: 0x0008, 0x63: 0x0008,\n\t0x64: 0x0008, 0x65: 0x0008, 0x66: 0x0008, 0x67: 0x0008, 0x68: 0x0008, 0x69: 0x0008,\n\t0x6a: 0x0008, 0x6b: 0x0008, 0x6c: 0x0008, 0x6d: 0x0008, 0x6e: 0x0008, 0x6f: 0x0008,\n\t0x70: 0x0008, 0x71: 0x0008, 0x72: 0x0008, 0x73: 0x0008, 0x74: 0x0008, 0x75: 0x0008,\n\t0x76: 0x0008, 0x77: 0x0008, 0x78: 0x0008, 0x79: 0x0008, 0x7a: 0x0008, 0x7b: 0x0080,\n\t0x7c: 0x0080, 0x7d: 0x0080, 0x7e: 0x0080, 0x7f: 0x0080,\n\t// Block 0x2, offset 0x80\n\t// Block 0x3, offset 0xc0\n\t0xc0: 0x0040, 0xc1: 0x0040, 0xc2: 0x0040, 0xc3: 0x0040, 0xc4: 0x0040, 0xc5: 0x0040,\n\t0xc6: 0x0040, 0xc7: 0x0040, 0xc8: 0x0040, 0xc9: 0x0040, 0xca: 0x0040, 0xcb: 0x0040,\n\t0xcc: 0x0040, 0xcd: 0x0040, 0xce: 0x0040, 0xcf: 0x0040, 0xd0: 0x0040, 0xd1: 0x0040,\n\t0xd2: 0x0040, 0xd3: 0x0040, 0xd4: 0x0040, 0xd5: 0x0040, 0xd6: 0x0040, 0xd7: 0x0040,\n\t0xd8: 0x0040, 0xd9: 0x0040, 0xda: 0x0040, 0xdb: 0x0040, 0xdc: 0x0040, 0xdd: 0x0040,\n\t0xde: 0x0040, 0xdf: 0x0040, 0xe0: 0x000a, 0xe1: 0x0018, 0xe2: 0x0018, 0xe3: 0x0018,\n\t0xe4: 0x0018, 0xe5: 0x0018, 0xe6: 0x0018, 0xe7: 0x0018, 0xe8: 0x001a, 0xe9: 0x0018,\n\t0xea: 0x0039, 0xeb: 0x0018, 0xec: 0x0018, 0xed: 0x03c0, 0xee: 0x0018, 0xef: 0x004a,\n\t0xf0: 0x0018, 0xf1: 0x0018, 0xf2: 0x0069, 0xf3: 0x0079, 0xf4: 0x008a, 0xf5: 0x0005,\n\t0xf6: 0x0018, 0xf7: 0x0008, 0xf8: 0x00aa, 0xf9: 0x00c9, 0xfa: 0x00d9, 0xfb: 0x0018,\n\t0xfc: 0x00e9, 0xfd: 0x0119, 0xfe: 0x0149, 0xff: 0x0018,\n\t// Block 0x4, offset 0x100\n\t0x100: 0xe00d, 0x101: 0x0008, 0x102: 0xe00d, 0x103: 0x0008, 0x104: 0xe00d, 0x105: 0x0008,\n\t0x106: 0xe00d, 0x107: 0x0008, 0x108: 0xe00d, 0x109: 0x0008, 0x10a: 0xe00d, 0x10b: 0x0008,\n\t0x10c: 0xe00d, 0x10d: 0x0008, 0x10e: 0xe00d, 0x10f: 0x0008, 0x110: 0xe00d, 0x111: 0x0008,\n\t0x112: 0xe00d, 0x113: 0x0008, 0x114: 0xe00d, 0x115: 0x0008, 0x116: 0xe00d, 0x117: 0x0008,\n\t0x118: 0xe00d, 0x119: 0x0008, 0x11a: 0xe00d, 0x11b: 0x0008, 0x11c: 0xe00d, 0x11d: 0x0008,\n\t0x11e: 0xe00d, 0x11f: 0x0008, 0x120: 0xe00d, 0x121: 0x0008, 0x122: 0xe00d, 0x123: 0x0008,\n\t0x124: 0xe00d, 0x125: 0x0008, 0x126: 0xe00d, 0x127: 0x0008, 0x128: 0xe00d, 0x129: 0x0008,\n\t0x12a: 0xe00d, 0x12b: 0x0008, 0x12c: 0xe00d, 0x12d: 0x0008, 0x12e: 0xe00d, 0x12f: 0x0008,\n\t0x130: 0x0179, 0x131: 0x0008, 0x132: 0x0035, 0x133: 0x004d, 0x134: 0xe00d, 0x135: 0x0008,\n\t0x136: 0xe00d, 0x137: 0x0008, 0x138: 0x0008, 0x139: 0xe01d, 0x13a: 0x0008, 0x13b: 0xe03d,\n\t0x13c: 0x0008, 0x13d: 0xe01d, 0x13e: 0x0008, 0x13f: 0x0199,\n\t// Block 0x5, offset 0x140\n\t0x140: 0x0199, 0x141: 0xe01d, 0x142: 0x0008, 0x143: 0xe03d, 0x144: 0x0008, 0x145: 0xe01d,\n\t0x146: 0x0008, 0x147: 0xe07d, 0x148: 0x0008, 0x149: 0x01b9, 0x14a: 0xe00d, 0x14b: 0x0008,\n\t0x14c: 0xe00d, 0x14d: 0x0008, 0x14e: 0xe00d, 0x14f: 0x0008, 0x150: 0xe00d, 0x151: 0x0008,\n\t0x152: 0xe00d, 0x153: 0x0008, 0x154: 0xe00d, 0x155: 0x0008, 0x156: 0xe00d, 0x157: 0x0008,\n\t0x158: 0xe00d, 0x159: 0x0008, 0x15a: 0xe00d, 0x15b: 0x0008, 0x15c: 0xe00d, 0x15d: 0x0008,\n\t0x15e: 0xe00d, 0x15f: 0x0008, 0x160: 0xe00d, 0x161: 0x0008, 0x162: 0xe00d, 0x163: 0x0008,\n\t0x164: 0xe00d, 0x165: 0x0008, 0x166: 0xe00d, 0x167: 0x0008, 0x168: 0xe00d, 0x169: 0x0008,\n\t0x16a: 0xe00d, 0x16b: 0x0008, 0x16c: 0xe00d, 0x16d: 0x0008, 0x16e: 0xe00d, 0x16f: 0x0008,\n\t0x170: 0xe00d, 0x171: 0x0008, 0x172: 0xe00d, 0x173: 0x0008, 0x174: 0xe00d, 0x175: 0x0008,\n\t0x176: 0xe00d, 0x177: 0x0008, 0x178: 0x0065, 0x179: 0xe01d, 0x17a: 0x0008, 0x17b: 0xe03d,\n\t0x17c: 0x0008, 0x17d: 0xe01d, 0x17e: 0x0008, 0x17f: 0x01d9,\n\t// Block 0x6, offset 0x180\n\t0x180: 0x0008, 0x181: 0x007d, 0x182: 0xe00d, 0x183: 0x0008, 0x184: 0xe00d, 0x185: 0x0008,\n\t0x186: 0x007d, 0x187: 0xe07d, 0x188: 0x0008, 0x189: 0x0095, 0x18a: 0x00ad, 0x18b: 0xe03d,\n\t0x18c: 0x0008, 0x18d: 0x0008, 0x18e: 0x00c5, 0x18f: 0x00dd, 0x190: 0x00f5, 0x191: 0xe01d,\n\t0x192: 0x0008, 0x193: 0x010d, 0x194: 0x0125, 0x195: 0x0008, 0x196: 0x013d, 0x197: 0x013d,\n\t0x198: 0xe00d, 0x199: 0x0008, 0x19a: 0x0008, 0x19b: 0x0008, 0x19c: 0x010d, 0x19d: 0x0155,\n\t0x19e: 0x0008, 0x19f: 0x016d, 0x1a0: 0xe00d, 0x1a1: 0x0008, 0x1a2: 0xe00d, 0x1a3: 0x0008,\n\t0x1a4: 0xe00d, 0x1a5: 0x0008, 0x1a6: 0x0185, 0x1a7: 0xe07d, 0x1a8: 0x0008, 0x1a9: 0x019d,\n\t0x1aa: 0x0008, 0x1ab: 0x0008, 0x1ac: 0xe00d, 0x1ad: 0x0008, 0x1ae: 0x0185, 0x1af: 0xe0fd,\n\t0x1b0: 0x0008, 0x1b1: 0x01b5, 0x1b2: 0x01cd, 0x1b3: 0xe03d, 0x1b4: 0x0008, 0x1b5: 0xe01d,\n\t0x1b6: 0x0008, 0x1b7: 0x01e5, 0x1b8: 0xe00d, 0x1b9: 0x0008, 0x1ba: 0x0008, 0x1bb: 0x0008,\n\t0x1bc: 0xe00d, 0x1bd: 0x0008, 0x1be: 0x0008, 0x1bf: 0x0008,\n\t// Block 0x7, offset 0x1c0\n\t0x1c0: 0x0008, 0x1c1: 0x0008, 0x1c2: 0x0008, 0x1c3: 0x0008, 0x1c4: 0x01e9, 0x1c5: 0x01e9,\n\t0x1c6: 0x01e9, 0x1c7: 0x01fd, 0x1c8: 0x0215, 0x1c9: 0x022d, 0x1ca: 0x0245, 0x1cb: 0x025d,\n\t0x1cc: 0x0275, 0x1cd: 0xe01d, 0x1ce: 0x0008, 0x1cf: 0xe0fd, 0x1d0: 0x0008, 0x1d1: 0xe01d,\n\t0x1d2: 0x0008, 0x1d3: 0xe03d, 0x1d4: 0x0008, 0x1d5: 0xe01d, 0x1d6: 0x0008, 0x1d7: 0xe07d,\n\t0x1d8: 0x0008, 0x1d9: 0xe01d, 0x1da: 0x0008, 0x1db: 0xe03d, 0x1dc: 0x0008, 0x1dd: 0x0008,\n\t0x1de: 0xe00d, 0x1df: 0x0008, 0x1e0: 0xe00d, 0x1e1: 0x0008, 0x1e2: 0xe00d, 0x1e3: 0x0008,\n\t0x1e4: 0xe00d, 0x1e5: 0x0008, 0x1e6: 0xe00d, 0x1e7: 0x0008, 0x1e8: 0xe00d, 0x1e9: 0x0008,\n\t0x1ea: 0xe00d, 0x1eb: 0x0008, 0x1ec: 0xe00d, 0x1ed: 0x0008, 0x1ee: 0xe00d, 0x1ef: 0x0008,\n\t0x1f0: 0x0008, 0x1f1: 0x028d, 0x1f2: 0x02a5, 0x1f3: 0x02bd, 0x1f4: 0xe00d, 0x1f5: 0x0008,\n\t0x1f6: 0x02d5, 0x1f7: 0x02ed, 0x1f8: 0xe00d, 0x1f9: 0x0008, 0x1fa: 0xe00d, 0x1fb: 0x0008,\n\t0x1fc: 0xe00d, 0x1fd: 0x0008, 0x1fe: 0xe00d, 0x1ff: 0x0008,\n\t// Block 0x8, offset 0x200\n\t0x200: 0xe00d, 0x201: 0x0008, 0x202: 0xe00d, 0x203: 0x0008, 0x204: 0xe00d, 0x205: 0x0008,\n\t0x206: 0xe00d, 0x207: 0x0008, 0x208: 0xe00d, 0x209: 0x0008, 0x20a: 0xe00d, 0x20b: 0x0008,\n\t0x20c: 0xe00d, 0x20d: 0x0008, 0x20e: 0xe00d, 0x20f: 0x0008, 0x210: 0xe00d, 0x211: 0x0008,\n\t0x212: 0xe00d, 0x213: 0x0008, 0x214: 0xe00d, 0x215: 0x0008, 0x216: 0xe00d, 0x217: 0x0008,\n\t0x218: 0xe00d, 0x219: 0x0008, 0x21a: 0xe00d, 0x21b: 0x0008, 0x21c: 0xe00d, 0x21d: 0x0008,\n\t0x21e: 0xe00d, 0x21f: 0x0008, 0x220: 0x0305, 0x221: 0x0008, 0x222: 0xe00d, 0x223: 0x0008,\n\t0x224: 0xe00d, 0x225: 0x0008, 0x226: 0xe00d, 0x227: 0x0008, 0x228: 0xe00d, 0x229: 0x0008,\n\t0x22a: 0xe00d, 0x22b: 0x0008, 0x22c: 0xe00d, 0x22d: 0x0008, 0x22e: 0xe00d, 0x22f: 0x0008,\n\t0x230: 0xe00d, 0x231: 0x0008, 0x232: 0xe00d, 0x233: 0x0008, 0x234: 0x0008, 0x235: 0x0008,\n\t0x236: 0x0008, 0x237: 0x0008, 0x238: 0x0008, 0x239: 0x0008, 0x23a: 0x0209, 0x23b: 0xe03d,\n\t0x23c: 0x0008, 0x23d: 0x031d, 0x23e: 0x0229, 0x23f: 0x0008,\n\t// Block 0x9, offset 0x240\n\t0x240: 0x0008, 0x241: 0x0008, 0x242: 0x0018, 0x243: 0x0018, 0x244: 0x0018, 0x245: 0x0018,\n\t0x246: 0x0008, 0x247: 0x0008, 0x248: 0x0008, 0x249: 0x0008, 0x24a: 0x0008, 0x24b: 0x0008,\n\t0x24c: 0x0008, 0x24d: 0x0008, 0x24e: 0x0008, 0x24f: 0x0008, 0x250: 0x0008, 0x251: 0x0008,\n\t0x252: 0x0018, 0x253: 0x0018, 0x254: 0x0018, 0x255: 0x0018, 0x256: 0x0018, 0x257: 0x0018,\n\t0x258: 0x029a, 0x259: 0x02ba, 0x25a: 0x02da, 0x25b: 0x02fa, 0x25c: 0x031a, 0x25d: 0x033a,\n\t0x25e: 0x0018, 0x25f: 0x0018, 0x260: 0x03ad, 0x261: 0x0359, 0x262: 0x01d9, 0x263: 0x0369,\n\t0x264: 0x03c5, 0x265: 0x0018, 0x266: 0x0018, 0x267: 0x0018, 0x268: 0x0018, 0x269: 0x0018,\n\t0x26a: 0x0018, 0x26b: 0x0018, 0x26c: 0x0008, 0x26d: 0x0018, 0x26e: 0x0008, 0x26f: 0x0018,\n\t0x270: 0x0018, 0x271: 0x0018, 0x272: 0x0018, 0x273: 0x0018, 0x274: 0x0018, 0x275: 0x0018,\n\t0x276: 0x0018, 0x277: 0x0018, 0x278: 0x0018, 0x279: 0x0018, 0x27a: 0x0018, 0x27b: 0x0018,\n\t0x27c: 0x0018, 0x27d: 0x0018, 0x27e: 0x0018, 0x27f: 0x0018,\n\t// Block 0xa, offset 0x280\n\t0x280: 0x03dd, 0x281: 0x03dd, 0x282: 0x3308, 0x283: 0x03f5, 0x284: 0x0379, 0x285: 0x040d,\n\t0x286: 0x3308, 0x287: 0x3308, 0x288: 0x3308, 0x289: 0x3308, 0x28a: 0x3308, 0x28b: 0x3308,\n\t0x28c: 0x3308, 0x28d: 0x3308, 0x28e: 0x3308, 0x28f: 0x33c0, 0x290: 0x3308, 0x291: 0x3308,\n\t0x292: 0x3308, 0x293: 0x3308, 0x294: 0x3308, 0x295: 0x3308, 0x296: 0x3308, 0x297: 0x3308,\n\t0x298: 0x3308, 0x299: 0x3308, 0x29a: 0x3308, 0x29b: 0x3308, 0x29c: 0x3308, 0x29d: 0x3308,\n\t0x29e: 0x3308, 0x29f: 0x3308, 0x2a0: 0x3308, 0x2a1: 0x3308, 0x2a2: 0x3308, 0x2a3: 0x3308,\n\t0x2a4: 0x3308, 0x2a5: 0x3308, 0x2a6: 0x3308, 0x2a7: 0x3308, 0x2a8: 0x3308, 0x2a9: 0x3308,\n\t0x2aa: 0x3308, 0x2ab: 0x3308, 0x2ac: 0x3308, 0x2ad: 0x3308, 0x2ae: 0x3308, 0x2af: 0x3308,\n\t0x2b0: 0xe00d, 0x2b1: 0x0008, 0x2b2: 0xe00d, 0x2b3: 0x0008, 0x2b4: 0x0425, 0x2b5: 0x0008,\n\t0x2b6: 0xe00d, 0x2b7: 0x0008, 0x2b8: 0x0040, 0x2b9: 0x0040, 0x2ba: 0x03a2, 0x2bb: 0x0008,\n\t0x2bc: 0x0008, 0x2bd: 0x0008, 0x2be: 0x03c2, 0x2bf: 0x043d,\n\t// Block 0xb, offset 0x2c0\n\t0x2c0: 0x0040, 0x2c1: 0x0040, 0x2c2: 0x0040, 0x2c3: 0x0040, 0x2c4: 0x008a, 0x2c5: 0x03d2,\n\t0x2c6: 0xe155, 0x2c7: 0x0455, 0x2c8: 0xe12d, 0x2c9: 0xe13d, 0x2ca: 0xe12d, 0x2cb: 0x0040,\n\t0x2cc: 0x03dd, 0x2cd: 0x0040, 0x2ce: 0x046d, 0x2cf: 0x0485, 0x2d0: 0x0008, 0x2d1: 0xe105,\n\t0x2d2: 0xe105, 0x2d3: 0xe105, 0x2d4: 0xe105, 0x2d5: 0xe105, 0x2d6: 0xe105, 0x2d7: 0xe105,\n\t0x2d8: 0xe105, 0x2d9: 0xe105, 0x2da: 0xe105, 0x2db: 0xe105, 0x2dc: 0xe105, 0x2dd: 0xe105,\n\t0x2de: 0xe105, 0x2df: 0xe105, 0x2e0: 0x049d, 0x2e1: 0x049d, 0x2e2: 0x0040, 0x2e3: 0x049d,\n\t0x2e4: 0x049d, 0x2e5: 0x049d, 0x2e6: 0x049d, 0x2e7: 0x049d, 0x2e8: 0x049d, 0x2e9: 0x049d,\n\t0x2ea: 0x049d, 0x2eb: 0x049d, 0x2ec: 0x0008, 0x2ed: 0x0008, 0x2ee: 0x0008, 0x2ef: 0x0008,\n\t0x2f0: 0x0008, 0x2f1: 0x0008, 0x2f2: 0x0008, 0x2f3: 0x0008, 0x2f4: 0x0008, 0x2f5: 0x0008,\n\t0x2f6: 0x0008, 0x2f7: 0x0008, 0x2f8: 0x0008, 0x2f9: 0x0008, 0x2fa: 0x0008, 0x2fb: 0x0008,\n\t0x2fc: 0x0008, 0x2fd: 0x0008, 0x2fe: 0x0008, 0x2ff: 0x0008,\n\t// Block 0xc, offset 0x300\n\t0x300: 0x0008, 0x301: 0x0008, 0x302: 0xe00f, 0x303: 0x0008, 0x304: 0x0008, 0x305: 0x0008,\n\t0x306: 0x0008, 0x307: 0x0008, 0x308: 0x0008, 0x309: 0x0008, 0x30a: 0x0008, 0x30b: 0x0008,\n\t0x30c: 0x0008, 0x30d: 0x0008, 0x30e: 0x0008, 0x30f: 0xe0c5, 0x310: 0x04b5, 0x311: 0x04cd,\n\t0x312: 0xe0bd, 0x313: 0xe0f5, 0x314: 0xe0fd, 0x315: 0xe09d, 0x316: 0xe0b5, 0x317: 0x0008,\n\t0x318: 0xe00d, 0x319: 0x0008, 0x31a: 0xe00d, 0x31b: 0x0008, 0x31c: 0xe00d, 0x31d: 0x0008,\n\t0x31e: 0xe00d, 0x31f: 0x0008, 0x320: 0xe00d, 0x321: 0x0008, 0x322: 0xe00d, 0x323: 0x0008,\n\t0x324: 0xe00d, 0x325: 0x0008, 0x326: 0xe00d, 0x327: 0x0008, 0x328: 0xe00d, 0x329: 0x0008,\n\t0x32a: 0xe00d, 0x32b: 0x0008, 0x32c: 0xe00d, 0x32d: 0x0008, 0x32e: 0xe00d, 0x32f: 0x0008,\n\t0x330: 0x04e5, 0x331: 0xe185, 0x332: 0xe18d, 0x333: 0x0008, 0x334: 0x04fd, 0x335: 0x03dd,\n\t0x336: 0x0018, 0x337: 0xe07d, 0x338: 0x0008, 0x339: 0xe1d5, 0x33a: 0xe00d, 0x33b: 0x0008,\n\t0x33c: 0x0008, 0x33d: 0x0515, 0x33e: 0x052d, 0x33f: 0x052d,\n\t// Block 0xd, offset 0x340\n\t0x340: 0x0008, 0x341: 0x0008, 0x342: 0x0008, 0x343: 0x0008, 0x344: 0x0008, 0x345: 0x0008,\n\t0x346: 0x0008, 0x347: 0x0008, 0x348: 0x0008, 0x349: 0x0008, 0x34a: 0x0008, 0x34b: 0x0008,\n\t0x34c: 0x0008, 0x34d: 0x0008, 0x34e: 0x0008, 0x34f: 0x0008, 0x350: 0x0008, 0x351: 0x0008,\n\t0x352: 0x0008, 0x353: 0x0008, 0x354: 0x0008, 0x355: 0x0008, 0x356: 0x0008, 0x357: 0x0008,\n\t0x358: 0x0008, 0x359: 0x0008, 0x35a: 0x0008, 0x35b: 0x0008, 0x35c: 0x0008, 0x35d: 0x0008,\n\t0x35e: 0x0008, 0x35f: 0x0008, 0x360: 0xe00d, 0x361: 0x0008, 0x362: 0xe00d, 0x363: 0x0008,\n\t0x364: 0xe00d, 0x365: 0x0008, 0x366: 0xe00d, 0x367: 0x0008, 0x368: 0xe00d, 0x369: 0x0008,\n\t0x36a: 0xe00d, 0x36b: 0x0008, 0x36c: 0xe00d, 0x36d: 0x0008, 0x36e: 0xe00d, 0x36f: 0x0008,\n\t0x370: 0xe00d, 0x371: 0x0008, 0x372: 0xe00d, 0x373: 0x0008, 0x374: 0xe00d, 0x375: 0x0008,\n\t0x376: 0xe00d, 0x377: 0x0008, 0x378: 0xe00d, 0x379: 0x0008, 0x37a: 0xe00d, 0x37b: 0x0008,\n\t0x37c: 0xe00d, 0x37d: 0x0008, 0x37e: 0xe00d, 0x37f: 0x0008,\n\t// Block 0xe, offset 0x380\n\t0x380: 0xe00d, 0x381: 0x0008, 0x382: 0x0018, 0x383: 0x3308, 0x384: 0x3308, 0x385: 0x3308,\n\t0x386: 0x3308, 0x387: 0x3308, 0x388: 0x3318, 0x389: 0x3318, 0x38a: 0xe00d, 0x38b: 0x0008,\n\t0x38c: 0xe00d, 0x38d: 0x0008, 0x38e: 0xe00d, 0x38f: 0x0008, 0x390: 0xe00d, 0x391: 0x0008,\n\t0x392: 0xe00d, 0x393: 0x0008, 0x394: 0xe00d, 0x395: 0x0008, 0x396: 0xe00d, 0x397: 0x0008,\n\t0x398: 0xe00d, 0x399: 0x0008, 0x39a: 0xe00d, 0x39b: 0x0008, 0x39c: 0xe00d, 0x39d: 0x0008,\n\t0x39e: 0xe00d, 0x39f: 0x0008, 0x3a0: 0xe00d, 0x3a1: 0x0008, 0x3a2: 0xe00d, 0x3a3: 0x0008,\n\t0x3a4: 0xe00d, 0x3a5: 0x0008, 0x3a6: 0xe00d, 0x3a7: 0x0008, 0x3a8: 0xe00d, 0x3a9: 0x0008,\n\t0x3aa: 0xe00d, 0x3ab: 0x0008, 0x3ac: 0xe00d, 0x3ad: 0x0008, 0x3ae: 0xe00d, 0x3af: 0x0008,\n\t0x3b0: 0xe00d, 0x3b1: 0x0008, 0x3b2: 0xe00d, 0x3b3: 0x0008, 0x3b4: 0xe00d, 0x3b5: 0x0008,\n\t0x3b6: 0xe00d, 0x3b7: 0x0008, 0x3b8: 0xe00d, 0x3b9: 0x0008, 0x3ba: 0xe00d, 0x3bb: 0x0008,\n\t0x3bc: 0xe00d, 0x3bd: 0x0008, 0x3be: 0xe00d, 0x3bf: 0x0008,\n\t// Block 0xf, offset 0x3c0\n\t0x3c0: 0x0040, 0x3c1: 0xe01d, 0x3c2: 0x0008, 0x3c3: 0xe03d, 0x3c4: 0x0008, 0x3c5: 0xe01d,\n\t0x3c6: 0x0008, 0x3c7: 0xe07d, 0x3c8: 0x0008, 0x3c9: 0xe01d, 0x3ca: 0x0008, 0x3cb: 0xe03d,\n\t0x3cc: 0x0008, 0x3cd: 0xe01d, 0x3ce: 0x0008, 0x3cf: 0x0008, 0x3d0: 0xe00d, 0x3d1: 0x0008,\n\t0x3d2: 0xe00d, 0x3d3: 0x0008, 0x3d4: 0xe00d, 0x3d5: 0x0008, 0x3d6: 0xe00d, 0x3d7: 0x0008,\n\t0x3d8: 0xe00d, 0x3d9: 0x0008, 0x3da: 0xe00d, 0x3db: 0x0008, 0x3dc: 0xe00d, 0x3dd: 0x0008,\n\t0x3de: 0xe00d, 0x3df: 0x0008, 0x3e0: 0xe00d, 0x3e1: 0x0008, 0x3e2: 0xe00d, 0x3e3: 0x0008,\n\t0x3e4: 0xe00d, 0x3e5: 0x0008, 0x3e6: 0xe00d, 0x3e7: 0x0008, 0x3e8: 0xe00d, 0x3e9: 0x0008,\n\t0x3ea: 0xe00d, 0x3eb: 0x0008, 0x3ec: 0xe00d, 0x3ed: 0x0008, 0x3ee: 0xe00d, 0x3ef: 0x0008,\n\t0x3f0: 0xe00d, 0x3f1: 0x0008, 0x3f2: 0xe00d, 0x3f3: 0x0008, 0x3f4: 0xe00d, 0x3f5: 0x0008,\n\t0x3f6: 0xe00d, 0x3f7: 0x0008, 0x3f8: 0xe00d, 0x3f9: 0x0008, 0x3fa: 0xe00d, 0x3fb: 0x0008,\n\t0x3fc: 0xe00d, 0x3fd: 0x0008, 0x3fe: 0xe00d, 0x3ff: 0x0008,\n\t// Block 0x10, offset 0x400\n\t0x400: 0xe00d, 0x401: 0x0008, 0x402: 0xe00d, 0x403: 0x0008, 0x404: 0xe00d, 0x405: 0x0008,\n\t0x406: 0xe00d, 0x407: 0x0008, 0x408: 0xe00d, 0x409: 0x0008, 0x40a: 0xe00d, 0x40b: 0x0008,\n\t0x40c: 0xe00d, 0x40d: 0x0008, 0x40e: 0xe00d, 0x40f: 0x0008, 0x410: 0xe00d, 0x411: 0x0008,\n\t0x412: 0xe00d, 0x413: 0x0008, 0x414: 0xe00d, 0x415: 0x0008, 0x416: 0xe00d, 0x417: 0x0008,\n\t0x418: 0xe00d, 0x419: 0x0008, 0x41a: 0xe00d, 0x41b: 0x0008, 0x41c: 0xe00d, 0x41d: 0x0008,\n\t0x41e: 0xe00d, 0x41f: 0x0008, 0x420: 0xe00d, 0x421: 0x0008, 0x422: 0xe00d, 0x423: 0x0008,\n\t0x424: 0xe00d, 0x425: 0x0008, 0x426: 0xe00d, 0x427: 0x0008, 0x428: 0xe00d, 0x429: 0x0008,\n\t0x42a: 0xe00d, 0x42b: 0x0008, 0x42c: 0xe00d, 0x42d: 0x0008, 0x42e: 0xe00d, 0x42f: 0x0008,\n\t0x430: 0x0040, 0x431: 0x03f5, 0x432: 0x03f5, 0x433: 0x03f5, 0x434: 0x03f5, 0x435: 0x03f5,\n\t0x436: 0x03f5, 0x437: 0x03f5, 0x438: 0x03f5, 0x439: 0x03f5, 0x43a: 0x03f5, 0x43b: 0x03f5,\n\t0x43c: 0x03f5, 0x43d: 0x03f5, 0x43e: 0x03f5, 0x43f: 0x03f5,\n\t// Block 0x11, offset 0x440\n\t0x440: 0x0840, 0x441: 0x0840, 0x442: 0x0840, 0x443: 0x0840, 0x444: 0x0840, 0x445: 0x0840,\n\t0x446: 0x0018, 0x447: 0x0018, 0x448: 0x0818, 0x449: 0x0018, 0x44a: 0x0018, 0x44b: 0x0818,\n\t0x44c: 0x0018, 0x44d: 0x0818, 0x44e: 0x0018, 0x44f: 0x0018, 0x450: 0x3308, 0x451: 0x3308,\n\t0x452: 0x3308, 0x453: 0x3308, 0x454: 0x3308, 0x455: 0x3308, 0x456: 0x3308, 0x457: 0x3308,\n\t0x458: 0x3308, 0x459: 0x3308, 0x45a: 0x3308, 0x45b: 0x0818, 0x45c: 0x0b40, 0x45d: 0x0040,\n\t0x45e: 0x0818, 0x45f: 0x0818, 0x460: 0x0a08, 0x461: 0x0808, 0x462: 0x0c08, 0x463: 0x0c08,\n\t0x464: 0x0c08, 0x465: 0x0c08, 0x466: 0x0a08, 0x467: 0x0c08, 0x468: 0x0a08, 0x469: 0x0c08,\n\t0x46a: 0x0a08, 0x46b: 0x0a08, 0x46c: 0x0a08, 0x46d: 0x0a08, 0x46e: 0x0a08, 0x46f: 0x0c08,\n\t0x470: 0x0c08, 0x471: 0x0c08, 0x472: 0x0c08, 0x473: 0x0a08, 0x474: 0x0a08, 0x475: 0x0a08,\n\t0x476: 0x0a08, 0x477: 0x0a08, 0x478: 0x0a08, 0x479: 0x0a08, 0x47a: 0x0a08, 0x47b: 0x0a08,\n\t0x47c: 0x0a08, 0x47d: 0x0a08, 0x47e: 0x0a08, 0x47f: 0x0a08,\n\t// Block 0x12, offset 0x480\n\t0x480: 0x0818, 0x481: 0x0a08, 0x482: 0x0a08, 0x483: 0x0a08, 0x484: 0x0a08, 0x485: 0x0a08,\n\t0x486: 0x0a08, 0x487: 0x0a08, 0x488: 0x0c08, 0x489: 0x0a08, 0x48a: 0x0a08, 0x48b: 0x3308,\n\t0x48c: 0x3308, 0x48d: 0x3308, 0x48e: 0x3308, 0x48f: 0x3308, 0x490: 0x3308, 0x491: 0x3308,\n\t0x492: 0x3308, 0x493: 0x3308, 0x494: 0x3308, 0x495: 0x3308, 0x496: 0x3308, 0x497: 0x3308,\n\t0x498: 0x3308, 0x499: 0x3308, 0x49a: 0x3308, 0x49b: 0x3308, 0x49c: 0x3308, 0x49d: 0x3308,\n\t0x49e: 0x3308, 0x49f: 0x3308, 0x4a0: 0x0808, 0x4a1: 0x0808, 0x4a2: 0x0808, 0x4a3: 0x0808,\n\t0x4a4: 0x0808, 0x4a5: 0x0808, 0x4a6: 0x0808, 0x4a7: 0x0808, 0x4a8: 0x0808, 0x4a9: 0x0808,\n\t0x4aa: 0x0018, 0x4ab: 0x0818, 0x4ac: 0x0818, 0x4ad: 0x0818, 0x4ae: 0x0a08, 0x4af: 0x0a08,\n\t0x4b0: 0x3308, 0x4b1: 0x0c08, 0x4b2: 0x0c08, 0x4b3: 0x0c08, 0x4b4: 0x0808, 0x4b5: 0x0429,\n\t0x4b6: 0x0451, 0x4b7: 0x0479, 0x4b8: 0x04a1, 0x4b9: 0x0a08, 0x4ba: 0x0a08, 0x4bb: 0x0a08,\n\t0x4bc: 0x0a08, 0x4bd: 0x0a08, 0x4be: 0x0a08, 0x4bf: 0x0a08,\n\t// Block 0x13, offset 0x4c0\n\t0x4c0: 0x0c08, 0x4c1: 0x0a08, 0x4c2: 0x0a08, 0x4c3: 0x0c08, 0x4c4: 0x0c08, 0x4c5: 0x0c08,\n\t0x4c6: 0x0c08, 0x4c7: 0x0c08, 0x4c8: 0x0c08, 0x4c9: 0x0c08, 0x4ca: 0x0c08, 0x4cb: 0x0c08,\n\t0x4cc: 0x0a08, 0x4cd: 0x0c08, 0x4ce: 0x0a08, 0x4cf: 0x0c08, 0x4d0: 0x0a08, 0x4d1: 0x0a08,\n\t0x4d2: 0x0c08, 0x4d3: 0x0c08, 0x4d4: 0x0818, 0x4d5: 0x0c08, 0x4d6: 0x3308, 0x4d7: 0x3308,\n\t0x4d8: 0x3308, 0x4d9: 0x3308, 0x4da: 0x3308, 0x4db: 0x3308, 0x4dc: 0x3308, 0x4dd: 0x0840,\n\t0x4de: 0x0018, 0x4df: 0x3308, 0x4e0: 0x3308, 0x4e1: 0x3308, 0x4e2: 0x3308, 0x4e3: 0x3308,\n\t0x4e4: 0x3308, 0x4e5: 0x0808, 0x4e6: 0x0808, 0x4e7: 0x3308, 0x4e8: 0x3308, 0x4e9: 0x0018,\n\t0x4ea: 0x3308, 0x4eb: 0x3308, 0x4ec: 0x3308, 0x4ed: 0x3308, 0x4ee: 0x0c08, 0x4ef: 0x0c08,\n\t0x4f0: 0x0008, 0x4f1: 0x0008, 0x4f2: 0x0008, 0x4f3: 0x0008, 0x4f4: 0x0008, 0x4f5: 0x0008,\n\t0x4f6: 0x0008, 0x4f7: 0x0008, 0x4f8: 0x0008, 0x4f9: 0x0008, 0x4fa: 0x0a08, 0x4fb: 0x0a08,\n\t0x4fc: 0x0a08, 0x4fd: 0x0808, 0x4fe: 0x0808, 0x4ff: 0x0a08,\n\t// Block 0x14, offset 0x500\n\t0x500: 0x0818, 0x501: 0x0818, 0x502: 0x0818, 0x503: 0x0818, 0x504: 0x0818, 0x505: 0x0818,\n\t0x506: 0x0818, 0x507: 0x0818, 0x508: 0x0818, 0x509: 0x0818, 0x50a: 0x0818, 0x50b: 0x0818,\n\t0x50c: 0x0818, 0x50d: 0x0818, 0x50e: 0x0040, 0x50f: 0x0b40, 0x510: 0x0c08, 0x511: 0x3308,\n\t0x512: 0x0a08, 0x513: 0x0a08, 0x514: 0x0a08, 0x515: 0x0c08, 0x516: 0x0c08, 0x517: 0x0c08,\n\t0x518: 0x0c08, 0x519: 0x0c08, 0x51a: 0x0a08, 0x51b: 0x0a08, 0x51c: 0x0a08, 0x51d: 0x0a08,\n\t0x51e: 0x0c08, 0x51f: 0x0a08, 0x520: 0x0a08, 0x521: 0x0a08, 0x522: 0x0a08, 0x523: 0x0a08,\n\t0x524: 0x0a08, 0x525: 0x0a08, 0x526: 0x0a08, 0x527: 0x0a08, 0x528: 0x0c08, 0x529: 0x0a08,\n\t0x52a: 0x0c08, 0x52b: 0x0a08, 0x52c: 0x0c08, 0x52d: 0x0a08, 0x52e: 0x0a08, 0x52f: 0x0c08,\n\t0x530: 0x3308, 0x531: 0x3308, 0x532: 0x3308, 0x533: 0x3308, 0x534: 0x3308, 0x535: 0x3308,\n\t0x536: 0x3308, 0x537: 0x3308, 0x538: 0x3308, 0x539: 0x3308, 0x53a: 0x3308, 0x53b: 0x3308,\n\t0x53c: 0x3308, 0x53d: 0x3308, 0x53e: 0x3308, 0x53f: 0x3308,\n\t// Block 0x15, offset 0x540\n\t0x540: 0x3008, 0x541: 0x3308, 0x542: 0x3308, 0x543: 0x3308, 0x544: 0x3308, 0x545: 0x3308,\n\t0x546: 0x3308, 0x547: 0x3308, 0x548: 0x3308, 0x549: 0x3008, 0x54a: 0x3008, 0x54b: 0x3008,\n\t0x54c: 0x3008, 0x54d: 0x3b08, 0x54e: 0x3008, 0x54f: 0x3008, 0x550: 0x0008, 0x551: 0x3308,\n\t0x552: 0x3308, 0x553: 0x3308, 0x554: 0x3308, 0x555: 0x3308, 0x556: 0x3308, 0x557: 0x3308,\n\t0x558: 0x04c9, 0x559: 0x0501, 0x55a: 0x0539, 0x55b: 0x0571, 0x55c: 0x05a9, 0x55d: 0x05e1,\n\t0x55e: 0x0619, 0x55f: 0x0651, 0x560: 0x0008, 0x561: 0x0008, 0x562: 0x3308, 0x563: 0x3308,\n\t0x564: 0x0018, 0x565: 0x0018, 0x566: 0x0008, 0x567: 0x0008, 0x568: 0x0008, 0x569: 0x0008,\n\t0x56a: 0x0008, 0x56b: 0x0008, 0x56c: 0x0008, 0x56d: 0x0008, 0x56e: 0x0008, 0x56f: 0x0008,\n\t0x570: 0x0018, 0x571: 0x0008, 0x572: 0x0008, 0x573: 0x0008, 0x574: 0x0008, 0x575: 0x0008,\n\t0x576: 0x0008, 0x577: 0x0008, 0x578: 0x0008, 0x579: 0x0008, 0x57a: 0x0008, 0x57b: 0x0008,\n\t0x57c: 0x0008, 0x57d: 0x0008, 0x57e: 0x0008, 0x57f: 0x0008,\n\t// Block 0x16, offset 0x580\n\t0x580: 0x0008, 0x581: 0x3308, 0x582: 0x3008, 0x583: 0x3008, 0x584: 0x0040, 0x585: 0x0008,\n\t0x586: 0x0008, 0x587: 0x0008, 0x588: 0x0008, 0x589: 0x0008, 0x58a: 0x0008, 0x58b: 0x0008,\n\t0x58c: 0x0008, 0x58d: 0x0040, 0x58e: 0x0040, 0x58f: 0x0008, 0x590: 0x0008, 0x591: 0x0040,\n\t0x592: 0x0040, 0x593: 0x0008, 0x594: 0x0008, 0x595: 0x0008, 0x596: 0x0008, 0x597: 0x0008,\n\t0x598: 0x0008, 0x599: 0x0008, 0x59a: 0x0008, 0x59b: 0x0008, 0x59c: 0x0008, 0x59d: 0x0008,\n\t0x59e: 0x0008, 0x59f: 0x0008, 0x5a0: 0x0008, 0x5a1: 0x0008, 0x5a2: 0x0008, 0x5a3: 0x0008,\n\t0x5a4: 0x0008, 0x5a5: 0x0008, 0x5a6: 0x0008, 0x5a7: 0x0008, 0x5a8: 0x0008, 0x5a9: 0x0040,\n\t0x5aa: 0x0008, 0x5ab: 0x0008, 0x5ac: 0x0008, 0x5ad: 0x0008, 0x5ae: 0x0008, 0x5af: 0x0008,\n\t0x5b0: 0x0008, 0x5b1: 0x0040, 0x5b2: 0x0008, 0x5b3: 0x0040, 0x5b4: 0x0040, 0x5b5: 0x0040,\n\t0x5b6: 0x0008, 0x5b7: 0x0008, 0x5b8: 0x0008, 0x5b9: 0x0008, 0x5ba: 0x0040, 0x5bb: 0x0040,\n\t0x5bc: 0x3308, 0x5bd: 0x0008, 0x5be: 0x3008, 0x5bf: 0x3008,\n\t// Block 0x17, offset 0x5c0\n\t0x5c0: 0x3008, 0x5c1: 0x3308, 0x5c2: 0x3308, 0x5c3: 0x3308, 0x5c4: 0x3308, 0x5c5: 0x0040,\n\t0x5c6: 0x0040, 0x5c7: 0x3008, 0x5c8: 0x3008, 0x5c9: 0x0040, 0x5ca: 0x0040, 0x5cb: 0x3008,\n\t0x5cc: 0x3008, 0x5cd: 0x3b08, 0x5ce: 0x0008, 0x5cf: 0x0040, 0x5d0: 0x0040, 0x5d1: 0x0040,\n\t0x5d2: 0x0040, 0x5d3: 0x0040, 0x5d4: 0x0040, 0x5d5: 0x0040, 0x5d6: 0x0040, 0x5d7: 0x3008,\n\t0x5d8: 0x0040, 0x5d9: 0x0040, 0x5da: 0x0040, 0x5db: 0x0040, 0x5dc: 0x0689, 0x5dd: 0x06c1,\n\t0x5de: 0x0040, 0x5df: 0x06f9, 0x5e0: 0x0008, 0x5e1: 0x0008, 0x5e2: 0x3308, 0x5e3: 0x3308,\n\t0x5e4: 0x0040, 0x5e5: 0x0040, 0x5e6: 0x0008, 0x5e7: 0x0008, 0x5e8: 0x0008, 0x5e9: 0x0008,\n\t0x5ea: 0x0008, 0x5eb: 0x0008, 0x5ec: 0x0008, 0x5ed: 0x0008, 0x5ee: 0x0008, 0x5ef: 0x0008,\n\t0x5f0: 0x0008, 0x5f1: 0x0008, 0x5f2: 0x0018, 0x5f3: 0x0018, 0x5f4: 0x0018, 0x5f5: 0x0018,\n\t0x5f6: 0x0018, 0x5f7: 0x0018, 0x5f8: 0x0018, 0x5f9: 0x0018, 0x5fa: 0x0018, 0x5fb: 0x0018,\n\t0x5fc: 0x0040, 0x5fd: 0x0040, 0x5fe: 0x0040, 0x5ff: 0x0040,\n\t// Block 0x18, offset 0x600\n\t0x600: 0x0040, 0x601: 0x3308, 0x602: 0x3308, 0x603: 0x3008, 0x604: 0x0040, 0x605: 0x0008,\n\t0x606: 0x0008, 0x607: 0x0008, 0x608: 0x0008, 0x609: 0x0008, 0x60a: 0x0008, 0x60b: 0x0040,\n\t0x60c: 0x0040, 0x60d: 0x0040, 0x60e: 0x0040, 0x60f: 0x0008, 0x610: 0x0008, 0x611: 0x0040,\n\t0x612: 0x0040, 0x613: 0x0008, 0x614: 0x0008, 0x615: 0x0008, 0x616: 0x0008, 0x617: 0x0008,\n\t0x618: 0x0008, 0x619: 0x0008, 0x61a: 0x0008, 0x61b: 0x0008, 0x61c: 0x0008, 0x61d: 0x0008,\n\t0x61e: 0x0008, 0x61f: 0x0008, 0x620: 0x0008, 0x621: 0x0008, 0x622: 0x0008, 0x623: 0x0008,\n\t0x624: 0x0008, 0x625: 0x0008, 0x626: 0x0008, 0x627: 0x0008, 0x628: 0x0008, 0x629: 0x0040,\n\t0x62a: 0x0008, 0x62b: 0x0008, 0x62c: 0x0008, 0x62d: 0x0008, 0x62e: 0x0008, 0x62f: 0x0008,\n\t0x630: 0x0008, 0x631: 0x0040, 0x632: 0x0008, 0x633: 0x0731, 0x634: 0x0040, 0x635: 0x0008,\n\t0x636: 0x0769, 0x637: 0x0040, 0x638: 0x0008, 0x639: 0x0008, 0x63a: 0x0040, 0x63b: 0x0040,\n\t0x63c: 0x3308, 0x63d: 0x0040, 0x63e: 0x3008, 0x63f: 0x3008,\n\t// Block 0x19, offset 0x640\n\t0x640: 0x3008, 0x641: 0x3308, 0x642: 0x3308, 0x643: 0x0040, 0x644: 0x0040, 0x645: 0x0040,\n\t0x646: 0x0040, 0x647: 0x3308, 0x648: 0x3308, 0x649: 0x0040, 0x64a: 0x0040, 0x64b: 0x3308,\n\t0x64c: 0x3308, 0x64d: 0x3b08, 0x64e: 0x0040, 0x64f: 0x0040, 0x650: 0x0040, 0x651: 0x3308,\n\t0x652: 0x0040, 0x653: 0x0040, 0x654: 0x0040, 0x655: 0x0040, 0x656: 0x0040, 0x657: 0x0040,\n\t0x658: 0x0040, 0x659: 0x07a1, 0x65a: 0x07d9, 0x65b: 0x0811, 0x65c: 0x0008, 0x65d: 0x0040,\n\t0x65e: 0x0849, 0x65f: 0x0040, 0x660: 0x0040, 0x661: 0x0040, 0x662: 0x0040, 0x663: 0x0040,\n\t0x664: 0x0040, 0x665: 0x0040, 0x666: 0x0008, 0x667: 0x0008, 0x668: 0x0008, 0x669: 0x0008,\n\t0x66a: 0x0008, 0x66b: 0x0008, 0x66c: 0x0008, 0x66d: 0x0008, 0x66e: 0x0008, 0x66f: 0x0008,\n\t0x670: 0x3308, 0x671: 0x3308, 0x672: 0x0008, 0x673: 0x0008, 0x674: 0x0008, 0x675: 0x3308,\n\t0x676: 0x0040, 0x677: 0x0040, 0x678: 0x0040, 0x679: 0x0040, 0x67a: 0x0040, 0x67b: 0x0040,\n\t0x67c: 0x0040, 0x67d: 0x0040, 0x67e: 0x0040, 0x67f: 0x0040,\n\t// Block 0x1a, offset 0x680\n\t0x680: 0x0040, 0x681: 0x3308, 0x682: 0x3308, 0x683: 0x3008, 0x684: 0x0040, 0x685: 0x0008,\n\t0x686: 0x0008, 0x687: 0x0008, 0x688: 0x0008, 0x689: 0x0008, 0x68a: 0x0008, 0x68b: 0x0008,\n\t0x68c: 0x0008, 0x68d: 0x0008, 0x68e: 0x0040, 0x68f: 0x0008, 0x690: 0x0008, 0x691: 0x0008,\n\t0x692: 0x0040, 0x693: 0x0008, 0x694: 0x0008, 0x695: 0x0008, 0x696: 0x0008, 0x697: 0x0008,\n\t0x698: 0x0008, 0x699: 0x0008, 0x69a: 0x0008, 0x69b: 0x0008, 0x69c: 0x0008, 0x69d: 0x0008,\n\t0x69e: 0x0008, 0x69f: 0x0008, 0x6a0: 0x0008, 0x6a1: 0x0008, 0x6a2: 0x0008, 0x6a3: 0x0008,\n\t0x6a4: 0x0008, 0x6a5: 0x0008, 0x6a6: 0x0008, 0x6a7: 0x0008, 0x6a8: 0x0008, 0x6a9: 0x0040,\n\t0x6aa: 0x0008, 0x6ab: 0x0008, 0x6ac: 0x0008, 0x6ad: 0x0008, 0x6ae: 0x0008, 0x6af: 0x0008,\n\t0x6b0: 0x0008, 0x6b1: 0x0040, 0x6b2: 0x0008, 0x6b3: 0x0008, 0x6b4: 0x0040, 0x6b5: 0x0008,\n\t0x6b6: 0x0008, 0x6b7: 0x0008, 0x6b8: 0x0008, 0x6b9: 0x0008, 0x6ba: 0x0040, 0x6bb: 0x0040,\n\t0x6bc: 0x3308, 0x6bd: 0x0008, 0x6be: 0x3008, 0x6bf: 0x3008,\n\t// Block 0x1b, offset 0x6c0\n\t0x6c0: 0x3008, 0x6c1: 0x3308, 0x6c2: 0x3308, 0x6c3: 0x3308, 0x6c4: 0x3308, 0x6c5: 0x3308,\n\t0x6c6: 0x0040, 0x6c7: 0x3308, 0x6c8: 0x3308, 0x6c9: 0x3008, 0x6ca: 0x0040, 0x6cb: 0x3008,\n\t0x6cc: 0x3008, 0x6cd: 0x3b08, 0x6ce: 0x0040, 0x6cf: 0x0040, 0x6d0: 0x0008, 0x6d1: 0x0040,\n\t0x6d2: 0x0040, 0x6d3: 0x0040, 0x6d4: 0x0040, 0x6d5: 0x0040, 0x6d6: 0x0040, 0x6d7: 0x0040,\n\t0x6d8: 0x0040, 0x6d9: 0x0040, 0x6da: 0x0040, 0x6db: 0x0040, 0x6dc: 0x0040, 0x6dd: 0x0040,\n\t0x6de: 0x0040, 0x6df: 0x0040, 0x6e0: 0x0008, 0x6e1: 0x0008, 0x6e2: 0x3308, 0x6e3: 0x3308,\n\t0x6e4: 0x0040, 0x6e5: 0x0040, 0x6e6: 0x0008, 0x6e7: 0x0008, 0x6e8: 0x0008, 0x6e9: 0x0008,\n\t0x6ea: 0x0008, 0x6eb: 0x0008, 0x6ec: 0x0008, 0x6ed: 0x0008, 0x6ee: 0x0008, 0x6ef: 0x0008,\n\t0x6f0: 0x0018, 0x6f1: 0x0018, 0x6f2: 0x0040, 0x6f3: 0x0040, 0x6f4: 0x0040, 0x6f5: 0x0040,\n\t0x6f6: 0x0040, 0x6f7: 0x0040, 0x6f8: 0x0040, 0x6f9: 0x0008, 0x6fa: 0x0040, 0x6fb: 0x0040,\n\t0x6fc: 0x0040, 0x6fd: 0x0040, 0x6fe: 0x0040, 0x6ff: 0x0040,\n\t// Block 0x1c, offset 0x700\n\t0x700: 0x0040, 0x701: 0x3308, 0x702: 0x3008, 0x703: 0x3008, 0x704: 0x0040, 0x705: 0x0008,\n\t0x706: 0x0008, 0x707: 0x0008, 0x708: 0x0008, 0x709: 0x0008, 0x70a: 0x0008, 0x70b: 0x0008,\n\t0x70c: 0x0008, 0x70d: 0x0040, 0x70e: 0x0040, 0x70f: 0x0008, 0x710: 0x0008, 0x711: 0x0040,\n\t0x712: 0x0040, 0x713: 0x0008, 0x714: 0x0008, 0x715: 0x0008, 0x716: 0x0008, 0x717: 0x0008,\n\t0x718: 0x0008, 0x719: 0x0008, 0x71a: 0x0008, 0x71b: 0x0008, 0x71c: 0x0008, 0x71d: 0x0008,\n\t0x71e: 0x0008, 0x71f: 0x0008, 0x720: 0x0008, 0x721: 0x0008, 0x722: 0x0008, 0x723: 0x0008,\n\t0x724: 0x0008, 0x725: 0x0008, 0x726: 0x0008, 0x727: 0x0008, 0x728: 0x0008, 0x729: 0x0040,\n\t0x72a: 0x0008, 0x72b: 0x0008, 0x72c: 0x0008, 0x72d: 0x0008, 0x72e: 0x0008, 0x72f: 0x0008,\n\t0x730: 0x0008, 0x731: 0x0040, 0x732: 0x0008, 0x733: 0x0008, 0x734: 0x0040, 0x735: 0x0008,\n\t0x736: 0x0008, 0x737: 0x0008, 0x738: 0x0008, 0x739: 0x0008, 0x73a: 0x0040, 0x73b: 0x0040,\n\t0x73c: 0x3308, 0x73d: 0x0008, 0x73e: 0x3008, 0x73f: 0x3308,\n\t// Block 0x1d, offset 0x740\n\t0x740: 0x3008, 0x741: 0x3308, 0x742: 0x3308, 0x743: 0x3308, 0x744: 0x3308, 0x745: 0x0040,\n\t0x746: 0x0040, 0x747: 0x3008, 0x748: 0x3008, 0x749: 0x0040, 0x74a: 0x0040, 0x74b: 0x3008,\n\t0x74c: 0x3008, 0x74d: 0x3b08, 0x74e: 0x0040, 0x74f: 0x0040, 0x750: 0x0040, 0x751: 0x0040,\n\t0x752: 0x0040, 0x753: 0x0040, 0x754: 0x0040, 0x755: 0x0040, 0x756: 0x3308, 0x757: 0x3008,\n\t0x758: 0x0040, 0x759: 0x0040, 0x75a: 0x0040, 0x75b: 0x0040, 0x75c: 0x0881, 0x75d: 0x08b9,\n\t0x75e: 0x0040, 0x75f: 0x0008, 0x760: 0x0008, 0x761: 0x0008, 0x762: 0x3308, 0x763: 0x3308,\n\t0x764: 0x0040, 0x765: 0x0040, 0x766: 0x0008, 0x767: 0x0008, 0x768: 0x0008, 0x769: 0x0008,\n\t0x76a: 0x0008, 0x76b: 0x0008, 0x76c: 0x0008, 0x76d: 0x0008, 0x76e: 0x0008, 0x76f: 0x0008,\n\t0x770: 0x0018, 0x771: 0x0008, 0x772: 0x0018, 0x773: 0x0018, 0x774: 0x0018, 0x775: 0x0018,\n\t0x776: 0x0018, 0x777: 0x0018, 0x778: 0x0040, 0x779: 0x0040, 0x77a: 0x0040, 0x77b: 0x0040,\n\t0x77c: 0x0040, 0x77d: 0x0040, 0x77e: 0x0040, 0x77f: 0x0040,\n\t// Block 0x1e, offset 0x780\n\t0x780: 0x0040, 0x781: 0x0040, 0x782: 0x3308, 0x783: 0x0008, 0x784: 0x0040, 0x785: 0x0008,\n\t0x786: 0x0008, 0x787: 0x0008, 0x788: 0x0008, 0x789: 0x0008, 0x78a: 0x0008, 0x78b: 0x0040,\n\t0x78c: 0x0040, 0x78d: 0x0040, 0x78e: 0x0008, 0x78f: 0x0008, 0x790: 0x0008, 0x791: 0x0040,\n\t0x792: 0x0008, 0x793: 0x0008, 0x794: 0x0008, 0x795: 0x0008, 0x796: 0x0040, 0x797: 0x0040,\n\t0x798: 0x0040, 0x799: 0x0008, 0x79a: 0x0008, 0x79b: 0x0040, 0x79c: 0x0008, 0x79d: 0x0040,\n\t0x79e: 0x0008, 0x79f: 0x0008, 0x7a0: 0x0040, 0x7a1: 0x0040, 0x7a2: 0x0040, 0x7a3: 0x0008,\n\t0x7a4: 0x0008, 0x7a5: 0x0040, 0x7a6: 0x0040, 0x7a7: 0x0040, 0x7a8: 0x0008, 0x7a9: 0x0008,\n\t0x7aa: 0x0008, 0x7ab: 0x0040, 0x7ac: 0x0040, 0x7ad: 0x0040, 0x7ae: 0x0008, 0x7af: 0x0008,\n\t0x7b0: 0x0008, 0x7b1: 0x0008, 0x7b2: 0x0008, 0x7b3: 0x0008, 0x7b4: 0x0008, 0x7b5: 0x0008,\n\t0x7b6: 0x0008, 0x7b7: 0x0008, 0x7b8: 0x0008, 0x7b9: 0x0008, 0x7ba: 0x0040, 0x7bb: 0x0040,\n\t0x7bc: 0x0040, 0x7bd: 0x0040, 0x7be: 0x3008, 0x7bf: 0x3008,\n\t// Block 0x1f, offset 0x7c0\n\t0x7c0: 0x3308, 0x7c1: 0x3008, 0x7c2: 0x3008, 0x7c3: 0x3008, 0x7c4: 0x3008, 0x7c5: 0x0040,\n\t0x7c6: 0x3308, 0x7c7: 0x3308, 0x7c8: 0x3308, 0x7c9: 0x0040, 0x7ca: 0x3308, 0x7cb: 0x3308,\n\t0x7cc: 0x3308, 0x7cd: 0x3b08, 0x7ce: 0x0040, 0x7cf: 0x0040, 0x7d0: 0x0040, 0x7d1: 0x0040,\n\t0x7d2: 0x0040, 0x7d3: 0x0040, 0x7d4: 0x0040, 0x7d5: 0x3308, 0x7d6: 0x3308, 0x7d7: 0x0040,\n\t0x7d8: 0x0008, 0x7d9: 0x0008, 0x7da: 0x0008, 0x7db: 0x0040, 0x7dc: 0x0040, 0x7dd: 0x0040,\n\t0x7de: 0x0040, 0x7df: 0x0040, 0x7e0: 0x0008, 0x7e1: 0x0008, 0x7e2: 0x3308, 0x7e3: 0x3308,\n\t0x7e4: 0x0040, 0x7e5: 0x0040, 0x7e6: 0x0008, 0x7e7: 0x0008, 0x7e8: 0x0008, 0x7e9: 0x0008,\n\t0x7ea: 0x0008, 0x7eb: 0x0008, 0x7ec: 0x0008, 0x7ed: 0x0008, 0x7ee: 0x0008, 0x7ef: 0x0008,\n\t0x7f0: 0x0040, 0x7f1: 0x0040, 0x7f2: 0x0040, 0x7f3: 0x0040, 0x7f4: 0x0040, 0x7f5: 0x0040,\n\t0x7f6: 0x0040, 0x7f7: 0x0040, 0x7f8: 0x0018, 0x7f9: 0x0018, 0x7fa: 0x0018, 0x7fb: 0x0018,\n\t0x7fc: 0x0018, 0x7fd: 0x0018, 0x7fe: 0x0018, 0x7ff: 0x0018,\n\t// Block 0x20, offset 0x800\n\t0x800: 0x0008, 0x801: 0x3308, 0x802: 0x3008, 0x803: 0x3008, 0x804: 0x0040, 0x805: 0x0008,\n\t0x806: 0x0008, 0x807: 0x0008, 0x808: 0x0008, 0x809: 0x0008, 0x80a: 0x0008, 0x80b: 0x0008,\n\t0x80c: 0x0008, 0x80d: 0x0040, 0x80e: 0x0008, 0x80f: 0x0008, 0x810: 0x0008, 0x811: 0x0040,\n\t0x812: 0x0008, 0x813: 0x0008, 0x814: 0x0008, 0x815: 0x0008, 0x816: 0x0008, 0x817: 0x0008,\n\t0x818: 0x0008, 0x819: 0x0008, 0x81a: 0x0008, 0x81b: 0x0008, 0x81c: 0x0008, 0x81d: 0x0008,\n\t0x81e: 0x0008, 0x81f: 0x0008, 0x820: 0x0008, 0x821: 0x0008, 0x822: 0x0008, 0x823: 0x0008,\n\t0x824: 0x0008, 0x825: 0x0008, 0x826: 0x0008, 0x827: 0x0008, 0x828: 0x0008, 0x829: 0x0040,\n\t0x82a: 0x0008, 0x82b: 0x0008, 0x82c: 0x0008, 0x82d: 0x0008, 0x82e: 0x0008, 0x82f: 0x0008,\n\t0x830: 0x0008, 0x831: 0x0008, 0x832: 0x0008, 0x833: 0x0008, 0x834: 0x0040, 0x835: 0x0008,\n\t0x836: 0x0008, 0x837: 0x0008, 0x838: 0x0008, 0x839: 0x0008, 0x83a: 0x0040, 0x83b: 0x0040,\n\t0x83c: 0x3308, 0x83d: 0x0008, 0x83e: 0x3008, 0x83f: 0x3308,\n\t// Block 0x21, offset 0x840\n\t0x840: 0x3008, 0x841: 0x3008, 0x842: 0x3008, 0x843: 0x3008, 0x844: 0x3008, 0x845: 0x0040,\n\t0x846: 0x3308, 0x847: 0x3008, 0x848: 0x3008, 0x849: 0x0040, 0x84a: 0x3008, 0x84b: 0x3008,\n\t0x84c: 0x3308, 0x84d: 0x3b08, 0x84e: 0x0040, 0x84f: 0x0040, 0x850: 0x0040, 0x851: 0x0040,\n\t0x852: 0x0040, 0x853: 0x0040, 0x854: 0x0040, 0x855: 0x3008, 0x856: 0x3008, 0x857: 0x0040,\n\t0x858: 0x0040, 0x859: 0x0040, 0x85a: 0x0040, 0x85b: 0x0040, 0x85c: 0x0040, 0x85d: 0x0040,\n\t0x85e: 0x0008, 0x85f: 0x0040, 0x860: 0x0008, 0x861: 0x0008, 0x862: 0x3308, 0x863: 0x3308,\n\t0x864: 0x0040, 0x865: 0x0040, 0x866: 0x0008, 0x867: 0x0008, 0x868: 0x0008, 0x869: 0x0008,\n\t0x86a: 0x0008, 0x86b: 0x0008, 0x86c: 0x0008, 0x86d: 0x0008, 0x86e: 0x0008, 0x86f: 0x0008,\n\t0x870: 0x0040, 0x871: 0x0008, 0x872: 0x0008, 0x873: 0x0040, 0x874: 0x0040, 0x875: 0x0040,\n\t0x876: 0x0040, 0x877: 0x0040, 0x878: 0x0040, 0x879: 0x0040, 0x87a: 0x0040, 0x87b: 0x0040,\n\t0x87c: 0x0040, 0x87d: 0x0040, 0x87e: 0x0040, 0x87f: 0x0040,\n\t// Block 0x22, offset 0x880\n\t0x880: 0x3008, 0x881: 0x3308, 0x882: 0x3308, 0x883: 0x3308, 0x884: 0x3308, 0x885: 0x0040,\n\t0x886: 0x3008, 0x887: 0x3008, 0x888: 0x3008, 0x889: 0x0040, 0x88a: 0x3008, 0x88b: 0x3008,\n\t0x88c: 0x3008, 0x88d: 0x3b08, 0x88e: 0x0008, 0x88f: 0x0018, 0x890: 0x0040, 0x891: 0x0040,\n\t0x892: 0x0040, 0x893: 0x0040, 0x894: 0x0008, 0x895: 0x0008, 0x896: 0x0008, 0x897: 0x3008,\n\t0x898: 0x0018, 0x899: 0x0018, 0x89a: 0x0018, 0x89b: 0x0018, 0x89c: 0x0018, 0x89d: 0x0018,\n\t0x89e: 0x0018, 0x89f: 0x0008, 0x8a0: 0x0008, 0x8a1: 0x0008, 0x8a2: 0x3308, 0x8a3: 0x3308,\n\t0x8a4: 0x0040, 0x8a5: 0x0040, 0x8a6: 0x0008, 0x8a7: 0x0008, 0x8a8: 0x0008, 0x8a9: 0x0008,\n\t0x8aa: 0x0008, 0x8ab: 0x0008, 0x8ac: 0x0008, 0x8ad: 0x0008, 0x8ae: 0x0008, 0x8af: 0x0008,\n\t0x8b0: 0x0018, 0x8b1: 0x0018, 0x8b2: 0x0018, 0x8b3: 0x0018, 0x8b4: 0x0018, 0x8b5: 0x0018,\n\t0x8b6: 0x0018, 0x8b7: 0x0018, 0x8b8: 0x0018, 0x8b9: 0x0018, 0x8ba: 0x0008, 0x8bb: 0x0008,\n\t0x8bc: 0x0008, 0x8bd: 0x0008, 0x8be: 0x0008, 0x8bf: 0x0008,\n\t// Block 0x23, offset 0x8c0\n\t0x8c0: 0x0040, 0x8c1: 0x0008, 0x8c2: 0x0008, 0x8c3: 0x0040, 0x8c4: 0x0008, 0x8c5: 0x0040,\n\t0x8c6: 0x0040, 0x8c7: 0x0008, 0x8c8: 0x0008, 0x8c9: 0x0040, 0x8ca: 0x0008, 0x8cb: 0x0040,\n\t0x8cc: 0x0040, 0x8cd: 0x0008, 0x8ce: 0x0040, 0x8cf: 0x0040, 0x8d0: 0x0040, 0x8d1: 0x0040,\n\t0x8d2: 0x0040, 0x8d3: 0x0040, 0x8d4: 0x0008, 0x8d5: 0x0008, 0x8d6: 0x0008, 0x8d7: 0x0008,\n\t0x8d8: 0x0040, 0x8d9: 0x0008, 0x8da: 0x0008, 0x8db: 0x0008, 0x8dc: 0x0008, 0x8dd: 0x0008,\n\t0x8de: 0x0008, 0x8df: 0x0008, 0x8e0: 0x0040, 0x8e1: 0x0008, 0x8e2: 0x0008, 0x8e3: 0x0008,\n\t0x8e4: 0x0040, 0x8e5: 0x0008, 0x8e6: 0x0040, 0x8e7: 0x0008, 0x8e8: 0x0040, 0x8e9: 0x0040,\n\t0x8ea: 0x0008, 0x8eb: 0x0008, 0x8ec: 0x0040, 0x8ed: 0x0008, 0x8ee: 0x0008, 0x8ef: 0x0008,\n\t0x8f0: 0x0008, 0x8f1: 0x3308, 0x8f2: 0x0008, 0x8f3: 0x0929, 0x8f4: 0x3308, 0x8f5: 0x3308,\n\t0x8f6: 0x3308, 0x8f7: 0x3308, 0x8f8: 0x3308, 0x8f9: 0x3308, 0x8fa: 0x0040, 0x8fb: 0x3308,\n\t0x8fc: 0x3308, 0x8fd: 0x0008, 0x8fe: 0x0040, 0x8ff: 0x0040,\n\t// Block 0x24, offset 0x900\n\t0x900: 0x0008, 0x901: 0x0008, 0x902: 0x0008, 0x903: 0x09d1, 0x904: 0x0008, 0x905: 0x0008,\n\t0x906: 0x0008, 0x907: 0x0008, 0x908: 0x0040, 0x909: 0x0008, 0x90a: 0x0008, 0x90b: 0x0008,\n\t0x90c: 0x0008, 0x90d: 0x0a09, 0x90e: 0x0008, 0x90f: 0x0008, 0x910: 0x0008, 0x911: 0x0008,\n\t0x912: 0x0a41, 0x913: 0x0008, 0x914: 0x0008, 0x915: 0x0008, 0x916: 0x0008, 0x917: 0x0a79,\n\t0x918: 0x0008, 0x919: 0x0008, 0x91a: 0x0008, 0x91b: 0x0008, 0x91c: 0x0ab1, 0x91d: 0x0008,\n\t0x91e: 0x0008, 0x91f: 0x0008, 0x920: 0x0008, 0x921: 0x0008, 0x922: 0x0008, 0x923: 0x0008,\n\t0x924: 0x0008, 0x925: 0x0008, 0x926: 0x0008, 0x927: 0x0008, 0x928: 0x0008, 0x929: 0x0ae9,\n\t0x92a: 0x0008, 0x92b: 0x0008, 0x92c: 0x0008, 0x92d: 0x0040, 0x92e: 0x0040, 0x92f: 0x0040,\n\t0x930: 0x0040, 0x931: 0x3308, 0x932: 0x3308, 0x933: 0x0b21, 0x934: 0x3308, 0x935: 0x0b59,\n\t0x936: 0x0b91, 0x937: 0x0bc9, 0x938: 0x0c19, 0x939: 0x0c51, 0x93a: 0x3308, 0x93b: 0x3308,\n\t0x93c: 0x3308, 0x93d: 0x3308, 0x93e: 0x3308, 0x93f: 0x3008,\n\t// Block 0x25, offset 0x940\n\t0x940: 0x3308, 0x941: 0x0ca1, 0x942: 0x3308, 0x943: 0x3308, 0x944: 0x3b08, 0x945: 0x0018,\n\t0x946: 0x3308, 0x947: 0x3308, 0x948: 0x0008, 0x949: 0x0008, 0x94a: 0x0008, 0x94b: 0x0008,\n\t0x94c: 0x0008, 0x94d: 0x3308, 0x94e: 0x3308, 0x94f: 0x3308, 0x950: 0x3308, 0x951: 0x3308,\n\t0x952: 0x3308, 0x953: 0x0cd9, 0x954: 0x3308, 0x955: 0x3308, 0x956: 0x3308, 0x957: 0x3308,\n\t0x958: 0x0040, 0x959: 0x3308, 0x95a: 0x3308, 0x95b: 0x3308, 0x95c: 0x3308, 0x95d: 0x0d11,\n\t0x95e: 0x3308, 0x95f: 0x3308, 0x960: 0x3308, 0x961: 0x3308, 0x962: 0x0d49, 0x963: 0x3308,\n\t0x964: 0x3308, 0x965: 0x3308, 0x966: 0x3308, 0x967: 0x0d81, 0x968: 0x3308, 0x969: 0x3308,\n\t0x96a: 0x3308, 0x96b: 0x3308, 0x96c: 0x0db9, 0x96d: 0x3308, 0x96e: 0x3308, 0x96f: 0x3308,\n\t0x970: 0x3308, 0x971: 0x3308, 0x972: 0x3308, 0x973: 0x3308, 0x974: 0x3308, 0x975: 0x3308,\n\t0x976: 0x3308, 0x977: 0x3308, 0x978: 0x3308, 0x979: 0x0df1, 0x97a: 0x3308, 0x97b: 0x3308,\n\t0x97c: 0x3308, 0x97d: 0x0040, 0x97e: 0x0018, 0x97f: 0x0018,\n\t// Block 0x26, offset 0x980\n\t0x980: 0x0008, 0x981: 0x0008, 0x982: 0x0008, 0x983: 0x0008, 0x984: 0x0008, 0x985: 0x0008,\n\t0x986: 0x0008, 0x987: 0x0008, 0x988: 0x0008, 0x989: 0x0008, 0x98a: 0x0008, 0x98b: 0x0008,\n\t0x98c: 0x0008, 0x98d: 0x0008, 0x98e: 0x0008, 0x98f: 0x0008, 0x990: 0x0008, 0x991: 0x0008,\n\t0x992: 0x0008, 0x993: 0x0008, 0x994: 0x0008, 0x995: 0x0008, 0x996: 0x0008, 0x997: 0x0008,\n\t0x998: 0x0008, 0x999: 0x0008, 0x99a: 0x0008, 0x99b: 0x0008, 0x99c: 0x0008, 0x99d: 0x0008,\n\t0x99e: 0x0008, 0x99f: 0x0008, 0x9a0: 0x0008, 0x9a1: 0x0008, 0x9a2: 0x0008, 0x9a3: 0x0008,\n\t0x9a4: 0x0008, 0x9a5: 0x0008, 0x9a6: 0x0008, 0x9a7: 0x0008, 0x9a8: 0x0008, 0x9a9: 0x0008,\n\t0x9aa: 0x0008, 0x9ab: 0x0008, 0x9ac: 0x0039, 0x9ad: 0x0ed1, 0x9ae: 0x0ee9, 0x9af: 0x0008,\n\t0x9b0: 0x0ef9, 0x9b1: 0x0f09, 0x9b2: 0x0f19, 0x9b3: 0x0f31, 0x9b4: 0x0249, 0x9b5: 0x0f41,\n\t0x9b6: 0x0259, 0x9b7: 0x0f51, 0x9b8: 0x0359, 0x9b9: 0x0f61, 0x9ba: 0x0f71, 0x9bb: 0x0008,\n\t0x9bc: 0x00d9, 0x9bd: 0x0f81, 0x9be: 0x0f99, 0x9bf: 0x0269,\n\t// Block 0x27, offset 0x9c0\n\t0x9c0: 0x0fa9, 0x9c1: 0x0fb9, 0x9c2: 0x0279, 0x9c3: 0x0039, 0x9c4: 0x0fc9, 0x9c5: 0x0fe1,\n\t0x9c6: 0x059d, 0x9c7: 0x0ee9, 0x9c8: 0x0ef9, 0x9c9: 0x0f09, 0x9ca: 0x0ff9, 0x9cb: 0x1011,\n\t0x9cc: 0x1029, 0x9cd: 0x0f31, 0x9ce: 0x0008, 0x9cf: 0x0f51, 0x9d0: 0x0f61, 0x9d1: 0x1041,\n\t0x9d2: 0x00d9, 0x9d3: 0x1059, 0x9d4: 0x05b5, 0x9d5: 0x05b5, 0x9d6: 0x0f99, 0x9d7: 0x0fa9,\n\t0x9d8: 0x0fb9, 0x9d9: 0x059d, 0x9da: 0x1071, 0x9db: 0x1089, 0x9dc: 0x05cd, 0x9dd: 0x1099,\n\t0x9de: 0x10b1, 0x9df: 0x10c9, 0x9e0: 0x10e1, 0x9e1: 0x10f9, 0x9e2: 0x0f41, 0x9e3: 0x0269,\n\t0x9e4: 0x0fb9, 0x9e5: 0x1089, 0x9e6: 0x1099, 0x9e7: 0x10b1, 0x9e8: 0x1111, 0x9e9: 0x10e1,\n\t0x9ea: 0x10f9, 0x9eb: 0x0008, 0x9ec: 0x0008, 0x9ed: 0x0008, 0x9ee: 0x0008, 0x9ef: 0x0008,\n\t0x9f0: 0x0008, 0x9f1: 0x0008, 0x9f2: 0x0008, 0x9f3: 0x0008, 0x9f4: 0x0008, 0x9f5: 0x0008,\n\t0x9f6: 0x0008, 0x9f7: 0x0008, 0x9f8: 0x1129, 0x9f9: 0x0008, 0x9fa: 0x0008, 0x9fb: 0x0008,\n\t0x9fc: 0x0008, 0x9fd: 0x0008, 0x9fe: 0x0008, 0x9ff: 0x0008,\n\t// Block 0x28, offset 0xa00\n\t0xa00: 0x0008, 0xa01: 0x0008, 0xa02: 0x0008, 0xa03: 0x0008, 0xa04: 0x0008, 0xa05: 0x0008,\n\t0xa06: 0x0008, 0xa07: 0x0008, 0xa08: 0x0008, 0xa09: 0x0008, 0xa0a: 0x0008, 0xa0b: 0x0008,\n\t0xa0c: 0x0008, 0xa0d: 0x0008, 0xa0e: 0x0008, 0xa0f: 0x0008, 0xa10: 0x0008, 0xa11: 0x0008,\n\t0xa12: 0x0008, 0xa13: 0x0008, 0xa14: 0x0008, 0xa15: 0x0008, 0xa16: 0x0008, 0xa17: 0x0008,\n\t0xa18: 0x0008, 0xa19: 0x0008, 0xa1a: 0x0008, 0xa1b: 0x1141, 0xa1c: 0x1159, 0xa1d: 0x1169,\n\t0xa1e: 0x1181, 0xa1f: 0x1029, 0xa20: 0x1199, 0xa21: 0x11a9, 0xa22: 0x11c1, 0xa23: 0x11d9,\n\t0xa24: 0x11f1, 0xa25: 0x1209, 0xa26: 0x1221, 0xa27: 0x05e5, 0xa28: 0x1239, 0xa29: 0x1251,\n\t0xa2a: 0xe17d, 0xa2b: 0x1269, 0xa2c: 0x1281, 0xa2d: 0x1299, 0xa2e: 0x12b1, 0xa2f: 0x12c9,\n\t0xa30: 0x12e1, 0xa31: 0x12f9, 0xa32: 0x1311, 0xa33: 0x1329, 0xa34: 0x1341, 0xa35: 0x1359,\n\t0xa36: 0x1371, 0xa37: 0x1389, 0xa38: 0x05fd, 0xa39: 0x13a1, 0xa3a: 0x13b9, 0xa3b: 0x13d1,\n\t0xa3c: 0x13e1, 0xa3d: 0x13f9, 0xa3e: 0x1411, 0xa3f: 0x1429,\n\t// Block 0x29, offset 0xa40\n\t0xa40: 0xe00d, 0xa41: 0x0008, 0xa42: 0xe00d, 0xa43: 0x0008, 0xa44: 0xe00d, 0xa45: 0x0008,\n\t0xa46: 0xe00d, 0xa47: 0x0008, 0xa48: 0xe00d, 0xa49: 0x0008, 0xa4a: 0xe00d, 0xa4b: 0x0008,\n\t0xa4c: 0xe00d, 0xa4d: 0x0008, 0xa4e: 0xe00d, 0xa4f: 0x0008, 0xa50: 0xe00d, 0xa51: 0x0008,\n\t0xa52: 0xe00d, 0xa53: 0x0008, 0xa54: 0xe00d, 0xa55: 0x0008, 0xa56: 0xe00d, 0xa57: 0x0008,\n\t0xa58: 0xe00d, 0xa59: 0x0008, 0xa5a: 0xe00d, 0xa5b: 0x0008, 0xa5c: 0xe00d, 0xa5d: 0x0008,\n\t0xa5e: 0xe00d, 0xa5f: 0x0008, 0xa60: 0xe00d, 0xa61: 0x0008, 0xa62: 0xe00d, 0xa63: 0x0008,\n\t0xa64: 0xe00d, 0xa65: 0x0008, 0xa66: 0xe00d, 0xa67: 0x0008, 0xa68: 0xe00d, 0xa69: 0x0008,\n\t0xa6a: 0xe00d, 0xa6b: 0x0008, 0xa6c: 0xe00d, 0xa6d: 0x0008, 0xa6e: 0xe00d, 0xa6f: 0x0008,\n\t0xa70: 0xe00d, 0xa71: 0x0008, 0xa72: 0xe00d, 0xa73: 0x0008, 0xa74: 0xe00d, 0xa75: 0x0008,\n\t0xa76: 0xe00d, 0xa77: 0x0008, 0xa78: 0xe00d, 0xa79: 0x0008, 0xa7a: 0xe00d, 0xa7b: 0x0008,\n\t0xa7c: 0xe00d, 0xa7d: 0x0008, 0xa7e: 0xe00d, 0xa7f: 0x0008,\n\t// Block 0x2a, offset 0xa80\n\t0xa80: 0xe00d, 0xa81: 0x0008, 0xa82: 0xe00d, 0xa83: 0x0008, 0xa84: 0xe00d, 0xa85: 0x0008,\n\t0xa86: 0xe00d, 0xa87: 0x0008, 0xa88: 0xe00d, 0xa89: 0x0008, 0xa8a: 0xe00d, 0xa8b: 0x0008,\n\t0xa8c: 0xe00d, 0xa8d: 0x0008, 0xa8e: 0xe00d, 0xa8f: 0x0008, 0xa90: 0xe00d, 0xa91: 0x0008,\n\t0xa92: 0xe00d, 0xa93: 0x0008, 0xa94: 0xe00d, 0xa95: 0x0008, 0xa96: 0x0008, 0xa97: 0x0008,\n\t0xa98: 0x0008, 0xa99: 0x0008, 0xa9a: 0x0615, 0xa9b: 0x0635, 0xa9c: 0x0008, 0xa9d: 0x0008,\n\t0xa9e: 0x1441, 0xa9f: 0x0008, 0xaa0: 0xe00d, 0xaa1: 0x0008, 0xaa2: 0xe00d, 0xaa3: 0x0008,\n\t0xaa4: 0xe00d, 0xaa5: 0x0008, 0xaa6: 0xe00d, 0xaa7: 0x0008, 0xaa8: 0xe00d, 0xaa9: 0x0008,\n\t0xaaa: 0xe00d, 0xaab: 0x0008, 0xaac: 0xe00d, 0xaad: 0x0008, 0xaae: 0xe00d, 0xaaf: 0x0008,\n\t0xab0: 0xe00d, 0xab1: 0x0008, 0xab2: 0xe00d, 0xab3: 0x0008, 0xab4: 0xe00d, 0xab5: 0x0008,\n\t0xab6: 0xe00d, 0xab7: 0x0008, 0xab8: 0xe00d, 0xab9: 0x0008, 0xaba: 0xe00d, 0xabb: 0x0008,\n\t0xabc: 0xe00d, 0xabd: 0x0008, 0xabe: 0xe00d, 0xabf: 0x0008,\n\t// Block 0x2b, offset 0xac0\n\t0xac0: 0x0008, 0xac1: 0x0008, 0xac2: 0x0008, 0xac3: 0x0008, 0xac4: 0x0008, 0xac5: 0x0008,\n\t0xac6: 0x0040, 0xac7: 0x0040, 0xac8: 0xe045, 0xac9: 0xe045, 0xaca: 0xe045, 0xacb: 0xe045,\n\t0xacc: 0xe045, 0xacd: 0xe045, 0xace: 0x0040, 0xacf: 0x0040, 0xad0: 0x0008, 0xad1: 0x0008,\n\t0xad2: 0x0008, 0xad3: 0x0008, 0xad4: 0x0008, 0xad5: 0x0008, 0xad6: 0x0008, 0xad7: 0x0008,\n\t0xad8: 0x0040, 0xad9: 0xe045, 0xada: 0x0040, 0xadb: 0xe045, 0xadc: 0x0040, 0xadd: 0xe045,\n\t0xade: 0x0040, 0xadf: 0xe045, 0xae0: 0x0008, 0xae1: 0x0008, 0xae2: 0x0008, 0xae3: 0x0008,\n\t0xae4: 0x0008, 0xae5: 0x0008, 0xae6: 0x0008, 0xae7: 0x0008, 0xae8: 0xe045, 0xae9: 0xe045,\n\t0xaea: 0xe045, 0xaeb: 0xe045, 0xaec: 0xe045, 0xaed: 0xe045, 0xaee: 0xe045, 0xaef: 0xe045,\n\t0xaf0: 0x0008, 0xaf1: 0x1459, 0xaf2: 0x0008, 0xaf3: 0x1471, 0xaf4: 0x0008, 0xaf5: 0x1489,\n\t0xaf6: 0x0008, 0xaf7: 0x14a1, 0xaf8: 0x0008, 0xaf9: 0x14b9, 0xafa: 0x0008, 0xafb: 0x14d1,\n\t0xafc: 0x0008, 0xafd: 0x14e9, 0xafe: 0x0040, 0xaff: 0x0040,\n\t// Block 0x2c, offset 0xb00\n\t0xb00: 0x1501, 0xb01: 0x1531, 0xb02: 0x1561, 0xb03: 0x1591, 0xb04: 0x15c1, 0xb05: 0x15f1,\n\t0xb06: 0x1621, 0xb07: 0x1651, 0xb08: 0x1501, 0xb09: 0x1531, 0xb0a: 0x1561, 0xb0b: 0x1591,\n\t0xb0c: 0x15c1, 0xb0d: 0x15f1, 0xb0e: 0x1621, 0xb0f: 0x1651, 0xb10: 0x1681, 0xb11: 0x16b1,\n\t0xb12: 0x16e1, 0xb13: 0x1711, 0xb14: 0x1741, 0xb15: 0x1771, 0xb16: 0x17a1, 0xb17: 0x17d1,\n\t0xb18: 0x1681, 0xb19: 0x16b1, 0xb1a: 0x16e1, 0xb1b: 0x1711, 0xb1c: 0x1741, 0xb1d: 0x1771,\n\t0xb1e: 0x17a1, 0xb1f: 0x17d1, 0xb20: 0x1801, 0xb21: 0x1831, 0xb22: 0x1861, 0xb23: 0x1891,\n\t0xb24: 0x18c1, 0xb25: 0x18f1, 0xb26: 0x1921, 0xb27: 0x1951, 0xb28: 0x1801, 0xb29: 0x1831,\n\t0xb2a: 0x1861, 0xb2b: 0x1891, 0xb2c: 0x18c1, 0xb2d: 0x18f1, 0xb2e: 0x1921, 0xb2f: 0x1951,\n\t0xb30: 0x0008, 0xb31: 0x0008, 0xb32: 0x1981, 0xb33: 0x19b1, 0xb34: 0x19d9, 0xb35: 0x0040,\n\t0xb36: 0x0008, 0xb37: 0x1a01, 0xb38: 0xe045, 0xb39: 0xe045, 0xb3a: 0x064d, 0xb3b: 0x1459,\n\t0xb3c: 0x19b1, 0xb3d: 0x0666, 0xb3e: 0x1a31, 0xb3f: 0x0686,\n\t// Block 0x2d, offset 0xb40\n\t0xb40: 0x06a6, 0xb41: 0x1a4a, 0xb42: 0x1a79, 0xb43: 0x1aa9, 0xb44: 0x1ad1, 0xb45: 0x0040,\n\t0xb46: 0x0008, 0xb47: 0x1af9, 0xb48: 0x06c5, 0xb49: 0x1471, 0xb4a: 0x06dd, 0xb4b: 0x1489,\n\t0xb4c: 0x1aa9, 0xb4d: 0x1b2a, 0xb4e: 0x1b5a, 0xb4f: 0x1b8a, 0xb50: 0x0008, 0xb51: 0x0008,\n\t0xb52: 0x0008, 0xb53: 0x1bb9, 0xb54: 0x0040, 0xb55: 0x0040, 0xb56: 0x0008, 0xb57: 0x0008,\n\t0xb58: 0xe045, 0xb59: 0xe045, 0xb5a: 0x06f5, 0xb5b: 0x14a1, 0xb5c: 0x0040, 0xb5d: 0x1bd2,\n\t0xb5e: 0x1c02, 0xb5f: 0x1c32, 0xb60: 0x0008, 0xb61: 0x0008, 0xb62: 0x0008, 0xb63: 0x1c61,\n\t0xb64: 0x0008, 0xb65: 0x0008, 0xb66: 0x0008, 0xb67: 0x0008, 0xb68: 0xe045, 0xb69: 0xe045,\n\t0xb6a: 0x070d, 0xb6b: 0x14d1, 0xb6c: 0xe04d, 0xb6d: 0x1c7a, 0xb6e: 0x03d2, 0xb6f: 0x1caa,\n\t0xb70: 0x0040, 0xb71: 0x0040, 0xb72: 0x1cb9, 0xb73: 0x1ce9, 0xb74: 0x1d11, 0xb75: 0x0040,\n\t0xb76: 0x0008, 0xb77: 0x1d39, 0xb78: 0x0725, 0xb79: 0x14b9, 0xb7a: 0x0515, 0xb7b: 0x14e9,\n\t0xb7c: 0x1ce9, 0xb7d: 0x073e, 0xb7e: 0x075e, 0xb7f: 0x0040,\n\t// Block 0x2e, offset 0xb80\n\t0xb80: 0x000a, 0xb81: 0x000a, 0xb82: 0x000a, 0xb83: 0x000a, 0xb84: 0x000a, 0xb85: 0x000a,\n\t0xb86: 0x000a, 0xb87: 0x000a, 0xb88: 0x000a, 0xb89: 0x000a, 0xb8a: 0x000a, 0xb8b: 0x03c0,\n\t0xb8c: 0x0003, 0xb8d: 0x0003, 0xb8e: 0x0340, 0xb8f: 0x0b40, 0xb90: 0x0018, 0xb91: 0xe00d,\n\t0xb92: 0x0018, 0xb93: 0x0018, 0xb94: 0x0018, 0xb95: 0x0018, 0xb96: 0x0018, 0xb97: 0x077e,\n\t0xb98: 0x0018, 0xb99: 0x0018, 0xb9a: 0x0018, 0xb9b: 0x0018, 0xb9c: 0x0018, 0xb9d: 0x0018,\n\t0xb9e: 0x0018, 0xb9f: 0x0018, 0xba0: 0x0018, 0xba1: 0x0018, 0xba2: 0x0018, 0xba3: 0x0018,\n\t0xba4: 0x0040, 0xba5: 0x0040, 0xba6: 0x0040, 0xba7: 0x0018, 0xba8: 0x0040, 0xba9: 0x0040,\n\t0xbaa: 0x0340, 0xbab: 0x0340, 0xbac: 0x0340, 0xbad: 0x0340, 0xbae: 0x0340, 0xbaf: 0x000a,\n\t0xbb0: 0x0018, 0xbb1: 0x0018, 0xbb2: 0x0018, 0xbb3: 0x1d69, 0xbb4: 0x1da1, 0xbb5: 0x0018,\n\t0xbb6: 0x1df1, 0xbb7: 0x1e29, 0xbb8: 0x0018, 0xbb9: 0x0018, 0xbba: 0x0018, 0xbbb: 0x0018,\n\t0xbbc: 0x1e7a, 0xbbd: 0x0018, 0xbbe: 0x079e, 0xbbf: 0x0018,\n\t// Block 0x2f, offset 0xbc0\n\t0xbc0: 0x0018, 0xbc1: 0x0018, 0xbc2: 0x0018, 0xbc3: 0x0018, 0xbc4: 0x0018, 0xbc5: 0x0018,\n\t0xbc6: 0x0018, 0xbc7: 0x1e92, 0xbc8: 0x1eaa, 0xbc9: 0x1ec2, 0xbca: 0x0018, 0xbcb: 0x0018,\n\t0xbcc: 0x0018, 0xbcd: 0x0018, 0xbce: 0x0018, 0xbcf: 0x0018, 0xbd0: 0x0018, 0xbd1: 0x0018,\n\t0xbd2: 0x0018, 0xbd3: 0x0018, 0xbd4: 0x0018, 0xbd5: 0x0018, 0xbd6: 0x0018, 0xbd7: 0x1ed9,\n\t0xbd8: 0x0018, 0xbd9: 0x0018, 0xbda: 0x0018, 0xbdb: 0x0018, 0xbdc: 0x0018, 0xbdd: 0x0018,\n\t0xbde: 0x0018, 0xbdf: 0x000a, 0xbe0: 0x03c0, 0xbe1: 0x0340, 0xbe2: 0x0340, 0xbe3: 0x0340,\n\t0xbe4: 0x03c0, 0xbe5: 0x0040, 0xbe6: 0x0040, 0xbe7: 0x0040, 0xbe8: 0x0040, 0xbe9: 0x0040,\n\t0xbea: 0x0340, 0xbeb: 0x0340, 0xbec: 0x0340, 0xbed: 0x0340, 0xbee: 0x0340, 0xbef: 0x0340,\n\t0xbf0: 0x1f41, 0xbf1: 0x0f41, 0xbf2: 0x0040, 0xbf3: 0x0040, 0xbf4: 0x1f51, 0xbf5: 0x1f61,\n\t0xbf6: 0x1f71, 0xbf7: 0x1f81, 0xbf8: 0x1f91, 0xbf9: 0x1fa1, 0xbfa: 0x1fb2, 0xbfb: 0x07bd,\n\t0xbfc: 0x1fc2, 0xbfd: 0x1fd2, 0xbfe: 0x1fe2, 0xbff: 0x0f71,\n\t// Block 0x30, offset 0xc00\n\t0xc00: 0x1f41, 0xc01: 0x00c9, 0xc02: 0x0069, 0xc03: 0x0079, 0xc04: 0x1f51, 0xc05: 0x1f61,\n\t0xc06: 0x1f71, 0xc07: 0x1f81, 0xc08: 0x1f91, 0xc09: 0x1fa1, 0xc0a: 0x1fb2, 0xc0b: 0x07d5,\n\t0xc0c: 0x1fc2, 0xc0d: 0x1fd2, 0xc0e: 0x1fe2, 0xc0f: 0x0040, 0xc10: 0x0039, 0xc11: 0x0f09,\n\t0xc12: 0x00d9, 0xc13: 0x0369, 0xc14: 0x0ff9, 0xc15: 0x0249, 0xc16: 0x0f51, 0xc17: 0x0359,\n\t0xc18: 0x0f61, 0xc19: 0x0f71, 0xc1a: 0x0f99, 0xc1b: 0x01d9, 0xc1c: 0x0fa9, 0xc1d: 0x0040,\n\t0xc1e: 0x0040, 0xc1f: 0x0040, 0xc20: 0x0018, 0xc21: 0x0018, 0xc22: 0x0018, 0xc23: 0x0018,\n\t0xc24: 0x0018, 0xc25: 0x0018, 0xc26: 0x0018, 0xc27: 0x0018, 0xc28: 0x1ff1, 0xc29: 0x0018,\n\t0xc2a: 0x0018, 0xc2b: 0x0018, 0xc2c: 0x0018, 0xc2d: 0x0018, 0xc2e: 0x0018, 0xc2f: 0x0018,\n\t0xc30: 0x0018, 0xc31: 0x0018, 0xc32: 0x0018, 0xc33: 0x0018, 0xc34: 0x0018, 0xc35: 0x0018,\n\t0xc36: 0x0018, 0xc37: 0x0018, 0xc38: 0x0018, 0xc39: 0x0018, 0xc3a: 0x0018, 0xc3b: 0x0018,\n\t0xc3c: 0x0018, 0xc3d: 0x0018, 0xc3e: 0x0018, 0xc3f: 0x0040,\n\t// Block 0x31, offset 0xc40\n\t0xc40: 0x07ee, 0xc41: 0x080e, 0xc42: 0x1159, 0xc43: 0x082d, 0xc44: 0x0018, 0xc45: 0x084e,\n\t0xc46: 0x086e, 0xc47: 0x1011, 0xc48: 0x0018, 0xc49: 0x088d, 0xc4a: 0x0f31, 0xc4b: 0x0249,\n\t0xc4c: 0x0249, 0xc4d: 0x0249, 0xc4e: 0x0249, 0xc4f: 0x2009, 0xc50: 0x0f41, 0xc51: 0x0f41,\n\t0xc52: 0x0359, 0xc53: 0x0359, 0xc54: 0x0018, 0xc55: 0x0f71, 0xc56: 0x2021, 0xc57: 0x0018,\n\t0xc58: 0x0018, 0xc59: 0x0f99, 0xc5a: 0x2039, 0xc5b: 0x0269, 0xc5c: 0x0269, 0xc5d: 0x0269,\n\t0xc5e: 0x0018, 0xc5f: 0x0018, 0xc60: 0x2049, 0xc61: 0x08ad, 0xc62: 0x2061, 0xc63: 0x0018,\n\t0xc64: 0x13d1, 0xc65: 0x0018, 0xc66: 0x2079, 0xc67: 0x0018, 0xc68: 0x13d1, 0xc69: 0x0018,\n\t0xc6a: 0x0f51, 0xc6b: 0x2091, 0xc6c: 0x0ee9, 0xc6d: 0x1159, 0xc6e: 0x0018, 0xc6f: 0x0f09,\n\t0xc70: 0x0f09, 0xc71: 0x1199, 0xc72: 0x0040, 0xc73: 0x0f61, 0xc74: 0x00d9, 0xc75: 0x20a9,\n\t0xc76: 0x20c1, 0xc77: 0x20d9, 0xc78: 0x20f1, 0xc79: 0x0f41, 0xc7a: 0x0018, 0xc7b: 0x08cd,\n\t0xc7c: 0x2109, 0xc7d: 0x10b1, 0xc7e: 0x10b1, 0xc7f: 0x2109,\n\t// Block 0x32, offset 0xc80\n\t0xc80: 0x08ed, 0xc81: 0x0018, 0xc82: 0x0018, 0xc83: 0x0018, 0xc84: 0x0018, 0xc85: 0x0ef9,\n\t0xc86: 0x0ef9, 0xc87: 0x0f09, 0xc88: 0x0f41, 0xc89: 0x0259, 0xc8a: 0x0018, 0xc8b: 0x0018,\n\t0xc8c: 0x0018, 0xc8d: 0x0018, 0xc8e: 0x0008, 0xc8f: 0x0018, 0xc90: 0x2121, 0xc91: 0x2151,\n\t0xc92: 0x2181, 0xc93: 0x21b9, 0xc94: 0x21e9, 0xc95: 0x2219, 0xc96: 0x2249, 0xc97: 0x2279,\n\t0xc98: 0x22a9, 0xc99: 0x22d9, 0xc9a: 0x2309, 0xc9b: 0x2339, 0xc9c: 0x2369, 0xc9d: 0x2399,\n\t0xc9e: 0x23c9, 0xc9f: 0x23f9, 0xca0: 0x0f41, 0xca1: 0x2421, 0xca2: 0x0905, 0xca3: 0x2439,\n\t0xca4: 0x1089, 0xca5: 0x2451, 0xca6: 0x0925, 0xca7: 0x2469, 0xca8: 0x2491, 0xca9: 0x0369,\n\t0xcaa: 0x24a9, 0xcab: 0x0945, 0xcac: 0x0359, 0xcad: 0x1159, 0xcae: 0x0ef9, 0xcaf: 0x0f61,\n\t0xcb0: 0x0f41, 0xcb1: 0x2421, 0xcb2: 0x0965, 0xcb3: 0x2439, 0xcb4: 0x1089, 0xcb5: 0x2451,\n\t0xcb6: 0x0985, 0xcb7: 0x2469, 0xcb8: 0x2491, 0xcb9: 0x0369, 0xcba: 0x24a9, 0xcbb: 0x09a5,\n\t0xcbc: 0x0359, 0xcbd: 0x1159, 0xcbe: 0x0ef9, 0xcbf: 0x0f61,\n\t// Block 0x33, offset 0xcc0\n\t0xcc0: 0x0018, 0xcc1: 0x0018, 0xcc2: 0x0018, 0xcc3: 0x0018, 0xcc4: 0x0018, 0xcc5: 0x0018,\n\t0xcc6: 0x0018, 0xcc7: 0x0018, 0xcc8: 0x0018, 0xcc9: 0x0018, 0xcca: 0x0018, 0xccb: 0x0040,\n\t0xccc: 0x0040, 0xccd: 0x0040, 0xcce: 0x0040, 0xccf: 0x0040, 0xcd0: 0x0040, 0xcd1: 0x0040,\n\t0xcd2: 0x0040, 0xcd3: 0x0040, 0xcd4: 0x0040, 0xcd5: 0x0040, 0xcd6: 0x0040, 0xcd7: 0x0040,\n\t0xcd8: 0x0040, 0xcd9: 0x0040, 0xcda: 0x0040, 0xcdb: 0x0040, 0xcdc: 0x0040, 0xcdd: 0x0040,\n\t0xcde: 0x0040, 0xcdf: 0x0040, 0xce0: 0x00c9, 0xce1: 0x0069, 0xce2: 0x0079, 0xce3: 0x1f51,\n\t0xce4: 0x1f61, 0xce5: 0x1f71, 0xce6: 0x1f81, 0xce7: 0x1f91, 0xce8: 0x1fa1, 0xce9: 0x2601,\n\t0xcea: 0x2619, 0xceb: 0x2631, 0xcec: 0x2649, 0xced: 0x2661, 0xcee: 0x2679, 0xcef: 0x2691,\n\t0xcf0: 0x26a9, 0xcf1: 0x26c1, 0xcf2: 0x26d9, 0xcf3: 0x26f1, 0xcf4: 0x0a06, 0xcf5: 0x0a26,\n\t0xcf6: 0x0a46, 0xcf7: 0x0a66, 0xcf8: 0x0a86, 0xcf9: 0x0aa6, 0xcfa: 0x0ac6, 0xcfb: 0x0ae6,\n\t0xcfc: 0x0b06, 0xcfd: 0x270a, 0xcfe: 0x2732, 0xcff: 0x275a,\n\t// Block 0x34, offset 0xd00\n\t0xd00: 0x2782, 0xd01: 0x27aa, 0xd02: 0x27d2, 0xd03: 0x27fa, 0xd04: 0x2822, 0xd05: 0x284a,\n\t0xd06: 0x2872, 0xd07: 0x289a, 0xd08: 0x0040, 0xd09: 0x0040, 0xd0a: 0x0040, 0xd0b: 0x0040,\n\t0xd0c: 0x0040, 0xd0d: 0x0040, 0xd0e: 0x0040, 0xd0f: 0x0040, 0xd10: 0x0040, 0xd11: 0x0040,\n\t0xd12: 0x0040, 0xd13: 0x0040, 0xd14: 0x0040, 0xd15: 0x0040, 0xd16: 0x0040, 0xd17: 0x0040,\n\t0xd18: 0x0040, 0xd19: 0x0040, 0xd1a: 0x0040, 0xd1b: 0x0040, 0xd1c: 0x0b26, 0xd1d: 0x0b46,\n\t0xd1e: 0x0b66, 0xd1f: 0x0b86, 0xd20: 0x0ba6, 0xd21: 0x0bc6, 0xd22: 0x0be6, 0xd23: 0x0c06,\n\t0xd24: 0x0c26, 0xd25: 0x0c46, 0xd26: 0x0c66, 0xd27: 0x0c86, 0xd28: 0x0ca6, 0xd29: 0x0cc6,\n\t0xd2a: 0x0ce6, 0xd2b: 0x0d06, 0xd2c: 0x0d26, 0xd2d: 0x0d46, 0xd2e: 0x0d66, 0xd2f: 0x0d86,\n\t0xd30: 0x0da6, 0xd31: 0x0dc6, 0xd32: 0x0de6, 0xd33: 0x0e06, 0xd34: 0x0e26, 0xd35: 0x0e46,\n\t0xd36: 0x0039, 0xd37: 0x0ee9, 0xd38: 0x1159, 0xd39: 0x0ef9, 0xd3a: 0x0f09, 0xd3b: 0x1199,\n\t0xd3c: 0x0f31, 0xd3d: 0x0249, 0xd3e: 0x0f41, 0xd3f: 0x0259,\n\t// Block 0x35, offset 0xd40\n\t0xd40: 0x0f51, 0xd41: 0x0359, 0xd42: 0x0f61, 0xd43: 0x0f71, 0xd44: 0x00d9, 0xd45: 0x0f99,\n\t0xd46: 0x2039, 0xd47: 0x0269, 0xd48: 0x01d9, 0xd49: 0x0fa9, 0xd4a: 0x0fb9, 0xd4b: 0x1089,\n\t0xd4c: 0x0279, 0xd4d: 0x0369, 0xd4e: 0x0289, 0xd4f: 0x13d1, 0xd50: 0x0039, 0xd51: 0x0ee9,\n\t0xd52: 0x1159, 0xd53: 0x0ef9, 0xd54: 0x0f09, 0xd55: 0x1199, 0xd56: 0x0f31, 0xd57: 0x0249,\n\t0xd58: 0x0f41, 0xd59: 0x0259, 0xd5a: 0x0f51, 0xd5b: 0x0359, 0xd5c: 0x0f61, 0xd5d: 0x0f71,\n\t0xd5e: 0x00d9, 0xd5f: 0x0f99, 0xd60: 0x2039, 0xd61: 0x0269, 0xd62: 0x01d9, 0xd63: 0x0fa9,\n\t0xd64: 0x0fb9, 0xd65: 0x1089, 0xd66: 0x0279, 0xd67: 0x0369, 0xd68: 0x0289, 0xd69: 0x13d1,\n\t0xd6a: 0x1f41, 0xd6b: 0x0018, 0xd6c: 0x0018, 0xd6d: 0x0018, 0xd6e: 0x0018, 0xd6f: 0x0018,\n\t0xd70: 0x0018, 0xd71: 0x0018, 0xd72: 0x0018, 0xd73: 0x0018, 0xd74: 0x0018, 0xd75: 0x0018,\n\t0xd76: 0x0018, 0xd77: 0x0018, 0xd78: 0x0018, 0xd79: 0x0018, 0xd7a: 0x0018, 0xd7b: 0x0018,\n\t0xd7c: 0x0018, 0xd7d: 0x0018, 0xd7e: 0x0018, 0xd7f: 0x0018,\n\t// Block 0x36, offset 0xd80\n\t0xd80: 0x0008, 0xd81: 0x0008, 0xd82: 0x0008, 0xd83: 0x0008, 0xd84: 0x0008, 0xd85: 0x0008,\n\t0xd86: 0x0008, 0xd87: 0x0008, 0xd88: 0x0008, 0xd89: 0x0008, 0xd8a: 0x0008, 0xd8b: 0x0008,\n\t0xd8c: 0x0008, 0xd8d: 0x0008, 0xd8e: 0x0008, 0xd8f: 0x0008, 0xd90: 0x0008, 0xd91: 0x0008,\n\t0xd92: 0x0008, 0xd93: 0x0008, 0xd94: 0x0008, 0xd95: 0x0008, 0xd96: 0x0008, 0xd97: 0x0008,\n\t0xd98: 0x0008, 0xd99: 0x0008, 0xd9a: 0x0008, 0xd9b: 0x0008, 0xd9c: 0x0008, 0xd9d: 0x0008,\n\t0xd9e: 0x0008, 0xd9f: 0x0040, 0xda0: 0xe00d, 0xda1: 0x0008, 0xda2: 0x2971, 0xda3: 0x0ebd,\n\t0xda4: 0x2989, 0xda5: 0x0008, 0xda6: 0x0008, 0xda7: 0xe07d, 0xda8: 0x0008, 0xda9: 0xe01d,\n\t0xdaa: 0x0008, 0xdab: 0xe03d, 0xdac: 0x0008, 0xdad: 0x0fe1, 0xdae: 0x1281, 0xdaf: 0x0fc9,\n\t0xdb0: 0x1141, 0xdb1: 0x0008, 0xdb2: 0xe00d, 0xdb3: 0x0008, 0xdb4: 0x0008, 0xdb5: 0xe01d,\n\t0xdb6: 0x0008, 0xdb7: 0x0008, 0xdb8: 0x0008, 0xdb9: 0x0008, 0xdba: 0x0008, 0xdbb: 0x0008,\n\t0xdbc: 0x0259, 0xdbd: 0x1089, 0xdbe: 0x29a1, 0xdbf: 0x29b9,\n\t// Block 0x37, offset 0xdc0\n\t0xdc0: 0xe00d, 0xdc1: 0x0008, 0xdc2: 0xe00d, 0xdc3: 0x0008, 0xdc4: 0xe00d, 0xdc5: 0x0008,\n\t0xdc6: 0xe00d, 0xdc7: 0x0008, 0xdc8: 0xe00d, 0xdc9: 0x0008, 0xdca: 0xe00d, 0xdcb: 0x0008,\n\t0xdcc: 0xe00d, 0xdcd: 0x0008, 0xdce: 0xe00d, 0xdcf: 0x0008, 0xdd0: 0xe00d, 0xdd1: 0x0008,\n\t0xdd2: 0xe00d, 0xdd3: 0x0008, 0xdd4: 0xe00d, 0xdd5: 0x0008, 0xdd6: 0xe00d, 0xdd7: 0x0008,\n\t0xdd8: 0xe00d, 0xdd9: 0x0008, 0xdda: 0xe00d, 0xddb: 0x0008, 0xddc: 0xe00d, 0xddd: 0x0008,\n\t0xdde: 0xe00d, 0xddf: 0x0008, 0xde0: 0xe00d, 0xde1: 0x0008, 0xde2: 0xe00d, 0xde3: 0x0008,\n\t0xde4: 0x0008, 0xde5: 0x0018, 0xde6: 0x0018, 0xde7: 0x0018, 0xde8: 0x0018, 0xde9: 0x0018,\n\t0xdea: 0x0018, 0xdeb: 0xe03d, 0xdec: 0x0008, 0xded: 0xe01d, 0xdee: 0x0008, 0xdef: 0x3308,\n\t0xdf0: 0x3308, 0xdf1: 0x3308, 0xdf2: 0xe00d, 0xdf3: 0x0008, 0xdf4: 0x0040, 0xdf5: 0x0040,\n\t0xdf6: 0x0040, 0xdf7: 0x0040, 0xdf8: 0x0040, 0xdf9: 0x0018, 0xdfa: 0x0018, 0xdfb: 0x0018,\n\t0xdfc: 0x0018, 0xdfd: 0x0018, 0xdfe: 0x0018, 0xdff: 0x0018,\n\t// Block 0x38, offset 0xe00\n\t0xe00: 0x26fd, 0xe01: 0x271d, 0xe02: 0x273d, 0xe03: 0x275d, 0xe04: 0x277d, 0xe05: 0x279d,\n\t0xe06: 0x27bd, 0xe07: 0x27dd, 0xe08: 0x27fd, 0xe09: 0x281d, 0xe0a: 0x283d, 0xe0b: 0x285d,\n\t0xe0c: 0x287d, 0xe0d: 0x289d, 0xe0e: 0x28bd, 0xe0f: 0x28dd, 0xe10: 0x28fd, 0xe11: 0x291d,\n\t0xe12: 0x293d, 0xe13: 0x295d, 0xe14: 0x297d, 0xe15: 0x299d, 0xe16: 0x0040, 0xe17: 0x0040,\n\t0xe18: 0x0040, 0xe19: 0x0040, 0xe1a: 0x0040, 0xe1b: 0x0040, 0xe1c: 0x0040, 0xe1d: 0x0040,\n\t0xe1e: 0x0040, 0xe1f: 0x0040, 0xe20: 0x0040, 0xe21: 0x0040, 0xe22: 0x0040, 0xe23: 0x0040,\n\t0xe24: 0x0040, 0xe25: 0x0040, 0xe26: 0x0040, 0xe27: 0x0040, 0xe28: 0x0040, 0xe29: 0x0040,\n\t0xe2a: 0x0040, 0xe2b: 0x0040, 0xe2c: 0x0040, 0xe2d: 0x0040, 0xe2e: 0x0040, 0xe2f: 0x0040,\n\t0xe30: 0x0040, 0xe31: 0x0040, 0xe32: 0x0040, 0xe33: 0x0040, 0xe34: 0x0040, 0xe35: 0x0040,\n\t0xe36: 0x0040, 0xe37: 0x0040, 0xe38: 0x0040, 0xe39: 0x0040, 0xe3a: 0x0040, 0xe3b: 0x0040,\n\t0xe3c: 0x0040, 0xe3d: 0x0040, 0xe3e: 0x0040, 0xe3f: 0x0040,\n\t// Block 0x39, offset 0xe40\n\t0xe40: 0x000a, 0xe41: 0x0018, 0xe42: 0x29d1, 0xe43: 0x0018, 0xe44: 0x0018, 0xe45: 0x0008,\n\t0xe46: 0x0008, 0xe47: 0x0008, 0xe48: 0x0018, 0xe49: 0x0018, 0xe4a: 0x0018, 0xe4b: 0x0018,\n\t0xe4c: 0x0018, 0xe4d: 0x0018, 0xe4e: 0x0018, 0xe4f: 0x0018, 0xe50: 0x0018, 0xe51: 0x0018,\n\t0xe52: 0x0018, 0xe53: 0x0018, 0xe54: 0x0018, 0xe55: 0x0018, 0xe56: 0x0018, 0xe57: 0x0018,\n\t0xe58: 0x0018, 0xe59: 0x0018, 0xe5a: 0x0018, 0xe5b: 0x0018, 0xe5c: 0x0018, 0xe5d: 0x0018,\n\t0xe5e: 0x0018, 0xe5f: 0x0018, 0xe60: 0x0018, 0xe61: 0x0018, 0xe62: 0x0018, 0xe63: 0x0018,\n\t0xe64: 0x0018, 0xe65: 0x0018, 0xe66: 0x0018, 0xe67: 0x0018, 0xe68: 0x0018, 0xe69: 0x0018,\n\t0xe6a: 0x3308, 0xe6b: 0x3308, 0xe6c: 0x3308, 0xe6d: 0x3308, 0xe6e: 0x3018, 0xe6f: 0x3018,\n\t0xe70: 0x0018, 0xe71: 0x0018, 0xe72: 0x0018, 0xe73: 0x0018, 0xe74: 0x0018, 0xe75: 0x0018,\n\t0xe76: 0xe125, 0xe77: 0x0018, 0xe78: 0x29bd, 0xe79: 0x29dd, 0xe7a: 0x29fd, 0xe7b: 0x0018,\n\t0xe7c: 0x0008, 0xe7d: 0x0018, 0xe7e: 0x0018, 0xe7f: 0x0018,\n\t// Block 0x3a, offset 0xe80\n\t0xe80: 0x2b3d, 0xe81: 0x2b5d, 0xe82: 0x2b7d, 0xe83: 0x2b9d, 0xe84: 0x2bbd, 0xe85: 0x2bdd,\n\t0xe86: 0x2bdd, 0xe87: 0x2bdd, 0xe88: 0x2bfd, 0xe89: 0x2bfd, 0xe8a: 0x2bfd, 0xe8b: 0x2bfd,\n\t0xe8c: 0x2c1d, 0xe8d: 0x2c1d, 0xe8e: 0x2c1d, 0xe8f: 0x2c3d, 0xe90: 0x2c5d, 0xe91: 0x2c5d,\n\t0xe92: 0x2a7d, 0xe93: 0x2a7d, 0xe94: 0x2c5d, 0xe95: 0x2c5d, 0xe96: 0x2c7d, 0xe97: 0x2c7d,\n\t0xe98: 0x2c5d, 0xe99: 0x2c5d, 0xe9a: 0x2a7d, 0xe9b: 0x2a7d, 0xe9c: 0x2c5d, 0xe9d: 0x2c5d,\n\t0xe9e: 0x2c3d, 0xe9f: 0x2c3d, 0xea0: 0x2c9d, 0xea1: 0x2c9d, 0xea2: 0x2cbd, 0xea3: 0x2cbd,\n\t0xea4: 0x0040, 0xea5: 0x2cdd, 0xea6: 0x2cfd, 0xea7: 0x2d1d, 0xea8: 0x2d1d, 0xea9: 0x2d3d,\n\t0xeaa: 0x2d5d, 0xeab: 0x2d7d, 0xeac: 0x2d9d, 0xead: 0x2dbd, 0xeae: 0x2ddd, 0xeaf: 0x2dfd,\n\t0xeb0: 0x2e1d, 0xeb1: 0x2e3d, 0xeb2: 0x2e3d, 0xeb3: 0x2e5d, 0xeb4: 0x2e7d, 0xeb5: 0x2e7d,\n\t0xeb6: 0x2e9d, 0xeb7: 0x2ebd, 0xeb8: 0x2e5d, 0xeb9: 0x2edd, 0xeba: 0x2efd, 0xebb: 0x2edd,\n\t0xebc: 0x2e5d, 0xebd: 0x2f1d, 0xebe: 0x2f3d, 0xebf: 0x2f5d,\n\t// Block 0x3b, offset 0xec0\n\t0xec0: 0x2f7d, 0xec1: 0x2f9d, 0xec2: 0x2cfd, 0xec3: 0x2cdd, 0xec4: 0x2fbd, 0xec5: 0x2fdd,\n\t0xec6: 0x2ffd, 0xec7: 0x301d, 0xec8: 0x303d, 0xec9: 0x305d, 0xeca: 0x307d, 0xecb: 0x309d,\n\t0xecc: 0x30bd, 0xecd: 0x30dd, 0xece: 0x30fd, 0xecf: 0x0040, 0xed0: 0x0018, 0xed1: 0x0018,\n\t0xed2: 0x311d, 0xed3: 0x313d, 0xed4: 0x315d, 0xed5: 0x317d, 0xed6: 0x319d, 0xed7: 0x31bd,\n\t0xed8: 0x31dd, 0xed9: 0x31fd, 0xeda: 0x321d, 0xedb: 0x323d, 0xedc: 0x315d, 0xedd: 0x325d,\n\t0xede: 0x327d, 0xedf: 0x329d, 0xee0: 0x0008, 0xee1: 0x0008, 0xee2: 0x0008, 0xee3: 0x0008,\n\t0xee4: 0x0008, 0xee5: 0x0008, 0xee6: 0x0008, 0xee7: 0x0008, 0xee8: 0x0008, 0xee9: 0x0008,\n\t0xeea: 0x0008, 0xeeb: 0x0008, 0xeec: 0x0008, 0xeed: 0x0008, 0xeee: 0x0008, 0xeef: 0x0008,\n\t0xef0: 0x0008, 0xef1: 0x0008, 0xef2: 0x0008, 0xef3: 0x0008, 0xef4: 0x0008, 0xef5: 0x0008,\n\t0xef6: 0x0008, 0xef7: 0x0008, 0xef8: 0x0008, 0xef9: 0x0008, 0xefa: 0x0008, 0xefb: 0x0040,\n\t0xefc: 0x0040, 0xefd: 0x0040, 0xefe: 0x0040, 0xeff: 0x0040,\n\t// Block 0x3c, offset 0xf00\n\t0xf00: 0x36a2, 0xf01: 0x36d2, 0xf02: 0x3702, 0xf03: 0x3732, 0xf04: 0x32bd, 0xf05: 0x32dd,\n\t0xf06: 0x32fd, 0xf07: 0x331d, 0xf08: 0x0018, 0xf09: 0x0018, 0xf0a: 0x0018, 0xf0b: 0x0018,\n\t0xf0c: 0x0018, 0xf0d: 0x0018, 0xf0e: 0x0018, 0xf0f: 0x0018, 0xf10: 0x333d, 0xf11: 0x3761,\n\t0xf12: 0x3779, 0xf13: 0x3791, 0xf14: 0x37a9, 0xf15: 0x37c1, 0xf16: 0x37d9, 0xf17: 0x37f1,\n\t0xf18: 0x3809, 0xf19: 0x3821, 0xf1a: 0x3839, 0xf1b: 0x3851, 0xf1c: 0x3869, 0xf1d: 0x3881,\n\t0xf1e: 0x3899, 0xf1f: 0x38b1, 0xf20: 0x335d, 0xf21: 0x337d, 0xf22: 0x339d, 0xf23: 0x33bd,\n\t0xf24: 0x33dd, 0xf25: 0x33dd, 0xf26: 0x33fd, 0xf27: 0x341d, 0xf28: 0x343d, 0xf29: 0x345d,\n\t0xf2a: 0x347d, 0xf2b: 0x349d, 0xf2c: 0x34bd, 0xf2d: 0x34dd, 0xf2e: 0x34fd, 0xf2f: 0x351d,\n\t0xf30: 0x353d, 0xf31: 0x355d, 0xf32: 0x357d, 0xf33: 0x359d, 0xf34: 0x35bd, 0xf35: 0x35dd,\n\t0xf36: 0x35fd, 0xf37: 0x361d, 0xf38: 0x363d, 0xf39: 0x365d, 0xf3a: 0x367d, 0xf3b: 0x369d,\n\t0xf3c: 0x38c9, 0xf3d: 0x3901, 0xf3e: 0x36bd, 0xf3f: 0x0018,\n\t// Block 0x3d, offset 0xf40\n\t0xf40: 0x36dd, 0xf41: 0x36fd, 0xf42: 0x371d, 0xf43: 0x373d, 0xf44: 0x375d, 0xf45: 0x377d,\n\t0xf46: 0x379d, 0xf47: 0x37bd, 0xf48: 0x37dd, 0xf49: 0x37fd, 0xf4a: 0x381d, 0xf4b: 0x383d,\n\t0xf4c: 0x385d, 0xf4d: 0x387d, 0xf4e: 0x389d, 0xf4f: 0x38bd, 0xf50: 0x38dd, 0xf51: 0x38fd,\n\t0xf52: 0x391d, 0xf53: 0x393d, 0xf54: 0x395d, 0xf55: 0x397d, 0xf56: 0x399d, 0xf57: 0x39bd,\n\t0xf58: 0x39dd, 0xf59: 0x39fd, 0xf5a: 0x3a1d, 0xf5b: 0x3a3d, 0xf5c: 0x3a5d, 0xf5d: 0x3a7d,\n\t0xf5e: 0x3a9d, 0xf5f: 0x3abd, 0xf60: 0x3add, 0xf61: 0x3afd, 0xf62: 0x3b1d, 0xf63: 0x3b3d,\n\t0xf64: 0x3b5d, 0xf65: 0x3b7d, 0xf66: 0x127d, 0xf67: 0x3b9d, 0xf68: 0x3bbd, 0xf69: 0x3bdd,\n\t0xf6a: 0x3bfd, 0xf6b: 0x3c1d, 0xf6c: 0x3c3d, 0xf6d: 0x3c5d, 0xf6e: 0x239d, 0xf6f: 0x3c7d,\n\t0xf70: 0x3c9d, 0xf71: 0x3939, 0xf72: 0x3951, 0xf73: 0x3969, 0xf74: 0x3981, 0xf75: 0x3999,\n\t0xf76: 0x39b1, 0xf77: 0x39c9, 0xf78: 0x39e1, 0xf79: 0x39f9, 0xf7a: 0x3a11, 0xf7b: 0x3a29,\n\t0xf7c: 0x3a41, 0xf7d: 0x3a59, 0xf7e: 0x3a71, 0xf7f: 0x3a89,\n\t// Block 0x3e, offset 0xf80\n\t0xf80: 0x3aa1, 0xf81: 0x3ac9, 0xf82: 0x3af1, 0xf83: 0x3b19, 0xf84: 0x3b41, 0xf85: 0x3b69,\n\t0xf86: 0x3b91, 0xf87: 0x3bb9, 0xf88: 0x3be1, 0xf89: 0x3c09, 0xf8a: 0x3c39, 0xf8b: 0x3c69,\n\t0xf8c: 0x3c99, 0xf8d: 0x3cbd, 0xf8e: 0x3cb1, 0xf8f: 0x3cdd, 0xf90: 0x3cfd, 0xf91: 0x3d15,\n\t0xf92: 0x3d2d, 0xf93: 0x3d45, 0xf94: 0x3d5d, 0xf95: 0x3d5d, 0xf96: 0x3d45, 0xf97: 0x3d75,\n\t0xf98: 0x07bd, 0xf99: 0x3d8d, 0xf9a: 0x3da5, 0xf9b: 0x3dbd, 0xf9c: 0x3dd5, 0xf9d: 0x3ded,\n\t0xf9e: 0x3e05, 0xf9f: 0x3e1d, 0xfa0: 0x3e35, 0xfa1: 0x3e4d, 0xfa2: 0x3e65, 0xfa3: 0x3e7d,\n\t0xfa4: 0x3e95, 0xfa5: 0x3e95, 0xfa6: 0x3ead, 0xfa7: 0x3ead, 0xfa8: 0x3ec5, 0xfa9: 0x3ec5,\n\t0xfaa: 0x3edd, 0xfab: 0x3ef5, 0xfac: 0x3f0d, 0xfad: 0x3f25, 0xfae: 0x3f3d, 0xfaf: 0x3f3d,\n\t0xfb0: 0x3f55, 0xfb1: 0x3f55, 0xfb2: 0x3f55, 0xfb3: 0x3f6d, 0xfb4: 0x3f85, 0xfb5: 0x3f9d,\n\t0xfb6: 0x3fb5, 0xfb7: 0x3f9d, 0xfb8: 0x3fcd, 0xfb9: 0x3fe5, 0xfba: 0x3f6d, 0xfbb: 0x3ffd,\n\t0xfbc: 0x4015, 0xfbd: 0x4015, 0xfbe: 0x4015, 0xfbf: 0x0040,\n\t// Block 0x3f, offset 0xfc0\n\t0xfc0: 0x3cc9, 0xfc1: 0x3d31, 0xfc2: 0x3d99, 0xfc3: 0x3e01, 0xfc4: 0x3e51, 0xfc5: 0x3eb9,\n\t0xfc6: 0x3f09, 0xfc7: 0x3f59, 0xfc8: 0x3fd9, 0xfc9: 0x4041, 0xfca: 0x4091, 0xfcb: 0x40e1,\n\t0xfcc: 0x4131, 0xfcd: 0x4199, 0xfce: 0x4201, 0xfcf: 0x4251, 0xfd0: 0x42a1, 0xfd1: 0x42d9,\n\t0xfd2: 0x4329, 0xfd3: 0x4391, 0xfd4: 0x43f9, 0xfd5: 0x4431, 0xfd6: 0x44b1, 0xfd7: 0x4549,\n\t0xfd8: 0x45c9, 0xfd9: 0x4619, 0xfda: 0x4699, 0xfdb: 0x4719, 0xfdc: 0x4781, 0xfdd: 0x47d1,\n\t0xfde: 0x4821, 0xfdf: 0x4871, 0xfe0: 0x48d9, 0xfe1: 0x4959, 0xfe2: 0x49c1, 0xfe3: 0x4a11,\n\t0xfe4: 0x4a61, 0xfe5: 0x4ab1, 0xfe6: 0x4ae9, 0xfe7: 0x4b21, 0xfe8: 0x4b59, 0xfe9: 0x4b91,\n\t0xfea: 0x4be1, 0xfeb: 0x4c31, 0xfec: 0x4cb1, 0xfed: 0x4d01, 0xfee: 0x4d69, 0xfef: 0x4de9,\n\t0xff0: 0x4e39, 0xff1: 0x4e71, 0xff2: 0x4ea9, 0xff3: 0x4f29, 0xff4: 0x4f91, 0xff5: 0x5011,\n\t0xff6: 0x5061, 0xff7: 0x50e1, 0xff8: 0x5119, 0xff9: 0x5169, 0xffa: 0x51b9, 0xffb: 0x5209,\n\t0xffc: 0x5259, 0xffd: 0x52a9, 0xffe: 0x5311, 0xfff: 0x5361,\n\t// Block 0x40, offset 0x1000\n\t0x1000: 0x5399, 0x1001: 0x53e9, 0x1002: 0x5439, 0x1003: 0x5489, 0x1004: 0x54f1, 0x1005: 0x5541,\n\t0x1006: 0x5591, 0x1007: 0x55e1, 0x1008: 0x5661, 0x1009: 0x56c9, 0x100a: 0x5701, 0x100b: 0x5781,\n\t0x100c: 0x57b9, 0x100d: 0x5821, 0x100e: 0x5889, 0x100f: 0x58d9, 0x1010: 0x5929, 0x1011: 0x5979,\n\t0x1012: 0x59e1, 0x1013: 0x5a19, 0x1014: 0x5a69, 0x1015: 0x5ad1, 0x1016: 0x5b09, 0x1017: 0x5b89,\n\t0x1018: 0x5bd9, 0x1019: 0x5c01, 0x101a: 0x5c29, 0x101b: 0x5c51, 0x101c: 0x5c79, 0x101d: 0x5ca1,\n\t0x101e: 0x5cc9, 0x101f: 0x5cf1, 0x1020: 0x5d19, 0x1021: 0x5d41, 0x1022: 0x5d69, 0x1023: 0x5d99,\n\t0x1024: 0x5dc9, 0x1025: 0x5df9, 0x1026: 0x5e29, 0x1027: 0x5e59, 0x1028: 0x5e89, 0x1029: 0x5eb9,\n\t0x102a: 0x5ee9, 0x102b: 0x5f19, 0x102c: 0x5f49, 0x102d: 0x5f79, 0x102e: 0x5fa9, 0x102f: 0x5fd9,\n\t0x1030: 0x6009, 0x1031: 0x402d, 0x1032: 0x6039, 0x1033: 0x6051, 0x1034: 0x404d, 0x1035: 0x6069,\n\t0x1036: 0x6081, 0x1037: 0x6099, 0x1038: 0x406d, 0x1039: 0x406d, 0x103a: 0x60b1, 0x103b: 0x60c9,\n\t0x103c: 0x6101, 0x103d: 0x6139, 0x103e: 0x6171, 0x103f: 0x61a9,\n\t// Block 0x41, offset 0x1040\n\t0x1040: 0x6211, 0x1041: 0x6229, 0x1042: 0x408d, 0x1043: 0x6241, 0x1044: 0x6259, 0x1045: 0x6271,\n\t0x1046: 0x6289, 0x1047: 0x62a1, 0x1048: 0x40ad, 0x1049: 0x62b9, 0x104a: 0x62e1, 0x104b: 0x62f9,\n\t0x104c: 0x40cd, 0x104d: 0x40cd, 0x104e: 0x6311, 0x104f: 0x6329, 0x1050: 0x6341, 0x1051: 0x40ed,\n\t0x1052: 0x410d, 0x1053: 0x412d, 0x1054: 0x414d, 0x1055: 0x416d, 0x1056: 0x6359, 0x1057: 0x6371,\n\t0x1058: 0x6389, 0x1059: 0x63a1, 0x105a: 0x63b9, 0x105b: 0x418d, 0x105c: 0x63d1, 0x105d: 0x63e9,\n\t0x105e: 0x6401, 0x105f: 0x41ad, 0x1060: 0x41cd, 0x1061: 0x6419, 0x1062: 0x41ed, 0x1063: 0x420d,\n\t0x1064: 0x422d, 0x1065: 0x6431, 0x1066: 0x424d, 0x1067: 0x6449, 0x1068: 0x6479, 0x1069: 0x6211,\n\t0x106a: 0x426d, 0x106b: 0x428d, 0x106c: 0x42ad, 0x106d: 0x42cd, 0x106e: 0x64b1, 0x106f: 0x64f1,\n\t0x1070: 0x6539, 0x1071: 0x6551, 0x1072: 0x42ed, 0x1073: 0x6569, 0x1074: 0x6581, 0x1075: 0x6599,\n\t0x1076: 0x430d, 0x1077: 0x65b1, 0x1078: 0x65c9, 0x1079: 0x65b1, 0x107a: 0x65e1, 0x107b: 0x65f9,\n\t0x107c: 0x432d, 0x107d: 0x6611, 0x107e: 0x6629, 0x107f: 0x6611,\n\t// Block 0x42, offset 0x1080\n\t0x1080: 0x434d, 0x1081: 0x436d, 0x1082: 0x0040, 0x1083: 0x6641, 0x1084: 0x6659, 0x1085: 0x6671,\n\t0x1086: 0x6689, 0x1087: 0x0040, 0x1088: 0x66c1, 0x1089: 0x66d9, 0x108a: 0x66f1, 0x108b: 0x6709,\n\t0x108c: 0x6721, 0x108d: 0x6739, 0x108e: 0x6401, 0x108f: 0x6751, 0x1090: 0x6769, 0x1091: 0x6781,\n\t0x1092: 0x438d, 0x1093: 0x6799, 0x1094: 0x6289, 0x1095: 0x43ad, 0x1096: 0x43cd, 0x1097: 0x67b1,\n\t0x1098: 0x0040, 0x1099: 0x43ed, 0x109a: 0x67c9, 0x109b: 0x67e1, 0x109c: 0x67f9, 0x109d: 0x6811,\n\t0x109e: 0x6829, 0x109f: 0x6859, 0x10a0: 0x6889, 0x10a1: 0x68b1, 0x10a2: 0x68d9, 0x10a3: 0x6901,\n\t0x10a4: 0x6929, 0x10a5: 0x6951, 0x10a6: 0x6979, 0x10a7: 0x69a1, 0x10a8: 0x69c9, 0x10a9: 0x69f1,\n\t0x10aa: 0x6a21, 0x10ab: 0x6a51, 0x10ac: 0x6a81, 0x10ad: 0x6ab1, 0x10ae: 0x6ae1, 0x10af: 0x6b11,\n\t0x10b0: 0x6b41, 0x10b1: 0x6b71, 0x10b2: 0x6ba1, 0x10b3: 0x6bd1, 0x10b4: 0x6c01, 0x10b5: 0x6c31,\n\t0x10b6: 0x6c61, 0x10b7: 0x6c91, 0x10b8: 0x6cc1, 0x10b9: 0x6cf1, 0x10ba: 0x6d21, 0x10bb: 0x6d51,\n\t0x10bc: 0x6d81, 0x10bd: 0x6db1, 0x10be: 0x6de1, 0x10bf: 0x440d,\n\t// Block 0x43, offset 0x10c0\n\t0x10c0: 0xe00d, 0x10c1: 0x0008, 0x10c2: 0xe00d, 0x10c3: 0x0008, 0x10c4: 0xe00d, 0x10c5: 0x0008,\n\t0x10c6: 0xe00d, 0x10c7: 0x0008, 0x10c8: 0xe00d, 0x10c9: 0x0008, 0x10ca: 0xe00d, 0x10cb: 0x0008,\n\t0x10cc: 0xe00d, 0x10cd: 0x0008, 0x10ce: 0xe00d, 0x10cf: 0x0008, 0x10d0: 0xe00d, 0x10d1: 0x0008,\n\t0x10d2: 0xe00d, 0x10d3: 0x0008, 0x10d4: 0xe00d, 0x10d5: 0x0008, 0x10d6: 0xe00d, 0x10d7: 0x0008,\n\t0x10d8: 0xe00d, 0x10d9: 0x0008, 0x10da: 0xe00d, 0x10db: 0x0008, 0x10dc: 0xe00d, 0x10dd: 0x0008,\n\t0x10de: 0xe00d, 0x10df: 0x0008, 0x10e0: 0xe00d, 0x10e1: 0x0008, 0x10e2: 0xe00d, 0x10e3: 0x0008,\n\t0x10e4: 0xe00d, 0x10e5: 0x0008, 0x10e6: 0xe00d, 0x10e7: 0x0008, 0x10e8: 0xe00d, 0x10e9: 0x0008,\n\t0x10ea: 0xe00d, 0x10eb: 0x0008, 0x10ec: 0xe00d, 0x10ed: 0x0008, 0x10ee: 0x0008, 0x10ef: 0x3308,\n\t0x10f0: 0x3318, 0x10f1: 0x3318, 0x10f2: 0x3318, 0x10f3: 0x0018, 0x10f4: 0x3308, 0x10f5: 0x3308,\n\t0x10f6: 0x3308, 0x10f7: 0x3308, 0x10f8: 0x3308, 0x10f9: 0x3308, 0x10fa: 0x3308, 0x10fb: 0x3308,\n\t0x10fc: 0x3308, 0x10fd: 0x3308, 0x10fe: 0x0018, 0x10ff: 0x0008,\n\t// Block 0x44, offset 0x1100\n\t0x1100: 0xe00d, 0x1101: 0x0008, 0x1102: 0xe00d, 0x1103: 0x0008, 0x1104: 0xe00d, 0x1105: 0x0008,\n\t0x1106: 0xe00d, 0x1107: 0x0008, 0x1108: 0xe00d, 0x1109: 0x0008, 0x110a: 0xe00d, 0x110b: 0x0008,\n\t0x110c: 0xe00d, 0x110d: 0x0008, 0x110e: 0xe00d, 0x110f: 0x0008, 0x1110: 0xe00d, 0x1111: 0x0008,\n\t0x1112: 0xe00d, 0x1113: 0x0008, 0x1114: 0xe00d, 0x1115: 0x0008, 0x1116: 0xe00d, 0x1117: 0x0008,\n\t0x1118: 0xe00d, 0x1119: 0x0008, 0x111a: 0xe00d, 0x111b: 0x0008, 0x111c: 0x0ea1, 0x111d: 0x6e11,\n\t0x111e: 0x3308, 0x111f: 0x3308, 0x1120: 0x0008, 0x1121: 0x0008, 0x1122: 0x0008, 0x1123: 0x0008,\n\t0x1124: 0x0008, 0x1125: 0x0008, 0x1126: 0x0008, 0x1127: 0x0008, 0x1128: 0x0008, 0x1129: 0x0008,\n\t0x112a: 0x0008, 0x112b: 0x0008, 0x112c: 0x0008, 0x112d: 0x0008, 0x112e: 0x0008, 0x112f: 0x0008,\n\t0x1130: 0x0008, 0x1131: 0x0008, 0x1132: 0x0008, 0x1133: 0x0008, 0x1134: 0x0008, 0x1135: 0x0008,\n\t0x1136: 0x0008, 0x1137: 0x0008, 0x1138: 0x0008, 0x1139: 0x0008, 0x113a: 0x0008, 0x113b: 0x0008,\n\t0x113c: 0x0008, 0x113d: 0x0008, 0x113e: 0x0008, 0x113f: 0x0008,\n\t// Block 0x45, offset 0x1140\n\t0x1140: 0x0018, 0x1141: 0x0018, 0x1142: 0x0018, 0x1143: 0x0018, 0x1144: 0x0018, 0x1145: 0x0018,\n\t0x1146: 0x0018, 0x1147: 0x0018, 0x1148: 0x0018, 0x1149: 0x0018, 0x114a: 0x0018, 0x114b: 0x0018,\n\t0x114c: 0x0018, 0x114d: 0x0018, 0x114e: 0x0018, 0x114f: 0x0018, 0x1150: 0x0018, 0x1151: 0x0018,\n\t0x1152: 0x0018, 0x1153: 0x0018, 0x1154: 0x0018, 0x1155: 0x0018, 0x1156: 0x0018, 0x1157: 0x0008,\n\t0x1158: 0x0008, 0x1159: 0x0008, 0x115a: 0x0008, 0x115b: 0x0008, 0x115c: 0x0008, 0x115d: 0x0008,\n\t0x115e: 0x0008, 0x115f: 0x0008, 0x1160: 0x0018, 0x1161: 0x0018, 0x1162: 0xe00d, 0x1163: 0x0008,\n\t0x1164: 0xe00d, 0x1165: 0x0008, 0x1166: 0xe00d, 0x1167: 0x0008, 0x1168: 0xe00d, 0x1169: 0x0008,\n\t0x116a: 0xe00d, 0x116b: 0x0008, 0x116c: 0xe00d, 0x116d: 0x0008, 0x116e: 0xe00d, 0x116f: 0x0008,\n\t0x1170: 0x0008, 0x1171: 0x0008, 0x1172: 0xe00d, 0x1173: 0x0008, 0x1174: 0xe00d, 0x1175: 0x0008,\n\t0x1176: 0xe00d, 0x1177: 0x0008, 0x1178: 0xe00d, 0x1179: 0x0008, 0x117a: 0xe00d, 0x117b: 0x0008,\n\t0x117c: 0xe00d, 0x117d: 0x0008, 0x117e: 0xe00d, 0x117f: 0x0008,\n\t// Block 0x46, offset 0x1180\n\t0x1180: 0xe00d, 0x1181: 0x0008, 0x1182: 0xe00d, 0x1183: 0x0008, 0x1184: 0xe00d, 0x1185: 0x0008,\n\t0x1186: 0xe00d, 0x1187: 0x0008, 0x1188: 0xe00d, 0x1189: 0x0008, 0x118a: 0xe00d, 0x118b: 0x0008,\n\t0x118c: 0xe00d, 0x118d: 0x0008, 0x118e: 0xe00d, 0x118f: 0x0008, 0x1190: 0xe00d, 0x1191: 0x0008,\n\t0x1192: 0xe00d, 0x1193: 0x0008, 0x1194: 0xe00d, 0x1195: 0x0008, 0x1196: 0xe00d, 0x1197: 0x0008,\n\t0x1198: 0xe00d, 0x1199: 0x0008, 0x119a: 0xe00d, 0x119b: 0x0008, 0x119c: 0xe00d, 0x119d: 0x0008,\n\t0x119e: 0xe00d, 0x119f: 0x0008, 0x11a0: 0xe00d, 0x11a1: 0x0008, 0x11a2: 0xe00d, 0x11a3: 0x0008,\n\t0x11a4: 0xe00d, 0x11a5: 0x0008, 0x11a6: 0xe00d, 0x11a7: 0x0008, 0x11a8: 0xe00d, 0x11a9: 0x0008,\n\t0x11aa: 0xe00d, 0x11ab: 0x0008, 0x11ac: 0xe00d, 0x11ad: 0x0008, 0x11ae: 0xe00d, 0x11af: 0x0008,\n\t0x11b0: 0xe0fd, 0x11b1: 0x0008, 0x11b2: 0x0008, 0x11b3: 0x0008, 0x11b4: 0x0008, 0x11b5: 0x0008,\n\t0x11b6: 0x0008, 0x11b7: 0x0008, 0x11b8: 0x0008, 0x11b9: 0xe01d, 0x11ba: 0x0008, 0x11bb: 0xe03d,\n\t0x11bc: 0x0008, 0x11bd: 0x442d, 0x11be: 0xe00d, 0x11bf: 0x0008,\n\t// Block 0x47, offset 0x11c0\n\t0x11c0: 0xe00d, 0x11c1: 0x0008, 0x11c2: 0xe00d, 0x11c3: 0x0008, 0x11c4: 0xe00d, 0x11c5: 0x0008,\n\t0x11c6: 0xe00d, 0x11c7: 0x0008, 0x11c8: 0x0008, 0x11c9: 0x0018, 0x11ca: 0x0018, 0x11cb: 0xe03d,\n\t0x11cc: 0x0008, 0x11cd: 0x11d9, 0x11ce: 0x0008, 0x11cf: 0x0008, 0x11d0: 0xe00d, 0x11d1: 0x0008,\n\t0x11d2: 0xe00d, 0x11d3: 0x0008, 0x11d4: 0x0008, 0x11d5: 0x0008, 0x11d6: 0xe00d, 0x11d7: 0x0008,\n\t0x11d8: 0xe00d, 0x11d9: 0x0008, 0x11da: 0xe00d, 0x11db: 0x0008, 0x11dc: 0xe00d, 0x11dd: 0x0008,\n\t0x11de: 0xe00d, 0x11df: 0x0008, 0x11e0: 0xe00d, 0x11e1: 0x0008, 0x11e2: 0xe00d, 0x11e3: 0x0008,\n\t0x11e4: 0xe00d, 0x11e5: 0x0008, 0x11e6: 0xe00d, 0x11e7: 0x0008, 0x11e8: 0xe00d, 0x11e9: 0x0008,\n\t0x11ea: 0x6e29, 0x11eb: 0x1029, 0x11ec: 0x11c1, 0x11ed: 0x6e41, 0x11ee: 0x1221, 0x11ef: 0x0040,\n\t0x11f0: 0x6e59, 0x11f1: 0x6e71, 0x11f2: 0x1239, 0x11f3: 0x444d, 0x11f4: 0xe00d, 0x11f5: 0x0008,\n\t0x11f6: 0xe00d, 0x11f7: 0x0008, 0x11f8: 0x0040, 0x11f9: 0x0040, 0x11fa: 0x0040, 0x11fb: 0x0040,\n\t0x11fc: 0x0040, 0x11fd: 0x0040, 0x11fe: 0x0040, 0x11ff: 0x0040,\n\t// Block 0x48, offset 0x1200\n\t0x1200: 0x64d5, 0x1201: 0x64f5, 0x1202: 0x6515, 0x1203: 0x6535, 0x1204: 0x6555, 0x1205: 0x6575,\n\t0x1206: 0x6595, 0x1207: 0x65b5, 0x1208: 0x65d5, 0x1209: 0x65f5, 0x120a: 0x6615, 0x120b: 0x6635,\n\t0x120c: 0x6655, 0x120d: 0x6675, 0x120e: 0x0008, 0x120f: 0x0008, 0x1210: 0x6695, 0x1211: 0x0008,\n\t0x1212: 0x66b5, 0x1213: 0x0008, 0x1214: 0x0008, 0x1215: 0x66d5, 0x1216: 0x66f5, 0x1217: 0x6715,\n\t0x1218: 0x6735, 0x1219: 0x6755, 0x121a: 0x6775, 0x121b: 0x6795, 0x121c: 0x67b5, 0x121d: 0x67d5,\n\t0x121e: 0x67f5, 0x121f: 0x0008, 0x1220: 0x6815, 0x1221: 0x0008, 0x1222: 0x6835, 0x1223: 0x0008,\n\t0x1224: 0x0008, 0x1225: 0x6855, 0x1226: 0x6875, 0x1227: 0x0008, 0x1228: 0x0008, 0x1229: 0x0008,\n\t0x122a: 0x6895, 0x122b: 0x68b5, 0x122c: 0x68d5, 0x122d: 0x68f5, 0x122e: 0x6915, 0x122f: 0x6935,\n\t0x1230: 0x6955, 0x1231: 0x6975, 0x1232: 0x6995, 0x1233: 0x69b5, 0x1234: 0x69d5, 0x1235: 0x69f5,\n\t0x1236: 0x6a15, 0x1237: 0x6a35, 0x1238: 0x6a55, 0x1239: 0x6a75, 0x123a: 0x6a95, 0x123b: 0x6ab5,\n\t0x123c: 0x6ad5, 0x123d: 0x6af5, 0x123e: 0x6b15, 0x123f: 0x6b35,\n\t// Block 0x49, offset 0x1240\n\t0x1240: 0x7a95, 0x1241: 0x7ab5, 0x1242: 0x7ad5, 0x1243: 0x7af5, 0x1244: 0x7b15, 0x1245: 0x7b35,\n\t0x1246: 0x7b55, 0x1247: 0x7b75, 0x1248: 0x7b95, 0x1249: 0x7bb5, 0x124a: 0x7bd5, 0x124b: 0x7bf5,\n\t0x124c: 0x7c15, 0x124d: 0x7c35, 0x124e: 0x7c55, 0x124f: 0x6ec9, 0x1250: 0x6ef1, 0x1251: 0x6f19,\n\t0x1252: 0x7c75, 0x1253: 0x7c95, 0x1254: 0x7cb5, 0x1255: 0x6f41, 0x1256: 0x6f69, 0x1257: 0x6f91,\n\t0x1258: 0x7cd5, 0x1259: 0x7cf5, 0x125a: 0x0040, 0x125b: 0x0040, 0x125c: 0x0040, 0x125d: 0x0040,\n\t0x125e: 0x0040, 0x125f: 0x0040, 0x1260: 0x0040, 0x1261: 0x0040, 0x1262: 0x0040, 0x1263: 0x0040,\n\t0x1264: 0x0040, 0x1265: 0x0040, 0x1266: 0x0040, 0x1267: 0x0040, 0x1268: 0x0040, 0x1269: 0x0040,\n\t0x126a: 0x0040, 0x126b: 0x0040, 0x126c: 0x0040, 0x126d: 0x0040, 0x126e: 0x0040, 0x126f: 0x0040,\n\t0x1270: 0x0040, 0x1271: 0x0040, 0x1272: 0x0040, 0x1273: 0x0040, 0x1274: 0x0040, 0x1275: 0x0040,\n\t0x1276: 0x0040, 0x1277: 0x0040, 0x1278: 0x0040, 0x1279: 0x0040, 0x127a: 0x0040, 0x127b: 0x0040,\n\t0x127c: 0x0040, 0x127d: 0x0040, 0x127e: 0x0040, 0x127f: 0x0040,\n\t// Block 0x4a, offset 0x1280\n\t0x1280: 0x6fb9, 0x1281: 0x6fd1, 0x1282: 0x6fe9, 0x1283: 0x7d15, 0x1284: 0x7d35, 0x1285: 0x7001,\n\t0x1286: 0x7001, 0x1287: 0x0040, 0x1288: 0x0040, 0x1289: 0x0040, 0x128a: 0x0040, 0x128b: 0x0040,\n\t0x128c: 0x0040, 0x128d: 0x0040, 0x128e: 0x0040, 0x128f: 0x0040, 0x1290: 0x0040, 0x1291: 0x0040,\n\t0x1292: 0x0040, 0x1293: 0x7019, 0x1294: 0x7041, 0x1295: 0x7069, 0x1296: 0x7091, 0x1297: 0x70b9,\n\t0x1298: 0x0040, 0x1299: 0x0040, 0x129a: 0x0040, 0x129b: 0x0040, 0x129c: 0x0040, 0x129d: 0x70e1,\n\t0x129e: 0x3308, 0x129f: 0x7109, 0x12a0: 0x7131, 0x12a1: 0x20a9, 0x12a2: 0x20f1, 0x12a3: 0x7149,\n\t0x12a4: 0x7161, 0x12a5: 0x7179, 0x12a6: 0x7191, 0x12a7: 0x71a9, 0x12a8: 0x71c1, 0x12a9: 0x1fb2,\n\t0x12aa: 0x71d9, 0x12ab: 0x7201, 0x12ac: 0x7229, 0x12ad: 0x7261, 0x12ae: 0x7299, 0x12af: 0x72c1,\n\t0x12b0: 0x72e9, 0x12b1: 0x7311, 0x12b2: 0x7339, 0x12b3: 0x7361, 0x12b4: 0x7389, 0x12b5: 0x73b1,\n\t0x12b6: 0x73d9, 0x12b7: 0x0040, 0x12b8: 0x7401, 0x12b9: 0x7429, 0x12ba: 0x7451, 0x12bb: 0x7479,\n\t0x12bc: 0x74a1, 0x12bd: 0x0040, 0x12be: 0x74c9, 0x12bf: 0x0040,\n\t// Block 0x4b, offset 0x12c0\n\t0x12c0: 0x74f1, 0x12c1: 0x7519, 0x12c2: 0x0040, 0x12c3: 0x7541, 0x12c4: 0x7569, 0x12c5: 0x0040,\n\t0x12c6: 0x7591, 0x12c7: 0x75b9, 0x12c8: 0x75e1, 0x12c9: 0x7609, 0x12ca: 0x7631, 0x12cb: 0x7659,\n\t0x12cc: 0x7681, 0x12cd: 0x76a9, 0x12ce: 0x76d1, 0x12cf: 0x76f9, 0x12d0: 0x7721, 0x12d1: 0x7721,\n\t0x12d2: 0x7739, 0x12d3: 0x7739, 0x12d4: 0x7739, 0x12d5: 0x7739, 0x12d6: 0x7751, 0x12d7: 0x7751,\n\t0x12d8: 0x7751, 0x12d9: 0x7751, 0x12da: 0x7769, 0x12db: 0x7769, 0x12dc: 0x7769, 0x12dd: 0x7769,\n\t0x12de: 0x7781, 0x12df: 0x7781, 0x12e0: 0x7781, 0x12e1: 0x7781, 0x12e2: 0x7799, 0x12e3: 0x7799,\n\t0x12e4: 0x7799, 0x12e5: 0x7799, 0x12e6: 0x77b1, 0x12e7: 0x77b1, 0x12e8: 0x77b1, 0x12e9: 0x77b1,\n\t0x12ea: 0x77c9, 0x12eb: 0x77c9, 0x12ec: 0x77c9, 0x12ed: 0x77c9, 0x12ee: 0x77e1, 0x12ef: 0x77e1,\n\t0x12f0: 0x77e1, 0x12f1: 0x77e1, 0x12f2: 0x77f9, 0x12f3: 0x77f9, 0x12f4: 0x77f9, 0x12f5: 0x77f9,\n\t0x12f6: 0x7811, 0x12f7: 0x7811, 0x12f8: 0x7811, 0x12f9: 0x7811, 0x12fa: 0x7829, 0x12fb: 0x7829,\n\t0x12fc: 0x7829, 0x12fd: 0x7829, 0x12fe: 0x7841, 0x12ff: 0x7841,\n\t// Block 0x4c, offset 0x1300\n\t0x1300: 0x7841, 0x1301: 0x7841, 0x1302: 0x7859, 0x1303: 0x7859, 0x1304: 0x7871, 0x1305: 0x7871,\n\t0x1306: 0x7889, 0x1307: 0x7889, 0x1308: 0x78a1, 0x1309: 0x78a1, 0x130a: 0x78b9, 0x130b: 0x78b9,\n\t0x130c: 0x78d1, 0x130d: 0x78d1, 0x130e: 0x78e9, 0x130f: 0x78e9, 0x1310: 0x78e9, 0x1311: 0x78e9,\n\t0x1312: 0x7901, 0x1313: 0x7901, 0x1314: 0x7901, 0x1315: 0x7901, 0x1316: 0x7919, 0x1317: 0x7919,\n\t0x1318: 0x7919, 0x1319: 0x7919, 0x131a: 0x7931, 0x131b: 0x7931, 0x131c: 0x7931, 0x131d: 0x7931,\n\t0x131e: 0x7949, 0x131f: 0x7949, 0x1320: 0x7961, 0x1321: 0x7961, 0x1322: 0x7961, 0x1323: 0x7961,\n\t0x1324: 0x7979, 0x1325: 0x7979, 0x1326: 0x7991, 0x1327: 0x7991, 0x1328: 0x7991, 0x1329: 0x7991,\n\t0x132a: 0x79a9, 0x132b: 0x79a9, 0x132c: 0x79a9, 0x132d: 0x79a9, 0x132e: 0x79c1, 0x132f: 0x79c1,\n\t0x1330: 0x79d9, 0x1331: 0x79d9, 0x1332: 0x0818, 0x1333: 0x0818, 0x1334: 0x0818, 0x1335: 0x0818,\n\t0x1336: 0x0818, 0x1337: 0x0818, 0x1338: 0x0818, 0x1339: 0x0818, 0x133a: 0x0818, 0x133b: 0x0818,\n\t0x133c: 0x0818, 0x133d: 0x0818, 0x133e: 0x0818, 0x133f: 0x0818,\n\t// Block 0x4d, offset 0x1340\n\t0x1340: 0x0818, 0x1341: 0x0818, 0x1342: 0x0040, 0x1343: 0x0040, 0x1344: 0x0040, 0x1345: 0x0040,\n\t0x1346: 0x0040, 0x1347: 0x0040, 0x1348: 0x0040, 0x1349: 0x0040, 0x134a: 0x0040, 0x134b: 0x0040,\n\t0x134c: 0x0040, 0x134d: 0x0040, 0x134e: 0x0040, 0x134f: 0x0040, 0x1350: 0x0040, 0x1351: 0x0040,\n\t0x1352: 0x0040, 0x1353: 0x79f1, 0x1354: 0x79f1, 0x1355: 0x79f1, 0x1356: 0x79f1, 0x1357: 0x7a09,\n\t0x1358: 0x7a09, 0x1359: 0x7a21, 0x135a: 0x7a21, 0x135b: 0x7a39, 0x135c: 0x7a39, 0x135d: 0x0479,\n\t0x135e: 0x7a51, 0x135f: 0x7a51, 0x1360: 0x7a69, 0x1361: 0x7a69, 0x1362: 0x7a81, 0x1363: 0x7a81,\n\t0x1364: 0x7a99, 0x1365: 0x7a99, 0x1366: 0x7a99, 0x1367: 0x7a99, 0x1368: 0x7ab1, 0x1369: 0x7ab1,\n\t0x136a: 0x7ac9, 0x136b: 0x7ac9, 0x136c: 0x7af1, 0x136d: 0x7af1, 0x136e: 0x7b19, 0x136f: 0x7b19,\n\t0x1370: 0x7b41, 0x1371: 0x7b41, 0x1372: 0x7b69, 0x1373: 0x7b69, 0x1374: 0x7b91, 0x1375: 0x7b91,\n\t0x1376: 0x7bb9, 0x1377: 0x7bb9, 0x1378: 0x7bb9, 0x1379: 0x7be1, 0x137a: 0x7be1, 0x137b: 0x7be1,\n\t0x137c: 0x7c09, 0x137d: 0x7c09, 0x137e: 0x7c09, 0x137f: 0x7c09,\n\t// Block 0x4e, offset 0x1380\n\t0x1380: 0x85f9, 0x1381: 0x8621, 0x1382: 0x8649, 0x1383: 0x8671, 0x1384: 0x8699, 0x1385: 0x86c1,\n\t0x1386: 0x86e9, 0x1387: 0x8711, 0x1388: 0x8739, 0x1389: 0x8761, 0x138a: 0x8789, 0x138b: 0x87b1,\n\t0x138c: 0x87d9, 0x138d: 0x8801, 0x138e: 0x8829, 0x138f: 0x8851, 0x1390: 0x8879, 0x1391: 0x88a1,\n\t0x1392: 0x88c9, 0x1393: 0x88f1, 0x1394: 0x8919, 0x1395: 0x8941, 0x1396: 0x8969, 0x1397: 0x8991,\n\t0x1398: 0x89b9, 0x1399: 0x89e1, 0x139a: 0x8a09, 0x139b: 0x8a31, 0x139c: 0x8a59, 0x139d: 0x8a81,\n\t0x139e: 0x8aaa, 0x139f: 0x8ada, 0x13a0: 0x8b0a, 0x13a1: 0x8b3a, 0x13a2: 0x8b6a, 0x13a3: 0x8b9a,\n\t0x13a4: 0x8bc9, 0x13a5: 0x8bf1, 0x13a6: 0x7c71, 0x13a7: 0x8c19, 0x13a8: 0x7be1, 0x13a9: 0x7c99,\n\t0x13aa: 0x8c41, 0x13ab: 0x8c69, 0x13ac: 0x7d39, 0x13ad: 0x8c91, 0x13ae: 0x7d61, 0x13af: 0x7d89,\n\t0x13b0: 0x8cb9, 0x13b1: 0x8ce1, 0x13b2: 0x7e29, 0x13b3: 0x8d09, 0x13b4: 0x7e51, 0x13b5: 0x7e79,\n\t0x13b6: 0x8d31, 0x13b7: 0x8d59, 0x13b8: 0x7ec9, 0x13b9: 0x8d81, 0x13ba: 0x7ef1, 0x13bb: 0x7f19,\n\t0x13bc: 0x83a1, 0x13bd: 0x83c9, 0x13be: 0x8441, 0x13bf: 0x8469,\n\t// Block 0x4f, offset 0x13c0\n\t0x13c0: 0x8491, 0x13c1: 0x8531, 0x13c2: 0x8559, 0x13c3: 0x8581, 0x13c4: 0x85a9, 0x13c5: 0x8649,\n\t0x13c6: 0x8671, 0x13c7: 0x8699, 0x13c8: 0x8da9, 0x13c9: 0x8739, 0x13ca: 0x8dd1, 0x13cb: 0x8df9,\n\t0x13cc: 0x8829, 0x13cd: 0x8e21, 0x13ce: 0x8851, 0x13cf: 0x8879, 0x13d0: 0x8a81, 0x13d1: 0x8e49,\n\t0x13d2: 0x8e71, 0x13d3: 0x89b9, 0x13d4: 0x8e99, 0x13d5: 0x89e1, 0x13d6: 0x8a09, 0x13d7: 0x7c21,\n\t0x13d8: 0x7c49, 0x13d9: 0x8ec1, 0x13da: 0x7c71, 0x13db: 0x8ee9, 0x13dc: 0x7cc1, 0x13dd: 0x7ce9,\n\t0x13de: 0x7d11, 0x13df: 0x7d39, 0x13e0: 0x8f11, 0x13e1: 0x7db1, 0x13e2: 0x7dd9, 0x13e3: 0x7e01,\n\t0x13e4: 0x7e29, 0x13e5: 0x8f39, 0x13e6: 0x7ec9, 0x13e7: 0x7f41, 0x13e8: 0x7f69, 0x13e9: 0x7f91,\n\t0x13ea: 0x7fb9, 0x13eb: 0x7fe1, 0x13ec: 0x8031, 0x13ed: 0x8059, 0x13ee: 0x8081, 0x13ef: 0x80a9,\n\t0x13f0: 0x80d1, 0x13f1: 0x80f9, 0x13f2: 0x8f61, 0x13f3: 0x8121, 0x13f4: 0x8149, 0x13f5: 0x8171,\n\t0x13f6: 0x8199, 0x13f7: 0x81c1, 0x13f8: 0x81e9, 0x13f9: 0x8239, 0x13fa: 0x8261, 0x13fb: 0x8289,\n\t0x13fc: 0x82b1, 0x13fd: 0x82d9, 0x13fe: 0x8301, 0x13ff: 0x8329,\n\t// Block 0x50, offset 0x1400\n\t0x1400: 0x8351, 0x1401: 0x8379, 0x1402: 0x83f1, 0x1403: 0x8419, 0x1404: 0x84b9, 0x1405: 0x84e1,\n\t0x1406: 0x8509, 0x1407: 0x8531, 0x1408: 0x8559, 0x1409: 0x85d1, 0x140a: 0x85f9, 0x140b: 0x8621,\n\t0x140c: 0x8649, 0x140d: 0x8f89, 0x140e: 0x86c1, 0x140f: 0x86e9, 0x1410: 0x8711, 0x1411: 0x8739,\n\t0x1412: 0x87b1, 0x1413: 0x87d9, 0x1414: 0x8801, 0x1415: 0x8829, 0x1416: 0x8fb1, 0x1417: 0x88a1,\n\t0x1418: 0x88c9, 0x1419: 0x8fd9, 0x141a: 0x8941, 0x141b: 0x8969, 0x141c: 0x8991, 0x141d: 0x89b9,\n\t0x141e: 0x9001, 0x141f: 0x7c71, 0x1420: 0x8ee9, 0x1421: 0x7d39, 0x1422: 0x8f11, 0x1423: 0x7e29,\n\t0x1424: 0x8f39, 0x1425: 0x7ec9, 0x1426: 0x9029, 0x1427: 0x80d1, 0x1428: 0x9051, 0x1429: 0x9079,\n\t0x142a: 0x90a1, 0x142b: 0x8531, 0x142c: 0x8559, 0x142d: 0x8649, 0x142e: 0x8829, 0x142f: 0x8fb1,\n\t0x1430: 0x89b9, 0x1431: 0x9001, 0x1432: 0x90c9, 0x1433: 0x9101, 0x1434: 0x9139, 0x1435: 0x9171,\n\t0x1436: 0x9199, 0x1437: 0x91c1, 0x1438: 0x91e9, 0x1439: 0x9211, 0x143a: 0x9239, 0x143b: 0x9261,\n\t0x143c: 0x9289, 0x143d: 0x92b1, 0x143e: 0x92d9, 0x143f: 0x9301,\n\t// Block 0x51, offset 0x1440\n\t0x1440: 0x9329, 0x1441: 0x9351, 0x1442: 0x9379, 0x1443: 0x93a1, 0x1444: 0x93c9, 0x1445: 0x93f1,\n\t0x1446: 0x9419, 0x1447: 0x9441, 0x1448: 0x9469, 0x1449: 0x9491, 0x144a: 0x94b9, 0x144b: 0x94e1,\n\t0x144c: 0x9079, 0x144d: 0x9509, 0x144e: 0x9531, 0x144f: 0x9559, 0x1450: 0x9581, 0x1451: 0x9171,\n\t0x1452: 0x9199, 0x1453: 0x91c1, 0x1454: 0x91e9, 0x1455: 0x9211, 0x1456: 0x9239, 0x1457: 0x9261,\n\t0x1458: 0x9289, 0x1459: 0x92b1, 0x145a: 0x92d9, 0x145b: 0x9301, 0x145c: 0x9329, 0x145d: 0x9351,\n\t0x145e: 0x9379, 0x145f: 0x93a1, 0x1460: 0x93c9, 0x1461: 0x93f1, 0x1462: 0x9419, 0x1463: 0x9441,\n\t0x1464: 0x9469, 0x1465: 0x9491, 0x1466: 0x94b9, 0x1467: 0x94e1, 0x1468: 0x9079, 0x1469: 0x9509,\n\t0x146a: 0x9531, 0x146b: 0x9559, 0x146c: 0x9581, 0x146d: 0x9491, 0x146e: 0x94b9, 0x146f: 0x94e1,\n\t0x1470: 0x9079, 0x1471: 0x9051, 0x1472: 0x90a1, 0x1473: 0x8211, 0x1474: 0x8059, 0x1475: 0x8081,\n\t0x1476: 0x80a9, 0x1477: 0x9491, 0x1478: 0x94b9, 0x1479: 0x94e1, 0x147a: 0x8211, 0x147b: 0x8239,\n\t0x147c: 0x95a9, 0x147d: 0x95a9, 0x147e: 0x0018, 0x147f: 0x0018,\n\t// Block 0x52, offset 0x1480\n\t0x1480: 0x0040, 0x1481: 0x0040, 0x1482: 0x0040, 0x1483: 0x0040, 0x1484: 0x0040, 0x1485: 0x0040,\n\t0x1486: 0x0040, 0x1487: 0x0040, 0x1488: 0x0040, 0x1489: 0x0040, 0x148a: 0x0040, 0x148b: 0x0040,\n\t0x148c: 0x0040, 0x148d: 0x0040, 0x148e: 0x0040, 0x148f: 0x0040, 0x1490: 0x95d1, 0x1491: 0x9609,\n\t0x1492: 0x9609, 0x1493: 0x9641, 0x1494: 0x9679, 0x1495: 0x96b1, 0x1496: 0x96e9, 0x1497: 0x9721,\n\t0x1498: 0x9759, 0x1499: 0x9759, 0x149a: 0x9791, 0x149b: 0x97c9, 0x149c: 0x9801, 0x149d: 0x9839,\n\t0x149e: 0x9871, 0x149f: 0x98a9, 0x14a0: 0x98a9, 0x14a1: 0x98e1, 0x14a2: 0x9919, 0x14a3: 0x9919,\n\t0x14a4: 0x9951, 0x14a5: 0x9951, 0x14a6: 0x9989, 0x14a7: 0x99c1, 0x14a8: 0x99c1, 0x14a9: 0x99f9,\n\t0x14aa: 0x9a31, 0x14ab: 0x9a31, 0x14ac: 0x9a69, 0x14ad: 0x9a69, 0x14ae: 0x9aa1, 0x14af: 0x9ad9,\n\t0x14b0: 0x9ad9, 0x14b1: 0x9b11, 0x14b2: 0x9b11, 0x14b3: 0x9b49, 0x14b4: 0x9b81, 0x14b5: 0x9bb9,\n\t0x14b6: 0x9bf1, 0x14b7: 0x9bf1, 0x14b8: 0x9c29, 0x14b9: 0x9c61, 0x14ba: 0x9c99, 0x14bb: 0x9cd1,\n\t0x14bc: 0x9d09, 0x14bd: 0x9d09, 0x14be: 0x9d41, 0x14bf: 0x9d79,\n\t// Block 0x53, offset 0x14c0\n\t0x14c0: 0xa949, 0x14c1: 0xa981, 0x14c2: 0xa9b9, 0x14c3: 0xa8a1, 0x14c4: 0x9bb9, 0x14c5: 0x9989,\n\t0x14c6: 0xa9f1, 0x14c7: 0xaa29, 0x14c8: 0x0040, 0x14c9: 0x0040, 0x14ca: 0x0040, 0x14cb: 0x0040,\n\t0x14cc: 0x0040, 0x14cd: 0x0040, 0x14ce: 0x0040, 0x14cf: 0x0040, 0x14d0: 0x0040, 0x14d1: 0x0040,\n\t0x14d2: 0x0040, 0x14d3: 0x0040, 0x14d4: 0x0040, 0x14d5: 0x0040, 0x14d6: 0x0040, 0x14d7: 0x0040,\n\t0x14d8: 0x0040, 0x14d9: 0x0040, 0x14da: 0x0040, 0x14db: 0x0040, 0x14dc: 0x0040, 0x14dd: 0x0040,\n\t0x14de: 0x0040, 0x14df: 0x0040, 0x14e0: 0x0040, 0x14e1: 0x0040, 0x14e2: 0x0040, 0x14e3: 0x0040,\n\t0x14e4: 0x0040, 0x14e5: 0x0040, 0x14e6: 0x0040, 0x14e7: 0x0040, 0x14e8: 0x0040, 0x14e9: 0x0040,\n\t0x14ea: 0x0040, 0x14eb: 0x0040, 0x14ec: 0x0040, 0x14ed: 0x0040, 0x14ee: 0x0040, 0x14ef: 0x0040,\n\t0x14f0: 0xaa61, 0x14f1: 0xaa99, 0x14f2: 0xaad1, 0x14f3: 0xab19, 0x14f4: 0xab61, 0x14f5: 0xaba9,\n\t0x14f6: 0xabf1, 0x14f7: 0xac39, 0x14f8: 0xac81, 0x14f9: 0xacc9, 0x14fa: 0xad02, 0x14fb: 0xae12,\n\t0x14fc: 0xae91, 0x14fd: 0x0018, 0x14fe: 0x0040, 0x14ff: 0x0040,\n\t// Block 0x54, offset 0x1500\n\t0x1500: 0x33c0, 0x1501: 0x33c0, 0x1502: 0x33c0, 0x1503: 0x33c0, 0x1504: 0x33c0, 0x1505: 0x33c0,\n\t0x1506: 0x33c0, 0x1507: 0x33c0, 0x1508: 0x33c0, 0x1509: 0x33c0, 0x150a: 0x33c0, 0x150b: 0x33c0,\n\t0x150c: 0x33c0, 0x150d: 0x33c0, 0x150e: 0x33c0, 0x150f: 0x33c0, 0x1510: 0xaeda, 0x1511: 0x7d55,\n\t0x1512: 0x0040, 0x1513: 0xaeea, 0x1514: 0x03c2, 0x1515: 0xaefa, 0x1516: 0xaf0a, 0x1517: 0x7d75,\n\t0x1518: 0x7d95, 0x1519: 0x0040, 0x151a: 0x0040, 0x151b: 0x0040, 0x151c: 0x0040, 0x151d: 0x0040,\n\t0x151e: 0x0040, 0x151f: 0x0040, 0x1520: 0x3308, 0x1521: 0x3308, 0x1522: 0x3308, 0x1523: 0x3308,\n\t0x1524: 0x3308, 0x1525: 0x3308, 0x1526: 0x3308, 0x1527: 0x3308, 0x1528: 0x3308, 0x1529: 0x3308,\n\t0x152a: 0x3308, 0x152b: 0x3308, 0x152c: 0x3308, 0x152d: 0x3308, 0x152e: 0x3308, 0x152f: 0x3308,\n\t0x1530: 0x0040, 0x1531: 0x7db5, 0x1532: 0x7dd5, 0x1533: 0xaf1a, 0x1534: 0xaf1a, 0x1535: 0x1fd2,\n\t0x1536: 0x1fe2, 0x1537: 0xaf2a, 0x1538: 0xaf3a, 0x1539: 0x7df5, 0x153a: 0x7e15, 0x153b: 0x7e35,\n\t0x153c: 0x7df5, 0x153d: 0x7e55, 0x153e: 0x7e75, 0x153f: 0x7e55,\n\t// Block 0x55, offset 0x1540\n\t0x1540: 0x7e95, 0x1541: 0x7eb5, 0x1542: 0x7ed5, 0x1543: 0x7eb5, 0x1544: 0x7ef5, 0x1545: 0x0018,\n\t0x1546: 0x0018, 0x1547: 0xaf4a, 0x1548: 0xaf5a, 0x1549: 0x7f16, 0x154a: 0x7f36, 0x154b: 0x7f56,\n\t0x154c: 0x7f76, 0x154d: 0xaf1a, 0x154e: 0xaf1a, 0x154f: 0xaf1a, 0x1550: 0xaeda, 0x1551: 0x7f95,\n\t0x1552: 0x0040, 0x1553: 0x0040, 0x1554: 0x03c2, 0x1555: 0xaeea, 0x1556: 0xaf0a, 0x1557: 0xaefa,\n\t0x1558: 0x7fb5, 0x1559: 0x1fd2, 0x155a: 0x1fe2, 0x155b: 0xaf2a, 0x155c: 0xaf3a, 0x155d: 0x7e95,\n\t0x155e: 0x7ef5, 0x155f: 0xaf6a, 0x1560: 0xaf7a, 0x1561: 0xaf8a, 0x1562: 0x1fb2, 0x1563: 0xaf99,\n\t0x1564: 0xafaa, 0x1565: 0xafba, 0x1566: 0x1fc2, 0x1567: 0x0040, 0x1568: 0xafca, 0x1569: 0xafda,\n\t0x156a: 0xafea, 0x156b: 0xaffa, 0x156c: 0x0040, 0x156d: 0x0040, 0x156e: 0x0040, 0x156f: 0x0040,\n\t0x1570: 0x7fd6, 0x1571: 0xb009, 0x1572: 0x7ff6, 0x1573: 0x0808, 0x1574: 0x8016, 0x1575: 0x0040,\n\t0x1576: 0x8036, 0x1577: 0xb031, 0x1578: 0x8056, 0x1579: 0xb059, 0x157a: 0x8076, 0x157b: 0xb081,\n\t0x157c: 0x8096, 0x157d: 0xb0a9, 0x157e: 0x80b6, 0x157f: 0xb0d1,\n\t// Block 0x56, offset 0x1580\n\t0x1580: 0xb0f9, 0x1581: 0xb111, 0x1582: 0xb111, 0x1583: 0xb129, 0x1584: 0xb129, 0x1585: 0xb141,\n\t0x1586: 0xb141, 0x1587: 0xb159, 0x1588: 0xb159, 0x1589: 0xb171, 0x158a: 0xb171, 0x158b: 0xb171,\n\t0x158c: 0xb171, 0x158d: 0xb189, 0x158e: 0xb189, 0x158f: 0xb1a1, 0x1590: 0xb1a1, 0x1591: 0xb1a1,\n\t0x1592: 0xb1a1, 0x1593: 0xb1b9, 0x1594: 0xb1b9, 0x1595: 0xb1d1, 0x1596: 0xb1d1, 0x1597: 0xb1d1,\n\t0x1598: 0xb1d1, 0x1599: 0xb1e9, 0x159a: 0xb1e9, 0x159b: 0xb1e9, 0x159c: 0xb1e9, 0x159d: 0xb201,\n\t0x159e: 0xb201, 0x159f: 0xb201, 0x15a0: 0xb201, 0x15a1: 0xb219, 0x15a2: 0xb219, 0x15a3: 0xb219,\n\t0x15a4: 0xb219, 0x15a5: 0xb231, 0x15a6: 0xb231, 0x15a7: 0xb231, 0x15a8: 0xb231, 0x15a9: 0xb249,\n\t0x15aa: 0xb249, 0x15ab: 0xb261, 0x15ac: 0xb261, 0x15ad: 0xb279, 0x15ae: 0xb279, 0x15af: 0xb291,\n\t0x15b0: 0xb291, 0x15b1: 0xb2a9, 0x15b2: 0xb2a9, 0x15b3: 0xb2a9, 0x15b4: 0xb2a9, 0x15b5: 0xb2c1,\n\t0x15b6: 0xb2c1, 0x15b7: 0xb2c1, 0x15b8: 0xb2c1, 0x15b9: 0xb2d9, 0x15ba: 0xb2d9, 0x15bb: 0xb2d9,\n\t0x15bc: 0xb2d9, 0x15bd: 0xb2f1, 0x15be: 0xb2f1, 0x15bf: 0xb2f1,\n\t// Block 0x57, offset 0x15c0\n\t0x15c0: 0xb2f1, 0x15c1: 0xb309, 0x15c2: 0xb309, 0x15c3: 0xb309, 0x15c4: 0xb309, 0x15c5: 0xb321,\n\t0x15c6: 0xb321, 0x15c7: 0xb321, 0x15c8: 0xb321, 0x15c9: 0xb339, 0x15ca: 0xb339, 0x15cb: 0xb339,\n\t0x15cc: 0xb339, 0x15cd: 0xb351, 0x15ce: 0xb351, 0x15cf: 0xb351, 0x15d0: 0xb351, 0x15d1: 0xb369,\n\t0x15d2: 0xb369, 0x15d3: 0xb369, 0x15d4: 0xb369, 0x15d5: 0xb381, 0x15d6: 0xb381, 0x15d7: 0xb381,\n\t0x15d8: 0xb381, 0x15d9: 0xb399, 0x15da: 0xb399, 0x15db: 0xb399, 0x15dc: 0xb399, 0x15dd: 0xb3b1,\n\t0x15de: 0xb3b1, 0x15df: 0xb3b1, 0x15e0: 0xb3b1, 0x15e1: 0xb3c9, 0x15e2: 0xb3c9, 0x15e3: 0xb3c9,\n\t0x15e4: 0xb3c9, 0x15e5: 0xb3e1, 0x15e6: 0xb3e1, 0x15e7: 0xb3e1, 0x15e8: 0xb3e1, 0x15e9: 0xb3f9,\n\t0x15ea: 0xb3f9, 0x15eb: 0xb3f9, 0x15ec: 0xb3f9, 0x15ed: 0xb411, 0x15ee: 0xb411, 0x15ef: 0x7ab1,\n\t0x15f0: 0x7ab1, 0x15f1: 0xb429, 0x15f2: 0xb429, 0x15f3: 0xb429, 0x15f4: 0xb429, 0x15f5: 0xb441,\n\t0x15f6: 0xb441, 0x15f7: 0xb469, 0x15f8: 0xb469, 0x15f9: 0xb491, 0x15fa: 0xb491, 0x15fb: 0xb4b9,\n\t0x15fc: 0xb4b9, 0x15fd: 0x0040, 0x15fe: 0x0040, 0x15ff: 0x03c0,\n\t// Block 0x58, offset 0x1600\n\t0x1600: 0x0040, 0x1601: 0xaefa, 0x1602: 0xb4e2, 0x1603: 0xaf6a, 0x1604: 0xafda, 0x1605: 0xafea,\n\t0x1606: 0xaf7a, 0x1607: 0xb4f2, 0x1608: 0x1fd2, 0x1609: 0x1fe2, 0x160a: 0xaf8a, 0x160b: 0x1fb2,\n\t0x160c: 0xaeda, 0x160d: 0xaf99, 0x160e: 0x29d1, 0x160f: 0xb502, 0x1610: 0x1f41, 0x1611: 0x00c9,\n\t0x1612: 0x0069, 0x1613: 0x0079, 0x1614: 0x1f51, 0x1615: 0x1f61, 0x1616: 0x1f71, 0x1617: 0x1f81,\n\t0x1618: 0x1f91, 0x1619: 0x1fa1, 0x161a: 0xaeea, 0x161b: 0x03c2, 0x161c: 0xafaa, 0x161d: 0x1fc2,\n\t0x161e: 0xafba, 0x161f: 0xaf0a, 0x1620: 0xaffa, 0x1621: 0x0039, 0x1622: 0x0ee9, 0x1623: 0x1159,\n\t0x1624: 0x0ef9, 0x1625: 0x0f09, 0x1626: 0x1199, 0x1627: 0x0f31, 0x1628: 0x0249, 0x1629: 0x0f41,\n\t0x162a: 0x0259, 0x162b: 0x0f51, 0x162c: 0x0359, 0x162d: 0x0f61, 0x162e: 0x0f71, 0x162f: 0x00d9,\n\t0x1630: 0x0f99, 0x1631: 0x2039, 0x1632: 0x0269, 0x1633: 0x01d9, 0x1634: 0x0fa9, 0x1635: 0x0fb9,\n\t0x1636: 0x1089, 0x1637: 0x0279, 0x1638: 0x0369, 0x1639: 0x0289, 0x163a: 0x13d1, 0x163b: 0xaf4a,\n\t0x163c: 0xafca, 0x163d: 0xaf5a, 0x163e: 0xb512, 0x163f: 0xaf1a,\n\t// Block 0x59, offset 0x1640\n\t0x1640: 0x1caa, 0x1641: 0x0039, 0x1642: 0x0ee9, 0x1643: 0x1159, 0x1644: 0x0ef9, 0x1645: 0x0f09,\n\t0x1646: 0x1199, 0x1647: 0x0f31, 0x1648: 0x0249, 0x1649: 0x0f41, 0x164a: 0x0259, 0x164b: 0x0f51,\n\t0x164c: 0x0359, 0x164d: 0x0f61, 0x164e: 0x0f71, 0x164f: 0x00d9, 0x1650: 0x0f99, 0x1651: 0x2039,\n\t0x1652: 0x0269, 0x1653: 0x01d9, 0x1654: 0x0fa9, 0x1655: 0x0fb9, 0x1656: 0x1089, 0x1657: 0x0279,\n\t0x1658: 0x0369, 0x1659: 0x0289, 0x165a: 0x13d1, 0x165b: 0xaf2a, 0x165c: 0xb522, 0x165d: 0xaf3a,\n\t0x165e: 0xb532, 0x165f: 0x80d5, 0x1660: 0x80f5, 0x1661: 0x29d1, 0x1662: 0x8115, 0x1663: 0x8115,\n\t0x1664: 0x8135, 0x1665: 0x8155, 0x1666: 0x8175, 0x1667: 0x8195, 0x1668: 0x81b5, 0x1669: 0x81d5,\n\t0x166a: 0x81f5, 0x166b: 0x8215, 0x166c: 0x8235, 0x166d: 0x8255, 0x166e: 0x8275, 0x166f: 0x8295,\n\t0x1670: 0x82b5, 0x1671: 0x82d5, 0x1672: 0x82f5, 0x1673: 0x8315, 0x1674: 0x8335, 0x1675: 0x8355,\n\t0x1676: 0x8375, 0x1677: 0x8395, 0x1678: 0x83b5, 0x1679: 0x83d5, 0x167a: 0x83f5, 0x167b: 0x8415,\n\t0x167c: 0x81b5, 0x167d: 0x8435, 0x167e: 0x8455, 0x167f: 0x8215,\n\t// Block 0x5a, offset 0x1680\n\t0x1680: 0x8475, 0x1681: 0x8495, 0x1682: 0x84b5, 0x1683: 0x84d5, 0x1684: 0x84f5, 0x1685: 0x8515,\n\t0x1686: 0x8535, 0x1687: 0x8555, 0x1688: 0x84d5, 0x1689: 0x8575, 0x168a: 0x84d5, 0x168b: 0x8595,\n\t0x168c: 0x8595, 0x168d: 0x85b5, 0x168e: 0x85b5, 0x168f: 0x85d5, 0x1690: 0x8515, 0x1691: 0x85f5,\n\t0x1692: 0x8615, 0x1693: 0x85f5, 0x1694: 0x8635, 0x1695: 0x8615, 0x1696: 0x8655, 0x1697: 0x8655,\n\t0x1698: 0x8675, 0x1699: 0x8675, 0x169a: 0x8695, 0x169b: 0x8695, 0x169c: 0x8615, 0x169d: 0x8115,\n\t0x169e: 0x86b5, 0x169f: 0x86d5, 0x16a0: 0x0040, 0x16a1: 0x86f5, 0x16a2: 0x8715, 0x16a3: 0x8735,\n\t0x16a4: 0x8755, 0x16a5: 0x8735, 0x16a6: 0x8775, 0x16a7: 0x8795, 0x16a8: 0x87b5, 0x16a9: 0x87b5,\n\t0x16aa: 0x87d5, 0x16ab: 0x87d5, 0x16ac: 0x87f5, 0x16ad: 0x87f5, 0x16ae: 0x87d5, 0x16af: 0x87d5,\n\t0x16b0: 0x8815, 0x16b1: 0x8835, 0x16b2: 0x8855, 0x16b3: 0x8875, 0x16b4: 0x8895, 0x16b5: 0x88b5,\n\t0x16b6: 0x88b5, 0x16b7: 0x88b5, 0x16b8: 0x88d5, 0x16b9: 0x88d5, 0x16ba: 0x88d5, 0x16bb: 0x88d5,\n\t0x16bc: 0x87b5, 0x16bd: 0x87b5, 0x16be: 0x87b5, 0x16bf: 0x0040,\n\t// Block 0x5b, offset 0x16c0\n\t0x16c0: 0x0040, 0x16c1: 0x0040, 0x16c2: 0x8715, 0x16c3: 0x86f5, 0x16c4: 0x88f5, 0x16c5: 0x86f5,\n\t0x16c6: 0x8715, 0x16c7: 0x86f5, 0x16c8: 0x0040, 0x16c9: 0x0040, 0x16ca: 0x8915, 0x16cb: 0x8715,\n\t0x16cc: 0x8935, 0x16cd: 0x88f5, 0x16ce: 0x8935, 0x16cf: 0x8715, 0x16d0: 0x0040, 0x16d1: 0x0040,\n\t0x16d2: 0x8955, 0x16d3: 0x8975, 0x16d4: 0x8875, 0x16d5: 0x8935, 0x16d6: 0x88f5, 0x16d7: 0x8935,\n\t0x16d8: 0x0040, 0x16d9: 0x0040, 0x16da: 0x8995, 0x16db: 0x89b5, 0x16dc: 0x8995, 0x16dd: 0x0040,\n\t0x16de: 0x0040, 0x16df: 0x0040, 0x16e0: 0xb541, 0x16e1: 0xb559, 0x16e2: 0xb571, 0x16e3: 0x89d6,\n\t0x16e4: 0xb589, 0x16e5: 0xb5a1, 0x16e6: 0x89f5, 0x16e7: 0x0040, 0x16e8: 0x8a15, 0x16e9: 0x8a35,\n\t0x16ea: 0x8a55, 0x16eb: 0x8a35, 0x16ec: 0x8a75, 0x16ed: 0x8a95, 0x16ee: 0x8ab5, 0x16ef: 0x0040,\n\t0x16f0: 0x0040, 0x16f1: 0x0040, 0x16f2: 0x0040, 0x16f3: 0x0040, 0x16f4: 0x0040, 0x16f5: 0x0040,\n\t0x16f6: 0x0040, 0x16f7: 0x0040, 0x16f8: 0x0040, 0x16f9: 0x0340, 0x16fa: 0x0340, 0x16fb: 0x0340,\n\t0x16fc: 0x0040, 0x16fd: 0x0040, 0x16fe: 0x0040, 0x16ff: 0x0040,\n\t// Block 0x5c, offset 0x1700\n\t0x1700: 0x0a08, 0x1701: 0x0a08, 0x1702: 0x0a08, 0x1703: 0x0a08, 0x1704: 0x0a08, 0x1705: 0x0c08,\n\t0x1706: 0x0808, 0x1707: 0x0c08, 0x1708: 0x0818, 0x1709: 0x0c08, 0x170a: 0x0c08, 0x170b: 0x0808,\n\t0x170c: 0x0808, 0x170d: 0x0908, 0x170e: 0x0c08, 0x170f: 0x0c08, 0x1710: 0x0c08, 0x1711: 0x0c08,\n\t0x1712: 0x0c08, 0x1713: 0x0a08, 0x1714: 0x0a08, 0x1715: 0x0a08, 0x1716: 0x0a08, 0x1717: 0x0908,\n\t0x1718: 0x0a08, 0x1719: 0x0a08, 0x171a: 0x0a08, 0x171b: 0x0a08, 0x171c: 0x0a08, 0x171d: 0x0c08,\n\t0x171e: 0x0a08, 0x171f: 0x0a08, 0x1720: 0x0a08, 0x1721: 0x0c08, 0x1722: 0x0808, 0x1723: 0x0808,\n\t0x1724: 0x0c08, 0x1725: 0x3308, 0x1726: 0x3308, 0x1727: 0x0040, 0x1728: 0x0040, 0x1729: 0x0040,\n\t0x172a: 0x0040, 0x172b: 0x0a18, 0x172c: 0x0a18, 0x172d: 0x0a18, 0x172e: 0x0a18, 0x172f: 0x0c18,\n\t0x1730: 0x0818, 0x1731: 0x0818, 0x1732: 0x0818, 0x1733: 0x0818, 0x1734: 0x0818, 0x1735: 0x0818,\n\t0x1736: 0x0818, 0x1737: 0x0040, 0x1738: 0x0040, 0x1739: 0x0040, 0x173a: 0x0040, 0x173b: 0x0040,\n\t0x173c: 0x0040, 0x173d: 0x0040, 0x173e: 0x0040, 0x173f: 0x0040,\n\t// Block 0x5d, offset 0x1740\n\t0x1740: 0x0a08, 0x1741: 0x0c08, 0x1742: 0x0a08, 0x1743: 0x0c08, 0x1744: 0x0c08, 0x1745: 0x0c08,\n\t0x1746: 0x0a08, 0x1747: 0x0a08, 0x1748: 0x0a08, 0x1749: 0x0c08, 0x174a: 0x0a08, 0x174b: 0x0a08,\n\t0x174c: 0x0c08, 0x174d: 0x0a08, 0x174e: 0x0c08, 0x174f: 0x0c08, 0x1750: 0x0a08, 0x1751: 0x0c08,\n\t0x1752: 0x0040, 0x1753: 0x0040, 0x1754: 0x0040, 0x1755: 0x0040, 0x1756: 0x0040, 0x1757: 0x0040,\n\t0x1758: 0x0040, 0x1759: 0x0818, 0x175a: 0x0818, 0x175b: 0x0818, 0x175c: 0x0818, 0x175d: 0x0040,\n\t0x175e: 0x0040, 0x175f: 0x0040, 0x1760: 0x0040, 0x1761: 0x0040, 0x1762: 0x0040, 0x1763: 0x0040,\n\t0x1764: 0x0040, 0x1765: 0x0040, 0x1766: 0x0040, 0x1767: 0x0040, 0x1768: 0x0040, 0x1769: 0x0c18,\n\t0x176a: 0x0c18, 0x176b: 0x0c18, 0x176c: 0x0c18, 0x176d: 0x0a18, 0x176e: 0x0a18, 0x176f: 0x0818,\n\t0x1770: 0x0040, 0x1771: 0x0040, 0x1772: 0x0040, 0x1773: 0x0040, 0x1774: 0x0040, 0x1775: 0x0040,\n\t0x1776: 0x0040, 0x1777: 0x0040, 0x1778: 0x0040, 0x1779: 0x0040, 0x177a: 0x0040, 0x177b: 0x0040,\n\t0x177c: 0x0040, 0x177d: 0x0040, 0x177e: 0x0040, 0x177f: 0x0040,\n\t// Block 0x5e, offset 0x1780\n\t0x1780: 0x3308, 0x1781: 0x3308, 0x1782: 0x3008, 0x1783: 0x3008, 0x1784: 0x0040, 0x1785: 0x0008,\n\t0x1786: 0x0008, 0x1787: 0x0008, 0x1788: 0x0008, 0x1789: 0x0008, 0x178a: 0x0008, 0x178b: 0x0008,\n\t0x178c: 0x0008, 0x178d: 0x0040, 0x178e: 0x0040, 0x178f: 0x0008, 0x1790: 0x0008, 0x1791: 0x0040,\n\t0x1792: 0x0040, 0x1793: 0x0008, 0x1794: 0x0008, 0x1795: 0x0008, 0x1796: 0x0008, 0x1797: 0x0008,\n\t0x1798: 0x0008, 0x1799: 0x0008, 0x179a: 0x0008, 0x179b: 0x0008, 0x179c: 0x0008, 0x179d: 0x0008,\n\t0x179e: 0x0008, 0x179f: 0x0008, 0x17a0: 0x0008, 0x17a1: 0x0008, 0x17a2: 0x0008, 0x17a3: 0x0008,\n\t0x17a4: 0x0008, 0x17a5: 0x0008, 0x17a6: 0x0008, 0x17a7: 0x0008, 0x17a8: 0x0008, 0x17a9: 0x0040,\n\t0x17aa: 0x0008, 0x17ab: 0x0008, 0x17ac: 0x0008, 0x17ad: 0x0008, 0x17ae: 0x0008, 0x17af: 0x0008,\n\t0x17b0: 0x0008, 0x17b1: 0x0040, 0x17b2: 0x0008, 0x17b3: 0x0008, 0x17b4: 0x0040, 0x17b5: 0x0008,\n\t0x17b6: 0x0008, 0x17b7: 0x0008, 0x17b8: 0x0008, 0x17b9: 0x0008, 0x17ba: 0x0040, 0x17bb: 0x0040,\n\t0x17bc: 0x3308, 0x17bd: 0x0008, 0x17be: 0x3008, 0x17bf: 0x3008,\n\t// Block 0x5f, offset 0x17c0\n\t0x17c0: 0x3308, 0x17c1: 0x3008, 0x17c2: 0x3008, 0x17c3: 0x3008, 0x17c4: 0x3008, 0x17c5: 0x0040,\n\t0x17c6: 0x0040, 0x17c7: 0x3008, 0x17c8: 0x3008, 0x17c9: 0x0040, 0x17ca: 0x0040, 0x17cb: 0x3008,\n\t0x17cc: 0x3008, 0x17cd: 0x3808, 0x17ce: 0x0040, 0x17cf: 0x0040, 0x17d0: 0x0008, 0x17d1: 0x0040,\n\t0x17d2: 0x0040, 0x17d3: 0x0040, 0x17d4: 0x0040, 0x17d5: 0x0040, 0x17d6: 0x0040, 0x17d7: 0x3008,\n\t0x17d8: 0x0040, 0x17d9: 0x0040, 0x17da: 0x0040, 0x17db: 0x0040, 0x17dc: 0x0040, 0x17dd: 0x0008,\n\t0x17de: 0x0008, 0x17df: 0x0008, 0x17e0: 0x0008, 0x17e1: 0x0008, 0x17e2: 0x3008, 0x17e3: 0x3008,\n\t0x17e4: 0x0040, 0x17e5: 0x0040, 0x17e6: 0x3308, 0x17e7: 0x3308, 0x17e8: 0x3308, 0x17e9: 0x3308,\n\t0x17ea: 0x3308, 0x17eb: 0x3308, 0x17ec: 0x3308, 0x17ed: 0x0040, 0x17ee: 0x0040, 0x17ef: 0x0040,\n\t0x17f0: 0x3308, 0x17f1: 0x3308, 0x17f2: 0x3308, 0x17f3: 0x3308, 0x17f4: 0x3308, 0x17f5: 0x0040,\n\t0x17f6: 0x0040, 0x17f7: 0x0040, 0x17f8: 0x0040, 0x17f9: 0x0040, 0x17fa: 0x0040, 0x17fb: 0x0040,\n\t0x17fc: 0x0040, 0x17fd: 0x0040, 0x17fe: 0x0040, 0x17ff: 0x0040,\n\t// Block 0x60, offset 0x1800\n\t0x1800: 0x0039, 0x1801: 0x0ee9, 0x1802: 0x1159, 0x1803: 0x0ef9, 0x1804: 0x0f09, 0x1805: 0x1199,\n\t0x1806: 0x0f31, 0x1807: 0x0249, 0x1808: 0x0f41, 0x1809: 0x0259, 0x180a: 0x0f51, 0x180b: 0x0359,\n\t0x180c: 0x0f61, 0x180d: 0x0f71, 0x180e: 0x00d9, 0x180f: 0x0f99, 0x1810: 0x2039, 0x1811: 0x0269,\n\t0x1812: 0x01d9, 0x1813: 0x0fa9, 0x1814: 0x0fb9, 0x1815: 0x1089, 0x1816: 0x0279, 0x1817: 0x0369,\n\t0x1818: 0x0289, 0x1819: 0x13d1, 0x181a: 0x0039, 0x181b: 0x0ee9, 0x181c: 0x1159, 0x181d: 0x0ef9,\n\t0x181e: 0x0f09, 0x181f: 0x1199, 0x1820: 0x0f31, 0x1821: 0x0249, 0x1822: 0x0f41, 0x1823: 0x0259,\n\t0x1824: 0x0f51, 0x1825: 0x0359, 0x1826: 0x0f61, 0x1827: 0x0f71, 0x1828: 0x00d9, 0x1829: 0x0f99,\n\t0x182a: 0x2039, 0x182b: 0x0269, 0x182c: 0x01d9, 0x182d: 0x0fa9, 0x182e: 0x0fb9, 0x182f: 0x1089,\n\t0x1830: 0x0279, 0x1831: 0x0369, 0x1832: 0x0289, 0x1833: 0x13d1, 0x1834: 0x0039, 0x1835: 0x0ee9,\n\t0x1836: 0x1159, 0x1837: 0x0ef9, 0x1838: 0x0f09, 0x1839: 0x1199, 0x183a: 0x0f31, 0x183b: 0x0249,\n\t0x183c: 0x0f41, 0x183d: 0x0259, 0x183e: 0x0f51, 0x183f: 0x0359,\n\t// Block 0x61, offset 0x1840\n\t0x1840: 0x0f61, 0x1841: 0x0f71, 0x1842: 0x00d9, 0x1843: 0x0f99, 0x1844: 0x2039, 0x1845: 0x0269,\n\t0x1846: 0x01d9, 0x1847: 0x0fa9, 0x1848: 0x0fb9, 0x1849: 0x1089, 0x184a: 0x0279, 0x184b: 0x0369,\n\t0x184c: 0x0289, 0x184d: 0x13d1, 0x184e: 0x0039, 0x184f: 0x0ee9, 0x1850: 0x1159, 0x1851: 0x0ef9,\n\t0x1852: 0x0f09, 0x1853: 0x1199, 0x1854: 0x0f31, 0x1855: 0x0040, 0x1856: 0x0f41, 0x1857: 0x0259,\n\t0x1858: 0x0f51, 0x1859: 0x0359, 0x185a: 0x0f61, 0x185b: 0x0f71, 0x185c: 0x00d9, 0x185d: 0x0f99,\n\t0x185e: 0x2039, 0x185f: 0x0269, 0x1860: 0x01d9, 0x1861: 0x0fa9, 0x1862: 0x0fb9, 0x1863: 0x1089,\n\t0x1864: 0x0279, 0x1865: 0x0369, 0x1866: 0x0289, 0x1867: 0x13d1, 0x1868: 0x0039, 0x1869: 0x0ee9,\n\t0x186a: 0x1159, 0x186b: 0x0ef9, 0x186c: 0x0f09, 0x186d: 0x1199, 0x186e: 0x0f31, 0x186f: 0x0249,\n\t0x1870: 0x0f41, 0x1871: 0x0259, 0x1872: 0x0f51, 0x1873: 0x0359, 0x1874: 0x0f61, 0x1875: 0x0f71,\n\t0x1876: 0x00d9, 0x1877: 0x0f99, 0x1878: 0x2039, 0x1879: 0x0269, 0x187a: 0x01d9, 0x187b: 0x0fa9,\n\t0x187c: 0x0fb9, 0x187d: 0x1089, 0x187e: 0x0279, 0x187f: 0x0369,\n\t// Block 0x62, offset 0x1880\n\t0x1880: 0x0289, 0x1881: 0x13d1, 0x1882: 0x0039, 0x1883: 0x0ee9, 0x1884: 0x1159, 0x1885: 0x0ef9,\n\t0x1886: 0x0f09, 0x1887: 0x1199, 0x1888: 0x0f31, 0x1889: 0x0249, 0x188a: 0x0f41, 0x188b: 0x0259,\n\t0x188c: 0x0f51, 0x188d: 0x0359, 0x188e: 0x0f61, 0x188f: 0x0f71, 0x1890: 0x00d9, 0x1891: 0x0f99,\n\t0x1892: 0x2039, 0x1893: 0x0269, 0x1894: 0x01d9, 0x1895: 0x0fa9, 0x1896: 0x0fb9, 0x1897: 0x1089,\n\t0x1898: 0x0279, 0x1899: 0x0369, 0x189a: 0x0289, 0x189b: 0x13d1, 0x189c: 0x0039, 0x189d: 0x0040,\n\t0x189e: 0x1159, 0x189f: 0x0ef9, 0x18a0: 0x0040, 0x18a1: 0x0040, 0x18a2: 0x0f31, 0x18a3: 0x0040,\n\t0x18a4: 0x0040, 0x18a5: 0x0259, 0x18a6: 0x0f51, 0x18a7: 0x0040, 0x18a8: 0x0040, 0x18a9: 0x0f71,\n\t0x18aa: 0x00d9, 0x18ab: 0x0f99, 0x18ac: 0x2039, 0x18ad: 0x0040, 0x18ae: 0x01d9, 0x18af: 0x0fa9,\n\t0x18b0: 0x0fb9, 0x18b1: 0x1089, 0x18b2: 0x0279, 0x18b3: 0x0369, 0x18b4: 0x0289, 0x18b5: 0x13d1,\n\t0x18b6: 0x0039, 0x18b7: 0x0ee9, 0x18b8: 0x1159, 0x18b9: 0x0ef9, 0x18ba: 0x0040, 0x18bb: 0x1199,\n\t0x18bc: 0x0040, 0x18bd: 0x0249, 0x18be: 0x0f41, 0x18bf: 0x0259,\n\t// Block 0x63, offset 0x18c0\n\t0x18c0: 0x0f51, 0x18c1: 0x0359, 0x18c2: 0x0f61, 0x18c3: 0x0f71, 0x18c4: 0x0040, 0x18c5: 0x0f99,\n\t0x18c6: 0x2039, 0x18c7: 0x0269, 0x18c8: 0x01d9, 0x18c9: 0x0fa9, 0x18ca: 0x0fb9, 0x18cb: 0x1089,\n\t0x18cc: 0x0279, 0x18cd: 0x0369, 0x18ce: 0x0289, 0x18cf: 0x13d1, 0x18d0: 0x0039, 0x18d1: 0x0ee9,\n\t0x18d2: 0x1159, 0x18d3: 0x0ef9, 0x18d4: 0x0f09, 0x18d5: 0x1199, 0x18d6: 0x0f31, 0x18d7: 0x0249,\n\t0x18d8: 0x0f41, 0x18d9: 0x0259, 0x18da: 0x0f51, 0x18db: 0x0359, 0x18dc: 0x0f61, 0x18dd: 0x0f71,\n\t0x18de: 0x00d9, 0x18df: 0x0f99, 0x18e0: 0x2039, 0x18e1: 0x0269, 0x18e2: 0x01d9, 0x18e3: 0x0fa9,\n\t0x18e4: 0x0fb9, 0x18e5: 0x1089, 0x18e6: 0x0279, 0x18e7: 0x0369, 0x18e8: 0x0289, 0x18e9: 0x13d1,\n\t0x18ea: 0x0039, 0x18eb: 0x0ee9, 0x18ec: 0x1159, 0x18ed: 0x0ef9, 0x18ee: 0x0f09, 0x18ef: 0x1199,\n\t0x18f0: 0x0f31, 0x18f1: 0x0249, 0x18f2: 0x0f41, 0x18f3: 0x0259, 0x18f4: 0x0f51, 0x18f5: 0x0359,\n\t0x18f6: 0x0f61, 0x18f7: 0x0f71, 0x18f8: 0x00d9, 0x18f9: 0x0f99, 0x18fa: 0x2039, 0x18fb: 0x0269,\n\t0x18fc: 0x01d9, 0x18fd: 0x0fa9, 0x18fe: 0x0fb9, 0x18ff: 0x1089,\n\t// Block 0x64, offset 0x1900\n\t0x1900: 0x0279, 0x1901: 0x0369, 0x1902: 0x0289, 0x1903: 0x13d1, 0x1904: 0x0039, 0x1905: 0x0ee9,\n\t0x1906: 0x0040, 0x1907: 0x0ef9, 0x1908: 0x0f09, 0x1909: 0x1199, 0x190a: 0x0f31, 0x190b: 0x0040,\n\t0x190c: 0x0040, 0x190d: 0x0259, 0x190e: 0x0f51, 0x190f: 0x0359, 0x1910: 0x0f61, 0x1911: 0x0f71,\n\t0x1912: 0x00d9, 0x1913: 0x0f99, 0x1914: 0x2039, 0x1915: 0x0040, 0x1916: 0x01d9, 0x1917: 0x0fa9,\n\t0x1918: 0x0fb9, 0x1919: 0x1089, 0x191a: 0x0279, 0x191b: 0x0369, 0x191c: 0x0289, 0x191d: 0x0040,\n\t0x191e: 0x0039, 0x191f: 0x0ee9, 0x1920: 0x1159, 0x1921: 0x0ef9, 0x1922: 0x0f09, 0x1923: 0x1199,\n\t0x1924: 0x0f31, 0x1925: 0x0249, 0x1926: 0x0f41, 0x1927: 0x0259, 0x1928: 0x0f51, 0x1929: 0x0359,\n\t0x192a: 0x0f61, 0x192b: 0x0f71, 0x192c: 0x00d9, 0x192d: 0x0f99, 0x192e: 0x2039, 0x192f: 0x0269,\n\t0x1930: 0x01d9, 0x1931: 0x0fa9, 0x1932: 0x0fb9, 0x1933: 0x1089, 0x1934: 0x0279, 0x1935: 0x0369,\n\t0x1936: 0x0289, 0x1937: 0x13d1, 0x1938: 0x0039, 0x1939: 0x0ee9, 0x193a: 0x0040, 0x193b: 0x0ef9,\n\t0x193c: 0x0f09, 0x193d: 0x1199, 0x193e: 0x0f31, 0x193f: 0x0040,\n\t// Block 0x65, offset 0x1940\n\t0x1940: 0x0f41, 0x1941: 0x0259, 0x1942: 0x0f51, 0x1943: 0x0359, 0x1944: 0x0f61, 0x1945: 0x0040,\n\t0x1946: 0x00d9, 0x1947: 0x0040, 0x1948: 0x0040, 0x1949: 0x0040, 0x194a: 0x01d9, 0x194b: 0x0fa9,\n\t0x194c: 0x0fb9, 0x194d: 0x1089, 0x194e: 0x0279, 0x194f: 0x0369, 0x1950: 0x0289, 0x1951: 0x0040,\n\t0x1952: 0x0039, 0x1953: 0x0ee9, 0x1954: 0x1159, 0x1955: 0x0ef9, 0x1956: 0x0f09, 0x1957: 0x1199,\n\t0x1958: 0x0f31, 0x1959: 0x0249, 0x195a: 0x0f41, 0x195b: 0x0259, 0x195c: 0x0f51, 0x195d: 0x0359,\n\t0x195e: 0x0f61, 0x195f: 0x0f71, 0x1960: 0x00d9, 0x1961: 0x0f99, 0x1962: 0x2039, 0x1963: 0x0269,\n\t0x1964: 0x01d9, 0x1965: 0x0fa9, 0x1966: 0x0fb9, 0x1967: 0x1089, 0x1968: 0x0279, 0x1969: 0x0369,\n\t0x196a: 0x0289, 0x196b: 0x13d1, 0x196c: 0x0039, 0x196d: 0x0ee9, 0x196e: 0x1159, 0x196f: 0x0ef9,\n\t0x1970: 0x0f09, 0x1971: 0x1199, 0x1972: 0x0f31, 0x1973: 0x0249, 0x1974: 0x0f41, 0x1975: 0x0259,\n\t0x1976: 0x0f51, 0x1977: 0x0359, 0x1978: 0x0f61, 0x1979: 0x0f71, 0x197a: 0x00d9, 0x197b: 0x0f99,\n\t0x197c: 0x2039, 0x197d: 0x0269, 0x197e: 0x01d9, 0x197f: 0x0fa9,\n\t// Block 0x66, offset 0x1980\n\t0x1980: 0x0fb9, 0x1981: 0x1089, 0x1982: 0x0279, 0x1983: 0x0369, 0x1984: 0x0289, 0x1985: 0x13d1,\n\t0x1986: 0x0039, 0x1987: 0x0ee9, 0x1988: 0x1159, 0x1989: 0x0ef9, 0x198a: 0x0f09, 0x198b: 0x1199,\n\t0x198c: 0x0f31, 0x198d: 0x0249, 0x198e: 0x0f41, 0x198f: 0x0259, 0x1990: 0x0f51, 0x1991: 0x0359,\n\t0x1992: 0x0f61, 0x1993: 0x0f71, 0x1994: 0x00d9, 0x1995: 0x0f99, 0x1996: 0x2039, 0x1997: 0x0269,\n\t0x1998: 0x01d9, 0x1999: 0x0fa9, 0x199a: 0x0fb9, 0x199b: 0x1089, 0x199c: 0x0279, 0x199d: 0x0369,\n\t0x199e: 0x0289, 0x199f: 0x13d1, 0x19a0: 0x0039, 0x19a1: 0x0ee9, 0x19a2: 0x1159, 0x19a3: 0x0ef9,\n\t0x19a4: 0x0f09, 0x19a5: 0x1199, 0x19a6: 0x0f31, 0x19a7: 0x0249, 0x19a8: 0x0f41, 0x19a9: 0x0259,\n\t0x19aa: 0x0f51, 0x19ab: 0x0359, 0x19ac: 0x0f61, 0x19ad: 0x0f71, 0x19ae: 0x00d9, 0x19af: 0x0f99,\n\t0x19b0: 0x2039, 0x19b1: 0x0269, 0x19b2: 0x01d9, 0x19b3: 0x0fa9, 0x19b4: 0x0fb9, 0x19b5: 0x1089,\n\t0x19b6: 0x0279, 0x19b7: 0x0369, 0x19b8: 0x0289, 0x19b9: 0x13d1, 0x19ba: 0x0039, 0x19bb: 0x0ee9,\n\t0x19bc: 0x1159, 0x19bd: 0x0ef9, 0x19be: 0x0f09, 0x19bf: 0x1199,\n\t// Block 0x67, offset 0x19c0\n\t0x19c0: 0x0f31, 0x19c1: 0x0249, 0x19c2: 0x0f41, 0x19c3: 0x0259, 0x19c4: 0x0f51, 0x19c5: 0x0359,\n\t0x19c6: 0x0f61, 0x19c7: 0x0f71, 0x19c8: 0x00d9, 0x19c9: 0x0f99, 0x19ca: 0x2039, 0x19cb: 0x0269,\n\t0x19cc: 0x01d9, 0x19cd: 0x0fa9, 0x19ce: 0x0fb9, 0x19cf: 0x1089, 0x19d0: 0x0279, 0x19d1: 0x0369,\n\t0x19d2: 0x0289, 0x19d3: 0x13d1, 0x19d4: 0x0039, 0x19d5: 0x0ee9, 0x19d6: 0x1159, 0x19d7: 0x0ef9,\n\t0x19d8: 0x0f09, 0x19d9: 0x1199, 0x19da: 0x0f31, 0x19db: 0x0249, 0x19dc: 0x0f41, 0x19dd: 0x0259,\n\t0x19de: 0x0f51, 0x19df: 0x0359, 0x19e0: 0x0f61, 0x19e1: 0x0f71, 0x19e2: 0x00d9, 0x19e3: 0x0f99,\n\t0x19e4: 0x2039, 0x19e5: 0x0269, 0x19e6: 0x01d9, 0x19e7: 0x0fa9, 0x19e8: 0x0fb9, 0x19e9: 0x1089,\n\t0x19ea: 0x0279, 0x19eb: 0x0369, 0x19ec: 0x0289, 0x19ed: 0x13d1, 0x19ee: 0x0039, 0x19ef: 0x0ee9,\n\t0x19f0: 0x1159, 0x19f1: 0x0ef9, 0x19f2: 0x0f09, 0x19f3: 0x1199, 0x19f4: 0x0f31, 0x19f5: 0x0249,\n\t0x19f6: 0x0f41, 0x19f7: 0x0259, 0x19f8: 0x0f51, 0x19f9: 0x0359, 0x19fa: 0x0f61, 0x19fb: 0x0f71,\n\t0x19fc: 0x00d9, 0x19fd: 0x0f99, 0x19fe: 0x2039, 0x19ff: 0x0269,\n\t// Block 0x68, offset 0x1a00\n\t0x1a00: 0x01d9, 0x1a01: 0x0fa9, 0x1a02: 0x0fb9, 0x1a03: 0x1089, 0x1a04: 0x0279, 0x1a05: 0x0369,\n\t0x1a06: 0x0289, 0x1a07: 0x13d1, 0x1a08: 0x0039, 0x1a09: 0x0ee9, 0x1a0a: 0x1159, 0x1a0b: 0x0ef9,\n\t0x1a0c: 0x0f09, 0x1a0d: 0x1199, 0x1a0e: 0x0f31, 0x1a0f: 0x0249, 0x1a10: 0x0f41, 0x1a11: 0x0259,\n\t0x1a12: 0x0f51, 0x1a13: 0x0359, 0x1a14: 0x0f61, 0x1a15: 0x0f71, 0x1a16: 0x00d9, 0x1a17: 0x0f99,\n\t0x1a18: 0x2039, 0x1a19: 0x0269, 0x1a1a: 0x01d9, 0x1a1b: 0x0fa9, 0x1a1c: 0x0fb9, 0x1a1d: 0x1089,\n\t0x1a1e: 0x0279, 0x1a1f: 0x0369, 0x1a20: 0x0289, 0x1a21: 0x13d1, 0x1a22: 0x0039, 0x1a23: 0x0ee9,\n\t0x1a24: 0x1159, 0x1a25: 0x0ef9, 0x1a26: 0x0f09, 0x1a27: 0x1199, 0x1a28: 0x0f31, 0x1a29: 0x0249,\n\t0x1a2a: 0x0f41, 0x1a2b: 0x0259, 0x1a2c: 0x0f51, 0x1a2d: 0x0359, 0x1a2e: 0x0f61, 0x1a2f: 0x0f71,\n\t0x1a30: 0x00d9, 0x1a31: 0x0f99, 0x1a32: 0x2039, 0x1a33: 0x0269, 0x1a34: 0x01d9, 0x1a35: 0x0fa9,\n\t0x1a36: 0x0fb9, 0x1a37: 0x1089, 0x1a38: 0x0279, 0x1a39: 0x0369, 0x1a3a: 0x0289, 0x1a3b: 0x13d1,\n\t0x1a3c: 0x0039, 0x1a3d: 0x0ee9, 0x1a3e: 0x1159, 0x1a3f: 0x0ef9,\n\t// Block 0x69, offset 0x1a40\n\t0x1a40: 0x0f09, 0x1a41: 0x1199, 0x1a42: 0x0f31, 0x1a43: 0x0249, 0x1a44: 0x0f41, 0x1a45: 0x0259,\n\t0x1a46: 0x0f51, 0x1a47: 0x0359, 0x1a48: 0x0f61, 0x1a49: 0x0f71, 0x1a4a: 0x00d9, 0x1a4b: 0x0f99,\n\t0x1a4c: 0x2039, 0x1a4d: 0x0269, 0x1a4e: 0x01d9, 0x1a4f: 0x0fa9, 0x1a50: 0x0fb9, 0x1a51: 0x1089,\n\t0x1a52: 0x0279, 0x1a53: 0x0369, 0x1a54: 0x0289, 0x1a55: 0x13d1, 0x1a56: 0x0039, 0x1a57: 0x0ee9,\n\t0x1a58: 0x1159, 0x1a59: 0x0ef9, 0x1a5a: 0x0f09, 0x1a5b: 0x1199, 0x1a5c: 0x0f31, 0x1a5d: 0x0249,\n\t0x1a5e: 0x0f41, 0x1a5f: 0x0259, 0x1a60: 0x0f51, 0x1a61: 0x0359, 0x1a62: 0x0f61, 0x1a63: 0x0f71,\n\t0x1a64: 0x00d9, 0x1a65: 0x0f99, 0x1a66: 0x2039, 0x1a67: 0x0269, 0x1a68: 0x01d9, 0x1a69: 0x0fa9,\n\t0x1a6a: 0x0fb9, 0x1a6b: 0x1089, 0x1a6c: 0x0279, 0x1a6d: 0x0369, 0x1a6e: 0x0289, 0x1a6f: 0x13d1,\n\t0x1a70: 0x0039, 0x1a71: 0x0ee9, 0x1a72: 0x1159, 0x1a73: 0x0ef9, 0x1a74: 0x0f09, 0x1a75: 0x1199,\n\t0x1a76: 0x0f31, 0x1a77: 0x0249, 0x1a78: 0x0f41, 0x1a79: 0x0259, 0x1a7a: 0x0f51, 0x1a7b: 0x0359,\n\t0x1a7c: 0x0f61, 0x1a7d: 0x0f71, 0x1a7e: 0x00d9, 0x1a7f: 0x0f99,\n\t// Block 0x6a, offset 0x1a80\n\t0x1a80: 0x2039, 0x1a81: 0x0269, 0x1a82: 0x01d9, 0x1a83: 0x0fa9, 0x1a84: 0x0fb9, 0x1a85: 0x1089,\n\t0x1a86: 0x0279, 0x1a87: 0x0369, 0x1a88: 0x0289, 0x1a89: 0x13d1, 0x1a8a: 0x0039, 0x1a8b: 0x0ee9,\n\t0x1a8c: 0x1159, 0x1a8d: 0x0ef9, 0x1a8e: 0x0f09, 0x1a8f: 0x1199, 0x1a90: 0x0f31, 0x1a91: 0x0249,\n\t0x1a92: 0x0f41, 0x1a93: 0x0259, 0x1a94: 0x0f51, 0x1a95: 0x0359, 0x1a96: 0x0f61, 0x1a97: 0x0f71,\n\t0x1a98: 0x00d9, 0x1a99: 0x0f99, 0x1a9a: 0x2039, 0x1a9b: 0x0269, 0x1a9c: 0x01d9, 0x1a9d: 0x0fa9,\n\t0x1a9e: 0x0fb9, 0x1a9f: 0x1089, 0x1aa0: 0x0279, 0x1aa1: 0x0369, 0x1aa2: 0x0289, 0x1aa3: 0x13d1,\n\t0x1aa4: 0xba81, 0x1aa5: 0xba99, 0x1aa6: 0x0040, 0x1aa7: 0x0040, 0x1aa8: 0xbab1, 0x1aa9: 0x1099,\n\t0x1aaa: 0x10b1, 0x1aab: 0x10c9, 0x1aac: 0xbac9, 0x1aad: 0xbae1, 0x1aae: 0xbaf9, 0x1aaf: 0x1429,\n\t0x1ab0: 0x1a31, 0x1ab1: 0xbb11, 0x1ab2: 0xbb29, 0x1ab3: 0xbb41, 0x1ab4: 0xbb59, 0x1ab5: 0xbb71,\n\t0x1ab6: 0xbb89, 0x1ab7: 0x2109, 0x1ab8: 0x1111, 0x1ab9: 0x1429, 0x1aba: 0xbba1, 0x1abb: 0xbbb9,\n\t0x1abc: 0xbbd1, 0x1abd: 0x10e1, 0x1abe: 0x10f9, 0x1abf: 0xbbe9,\n\t// Block 0x6b, offset 0x1ac0\n\t0x1ac0: 0x2079, 0x1ac1: 0xbc01, 0x1ac2: 0xbab1, 0x1ac3: 0x1099, 0x1ac4: 0x10b1, 0x1ac5: 0x10c9,\n\t0x1ac6: 0xbac9, 0x1ac7: 0xbae1, 0x1ac8: 0xbaf9, 0x1ac9: 0x1429, 0x1aca: 0x1a31, 0x1acb: 0xbb11,\n\t0x1acc: 0xbb29, 0x1acd: 0xbb41, 0x1ace: 0xbb59, 0x1acf: 0xbb71, 0x1ad0: 0xbb89, 0x1ad1: 0x2109,\n\t0x1ad2: 0x1111, 0x1ad3: 0xbba1, 0x1ad4: 0xbba1, 0x1ad5: 0xbbb9, 0x1ad6: 0xbbd1, 0x1ad7: 0x10e1,\n\t0x1ad8: 0x10f9, 0x1ad9: 0xbbe9, 0x1ada: 0x2079, 0x1adb: 0xbc21, 0x1adc: 0xbac9, 0x1add: 0x1429,\n\t0x1ade: 0xbb11, 0x1adf: 0x10e1, 0x1ae0: 0x1111, 0x1ae1: 0x2109, 0x1ae2: 0xbab1, 0x1ae3: 0x1099,\n\t0x1ae4: 0x10b1, 0x1ae5: 0x10c9, 0x1ae6: 0xbac9, 0x1ae7: 0xbae1, 0x1ae8: 0xbaf9, 0x1ae9: 0x1429,\n\t0x1aea: 0x1a31, 0x1aeb: 0xbb11, 0x1aec: 0xbb29, 0x1aed: 0xbb41, 0x1aee: 0xbb59, 0x1aef: 0xbb71,\n\t0x1af0: 0xbb89, 0x1af1: 0x2109, 0x1af2: 0x1111, 0x1af3: 0x1429, 0x1af4: 0xbba1, 0x1af5: 0xbbb9,\n\t0x1af6: 0xbbd1, 0x1af7: 0x10e1, 0x1af8: 0x10f9, 0x1af9: 0xbbe9, 0x1afa: 0x2079, 0x1afb: 0xbc01,\n\t0x1afc: 0xbab1, 0x1afd: 0x1099, 0x1afe: 0x10b1, 0x1aff: 0x10c9,\n\t// Block 0x6c, offset 0x1b00\n\t0x1b00: 0xbac9, 0x1b01: 0xbae1, 0x1b02: 0xbaf9, 0x1b03: 0x1429, 0x1b04: 0x1a31, 0x1b05: 0xbb11,\n\t0x1b06: 0xbb29, 0x1b07: 0xbb41, 0x1b08: 0xbb59, 0x1b09: 0xbb71, 0x1b0a: 0xbb89, 0x1b0b: 0x2109,\n\t0x1b0c: 0x1111, 0x1b0d: 0xbba1, 0x1b0e: 0xbba1, 0x1b0f: 0xbbb9, 0x1b10: 0xbbd1, 0x1b11: 0x10e1,\n\t0x1b12: 0x10f9, 0x1b13: 0xbbe9, 0x1b14: 0x2079, 0x1b15: 0xbc21, 0x1b16: 0xbac9, 0x1b17: 0x1429,\n\t0x1b18: 0xbb11, 0x1b19: 0x10e1, 0x1b1a: 0x1111, 0x1b1b: 0x2109, 0x1b1c: 0xbab1, 0x1b1d: 0x1099,\n\t0x1b1e: 0x10b1, 0x1b1f: 0x10c9, 0x1b20: 0xbac9, 0x1b21: 0xbae1, 0x1b22: 0xbaf9, 0x1b23: 0x1429,\n\t0x1b24: 0x1a31, 0x1b25: 0xbb11, 0x1b26: 0xbb29, 0x1b27: 0xbb41, 0x1b28: 0xbb59, 0x1b29: 0xbb71,\n\t0x1b2a: 0xbb89, 0x1b2b: 0x2109, 0x1b2c: 0x1111, 0x1b2d: 0x1429, 0x1b2e: 0xbba1, 0x1b2f: 0xbbb9,\n\t0x1b30: 0xbbd1, 0x1b31: 0x10e1, 0x1b32: 0x10f9, 0x1b33: 0xbbe9, 0x1b34: 0x2079, 0x1b35: 0xbc01,\n\t0x1b36: 0xbab1, 0x1b37: 0x1099, 0x1b38: 0x10b1, 0x1b39: 0x10c9, 0x1b3a: 0xbac9, 0x1b3b: 0xbae1,\n\t0x1b3c: 0xbaf9, 0x1b3d: 0x1429, 0x1b3e: 0x1a31, 0x1b3f: 0xbb11,\n\t// Block 0x6d, offset 0x1b40\n\t0x1b40: 0xbb29, 0x1b41: 0xbb41, 0x1b42: 0xbb59, 0x1b43: 0xbb71, 0x1b44: 0xbb89, 0x1b45: 0x2109,\n\t0x1b46: 0x1111, 0x1b47: 0xbba1, 0x1b48: 0xbba1, 0x1b49: 0xbbb9, 0x1b4a: 0xbbd1, 0x1b4b: 0x10e1,\n\t0x1b4c: 0x10f9, 0x1b4d: 0xbbe9, 0x1b4e: 0x2079, 0x1b4f: 0xbc21, 0x1b50: 0xbac9, 0x1b51: 0x1429,\n\t0x1b52: 0xbb11, 0x1b53: 0x10e1, 0x1b54: 0x1111, 0x1b55: 0x2109, 0x1b56: 0xbab1, 0x1b57: 0x1099,\n\t0x1b58: 0x10b1, 0x1b59: 0x10c9, 0x1b5a: 0xbac9, 0x1b5b: 0xbae1, 0x1b5c: 0xbaf9, 0x1b5d: 0x1429,\n\t0x1b5e: 0x1a31, 0x1b5f: 0xbb11, 0x1b60: 0xbb29, 0x1b61: 0xbb41, 0x1b62: 0xbb59, 0x1b63: 0xbb71,\n\t0x1b64: 0xbb89, 0x1b65: 0x2109, 0x1b66: 0x1111, 0x1b67: 0x1429, 0x1b68: 0xbba1, 0x1b69: 0xbbb9,\n\t0x1b6a: 0xbbd1, 0x1b6b: 0x10e1, 0x1b6c: 0x10f9, 0x1b6d: 0xbbe9, 0x1b6e: 0x2079, 0x1b6f: 0xbc01,\n\t0x1b70: 0xbab1, 0x1b71: 0x1099, 0x1b72: 0x10b1, 0x1b73: 0x10c9, 0x1b74: 0xbac9, 0x1b75: 0xbae1,\n\t0x1b76: 0xbaf9, 0x1b77: 0x1429, 0x1b78: 0x1a31, 0x1b79: 0xbb11, 0x1b7a: 0xbb29, 0x1b7b: 0xbb41,\n\t0x1b7c: 0xbb59, 0x1b7d: 0xbb71, 0x1b7e: 0xbb89, 0x1b7f: 0x2109,\n\t// Block 0x6e, offset 0x1b80\n\t0x1b80: 0x1111, 0x1b81: 0xbba1, 0x1b82: 0xbba1, 0x1b83: 0xbbb9, 0x1b84: 0xbbd1, 0x1b85: 0x10e1,\n\t0x1b86: 0x10f9, 0x1b87: 0xbbe9, 0x1b88: 0x2079, 0x1b89: 0xbc21, 0x1b8a: 0xbac9, 0x1b8b: 0x1429,\n\t0x1b8c: 0xbb11, 0x1b8d: 0x10e1, 0x1b8e: 0x1111, 0x1b8f: 0x2109, 0x1b90: 0xbab1, 0x1b91: 0x1099,\n\t0x1b92: 0x10b1, 0x1b93: 0x10c9, 0x1b94: 0xbac9, 0x1b95: 0xbae1, 0x1b96: 0xbaf9, 0x1b97: 0x1429,\n\t0x1b98: 0x1a31, 0x1b99: 0xbb11, 0x1b9a: 0xbb29, 0x1b9b: 0xbb41, 0x1b9c: 0xbb59, 0x1b9d: 0xbb71,\n\t0x1b9e: 0xbb89, 0x1b9f: 0x2109, 0x1ba0: 0x1111, 0x1ba1: 0x1429, 0x1ba2: 0xbba1, 0x1ba3: 0xbbb9,\n\t0x1ba4: 0xbbd1, 0x1ba5: 0x10e1, 0x1ba6: 0x10f9, 0x1ba7: 0xbbe9, 0x1ba8: 0x2079, 0x1ba9: 0xbc01,\n\t0x1baa: 0xbab1, 0x1bab: 0x1099, 0x1bac: 0x10b1, 0x1bad: 0x10c9, 0x1bae: 0xbac9, 0x1baf: 0xbae1,\n\t0x1bb0: 0xbaf9, 0x1bb1: 0x1429, 0x1bb2: 0x1a31, 0x1bb3: 0xbb11, 0x1bb4: 0xbb29, 0x1bb5: 0xbb41,\n\t0x1bb6: 0xbb59, 0x1bb7: 0xbb71, 0x1bb8: 0xbb89, 0x1bb9: 0x2109, 0x1bba: 0x1111, 0x1bbb: 0xbba1,\n\t0x1bbc: 0xbba1, 0x1bbd: 0xbbb9, 0x1bbe: 0xbbd1, 0x1bbf: 0x10e1,\n\t// Block 0x6f, offset 0x1bc0\n\t0x1bc0: 0x10f9, 0x1bc1: 0xbbe9, 0x1bc2: 0x2079, 0x1bc3: 0xbc21, 0x1bc4: 0xbac9, 0x1bc5: 0x1429,\n\t0x1bc6: 0xbb11, 0x1bc7: 0x10e1, 0x1bc8: 0x1111, 0x1bc9: 0x2109, 0x1bca: 0xbc41, 0x1bcb: 0xbc41,\n\t0x1bcc: 0x0040, 0x1bcd: 0x0040, 0x1bce: 0x1f41, 0x1bcf: 0x00c9, 0x1bd0: 0x0069, 0x1bd1: 0x0079,\n\t0x1bd2: 0x1f51, 0x1bd3: 0x1f61, 0x1bd4: 0x1f71, 0x1bd5: 0x1f81, 0x1bd6: 0x1f91, 0x1bd7: 0x1fa1,\n\t0x1bd8: 0x1f41, 0x1bd9: 0x00c9, 0x1bda: 0x0069, 0x1bdb: 0x0079, 0x1bdc: 0x1f51, 0x1bdd: 0x1f61,\n\t0x1bde: 0x1f71, 0x1bdf: 0x1f81, 0x1be0: 0x1f91, 0x1be1: 0x1fa1, 0x1be2: 0x1f41, 0x1be3: 0x00c9,\n\t0x1be4: 0x0069, 0x1be5: 0x0079, 0x1be6: 0x1f51, 0x1be7: 0x1f61, 0x1be8: 0x1f71, 0x1be9: 0x1f81,\n\t0x1bea: 0x1f91, 0x1beb: 0x1fa1, 0x1bec: 0x1f41, 0x1bed: 0x00c9, 0x1bee: 0x0069, 0x1bef: 0x0079,\n\t0x1bf0: 0x1f51, 0x1bf1: 0x1f61, 0x1bf2: 0x1f71, 0x1bf3: 0x1f81, 0x1bf4: 0x1f91, 0x1bf5: 0x1fa1,\n\t0x1bf6: 0x1f41, 0x1bf7: 0x00c9, 0x1bf8: 0x0069, 0x1bf9: 0x0079, 0x1bfa: 0x1f51, 0x1bfb: 0x1f61,\n\t0x1bfc: 0x1f71, 0x1bfd: 0x1f81, 0x1bfe: 0x1f91, 0x1bff: 0x1fa1,\n\t// Block 0x70, offset 0x1c00\n\t0x1c00: 0xe115, 0x1c01: 0xe115, 0x1c02: 0xe135, 0x1c03: 0xe135, 0x1c04: 0xe115, 0x1c05: 0xe115,\n\t0x1c06: 0xe175, 0x1c07: 0xe175, 0x1c08: 0xe115, 0x1c09: 0xe115, 0x1c0a: 0xe135, 0x1c0b: 0xe135,\n\t0x1c0c: 0xe115, 0x1c0d: 0xe115, 0x1c0e: 0xe1f5, 0x1c0f: 0xe1f5, 0x1c10: 0xe115, 0x1c11: 0xe115,\n\t0x1c12: 0xe135, 0x1c13: 0xe135, 0x1c14: 0xe115, 0x1c15: 0xe115, 0x1c16: 0xe175, 0x1c17: 0xe175,\n\t0x1c18: 0xe115, 0x1c19: 0xe115, 0x1c1a: 0xe135, 0x1c1b: 0xe135, 0x1c1c: 0xe115, 0x1c1d: 0xe115,\n\t0x1c1e: 0x8b05, 0x1c1f: 0x8b05, 0x1c20: 0x04b5, 0x1c21: 0x04b5, 0x1c22: 0x0a08, 0x1c23: 0x0a08,\n\t0x1c24: 0x0a08, 0x1c25: 0x0a08, 0x1c26: 0x0a08, 0x1c27: 0x0a08, 0x1c28: 0x0a08, 0x1c29: 0x0a08,\n\t0x1c2a: 0x0a08, 0x1c2b: 0x0a08, 0x1c2c: 0x0a08, 0x1c2d: 0x0a08, 0x1c2e: 0x0a08, 0x1c2f: 0x0a08,\n\t0x1c30: 0x0a08, 0x1c31: 0x0a08, 0x1c32: 0x0a08, 0x1c33: 0x0a08, 0x1c34: 0x0a08, 0x1c35: 0x0a08,\n\t0x1c36: 0x0a08, 0x1c37: 0x0a08, 0x1c38: 0x0a08, 0x1c39: 0x0a08, 0x1c3a: 0x0a08, 0x1c3b: 0x0a08,\n\t0x1c3c: 0x0a08, 0x1c3d: 0x0a08, 0x1c3e: 0x0a08, 0x1c3f: 0x0a08,\n\t// Block 0x71, offset 0x1c40\n\t0x1c40: 0xb189, 0x1c41: 0xb1a1, 0x1c42: 0xb201, 0x1c43: 0xb249, 0x1c44: 0x0040, 0x1c45: 0xb411,\n\t0x1c46: 0xb291, 0x1c47: 0xb219, 0x1c48: 0xb309, 0x1c49: 0xb429, 0x1c4a: 0xb399, 0x1c4b: 0xb3b1,\n\t0x1c4c: 0xb3c9, 0x1c4d: 0xb3e1, 0x1c4e: 0xb2a9, 0x1c4f: 0xb339, 0x1c50: 0xb369, 0x1c51: 0xb2d9,\n\t0x1c52: 0xb381, 0x1c53: 0xb279, 0x1c54: 0xb2c1, 0x1c55: 0xb1d1, 0x1c56: 0xb1e9, 0x1c57: 0xb231,\n\t0x1c58: 0xb261, 0x1c59: 0xb2f1, 0x1c5a: 0xb321, 0x1c5b: 0xb351, 0x1c5c: 0xbc59, 0x1c5d: 0x7949,\n\t0x1c5e: 0xbc71, 0x1c5f: 0xbc89, 0x1c60: 0x0040, 0x1c61: 0xb1a1, 0x1c62: 0xb201, 0x1c63: 0x0040,\n\t0x1c64: 0xb3f9, 0x1c65: 0x0040, 0x1c66: 0x0040, 0x1c67: 0xb219, 0x1c68: 0x0040, 0x1c69: 0xb429,\n\t0x1c6a: 0xb399, 0x1c6b: 0xb3b1, 0x1c6c: 0xb3c9, 0x1c6d: 0xb3e1, 0x1c6e: 0xb2a9, 0x1c6f: 0xb339,\n\t0x1c70: 0xb369, 0x1c71: 0xb2d9, 0x1c72: 0xb381, 0x1c73: 0x0040, 0x1c74: 0xb2c1, 0x1c75: 0xb1d1,\n\t0x1c76: 0xb1e9, 0x1c77: 0xb231, 0x1c78: 0x0040, 0x1c79: 0xb2f1, 0x1c7a: 0x0040, 0x1c7b: 0xb351,\n\t0x1c7c: 0x0040, 0x1c7d: 0x0040, 0x1c7e: 0x0040, 0x1c7f: 0x0040,\n\t// Block 0x72, offset 0x1c80\n\t0x1c80: 0x0040, 0x1c81: 0x0040, 0x1c82: 0xb201, 0x1c83: 0x0040, 0x1c84: 0x0040, 0x1c85: 0x0040,\n\t0x1c86: 0x0040, 0x1c87: 0xb219, 0x1c88: 0x0040, 0x1c89: 0xb429, 0x1c8a: 0x0040, 0x1c8b: 0xb3b1,\n\t0x1c8c: 0x0040, 0x1c8d: 0xb3e1, 0x1c8e: 0xb2a9, 0x1c8f: 0xb339, 0x1c90: 0x0040, 0x1c91: 0xb2d9,\n\t0x1c92: 0xb381, 0x1c93: 0x0040, 0x1c94: 0xb2c1, 0x1c95: 0x0040, 0x1c96: 0x0040, 0x1c97: 0xb231,\n\t0x1c98: 0x0040, 0x1c99: 0xb2f1, 0x1c9a: 0x0040, 0x1c9b: 0xb351, 0x1c9c: 0x0040, 0x1c9d: 0x7949,\n\t0x1c9e: 0x0040, 0x1c9f: 0xbc89, 0x1ca0: 0x0040, 0x1ca1: 0xb1a1, 0x1ca2: 0xb201, 0x1ca3: 0x0040,\n\t0x1ca4: 0xb3f9, 0x1ca5: 0x0040, 0x1ca6: 0x0040, 0x1ca7: 0xb219, 0x1ca8: 0xb309, 0x1ca9: 0xb429,\n\t0x1caa: 0xb399, 0x1cab: 0x0040, 0x1cac: 0xb3c9, 0x1cad: 0xb3e1, 0x1cae: 0xb2a9, 0x1caf: 0xb339,\n\t0x1cb0: 0xb369, 0x1cb1: 0xb2d9, 0x1cb2: 0xb381, 0x1cb3: 0x0040, 0x1cb4: 0xb2c1, 0x1cb5: 0xb1d1,\n\t0x1cb6: 0xb1e9, 0x1cb7: 0xb231, 0x1cb8: 0x0040, 0x1cb9: 0xb2f1, 0x1cba: 0xb321, 0x1cbb: 0xb351,\n\t0x1cbc: 0xbc59, 0x1cbd: 0x0040, 0x1cbe: 0xbc71, 0x1cbf: 0x0040,\n\t// Block 0x73, offset 0x1cc0\n\t0x1cc0: 0xb189, 0x1cc1: 0xb1a1, 0x1cc2: 0xb201, 0x1cc3: 0xb249, 0x1cc4: 0xb3f9, 0x1cc5: 0xb411,\n\t0x1cc6: 0xb291, 0x1cc7: 0xb219, 0x1cc8: 0xb309, 0x1cc9: 0xb429, 0x1cca: 0x0040, 0x1ccb: 0xb3b1,\n\t0x1ccc: 0xb3c9, 0x1ccd: 0xb3e1, 0x1cce: 0xb2a9, 0x1ccf: 0xb339, 0x1cd0: 0xb369, 0x1cd1: 0xb2d9,\n\t0x1cd2: 0xb381, 0x1cd3: 0xb279, 0x1cd4: 0xb2c1, 0x1cd5: 0xb1d1, 0x1cd6: 0xb1e9, 0x1cd7: 0xb231,\n\t0x1cd8: 0xb261, 0x1cd9: 0xb2f1, 0x1cda: 0xb321, 0x1cdb: 0xb351, 0x1cdc: 0x0040, 0x1cdd: 0x0040,\n\t0x1cde: 0x0040, 0x1cdf: 0x0040, 0x1ce0: 0x0040, 0x1ce1: 0xb1a1, 0x1ce2: 0xb201, 0x1ce3: 0xb249,\n\t0x1ce4: 0x0040, 0x1ce5: 0xb411, 0x1ce6: 0xb291, 0x1ce7: 0xb219, 0x1ce8: 0xb309, 0x1ce9: 0xb429,\n\t0x1cea: 0x0040, 0x1ceb: 0xb3b1, 0x1cec: 0xb3c9, 0x1ced: 0xb3e1, 0x1cee: 0xb2a9, 0x1cef: 0xb339,\n\t0x1cf0: 0xb369, 0x1cf1: 0xb2d9, 0x1cf2: 0xb381, 0x1cf3: 0xb279, 0x1cf4: 0xb2c1, 0x1cf5: 0xb1d1,\n\t0x1cf6: 0xb1e9, 0x1cf7: 0xb231, 0x1cf8: 0xb261, 0x1cf9: 0xb2f1, 0x1cfa: 0xb321, 0x1cfb: 0xb351,\n\t0x1cfc: 0x0040, 0x1cfd: 0x0040, 0x1cfe: 0x0040, 0x1cff: 0x0040,\n\t// Block 0x74, offset 0x1d00\n\t0x1d00: 0x0040, 0x1d01: 0xbca2, 0x1d02: 0xbcba, 0x1d03: 0xbcd2, 0x1d04: 0xbcea, 0x1d05: 0xbd02,\n\t0x1d06: 0xbd1a, 0x1d07: 0xbd32, 0x1d08: 0xbd4a, 0x1d09: 0xbd62, 0x1d0a: 0xbd7a, 0x1d0b: 0x0018,\n\t0x1d0c: 0x0018, 0x1d0d: 0x0040, 0x1d0e: 0x0040, 0x1d0f: 0x0040, 0x1d10: 0xbd92, 0x1d11: 0xbdb2,\n\t0x1d12: 0xbdd2, 0x1d13: 0xbdf2, 0x1d14: 0xbe12, 0x1d15: 0xbe32, 0x1d16: 0xbe52, 0x1d17: 0xbe72,\n\t0x1d18: 0xbe92, 0x1d19: 0xbeb2, 0x1d1a: 0xbed2, 0x1d1b: 0xbef2, 0x1d1c: 0xbf12, 0x1d1d: 0xbf32,\n\t0x1d1e: 0xbf52, 0x1d1f: 0xbf72, 0x1d20: 0xbf92, 0x1d21: 0xbfb2, 0x1d22: 0xbfd2, 0x1d23: 0xbff2,\n\t0x1d24: 0xc012, 0x1d25: 0xc032, 0x1d26: 0xc052, 0x1d27: 0xc072, 0x1d28: 0xc092, 0x1d29: 0xc0b2,\n\t0x1d2a: 0xc0d1, 0x1d2b: 0x1159, 0x1d2c: 0x0269, 0x1d2d: 0x6671, 0x1d2e: 0xc111, 0x1d2f: 0x0040,\n\t0x1d30: 0x0039, 0x1d31: 0x0ee9, 0x1d32: 0x1159, 0x1d33: 0x0ef9, 0x1d34: 0x0f09, 0x1d35: 0x1199,\n\t0x1d36: 0x0f31, 0x1d37: 0x0249, 0x1d38: 0x0f41, 0x1d39: 0x0259, 0x1d3a: 0x0f51, 0x1d3b: 0x0359,\n\t0x1d3c: 0x0f61, 0x1d3d: 0x0f71, 0x1d3e: 0x00d9, 0x1d3f: 0x0f99,\n\t// Block 0x75, offset 0x1d40\n\t0x1d40: 0x2039, 0x1d41: 0x0269, 0x1d42: 0x01d9, 0x1d43: 0x0fa9, 0x1d44: 0x0fb9, 0x1d45: 0x1089,\n\t0x1d46: 0x0279, 0x1d47: 0x0369, 0x1d48: 0x0289, 0x1d49: 0x13d1, 0x1d4a: 0xc129, 0x1d4b: 0x65b1,\n\t0x1d4c: 0xc141, 0x1d4d: 0x1441, 0x1d4e: 0xc159, 0x1d4f: 0xc179, 0x1d50: 0x0018, 0x1d51: 0x0018,\n\t0x1d52: 0x0018, 0x1d53: 0x0018, 0x1d54: 0x0018, 0x1d55: 0x0018, 0x1d56: 0x0018, 0x1d57: 0x0018,\n\t0x1d58: 0x0018, 0x1d59: 0x0018, 0x1d5a: 0x0018, 0x1d5b: 0x0018, 0x1d5c: 0x0018, 0x1d5d: 0x0018,\n\t0x1d5e: 0x0018, 0x1d5f: 0x0018, 0x1d60: 0x0018, 0x1d61: 0x0018, 0x1d62: 0x0018, 0x1d63: 0x0018,\n\t0x1d64: 0x0018, 0x1d65: 0x0018, 0x1d66: 0x0018, 0x1d67: 0x0018, 0x1d68: 0x0018, 0x1d69: 0x0018,\n\t0x1d6a: 0xc191, 0x1d6b: 0xc1a9, 0x1d6c: 0x0040, 0x1d6d: 0x0040, 0x1d6e: 0x0040, 0x1d6f: 0x0040,\n\t0x1d70: 0x0018, 0x1d71: 0x0018, 0x1d72: 0x0018, 0x1d73: 0x0018, 0x1d74: 0x0018, 0x1d75: 0x0018,\n\t0x1d76: 0x0018, 0x1d77: 0x0018, 0x1d78: 0x0018, 0x1d79: 0x0018, 0x1d7a: 0x0018, 0x1d7b: 0x0018,\n\t0x1d7c: 0x0018, 0x1d7d: 0x0018, 0x1d7e: 0x0018, 0x1d7f: 0x0018,\n\t// Block 0x76, offset 0x1d80\n\t0x1d80: 0xc1d9, 0x1d81: 0xc211, 0x1d82: 0xc249, 0x1d83: 0x0040, 0x1d84: 0x0040, 0x1d85: 0x0040,\n\t0x1d86: 0x0040, 0x1d87: 0x0040, 0x1d88: 0x0040, 0x1d89: 0x0040, 0x1d8a: 0x0040, 0x1d8b: 0x0040,\n\t0x1d8c: 0x0040, 0x1d8d: 0x0040, 0x1d8e: 0x0040, 0x1d8f: 0x0040, 0x1d90: 0xc269, 0x1d91: 0xc289,\n\t0x1d92: 0xc2a9, 0x1d93: 0xc2c9, 0x1d94: 0xc2e9, 0x1d95: 0xc309, 0x1d96: 0xc329, 0x1d97: 0xc349,\n\t0x1d98: 0xc369, 0x1d99: 0xc389, 0x1d9a: 0xc3a9, 0x1d9b: 0xc3c9, 0x1d9c: 0xc3e9, 0x1d9d: 0xc409,\n\t0x1d9e: 0xc429, 0x1d9f: 0xc449, 0x1da0: 0xc469, 0x1da1: 0xc489, 0x1da2: 0xc4a9, 0x1da3: 0xc4c9,\n\t0x1da4: 0xc4e9, 0x1da5: 0xc509, 0x1da6: 0xc529, 0x1da7: 0xc549, 0x1da8: 0xc569, 0x1da9: 0xc589,\n\t0x1daa: 0xc5a9, 0x1dab: 0xc5c9, 0x1dac: 0xc5e9, 0x1dad: 0xc609, 0x1dae: 0xc629, 0x1daf: 0xc649,\n\t0x1db0: 0xc669, 0x1db1: 0xc689, 0x1db2: 0xc6a9, 0x1db3: 0xc6c9, 0x1db4: 0xc6e9, 0x1db5: 0xc709,\n\t0x1db6: 0xc729, 0x1db7: 0xc749, 0x1db8: 0xc769, 0x1db9: 0xc789, 0x1dba: 0xc7a9, 0x1dbb: 0xc7c9,\n\t0x1dbc: 0x0040, 0x1dbd: 0x0040, 0x1dbe: 0x0040, 0x1dbf: 0x0040,\n\t// Block 0x77, offset 0x1dc0\n\t0x1dc0: 0xcaf9, 0x1dc1: 0xcb19, 0x1dc2: 0xcb39, 0x1dc3: 0x8b1d, 0x1dc4: 0xcb59, 0x1dc5: 0xcb79,\n\t0x1dc6: 0xcb99, 0x1dc7: 0xcbb9, 0x1dc8: 0xcbd9, 0x1dc9: 0xcbf9, 0x1dca: 0xcc19, 0x1dcb: 0xcc39,\n\t0x1dcc: 0xcc59, 0x1dcd: 0x8b3d, 0x1dce: 0xcc79, 0x1dcf: 0xcc99, 0x1dd0: 0xccb9, 0x1dd1: 0xccd9,\n\t0x1dd2: 0x8b5d, 0x1dd3: 0xccf9, 0x1dd4: 0xcd19, 0x1dd5: 0xc429, 0x1dd6: 0x8b7d, 0x1dd7: 0xcd39,\n\t0x1dd8: 0xcd59, 0x1dd9: 0xcd79, 0x1dda: 0xcd99, 0x1ddb: 0xcdb9, 0x1ddc: 0x8b9d, 0x1ddd: 0xcdd9,\n\t0x1dde: 0xcdf9, 0x1ddf: 0xce19, 0x1de0: 0xce39, 0x1de1: 0xce59, 0x1de2: 0xc789, 0x1de3: 0xce79,\n\t0x1de4: 0xce99, 0x1de5: 0xceb9, 0x1de6: 0xced9, 0x1de7: 0xcef9, 0x1de8: 0xcf19, 0x1de9: 0xcf39,\n\t0x1dea: 0xcf59, 0x1deb: 0xcf79, 0x1dec: 0xcf99, 0x1ded: 0xcfb9, 0x1dee: 0xcfd9, 0x1def: 0xcff9,\n\t0x1df0: 0xd019, 0x1df1: 0xd039, 0x1df2: 0xd039, 0x1df3: 0xd039, 0x1df4: 0x8bbd, 0x1df5: 0xd059,\n\t0x1df6: 0xd079, 0x1df7: 0xd099, 0x1df8: 0x8bdd, 0x1df9: 0xd0b9, 0x1dfa: 0xd0d9, 0x1dfb: 0xd0f9,\n\t0x1dfc: 0xd119, 0x1dfd: 0xd139, 0x1dfe: 0xd159, 0x1dff: 0xd179,\n\t// Block 0x78, offset 0x1e00\n\t0x1e00: 0xd199, 0x1e01: 0xd1b9, 0x1e02: 0xd1d9, 0x1e03: 0xd1f9, 0x1e04: 0xd219, 0x1e05: 0xd239,\n\t0x1e06: 0xd239, 0x1e07: 0xd259, 0x1e08: 0xd279, 0x1e09: 0xd299, 0x1e0a: 0xd2b9, 0x1e0b: 0xd2d9,\n\t0x1e0c: 0xd2f9, 0x1e0d: 0xd319, 0x1e0e: 0xd339, 0x1e0f: 0xd359, 0x1e10: 0xd379, 0x1e11: 0xd399,\n\t0x1e12: 0xd3b9, 0x1e13: 0xd3d9, 0x1e14: 0xd3f9, 0x1e15: 0xd419, 0x1e16: 0xd439, 0x1e17: 0xd459,\n\t0x1e18: 0xd479, 0x1e19: 0x8bfd, 0x1e1a: 0xd499, 0x1e1b: 0xd4b9, 0x1e1c: 0xd4d9, 0x1e1d: 0xc309,\n\t0x1e1e: 0xd4f9, 0x1e1f: 0xd519, 0x1e20: 0x8c1d, 0x1e21: 0x8c3d, 0x1e22: 0xd539, 0x1e23: 0xd559,\n\t0x1e24: 0xd579, 0x1e25: 0xd599, 0x1e26: 0xd5b9, 0x1e27: 0xd5d9, 0x1e28: 0x2040, 0x1e29: 0xd5f9,\n\t0x1e2a: 0xd619, 0x1e2b: 0xd619, 0x1e2c: 0x8c5d, 0x1e2d: 0xd639, 0x1e2e: 0xd659, 0x1e2f: 0xd679,\n\t0x1e30: 0xd699, 0x1e31: 0x8c7d, 0x1e32: 0xd6b9, 0x1e33: 0xd6d9, 0x1e34: 0x2040, 0x1e35: 0xd6f9,\n\t0x1e36: 0xd719, 0x1e37: 0xd739, 0x1e38: 0xd759, 0x1e39: 0xd779, 0x1e3a: 0xd799, 0x1e3b: 0x8c9d,\n\t0x1e3c: 0xd7b9, 0x1e3d: 0x8cbd, 0x1e3e: 0xd7d9, 0x1e3f: 0xd7f9,\n\t// Block 0x79, offset 0x1e40\n\t0x1e40: 0xd819, 0x1e41: 0xd839, 0x1e42: 0xd859, 0x1e43: 0xd879, 0x1e44: 0xd899, 0x1e45: 0xd8b9,\n\t0x1e46: 0xd8d9, 0x1e47: 0xd8f9, 0x1e48: 0xd919, 0x1e49: 0x8cdd, 0x1e4a: 0xd939, 0x1e4b: 0xd959,\n\t0x1e4c: 0xd979, 0x1e4d: 0xd999, 0x1e4e: 0xd9b9, 0x1e4f: 0x8cfd, 0x1e50: 0xd9d9, 0x1e51: 0x8d1d,\n\t0x1e52: 0x8d3d, 0x1e53: 0xd9f9, 0x1e54: 0xda19, 0x1e55: 0xda19, 0x1e56: 0xda39, 0x1e57: 0x8d5d,\n\t0x1e58: 0x8d7d, 0x1e59: 0xda59, 0x1e5a: 0xda79, 0x1e5b: 0xda99, 0x1e5c: 0xdab9, 0x1e5d: 0xdad9,\n\t0x1e5e: 0xdaf9, 0x1e5f: 0xdb19, 0x1e60: 0xdb39, 0x1e61: 0xdb59, 0x1e62: 0xdb79, 0x1e63: 0xdb99,\n\t0x1e64: 0x8d9d, 0x1e65: 0xdbb9, 0x1e66: 0xdbd9, 0x1e67: 0xdbf9, 0x1e68: 0xdc19, 0x1e69: 0xdbf9,\n\t0x1e6a: 0xdc39, 0x1e6b: 0xdc59, 0x1e6c: 0xdc79, 0x1e6d: 0xdc99, 0x1e6e: 0xdcb9, 0x1e6f: 0xdcd9,\n\t0x1e70: 0xdcf9, 0x1e71: 0xdd19, 0x1e72: 0xdd39, 0x1e73: 0xdd59, 0x1e74: 0xdd79, 0x1e75: 0xdd99,\n\t0x1e76: 0xddb9, 0x1e77: 0xddd9, 0x1e78: 0x8dbd, 0x1e79: 0xddf9, 0x1e7a: 0xde19, 0x1e7b: 0xde39,\n\t0x1e7c: 0xde59, 0x1e7d: 0xde79, 0x1e7e: 0x8ddd, 0x1e7f: 0xde99,\n\t// Block 0x7a, offset 0x1e80\n\t0x1e80: 0xe599, 0x1e81: 0xe5b9, 0x1e82: 0xe5d9, 0x1e83: 0xe5f9, 0x1e84: 0xe619, 0x1e85: 0xe639,\n\t0x1e86: 0x8efd, 0x1e87: 0xe659, 0x1e88: 0xe679, 0x1e89: 0xe699, 0x1e8a: 0xe6b9, 0x1e8b: 0xe6d9,\n\t0x1e8c: 0xe6f9, 0x1e8d: 0x8f1d, 0x1e8e: 0xe719, 0x1e8f: 0xe739, 0x1e90: 0x8f3d, 0x1e91: 0x8f5d,\n\t0x1e92: 0xe759, 0x1e93: 0xe779, 0x1e94: 0xe799, 0x1e95: 0xe7b9, 0x1e96: 0xe7d9, 0x1e97: 0xe7f9,\n\t0x1e98: 0xe819, 0x1e99: 0xe839, 0x1e9a: 0xe859, 0x1e9b: 0x8f7d, 0x1e9c: 0xe879, 0x1e9d: 0x8f9d,\n\t0x1e9e: 0xe899, 0x1e9f: 0x2040, 0x1ea0: 0xe8b9, 0x1ea1: 0xe8d9, 0x1ea2: 0xe8f9, 0x1ea3: 0x8fbd,\n\t0x1ea4: 0xe919, 0x1ea5: 0xe939, 0x1ea6: 0x8fdd, 0x1ea7: 0x8ffd, 0x1ea8: 0xe959, 0x1ea9: 0xe979,\n\t0x1eaa: 0xe999, 0x1eab: 0xe9b9, 0x1eac: 0xe9d9, 0x1ead: 0xe9d9, 0x1eae: 0xe9f9, 0x1eaf: 0xea19,\n\t0x1eb0: 0xea39, 0x1eb1: 0xea59, 0x1eb2: 0xea79, 0x1eb3: 0xea99, 0x1eb4: 0xeab9, 0x1eb5: 0x901d,\n\t0x1eb6: 0xead9, 0x1eb7: 0x903d, 0x1eb8: 0xeaf9, 0x1eb9: 0x905d, 0x1eba: 0xeb19, 0x1ebb: 0x907d,\n\t0x1ebc: 0x909d, 0x1ebd: 0x90bd, 0x1ebe: 0xeb39, 0x1ebf: 0xeb59,\n\t// Block 0x7b, offset 0x1ec0\n\t0x1ec0: 0xeb79, 0x1ec1: 0x90dd, 0x1ec2: 0x90fd, 0x1ec3: 0x911d, 0x1ec4: 0x913d, 0x1ec5: 0xeb99,\n\t0x1ec6: 0xebb9, 0x1ec7: 0xebb9, 0x1ec8: 0xebd9, 0x1ec9: 0xebf9, 0x1eca: 0xec19, 0x1ecb: 0xec39,\n\t0x1ecc: 0xec59, 0x1ecd: 0x915d, 0x1ece: 0xec79, 0x1ecf: 0xec99, 0x1ed0: 0xecb9, 0x1ed1: 0xecd9,\n\t0x1ed2: 0x917d, 0x1ed3: 0xecf9, 0x1ed4: 0x919d, 0x1ed5: 0x91bd, 0x1ed6: 0xed19, 0x1ed7: 0xed39,\n\t0x1ed8: 0xed59, 0x1ed9: 0xed79, 0x1eda: 0xed99, 0x1edb: 0xedb9, 0x1edc: 0x91dd, 0x1edd: 0x91fd,\n\t0x1ede: 0x921d, 0x1edf: 0x2040, 0x1ee0: 0xedd9, 0x1ee1: 0x923d, 0x1ee2: 0xedf9, 0x1ee3: 0xee19,\n\t0x1ee4: 0xee39, 0x1ee5: 0x925d, 0x1ee6: 0xee59, 0x1ee7: 0xee79, 0x1ee8: 0xee99, 0x1ee9: 0xeeb9,\n\t0x1eea: 0xeed9, 0x1eeb: 0x927d, 0x1eec: 0xeef9, 0x1eed: 0xef19, 0x1eee: 0xef39, 0x1eef: 0xef59,\n\t0x1ef0: 0xef79, 0x1ef1: 0xef99, 0x1ef2: 0x929d, 0x1ef3: 0x92bd, 0x1ef4: 0xefb9, 0x1ef5: 0x92dd,\n\t0x1ef6: 0xefd9, 0x1ef7: 0x92fd, 0x1ef8: 0xeff9, 0x1ef9: 0xf019, 0x1efa: 0xf039, 0x1efb: 0x931d,\n\t0x1efc: 0x933d, 0x1efd: 0xf059, 0x1efe: 0x935d, 0x1eff: 0xf079,\n\t// Block 0x7c, offset 0x1f00\n\t0x1f00: 0xf6b9, 0x1f01: 0xf6d9, 0x1f02: 0xf6f9, 0x1f03: 0xf719, 0x1f04: 0xf739, 0x1f05: 0x951d,\n\t0x1f06: 0xf759, 0x1f07: 0xf779, 0x1f08: 0xf799, 0x1f09: 0xf7b9, 0x1f0a: 0xf7d9, 0x1f0b: 0x953d,\n\t0x1f0c: 0x955d, 0x1f0d: 0xf7f9, 0x1f0e: 0xf819, 0x1f0f: 0xf839, 0x1f10: 0xf859, 0x1f11: 0xf879,\n\t0x1f12: 0xf899, 0x1f13: 0x957d, 0x1f14: 0xf8b9, 0x1f15: 0xf8d9, 0x1f16: 0xf8f9, 0x1f17: 0xf919,\n\t0x1f18: 0x959d, 0x1f19: 0x95bd, 0x1f1a: 0xf939, 0x1f1b: 0xf959, 0x1f1c: 0xf979, 0x1f1d: 0x95dd,\n\t0x1f1e: 0xf999, 0x1f1f: 0xf9b9, 0x1f20: 0x6815, 0x1f21: 0x95fd, 0x1f22: 0xf9d9, 0x1f23: 0xf9f9,\n\t0x1f24: 0xfa19, 0x1f25: 0x961d, 0x1f26: 0xfa39, 0x1f27: 0xfa59, 0x1f28: 0xfa79, 0x1f29: 0xfa99,\n\t0x1f2a: 0xfab9, 0x1f2b: 0xfad9, 0x1f2c: 0xfaf9, 0x1f2d: 0x963d, 0x1f2e: 0xfb19, 0x1f2f: 0xfb39,\n\t0x1f30: 0xfb59, 0x1f31: 0x965d, 0x1f32: 0xfb79, 0x1f33: 0xfb99, 0x1f34: 0xfbb9, 0x1f35: 0xfbd9,\n\t0x1f36: 0x7b35, 0x1f37: 0x967d, 0x1f38: 0xfbf9, 0x1f39: 0xfc19, 0x1f3a: 0xfc39, 0x1f3b: 0x969d,\n\t0x1f3c: 0xfc59, 0x1f3d: 0x96bd, 0x1f3e: 0xfc79, 0x1f3f: 0xfc79,\n\t// Block 0x7d, offset 0x1f40\n\t0x1f40: 0xfc99, 0x1f41: 0x96dd, 0x1f42: 0xfcb9, 0x1f43: 0xfcd9, 0x1f44: 0xfcf9, 0x1f45: 0xfd19,\n\t0x1f46: 0xfd39, 0x1f47: 0xfd59, 0x1f48: 0xfd79, 0x1f49: 0x96fd, 0x1f4a: 0xfd99, 0x1f4b: 0xfdb9,\n\t0x1f4c: 0xfdd9, 0x1f4d: 0xfdf9, 0x1f4e: 0xfe19, 0x1f4f: 0xfe39, 0x1f50: 0x971d, 0x1f51: 0xfe59,\n\t0x1f52: 0x973d, 0x1f53: 0x975d, 0x1f54: 0x977d, 0x1f55: 0xfe79, 0x1f56: 0xfe99, 0x1f57: 0xfeb9,\n\t0x1f58: 0xfed9, 0x1f59: 0xfef9, 0x1f5a: 0xff19, 0x1f5b: 0xff39, 0x1f5c: 0xff59, 0x1f5d: 0x979d,\n\t0x1f5e: 0x0040, 0x1f5f: 0x0040, 0x1f60: 0x0040, 0x1f61: 0x0040, 0x1f62: 0x0040, 0x1f63: 0x0040,\n\t0x1f64: 0x0040, 0x1f65: 0x0040, 0x1f66: 0x0040, 0x1f67: 0x0040, 0x1f68: 0x0040, 0x1f69: 0x0040,\n\t0x1f6a: 0x0040, 0x1f6b: 0x0040, 0x1f6c: 0x0040, 0x1f6d: 0x0040, 0x1f6e: 0x0040, 0x1f6f: 0x0040,\n\t0x1f70: 0x0040, 0x1f71: 0x0040, 0x1f72: 0x0040, 0x1f73: 0x0040, 0x1f74: 0x0040, 0x1f75: 0x0040,\n\t0x1f76: 0x0040, 0x1f77: 0x0040, 0x1f78: 0x0040, 0x1f79: 0x0040, 0x1f7a: 0x0040, 0x1f7b: 0x0040,\n\t0x1f7c: 0x0040, 0x1f7d: 0x0040, 0x1f7e: 0x0040, 0x1f7f: 0x0040,\n}\n\n// idnaIndex: 35 blocks, 2240 entries, 4480 bytes\n// Block 0 is the zero block.\nvar idnaIndex = [2240]uint16{\n\t// Block 0x0, offset 0x0\n\t// Block 0x1, offset 0x40\n\t// Block 0x2, offset 0x80\n\t// Block 0x3, offset 0xc0\n\t0xc2: 0x01, 0xc3: 0x7c, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x04, 0xc7: 0x05,\n\t0xc8: 0x06, 0xc9: 0x7d, 0xca: 0x7e, 0xcb: 0x07, 0xcc: 0x7f, 0xcd: 0x08, 0xce: 0x09, 0xcf: 0x0a,\n\t0xd0: 0x80, 0xd1: 0x0b, 0xd2: 0x0c, 0xd3: 0x0d, 0xd4: 0x0e, 0xd5: 0x81, 0xd6: 0x82, 0xd7: 0x83,\n\t0xd8: 0x0f, 0xd9: 0x10, 0xda: 0x84, 0xdb: 0x11, 0xdc: 0x12, 0xdd: 0x85, 0xde: 0x86, 0xdf: 0x87,\n\t0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, 0xe4: 0x06, 0xe5: 0x07, 0xe6: 0x07, 0xe7: 0x07,\n\t0xe8: 0x07, 0xe9: 0x08, 0xea: 0x09, 0xeb: 0x07, 0xec: 0x07, 0xed: 0x0a, 0xee: 0x0b, 0xef: 0x0c,\n\t0xf0: 0x1c, 0xf1: 0x1d, 0xf2: 0x1d, 0xf3: 0x1f, 0xf4: 0x20,\n\t// Block 0x4, offset 0x100\n\t0x120: 0x88, 0x121: 0x89, 0x122: 0x8a, 0x123: 0x8b, 0x124: 0x8c, 0x125: 0x13, 0x126: 0x14, 0x127: 0x15,\n\t0x128: 0x16, 0x129: 0x17, 0x12a: 0x18, 0x12b: 0x19, 0x12c: 0x1a, 0x12d: 0x1b, 0x12e: 0x1c, 0x12f: 0x8d,\n\t0x130: 0x8e, 0x131: 0x1d, 0x132: 0x1e, 0x133: 0x1f, 0x134: 0x8f, 0x135: 0x20, 0x136: 0x90, 0x137: 0x91,\n\t0x138: 0x92, 0x139: 0x93, 0x13a: 0x21, 0x13b: 0x94, 0x13c: 0x95, 0x13d: 0x22, 0x13e: 0x23, 0x13f: 0x96,\n\t// Block 0x5, offset 0x140\n\t0x140: 0x97, 0x141: 0x98, 0x142: 0x99, 0x143: 0x9a, 0x144: 0x9b, 0x145: 0x9c, 0x146: 0x9d, 0x147: 0x9e,\n\t0x148: 0x9f, 0x149: 0xa0, 0x14a: 0xa1, 0x14b: 0xa2, 0x14c: 0xa3, 0x14d: 0xa4, 0x14e: 0xa5, 0x14f: 0xa6,\n\t0x150: 0xa7, 0x151: 0x9f, 0x152: 0x9f, 0x153: 0x9f, 0x154: 0x9f, 0x155: 0x9f, 0x156: 0x9f, 0x157: 0x9f,\n\t0x158: 0x9f, 0x159: 0xa8, 0x15a: 0xa9, 0x15b: 0xaa, 0x15c: 0xab, 0x15d: 0xac, 0x15e: 0xad, 0x15f: 0xae,\n\t0x160: 0xaf, 0x161: 0xb0, 0x162: 0xb1, 0x163: 0xb2, 0x164: 0xb3, 0x165: 0xb4, 0x166: 0xb5, 0x167: 0xb6,\n\t0x168: 0xb7, 0x169: 0xb8, 0x16a: 0xb9, 0x16b: 0xba, 0x16c: 0xbb, 0x16d: 0xbc, 0x16e: 0xbd, 0x16f: 0xbe,\n\t0x170: 0xbf, 0x171: 0xc0, 0x172: 0xc1, 0x173: 0xc2, 0x174: 0x24, 0x175: 0x25, 0x176: 0x26, 0x177: 0xc3,\n\t0x178: 0x27, 0x179: 0x27, 0x17a: 0x28, 0x17b: 0x27, 0x17c: 0xc4, 0x17d: 0x29, 0x17e: 0x2a, 0x17f: 0x2b,\n\t// Block 0x6, offset 0x180\n\t0x180: 0x2c, 0x181: 0x2d, 0x182: 0x2e, 0x183: 0xc5, 0x184: 0x2f, 0x185: 0x30, 0x186: 0xc6, 0x187: 0x9b,\n\t0x188: 0xc7, 0x189: 0xc8, 0x18a: 0x9b, 0x18b: 0x9b, 0x18c: 0xc9, 0x18d: 0x9b, 0x18e: 0x9b, 0x18f: 0xca,\n\t0x190: 0xcb, 0x191: 0x31, 0x192: 0x32, 0x193: 0x33, 0x194: 0x9b, 0x195: 0x9b, 0x196: 0x9b, 0x197: 0x9b,\n\t0x198: 0x9b, 0x199: 0x9b, 0x19a: 0x9b, 0x19b: 0x9b, 0x19c: 0x9b, 0x19d: 0x9b, 0x19e: 0x9b, 0x19f: 0x9b,\n\t0x1a0: 0x9b, 0x1a1: 0x9b, 0x1a2: 0x9b, 0x1a3: 0x9b, 0x1a4: 0x9b, 0x1a5: 0x9b, 0x1a6: 0x9b, 0x1a7: 0x9b,\n\t0x1a8: 0xcc, 0x1a9: 0xcd, 0x1aa: 0x9b, 0x1ab: 0xce, 0x1ac: 0x9b, 0x1ad: 0xcf, 0x1ae: 0xd0, 0x1af: 0xd1,\n\t0x1b0: 0xd2, 0x1b1: 0x34, 0x1b2: 0x27, 0x1b3: 0x35, 0x1b4: 0xd3, 0x1b5: 0xd4, 0x1b6: 0xd5, 0x1b7: 0xd6,\n\t0x1b8: 0xd7, 0x1b9: 0xd8, 0x1ba: 0xd9, 0x1bb: 0xda, 0x1bc: 0xdb, 0x1bd: 0xdc, 0x1be: 0xdd, 0x1bf: 0x36,\n\t// Block 0x7, offset 0x1c0\n\t0x1c0: 0x37, 0x1c1: 0xde, 0x1c2: 0xdf, 0x1c3: 0xe0, 0x1c4: 0xe1, 0x1c5: 0x38, 0x1c6: 0x39, 0x1c7: 0xe2,\n\t0x1c8: 0xe3, 0x1c9: 0x3a, 0x1ca: 0x3b, 0x1cb: 0x3c, 0x1cc: 0x3d, 0x1cd: 0x3e, 0x1ce: 0x3f, 0x1cf: 0x40,\n\t0x1d0: 0x9f, 0x1d1: 0x9f, 0x1d2: 0x9f, 0x1d3: 0x9f, 0x1d4: 0x9f, 0x1d5: 0x9f, 0x1d6: 0x9f, 0x1d7: 0x9f,\n\t0x1d8: 0x9f, 0x1d9: 0x9f, 0x1da: 0x9f, 0x1db: 0x9f, 0x1dc: 0x9f, 0x1dd: 0x9f, 0x1de: 0x9f, 0x1df: 0x9f,\n\t0x1e0: 0x9f, 0x1e1: 0x9f, 0x1e2: 0x9f, 0x1e3: 0x9f, 0x1e4: 0x9f, 0x1e5: 0x9f, 0x1e6: 0x9f, 0x1e7: 0x9f,\n\t0x1e8: 0x9f, 0x1e9: 0x9f, 0x1ea: 0x9f, 0x1eb: 0x9f, 0x1ec: 0x9f, 0x1ed: 0x9f, 0x1ee: 0x9f, 0x1ef: 0x9f,\n\t0x1f0: 0x9f, 0x1f1: 0x9f, 0x1f2: 0x9f, 0x1f3: 0x9f, 0x1f4: 0x9f, 0x1f5: 0x9f, 0x1f6: 0x9f, 0x1f7: 0x9f,\n\t0x1f8: 0x9f, 0x1f9: 0x9f, 0x1fa: 0x9f, 0x1fb: 0x9f, 0x1fc: 0x9f, 0x1fd: 0x9f, 0x1fe: 0x9f, 0x1ff: 0x9f,\n\t// Block 0x8, offset 0x200\n\t0x200: 0x9f, 0x201: 0x9f, 0x202: 0x9f, 0x203: 0x9f, 0x204: 0x9f, 0x205: 0x9f, 0x206: 0x9f, 0x207: 0x9f,\n\t0x208: 0x9f, 0x209: 0x9f, 0x20a: 0x9f, 0x20b: 0x9f, 0x20c: 0x9f, 0x20d: 0x9f, 0x20e: 0x9f, 0x20f: 0x9f,\n\t0x210: 0x9f, 0x211: 0x9f, 0x212: 0x9f, 0x213: 0x9f, 0x214: 0x9f, 0x215: 0x9f, 0x216: 0x9f, 0x217: 0x9f,\n\t0x218: 0x9f, 0x219: 0x9f, 0x21a: 0x9f, 0x21b: 0x9f, 0x21c: 0x9f, 0x21d: 0x9f, 0x21e: 0x9f, 0x21f: 0x9f,\n\t0x220: 0x9f, 0x221: 0x9f, 0x222: 0x9f, 0x223: 0x9f, 0x224: 0x9f, 0x225: 0x9f, 0x226: 0x9f, 0x227: 0x9f,\n\t0x228: 0x9f, 0x229: 0x9f, 0x22a: 0x9f, 0x22b: 0x9f, 0x22c: 0x9f, 0x22d: 0x9f, 0x22e: 0x9f, 0x22f: 0x9f,\n\t0x230: 0x9f, 0x231: 0x9f, 0x232: 0x9f, 0x233: 0x9f, 0x234: 0x9f, 0x235: 0x9f, 0x236: 0xb2, 0x237: 0x9b,\n\t0x238: 0x9f, 0x239: 0x9f, 0x23a: 0x9f, 0x23b: 0x9f, 0x23c: 0x9f, 0x23d: 0x9f, 0x23e: 0x9f, 0x23f: 0x9f,\n\t// Block 0x9, offset 0x240\n\t0x240: 0x9f, 0x241: 0x9f, 0x242: 0x9f, 0x243: 0x9f, 0x244: 0x9f, 0x245: 0x9f, 0x246: 0x9f, 0x247: 0x9f,\n\t0x248: 0x9f, 0x249: 0x9f, 0x24a: 0x9f, 0x24b: 0x9f, 0x24c: 0x9f, 0x24d: 0x9f, 0x24e: 0x9f, 0x24f: 0x9f,\n\t0x250: 0x9f, 0x251: 0x9f, 0x252: 0x9f, 0x253: 0x9f, 0x254: 0x9f, 0x255: 0x9f, 0x256: 0x9f, 0x257: 0x9f,\n\t0x258: 0x9f, 0x259: 0x9f, 0x25a: 0x9f, 0x25b: 0x9f, 0x25c: 0x9f, 0x25d: 0x9f, 0x25e: 0x9f, 0x25f: 0x9f,\n\t0x260: 0x9f, 0x261: 0x9f, 0x262: 0x9f, 0x263: 0x9f, 0x264: 0x9f, 0x265: 0x9f, 0x266: 0x9f, 0x267: 0x9f,\n\t0x268: 0x9f, 0x269: 0x9f, 0x26a: 0x9f, 0x26b: 0x9f, 0x26c: 0x9f, 0x26d: 0x9f, 0x26e: 0x9f, 0x26f: 0x9f,\n\t0x270: 0x9f, 0x271: 0x9f, 0x272: 0x9f, 0x273: 0x9f, 0x274: 0x9f, 0x275: 0x9f, 0x276: 0x9f, 0x277: 0x9f,\n\t0x278: 0x9f, 0x279: 0x9f, 0x27a: 0x9f, 0x27b: 0x9f, 0x27c: 0x9f, 0x27d: 0x9f, 0x27e: 0x9f, 0x27f: 0x9f,\n\t// Block 0xa, offset 0x280\n\t0x280: 0x9f, 0x281: 0x9f, 0x282: 0x9f, 0x283: 0x9f, 0x284: 0x9f, 0x285: 0x9f, 0x286: 0x9f, 0x287: 0x9f,\n\t0x288: 0x9f, 0x289: 0x9f, 0x28a: 0x9f, 0x28b: 0x9f, 0x28c: 0x9f, 0x28d: 0x9f, 0x28e: 0x9f, 0x28f: 0x9f,\n\t0x290: 0x9f, 0x291: 0x9f, 0x292: 0x9f, 0x293: 0x9f, 0x294: 0x9f, 0x295: 0x9f, 0x296: 0x9f, 0x297: 0x9f,\n\t0x298: 0x9f, 0x299: 0x9f, 0x29a: 0x9f, 0x29b: 0x9f, 0x29c: 0x9f, 0x29d: 0x9f, 0x29e: 0x9f, 0x29f: 0x9f,\n\t0x2a0: 0x9f, 0x2a1: 0x9f, 0x2a2: 0x9f, 0x2a3: 0x9f, 0x2a4: 0x9f, 0x2a5: 0x9f, 0x2a6: 0x9f, 0x2a7: 0x9f,\n\t0x2a8: 0x9f, 0x2a9: 0x9f, 0x2aa: 0x9f, 0x2ab: 0x9f, 0x2ac: 0x9f, 0x2ad: 0x9f, 0x2ae: 0x9f, 0x2af: 0x9f,\n\t0x2b0: 0x9f, 0x2b1: 0x9f, 0x2b2: 0x9f, 0x2b3: 0x9f, 0x2b4: 0x9f, 0x2b5: 0x9f, 0x2b6: 0x9f, 0x2b7: 0x9f,\n\t0x2b8: 0x9f, 0x2b9: 0x9f, 0x2ba: 0x9f, 0x2bb: 0x9f, 0x2bc: 0x9f, 0x2bd: 0x9f, 0x2be: 0x9f, 0x2bf: 0xe4,\n\t// Block 0xb, offset 0x2c0\n\t0x2c0: 0x9f, 0x2c1: 0x9f, 0x2c2: 0x9f, 0x2c3: 0x9f, 0x2c4: 0x9f, 0x2c5: 0x9f, 0x2c6: 0x9f, 0x2c7: 0x9f,\n\t0x2c8: 0x9f, 0x2c9: 0x9f, 0x2ca: 0x9f, 0x2cb: 0x9f, 0x2cc: 0x9f, 0x2cd: 0x9f, 0x2ce: 0x9f, 0x2cf: 0x9f,\n\t0x2d0: 0x9f, 0x2d1: 0x9f, 0x2d2: 0xe5, 0x2d3: 0xe6, 0x2d4: 0x9f, 0x2d5: 0x9f, 0x2d6: 0x9f, 0x2d7: 0x9f,\n\t0x2d8: 0xe7, 0x2d9: 0x41, 0x2da: 0x42, 0x2db: 0xe8, 0x2dc: 0x43, 0x2dd: 0x44, 0x2de: 0x45, 0x2df: 0xe9,\n\t0x2e0: 0xea, 0x2e1: 0xeb, 0x2e2: 0xec, 0x2e3: 0xed, 0x2e4: 0xee, 0x2e5: 0xef, 0x2e6: 0xf0, 0x2e7: 0xf1,\n\t0x2e8: 0xf2, 0x2e9: 0xf3, 0x2ea: 0xf4, 0x2eb: 0xf5, 0x2ec: 0xf6, 0x2ed: 0xf7, 0x2ee: 0xf8, 0x2ef: 0xf9,\n\t0x2f0: 0x9f, 0x2f1: 0x9f, 0x2f2: 0x9f, 0x2f3: 0x9f, 0x2f4: 0x9f, 0x2f5: 0x9f, 0x2f6: 0x9f, 0x2f7: 0x9f,\n\t0x2f8: 0x9f, 0x2f9: 0x9f, 0x2fa: 0x9f, 0x2fb: 0x9f, 0x2fc: 0x9f, 0x2fd: 0x9f, 0x2fe: 0x9f, 0x2ff: 0x9f,\n\t// Block 0xc, offset 0x300\n\t0x300: 0x9f, 0x301: 0x9f, 0x302: 0x9f, 0x303: 0x9f, 0x304: 0x9f, 0x305: 0x9f, 0x306: 0x9f, 0x307: 0x9f,\n\t0x308: 0x9f, 0x309: 0x9f, 0x30a: 0x9f, 0x30b: 0x9f, 0x30c: 0x9f, 0x30d: 0x9f, 0x30e: 0x9f, 0x30f: 0x9f,\n\t0x310: 0x9f, 0x311: 0x9f, 0x312: 0x9f, 0x313: 0x9f, 0x314: 0x9f, 0x315: 0x9f, 0x316: 0x9f, 0x317: 0x9f,\n\t0x318: 0x9f, 0x319: 0x9f, 0x31a: 0x9f, 0x31b: 0x9f, 0x31c: 0x9f, 0x31d: 0x9f, 0x31e: 0xfa, 0x31f: 0xfb,\n\t// Block 0xd, offset 0x340\n\t0x340: 0xba, 0x341: 0xba, 0x342: 0xba, 0x343: 0xba, 0x344: 0xba, 0x345: 0xba, 0x346: 0xba, 0x347: 0xba,\n\t0x348: 0xba, 0x349: 0xba, 0x34a: 0xba, 0x34b: 0xba, 0x34c: 0xba, 0x34d: 0xba, 0x34e: 0xba, 0x34f: 0xba,\n\t0x350: 0xba, 0x351: 0xba, 0x352: 0xba, 0x353: 0xba, 0x354: 0xba, 0x355: 0xba, 0x356: 0xba, 0x357: 0xba,\n\t0x358: 0xba, 0x359: 0xba, 0x35a: 0xba, 0x35b: 0xba, 0x35c: 0xba, 0x35d: 0xba, 0x35e: 0xba, 0x35f: 0xba,\n\t0x360: 0xba, 0x361: 0xba, 0x362: 0xba, 0x363: 0xba, 0x364: 0xba, 0x365: 0xba, 0x366: 0xba, 0x367: 0xba,\n\t0x368: 0xba, 0x369: 0xba, 0x36a: 0xba, 0x36b: 0xba, 0x36c: 0xba, 0x36d: 0xba, 0x36e: 0xba, 0x36f: 0xba,\n\t0x370: 0xba, 0x371: 0xba, 0x372: 0xba, 0x373: 0xba, 0x374: 0xba, 0x375: 0xba, 0x376: 0xba, 0x377: 0xba,\n\t0x378: 0xba, 0x379: 0xba, 0x37a: 0xba, 0x37b: 0xba, 0x37c: 0xba, 0x37d: 0xba, 0x37e: 0xba, 0x37f: 0xba,\n\t// Block 0xe, offset 0x380\n\t0x380: 0xba, 0x381: 0xba, 0x382: 0xba, 0x383: 0xba, 0x384: 0xba, 0x385: 0xba, 0x386: 0xba, 0x387: 0xba,\n\t0x388: 0xba, 0x389: 0xba, 0x38a: 0xba, 0x38b: 0xba, 0x38c: 0xba, 0x38d: 0xba, 0x38e: 0xba, 0x38f: 0xba,\n\t0x390: 0xba, 0x391: 0xba, 0x392: 0xba, 0x393: 0xba, 0x394: 0xba, 0x395: 0xba, 0x396: 0xba, 0x397: 0xba,\n\t0x398: 0xba, 0x399: 0xba, 0x39a: 0xba, 0x39b: 0xba, 0x39c: 0xba, 0x39d: 0xba, 0x39e: 0xba, 0x39f: 0xba,\n\t0x3a0: 0xba, 0x3a1: 0xba, 0x3a2: 0xba, 0x3a3: 0xba, 0x3a4: 0xfc, 0x3a5: 0xfd, 0x3a6: 0xfe, 0x3a7: 0xff,\n\t0x3a8: 0x46, 0x3a9: 0x100, 0x3aa: 0x101, 0x3ab: 0x47, 0x3ac: 0x48, 0x3ad: 0x49, 0x3ae: 0x4a, 0x3af: 0x4b,\n\t0x3b0: 0x102, 0x3b1: 0x4c, 0x3b2: 0x4d, 0x3b3: 0x4e, 0x3b4: 0x4f, 0x3b5: 0x50, 0x3b6: 0x103, 0x3b7: 0x51,\n\t0x3b8: 0x52, 0x3b9: 0x53, 0x3ba: 0x54, 0x3bb: 0x55, 0x3bc: 0x56, 0x3bd: 0x57, 0x3be: 0x58, 0x3bf: 0x59,\n\t// Block 0xf, offset 0x3c0\n\t0x3c0: 0x104, 0x3c1: 0x105, 0x3c2: 0x9f, 0x3c3: 0x106, 0x3c4: 0x107, 0x3c5: 0x9b, 0x3c6: 0x108, 0x3c7: 0x109,\n\t0x3c8: 0xba, 0x3c9: 0xba, 0x3ca: 0x10a, 0x3cb: 0x10b, 0x3cc: 0x10c, 0x3cd: 0x10d, 0x3ce: 0x10e, 0x3cf: 0x10f,\n\t0x3d0: 0x110, 0x3d1: 0x9f, 0x3d2: 0x111, 0x3d3: 0x112, 0x3d4: 0x113, 0x3d5: 0x114, 0x3d6: 0xba, 0x3d7: 0xba,\n\t0x3d8: 0x9f, 0x3d9: 0x9f, 0x3da: 0x9f, 0x3db: 0x9f, 0x3dc: 0x115, 0x3dd: 0x116, 0x3de: 0xba, 0x3df: 0xba,\n\t0x3e0: 0x117, 0x3e1: 0x118, 0x3e2: 0x119, 0x3e3: 0x11a, 0x3e4: 0x11b, 0x3e5: 0xba, 0x3e6: 0x11c, 0x3e7: 0x11d,\n\t0x3e8: 0x11e, 0x3e9: 0x11f, 0x3ea: 0x120, 0x3eb: 0x5a, 0x3ec: 0x121, 0x3ed: 0x122, 0x3ee: 0x5b, 0x3ef: 0xba,\n\t0x3f0: 0x123, 0x3f1: 0x124, 0x3f2: 0x125, 0x3f3: 0x126, 0x3f4: 0xba, 0x3f5: 0xba, 0x3f6: 0xba, 0x3f7: 0xba,\n\t0x3f8: 0xba, 0x3f9: 0x127, 0x3fa: 0xba, 0x3fb: 0xba, 0x3fc: 0xba, 0x3fd: 0xba, 0x3fe: 0xba, 0x3ff: 0xba,\n\t// Block 0x10, offset 0x400\n\t0x400: 0x128, 0x401: 0x129, 0x402: 0x12a, 0x403: 0x12b, 0x404: 0x12c, 0x405: 0x12d, 0x406: 0x12e, 0x407: 0x12f,\n\t0x408: 0x130, 0x409: 0xba, 0x40a: 0x131, 0x40b: 0x132, 0x40c: 0x5c, 0x40d: 0x5d, 0x40e: 0xba, 0x40f: 0xba,\n\t0x410: 0x133, 0x411: 0x134, 0x412: 0x135, 0x413: 0x136, 0x414: 0xba, 0x415: 0xba, 0x416: 0x137, 0x417: 0x138,\n\t0x418: 0x139, 0x419: 0x13a, 0x41a: 0x13b, 0x41b: 0x13c, 0x41c: 0x13d, 0x41d: 0xba, 0x41e: 0xba, 0x41f: 0xba,\n\t0x420: 0xba, 0x421: 0xba, 0x422: 0x13e, 0x423: 0x13f, 0x424: 0xba, 0x425: 0xba, 0x426: 0xba, 0x427: 0xba,\n\t0x428: 0xba, 0x429: 0xba, 0x42a: 0xba, 0x42b: 0x140, 0x42c: 0xba, 0x42d: 0xba, 0x42e: 0xba, 0x42f: 0xba,\n\t0x430: 0x141, 0x431: 0x142, 0x432: 0x143, 0x433: 0xba, 0x434: 0xba, 0x435: 0xba, 0x436: 0xba, 0x437: 0xba,\n\t0x438: 0xba, 0x439: 0xba, 0x43a: 0xba, 0x43b: 0xba, 0x43c: 0xba, 0x43d: 0xba, 0x43e: 0xba, 0x43f: 0xba,\n\t// Block 0x11, offset 0x440\n\t0x440: 0x9f, 0x441: 0x9f, 0x442: 0x9f, 0x443: 0x9f, 0x444: 0x9f, 0x445: 0x9f, 0x446: 0x9f, 0x447: 0x9f,\n\t0x448: 0x9f, 0x449: 0x9f, 0x44a: 0x9f, 0x44b: 0x9f, 0x44c: 0x9f, 0x44d: 0x9f, 0x44e: 0x144, 0x44f: 0xba,\n\t0x450: 0x9b, 0x451: 0x145, 0x452: 0x9f, 0x453: 0x9f, 0x454: 0x9f, 0x455: 0x146, 0x456: 0xba, 0x457: 0xba,\n\t0x458: 0xba, 0x459: 0xba, 0x45a: 0xba, 0x45b: 0xba, 0x45c: 0xba, 0x45d: 0xba, 0x45e: 0xba, 0x45f: 0xba,\n\t0x460: 0xba, 0x461: 0xba, 0x462: 0xba, 0x463: 0xba, 0x464: 0xba, 0x465: 0xba, 0x466: 0xba, 0x467: 0xba,\n\t0x468: 0xba, 0x469: 0xba, 0x46a: 0xba, 0x46b: 0xba, 0x46c: 0xba, 0x46d: 0xba, 0x46e: 0xba, 0x46f: 0xba,\n\t0x470: 0xba, 0x471: 0xba, 0x472: 0xba, 0x473: 0xba, 0x474: 0xba, 0x475: 0xba, 0x476: 0xba, 0x477: 0xba,\n\t0x478: 0xba, 0x479: 0xba, 0x47a: 0xba, 0x47b: 0xba, 0x47c: 0xba, 0x47d: 0xba, 0x47e: 0xba, 0x47f: 0xba,\n\t// Block 0x12, offset 0x480\n\t0x480: 0x9f, 0x481: 0x9f, 0x482: 0x9f, 0x483: 0x9f, 0x484: 0x9f, 0x485: 0x9f, 0x486: 0x9f, 0x487: 0x9f,\n\t0x488: 0x9f, 0x489: 0x9f, 0x48a: 0x9f, 0x48b: 0x9f, 0x48c: 0x9f, 0x48d: 0x9f, 0x48e: 0x9f, 0x48f: 0x9f,\n\t0x490: 0x147, 0x491: 0xba, 0x492: 0xba, 0x493: 0xba, 0x494: 0xba, 0x495: 0xba, 0x496: 0xba, 0x497: 0xba,\n\t0x498: 0xba, 0x499: 0xba, 0x49a: 0xba, 0x49b: 0xba, 0x49c: 0xba, 0x49d: 0xba, 0x49e: 0xba, 0x49f: 0xba,\n\t0x4a0: 0xba, 0x4a1: 0xba, 0x4a2: 0xba, 0x4a3: 0xba, 0x4a4: 0xba, 0x4a5: 0xba, 0x4a6: 0xba, 0x4a7: 0xba,\n\t0x4a8: 0xba, 0x4a9: 0xba, 0x4aa: 0xba, 0x4ab: 0xba, 0x4ac: 0xba, 0x4ad: 0xba, 0x4ae: 0xba, 0x4af: 0xba,\n\t0x4b0: 0xba, 0x4b1: 0xba, 0x4b2: 0xba, 0x4b3: 0xba, 0x4b4: 0xba, 0x4b5: 0xba, 0x4b6: 0xba, 0x4b7: 0xba,\n\t0x4b8: 0xba, 0x4b9: 0xba, 0x4ba: 0xba, 0x4bb: 0xba, 0x4bc: 0xba, 0x4bd: 0xba, 0x4be: 0xba, 0x4bf: 0xba,\n\t// Block 0x13, offset 0x4c0\n\t0x4c0: 0xba, 0x4c1: 0xba, 0x4c2: 0xba, 0x4c3: 0xba, 0x4c4: 0xba, 0x4c5: 0xba, 0x4c6: 0xba, 0x4c7: 0xba,\n\t0x4c8: 0xba, 0x4c9: 0xba, 0x4ca: 0xba, 0x4cb: 0xba, 0x4cc: 0xba, 0x4cd: 0xba, 0x4ce: 0xba, 0x4cf: 0xba,\n\t0x4d0: 0x9f, 0x4d1: 0x9f, 0x4d2: 0x9f, 0x4d3: 0x9f, 0x4d4: 0x9f, 0x4d5: 0x9f, 0x4d6: 0x9f, 0x4d7: 0x9f,\n\t0x4d8: 0x9f, 0x4d9: 0x148, 0x4da: 0xba, 0x4db: 0xba, 0x4dc: 0xba, 0x4dd: 0xba, 0x4de: 0xba, 0x4df: 0xba,\n\t0x4e0: 0xba, 0x4e1: 0xba, 0x4e2: 0xba, 0x4e3: 0xba, 0x4e4: 0xba, 0x4e5: 0xba, 0x4e6: 0xba, 0x4e7: 0xba,\n\t0x4e8: 0xba, 0x4e9: 0xba, 0x4ea: 0xba, 0x4eb: 0xba, 0x4ec: 0xba, 0x4ed: 0xba, 0x4ee: 0xba, 0x4ef: 0xba,\n\t0x4f0: 0xba, 0x4f1: 0xba, 0x4f2: 0xba, 0x4f3: 0xba, 0x4f4: 0xba, 0x4f5: 0xba, 0x4f6: 0xba, 0x4f7: 0xba,\n\t0x4f8: 0xba, 0x4f9: 0xba, 0x4fa: 0xba, 0x4fb: 0xba, 0x4fc: 0xba, 0x4fd: 0xba, 0x4fe: 0xba, 0x4ff: 0xba,\n\t// Block 0x14, offset 0x500\n\t0x500: 0xba, 0x501: 0xba, 0x502: 0xba, 0x503: 0xba, 0x504: 0xba, 0x505: 0xba, 0x506: 0xba, 0x507: 0xba,\n\t0x508: 0xba, 0x509: 0xba, 0x50a: 0xba, 0x50b: 0xba, 0x50c: 0xba, 0x50d: 0xba, 0x50e: 0xba, 0x50f: 0xba,\n\t0x510: 0xba, 0x511: 0xba, 0x512: 0xba, 0x513: 0xba, 0x514: 0xba, 0x515: 0xba, 0x516: 0xba, 0x517: 0xba,\n\t0x518: 0xba, 0x519: 0xba, 0x51a: 0xba, 0x51b: 0xba, 0x51c: 0xba, 0x51d: 0xba, 0x51e: 0xba, 0x51f: 0xba,\n\t0x520: 0x9f, 0x521: 0x9f, 0x522: 0x9f, 0x523: 0x9f, 0x524: 0x9f, 0x525: 0x9f, 0x526: 0x9f, 0x527: 0x9f,\n\t0x528: 0x140, 0x529: 0x149, 0x52a: 0xba, 0x52b: 0x14a, 0x52c: 0x14b, 0x52d: 0x14c, 0x52e: 0x14d, 0x52f: 0xba,\n\t0x530: 0xba, 0x531: 0xba, 0x532: 0xba, 0x533: 0xba, 0x534: 0xba, 0x535: 0xba, 0x536: 0xba, 0x537: 0xba,\n\t0x538: 0xba, 0x539: 0xba, 0x53a: 0xba, 0x53b: 0xba, 0x53c: 0x9f, 0x53d: 0x14e, 0x53e: 0x14f, 0x53f: 0x150,\n\t// Block 0x15, offset 0x540\n\t0x540: 0x9f, 0x541: 0x9f, 0x542: 0x9f, 0x543: 0x9f, 0x544: 0x9f, 0x545: 0x9f, 0x546: 0x9f, 0x547: 0x9f,\n\t0x548: 0x9f, 0x549: 0x9f, 0x54a: 0x9f, 0x54b: 0x9f, 0x54c: 0x9f, 0x54d: 0x9f, 0x54e: 0x9f, 0x54f: 0x9f,\n\t0x550: 0x9f, 0x551: 0x9f, 0x552: 0x9f, 0x553: 0x9f, 0x554: 0x9f, 0x555: 0x9f, 0x556: 0x9f, 0x557: 0x9f,\n\t0x558: 0x9f, 0x559: 0x9f, 0x55a: 0x9f, 0x55b: 0x9f, 0x55c: 0x9f, 0x55d: 0x9f, 0x55e: 0x9f, 0x55f: 0x151,\n\t0x560: 0x9f, 0x561: 0x9f, 0x562: 0x9f, 0x563: 0x9f, 0x564: 0x9f, 0x565: 0x9f, 0x566: 0x9f, 0x567: 0x9f,\n\t0x568: 0x9f, 0x569: 0x9f, 0x56a: 0x9f, 0x56b: 0x152, 0x56c: 0xba, 0x56d: 0xba, 0x56e: 0xba, 0x56f: 0xba,\n\t0x570: 0xba, 0x571: 0xba, 0x572: 0xba, 0x573: 0xba, 0x574: 0xba, 0x575: 0xba, 0x576: 0xba, 0x577: 0xba,\n\t0x578: 0xba, 0x579: 0xba, 0x57a: 0xba, 0x57b: 0xba, 0x57c: 0xba, 0x57d: 0xba, 0x57e: 0xba, 0x57f: 0xba,\n\t// Block 0x16, offset 0x580\n\t0x580: 0x153, 0x581: 0xba, 0x582: 0xba, 0x583: 0xba, 0x584: 0xba, 0x585: 0xba, 0x586: 0xba, 0x587: 0xba,\n\t0x588: 0xba, 0x589: 0xba, 0x58a: 0xba, 0x58b: 0xba, 0x58c: 0xba, 0x58d: 0xba, 0x58e: 0xba, 0x58f: 0xba,\n\t0x590: 0xba, 0x591: 0xba, 0x592: 0xba, 0x593: 0xba, 0x594: 0xba, 0x595: 0xba, 0x596: 0xba, 0x597: 0xba,\n\t0x598: 0xba, 0x599: 0xba, 0x59a: 0xba, 0x59b: 0xba, 0x59c: 0xba, 0x59d: 0xba, 0x59e: 0xba, 0x59f: 0xba,\n\t0x5a0: 0xba, 0x5a1: 0xba, 0x5a2: 0xba, 0x5a3: 0xba, 0x5a4: 0xba, 0x5a5: 0xba, 0x5a6: 0xba, 0x5a7: 0xba,\n\t0x5a8: 0xba, 0x5a9: 0xba, 0x5aa: 0xba, 0x5ab: 0xba, 0x5ac: 0xba, 0x5ad: 0xba, 0x5ae: 0xba, 0x5af: 0xba,\n\t0x5b0: 0x9f, 0x5b1: 0x154, 0x5b2: 0x155, 0x5b3: 0xba, 0x5b4: 0xba, 0x5b5: 0xba, 0x5b6: 0xba, 0x5b7: 0xba,\n\t0x5b8: 0xba, 0x5b9: 0xba, 0x5ba: 0xba, 0x5bb: 0xba, 0x5bc: 0xba, 0x5bd: 0xba, 0x5be: 0xba, 0x5bf: 0xba,\n\t// Block 0x17, offset 0x5c0\n\t0x5c0: 0x9b, 0x5c1: 0x9b, 0x5c2: 0x9b, 0x5c3: 0x156, 0x5c4: 0x157, 0x5c5: 0x158, 0x5c6: 0x159, 0x5c7: 0x15a,\n\t0x5c8: 0x9b, 0x5c9: 0x15b, 0x5ca: 0xba, 0x5cb: 0xba, 0x5cc: 0x9b, 0x5cd: 0x15c, 0x5ce: 0xba, 0x5cf: 0xba,\n\t0x5d0: 0x5e, 0x5d1: 0x5f, 0x5d2: 0x60, 0x5d3: 0x61, 0x5d4: 0x62, 0x5d5: 0x63, 0x5d6: 0x64, 0x5d7: 0x65,\n\t0x5d8: 0x66, 0x5d9: 0x67, 0x5da: 0x68, 0x5db: 0x69, 0x5dc: 0x6a, 0x5dd: 0x6b, 0x5de: 0x6c, 0x5df: 0x6d,\n\t0x5e0: 0x9b, 0x5e1: 0x9b, 0x5e2: 0x9b, 0x5e3: 0x9b, 0x5e4: 0x9b, 0x5e5: 0x9b, 0x5e6: 0x9b, 0x5e7: 0x9b,\n\t0x5e8: 0x15d, 0x5e9: 0x15e, 0x5ea: 0x15f, 0x5eb: 0xba, 0x5ec: 0xba, 0x5ed: 0xba, 0x5ee: 0xba, 0x5ef: 0xba,\n\t0x5f0: 0xba, 0x5f1: 0xba, 0x5f2: 0xba, 0x5f3: 0xba, 0x5f4: 0xba, 0x5f5: 0xba, 0x5f6: 0xba, 0x5f7: 0xba,\n\t0x5f8: 0xba, 0x5f9: 0xba, 0x5fa: 0xba, 0x5fb: 0xba, 0x5fc: 0xba, 0x5fd: 0xba, 0x5fe: 0xba, 0x5ff: 0xba,\n\t// Block 0x18, offset 0x600\n\t0x600: 0x160, 0x601: 0xba, 0x602: 0xba, 0x603: 0xba, 0x604: 0xba, 0x605: 0xba, 0x606: 0xba, 0x607: 0xba,\n\t0x608: 0xba, 0x609: 0xba, 0x60a: 0xba, 0x60b: 0xba, 0x60c: 0xba, 0x60d: 0xba, 0x60e: 0xba, 0x60f: 0xba,\n\t0x610: 0xba, 0x611: 0xba, 0x612: 0xba, 0x613: 0xba, 0x614: 0xba, 0x615: 0xba, 0x616: 0xba, 0x617: 0xba,\n\t0x618: 0xba, 0x619: 0xba, 0x61a: 0xba, 0x61b: 0xba, 0x61c: 0xba, 0x61d: 0xba, 0x61e: 0xba, 0x61f: 0xba,\n\t0x620: 0x123, 0x621: 0x123, 0x622: 0x123, 0x623: 0x161, 0x624: 0x6e, 0x625: 0x162, 0x626: 0xba, 0x627: 0xba,\n\t0x628: 0xba, 0x629: 0xba, 0x62a: 0xba, 0x62b: 0xba, 0x62c: 0xba, 0x62d: 0xba, 0x62e: 0xba, 0x62f: 0xba,\n\t0x630: 0xba, 0x631: 0xba, 0x632: 0xba, 0x633: 0xba, 0x634: 0xba, 0x635: 0xba, 0x636: 0xba, 0x637: 0xba,\n\t0x638: 0x6f, 0x639: 0x70, 0x63a: 0x71, 0x63b: 0x163, 0x63c: 0xba, 0x63d: 0xba, 0x63e: 0xba, 0x63f: 0xba,\n\t// Block 0x19, offset 0x640\n\t0x640: 0x164, 0x641: 0x9b, 0x642: 0x165, 0x643: 0x166, 0x644: 0x72, 0x645: 0x73, 0x646: 0x167, 0x647: 0x168,\n\t0x648: 0x74, 0x649: 0x169, 0x64a: 0xba, 0x64b: 0xba, 0x64c: 0x9b, 0x64d: 0x9b, 0x64e: 0x9b, 0x64f: 0x9b,\n\t0x650: 0x9b, 0x651: 0x9b, 0x652: 0x9b, 0x653: 0x9b, 0x654: 0x9b, 0x655: 0x9b, 0x656: 0x9b, 0x657: 0x9b,\n\t0x658: 0x9b, 0x659: 0x9b, 0x65a: 0x9b, 0x65b: 0x16a, 0x65c: 0x9b, 0x65d: 0x16b, 0x65e: 0x9b, 0x65f: 0x16c,\n\t0x660: 0x16d, 0x661: 0x16e, 0x662: 0x16f, 0x663: 0xba, 0x664: 0x170, 0x665: 0x171, 0x666: 0x172, 0x667: 0x173,\n\t0x668: 0xba, 0x669: 0xba, 0x66a: 0xba, 0x66b: 0xba, 0x66c: 0xba, 0x66d: 0xba, 0x66e: 0xba, 0x66f: 0xba,\n\t0x670: 0xba, 0x671: 0xba, 0x672: 0xba, 0x673: 0xba, 0x674: 0xba, 0x675: 0xba, 0x676: 0xba, 0x677: 0xba,\n\t0x678: 0xba, 0x679: 0xba, 0x67a: 0xba, 0x67b: 0xba, 0x67c: 0xba, 0x67d: 0xba, 0x67e: 0xba, 0x67f: 0xba,\n\t// Block 0x1a, offset 0x680\n\t0x680: 0x9f, 0x681: 0x9f, 0x682: 0x9f, 0x683: 0x9f, 0x684: 0x9f, 0x685: 0x9f, 0x686: 0x9f, 0x687: 0x9f,\n\t0x688: 0x9f, 0x689: 0x9f, 0x68a: 0x9f, 0x68b: 0x9f, 0x68c: 0x9f, 0x68d: 0x9f, 0x68e: 0x9f, 0x68f: 0x9f,\n\t0x690: 0x9f, 0x691: 0x9f, 0x692: 0x9f, 0x693: 0x9f, 0x694: 0x9f, 0x695: 0x9f, 0x696: 0x9f, 0x697: 0x9f,\n\t0x698: 0x9f, 0x699: 0x9f, 0x69a: 0x9f, 0x69b: 0x174, 0x69c: 0x9f, 0x69d: 0x9f, 0x69e: 0x9f, 0x69f: 0x9f,\n\t0x6a0: 0x9f, 0x6a1: 0x9f, 0x6a2: 0x9f, 0x6a3: 0x9f, 0x6a4: 0x9f, 0x6a5: 0x9f, 0x6a6: 0x9f, 0x6a7: 0x9f,\n\t0x6a8: 0x9f, 0x6a9: 0x9f, 0x6aa: 0x9f, 0x6ab: 0x9f, 0x6ac: 0x9f, 0x6ad: 0x9f, 0x6ae: 0x9f, 0x6af: 0x9f,\n\t0x6b0: 0x9f, 0x6b1: 0x9f, 0x6b2: 0x9f, 0x6b3: 0x9f, 0x6b4: 0x9f, 0x6b5: 0x9f, 0x6b6: 0x9f, 0x6b7: 0x9f,\n\t0x6b8: 0x9f, 0x6b9: 0x9f, 0x6ba: 0x9f, 0x6bb: 0x9f, 0x6bc: 0x9f, 0x6bd: 0x9f, 0x6be: 0x9f, 0x6bf: 0x9f,\n\t// Block 0x1b, offset 0x6c0\n\t0x6c0: 0x9f, 0x6c1: 0x9f, 0x6c2: 0x9f, 0x6c3: 0x9f, 0x6c4: 0x9f, 0x6c5: 0x9f, 0x6c6: 0x9f, 0x6c7: 0x9f,\n\t0x6c8: 0x9f, 0x6c9: 0x9f, 0x6ca: 0x9f, 0x6cb: 0x9f, 0x6cc: 0x9f, 0x6cd: 0x9f, 0x6ce: 0x9f, 0x6cf: 0x9f,\n\t0x6d0: 0x9f, 0x6d1: 0x9f, 0x6d2: 0x9f, 0x6d3: 0x9f, 0x6d4: 0x9f, 0x6d5: 0x9f, 0x6d6: 0x9f, 0x6d7: 0x9f,\n\t0x6d8: 0x9f, 0x6d9: 0x9f, 0x6da: 0x9f, 0x6db: 0x9f, 0x6dc: 0x175, 0x6dd: 0x9f, 0x6de: 0x9f, 0x6df: 0x9f,\n\t0x6e0: 0x176, 0x6e1: 0x9f, 0x6e2: 0x9f, 0x6e3: 0x9f, 0x6e4: 0x9f, 0x6e5: 0x9f, 0x6e6: 0x9f, 0x6e7: 0x9f,\n\t0x6e8: 0x9f, 0x6e9: 0x9f, 0x6ea: 0x9f, 0x6eb: 0x9f, 0x6ec: 0x9f, 0x6ed: 0x9f, 0x6ee: 0x9f, 0x6ef: 0x9f,\n\t0x6f0: 0x9f, 0x6f1: 0x9f, 0x6f2: 0x9f, 0x6f3: 0x9f, 0x6f4: 0x9f, 0x6f5: 0x9f, 0x6f6: 0x9f, 0x6f7: 0x9f,\n\t0x6f8: 0x9f, 0x6f9: 0x9f, 0x6fa: 0x9f, 0x6fb: 0x9f, 0x6fc: 0x9f, 0x6fd: 0x9f, 0x6fe: 0x9f, 0x6ff: 0x9f,\n\t// Block 0x1c, offset 0x700\n\t0x700: 0x9f, 0x701: 0x9f, 0x702: 0x9f, 0x703: 0x9f, 0x704: 0x9f, 0x705: 0x9f, 0x706: 0x9f, 0x707: 0x9f,\n\t0x708: 0x9f, 0x709: 0x9f, 0x70a: 0x9f, 0x70b: 0x9f, 0x70c: 0x9f, 0x70d: 0x9f, 0x70e: 0x9f, 0x70f: 0x9f,\n\t0x710: 0x9f, 0x711: 0x9f, 0x712: 0x9f, 0x713: 0x9f, 0x714: 0x9f, 0x715: 0x9f, 0x716: 0x9f, 0x717: 0x9f,\n\t0x718: 0x9f, 0x719: 0x9f, 0x71a: 0x9f, 0x71b: 0x9f, 0x71c: 0x9f, 0x71d: 0x9f, 0x71e: 0x9f, 0x71f: 0x9f,\n\t0x720: 0x9f, 0x721: 0x9f, 0x722: 0x9f, 0x723: 0x9f, 0x724: 0x9f, 0x725: 0x9f, 0x726: 0x9f, 0x727: 0x9f,\n\t0x728: 0x9f, 0x729: 0x9f, 0x72a: 0x9f, 0x72b: 0x9f, 0x72c: 0x9f, 0x72d: 0x9f, 0x72e: 0x9f, 0x72f: 0x9f,\n\t0x730: 0x9f, 0x731: 0x9f, 0x732: 0x9f, 0x733: 0x9f, 0x734: 0x9f, 0x735: 0x9f, 0x736: 0x9f, 0x737: 0x9f,\n\t0x738: 0x9f, 0x739: 0x9f, 0x73a: 0x177, 0x73b: 0xba, 0x73c: 0xba, 0x73d: 0xba, 0x73e: 0xba, 0x73f: 0xba,\n\t// Block 0x1d, offset 0x740\n\t0x740: 0xba, 0x741: 0xba, 0x742: 0xba, 0x743: 0xba, 0x744: 0xba, 0x745: 0xba, 0x746: 0xba, 0x747: 0xba,\n\t0x748: 0xba, 0x749: 0xba, 0x74a: 0xba, 0x74b: 0xba, 0x74c: 0xba, 0x74d: 0xba, 0x74e: 0xba, 0x74f: 0xba,\n\t0x750: 0xba, 0x751: 0xba, 0x752: 0xba, 0x753: 0xba, 0x754: 0xba, 0x755: 0xba, 0x756: 0xba, 0x757: 0xba,\n\t0x758: 0xba, 0x759: 0xba, 0x75a: 0xba, 0x75b: 0xba, 0x75c: 0xba, 0x75d: 0xba, 0x75e: 0xba, 0x75f: 0xba,\n\t0x760: 0x75, 0x761: 0x76, 0x762: 0x77, 0x763: 0x178, 0x764: 0x78, 0x765: 0x79, 0x766: 0x179, 0x767: 0x7a,\n\t0x768: 0x7b, 0x769: 0xba, 0x76a: 0xba, 0x76b: 0xba, 0x76c: 0xba, 0x76d: 0xba, 0x76e: 0xba, 0x76f: 0xba,\n\t0x770: 0xba, 0x771: 0xba, 0x772: 0xba, 0x773: 0xba, 0x774: 0xba, 0x775: 0xba, 0x776: 0xba, 0x777: 0xba,\n\t0x778: 0xba, 0x779: 0xba, 0x77a: 0xba, 0x77b: 0xba, 0x77c: 0xba, 0x77d: 0xba, 0x77e: 0xba, 0x77f: 0xba,\n\t// Block 0x1e, offset 0x780\n\t0x790: 0x0d, 0x791: 0x0e, 0x792: 0x0f, 0x793: 0x10, 0x794: 0x11, 0x795: 0x0b, 0x796: 0x12, 0x797: 0x07,\n\t0x798: 0x13, 0x799: 0x0b, 0x79a: 0x0b, 0x79b: 0x14, 0x79c: 0x0b, 0x79d: 0x15, 0x79e: 0x16, 0x79f: 0x17,\n\t0x7a0: 0x07, 0x7a1: 0x07, 0x7a2: 0x07, 0x7a3: 0x07, 0x7a4: 0x07, 0x7a5: 0x07, 0x7a6: 0x07, 0x7a7: 0x07,\n\t0x7a8: 0x07, 0x7a9: 0x07, 0x7aa: 0x18, 0x7ab: 0x19, 0x7ac: 0x1a, 0x7ad: 0x0b, 0x7ae: 0x0b, 0x7af: 0x1b,\n\t0x7b0: 0x0b, 0x7b1: 0x0b, 0x7b2: 0x0b, 0x7b3: 0x0b, 0x7b4: 0x0b, 0x7b5: 0x0b, 0x7b6: 0x0b, 0x7b7: 0x0b,\n\t0x7b8: 0x0b, 0x7b9: 0x0b, 0x7ba: 0x0b, 0x7bb: 0x0b, 0x7bc: 0x0b, 0x7bd: 0x0b, 0x7be: 0x0b, 0x7bf: 0x0b,\n\t// Block 0x1f, offset 0x7c0\n\t0x7c0: 0x0b, 0x7c1: 0x0b, 0x7c2: 0x0b, 0x7c3: 0x0b, 0x7c4: 0x0b, 0x7c5: 0x0b, 0x7c6: 0x0b, 0x7c7: 0x0b,\n\t0x7c8: 0x0b, 0x7c9: 0x0b, 0x7ca: 0x0b, 0x7cb: 0x0b, 0x7cc: 0x0b, 0x7cd: 0x0b, 0x7ce: 0x0b, 0x7cf: 0x0b,\n\t0x7d0: 0x0b, 0x7d1: 0x0b, 0x7d2: 0x0b, 0x7d3: 0x0b, 0x7d4: 0x0b, 0x7d5: 0x0b, 0x7d6: 0x0b, 0x7d7: 0x0b,\n\t0x7d8: 0x0b, 0x7d9: 0x0b, 0x7da: 0x0b, 0x7db: 0x0b, 0x7dc: 0x0b, 0x7dd: 0x0b, 0x7de: 0x0b, 0x7df: 0x0b,\n\t0x7e0: 0x0b, 0x7e1: 0x0b, 0x7e2: 0x0b, 0x7e3: 0x0b, 0x7e4: 0x0b, 0x7e5: 0x0b, 0x7e6: 0x0b, 0x7e7: 0x0b,\n\t0x7e8: 0x0b, 0x7e9: 0x0b, 0x7ea: 0x0b, 0x7eb: 0x0b, 0x7ec: 0x0b, 0x7ed: 0x0b, 0x7ee: 0x0b, 0x7ef: 0x0b,\n\t0x7f0: 0x0b, 0x7f1: 0x0b, 0x7f2: 0x0b, 0x7f3: 0x0b, 0x7f4: 0x0b, 0x7f5: 0x0b, 0x7f6: 0x0b, 0x7f7: 0x0b,\n\t0x7f8: 0x0b, 0x7f9: 0x0b, 0x7fa: 0x0b, 0x7fb: 0x0b, 0x7fc: 0x0b, 0x7fd: 0x0b, 0x7fe: 0x0b, 0x7ff: 0x0b,\n\t// Block 0x20, offset 0x800\n\t0x800: 0x17a, 0x801: 0x17b, 0x802: 0xba, 0x803: 0xba, 0x804: 0x17c, 0x805: 0x17c, 0x806: 0x17c, 0x807: 0x17d,\n\t0x808: 0xba, 0x809: 0xba, 0x80a: 0xba, 0x80b: 0xba, 0x80c: 0xba, 0x80d: 0xba, 0x80e: 0xba, 0x80f: 0xba,\n\t0x810: 0xba, 0x811: 0xba, 0x812: 0xba, 0x813: 0xba, 0x814: 0xba, 0x815: 0xba, 0x816: 0xba, 0x817: 0xba,\n\t0x818: 0xba, 0x819: 0xba, 0x81a: 0xba, 0x81b: 0xba, 0x81c: 0xba, 0x81d: 0xba, 0x81e: 0xba, 0x81f: 0xba,\n\t0x820: 0xba, 0x821: 0xba, 0x822: 0xba, 0x823: 0xba, 0x824: 0xba, 0x825: 0xba, 0x826: 0xba, 0x827: 0xba,\n\t0x828: 0xba, 0x829: 0xba, 0x82a: 0xba, 0x82b: 0xba, 0x82c: 0xba, 0x82d: 0xba, 0x82e: 0xba, 0x82f: 0xba,\n\t0x830: 0xba, 0x831: 0xba, 0x832: 0xba, 0x833: 0xba, 0x834: 0xba, 0x835: 0xba, 0x836: 0xba, 0x837: 0xba,\n\t0x838: 0xba, 0x839: 0xba, 0x83a: 0xba, 0x83b: 0xba, 0x83c: 0xba, 0x83d: 0xba, 0x83e: 0xba, 0x83f: 0xba,\n\t// Block 0x21, offset 0x840\n\t0x840: 0x0b, 0x841: 0x0b, 0x842: 0x0b, 0x843: 0x0b, 0x844: 0x0b, 0x845: 0x0b, 0x846: 0x0b, 0x847: 0x0b,\n\t0x848: 0x0b, 0x849: 0x0b, 0x84a: 0x0b, 0x84b: 0x0b, 0x84c: 0x0b, 0x84d: 0x0b, 0x84e: 0x0b, 0x84f: 0x0b,\n\t0x850: 0x0b, 0x851: 0x0b, 0x852: 0x0b, 0x853: 0x0b, 0x854: 0x0b, 0x855: 0x0b, 0x856: 0x0b, 0x857: 0x0b,\n\t0x858: 0x0b, 0x859: 0x0b, 0x85a: 0x0b, 0x85b: 0x0b, 0x85c: 0x0b, 0x85d: 0x0b, 0x85e: 0x0b, 0x85f: 0x0b,\n\t0x860: 0x1e, 0x861: 0x0b, 0x862: 0x0b, 0x863: 0x0b, 0x864: 0x0b, 0x865: 0x0b, 0x866: 0x0b, 0x867: 0x0b,\n\t0x868: 0x0b, 0x869: 0x0b, 0x86a: 0x0b, 0x86b: 0x0b, 0x86c: 0x0b, 0x86d: 0x0b, 0x86e: 0x0b, 0x86f: 0x0b,\n\t0x870: 0x0b, 0x871: 0x0b, 0x872: 0x0b, 0x873: 0x0b, 0x874: 0x0b, 0x875: 0x0b, 0x876: 0x0b, 0x877: 0x0b,\n\t0x878: 0x0b, 0x879: 0x0b, 0x87a: 0x0b, 0x87b: 0x0b, 0x87c: 0x0b, 0x87d: 0x0b, 0x87e: 0x0b, 0x87f: 0x0b,\n\t// Block 0x22, offset 0x880\n\t0x880: 0x0b, 0x881: 0x0b, 0x882: 0x0b, 0x883: 0x0b, 0x884: 0x0b, 0x885: 0x0b, 0x886: 0x0b, 0x887: 0x0b,\n\t0x888: 0x0b, 0x889: 0x0b, 0x88a: 0x0b, 0x88b: 0x0b, 0x88c: 0x0b, 0x88d: 0x0b, 0x88e: 0x0b, 0x88f: 0x0b,\n}\n\n// idnaSparseOffset: 258 entries, 516 bytes\nvar idnaSparseOffset = []uint16{0x0, 0x8, 0x19, 0x25, 0x27, 0x2c, 0x34, 0x3f, 0x4b, 0x4f, 0x5e, 0x63, 0x6b, 0x77, 0x85, 0x93, 0x98, 0xa1, 0xb1, 0xbf, 0xcc, 0xd8, 0xe9, 0xf3, 0xfa, 0x107, 0x118, 0x11f, 0x12a, 0x139, 0x147, 0x151, 0x153, 0x158, 0x15b, 0x15e, 0x160, 0x16c, 0x177, 0x17f, 0x185, 0x18b, 0x190, 0x195, 0x198, 0x19c, 0x1a2, 0x1a7, 0x1b3, 0x1bd, 0x1c3, 0x1d4, 0x1de, 0x1e1, 0x1e9, 0x1ec, 0x1f9, 0x201, 0x205, 0x20c, 0x214, 0x224, 0x230, 0x232, 0x23c, 0x248, 0x254, 0x260, 0x268, 0x26d, 0x277, 0x288, 0x28c, 0x297, 0x29b, 0x2a4, 0x2ac, 0x2b2, 0x2b7, 0x2ba, 0x2bd, 0x2c1, 0x2c7, 0x2cb, 0x2cf, 0x2d5, 0x2dc, 0x2e2, 0x2ea, 0x2f1, 0x2fc, 0x306, 0x30a, 0x30d, 0x313, 0x317, 0x319, 0x31c, 0x31e, 0x321, 0x32b, 0x32e, 0x33d, 0x341, 0x346, 0x349, 0x34d, 0x352, 0x357, 0x35d, 0x363, 0x372, 0x378, 0x37c, 0x38b, 0x390, 0x398, 0x3a2, 0x3ad, 0x3b5, 0x3c6, 0x3cf, 0x3df, 0x3ec, 0x3f6, 0x3fb, 0x408, 0x40c, 0x411, 0x413, 0x417, 0x419, 0x41d, 0x426, 0x42c, 0x430, 0x440, 0x44a, 0x44f, 0x452, 0x458, 0x45f, 0x464, 0x468, 0x46e, 0x473, 0x47c, 0x481, 0x487, 0x48e, 0x495, 0x49c, 0x4a0, 0x4a5, 0x4a8, 0x4ad, 0x4b9, 0x4bf, 0x4c4, 0x4cb, 0x4d3, 0x4d8, 0x4dc, 0x4ec, 0x4f3, 0x4f7, 0x4fb, 0x502, 0x504, 0x507, 0x50a, 0x50e, 0x512, 0x518, 0x521, 0x52d, 0x534, 0x53d, 0x545, 0x54c, 0x55a, 0x567, 0x574, 0x57d, 0x581, 0x58f, 0x597, 0x5a2, 0x5ab, 0x5b1, 0x5b9, 0x5c2, 0x5cc, 0x5cf, 0x5db, 0x5de, 0x5e3, 0x5e6, 0x5f0, 0x5f9, 0x605, 0x608, 0x60d, 0x610, 0x613, 0x616, 0x61d, 0x624, 0x628, 0x633, 0x636, 0x63c, 0x641, 0x645, 0x648, 0x64b, 0x64e, 0x653, 0x65d, 0x660, 0x664, 0x673, 0x67f, 0x683, 0x688, 0x68d, 0x691, 0x696, 0x69f, 0x6aa, 0x6b0, 0x6b8, 0x6bc, 0x6c0, 0x6c6, 0x6cc, 0x6d1, 0x6d4, 0x6e2, 0x6e9, 0x6ec, 0x6ef, 0x6f3, 0x6f9, 0x6fe, 0x708, 0x70d, 0x710, 0x713, 0x716, 0x719, 0x71d, 0x720, 0x730, 0x741, 0x746, 0x748, 0x74a}\n\n// idnaSparseValues: 1869 entries, 7476 bytes\nvar idnaSparseValues = [1869]valueRange{\n\t// Block 0x0, offset 0x0\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0xe105, lo: 0x80, hi: 0x96},\n\t{value: 0x0018, lo: 0x97, hi: 0x97},\n\t{value: 0xe105, lo: 0x98, hi: 0x9e},\n\t{value: 0x001f, lo: 0x9f, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xb6},\n\t{value: 0x0018, lo: 0xb7, hi: 0xb7},\n\t{value: 0x0008, lo: 0xb8, hi: 0xbf},\n\t// Block 0x1, offset 0x8\n\t{value: 0x0000, lo: 0x10},\n\t{value: 0x0008, lo: 0x80, hi: 0x80},\n\t{value: 0xe01d, lo: 0x81, hi: 0x81},\n\t{value: 0x0008, lo: 0x82, hi: 0x82},\n\t{value: 0x0335, lo: 0x83, hi: 0x83},\n\t{value: 0x034d, lo: 0x84, hi: 0x84},\n\t{value: 0x0365, lo: 0x85, hi: 0x85},\n\t{value: 0xe00d, lo: 0x86, hi: 0x86},\n\t{value: 0x0008, lo: 0x87, hi: 0x87},\n\t{value: 0xe00d, lo: 0x88, hi: 0x88},\n\t{value: 0x0008, lo: 0x89, hi: 0x89},\n\t{value: 0xe00d, lo: 0x8a, hi: 0x8a},\n\t{value: 0x0008, lo: 0x8b, hi: 0x8b},\n\t{value: 0xe00d, lo: 0x8c, hi: 0x8c},\n\t{value: 0x0008, lo: 0x8d, hi: 0x8d},\n\t{value: 0xe00d, lo: 0x8e, hi: 0x8e},\n\t{value: 0x0008, lo: 0x8f, hi: 0xbf},\n\t// Block 0x2, offset 0x19\n\t{value: 0x0000, lo: 0x0b},\n\t{value: 0x0008, lo: 0x80, hi: 0xaf},\n\t{value: 0x0249, lo: 0xb0, hi: 0xb0},\n\t{value: 0x037d, lo: 0xb1, hi: 0xb1},\n\t{value: 0x0259, lo: 0xb2, hi: 0xb2},\n\t{value: 0x0269, lo: 0xb3, hi: 0xb3},\n\t{value: 0x034d, lo: 0xb4, hi: 0xb4},\n\t{value: 0x0395, lo: 0xb5, hi: 0xb5},\n\t{value: 0xe1bd, lo: 0xb6, hi: 0xb6},\n\t{value: 0x0279, lo: 0xb7, hi: 0xb7},\n\t{value: 0x0289, lo: 0xb8, hi: 0xb8},\n\t{value: 0x0008, lo: 0xb9, hi: 0xbf},\n\t// Block 0x3, offset 0x25\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x3308, lo: 0x80, hi: 0xbf},\n\t// Block 0x4, offset 0x27\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x03f5, lo: 0x80, hi: 0x8f},\n\t{value: 0xe105, lo: 0x90, hi: 0x9f},\n\t{value: 0x049d, lo: 0xa0, hi: 0xaf},\n\t{value: 0x0008, lo: 0xb0, hi: 0xbf},\n\t// Block 0x5, offset 0x2c\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0xe185, lo: 0x80, hi: 0x8f},\n\t{value: 0x0545, lo: 0x90, hi: 0x96},\n\t{value: 0x0040, lo: 0x97, hi: 0x98},\n\t{value: 0x0008, lo: 0x99, hi: 0x99},\n\t{value: 0x0018, lo: 0x9a, hi: 0x9f},\n\t{value: 0x0040, lo: 0xa0, hi: 0xa0},\n\t{value: 0x0008, lo: 0xa1, hi: 0xbf},\n\t// Block 0x6, offset 0x34\n\t{value: 0x0000, lo: 0x0a},\n\t{value: 0x0008, lo: 0x80, hi: 0x86},\n\t{value: 0x0401, lo: 0x87, hi: 0x87},\n\t{value: 0x0040, lo: 0x88, hi: 0x88},\n\t{value: 0x0018, lo: 0x89, hi: 0x8a},\n\t{value: 0x0040, lo: 0x8b, hi: 0x8c},\n\t{value: 0x0018, lo: 0x8d, hi: 0x8f},\n\t{value: 0x0040, lo: 0x90, hi: 0x90},\n\t{value: 0x3308, lo: 0x91, hi: 0xbd},\n\t{value: 0x0818, lo: 0xbe, hi: 0xbe},\n\t{value: 0x3308, lo: 0xbf, hi: 0xbf},\n\t// Block 0x7, offset 0x3f\n\t{value: 0x0000, lo: 0x0b},\n\t{value: 0x0818, lo: 0x80, hi: 0x80},\n\t{value: 0x3308, lo: 0x81, hi: 0x82},\n\t{value: 0x0818, lo: 0x83, hi: 0x83},\n\t{value: 0x3308, lo: 0x84, hi: 0x85},\n\t{value: 0x0818, lo: 0x86, hi: 0x86},\n\t{value: 0x3308, lo: 0x87, hi: 0x87},\n\t{value: 0x0040, lo: 0x88, hi: 0x8f},\n\t{value: 0x0808, lo: 0x90, hi: 0xaa},\n\t{value: 0x0040, lo: 0xab, hi: 0xaf},\n\t{value: 0x0808, lo: 0xb0, hi: 0xb4},\n\t{value: 0x0040, lo: 0xb5, hi: 0xbf},\n\t// Block 0x8, offset 0x4b\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0a08, lo: 0x80, hi: 0x87},\n\t{value: 0x0c08, lo: 0x88, hi: 0x99},\n\t{value: 0x0a08, lo: 0x9a, hi: 0xbf},\n\t// Block 0x9, offset 0x4f\n\t{value: 0x0000, lo: 0x0e},\n\t{value: 0x3308, lo: 0x80, hi: 0x8a},\n\t{value: 0x0040, lo: 0x8b, hi: 0x8c},\n\t{value: 0x0c08, lo: 0x8d, hi: 0x8d},\n\t{value: 0x0a08, lo: 0x8e, hi: 0x98},\n\t{value: 0x0c08, lo: 0x99, hi: 0x9b},\n\t{value: 0x0a08, lo: 0x9c, hi: 0xaa},\n\t{value: 0x0c08, lo: 0xab, hi: 0xac},\n\t{value: 0x0a08, lo: 0xad, hi: 0xb0},\n\t{value: 0x0c08, lo: 0xb1, hi: 0xb1},\n\t{value: 0x0a08, lo: 0xb2, hi: 0xb2},\n\t{value: 0x0c08, lo: 0xb3, hi: 0xb4},\n\t{value: 0x0a08, lo: 0xb5, hi: 0xb7},\n\t{value: 0x0c08, lo: 0xb8, hi: 0xb9},\n\t{value: 0x0a08, lo: 0xba, hi: 0xbf},\n\t// Block 0xa, offset 0x5e\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0808, lo: 0x80, hi: 0xa5},\n\t{value: 0x3308, lo: 0xa6, hi: 0xb0},\n\t{value: 0x0808, lo: 0xb1, hi: 0xb1},\n\t{value: 0x0040, lo: 0xb2, hi: 0xbf},\n\t// Block 0xb, offset 0x63\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0x0808, lo: 0x80, hi: 0x89},\n\t{value: 0x0a08, lo: 0x8a, hi: 0xaa},\n\t{value: 0x3308, lo: 0xab, hi: 0xb3},\n\t{value: 0x0808, lo: 0xb4, hi: 0xb5},\n\t{value: 0x0018, lo: 0xb6, hi: 0xb9},\n\t{value: 0x0818, lo: 0xba, hi: 0xba},\n\t{value: 0x0040, lo: 0xbb, hi: 0xbf},\n\t// Block 0xc, offset 0x6b\n\t{value: 0x0000, lo: 0x0b},\n\t{value: 0x0808, lo: 0x80, hi: 0x95},\n\t{value: 0x3308, lo: 0x96, hi: 0x99},\n\t{value: 0x0808, lo: 0x9a, hi: 0x9a},\n\t{value: 0x3308, lo: 0x9b, hi: 0xa3},\n\t{value: 0x0808, lo: 0xa4, hi: 0xa4},\n\t{value: 0x3308, lo: 0xa5, hi: 0xa7},\n\t{value: 0x0808, lo: 0xa8, hi: 0xa8},\n\t{value: 0x3308, lo: 0xa9, hi: 0xad},\n\t{value: 0x0040, lo: 0xae, hi: 0xaf},\n\t{value: 0x0818, lo: 0xb0, hi: 0xbe},\n\t{value: 0x0040, lo: 0xbf, hi: 0xbf},\n\t// Block 0xd, offset 0x77\n\t{value: 0x0000, lo: 0x0d},\n\t{value: 0x0c08, lo: 0x80, hi: 0x80},\n\t{value: 0x0a08, lo: 0x81, hi: 0x85},\n\t{value: 0x0c08, lo: 0x86, hi: 0x87},\n\t{value: 0x0a08, lo: 0x88, hi: 0x88},\n\t{value: 0x0c08, lo: 0x89, hi: 0x89},\n\t{value: 0x0a08, lo: 0x8a, hi: 0x93},\n\t{value: 0x0c08, lo: 0x94, hi: 0x94},\n\t{value: 0x0a08, lo: 0x95, hi: 0x95},\n\t{value: 0x0808, lo: 0x96, hi: 0x98},\n\t{value: 0x3308, lo: 0x99, hi: 0x9b},\n\t{value: 0x0040, lo: 0x9c, hi: 0x9d},\n\t{value: 0x0818, lo: 0x9e, hi: 0x9e},\n\t{value: 0x0040, lo: 0x9f, hi: 0xbf},\n\t// Block 0xe, offset 0x85\n\t{value: 0x0000, lo: 0x0d},\n\t{value: 0x0040, lo: 0x80, hi: 0x9f},\n\t{value: 0x0a08, lo: 0xa0, hi: 0xa9},\n\t{value: 0x0c08, lo: 0xaa, hi: 0xac},\n\t{value: 0x0808, lo: 0xad, hi: 0xad},\n\t{value: 0x0c08, lo: 0xae, hi: 0xae},\n\t{value: 0x0a08, lo: 0xaf, hi: 0xb0},\n\t{value: 0x0c08, lo: 0xb1, hi: 0xb2},\n\t{value: 0x0a08, lo: 0xb3, hi: 0xb4},\n\t{value: 0x0040, lo: 0xb5, hi: 0xb5},\n\t{value: 0x0a08, lo: 0xb6, hi: 0xb8},\n\t{value: 0x0c08, lo: 0xb9, hi: 0xb9},\n\t{value: 0x0a08, lo: 0xba, hi: 0xbd},\n\t{value: 0x0040, lo: 0xbe, hi: 0xbf},\n\t// Block 0xf, offset 0x93\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0040, lo: 0x80, hi: 0x93},\n\t{value: 0x3308, lo: 0x94, hi: 0xa1},\n\t{value: 0x0840, lo: 0xa2, hi: 0xa2},\n\t{value: 0x3308, lo: 0xa3, hi: 0xbf},\n\t// Block 0x10, offset 0x98\n\t{value: 0x0000, lo: 0x08},\n\t{value: 0x3308, lo: 0x80, hi: 0x82},\n\t{value: 0x3008, lo: 0x83, hi: 0x83},\n\t{value: 0x0008, lo: 0x84, hi: 0xb9},\n\t{value: 0x3308, lo: 0xba, hi: 0xba},\n\t{value: 0x3008, lo: 0xbb, hi: 0xbb},\n\t{value: 0x3308, lo: 0xbc, hi: 0xbc},\n\t{value: 0x0008, lo: 0xbd, hi: 0xbd},\n\t{value: 0x3008, lo: 0xbe, hi: 0xbf},\n\t// Block 0x11, offset 0xa1\n\t{value: 0x0000, lo: 0x0f},\n\t{value: 0x3308, lo: 0x80, hi: 0x80},\n\t{value: 0x3008, lo: 0x81, hi: 0x82},\n\t{value: 0x0040, lo: 0x83, hi: 0x85},\n\t{value: 0x3008, lo: 0x86, hi: 0x88},\n\t{value: 0x0040, lo: 0x89, hi: 0x89},\n\t{value: 0x3008, lo: 0x8a, hi: 0x8c},\n\t{value: 0x3b08, lo: 0x8d, hi: 0x8d},\n\t{value: 0x0040, lo: 0x8e, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x90},\n\t{value: 0x0040, lo: 0x91, hi: 0x96},\n\t{value: 0x3008, lo: 0x97, hi: 0x97},\n\t{value: 0x0040, lo: 0x98, hi: 0xa5},\n\t{value: 0x0008, lo: 0xa6, hi: 0xaf},\n\t{value: 0x0018, lo: 0xb0, hi: 0xba},\n\t{value: 0x0040, lo: 0xbb, hi: 0xbf},\n\t// Block 0x12, offset 0xb1\n\t{value: 0x0000, lo: 0x0d},\n\t{value: 0x3308, lo: 0x80, hi: 0x80},\n\t{value: 0x3008, lo: 0x81, hi: 0x83},\n\t{value: 0x0040, lo: 0x84, hi: 0x84},\n\t{value: 0x0008, lo: 0x85, hi: 0x8c},\n\t{value: 0x0040, lo: 0x8d, hi: 0x8d},\n\t{value: 0x0008, lo: 0x8e, hi: 0x90},\n\t{value: 0x0040, lo: 0x91, hi: 0x91},\n\t{value: 0x0008, lo: 0x92, hi: 0xa8},\n\t{value: 0x0040, lo: 0xa9, hi: 0xa9},\n\t{value: 0x0008, lo: 0xaa, hi: 0xb9},\n\t{value: 0x0040, lo: 0xba, hi: 0xbc},\n\t{value: 0x0008, lo: 0xbd, hi: 0xbd},\n\t{value: 0x3308, lo: 0xbe, hi: 0xbf},\n\t// Block 0x13, offset 0xbf\n\t{value: 0x0000, lo: 0x0c},\n\t{value: 0x0040, lo: 0x80, hi: 0x80},\n\t{value: 0x3308, lo: 0x81, hi: 0x81},\n\t{value: 0x3008, lo: 0x82, hi: 0x83},\n\t{value: 0x0040, lo: 0x84, hi: 0x84},\n\t{value: 0x0008, lo: 0x85, hi: 0x8c},\n\t{value: 0x0040, lo: 0x8d, hi: 0x8d},\n\t{value: 0x0008, lo: 0x8e, hi: 0x90},\n\t{value: 0x0040, lo: 0x91, hi: 0x91},\n\t{value: 0x0008, lo: 0x92, hi: 0xba},\n\t{value: 0x0040, lo: 0xbb, hi: 0xbc},\n\t{value: 0x0008, lo: 0xbd, hi: 0xbd},\n\t{value: 0x3008, lo: 0xbe, hi: 0xbf},\n\t// Block 0x14, offset 0xcc\n\t{value: 0x0000, lo: 0x0b},\n\t{value: 0x0040, lo: 0x80, hi: 0x81},\n\t{value: 0x3008, lo: 0x82, hi: 0x83},\n\t{value: 0x0040, lo: 0x84, hi: 0x84},\n\t{value: 0x0008, lo: 0x85, hi: 0x96},\n\t{value: 0x0040, lo: 0x97, hi: 0x99},\n\t{value: 0x0008, lo: 0x9a, hi: 0xb1},\n\t{value: 0x0040, lo: 0xb2, hi: 0xb2},\n\t{value: 0x0008, lo: 0xb3, hi: 0xbb},\n\t{value: 0x0040, lo: 0xbc, hi: 0xbc},\n\t{value: 0x0008, lo: 0xbd, hi: 0xbd},\n\t{value: 0x0040, lo: 0xbe, hi: 0xbf},\n\t// Block 0x15, offset 0xd8\n\t{value: 0x0000, lo: 0x10},\n\t{value: 0x0008, lo: 0x80, hi: 0x86},\n\t{value: 0x0040, lo: 0x87, hi: 0x89},\n\t{value: 0x3b08, lo: 0x8a, hi: 0x8a},\n\t{value: 0x0040, lo: 0x8b, hi: 0x8e},\n\t{value: 0x3008, lo: 0x8f, hi: 0x91},\n\t{value: 0x3308, lo: 0x92, hi: 0x94},\n\t{value: 0x0040, lo: 0x95, hi: 0x95},\n\t{value: 0x3308, lo: 0x96, hi: 0x96},\n\t{value: 0x0040, lo: 0x97, hi: 0x97},\n\t{value: 0x3008, lo: 0x98, hi: 0x9f},\n\t{value: 0x0040, lo: 0xa0, hi: 0xa5},\n\t{value: 0x0008, lo: 0xa6, hi: 0xaf},\n\t{value: 0x0040, lo: 0xb0, hi: 0xb1},\n\t{value: 0x3008, lo: 0xb2, hi: 0xb3},\n\t{value: 0x0018, lo: 0xb4, hi: 0xb4},\n\t{value: 0x0040, lo: 0xb5, hi: 0xbf},\n\t// Block 0x16, offset 0xe9\n\t{value: 0x0000, lo: 0x09},\n\t{value: 0x0040, lo: 0x80, hi: 0x80},\n\t{value: 0x0008, lo: 0x81, hi: 0xb0},\n\t{value: 0x3308, lo: 0xb1, hi: 0xb1},\n\t{value: 0x0008, lo: 0xb2, hi: 0xb2},\n\t{value: 0x08f1, lo: 0xb3, hi: 0xb3},\n\t{value: 0x3308, lo: 0xb4, hi: 0xb9},\n\t{value: 0x3b08, lo: 0xba, hi: 0xba},\n\t{value: 0x0040, lo: 0xbb, hi: 0xbe},\n\t{value: 0x0018, lo: 0xbf, hi: 0xbf},\n\t// Block 0x17, offset 0xf3\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0x0008, lo: 0x80, hi: 0x86},\n\t{value: 0x3308, lo: 0x87, hi: 0x8e},\n\t{value: 0x0018, lo: 0x8f, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x99},\n\t{value: 0x0018, lo: 0x9a, hi: 0x9b},\n\t{value: 0x0040, lo: 0x9c, hi: 0xbf},\n\t// Block 0x18, offset 0xfa\n\t{value: 0x0000, lo: 0x0c},\n\t{value: 0x0008, lo: 0x80, hi: 0x84},\n\t{value: 0x0040, lo: 0x85, hi: 0x85},\n\t{value: 0x0008, lo: 0x86, hi: 0x86},\n\t{value: 0x0040, lo: 0x87, hi: 0x87},\n\t{value: 0x3308, lo: 0x88, hi: 0x8d},\n\t{value: 0x0040, lo: 0x8e, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x99},\n\t{value: 0x0040, lo: 0x9a, hi: 0x9b},\n\t{value: 0x0961, lo: 0x9c, hi: 0x9c},\n\t{value: 0x0999, lo: 0x9d, hi: 0x9d},\n\t{value: 0x0008, lo: 0x9e, hi: 0x9f},\n\t{value: 0x0040, lo: 0xa0, hi: 0xbf},\n\t// Block 0x19, offset 0x107\n\t{value: 0x0000, lo: 0x10},\n\t{value: 0x0008, lo: 0x80, hi: 0x80},\n\t{value: 0x0018, lo: 0x81, hi: 0x8a},\n\t{value: 0x0008, lo: 0x8b, hi: 0x8b},\n\t{value: 0xe03d, lo: 0x8c, hi: 0x8c},\n\t{value: 0x0018, lo: 0x8d, hi: 0x97},\n\t{value: 0x3308, lo: 0x98, hi: 0x99},\n\t{value: 0x0018, lo: 0x9a, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xa9},\n\t{value: 0x0018, lo: 0xaa, hi: 0xb4},\n\t{value: 0x3308, lo: 0xb5, hi: 0xb5},\n\t{value: 0x0018, lo: 0xb6, hi: 0xb6},\n\t{value: 0x3308, lo: 0xb7, hi: 0xb7},\n\t{value: 0x0018, lo: 0xb8, hi: 0xb8},\n\t{value: 0x3308, lo: 0xb9, hi: 0xb9},\n\t{value: 0x0018, lo: 0xba, hi: 0xbd},\n\t{value: 0x3008, lo: 0xbe, hi: 0xbf},\n\t// Block 0x1a, offset 0x118\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0x0018, lo: 0x80, hi: 0x85},\n\t{value: 0x3308, lo: 0x86, hi: 0x86},\n\t{value: 0x0018, lo: 0x87, hi: 0x8c},\n\t{value: 0x0040, lo: 0x8d, hi: 0x8d},\n\t{value: 0x0018, lo: 0x8e, hi: 0x9a},\n\t{value: 0x0040, lo: 0x9b, hi: 0xbf},\n\t// Block 0x1b, offset 0x11f\n\t{value: 0x0000, lo: 0x0a},\n\t{value: 0x0008, lo: 0x80, hi: 0xaa},\n\t{value: 0x3008, lo: 0xab, hi: 0xac},\n\t{value: 0x3308, lo: 0xad, hi: 0xb0},\n\t{value: 0x3008, lo: 0xb1, hi: 0xb1},\n\t{value: 0x3308, lo: 0xb2, hi: 0xb7},\n\t{value: 0x3008, lo: 0xb8, hi: 0xb8},\n\t{value: 0x3b08, lo: 0xb9, hi: 0xba},\n\t{value: 0x3008, lo: 0xbb, hi: 0xbc},\n\t{value: 0x3308, lo: 0xbd, hi: 0xbe},\n\t{value: 0x0008, lo: 0xbf, hi: 0xbf},\n\t// Block 0x1c, offset 0x12a\n\t{value: 0x0000, lo: 0x0e},\n\t{value: 0x0008, lo: 0x80, hi: 0x89},\n\t{value: 0x0018, lo: 0x8a, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x95},\n\t{value: 0x3008, lo: 0x96, hi: 0x97},\n\t{value: 0x3308, lo: 0x98, hi: 0x99},\n\t{value: 0x0008, lo: 0x9a, hi: 0x9d},\n\t{value: 0x3308, lo: 0x9e, hi: 0xa0},\n\t{value: 0x0008, lo: 0xa1, hi: 0xa1},\n\t{value: 0x3008, lo: 0xa2, hi: 0xa4},\n\t{value: 0x0008, lo: 0xa5, hi: 0xa6},\n\t{value: 0x3008, lo: 0xa7, hi: 0xad},\n\t{value: 0x0008, lo: 0xae, hi: 0xb0},\n\t{value: 0x3308, lo: 0xb1, hi: 0xb4},\n\t{value: 0x0008, lo: 0xb5, hi: 0xbf},\n\t// Block 0x1d, offset 0x139\n\t{value: 0x0000, lo: 0x0d},\n\t{value: 0x0008, lo: 0x80, hi: 0x81},\n\t{value: 0x3308, lo: 0x82, hi: 0x82},\n\t{value: 0x3008, lo: 0x83, hi: 0x84},\n\t{value: 0x3308, lo: 0x85, hi: 0x86},\n\t{value: 0x3008, lo: 0x87, hi: 0x8c},\n\t{value: 0x3308, lo: 0x8d, hi: 0x8d},\n\t{value: 0x0008, lo: 0x8e, hi: 0x8e},\n\t{value: 0x3008, lo: 0x8f, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x99},\n\t{value: 0x3008, lo: 0x9a, hi: 0x9c},\n\t{value: 0x3308, lo: 0x9d, hi: 0x9d},\n\t{value: 0x0018, lo: 0x9e, hi: 0x9f},\n\t{value: 0x0040, lo: 0xa0, hi: 0xbf},\n\t// Block 0x1e, offset 0x147\n\t{value: 0x0000, lo: 0x09},\n\t{value: 0x0040, lo: 0x80, hi: 0x86},\n\t{value: 0x055d, lo: 0x87, hi: 0x87},\n\t{value: 0x0040, lo: 0x88, hi: 0x8c},\n\t{value: 0x055d, lo: 0x8d, hi: 0x8d},\n\t{value: 0x0040, lo: 0x8e, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0xba},\n\t{value: 0x0018, lo: 0xbb, hi: 0xbb},\n\t{value: 0xe105, lo: 0xbc, hi: 0xbc},\n\t{value: 0x0008, lo: 0xbd, hi: 0xbf},\n\t// Block 0x1f, offset 0x151\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x0018, lo: 0x80, hi: 0xbf},\n\t// Block 0x20, offset 0x153\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0018, lo: 0x80, hi: 0x9e},\n\t{value: 0x0040, lo: 0x9f, hi: 0xa0},\n\t{value: 0x2018, lo: 0xa1, hi: 0xb5},\n\t{value: 0x0018, lo: 0xb6, hi: 0xbf},\n\t// Block 0x21, offset 0x158\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0018, lo: 0x80, hi: 0xa7},\n\t{value: 0x2018, lo: 0xa8, hi: 0xbf},\n\t// Block 0x22, offset 0x15b\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x2018, lo: 0x80, hi: 0x82},\n\t{value: 0x0018, lo: 0x83, hi: 0xbf},\n\t// Block 0x23, offset 0x15e\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x0008, lo: 0x80, hi: 0xbf},\n\t// Block 0x24, offset 0x160\n\t{value: 0x0000, lo: 0x0b},\n\t{value: 0x0008, lo: 0x80, hi: 0x88},\n\t{value: 0x0040, lo: 0x89, hi: 0x89},\n\t{value: 0x0008, lo: 0x8a, hi: 0x8d},\n\t{value: 0x0040, lo: 0x8e, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x96},\n\t{value: 0x0040, lo: 0x97, hi: 0x97},\n\t{value: 0x0008, lo: 0x98, hi: 0x98},\n\t{value: 0x0040, lo: 0x99, hi: 0x99},\n\t{value: 0x0008, lo: 0x9a, hi: 0x9d},\n\t{value: 0x0040, lo: 0x9e, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xbf},\n\t// Block 0x25, offset 0x16c\n\t{value: 0x0000, lo: 0x0a},\n\t{value: 0x0008, lo: 0x80, hi: 0x88},\n\t{value: 0x0040, lo: 0x89, hi: 0x89},\n\t{value: 0x0008, lo: 0x8a, hi: 0x8d},\n\t{value: 0x0040, lo: 0x8e, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0xb0},\n\t{value: 0x0040, lo: 0xb1, hi: 0xb1},\n\t{value: 0x0008, lo: 0xb2, hi: 0xb5},\n\t{value: 0x0040, lo: 0xb6, hi: 0xb7},\n\t{value: 0x0008, lo: 0xb8, hi: 0xbe},\n\t{value: 0x0040, lo: 0xbf, hi: 0xbf},\n\t// Block 0x26, offset 0x177\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0x0008, lo: 0x80, hi: 0x80},\n\t{value: 0x0040, lo: 0x81, hi: 0x81},\n\t{value: 0x0008, lo: 0x82, hi: 0x85},\n\t{value: 0x0040, lo: 0x86, hi: 0x87},\n\t{value: 0x0008, lo: 0x88, hi: 0x96},\n\t{value: 0x0040, lo: 0x97, hi: 0x97},\n\t{value: 0x0008, lo: 0x98, hi: 0xbf},\n\t// Block 0x27, offset 0x17f\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x0008, lo: 0x80, hi: 0x90},\n\t{value: 0x0040, lo: 0x91, hi: 0x91},\n\t{value: 0x0008, lo: 0x92, hi: 0x95},\n\t{value: 0x0040, lo: 0x96, hi: 0x97},\n\t{value: 0x0008, lo: 0x98, hi: 0xbf},\n\t// Block 0x28, offset 0x185\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x0008, lo: 0x80, hi: 0x9a},\n\t{value: 0x0040, lo: 0x9b, hi: 0x9c},\n\t{value: 0x3308, lo: 0x9d, hi: 0x9f},\n\t{value: 0x0018, lo: 0xa0, hi: 0xbc},\n\t{value: 0x0040, lo: 0xbd, hi: 0xbf},\n\t// Block 0x29, offset 0x18b\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0008, lo: 0x80, hi: 0x8f},\n\t{value: 0x0018, lo: 0x90, hi: 0x99},\n\t{value: 0x0040, lo: 0x9a, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xbf},\n\t// Block 0x2a, offset 0x190\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0008, lo: 0x80, hi: 0xb5},\n\t{value: 0x0040, lo: 0xb6, hi: 0xb7},\n\t{value: 0xe045, lo: 0xb8, hi: 0xbd},\n\t{value: 0x0040, lo: 0xbe, hi: 0xbf},\n\t// Block 0x2b, offset 0x195\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0018, lo: 0x80, hi: 0x80},\n\t{value: 0x0008, lo: 0x81, hi: 0xbf},\n\t// Block 0x2c, offset 0x198\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0008, lo: 0x80, hi: 0xac},\n\t{value: 0x0018, lo: 0xad, hi: 0xae},\n\t{value: 0x0008, lo: 0xaf, hi: 0xbf},\n\t// Block 0x2d, offset 0x19c\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x0040, lo: 0x80, hi: 0x80},\n\t{value: 0x0008, lo: 0x81, hi: 0x9a},\n\t{value: 0x0018, lo: 0x9b, hi: 0x9c},\n\t{value: 0x0040, lo: 0x9d, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xbf},\n\t// Block 0x2e, offset 0x1a2\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0008, lo: 0x80, hi: 0xaa},\n\t{value: 0x0018, lo: 0xab, hi: 0xb0},\n\t{value: 0x0008, lo: 0xb1, hi: 0xb8},\n\t{value: 0x0040, lo: 0xb9, hi: 0xbf},\n\t// Block 0x2f, offset 0x1a7\n\t{value: 0x0000, lo: 0x0b},\n\t{value: 0x0008, lo: 0x80, hi: 0x8c},\n\t{value: 0x0040, lo: 0x8d, hi: 0x8d},\n\t{value: 0x0008, lo: 0x8e, hi: 0x91},\n\t{value: 0x3308, lo: 0x92, hi: 0x93},\n\t{value: 0x3b08, lo: 0x94, hi: 0x94},\n\t{value: 0x0040, lo: 0x95, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xb1},\n\t{value: 0x3308, lo: 0xb2, hi: 0xb3},\n\t{value: 0x3b08, lo: 0xb4, hi: 0xb4},\n\t{value: 0x0018, lo: 0xb5, hi: 0xb6},\n\t{value: 0x0040, lo: 0xb7, hi: 0xbf},\n\t// Block 0x30, offset 0x1b3\n\t{value: 0x0000, lo: 0x09},\n\t{value: 0x0008, lo: 0x80, hi: 0x91},\n\t{value: 0x3308, lo: 0x92, hi: 0x93},\n\t{value: 0x0040, lo: 0x94, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xac},\n\t{value: 0x0040, lo: 0xad, hi: 0xad},\n\t{value: 0x0008, lo: 0xae, hi: 0xb0},\n\t{value: 0x0040, lo: 0xb1, hi: 0xb1},\n\t{value: 0x3308, lo: 0xb2, hi: 0xb3},\n\t{value: 0x0040, lo: 0xb4, hi: 0xbf},\n\t// Block 0x31, offset 0x1bd\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x0008, lo: 0x80, hi: 0xb3},\n\t{value: 0x3340, lo: 0xb4, hi: 0xb5},\n\t{value: 0x3008, lo: 0xb6, hi: 0xb6},\n\t{value: 0x3308, lo: 0xb7, hi: 0xbd},\n\t{value: 0x3008, lo: 0xbe, hi: 0xbf},\n\t// Block 0x32, offset 0x1c3\n\t{value: 0x0000, lo: 0x10},\n\t{value: 0x3008, lo: 0x80, hi: 0x85},\n\t{value: 0x3308, lo: 0x86, hi: 0x86},\n\t{value: 0x3008, lo: 0x87, hi: 0x88},\n\t{value: 0x3308, lo: 0x89, hi: 0x91},\n\t{value: 0x3b08, lo: 0x92, hi: 0x92},\n\t{value: 0x3308, lo: 0x93, hi: 0x93},\n\t{value: 0x0018, lo: 0x94, hi: 0x96},\n\t{value: 0x0008, lo: 0x97, hi: 0x97},\n\t{value: 0x0018, lo: 0x98, hi: 0x9b},\n\t{value: 0x0008, lo: 0x9c, hi: 0x9c},\n\t{value: 0x3308, lo: 0x9d, hi: 0x9d},\n\t{value: 0x0040, lo: 0x9e, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xa9},\n\t{value: 0x0040, lo: 0xaa, hi: 0xaf},\n\t{value: 0x0018, lo: 0xb0, hi: 0xb9},\n\t{value: 0x0040, lo: 0xba, hi: 0xbf},\n\t// Block 0x33, offset 0x1d4\n\t{value: 0x0000, lo: 0x09},\n\t{value: 0x0018, lo: 0x80, hi: 0x85},\n\t{value: 0x0040, lo: 0x86, hi: 0x86},\n\t{value: 0x0218, lo: 0x87, hi: 0x87},\n\t{value: 0x0018, lo: 0x88, hi: 0x8a},\n\t{value: 0x33c0, lo: 0x8b, hi: 0x8d},\n\t{value: 0x0040, lo: 0x8e, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x99},\n\t{value: 0x0040, lo: 0x9a, hi: 0x9f},\n\t{value: 0x0208, lo: 0xa0, hi: 0xbf},\n\t// Block 0x34, offset 0x1de\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0208, lo: 0x80, hi: 0xb7},\n\t{value: 0x0040, lo: 0xb8, hi: 0xbf},\n\t// Block 0x35, offset 0x1e1\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0x0008, lo: 0x80, hi: 0x84},\n\t{value: 0x3308, lo: 0x85, hi: 0x86},\n\t{value: 0x0208, lo: 0x87, hi: 0xa8},\n\t{value: 0x3308, lo: 0xa9, hi: 0xa9},\n\t{value: 0x0208, lo: 0xaa, hi: 0xaa},\n\t{value: 0x0040, lo: 0xab, hi: 0xaf},\n\t{value: 0x0008, lo: 0xb0, hi: 0xbf},\n\t// Block 0x36, offset 0x1e9\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0008, lo: 0x80, hi: 0xb5},\n\t{value: 0x0040, lo: 0xb6, hi: 0xbf},\n\t// Block 0x37, offset 0x1ec\n\t{value: 0x0000, lo: 0x0c},\n\t{value: 0x0008, lo: 0x80, hi: 0x9e},\n\t{value: 0x0040, lo: 0x9f, hi: 0x9f},\n\t{value: 0x3308, lo: 0xa0, hi: 0xa2},\n\t{value: 0x3008, lo: 0xa3, hi: 0xa6},\n\t{value: 0x3308, lo: 0xa7, hi: 0xa8},\n\t{value: 0x3008, lo: 0xa9, hi: 0xab},\n\t{value: 0x0040, lo: 0xac, hi: 0xaf},\n\t{value: 0x3008, lo: 0xb0, hi: 0xb1},\n\t{value: 0x3308, lo: 0xb2, hi: 0xb2},\n\t{value: 0x3008, lo: 0xb3, hi: 0xb8},\n\t{value: 0x3308, lo: 0xb9, hi: 0xbb},\n\t{value: 0x0040, lo: 0xbc, hi: 0xbf},\n\t// Block 0x38, offset 0x1f9\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0x0018, lo: 0x80, hi: 0x80},\n\t{value: 0x0040, lo: 0x81, hi: 0x83},\n\t{value: 0x0018, lo: 0x84, hi: 0x85},\n\t{value: 0x0008, lo: 0x86, hi: 0xad},\n\t{value: 0x0040, lo: 0xae, hi: 0xaf},\n\t{value: 0x0008, lo: 0xb0, hi: 0xb4},\n\t{value: 0x0040, lo: 0xb5, hi: 0xbf},\n\t// Block 0x39, offset 0x201\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0008, lo: 0x80, hi: 0xab},\n\t{value: 0x0040, lo: 0xac, hi: 0xaf},\n\t{value: 0x0008, lo: 0xb0, hi: 0xbf},\n\t// Block 0x3a, offset 0x205\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0x0008, lo: 0x80, hi: 0x89},\n\t{value: 0x0040, lo: 0x8a, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x99},\n\t{value: 0x0028, lo: 0x9a, hi: 0x9a},\n\t{value: 0x0040, lo: 0x9b, hi: 0x9d},\n\t{value: 0x0018, lo: 0x9e, hi: 0xbf},\n\t// Block 0x3b, offset 0x20c\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0x0008, lo: 0x80, hi: 0x96},\n\t{value: 0x3308, lo: 0x97, hi: 0x98},\n\t{value: 0x3008, lo: 0x99, hi: 0x9a},\n\t{value: 0x3308, lo: 0x9b, hi: 0x9b},\n\t{value: 0x0040, lo: 0x9c, hi: 0x9d},\n\t{value: 0x0018, lo: 0x9e, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xbf},\n\t// Block 0x3c, offset 0x214\n\t{value: 0x0000, lo: 0x0f},\n\t{value: 0x0008, lo: 0x80, hi: 0x94},\n\t{value: 0x3008, lo: 0x95, hi: 0x95},\n\t{value: 0x3308, lo: 0x96, hi: 0x96},\n\t{value: 0x3008, lo: 0x97, hi: 0x97},\n\t{value: 0x3308, lo: 0x98, hi: 0x9e},\n\t{value: 0x0040, lo: 0x9f, hi: 0x9f},\n\t{value: 0x3b08, lo: 0xa0, hi: 0xa0},\n\t{value: 0x3008, lo: 0xa1, hi: 0xa1},\n\t{value: 0x3308, lo: 0xa2, hi: 0xa2},\n\t{value: 0x3008, lo: 0xa3, hi: 0xa4},\n\t{value: 0x3308, lo: 0xa5, hi: 0xac},\n\t{value: 0x3008, lo: 0xad, hi: 0xb2},\n\t{value: 0x3308, lo: 0xb3, hi: 0xbc},\n\t{value: 0x0040, lo: 0xbd, hi: 0xbe},\n\t{value: 0x3308, lo: 0xbf, hi: 0xbf},\n\t// Block 0x3d, offset 0x224\n\t{value: 0x0000, lo: 0x0b},\n\t{value: 0x0008, lo: 0x80, hi: 0x89},\n\t{value: 0x0040, lo: 0x8a, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x99},\n\t{value: 0x0040, lo: 0x9a, hi: 0x9f},\n\t{value: 0x0018, lo: 0xa0, hi: 0xa6},\n\t{value: 0x0008, lo: 0xa7, hi: 0xa7},\n\t{value: 0x0018, lo: 0xa8, hi: 0xad},\n\t{value: 0x0040, lo: 0xae, hi: 0xaf},\n\t{value: 0x3308, lo: 0xb0, hi: 0xbd},\n\t{value: 0x3318, lo: 0xbe, hi: 0xbe},\n\t{value: 0x0040, lo: 0xbf, hi: 0xbf},\n\t// Block 0x3e, offset 0x230\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x0040, lo: 0x80, hi: 0xbf},\n\t// Block 0x3f, offset 0x232\n\t{value: 0x0000, lo: 0x09},\n\t{value: 0x3308, lo: 0x80, hi: 0x83},\n\t{value: 0x3008, lo: 0x84, hi: 0x84},\n\t{value: 0x0008, lo: 0x85, hi: 0xb3},\n\t{value: 0x3308, lo: 0xb4, hi: 0xb4},\n\t{value: 0x3008, lo: 0xb5, hi: 0xb5},\n\t{value: 0x3308, lo: 0xb6, hi: 0xba},\n\t{value: 0x3008, lo: 0xbb, hi: 0xbb},\n\t{value: 0x3308, lo: 0xbc, hi: 0xbc},\n\t{value: 0x3008, lo: 0xbd, hi: 0xbf},\n\t// Block 0x40, offset 0x23c\n\t{value: 0x0000, lo: 0x0b},\n\t{value: 0x3008, lo: 0x80, hi: 0x81},\n\t{value: 0x3308, lo: 0x82, hi: 0x82},\n\t{value: 0x3008, lo: 0x83, hi: 0x83},\n\t{value: 0x3808, lo: 0x84, hi: 0x84},\n\t{value: 0x0008, lo: 0x85, hi: 0x8b},\n\t{value: 0x0040, lo: 0x8c, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x99},\n\t{value: 0x0018, lo: 0x9a, hi: 0xaa},\n\t{value: 0x3308, lo: 0xab, hi: 0xb3},\n\t{value: 0x0018, lo: 0xb4, hi: 0xbc},\n\t{value: 0x0040, lo: 0xbd, hi: 0xbf},\n\t// Block 0x41, offset 0x248\n\t{value: 0x0000, lo: 0x0b},\n\t{value: 0x3308, lo: 0x80, hi: 0x81},\n\t{value: 0x3008, lo: 0x82, hi: 0x82},\n\t{value: 0x0008, lo: 0x83, hi: 0xa0},\n\t{value: 0x3008, lo: 0xa1, hi: 0xa1},\n\t{value: 0x3308, lo: 0xa2, hi: 0xa5},\n\t{value: 0x3008, lo: 0xa6, hi: 0xa7},\n\t{value: 0x3308, lo: 0xa8, hi: 0xa9},\n\t{value: 0x3808, lo: 0xaa, hi: 0xaa},\n\t{value: 0x3b08, lo: 0xab, hi: 0xab},\n\t{value: 0x3308, lo: 0xac, hi: 0xad},\n\t{value: 0x0008, lo: 0xae, hi: 0xbf},\n\t// Block 0x42, offset 0x254\n\t{value: 0x0000, lo: 0x0b},\n\t{value: 0x0008, lo: 0x80, hi: 0xa5},\n\t{value: 0x3308, lo: 0xa6, hi: 0xa6},\n\t{value: 0x3008, lo: 0xa7, hi: 0xa7},\n\t{value: 0x3308, lo: 0xa8, hi: 0xa9},\n\t{value: 0x3008, lo: 0xaa, hi: 0xac},\n\t{value: 0x3308, lo: 0xad, hi: 0xad},\n\t{value: 0x3008, lo: 0xae, hi: 0xae},\n\t{value: 0x3308, lo: 0xaf, hi: 0xb1},\n\t{value: 0x3808, lo: 0xb2, hi: 0xb3},\n\t{value: 0x0040, lo: 0xb4, hi: 0xbb},\n\t{value: 0x0018, lo: 0xbc, hi: 0xbf},\n\t// Block 0x43, offset 0x260\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0x0008, lo: 0x80, hi: 0xa3},\n\t{value: 0x3008, lo: 0xa4, hi: 0xab},\n\t{value: 0x3308, lo: 0xac, hi: 0xb3},\n\t{value: 0x3008, lo: 0xb4, hi: 0xb5},\n\t{value: 0x3308, lo: 0xb6, hi: 0xb7},\n\t{value: 0x0040, lo: 0xb8, hi: 0xba},\n\t{value: 0x0018, lo: 0xbb, hi: 0xbf},\n\t// Block 0x44, offset 0x268\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0008, lo: 0x80, hi: 0x89},\n\t{value: 0x0040, lo: 0x8a, hi: 0x8c},\n\t{value: 0x0008, lo: 0x8d, hi: 0xbd},\n\t{value: 0x0018, lo: 0xbe, hi: 0xbf},\n\t// Block 0x45, offset 0x26d\n\t{value: 0x0000, lo: 0x09},\n\t{value: 0x0e29, lo: 0x80, hi: 0x80},\n\t{value: 0x0e41, lo: 0x81, hi: 0x81},\n\t{value: 0x0e59, lo: 0x82, hi: 0x82},\n\t{value: 0x0e71, lo: 0x83, hi: 0x83},\n\t{value: 0x0e89, lo: 0x84, hi: 0x85},\n\t{value: 0x0ea1, lo: 0x86, hi: 0x86},\n\t{value: 0x0eb9, lo: 0x87, hi: 0x87},\n\t{value: 0x057d, lo: 0x88, hi: 0x88},\n\t{value: 0x0040, lo: 0x89, hi: 0xbf},\n\t// Block 0x46, offset 0x277\n\t{value: 0x0000, lo: 0x10},\n\t{value: 0x0018, lo: 0x80, hi: 0x87},\n\t{value: 0x0040, lo: 0x88, hi: 0x8f},\n\t{value: 0x3308, lo: 0x90, hi: 0x92},\n\t{value: 0x0018, lo: 0x93, hi: 0x93},\n\t{value: 0x3308, lo: 0x94, hi: 0xa0},\n\t{value: 0x3008, lo: 0xa1, hi: 0xa1},\n\t{value: 0x3308, lo: 0xa2, hi: 0xa8},\n\t{value: 0x0008, lo: 0xa9, hi: 0xac},\n\t{value: 0x3308, lo: 0xad, hi: 0xad},\n\t{value: 0x0008, lo: 0xae, hi: 0xb1},\n\t{value: 0x3008, lo: 0xb2, hi: 0xb3},\n\t{value: 0x3308, lo: 0xb4, hi: 0xb4},\n\t{value: 0x0008, lo: 0xb5, hi: 0xb6},\n\t{value: 0x0040, lo: 0xb7, hi: 0xb7},\n\t{value: 0x3308, lo: 0xb8, hi: 0xb9},\n\t{value: 0x0040, lo: 0xba, hi: 0xbf},\n\t// Block 0x47, offset 0x288\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x3308, lo: 0x80, hi: 0xb5},\n\t{value: 0x0040, lo: 0xb6, hi: 0xba},\n\t{value: 0x3308, lo: 0xbb, hi: 0xbf},\n\t// Block 0x48, offset 0x28c\n\t{value: 0x0000, lo: 0x0a},\n\t{value: 0x0008, lo: 0x80, hi: 0x87},\n\t{value: 0xe045, lo: 0x88, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x95},\n\t{value: 0x0040, lo: 0x96, hi: 0x97},\n\t{value: 0xe045, lo: 0x98, hi: 0x9d},\n\t{value: 0x0040, lo: 0x9e, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xa7},\n\t{value: 0xe045, lo: 0xa8, hi: 0xaf},\n\t{value: 0x0008, lo: 0xb0, hi: 0xb7},\n\t{value: 0xe045, lo: 0xb8, hi: 0xbf},\n\t// Block 0x49, offset 0x297\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0040, lo: 0x80, hi: 0x8f},\n\t{value: 0x3318, lo: 0x90, hi: 0xb0},\n\t{value: 0x0040, lo: 0xb1, hi: 0xbf},\n\t// Block 0x4a, offset 0x29b\n\t{value: 0x0000, lo: 0x08},\n\t{value: 0x0018, lo: 0x80, hi: 0x82},\n\t{value: 0x0040, lo: 0x83, hi: 0x83},\n\t{value: 0x0008, lo: 0x84, hi: 0x84},\n\t{value: 0x0018, lo: 0x85, hi: 0x88},\n\t{value: 0x24c1, lo: 0x89, hi: 0x89},\n\t{value: 0x0018, lo: 0x8a, hi: 0x8b},\n\t{value: 0x0040, lo: 0x8c, hi: 0x8f},\n\t{value: 0x0018, lo: 0x90, hi: 0xbf},\n\t// Block 0x4b, offset 0x2a4\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0x0018, lo: 0x80, hi: 0xab},\n\t{value: 0x24f1, lo: 0xac, hi: 0xac},\n\t{value: 0x2529, lo: 0xad, hi: 0xad},\n\t{value: 0x0018, lo: 0xae, hi: 0xae},\n\t{value: 0x2579, lo: 0xaf, hi: 0xaf},\n\t{value: 0x25b1, lo: 0xb0, hi: 0xb0},\n\t{value: 0x0018, lo: 0xb1, hi: 0xbf},\n\t// Block 0x4c, offset 0x2ac\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x0018, lo: 0x80, hi: 0x9f},\n\t{value: 0x0080, lo: 0xa0, hi: 0xa0},\n\t{value: 0x0018, lo: 0xa1, hi: 0xad},\n\t{value: 0x0080, lo: 0xae, hi: 0xaf},\n\t{value: 0x0018, lo: 0xb0, hi: 0xbf},\n\t// Block 0x4d, offset 0x2b2\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0018, lo: 0x80, hi: 0xa8},\n\t{value: 0x09c5, lo: 0xa9, hi: 0xa9},\n\t{value: 0x09e5, lo: 0xaa, hi: 0xaa},\n\t{value: 0x0018, lo: 0xab, hi: 0xbf},\n\t// Block 0x4e, offset 0x2b7\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0018, lo: 0x80, hi: 0xbe},\n\t{value: 0x0040, lo: 0xbf, hi: 0xbf},\n\t// Block 0x4f, offset 0x2ba\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0018, lo: 0x80, hi: 0xa6},\n\t{value: 0x0040, lo: 0xa7, hi: 0xbf},\n\t// Block 0x50, offset 0x2bd\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0018, lo: 0x80, hi: 0x8b},\n\t{value: 0x28c1, lo: 0x8c, hi: 0x8c},\n\t{value: 0x0018, lo: 0x8d, hi: 0xbf},\n\t// Block 0x51, offset 0x2c1\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x0018, lo: 0x80, hi: 0xb3},\n\t{value: 0x0e66, lo: 0xb4, hi: 0xb4},\n\t{value: 0x292a, lo: 0xb5, hi: 0xb5},\n\t{value: 0x0e86, lo: 0xb6, hi: 0xb6},\n\t{value: 0x0018, lo: 0xb7, hi: 0xbf},\n\t// Block 0x52, offset 0x2c7\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0018, lo: 0x80, hi: 0x9b},\n\t{value: 0x2941, lo: 0x9c, hi: 0x9c},\n\t{value: 0x0018, lo: 0x9d, hi: 0xbf},\n\t// Block 0x53, offset 0x2cb\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0018, lo: 0x80, hi: 0xb3},\n\t{value: 0x0040, lo: 0xb4, hi: 0xb5},\n\t{value: 0x0018, lo: 0xb6, hi: 0xbf},\n\t// Block 0x54, offset 0x2cf\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x0018, lo: 0x80, hi: 0x95},\n\t{value: 0x0040, lo: 0x96, hi: 0x97},\n\t{value: 0x0018, lo: 0x98, hi: 0xb9},\n\t{value: 0x0040, lo: 0xba, hi: 0xbc},\n\t{value: 0x0018, lo: 0xbd, hi: 0xbf},\n\t// Block 0x55, offset 0x2d5\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0x0018, lo: 0x80, hi: 0x88},\n\t{value: 0x0040, lo: 0x89, hi: 0x89},\n\t{value: 0x0018, lo: 0x8a, hi: 0x91},\n\t{value: 0x0040, lo: 0x92, hi: 0xab},\n\t{value: 0x0018, lo: 0xac, hi: 0xaf},\n\t{value: 0x0040, lo: 0xb0, hi: 0xbf},\n\t// Block 0x56, offset 0x2dc\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0xe185, lo: 0x80, hi: 0x8f},\n\t{value: 0x03f5, lo: 0x90, hi: 0x9f},\n\t{value: 0x0ea5, lo: 0xa0, hi: 0xae},\n\t{value: 0x0040, lo: 0xaf, hi: 0xaf},\n\t{value: 0x0008, lo: 0xb0, hi: 0xbf},\n\t// Block 0x57, offset 0x2e2\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0x0008, lo: 0x80, hi: 0xa5},\n\t{value: 0x0040, lo: 0xa6, hi: 0xa6},\n\t{value: 0x0008, lo: 0xa7, hi: 0xa7},\n\t{value: 0x0040, lo: 0xa8, hi: 0xac},\n\t{value: 0x0008, lo: 0xad, hi: 0xad},\n\t{value: 0x0040, lo: 0xae, hi: 0xaf},\n\t{value: 0x0008, lo: 0xb0, hi: 0xbf},\n\t// Block 0x58, offset 0x2ea\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0x0008, lo: 0x80, hi: 0xa7},\n\t{value: 0x0040, lo: 0xa8, hi: 0xae},\n\t{value: 0xe075, lo: 0xaf, hi: 0xaf},\n\t{value: 0x0018, lo: 0xb0, hi: 0xb0},\n\t{value: 0x0040, lo: 0xb1, hi: 0xbe},\n\t{value: 0x3b08, lo: 0xbf, hi: 0xbf},\n\t// Block 0x59, offset 0x2f1\n\t{value: 0x0000, lo: 0x0a},\n\t{value: 0x0008, lo: 0x80, hi: 0x96},\n\t{value: 0x0040, lo: 0x97, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xa6},\n\t{value: 0x0040, lo: 0xa7, hi: 0xa7},\n\t{value: 0x0008, lo: 0xa8, hi: 0xae},\n\t{value: 0x0040, lo: 0xaf, hi: 0xaf},\n\t{value: 0x0008, lo: 0xb0, hi: 0xb6},\n\t{value: 0x0040, lo: 0xb7, hi: 0xb7},\n\t{value: 0x0008, lo: 0xb8, hi: 0xbe},\n\t{value: 0x0040, lo: 0xbf, hi: 0xbf},\n\t// Block 0x5a, offset 0x2fc\n\t{value: 0x0000, lo: 0x09},\n\t{value: 0x0008, lo: 0x80, hi: 0x86},\n\t{value: 0x0040, lo: 0x87, hi: 0x87},\n\t{value: 0x0008, lo: 0x88, hi: 0x8e},\n\t{value: 0x0040, lo: 0x8f, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x96},\n\t{value: 0x0040, lo: 0x97, hi: 0x97},\n\t{value: 0x0008, lo: 0x98, hi: 0x9e},\n\t{value: 0x0040, lo: 0x9f, hi: 0x9f},\n\t{value: 0x3308, lo: 0xa0, hi: 0xbf},\n\t// Block 0x5b, offset 0x306\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0018, lo: 0x80, hi: 0xae},\n\t{value: 0x0008, lo: 0xaf, hi: 0xaf},\n\t{value: 0x0018, lo: 0xb0, hi: 0xbf},\n\t// Block 0x5c, offset 0x30a\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0018, lo: 0x80, hi: 0x84},\n\t{value: 0x0040, lo: 0x85, hi: 0xbf},\n\t// Block 0x5d, offset 0x30d\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x0018, lo: 0x80, hi: 0x99},\n\t{value: 0x0040, lo: 0x9a, hi: 0x9a},\n\t{value: 0x0018, lo: 0x9b, hi: 0x9e},\n\t{value: 0x0edd, lo: 0x9f, hi: 0x9f},\n\t{value: 0x0018, lo: 0xa0, hi: 0xbf},\n\t// Block 0x5e, offset 0x313\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0018, lo: 0x80, hi: 0xb2},\n\t{value: 0x0efd, lo: 0xb3, hi: 0xb3},\n\t{value: 0x0040, lo: 0xb4, hi: 0xbf},\n\t// Block 0x5f, offset 0x317\n\t{value: 0x0020, lo: 0x01},\n\t{value: 0x0f1d, lo: 0x80, hi: 0xbf},\n\t// Block 0x60, offset 0x319\n\t{value: 0x0020, lo: 0x02},\n\t{value: 0x171d, lo: 0x80, hi: 0x8f},\n\t{value: 0x18fd, lo: 0x90, hi: 0xbf},\n\t// Block 0x61, offset 0x31c\n\t{value: 0x0020, lo: 0x01},\n\t{value: 0x1efd, lo: 0x80, hi: 0xbf},\n\t// Block 0x62, offset 0x31e\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0040, lo: 0x80, hi: 0x80},\n\t{value: 0x0008, lo: 0x81, hi: 0xbf},\n\t// Block 0x63, offset 0x321\n\t{value: 0x0000, lo: 0x09},\n\t{value: 0x0008, lo: 0x80, hi: 0x96},\n\t{value: 0x0040, lo: 0x97, hi: 0x98},\n\t{value: 0x3308, lo: 0x99, hi: 0x9a},\n\t{value: 0x29e2, lo: 0x9b, hi: 0x9b},\n\t{value: 0x2a0a, lo: 0x9c, hi: 0x9c},\n\t{value: 0x0008, lo: 0x9d, hi: 0x9e},\n\t{value: 0x2a31, lo: 0x9f, hi: 0x9f},\n\t{value: 0x0018, lo: 0xa0, hi: 0xa0},\n\t{value: 0x0008, lo: 0xa1, hi: 0xbf},\n\t// Block 0x64, offset 0x32b\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0008, lo: 0x80, hi: 0xbe},\n\t{value: 0x2a69, lo: 0xbf, hi: 0xbf},\n\t// Block 0x65, offset 0x32e\n\t{value: 0x0000, lo: 0x0e},\n\t{value: 0x0040, lo: 0x80, hi: 0x84},\n\t{value: 0x0008, lo: 0x85, hi: 0xad},\n\t{value: 0x0040, lo: 0xae, hi: 0xb0},\n\t{value: 0x2a1d, lo: 0xb1, hi: 0xb1},\n\t{value: 0x2a3d, lo: 0xb2, hi: 0xb2},\n\t{value: 0x2a5d, lo: 0xb3, hi: 0xb3},\n\t{value: 0x2a7d, lo: 0xb4, hi: 0xb4},\n\t{value: 0x2a5d, lo: 0xb5, hi: 0xb5},\n\t{value: 0x2a9d, lo: 0xb6, hi: 0xb6},\n\t{value: 0x2abd, lo: 0xb7, hi: 0xb7},\n\t{value: 0x2add, lo: 0xb8, hi: 0xb9},\n\t{value: 0x2afd, lo: 0xba, hi: 0xbb},\n\t{value: 0x2b1d, lo: 0xbc, hi: 0xbd},\n\t{value: 0x2afd, lo: 0xbe, hi: 0xbf},\n\t// Block 0x66, offset 0x33d\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0018, lo: 0x80, hi: 0xa3},\n\t{value: 0x0040, lo: 0xa4, hi: 0xaf},\n\t{value: 0x0008, lo: 0xb0, hi: 0xbf},\n\t// Block 0x67, offset 0x341\n\t{value: 0x0030, lo: 0x04},\n\t{value: 0x2aa2, lo: 0x80, hi: 0x9d},\n\t{value: 0x305a, lo: 0x9e, hi: 0x9e},\n\t{value: 0x0040, lo: 0x9f, hi: 0x9f},\n\t{value: 0x30a2, lo: 0xa0, hi: 0xbf},\n\t// Block 0x68, offset 0x346\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0008, lo: 0x80, hi: 0x95},\n\t{value: 0x0040, lo: 0x96, hi: 0xbf},\n\t// Block 0x69, offset 0x349\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0008, lo: 0x80, hi: 0x8c},\n\t{value: 0x0040, lo: 0x8d, hi: 0x8f},\n\t{value: 0x0018, lo: 0x90, hi: 0xbf},\n\t// Block 0x6a, offset 0x34d\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0018, lo: 0x80, hi: 0x86},\n\t{value: 0x0040, lo: 0x87, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0xbd},\n\t{value: 0x0018, lo: 0xbe, hi: 0xbf},\n\t// Block 0x6b, offset 0x352\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0008, lo: 0x80, hi: 0x8c},\n\t{value: 0x0018, lo: 0x8d, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0xab},\n\t{value: 0x0040, lo: 0xac, hi: 0xbf},\n\t// Block 0x6c, offset 0x357\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x0008, lo: 0x80, hi: 0xa5},\n\t{value: 0x0018, lo: 0xa6, hi: 0xaf},\n\t{value: 0x3308, lo: 0xb0, hi: 0xb1},\n\t{value: 0x0018, lo: 0xb2, hi: 0xb7},\n\t{value: 0x0040, lo: 0xb8, hi: 0xbf},\n\t// Block 0x6d, offset 0x35d\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x0040, lo: 0x80, hi: 0xb6},\n\t{value: 0x0008, lo: 0xb7, hi: 0xb7},\n\t{value: 0x2009, lo: 0xb8, hi: 0xb8},\n\t{value: 0x6e89, lo: 0xb9, hi: 0xb9},\n\t{value: 0x0008, lo: 0xba, hi: 0xbf},\n\t// Block 0x6e, offset 0x363\n\t{value: 0x0000, lo: 0x0e},\n\t{value: 0x0008, lo: 0x80, hi: 0x81},\n\t{value: 0x3308, lo: 0x82, hi: 0x82},\n\t{value: 0x0008, lo: 0x83, hi: 0x85},\n\t{value: 0x3b08, lo: 0x86, hi: 0x86},\n\t{value: 0x0008, lo: 0x87, hi: 0x8a},\n\t{value: 0x3308, lo: 0x8b, hi: 0x8b},\n\t{value: 0x0008, lo: 0x8c, hi: 0xa2},\n\t{value: 0x3008, lo: 0xa3, hi: 0xa4},\n\t{value: 0x3308, lo: 0xa5, hi: 0xa6},\n\t{value: 0x3008, lo: 0xa7, hi: 0xa7},\n\t{value: 0x0018, lo: 0xa8, hi: 0xab},\n\t{value: 0x0040, lo: 0xac, hi: 0xaf},\n\t{value: 0x0018, lo: 0xb0, hi: 0xb9},\n\t{value: 0x0040, lo: 0xba, hi: 0xbf},\n\t// Block 0x6f, offset 0x372\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x0208, lo: 0x80, hi: 0xb1},\n\t{value: 0x0108, lo: 0xb2, hi: 0xb2},\n\t{value: 0x0008, lo: 0xb3, hi: 0xb3},\n\t{value: 0x0018, lo: 0xb4, hi: 0xb7},\n\t{value: 0x0040, lo: 0xb8, hi: 0xbf},\n\t// Block 0x70, offset 0x378\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x3008, lo: 0x80, hi: 0x81},\n\t{value: 0x0008, lo: 0x82, hi: 0xb3},\n\t{value: 0x3008, lo: 0xb4, hi: 0xbf},\n\t// Block 0x71, offset 0x37c\n\t{value: 0x0000, lo: 0x0e},\n\t{value: 0x3008, lo: 0x80, hi: 0x83},\n\t{value: 0x3b08, lo: 0x84, hi: 0x84},\n\t{value: 0x3308, lo: 0x85, hi: 0x85},\n\t{value: 0x0040, lo: 0x86, hi: 0x8d},\n\t{value: 0x0018, lo: 0x8e, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x99},\n\t{value: 0x0040, lo: 0x9a, hi: 0x9f},\n\t{value: 0x3308, lo: 0xa0, hi: 0xb1},\n\t{value: 0x0008, lo: 0xb2, hi: 0xb7},\n\t{value: 0x0018, lo: 0xb8, hi: 0xba},\n\t{value: 0x0008, lo: 0xbb, hi: 0xbb},\n\t{value: 0x0018, lo: 0xbc, hi: 0xbc},\n\t{value: 0x0008, lo: 0xbd, hi: 0xbd},\n\t{value: 0x0040, lo: 0xbe, hi: 0xbf},\n\t// Block 0x72, offset 0x38b\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0008, lo: 0x80, hi: 0xa5},\n\t{value: 0x3308, lo: 0xa6, hi: 0xad},\n\t{value: 0x0018, lo: 0xae, hi: 0xaf},\n\t{value: 0x0008, lo: 0xb0, hi: 0xbf},\n\t// Block 0x73, offset 0x390\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0x0008, lo: 0x80, hi: 0x86},\n\t{value: 0x3308, lo: 0x87, hi: 0x91},\n\t{value: 0x3008, lo: 0x92, hi: 0x92},\n\t{value: 0x3808, lo: 0x93, hi: 0x93},\n\t{value: 0x0040, lo: 0x94, hi: 0x9e},\n\t{value: 0x0018, lo: 0x9f, hi: 0xbc},\n\t{value: 0x0040, lo: 0xbd, hi: 0xbf},\n\t// Block 0x74, offset 0x398\n\t{value: 0x0000, lo: 0x09},\n\t{value: 0x3308, lo: 0x80, hi: 0x82},\n\t{value: 0x3008, lo: 0x83, hi: 0x83},\n\t{value: 0x0008, lo: 0x84, hi: 0xb2},\n\t{value: 0x3308, lo: 0xb3, hi: 0xb3},\n\t{value: 0x3008, lo: 0xb4, hi: 0xb5},\n\t{value: 0x3308, lo: 0xb6, hi: 0xb9},\n\t{value: 0x3008, lo: 0xba, hi: 0xbb},\n\t{value: 0x3308, lo: 0xbc, hi: 0xbc},\n\t{value: 0x3008, lo: 0xbd, hi: 0xbf},\n\t// Block 0x75, offset 0x3a2\n\t{value: 0x0000, lo: 0x0a},\n\t{value: 0x3808, lo: 0x80, hi: 0x80},\n\t{value: 0x0018, lo: 0x81, hi: 0x8d},\n\t{value: 0x0040, lo: 0x8e, hi: 0x8e},\n\t{value: 0x0008, lo: 0x8f, hi: 0x99},\n\t{value: 0x0040, lo: 0x9a, hi: 0x9d},\n\t{value: 0x0018, lo: 0x9e, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xa4},\n\t{value: 0x3308, lo: 0xa5, hi: 0xa5},\n\t{value: 0x0008, lo: 0xa6, hi: 0xbe},\n\t{value: 0x0040, lo: 0xbf, hi: 0xbf},\n\t// Block 0x76, offset 0x3ad\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0x0008, lo: 0x80, hi: 0xa8},\n\t{value: 0x3308, lo: 0xa9, hi: 0xae},\n\t{value: 0x3008, lo: 0xaf, hi: 0xb0},\n\t{value: 0x3308, lo: 0xb1, hi: 0xb2},\n\t{value: 0x3008, lo: 0xb3, hi: 0xb4},\n\t{value: 0x3308, lo: 0xb5, hi: 0xb6},\n\t{value: 0x0040, lo: 0xb7, hi: 0xbf},\n\t// Block 0x77, offset 0x3b5\n\t{value: 0x0000, lo: 0x10},\n\t{value: 0x0008, lo: 0x80, hi: 0x82},\n\t{value: 0x3308, lo: 0x83, hi: 0x83},\n\t{value: 0x0008, lo: 0x84, hi: 0x8b},\n\t{value: 0x3308, lo: 0x8c, hi: 0x8c},\n\t{value: 0x3008, lo: 0x8d, hi: 0x8d},\n\t{value: 0x0040, lo: 0x8e, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x99},\n\t{value: 0x0040, lo: 0x9a, hi: 0x9b},\n\t{value: 0x0018, lo: 0x9c, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xb6},\n\t{value: 0x0018, lo: 0xb7, hi: 0xb9},\n\t{value: 0x0008, lo: 0xba, hi: 0xba},\n\t{value: 0x3008, lo: 0xbb, hi: 0xbb},\n\t{value: 0x3308, lo: 0xbc, hi: 0xbc},\n\t{value: 0x3008, lo: 0xbd, hi: 0xbd},\n\t{value: 0x0008, lo: 0xbe, hi: 0xbf},\n\t// Block 0x78, offset 0x3c6\n\t{value: 0x0000, lo: 0x08},\n\t{value: 0x0008, lo: 0x80, hi: 0xaf},\n\t{value: 0x3308, lo: 0xb0, hi: 0xb0},\n\t{value: 0x0008, lo: 0xb1, hi: 0xb1},\n\t{value: 0x3308, lo: 0xb2, hi: 0xb4},\n\t{value: 0x0008, lo: 0xb5, hi: 0xb6},\n\t{value: 0x3308, lo: 0xb7, hi: 0xb8},\n\t{value: 0x0008, lo: 0xb9, hi: 0xbd},\n\t{value: 0x3308, lo: 0xbe, hi: 0xbf},\n\t// Block 0x79, offset 0x3cf\n\t{value: 0x0000, lo: 0x0f},\n\t{value: 0x0008, lo: 0x80, hi: 0x80},\n\t{value: 0x3308, lo: 0x81, hi: 0x81},\n\t{value: 0x0008, lo: 0x82, hi: 0x82},\n\t{value: 0x0040, lo: 0x83, hi: 0x9a},\n\t{value: 0x0008, lo: 0x9b, hi: 0x9d},\n\t{value: 0x0018, lo: 0x9e, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xaa},\n\t{value: 0x3008, lo: 0xab, hi: 0xab},\n\t{value: 0x3308, lo: 0xac, hi: 0xad},\n\t{value: 0x3008, lo: 0xae, hi: 0xaf},\n\t{value: 0x0018, lo: 0xb0, hi: 0xb1},\n\t{value: 0x0008, lo: 0xb2, hi: 0xb4},\n\t{value: 0x3008, lo: 0xb5, hi: 0xb5},\n\t{value: 0x3b08, lo: 0xb6, hi: 0xb6},\n\t{value: 0x0040, lo: 0xb7, hi: 0xbf},\n\t// Block 0x7a, offset 0x3df\n\t{value: 0x0000, lo: 0x0c},\n\t{value: 0x0040, lo: 0x80, hi: 0x80},\n\t{value: 0x0008, lo: 0x81, hi: 0x86},\n\t{value: 0x0040, lo: 0x87, hi: 0x88},\n\t{value: 0x0008, lo: 0x89, hi: 0x8e},\n\t{value: 0x0040, lo: 0x8f, hi: 0x90},\n\t{value: 0x0008, lo: 0x91, hi: 0x96},\n\t{value: 0x0040, lo: 0x97, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xa6},\n\t{value: 0x0040, lo: 0xa7, hi: 0xa7},\n\t{value: 0x0008, lo: 0xa8, hi: 0xae},\n\t{value: 0x0040, lo: 0xaf, hi: 0xaf},\n\t{value: 0x0008, lo: 0xb0, hi: 0xbf},\n\t// Block 0x7b, offset 0x3ec\n\t{value: 0x0000, lo: 0x09},\n\t{value: 0x0008, lo: 0x80, hi: 0x9a},\n\t{value: 0x0018, lo: 0x9b, hi: 0x9b},\n\t{value: 0x4465, lo: 0x9c, hi: 0x9c},\n\t{value: 0x447d, lo: 0x9d, hi: 0x9d},\n\t{value: 0x2971, lo: 0x9e, hi: 0x9e},\n\t{value: 0xe06d, lo: 0x9f, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xa5},\n\t{value: 0x0040, lo: 0xa6, hi: 0xaf},\n\t{value: 0x4495, lo: 0xb0, hi: 0xbf},\n\t// Block 0x7c, offset 0x3f6\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x44b5, lo: 0x80, hi: 0x8f},\n\t{value: 0x44d5, lo: 0x90, hi: 0x9f},\n\t{value: 0x44f5, lo: 0xa0, hi: 0xaf},\n\t{value: 0x44d5, lo: 0xb0, hi: 0xbf},\n\t// Block 0x7d, offset 0x3fb\n\t{value: 0x0000, lo: 0x0c},\n\t{value: 0x0008, lo: 0x80, hi: 0xa2},\n\t{value: 0x3008, lo: 0xa3, hi: 0xa4},\n\t{value: 0x3308, lo: 0xa5, hi: 0xa5},\n\t{value: 0x3008, lo: 0xa6, hi: 0xa7},\n\t{value: 0x3308, lo: 0xa8, hi: 0xa8},\n\t{value: 0x3008, lo: 0xa9, hi: 0xaa},\n\t{value: 0x0018, lo: 0xab, hi: 0xab},\n\t{value: 0x3008, lo: 0xac, hi: 0xac},\n\t{value: 0x3b08, lo: 0xad, hi: 0xad},\n\t{value: 0x0040, lo: 0xae, hi: 0xaf},\n\t{value: 0x0008, lo: 0xb0, hi: 0xb9},\n\t{value: 0x0040, lo: 0xba, hi: 0xbf},\n\t// Block 0x7e, offset 0x408\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0008, lo: 0x80, hi: 0xa3},\n\t{value: 0x0040, lo: 0xa4, hi: 0xaf},\n\t{value: 0x0018, lo: 0xb0, hi: 0xbf},\n\t// Block 0x7f, offset 0x40c\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0018, lo: 0x80, hi: 0x86},\n\t{value: 0x0040, lo: 0x87, hi: 0x8a},\n\t{value: 0x0018, lo: 0x8b, hi: 0xbb},\n\t{value: 0x0040, lo: 0xbc, hi: 0xbf},\n\t// Block 0x80, offset 0x411\n\t{value: 0x0020, lo: 0x01},\n\t{value: 0x4515, lo: 0x80, hi: 0xbf},\n\t// Block 0x81, offset 0x413\n\t{value: 0x0020, lo: 0x03},\n\t{value: 0x4d15, lo: 0x80, hi: 0x94},\n\t{value: 0x4ad5, lo: 0x95, hi: 0x95},\n\t{value: 0x4fb5, lo: 0x96, hi: 0xbf},\n\t// Block 0x82, offset 0x417\n\t{value: 0x0020, lo: 0x01},\n\t{value: 0x54f5, lo: 0x80, hi: 0xbf},\n\t// Block 0x83, offset 0x419\n\t{value: 0x0020, lo: 0x03},\n\t{value: 0x5cf5, lo: 0x80, hi: 0x84},\n\t{value: 0x5655, lo: 0x85, hi: 0x85},\n\t{value: 0x5d95, lo: 0x86, hi: 0xbf},\n\t// Block 0x84, offset 0x41d\n\t{value: 0x0020, lo: 0x08},\n\t{value: 0x6b55, lo: 0x80, hi: 0x8f},\n\t{value: 0x6d15, lo: 0x90, hi: 0x90},\n\t{value: 0x6d55, lo: 0x91, hi: 0xab},\n\t{value: 0x6ea1, lo: 0xac, hi: 0xac},\n\t{value: 0x70b5, lo: 0xad, hi: 0xad},\n\t{value: 0x0040, lo: 0xae, hi: 0xae},\n\t{value: 0x0040, lo: 0xaf, hi: 0xaf},\n\t{value: 0x70d5, lo: 0xb0, hi: 0xbf},\n\t// Block 0x85, offset 0x426\n\t{value: 0x0020, lo: 0x05},\n\t{value: 0x72d5, lo: 0x80, hi: 0xad},\n\t{value: 0x6535, lo: 0xae, hi: 0xae},\n\t{value: 0x7895, lo: 0xaf, hi: 0xb5},\n\t{value: 0x6f55, lo: 0xb6, hi: 0xb6},\n\t{value: 0x7975, lo: 0xb7, hi: 0xbf},\n\t// Block 0x86, offset 0x42c\n\t{value: 0x0028, lo: 0x03},\n\t{value: 0x7c21, lo: 0x80, hi: 0x82},\n\t{value: 0x7be1, lo: 0x83, hi: 0x83},\n\t{value: 0x7c99, lo: 0x84, hi: 0xbf},\n\t// Block 0x87, offset 0x430\n\t{value: 0x0038, lo: 0x0f},\n\t{value: 0x9db1, lo: 0x80, hi: 0x83},\n\t{value: 0x9e59, lo: 0x84, hi: 0x85},\n\t{value: 0x9e91, lo: 0x86, hi: 0x87},\n\t{value: 0x9ec9, lo: 0x88, hi: 0x8f},\n\t{value: 0x0040, lo: 0x90, hi: 0x90},\n\t{value: 0x0040, lo: 0x91, hi: 0x91},\n\t{value: 0xa089, lo: 0x92, hi: 0x97},\n\t{value: 0xa1a1, lo: 0x98, hi: 0x9c},\n\t{value: 0xa281, lo: 0x9d, hi: 0xb3},\n\t{value: 0x9d41, lo: 0xb4, hi: 0xb4},\n\t{value: 0x9db1, lo: 0xb5, hi: 0xb5},\n\t{value: 0xa789, lo: 0xb6, hi: 0xbb},\n\t{value: 0xa869, lo: 0xbc, hi: 0xbc},\n\t{value: 0xa7f9, lo: 0xbd, hi: 0xbd},\n\t{value: 0xa8d9, lo: 0xbe, hi: 0xbf},\n\t// Block 0x88, offset 0x440\n\t{value: 0x0000, lo: 0x09},\n\t{value: 0x0008, lo: 0x80, hi: 0x8b},\n\t{value: 0x0040, lo: 0x8c, hi: 0x8c},\n\t{value: 0x0008, lo: 0x8d, hi: 0xa6},\n\t{value: 0x0040, lo: 0xa7, hi: 0xa7},\n\t{value: 0x0008, lo: 0xa8, hi: 0xba},\n\t{value: 0x0040, lo: 0xbb, hi: 0xbb},\n\t{value: 0x0008, lo: 0xbc, hi: 0xbd},\n\t{value: 0x0040, lo: 0xbe, hi: 0xbe},\n\t{value: 0x0008, lo: 0xbf, hi: 0xbf},\n\t// Block 0x89, offset 0x44a\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0008, lo: 0x80, hi: 0x8d},\n\t{value: 0x0040, lo: 0x8e, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x9d},\n\t{value: 0x0040, lo: 0x9e, hi: 0xbf},\n\t// Block 0x8a, offset 0x44f\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0008, lo: 0x80, hi: 0xba},\n\t{value: 0x0040, lo: 0xbb, hi: 0xbf},\n\t// Block 0x8b, offset 0x452\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x0018, lo: 0x80, hi: 0x82},\n\t{value: 0x0040, lo: 0x83, hi: 0x86},\n\t{value: 0x0018, lo: 0x87, hi: 0xb3},\n\t{value: 0x0040, lo: 0xb4, hi: 0xb6},\n\t{value: 0x0018, lo: 0xb7, hi: 0xbf},\n\t// Block 0x8c, offset 0x458\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0x0018, lo: 0x80, hi: 0x8e},\n\t{value: 0x0040, lo: 0x8f, hi: 0x8f},\n\t{value: 0x0018, lo: 0x90, hi: 0x9b},\n\t{value: 0x0040, lo: 0x9c, hi: 0x9f},\n\t{value: 0x0018, lo: 0xa0, hi: 0xa0},\n\t{value: 0x0040, lo: 0xa1, hi: 0xbf},\n\t// Block 0x8d, offset 0x45f\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0040, lo: 0x80, hi: 0x8f},\n\t{value: 0x0018, lo: 0x90, hi: 0xbc},\n\t{value: 0x3308, lo: 0xbd, hi: 0xbd},\n\t{value: 0x0040, lo: 0xbe, hi: 0xbf},\n\t// Block 0x8e, offset 0x464\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0008, lo: 0x80, hi: 0x9c},\n\t{value: 0x0040, lo: 0x9d, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xbf},\n\t// Block 0x8f, offset 0x468\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x0008, lo: 0x80, hi: 0x90},\n\t{value: 0x0040, lo: 0x91, hi: 0x9f},\n\t{value: 0x3308, lo: 0xa0, hi: 0xa0},\n\t{value: 0x0018, lo: 0xa1, hi: 0xbb},\n\t{value: 0x0040, lo: 0xbc, hi: 0xbf},\n\t// Block 0x90, offset 0x46e\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0008, lo: 0x80, hi: 0x9f},\n\t{value: 0x0018, lo: 0xa0, hi: 0xa3},\n\t{value: 0x0040, lo: 0xa4, hi: 0xaf},\n\t{value: 0x0008, lo: 0xb0, hi: 0xbf},\n\t// Block 0x91, offset 0x473\n\t{value: 0x0000, lo: 0x08},\n\t{value: 0x0008, lo: 0x80, hi: 0x80},\n\t{value: 0x0018, lo: 0x81, hi: 0x81},\n\t{value: 0x0008, lo: 0x82, hi: 0x89},\n\t{value: 0x0018, lo: 0x8a, hi: 0x8a},\n\t{value: 0x0040, lo: 0x8b, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0xb5},\n\t{value: 0x3308, lo: 0xb6, hi: 0xba},\n\t{value: 0x0040, lo: 0xbb, hi: 0xbf},\n\t// Block 0x92, offset 0x47c\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0008, lo: 0x80, hi: 0x9d},\n\t{value: 0x0040, lo: 0x9e, hi: 0x9e},\n\t{value: 0x0018, lo: 0x9f, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xbf},\n\t// Block 0x93, offset 0x481\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x0008, lo: 0x80, hi: 0x83},\n\t{value: 0x0040, lo: 0x84, hi: 0x87},\n\t{value: 0x0008, lo: 0x88, hi: 0x8f},\n\t{value: 0x0018, lo: 0x90, hi: 0x95},\n\t{value: 0x0040, lo: 0x96, hi: 0xbf},\n\t// Block 0x94, offset 0x487\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0xe145, lo: 0x80, hi: 0x87},\n\t{value: 0xe1c5, lo: 0x88, hi: 0x8f},\n\t{value: 0xe145, lo: 0x90, hi: 0x97},\n\t{value: 0x8ad5, lo: 0x98, hi: 0x9f},\n\t{value: 0x8aed, lo: 0xa0, hi: 0xa7},\n\t{value: 0x0008, lo: 0xa8, hi: 0xbf},\n\t// Block 0x95, offset 0x48e\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0x0008, lo: 0x80, hi: 0x9d},\n\t{value: 0x0040, lo: 0x9e, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xa9},\n\t{value: 0x0040, lo: 0xaa, hi: 0xaf},\n\t{value: 0x8aed, lo: 0xb0, hi: 0xb7},\n\t{value: 0x8ad5, lo: 0xb8, hi: 0xbf},\n\t// Block 0x96, offset 0x495\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0xe145, lo: 0x80, hi: 0x87},\n\t{value: 0xe1c5, lo: 0x88, hi: 0x8f},\n\t{value: 0xe145, lo: 0x90, hi: 0x93},\n\t{value: 0x0040, lo: 0x94, hi: 0x97},\n\t{value: 0x0008, lo: 0x98, hi: 0xbb},\n\t{value: 0x0040, lo: 0xbc, hi: 0xbf},\n\t// Block 0x97, offset 0x49c\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0008, lo: 0x80, hi: 0xa7},\n\t{value: 0x0040, lo: 0xa8, hi: 0xaf},\n\t{value: 0x0008, lo: 0xb0, hi: 0xbf},\n\t// Block 0x98, offset 0x4a0\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0008, lo: 0x80, hi: 0xa3},\n\t{value: 0x0040, lo: 0xa4, hi: 0xae},\n\t{value: 0x0018, lo: 0xaf, hi: 0xaf},\n\t{value: 0x0040, lo: 0xb0, hi: 0xbf},\n\t// Block 0x99, offset 0x4a5\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0008, lo: 0x80, hi: 0xb6},\n\t{value: 0x0040, lo: 0xb7, hi: 0xbf},\n\t// Block 0x9a, offset 0x4a8\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0008, lo: 0x80, hi: 0x95},\n\t{value: 0x0040, lo: 0x96, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xa7},\n\t{value: 0x0040, lo: 0xa8, hi: 0xbf},\n\t// Block 0x9b, offset 0x4ad\n\t{value: 0x0000, lo: 0x0b},\n\t{value: 0x0808, lo: 0x80, hi: 0x85},\n\t{value: 0x0040, lo: 0x86, hi: 0x87},\n\t{value: 0x0808, lo: 0x88, hi: 0x88},\n\t{value: 0x0040, lo: 0x89, hi: 0x89},\n\t{value: 0x0808, lo: 0x8a, hi: 0xb5},\n\t{value: 0x0040, lo: 0xb6, hi: 0xb6},\n\t{value: 0x0808, lo: 0xb7, hi: 0xb8},\n\t{value: 0x0040, lo: 0xb9, hi: 0xbb},\n\t{value: 0x0808, lo: 0xbc, hi: 0xbc},\n\t{value: 0x0040, lo: 0xbd, hi: 0xbe},\n\t{value: 0x0808, lo: 0xbf, hi: 0xbf},\n\t// Block 0x9c, offset 0x4b9\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x0808, lo: 0x80, hi: 0x95},\n\t{value: 0x0040, lo: 0x96, hi: 0x96},\n\t{value: 0x0818, lo: 0x97, hi: 0x9f},\n\t{value: 0x0808, lo: 0xa0, hi: 0xb6},\n\t{value: 0x0818, lo: 0xb7, hi: 0xbf},\n\t// Block 0x9d, offset 0x4bf\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0808, lo: 0x80, hi: 0x9e},\n\t{value: 0x0040, lo: 0x9f, hi: 0xa6},\n\t{value: 0x0818, lo: 0xa7, hi: 0xaf},\n\t{value: 0x0040, lo: 0xb0, hi: 0xbf},\n\t// Block 0x9e, offset 0x4c4\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0x0040, lo: 0x80, hi: 0x9f},\n\t{value: 0x0808, lo: 0xa0, hi: 0xb2},\n\t{value: 0x0040, lo: 0xb3, hi: 0xb3},\n\t{value: 0x0808, lo: 0xb4, hi: 0xb5},\n\t{value: 0x0040, lo: 0xb6, hi: 0xba},\n\t{value: 0x0818, lo: 0xbb, hi: 0xbf},\n\t// Block 0x9f, offset 0x4cb\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0x0808, lo: 0x80, hi: 0x95},\n\t{value: 0x0818, lo: 0x96, hi: 0x9b},\n\t{value: 0x0040, lo: 0x9c, hi: 0x9e},\n\t{value: 0x0018, lo: 0x9f, hi: 0x9f},\n\t{value: 0x0808, lo: 0xa0, hi: 0xb9},\n\t{value: 0x0040, lo: 0xba, hi: 0xbe},\n\t{value: 0x0818, lo: 0xbf, hi: 0xbf},\n\t// Block 0xa0, offset 0x4d3\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0808, lo: 0x80, hi: 0xb7},\n\t{value: 0x0040, lo: 0xb8, hi: 0xbb},\n\t{value: 0x0818, lo: 0xbc, hi: 0xbd},\n\t{value: 0x0808, lo: 0xbe, hi: 0xbf},\n\t// Block 0xa1, offset 0x4d8\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0818, lo: 0x80, hi: 0x8f},\n\t{value: 0x0040, lo: 0x90, hi: 0x91},\n\t{value: 0x0818, lo: 0x92, hi: 0xbf},\n\t// Block 0xa2, offset 0x4dc\n\t{value: 0x0000, lo: 0x0f},\n\t{value: 0x0808, lo: 0x80, hi: 0x80},\n\t{value: 0x3308, lo: 0x81, hi: 0x83},\n\t{value: 0x0040, lo: 0x84, hi: 0x84},\n\t{value: 0x3308, lo: 0x85, hi: 0x86},\n\t{value: 0x0040, lo: 0x87, hi: 0x8b},\n\t{value: 0x3308, lo: 0x8c, hi: 0x8f},\n\t{value: 0x0808, lo: 0x90, hi: 0x93},\n\t{value: 0x0040, lo: 0x94, hi: 0x94},\n\t{value: 0x0808, lo: 0x95, hi: 0x97},\n\t{value: 0x0040, lo: 0x98, hi: 0x98},\n\t{value: 0x0808, lo: 0x99, hi: 0xb3},\n\t{value: 0x0040, lo: 0xb4, hi: 0xb7},\n\t{value: 0x3308, lo: 0xb8, hi: 0xba},\n\t{value: 0x0040, lo: 0xbb, hi: 0xbe},\n\t{value: 0x3b08, lo: 0xbf, hi: 0xbf},\n\t// Block 0xa3, offset 0x4ec\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0x0818, lo: 0x80, hi: 0x87},\n\t{value: 0x0040, lo: 0x88, hi: 0x8f},\n\t{value: 0x0818, lo: 0x90, hi: 0x98},\n\t{value: 0x0040, lo: 0x99, hi: 0x9f},\n\t{value: 0x0808, lo: 0xa0, hi: 0xbc},\n\t{value: 0x0818, lo: 0xbd, hi: 0xbf},\n\t// Block 0xa4, offset 0x4f3\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0808, lo: 0x80, hi: 0x9c},\n\t{value: 0x0818, lo: 0x9d, hi: 0x9f},\n\t{value: 0x0040, lo: 0xa0, hi: 0xbf},\n\t// Block 0xa5, offset 0x4f7\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0808, lo: 0x80, hi: 0xb5},\n\t{value: 0x0040, lo: 0xb6, hi: 0xb8},\n\t{value: 0x0018, lo: 0xb9, hi: 0xbf},\n\t// Block 0xa6, offset 0x4fb\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0x0808, lo: 0x80, hi: 0x95},\n\t{value: 0x0040, lo: 0x96, hi: 0x97},\n\t{value: 0x0818, lo: 0x98, hi: 0x9f},\n\t{value: 0x0808, lo: 0xa0, hi: 0xb2},\n\t{value: 0x0040, lo: 0xb3, hi: 0xb7},\n\t{value: 0x0818, lo: 0xb8, hi: 0xbf},\n\t// Block 0xa7, offset 0x502\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x0808, lo: 0x80, hi: 0xbf},\n\t// Block 0xa8, offset 0x504\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0808, lo: 0x80, hi: 0x88},\n\t{value: 0x0040, lo: 0x89, hi: 0xbf},\n\t// Block 0xa9, offset 0x507\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x03dd, lo: 0x80, hi: 0xb2},\n\t{value: 0x0040, lo: 0xb3, hi: 0xbf},\n\t// Block 0xaa, offset 0x50a\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0808, lo: 0x80, hi: 0xb2},\n\t{value: 0x0040, lo: 0xb3, hi: 0xb9},\n\t{value: 0x0818, lo: 0xba, hi: 0xbf},\n\t// Block 0xab, offset 0x50e\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0040, lo: 0x80, hi: 0x9f},\n\t{value: 0x0818, lo: 0xa0, hi: 0xbe},\n\t{value: 0x0040, lo: 0xbf, hi: 0xbf},\n\t// Block 0xac, offset 0x512\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x3008, lo: 0x80, hi: 0x80},\n\t{value: 0x3308, lo: 0x81, hi: 0x81},\n\t{value: 0x3008, lo: 0x82, hi: 0x82},\n\t{value: 0x0008, lo: 0x83, hi: 0xb7},\n\t{value: 0x3308, lo: 0xb8, hi: 0xbf},\n\t// Block 0xad, offset 0x518\n\t{value: 0x0000, lo: 0x08},\n\t{value: 0x3308, lo: 0x80, hi: 0x85},\n\t{value: 0x3b08, lo: 0x86, hi: 0x86},\n\t{value: 0x0018, lo: 0x87, hi: 0x8d},\n\t{value: 0x0040, lo: 0x8e, hi: 0x91},\n\t{value: 0x0018, lo: 0x92, hi: 0xa5},\n\t{value: 0x0008, lo: 0xa6, hi: 0xaf},\n\t{value: 0x0040, lo: 0xb0, hi: 0xbe},\n\t{value: 0x3b08, lo: 0xbf, hi: 0xbf},\n\t// Block 0xae, offset 0x521\n\t{value: 0x0000, lo: 0x0b},\n\t{value: 0x3308, lo: 0x80, hi: 0x81},\n\t{value: 0x3008, lo: 0x82, hi: 0x82},\n\t{value: 0x0008, lo: 0x83, hi: 0xaf},\n\t{value: 0x3008, lo: 0xb0, hi: 0xb2},\n\t{value: 0x3308, lo: 0xb3, hi: 0xb6},\n\t{value: 0x3008, lo: 0xb7, hi: 0xb8},\n\t{value: 0x3b08, lo: 0xb9, hi: 0xb9},\n\t{value: 0x3308, lo: 0xba, hi: 0xba},\n\t{value: 0x0018, lo: 0xbb, hi: 0xbc},\n\t{value: 0x0340, lo: 0xbd, hi: 0xbd},\n\t{value: 0x0018, lo: 0xbe, hi: 0xbf},\n\t// Block 0xaf, offset 0x52d\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0x0018, lo: 0x80, hi: 0x81},\n\t{value: 0x0040, lo: 0x82, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0xa8},\n\t{value: 0x0040, lo: 0xa9, hi: 0xaf},\n\t{value: 0x0008, lo: 0xb0, hi: 0xb9},\n\t{value: 0x0040, lo: 0xba, hi: 0xbf},\n\t// Block 0xb0, offset 0x534\n\t{value: 0x0000, lo: 0x08},\n\t{value: 0x3308, lo: 0x80, hi: 0x82},\n\t{value: 0x0008, lo: 0x83, hi: 0xa6},\n\t{value: 0x3308, lo: 0xa7, hi: 0xab},\n\t{value: 0x3008, lo: 0xac, hi: 0xac},\n\t{value: 0x3308, lo: 0xad, hi: 0xb2},\n\t{value: 0x3b08, lo: 0xb3, hi: 0xb4},\n\t{value: 0x0040, lo: 0xb5, hi: 0xb5},\n\t{value: 0x0008, lo: 0xb6, hi: 0xbf},\n\t// Block 0xb1, offset 0x53d\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0x0018, lo: 0x80, hi: 0x83},\n\t{value: 0x0040, lo: 0x84, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0xb2},\n\t{value: 0x3308, lo: 0xb3, hi: 0xb3},\n\t{value: 0x0018, lo: 0xb4, hi: 0xb5},\n\t{value: 0x0008, lo: 0xb6, hi: 0xb6},\n\t{value: 0x0040, lo: 0xb7, hi: 0xbf},\n\t// Block 0xb2, offset 0x545\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0x3308, lo: 0x80, hi: 0x81},\n\t{value: 0x3008, lo: 0x82, hi: 0x82},\n\t{value: 0x0008, lo: 0x83, hi: 0xb2},\n\t{value: 0x3008, lo: 0xb3, hi: 0xb5},\n\t{value: 0x3308, lo: 0xb6, hi: 0xbe},\n\t{value: 0x3008, lo: 0xbf, hi: 0xbf},\n\t// Block 0xb3, offset 0x54c\n\t{value: 0x0000, lo: 0x0d},\n\t{value: 0x3808, lo: 0x80, hi: 0x80},\n\t{value: 0x0008, lo: 0x81, hi: 0x84},\n\t{value: 0x0018, lo: 0x85, hi: 0x89},\n\t{value: 0x3308, lo: 0x8a, hi: 0x8c},\n\t{value: 0x0018, lo: 0x8d, hi: 0x8d},\n\t{value: 0x0040, lo: 0x8e, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x9a},\n\t{value: 0x0018, lo: 0x9b, hi: 0x9b},\n\t{value: 0x0008, lo: 0x9c, hi: 0x9c},\n\t{value: 0x0018, lo: 0x9d, hi: 0x9f},\n\t{value: 0x0040, lo: 0xa0, hi: 0xa0},\n\t{value: 0x0018, lo: 0xa1, hi: 0xb4},\n\t{value: 0x0040, lo: 0xb5, hi: 0xbf},\n\t// Block 0xb4, offset 0x55a\n\t{value: 0x0000, lo: 0x0c},\n\t{value: 0x0008, lo: 0x80, hi: 0x91},\n\t{value: 0x0040, lo: 0x92, hi: 0x92},\n\t{value: 0x0008, lo: 0x93, hi: 0xab},\n\t{value: 0x3008, lo: 0xac, hi: 0xae},\n\t{value: 0x3308, lo: 0xaf, hi: 0xb1},\n\t{value: 0x3008, lo: 0xb2, hi: 0xb3},\n\t{value: 0x3308, lo: 0xb4, hi: 0xb4},\n\t{value: 0x3808, lo: 0xb5, hi: 0xb5},\n\t{value: 0x3308, lo: 0xb6, hi: 0xb7},\n\t{value: 0x0018, lo: 0xb8, hi: 0xbd},\n\t{value: 0x3308, lo: 0xbe, hi: 0xbe},\n\t{value: 0x0040, lo: 0xbf, hi: 0xbf},\n\t// Block 0xb5, offset 0x567\n\t{value: 0x0000, lo: 0x0c},\n\t{value: 0x0008, lo: 0x80, hi: 0x86},\n\t{value: 0x0040, lo: 0x87, hi: 0x87},\n\t{value: 0x0008, lo: 0x88, hi: 0x88},\n\t{value: 0x0040, lo: 0x89, hi: 0x89},\n\t{value: 0x0008, lo: 0x8a, hi: 0x8d},\n\t{value: 0x0040, lo: 0x8e, hi: 0x8e},\n\t{value: 0x0008, lo: 0x8f, hi: 0x9d},\n\t{value: 0x0040, lo: 0x9e, hi: 0x9e},\n\t{value: 0x0008, lo: 0x9f, hi: 0xa8},\n\t{value: 0x0018, lo: 0xa9, hi: 0xa9},\n\t{value: 0x0040, lo: 0xaa, hi: 0xaf},\n\t{value: 0x0008, lo: 0xb0, hi: 0xbf},\n\t// Block 0xb6, offset 0x574\n\t{value: 0x0000, lo: 0x08},\n\t{value: 0x0008, lo: 0x80, hi: 0x9e},\n\t{value: 0x3308, lo: 0x9f, hi: 0x9f},\n\t{value: 0x3008, lo: 0xa0, hi: 0xa2},\n\t{value: 0x3308, lo: 0xa3, hi: 0xa9},\n\t{value: 0x3b08, lo: 0xaa, hi: 0xaa},\n\t{value: 0x0040, lo: 0xab, hi: 0xaf},\n\t{value: 0x0008, lo: 0xb0, hi: 0xb9},\n\t{value: 0x0040, lo: 0xba, hi: 0xbf},\n\t// Block 0xb7, offset 0x57d\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0008, lo: 0x80, hi: 0xb4},\n\t{value: 0x3008, lo: 0xb5, hi: 0xb7},\n\t{value: 0x3308, lo: 0xb8, hi: 0xbf},\n\t// Block 0xb8, offset 0x581\n\t{value: 0x0000, lo: 0x0d},\n\t{value: 0x3008, lo: 0x80, hi: 0x81},\n\t{value: 0x3b08, lo: 0x82, hi: 0x82},\n\t{value: 0x3308, lo: 0x83, hi: 0x84},\n\t{value: 0x3008, lo: 0x85, hi: 0x85},\n\t{value: 0x3308, lo: 0x86, hi: 0x86},\n\t{value: 0x0008, lo: 0x87, hi: 0x8a},\n\t{value: 0x0018, lo: 0x8b, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x99},\n\t{value: 0x0040, lo: 0x9a, hi: 0x9a},\n\t{value: 0x0018, lo: 0x9b, hi: 0x9b},\n\t{value: 0x0040, lo: 0x9c, hi: 0x9c},\n\t{value: 0x0018, lo: 0x9d, hi: 0x9d},\n\t{value: 0x0040, lo: 0x9e, hi: 0xbf},\n\t// Block 0xb9, offset 0x58f\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0x0008, lo: 0x80, hi: 0xaf},\n\t{value: 0x3008, lo: 0xb0, hi: 0xb2},\n\t{value: 0x3308, lo: 0xb3, hi: 0xb8},\n\t{value: 0x3008, lo: 0xb9, hi: 0xb9},\n\t{value: 0x3308, lo: 0xba, hi: 0xba},\n\t{value: 0x3008, lo: 0xbb, hi: 0xbe},\n\t{value: 0x3308, lo: 0xbf, hi: 0xbf},\n\t// Block 0xba, offset 0x597\n\t{value: 0x0000, lo: 0x0a},\n\t{value: 0x3308, lo: 0x80, hi: 0x80},\n\t{value: 0x3008, lo: 0x81, hi: 0x81},\n\t{value: 0x3b08, lo: 0x82, hi: 0x82},\n\t{value: 0x3308, lo: 0x83, hi: 0x83},\n\t{value: 0x0008, lo: 0x84, hi: 0x85},\n\t{value: 0x0018, lo: 0x86, hi: 0x86},\n\t{value: 0x0008, lo: 0x87, hi: 0x87},\n\t{value: 0x0040, lo: 0x88, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x99},\n\t{value: 0x0040, lo: 0x9a, hi: 0xbf},\n\t// Block 0xbb, offset 0x5a2\n\t{value: 0x0000, lo: 0x08},\n\t{value: 0x0008, lo: 0x80, hi: 0xae},\n\t{value: 0x3008, lo: 0xaf, hi: 0xb1},\n\t{value: 0x3308, lo: 0xb2, hi: 0xb5},\n\t{value: 0x0040, lo: 0xb6, hi: 0xb7},\n\t{value: 0x3008, lo: 0xb8, hi: 0xbb},\n\t{value: 0x3308, lo: 0xbc, hi: 0xbd},\n\t{value: 0x3008, lo: 0xbe, hi: 0xbe},\n\t{value: 0x3b08, lo: 0xbf, hi: 0xbf},\n\t// Block 0xbc, offset 0x5ab\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x3308, lo: 0x80, hi: 0x80},\n\t{value: 0x0018, lo: 0x81, hi: 0x97},\n\t{value: 0x0008, lo: 0x98, hi: 0x9b},\n\t{value: 0x3308, lo: 0x9c, hi: 0x9d},\n\t{value: 0x0040, lo: 0x9e, hi: 0xbf},\n\t// Block 0xbd, offset 0x5b1\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0x0008, lo: 0x80, hi: 0xaf},\n\t{value: 0x3008, lo: 0xb0, hi: 0xb2},\n\t{value: 0x3308, lo: 0xb3, hi: 0xba},\n\t{value: 0x3008, lo: 0xbb, hi: 0xbc},\n\t{value: 0x3308, lo: 0xbd, hi: 0xbd},\n\t{value: 0x3008, lo: 0xbe, hi: 0xbe},\n\t{value: 0x3b08, lo: 0xbf, hi: 0xbf},\n\t// Block 0xbe, offset 0x5b9\n\t{value: 0x0000, lo: 0x08},\n\t{value: 0x3308, lo: 0x80, hi: 0x80},\n\t{value: 0x0018, lo: 0x81, hi: 0x83},\n\t{value: 0x0008, lo: 0x84, hi: 0x84},\n\t{value: 0x0040, lo: 0x85, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x99},\n\t{value: 0x0040, lo: 0x9a, hi: 0x9f},\n\t{value: 0x0018, lo: 0xa0, hi: 0xac},\n\t{value: 0x0040, lo: 0xad, hi: 0xbf},\n\t// Block 0xbf, offset 0x5c2\n\t{value: 0x0000, lo: 0x09},\n\t{value: 0x0008, lo: 0x80, hi: 0xaa},\n\t{value: 0x3308, lo: 0xab, hi: 0xab},\n\t{value: 0x3008, lo: 0xac, hi: 0xac},\n\t{value: 0x3308, lo: 0xad, hi: 0xad},\n\t{value: 0x3008, lo: 0xae, hi: 0xaf},\n\t{value: 0x3308, lo: 0xb0, hi: 0xb5},\n\t{value: 0x3808, lo: 0xb6, hi: 0xb6},\n\t{value: 0x3308, lo: 0xb7, hi: 0xb7},\n\t{value: 0x0040, lo: 0xb8, hi: 0xbf},\n\t// Block 0xc0, offset 0x5cc\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0008, lo: 0x80, hi: 0x89},\n\t{value: 0x0040, lo: 0x8a, hi: 0xbf},\n\t// Block 0xc1, offset 0x5cf\n\t{value: 0x0000, lo: 0x0b},\n\t{value: 0x0008, lo: 0x80, hi: 0x99},\n\t{value: 0x0040, lo: 0x9a, hi: 0x9c},\n\t{value: 0x3308, lo: 0x9d, hi: 0x9f},\n\t{value: 0x3008, lo: 0xa0, hi: 0xa1},\n\t{value: 0x3308, lo: 0xa2, hi: 0xa5},\n\t{value: 0x3008, lo: 0xa6, hi: 0xa6},\n\t{value: 0x3308, lo: 0xa7, hi: 0xaa},\n\t{value: 0x3b08, lo: 0xab, hi: 0xab},\n\t{value: 0x0040, lo: 0xac, hi: 0xaf},\n\t{value: 0x0008, lo: 0xb0, hi: 0xb9},\n\t{value: 0x0018, lo: 0xba, hi: 0xbf},\n\t// Block 0xc2, offset 0x5db\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0040, lo: 0x80, hi: 0x9f},\n\t{value: 0x049d, lo: 0xa0, hi: 0xbf},\n\t// Block 0xc3, offset 0x5de\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0008, lo: 0x80, hi: 0xa9},\n\t{value: 0x0018, lo: 0xaa, hi: 0xb2},\n\t{value: 0x0040, lo: 0xb3, hi: 0xbe},\n\t{value: 0x0008, lo: 0xbf, hi: 0xbf},\n\t// Block 0xc4, offset 0x5e3\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0008, lo: 0x80, hi: 0xb8},\n\t{value: 0x0040, lo: 0xb9, hi: 0xbf},\n\t// Block 0xc5, offset 0x5e6\n\t{value: 0x0000, lo: 0x09},\n\t{value: 0x0008, lo: 0x80, hi: 0x88},\n\t{value: 0x0040, lo: 0x89, hi: 0x89},\n\t{value: 0x0008, lo: 0x8a, hi: 0xae},\n\t{value: 0x3008, lo: 0xaf, hi: 0xaf},\n\t{value: 0x3308, lo: 0xb0, hi: 0xb6},\n\t{value: 0x0040, lo: 0xb7, hi: 0xb7},\n\t{value: 0x3308, lo: 0xb8, hi: 0xbd},\n\t{value: 0x3008, lo: 0xbe, hi: 0xbe},\n\t{value: 0x3b08, lo: 0xbf, hi: 0xbf},\n\t// Block 0xc6, offset 0x5f0\n\t{value: 0x0000, lo: 0x08},\n\t{value: 0x0008, lo: 0x80, hi: 0x80},\n\t{value: 0x0018, lo: 0x81, hi: 0x85},\n\t{value: 0x0040, lo: 0x86, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x99},\n\t{value: 0x0018, lo: 0x9a, hi: 0xac},\n\t{value: 0x0040, lo: 0xad, hi: 0xaf},\n\t{value: 0x0018, lo: 0xb0, hi: 0xb1},\n\t{value: 0x0008, lo: 0xb2, hi: 0xbf},\n\t// Block 0xc7, offset 0x5f9\n\t{value: 0x0000, lo: 0x0b},\n\t{value: 0x0008, lo: 0x80, hi: 0x8f},\n\t{value: 0x0040, lo: 0x90, hi: 0x91},\n\t{value: 0x3308, lo: 0x92, hi: 0xa7},\n\t{value: 0x0040, lo: 0xa8, hi: 0xa8},\n\t{value: 0x3008, lo: 0xa9, hi: 0xa9},\n\t{value: 0x3308, lo: 0xaa, hi: 0xb0},\n\t{value: 0x3008, lo: 0xb1, hi: 0xb1},\n\t{value: 0x3308, lo: 0xb2, hi: 0xb3},\n\t{value: 0x3008, lo: 0xb4, hi: 0xb4},\n\t{value: 0x3308, lo: 0xb5, hi: 0xb6},\n\t{value: 0x0040, lo: 0xb7, hi: 0xbf},\n\t// Block 0xc8, offset 0x605\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0008, lo: 0x80, hi: 0x99},\n\t{value: 0x0040, lo: 0x9a, hi: 0xbf},\n\t// Block 0xc9, offset 0x608\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0018, lo: 0x80, hi: 0xae},\n\t{value: 0x0040, lo: 0xaf, hi: 0xaf},\n\t{value: 0x0018, lo: 0xb0, hi: 0xb4},\n\t{value: 0x0040, lo: 0xb5, hi: 0xbf},\n\t// Block 0xca, offset 0x60d\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0008, lo: 0x80, hi: 0x83},\n\t{value: 0x0040, lo: 0x84, hi: 0xbf},\n\t// Block 0xcb, offset 0x610\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0008, lo: 0x80, hi: 0xae},\n\t{value: 0x0040, lo: 0xaf, hi: 0xbf},\n\t// Block 0xcc, offset 0x613\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0008, lo: 0x80, hi: 0x86},\n\t{value: 0x0040, lo: 0x87, hi: 0xbf},\n\t// Block 0xcd, offset 0x616\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0x0008, lo: 0x80, hi: 0x9e},\n\t{value: 0x0040, lo: 0x9f, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xa9},\n\t{value: 0x0040, lo: 0xaa, hi: 0xad},\n\t{value: 0x0018, lo: 0xae, hi: 0xaf},\n\t{value: 0x0040, lo: 0xb0, hi: 0xbf},\n\t// Block 0xce, offset 0x61d\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0x0040, lo: 0x80, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0xad},\n\t{value: 0x0040, lo: 0xae, hi: 0xaf},\n\t{value: 0x3308, lo: 0xb0, hi: 0xb4},\n\t{value: 0x0018, lo: 0xb5, hi: 0xb5},\n\t{value: 0x0040, lo: 0xb6, hi: 0xbf},\n\t// Block 0xcf, offset 0x624\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0008, lo: 0x80, hi: 0xaf},\n\t{value: 0x3308, lo: 0xb0, hi: 0xb6},\n\t{value: 0x0018, lo: 0xb7, hi: 0xbf},\n\t// Block 0xd0, offset 0x628\n\t{value: 0x0000, lo: 0x0a},\n\t{value: 0x0008, lo: 0x80, hi: 0x83},\n\t{value: 0x0018, lo: 0x84, hi: 0x85},\n\t{value: 0x0040, lo: 0x86, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x99},\n\t{value: 0x0040, lo: 0x9a, hi: 0x9a},\n\t{value: 0x0018, lo: 0x9b, hi: 0xa1},\n\t{value: 0x0040, lo: 0xa2, hi: 0xa2},\n\t{value: 0x0008, lo: 0xa3, hi: 0xb7},\n\t{value: 0x0040, lo: 0xb8, hi: 0xbc},\n\t{value: 0x0008, lo: 0xbd, hi: 0xbf},\n\t// Block 0xd1, offset 0x633\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0008, lo: 0x80, hi: 0x8f},\n\t{value: 0x0040, lo: 0x90, hi: 0xbf},\n\t// Block 0xd2, offset 0x636\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x0008, lo: 0x80, hi: 0x84},\n\t{value: 0x0040, lo: 0x85, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x90},\n\t{value: 0x3008, lo: 0x91, hi: 0xbe},\n\t{value: 0x0040, lo: 0xbf, hi: 0xbf},\n\t// Block 0xd3, offset 0x63c\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0040, lo: 0x80, hi: 0x8e},\n\t{value: 0x3308, lo: 0x8f, hi: 0x92},\n\t{value: 0x0008, lo: 0x93, hi: 0x9f},\n\t{value: 0x0040, lo: 0xa0, hi: 0xbf},\n\t// Block 0xd4, offset 0x641\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0040, lo: 0x80, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xa0},\n\t{value: 0x0040, lo: 0xa1, hi: 0xbf},\n\t// Block 0xd5, offset 0x645\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0008, lo: 0x80, hi: 0xac},\n\t{value: 0x0040, lo: 0xad, hi: 0xbf},\n\t// Block 0xd6, offset 0x648\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0008, lo: 0x80, hi: 0xb2},\n\t{value: 0x0040, lo: 0xb3, hi: 0xbf},\n\t// Block 0xd7, offset 0x64b\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0008, lo: 0x80, hi: 0x81},\n\t{value: 0x0040, lo: 0x82, hi: 0xbf},\n\t// Block 0xd8, offset 0x64e\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0008, lo: 0x80, hi: 0xaa},\n\t{value: 0x0040, lo: 0xab, hi: 0xaf},\n\t{value: 0x0008, lo: 0xb0, hi: 0xbc},\n\t{value: 0x0040, lo: 0xbd, hi: 0xbf},\n\t// Block 0xd9, offset 0x653\n\t{value: 0x0000, lo: 0x09},\n\t{value: 0x0008, lo: 0x80, hi: 0x88},\n\t{value: 0x0040, lo: 0x89, hi: 0x8f},\n\t{value: 0x0008, lo: 0x90, hi: 0x99},\n\t{value: 0x0040, lo: 0x9a, hi: 0x9b},\n\t{value: 0x0018, lo: 0x9c, hi: 0x9c},\n\t{value: 0x3308, lo: 0x9d, hi: 0x9e},\n\t{value: 0x0018, lo: 0x9f, hi: 0x9f},\n\t{value: 0x03c0, lo: 0xa0, hi: 0xa3},\n\t{value: 0x0040, lo: 0xa4, hi: 0xbf},\n\t// Block 0xda, offset 0x65d\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0018, lo: 0x80, hi: 0xb5},\n\t{value: 0x0040, lo: 0xb6, hi: 0xbf},\n\t// Block 0xdb, offset 0x660\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0018, lo: 0x80, hi: 0xa6},\n\t{value: 0x0040, lo: 0xa7, hi: 0xa8},\n\t{value: 0x0018, lo: 0xa9, hi: 0xbf},\n\t// Block 0xdc, offset 0x664\n\t{value: 0x0000, lo: 0x0e},\n\t{value: 0x0018, lo: 0x80, hi: 0x9d},\n\t{value: 0xb5b9, lo: 0x9e, hi: 0x9e},\n\t{value: 0xb601, lo: 0x9f, hi: 0x9f},\n\t{value: 0xb649, lo: 0xa0, hi: 0xa0},\n\t{value: 0xb6b1, lo: 0xa1, hi: 0xa1},\n\t{value: 0xb719, lo: 0xa2, hi: 0xa2},\n\t{value: 0xb781, lo: 0xa3, hi: 0xa3},\n\t{value: 0xb7e9, lo: 0xa4, hi: 0xa4},\n\t{value: 0x3018, lo: 0xa5, hi: 0xa6},\n\t{value: 0x3318, lo: 0xa7, hi: 0xa9},\n\t{value: 0x0018, lo: 0xaa, hi: 0xac},\n\t{value: 0x3018, lo: 0xad, hi: 0xb2},\n\t{value: 0x0340, lo: 0xb3, hi: 0xba},\n\t{value: 0x3318, lo: 0xbb, hi: 0xbf},\n\t// Block 0xdd, offset 0x673\n\t{value: 0x0000, lo: 0x0b},\n\t{value: 0x3318, lo: 0x80, hi: 0x82},\n\t{value: 0x0018, lo: 0x83, hi: 0x84},\n\t{value: 0x3318, lo: 0x85, hi: 0x8b},\n\t{value: 0x0018, lo: 0x8c, hi: 0xa9},\n\t{value: 0x3318, lo: 0xaa, hi: 0xad},\n\t{value: 0x0018, lo: 0xae, hi: 0xba},\n\t{value: 0xb851, lo: 0xbb, hi: 0xbb},\n\t{value: 0xb899, lo: 0xbc, hi: 0xbc},\n\t{value: 0xb8e1, lo: 0xbd, hi: 0xbd},\n\t{value: 0xb949, lo: 0xbe, hi: 0xbe},\n\t{value: 0xb9b1, lo: 0xbf, hi: 0xbf},\n\t// Block 0xde, offset 0x67f\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0xba19, lo: 0x80, hi: 0x80},\n\t{value: 0x0018, lo: 0x81, hi: 0xa8},\n\t{value: 0x0040, lo: 0xa9, hi: 0xbf},\n\t// Block 0xdf, offset 0x683\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0018, lo: 0x80, hi: 0x81},\n\t{value: 0x3318, lo: 0x82, hi: 0x84},\n\t{value: 0x0018, lo: 0x85, hi: 0x85},\n\t{value: 0x0040, lo: 0x86, hi: 0xbf},\n\t// Block 0xe0, offset 0x688\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0018, lo: 0x80, hi: 0x96},\n\t{value: 0x0040, lo: 0x97, hi: 0x9f},\n\t{value: 0x0018, lo: 0xa0, hi: 0xb1},\n\t{value: 0x0040, lo: 0xb2, hi: 0xbf},\n\t// Block 0xe1, offset 0x68d\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x3308, lo: 0x80, hi: 0xb6},\n\t{value: 0x0018, lo: 0xb7, hi: 0xba},\n\t{value: 0x3308, lo: 0xbb, hi: 0xbf},\n\t// Block 0xe2, offset 0x691\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x3308, lo: 0x80, hi: 0xac},\n\t{value: 0x0018, lo: 0xad, hi: 0xb4},\n\t{value: 0x3308, lo: 0xb5, hi: 0xb5},\n\t{value: 0x0018, lo: 0xb6, hi: 0xbf},\n\t// Block 0xe3, offset 0x696\n\t{value: 0x0000, lo: 0x08},\n\t{value: 0x0018, lo: 0x80, hi: 0x83},\n\t{value: 0x3308, lo: 0x84, hi: 0x84},\n\t{value: 0x0018, lo: 0x85, hi: 0x8b},\n\t{value: 0x0040, lo: 0x8c, hi: 0x9a},\n\t{value: 0x3308, lo: 0x9b, hi: 0x9f},\n\t{value: 0x0040, lo: 0xa0, hi: 0xa0},\n\t{value: 0x3308, lo: 0xa1, hi: 0xaf},\n\t{value: 0x0040, lo: 0xb0, hi: 0xbf},\n\t// Block 0xe4, offset 0x69f\n\t{value: 0x0000, lo: 0x0a},\n\t{value: 0x3308, lo: 0x80, hi: 0x86},\n\t{value: 0x0040, lo: 0x87, hi: 0x87},\n\t{value: 0x3308, lo: 0x88, hi: 0x98},\n\t{value: 0x0040, lo: 0x99, hi: 0x9a},\n\t{value: 0x3308, lo: 0x9b, hi: 0xa1},\n\t{value: 0x0040, lo: 0xa2, hi: 0xa2},\n\t{value: 0x3308, lo: 0xa3, hi: 0xa4},\n\t{value: 0x0040, lo: 0xa5, hi: 0xa5},\n\t{value: 0x3308, lo: 0xa6, hi: 0xaa},\n\t{value: 0x0040, lo: 0xab, hi: 0xbf},\n\t// Block 0xe5, offset 0x6aa\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x0808, lo: 0x80, hi: 0x84},\n\t{value: 0x0040, lo: 0x85, hi: 0x86},\n\t{value: 0x0818, lo: 0x87, hi: 0x8f},\n\t{value: 0x3308, lo: 0x90, hi: 0x96},\n\t{value: 0x0040, lo: 0x97, hi: 0xbf},\n\t// Block 0xe6, offset 0x6b0\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0x0a08, lo: 0x80, hi: 0x83},\n\t{value: 0x3308, lo: 0x84, hi: 0x8a},\n\t{value: 0x0040, lo: 0x8b, hi: 0x8f},\n\t{value: 0x0808, lo: 0x90, hi: 0x99},\n\t{value: 0x0040, lo: 0x9a, hi: 0x9d},\n\t{value: 0x0818, lo: 0x9e, hi: 0x9f},\n\t{value: 0x0040, lo: 0xa0, hi: 0xbf},\n\t// Block 0xe7, offset 0x6b8\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0040, lo: 0x80, hi: 0xaf},\n\t{value: 0x0018, lo: 0xb0, hi: 0xb1},\n\t{value: 0x0040, lo: 0xb2, hi: 0xbf},\n\t// Block 0xe8, offset 0x6bc\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0018, lo: 0x80, hi: 0xab},\n\t{value: 0x0040, lo: 0xac, hi: 0xaf},\n\t{value: 0x0018, lo: 0xb0, hi: 0xbf},\n\t// Block 0xe9, offset 0x6c0\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x0018, lo: 0x80, hi: 0x93},\n\t{value: 0x0040, lo: 0x94, hi: 0x9f},\n\t{value: 0x0018, lo: 0xa0, hi: 0xae},\n\t{value: 0x0040, lo: 0xaf, hi: 0xb0},\n\t{value: 0x0018, lo: 0xb1, hi: 0xbf},\n\t// Block 0xea, offset 0x6c6\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x0040, lo: 0x80, hi: 0x80},\n\t{value: 0x0018, lo: 0x81, hi: 0x8f},\n\t{value: 0x0040, lo: 0x90, hi: 0x90},\n\t{value: 0x0018, lo: 0x91, hi: 0xb5},\n\t{value: 0x0040, lo: 0xb6, hi: 0xbf},\n\t// Block 0xeb, offset 0x6cc\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0018, lo: 0x80, hi: 0x8f},\n\t{value: 0xc1c1, lo: 0x90, hi: 0x90},\n\t{value: 0x0018, lo: 0x91, hi: 0xac},\n\t{value: 0x0040, lo: 0xad, hi: 0xbf},\n\t// Block 0xec, offset 0x6d1\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0040, lo: 0x80, hi: 0xa5},\n\t{value: 0x0018, lo: 0xa6, hi: 0xbf},\n\t// Block 0xed, offset 0x6d4\n\t{value: 0x0000, lo: 0x0d},\n\t{value: 0xc7e9, lo: 0x80, hi: 0x80},\n\t{value: 0xc839, lo: 0x81, hi: 0x81},\n\t{value: 0xc889, lo: 0x82, hi: 0x82},\n\t{value: 0xc8d9, lo: 0x83, hi: 0x83},\n\t{value: 0xc929, lo: 0x84, hi: 0x84},\n\t{value: 0xc979, lo: 0x85, hi: 0x85},\n\t{value: 0xc9c9, lo: 0x86, hi: 0x86},\n\t{value: 0xca19, lo: 0x87, hi: 0x87},\n\t{value: 0xca69, lo: 0x88, hi: 0x88},\n\t{value: 0x0040, lo: 0x89, hi: 0x8f},\n\t{value: 0xcab9, lo: 0x90, hi: 0x90},\n\t{value: 0xcad9, lo: 0x91, hi: 0x91},\n\t{value: 0x0040, lo: 0x92, hi: 0xbf},\n\t// Block 0xee, offset 0x6e2\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0x0018, lo: 0x80, hi: 0x92},\n\t{value: 0x0040, lo: 0x93, hi: 0x9f},\n\t{value: 0x0018, lo: 0xa0, hi: 0xac},\n\t{value: 0x0040, lo: 0xad, hi: 0xaf},\n\t{value: 0x0018, lo: 0xb0, hi: 0xb6},\n\t{value: 0x0040, lo: 0xb7, hi: 0xbf},\n\t// Block 0xef, offset 0x6e9\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0018, lo: 0x80, hi: 0xb3},\n\t{value: 0x0040, lo: 0xb4, hi: 0xbf},\n\t// Block 0xf0, offset 0x6ec\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0018, lo: 0x80, hi: 0x94},\n\t{value: 0x0040, lo: 0x95, hi: 0xbf},\n\t// Block 0xf1, offset 0x6ef\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0018, lo: 0x80, hi: 0x8b},\n\t{value: 0x0040, lo: 0x8c, hi: 0x8f},\n\t{value: 0x0018, lo: 0x90, hi: 0xbf},\n\t// Block 0xf2, offset 0x6f3\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x0018, lo: 0x80, hi: 0x87},\n\t{value: 0x0040, lo: 0x88, hi: 0x8f},\n\t{value: 0x0018, lo: 0x90, hi: 0x99},\n\t{value: 0x0040, lo: 0x9a, hi: 0x9f},\n\t{value: 0x0018, lo: 0xa0, hi: 0xbf},\n\t// Block 0xf3, offset 0x6f9\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0018, lo: 0x80, hi: 0x87},\n\t{value: 0x0040, lo: 0x88, hi: 0x8f},\n\t{value: 0x0018, lo: 0x90, hi: 0xad},\n\t{value: 0x0040, lo: 0xae, hi: 0xbf},\n\t// Block 0xf4, offset 0x6fe\n\t{value: 0x0000, lo: 0x09},\n\t{value: 0x0040, lo: 0x80, hi: 0x8f},\n\t{value: 0x0018, lo: 0x90, hi: 0x9e},\n\t{value: 0x0040, lo: 0x9f, hi: 0x9f},\n\t{value: 0x0018, lo: 0xa0, hi: 0xa7},\n\t{value: 0x0040, lo: 0xa8, hi: 0xaf},\n\t{value: 0x0018, lo: 0xb0, hi: 0xb0},\n\t{value: 0x0040, lo: 0xb1, hi: 0xb2},\n\t{value: 0x0018, lo: 0xb3, hi: 0xbe},\n\t{value: 0x0040, lo: 0xbf, hi: 0xbf},\n\t// Block 0xf5, offset 0x708\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0018, lo: 0x80, hi: 0x8b},\n\t{value: 0x0040, lo: 0x8c, hi: 0x8f},\n\t{value: 0x0018, lo: 0x90, hi: 0x9e},\n\t{value: 0x0040, lo: 0x9f, hi: 0xbf},\n\t// Block 0xf6, offset 0x70d\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0018, lo: 0x80, hi: 0x91},\n\t{value: 0x0040, lo: 0x92, hi: 0xbf},\n\t// Block 0xf7, offset 0x710\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0018, lo: 0x80, hi: 0x80},\n\t{value: 0x0040, lo: 0x81, hi: 0xbf},\n\t// Block 0xf8, offset 0x713\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0008, lo: 0x80, hi: 0x96},\n\t{value: 0x0040, lo: 0x97, hi: 0xbf},\n\t// Block 0xf9, offset 0x716\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0008, lo: 0x80, hi: 0xb4},\n\t{value: 0x0040, lo: 0xb5, hi: 0xbf},\n\t// Block 0xfa, offset 0x719\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x0008, lo: 0x80, hi: 0x9d},\n\t{value: 0x0040, lo: 0x9e, hi: 0x9f},\n\t{value: 0x0008, lo: 0xa0, hi: 0xbf},\n\t// Block 0xfb, offset 0x71d\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0008, lo: 0x80, hi: 0xa1},\n\t{value: 0x0040, lo: 0xa2, hi: 0xbf},\n\t// Block 0xfc, offset 0x720\n\t{value: 0x0020, lo: 0x0f},\n\t{value: 0xdeb9, lo: 0x80, hi: 0x89},\n\t{value: 0x8dfd, lo: 0x8a, hi: 0x8a},\n\t{value: 0xdff9, lo: 0x8b, hi: 0x9c},\n\t{value: 0x8e1d, lo: 0x9d, hi: 0x9d},\n\t{value: 0xe239, lo: 0x9e, hi: 0xa2},\n\t{value: 0x8e3d, lo: 0xa3, hi: 0xa3},\n\t{value: 0xe2d9, lo: 0xa4, hi: 0xab},\n\t{value: 0x7ed5, lo: 0xac, hi: 0xac},\n\t{value: 0xe3d9, lo: 0xad, hi: 0xaf},\n\t{value: 0x8e5d, lo: 0xb0, hi: 0xb0},\n\t{value: 0xe439, lo: 0xb1, hi: 0xb6},\n\t{value: 0x8e7d, lo: 0xb7, hi: 0xb9},\n\t{value: 0xe4f9, lo: 0xba, hi: 0xba},\n\t{value: 0x8edd, lo: 0xbb, hi: 0xbb},\n\t{value: 0xe519, lo: 0xbc, hi: 0xbf},\n\t// Block 0xfd, offset 0x730\n\t{value: 0x0020, lo: 0x10},\n\t{value: 0x937d, lo: 0x80, hi: 0x80},\n\t{value: 0xf099, lo: 0x81, hi: 0x86},\n\t{value: 0x939d, lo: 0x87, hi: 0x8a},\n\t{value: 0xd9f9, lo: 0x8b, hi: 0x8b},\n\t{value: 0xf159, lo: 0x8c, hi: 0x96},\n\t{value: 0x941d, lo: 0x97, hi: 0x97},\n\t{value: 0xf2b9, lo: 0x98, hi: 0xa3},\n\t{value: 0x943d, lo: 0xa4, hi: 0xa6},\n\t{value: 0xf439, lo: 0xa7, hi: 0xaa},\n\t{value: 0x949d, lo: 0xab, hi: 0xab},\n\t{value: 0xf4b9, lo: 0xac, hi: 0xac},\n\t{value: 0x94bd, lo: 0xad, hi: 0xad},\n\t{value: 0xf4d9, lo: 0xae, hi: 0xaf},\n\t{value: 0x94dd, lo: 0xb0, hi: 0xb1},\n\t{value: 0xf519, lo: 0xb2, hi: 0xbe},\n\t{value: 0x2040, lo: 0xbf, hi: 0xbf},\n\t// Block 0xfe, offset 0x741\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x0040, lo: 0x80, hi: 0x80},\n\t{value: 0x0340, lo: 0x81, hi: 0x81},\n\t{value: 0x0040, lo: 0x82, hi: 0x9f},\n\t{value: 0x0340, lo: 0xa0, hi: 0xbf},\n\t// Block 0xff, offset 0x746\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x0340, lo: 0x80, hi: 0xbf},\n\t// Block 0x100, offset 0x748\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x33c0, lo: 0x80, hi: 0xbf},\n\t// Block 0x101, offset 0x74a\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x33c0, lo: 0x80, hi: 0xaf},\n\t{value: 0x0040, lo: 0xb0, hi: 0xbf},\n}\n\n// Total table size 41662 bytes (40KiB); checksum: 355A58A4\n"
  },
  {
    "path": "vendor/golang.org/x/net/idna/trie.go",
    "content": "// Code generated by running \"go generate\" in golang.org/x/text. DO NOT EDIT.\n\n// Copyright 2016 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage idna\n\n// appendMapping appends the mapping for the respective rune. isMapped must be\n// true. A mapping is a categorization of a rune as defined in UTS #46.\nfunc (c info) appendMapping(b []byte, s string) []byte {\n\tindex := int(c >> indexShift)\n\tif c&xorBit == 0 {\n\t\ts := mappings[index:]\n\t\treturn append(b, s[1:s[0]+1]...)\n\t}\n\tb = append(b, s...)\n\tif c&inlineXOR == inlineXOR {\n\t\t// TODO: support and handle two-byte inline masks\n\t\tb[len(b)-1] ^= byte(index)\n\t} else {\n\t\tfor p := len(b) - int(xorData[index]); p < len(b); p++ {\n\t\t\tindex++\n\t\t\tb[p] ^= xorData[index]\n\t\t}\n\t}\n\treturn b\n}\n\n// Sparse block handling code.\n\ntype valueRange struct {\n\tvalue  uint16 // header: value:stride\n\tlo, hi byte   // header: lo:n\n}\n\ntype sparseBlocks struct {\n\tvalues []valueRange\n\toffset []uint16\n}\n\nvar idnaSparse = sparseBlocks{\n\tvalues: idnaSparseValues[:],\n\toffset: idnaSparseOffset[:],\n}\n\n// Don't use newIdnaTrie to avoid unconditional linking in of the table.\nvar trie = &idnaTrie{}\n\n// lookup determines the type of block n and looks up the value for b.\n// For n < t.cutoff, the block is a simple lookup table. Otherwise, the block\n// is a list of ranges with an accompanying value. Given a matching range r,\n// the value for b is by r.value + (b - r.lo) * stride.\nfunc (t *sparseBlocks) lookup(n uint32, b byte) uint16 {\n\toffset := t.offset[n]\n\theader := t.values[offset]\n\tlo := offset + 1\n\thi := lo + uint16(header.lo)\n\tfor lo < hi {\n\t\tm := lo + (hi-lo)/2\n\t\tr := t.values[m]\n\t\tif r.lo <= b && b <= r.hi {\n\t\t\treturn r.value + uint16(b-r.lo)*header.value\n\t\t}\n\t\tif b < r.lo {\n\t\t\thi = m\n\t\t} else {\n\t\t\tlo = m + 1\n\t\t}\n\t}\n\treturn 0\n}\n"
  },
  {
    "path": "vendor/golang.org/x/net/idna/trieval.go",
    "content": "// Code generated by running \"go generate\" in golang.org/x/text. DO NOT EDIT.\n\npackage idna\n\n// This file contains definitions for interpreting the trie value of the idna\n// trie generated by \"go run gen*.go\". It is shared by both the generator\n// program and the resultant package. Sharing is achieved by the generator\n// copying gen_trieval.go to trieval.go and changing what's above this comment.\n\n// info holds information from the IDNA mapping table for a single rune. It is\n// the value returned by a trie lookup. In most cases, all information fits in\n// a 16-bit value. For mappings, this value may contain an index into a slice\n// with the mapped string. Such mappings can consist of the actual mapped value\n// or an XOR pattern to be applied to the bytes of the UTF8 encoding of the\n// input rune. This technique is used by the cases packages and reduces the\n// table size significantly.\n//\n// The per-rune values have the following format:\n//\n//   if mapped {\n//     if inlinedXOR {\n//       15..13 inline XOR marker\n//       12..11 unused\n//       10..3  inline XOR mask\n//     } else {\n//       15..3  index into xor or mapping table\n//     }\n//   } else {\n//       15..14 unused\n//       13     mayNeedNorm\n//       12..11 attributes\n//       10..8  joining type\n//        7..3  category type\n//   }\n//      2  use xor pattern\n//   1..0  mapped category\n//\n// See the definitions below for a more detailed description of the various\n// bits.\ntype info uint16\n\nconst (\n\tcatSmallMask = 0x3\n\tcatBigMask   = 0xF8\n\tindexShift   = 3\n\txorBit       = 0x4    // interpret the index as an xor pattern\n\tinlineXOR    = 0xE000 // These bits are set if the XOR pattern is inlined.\n\n\tjoinShift = 8\n\tjoinMask  = 0x07\n\n\t// Attributes\n\tattributesMask = 0x1800\n\tviramaModifier = 0x1800\n\tmodifier       = 0x1000\n\trtl            = 0x0800\n\n\tmayNeedNorm = 0x2000\n)\n\n// A category corresponds to a category defined in the IDNA mapping table.\ntype category uint16\n\nconst (\n\tunknown              category = 0 // not currently defined in unicode.\n\tmapped               category = 1\n\tdisallowedSTD3Mapped category = 2\n\tdeviation            category = 3\n)\n\nconst (\n\tvalid               category = 0x08\n\tvalidNV8            category = 0x18\n\tvalidXV8            category = 0x28\n\tdisallowed          category = 0x40\n\tdisallowedSTD3Valid category = 0x80\n\tignored             category = 0xC0\n)\n\n// join types and additional rune information\nconst (\n\tjoiningL = (iota + 1)\n\tjoiningD\n\tjoiningT\n\tjoiningR\n\n\t//the following types are derived during processing\n\tjoinZWJ\n\tjoinZWNJ\n\tjoinVirama\n\tnumJoinTypes\n)\n\nfunc (c info) isMapped() bool {\n\treturn c&0x3 != 0\n}\n\nfunc (c info) category() category {\n\tsmall := c & catSmallMask\n\tif small != 0 {\n\t\treturn category(small)\n\t}\n\treturn category(c & catBigMask)\n}\n\nfunc (c info) joinType() info {\n\tif c.isMapped() {\n\t\treturn 0\n\t}\n\treturn (c >> joinShift) & joinMask\n}\n\nfunc (c info) isModifier() bool {\n\treturn c&(modifier|catSmallMask) == modifier\n}\n\nfunc (c info) isViramaModifier() bool {\n\treturn c&(attributesMask|catSmallMask) == viramaModifier\n}\n"
  },
  {
    "path": "vendor/golang.org/x/net/internal/timeseries/timeseries.go",
    "content": "// Copyright 2015 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package timeseries implements a time series structure for stats collection.\npackage timeseries // import \"golang.org/x/net/internal/timeseries\"\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"time\"\n)\n\nconst (\n\ttimeSeriesNumBuckets       = 64\n\tminuteHourSeriesNumBuckets = 60\n)\n\nvar timeSeriesResolutions = []time.Duration{\n\t1 * time.Second,\n\t10 * time.Second,\n\t1 * time.Minute,\n\t10 * time.Minute,\n\t1 * time.Hour,\n\t6 * time.Hour,\n\t24 * time.Hour,          // 1 day\n\t7 * 24 * time.Hour,      // 1 week\n\t4 * 7 * 24 * time.Hour,  // 4 weeks\n\t16 * 7 * 24 * time.Hour, // 16 weeks\n}\n\nvar minuteHourSeriesResolutions = []time.Duration{\n\t1 * time.Second,\n\t1 * time.Minute,\n}\n\n// An Observable is a kind of data that can be aggregated in a time series.\ntype Observable interface {\n\tMultiply(ratio float64)    // Multiplies the data in self by a given ratio\n\tAdd(other Observable)      // Adds the data from a different observation to self\n\tClear()                    // Clears the observation so it can be reused.\n\tCopyFrom(other Observable) // Copies the contents of a given observation to self\n}\n\n// Float attaches the methods of Observable to a float64.\ntype Float float64\n\n// NewFloat returns a Float.\nfunc NewFloat() Observable {\n\tf := Float(0)\n\treturn &f\n}\n\n// String returns the float as a string.\nfunc (f *Float) String() string { return fmt.Sprintf(\"%g\", f.Value()) }\n\n// Value returns the float's value.\nfunc (f *Float) Value() float64 { return float64(*f) }\n\nfunc (f *Float) Multiply(ratio float64) { *f *= Float(ratio) }\n\nfunc (f *Float) Add(other Observable) {\n\to := other.(*Float)\n\t*f += *o\n}\n\nfunc (f *Float) Clear() { *f = 0 }\n\nfunc (f *Float) CopyFrom(other Observable) {\n\to := other.(*Float)\n\t*f = *o\n}\n\n// A Clock tells the current time.\ntype Clock interface {\n\tTime() time.Time\n}\n\ntype defaultClock int\n\nvar defaultClockInstance defaultClock\n\nfunc (defaultClock) Time() time.Time { return time.Now() }\n\n// Information kept per level. Each level consists of a circular list of\n// observations. The start of the level may be derived from end and the\n// len(buckets) * sizeInMillis.\ntype tsLevel struct {\n\toldest   int               // index to oldest bucketed Observable\n\tnewest   int               // index to newest bucketed Observable\n\tend      time.Time         // end timestamp for this level\n\tsize     time.Duration     // duration of the bucketed Observable\n\tbuckets  []Observable      // collections of observations\n\tprovider func() Observable // used for creating new Observable\n}\n\nfunc (l *tsLevel) Clear() {\n\tl.oldest = 0\n\tl.newest = len(l.buckets) - 1\n\tl.end = time.Time{}\n\tfor i := range l.buckets {\n\t\tif l.buckets[i] != nil {\n\t\t\tl.buckets[i].Clear()\n\t\t\tl.buckets[i] = nil\n\t\t}\n\t}\n}\n\nfunc (l *tsLevel) InitLevel(size time.Duration, numBuckets int, f func() Observable) {\n\tl.size = size\n\tl.provider = f\n\tl.buckets = make([]Observable, numBuckets)\n}\n\n// Keeps a sequence of levels. Each level is responsible for storing data at\n// a given resolution. For example, the first level stores data at a one\n// minute resolution while the second level stores data at a one hour\n// resolution.\n\n// Each level is represented by a sequence of buckets. Each bucket spans an\n// interval equal to the resolution of the level. New observations are added\n// to the last bucket.\ntype timeSeries struct {\n\tprovider    func() Observable // make more Observable\n\tnumBuckets  int               // number of buckets in each level\n\tlevels      []*tsLevel        // levels of bucketed Observable\n\tlastAdd     time.Time         // time of last Observable tracked\n\ttotal       Observable        // convenient aggregation of all Observable\n\tclock       Clock             // Clock for getting current time\n\tpending     Observable        // observations not yet bucketed\n\tpendingTime time.Time         // what time are we keeping in pending\n\tdirty       bool              // if there are pending observations\n}\n\n// init initializes a level according to the supplied criteria.\nfunc (ts *timeSeries) init(resolutions []time.Duration, f func() Observable, numBuckets int, clock Clock) {\n\tts.provider = f\n\tts.numBuckets = numBuckets\n\tts.clock = clock\n\tts.levels = make([]*tsLevel, len(resolutions))\n\n\tfor i := range resolutions {\n\t\tif i > 0 && resolutions[i-1] >= resolutions[i] {\n\t\t\tlog.Print(\"timeseries: resolutions must be monotonically increasing\")\n\t\t\tbreak\n\t\t}\n\t\tnewLevel := new(tsLevel)\n\t\tnewLevel.InitLevel(resolutions[i], ts.numBuckets, ts.provider)\n\t\tts.levels[i] = newLevel\n\t}\n\n\tts.Clear()\n}\n\n// Clear removes all observations from the time series.\nfunc (ts *timeSeries) Clear() {\n\tts.lastAdd = time.Time{}\n\tts.total = ts.resetObservation(ts.total)\n\tts.pending = ts.resetObservation(ts.pending)\n\tts.pendingTime = time.Time{}\n\tts.dirty = false\n\n\tfor i := range ts.levels {\n\t\tts.levels[i].Clear()\n\t}\n}\n\n// Add records an observation at the current time.\nfunc (ts *timeSeries) Add(observation Observable) {\n\tts.AddWithTime(observation, ts.clock.Time())\n}\n\n// AddWithTime records an observation at the specified time.\nfunc (ts *timeSeries) AddWithTime(observation Observable, t time.Time) {\n\n\tsmallBucketDuration := ts.levels[0].size\n\n\tif t.After(ts.lastAdd) {\n\t\tts.lastAdd = t\n\t}\n\n\tif t.After(ts.pendingTime) {\n\t\tts.advance(t)\n\t\tts.mergePendingUpdates()\n\t\tts.pendingTime = ts.levels[0].end\n\t\tts.pending.CopyFrom(observation)\n\t\tts.dirty = true\n\t} else if t.After(ts.pendingTime.Add(-1 * smallBucketDuration)) {\n\t\t// The observation is close enough to go into the pending bucket.\n\t\t// This compensates for clock skewing and small scheduling delays\n\t\t// by letting the update stay in the fast path.\n\t\tts.pending.Add(observation)\n\t\tts.dirty = true\n\t} else {\n\t\tts.mergeValue(observation, t)\n\t}\n}\n\n// mergeValue inserts the observation at the specified time in the past into all levels.\nfunc (ts *timeSeries) mergeValue(observation Observable, t time.Time) {\n\tfor _, level := range ts.levels {\n\t\tindex := (ts.numBuckets - 1) - int(level.end.Sub(t)/level.size)\n\t\tif 0 <= index && index < ts.numBuckets {\n\t\t\tbucketNumber := (level.oldest + index) % ts.numBuckets\n\t\t\tif level.buckets[bucketNumber] == nil {\n\t\t\t\tlevel.buckets[bucketNumber] = level.provider()\n\t\t\t}\n\t\t\tlevel.buckets[bucketNumber].Add(observation)\n\t\t}\n\t}\n\tts.total.Add(observation)\n}\n\n// mergePendingUpdates applies the pending updates into all levels.\nfunc (ts *timeSeries) mergePendingUpdates() {\n\tif ts.dirty {\n\t\tts.mergeValue(ts.pending, ts.pendingTime)\n\t\tts.pending = ts.resetObservation(ts.pending)\n\t\tts.dirty = false\n\t}\n}\n\n// advance cycles the buckets at each level until the latest bucket in\n// each level can hold the time specified.\nfunc (ts *timeSeries) advance(t time.Time) {\n\tif !t.After(ts.levels[0].end) {\n\t\treturn\n\t}\n\tfor i := 0; i < len(ts.levels); i++ {\n\t\tlevel := ts.levels[i]\n\t\tif !level.end.Before(t) {\n\t\t\tbreak\n\t\t}\n\n\t\t// If the time is sufficiently far, just clear the level and advance\n\t\t// directly.\n\t\tif !t.Before(level.end.Add(level.size * time.Duration(ts.numBuckets))) {\n\t\t\tfor _, b := range level.buckets {\n\t\t\t\tts.resetObservation(b)\n\t\t\t}\n\t\t\tlevel.end = time.Unix(0, (t.UnixNano()/level.size.Nanoseconds())*level.size.Nanoseconds())\n\t\t}\n\n\t\tfor t.After(level.end) {\n\t\t\tlevel.end = level.end.Add(level.size)\n\t\t\tlevel.newest = level.oldest\n\t\t\tlevel.oldest = (level.oldest + 1) % ts.numBuckets\n\t\t\tts.resetObservation(level.buckets[level.newest])\n\t\t}\n\n\t\tt = level.end\n\t}\n}\n\n// Latest returns the sum of the num latest buckets from the level.\nfunc (ts *timeSeries) Latest(level, num int) Observable {\n\tnow := ts.clock.Time()\n\tif ts.levels[0].end.Before(now) {\n\t\tts.advance(now)\n\t}\n\n\tts.mergePendingUpdates()\n\n\tresult := ts.provider()\n\tl := ts.levels[level]\n\tindex := l.newest\n\n\tfor i := 0; i < num; i++ {\n\t\tif l.buckets[index] != nil {\n\t\t\tresult.Add(l.buckets[index])\n\t\t}\n\t\tif index == 0 {\n\t\t\tindex = ts.numBuckets\n\t\t}\n\t\tindex--\n\t}\n\n\treturn result\n}\n\n// LatestBuckets returns a copy of the num latest buckets from level.\nfunc (ts *timeSeries) LatestBuckets(level, num int) []Observable {\n\tif level < 0 || level > len(ts.levels) {\n\t\tlog.Print(\"timeseries: bad level argument: \", level)\n\t\treturn nil\n\t}\n\tif num < 0 || num >= ts.numBuckets {\n\t\tlog.Print(\"timeseries: bad num argument: \", num)\n\t\treturn nil\n\t}\n\n\tresults := make([]Observable, num)\n\tnow := ts.clock.Time()\n\tif ts.levels[0].end.Before(now) {\n\t\tts.advance(now)\n\t}\n\n\tts.mergePendingUpdates()\n\n\tl := ts.levels[level]\n\tindex := l.newest\n\n\tfor i := 0; i < num; i++ {\n\t\tresult := ts.provider()\n\t\tresults[i] = result\n\t\tif l.buckets[index] != nil {\n\t\t\tresult.CopyFrom(l.buckets[index])\n\t\t}\n\n\t\tif index == 0 {\n\t\t\tindex = ts.numBuckets\n\t\t}\n\t\tindex -= 1\n\t}\n\treturn results\n}\n\n// ScaleBy updates observations by scaling by factor.\nfunc (ts *timeSeries) ScaleBy(factor float64) {\n\tfor _, l := range ts.levels {\n\t\tfor i := 0; i < ts.numBuckets; i++ {\n\t\t\tl.buckets[i].Multiply(factor)\n\t\t}\n\t}\n\n\tts.total.Multiply(factor)\n\tts.pending.Multiply(factor)\n}\n\n// Range returns the sum of observations added over the specified time range.\n// If start or finish times don't fall on bucket boundaries of the same\n// level, then return values are approximate answers.\nfunc (ts *timeSeries) Range(start, finish time.Time) Observable {\n\treturn ts.ComputeRange(start, finish, 1)[0]\n}\n\n// Recent returns the sum of observations from the last delta.\nfunc (ts *timeSeries) Recent(delta time.Duration) Observable {\n\tnow := ts.clock.Time()\n\treturn ts.Range(now.Add(-delta), now)\n}\n\n// Total returns the total of all observations.\nfunc (ts *timeSeries) Total() Observable {\n\tts.mergePendingUpdates()\n\treturn ts.total\n}\n\n// ComputeRange computes a specified number of values into a slice using\n// the observations recorded over the specified time period. The return\n// values are approximate if the start or finish times don't fall on the\n// bucket boundaries at the same level or if the number of buckets spanning\n// the range is not an integral multiple of num.\nfunc (ts *timeSeries) ComputeRange(start, finish time.Time, num int) []Observable {\n\tif start.After(finish) {\n\t\tlog.Printf(\"timeseries: start > finish, %v>%v\", start, finish)\n\t\treturn nil\n\t}\n\n\tif num < 0 {\n\t\tlog.Printf(\"timeseries: num < 0, %v\", num)\n\t\treturn nil\n\t}\n\n\tresults := make([]Observable, num)\n\n\tfor _, l := range ts.levels {\n\t\tif !start.Before(l.end.Add(-l.size * time.Duration(ts.numBuckets))) {\n\t\t\tts.extract(l, start, finish, num, results)\n\t\t\treturn results\n\t\t}\n\t}\n\n\t// Failed to find a level that covers the desired range. So just\n\t// extract from the last level, even if it doesn't cover the entire\n\t// desired range.\n\tts.extract(ts.levels[len(ts.levels)-1], start, finish, num, results)\n\n\treturn results\n}\n\n// RecentList returns the specified number of values in slice over the most\n// recent time period of the specified range.\nfunc (ts *timeSeries) RecentList(delta time.Duration, num int) []Observable {\n\tif delta < 0 {\n\t\treturn nil\n\t}\n\tnow := ts.clock.Time()\n\treturn ts.ComputeRange(now.Add(-delta), now, num)\n}\n\n// extract returns a slice of specified number of observations from a given\n// level over a given range.\nfunc (ts *timeSeries) extract(l *tsLevel, start, finish time.Time, num int, results []Observable) {\n\tts.mergePendingUpdates()\n\n\tsrcInterval := l.size\n\tdstInterval := finish.Sub(start) / time.Duration(num)\n\tdstStart := start\n\tsrcStart := l.end.Add(-srcInterval * time.Duration(ts.numBuckets))\n\n\tsrcIndex := 0\n\n\t// Where should scanning start?\n\tif dstStart.After(srcStart) {\n\t\tadvance := dstStart.Sub(srcStart) / srcInterval\n\t\tsrcIndex += int(advance)\n\t\tsrcStart = srcStart.Add(advance * srcInterval)\n\t}\n\n\t// The i'th value is computed as show below.\n\t// interval = (finish/start)/num\n\t// i'th value = sum of observation in range\n\t//   [ start + i       * interval,\n\t//     start + (i + 1) * interval )\n\tfor i := 0; i < num; i++ {\n\t\tresults[i] = ts.resetObservation(results[i])\n\t\tdstEnd := dstStart.Add(dstInterval)\n\t\tfor srcIndex < ts.numBuckets && srcStart.Before(dstEnd) {\n\t\t\tsrcEnd := srcStart.Add(srcInterval)\n\t\t\tif srcEnd.After(ts.lastAdd) {\n\t\t\t\tsrcEnd = ts.lastAdd\n\t\t\t}\n\n\t\t\tif !srcEnd.Before(dstStart) {\n\t\t\t\tsrcValue := l.buckets[(srcIndex+l.oldest)%ts.numBuckets]\n\t\t\t\tif !srcStart.Before(dstStart) && !srcEnd.After(dstEnd) {\n\t\t\t\t\t// dst completely contains src.\n\t\t\t\t\tif srcValue != nil {\n\t\t\t\t\t\tresults[i].Add(srcValue)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// dst partially overlaps src.\n\t\t\t\t\toverlapStart := maxTime(srcStart, dstStart)\n\t\t\t\t\toverlapEnd := minTime(srcEnd, dstEnd)\n\t\t\t\t\tbase := srcEnd.Sub(srcStart)\n\t\t\t\t\tfraction := overlapEnd.Sub(overlapStart).Seconds() / base.Seconds()\n\n\t\t\t\t\tused := ts.provider()\n\t\t\t\t\tif srcValue != nil {\n\t\t\t\t\t\tused.CopyFrom(srcValue)\n\t\t\t\t\t}\n\t\t\t\t\tused.Multiply(fraction)\n\t\t\t\t\tresults[i].Add(used)\n\t\t\t\t}\n\n\t\t\t\tif srcEnd.After(dstEnd) {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tsrcIndex++\n\t\t\tsrcStart = srcStart.Add(srcInterval)\n\t\t}\n\t\tdstStart = dstStart.Add(dstInterval)\n\t}\n}\n\n// resetObservation clears the content so the struct may be reused.\nfunc (ts *timeSeries) resetObservation(observation Observable) Observable {\n\tif observation == nil {\n\t\tobservation = ts.provider()\n\t} else {\n\t\tobservation.Clear()\n\t}\n\treturn observation\n}\n\n// TimeSeries tracks data at granularities from 1 second to 16 weeks.\ntype TimeSeries struct {\n\ttimeSeries\n}\n\n// NewTimeSeries creates a new TimeSeries using the function provided for creating new Observable.\nfunc NewTimeSeries(f func() Observable) *TimeSeries {\n\treturn NewTimeSeriesWithClock(f, defaultClockInstance)\n}\n\n// NewTimeSeriesWithClock creates a new TimeSeries using the function provided for creating new Observable and the clock for\n// assigning timestamps.\nfunc NewTimeSeriesWithClock(f func() Observable, clock Clock) *TimeSeries {\n\tts := new(TimeSeries)\n\tts.timeSeries.init(timeSeriesResolutions, f, timeSeriesNumBuckets, clock)\n\treturn ts\n}\n\n// MinuteHourSeries tracks data at granularities of 1 minute and 1 hour.\ntype MinuteHourSeries struct {\n\ttimeSeries\n}\n\n// NewMinuteHourSeries creates a new MinuteHourSeries using the function provided for creating new Observable.\nfunc NewMinuteHourSeries(f func() Observable) *MinuteHourSeries {\n\treturn NewMinuteHourSeriesWithClock(f, defaultClockInstance)\n}\n\n// NewMinuteHourSeriesWithClock creates a new MinuteHourSeries using the function provided for creating new Observable and the clock for\n// assigning timestamps.\nfunc NewMinuteHourSeriesWithClock(f func() Observable, clock Clock) *MinuteHourSeries {\n\tts := new(MinuteHourSeries)\n\tts.timeSeries.init(minuteHourSeriesResolutions, f,\n\t\tminuteHourSeriesNumBuckets, clock)\n\treturn ts\n}\n\nfunc (ts *MinuteHourSeries) Minute() Observable {\n\treturn ts.timeSeries.Latest(0, 60)\n}\n\nfunc (ts *MinuteHourSeries) Hour() Observable {\n\treturn ts.timeSeries.Latest(1, 60)\n}\n\nfunc minTime(a, b time.Time) time.Time {\n\tif a.Before(b) {\n\t\treturn a\n\t}\n\treturn b\n}\n\nfunc maxTime(a, b time.Time) time.Time {\n\tif a.After(b) {\n\t\treturn a\n\t}\n\treturn b\n}\n"
  },
  {
    "path": "vendor/golang.org/x/net/trace/events.go",
    "content": "// Copyright 2015 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage trace\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"html/template\"\n\t\"io\"\n\t\"log\"\n\t\"net/http\"\n\t\"runtime\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\t\"sync/atomic\"\n\t\"text/tabwriter\"\n\t\"time\"\n)\n\nconst maxEventsPerLog = 100\n\ntype bucket struct {\n\tMaxErrAge time.Duration\n\tString    string\n}\n\nvar buckets = []bucket{\n\t{0, \"total\"},\n\t{10 * time.Second, \"errs<10s\"},\n\t{1 * time.Minute, \"errs<1m\"},\n\t{10 * time.Minute, \"errs<10m\"},\n\t{1 * time.Hour, \"errs<1h\"},\n\t{10 * time.Hour, \"errs<10h\"},\n\t{24000 * time.Hour, \"errors\"},\n}\n\n// RenderEvents renders the HTML page typically served at /debug/events.\n// It does not do any auth checking. The request may be nil.\n//\n// Most users will use the Events handler.\nfunc RenderEvents(w http.ResponseWriter, req *http.Request, sensitive bool) {\n\tnow := time.Now()\n\tdata := &struct {\n\t\tFamilies []string // family names\n\t\tBuckets  []bucket\n\t\tCounts   [][]int // eventLog count per family/bucket\n\n\t\t// Set when a bucket has been selected.\n\t\tFamily    string\n\t\tBucket    int\n\t\tEventLogs eventLogs\n\t\tExpanded  bool\n\t}{\n\t\tBuckets: buckets,\n\t}\n\n\tdata.Families = make([]string, 0, len(families))\n\tfamMu.RLock()\n\tfor name := range families {\n\t\tdata.Families = append(data.Families, name)\n\t}\n\tfamMu.RUnlock()\n\tsort.Strings(data.Families)\n\n\t// Count the number of eventLogs in each family for each error age.\n\tdata.Counts = make([][]int, len(data.Families))\n\tfor i, name := range data.Families {\n\t\t// TODO(sameer): move this loop under the family lock.\n\t\tf := getEventFamily(name)\n\t\tdata.Counts[i] = make([]int, len(data.Buckets))\n\t\tfor j, b := range data.Buckets {\n\t\t\tdata.Counts[i][j] = f.Count(now, b.MaxErrAge)\n\t\t}\n\t}\n\n\tif req != nil {\n\t\tvar ok bool\n\t\tdata.Family, data.Bucket, ok = parseEventsArgs(req)\n\t\tif !ok {\n\t\t\t// No-op\n\t\t} else {\n\t\t\tdata.EventLogs = getEventFamily(data.Family).Copy(now, buckets[data.Bucket].MaxErrAge)\n\t\t}\n\t\tif data.EventLogs != nil {\n\t\t\tdefer data.EventLogs.Free()\n\t\t\tsort.Sort(data.EventLogs)\n\t\t}\n\t\tif exp, err := strconv.ParseBool(req.FormValue(\"exp\")); err == nil {\n\t\t\tdata.Expanded = exp\n\t\t}\n\t}\n\n\tfamMu.RLock()\n\tdefer famMu.RUnlock()\n\tif err := eventsTmpl().Execute(w, data); err != nil {\n\t\tlog.Printf(\"net/trace: Failed executing template: %v\", err)\n\t}\n}\n\nfunc parseEventsArgs(req *http.Request) (fam string, b int, ok bool) {\n\tfam, bStr := req.FormValue(\"fam\"), req.FormValue(\"b\")\n\tif fam == \"\" || bStr == \"\" {\n\t\treturn \"\", 0, false\n\t}\n\tb, err := strconv.Atoi(bStr)\n\tif err != nil || b < 0 || b >= len(buckets) {\n\t\treturn \"\", 0, false\n\t}\n\treturn fam, b, true\n}\n\n// An EventLog provides a log of events associated with a specific object.\ntype EventLog interface {\n\t// Printf formats its arguments with fmt.Sprintf and adds the\n\t// result to the event log.\n\tPrintf(format string, a ...interface{})\n\n\t// Errorf is like Printf, but it marks this event as an error.\n\tErrorf(format string, a ...interface{})\n\n\t// Finish declares that this event log is complete.\n\t// The event log should not be used after calling this method.\n\tFinish()\n}\n\n// NewEventLog returns a new EventLog with the specified family name\n// and title.\nfunc NewEventLog(family, title string) EventLog {\n\tel := newEventLog()\n\tel.ref()\n\tel.Family, el.Title = family, title\n\tel.Start = time.Now()\n\tel.events = make([]logEntry, 0, maxEventsPerLog)\n\tel.stack = make([]uintptr, 32)\n\tn := runtime.Callers(2, el.stack)\n\tel.stack = el.stack[:n]\n\n\tgetEventFamily(family).add(el)\n\treturn el\n}\n\nfunc (el *eventLog) Finish() {\n\tgetEventFamily(el.Family).remove(el)\n\tel.unref() // matches ref in New\n}\n\nvar (\n\tfamMu    sync.RWMutex\n\tfamilies = make(map[string]*eventFamily) // family name => family\n)\n\nfunc getEventFamily(fam string) *eventFamily {\n\tfamMu.Lock()\n\tdefer famMu.Unlock()\n\tf := families[fam]\n\tif f == nil {\n\t\tf = &eventFamily{}\n\t\tfamilies[fam] = f\n\t}\n\treturn f\n}\n\ntype eventFamily struct {\n\tmu        sync.RWMutex\n\teventLogs eventLogs\n}\n\nfunc (f *eventFamily) add(el *eventLog) {\n\tf.mu.Lock()\n\tf.eventLogs = append(f.eventLogs, el)\n\tf.mu.Unlock()\n}\n\nfunc (f *eventFamily) remove(el *eventLog) {\n\tf.mu.Lock()\n\tdefer f.mu.Unlock()\n\tfor i, el0 := range f.eventLogs {\n\t\tif el == el0 {\n\t\t\tcopy(f.eventLogs[i:], f.eventLogs[i+1:])\n\t\t\tf.eventLogs = f.eventLogs[:len(f.eventLogs)-1]\n\t\t\treturn\n\t\t}\n\t}\n}\n\nfunc (f *eventFamily) Count(now time.Time, maxErrAge time.Duration) (n int) {\n\tf.mu.RLock()\n\tdefer f.mu.RUnlock()\n\tfor _, el := range f.eventLogs {\n\t\tif el.hasRecentError(now, maxErrAge) {\n\t\t\tn++\n\t\t}\n\t}\n\treturn\n}\n\nfunc (f *eventFamily) Copy(now time.Time, maxErrAge time.Duration) (els eventLogs) {\n\tf.mu.RLock()\n\tdefer f.mu.RUnlock()\n\tels = make(eventLogs, 0, len(f.eventLogs))\n\tfor _, el := range f.eventLogs {\n\t\tif el.hasRecentError(now, maxErrAge) {\n\t\t\tel.ref()\n\t\t\tels = append(els, el)\n\t\t}\n\t}\n\treturn\n}\n\ntype eventLogs []*eventLog\n\n// Free calls unref on each element of the list.\nfunc (els eventLogs) Free() {\n\tfor _, el := range els {\n\t\tel.unref()\n\t}\n}\n\n// eventLogs may be sorted in reverse chronological order.\nfunc (els eventLogs) Len() int           { return len(els) }\nfunc (els eventLogs) Less(i, j int) bool { return els[i].Start.After(els[j].Start) }\nfunc (els eventLogs) Swap(i, j int)      { els[i], els[j] = els[j], els[i] }\n\n// A logEntry is a timestamped log entry in an event log.\ntype logEntry struct {\n\tWhen    time.Time\n\tElapsed time.Duration // since previous event in log\n\tNewDay  bool          // whether this event is on a different day to the previous event\n\tWhat    string\n\tIsErr   bool\n}\n\n// WhenString returns a string representation of the elapsed time of the event.\n// It will include the date if midnight was crossed.\nfunc (e logEntry) WhenString() string {\n\tif e.NewDay {\n\t\treturn e.When.Format(\"2006/01/02 15:04:05.000000\")\n\t}\n\treturn e.When.Format(\"15:04:05.000000\")\n}\n\n// An eventLog represents an active event log.\ntype eventLog struct {\n\t// Family is the top-level grouping of event logs to which this belongs.\n\tFamily string\n\n\t// Title is the title of this event log.\n\tTitle string\n\n\t// Timing information.\n\tStart time.Time\n\n\t// Call stack where this event log was created.\n\tstack []uintptr\n\n\t// Append-only sequence of events.\n\t//\n\t// TODO(sameer): change this to a ring buffer to avoid the array copy\n\t// when we hit maxEventsPerLog.\n\tmu            sync.RWMutex\n\tevents        []logEntry\n\tLastErrorTime time.Time\n\tdiscarded     int\n\n\trefs int32 // how many buckets this is in\n}\n\nfunc (el *eventLog) reset() {\n\t// Clear all but the mutex. Mutexes may not be copied, even when unlocked.\n\tel.Family = \"\"\n\tel.Title = \"\"\n\tel.Start = time.Time{}\n\tel.stack = nil\n\tel.events = nil\n\tel.LastErrorTime = time.Time{}\n\tel.discarded = 0\n\tel.refs = 0\n}\n\nfunc (el *eventLog) hasRecentError(now time.Time, maxErrAge time.Duration) bool {\n\tif maxErrAge == 0 {\n\t\treturn true\n\t}\n\tel.mu.RLock()\n\tdefer el.mu.RUnlock()\n\treturn now.Sub(el.LastErrorTime) < maxErrAge\n}\n\n// delta returns the elapsed time since the last event or the log start,\n// and whether it spans midnight.\n// L >= el.mu\nfunc (el *eventLog) delta(t time.Time) (time.Duration, bool) {\n\tif len(el.events) == 0 {\n\t\treturn t.Sub(el.Start), false\n\t}\n\tprev := el.events[len(el.events)-1].When\n\treturn t.Sub(prev), prev.Day() != t.Day()\n\n}\n\nfunc (el *eventLog) Printf(format string, a ...interface{}) {\n\tel.printf(false, format, a...)\n}\n\nfunc (el *eventLog) Errorf(format string, a ...interface{}) {\n\tel.printf(true, format, a...)\n}\n\nfunc (el *eventLog) printf(isErr bool, format string, a ...interface{}) {\n\te := logEntry{When: time.Now(), IsErr: isErr, What: fmt.Sprintf(format, a...)}\n\tel.mu.Lock()\n\te.Elapsed, e.NewDay = el.delta(e.When)\n\tif len(el.events) < maxEventsPerLog {\n\t\tel.events = append(el.events, e)\n\t} else {\n\t\t// Discard the oldest event.\n\t\tif el.discarded == 0 {\n\t\t\t// el.discarded starts at two to count for the event it\n\t\t\t// is replacing, plus the next one that we are about to\n\t\t\t// drop.\n\t\t\tel.discarded = 2\n\t\t} else {\n\t\t\tel.discarded++\n\t\t}\n\t\t// TODO(sameer): if this causes allocations on a critical path,\n\t\t// change eventLog.What to be a fmt.Stringer, as in trace.go.\n\t\tel.events[0].What = fmt.Sprintf(\"(%d events discarded)\", el.discarded)\n\t\t// The timestamp of the discarded meta-event should be\n\t\t// the time of the last event it is representing.\n\t\tel.events[0].When = el.events[1].When\n\t\tcopy(el.events[1:], el.events[2:])\n\t\tel.events[maxEventsPerLog-1] = e\n\t}\n\tif e.IsErr {\n\t\tel.LastErrorTime = e.When\n\t}\n\tel.mu.Unlock()\n}\n\nfunc (el *eventLog) ref() {\n\tatomic.AddInt32(&el.refs, 1)\n}\n\nfunc (el *eventLog) unref() {\n\tif atomic.AddInt32(&el.refs, -1) == 0 {\n\t\tfreeEventLog(el)\n\t}\n}\n\nfunc (el *eventLog) When() string {\n\treturn el.Start.Format(\"2006/01/02 15:04:05.000000\")\n}\n\nfunc (el *eventLog) ElapsedTime() string {\n\telapsed := time.Since(el.Start)\n\treturn fmt.Sprintf(\"%.6f\", elapsed.Seconds())\n}\n\nfunc (el *eventLog) Stack() string {\n\tbuf := new(bytes.Buffer)\n\ttw := tabwriter.NewWriter(buf, 1, 8, 1, '\\t', 0)\n\tprintStackRecord(tw, el.stack)\n\ttw.Flush()\n\treturn buf.String()\n}\n\n// printStackRecord prints the function + source line information\n// for a single stack trace.\n// Adapted from runtime/pprof/pprof.go.\nfunc printStackRecord(w io.Writer, stk []uintptr) {\n\tfor _, pc := range stk {\n\t\tf := runtime.FuncForPC(pc)\n\t\tif f == nil {\n\t\t\tcontinue\n\t\t}\n\t\tfile, line := f.FileLine(pc)\n\t\tname := f.Name()\n\t\t// Hide runtime.goexit and any runtime functions at the beginning.\n\t\tif strings.HasPrefix(name, \"runtime.\") {\n\t\t\tcontinue\n\t\t}\n\t\tfmt.Fprintf(w, \"#   %s\\t%s:%d\\n\", name, file, line)\n\t}\n}\n\nfunc (el *eventLog) Events() []logEntry {\n\tel.mu.RLock()\n\tdefer el.mu.RUnlock()\n\treturn el.events\n}\n\n// freeEventLogs is a freelist of *eventLog\nvar freeEventLogs = make(chan *eventLog, 1000)\n\n// newEventLog returns a event log ready to use.\nfunc newEventLog() *eventLog {\n\tselect {\n\tcase el := <-freeEventLogs:\n\t\treturn el\n\tdefault:\n\t\treturn new(eventLog)\n\t}\n}\n\n// freeEventLog adds el to freeEventLogs if there's room.\n// This is non-blocking.\nfunc freeEventLog(el *eventLog) {\n\tel.reset()\n\tselect {\n\tcase freeEventLogs <- el:\n\tdefault:\n\t}\n}\n\nvar eventsTmplCache *template.Template\nvar eventsTmplOnce sync.Once\n\nfunc eventsTmpl() *template.Template {\n\teventsTmplOnce.Do(func() {\n\t\teventsTmplCache = template.Must(template.New(\"events\").Funcs(template.FuncMap{\n\t\t\t\"elapsed\":   elapsed,\n\t\t\t\"trimSpace\": strings.TrimSpace,\n\t\t}).Parse(eventsHTML))\n\t})\n\treturn eventsTmplCache\n}\n\nconst eventsHTML = `\n<html>\n\t<head>\n\t\t<title>events</title>\n\t</head>\n\t<style type=\"text/css\">\n\t\tbody {\n\t\t\tfont-family: sans-serif;\n\t\t}\n\t\ttable#req-status td.family {\n\t\t\tpadding-right: 2em;\n\t\t}\n\t\ttable#req-status td.active {\n\t\t\tpadding-right: 1em;\n\t\t}\n\t\ttable#req-status td.empty {\n\t\t\tcolor: #aaa;\n\t\t}\n\t\ttable#reqs {\n\t\t\tmargin-top: 1em;\n\t\t}\n\t\ttable#reqs tr.first {\n\t\t\t{{if $.Expanded}}font-weight: bold;{{end}}\n\t\t}\n\t\ttable#reqs td {\n\t\t\tfont-family: monospace;\n\t\t}\n\t\ttable#reqs td.when {\n\t\t\ttext-align: right;\n\t\t\twhite-space: nowrap;\n\t\t}\n\t\ttable#reqs td.elapsed {\n\t\t\tpadding: 0 0.5em;\n\t\t\ttext-align: right;\n\t\t\twhite-space: pre;\n\t\t\twidth: 10em;\n\t\t}\n\t\taddress {\n\t\t\tfont-size: smaller;\n\t\t\tmargin-top: 5em;\n\t\t}\n\t</style>\n\t<body>\n\n<h1>/debug/events</h1>\n\n<table id=\"req-status\">\n\t{{range $i, $fam := .Families}}\n\t<tr>\n\t\t<td class=\"family\">{{$fam}}</td>\n\n\t        {{range $j, $bucket := $.Buckets}}\n\t        {{$n := index $.Counts $i $j}}\n\t\t<td class=\"{{if not $bucket.MaxErrAge}}active{{end}}{{if not $n}}empty{{end}}\">\n\t                {{if $n}}<a href=\"?fam={{$fam}}&b={{$j}}{{if $.Expanded}}&exp=1{{end}}\">{{end}}\n\t\t        [{{$n}} {{$bucket.String}}]\n\t\t\t{{if $n}}</a>{{end}}\n\t\t</td>\n                {{end}}\n\n\t</tr>{{end}}\n</table>\n\n{{if $.EventLogs}}\n<hr />\n<h3>Family: {{$.Family}}</h3>\n\n{{if $.Expanded}}<a href=\"?fam={{$.Family}}&b={{$.Bucket}}\">{{end}}\n[Summary]{{if $.Expanded}}</a>{{end}}\n\n{{if not $.Expanded}}<a href=\"?fam={{$.Family}}&b={{$.Bucket}}&exp=1\">{{end}}\n[Expanded]{{if not $.Expanded}}</a>{{end}}\n\n<table id=\"reqs\">\n\t<tr><th>When</th><th>Elapsed</th></tr>\n\t{{range $el := $.EventLogs}}\n\t<tr class=\"first\">\n\t\t<td class=\"when\">{{$el.When}}</td>\n\t\t<td class=\"elapsed\">{{$el.ElapsedTime}}</td>\n\t\t<td>{{$el.Title}}\n\t</tr>\n\t{{if $.Expanded}}\n\t<tr>\n\t\t<td class=\"when\"></td>\n\t\t<td class=\"elapsed\"></td>\n\t\t<td><pre>{{$el.Stack|trimSpace}}</pre></td>\n\t</tr>\n\t{{range $el.Events}}\n\t<tr>\n\t\t<td class=\"when\">{{.WhenString}}</td>\n\t\t<td class=\"elapsed\">{{elapsed .Elapsed}}</td>\n\t\t<td>.{{if .IsErr}}E{{else}}.{{end}}. {{.What}}</td>\n\t</tr>\n\t{{end}}\n\t{{end}}\n\t{{end}}\n</table>\n{{end}}\n\t</body>\n</html>\n`\n"
  },
  {
    "path": "vendor/golang.org/x/net/trace/histogram.go",
    "content": "// Copyright 2015 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage trace\n\n// This file implements histogramming for RPC statistics collection.\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"html/template\"\n\t\"log\"\n\t\"math\"\n\t\"sync\"\n\n\t\"golang.org/x/net/internal/timeseries\"\n)\n\nconst (\n\tbucketCount = 38\n)\n\n// histogram keeps counts of values in buckets that are spaced\n// out in powers of 2: 0-1, 2-3, 4-7...\n// histogram implements timeseries.Observable\ntype histogram struct {\n\tsum          int64   // running total of measurements\n\tsumOfSquares float64 // square of running total\n\tbuckets      []int64 // bucketed values for histogram\n\tvalue        int     // holds a single value as an optimization\n\tvalueCount   int64   // number of values recorded for single value\n}\n\n// AddMeasurement records a value measurement observation to the histogram.\nfunc (h *histogram) addMeasurement(value int64) {\n\t// TODO: assert invariant\n\th.sum += value\n\th.sumOfSquares += float64(value) * float64(value)\n\n\tbucketIndex := getBucket(value)\n\n\tif h.valueCount == 0 || (h.valueCount > 0 && h.value == bucketIndex) {\n\t\th.value = bucketIndex\n\t\th.valueCount++\n\t} else {\n\t\th.allocateBuckets()\n\t\th.buckets[bucketIndex]++\n\t}\n}\n\nfunc (h *histogram) allocateBuckets() {\n\tif h.buckets == nil {\n\t\th.buckets = make([]int64, bucketCount)\n\t\th.buckets[h.value] = h.valueCount\n\t\th.value = 0\n\t\th.valueCount = -1\n\t}\n}\n\nfunc log2(i int64) int {\n\tn := 0\n\tfor ; i >= 0x100; i >>= 8 {\n\t\tn += 8\n\t}\n\tfor ; i > 0; i >>= 1 {\n\t\tn += 1\n\t}\n\treturn n\n}\n\nfunc getBucket(i int64) (index int) {\n\tindex = log2(i) - 1\n\tif index < 0 {\n\t\tindex = 0\n\t}\n\tif index >= bucketCount {\n\t\tindex = bucketCount - 1\n\t}\n\treturn\n}\n\n// Total returns the number of recorded observations.\nfunc (h *histogram) total() (total int64) {\n\tif h.valueCount >= 0 {\n\t\ttotal = h.valueCount\n\t}\n\tfor _, val := range h.buckets {\n\t\ttotal += int64(val)\n\t}\n\treturn\n}\n\n// Average returns the average value of recorded observations.\nfunc (h *histogram) average() float64 {\n\tt := h.total()\n\tif t == 0 {\n\t\treturn 0\n\t}\n\treturn float64(h.sum) / float64(t)\n}\n\n// Variance returns the variance of recorded observations.\nfunc (h *histogram) variance() float64 {\n\tt := float64(h.total())\n\tif t == 0 {\n\t\treturn 0\n\t}\n\ts := float64(h.sum) / t\n\treturn h.sumOfSquares/t - s*s\n}\n\n// StandardDeviation returns the standard deviation of recorded observations.\nfunc (h *histogram) standardDeviation() float64 {\n\treturn math.Sqrt(h.variance())\n}\n\n// PercentileBoundary estimates the value that the given fraction of recorded\n// observations are less than.\nfunc (h *histogram) percentileBoundary(percentile float64) int64 {\n\ttotal := h.total()\n\n\t// Corner cases (make sure result is strictly less than Total())\n\tif total == 0 {\n\t\treturn 0\n\t} else if total == 1 {\n\t\treturn int64(h.average())\n\t}\n\n\tpercentOfTotal := round(float64(total) * percentile)\n\tvar runningTotal int64\n\n\tfor i := range h.buckets {\n\t\tvalue := h.buckets[i]\n\t\trunningTotal += value\n\t\tif runningTotal == percentOfTotal {\n\t\t\t// We hit an exact bucket boundary. If the next bucket has data, it is a\n\t\t\t// good estimate of the value. If the bucket is empty, we interpolate the\n\t\t\t// midpoint between the next bucket's boundary and the next non-zero\n\t\t\t// bucket. If the remaining buckets are all empty, then we use the\n\t\t\t// boundary for the next bucket as the estimate.\n\t\t\tj := uint8(i + 1)\n\t\t\tmin := bucketBoundary(j)\n\t\t\tif runningTotal < total {\n\t\t\t\tfor h.buckets[j] == 0 {\n\t\t\t\t\tj++\n\t\t\t\t}\n\t\t\t}\n\t\t\tmax := bucketBoundary(j)\n\t\t\treturn min + round(float64(max-min)/2)\n\t\t} else if runningTotal > percentOfTotal {\n\t\t\t// The value is in this bucket. Interpolate the value.\n\t\t\tdelta := runningTotal - percentOfTotal\n\t\t\tpercentBucket := float64(value-delta) / float64(value)\n\t\t\tbucketMin := bucketBoundary(uint8(i))\n\t\t\tnextBucketMin := bucketBoundary(uint8(i + 1))\n\t\t\tbucketSize := nextBucketMin - bucketMin\n\t\t\treturn bucketMin + round(percentBucket*float64(bucketSize))\n\t\t}\n\t}\n\treturn bucketBoundary(bucketCount - 1)\n}\n\n// Median returns the estimated median of the observed values.\nfunc (h *histogram) median() int64 {\n\treturn h.percentileBoundary(0.5)\n}\n\n// Add adds other to h.\nfunc (h *histogram) Add(other timeseries.Observable) {\n\to := other.(*histogram)\n\tif o.valueCount == 0 {\n\t\t// Other histogram is empty\n\t} else if h.valueCount >= 0 && o.valueCount > 0 && h.value == o.value {\n\t\t// Both have a single bucketed value, aggregate them\n\t\th.valueCount += o.valueCount\n\t} else {\n\t\t// Two different values necessitate buckets in this histogram\n\t\th.allocateBuckets()\n\t\tif o.valueCount >= 0 {\n\t\t\th.buckets[o.value] += o.valueCount\n\t\t} else {\n\t\t\tfor i := range h.buckets {\n\t\t\t\th.buckets[i] += o.buckets[i]\n\t\t\t}\n\t\t}\n\t}\n\th.sumOfSquares += o.sumOfSquares\n\th.sum += o.sum\n}\n\n// Clear resets the histogram to an empty state, removing all observed values.\nfunc (h *histogram) Clear() {\n\th.buckets = nil\n\th.value = 0\n\th.valueCount = 0\n\th.sum = 0\n\th.sumOfSquares = 0\n}\n\n// CopyFrom copies from other, which must be a *histogram, into h.\nfunc (h *histogram) CopyFrom(other timeseries.Observable) {\n\to := other.(*histogram)\n\tif o.valueCount == -1 {\n\t\th.allocateBuckets()\n\t\tcopy(h.buckets, o.buckets)\n\t}\n\th.sum = o.sum\n\th.sumOfSquares = o.sumOfSquares\n\th.value = o.value\n\th.valueCount = o.valueCount\n}\n\n// Multiply scales the histogram by the specified ratio.\nfunc (h *histogram) Multiply(ratio float64) {\n\tif h.valueCount == -1 {\n\t\tfor i := range h.buckets {\n\t\t\th.buckets[i] = int64(float64(h.buckets[i]) * ratio)\n\t\t}\n\t} else {\n\t\th.valueCount = int64(float64(h.valueCount) * ratio)\n\t}\n\th.sum = int64(float64(h.sum) * ratio)\n\th.sumOfSquares = h.sumOfSquares * ratio\n}\n\n// New creates a new histogram.\nfunc (h *histogram) New() timeseries.Observable {\n\tr := new(histogram)\n\tr.Clear()\n\treturn r\n}\n\nfunc (h *histogram) String() string {\n\treturn fmt.Sprintf(\"%d, %f, %d, %d, %v\",\n\t\th.sum, h.sumOfSquares, h.value, h.valueCount, h.buckets)\n}\n\n// round returns the closest int64 to the argument\nfunc round(in float64) int64 {\n\treturn int64(math.Floor(in + 0.5))\n}\n\n// bucketBoundary returns the first value in the bucket.\nfunc bucketBoundary(bucket uint8) int64 {\n\tif bucket == 0 {\n\t\treturn 0\n\t}\n\treturn 1 << bucket\n}\n\n// bucketData holds data about a specific bucket for use in distTmpl.\ntype bucketData struct {\n\tLower, Upper       int64\n\tN                  int64\n\tPct, CumulativePct float64\n\tGraphWidth         int\n}\n\n// data holds data about a Distribution for use in distTmpl.\ntype data struct {\n\tBuckets                 []*bucketData\n\tCount, Median           int64\n\tMean, StandardDeviation float64\n}\n\n// maxHTMLBarWidth is the maximum width of the HTML bar for visualizing buckets.\nconst maxHTMLBarWidth = 350.0\n\n// newData returns data representing h for use in distTmpl.\nfunc (h *histogram) newData() *data {\n\t// Force the allocation of buckets to simplify the rendering implementation\n\th.allocateBuckets()\n\t// We scale the bars on the right so that the largest bar is\n\t// maxHTMLBarWidth pixels in width.\n\tmaxBucket := int64(0)\n\tfor _, n := range h.buckets {\n\t\tif n > maxBucket {\n\t\t\tmaxBucket = n\n\t\t}\n\t}\n\ttotal := h.total()\n\tbarsizeMult := maxHTMLBarWidth / float64(maxBucket)\n\tvar pctMult float64\n\tif total == 0 {\n\t\tpctMult = 1.0\n\t} else {\n\t\tpctMult = 100.0 / float64(total)\n\t}\n\n\tbuckets := make([]*bucketData, len(h.buckets))\n\trunningTotal := int64(0)\n\tfor i, n := range h.buckets {\n\t\tif n == 0 {\n\t\t\tcontinue\n\t\t}\n\t\trunningTotal += n\n\t\tvar upperBound int64\n\t\tif i < bucketCount-1 {\n\t\t\tupperBound = bucketBoundary(uint8(i + 1))\n\t\t} else {\n\t\t\tupperBound = math.MaxInt64\n\t\t}\n\t\tbuckets[i] = &bucketData{\n\t\t\tLower:         bucketBoundary(uint8(i)),\n\t\t\tUpper:         upperBound,\n\t\t\tN:             n,\n\t\t\tPct:           float64(n) * pctMult,\n\t\t\tCumulativePct: float64(runningTotal) * pctMult,\n\t\t\tGraphWidth:    int(float64(n) * barsizeMult),\n\t\t}\n\t}\n\treturn &data{\n\t\tBuckets:           buckets,\n\t\tCount:             total,\n\t\tMedian:            h.median(),\n\t\tMean:              h.average(),\n\t\tStandardDeviation: h.standardDeviation(),\n\t}\n}\n\nfunc (h *histogram) html() template.HTML {\n\tbuf := new(bytes.Buffer)\n\tif err := distTmpl().Execute(buf, h.newData()); err != nil {\n\t\tbuf.Reset()\n\t\tlog.Printf(\"net/trace: couldn't execute template: %v\", err)\n\t}\n\treturn template.HTML(buf.String())\n}\n\nvar distTmplCache *template.Template\nvar distTmplOnce sync.Once\n\nfunc distTmpl() *template.Template {\n\tdistTmplOnce.Do(func() {\n\t\t// Input: data\n\t\tdistTmplCache = template.Must(template.New(\"distTmpl\").Parse(`\n<table>\n<tr>\n    <td style=\"padding:0.25em\">Count: {{.Count}}</td>\n    <td style=\"padding:0.25em\">Mean: {{printf \"%.0f\" .Mean}}</td>\n    <td style=\"padding:0.25em\">StdDev: {{printf \"%.0f\" .StandardDeviation}}</td>\n    <td style=\"padding:0.25em\">Median: {{.Median}}</td>\n</tr>\n</table>\n<hr>\n<table>\n{{range $b := .Buckets}}\n{{if $b}}\n  <tr>\n    <td style=\"padding:0 0 0 0.25em\">[</td>\n    <td style=\"text-align:right;padding:0 0.25em\">{{.Lower}},</td>\n    <td style=\"text-align:right;padding:0 0.25em\">{{.Upper}})</td>\n    <td style=\"text-align:right;padding:0 0.25em\">{{.N}}</td>\n    <td style=\"text-align:right;padding:0 0.25em\">{{printf \"%#.3f\" .Pct}}%</td>\n    <td style=\"text-align:right;padding:0 0.25em\">{{printf \"%#.3f\" .CumulativePct}}%</td>\n    <td><div style=\"background-color: blue; height: 1em; width: {{.GraphWidth}};\"></div></td>\n  </tr>\n{{end}}\n{{end}}\n</table>\n`))\n\t})\n\treturn distTmplCache\n}\n"
  },
  {
    "path": "vendor/golang.org/x/net/trace/trace.go",
    "content": "// Copyright 2015 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n/*\nPackage trace implements tracing of requests and long-lived objects.\nIt exports HTTP interfaces on /debug/requests and /debug/events.\n\nA trace.Trace provides tracing for short-lived objects, usually requests.\nA request handler might be implemented like this:\n\n\tfunc fooHandler(w http.ResponseWriter, req *http.Request) {\n\t\ttr := trace.New(\"mypkg.Foo\", req.URL.Path)\n\t\tdefer tr.Finish()\n\t\t...\n\t\ttr.LazyPrintf(\"some event %q happened\", str)\n\t\t...\n\t\tif err := somethingImportant(); err != nil {\n\t\t\ttr.LazyPrintf(\"somethingImportant failed: %v\", err)\n\t\t\ttr.SetError()\n\t\t}\n\t}\n\nThe /debug/requests HTTP endpoint organizes the traces by family,\nerrors, and duration.  It also provides histogram of request duration\nfor each family.\n\nA trace.EventLog provides tracing for long-lived objects, such as RPC\nconnections.\n\n\t// A Fetcher fetches URL paths for a single domain.\n\ttype Fetcher struct {\n\t\tdomain string\n\t\tevents trace.EventLog\n\t}\n\n\tfunc NewFetcher(domain string) *Fetcher {\n\t\treturn &Fetcher{\n\t\t\tdomain,\n\t\t\ttrace.NewEventLog(\"mypkg.Fetcher\", domain),\n\t\t}\n\t}\n\n\tfunc (f *Fetcher) Fetch(path string) (string, error) {\n\t\tresp, err := http.Get(\"http://\" + f.domain + \"/\" + path)\n\t\tif err != nil {\n\t\t\tf.events.Errorf(\"Get(%q) = %v\", path, err)\n\t\t\treturn \"\", err\n\t\t}\n\t\tf.events.Printf(\"Get(%q) = %s\", path, resp.Status)\n\t\t...\n\t}\n\n\tfunc (f *Fetcher) Close() error {\n\t\tf.events.Finish()\n\t\treturn nil\n\t}\n\nThe /debug/events HTTP endpoint organizes the event logs by family and\nby time since the last error.  The expanded view displays recent log\nentries and the log's call stack.\n*/\npackage trace // import \"golang.org/x/net/trace\"\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"fmt\"\n\t\"html/template\"\n\t\"io\"\n\t\"log\"\n\t\"net\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"runtime\"\n\t\"sort\"\n\t\"strconv\"\n\t\"sync\"\n\t\"sync/atomic\"\n\t\"time\"\n\n\t\"golang.org/x/net/internal/timeseries\"\n)\n\n// DebugUseAfterFinish controls whether to debug uses of Trace values after finishing.\n// FOR DEBUGGING ONLY. This will slow down the program.\nvar DebugUseAfterFinish = false\n\n// HTTP ServeMux paths.\nconst (\n\tdebugRequestsPath = \"/debug/requests\"\n\tdebugEventsPath   = \"/debug/events\"\n)\n\n// AuthRequest determines whether a specific request is permitted to load the\n// /debug/requests or /debug/events pages.\n//\n// It returns two bools; the first indicates whether the page may be viewed at all,\n// and the second indicates whether sensitive events will be shown.\n//\n// AuthRequest may be replaced by a program to customize its authorization requirements.\n//\n// The default AuthRequest function returns (true, true) if and only if the request\n// comes from localhost/127.0.0.1/[::1].\nvar AuthRequest = func(req *http.Request) (any, sensitive bool) {\n\t// RemoteAddr is commonly in the form \"IP\" or \"IP:port\".\n\t// If it is in the form \"IP:port\", split off the port.\n\thost, _, err := net.SplitHostPort(req.RemoteAddr)\n\tif err != nil {\n\t\thost = req.RemoteAddr\n\t}\n\tswitch host {\n\tcase \"localhost\", \"127.0.0.1\", \"::1\":\n\t\treturn true, true\n\tdefault:\n\t\treturn false, false\n\t}\n}\n\nfunc init() {\n\t_, pat := http.DefaultServeMux.Handler(&http.Request{URL: &url.URL{Path: debugRequestsPath}})\n\tif pat == debugRequestsPath {\n\t\tpanic(\"/debug/requests is already registered. You may have two independent copies of \" +\n\t\t\t\"golang.org/x/net/trace in your binary, trying to maintain separate state. This may \" +\n\t\t\t\"involve a vendored copy of golang.org/x/net/trace.\")\n\t}\n\n\t// TODO(jbd): Serve Traces from /debug/traces in the future?\n\t// There is no requirement for a request to be present to have traces.\n\thttp.HandleFunc(debugRequestsPath, Traces)\n\thttp.HandleFunc(debugEventsPath, Events)\n}\n\n// NewContext returns a copy of the parent context\n// and associates it with a Trace.\nfunc NewContext(ctx context.Context, tr Trace) context.Context {\n\treturn context.WithValue(ctx, contextKey, tr)\n}\n\n// FromContext returns the Trace bound to the context, if any.\nfunc FromContext(ctx context.Context) (tr Trace, ok bool) {\n\ttr, ok = ctx.Value(contextKey).(Trace)\n\treturn\n}\n\n// Traces responds with traces from the program.\n// The package initialization registers it in http.DefaultServeMux\n// at /debug/requests.\n//\n// It performs authorization by running AuthRequest.\nfunc Traces(w http.ResponseWriter, req *http.Request) {\n\tany, sensitive := AuthRequest(req)\n\tif !any {\n\t\thttp.Error(w, \"not allowed\", http.StatusUnauthorized)\n\t\treturn\n\t}\n\tw.Header().Set(\"Content-Type\", \"text/html; charset=utf-8\")\n\tRender(w, req, sensitive)\n}\n\n// Events responds with a page of events collected by EventLogs.\n// The package initialization registers it in http.DefaultServeMux\n// at /debug/events.\n//\n// It performs authorization by running AuthRequest.\nfunc Events(w http.ResponseWriter, req *http.Request) {\n\tany, sensitive := AuthRequest(req)\n\tif !any {\n\t\thttp.Error(w, \"not allowed\", http.StatusUnauthorized)\n\t\treturn\n\t}\n\tw.Header().Set(\"Content-Type\", \"text/html; charset=utf-8\")\n\tRenderEvents(w, req, sensitive)\n}\n\n// Render renders the HTML page typically served at /debug/requests.\n// It does not do any auth checking. The request may be nil.\n//\n// Most users will use the Traces handler.\nfunc Render(w io.Writer, req *http.Request, sensitive bool) {\n\tdata := &struct {\n\t\tFamilies         []string\n\t\tActiveTraceCount map[string]int\n\t\tCompletedTraces  map[string]*family\n\n\t\t// Set when a bucket has been selected.\n\t\tTraces        traceList\n\t\tFamily        string\n\t\tBucket        int\n\t\tExpanded      bool\n\t\tTraced        bool\n\t\tActive        bool\n\t\tShowSensitive bool // whether to show sensitive events\n\n\t\tHistogram       template.HTML\n\t\tHistogramWindow string // e.g. \"last minute\", \"last hour\", \"all time\"\n\n\t\t// If non-zero, the set of traces is a partial set,\n\t\t// and this is the total number.\n\t\tTotal int\n\t}{\n\t\tCompletedTraces: completedTraces,\n\t}\n\n\tdata.ShowSensitive = sensitive\n\tif req != nil {\n\t\t// Allow show_sensitive=0 to force hiding of sensitive data for testing.\n\t\t// This only goes one way; you can't use show_sensitive=1 to see things.\n\t\tif req.FormValue(\"show_sensitive\") == \"0\" {\n\t\t\tdata.ShowSensitive = false\n\t\t}\n\n\t\tif exp, err := strconv.ParseBool(req.FormValue(\"exp\")); err == nil {\n\t\t\tdata.Expanded = exp\n\t\t}\n\t\tif exp, err := strconv.ParseBool(req.FormValue(\"rtraced\")); err == nil {\n\t\t\tdata.Traced = exp\n\t\t}\n\t}\n\n\tcompletedMu.RLock()\n\tdata.Families = make([]string, 0, len(completedTraces))\n\tfor fam := range completedTraces {\n\t\tdata.Families = append(data.Families, fam)\n\t}\n\tcompletedMu.RUnlock()\n\tsort.Strings(data.Families)\n\n\t// We are careful here to minimize the time spent locking activeMu,\n\t// since that lock is required every time an RPC starts and finishes.\n\tdata.ActiveTraceCount = make(map[string]int, len(data.Families))\n\tactiveMu.RLock()\n\tfor fam, s := range activeTraces {\n\t\tdata.ActiveTraceCount[fam] = s.Len()\n\t}\n\tactiveMu.RUnlock()\n\n\tvar ok bool\n\tdata.Family, data.Bucket, ok = parseArgs(req)\n\tswitch {\n\tcase !ok:\n\t\t// No-op\n\tcase data.Bucket == -1:\n\t\tdata.Active = true\n\t\tn := data.ActiveTraceCount[data.Family]\n\t\tdata.Traces = getActiveTraces(data.Family)\n\t\tif len(data.Traces) < n {\n\t\t\tdata.Total = n\n\t\t}\n\tcase data.Bucket < bucketsPerFamily:\n\t\tif b := lookupBucket(data.Family, data.Bucket); b != nil {\n\t\t\tdata.Traces = b.Copy(data.Traced)\n\t\t}\n\tdefault:\n\t\tif f := getFamily(data.Family, false); f != nil {\n\t\t\tvar obs timeseries.Observable\n\t\t\tf.LatencyMu.RLock()\n\t\t\tswitch o := data.Bucket - bucketsPerFamily; o {\n\t\t\tcase 0:\n\t\t\t\tobs = f.Latency.Minute()\n\t\t\t\tdata.HistogramWindow = \"last minute\"\n\t\t\tcase 1:\n\t\t\t\tobs = f.Latency.Hour()\n\t\t\t\tdata.HistogramWindow = \"last hour\"\n\t\t\tcase 2:\n\t\t\t\tobs = f.Latency.Total()\n\t\t\t\tdata.HistogramWindow = \"all time\"\n\t\t\t}\n\t\t\tf.LatencyMu.RUnlock()\n\t\t\tif obs != nil {\n\t\t\t\tdata.Histogram = obs.(*histogram).html()\n\t\t\t}\n\t\t}\n\t}\n\n\tif data.Traces != nil {\n\t\tdefer data.Traces.Free()\n\t\tsort.Sort(data.Traces)\n\t}\n\n\tcompletedMu.RLock()\n\tdefer completedMu.RUnlock()\n\tif err := pageTmpl().ExecuteTemplate(w, \"Page\", data); err != nil {\n\t\tlog.Printf(\"net/trace: Failed executing template: %v\", err)\n\t}\n}\n\nfunc parseArgs(req *http.Request) (fam string, b int, ok bool) {\n\tif req == nil {\n\t\treturn \"\", 0, false\n\t}\n\tfam, bStr := req.FormValue(\"fam\"), req.FormValue(\"b\")\n\tif fam == \"\" || bStr == \"\" {\n\t\treturn \"\", 0, false\n\t}\n\tb, err := strconv.Atoi(bStr)\n\tif err != nil || b < -1 {\n\t\treturn \"\", 0, false\n\t}\n\n\treturn fam, b, true\n}\n\nfunc lookupBucket(fam string, b int) *traceBucket {\n\tf := getFamily(fam, false)\n\tif f == nil || b < 0 || b >= len(f.Buckets) {\n\t\treturn nil\n\t}\n\treturn f.Buckets[b]\n}\n\ntype contextKeyT string\n\nvar contextKey = contextKeyT(\"golang.org/x/net/trace.Trace\")\n\n// Trace represents an active request.\ntype Trace interface {\n\t// LazyLog adds x to the event log. It will be evaluated each time the\n\t// /debug/requests page is rendered. Any memory referenced by x will be\n\t// pinned until the trace is finished and later discarded.\n\tLazyLog(x fmt.Stringer, sensitive bool)\n\n\t// LazyPrintf evaluates its arguments with fmt.Sprintf each time the\n\t// /debug/requests page is rendered. Any memory referenced by a will be\n\t// pinned until the trace is finished and later discarded.\n\tLazyPrintf(format string, a ...interface{})\n\n\t// SetError declares that this trace resulted in an error.\n\tSetError()\n\n\t// SetRecycler sets a recycler for the trace.\n\t// f will be called for each event passed to LazyLog at a time when\n\t// it is no longer required, whether while the trace is still active\n\t// and the event is discarded, or when a completed trace is discarded.\n\tSetRecycler(f func(interface{}))\n\n\t// SetTraceInfo sets the trace info for the trace.\n\t// This is currently unused.\n\tSetTraceInfo(traceID, spanID uint64)\n\n\t// SetMaxEvents sets the maximum number of events that will be stored\n\t// in the trace. This has no effect if any events have already been\n\t// added to the trace.\n\tSetMaxEvents(m int)\n\n\t// Finish declares that this trace is complete.\n\t// The trace should not be used after calling this method.\n\tFinish()\n}\n\ntype lazySprintf struct {\n\tformat string\n\ta      []interface{}\n}\n\nfunc (l *lazySprintf) String() string {\n\treturn fmt.Sprintf(l.format, l.a...)\n}\n\n// New returns a new Trace with the specified family and title.\nfunc New(family, title string) Trace {\n\ttr := newTrace()\n\ttr.ref()\n\ttr.Family, tr.Title = family, title\n\ttr.Start = time.Now()\n\ttr.maxEvents = maxEventsPerTrace\n\ttr.events = tr.eventsBuf[:0]\n\n\tactiveMu.RLock()\n\ts := activeTraces[tr.Family]\n\tactiveMu.RUnlock()\n\tif s == nil {\n\t\tactiveMu.Lock()\n\t\ts = activeTraces[tr.Family] // check again\n\t\tif s == nil {\n\t\t\ts = new(traceSet)\n\t\t\tactiveTraces[tr.Family] = s\n\t\t}\n\t\tactiveMu.Unlock()\n\t}\n\ts.Add(tr)\n\n\t// Trigger allocation of the completed trace structure for this family.\n\t// This will cause the family to be present in the request page during\n\t// the first trace of this family. We don't care about the return value,\n\t// nor is there any need for this to run inline, so we execute it in its\n\t// own goroutine, but only if the family isn't allocated yet.\n\tcompletedMu.RLock()\n\tif _, ok := completedTraces[tr.Family]; !ok {\n\t\tgo allocFamily(tr.Family)\n\t}\n\tcompletedMu.RUnlock()\n\n\treturn tr\n}\n\nfunc (tr *trace) Finish() {\n\telapsed := time.Now().Sub(tr.Start)\n\ttr.mu.Lock()\n\ttr.Elapsed = elapsed\n\ttr.mu.Unlock()\n\n\tif DebugUseAfterFinish {\n\t\tbuf := make([]byte, 4<<10) // 4 KB should be enough\n\t\tn := runtime.Stack(buf, false)\n\t\ttr.finishStack = buf[:n]\n\t}\n\n\tactiveMu.RLock()\n\tm := activeTraces[tr.Family]\n\tactiveMu.RUnlock()\n\tm.Remove(tr)\n\n\tf := getFamily(tr.Family, true)\n\ttr.mu.RLock() // protects tr fields in Cond.match calls\n\tfor _, b := range f.Buckets {\n\t\tif b.Cond.match(tr) {\n\t\t\tb.Add(tr)\n\t\t}\n\t}\n\ttr.mu.RUnlock()\n\n\t// Add a sample of elapsed time as microseconds to the family's timeseries\n\th := new(histogram)\n\th.addMeasurement(elapsed.Nanoseconds() / 1e3)\n\tf.LatencyMu.Lock()\n\tf.Latency.Add(h)\n\tf.LatencyMu.Unlock()\n\n\ttr.unref() // matches ref in New\n}\n\nconst (\n\tbucketsPerFamily    = 9\n\ttracesPerBucket     = 10\n\tmaxActiveTraces     = 20 // Maximum number of active traces to show.\n\tmaxEventsPerTrace   = 10\n\tnumHistogramBuckets = 38\n)\n\nvar (\n\t// The active traces.\n\tactiveMu     sync.RWMutex\n\tactiveTraces = make(map[string]*traceSet) // family -> traces\n\n\t// Families of completed traces.\n\tcompletedMu     sync.RWMutex\n\tcompletedTraces = make(map[string]*family) // family -> traces\n)\n\ntype traceSet struct {\n\tmu sync.RWMutex\n\tm  map[*trace]bool\n\n\t// We could avoid the entire map scan in FirstN by having a slice of all the traces\n\t// ordered by start time, and an index into that from the trace struct, with a periodic\n\t// repack of the slice after enough traces finish; we could also use a skip list or similar.\n\t// However, that would shift some of the expense from /debug/requests time to RPC time,\n\t// which is probably the wrong trade-off.\n}\n\nfunc (ts *traceSet) Len() int {\n\tts.mu.RLock()\n\tdefer ts.mu.RUnlock()\n\treturn len(ts.m)\n}\n\nfunc (ts *traceSet) Add(tr *trace) {\n\tts.mu.Lock()\n\tif ts.m == nil {\n\t\tts.m = make(map[*trace]bool)\n\t}\n\tts.m[tr] = true\n\tts.mu.Unlock()\n}\n\nfunc (ts *traceSet) Remove(tr *trace) {\n\tts.mu.Lock()\n\tdelete(ts.m, tr)\n\tts.mu.Unlock()\n}\n\n// FirstN returns the first n traces ordered by time.\nfunc (ts *traceSet) FirstN(n int) traceList {\n\tts.mu.RLock()\n\tdefer ts.mu.RUnlock()\n\n\tif n > len(ts.m) {\n\t\tn = len(ts.m)\n\t}\n\ttrl := make(traceList, 0, n)\n\n\t// Fast path for when no selectivity is needed.\n\tif n == len(ts.m) {\n\t\tfor tr := range ts.m {\n\t\t\ttr.ref()\n\t\t\ttrl = append(trl, tr)\n\t\t}\n\t\tsort.Sort(trl)\n\t\treturn trl\n\t}\n\n\t// Pick the oldest n traces.\n\t// This is inefficient. See the comment in the traceSet struct.\n\tfor tr := range ts.m {\n\t\t// Put the first n traces into trl in the order they occur.\n\t\t// When we have n, sort trl, and thereafter maintain its order.\n\t\tif len(trl) < n {\n\t\t\ttr.ref()\n\t\t\ttrl = append(trl, tr)\n\t\t\tif len(trl) == n {\n\t\t\t\t// This is guaranteed to happen exactly once during this loop.\n\t\t\t\tsort.Sort(trl)\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\tif tr.Start.After(trl[n-1].Start) {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Find where to insert this one.\n\t\ttr.ref()\n\t\ti := sort.Search(n, func(i int) bool { return trl[i].Start.After(tr.Start) })\n\t\ttrl[n-1].unref()\n\t\tcopy(trl[i+1:], trl[i:])\n\t\ttrl[i] = tr\n\t}\n\n\treturn trl\n}\n\nfunc getActiveTraces(fam string) traceList {\n\tactiveMu.RLock()\n\ts := activeTraces[fam]\n\tactiveMu.RUnlock()\n\tif s == nil {\n\t\treturn nil\n\t}\n\treturn s.FirstN(maxActiveTraces)\n}\n\nfunc getFamily(fam string, allocNew bool) *family {\n\tcompletedMu.RLock()\n\tf := completedTraces[fam]\n\tcompletedMu.RUnlock()\n\tif f == nil && allocNew {\n\t\tf = allocFamily(fam)\n\t}\n\treturn f\n}\n\nfunc allocFamily(fam string) *family {\n\tcompletedMu.Lock()\n\tdefer completedMu.Unlock()\n\tf := completedTraces[fam]\n\tif f == nil {\n\t\tf = newFamily()\n\t\tcompletedTraces[fam] = f\n\t}\n\treturn f\n}\n\n// family represents a set of trace buckets and associated latency information.\ntype family struct {\n\t// traces may occur in multiple buckets.\n\tBuckets [bucketsPerFamily]*traceBucket\n\n\t// latency time series\n\tLatencyMu sync.RWMutex\n\tLatency   *timeseries.MinuteHourSeries\n}\n\nfunc newFamily() *family {\n\treturn &family{\n\t\tBuckets: [bucketsPerFamily]*traceBucket{\n\t\t\t{Cond: minCond(0)},\n\t\t\t{Cond: minCond(50 * time.Millisecond)},\n\t\t\t{Cond: minCond(100 * time.Millisecond)},\n\t\t\t{Cond: minCond(200 * time.Millisecond)},\n\t\t\t{Cond: minCond(500 * time.Millisecond)},\n\t\t\t{Cond: minCond(1 * time.Second)},\n\t\t\t{Cond: minCond(10 * time.Second)},\n\t\t\t{Cond: minCond(100 * time.Second)},\n\t\t\t{Cond: errorCond{}},\n\t\t},\n\t\tLatency: timeseries.NewMinuteHourSeries(func() timeseries.Observable { return new(histogram) }),\n\t}\n}\n\n// traceBucket represents a size-capped bucket of historic traces,\n// along with a condition for a trace to belong to the bucket.\ntype traceBucket struct {\n\tCond cond\n\n\t// Ring buffer implementation of a fixed-size FIFO queue.\n\tmu     sync.RWMutex\n\tbuf    [tracesPerBucket]*trace\n\tstart  int // < tracesPerBucket\n\tlength int // <= tracesPerBucket\n}\n\nfunc (b *traceBucket) Add(tr *trace) {\n\tb.mu.Lock()\n\tdefer b.mu.Unlock()\n\n\ti := b.start + b.length\n\tif i >= tracesPerBucket {\n\t\ti -= tracesPerBucket\n\t}\n\tif b.length == tracesPerBucket {\n\t\t// \"Remove\" an element from the bucket.\n\t\tb.buf[i].unref()\n\t\tb.start++\n\t\tif b.start == tracesPerBucket {\n\t\t\tb.start = 0\n\t\t}\n\t}\n\tb.buf[i] = tr\n\tif b.length < tracesPerBucket {\n\t\tb.length++\n\t}\n\ttr.ref()\n}\n\n// Copy returns a copy of the traces in the bucket.\n// If tracedOnly is true, only the traces with trace information will be returned.\n// The logs will be ref'd before returning; the caller should call\n// the Free method when it is done with them.\n// TODO(dsymonds): keep track of traced requests in separate buckets.\nfunc (b *traceBucket) Copy(tracedOnly bool) traceList {\n\tb.mu.RLock()\n\tdefer b.mu.RUnlock()\n\n\ttrl := make(traceList, 0, b.length)\n\tfor i, x := 0, b.start; i < b.length; i++ {\n\t\ttr := b.buf[x]\n\t\tif !tracedOnly || tr.spanID != 0 {\n\t\t\ttr.ref()\n\t\t\ttrl = append(trl, tr)\n\t\t}\n\t\tx++\n\t\tif x == b.length {\n\t\t\tx = 0\n\t\t}\n\t}\n\treturn trl\n}\n\nfunc (b *traceBucket) Empty() bool {\n\tb.mu.RLock()\n\tdefer b.mu.RUnlock()\n\treturn b.length == 0\n}\n\n// cond represents a condition on a trace.\ntype cond interface {\n\tmatch(t *trace) bool\n\tString() string\n}\n\ntype minCond time.Duration\n\nfunc (m minCond) match(t *trace) bool { return t.Elapsed >= time.Duration(m) }\nfunc (m minCond) String() string      { return fmt.Sprintf(\"≥%gs\", time.Duration(m).Seconds()) }\n\ntype errorCond struct{}\n\nfunc (e errorCond) match(t *trace) bool { return t.IsError }\nfunc (e errorCond) String() string      { return \"errors\" }\n\ntype traceList []*trace\n\n// Free calls unref on each element of the list.\nfunc (trl traceList) Free() {\n\tfor _, t := range trl {\n\t\tt.unref()\n\t}\n}\n\n// traceList may be sorted in reverse chronological order.\nfunc (trl traceList) Len() int           { return len(trl) }\nfunc (trl traceList) Less(i, j int) bool { return trl[i].Start.After(trl[j].Start) }\nfunc (trl traceList) Swap(i, j int)      { trl[i], trl[j] = trl[j], trl[i] }\n\n// An event is a timestamped log entry in a trace.\ntype event struct {\n\tWhen       time.Time\n\tElapsed    time.Duration // since previous event in trace\n\tNewDay     bool          // whether this event is on a different day to the previous event\n\tRecyclable bool          // whether this event was passed via LazyLog\n\tSensitive  bool          // whether this event contains sensitive information\n\tWhat       interface{}   // string or fmt.Stringer\n}\n\n// WhenString returns a string representation of the elapsed time of the event.\n// It will include the date if midnight was crossed.\nfunc (e event) WhenString() string {\n\tif e.NewDay {\n\t\treturn e.When.Format(\"2006/01/02 15:04:05.000000\")\n\t}\n\treturn e.When.Format(\"15:04:05.000000\")\n}\n\n// discarded represents a number of discarded events.\n// It is stored as *discarded to make it easier to update in-place.\ntype discarded int\n\nfunc (d *discarded) String() string {\n\treturn fmt.Sprintf(\"(%d events discarded)\", int(*d))\n}\n\n// trace represents an active or complete request,\n// either sent or received by this program.\ntype trace struct {\n\t// Family is the top-level grouping of traces to which this belongs.\n\tFamily string\n\n\t// Title is the title of this trace.\n\tTitle string\n\n\t// Start time of the this trace.\n\tStart time.Time\n\n\tmu        sync.RWMutex\n\tevents    []event // Append-only sequence of events (modulo discards).\n\tmaxEvents int\n\trecycler  func(interface{})\n\tIsError   bool          // Whether this trace resulted in an error.\n\tElapsed   time.Duration // Elapsed time for this trace, zero while active.\n\ttraceID   uint64        // Trace information if non-zero.\n\tspanID    uint64\n\n\trefs int32     // how many buckets this is in\n\tdisc discarded // scratch space to avoid allocation\n\n\tfinishStack []byte // where finish was called, if DebugUseAfterFinish is set\n\n\teventsBuf [4]event // preallocated buffer in case we only log a few events\n}\n\nfunc (tr *trace) reset() {\n\t// Clear all but the mutex. Mutexes may not be copied, even when unlocked.\n\ttr.Family = \"\"\n\ttr.Title = \"\"\n\ttr.Start = time.Time{}\n\n\ttr.mu.Lock()\n\ttr.Elapsed = 0\n\ttr.traceID = 0\n\ttr.spanID = 0\n\ttr.IsError = false\n\ttr.maxEvents = 0\n\ttr.events = nil\n\ttr.recycler = nil\n\ttr.mu.Unlock()\n\n\ttr.refs = 0\n\ttr.disc = 0\n\ttr.finishStack = nil\n\tfor i := range tr.eventsBuf {\n\t\ttr.eventsBuf[i] = event{}\n\t}\n}\n\n// delta returns the elapsed time since the last event or the trace start,\n// and whether it spans midnight.\n// L >= tr.mu\nfunc (tr *trace) delta(t time.Time) (time.Duration, bool) {\n\tif len(tr.events) == 0 {\n\t\treturn t.Sub(tr.Start), false\n\t}\n\tprev := tr.events[len(tr.events)-1].When\n\treturn t.Sub(prev), prev.Day() != t.Day()\n}\n\nfunc (tr *trace) addEvent(x interface{}, recyclable, sensitive bool) {\n\tif DebugUseAfterFinish && tr.finishStack != nil {\n\t\tbuf := make([]byte, 4<<10) // 4 KB should be enough\n\t\tn := runtime.Stack(buf, false)\n\t\tlog.Printf(\"net/trace: trace used after finish:\\nFinished at:\\n%s\\nUsed at:\\n%s\", tr.finishStack, buf[:n])\n\t}\n\n\t/*\n\t\tNOTE TO DEBUGGERS\n\n\t\tIf you are here because your program panicked in this code,\n\t\tit is almost definitely the fault of code using this package,\n\t\tand very unlikely to be the fault of this code.\n\n\t\tThe most likely scenario is that some code elsewhere is using\n\t\ta trace.Trace after its Finish method is called.\n\t\tYou can temporarily set the DebugUseAfterFinish var\n\t\tto help discover where that is; do not leave that var set,\n\t\tsince it makes this package much less efficient.\n\t*/\n\n\te := event{When: time.Now(), What: x, Recyclable: recyclable, Sensitive: sensitive}\n\ttr.mu.Lock()\n\te.Elapsed, e.NewDay = tr.delta(e.When)\n\tif len(tr.events) < tr.maxEvents {\n\t\ttr.events = append(tr.events, e)\n\t} else {\n\t\t// Discard the middle events.\n\t\tdi := int((tr.maxEvents - 1) / 2)\n\t\tif d, ok := tr.events[di].What.(*discarded); ok {\n\t\t\t(*d)++\n\t\t} else {\n\t\t\t// disc starts at two to count for the event it is replacing,\n\t\t\t// plus the next one that we are about to drop.\n\t\t\ttr.disc = 2\n\t\t\tif tr.recycler != nil && tr.events[di].Recyclable {\n\t\t\t\tgo tr.recycler(tr.events[di].What)\n\t\t\t}\n\t\t\ttr.events[di].What = &tr.disc\n\t\t}\n\t\t// The timestamp of the discarded meta-event should be\n\t\t// the time of the last event it is representing.\n\t\ttr.events[di].When = tr.events[di+1].When\n\n\t\tif tr.recycler != nil && tr.events[di+1].Recyclable {\n\t\t\tgo tr.recycler(tr.events[di+1].What)\n\t\t}\n\t\tcopy(tr.events[di+1:], tr.events[di+2:])\n\t\ttr.events[tr.maxEvents-1] = e\n\t}\n\ttr.mu.Unlock()\n}\n\nfunc (tr *trace) LazyLog(x fmt.Stringer, sensitive bool) {\n\ttr.addEvent(x, true, sensitive)\n}\n\nfunc (tr *trace) LazyPrintf(format string, a ...interface{}) {\n\ttr.addEvent(&lazySprintf{format, a}, false, false)\n}\n\nfunc (tr *trace) SetError() {\n\ttr.mu.Lock()\n\ttr.IsError = true\n\ttr.mu.Unlock()\n}\n\nfunc (tr *trace) SetRecycler(f func(interface{})) {\n\ttr.mu.Lock()\n\ttr.recycler = f\n\ttr.mu.Unlock()\n}\n\nfunc (tr *trace) SetTraceInfo(traceID, spanID uint64) {\n\ttr.mu.Lock()\n\ttr.traceID, tr.spanID = traceID, spanID\n\ttr.mu.Unlock()\n}\n\nfunc (tr *trace) SetMaxEvents(m int) {\n\ttr.mu.Lock()\n\t// Always keep at least three events: first, discarded count, last.\n\tif len(tr.events) == 0 && m > 3 {\n\t\ttr.maxEvents = m\n\t}\n\ttr.mu.Unlock()\n}\n\nfunc (tr *trace) ref() {\n\tatomic.AddInt32(&tr.refs, 1)\n}\n\nfunc (tr *trace) unref() {\n\tif atomic.AddInt32(&tr.refs, -1) == 0 {\n\t\ttr.mu.RLock()\n\t\tif tr.recycler != nil {\n\t\t\t// freeTrace clears tr, so we hold tr.recycler and tr.events here.\n\t\t\tgo func(f func(interface{}), es []event) {\n\t\t\t\tfor _, e := range es {\n\t\t\t\t\tif e.Recyclable {\n\t\t\t\t\t\tf(e.What)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}(tr.recycler, tr.events)\n\t\t}\n\t\ttr.mu.RUnlock()\n\n\t\tfreeTrace(tr)\n\t}\n}\n\nfunc (tr *trace) When() string {\n\treturn tr.Start.Format(\"2006/01/02 15:04:05.000000\")\n}\n\nfunc (tr *trace) ElapsedTime() string {\n\ttr.mu.RLock()\n\tt := tr.Elapsed\n\ttr.mu.RUnlock()\n\n\tif t == 0 {\n\t\t// Active trace.\n\t\tt = time.Since(tr.Start)\n\t}\n\treturn fmt.Sprintf(\"%.6f\", t.Seconds())\n}\n\nfunc (tr *trace) Events() []event {\n\ttr.mu.RLock()\n\tdefer tr.mu.RUnlock()\n\treturn tr.events\n}\n\nvar traceFreeList = make(chan *trace, 1000) // TODO(dsymonds): Use sync.Pool?\n\n// newTrace returns a trace ready to use.\nfunc newTrace() *trace {\n\tselect {\n\tcase tr := <-traceFreeList:\n\t\treturn tr\n\tdefault:\n\t\treturn new(trace)\n\t}\n}\n\n// freeTrace adds tr to traceFreeList if there's room.\n// This is non-blocking.\nfunc freeTrace(tr *trace) {\n\tif DebugUseAfterFinish {\n\t\treturn // never reuse\n\t}\n\ttr.reset()\n\tselect {\n\tcase traceFreeList <- tr:\n\tdefault:\n\t}\n}\n\nfunc elapsed(d time.Duration) string {\n\tb := []byte(fmt.Sprintf(\"%.6f\", d.Seconds()))\n\n\t// For subsecond durations, blank all zeros before decimal point,\n\t// and all zeros between the decimal point and the first non-zero digit.\n\tif d < time.Second {\n\t\tdot := bytes.IndexByte(b, '.')\n\t\tfor i := 0; i < dot; i++ {\n\t\t\tb[i] = ' '\n\t\t}\n\t\tfor i := dot + 1; i < len(b); i++ {\n\t\t\tif b[i] == '0' {\n\t\t\t\tb[i] = ' '\n\t\t\t} else {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\n\treturn string(b)\n}\n\nvar pageTmplCache *template.Template\nvar pageTmplOnce sync.Once\n\nfunc pageTmpl() *template.Template {\n\tpageTmplOnce.Do(func() {\n\t\tpageTmplCache = template.Must(template.New(\"Page\").Funcs(template.FuncMap{\n\t\t\t\"elapsed\": elapsed,\n\t\t\t\"add\":     func(a, b int) int { return a + b },\n\t\t}).Parse(pageHTML))\n\t})\n\treturn pageTmplCache\n}\n\nconst pageHTML = `\n{{template \"Prolog\" .}}\n{{template \"StatusTable\" .}}\n{{template \"Epilog\" .}}\n\n{{define \"Prolog\"}}\n<html>\n\t<head>\n\t<title>/debug/requests</title>\n\t<style type=\"text/css\">\n\t\tbody {\n\t\t\tfont-family: sans-serif;\n\t\t}\n\t\ttable#tr-status td.family {\n\t\t\tpadding-right: 2em;\n\t\t}\n\t\ttable#tr-status td.active {\n\t\t\tpadding-right: 1em;\n\t\t}\n\t\ttable#tr-status td.latency-first {\n\t\t\tpadding-left: 1em;\n\t\t}\n\t\ttable#tr-status td.empty {\n\t\t\tcolor: #aaa;\n\t\t}\n\t\ttable#reqs {\n\t\t\tmargin-top: 1em;\n\t\t}\n\t\ttable#reqs tr.first {\n\t\t\t{{if $.Expanded}}font-weight: bold;{{end}}\n\t\t}\n\t\ttable#reqs td {\n\t\t\tfont-family: monospace;\n\t\t}\n\t\ttable#reqs td.when {\n\t\t\ttext-align: right;\n\t\t\twhite-space: nowrap;\n\t\t}\n\t\ttable#reqs td.elapsed {\n\t\t\tpadding: 0 0.5em;\n\t\t\ttext-align: right;\n\t\t\twhite-space: pre;\n\t\t\twidth: 10em;\n\t\t}\n\t\taddress {\n\t\t\tfont-size: smaller;\n\t\t\tmargin-top: 5em;\n\t\t}\n\t</style>\n\t</head>\n\t<body>\n\n<h1>/debug/requests</h1>\n{{end}} {{/* end of Prolog */}}\n\n{{define \"StatusTable\"}}\n<table id=\"tr-status\">\n\t{{range $fam := .Families}}\n\t<tr>\n\t\t<td class=\"family\">{{$fam}}</td>\n\n\t\t{{$n := index $.ActiveTraceCount $fam}}\n\t\t<td class=\"active {{if not $n}}empty{{end}}\">\n\t\t\t{{if $n}}<a href=\"?fam={{$fam}}&b=-1{{if $.Expanded}}&exp=1{{end}}\">{{end}}\n\t\t\t[{{$n}} active]\n\t\t\t{{if $n}}</a>{{end}}\n\t\t</td>\n\n\t\t{{$f := index $.CompletedTraces $fam}}\n\t\t{{range $i, $b := $f.Buckets}}\n\t\t{{$empty := $b.Empty}}\n\t\t<td {{if $empty}}class=\"empty\"{{end}}>\n\t\t{{if not $empty}}<a href=\"?fam={{$fam}}&b={{$i}}{{if $.Expanded}}&exp=1{{end}}\">{{end}}\n\t\t[{{.Cond}}]\n\t\t{{if not $empty}}</a>{{end}}\n\t\t</td>\n\t\t{{end}}\n\n\t\t{{$nb := len $f.Buckets}}\n\t\t<td class=\"latency-first\">\n\t\t<a href=\"?fam={{$fam}}&b={{$nb}}\">[minute]</a>\n\t\t</td>\n\t\t<td>\n\t\t<a href=\"?fam={{$fam}}&b={{add $nb 1}}\">[hour]</a>\n\t\t</td>\n\t\t<td>\n\t\t<a href=\"?fam={{$fam}}&b={{add $nb 2}}\">[total]</a>\n\t\t</td>\n\n\t</tr>\n\t{{end}}\n</table>\n{{end}} {{/* end of StatusTable */}}\n\n{{define \"Epilog\"}}\n{{if $.Traces}}\n<hr />\n<h3>Family: {{$.Family}}</h3>\n\n{{if or $.Expanded $.Traced}}\n  <a href=\"?fam={{$.Family}}&b={{$.Bucket}}\">[Normal/Summary]</a>\n{{else}}\n  [Normal/Summary]\n{{end}}\n\n{{if or (not $.Expanded) $.Traced}}\n  <a href=\"?fam={{$.Family}}&b={{$.Bucket}}&exp=1\">[Normal/Expanded]</a>\n{{else}}\n  [Normal/Expanded]\n{{end}}\n\n{{if not $.Active}}\n\t{{if or $.Expanded (not $.Traced)}}\n\t<a href=\"?fam={{$.Family}}&b={{$.Bucket}}&rtraced=1\">[Traced/Summary]</a>\n\t{{else}}\n\t[Traced/Summary]\n\t{{end}}\n\t{{if or (not $.Expanded) (not $.Traced)}}\n\t<a href=\"?fam={{$.Family}}&b={{$.Bucket}}&exp=1&rtraced=1\">[Traced/Expanded]</a>\n        {{else}}\n\t[Traced/Expanded]\n\t{{end}}\n{{end}}\n\n{{if $.Total}}\n<p><em>Showing <b>{{len $.Traces}}</b> of <b>{{$.Total}}</b> traces.</em></p>\n{{end}}\n\n<table id=\"reqs\">\n\t<caption>\n\t\t{{if $.Active}}Active{{else}}Completed{{end}} Requests\n\t</caption>\n\t<tr><th>When</th><th>Elapsed&nbsp;(s)</th></tr>\n\t{{range $tr := $.Traces}}\n\t<tr class=\"first\">\n\t\t<td class=\"when\">{{$tr.When}}</td>\n\t\t<td class=\"elapsed\">{{$tr.ElapsedTime}}</td>\n\t\t<td>{{$tr.Title}}</td>\n\t\t{{/* TODO: include traceID/spanID */}}\n\t</tr>\n\t{{if $.Expanded}}\n\t{{range $tr.Events}}\n\t<tr>\n\t\t<td class=\"when\">{{.WhenString}}</td>\n\t\t<td class=\"elapsed\">{{elapsed .Elapsed}}</td>\n\t\t<td>{{if or $.ShowSensitive (not .Sensitive)}}... {{.What}}{{else}}<em>[redacted]</em>{{end}}</td>\n\t</tr>\n\t{{end}}\n\t{{end}}\n\t{{end}}\n</table>\n{{end}} {{/* if $.Traces */}}\n\n{{if $.Histogram}}\n<h4>Latency (&micro;s) of {{$.Family}} over {{$.HistogramWindow}}</h4>\n{{$.Histogram}}\n{{end}} {{/* if $.Histogram */}}\n\n\t</body>\n</html>\n{{end}} {{/* end of Epilog */}}\n`\n"
  },
  {
    "path": "vendor/golang.org/x/oauth2/LICENSE",
    "content": "Copyright (c) 2009 The Go Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "vendor/golang.org/x/oauth2/google/appengine.go",
    "content": "// Copyright 2014 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage google\n\nimport (\n\t\"context\"\n\t\"time\"\n\n\t\"golang.org/x/oauth2\"\n)\n\n// Set at init time by appengine_gen1.go. If nil, we're not on App Engine standard first generation (<= Go 1.9) or App Engine flexible.\nvar appengineTokenFunc func(c context.Context, scopes ...string) (token string, expiry time.Time, err error)\n\n// Set at init time by appengine_gen1.go. If nil, we're not on App Engine standard first generation (<= Go 1.9) or App Engine flexible.\nvar appengineAppIDFunc func(c context.Context) string\n\n// AppEngineTokenSource returns a token source that fetches tokens from either\n// the current application's service account or from the metadata server,\n// depending on the App Engine environment. See below for environment-specific\n// details. If you are implementing a 3-legged OAuth 2.0 flow on App Engine that\n// involves user accounts, see oauth2.Config instead.\n//\n// First generation App Engine runtimes (<= Go 1.9):\n// AppEngineTokenSource returns a token source that fetches tokens issued to the\n// current App Engine application's service account. The provided context must have\n// come from appengine.NewContext.\n//\n// Second generation App Engine runtimes (>= Go 1.11) and App Engine flexible:\n// AppEngineTokenSource is DEPRECATED on second generation runtimes and on the\n// flexible environment. It delegates to ComputeTokenSource, and the provided\n// context and scopes are not used. Please use DefaultTokenSource (or ComputeTokenSource,\n// which DefaultTokenSource will use in this case) instead.\nfunc AppEngineTokenSource(ctx context.Context, scope ...string) oauth2.TokenSource {\n\treturn appEngineTokenSource(ctx, scope...)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/oauth2/google/appengine_gen1.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build appengine\n\n// This file applies to App Engine first generation runtimes (<= Go 1.9).\n\npackage google\n\nimport (\n\t\"context\"\n\t\"sort\"\n\t\"strings\"\n\t\"sync\"\n\n\t\"golang.org/x/oauth2\"\n\t\"google.golang.org/appengine\"\n)\n\nfunc init() {\n\tappengineTokenFunc = appengine.AccessToken\n\tappengineAppIDFunc = appengine.AppID\n}\n\n// See comment on AppEngineTokenSource in appengine.go.\nfunc appEngineTokenSource(ctx context.Context, scope ...string) oauth2.TokenSource {\n\tscopes := append([]string{}, scope...)\n\tsort.Strings(scopes)\n\treturn &gaeTokenSource{\n\t\tctx:    ctx,\n\t\tscopes: scopes,\n\t\tkey:    strings.Join(scopes, \" \"),\n\t}\n}\n\n// aeTokens helps the fetched tokens to be reused until their expiration.\nvar (\n\taeTokensMu sync.Mutex\n\taeTokens   = make(map[string]*tokenLock) // key is space-separated scopes\n)\n\ntype tokenLock struct {\n\tmu sync.Mutex // guards t; held while fetching or updating t\n\tt  *oauth2.Token\n}\n\ntype gaeTokenSource struct {\n\tctx    context.Context\n\tscopes []string\n\tkey    string // to aeTokens map; space-separated scopes\n}\n\nfunc (ts *gaeTokenSource) Token() (*oauth2.Token, error) {\n\taeTokensMu.Lock()\n\ttok, ok := aeTokens[ts.key]\n\tif !ok {\n\t\ttok = &tokenLock{}\n\t\taeTokens[ts.key] = tok\n\t}\n\taeTokensMu.Unlock()\n\n\ttok.mu.Lock()\n\tdefer tok.mu.Unlock()\n\tif tok.t.Valid() {\n\t\treturn tok.t, nil\n\t}\n\taccess, exp, err := appengineTokenFunc(ts.ctx, ts.scopes...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\ttok.t = &oauth2.Token{\n\t\tAccessToken: access,\n\t\tExpiry:      exp,\n\t}\n\treturn tok.t, nil\n}\n"
  },
  {
    "path": "vendor/golang.org/x/oauth2/google/appengine_gen2_flex.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build !appengine\n\n// This file applies to App Engine second generation runtimes (>= Go 1.11) and App Engine flexible.\n\npackage google\n\nimport (\n\t\"context\"\n\t\"log\"\n\t\"sync\"\n\n\t\"golang.org/x/oauth2\"\n)\n\nvar logOnce sync.Once // only spam about deprecation once\n\n// See comment on AppEngineTokenSource in appengine.go.\nfunc appEngineTokenSource(ctx context.Context, scope ...string) oauth2.TokenSource {\n\tlogOnce.Do(func() {\n\t\tlog.Print(\"google: AppEngineTokenSource is deprecated on App Engine standard second generation runtimes (>= Go 1.11) and App Engine flexible. Please use DefaultTokenSource or ComputeTokenSource.\")\n\t})\n\treturn ComputeTokenSource(\"\")\n}\n"
  },
  {
    "path": "vendor/golang.org/x/oauth2/google/default.go",
    "content": "// Copyright 2015 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage google\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"net/http\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"runtime\"\n\n\t\"cloud.google.com/go/compute/metadata\"\n\t\"golang.org/x/oauth2\"\n)\n\n// Credentials holds Google credentials, including \"Application Default Credentials\".\n// For more details, see:\n// https://developers.google.com/accounts/docs/application-default-credentials\ntype Credentials struct {\n\tProjectID   string // may be empty\n\tTokenSource oauth2.TokenSource\n\n\t// JSON contains the raw bytes from a JSON credentials file.\n\t// This field may be nil if authentication is provided by the\n\t// environment and not with a credentials file, e.g. when code is\n\t// running on Google Cloud Platform.\n\tJSON []byte\n}\n\n// DefaultCredentials is the old name of Credentials.\n//\n// Deprecated: use Credentials instead.\ntype DefaultCredentials = Credentials\n\n// DefaultClient returns an HTTP Client that uses the\n// DefaultTokenSource to obtain authentication credentials.\nfunc DefaultClient(ctx context.Context, scope ...string) (*http.Client, error) {\n\tts, err := DefaultTokenSource(ctx, scope...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn oauth2.NewClient(ctx, ts), nil\n}\n\n// DefaultTokenSource returns the token source for\n// \"Application Default Credentials\".\n// It is a shortcut for FindDefaultCredentials(ctx, scope).TokenSource.\nfunc DefaultTokenSource(ctx context.Context, scope ...string) (oauth2.TokenSource, error) {\n\tcreds, err := FindDefaultCredentials(ctx, scope...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn creds.TokenSource, nil\n}\n\n// FindDefaultCredentials searches for \"Application Default Credentials\".\n//\n// It looks for credentials in the following places,\n// preferring the first location found:\n//\n//   1. A JSON file whose path is specified by the\n//      GOOGLE_APPLICATION_CREDENTIALS environment variable.\n//   2. A JSON file in a location known to the gcloud command-line tool.\n//      On Windows, this is %APPDATA%/gcloud/application_default_credentials.json.\n//      On other systems, $HOME/.config/gcloud/application_default_credentials.json.\n//   3. On Google App Engine standard first generation runtimes (<= Go 1.9) it uses\n//      the appengine.AccessToken function.\n//   4. On Google Compute Engine, Google App Engine standard second generation runtimes\n//      (>= Go 1.11), and Google App Engine flexible environment, it fetches\n//      credentials from the metadata server.\nfunc FindDefaultCredentials(ctx context.Context, scopes ...string) (*Credentials, error) {\n\t// First, try the environment variable.\n\tconst envVar = \"GOOGLE_APPLICATION_CREDENTIALS\"\n\tif filename := os.Getenv(envVar); filename != \"\" {\n\t\tcreds, err := readCredentialsFile(ctx, filename, scopes)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"google: error getting credentials using %v environment variable: %v\", envVar, err)\n\t\t}\n\t\treturn creds, nil\n\t}\n\n\t// Second, try a well-known file.\n\tfilename := wellKnownFile()\n\tif creds, err := readCredentialsFile(ctx, filename, scopes); err == nil {\n\t\treturn creds, nil\n\t} else if !os.IsNotExist(err) {\n\t\treturn nil, fmt.Errorf(\"google: error getting credentials using well-known file (%v): %v\", filename, err)\n\t}\n\n\t// Third, if we're on a Google App Engine standard first generation runtime (<= Go 1.9)\n\t// use those credentials. App Engine standard second generation runtimes (>= Go 1.11)\n\t// and App Engine flexible use ComputeTokenSource and the metadata server.\n\tif appengineTokenFunc != nil {\n\t\treturn &DefaultCredentials{\n\t\t\tProjectID:   appengineAppIDFunc(ctx),\n\t\t\tTokenSource: AppEngineTokenSource(ctx, scopes...),\n\t\t}, nil\n\t}\n\n\t// Fourth, if we're on Google Compute Engine, an App Engine standard second generation runtime,\n\t// or App Engine flexible, use the metadata server.\n\tif metadata.OnGCE() {\n\t\tid, _ := metadata.ProjectID()\n\t\treturn &DefaultCredentials{\n\t\t\tProjectID:   id,\n\t\t\tTokenSource: ComputeTokenSource(\"\", scopes...),\n\t\t}, nil\n\t}\n\n\t// None are found; return helpful error.\n\tconst url = \"https://developers.google.com/accounts/docs/application-default-credentials\"\n\treturn nil, fmt.Errorf(\"google: could not find default credentials. See %v for more information.\", url)\n}\n\n// CredentialsFromJSON obtains Google credentials from a JSON value. The JSON can\n// represent either a Google Developers Console client_credentials.json file (as in\n// ConfigFromJSON) or a Google Developers service account key file (as in\n// JWTConfigFromJSON).\nfunc CredentialsFromJSON(ctx context.Context, jsonData []byte, scopes ...string) (*Credentials, error) {\n\tvar f credentialsFile\n\tif err := json.Unmarshal(jsonData, &f); err != nil {\n\t\treturn nil, err\n\t}\n\tts, err := f.tokenSource(ctx, append([]string(nil), scopes...))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &DefaultCredentials{\n\t\tProjectID:   f.ProjectID,\n\t\tTokenSource: ts,\n\t\tJSON:        jsonData,\n\t}, nil\n}\n\nfunc wellKnownFile() string {\n\tconst f = \"application_default_credentials.json\"\n\tif runtime.GOOS == \"windows\" {\n\t\treturn filepath.Join(os.Getenv(\"APPDATA\"), \"gcloud\", f)\n\t}\n\treturn filepath.Join(guessUnixHomeDir(), \".config\", \"gcloud\", f)\n}\n\nfunc readCredentialsFile(ctx context.Context, filename string, scopes []string) (*DefaultCredentials, error) {\n\tb, err := ioutil.ReadFile(filename)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn CredentialsFromJSON(ctx, b, scopes...)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/oauth2/google/doc.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package google provides support for making OAuth2 authorized and authenticated\n// HTTP requests to Google APIs. It supports the Web server flow, client-side\n// credentials, service accounts, Google Compute Engine service accounts, and Google\n// App Engine service accounts.\n//\n// A brief overview of the package follows. For more information, please read\n// https://developers.google.com/accounts/docs/OAuth2\n// and\n// https://developers.google.com/accounts/docs/application-default-credentials.\n//\n// OAuth2 Configs\n//\n// Two functions in this package return golang.org/x/oauth2.Config values from Google credential\n// data. Google supports two JSON formats for OAuth2 credentials: one is handled by ConfigFromJSON,\n// the other by JWTConfigFromJSON. The returned Config can be used to obtain a TokenSource or\n// create an http.Client.\n//\n//\n// Credentials\n//\n// The Credentials type represents Google credentials, including Application Default\n// Credentials.\n//\n// Use FindDefaultCredentials to obtain Application Default Credentials.\n// FindDefaultCredentials looks in some well-known places for a credentials file, and\n// will call AppEngineTokenSource or ComputeTokenSource as needed.\n//\n// DefaultClient and DefaultTokenSource are convenience methods. They first call FindDefaultCredentials,\n// then use the credentials to construct an http.Client or an oauth2.TokenSource.\n//\n// Use CredentialsFromJSON to obtain credentials from either of the two JSON formats\n// described in OAuth2 Configs, above. The TokenSource in the returned value is the\n// same as the one obtained from the oauth2.Config returned from ConfigFromJSON or\n// JWTConfigFromJSON, but the Credentials may contain additional information\n// that is useful is some circumstances.\npackage google // import \"golang.org/x/oauth2/google\"\n"
  },
  {
    "path": "vendor/golang.org/x/oauth2/google/google.go",
    "content": "// Copyright 2014 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage google\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"net/url\"\n\t\"strings\"\n\t\"time\"\n\n\t\"cloud.google.com/go/compute/metadata\"\n\t\"golang.org/x/oauth2\"\n\t\"golang.org/x/oauth2/jwt\"\n)\n\n// Endpoint is Google's OAuth 2.0 endpoint.\nvar Endpoint = oauth2.Endpoint{\n\tAuthURL:   \"https://accounts.google.com/o/oauth2/auth\",\n\tTokenURL:  \"https://oauth2.googleapis.com/token\",\n\tAuthStyle: oauth2.AuthStyleInParams,\n}\n\n// JWTTokenURL is Google's OAuth 2.0 token URL to use with the JWT flow.\nconst JWTTokenURL = \"https://oauth2.googleapis.com/token\"\n\n// ConfigFromJSON uses a Google Developers Console client_credentials.json\n// file to construct a config.\n// client_credentials.json can be downloaded from\n// https://console.developers.google.com, under \"Credentials\". Download the Web\n// application credentials in the JSON format and provide the contents of the\n// file as jsonKey.\nfunc ConfigFromJSON(jsonKey []byte, scope ...string) (*oauth2.Config, error) {\n\ttype cred struct {\n\t\tClientID     string   `json:\"client_id\"`\n\t\tClientSecret string   `json:\"client_secret\"`\n\t\tRedirectURIs []string `json:\"redirect_uris\"`\n\t\tAuthURI      string   `json:\"auth_uri\"`\n\t\tTokenURI     string   `json:\"token_uri\"`\n\t}\n\tvar j struct {\n\t\tWeb       *cred `json:\"web\"`\n\t\tInstalled *cred `json:\"installed\"`\n\t}\n\tif err := json.Unmarshal(jsonKey, &j); err != nil {\n\t\treturn nil, err\n\t}\n\tvar c *cred\n\tswitch {\n\tcase j.Web != nil:\n\t\tc = j.Web\n\tcase j.Installed != nil:\n\t\tc = j.Installed\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"oauth2/google: no credentials found\")\n\t}\n\tif len(c.RedirectURIs) < 1 {\n\t\treturn nil, errors.New(\"oauth2/google: missing redirect URL in the client_credentials.json\")\n\t}\n\treturn &oauth2.Config{\n\t\tClientID:     c.ClientID,\n\t\tClientSecret: c.ClientSecret,\n\t\tRedirectURL:  c.RedirectURIs[0],\n\t\tScopes:       scope,\n\t\tEndpoint: oauth2.Endpoint{\n\t\t\tAuthURL:  c.AuthURI,\n\t\t\tTokenURL: c.TokenURI,\n\t\t},\n\t}, nil\n}\n\n// JWTConfigFromJSON uses a Google Developers service account JSON key file to read\n// the credentials that authorize and authenticate the requests.\n// Create a service account on \"Credentials\" for your project at\n// https://console.developers.google.com to download a JSON key file.\nfunc JWTConfigFromJSON(jsonKey []byte, scope ...string) (*jwt.Config, error) {\n\tvar f credentialsFile\n\tif err := json.Unmarshal(jsonKey, &f); err != nil {\n\t\treturn nil, err\n\t}\n\tif f.Type != serviceAccountKey {\n\t\treturn nil, fmt.Errorf(\"google: read JWT from JSON credentials: 'type' field is %q (expected %q)\", f.Type, serviceAccountKey)\n\t}\n\tscope = append([]string(nil), scope...) // copy\n\treturn f.jwtConfig(scope), nil\n}\n\n// JSON key file types.\nconst (\n\tserviceAccountKey  = \"service_account\"\n\tuserCredentialsKey = \"authorized_user\"\n)\n\n// credentialsFile is the unmarshalled representation of a credentials file.\ntype credentialsFile struct {\n\tType string `json:\"type\"` // serviceAccountKey or userCredentialsKey\n\n\t// Service Account fields\n\tClientEmail  string `json:\"client_email\"`\n\tPrivateKeyID string `json:\"private_key_id\"`\n\tPrivateKey   string `json:\"private_key\"`\n\tTokenURL     string `json:\"token_uri\"`\n\tProjectID    string `json:\"project_id\"`\n\n\t// User Credential fields\n\t// (These typically come from gcloud auth.)\n\tClientSecret string `json:\"client_secret\"`\n\tClientID     string `json:\"client_id\"`\n\tRefreshToken string `json:\"refresh_token\"`\n}\n\nfunc (f *credentialsFile) jwtConfig(scopes []string) *jwt.Config {\n\tcfg := &jwt.Config{\n\t\tEmail:        f.ClientEmail,\n\t\tPrivateKey:   []byte(f.PrivateKey),\n\t\tPrivateKeyID: f.PrivateKeyID,\n\t\tScopes:       scopes,\n\t\tTokenURL:     f.TokenURL,\n\t}\n\tif cfg.TokenURL == \"\" {\n\t\tcfg.TokenURL = JWTTokenURL\n\t}\n\treturn cfg\n}\n\nfunc (f *credentialsFile) tokenSource(ctx context.Context, scopes []string) (oauth2.TokenSource, error) {\n\tswitch f.Type {\n\tcase serviceAccountKey:\n\t\tcfg := f.jwtConfig(scopes)\n\t\treturn cfg.TokenSource(ctx), nil\n\tcase userCredentialsKey:\n\t\tcfg := &oauth2.Config{\n\t\t\tClientID:     f.ClientID,\n\t\t\tClientSecret: f.ClientSecret,\n\t\t\tScopes:       scopes,\n\t\t\tEndpoint:     Endpoint,\n\t\t}\n\t\ttok := &oauth2.Token{RefreshToken: f.RefreshToken}\n\t\treturn cfg.TokenSource(ctx, tok), nil\n\tcase \"\":\n\t\treturn nil, errors.New(\"missing 'type' field in credentials\")\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"unknown credential type: %q\", f.Type)\n\t}\n}\n\n// ComputeTokenSource returns a token source that fetches access tokens\n// from Google Compute Engine (GCE)'s metadata server. It's only valid to use\n// this token source if your program is running on a GCE instance.\n// If no account is specified, \"default\" is used.\n// If no scopes are specified, a set of default scopes are automatically granted.\n// Further information about retrieving access tokens from the GCE metadata\n// server can be found at https://cloud.google.com/compute/docs/authentication.\nfunc ComputeTokenSource(account string, scope ...string) oauth2.TokenSource {\n\treturn oauth2.ReuseTokenSource(nil, computeSource{account: account, scopes: scope})\n}\n\ntype computeSource struct {\n\taccount string\n\tscopes  []string\n}\n\nfunc (cs computeSource) Token() (*oauth2.Token, error) {\n\tif !metadata.OnGCE() {\n\t\treturn nil, errors.New(\"oauth2/google: can't get a token from the metadata service; not running on GCE\")\n\t}\n\tacct := cs.account\n\tif acct == \"\" {\n\t\tacct = \"default\"\n\t}\n\ttokenURI := \"instance/service-accounts/\" + acct + \"/token\"\n\tif len(cs.scopes) > 0 {\n\t\tv := url.Values{}\n\t\tv.Set(\"scopes\", strings.Join(cs.scopes, \",\"))\n\t\ttokenURI = tokenURI + \"?\" + v.Encode()\n\t}\n\ttokenJSON, err := metadata.Get(tokenURI)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tvar res struct {\n\t\tAccessToken  string `json:\"access_token\"`\n\t\tExpiresInSec int    `json:\"expires_in\"`\n\t\tTokenType    string `json:\"token_type\"`\n\t}\n\terr = json.NewDecoder(strings.NewReader(tokenJSON)).Decode(&res)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"oauth2/google: invalid token JSON from metadata: %v\", err)\n\t}\n\tif res.ExpiresInSec == 0 || res.AccessToken == \"\" {\n\t\treturn nil, fmt.Errorf(\"oauth2/google: incomplete token received from metadata\")\n\t}\n\ttok := &oauth2.Token{\n\t\tAccessToken: res.AccessToken,\n\t\tTokenType:   res.TokenType,\n\t\tExpiry:      time.Now().Add(time.Duration(res.ExpiresInSec) * time.Second),\n\t}\n\t// NOTE(cbro): add hidden metadata about where the token is from.\n\t// This is needed for detection by client libraries to know that credentials come from the metadata server.\n\t// This may be removed in a future version of this library.\n\treturn tok.WithExtra(map[string]interface{}{\n\t\t\"oauth2.google.tokenSource\":    \"compute-metadata\",\n\t\t\"oauth2.google.serviceAccount\": acct,\n\t}), nil\n}\n"
  },
  {
    "path": "vendor/golang.org/x/oauth2/google/jwt.go",
    "content": "// Copyright 2015 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage google\n\nimport (\n\t\"crypto/rsa\"\n\t\"fmt\"\n\t\"time\"\n\n\t\"golang.org/x/oauth2\"\n\t\"golang.org/x/oauth2/internal\"\n\t\"golang.org/x/oauth2/jws\"\n)\n\n// JWTAccessTokenSourceFromJSON uses a Google Developers service account JSON\n// key file to read the credentials that authorize and authenticate the\n// requests, and returns a TokenSource that does not use any OAuth2 flow but\n// instead creates a JWT and sends that as the access token.\n// The audience is typically a URL that specifies the scope of the credentials.\n//\n// Note that this is not a standard OAuth flow, but rather an\n// optimization supported by a few Google services.\n// Unless you know otherwise, you should use JWTConfigFromJSON instead.\nfunc JWTAccessTokenSourceFromJSON(jsonKey []byte, audience string) (oauth2.TokenSource, error) {\n\tcfg, err := JWTConfigFromJSON(jsonKey)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"google: could not parse JSON key: %v\", err)\n\t}\n\tpk, err := internal.ParseKey(cfg.PrivateKey)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"google: could not parse key: %v\", err)\n\t}\n\tts := &jwtAccessTokenSource{\n\t\temail:    cfg.Email,\n\t\taudience: audience,\n\t\tpk:       pk,\n\t\tpkID:     cfg.PrivateKeyID,\n\t}\n\ttok, err := ts.Token()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn oauth2.ReuseTokenSource(tok, ts), nil\n}\n\ntype jwtAccessTokenSource struct {\n\temail, audience string\n\tpk              *rsa.PrivateKey\n\tpkID            string\n}\n\nfunc (ts *jwtAccessTokenSource) Token() (*oauth2.Token, error) {\n\tiat := time.Now()\n\texp := iat.Add(time.Hour)\n\tcs := &jws.ClaimSet{\n\t\tIss: ts.email,\n\t\tSub: ts.email,\n\t\tAud: ts.audience,\n\t\tIat: iat.Unix(),\n\t\tExp: exp.Unix(),\n\t}\n\thdr := &jws.Header{\n\t\tAlgorithm: \"RS256\",\n\t\tTyp:       \"JWT\",\n\t\tKeyID:     string(ts.pkID),\n\t}\n\tmsg, err := jws.Encode(hdr, cs, ts.pk)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"google: could not encode JWT: %v\", err)\n\t}\n\treturn &oauth2.Token{AccessToken: msg, TokenType: \"Bearer\", Expiry: exp}, nil\n}\n"
  },
  {
    "path": "vendor/golang.org/x/oauth2/google/sdk.go",
    "content": "// Copyright 2015 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage google\n\nimport (\n\t\"bufio\"\n\t\"context\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"os\"\n\t\"os/user\"\n\t\"path/filepath\"\n\t\"runtime\"\n\t\"strings\"\n\t\"time\"\n\n\t\"golang.org/x/oauth2\"\n)\n\ntype sdkCredentials struct {\n\tData []struct {\n\t\tCredential struct {\n\t\t\tClientID     string     `json:\"client_id\"`\n\t\t\tClientSecret string     `json:\"client_secret\"`\n\t\t\tAccessToken  string     `json:\"access_token\"`\n\t\t\tRefreshToken string     `json:\"refresh_token\"`\n\t\t\tTokenExpiry  *time.Time `json:\"token_expiry\"`\n\t\t} `json:\"credential\"`\n\t\tKey struct {\n\t\t\tAccount string `json:\"account\"`\n\t\t\tScope   string `json:\"scope\"`\n\t\t} `json:\"key\"`\n\t}\n}\n\n// An SDKConfig provides access to tokens from an account already\n// authorized via the Google Cloud SDK.\ntype SDKConfig struct {\n\tconf         oauth2.Config\n\tinitialToken *oauth2.Token\n}\n\n// NewSDKConfig creates an SDKConfig for the given Google Cloud SDK\n// account. If account is empty, the account currently active in\n// Google Cloud SDK properties is used.\n// Google Cloud SDK credentials must be created by running `gcloud auth`\n// before using this function.\n// The Google Cloud SDK is available at https://cloud.google.com/sdk/.\nfunc NewSDKConfig(account string) (*SDKConfig, error) {\n\tconfigPath, err := sdkConfigPath()\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"oauth2/google: error getting SDK config path: %v\", err)\n\t}\n\tcredentialsPath := filepath.Join(configPath, \"credentials\")\n\tf, err := os.Open(credentialsPath)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"oauth2/google: failed to load SDK credentials: %v\", err)\n\t}\n\tdefer f.Close()\n\n\tvar c sdkCredentials\n\tif err := json.NewDecoder(f).Decode(&c); err != nil {\n\t\treturn nil, fmt.Errorf(\"oauth2/google: failed to decode SDK credentials from %q: %v\", credentialsPath, err)\n\t}\n\tif len(c.Data) == 0 {\n\t\treturn nil, fmt.Errorf(\"oauth2/google: no credentials found in %q, run `gcloud auth login` to create one\", credentialsPath)\n\t}\n\tif account == \"\" {\n\t\tpropertiesPath := filepath.Join(configPath, \"properties\")\n\t\tf, err := os.Open(propertiesPath)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"oauth2/google: failed to load SDK properties: %v\", err)\n\t\t}\n\t\tdefer f.Close()\n\t\tini, err := parseINI(f)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"oauth2/google: failed to parse SDK properties %q: %v\", propertiesPath, err)\n\t\t}\n\t\tcore, ok := ini[\"core\"]\n\t\tif !ok {\n\t\t\treturn nil, fmt.Errorf(\"oauth2/google: failed to find [core] section in %v\", ini)\n\t\t}\n\t\tactive, ok := core[\"account\"]\n\t\tif !ok {\n\t\t\treturn nil, fmt.Errorf(\"oauth2/google: failed to find %q attribute in %v\", \"account\", core)\n\t\t}\n\t\taccount = active\n\t}\n\n\tfor _, d := range c.Data {\n\t\tif account == \"\" || d.Key.Account == account {\n\t\t\tif d.Credential.AccessToken == \"\" && d.Credential.RefreshToken == \"\" {\n\t\t\t\treturn nil, fmt.Errorf(\"oauth2/google: no token available for account %q\", account)\n\t\t\t}\n\t\t\tvar expiry time.Time\n\t\t\tif d.Credential.TokenExpiry != nil {\n\t\t\t\texpiry = *d.Credential.TokenExpiry\n\t\t\t}\n\t\t\treturn &SDKConfig{\n\t\t\t\tconf: oauth2.Config{\n\t\t\t\t\tClientID:     d.Credential.ClientID,\n\t\t\t\t\tClientSecret: d.Credential.ClientSecret,\n\t\t\t\t\tScopes:       strings.Split(d.Key.Scope, \" \"),\n\t\t\t\t\tEndpoint:     Endpoint,\n\t\t\t\t\tRedirectURL:  \"oob\",\n\t\t\t\t},\n\t\t\t\tinitialToken: &oauth2.Token{\n\t\t\t\t\tAccessToken:  d.Credential.AccessToken,\n\t\t\t\t\tRefreshToken: d.Credential.RefreshToken,\n\t\t\t\t\tExpiry:       expiry,\n\t\t\t\t},\n\t\t\t}, nil\n\t\t}\n\t}\n\treturn nil, fmt.Errorf(\"oauth2/google: no such credentials for account %q\", account)\n}\n\n// Client returns an HTTP client using Google Cloud SDK credentials to\n// authorize requests. The token will auto-refresh as necessary. The\n// underlying http.RoundTripper will be obtained using the provided\n// context. The returned client and its Transport should not be\n// modified.\nfunc (c *SDKConfig) Client(ctx context.Context) *http.Client {\n\treturn &http.Client{\n\t\tTransport: &oauth2.Transport{\n\t\t\tSource: c.TokenSource(ctx),\n\t\t},\n\t}\n}\n\n// TokenSource returns an oauth2.TokenSource that retrieve tokens from\n// Google Cloud SDK credentials using the provided context.\n// It will returns the current access token stored in the credentials,\n// and refresh it when it expires, but it won't update the credentials\n// with the new access token.\nfunc (c *SDKConfig) TokenSource(ctx context.Context) oauth2.TokenSource {\n\treturn c.conf.TokenSource(ctx, c.initialToken)\n}\n\n// Scopes are the OAuth 2.0 scopes the current account is authorized for.\nfunc (c *SDKConfig) Scopes() []string {\n\treturn c.conf.Scopes\n}\n\nfunc parseINI(ini io.Reader) (map[string]map[string]string, error) {\n\tresult := map[string]map[string]string{\n\t\t\"\": {}, // root section\n\t}\n\tscanner := bufio.NewScanner(ini)\n\tcurrentSection := \"\"\n\tfor scanner.Scan() {\n\t\tline := strings.TrimSpace(scanner.Text())\n\t\tif strings.HasPrefix(line, \";\") {\n\t\t\t// comment.\n\t\t\tcontinue\n\t\t}\n\t\tif strings.HasPrefix(line, \"[\") && strings.HasSuffix(line, \"]\") {\n\t\t\tcurrentSection = strings.TrimSpace(line[1 : len(line)-1])\n\t\t\tresult[currentSection] = map[string]string{}\n\t\t\tcontinue\n\t\t}\n\t\tparts := strings.SplitN(line, \"=\", 2)\n\t\tif len(parts) == 2 && parts[0] != \"\" {\n\t\t\tresult[currentSection][strings.TrimSpace(parts[0])] = strings.TrimSpace(parts[1])\n\t\t}\n\t}\n\tif err := scanner.Err(); err != nil {\n\t\treturn nil, fmt.Errorf(\"error scanning ini: %v\", err)\n\t}\n\treturn result, nil\n}\n\n// sdkConfigPath tries to guess where the gcloud config is located.\n// It can be overridden during tests.\nvar sdkConfigPath = func() (string, error) {\n\tif runtime.GOOS == \"windows\" {\n\t\treturn filepath.Join(os.Getenv(\"APPDATA\"), \"gcloud\"), nil\n\t}\n\thomeDir := guessUnixHomeDir()\n\tif homeDir == \"\" {\n\t\treturn \"\", errors.New(\"unable to get current user home directory: os/user lookup failed; $HOME is empty\")\n\t}\n\treturn filepath.Join(homeDir, \".config\", \"gcloud\"), nil\n}\n\nfunc guessUnixHomeDir() string {\n\t// Prefer $HOME over user.Current due to glibc bug: golang.org/issue/13470\n\tif v := os.Getenv(\"HOME\"); v != \"\" {\n\t\treturn v\n\t}\n\t// Else, fall back to user.Current:\n\tif u, err := user.Current(); err == nil {\n\t\treturn u.HomeDir\n\t}\n\treturn \"\"\n}\n"
  },
  {
    "path": "vendor/golang.org/x/oauth2/internal/client_appengine.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build appengine\n\npackage internal\n\nimport \"google.golang.org/appengine/urlfetch\"\n\nfunc init() {\n\tappengineClientHook = urlfetch.Client\n}\n"
  },
  {
    "path": "vendor/golang.org/x/oauth2/internal/doc.go",
    "content": "// Copyright 2017 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package internal contains support packages for oauth2 package.\npackage internal\n"
  },
  {
    "path": "vendor/golang.org/x/oauth2/internal/oauth2.go",
    "content": "// Copyright 2014 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage internal\n\nimport (\n\t\"crypto/rsa\"\n\t\"crypto/x509\"\n\t\"encoding/pem\"\n\t\"errors\"\n\t\"fmt\"\n)\n\n// ParseKey converts the binary contents of a private key file\n// to an *rsa.PrivateKey. It detects whether the private key is in a\n// PEM container or not. If so, it extracts the the private key\n// from PEM container before conversion. It only supports PEM\n// containers with no passphrase.\nfunc ParseKey(key []byte) (*rsa.PrivateKey, error) {\n\tblock, _ := pem.Decode(key)\n\tif block != nil {\n\t\tkey = block.Bytes\n\t}\n\tparsedKey, err := x509.ParsePKCS8PrivateKey(key)\n\tif err != nil {\n\t\tparsedKey, err = x509.ParsePKCS1PrivateKey(key)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"private key should be a PEM or plain PKCS1 or PKCS8; parse error: %v\", err)\n\t\t}\n\t}\n\tparsed, ok := parsedKey.(*rsa.PrivateKey)\n\tif !ok {\n\t\treturn nil, errors.New(\"private key is invalid\")\n\t}\n\treturn parsed, nil\n}\n"
  },
  {
    "path": "vendor/golang.org/x/oauth2/internal/token.go",
    "content": "// Copyright 2014 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage internal\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"math\"\n\t\"mime\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\t\"time\"\n\n\t\"golang.org/x/net/context/ctxhttp\"\n)\n\n// Token represents the credentials used to authorize\n// the requests to access protected resources on the OAuth 2.0\n// provider's backend.\n//\n// This type is a mirror of oauth2.Token and exists to break\n// an otherwise-circular dependency. Other internal packages\n// should convert this Token into an oauth2.Token before use.\ntype Token struct {\n\t// AccessToken is the token that authorizes and authenticates\n\t// the requests.\n\tAccessToken string\n\n\t// TokenType is the type of token.\n\t// The Type method returns either this or \"Bearer\", the default.\n\tTokenType string\n\n\t// RefreshToken is a token that's used by the application\n\t// (as opposed to the user) to refresh the access token\n\t// if it expires.\n\tRefreshToken string\n\n\t// Expiry is the optional expiration time of the access token.\n\t//\n\t// If zero, TokenSource implementations will reuse the same\n\t// token forever and RefreshToken or equivalent\n\t// mechanisms for that TokenSource will not be used.\n\tExpiry time.Time\n\n\t// Raw optionally contains extra metadata from the server\n\t// when updating a token.\n\tRaw interface{}\n}\n\n// tokenJSON is the struct representing the HTTP response from OAuth2\n// providers returning a token in JSON form.\ntype tokenJSON struct {\n\tAccessToken  string         `json:\"access_token\"`\n\tTokenType    string         `json:\"token_type\"`\n\tRefreshToken string         `json:\"refresh_token\"`\n\tExpiresIn    expirationTime `json:\"expires_in\"` // at least PayPal returns string, while most return number\n}\n\nfunc (e *tokenJSON) expiry() (t time.Time) {\n\tif v := e.ExpiresIn; v != 0 {\n\t\treturn time.Now().Add(time.Duration(v) * time.Second)\n\t}\n\treturn\n}\n\ntype expirationTime int32\n\nfunc (e *expirationTime) UnmarshalJSON(b []byte) error {\n\tif len(b) == 0 || string(b) == \"null\" {\n\t\treturn nil\n\t}\n\tvar n json.Number\n\terr := json.Unmarshal(b, &n)\n\tif err != nil {\n\t\treturn err\n\t}\n\ti, err := n.Int64()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif i > math.MaxInt32 {\n\t\ti = math.MaxInt32\n\t}\n\t*e = expirationTime(i)\n\treturn nil\n}\n\n// RegisterBrokenAuthHeaderProvider previously did something. It is now a no-op.\n//\n// Deprecated: this function no longer does anything. Caller code that\n// wants to avoid potential extra HTTP requests made during\n// auto-probing of the provider's auth style should set\n// Endpoint.AuthStyle.\nfunc RegisterBrokenAuthHeaderProvider(tokenURL string) {}\n\n// AuthStyle is a copy of the golang.org/x/oauth2 package's AuthStyle type.\ntype AuthStyle int\n\nconst (\n\tAuthStyleUnknown  AuthStyle = 0\n\tAuthStyleInParams AuthStyle = 1\n\tAuthStyleInHeader AuthStyle = 2\n)\n\n// authStyleCache is the set of tokenURLs we've successfully used via\n// RetrieveToken and which style auth we ended up using.\n// It's called a cache, but it doesn't (yet?) shrink. It's expected that\n// the set of OAuth2 servers a program contacts over time is fixed and\n// small.\nvar authStyleCache struct {\n\tsync.Mutex\n\tm map[string]AuthStyle // keyed by tokenURL\n}\n\n// ResetAuthCache resets the global authentication style cache used\n// for AuthStyleUnknown token requests.\nfunc ResetAuthCache() {\n\tauthStyleCache.Lock()\n\tdefer authStyleCache.Unlock()\n\tauthStyleCache.m = nil\n}\n\n// lookupAuthStyle reports which auth style we last used with tokenURL\n// when calling RetrieveToken and whether we have ever done so.\nfunc lookupAuthStyle(tokenURL string) (style AuthStyle, ok bool) {\n\tauthStyleCache.Lock()\n\tdefer authStyleCache.Unlock()\n\tstyle, ok = authStyleCache.m[tokenURL]\n\treturn\n}\n\n// setAuthStyle adds an entry to authStyleCache, documented above.\nfunc setAuthStyle(tokenURL string, v AuthStyle) {\n\tauthStyleCache.Lock()\n\tdefer authStyleCache.Unlock()\n\tif authStyleCache.m == nil {\n\t\tauthStyleCache.m = make(map[string]AuthStyle)\n\t}\n\tauthStyleCache.m[tokenURL] = v\n}\n\n// newTokenRequest returns a new *http.Request to retrieve a new token\n// from tokenURL using the provided clientID, clientSecret, and POST\n// body parameters.\n//\n// inParams is whether the clientID & clientSecret should be encoded\n// as the POST body. An 'inParams' value of true means to send it in\n// the POST body (along with any values in v); false means to send it\n// in the Authorization header.\nfunc newTokenRequest(tokenURL, clientID, clientSecret string, v url.Values, authStyle AuthStyle) (*http.Request, error) {\n\tif authStyle == AuthStyleInParams {\n\t\tv = cloneURLValues(v)\n\t\tif clientID != \"\" {\n\t\t\tv.Set(\"client_id\", clientID)\n\t\t}\n\t\tif clientSecret != \"\" {\n\t\t\tv.Set(\"client_secret\", clientSecret)\n\t\t}\n\t}\n\treq, err := http.NewRequest(\"POST\", tokenURL, strings.NewReader(v.Encode()))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.Header.Set(\"Content-Type\", \"application/x-www-form-urlencoded\")\n\tif authStyle == AuthStyleInHeader {\n\t\treq.SetBasicAuth(url.QueryEscape(clientID), url.QueryEscape(clientSecret))\n\t}\n\treturn req, nil\n}\n\nfunc cloneURLValues(v url.Values) url.Values {\n\tv2 := make(url.Values, len(v))\n\tfor k, vv := range v {\n\t\tv2[k] = append([]string(nil), vv...)\n\t}\n\treturn v2\n}\n\nfunc RetrieveToken(ctx context.Context, clientID, clientSecret, tokenURL string, v url.Values, authStyle AuthStyle) (*Token, error) {\n\tneedsAuthStyleProbe := authStyle == 0\n\tif needsAuthStyleProbe {\n\t\tif style, ok := lookupAuthStyle(tokenURL); ok {\n\t\t\tauthStyle = style\n\t\t\tneedsAuthStyleProbe = false\n\t\t} else {\n\t\t\tauthStyle = AuthStyleInHeader // the first way we'll try\n\t\t}\n\t}\n\treq, err := newTokenRequest(tokenURL, clientID, clientSecret, v, authStyle)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\ttoken, err := doTokenRoundTrip(ctx, req)\n\tif err != nil && needsAuthStyleProbe {\n\t\t// If we get an error, assume the server wants the\n\t\t// clientID & clientSecret in a different form.\n\t\t// See https://code.google.com/p/goauth2/issues/detail?id=31 for background.\n\t\t// In summary:\n\t\t// - Reddit only accepts client secret in the Authorization header\n\t\t// - Dropbox accepts either it in URL param or Auth header, but not both.\n\t\t// - Google only accepts URL param (not spec compliant?), not Auth header\n\t\t// - Stripe only accepts client secret in Auth header with Bearer method, not Basic\n\t\t//\n\t\t// We used to maintain a big table in this code of all the sites and which way\n\t\t// they went, but maintaining it didn't scale & got annoying.\n\t\t// So just try both ways.\n\t\tauthStyle = AuthStyleInParams // the second way we'll try\n\t\treq, _ = newTokenRequest(tokenURL, clientID, clientSecret, v, authStyle)\n\t\ttoken, err = doTokenRoundTrip(ctx, req)\n\t}\n\tif needsAuthStyleProbe && err == nil {\n\t\tsetAuthStyle(tokenURL, authStyle)\n\t}\n\t// Don't overwrite `RefreshToken` with an empty value\n\t// if this was a token refreshing request.\n\tif token != nil && token.RefreshToken == \"\" {\n\t\ttoken.RefreshToken = v.Get(\"refresh_token\")\n\t}\n\treturn token, err\n}\n\nfunc doTokenRoundTrip(ctx context.Context, req *http.Request) (*Token, error) {\n\tr, err := ctxhttp.Do(ctx, ContextClient(ctx), req)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tbody, err := ioutil.ReadAll(io.LimitReader(r.Body, 1<<20))\n\tr.Body.Close()\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"oauth2: cannot fetch token: %v\", err)\n\t}\n\tif code := r.StatusCode; code < 200 || code > 299 {\n\t\treturn nil, &RetrieveError{\n\t\t\tResponse: r,\n\t\t\tBody:     body,\n\t\t}\n\t}\n\n\tvar token *Token\n\tcontent, _, _ := mime.ParseMediaType(r.Header.Get(\"Content-Type\"))\n\tswitch content {\n\tcase \"application/x-www-form-urlencoded\", \"text/plain\":\n\t\tvals, err := url.ParseQuery(string(body))\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\ttoken = &Token{\n\t\t\tAccessToken:  vals.Get(\"access_token\"),\n\t\t\tTokenType:    vals.Get(\"token_type\"),\n\t\t\tRefreshToken: vals.Get(\"refresh_token\"),\n\t\t\tRaw:          vals,\n\t\t}\n\t\te := vals.Get(\"expires_in\")\n\t\texpires, _ := strconv.Atoi(e)\n\t\tif expires != 0 {\n\t\t\ttoken.Expiry = time.Now().Add(time.Duration(expires) * time.Second)\n\t\t}\n\tdefault:\n\t\tvar tj tokenJSON\n\t\tif err = json.Unmarshal(body, &tj); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\ttoken = &Token{\n\t\t\tAccessToken:  tj.AccessToken,\n\t\t\tTokenType:    tj.TokenType,\n\t\t\tRefreshToken: tj.RefreshToken,\n\t\t\tExpiry:       tj.expiry(),\n\t\t\tRaw:          make(map[string]interface{}),\n\t\t}\n\t\tjson.Unmarshal(body, &token.Raw) // no error checks for optional fields\n\t}\n\tif token.AccessToken == \"\" {\n\t\treturn nil, errors.New(\"oauth2: server response missing access_token\")\n\t}\n\treturn token, nil\n}\n\ntype RetrieveError struct {\n\tResponse *http.Response\n\tBody     []byte\n}\n\nfunc (r *RetrieveError) Error() string {\n\treturn fmt.Sprintf(\"oauth2: cannot fetch token: %v\\nResponse: %s\", r.Response.Status, r.Body)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/oauth2/internal/transport.go",
    "content": "// Copyright 2014 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage internal\n\nimport (\n\t\"context\"\n\t\"net/http\"\n)\n\n// HTTPClient is the context key to use with golang.org/x/net/context's\n// WithValue function to associate an *http.Client value with a context.\nvar HTTPClient ContextKey\n\n// ContextKey is just an empty struct. It exists so HTTPClient can be\n// an immutable public variable with a unique type. It's immutable\n// because nobody else can create a ContextKey, being unexported.\ntype ContextKey struct{}\n\nvar appengineClientHook func(context.Context) *http.Client\n\nfunc ContextClient(ctx context.Context) *http.Client {\n\tif ctx != nil {\n\t\tif hc, ok := ctx.Value(HTTPClient).(*http.Client); ok {\n\t\t\treturn hc\n\t\t}\n\t}\n\tif appengineClientHook != nil {\n\t\treturn appengineClientHook(ctx)\n\t}\n\treturn http.DefaultClient\n}\n"
  },
  {
    "path": "vendor/golang.org/x/oauth2/jws/jws.go",
    "content": "// Copyright 2014 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package jws provides a partial implementation\n// of JSON Web Signature encoding and decoding.\n// It exists to support the golang.org/x/oauth2 package.\n//\n// See RFC 7515.\n//\n// Deprecated: this package is not intended for public use and might be\n// removed in the future. It exists for internal use only.\n// Please switch to another JWS package or copy this package into your own\n// source tree.\npackage jws // import \"golang.org/x/oauth2/jws\"\n\nimport (\n\t\"bytes\"\n\t\"crypto\"\n\t\"crypto/rand\"\n\t\"crypto/rsa\"\n\t\"crypto/sha256\"\n\t\"encoding/base64\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"strings\"\n\t\"time\"\n)\n\n// ClaimSet contains information about the JWT signature including the\n// permissions being requested (scopes), the target of the token, the issuer,\n// the time the token was issued, and the lifetime of the token.\ntype ClaimSet struct {\n\tIss   string `json:\"iss\"`             // email address of the client_id of the application making the access token request\n\tScope string `json:\"scope,omitempty\"` // space-delimited list of the permissions the application requests\n\tAud   string `json:\"aud\"`             // descriptor of the intended target of the assertion (Optional).\n\tExp   int64  `json:\"exp\"`             // the expiration time of the assertion (seconds since Unix epoch)\n\tIat   int64  `json:\"iat\"`             // the time the assertion was issued (seconds since Unix epoch)\n\tTyp   string `json:\"typ,omitempty\"`   // token type (Optional).\n\n\t// Email for which the application is requesting delegated access (Optional).\n\tSub string `json:\"sub,omitempty\"`\n\n\t// The old name of Sub. Client keeps setting Prn to be\n\t// complaint with legacy OAuth 2.0 providers. (Optional)\n\tPrn string `json:\"prn,omitempty\"`\n\n\t// See http://tools.ietf.org/html/draft-jones-json-web-token-10#section-4.3\n\t// This array is marshalled using custom code (see (c *ClaimSet) encode()).\n\tPrivateClaims map[string]interface{} `json:\"-\"`\n}\n\nfunc (c *ClaimSet) encode() (string, error) {\n\t// Reverting time back for machines whose time is not perfectly in sync.\n\t// If client machine's time is in the future according\n\t// to Google servers, an access token will not be issued.\n\tnow := time.Now().Add(-10 * time.Second)\n\tif c.Iat == 0 {\n\t\tc.Iat = now.Unix()\n\t}\n\tif c.Exp == 0 {\n\t\tc.Exp = now.Add(time.Hour).Unix()\n\t}\n\tif c.Exp < c.Iat {\n\t\treturn \"\", fmt.Errorf(\"jws: invalid Exp = %v; must be later than Iat = %v\", c.Exp, c.Iat)\n\t}\n\n\tb, err := json.Marshal(c)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\tif len(c.PrivateClaims) == 0 {\n\t\treturn base64.RawURLEncoding.EncodeToString(b), nil\n\t}\n\n\t// Marshal private claim set and then append it to b.\n\tprv, err := json.Marshal(c.PrivateClaims)\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"jws: invalid map of private claims %v\", c.PrivateClaims)\n\t}\n\n\t// Concatenate public and private claim JSON objects.\n\tif !bytes.HasSuffix(b, []byte{'}'}) {\n\t\treturn \"\", fmt.Errorf(\"jws: invalid JSON %s\", b)\n\t}\n\tif !bytes.HasPrefix(prv, []byte{'{'}) {\n\t\treturn \"\", fmt.Errorf(\"jws: invalid JSON %s\", prv)\n\t}\n\tb[len(b)-1] = ','         // Replace closing curly brace with a comma.\n\tb = append(b, prv[1:]...) // Append private claims.\n\treturn base64.RawURLEncoding.EncodeToString(b), nil\n}\n\n// Header represents the header for the signed JWS payloads.\ntype Header struct {\n\t// The algorithm used for signature.\n\tAlgorithm string `json:\"alg\"`\n\n\t// Represents the token type.\n\tTyp string `json:\"typ\"`\n\n\t// The optional hint of which key is being used.\n\tKeyID string `json:\"kid,omitempty\"`\n}\n\nfunc (h *Header) encode() (string, error) {\n\tb, err := json.Marshal(h)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn base64.RawURLEncoding.EncodeToString(b), nil\n}\n\n// Decode decodes a claim set from a JWS payload.\nfunc Decode(payload string) (*ClaimSet, error) {\n\t// decode returned id token to get expiry\n\ts := strings.Split(payload, \".\")\n\tif len(s) < 2 {\n\t\t// TODO(jbd): Provide more context about the error.\n\t\treturn nil, errors.New(\"jws: invalid token received\")\n\t}\n\tdecoded, err := base64.RawURLEncoding.DecodeString(s[1])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tc := &ClaimSet{}\n\terr = json.NewDecoder(bytes.NewBuffer(decoded)).Decode(c)\n\treturn c, err\n}\n\n// Signer returns a signature for the given data.\ntype Signer func(data []byte) (sig []byte, err error)\n\n// EncodeWithSigner encodes a header and claim set with the provided signer.\nfunc EncodeWithSigner(header *Header, c *ClaimSet, sg Signer) (string, error) {\n\thead, err := header.encode()\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tcs, err := c.encode()\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tss := fmt.Sprintf(\"%s.%s\", head, cs)\n\tsig, err := sg([]byte(ss))\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn fmt.Sprintf(\"%s.%s\", ss, base64.RawURLEncoding.EncodeToString(sig)), nil\n}\n\n// Encode encodes a signed JWS with provided header and claim set.\n// This invokes EncodeWithSigner using crypto/rsa.SignPKCS1v15 with the given RSA private key.\nfunc Encode(header *Header, c *ClaimSet, key *rsa.PrivateKey) (string, error) {\n\tsg := func(data []byte) (sig []byte, err error) {\n\t\th := sha256.New()\n\t\th.Write(data)\n\t\treturn rsa.SignPKCS1v15(rand.Reader, key, crypto.SHA256, h.Sum(nil))\n\t}\n\treturn EncodeWithSigner(header, c, sg)\n}\n\n// Verify tests whether the provided JWT token's signature was produced by the private key\n// associated with the supplied public key.\nfunc Verify(token string, key *rsa.PublicKey) error {\n\tparts := strings.Split(token, \".\")\n\tif len(parts) != 3 {\n\t\treturn errors.New(\"jws: invalid token received, token must have 3 parts\")\n\t}\n\n\tsignedContent := parts[0] + \".\" + parts[1]\n\tsignatureString, err := base64.RawURLEncoding.DecodeString(parts[2])\n\tif err != nil {\n\t\treturn err\n\t}\n\n\th := sha256.New()\n\th.Write([]byte(signedContent))\n\treturn rsa.VerifyPKCS1v15(key, crypto.SHA256, h.Sum(nil), []byte(signatureString))\n}\n"
  },
  {
    "path": "vendor/golang.org/x/oauth2/jwt/jwt.go",
    "content": "// Copyright 2014 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package jwt implements the OAuth 2.0 JSON Web Token flow, commonly\n// known as \"two-legged OAuth 2.0\".\n//\n// See: https://tools.ietf.org/html/draft-ietf-oauth-jwt-bearer-12\npackage jwt\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"strings\"\n\t\"time\"\n\n\t\"golang.org/x/oauth2\"\n\t\"golang.org/x/oauth2/internal\"\n\t\"golang.org/x/oauth2/jws\"\n)\n\nvar (\n\tdefaultGrantType = \"urn:ietf:params:oauth:grant-type:jwt-bearer\"\n\tdefaultHeader    = &jws.Header{Algorithm: \"RS256\", Typ: \"JWT\"}\n)\n\n// Config is the configuration for using JWT to fetch tokens,\n// commonly known as \"two-legged OAuth 2.0\".\ntype Config struct {\n\t// Email is the OAuth client identifier used when communicating with\n\t// the configured OAuth provider.\n\tEmail string\n\n\t// PrivateKey contains the contents of an RSA private key or the\n\t// contents of a PEM file that contains a private key. The provided\n\t// private key is used to sign JWT payloads.\n\t// PEM containers with a passphrase are not supported.\n\t// Use the following command to convert a PKCS 12 file into a PEM.\n\t//\n\t//    $ openssl pkcs12 -in key.p12 -out key.pem -nodes\n\t//\n\tPrivateKey []byte\n\n\t// PrivateKeyID contains an optional hint indicating which key is being\n\t// used.\n\tPrivateKeyID string\n\n\t// Subject is the optional user to impersonate.\n\tSubject string\n\n\t// Scopes optionally specifies a list of requested permission scopes.\n\tScopes []string\n\n\t// TokenURL is the endpoint required to complete the 2-legged JWT flow.\n\tTokenURL string\n\n\t// Expires optionally specifies how long the token is valid for.\n\tExpires time.Duration\n\n\t// Audience optionally specifies the intended audience of the\n\t// request.  If empty, the value of TokenURL is used as the\n\t// intended audience.\n\tAudience string\n\n\t// PrivateClaims optionally specifies custom private claims in the JWT.\n\t// See http://tools.ietf.org/html/draft-jones-json-web-token-10#section-4.3\n\tPrivateClaims map[string]interface{}\n\n\t// UseIDToken optionally specifies whether ID token should be used instead\n\t// of access token when the server returns both.\n\tUseIDToken bool\n}\n\n// TokenSource returns a JWT TokenSource using the configuration\n// in c and the HTTP client from the provided context.\nfunc (c *Config) TokenSource(ctx context.Context) oauth2.TokenSource {\n\treturn oauth2.ReuseTokenSource(nil, jwtSource{ctx, c})\n}\n\n// Client returns an HTTP client wrapping the context's\n// HTTP transport and adding Authorization headers with tokens\n// obtained from c.\n//\n// The returned client and its Transport should not be modified.\nfunc (c *Config) Client(ctx context.Context) *http.Client {\n\treturn oauth2.NewClient(ctx, c.TokenSource(ctx))\n}\n\n// jwtSource is a source that always does a signed JWT request for a token.\n// It should typically be wrapped with a reuseTokenSource.\ntype jwtSource struct {\n\tctx  context.Context\n\tconf *Config\n}\n\nfunc (js jwtSource) Token() (*oauth2.Token, error) {\n\tpk, err := internal.ParseKey(js.conf.PrivateKey)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\thc := oauth2.NewClient(js.ctx, nil)\n\tclaimSet := &jws.ClaimSet{\n\t\tIss:           js.conf.Email,\n\t\tScope:         strings.Join(js.conf.Scopes, \" \"),\n\t\tAud:           js.conf.TokenURL,\n\t\tPrivateClaims: js.conf.PrivateClaims,\n\t}\n\tif subject := js.conf.Subject; subject != \"\" {\n\t\tclaimSet.Sub = subject\n\t\t// prn is the old name of sub. Keep setting it\n\t\t// to be compatible with legacy OAuth 2.0 providers.\n\t\tclaimSet.Prn = subject\n\t}\n\tif t := js.conf.Expires; t > 0 {\n\t\tclaimSet.Exp = time.Now().Add(t).Unix()\n\t}\n\tif aud := js.conf.Audience; aud != \"\" {\n\t\tclaimSet.Aud = aud\n\t}\n\th := *defaultHeader\n\th.KeyID = js.conf.PrivateKeyID\n\tpayload, err := jws.Encode(&h, claimSet, pk)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tv := url.Values{}\n\tv.Set(\"grant_type\", defaultGrantType)\n\tv.Set(\"assertion\", payload)\n\tresp, err := hc.PostForm(js.conf.TokenURL, v)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"oauth2: cannot fetch token: %v\", err)\n\t}\n\tdefer resp.Body.Close()\n\tbody, err := ioutil.ReadAll(io.LimitReader(resp.Body, 1<<20))\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"oauth2: cannot fetch token: %v\", err)\n\t}\n\tif c := resp.StatusCode; c < 200 || c > 299 {\n\t\treturn nil, &oauth2.RetrieveError{\n\t\t\tResponse: resp,\n\t\t\tBody:     body,\n\t\t}\n\t}\n\t// tokenRes is the JSON response body.\n\tvar tokenRes struct {\n\t\tAccessToken string `json:\"access_token\"`\n\t\tTokenType   string `json:\"token_type\"`\n\t\tIDToken     string `json:\"id_token\"`\n\t\tExpiresIn   int64  `json:\"expires_in\"` // relative seconds from now\n\t}\n\tif err := json.Unmarshal(body, &tokenRes); err != nil {\n\t\treturn nil, fmt.Errorf(\"oauth2: cannot fetch token: %v\", err)\n\t}\n\ttoken := &oauth2.Token{\n\t\tAccessToken: tokenRes.AccessToken,\n\t\tTokenType:   tokenRes.TokenType,\n\t}\n\traw := make(map[string]interface{})\n\tjson.Unmarshal(body, &raw) // no error checks for optional fields\n\ttoken = token.WithExtra(raw)\n\n\tif secs := tokenRes.ExpiresIn; secs > 0 {\n\t\ttoken.Expiry = time.Now().Add(time.Duration(secs) * time.Second)\n\t}\n\tif v := tokenRes.IDToken; v != \"\" {\n\t\t// decode returned id token to get expiry\n\t\tclaimSet, err := jws.Decode(v)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"oauth2: error decoding JWT token: %v\", err)\n\t\t}\n\t\ttoken.Expiry = time.Unix(claimSet.Exp, 0)\n\t}\n\tif js.conf.UseIDToken {\n\t\tif tokenRes.IDToken == \"\" {\n\t\t\treturn nil, fmt.Errorf(\"oauth2: response doesn't have JWT token\")\n\t\t}\n\t\ttoken.AccessToken = tokenRes.IDToken\n\t}\n\treturn token, nil\n}\n"
  },
  {
    "path": "vendor/golang.org/x/oauth2/oauth2.go",
    "content": "// Copyright 2014 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package oauth2 provides support for making\n// OAuth2 authorized and authenticated HTTP requests,\n// as specified in RFC 6749.\n// It can additionally grant authorization with Bearer JWT.\npackage oauth2 // import \"golang.org/x/oauth2\"\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"errors\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"strings\"\n\t\"sync\"\n\n\t\"golang.org/x/oauth2/internal\"\n)\n\n// NoContext is the default context you should supply if not using\n// your own context.Context (see https://golang.org/x/net/context).\n//\n// Deprecated: Use context.Background() or context.TODO() instead.\nvar NoContext = context.TODO()\n\n// RegisterBrokenAuthHeaderProvider previously did something. It is now a no-op.\n//\n// Deprecated: this function no longer does anything. Caller code that\n// wants to avoid potential extra HTTP requests made during\n// auto-probing of the provider's auth style should set\n// Endpoint.AuthStyle.\nfunc RegisterBrokenAuthHeaderProvider(tokenURL string) {}\n\n// Config describes a typical 3-legged OAuth2 flow, with both the\n// client application information and the server's endpoint URLs.\n// For the client credentials 2-legged OAuth2 flow, see the clientcredentials\n// package (https://golang.org/x/oauth2/clientcredentials).\ntype Config struct {\n\t// ClientID is the application's ID.\n\tClientID string\n\n\t// ClientSecret is the application's secret.\n\tClientSecret string\n\n\t// Endpoint contains the resource server's token endpoint\n\t// URLs. These are constants specific to each server and are\n\t// often available via site-specific packages, such as\n\t// google.Endpoint or github.Endpoint.\n\tEndpoint Endpoint\n\n\t// RedirectURL is the URL to redirect users going through\n\t// the OAuth flow, after the resource owner's URLs.\n\tRedirectURL string\n\n\t// Scope specifies optional requested permissions.\n\tScopes []string\n}\n\n// A TokenSource is anything that can return a token.\ntype TokenSource interface {\n\t// Token returns a token or an error.\n\t// Token must be safe for concurrent use by multiple goroutines.\n\t// The returned Token must not be modified.\n\tToken() (*Token, error)\n}\n\n// Endpoint represents an OAuth 2.0 provider's authorization and token\n// endpoint URLs.\ntype Endpoint struct {\n\tAuthURL  string\n\tTokenURL string\n\n\t// AuthStyle optionally specifies how the endpoint wants the\n\t// client ID & client secret sent. The zero value means to\n\t// auto-detect.\n\tAuthStyle AuthStyle\n}\n\n// AuthStyle represents how requests for tokens are authenticated\n// to the server.\ntype AuthStyle int\n\nconst (\n\t// AuthStyleAutoDetect means to auto-detect which authentication\n\t// style the provider wants by trying both ways and caching\n\t// the successful way for the future.\n\tAuthStyleAutoDetect AuthStyle = 0\n\n\t// AuthStyleInParams sends the \"client_id\" and \"client_secret\"\n\t// in the POST body as application/x-www-form-urlencoded parameters.\n\tAuthStyleInParams AuthStyle = 1\n\n\t// AuthStyleInHeader sends the client_id and client_password\n\t// using HTTP Basic Authorization. This is an optional style\n\t// described in the OAuth2 RFC 6749 section 2.3.1.\n\tAuthStyleInHeader AuthStyle = 2\n)\n\nvar (\n\t// AccessTypeOnline and AccessTypeOffline are options passed\n\t// to the Options.AuthCodeURL method. They modify the\n\t// \"access_type\" field that gets sent in the URL returned by\n\t// AuthCodeURL.\n\t//\n\t// Online is the default if neither is specified. If your\n\t// application needs to refresh access tokens when the user\n\t// is not present at the browser, then use offline. This will\n\t// result in your application obtaining a refresh token the\n\t// first time your application exchanges an authorization\n\t// code for a user.\n\tAccessTypeOnline  AuthCodeOption = SetAuthURLParam(\"access_type\", \"online\")\n\tAccessTypeOffline AuthCodeOption = SetAuthURLParam(\"access_type\", \"offline\")\n\n\t// ApprovalForce forces the users to view the consent dialog\n\t// and confirm the permissions request at the URL returned\n\t// from AuthCodeURL, even if they've already done so.\n\tApprovalForce AuthCodeOption = SetAuthURLParam(\"prompt\", \"consent\")\n)\n\n// An AuthCodeOption is passed to Config.AuthCodeURL.\ntype AuthCodeOption interface {\n\tsetValue(url.Values)\n}\n\ntype setParam struct{ k, v string }\n\nfunc (p setParam) setValue(m url.Values) { m.Set(p.k, p.v) }\n\n// SetAuthURLParam builds an AuthCodeOption which passes key/value parameters\n// to a provider's authorization endpoint.\nfunc SetAuthURLParam(key, value string) AuthCodeOption {\n\treturn setParam{key, value}\n}\n\n// AuthCodeURL returns a URL to OAuth 2.0 provider's consent page\n// that asks for permissions for the required scopes explicitly.\n//\n// State is a token to protect the user from CSRF attacks. You must\n// always provide a non-empty string and validate that it matches the\n// the state query parameter on your redirect callback.\n// See http://tools.ietf.org/html/rfc6749#section-10.12 for more info.\n//\n// Opts may include AccessTypeOnline or AccessTypeOffline, as well\n// as ApprovalForce.\n// It can also be used to pass the PKCE challenge.\n// See https://www.oauth.com/oauth2-servers/pkce/ for more info.\nfunc (c *Config) AuthCodeURL(state string, opts ...AuthCodeOption) string {\n\tvar buf bytes.Buffer\n\tbuf.WriteString(c.Endpoint.AuthURL)\n\tv := url.Values{\n\t\t\"response_type\": {\"code\"},\n\t\t\"client_id\":     {c.ClientID},\n\t}\n\tif c.RedirectURL != \"\" {\n\t\tv.Set(\"redirect_uri\", c.RedirectURL)\n\t}\n\tif len(c.Scopes) > 0 {\n\t\tv.Set(\"scope\", strings.Join(c.Scopes, \" \"))\n\t}\n\tif state != \"\" {\n\t\t// TODO(light): Docs say never to omit state; don't allow empty.\n\t\tv.Set(\"state\", state)\n\t}\n\tfor _, opt := range opts {\n\t\topt.setValue(v)\n\t}\n\tif strings.Contains(c.Endpoint.AuthURL, \"?\") {\n\t\tbuf.WriteByte('&')\n\t} else {\n\t\tbuf.WriteByte('?')\n\t}\n\tbuf.WriteString(v.Encode())\n\treturn buf.String()\n}\n\n// PasswordCredentialsToken converts a resource owner username and password\n// pair into a token.\n//\n// Per the RFC, this grant type should only be used \"when there is a high\n// degree of trust between the resource owner and the client (e.g., the client\n// is part of the device operating system or a highly privileged application),\n// and when other authorization grant types are not available.\"\n// See https://tools.ietf.org/html/rfc6749#section-4.3 for more info.\n//\n// The provided context optionally controls which HTTP client is used. See the HTTPClient variable.\nfunc (c *Config) PasswordCredentialsToken(ctx context.Context, username, password string) (*Token, error) {\n\tv := url.Values{\n\t\t\"grant_type\": {\"password\"},\n\t\t\"username\":   {username},\n\t\t\"password\":   {password},\n\t}\n\tif len(c.Scopes) > 0 {\n\t\tv.Set(\"scope\", strings.Join(c.Scopes, \" \"))\n\t}\n\treturn retrieveToken(ctx, c, v)\n}\n\n// Exchange converts an authorization code into a token.\n//\n// It is used after a resource provider redirects the user back\n// to the Redirect URI (the URL obtained from AuthCodeURL).\n//\n// The provided context optionally controls which HTTP client is used. See the HTTPClient variable.\n//\n// The code will be in the *http.Request.FormValue(\"code\"). Before\n// calling Exchange, be sure to validate FormValue(\"state\").\n//\n// Opts may include the PKCE verifier code if previously used in AuthCodeURL.\n// See https://www.oauth.com/oauth2-servers/pkce/ for more info.\nfunc (c *Config) Exchange(ctx context.Context, code string, opts ...AuthCodeOption) (*Token, error) {\n\tv := url.Values{\n\t\t\"grant_type\": {\"authorization_code\"},\n\t\t\"code\":       {code},\n\t}\n\tif c.RedirectURL != \"\" {\n\t\tv.Set(\"redirect_uri\", c.RedirectURL)\n\t}\n\tfor _, opt := range opts {\n\t\topt.setValue(v)\n\t}\n\treturn retrieveToken(ctx, c, v)\n}\n\n// Client returns an HTTP client using the provided token.\n// The token will auto-refresh as necessary. The underlying\n// HTTP transport will be obtained using the provided context.\n// The returned client and its Transport should not be modified.\nfunc (c *Config) Client(ctx context.Context, t *Token) *http.Client {\n\treturn NewClient(ctx, c.TokenSource(ctx, t))\n}\n\n// TokenSource returns a TokenSource that returns t until t expires,\n// automatically refreshing it as necessary using the provided context.\n//\n// Most users will use Config.Client instead.\nfunc (c *Config) TokenSource(ctx context.Context, t *Token) TokenSource {\n\ttkr := &tokenRefresher{\n\t\tctx:  ctx,\n\t\tconf: c,\n\t}\n\tif t != nil {\n\t\ttkr.refreshToken = t.RefreshToken\n\t}\n\treturn &reuseTokenSource{\n\t\tt:   t,\n\t\tnew: tkr,\n\t}\n}\n\n// tokenRefresher is a TokenSource that makes \"grant_type\"==\"refresh_token\"\n// HTTP requests to renew a token using a RefreshToken.\ntype tokenRefresher struct {\n\tctx          context.Context // used to get HTTP requests\n\tconf         *Config\n\trefreshToken string\n}\n\n// WARNING: Token is not safe for concurrent access, as it\n// updates the tokenRefresher's refreshToken field.\n// Within this package, it is used by reuseTokenSource which\n// synchronizes calls to this method with its own mutex.\nfunc (tf *tokenRefresher) Token() (*Token, error) {\n\tif tf.refreshToken == \"\" {\n\t\treturn nil, errors.New(\"oauth2: token expired and refresh token is not set\")\n\t}\n\n\ttk, err := retrieveToken(tf.ctx, tf.conf, url.Values{\n\t\t\"grant_type\":    {\"refresh_token\"},\n\t\t\"refresh_token\": {tf.refreshToken},\n\t})\n\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif tf.refreshToken != tk.RefreshToken {\n\t\ttf.refreshToken = tk.RefreshToken\n\t}\n\treturn tk, err\n}\n\n// reuseTokenSource is a TokenSource that holds a single token in memory\n// and validates its expiry before each call to retrieve it with\n// Token. If it's expired, it will be auto-refreshed using the\n// new TokenSource.\ntype reuseTokenSource struct {\n\tnew TokenSource // called when t is expired.\n\n\tmu sync.Mutex // guards t\n\tt  *Token\n}\n\n// Token returns the current token if it's still valid, else will\n// refresh the current token (using r.Context for HTTP client\n// information) and return the new one.\nfunc (s *reuseTokenSource) Token() (*Token, error) {\n\ts.mu.Lock()\n\tdefer s.mu.Unlock()\n\tif s.t.Valid() {\n\t\treturn s.t, nil\n\t}\n\tt, err := s.new.Token()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\ts.t = t\n\treturn t, nil\n}\n\n// StaticTokenSource returns a TokenSource that always returns the same token.\n// Because the provided token t is never refreshed, StaticTokenSource is only\n// useful for tokens that never expire.\nfunc StaticTokenSource(t *Token) TokenSource {\n\treturn staticTokenSource{t}\n}\n\n// staticTokenSource is a TokenSource that always returns the same Token.\ntype staticTokenSource struct {\n\tt *Token\n}\n\nfunc (s staticTokenSource) Token() (*Token, error) {\n\treturn s.t, nil\n}\n\n// HTTPClient is the context key to use with golang.org/x/net/context's\n// WithValue function to associate an *http.Client value with a context.\nvar HTTPClient internal.ContextKey\n\n// NewClient creates an *http.Client from a Context and TokenSource.\n// The returned client is not valid beyond the lifetime of the context.\n//\n// Note that if a custom *http.Client is provided via the Context it\n// is used only for token acquisition and is not used to configure the\n// *http.Client returned from NewClient.\n//\n// As a special case, if src is nil, a non-OAuth2 client is returned\n// using the provided context. This exists to support related OAuth2\n// packages.\nfunc NewClient(ctx context.Context, src TokenSource) *http.Client {\n\tif src == nil {\n\t\treturn internal.ContextClient(ctx)\n\t}\n\treturn &http.Client{\n\t\tTransport: &Transport{\n\t\t\tBase:   internal.ContextClient(ctx).Transport,\n\t\t\tSource: ReuseTokenSource(nil, src),\n\t\t},\n\t}\n}\n\n// ReuseTokenSource returns a TokenSource which repeatedly returns the\n// same token as long as it's valid, starting with t.\n// When its cached token is invalid, a new token is obtained from src.\n//\n// ReuseTokenSource is typically used to reuse tokens from a cache\n// (such as a file on disk) between runs of a program, rather than\n// obtaining new tokens unnecessarily.\n//\n// The initial token t may be nil, in which case the TokenSource is\n// wrapped in a caching version if it isn't one already. This also\n// means it's always safe to wrap ReuseTokenSource around any other\n// TokenSource without adverse effects.\nfunc ReuseTokenSource(t *Token, src TokenSource) TokenSource {\n\t// Don't wrap a reuseTokenSource in itself. That would work,\n\t// but cause an unnecessary number of mutex operations.\n\t// Just build the equivalent one.\n\tif rt, ok := src.(*reuseTokenSource); ok {\n\t\tif t == nil {\n\t\t\t// Just use it directly.\n\t\t\treturn rt\n\t\t}\n\t\tsrc = rt.new\n\t}\n\treturn &reuseTokenSource{\n\t\tt:   t,\n\t\tnew: src,\n\t}\n}\n"
  },
  {
    "path": "vendor/golang.org/x/oauth2/token.go",
    "content": "// Copyright 2014 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage oauth2\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\n\t\"golang.org/x/oauth2/internal\"\n)\n\n// expiryDelta determines how earlier a token should be considered\n// expired than its actual expiration time. It is used to avoid late\n// expirations due to client-server time mismatches.\nconst expiryDelta = 10 * time.Second\n\n// Token represents the credentials used to authorize\n// the requests to access protected resources on the OAuth 2.0\n// provider's backend.\n//\n// Most users of this package should not access fields of Token\n// directly. They're exported mostly for use by related packages\n// implementing derivative OAuth2 flows.\ntype Token struct {\n\t// AccessToken is the token that authorizes and authenticates\n\t// the requests.\n\tAccessToken string `json:\"access_token\"`\n\n\t// TokenType is the type of token.\n\t// The Type method returns either this or \"Bearer\", the default.\n\tTokenType string `json:\"token_type,omitempty\"`\n\n\t// RefreshToken is a token that's used by the application\n\t// (as opposed to the user) to refresh the access token\n\t// if it expires.\n\tRefreshToken string `json:\"refresh_token,omitempty\"`\n\n\t// Expiry is the optional expiration time of the access token.\n\t//\n\t// If zero, TokenSource implementations will reuse the same\n\t// token forever and RefreshToken or equivalent\n\t// mechanisms for that TokenSource will not be used.\n\tExpiry time.Time `json:\"expiry,omitempty\"`\n\n\t// raw optionally contains extra metadata from the server\n\t// when updating a token.\n\traw interface{}\n}\n\n// Type returns t.TokenType if non-empty, else \"Bearer\".\nfunc (t *Token) Type() string {\n\tif strings.EqualFold(t.TokenType, \"bearer\") {\n\t\treturn \"Bearer\"\n\t}\n\tif strings.EqualFold(t.TokenType, \"mac\") {\n\t\treturn \"MAC\"\n\t}\n\tif strings.EqualFold(t.TokenType, \"basic\") {\n\t\treturn \"Basic\"\n\t}\n\tif t.TokenType != \"\" {\n\t\treturn t.TokenType\n\t}\n\treturn \"Bearer\"\n}\n\n// SetAuthHeader sets the Authorization header to r using the access\n// token in t.\n//\n// This method is unnecessary when using Transport or an HTTP Client\n// returned by this package.\nfunc (t *Token) SetAuthHeader(r *http.Request) {\n\tr.Header.Set(\"Authorization\", t.Type()+\" \"+t.AccessToken)\n}\n\n// WithExtra returns a new Token that's a clone of t, but using the\n// provided raw extra map. This is only intended for use by packages\n// implementing derivative OAuth2 flows.\nfunc (t *Token) WithExtra(extra interface{}) *Token {\n\tt2 := new(Token)\n\t*t2 = *t\n\tt2.raw = extra\n\treturn t2\n}\n\n// Extra returns an extra field.\n// Extra fields are key-value pairs returned by the server as a\n// part of the token retrieval response.\nfunc (t *Token) Extra(key string) interface{} {\n\tif raw, ok := t.raw.(map[string]interface{}); ok {\n\t\treturn raw[key]\n\t}\n\n\tvals, ok := t.raw.(url.Values)\n\tif !ok {\n\t\treturn nil\n\t}\n\n\tv := vals.Get(key)\n\tswitch s := strings.TrimSpace(v); strings.Count(s, \".\") {\n\tcase 0: // Contains no \".\"; try to parse as int\n\t\tif i, err := strconv.ParseInt(s, 10, 64); err == nil {\n\t\t\treturn i\n\t\t}\n\tcase 1: // Contains a single \".\"; try to parse as float\n\t\tif f, err := strconv.ParseFloat(s, 64); err == nil {\n\t\t\treturn f\n\t\t}\n\t}\n\n\treturn v\n}\n\n// timeNow is time.Now but pulled out as a variable for tests.\nvar timeNow = time.Now\n\n// expired reports whether the token is expired.\n// t must be non-nil.\nfunc (t *Token) expired() bool {\n\tif t.Expiry.IsZero() {\n\t\treturn false\n\t}\n\treturn t.Expiry.Round(0).Add(-expiryDelta).Before(timeNow())\n}\n\n// Valid reports whether t is non-nil, has an AccessToken, and is not expired.\nfunc (t *Token) Valid() bool {\n\treturn t != nil && t.AccessToken != \"\" && !t.expired()\n}\n\n// tokenFromInternal maps an *internal.Token struct into\n// a *Token struct.\nfunc tokenFromInternal(t *internal.Token) *Token {\n\tif t == nil {\n\t\treturn nil\n\t}\n\treturn &Token{\n\t\tAccessToken:  t.AccessToken,\n\t\tTokenType:    t.TokenType,\n\t\tRefreshToken: t.RefreshToken,\n\t\tExpiry:       t.Expiry,\n\t\traw:          t.Raw,\n\t}\n}\n\n// retrieveToken takes a *Config and uses that to retrieve an *internal.Token.\n// This token is then mapped from *internal.Token into an *oauth2.Token which is returned along\n// with an error..\nfunc retrieveToken(ctx context.Context, c *Config, v url.Values) (*Token, error) {\n\ttk, err := internal.RetrieveToken(ctx, c.ClientID, c.ClientSecret, c.Endpoint.TokenURL, v, internal.AuthStyle(c.Endpoint.AuthStyle))\n\tif err != nil {\n\t\tif rErr, ok := err.(*internal.RetrieveError); ok {\n\t\t\treturn nil, (*RetrieveError)(rErr)\n\t\t}\n\t\treturn nil, err\n\t}\n\treturn tokenFromInternal(tk), nil\n}\n\n// RetrieveError is the error returned when the token endpoint returns a\n// non-2XX HTTP status code.\ntype RetrieveError struct {\n\tResponse *http.Response\n\t// Body is the body that was consumed by reading Response.Body.\n\t// It may be truncated.\n\tBody []byte\n}\n\nfunc (r *RetrieveError) Error() string {\n\treturn fmt.Sprintf(\"oauth2: cannot fetch token: %v\\nResponse: %s\", r.Response.Status, r.Body)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/oauth2/transport.go",
    "content": "// Copyright 2014 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage oauth2\n\nimport (\n\t\"errors\"\n\t\"io\"\n\t\"net/http\"\n\t\"sync\"\n)\n\n// Transport is an http.RoundTripper that makes OAuth 2.0 HTTP requests,\n// wrapping a base RoundTripper and adding an Authorization header\n// with a token from the supplied Sources.\n//\n// Transport is a low-level mechanism. Most code will use the\n// higher-level Config.Client method instead.\ntype Transport struct {\n\t// Source supplies the token to add to outgoing requests'\n\t// Authorization headers.\n\tSource TokenSource\n\n\t// Base is the base RoundTripper used to make HTTP requests.\n\t// If nil, http.DefaultTransport is used.\n\tBase http.RoundTripper\n\n\tmu     sync.Mutex                      // guards modReq\n\tmodReq map[*http.Request]*http.Request // original -> modified\n}\n\n// RoundTrip authorizes and authenticates the request with an\n// access token from Transport's Source.\nfunc (t *Transport) RoundTrip(req *http.Request) (*http.Response, error) {\n\treqBodyClosed := false\n\tif req.Body != nil {\n\t\tdefer func() {\n\t\t\tif !reqBodyClosed {\n\t\t\t\treq.Body.Close()\n\t\t\t}\n\t\t}()\n\t}\n\n\tif t.Source == nil {\n\t\treturn nil, errors.New(\"oauth2: Transport's Source is nil\")\n\t}\n\ttoken, err := t.Source.Token()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treq2 := cloneRequest(req) // per RoundTripper contract\n\ttoken.SetAuthHeader(req2)\n\tt.setModReq(req, req2)\n\tres, err := t.base().RoundTrip(req2)\n\n\t// req.Body is assumed to have been closed by the base RoundTripper.\n\treqBodyClosed = true\n\n\tif err != nil {\n\t\tt.setModReq(req, nil)\n\t\treturn nil, err\n\t}\n\tres.Body = &onEOFReader{\n\t\trc: res.Body,\n\t\tfn: func() { t.setModReq(req, nil) },\n\t}\n\treturn res, nil\n}\n\n// CancelRequest cancels an in-flight request by closing its connection.\nfunc (t *Transport) CancelRequest(req *http.Request) {\n\ttype canceler interface {\n\t\tCancelRequest(*http.Request)\n\t}\n\tif cr, ok := t.base().(canceler); ok {\n\t\tt.mu.Lock()\n\t\tmodReq := t.modReq[req]\n\t\tdelete(t.modReq, req)\n\t\tt.mu.Unlock()\n\t\tcr.CancelRequest(modReq)\n\t}\n}\n\nfunc (t *Transport) base() http.RoundTripper {\n\tif t.Base != nil {\n\t\treturn t.Base\n\t}\n\treturn http.DefaultTransport\n}\n\nfunc (t *Transport) setModReq(orig, mod *http.Request) {\n\tt.mu.Lock()\n\tdefer t.mu.Unlock()\n\tif t.modReq == nil {\n\t\tt.modReq = make(map[*http.Request]*http.Request)\n\t}\n\tif mod == nil {\n\t\tdelete(t.modReq, orig)\n\t} else {\n\t\tt.modReq[orig] = mod\n\t}\n}\n\n// cloneRequest returns a clone of the provided *http.Request.\n// The clone is a shallow copy of the struct and its Header map.\nfunc cloneRequest(r *http.Request) *http.Request {\n\t// shallow copy of the struct\n\tr2 := new(http.Request)\n\t*r2 = *r\n\t// deep copy of the Header\n\tr2.Header = make(http.Header, len(r.Header))\n\tfor k, s := range r.Header {\n\t\tr2.Header[k] = append([]string(nil), s...)\n\t}\n\treturn r2\n}\n\ntype onEOFReader struct {\n\trc io.ReadCloser\n\tfn func()\n}\n\nfunc (r *onEOFReader) Read(p []byte) (n int, err error) {\n\tn, err = r.rc.Read(p)\n\tif err == io.EOF {\n\t\tr.runFunc()\n\t}\n\treturn\n}\n\nfunc (r *onEOFReader) Close() error {\n\terr := r.rc.Close()\n\tr.runFunc()\n\treturn err\n}\n\nfunc (r *onEOFReader) runFunc() {\n\tif fn := r.fn; fn != nil {\n\t\tfn()\n\t\tr.fn = nil\n\t}\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/LICENSE",
    "content": "Copyright (c) 2009 The Go Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "vendor/golang.org/x/sys/PATENTS",
    "content": "Additional IP Rights Grant (Patents)\n\n\"This implementation\" means the copyrightable works distributed by\nGoogle as part of the Go project.\n\nGoogle hereby grants to You a perpetual, worldwide, non-exclusive,\nno-charge, royalty-free, irrevocable (except as stated in this section)\npatent license to make, have made, use, offer to sell, sell, import,\ntransfer and otherwise run, modify and propagate the contents of this\nimplementation of Go, where such license applies only to those patent\nclaims, both currently owned or controlled by Google and acquired in\nthe future, licensable by Google that are necessarily infringed by this\nimplementation of Go.  This grant does not include claims that would be\ninfringed only as a consequence of further modification of this\nimplementation.  If you or your agent or exclusive licensee institute or\norder or agree to the institution of patent litigation against any\nentity (including a cross-claim or counterclaim in a lawsuit) alleging\nthat this implementation of Go or any code incorporated within this\nimplementation of Go constitutes direct or contributory patent\ninfringement, or inducement of patent infringement, then any patent\nrights granted to you under this License for this implementation of Go\nshall terminate as of the date such litigation is filed.\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/affinity_linux.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// CPU affinity functions\n\npackage unix\n\nimport (\n\t\"unsafe\"\n)\n\nconst cpuSetSize = _CPU_SETSIZE / _NCPUBITS\n\n// CPUSet represents a CPU affinity mask.\ntype CPUSet [cpuSetSize]cpuMask\n\nfunc schedAffinity(trap uintptr, pid int, set *CPUSet) error {\n\t_, _, e := RawSyscall(trap, uintptr(pid), uintptr(unsafe.Sizeof(*set)), uintptr(unsafe.Pointer(set)))\n\tif e != 0 {\n\t\treturn errnoErr(e)\n\t}\n\treturn nil\n}\n\n// SchedGetaffinity gets the CPU affinity mask of the thread specified by pid.\n// If pid is 0 the calling thread is used.\nfunc SchedGetaffinity(pid int, set *CPUSet) error {\n\treturn schedAffinity(SYS_SCHED_GETAFFINITY, pid, set)\n}\n\n// SchedSetaffinity sets the CPU affinity mask of the thread specified by pid.\n// If pid is 0 the calling thread is used.\nfunc SchedSetaffinity(pid int, set *CPUSet) error {\n\treturn schedAffinity(SYS_SCHED_SETAFFINITY, pid, set)\n}\n\n// Zero clears the set s, so that it contains no CPUs.\nfunc (s *CPUSet) Zero() {\n\tfor i := range s {\n\t\ts[i] = 0\n\t}\n}\n\nfunc cpuBitsIndex(cpu int) int {\n\treturn cpu / _NCPUBITS\n}\n\nfunc cpuBitsMask(cpu int) cpuMask {\n\treturn cpuMask(1 << (uint(cpu) % _NCPUBITS))\n}\n\n// Set adds cpu to the set s.\nfunc (s *CPUSet) Set(cpu int) {\n\ti := cpuBitsIndex(cpu)\n\tif i < len(s) {\n\t\ts[i] |= cpuBitsMask(cpu)\n\t}\n}\n\n// Clear removes cpu from the set s.\nfunc (s *CPUSet) Clear(cpu int) {\n\ti := cpuBitsIndex(cpu)\n\tif i < len(s) {\n\t\ts[i] &^= cpuBitsMask(cpu)\n\t}\n}\n\n// IsSet reports whether cpu is in the set s.\nfunc (s *CPUSet) IsSet(cpu int) bool {\n\ti := cpuBitsIndex(cpu)\n\tif i < len(s) {\n\t\treturn s[i]&cpuBitsMask(cpu) != 0\n\t}\n\treturn false\n}\n\n// Count returns the number of CPUs in the set s.\nfunc (s *CPUSet) Count() int {\n\tc := 0\n\tfor _, b := range s {\n\t\tc += onesCount64(uint64(b))\n\t}\n\treturn c\n}\n\n// onesCount64 is a copy of Go 1.9's math/bits.OnesCount64.\n// Once this package can require Go 1.9, we can delete this\n// and update the caller to use bits.OnesCount64.\nfunc onesCount64(x uint64) int {\n\tconst m0 = 0x5555555555555555 // 01010101 ...\n\tconst m1 = 0x3333333333333333 // 00110011 ...\n\tconst m2 = 0x0f0f0f0f0f0f0f0f // 00001111 ...\n\tconst m3 = 0x00ff00ff00ff00ff // etc.\n\tconst m4 = 0x0000ffff0000ffff\n\n\t// Implementation: Parallel summing of adjacent bits.\n\t// See \"Hacker's Delight\", Chap. 5: Counting Bits.\n\t// The following pattern shows the general approach:\n\t//\n\t//   x = x>>1&(m0&m) + x&(m0&m)\n\t//   x = x>>2&(m1&m) + x&(m1&m)\n\t//   x = x>>4&(m2&m) + x&(m2&m)\n\t//   x = x>>8&(m3&m) + x&(m3&m)\n\t//   x = x>>16&(m4&m) + x&(m4&m)\n\t//   x = x>>32&(m5&m) + x&(m5&m)\n\t//   return int(x)\n\t//\n\t// Masking (& operations) can be left away when there's no\n\t// danger that a field's sum will carry over into the next\n\t// field: Since the result cannot be > 64, 8 bits is enough\n\t// and we can ignore the masks for the shifts by 8 and up.\n\t// Per \"Hacker's Delight\", the first line can be simplified\n\t// more, but it saves at best one instruction, so we leave\n\t// it alone for clarity.\n\tconst m = 1<<64 - 1\n\tx = x>>1&(m0&m) + x&(m0&m)\n\tx = x>>2&(m1&m) + x&(m1&m)\n\tx = (x>>4 + x) & (m2 & m)\n\tx += x >> 8\n\tx += x >> 16\n\tx += x >> 32\n\treturn int(x) & (1<<7 - 1)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/aliases.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris\n// +build go1.9\n\npackage unix\n\nimport \"syscall\"\n\ntype Signal = syscall.Signal\ntype Errno = syscall.Errno\ntype SysProcAttr = syscall.SysProcAttr\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_aix_ppc64.s",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build !gccgo\n\n#include \"textflag.h\"\n\n//\n// System calls for ppc64, AIX are implemented in runtime/syscall_aix.go\n//\n\nTEXT ·syscall6(SB),NOSPLIT,$0-88\n\tJMP\tsyscall·syscall6(SB)\n\nTEXT ·rawSyscall6(SB),NOSPLIT,$0-88\n\tJMP\tsyscall·rawSyscall6(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_darwin_386.s",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build !gccgo\n\n#include \"textflag.h\"\n\n//\n// System call support for 386, Darwin\n//\n\n// Just jump to package syscall's implementation for all these functions.\n// The runtime may know about them.\n\nTEXT\t·Syscall(SB),NOSPLIT,$0-28\n\tJMP\tsyscall·Syscall(SB)\n\nTEXT\t·Syscall6(SB),NOSPLIT,$0-40\n\tJMP\tsyscall·Syscall6(SB)\n\nTEXT\t·Syscall9(SB),NOSPLIT,$0-52\n\tJMP\tsyscall·Syscall9(SB)\n\nTEXT ·RawSyscall(SB),NOSPLIT,$0-28\n\tJMP\tsyscall·RawSyscall(SB)\n\nTEXT\t·RawSyscall6(SB),NOSPLIT,$0-40\n\tJMP\tsyscall·RawSyscall6(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_darwin_amd64.s",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build !gccgo\n\n#include \"textflag.h\"\n\n//\n// System call support for AMD64, Darwin\n//\n\n// Just jump to package syscall's implementation for all these functions.\n// The runtime may know about them.\n\nTEXT\t·Syscall(SB),NOSPLIT,$0-56\n\tJMP\tsyscall·Syscall(SB)\n\nTEXT\t·Syscall6(SB),NOSPLIT,$0-80\n\tJMP\tsyscall·Syscall6(SB)\n\nTEXT\t·Syscall9(SB),NOSPLIT,$0-104\n\tJMP\tsyscall·Syscall9(SB)\n\nTEXT\t·RawSyscall(SB),NOSPLIT,$0-56\n\tJMP\tsyscall·RawSyscall(SB)\n\nTEXT\t·RawSyscall6(SB),NOSPLIT,$0-80\n\tJMP\tsyscall·RawSyscall6(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_darwin_arm.s",
    "content": "// Copyright 2015 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build !gccgo\n// +build arm,darwin\n\n#include \"textflag.h\"\n\n//\n// System call support for ARM, Darwin\n//\n\n// Just jump to package syscall's implementation for all these functions.\n// The runtime may know about them.\n\nTEXT\t·Syscall(SB),NOSPLIT,$0-28\n\tB\tsyscall·Syscall(SB)\n\nTEXT\t·Syscall6(SB),NOSPLIT,$0-40\n\tB\tsyscall·Syscall6(SB)\n\nTEXT\t·Syscall9(SB),NOSPLIT,$0-52\n\tB\tsyscall·Syscall9(SB)\n\nTEXT\t·RawSyscall(SB),NOSPLIT,$0-28\n\tB\tsyscall·RawSyscall(SB)\n\nTEXT\t·RawSyscall6(SB),NOSPLIT,$0-40\n\tB\tsyscall·RawSyscall6(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_darwin_arm64.s",
    "content": "// Copyright 2015 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build !gccgo\n// +build arm64,darwin\n\n#include \"textflag.h\"\n\n//\n// System call support for AMD64, Darwin\n//\n\n// Just jump to package syscall's implementation for all these functions.\n// The runtime may know about them.\n\nTEXT\t·Syscall(SB),NOSPLIT,$0-56\n\tB\tsyscall·Syscall(SB)\n\nTEXT\t·Syscall6(SB),NOSPLIT,$0-80\n\tB\tsyscall·Syscall6(SB)\n\nTEXT\t·Syscall9(SB),NOSPLIT,$0-104\n\tB\tsyscall·Syscall9(SB)\n\nTEXT\t·RawSyscall(SB),NOSPLIT,$0-56\n\tB\tsyscall·RawSyscall(SB)\n\nTEXT\t·RawSyscall6(SB),NOSPLIT,$0-80\n\tB\tsyscall·RawSyscall6(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_dragonfly_amd64.s",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build !gccgo\n\n#include \"textflag.h\"\n\n//\n// System call support for AMD64, DragonFly\n//\n\n// Just jump to package syscall's implementation for all these functions.\n// The runtime may know about them.\n\nTEXT\t·Syscall(SB),NOSPLIT,$0-56\n\tJMP\tsyscall·Syscall(SB)\n\nTEXT\t·Syscall6(SB),NOSPLIT,$0-80\n\tJMP\tsyscall·Syscall6(SB)\n\nTEXT\t·Syscall9(SB),NOSPLIT,$0-104\n\tJMP\tsyscall·Syscall9(SB)\n\nTEXT ·RawSyscall(SB),NOSPLIT,$0-56\n\tJMP\tsyscall·RawSyscall(SB)\n\nTEXT\t·RawSyscall6(SB),NOSPLIT,$0-80\n\tJMP\tsyscall·RawSyscall6(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_freebsd_386.s",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build !gccgo\n\n#include \"textflag.h\"\n\n//\n// System call support for 386, FreeBSD\n//\n\n// Just jump to package syscall's implementation for all these functions.\n// The runtime may know about them.\n\nTEXT\t·Syscall(SB),NOSPLIT,$0-28\n\tJMP\tsyscall·Syscall(SB)\n\nTEXT\t·Syscall6(SB),NOSPLIT,$0-40\n\tJMP\tsyscall·Syscall6(SB)\n\nTEXT\t·Syscall9(SB),NOSPLIT,$0-52\n\tJMP\tsyscall·Syscall9(SB)\n\nTEXT ·RawSyscall(SB),NOSPLIT,$0-28\n\tJMP\tsyscall·RawSyscall(SB)\n\nTEXT\t·RawSyscall6(SB),NOSPLIT,$0-40\n\tJMP\tsyscall·RawSyscall6(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_freebsd_amd64.s",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build !gccgo\n\n#include \"textflag.h\"\n\n//\n// System call support for AMD64, FreeBSD\n//\n\n// Just jump to package syscall's implementation for all these functions.\n// The runtime may know about them.\n\nTEXT\t·Syscall(SB),NOSPLIT,$0-56\n\tJMP\tsyscall·Syscall(SB)\n\nTEXT\t·Syscall6(SB),NOSPLIT,$0-80\n\tJMP\tsyscall·Syscall6(SB)\n\nTEXT\t·Syscall9(SB),NOSPLIT,$0-104\n\tJMP\tsyscall·Syscall9(SB)\n\nTEXT ·RawSyscall(SB),NOSPLIT,$0-56\n\tJMP\tsyscall·RawSyscall(SB)\n\nTEXT\t·RawSyscall6(SB),NOSPLIT,$0-80\n\tJMP\tsyscall·RawSyscall6(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_freebsd_arm.s",
    "content": "// Copyright 2012 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build !gccgo\n\n#include \"textflag.h\"\n\n//\n// System call support for ARM, FreeBSD\n//\n\n// Just jump to package syscall's implementation for all these functions.\n// The runtime may know about them.\n\nTEXT\t·Syscall(SB),NOSPLIT,$0-28\n\tB\tsyscall·Syscall(SB)\n\nTEXT\t·Syscall6(SB),NOSPLIT,$0-40\n\tB\tsyscall·Syscall6(SB)\n\nTEXT\t·Syscall9(SB),NOSPLIT,$0-52\n\tB\tsyscall·Syscall9(SB)\n\nTEXT\t·RawSyscall(SB),NOSPLIT,$0-28\n\tB\tsyscall·RawSyscall(SB)\n\nTEXT\t·RawSyscall6(SB),NOSPLIT,$0-40\n\tB\tsyscall·RawSyscall6(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_freebsd_arm64.s",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build !gccgo\n\n#include \"textflag.h\"\n\n//\n// System call support for ARM64, FreeBSD\n//\n\n// Just jump to package syscall's implementation for all these functions.\n// The runtime may know about them.\n\nTEXT\t·Syscall(SB),NOSPLIT,$0-56\n\tJMP\tsyscall·Syscall(SB)\n\nTEXT\t·Syscall6(SB),NOSPLIT,$0-80\n\tJMP\tsyscall·Syscall6(SB)\n\nTEXT\t·Syscall9(SB),NOSPLIT,$0-104\n\tJMP\tsyscall·Syscall9(SB)\n\nTEXT ·RawSyscall(SB),NOSPLIT,$0-56\n\tJMP\tsyscall·RawSyscall(SB)\n\nTEXT\t·RawSyscall6(SB),NOSPLIT,$0-80\n\tJMP\tsyscall·RawSyscall6(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_linux_386.s",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build !gccgo\n\n#include \"textflag.h\"\n\n//\n// System calls for 386, Linux\n//\n\n// See ../runtime/sys_linux_386.s for the reason why we always use int 0x80\n// instead of the glibc-specific \"CALL 0x10(GS)\".\n#define INVOKE_SYSCALL\tINT\t$0x80\n\n// Just jump to package syscall's implementation for all these functions.\n// The runtime may know about them.\n\nTEXT ·Syscall(SB),NOSPLIT,$0-28\n\tJMP\tsyscall·Syscall(SB)\n\nTEXT ·Syscall6(SB),NOSPLIT,$0-40\n\tJMP\tsyscall·Syscall6(SB)\n\nTEXT ·SyscallNoError(SB),NOSPLIT,$0-24\n\tCALL\truntime·entersyscall(SB)\n\tMOVL\ttrap+0(FP), AX  // syscall entry\n\tMOVL\ta1+4(FP), BX\n\tMOVL\ta2+8(FP), CX\n\tMOVL\ta3+12(FP), DX\n\tMOVL\t$0, SI\n\tMOVL\t$0, DI\n\tINVOKE_SYSCALL\n\tMOVL\tAX, r1+16(FP)\n\tMOVL\tDX, r2+20(FP)\n\tCALL\truntime·exitsyscall(SB)\n\tRET\n\nTEXT ·RawSyscall(SB),NOSPLIT,$0-28\n\tJMP\tsyscall·RawSyscall(SB)\n\nTEXT ·RawSyscall6(SB),NOSPLIT,$0-40\n\tJMP\tsyscall·RawSyscall6(SB)\n\nTEXT ·RawSyscallNoError(SB),NOSPLIT,$0-24\n\tMOVL\ttrap+0(FP), AX  // syscall entry\n\tMOVL\ta1+4(FP), BX\n\tMOVL\ta2+8(FP), CX\n\tMOVL\ta3+12(FP), DX\n\tMOVL\t$0, SI\n\tMOVL\t$0, DI\n\tINVOKE_SYSCALL\n\tMOVL\tAX, r1+16(FP)\n\tMOVL\tDX, r2+20(FP)\n\tRET\n\nTEXT ·socketcall(SB),NOSPLIT,$0-36\n\tJMP\tsyscall·socketcall(SB)\n\nTEXT ·rawsocketcall(SB),NOSPLIT,$0-36\n\tJMP\tsyscall·rawsocketcall(SB)\n\nTEXT ·seek(SB),NOSPLIT,$0-28\n\tJMP\tsyscall·seek(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_linux_amd64.s",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build !gccgo\n\n#include \"textflag.h\"\n\n//\n// System calls for AMD64, Linux\n//\n\n// Just jump to package syscall's implementation for all these functions.\n// The runtime may know about them.\n\nTEXT ·Syscall(SB),NOSPLIT,$0-56\n\tJMP\tsyscall·Syscall(SB)\n\nTEXT ·Syscall6(SB),NOSPLIT,$0-80\n\tJMP\tsyscall·Syscall6(SB)\n\nTEXT ·SyscallNoError(SB),NOSPLIT,$0-48\n\tCALL\truntime·entersyscall(SB)\n\tMOVQ\ta1+8(FP), DI\n\tMOVQ\ta2+16(FP), SI\n\tMOVQ\ta3+24(FP), DX\n\tMOVQ\t$0, R10\n\tMOVQ\t$0, R8\n\tMOVQ\t$0, R9\n\tMOVQ\ttrap+0(FP), AX\t// syscall entry\n\tSYSCALL\n\tMOVQ\tAX, r1+32(FP)\n\tMOVQ\tDX, r2+40(FP)\n\tCALL\truntime·exitsyscall(SB)\n\tRET\n\nTEXT ·RawSyscall(SB),NOSPLIT,$0-56\n\tJMP\tsyscall·RawSyscall(SB)\n\nTEXT ·RawSyscall6(SB),NOSPLIT,$0-80\n\tJMP\tsyscall·RawSyscall6(SB)\n\nTEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48\n\tMOVQ\ta1+8(FP), DI\n\tMOVQ\ta2+16(FP), SI\n\tMOVQ\ta3+24(FP), DX\n\tMOVQ\t$0, R10\n\tMOVQ\t$0, R8\n\tMOVQ\t$0, R9\n\tMOVQ\ttrap+0(FP), AX\t// syscall entry\n\tSYSCALL\n\tMOVQ\tAX, r1+32(FP)\n\tMOVQ\tDX, r2+40(FP)\n\tRET\n\nTEXT ·gettimeofday(SB),NOSPLIT,$0-16\n\tJMP\tsyscall·gettimeofday(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_linux_arm.s",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build !gccgo\n\n#include \"textflag.h\"\n\n//\n// System calls for arm, Linux\n//\n\n// Just jump to package syscall's implementation for all these functions.\n// The runtime may know about them.\n\nTEXT ·Syscall(SB),NOSPLIT,$0-28\n\tB\tsyscall·Syscall(SB)\n\nTEXT ·Syscall6(SB),NOSPLIT,$0-40\n\tB\tsyscall·Syscall6(SB)\n\nTEXT ·SyscallNoError(SB),NOSPLIT,$0-24\n\tBL\truntime·entersyscall(SB)\n\tMOVW\ttrap+0(FP), R7\n\tMOVW\ta1+4(FP), R0\n\tMOVW\ta2+8(FP), R1\n\tMOVW\ta3+12(FP), R2\n\tMOVW\t$0, R3\n\tMOVW\t$0, R4\n\tMOVW\t$0, R5\n\tSWI\t$0\n\tMOVW\tR0, r1+16(FP)\n\tMOVW\t$0, R0\n\tMOVW\tR0, r2+20(FP)\n\tBL\truntime·exitsyscall(SB)\n\tRET\n\nTEXT ·RawSyscall(SB),NOSPLIT,$0-28\n\tB\tsyscall·RawSyscall(SB)\n\nTEXT ·RawSyscall6(SB),NOSPLIT,$0-40\n\tB\tsyscall·RawSyscall6(SB)\n\nTEXT ·RawSyscallNoError(SB),NOSPLIT,$0-24\n\tMOVW\ttrap+0(FP), R7\t// syscall entry\n\tMOVW\ta1+4(FP), R0\n\tMOVW\ta2+8(FP), R1\n\tMOVW\ta3+12(FP), R2\n\tSWI\t$0\n\tMOVW\tR0, r1+16(FP)\n\tMOVW\t$0, R0\n\tMOVW\tR0, r2+20(FP)\n\tRET\n\nTEXT ·seek(SB),NOSPLIT,$0-28\n\tB\tsyscall·seek(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_linux_arm64.s",
    "content": "// Copyright 2015 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build linux\n// +build arm64\n// +build !gccgo\n\n#include \"textflag.h\"\n\n// Just jump to package syscall's implementation for all these functions.\n// The runtime may know about them.\n\nTEXT ·Syscall(SB),NOSPLIT,$0-56\n\tB\tsyscall·Syscall(SB)\n\nTEXT ·Syscall6(SB),NOSPLIT,$0-80\n\tB\tsyscall·Syscall6(SB)\n\nTEXT ·SyscallNoError(SB),NOSPLIT,$0-48\n\tBL\truntime·entersyscall(SB)\n\tMOVD\ta1+8(FP), R0\n\tMOVD\ta2+16(FP), R1\n\tMOVD\ta3+24(FP), R2\n\tMOVD\t$0, R3\n\tMOVD\t$0, R4\n\tMOVD\t$0, R5\n\tMOVD\ttrap+0(FP), R8\t// syscall entry\n\tSVC\n\tMOVD\tR0, r1+32(FP)\t// r1\n\tMOVD\tR1, r2+40(FP)\t// r2\n\tBL\truntime·exitsyscall(SB)\n\tRET\n\nTEXT ·RawSyscall(SB),NOSPLIT,$0-56\n\tB\tsyscall·RawSyscall(SB)\n\nTEXT ·RawSyscall6(SB),NOSPLIT,$0-80\n\tB\tsyscall·RawSyscall6(SB)\n\nTEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48\n\tMOVD\ta1+8(FP), R0\n\tMOVD\ta2+16(FP), R1\n\tMOVD\ta3+24(FP), R2\n\tMOVD\t$0, R3\n\tMOVD\t$0, R4\n\tMOVD\t$0, R5\n\tMOVD\ttrap+0(FP), R8\t// syscall entry\n\tSVC\n\tMOVD\tR0, r1+32(FP)\n\tMOVD\tR1, r2+40(FP)\n\tRET\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_linux_mips64x.s",
    "content": "// Copyright 2015 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build linux\n// +build mips64 mips64le\n// +build !gccgo\n\n#include \"textflag.h\"\n\n//\n// System calls for mips64, Linux\n//\n\n// Just jump to package syscall's implementation for all these functions.\n// The runtime may know about them.\n\nTEXT ·Syscall(SB),NOSPLIT,$0-56\n\tJMP\tsyscall·Syscall(SB)\n\nTEXT ·Syscall6(SB),NOSPLIT,$0-80\n\tJMP\tsyscall·Syscall6(SB)\n\nTEXT ·SyscallNoError(SB),NOSPLIT,$0-48\n\tJAL\truntime·entersyscall(SB)\n\tMOVV\ta1+8(FP), R4\n\tMOVV\ta2+16(FP), R5\n\tMOVV\ta3+24(FP), R6\n\tMOVV\tR0, R7\n\tMOVV\tR0, R8\n\tMOVV\tR0, R9\n\tMOVV\ttrap+0(FP), R2\t// syscall entry\n\tSYSCALL\n\tMOVV\tR2, r1+32(FP)\n\tMOVV\tR3, r2+40(FP)\n\tJAL\truntime·exitsyscall(SB)\n\tRET\n\nTEXT ·RawSyscall(SB),NOSPLIT,$0-56\n\tJMP\tsyscall·RawSyscall(SB)\n\nTEXT ·RawSyscall6(SB),NOSPLIT,$0-80\n\tJMP\tsyscall·RawSyscall6(SB)\n\nTEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48\n\tMOVV\ta1+8(FP), R4\n\tMOVV\ta2+16(FP), R5\n\tMOVV\ta3+24(FP), R6\n\tMOVV\tR0, R7\n\tMOVV\tR0, R8\n\tMOVV\tR0, R9\n\tMOVV\ttrap+0(FP), R2\t// syscall entry\n\tSYSCALL\n\tMOVV\tR2, r1+32(FP)\n\tMOVV\tR3, r2+40(FP)\n\tRET\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_linux_mipsx.s",
    "content": "// Copyright 2016 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build linux\n// +build mips mipsle\n// +build !gccgo\n\n#include \"textflag.h\"\n\n//\n// System calls for mips, Linux\n//\n\n// Just jump to package syscall's implementation for all these functions.\n// The runtime may know about them.\n\nTEXT ·Syscall(SB),NOSPLIT,$0-28\n\tJMP syscall·Syscall(SB)\n\nTEXT ·Syscall6(SB),NOSPLIT,$0-40\n\tJMP syscall·Syscall6(SB)\n\nTEXT ·Syscall9(SB),NOSPLIT,$0-52\n\tJMP syscall·Syscall9(SB)\n\nTEXT ·SyscallNoError(SB),NOSPLIT,$0-24\n\tJAL\truntime·entersyscall(SB)\n\tMOVW\ta1+4(FP), R4\n\tMOVW\ta2+8(FP), R5\n\tMOVW\ta3+12(FP), R6\n\tMOVW\tR0, R7\n\tMOVW\ttrap+0(FP), R2\t// syscall entry\n\tSYSCALL\n\tMOVW\tR2, r1+16(FP)\t// r1\n\tMOVW\tR3, r2+20(FP)\t// r2\n\tJAL\truntime·exitsyscall(SB)\n\tRET\n\nTEXT ·RawSyscall(SB),NOSPLIT,$0-28\n\tJMP syscall·RawSyscall(SB)\n\nTEXT ·RawSyscall6(SB),NOSPLIT,$0-40\n\tJMP syscall·RawSyscall6(SB)\n\nTEXT ·RawSyscallNoError(SB),NOSPLIT,$0-24\n\tMOVW\ta1+4(FP), R4\n\tMOVW\ta2+8(FP), R5\n\tMOVW\ta3+12(FP), R6\n\tMOVW\ttrap+0(FP), R2\t// syscall entry\n\tSYSCALL\n\tMOVW\tR2, r1+16(FP)\n\tMOVW\tR3, r2+20(FP)\n\tRET\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s",
    "content": "// Copyright 2014 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build linux\n// +build ppc64 ppc64le\n// +build !gccgo\n\n#include \"textflag.h\"\n\n//\n// System calls for ppc64, Linux\n//\n\n// Just jump to package syscall's implementation for all these functions.\n// The runtime may know about them.\n\nTEXT ·SyscallNoError(SB),NOSPLIT,$0-48\n\tBL\truntime·entersyscall(SB)\n\tMOVD\ta1+8(FP), R3\n\tMOVD\ta2+16(FP), R4\n\tMOVD\ta3+24(FP), R5\n\tMOVD\tR0, R6\n\tMOVD\tR0, R7\n\tMOVD\tR0, R8\n\tMOVD\ttrap+0(FP), R9\t// syscall entry\n\tSYSCALL R9\n\tMOVD\tR3, r1+32(FP)\n\tMOVD\tR4, r2+40(FP)\n\tBL\truntime·exitsyscall(SB)\n\tRET\n\nTEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48\n\tMOVD\ta1+8(FP), R3\n\tMOVD\ta2+16(FP), R4\n\tMOVD\ta3+24(FP), R5\n\tMOVD\tR0, R6\n\tMOVD\tR0, R7\n\tMOVD\tR0, R8\n\tMOVD\ttrap+0(FP), R9\t// syscall entry\n\tSYSCALL R9\n\tMOVD\tR3, r1+32(FP)\n\tMOVD\tR4, r2+40(FP)\n\tRET\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_linux_riscv64.s",
    "content": "// Copyright 2019 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build riscv64,!gccgo\n\n#include \"textflag.h\"\n\n//\n// System calls for linux/riscv64.\n//\n// Where available, just jump to package syscall's implementation of\n// these functions.\n\nTEXT ·Syscall(SB),NOSPLIT,$0-56\n\tJMP\tsyscall·Syscall(SB)\n\nTEXT ·Syscall6(SB),NOSPLIT,$0-80\n\tJMP\tsyscall·Syscall6(SB)\n\nTEXT ·SyscallNoError(SB),NOSPLIT,$0-48\n\tCALL\truntime·entersyscall(SB)\n\tMOV\ta1+8(FP), A0\n\tMOV\ta2+16(FP), A1\n\tMOV\ta3+24(FP), A2\n\tMOV\t$0, A3\n\tMOV\t$0, A4\n\tMOV\t$0, A5\n\tMOV\t$0, A6\n\tMOV\ttrap+0(FP), A7\t// syscall entry\n\tECALL\n\tMOV\tA0, r1+32(FP)\t// r1\n\tMOV\tA1, r2+40(FP)\t// r2\n\tCALL\truntime·exitsyscall(SB)\n\tRET\n\nTEXT ·RawSyscall(SB),NOSPLIT,$0-56\n\tJMP\tsyscall·RawSyscall(SB)\n\nTEXT ·RawSyscall6(SB),NOSPLIT,$0-80\n\tJMP\tsyscall·RawSyscall6(SB)\n\nTEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48\n\tMOV\ta1+8(FP), A0\n\tMOV\ta2+16(FP), A1\n\tMOV\ta3+24(FP), A2\n\tMOV\tZERO, A3\n\tMOV\tZERO, A4\n\tMOV\tZERO, A5\n\tMOV\ttrap+0(FP), A7\t// syscall entry\n\tECALL\n\tMOV\tA0, r1+32(FP)\n\tMOV\tA1, r2+40(FP)\n\tRET\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_linux_s390x.s",
    "content": "// Copyright 2016 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build s390x\n// +build linux\n// +build !gccgo\n\n#include \"textflag.h\"\n\n//\n// System calls for s390x, Linux\n//\n\n// Just jump to package syscall's implementation for all these functions.\n// The runtime may know about them.\n\nTEXT ·Syscall(SB),NOSPLIT,$0-56\n\tBR\tsyscall·Syscall(SB)\n\nTEXT ·Syscall6(SB),NOSPLIT,$0-80\n\tBR\tsyscall·Syscall6(SB)\n\nTEXT ·SyscallNoError(SB),NOSPLIT,$0-48\n\tBL\truntime·entersyscall(SB)\n\tMOVD\ta1+8(FP), R2\n\tMOVD\ta2+16(FP), R3\n\tMOVD\ta3+24(FP), R4\n\tMOVD\t$0, R5\n\tMOVD\t$0, R6\n\tMOVD\t$0, R7\n\tMOVD\ttrap+0(FP), R1\t// syscall entry\n\tSYSCALL\n\tMOVD\tR2, r1+32(FP)\n\tMOVD\tR3, r2+40(FP)\n\tBL\truntime·exitsyscall(SB)\n\tRET\n\nTEXT ·RawSyscall(SB),NOSPLIT,$0-56\n\tBR\tsyscall·RawSyscall(SB)\n\nTEXT ·RawSyscall6(SB),NOSPLIT,$0-80\n\tBR\tsyscall·RawSyscall6(SB)\n\nTEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48\n\tMOVD\ta1+8(FP), R2\n\tMOVD\ta2+16(FP), R3\n\tMOVD\ta3+24(FP), R4\n\tMOVD\t$0, R5\n\tMOVD\t$0, R6\n\tMOVD\t$0, R7\n\tMOVD\ttrap+0(FP), R1\t// syscall entry\n\tSYSCALL\n\tMOVD\tR2, r1+32(FP)\n\tMOVD\tR3, r2+40(FP)\n\tRET\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_netbsd_386.s",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build !gccgo\n\n#include \"textflag.h\"\n\n//\n// System call support for 386, NetBSD\n//\n\n// Just jump to package syscall's implementation for all these functions.\n// The runtime may know about them.\n\nTEXT\t·Syscall(SB),NOSPLIT,$0-28\n\tJMP\tsyscall·Syscall(SB)\n\nTEXT\t·Syscall6(SB),NOSPLIT,$0-40\n\tJMP\tsyscall·Syscall6(SB)\n\nTEXT\t·Syscall9(SB),NOSPLIT,$0-52\n\tJMP\tsyscall·Syscall9(SB)\n\nTEXT ·RawSyscall(SB),NOSPLIT,$0-28\n\tJMP\tsyscall·RawSyscall(SB)\n\nTEXT\t·RawSyscall6(SB),NOSPLIT,$0-40\n\tJMP\tsyscall·RawSyscall6(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_netbsd_amd64.s",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build !gccgo\n\n#include \"textflag.h\"\n\n//\n// System call support for AMD64, NetBSD\n//\n\n// Just jump to package syscall's implementation for all these functions.\n// The runtime may know about them.\n\nTEXT\t·Syscall(SB),NOSPLIT,$0-56\n\tJMP\tsyscall·Syscall(SB)\n\nTEXT\t·Syscall6(SB),NOSPLIT,$0-80\n\tJMP\tsyscall·Syscall6(SB)\n\nTEXT\t·Syscall9(SB),NOSPLIT,$0-104\n\tJMP\tsyscall·Syscall9(SB)\n\nTEXT\t·RawSyscall(SB),NOSPLIT,$0-56\n\tJMP\tsyscall·RawSyscall(SB)\n\nTEXT\t·RawSyscall6(SB),NOSPLIT,$0-80\n\tJMP\tsyscall·RawSyscall6(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_netbsd_arm.s",
    "content": "// Copyright 2013 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build !gccgo\n\n#include \"textflag.h\"\n\n//\n// System call support for ARM, NetBSD\n//\n\n// Just jump to package syscall's implementation for all these functions.\n// The runtime may know about them.\n\nTEXT\t·Syscall(SB),NOSPLIT,$0-28\n\tB\tsyscall·Syscall(SB)\n\nTEXT\t·Syscall6(SB),NOSPLIT,$0-40\n\tB\tsyscall·Syscall6(SB)\n\nTEXT\t·Syscall9(SB),NOSPLIT,$0-52\n\tB\tsyscall·Syscall9(SB)\n\nTEXT\t·RawSyscall(SB),NOSPLIT,$0-28\n\tB\tsyscall·RawSyscall(SB)\n\nTEXT\t·RawSyscall6(SB),NOSPLIT,$0-40\n\tB\tsyscall·RawSyscall6(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_netbsd_arm64.s",
    "content": "// Copyright 2019 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build !gccgo\n\n#include \"textflag.h\"\n\n//\n// System call support for ARM64, NetBSD\n//\n\n// Just jump to package syscall's implementation for all these functions.\n// The runtime may know about them.\n\nTEXT\t·Syscall(SB),NOSPLIT,$0-56\n\tB\tsyscall·Syscall(SB)\n\nTEXT\t·Syscall6(SB),NOSPLIT,$0-80\n\tB\tsyscall·Syscall6(SB)\n\nTEXT\t·Syscall9(SB),NOSPLIT,$0-104\n\tB\tsyscall·Syscall9(SB)\n\nTEXT\t·RawSyscall(SB),NOSPLIT,$0-56\n\tB\tsyscall·RawSyscall(SB)\n\nTEXT\t·RawSyscall6(SB),NOSPLIT,$0-80\n\tB\tsyscall·RawSyscall6(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_openbsd_386.s",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build !gccgo\n\n#include \"textflag.h\"\n\n//\n// System call support for 386, OpenBSD\n//\n\n// Just jump to package syscall's implementation for all these functions.\n// The runtime may know about them.\n\nTEXT\t·Syscall(SB),NOSPLIT,$0-28\n\tJMP\tsyscall·Syscall(SB)\n\nTEXT\t·Syscall6(SB),NOSPLIT,$0-40\n\tJMP\tsyscall·Syscall6(SB)\n\nTEXT\t·Syscall9(SB),NOSPLIT,$0-52\n\tJMP\tsyscall·Syscall9(SB)\n\nTEXT ·RawSyscall(SB),NOSPLIT,$0-28\n\tJMP\tsyscall·RawSyscall(SB)\n\nTEXT\t·RawSyscall6(SB),NOSPLIT,$0-40\n\tJMP\tsyscall·RawSyscall6(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_openbsd_amd64.s",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build !gccgo\n\n#include \"textflag.h\"\n\n//\n// System call support for AMD64, OpenBSD\n//\n\n// Just jump to package syscall's implementation for all these functions.\n// The runtime may know about them.\n\nTEXT\t·Syscall(SB),NOSPLIT,$0-56\n\tJMP\tsyscall·Syscall(SB)\n\nTEXT\t·Syscall6(SB),NOSPLIT,$0-80\n\tJMP\tsyscall·Syscall6(SB)\n\nTEXT\t·Syscall9(SB),NOSPLIT,$0-104\n\tJMP\tsyscall·Syscall9(SB)\n\nTEXT\t·RawSyscall(SB),NOSPLIT,$0-56\n\tJMP\tsyscall·RawSyscall(SB)\n\nTEXT\t·RawSyscall6(SB),NOSPLIT,$0-80\n\tJMP\tsyscall·RawSyscall6(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_openbsd_arm.s",
    "content": "// Copyright 2017 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build !gccgo\n\n#include \"textflag.h\"\n\n//\n// System call support for ARM, OpenBSD\n//\n\n// Just jump to package syscall's implementation for all these functions.\n// The runtime may know about them.\n\nTEXT\t·Syscall(SB),NOSPLIT,$0-28\n\tB\tsyscall·Syscall(SB)\n\nTEXT\t·Syscall6(SB),NOSPLIT,$0-40\n\tB\tsyscall·Syscall6(SB)\n\nTEXT\t·Syscall9(SB),NOSPLIT,$0-52\n\tB\tsyscall·Syscall9(SB)\n\nTEXT\t·RawSyscall(SB),NOSPLIT,$0-28\n\tB\tsyscall·RawSyscall(SB)\n\nTEXT\t·RawSyscall6(SB),NOSPLIT,$0-40\n\tB\tsyscall·RawSyscall6(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_openbsd_arm64.s",
    "content": "// Copyright 2019 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build !gccgo\n\n#include \"textflag.h\"\n\n//\n// System call support for arm64, OpenBSD\n//\n\n// Just jump to package syscall's implementation for all these functions.\n// The runtime may know about them.\n\nTEXT\t·Syscall(SB),NOSPLIT,$0-56\n\tJMP\tsyscall·Syscall(SB)\n\nTEXT\t·Syscall6(SB),NOSPLIT,$0-80\n\tJMP\tsyscall·Syscall6(SB)\n\nTEXT\t·Syscall9(SB),NOSPLIT,$0-104\n\tJMP\tsyscall·Syscall9(SB)\n\nTEXT\t·RawSyscall(SB),NOSPLIT,$0-56\n\tJMP\tsyscall·RawSyscall(SB)\n\nTEXT\t·RawSyscall6(SB),NOSPLIT,$0-80\n\tJMP\tsyscall·RawSyscall6(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_solaris_amd64.s",
    "content": "// Copyright 2014 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build !gccgo\n\n#include \"textflag.h\"\n\n//\n// System calls for amd64, Solaris are implemented in runtime/syscall_solaris.go\n//\n\nTEXT ·sysvicall6(SB),NOSPLIT,$0-88\n\tJMP\tsyscall·sysvicall6(SB)\n\nTEXT ·rawSysvicall6(SB),NOSPLIT,$0-88\n\tJMP\tsyscall·rawSysvicall6(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/bluetooth_linux.go",
    "content": "// Copyright 2016 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Bluetooth sockets and messages\n\npackage unix\n\n// Bluetooth Protocols\nconst (\n\tBTPROTO_L2CAP  = 0\n\tBTPROTO_HCI    = 1\n\tBTPROTO_SCO    = 2\n\tBTPROTO_RFCOMM = 3\n\tBTPROTO_BNEP   = 4\n\tBTPROTO_CMTP   = 5\n\tBTPROTO_HIDP   = 6\n\tBTPROTO_AVDTP  = 7\n)\n\nconst (\n\tHCI_CHANNEL_RAW     = 0\n\tHCI_CHANNEL_USER    = 1\n\tHCI_CHANNEL_MONITOR = 2\n\tHCI_CHANNEL_CONTROL = 3\n)\n\n// Socketoption Level\nconst (\n\tSOL_BLUETOOTH = 0x112\n\tSOL_HCI       = 0x0\n\tSOL_L2CAP     = 0x6\n\tSOL_RFCOMM    = 0x12\n\tSOL_SCO       = 0x11\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/cap_freebsd.go",
    "content": "// Copyright 2017 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build freebsd\n\npackage unix\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n)\n\n// Go implementation of C mostly found in /usr/src/sys/kern/subr_capability.c\n\nconst (\n\t// This is the version of CapRights this package understands. See C implementation for parallels.\n\tcapRightsGoVersion = CAP_RIGHTS_VERSION_00\n\tcapArSizeMin       = CAP_RIGHTS_VERSION_00 + 2\n\tcapArSizeMax       = capRightsGoVersion + 2\n)\n\nvar (\n\tbit2idx = []int{\n\t\t-1, 0, 1, -1, 2, -1, -1, -1, 3, -1, -1, -1, -1, -1, -1, -1,\n\t\t4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n\t}\n)\n\nfunc capidxbit(right uint64) int {\n\treturn int((right >> 57) & 0x1f)\n}\n\nfunc rightToIndex(right uint64) (int, error) {\n\tidx := capidxbit(right)\n\tif idx < 0 || idx >= len(bit2idx) {\n\t\treturn -2, fmt.Errorf(\"index for right 0x%x out of range\", right)\n\t}\n\treturn bit2idx[idx], nil\n}\n\nfunc caprver(right uint64) int {\n\treturn int(right >> 62)\n}\n\nfunc capver(rights *CapRights) int {\n\treturn caprver(rights.Rights[0])\n}\n\nfunc caparsize(rights *CapRights) int {\n\treturn capver(rights) + 2\n}\n\n// CapRightsSet sets the permissions in setrights in rights.\nfunc CapRightsSet(rights *CapRights, setrights []uint64) error {\n\t// This is essentially a copy of cap_rights_vset()\n\tif capver(rights) != CAP_RIGHTS_VERSION_00 {\n\t\treturn fmt.Errorf(\"bad rights version %d\", capver(rights))\n\t}\n\n\tn := caparsize(rights)\n\tif n < capArSizeMin || n > capArSizeMax {\n\t\treturn errors.New(\"bad rights size\")\n\t}\n\n\tfor _, right := range setrights {\n\t\tif caprver(right) != CAP_RIGHTS_VERSION_00 {\n\t\t\treturn errors.New(\"bad right version\")\n\t\t}\n\t\ti, err := rightToIndex(right)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif i >= n {\n\t\t\treturn errors.New(\"index overflow\")\n\t\t}\n\t\tif capidxbit(rights.Rights[i]) != capidxbit(right) {\n\t\t\treturn errors.New(\"index mismatch\")\n\t\t}\n\t\trights.Rights[i] |= right\n\t\tif capidxbit(rights.Rights[i]) != capidxbit(right) {\n\t\t\treturn errors.New(\"index mismatch (after assign)\")\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// CapRightsClear clears the permissions in clearrights from rights.\nfunc CapRightsClear(rights *CapRights, clearrights []uint64) error {\n\t// This is essentially a copy of cap_rights_vclear()\n\tif capver(rights) != CAP_RIGHTS_VERSION_00 {\n\t\treturn fmt.Errorf(\"bad rights version %d\", capver(rights))\n\t}\n\n\tn := caparsize(rights)\n\tif n < capArSizeMin || n > capArSizeMax {\n\t\treturn errors.New(\"bad rights size\")\n\t}\n\n\tfor _, right := range clearrights {\n\t\tif caprver(right) != CAP_RIGHTS_VERSION_00 {\n\t\t\treturn errors.New(\"bad right version\")\n\t\t}\n\t\ti, err := rightToIndex(right)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif i >= n {\n\t\t\treturn errors.New(\"index overflow\")\n\t\t}\n\t\tif capidxbit(rights.Rights[i]) != capidxbit(right) {\n\t\t\treturn errors.New(\"index mismatch\")\n\t\t}\n\t\trights.Rights[i] &= ^(right & 0x01FFFFFFFFFFFFFF)\n\t\tif capidxbit(rights.Rights[i]) != capidxbit(right) {\n\t\t\treturn errors.New(\"index mismatch (after assign)\")\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// CapRightsIsSet checks whether all the permissions in setrights are present in rights.\nfunc CapRightsIsSet(rights *CapRights, setrights []uint64) (bool, error) {\n\t// This is essentially a copy of cap_rights_is_vset()\n\tif capver(rights) != CAP_RIGHTS_VERSION_00 {\n\t\treturn false, fmt.Errorf(\"bad rights version %d\", capver(rights))\n\t}\n\n\tn := caparsize(rights)\n\tif n < capArSizeMin || n > capArSizeMax {\n\t\treturn false, errors.New(\"bad rights size\")\n\t}\n\n\tfor _, right := range setrights {\n\t\tif caprver(right) != CAP_RIGHTS_VERSION_00 {\n\t\t\treturn false, errors.New(\"bad right version\")\n\t\t}\n\t\ti, err := rightToIndex(right)\n\t\tif err != nil {\n\t\t\treturn false, err\n\t\t}\n\t\tif i >= n {\n\t\t\treturn false, errors.New(\"index overflow\")\n\t\t}\n\t\tif capidxbit(rights.Rights[i]) != capidxbit(right) {\n\t\t\treturn false, errors.New(\"index mismatch\")\n\t\t}\n\t\tif (rights.Rights[i] & right) != right {\n\t\t\treturn false, nil\n\t\t}\n\t}\n\n\treturn true, nil\n}\n\nfunc capright(idx uint64, bit uint64) uint64 {\n\treturn ((1 << (57 + idx)) | bit)\n}\n\n// CapRightsInit returns a pointer to an initialised CapRights structure filled with rights.\n// See man cap_rights_init(3) and rights(4).\nfunc CapRightsInit(rights []uint64) (*CapRights, error) {\n\tvar r CapRights\n\tr.Rights[0] = (capRightsGoVersion << 62) | capright(0, 0)\n\tr.Rights[1] = capright(1, 0)\n\n\terr := CapRightsSet(&r, rights)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &r, nil\n}\n\n// CapRightsLimit reduces the operations permitted on fd to at most those contained in rights.\n// The capability rights on fd can never be increased by CapRightsLimit.\n// See man cap_rights_limit(2) and rights(4).\nfunc CapRightsLimit(fd uintptr, rights *CapRights) error {\n\treturn capRightsLimit(int(fd), rights)\n}\n\n// CapRightsGet returns a CapRights structure containing the operations permitted on fd.\n// See man cap_rights_get(3) and rights(4).\nfunc CapRightsGet(fd uintptr) (*CapRights, error) {\n\tr, err := CapRightsInit(nil)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\terr = capRightsGet(capRightsGoVersion, int(fd), r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn r, nil\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/constants.go",
    "content": "// Copyright 2015 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris\n\npackage unix\n\nconst (\n\tR_OK = 0x4\n\tW_OK = 0x2\n\tX_OK = 0x1\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/dev_aix_ppc.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build aix\n// +build ppc\n\n// Functions to access/create device major and minor numbers matching the\n// encoding used by AIX.\n\npackage unix\n\n// Major returns the major component of a Linux device number.\nfunc Major(dev uint64) uint32 {\n\treturn uint32((dev >> 16) & 0xffff)\n}\n\n// Minor returns the minor component of a Linux device number.\nfunc Minor(dev uint64) uint32 {\n\treturn uint32(dev & 0xffff)\n}\n\n// Mkdev returns a Linux device number generated from the given major and minor\n// components.\nfunc Mkdev(major, minor uint32) uint64 {\n\treturn uint64(((major) << 16) | (minor))\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/dev_aix_ppc64.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build aix\n// +build ppc64\n\n// Functions to access/create device major and minor numbers matching the\n// encoding used AIX.\n\npackage unix\n\n// Major returns the major component of a Linux device number.\nfunc Major(dev uint64) uint32 {\n\treturn uint32((dev & 0x3fffffff00000000) >> 32)\n}\n\n// Minor returns the minor component of a Linux device number.\nfunc Minor(dev uint64) uint32 {\n\treturn uint32((dev & 0x00000000ffffffff) >> 0)\n}\n\n// Mkdev returns a Linux device number generated from the given major and minor\n// components.\nfunc Mkdev(major, minor uint32) uint64 {\n\tvar DEVNO64 uint64\n\tDEVNO64 = 0x8000000000000000\n\treturn ((uint64(major) << 32) | (uint64(minor) & 0x00000000FFFFFFFF) | DEVNO64)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/dev_darwin.go",
    "content": "// Copyright 2017 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Functions to access/create device major and minor numbers matching the\n// encoding used in Darwin's sys/types.h header.\n\npackage unix\n\n// Major returns the major component of a Darwin device number.\nfunc Major(dev uint64) uint32 {\n\treturn uint32((dev >> 24) & 0xff)\n}\n\n// Minor returns the minor component of a Darwin device number.\nfunc Minor(dev uint64) uint32 {\n\treturn uint32(dev & 0xffffff)\n}\n\n// Mkdev returns a Darwin device number generated from the given major and minor\n// components.\nfunc Mkdev(major, minor uint32) uint64 {\n\treturn (uint64(major) << 24) | uint64(minor)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/dev_dragonfly.go",
    "content": "// Copyright 2017 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Functions to access/create device major and minor numbers matching the\n// encoding used in Dragonfly's sys/types.h header.\n//\n// The information below is extracted and adapted from sys/types.h:\n//\n// Minor gives a cookie instead of an index since in order to avoid changing the\n// meanings of bits 0-15 or wasting time and space shifting bits 16-31 for\n// devices that don't use them.\n\npackage unix\n\n// Major returns the major component of a DragonFlyBSD device number.\nfunc Major(dev uint64) uint32 {\n\treturn uint32((dev >> 8) & 0xff)\n}\n\n// Minor returns the minor component of a DragonFlyBSD device number.\nfunc Minor(dev uint64) uint32 {\n\treturn uint32(dev & 0xffff00ff)\n}\n\n// Mkdev returns a DragonFlyBSD device number generated from the given major and\n// minor components.\nfunc Mkdev(major, minor uint32) uint64 {\n\treturn (uint64(major) << 8) | uint64(minor)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/dev_freebsd.go",
    "content": "// Copyright 2017 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Functions to access/create device major and minor numbers matching the\n// encoding used in FreeBSD's sys/types.h header.\n//\n// The information below is extracted and adapted from sys/types.h:\n//\n// Minor gives a cookie instead of an index since in order to avoid changing the\n// meanings of bits 0-15 or wasting time and space shifting bits 16-31 for\n// devices that don't use them.\n\npackage unix\n\n// Major returns the major component of a FreeBSD device number.\nfunc Major(dev uint64) uint32 {\n\treturn uint32((dev >> 8) & 0xff)\n}\n\n// Minor returns the minor component of a FreeBSD device number.\nfunc Minor(dev uint64) uint32 {\n\treturn uint32(dev & 0xffff00ff)\n}\n\n// Mkdev returns a FreeBSD device number generated from the given major and\n// minor components.\nfunc Mkdev(major, minor uint32) uint64 {\n\treturn (uint64(major) << 8) | uint64(minor)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/dev_linux.go",
    "content": "// Copyright 2017 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Functions to access/create device major and minor numbers matching the\n// encoding used by the Linux kernel and glibc.\n//\n// The information below is extracted and adapted from bits/sysmacros.h in the\n// glibc sources:\n//\n// dev_t in glibc is 64-bit, with 32-bit major and minor numbers. glibc's\n// default encoding is MMMM Mmmm mmmM MMmm, where M is a hex digit of the major\n// number and m is a hex digit of the minor number. This is backward compatible\n// with legacy systems where dev_t is 16 bits wide, encoded as MMmm. It is also\n// backward compatible with the Linux kernel, which for some architectures uses\n// 32-bit dev_t, encoded as mmmM MMmm.\n\npackage unix\n\n// Major returns the major component of a Linux device number.\nfunc Major(dev uint64) uint32 {\n\tmajor := uint32((dev & 0x00000000000fff00) >> 8)\n\tmajor |= uint32((dev & 0xfffff00000000000) >> 32)\n\treturn major\n}\n\n// Minor returns the minor component of a Linux device number.\nfunc Minor(dev uint64) uint32 {\n\tminor := uint32((dev & 0x00000000000000ff) >> 0)\n\tminor |= uint32((dev & 0x00000ffffff00000) >> 12)\n\treturn minor\n}\n\n// Mkdev returns a Linux device number generated from the given major and minor\n// components.\nfunc Mkdev(major, minor uint32) uint64 {\n\tdev := (uint64(major) & 0x00000fff) << 8\n\tdev |= (uint64(major) & 0xfffff000) << 32\n\tdev |= (uint64(minor) & 0x000000ff) << 0\n\tdev |= (uint64(minor) & 0xffffff00) << 12\n\treturn dev\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/dev_netbsd.go",
    "content": "// Copyright 2017 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Functions to access/create device major and minor numbers matching the\n// encoding used in NetBSD's sys/types.h header.\n\npackage unix\n\n// Major returns the major component of a NetBSD device number.\nfunc Major(dev uint64) uint32 {\n\treturn uint32((dev & 0x000fff00) >> 8)\n}\n\n// Minor returns the minor component of a NetBSD device number.\nfunc Minor(dev uint64) uint32 {\n\tminor := uint32((dev & 0x000000ff) >> 0)\n\tminor |= uint32((dev & 0xfff00000) >> 12)\n\treturn minor\n}\n\n// Mkdev returns a NetBSD device number generated from the given major and minor\n// components.\nfunc Mkdev(major, minor uint32) uint64 {\n\tdev := (uint64(major) << 8) & 0x000fff00\n\tdev |= (uint64(minor) << 12) & 0xfff00000\n\tdev |= (uint64(minor) << 0) & 0x000000ff\n\treturn dev\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/dev_openbsd.go",
    "content": "// Copyright 2017 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Functions to access/create device major and minor numbers matching the\n// encoding used in OpenBSD's sys/types.h header.\n\npackage unix\n\n// Major returns the major component of an OpenBSD device number.\nfunc Major(dev uint64) uint32 {\n\treturn uint32((dev & 0x0000ff00) >> 8)\n}\n\n// Minor returns the minor component of an OpenBSD device number.\nfunc Minor(dev uint64) uint32 {\n\tminor := uint32((dev & 0x000000ff) >> 0)\n\tminor |= uint32((dev & 0xffff0000) >> 8)\n\treturn minor\n}\n\n// Mkdev returns an OpenBSD device number generated from the given major and minor\n// components.\nfunc Mkdev(major, minor uint32) uint64 {\n\tdev := (uint64(major) << 8) & 0x0000ff00\n\tdev |= (uint64(minor) << 8) & 0xffff0000\n\tdev |= (uint64(minor) << 0) & 0x000000ff\n\treturn dev\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/dirent.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build aix darwin dragonfly freebsd linux nacl netbsd openbsd solaris\n\npackage unix\n\nimport \"syscall\"\n\n// ParseDirent parses up to max directory entries in buf,\n// appending the names to names. It returns the number of\n// bytes consumed from buf, the number of entries added\n// to names, and the new names slice.\nfunc ParseDirent(buf []byte, max int, names []string) (consumed int, count int, newnames []string) {\n\treturn syscall.ParseDirent(buf, max, names)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/endian_big.go",
    "content": "// Copyright 2016 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n//\n// +build ppc64 s390x mips mips64\n\npackage unix\n\nconst isBigEndian = true\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/endian_little.go",
    "content": "// Copyright 2016 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n//\n// +build 386 amd64 amd64p32 arm arm64 ppc64le mipsle mips64le\n\npackage unix\n\nconst isBigEndian = false\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/env_unix.go",
    "content": "// Copyright 2010 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris\n\n// Unix environment variables.\n\npackage unix\n\nimport \"syscall\"\n\nfunc Getenv(key string) (value string, found bool) {\n\treturn syscall.Getenv(key)\n}\n\nfunc Setenv(key, value string) error {\n\treturn syscall.Setenv(key, value)\n}\n\nfunc Clearenv() {\n\tsyscall.Clearenv()\n}\n\nfunc Environ() []string {\n\treturn syscall.Environ()\n}\n\nfunc Unsetenv(key string) error {\n\treturn syscall.Unsetenv(key)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/errors_freebsd_386.go",
    "content": "// Copyright 2017 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Constants that were deprecated or moved to enums in the FreeBSD headers. Keep\n// them here for backwards compatibility.\n\npackage unix\n\nconst (\n\tIFF_SMART                         = 0x20\n\tIFT_1822                          = 0x2\n\tIFT_A12MPPSWITCH                  = 0x82\n\tIFT_AAL2                          = 0xbb\n\tIFT_AAL5                          = 0x31\n\tIFT_ADSL                          = 0x5e\n\tIFT_AFLANE8023                    = 0x3b\n\tIFT_AFLANE8025                    = 0x3c\n\tIFT_ARAP                          = 0x58\n\tIFT_ARCNET                        = 0x23\n\tIFT_ARCNETPLUS                    = 0x24\n\tIFT_ASYNC                         = 0x54\n\tIFT_ATM                           = 0x25\n\tIFT_ATMDXI                        = 0x69\n\tIFT_ATMFUNI                       = 0x6a\n\tIFT_ATMIMA                        = 0x6b\n\tIFT_ATMLOGICAL                    = 0x50\n\tIFT_ATMRADIO                      = 0xbd\n\tIFT_ATMSUBINTERFACE               = 0x86\n\tIFT_ATMVCIENDPT                   = 0xc2\n\tIFT_ATMVIRTUAL                    = 0x95\n\tIFT_BGPPOLICYACCOUNTING           = 0xa2\n\tIFT_BSC                           = 0x53\n\tIFT_CCTEMUL                       = 0x3d\n\tIFT_CEPT                          = 0x13\n\tIFT_CES                           = 0x85\n\tIFT_CHANNEL                       = 0x46\n\tIFT_CNR                           = 0x55\n\tIFT_COFFEE                        = 0x84\n\tIFT_COMPOSITELINK                 = 0x9b\n\tIFT_DCN                           = 0x8d\n\tIFT_DIGITALPOWERLINE              = 0x8a\n\tIFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba\n\tIFT_DLSW                          = 0x4a\n\tIFT_DOCSCABLEDOWNSTREAM           = 0x80\n\tIFT_DOCSCABLEMACLAYER             = 0x7f\n\tIFT_DOCSCABLEUPSTREAM             = 0x81\n\tIFT_DS0                           = 0x51\n\tIFT_DS0BUNDLE                     = 0x52\n\tIFT_DS1FDL                        = 0xaa\n\tIFT_DS3                           = 0x1e\n\tIFT_DTM                           = 0x8c\n\tIFT_DVBASILN                      = 0xac\n\tIFT_DVBASIOUT                     = 0xad\n\tIFT_DVBRCCDOWNSTREAM              = 0x93\n\tIFT_DVBRCCMACLAYER                = 0x92\n\tIFT_DVBRCCUPSTREAM                = 0x94\n\tIFT_ENC                           = 0xf4\n\tIFT_EON                           = 0x19\n\tIFT_EPLRS                         = 0x57\n\tIFT_ESCON                         = 0x49\n\tIFT_ETHER                         = 0x6\n\tIFT_FAITH                         = 0xf2\n\tIFT_FAST                          = 0x7d\n\tIFT_FASTETHER                     = 0x3e\n\tIFT_FASTETHERFX                   = 0x45\n\tIFT_FDDI                          = 0xf\n\tIFT_FIBRECHANNEL                  = 0x38\n\tIFT_FRAMERELAYINTERCONNECT        = 0x3a\n\tIFT_FRAMERELAYMPI                 = 0x5c\n\tIFT_FRDLCIENDPT                   = 0xc1\n\tIFT_FRELAY                        = 0x20\n\tIFT_FRELAYDCE                     = 0x2c\n\tIFT_FRF16MFRBUNDLE                = 0xa3\n\tIFT_FRFORWARD                     = 0x9e\n\tIFT_G703AT2MB                     = 0x43\n\tIFT_G703AT64K                     = 0x42\n\tIFT_GIF                           = 0xf0\n\tIFT_GIGABITETHERNET               = 0x75\n\tIFT_GR303IDT                      = 0xb2\n\tIFT_GR303RDT                      = 0xb1\n\tIFT_H323GATEKEEPER                = 0xa4\n\tIFT_H323PROXY                     = 0xa5\n\tIFT_HDH1822                       = 0x3\n\tIFT_HDLC                          = 0x76\n\tIFT_HDSL2                         = 0xa8\n\tIFT_HIPERLAN2                     = 0xb7\n\tIFT_HIPPI                         = 0x2f\n\tIFT_HIPPIINTERFACE                = 0x39\n\tIFT_HOSTPAD                       = 0x5a\n\tIFT_HSSI                          = 0x2e\n\tIFT_HY                            = 0xe\n\tIFT_IBM370PARCHAN                 = 0x48\n\tIFT_IDSL                          = 0x9a\n\tIFT_IEEE80211                     = 0x47\n\tIFT_IEEE80212                     = 0x37\n\tIFT_IEEE8023ADLAG                 = 0xa1\n\tIFT_IFGSN                         = 0x91\n\tIFT_IMT                           = 0xbe\n\tIFT_INTERLEAVE                    = 0x7c\n\tIFT_IP                            = 0x7e\n\tIFT_IPFORWARD                     = 0x8e\n\tIFT_IPOVERATM                     = 0x72\n\tIFT_IPOVERCDLC                    = 0x6d\n\tIFT_IPOVERCLAW                    = 0x6e\n\tIFT_IPSWITCH                      = 0x4e\n\tIFT_IPXIP                         = 0xf9\n\tIFT_ISDN                          = 0x3f\n\tIFT_ISDNBASIC                     = 0x14\n\tIFT_ISDNPRIMARY                   = 0x15\n\tIFT_ISDNS                         = 0x4b\n\tIFT_ISDNU                         = 0x4c\n\tIFT_ISO88022LLC                   = 0x29\n\tIFT_ISO88023                      = 0x7\n\tIFT_ISO88024                      = 0x8\n\tIFT_ISO88025                      = 0x9\n\tIFT_ISO88025CRFPINT               = 0x62\n\tIFT_ISO88025DTR                   = 0x56\n\tIFT_ISO88025FIBER                 = 0x73\n\tIFT_ISO88026                      = 0xa\n\tIFT_ISUP                          = 0xb3\n\tIFT_L3IPXVLAN                     = 0x89\n\tIFT_LAPB                          = 0x10\n\tIFT_LAPD                          = 0x4d\n\tIFT_LAPF                          = 0x77\n\tIFT_LOCALTALK                     = 0x2a\n\tIFT_LOOP                          = 0x18\n\tIFT_MEDIAMAILOVERIP               = 0x8b\n\tIFT_MFSIGLINK                     = 0xa7\n\tIFT_MIOX25                        = 0x26\n\tIFT_MODEM                         = 0x30\n\tIFT_MPC                           = 0x71\n\tIFT_MPLS                          = 0xa6\n\tIFT_MPLSTUNNEL                    = 0x96\n\tIFT_MSDSL                         = 0x8f\n\tIFT_MVL                           = 0xbf\n\tIFT_MYRINET                       = 0x63\n\tIFT_NFAS                          = 0xaf\n\tIFT_NSIP                          = 0x1b\n\tIFT_OPTICALCHANNEL                = 0xc3\n\tIFT_OPTICALTRANSPORT              = 0xc4\n\tIFT_OTHER                         = 0x1\n\tIFT_P10                           = 0xc\n\tIFT_P80                           = 0xd\n\tIFT_PARA                          = 0x22\n\tIFT_PFLOG                         = 0xf6\n\tIFT_PFSYNC                        = 0xf7\n\tIFT_PLC                           = 0xae\n\tIFT_POS                           = 0xab\n\tIFT_PPPMULTILINKBUNDLE            = 0x6c\n\tIFT_PROPBWAP2MP                   = 0xb8\n\tIFT_PROPCNLS                      = 0x59\n\tIFT_PROPDOCSWIRELESSDOWNSTREAM    = 0xb5\n\tIFT_PROPDOCSWIRELESSMACLAYER      = 0xb4\n\tIFT_PROPDOCSWIRELESSUPSTREAM      = 0xb6\n\tIFT_PROPMUX                       = 0x36\n\tIFT_PROPWIRELESSP2P               = 0x9d\n\tIFT_PTPSERIAL                     = 0x16\n\tIFT_PVC                           = 0xf1\n\tIFT_QLLC                          = 0x44\n\tIFT_RADIOMAC                      = 0xbc\n\tIFT_RADSL                         = 0x5f\n\tIFT_REACHDSL                      = 0xc0\n\tIFT_RFC1483                       = 0x9f\n\tIFT_RS232                         = 0x21\n\tIFT_RSRB                          = 0x4f\n\tIFT_SDLC                          = 0x11\n\tIFT_SDSL                          = 0x60\n\tIFT_SHDSL                         = 0xa9\n\tIFT_SIP                           = 0x1f\n\tIFT_SLIP                          = 0x1c\n\tIFT_SMDSDXI                       = 0x2b\n\tIFT_SMDSICIP                      = 0x34\n\tIFT_SONET                         = 0x27\n\tIFT_SONETOVERHEADCHANNEL          = 0xb9\n\tIFT_SONETPATH                     = 0x32\n\tIFT_SONETVT                       = 0x33\n\tIFT_SRP                           = 0x97\n\tIFT_SS7SIGLINK                    = 0x9c\n\tIFT_STACKTOSTACK                  = 0x6f\n\tIFT_STARLAN                       = 0xb\n\tIFT_STF                           = 0xd7\n\tIFT_T1                            = 0x12\n\tIFT_TDLC                          = 0x74\n\tIFT_TERMPAD                       = 0x5b\n\tIFT_TR008                         = 0xb0\n\tIFT_TRANSPHDLC                    = 0x7b\n\tIFT_TUNNEL                        = 0x83\n\tIFT_ULTRA                         = 0x1d\n\tIFT_USB                           = 0xa0\n\tIFT_V11                           = 0x40\n\tIFT_V35                           = 0x2d\n\tIFT_V36                           = 0x41\n\tIFT_V37                           = 0x78\n\tIFT_VDSL                          = 0x61\n\tIFT_VIRTUALIPADDRESS              = 0x70\n\tIFT_VOICEEM                       = 0x64\n\tIFT_VOICEENCAP                    = 0x67\n\tIFT_VOICEFXO                      = 0x65\n\tIFT_VOICEFXS                      = 0x66\n\tIFT_VOICEOVERATM                  = 0x98\n\tIFT_VOICEOVERFRAMERELAY           = 0x99\n\tIFT_VOICEOVERIP                   = 0x68\n\tIFT_X213                          = 0x5d\n\tIFT_X25                           = 0x5\n\tIFT_X25DDN                        = 0x4\n\tIFT_X25HUNTGROUP                  = 0x7a\n\tIFT_X25MLP                        = 0x79\n\tIFT_X25PLE                        = 0x28\n\tIFT_XETHER                        = 0x1a\n\tIPPROTO_MAXID                     = 0x34\n\tIPV6_FAITH                        = 0x1d\n\tIP_FAITH                          = 0x16\n\tMAP_NORESERVE                     = 0x40\n\tMAP_RENAME                        = 0x20\n\tNET_RT_MAXID                      = 0x6\n\tRTF_PRCLONING                     = 0x10000\n\tRTM_OLDADD                        = 0x9\n\tRTM_OLDDEL                        = 0xa\n\tSIOCADDRT                         = 0x8030720a\n\tSIOCALIFADDR                      = 0x8118691b\n\tSIOCDELRT                         = 0x8030720b\n\tSIOCDLIFADDR                      = 0x8118691d\n\tSIOCGLIFADDR                      = 0xc118691c\n\tSIOCGLIFPHYADDR                   = 0xc118694b\n\tSIOCSLIFPHYADDR                   = 0x8118694a\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/errors_freebsd_amd64.go",
    "content": "// Copyright 2017 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Constants that were deprecated or moved to enums in the FreeBSD headers. Keep\n// them here for backwards compatibility.\n\npackage unix\n\nconst (\n\tIFF_SMART                         = 0x20\n\tIFT_1822                          = 0x2\n\tIFT_A12MPPSWITCH                  = 0x82\n\tIFT_AAL2                          = 0xbb\n\tIFT_AAL5                          = 0x31\n\tIFT_ADSL                          = 0x5e\n\tIFT_AFLANE8023                    = 0x3b\n\tIFT_AFLANE8025                    = 0x3c\n\tIFT_ARAP                          = 0x58\n\tIFT_ARCNET                        = 0x23\n\tIFT_ARCNETPLUS                    = 0x24\n\tIFT_ASYNC                         = 0x54\n\tIFT_ATM                           = 0x25\n\tIFT_ATMDXI                        = 0x69\n\tIFT_ATMFUNI                       = 0x6a\n\tIFT_ATMIMA                        = 0x6b\n\tIFT_ATMLOGICAL                    = 0x50\n\tIFT_ATMRADIO                      = 0xbd\n\tIFT_ATMSUBINTERFACE               = 0x86\n\tIFT_ATMVCIENDPT                   = 0xc2\n\tIFT_ATMVIRTUAL                    = 0x95\n\tIFT_BGPPOLICYACCOUNTING           = 0xa2\n\tIFT_BSC                           = 0x53\n\tIFT_CCTEMUL                       = 0x3d\n\tIFT_CEPT                          = 0x13\n\tIFT_CES                           = 0x85\n\tIFT_CHANNEL                       = 0x46\n\tIFT_CNR                           = 0x55\n\tIFT_COFFEE                        = 0x84\n\tIFT_COMPOSITELINK                 = 0x9b\n\tIFT_DCN                           = 0x8d\n\tIFT_DIGITALPOWERLINE              = 0x8a\n\tIFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba\n\tIFT_DLSW                          = 0x4a\n\tIFT_DOCSCABLEDOWNSTREAM           = 0x80\n\tIFT_DOCSCABLEMACLAYER             = 0x7f\n\tIFT_DOCSCABLEUPSTREAM             = 0x81\n\tIFT_DS0                           = 0x51\n\tIFT_DS0BUNDLE                     = 0x52\n\tIFT_DS1FDL                        = 0xaa\n\tIFT_DS3                           = 0x1e\n\tIFT_DTM                           = 0x8c\n\tIFT_DVBASILN                      = 0xac\n\tIFT_DVBASIOUT                     = 0xad\n\tIFT_DVBRCCDOWNSTREAM              = 0x93\n\tIFT_DVBRCCMACLAYER                = 0x92\n\tIFT_DVBRCCUPSTREAM                = 0x94\n\tIFT_ENC                           = 0xf4\n\tIFT_EON                           = 0x19\n\tIFT_EPLRS                         = 0x57\n\tIFT_ESCON                         = 0x49\n\tIFT_ETHER                         = 0x6\n\tIFT_FAITH                         = 0xf2\n\tIFT_FAST                          = 0x7d\n\tIFT_FASTETHER                     = 0x3e\n\tIFT_FASTETHERFX                   = 0x45\n\tIFT_FDDI                          = 0xf\n\tIFT_FIBRECHANNEL                  = 0x38\n\tIFT_FRAMERELAYINTERCONNECT        = 0x3a\n\tIFT_FRAMERELAYMPI                 = 0x5c\n\tIFT_FRDLCIENDPT                   = 0xc1\n\tIFT_FRELAY                        = 0x20\n\tIFT_FRELAYDCE                     = 0x2c\n\tIFT_FRF16MFRBUNDLE                = 0xa3\n\tIFT_FRFORWARD                     = 0x9e\n\tIFT_G703AT2MB                     = 0x43\n\tIFT_G703AT64K                     = 0x42\n\tIFT_GIF                           = 0xf0\n\tIFT_GIGABITETHERNET               = 0x75\n\tIFT_GR303IDT                      = 0xb2\n\tIFT_GR303RDT                      = 0xb1\n\tIFT_H323GATEKEEPER                = 0xa4\n\tIFT_H323PROXY                     = 0xa5\n\tIFT_HDH1822                       = 0x3\n\tIFT_HDLC                          = 0x76\n\tIFT_HDSL2                         = 0xa8\n\tIFT_HIPERLAN2                     = 0xb7\n\tIFT_HIPPI                         = 0x2f\n\tIFT_HIPPIINTERFACE                = 0x39\n\tIFT_HOSTPAD                       = 0x5a\n\tIFT_HSSI                          = 0x2e\n\tIFT_HY                            = 0xe\n\tIFT_IBM370PARCHAN                 = 0x48\n\tIFT_IDSL                          = 0x9a\n\tIFT_IEEE80211                     = 0x47\n\tIFT_IEEE80212                     = 0x37\n\tIFT_IEEE8023ADLAG                 = 0xa1\n\tIFT_IFGSN                         = 0x91\n\tIFT_IMT                           = 0xbe\n\tIFT_INTERLEAVE                    = 0x7c\n\tIFT_IP                            = 0x7e\n\tIFT_IPFORWARD                     = 0x8e\n\tIFT_IPOVERATM                     = 0x72\n\tIFT_IPOVERCDLC                    = 0x6d\n\tIFT_IPOVERCLAW                    = 0x6e\n\tIFT_IPSWITCH                      = 0x4e\n\tIFT_IPXIP                         = 0xf9\n\tIFT_ISDN                          = 0x3f\n\tIFT_ISDNBASIC                     = 0x14\n\tIFT_ISDNPRIMARY                   = 0x15\n\tIFT_ISDNS                         = 0x4b\n\tIFT_ISDNU                         = 0x4c\n\tIFT_ISO88022LLC                   = 0x29\n\tIFT_ISO88023                      = 0x7\n\tIFT_ISO88024                      = 0x8\n\tIFT_ISO88025                      = 0x9\n\tIFT_ISO88025CRFPINT               = 0x62\n\tIFT_ISO88025DTR                   = 0x56\n\tIFT_ISO88025FIBER                 = 0x73\n\tIFT_ISO88026                      = 0xa\n\tIFT_ISUP                          = 0xb3\n\tIFT_L3IPXVLAN                     = 0x89\n\tIFT_LAPB                          = 0x10\n\tIFT_LAPD                          = 0x4d\n\tIFT_LAPF                          = 0x77\n\tIFT_LOCALTALK                     = 0x2a\n\tIFT_LOOP                          = 0x18\n\tIFT_MEDIAMAILOVERIP               = 0x8b\n\tIFT_MFSIGLINK                     = 0xa7\n\tIFT_MIOX25                        = 0x26\n\tIFT_MODEM                         = 0x30\n\tIFT_MPC                           = 0x71\n\tIFT_MPLS                          = 0xa6\n\tIFT_MPLSTUNNEL                    = 0x96\n\tIFT_MSDSL                         = 0x8f\n\tIFT_MVL                           = 0xbf\n\tIFT_MYRINET                       = 0x63\n\tIFT_NFAS                          = 0xaf\n\tIFT_NSIP                          = 0x1b\n\tIFT_OPTICALCHANNEL                = 0xc3\n\tIFT_OPTICALTRANSPORT              = 0xc4\n\tIFT_OTHER                         = 0x1\n\tIFT_P10                           = 0xc\n\tIFT_P80                           = 0xd\n\tIFT_PARA                          = 0x22\n\tIFT_PFLOG                         = 0xf6\n\tIFT_PFSYNC                        = 0xf7\n\tIFT_PLC                           = 0xae\n\tIFT_POS                           = 0xab\n\tIFT_PPPMULTILINKBUNDLE            = 0x6c\n\tIFT_PROPBWAP2MP                   = 0xb8\n\tIFT_PROPCNLS                      = 0x59\n\tIFT_PROPDOCSWIRELESSDOWNSTREAM    = 0xb5\n\tIFT_PROPDOCSWIRELESSMACLAYER      = 0xb4\n\tIFT_PROPDOCSWIRELESSUPSTREAM      = 0xb6\n\tIFT_PROPMUX                       = 0x36\n\tIFT_PROPWIRELESSP2P               = 0x9d\n\tIFT_PTPSERIAL                     = 0x16\n\tIFT_PVC                           = 0xf1\n\tIFT_QLLC                          = 0x44\n\tIFT_RADIOMAC                      = 0xbc\n\tIFT_RADSL                         = 0x5f\n\tIFT_REACHDSL                      = 0xc0\n\tIFT_RFC1483                       = 0x9f\n\tIFT_RS232                         = 0x21\n\tIFT_RSRB                          = 0x4f\n\tIFT_SDLC                          = 0x11\n\tIFT_SDSL                          = 0x60\n\tIFT_SHDSL                         = 0xa9\n\tIFT_SIP                           = 0x1f\n\tIFT_SLIP                          = 0x1c\n\tIFT_SMDSDXI                       = 0x2b\n\tIFT_SMDSICIP                      = 0x34\n\tIFT_SONET                         = 0x27\n\tIFT_SONETOVERHEADCHANNEL          = 0xb9\n\tIFT_SONETPATH                     = 0x32\n\tIFT_SONETVT                       = 0x33\n\tIFT_SRP                           = 0x97\n\tIFT_SS7SIGLINK                    = 0x9c\n\tIFT_STACKTOSTACK                  = 0x6f\n\tIFT_STARLAN                       = 0xb\n\tIFT_STF                           = 0xd7\n\tIFT_T1                            = 0x12\n\tIFT_TDLC                          = 0x74\n\tIFT_TERMPAD                       = 0x5b\n\tIFT_TR008                         = 0xb0\n\tIFT_TRANSPHDLC                    = 0x7b\n\tIFT_TUNNEL                        = 0x83\n\tIFT_ULTRA                         = 0x1d\n\tIFT_USB                           = 0xa0\n\tIFT_V11                           = 0x40\n\tIFT_V35                           = 0x2d\n\tIFT_V36                           = 0x41\n\tIFT_V37                           = 0x78\n\tIFT_VDSL                          = 0x61\n\tIFT_VIRTUALIPADDRESS              = 0x70\n\tIFT_VOICEEM                       = 0x64\n\tIFT_VOICEENCAP                    = 0x67\n\tIFT_VOICEFXO                      = 0x65\n\tIFT_VOICEFXS                      = 0x66\n\tIFT_VOICEOVERATM                  = 0x98\n\tIFT_VOICEOVERFRAMERELAY           = 0x99\n\tIFT_VOICEOVERIP                   = 0x68\n\tIFT_X213                          = 0x5d\n\tIFT_X25                           = 0x5\n\tIFT_X25DDN                        = 0x4\n\tIFT_X25HUNTGROUP                  = 0x7a\n\tIFT_X25MLP                        = 0x79\n\tIFT_X25PLE                        = 0x28\n\tIFT_XETHER                        = 0x1a\n\tIPPROTO_MAXID                     = 0x34\n\tIPV6_FAITH                        = 0x1d\n\tIP_FAITH                          = 0x16\n\tMAP_NORESERVE                     = 0x40\n\tMAP_RENAME                        = 0x20\n\tNET_RT_MAXID                      = 0x6\n\tRTF_PRCLONING                     = 0x10000\n\tRTM_OLDADD                        = 0x9\n\tRTM_OLDDEL                        = 0xa\n\tSIOCADDRT                         = 0x8040720a\n\tSIOCALIFADDR                      = 0x8118691b\n\tSIOCDELRT                         = 0x8040720b\n\tSIOCDLIFADDR                      = 0x8118691d\n\tSIOCGLIFADDR                      = 0xc118691c\n\tSIOCGLIFPHYADDR                   = 0xc118694b\n\tSIOCSLIFPHYADDR                   = 0x8118694a\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/errors_freebsd_arm.go",
    "content": "// Copyright 2017 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage unix\n\nconst (\n\tIFT_1822                          = 0x2\n\tIFT_A12MPPSWITCH                  = 0x82\n\tIFT_AAL2                          = 0xbb\n\tIFT_AAL5                          = 0x31\n\tIFT_ADSL                          = 0x5e\n\tIFT_AFLANE8023                    = 0x3b\n\tIFT_AFLANE8025                    = 0x3c\n\tIFT_ARAP                          = 0x58\n\tIFT_ARCNET                        = 0x23\n\tIFT_ARCNETPLUS                    = 0x24\n\tIFT_ASYNC                         = 0x54\n\tIFT_ATM                           = 0x25\n\tIFT_ATMDXI                        = 0x69\n\tIFT_ATMFUNI                       = 0x6a\n\tIFT_ATMIMA                        = 0x6b\n\tIFT_ATMLOGICAL                    = 0x50\n\tIFT_ATMRADIO                      = 0xbd\n\tIFT_ATMSUBINTERFACE               = 0x86\n\tIFT_ATMVCIENDPT                   = 0xc2\n\tIFT_ATMVIRTUAL                    = 0x95\n\tIFT_BGPPOLICYACCOUNTING           = 0xa2\n\tIFT_BSC                           = 0x53\n\tIFT_CCTEMUL                       = 0x3d\n\tIFT_CEPT                          = 0x13\n\tIFT_CES                           = 0x85\n\tIFT_CHANNEL                       = 0x46\n\tIFT_CNR                           = 0x55\n\tIFT_COFFEE                        = 0x84\n\tIFT_COMPOSITELINK                 = 0x9b\n\tIFT_DCN                           = 0x8d\n\tIFT_DIGITALPOWERLINE              = 0x8a\n\tIFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba\n\tIFT_DLSW                          = 0x4a\n\tIFT_DOCSCABLEDOWNSTREAM           = 0x80\n\tIFT_DOCSCABLEMACLAYER             = 0x7f\n\tIFT_DOCSCABLEUPSTREAM             = 0x81\n\tIFT_DS0                           = 0x51\n\tIFT_DS0BUNDLE                     = 0x52\n\tIFT_DS1FDL                        = 0xaa\n\tIFT_DS3                           = 0x1e\n\tIFT_DTM                           = 0x8c\n\tIFT_DVBASILN                      = 0xac\n\tIFT_DVBASIOUT                     = 0xad\n\tIFT_DVBRCCDOWNSTREAM              = 0x93\n\tIFT_DVBRCCMACLAYER                = 0x92\n\tIFT_DVBRCCUPSTREAM                = 0x94\n\tIFT_ENC                           = 0xf4\n\tIFT_EON                           = 0x19\n\tIFT_EPLRS                         = 0x57\n\tIFT_ESCON                         = 0x49\n\tIFT_ETHER                         = 0x6\n\tIFT_FAST                          = 0x7d\n\tIFT_FASTETHER                     = 0x3e\n\tIFT_FASTETHERFX                   = 0x45\n\tIFT_FDDI                          = 0xf\n\tIFT_FIBRECHANNEL                  = 0x38\n\tIFT_FRAMERELAYINTERCONNECT        = 0x3a\n\tIFT_FRAMERELAYMPI                 = 0x5c\n\tIFT_FRDLCIENDPT                   = 0xc1\n\tIFT_FRELAY                        = 0x20\n\tIFT_FRELAYDCE                     = 0x2c\n\tIFT_FRF16MFRBUNDLE                = 0xa3\n\tIFT_FRFORWARD                     = 0x9e\n\tIFT_G703AT2MB                     = 0x43\n\tIFT_G703AT64K                     = 0x42\n\tIFT_GIF                           = 0xf0\n\tIFT_GIGABITETHERNET               = 0x75\n\tIFT_GR303IDT                      = 0xb2\n\tIFT_GR303RDT                      = 0xb1\n\tIFT_H323GATEKEEPER                = 0xa4\n\tIFT_H323PROXY                     = 0xa5\n\tIFT_HDH1822                       = 0x3\n\tIFT_HDLC                          = 0x76\n\tIFT_HDSL2                         = 0xa8\n\tIFT_HIPERLAN2                     = 0xb7\n\tIFT_HIPPI                         = 0x2f\n\tIFT_HIPPIINTERFACE                = 0x39\n\tIFT_HOSTPAD                       = 0x5a\n\tIFT_HSSI                          = 0x2e\n\tIFT_HY                            = 0xe\n\tIFT_IBM370PARCHAN                 = 0x48\n\tIFT_IDSL                          = 0x9a\n\tIFT_IEEE80211                     = 0x47\n\tIFT_IEEE80212                     = 0x37\n\tIFT_IEEE8023ADLAG                 = 0xa1\n\tIFT_IFGSN                         = 0x91\n\tIFT_IMT                           = 0xbe\n\tIFT_INTERLEAVE                    = 0x7c\n\tIFT_IP                            = 0x7e\n\tIFT_IPFORWARD                     = 0x8e\n\tIFT_IPOVERATM                     = 0x72\n\tIFT_IPOVERCDLC                    = 0x6d\n\tIFT_IPOVERCLAW                    = 0x6e\n\tIFT_IPSWITCH                      = 0x4e\n\tIFT_ISDN                          = 0x3f\n\tIFT_ISDNBASIC                     = 0x14\n\tIFT_ISDNPRIMARY                   = 0x15\n\tIFT_ISDNS                         = 0x4b\n\tIFT_ISDNU                         = 0x4c\n\tIFT_ISO88022LLC                   = 0x29\n\tIFT_ISO88023                      = 0x7\n\tIFT_ISO88024                      = 0x8\n\tIFT_ISO88025                      = 0x9\n\tIFT_ISO88025CRFPINT               = 0x62\n\tIFT_ISO88025DTR                   = 0x56\n\tIFT_ISO88025FIBER                 = 0x73\n\tIFT_ISO88026                      = 0xa\n\tIFT_ISUP                          = 0xb3\n\tIFT_L3IPXVLAN                     = 0x89\n\tIFT_LAPB                          = 0x10\n\tIFT_LAPD                          = 0x4d\n\tIFT_LAPF                          = 0x77\n\tIFT_LOCALTALK                     = 0x2a\n\tIFT_LOOP                          = 0x18\n\tIFT_MEDIAMAILOVERIP               = 0x8b\n\tIFT_MFSIGLINK                     = 0xa7\n\tIFT_MIOX25                        = 0x26\n\tIFT_MODEM                         = 0x30\n\tIFT_MPC                           = 0x71\n\tIFT_MPLS                          = 0xa6\n\tIFT_MPLSTUNNEL                    = 0x96\n\tIFT_MSDSL                         = 0x8f\n\tIFT_MVL                           = 0xbf\n\tIFT_MYRINET                       = 0x63\n\tIFT_NFAS                          = 0xaf\n\tIFT_NSIP                          = 0x1b\n\tIFT_OPTICALCHANNEL                = 0xc3\n\tIFT_OPTICALTRANSPORT              = 0xc4\n\tIFT_OTHER                         = 0x1\n\tIFT_P10                           = 0xc\n\tIFT_P80                           = 0xd\n\tIFT_PARA                          = 0x22\n\tIFT_PFLOG                         = 0xf6\n\tIFT_PFSYNC                        = 0xf7\n\tIFT_PLC                           = 0xae\n\tIFT_POS                           = 0xab\n\tIFT_PPPMULTILINKBUNDLE            = 0x6c\n\tIFT_PROPBWAP2MP                   = 0xb8\n\tIFT_PROPCNLS                      = 0x59\n\tIFT_PROPDOCSWIRELESSDOWNSTREAM    = 0xb5\n\tIFT_PROPDOCSWIRELESSMACLAYER      = 0xb4\n\tIFT_PROPDOCSWIRELESSUPSTREAM      = 0xb6\n\tIFT_PROPMUX                       = 0x36\n\tIFT_PROPWIRELESSP2P               = 0x9d\n\tIFT_PTPSERIAL                     = 0x16\n\tIFT_PVC                           = 0xf1\n\tIFT_QLLC                          = 0x44\n\tIFT_RADIOMAC                      = 0xbc\n\tIFT_RADSL                         = 0x5f\n\tIFT_REACHDSL                      = 0xc0\n\tIFT_RFC1483                       = 0x9f\n\tIFT_RS232                         = 0x21\n\tIFT_RSRB                          = 0x4f\n\tIFT_SDLC                          = 0x11\n\tIFT_SDSL                          = 0x60\n\tIFT_SHDSL                         = 0xa9\n\tIFT_SIP                           = 0x1f\n\tIFT_SLIP                          = 0x1c\n\tIFT_SMDSDXI                       = 0x2b\n\tIFT_SMDSICIP                      = 0x34\n\tIFT_SONET                         = 0x27\n\tIFT_SONETOVERHEADCHANNEL          = 0xb9\n\tIFT_SONETPATH                     = 0x32\n\tIFT_SONETVT                       = 0x33\n\tIFT_SRP                           = 0x97\n\tIFT_SS7SIGLINK                    = 0x9c\n\tIFT_STACKTOSTACK                  = 0x6f\n\tIFT_STARLAN                       = 0xb\n\tIFT_STF                           = 0xd7\n\tIFT_T1                            = 0x12\n\tIFT_TDLC                          = 0x74\n\tIFT_TERMPAD                       = 0x5b\n\tIFT_TR008                         = 0xb0\n\tIFT_TRANSPHDLC                    = 0x7b\n\tIFT_TUNNEL                        = 0x83\n\tIFT_ULTRA                         = 0x1d\n\tIFT_USB                           = 0xa0\n\tIFT_V11                           = 0x40\n\tIFT_V35                           = 0x2d\n\tIFT_V36                           = 0x41\n\tIFT_V37                           = 0x78\n\tIFT_VDSL                          = 0x61\n\tIFT_VIRTUALIPADDRESS              = 0x70\n\tIFT_VOICEEM                       = 0x64\n\tIFT_VOICEENCAP                    = 0x67\n\tIFT_VOICEFXO                      = 0x65\n\tIFT_VOICEFXS                      = 0x66\n\tIFT_VOICEOVERATM                  = 0x98\n\tIFT_VOICEOVERFRAMERELAY           = 0x99\n\tIFT_VOICEOVERIP                   = 0x68\n\tIFT_X213                          = 0x5d\n\tIFT_X25                           = 0x5\n\tIFT_X25DDN                        = 0x4\n\tIFT_X25HUNTGROUP                  = 0x7a\n\tIFT_X25MLP                        = 0x79\n\tIFT_X25PLE                        = 0x28\n\tIFT_XETHER                        = 0x1a\n\n\t// missing constants on FreeBSD-11.1-RELEASE, copied from old values in ztypes_freebsd_arm.go\n\tIFF_SMART       = 0x20\n\tIFT_FAITH       = 0xf2\n\tIFT_IPXIP       = 0xf9\n\tIPPROTO_MAXID   = 0x34\n\tIPV6_FAITH      = 0x1d\n\tIP_FAITH        = 0x16\n\tMAP_NORESERVE   = 0x40\n\tMAP_RENAME      = 0x20\n\tNET_RT_MAXID    = 0x6\n\tRTF_PRCLONING   = 0x10000\n\tRTM_OLDADD      = 0x9\n\tRTM_OLDDEL      = 0xa\n\tSIOCADDRT       = 0x8030720a\n\tSIOCALIFADDR    = 0x8118691b\n\tSIOCDELRT       = 0x8030720b\n\tSIOCDLIFADDR    = 0x8118691d\n\tSIOCGLIFADDR    = 0xc118691c\n\tSIOCGLIFPHYADDR = 0xc118694b\n\tSIOCSLIFPHYADDR = 0x8118694a\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/fcntl.go",
    "content": "// Copyright 2014 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build dragonfly freebsd linux netbsd openbsd\n\npackage unix\n\nimport \"unsafe\"\n\n// fcntl64Syscall is usually SYS_FCNTL, but is overridden on 32-bit Linux\n// systems by flock_linux_32bit.go to be SYS_FCNTL64.\nvar fcntl64Syscall uintptr = SYS_FCNTL\n\n// FcntlInt performs a fcntl syscall on fd with the provided command and argument.\nfunc FcntlInt(fd uintptr, cmd, arg int) (int, error) {\n\tvalptr, _, errno := Syscall(fcntl64Syscall, fd, uintptr(cmd), uintptr(arg))\n\tvar err error\n\tif errno != 0 {\n\t\terr = errno\n\t}\n\treturn int(valptr), err\n}\n\n// FcntlFlock performs a fcntl syscall for the F_GETLK, F_SETLK or F_SETLKW command.\nfunc FcntlFlock(fd uintptr, cmd int, lk *Flock_t) error {\n\t_, _, errno := Syscall(fcntl64Syscall, fd, uintptr(cmd), uintptr(unsafe.Pointer(lk)))\n\tif errno == 0 {\n\t\treturn nil\n\t}\n\treturn errno\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/fcntl_darwin.go",
    "content": "// Copyright 2019 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage unix\n\nimport \"unsafe\"\n\n// FcntlInt performs a fcntl syscall on fd with the provided command and argument.\nfunc FcntlInt(fd uintptr, cmd, arg int) (int, error) {\n\treturn fcntl(int(fd), cmd, arg)\n}\n\n// FcntlFlock performs a fcntl syscall for the F_GETLK, F_SETLK or F_SETLKW command.\nfunc FcntlFlock(fd uintptr, cmd int, lk *Flock_t) error {\n\t_, err := fcntl(int(fd), cmd, int(uintptr(unsafe.Pointer(lk))))\n\treturn err\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/fcntl_linux_32bit.go",
    "content": "// +build linux,386 linux,arm linux,mips linux,mipsle\n\n// Copyright 2014 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage unix\n\nfunc init() {\n\t// On 32-bit Linux systems, the fcntl syscall that matches Go's\n\t// Flock_t type is SYS_FCNTL64, not SYS_FCNTL.\n\tfcntl64Syscall = SYS_FCNTL64\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/gccgo.go",
    "content": "// Copyright 2015 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build gccgo\n// +build !aix\n\npackage unix\n\nimport \"syscall\"\n\n// We can't use the gc-syntax .s files for gccgo. On the plus side\n// much of the functionality can be written directly in Go.\n\n//extern gccgoRealSyscallNoError\nfunc realSyscallNoError(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r uintptr)\n\n//extern gccgoRealSyscall\nfunc realSyscall(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r, errno uintptr)\n\nfunc SyscallNoError(trap, a1, a2, a3 uintptr) (r1, r2 uintptr) {\n\tsyscall.Entersyscall()\n\tr := realSyscallNoError(trap, a1, a2, a3, 0, 0, 0, 0, 0, 0)\n\tsyscall.Exitsyscall()\n\treturn r, 0\n}\n\nfunc Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) {\n\tsyscall.Entersyscall()\n\tr, errno := realSyscall(trap, a1, a2, a3, 0, 0, 0, 0, 0, 0)\n\tsyscall.Exitsyscall()\n\treturn r, 0, syscall.Errno(errno)\n}\n\nfunc Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) {\n\tsyscall.Entersyscall()\n\tr, errno := realSyscall(trap, a1, a2, a3, a4, a5, a6, 0, 0, 0)\n\tsyscall.Exitsyscall()\n\treturn r, 0, syscall.Errno(errno)\n}\n\nfunc Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) {\n\tsyscall.Entersyscall()\n\tr, errno := realSyscall(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9)\n\tsyscall.Exitsyscall()\n\treturn r, 0, syscall.Errno(errno)\n}\n\nfunc RawSyscallNoError(trap, a1, a2, a3 uintptr) (r1, r2 uintptr) {\n\tr := realSyscallNoError(trap, a1, a2, a3, 0, 0, 0, 0, 0, 0)\n\treturn r, 0\n}\n\nfunc RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) {\n\tr, errno := realSyscall(trap, a1, a2, a3, 0, 0, 0, 0, 0, 0)\n\treturn r, 0, syscall.Errno(errno)\n}\n\nfunc RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) {\n\tr, errno := realSyscall(trap, a1, a2, a3, a4, a5, a6, 0, 0, 0)\n\treturn r, 0, syscall.Errno(errno)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/gccgo_c.c",
    "content": "// Copyright 2015 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build gccgo\n// +build !aix\n\n#include <errno.h>\n#include <stdint.h>\n#include <unistd.h>\n\n#define _STRINGIFY2_(x) #x\n#define _STRINGIFY_(x) _STRINGIFY2_(x)\n#define GOSYM_PREFIX _STRINGIFY_(__USER_LABEL_PREFIX__)\n\n// Call syscall from C code because the gccgo support for calling from\n// Go to C does not support varargs functions.\n\nstruct ret {\n\tuintptr_t r;\n\tuintptr_t err;\n};\n\nstruct ret\ngccgoRealSyscall(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)\n{\n\tstruct ret r;\n\n\terrno = 0;\n\tr.r = syscall(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9);\n\tr.err = errno;\n\treturn r;\n}\n\nuintptr_t\ngccgoRealSyscallNoError(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)\n{\n\treturn syscall(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9);\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/gccgo_linux_amd64.go",
    "content": "// Copyright 2015 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build gccgo,linux,amd64\n\npackage unix\n\nimport \"syscall\"\n\n//extern gettimeofday\nfunc realGettimeofday(*Timeval, *byte) int32\n\nfunc gettimeofday(tv *Timeval) (err syscall.Errno) {\n\tr := realGettimeofday(tv, nil)\n\tif r < 0 {\n\t\treturn syscall.GetErrno()\n\t}\n\treturn 0\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ioctl.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris\n\npackage unix\n\nimport \"runtime\"\n\n// IoctlSetWinsize performs an ioctl on fd with a *Winsize argument.\n//\n// To change fd's window size, the req argument should be TIOCSWINSZ.\nfunc IoctlSetWinsize(fd int, req uint, value *Winsize) error {\n\t// TODO: if we get the chance, remove the req parameter and\n\t// hardcode TIOCSWINSZ.\n\terr := ioctlSetWinsize(fd, req, value)\n\truntime.KeepAlive(value)\n\treturn err\n}\n\n// IoctlSetTermios performs an ioctl on fd with a *Termios.\n//\n// The req value will usually be TCSETA or TIOCSETA.\nfunc IoctlSetTermios(fd int, req uint, value *Termios) error {\n\t// TODO: if we get the chance, remove the req parameter.\n\terr := ioctlSetTermios(fd, req, value)\n\truntime.KeepAlive(value)\n\treturn err\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/mkasm_darwin.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build ignore\n\n// mkasm_darwin.go generates assembly trampolines to call libSystem routines from Go.\n//This program must be run after mksyscall.go.\npackage main\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"log\"\n\t\"os\"\n\t\"strings\"\n)\n\nfunc main() {\n\tin1, err := ioutil.ReadFile(\"syscall_darwin.go\")\n\tif err != nil {\n\t\tlog.Fatalf(\"can't open syscall_darwin.go: %s\", err)\n\t}\n\tarch := os.Args[1]\n\tin2, err := ioutil.ReadFile(fmt.Sprintf(\"syscall_darwin_%s.go\", arch))\n\tif err != nil {\n\t\tlog.Fatalf(\"can't open syscall_darwin_%s.go: %s\", arch, err)\n\t}\n\tin3, err := ioutil.ReadFile(fmt.Sprintf(\"zsyscall_darwin_%s.go\", arch))\n\tif err != nil {\n\t\tlog.Fatalf(\"can't open zsyscall_darwin_%s.go: %s\", arch, err)\n\t}\n\tin := string(in1) + string(in2) + string(in3)\n\n\ttrampolines := map[string]bool{}\n\n\tvar out bytes.Buffer\n\n\tfmt.Fprintf(&out, \"// go run mkasm_darwin.go %s\\n\", strings.Join(os.Args[1:], \" \"))\n\tfmt.Fprintf(&out, \"// Code generated by the command above; DO NOT EDIT.\\n\")\n\tfmt.Fprintf(&out, \"\\n\")\n\tfmt.Fprintf(&out, \"// +build go1.12\\n\")\n\tfmt.Fprintf(&out, \"\\n\")\n\tfmt.Fprintf(&out, \"#include \\\"textflag.h\\\"\\n\")\n\tfor _, line := range strings.Split(in, \"\\n\") {\n\t\tif !strings.HasPrefix(line, \"func \") || !strings.HasSuffix(line, \"_trampoline()\") {\n\t\t\tcontinue\n\t\t}\n\t\tfn := line[5 : len(line)-13]\n\t\tif !trampolines[fn] {\n\t\t\ttrampolines[fn] = true\n\t\t\tfmt.Fprintf(&out, \"TEXT ·%s_trampoline(SB),NOSPLIT,$0-0\\n\", fn)\n\t\t\tfmt.Fprintf(&out, \"\\tJMP\\t%s(SB)\\n\", fn)\n\t\t}\n\t}\n\terr = ioutil.WriteFile(fmt.Sprintf(\"zsyscall_darwin_%s.s\", arch), out.Bytes(), 0644)\n\tif err != nil {\n\t\tlog.Fatalf(\"can't write zsyscall_darwin_%s.s: %s\", arch, err)\n\t}\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/mkpost.go",
    "content": "// Copyright 2016 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build ignore\n\n// mkpost processes the output of cgo -godefs to\n// modify the generated types. It is used to clean up\n// the sys API in an architecture specific manner.\n//\n// mkpost is run after cgo -godefs; see README.md.\npackage main\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"go/format\"\n\t\"io/ioutil\"\n\t\"log\"\n\t\"os\"\n\t\"regexp\"\n)\n\nfunc main() {\n\t// Get the OS and architecture (using GOARCH_TARGET if it exists)\n\tgoos := os.Getenv(\"GOOS\")\n\tgoarch := os.Getenv(\"GOARCH_TARGET\")\n\tif goarch == \"\" {\n\t\tgoarch = os.Getenv(\"GOARCH\")\n\t}\n\t// Check that we are using the Docker-based build system if we should be.\n\tif goos == \"linux\" {\n\t\tif os.Getenv(\"GOLANG_SYS_BUILD\") != \"docker\" {\n\t\t\tos.Stderr.WriteString(\"In the Docker-based build system, mkpost should not be called directly.\\n\")\n\t\t\tos.Stderr.WriteString(\"See README.md\\n\")\n\t\t\tos.Exit(1)\n\t\t}\n\t}\n\n\tb, err := ioutil.ReadAll(os.Stdin)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\n\tif goos == \"aix\" {\n\t\t// Replace type of Atim, Mtim and Ctim by Timespec in Stat_t\n\t\t// to avoid having both StTimespec and Timespec.\n\t\tsttimespec := regexp.MustCompile(`_Ctype_struct_st_timespec`)\n\t\tb = sttimespec.ReplaceAll(b, []byte(\"Timespec\"))\n\t}\n\n\t// Intentionally export __val fields in Fsid and Sigset_t\n\tvalRegex := regexp.MustCompile(`type (Fsid|Sigset_t) struct {(\\s+)X__val(\\s+\\S+\\s+)}`)\n\tb = valRegex.ReplaceAll(b, []byte(\"type $1 struct {${2}Val$3}\"))\n\n\t// Intentionally export __fds_bits field in FdSet\n\tfdSetRegex := regexp.MustCompile(`type (FdSet) struct {(\\s+)X__fds_bits(\\s+\\S+\\s+)}`)\n\tb = fdSetRegex.ReplaceAll(b, []byte(\"type $1 struct {${2}Bits$3}\"))\n\n\t// If we have empty Ptrace structs, we should delete them. Only s390x emits\n\t// nonempty Ptrace structs.\n\tptraceRexexp := regexp.MustCompile(`type Ptrace((Psw|Fpregs|Per) struct {\\s*})`)\n\tb = ptraceRexexp.ReplaceAll(b, nil)\n\n\t// Replace the control_regs union with a blank identifier for now.\n\tcontrolRegsRegex := regexp.MustCompile(`(Control_regs)\\s+\\[0\\]uint64`)\n\tb = controlRegsRegex.ReplaceAll(b, []byte(\"_ [0]uint64\"))\n\n\t// Remove fields that are added by glibc\n\t// Note that this is unstable as the identifers are private.\n\tremoveFieldsRegex := regexp.MustCompile(`X__glibc\\S*`)\n\tb = removeFieldsRegex.ReplaceAll(b, []byte(\"_\"))\n\n\t// Convert [65]int8 to [65]byte in Utsname members to simplify\n\t// conversion to string; see golang.org/issue/20753\n\tconvertUtsnameRegex := regexp.MustCompile(`((Sys|Node|Domain)name|Release|Version|Machine)(\\s+)\\[(\\d+)\\]u?int8`)\n\tb = convertUtsnameRegex.ReplaceAll(b, []byte(\"$1$3[$4]byte\"))\n\n\t// Convert [1024]int8 to [1024]byte in Ptmget members\n\tconvertPtmget := regexp.MustCompile(`([SC]n)(\\s+)\\[(\\d+)\\]u?int8`)\n\tb = convertPtmget.ReplaceAll(b, []byte(\"$1[$3]byte\"))\n\n\t// Remove spare fields (e.g. in Statx_t)\n\tspareFieldsRegex := regexp.MustCompile(`X__spare\\S*`)\n\tb = spareFieldsRegex.ReplaceAll(b, []byte(\"_\"))\n\n\t// Remove cgo padding fields\n\tremovePaddingFieldsRegex := regexp.MustCompile(`Pad_cgo_\\d+`)\n\tb = removePaddingFieldsRegex.ReplaceAll(b, []byte(\"_\"))\n\n\t// Remove padding, hidden, or unused fields\n\tremoveFieldsRegex = regexp.MustCompile(`\\b(X_\\S+|Padding)`)\n\tb = removeFieldsRegex.ReplaceAll(b, []byte(\"_\"))\n\n\t// Remove the first line of warning from cgo\n\tb = b[bytes.IndexByte(b, '\\n')+1:]\n\t// Modify the command in the header to include:\n\t//  mkpost, our own warning, and a build tag.\n\treplacement := fmt.Sprintf(`$1 | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build %s,%s`, goarch, goos)\n\tcgoCommandRegex := regexp.MustCompile(`(cgo -godefs .*)`)\n\tb = cgoCommandRegex.ReplaceAll(b, []byte(replacement))\n\n\t// Rename Stat_t time fields\n\tif goos == \"freebsd\" && goarch == \"386\" {\n\t\t// Hide Stat_t.[AMCB]tim_ext fields\n\t\trenameStatTimeExtFieldsRegex := regexp.MustCompile(`[AMCB]tim_ext`)\n\t\tb = renameStatTimeExtFieldsRegex.ReplaceAll(b, []byte(\"_\"))\n\t}\n\trenameStatTimeFieldsRegex := regexp.MustCompile(`([AMCB])(?:irth)?time?(?:spec)?\\s+(Timespec|StTimespec)`)\n\tb = renameStatTimeFieldsRegex.ReplaceAll(b, []byte(\"${1}tim ${2}\"))\n\n\t// gofmt\n\tb, err = format.Source(b)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\n\tos.Stdout.Write(b)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/mksyscall.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build ignore\n\n/*\nThis program reads a file containing function prototypes\n(like syscall_darwin.go) and generates system call bodies.\nThe prototypes are marked by lines beginning with \"//sys\"\nand read like func declarations if //sys is replaced by func, but:\n\t* The parameter lists must give a name for each argument.\n\t  This includes return parameters.\n\t* The parameter lists must give a type for each argument:\n\t  the (x, y, z int) shorthand is not allowed.\n\t* If the return parameter is an error number, it must be named errno.\n\nA line beginning with //sysnb is like //sys, except that the\ngoroutine will not be suspended during the execution of the system\ncall.  This must only be used for system calls which can never\nblock, as otherwise the system call could cause all goroutines to\nhang.\n*/\npackage main\n\nimport (\n\t\"bufio\"\n\t\"flag\"\n\t\"fmt\"\n\t\"os\"\n\t\"regexp\"\n\t\"strings\"\n)\n\nvar (\n\tb32       = flag.Bool(\"b32\", false, \"32bit big-endian\")\n\tl32       = flag.Bool(\"l32\", false, \"32bit little-endian\")\n\tplan9     = flag.Bool(\"plan9\", false, \"plan9\")\n\topenbsd   = flag.Bool(\"openbsd\", false, \"openbsd\")\n\tnetbsd    = flag.Bool(\"netbsd\", false, \"netbsd\")\n\tdragonfly = flag.Bool(\"dragonfly\", false, \"dragonfly\")\n\tarm       = flag.Bool(\"arm\", false, \"arm\") // 64-bit value should use (even, odd)-pair\n\ttags      = flag.String(\"tags\", \"\", \"build tags\")\n\tfilename  = flag.String(\"output\", \"\", \"output file name (standard output if omitted)\")\n)\n\n// cmdLine returns this programs's commandline arguments\nfunc cmdLine() string {\n\treturn \"go run mksyscall.go \" + strings.Join(os.Args[1:], \" \")\n}\n\n// buildTags returns build tags\nfunc buildTags() string {\n\treturn *tags\n}\n\n// Param is function parameter\ntype Param struct {\n\tName string\n\tType string\n}\n\n// usage prints the program usage\nfunc usage() {\n\tfmt.Fprintf(os.Stderr, \"usage: go run mksyscall.go [-b32 | -l32] [-tags x,y] [file ...]\\n\")\n\tos.Exit(1)\n}\n\n// parseParamList parses parameter list and returns a slice of parameters\nfunc parseParamList(list string) []string {\n\tlist = strings.TrimSpace(list)\n\tif list == \"\" {\n\t\treturn []string{}\n\t}\n\treturn regexp.MustCompile(`\\s*,\\s*`).Split(list, -1)\n}\n\n// parseParam splits a parameter into name and type\nfunc parseParam(p string) Param {\n\tps := regexp.MustCompile(`^(\\S*) (\\S*)$`).FindStringSubmatch(p)\n\tif ps == nil {\n\t\tfmt.Fprintf(os.Stderr, \"malformed parameter: %s\\n\", p)\n\t\tos.Exit(1)\n\t}\n\treturn Param{ps[1], ps[2]}\n}\n\nfunc main() {\n\t// Get the OS and architecture (using GOARCH_TARGET if it exists)\n\tgoos := os.Getenv(\"GOOS\")\n\tif goos == \"\" {\n\t\tfmt.Fprintln(os.Stderr, \"GOOS not defined in environment\")\n\t\tos.Exit(1)\n\t}\n\tgoarch := os.Getenv(\"GOARCH_TARGET\")\n\tif goarch == \"\" {\n\t\tgoarch = os.Getenv(\"GOARCH\")\n\t}\n\n\t// Check that we are using the Docker-based build system if we should\n\tif goos == \"linux\" {\n\t\tif os.Getenv(\"GOLANG_SYS_BUILD\") != \"docker\" {\n\t\t\tfmt.Fprintf(os.Stderr, \"In the Docker-based build system, mksyscall should not be called directly.\\n\")\n\t\t\tfmt.Fprintf(os.Stderr, \"See README.md\\n\")\n\t\t\tos.Exit(1)\n\t\t}\n\t}\n\n\tflag.Usage = usage\n\tflag.Parse()\n\tif len(flag.Args()) <= 0 {\n\t\tfmt.Fprintf(os.Stderr, \"no files to parse provided\\n\")\n\t\tusage()\n\t}\n\n\tendianness := \"\"\n\tif *b32 {\n\t\tendianness = \"big-endian\"\n\t} else if *l32 {\n\t\tendianness = \"little-endian\"\n\t}\n\n\tlibc := false\n\tif goos == \"darwin\" && strings.Contains(buildTags(), \",go1.12\") {\n\t\tlibc = true\n\t}\n\ttrampolines := map[string]bool{}\n\n\ttext := \"\"\n\tfor _, path := range flag.Args() {\n\t\tfile, err := os.Open(path)\n\t\tif err != nil {\n\t\t\tfmt.Fprintf(os.Stderr, err.Error())\n\t\t\tos.Exit(1)\n\t\t}\n\t\ts := bufio.NewScanner(file)\n\t\tfor s.Scan() {\n\t\t\tt := s.Text()\n\t\t\tt = strings.TrimSpace(t)\n\t\t\tt = regexp.MustCompile(`\\s+`).ReplaceAllString(t, ` `)\n\t\t\tnonblock := regexp.MustCompile(`^\\/\\/sysnb `).FindStringSubmatch(t)\n\t\t\tif regexp.MustCompile(`^\\/\\/sys `).FindStringSubmatch(t) == nil && nonblock == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// Line must be of the form\n\t\t\t//\tfunc Open(path string, mode int, perm int) (fd int, errno error)\n\t\t\t// Split into name, in params, out params.\n\t\t\tf := regexp.MustCompile(`^\\/\\/sys(nb)? (\\w+)\\(([^()]*)\\)\\s*(?:\\(([^()]+)\\))?\\s*(?:=\\s*((?i)SYS_[A-Z0-9_]+))?$`).FindStringSubmatch(t)\n\t\t\tif f == nil {\n\t\t\t\tfmt.Fprintf(os.Stderr, \"%s:%s\\nmalformed //sys declaration\\n\", path, t)\n\t\t\t\tos.Exit(1)\n\t\t\t}\n\t\t\tfunct, inps, outps, sysname := f[2], f[3], f[4], f[5]\n\n\t\t\t// ClockGettime doesn't have a syscall number on Darwin, only generate libc wrappers.\n\t\t\tif goos == \"darwin\" && !libc && funct == \"ClockGettime\" {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// Split argument lists on comma.\n\t\t\tin := parseParamList(inps)\n\t\t\tout := parseParamList(outps)\n\n\t\t\t// Try in vain to keep people from editing this file.\n\t\t\t// The theory is that they jump into the middle of the file\n\t\t\t// without reading the header.\n\t\t\ttext += \"// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\\n\\n\"\n\n\t\t\t// Go function header.\n\t\t\toutDecl := \"\"\n\t\t\tif len(out) > 0 {\n\t\t\t\toutDecl = fmt.Sprintf(\" (%s)\", strings.Join(out, \", \"))\n\t\t\t}\n\t\t\ttext += fmt.Sprintf(\"func %s(%s)%s {\\n\", funct, strings.Join(in, \", \"), outDecl)\n\n\t\t\t// Check if err return available\n\t\t\terrvar := \"\"\n\t\t\tfor _, param := range out {\n\t\t\t\tp := parseParam(param)\n\t\t\t\tif p.Type == \"error\" {\n\t\t\t\t\terrvar = p.Name\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Prepare arguments to Syscall.\n\t\t\tvar args []string\n\t\t\tn := 0\n\t\t\tfor _, param := range in {\n\t\t\t\tp := parseParam(param)\n\t\t\t\tif regexp.MustCompile(`^\\*`).FindStringSubmatch(p.Type) != nil {\n\t\t\t\t\targs = append(args, \"uintptr(unsafe.Pointer(\"+p.Name+\"))\")\n\t\t\t\t} else if p.Type == \"string\" && errvar != \"\" {\n\t\t\t\t\ttext += fmt.Sprintf(\"\\tvar _p%d *byte\\n\", n)\n\t\t\t\t\ttext += fmt.Sprintf(\"\\t_p%d, %s = BytePtrFromString(%s)\\n\", n, errvar, p.Name)\n\t\t\t\t\ttext += fmt.Sprintf(\"\\tif %s != nil {\\n\\t\\treturn\\n\\t}\\n\", errvar)\n\t\t\t\t\targs = append(args, fmt.Sprintf(\"uintptr(unsafe.Pointer(_p%d))\", n))\n\t\t\t\t\tn++\n\t\t\t\t} else if p.Type == \"string\" {\n\t\t\t\t\tfmt.Fprintf(os.Stderr, path+\":\"+funct+\" uses string arguments, but has no error return\\n\")\n\t\t\t\t\ttext += fmt.Sprintf(\"\\tvar _p%d *byte\\n\", n)\n\t\t\t\t\ttext += fmt.Sprintf(\"\\t_p%d, _ = BytePtrFromString(%s)\\n\", n, p.Name)\n\t\t\t\t\targs = append(args, fmt.Sprintf(\"uintptr(unsafe.Pointer(_p%d))\", n))\n\t\t\t\t\tn++\n\t\t\t\t} else if regexp.MustCompile(`^\\[\\](.*)`).FindStringSubmatch(p.Type) != nil {\n\t\t\t\t\t// Convert slice into pointer, length.\n\t\t\t\t\t// Have to be careful not to take address of &a[0] if len == 0:\n\t\t\t\t\t// pass dummy pointer in that case.\n\t\t\t\t\t// Used to pass nil, but some OSes or simulators reject write(fd, nil, 0).\n\t\t\t\t\ttext += fmt.Sprintf(\"\\tvar _p%d unsafe.Pointer\\n\", n)\n\t\t\t\t\ttext += fmt.Sprintf(\"\\tif len(%s) > 0 {\\n\\t\\t_p%d = unsafe.Pointer(&%s[0])\\n\\t}\", p.Name, n, p.Name)\n\t\t\t\t\ttext += fmt.Sprintf(\" else {\\n\\t\\t_p%d = unsafe.Pointer(&_zero)\\n\\t}\\n\", n)\n\t\t\t\t\targs = append(args, fmt.Sprintf(\"uintptr(_p%d)\", n), fmt.Sprintf(\"uintptr(len(%s))\", p.Name))\n\t\t\t\t\tn++\n\t\t\t\t} else if p.Type == \"int64\" && (*openbsd || *netbsd) {\n\t\t\t\t\targs = append(args, \"0\")\n\t\t\t\t\tif endianness == \"big-endian\" {\n\t\t\t\t\t\targs = append(args, fmt.Sprintf(\"uintptr(%s>>32)\", p.Name), fmt.Sprintf(\"uintptr(%s)\", p.Name))\n\t\t\t\t\t} else if endianness == \"little-endian\" {\n\t\t\t\t\t\targs = append(args, fmt.Sprintf(\"uintptr(%s)\", p.Name), fmt.Sprintf(\"uintptr(%s>>32)\", p.Name))\n\t\t\t\t\t} else {\n\t\t\t\t\t\targs = append(args, fmt.Sprintf(\"uintptr(%s)\", p.Name))\n\t\t\t\t\t}\n\t\t\t\t} else if p.Type == \"int64\" && *dragonfly {\n\t\t\t\t\tif regexp.MustCompile(`^(?i)extp(read|write)`).FindStringSubmatch(funct) == nil {\n\t\t\t\t\t\targs = append(args, \"0\")\n\t\t\t\t\t}\n\t\t\t\t\tif endianness == \"big-endian\" {\n\t\t\t\t\t\targs = append(args, fmt.Sprintf(\"uintptr(%s>>32)\", p.Name), fmt.Sprintf(\"uintptr(%s)\", p.Name))\n\t\t\t\t\t} else if endianness == \"little-endian\" {\n\t\t\t\t\t\targs = append(args, fmt.Sprintf(\"uintptr(%s)\", p.Name), fmt.Sprintf(\"uintptr(%s>>32)\", p.Name))\n\t\t\t\t\t} else {\n\t\t\t\t\t\targs = append(args, fmt.Sprintf(\"uintptr(%s)\", p.Name))\n\t\t\t\t\t}\n\t\t\t\t} else if (p.Type == \"int64\" || p.Type == \"uint64\") && endianness != \"\" {\n\t\t\t\t\tif len(args)%2 == 1 && *arm {\n\t\t\t\t\t\t// arm abi specifies 64-bit argument uses\n\t\t\t\t\t\t// (even, odd) pair\n\t\t\t\t\t\targs = append(args, \"0\")\n\t\t\t\t\t}\n\t\t\t\t\tif endianness == \"big-endian\" {\n\t\t\t\t\t\targs = append(args, fmt.Sprintf(\"uintptr(%s>>32)\", p.Name), fmt.Sprintf(\"uintptr(%s)\", p.Name))\n\t\t\t\t\t} else {\n\t\t\t\t\t\targs = append(args, fmt.Sprintf(\"uintptr(%s)\", p.Name), fmt.Sprintf(\"uintptr(%s>>32)\", p.Name))\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\targs = append(args, fmt.Sprintf(\"uintptr(%s)\", p.Name))\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Determine which form to use; pad args with zeros.\n\t\t\tasm := \"Syscall\"\n\t\t\tif nonblock != nil {\n\t\t\t\tif errvar == \"\" && goos == \"linux\" {\n\t\t\t\t\tasm = \"RawSyscallNoError\"\n\t\t\t\t} else {\n\t\t\t\t\tasm = \"RawSyscall\"\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif errvar == \"\" && goos == \"linux\" {\n\t\t\t\t\tasm = \"SyscallNoError\"\n\t\t\t\t}\n\t\t\t}\n\t\t\tif len(args) <= 3 {\n\t\t\t\tfor len(args) < 3 {\n\t\t\t\t\targs = append(args, \"0\")\n\t\t\t\t}\n\t\t\t} else if len(args) <= 6 {\n\t\t\t\tasm += \"6\"\n\t\t\t\tfor len(args) < 6 {\n\t\t\t\t\targs = append(args, \"0\")\n\t\t\t\t}\n\t\t\t} else if len(args) <= 9 {\n\t\t\t\tasm += \"9\"\n\t\t\t\tfor len(args) < 9 {\n\t\t\t\t\targs = append(args, \"0\")\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfmt.Fprintf(os.Stderr, \"%s:%s too many arguments to system call\\n\", path, funct)\n\t\t\t}\n\n\t\t\t// System call number.\n\t\t\tif sysname == \"\" {\n\t\t\t\tsysname = \"SYS_\" + funct\n\t\t\t\tsysname = regexp.MustCompile(`([a-z])([A-Z])`).ReplaceAllString(sysname, `${1}_$2`)\n\t\t\t\tsysname = strings.ToUpper(sysname)\n\t\t\t}\n\n\t\t\tvar libcFn string\n\t\t\tif libc {\n\t\t\t\tasm = \"syscall_\" + strings.ToLower(asm[:1]) + asm[1:] // internal syscall call\n\t\t\t\tsysname = strings.TrimPrefix(sysname, \"SYS_\")         // remove SYS_\n\t\t\t\tsysname = strings.ToLower(sysname)                    // lowercase\n\t\t\t\tif sysname == \"getdirentries64\" {\n\t\t\t\t\t// Special case - libSystem name and\n\t\t\t\t\t// raw syscall name don't match.\n\t\t\t\t\tsysname = \"__getdirentries64\"\n\t\t\t\t}\n\t\t\t\tlibcFn = sysname\n\t\t\t\tsysname = \"funcPC(libc_\" + sysname + \"_trampoline)\"\n\t\t\t}\n\n\t\t\t// Actual call.\n\t\t\targlist := strings.Join(args, \", \")\n\t\t\tcall := fmt.Sprintf(\"%s(%s, %s)\", asm, sysname, arglist)\n\n\t\t\t// Assign return values.\n\t\t\tbody := \"\"\n\t\t\tret := []string{\"_\", \"_\", \"_\"}\n\t\t\tdoErrno := false\n\t\t\tfor i := 0; i < len(out); i++ {\n\t\t\t\tp := parseParam(out[i])\n\t\t\t\treg := \"\"\n\t\t\t\tif p.Name == \"err\" && !*plan9 {\n\t\t\t\t\treg = \"e1\"\n\t\t\t\t\tret[2] = reg\n\t\t\t\t\tdoErrno = true\n\t\t\t\t} else if p.Name == \"err\" && *plan9 {\n\t\t\t\t\tret[0] = \"r0\"\n\t\t\t\t\tret[2] = \"e1\"\n\t\t\t\t\tbreak\n\t\t\t\t} else {\n\t\t\t\t\treg = fmt.Sprintf(\"r%d\", i)\n\t\t\t\t\tret[i] = reg\n\t\t\t\t}\n\t\t\t\tif p.Type == \"bool\" {\n\t\t\t\t\treg = fmt.Sprintf(\"%s != 0\", reg)\n\t\t\t\t}\n\t\t\t\tif p.Type == \"int64\" && endianness != \"\" {\n\t\t\t\t\t// 64-bit number in r1:r0 or r0:r1.\n\t\t\t\t\tif i+2 > len(out) {\n\t\t\t\t\t\tfmt.Fprintf(os.Stderr, \"%s:%s not enough registers for int64 return\\n\", path, funct)\n\t\t\t\t\t}\n\t\t\t\t\tif endianness == \"big-endian\" {\n\t\t\t\t\t\treg = fmt.Sprintf(\"int64(r%d)<<32 | int64(r%d)\", i, i+1)\n\t\t\t\t\t} else {\n\t\t\t\t\t\treg = fmt.Sprintf(\"int64(r%d)<<32 | int64(r%d)\", i+1, i)\n\t\t\t\t\t}\n\t\t\t\t\tret[i] = fmt.Sprintf(\"r%d\", i)\n\t\t\t\t\tret[i+1] = fmt.Sprintf(\"r%d\", i+1)\n\t\t\t\t}\n\t\t\t\tif reg != \"e1\" || *plan9 {\n\t\t\t\t\tbody += fmt.Sprintf(\"\\t%s = %s(%s)\\n\", p.Name, p.Type, reg)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ret[0] == \"_\" && ret[1] == \"_\" && ret[2] == \"_\" {\n\t\t\t\ttext += fmt.Sprintf(\"\\t%s\\n\", call)\n\t\t\t} else {\n\t\t\t\tif errvar == \"\" && goos == \"linux\" {\n\t\t\t\t\t// raw syscall without error on Linux, see golang.org/issue/22924\n\t\t\t\t\ttext += fmt.Sprintf(\"\\t%s, %s := %s\\n\", ret[0], ret[1], call)\n\t\t\t\t} else {\n\t\t\t\t\ttext += fmt.Sprintf(\"\\t%s, %s, %s := %s\\n\", ret[0], ret[1], ret[2], call)\n\t\t\t\t}\n\t\t\t}\n\t\t\ttext += body\n\n\t\t\tif *plan9 && ret[2] == \"e1\" {\n\t\t\t\ttext += \"\\tif int32(r0) == -1 {\\n\"\n\t\t\t\ttext += \"\\t\\terr = e1\\n\"\n\t\t\t\ttext += \"\\t}\\n\"\n\t\t\t} else if doErrno {\n\t\t\t\ttext += \"\\tif e1 != 0 {\\n\"\n\t\t\t\ttext += \"\\t\\terr = errnoErr(e1)\\n\"\n\t\t\t\ttext += \"\\t}\\n\"\n\t\t\t}\n\t\t\ttext += \"\\treturn\\n\"\n\t\t\ttext += \"}\\n\\n\"\n\n\t\t\tif libc && !trampolines[libcFn] {\n\t\t\t\t// some system calls share a trampoline, like read and readlen.\n\t\t\t\ttrampolines[libcFn] = true\n\t\t\t\t// Declare assembly trampoline.\n\t\t\t\ttext += fmt.Sprintf(\"func libc_%s_trampoline()\\n\", libcFn)\n\t\t\t\t// Assembly trampoline calls the libc_* function, which this magic\n\t\t\t\t// redirects to use the function from libSystem.\n\t\t\t\ttext += fmt.Sprintf(\"//go:linkname libc_%s libc_%s\\n\", libcFn, libcFn)\n\t\t\t\ttext += fmt.Sprintf(\"//go:cgo_import_dynamic libc_%s %s \\\"/usr/lib/libSystem.B.dylib\\\"\\n\", libcFn, libcFn)\n\t\t\t\ttext += \"\\n\"\n\t\t\t}\n\t\t}\n\t\tif err := s.Err(); err != nil {\n\t\t\tfmt.Fprintf(os.Stderr, err.Error())\n\t\t\tos.Exit(1)\n\t\t}\n\t\tfile.Close()\n\t}\n\tfmt.Printf(srcTemplate, cmdLine(), buildTags(), text)\n}\n\nconst srcTemplate = `// %s\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build %s\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n%s\n`\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/mksyscall_aix_ppc.go",
    "content": "// Copyright 2019 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build ignore\n\n/*\nThis program reads a file containing function prototypes\n(like syscall_aix.go) and generates system call bodies.\nThe prototypes are marked by lines beginning with \"//sys\"\nand read like func declarations if //sys is replaced by func, but:\n\t* The parameter lists must give a name for each argument.\n\t  This includes return parameters.\n\t* The parameter lists must give a type for each argument:\n\t  the (x, y, z int) shorthand is not allowed.\n\t* If the return parameter is an error number, it must be named err.\n\t* If go func name needs to be different than its libc name,\n\t* or the function is not in libc, name could be specified\n\t* at the end, after \"=\" sign, like\n\t  //sys getsockopt(s int, level int, name int, val uintptr, vallen *_Socklen) (err error) = libsocket.getsockopt\n*/\npackage main\n\nimport (\n\t\"bufio\"\n\t\"flag\"\n\t\"fmt\"\n\t\"os\"\n\t\"regexp\"\n\t\"strings\"\n)\n\nvar (\n\tb32  = flag.Bool(\"b32\", false, \"32bit big-endian\")\n\tl32  = flag.Bool(\"l32\", false, \"32bit little-endian\")\n\taix  = flag.Bool(\"aix\", false, \"aix\")\n\ttags = flag.String(\"tags\", \"\", \"build tags\")\n)\n\n// cmdLine returns this programs's commandline arguments\nfunc cmdLine() string {\n\treturn \"go run mksyscall_aix_ppc.go \" + strings.Join(os.Args[1:], \" \")\n}\n\n// buildTags returns build tags\nfunc buildTags() string {\n\treturn *tags\n}\n\n// Param is function parameter\ntype Param struct {\n\tName string\n\tType string\n}\n\n// usage prints the program usage\nfunc usage() {\n\tfmt.Fprintf(os.Stderr, \"usage: go run mksyscall_aix_ppc.go [-b32 | -l32] [-tags x,y] [file ...]\\n\")\n\tos.Exit(1)\n}\n\n// parseParamList parses parameter list and returns a slice of parameters\nfunc parseParamList(list string) []string {\n\tlist = strings.TrimSpace(list)\n\tif list == \"\" {\n\t\treturn []string{}\n\t}\n\treturn regexp.MustCompile(`\\s*,\\s*`).Split(list, -1)\n}\n\n// parseParam splits a parameter into name and type\nfunc parseParam(p string) Param {\n\tps := regexp.MustCompile(`^(\\S*) (\\S*)$`).FindStringSubmatch(p)\n\tif ps == nil {\n\t\tfmt.Fprintf(os.Stderr, \"malformed parameter: %s\\n\", p)\n\t\tos.Exit(1)\n\t}\n\treturn Param{ps[1], ps[2]}\n}\n\nfunc main() {\n\tflag.Usage = usage\n\tflag.Parse()\n\tif len(flag.Args()) <= 0 {\n\t\tfmt.Fprintf(os.Stderr, \"no files to parse provided\\n\")\n\t\tusage()\n\t}\n\n\tendianness := \"\"\n\tif *b32 {\n\t\tendianness = \"big-endian\"\n\t} else if *l32 {\n\t\tendianness = \"little-endian\"\n\t}\n\n\tpack := \"\"\n\ttext := \"\"\n\tcExtern := \"/*\\n#include <stdint.h>\\n#include <stddef.h>\\n\"\n\tfor _, path := range flag.Args() {\n\t\tfile, err := os.Open(path)\n\t\tif err != nil {\n\t\t\tfmt.Fprintf(os.Stderr, err.Error())\n\t\t\tos.Exit(1)\n\t\t}\n\t\ts := bufio.NewScanner(file)\n\t\tfor s.Scan() {\n\t\t\tt := s.Text()\n\t\t\tt = strings.TrimSpace(t)\n\t\t\tt = regexp.MustCompile(`\\s+`).ReplaceAllString(t, ` `)\n\t\t\tif p := regexp.MustCompile(`^package (\\S+)$`).FindStringSubmatch(t); p != nil && pack == \"\" {\n\t\t\t\tpack = p[1]\n\t\t\t}\n\t\t\tnonblock := regexp.MustCompile(`^\\/\\/sysnb `).FindStringSubmatch(t)\n\t\t\tif regexp.MustCompile(`^\\/\\/sys `).FindStringSubmatch(t) == nil && nonblock == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// Line must be of the form\n\t\t\t//\tfunc Open(path string, mode int, perm int) (fd int, err error)\n\t\t\t// Split into name, in params, out params.\n\t\t\tf := regexp.MustCompile(`^\\/\\/sys(nb)? (\\w+)\\(([^()]*)\\)\\s*(?:\\(([^()]+)\\))?\\s*(?:=\\s*(?:(\\w*)\\.)?(\\w*))?$`).FindStringSubmatch(t)\n\t\t\tif f == nil {\n\t\t\t\tfmt.Fprintf(os.Stderr, \"%s:%s\\nmalformed //sys declaration\\n\", path, t)\n\t\t\t\tos.Exit(1)\n\t\t\t}\n\t\t\tfunct, inps, outps, modname, sysname := f[2], f[3], f[4], f[5], f[6]\n\n\t\t\t// Split argument lists on comma.\n\t\t\tin := parseParamList(inps)\n\t\t\tout := parseParamList(outps)\n\n\t\t\tinps = strings.Join(in, \", \")\n\t\t\toutps = strings.Join(out, \", \")\n\n\t\t\t// Try in vain to keep people from editing this file.\n\t\t\t// The theory is that they jump into the middle of the file\n\t\t\t// without reading the header.\n\t\t\ttext += \"// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\\n\\n\"\n\n\t\t\t// Check if value return, err return available\n\t\t\terrvar := \"\"\n\t\t\tretvar := \"\"\n\t\t\trettype := \"\"\n\t\t\tfor _, param := range out {\n\t\t\t\tp := parseParam(param)\n\t\t\t\tif p.Type == \"error\" {\n\t\t\t\t\terrvar = p.Name\n\t\t\t\t} else {\n\t\t\t\t\tretvar = p.Name\n\t\t\t\t\trettype = p.Type\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// System call name.\n\t\t\tif sysname == \"\" {\n\t\t\t\tsysname = funct\n\t\t\t}\n\t\t\tsysname = regexp.MustCompile(`([a-z])([A-Z])`).ReplaceAllString(sysname, `${1}_$2`)\n\t\t\tsysname = strings.ToLower(sysname) // All libc functions are lowercase.\n\n\t\t\tcRettype := \"\"\n\t\t\tif rettype == \"unsafe.Pointer\" {\n\t\t\t\tcRettype = \"uintptr_t\"\n\t\t\t} else if rettype == \"uintptr\" {\n\t\t\t\tcRettype = \"uintptr_t\"\n\t\t\t} else if regexp.MustCompile(`^_`).FindStringSubmatch(rettype) != nil {\n\t\t\t\tcRettype = \"uintptr_t\"\n\t\t\t} else if rettype == \"int\" {\n\t\t\t\tcRettype = \"int\"\n\t\t\t} else if rettype == \"int32\" {\n\t\t\t\tcRettype = \"int\"\n\t\t\t} else if rettype == \"int64\" {\n\t\t\t\tcRettype = \"long long\"\n\t\t\t} else if rettype == \"uint32\" {\n\t\t\t\tcRettype = \"unsigned int\"\n\t\t\t} else if rettype == \"uint64\" {\n\t\t\t\tcRettype = \"unsigned long long\"\n\t\t\t} else {\n\t\t\t\tcRettype = \"int\"\n\t\t\t}\n\t\t\tif sysname == \"exit\" {\n\t\t\t\tcRettype = \"void\"\n\t\t\t}\n\n\t\t\t// Change p.Types to c\n\t\t\tvar cIn []string\n\t\t\tfor _, param := range in {\n\t\t\t\tp := parseParam(param)\n\t\t\t\tif regexp.MustCompile(`^\\*`).FindStringSubmatch(p.Type) != nil {\n\t\t\t\t\tcIn = append(cIn, \"uintptr_t\")\n\t\t\t\t} else if p.Type == \"string\" {\n\t\t\t\t\tcIn = append(cIn, \"uintptr_t\")\n\t\t\t\t} else if regexp.MustCompile(`^\\[\\](.*)`).FindStringSubmatch(p.Type) != nil {\n\t\t\t\t\tcIn = append(cIn, \"uintptr_t\", \"size_t\")\n\t\t\t\t} else if p.Type == \"unsafe.Pointer\" {\n\t\t\t\t\tcIn = append(cIn, \"uintptr_t\")\n\t\t\t\t} else if p.Type == \"uintptr\" {\n\t\t\t\t\tcIn = append(cIn, \"uintptr_t\")\n\t\t\t\t} else if regexp.MustCompile(`^_`).FindStringSubmatch(p.Type) != nil {\n\t\t\t\t\tcIn = append(cIn, \"uintptr_t\")\n\t\t\t\t} else if p.Type == \"int\" {\n\t\t\t\t\tcIn = append(cIn, \"int\")\n\t\t\t\t} else if p.Type == \"int32\" {\n\t\t\t\t\tcIn = append(cIn, \"int\")\n\t\t\t\t} else if p.Type == \"int64\" {\n\t\t\t\t\tcIn = append(cIn, \"long long\")\n\t\t\t\t} else if p.Type == \"uint32\" {\n\t\t\t\t\tcIn = append(cIn, \"unsigned int\")\n\t\t\t\t} else if p.Type == \"uint64\" {\n\t\t\t\t\tcIn = append(cIn, \"unsigned long long\")\n\t\t\t\t} else {\n\t\t\t\t\tcIn = append(cIn, \"int\")\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif funct != \"fcntl\" && funct != \"FcntlInt\" && funct != \"readlen\" && funct != \"writelen\" {\n\t\t\t\tif sysname == \"select\" {\n\t\t\t\t\t// select is a keyword of Go. Its name is\n\t\t\t\t\t// changed to c_select.\n\t\t\t\t\tcExtern += \"#define c_select select\\n\"\n\t\t\t\t}\n\t\t\t\t// Imports of system calls from libc\n\t\t\t\tcExtern += fmt.Sprintf(\"%s %s\", cRettype, sysname)\n\t\t\t\tcIn := strings.Join(cIn, \", \")\n\t\t\t\tcExtern += fmt.Sprintf(\"(%s);\\n\", cIn)\n\t\t\t}\n\n\t\t\t// So file name.\n\t\t\tif *aix {\n\t\t\t\tif modname == \"\" {\n\t\t\t\t\tmodname = \"libc.a/shr_64.o\"\n\t\t\t\t} else {\n\t\t\t\t\tfmt.Fprintf(os.Stderr, \"%s: only syscall using libc are available\\n\", funct)\n\t\t\t\t\tos.Exit(1)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tstrconvfunc := \"C.CString\"\n\n\t\t\t// Go function header.\n\t\t\tif outps != \"\" {\n\t\t\t\toutps = fmt.Sprintf(\" (%s)\", outps)\n\t\t\t}\n\t\t\tif text != \"\" {\n\t\t\t\ttext += \"\\n\"\n\t\t\t}\n\n\t\t\ttext += fmt.Sprintf(\"func %s(%s)%s {\\n\", funct, strings.Join(in, \", \"), outps)\n\n\t\t\t// Prepare arguments to Syscall.\n\t\t\tvar args []string\n\t\t\tn := 0\n\t\t\targN := 0\n\t\t\tfor _, param := range in {\n\t\t\t\tp := parseParam(param)\n\t\t\t\tif regexp.MustCompile(`^\\*`).FindStringSubmatch(p.Type) != nil {\n\t\t\t\t\targs = append(args, \"C.uintptr_t(uintptr(unsafe.Pointer(\"+p.Name+\")))\")\n\t\t\t\t} else if p.Type == \"string\" && errvar != \"\" {\n\t\t\t\t\ttext += fmt.Sprintf(\"\\t_p%d := uintptr(unsafe.Pointer(%s(%s)))\\n\", n, strconvfunc, p.Name)\n\t\t\t\t\targs = append(args, fmt.Sprintf(\"C.uintptr_t(_p%d)\", n))\n\t\t\t\t\tn++\n\t\t\t\t} else if p.Type == \"string\" {\n\t\t\t\t\tfmt.Fprintf(os.Stderr, path+\":\"+funct+\" uses string arguments, but has no error return\\n\")\n\t\t\t\t\ttext += fmt.Sprintf(\"\\t_p%d := uintptr(unsafe.Pointer(%s(%s)))\\n\", n, strconvfunc, p.Name)\n\t\t\t\t\targs = append(args, fmt.Sprintf(\"C.uintptr_t(_p%d)\", n))\n\t\t\t\t\tn++\n\t\t\t\t} else if m := regexp.MustCompile(`^\\[\\](.*)`).FindStringSubmatch(p.Type); m != nil {\n\t\t\t\t\t// Convert slice into pointer, length.\n\t\t\t\t\t// Have to be careful not to take address of &a[0] if len == 0:\n\t\t\t\t\t// pass nil in that case.\n\t\t\t\t\ttext += fmt.Sprintf(\"\\tvar _p%d *%s\\n\", n, m[1])\n\t\t\t\t\ttext += fmt.Sprintf(\"\\tif len(%s) > 0 {\\n\\t\\t_p%d = &%s[0]\\n\\t}\\n\", p.Name, n, p.Name)\n\t\t\t\t\targs = append(args, fmt.Sprintf(\"C.uintptr_t(uintptr(unsafe.Pointer(_p%d)))\", n))\n\t\t\t\t\tn++\n\t\t\t\t\ttext += fmt.Sprintf(\"\\tvar _p%d int\\n\", n)\n\t\t\t\t\ttext += fmt.Sprintf(\"\\t_p%d = len(%s)\\n\", n, p.Name)\n\t\t\t\t\targs = append(args, fmt.Sprintf(\"C.size_t(_p%d)\", n))\n\t\t\t\t\tn++\n\t\t\t\t} else if p.Type == \"int64\" && endianness != \"\" {\n\t\t\t\t\tif endianness == \"big-endian\" {\n\t\t\t\t\t\targs = append(args, fmt.Sprintf(\"uintptr(%s>>32)\", p.Name), fmt.Sprintf(\"uintptr(%s)\", p.Name))\n\t\t\t\t\t} else {\n\t\t\t\t\t\targs = append(args, fmt.Sprintf(\"uintptr(%s)\", p.Name), fmt.Sprintf(\"uintptr(%s>>32)\", p.Name))\n\t\t\t\t\t}\n\t\t\t\t\tn++\n\t\t\t\t} else if p.Type == \"bool\" {\n\t\t\t\t\ttext += fmt.Sprintf(\"\\tvar _p%d uint32\\n\", n)\n\t\t\t\t\ttext += fmt.Sprintf(\"\\tif %s {\\n\\t\\t_p%d = 1\\n\\t} else {\\n\\t\\t_p%d = 0\\n\\t}\\n\", p.Name, n, n)\n\t\t\t\t\targs = append(args, fmt.Sprintf(\"_p%d\", n))\n\t\t\t\t} else if regexp.MustCompile(`^_`).FindStringSubmatch(p.Type) != nil {\n\t\t\t\t\targs = append(args, fmt.Sprintf(\"C.uintptr_t(uintptr(%s))\", p.Name))\n\t\t\t\t} else if p.Type == \"unsafe.Pointer\" {\n\t\t\t\t\targs = append(args, fmt.Sprintf(\"C.uintptr_t(uintptr(%s))\", p.Name))\n\t\t\t\t} else if p.Type == \"int\" {\n\t\t\t\t\tif (argN == 2) && ((funct == \"readlen\") || (funct == \"writelen\")) {\n\t\t\t\t\t\targs = append(args, fmt.Sprintf(\"C.size_t(%s)\", p.Name))\n\t\t\t\t\t} else if argN == 0 && funct == \"fcntl\" {\n\t\t\t\t\t\targs = append(args, fmt.Sprintf(\"C.uintptr_t(%s)\", p.Name))\n\t\t\t\t\t} else if (argN == 2) && ((funct == \"fcntl\") || (funct == \"FcntlInt\")) {\n\t\t\t\t\t\targs = append(args, fmt.Sprintf(\"C.uintptr_t(%s)\", p.Name))\n\t\t\t\t\t} else {\n\t\t\t\t\t\targs = append(args, fmt.Sprintf(\"C.int(%s)\", p.Name))\n\t\t\t\t\t}\n\t\t\t\t} else if p.Type == \"int32\" {\n\t\t\t\t\targs = append(args, fmt.Sprintf(\"C.int(%s)\", p.Name))\n\t\t\t\t} else if p.Type == \"int64\" {\n\t\t\t\t\targs = append(args, fmt.Sprintf(\"C.longlong(%s)\", p.Name))\n\t\t\t\t} else if p.Type == \"uint32\" {\n\t\t\t\t\targs = append(args, fmt.Sprintf(\"C.uint(%s)\", p.Name))\n\t\t\t\t} else if p.Type == \"uint64\" {\n\t\t\t\t\targs = append(args, fmt.Sprintf(\"C.ulonglong(%s)\", p.Name))\n\t\t\t\t} else if p.Type == \"uintptr\" {\n\t\t\t\t\targs = append(args, fmt.Sprintf(\"C.uintptr_t(%s)\", p.Name))\n\t\t\t\t} else {\n\t\t\t\t\targs = append(args, fmt.Sprintf(\"C.int(%s)\", p.Name))\n\t\t\t\t}\n\t\t\t\targN++\n\t\t\t}\n\n\t\t\t// Actual call.\n\t\t\targlist := strings.Join(args, \", \")\n\t\t\tcall := \"\"\n\t\t\tif sysname == \"exit\" {\n\t\t\t\tif errvar != \"\" {\n\t\t\t\t\tcall += \"er :=\"\n\t\t\t\t} else {\n\t\t\t\t\tcall += \"\"\n\t\t\t\t}\n\t\t\t} else if errvar != \"\" {\n\t\t\t\tcall += \"r0,er :=\"\n\t\t\t} else if retvar != \"\" {\n\t\t\t\tcall += \"r0,_ :=\"\n\t\t\t} else {\n\t\t\t\tcall += \"\"\n\t\t\t}\n\t\t\tif sysname == \"select\" {\n\t\t\t\t// select is a keyword of Go. Its name is\n\t\t\t\t// changed to c_select.\n\t\t\t\tcall += fmt.Sprintf(\"C.c_%s(%s)\", sysname, arglist)\n\t\t\t} else {\n\t\t\t\tcall += fmt.Sprintf(\"C.%s(%s)\", sysname, arglist)\n\t\t\t}\n\n\t\t\t// Assign return values.\n\t\t\tbody := \"\"\n\t\t\tfor i := 0; i < len(out); i++ {\n\t\t\t\tp := parseParam(out[i])\n\t\t\t\treg := \"\"\n\t\t\t\tif p.Name == \"err\" {\n\t\t\t\t\treg = \"e1\"\n\t\t\t\t} else {\n\t\t\t\t\treg = \"r0\"\n\t\t\t\t}\n\t\t\t\tif reg != \"e1\" {\n\t\t\t\t\tbody += fmt.Sprintf(\"\\t%s = %s(%s)\\n\", p.Name, p.Type, reg)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// verify return\n\t\t\tif sysname != \"exit\" && errvar != \"\" {\n\t\t\t\tif regexp.MustCompile(`^uintptr`).FindStringSubmatch(cRettype) != nil {\n\t\t\t\t\tbody += \"\\tif (uintptr(r0) ==^uintptr(0) && er != nil) {\\n\"\n\t\t\t\t\tbody += fmt.Sprintf(\"\\t\\t%s = er\\n\", errvar)\n\t\t\t\t\tbody += \"\\t}\\n\"\n\t\t\t\t} else {\n\t\t\t\t\tbody += \"\\tif (r0 ==-1 && er != nil) {\\n\"\n\t\t\t\t\tbody += fmt.Sprintf(\"\\t\\t%s = er\\n\", errvar)\n\t\t\t\t\tbody += \"\\t}\\n\"\n\t\t\t\t}\n\t\t\t} else if errvar != \"\" {\n\t\t\t\tbody += \"\\tif (er != nil) {\\n\"\n\t\t\t\tbody += fmt.Sprintf(\"\\t\\t%s = er\\n\", errvar)\n\t\t\t\tbody += \"\\t}\\n\"\n\t\t\t}\n\n\t\t\ttext += fmt.Sprintf(\"\\t%s\\n\", call)\n\t\t\ttext += body\n\n\t\t\ttext += \"\\treturn\\n\"\n\t\t\ttext += \"}\\n\"\n\t\t}\n\t\tif err := s.Err(); err != nil {\n\t\t\tfmt.Fprintf(os.Stderr, err.Error())\n\t\t\tos.Exit(1)\n\t\t}\n\t\tfile.Close()\n\t}\n\timp := \"\"\n\tif pack != \"unix\" {\n\t\timp = \"import \\\"golang.org/x/sys/unix\\\"\\n\"\n\n\t}\n\tfmt.Printf(srcTemplate, cmdLine(), buildTags(), pack, cExtern, imp, text)\n}\n\nconst srcTemplate = `// %s\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build %s\n\npackage %s\n\n\n%s\n*/\nimport \"C\"\nimport (\n\t\"unsafe\"\n)\n\n\n%s\n\n%s\n`\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/mksyscall_aix_ppc64.go",
    "content": "// Copyright 2019 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build ignore\n\n/*\nThis program reads a file containing function prototypes\n(like syscall_aix.go) and generates system call bodies.\nThe prototypes are marked by lines beginning with \"//sys\"\nand read like func declarations if //sys is replaced by func, but:\n\t* The parameter lists must give a name for each argument.\n\t  This includes return parameters.\n\t* The parameter lists must give a type for each argument:\n\t  the (x, y, z int) shorthand is not allowed.\n\t* If the return parameter is an error number, it must be named err.\n\t* If go func name needs to be different than its libc name,\n\t* or the function is not in libc, name could be specified\n\t* at the end, after \"=\" sign, like\n\t  //sys getsockopt(s int, level int, name int, val uintptr, vallen *_Socklen) (err error) = libsocket.getsockopt\n\n\nThis program will generate three files and handle both gc and gccgo implementation:\n  - zsyscall_aix_ppc64.go: the common part of each implementation (error handler, pointer creation)\n  - zsyscall_aix_ppc64_gc.go: gc part with //go_cgo_import_dynamic and a call to syscall6\n  - zsyscall_aix_ppc64_gccgo.go: gccgo part with C function and conversion to C type.\n\n The generated code looks like this\n\nzsyscall_aix_ppc64.go\nfunc asyscall(...) (n int, err error) {\n\t // Pointer Creation\n\t r1, e1 := callasyscall(...)\n\t // Type Conversion\n\t // Error Handler\n\t return\n}\n\nzsyscall_aix_ppc64_gc.go\n//go:cgo_import_dynamic libc_asyscall asyscall \"libc.a/shr_64.o\"\n//go:linkname libc_asyscall libc_asyscall\nvar asyscall syscallFunc\n\nfunc callasyscall(...) (r1 uintptr, e1 Errno) {\n\t r1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_asyscall)), \"nb_args\", ... )\n\t return\n}\n\nzsyscall_aix_ppc64_ggcgo.go\n\n// int asyscall(...)\n\nimport \"C\"\n\nfunc callasyscall(...) (r1 uintptr, e1 Errno) {\n\t r1 = uintptr(C.asyscall(...))\n\t e1 = syscall.GetErrno()\n\t return\n}\n*/\n\npackage main\n\nimport (\n\t\"bufio\"\n\t\"flag\"\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"os\"\n\t\"regexp\"\n\t\"strings\"\n)\n\nvar (\n\tb32  = flag.Bool(\"b32\", false, \"32bit big-endian\")\n\tl32  = flag.Bool(\"l32\", false, \"32bit little-endian\")\n\taix  = flag.Bool(\"aix\", false, \"aix\")\n\ttags = flag.String(\"tags\", \"\", \"build tags\")\n)\n\n// cmdLine returns this programs's commandline arguments\nfunc cmdLine() string {\n\treturn \"go run mksyscall_aix_ppc64.go \" + strings.Join(os.Args[1:], \" \")\n}\n\n// buildTags returns build tags\nfunc buildTags() string {\n\treturn *tags\n}\n\n// Param is function parameter\ntype Param struct {\n\tName string\n\tType string\n}\n\n// usage prints the program usage\nfunc usage() {\n\tfmt.Fprintf(os.Stderr, \"usage: go run mksyscall_aix_ppc64.go [-b32 | -l32] [-tags x,y] [file ...]\\n\")\n\tos.Exit(1)\n}\n\n// parseParamList parses parameter list and returns a slice of parameters\nfunc parseParamList(list string) []string {\n\tlist = strings.TrimSpace(list)\n\tif list == \"\" {\n\t\treturn []string{}\n\t}\n\treturn regexp.MustCompile(`\\s*,\\s*`).Split(list, -1)\n}\n\n// parseParam splits a parameter into name and type\nfunc parseParam(p string) Param {\n\tps := regexp.MustCompile(`^(\\S*) (\\S*)$`).FindStringSubmatch(p)\n\tif ps == nil {\n\t\tfmt.Fprintf(os.Stderr, \"malformed parameter: %s\\n\", p)\n\t\tos.Exit(1)\n\t}\n\treturn Param{ps[1], ps[2]}\n}\n\nfunc main() {\n\tflag.Usage = usage\n\tflag.Parse()\n\tif len(flag.Args()) <= 0 {\n\t\tfmt.Fprintf(os.Stderr, \"no files to parse provided\\n\")\n\t\tusage()\n\t}\n\n\tendianness := \"\"\n\tif *b32 {\n\t\tendianness = \"big-endian\"\n\t} else if *l32 {\n\t\tendianness = \"little-endian\"\n\t}\n\n\tpack := \"\"\n\t// GCCGO\n\ttextgccgo := \"\"\n\tcExtern := \"/*\\n#include <stdint.h>\\n\"\n\t// GC\n\ttextgc := \"\"\n\tdynimports := \"\"\n\tlinknames := \"\"\n\tvar vars []string\n\t// COMMON\n\ttextcommon := \"\"\n\tfor _, path := range flag.Args() {\n\t\tfile, err := os.Open(path)\n\t\tif err != nil {\n\t\t\tfmt.Fprintf(os.Stderr, err.Error())\n\t\t\tos.Exit(1)\n\t\t}\n\t\ts := bufio.NewScanner(file)\n\t\tfor s.Scan() {\n\t\t\tt := s.Text()\n\t\t\tt = strings.TrimSpace(t)\n\t\t\tt = regexp.MustCompile(`\\s+`).ReplaceAllString(t, ` `)\n\t\t\tif p := regexp.MustCompile(`^package (\\S+)$`).FindStringSubmatch(t); p != nil && pack == \"\" {\n\t\t\t\tpack = p[1]\n\t\t\t}\n\t\t\tnonblock := regexp.MustCompile(`^\\/\\/sysnb `).FindStringSubmatch(t)\n\t\t\tif regexp.MustCompile(`^\\/\\/sys `).FindStringSubmatch(t) == nil && nonblock == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// Line must be of the form\n\t\t\t//\tfunc Open(path string, mode int, perm int) (fd int, err error)\n\t\t\t// Split into name, in params, out params.\n\t\t\tf := regexp.MustCompile(`^\\/\\/sys(nb)? (\\w+)\\(([^()]*)\\)\\s*(?:\\(([^()]+)\\))?\\s*(?:=\\s*(?:(\\w*)\\.)?(\\w*))?$`).FindStringSubmatch(t)\n\t\t\tif f == nil {\n\t\t\t\tfmt.Fprintf(os.Stderr, \"%s:%s\\nmalformed //sys declaration\\n\", path, t)\n\t\t\t\tos.Exit(1)\n\t\t\t}\n\t\t\tfunct, inps, outps, modname, sysname := f[2], f[3], f[4], f[5], f[6]\n\n\t\t\t// Split argument lists on comma.\n\t\t\tin := parseParamList(inps)\n\t\t\tout := parseParamList(outps)\n\n\t\t\tinps = strings.Join(in, \", \")\n\t\t\toutps = strings.Join(out, \", \")\n\n\t\t\tif sysname == \"\" {\n\t\t\t\tsysname = funct\n\t\t\t}\n\n\t\t\tonlyCommon := false\n\t\t\tif funct == \"readlen\" || funct == \"writelen\" || funct == \"FcntlInt\" || funct == \"FcntlFlock\" {\n\t\t\t\t// This function call another syscall which is already implemented.\n\t\t\t\t// Therefore, the gc and gccgo part must not be generated.\n\t\t\t\tonlyCommon = true\n\t\t\t}\n\n\t\t\t// Try in vain to keep people from editing this file.\n\t\t\t// The theory is that they jump into the middle of the file\n\t\t\t// without reading the header.\n\n\t\t\ttextcommon += \"// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\\n\\n\"\n\t\t\tif !onlyCommon {\n\t\t\t\ttextgccgo += \"// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\\n\\n\"\n\t\t\t\ttextgc += \"// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\\n\\n\"\n\t\t\t}\n\n\t\t\t// Check if value return, err return available\n\t\t\terrvar := \"\"\n\t\t\trettype := \"\"\n\t\t\tfor _, param := range out {\n\t\t\t\tp := parseParam(param)\n\t\t\t\tif p.Type == \"error\" {\n\t\t\t\t\terrvar = p.Name\n\t\t\t\t} else {\n\t\t\t\t\trettype = p.Type\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tsysname = regexp.MustCompile(`([a-z])([A-Z])`).ReplaceAllString(sysname, `${1}_$2`)\n\t\t\tsysname = strings.ToLower(sysname) // All libc functions are lowercase.\n\n\t\t\t// GCCGO Prototype return type\n\t\t\tcRettype := \"\"\n\t\t\tif rettype == \"unsafe.Pointer\" {\n\t\t\t\tcRettype = \"uintptr_t\"\n\t\t\t} else if rettype == \"uintptr\" {\n\t\t\t\tcRettype = \"uintptr_t\"\n\t\t\t} else if regexp.MustCompile(`^_`).FindStringSubmatch(rettype) != nil {\n\t\t\t\tcRettype = \"uintptr_t\"\n\t\t\t} else if rettype == \"int\" {\n\t\t\t\tcRettype = \"int\"\n\t\t\t} else if rettype == \"int32\" {\n\t\t\t\tcRettype = \"int\"\n\t\t\t} else if rettype == \"int64\" {\n\t\t\t\tcRettype = \"long long\"\n\t\t\t} else if rettype == \"uint32\" {\n\t\t\t\tcRettype = \"unsigned int\"\n\t\t\t} else if rettype == \"uint64\" {\n\t\t\t\tcRettype = \"unsigned long long\"\n\t\t\t} else {\n\t\t\t\tcRettype = \"int\"\n\t\t\t}\n\t\t\tif sysname == \"exit\" {\n\t\t\t\tcRettype = \"void\"\n\t\t\t}\n\n\t\t\t// GCCGO Prototype arguments type\n\t\t\tvar cIn []string\n\t\t\tfor i, param := range in {\n\t\t\t\tp := parseParam(param)\n\t\t\t\tif regexp.MustCompile(`^\\*`).FindStringSubmatch(p.Type) != nil {\n\t\t\t\t\tcIn = append(cIn, \"uintptr_t\")\n\t\t\t\t} else if p.Type == \"string\" {\n\t\t\t\t\tcIn = append(cIn, \"uintptr_t\")\n\t\t\t\t} else if regexp.MustCompile(`^\\[\\](.*)`).FindStringSubmatch(p.Type) != nil {\n\t\t\t\t\tcIn = append(cIn, \"uintptr_t\", \"size_t\")\n\t\t\t\t} else if p.Type == \"unsafe.Pointer\" {\n\t\t\t\t\tcIn = append(cIn, \"uintptr_t\")\n\t\t\t\t} else if p.Type == \"uintptr\" {\n\t\t\t\t\tcIn = append(cIn, \"uintptr_t\")\n\t\t\t\t} else if regexp.MustCompile(`^_`).FindStringSubmatch(p.Type) != nil {\n\t\t\t\t\tcIn = append(cIn, \"uintptr_t\")\n\t\t\t\t} else if p.Type == \"int\" {\n\t\t\t\t\tif (i == 0 || i == 2) && funct == \"fcntl\" {\n\t\t\t\t\t\t// These fcntl arguments needs to be uintptr to be able to call FcntlInt and FcntlFlock\n\t\t\t\t\t\tcIn = append(cIn, \"uintptr_t\")\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcIn = append(cIn, \"int\")\n\t\t\t\t\t}\n\n\t\t\t\t} else if p.Type == \"int32\" {\n\t\t\t\t\tcIn = append(cIn, \"int\")\n\t\t\t\t} else if p.Type == \"int64\" {\n\t\t\t\t\tcIn = append(cIn, \"long long\")\n\t\t\t\t} else if p.Type == \"uint32\" {\n\t\t\t\t\tcIn = append(cIn, \"unsigned int\")\n\t\t\t\t} else if p.Type == \"uint64\" {\n\t\t\t\t\tcIn = append(cIn, \"unsigned long long\")\n\t\t\t\t} else {\n\t\t\t\t\tcIn = append(cIn, \"int\")\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif !onlyCommon {\n\t\t\t\t// GCCGO Prototype Generation\n\t\t\t\t// Imports of system calls from libc\n\t\t\t\tif sysname == \"select\" {\n\t\t\t\t\t// select is a keyword of Go. Its name is\n\t\t\t\t\t// changed to c_select.\n\t\t\t\t\tcExtern += \"#define c_select select\\n\"\n\t\t\t\t}\n\t\t\t\tcExtern += fmt.Sprintf(\"%s %s\", cRettype, sysname)\n\t\t\t\tcIn := strings.Join(cIn, \", \")\n\t\t\t\tcExtern += fmt.Sprintf(\"(%s);\\n\", cIn)\n\t\t\t}\n\t\t\t// GC Library name\n\t\t\tif modname == \"\" {\n\t\t\t\tmodname = \"libc.a/shr_64.o\"\n\t\t\t} else {\n\t\t\t\tfmt.Fprintf(os.Stderr, \"%s: only syscall using libc are available\\n\", funct)\n\t\t\t\tos.Exit(1)\n\t\t\t}\n\t\t\tsysvarname := fmt.Sprintf(\"libc_%s\", sysname)\n\n\t\t\tif !onlyCommon {\n\t\t\t\t// GC Runtime import of function to allow cross-platform builds.\n\t\t\t\tdynimports += fmt.Sprintf(\"//go:cgo_import_dynamic %s %s \\\"%s\\\"\\n\", sysvarname, sysname, modname)\n\t\t\t\t// GC Link symbol to proc address variable.\n\t\t\t\tlinknames += fmt.Sprintf(\"//go:linkname %s %s\\n\", sysvarname, sysvarname)\n\t\t\t\t// GC Library proc address variable.\n\t\t\t\tvars = append(vars, sysvarname)\n\t\t\t}\n\n\t\t\tstrconvfunc := \"BytePtrFromString\"\n\t\t\tstrconvtype := \"*byte\"\n\n\t\t\t// Go function header.\n\t\t\tif outps != \"\" {\n\t\t\t\toutps = fmt.Sprintf(\" (%s)\", outps)\n\t\t\t}\n\t\t\tif textcommon != \"\" {\n\t\t\t\ttextcommon += \"\\n\"\n\t\t\t}\n\n\t\t\ttextcommon += fmt.Sprintf(\"func %s(%s)%s {\\n\", funct, strings.Join(in, \", \"), outps)\n\n\t\t\t// Prepare arguments tocall.\n\t\t\tvar argscommon []string // Arguments in the common part\n\t\t\tvar argscall []string   // Arguments for call prototype\n\t\t\tvar argsgc []string     // Arguments for gc call (with syscall6)\n\t\t\tvar argsgccgo []string  // Arguments for gccgo call (with C.name_of_syscall)\n\t\t\tn := 0\n\t\t\targN := 0\n\t\t\tfor _, param := range in {\n\t\t\t\tp := parseParam(param)\n\t\t\t\tif regexp.MustCompile(`^\\*`).FindStringSubmatch(p.Type) != nil {\n\t\t\t\t\targscommon = append(argscommon, fmt.Sprintf(\"uintptr(unsafe.Pointer(%s))\", p.Name))\n\t\t\t\t\targscall = append(argscall, fmt.Sprintf(\"%s uintptr\", p.Name))\n\t\t\t\t\targsgc = append(argsgc, p.Name)\n\t\t\t\t\targsgccgo = append(argsgccgo, fmt.Sprintf(\"C.uintptr_t(%s)\", p.Name))\n\t\t\t\t} else if p.Type == \"string\" && errvar != \"\" {\n\t\t\t\t\ttextcommon += fmt.Sprintf(\"\\tvar _p%d %s\\n\", n, strconvtype)\n\t\t\t\t\ttextcommon += fmt.Sprintf(\"\\t_p%d, %s = %s(%s)\\n\", n, errvar, strconvfunc, p.Name)\n\t\t\t\t\ttextcommon += fmt.Sprintf(\"\\tif %s != nil {\\n\\t\\treturn\\n\\t}\\n\", errvar)\n\n\t\t\t\t\targscommon = append(argscommon, fmt.Sprintf(\"uintptr(unsafe.Pointer(_p%d))\", n))\n\t\t\t\t\targscall = append(argscall, fmt.Sprintf(\"_p%d uintptr \", n))\n\t\t\t\t\targsgc = append(argsgc, fmt.Sprintf(\"_p%d\", n))\n\t\t\t\t\targsgccgo = append(argsgccgo, fmt.Sprintf(\"C.uintptr_t(_p%d)\", n))\n\t\t\t\t\tn++\n\t\t\t\t} else if p.Type == \"string\" {\n\t\t\t\t\tfmt.Fprintf(os.Stderr, path+\":\"+funct+\" uses string arguments, but has no error return\\n\")\n\t\t\t\t\ttextcommon += fmt.Sprintf(\"\\tvar _p%d %s\\n\", n, strconvtype)\n\t\t\t\t\ttextcommon += fmt.Sprintf(\"\\t_p%d, %s = %s(%s)\\n\", n, errvar, strconvfunc, p.Name)\n\t\t\t\t\ttextcommon += fmt.Sprintf(\"\\tif %s != nil {\\n\\t\\treturn\\n\\t}\\n\", errvar)\n\n\t\t\t\t\targscommon = append(argscommon, fmt.Sprintf(\"uintptr(unsafe.Pointer(_p%d))\", n))\n\t\t\t\t\targscall = append(argscall, fmt.Sprintf(\"_p%d uintptr\", n))\n\t\t\t\t\targsgc = append(argsgc, fmt.Sprintf(\"_p%d\", n))\n\t\t\t\t\targsgccgo = append(argsgccgo, fmt.Sprintf(\"C.uintptr_t(_p%d)\", n))\n\t\t\t\t\tn++\n\t\t\t\t} else if m := regexp.MustCompile(`^\\[\\](.*)`).FindStringSubmatch(p.Type); m != nil {\n\t\t\t\t\t// Convert slice into pointer, length.\n\t\t\t\t\t// Have to be careful not to take address of &a[0] if len == 0:\n\t\t\t\t\t// pass nil in that case.\n\t\t\t\t\ttextcommon += fmt.Sprintf(\"\\tvar _p%d *%s\\n\", n, m[1])\n\t\t\t\t\ttextcommon += fmt.Sprintf(\"\\tif len(%s) > 0 {\\n\\t\\t_p%d = &%s[0]\\n\\t}\\n\", p.Name, n, p.Name)\n\t\t\t\t\targscommon = append(argscommon, fmt.Sprintf(\"uintptr(unsafe.Pointer(_p%d))\", n), fmt.Sprintf(\"len(%s)\", p.Name))\n\t\t\t\t\targscall = append(argscall, fmt.Sprintf(\"_p%d uintptr\", n), fmt.Sprintf(\"_lenp%d int\", n))\n\t\t\t\t\targsgc = append(argsgc, fmt.Sprintf(\"_p%d\", n), fmt.Sprintf(\"uintptr(_lenp%d)\", n))\n\t\t\t\t\targsgccgo = append(argsgccgo, fmt.Sprintf(\"C.uintptr_t(_p%d)\", n), fmt.Sprintf(\"C.size_t(_lenp%d)\", n))\n\t\t\t\t\tn++\n\t\t\t\t} else if p.Type == \"int64\" && endianness != \"\" {\n\t\t\t\t\tfmt.Fprintf(os.Stderr, path+\":\"+funct+\" uses int64 with 32 bits mode. Case not yet implemented\\n\")\n\t\t\t\t} else if p.Type == \"bool\" {\n\t\t\t\t\tfmt.Fprintf(os.Stderr, path+\":\"+funct+\" uses bool. Case not yet implemented\\n\")\n\t\t\t\t} else if regexp.MustCompile(`^_`).FindStringSubmatch(p.Type) != nil || p.Type == \"unsafe.Pointer\" {\n\t\t\t\t\targscommon = append(argscommon, fmt.Sprintf(\"uintptr(%s)\", p.Name))\n\t\t\t\t\targscall = append(argscall, fmt.Sprintf(\"%s uintptr\", p.Name))\n\t\t\t\t\targsgc = append(argsgc, p.Name)\n\t\t\t\t\targsgccgo = append(argsgccgo, fmt.Sprintf(\"C.uintptr_t(%s)\", p.Name))\n\t\t\t\t} else if p.Type == \"int\" {\n\t\t\t\t\tif (argN == 0 || argN == 2) && ((funct == \"fcntl\") || (funct == \"FcntlInt\") || (funct == \"FcntlFlock\")) {\n\t\t\t\t\t\t// These fcntl arguments need to be uintptr to be able to call FcntlInt and FcntlFlock\n\t\t\t\t\t\targscommon = append(argscommon, fmt.Sprintf(\"uintptr(%s)\", p.Name))\n\t\t\t\t\t\targscall = append(argscall, fmt.Sprintf(\"%s uintptr\", p.Name))\n\t\t\t\t\t\targsgc = append(argsgc, p.Name)\n\t\t\t\t\t\targsgccgo = append(argsgccgo, fmt.Sprintf(\"C.uintptr_t(%s)\", p.Name))\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\targscommon = append(argscommon, p.Name)\n\t\t\t\t\t\targscall = append(argscall, fmt.Sprintf(\"%s int\", p.Name))\n\t\t\t\t\t\targsgc = append(argsgc, fmt.Sprintf(\"uintptr(%s)\", p.Name))\n\t\t\t\t\t\targsgccgo = append(argsgccgo, fmt.Sprintf(\"C.int(%s)\", p.Name))\n\t\t\t\t\t}\n\t\t\t\t} else if p.Type == \"int32\" {\n\t\t\t\t\targscommon = append(argscommon, p.Name)\n\t\t\t\t\targscall = append(argscall, fmt.Sprintf(\"%s int32\", p.Name))\n\t\t\t\t\targsgc = append(argsgc, fmt.Sprintf(\"uintptr(%s)\", p.Name))\n\t\t\t\t\targsgccgo = append(argsgccgo, fmt.Sprintf(\"C.int(%s)\", p.Name))\n\t\t\t\t} else if p.Type == \"int64\" {\n\t\t\t\t\targscommon = append(argscommon, p.Name)\n\t\t\t\t\targscall = append(argscall, fmt.Sprintf(\"%s int64\", p.Name))\n\t\t\t\t\targsgc = append(argsgc, fmt.Sprintf(\"uintptr(%s)\", p.Name))\n\t\t\t\t\targsgccgo = append(argsgccgo, fmt.Sprintf(\"C.longlong(%s)\", p.Name))\n\t\t\t\t} else if p.Type == \"uint32\" {\n\t\t\t\t\targscommon = append(argscommon, p.Name)\n\t\t\t\t\targscall = append(argscall, fmt.Sprintf(\"%s uint32\", p.Name))\n\t\t\t\t\targsgc = append(argsgc, fmt.Sprintf(\"uintptr(%s)\", p.Name))\n\t\t\t\t\targsgccgo = append(argsgccgo, fmt.Sprintf(\"C.uint(%s)\", p.Name))\n\t\t\t\t} else if p.Type == \"uint64\" {\n\t\t\t\t\targscommon = append(argscommon, p.Name)\n\t\t\t\t\targscall = append(argscall, fmt.Sprintf(\"%s uint64\", p.Name))\n\t\t\t\t\targsgc = append(argsgc, fmt.Sprintf(\"uintptr(%s)\", p.Name))\n\t\t\t\t\targsgccgo = append(argsgccgo, fmt.Sprintf(\"C.ulonglong(%s)\", p.Name))\n\t\t\t\t} else if p.Type == \"uintptr\" {\n\t\t\t\t\targscommon = append(argscommon, p.Name)\n\t\t\t\t\targscall = append(argscall, fmt.Sprintf(\"%s uintptr\", p.Name))\n\t\t\t\t\targsgc = append(argsgc, p.Name)\n\t\t\t\t\targsgccgo = append(argsgccgo, fmt.Sprintf(\"C.uintptr_t(%s)\", p.Name))\n\t\t\t\t} else {\n\t\t\t\t\targscommon = append(argscommon, fmt.Sprintf(\"int(%s)\", p.Name))\n\t\t\t\t\targscall = append(argscall, fmt.Sprintf(\"%s int\", p.Name))\n\t\t\t\t\targsgc = append(argsgc, fmt.Sprintf(\"uintptr(%s)\", p.Name))\n\t\t\t\t\targsgccgo = append(argsgccgo, fmt.Sprintf(\"C.int(%s)\", p.Name))\n\t\t\t\t}\n\t\t\t\targN++\n\t\t\t}\n\t\t\tnargs := len(argsgc)\n\n\t\t\t// COMMON function generation\n\t\t\targscommonlist := strings.Join(argscommon, \", \")\n\t\t\tcallcommon := fmt.Sprintf(\"call%s(%s)\", sysname, argscommonlist)\n\t\t\tret := []string{\"_\", \"_\"}\n\t\t\tbody := \"\"\n\t\t\tdoErrno := false\n\t\t\tfor i := 0; i < len(out); i++ {\n\t\t\t\tp := parseParam(out[i])\n\t\t\t\treg := \"\"\n\t\t\t\tif p.Name == \"err\" {\n\t\t\t\t\treg = \"e1\"\n\t\t\t\t\tret[1] = reg\n\t\t\t\t\tdoErrno = true\n\t\t\t\t} else {\n\t\t\t\t\treg = \"r0\"\n\t\t\t\t\tret[0] = reg\n\t\t\t\t}\n\t\t\t\tif p.Type == \"bool\" {\n\t\t\t\t\treg = fmt.Sprintf(\"%s != 0\", reg)\n\t\t\t\t}\n\t\t\t\tif reg != \"e1\" {\n\t\t\t\t\tbody += fmt.Sprintf(\"\\t%s = %s(%s)\\n\", p.Name, p.Type, reg)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ret[0] == \"_\" && ret[1] == \"_\" {\n\t\t\t\ttextcommon += fmt.Sprintf(\"\\t%s\\n\", callcommon)\n\t\t\t} else {\n\t\t\t\ttextcommon += fmt.Sprintf(\"\\t%s, %s := %s\\n\", ret[0], ret[1], callcommon)\n\t\t\t}\n\t\t\ttextcommon += body\n\n\t\t\tif doErrno {\n\t\t\t\ttextcommon += \"\\tif e1 != 0 {\\n\"\n\t\t\t\ttextcommon += \"\\t\\terr = errnoErr(e1)\\n\"\n\t\t\t\ttextcommon += \"\\t}\\n\"\n\t\t\t}\n\t\t\ttextcommon += \"\\treturn\\n\"\n\t\t\ttextcommon += \"}\\n\"\n\n\t\t\tif onlyCommon {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// CALL Prototype\n\t\t\tcallProto := fmt.Sprintf(\"func call%s(%s) (r1 uintptr, e1 Errno) {\\n\", sysname, strings.Join(argscall, \", \"))\n\n\t\t\t// GC function generation\n\t\t\tasm := \"syscall6\"\n\t\t\tif nonblock != nil {\n\t\t\t\tasm = \"rawSyscall6\"\n\t\t\t}\n\n\t\t\tif len(argsgc) <= 6 {\n\t\t\t\tfor len(argsgc) < 6 {\n\t\t\t\t\targsgc = append(argsgc, \"0\")\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfmt.Fprintf(os.Stderr, \"%s: too many arguments to system call\", funct)\n\t\t\t\tos.Exit(1)\n\t\t\t}\n\t\t\targsgclist := strings.Join(argsgc, \", \")\n\t\t\tcallgc := fmt.Sprintf(\"%s(uintptr(unsafe.Pointer(&%s)), %d, %s)\", asm, sysvarname, nargs, argsgclist)\n\n\t\t\ttextgc += callProto\n\t\t\ttextgc += fmt.Sprintf(\"\\tr1, _, e1 = %s\\n\", callgc)\n\t\t\ttextgc += \"\\treturn\\n}\\n\"\n\n\t\t\t// GCCGO function generation\n\t\t\targsgccgolist := strings.Join(argsgccgo, \", \")\n\t\t\tvar callgccgo string\n\t\t\tif sysname == \"select\" {\n\t\t\t\t// select is a keyword of Go. Its name is\n\t\t\t\t// changed to c_select.\n\t\t\t\tcallgccgo = fmt.Sprintf(\"C.c_%s(%s)\", sysname, argsgccgolist)\n\t\t\t} else {\n\t\t\t\tcallgccgo = fmt.Sprintf(\"C.%s(%s)\", sysname, argsgccgolist)\n\t\t\t}\n\t\t\ttextgccgo += callProto\n\t\t\ttextgccgo += fmt.Sprintf(\"\\tr1 = uintptr(%s)\\n\", callgccgo)\n\t\t\ttextgccgo += \"\\te1 = syscall.GetErrno()\\n\"\n\t\t\ttextgccgo += \"\\treturn\\n}\\n\"\n\t\t}\n\t\tif err := s.Err(); err != nil {\n\t\t\tfmt.Fprintf(os.Stderr, err.Error())\n\t\t\tos.Exit(1)\n\t\t}\n\t\tfile.Close()\n\t}\n\timp := \"\"\n\tif pack != \"unix\" {\n\t\timp = \"import \\\"golang.org/x/sys/unix\\\"\\n\"\n\n\t}\n\n\t// Print zsyscall_aix_ppc64.go\n\terr := ioutil.WriteFile(\"zsyscall_aix_ppc64.go\",\n\t\t[]byte(fmt.Sprintf(srcTemplate1, cmdLine(), buildTags(), pack, imp, textcommon)),\n\t\t0644)\n\tif err != nil {\n\t\tfmt.Fprintf(os.Stderr, err.Error())\n\t\tos.Exit(1)\n\t}\n\n\t// Print zsyscall_aix_ppc64_gc.go\n\tvardecls := \"\\t\" + strings.Join(vars, \",\\n\\t\")\n\tvardecls += \" syscallFunc\"\n\terr = ioutil.WriteFile(\"zsyscall_aix_ppc64_gc.go\",\n\t\t[]byte(fmt.Sprintf(srcTemplate2, cmdLine(), buildTags(), pack, imp, dynimports, linknames, vardecls, textgc)),\n\t\t0644)\n\tif err != nil {\n\t\tfmt.Fprintf(os.Stderr, err.Error())\n\t\tos.Exit(1)\n\t}\n\n\t// Print zsyscall_aix_ppc64_gccgo.go\n\terr = ioutil.WriteFile(\"zsyscall_aix_ppc64_gccgo.go\",\n\t\t[]byte(fmt.Sprintf(srcTemplate3, cmdLine(), buildTags(), pack, cExtern, imp, textgccgo)),\n\t\t0644)\n\tif err != nil {\n\t\tfmt.Fprintf(os.Stderr, err.Error())\n\t\tos.Exit(1)\n\t}\n}\n\nconst srcTemplate1 = `// %s\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build %s\n\npackage %s\n\nimport (\n\t\"unsafe\"\n)\n\n\n%s\n\n%s\n`\nconst srcTemplate2 = `// %s\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build %s\n// +build !gccgo\n\npackage %s\n\nimport (\n\t\"unsafe\"\n)\n%s\n%s\n%s\ntype syscallFunc uintptr\n\nvar (\n%s\n)\n\n// Implemented in runtime/syscall_aix.go.\nfunc rawSyscall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)\nfunc syscall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)\n\n%s\n`\nconst srcTemplate3 = `// %s\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build %s\n// +build gccgo\n\npackage %s\n\n%s\n*/\nimport \"C\"\nimport (\n\t\"syscall\"\n)\n\n\n%s\n\n%s\n`\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/mksyscall_solaris.go",
    "content": "// Copyright 2019 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build ignore\n\n/*\n This program reads a file containing function prototypes\n (like syscall_solaris.go) and generates system call bodies.\n The prototypes are marked by lines beginning with \"//sys\"\n and read like func declarations if //sys is replaced by func, but:\n\t* The parameter lists must give a name for each argument.\n\t  This includes return parameters.\n\t* The parameter lists must give a type for each argument:\n\t  the (x, y, z int) shorthand is not allowed.\n\t* If the return parameter is an error number, it must be named err.\n\t* If go func name needs to be different than its libc name,\n\t* or the function is not in libc, name could be specified\n\t* at the end, after \"=\" sign, like\n\t  //sys getsockopt(s int, level int, name int, val uintptr, vallen *_Socklen) (err error) = libsocket.getsockopt\n*/\n\npackage main\n\nimport (\n\t\"bufio\"\n\t\"flag\"\n\t\"fmt\"\n\t\"os\"\n\t\"regexp\"\n\t\"strings\"\n)\n\nvar (\n\tb32  = flag.Bool(\"b32\", false, \"32bit big-endian\")\n\tl32  = flag.Bool(\"l32\", false, \"32bit little-endian\")\n\ttags = flag.String(\"tags\", \"\", \"build tags\")\n)\n\n// cmdLine returns this programs's commandline arguments\nfunc cmdLine() string {\n\treturn \"go run mksyscall_solaris.go \" + strings.Join(os.Args[1:], \" \")\n}\n\n// buildTags returns build tags\nfunc buildTags() string {\n\treturn *tags\n}\n\n// Param is function parameter\ntype Param struct {\n\tName string\n\tType string\n}\n\n// usage prints the program usage\nfunc usage() {\n\tfmt.Fprintf(os.Stderr, \"usage: go run mksyscall_solaris.go [-b32 | -l32] [-tags x,y] [file ...]\\n\")\n\tos.Exit(1)\n}\n\n// parseParamList parses parameter list and returns a slice of parameters\nfunc parseParamList(list string) []string {\n\tlist = strings.TrimSpace(list)\n\tif list == \"\" {\n\t\treturn []string{}\n\t}\n\treturn regexp.MustCompile(`\\s*,\\s*`).Split(list, -1)\n}\n\n// parseParam splits a parameter into name and type\nfunc parseParam(p string) Param {\n\tps := regexp.MustCompile(`^(\\S*) (\\S*)$`).FindStringSubmatch(p)\n\tif ps == nil {\n\t\tfmt.Fprintf(os.Stderr, \"malformed parameter: %s\\n\", p)\n\t\tos.Exit(1)\n\t}\n\treturn Param{ps[1], ps[2]}\n}\n\nfunc main() {\n\tflag.Usage = usage\n\tflag.Parse()\n\tif len(flag.Args()) <= 0 {\n\t\tfmt.Fprintf(os.Stderr, \"no files to parse provided\\n\")\n\t\tusage()\n\t}\n\n\tendianness := \"\"\n\tif *b32 {\n\t\tendianness = \"big-endian\"\n\t} else if *l32 {\n\t\tendianness = \"little-endian\"\n\t}\n\n\tpack := \"\"\n\ttext := \"\"\n\tdynimports := \"\"\n\tlinknames := \"\"\n\tvar vars []string\n\tfor _, path := range flag.Args() {\n\t\tfile, err := os.Open(path)\n\t\tif err != nil {\n\t\t\tfmt.Fprintf(os.Stderr, err.Error())\n\t\t\tos.Exit(1)\n\t\t}\n\t\ts := bufio.NewScanner(file)\n\t\tfor s.Scan() {\n\t\t\tt := s.Text()\n\t\t\tt = strings.TrimSpace(t)\n\t\t\tt = regexp.MustCompile(`\\s+`).ReplaceAllString(t, ` `)\n\t\t\tif p := regexp.MustCompile(`^package (\\S+)$`).FindStringSubmatch(t); p != nil && pack == \"\" {\n\t\t\t\tpack = p[1]\n\t\t\t}\n\t\t\tnonblock := regexp.MustCompile(`^\\/\\/sysnb `).FindStringSubmatch(t)\n\t\t\tif regexp.MustCompile(`^\\/\\/sys `).FindStringSubmatch(t) == nil && nonblock == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// Line must be of the form\n\t\t\t//\tfunc Open(path string, mode int, perm int) (fd int, err error)\n\t\t\t// Split into name, in params, out params.\n\t\t\tf := regexp.MustCompile(`^\\/\\/sys(nb)? (\\w+)\\(([^()]*)\\)\\s*(?:\\(([^()]+)\\))?\\s*(?:=\\s*(?:(\\w*)\\.)?(\\w*))?$`).FindStringSubmatch(t)\n\t\t\tif f == nil {\n\t\t\t\tfmt.Fprintf(os.Stderr, \"%s:%s\\nmalformed //sys declaration\\n\", path, t)\n\t\t\t\tos.Exit(1)\n\t\t\t}\n\t\t\tfunct, inps, outps, modname, sysname := f[2], f[3], f[4], f[5], f[6]\n\n\t\t\t// Split argument lists on comma.\n\t\t\tin := parseParamList(inps)\n\t\t\tout := parseParamList(outps)\n\n\t\t\tinps = strings.Join(in, \", \")\n\t\t\toutps = strings.Join(out, \", \")\n\n\t\t\t// Try in vain to keep people from editing this file.\n\t\t\t// The theory is that they jump into the middle of the file\n\t\t\t// without reading the header.\n\t\t\ttext += \"// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\\n\\n\"\n\n\t\t\t// So file name.\n\t\t\tif modname == \"\" {\n\t\t\t\tmodname = \"libc\"\n\t\t\t}\n\n\t\t\t// System call name.\n\t\t\tif sysname == \"\" {\n\t\t\t\tsysname = funct\n\t\t\t}\n\n\t\t\t// System call pointer variable name.\n\t\t\tsysvarname := fmt.Sprintf(\"proc%s\", sysname)\n\n\t\t\tstrconvfunc := \"BytePtrFromString\"\n\t\t\tstrconvtype := \"*byte\"\n\n\t\t\tsysname = strings.ToLower(sysname) // All libc functions are lowercase.\n\n\t\t\t// Runtime import of function to allow cross-platform builds.\n\t\t\tdynimports += fmt.Sprintf(\"//go:cgo_import_dynamic libc_%s %s \\\"%s.so\\\"\\n\", sysname, sysname, modname)\n\t\t\t// Link symbol to proc address variable.\n\t\t\tlinknames += fmt.Sprintf(\"//go:linkname %s libc_%s\\n\", sysvarname, sysname)\n\t\t\t// Library proc address variable.\n\t\t\tvars = append(vars, sysvarname)\n\n\t\t\t// Go function header.\n\t\t\toutlist := strings.Join(out, \", \")\n\t\t\tif outlist != \"\" {\n\t\t\t\toutlist = fmt.Sprintf(\" (%s)\", outlist)\n\t\t\t}\n\t\t\tif text != \"\" {\n\t\t\t\ttext += \"\\n\"\n\t\t\t}\n\t\t\ttext += fmt.Sprintf(\"func %s(%s)%s {\\n\", funct, strings.Join(in, \", \"), outlist)\n\n\t\t\t// Check if err return available\n\t\t\terrvar := \"\"\n\t\t\tfor _, param := range out {\n\t\t\t\tp := parseParam(param)\n\t\t\t\tif p.Type == \"error\" {\n\t\t\t\t\terrvar = p.Name\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Prepare arguments to Syscall.\n\t\t\tvar args []string\n\t\t\tn := 0\n\t\t\tfor _, param := range in {\n\t\t\t\tp := parseParam(param)\n\t\t\t\tif regexp.MustCompile(`^\\*`).FindStringSubmatch(p.Type) != nil {\n\t\t\t\t\targs = append(args, \"uintptr(unsafe.Pointer(\"+p.Name+\"))\")\n\t\t\t\t} else if p.Type == \"string\" && errvar != \"\" {\n\t\t\t\t\ttext += fmt.Sprintf(\"\\tvar _p%d %s\\n\", n, strconvtype)\n\t\t\t\t\ttext += fmt.Sprintf(\"\\t_p%d, %s = %s(%s)\\n\", n, errvar, strconvfunc, p.Name)\n\t\t\t\t\ttext += fmt.Sprintf(\"\\tif %s != nil {\\n\\t\\treturn\\n\\t}\\n\", errvar)\n\t\t\t\t\targs = append(args, fmt.Sprintf(\"uintptr(unsafe.Pointer(_p%d))\", n))\n\t\t\t\t\tn++\n\t\t\t\t} else if p.Type == \"string\" {\n\t\t\t\t\tfmt.Fprintf(os.Stderr, path+\":\"+funct+\" uses string arguments, but has no error return\\n\")\n\t\t\t\t\ttext += fmt.Sprintf(\"\\tvar _p%d %s\\n\", n, strconvtype)\n\t\t\t\t\ttext += fmt.Sprintf(\"\\t_p%d, _ = %s(%s)\\n\", n, strconvfunc, p.Name)\n\t\t\t\t\targs = append(args, fmt.Sprintf(\"uintptr(unsafe.Pointer(_p%d))\", n))\n\t\t\t\t\tn++\n\t\t\t\t} else if s := regexp.MustCompile(`^\\[\\](.*)`).FindStringSubmatch(p.Type); s != nil {\n\t\t\t\t\t// Convert slice into pointer, length.\n\t\t\t\t\t// Have to be careful not to take address of &a[0] if len == 0:\n\t\t\t\t\t// pass nil in that case.\n\t\t\t\t\ttext += fmt.Sprintf(\"\\tvar _p%d *%s\\n\", n, s[1])\n\t\t\t\t\ttext += fmt.Sprintf(\"\\tif len(%s) > 0 {\\n\\t\\t_p%d = &%s[0]\\n\\t}\\n\", p.Name, n, p.Name)\n\t\t\t\t\targs = append(args, fmt.Sprintf(\"uintptr(unsafe.Pointer(_p%d))\", n), fmt.Sprintf(\"uintptr(len(%s))\", p.Name))\n\t\t\t\t\tn++\n\t\t\t\t} else if p.Type == \"int64\" && endianness != \"\" {\n\t\t\t\t\tif endianness == \"big-endian\" {\n\t\t\t\t\t\targs = append(args, fmt.Sprintf(\"uintptr(%s>>32)\", p.Name), fmt.Sprintf(\"uintptr(%s)\", p.Name))\n\t\t\t\t\t} else {\n\t\t\t\t\t\targs = append(args, fmt.Sprintf(\"uintptr(%s)\", p.Name), fmt.Sprintf(\"uintptr(%s>>32)\", p.Name))\n\t\t\t\t\t}\n\t\t\t\t} else if p.Type == \"bool\" {\n\t\t\t\t\ttext += fmt.Sprintf(\"\\tvar _p%d uint32\\n\", n)\n\t\t\t\t\ttext += fmt.Sprintf(\"\\tif %s {\\n\\t\\t_p%d = 1\\n\\t} else {\\n\\t\\t_p%d = 0\\n\\t}\\n\", p.Name, n, n)\n\t\t\t\t\targs = append(args, fmt.Sprintf(\"uintptr(_p%d)\", n))\n\t\t\t\t\tn++\n\t\t\t\t} else {\n\t\t\t\t\targs = append(args, fmt.Sprintf(\"uintptr(%s)\", p.Name))\n\t\t\t\t}\n\t\t\t}\n\t\t\tnargs := len(args)\n\n\t\t\t// Determine which form to use; pad args with zeros.\n\t\t\tasm := \"sysvicall6\"\n\t\t\tif nonblock != nil {\n\t\t\t\tasm = \"rawSysvicall6\"\n\t\t\t}\n\t\t\tif len(args) <= 6 {\n\t\t\t\tfor len(args) < 6 {\n\t\t\t\t\targs = append(args, \"0\")\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfmt.Fprintf(os.Stderr, \"%s: too many arguments to system call\\n\", path)\n\t\t\t\tos.Exit(1)\n\t\t\t}\n\n\t\t\t// Actual call.\n\t\t\targlist := strings.Join(args, \", \")\n\t\t\tcall := fmt.Sprintf(\"%s(uintptr(unsafe.Pointer(&%s)), %d, %s)\", asm, sysvarname, nargs, arglist)\n\n\t\t\t// Assign return values.\n\t\t\tbody := \"\"\n\t\t\tret := []string{\"_\", \"_\", \"_\"}\n\t\t\tdoErrno := false\n\t\t\tfor i := 0; i < len(out); i++ {\n\t\t\t\tp := parseParam(out[i])\n\t\t\t\treg := \"\"\n\t\t\t\tif p.Name == \"err\" {\n\t\t\t\t\treg = \"e1\"\n\t\t\t\t\tret[2] = reg\n\t\t\t\t\tdoErrno = true\n\t\t\t\t} else {\n\t\t\t\t\treg = fmt.Sprintf(\"r%d\", i)\n\t\t\t\t\tret[i] = reg\n\t\t\t\t}\n\t\t\t\tif p.Type == \"bool\" {\n\t\t\t\t\treg = fmt.Sprintf(\"%d != 0\", reg)\n\t\t\t\t}\n\t\t\t\tif p.Type == \"int64\" && endianness != \"\" {\n\t\t\t\t\t// 64-bit number in r1:r0 or r0:r1.\n\t\t\t\t\tif i+2 > len(out) {\n\t\t\t\t\t\tfmt.Fprintf(os.Stderr, \"%s: not enough registers for int64 return\\n\", path)\n\t\t\t\t\t\tos.Exit(1)\n\t\t\t\t\t}\n\t\t\t\t\tif endianness == \"big-endian\" {\n\t\t\t\t\t\treg = fmt.Sprintf(\"int64(r%d)<<32 | int64(r%d)\", i, i+1)\n\t\t\t\t\t} else {\n\t\t\t\t\t\treg = fmt.Sprintf(\"int64(r%d)<<32 | int64(r%d)\", i+1, i)\n\t\t\t\t\t}\n\t\t\t\t\tret[i] = fmt.Sprintf(\"r%d\", i)\n\t\t\t\t\tret[i+1] = fmt.Sprintf(\"r%d\", i+1)\n\t\t\t\t}\n\t\t\t\tif reg != \"e1\" {\n\t\t\t\t\tbody += fmt.Sprintf(\"\\t%s = %s(%s)\\n\", p.Name, p.Type, reg)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ret[0] == \"_\" && ret[1] == \"_\" && ret[2] == \"_\" {\n\t\t\t\ttext += fmt.Sprintf(\"\\t%s\\n\", call)\n\t\t\t} else {\n\t\t\t\ttext += fmt.Sprintf(\"\\t%s, %s, %s := %s\\n\", ret[0], ret[1], ret[2], call)\n\t\t\t}\n\t\t\ttext += body\n\n\t\t\tif doErrno {\n\t\t\t\ttext += \"\\tif e1 != 0 {\\n\"\n\t\t\t\ttext += \"\\t\\terr = e1\\n\"\n\t\t\t\ttext += \"\\t}\\n\"\n\t\t\t}\n\t\t\ttext += \"\\treturn\\n\"\n\t\t\ttext += \"}\\n\"\n\t\t}\n\t\tif err := s.Err(); err != nil {\n\t\t\tfmt.Fprintf(os.Stderr, err.Error())\n\t\t\tos.Exit(1)\n\t\t}\n\t\tfile.Close()\n\t}\n\timp := \"\"\n\tif pack != \"unix\" {\n\t\timp = \"import \\\"golang.org/x/sys/unix\\\"\\n\"\n\n\t}\n\tvardecls := \"\\t\" + strings.Join(vars, \",\\n\\t\")\n\tvardecls += \" syscallFunc\"\n\tfmt.Printf(srcTemplate, cmdLine(), buildTags(), pack, imp, dynimports, linknames, vardecls, text)\n}\n\nconst srcTemplate = `// %s\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build %s\n\npackage %s\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n%s\n%s\n%s\nvar (\n%s\t\n)\n\n%s\n`\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/mksysctl_openbsd.go",
    "content": "// Copyright 2019 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build ignore\n\n// Parse the header files for OpenBSD and generate a Go usable sysctl MIB.\n//\n// Build a MIB with each entry being an array containing the level, type and\n// a hash that will contain additional entries if the current entry is a node.\n// We then walk this MIB and create a flattened sysctl name to OID hash.\n\npackage main\n\nimport (\n\t\"bufio\"\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"regexp\"\n\t\"sort\"\n\t\"strings\"\n)\n\nvar (\n\tgoos, goarch string\n)\n\n// cmdLine returns this programs's commandline arguments.\nfunc cmdLine() string {\n\treturn \"go run mksysctl_openbsd.go \" + strings.Join(os.Args[1:], \" \")\n}\n\n// buildTags returns build tags.\nfunc buildTags() string {\n\treturn fmt.Sprintf(\"%s,%s\", goarch, goos)\n}\n\n// reMatch performs regular expression match and stores the substring slice to value pointed by m.\nfunc reMatch(re *regexp.Regexp, str string, m *[]string) bool {\n\t*m = re.FindStringSubmatch(str)\n\tif *m != nil {\n\t\treturn true\n\t}\n\treturn false\n}\n\ntype nodeElement struct {\n\tn  int\n\tt  string\n\tpE *map[string]nodeElement\n}\n\nvar (\n\tdebugEnabled bool\n\tmib          map[string]nodeElement\n\tnode         *map[string]nodeElement\n\tnodeMap      map[string]string\n\tsysCtl       []string\n)\n\nvar (\n\tctlNames1RE = regexp.MustCompile(`^#define\\s+(CTL_NAMES)\\s+{`)\n\tctlNames2RE = regexp.MustCompile(`^#define\\s+(CTL_(.*)_NAMES)\\s+{`)\n\tctlNames3RE = regexp.MustCompile(`^#define\\s+((.*)CTL_NAMES)\\s+{`)\n\tnetInetRE   = regexp.MustCompile(`^netinet/`)\n\tnetInet6RE  = regexp.MustCompile(`^netinet6/`)\n\tnetRE       = regexp.MustCompile(`^net/`)\n\tbracesRE    = regexp.MustCompile(`{.*}`)\n\tctlTypeRE   = regexp.MustCompile(`{\\s+\"(\\w+)\",\\s+(CTLTYPE_[A-Z]+)\\s+}`)\n\tfsNetKernRE = regexp.MustCompile(`^(fs|net|kern)_`)\n)\n\nfunc debug(s string) {\n\tif debugEnabled {\n\t\tfmt.Fprintln(os.Stderr, s)\n\t}\n}\n\n// Walk the MIB and build a sysctl name to OID mapping.\nfunc buildSysctl(pNode *map[string]nodeElement, name string, oid []int) {\n\tlNode := pNode // local copy of pointer to node\n\tvar keys []string\n\tfor k := range *lNode {\n\t\tkeys = append(keys, k)\n\t}\n\tsort.Strings(keys)\n\n\tfor _, key := range keys {\n\t\tnodename := name\n\t\tif name != \"\" {\n\t\t\tnodename += \".\"\n\t\t}\n\t\tnodename += key\n\n\t\tnodeoid := append(oid, (*pNode)[key].n)\n\n\t\tif (*pNode)[key].t == `CTLTYPE_NODE` {\n\t\t\tif _, ok := nodeMap[nodename]; ok {\n\t\t\t\tlNode = &mib\n\t\t\t\tctlName := nodeMap[nodename]\n\t\t\t\tfor _, part := range strings.Split(ctlName, \".\") {\n\t\t\t\t\tlNode = ((*lNode)[part]).pE\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tlNode = (*pNode)[key].pE\n\t\t\t}\n\t\t\tbuildSysctl(lNode, nodename, nodeoid)\n\t\t} else if (*pNode)[key].t != \"\" {\n\t\t\toidStr := []string{}\n\t\t\tfor j := range nodeoid {\n\t\t\t\toidStr = append(oidStr, fmt.Sprintf(\"%d\", nodeoid[j]))\n\t\t\t}\n\t\t\ttext := \"\\t{ \\\"\" + nodename + \"\\\", []_C_int{ \" + strings.Join(oidStr, \", \") + \" } }, \\n\"\n\t\t\tsysCtl = append(sysCtl, text)\n\t\t}\n\t}\n}\n\nfunc main() {\n\t// Get the OS (using GOOS_TARGET if it exist)\n\tgoos = os.Getenv(\"GOOS_TARGET\")\n\tif goos == \"\" {\n\t\tgoos = os.Getenv(\"GOOS\")\n\t}\n\t// Get the architecture (using GOARCH_TARGET if it exists)\n\tgoarch = os.Getenv(\"GOARCH_TARGET\")\n\tif goarch == \"\" {\n\t\tgoarch = os.Getenv(\"GOARCH\")\n\t}\n\t// Check if GOOS and GOARCH environment variables are defined\n\tif goarch == \"\" || goos == \"\" {\n\t\tfmt.Fprintf(os.Stderr, \"GOARCH or GOOS not defined in environment\\n\")\n\t\tos.Exit(1)\n\t}\n\n\tmib = make(map[string]nodeElement)\n\theaders := [...]string{\n\t\t`sys/sysctl.h`,\n\t\t`sys/socket.h`,\n\t\t`sys/tty.h`,\n\t\t`sys/malloc.h`,\n\t\t`sys/mount.h`,\n\t\t`sys/namei.h`,\n\t\t`sys/sem.h`,\n\t\t`sys/shm.h`,\n\t\t`sys/vmmeter.h`,\n\t\t`uvm/uvmexp.h`,\n\t\t`uvm/uvm_param.h`,\n\t\t`uvm/uvm_swap_encrypt.h`,\n\t\t`ddb/db_var.h`,\n\t\t`net/if.h`,\n\t\t`net/if_pfsync.h`,\n\t\t`net/pipex.h`,\n\t\t`netinet/in.h`,\n\t\t`netinet/icmp_var.h`,\n\t\t`netinet/igmp_var.h`,\n\t\t`netinet/ip_ah.h`,\n\t\t`netinet/ip_carp.h`,\n\t\t`netinet/ip_divert.h`,\n\t\t`netinet/ip_esp.h`,\n\t\t`netinet/ip_ether.h`,\n\t\t`netinet/ip_gre.h`,\n\t\t`netinet/ip_ipcomp.h`,\n\t\t`netinet/ip_ipip.h`,\n\t\t`netinet/pim_var.h`,\n\t\t`netinet/tcp_var.h`,\n\t\t`netinet/udp_var.h`,\n\t\t`netinet6/in6.h`,\n\t\t`netinet6/ip6_divert.h`,\n\t\t`netinet6/pim6_var.h`,\n\t\t`netinet/icmp6.h`,\n\t\t`netmpls/mpls.h`,\n\t}\n\n\tctls := [...]string{\n\t\t`kern`,\n\t\t`vm`,\n\t\t`fs`,\n\t\t`net`,\n\t\t//debug\t\t\t/* Special handling required */\n\t\t`hw`,\n\t\t//machdep\t\t/* Arch specific */\n\t\t`user`,\n\t\t`ddb`,\n\t\t//vfs\t\t\t/* Special handling required */\n\t\t`fs.posix`,\n\t\t`kern.forkstat`,\n\t\t`kern.intrcnt`,\n\t\t`kern.malloc`,\n\t\t`kern.nchstats`,\n\t\t`kern.seminfo`,\n\t\t`kern.shminfo`,\n\t\t`kern.timecounter`,\n\t\t`kern.tty`,\n\t\t`kern.watchdog`,\n\t\t`net.bpf`,\n\t\t`net.ifq`,\n\t\t`net.inet`,\n\t\t`net.inet.ah`,\n\t\t`net.inet.carp`,\n\t\t`net.inet.divert`,\n\t\t`net.inet.esp`,\n\t\t`net.inet.etherip`,\n\t\t`net.inet.gre`,\n\t\t`net.inet.icmp`,\n\t\t`net.inet.igmp`,\n\t\t`net.inet.ip`,\n\t\t`net.inet.ip.ifq`,\n\t\t`net.inet.ipcomp`,\n\t\t`net.inet.ipip`,\n\t\t`net.inet.mobileip`,\n\t\t`net.inet.pfsync`,\n\t\t`net.inet.pim`,\n\t\t`net.inet.tcp`,\n\t\t`net.inet.udp`,\n\t\t`net.inet6`,\n\t\t`net.inet6.divert`,\n\t\t`net.inet6.ip6`,\n\t\t`net.inet6.icmp6`,\n\t\t`net.inet6.pim6`,\n\t\t`net.inet6.tcp6`,\n\t\t`net.inet6.udp6`,\n\t\t`net.mpls`,\n\t\t`net.mpls.ifq`,\n\t\t`net.key`,\n\t\t`net.pflow`,\n\t\t`net.pfsync`,\n\t\t`net.pipex`,\n\t\t`net.rt`,\n\t\t`vm.swapencrypt`,\n\t\t//vfsgenctl\t\t/* Special handling required */\n\t}\n\n\t// Node name \"fixups\"\n\tctlMap := map[string]string{\n\t\t\"ipproto\":             \"net.inet\",\n\t\t\"net.inet.ipproto\":    \"net.inet\",\n\t\t\"net.inet6.ipv6proto\": \"net.inet6\",\n\t\t\"net.inet6.ipv6\":      \"net.inet6.ip6\",\n\t\t\"net.inet.icmpv6\":     \"net.inet6.icmp6\",\n\t\t\"net.inet6.divert6\":   \"net.inet6.divert\",\n\t\t\"net.inet6.tcp6\":      \"net.inet.tcp\",\n\t\t\"net.inet6.udp6\":      \"net.inet.udp\",\n\t\t\"mpls\":                \"net.mpls\",\n\t\t\"swpenc\":              \"vm.swapencrypt\",\n\t}\n\n\t// Node mappings\n\tnodeMap = map[string]string{\n\t\t\"net.inet.ip.ifq\": \"net.ifq\",\n\t\t\"net.inet.pfsync\": \"net.pfsync\",\n\t\t\"net.mpls.ifq\":    \"net.ifq\",\n\t}\n\n\tmCtls := make(map[string]bool)\n\tfor _, ctl := range ctls {\n\t\tmCtls[ctl] = true\n\t}\n\n\tfor _, header := range headers {\n\t\tdebug(\"Processing \" + header)\n\t\tfile, err := os.Open(filepath.Join(\"/usr/include\", header))\n\t\tif err != nil {\n\t\t\tfmt.Fprintf(os.Stderr, \"%v\\n\", err)\n\t\t\tos.Exit(1)\n\t\t}\n\t\ts := bufio.NewScanner(file)\n\t\tfor s.Scan() {\n\t\t\tvar sub []string\n\t\t\tif reMatch(ctlNames1RE, s.Text(), &sub) ||\n\t\t\t\treMatch(ctlNames2RE, s.Text(), &sub) ||\n\t\t\t\treMatch(ctlNames3RE, s.Text(), &sub) {\n\t\t\t\tif sub[1] == `CTL_NAMES` {\n\t\t\t\t\t// Top level.\n\t\t\t\t\tnode = &mib\n\t\t\t\t} else {\n\t\t\t\t\t// Node.\n\t\t\t\t\tnodename := strings.ToLower(sub[2])\n\t\t\t\t\tctlName := \"\"\n\t\t\t\t\tif reMatch(netInetRE, header, &sub) {\n\t\t\t\t\t\tctlName = \"net.inet.\" + nodename\n\t\t\t\t\t} else if reMatch(netInet6RE, header, &sub) {\n\t\t\t\t\t\tctlName = \"net.inet6.\" + nodename\n\t\t\t\t\t} else if reMatch(netRE, header, &sub) {\n\t\t\t\t\t\tctlName = \"net.\" + nodename\n\t\t\t\t\t} else {\n\t\t\t\t\t\tctlName = nodename\n\t\t\t\t\t\tctlName = fsNetKernRE.ReplaceAllString(ctlName, `$1.`)\n\t\t\t\t\t}\n\n\t\t\t\t\tif val, ok := ctlMap[ctlName]; ok {\n\t\t\t\t\t\tctlName = val\n\t\t\t\t\t}\n\t\t\t\t\tif _, ok := mCtls[ctlName]; !ok {\n\t\t\t\t\t\tdebug(\"Ignoring \" + ctlName + \"...\")\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\n\t\t\t\t\t// Walk down from the top of the MIB.\n\t\t\t\t\tnode = &mib\n\t\t\t\t\tfor _, part := range strings.Split(ctlName, \".\") {\n\t\t\t\t\t\tif _, ok := (*node)[part]; !ok {\n\t\t\t\t\t\t\tdebug(\"Missing node \" + part)\n\t\t\t\t\t\t\t(*node)[part] = nodeElement{n: 0, t: \"\", pE: &map[string]nodeElement{}}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tnode = (*node)[part].pE\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Populate current node with entries.\n\t\t\t\ti := -1\n\t\t\t\tfor !strings.HasPrefix(s.Text(), \"}\") {\n\t\t\t\t\ts.Scan()\n\t\t\t\t\tif reMatch(bracesRE, s.Text(), &sub) {\n\t\t\t\t\t\ti++\n\t\t\t\t\t}\n\t\t\t\t\tif !reMatch(ctlTypeRE, s.Text(), &sub) {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\t(*node)[sub[1]] = nodeElement{n: i, t: sub[2], pE: &map[string]nodeElement{}}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\terr = s.Err()\n\t\tif err != nil {\n\t\t\tfmt.Fprintf(os.Stderr, \"%v\\n\", err)\n\t\t\tos.Exit(1)\n\t\t}\n\t\tfile.Close()\n\t}\n\tbuildSysctl(&mib, \"\", []int{})\n\n\tsort.Strings(sysCtl)\n\ttext := strings.Join(sysCtl, \"\")\n\n\tfmt.Printf(srcTemplate, cmdLine(), buildTags(), text)\n}\n\nconst srcTemplate = `// %s\n// Code generated by the command above; DO NOT EDIT.\n\n// +build %s\n\npackage unix\n\ntype mibentry struct {\n\tctlname string\n\tctloid []_C_int\n}\n\nvar sysctlMib = []mibentry {\n%s\n}\n`\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/mksysnum.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build ignore\n\n// Generate system call table for DragonFly, NetBSD,\n// FreeBSD, OpenBSD or Darwin from master list\n// (for example, /usr/src/sys/kern/syscalls.master or\n// sys/syscall.h).\npackage main\n\nimport (\n\t\"bufio\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"net/http\"\n\t\"os\"\n\t\"regexp\"\n\t\"strings\"\n)\n\nvar (\n\tgoos, goarch string\n)\n\n// cmdLine returns this programs's commandline arguments\nfunc cmdLine() string {\n\treturn \"go run mksysnum.go \" + strings.Join(os.Args[1:], \" \")\n}\n\n// buildTags returns build tags\nfunc buildTags() string {\n\treturn fmt.Sprintf(\"%s,%s\", goarch, goos)\n}\n\nfunc checkErr(err error) {\n\tif err != nil {\n\t\tfmt.Fprintf(os.Stderr, \"%v\\n\", err)\n\t\tos.Exit(1)\n\t}\n}\n\n// source string and substring slice for regexp\ntype re struct {\n\tstr string   // source string\n\tsub []string // matched sub-string\n}\n\n// Match performs regular expression match\nfunc (r *re) Match(exp string) bool {\n\tr.sub = regexp.MustCompile(exp).FindStringSubmatch(r.str)\n\tif r.sub != nil {\n\t\treturn true\n\t}\n\treturn false\n}\n\n// fetchFile fetches a text file from URL\nfunc fetchFile(URL string) io.Reader {\n\tresp, err := http.Get(URL)\n\tcheckErr(err)\n\tdefer resp.Body.Close()\n\tbody, err := ioutil.ReadAll(resp.Body)\n\tcheckErr(err)\n\treturn strings.NewReader(string(body))\n}\n\n// readFile reads a text file from path\nfunc readFile(path string) io.Reader {\n\tfile, err := os.Open(os.Args[1])\n\tcheckErr(err)\n\treturn file\n}\n\nfunc format(name, num, proto string) string {\n\tname = strings.ToUpper(name)\n\t// There are multiple entries for enosys and nosys, so comment them out.\n\tnm := re{str: name}\n\tif nm.Match(`^SYS_E?NOSYS$`) {\n\t\tname = fmt.Sprintf(\"// %s\", name)\n\t}\n\tif name == `SYS_SYS_EXIT` {\n\t\tname = `SYS_EXIT`\n\t}\n\treturn fmt.Sprintf(\"\t%s = %s;  // %s\\n\", name, num, proto)\n}\n\nfunc main() {\n\t// Get the OS (using GOOS_TARGET if it exist)\n\tgoos = os.Getenv(\"GOOS_TARGET\")\n\tif goos == \"\" {\n\t\tgoos = os.Getenv(\"GOOS\")\n\t}\n\t// Get the architecture (using GOARCH_TARGET if it exists)\n\tgoarch = os.Getenv(\"GOARCH_TARGET\")\n\tif goarch == \"\" {\n\t\tgoarch = os.Getenv(\"GOARCH\")\n\t}\n\t// Check if GOOS and GOARCH environment variables are defined\n\tif goarch == \"\" || goos == \"\" {\n\t\tfmt.Fprintf(os.Stderr, \"GOARCH or GOOS not defined in environment\\n\")\n\t\tos.Exit(1)\n\t}\n\n\tfile := strings.TrimSpace(os.Args[1])\n\tvar syscalls io.Reader\n\tif strings.HasPrefix(file, \"https://\") || strings.HasPrefix(file, \"http://\") {\n\t\t// Download syscalls.master file\n\t\tsyscalls = fetchFile(file)\n\t} else {\n\t\tsyscalls = readFile(file)\n\t}\n\n\tvar text, line string\n\ts := bufio.NewScanner(syscalls)\n\tfor s.Scan() {\n\t\tt := re{str: line}\n\t\tif t.Match(`^(.*)\\\\$`) {\n\t\t\t// Handle continuation\n\t\t\tline = t.sub[1]\n\t\t\tline += strings.TrimLeft(s.Text(), \" \\t\")\n\t\t} else {\n\t\t\t// New line\n\t\t\tline = s.Text()\n\t\t}\n\t\tt = re{str: line}\n\t\tif t.Match(`\\\\$`) {\n\t\t\tcontinue\n\t\t}\n\t\tt = re{str: line}\n\n\t\tswitch goos {\n\t\tcase \"dragonfly\":\n\t\t\tif t.Match(`^([0-9]+)\\s+STD\\s+({ \\S+\\s+(\\w+).*)$`) {\n\t\t\t\tnum, proto := t.sub[1], t.sub[2]\n\t\t\t\tname := fmt.Sprintf(\"SYS_%s\", t.sub[3])\n\t\t\t\ttext += format(name, num, proto)\n\t\t\t}\n\t\tcase \"freebsd\":\n\t\t\tif t.Match(`^([0-9]+)\\s+\\S+\\s+(?:NO)?STD\\s+({ \\S+\\s+(\\w+).*)$`) {\n\t\t\t\tnum, proto := t.sub[1], t.sub[2]\n\t\t\t\tname := fmt.Sprintf(\"SYS_%s\", t.sub[3])\n\t\t\t\ttext += format(name, num, proto)\n\t\t\t}\n\t\tcase \"openbsd\":\n\t\t\tif t.Match(`^([0-9]+)\\s+STD\\s+(NOLOCK\\s+)?({ \\S+\\s+\\*?(\\w+).*)$`) {\n\t\t\t\tnum, proto, name := t.sub[1], t.sub[3], t.sub[4]\n\t\t\t\ttext += format(name, num, proto)\n\t\t\t}\n\t\tcase \"netbsd\":\n\t\t\tif t.Match(`^([0-9]+)\\s+((STD)|(NOERR))\\s+(RUMP\\s+)?({\\s+\\S+\\s*\\*?\\s*\\|(\\S+)\\|(\\S*)\\|(\\w+).*\\s+})(\\s+(\\S+))?$`) {\n\t\t\t\tnum, proto, compat := t.sub[1], t.sub[6], t.sub[8]\n\t\t\t\tname := t.sub[7] + \"_\" + t.sub[9]\n\t\t\t\tif t.sub[11] != \"\" {\n\t\t\t\t\tname = t.sub[7] + \"_\" + t.sub[11]\n\t\t\t\t}\n\t\t\t\tname = strings.ToUpper(name)\n\t\t\t\tif compat == \"\" || compat == \"13\" || compat == \"30\" || compat == \"50\" {\n\t\t\t\t\ttext += fmt.Sprintf(\"\t%s = %s;  // %s\\n\", name, num, proto)\n\t\t\t\t}\n\t\t\t}\n\t\tcase \"darwin\":\n\t\t\tif t.Match(`^#define\\s+SYS_(\\w+)\\s+([0-9]+)`) {\n\t\t\t\tname, num := t.sub[1], t.sub[2]\n\t\t\t\tname = strings.ToUpper(name)\n\t\t\t\ttext += fmt.Sprintf(\"\tSYS_%s = %s;\\n\", name, num)\n\t\t\t}\n\t\tdefault:\n\t\t\tfmt.Fprintf(os.Stderr, \"unrecognized GOOS=%s\\n\", goos)\n\t\t\tos.Exit(1)\n\n\t\t}\n\t}\n\terr := s.Err()\n\tcheckErr(err)\n\n\tfmt.Printf(template, cmdLine(), buildTags(), text)\n}\n\nconst template = `// %s\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build %s\n\npackage unix\n\nconst(\n%s)`\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/pagesize_unix.go",
    "content": "// Copyright 2017 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris\n\n// For Unix, get the pagesize from the runtime.\n\npackage unix\n\nimport \"syscall\"\n\nfunc Getpagesize() int {\n\treturn syscall.Getpagesize()\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/pledge_openbsd.go",
    "content": "// Copyright 2016 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage unix\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"strconv\"\n\t\"syscall\"\n\t\"unsafe\"\n)\n\n// Pledge implements the pledge syscall.\n//\n// The pledge syscall does not accept execpromises on OpenBSD releases\n// before 6.3.\n//\n// execpromises must be empty when Pledge is called on OpenBSD\n// releases predating 6.3, otherwise an error will be returned.\n//\n// For more information see pledge(2).\nfunc Pledge(promises, execpromises string) error {\n\tmaj, min, err := majmin()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\terr = pledgeAvailable(maj, min, execpromises)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tpptr, err := syscall.BytePtrFromString(promises)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// This variable will hold either a nil unsafe.Pointer or\n\t// an unsafe.Pointer to a string (execpromises).\n\tvar expr unsafe.Pointer\n\n\t// If we're running on OpenBSD > 6.2, pass execpromises to the syscall.\n\tif maj > 6 || (maj == 6 && min > 2) {\n\t\texptr, err := syscall.BytePtrFromString(execpromises)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texpr = unsafe.Pointer(exptr)\n\t}\n\n\t_, _, e := syscall.Syscall(SYS_PLEDGE, uintptr(unsafe.Pointer(pptr)), uintptr(expr), 0)\n\tif e != 0 {\n\t\treturn e\n\t}\n\n\treturn nil\n}\n\n// PledgePromises implements the pledge syscall.\n//\n// This changes the promises and leaves the execpromises untouched.\n//\n// For more information see pledge(2).\nfunc PledgePromises(promises string) error {\n\tmaj, min, err := majmin()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\terr = pledgeAvailable(maj, min, \"\")\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// This variable holds the execpromises and is always nil.\n\tvar expr unsafe.Pointer\n\n\tpptr, err := syscall.BytePtrFromString(promises)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t_, _, e := syscall.Syscall(SYS_PLEDGE, uintptr(unsafe.Pointer(pptr)), uintptr(expr), 0)\n\tif e != 0 {\n\t\treturn e\n\t}\n\n\treturn nil\n}\n\n// PledgeExecpromises implements the pledge syscall.\n//\n// This changes the execpromises and leaves the promises untouched.\n//\n// For more information see pledge(2).\nfunc PledgeExecpromises(execpromises string) error {\n\tmaj, min, err := majmin()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\terr = pledgeAvailable(maj, min, execpromises)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// This variable holds the promises and is always nil.\n\tvar pptr unsafe.Pointer\n\n\texptr, err := syscall.BytePtrFromString(execpromises)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t_, _, e := syscall.Syscall(SYS_PLEDGE, uintptr(pptr), uintptr(unsafe.Pointer(exptr)), 0)\n\tif e != 0 {\n\t\treturn e\n\t}\n\n\treturn nil\n}\n\n// majmin returns major and minor version number for an OpenBSD system.\nfunc majmin() (major int, minor int, err error) {\n\tvar v Utsname\n\terr = Uname(&v)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tmajor, err = strconv.Atoi(string(v.Release[0]))\n\tif err != nil {\n\t\terr = errors.New(\"cannot parse major version number returned by uname\")\n\t\treturn\n\t}\n\n\tminor, err = strconv.Atoi(string(v.Release[2]))\n\tif err != nil {\n\t\terr = errors.New(\"cannot parse minor version number returned by uname\")\n\t\treturn\n\t}\n\n\treturn\n}\n\n// pledgeAvailable checks for availability of the pledge(2) syscall\n// based on the running OpenBSD version.\nfunc pledgeAvailable(maj, min int, execpromises string) error {\n\t// If OpenBSD <= 5.9, pledge is not available.\n\tif (maj == 5 && min != 9) || maj < 5 {\n\t\treturn fmt.Errorf(\"pledge syscall is not available on OpenBSD %d.%d\", maj, min)\n\t}\n\n\t// If OpenBSD <= 6.2 and execpromises is not empty,\n\t// return an error - execpromises is not available before 6.3\n\tif (maj < 6 || (maj == 6 && min <= 2)) && execpromises != \"\" {\n\t\treturn fmt.Errorf(\"cannot use execpromises on OpenBSD %d.%d\", maj, min)\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/race.go",
    "content": "// Copyright 2012 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build darwin,race linux,race freebsd,race\n\npackage unix\n\nimport (\n\t\"runtime\"\n\t\"unsafe\"\n)\n\nconst raceenabled = true\n\nfunc raceAcquire(addr unsafe.Pointer) {\n\truntime.RaceAcquire(addr)\n}\n\nfunc raceReleaseMerge(addr unsafe.Pointer) {\n\truntime.RaceReleaseMerge(addr)\n}\n\nfunc raceReadRange(addr unsafe.Pointer, len int) {\n\truntime.RaceReadRange(addr, len)\n}\n\nfunc raceWriteRange(addr unsafe.Pointer, len int) {\n\truntime.RaceWriteRange(addr, len)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/race0.go",
    "content": "// Copyright 2012 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build aix darwin,!race linux,!race freebsd,!race netbsd openbsd solaris dragonfly\n\npackage unix\n\nimport (\n\t\"unsafe\"\n)\n\nconst raceenabled = false\n\nfunc raceAcquire(addr unsafe.Pointer) {\n}\n\nfunc raceReleaseMerge(addr unsafe.Pointer) {\n}\n\nfunc raceReadRange(addr unsafe.Pointer, len int) {\n}\n\nfunc raceWriteRange(addr unsafe.Pointer, len int) {\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/sockcmsg_linux.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Socket control messages\n\npackage unix\n\nimport \"unsafe\"\n\n// UnixCredentials encodes credentials into a socket control message\n// for sending to another process. This can be used for\n// authentication.\nfunc UnixCredentials(ucred *Ucred) []byte {\n\tb := make([]byte, CmsgSpace(SizeofUcred))\n\th := (*Cmsghdr)(unsafe.Pointer(&b[0]))\n\th.Level = SOL_SOCKET\n\th.Type = SCM_CREDENTIALS\n\th.SetLen(CmsgLen(SizeofUcred))\n\t*((*Ucred)(cmsgData(h))) = *ucred\n\treturn b\n}\n\n// ParseUnixCredentials decodes a socket control message that contains\n// credentials in a Ucred structure. To receive such a message, the\n// SO_PASSCRED option must be enabled on the socket.\nfunc ParseUnixCredentials(m *SocketControlMessage) (*Ucred, error) {\n\tif m.Header.Level != SOL_SOCKET {\n\t\treturn nil, EINVAL\n\t}\n\tif m.Header.Type != SCM_CREDENTIALS {\n\t\treturn nil, EINVAL\n\t}\n\tucred := *(*Ucred)(unsafe.Pointer(&m.Data[0]))\n\treturn &ucred, nil\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/sockcmsg_unix.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris\n\n// Socket control messages\n\npackage unix\n\nimport (\n\t\"runtime\"\n\t\"unsafe\"\n)\n\n// Round the length of a raw sockaddr up to align it properly.\nfunc cmsgAlignOf(salen int) int {\n\tsalign := SizeofPtr\n\n\tswitch runtime.GOOS {\n\tcase \"aix\":\n\t\t// There is no alignment on AIX.\n\t\tsalign = 1\n\tcase \"darwin\", \"dragonfly\", \"solaris\", \"illumos\":\n\t\t// NOTE: It seems like 64-bit Darwin, DragonFly BSD,\n\t\t// illumos, and Solaris kernels still require 32-bit\n\t\t// aligned access to network subsystem.\n\t\tif SizeofPtr == 8 {\n\t\t\tsalign = 4\n\t\t}\n\tcase \"netbsd\", \"openbsd\":\n\t\t// NetBSD and OpenBSD armv7 require 64-bit alignment.\n\t\tif runtime.GOARCH == \"arm\" {\n\t\t\tsalign = 8\n\t\t}\n\t}\n\n\treturn (salen + salign - 1) & ^(salign - 1)\n}\n\n// CmsgLen returns the value to store in the Len field of the Cmsghdr\n// structure, taking into account any necessary alignment.\nfunc CmsgLen(datalen int) int {\n\treturn cmsgAlignOf(SizeofCmsghdr) + datalen\n}\n\n// CmsgSpace returns the number of bytes an ancillary element with\n// payload of the passed data length occupies.\nfunc CmsgSpace(datalen int) int {\n\treturn cmsgAlignOf(SizeofCmsghdr) + cmsgAlignOf(datalen)\n}\n\nfunc cmsgData(h *Cmsghdr) unsafe.Pointer {\n\treturn unsafe.Pointer(uintptr(unsafe.Pointer(h)) + uintptr(cmsgAlignOf(SizeofCmsghdr)))\n}\n\n// SocketControlMessage represents a socket control message.\ntype SocketControlMessage struct {\n\tHeader Cmsghdr\n\tData   []byte\n}\n\n// ParseSocketControlMessage parses b as an array of socket control\n// messages.\nfunc ParseSocketControlMessage(b []byte) ([]SocketControlMessage, error) {\n\tvar msgs []SocketControlMessage\n\ti := 0\n\tfor i+CmsgLen(0) <= len(b) {\n\t\th, dbuf, err := socketControlMessageHeaderAndData(b[i:])\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tm := SocketControlMessage{Header: *h, Data: dbuf}\n\t\tmsgs = append(msgs, m)\n\t\ti += cmsgAlignOf(int(h.Len))\n\t}\n\treturn msgs, nil\n}\n\nfunc socketControlMessageHeaderAndData(b []byte) (*Cmsghdr, []byte, error) {\n\th := (*Cmsghdr)(unsafe.Pointer(&b[0]))\n\tif h.Len < SizeofCmsghdr || uint64(h.Len) > uint64(len(b)) {\n\t\treturn nil, nil, EINVAL\n\t}\n\treturn h, b[cmsgAlignOf(SizeofCmsghdr):h.Len], nil\n}\n\n// UnixRights encodes a set of open file descriptors into a socket\n// control message for sending to another process.\nfunc UnixRights(fds ...int) []byte {\n\tdatalen := len(fds) * 4\n\tb := make([]byte, CmsgSpace(datalen))\n\th := (*Cmsghdr)(unsafe.Pointer(&b[0]))\n\th.Level = SOL_SOCKET\n\th.Type = SCM_RIGHTS\n\th.SetLen(CmsgLen(datalen))\n\tdata := cmsgData(h)\n\tfor _, fd := range fds {\n\t\t*(*int32)(data) = int32(fd)\n\t\tdata = unsafe.Pointer(uintptr(data) + 4)\n\t}\n\treturn b\n}\n\n// ParseUnixRights decodes a socket control message that contains an\n// integer array of open file descriptors from another process.\nfunc ParseUnixRights(m *SocketControlMessage) ([]int, error) {\n\tif m.Header.Level != SOL_SOCKET {\n\t\treturn nil, EINVAL\n\t}\n\tif m.Header.Type != SCM_RIGHTS {\n\t\treturn nil, EINVAL\n\t}\n\tfds := make([]int, len(m.Data)>>2)\n\tfor i, j := 0, 0; i < len(m.Data); i += 4 {\n\t\tfds[j] = int(*(*int32)(unsafe.Pointer(&m.Data[i])))\n\t\tj++\n\t}\n\treturn fds, nil\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/str.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris\n\npackage unix\n\nfunc itoa(val int) string { // do it here rather than with fmt to avoid dependency\n\tif val < 0 {\n\t\treturn \"-\" + uitoa(uint(-val))\n\t}\n\treturn uitoa(uint(val))\n}\n\nfunc uitoa(val uint) string {\n\tvar buf [32]byte // big enough for int64\n\ti := len(buf) - 1\n\tfor val >= 10 {\n\t\tbuf[i] = byte(val%10 + '0')\n\t\ti--\n\t\tval /= 10\n\t}\n\tbuf[i] = byte(val + '0')\n\treturn string(buf[i:])\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris\n\n// Package unix contains an interface to the low-level operating system\n// primitives. OS details vary depending on the underlying system, and\n// by default, godoc will display OS-specific documentation for the current\n// system. If you want godoc to display OS documentation for another\n// system, set $GOOS and $GOARCH to the desired system. For example, if\n// you want to view documentation for freebsd/arm on linux/amd64, set $GOOS\n// to freebsd and $GOARCH to arm.\n//\n// The primary use of this package is inside other packages that provide a more\n// portable interface to the system, such as \"os\", \"time\" and \"net\".  Use\n// those packages rather than this one if you can.\n//\n// For details of the functions and data types in this package consult\n// the manuals for the appropriate operating system.\n//\n// These calls return err == nil to indicate success; otherwise\n// err represents an operating system error describing the failure and\n// holds a value of type syscall.Errno.\npackage unix // import \"golang.org/x/sys/unix\"\n\nimport \"strings\"\n\n// ByteSliceFromString returns a NUL-terminated slice of bytes\n// containing the text of s. If s contains a NUL byte at any\n// location, it returns (nil, EINVAL).\nfunc ByteSliceFromString(s string) ([]byte, error) {\n\tif strings.IndexByte(s, 0) != -1 {\n\t\treturn nil, EINVAL\n\t}\n\ta := make([]byte, len(s)+1)\n\tcopy(a, s)\n\treturn a, nil\n}\n\n// BytePtrFromString returns a pointer to a NUL-terminated array of\n// bytes containing the text of s. If s contains a NUL byte at any\n// location, it returns (nil, EINVAL).\nfunc BytePtrFromString(s string) (*byte, error) {\n\ta, err := ByteSliceFromString(s)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &a[0], nil\n}\n\n// Single-word zero for use when we need a valid pointer to 0 bytes.\nvar _zero uintptr\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_aix.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build aix\n\n// Aix system calls.\n// This file is compiled as ordinary Go code,\n// but it is also input to mksyscall,\n// which parses the //sys lines and generates system call stubs.\n// Note that sometimes we use a lowercase //sys name and\n// wrap it in our own nicer implementation.\n\npackage unix\n\nimport \"unsafe\"\n\n/*\n * Wrapped\n */\n\n//sys\tutimes(path string, times *[2]Timeval) (err error)\nfunc Utimes(path string, tv []Timeval) error {\n\tif len(tv) != 2 {\n\t\treturn EINVAL\n\t}\n\treturn utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0])))\n}\n\n//sys\tutimensat(dirfd int, path string, times *[2]Timespec, flag int) (err error)\nfunc UtimesNano(path string, ts []Timespec) error {\n\tif len(ts) != 2 {\n\t\treturn EINVAL\n\t}\n\treturn utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)\n}\n\nfunc UtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) error {\n\tif ts == nil {\n\t\treturn utimensat(dirfd, path, nil, flags)\n\t}\n\tif len(ts) != 2 {\n\t\treturn EINVAL\n\t}\n\treturn utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), flags)\n}\n\nfunc (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tif sa.Port < 0 || sa.Port > 0xFFFF {\n\t\treturn nil, 0, EINVAL\n\t}\n\tsa.raw.Family = AF_INET\n\tp := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))\n\tp[0] = byte(sa.Port >> 8)\n\tp[1] = byte(sa.Port)\n\tfor i := 0; i < len(sa.Addr); i++ {\n\t\tsa.raw.Addr[i] = sa.Addr[i]\n\t}\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrInet4, nil\n}\n\nfunc (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tif sa.Port < 0 || sa.Port > 0xFFFF {\n\t\treturn nil, 0, EINVAL\n\t}\n\tsa.raw.Family = AF_INET6\n\tp := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))\n\tp[0] = byte(sa.Port >> 8)\n\tp[1] = byte(sa.Port)\n\tsa.raw.Scope_id = sa.ZoneId\n\tfor i := 0; i < len(sa.Addr); i++ {\n\t\tsa.raw.Addr[i] = sa.Addr[i]\n\t}\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrInet6, nil\n}\n\nfunc (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tname := sa.Name\n\tn := len(name)\n\tif n > len(sa.raw.Path) {\n\t\treturn nil, 0, EINVAL\n\t}\n\tif n == len(sa.raw.Path) && name[0] != '@' {\n\t\treturn nil, 0, EINVAL\n\t}\n\tsa.raw.Family = AF_UNIX\n\tfor i := 0; i < n; i++ {\n\t\tsa.raw.Path[i] = uint8(name[i])\n\t}\n\t// length is family (uint16), name, NUL.\n\tsl := _Socklen(2)\n\tif n > 0 {\n\t\tsl += _Socklen(n) + 1\n\t}\n\tif sa.raw.Path[0] == '@' {\n\t\tsa.raw.Path[0] = 0\n\t\t// Don't count trailing NUL for abstract address.\n\t\tsl--\n\t}\n\n\treturn unsafe.Pointer(&sa.raw), sl, nil\n}\n\nfunc Getsockname(fd int) (sa Sockaddr, err error) {\n\tvar rsa RawSockaddrAny\n\tvar len _Socklen = SizeofSockaddrAny\n\tif err = getsockname(fd, &rsa, &len); err != nil {\n\t\treturn\n\t}\n\treturn anyToSockaddr(fd, &rsa)\n}\n\n//sys\tgetcwd(buf []byte) (err error)\n\nconst ImplementsGetwd = true\n\nfunc Getwd() (ret string, err error) {\n\tfor len := uint64(4096); ; len *= 2 {\n\t\tb := make([]byte, len)\n\t\terr := getcwd(b)\n\t\tif err == nil {\n\t\t\ti := 0\n\t\t\tfor b[i] != 0 {\n\t\t\t\ti++\n\t\t\t}\n\t\t\treturn string(b[0:i]), nil\n\t\t}\n\t\tif err != ERANGE {\n\t\t\treturn \"\", err\n\t\t}\n\t}\n}\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\terr = getcwd(buf)\n\tif err == nil {\n\t\ti := 0\n\t\tfor buf[i] != 0 {\n\t\t\ti++\n\t\t}\n\t\tn = i + 1\n\t}\n\treturn\n}\n\nfunc Getgroups() (gids []int, err error) {\n\tn, err := getgroups(0, nil)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif n == 0 {\n\t\treturn nil, nil\n\t}\n\n\t// Sanity check group count. Max is 16 on BSD.\n\tif n < 0 || n > 1000 {\n\t\treturn nil, EINVAL\n\t}\n\n\ta := make([]_Gid_t, n)\n\tn, err = getgroups(n, &a[0])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tgids = make([]int, n)\n\tfor i, v := range a[0:n] {\n\t\tgids[i] = int(v)\n\t}\n\treturn\n}\n\nfunc Setgroups(gids []int) (err error) {\n\tif len(gids) == 0 {\n\t\treturn setgroups(0, nil)\n\t}\n\n\ta := make([]_Gid_t, len(gids))\n\tfor i, v := range gids {\n\t\ta[i] = _Gid_t(v)\n\t}\n\treturn setgroups(len(a), &a[0])\n}\n\n/*\n * Socket\n */\n\n//sys\taccept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error)\n\nfunc Accept(fd int) (nfd int, sa Sockaddr, err error) {\n\tvar rsa RawSockaddrAny\n\tvar len _Socklen = SizeofSockaddrAny\n\tnfd, err = accept(fd, &rsa, &len)\n\tif nfd == -1 {\n\t\treturn\n\t}\n\tsa, err = anyToSockaddr(fd, &rsa)\n\tif err != nil {\n\t\tClose(nfd)\n\t\tnfd = 0\n\t}\n\treturn\n}\n\nfunc Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) {\n\t// Recvmsg not implemented on AIX\n\tsa := new(SockaddrUnix)\n\treturn -1, -1, -1, sa, ENOSYS\n}\n\nfunc Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (err error) {\n\t_, err = SendmsgN(fd, p, oob, to, flags)\n\treturn\n}\n\nfunc SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error) {\n\t// SendmsgN not implemented on AIX\n\treturn -1, ENOSYS\n}\n\nfunc anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {\n\tswitch rsa.Addr.Family {\n\n\tcase AF_UNIX:\n\t\tpp := (*RawSockaddrUnix)(unsafe.Pointer(rsa))\n\t\tsa := new(SockaddrUnix)\n\n\t\t// Some versions of AIX have a bug in getsockname (see IV78655).\n\t\t// We can't rely on sa.Len being set correctly.\n\t\tn := SizeofSockaddrUnix - 3 // subtract leading Family, Len, terminating NUL.\n\t\tfor i := 0; i < n; i++ {\n\t\t\tif pp.Path[i] == 0 {\n\t\t\t\tn = i\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\tbytes := (*[10000]byte)(unsafe.Pointer(&pp.Path[0]))[0:n]\n\t\tsa.Name = string(bytes)\n\t\treturn sa, nil\n\n\tcase AF_INET:\n\t\tpp := (*RawSockaddrInet4)(unsafe.Pointer(rsa))\n\t\tsa := new(SockaddrInet4)\n\t\tp := (*[2]byte)(unsafe.Pointer(&pp.Port))\n\t\tsa.Port = int(p[0])<<8 + int(p[1])\n\t\tfor i := 0; i < len(sa.Addr); i++ {\n\t\t\tsa.Addr[i] = pp.Addr[i]\n\t\t}\n\t\treturn sa, nil\n\n\tcase AF_INET6:\n\t\tpp := (*RawSockaddrInet6)(unsafe.Pointer(rsa))\n\t\tsa := new(SockaddrInet6)\n\t\tp := (*[2]byte)(unsafe.Pointer(&pp.Port))\n\t\tsa.Port = int(p[0])<<8 + int(p[1])\n\t\tsa.ZoneId = pp.Scope_id\n\t\tfor i := 0; i < len(sa.Addr); i++ {\n\t\t\tsa.Addr[i] = pp.Addr[i]\n\t\t}\n\t\treturn sa, nil\n\t}\n\treturn nil, EAFNOSUPPORT\n}\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\terr = gettimeofday(tv, nil)\n\treturn\n}\n\nfunc Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tif raceenabled {\n\t\traceReleaseMerge(unsafe.Pointer(&ioSync))\n\t}\n\treturn sendfile(outfd, infd, offset, count)\n}\n\n// TODO\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\treturn -1, ENOSYS\n}\n\n//sys\tgetdirent(fd int, buf []byte) (n int, err error)\nfunc ReadDirent(fd int, buf []byte) (n int, err error) {\n\treturn getdirent(fd, buf)\n}\n\n//sys\twait4(pid Pid_t, status *_C_int, options int, rusage *Rusage) (wpid Pid_t, err error)\nfunc Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error) {\n\tvar status _C_int\n\tvar r Pid_t\n\terr = ERESTART\n\t// AIX wait4 may return with ERESTART errno, while the processus is still\n\t// active.\n\tfor err == ERESTART {\n\t\tr, err = wait4(Pid_t(pid), &status, options, rusage)\n\t}\n\twpid = int(r)\n\tif wstatus != nil {\n\t\t*wstatus = WaitStatus(status)\n\t}\n\treturn\n}\n\n/*\n * Wait\n */\n\ntype WaitStatus uint32\n\nfunc (w WaitStatus) Stopped() bool { return w&0x40 != 0 }\nfunc (w WaitStatus) StopSignal() Signal {\n\tif !w.Stopped() {\n\t\treturn -1\n\t}\n\treturn Signal(w>>8) & 0xFF\n}\n\nfunc (w WaitStatus) Exited() bool { return w&0xFF == 0 }\nfunc (w WaitStatus) ExitStatus() int {\n\tif !w.Exited() {\n\t\treturn -1\n\t}\n\treturn int((w >> 8) & 0xFF)\n}\n\nfunc (w WaitStatus) Signaled() bool { return w&0x40 == 0 && w&0xFF != 0 }\nfunc (w WaitStatus) Signal() Signal {\n\tif !w.Signaled() {\n\t\treturn -1\n\t}\n\treturn Signal(w>>16) & 0xFF\n}\n\nfunc (w WaitStatus) Continued() bool { return w&0x01000000 != 0 }\n\nfunc (w WaitStatus) CoreDump() bool { return w&0x200 != 0 }\n\nfunc (w WaitStatus) TrapCause() int { return -1 }\n\n//sys\tioctl(fd int, req uint, arg uintptr) (err error)\n\n// ioctl itself should not be exposed directly, but additional get/set\n// functions for specific types are permissible.\n\n// IoctlSetInt performs an ioctl operation which sets an integer value\n// on fd, using the specified request number.\nfunc IoctlSetInt(fd int, req uint, value int) error {\n\treturn ioctl(fd, req, uintptr(value))\n}\n\nfunc ioctlSetWinsize(fd int, req uint, value *Winsize) error {\n\treturn ioctl(fd, req, uintptr(unsafe.Pointer(value)))\n}\n\nfunc ioctlSetTermios(fd int, req uint, value *Termios) error {\n\treturn ioctl(fd, req, uintptr(unsafe.Pointer(value)))\n}\n\n// IoctlGetInt performs an ioctl operation which gets an integer value\n// from fd, using the specified request number.\nfunc IoctlGetInt(fd int, req uint) (int, error) {\n\tvar value int\n\terr := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))\n\treturn value, err\n}\n\nfunc IoctlGetWinsize(fd int, req uint) (*Winsize, error) {\n\tvar value Winsize\n\terr := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))\n\treturn &value, err\n}\n\nfunc IoctlGetTermios(fd int, req uint) (*Termios, error) {\n\tvar value Termios\n\terr := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))\n\treturn &value, err\n}\n\n// fcntl must never be called with cmd=F_DUP2FD because it doesn't work on AIX\n// There is no way to create a custom fcntl and to keep //sys fcntl easily,\n// Therefore, the programmer must call dup2 instead of fcntl in this case.\n\n// FcntlInt performs a fcntl syscall on fd with the provided command and argument.\n//sys\tFcntlInt(fd uintptr, cmd int, arg int) (r int,err error) = fcntl\n\n// FcntlFlock performs a fcntl syscall for the F_GETLK, F_SETLK or F_SETLKW command.\n//sys\tFcntlFlock(fd uintptr, cmd int, lk *Flock_t) (err error) = fcntl\n\n//sys\tfcntl(fd int, cmd int, arg int) (val int, err error)\n\n/*\n * Direct access\n */\n\n//sys\tAcct(path string) (err error)\n//sys\tChdir(path string) (err error)\n//sys\tChroot(path string) (err error)\n//sys\tClose(fd int) (err error)\n//sys\tDup(oldfd int) (fd int, err error)\n//sys\tExit(code int)\n//sys\tFaccessat(dirfd int, path string, mode uint32, flags int) (err error)\n//sys\tFchdir(fd int) (err error)\n//sys\tFchmod(fd int, mode uint32) (err error)\n//sys\tFchmodat(dirfd int, path string, mode uint32, flags int) (err error)\n//sys\tFchownat(dirfd int, path string, uid int, gid int, flags int) (err error)\n//sys\tFdatasync(fd int) (err error)\n//sys\tFsync(fd int) (err error)\n// readdir_r\n//sysnb\tGetpgid(pid int) (pgid int, err error)\n\n//sys\tGetpgrp() (pid int)\n\n//sysnb\tGetpid() (pid int)\n//sysnb\tGetppid() (ppid int)\n//sys\tGetpriority(which int, who int) (prio int, err error)\n//sysnb\tGetrusage(who int, rusage *Rusage) (err error)\n//sysnb\tGetsid(pid int) (sid int, err error)\n//sysnb\tKill(pid int, sig Signal) (err error)\n//sys\tKlogctl(typ int, buf []byte) (n int, err error) = syslog\n//sys\tMkdir(dirfd int, path string, mode uint32) (err error)\n//sys\tMkdirat(dirfd int, path string, mode uint32) (err error)\n//sys\tMkfifo(path string, mode uint32) (err error)\n//sys\tMknod(path string, mode uint32, dev int) (err error)\n//sys\tMknodat(dirfd int, path string, mode uint32, dev int) (err error)\n//sys\tNanosleep(time *Timespec, leftover *Timespec) (err error)\n//sys   Open(path string, mode int, perm uint32) (fd int, err error) = open64\n//sys   Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error)\n//sys\tread(fd int, p []byte) (n int, err error)\n//sys\tReadlink(path string, buf []byte) (n int, err error)\n//sys\tRenameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)\n//sys\tSetdomainname(p []byte) (err error)\n//sys\tSethostname(p []byte) (err error)\n//sysnb\tSetpgid(pid int, pgid int) (err error)\n//sysnb\tSetsid() (pid int, err error)\n//sysnb\tSettimeofday(tv *Timeval) (err error)\n\n//sys\tSetuid(uid int) (err error)\n//sys\tSetgid(uid int) (err error)\n\n//sys\tSetpriority(which int, who int, prio int) (err error)\n//sys\tStatx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error)\n//sys\tSync()\n//sysnb\tTimes(tms *Tms) (ticks uintptr, err error)\n//sysnb\tUmask(mask int) (oldmask int)\n//sysnb\tUname(buf *Utsname) (err error)\n//sys   Unlink(path string) (err error)\n//sys   Unlinkat(dirfd int, path string, flags int) (err error)\n//sys\tUstat(dev int, ubuf *Ustat_t) (err error)\n//sys\twrite(fd int, p []byte) (n int, err error)\n//sys\treadlen(fd int, p *byte, np int) (n int, err error) = read\n//sys\twritelen(fd int, p *byte, np int) (n int, err error) = write\n\n//sys\tDup2(oldfd int, newfd int) (err error)\n//sys\tFadvise(fd int, offset int64, length int64, advice int) (err error) = posix_fadvise64\n//sys\tFchown(fd int, uid int, gid int) (err error)\n//sys\tfstat(fd int, stat *Stat_t) (err error)\n//sys\tfstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = fstatat\n//sys\tFstatfs(fd int, buf *Statfs_t) (err error)\n//sys\tFtruncate(fd int, length int64) (err error)\n//sysnb\tGetegid() (egid int)\n//sysnb\tGeteuid() (euid int)\n//sysnb\tGetgid() (gid int)\n//sysnb\tGetuid() (uid int)\n//sys\tLchown(path string, uid int, gid int) (err error)\n//sys\tListen(s int, n int) (err error)\n//sys\tlstat(path string, stat *Stat_t) (err error)\n//sys\tPause() (err error)\n//sys\tPread(fd int, p []byte, offset int64) (n int, err error) = pread64\n//sys\tPwrite(fd int, p []byte, offset int64) (n int, err error) = pwrite64\n//sys\tSelect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)\n//sys\tPselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error)\n//sysnb\tSetregid(rgid int, egid int) (err error)\n//sysnb\tSetreuid(ruid int, euid int) (err error)\n//sys\tShutdown(fd int, how int) (err error)\n//sys\tSplice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)\n//sys\tstat(path string, statptr *Stat_t) (err error)\n//sys\tStatfs(path string, buf *Statfs_t) (err error)\n//sys\tTruncate(path string, length int64) (err error)\n\n//sys\tbind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\tconnect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sysnb\tgetgroups(n int, list *_Gid_t) (nn int, err error)\n//sysnb\tsetgroups(n int, list *_Gid_t) (err error)\n//sys\tgetsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)\n//sys\tsetsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)\n//sysnb\tsocket(domain int, typ int, proto int) (fd int, err error)\n//sysnb\tsocketpair(domain int, typ int, proto int, fd *[2]int32) (err error)\n//sysnb\tgetpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sysnb\tgetsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sys\trecvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)\n//sys\tsendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)\n\n// In order to use msghdr structure with Control, Controllen, nrecvmsg and nsendmsg must be used.\n//sys\trecvmsg(s int, msg *Msghdr, flags int) (n int, err error) = nrecvmsg\n//sys\tsendmsg(s int, msg *Msghdr, flags int) (n int, err error) = nsendmsg\n\n//sys\tmunmap(addr uintptr, length uintptr) (err error)\n\nvar mapper = &mmapper{\n\tactive: make(map[*byte][]byte),\n\tmmap:   mmap,\n\tmunmap: munmap,\n}\n\nfunc Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) {\n\treturn mapper.Mmap(fd, offset, length, prot, flags)\n}\n\nfunc Munmap(b []byte) (err error) {\n\treturn mapper.Munmap(b)\n}\n\n//sys\tMadvise(b []byte, advice int) (err error)\n//sys\tMprotect(b []byte, prot int) (err error)\n//sys\tMlock(b []byte) (err error)\n//sys\tMlockall(flags int) (err error)\n//sys\tMsync(b []byte, flags int) (err error)\n//sys\tMunlock(b []byte) (err error)\n//sys\tMunlockall() (err error)\n\n//sysnb pipe(p *[2]_C_int) (err error)\n\nfunc Pipe(p []int) (err error) {\n\tif len(p) != 2 {\n\t\treturn EINVAL\n\t}\n\tvar pp [2]_C_int\n\terr = pipe(&pp)\n\tp[0] = int(pp[0])\n\tp[1] = int(pp[1])\n\treturn\n}\n\n//sys\tpoll(fds *PollFd, nfds int, timeout int) (n int, err error)\n\nfunc Poll(fds []PollFd, timeout int) (n int, err error) {\n\tif len(fds) == 0 {\n\t\treturn poll(nil, 0, timeout)\n\t}\n\treturn poll(&fds[0], len(fds), timeout)\n}\n\n//sys\tgettimeofday(tv *Timeval, tzp *Timezone) (err error)\n//sysnb\tTime(t *Time_t) (tt Time_t, err error)\n//sys\tUtime(path string, buf *Utimbuf) (err error)\n\n//sys\tGetsystemcfg(label int) (n uint64)\n\n//sys\tumount(target string) (err error)\nfunc Unmount(target string, flags int) (err error) {\n\tif flags != 0 {\n\t\t// AIX doesn't have any flags for umount.\n\t\treturn ENOSYS\n\t}\n\treturn umount(target)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_aix_ppc.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build aix\n// +build ppc\n\npackage unix\n\n//sysnb\tGetrlimit(resource int, rlim *Rlimit) (err error) = getrlimit64\n//sysnb\tSetrlimit(resource int, rlim *Rlimit) (err error) = setrlimit64\n//sys\tSeek(fd int, offset int64, whence int) (off int64, err error) = lseek64\n\n//sys\tmmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error)\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: int32(sec), Nsec: int32(nsec)}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: int32(sec), Usec: int32(usec)}\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n\nfunc Fstat(fd int, stat *Stat_t) error {\n\treturn fstat(fd, stat)\n}\n\nfunc Fstatat(dirfd int, path string, stat *Stat_t, flags int) error {\n\treturn fstatat(dirfd, path, stat, flags)\n}\n\nfunc Lstat(path string, stat *Stat_t) error {\n\treturn lstat(path, stat)\n}\n\nfunc Stat(path string, statptr *Stat_t) error {\n\treturn stat(path, statptr)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_aix_ppc64.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build aix\n// +build ppc64\n\npackage unix\n\n//sysnb\tGetrlimit(resource int, rlim *Rlimit) (err error)\n//sysnb\tSetrlimit(resource int, rlim *Rlimit) (err error)\n//sys\tSeek(fd int, offset int64, whence int) (off int64, err error) = lseek\n\n//sys\tmmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) = mmap64\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: int64(sec), Usec: int32(usec)}\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n\n// In order to only have Timespec structure, type of Stat_t's fields\n// Atim, Mtim and Ctim is changed from StTimespec to Timespec during\n// ztypes generation.\n// On ppc64, Timespec.Nsec is an int64 while StTimespec.Nsec is an\n// int32, so the fields' value must be modified.\nfunc fixStatTimFields(stat *Stat_t) {\n\tstat.Atim.Nsec >>= 32\n\tstat.Mtim.Nsec >>= 32\n\tstat.Ctim.Nsec >>= 32\n}\n\nfunc Fstat(fd int, stat *Stat_t) error {\n\terr := fstat(fd, stat)\n\tif err != nil {\n\t\treturn err\n\t}\n\tfixStatTimFields(stat)\n\treturn nil\n}\n\nfunc Fstatat(dirfd int, path string, stat *Stat_t, flags int) error {\n\terr := fstatat(dirfd, path, stat, flags)\n\tif err != nil {\n\t\treturn err\n\t}\n\tfixStatTimFields(stat)\n\treturn nil\n}\n\nfunc Lstat(path string, stat *Stat_t) error {\n\terr := lstat(path, stat)\n\tif err != nil {\n\t\treturn err\n\t}\n\tfixStatTimFields(stat)\n\treturn nil\n}\n\nfunc Stat(path string, statptr *Stat_t) error {\n\terr := stat(path, statptr)\n\tif err != nil {\n\t\treturn err\n\t}\n\tfixStatTimFields(statptr)\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_bsd.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build darwin dragonfly freebsd netbsd openbsd\n\n// BSD system call wrappers shared by *BSD based systems\n// including OS X (Darwin) and FreeBSD.  Like the other\n// syscall_*.go files it is compiled as Go code but also\n// used as input to mksyscall which parses the //sys\n// lines and generates system call stubs.\n\npackage unix\n\nimport (\n\t\"runtime\"\n\t\"syscall\"\n\t\"unsafe\"\n)\n\n/*\n * Wrapped\n */\n\n//sysnb\tgetgroups(ngid int, gid *_Gid_t) (n int, err error)\n//sysnb\tsetgroups(ngid int, gid *_Gid_t) (err error)\n\nfunc Getgroups() (gids []int, err error) {\n\tn, err := getgroups(0, nil)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif n == 0 {\n\t\treturn nil, nil\n\t}\n\n\t// Sanity check group count. Max is 16 on BSD.\n\tif n < 0 || n > 1000 {\n\t\treturn nil, EINVAL\n\t}\n\n\ta := make([]_Gid_t, n)\n\tn, err = getgroups(n, &a[0])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tgids = make([]int, n)\n\tfor i, v := range a[0:n] {\n\t\tgids[i] = int(v)\n\t}\n\treturn\n}\n\nfunc Setgroups(gids []int) (err error) {\n\tif len(gids) == 0 {\n\t\treturn setgroups(0, nil)\n\t}\n\n\ta := make([]_Gid_t, len(gids))\n\tfor i, v := range gids {\n\t\ta[i] = _Gid_t(v)\n\t}\n\treturn setgroups(len(a), &a[0])\n}\n\nfunc ReadDirent(fd int, buf []byte) (n int, err error) {\n\t// Final argument is (basep *uintptr) and the syscall doesn't take nil.\n\t// 64 bits should be enough. (32 bits isn't even on 386). Since the\n\t// actual system call is getdirentries64, 64 is a good guess.\n\t// TODO(rsc): Can we use a single global basep for all calls?\n\tvar base = (*uintptr)(unsafe.Pointer(new(uint64)))\n\treturn Getdirentries(fd, buf, base)\n}\n\n// Wait status is 7 bits at bottom, either 0 (exited),\n// 0x7F (stopped), or a signal number that caused an exit.\n// The 0x80 bit is whether there was a core dump.\n// An extra number (exit code, signal causing a stop)\n// is in the high bits.\n\ntype WaitStatus uint32\n\nconst (\n\tmask  = 0x7F\n\tcore  = 0x80\n\tshift = 8\n\n\texited  = 0\n\tstopped = 0x7F\n)\n\nfunc (w WaitStatus) Exited() bool { return w&mask == exited }\n\nfunc (w WaitStatus) ExitStatus() int {\n\tif w&mask != exited {\n\t\treturn -1\n\t}\n\treturn int(w >> shift)\n}\n\nfunc (w WaitStatus) Signaled() bool { return w&mask != stopped && w&mask != 0 }\n\nfunc (w WaitStatus) Signal() syscall.Signal {\n\tsig := syscall.Signal(w & mask)\n\tif sig == stopped || sig == 0 {\n\t\treturn -1\n\t}\n\treturn sig\n}\n\nfunc (w WaitStatus) CoreDump() bool { return w.Signaled() && w&core != 0 }\n\nfunc (w WaitStatus) Stopped() bool { return w&mask == stopped && syscall.Signal(w>>shift) != SIGSTOP }\n\nfunc (w WaitStatus) Continued() bool { return w&mask == stopped && syscall.Signal(w>>shift) == SIGSTOP }\n\nfunc (w WaitStatus) StopSignal() syscall.Signal {\n\tif !w.Stopped() {\n\t\treturn -1\n\t}\n\treturn syscall.Signal(w>>shift) & 0xFF\n}\n\nfunc (w WaitStatus) TrapCause() int { return -1 }\n\n//sys\twait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error)\n\nfunc Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error) {\n\tvar status _C_int\n\twpid, err = wait4(pid, &status, options, rusage)\n\tif wstatus != nil {\n\t\t*wstatus = WaitStatus(status)\n\t}\n\treturn\n}\n\n//sys\taccept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error)\n//sys\tbind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\tconnect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sysnb\tsocket(domain int, typ int, proto int) (fd int, err error)\n//sys\tgetsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)\n//sys\tsetsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)\n//sysnb\tgetpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sysnb\tgetsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sys\tShutdown(s int, how int) (err error)\n\nfunc (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tif sa.Port < 0 || sa.Port > 0xFFFF {\n\t\treturn nil, 0, EINVAL\n\t}\n\tsa.raw.Len = SizeofSockaddrInet4\n\tsa.raw.Family = AF_INET\n\tp := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))\n\tp[0] = byte(sa.Port >> 8)\n\tp[1] = byte(sa.Port)\n\tfor i := 0; i < len(sa.Addr); i++ {\n\t\tsa.raw.Addr[i] = sa.Addr[i]\n\t}\n\treturn unsafe.Pointer(&sa.raw), _Socklen(sa.raw.Len), nil\n}\n\nfunc (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tif sa.Port < 0 || sa.Port > 0xFFFF {\n\t\treturn nil, 0, EINVAL\n\t}\n\tsa.raw.Len = SizeofSockaddrInet6\n\tsa.raw.Family = AF_INET6\n\tp := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))\n\tp[0] = byte(sa.Port >> 8)\n\tp[1] = byte(sa.Port)\n\tsa.raw.Scope_id = sa.ZoneId\n\tfor i := 0; i < len(sa.Addr); i++ {\n\t\tsa.raw.Addr[i] = sa.Addr[i]\n\t}\n\treturn unsafe.Pointer(&sa.raw), _Socklen(sa.raw.Len), nil\n}\n\nfunc (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tname := sa.Name\n\tn := len(name)\n\tif n >= len(sa.raw.Path) || n == 0 {\n\t\treturn nil, 0, EINVAL\n\t}\n\tsa.raw.Len = byte(3 + n) // 2 for Family, Len; 1 for NUL\n\tsa.raw.Family = AF_UNIX\n\tfor i := 0; i < n; i++ {\n\t\tsa.raw.Path[i] = int8(name[i])\n\t}\n\treturn unsafe.Pointer(&sa.raw), _Socklen(sa.raw.Len), nil\n}\n\nfunc (sa *SockaddrDatalink) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tif sa.Index == 0 {\n\t\treturn nil, 0, EINVAL\n\t}\n\tsa.raw.Len = sa.Len\n\tsa.raw.Family = AF_LINK\n\tsa.raw.Index = sa.Index\n\tsa.raw.Type = sa.Type\n\tsa.raw.Nlen = sa.Nlen\n\tsa.raw.Alen = sa.Alen\n\tsa.raw.Slen = sa.Slen\n\tfor i := 0; i < len(sa.raw.Data); i++ {\n\t\tsa.raw.Data[i] = sa.Data[i]\n\t}\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrDatalink, nil\n}\n\nfunc anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {\n\tswitch rsa.Addr.Family {\n\tcase AF_LINK:\n\t\tpp := (*RawSockaddrDatalink)(unsafe.Pointer(rsa))\n\t\tsa := new(SockaddrDatalink)\n\t\tsa.Len = pp.Len\n\t\tsa.Family = pp.Family\n\t\tsa.Index = pp.Index\n\t\tsa.Type = pp.Type\n\t\tsa.Nlen = pp.Nlen\n\t\tsa.Alen = pp.Alen\n\t\tsa.Slen = pp.Slen\n\t\tfor i := 0; i < len(sa.Data); i++ {\n\t\t\tsa.Data[i] = pp.Data[i]\n\t\t}\n\t\treturn sa, nil\n\n\tcase AF_UNIX:\n\t\tpp := (*RawSockaddrUnix)(unsafe.Pointer(rsa))\n\t\tif pp.Len < 2 || pp.Len > SizeofSockaddrUnix {\n\t\t\treturn nil, EINVAL\n\t\t}\n\t\tsa := new(SockaddrUnix)\n\n\t\t// Some BSDs include the trailing NUL in the length, whereas\n\t\t// others do not. Work around this by subtracting the leading\n\t\t// family and len. The path is then scanned to see if a NUL\n\t\t// terminator still exists within the length.\n\t\tn := int(pp.Len) - 2 // subtract leading Family, Len\n\t\tfor i := 0; i < n; i++ {\n\t\t\tif pp.Path[i] == 0 {\n\t\t\t\t// found early NUL; assume Len included the NUL\n\t\t\t\t// or was overestimating.\n\t\t\t\tn = i\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tbytes := (*[10000]byte)(unsafe.Pointer(&pp.Path[0]))[0:n]\n\t\tsa.Name = string(bytes)\n\t\treturn sa, nil\n\n\tcase AF_INET:\n\t\tpp := (*RawSockaddrInet4)(unsafe.Pointer(rsa))\n\t\tsa := new(SockaddrInet4)\n\t\tp := (*[2]byte)(unsafe.Pointer(&pp.Port))\n\t\tsa.Port = int(p[0])<<8 + int(p[1])\n\t\tfor i := 0; i < len(sa.Addr); i++ {\n\t\t\tsa.Addr[i] = pp.Addr[i]\n\t\t}\n\t\treturn sa, nil\n\n\tcase AF_INET6:\n\t\tpp := (*RawSockaddrInet6)(unsafe.Pointer(rsa))\n\t\tsa := new(SockaddrInet6)\n\t\tp := (*[2]byte)(unsafe.Pointer(&pp.Port))\n\t\tsa.Port = int(p[0])<<8 + int(p[1])\n\t\tsa.ZoneId = pp.Scope_id\n\t\tfor i := 0; i < len(sa.Addr); i++ {\n\t\t\tsa.Addr[i] = pp.Addr[i]\n\t\t}\n\t\treturn sa, nil\n\t}\n\treturn nil, EAFNOSUPPORT\n}\n\nfunc Accept(fd int) (nfd int, sa Sockaddr, err error) {\n\tvar rsa RawSockaddrAny\n\tvar len _Socklen = SizeofSockaddrAny\n\tnfd, err = accept(fd, &rsa, &len)\n\tif err != nil {\n\t\treturn\n\t}\n\tif runtime.GOOS == \"darwin\" && len == 0 {\n\t\t// Accepted socket has no address.\n\t\t// This is likely due to a bug in xnu kernels,\n\t\t// where instead of ECONNABORTED error socket\n\t\t// is accepted, but has no address.\n\t\tClose(nfd)\n\t\treturn 0, nil, ECONNABORTED\n\t}\n\tsa, err = anyToSockaddr(fd, &rsa)\n\tif err != nil {\n\t\tClose(nfd)\n\t\tnfd = 0\n\t}\n\treturn\n}\n\nfunc Getsockname(fd int) (sa Sockaddr, err error) {\n\tvar rsa RawSockaddrAny\n\tvar len _Socklen = SizeofSockaddrAny\n\tif err = getsockname(fd, &rsa, &len); err != nil {\n\t\treturn\n\t}\n\t// TODO(jsing): DragonFly has a \"bug\" (see issue 3349), which should be\n\t// reported upstream.\n\tif runtime.GOOS == \"dragonfly\" && rsa.Addr.Family == AF_UNSPEC && rsa.Addr.Len == 0 {\n\t\trsa.Addr.Family = AF_UNIX\n\t\trsa.Addr.Len = SizeofSockaddrUnix\n\t}\n\treturn anyToSockaddr(fd, &rsa)\n}\n\n//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error)\n\n// GetsockoptString returns the string value of the socket option opt for the\n// socket associated with fd at the given socket level.\nfunc GetsockoptString(fd, level, opt int) (string, error) {\n\tbuf := make([]byte, 256)\n\tvallen := _Socklen(len(buf))\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&buf[0]), &vallen)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn string(buf[:vallen-1]), nil\n}\n\n//sys   recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)\n//sys   sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\trecvmsg(s int, msg *Msghdr, flags int) (n int, err error)\n\nfunc Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) {\n\tvar msg Msghdr\n\tvar rsa RawSockaddrAny\n\tmsg.Name = (*byte)(unsafe.Pointer(&rsa))\n\tmsg.Namelen = uint32(SizeofSockaddrAny)\n\tvar iov Iovec\n\tif len(p) > 0 {\n\t\tiov.Base = (*byte)(unsafe.Pointer(&p[0]))\n\t\tiov.SetLen(len(p))\n\t}\n\tvar dummy byte\n\tif len(oob) > 0 {\n\t\t// receive at least one normal byte\n\t\tif len(p) == 0 {\n\t\t\tiov.Base = &dummy\n\t\t\tiov.SetLen(1)\n\t\t}\n\t\tmsg.Control = (*byte)(unsafe.Pointer(&oob[0]))\n\t\tmsg.SetControllen(len(oob))\n\t}\n\tmsg.Iov = &iov\n\tmsg.Iovlen = 1\n\tif n, err = recvmsg(fd, &msg, flags); err != nil {\n\t\treturn\n\t}\n\toobn = int(msg.Controllen)\n\trecvflags = int(msg.Flags)\n\t// source address is only specified if the socket is unconnected\n\tif rsa.Addr.Family != AF_UNSPEC {\n\t\tfrom, err = anyToSockaddr(fd, &rsa)\n\t}\n\treturn\n}\n\n//sys\tsendmsg(s int, msg *Msghdr, flags int) (n int, err error)\n\nfunc Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (err error) {\n\t_, err = SendmsgN(fd, p, oob, to, flags)\n\treturn\n}\n\nfunc SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error) {\n\tvar ptr unsafe.Pointer\n\tvar salen _Socklen\n\tif to != nil {\n\t\tptr, salen, err = to.sockaddr()\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t}\n\tvar msg Msghdr\n\tmsg.Name = (*byte)(unsafe.Pointer(ptr))\n\tmsg.Namelen = uint32(salen)\n\tvar iov Iovec\n\tif len(p) > 0 {\n\t\tiov.Base = (*byte)(unsafe.Pointer(&p[0]))\n\t\tiov.SetLen(len(p))\n\t}\n\tvar dummy byte\n\tif len(oob) > 0 {\n\t\t// send at least one normal byte\n\t\tif len(p) == 0 {\n\t\t\tiov.Base = &dummy\n\t\t\tiov.SetLen(1)\n\t\t}\n\t\tmsg.Control = (*byte)(unsafe.Pointer(&oob[0]))\n\t\tmsg.SetControllen(len(oob))\n\t}\n\tmsg.Iov = &iov\n\tmsg.Iovlen = 1\n\tif n, err = sendmsg(fd, &msg, flags); err != nil {\n\t\treturn 0, err\n\t}\n\tif len(oob) > 0 && len(p) == 0 {\n\t\tn = 0\n\t}\n\treturn n, nil\n}\n\n//sys\tkevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error)\n\nfunc Kevent(kq int, changes, events []Kevent_t, timeout *Timespec) (n int, err error) {\n\tvar change, event unsafe.Pointer\n\tif len(changes) > 0 {\n\t\tchange = unsafe.Pointer(&changes[0])\n\t}\n\tif len(events) > 0 {\n\t\tevent = unsafe.Pointer(&events[0])\n\t}\n\treturn kevent(kq, change, len(changes), event, len(events), timeout)\n}\n\n//sys\tsysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL\n\n// sysctlmib translates name to mib number and appends any additional args.\nfunc sysctlmib(name string, args ...int) ([]_C_int, error) {\n\t// Translate name to mib number.\n\tmib, err := nametomib(name)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tfor _, a := range args {\n\t\tmib = append(mib, _C_int(a))\n\t}\n\n\treturn mib, nil\n}\n\nfunc Sysctl(name string) (string, error) {\n\treturn SysctlArgs(name)\n}\n\nfunc SysctlArgs(name string, args ...int) (string, error) {\n\tbuf, err := SysctlRaw(name, args...)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tn := len(buf)\n\n\t// Throw away terminating NUL.\n\tif n > 0 && buf[n-1] == '\\x00' {\n\t\tn--\n\t}\n\treturn string(buf[0:n]), nil\n}\n\nfunc SysctlUint32(name string) (uint32, error) {\n\treturn SysctlUint32Args(name)\n}\n\nfunc SysctlUint32Args(name string, args ...int) (uint32, error) {\n\tmib, err := sysctlmib(name, args...)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\tn := uintptr(4)\n\tbuf := make([]byte, 4)\n\tif err := sysctl(mib, &buf[0], &n, nil, 0); err != nil {\n\t\treturn 0, err\n\t}\n\tif n != 4 {\n\t\treturn 0, EIO\n\t}\n\treturn *(*uint32)(unsafe.Pointer(&buf[0])), nil\n}\n\nfunc SysctlUint64(name string, args ...int) (uint64, error) {\n\tmib, err := sysctlmib(name, args...)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\tn := uintptr(8)\n\tbuf := make([]byte, 8)\n\tif err := sysctl(mib, &buf[0], &n, nil, 0); err != nil {\n\t\treturn 0, err\n\t}\n\tif n != 8 {\n\t\treturn 0, EIO\n\t}\n\treturn *(*uint64)(unsafe.Pointer(&buf[0])), nil\n}\n\nfunc SysctlRaw(name string, args ...int) ([]byte, error) {\n\tmib, err := sysctlmib(name, args...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Find size.\n\tn := uintptr(0)\n\tif err := sysctl(mib, nil, &n, nil, 0); err != nil {\n\t\treturn nil, err\n\t}\n\tif n == 0 {\n\t\treturn nil, nil\n\t}\n\n\t// Read into buffer of that size.\n\tbuf := make([]byte, n)\n\tif err := sysctl(mib, &buf[0], &n, nil, 0); err != nil {\n\t\treturn nil, err\n\t}\n\n\t// The actual call may return less than the original reported required\n\t// size so ensure we deal with that.\n\treturn buf[:n], nil\n}\n\n//sys\tutimes(path string, timeval *[2]Timeval) (err error)\n\nfunc Utimes(path string, tv []Timeval) error {\n\tif tv == nil {\n\t\treturn utimes(path, nil)\n\t}\n\tif len(tv) != 2 {\n\t\treturn EINVAL\n\t}\n\treturn utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0])))\n}\n\nfunc UtimesNano(path string, ts []Timespec) error {\n\tif ts == nil {\n\t\terr := utimensat(AT_FDCWD, path, nil, 0)\n\t\tif err != ENOSYS {\n\t\t\treturn err\n\t\t}\n\t\treturn utimes(path, nil)\n\t}\n\tif len(ts) != 2 {\n\t\treturn EINVAL\n\t}\n\t// Darwin setattrlist can set nanosecond timestamps\n\terr := setattrlistTimes(path, ts, 0)\n\tif err != ENOSYS {\n\t\treturn err\n\t}\n\terr = utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)\n\tif err != ENOSYS {\n\t\treturn err\n\t}\n\t// Not as efficient as it could be because Timespec and\n\t// Timeval have different types in the different OSes\n\ttv := [2]Timeval{\n\t\tNsecToTimeval(TimespecToNsec(ts[0])),\n\t\tNsecToTimeval(TimespecToNsec(ts[1])),\n\t}\n\treturn utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0])))\n}\n\nfunc UtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) error {\n\tif ts == nil {\n\t\treturn utimensat(dirfd, path, nil, flags)\n\t}\n\tif len(ts) != 2 {\n\t\treturn EINVAL\n\t}\n\terr := setattrlistTimes(path, ts, flags)\n\tif err != ENOSYS {\n\t\treturn err\n\t}\n\treturn utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), flags)\n}\n\n//sys\tfutimes(fd int, timeval *[2]Timeval) (err error)\n\nfunc Futimes(fd int, tv []Timeval) error {\n\tif tv == nil {\n\t\treturn futimes(fd, nil)\n\t}\n\tif len(tv) != 2 {\n\t\treturn EINVAL\n\t}\n\treturn futimes(fd, (*[2]Timeval)(unsafe.Pointer(&tv[0])))\n}\n\n//sys\tfcntl(fd int, cmd int, arg int) (val int, err error)\n\n//sys   poll(fds *PollFd, nfds int, timeout int) (n int, err error)\n\nfunc Poll(fds []PollFd, timeout int) (n int, err error) {\n\tif len(fds) == 0 {\n\t\treturn poll(nil, 0, timeout)\n\t}\n\treturn poll(&fds[0], len(fds), timeout)\n}\n\n// TODO: wrap\n//\tAcct(name nil-string) (err error)\n//\tGethostuuid(uuid *byte, timeout *Timespec) (err error)\n//\tPtrace(req int, pid int, addr uintptr, data int) (ret uintptr, err error)\n\nvar mapper = &mmapper{\n\tactive: make(map[*byte][]byte),\n\tmmap:   mmap,\n\tmunmap: munmap,\n}\n\nfunc Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) {\n\treturn mapper.Mmap(fd, offset, length, prot, flags)\n}\n\nfunc Munmap(b []byte) (err error) {\n\treturn mapper.Munmap(b)\n}\n\n//sys\tMadvise(b []byte, behav int) (err error)\n//sys\tMlock(b []byte) (err error)\n//sys\tMlockall(flags int) (err error)\n//sys\tMprotect(b []byte, prot int) (err error)\n//sys\tMsync(b []byte, flags int) (err error)\n//sys\tMunlock(b []byte) (err error)\n//sys\tMunlockall() (err error)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_darwin.go",
    "content": "// Copyright 2009,2010 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Darwin system calls.\n// This file is compiled as ordinary Go code,\n// but it is also input to mksyscall,\n// which parses the //sys lines and generates system call stubs.\n// Note that sometimes we use a lowercase //sys name and wrap\n// it in our own nicer implementation, either here or in\n// syscall_bsd.go or syscall_unix.go.\n\npackage unix\n\nimport (\n\t\"errors\"\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nconst ImplementsGetwd = true\n\nfunc Getwd() (string, error) {\n\tbuf := make([]byte, 2048)\n\tattrs, err := getAttrList(\".\", attrList{CommonAttr: attrCmnFullpath}, buf, 0)\n\tif err == nil && len(attrs) == 1 && len(attrs[0]) >= 2 {\n\t\twd := string(attrs[0])\n\t\t// Sanity check that it's an absolute path and ends\n\t\t// in a null byte, which we then strip.\n\t\tif wd[0] == '/' && wd[len(wd)-1] == 0 {\n\t\t\treturn wd[:len(wd)-1], nil\n\t\t}\n\t}\n\t// If pkg/os/getwd.go gets ENOTSUP, it will fall back to the\n\t// slow algorithm.\n\treturn \"\", ENOTSUP\n}\n\n// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets.\ntype SockaddrDatalink struct {\n\tLen    uint8\n\tFamily uint8\n\tIndex  uint16\n\tType   uint8\n\tNlen   uint8\n\tAlen   uint8\n\tSlen   uint8\n\tData   [12]int8\n\traw    RawSockaddrDatalink\n}\n\n// Translate \"kern.hostname\" to []_C_int{0,1,2,3}.\nfunc nametomib(name string) (mib []_C_int, err error) {\n\tconst siz = unsafe.Sizeof(mib[0])\n\n\t// NOTE(rsc): It seems strange to set the buffer to have\n\t// size CTL_MAXNAME+2 but use only CTL_MAXNAME\n\t// as the size. I don't know why the +2 is here, but the\n\t// kernel uses +2 for its own implementation of this function.\n\t// I am scared that if we don't include the +2 here, the kernel\n\t// will silently write 2 words farther than we specify\n\t// and we'll get memory corruption.\n\tvar buf [CTL_MAXNAME + 2]_C_int\n\tn := uintptr(CTL_MAXNAME) * siz\n\n\tp := (*byte)(unsafe.Pointer(&buf[0]))\n\tbytes, err := ByteSliceFromString(name)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Magic sysctl: \"setting\" 0.3 to a string name\n\t// lets you read back the array of integers form.\n\tif err = sysctl([]_C_int{0, 3}, p, &n, &bytes[0], uintptr(len(name))); err != nil {\n\t\treturn nil, err\n\t}\n\treturn buf[0 : n/siz], nil\n}\n\n//sys   ptrace(request int, pid int, addr uintptr, data uintptr) (err error)\nfunc PtraceAttach(pid int) (err error) { return ptrace(PT_ATTACH, pid, 0, 0) }\nfunc PtraceDetach(pid int) (err error) { return ptrace(PT_DETACH, pid, 0, 0) }\n\nconst (\n\tattrBitMapCount = 5\n\tattrCmnFullpath = 0x08000000\n)\n\ntype attrList struct {\n\tbitmapCount uint16\n\t_           uint16\n\tCommonAttr  uint32\n\tVolAttr     uint32\n\tDirAttr     uint32\n\tFileAttr    uint32\n\tForkattr    uint32\n}\n\nfunc getAttrList(path string, attrList attrList, attrBuf []byte, options uint) (attrs [][]byte, err error) {\n\tif len(attrBuf) < 4 {\n\t\treturn nil, errors.New(\"attrBuf too small\")\n\t}\n\tattrList.bitmapCount = attrBitMapCount\n\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif err := getattrlist(_p0, unsafe.Pointer(&attrList), unsafe.Pointer(&attrBuf[0]), uintptr(len(attrBuf)), int(options)); err != nil {\n\t\treturn nil, err\n\t}\n\tsize := *(*uint32)(unsafe.Pointer(&attrBuf[0]))\n\n\t// dat is the section of attrBuf that contains valid data,\n\t// without the 4 byte length header. All attribute offsets\n\t// are relative to dat.\n\tdat := attrBuf\n\tif int(size) < len(attrBuf) {\n\t\tdat = dat[:size]\n\t}\n\tdat = dat[4:] // remove length prefix\n\n\tfor i := uint32(0); int(i) < len(dat); {\n\t\theader := dat[i:]\n\t\tif len(header) < 8 {\n\t\t\treturn attrs, errors.New(\"truncated attribute header\")\n\t\t}\n\t\tdatOff := *(*int32)(unsafe.Pointer(&header[0]))\n\t\tattrLen := *(*uint32)(unsafe.Pointer(&header[4]))\n\t\tif datOff < 0 || uint32(datOff)+attrLen > uint32(len(dat)) {\n\t\t\treturn attrs, errors.New(\"truncated results; attrBuf too small\")\n\t\t}\n\t\tend := uint32(datOff) + attrLen\n\t\tattrs = append(attrs, dat[datOff:end])\n\t\ti = end\n\t\tif r := i % 4; r != 0 {\n\t\t\ti += (4 - r)\n\t\t}\n\t}\n\treturn\n}\n\n//sys getattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error)\n\nfunc SysctlClockinfo(name string) (*Clockinfo, error) {\n\tmib, err := sysctlmib(name)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tn := uintptr(SizeofClockinfo)\n\tvar ci Clockinfo\n\tif err := sysctl(mib, (*byte)(unsafe.Pointer(&ci)), &n, nil, 0); err != nil {\n\t\treturn nil, err\n\t}\n\tif n != SizeofClockinfo {\n\t\treturn nil, EIO\n\t}\n\treturn &ci, nil\n}\n\n//sysnb pipe() (r int, w int, err error)\n\nfunc Pipe(p []int) (err error) {\n\tif len(p) != 2 {\n\t\treturn EINVAL\n\t}\n\tp[0], p[1], err = pipe()\n\treturn\n}\n\nfunc Getfsstat(buf []Statfs_t, flags int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tvar bufsize uintptr\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t\tbufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf))\n\t}\n\treturn getfsstat(_p0, bufsize, flags)\n}\n\nfunc xattrPointer(dest []byte) *byte {\n\t// It's only when dest is set to NULL that the OS X implementations of\n\t// getxattr() and listxattr() return the current sizes of the named attributes.\n\t// An empty byte array is not sufficient. To maintain the same behaviour as the\n\t// linux implementation, we wrap around the system calls and pass in NULL when\n\t// dest is empty.\n\tvar destp *byte\n\tif len(dest) > 0 {\n\t\tdestp = &dest[0]\n\t}\n\treturn destp\n}\n\n//sys\tgetxattr(path string, attr string, dest *byte, size int, position uint32, options int) (sz int, err error)\n\nfunc Getxattr(path string, attr string, dest []byte) (sz int, err error) {\n\treturn getxattr(path, attr, xattrPointer(dest), len(dest), 0, 0)\n}\n\nfunc Lgetxattr(link string, attr string, dest []byte) (sz int, err error) {\n\treturn getxattr(link, attr, xattrPointer(dest), len(dest), 0, XATTR_NOFOLLOW)\n}\n\n//sys\tfgetxattr(fd int, attr string, dest *byte, size int, position uint32, options int) (sz int, err error)\n\nfunc Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {\n\treturn fgetxattr(fd, attr, xattrPointer(dest), len(dest), 0, 0)\n}\n\n//sys\tsetxattr(path string, attr string, data *byte, size int, position uint32, options int) (err error)\n\nfunc Setxattr(path string, attr string, data []byte, flags int) (err error) {\n\t// The parameters for the OS X implementation vary slightly compared to the\n\t// linux system call, specifically the position parameter:\n\t//\n\t//  linux:\n\t//      int setxattr(\n\t//          const char *path,\n\t//          const char *name,\n\t//          const void *value,\n\t//          size_t size,\n\t//          int flags\n\t//      );\n\t//\n\t//  darwin:\n\t//      int setxattr(\n\t//          const char *path,\n\t//          const char *name,\n\t//          void *value,\n\t//          size_t size,\n\t//          u_int32_t position,\n\t//          int options\n\t//      );\n\t//\n\t// position specifies the offset within the extended attribute. In the\n\t// current implementation, only the resource fork extended attribute makes\n\t// use of this argument. For all others, position is reserved. We simply\n\t// default to setting it to zero.\n\treturn setxattr(path, attr, xattrPointer(data), len(data), 0, flags)\n}\n\nfunc Lsetxattr(link string, attr string, data []byte, flags int) (err error) {\n\treturn setxattr(link, attr, xattrPointer(data), len(data), 0, flags|XATTR_NOFOLLOW)\n}\n\n//sys\tfsetxattr(fd int, attr string, data *byte, size int, position uint32, options int) (err error)\n\nfunc Fsetxattr(fd int, attr string, data []byte, flags int) (err error) {\n\treturn fsetxattr(fd, attr, xattrPointer(data), len(data), 0, 0)\n}\n\n//sys\tremovexattr(path string, attr string, options int) (err error)\n\nfunc Removexattr(path string, attr string) (err error) {\n\t// We wrap around and explicitly zero out the options provided to the OS X\n\t// implementation of removexattr, we do so for interoperability with the\n\t// linux variant.\n\treturn removexattr(path, attr, 0)\n}\n\nfunc Lremovexattr(link string, attr string) (err error) {\n\treturn removexattr(link, attr, XATTR_NOFOLLOW)\n}\n\n//sys\tfremovexattr(fd int, attr string, options int) (err error)\n\nfunc Fremovexattr(fd int, attr string) (err error) {\n\treturn fremovexattr(fd, attr, 0)\n}\n\n//sys\tlistxattr(path string, dest *byte, size int, options int) (sz int, err error)\n\nfunc Listxattr(path string, dest []byte) (sz int, err error) {\n\treturn listxattr(path, xattrPointer(dest), len(dest), 0)\n}\n\nfunc Llistxattr(link string, dest []byte) (sz int, err error) {\n\treturn listxattr(link, xattrPointer(dest), len(dest), XATTR_NOFOLLOW)\n}\n\n//sys\tflistxattr(fd int, dest *byte, size int, options int) (sz int, err error)\n\nfunc Flistxattr(fd int, dest []byte) (sz int, err error) {\n\treturn flistxattr(fd, xattrPointer(dest), len(dest), 0)\n}\n\nfunc setattrlistTimes(path string, times []Timespec, flags int) error {\n\t_p0, err := BytePtrFromString(path)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tvar attrList attrList\n\tattrList.bitmapCount = ATTR_BIT_MAP_COUNT\n\tattrList.CommonAttr = ATTR_CMN_MODTIME | ATTR_CMN_ACCTIME\n\n\t// order is mtime, atime: the opposite of Chtimes\n\tattributes := [2]Timespec{times[1], times[0]}\n\toptions := 0\n\tif flags&AT_SYMLINK_NOFOLLOW != 0 {\n\t\toptions |= FSOPT_NOFOLLOW\n\t}\n\treturn setattrlist(\n\t\t_p0,\n\t\tunsafe.Pointer(&attrList),\n\t\tunsafe.Pointer(&attributes),\n\t\tunsafe.Sizeof(attributes),\n\t\toptions)\n}\n\n//sys setattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error)\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) error {\n\t// Darwin doesn't support SYS_UTIMENSAT\n\treturn ENOSYS\n}\n\n/*\n * Wrapped\n */\n\n//sys\tkill(pid int, signum int, posix int) (err error)\n\nfunc Kill(pid int, signum syscall.Signal) (err error) { return kill(pid, int(signum), 1) }\n\n//sys\tioctl(fd int, req uint, arg uintptr) (err error)\n\n// ioctl itself should not be exposed directly, but additional get/set\n// functions for specific types are permissible.\n\n// IoctlSetInt performs an ioctl operation which sets an integer value\n// on fd, using the specified request number.\nfunc IoctlSetInt(fd int, req uint, value int) error {\n\treturn ioctl(fd, req, uintptr(value))\n}\n\nfunc ioctlSetWinsize(fd int, req uint, value *Winsize) error {\n\treturn ioctl(fd, req, uintptr(unsafe.Pointer(value)))\n}\n\nfunc ioctlSetTermios(fd int, req uint, value *Termios) error {\n\treturn ioctl(fd, req, uintptr(unsafe.Pointer(value)))\n}\n\n// IoctlGetInt performs an ioctl operation which gets an integer value\n// from fd, using the specified request number.\nfunc IoctlGetInt(fd int, req uint) (int, error) {\n\tvar value int\n\terr := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))\n\treturn value, err\n}\n\nfunc IoctlGetWinsize(fd int, req uint) (*Winsize, error) {\n\tvar value Winsize\n\terr := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))\n\treturn &value, err\n}\n\nfunc IoctlGetTermios(fd int, req uint) (*Termios, error) {\n\tvar value Termios\n\terr := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))\n\treturn &value, err\n}\n\nfunc Uname(uname *Utsname) error {\n\tmib := []_C_int{CTL_KERN, KERN_OSTYPE}\n\tn := unsafe.Sizeof(uname.Sysname)\n\tif err := sysctl(mib, &uname.Sysname[0], &n, nil, 0); err != nil {\n\t\treturn err\n\t}\n\n\tmib = []_C_int{CTL_KERN, KERN_HOSTNAME}\n\tn = unsafe.Sizeof(uname.Nodename)\n\tif err := sysctl(mib, &uname.Nodename[0], &n, nil, 0); err != nil {\n\t\treturn err\n\t}\n\n\tmib = []_C_int{CTL_KERN, KERN_OSRELEASE}\n\tn = unsafe.Sizeof(uname.Release)\n\tif err := sysctl(mib, &uname.Release[0], &n, nil, 0); err != nil {\n\t\treturn err\n\t}\n\n\tmib = []_C_int{CTL_KERN, KERN_VERSION}\n\tn = unsafe.Sizeof(uname.Version)\n\tif err := sysctl(mib, &uname.Version[0], &n, nil, 0); err != nil {\n\t\treturn err\n\t}\n\n\t// The version might have newlines or tabs in it, convert them to\n\t// spaces.\n\tfor i, b := range uname.Version {\n\t\tif b == '\\n' || b == '\\t' {\n\t\t\tif i == len(uname.Version)-1 {\n\t\t\t\tuname.Version[i] = 0\n\t\t\t} else {\n\t\t\t\tuname.Version[i] = ' '\n\t\t\t}\n\t\t}\n\t}\n\n\tmib = []_C_int{CTL_HW, HW_MACHINE}\n\tn = unsafe.Sizeof(uname.Machine)\n\tif err := sysctl(mib, &uname.Machine[0], &n, nil, 0); err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\nfunc Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tif raceenabled {\n\t\traceReleaseMerge(unsafe.Pointer(&ioSync))\n\t}\n\tvar length = int64(count)\n\terr = sendfile(infd, outfd, *offset, &length, nil, 0)\n\twritten = int(length)\n\treturn\n}\n\n//sys\tsendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error)\n\n/*\n * Exposed directly\n */\n//sys\tAccess(path string, mode uint32) (err error)\n//sys\tAdjtime(delta *Timeval, olddelta *Timeval) (err error)\n//sys\tChdir(path string) (err error)\n//sys\tChflags(path string, flags int) (err error)\n//sys\tChmod(path string, mode uint32) (err error)\n//sys\tChown(path string, uid int, gid int) (err error)\n//sys\tChroot(path string) (err error)\n//sys\tClockGettime(clockid int32, time *Timespec) (err error)\n//sys\tClose(fd int) (err error)\n//sys\tDup(fd int) (nfd int, err error)\n//sys\tDup2(from int, to int) (err error)\n//sys\tExchangedata(path1 string, path2 string, options int) (err error)\n//sys\tExit(code int)\n//sys\tFaccessat(dirfd int, path string, mode uint32, flags int) (err error)\n//sys\tFchdir(fd int) (err error)\n//sys\tFchflags(fd int, flags int) (err error)\n//sys\tFchmod(fd int, mode uint32) (err error)\n//sys\tFchmodat(dirfd int, path string, mode uint32, flags int) (err error)\n//sys\tFchown(fd int, uid int, gid int) (err error)\n//sys\tFchownat(dirfd int, path string, uid int, gid int, flags int) (err error)\n//sys\tFlock(fd int, how int) (err error)\n//sys\tFpathconf(fd int, name int) (val int, err error)\n//sys\tFsync(fd int) (err error)\n//sys\tFtruncate(fd int, length int64) (err error)\n//sys\tGetdtablesize() (size int)\n//sysnb\tGetegid() (egid int)\n//sysnb\tGeteuid() (uid int)\n//sysnb\tGetgid() (gid int)\n//sysnb\tGetpgid(pid int) (pgid int, err error)\n//sysnb\tGetpgrp() (pgrp int)\n//sysnb\tGetpid() (pid int)\n//sysnb\tGetppid() (ppid int)\n//sys\tGetpriority(which int, who int) (prio int, err error)\n//sysnb\tGetrlimit(which int, lim *Rlimit) (err error)\n//sysnb\tGetrusage(who int, rusage *Rusage) (err error)\n//sysnb\tGetsid(pid int) (sid int, err error)\n//sysnb\tGetuid() (uid int)\n//sysnb\tIssetugid() (tainted bool)\n//sys\tKqueue() (fd int, err error)\n//sys\tLchown(path string, uid int, gid int) (err error)\n//sys\tLink(path string, link string) (err error)\n//sys\tLinkat(pathfd int, path string, linkfd int, link string, flags int) (err error)\n//sys\tListen(s int, backlog int) (err error)\n//sys\tMkdir(path string, mode uint32) (err error)\n//sys\tMkdirat(dirfd int, path string, mode uint32) (err error)\n//sys\tMkfifo(path string, mode uint32) (err error)\n//sys\tMknod(path string, mode uint32, dev int) (err error)\n//sys\tOpen(path string, mode int, perm uint32) (fd int, err error)\n//sys\tOpenat(dirfd int, path string, mode int, perm uint32) (fd int, err error)\n//sys\tPathconf(path string, name int) (val int, err error)\n//sys\tPread(fd int, p []byte, offset int64) (n int, err error)\n//sys\tPwrite(fd int, p []byte, offset int64) (n int, err error)\n//sys\tread(fd int, p []byte) (n int, err error)\n//sys\tReadlink(path string, buf []byte) (n int, err error)\n//sys\tReadlinkat(dirfd int, path string, buf []byte) (n int, err error)\n//sys\tRename(from string, to string) (err error)\n//sys\tRenameat(fromfd int, from string, tofd int, to string) (err error)\n//sys\tRevoke(path string) (err error)\n//sys\tRmdir(path string) (err error)\n//sys\tSeek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK\n//sys\tSelect(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error)\n//sys\tSetegid(egid int) (err error)\n//sysnb\tSeteuid(euid int) (err error)\n//sysnb\tSetgid(gid int) (err error)\n//sys\tSetlogin(name string) (err error)\n//sysnb\tSetpgid(pid int, pgid int) (err error)\n//sys\tSetpriority(which int, who int, prio int) (err error)\n//sys\tSetprivexec(flag int) (err error)\n//sysnb\tSetregid(rgid int, egid int) (err error)\n//sysnb\tSetreuid(ruid int, euid int) (err error)\n//sysnb\tSetrlimit(which int, lim *Rlimit) (err error)\n//sysnb\tSetsid() (pid int, err error)\n//sysnb\tSettimeofday(tp *Timeval) (err error)\n//sysnb\tSetuid(uid int) (err error)\n//sys\tSymlink(path string, link string) (err error)\n//sys\tSymlinkat(oldpath string, newdirfd int, newpath string) (err error)\n//sys\tSync() (err error)\n//sys\tTruncate(path string, length int64) (err error)\n//sys\tUmask(newmask int) (oldmask int)\n//sys\tUndelete(path string) (err error)\n//sys\tUnlink(path string) (err error)\n//sys\tUnlinkat(dirfd int, path string, flags int) (err error)\n//sys\tUnmount(path string, flags int) (err error)\n//sys\twrite(fd int, p []byte) (n int, err error)\n//sys   mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error)\n//sys   munmap(addr uintptr, length uintptr) (err error)\n//sys\treadlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ\n//sys\twritelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE\n\n/*\n * Unimplemented\n */\n// Profil\n// Sigaction\n// Sigprocmask\n// Getlogin\n// Sigpending\n// Sigaltstack\n// Ioctl\n// Reboot\n// Execve\n// Vfork\n// Sbrk\n// Sstk\n// Ovadvise\n// Mincore\n// Setitimer\n// Swapon\n// Select\n// Sigsuspend\n// Readv\n// Writev\n// Nfssvc\n// Getfh\n// Quotactl\n// Mount\n// Csops\n// Waitid\n// Add_profil\n// Kdebug_trace\n// Sigreturn\n// Atsocket\n// Kqueue_from_portset_np\n// Kqueue_portset\n// Getattrlist\n// Setattrlist\n// Getdirentriesattr\n// Searchfs\n// Delete\n// Copyfile\n// Watchevent\n// Waitevent\n// Modwatch\n// Fsctl\n// Initgroups\n// Posix_spawn\n// Nfsclnt\n// Fhopen\n// Minherit\n// Semsys\n// Msgsys\n// Shmsys\n// Semctl\n// Semget\n// Semop\n// Msgctl\n// Msgget\n// Msgsnd\n// Msgrcv\n// Shmat\n// Shmctl\n// Shmdt\n// Shmget\n// Shm_open\n// Shm_unlink\n// Sem_open\n// Sem_close\n// Sem_unlink\n// Sem_wait\n// Sem_trywait\n// Sem_post\n// Sem_getvalue\n// Sem_init\n// Sem_destroy\n// Open_extended\n// Umask_extended\n// Stat_extended\n// Lstat_extended\n// Fstat_extended\n// Chmod_extended\n// Fchmod_extended\n// Access_extended\n// Settid\n// Gettid\n// Setsgroups\n// Getsgroups\n// Setwgroups\n// Getwgroups\n// Mkfifo_extended\n// Mkdir_extended\n// Identitysvc\n// Shared_region_check_np\n// Shared_region_map_np\n// __pthread_mutex_destroy\n// __pthread_mutex_init\n// __pthread_mutex_lock\n// __pthread_mutex_trylock\n// __pthread_mutex_unlock\n// __pthread_cond_init\n// __pthread_cond_destroy\n// __pthread_cond_broadcast\n// __pthread_cond_signal\n// Setsid_with_pid\n// __pthread_cond_timedwait\n// Aio_fsync\n// Aio_return\n// Aio_suspend\n// Aio_cancel\n// Aio_error\n// Aio_read\n// Aio_write\n// Lio_listio\n// __pthread_cond_wait\n// Iopolicysys\n// __pthread_kill\n// __pthread_sigmask\n// __sigwait\n// __disable_threadsignal\n// __pthread_markcancel\n// __pthread_canceled\n// __semwait_signal\n// Proc_info\n// sendfile\n// Stat64_extended\n// Lstat64_extended\n// Fstat64_extended\n// __pthread_chdir\n// __pthread_fchdir\n// Audit\n// Auditon\n// Getauid\n// Setauid\n// Getaudit\n// Setaudit\n// Getaudit_addr\n// Setaudit_addr\n// Auditctl\n// Bsdthread_create\n// Bsdthread_terminate\n// Stack_snapshot\n// Bsdthread_register\n// Workq_open\n// Workq_ops\n// __mac_execve\n// __mac_syscall\n// __mac_get_file\n// __mac_set_file\n// __mac_get_link\n// __mac_set_link\n// __mac_get_proc\n// __mac_set_proc\n// __mac_get_fd\n// __mac_set_fd\n// __mac_get_pid\n// __mac_get_lcid\n// __mac_get_lctx\n// __mac_set_lctx\n// Setlcid\n// Read_nocancel\n// Write_nocancel\n// Open_nocancel\n// Close_nocancel\n// Wait4_nocancel\n// Recvmsg_nocancel\n// Sendmsg_nocancel\n// Recvfrom_nocancel\n// Accept_nocancel\n// Fcntl_nocancel\n// Select_nocancel\n// Fsync_nocancel\n// Connect_nocancel\n// Sigsuspend_nocancel\n// Readv_nocancel\n// Writev_nocancel\n// Sendto_nocancel\n// Pread_nocancel\n// Pwrite_nocancel\n// Waitid_nocancel\n// Poll_nocancel\n// Msgsnd_nocancel\n// Msgrcv_nocancel\n// Sem_wait_nocancel\n// Aio_suspend_nocancel\n// __sigwait_nocancel\n// __semwait_signal_nocancel\n// __mac_mount\n// __mac_get_mount\n// __mac_getfsstat\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_darwin_386.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build 386,darwin\n\npackage unix\n\nimport (\n\t\"syscall\"\n)\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: int32(sec), Nsec: int32(nsec)}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: int32(sec), Usec: int32(usec)}\n}\n\n//sysnb\tgettimeofday(tp *Timeval) (sec int32, usec int32, err error)\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t// The tv passed to gettimeofday must be non-nil\n\t// but is otherwise unused. The answers come back\n\t// in the two registers.\n\tsec, usec, err := gettimeofday(tv)\n\ttv.Sec = int32(sec)\n\ttv.Usec = int32(usec)\n\treturn err\n}\n\nfunc SetKevent(k *Kevent_t, fd, mode, flags int) {\n\tk.Ident = uint32(fd)\n\tk.Filter = int16(mode)\n\tk.Flags = uint16(flags)\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n\nfunc Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)\n\n// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions\n// of darwin/386 the syscall is called sysctl instead of __sysctl.\nconst SYS___SYSCTL = SYS_SYSCTL\n\n//sys\tFstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64\n//sys\tFstatat(fd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64\n//sys\tFstatfs(fd int, stat *Statfs_t) (err error) = SYS_FSTATFS64\n//sys\tGetdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) = SYS_GETDIRENTRIES64\n//sys\tgetfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) = SYS_GETFSSTAT64\n//sys\tLstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64\n//sys\tStat(path string, stat *Stat_t) (err error) = SYS_STAT64\n//sys\tStatfs(path string, stat *Statfs_t) (err error) = SYS_STATFS64\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build amd64,darwin\n\npackage unix\n\nimport (\n\t\"syscall\"\n)\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: int32(usec)}\n}\n\n//sysnb\tgettimeofday(tp *Timeval) (sec int64, usec int32, err error)\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t// The tv passed to gettimeofday must be non-nil\n\t// but is otherwise unused. The answers come back\n\t// in the two registers.\n\tsec, usec, err := gettimeofday(tv)\n\ttv.Sec = sec\n\ttv.Usec = usec\n\treturn err\n}\n\nfunc SetKevent(k *Kevent_t, fd, mode, flags int) {\n\tk.Ident = uint64(fd)\n\tk.Filter = int16(mode)\n\tk.Flags = uint16(flags)\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n\nfunc Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)\n\n// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions\n// of darwin/amd64 the syscall is called sysctl instead of __sysctl.\nconst SYS___SYSCTL = SYS_SYSCTL\n\n//sys\tFstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64\n//sys\tFstatat(fd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64\n//sys\tFstatfs(fd int, stat *Statfs_t) (err error) = SYS_FSTATFS64\n//sys\tGetdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) = SYS_GETDIRENTRIES64\n//sys\tgetfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) = SYS_GETFSSTAT64\n//sys\tLstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64\n//sys\tStat(path string, stat *Stat_t) (err error) = SYS_STAT64\n//sys\tStatfs(path string, stat *Statfs_t) (err error) = SYS_STATFS64\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_darwin_arm.go",
    "content": "// Copyright 2015 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage unix\n\nimport (\n\t\"syscall\"\n)\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: int32(sec), Nsec: int32(nsec)}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: int32(sec), Usec: int32(usec)}\n}\n\n//sysnb\tgettimeofday(tp *Timeval) (sec int32, usec int32, err error)\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t// The tv passed to gettimeofday must be non-nil\n\t// but is otherwise unused. The answers come back\n\t// in the two registers.\n\tsec, usec, err := gettimeofday(tv)\n\ttv.Sec = int32(sec)\n\ttv.Usec = int32(usec)\n\treturn err\n}\n\nfunc SetKevent(k *Kevent_t, fd, mode, flags int) {\n\tk.Ident = uint32(fd)\n\tk.Filter = int16(mode)\n\tk.Flags = uint16(flags)\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n\nfunc Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) // sic\n\n// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions\n// of darwin/arm the syscall is called sysctl instead of __sysctl.\nconst SYS___SYSCTL = SYS_SYSCTL\n\n//sys\tFstat(fd int, stat *Stat_t) (err error)\n//sys\tFstatat(fd int, path string, stat *Stat_t, flags int) (err error)\n//sys\tFstatfs(fd int, stat *Statfs_t) (err error)\n//sys\tgetfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) = SYS_GETFSSTAT\n//sys\tLstat(path string, stat *Stat_t) (err error)\n//sys\tStat(path string, stat *Stat_t) (err error)\n//sys\tStatfs(path string, stat *Statfs_t) (err error)\n\nfunc Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {\n\treturn 0, ENOSYS\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go",
    "content": "// Copyright 2015 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build arm64,darwin\n\npackage unix\n\nimport (\n\t\"syscall\"\n)\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: int32(usec)}\n}\n\n//sysnb\tgettimeofday(tp *Timeval) (sec int64, usec int32, err error)\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t// The tv passed to gettimeofday must be non-nil\n\t// but is otherwise unused. The answers come back\n\t// in the two registers.\n\tsec, usec, err := gettimeofday(tv)\n\ttv.Sec = sec\n\ttv.Usec = usec\n\treturn err\n}\n\nfunc SetKevent(k *Kevent_t, fd, mode, flags int) {\n\tk.Ident = uint64(fd)\n\tk.Filter = int16(mode)\n\tk.Flags = uint16(flags)\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n\nfunc Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) // sic\n\n// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions\n// of darwin/arm64 the syscall is called sysctl instead of __sysctl.\nconst SYS___SYSCTL = SYS_SYSCTL\n\n//sys\tFstat(fd int, stat *Stat_t) (err error)\n//sys\tFstatat(fd int, path string, stat *Stat_t, flags int) (err error)\n//sys\tFstatfs(fd int, stat *Statfs_t) (err error)\n//sys\tgetfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) = SYS_GETFSSTAT\n//sys\tLstat(path string, stat *Stat_t) (err error)\n//sys\tStat(path string, stat *Stat_t) (err error)\n//sys\tStatfs(path string, stat *Statfs_t) (err error)\n\nfunc Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {\n\treturn 0, ENOSYS\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_darwin_libSystem.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build darwin,go1.12\n\npackage unix\n\nimport \"unsafe\"\n\n// Implemented in the runtime package (runtime/sys_darwin.go)\nfunc syscall_syscall(fn, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno)\nfunc syscall_syscall6(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)\nfunc syscall_syscall6X(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)\nfunc syscall_syscall9(fn, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err Errno) // 32-bit only\nfunc syscall_rawSyscall(fn, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno)\nfunc syscall_rawSyscall6(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)\n\n//go:linkname syscall_syscall syscall.syscall\n//go:linkname syscall_syscall6 syscall.syscall6\n//go:linkname syscall_syscall6X syscall.syscall6X\n//go:linkname syscall_syscall9 syscall.syscall9\n//go:linkname syscall_rawSyscall syscall.rawSyscall\n//go:linkname syscall_rawSyscall6 syscall.rawSyscall6\n\n// Find the entry point for f. See comments in runtime/proc.go for the\n// function of the same name.\n//go:nosplit\nfunc funcPC(f func()) uintptr {\n\treturn **(**uintptr)(unsafe.Pointer(&f))\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_dragonfly.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// DragonFly BSD system calls.\n// This file is compiled as ordinary Go code,\n// but it is also input to mksyscall,\n// which parses the //sys lines and generates system call stubs.\n// Note that sometimes we use a lowercase //sys name and wrap\n// it in our own nicer implementation, either here or in\n// syscall_bsd.go or syscall_unix.go.\n\npackage unix\n\nimport \"unsafe\"\n\n// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets.\ntype SockaddrDatalink struct {\n\tLen    uint8\n\tFamily uint8\n\tIndex  uint16\n\tType   uint8\n\tNlen   uint8\n\tAlen   uint8\n\tSlen   uint8\n\tData   [12]int8\n\tRcf    uint16\n\tRoute  [16]uint16\n\traw    RawSockaddrDatalink\n}\n\n// Translate \"kern.hostname\" to []_C_int{0,1,2,3}.\nfunc nametomib(name string) (mib []_C_int, err error) {\n\tconst siz = unsafe.Sizeof(mib[0])\n\n\t// NOTE(rsc): It seems strange to set the buffer to have\n\t// size CTL_MAXNAME+2 but use only CTL_MAXNAME\n\t// as the size. I don't know why the +2 is here, but the\n\t// kernel uses +2 for its own implementation of this function.\n\t// I am scared that if we don't include the +2 here, the kernel\n\t// will silently write 2 words farther than we specify\n\t// and we'll get memory corruption.\n\tvar buf [CTL_MAXNAME + 2]_C_int\n\tn := uintptr(CTL_MAXNAME) * siz\n\n\tp := (*byte)(unsafe.Pointer(&buf[0]))\n\tbytes, err := ByteSliceFromString(name)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Magic sysctl: \"setting\" 0.3 to a string name\n\t// lets you read back the array of integers form.\n\tif err = sysctl([]_C_int{0, 3}, p, &n, &bytes[0], uintptr(len(name))); err != nil {\n\t\treturn nil, err\n\t}\n\treturn buf[0 : n/siz], nil\n}\n\n//sysnb pipe() (r int, w int, err error)\n\nfunc Pipe(p []int) (err error) {\n\tif len(p) != 2 {\n\t\treturn EINVAL\n\t}\n\tp[0], p[1], err = pipe()\n\treturn\n}\n\n//sys\textpread(fd int, p []byte, flags int, offset int64) (n int, err error)\nfunc Pread(fd int, p []byte, offset int64) (n int, err error) {\n\treturn extpread(fd, p, 0, offset)\n}\n\n//sys\textpwrite(fd int, p []byte, flags int, offset int64) (n int, err error)\nfunc Pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\treturn extpwrite(fd, p, 0, offset)\n}\n\nfunc Accept4(fd, flags int) (nfd int, sa Sockaddr, err error) {\n\tvar rsa RawSockaddrAny\n\tvar len _Socklen = SizeofSockaddrAny\n\tnfd, err = accept4(fd, &rsa, &len, flags)\n\tif err != nil {\n\t\treturn\n\t}\n\tif len > SizeofSockaddrAny {\n\t\tpanic(\"RawSockaddrAny too small\")\n\t}\n\tsa, err = anyToSockaddr(fd, &rsa)\n\tif err != nil {\n\t\tClose(nfd)\n\t\tnfd = 0\n\t}\n\treturn\n}\n\nconst ImplementsGetwd = true\n\n//sys\tGetcwd(buf []byte) (n int, err error) = SYS___GETCWD\n\nfunc Getwd() (string, error) {\n\tvar buf [PathMax]byte\n\t_, err := Getcwd(buf[0:])\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tn := clen(buf[:])\n\tif n < 1 {\n\t\treturn \"\", EINVAL\n\t}\n\treturn string(buf[:n]), nil\n}\n\nfunc Getfsstat(buf []Statfs_t, flags int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tvar bufsize uintptr\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t\tbufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf))\n\t}\n\tr0, _, e1 := Syscall(SYS_GETFSSTAT, uintptr(_p0), bufsize, uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\nfunc setattrlistTimes(path string, times []Timespec, flags int) error {\n\t// used on Darwin for UtimesNano\n\treturn ENOSYS\n}\n\n//sys\tioctl(fd int, req uint, arg uintptr) (err error)\n\n// ioctl itself should not be exposed directly, but additional get/set\n// functions for specific types are permissible.\n\n// IoctlSetInt performs an ioctl operation which sets an integer value\n// on fd, using the specified request number.\nfunc IoctlSetInt(fd int, req uint, value int) error {\n\treturn ioctl(fd, req, uintptr(value))\n}\n\nfunc ioctlSetWinsize(fd int, req uint, value *Winsize) error {\n\treturn ioctl(fd, req, uintptr(unsafe.Pointer(value)))\n}\n\nfunc ioctlSetTermios(fd int, req uint, value *Termios) error {\n\treturn ioctl(fd, req, uintptr(unsafe.Pointer(value)))\n}\n\n// IoctlGetInt performs an ioctl operation which gets an integer value\n// from fd, using the specified request number.\nfunc IoctlGetInt(fd int, req uint) (int, error) {\n\tvar value int\n\terr := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))\n\treturn value, err\n}\n\nfunc IoctlGetWinsize(fd int, req uint) (*Winsize, error) {\n\tvar value Winsize\n\terr := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))\n\treturn &value, err\n}\n\nfunc IoctlGetTermios(fd int, req uint) (*Termios, error) {\n\tvar value Termios\n\terr := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))\n\treturn &value, err\n}\n\nfunc sysctlUname(mib []_C_int, old *byte, oldlen *uintptr) error {\n\terr := sysctl(mib, old, oldlen, nil, 0)\n\tif err != nil {\n\t\t// Utsname members on Dragonfly are only 32 bytes and\n\t\t// the syscall returns ENOMEM in case the actual value\n\t\t// is longer.\n\t\tif err == ENOMEM {\n\t\t\terr = nil\n\t\t}\n\t}\n\treturn err\n}\n\nfunc Uname(uname *Utsname) error {\n\tmib := []_C_int{CTL_KERN, KERN_OSTYPE}\n\tn := unsafe.Sizeof(uname.Sysname)\n\tif err := sysctlUname(mib, &uname.Sysname[0], &n); err != nil {\n\t\treturn err\n\t}\n\tuname.Sysname[unsafe.Sizeof(uname.Sysname)-1] = 0\n\n\tmib = []_C_int{CTL_KERN, KERN_HOSTNAME}\n\tn = unsafe.Sizeof(uname.Nodename)\n\tif err := sysctlUname(mib, &uname.Nodename[0], &n); err != nil {\n\t\treturn err\n\t}\n\tuname.Nodename[unsafe.Sizeof(uname.Nodename)-1] = 0\n\n\tmib = []_C_int{CTL_KERN, KERN_OSRELEASE}\n\tn = unsafe.Sizeof(uname.Release)\n\tif err := sysctlUname(mib, &uname.Release[0], &n); err != nil {\n\t\treturn err\n\t}\n\tuname.Release[unsafe.Sizeof(uname.Release)-1] = 0\n\n\tmib = []_C_int{CTL_KERN, KERN_VERSION}\n\tn = unsafe.Sizeof(uname.Version)\n\tif err := sysctlUname(mib, &uname.Version[0], &n); err != nil {\n\t\treturn err\n\t}\n\n\t// The version might have newlines or tabs in it, convert them to\n\t// spaces.\n\tfor i, b := range uname.Version {\n\t\tif b == '\\n' || b == '\\t' {\n\t\t\tif i == len(uname.Version)-1 {\n\t\t\t\tuname.Version[i] = 0\n\t\t\t} else {\n\t\t\t\tuname.Version[i] = ' '\n\t\t\t}\n\t\t}\n\t}\n\n\tmib = []_C_int{CTL_HW, HW_MACHINE}\n\tn = unsafe.Sizeof(uname.Machine)\n\tif err := sysctlUname(mib, &uname.Machine[0], &n); err != nil {\n\t\treturn err\n\t}\n\tuname.Machine[unsafe.Sizeof(uname.Machine)-1] = 0\n\n\treturn nil\n}\n\nfunc Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tif raceenabled {\n\t\traceReleaseMerge(unsafe.Pointer(&ioSync))\n\t}\n\treturn sendfile(outfd, infd, offset, count)\n}\n\n/*\n * Exposed directly\n */\n//sys\tAccess(path string, mode uint32) (err error)\n//sys\tAdjtime(delta *Timeval, olddelta *Timeval) (err error)\n//sys\tChdir(path string) (err error)\n//sys\tChflags(path string, flags int) (err error)\n//sys\tChmod(path string, mode uint32) (err error)\n//sys\tChown(path string, uid int, gid int) (err error)\n//sys\tChroot(path string) (err error)\n//sys\tClose(fd int) (err error)\n//sys\tDup(fd int) (nfd int, err error)\n//sys\tDup2(from int, to int) (err error)\n//sys\tExit(code int)\n//sys\tFaccessat(dirfd int, path string, mode uint32, flags int) (err error)\n//sys\tFchdir(fd int) (err error)\n//sys\tFchflags(fd int, flags int) (err error)\n//sys\tFchmod(fd int, mode uint32) (err error)\n//sys\tFchmodat(dirfd int, path string, mode uint32, flags int) (err error)\n//sys\tFchown(fd int, uid int, gid int) (err error)\n//sys\tFchownat(dirfd int, path string, uid int, gid int, flags int) (err error)\n//sys\tFlock(fd int, how int) (err error)\n//sys\tFpathconf(fd int, name int) (val int, err error)\n//sys\tFstat(fd int, stat *Stat_t) (err error)\n//sys\tFstatat(fd int, path string, stat *Stat_t, flags int) (err error)\n//sys\tFstatfs(fd int, stat *Statfs_t) (err error)\n//sys\tFsync(fd int) (err error)\n//sys\tFtruncate(fd int, length int64) (err error)\n//sys\tGetdirentries(fd int, buf []byte, basep *uintptr) (n int, err error)\n//sys\tGetdtablesize() (size int)\n//sysnb\tGetegid() (egid int)\n//sysnb\tGeteuid() (uid int)\n//sysnb\tGetgid() (gid int)\n//sysnb\tGetpgid(pid int) (pgid int, err error)\n//sysnb\tGetpgrp() (pgrp int)\n//sysnb\tGetpid() (pid int)\n//sysnb\tGetppid() (ppid int)\n//sys\tGetpriority(which int, who int) (prio int, err error)\n//sysnb\tGetrlimit(which int, lim *Rlimit) (err error)\n//sysnb\tGetrusage(who int, rusage *Rusage) (err error)\n//sysnb\tGetsid(pid int) (sid int, err error)\n//sysnb\tGettimeofday(tv *Timeval) (err error)\n//sysnb\tGetuid() (uid int)\n//sys\tIssetugid() (tainted bool)\n//sys\tKill(pid int, signum syscall.Signal) (err error)\n//sys\tKqueue() (fd int, err error)\n//sys\tLchown(path string, uid int, gid int) (err error)\n//sys\tLink(path string, link string) (err error)\n//sys\tLinkat(pathfd int, path string, linkfd int, link string, flags int) (err error)\n//sys\tListen(s int, backlog int) (err error)\n//sys\tLstat(path string, stat *Stat_t) (err error)\n//sys\tMkdir(path string, mode uint32) (err error)\n//sys\tMkdirat(dirfd int, path string, mode uint32) (err error)\n//sys\tMkfifo(path string, mode uint32) (err error)\n//sys\tMknod(path string, mode uint32, dev int) (err error)\n//sys\tMknodat(fd int, path string, mode uint32, dev int) (err error)\n//sys\tNanosleep(time *Timespec, leftover *Timespec) (err error)\n//sys\tOpen(path string, mode int, perm uint32) (fd int, err error)\n//sys\tOpenat(dirfd int, path string, mode int, perm uint32) (fd int, err error)\n//sys\tPathconf(path string, name int) (val int, err error)\n//sys\tread(fd int, p []byte) (n int, err error)\n//sys\tReadlink(path string, buf []byte) (n int, err error)\n//sys\tRename(from string, to string) (err error)\n//sys\tRenameat(fromfd int, from string, tofd int, to string) (err error)\n//sys\tRevoke(path string) (err error)\n//sys\tRmdir(path string) (err error)\n//sys\tSeek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK\n//sys\tSelect(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error)\n//sysnb\tSetegid(egid int) (err error)\n//sysnb\tSeteuid(euid int) (err error)\n//sysnb\tSetgid(gid int) (err error)\n//sys\tSetlogin(name string) (err error)\n//sysnb\tSetpgid(pid int, pgid int) (err error)\n//sys\tSetpriority(which int, who int, prio int) (err error)\n//sysnb\tSetregid(rgid int, egid int) (err error)\n//sysnb\tSetreuid(ruid int, euid int) (err error)\n//sysnb\tSetresgid(rgid int, egid int, sgid int) (err error)\n//sysnb\tSetresuid(ruid int, euid int, suid int) (err error)\n//sysnb\tSetrlimit(which int, lim *Rlimit) (err error)\n//sysnb\tSetsid() (pid int, err error)\n//sysnb\tSettimeofday(tp *Timeval) (err error)\n//sysnb\tSetuid(uid int) (err error)\n//sys\tStat(path string, stat *Stat_t) (err error)\n//sys\tStatfs(path string, stat *Statfs_t) (err error)\n//sys\tSymlink(path string, link string) (err error)\n//sys\tSymlinkat(oldpath string, newdirfd int, newpath string) (err error)\n//sys\tSync() (err error)\n//sys\tTruncate(path string, length int64) (err error)\n//sys\tUmask(newmask int) (oldmask int)\n//sys\tUndelete(path string) (err error)\n//sys\tUnlink(path string) (err error)\n//sys\tUnlinkat(dirfd int, path string, flags int) (err error)\n//sys\tUnmount(path string, flags int) (err error)\n//sys\twrite(fd int, p []byte) (n int, err error)\n//sys   mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error)\n//sys   munmap(addr uintptr, length uintptr) (err error)\n//sys\treadlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ\n//sys\twritelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE\n//sys\taccept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error)\n//sys\tutimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error)\n\n/*\n * Unimplemented\n * TODO(jsing): Update this list for DragonFly.\n */\n// Profil\n// Sigaction\n// Sigprocmask\n// Getlogin\n// Sigpending\n// Sigaltstack\n// Reboot\n// Execve\n// Vfork\n// Sbrk\n// Sstk\n// Ovadvise\n// Mincore\n// Setitimer\n// Swapon\n// Select\n// Sigsuspend\n// Readv\n// Writev\n// Nfssvc\n// Getfh\n// Quotactl\n// Mount\n// Csops\n// Waitid\n// Add_profil\n// Kdebug_trace\n// Sigreturn\n// Atsocket\n// Kqueue_from_portset_np\n// Kqueue_portset\n// Getattrlist\n// Setattrlist\n// Getdirentriesattr\n// Searchfs\n// Delete\n// Copyfile\n// Watchevent\n// Waitevent\n// Modwatch\n// Getxattr\n// Fgetxattr\n// Setxattr\n// Fsetxattr\n// Removexattr\n// Fremovexattr\n// Listxattr\n// Flistxattr\n// Fsctl\n// Initgroups\n// Posix_spawn\n// Nfsclnt\n// Fhopen\n// Minherit\n// Semsys\n// Msgsys\n// Shmsys\n// Semctl\n// Semget\n// Semop\n// Msgctl\n// Msgget\n// Msgsnd\n// Msgrcv\n// Shmat\n// Shmctl\n// Shmdt\n// Shmget\n// Shm_open\n// Shm_unlink\n// Sem_open\n// Sem_close\n// Sem_unlink\n// Sem_wait\n// Sem_trywait\n// Sem_post\n// Sem_getvalue\n// Sem_init\n// Sem_destroy\n// Open_extended\n// Umask_extended\n// Stat_extended\n// Lstat_extended\n// Fstat_extended\n// Chmod_extended\n// Fchmod_extended\n// Access_extended\n// Settid\n// Gettid\n// Setsgroups\n// Getsgroups\n// Setwgroups\n// Getwgroups\n// Mkfifo_extended\n// Mkdir_extended\n// Identitysvc\n// Shared_region_check_np\n// Shared_region_map_np\n// __pthread_mutex_destroy\n// __pthread_mutex_init\n// __pthread_mutex_lock\n// __pthread_mutex_trylock\n// __pthread_mutex_unlock\n// __pthread_cond_init\n// __pthread_cond_destroy\n// __pthread_cond_broadcast\n// __pthread_cond_signal\n// Setsid_with_pid\n// __pthread_cond_timedwait\n// Aio_fsync\n// Aio_return\n// Aio_suspend\n// Aio_cancel\n// Aio_error\n// Aio_read\n// Aio_write\n// Lio_listio\n// __pthread_cond_wait\n// Iopolicysys\n// __pthread_kill\n// __pthread_sigmask\n// __sigwait\n// __disable_threadsignal\n// __pthread_markcancel\n// __pthread_canceled\n// __semwait_signal\n// Proc_info\n// Stat64_extended\n// Lstat64_extended\n// Fstat64_extended\n// __pthread_chdir\n// __pthread_fchdir\n// Audit\n// Auditon\n// Getauid\n// Setauid\n// Getaudit\n// Setaudit\n// Getaudit_addr\n// Setaudit_addr\n// Auditctl\n// Bsdthread_create\n// Bsdthread_terminate\n// Stack_snapshot\n// Bsdthread_register\n// Workq_open\n// Workq_ops\n// __mac_execve\n// __mac_syscall\n// __mac_get_file\n// __mac_set_file\n// __mac_get_link\n// __mac_set_link\n// __mac_get_proc\n// __mac_set_proc\n// __mac_get_fd\n// __mac_set_fd\n// __mac_get_pid\n// __mac_get_lcid\n// __mac_get_lctx\n// __mac_set_lctx\n// Setlcid\n// Read_nocancel\n// Write_nocancel\n// Open_nocancel\n// Close_nocancel\n// Wait4_nocancel\n// Recvmsg_nocancel\n// Sendmsg_nocancel\n// Recvfrom_nocancel\n// Accept_nocancel\n// Fcntl_nocancel\n// Select_nocancel\n// Fsync_nocancel\n// Connect_nocancel\n// Sigsuspend_nocancel\n// Readv_nocancel\n// Writev_nocancel\n// Sendto_nocancel\n// Pread_nocancel\n// Pwrite_nocancel\n// Waitid_nocancel\n// Msgsnd_nocancel\n// Msgrcv_nocancel\n// Sem_wait_nocancel\n// Aio_suspend_nocancel\n// __sigwait_nocancel\n// __semwait_signal_nocancel\n// __mac_mount\n// __mac_get_mount\n// __mac_getfsstat\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build amd64,dragonfly\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: usec}\n}\n\nfunc SetKevent(k *Kevent_t, fd, mode, flags int) {\n\tk.Ident = uint64(fd)\n\tk.Filter = int16(mode)\n\tk.Flags = uint16(flags)\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tvar writtenOut uint64 = 0\n\t_, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0, 0)\n\n\twritten = int(writtenOut)\n\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\nfunc Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_freebsd.go",
    "content": "// Copyright 2009,2010 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// FreeBSD system calls.\n// This file is compiled as ordinary Go code,\n// but it is also input to mksyscall,\n// which parses the //sys lines and generates system call stubs.\n// Note that sometimes we use a lowercase //sys name and wrap\n// it in our own nicer implementation, either here or in\n// syscall_bsd.go or syscall_unix.go.\n\npackage unix\n\nimport (\n\t\"sync\"\n\t\"unsafe\"\n)\n\nconst (\n\tSYS_FSTAT_FREEBSD12         = 551 // { int fstat(int fd, _Out_ struct stat *sb); }\n\tSYS_FSTATAT_FREEBSD12       = 552 // { int fstatat(int fd, _In_z_ char *path, \\\n\tSYS_GETDIRENTRIES_FREEBSD12 = 554 // { ssize_t getdirentries(int fd, \\\n\tSYS_STATFS_FREEBSD12        = 555 // { int statfs(_In_z_ char *path, \\\n\tSYS_FSTATFS_FREEBSD12       = 556 // { int fstatfs(int fd, \\\n\tSYS_GETFSSTAT_FREEBSD12     = 557 // { int getfsstat( \\\n\tSYS_MKNODAT_FREEBSD12       = 559 // { int mknodat(int fd, _In_z_ char *path, \\\n)\n\n// See https://www.freebsd.org/doc/en_US.ISO8859-1/books/porters-handbook/versions.html.\nvar (\n\tosreldateOnce sync.Once\n\tosreldate     uint32\n)\n\n// INO64_FIRST from /usr/src/lib/libc/sys/compat-ino64.h\nconst _ino64First = 1200031\n\nfunc supportsABI(ver uint32) bool {\n\tosreldateOnce.Do(func() { osreldate, _ = SysctlUint32(\"kern.osreldate\") })\n\treturn osreldate >= ver\n}\n\n// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets.\ntype SockaddrDatalink struct {\n\tLen    uint8\n\tFamily uint8\n\tIndex  uint16\n\tType   uint8\n\tNlen   uint8\n\tAlen   uint8\n\tSlen   uint8\n\tData   [46]int8\n\traw    RawSockaddrDatalink\n}\n\n// Translate \"kern.hostname\" to []_C_int{0,1,2,3}.\nfunc nametomib(name string) (mib []_C_int, err error) {\n\tconst siz = unsafe.Sizeof(mib[0])\n\n\t// NOTE(rsc): It seems strange to set the buffer to have\n\t// size CTL_MAXNAME+2 but use only CTL_MAXNAME\n\t// as the size. I don't know why the +2 is here, but the\n\t// kernel uses +2 for its own implementation of this function.\n\t// I am scared that if we don't include the +2 here, the kernel\n\t// will silently write 2 words farther than we specify\n\t// and we'll get memory corruption.\n\tvar buf [CTL_MAXNAME + 2]_C_int\n\tn := uintptr(CTL_MAXNAME) * siz\n\n\tp := (*byte)(unsafe.Pointer(&buf[0]))\n\tbytes, err := ByteSliceFromString(name)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Magic sysctl: \"setting\" 0.3 to a string name\n\t// lets you read back the array of integers form.\n\tif err = sysctl([]_C_int{0, 3}, p, &n, &bytes[0], uintptr(len(name))); err != nil {\n\t\treturn nil, err\n\t}\n\treturn buf[0 : n/siz], nil\n}\n\nfunc Pipe(p []int) (err error) {\n\treturn Pipe2(p, 0)\n}\n\n//sysnb\tpipe2(p *[2]_C_int, flags int) (err error)\n\nfunc Pipe2(p []int, flags int) error {\n\tif len(p) != 2 {\n\t\treturn EINVAL\n\t}\n\tvar pp [2]_C_int\n\terr := pipe2(&pp, flags)\n\tp[0] = int(pp[0])\n\tp[1] = int(pp[1])\n\treturn err\n}\n\nfunc GetsockoptIPMreqn(fd, level, opt int) (*IPMreqn, error) {\n\tvar value IPMreqn\n\tvallen := _Socklen(SizeofIPMreqn)\n\terrno := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)\n\treturn &value, errno\n}\n\nfunc SetsockoptIPMreqn(fd, level, opt int, mreq *IPMreqn) (err error) {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(mreq), unsafe.Sizeof(*mreq))\n}\n\nfunc Accept4(fd, flags int) (nfd int, sa Sockaddr, err error) {\n\tvar rsa RawSockaddrAny\n\tvar len _Socklen = SizeofSockaddrAny\n\tnfd, err = accept4(fd, &rsa, &len, flags)\n\tif err != nil {\n\t\treturn\n\t}\n\tif len > SizeofSockaddrAny {\n\t\tpanic(\"RawSockaddrAny too small\")\n\t}\n\tsa, err = anyToSockaddr(fd, &rsa)\n\tif err != nil {\n\t\tClose(nfd)\n\t\tnfd = 0\n\t}\n\treturn\n}\n\nconst ImplementsGetwd = true\n\n//sys\tGetcwd(buf []byte) (n int, err error) = SYS___GETCWD\n\nfunc Getwd() (string, error) {\n\tvar buf [PathMax]byte\n\t_, err := Getcwd(buf[0:])\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tn := clen(buf[:])\n\tif n < 1 {\n\t\treturn \"\", EINVAL\n\t}\n\treturn string(buf[:n]), nil\n}\n\nfunc Getfsstat(buf []Statfs_t, flags int) (n int, err error) {\n\tvar (\n\t\t_p0          unsafe.Pointer\n\t\tbufsize      uintptr\n\t\toldBuf       []statfs_freebsd11_t\n\t\tneedsConvert bool\n\t)\n\n\tif len(buf) > 0 {\n\t\tif supportsABI(_ino64First) {\n\t\t\t_p0 = unsafe.Pointer(&buf[0])\n\t\t\tbufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf))\n\t\t} else {\n\t\t\tn := len(buf)\n\t\t\toldBuf = make([]statfs_freebsd11_t, n)\n\t\t\t_p0 = unsafe.Pointer(&oldBuf[0])\n\t\t\tbufsize = unsafe.Sizeof(statfs_freebsd11_t{}) * uintptr(n)\n\t\t\tneedsConvert = true\n\t\t}\n\t}\n\tvar sysno uintptr = SYS_GETFSSTAT\n\tif supportsABI(_ino64First) {\n\t\tsysno = SYS_GETFSSTAT_FREEBSD12\n\t}\n\tr0, _, e1 := Syscall(sysno, uintptr(_p0), bufsize, uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\tif e1 == 0 && needsConvert {\n\t\tfor i := range oldBuf {\n\t\t\tbuf[i].convertFrom(&oldBuf[i])\n\t\t}\n\t}\n\treturn\n}\n\nfunc setattrlistTimes(path string, times []Timespec, flags int) error {\n\t// used on Darwin for UtimesNano\n\treturn ENOSYS\n}\n\n//sys   ioctl(fd int, req uint, arg uintptr) (err error)\n\n// ioctl itself should not be exposed directly, but additional get/set\n// functions for specific types are permissible.\n\n// IoctlSetInt performs an ioctl operation which sets an integer value\n// on fd, using the specified request number.\nfunc IoctlSetInt(fd int, req uint, value int) error {\n\treturn ioctl(fd, req, uintptr(value))\n}\n\nfunc ioctlSetWinsize(fd int, req uint, value *Winsize) error {\n\treturn ioctl(fd, req, uintptr(unsafe.Pointer(value)))\n}\n\nfunc ioctlSetTermios(fd int, req uint, value *Termios) error {\n\treturn ioctl(fd, req, uintptr(unsafe.Pointer(value)))\n}\n\n// IoctlGetInt performs an ioctl operation which gets an integer value\n// from fd, using the specified request number.\nfunc IoctlGetInt(fd int, req uint) (int, error) {\n\tvar value int\n\terr := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))\n\treturn value, err\n}\n\nfunc IoctlGetWinsize(fd int, req uint) (*Winsize, error) {\n\tvar value Winsize\n\terr := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))\n\treturn &value, err\n}\n\nfunc IoctlGetTermios(fd int, req uint) (*Termios, error) {\n\tvar value Termios\n\terr := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))\n\treturn &value, err\n}\n\nfunc Uname(uname *Utsname) error {\n\tmib := []_C_int{CTL_KERN, KERN_OSTYPE}\n\tn := unsafe.Sizeof(uname.Sysname)\n\tif err := sysctl(mib, &uname.Sysname[0], &n, nil, 0); err != nil {\n\t\treturn err\n\t}\n\n\tmib = []_C_int{CTL_KERN, KERN_HOSTNAME}\n\tn = unsafe.Sizeof(uname.Nodename)\n\tif err := sysctl(mib, &uname.Nodename[0], &n, nil, 0); err != nil {\n\t\treturn err\n\t}\n\n\tmib = []_C_int{CTL_KERN, KERN_OSRELEASE}\n\tn = unsafe.Sizeof(uname.Release)\n\tif err := sysctl(mib, &uname.Release[0], &n, nil, 0); err != nil {\n\t\treturn err\n\t}\n\n\tmib = []_C_int{CTL_KERN, KERN_VERSION}\n\tn = unsafe.Sizeof(uname.Version)\n\tif err := sysctl(mib, &uname.Version[0], &n, nil, 0); err != nil {\n\t\treturn err\n\t}\n\n\t// The version might have newlines or tabs in it, convert them to\n\t// spaces.\n\tfor i, b := range uname.Version {\n\t\tif b == '\\n' || b == '\\t' {\n\t\t\tif i == len(uname.Version)-1 {\n\t\t\t\tuname.Version[i] = 0\n\t\t\t} else {\n\t\t\t\tuname.Version[i] = ' '\n\t\t\t}\n\t\t}\n\t}\n\n\tmib = []_C_int{CTL_HW, HW_MACHINE}\n\tn = unsafe.Sizeof(uname.Machine)\n\tif err := sysctl(mib, &uname.Machine[0], &n, nil, 0); err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\nfunc Stat(path string, st *Stat_t) (err error) {\n\tvar oldStat stat_freebsd11_t\n\tif supportsABI(_ino64First) {\n\t\treturn fstatat_freebsd12(AT_FDCWD, path, st, 0)\n\t}\n\terr = stat(path, &oldStat)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tst.convertFrom(&oldStat)\n\treturn nil\n}\n\nfunc Lstat(path string, st *Stat_t) (err error) {\n\tvar oldStat stat_freebsd11_t\n\tif supportsABI(_ino64First) {\n\t\treturn fstatat_freebsd12(AT_FDCWD, path, st, AT_SYMLINK_NOFOLLOW)\n\t}\n\terr = lstat(path, &oldStat)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tst.convertFrom(&oldStat)\n\treturn nil\n}\n\nfunc Fstat(fd int, st *Stat_t) (err error) {\n\tvar oldStat stat_freebsd11_t\n\tif supportsABI(_ino64First) {\n\t\treturn fstat_freebsd12(fd, st)\n\t}\n\terr = fstat(fd, &oldStat)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tst.convertFrom(&oldStat)\n\treturn nil\n}\n\nfunc Fstatat(fd int, path string, st *Stat_t, flags int) (err error) {\n\tvar oldStat stat_freebsd11_t\n\tif supportsABI(_ino64First) {\n\t\treturn fstatat_freebsd12(fd, path, st, flags)\n\t}\n\terr = fstatat(fd, path, &oldStat, flags)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tst.convertFrom(&oldStat)\n\treturn nil\n}\n\nfunc Statfs(path string, st *Statfs_t) (err error) {\n\tvar oldStatfs statfs_freebsd11_t\n\tif supportsABI(_ino64First) {\n\t\treturn statfs_freebsd12(path, st)\n\t}\n\terr = statfs(path, &oldStatfs)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tst.convertFrom(&oldStatfs)\n\treturn nil\n}\n\nfunc Fstatfs(fd int, st *Statfs_t) (err error) {\n\tvar oldStatfs statfs_freebsd11_t\n\tif supportsABI(_ino64First) {\n\t\treturn fstatfs_freebsd12(fd, st)\n\t}\n\terr = fstatfs(fd, &oldStatfs)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tst.convertFrom(&oldStatfs)\n\treturn nil\n}\n\nfunc Getdents(fd int, buf []byte) (n int, err error) {\n\treturn Getdirentries(fd, buf, nil)\n}\n\nfunc Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {\n\tif supportsABI(_ino64First) {\n\t\treturn getdirentries_freebsd12(fd, buf, basep)\n\t}\n\n\t// The old syscall entries are smaller than the new. Use 1/4 of the original\n\t// buffer size rounded up to DIRBLKSIZ (see /usr/src/lib/libc/sys/getdirentries.c).\n\toldBufLen := roundup(len(buf)/4, _dirblksiz)\n\toldBuf := make([]byte, oldBufLen)\n\tn, err = getdirentries(fd, oldBuf, basep)\n\tif err == nil && n > 0 {\n\t\tn = convertFromDirents11(buf, oldBuf[:n])\n\t}\n\treturn\n}\n\nfunc Mknod(path string, mode uint32, dev uint64) (err error) {\n\tvar oldDev int\n\tif supportsABI(_ino64First) {\n\t\treturn mknodat_freebsd12(AT_FDCWD, path, mode, dev)\n\t}\n\toldDev = int(dev)\n\treturn mknod(path, mode, oldDev)\n}\n\nfunc Mknodat(fd int, path string, mode uint32, dev uint64) (err error) {\n\tvar oldDev int\n\tif supportsABI(_ino64First) {\n\t\treturn mknodat_freebsd12(fd, path, mode, dev)\n\t}\n\toldDev = int(dev)\n\treturn mknodat(fd, path, mode, oldDev)\n}\n\n// round x to the nearest multiple of y, larger or equal to x.\n//\n// from /usr/include/sys/param.h Macros for counting and rounding.\n// #define roundup(x, y)   ((((x)+((y)-1))/(y))*(y))\nfunc roundup(x, y int) int {\n\treturn ((x + y - 1) / y) * y\n}\n\nfunc (s *Stat_t) convertFrom(old *stat_freebsd11_t) {\n\t*s = Stat_t{\n\t\tDev:     uint64(old.Dev),\n\t\tIno:     uint64(old.Ino),\n\t\tNlink:   uint64(old.Nlink),\n\t\tMode:    old.Mode,\n\t\tUid:     old.Uid,\n\t\tGid:     old.Gid,\n\t\tRdev:    uint64(old.Rdev),\n\t\tAtim:    old.Atim,\n\t\tMtim:    old.Mtim,\n\t\tCtim:    old.Ctim,\n\t\tBtim:    old.Btim,\n\t\tSize:    old.Size,\n\t\tBlocks:  old.Blocks,\n\t\tBlksize: old.Blksize,\n\t\tFlags:   old.Flags,\n\t\tGen:     uint64(old.Gen),\n\t}\n}\n\nfunc (s *Statfs_t) convertFrom(old *statfs_freebsd11_t) {\n\t*s = Statfs_t{\n\t\tVersion:     _statfsVersion,\n\t\tType:        old.Type,\n\t\tFlags:       old.Flags,\n\t\tBsize:       old.Bsize,\n\t\tIosize:      old.Iosize,\n\t\tBlocks:      old.Blocks,\n\t\tBfree:       old.Bfree,\n\t\tBavail:      old.Bavail,\n\t\tFiles:       old.Files,\n\t\tFfree:       old.Ffree,\n\t\tSyncwrites:  old.Syncwrites,\n\t\tAsyncwrites: old.Asyncwrites,\n\t\tSyncreads:   old.Syncreads,\n\t\tAsyncreads:  old.Asyncreads,\n\t\t// Spare\n\t\tNamemax: old.Namemax,\n\t\tOwner:   old.Owner,\n\t\tFsid:    old.Fsid,\n\t\t// Charspare\n\t\t// Fstypename\n\t\t// Mntfromname\n\t\t// Mntonname\n\t}\n\n\tsl := old.Fstypename[:]\n\tn := clen(*(*[]byte)(unsafe.Pointer(&sl)))\n\tcopy(s.Fstypename[:], old.Fstypename[:n])\n\n\tsl = old.Mntfromname[:]\n\tn = clen(*(*[]byte)(unsafe.Pointer(&sl)))\n\tcopy(s.Mntfromname[:], old.Mntfromname[:n])\n\n\tsl = old.Mntonname[:]\n\tn = clen(*(*[]byte)(unsafe.Pointer(&sl)))\n\tcopy(s.Mntonname[:], old.Mntonname[:n])\n}\n\nfunc convertFromDirents11(buf []byte, old []byte) int {\n\tconst (\n\t\tfixedSize    = int(unsafe.Offsetof(Dirent{}.Name))\n\t\toldFixedSize = int(unsafe.Offsetof(dirent_freebsd11{}.Name))\n\t)\n\n\tdstPos := 0\n\tsrcPos := 0\n\tfor dstPos+fixedSize < len(buf) && srcPos+oldFixedSize < len(old) {\n\t\tdstDirent := (*Dirent)(unsafe.Pointer(&buf[dstPos]))\n\t\tsrcDirent := (*dirent_freebsd11)(unsafe.Pointer(&old[srcPos]))\n\n\t\treclen := roundup(fixedSize+int(srcDirent.Namlen)+1, 8)\n\t\tif dstPos+reclen > len(buf) {\n\t\t\tbreak\n\t\t}\n\n\t\tdstDirent.Fileno = uint64(srcDirent.Fileno)\n\t\tdstDirent.Off = 0\n\t\tdstDirent.Reclen = uint16(reclen)\n\t\tdstDirent.Type = srcDirent.Type\n\t\tdstDirent.Pad0 = 0\n\t\tdstDirent.Namlen = uint16(srcDirent.Namlen)\n\t\tdstDirent.Pad1 = 0\n\n\t\tcopy(dstDirent.Name[:], srcDirent.Name[:srcDirent.Namlen])\n\t\tpadding := buf[dstPos+fixedSize+int(dstDirent.Namlen) : dstPos+reclen]\n\t\tfor i := range padding {\n\t\t\tpadding[i] = 0\n\t\t}\n\n\t\tdstPos += int(dstDirent.Reclen)\n\t\tsrcPos += int(srcDirent.Reclen)\n\t}\n\n\treturn dstPos\n}\n\nfunc Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tif raceenabled {\n\t\traceReleaseMerge(unsafe.Pointer(&ioSync))\n\t}\n\treturn sendfile(outfd, infd, offset, count)\n}\n\n/*\n * Exposed directly\n */\n//sys\tAccess(path string, mode uint32) (err error)\n//sys\tAdjtime(delta *Timeval, olddelta *Timeval) (err error)\n//sys\tCapEnter() (err error)\n//sys\tcapRightsGet(version int, fd int, rightsp *CapRights) (err error) = SYS___CAP_RIGHTS_GET\n//sys\tcapRightsLimit(fd int, rightsp *CapRights) (err error)\n//sys\tChdir(path string) (err error)\n//sys\tChflags(path string, flags int) (err error)\n//sys\tChmod(path string, mode uint32) (err error)\n//sys\tChown(path string, uid int, gid int) (err error)\n//sys\tChroot(path string) (err error)\n//sys\tClose(fd int) (err error)\n//sys\tDup(fd int) (nfd int, err error)\n//sys\tDup2(from int, to int) (err error)\n//sys\tExit(code int)\n//sys\tExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)\n//sys\tExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)\n//sys\tExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error)\n//sys\tExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error)\n//sys\tExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)\n//sys\tExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)\n//sys\tExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error)\n//sys\tExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error)\n//sys\tExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)\n//sys\tExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)\n//sys\tExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error)\n//sys\tExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error)\n//sys\tFadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_POSIX_FADVISE\n//sys\tFaccessat(dirfd int, path string, mode uint32, flags int) (err error)\n//sys\tFchdir(fd int) (err error)\n//sys\tFchflags(fd int, flags int) (err error)\n//sys\tFchmod(fd int, mode uint32) (err error)\n//sys\tFchmodat(dirfd int, path string, mode uint32, flags int) (err error)\n//sys\tFchown(fd int, uid int, gid int) (err error)\n//sys\tFchownat(dirfd int, path string, uid int, gid int, flags int) (err error)\n//sys\tFlock(fd int, how int) (err error)\n//sys\tFpathconf(fd int, name int) (val int, err error)\n//sys\tfstat(fd int, stat *stat_freebsd11_t) (err error)\n//sys\tfstat_freebsd12(fd int, stat *Stat_t) (err error)\n//sys\tfstatat(fd int, path string, stat *stat_freebsd11_t, flags int) (err error)\n//sys\tfstatat_freebsd12(fd int, path string, stat *Stat_t, flags int) (err error)\n//sys\tfstatfs(fd int, stat *statfs_freebsd11_t) (err error)\n//sys\tfstatfs_freebsd12(fd int, stat *Statfs_t) (err error)\n//sys\tFsync(fd int) (err error)\n//sys\tFtruncate(fd int, length int64) (err error)\n//sys\tgetdirentries(fd int, buf []byte, basep *uintptr) (n int, err error)\n//sys\tgetdirentries_freebsd12(fd int, buf []byte, basep *uintptr) (n int, err error)\n//sys\tGetdtablesize() (size int)\n//sysnb\tGetegid() (egid int)\n//sysnb\tGeteuid() (uid int)\n//sysnb\tGetgid() (gid int)\n//sysnb\tGetpgid(pid int) (pgid int, err error)\n//sysnb\tGetpgrp() (pgrp int)\n//sysnb\tGetpid() (pid int)\n//sysnb\tGetppid() (ppid int)\n//sys\tGetpriority(which int, who int) (prio int, err error)\n//sysnb\tGetrlimit(which int, lim *Rlimit) (err error)\n//sysnb\tGetrusage(who int, rusage *Rusage) (err error)\n//sysnb\tGetsid(pid int) (sid int, err error)\n//sysnb\tGettimeofday(tv *Timeval) (err error)\n//sysnb\tGetuid() (uid int)\n//sys\tIssetugid() (tainted bool)\n//sys\tKill(pid int, signum syscall.Signal) (err error)\n//sys\tKqueue() (fd int, err error)\n//sys\tLchown(path string, uid int, gid int) (err error)\n//sys\tLink(path string, link string) (err error)\n//sys\tLinkat(pathfd int, path string, linkfd int, link string, flags int) (err error)\n//sys\tListen(s int, backlog int) (err error)\n//sys\tlstat(path string, stat *stat_freebsd11_t) (err error)\n//sys\tMkdir(path string, mode uint32) (err error)\n//sys\tMkdirat(dirfd int, path string, mode uint32) (err error)\n//sys\tMkfifo(path string, mode uint32) (err error)\n//sys\tmknod(path string, mode uint32, dev int) (err error)\n//sys\tmknodat(fd int, path string, mode uint32, dev int) (err error)\n//sys\tmknodat_freebsd12(fd int, path string, mode uint32, dev uint64) (err error)\n//sys\tNanosleep(time *Timespec, leftover *Timespec) (err error)\n//sys\tOpen(path string, mode int, perm uint32) (fd int, err error)\n//sys\tOpenat(fdat int, path string, mode int, perm uint32) (fd int, err error)\n//sys\tPathconf(path string, name int) (val int, err error)\n//sys\tPread(fd int, p []byte, offset int64) (n int, err error)\n//sys\tPwrite(fd int, p []byte, offset int64) (n int, err error)\n//sys\tread(fd int, p []byte) (n int, err error)\n//sys\tReadlink(path string, buf []byte) (n int, err error)\n//sys\tReadlinkat(dirfd int, path string, buf []byte) (n int, err error)\n//sys\tRename(from string, to string) (err error)\n//sys\tRenameat(fromfd int, from string, tofd int, to string) (err error)\n//sys\tRevoke(path string) (err error)\n//sys\tRmdir(path string) (err error)\n//sys\tSeek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK\n//sys\tSelect(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error)\n//sysnb\tSetegid(egid int) (err error)\n//sysnb\tSeteuid(euid int) (err error)\n//sysnb\tSetgid(gid int) (err error)\n//sys\tSetlogin(name string) (err error)\n//sysnb\tSetpgid(pid int, pgid int) (err error)\n//sys\tSetpriority(which int, who int, prio int) (err error)\n//sysnb\tSetregid(rgid int, egid int) (err error)\n//sysnb\tSetreuid(ruid int, euid int) (err error)\n//sysnb\tSetresgid(rgid int, egid int, sgid int) (err error)\n//sysnb\tSetresuid(ruid int, euid int, suid int) (err error)\n//sysnb\tSetrlimit(which int, lim *Rlimit) (err error)\n//sysnb\tSetsid() (pid int, err error)\n//sysnb\tSettimeofday(tp *Timeval) (err error)\n//sysnb\tSetuid(uid int) (err error)\n//sys\tstat(path string, stat *stat_freebsd11_t) (err error)\n//sys\tstatfs(path string, stat *statfs_freebsd11_t) (err error)\n//sys\tstatfs_freebsd12(path string, stat *Statfs_t) (err error)\n//sys\tSymlink(path string, link string) (err error)\n//sys\tSymlinkat(oldpath string, newdirfd int, newpath string) (err error)\n//sys\tSync() (err error)\n//sys\tTruncate(path string, length int64) (err error)\n//sys\tUmask(newmask int) (oldmask int)\n//sys\tUndelete(path string) (err error)\n//sys\tUnlink(path string) (err error)\n//sys\tUnlinkat(dirfd int, path string, flags int) (err error)\n//sys\tUnmount(path string, flags int) (err error)\n//sys\twrite(fd int, p []byte) (n int, err error)\n//sys   mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error)\n//sys   munmap(addr uintptr, length uintptr) (err error)\n//sys\treadlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ\n//sys\twritelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE\n//sys\taccept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error)\n//sys\tutimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error)\n\n/*\n * Unimplemented\n */\n// Profil\n// Sigaction\n// Sigprocmask\n// Getlogin\n// Sigpending\n// Sigaltstack\n// Ioctl\n// Reboot\n// Execve\n// Vfork\n// Sbrk\n// Sstk\n// Ovadvise\n// Mincore\n// Setitimer\n// Swapon\n// Select\n// Sigsuspend\n// Readv\n// Writev\n// Nfssvc\n// Getfh\n// Quotactl\n// Mount\n// Csops\n// Waitid\n// Add_profil\n// Kdebug_trace\n// Sigreturn\n// Atsocket\n// Kqueue_from_portset_np\n// Kqueue_portset\n// Getattrlist\n// Setattrlist\n// Getdents\n// Getdirentriesattr\n// Searchfs\n// Delete\n// Copyfile\n// Watchevent\n// Waitevent\n// Modwatch\n// Fsctl\n// Initgroups\n// Posix_spawn\n// Nfsclnt\n// Fhopen\n// Minherit\n// Semsys\n// Msgsys\n// Shmsys\n// Semctl\n// Semget\n// Semop\n// Msgctl\n// Msgget\n// Msgsnd\n// Msgrcv\n// Shmat\n// Shmctl\n// Shmdt\n// Shmget\n// Shm_open\n// Shm_unlink\n// Sem_open\n// Sem_close\n// Sem_unlink\n// Sem_wait\n// Sem_trywait\n// Sem_post\n// Sem_getvalue\n// Sem_init\n// Sem_destroy\n// Open_extended\n// Umask_extended\n// Stat_extended\n// Lstat_extended\n// Fstat_extended\n// Chmod_extended\n// Fchmod_extended\n// Access_extended\n// Settid\n// Gettid\n// Setsgroups\n// Getsgroups\n// Setwgroups\n// Getwgroups\n// Mkfifo_extended\n// Mkdir_extended\n// Identitysvc\n// Shared_region_check_np\n// Shared_region_map_np\n// __pthread_mutex_destroy\n// __pthread_mutex_init\n// __pthread_mutex_lock\n// __pthread_mutex_trylock\n// __pthread_mutex_unlock\n// __pthread_cond_init\n// __pthread_cond_destroy\n// __pthread_cond_broadcast\n// __pthread_cond_signal\n// Setsid_with_pid\n// __pthread_cond_timedwait\n// Aio_fsync\n// Aio_return\n// Aio_suspend\n// Aio_cancel\n// Aio_error\n// Aio_read\n// Aio_write\n// Lio_listio\n// __pthread_cond_wait\n// Iopolicysys\n// __pthread_kill\n// __pthread_sigmask\n// __sigwait\n// __disable_threadsignal\n// __pthread_markcancel\n// __pthread_canceled\n// __semwait_signal\n// Proc_info\n// Stat64_extended\n// Lstat64_extended\n// Fstat64_extended\n// __pthread_chdir\n// __pthread_fchdir\n// Audit\n// Auditon\n// Getauid\n// Setauid\n// Getaudit\n// Setaudit\n// Getaudit_addr\n// Setaudit_addr\n// Auditctl\n// Bsdthread_create\n// Bsdthread_terminate\n// Stack_snapshot\n// Bsdthread_register\n// Workq_open\n// Workq_ops\n// __mac_execve\n// __mac_syscall\n// __mac_get_file\n// __mac_set_file\n// __mac_get_link\n// __mac_set_link\n// __mac_get_proc\n// __mac_set_proc\n// __mac_get_fd\n// __mac_set_fd\n// __mac_get_pid\n// __mac_get_lcid\n// __mac_get_lctx\n// __mac_set_lctx\n// Setlcid\n// Read_nocancel\n// Write_nocancel\n// Open_nocancel\n// Close_nocancel\n// Wait4_nocancel\n// Recvmsg_nocancel\n// Sendmsg_nocancel\n// Recvfrom_nocancel\n// Accept_nocancel\n// Fcntl_nocancel\n// Select_nocancel\n// Fsync_nocancel\n// Connect_nocancel\n// Sigsuspend_nocancel\n// Readv_nocancel\n// Writev_nocancel\n// Sendto_nocancel\n// Pread_nocancel\n// Pwrite_nocancel\n// Waitid_nocancel\n// Poll_nocancel\n// Msgsnd_nocancel\n// Msgrcv_nocancel\n// Sem_wait_nocancel\n// Aio_suspend_nocancel\n// __sigwait_nocancel\n// __semwait_signal_nocancel\n// __mac_mount\n// __mac_get_mount\n// __mac_getfsstat\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_freebsd_386.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build 386,freebsd\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: int32(sec), Nsec: int32(nsec)}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: int32(sec), Usec: int32(usec)}\n}\n\nfunc SetKevent(k *Kevent_t, fd, mode, flags int) {\n\tk.Ident = uint32(fd)\n\tk.Filter = int16(mode)\n\tk.Flags = uint16(flags)\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tvar writtenOut uint64 = 0\n\t_, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr((*offset)>>32), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0)\n\n\twritten = int(writtenOut)\n\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\nfunc Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build amd64,freebsd\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: usec}\n}\n\nfunc SetKevent(k *Kevent_t, fd, mode, flags int) {\n\tk.Ident = uint64(fd)\n\tk.Filter = int16(mode)\n\tk.Flags = uint16(flags)\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tvar writtenOut uint64 = 0\n\t_, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0, 0)\n\n\twritten = int(writtenOut)\n\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\nfunc Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go",
    "content": "// Copyright 2012 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build arm,freebsd\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: int32(nsec)}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: int32(usec)}\n}\n\nfunc SetKevent(k *Kevent_t, fd, mode, flags int) {\n\tk.Ident = uint32(fd)\n\tk.Filter = int16(mode)\n\tk.Flags = uint16(flags)\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tvar writtenOut uint64 = 0\n\t_, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr((*offset)>>32), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0)\n\n\twritten = int(writtenOut)\n\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\nfunc Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_freebsd_arm64.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build arm64,freebsd\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: usec}\n}\n\nfunc SetKevent(k *Kevent_t, fd, mode, flags int) {\n\tk.Ident = uint64(fd)\n\tk.Filter = int16(mode)\n\tk.Flags = uint16(flags)\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tvar writtenOut uint64 = 0\n\t_, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0, 0)\n\n\twritten = int(writtenOut)\n\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\nfunc Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_linux.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Linux system calls.\n// This file is compiled as ordinary Go code,\n// but it is also input to mksyscall,\n// which parses the //sys lines and generates system call stubs.\n// Note that sometimes we use a lowercase //sys name and\n// wrap it in our own nicer implementation.\n\npackage unix\n\nimport (\n\t\"encoding/binary\"\n\t\"net\"\n\t\"runtime\"\n\t\"syscall\"\n\t\"unsafe\"\n)\n\n/*\n * Wrapped\n */\n\nfunc Access(path string, mode uint32) (err error) {\n\treturn Faccessat(AT_FDCWD, path, mode, 0)\n}\n\nfunc Chmod(path string, mode uint32) (err error) {\n\treturn Fchmodat(AT_FDCWD, path, mode, 0)\n}\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\treturn Fchownat(AT_FDCWD, path, uid, gid, 0)\n}\n\nfunc Creat(path string, mode uint32) (fd int, err error) {\n\treturn Open(path, O_CREAT|O_WRONLY|O_TRUNC, mode)\n}\n\n//sys\tFanotifyInit(flags uint, event_f_flags uint) (fd int, err error)\n//sys\tfanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error)\n\nfunc FanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname string) (err error) {\n\tif pathname == \"\" {\n\t\treturn fanotifyMark(fd, flags, mask, dirFd, nil)\n\t}\n\tp, err := BytePtrFromString(pathname)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn fanotifyMark(fd, flags, mask, dirFd, p)\n}\n\n//sys\tfchmodat(dirfd int, path string, mode uint32) (err error)\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\t// Linux fchmodat doesn't support the flags parameter. Mimick glibc's behavior\n\t// and check the flags. Otherwise the mode would be applied to the symlink\n\t// destination which is not what the user expects.\n\tif flags&^AT_SYMLINK_NOFOLLOW != 0 {\n\t\treturn EINVAL\n\t} else if flags&AT_SYMLINK_NOFOLLOW != 0 {\n\t\treturn EOPNOTSUPP\n\t}\n\treturn fchmodat(dirfd, path, mode)\n}\n\n//sys\tioctl(fd int, req uint, arg uintptr) (err error)\n\n// ioctl itself should not be exposed directly, but additional get/set\n// functions for specific types are permissible.\n\n// IoctlSetPointerInt performs an ioctl operation which sets an\n// integer value on fd, using the specified request number. The ioctl\n// argument is called with a pointer to the integer value, rather than\n// passing the integer value directly.\nfunc IoctlSetPointerInt(fd int, req uint, value int) error {\n\tv := int32(value)\n\treturn ioctl(fd, req, uintptr(unsafe.Pointer(&v)))\n}\n\n// IoctlSetInt performs an ioctl operation which sets an integer value\n// on fd, using the specified request number.\nfunc IoctlSetInt(fd int, req uint, value int) error {\n\treturn ioctl(fd, req, uintptr(value))\n}\n\nfunc ioctlSetWinsize(fd int, req uint, value *Winsize) error {\n\treturn ioctl(fd, req, uintptr(unsafe.Pointer(value)))\n}\n\nfunc ioctlSetTermios(fd int, req uint, value *Termios) error {\n\treturn ioctl(fd, req, uintptr(unsafe.Pointer(value)))\n}\n\nfunc IoctlSetRTCTime(fd int, value *RTCTime) error {\n\terr := ioctl(fd, RTC_SET_TIME, uintptr(unsafe.Pointer(value)))\n\truntime.KeepAlive(value)\n\treturn err\n}\n\n// IoctlGetInt performs an ioctl operation which gets an integer value\n// from fd, using the specified request number.\nfunc IoctlGetInt(fd int, req uint) (int, error) {\n\tvar value int\n\terr := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))\n\treturn value, err\n}\n\nfunc IoctlGetUint32(fd int, req uint) (uint32, error) {\n\tvar value uint32\n\terr := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))\n\treturn value, err\n}\n\nfunc IoctlGetWinsize(fd int, req uint) (*Winsize, error) {\n\tvar value Winsize\n\terr := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))\n\treturn &value, err\n}\n\nfunc IoctlGetTermios(fd int, req uint) (*Termios, error) {\n\tvar value Termios\n\terr := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))\n\treturn &value, err\n}\n\nfunc IoctlGetRTCTime(fd int) (*RTCTime, error) {\n\tvar value RTCTime\n\terr := ioctl(fd, RTC_RD_TIME, uintptr(unsafe.Pointer(&value)))\n\treturn &value, err\n}\n\n//sys\tLinkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error)\n\nfunc Link(oldpath string, newpath string) (err error) {\n\treturn Linkat(AT_FDCWD, oldpath, AT_FDCWD, newpath, 0)\n}\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\treturn Mkdirat(AT_FDCWD, path, mode)\n}\n\nfunc Mknod(path string, mode uint32, dev int) (err error) {\n\treturn Mknodat(AT_FDCWD, path, mode, dev)\n}\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\treturn openat(AT_FDCWD, path, mode|O_LARGEFILE, perm)\n}\n\n//sys\topenat(dirfd int, path string, flags int, mode uint32) (fd int, err error)\n\nfunc Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {\n\treturn openat(dirfd, path, flags|O_LARGEFILE, mode)\n}\n\n//sys\tppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error)\n\nfunc Ppoll(fds []PollFd, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n\tif len(fds) == 0 {\n\t\treturn ppoll(nil, 0, timeout, sigmask)\n\t}\n\treturn ppoll(&fds[0], len(fds), timeout, sigmask)\n}\n\n//sys\tReadlinkat(dirfd int, path string, buf []byte) (n int, err error)\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\treturn Readlinkat(AT_FDCWD, path, buf)\n}\n\nfunc Rename(oldpath string, newpath string) (err error) {\n\treturn Renameat(AT_FDCWD, oldpath, AT_FDCWD, newpath)\n}\n\nfunc Rmdir(path string) error {\n\treturn Unlinkat(AT_FDCWD, path, AT_REMOVEDIR)\n}\n\n//sys\tSymlinkat(oldpath string, newdirfd int, newpath string) (err error)\n\nfunc Symlink(oldpath string, newpath string) (err error) {\n\treturn Symlinkat(oldpath, AT_FDCWD, newpath)\n}\n\nfunc Unlink(path string) error {\n\treturn Unlinkat(AT_FDCWD, path, 0)\n}\n\n//sys\tUnlinkat(dirfd int, path string, flags int) (err error)\n\nfunc Utimes(path string, tv []Timeval) error {\n\tif tv == nil {\n\t\terr := utimensat(AT_FDCWD, path, nil, 0)\n\t\tif err != ENOSYS {\n\t\t\treturn err\n\t\t}\n\t\treturn utimes(path, nil)\n\t}\n\tif len(tv) != 2 {\n\t\treturn EINVAL\n\t}\n\tvar ts [2]Timespec\n\tts[0] = NsecToTimespec(TimevalToNsec(tv[0]))\n\tts[1] = NsecToTimespec(TimevalToNsec(tv[1]))\n\terr := utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)\n\tif err != ENOSYS {\n\t\treturn err\n\t}\n\treturn utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0])))\n}\n\n//sys\tutimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error)\n\nfunc UtimesNano(path string, ts []Timespec) error {\n\tif ts == nil {\n\t\terr := utimensat(AT_FDCWD, path, nil, 0)\n\t\tif err != ENOSYS {\n\t\t\treturn err\n\t\t}\n\t\treturn utimes(path, nil)\n\t}\n\tif len(ts) != 2 {\n\t\treturn EINVAL\n\t}\n\terr := utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)\n\tif err != ENOSYS {\n\t\treturn err\n\t}\n\t// If the utimensat syscall isn't available (utimensat was added to Linux\n\t// in 2.6.22, Released, 8 July 2007) then fall back to utimes\n\tvar tv [2]Timeval\n\tfor i := 0; i < 2; i++ {\n\t\ttv[i] = NsecToTimeval(TimespecToNsec(ts[i]))\n\t}\n\treturn utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0])))\n}\n\nfunc UtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) error {\n\tif ts == nil {\n\t\treturn utimensat(dirfd, path, nil, flags)\n\t}\n\tif len(ts) != 2 {\n\t\treturn EINVAL\n\t}\n\treturn utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), flags)\n}\n\nfunc Futimesat(dirfd int, path string, tv []Timeval) error {\n\tif tv == nil {\n\t\treturn futimesat(dirfd, path, nil)\n\t}\n\tif len(tv) != 2 {\n\t\treturn EINVAL\n\t}\n\treturn futimesat(dirfd, path, (*[2]Timeval)(unsafe.Pointer(&tv[0])))\n}\n\nfunc Futimes(fd int, tv []Timeval) (err error) {\n\t// Believe it or not, this is the best we can do on Linux\n\t// (and is what glibc does).\n\treturn Utimes(\"/proc/self/fd/\"+itoa(fd), tv)\n}\n\nconst ImplementsGetwd = true\n\n//sys\tGetcwd(buf []byte) (n int, err error)\n\nfunc Getwd() (wd string, err error) {\n\tvar buf [PathMax]byte\n\tn, err := Getcwd(buf[0:])\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\t// Getcwd returns the number of bytes written to buf, including the NUL.\n\tif n < 1 || n > len(buf) || buf[n-1] != 0 {\n\t\treturn \"\", EINVAL\n\t}\n\treturn string(buf[0 : n-1]), nil\n}\n\nfunc Getgroups() (gids []int, err error) {\n\tn, err := getgroups(0, nil)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif n == 0 {\n\t\treturn nil, nil\n\t}\n\n\t// Sanity check group count. Max is 1<<16 on Linux.\n\tif n < 0 || n > 1<<20 {\n\t\treturn nil, EINVAL\n\t}\n\n\ta := make([]_Gid_t, n)\n\tn, err = getgroups(n, &a[0])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tgids = make([]int, n)\n\tfor i, v := range a[0:n] {\n\t\tgids[i] = int(v)\n\t}\n\treturn\n}\n\nfunc Setgroups(gids []int) (err error) {\n\tif len(gids) == 0 {\n\t\treturn setgroups(0, nil)\n\t}\n\n\ta := make([]_Gid_t, len(gids))\n\tfor i, v := range gids {\n\t\ta[i] = _Gid_t(v)\n\t}\n\treturn setgroups(len(a), &a[0])\n}\n\ntype WaitStatus uint32\n\n// Wait status is 7 bits at bottom, either 0 (exited),\n// 0x7F (stopped), or a signal number that caused an exit.\n// The 0x80 bit is whether there was a core dump.\n// An extra number (exit code, signal causing a stop)\n// is in the high bits. At least that's the idea.\n// There are various irregularities. For example, the\n// \"continued\" status is 0xFFFF, distinguishing itself\n// from stopped via the core dump bit.\n\nconst (\n\tmask    = 0x7F\n\tcore    = 0x80\n\texited  = 0x00\n\tstopped = 0x7F\n\tshift   = 8\n)\n\nfunc (w WaitStatus) Exited() bool { return w&mask == exited }\n\nfunc (w WaitStatus) Signaled() bool { return w&mask != stopped && w&mask != exited }\n\nfunc (w WaitStatus) Stopped() bool { return w&0xFF == stopped }\n\nfunc (w WaitStatus) Continued() bool { return w == 0xFFFF }\n\nfunc (w WaitStatus) CoreDump() bool { return w.Signaled() && w&core != 0 }\n\nfunc (w WaitStatus) ExitStatus() int {\n\tif !w.Exited() {\n\t\treturn -1\n\t}\n\treturn int(w>>shift) & 0xFF\n}\n\nfunc (w WaitStatus) Signal() syscall.Signal {\n\tif !w.Signaled() {\n\t\treturn -1\n\t}\n\treturn syscall.Signal(w & mask)\n}\n\nfunc (w WaitStatus) StopSignal() syscall.Signal {\n\tif !w.Stopped() {\n\t\treturn -1\n\t}\n\treturn syscall.Signal(w>>shift) & 0xFF\n}\n\nfunc (w WaitStatus) TrapCause() int {\n\tif w.StopSignal() != SIGTRAP {\n\t\treturn -1\n\t}\n\treturn int(w>>shift) >> 8\n}\n\n//sys\twait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error)\n\nfunc Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error) {\n\tvar status _C_int\n\twpid, err = wait4(pid, &status, options, rusage)\n\tif wstatus != nil {\n\t\t*wstatus = WaitStatus(status)\n\t}\n\treturn\n}\n\nfunc Mkfifo(path string, mode uint32) error {\n\treturn Mknod(path, mode|S_IFIFO, 0)\n}\n\nfunc Mkfifoat(dirfd int, path string, mode uint32) error {\n\treturn Mknodat(dirfd, path, mode|S_IFIFO, 0)\n}\n\nfunc (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tif sa.Port < 0 || sa.Port > 0xFFFF {\n\t\treturn nil, 0, EINVAL\n\t}\n\tsa.raw.Family = AF_INET\n\tp := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))\n\tp[0] = byte(sa.Port >> 8)\n\tp[1] = byte(sa.Port)\n\tfor i := 0; i < len(sa.Addr); i++ {\n\t\tsa.raw.Addr[i] = sa.Addr[i]\n\t}\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrInet4, nil\n}\n\nfunc (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tif sa.Port < 0 || sa.Port > 0xFFFF {\n\t\treturn nil, 0, EINVAL\n\t}\n\tsa.raw.Family = AF_INET6\n\tp := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))\n\tp[0] = byte(sa.Port >> 8)\n\tp[1] = byte(sa.Port)\n\tsa.raw.Scope_id = sa.ZoneId\n\tfor i := 0; i < len(sa.Addr); i++ {\n\t\tsa.raw.Addr[i] = sa.Addr[i]\n\t}\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrInet6, nil\n}\n\nfunc (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tname := sa.Name\n\tn := len(name)\n\tif n >= len(sa.raw.Path) {\n\t\treturn nil, 0, EINVAL\n\t}\n\tsa.raw.Family = AF_UNIX\n\tfor i := 0; i < n; i++ {\n\t\tsa.raw.Path[i] = int8(name[i])\n\t}\n\t// length is family (uint16), name, NUL.\n\tsl := _Socklen(2)\n\tif n > 0 {\n\t\tsl += _Socklen(n) + 1\n\t}\n\tif sa.raw.Path[0] == '@' {\n\t\tsa.raw.Path[0] = 0\n\t\t// Don't count trailing NUL for abstract address.\n\t\tsl--\n\t}\n\n\treturn unsafe.Pointer(&sa.raw), sl, nil\n}\n\n// SockaddrLinklayer implements the Sockaddr interface for AF_PACKET type sockets.\ntype SockaddrLinklayer struct {\n\tProtocol uint16\n\tIfindex  int\n\tHatype   uint16\n\tPkttype  uint8\n\tHalen    uint8\n\tAddr     [8]byte\n\traw      RawSockaddrLinklayer\n}\n\nfunc (sa *SockaddrLinklayer) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tif sa.Ifindex < 0 || sa.Ifindex > 0x7fffffff {\n\t\treturn nil, 0, EINVAL\n\t}\n\tsa.raw.Family = AF_PACKET\n\tsa.raw.Protocol = sa.Protocol\n\tsa.raw.Ifindex = int32(sa.Ifindex)\n\tsa.raw.Hatype = sa.Hatype\n\tsa.raw.Pkttype = sa.Pkttype\n\tsa.raw.Halen = sa.Halen\n\tfor i := 0; i < len(sa.Addr); i++ {\n\t\tsa.raw.Addr[i] = sa.Addr[i]\n\t}\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrLinklayer, nil\n}\n\n// SockaddrNetlink implements the Sockaddr interface for AF_NETLINK type sockets.\ntype SockaddrNetlink struct {\n\tFamily uint16\n\tPad    uint16\n\tPid    uint32\n\tGroups uint32\n\traw    RawSockaddrNetlink\n}\n\nfunc (sa *SockaddrNetlink) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tsa.raw.Family = AF_NETLINK\n\tsa.raw.Pad = sa.Pad\n\tsa.raw.Pid = sa.Pid\n\tsa.raw.Groups = sa.Groups\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrNetlink, nil\n}\n\n// SockaddrHCI implements the Sockaddr interface for AF_BLUETOOTH type sockets\n// using the HCI protocol.\ntype SockaddrHCI struct {\n\tDev     uint16\n\tChannel uint16\n\traw     RawSockaddrHCI\n}\n\nfunc (sa *SockaddrHCI) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tsa.raw.Family = AF_BLUETOOTH\n\tsa.raw.Dev = sa.Dev\n\tsa.raw.Channel = sa.Channel\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrHCI, nil\n}\n\n// SockaddrL2 implements the Sockaddr interface for AF_BLUETOOTH type sockets\n// using the L2CAP protocol.\ntype SockaddrL2 struct {\n\tPSM      uint16\n\tCID      uint16\n\tAddr     [6]uint8\n\tAddrType uint8\n\traw      RawSockaddrL2\n}\n\nfunc (sa *SockaddrL2) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tsa.raw.Family = AF_BLUETOOTH\n\tpsm := (*[2]byte)(unsafe.Pointer(&sa.raw.Psm))\n\tpsm[0] = byte(sa.PSM)\n\tpsm[1] = byte(sa.PSM >> 8)\n\tfor i := 0; i < len(sa.Addr); i++ {\n\t\tsa.raw.Bdaddr[i] = sa.Addr[len(sa.Addr)-1-i]\n\t}\n\tcid := (*[2]byte)(unsafe.Pointer(&sa.raw.Cid))\n\tcid[0] = byte(sa.CID)\n\tcid[1] = byte(sa.CID >> 8)\n\tsa.raw.Bdaddr_type = sa.AddrType\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrL2, nil\n}\n\n// SockaddrRFCOMM implements the Sockaddr interface for AF_BLUETOOTH type sockets\n// using the RFCOMM protocol.\n//\n// Server example:\n//\n//      fd, _ := Socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM)\n//      _ = unix.Bind(fd, &unix.SockaddrRFCOMM{\n//      \tChannel: 1,\n//      \tAddr:    [6]uint8{0, 0, 0, 0, 0, 0}, // BDADDR_ANY or 00:00:00:00:00:00\n//      })\n//      _ = Listen(fd, 1)\n//      nfd, sa, _ := Accept(fd)\n//      fmt.Printf(\"conn addr=%v fd=%d\", sa.(*unix.SockaddrRFCOMM).Addr, nfd)\n//      Read(nfd, buf)\n//\n// Client example:\n//\n//      fd, _ := Socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM)\n//      _ = Connect(fd, &SockaddrRFCOMM{\n//      \tChannel: 1,\n//      \tAddr:    [6]byte{0x11, 0x22, 0x33, 0xaa, 0xbb, 0xcc}, // CC:BB:AA:33:22:11\n//      })\n//      Write(fd, []byte(`hello`))\ntype SockaddrRFCOMM struct {\n\t// Addr represents a bluetooth address, byte ordering is little-endian.\n\tAddr [6]uint8\n\n\t// Channel is a designated bluetooth channel, only 1-30 are available for use.\n\t// Since Linux 2.6.7 and further zero value is the first available channel.\n\tChannel uint8\n\n\traw RawSockaddrRFCOMM\n}\n\nfunc (sa *SockaddrRFCOMM) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tsa.raw.Family = AF_BLUETOOTH\n\tsa.raw.Channel = sa.Channel\n\tsa.raw.Bdaddr = sa.Addr\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrRFCOMM, nil\n}\n\n// SockaddrCAN implements the Sockaddr interface for AF_CAN type sockets.\n// The RxID and TxID fields are used for transport protocol addressing in\n// (CAN_TP16, CAN_TP20, CAN_MCNET, and CAN_ISOTP), they can be left with\n// zero values for CAN_RAW and CAN_BCM sockets as they have no meaning.\n//\n// The SockaddrCAN struct must be bound to the socket file descriptor\n// using Bind before the CAN socket can be used.\n//\n//      // Read one raw CAN frame\n//      fd, _ := Socket(AF_CAN, SOCK_RAW, CAN_RAW)\n//      addr := &SockaddrCAN{Ifindex: index}\n//      Bind(fd, addr)\n//      frame := make([]byte, 16)\n//      Read(fd, frame)\n//\n// The full SocketCAN documentation can be found in the linux kernel\n// archives at: https://www.kernel.org/doc/Documentation/networking/can.txt\ntype SockaddrCAN struct {\n\tIfindex int\n\tRxID    uint32\n\tTxID    uint32\n\traw     RawSockaddrCAN\n}\n\nfunc (sa *SockaddrCAN) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tif sa.Ifindex < 0 || sa.Ifindex > 0x7fffffff {\n\t\treturn nil, 0, EINVAL\n\t}\n\tsa.raw.Family = AF_CAN\n\tsa.raw.Ifindex = int32(sa.Ifindex)\n\trx := (*[4]byte)(unsafe.Pointer(&sa.RxID))\n\tfor i := 0; i < 4; i++ {\n\t\tsa.raw.Addr[i] = rx[i]\n\t}\n\ttx := (*[4]byte)(unsafe.Pointer(&sa.TxID))\n\tfor i := 0; i < 4; i++ {\n\t\tsa.raw.Addr[i+4] = tx[i]\n\t}\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrCAN, nil\n}\n\n// SockaddrALG implements the Sockaddr interface for AF_ALG type sockets.\n// SockaddrALG enables userspace access to the Linux kernel's cryptography\n// subsystem. The Type and Name fields specify which type of hash or cipher\n// should be used with a given socket.\n//\n// To create a file descriptor that provides access to a hash or cipher, both\n// Bind and Accept must be used. Once the setup process is complete, input\n// data can be written to the socket, processed by the kernel, and then read\n// back as hash output or ciphertext.\n//\n// Here is an example of using an AF_ALG socket with SHA1 hashing.\n// The initial socket setup process is as follows:\n//\n//      // Open a socket to perform SHA1 hashing.\n//      fd, _ := unix.Socket(unix.AF_ALG, unix.SOCK_SEQPACKET, 0)\n//      addr := &unix.SockaddrALG{Type: \"hash\", Name: \"sha1\"}\n//      unix.Bind(fd, addr)\n//      // Note: unix.Accept does not work at this time; must invoke accept()\n//      // manually using unix.Syscall.\n//      hashfd, _, _ := unix.Syscall(unix.SYS_ACCEPT, uintptr(fd), 0, 0)\n//\n// Once a file descriptor has been returned from Accept, it may be used to\n// perform SHA1 hashing. The descriptor is not safe for concurrent use, but\n// may be re-used repeatedly with subsequent Write and Read operations.\n//\n// When hashing a small byte slice or string, a single Write and Read may\n// be used:\n//\n//      // Assume hashfd is already configured using the setup process.\n//      hash := os.NewFile(hashfd, \"sha1\")\n//      // Hash an input string and read the results. Each Write discards\n//      // previous hash state. Read always reads the current state.\n//      b := make([]byte, 20)\n//      for i := 0; i < 2; i++ {\n//          io.WriteString(hash, \"Hello, world.\")\n//          hash.Read(b)\n//          fmt.Println(hex.EncodeToString(b))\n//      }\n//      // Output:\n//      // 2ae01472317d1935a84797ec1983ae243fc6aa28\n//      // 2ae01472317d1935a84797ec1983ae243fc6aa28\n//\n// For hashing larger byte slices, or byte streams such as those read from\n// a file or socket, use Sendto with MSG_MORE to instruct the kernel to update\n// the hash digest instead of creating a new one for a given chunk and finalizing it.\n//\n//      // Assume hashfd and addr are already configured using the setup process.\n//      hash := os.NewFile(hashfd, \"sha1\")\n//      // Hash the contents of a file.\n//      f, _ := os.Open(\"/tmp/linux-4.10-rc7.tar.xz\")\n//      b := make([]byte, 4096)\n//      for {\n//          n, err := f.Read(b)\n//          if err == io.EOF {\n//              break\n//          }\n//          unix.Sendto(hashfd, b[:n], unix.MSG_MORE, addr)\n//      }\n//      hash.Read(b)\n//      fmt.Println(hex.EncodeToString(b))\n//      // Output: 85cdcad0c06eef66f805ecce353bec9accbeecc5\n//\n// For more information, see: http://www.chronox.de/crypto-API/crypto/userspace-if.html.\ntype SockaddrALG struct {\n\tType    string\n\tName    string\n\tFeature uint32\n\tMask    uint32\n\traw     RawSockaddrALG\n}\n\nfunc (sa *SockaddrALG) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\t// Leave room for NUL byte terminator.\n\tif len(sa.Type) > 13 {\n\t\treturn nil, 0, EINVAL\n\t}\n\tif len(sa.Name) > 63 {\n\t\treturn nil, 0, EINVAL\n\t}\n\n\tsa.raw.Family = AF_ALG\n\tsa.raw.Feat = sa.Feature\n\tsa.raw.Mask = sa.Mask\n\n\ttyp, err := ByteSliceFromString(sa.Type)\n\tif err != nil {\n\t\treturn nil, 0, err\n\t}\n\tname, err := ByteSliceFromString(sa.Name)\n\tif err != nil {\n\t\treturn nil, 0, err\n\t}\n\n\tcopy(sa.raw.Type[:], typ)\n\tcopy(sa.raw.Name[:], name)\n\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrALG, nil\n}\n\n// SockaddrVM implements the Sockaddr interface for AF_VSOCK type sockets.\n// SockaddrVM provides access to Linux VM sockets: a mechanism that enables\n// bidirectional communication between a hypervisor and its guest virtual\n// machines.\ntype SockaddrVM struct {\n\t// CID and Port specify a context ID and port address for a VM socket.\n\t// Guests have a unique CID, and hosts may have a well-known CID of:\n\t//  - VMADDR_CID_HYPERVISOR: refers to the hypervisor process.\n\t//  - VMADDR_CID_HOST: refers to other processes on the host.\n\tCID  uint32\n\tPort uint32\n\traw  RawSockaddrVM\n}\n\nfunc (sa *SockaddrVM) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tsa.raw.Family = AF_VSOCK\n\tsa.raw.Port = sa.Port\n\tsa.raw.Cid = sa.CID\n\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrVM, nil\n}\n\ntype SockaddrXDP struct {\n\tFlags        uint16\n\tIfindex      uint32\n\tQueueID      uint32\n\tSharedUmemFD uint32\n\traw          RawSockaddrXDP\n}\n\nfunc (sa *SockaddrXDP) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tsa.raw.Family = AF_XDP\n\tsa.raw.Flags = sa.Flags\n\tsa.raw.Ifindex = sa.Ifindex\n\tsa.raw.Queue_id = sa.QueueID\n\tsa.raw.Shared_umem_fd = sa.SharedUmemFD\n\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrXDP, nil\n}\n\n// This constant mirrors the #define of PX_PROTO_OE in\n// linux/if_pppox.h. We're defining this by hand here instead of\n// autogenerating through mkerrors.sh because including\n// linux/if_pppox.h causes some declaration conflicts with other\n// includes (linux/if_pppox.h includes linux/in.h, which conflicts\n// with netinet/in.h). Given that we only need a single zero constant\n// out of that file, it's cleaner to just define it by hand here.\nconst px_proto_oe = 0\n\ntype SockaddrPPPoE struct {\n\tSID    uint16\n\tRemote net.HardwareAddr\n\tDev    string\n\traw    RawSockaddrPPPoX\n}\n\nfunc (sa *SockaddrPPPoE) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tif len(sa.Remote) != 6 {\n\t\treturn nil, 0, EINVAL\n\t}\n\tif len(sa.Dev) > IFNAMSIZ-1 {\n\t\treturn nil, 0, EINVAL\n\t}\n\n\t*(*uint16)(unsafe.Pointer(&sa.raw[0])) = AF_PPPOX\n\t// This next field is in host-endian byte order. We can't use the\n\t// same unsafe pointer cast as above, because this value is not\n\t// 32-bit aligned and some architectures don't allow unaligned\n\t// access.\n\t//\n\t// However, the value of px_proto_oe is 0, so we can use\n\t// encoding/binary helpers to write the bytes without worrying\n\t// about the ordering.\n\tbinary.BigEndian.PutUint32(sa.raw[2:6], px_proto_oe)\n\t// This field is deliberately big-endian, unlike the previous\n\t// one. The kernel expects SID to be in network byte order.\n\tbinary.BigEndian.PutUint16(sa.raw[6:8], sa.SID)\n\tcopy(sa.raw[8:14], sa.Remote)\n\tfor i := 14; i < 14+IFNAMSIZ; i++ {\n\t\tsa.raw[i] = 0\n\t}\n\tcopy(sa.raw[14:], sa.Dev)\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrPPPoX, nil\n}\n\nfunc anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {\n\tswitch rsa.Addr.Family {\n\tcase AF_NETLINK:\n\t\tpp := (*RawSockaddrNetlink)(unsafe.Pointer(rsa))\n\t\tsa := new(SockaddrNetlink)\n\t\tsa.Family = pp.Family\n\t\tsa.Pad = pp.Pad\n\t\tsa.Pid = pp.Pid\n\t\tsa.Groups = pp.Groups\n\t\treturn sa, nil\n\n\tcase AF_PACKET:\n\t\tpp := (*RawSockaddrLinklayer)(unsafe.Pointer(rsa))\n\t\tsa := new(SockaddrLinklayer)\n\t\tsa.Protocol = pp.Protocol\n\t\tsa.Ifindex = int(pp.Ifindex)\n\t\tsa.Hatype = pp.Hatype\n\t\tsa.Pkttype = pp.Pkttype\n\t\tsa.Halen = pp.Halen\n\t\tfor i := 0; i < len(sa.Addr); i++ {\n\t\t\tsa.Addr[i] = pp.Addr[i]\n\t\t}\n\t\treturn sa, nil\n\n\tcase AF_UNIX:\n\t\tpp := (*RawSockaddrUnix)(unsafe.Pointer(rsa))\n\t\tsa := new(SockaddrUnix)\n\t\tif pp.Path[0] == 0 {\n\t\t\t// \"Abstract\" Unix domain socket.\n\t\t\t// Rewrite leading NUL as @ for textual display.\n\t\t\t// (This is the standard convention.)\n\t\t\t// Not friendly to overwrite in place,\n\t\t\t// but the callers below don't care.\n\t\t\tpp.Path[0] = '@'\n\t\t}\n\n\t\t// Assume path ends at NUL.\n\t\t// This is not technically the Linux semantics for\n\t\t// abstract Unix domain sockets--they are supposed\n\t\t// to be uninterpreted fixed-size binary blobs--but\n\t\t// everyone uses this convention.\n\t\tn := 0\n\t\tfor n < len(pp.Path) && pp.Path[n] != 0 {\n\t\t\tn++\n\t\t}\n\t\tbytes := (*[10000]byte)(unsafe.Pointer(&pp.Path[0]))[0:n]\n\t\tsa.Name = string(bytes)\n\t\treturn sa, nil\n\n\tcase AF_INET:\n\t\tpp := (*RawSockaddrInet4)(unsafe.Pointer(rsa))\n\t\tsa := new(SockaddrInet4)\n\t\tp := (*[2]byte)(unsafe.Pointer(&pp.Port))\n\t\tsa.Port = int(p[0])<<8 + int(p[1])\n\t\tfor i := 0; i < len(sa.Addr); i++ {\n\t\t\tsa.Addr[i] = pp.Addr[i]\n\t\t}\n\t\treturn sa, nil\n\n\tcase AF_INET6:\n\t\tpp := (*RawSockaddrInet6)(unsafe.Pointer(rsa))\n\t\tsa := new(SockaddrInet6)\n\t\tp := (*[2]byte)(unsafe.Pointer(&pp.Port))\n\t\tsa.Port = int(p[0])<<8 + int(p[1])\n\t\tsa.ZoneId = pp.Scope_id\n\t\tfor i := 0; i < len(sa.Addr); i++ {\n\t\t\tsa.Addr[i] = pp.Addr[i]\n\t\t}\n\t\treturn sa, nil\n\n\tcase AF_VSOCK:\n\t\tpp := (*RawSockaddrVM)(unsafe.Pointer(rsa))\n\t\tsa := &SockaddrVM{\n\t\t\tCID:  pp.Cid,\n\t\t\tPort: pp.Port,\n\t\t}\n\t\treturn sa, nil\n\tcase AF_BLUETOOTH:\n\t\tproto, err := GetsockoptInt(fd, SOL_SOCKET, SO_PROTOCOL)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\t// only BTPROTO_L2CAP and BTPROTO_RFCOMM can accept connections\n\t\tswitch proto {\n\t\tcase BTPROTO_L2CAP:\n\t\t\tpp := (*RawSockaddrL2)(unsafe.Pointer(rsa))\n\t\t\tsa := &SockaddrL2{\n\t\t\t\tPSM:      pp.Psm,\n\t\t\t\tCID:      pp.Cid,\n\t\t\t\tAddr:     pp.Bdaddr,\n\t\t\t\tAddrType: pp.Bdaddr_type,\n\t\t\t}\n\t\t\treturn sa, nil\n\t\tcase BTPROTO_RFCOMM:\n\t\t\tpp := (*RawSockaddrRFCOMM)(unsafe.Pointer(rsa))\n\t\t\tsa := &SockaddrRFCOMM{\n\t\t\t\tChannel: pp.Channel,\n\t\t\t\tAddr:    pp.Bdaddr,\n\t\t\t}\n\t\t\treturn sa, nil\n\t\t}\n\tcase AF_XDP:\n\t\tpp := (*RawSockaddrXDP)(unsafe.Pointer(rsa))\n\t\tsa := &SockaddrXDP{\n\t\t\tFlags:        pp.Flags,\n\t\t\tIfindex:      pp.Ifindex,\n\t\t\tQueueID:      pp.Queue_id,\n\t\t\tSharedUmemFD: pp.Shared_umem_fd,\n\t\t}\n\t\treturn sa, nil\n\tcase AF_PPPOX:\n\t\tpp := (*RawSockaddrPPPoX)(unsafe.Pointer(rsa))\n\t\tif binary.BigEndian.Uint32(pp[2:6]) != px_proto_oe {\n\t\t\treturn nil, EINVAL\n\t\t}\n\t\tsa := &SockaddrPPPoE{\n\t\t\tSID:    binary.BigEndian.Uint16(pp[6:8]),\n\t\t\tRemote: net.HardwareAddr(pp[8:14]),\n\t\t}\n\t\tfor i := 14; i < 14+IFNAMSIZ; i++ {\n\t\t\tif pp[i] == 0 {\n\t\t\t\tsa.Dev = string(pp[14:i])\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\treturn sa, nil\n\t}\n\treturn nil, EAFNOSUPPORT\n}\n\nfunc Accept(fd int) (nfd int, sa Sockaddr, err error) {\n\tvar rsa RawSockaddrAny\n\tvar len _Socklen = SizeofSockaddrAny\n\tnfd, err = accept(fd, &rsa, &len)\n\tif err != nil {\n\t\treturn\n\t}\n\tsa, err = anyToSockaddr(fd, &rsa)\n\tif err != nil {\n\t\tClose(nfd)\n\t\tnfd = 0\n\t}\n\treturn\n}\n\nfunc Accept4(fd int, flags int) (nfd int, sa Sockaddr, err error) {\n\tvar rsa RawSockaddrAny\n\tvar len _Socklen = SizeofSockaddrAny\n\tnfd, err = accept4(fd, &rsa, &len, flags)\n\tif err != nil {\n\t\treturn\n\t}\n\tif len > SizeofSockaddrAny {\n\t\tpanic(\"RawSockaddrAny too small\")\n\t}\n\tsa, err = anyToSockaddr(fd, &rsa)\n\tif err != nil {\n\t\tClose(nfd)\n\t\tnfd = 0\n\t}\n\treturn\n}\n\nfunc Getsockname(fd int) (sa Sockaddr, err error) {\n\tvar rsa RawSockaddrAny\n\tvar len _Socklen = SizeofSockaddrAny\n\tif err = getsockname(fd, &rsa, &len); err != nil {\n\t\treturn\n\t}\n\treturn anyToSockaddr(fd, &rsa)\n}\n\nfunc GetsockoptIPMreqn(fd, level, opt int) (*IPMreqn, error) {\n\tvar value IPMreqn\n\tvallen := _Socklen(SizeofIPMreqn)\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)\n\treturn &value, err\n}\n\nfunc GetsockoptUcred(fd, level, opt int) (*Ucred, error) {\n\tvar value Ucred\n\tvallen := _Socklen(SizeofUcred)\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)\n\treturn &value, err\n}\n\nfunc GetsockoptTCPInfo(fd, level, opt int) (*TCPInfo, error) {\n\tvar value TCPInfo\n\tvallen := _Socklen(SizeofTCPInfo)\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)\n\treturn &value, err\n}\n\n// GetsockoptString returns the string value of the socket option opt for the\n// socket associated with fd at the given socket level.\nfunc GetsockoptString(fd, level, opt int) (string, error) {\n\tbuf := make([]byte, 256)\n\tvallen := _Socklen(len(buf))\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&buf[0]), &vallen)\n\tif err != nil {\n\t\tif err == ERANGE {\n\t\t\tbuf = make([]byte, vallen)\n\t\t\terr = getsockopt(fd, level, opt, unsafe.Pointer(&buf[0]), &vallen)\n\t\t}\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\t}\n\treturn string(buf[:vallen-1]), nil\n}\n\nfunc GetsockoptTpacketStats(fd, level, opt int) (*TpacketStats, error) {\n\tvar value TpacketStats\n\tvallen := _Socklen(SizeofTpacketStats)\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)\n\treturn &value, err\n}\n\nfunc GetsockoptTpacketStatsV3(fd, level, opt int) (*TpacketStatsV3, error) {\n\tvar value TpacketStatsV3\n\tvallen := _Socklen(SizeofTpacketStatsV3)\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)\n\treturn &value, err\n}\n\nfunc SetsockoptIPMreqn(fd, level, opt int, mreq *IPMreqn) (err error) {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(mreq), unsafe.Sizeof(*mreq))\n}\n\nfunc SetsockoptPacketMreq(fd, level, opt int, mreq *PacketMreq) error {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(mreq), unsafe.Sizeof(*mreq))\n}\n\n// SetsockoptSockFprog attaches a classic BPF or an extended BPF program to a\n// socket to filter incoming packets.  See 'man 7 socket' for usage information.\nfunc SetsockoptSockFprog(fd, level, opt int, fprog *SockFprog) error {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(fprog), unsafe.Sizeof(*fprog))\n}\n\nfunc SetsockoptCanRawFilter(fd, level, opt int, filter []CanFilter) error {\n\tvar p unsafe.Pointer\n\tif len(filter) > 0 {\n\t\tp = unsafe.Pointer(&filter[0])\n\t}\n\treturn setsockopt(fd, level, opt, p, uintptr(len(filter)*SizeofCanFilter))\n}\n\nfunc SetsockoptTpacketReq(fd, level, opt int, tp *TpacketReq) error {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(tp), unsafe.Sizeof(*tp))\n}\n\nfunc SetsockoptTpacketReq3(fd, level, opt int, tp *TpacketReq3) error {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(tp), unsafe.Sizeof(*tp))\n}\n\n// Keyctl Commands (http://man7.org/linux/man-pages/man2/keyctl.2.html)\n\n// KeyctlInt calls keyctl commands in which each argument is an int.\n// These commands are KEYCTL_REVOKE, KEYCTL_CHOWN, KEYCTL_CLEAR, KEYCTL_LINK,\n// KEYCTL_UNLINK, KEYCTL_NEGATE, KEYCTL_SET_REQKEY_KEYRING, KEYCTL_SET_TIMEOUT,\n// KEYCTL_ASSUME_AUTHORITY, KEYCTL_SESSION_TO_PARENT, KEYCTL_REJECT,\n// KEYCTL_INVALIDATE, and KEYCTL_GET_PERSISTENT.\n//sys\tKeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) = SYS_KEYCTL\n\n// KeyctlBuffer calls keyctl commands in which the third and fourth\n// arguments are a buffer and its length, respectively.\n// These commands are KEYCTL_UPDATE, KEYCTL_READ, and KEYCTL_INSTANTIATE.\n//sys\tKeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) = SYS_KEYCTL\n\n// KeyctlString calls keyctl commands which return a string.\n// These commands are KEYCTL_DESCRIBE and KEYCTL_GET_SECURITY.\nfunc KeyctlString(cmd int, id int) (string, error) {\n\t// We must loop as the string data may change in between the syscalls.\n\t// We could allocate a large buffer here to reduce the chance that the\n\t// syscall needs to be called twice; however, this is unnecessary as\n\t// the performance loss is negligible.\n\tvar buffer []byte\n\tfor {\n\t\t// Try to fill the buffer with data\n\t\tlength, err := KeyctlBuffer(cmd, id, buffer, 0)\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\n\t\t// Check if the data was written\n\t\tif length <= len(buffer) {\n\t\t\t// Exclude the null terminator\n\t\t\treturn string(buffer[:length-1]), nil\n\t\t}\n\n\t\t// Make a bigger buffer if needed\n\t\tbuffer = make([]byte, length)\n\t}\n}\n\n// Keyctl commands with special signatures.\n\n// KeyctlGetKeyringID implements the KEYCTL_GET_KEYRING_ID command.\n// See the full documentation at:\n// http://man7.org/linux/man-pages/man3/keyctl_get_keyring_ID.3.html\nfunc KeyctlGetKeyringID(id int, create bool) (ringid int, err error) {\n\tcreateInt := 0\n\tif create {\n\t\tcreateInt = 1\n\t}\n\treturn KeyctlInt(KEYCTL_GET_KEYRING_ID, id, createInt, 0, 0)\n}\n\n// KeyctlSetperm implements the KEYCTL_SETPERM command. The perm value is the\n// key handle permission mask as described in the \"keyctl setperm\" section of\n// http://man7.org/linux/man-pages/man1/keyctl.1.html.\n// See the full documentation at:\n// http://man7.org/linux/man-pages/man3/keyctl_setperm.3.html\nfunc KeyctlSetperm(id int, perm uint32) error {\n\t_, err := KeyctlInt(KEYCTL_SETPERM, id, int(perm), 0, 0)\n\treturn err\n}\n\n//sys\tkeyctlJoin(cmd int, arg2 string) (ret int, err error) = SYS_KEYCTL\n\n// KeyctlJoinSessionKeyring implements the KEYCTL_JOIN_SESSION_KEYRING command.\n// See the full documentation at:\n// http://man7.org/linux/man-pages/man3/keyctl_join_session_keyring.3.html\nfunc KeyctlJoinSessionKeyring(name string) (ringid int, err error) {\n\treturn keyctlJoin(KEYCTL_JOIN_SESSION_KEYRING, name)\n}\n\n//sys\tkeyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) = SYS_KEYCTL\n\n// KeyctlSearch implements the KEYCTL_SEARCH command.\n// See the full documentation at:\n// http://man7.org/linux/man-pages/man3/keyctl_search.3.html\nfunc KeyctlSearch(ringid int, keyType, description string, destRingid int) (id int, err error) {\n\treturn keyctlSearch(KEYCTL_SEARCH, ringid, keyType, description, destRingid)\n}\n\n//sys\tkeyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) = SYS_KEYCTL\n\n// KeyctlInstantiateIOV implements the KEYCTL_INSTANTIATE_IOV command. This\n// command is similar to KEYCTL_INSTANTIATE, except that the payload is a slice\n// of Iovec (each of which represents a buffer) instead of a single buffer.\n// See the full documentation at:\n// http://man7.org/linux/man-pages/man3/keyctl_instantiate_iov.3.html\nfunc KeyctlInstantiateIOV(id int, payload []Iovec, ringid int) error {\n\treturn keyctlIOV(KEYCTL_INSTANTIATE_IOV, id, payload, ringid)\n}\n\n//sys\tkeyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) = SYS_KEYCTL\n\n// KeyctlDHCompute implements the KEYCTL_DH_COMPUTE command. This command\n// computes a Diffie-Hellman shared secret based on the provide params. The\n// secret is written to the provided buffer and the returned size is the number\n// of bytes written (returning an error if there is insufficient space in the\n// buffer). If a nil buffer is passed in, this function returns the minimum\n// buffer length needed to store the appropriate data. Note that this differs\n// from KEYCTL_READ's behavior which always returns the requested payload size.\n// See the full documentation at:\n// http://man7.org/linux/man-pages/man3/keyctl_dh_compute.3.html\nfunc KeyctlDHCompute(params *KeyctlDHParams, buffer []byte) (size int, err error) {\n\treturn keyctlDH(KEYCTL_DH_COMPUTE, params, buffer)\n}\n\nfunc Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) {\n\tvar msg Msghdr\n\tvar rsa RawSockaddrAny\n\tmsg.Name = (*byte)(unsafe.Pointer(&rsa))\n\tmsg.Namelen = uint32(SizeofSockaddrAny)\n\tvar iov Iovec\n\tif len(p) > 0 {\n\t\tiov.Base = &p[0]\n\t\tiov.SetLen(len(p))\n\t}\n\tvar dummy byte\n\tif len(oob) > 0 {\n\t\tif len(p) == 0 {\n\t\t\tvar sockType int\n\t\t\tsockType, err = GetsockoptInt(fd, SOL_SOCKET, SO_TYPE)\n\t\t\tif err != nil {\n\t\t\t\treturn\n\t\t\t}\n\t\t\t// receive at least one normal byte\n\t\t\tif sockType != SOCK_DGRAM {\n\t\t\t\tiov.Base = &dummy\n\t\t\t\tiov.SetLen(1)\n\t\t\t}\n\t\t}\n\t\tmsg.Control = &oob[0]\n\t\tmsg.SetControllen(len(oob))\n\t}\n\tmsg.Iov = &iov\n\tmsg.Iovlen = 1\n\tif n, err = recvmsg(fd, &msg, flags); err != nil {\n\t\treturn\n\t}\n\toobn = int(msg.Controllen)\n\trecvflags = int(msg.Flags)\n\t// source address is only specified if the socket is unconnected\n\tif rsa.Addr.Family != AF_UNSPEC {\n\t\tfrom, err = anyToSockaddr(fd, &rsa)\n\t}\n\treturn\n}\n\nfunc Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (err error) {\n\t_, err = SendmsgN(fd, p, oob, to, flags)\n\treturn\n}\n\nfunc SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error) {\n\tvar ptr unsafe.Pointer\n\tvar salen _Socklen\n\tif to != nil {\n\t\tvar err error\n\t\tptr, salen, err = to.sockaddr()\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t}\n\tvar msg Msghdr\n\tmsg.Name = (*byte)(ptr)\n\tmsg.Namelen = uint32(salen)\n\tvar iov Iovec\n\tif len(p) > 0 {\n\t\tiov.Base = &p[0]\n\t\tiov.SetLen(len(p))\n\t}\n\tvar dummy byte\n\tif len(oob) > 0 {\n\t\tif len(p) == 0 {\n\t\t\tvar sockType int\n\t\t\tsockType, err = GetsockoptInt(fd, SOL_SOCKET, SO_TYPE)\n\t\t\tif err != nil {\n\t\t\t\treturn 0, err\n\t\t\t}\n\t\t\t// send at least one normal byte\n\t\t\tif sockType != SOCK_DGRAM {\n\t\t\t\tiov.Base = &dummy\n\t\t\t\tiov.SetLen(1)\n\t\t\t}\n\t\t}\n\t\tmsg.Control = &oob[0]\n\t\tmsg.SetControllen(len(oob))\n\t}\n\tmsg.Iov = &iov\n\tmsg.Iovlen = 1\n\tif n, err = sendmsg(fd, &msg, flags); err != nil {\n\t\treturn 0, err\n\t}\n\tif len(oob) > 0 && len(p) == 0 {\n\t\tn = 0\n\t}\n\treturn n, nil\n}\n\n// BindToDevice binds the socket associated with fd to device.\nfunc BindToDevice(fd int, device string) (err error) {\n\treturn SetsockoptString(fd, SOL_SOCKET, SO_BINDTODEVICE, device)\n}\n\n//sys\tptrace(request int, pid int, addr uintptr, data uintptr) (err error)\n\nfunc ptracePeek(req int, pid int, addr uintptr, out []byte) (count int, err error) {\n\t// The peek requests are machine-size oriented, so we wrap it\n\t// to retrieve arbitrary-length data.\n\n\t// The ptrace syscall differs from glibc's ptrace.\n\t// Peeks returns the word in *data, not as the return value.\n\n\tvar buf [SizeofPtr]byte\n\n\t// Leading edge. PEEKTEXT/PEEKDATA don't require aligned\n\t// access (PEEKUSER warns that it might), but if we don't\n\t// align our reads, we might straddle an unmapped page\n\t// boundary and not get the bytes leading up to the page\n\t// boundary.\n\tn := 0\n\tif addr%SizeofPtr != 0 {\n\t\terr = ptrace(req, pid, addr-addr%SizeofPtr, uintptr(unsafe.Pointer(&buf[0])))\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\tn += copy(out, buf[addr%SizeofPtr:])\n\t\tout = out[n:]\n\t}\n\n\t// Remainder.\n\tfor len(out) > 0 {\n\t\t// We use an internal buffer to guarantee alignment.\n\t\t// It's not documented if this is necessary, but we're paranoid.\n\t\terr = ptrace(req, pid, addr+uintptr(n), uintptr(unsafe.Pointer(&buf[0])))\n\t\tif err != nil {\n\t\t\treturn n, err\n\t\t}\n\t\tcopied := copy(out, buf[0:])\n\t\tn += copied\n\t\tout = out[copied:]\n\t}\n\n\treturn n, nil\n}\n\nfunc PtracePeekText(pid int, addr uintptr, out []byte) (count int, err error) {\n\treturn ptracePeek(PTRACE_PEEKTEXT, pid, addr, out)\n}\n\nfunc PtracePeekData(pid int, addr uintptr, out []byte) (count int, err error) {\n\treturn ptracePeek(PTRACE_PEEKDATA, pid, addr, out)\n}\n\nfunc PtracePeekUser(pid int, addr uintptr, out []byte) (count int, err error) {\n\treturn ptracePeek(PTRACE_PEEKUSR, pid, addr, out)\n}\n\nfunc ptracePoke(pokeReq int, peekReq int, pid int, addr uintptr, data []byte) (count int, err error) {\n\t// As for ptracePeek, we need to align our accesses to deal\n\t// with the possibility of straddling an invalid page.\n\n\t// Leading edge.\n\tn := 0\n\tif addr%SizeofPtr != 0 {\n\t\tvar buf [SizeofPtr]byte\n\t\terr = ptrace(peekReq, pid, addr-addr%SizeofPtr, uintptr(unsafe.Pointer(&buf[0])))\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\tn += copy(buf[addr%SizeofPtr:], data)\n\t\tword := *((*uintptr)(unsafe.Pointer(&buf[0])))\n\t\terr = ptrace(pokeReq, pid, addr-addr%SizeofPtr, word)\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\tdata = data[n:]\n\t}\n\n\t// Interior.\n\tfor len(data) > SizeofPtr {\n\t\tword := *((*uintptr)(unsafe.Pointer(&data[0])))\n\t\terr = ptrace(pokeReq, pid, addr+uintptr(n), word)\n\t\tif err != nil {\n\t\t\treturn n, err\n\t\t}\n\t\tn += SizeofPtr\n\t\tdata = data[SizeofPtr:]\n\t}\n\n\t// Trailing edge.\n\tif len(data) > 0 {\n\t\tvar buf [SizeofPtr]byte\n\t\terr = ptrace(peekReq, pid, addr+uintptr(n), uintptr(unsafe.Pointer(&buf[0])))\n\t\tif err != nil {\n\t\t\treturn n, err\n\t\t}\n\t\tcopy(buf[0:], data)\n\t\tword := *((*uintptr)(unsafe.Pointer(&buf[0])))\n\t\terr = ptrace(pokeReq, pid, addr+uintptr(n), word)\n\t\tif err != nil {\n\t\t\treturn n, err\n\t\t}\n\t\tn += len(data)\n\t}\n\n\treturn n, nil\n}\n\nfunc PtracePokeText(pid int, addr uintptr, data []byte) (count int, err error) {\n\treturn ptracePoke(PTRACE_POKETEXT, PTRACE_PEEKTEXT, pid, addr, data)\n}\n\nfunc PtracePokeData(pid int, addr uintptr, data []byte) (count int, err error) {\n\treturn ptracePoke(PTRACE_POKEDATA, PTRACE_PEEKDATA, pid, addr, data)\n}\n\nfunc PtracePokeUser(pid int, addr uintptr, data []byte) (count int, err error) {\n\treturn ptracePoke(PTRACE_POKEUSR, PTRACE_PEEKUSR, pid, addr, data)\n}\n\nfunc PtraceGetRegs(pid int, regsout *PtraceRegs) (err error) {\n\treturn ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout)))\n}\n\nfunc PtraceSetRegs(pid int, regs *PtraceRegs) (err error) {\n\treturn ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs)))\n}\n\nfunc PtraceSetOptions(pid int, options int) (err error) {\n\treturn ptrace(PTRACE_SETOPTIONS, pid, 0, uintptr(options))\n}\n\nfunc PtraceGetEventMsg(pid int) (msg uint, err error) {\n\tvar data _C_long\n\terr = ptrace(PTRACE_GETEVENTMSG, pid, 0, uintptr(unsafe.Pointer(&data)))\n\tmsg = uint(data)\n\treturn\n}\n\nfunc PtraceCont(pid int, signal int) (err error) {\n\treturn ptrace(PTRACE_CONT, pid, 0, uintptr(signal))\n}\n\nfunc PtraceSyscall(pid int, signal int) (err error) {\n\treturn ptrace(PTRACE_SYSCALL, pid, 0, uintptr(signal))\n}\n\nfunc PtraceSingleStep(pid int) (err error) { return ptrace(PTRACE_SINGLESTEP, pid, 0, 0) }\n\nfunc PtraceAttach(pid int) (err error) { return ptrace(PTRACE_ATTACH, pid, 0, 0) }\n\nfunc PtraceDetach(pid int) (err error) { return ptrace(PTRACE_DETACH, pid, 0, 0) }\n\n//sys\treboot(magic1 uint, magic2 uint, cmd int, arg string) (err error)\n\nfunc Reboot(cmd int) (err error) {\n\treturn reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, cmd, \"\")\n}\n\nfunc ReadDirent(fd int, buf []byte) (n int, err error) {\n\treturn Getdents(fd, buf)\n}\n\n//sys\tmount(source string, target string, fstype string, flags uintptr, data *byte) (err error)\n\nfunc Mount(source string, target string, fstype string, flags uintptr, data string) (err error) {\n\t// Certain file systems get rather angry and EINVAL if you give\n\t// them an empty string of data, rather than NULL.\n\tif data == \"\" {\n\t\treturn mount(source, target, fstype, flags, nil)\n\t}\n\tdatap, err := BytePtrFromString(data)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn mount(source, target, fstype, flags, datap)\n}\n\nfunc Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tif raceenabled {\n\t\traceReleaseMerge(unsafe.Pointer(&ioSync))\n\t}\n\treturn sendfile(outfd, infd, offset, count)\n}\n\n// Sendto\n// Recvfrom\n// Socketpair\n\n/*\n * Direct access\n */\n//sys\tAcct(path string) (err error)\n//sys\tAddKey(keyType string, description string, payload []byte, ringid int) (id int, err error)\n//sys\tAdjtimex(buf *Timex) (state int, err error)\n//sys\tChdir(path string) (err error)\n//sys\tChroot(path string) (err error)\n//sys\tClockGetres(clockid int32, res *Timespec) (err error)\n//sys\tClockGettime(clockid int32, time *Timespec) (err error)\n//sys\tClockNanosleep(clockid int32, flags int, request *Timespec, remain *Timespec) (err error)\n//sys\tClose(fd int) (err error)\n//sys\tCopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error)\n//sys\tDeleteModule(name string, flags int) (err error)\n//sys\tDup(oldfd int) (fd int, err error)\n//sys\tDup3(oldfd int, newfd int, flags int) (err error)\n//sysnb\tEpollCreate1(flag int) (fd int, err error)\n//sysnb\tEpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error)\n//sys\tEventfd(initval uint, flags int) (fd int, err error) = SYS_EVENTFD2\n//sys\tExit(code int) = SYS_EXIT_GROUP\n//sys\tFallocate(fd int, mode uint32, off int64, len int64) (err error)\n//sys\tFchdir(fd int) (err error)\n//sys\tFchmod(fd int, mode uint32) (err error)\n//sys\tFchownat(dirfd int, path string, uid int, gid int, flags int) (err error)\n//sys\tfcntl(fd int, cmd int, arg int) (val int, err error)\n//sys\tFdatasync(fd int) (err error)\n//sys\tFgetxattr(fd int, attr string, dest []byte) (sz int, err error)\n//sys\tFinitModule(fd int, params string, flags int) (err error)\n//sys\tFlistxattr(fd int, dest []byte) (sz int, err error)\n//sys\tFlock(fd int, how int) (err error)\n//sys\tFremovexattr(fd int, attr string) (err error)\n//sys\tFsetxattr(fd int, attr string, dest []byte, flags int) (err error)\n//sys\tFsync(fd int) (err error)\n//sys\tGetdents(fd int, buf []byte) (n int, err error) = SYS_GETDENTS64\n//sysnb\tGetpgid(pid int) (pgid int, err error)\n\nfunc Getpgrp() (pid int) {\n\tpid, _ = Getpgid(0)\n\treturn\n}\n\n//sysnb\tGetpid() (pid int)\n//sysnb\tGetppid() (ppid int)\n//sys\tGetpriority(which int, who int) (prio int, err error)\n//sys\tGetrandom(buf []byte, flags int) (n int, err error)\n//sysnb\tGetrusage(who int, rusage *Rusage) (err error)\n//sysnb\tGetsid(pid int) (sid int, err error)\n//sysnb\tGettid() (tid int)\n//sys\tGetxattr(path string, attr string, dest []byte) (sz int, err error)\n//sys\tInitModule(moduleImage []byte, params string) (err error)\n//sys\tInotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error)\n//sysnb\tInotifyInit1(flags int) (fd int, err error)\n//sysnb\tInotifyRmWatch(fd int, watchdesc uint32) (success int, err error)\n//sysnb\tKill(pid int, sig syscall.Signal) (err error)\n//sys\tKlogctl(typ int, buf []byte) (n int, err error) = SYS_SYSLOG\n//sys\tLgetxattr(path string, attr string, dest []byte) (sz int, err error)\n//sys\tListxattr(path string, dest []byte) (sz int, err error)\n//sys\tLlistxattr(path string, dest []byte) (sz int, err error)\n//sys\tLremovexattr(path string, attr string) (err error)\n//sys\tLsetxattr(path string, attr string, data []byte, flags int) (err error)\n//sys\tMemfdCreate(name string, flags int) (fd int, err error)\n//sys\tMkdirat(dirfd int, path string, mode uint32) (err error)\n//sys\tMknodat(dirfd int, path string, mode uint32, dev int) (err error)\n//sys\tNanosleep(time *Timespec, leftover *Timespec) (err error)\n//sys\tPerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error)\n//sys\tPivotRoot(newroot string, putold string) (err error) = SYS_PIVOT_ROOT\n//sysnb prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) = SYS_PRLIMIT64\n//sys   Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error)\n//sys\tPselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) = SYS_PSELECT6\n//sys\tread(fd int, p []byte) (n int, err error)\n//sys\tRemovexattr(path string, attr string) (err error)\n//sys\tRenameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error)\n//sys\tRequestKey(keyType string, description string, callback string, destRingid int) (id int, err error)\n//sys\tSetdomainname(p []byte) (err error)\n//sys\tSethostname(p []byte) (err error)\n//sysnb\tSetpgid(pid int, pgid int) (err error)\n//sysnb\tSetsid() (pid int, err error)\n//sysnb\tSettimeofday(tv *Timeval) (err error)\n//sys\tSetns(fd int, nstype int) (err error)\n\n// issue 1435.\n// On linux Setuid and Setgid only affects the current thread, not the process.\n// This does not match what most callers expect so we must return an error\n// here rather than letting the caller think that the call succeeded.\n\nfunc Setuid(uid int) (err error) {\n\treturn EOPNOTSUPP\n}\n\nfunc Setgid(uid int) (err error) {\n\treturn EOPNOTSUPP\n}\n\nfunc Signalfd(fd int, sigmask *Sigset_t, flags int) (newfd int, err error) {\n\treturn signalfd(fd, sigmask, _C__NSIG/8, flags)\n}\n\n//sys\tSetpriority(which int, who int, prio int) (err error)\n//sys\tSetxattr(path string, attr string, data []byte, flags int) (err error)\n//sys\tsignalfd(fd int, sigmask *Sigset_t, maskSize uintptr, flags int) (newfd int, err error) = SYS_SIGNALFD4\n//sys\tStatx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error)\n//sys\tSync()\n//sys\tSyncfs(fd int) (err error)\n//sysnb\tSysinfo(info *Sysinfo_t) (err error)\n//sys\tTee(rfd int, wfd int, len int, flags int) (n int64, err error)\n//sysnb\tTgkill(tgid int, tid int, sig syscall.Signal) (err error)\n//sysnb\tTimes(tms *Tms) (ticks uintptr, err error)\n//sysnb\tUmask(mask int) (oldmask int)\n//sysnb\tUname(buf *Utsname) (err error)\n//sys\tUnmount(target string, flags int) (err error) = SYS_UMOUNT2\n//sys\tUnshare(flags int) (err error)\n//sys\twrite(fd int, p []byte) (n int, err error)\n//sys\texitThread(code int) (err error) = SYS_EXIT\n//sys\treadlen(fd int, p *byte, np int) (n int, err error) = SYS_READ\n//sys\twritelen(fd int, p *byte, np int) (n int, err error) = SYS_WRITE\n\n// mmap varies by architecture; see syscall_linux_*.go.\n//sys\tmunmap(addr uintptr, length uintptr) (err error)\n\nvar mapper = &mmapper{\n\tactive: make(map[*byte][]byte),\n\tmmap:   mmap,\n\tmunmap: munmap,\n}\n\nfunc Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) {\n\treturn mapper.Mmap(fd, offset, length, prot, flags)\n}\n\nfunc Munmap(b []byte) (err error) {\n\treturn mapper.Munmap(b)\n}\n\n//sys\tMadvise(b []byte, advice int) (err error)\n//sys\tMprotect(b []byte, prot int) (err error)\n//sys\tMlock(b []byte) (err error)\n//sys\tMlockall(flags int) (err error)\n//sys\tMsync(b []byte, flags int) (err error)\n//sys\tMunlock(b []byte) (err error)\n//sys\tMunlockall() (err error)\n\n// Vmsplice splices user pages from a slice of Iovecs into a pipe specified by fd,\n// using the specified flags.\nfunc Vmsplice(fd int, iovs []Iovec, flags int) (int, error) {\n\tvar p unsafe.Pointer\n\tif len(iovs) > 0 {\n\t\tp = unsafe.Pointer(&iovs[0])\n\t}\n\n\tn, _, errno := Syscall6(SYS_VMSPLICE, uintptr(fd), uintptr(p), uintptr(len(iovs)), uintptr(flags), 0, 0)\n\tif errno != 0 {\n\t\treturn 0, syscall.Errno(errno)\n\t}\n\n\treturn int(n), nil\n}\n\n//sys\tfaccessat(dirfd int, path string, mode uint32) (err error)\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tif flags & ^(AT_SYMLINK_NOFOLLOW|AT_EACCESS) != 0 {\n\t\treturn EINVAL\n\t}\n\n\t// The Linux kernel faccessat system call does not take any flags.\n\t// The glibc faccessat implements the flags itself; see\n\t// https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/faccessat.c;hb=HEAD\n\t// Because people naturally expect syscall.Faccessat to act\n\t// like C faccessat, we do the same.\n\n\tif flags == 0 {\n\t\treturn faccessat(dirfd, path, mode)\n\t}\n\n\tvar st Stat_t\n\tif err := Fstatat(dirfd, path, &st, flags&AT_SYMLINK_NOFOLLOW); err != nil {\n\t\treturn err\n\t}\n\n\tmode &= 7\n\tif mode == 0 {\n\t\treturn nil\n\t}\n\n\tvar uid int\n\tif flags&AT_EACCESS != 0 {\n\t\tuid = Geteuid()\n\t} else {\n\t\tuid = Getuid()\n\t}\n\n\tif uid == 0 {\n\t\tif mode&1 == 0 {\n\t\t\t// Root can read and write any file.\n\t\t\treturn nil\n\t\t}\n\t\tif st.Mode&0111 != 0 {\n\t\t\t// Root can execute any file that anybody can execute.\n\t\t\treturn nil\n\t\t}\n\t\treturn EACCES\n\t}\n\n\tvar fmode uint32\n\tif uint32(uid) == st.Uid {\n\t\tfmode = (st.Mode >> 6) & 7\n\t} else {\n\t\tvar gid int\n\t\tif flags&AT_EACCESS != 0 {\n\t\t\tgid = Getegid()\n\t\t} else {\n\t\t\tgid = Getgid()\n\t\t}\n\n\t\tif uint32(gid) == st.Gid {\n\t\t\tfmode = (st.Mode >> 3) & 7\n\t\t} else {\n\t\t\tfmode = st.Mode & 7\n\t\t}\n\t}\n\n\tif fmode&mode == mode {\n\t\treturn nil\n\t}\n\n\treturn EACCES\n}\n\n//sys nameToHandleAt(dirFD int, pathname string, fh *fileHandle, mountID *_C_int, flags int) (err error) = SYS_NAME_TO_HANDLE_AT\n//sys openByHandleAt(mountFD int, fh *fileHandle, flags int) (fd int, err error) = SYS_OPEN_BY_HANDLE_AT\n\n// fileHandle is the argument to nameToHandleAt and openByHandleAt. We\n// originally tried to generate it via unix/linux/types.go with \"type\n// fileHandle C.struct_file_handle\" but that generated empty structs\n// for mips64 and mips64le. Instead, hard code it for now (it's the\n// same everywhere else) until the mips64 generator issue is fixed.\ntype fileHandle struct {\n\tBytes uint32\n\tType  int32\n}\n\n// FileHandle represents the C struct file_handle used by\n// name_to_handle_at (see NameToHandleAt) and open_by_handle_at (see\n// OpenByHandleAt).\ntype FileHandle struct {\n\t*fileHandle\n}\n\n// NewFileHandle constructs a FileHandle.\nfunc NewFileHandle(handleType int32, handle []byte) FileHandle {\n\tconst hdrSize = unsafe.Sizeof(fileHandle{})\n\tbuf := make([]byte, hdrSize+uintptr(len(handle)))\n\tcopy(buf[hdrSize:], handle)\n\tfh := (*fileHandle)(unsafe.Pointer(&buf[0]))\n\tfh.Type = handleType\n\tfh.Bytes = uint32(len(handle))\n\treturn FileHandle{fh}\n}\n\nfunc (fh *FileHandle) Size() int   { return int(fh.fileHandle.Bytes) }\nfunc (fh *FileHandle) Type() int32 { return fh.fileHandle.Type }\nfunc (fh *FileHandle) Bytes() []byte {\n\tn := fh.Size()\n\tif n == 0 {\n\t\treturn nil\n\t}\n\treturn (*[1 << 30]byte)(unsafe.Pointer(uintptr(unsafe.Pointer(&fh.fileHandle.Type)) + 4))[:n:n]\n}\n\n// NameToHandleAt wraps the name_to_handle_at system call; it obtains\n// a handle for a path name.\nfunc NameToHandleAt(dirfd int, path string, flags int) (handle FileHandle, mountID int, err error) {\n\tvar mid _C_int\n\t// Try first with a small buffer, assuming the handle will\n\t// only be 32 bytes.\n\tsize := uint32(32 + unsafe.Sizeof(fileHandle{}))\n\tdidResize := false\n\tfor {\n\t\tbuf := make([]byte, size)\n\t\tfh := (*fileHandle)(unsafe.Pointer(&buf[0]))\n\t\tfh.Bytes = size - uint32(unsafe.Sizeof(fileHandle{}))\n\t\terr = nameToHandleAt(dirfd, path, fh, &mid, flags)\n\t\tif err == EOVERFLOW {\n\t\t\tif didResize {\n\t\t\t\t// We shouldn't need to resize more than once\n\t\t\t\treturn\n\t\t\t}\n\t\t\tdidResize = true\n\t\t\tsize = fh.Bytes + uint32(unsafe.Sizeof(fileHandle{}))\n\t\t\tcontinue\n\t\t}\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t\treturn FileHandle{fh}, int(mid), nil\n\t}\n}\n\n// OpenByHandleAt wraps the open_by_handle_at system call; it opens a\n// file via a handle as previously returned by NameToHandleAt.\nfunc OpenByHandleAt(mountFD int, handle FileHandle, flags int) (fd int, err error) {\n\treturn openByHandleAt(mountFD, handle.fileHandle, flags)\n}\n\n/*\n * Unimplemented\n */\n// AfsSyscall\n// Alarm\n// ArchPrctl\n// Brk\n// Capget\n// Capset\n// ClockNanosleep\n// ClockSettime\n// Clone\n// EpollCtlOld\n// EpollPwait\n// EpollWaitOld\n// Execve\n// Fork\n// Futex\n// GetKernelSyms\n// GetMempolicy\n// GetRobustList\n// GetThreadArea\n// Getitimer\n// Getpmsg\n// IoCancel\n// IoDestroy\n// IoGetevents\n// IoSetup\n// IoSubmit\n// IoprioGet\n// IoprioSet\n// KexecLoad\n// LookupDcookie\n// Mbind\n// MigratePages\n// Mincore\n// ModifyLdt\n// Mount\n// MovePages\n// MqGetsetattr\n// MqNotify\n// MqOpen\n// MqTimedreceive\n// MqTimedsend\n// MqUnlink\n// Mremap\n// Msgctl\n// Msgget\n// Msgrcv\n// Msgsnd\n// Nfsservctl\n// Personality\n// Pselect6\n// Ptrace\n// Putpmsg\n// Quotactl\n// Readahead\n// Readv\n// RemapFilePages\n// RestartSyscall\n// RtSigaction\n// RtSigpending\n// RtSigprocmask\n// RtSigqueueinfo\n// RtSigreturn\n// RtSigsuspend\n// RtSigtimedwait\n// SchedGetPriorityMax\n// SchedGetPriorityMin\n// SchedGetparam\n// SchedGetscheduler\n// SchedRrGetInterval\n// SchedSetparam\n// SchedYield\n// Security\n// Semctl\n// Semget\n// Semop\n// Semtimedop\n// SetMempolicy\n// SetRobustList\n// SetThreadArea\n// SetTidAddress\n// Shmat\n// Shmctl\n// Shmdt\n// Shmget\n// Sigaltstack\n// Swapoff\n// Swapon\n// Sysfs\n// TimerCreate\n// TimerDelete\n// TimerGetoverrun\n// TimerGettime\n// TimerSettime\n// Timerfd\n// Tkill (obsolete)\n// Tuxcall\n// Umount2\n// Uselib\n// Utimensat\n// Vfork\n// Vhangup\n// Vserver\n// Waitid\n// _Sysctl\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_linux_386.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// TODO(rsc): Rewrite all nn(SP) references into name+(nn-8)(FP)\n// so that go vet can check that they are correct.\n\n// +build 386,linux\n\npackage unix\n\nimport (\n\t\"unsafe\"\n)\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: int32(sec), Nsec: int32(nsec)}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: int32(sec), Usec: int32(usec)}\n}\n\n//sysnb\tpipe(p *[2]_C_int) (err error)\n\nfunc Pipe(p []int) (err error) {\n\tif len(p) != 2 {\n\t\treturn EINVAL\n\t}\n\tvar pp [2]_C_int\n\terr = pipe(&pp)\n\tp[0] = int(pp[0])\n\tp[1] = int(pp[1])\n\treturn\n}\n\n//sysnb pipe2(p *[2]_C_int, flags int) (err error)\n\nfunc Pipe2(p []int, flags int) (err error) {\n\tif len(p) != 2 {\n\t\treturn EINVAL\n\t}\n\tvar pp [2]_C_int\n\terr = pipe2(&pp, flags)\n\tp[0] = int(pp[0])\n\tp[1] = int(pp[1])\n\treturn\n}\n\n// 64-bit file system and 32-bit uid calls\n// (386 default is 32-bit file system and 16-bit uid).\n//sys\tDup2(oldfd int, newfd int) (err error)\n//sysnb\tEpollCreate(size int) (fd int, err error)\n//sys\tEpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)\n//sys\tFadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64_64\n//sys\tFchown(fd int, uid int, gid int) (err error) = SYS_FCHOWN32\n//sys\tFstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64\n//sys\tFstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64\n//sys\tFtruncate(fd int, length int64) (err error) = SYS_FTRUNCATE64\n//sysnb\tGetegid() (egid int) = SYS_GETEGID32\n//sysnb\tGeteuid() (euid int) = SYS_GETEUID32\n//sysnb\tGetgid() (gid int) = SYS_GETGID32\n//sysnb\tGetuid() (uid int) = SYS_GETUID32\n//sysnb\tInotifyInit() (fd int, err error)\n//sys\tIoperm(from int, num int, on int) (err error)\n//sys\tIopl(level int) (err error)\n//sys\tLchown(path string, uid int, gid int) (err error) = SYS_LCHOWN32\n//sys\tLstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64\n//sys\tPread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64\n//sys\tPwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64\n//sys\tRenameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)\n//sys\tsendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64\n//sys\tSetfsgid(gid int) (err error) = SYS_SETFSGID32\n//sys\tSetfsuid(uid int) (err error) = SYS_SETFSUID32\n//sysnb\tSetregid(rgid int, egid int) (err error) = SYS_SETREGID32\n//sysnb\tSetresgid(rgid int, egid int, sgid int) (err error) = SYS_SETRESGID32\n//sysnb\tSetresuid(ruid int, euid int, suid int) (err error) = SYS_SETRESUID32\n//sysnb\tSetreuid(ruid int, euid int) (err error) = SYS_SETREUID32\n//sys\tSplice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error)\n//sys\tStat(path string, stat *Stat_t) (err error) = SYS_STAT64\n//sys\tSyncFileRange(fd int, off int64, n int64, flags int) (err error)\n//sys\tTruncate(path string, length int64) (err error) = SYS_TRUNCATE64\n//sys\tUstat(dev int, ubuf *Ustat_t) (err error)\n//sysnb\tgetgroups(n int, list *_Gid_t) (nn int, err error) = SYS_GETGROUPS32\n//sysnb\tsetgroups(n int, list *_Gid_t) (err error) = SYS_SETGROUPS32\n//sys\tSelect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT\n\n//sys\tmmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error)\n//sys\tPause() (err error)\n\nfunc mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {\n\tpage := uintptr(offset / 4096)\n\tif offset != int64(page)*4096 {\n\t\treturn 0, EINVAL\n\t}\n\treturn mmap2(addr, length, prot, flags, fd, page)\n}\n\ntype rlimit32 struct {\n\tCur uint32\n\tMax uint32\n}\n\n//sysnb getrlimit(resource int, rlim *rlimit32) (err error) = SYS_GETRLIMIT\n\nconst rlimInf32 = ^uint32(0)\nconst rlimInf64 = ^uint64(0)\n\nfunc Getrlimit(resource int, rlim *Rlimit) (err error) {\n\terr = prlimit(0, resource, nil, rlim)\n\tif err != ENOSYS {\n\t\treturn err\n\t}\n\n\trl := rlimit32{}\n\terr = getrlimit(resource, &rl)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tif rl.Cur == rlimInf32 {\n\t\trlim.Cur = rlimInf64\n\t} else {\n\t\trlim.Cur = uint64(rl.Cur)\n\t}\n\n\tif rl.Max == rlimInf32 {\n\t\trlim.Max = rlimInf64\n\t} else {\n\t\trlim.Max = uint64(rl.Max)\n\t}\n\treturn\n}\n\n//sysnb setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT\n\nfunc Setrlimit(resource int, rlim *Rlimit) (err error) {\n\terr = prlimit(0, resource, rlim, nil)\n\tif err != ENOSYS {\n\t\treturn err\n\t}\n\n\trl := rlimit32{}\n\tif rlim.Cur == rlimInf64 {\n\t\trl.Cur = rlimInf32\n\t} else if rlim.Cur < uint64(rlimInf32) {\n\t\trl.Cur = uint32(rlim.Cur)\n\t} else {\n\t\treturn EINVAL\n\t}\n\tif rlim.Max == rlimInf64 {\n\t\trl.Max = rlimInf32\n\t} else if rlim.Max < uint64(rlimInf32) {\n\t\trl.Max = uint32(rlim.Max)\n\t} else {\n\t\treturn EINVAL\n\t}\n\n\treturn setrlimit(resource, &rl)\n}\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tnewoffset, errno := seek(fd, offset, whence)\n\tif errno != 0 {\n\t\treturn 0, errno\n\t}\n\treturn newoffset, nil\n}\n\n//sys\tfutimesat(dirfd int, path string, times *[2]Timeval) (err error)\n//sysnb\tGettimeofday(tv *Timeval) (err error)\n//sysnb\tTime(t *Time_t) (tt Time_t, err error)\n//sys\tUtime(path string, buf *Utimbuf) (err error)\n//sys\tutimes(path string, times *[2]Timeval) (err error)\n\n// On x86 Linux, all the socket calls go through an extra indirection,\n// I think because the 5-register system call interface can't handle\n// the 6-argument calls like sendto and recvfrom. Instead the\n// arguments to the underlying system call are the number below\n// and a pointer to an array of uintptr. We hide the pointer in the\n// socketcall assembly to avoid allocation on every system call.\n\nconst (\n\t// see linux/net.h\n\t_SOCKET      = 1\n\t_BIND        = 2\n\t_CONNECT     = 3\n\t_LISTEN      = 4\n\t_ACCEPT      = 5\n\t_GETSOCKNAME = 6\n\t_GETPEERNAME = 7\n\t_SOCKETPAIR  = 8\n\t_SEND        = 9\n\t_RECV        = 10\n\t_SENDTO      = 11\n\t_RECVFROM    = 12\n\t_SHUTDOWN    = 13\n\t_SETSOCKOPT  = 14\n\t_GETSOCKOPT  = 15\n\t_SENDMSG     = 16\n\t_RECVMSG     = 17\n\t_ACCEPT4     = 18\n\t_RECVMMSG    = 19\n\t_SENDMMSG    = 20\n)\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tfd, e := socketcall(_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0)\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {\n\tfd, e := socketcall(_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc getsockname(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, e := rawsocketcall(_GETSOCKNAME, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0)\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc getpeername(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, e := rawsocketcall(_GETPEERNAME, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0)\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc socketpair(domain int, typ int, flags int, fd *[2]int32) (err error) {\n\t_, e := rawsocketcall(_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(flags), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, e := socketcall(_BIND, uintptr(s), uintptr(addr), uintptr(addrlen), 0, 0, 0)\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, e := socketcall(_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen), 0, 0, 0)\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tfd, e := rawsocketcall(_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto), 0, 0, 0)\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, e := socketcall(_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, e := socketcall(_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), vallen, 0)\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc recvfrom(s int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar base uintptr\n\tif len(p) > 0 {\n\t\tbase = uintptr(unsafe.Pointer(&p[0]))\n\t}\n\tn, e := socketcall(_RECVFROM, uintptr(s), base, uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc sendto(s int, p []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar base uintptr\n\tif len(p) > 0 {\n\t\tbase = uintptr(unsafe.Pointer(&p[0]))\n\t}\n\t_, e := socketcall(_SENDTO, uintptr(s), base, uintptr(len(p)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tn, e := socketcall(_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0)\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tn, e := socketcall(_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0)\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc Listen(s int, n int) (err error) {\n\t_, e := socketcall(_LISTEN, uintptr(s), uintptr(n), 0, 0, 0, 0)\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc Shutdown(s, how int) (err error) {\n\t_, e := socketcall(_SHUTDOWN, uintptr(s), uintptr(how), 0, 0, 0, 0)\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc Fstatfs(fd int, buf *Statfs_t) (err error) {\n\t_, _, e := Syscall(SYS_FSTATFS64, uintptr(fd), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf)))\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc Statfs(path string, buf *Statfs_t) (err error) {\n\tpathp, err := BytePtrFromString(path)\n\tif err != nil {\n\t\treturn err\n\t}\n\t_, _, e := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(pathp)), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf)))\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc (r *PtraceRegs) PC() uint64 { return uint64(uint32(r.Eip)) }\n\nfunc (r *PtraceRegs) SetPC(pc uint64) { r.Eip = int32(pc) }\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n\n//sys\tpoll(fds *PollFd, nfds int, timeout int) (n int, err error)\n\nfunc Poll(fds []PollFd, timeout int) (n int, err error) {\n\tif len(fds) == 0 {\n\t\treturn poll(nil, 0, timeout)\n\t}\n\treturn poll(&fds[0], len(fds), timeout)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_linux_amd64.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build amd64,linux\n\npackage unix\n\n//sys\tDup2(oldfd int, newfd int) (err error)\n//sysnb\tEpollCreate(size int) (fd int, err error)\n//sys\tEpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)\n//sys\tFadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64\n//sys\tFchown(fd int, uid int, gid int) (err error)\n//sys\tFstat(fd int, stat *Stat_t) (err error)\n//sys\tFstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_NEWFSTATAT\n//sys\tFstatfs(fd int, buf *Statfs_t) (err error)\n//sys\tFtruncate(fd int, length int64) (err error)\n//sysnb\tGetegid() (egid int)\n//sysnb\tGeteuid() (euid int)\n//sysnb\tGetgid() (gid int)\n//sysnb\tGetrlimit(resource int, rlim *Rlimit) (err error)\n//sysnb\tGetuid() (uid int)\n//sysnb\tinotifyInit() (fd int, err error)\n\nfunc InotifyInit() (fd int, err error) {\n\t// First try inotify_init1, because Android's seccomp policy blocks the latter.\n\tfd, err = InotifyInit1(0)\n\tif err == ENOSYS {\n\t\tfd, err = inotifyInit()\n\t}\n\treturn\n}\n\n//sys\tIoperm(from int, num int, on int) (err error)\n//sys\tIopl(level int) (err error)\n//sys\tLchown(path string, uid int, gid int) (err error)\n//sys\tListen(s int, n int) (err error)\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\treturn Fstatat(AT_FDCWD, path, stat, AT_SYMLINK_NOFOLLOW)\n}\n\n//sys\tPause() (err error)\n//sys\tPread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64\n//sys\tPwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64\n//sys\tRenameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)\n//sys\tSeek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tvar ts *Timespec\n\tif timeout != nil {\n\t\tts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000}\n\t}\n\treturn Pselect(nfd, r, w, e, ts, nil)\n}\n\n//sys\tsendfile(outfd int, infd int, offset *int64, count int) (written int, err error)\n//sys\tSetfsgid(gid int) (err error)\n//sys\tSetfsuid(uid int) (err error)\n//sysnb\tSetregid(rgid int, egid int) (err error)\n//sysnb\tSetresgid(rgid int, egid int, sgid int) (err error)\n//sysnb\tSetresuid(ruid int, euid int, suid int) (err error)\n//sysnb\tSetrlimit(resource int, rlim *Rlimit) (err error)\n//sysnb\tSetreuid(ruid int, euid int) (err error)\n//sys\tShutdown(fd int, how int) (err error)\n//sys\tSplice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\t// Use fstatat, because Android's seccomp policy blocks stat.\n\treturn Fstatat(AT_FDCWD, path, stat, 0)\n}\n\n//sys\tStatfs(path string, buf *Statfs_t) (err error)\n//sys\tSyncFileRange(fd int, off int64, n int64, flags int) (err error)\n//sys\tTruncate(path string, length int64) (err error)\n//sys\tUstat(dev int, ubuf *Ustat_t) (err error)\n//sys\taccept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error)\n//sys\taccept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)\n//sys\tbind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\tconnect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sysnb\tgetgroups(n int, list *_Gid_t) (nn int, err error)\n//sysnb\tsetgroups(n int, list *_Gid_t) (err error)\n//sys\tgetsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)\n//sys\tsetsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)\n//sysnb\tsocket(domain int, typ int, proto int) (fd int, err error)\n//sysnb\tsocketpair(domain int, typ int, proto int, fd *[2]int32) (err error)\n//sysnb\tgetpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sysnb\tgetsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sys\trecvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)\n//sys\tsendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\trecvmsg(s int, msg *Msghdr, flags int) (n int, err error)\n//sys\tsendmsg(s int, msg *Msghdr, flags int) (n int, err error)\n//sys\tmmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error)\n\n//sys\tfutimesat(dirfd int, path string, times *[2]Timeval) (err error)\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\terrno := gettimeofday(tv)\n\tif errno != 0 {\n\t\treturn errno\n\t}\n\treturn nil\n}\n\nfunc Time(t *Time_t) (tt Time_t, err error) {\n\tvar tv Timeval\n\terrno := gettimeofday(&tv)\n\tif errno != 0 {\n\t\treturn 0, errno\n\t}\n\tif t != nil {\n\t\t*t = Time_t(tv.Sec)\n\t}\n\treturn Time_t(tv.Sec), nil\n}\n\n//sys\tUtime(path string, buf *Utimbuf) (err error)\n//sys\tutimes(path string, times *[2]Timeval) (err error)\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: usec}\n}\n\n//sysnb\tpipe(p *[2]_C_int) (err error)\n\nfunc Pipe(p []int) (err error) {\n\tif len(p) != 2 {\n\t\treturn EINVAL\n\t}\n\tvar pp [2]_C_int\n\terr = pipe(&pp)\n\tp[0] = int(pp[0])\n\tp[1] = int(pp[1])\n\treturn\n}\n\n//sysnb pipe2(p *[2]_C_int, flags int) (err error)\n\nfunc Pipe2(p []int, flags int) (err error) {\n\tif len(p) != 2 {\n\t\treturn EINVAL\n\t}\n\tvar pp [2]_C_int\n\terr = pipe2(&pp, flags)\n\tp[0] = int(pp[0])\n\tp[1] = int(pp[1])\n\treturn\n}\n\nfunc (r *PtraceRegs) PC() uint64 { return r.Rip }\n\nfunc (r *PtraceRegs) SetPC(pc uint64) { r.Rip = pc }\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint64(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint64(length)\n}\n\n//sys\tpoll(fds *PollFd, nfds int, timeout int) (n int, err error)\n\nfunc Poll(fds []PollFd, timeout int) (n int, err error) {\n\tif len(fds) == 0 {\n\t\treturn poll(nil, 0, timeout)\n\t}\n\treturn poll(&fds[0], len(fds), timeout)\n}\n\n//sys\tkexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error)\n\nfunc KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error {\n\tcmdlineLen := len(cmdline)\n\tif cmdlineLen > 0 {\n\t\t// Account for the additional NULL byte added by\n\t\t// BytePtrFromString in kexecFileLoad. The kexec_file_load\n\t\t// syscall expects a NULL-terminated string.\n\t\tcmdlineLen++\n\t}\n\treturn kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_linux_amd64_gc.go",
    "content": "// Copyright 2016 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build amd64,linux\n// +build !gccgo\n\npackage unix\n\nimport \"syscall\"\n\n//go:noescape\nfunc gettimeofday(tv *Timeval) (err syscall.Errno)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_linux_arm.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build arm,linux\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: int32(sec), Nsec: int32(nsec)}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: int32(sec), Usec: int32(usec)}\n}\n\n//sysnb\tpipe(p *[2]_C_int) (err error)\n\nfunc Pipe(p []int) (err error) {\n\tif len(p) != 2 {\n\t\treturn EINVAL\n\t}\n\tvar pp [2]_C_int\n\t// Try pipe2 first for Android O, then try pipe for kernel 2.6.23.\n\terr = pipe2(&pp, 0)\n\tif err == ENOSYS {\n\t\terr = pipe(&pp)\n\t}\n\tp[0] = int(pp[0])\n\tp[1] = int(pp[1])\n\treturn\n}\n\n//sysnb pipe2(p *[2]_C_int, flags int) (err error)\n\nfunc Pipe2(p []int, flags int) (err error) {\n\tif len(p) != 2 {\n\t\treturn EINVAL\n\t}\n\tvar pp [2]_C_int\n\terr = pipe2(&pp, flags)\n\tp[0] = int(pp[0])\n\tp[1] = int(pp[1])\n\treturn\n}\n\n// Underlying system call writes to newoffset via pointer.\n// Implemented in assembly to avoid allocation.\nfunc seek(fd int, offset int64, whence int) (newoffset int64, err syscall.Errno)\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tnewoffset, errno := seek(fd, offset, whence)\n\tif errno != 0 {\n\t\treturn 0, errno\n\t}\n\treturn newoffset, nil\n}\n\n//sys\taccept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error)\n//sys\taccept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)\n//sys\tbind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\tconnect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sysnb\tgetgroups(n int, list *_Gid_t) (nn int, err error) = SYS_GETGROUPS32\n//sysnb\tsetgroups(n int, list *_Gid_t) (err error) = SYS_SETGROUPS32\n//sys\tgetsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)\n//sys\tsetsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)\n//sysnb\tsocket(domain int, typ int, proto int) (fd int, err error)\n//sysnb\tgetpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sysnb\tgetsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sys\trecvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)\n//sys\tsendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)\n//sysnb\tsocketpair(domain int, typ int, flags int, fd *[2]int32) (err error)\n//sys\trecvmsg(s int, msg *Msghdr, flags int) (n int, err error)\n//sys\tsendmsg(s int, msg *Msghdr, flags int) (n int, err error)\n\n// 64-bit file system and 32-bit uid calls\n// (16-bit uid calls are not always supported in newer kernels)\n//sys\tDup2(oldfd int, newfd int) (err error)\n//sysnb\tEpollCreate(size int) (fd int, err error)\n//sys\tEpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)\n//sys\tFchown(fd int, uid int, gid int) (err error) = SYS_FCHOWN32\n//sys\tFstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64\n//sys\tFstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64\n//sysnb\tGetegid() (egid int) = SYS_GETEGID32\n//sysnb\tGeteuid() (euid int) = SYS_GETEUID32\n//sysnb\tGetgid() (gid int) = SYS_GETGID32\n//sysnb\tGetuid() (uid int) = SYS_GETUID32\n//sysnb\tInotifyInit() (fd int, err error)\n//sys\tLchown(path string, uid int, gid int) (err error) = SYS_LCHOWN32\n//sys\tListen(s int, n int) (err error)\n//sys\tLstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64\n//sys\tPause() (err error)\n//sys\tRenameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)\n//sys\tsendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64\n//sys\tSelect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT\n//sys\tSetfsgid(gid int) (err error) = SYS_SETFSGID32\n//sys\tSetfsuid(uid int) (err error) = SYS_SETFSUID32\n//sysnb\tSetregid(rgid int, egid int) (err error) = SYS_SETREGID32\n//sysnb\tSetresgid(rgid int, egid int, sgid int) (err error) = SYS_SETRESGID32\n//sysnb\tSetresuid(ruid int, euid int, suid int) (err error) = SYS_SETRESUID32\n//sysnb\tSetreuid(ruid int, euid int) (err error) = SYS_SETREUID32\n//sys\tShutdown(fd int, how int) (err error)\n//sys\tSplice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error)\n//sys\tStat(path string, stat *Stat_t) (err error) = SYS_STAT64\n//sys\tUstat(dev int, ubuf *Ustat_t) (err error)\n\n//sys\tfutimesat(dirfd int, path string, times *[2]Timeval) (err error)\n//sysnb\tGettimeofday(tv *Timeval) (err error)\n\nfunc Time(t *Time_t) (Time_t, error) {\n\tvar tv Timeval\n\terr := Gettimeofday(&tv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tif t != nil {\n\t\t*t = Time_t(tv.Sec)\n\t}\n\treturn Time_t(tv.Sec), nil\n}\n\nfunc Utime(path string, buf *Utimbuf) error {\n\ttv := []Timeval{\n\t\t{Sec: buf.Actime},\n\t\t{Sec: buf.Modtime},\n\t}\n\treturn Utimes(path, tv)\n}\n\n//sys\tutimes(path string, times *[2]Timeval) (err error)\n\n//sys   Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64\n//sys   Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64\n//sys\tTruncate(path string, length int64) (err error) = SYS_TRUNCATE64\n//sys\tFtruncate(fd int, length int64) (err error) = SYS_FTRUNCATE64\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall6(SYS_ARM_FADVISE64_64, uintptr(fd), uintptr(advice), uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n//sys\tmmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error)\n\nfunc Fstatfs(fd int, buf *Statfs_t) (err error) {\n\t_, _, e := Syscall(SYS_FSTATFS64, uintptr(fd), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf)))\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc Statfs(path string, buf *Statfs_t) (err error) {\n\tpathp, err := BytePtrFromString(path)\n\tif err != nil {\n\t\treturn err\n\t}\n\t_, _, e := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(pathp)), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf)))\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {\n\tpage := uintptr(offset / 4096)\n\tif offset != int64(page)*4096 {\n\t\treturn 0, EINVAL\n\t}\n\treturn mmap2(addr, length, prot, flags, fd, page)\n}\n\ntype rlimit32 struct {\n\tCur uint32\n\tMax uint32\n}\n\n//sysnb getrlimit(resource int, rlim *rlimit32) (err error) = SYS_UGETRLIMIT\n\nconst rlimInf32 = ^uint32(0)\nconst rlimInf64 = ^uint64(0)\n\nfunc Getrlimit(resource int, rlim *Rlimit) (err error) {\n\terr = prlimit(0, resource, nil, rlim)\n\tif err != ENOSYS {\n\t\treturn err\n\t}\n\n\trl := rlimit32{}\n\terr = getrlimit(resource, &rl)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tif rl.Cur == rlimInf32 {\n\t\trlim.Cur = rlimInf64\n\t} else {\n\t\trlim.Cur = uint64(rl.Cur)\n\t}\n\n\tif rl.Max == rlimInf32 {\n\t\trlim.Max = rlimInf64\n\t} else {\n\t\trlim.Max = uint64(rl.Max)\n\t}\n\treturn\n}\n\n//sysnb setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT\n\nfunc Setrlimit(resource int, rlim *Rlimit) (err error) {\n\terr = prlimit(0, resource, rlim, nil)\n\tif err != ENOSYS {\n\t\treturn err\n\t}\n\n\trl := rlimit32{}\n\tif rlim.Cur == rlimInf64 {\n\t\trl.Cur = rlimInf32\n\t} else if rlim.Cur < uint64(rlimInf32) {\n\t\trl.Cur = uint32(rlim.Cur)\n\t} else {\n\t\treturn EINVAL\n\t}\n\tif rlim.Max == rlimInf64 {\n\t\trl.Max = rlimInf32\n\t} else if rlim.Max < uint64(rlimInf32) {\n\t\trl.Max = uint32(rlim.Max)\n\t} else {\n\t\treturn EINVAL\n\t}\n\n\treturn setrlimit(resource, &rl)\n}\n\nfunc (r *PtraceRegs) PC() uint64 { return uint64(r.Uregs[15]) }\n\nfunc (r *PtraceRegs) SetPC(pc uint64) { r.Uregs[15] = uint32(pc) }\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n\n//sys\tpoll(fds *PollFd, nfds int, timeout int) (n int, err error)\n\nfunc Poll(fds []PollFd, timeout int) (n int, err error) {\n\tif len(fds) == 0 {\n\t\treturn poll(nil, 0, timeout)\n\t}\n\treturn poll(&fds[0], len(fds), timeout)\n}\n\n//sys\tarmSyncFileRange(fd int, flags int, off int64, n int64) (err error) = SYS_ARM_SYNC_FILE_RANGE\n\nfunc SyncFileRange(fd int, off int64, n int64, flags int) error {\n\t// The sync_file_range and arm_sync_file_range syscalls differ only in the\n\t// order of their arguments.\n\treturn armSyncFileRange(fd, flags, off, n)\n}\n\n//sys\tkexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error)\n\nfunc KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error {\n\tcmdlineLen := len(cmdline)\n\tif cmdlineLen > 0 {\n\t\t// Account for the additional NULL byte added by\n\t\t// BytePtrFromString in kexecFileLoad. The kexec_file_load\n\t\t// syscall expects a NULL-terminated string.\n\t\tcmdlineLen++\n\t}\n\treturn kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_linux_arm64.go",
    "content": "// Copyright 2015 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build arm64,linux\n\npackage unix\n\nimport \"unsafe\"\n\nfunc EpollCreate(size int) (fd int, err error) {\n\tif size <= 0 {\n\t\treturn -1, EINVAL\n\t}\n\treturn EpollCreate1(0)\n}\n\n//sys\tEpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_PWAIT\n//sys\tFadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64\n//sys\tFchown(fd int, uid int, gid int) (err error)\n//sys\tFstat(fd int, stat *Stat_t) (err error)\n//sys\tFstatat(fd int, path string, stat *Stat_t, flags int) (err error)\n//sys\tFstatfs(fd int, buf *Statfs_t) (err error)\n//sys\tFtruncate(fd int, length int64) (err error)\n//sysnb\tGetegid() (egid int)\n//sysnb\tGeteuid() (euid int)\n//sysnb\tGetgid() (gid int)\n//sysnb\tGetrlimit(resource int, rlim *Rlimit) (err error)\n//sysnb\tGetuid() (uid int)\n//sys\tListen(s int, n int) (err error)\n//sys\tPread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64\n//sys\tPwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64\n//sys\tRenameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)\n//sys\tSeek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tvar ts *Timespec\n\tif timeout != nil {\n\t\tts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000}\n\t}\n\treturn Pselect(nfd, r, w, e, ts, nil)\n}\n\n//sys\tsendfile(outfd int, infd int, offset *int64, count int) (written int, err error)\n//sys\tSetfsgid(gid int) (err error)\n//sys\tSetfsuid(uid int) (err error)\n//sysnb\tSetregid(rgid int, egid int) (err error)\n//sysnb\tSetresgid(rgid int, egid int, sgid int) (err error)\n//sysnb\tSetresuid(ruid int, euid int, suid int) (err error)\n//sysnb\tSetrlimit(resource int, rlim *Rlimit) (err error)\n//sysnb\tSetreuid(ruid int, euid int) (err error)\n//sys\tShutdown(fd int, how int) (err error)\n//sys\tSplice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\treturn Fstatat(AT_FDCWD, path, stat, 0)\n}\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\treturn Fchownat(AT_FDCWD, path, uid, gid, AT_SYMLINK_NOFOLLOW)\n}\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\treturn Fstatat(AT_FDCWD, path, stat, AT_SYMLINK_NOFOLLOW)\n}\n\n//sys\tStatfs(path string, buf *Statfs_t) (err error)\n//sys\tSyncFileRange(fd int, off int64, n int64, flags int) (err error)\n//sys\tTruncate(path string, length int64) (err error)\n\nfunc Ustat(dev int, ubuf *Ustat_t) (err error) {\n\treturn ENOSYS\n}\n\n//sys\taccept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error)\n//sys\taccept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)\n//sys\tbind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\tconnect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sysnb\tgetgroups(n int, list *_Gid_t) (nn int, err error)\n//sysnb\tsetgroups(n int, list *_Gid_t) (err error)\n//sys\tgetsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)\n//sys\tsetsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)\n//sysnb\tsocket(domain int, typ int, proto int) (fd int, err error)\n//sysnb\tsocketpair(domain int, typ int, proto int, fd *[2]int32) (err error)\n//sysnb\tgetpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sysnb\tgetsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sys\trecvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)\n//sys\tsendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\trecvmsg(s int, msg *Msghdr, flags int) (n int, err error)\n//sys\tsendmsg(s int, msg *Msghdr, flags int) (n int, err error)\n//sys\tmmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error)\n\n//sysnb\tGettimeofday(tv *Timeval) (err error)\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: usec}\n}\n\nfunc futimesat(dirfd int, path string, tv *[2]Timeval) (err error) {\n\tif tv == nil {\n\t\treturn utimensat(dirfd, path, nil, 0)\n\t}\n\n\tts := []Timespec{\n\t\tNsecToTimespec(TimevalToNsec(tv[0])),\n\t\tNsecToTimespec(TimevalToNsec(tv[1])),\n\t}\n\treturn utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)\n}\n\nfunc Time(t *Time_t) (Time_t, error) {\n\tvar tv Timeval\n\terr := Gettimeofday(&tv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tif t != nil {\n\t\t*t = Time_t(tv.Sec)\n\t}\n\treturn Time_t(tv.Sec), nil\n}\n\nfunc Utime(path string, buf *Utimbuf) error {\n\ttv := []Timeval{\n\t\t{Sec: buf.Actime},\n\t\t{Sec: buf.Modtime},\n\t}\n\treturn Utimes(path, tv)\n}\n\nfunc utimes(path string, tv *[2]Timeval) (err error) {\n\tif tv == nil {\n\t\treturn utimensat(AT_FDCWD, path, nil, 0)\n\t}\n\n\tts := []Timespec{\n\t\tNsecToTimespec(TimevalToNsec(tv[0])),\n\t\tNsecToTimespec(TimevalToNsec(tv[1])),\n\t}\n\treturn utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)\n}\n\nfunc Pipe(p []int) (err error) {\n\tif len(p) != 2 {\n\t\treturn EINVAL\n\t}\n\tvar pp [2]_C_int\n\terr = pipe2(&pp, 0)\n\tp[0] = int(pp[0])\n\tp[1] = int(pp[1])\n\treturn\n}\n\n//sysnb pipe2(p *[2]_C_int, flags int) (err error)\n\nfunc Pipe2(p []int, flags int) (err error) {\n\tif len(p) != 2 {\n\t\treturn EINVAL\n\t}\n\tvar pp [2]_C_int\n\terr = pipe2(&pp, flags)\n\tp[0] = int(pp[0])\n\tp[1] = int(pp[1])\n\treturn\n}\n\nfunc (r *PtraceRegs) PC() uint64 { return r.Pc }\n\nfunc (r *PtraceRegs) SetPC(pc uint64) { r.Pc = pc }\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint64(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint64(length)\n}\n\nfunc InotifyInit() (fd int, err error) {\n\treturn InotifyInit1(0)\n}\n\nfunc Dup2(oldfd int, newfd int) (err error) {\n\treturn Dup3(oldfd, newfd, 0)\n}\n\nfunc Pause() error {\n\t_, err := ppoll(nil, 0, nil, nil)\n\treturn err\n}\n\nfunc Poll(fds []PollFd, timeout int) (n int, err error) {\n\tvar ts *Timespec\n\tif timeout >= 0 {\n\t\tts = new(Timespec)\n\t\t*ts = NsecToTimespec(int64(timeout) * 1e6)\n\t}\n\tif len(fds) == 0 {\n\t\treturn ppoll(nil, 0, ts, nil)\n\t}\n\treturn ppoll(&fds[0], len(fds), ts, nil)\n}\n\n//sys\tkexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error)\n\nfunc KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error {\n\tcmdlineLen := len(cmdline)\n\tif cmdlineLen > 0 {\n\t\t// Account for the additional NULL byte added by\n\t\t// BytePtrFromString in kexecFileLoad. The kexec_file_load\n\t\t// syscall expects a NULL-terminated string.\n\t\tcmdlineLen++\n\t}\n\treturn kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_linux_gc.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build linux,!gccgo\n\npackage unix\n\n// SyscallNoError may be used instead of Syscall for syscalls that don't fail.\nfunc SyscallNoError(trap, a1, a2, a3 uintptr) (r1, r2 uintptr)\n\n// RawSyscallNoError may be used instead of RawSyscall for syscalls that don't\n// fail.\nfunc RawSyscallNoError(trap, a1, a2, a3 uintptr) (r1, r2 uintptr)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_linux_gc_386.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build linux,!gccgo,386\n\npackage unix\n\nimport \"syscall\"\n\n// Underlying system call writes to newoffset via pointer.\n// Implemented in assembly to avoid allocation.\nfunc seek(fd int, offset int64, whence int) (newoffset int64, err syscall.Errno)\n\nfunc socketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (n int, err syscall.Errno)\nfunc rawsocketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (n int, err syscall.Errno)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_linux_gccgo_386.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build linux,gccgo,386\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nfunc seek(fd int, offset int64, whence int) (int64, syscall.Errno) {\n\tvar newoffset int64\n\toffsetLow := uint32(offset & 0xffffffff)\n\toffsetHigh := uint32((offset >> 32) & 0xffffffff)\n\t_, _, err := Syscall6(SYS__LLSEEK, uintptr(fd), uintptr(offsetHigh), uintptr(offsetLow), uintptr(unsafe.Pointer(&newoffset)), uintptr(whence), 0)\n\treturn newoffset, err\n}\n\nfunc socketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (int, syscall.Errno) {\n\tfd, _, err := Syscall(SYS_SOCKETCALL, uintptr(call), uintptr(unsafe.Pointer(&a0)), 0)\n\treturn int(fd), err\n}\n\nfunc rawsocketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (int, syscall.Errno) {\n\tfd, _, err := RawSyscall(SYS_SOCKETCALL, uintptr(call), uintptr(unsafe.Pointer(&a0)), 0)\n\treturn int(fd), err\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_linux_gccgo_arm.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build linux,gccgo,arm\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nfunc seek(fd int, offset int64, whence int) (int64, syscall.Errno) {\n\tvar newoffset int64\n\toffsetLow := uint32(offset & 0xffffffff)\n\toffsetHigh := uint32((offset >> 32) & 0xffffffff)\n\t_, _, err := Syscall6(SYS__LLSEEK, uintptr(fd), uintptr(offsetHigh), uintptr(offsetLow), uintptr(unsafe.Pointer(&newoffset)), uintptr(whence), 0)\n\treturn newoffset, err\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go",
    "content": "// Copyright 2015 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build linux\n// +build mips64 mips64le\n\npackage unix\n\n//sys\tDup2(oldfd int, newfd int) (err error)\n//sysnb\tEpollCreate(size int) (fd int, err error)\n//sys\tEpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)\n//sys\tFadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64\n//sys\tFchown(fd int, uid int, gid int) (err error)\n//sys\tFstatfs(fd int, buf *Statfs_t) (err error)\n//sys\tFtruncate(fd int, length int64) (err error)\n//sysnb\tGetegid() (egid int)\n//sysnb\tGeteuid() (euid int)\n//sysnb\tGetgid() (gid int)\n//sysnb\tGetrlimit(resource int, rlim *Rlimit) (err error)\n//sysnb\tGetuid() (uid int)\n//sys\tLchown(path string, uid int, gid int) (err error)\n//sys\tListen(s int, n int) (err error)\n//sys\tPause() (err error)\n//sys\tPread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64\n//sys\tPwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64\n//sys\tRenameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)\n//sys\tSeek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tvar ts *Timespec\n\tif timeout != nil {\n\t\tts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000}\n\t}\n\treturn Pselect(nfd, r, w, e, ts, nil)\n}\n\n//sys\tsendfile(outfd int, infd int, offset *int64, count int) (written int, err error)\n//sys\tSetfsgid(gid int) (err error)\n//sys\tSetfsuid(uid int) (err error)\n//sysnb\tSetregid(rgid int, egid int) (err error)\n//sysnb\tSetresgid(rgid int, egid int, sgid int) (err error)\n//sysnb\tSetresuid(ruid int, euid int, suid int) (err error)\n//sysnb\tSetrlimit(resource int, rlim *Rlimit) (err error)\n//sysnb\tSetreuid(ruid int, euid int) (err error)\n//sys\tShutdown(fd int, how int) (err error)\n//sys\tSplice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)\n//sys\tStatfs(path string, buf *Statfs_t) (err error)\n//sys\tSyncFileRange(fd int, off int64, n int64, flags int) (err error)\n//sys\tTruncate(path string, length int64) (err error)\n//sys\tUstat(dev int, ubuf *Ustat_t) (err error)\n//sys\taccept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error)\n//sys\taccept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)\n//sys\tbind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\tconnect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sysnb\tgetgroups(n int, list *_Gid_t) (nn int, err error)\n//sysnb\tsetgroups(n int, list *_Gid_t) (err error)\n//sys\tgetsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)\n//sys\tsetsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)\n//sysnb\tsocket(domain int, typ int, proto int) (fd int, err error)\n//sysnb\tsocketpair(domain int, typ int, proto int, fd *[2]int32) (err error)\n//sysnb\tgetpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sysnb\tgetsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sys\trecvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)\n//sys\tsendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\trecvmsg(s int, msg *Msghdr, flags int) (n int, err error)\n//sys\tsendmsg(s int, msg *Msghdr, flags int) (n int, err error)\n//sys\tmmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error)\n\n//sys\tfutimesat(dirfd int, path string, times *[2]Timeval) (err error)\n//sysnb\tGettimeofday(tv *Timeval) (err error)\n\nfunc Time(t *Time_t) (tt Time_t, err error) {\n\tvar tv Timeval\n\terr = Gettimeofday(&tv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tif t != nil {\n\t\t*t = Time_t(tv.Sec)\n\t}\n\treturn Time_t(tv.Sec), nil\n}\n\n//sys\tUtime(path string, buf *Utimbuf) (err error)\n//sys\tutimes(path string, times *[2]Timeval) (err error)\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: usec}\n}\n\nfunc Pipe(p []int) (err error) {\n\tif len(p) != 2 {\n\t\treturn EINVAL\n\t}\n\tvar pp [2]_C_int\n\terr = pipe2(&pp, 0)\n\tp[0] = int(pp[0])\n\tp[1] = int(pp[1])\n\treturn\n}\n\n//sysnb pipe2(p *[2]_C_int, flags int) (err error)\n\nfunc Pipe2(p []int, flags int) (err error) {\n\tif len(p) != 2 {\n\t\treturn EINVAL\n\t}\n\tvar pp [2]_C_int\n\terr = pipe2(&pp, flags)\n\tp[0] = int(pp[0])\n\tp[1] = int(pp[1])\n\treturn\n}\n\nfunc Ioperm(from int, num int, on int) (err error) {\n\treturn ENOSYS\n}\n\nfunc Iopl(level int) (err error) {\n\treturn ENOSYS\n}\n\ntype stat_t struct {\n\tDev        uint32\n\tPad0       [3]int32\n\tIno        uint64\n\tMode       uint32\n\tNlink      uint32\n\tUid        uint32\n\tGid        uint32\n\tRdev       uint32\n\tPad1       [3]uint32\n\tSize       int64\n\tAtime      uint32\n\tAtime_nsec uint32\n\tMtime      uint32\n\tMtime_nsec uint32\n\tCtime      uint32\n\tCtime_nsec uint32\n\tBlksize    uint32\n\tPad2       uint32\n\tBlocks     int64\n}\n\n//sys\tfstat(fd int, st *stat_t) (err error)\n//sys\tfstatat(dirfd int, path string, st *stat_t, flags int) (err error) = SYS_NEWFSTATAT\n//sys\tlstat(path string, st *stat_t) (err error)\n//sys\tstat(path string, st *stat_t) (err error)\n\nfunc Fstat(fd int, s *Stat_t) (err error) {\n\tst := &stat_t{}\n\terr = fstat(fd, st)\n\tfillStat_t(s, st)\n\treturn\n}\n\nfunc Fstatat(dirfd int, path string, s *Stat_t, flags int) (err error) {\n\tst := &stat_t{}\n\terr = fstatat(dirfd, path, st, flags)\n\tfillStat_t(s, st)\n\treturn\n}\n\nfunc Lstat(path string, s *Stat_t) (err error) {\n\tst := &stat_t{}\n\terr = lstat(path, st)\n\tfillStat_t(s, st)\n\treturn\n}\n\nfunc Stat(path string, s *Stat_t) (err error) {\n\tst := &stat_t{}\n\terr = stat(path, st)\n\tfillStat_t(s, st)\n\treturn\n}\n\nfunc fillStat_t(s *Stat_t, st *stat_t) {\n\ts.Dev = st.Dev\n\ts.Ino = st.Ino\n\ts.Mode = st.Mode\n\ts.Nlink = st.Nlink\n\ts.Uid = st.Uid\n\ts.Gid = st.Gid\n\ts.Rdev = st.Rdev\n\ts.Size = st.Size\n\ts.Atim = Timespec{int64(st.Atime), int64(st.Atime_nsec)}\n\ts.Mtim = Timespec{int64(st.Mtime), int64(st.Mtime_nsec)}\n\ts.Ctim = Timespec{int64(st.Ctime), int64(st.Ctime_nsec)}\n\ts.Blksize = st.Blksize\n\ts.Blocks = st.Blocks\n}\n\nfunc (r *PtraceRegs) PC() uint64 { return r.Epc }\n\nfunc (r *PtraceRegs) SetPC(pc uint64) { r.Epc = pc }\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint64(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint64(length)\n}\n\n//sys\tpoll(fds *PollFd, nfds int, timeout int) (n int, err error)\n\nfunc Poll(fds []PollFd, timeout int) (n int, err error) {\n\tif len(fds) == 0 {\n\t\treturn poll(nil, 0, timeout)\n\t}\n\treturn poll(&fds[0], len(fds), timeout)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go",
    "content": "// Copyright 2016 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build linux\n// +build mips mipsle\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nfunc Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)\n\n//sys\tDup2(oldfd int, newfd int) (err error)\n//sysnb\tEpollCreate(size int) (fd int, err error)\n//sys\tEpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)\n//sys\tFadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64\n//sys\tFchown(fd int, uid int, gid int) (err error)\n//sys\tFtruncate(fd int, length int64) (err error) = SYS_FTRUNCATE64\n//sysnb\tGetegid() (egid int)\n//sysnb\tGeteuid() (euid int)\n//sysnb\tGetgid() (gid int)\n//sysnb\tGetuid() (uid int)\n//sys\tLchown(path string, uid int, gid int) (err error)\n//sys\tListen(s int, n int) (err error)\n//sys\tPread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64\n//sys\tPwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64\n//sys\tRenameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)\n//sys\tSelect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT\n//sys\tsendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64\n//sys\tSetfsgid(gid int) (err error)\n//sys\tSetfsuid(uid int) (err error)\n//sysnb\tSetregid(rgid int, egid int) (err error)\n//sysnb\tSetresgid(rgid int, egid int, sgid int) (err error)\n//sysnb\tSetresuid(ruid int, euid int, suid int) (err error)\n//sysnb\tSetreuid(ruid int, euid int) (err error)\n//sys\tShutdown(fd int, how int) (err error)\n//sys\tSplice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error)\n//sys\tSyncFileRange(fd int, off int64, n int64, flags int) (err error)\n//sys\tTruncate(path string, length int64) (err error) = SYS_TRUNCATE64\n//sys\tUstat(dev int, ubuf *Ustat_t) (err error)\n//sys\taccept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error)\n//sys\taccept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)\n//sys\tbind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\tconnect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sysnb\tgetgroups(n int, list *_Gid_t) (nn int, err error)\n//sysnb\tsetgroups(n int, list *_Gid_t) (err error)\n//sys\tgetsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)\n//sys\tsetsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)\n//sysnb\tsocket(domain int, typ int, proto int) (fd int, err error)\n//sysnb\tsocketpair(domain int, typ int, proto int, fd *[2]int32) (err error)\n//sysnb\tgetpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sysnb\tgetsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sys\trecvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)\n//sys\tsendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\trecvmsg(s int, msg *Msghdr, flags int) (n int, err error)\n//sys\tsendmsg(s int, msg *Msghdr, flags int) (n int, err error)\n\n//sysnb\tInotifyInit() (fd int, err error)\n//sys\tIoperm(from int, num int, on int) (err error)\n//sys\tIopl(level int) (err error)\n\n//sys\tfutimesat(dirfd int, path string, times *[2]Timeval) (err error)\n//sysnb\tGettimeofday(tv *Timeval) (err error)\n//sysnb\tTime(t *Time_t) (tt Time_t, err error)\n//sys\tUtime(path string, buf *Utimbuf) (err error)\n//sys\tutimes(path string, times *[2]Timeval) (err error)\n\n//sys\tLstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64\n//sys\tFstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64\n//sys\tFstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64\n//sys\tStat(path string, stat *Stat_t) (err error) = SYS_STAT64\n\n//sys\tPause() (err error)\n\nfunc Fstatfs(fd int, buf *Statfs_t) (err error) {\n\t_, _, e := Syscall(SYS_FSTATFS64, uintptr(fd), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf)))\n\tif e != 0 {\n\t\terr = errnoErr(e)\n\t}\n\treturn\n}\n\nfunc Statfs(path string, buf *Statfs_t) (err error) {\n\tp, err := BytePtrFromString(path)\n\tif err != nil {\n\t\treturn err\n\t}\n\t_, _, e := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(p)), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf)))\n\tif e != 0 {\n\t\terr = errnoErr(e)\n\t}\n\treturn\n}\n\nfunc Seek(fd int, offset int64, whence int) (off int64, err error) {\n\t_, _, e := Syscall6(SYS__LLSEEK, uintptr(fd), uintptr(offset>>32), uintptr(offset), uintptr(unsafe.Pointer(&off)), uintptr(whence), 0)\n\tif e != 0 {\n\t\terr = errnoErr(e)\n\t}\n\treturn\n}\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: int32(sec), Nsec: int32(nsec)}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: int32(sec), Usec: int32(usec)}\n}\n\n//sysnb pipe2(p *[2]_C_int, flags int) (err error)\n\nfunc Pipe2(p []int, flags int) (err error) {\n\tif len(p) != 2 {\n\t\treturn EINVAL\n\t}\n\tvar pp [2]_C_int\n\terr = pipe2(&pp, flags)\n\tp[0] = int(pp[0])\n\tp[1] = int(pp[1])\n\treturn\n}\n\n//sysnb pipe() (p1 int, p2 int, err error)\n\nfunc Pipe(p []int) (err error) {\n\tif len(p) != 2 {\n\t\treturn EINVAL\n\t}\n\tp[0], p[1], err = pipe()\n\treturn\n}\n\n//sys\tmmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error)\n\nfunc mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {\n\tpage := uintptr(offset / 4096)\n\tif offset != int64(page)*4096 {\n\t\treturn 0, EINVAL\n\t}\n\treturn mmap2(addr, length, prot, flags, fd, page)\n}\n\nconst rlimInf32 = ^uint32(0)\nconst rlimInf64 = ^uint64(0)\n\ntype rlimit32 struct {\n\tCur uint32\n\tMax uint32\n}\n\n//sysnb getrlimit(resource int, rlim *rlimit32) (err error) = SYS_GETRLIMIT\n\nfunc Getrlimit(resource int, rlim *Rlimit) (err error) {\n\terr = prlimit(0, resource, nil, rlim)\n\tif err != ENOSYS {\n\t\treturn err\n\t}\n\n\trl := rlimit32{}\n\terr = getrlimit(resource, &rl)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tif rl.Cur == rlimInf32 {\n\t\trlim.Cur = rlimInf64\n\t} else {\n\t\trlim.Cur = uint64(rl.Cur)\n\t}\n\n\tif rl.Max == rlimInf32 {\n\t\trlim.Max = rlimInf64\n\t} else {\n\t\trlim.Max = uint64(rl.Max)\n\t}\n\treturn\n}\n\n//sysnb setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT\n\nfunc Setrlimit(resource int, rlim *Rlimit) (err error) {\n\terr = prlimit(0, resource, rlim, nil)\n\tif err != ENOSYS {\n\t\treturn err\n\t}\n\n\trl := rlimit32{}\n\tif rlim.Cur == rlimInf64 {\n\t\trl.Cur = rlimInf32\n\t} else if rlim.Cur < uint64(rlimInf32) {\n\t\trl.Cur = uint32(rlim.Cur)\n\t} else {\n\t\treturn EINVAL\n\t}\n\tif rlim.Max == rlimInf64 {\n\t\trl.Max = rlimInf32\n\t} else if rlim.Max < uint64(rlimInf32) {\n\t\trl.Max = uint32(rlim.Max)\n\t} else {\n\t\treturn EINVAL\n\t}\n\n\treturn setrlimit(resource, &rl)\n}\n\nfunc (r *PtraceRegs) PC() uint64 { return r.Epc }\n\nfunc (r *PtraceRegs) SetPC(pc uint64) { r.Epc = pc }\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n\n//sys\tpoll(fds *PollFd, nfds int, timeout int) (n int, err error)\n\nfunc Poll(fds []PollFd, timeout int) (n int, err error) {\n\tif len(fds) == 0 {\n\t\treturn poll(nil, 0, timeout)\n\t}\n\treturn poll(&fds[0], len(fds), timeout)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build linux\n// +build ppc64 ppc64le\n\npackage unix\n\n//sys\tDup2(oldfd int, newfd int) (err error)\n//sysnb\tEpollCreate(size int) (fd int, err error)\n//sys\tEpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)\n//sys\tFadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64\n//sys\tFchown(fd int, uid int, gid int) (err error)\n//sys\tFstat(fd int, stat *Stat_t) (err error)\n//sys\tFstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_NEWFSTATAT\n//sys\tFstatfs(fd int, buf *Statfs_t) (err error)\n//sys\tFtruncate(fd int, length int64) (err error)\n//sysnb\tGetegid() (egid int)\n//sysnb\tGeteuid() (euid int)\n//sysnb\tGetgid() (gid int)\n//sysnb\tGetrlimit(resource int, rlim *Rlimit) (err error) = SYS_UGETRLIMIT\n//sysnb\tGetuid() (uid int)\n//sysnb\tInotifyInit() (fd int, err error)\n//sys\tIoperm(from int, num int, on int) (err error)\n//sys\tIopl(level int) (err error)\n//sys\tLchown(path string, uid int, gid int) (err error)\n//sys\tListen(s int, n int) (err error)\n//sys\tLstat(path string, stat *Stat_t) (err error)\n//sys\tPause() (err error)\n//sys\tPread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64\n//sys\tPwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64\n//sys\tRenameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)\n//sys\tSeek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK\n//sys\tSelect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT\n//sys\tsendfile(outfd int, infd int, offset *int64, count int) (written int, err error)\n//sys\tSetfsgid(gid int) (err error)\n//sys\tSetfsuid(uid int) (err error)\n//sysnb\tSetregid(rgid int, egid int) (err error)\n//sysnb\tSetresgid(rgid int, egid int, sgid int) (err error)\n//sysnb\tSetresuid(ruid int, euid int, suid int) (err error)\n//sysnb\tSetrlimit(resource int, rlim *Rlimit) (err error)\n//sysnb\tSetreuid(ruid int, euid int) (err error)\n//sys\tShutdown(fd int, how int) (err error)\n//sys\tSplice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)\n//sys\tStat(path string, stat *Stat_t) (err error)\n//sys\tStatfs(path string, buf *Statfs_t) (err error)\n//sys\tTruncate(path string, length int64) (err error)\n//sys\tUstat(dev int, ubuf *Ustat_t) (err error)\n//sys\taccept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error)\n//sys\taccept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)\n//sys\tbind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\tconnect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sysnb\tgetgroups(n int, list *_Gid_t) (nn int, err error)\n//sysnb\tsetgroups(n int, list *_Gid_t) (err error)\n//sys\tgetsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)\n//sys\tsetsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)\n//sysnb\tsocket(domain int, typ int, proto int) (fd int, err error)\n//sysnb\tsocketpair(domain int, typ int, proto int, fd *[2]int32) (err error)\n//sysnb\tgetpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sysnb\tgetsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sys\trecvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)\n//sys\tsendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\trecvmsg(s int, msg *Msghdr, flags int) (n int, err error)\n//sys\tsendmsg(s int, msg *Msghdr, flags int) (n int, err error)\n//sys\tmmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error)\n\n//sys\tfutimesat(dirfd int, path string, times *[2]Timeval) (err error)\n//sysnb\tGettimeofday(tv *Timeval) (err error)\n//sysnb\tTime(t *Time_t) (tt Time_t, err error)\n//sys\tUtime(path string, buf *Utimbuf) (err error)\n//sys\tutimes(path string, times *[2]Timeval) (err error)\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: usec}\n}\n\nfunc (r *PtraceRegs) PC() uint64 { return r.Nip }\n\nfunc (r *PtraceRegs) SetPC(pc uint64) { r.Nip = pc }\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint64(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint64(length)\n}\n\n//sysnb pipe(p *[2]_C_int) (err error)\n\nfunc Pipe(p []int) (err error) {\n\tif len(p) != 2 {\n\t\treturn EINVAL\n\t}\n\tvar pp [2]_C_int\n\terr = pipe(&pp)\n\tp[0] = int(pp[0])\n\tp[1] = int(pp[1])\n\treturn\n}\n\n//sysnb pipe2(p *[2]_C_int, flags int) (err error)\n\nfunc Pipe2(p []int, flags int) (err error) {\n\tif len(p) != 2 {\n\t\treturn EINVAL\n\t}\n\tvar pp [2]_C_int\n\terr = pipe2(&pp, flags)\n\tp[0] = int(pp[0])\n\tp[1] = int(pp[1])\n\treturn\n}\n\n//sys\tpoll(fds *PollFd, nfds int, timeout int) (n int, err error)\n\nfunc Poll(fds []PollFd, timeout int) (n int, err error) {\n\tif len(fds) == 0 {\n\t\treturn poll(nil, 0, timeout)\n\t}\n\treturn poll(&fds[0], len(fds), timeout)\n}\n\n//sys\tsyncFileRange2(fd int, flags int, off int64, n int64) (err error) = SYS_SYNC_FILE_RANGE2\n\nfunc SyncFileRange(fd int, off int64, n int64, flags int) error {\n\t// The sync_file_range and sync_file_range2 syscalls differ only in the\n\t// order of their arguments.\n\treturn syncFileRange2(fd, flags, off, n)\n}\n\n//sys\tkexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error)\n\nfunc KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error {\n\tcmdlineLen := len(cmdline)\n\tif cmdlineLen > 0 {\n\t\t// Account for the additional NULL byte added by\n\t\t// BytePtrFromString in kexecFileLoad. The kexec_file_load\n\t\t// syscall expects a NULL-terminated string.\n\t\tcmdlineLen++\n\t}\n\treturn kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build riscv64,linux\n\npackage unix\n\nimport \"unsafe\"\n\nfunc EpollCreate(size int) (fd int, err error) {\n\tif size <= 0 {\n\t\treturn -1, EINVAL\n\t}\n\treturn EpollCreate1(0)\n}\n\n//sys\tEpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_PWAIT\n//sys\tFadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64\n//sys\tFchown(fd int, uid int, gid int) (err error)\n//sys\tFstat(fd int, stat *Stat_t) (err error)\n//sys\tFstatat(fd int, path string, stat *Stat_t, flags int) (err error)\n//sys\tFstatfs(fd int, buf *Statfs_t) (err error)\n//sys\tFtruncate(fd int, length int64) (err error)\n//sysnb\tGetegid() (egid int)\n//sysnb\tGeteuid() (euid int)\n//sysnb\tGetgid() (gid int)\n//sysnb\tGetrlimit(resource int, rlim *Rlimit) (err error)\n//sysnb\tGetuid() (uid int)\n//sys\tListen(s int, n int) (err error)\n//sys\tPread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64\n//sys\tPwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64\n//sys\tSeek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tvar ts *Timespec\n\tif timeout != nil {\n\t\tts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000}\n\t}\n\treturn Pselect(nfd, r, w, e, ts, nil)\n}\n\n//sys\tsendfile(outfd int, infd int, offset *int64, count int) (written int, err error)\n//sys\tSetfsgid(gid int) (err error)\n//sys\tSetfsuid(uid int) (err error)\n//sysnb\tSetregid(rgid int, egid int) (err error)\n//sysnb\tSetresgid(rgid int, egid int, sgid int) (err error)\n//sysnb\tSetresuid(ruid int, euid int, suid int) (err error)\n//sysnb\tSetrlimit(resource int, rlim *Rlimit) (err error)\n//sysnb\tSetreuid(ruid int, euid int) (err error)\n//sys\tShutdown(fd int, how int) (err error)\n//sys\tSplice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\treturn Fstatat(AT_FDCWD, path, stat, 0)\n}\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\treturn Fchownat(AT_FDCWD, path, uid, gid, AT_SYMLINK_NOFOLLOW)\n}\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\treturn Fstatat(AT_FDCWD, path, stat, AT_SYMLINK_NOFOLLOW)\n}\n\n//sys\tStatfs(path string, buf *Statfs_t) (err error)\n//sys\tSyncFileRange(fd int, off int64, n int64, flags int) (err error)\n//sys\tTruncate(path string, length int64) (err error)\n\nfunc Ustat(dev int, ubuf *Ustat_t) (err error) {\n\treturn ENOSYS\n}\n\n//sys\taccept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error)\n//sys\taccept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)\n//sys\tbind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\tconnect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sysnb\tgetgroups(n int, list *_Gid_t) (nn int, err error)\n//sysnb\tsetgroups(n int, list *_Gid_t) (err error)\n//sys\tgetsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)\n//sys\tsetsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)\n//sysnb\tsocket(domain int, typ int, proto int) (fd int, err error)\n//sysnb\tsocketpair(domain int, typ int, proto int, fd *[2]int32) (err error)\n//sysnb\tgetpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sysnb\tgetsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sys\trecvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)\n//sys\tsendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\trecvmsg(s int, msg *Msghdr, flags int) (n int, err error)\n//sys\tsendmsg(s int, msg *Msghdr, flags int) (n int, err error)\n//sys\tmmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error)\n\n//sysnb\tGettimeofday(tv *Timeval) (err error)\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: usec}\n}\n\nfunc futimesat(dirfd int, path string, tv *[2]Timeval) (err error) {\n\tif tv == nil {\n\t\treturn utimensat(dirfd, path, nil, 0)\n\t}\n\n\tts := []Timespec{\n\t\tNsecToTimespec(TimevalToNsec(tv[0])),\n\t\tNsecToTimespec(TimevalToNsec(tv[1])),\n\t}\n\treturn utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)\n}\n\nfunc Time(t *Time_t) (Time_t, error) {\n\tvar tv Timeval\n\terr := Gettimeofday(&tv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tif t != nil {\n\t\t*t = Time_t(tv.Sec)\n\t}\n\treturn Time_t(tv.Sec), nil\n}\n\nfunc Utime(path string, buf *Utimbuf) error {\n\ttv := []Timeval{\n\t\t{Sec: buf.Actime},\n\t\t{Sec: buf.Modtime},\n\t}\n\treturn Utimes(path, tv)\n}\n\nfunc utimes(path string, tv *[2]Timeval) (err error) {\n\tif tv == nil {\n\t\treturn utimensat(AT_FDCWD, path, nil, 0)\n\t}\n\n\tts := []Timespec{\n\t\tNsecToTimespec(TimevalToNsec(tv[0])),\n\t\tNsecToTimespec(TimevalToNsec(tv[1])),\n\t}\n\treturn utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)\n}\n\nfunc Pipe(p []int) (err error) {\n\tif len(p) != 2 {\n\t\treturn EINVAL\n\t}\n\tvar pp [2]_C_int\n\terr = pipe2(&pp, 0)\n\tp[0] = int(pp[0])\n\tp[1] = int(pp[1])\n\treturn\n}\n\n//sysnb pipe2(p *[2]_C_int, flags int) (err error)\n\nfunc Pipe2(p []int, flags int) (err error) {\n\tif len(p) != 2 {\n\t\treturn EINVAL\n\t}\n\tvar pp [2]_C_int\n\terr = pipe2(&pp, flags)\n\tp[0] = int(pp[0])\n\tp[1] = int(pp[1])\n\treturn\n}\n\nfunc (r *PtraceRegs) PC() uint64 { return r.Pc }\n\nfunc (r *PtraceRegs) SetPC(pc uint64) { r.Pc = pc }\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint64(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint64(length)\n}\n\nfunc InotifyInit() (fd int, err error) {\n\treturn InotifyInit1(0)\n}\n\nfunc Dup2(oldfd int, newfd int) (err error) {\n\treturn Dup3(oldfd, newfd, 0)\n}\n\nfunc Pause() error {\n\t_, err := ppoll(nil, 0, nil, nil)\n\treturn err\n}\n\nfunc Poll(fds []PollFd, timeout int) (n int, err error) {\n\tvar ts *Timespec\n\tif timeout >= 0 {\n\t\tts = new(Timespec)\n\t\t*ts = NsecToTimespec(int64(timeout) * 1e6)\n\t}\n\tif len(fds) == 0 {\n\t\treturn ppoll(nil, 0, ts, nil)\n\t}\n\treturn ppoll(&fds[0], len(fds), ts, nil)\n}\n\nfunc Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {\n\treturn Renameat2(olddirfd, oldpath, newdirfd, newpath, 0)\n}\n\n//sys\tkexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error)\n\nfunc KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error {\n\tcmdlineLen := len(cmdline)\n\tif cmdlineLen > 0 {\n\t\t// Account for the additional NULL byte added by\n\t\t// BytePtrFromString in kexecFileLoad. The kexec_file_load\n\t\t// syscall expects a NULL-terminated string.\n\t\tcmdlineLen++\n\t}\n\treturn kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_linux_s390x.go",
    "content": "// Copyright 2016 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build s390x,linux\n\npackage unix\n\nimport (\n\t\"unsafe\"\n)\n\n//sys\tDup2(oldfd int, newfd int) (err error)\n//sysnb\tEpollCreate(size int) (fd int, err error)\n//sys\tEpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)\n//sys\tFadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64\n//sys\tFchown(fd int, uid int, gid int) (err error)\n//sys\tFstat(fd int, stat *Stat_t) (err error)\n//sys\tFstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_NEWFSTATAT\n//sys\tFstatfs(fd int, buf *Statfs_t) (err error)\n//sys\tFtruncate(fd int, length int64) (err error)\n//sysnb\tGetegid() (egid int)\n//sysnb\tGeteuid() (euid int)\n//sysnb\tGetgid() (gid int)\n//sysnb\tGetrlimit(resource int, rlim *Rlimit) (err error)\n//sysnb\tGetuid() (uid int)\n//sysnb\tInotifyInit() (fd int, err error)\n//sys\tLchown(path string, uid int, gid int) (err error)\n//sys\tLstat(path string, stat *Stat_t) (err error)\n//sys\tPause() (err error)\n//sys\tPread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64\n//sys\tPwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64\n//sys\tRenameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)\n//sys\tSeek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK\n//sys\tSelect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)\n//sys\tsendfile(outfd int, infd int, offset *int64, count int) (written int, err error)\n//sys\tSetfsgid(gid int) (err error)\n//sys\tSetfsuid(uid int) (err error)\n//sysnb\tSetregid(rgid int, egid int) (err error)\n//sysnb\tSetresgid(rgid int, egid int, sgid int) (err error)\n//sysnb\tSetresuid(ruid int, euid int, suid int) (err error)\n//sysnb\tSetrlimit(resource int, rlim *Rlimit) (err error)\n//sysnb\tSetreuid(ruid int, euid int) (err error)\n//sys\tSplice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)\n//sys\tStat(path string, stat *Stat_t) (err error)\n//sys\tStatfs(path string, buf *Statfs_t) (err error)\n//sys\tSyncFileRange(fd int, off int64, n int64, flags int) (err error)\n//sys\tTruncate(path string, length int64) (err error)\n//sys\tUstat(dev int, ubuf *Ustat_t) (err error)\n//sysnb\tgetgroups(n int, list *_Gid_t) (nn int, err error)\n//sysnb\tsetgroups(n int, list *_Gid_t) (err error)\n\n//sys\tfutimesat(dirfd int, path string, times *[2]Timeval) (err error)\n//sysnb\tGettimeofday(tv *Timeval) (err error)\n\nfunc Time(t *Time_t) (tt Time_t, err error) {\n\tvar tv Timeval\n\terr = Gettimeofday(&tv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tif t != nil {\n\t\t*t = Time_t(tv.Sec)\n\t}\n\treturn Time_t(tv.Sec), nil\n}\n\n//sys\tUtime(path string, buf *Utimbuf) (err error)\n//sys\tutimes(path string, times *[2]Timeval) (err error)\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: usec}\n}\n\n//sysnb pipe2(p *[2]_C_int, flags int) (err error)\n\nfunc Pipe(p []int) (err error) {\n\tif len(p) != 2 {\n\t\treturn EINVAL\n\t}\n\tvar pp [2]_C_int\n\terr = pipe2(&pp, 0) // pipe2 is the same as pipe when flags are set to 0.\n\tp[0] = int(pp[0])\n\tp[1] = int(pp[1])\n\treturn\n}\n\nfunc Pipe2(p []int, flags int) (err error) {\n\tif len(p) != 2 {\n\t\treturn EINVAL\n\t}\n\tvar pp [2]_C_int\n\terr = pipe2(&pp, flags)\n\tp[0] = int(pp[0])\n\tp[1] = int(pp[1])\n\treturn\n}\n\nfunc Ioperm(from int, num int, on int) (err error) {\n\treturn ENOSYS\n}\n\nfunc Iopl(level int) (err error) {\n\treturn ENOSYS\n}\n\nfunc (r *PtraceRegs) PC() uint64 { return r.Psw.Addr }\n\nfunc (r *PtraceRegs) SetPC(pc uint64) { r.Psw.Addr = pc }\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint64(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint64(length)\n}\n\n// Linux on s390x uses the old mmap interface, which requires arguments to be passed in a struct.\n// mmap2 also requires arguments to be passed in a struct; it is currently not exposed in <asm/unistd.h>.\nfunc mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {\n\tmmap_args := [6]uintptr{addr, length, uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)}\n\tr0, _, e1 := Syscall(SYS_MMAP, uintptr(unsafe.Pointer(&mmap_args[0])), 0, 0)\n\txaddr = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// On s390x Linux, all the socket calls go through an extra indirection.\n// The arguments to the underlying system call (SYS_SOCKETCALL) are the\n// number below and a pointer to an array of uintptr.\nconst (\n\t// see linux/net.h\n\tnetSocket      = 1\n\tnetBind        = 2\n\tnetConnect     = 3\n\tnetListen      = 4\n\tnetAccept      = 5\n\tnetGetSockName = 6\n\tnetGetPeerName = 7\n\tnetSocketPair  = 8\n\tnetSend        = 9\n\tnetRecv        = 10\n\tnetSendTo      = 11\n\tnetRecvFrom    = 12\n\tnetShutdown    = 13\n\tnetSetSockOpt  = 14\n\tnetGetSockOpt  = 15\n\tnetSendMsg     = 16\n\tnetRecvMsg     = 17\n\tnetAccept4     = 18\n\tnetRecvMMsg    = 19\n\tnetSendMMsg    = 20\n)\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (int, error) {\n\targs := [3]uintptr{uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))}\n\tfd, _, err := Syscall(SYS_SOCKETCALL, netAccept, uintptr(unsafe.Pointer(&args)), 0)\n\tif err != 0 {\n\t\treturn 0, err\n\t}\n\treturn int(fd), nil\n}\n\nfunc accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (int, error) {\n\targs := [4]uintptr{uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags)}\n\tfd, _, err := Syscall(SYS_SOCKETCALL, netAccept4, uintptr(unsafe.Pointer(&args)), 0)\n\tif err != 0 {\n\t\treturn 0, err\n\t}\n\treturn int(fd), nil\n}\n\nfunc getsockname(s int, rsa *RawSockaddrAny, addrlen *_Socklen) error {\n\targs := [3]uintptr{uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))}\n\t_, _, err := RawSyscall(SYS_SOCKETCALL, netGetSockName, uintptr(unsafe.Pointer(&args)), 0)\n\tif err != 0 {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc getpeername(s int, rsa *RawSockaddrAny, addrlen *_Socklen) error {\n\targs := [3]uintptr{uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))}\n\t_, _, err := RawSyscall(SYS_SOCKETCALL, netGetPeerName, uintptr(unsafe.Pointer(&args)), 0)\n\tif err != 0 {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc socketpair(domain int, typ int, flags int, fd *[2]int32) error {\n\targs := [4]uintptr{uintptr(domain), uintptr(typ), uintptr(flags), uintptr(unsafe.Pointer(fd))}\n\t_, _, err := RawSyscall(SYS_SOCKETCALL, netSocketPair, uintptr(unsafe.Pointer(&args)), 0)\n\tif err != 0 {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) error {\n\targs := [3]uintptr{uintptr(s), uintptr(addr), uintptr(addrlen)}\n\t_, _, err := Syscall(SYS_SOCKETCALL, netBind, uintptr(unsafe.Pointer(&args)), 0)\n\tif err != 0 {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) error {\n\targs := [3]uintptr{uintptr(s), uintptr(addr), uintptr(addrlen)}\n\t_, _, err := Syscall(SYS_SOCKETCALL, netConnect, uintptr(unsafe.Pointer(&args)), 0)\n\tif err != 0 {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc socket(domain int, typ int, proto int) (int, error) {\n\targs := [3]uintptr{uintptr(domain), uintptr(typ), uintptr(proto)}\n\tfd, _, err := RawSyscall(SYS_SOCKETCALL, netSocket, uintptr(unsafe.Pointer(&args)), 0)\n\tif err != 0 {\n\t\treturn 0, err\n\t}\n\treturn int(fd), nil\n}\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) error {\n\targs := [5]uintptr{uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen))}\n\t_, _, err := Syscall(SYS_SOCKETCALL, netGetSockOpt, uintptr(unsafe.Pointer(&args)), 0)\n\tif err != 0 {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) error {\n\targs := [4]uintptr{uintptr(s), uintptr(level), uintptr(name), uintptr(val)}\n\t_, _, err := Syscall(SYS_SOCKETCALL, netSetSockOpt, uintptr(unsafe.Pointer(&args)), 0)\n\tif err != 0 {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc recvfrom(s int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (int, error) {\n\tvar base uintptr\n\tif len(p) > 0 {\n\t\tbase = uintptr(unsafe.Pointer(&p[0]))\n\t}\n\targs := [6]uintptr{uintptr(s), base, uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))}\n\tn, _, err := Syscall(SYS_SOCKETCALL, netRecvFrom, uintptr(unsafe.Pointer(&args)), 0)\n\tif err != 0 {\n\t\treturn 0, err\n\t}\n\treturn int(n), nil\n}\n\nfunc sendto(s int, p []byte, flags int, to unsafe.Pointer, addrlen _Socklen) error {\n\tvar base uintptr\n\tif len(p) > 0 {\n\t\tbase = uintptr(unsafe.Pointer(&p[0]))\n\t}\n\targs := [6]uintptr{uintptr(s), base, uintptr(len(p)), uintptr(flags), uintptr(to), uintptr(addrlen)}\n\t_, _, err := Syscall(SYS_SOCKETCALL, netSendTo, uintptr(unsafe.Pointer(&args)), 0)\n\tif err != 0 {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (int, error) {\n\targs := [3]uintptr{uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)}\n\tn, _, err := Syscall(SYS_SOCKETCALL, netRecvMsg, uintptr(unsafe.Pointer(&args)), 0)\n\tif err != 0 {\n\t\treturn 0, err\n\t}\n\treturn int(n), nil\n}\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (int, error) {\n\targs := [3]uintptr{uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)}\n\tn, _, err := Syscall(SYS_SOCKETCALL, netSendMsg, uintptr(unsafe.Pointer(&args)), 0)\n\tif err != 0 {\n\t\treturn 0, err\n\t}\n\treturn int(n), nil\n}\n\nfunc Listen(s int, n int) error {\n\targs := [2]uintptr{uintptr(s), uintptr(n)}\n\t_, _, err := Syscall(SYS_SOCKETCALL, netListen, uintptr(unsafe.Pointer(&args)), 0)\n\tif err != 0 {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc Shutdown(s, how int) error {\n\targs := [2]uintptr{uintptr(s), uintptr(how)}\n\t_, _, err := Syscall(SYS_SOCKETCALL, netShutdown, uintptr(unsafe.Pointer(&args)), 0)\n\tif err != 0 {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n//sys\tpoll(fds *PollFd, nfds int, timeout int) (n int, err error)\n\nfunc Poll(fds []PollFd, timeout int) (n int, err error) {\n\tif len(fds) == 0 {\n\t\treturn poll(nil, 0, timeout)\n\t}\n\treturn poll(&fds[0], len(fds), timeout)\n}\n\n//sys\tkexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error)\n\nfunc KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error {\n\tcmdlineLen := len(cmdline)\n\tif cmdlineLen > 0 {\n\t\t// Account for the additional NULL byte added by\n\t\t// BytePtrFromString in kexecFileLoad. The kexec_file_load\n\t\t// syscall expects a NULL-terminated string.\n\t\tcmdlineLen++\n\t}\n\treturn kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build sparc64,linux\n\npackage unix\n\n//sys\tEpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)\n//sys\tFadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64\n//sys\tDup2(oldfd int, newfd int) (err error)\n//sys\tFchown(fd int, uid int, gid int) (err error)\n//sys\tFstat(fd int, stat *Stat_t) (err error)\n//sys\tFstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64\n//sys\tFstatfs(fd int, buf *Statfs_t) (err error)\n//sys\tFtruncate(fd int, length int64) (err error)\n//sysnb\tGetegid() (egid int)\n//sysnb\tGeteuid() (euid int)\n//sysnb\tGetgid() (gid int)\n//sysnb\tGetrlimit(resource int, rlim *Rlimit) (err error)\n//sysnb\tGetuid() (uid int)\n//sysnb\tInotifyInit() (fd int, err error)\n//sys\tLchown(path string, uid int, gid int) (err error)\n//sys\tListen(s int, n int) (err error)\n//sys\tLstat(path string, stat *Stat_t) (err error)\n//sys\tPause() (err error)\n//sys\tPread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64\n//sys\tPwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64\n//sys\tRenameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)\n//sys\tSeek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK\n//sys\tSelect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)\n//sys\tsendfile(outfd int, infd int, offset *int64, count int) (written int, err error)\n//sys\tSetfsgid(gid int) (err error)\n//sys\tSetfsuid(uid int) (err error)\n//sysnb\tSetregid(rgid int, egid int) (err error)\n//sysnb\tSetresgid(rgid int, egid int, sgid int) (err error)\n//sysnb\tSetresuid(ruid int, euid int, suid int) (err error)\n//sysnb\tSetrlimit(resource int, rlim *Rlimit) (err error)\n//sysnb\tSetreuid(ruid int, euid int) (err error)\n//sys\tShutdown(fd int, how int) (err error)\n//sys\tSplice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)\n//sys\tStat(path string, stat *Stat_t) (err error)\n//sys\tStatfs(path string, buf *Statfs_t) (err error)\n//sys\tSyncFileRange(fd int, off int64, n int64, flags int) (err error)\n//sys\tTruncate(path string, length int64) (err error)\n//sys\taccept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error)\n//sys\taccept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)\n//sys\tbind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\tconnect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sysnb\tgetgroups(n int, list *_Gid_t) (nn int, err error)\n//sysnb\tsetgroups(n int, list *_Gid_t) (err error)\n//sys\tgetsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)\n//sys\tsetsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)\n//sysnb\tsocket(domain int, typ int, proto int) (fd int, err error)\n//sysnb\tsocketpair(domain int, typ int, proto int, fd *[2]int32) (err error)\n//sysnb\tgetpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sysnb\tgetsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sys\trecvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)\n//sys\tsendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\trecvmsg(s int, msg *Msghdr, flags int) (n int, err error)\n//sys\tsendmsg(s int, msg *Msghdr, flags int) (n int, err error)\n//sys\tmmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error)\n\nfunc Ioperm(from int, num int, on int) (err error) {\n\treturn ENOSYS\n}\n\nfunc Iopl(level int) (err error) {\n\treturn ENOSYS\n}\n\n//sys\tfutimesat(dirfd int, path string, times *[2]Timeval) (err error)\n//sysnb\tGettimeofday(tv *Timeval) (err error)\n\nfunc Time(t *Time_t) (tt Time_t, err error) {\n\tvar tv Timeval\n\terr = Gettimeofday(&tv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tif t != nil {\n\t\t*t = Time_t(tv.Sec)\n\t}\n\treturn Time_t(tv.Sec), nil\n}\n\n//sys\tUtime(path string, buf *Utimbuf) (err error)\n//sys\tutimes(path string, times *[2]Timeval) (err error)\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: int32(usec)}\n}\n\nfunc (r *PtraceRegs) PC() uint64 { return r.Tpc }\n\nfunc (r *PtraceRegs) SetPC(pc uint64) { r.Tpc = pc }\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint64(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint64(length)\n}\n\n//sysnb pipe(p *[2]_C_int) (err error)\n\nfunc Pipe(p []int) (err error) {\n\tif len(p) != 2 {\n\t\treturn EINVAL\n\t}\n\tvar pp [2]_C_int\n\terr = pipe(&pp)\n\tp[0] = int(pp[0])\n\tp[1] = int(pp[1])\n\treturn\n}\n\n//sysnb pipe2(p *[2]_C_int, flags int) (err error)\n\nfunc Pipe2(p []int, flags int) (err error) {\n\tif len(p) != 2 {\n\t\treturn EINVAL\n\t}\n\tvar pp [2]_C_int\n\terr = pipe2(&pp, flags)\n\tp[0] = int(pp[0])\n\tp[1] = int(pp[1])\n\treturn\n}\n\n//sys\tpoll(fds *PollFd, nfds int, timeout int) (n int, err error)\n\nfunc Poll(fds []PollFd, timeout int) (n int, err error) {\n\tif len(fds) == 0 {\n\t\treturn poll(nil, 0, timeout)\n\t}\n\treturn poll(&fds[0], len(fds), timeout)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_netbsd.go",
    "content": "// Copyright 2009,2010 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// NetBSD system calls.\n// This file is compiled as ordinary Go code,\n// but it is also input to mksyscall,\n// which parses the //sys lines and generates system call stubs.\n// Note that sometimes we use a lowercase //sys name and wrap\n// it in our own nicer implementation, either here or in\n// syscall_bsd.go or syscall_unix.go.\n\npackage unix\n\nimport (\n\t\"runtime\"\n\t\"syscall\"\n\t\"unsafe\"\n)\n\n// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets.\ntype SockaddrDatalink struct {\n\tLen    uint8\n\tFamily uint8\n\tIndex  uint16\n\tType   uint8\n\tNlen   uint8\n\tAlen   uint8\n\tSlen   uint8\n\tData   [12]int8\n\traw    RawSockaddrDatalink\n}\n\nfunc Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)\n\nfunc sysctlNodes(mib []_C_int) (nodes []Sysctlnode, err error) {\n\tvar olen uintptr\n\n\t// Get a list of all sysctl nodes below the given MIB by performing\n\t// a sysctl for the given MIB with CTL_QUERY appended.\n\tmib = append(mib, CTL_QUERY)\n\tqnode := Sysctlnode{Flags: SYSCTL_VERS_1}\n\tqp := (*byte)(unsafe.Pointer(&qnode))\n\tsz := unsafe.Sizeof(qnode)\n\tif err = sysctl(mib, nil, &olen, qp, sz); err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Now that we know the size, get the actual nodes.\n\tnodes = make([]Sysctlnode, olen/sz)\n\tnp := (*byte)(unsafe.Pointer(&nodes[0]))\n\tif err = sysctl(mib, np, &olen, qp, sz); err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn nodes, nil\n}\n\nfunc nametomib(name string) (mib []_C_int, err error) {\n\t// Split name into components.\n\tvar parts []string\n\tlast := 0\n\tfor i := 0; i < len(name); i++ {\n\t\tif name[i] == '.' {\n\t\t\tparts = append(parts, name[last:i])\n\t\t\tlast = i + 1\n\t\t}\n\t}\n\tparts = append(parts, name[last:])\n\n\t// Discover the nodes and construct the MIB OID.\n\tfor partno, part := range parts {\n\t\tnodes, err := sysctlNodes(mib)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tfor _, node := range nodes {\n\t\t\tn := make([]byte, 0)\n\t\t\tfor i := range node.Name {\n\t\t\t\tif node.Name[i] != 0 {\n\t\t\t\t\tn = append(n, byte(node.Name[i]))\n\t\t\t\t}\n\t\t\t}\n\t\t\tif string(n) == part {\n\t\t\t\tmib = append(mib, _C_int(node.Num))\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif len(mib) != partno+1 {\n\t\t\treturn nil, EINVAL\n\t\t}\n\t}\n\n\treturn mib, nil\n}\n\nfunc SysctlClockinfo(name string) (*Clockinfo, error) {\n\tmib, err := sysctlmib(name)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tn := uintptr(SizeofClockinfo)\n\tvar ci Clockinfo\n\tif err := sysctl(mib, (*byte)(unsafe.Pointer(&ci)), &n, nil, 0); err != nil {\n\t\treturn nil, err\n\t}\n\tif n != SizeofClockinfo {\n\t\treturn nil, EIO\n\t}\n\treturn &ci, nil\n}\n\n//sysnb pipe() (fd1 int, fd2 int, err error)\nfunc Pipe(p []int) (err error) {\n\tif len(p) != 2 {\n\t\treturn EINVAL\n\t}\n\tp[0], p[1], err = pipe()\n\treturn\n}\n\n//sys getdents(fd int, buf []byte) (n int, err error)\nfunc Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {\n\treturn getdents(fd, buf)\n}\n\nconst ImplementsGetwd = true\n\n//sys\tGetcwd(buf []byte) (n int, err error) = SYS___GETCWD\n\nfunc Getwd() (string, error) {\n\tvar buf [PathMax]byte\n\t_, err := Getcwd(buf[0:])\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tn := clen(buf[:])\n\tif n < 1 {\n\t\treturn \"\", EINVAL\n\t}\n\treturn string(buf[:n]), nil\n}\n\n// TODO\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\treturn -1, ENOSYS\n}\n\nfunc setattrlistTimes(path string, times []Timespec, flags int) error {\n\t// used on Darwin for UtimesNano\n\treturn ENOSYS\n}\n\n//sys\tioctl(fd int, req uint, arg uintptr) (err error)\n\n// ioctl itself should not be exposed directly, but additional get/set\n// functions for specific types are permissible.\n\n// IoctlSetInt performs an ioctl operation which sets an integer value\n// on fd, using the specified request number.\nfunc IoctlSetInt(fd int, req uint, value int) error {\n\treturn ioctl(fd, req, uintptr(value))\n}\n\nfunc ioctlSetWinsize(fd int, req uint, value *Winsize) error {\n\treturn ioctl(fd, req, uintptr(unsafe.Pointer(value)))\n}\n\nfunc ioctlSetTermios(fd int, req uint, value *Termios) error {\n\treturn ioctl(fd, req, uintptr(unsafe.Pointer(value)))\n}\n\n// IoctlGetInt performs an ioctl operation which gets an integer value\n// from fd, using the specified request number.\nfunc IoctlGetInt(fd int, req uint) (int, error) {\n\tvar value int\n\terr := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))\n\treturn value, err\n}\n\nfunc IoctlGetWinsize(fd int, req uint) (*Winsize, error) {\n\tvar value Winsize\n\terr := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))\n\treturn &value, err\n}\n\nfunc IoctlGetTermios(fd int, req uint) (*Termios, error) {\n\tvar value Termios\n\terr := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))\n\treturn &value, err\n}\n\nfunc IoctlGetPtmget(fd int, req uint) (*Ptmget, error) {\n\tvar value Ptmget\n\terr := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))\n\truntime.KeepAlive(value)\n\treturn &value, err\n}\n\nfunc Uname(uname *Utsname) error {\n\tmib := []_C_int{CTL_KERN, KERN_OSTYPE}\n\tn := unsafe.Sizeof(uname.Sysname)\n\tif err := sysctl(mib, &uname.Sysname[0], &n, nil, 0); err != nil {\n\t\treturn err\n\t}\n\n\tmib = []_C_int{CTL_KERN, KERN_HOSTNAME}\n\tn = unsafe.Sizeof(uname.Nodename)\n\tif err := sysctl(mib, &uname.Nodename[0], &n, nil, 0); err != nil {\n\t\treturn err\n\t}\n\n\tmib = []_C_int{CTL_KERN, KERN_OSRELEASE}\n\tn = unsafe.Sizeof(uname.Release)\n\tif err := sysctl(mib, &uname.Release[0], &n, nil, 0); err != nil {\n\t\treturn err\n\t}\n\n\tmib = []_C_int{CTL_KERN, KERN_VERSION}\n\tn = unsafe.Sizeof(uname.Version)\n\tif err := sysctl(mib, &uname.Version[0], &n, nil, 0); err != nil {\n\t\treturn err\n\t}\n\n\t// The version might have newlines or tabs in it, convert them to\n\t// spaces.\n\tfor i, b := range uname.Version {\n\t\tif b == '\\n' || b == '\\t' {\n\t\t\tif i == len(uname.Version)-1 {\n\t\t\t\tuname.Version[i] = 0\n\t\t\t} else {\n\t\t\t\tuname.Version[i] = ' '\n\t\t\t}\n\t\t}\n\t}\n\n\tmib = []_C_int{CTL_HW, HW_MACHINE}\n\tn = unsafe.Sizeof(uname.Machine)\n\tif err := sysctl(mib, &uname.Machine[0], &n, nil, 0); err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\nfunc Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tif raceenabled {\n\t\traceReleaseMerge(unsafe.Pointer(&ioSync))\n\t}\n\treturn sendfile(outfd, infd, offset, count)\n}\n\n/*\n * Exposed directly\n */\n//sys\tAccess(path string, mode uint32) (err error)\n//sys\tAdjtime(delta *Timeval, olddelta *Timeval) (err error)\n//sys\tChdir(path string) (err error)\n//sys\tChflags(path string, flags int) (err error)\n//sys\tChmod(path string, mode uint32) (err error)\n//sys\tChown(path string, uid int, gid int) (err error)\n//sys\tChroot(path string) (err error)\n//sys\tClose(fd int) (err error)\n//sys\tDup(fd int) (nfd int, err error)\n//sys\tDup2(from int, to int) (err error)\n//sys\tExit(code int)\n//sys\tExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)\n//sys\tExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)\n//sys\tExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error)\n//sys\tExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error)\n//sys\tExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)\n//sys\tExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)\n//sys\tExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error)\n//sys\tExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error)\n//sys\tExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)\n//sys\tExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)\n//sys\tExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error)\n//sys\tExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error)\n//sys\tFaccessat(dirfd int, path string, mode uint32, flags int) (err error)\n//sys\tFadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_POSIX_FADVISE\n//sys\tFchdir(fd int) (err error)\n//sys\tFchflags(fd int, flags int) (err error)\n//sys\tFchmod(fd int, mode uint32) (err error)\n//sys\tFchmodat(dirfd int, path string, mode uint32, flags int) (err error)\n//sys\tFchown(fd int, uid int, gid int) (err error)\n//sys\tFchownat(dirfd int, path string, uid int, gid int, flags int) (err error)\n//sys\tFlock(fd int, how int) (err error)\n//sys\tFpathconf(fd int, name int) (val int, err error)\n//sys\tFstat(fd int, stat *Stat_t) (err error)\n//sys\tFstatat(fd int, path string, stat *Stat_t, flags int) (err error)\n//sys\tFsync(fd int) (err error)\n//sys\tFtruncate(fd int, length int64) (err error)\n//sysnb\tGetegid() (egid int)\n//sysnb\tGeteuid() (uid int)\n//sysnb\tGetgid() (gid int)\n//sysnb\tGetpgid(pid int) (pgid int, err error)\n//sysnb\tGetpgrp() (pgrp int)\n//sysnb\tGetpid() (pid int)\n//sysnb\tGetppid() (ppid int)\n//sys\tGetpriority(which int, who int) (prio int, err error)\n//sysnb\tGetrlimit(which int, lim *Rlimit) (err error)\n//sysnb\tGetrusage(who int, rusage *Rusage) (err error)\n//sysnb\tGetsid(pid int) (sid int, err error)\n//sysnb\tGettimeofday(tv *Timeval) (err error)\n//sysnb\tGetuid() (uid int)\n//sys\tIssetugid() (tainted bool)\n//sys\tKill(pid int, signum syscall.Signal) (err error)\n//sys\tKqueue() (fd int, err error)\n//sys\tLchown(path string, uid int, gid int) (err error)\n//sys\tLink(path string, link string) (err error)\n//sys\tLinkat(pathfd int, path string, linkfd int, link string, flags int) (err error)\n//sys\tListen(s int, backlog int) (err error)\n//sys\tLstat(path string, stat *Stat_t) (err error)\n//sys\tMkdir(path string, mode uint32) (err error)\n//sys\tMkdirat(dirfd int, path string, mode uint32) (err error)\n//sys\tMkfifo(path string, mode uint32) (err error)\n//sys\tMkfifoat(dirfd int, path string, mode uint32) (err error)\n//sys\tMknod(path string, mode uint32, dev int) (err error)\n//sys\tMknodat(dirfd int, path string, mode uint32, dev int) (err error)\n//sys\tNanosleep(time *Timespec, leftover *Timespec) (err error)\n//sys\tOpen(path string, mode int, perm uint32) (fd int, err error)\n//sys\tOpenat(dirfd int, path string, mode int, perm uint32) (fd int, err error)\n//sys\tPathconf(path string, name int) (val int, err error)\n//sys\tPread(fd int, p []byte, offset int64) (n int, err error)\n//sys\tPwrite(fd int, p []byte, offset int64) (n int, err error)\n//sys\tread(fd int, p []byte) (n int, err error)\n//sys\tReadlink(path string, buf []byte) (n int, err error)\n//sys\tReadlinkat(dirfd int, path string, buf []byte) (n int, err error)\n//sys\tRename(from string, to string) (err error)\n//sys\tRenameat(fromfd int, from string, tofd int, to string) (err error)\n//sys\tRevoke(path string) (err error)\n//sys\tRmdir(path string) (err error)\n//sys\tSeek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK\n//sys\tSelect(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error)\n//sysnb\tSetegid(egid int) (err error)\n//sysnb\tSeteuid(euid int) (err error)\n//sysnb\tSetgid(gid int) (err error)\n//sysnb\tSetpgid(pid int, pgid int) (err error)\n//sys\tSetpriority(which int, who int, prio int) (err error)\n//sysnb\tSetregid(rgid int, egid int) (err error)\n//sysnb\tSetreuid(ruid int, euid int) (err error)\n//sysnb\tSetrlimit(which int, lim *Rlimit) (err error)\n//sysnb\tSetsid() (pid int, err error)\n//sysnb\tSettimeofday(tp *Timeval) (err error)\n//sysnb\tSetuid(uid int) (err error)\n//sys\tStat(path string, stat *Stat_t) (err error)\n//sys\tSymlink(path string, link string) (err error)\n//sys\tSymlinkat(oldpath string, newdirfd int, newpath string) (err error)\n//sys\tSync() (err error)\n//sys\tTruncate(path string, length int64) (err error)\n//sys\tUmask(newmask int) (oldmask int)\n//sys\tUnlink(path string) (err error)\n//sys\tUnlinkat(dirfd int, path string, flags int) (err error)\n//sys\tUnmount(path string, flags int) (err error)\n//sys\twrite(fd int, p []byte) (n int, err error)\n//sys\tmmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error)\n//sys\tmunmap(addr uintptr, length uintptr) (err error)\n//sys\treadlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ\n//sys\twritelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE\n//sys\tutimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error)\n\n/*\n * Unimplemented\n */\n// ____semctl13\n// __clone\n// __fhopen40\n// __fhstat40\n// __fhstatvfs140\n// __fstat30\n// __getcwd\n// __getfh30\n// __getlogin\n// __lstat30\n// __mount50\n// __msgctl13\n// __msync13\n// __ntp_gettime30\n// __posix_chown\n// __posix_fchown\n// __posix_lchown\n// __posix_rename\n// __setlogin\n// __shmctl13\n// __sigaction_sigtramp\n// __sigaltstack14\n// __sigpending14\n// __sigprocmask14\n// __sigsuspend14\n// __sigtimedwait\n// __stat30\n// __syscall\n// __vfork14\n// _ksem_close\n// _ksem_destroy\n// _ksem_getvalue\n// _ksem_init\n// _ksem_open\n// _ksem_post\n// _ksem_trywait\n// _ksem_unlink\n// _ksem_wait\n// _lwp_continue\n// _lwp_create\n// _lwp_ctl\n// _lwp_detach\n// _lwp_exit\n// _lwp_getname\n// _lwp_getprivate\n// _lwp_kill\n// _lwp_park\n// _lwp_self\n// _lwp_setname\n// _lwp_setprivate\n// _lwp_suspend\n// _lwp_unpark\n// _lwp_unpark_all\n// _lwp_wait\n// _lwp_wakeup\n// _pset_bind\n// _sched_getaffinity\n// _sched_getparam\n// _sched_setaffinity\n// _sched_setparam\n// acct\n// aio_cancel\n// aio_error\n// aio_fsync\n// aio_read\n// aio_return\n// aio_suspend\n// aio_write\n// break\n// clock_getres\n// clock_gettime\n// clock_settime\n// compat_09_ogetdomainname\n// compat_09_osetdomainname\n// compat_09_ouname\n// compat_10_omsgsys\n// compat_10_osemsys\n// compat_10_oshmsys\n// compat_12_fstat12\n// compat_12_getdirentries\n// compat_12_lstat12\n// compat_12_msync\n// compat_12_oreboot\n// compat_12_oswapon\n// compat_12_stat12\n// compat_13_sigaction13\n// compat_13_sigaltstack13\n// compat_13_sigpending13\n// compat_13_sigprocmask13\n// compat_13_sigreturn13\n// compat_13_sigsuspend13\n// compat_14___semctl\n// compat_14_msgctl\n// compat_14_shmctl\n// compat_16___sigaction14\n// compat_16___sigreturn14\n// compat_20_fhstatfs\n// compat_20_fstatfs\n// compat_20_getfsstat\n// compat_20_statfs\n// compat_30___fhstat30\n// compat_30___fstat13\n// compat_30___lstat13\n// compat_30___stat13\n// compat_30_fhopen\n// compat_30_fhstat\n// compat_30_fhstatvfs1\n// compat_30_getdents\n// compat_30_getfh\n// compat_30_ntp_gettime\n// compat_30_socket\n// compat_40_mount\n// compat_43_fstat43\n// compat_43_lstat43\n// compat_43_oaccept\n// compat_43_ocreat\n// compat_43_oftruncate\n// compat_43_ogetdirentries\n// compat_43_ogetdtablesize\n// compat_43_ogethostid\n// compat_43_ogethostname\n// compat_43_ogetkerninfo\n// compat_43_ogetpagesize\n// compat_43_ogetpeername\n// compat_43_ogetrlimit\n// compat_43_ogetsockname\n// compat_43_okillpg\n// compat_43_olseek\n// compat_43_ommap\n// compat_43_oquota\n// compat_43_orecv\n// compat_43_orecvfrom\n// compat_43_orecvmsg\n// compat_43_osend\n// compat_43_osendmsg\n// compat_43_osethostid\n// compat_43_osethostname\n// compat_43_osetrlimit\n// compat_43_osigblock\n// compat_43_osigsetmask\n// compat_43_osigstack\n// compat_43_osigvec\n// compat_43_otruncate\n// compat_43_owait\n// compat_43_stat43\n// execve\n// extattr_delete_fd\n// extattr_delete_file\n// extattr_delete_link\n// extattr_get_fd\n// extattr_get_file\n// extattr_get_link\n// extattr_list_fd\n// extattr_list_file\n// extattr_list_link\n// extattr_set_fd\n// extattr_set_file\n// extattr_set_link\n// extattrctl\n// fchroot\n// fdatasync\n// fgetxattr\n// fktrace\n// flistxattr\n// fork\n// fremovexattr\n// fsetxattr\n// fstatvfs1\n// fsync_range\n// getcontext\n// getitimer\n// getvfsstat\n// getxattr\n// ktrace\n// lchflags\n// lchmod\n// lfs_bmapv\n// lfs_markv\n// lfs_segclean\n// lfs_segwait\n// lgetxattr\n// lio_listio\n// listxattr\n// llistxattr\n// lremovexattr\n// lseek\n// lsetxattr\n// lutimes\n// madvise\n// mincore\n// minherit\n// modctl\n// mq_close\n// mq_getattr\n// mq_notify\n// mq_open\n// mq_receive\n// mq_send\n// mq_setattr\n// mq_timedreceive\n// mq_timedsend\n// mq_unlink\n// mremap\n// msgget\n// msgrcv\n// msgsnd\n// nfssvc\n// ntp_adjtime\n// pmc_control\n// pmc_get_info\n// pollts\n// preadv\n// profil\n// pselect\n// pset_assign\n// pset_create\n// pset_destroy\n// ptrace\n// pwritev\n// quotactl\n// rasctl\n// readv\n// reboot\n// removexattr\n// sa_enable\n// sa_preempt\n// sa_register\n// sa_setconcurrency\n// sa_stacks\n// sa_yield\n// sbrk\n// sched_yield\n// semconfig\n// semget\n// semop\n// setcontext\n// setitimer\n// setxattr\n// shmat\n// shmdt\n// shmget\n// sstk\n// statvfs1\n// swapctl\n// sysarch\n// syscall\n// timer_create\n// timer_delete\n// timer_getoverrun\n// timer_gettime\n// timer_settime\n// undelete\n// utrace\n// uuidgen\n// vadvise\n// vfork\n// writev\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_netbsd_386.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build 386,netbsd\n\npackage unix\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: int32(nsec)}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: int32(usec)}\n}\n\nfunc SetKevent(k *Kevent_t, fd, mode, flags int) {\n\tk.Ident = uint32(fd)\n\tk.Filter = uint32(mode)\n\tk.Flags = uint32(flags)\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_netbsd_amd64.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build amd64,netbsd\n\npackage unix\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: int32(usec)}\n}\n\nfunc SetKevent(k *Kevent_t, fd, mode, flags int) {\n\tk.Ident = uint64(fd)\n\tk.Filter = uint32(mode)\n\tk.Flags = uint32(flags)\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_netbsd_arm.go",
    "content": "// Copyright 2013 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build arm,netbsd\n\npackage unix\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: int32(nsec)}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: int32(usec)}\n}\n\nfunc SetKevent(k *Kevent_t, fd, mode, flags int) {\n\tk.Ident = uint32(fd)\n\tk.Filter = uint32(mode)\n\tk.Flags = uint32(flags)\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_netbsd_arm64.go",
    "content": "// Copyright 2019 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build arm64,netbsd\n\npackage unix\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: int32(usec)}\n}\n\nfunc SetKevent(k *Kevent_t, fd, mode, flags int) {\n\tk.Ident = uint64(fd)\n\tk.Filter = uint32(mode)\n\tk.Flags = uint32(flags)\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_openbsd.go",
    "content": "// Copyright 2009,2010 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// OpenBSD system calls.\n// This file is compiled as ordinary Go code,\n// but it is also input to mksyscall,\n// which parses the //sys lines and generates system call stubs.\n// Note that sometimes we use a lowercase //sys name and wrap\n// it in our own nicer implementation, either here or in\n// syscall_bsd.go or syscall_unix.go.\n\npackage unix\n\nimport (\n\t\"sort\"\n\t\"syscall\"\n\t\"unsafe\"\n)\n\n// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets.\ntype SockaddrDatalink struct {\n\tLen    uint8\n\tFamily uint8\n\tIndex  uint16\n\tType   uint8\n\tNlen   uint8\n\tAlen   uint8\n\tSlen   uint8\n\tData   [24]int8\n\traw    RawSockaddrDatalink\n}\n\nfunc Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)\n\nfunc nametomib(name string) (mib []_C_int, err error) {\n\ti := sort.Search(len(sysctlMib), func(i int) bool {\n\t\treturn sysctlMib[i].ctlname >= name\n\t})\n\tif i < len(sysctlMib) && sysctlMib[i].ctlname == name {\n\t\treturn sysctlMib[i].ctloid, nil\n\t}\n\treturn nil, EINVAL\n}\n\nfunc SysctlClockinfo(name string) (*Clockinfo, error) {\n\tmib, err := sysctlmib(name)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tn := uintptr(SizeofClockinfo)\n\tvar ci Clockinfo\n\tif err := sysctl(mib, (*byte)(unsafe.Pointer(&ci)), &n, nil, 0); err != nil {\n\t\treturn nil, err\n\t}\n\tif n != SizeofClockinfo {\n\t\treturn nil, EIO\n\t}\n\treturn &ci, nil\n}\n\nfunc SysctlUvmexp(name string) (*Uvmexp, error) {\n\tmib, err := sysctlmib(name)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tn := uintptr(SizeofUvmexp)\n\tvar u Uvmexp\n\tif err := sysctl(mib, (*byte)(unsafe.Pointer(&u)), &n, nil, 0); err != nil {\n\t\treturn nil, err\n\t}\n\tif n != SizeofUvmexp {\n\t\treturn nil, EIO\n\t}\n\treturn &u, nil\n}\n\n//sysnb pipe(p *[2]_C_int) (err error)\nfunc Pipe(p []int) (err error) {\n\tif len(p) != 2 {\n\t\treturn EINVAL\n\t}\n\tvar pp [2]_C_int\n\terr = pipe(&pp)\n\tp[0] = int(pp[0])\n\tp[1] = int(pp[1])\n\treturn\n}\n\n//sys getdents(fd int, buf []byte) (n int, err error)\nfunc Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {\n\treturn getdents(fd, buf)\n}\n\nconst ImplementsGetwd = true\n\n//sys\tGetcwd(buf []byte) (n int, err error) = SYS___GETCWD\n\nfunc Getwd() (string, error) {\n\tvar buf [PathMax]byte\n\t_, err := Getcwd(buf[0:])\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tn := clen(buf[:])\n\tif n < 1 {\n\t\treturn \"\", EINVAL\n\t}\n\treturn string(buf[:n]), nil\n}\n\nfunc Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tif raceenabled {\n\t\traceReleaseMerge(unsafe.Pointer(&ioSync))\n\t}\n\treturn sendfile(outfd, infd, offset, count)\n}\n\n// TODO\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\treturn -1, ENOSYS\n}\n\nfunc Getfsstat(buf []Statfs_t, flags int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tvar bufsize uintptr\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t\tbufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf))\n\t}\n\tr0, _, e1 := Syscall(SYS_GETFSSTAT, uintptr(_p0), bufsize, uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\nfunc setattrlistTimes(path string, times []Timespec, flags int) error {\n\t// used on Darwin for UtimesNano\n\treturn ENOSYS\n}\n\n//sys\tioctl(fd int, req uint, arg uintptr) (err error)\n\n// ioctl itself should not be exposed directly, but additional get/set\n// functions for specific types are permissible.\n\n// IoctlSetInt performs an ioctl operation which sets an integer value\n// on fd, using the specified request number.\nfunc IoctlSetInt(fd int, req uint, value int) error {\n\treturn ioctl(fd, req, uintptr(value))\n}\n\nfunc ioctlSetWinsize(fd int, req uint, value *Winsize) error {\n\treturn ioctl(fd, req, uintptr(unsafe.Pointer(value)))\n}\n\nfunc ioctlSetTermios(fd int, req uint, value *Termios) error {\n\treturn ioctl(fd, req, uintptr(unsafe.Pointer(value)))\n}\n\n// IoctlGetInt performs an ioctl operation which gets an integer value\n// from fd, using the specified request number.\nfunc IoctlGetInt(fd int, req uint) (int, error) {\n\tvar value int\n\terr := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))\n\treturn value, err\n}\n\nfunc IoctlGetWinsize(fd int, req uint) (*Winsize, error) {\n\tvar value Winsize\n\terr := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))\n\treturn &value, err\n}\n\nfunc IoctlGetTermios(fd int, req uint) (*Termios, error) {\n\tvar value Termios\n\terr := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))\n\treturn &value, err\n}\n\n//sys\tppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error)\n\nfunc Ppoll(fds []PollFd, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n\tif len(fds) == 0 {\n\t\treturn ppoll(nil, 0, timeout, sigmask)\n\t}\n\treturn ppoll(&fds[0], len(fds), timeout, sigmask)\n}\n\nfunc Uname(uname *Utsname) error {\n\tmib := []_C_int{CTL_KERN, KERN_OSTYPE}\n\tn := unsafe.Sizeof(uname.Sysname)\n\tif err := sysctl(mib, &uname.Sysname[0], &n, nil, 0); err != nil {\n\t\treturn err\n\t}\n\n\tmib = []_C_int{CTL_KERN, KERN_HOSTNAME}\n\tn = unsafe.Sizeof(uname.Nodename)\n\tif err := sysctl(mib, &uname.Nodename[0], &n, nil, 0); err != nil {\n\t\treturn err\n\t}\n\n\tmib = []_C_int{CTL_KERN, KERN_OSRELEASE}\n\tn = unsafe.Sizeof(uname.Release)\n\tif err := sysctl(mib, &uname.Release[0], &n, nil, 0); err != nil {\n\t\treturn err\n\t}\n\n\tmib = []_C_int{CTL_KERN, KERN_VERSION}\n\tn = unsafe.Sizeof(uname.Version)\n\tif err := sysctl(mib, &uname.Version[0], &n, nil, 0); err != nil {\n\t\treturn err\n\t}\n\n\t// The version might have newlines or tabs in it, convert them to\n\t// spaces.\n\tfor i, b := range uname.Version {\n\t\tif b == '\\n' || b == '\\t' {\n\t\t\tif i == len(uname.Version)-1 {\n\t\t\t\tuname.Version[i] = 0\n\t\t\t} else {\n\t\t\t\tuname.Version[i] = ' '\n\t\t\t}\n\t\t}\n\t}\n\n\tmib = []_C_int{CTL_HW, HW_MACHINE}\n\tn = unsafe.Sizeof(uname.Machine)\n\tif err := sysctl(mib, &uname.Machine[0], &n, nil, 0); err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\n/*\n * Exposed directly\n */\n//sys\tAccess(path string, mode uint32) (err error)\n//sys\tAdjtime(delta *Timeval, olddelta *Timeval) (err error)\n//sys\tChdir(path string) (err error)\n//sys\tChflags(path string, flags int) (err error)\n//sys\tChmod(path string, mode uint32) (err error)\n//sys\tChown(path string, uid int, gid int) (err error)\n//sys\tChroot(path string) (err error)\n//sys\tClose(fd int) (err error)\n//sys\tDup(fd int) (nfd int, err error)\n//sys\tDup2(from int, to int) (err error)\n//sys\tExit(code int)\n//sys\tFaccessat(dirfd int, path string, mode uint32, flags int) (err error)\n//sys\tFchdir(fd int) (err error)\n//sys\tFchflags(fd int, flags int) (err error)\n//sys\tFchmod(fd int, mode uint32) (err error)\n//sys\tFchmodat(dirfd int, path string, mode uint32, flags int) (err error)\n//sys\tFchown(fd int, uid int, gid int) (err error)\n//sys\tFchownat(dirfd int, path string, uid int, gid int, flags int) (err error)\n//sys\tFlock(fd int, how int) (err error)\n//sys\tFpathconf(fd int, name int) (val int, err error)\n//sys\tFstat(fd int, stat *Stat_t) (err error)\n//sys\tFstatat(fd int, path string, stat *Stat_t, flags int) (err error)\n//sys\tFstatfs(fd int, stat *Statfs_t) (err error)\n//sys\tFsync(fd int) (err error)\n//sys\tFtruncate(fd int, length int64) (err error)\n//sysnb\tGetegid() (egid int)\n//sysnb\tGeteuid() (uid int)\n//sysnb\tGetgid() (gid int)\n//sysnb\tGetpgid(pid int) (pgid int, err error)\n//sysnb\tGetpgrp() (pgrp int)\n//sysnb\tGetpid() (pid int)\n//sysnb\tGetppid() (ppid int)\n//sys\tGetpriority(which int, who int) (prio int, err error)\n//sysnb\tGetrlimit(which int, lim *Rlimit) (err error)\n//sysnb\tGetrtable() (rtable int, err error)\n//sysnb\tGetrusage(who int, rusage *Rusage) (err error)\n//sysnb\tGetsid(pid int) (sid int, err error)\n//sysnb\tGettimeofday(tv *Timeval) (err error)\n//sysnb\tGetuid() (uid int)\n//sys\tIssetugid() (tainted bool)\n//sys\tKill(pid int, signum syscall.Signal) (err error)\n//sys\tKqueue() (fd int, err error)\n//sys\tLchown(path string, uid int, gid int) (err error)\n//sys\tLink(path string, link string) (err error)\n//sys\tLinkat(pathfd int, path string, linkfd int, link string, flags int) (err error)\n//sys\tListen(s int, backlog int) (err error)\n//sys\tLstat(path string, stat *Stat_t) (err error)\n//sys\tMkdir(path string, mode uint32) (err error)\n//sys\tMkdirat(dirfd int, path string, mode uint32) (err error)\n//sys\tMkfifo(path string, mode uint32) (err error)\n//sys\tMkfifoat(dirfd int, path string, mode uint32) (err error)\n//sys\tMknod(path string, mode uint32, dev int) (err error)\n//sys\tMknodat(dirfd int, path string, mode uint32, dev int) (err error)\n//sys\tNanosleep(time *Timespec, leftover *Timespec) (err error)\n//sys\tOpen(path string, mode int, perm uint32) (fd int, err error)\n//sys\tOpenat(dirfd int, path string, mode int, perm uint32) (fd int, err error)\n//sys\tPathconf(path string, name int) (val int, err error)\n//sys\tPread(fd int, p []byte, offset int64) (n int, err error)\n//sys\tPwrite(fd int, p []byte, offset int64) (n int, err error)\n//sys\tread(fd int, p []byte) (n int, err error)\n//sys\tReadlink(path string, buf []byte) (n int, err error)\n//sys\tReadlinkat(dirfd int, path string, buf []byte) (n int, err error)\n//sys\tRename(from string, to string) (err error)\n//sys\tRenameat(fromfd int, from string, tofd int, to string) (err error)\n//sys\tRevoke(path string) (err error)\n//sys\tRmdir(path string) (err error)\n//sys\tSeek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK\n//sys\tSelect(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error)\n//sysnb\tSetegid(egid int) (err error)\n//sysnb\tSeteuid(euid int) (err error)\n//sysnb\tSetgid(gid int) (err error)\n//sys\tSetlogin(name string) (err error)\n//sysnb\tSetpgid(pid int, pgid int) (err error)\n//sys\tSetpriority(which int, who int, prio int) (err error)\n//sysnb\tSetregid(rgid int, egid int) (err error)\n//sysnb\tSetreuid(ruid int, euid int) (err error)\n//sysnb\tSetresgid(rgid int, egid int, sgid int) (err error)\n//sysnb\tSetresuid(ruid int, euid int, suid int) (err error)\n//sysnb\tSetrlimit(which int, lim *Rlimit) (err error)\n//sysnb\tSetrtable(rtable int) (err error)\n//sysnb\tSetsid() (pid int, err error)\n//sysnb\tSettimeofday(tp *Timeval) (err error)\n//sysnb\tSetuid(uid int) (err error)\n//sys\tStat(path string, stat *Stat_t) (err error)\n//sys\tStatfs(path string, stat *Statfs_t) (err error)\n//sys\tSymlink(path string, link string) (err error)\n//sys\tSymlinkat(oldpath string, newdirfd int, newpath string) (err error)\n//sys\tSync() (err error)\n//sys\tTruncate(path string, length int64) (err error)\n//sys\tUmask(newmask int) (oldmask int)\n//sys\tUnlink(path string) (err error)\n//sys\tUnlinkat(dirfd int, path string, flags int) (err error)\n//sys\tUnmount(path string, flags int) (err error)\n//sys\twrite(fd int, p []byte) (n int, err error)\n//sys\tmmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error)\n//sys\tmunmap(addr uintptr, length uintptr) (err error)\n//sys\treadlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ\n//sys\twritelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE\n//sys\tutimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error)\n\n/*\n * Unimplemented\n */\n// __getcwd\n// __semctl\n// __syscall\n// __sysctl\n// adjfreq\n// break\n// clock_getres\n// clock_gettime\n// clock_settime\n// closefrom\n// execve\n// fcntl\n// fhopen\n// fhstat\n// fhstatfs\n// fork\n// futimens\n// getfh\n// getgid\n// getitimer\n// getlogin\n// getresgid\n// getresuid\n// getthrid\n// ktrace\n// lfs_bmapv\n// lfs_markv\n// lfs_segclean\n// lfs_segwait\n// mincore\n// minherit\n// mount\n// mquery\n// msgctl\n// msgget\n// msgrcv\n// msgsnd\n// nfssvc\n// nnpfspioctl\n// preadv\n// profil\n// pwritev\n// quotactl\n// readv\n// reboot\n// renameat\n// rfork\n// sched_yield\n// semget\n// semop\n// setgroups\n// setitimer\n// setsockopt\n// shmat\n// shmctl\n// shmdt\n// shmget\n// sigaction\n// sigaltstack\n// sigpending\n// sigprocmask\n// sigreturn\n// sigsuspend\n// sysarch\n// syscall\n// threxit\n// thrsigdivert\n// thrsleep\n// thrwakeup\n// vfork\n// writev\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_openbsd_386.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build 386,openbsd\n\npackage unix\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: int32(nsec)}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: int32(usec)}\n}\n\nfunc SetKevent(k *Kevent_t, fd, mode, flags int) {\n\tk.Ident = uint32(fd)\n\tk.Filter = int16(mode)\n\tk.Flags = uint16(flags)\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n\n// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions\n// of openbsd/386 the syscall is called sysctl instead of __sysctl.\nconst SYS___SYSCTL = SYS_SYSCTL\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_openbsd_amd64.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build amd64,openbsd\n\npackage unix\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: usec}\n}\n\nfunc SetKevent(k *Kevent_t, fd, mode, flags int) {\n\tk.Ident = uint64(fd)\n\tk.Filter = int16(mode)\n\tk.Flags = uint16(flags)\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n\n// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions\n// of openbsd/amd64 the syscall is called sysctl instead of __sysctl.\nconst SYS___SYSCTL = SYS_SYSCTL\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_openbsd_arm.go",
    "content": "// Copyright 2017 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build arm,openbsd\n\npackage unix\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: int32(nsec)}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: int32(usec)}\n}\n\nfunc SetKevent(k *Kevent_t, fd, mode, flags int) {\n\tk.Ident = uint32(fd)\n\tk.Filter = int16(mode)\n\tk.Flags = uint16(flags)\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n\n// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions\n// of openbsd/arm the syscall is called sysctl instead of __sysctl.\nconst SYS___SYSCTL = SYS_SYSCTL\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_openbsd_arm64.go",
    "content": "// Copyright 2019 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build arm64,openbsd\n\npackage unix\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: usec}\n}\n\nfunc SetKevent(k *Kevent_t, fd, mode, flags int) {\n\tk.Ident = uint64(fd)\n\tk.Filter = int16(mode)\n\tk.Flags = uint16(flags)\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n\n// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions\n// of openbsd/amd64 the syscall is called sysctl instead of __sysctl.\nconst SYS___SYSCTL = SYS_SYSCTL\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_solaris.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Solaris system calls.\n// This file is compiled as ordinary Go code,\n// but it is also input to mksyscall,\n// which parses the //sys lines and generates system call stubs.\n// Note that sometimes we use a lowercase //sys name and wrap\n// it in our own nicer implementation, either here or in\n// syscall_solaris.go or syscall_unix.go.\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\n// Implemented in runtime/syscall_solaris.go.\ntype syscallFunc uintptr\n\nfunc rawSysvicall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno)\nfunc sysvicall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno)\n\n// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets.\ntype SockaddrDatalink struct {\n\tFamily uint16\n\tIndex  uint16\n\tType   uint8\n\tNlen   uint8\n\tAlen   uint8\n\tSlen   uint8\n\tData   [244]int8\n\traw    RawSockaddrDatalink\n}\n\n//sysnb\tpipe(p *[2]_C_int) (n int, err error)\n\nfunc Pipe(p []int) (err error) {\n\tif len(p) != 2 {\n\t\treturn EINVAL\n\t}\n\tvar pp [2]_C_int\n\tn, err := pipe(&pp)\n\tif n != 0 {\n\t\treturn err\n\t}\n\tp[0] = int(pp[0])\n\tp[1] = int(pp[1])\n\treturn nil\n}\n\nfunc (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tif sa.Port < 0 || sa.Port > 0xFFFF {\n\t\treturn nil, 0, EINVAL\n\t}\n\tsa.raw.Family = AF_INET\n\tp := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))\n\tp[0] = byte(sa.Port >> 8)\n\tp[1] = byte(sa.Port)\n\tfor i := 0; i < len(sa.Addr); i++ {\n\t\tsa.raw.Addr[i] = sa.Addr[i]\n\t}\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrInet4, nil\n}\n\nfunc (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tif sa.Port < 0 || sa.Port > 0xFFFF {\n\t\treturn nil, 0, EINVAL\n\t}\n\tsa.raw.Family = AF_INET6\n\tp := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))\n\tp[0] = byte(sa.Port >> 8)\n\tp[1] = byte(sa.Port)\n\tsa.raw.Scope_id = sa.ZoneId\n\tfor i := 0; i < len(sa.Addr); i++ {\n\t\tsa.raw.Addr[i] = sa.Addr[i]\n\t}\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrInet6, nil\n}\n\nfunc (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tname := sa.Name\n\tn := len(name)\n\tif n >= len(sa.raw.Path) {\n\t\treturn nil, 0, EINVAL\n\t}\n\tsa.raw.Family = AF_UNIX\n\tfor i := 0; i < n; i++ {\n\t\tsa.raw.Path[i] = int8(name[i])\n\t}\n\t// length is family (uint16), name, NUL.\n\tsl := _Socklen(2)\n\tif n > 0 {\n\t\tsl += _Socklen(n) + 1\n\t}\n\tif sa.raw.Path[0] == '@' {\n\t\tsa.raw.Path[0] = 0\n\t\t// Don't count trailing NUL for abstract address.\n\t\tsl--\n\t}\n\n\treturn unsafe.Pointer(&sa.raw), sl, nil\n}\n\n//sys\tgetsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) = libsocket.getsockname\n\nfunc Getsockname(fd int) (sa Sockaddr, err error) {\n\tvar rsa RawSockaddrAny\n\tvar len _Socklen = SizeofSockaddrAny\n\tif err = getsockname(fd, &rsa, &len); err != nil {\n\t\treturn\n\t}\n\treturn anyToSockaddr(fd, &rsa)\n}\n\n// GetsockoptString returns the string value of the socket option opt for the\n// socket associated with fd at the given socket level.\nfunc GetsockoptString(fd, level, opt int) (string, error) {\n\tbuf := make([]byte, 256)\n\tvallen := _Socklen(len(buf))\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&buf[0]), &vallen)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn string(buf[:vallen-1]), nil\n}\n\nconst ImplementsGetwd = true\n\n//sys\tGetcwd(buf []byte) (n int, err error)\n\nfunc Getwd() (wd string, err error) {\n\tvar buf [PathMax]byte\n\t// Getcwd will return an error if it failed for any reason.\n\t_, err = Getcwd(buf[0:])\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tn := clen(buf[:])\n\tif n < 1 {\n\t\treturn \"\", EINVAL\n\t}\n\treturn string(buf[:n]), nil\n}\n\n/*\n * Wrapped\n */\n\n//sysnb\tgetgroups(ngid int, gid *_Gid_t) (n int, err error)\n//sysnb\tsetgroups(ngid int, gid *_Gid_t) (err error)\n\nfunc Getgroups() (gids []int, err error) {\n\tn, err := getgroups(0, nil)\n\t// Check for error and sanity check group count. Newer versions of\n\t// Solaris allow up to 1024 (NGROUPS_MAX).\n\tif n < 0 || n > 1024 {\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn nil, EINVAL\n\t} else if n == 0 {\n\t\treturn nil, nil\n\t}\n\n\ta := make([]_Gid_t, n)\n\tn, err = getgroups(n, &a[0])\n\tif n == -1 {\n\t\treturn nil, err\n\t}\n\tgids = make([]int, n)\n\tfor i, v := range a[0:n] {\n\t\tgids[i] = int(v)\n\t}\n\treturn\n}\n\nfunc Setgroups(gids []int) (err error) {\n\tif len(gids) == 0 {\n\t\treturn setgroups(0, nil)\n\t}\n\n\ta := make([]_Gid_t, len(gids))\n\tfor i, v := range gids {\n\t\ta[i] = _Gid_t(v)\n\t}\n\treturn setgroups(len(a), &a[0])\n}\n\nfunc ReadDirent(fd int, buf []byte) (n int, err error) {\n\t// Final argument is (basep *uintptr) and the syscall doesn't take nil.\n\t// TODO(rsc): Can we use a single global basep for all calls?\n\treturn Getdents(fd, buf, new(uintptr))\n}\n\n// Wait status is 7 bits at bottom, either 0 (exited),\n// 0x7F (stopped), or a signal number that caused an exit.\n// The 0x80 bit is whether there was a core dump.\n// An extra number (exit code, signal causing a stop)\n// is in the high bits.\n\ntype WaitStatus uint32\n\nconst (\n\tmask  = 0x7F\n\tcore  = 0x80\n\tshift = 8\n\n\texited  = 0\n\tstopped = 0x7F\n)\n\nfunc (w WaitStatus) Exited() bool { return w&mask == exited }\n\nfunc (w WaitStatus) ExitStatus() int {\n\tif w&mask != exited {\n\t\treturn -1\n\t}\n\treturn int(w >> shift)\n}\n\nfunc (w WaitStatus) Signaled() bool { return w&mask != stopped && w&mask != 0 }\n\nfunc (w WaitStatus) Signal() syscall.Signal {\n\tsig := syscall.Signal(w & mask)\n\tif sig == stopped || sig == 0 {\n\t\treturn -1\n\t}\n\treturn sig\n}\n\nfunc (w WaitStatus) CoreDump() bool { return w.Signaled() && w&core != 0 }\n\nfunc (w WaitStatus) Stopped() bool { return w&mask == stopped && syscall.Signal(w>>shift) != SIGSTOP }\n\nfunc (w WaitStatus) Continued() bool { return w&mask == stopped && syscall.Signal(w>>shift) == SIGSTOP }\n\nfunc (w WaitStatus) StopSignal() syscall.Signal {\n\tif !w.Stopped() {\n\t\treturn -1\n\t}\n\treturn syscall.Signal(w>>shift) & 0xFF\n}\n\nfunc (w WaitStatus) TrapCause() int { return -1 }\n\n//sys\twait4(pid int32, statusp *_C_int, options int, rusage *Rusage) (wpid int32, err error)\n\nfunc Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (int, error) {\n\tvar status _C_int\n\trpid, err := wait4(int32(pid), &status, options, rusage)\n\twpid := int(rpid)\n\tif wpid == -1 {\n\t\treturn wpid, err\n\t}\n\tif wstatus != nil {\n\t\t*wstatus = WaitStatus(status)\n\t}\n\treturn wpid, nil\n}\n\n//sys\tgethostname(buf []byte) (n int, err error)\n\nfunc Gethostname() (name string, err error) {\n\tvar buf [MaxHostNameLen]byte\n\tn, err := gethostname(buf[:])\n\tif n != 0 {\n\t\treturn \"\", err\n\t}\n\tn = clen(buf[:])\n\tif n < 1 {\n\t\treturn \"\", EFAULT\n\t}\n\treturn string(buf[:n]), nil\n}\n\n//sys\tutimes(path string, times *[2]Timeval) (err error)\n\nfunc Utimes(path string, tv []Timeval) (err error) {\n\tif tv == nil {\n\t\treturn utimes(path, nil)\n\t}\n\tif len(tv) != 2 {\n\t\treturn EINVAL\n\t}\n\treturn utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0])))\n}\n\n//sys\tutimensat(fd int, path string, times *[2]Timespec, flag int) (err error)\n\nfunc UtimesNano(path string, ts []Timespec) error {\n\tif ts == nil {\n\t\treturn utimensat(AT_FDCWD, path, nil, 0)\n\t}\n\tif len(ts) != 2 {\n\t\treturn EINVAL\n\t}\n\treturn utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)\n}\n\nfunc UtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) error {\n\tif ts == nil {\n\t\treturn utimensat(dirfd, path, nil, flags)\n\t}\n\tif len(ts) != 2 {\n\t\treturn EINVAL\n\t}\n\treturn utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), flags)\n}\n\n//sys\tfcntl(fd int, cmd int, arg int) (val int, err error)\n\n// FcntlInt performs a fcntl syscall on fd with the provided command and argument.\nfunc FcntlInt(fd uintptr, cmd, arg int) (int, error) {\n\tvalptr, _, errno := sysvicall6(uintptr(unsafe.Pointer(&procfcntl)), 3, uintptr(fd), uintptr(cmd), uintptr(arg), 0, 0, 0)\n\tvar err error\n\tif errno != 0 {\n\t\terr = errno\n\t}\n\treturn int(valptr), err\n}\n\n// FcntlFlock performs a fcntl syscall for the F_GETLK, F_SETLK or F_SETLKW command.\nfunc FcntlFlock(fd uintptr, cmd int, lk *Flock_t) error {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procfcntl)), 3, uintptr(fd), uintptr(cmd), uintptr(unsafe.Pointer(lk)), 0, 0, 0)\n\tif e1 != 0 {\n\t\treturn e1\n\t}\n\treturn nil\n}\n\n//sys\tfutimesat(fildes int, path *byte, times *[2]Timeval) (err error)\n\nfunc Futimesat(dirfd int, path string, tv []Timeval) error {\n\tpathp, err := BytePtrFromString(path)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif tv == nil {\n\t\treturn futimesat(dirfd, pathp, nil)\n\t}\n\tif len(tv) != 2 {\n\t\treturn EINVAL\n\t}\n\treturn futimesat(dirfd, pathp, (*[2]Timeval)(unsafe.Pointer(&tv[0])))\n}\n\n// Solaris doesn't have an futimes function because it allows NULL to be\n// specified as the path for futimesat. However, Go doesn't like\n// NULL-style string interfaces, so this simple wrapper is provided.\nfunc Futimes(fd int, tv []Timeval) error {\n\tif tv == nil {\n\t\treturn futimesat(fd, nil, nil)\n\t}\n\tif len(tv) != 2 {\n\t\treturn EINVAL\n\t}\n\treturn futimesat(fd, nil, (*[2]Timeval)(unsafe.Pointer(&tv[0])))\n}\n\nfunc anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {\n\tswitch rsa.Addr.Family {\n\tcase AF_UNIX:\n\t\tpp := (*RawSockaddrUnix)(unsafe.Pointer(rsa))\n\t\tsa := new(SockaddrUnix)\n\t\t// Assume path ends at NUL.\n\t\t// This is not technically the Solaris semantics for\n\t\t// abstract Unix domain sockets -- they are supposed\n\t\t// to be uninterpreted fixed-size binary blobs -- but\n\t\t// everyone uses this convention.\n\t\tn := 0\n\t\tfor n < len(pp.Path) && pp.Path[n] != 0 {\n\t\t\tn++\n\t\t}\n\t\tbytes := (*[10000]byte)(unsafe.Pointer(&pp.Path[0]))[0:n]\n\t\tsa.Name = string(bytes)\n\t\treturn sa, nil\n\n\tcase AF_INET:\n\t\tpp := (*RawSockaddrInet4)(unsafe.Pointer(rsa))\n\t\tsa := new(SockaddrInet4)\n\t\tp := (*[2]byte)(unsafe.Pointer(&pp.Port))\n\t\tsa.Port = int(p[0])<<8 + int(p[1])\n\t\tfor i := 0; i < len(sa.Addr); i++ {\n\t\t\tsa.Addr[i] = pp.Addr[i]\n\t\t}\n\t\treturn sa, nil\n\n\tcase AF_INET6:\n\t\tpp := (*RawSockaddrInet6)(unsafe.Pointer(rsa))\n\t\tsa := new(SockaddrInet6)\n\t\tp := (*[2]byte)(unsafe.Pointer(&pp.Port))\n\t\tsa.Port = int(p[0])<<8 + int(p[1])\n\t\tsa.ZoneId = pp.Scope_id\n\t\tfor i := 0; i < len(sa.Addr); i++ {\n\t\t\tsa.Addr[i] = pp.Addr[i]\n\t\t}\n\t\treturn sa, nil\n\t}\n\treturn nil, EAFNOSUPPORT\n}\n\n//sys\taccept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) = libsocket.accept\n\nfunc Accept(fd int) (nfd int, sa Sockaddr, err error) {\n\tvar rsa RawSockaddrAny\n\tvar len _Socklen = SizeofSockaddrAny\n\tnfd, err = accept(fd, &rsa, &len)\n\tif nfd == -1 {\n\t\treturn\n\t}\n\tsa, err = anyToSockaddr(fd, &rsa)\n\tif err != nil {\n\t\tClose(nfd)\n\t\tnfd = 0\n\t}\n\treturn\n}\n\n//sys\trecvmsg(s int, msg *Msghdr, flags int) (n int, err error) = libsocket.__xnet_recvmsg\n\nfunc Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) {\n\tvar msg Msghdr\n\tvar rsa RawSockaddrAny\n\tmsg.Name = (*byte)(unsafe.Pointer(&rsa))\n\tmsg.Namelen = uint32(SizeofSockaddrAny)\n\tvar iov Iovec\n\tif len(p) > 0 {\n\t\tiov.Base = (*int8)(unsafe.Pointer(&p[0]))\n\t\tiov.SetLen(len(p))\n\t}\n\tvar dummy int8\n\tif len(oob) > 0 {\n\t\t// receive at least one normal byte\n\t\tif len(p) == 0 {\n\t\t\tiov.Base = &dummy\n\t\t\tiov.SetLen(1)\n\t\t}\n\t\tmsg.Accrightslen = int32(len(oob))\n\t}\n\tmsg.Iov = &iov\n\tmsg.Iovlen = 1\n\tif n, err = recvmsg(fd, &msg, flags); n == -1 {\n\t\treturn\n\t}\n\toobn = int(msg.Accrightslen)\n\t// source address is only specified if the socket is unconnected\n\tif rsa.Addr.Family != AF_UNSPEC {\n\t\tfrom, err = anyToSockaddr(fd, &rsa)\n\t}\n\treturn\n}\n\nfunc Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (err error) {\n\t_, err = SendmsgN(fd, p, oob, to, flags)\n\treturn\n}\n\n//sys\tsendmsg(s int, msg *Msghdr, flags int) (n int, err error) = libsocket.__xnet_sendmsg\n\nfunc SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error) {\n\tvar ptr unsafe.Pointer\n\tvar salen _Socklen\n\tif to != nil {\n\t\tptr, salen, err = to.sockaddr()\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t}\n\tvar msg Msghdr\n\tmsg.Name = (*byte)(unsafe.Pointer(ptr))\n\tmsg.Namelen = uint32(salen)\n\tvar iov Iovec\n\tif len(p) > 0 {\n\t\tiov.Base = (*int8)(unsafe.Pointer(&p[0]))\n\t\tiov.SetLen(len(p))\n\t}\n\tvar dummy int8\n\tif len(oob) > 0 {\n\t\t// send at least one normal byte\n\t\tif len(p) == 0 {\n\t\t\tiov.Base = &dummy\n\t\t\tiov.SetLen(1)\n\t\t}\n\t\tmsg.Accrightslen = int32(len(oob))\n\t}\n\tmsg.Iov = &iov\n\tmsg.Iovlen = 1\n\tif n, err = sendmsg(fd, &msg, flags); err != nil {\n\t\treturn 0, err\n\t}\n\tif len(oob) > 0 && len(p) == 0 {\n\t\tn = 0\n\t}\n\treturn n, nil\n}\n\n//sys\tacct(path *byte) (err error)\n\nfunc Acct(path string) (err error) {\n\tif len(path) == 0 {\n\t\t// Assume caller wants to disable accounting.\n\t\treturn acct(nil)\n\t}\n\n\tpathp, err := BytePtrFromString(path)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn acct(pathp)\n}\n\n//sys\t__makedev(version int, major uint, minor uint) (val uint64)\n\nfunc Mkdev(major, minor uint32) uint64 {\n\treturn __makedev(NEWDEV, uint(major), uint(minor))\n}\n\n//sys\t__major(version int, dev uint64) (val uint)\n\nfunc Major(dev uint64) uint32 {\n\treturn uint32(__major(NEWDEV, dev))\n}\n\n//sys\t__minor(version int, dev uint64) (val uint)\n\nfunc Minor(dev uint64) uint32 {\n\treturn uint32(__minor(NEWDEV, dev))\n}\n\n/*\n * Expose the ioctl function\n */\n\n//sys\tioctl(fd int, req uint, arg uintptr) (err error)\n\nfunc IoctlSetInt(fd int, req uint, value int) (err error) {\n\treturn ioctl(fd, req, uintptr(value))\n}\n\nfunc ioctlSetWinsize(fd int, req uint, value *Winsize) (err error) {\n\treturn ioctl(fd, req, uintptr(unsafe.Pointer(value)))\n}\n\nfunc ioctlSetTermios(fd int, req uint, value *Termios) (err error) {\n\treturn ioctl(fd, req, uintptr(unsafe.Pointer(value)))\n}\n\nfunc IoctlSetTermio(fd int, req uint, value *Termio) (err error) {\n\treturn ioctl(fd, req, uintptr(unsafe.Pointer(value)))\n}\n\nfunc IoctlGetInt(fd int, req uint) (int, error) {\n\tvar value int\n\terr := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))\n\treturn value, err\n}\n\nfunc IoctlGetWinsize(fd int, req uint) (*Winsize, error) {\n\tvar value Winsize\n\terr := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))\n\treturn &value, err\n}\n\nfunc IoctlGetTermios(fd int, req uint) (*Termios, error) {\n\tvar value Termios\n\terr := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))\n\treturn &value, err\n}\n\nfunc IoctlGetTermio(fd int, req uint) (*Termio, error) {\n\tvar value Termio\n\terr := ioctl(fd, req, uintptr(unsafe.Pointer(&value)))\n\treturn &value, err\n}\n\n//sys   poll(fds *PollFd, nfds int, timeout int) (n int, err error)\n\nfunc Poll(fds []PollFd, timeout int) (n int, err error) {\n\tif len(fds) == 0 {\n\t\treturn poll(nil, 0, timeout)\n\t}\n\treturn poll(&fds[0], len(fds), timeout)\n}\n\nfunc Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tif raceenabled {\n\t\traceReleaseMerge(unsafe.Pointer(&ioSync))\n\t}\n\treturn sendfile(outfd, infd, offset, count)\n}\n\n/*\n * Exposed directly\n */\n//sys\tAccess(path string, mode uint32) (err error)\n//sys\tAdjtime(delta *Timeval, olddelta *Timeval) (err error)\n//sys\tChdir(path string) (err error)\n//sys\tChmod(path string, mode uint32) (err error)\n//sys\tChown(path string, uid int, gid int) (err error)\n//sys\tChroot(path string) (err error)\n//sys\tClose(fd int) (err error)\n//sys\tCreat(path string, mode uint32) (fd int, err error)\n//sys\tDup(fd int) (nfd int, err error)\n//sys\tDup2(oldfd int, newfd int) (err error)\n//sys\tExit(code int)\n//sys\tFaccessat(dirfd int, path string, mode uint32, flags int) (err error)\n//sys\tFchdir(fd int) (err error)\n//sys\tFchmod(fd int, mode uint32) (err error)\n//sys\tFchmodat(dirfd int, path string, mode uint32, flags int) (err error)\n//sys\tFchown(fd int, uid int, gid int) (err error)\n//sys\tFchownat(dirfd int, path string, uid int, gid int, flags int) (err error)\n//sys\tFdatasync(fd int) (err error)\n//sys\tFlock(fd int, how int) (err error)\n//sys\tFpathconf(fd int, name int) (val int, err error)\n//sys\tFstat(fd int, stat *Stat_t) (err error)\n//sys\tFstatat(fd int, path string, stat *Stat_t, flags int) (err error)\n//sys\tFstatvfs(fd int, vfsstat *Statvfs_t) (err error)\n//sys\tGetdents(fd int, buf []byte, basep *uintptr) (n int, err error)\n//sysnb\tGetgid() (gid int)\n//sysnb\tGetpid() (pid int)\n//sysnb\tGetpgid(pid int) (pgid int, err error)\n//sysnb\tGetpgrp() (pgid int, err error)\n//sys\tGeteuid() (euid int)\n//sys\tGetegid() (egid int)\n//sys\tGetppid() (ppid int)\n//sys\tGetpriority(which int, who int) (n int, err error)\n//sysnb\tGetrlimit(which int, lim *Rlimit) (err error)\n//sysnb\tGetrusage(who int, rusage *Rusage) (err error)\n//sysnb\tGettimeofday(tv *Timeval) (err error)\n//sysnb\tGetuid() (uid int)\n//sys\tKill(pid int, signum syscall.Signal) (err error)\n//sys\tLchown(path string, uid int, gid int) (err error)\n//sys\tLink(path string, link string) (err error)\n//sys\tListen(s int, backlog int) (err error) = libsocket.__xnet_llisten\n//sys\tLstat(path string, stat *Stat_t) (err error)\n//sys\tMadvise(b []byte, advice int) (err error)\n//sys\tMkdir(path string, mode uint32) (err error)\n//sys\tMkdirat(dirfd int, path string, mode uint32) (err error)\n//sys\tMkfifo(path string, mode uint32) (err error)\n//sys\tMkfifoat(dirfd int, path string, mode uint32) (err error)\n//sys\tMknod(path string, mode uint32, dev int) (err error)\n//sys\tMknodat(dirfd int, path string, mode uint32, dev int) (err error)\n//sys\tMlock(b []byte) (err error)\n//sys\tMlockall(flags int) (err error)\n//sys\tMprotect(b []byte, prot int) (err error)\n//sys\tMsync(b []byte, flags int) (err error)\n//sys\tMunlock(b []byte) (err error)\n//sys\tMunlockall() (err error)\n//sys\tNanosleep(time *Timespec, leftover *Timespec) (err error)\n//sys\tOpen(path string, mode int, perm uint32) (fd int, err error)\n//sys\tOpenat(dirfd int, path string, flags int, mode uint32) (fd int, err error)\n//sys\tPathconf(path string, name int) (val int, err error)\n//sys\tPause() (err error)\n//sys\tPread(fd int, p []byte, offset int64) (n int, err error)\n//sys\tPwrite(fd int, p []byte, offset int64) (n int, err error)\n//sys\tread(fd int, p []byte) (n int, err error)\n//sys\tReadlink(path string, buf []byte) (n int, err error)\n//sys\tRename(from string, to string) (err error)\n//sys\tRenameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)\n//sys\tRmdir(path string) (err error)\n//sys\tSeek(fd int, offset int64, whence int) (newoffset int64, err error) = lseek\n//sys\tSelect(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error)\n//sysnb\tSetegid(egid int) (err error)\n//sysnb\tSeteuid(euid int) (err error)\n//sysnb\tSetgid(gid int) (err error)\n//sys\tSethostname(p []byte) (err error)\n//sysnb\tSetpgid(pid int, pgid int) (err error)\n//sys\tSetpriority(which int, who int, prio int) (err error)\n//sysnb\tSetregid(rgid int, egid int) (err error)\n//sysnb\tSetreuid(ruid int, euid int) (err error)\n//sysnb\tSetrlimit(which int, lim *Rlimit) (err error)\n//sysnb\tSetsid() (pid int, err error)\n//sysnb\tSetuid(uid int) (err error)\n//sys\tShutdown(s int, how int) (err error) = libsocket.shutdown\n//sys\tStat(path string, stat *Stat_t) (err error)\n//sys\tStatvfs(path string, vfsstat *Statvfs_t) (err error)\n//sys\tSymlink(path string, link string) (err error)\n//sys\tSync() (err error)\n//sysnb\tTimes(tms *Tms) (ticks uintptr, err error)\n//sys\tTruncate(path string, length int64) (err error)\n//sys\tFsync(fd int) (err error)\n//sys\tFtruncate(fd int, length int64) (err error)\n//sys\tUmask(mask int) (oldmask int)\n//sysnb\tUname(buf *Utsname) (err error)\n//sys\tUnmount(target string, flags int) (err error) = libc.umount\n//sys\tUnlink(path string) (err error)\n//sys\tUnlinkat(dirfd int, path string, flags int) (err error)\n//sys\tUstat(dev int, ubuf *Ustat_t) (err error)\n//sys\tUtime(path string, buf *Utimbuf) (err error)\n//sys\tbind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) = libsocket.__xnet_bind\n//sys\tconnect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) = libsocket.__xnet_connect\n//sys\tmmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error)\n//sys\tmunmap(addr uintptr, length uintptr) (err error)\n//sys\tsendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = libsendfile.sendfile\n//sys\tsendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) = libsocket.__xnet_sendto\n//sys\tsocket(domain int, typ int, proto int) (fd int, err error) = libsocket.__xnet_socket\n//sysnb\tsocketpair(domain int, typ int, proto int, fd *[2]int32) (err error) = libsocket.__xnet_socketpair\n//sys\twrite(fd int, p []byte) (n int, err error)\n//sys\tgetsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) = libsocket.__xnet_getsockopt\n//sysnb\tgetpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) = libsocket.getpeername\n//sys\tsetsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) = libsocket.setsockopt\n//sys\trecvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) = libsocket.recvfrom\n\nfunc readlen(fd int, buf *byte, nbuf int) (n int, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procread)), 3, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf), 0, 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\nfunc writelen(fd int, buf *byte, nbuf int) (n int, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procwrite)), 3, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf), 0, 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\nvar mapper = &mmapper{\n\tactive: make(map[*byte][]byte),\n\tmmap:   mmap,\n\tmunmap: munmap,\n}\n\nfunc Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) {\n\treturn mapper.Mmap(fd, offset, length, prot, flags)\n}\n\nfunc Munmap(b []byte) (err error) {\n\treturn mapper.Munmap(b)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_solaris_amd64.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build amd64,solaris\n\npackage unix\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: usec}\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_unix.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris\n\npackage unix\n\nimport (\n\t\"bytes\"\n\t\"sort\"\n\t\"sync\"\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar (\n\tStdin  = 0\n\tStdout = 1\n\tStderr = 2\n)\n\n// Do the interface allocations only once for common\n// Errno values.\nvar (\n\terrEAGAIN error = syscall.EAGAIN\n\terrEINVAL error = syscall.EINVAL\n\terrENOENT error = syscall.ENOENT\n)\n\nvar (\n\tsignalNameMapOnce sync.Once\n\tsignalNameMap     map[string]syscall.Signal\n)\n\n// errnoErr returns common boxed Errno values, to prevent\n// allocations at runtime.\nfunc errnoErr(e syscall.Errno) error {\n\tswitch e {\n\tcase 0:\n\t\treturn nil\n\tcase EAGAIN:\n\t\treturn errEAGAIN\n\tcase EINVAL:\n\t\treturn errEINVAL\n\tcase ENOENT:\n\t\treturn errENOENT\n\t}\n\treturn e\n}\n\n// ErrnoName returns the error name for error number e.\nfunc ErrnoName(e syscall.Errno) string {\n\ti := sort.Search(len(errorList), func(i int) bool {\n\t\treturn errorList[i].num >= e\n\t})\n\tif i < len(errorList) && errorList[i].num == e {\n\t\treturn errorList[i].name\n\t}\n\treturn \"\"\n}\n\n// SignalName returns the signal name for signal number s.\nfunc SignalName(s syscall.Signal) string {\n\ti := sort.Search(len(signalList), func(i int) bool {\n\t\treturn signalList[i].num >= s\n\t})\n\tif i < len(signalList) && signalList[i].num == s {\n\t\treturn signalList[i].name\n\t}\n\treturn \"\"\n}\n\n// SignalNum returns the syscall.Signal for signal named s,\n// or 0 if a signal with such name is not found.\n// The signal name should start with \"SIG\".\nfunc SignalNum(s string) syscall.Signal {\n\tsignalNameMapOnce.Do(func() {\n\t\tsignalNameMap = make(map[string]syscall.Signal)\n\t\tfor _, signal := range signalList {\n\t\t\tsignalNameMap[signal.name] = signal.num\n\t\t}\n\t})\n\treturn signalNameMap[s]\n}\n\n// clen returns the index of the first NULL byte in n or len(n) if n contains no NULL byte.\nfunc clen(n []byte) int {\n\ti := bytes.IndexByte(n, 0)\n\tif i == -1 {\n\t\ti = len(n)\n\t}\n\treturn i\n}\n\n// Mmap manager, for use by operating system-specific implementations.\n\ntype mmapper struct {\n\tsync.Mutex\n\tactive map[*byte][]byte // active mappings; key is last byte in mapping\n\tmmap   func(addr, length uintptr, prot, flags, fd int, offset int64) (uintptr, error)\n\tmunmap func(addr uintptr, length uintptr) error\n}\n\nfunc (m *mmapper) Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) {\n\tif length <= 0 {\n\t\treturn nil, EINVAL\n\t}\n\n\t// Map the requested memory.\n\taddr, errno := m.mmap(0, uintptr(length), prot, flags, fd, offset)\n\tif errno != nil {\n\t\treturn nil, errno\n\t}\n\n\t// Slice memory layout\n\tvar sl = struct {\n\t\taddr uintptr\n\t\tlen  int\n\t\tcap  int\n\t}{addr, length, length}\n\n\t// Use unsafe to turn sl into a []byte.\n\tb := *(*[]byte)(unsafe.Pointer(&sl))\n\n\t// Register mapping in m and return it.\n\tp := &b[cap(b)-1]\n\tm.Lock()\n\tdefer m.Unlock()\n\tm.active[p] = b\n\treturn b, nil\n}\n\nfunc (m *mmapper) Munmap(data []byte) (err error) {\n\tif len(data) == 0 || len(data) != cap(data) {\n\t\treturn EINVAL\n\t}\n\n\t// Find the base of the mapping.\n\tp := &data[cap(data)-1]\n\tm.Lock()\n\tdefer m.Unlock()\n\tb := m.active[p]\n\tif b == nil || &b[0] != &data[0] {\n\t\treturn EINVAL\n\t}\n\n\t// Unmap the memory and update m.\n\tif errno := m.munmap(uintptr(unsafe.Pointer(&b[0])), uintptr(len(b))); errno != nil {\n\t\treturn errno\n\t}\n\tdelete(m.active, p)\n\treturn nil\n}\n\nfunc Read(fd int, p []byte) (n int, err error) {\n\tn, err = read(fd, p)\n\tif raceenabled {\n\t\tif n > 0 {\n\t\t\traceWriteRange(unsafe.Pointer(&p[0]), n)\n\t\t}\n\t\tif err == nil {\n\t\t\traceAcquire(unsafe.Pointer(&ioSync))\n\t\t}\n\t}\n\treturn\n}\n\nfunc Write(fd int, p []byte) (n int, err error) {\n\tif raceenabled {\n\t\traceReleaseMerge(unsafe.Pointer(&ioSync))\n\t}\n\tn, err = write(fd, p)\n\tif raceenabled && n > 0 {\n\t\traceReadRange(unsafe.Pointer(&p[0]), n)\n\t}\n\treturn\n}\n\n// For testing: clients can set this flag to force\n// creation of IPv6 sockets to return EAFNOSUPPORT.\nvar SocketDisableIPv6 bool\n\n// Sockaddr represents a socket address.\ntype Sockaddr interface {\n\tsockaddr() (ptr unsafe.Pointer, len _Socklen, err error) // lowercase; only we can define Sockaddrs\n}\n\n// SockaddrInet4 implements the Sockaddr interface for AF_INET type sockets.\ntype SockaddrInet4 struct {\n\tPort int\n\tAddr [4]byte\n\traw  RawSockaddrInet4\n}\n\n// SockaddrInet6 implements the Sockaddr interface for AF_INET6 type sockets.\ntype SockaddrInet6 struct {\n\tPort   int\n\tZoneId uint32\n\tAddr   [16]byte\n\traw    RawSockaddrInet6\n}\n\n// SockaddrUnix implements the Sockaddr interface for AF_UNIX type sockets.\ntype SockaddrUnix struct {\n\tName string\n\traw  RawSockaddrUnix\n}\n\nfunc Bind(fd int, sa Sockaddr) (err error) {\n\tptr, n, err := sa.sockaddr()\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn bind(fd, ptr, n)\n}\n\nfunc Connect(fd int, sa Sockaddr) (err error) {\n\tptr, n, err := sa.sockaddr()\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn connect(fd, ptr, n)\n}\n\nfunc Getpeername(fd int) (sa Sockaddr, err error) {\n\tvar rsa RawSockaddrAny\n\tvar len _Socklen = SizeofSockaddrAny\n\tif err = getpeername(fd, &rsa, &len); err != nil {\n\t\treturn\n\t}\n\treturn anyToSockaddr(fd, &rsa)\n}\n\nfunc GetsockoptByte(fd, level, opt int) (value byte, err error) {\n\tvar n byte\n\tvallen := _Socklen(1)\n\terr = getsockopt(fd, level, opt, unsafe.Pointer(&n), &vallen)\n\treturn n, err\n}\n\nfunc GetsockoptInt(fd, level, opt int) (value int, err error) {\n\tvar n int32\n\tvallen := _Socklen(4)\n\terr = getsockopt(fd, level, opt, unsafe.Pointer(&n), &vallen)\n\treturn int(n), err\n}\n\nfunc GetsockoptInet4Addr(fd, level, opt int) (value [4]byte, err error) {\n\tvallen := _Socklen(4)\n\terr = getsockopt(fd, level, opt, unsafe.Pointer(&value[0]), &vallen)\n\treturn value, err\n}\n\nfunc GetsockoptIPMreq(fd, level, opt int) (*IPMreq, error) {\n\tvar value IPMreq\n\tvallen := _Socklen(SizeofIPMreq)\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)\n\treturn &value, err\n}\n\nfunc GetsockoptIPv6Mreq(fd, level, opt int) (*IPv6Mreq, error) {\n\tvar value IPv6Mreq\n\tvallen := _Socklen(SizeofIPv6Mreq)\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)\n\treturn &value, err\n}\n\nfunc GetsockoptIPv6MTUInfo(fd, level, opt int) (*IPv6MTUInfo, error) {\n\tvar value IPv6MTUInfo\n\tvallen := _Socklen(SizeofIPv6MTUInfo)\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)\n\treturn &value, err\n}\n\nfunc GetsockoptICMPv6Filter(fd, level, opt int) (*ICMPv6Filter, error) {\n\tvar value ICMPv6Filter\n\tvallen := _Socklen(SizeofICMPv6Filter)\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)\n\treturn &value, err\n}\n\nfunc GetsockoptLinger(fd, level, opt int) (*Linger, error) {\n\tvar linger Linger\n\tvallen := _Socklen(SizeofLinger)\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&linger), &vallen)\n\treturn &linger, err\n}\n\nfunc GetsockoptTimeval(fd, level, opt int) (*Timeval, error) {\n\tvar tv Timeval\n\tvallen := _Socklen(unsafe.Sizeof(tv))\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&tv), &vallen)\n\treturn &tv, err\n}\n\nfunc GetsockoptUint64(fd, level, opt int) (value uint64, err error) {\n\tvar n uint64\n\tvallen := _Socklen(8)\n\terr = getsockopt(fd, level, opt, unsafe.Pointer(&n), &vallen)\n\treturn n, err\n}\n\nfunc Recvfrom(fd int, p []byte, flags int) (n int, from Sockaddr, err error) {\n\tvar rsa RawSockaddrAny\n\tvar len _Socklen = SizeofSockaddrAny\n\tif n, err = recvfrom(fd, p, flags, &rsa, &len); err != nil {\n\t\treturn\n\t}\n\tif rsa.Addr.Family != AF_UNSPEC {\n\t\tfrom, err = anyToSockaddr(fd, &rsa)\n\t}\n\treturn\n}\n\nfunc Sendto(fd int, p []byte, flags int, to Sockaddr) (err error) {\n\tptr, n, err := to.sockaddr()\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn sendto(fd, p, flags, ptr, n)\n}\n\nfunc SetsockoptByte(fd, level, opt int, value byte) (err error) {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(&value), 1)\n}\n\nfunc SetsockoptInt(fd, level, opt int, value int) (err error) {\n\tvar n = int32(value)\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(&n), 4)\n}\n\nfunc SetsockoptInet4Addr(fd, level, opt int, value [4]byte) (err error) {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(&value[0]), 4)\n}\n\nfunc SetsockoptIPMreq(fd, level, opt int, mreq *IPMreq) (err error) {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(mreq), SizeofIPMreq)\n}\n\nfunc SetsockoptIPv6Mreq(fd, level, opt int, mreq *IPv6Mreq) (err error) {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(mreq), SizeofIPv6Mreq)\n}\n\nfunc SetsockoptICMPv6Filter(fd, level, opt int, filter *ICMPv6Filter) error {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(filter), SizeofICMPv6Filter)\n}\n\nfunc SetsockoptLinger(fd, level, opt int, l *Linger) (err error) {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(l), SizeofLinger)\n}\n\nfunc SetsockoptString(fd, level, opt int, s string) (err error) {\n\tvar p unsafe.Pointer\n\tif len(s) > 0 {\n\t\tp = unsafe.Pointer(&[]byte(s)[0])\n\t}\n\treturn setsockopt(fd, level, opt, p, uintptr(len(s)))\n}\n\nfunc SetsockoptTimeval(fd, level, opt int, tv *Timeval) (err error) {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(tv), unsafe.Sizeof(*tv))\n}\n\nfunc SetsockoptUint64(fd, level, opt int, value uint64) (err error) {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(&value), 8)\n}\n\nfunc Socket(domain, typ, proto int) (fd int, err error) {\n\tif domain == AF_INET6 && SocketDisableIPv6 {\n\t\treturn -1, EAFNOSUPPORT\n\t}\n\tfd, err = socket(domain, typ, proto)\n\treturn\n}\n\nfunc Socketpair(domain, typ, proto int) (fd [2]int, err error) {\n\tvar fdx [2]int32\n\terr = socketpair(domain, typ, proto, &fdx)\n\tif err == nil {\n\t\tfd[0] = int(fdx[0])\n\t\tfd[1] = int(fdx[1])\n\t}\n\treturn\n}\n\nvar ioSync int64\n\nfunc CloseOnExec(fd int) { fcntl(fd, F_SETFD, FD_CLOEXEC) }\n\nfunc SetNonblock(fd int, nonblocking bool) (err error) {\n\tflag, err := fcntl(fd, F_GETFL, 0)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif nonblocking {\n\t\tflag |= O_NONBLOCK\n\t} else {\n\t\tflag &= ^O_NONBLOCK\n\t}\n\t_, err = fcntl(fd, F_SETFL, flag)\n\treturn err\n}\n\n// Exec calls execve(2), which replaces the calling executable in the process\n// tree. argv0 should be the full path to an executable (\"/bin/ls\") and the\n// executable name should also be the first argument in argv ([\"ls\", \"-l\"]).\n// envv are the environment variables that should be passed to the new\n// process ([\"USER=go\", \"PWD=/tmp\"]).\nfunc Exec(argv0 string, argv []string, envv []string) error {\n\treturn syscall.Exec(argv0, argv, envv)\n}\n\n// Lutimes sets the access and modification times tv on path. If path refers to\n// a symlink, it is not dereferenced and the timestamps are set on the symlink.\n// If tv is nil, the access and modification times are set to the current time.\n// Otherwise tv must contain exactly 2 elements, with access time as the first\n// element and modification time as the second element.\nfunc Lutimes(path string, tv []Timeval) error {\n\tif tv == nil {\n\t\treturn UtimesNanoAt(AT_FDCWD, path, nil, AT_SYMLINK_NOFOLLOW)\n\t}\n\tif len(tv) != 2 {\n\t\treturn EINVAL\n\t}\n\tts := []Timespec{\n\t\tNsecToTimespec(TimevalToNsec(tv[0])),\n\t\tNsecToTimespec(TimevalToNsec(tv[1])),\n\t}\n\treturn UtimesNanoAt(AT_FDCWD, path, ts, AT_SYMLINK_NOFOLLOW)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_unix_gc.go",
    "content": "// Copyright 2016 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build darwin dragonfly freebsd linux netbsd openbsd solaris\n// +build !gccgo,!ppc64le,!ppc64\n\npackage unix\n\nimport \"syscall\"\n\nfunc Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno)\nfunc Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno)\nfunc RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno)\nfunc RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_unix_gc_ppc64x.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build linux\n// +build ppc64le ppc64\n// +build !gccgo\n\npackage unix\n\nimport \"syscall\"\n\nfunc Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) {\n\treturn syscall.Syscall(trap, a1, a2, a3)\n}\nfunc Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) {\n\treturn syscall.Syscall6(trap, a1, a2, a3, a4, a5, a6)\n}\nfunc RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) {\n\treturn syscall.RawSyscall(trap, a1, a2, a3)\n}\nfunc RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) {\n\treturn syscall.RawSyscall6(trap, a1, a2, a3, a4, a5, a6)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/timestruct.go",
    "content": "// Copyright 2017 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris\n\npackage unix\n\nimport \"time\"\n\n// TimespecToNsec converts a Timespec value into a number of\n// nanoseconds since the Unix epoch.\nfunc TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) }\n\n// NsecToTimespec takes a number of nanoseconds since the Unix epoch\n// and returns the corresponding Timespec value.\nfunc NsecToTimespec(nsec int64) Timespec {\n\tsec := nsec / 1e9\n\tnsec = nsec % 1e9\n\tif nsec < 0 {\n\t\tnsec += 1e9\n\t\tsec--\n\t}\n\treturn setTimespec(sec, nsec)\n}\n\n// TimeToTimespec converts t into a Timespec.\n// On some 32-bit systems the range of valid Timespec values are smaller\n// than that of time.Time values.  So if t is out of the valid range of\n// Timespec, it returns a zero Timespec and ERANGE.\nfunc TimeToTimespec(t time.Time) (Timespec, error) {\n\tsec := t.Unix()\n\tnsec := int64(t.Nanosecond())\n\tts := setTimespec(sec, nsec)\n\n\t// Currently all targets have either int32 or int64 for Timespec.Sec.\n\t// If there were a new target with floating point type for it, we have\n\t// to consider the rounding error.\n\tif int64(ts.Sec) != sec {\n\t\treturn Timespec{}, ERANGE\n\t}\n\treturn ts, nil\n}\n\n// TimevalToNsec converts a Timeval value into a number of nanoseconds\n// since the Unix epoch.\nfunc TimevalToNsec(tv Timeval) int64 { return int64(tv.Sec)*1e9 + int64(tv.Usec)*1e3 }\n\n// NsecToTimeval takes a number of nanoseconds since the Unix epoch\n// and returns the corresponding Timeval value.\nfunc NsecToTimeval(nsec int64) Timeval {\n\tnsec += 999 // round up to microsecond\n\tusec := nsec % 1e9 / 1e3\n\tsec := nsec / 1e9\n\tif usec < 0 {\n\t\tusec += 1e6\n\t\tsec--\n\t}\n\treturn setTimeval(sec, usec)\n}\n\n// Unix returns ts as the number of seconds and nanoseconds elapsed since the\n// Unix epoch.\nfunc (ts *Timespec) Unix() (sec int64, nsec int64) {\n\treturn int64(ts.Sec), int64(ts.Nsec)\n}\n\n// Unix returns tv as the number of seconds and nanoseconds elapsed since the\n// Unix epoch.\nfunc (tv *Timeval) Unix() (sec int64, nsec int64) {\n\treturn int64(tv.Sec), int64(tv.Usec) * 1000\n}\n\n// Nano returns ts as the number of nanoseconds elapsed since the Unix epoch.\nfunc (ts *Timespec) Nano() int64 {\n\treturn int64(ts.Sec)*1e9 + int64(ts.Nsec)\n}\n\n// Nano returns tv as the number of nanoseconds elapsed since the Unix epoch.\nfunc (tv *Timeval) Nano() int64 {\n\treturn int64(tv.Sec)*1e9 + int64(tv.Usec)*1000\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/types_aix.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build ignore\n// +build aix\n\n/*\nInput to cgo -godefs.  See also mkerrors.sh and mkall.sh\n*/\n\n// +godefs map struct_in_addr [4]byte /* in_addr */\n// +godefs map struct_in6_addr [16]byte /* in6_addr */\n\npackage unix\n\n/*\n#include <sys/types.h>\n#include <sys/time.h>\n#include <sys/limits.h>\n#include <sys/un.h>\n#include <utime.h>\n#include <sys/utsname.h>\n#include <sys/poll.h>\n#include <sys/resource.h>\n#include <sys/stat.h>\n#include <sys/statfs.h>\n#include <sys/termio.h>\n#include <sys/ioctl.h>\n\n#include <termios.h>\n\n#include <net/if.h>\n#include <net/if_dl.h>\n#include <netinet/in.h>\n#include <netinet/icmp6.h>\n\n\n#include <dirent.h>\n#include <fcntl.h>\n\nenum {\n\tsizeofPtr = sizeof(void*),\n};\n\nunion sockaddr_all {\n\tstruct sockaddr s1;     // this one gets used for fields\n\tstruct sockaddr_in s2;  // these pad it out\n\tstruct sockaddr_in6 s3;\n\tstruct sockaddr_un s4;\n\tstruct sockaddr_dl s5;\n};\n\nstruct sockaddr_any {\n\tstruct sockaddr addr;\n\tchar pad[sizeof(union sockaddr_all) - sizeof(struct sockaddr)];\n};\n\n*/\nimport \"C\"\n\n// Machine characteristics\n\nconst (\n\tSizeofPtr      = C.sizeofPtr\n\tSizeofShort    = C.sizeof_short\n\tSizeofInt      = C.sizeof_int\n\tSizeofLong     = C.sizeof_long\n\tSizeofLongLong = C.sizeof_longlong\n\tPathMax        = C.PATH_MAX\n)\n\n// Basic types\n\ntype (\n\t_C_short     C.short\n\t_C_int       C.int\n\t_C_long      C.long\n\t_C_long_long C.longlong\n)\n\ntype off64 C.off64_t\ntype off C.off_t\ntype Mode_t C.mode_t\n\n// Time\n\ntype Timespec C.struct_timespec\n\ntype Timeval C.struct_timeval\n\ntype Timeval32 C.struct_timeval32\n\ntype Timex C.struct_timex\n\ntype Time_t C.time_t\n\ntype Tms C.struct_tms\n\ntype Utimbuf C.struct_utimbuf\n\ntype Timezone C.struct_timezone\n\n// Processes\n\ntype Rusage C.struct_rusage\n\ntype Rlimit C.struct_rlimit64\n\ntype Pid_t C.pid_t\n\ntype _Gid_t C.gid_t\n\ntype dev_t C.dev_t\n\n// Files\n\ntype Stat_t C.struct_stat\n\ntype StatxTimestamp C.struct_statx_timestamp\n\ntype Statx_t C.struct_statx\n\ntype Dirent C.struct_dirent\n\n// Sockets\n\ntype RawSockaddrInet4 C.struct_sockaddr_in\n\ntype RawSockaddrInet6 C.struct_sockaddr_in6\n\ntype RawSockaddrUnix C.struct_sockaddr_un\n\ntype RawSockaddrDatalink C.struct_sockaddr_dl\n\ntype RawSockaddr C.struct_sockaddr\n\ntype RawSockaddrAny C.struct_sockaddr_any\n\ntype _Socklen C.socklen_t\n\ntype Cmsghdr C.struct_cmsghdr\n\ntype ICMPv6Filter C.struct_icmp6_filter\n\ntype Iovec C.struct_iovec\n\ntype IPMreq C.struct_ip_mreq\n\ntype IPv6Mreq C.struct_ipv6_mreq\n\ntype IPv6MTUInfo C.struct_ip6_mtuinfo\n\ntype Linger C.struct_linger\n\ntype Msghdr C.struct_msghdr\n\nconst (\n\tSizeofSockaddrInet4    = C.sizeof_struct_sockaddr_in\n\tSizeofSockaddrInet6    = C.sizeof_struct_sockaddr_in6\n\tSizeofSockaddrAny      = C.sizeof_struct_sockaddr_any\n\tSizeofSockaddrUnix     = C.sizeof_struct_sockaddr_un\n\tSizeofSockaddrDatalink = C.sizeof_struct_sockaddr_dl\n\tSizeofLinger           = C.sizeof_struct_linger\n\tSizeofIPMreq           = C.sizeof_struct_ip_mreq\n\tSizeofIPv6Mreq         = C.sizeof_struct_ipv6_mreq\n\tSizeofIPv6MTUInfo      = C.sizeof_struct_ip6_mtuinfo\n\tSizeofMsghdr           = C.sizeof_struct_msghdr\n\tSizeofCmsghdr          = C.sizeof_struct_cmsghdr\n\tSizeofICMPv6Filter     = C.sizeof_struct_icmp6_filter\n)\n\n// Routing and interface messages\n\nconst (\n\tSizeofIfMsghdr = C.sizeof_struct_if_msghdr\n)\n\ntype IfMsgHdr C.struct_if_msghdr\n\n// Misc\n\ntype FdSet C.fd_set\n\ntype Utsname C.struct_utsname\n\ntype Ustat_t C.struct_ustat\n\ntype Sigset_t C.sigset_t\n\nconst (\n\tAT_FDCWD            = C.AT_FDCWD\n\tAT_REMOVEDIR        = C.AT_REMOVEDIR\n\tAT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW\n)\n\n// Terminal handling\n\ntype Termios C.struct_termios\n\ntype Termio C.struct_termio\n\ntype Winsize C.struct_winsize\n\n//poll\n\ntype PollFd struct {\n\tFd      int32\n\tEvents  uint16\n\tRevents uint16\n}\n\nconst (\n\tPOLLERR    = C.POLLERR\n\tPOLLHUP    = C.POLLHUP\n\tPOLLIN     = C.POLLIN\n\tPOLLNVAL   = C.POLLNVAL\n\tPOLLOUT    = C.POLLOUT\n\tPOLLPRI    = C.POLLPRI\n\tPOLLRDBAND = C.POLLRDBAND\n\tPOLLRDNORM = C.POLLRDNORM\n\tPOLLWRBAND = C.POLLWRBAND\n\tPOLLWRNORM = C.POLLWRNORM\n)\n\n//flock_t\n\ntype Flock_t C.struct_flock64\n\n// Statfs\n\ntype Fsid_t C.struct_fsid_t\ntype Fsid64_t C.struct_fsid64_t\n\ntype Statfs_t C.struct_statfs\n\nconst RNDGETENTCNT = 0x80045200\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/types_darwin.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build ignore\n\n/*\nInput to cgo -godefs.  See README.md\n*/\n\n// +godefs map struct_in_addr [4]byte /* in_addr */\n// +godefs map struct_in6_addr [16]byte /* in6_addr */\n\npackage unix\n\n/*\n#define __DARWIN_UNIX03 0\n#define KERNEL\n#define _DARWIN_USE_64_BIT_INODE\n#include <dirent.h>\n#include <fcntl.h>\n#include <poll.h>\n#include <signal.h>\n#include <termios.h>\n#include <unistd.h>\n#include <mach/mach.h>\n#include <mach/message.h>\n#include <sys/event.h>\n#include <sys/mman.h>\n#include <sys/mount.h>\n#include <sys/param.h>\n#include <sys/ptrace.h>\n#include <sys/resource.h>\n#include <sys/select.h>\n#include <sys/signal.h>\n#include <sys/socket.h>\n#include <sys/stat.h>\n#include <sys/time.h>\n#include <sys/types.h>\n#include <sys/uio.h>\n#include <sys/un.h>\n#include <sys/utsname.h>\n#include <sys/wait.h>\n#include <net/bpf.h>\n#include <net/if.h>\n#include <net/if_dl.h>\n#include <net/if_var.h>\n#include <net/route.h>\n#include <netinet/in.h>\n#include <netinet/icmp6.h>\n#include <netinet/tcp.h>\n\nenum {\n\tsizeofPtr = sizeof(void*),\n};\n\nunion sockaddr_all {\n\tstruct sockaddr s1;\t// this one gets used for fields\n\tstruct sockaddr_in s2;\t// these pad it out\n\tstruct sockaddr_in6 s3;\n\tstruct sockaddr_un s4;\n\tstruct sockaddr_dl s5;\n};\n\nstruct sockaddr_any {\n\tstruct sockaddr addr;\n\tchar pad[sizeof(union sockaddr_all) - sizeof(struct sockaddr)];\n};\n\n*/\nimport \"C\"\n\n// Machine characteristics\n\nconst (\n\tSizeofPtr      = C.sizeofPtr\n\tSizeofShort    = C.sizeof_short\n\tSizeofInt      = C.sizeof_int\n\tSizeofLong     = C.sizeof_long\n\tSizeofLongLong = C.sizeof_longlong\n)\n\n// Basic types\n\ntype (\n\t_C_short     C.short\n\t_C_int       C.int\n\t_C_long      C.long\n\t_C_long_long C.longlong\n)\n\n// Time\n\ntype Timespec C.struct_timespec\n\ntype Timeval C.struct_timeval\n\ntype Timeval32 C.struct_timeval32\n\n// Processes\n\ntype Rusage C.struct_rusage\n\ntype Rlimit C.struct_rlimit\n\ntype _Gid_t C.gid_t\n\n// Files\n\ntype Stat_t C.struct_stat64\n\ntype Statfs_t C.struct_statfs64\n\ntype Flock_t C.struct_flock\n\ntype Fstore_t C.struct_fstore\n\ntype Radvisory_t C.struct_radvisory\n\ntype Fbootstraptransfer_t C.struct_fbootstraptransfer\n\ntype Log2phys_t C.struct_log2phys\n\ntype Fsid C.struct_fsid\n\ntype Dirent C.struct_dirent\n\n// Sockets\n\ntype RawSockaddrInet4 C.struct_sockaddr_in\n\ntype RawSockaddrInet6 C.struct_sockaddr_in6\n\ntype RawSockaddrUnix C.struct_sockaddr_un\n\ntype RawSockaddrDatalink C.struct_sockaddr_dl\n\ntype RawSockaddr C.struct_sockaddr\n\ntype RawSockaddrAny C.struct_sockaddr_any\n\ntype _Socklen C.socklen_t\n\ntype Linger C.struct_linger\n\ntype Iovec C.struct_iovec\n\ntype IPMreq C.struct_ip_mreq\n\ntype IPv6Mreq C.struct_ipv6_mreq\n\ntype Msghdr C.struct_msghdr\n\ntype Cmsghdr C.struct_cmsghdr\n\ntype Inet4Pktinfo C.struct_in_pktinfo\n\ntype Inet6Pktinfo C.struct_in6_pktinfo\n\ntype IPv6MTUInfo C.struct_ip6_mtuinfo\n\ntype ICMPv6Filter C.struct_icmp6_filter\n\nconst (\n\tSizeofSockaddrInet4    = C.sizeof_struct_sockaddr_in\n\tSizeofSockaddrInet6    = C.sizeof_struct_sockaddr_in6\n\tSizeofSockaddrAny      = C.sizeof_struct_sockaddr_any\n\tSizeofSockaddrUnix     = C.sizeof_struct_sockaddr_un\n\tSizeofSockaddrDatalink = C.sizeof_struct_sockaddr_dl\n\tSizeofLinger           = C.sizeof_struct_linger\n\tSizeofIPMreq           = C.sizeof_struct_ip_mreq\n\tSizeofIPv6Mreq         = C.sizeof_struct_ipv6_mreq\n\tSizeofMsghdr           = C.sizeof_struct_msghdr\n\tSizeofCmsghdr          = C.sizeof_struct_cmsghdr\n\tSizeofInet4Pktinfo     = C.sizeof_struct_in_pktinfo\n\tSizeofInet6Pktinfo     = C.sizeof_struct_in6_pktinfo\n\tSizeofIPv6MTUInfo      = C.sizeof_struct_ip6_mtuinfo\n\tSizeofICMPv6Filter     = C.sizeof_struct_icmp6_filter\n)\n\n// Ptrace requests\n\nconst (\n\tPTRACE_TRACEME = C.PT_TRACE_ME\n\tPTRACE_CONT    = C.PT_CONTINUE\n\tPTRACE_KILL    = C.PT_KILL\n)\n\n// Events (kqueue, kevent)\n\ntype Kevent_t C.struct_kevent\n\n// Select\n\ntype FdSet C.fd_set\n\n// Routing and interface messages\n\nconst (\n\tSizeofIfMsghdr    = C.sizeof_struct_if_msghdr\n\tSizeofIfData      = C.sizeof_struct_if_data\n\tSizeofIfaMsghdr   = C.sizeof_struct_ifa_msghdr\n\tSizeofIfmaMsghdr  = C.sizeof_struct_ifma_msghdr\n\tSizeofIfmaMsghdr2 = C.sizeof_struct_ifma_msghdr2\n\tSizeofRtMsghdr    = C.sizeof_struct_rt_msghdr\n\tSizeofRtMetrics   = C.sizeof_struct_rt_metrics\n)\n\ntype IfMsghdr C.struct_if_msghdr\n\ntype IfData C.struct_if_data\n\ntype IfaMsghdr C.struct_ifa_msghdr\n\ntype IfmaMsghdr C.struct_ifma_msghdr\n\ntype IfmaMsghdr2 C.struct_ifma_msghdr2\n\ntype RtMsghdr C.struct_rt_msghdr\n\ntype RtMetrics C.struct_rt_metrics\n\n// Berkeley packet filter\n\nconst (\n\tSizeofBpfVersion = C.sizeof_struct_bpf_version\n\tSizeofBpfStat    = C.sizeof_struct_bpf_stat\n\tSizeofBpfProgram = C.sizeof_struct_bpf_program\n\tSizeofBpfInsn    = C.sizeof_struct_bpf_insn\n\tSizeofBpfHdr     = C.sizeof_struct_bpf_hdr\n)\n\ntype BpfVersion C.struct_bpf_version\n\ntype BpfStat C.struct_bpf_stat\n\ntype BpfProgram C.struct_bpf_program\n\ntype BpfInsn C.struct_bpf_insn\n\ntype BpfHdr C.struct_bpf_hdr\n\n// Terminal handling\n\ntype Termios C.struct_termios\n\ntype Winsize C.struct_winsize\n\n// fchmodat-like syscalls.\n\nconst (\n\tAT_FDCWD            = C.AT_FDCWD\n\tAT_REMOVEDIR        = C.AT_REMOVEDIR\n\tAT_SYMLINK_FOLLOW   = C.AT_SYMLINK_FOLLOW\n\tAT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW\n)\n\n// poll\n\ntype PollFd C.struct_pollfd\n\nconst (\n\tPOLLERR    = C.POLLERR\n\tPOLLHUP    = C.POLLHUP\n\tPOLLIN     = C.POLLIN\n\tPOLLNVAL   = C.POLLNVAL\n\tPOLLOUT    = C.POLLOUT\n\tPOLLPRI    = C.POLLPRI\n\tPOLLRDBAND = C.POLLRDBAND\n\tPOLLRDNORM = C.POLLRDNORM\n\tPOLLWRBAND = C.POLLWRBAND\n\tPOLLWRNORM = C.POLLWRNORM\n)\n\n// uname\n\ntype Utsname C.struct_utsname\n\n// Clockinfo\n\nconst SizeofClockinfo = C.sizeof_struct_clockinfo\n\ntype Clockinfo C.struct_clockinfo\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/types_dragonfly.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build ignore\n\n/*\nInput to cgo -godefs.  See README.md\n*/\n\n// +godefs map struct_in_addr [4]byte /* in_addr */\n// +godefs map struct_in6_addr [16]byte /* in6_addr */\n\npackage unix\n\n/*\n#define KERNEL\n#include <dirent.h>\n#include <fcntl.h>\n#include <poll.h>\n#include <signal.h>\n#include <termios.h>\n#include <stdio.h>\n#include <unistd.h>\n#include <sys/event.h>\n#include <sys/mman.h>\n#include <sys/mount.h>\n#include <sys/param.h>\n#include <sys/ptrace.h>\n#include <sys/resource.h>\n#include <sys/select.h>\n#include <sys/signal.h>\n#include <sys/socket.h>\n#include <sys/stat.h>\n#include <sys/time.h>\n#include <sys/types.h>\n#include <sys/un.h>\n#include <sys/utsname.h>\n#include <sys/wait.h>\n#include <net/bpf.h>\n#include <net/if.h>\n#include <net/if_dl.h>\n#include <net/route.h>\n#include <netinet/in.h>\n#include <netinet/icmp6.h>\n#include <netinet/tcp.h>\n\nenum {\n\tsizeofPtr = sizeof(void*),\n};\n\nunion sockaddr_all {\n\tstruct sockaddr s1;\t// this one gets used for fields\n\tstruct sockaddr_in s2;\t// these pad it out\n\tstruct sockaddr_in6 s3;\n\tstruct sockaddr_un s4;\n\tstruct sockaddr_dl s5;\n};\n\nstruct sockaddr_any {\n\tstruct sockaddr addr;\n\tchar pad[sizeof(union sockaddr_all) - sizeof(struct sockaddr)];\n};\n\n*/\nimport \"C\"\n\n// Machine characteristics\n\nconst (\n\tSizeofPtr      = C.sizeofPtr\n\tSizeofShort    = C.sizeof_short\n\tSizeofInt      = C.sizeof_int\n\tSizeofLong     = C.sizeof_long\n\tSizeofLongLong = C.sizeof_longlong\n)\n\n// Basic types\n\ntype (\n\t_C_short     C.short\n\t_C_int       C.int\n\t_C_long      C.long\n\t_C_long_long C.longlong\n)\n\n// Time\n\ntype Timespec C.struct_timespec\n\ntype Timeval C.struct_timeval\n\n// Processes\n\ntype Rusage C.struct_rusage\n\ntype Rlimit C.struct_rlimit\n\ntype _Gid_t C.gid_t\n\n// Files\n\ntype Stat_t C.struct_stat\n\ntype Statfs_t C.struct_statfs\n\ntype Flock_t C.struct_flock\n\ntype Dirent C.struct_dirent\n\ntype Fsid C.struct_fsid\n\n// File system limits\n\nconst (\n\tPathMax = C.PATH_MAX\n)\n\n// Sockets\n\ntype RawSockaddrInet4 C.struct_sockaddr_in\n\ntype RawSockaddrInet6 C.struct_sockaddr_in6\n\ntype RawSockaddrUnix C.struct_sockaddr_un\n\ntype RawSockaddrDatalink C.struct_sockaddr_dl\n\ntype RawSockaddr C.struct_sockaddr\n\ntype RawSockaddrAny C.struct_sockaddr_any\n\ntype _Socklen C.socklen_t\n\ntype Linger C.struct_linger\n\ntype Iovec C.struct_iovec\n\ntype IPMreq C.struct_ip_mreq\n\ntype IPv6Mreq C.struct_ipv6_mreq\n\ntype Msghdr C.struct_msghdr\n\ntype Cmsghdr C.struct_cmsghdr\n\ntype Inet6Pktinfo C.struct_in6_pktinfo\n\ntype IPv6MTUInfo C.struct_ip6_mtuinfo\n\ntype ICMPv6Filter C.struct_icmp6_filter\n\nconst (\n\tSizeofSockaddrInet4    = C.sizeof_struct_sockaddr_in\n\tSizeofSockaddrInet6    = C.sizeof_struct_sockaddr_in6\n\tSizeofSockaddrAny      = C.sizeof_struct_sockaddr_any\n\tSizeofSockaddrUnix     = C.sizeof_struct_sockaddr_un\n\tSizeofSockaddrDatalink = C.sizeof_struct_sockaddr_dl\n\tSizeofLinger           = C.sizeof_struct_linger\n\tSizeofIPMreq           = C.sizeof_struct_ip_mreq\n\tSizeofIPv6Mreq         = C.sizeof_struct_ipv6_mreq\n\tSizeofMsghdr           = C.sizeof_struct_msghdr\n\tSizeofCmsghdr          = C.sizeof_struct_cmsghdr\n\tSizeofInet6Pktinfo     = C.sizeof_struct_in6_pktinfo\n\tSizeofIPv6MTUInfo      = C.sizeof_struct_ip6_mtuinfo\n\tSizeofICMPv6Filter     = C.sizeof_struct_icmp6_filter\n)\n\n// Ptrace requests\n\nconst (\n\tPTRACE_TRACEME = C.PT_TRACE_ME\n\tPTRACE_CONT    = C.PT_CONTINUE\n\tPTRACE_KILL    = C.PT_KILL\n)\n\n// Events (kqueue, kevent)\n\ntype Kevent_t C.struct_kevent\n\n// Select\n\ntype FdSet C.fd_set\n\n// Routing and interface messages\n\nconst (\n\tSizeofIfMsghdr         = C.sizeof_struct_if_msghdr\n\tSizeofIfData           = C.sizeof_struct_if_data\n\tSizeofIfaMsghdr        = C.sizeof_struct_ifa_msghdr\n\tSizeofIfmaMsghdr       = C.sizeof_struct_ifma_msghdr\n\tSizeofIfAnnounceMsghdr = C.sizeof_struct_if_announcemsghdr\n\tSizeofRtMsghdr         = C.sizeof_struct_rt_msghdr\n\tSizeofRtMetrics        = C.sizeof_struct_rt_metrics\n)\n\ntype IfMsghdr C.struct_if_msghdr\n\ntype IfData C.struct_if_data\n\ntype IfaMsghdr C.struct_ifa_msghdr\n\ntype IfmaMsghdr C.struct_ifma_msghdr\n\ntype IfAnnounceMsghdr C.struct_if_announcemsghdr\n\ntype RtMsghdr C.struct_rt_msghdr\n\ntype RtMetrics C.struct_rt_metrics\n\n// Berkeley packet filter\n\nconst (\n\tSizeofBpfVersion = C.sizeof_struct_bpf_version\n\tSizeofBpfStat    = C.sizeof_struct_bpf_stat\n\tSizeofBpfProgram = C.sizeof_struct_bpf_program\n\tSizeofBpfInsn    = C.sizeof_struct_bpf_insn\n\tSizeofBpfHdr     = C.sizeof_struct_bpf_hdr\n)\n\ntype BpfVersion C.struct_bpf_version\n\ntype BpfStat C.struct_bpf_stat\n\ntype BpfProgram C.struct_bpf_program\n\ntype BpfInsn C.struct_bpf_insn\n\ntype BpfHdr C.struct_bpf_hdr\n\n// Terminal handling\n\ntype Termios C.struct_termios\n\ntype Winsize C.struct_winsize\n\n// fchmodat-like syscalls.\n\nconst (\n\tAT_FDCWD            = C.AT_FDCWD\n\tAT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW\n)\n\n// poll\n\ntype PollFd C.struct_pollfd\n\nconst (\n\tPOLLERR    = C.POLLERR\n\tPOLLHUP    = C.POLLHUP\n\tPOLLIN     = C.POLLIN\n\tPOLLNVAL   = C.POLLNVAL\n\tPOLLOUT    = C.POLLOUT\n\tPOLLPRI    = C.POLLPRI\n\tPOLLRDBAND = C.POLLRDBAND\n\tPOLLRDNORM = C.POLLRDNORM\n\tPOLLWRBAND = C.POLLWRBAND\n\tPOLLWRNORM = C.POLLWRNORM\n)\n\n// Uname\n\ntype Utsname C.struct_utsname\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/types_freebsd.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build ignore\n\n/*\nInput to cgo -godefs.  See README.md\n*/\n\n// +godefs map struct_in_addr [4]byte /* in_addr */\n// +godefs map struct_in6_addr [16]byte /* in6_addr */\n\npackage unix\n\n/*\n#define\t_WANT_FREEBSD11_STAT\t1\n#define\t_WANT_FREEBSD11_STATFS\t1\n#define\t_WANT_FREEBSD11_DIRENT\t1\n#define\t_WANT_FREEBSD11_KEVENT  1\n\n#include <dirent.h>\n#include <fcntl.h>\n#include <poll.h>\n#include <signal.h>\n#include <termios.h>\n#include <stdio.h>\n#include <unistd.h>\n#include <sys/capsicum.h>\n#include <sys/event.h>\n#include <sys/mman.h>\n#include <sys/mount.h>\n#include <sys/param.h>\n#include <sys/ptrace.h>\n#include <sys/resource.h>\n#include <sys/select.h>\n#include <sys/signal.h>\n#include <sys/socket.h>\n#include <sys/stat.h>\n#include <sys/time.h>\n#include <sys/types.h>\n#include <sys/un.h>\n#include <sys/utsname.h>\n#include <sys/wait.h>\n#include <net/bpf.h>\n#include <net/if.h>\n#include <net/if_dl.h>\n#include <net/route.h>\n#include <netinet/in.h>\n#include <netinet/icmp6.h>\n#include <netinet/tcp.h>\n\nenum {\n\tsizeofPtr = sizeof(void*),\n};\n\nunion sockaddr_all {\n\tstruct sockaddr s1;\t// this one gets used for fields\n\tstruct sockaddr_in s2;\t// these pad it out\n\tstruct sockaddr_in6 s3;\n\tstruct sockaddr_un s4;\n\tstruct sockaddr_dl s5;\n};\n\nstruct sockaddr_any {\n\tstruct sockaddr addr;\n\tchar pad[sizeof(union sockaddr_all) - sizeof(struct sockaddr)];\n};\n\n// This structure is a duplicate of if_data on FreeBSD 8-STABLE.\n// See /usr/include/net/if.h.\nstruct if_data8 {\n\tu_char  ifi_type;\n\tu_char  ifi_physical;\n\tu_char  ifi_addrlen;\n\tu_char  ifi_hdrlen;\n\tu_char  ifi_link_state;\n\tu_char  ifi_spare_char1;\n\tu_char  ifi_spare_char2;\n\tu_char  ifi_datalen;\n\tu_long  ifi_mtu;\n\tu_long  ifi_metric;\n\tu_long  ifi_baudrate;\n\tu_long  ifi_ipackets;\n\tu_long  ifi_ierrors;\n\tu_long  ifi_opackets;\n\tu_long  ifi_oerrors;\n\tu_long  ifi_collisions;\n\tu_long  ifi_ibytes;\n\tu_long  ifi_obytes;\n\tu_long  ifi_imcasts;\n\tu_long  ifi_omcasts;\n\tu_long  ifi_iqdrops;\n\tu_long  ifi_noproto;\n\tu_long  ifi_hwassist;\n// FIXME: these are now unions, so maybe need to change definitions?\n#undef ifi_epoch\n\ttime_t  ifi_epoch;\n#undef ifi_lastchange\n\tstruct  timeval ifi_lastchange;\n};\n\n// This structure is a duplicate of if_msghdr on FreeBSD 8-STABLE.\n// See /usr/include/net/if.h.\nstruct if_msghdr8 {\n\tu_short ifm_msglen;\n\tu_char  ifm_version;\n\tu_char  ifm_type;\n\tint     ifm_addrs;\n\tint     ifm_flags;\n\tu_short ifm_index;\n\tstruct  if_data8 ifm_data;\n};\n*/\nimport \"C\"\n\n// Machine characteristics\n\nconst (\n\tSizeofPtr      = C.sizeofPtr\n\tSizeofShort    = C.sizeof_short\n\tSizeofInt      = C.sizeof_int\n\tSizeofLong     = C.sizeof_long\n\tSizeofLongLong = C.sizeof_longlong\n)\n\n// Basic types\n\ntype (\n\t_C_short     C.short\n\t_C_int       C.int\n\t_C_long      C.long\n\t_C_long_long C.longlong\n)\n\n// Time\n\ntype Timespec C.struct_timespec\n\ntype Timeval C.struct_timeval\n\n// Processes\n\ntype Rusage C.struct_rusage\n\ntype Rlimit C.struct_rlimit\n\ntype _Gid_t C.gid_t\n\n// Files\n\nconst (\n\t_statfsVersion = C.STATFS_VERSION\n\t_dirblksiz     = C.DIRBLKSIZ\n)\n\ntype Stat_t C.struct_stat\n\ntype stat_freebsd11_t C.struct_freebsd11_stat\n\ntype Statfs_t C.struct_statfs\n\ntype statfs_freebsd11_t C.struct_freebsd11_statfs\n\ntype Flock_t C.struct_flock\n\ntype Dirent C.struct_dirent\n\ntype dirent_freebsd11 C.struct_freebsd11_dirent\n\ntype Fsid C.struct_fsid\n\n// File system limits\n\nconst (\n\tPathMax = C.PATH_MAX\n)\n\n// Advice to Fadvise\n\nconst (\n\tFADV_NORMAL     = C.POSIX_FADV_NORMAL\n\tFADV_RANDOM     = C.POSIX_FADV_RANDOM\n\tFADV_SEQUENTIAL = C.POSIX_FADV_SEQUENTIAL\n\tFADV_WILLNEED   = C.POSIX_FADV_WILLNEED\n\tFADV_DONTNEED   = C.POSIX_FADV_DONTNEED\n\tFADV_NOREUSE    = C.POSIX_FADV_NOREUSE\n)\n\n// Sockets\n\ntype RawSockaddrInet4 C.struct_sockaddr_in\n\ntype RawSockaddrInet6 C.struct_sockaddr_in6\n\ntype RawSockaddrUnix C.struct_sockaddr_un\n\ntype RawSockaddrDatalink C.struct_sockaddr_dl\n\ntype RawSockaddr C.struct_sockaddr\n\ntype RawSockaddrAny C.struct_sockaddr_any\n\ntype _Socklen C.socklen_t\n\ntype Linger C.struct_linger\n\ntype Iovec C.struct_iovec\n\ntype IPMreq C.struct_ip_mreq\n\ntype IPMreqn C.struct_ip_mreqn\n\ntype IPv6Mreq C.struct_ipv6_mreq\n\ntype Msghdr C.struct_msghdr\n\ntype Cmsghdr C.struct_cmsghdr\n\ntype Inet6Pktinfo C.struct_in6_pktinfo\n\ntype IPv6MTUInfo C.struct_ip6_mtuinfo\n\ntype ICMPv6Filter C.struct_icmp6_filter\n\nconst (\n\tSizeofSockaddrInet4    = C.sizeof_struct_sockaddr_in\n\tSizeofSockaddrInet6    = C.sizeof_struct_sockaddr_in6\n\tSizeofSockaddrAny      = C.sizeof_struct_sockaddr_any\n\tSizeofSockaddrUnix     = C.sizeof_struct_sockaddr_un\n\tSizeofSockaddrDatalink = C.sizeof_struct_sockaddr_dl\n\tSizeofLinger           = C.sizeof_struct_linger\n\tSizeofIPMreq           = C.sizeof_struct_ip_mreq\n\tSizeofIPMreqn          = C.sizeof_struct_ip_mreqn\n\tSizeofIPv6Mreq         = C.sizeof_struct_ipv6_mreq\n\tSizeofMsghdr           = C.sizeof_struct_msghdr\n\tSizeofCmsghdr          = C.sizeof_struct_cmsghdr\n\tSizeofInet6Pktinfo     = C.sizeof_struct_in6_pktinfo\n\tSizeofIPv6MTUInfo      = C.sizeof_struct_ip6_mtuinfo\n\tSizeofICMPv6Filter     = C.sizeof_struct_icmp6_filter\n)\n\n// Ptrace requests\n\nconst (\n\tPTRACE_TRACEME = C.PT_TRACE_ME\n\tPTRACE_CONT    = C.PT_CONTINUE\n\tPTRACE_KILL    = C.PT_KILL\n)\n\n// Events (kqueue, kevent)\n\ntype Kevent_t C.struct_kevent_freebsd11\n\n// Select\n\ntype FdSet C.fd_set\n\n// Routing and interface messages\n\nconst (\n\tsizeofIfMsghdr         = C.sizeof_struct_if_msghdr\n\tSizeofIfMsghdr         = C.sizeof_struct_if_msghdr8\n\tsizeofIfData           = C.sizeof_struct_if_data\n\tSizeofIfData           = C.sizeof_struct_if_data8\n\tSizeofIfaMsghdr        = C.sizeof_struct_ifa_msghdr\n\tSizeofIfmaMsghdr       = C.sizeof_struct_ifma_msghdr\n\tSizeofIfAnnounceMsghdr = C.sizeof_struct_if_announcemsghdr\n\tSizeofRtMsghdr         = C.sizeof_struct_rt_msghdr\n\tSizeofRtMetrics        = C.sizeof_struct_rt_metrics\n)\n\ntype ifMsghdr C.struct_if_msghdr\n\ntype IfMsghdr C.struct_if_msghdr8\n\ntype ifData C.struct_if_data\n\ntype IfData C.struct_if_data8\n\ntype IfaMsghdr C.struct_ifa_msghdr\n\ntype IfmaMsghdr C.struct_ifma_msghdr\n\ntype IfAnnounceMsghdr C.struct_if_announcemsghdr\n\ntype RtMsghdr C.struct_rt_msghdr\n\ntype RtMetrics C.struct_rt_metrics\n\n// Berkeley packet filter\n\nconst (\n\tSizeofBpfVersion    = C.sizeof_struct_bpf_version\n\tSizeofBpfStat       = C.sizeof_struct_bpf_stat\n\tSizeofBpfZbuf       = C.sizeof_struct_bpf_zbuf\n\tSizeofBpfProgram    = C.sizeof_struct_bpf_program\n\tSizeofBpfInsn       = C.sizeof_struct_bpf_insn\n\tSizeofBpfHdr        = C.sizeof_struct_bpf_hdr\n\tSizeofBpfZbufHeader = C.sizeof_struct_bpf_zbuf_header\n)\n\ntype BpfVersion C.struct_bpf_version\n\ntype BpfStat C.struct_bpf_stat\n\ntype BpfZbuf C.struct_bpf_zbuf\n\ntype BpfProgram C.struct_bpf_program\n\ntype BpfInsn C.struct_bpf_insn\n\ntype BpfHdr C.struct_bpf_hdr\n\ntype BpfZbufHeader C.struct_bpf_zbuf_header\n\n// Terminal handling\n\ntype Termios C.struct_termios\n\ntype Winsize C.struct_winsize\n\n// fchmodat-like syscalls.\n\nconst (\n\tAT_FDCWD            = C.AT_FDCWD\n\tAT_REMOVEDIR        = C.AT_REMOVEDIR\n\tAT_SYMLINK_FOLLOW   = C.AT_SYMLINK_FOLLOW\n\tAT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW\n)\n\n// poll\n\ntype PollFd C.struct_pollfd\n\nconst (\n\tPOLLERR      = C.POLLERR\n\tPOLLHUP      = C.POLLHUP\n\tPOLLIN       = C.POLLIN\n\tPOLLINIGNEOF = C.POLLINIGNEOF\n\tPOLLNVAL     = C.POLLNVAL\n\tPOLLOUT      = C.POLLOUT\n\tPOLLPRI      = C.POLLPRI\n\tPOLLRDBAND   = C.POLLRDBAND\n\tPOLLRDNORM   = C.POLLRDNORM\n\tPOLLWRBAND   = C.POLLWRBAND\n\tPOLLWRNORM   = C.POLLWRNORM\n)\n\n// Capabilities\n\ntype CapRights C.struct_cap_rights\n\n// Uname\n\ntype Utsname C.struct_utsname\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/types_netbsd.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build ignore\n\n/*\nInput to cgo -godefs.  See README.md\n*/\n\n// +godefs map struct_in_addr [4]byte /* in_addr */\n// +godefs map struct_in6_addr [16]byte /* in6_addr */\n\npackage unix\n\n/*\n#define KERNEL\n#include <dirent.h>\n#include <fcntl.h>\n#include <poll.h>\n#include <signal.h>\n#include <termios.h>\n#include <stdio.h>\n#include <unistd.h>\n#include <sys/param.h>\n#include <sys/types.h>\n#include <sys/event.h>\n#include <sys/mman.h>\n#include <sys/mount.h>\n#include <sys/ptrace.h>\n#include <sys/resource.h>\n#include <sys/select.h>\n#include <sys/signal.h>\n#include <sys/socket.h>\n#include <sys/stat.h>\n#include <sys/sysctl.h>\n#include <sys/time.h>\n#include <sys/uio.h>\n#include <sys/un.h>\n#include <sys/utsname.h>\n#include <sys/wait.h>\n#include <net/bpf.h>\n#include <net/if.h>\n#include <net/if_dl.h>\n#include <net/route.h>\n#include <netinet/in.h>\n#include <netinet/icmp6.h>\n#include <netinet/tcp.h>\n\nenum {\n\tsizeofPtr = sizeof(void*),\n};\n\nunion sockaddr_all {\n\tstruct sockaddr s1;\t// this one gets used for fields\n\tstruct sockaddr_in s2;\t// these pad it out\n\tstruct sockaddr_in6 s3;\n\tstruct sockaddr_un s4;\n\tstruct sockaddr_dl s5;\n};\n\nstruct sockaddr_any {\n\tstruct sockaddr addr;\n\tchar pad[sizeof(union sockaddr_all) - sizeof(struct sockaddr)];\n};\n\n*/\nimport \"C\"\n\n// Machine characteristics\n\nconst (\n\tSizeofPtr      = C.sizeofPtr\n\tSizeofShort    = C.sizeof_short\n\tSizeofInt      = C.sizeof_int\n\tSizeofLong     = C.sizeof_long\n\tSizeofLongLong = C.sizeof_longlong\n)\n\n// Basic types\n\ntype (\n\t_C_short     C.short\n\t_C_int       C.int\n\t_C_long      C.long\n\t_C_long_long C.longlong\n)\n\n// Time\n\ntype Timespec C.struct_timespec\n\ntype Timeval C.struct_timeval\n\n// Processes\n\ntype Rusage C.struct_rusage\n\ntype Rlimit C.struct_rlimit\n\ntype _Gid_t C.gid_t\n\n// Files\n\ntype Stat_t C.struct_stat\n\ntype Statfs_t C.struct_statfs\n\ntype Flock_t C.struct_flock\n\ntype Dirent C.struct_dirent\n\ntype Fsid C.fsid_t\n\n// File system limits\n\nconst (\n\tPathMax = C.PATH_MAX\n)\n\n// Advice to Fadvise\n\nconst (\n\tFADV_NORMAL     = C.POSIX_FADV_NORMAL\n\tFADV_RANDOM     = C.POSIX_FADV_RANDOM\n\tFADV_SEQUENTIAL = C.POSIX_FADV_SEQUENTIAL\n\tFADV_WILLNEED   = C.POSIX_FADV_WILLNEED\n\tFADV_DONTNEED   = C.POSIX_FADV_DONTNEED\n\tFADV_NOREUSE    = C.POSIX_FADV_NOREUSE\n)\n\n// Sockets\n\ntype RawSockaddrInet4 C.struct_sockaddr_in\n\ntype RawSockaddrInet6 C.struct_sockaddr_in6\n\ntype RawSockaddrUnix C.struct_sockaddr_un\n\ntype RawSockaddrDatalink C.struct_sockaddr_dl\n\ntype RawSockaddr C.struct_sockaddr\n\ntype RawSockaddrAny C.struct_sockaddr_any\n\ntype _Socklen C.socklen_t\n\ntype Linger C.struct_linger\n\ntype Iovec C.struct_iovec\n\ntype IPMreq C.struct_ip_mreq\n\ntype IPv6Mreq C.struct_ipv6_mreq\n\ntype Msghdr C.struct_msghdr\n\ntype Cmsghdr C.struct_cmsghdr\n\ntype Inet6Pktinfo C.struct_in6_pktinfo\n\ntype IPv6MTUInfo C.struct_ip6_mtuinfo\n\ntype ICMPv6Filter C.struct_icmp6_filter\n\nconst (\n\tSizeofSockaddrInet4    = C.sizeof_struct_sockaddr_in\n\tSizeofSockaddrInet6    = C.sizeof_struct_sockaddr_in6\n\tSizeofSockaddrAny      = C.sizeof_struct_sockaddr_any\n\tSizeofSockaddrUnix     = C.sizeof_struct_sockaddr_un\n\tSizeofSockaddrDatalink = C.sizeof_struct_sockaddr_dl\n\tSizeofLinger           = C.sizeof_struct_linger\n\tSizeofIPMreq           = C.sizeof_struct_ip_mreq\n\tSizeofIPv6Mreq         = C.sizeof_struct_ipv6_mreq\n\tSizeofMsghdr           = C.sizeof_struct_msghdr\n\tSizeofCmsghdr          = C.sizeof_struct_cmsghdr\n\tSizeofInet6Pktinfo     = C.sizeof_struct_in6_pktinfo\n\tSizeofIPv6MTUInfo      = C.sizeof_struct_ip6_mtuinfo\n\tSizeofICMPv6Filter     = C.sizeof_struct_icmp6_filter\n)\n\n// Ptrace requests\n\nconst (\n\tPTRACE_TRACEME = C.PT_TRACE_ME\n\tPTRACE_CONT    = C.PT_CONTINUE\n\tPTRACE_KILL    = C.PT_KILL\n)\n\n// Events (kqueue, kevent)\n\ntype Kevent_t C.struct_kevent\n\n// Select\n\ntype FdSet C.fd_set\n\n// Routing and interface messages\n\nconst (\n\tSizeofIfMsghdr         = C.sizeof_struct_if_msghdr\n\tSizeofIfData           = C.sizeof_struct_if_data\n\tSizeofIfaMsghdr        = C.sizeof_struct_ifa_msghdr\n\tSizeofIfAnnounceMsghdr = C.sizeof_struct_if_announcemsghdr\n\tSizeofRtMsghdr         = C.sizeof_struct_rt_msghdr\n\tSizeofRtMetrics        = C.sizeof_struct_rt_metrics\n)\n\ntype IfMsghdr C.struct_if_msghdr\n\ntype IfData C.struct_if_data\n\ntype IfaMsghdr C.struct_ifa_msghdr\n\ntype IfAnnounceMsghdr C.struct_if_announcemsghdr\n\ntype RtMsghdr C.struct_rt_msghdr\n\ntype RtMetrics C.struct_rt_metrics\n\ntype Mclpool C.struct_mclpool\n\n// Berkeley packet filter\n\nconst (\n\tSizeofBpfVersion = C.sizeof_struct_bpf_version\n\tSizeofBpfStat    = C.sizeof_struct_bpf_stat\n\tSizeofBpfProgram = C.sizeof_struct_bpf_program\n\tSizeofBpfInsn    = C.sizeof_struct_bpf_insn\n\tSizeofBpfHdr     = C.sizeof_struct_bpf_hdr\n)\n\ntype BpfVersion C.struct_bpf_version\n\ntype BpfStat C.struct_bpf_stat\n\ntype BpfProgram C.struct_bpf_program\n\ntype BpfInsn C.struct_bpf_insn\n\ntype BpfHdr C.struct_bpf_hdr\n\ntype BpfTimeval C.struct_bpf_timeval\n\n// Terminal handling\n\ntype Termios C.struct_termios\n\ntype Winsize C.struct_winsize\n\ntype Ptmget C.struct_ptmget\n\n// fchmodat-like syscalls.\n\nconst (\n\tAT_FDCWD            = C.AT_FDCWD\n\tAT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW\n)\n\n// poll\n\ntype PollFd C.struct_pollfd\n\nconst (\n\tPOLLERR    = C.POLLERR\n\tPOLLHUP    = C.POLLHUP\n\tPOLLIN     = C.POLLIN\n\tPOLLNVAL   = C.POLLNVAL\n\tPOLLOUT    = C.POLLOUT\n\tPOLLPRI    = C.POLLPRI\n\tPOLLRDBAND = C.POLLRDBAND\n\tPOLLRDNORM = C.POLLRDNORM\n\tPOLLWRBAND = C.POLLWRBAND\n\tPOLLWRNORM = C.POLLWRNORM\n)\n\n// Sysctl\n\ntype Sysctlnode C.struct_sysctlnode\n\n// Uname\n\ntype Utsname C.struct_utsname\n\n// Clockinfo\n\nconst SizeofClockinfo = C.sizeof_struct_clockinfo\n\ntype Clockinfo C.struct_clockinfo\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/types_openbsd.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build ignore\n\n/*\nInput to cgo -godefs.  See README.md\n*/\n\n// +godefs map struct_in_addr [4]byte /* in_addr */\n// +godefs map struct_in6_addr [16]byte /* in6_addr */\n\npackage unix\n\n/*\n#define KERNEL\n#include <dirent.h>\n#include <fcntl.h>\n#include <poll.h>\n#include <signal.h>\n#include <termios.h>\n#include <stdio.h>\n#include <unistd.h>\n#include <sys/param.h>\n#include <sys/types.h>\n#include <sys/event.h>\n#include <sys/mman.h>\n#include <sys/mount.h>\n#include <sys/ptrace.h>\n#include <sys/resource.h>\n#include <sys/select.h>\n#include <sys/signal.h>\n#include <sys/socket.h>\n#include <sys/stat.h>\n#include <sys/time.h>\n#include <sys/uio.h>\n#include <sys/un.h>\n#include <sys/utsname.h>\n#include <sys/wait.h>\n#include <uvm/uvmexp.h>\n#include <net/bpf.h>\n#include <net/if.h>\n#include <net/if_dl.h>\n#include <net/route.h>\n#include <netinet/in.h>\n#include <netinet/icmp6.h>\n#include <netinet/tcp.h>\n\nenum {\n\tsizeofPtr = sizeof(void*),\n};\n\nunion sockaddr_all {\n\tstruct sockaddr s1;\t// this one gets used for fields\n\tstruct sockaddr_in s2;\t// these pad it out\n\tstruct sockaddr_in6 s3;\n\tstruct sockaddr_un s4;\n\tstruct sockaddr_dl s5;\n};\n\nstruct sockaddr_any {\n\tstruct sockaddr addr;\n\tchar pad[sizeof(union sockaddr_all) - sizeof(struct sockaddr)];\n};\n\n*/\nimport \"C\"\n\n// Machine characteristics\n\nconst (\n\tSizeofPtr      = C.sizeofPtr\n\tSizeofShort    = C.sizeof_short\n\tSizeofInt      = C.sizeof_int\n\tSizeofLong     = C.sizeof_long\n\tSizeofLongLong = C.sizeof_longlong\n)\n\n// Basic types\n\ntype (\n\t_C_short     C.short\n\t_C_int       C.int\n\t_C_long      C.long\n\t_C_long_long C.longlong\n)\n\n// Time\n\ntype Timespec C.struct_timespec\n\ntype Timeval C.struct_timeval\n\n// Processes\n\ntype Rusage C.struct_rusage\n\ntype Rlimit C.struct_rlimit\n\ntype _Gid_t C.gid_t\n\n// Files\n\ntype Stat_t C.struct_stat\n\ntype Statfs_t C.struct_statfs\n\ntype Flock_t C.struct_flock\n\ntype Dirent C.struct_dirent\n\ntype Fsid C.fsid_t\n\n// File system limits\n\nconst (\n\tPathMax = C.PATH_MAX\n)\n\n// Sockets\n\ntype RawSockaddrInet4 C.struct_sockaddr_in\n\ntype RawSockaddrInet6 C.struct_sockaddr_in6\n\ntype RawSockaddrUnix C.struct_sockaddr_un\n\ntype RawSockaddrDatalink C.struct_sockaddr_dl\n\ntype RawSockaddr C.struct_sockaddr\n\ntype RawSockaddrAny C.struct_sockaddr_any\n\ntype _Socklen C.socklen_t\n\ntype Linger C.struct_linger\n\ntype Iovec C.struct_iovec\n\ntype IPMreq C.struct_ip_mreq\n\ntype IPv6Mreq C.struct_ipv6_mreq\n\ntype Msghdr C.struct_msghdr\n\ntype Cmsghdr C.struct_cmsghdr\n\ntype Inet6Pktinfo C.struct_in6_pktinfo\n\ntype IPv6MTUInfo C.struct_ip6_mtuinfo\n\ntype ICMPv6Filter C.struct_icmp6_filter\n\nconst (\n\tSizeofSockaddrInet4    = C.sizeof_struct_sockaddr_in\n\tSizeofSockaddrInet6    = C.sizeof_struct_sockaddr_in6\n\tSizeofSockaddrAny      = C.sizeof_struct_sockaddr_any\n\tSizeofSockaddrUnix     = C.sizeof_struct_sockaddr_un\n\tSizeofSockaddrDatalink = C.sizeof_struct_sockaddr_dl\n\tSizeofLinger           = C.sizeof_struct_linger\n\tSizeofIPMreq           = C.sizeof_struct_ip_mreq\n\tSizeofIPv6Mreq         = C.sizeof_struct_ipv6_mreq\n\tSizeofMsghdr           = C.sizeof_struct_msghdr\n\tSizeofCmsghdr          = C.sizeof_struct_cmsghdr\n\tSizeofInet6Pktinfo     = C.sizeof_struct_in6_pktinfo\n\tSizeofIPv6MTUInfo      = C.sizeof_struct_ip6_mtuinfo\n\tSizeofICMPv6Filter     = C.sizeof_struct_icmp6_filter\n)\n\n// Ptrace requests\n\nconst (\n\tPTRACE_TRACEME = C.PT_TRACE_ME\n\tPTRACE_CONT    = C.PT_CONTINUE\n\tPTRACE_KILL    = C.PT_KILL\n)\n\n// Events (kqueue, kevent)\n\ntype Kevent_t C.struct_kevent\n\n// Select\n\ntype FdSet C.fd_set\n\n// Routing and interface messages\n\nconst (\n\tSizeofIfMsghdr         = C.sizeof_struct_if_msghdr\n\tSizeofIfData           = C.sizeof_struct_if_data\n\tSizeofIfaMsghdr        = C.sizeof_struct_ifa_msghdr\n\tSizeofIfAnnounceMsghdr = C.sizeof_struct_if_announcemsghdr\n\tSizeofRtMsghdr         = C.sizeof_struct_rt_msghdr\n\tSizeofRtMetrics        = C.sizeof_struct_rt_metrics\n)\n\ntype IfMsghdr C.struct_if_msghdr\n\ntype IfData C.struct_if_data\n\ntype IfaMsghdr C.struct_ifa_msghdr\n\ntype IfAnnounceMsghdr C.struct_if_announcemsghdr\n\ntype RtMsghdr C.struct_rt_msghdr\n\ntype RtMetrics C.struct_rt_metrics\n\ntype Mclpool C.struct_mclpool\n\n// Berkeley packet filter\n\nconst (\n\tSizeofBpfVersion = C.sizeof_struct_bpf_version\n\tSizeofBpfStat    = C.sizeof_struct_bpf_stat\n\tSizeofBpfProgram = C.sizeof_struct_bpf_program\n\tSizeofBpfInsn    = C.sizeof_struct_bpf_insn\n\tSizeofBpfHdr     = C.sizeof_struct_bpf_hdr\n)\n\ntype BpfVersion C.struct_bpf_version\n\ntype BpfStat C.struct_bpf_stat\n\ntype BpfProgram C.struct_bpf_program\n\ntype BpfInsn C.struct_bpf_insn\n\ntype BpfHdr C.struct_bpf_hdr\n\ntype BpfTimeval C.struct_bpf_timeval\n\n// Terminal handling\n\ntype Termios C.struct_termios\n\ntype Winsize C.struct_winsize\n\n// fchmodat-like syscalls.\n\nconst (\n\tAT_FDCWD            = C.AT_FDCWD\n\tAT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW\n)\n\n// poll\n\ntype PollFd C.struct_pollfd\n\nconst (\n\tPOLLERR    = C.POLLERR\n\tPOLLHUP    = C.POLLHUP\n\tPOLLIN     = C.POLLIN\n\tPOLLNVAL   = C.POLLNVAL\n\tPOLLOUT    = C.POLLOUT\n\tPOLLPRI    = C.POLLPRI\n\tPOLLRDBAND = C.POLLRDBAND\n\tPOLLRDNORM = C.POLLRDNORM\n\tPOLLWRBAND = C.POLLWRBAND\n\tPOLLWRNORM = C.POLLWRNORM\n)\n\n// Signal Sets\n\ntype Sigset_t C.sigset_t\n\n// Uname\n\ntype Utsname C.struct_utsname\n\n// Uvmexp\n\nconst SizeofUvmexp = C.sizeof_struct_uvmexp\n\ntype Uvmexp C.struct_uvmexp\n\n// Clockinfo\n\nconst SizeofClockinfo = C.sizeof_struct_clockinfo\n\ntype Clockinfo C.struct_clockinfo\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/types_solaris.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build ignore\n\n/*\nInput to cgo -godefs.  See README.md\n*/\n\n// +godefs map struct_in_addr [4]byte /* in_addr */\n// +godefs map struct_in6_addr [16]byte /* in6_addr */\n\npackage unix\n\n/*\n#define KERNEL\n// These defines ensure that builds done on newer versions of Solaris are\n// backwards-compatible with older versions of Solaris and\n// OpenSolaris-based derivatives.\n#define __USE_SUNOS_SOCKETS__          // msghdr\n#define __USE_LEGACY_PROTOTYPES__      // iovec\n#include <dirent.h>\n#include <fcntl.h>\n#include <netdb.h>\n#include <limits.h>\n#include <poll.h>\n#include <signal.h>\n#include <termios.h>\n#include <termio.h>\n#include <stdio.h>\n#include <unistd.h>\n#include <sys/mman.h>\n#include <sys/mount.h>\n#include <sys/param.h>\n#include <sys/resource.h>\n#include <sys/select.h>\n#include <sys/signal.h>\n#include <sys/socket.h>\n#include <sys/stat.h>\n#include <sys/statvfs.h>\n#include <sys/time.h>\n#include <sys/times.h>\n#include <sys/types.h>\n#include <sys/utsname.h>\n#include <sys/un.h>\n#include <sys/wait.h>\n#include <net/bpf.h>\n#include <net/if.h>\n#include <net/if_dl.h>\n#include <net/route.h>\n#include <netinet/in.h>\n#include <netinet/icmp6.h>\n#include <netinet/tcp.h>\n#include <ustat.h>\n#include <utime.h>\n\nenum {\n\tsizeofPtr = sizeof(void*),\n};\n\nunion sockaddr_all {\n\tstruct sockaddr s1;\t// this one gets used for fields\n\tstruct sockaddr_in s2;\t// these pad it out\n\tstruct sockaddr_in6 s3;\n\tstruct sockaddr_un s4;\n\tstruct sockaddr_dl s5;\n};\n\nstruct sockaddr_any {\n\tstruct sockaddr addr;\n\tchar pad[sizeof(union sockaddr_all) - sizeof(struct sockaddr)];\n};\n\n*/\nimport \"C\"\n\n// Machine characteristics\n\nconst (\n\tSizeofPtr      = C.sizeofPtr\n\tSizeofShort    = C.sizeof_short\n\tSizeofInt      = C.sizeof_int\n\tSizeofLong     = C.sizeof_long\n\tSizeofLongLong = C.sizeof_longlong\n\tPathMax        = C.PATH_MAX\n\tMaxHostNameLen = C.MAXHOSTNAMELEN\n)\n\n// Basic types\n\ntype (\n\t_C_short     C.short\n\t_C_int       C.int\n\t_C_long      C.long\n\t_C_long_long C.longlong\n)\n\n// Time\n\ntype Timespec C.struct_timespec\n\ntype Timeval C.struct_timeval\n\ntype Timeval32 C.struct_timeval32\n\ntype Tms C.struct_tms\n\ntype Utimbuf C.struct_utimbuf\n\n// Processes\n\ntype Rusage C.struct_rusage\n\ntype Rlimit C.struct_rlimit\n\ntype _Gid_t C.gid_t\n\n// Files\n\ntype Stat_t C.struct_stat\n\ntype Flock_t C.struct_flock\n\ntype Dirent C.struct_dirent\n\n// Filesystems\n\ntype _Fsblkcnt_t C.fsblkcnt_t\n\ntype Statvfs_t C.struct_statvfs\n\n// Sockets\n\ntype RawSockaddrInet4 C.struct_sockaddr_in\n\ntype RawSockaddrInet6 C.struct_sockaddr_in6\n\ntype RawSockaddrUnix C.struct_sockaddr_un\n\ntype RawSockaddrDatalink C.struct_sockaddr_dl\n\ntype RawSockaddr C.struct_sockaddr\n\ntype RawSockaddrAny C.struct_sockaddr_any\n\ntype _Socklen C.socklen_t\n\ntype Linger C.struct_linger\n\ntype Iovec C.struct_iovec\n\ntype IPMreq C.struct_ip_mreq\n\ntype IPv6Mreq C.struct_ipv6_mreq\n\ntype Msghdr C.struct_msghdr\n\ntype Cmsghdr C.struct_cmsghdr\n\ntype Inet6Pktinfo C.struct_in6_pktinfo\n\ntype IPv6MTUInfo C.struct_ip6_mtuinfo\n\ntype ICMPv6Filter C.struct_icmp6_filter\n\nconst (\n\tSizeofSockaddrInet4    = C.sizeof_struct_sockaddr_in\n\tSizeofSockaddrInet6    = C.sizeof_struct_sockaddr_in6\n\tSizeofSockaddrAny      = C.sizeof_struct_sockaddr_any\n\tSizeofSockaddrUnix     = C.sizeof_struct_sockaddr_un\n\tSizeofSockaddrDatalink = C.sizeof_struct_sockaddr_dl\n\tSizeofLinger           = C.sizeof_struct_linger\n\tSizeofIPMreq           = C.sizeof_struct_ip_mreq\n\tSizeofIPv6Mreq         = C.sizeof_struct_ipv6_mreq\n\tSizeofMsghdr           = C.sizeof_struct_msghdr\n\tSizeofCmsghdr          = C.sizeof_struct_cmsghdr\n\tSizeofInet6Pktinfo     = C.sizeof_struct_in6_pktinfo\n\tSizeofIPv6MTUInfo      = C.sizeof_struct_ip6_mtuinfo\n\tSizeofICMPv6Filter     = C.sizeof_struct_icmp6_filter\n)\n\n// Select\n\ntype FdSet C.fd_set\n\n// Misc\n\ntype Utsname C.struct_utsname\n\ntype Ustat_t C.struct_ustat\n\nconst (\n\tAT_FDCWD            = C.AT_FDCWD\n\tAT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW\n\tAT_SYMLINK_FOLLOW   = C.AT_SYMLINK_FOLLOW\n\tAT_REMOVEDIR        = C.AT_REMOVEDIR\n\tAT_EACCESS          = C.AT_EACCESS\n)\n\n// Routing and interface messages\n\nconst (\n\tSizeofIfMsghdr  = C.sizeof_struct_if_msghdr\n\tSizeofIfData    = C.sizeof_struct_if_data\n\tSizeofIfaMsghdr = C.sizeof_struct_ifa_msghdr\n\tSizeofRtMsghdr  = C.sizeof_struct_rt_msghdr\n\tSizeofRtMetrics = C.sizeof_struct_rt_metrics\n)\n\ntype IfMsghdr C.struct_if_msghdr\n\ntype IfData C.struct_if_data\n\ntype IfaMsghdr C.struct_ifa_msghdr\n\ntype RtMsghdr C.struct_rt_msghdr\n\ntype RtMetrics C.struct_rt_metrics\n\n// Berkeley packet filter\n\nconst (\n\tSizeofBpfVersion = C.sizeof_struct_bpf_version\n\tSizeofBpfStat    = C.sizeof_struct_bpf_stat\n\tSizeofBpfProgram = C.sizeof_struct_bpf_program\n\tSizeofBpfInsn    = C.sizeof_struct_bpf_insn\n\tSizeofBpfHdr     = C.sizeof_struct_bpf_hdr\n)\n\ntype BpfVersion C.struct_bpf_version\n\ntype BpfStat C.struct_bpf_stat\n\ntype BpfProgram C.struct_bpf_program\n\ntype BpfInsn C.struct_bpf_insn\n\ntype BpfTimeval C.struct_bpf_timeval\n\ntype BpfHdr C.struct_bpf_hdr\n\n// Terminal handling\n\ntype Termios C.struct_termios\n\ntype Termio C.struct_termio\n\ntype Winsize C.struct_winsize\n\n// poll\n\ntype PollFd C.struct_pollfd\n\nconst (\n\tPOLLERR    = C.POLLERR\n\tPOLLHUP    = C.POLLHUP\n\tPOLLIN     = C.POLLIN\n\tPOLLNVAL   = C.POLLNVAL\n\tPOLLOUT    = C.POLLOUT\n\tPOLLPRI    = C.POLLPRI\n\tPOLLRDBAND = C.POLLRDBAND\n\tPOLLRDNORM = C.POLLRDNORM\n\tPOLLWRBAND = C.POLLWRBAND\n\tPOLLWRNORM = C.POLLWRNORM\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/unveil_openbsd.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\n// Unveil implements the unveil syscall.\n// For more information see unveil(2).\n// Note that the special case of blocking further\n// unveil calls is handled by UnveilBlock.\nfunc Unveil(path string, flags string) error {\n\tpathPtr, err := syscall.BytePtrFromString(path)\n\tif err != nil {\n\t\treturn err\n\t}\n\tflagsPtr, err := syscall.BytePtrFromString(flags)\n\tif err != nil {\n\t\treturn err\n\t}\n\t_, _, e := syscall.Syscall(SYS_UNVEIL, uintptr(unsafe.Pointer(pathPtr)), uintptr(unsafe.Pointer(flagsPtr)), 0)\n\tif e != 0 {\n\t\treturn e\n\t}\n\treturn nil\n}\n\n// UnveilBlock blocks future unveil calls.\n// For more information see unveil(2).\nfunc UnveilBlock() error {\n\t// Both pointers must be nil.\n\tvar pathUnsafe, flagsUnsafe unsafe.Pointer\n\t_, _, e := syscall.Syscall(SYS_UNVEIL, uintptr(pathUnsafe), uintptr(flagsUnsafe), 0)\n\tif e != 0 {\n\t\treturn e\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/xattr_bsd.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build freebsd netbsd\n\npackage unix\n\nimport (\n\t\"strings\"\n\t\"unsafe\"\n)\n\n// Derive extattr namespace and attribute name\n\nfunc xattrnamespace(fullattr string) (ns int, attr string, err error) {\n\ts := strings.IndexByte(fullattr, '.')\n\tif s == -1 {\n\t\treturn -1, \"\", ENOATTR\n\t}\n\n\tnamespace := fullattr[0:s]\n\tattr = fullattr[s+1:]\n\n\tswitch namespace {\n\tcase \"user\":\n\t\treturn EXTATTR_NAMESPACE_USER, attr, nil\n\tcase \"system\":\n\t\treturn EXTATTR_NAMESPACE_SYSTEM, attr, nil\n\tdefault:\n\t\treturn -1, \"\", ENOATTR\n\t}\n}\n\nfunc initxattrdest(dest []byte, idx int) (d unsafe.Pointer) {\n\tif len(dest) > idx {\n\t\treturn unsafe.Pointer(&dest[idx])\n\t} else {\n\t\treturn unsafe.Pointer(_zero)\n\t}\n}\n\n// FreeBSD and NetBSD implement their own syscalls to handle extended attributes\n\nfunc Getxattr(file string, attr string, dest []byte) (sz int, err error) {\n\td := initxattrdest(dest, 0)\n\tdestsize := len(dest)\n\n\tnsid, a, err := xattrnamespace(attr)\n\tif err != nil {\n\t\treturn -1, err\n\t}\n\n\treturn ExtattrGetFile(file, nsid, a, uintptr(d), destsize)\n}\n\nfunc Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {\n\td := initxattrdest(dest, 0)\n\tdestsize := len(dest)\n\n\tnsid, a, err := xattrnamespace(attr)\n\tif err != nil {\n\t\treturn -1, err\n\t}\n\n\treturn ExtattrGetFd(fd, nsid, a, uintptr(d), destsize)\n}\n\nfunc Lgetxattr(link string, attr string, dest []byte) (sz int, err error) {\n\td := initxattrdest(dest, 0)\n\tdestsize := len(dest)\n\n\tnsid, a, err := xattrnamespace(attr)\n\tif err != nil {\n\t\treturn -1, err\n\t}\n\n\treturn ExtattrGetLink(link, nsid, a, uintptr(d), destsize)\n}\n\n// flags are unused on FreeBSD\n\nfunc Fsetxattr(fd int, attr string, data []byte, flags int) (err error) {\n\tvar d unsafe.Pointer\n\tif len(data) > 0 {\n\t\td = unsafe.Pointer(&data[0])\n\t}\n\tdatasiz := len(data)\n\n\tnsid, a, err := xattrnamespace(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\n\t_, err = ExtattrSetFd(fd, nsid, a, uintptr(d), datasiz)\n\treturn\n}\n\nfunc Setxattr(file string, attr string, data []byte, flags int) (err error) {\n\tvar d unsafe.Pointer\n\tif len(data) > 0 {\n\t\td = unsafe.Pointer(&data[0])\n\t}\n\tdatasiz := len(data)\n\n\tnsid, a, err := xattrnamespace(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\n\t_, err = ExtattrSetFile(file, nsid, a, uintptr(d), datasiz)\n\treturn\n}\n\nfunc Lsetxattr(link string, attr string, data []byte, flags int) (err error) {\n\tvar d unsafe.Pointer\n\tif len(data) > 0 {\n\t\td = unsafe.Pointer(&data[0])\n\t}\n\tdatasiz := len(data)\n\n\tnsid, a, err := xattrnamespace(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\n\t_, err = ExtattrSetLink(link, nsid, a, uintptr(d), datasiz)\n\treturn\n}\n\nfunc Removexattr(file string, attr string) (err error) {\n\tnsid, a, err := xattrnamespace(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\n\terr = ExtattrDeleteFile(file, nsid, a)\n\treturn\n}\n\nfunc Fremovexattr(fd int, attr string) (err error) {\n\tnsid, a, err := xattrnamespace(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\n\terr = ExtattrDeleteFd(fd, nsid, a)\n\treturn\n}\n\nfunc Lremovexattr(link string, attr string) (err error) {\n\tnsid, a, err := xattrnamespace(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\n\terr = ExtattrDeleteLink(link, nsid, a)\n\treturn\n}\n\nfunc Listxattr(file string, dest []byte) (sz int, err error) {\n\td := initxattrdest(dest, 0)\n\tdestsiz := len(dest)\n\n\t// FreeBSD won't allow you to list xattrs from multiple namespaces\n\ts := 0\n\tfor _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} {\n\t\tstmp, e := ExtattrListFile(file, nsid, uintptr(d), destsiz)\n\n\t\t/* Errors accessing system attrs are ignored so that\n\t\t * we can implement the Linux-like behavior of omitting errors that\n\t\t * we don't have read permissions on\n\t\t *\n\t\t * Linux will still error if we ask for user attributes on a file that\n\t\t * we don't have read permissions on, so don't ignore those errors\n\t\t */\n\t\tif e != nil && e == EPERM && nsid != EXTATTR_NAMESPACE_USER {\n\t\t\tcontinue\n\t\t} else if e != nil {\n\t\t\treturn s, e\n\t\t}\n\n\t\ts += stmp\n\t\tdestsiz -= s\n\t\tif destsiz < 0 {\n\t\t\tdestsiz = 0\n\t\t}\n\t\td = initxattrdest(dest, s)\n\t}\n\n\treturn s, nil\n}\n\nfunc Flistxattr(fd int, dest []byte) (sz int, err error) {\n\td := initxattrdest(dest, 0)\n\tdestsiz := len(dest)\n\n\ts := 0\n\tfor _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} {\n\t\tstmp, e := ExtattrListFd(fd, nsid, uintptr(d), destsiz)\n\t\tif e != nil && e == EPERM && nsid != EXTATTR_NAMESPACE_USER {\n\t\t\tcontinue\n\t\t} else if e != nil {\n\t\t\treturn s, e\n\t\t}\n\n\t\ts += stmp\n\t\tdestsiz -= s\n\t\tif destsiz < 0 {\n\t\t\tdestsiz = 0\n\t\t}\n\t\td = initxattrdest(dest, s)\n\t}\n\n\treturn s, nil\n}\n\nfunc Llistxattr(link string, dest []byte) (sz int, err error) {\n\td := initxattrdest(dest, 0)\n\tdestsiz := len(dest)\n\n\ts := 0\n\tfor _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} {\n\t\tstmp, e := ExtattrListLink(link, nsid, uintptr(d), destsiz)\n\t\tif e != nil && e == EPERM && nsid != EXTATTR_NAMESPACE_USER {\n\t\t\tcontinue\n\t\t} else if e != nil {\n\t\t\treturn s, e\n\t\t}\n\n\t\ts += stmp\n\t\tdestsiz -= s\n\t\tif destsiz < 0 {\n\t\t\tdestsiz = 0\n\t\t}\n\t\td = initxattrdest(dest, s)\n\t}\n\n\treturn s, nil\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_aix_ppc.go",
    "content": "// mkerrors.sh -maix32\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build ppc,aix\n\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs -- -maix32 _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                  = 0x10\n\tAF_BYPASS                     = 0x19\n\tAF_CCITT                      = 0xa\n\tAF_CHAOS                      = 0x5\n\tAF_DATAKIT                    = 0x9\n\tAF_DECnet                     = 0xc\n\tAF_DLI                        = 0xd\n\tAF_ECMA                       = 0x8\n\tAF_HYLINK                     = 0xf\n\tAF_IMPLINK                    = 0x3\n\tAF_INET                       = 0x2\n\tAF_INET6                      = 0x18\n\tAF_INTF                       = 0x14\n\tAF_ISO                        = 0x7\n\tAF_LAT                        = 0xe\n\tAF_LINK                       = 0x12\n\tAF_LOCAL                      = 0x1\n\tAF_MAX                        = 0x1e\n\tAF_NDD                        = 0x17\n\tAF_NETWARE                    = 0x16\n\tAF_NS                         = 0x6\n\tAF_OSI                        = 0x7\n\tAF_PUP                        = 0x4\n\tAF_RIF                        = 0x15\n\tAF_ROUTE                      = 0x11\n\tAF_SNA                        = 0xb\n\tAF_UNIX                       = 0x1\n\tAF_UNSPEC                     = 0x0\n\tALTWERASE                     = 0x400000\n\tARPHRD_802_3                  = 0x6\n\tARPHRD_802_5                  = 0x6\n\tARPHRD_ETHER                  = 0x1\n\tARPHRD_FDDI                   = 0x1\n\tB0                            = 0x0\n\tB110                          = 0x3\n\tB1200                         = 0x9\n\tB134                          = 0x4\n\tB150                          = 0x5\n\tB1800                         = 0xa\n\tB19200                        = 0xe\n\tB200                          = 0x6\n\tB2400                         = 0xb\n\tB300                          = 0x7\n\tB38400                        = 0xf\n\tB4800                         = 0xc\n\tB50                           = 0x1\n\tB600                          = 0x8\n\tB75                           = 0x2\n\tB9600                         = 0xd\n\tBRKINT                        = 0x2\n\tBS0                           = 0x0\n\tBS1                           = 0x1000\n\tBSDLY                         = 0x1000\n\tCAP_AACCT                     = 0x6\n\tCAP_ARM_APPLICATION           = 0x5\n\tCAP_BYPASS_RAC_VMM            = 0x3\n\tCAP_CLEAR                     = 0x0\n\tCAP_CREDENTIALS               = 0x7\n\tCAP_EFFECTIVE                 = 0x1\n\tCAP_EWLM_AGENT                = 0x4\n\tCAP_INHERITABLE               = 0x2\n\tCAP_MAXIMUM                   = 0x7\n\tCAP_NUMA_ATTACH               = 0x2\n\tCAP_PERMITTED                 = 0x3\n\tCAP_PROPAGATE                 = 0x1\n\tCAP_PROPOGATE                 = 0x1\n\tCAP_SET                       = 0x1\n\tCBAUD                         = 0xf\n\tCFLUSH                        = 0xf\n\tCIBAUD                        = 0xf0000\n\tCLOCAL                        = 0x800\n\tCLOCK_MONOTONIC               = 0xa\n\tCLOCK_PROCESS_CPUTIME_ID      = 0xb\n\tCLOCK_REALTIME                = 0x9\n\tCLOCK_THREAD_CPUTIME_ID       = 0xc\n\tCR0                           = 0x0\n\tCR1                           = 0x100\n\tCR2                           = 0x200\n\tCR3                           = 0x300\n\tCRDLY                         = 0x300\n\tCREAD                         = 0x80\n\tCS5                           = 0x0\n\tCS6                           = 0x10\n\tCS7                           = 0x20\n\tCS8                           = 0x30\n\tCSIOCGIFCONF                  = -0x3ff796dc\n\tCSIZE                         = 0x30\n\tCSMAP_DIR                     = \"/usr/lib/nls/csmap/\"\n\tCSTART                        = '\\021'\n\tCSTOP                         = '\\023'\n\tCSTOPB                        = 0x40\n\tCSUSP                         = 0x1a\n\tECHO                          = 0x8\n\tECHOCTL                       = 0x20000\n\tECHOE                         = 0x10\n\tECHOK                         = 0x20\n\tECHOKE                        = 0x80000\n\tECHONL                        = 0x40\n\tECHOPRT                       = 0x40000\n\tECH_ICMPID                    = 0x2\n\tETHERNET_CSMACD               = 0x6\n\tEVENP                         = 0x80\n\tEXCONTINUE                    = 0x0\n\tEXDLOK                        = 0x3\n\tEXIO                          = 0x2\n\tEXPGIO                        = 0x0\n\tEXRESUME                      = 0x2\n\tEXRETURN                      = 0x1\n\tEXSIG                         = 0x4\n\tEXTA                          = 0xe\n\tEXTB                          = 0xf\n\tEXTRAP                        = 0x1\n\tEYEC_RTENTRYA                 = 0x257274656e747241\n\tEYEC_RTENTRYF                 = 0x257274656e747246\n\tE_ACC                         = 0x0\n\tFD_CLOEXEC                    = 0x1\n\tFD_SETSIZE                    = 0xfffe\n\tFF0                           = 0x0\n\tFF1                           = 0x2000\n\tFFDLY                         = 0x2000\n\tFLUSHBAND                     = 0x40\n\tFLUSHLOW                      = 0x8\n\tFLUSHO                        = 0x100000\n\tFLUSHR                        = 0x1\n\tFLUSHRW                       = 0x3\n\tFLUSHW                        = 0x2\n\tF_CLOSEM                      = 0xa\n\tF_DUP2FD                      = 0xe\n\tF_DUPFD                       = 0x0\n\tF_GETFD                       = 0x1\n\tF_GETFL                       = 0x3\n\tF_GETLK                       = 0x5\n\tF_GETLK64                     = 0xb\n\tF_GETOWN                      = 0x8\n\tF_LOCK                        = 0x1\n\tF_OK                          = 0x0\n\tF_RDLCK                       = 0x1\n\tF_SETFD                       = 0x2\n\tF_SETFL                       = 0x4\n\tF_SETLK                       = 0x6\n\tF_SETLK64                     = 0xc\n\tF_SETLKW                      = 0x7\n\tF_SETLKW64                    = 0xd\n\tF_SETOWN                      = 0x9\n\tF_TEST                        = 0x3\n\tF_TLOCK                       = 0x2\n\tF_TSTLK                       = 0xf\n\tF_ULOCK                       = 0x0\n\tF_UNLCK                       = 0x3\n\tF_WRLCK                       = 0x2\n\tHUPCL                         = 0x400\n\tIBSHIFT                       = 0x10\n\tICANON                        = 0x2\n\tICMP6_FILTER                  = 0x26\n\tICMP6_SEC_SEND_DEL            = 0x46\n\tICMP6_SEC_SEND_GET            = 0x47\n\tICMP6_SEC_SEND_SET            = 0x44\n\tICMP6_SEC_SEND_SET_CGA_ADDR   = 0x45\n\tICRNL                         = 0x100\n\tIEXTEN                        = 0x200000\n\tIFA_FIRSTALIAS                = 0x2000\n\tIFA_ROUTE                     = 0x1\n\tIFF_64BIT                     = 0x4000000\n\tIFF_ALLCAST                   = 0x20000\n\tIFF_ALLMULTI                  = 0x200\n\tIFF_BPF                       = 0x8000000\n\tIFF_BRIDGE                    = 0x40000\n\tIFF_BROADCAST                 = 0x2\n\tIFF_CANTCHANGE                = 0x80c52\n\tIFF_CHECKSUM_OFFLOAD          = 0x10000000\n\tIFF_D1                        = 0x8000\n\tIFF_D2                        = 0x4000\n\tIFF_D3                        = 0x2000\n\tIFF_D4                        = 0x1000\n\tIFF_DEBUG                     = 0x4\n\tIFF_DEVHEALTH                 = 0x4000\n\tIFF_DO_HW_LOOPBACK            = 0x10000\n\tIFF_GROUP_ROUTING             = 0x2000000\n\tIFF_IFBUFMGT                  = 0x800000\n\tIFF_LINK0                     = 0x100000\n\tIFF_LINK1                     = 0x200000\n\tIFF_LINK2                     = 0x400000\n\tIFF_LOOPBACK                  = 0x8\n\tIFF_MULTICAST                 = 0x80000\n\tIFF_NOARP                     = 0x80\n\tIFF_NOECHO                    = 0x800\n\tIFF_NOTRAILERS                = 0x20\n\tIFF_OACTIVE                   = 0x400\n\tIFF_POINTOPOINT               = 0x10\n\tIFF_PROMISC                   = 0x100\n\tIFF_PSEG                      = 0x40000000\n\tIFF_RUNNING                   = 0x40\n\tIFF_SIMPLEX                   = 0x800\n\tIFF_SNAP                      = 0x8000\n\tIFF_TCP_DISABLE_CKSUM         = 0x20000000\n\tIFF_TCP_NOCKSUM               = 0x1000000\n\tIFF_UP                        = 0x1\n\tIFF_VIPA                      = 0x80000000\n\tIFNAMSIZ                      = 0x10\n\tIFO_FLUSH                     = 0x1\n\tIFT_1822                      = 0x2\n\tIFT_AAL5                      = 0x31\n\tIFT_ARCNET                    = 0x23\n\tIFT_ARCNETPLUS                = 0x24\n\tIFT_ATM                       = 0x25\n\tIFT_CEPT                      = 0x13\n\tIFT_CLUSTER                   = 0x3e\n\tIFT_DS3                       = 0x1e\n\tIFT_EON                       = 0x19\n\tIFT_ETHER                     = 0x6\n\tIFT_FCS                       = 0x3a\n\tIFT_FDDI                      = 0xf\n\tIFT_FRELAY                    = 0x20\n\tIFT_FRELAYDCE                 = 0x2c\n\tIFT_GIFTUNNEL                 = 0x3c\n\tIFT_HDH1822                   = 0x3\n\tIFT_HF                        = 0x3d\n\tIFT_HIPPI                     = 0x2f\n\tIFT_HSSI                      = 0x2e\n\tIFT_HY                        = 0xe\n\tIFT_IB                        = 0xc7\n\tIFT_ISDNBASIC                 = 0x14\n\tIFT_ISDNPRIMARY               = 0x15\n\tIFT_ISO88022LLC               = 0x29\n\tIFT_ISO88023                  = 0x7\n\tIFT_ISO88024                  = 0x8\n\tIFT_ISO88025                  = 0x9\n\tIFT_ISO88026                  = 0xa\n\tIFT_LAPB                      = 0x10\n\tIFT_LOCALTALK                 = 0x2a\n\tIFT_LOOP                      = 0x18\n\tIFT_MIOX25                    = 0x26\n\tIFT_MODEM                     = 0x30\n\tIFT_NSIP                      = 0x1b\n\tIFT_OTHER                     = 0x1\n\tIFT_P10                       = 0xc\n\tIFT_P80                       = 0xd\n\tIFT_PARA                      = 0x22\n\tIFT_PPP                       = 0x17\n\tIFT_PROPMUX                   = 0x36\n\tIFT_PROPVIRTUAL               = 0x35\n\tIFT_PTPSERIAL                 = 0x16\n\tIFT_RS232                     = 0x21\n\tIFT_SDLC                      = 0x11\n\tIFT_SIP                       = 0x1f\n\tIFT_SLIP                      = 0x1c\n\tIFT_SMDSDXI                   = 0x2b\n\tIFT_SMDSICIP                  = 0x34\n\tIFT_SN                        = 0x38\n\tIFT_SONET                     = 0x27\n\tIFT_SONETPATH                 = 0x32\n\tIFT_SONETVT                   = 0x33\n\tIFT_SP                        = 0x39\n\tIFT_STARLAN                   = 0xb\n\tIFT_T1                        = 0x12\n\tIFT_TUNNEL                    = 0x3b\n\tIFT_ULTRA                     = 0x1d\n\tIFT_V35                       = 0x2d\n\tIFT_VIPA                      = 0x37\n\tIFT_X25                       = 0x5\n\tIFT_X25DDN                    = 0x4\n\tIFT_X25PLE                    = 0x28\n\tIFT_XETHER                    = 0x1a\n\tIGNBRK                        = 0x1\n\tIGNCR                         = 0x80\n\tIGNPAR                        = 0x4\n\tIMAXBEL                       = 0x10000\n\tINLCR                         = 0x40\n\tINPCK                         = 0x10\n\tIN_CLASSA_HOST                = 0xffffff\n\tIN_CLASSA_MAX                 = 0x80\n\tIN_CLASSA_NET                 = 0xff000000\n\tIN_CLASSA_NSHIFT              = 0x18\n\tIN_CLASSB_HOST                = 0xffff\n\tIN_CLASSB_MAX                 = 0x10000\n\tIN_CLASSB_NET                 = 0xffff0000\n\tIN_CLASSB_NSHIFT              = 0x10\n\tIN_CLASSC_HOST                = 0xff\n\tIN_CLASSC_NET                 = 0xffffff00\n\tIN_CLASSC_NSHIFT              = 0x8\n\tIN_CLASSD_HOST                = 0xfffffff\n\tIN_CLASSD_NET                 = 0xf0000000\n\tIN_CLASSD_NSHIFT              = 0x1c\n\tIN_LOOPBACKNET                = 0x7f\n\tIN_USE                        = 0x1\n\tIPPROTO_AH                    = 0x33\n\tIPPROTO_BIP                   = 0x53\n\tIPPROTO_DSTOPTS               = 0x3c\n\tIPPROTO_EGP                   = 0x8\n\tIPPROTO_EON                   = 0x50\n\tIPPROTO_ESP                   = 0x32\n\tIPPROTO_FRAGMENT              = 0x2c\n\tIPPROTO_GGP                   = 0x3\n\tIPPROTO_GIF                   = 0x8c\n\tIPPROTO_GRE                   = 0x2f\n\tIPPROTO_HOPOPTS               = 0x0\n\tIPPROTO_ICMP                  = 0x1\n\tIPPROTO_ICMPV6                = 0x3a\n\tIPPROTO_IDP                   = 0x16\n\tIPPROTO_IGMP                  = 0x2\n\tIPPROTO_IP                    = 0x0\n\tIPPROTO_IPIP                  = 0x4\n\tIPPROTO_IPV6                  = 0x29\n\tIPPROTO_LOCAL                 = 0x3f\n\tIPPROTO_MAX                   = 0x100\n\tIPPROTO_MH                    = 0x87\n\tIPPROTO_NONE                  = 0x3b\n\tIPPROTO_PUP                   = 0xc\n\tIPPROTO_QOS                   = 0x2d\n\tIPPROTO_RAW                   = 0xff\n\tIPPROTO_ROUTING               = 0x2b\n\tIPPROTO_RSVP                  = 0x2e\n\tIPPROTO_SCTP                  = 0x84\n\tIPPROTO_TCP                   = 0x6\n\tIPPROTO_TP                    = 0x1d\n\tIPPROTO_UDP                   = 0x11\n\tIPV6_ADDRFORM                 = 0x16\n\tIPV6_ADDR_PREFERENCES         = 0x4a\n\tIPV6_ADD_MEMBERSHIP           = 0xc\n\tIPV6_AIXRAWSOCKET             = 0x39\n\tIPV6_CHECKSUM                 = 0x27\n\tIPV6_DONTFRAG                 = 0x2d\n\tIPV6_DROP_MEMBERSHIP          = 0xd\n\tIPV6_DSTOPTS                  = 0x36\n\tIPV6_FLOWINFO_FLOWLABEL       = 0xffffff\n\tIPV6_FLOWINFO_PRIFLOW         = 0xfffffff\n\tIPV6_FLOWINFO_PRIORITY        = 0xf000000\n\tIPV6_FLOWINFO_SRFLAG          = 0x10000000\n\tIPV6_FLOWINFO_VERSION         = 0xf0000000\n\tIPV6_HOPLIMIT                 = 0x28\n\tIPV6_HOPOPTS                  = 0x34\n\tIPV6_JOIN_GROUP               = 0xc\n\tIPV6_LEAVE_GROUP              = 0xd\n\tIPV6_MIPDSTOPTS               = 0x36\n\tIPV6_MULTICAST_HOPS           = 0xa\n\tIPV6_MULTICAST_IF             = 0x9\n\tIPV6_MULTICAST_LOOP           = 0xb\n\tIPV6_NEXTHOP                  = 0x30\n\tIPV6_NOPROBE                  = 0x1c\n\tIPV6_PATHMTU                  = 0x2e\n\tIPV6_PKTINFO                  = 0x21\n\tIPV6_PKTOPTIONS               = 0x24\n\tIPV6_PRIORITY_10              = 0xa000000\n\tIPV6_PRIORITY_11              = 0xb000000\n\tIPV6_PRIORITY_12              = 0xc000000\n\tIPV6_PRIORITY_13              = 0xd000000\n\tIPV6_PRIORITY_14              = 0xe000000\n\tIPV6_PRIORITY_15              = 0xf000000\n\tIPV6_PRIORITY_8               = 0x8000000\n\tIPV6_PRIORITY_9               = 0x9000000\n\tIPV6_PRIORITY_BULK            = 0x4000000\n\tIPV6_PRIORITY_CONTROL         = 0x7000000\n\tIPV6_PRIORITY_FILLER          = 0x1000000\n\tIPV6_PRIORITY_INTERACTIVE     = 0x6000000\n\tIPV6_PRIORITY_RESERVED1       = 0x3000000\n\tIPV6_PRIORITY_RESERVED2       = 0x5000000\n\tIPV6_PRIORITY_UNATTENDED      = 0x2000000\n\tIPV6_PRIORITY_UNCHARACTERIZED = 0x0\n\tIPV6_RECVDSTOPTS              = 0x38\n\tIPV6_RECVHOPLIMIT             = 0x29\n\tIPV6_RECVHOPOPTS              = 0x35\n\tIPV6_RECVHOPS                 = 0x22\n\tIPV6_RECVIF                   = 0x1e\n\tIPV6_RECVPATHMTU              = 0x2f\n\tIPV6_RECVPKTINFO              = 0x23\n\tIPV6_RECVRTHDR                = 0x33\n\tIPV6_RECVSRCRT                = 0x1d\n\tIPV6_RECVTCLASS               = 0x2a\n\tIPV6_RTHDR                    = 0x32\n\tIPV6_RTHDRDSTOPTS             = 0x37\n\tIPV6_RTHDR_TYPE_0             = 0x0\n\tIPV6_RTHDR_TYPE_2             = 0x2\n\tIPV6_SENDIF                   = 0x1f\n\tIPV6_SRFLAG_LOOSE             = 0x0\n\tIPV6_SRFLAG_STRICT            = 0x10000000\n\tIPV6_TCLASS                   = 0x2b\n\tIPV6_TOKEN_LENGTH             = 0x40\n\tIPV6_UNICAST_HOPS             = 0x4\n\tIPV6_USE_MIN_MTU              = 0x2c\n\tIPV6_V6ONLY                   = 0x25\n\tIPV6_VERSION                  = 0x60000000\n\tIP_ADDRFORM                   = 0x16\n\tIP_ADD_MEMBERSHIP             = 0xc\n\tIP_ADD_SOURCE_MEMBERSHIP      = 0x3c\n\tIP_BLOCK_SOURCE               = 0x3a\n\tIP_BROADCAST_IF               = 0x10\n\tIP_CACHE_LINE_SIZE            = 0x80\n\tIP_DEFAULT_MULTICAST_LOOP     = 0x1\n\tIP_DEFAULT_MULTICAST_TTL      = 0x1\n\tIP_DF                         = 0x4000\n\tIP_DHCPMODE                   = 0x11\n\tIP_DONTFRAG                   = 0x19\n\tIP_DROP_MEMBERSHIP            = 0xd\n\tIP_DROP_SOURCE_MEMBERSHIP     = 0x3d\n\tIP_FINDPMTU                   = 0x1a\n\tIP_HDRINCL                    = 0x2\n\tIP_INC_MEMBERSHIPS            = 0x14\n\tIP_INIT_MEMBERSHIP            = 0x14\n\tIP_MAXPACKET                  = 0xffff\n\tIP_MF                         = 0x2000\n\tIP_MSS                        = 0x240\n\tIP_MULTICAST_HOPS             = 0xa\n\tIP_MULTICAST_IF               = 0x9\n\tIP_MULTICAST_LOOP             = 0xb\n\tIP_MULTICAST_TTL              = 0xa\n\tIP_OPT                        = 0x1b\n\tIP_OPTIONS                    = 0x1\n\tIP_PMTUAGE                    = 0x1b\n\tIP_RECVDSTADDR                = 0x7\n\tIP_RECVIF                     = 0x14\n\tIP_RECVIFINFO                 = 0xf\n\tIP_RECVINTERFACE              = 0x20\n\tIP_RECVMACHDR                 = 0xe\n\tIP_RECVOPTS                   = 0x5\n\tIP_RECVRETOPTS                = 0x6\n\tIP_RECVTTL                    = 0x22\n\tIP_RETOPTS                    = 0x8\n\tIP_SOURCE_FILTER              = 0x48\n\tIP_TOS                        = 0x3\n\tIP_TTL                        = 0x4\n\tIP_UNBLOCK_SOURCE             = 0x3b\n\tIP_UNICAST_HOPS               = 0x4\n\tISIG                          = 0x1\n\tISTRIP                        = 0x20\n\tIUCLC                         = 0x800\n\tIXANY                         = 0x1000\n\tIXOFF                         = 0x400\n\tIXON                          = 0x200\n\tI_FLUSH                       = 0x20005305\n\tLNOFLSH                       = 0x8000\n\tLOCK_EX                       = 0x2\n\tLOCK_NB                       = 0x4\n\tLOCK_SH                       = 0x1\n\tLOCK_UN                       = 0x8\n\tMADV_DONTNEED                 = 0x4\n\tMADV_NORMAL                   = 0x0\n\tMADV_RANDOM                   = 0x1\n\tMADV_SEQUENTIAL               = 0x2\n\tMADV_SPACEAVAIL               = 0x5\n\tMADV_WILLNEED                 = 0x3\n\tMAP_ANON                      = 0x10\n\tMAP_ANONYMOUS                 = 0x10\n\tMAP_FILE                      = 0x0\n\tMAP_FIXED                     = 0x100\n\tMAP_PRIVATE                   = 0x2\n\tMAP_SHARED                    = 0x1\n\tMAP_TYPE                      = 0xf0\n\tMAP_VARIABLE                  = 0x0\n\tMCL_CURRENT                   = 0x100\n\tMCL_FUTURE                    = 0x200\n\tMSG_ANY                       = 0x4\n\tMSG_ARGEXT                    = 0x400\n\tMSG_BAND                      = 0x2\n\tMSG_COMPAT                    = 0x8000\n\tMSG_CTRUNC                    = 0x20\n\tMSG_DONTROUTE                 = 0x4\n\tMSG_EOR                       = 0x8\n\tMSG_HIPRI                     = 0x1\n\tMSG_MAXIOVLEN                 = 0x10\n\tMSG_MPEG2                     = 0x80\n\tMSG_NONBLOCK                  = 0x4000\n\tMSG_NOSIGNAL                  = 0x100\n\tMSG_OOB                       = 0x1\n\tMSG_PEEK                      = 0x2\n\tMSG_TRUNC                     = 0x10\n\tMSG_WAITALL                   = 0x40\n\tMSG_WAITFORONE                = 0x200\n\tMS_ASYNC                      = 0x10\n\tMS_EINTR                      = 0x80\n\tMS_INVALIDATE                 = 0x40\n\tMS_PER_SEC                    = 0x3e8\n\tMS_SYNC                       = 0x20\n\tNL0                           = 0x0\n\tNL1                           = 0x4000\n\tNL2                           = 0x8000\n\tNL3                           = 0xc000\n\tNLDLY                         = 0x4000\n\tNOFLSH                        = 0x80\n\tNOFLUSH                       = 0x80000000\n\tOCRNL                         = 0x8\n\tOFDEL                         = 0x80\n\tOFILL                         = 0x40\n\tOLCUC                         = 0x2\n\tONLCR                         = 0x4\n\tONLRET                        = 0x20\n\tONOCR                         = 0x10\n\tONOEOT                        = 0x80000\n\tOPOST                         = 0x1\n\tOXTABS                        = 0x40000\n\tO_ACCMODE                     = 0x23\n\tO_APPEND                      = 0x8\n\tO_CIO                         = 0x80\n\tO_CIOR                        = 0x800000000\n\tO_CLOEXEC                     = 0x800000\n\tO_CREAT                       = 0x100\n\tO_DEFER                       = 0x2000\n\tO_DELAY                       = 0x4000\n\tO_DIRECT                      = 0x8000000\n\tO_DIRECTORY                   = 0x80000\n\tO_DSYNC                       = 0x400000\n\tO_EFSOFF                      = 0x400000000\n\tO_EFSON                       = 0x200000000\n\tO_EXCL                        = 0x400\n\tO_EXEC                        = 0x20\n\tO_LARGEFILE                   = 0x4000000\n\tO_NDELAY                      = 0x8000\n\tO_NOCACHE                     = 0x100000\n\tO_NOCTTY                      = 0x800\n\tO_NOFOLLOW                    = 0x1000000\n\tO_NONBLOCK                    = 0x4\n\tO_NONE                        = 0x3\n\tO_NSHARE                      = 0x10000\n\tO_RAW                         = 0x100000000\n\tO_RDONLY                      = 0x0\n\tO_RDWR                        = 0x2\n\tO_RSHARE                      = 0x1000\n\tO_RSYNC                       = 0x200000\n\tO_SEARCH                      = 0x20\n\tO_SNAPSHOT                    = 0x40\n\tO_SYNC                        = 0x10\n\tO_TRUNC                       = 0x200\n\tO_TTY_INIT                    = 0x0\n\tO_WRONLY                      = 0x1\n\tPARENB                        = 0x100\n\tPAREXT                        = 0x100000\n\tPARMRK                        = 0x8\n\tPARODD                        = 0x200\n\tPENDIN                        = 0x20000000\n\tPRIO_PGRP                     = 0x1\n\tPRIO_PROCESS                  = 0x0\n\tPRIO_USER                     = 0x2\n\tPROT_EXEC                     = 0x4\n\tPROT_NONE                     = 0x0\n\tPROT_READ                     = 0x1\n\tPROT_WRITE                    = 0x2\n\tPR_64BIT                      = 0x20\n\tPR_ADDR                       = 0x2\n\tPR_ARGEXT                     = 0x400\n\tPR_ATOMIC                     = 0x1\n\tPR_CONNREQUIRED               = 0x4\n\tPR_FASTHZ                     = 0x5\n\tPR_INP                        = 0x40\n\tPR_INTRLEVEL                  = 0x8000\n\tPR_MLS                        = 0x100\n\tPR_MLS_1_LABEL                = 0x200\n\tPR_NOEOR                      = 0x4000\n\tPR_RIGHTS                     = 0x10\n\tPR_SLOWHZ                     = 0x2\n\tPR_WANTRCVD                   = 0x8\n\tRLIMIT_AS                     = 0x6\n\tRLIMIT_CORE                   = 0x4\n\tRLIMIT_CPU                    = 0x0\n\tRLIMIT_DATA                   = 0x2\n\tRLIMIT_FSIZE                  = 0x1\n\tRLIMIT_NOFILE                 = 0x7\n\tRLIMIT_NPROC                  = 0x9\n\tRLIMIT_RSS                    = 0x5\n\tRLIMIT_STACK                  = 0x3\n\tRLIM_INFINITY                 = 0x7fffffff\n\tRTAX_AUTHOR                   = 0x6\n\tRTAX_BRD                      = 0x7\n\tRTAX_DST                      = 0x0\n\tRTAX_GATEWAY                  = 0x1\n\tRTAX_GENMASK                  = 0x3\n\tRTAX_IFA                      = 0x5\n\tRTAX_IFP                      = 0x4\n\tRTAX_MAX                      = 0x8\n\tRTAX_NETMASK                  = 0x2\n\tRTA_AUTHOR                    = 0x40\n\tRTA_BRD                       = 0x80\n\tRTA_DOWNSTREAM                = 0x100\n\tRTA_DST                       = 0x1\n\tRTA_GATEWAY                   = 0x2\n\tRTA_GENMASK                   = 0x8\n\tRTA_IFA                       = 0x20\n\tRTA_IFP                       = 0x10\n\tRTA_NETMASK                   = 0x4\n\tRTC_IA64                      = 0x3\n\tRTC_POWER                     = 0x1\n\tRTC_POWER_PC                  = 0x2\n\tRTF_ACTIVE_DGD                = 0x1000000\n\tRTF_BCE                       = 0x80000\n\tRTF_BLACKHOLE                 = 0x1000\n\tRTF_BROADCAST                 = 0x400000\n\tRTF_BUL                       = 0x2000\n\tRTF_CLONE                     = 0x10000\n\tRTF_CLONED                    = 0x20000\n\tRTF_CLONING                   = 0x100\n\tRTF_DONE                      = 0x40\n\tRTF_DYNAMIC                   = 0x10\n\tRTF_FREE_IN_PROG              = 0x4000000\n\tRTF_GATEWAY                   = 0x2\n\tRTF_HOST                      = 0x4\n\tRTF_LLINFO                    = 0x400\n\tRTF_LOCAL                     = 0x200000\n\tRTF_MASK                      = 0x80\n\tRTF_MODIFIED                  = 0x20\n\tRTF_MULTICAST                 = 0x800000\n\tRTF_PERMANENT6                = 0x8000000\n\tRTF_PINNED                    = 0x100000\n\tRTF_PROTO1                    = 0x8000\n\tRTF_PROTO2                    = 0x4000\n\tRTF_PROTO3                    = 0x40000\n\tRTF_REJECT                    = 0x8\n\tRTF_SMALLMTU                  = 0x40000\n\tRTF_STATIC                    = 0x800\n\tRTF_STOPSRCH                  = 0x2000000\n\tRTF_UNREACHABLE               = 0x10000000\n\tRTF_UP                        = 0x1\n\tRTF_XRESOLVE                  = 0x200\n\tRTM_ADD                       = 0x1\n\tRTM_CHANGE                    = 0x3\n\tRTM_DELADDR                   = 0xd\n\tRTM_DELETE                    = 0x2\n\tRTM_EXPIRE                    = 0xf\n\tRTM_GET                       = 0x4\n\tRTM_GETNEXT                   = 0x11\n\tRTM_IFINFO                    = 0xe\n\tRTM_LOCK                      = 0x8\n\tRTM_LOSING                    = 0x5\n\tRTM_MISS                      = 0x7\n\tRTM_NEWADDR                   = 0xc\n\tRTM_OLDADD                    = 0x9\n\tRTM_OLDDEL                    = 0xa\n\tRTM_REDIRECT                  = 0x6\n\tRTM_RESOLVE                   = 0xb\n\tRTM_RTLOST                    = 0x10\n\tRTM_RTTUNIT                   = 0xf4240\n\tRTM_SAMEADDR                  = 0x12\n\tRTM_SET                       = 0x13\n\tRTM_VERSION                   = 0x2\n\tRTM_VERSION_GR                = 0x4\n\tRTM_VERSION_GR_COMPAT         = 0x3\n\tRTM_VERSION_POLICY            = 0x5\n\tRTM_VERSION_POLICY_EXT        = 0x6\n\tRTM_VERSION_POLICY_PRFN       = 0x7\n\tRTV_EXPIRE                    = 0x4\n\tRTV_HOPCOUNT                  = 0x2\n\tRTV_MTU                       = 0x1\n\tRTV_RPIPE                     = 0x8\n\tRTV_RTT                       = 0x40\n\tRTV_RTTVAR                    = 0x80\n\tRTV_SPIPE                     = 0x10\n\tRTV_SSTHRESH                  = 0x20\n\tRUSAGE_CHILDREN               = -0x1\n\tRUSAGE_SELF                   = 0x0\n\tRUSAGE_THREAD                 = 0x1\n\tSCM_RIGHTS                    = 0x1\n\tSHUT_RD                       = 0x0\n\tSHUT_RDWR                     = 0x2\n\tSHUT_WR                       = 0x1\n\tSIGMAX64                      = 0xff\n\tSIGQUEUE_MAX                  = 0x20\n\tSIOCADDIFVIPA                 = 0x20006942\n\tSIOCADDMTU                    = -0x7ffb9690\n\tSIOCADDMULTI                  = -0x7fdf96cf\n\tSIOCADDNETID                  = -0x7fd796a9\n\tSIOCADDRT                     = -0x7fcf8df6\n\tSIOCAIFADDR                   = -0x7fbf96e6\n\tSIOCATMARK                    = 0x40047307\n\tSIOCDARP                      = -0x7fb396e0\n\tSIOCDELIFVIPA                 = 0x20006943\n\tSIOCDELMTU                    = -0x7ffb968f\n\tSIOCDELMULTI                  = -0x7fdf96ce\n\tSIOCDELPMTU                   = -0x7fd78ff6\n\tSIOCDELRT                     = -0x7fcf8df5\n\tSIOCDIFADDR                   = -0x7fd796e7\n\tSIOCDNETOPT                   = -0x3ffe9680\n\tSIOCDX25XLATE                 = -0x7fd7969b\n\tSIOCFIFADDR                   = -0x7fdf966d\n\tSIOCGARP                      = -0x3fb396da\n\tSIOCGETMTUS                   = 0x2000696f\n\tSIOCGETSGCNT                  = -0x3feb8acc\n\tSIOCGETVIFCNT                 = -0x3feb8acd\n\tSIOCGHIWAT                    = 0x40047301\n\tSIOCGIFADDR                   = -0x3fd796df\n\tSIOCGIFADDRS                  = 0x2000698c\n\tSIOCGIFBAUDRATE               = -0x3fd79693\n\tSIOCGIFBRDADDR                = -0x3fd796dd\n\tSIOCGIFCONF                   = -0x3ff796bb\n\tSIOCGIFCONFGLOB               = -0x3ff79670\n\tSIOCGIFDSTADDR                = -0x3fd796de\n\tSIOCGIFFLAGS                  = -0x3fd796ef\n\tSIOCGIFGIDLIST                = 0x20006968\n\tSIOCGIFHWADDR                 = -0x3fab966b\n\tSIOCGIFMETRIC                 = -0x3fd796e9\n\tSIOCGIFMTU                    = -0x3fd796aa\n\tSIOCGIFNETMASK                = -0x3fd796db\n\tSIOCGIFOPTIONS                = -0x3fd796d6\n\tSIOCGISNO                     = -0x3fd79695\n\tSIOCGLOADF                    = -0x3ffb967e\n\tSIOCGLOWAT                    = 0x40047303\n\tSIOCGNETOPT                   = -0x3ffe96a5\n\tSIOCGNETOPT1                  = -0x3fdf967f\n\tSIOCGNMTUS                    = 0x2000696e\n\tSIOCGPGRP                     = 0x40047309\n\tSIOCGSIZIFCONF                = 0x4004696a\n\tSIOCGSRCFILTER                = -0x3fe796cb\n\tSIOCGTUNEPHASE                = -0x3ffb9676\n\tSIOCGX25XLATE                 = -0x3fd7969c\n\tSIOCIFATTACH                  = -0x7fdf9699\n\tSIOCIFDETACH                  = -0x7fdf969a\n\tSIOCIFGETPKEY                 = -0x7fdf969b\n\tSIOCIF_ATM_DARP               = -0x7fdf9683\n\tSIOCIF_ATM_DUMPARP            = -0x7fdf9685\n\tSIOCIF_ATM_GARP               = -0x7fdf9682\n\tSIOCIF_ATM_IDLE               = -0x7fdf9686\n\tSIOCIF_ATM_SARP               = -0x7fdf9681\n\tSIOCIF_ATM_SNMPARP            = -0x7fdf9687\n\tSIOCIF_ATM_SVC                = -0x7fdf9684\n\tSIOCIF_ATM_UBR                = -0x7fdf9688\n\tSIOCIF_DEVHEALTH              = -0x7ffb966c\n\tSIOCIF_IB_ARP_INCOMP          = -0x7fdf9677\n\tSIOCIF_IB_ARP_TIMER           = -0x7fdf9678\n\tSIOCIF_IB_CLEAR_PINFO         = -0x3fdf966f\n\tSIOCIF_IB_DEL_ARP             = -0x7fdf967f\n\tSIOCIF_IB_DEL_PINFO           = -0x3fdf9670\n\tSIOCIF_IB_DUMP_ARP            = -0x7fdf9680\n\tSIOCIF_IB_GET_ARP             = -0x7fdf967e\n\tSIOCIF_IB_GET_INFO            = -0x3f879675\n\tSIOCIF_IB_GET_STATS           = -0x3f879672\n\tSIOCIF_IB_NOTIFY_ADDR_REM     = -0x3f87966a\n\tSIOCIF_IB_RESET_STATS         = -0x3f879671\n\tSIOCIF_IB_RESIZE_CQ           = -0x7fdf9679\n\tSIOCIF_IB_SET_ARP             = -0x7fdf967d\n\tSIOCIF_IB_SET_PKEY            = -0x7fdf967c\n\tSIOCIF_IB_SET_PORT            = -0x7fdf967b\n\tSIOCIF_IB_SET_QKEY            = -0x7fdf9676\n\tSIOCIF_IB_SET_QSIZE           = -0x7fdf967a\n\tSIOCLISTIFVIPA                = 0x20006944\n\tSIOCSARP                      = -0x7fb396e2\n\tSIOCSHIWAT                    = 0x80047300\n\tSIOCSIFADDR                   = -0x7fd796f4\n\tSIOCSIFADDRORI                = -0x7fdb9673\n\tSIOCSIFBRDADDR                = -0x7fd796ed\n\tSIOCSIFDSTADDR                = -0x7fd796f2\n\tSIOCSIFFLAGS                  = -0x7fd796f0\n\tSIOCSIFGIDLIST                = 0x20006969\n\tSIOCSIFMETRIC                 = -0x7fd796e8\n\tSIOCSIFMTU                    = -0x7fd796a8\n\tSIOCSIFNETDUMP                = -0x7fd796e4\n\tSIOCSIFNETMASK                = -0x7fd796ea\n\tSIOCSIFOPTIONS                = -0x7fd796d7\n\tSIOCSIFSUBCHAN                = -0x7fd796e5\n\tSIOCSISNO                     = -0x7fd79694\n\tSIOCSLOADF                    = -0x3ffb967d\n\tSIOCSLOWAT                    = 0x80047302\n\tSIOCSNETOPT                   = -0x7ffe96a6\n\tSIOCSPGRP                     = 0x80047308\n\tSIOCSX25XLATE                 = -0x7fd7969d\n\tSOCK_CONN_DGRAM               = 0x6\n\tSOCK_DGRAM                    = 0x2\n\tSOCK_RAW                      = 0x3\n\tSOCK_RDM                      = 0x4\n\tSOCK_SEQPACKET                = 0x5\n\tSOCK_STREAM                   = 0x1\n\tSOL_SOCKET                    = 0xffff\n\tSOMAXCONN                     = 0x400\n\tSO_ACCEPTCONN                 = 0x2\n\tSO_AUDIT                      = 0x8000\n\tSO_BROADCAST                  = 0x20\n\tSO_CKSUMRECV                  = 0x800\n\tSO_DEBUG                      = 0x1\n\tSO_DONTROUTE                  = 0x10\n\tSO_ERROR                      = 0x1007\n\tSO_KEEPALIVE                  = 0x8\n\tSO_KERNACCEPT                 = 0x2000\n\tSO_LINGER                     = 0x80\n\tSO_NOMULTIPATH                = 0x4000\n\tSO_NOREUSEADDR                = 0x1000\n\tSO_OOBINLINE                  = 0x100\n\tSO_PEERID                     = 0x1009\n\tSO_RCVBUF                     = 0x1002\n\tSO_RCVLOWAT                   = 0x1004\n\tSO_RCVTIMEO                   = 0x1006\n\tSO_REUSEADDR                  = 0x4\n\tSO_REUSEPORT                  = 0x200\n\tSO_SNDBUF                     = 0x1001\n\tSO_SNDLOWAT                   = 0x1003\n\tSO_SNDTIMEO                   = 0x1005\n\tSO_TIMESTAMPNS                = 0x100a\n\tSO_TYPE                       = 0x1008\n\tSO_USELOOPBACK                = 0x40\n\tSO_USE_IFBUFS                 = 0x400\n\tS_BANDURG                     = 0x400\n\tS_EMODFMT                     = 0x3c000000\n\tS_ENFMT                       = 0x400\n\tS_ERROR                       = 0x100\n\tS_HANGUP                      = 0x200\n\tS_HIPRI                       = 0x2\n\tS_ICRYPTO                     = 0x80000\n\tS_IEXEC                       = 0x40\n\tS_IFBLK                       = 0x6000\n\tS_IFCHR                       = 0x2000\n\tS_IFDIR                       = 0x4000\n\tS_IFIFO                       = 0x1000\n\tS_IFJOURNAL                   = 0x10000\n\tS_IFLNK                       = 0xa000\n\tS_IFMPX                       = 0x2200\n\tS_IFMT                        = 0xf000\n\tS_IFPDIR                      = 0x4000000\n\tS_IFPSDIR                     = 0x8000000\n\tS_IFPSSDIR                    = 0xc000000\n\tS_IFREG                       = 0x8000\n\tS_IFSOCK                      = 0xc000\n\tS_IFSYSEA                     = 0x30000000\n\tS_INPUT                       = 0x1\n\tS_IREAD                       = 0x100\n\tS_IRGRP                       = 0x20\n\tS_IROTH                       = 0x4\n\tS_IRUSR                       = 0x100\n\tS_IRWXG                       = 0x38\n\tS_IRWXO                       = 0x7\n\tS_IRWXU                       = 0x1c0\n\tS_ISGID                       = 0x400\n\tS_ISUID                       = 0x800\n\tS_ISVTX                       = 0x200\n\tS_ITCB                        = 0x1000000\n\tS_ITP                         = 0x800000\n\tS_IWGRP                       = 0x10\n\tS_IWOTH                       = 0x2\n\tS_IWRITE                      = 0x80\n\tS_IWUSR                       = 0x80\n\tS_IXACL                       = 0x2000000\n\tS_IXATTR                      = 0x40000\n\tS_IXGRP                       = 0x8\n\tS_IXINTERFACE                 = 0x100000\n\tS_IXMOD                       = 0x40000000\n\tS_IXOTH                       = 0x1\n\tS_IXUSR                       = 0x40\n\tS_MSG                         = 0x8\n\tS_OUTPUT                      = 0x4\n\tS_RDBAND                      = 0x20\n\tS_RDNORM                      = 0x10\n\tS_RESERVED1                   = 0x20000\n\tS_RESERVED2                   = 0x200000\n\tS_RESERVED3                   = 0x400000\n\tS_RESERVED4                   = 0x80000000\n\tS_RESFMT1                     = 0x10000000\n\tS_RESFMT10                    = 0x34000000\n\tS_RESFMT11                    = 0x38000000\n\tS_RESFMT12                    = 0x3c000000\n\tS_RESFMT2                     = 0x14000000\n\tS_RESFMT3                     = 0x18000000\n\tS_RESFMT4                     = 0x1c000000\n\tS_RESFMT5                     = 0x20000000\n\tS_RESFMT6                     = 0x24000000\n\tS_RESFMT7                     = 0x28000000\n\tS_RESFMT8                     = 0x2c000000\n\tS_WRBAND                      = 0x80\n\tS_WRNORM                      = 0x40\n\tTAB0                          = 0x0\n\tTAB1                          = 0x400\n\tTAB2                          = 0x800\n\tTAB3                          = 0xc00\n\tTABDLY                        = 0xc00\n\tTCFLSH                        = 0x540c\n\tTCGETA                        = 0x5405\n\tTCGETS                        = 0x5401\n\tTCIFLUSH                      = 0x0\n\tTCIOFF                        = 0x2\n\tTCIOFLUSH                     = 0x2\n\tTCION                         = 0x3\n\tTCOFLUSH                      = 0x1\n\tTCOOFF                        = 0x0\n\tTCOON                         = 0x1\n\tTCP_24DAYS_WORTH_OF_SLOWTICKS = 0x3f4800\n\tTCP_ACLADD                    = 0x23\n\tTCP_ACLBIND                   = 0x26\n\tTCP_ACLCLEAR                  = 0x22\n\tTCP_ACLDEL                    = 0x24\n\tTCP_ACLDENY                   = 0x8\n\tTCP_ACLFLUSH                  = 0x21\n\tTCP_ACLGID                    = 0x1\n\tTCP_ACLLS                     = 0x25\n\tTCP_ACLSUBNET                 = 0x4\n\tTCP_ACLUID                    = 0x2\n\tTCP_CWND_DF                   = 0x16\n\tTCP_CWND_IF                   = 0x15\n\tTCP_DELAY_ACK_FIN             = 0x2\n\tTCP_DELAY_ACK_SYN             = 0x1\n\tTCP_FASTNAME                  = 0x101080a\n\tTCP_KEEPCNT                   = 0x13\n\tTCP_KEEPIDLE                  = 0x11\n\tTCP_KEEPINTVL                 = 0x12\n\tTCP_LSPRIV                    = 0x29\n\tTCP_LUID                      = 0x20\n\tTCP_MAXBURST                  = 0x8\n\tTCP_MAXDF                     = 0x64\n\tTCP_MAXIF                     = 0x64\n\tTCP_MAXSEG                    = 0x2\n\tTCP_MAXWIN                    = 0xffff\n\tTCP_MAXWINDOWSCALE            = 0xe\n\tTCP_MAX_SACK                  = 0x4\n\tTCP_MSS                       = 0x5b4\n\tTCP_NODELAY                   = 0x1\n\tTCP_NODELAYACK                = 0x14\n\tTCP_NOREDUCE_CWND_EXIT_FRXMT  = 0x19\n\tTCP_NOREDUCE_CWND_IN_FRXMT    = 0x18\n\tTCP_NOTENTER_SSTART           = 0x17\n\tTCP_OPT                       = 0x19\n\tTCP_RFC1323                   = 0x4\n\tTCP_SETPRIV                   = 0x27\n\tTCP_STDURG                    = 0x10\n\tTCP_TIMESTAMP_OPTLEN          = 0xc\n\tTCP_UNSETPRIV                 = 0x28\n\tTCSAFLUSH                     = 0x2\n\tTCSBRK                        = 0x5409\n\tTCSETA                        = 0x5406\n\tTCSETAF                       = 0x5408\n\tTCSETAW                       = 0x5407\n\tTCSETS                        = 0x5402\n\tTCSETSF                       = 0x5404\n\tTCSETSW                       = 0x5403\n\tTCXONC                        = 0x540b\n\tTIMER_ABSTIME                 = 0x3e7\n\tTIMER_MAX                     = 0x20\n\tTIOC                          = 0x5400\n\tTIOCCBRK                      = 0x2000747a\n\tTIOCCDTR                      = 0x20007478\n\tTIOCCONS                      = 0x80047462\n\tTIOCEXCL                      = 0x2000740d\n\tTIOCFLUSH                     = 0x80047410\n\tTIOCGETC                      = 0x40067412\n\tTIOCGETD                      = 0x40047400\n\tTIOCGETP                      = 0x40067408\n\tTIOCGLTC                      = 0x40067474\n\tTIOCGPGRP                     = 0x40047477\n\tTIOCGSID                      = 0x40047448\n\tTIOCGSIZE                     = 0x40087468\n\tTIOCGWINSZ                    = 0x40087468\n\tTIOCHPCL                      = 0x20007402\n\tTIOCLBIC                      = 0x8004747e\n\tTIOCLBIS                      = 0x8004747f\n\tTIOCLGET                      = 0x4004747c\n\tTIOCLSET                      = 0x8004747d\n\tTIOCMBIC                      = 0x8004746b\n\tTIOCMBIS                      = 0x8004746c\n\tTIOCMGET                      = 0x4004746a\n\tTIOCMIWAIT                    = 0x80047464\n\tTIOCMODG                      = 0x40047403\n\tTIOCMODS                      = 0x80047404\n\tTIOCMSET                      = 0x8004746d\n\tTIOCM_CAR                     = 0x40\n\tTIOCM_CD                      = 0x40\n\tTIOCM_CTS                     = 0x20\n\tTIOCM_DSR                     = 0x100\n\tTIOCM_DTR                     = 0x2\n\tTIOCM_LE                      = 0x1\n\tTIOCM_RI                      = 0x80\n\tTIOCM_RNG                     = 0x80\n\tTIOCM_RTS                     = 0x4\n\tTIOCM_SR                      = 0x10\n\tTIOCM_ST                      = 0x8\n\tTIOCNOTTY                     = 0x20007471\n\tTIOCNXCL                      = 0x2000740e\n\tTIOCOUTQ                      = 0x40047473\n\tTIOCPKT                       = 0x80047470\n\tTIOCPKT_DATA                  = 0x0\n\tTIOCPKT_DOSTOP                = 0x20\n\tTIOCPKT_FLUSHREAD             = 0x1\n\tTIOCPKT_FLUSHWRITE            = 0x2\n\tTIOCPKT_NOSTOP                = 0x10\n\tTIOCPKT_START                 = 0x8\n\tTIOCPKT_STOP                  = 0x4\n\tTIOCREMOTE                    = 0x80047469\n\tTIOCSBRK                      = 0x2000747b\n\tTIOCSDTR                      = 0x20007479\n\tTIOCSETC                      = 0x80067411\n\tTIOCSETD                      = 0x80047401\n\tTIOCSETN                      = 0x8006740a\n\tTIOCSETP                      = 0x80067409\n\tTIOCSLTC                      = 0x80067475\n\tTIOCSPGRP                     = 0x80047476\n\tTIOCSSIZE                     = 0x80087467\n\tTIOCSTART                     = 0x2000746e\n\tTIOCSTI                       = 0x80017472\n\tTIOCSTOP                      = 0x2000746f\n\tTIOCSWINSZ                    = 0x80087467\n\tTIOCUCNTL                     = 0x80047466\n\tTOSTOP                        = 0x10000\n\tUTIME_NOW                     = -0x2\n\tUTIME_OMIT                    = -0x3\n\tVDISCRD                       = 0xc\n\tVDSUSP                        = 0xa\n\tVEOF                          = 0x4\n\tVEOL                          = 0x5\n\tVEOL2                         = 0x6\n\tVERASE                        = 0x2\n\tVINTR                         = 0x0\n\tVKILL                         = 0x3\n\tVLNEXT                        = 0xe\n\tVMIN                          = 0x4\n\tVQUIT                         = 0x1\n\tVREPRINT                      = 0xb\n\tVSTART                        = 0x7\n\tVSTOP                         = 0x8\n\tVSTRT                         = 0x7\n\tVSUSP                         = 0x9\n\tVT0                           = 0x0\n\tVT1                           = 0x8000\n\tVTDELAY                       = 0x2000\n\tVTDLY                         = 0x8000\n\tVTIME                         = 0x5\n\tVWERSE                        = 0xd\n\tWPARSTART                     = 0x1\n\tWPARSTOP                      = 0x2\n\tWPARTTYNAME                   = \"Global\"\n\tXCASE                         = 0x4\n\tXTABS                         = 0xc00\n\t_FDATAFLUSH                   = 0x2000000000\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x43)\n\tEADDRNOTAVAIL   = syscall.Errno(0x44)\n\tEAFNOSUPPORT    = syscall.Errno(0x42)\n\tEAGAIN          = syscall.Errno(0xb)\n\tEALREADY        = syscall.Errno(0x38)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADMSG         = syscall.Errno(0x78)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x75)\n\tECHILD          = syscall.Errno(0xa)\n\tECHRNG          = syscall.Errno(0x25)\n\tECLONEME        = syscall.Errno(0x52)\n\tECONNABORTED    = syscall.Errno(0x48)\n\tECONNREFUSED    = syscall.Errno(0x4f)\n\tECONNRESET      = syscall.Errno(0x49)\n\tECORRUPT        = syscall.Errno(0x59)\n\tEDEADLK         = syscall.Errno(0x2d)\n\tEDESTADDREQ     = syscall.Errno(0x3a)\n\tEDESTADDRREQ    = syscall.Errno(0x3a)\n\tEDIST           = syscall.Errno(0x35)\n\tEDOM            = syscall.Errno(0x21)\n\tEDQUOT          = syscall.Errno(0x58)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFORMAT         = syscall.Errno(0x30)\n\tEHOSTDOWN       = syscall.Errno(0x50)\n\tEHOSTUNREACH    = syscall.Errno(0x51)\n\tEIDRM           = syscall.Errno(0x24)\n\tEILSEQ          = syscall.Errno(0x74)\n\tEINPROGRESS     = syscall.Errno(0x37)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEISCONN         = syscall.Errno(0x4b)\n\tEISDIR          = syscall.Errno(0x15)\n\tEL2HLT          = syscall.Errno(0x2c)\n\tEL2NSYNC        = syscall.Errno(0x26)\n\tEL3HLT          = syscall.Errno(0x27)\n\tEL3RST          = syscall.Errno(0x28)\n\tELNRNG          = syscall.Errno(0x29)\n\tELOOP           = syscall.Errno(0x55)\n\tEMEDIA          = syscall.Errno(0x6e)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x3b)\n\tEMULTIHOP       = syscall.Errno(0x7d)\n\tENAMETOOLONG    = syscall.Errno(0x56)\n\tENETDOWN        = syscall.Errno(0x45)\n\tENETRESET       = syscall.Errno(0x47)\n\tENETUNREACH     = syscall.Errno(0x46)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x70)\n\tENOBUFS         = syscall.Errno(0x4a)\n\tENOCONNECT      = syscall.Errno(0x32)\n\tENOCSI          = syscall.Errno(0x2b)\n\tENODATA         = syscall.Errno(0x7a)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x31)\n\tENOLINK         = syscall.Errno(0x7e)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x23)\n\tENOPROTOOPT     = syscall.Errno(0x3d)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSR           = syscall.Errno(0x76)\n\tENOSTR          = syscall.Errno(0x7b)\n\tENOSYS          = syscall.Errno(0x6d)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x4c)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x11)\n\tENOTREADY       = syscall.Errno(0x2e)\n\tENOTRECOVERABLE = syscall.Errno(0x5e)\n\tENOTRUST        = syscall.Errno(0x72)\n\tENOTSOCK        = syscall.Errno(0x39)\n\tENOTSUP         = syscall.Errno(0x7c)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x40)\n\tEOVERFLOW       = syscall.Errno(0x7f)\n\tEOWNERDEAD      = syscall.Errno(0x5f)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x41)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x53)\n\tEPROTO          = syscall.Errno(0x79)\n\tEPROTONOSUPPORT = syscall.Errno(0x3e)\n\tEPROTOTYPE      = syscall.Errno(0x3c)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x5d)\n\tERESTART        = syscall.Errno(0x52)\n\tEROFS           = syscall.Errno(0x1e)\n\tESAD            = syscall.Errno(0x71)\n\tESHUTDOWN       = syscall.Errno(0x4d)\n\tESOCKTNOSUPPORT = syscall.Errno(0x3f)\n\tESOFT           = syscall.Errno(0x6f)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x34)\n\tESYSERROR       = syscall.Errno(0x5a)\n\tETIME           = syscall.Errno(0x77)\n\tETIMEDOUT       = syscall.Errno(0x4e)\n\tETOOMANYREFS    = syscall.Errno(0x73)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUNATCH         = syscall.Errno(0x2a)\n\tEUSERS          = syscall.Errno(0x54)\n\tEWOULDBLOCK     = syscall.Errno(0xb)\n\tEWRPROTECT      = syscall.Errno(0x2f)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT     = syscall.Signal(0x6)\n\tSIGAIO      = syscall.Signal(0x17)\n\tSIGALRM     = syscall.Signal(0xe)\n\tSIGALRM1    = syscall.Signal(0x26)\n\tSIGBUS      = syscall.Signal(0xa)\n\tSIGCAPI     = syscall.Signal(0x31)\n\tSIGCHLD     = syscall.Signal(0x14)\n\tSIGCLD      = syscall.Signal(0x14)\n\tSIGCONT     = syscall.Signal(0x13)\n\tSIGCPUFAIL  = syscall.Signal(0x3b)\n\tSIGDANGER   = syscall.Signal(0x21)\n\tSIGEMT      = syscall.Signal(0x7)\n\tSIGFPE      = syscall.Signal(0x8)\n\tSIGGRANT    = syscall.Signal(0x3c)\n\tSIGHUP      = syscall.Signal(0x1)\n\tSIGILL      = syscall.Signal(0x4)\n\tSIGINT      = syscall.Signal(0x2)\n\tSIGIO       = syscall.Signal(0x17)\n\tSIGIOINT    = syscall.Signal(0x10)\n\tSIGIOT      = syscall.Signal(0x6)\n\tSIGKAP      = syscall.Signal(0x3c)\n\tSIGKILL     = syscall.Signal(0x9)\n\tSIGLOST     = syscall.Signal(0x6)\n\tSIGMAX      = syscall.Signal(0x3f)\n\tSIGMAX32    = syscall.Signal(0x3f)\n\tSIGMIGRATE  = syscall.Signal(0x23)\n\tSIGMSG      = syscall.Signal(0x1b)\n\tSIGPIPE     = syscall.Signal(0xd)\n\tSIGPOLL     = syscall.Signal(0x17)\n\tSIGPRE      = syscall.Signal(0x24)\n\tSIGPROF     = syscall.Signal(0x20)\n\tSIGPTY      = syscall.Signal(0x17)\n\tSIGPWR      = syscall.Signal(0x1d)\n\tSIGQUIT     = syscall.Signal(0x3)\n\tSIGRECONFIG = syscall.Signal(0x3a)\n\tSIGRETRACT  = syscall.Signal(0x3d)\n\tSIGSAK      = syscall.Signal(0x3f)\n\tSIGSEGV     = syscall.Signal(0xb)\n\tSIGSOUND    = syscall.Signal(0x3e)\n\tSIGSTOP     = syscall.Signal(0x11)\n\tSIGSYS      = syscall.Signal(0xc)\n\tSIGSYSERROR = syscall.Signal(0x30)\n\tSIGTALRM    = syscall.Signal(0x26)\n\tSIGTERM     = syscall.Signal(0xf)\n\tSIGTRAP     = syscall.Signal(0x5)\n\tSIGTSTP     = syscall.Signal(0x12)\n\tSIGTTIN     = syscall.Signal(0x15)\n\tSIGTTOU     = syscall.Signal(0x16)\n\tSIGURG      = syscall.Signal(0x10)\n\tSIGUSR1     = syscall.Signal(0x1e)\n\tSIGUSR2     = syscall.Signal(0x1f)\n\tSIGVIRT     = syscall.Signal(0x25)\n\tSIGVTALRM   = syscall.Signal(0x22)\n\tSIGWAITING  = syscall.Signal(0x27)\n\tSIGWINCH    = syscall.Signal(0x1c)\n\tSIGXCPU     = syscall.Signal(0x18)\n\tSIGXFSZ     = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"not owner\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"I/O error\"},\n\t{6, \"ENXIO\", \"no such device or address\"},\n\t{7, \"E2BIG\", \"arg list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file number\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EWOULDBLOCK\", \"resource temporarily unavailable\"},\n\t{12, \"ENOMEM\", \"not enough space\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device busy\"},\n\t{17, \"ENOTEMPTY\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"no such device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"file table overflow\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"not a typewriter\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large\"},\n\t{35, \"ENOMSG\", \"no message of desired type\"},\n\t{36, \"EIDRM\", \"identifier removed\"},\n\t{37, \"ECHRNG\", \"channel number out of range\"},\n\t{38, \"EL2NSYNC\", \"level 2 not synchronized\"},\n\t{39, \"EL3HLT\", \"level 3 halted\"},\n\t{40, \"EL3RST\", \"level 3 reset\"},\n\t{41, \"ELNRNG\", \"link number out of range\"},\n\t{42, \"EUNATCH\", \"protocol driver not attached\"},\n\t{43, \"ENOCSI\", \"no CSI structure available\"},\n\t{44, \"EL2HLT\", \"level 2 halted\"},\n\t{45, \"EDEADLK\", \"deadlock condition if locked\"},\n\t{46, \"ENOTREADY\", \"device not ready\"},\n\t{47, \"EWRPROTECT\", \"write-protected media\"},\n\t{48, \"EFORMAT\", \"unformatted or incompatible media\"},\n\t{49, \"ENOLCK\", \"no locks available\"},\n\t{50, \"ENOCONNECT\", \"cannot Establish Connection\"},\n\t{52, \"ESTALE\", \"missing file or filesystem\"},\n\t{53, \"EDIST\", \"requests blocked by Administrator\"},\n\t{55, \"EINPROGRESS\", \"operation now in progress\"},\n\t{56, \"EALREADY\", \"operation already in progress\"},\n\t{57, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{58, \"EDESTADDREQ\", \"destination address required\"},\n\t{59, \"EMSGSIZE\", \"message too long\"},\n\t{60, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{61, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{62, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{63, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{64, \"EOPNOTSUPP\", \"operation not supported on socket\"},\n\t{65, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{66, \"EAFNOSUPPORT\", \"addr family not supported by protocol\"},\n\t{67, \"EADDRINUSE\", \"address already in use\"},\n\t{68, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{69, \"ENETDOWN\", \"network is down\"},\n\t{70, \"ENETUNREACH\", \"network is unreachable\"},\n\t{71, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{72, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{73, \"ECONNRESET\", \"connection reset by peer\"},\n\t{74, \"ENOBUFS\", \"no buffer space available\"},\n\t{75, \"EISCONN\", \"socket is already connected\"},\n\t{76, \"ENOTCONN\", \"socket is not connected\"},\n\t{77, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{78, \"ETIMEDOUT\", \"connection timed out\"},\n\t{79, \"ECONNREFUSED\", \"connection refused\"},\n\t{80, \"EHOSTDOWN\", \"host is down\"},\n\t{81, \"EHOSTUNREACH\", \"no route to host\"},\n\t{82, \"ERESTART\", \"restart the system call\"},\n\t{83, \"EPROCLIM\", \"too many processes\"},\n\t{84, \"EUSERS\", \"too many users\"},\n\t{85, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{86, \"ENAMETOOLONG\", \"file name too long\"},\n\t{88, \"EDQUOT\", \"disk quota exceeded\"},\n\t{89, \"ECORRUPT\", \"invalid file system control data detected\"},\n\t{90, \"ESYSERROR\", \"for future use \"},\n\t{93, \"EREMOTE\", \"item is not local to host\"},\n\t{94, \"ENOTRECOVERABLE\", \"state not recoverable \"},\n\t{95, \"EOWNERDEAD\", \"previous owner died \"},\n\t{109, \"ENOSYS\", \"function not implemented\"},\n\t{110, \"EMEDIA\", \"media surface error\"},\n\t{111, \"ESOFT\", \"I/O completed, but needs relocation\"},\n\t{112, \"ENOATTR\", \"no attribute found\"},\n\t{113, \"ESAD\", \"security Authentication Denied\"},\n\t{114, \"ENOTRUST\", \"not a Trusted Program\"},\n\t{115, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{116, \"EILSEQ\", \"invalid wide character\"},\n\t{117, \"ECANCELED\", \"asynchronous I/O cancelled\"},\n\t{118, \"ENOSR\", \"out of STREAMS resources\"},\n\t{119, \"ETIME\", \"system call timed out\"},\n\t{120, \"EBADMSG\", \"next message has wrong type\"},\n\t{121, \"EPROTO\", \"error in protocol\"},\n\t{122, \"ENODATA\", \"no message on stream head read q\"},\n\t{123, \"ENOSTR\", \"fd not associated with a stream\"},\n\t{124, \"ENOTSUP\", \"unsupported attribute value\"},\n\t{125, \"EMULTIHOP\", \"multihop is not allowed\"},\n\t{126, \"ENOLINK\", \"the server link has been severed\"},\n\t{127, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGIOT\", \"IOT/Abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"stopped (signal)\"},\n\t{18, \"SIGTSTP\", \"stopped\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible/complete\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{27, \"SIGMSG\", \"input device data\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGPWR\", \"power-failure\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n\t{32, \"SIGPROF\", \"profiling timer expired\"},\n\t{33, \"SIGDANGER\", \"paging space low\"},\n\t{34, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{35, \"SIGMIGRATE\", \"signal 35\"},\n\t{36, \"SIGPRE\", \"signal 36\"},\n\t{37, \"SIGVIRT\", \"signal 37\"},\n\t{38, \"SIGTALRM\", \"signal 38\"},\n\t{39, \"SIGWAITING\", \"signal 39\"},\n\t{48, \"SIGSYSERROR\", \"signal 48\"},\n\t{49, \"SIGCAPI\", \"signal 49\"},\n\t{58, \"SIGRECONFIG\", \"signal 58\"},\n\t{59, \"SIGCPUFAIL\", \"CPU Failure Predicted\"},\n\t{60, \"SIGKAP\", \"monitor mode granted\"},\n\t{61, \"SIGRETRACT\", \"monitor mode retracted\"},\n\t{62, \"SIGSOUND\", \"sound completed\"},\n\t{63, \"SIGSAK\", \"secure attention\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_aix_ppc64.go",
    "content": "// mkerrors.sh -maix64\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build ppc64,aix\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -maix64 _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                  = 0x10\n\tAF_BYPASS                     = 0x19\n\tAF_CCITT                      = 0xa\n\tAF_CHAOS                      = 0x5\n\tAF_DATAKIT                    = 0x9\n\tAF_DECnet                     = 0xc\n\tAF_DLI                        = 0xd\n\tAF_ECMA                       = 0x8\n\tAF_HYLINK                     = 0xf\n\tAF_IMPLINK                    = 0x3\n\tAF_INET                       = 0x2\n\tAF_INET6                      = 0x18\n\tAF_INTF                       = 0x14\n\tAF_ISO                        = 0x7\n\tAF_LAT                        = 0xe\n\tAF_LINK                       = 0x12\n\tAF_LOCAL                      = 0x1\n\tAF_MAX                        = 0x1e\n\tAF_NDD                        = 0x17\n\tAF_NETWARE                    = 0x16\n\tAF_NS                         = 0x6\n\tAF_OSI                        = 0x7\n\tAF_PUP                        = 0x4\n\tAF_RIF                        = 0x15\n\tAF_ROUTE                      = 0x11\n\tAF_SNA                        = 0xb\n\tAF_UNIX                       = 0x1\n\tAF_UNSPEC                     = 0x0\n\tALTWERASE                     = 0x400000\n\tARPHRD_802_3                  = 0x6\n\tARPHRD_802_5                  = 0x6\n\tARPHRD_ETHER                  = 0x1\n\tARPHRD_FDDI                   = 0x1\n\tB0                            = 0x0\n\tB110                          = 0x3\n\tB1200                         = 0x9\n\tB134                          = 0x4\n\tB150                          = 0x5\n\tB1800                         = 0xa\n\tB19200                        = 0xe\n\tB200                          = 0x6\n\tB2400                         = 0xb\n\tB300                          = 0x7\n\tB38400                        = 0xf\n\tB4800                         = 0xc\n\tB50                           = 0x1\n\tB600                          = 0x8\n\tB75                           = 0x2\n\tB9600                         = 0xd\n\tBRKINT                        = 0x2\n\tBS0                           = 0x0\n\tBS1                           = 0x1000\n\tBSDLY                         = 0x1000\n\tCAP_AACCT                     = 0x6\n\tCAP_ARM_APPLICATION           = 0x5\n\tCAP_BYPASS_RAC_VMM            = 0x3\n\tCAP_CLEAR                     = 0x0\n\tCAP_CREDENTIALS               = 0x7\n\tCAP_EFFECTIVE                 = 0x1\n\tCAP_EWLM_AGENT                = 0x4\n\tCAP_INHERITABLE               = 0x2\n\tCAP_MAXIMUM                   = 0x7\n\tCAP_NUMA_ATTACH               = 0x2\n\tCAP_PERMITTED                 = 0x3\n\tCAP_PROPAGATE                 = 0x1\n\tCAP_PROPOGATE                 = 0x1\n\tCAP_SET                       = 0x1\n\tCBAUD                         = 0xf\n\tCFLUSH                        = 0xf\n\tCIBAUD                        = 0xf0000\n\tCLOCAL                        = 0x800\n\tCLOCK_MONOTONIC               = 0xa\n\tCLOCK_PROCESS_CPUTIME_ID      = 0xb\n\tCLOCK_REALTIME                = 0x9\n\tCLOCK_THREAD_CPUTIME_ID       = 0xc\n\tCR0                           = 0x0\n\tCR1                           = 0x100\n\tCR2                           = 0x200\n\tCR3                           = 0x300\n\tCRDLY                         = 0x300\n\tCREAD                         = 0x80\n\tCS5                           = 0x0\n\tCS6                           = 0x10\n\tCS7                           = 0x20\n\tCS8                           = 0x30\n\tCSIOCGIFCONF                  = -0x3fef96dc\n\tCSIZE                         = 0x30\n\tCSMAP_DIR                     = \"/usr/lib/nls/csmap/\"\n\tCSTART                        = '\\021'\n\tCSTOP                         = '\\023'\n\tCSTOPB                        = 0x40\n\tCSUSP                         = 0x1a\n\tECHO                          = 0x8\n\tECHOCTL                       = 0x20000\n\tECHOE                         = 0x10\n\tECHOK                         = 0x20\n\tECHOKE                        = 0x80000\n\tECHONL                        = 0x40\n\tECHOPRT                       = 0x40000\n\tECH_ICMPID                    = 0x2\n\tETHERNET_CSMACD               = 0x6\n\tEVENP                         = 0x80\n\tEXCONTINUE                    = 0x0\n\tEXDLOK                        = 0x3\n\tEXIO                          = 0x2\n\tEXPGIO                        = 0x0\n\tEXRESUME                      = 0x2\n\tEXRETURN                      = 0x1\n\tEXSIG                         = 0x4\n\tEXTA                          = 0xe\n\tEXTB                          = 0xf\n\tEXTRAP                        = 0x1\n\tEYEC_RTENTRYA                 = 0x257274656e747241\n\tEYEC_RTENTRYF                 = 0x257274656e747246\n\tE_ACC                         = 0x0\n\tFD_CLOEXEC                    = 0x1\n\tFD_SETSIZE                    = 0xfffe\n\tFF0                           = 0x0\n\tFF1                           = 0x2000\n\tFFDLY                         = 0x2000\n\tFLUSHBAND                     = 0x40\n\tFLUSHLOW                      = 0x8\n\tFLUSHO                        = 0x100000\n\tFLUSHR                        = 0x1\n\tFLUSHRW                       = 0x3\n\tFLUSHW                        = 0x2\n\tF_CLOSEM                      = 0xa\n\tF_DUP2FD                      = 0xe\n\tF_DUPFD                       = 0x0\n\tF_GETFD                       = 0x1\n\tF_GETFL                       = 0x3\n\tF_GETLK                       = 0xb\n\tF_GETLK64                     = 0xb\n\tF_GETOWN                      = 0x8\n\tF_LOCK                        = 0x1\n\tF_OK                          = 0x0\n\tF_RDLCK                       = 0x1\n\tF_SETFD                       = 0x2\n\tF_SETFL                       = 0x4\n\tF_SETLK                       = 0xc\n\tF_SETLK64                     = 0xc\n\tF_SETLKW                      = 0xd\n\tF_SETLKW64                    = 0xd\n\tF_SETOWN                      = 0x9\n\tF_TEST                        = 0x3\n\tF_TLOCK                       = 0x2\n\tF_TSTLK                       = 0xf\n\tF_ULOCK                       = 0x0\n\tF_UNLCK                       = 0x3\n\tF_WRLCK                       = 0x2\n\tHUPCL                         = 0x400\n\tIBSHIFT                       = 0x10\n\tICANON                        = 0x2\n\tICMP6_FILTER                  = 0x26\n\tICMP6_SEC_SEND_DEL            = 0x46\n\tICMP6_SEC_SEND_GET            = 0x47\n\tICMP6_SEC_SEND_SET            = 0x44\n\tICMP6_SEC_SEND_SET_CGA_ADDR   = 0x45\n\tICRNL                         = 0x100\n\tIEXTEN                        = 0x200000\n\tIFA_FIRSTALIAS                = 0x2000\n\tIFA_ROUTE                     = 0x1\n\tIFF_64BIT                     = 0x4000000\n\tIFF_ALLCAST                   = 0x20000\n\tIFF_ALLMULTI                  = 0x200\n\tIFF_BPF                       = 0x8000000\n\tIFF_BRIDGE                    = 0x40000\n\tIFF_BROADCAST                 = 0x2\n\tIFF_CANTCHANGE                = 0x80c52\n\tIFF_CHECKSUM_OFFLOAD          = 0x10000000\n\tIFF_D1                        = 0x8000\n\tIFF_D2                        = 0x4000\n\tIFF_D3                        = 0x2000\n\tIFF_D4                        = 0x1000\n\tIFF_DEBUG                     = 0x4\n\tIFF_DEVHEALTH                 = 0x4000\n\tIFF_DO_HW_LOOPBACK            = 0x10000\n\tIFF_GROUP_ROUTING             = 0x2000000\n\tIFF_IFBUFMGT                  = 0x800000\n\tIFF_LINK0                     = 0x100000\n\tIFF_LINK1                     = 0x200000\n\tIFF_LINK2                     = 0x400000\n\tIFF_LOOPBACK                  = 0x8\n\tIFF_MULTICAST                 = 0x80000\n\tIFF_NOARP                     = 0x80\n\tIFF_NOECHO                    = 0x800\n\tIFF_NOTRAILERS                = 0x20\n\tIFF_OACTIVE                   = 0x400\n\tIFF_POINTOPOINT               = 0x10\n\tIFF_PROMISC                   = 0x100\n\tIFF_PSEG                      = 0x40000000\n\tIFF_RUNNING                   = 0x40\n\tIFF_SIMPLEX                   = 0x800\n\tIFF_SNAP                      = 0x8000\n\tIFF_TCP_DISABLE_CKSUM         = 0x20000000\n\tIFF_TCP_NOCKSUM               = 0x1000000\n\tIFF_UP                        = 0x1\n\tIFF_VIPA                      = 0x80000000\n\tIFNAMSIZ                      = 0x10\n\tIFO_FLUSH                     = 0x1\n\tIFT_1822                      = 0x2\n\tIFT_AAL5                      = 0x31\n\tIFT_ARCNET                    = 0x23\n\tIFT_ARCNETPLUS                = 0x24\n\tIFT_ATM                       = 0x25\n\tIFT_CEPT                      = 0x13\n\tIFT_CLUSTER                   = 0x3e\n\tIFT_DS3                       = 0x1e\n\tIFT_EON                       = 0x19\n\tIFT_ETHER                     = 0x6\n\tIFT_FCS                       = 0x3a\n\tIFT_FDDI                      = 0xf\n\tIFT_FRELAY                    = 0x20\n\tIFT_FRELAYDCE                 = 0x2c\n\tIFT_GIFTUNNEL                 = 0x3c\n\tIFT_HDH1822                   = 0x3\n\tIFT_HF                        = 0x3d\n\tIFT_HIPPI                     = 0x2f\n\tIFT_HSSI                      = 0x2e\n\tIFT_HY                        = 0xe\n\tIFT_IB                        = 0xc7\n\tIFT_ISDNBASIC                 = 0x14\n\tIFT_ISDNPRIMARY               = 0x15\n\tIFT_ISO88022LLC               = 0x29\n\tIFT_ISO88023                  = 0x7\n\tIFT_ISO88024                  = 0x8\n\tIFT_ISO88025                  = 0x9\n\tIFT_ISO88026                  = 0xa\n\tIFT_LAPB                      = 0x10\n\tIFT_LOCALTALK                 = 0x2a\n\tIFT_LOOP                      = 0x18\n\tIFT_MIOX25                    = 0x26\n\tIFT_MODEM                     = 0x30\n\tIFT_NSIP                      = 0x1b\n\tIFT_OTHER                     = 0x1\n\tIFT_P10                       = 0xc\n\tIFT_P80                       = 0xd\n\tIFT_PARA                      = 0x22\n\tIFT_PPP                       = 0x17\n\tIFT_PROPMUX                   = 0x36\n\tIFT_PROPVIRTUAL               = 0x35\n\tIFT_PTPSERIAL                 = 0x16\n\tIFT_RS232                     = 0x21\n\tIFT_SDLC                      = 0x11\n\tIFT_SIP                       = 0x1f\n\tIFT_SLIP                      = 0x1c\n\tIFT_SMDSDXI                   = 0x2b\n\tIFT_SMDSICIP                  = 0x34\n\tIFT_SN                        = 0x38\n\tIFT_SONET                     = 0x27\n\tIFT_SONETPATH                 = 0x32\n\tIFT_SONETVT                   = 0x33\n\tIFT_SP                        = 0x39\n\tIFT_STARLAN                   = 0xb\n\tIFT_T1                        = 0x12\n\tIFT_TUNNEL                    = 0x3b\n\tIFT_ULTRA                     = 0x1d\n\tIFT_V35                       = 0x2d\n\tIFT_VIPA                      = 0x37\n\tIFT_X25                       = 0x5\n\tIFT_X25DDN                    = 0x4\n\tIFT_X25PLE                    = 0x28\n\tIFT_XETHER                    = 0x1a\n\tIGNBRK                        = 0x1\n\tIGNCR                         = 0x80\n\tIGNPAR                        = 0x4\n\tIMAXBEL                       = 0x10000\n\tINLCR                         = 0x40\n\tINPCK                         = 0x10\n\tIN_CLASSA_HOST                = 0xffffff\n\tIN_CLASSA_MAX                 = 0x80\n\tIN_CLASSA_NET                 = 0xff000000\n\tIN_CLASSA_NSHIFT              = 0x18\n\tIN_CLASSB_HOST                = 0xffff\n\tIN_CLASSB_MAX                 = 0x10000\n\tIN_CLASSB_NET                 = 0xffff0000\n\tIN_CLASSB_NSHIFT              = 0x10\n\tIN_CLASSC_HOST                = 0xff\n\tIN_CLASSC_NET                 = 0xffffff00\n\tIN_CLASSC_NSHIFT              = 0x8\n\tIN_CLASSD_HOST                = 0xfffffff\n\tIN_CLASSD_NET                 = 0xf0000000\n\tIN_CLASSD_NSHIFT              = 0x1c\n\tIN_LOOPBACKNET                = 0x7f\n\tIN_USE                        = 0x1\n\tIPPROTO_AH                    = 0x33\n\tIPPROTO_BIP                   = 0x53\n\tIPPROTO_DSTOPTS               = 0x3c\n\tIPPROTO_EGP                   = 0x8\n\tIPPROTO_EON                   = 0x50\n\tIPPROTO_ESP                   = 0x32\n\tIPPROTO_FRAGMENT              = 0x2c\n\tIPPROTO_GGP                   = 0x3\n\tIPPROTO_GIF                   = 0x8c\n\tIPPROTO_GRE                   = 0x2f\n\tIPPROTO_HOPOPTS               = 0x0\n\tIPPROTO_ICMP                  = 0x1\n\tIPPROTO_ICMPV6                = 0x3a\n\tIPPROTO_IDP                   = 0x16\n\tIPPROTO_IGMP                  = 0x2\n\tIPPROTO_IP                    = 0x0\n\tIPPROTO_IPIP                  = 0x4\n\tIPPROTO_IPV6                  = 0x29\n\tIPPROTO_LOCAL                 = 0x3f\n\tIPPROTO_MAX                   = 0x100\n\tIPPROTO_MH                    = 0x87\n\tIPPROTO_NONE                  = 0x3b\n\tIPPROTO_PUP                   = 0xc\n\tIPPROTO_QOS                   = 0x2d\n\tIPPROTO_RAW                   = 0xff\n\tIPPROTO_ROUTING               = 0x2b\n\tIPPROTO_RSVP                  = 0x2e\n\tIPPROTO_SCTP                  = 0x84\n\tIPPROTO_TCP                   = 0x6\n\tIPPROTO_TP                    = 0x1d\n\tIPPROTO_UDP                   = 0x11\n\tIPV6_ADDRFORM                 = 0x16\n\tIPV6_ADDR_PREFERENCES         = 0x4a\n\tIPV6_ADD_MEMBERSHIP           = 0xc\n\tIPV6_AIXRAWSOCKET             = 0x39\n\tIPV6_CHECKSUM                 = 0x27\n\tIPV6_DONTFRAG                 = 0x2d\n\tIPV6_DROP_MEMBERSHIP          = 0xd\n\tIPV6_DSTOPTS                  = 0x36\n\tIPV6_FLOWINFO_FLOWLABEL       = 0xffffff\n\tIPV6_FLOWINFO_PRIFLOW         = 0xfffffff\n\tIPV6_FLOWINFO_PRIORITY        = 0xf000000\n\tIPV6_FLOWINFO_SRFLAG          = 0x10000000\n\tIPV6_FLOWINFO_VERSION         = 0xf0000000\n\tIPV6_HOPLIMIT                 = 0x28\n\tIPV6_HOPOPTS                  = 0x34\n\tIPV6_JOIN_GROUP               = 0xc\n\tIPV6_LEAVE_GROUP              = 0xd\n\tIPV6_MIPDSTOPTS               = 0x36\n\tIPV6_MULTICAST_HOPS           = 0xa\n\tIPV6_MULTICAST_IF             = 0x9\n\tIPV6_MULTICAST_LOOP           = 0xb\n\tIPV6_NEXTHOP                  = 0x30\n\tIPV6_NOPROBE                  = 0x1c\n\tIPV6_PATHMTU                  = 0x2e\n\tIPV6_PKTINFO                  = 0x21\n\tIPV6_PKTOPTIONS               = 0x24\n\tIPV6_PRIORITY_10              = 0xa000000\n\tIPV6_PRIORITY_11              = 0xb000000\n\tIPV6_PRIORITY_12              = 0xc000000\n\tIPV6_PRIORITY_13              = 0xd000000\n\tIPV6_PRIORITY_14              = 0xe000000\n\tIPV6_PRIORITY_15              = 0xf000000\n\tIPV6_PRIORITY_8               = 0x8000000\n\tIPV6_PRIORITY_9               = 0x9000000\n\tIPV6_PRIORITY_BULK            = 0x4000000\n\tIPV6_PRIORITY_CONTROL         = 0x7000000\n\tIPV6_PRIORITY_FILLER          = 0x1000000\n\tIPV6_PRIORITY_INTERACTIVE     = 0x6000000\n\tIPV6_PRIORITY_RESERVED1       = 0x3000000\n\tIPV6_PRIORITY_RESERVED2       = 0x5000000\n\tIPV6_PRIORITY_UNATTENDED      = 0x2000000\n\tIPV6_PRIORITY_UNCHARACTERIZED = 0x0\n\tIPV6_RECVDSTOPTS              = 0x38\n\tIPV6_RECVHOPLIMIT             = 0x29\n\tIPV6_RECVHOPOPTS              = 0x35\n\tIPV6_RECVHOPS                 = 0x22\n\tIPV6_RECVIF                   = 0x1e\n\tIPV6_RECVPATHMTU              = 0x2f\n\tIPV6_RECVPKTINFO              = 0x23\n\tIPV6_RECVRTHDR                = 0x33\n\tIPV6_RECVSRCRT                = 0x1d\n\tIPV6_RECVTCLASS               = 0x2a\n\tIPV6_RTHDR                    = 0x32\n\tIPV6_RTHDRDSTOPTS             = 0x37\n\tIPV6_RTHDR_TYPE_0             = 0x0\n\tIPV6_RTHDR_TYPE_2             = 0x2\n\tIPV6_SENDIF                   = 0x1f\n\tIPV6_SRFLAG_LOOSE             = 0x0\n\tIPV6_SRFLAG_STRICT            = 0x10000000\n\tIPV6_TCLASS                   = 0x2b\n\tIPV6_TOKEN_LENGTH             = 0x40\n\tIPV6_UNICAST_HOPS             = 0x4\n\tIPV6_USE_MIN_MTU              = 0x2c\n\tIPV6_V6ONLY                   = 0x25\n\tIPV6_VERSION                  = 0x60000000\n\tIP_ADDRFORM                   = 0x16\n\tIP_ADD_MEMBERSHIP             = 0xc\n\tIP_ADD_SOURCE_MEMBERSHIP      = 0x3c\n\tIP_BLOCK_SOURCE               = 0x3a\n\tIP_BROADCAST_IF               = 0x10\n\tIP_CACHE_LINE_SIZE            = 0x80\n\tIP_DEFAULT_MULTICAST_LOOP     = 0x1\n\tIP_DEFAULT_MULTICAST_TTL      = 0x1\n\tIP_DF                         = 0x4000\n\tIP_DHCPMODE                   = 0x11\n\tIP_DONTFRAG                   = 0x19\n\tIP_DROP_MEMBERSHIP            = 0xd\n\tIP_DROP_SOURCE_MEMBERSHIP     = 0x3d\n\tIP_FINDPMTU                   = 0x1a\n\tIP_HDRINCL                    = 0x2\n\tIP_INC_MEMBERSHIPS            = 0x14\n\tIP_INIT_MEMBERSHIP            = 0x14\n\tIP_MAXPACKET                  = 0xffff\n\tIP_MF                         = 0x2000\n\tIP_MSS                        = 0x240\n\tIP_MULTICAST_HOPS             = 0xa\n\tIP_MULTICAST_IF               = 0x9\n\tIP_MULTICAST_LOOP             = 0xb\n\tIP_MULTICAST_TTL              = 0xa\n\tIP_OPT                        = 0x1b\n\tIP_OPTIONS                    = 0x1\n\tIP_PMTUAGE                    = 0x1b\n\tIP_RECVDSTADDR                = 0x7\n\tIP_RECVIF                     = 0x14\n\tIP_RECVIFINFO                 = 0xf\n\tIP_RECVINTERFACE              = 0x20\n\tIP_RECVMACHDR                 = 0xe\n\tIP_RECVOPTS                   = 0x5\n\tIP_RECVRETOPTS                = 0x6\n\tIP_RECVTTL                    = 0x22\n\tIP_RETOPTS                    = 0x8\n\tIP_SOURCE_FILTER              = 0x48\n\tIP_TOS                        = 0x3\n\tIP_TTL                        = 0x4\n\tIP_UNBLOCK_SOURCE             = 0x3b\n\tIP_UNICAST_HOPS               = 0x4\n\tISIG                          = 0x1\n\tISTRIP                        = 0x20\n\tIUCLC                         = 0x800\n\tIXANY                         = 0x1000\n\tIXOFF                         = 0x400\n\tIXON                          = 0x200\n\tI_FLUSH                       = 0x20005305\n\tLNOFLSH                       = 0x8000\n\tLOCK_EX                       = 0x2\n\tLOCK_NB                       = 0x4\n\tLOCK_SH                       = 0x1\n\tLOCK_UN                       = 0x8\n\tMADV_DONTNEED                 = 0x4\n\tMADV_NORMAL                   = 0x0\n\tMADV_RANDOM                   = 0x1\n\tMADV_SEQUENTIAL               = 0x2\n\tMADV_SPACEAVAIL               = 0x5\n\tMADV_WILLNEED                 = 0x3\n\tMAP_ANON                      = 0x10\n\tMAP_ANONYMOUS                 = 0x10\n\tMAP_FILE                      = 0x0\n\tMAP_FIXED                     = 0x100\n\tMAP_PRIVATE                   = 0x2\n\tMAP_SHARED                    = 0x1\n\tMAP_TYPE                      = 0xf0\n\tMAP_VARIABLE                  = 0x0\n\tMCL_CURRENT                   = 0x100\n\tMCL_FUTURE                    = 0x200\n\tMSG_ANY                       = 0x4\n\tMSG_ARGEXT                    = 0x400\n\tMSG_BAND                      = 0x2\n\tMSG_COMPAT                    = 0x8000\n\tMSG_CTRUNC                    = 0x20\n\tMSG_DONTROUTE                 = 0x4\n\tMSG_EOR                       = 0x8\n\tMSG_HIPRI                     = 0x1\n\tMSG_MAXIOVLEN                 = 0x10\n\tMSG_MPEG2                     = 0x80\n\tMSG_NONBLOCK                  = 0x4000\n\tMSG_NOSIGNAL                  = 0x100\n\tMSG_OOB                       = 0x1\n\tMSG_PEEK                      = 0x2\n\tMSG_TRUNC                     = 0x10\n\tMSG_WAITALL                   = 0x40\n\tMSG_WAITFORONE                = 0x200\n\tMS_ASYNC                      = 0x10\n\tMS_EINTR                      = 0x80\n\tMS_INVALIDATE                 = 0x40\n\tMS_PER_SEC                    = 0x3e8\n\tMS_SYNC                       = 0x20\n\tNL0                           = 0x0\n\tNL1                           = 0x4000\n\tNL2                           = 0x8000\n\tNL3                           = 0xc000\n\tNLDLY                         = 0x4000\n\tNOFLSH                        = 0x80\n\tNOFLUSH                       = 0x80000000\n\tOCRNL                         = 0x8\n\tOFDEL                         = 0x80\n\tOFILL                         = 0x40\n\tOLCUC                         = 0x2\n\tONLCR                         = 0x4\n\tONLRET                        = 0x20\n\tONOCR                         = 0x10\n\tONOEOT                        = 0x80000\n\tOPOST                         = 0x1\n\tOXTABS                        = 0x40000\n\tO_ACCMODE                     = 0x23\n\tO_APPEND                      = 0x8\n\tO_CIO                         = 0x80\n\tO_CIOR                        = 0x800000000\n\tO_CLOEXEC                     = 0x800000\n\tO_CREAT                       = 0x100\n\tO_DEFER                       = 0x2000\n\tO_DELAY                       = 0x4000\n\tO_DIRECT                      = 0x8000000\n\tO_DIRECTORY                   = 0x80000\n\tO_DSYNC                       = 0x400000\n\tO_EFSOFF                      = 0x400000000\n\tO_EFSON                       = 0x200000000\n\tO_EXCL                        = 0x400\n\tO_EXEC                        = 0x20\n\tO_LARGEFILE                   = 0x4000000\n\tO_NDELAY                      = 0x8000\n\tO_NOCACHE                     = 0x100000\n\tO_NOCTTY                      = 0x800\n\tO_NOFOLLOW                    = 0x1000000\n\tO_NONBLOCK                    = 0x4\n\tO_NONE                        = 0x3\n\tO_NSHARE                      = 0x10000\n\tO_RAW                         = 0x100000000\n\tO_RDONLY                      = 0x0\n\tO_RDWR                        = 0x2\n\tO_RSHARE                      = 0x1000\n\tO_RSYNC                       = 0x200000\n\tO_SEARCH                      = 0x20\n\tO_SNAPSHOT                    = 0x40\n\tO_SYNC                        = 0x10\n\tO_TRUNC                       = 0x200\n\tO_TTY_INIT                    = 0x0\n\tO_WRONLY                      = 0x1\n\tPARENB                        = 0x100\n\tPAREXT                        = 0x100000\n\tPARMRK                        = 0x8\n\tPARODD                        = 0x200\n\tPENDIN                        = 0x20000000\n\tPRIO_PGRP                     = 0x1\n\tPRIO_PROCESS                  = 0x0\n\tPRIO_USER                     = 0x2\n\tPROT_EXEC                     = 0x4\n\tPROT_NONE                     = 0x0\n\tPROT_READ                     = 0x1\n\tPROT_WRITE                    = 0x2\n\tPR_64BIT                      = 0x20\n\tPR_ADDR                       = 0x2\n\tPR_ARGEXT                     = 0x400\n\tPR_ATOMIC                     = 0x1\n\tPR_CONNREQUIRED               = 0x4\n\tPR_FASTHZ                     = 0x5\n\tPR_INP                        = 0x40\n\tPR_INTRLEVEL                  = 0x8000\n\tPR_MLS                        = 0x100\n\tPR_MLS_1_LABEL                = 0x200\n\tPR_NOEOR                      = 0x4000\n\tPR_RIGHTS                     = 0x10\n\tPR_SLOWHZ                     = 0x2\n\tPR_WANTRCVD                   = 0x8\n\tRLIMIT_AS                     = 0x6\n\tRLIMIT_CORE                   = 0x4\n\tRLIMIT_CPU                    = 0x0\n\tRLIMIT_DATA                   = 0x2\n\tRLIMIT_FSIZE                  = 0x1\n\tRLIMIT_NOFILE                 = 0x7\n\tRLIMIT_NPROC                  = 0x9\n\tRLIMIT_RSS                    = 0x5\n\tRLIMIT_STACK                  = 0x3\n\tRLIM_INFINITY                 = 0x7fffffffffffffff\n\tRTAX_AUTHOR                   = 0x6\n\tRTAX_BRD                      = 0x7\n\tRTAX_DST                      = 0x0\n\tRTAX_GATEWAY                  = 0x1\n\tRTAX_GENMASK                  = 0x3\n\tRTAX_IFA                      = 0x5\n\tRTAX_IFP                      = 0x4\n\tRTAX_MAX                      = 0x8\n\tRTAX_NETMASK                  = 0x2\n\tRTA_AUTHOR                    = 0x40\n\tRTA_BRD                       = 0x80\n\tRTA_DOWNSTREAM                = 0x100\n\tRTA_DST                       = 0x1\n\tRTA_GATEWAY                   = 0x2\n\tRTA_GENMASK                   = 0x8\n\tRTA_IFA                       = 0x20\n\tRTA_IFP                       = 0x10\n\tRTA_NETMASK                   = 0x4\n\tRTC_IA64                      = 0x3\n\tRTC_POWER                     = 0x1\n\tRTC_POWER_PC                  = 0x2\n\tRTF_ACTIVE_DGD                = 0x1000000\n\tRTF_BCE                       = 0x80000\n\tRTF_BLACKHOLE                 = 0x1000\n\tRTF_BROADCAST                 = 0x400000\n\tRTF_BUL                       = 0x2000\n\tRTF_CLONE                     = 0x10000\n\tRTF_CLONED                    = 0x20000\n\tRTF_CLONING                   = 0x100\n\tRTF_DONE                      = 0x40\n\tRTF_DYNAMIC                   = 0x10\n\tRTF_FREE_IN_PROG              = 0x4000000\n\tRTF_GATEWAY                   = 0x2\n\tRTF_HOST                      = 0x4\n\tRTF_LLINFO                    = 0x400\n\tRTF_LOCAL                     = 0x200000\n\tRTF_MASK                      = 0x80\n\tRTF_MODIFIED                  = 0x20\n\tRTF_MULTICAST                 = 0x800000\n\tRTF_PERMANENT6                = 0x8000000\n\tRTF_PINNED                    = 0x100000\n\tRTF_PROTO1                    = 0x8000\n\tRTF_PROTO2                    = 0x4000\n\tRTF_PROTO3                    = 0x40000\n\tRTF_REJECT                    = 0x8\n\tRTF_SMALLMTU                  = 0x40000\n\tRTF_STATIC                    = 0x800\n\tRTF_STOPSRCH                  = 0x2000000\n\tRTF_UNREACHABLE               = 0x10000000\n\tRTF_UP                        = 0x1\n\tRTF_XRESOLVE                  = 0x200\n\tRTM_ADD                       = 0x1\n\tRTM_CHANGE                    = 0x3\n\tRTM_DELADDR                   = 0xd\n\tRTM_DELETE                    = 0x2\n\tRTM_EXPIRE                    = 0xf\n\tRTM_GET                       = 0x4\n\tRTM_GETNEXT                   = 0x11\n\tRTM_IFINFO                    = 0xe\n\tRTM_LOCK                      = 0x8\n\tRTM_LOSING                    = 0x5\n\tRTM_MISS                      = 0x7\n\tRTM_NEWADDR                   = 0xc\n\tRTM_OLDADD                    = 0x9\n\tRTM_OLDDEL                    = 0xa\n\tRTM_REDIRECT                  = 0x6\n\tRTM_RESOLVE                   = 0xb\n\tRTM_RTLOST                    = 0x10\n\tRTM_RTTUNIT                   = 0xf4240\n\tRTM_SAMEADDR                  = 0x12\n\tRTM_SET                       = 0x13\n\tRTM_VERSION                   = 0x2\n\tRTM_VERSION_GR                = 0x4\n\tRTM_VERSION_GR_COMPAT         = 0x3\n\tRTM_VERSION_POLICY            = 0x5\n\tRTM_VERSION_POLICY_EXT        = 0x6\n\tRTM_VERSION_POLICY_PRFN       = 0x7\n\tRTV_EXPIRE                    = 0x4\n\tRTV_HOPCOUNT                  = 0x2\n\tRTV_MTU                       = 0x1\n\tRTV_RPIPE                     = 0x8\n\tRTV_RTT                       = 0x40\n\tRTV_RTTVAR                    = 0x80\n\tRTV_SPIPE                     = 0x10\n\tRTV_SSTHRESH                  = 0x20\n\tRUSAGE_CHILDREN               = -0x1\n\tRUSAGE_SELF                   = 0x0\n\tRUSAGE_THREAD                 = 0x1\n\tSCM_RIGHTS                    = 0x1\n\tSHUT_RD                       = 0x0\n\tSHUT_RDWR                     = 0x2\n\tSHUT_WR                       = 0x1\n\tSIGMAX64                      = 0xff\n\tSIGQUEUE_MAX                  = 0x20\n\tSIOCADDIFVIPA                 = 0x20006942\n\tSIOCADDMTU                    = -0x7ffb9690\n\tSIOCADDMULTI                  = -0x7fdf96cf\n\tSIOCADDNETID                  = -0x7fd796a9\n\tSIOCADDRT                     = -0x7fc78df6\n\tSIOCAIFADDR                   = -0x7fbf96e6\n\tSIOCATMARK                    = 0x40047307\n\tSIOCDARP                      = -0x7fb396e0\n\tSIOCDELIFVIPA                 = 0x20006943\n\tSIOCDELMTU                    = -0x7ffb968f\n\tSIOCDELMULTI                  = -0x7fdf96ce\n\tSIOCDELPMTU                   = -0x7fd78ff6\n\tSIOCDELRT                     = -0x7fc78df5\n\tSIOCDIFADDR                   = -0x7fd796e7\n\tSIOCDNETOPT                   = -0x3ffe9680\n\tSIOCDX25XLATE                 = -0x7fd7969b\n\tSIOCFIFADDR                   = -0x7fdf966d\n\tSIOCGARP                      = -0x3fb396da\n\tSIOCGETMTUS                   = 0x2000696f\n\tSIOCGETSGCNT                  = -0x3feb8acc\n\tSIOCGETVIFCNT                 = -0x3feb8acd\n\tSIOCGHIWAT                    = 0x40047301\n\tSIOCGIFADDR                   = -0x3fd796df\n\tSIOCGIFADDRS                  = 0x2000698c\n\tSIOCGIFBAUDRATE               = -0x3fd79693\n\tSIOCGIFBRDADDR                = -0x3fd796dd\n\tSIOCGIFCONF                   = -0x3fef96bb\n\tSIOCGIFCONFGLOB               = -0x3fef9670\n\tSIOCGIFDSTADDR                = -0x3fd796de\n\tSIOCGIFFLAGS                  = -0x3fd796ef\n\tSIOCGIFGIDLIST                = 0x20006968\n\tSIOCGIFHWADDR                 = -0x3fab966b\n\tSIOCGIFMETRIC                 = -0x3fd796e9\n\tSIOCGIFMTU                    = -0x3fd796aa\n\tSIOCGIFNETMASK                = -0x3fd796db\n\tSIOCGIFOPTIONS                = -0x3fd796d6\n\tSIOCGISNO                     = -0x3fd79695\n\tSIOCGLOADF                    = -0x3ffb967e\n\tSIOCGLOWAT                    = 0x40047303\n\tSIOCGNETOPT                   = -0x3ffe96a5\n\tSIOCGNETOPT1                  = -0x3fdf967f\n\tSIOCGNMTUS                    = 0x2000696e\n\tSIOCGPGRP                     = 0x40047309\n\tSIOCGSIZIFCONF                = 0x4004696a\n\tSIOCGSRCFILTER                = -0x3fe796cb\n\tSIOCGTUNEPHASE                = -0x3ffb9676\n\tSIOCGX25XLATE                 = -0x3fd7969c\n\tSIOCIFATTACH                  = -0x7fdf9699\n\tSIOCIFDETACH                  = -0x7fdf969a\n\tSIOCIFGETPKEY                 = -0x7fdf969b\n\tSIOCIF_ATM_DARP               = -0x7fdf9683\n\tSIOCIF_ATM_DUMPARP            = -0x7fdf9685\n\tSIOCIF_ATM_GARP               = -0x7fdf9682\n\tSIOCIF_ATM_IDLE               = -0x7fdf9686\n\tSIOCIF_ATM_SARP               = -0x7fdf9681\n\tSIOCIF_ATM_SNMPARP            = -0x7fdf9687\n\tSIOCIF_ATM_SVC                = -0x7fdf9684\n\tSIOCIF_ATM_UBR                = -0x7fdf9688\n\tSIOCIF_DEVHEALTH              = -0x7ffb966c\n\tSIOCIF_IB_ARP_INCOMP          = -0x7fdf9677\n\tSIOCIF_IB_ARP_TIMER           = -0x7fdf9678\n\tSIOCIF_IB_CLEAR_PINFO         = -0x3fdf966f\n\tSIOCIF_IB_DEL_ARP             = -0x7fdf967f\n\tSIOCIF_IB_DEL_PINFO           = -0x3fdf9670\n\tSIOCIF_IB_DUMP_ARP            = -0x7fdf9680\n\tSIOCIF_IB_GET_ARP             = -0x7fdf967e\n\tSIOCIF_IB_GET_INFO            = -0x3f879675\n\tSIOCIF_IB_GET_STATS           = -0x3f879672\n\tSIOCIF_IB_NOTIFY_ADDR_REM     = -0x3f87966a\n\tSIOCIF_IB_RESET_STATS         = -0x3f879671\n\tSIOCIF_IB_RESIZE_CQ           = -0x7fdf9679\n\tSIOCIF_IB_SET_ARP             = -0x7fdf967d\n\tSIOCIF_IB_SET_PKEY            = -0x7fdf967c\n\tSIOCIF_IB_SET_PORT            = -0x7fdf967b\n\tSIOCIF_IB_SET_QKEY            = -0x7fdf9676\n\tSIOCIF_IB_SET_QSIZE           = -0x7fdf967a\n\tSIOCLISTIFVIPA                = 0x20006944\n\tSIOCSARP                      = -0x7fb396e2\n\tSIOCSHIWAT                    = 0xffffffff80047300\n\tSIOCSIFADDR                   = -0x7fd796f4\n\tSIOCSIFADDRORI                = -0x7fdb9673\n\tSIOCSIFBRDADDR                = -0x7fd796ed\n\tSIOCSIFDSTADDR                = -0x7fd796f2\n\tSIOCSIFFLAGS                  = -0x7fd796f0\n\tSIOCSIFGIDLIST                = 0x20006969\n\tSIOCSIFMETRIC                 = -0x7fd796e8\n\tSIOCSIFMTU                    = -0x7fd796a8\n\tSIOCSIFNETDUMP                = -0x7fd796e4\n\tSIOCSIFNETMASK                = -0x7fd796ea\n\tSIOCSIFOPTIONS                = -0x7fd796d7\n\tSIOCSIFSUBCHAN                = -0x7fd796e5\n\tSIOCSISNO                     = -0x7fd79694\n\tSIOCSLOADF                    = -0x3ffb967d\n\tSIOCSLOWAT                    = 0xffffffff80047302\n\tSIOCSNETOPT                   = -0x7ffe96a6\n\tSIOCSPGRP                     = 0xffffffff80047308\n\tSIOCSX25XLATE                 = -0x7fd7969d\n\tSOCK_CONN_DGRAM               = 0x6\n\tSOCK_DGRAM                    = 0x2\n\tSOCK_RAW                      = 0x3\n\tSOCK_RDM                      = 0x4\n\tSOCK_SEQPACKET                = 0x5\n\tSOCK_STREAM                   = 0x1\n\tSOL_SOCKET                    = 0xffff\n\tSOMAXCONN                     = 0x400\n\tSO_ACCEPTCONN                 = 0x2\n\tSO_AUDIT                      = 0x8000\n\tSO_BROADCAST                  = 0x20\n\tSO_CKSUMRECV                  = 0x800\n\tSO_DEBUG                      = 0x1\n\tSO_DONTROUTE                  = 0x10\n\tSO_ERROR                      = 0x1007\n\tSO_KEEPALIVE                  = 0x8\n\tSO_KERNACCEPT                 = 0x2000\n\tSO_LINGER                     = 0x80\n\tSO_NOMULTIPATH                = 0x4000\n\tSO_NOREUSEADDR                = 0x1000\n\tSO_OOBINLINE                  = 0x100\n\tSO_PEERID                     = 0x1009\n\tSO_RCVBUF                     = 0x1002\n\tSO_RCVLOWAT                   = 0x1004\n\tSO_RCVTIMEO                   = 0x1006\n\tSO_REUSEADDR                  = 0x4\n\tSO_REUSEPORT                  = 0x200\n\tSO_SNDBUF                     = 0x1001\n\tSO_SNDLOWAT                   = 0x1003\n\tSO_SNDTIMEO                   = 0x1005\n\tSO_TIMESTAMPNS                = 0x100a\n\tSO_TYPE                       = 0x1008\n\tSO_USELOOPBACK                = 0x40\n\tSO_USE_IFBUFS                 = 0x400\n\tS_BANDURG                     = 0x400\n\tS_EMODFMT                     = 0x3c000000\n\tS_ENFMT                       = 0x400\n\tS_ERROR                       = 0x100\n\tS_HANGUP                      = 0x200\n\tS_HIPRI                       = 0x2\n\tS_ICRYPTO                     = 0x80000\n\tS_IEXEC                       = 0x40\n\tS_IFBLK                       = 0x6000\n\tS_IFCHR                       = 0x2000\n\tS_IFDIR                       = 0x4000\n\tS_IFIFO                       = 0x1000\n\tS_IFJOURNAL                   = 0x10000\n\tS_IFLNK                       = 0xa000\n\tS_IFMPX                       = 0x2200\n\tS_IFMT                        = 0xf000\n\tS_IFPDIR                      = 0x4000000\n\tS_IFPSDIR                     = 0x8000000\n\tS_IFPSSDIR                    = 0xc000000\n\tS_IFREG                       = 0x8000\n\tS_IFSOCK                      = 0xc000\n\tS_IFSYSEA                     = 0x30000000\n\tS_INPUT                       = 0x1\n\tS_IREAD                       = 0x100\n\tS_IRGRP                       = 0x20\n\tS_IROTH                       = 0x4\n\tS_IRUSR                       = 0x100\n\tS_IRWXG                       = 0x38\n\tS_IRWXO                       = 0x7\n\tS_IRWXU                       = 0x1c0\n\tS_ISGID                       = 0x400\n\tS_ISUID                       = 0x800\n\tS_ISVTX                       = 0x200\n\tS_ITCB                        = 0x1000000\n\tS_ITP                         = 0x800000\n\tS_IWGRP                       = 0x10\n\tS_IWOTH                       = 0x2\n\tS_IWRITE                      = 0x80\n\tS_IWUSR                       = 0x80\n\tS_IXACL                       = 0x2000000\n\tS_IXATTR                      = 0x40000\n\tS_IXGRP                       = 0x8\n\tS_IXINTERFACE                 = 0x100000\n\tS_IXMOD                       = 0x40000000\n\tS_IXOTH                       = 0x1\n\tS_IXUSR                       = 0x40\n\tS_MSG                         = 0x8\n\tS_OUTPUT                      = 0x4\n\tS_RDBAND                      = 0x20\n\tS_RDNORM                      = 0x10\n\tS_RESERVED1                   = 0x20000\n\tS_RESERVED2                   = 0x200000\n\tS_RESERVED3                   = 0x400000\n\tS_RESERVED4                   = 0x80000000\n\tS_RESFMT1                     = 0x10000000\n\tS_RESFMT10                    = 0x34000000\n\tS_RESFMT11                    = 0x38000000\n\tS_RESFMT12                    = 0x3c000000\n\tS_RESFMT2                     = 0x14000000\n\tS_RESFMT3                     = 0x18000000\n\tS_RESFMT4                     = 0x1c000000\n\tS_RESFMT5                     = 0x20000000\n\tS_RESFMT6                     = 0x24000000\n\tS_RESFMT7                     = 0x28000000\n\tS_RESFMT8                     = 0x2c000000\n\tS_WRBAND                      = 0x80\n\tS_WRNORM                      = 0x40\n\tTAB0                          = 0x0\n\tTAB1                          = 0x400\n\tTAB2                          = 0x800\n\tTAB3                          = 0xc00\n\tTABDLY                        = 0xc00\n\tTCFLSH                        = 0x540c\n\tTCGETA                        = 0x5405\n\tTCGETS                        = 0x5401\n\tTCIFLUSH                      = 0x0\n\tTCIOFF                        = 0x2\n\tTCIOFLUSH                     = 0x2\n\tTCION                         = 0x3\n\tTCOFLUSH                      = 0x1\n\tTCOOFF                        = 0x0\n\tTCOON                         = 0x1\n\tTCP_24DAYS_WORTH_OF_SLOWTICKS = 0x3f4800\n\tTCP_ACLADD                    = 0x23\n\tTCP_ACLBIND                   = 0x26\n\tTCP_ACLCLEAR                  = 0x22\n\tTCP_ACLDEL                    = 0x24\n\tTCP_ACLDENY                   = 0x8\n\tTCP_ACLFLUSH                  = 0x21\n\tTCP_ACLGID                    = 0x1\n\tTCP_ACLLS                     = 0x25\n\tTCP_ACLSUBNET                 = 0x4\n\tTCP_ACLUID                    = 0x2\n\tTCP_CWND_DF                   = 0x16\n\tTCP_CWND_IF                   = 0x15\n\tTCP_DELAY_ACK_FIN             = 0x2\n\tTCP_DELAY_ACK_SYN             = 0x1\n\tTCP_FASTNAME                  = 0x101080a\n\tTCP_KEEPCNT                   = 0x13\n\tTCP_KEEPIDLE                  = 0x11\n\tTCP_KEEPINTVL                 = 0x12\n\tTCP_LSPRIV                    = 0x29\n\tTCP_LUID                      = 0x20\n\tTCP_MAXBURST                  = 0x8\n\tTCP_MAXDF                     = 0x64\n\tTCP_MAXIF                     = 0x64\n\tTCP_MAXSEG                    = 0x2\n\tTCP_MAXWIN                    = 0xffff\n\tTCP_MAXWINDOWSCALE            = 0xe\n\tTCP_MAX_SACK                  = 0x4\n\tTCP_MSS                       = 0x5b4\n\tTCP_NODELAY                   = 0x1\n\tTCP_NODELAYACK                = 0x14\n\tTCP_NOREDUCE_CWND_EXIT_FRXMT  = 0x19\n\tTCP_NOREDUCE_CWND_IN_FRXMT    = 0x18\n\tTCP_NOTENTER_SSTART           = 0x17\n\tTCP_OPT                       = 0x19\n\tTCP_RFC1323                   = 0x4\n\tTCP_SETPRIV                   = 0x27\n\tTCP_STDURG                    = 0x10\n\tTCP_TIMESTAMP_OPTLEN          = 0xc\n\tTCP_UNSETPRIV                 = 0x28\n\tTCSAFLUSH                     = 0x2\n\tTCSBRK                        = 0x5409\n\tTCSETA                        = 0x5406\n\tTCSETAF                       = 0x5408\n\tTCSETAW                       = 0x5407\n\tTCSETS                        = 0x5402\n\tTCSETSF                       = 0x5404\n\tTCSETSW                       = 0x5403\n\tTCXONC                        = 0x540b\n\tTIMER_ABSTIME                 = 0x3e7\n\tTIMER_MAX                     = 0x20\n\tTIOC                          = 0x5400\n\tTIOCCBRK                      = 0x2000747a\n\tTIOCCDTR                      = 0x20007478\n\tTIOCCONS                      = 0xffffffff80047462\n\tTIOCEXCL                      = 0x2000740d\n\tTIOCFLUSH                     = 0xffffffff80047410\n\tTIOCGETC                      = 0x40067412\n\tTIOCGETD                      = 0x40047400\n\tTIOCGETP                      = 0x40067408\n\tTIOCGLTC                      = 0x40067474\n\tTIOCGPGRP                     = 0x40047477\n\tTIOCGSID                      = 0x40047448\n\tTIOCGSIZE                     = 0x40087468\n\tTIOCGWINSZ                    = 0x40087468\n\tTIOCHPCL                      = 0x20007402\n\tTIOCLBIC                      = 0xffffffff8004747e\n\tTIOCLBIS                      = 0xffffffff8004747f\n\tTIOCLGET                      = 0x4004747c\n\tTIOCLSET                      = 0xffffffff8004747d\n\tTIOCMBIC                      = 0xffffffff8004746b\n\tTIOCMBIS                      = 0xffffffff8004746c\n\tTIOCMGET                      = 0x4004746a\n\tTIOCMIWAIT                    = 0xffffffff80047464\n\tTIOCMODG                      = 0x40047403\n\tTIOCMODS                      = 0xffffffff80047404\n\tTIOCMSET                      = 0xffffffff8004746d\n\tTIOCM_CAR                     = 0x40\n\tTIOCM_CD                      = 0x40\n\tTIOCM_CTS                     = 0x20\n\tTIOCM_DSR                     = 0x100\n\tTIOCM_DTR                     = 0x2\n\tTIOCM_LE                      = 0x1\n\tTIOCM_RI                      = 0x80\n\tTIOCM_RNG                     = 0x80\n\tTIOCM_RTS                     = 0x4\n\tTIOCM_SR                      = 0x10\n\tTIOCM_ST                      = 0x8\n\tTIOCNOTTY                     = 0x20007471\n\tTIOCNXCL                      = 0x2000740e\n\tTIOCOUTQ                      = 0x40047473\n\tTIOCPKT                       = 0xffffffff80047470\n\tTIOCPKT_DATA                  = 0x0\n\tTIOCPKT_DOSTOP                = 0x20\n\tTIOCPKT_FLUSHREAD             = 0x1\n\tTIOCPKT_FLUSHWRITE            = 0x2\n\tTIOCPKT_NOSTOP                = 0x10\n\tTIOCPKT_START                 = 0x8\n\tTIOCPKT_STOP                  = 0x4\n\tTIOCREMOTE                    = 0xffffffff80047469\n\tTIOCSBRK                      = 0x2000747b\n\tTIOCSDTR                      = 0x20007479\n\tTIOCSETC                      = 0xffffffff80067411\n\tTIOCSETD                      = 0xffffffff80047401\n\tTIOCSETN                      = 0xffffffff8006740a\n\tTIOCSETP                      = 0xffffffff80067409\n\tTIOCSLTC                      = 0xffffffff80067475\n\tTIOCSPGRP                     = 0xffffffff80047476\n\tTIOCSSIZE                     = 0xffffffff80087467\n\tTIOCSTART                     = 0x2000746e\n\tTIOCSTI                       = 0xffffffff80017472\n\tTIOCSTOP                      = 0x2000746f\n\tTIOCSWINSZ                    = 0xffffffff80087467\n\tTIOCUCNTL                     = 0xffffffff80047466\n\tTOSTOP                        = 0x10000\n\tUTIME_NOW                     = -0x2\n\tUTIME_OMIT                    = -0x3\n\tVDISCRD                       = 0xc\n\tVDSUSP                        = 0xa\n\tVEOF                          = 0x4\n\tVEOL                          = 0x5\n\tVEOL2                         = 0x6\n\tVERASE                        = 0x2\n\tVINTR                         = 0x0\n\tVKILL                         = 0x3\n\tVLNEXT                        = 0xe\n\tVMIN                          = 0x4\n\tVQUIT                         = 0x1\n\tVREPRINT                      = 0xb\n\tVSTART                        = 0x7\n\tVSTOP                         = 0x8\n\tVSTRT                         = 0x7\n\tVSUSP                         = 0x9\n\tVT0                           = 0x0\n\tVT1                           = 0x8000\n\tVTDELAY                       = 0x2000\n\tVTDLY                         = 0x8000\n\tVTIME                         = 0x5\n\tVWERSE                        = 0xd\n\tWPARSTART                     = 0x1\n\tWPARSTOP                      = 0x2\n\tWPARTTYNAME                   = \"Global\"\n\tXCASE                         = 0x4\n\tXTABS                         = 0xc00\n\t_FDATAFLUSH                   = 0x2000000000\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x43)\n\tEADDRNOTAVAIL   = syscall.Errno(0x44)\n\tEAFNOSUPPORT    = syscall.Errno(0x42)\n\tEAGAIN          = syscall.Errno(0xb)\n\tEALREADY        = syscall.Errno(0x38)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADMSG         = syscall.Errno(0x78)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x75)\n\tECHILD          = syscall.Errno(0xa)\n\tECHRNG          = syscall.Errno(0x25)\n\tECLONEME        = syscall.Errno(0x52)\n\tECONNABORTED    = syscall.Errno(0x48)\n\tECONNREFUSED    = syscall.Errno(0x4f)\n\tECONNRESET      = syscall.Errno(0x49)\n\tECORRUPT        = syscall.Errno(0x59)\n\tEDEADLK         = syscall.Errno(0x2d)\n\tEDESTADDREQ     = syscall.Errno(0x3a)\n\tEDESTADDRREQ    = syscall.Errno(0x3a)\n\tEDIST           = syscall.Errno(0x35)\n\tEDOM            = syscall.Errno(0x21)\n\tEDQUOT          = syscall.Errno(0x58)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFORMAT         = syscall.Errno(0x30)\n\tEHOSTDOWN       = syscall.Errno(0x50)\n\tEHOSTUNREACH    = syscall.Errno(0x51)\n\tEIDRM           = syscall.Errno(0x24)\n\tEILSEQ          = syscall.Errno(0x74)\n\tEINPROGRESS     = syscall.Errno(0x37)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEISCONN         = syscall.Errno(0x4b)\n\tEISDIR          = syscall.Errno(0x15)\n\tEL2HLT          = syscall.Errno(0x2c)\n\tEL2NSYNC        = syscall.Errno(0x26)\n\tEL3HLT          = syscall.Errno(0x27)\n\tEL3RST          = syscall.Errno(0x28)\n\tELNRNG          = syscall.Errno(0x29)\n\tELOOP           = syscall.Errno(0x55)\n\tEMEDIA          = syscall.Errno(0x6e)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x3b)\n\tEMULTIHOP       = syscall.Errno(0x7d)\n\tENAMETOOLONG    = syscall.Errno(0x56)\n\tENETDOWN        = syscall.Errno(0x45)\n\tENETRESET       = syscall.Errno(0x47)\n\tENETUNREACH     = syscall.Errno(0x46)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x70)\n\tENOBUFS         = syscall.Errno(0x4a)\n\tENOCONNECT      = syscall.Errno(0x32)\n\tENOCSI          = syscall.Errno(0x2b)\n\tENODATA         = syscall.Errno(0x7a)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x31)\n\tENOLINK         = syscall.Errno(0x7e)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x23)\n\tENOPROTOOPT     = syscall.Errno(0x3d)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSR           = syscall.Errno(0x76)\n\tENOSTR          = syscall.Errno(0x7b)\n\tENOSYS          = syscall.Errno(0x6d)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x4c)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x11)\n\tENOTREADY       = syscall.Errno(0x2e)\n\tENOTRECOVERABLE = syscall.Errno(0x5e)\n\tENOTRUST        = syscall.Errno(0x72)\n\tENOTSOCK        = syscall.Errno(0x39)\n\tENOTSUP         = syscall.Errno(0x7c)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x40)\n\tEOVERFLOW       = syscall.Errno(0x7f)\n\tEOWNERDEAD      = syscall.Errno(0x5f)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x41)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x53)\n\tEPROTO          = syscall.Errno(0x79)\n\tEPROTONOSUPPORT = syscall.Errno(0x3e)\n\tEPROTOTYPE      = syscall.Errno(0x3c)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x5d)\n\tERESTART        = syscall.Errno(0x52)\n\tEROFS           = syscall.Errno(0x1e)\n\tESAD            = syscall.Errno(0x71)\n\tESHUTDOWN       = syscall.Errno(0x4d)\n\tESOCKTNOSUPPORT = syscall.Errno(0x3f)\n\tESOFT           = syscall.Errno(0x6f)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x34)\n\tESYSERROR       = syscall.Errno(0x5a)\n\tETIME           = syscall.Errno(0x77)\n\tETIMEDOUT       = syscall.Errno(0x4e)\n\tETOOMANYREFS    = syscall.Errno(0x73)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUNATCH         = syscall.Errno(0x2a)\n\tEUSERS          = syscall.Errno(0x54)\n\tEWOULDBLOCK     = syscall.Errno(0xb)\n\tEWRPROTECT      = syscall.Errno(0x2f)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT     = syscall.Signal(0x6)\n\tSIGAIO      = syscall.Signal(0x17)\n\tSIGALRM     = syscall.Signal(0xe)\n\tSIGALRM1    = syscall.Signal(0x26)\n\tSIGBUS      = syscall.Signal(0xa)\n\tSIGCAPI     = syscall.Signal(0x31)\n\tSIGCHLD     = syscall.Signal(0x14)\n\tSIGCLD      = syscall.Signal(0x14)\n\tSIGCONT     = syscall.Signal(0x13)\n\tSIGCPUFAIL  = syscall.Signal(0x3b)\n\tSIGDANGER   = syscall.Signal(0x21)\n\tSIGEMT      = syscall.Signal(0x7)\n\tSIGFPE      = syscall.Signal(0x8)\n\tSIGGRANT    = syscall.Signal(0x3c)\n\tSIGHUP      = syscall.Signal(0x1)\n\tSIGILL      = syscall.Signal(0x4)\n\tSIGINT      = syscall.Signal(0x2)\n\tSIGIO       = syscall.Signal(0x17)\n\tSIGIOINT    = syscall.Signal(0x10)\n\tSIGIOT      = syscall.Signal(0x6)\n\tSIGKAP      = syscall.Signal(0x3c)\n\tSIGKILL     = syscall.Signal(0x9)\n\tSIGLOST     = syscall.Signal(0x6)\n\tSIGMAX      = syscall.Signal(0xff)\n\tSIGMAX32    = syscall.Signal(0x3f)\n\tSIGMIGRATE  = syscall.Signal(0x23)\n\tSIGMSG      = syscall.Signal(0x1b)\n\tSIGPIPE     = syscall.Signal(0xd)\n\tSIGPOLL     = syscall.Signal(0x17)\n\tSIGPRE      = syscall.Signal(0x24)\n\tSIGPROF     = syscall.Signal(0x20)\n\tSIGPTY      = syscall.Signal(0x17)\n\tSIGPWR      = syscall.Signal(0x1d)\n\tSIGQUIT     = syscall.Signal(0x3)\n\tSIGRECONFIG = syscall.Signal(0x3a)\n\tSIGRETRACT  = syscall.Signal(0x3d)\n\tSIGSAK      = syscall.Signal(0x3f)\n\tSIGSEGV     = syscall.Signal(0xb)\n\tSIGSOUND    = syscall.Signal(0x3e)\n\tSIGSTOP     = syscall.Signal(0x11)\n\tSIGSYS      = syscall.Signal(0xc)\n\tSIGSYSERROR = syscall.Signal(0x30)\n\tSIGTALRM    = syscall.Signal(0x26)\n\tSIGTERM     = syscall.Signal(0xf)\n\tSIGTRAP     = syscall.Signal(0x5)\n\tSIGTSTP     = syscall.Signal(0x12)\n\tSIGTTIN     = syscall.Signal(0x15)\n\tSIGTTOU     = syscall.Signal(0x16)\n\tSIGURG      = syscall.Signal(0x10)\n\tSIGUSR1     = syscall.Signal(0x1e)\n\tSIGUSR2     = syscall.Signal(0x1f)\n\tSIGVIRT     = syscall.Signal(0x25)\n\tSIGVTALRM   = syscall.Signal(0x22)\n\tSIGWAITING  = syscall.Signal(0x27)\n\tSIGWINCH    = syscall.Signal(0x1c)\n\tSIGXCPU     = syscall.Signal(0x18)\n\tSIGXFSZ     = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"not owner\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"I/O error\"},\n\t{6, \"ENXIO\", \"no such device or address\"},\n\t{7, \"E2BIG\", \"arg list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file number\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EWOULDBLOCK\", \"resource temporarily unavailable\"},\n\t{12, \"ENOMEM\", \"not enough space\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device busy\"},\n\t{17, \"ENOTEMPTY\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"no such device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"file table overflow\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"not a typewriter\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large\"},\n\t{35, \"ENOMSG\", \"no message of desired type\"},\n\t{36, \"EIDRM\", \"identifier removed\"},\n\t{37, \"ECHRNG\", \"channel number out of range\"},\n\t{38, \"EL2NSYNC\", \"level 2 not synchronized\"},\n\t{39, \"EL3HLT\", \"level 3 halted\"},\n\t{40, \"EL3RST\", \"level 3 reset\"},\n\t{41, \"ELNRNG\", \"link number out of range\"},\n\t{42, \"EUNATCH\", \"protocol driver not attached\"},\n\t{43, \"ENOCSI\", \"no CSI structure available\"},\n\t{44, \"EL2HLT\", \"level 2 halted\"},\n\t{45, \"EDEADLK\", \"deadlock condition if locked\"},\n\t{46, \"ENOTREADY\", \"device not ready\"},\n\t{47, \"EWRPROTECT\", \"write-protected media\"},\n\t{48, \"EFORMAT\", \"unformatted or incompatible media\"},\n\t{49, \"ENOLCK\", \"no locks available\"},\n\t{50, \"ENOCONNECT\", \"cannot Establish Connection\"},\n\t{52, \"ESTALE\", \"missing file or filesystem\"},\n\t{53, \"EDIST\", \"requests blocked by Administrator\"},\n\t{55, \"EINPROGRESS\", \"operation now in progress\"},\n\t{56, \"EALREADY\", \"operation already in progress\"},\n\t{57, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{58, \"EDESTADDREQ\", \"destination address required\"},\n\t{59, \"EMSGSIZE\", \"message too long\"},\n\t{60, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{61, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{62, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{63, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{64, \"EOPNOTSUPP\", \"operation not supported on socket\"},\n\t{65, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{66, \"EAFNOSUPPORT\", \"addr family not supported by protocol\"},\n\t{67, \"EADDRINUSE\", \"address already in use\"},\n\t{68, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{69, \"ENETDOWN\", \"network is down\"},\n\t{70, \"ENETUNREACH\", \"network is unreachable\"},\n\t{71, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{72, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{73, \"ECONNRESET\", \"connection reset by peer\"},\n\t{74, \"ENOBUFS\", \"no buffer space available\"},\n\t{75, \"EISCONN\", \"socket is already connected\"},\n\t{76, \"ENOTCONN\", \"socket is not connected\"},\n\t{77, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{78, \"ETIMEDOUT\", \"connection timed out\"},\n\t{79, \"ECONNREFUSED\", \"connection refused\"},\n\t{80, \"EHOSTDOWN\", \"host is down\"},\n\t{81, \"EHOSTUNREACH\", \"no route to host\"},\n\t{82, \"ERESTART\", \"restart the system call\"},\n\t{83, \"EPROCLIM\", \"too many processes\"},\n\t{84, \"EUSERS\", \"too many users\"},\n\t{85, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{86, \"ENAMETOOLONG\", \"file name too long\"},\n\t{88, \"EDQUOT\", \"disk quota exceeded\"},\n\t{89, \"ECORRUPT\", \"invalid file system control data detected\"},\n\t{90, \"ESYSERROR\", \"for future use \"},\n\t{93, \"EREMOTE\", \"item is not local to host\"},\n\t{94, \"ENOTRECOVERABLE\", \"state not recoverable \"},\n\t{95, \"EOWNERDEAD\", \"previous owner died \"},\n\t{109, \"ENOSYS\", \"function not implemented\"},\n\t{110, \"EMEDIA\", \"media surface error\"},\n\t{111, \"ESOFT\", \"I/O completed, but needs relocation\"},\n\t{112, \"ENOATTR\", \"no attribute found\"},\n\t{113, \"ESAD\", \"security Authentication Denied\"},\n\t{114, \"ENOTRUST\", \"not a Trusted Program\"},\n\t{115, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{116, \"EILSEQ\", \"invalid wide character\"},\n\t{117, \"ECANCELED\", \"asynchronous I/O cancelled\"},\n\t{118, \"ENOSR\", \"out of STREAMS resources\"},\n\t{119, \"ETIME\", \"system call timed out\"},\n\t{120, \"EBADMSG\", \"next message has wrong type\"},\n\t{121, \"EPROTO\", \"error in protocol\"},\n\t{122, \"ENODATA\", \"no message on stream head read q\"},\n\t{123, \"ENOSTR\", \"fd not associated with a stream\"},\n\t{124, \"ENOTSUP\", \"unsupported attribute value\"},\n\t{125, \"EMULTIHOP\", \"multihop is not allowed\"},\n\t{126, \"ENOLINK\", \"the server link has been severed\"},\n\t{127, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGIOT\", \"IOT/Abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"stopped (signal)\"},\n\t{18, \"SIGTSTP\", \"stopped\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible/complete\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{27, \"SIGMSG\", \"input device data\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGPWR\", \"power-failure\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n\t{32, \"SIGPROF\", \"profiling timer expired\"},\n\t{33, \"SIGDANGER\", \"paging space low\"},\n\t{34, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{35, \"SIGMIGRATE\", \"signal 35\"},\n\t{36, \"SIGPRE\", \"signal 36\"},\n\t{37, \"SIGVIRT\", \"signal 37\"},\n\t{38, \"SIGTALRM\", \"signal 38\"},\n\t{39, \"SIGWAITING\", \"signal 39\"},\n\t{48, \"SIGSYSERROR\", \"signal 48\"},\n\t{49, \"SIGCAPI\", \"signal 49\"},\n\t{58, \"SIGRECONFIG\", \"signal 58\"},\n\t{59, \"SIGCPUFAIL\", \"CPU Failure Predicted\"},\n\t{60, \"SIGGRANT\", \"monitor mode granted\"},\n\t{61, \"SIGRETRACT\", \"monitor mode retracted\"},\n\t{62, \"SIGSOUND\", \"sound completed\"},\n\t{63, \"SIGMAX32\", \"secure attention\"},\n\t{255, \"SIGMAX\", \"signal 255\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_darwin_386.go",
    "content": "// mkerrors.sh -m32\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build 386,darwin\n\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs -- -m32 _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                      = 0x10\n\tAF_CCITT                          = 0xa\n\tAF_CHAOS                          = 0x5\n\tAF_CNT                            = 0x15\n\tAF_COIP                           = 0x14\n\tAF_DATAKIT                        = 0x9\n\tAF_DECnet                         = 0xc\n\tAF_DLI                            = 0xd\n\tAF_E164                           = 0x1c\n\tAF_ECMA                           = 0x8\n\tAF_HYLINK                         = 0xf\n\tAF_IEEE80211                      = 0x25\n\tAF_IMPLINK                        = 0x3\n\tAF_INET                           = 0x2\n\tAF_INET6                          = 0x1e\n\tAF_IPX                            = 0x17\n\tAF_ISDN                           = 0x1c\n\tAF_ISO                            = 0x7\n\tAF_LAT                            = 0xe\n\tAF_LINK                           = 0x12\n\tAF_LOCAL                          = 0x1\n\tAF_MAX                            = 0x28\n\tAF_NATM                           = 0x1f\n\tAF_NDRV                           = 0x1b\n\tAF_NETBIOS                        = 0x21\n\tAF_NS                             = 0x6\n\tAF_OSI                            = 0x7\n\tAF_PPP                            = 0x22\n\tAF_PUP                            = 0x4\n\tAF_RESERVED_36                    = 0x24\n\tAF_ROUTE                          = 0x11\n\tAF_SIP                            = 0x18\n\tAF_SNA                            = 0xb\n\tAF_SYSTEM                         = 0x20\n\tAF_UNIX                           = 0x1\n\tAF_UNSPEC                         = 0x0\n\tAF_UTUN                           = 0x26\n\tALTWERASE                         = 0x200\n\tATTR_BIT_MAP_COUNT                = 0x5\n\tATTR_CMN_ACCESSMASK               = 0x20000\n\tATTR_CMN_ACCTIME                  = 0x1000\n\tATTR_CMN_ADDEDTIME                = 0x10000000\n\tATTR_CMN_BKUPTIME                 = 0x2000\n\tATTR_CMN_CHGTIME                  = 0x800\n\tATTR_CMN_CRTIME                   = 0x200\n\tATTR_CMN_DATA_PROTECT_FLAGS       = 0x40000000\n\tATTR_CMN_DEVID                    = 0x2\n\tATTR_CMN_DOCUMENT_ID              = 0x100000\n\tATTR_CMN_ERROR                    = 0x20000000\n\tATTR_CMN_EXTENDED_SECURITY        = 0x400000\n\tATTR_CMN_FILEID                   = 0x2000000\n\tATTR_CMN_FLAGS                    = 0x40000\n\tATTR_CMN_FNDRINFO                 = 0x4000\n\tATTR_CMN_FSID                     = 0x4\n\tATTR_CMN_FULLPATH                 = 0x8000000\n\tATTR_CMN_GEN_COUNT                = 0x80000\n\tATTR_CMN_GRPID                    = 0x10000\n\tATTR_CMN_GRPUUID                  = 0x1000000\n\tATTR_CMN_MODTIME                  = 0x400\n\tATTR_CMN_NAME                     = 0x1\n\tATTR_CMN_NAMEDATTRCOUNT           = 0x80000\n\tATTR_CMN_NAMEDATTRLIST            = 0x100000\n\tATTR_CMN_OBJID                    = 0x20\n\tATTR_CMN_OBJPERMANENTID           = 0x40\n\tATTR_CMN_OBJTAG                   = 0x10\n\tATTR_CMN_OBJTYPE                  = 0x8\n\tATTR_CMN_OWNERID                  = 0x8000\n\tATTR_CMN_PARENTID                 = 0x4000000\n\tATTR_CMN_PAROBJID                 = 0x80\n\tATTR_CMN_RETURNED_ATTRS           = 0x80000000\n\tATTR_CMN_SCRIPT                   = 0x100\n\tATTR_CMN_SETMASK                  = 0x41c7ff00\n\tATTR_CMN_USERACCESS               = 0x200000\n\tATTR_CMN_UUID                     = 0x800000\n\tATTR_CMN_VALIDMASK                = 0xffffffff\n\tATTR_CMN_VOLSETMASK               = 0x6700\n\tATTR_FILE_ALLOCSIZE               = 0x4\n\tATTR_FILE_CLUMPSIZE               = 0x10\n\tATTR_FILE_DATAALLOCSIZE           = 0x400\n\tATTR_FILE_DATAEXTENTS             = 0x800\n\tATTR_FILE_DATALENGTH              = 0x200\n\tATTR_FILE_DEVTYPE                 = 0x20\n\tATTR_FILE_FILETYPE                = 0x40\n\tATTR_FILE_FORKCOUNT               = 0x80\n\tATTR_FILE_FORKLIST                = 0x100\n\tATTR_FILE_IOBLOCKSIZE             = 0x8\n\tATTR_FILE_LINKCOUNT               = 0x1\n\tATTR_FILE_RSRCALLOCSIZE           = 0x2000\n\tATTR_FILE_RSRCEXTENTS             = 0x4000\n\tATTR_FILE_RSRCLENGTH              = 0x1000\n\tATTR_FILE_SETMASK                 = 0x20\n\tATTR_FILE_TOTALSIZE               = 0x2\n\tATTR_FILE_VALIDMASK               = 0x37ff\n\tATTR_VOL_ALLOCATIONCLUMP          = 0x40\n\tATTR_VOL_ATTRIBUTES               = 0x40000000\n\tATTR_VOL_CAPABILITIES             = 0x20000\n\tATTR_VOL_DIRCOUNT                 = 0x400\n\tATTR_VOL_ENCODINGSUSED            = 0x10000\n\tATTR_VOL_FILECOUNT                = 0x200\n\tATTR_VOL_FSTYPE                   = 0x1\n\tATTR_VOL_INFO                     = 0x80000000\n\tATTR_VOL_IOBLOCKSIZE              = 0x80\n\tATTR_VOL_MAXOBJCOUNT              = 0x800\n\tATTR_VOL_MINALLOCATION            = 0x20\n\tATTR_VOL_MOUNTEDDEVICE            = 0x8000\n\tATTR_VOL_MOUNTFLAGS               = 0x4000\n\tATTR_VOL_MOUNTPOINT               = 0x1000\n\tATTR_VOL_NAME                     = 0x2000\n\tATTR_VOL_OBJCOUNT                 = 0x100\n\tATTR_VOL_QUOTA_SIZE               = 0x10000000\n\tATTR_VOL_RESERVED_SIZE            = 0x20000000\n\tATTR_VOL_SETMASK                  = 0x80002000\n\tATTR_VOL_SIGNATURE                = 0x2\n\tATTR_VOL_SIZE                     = 0x4\n\tATTR_VOL_SPACEAVAIL               = 0x10\n\tATTR_VOL_SPACEFREE                = 0x8\n\tATTR_VOL_UUID                     = 0x40000\n\tATTR_VOL_VALIDMASK                = 0xf007ffff\n\tB0                                = 0x0\n\tB110                              = 0x6e\n\tB115200                           = 0x1c200\n\tB1200                             = 0x4b0\n\tB134                              = 0x86\n\tB14400                            = 0x3840\n\tB150                              = 0x96\n\tB1800                             = 0x708\n\tB19200                            = 0x4b00\n\tB200                              = 0xc8\n\tB230400                           = 0x38400\n\tB2400                             = 0x960\n\tB28800                            = 0x7080\n\tB300                              = 0x12c\n\tB38400                            = 0x9600\n\tB4800                             = 0x12c0\n\tB50                               = 0x32\n\tB57600                            = 0xe100\n\tB600                              = 0x258\n\tB7200                             = 0x1c20\n\tB75                               = 0x4b\n\tB76800                            = 0x12c00\n\tB9600                             = 0x2580\n\tBIOCFLUSH                         = 0x20004268\n\tBIOCGBLEN                         = 0x40044266\n\tBIOCGDLT                          = 0x4004426a\n\tBIOCGDLTLIST                      = 0xc00c4279\n\tBIOCGETIF                         = 0x4020426b\n\tBIOCGHDRCMPLT                     = 0x40044274\n\tBIOCGRSIG                         = 0x40044272\n\tBIOCGRTIMEOUT                     = 0x4008426e\n\tBIOCGSEESENT                      = 0x40044276\n\tBIOCGSTATS                        = 0x4008426f\n\tBIOCIMMEDIATE                     = 0x80044270\n\tBIOCPROMISC                       = 0x20004269\n\tBIOCSBLEN                         = 0xc0044266\n\tBIOCSDLT                          = 0x80044278\n\tBIOCSETF                          = 0x80084267\n\tBIOCSETFNR                        = 0x8008427e\n\tBIOCSETIF                         = 0x8020426c\n\tBIOCSHDRCMPLT                     = 0x80044275\n\tBIOCSRSIG                         = 0x80044273\n\tBIOCSRTIMEOUT                     = 0x8008426d\n\tBIOCSSEESENT                      = 0x80044277\n\tBIOCVERSION                       = 0x40044271\n\tBPF_A                             = 0x10\n\tBPF_ABS                           = 0x20\n\tBPF_ADD                           = 0x0\n\tBPF_ALIGNMENT                     = 0x4\n\tBPF_ALU                           = 0x4\n\tBPF_AND                           = 0x50\n\tBPF_B                             = 0x10\n\tBPF_DIV                           = 0x30\n\tBPF_H                             = 0x8\n\tBPF_IMM                           = 0x0\n\tBPF_IND                           = 0x40\n\tBPF_JA                            = 0x0\n\tBPF_JEQ                           = 0x10\n\tBPF_JGE                           = 0x30\n\tBPF_JGT                           = 0x20\n\tBPF_JMP                           = 0x5\n\tBPF_JSET                          = 0x40\n\tBPF_K                             = 0x0\n\tBPF_LD                            = 0x0\n\tBPF_LDX                           = 0x1\n\tBPF_LEN                           = 0x80\n\tBPF_LSH                           = 0x60\n\tBPF_MAJOR_VERSION                 = 0x1\n\tBPF_MAXBUFSIZE                    = 0x80000\n\tBPF_MAXINSNS                      = 0x200\n\tBPF_MEM                           = 0x60\n\tBPF_MEMWORDS                      = 0x10\n\tBPF_MINBUFSIZE                    = 0x20\n\tBPF_MINOR_VERSION                 = 0x1\n\tBPF_MISC                          = 0x7\n\tBPF_MSH                           = 0xa0\n\tBPF_MUL                           = 0x20\n\tBPF_NEG                           = 0x80\n\tBPF_OR                            = 0x40\n\tBPF_RELEASE                       = 0x30bb6\n\tBPF_RET                           = 0x6\n\tBPF_RSH                           = 0x70\n\tBPF_ST                            = 0x2\n\tBPF_STX                           = 0x3\n\tBPF_SUB                           = 0x10\n\tBPF_TAX                           = 0x0\n\tBPF_TXA                           = 0x80\n\tBPF_W                             = 0x0\n\tBPF_X                             = 0x8\n\tBRKINT                            = 0x2\n\tBS0                               = 0x0\n\tBS1                               = 0x8000\n\tBSDLY                             = 0x8000\n\tCFLUSH                            = 0xf\n\tCLOCAL                            = 0x8000\n\tCLOCK_MONOTONIC                   = 0x6\n\tCLOCK_MONOTONIC_RAW               = 0x4\n\tCLOCK_MONOTONIC_RAW_APPROX        = 0x5\n\tCLOCK_PROCESS_CPUTIME_ID          = 0xc\n\tCLOCK_REALTIME                    = 0x0\n\tCLOCK_THREAD_CPUTIME_ID           = 0x10\n\tCLOCK_UPTIME_RAW                  = 0x8\n\tCLOCK_UPTIME_RAW_APPROX           = 0x9\n\tCR0                               = 0x0\n\tCR1                               = 0x1000\n\tCR2                               = 0x2000\n\tCR3                               = 0x3000\n\tCRDLY                             = 0x3000\n\tCREAD                             = 0x800\n\tCRTSCTS                           = 0x30000\n\tCS5                               = 0x0\n\tCS6                               = 0x100\n\tCS7                               = 0x200\n\tCS8                               = 0x300\n\tCSIZE                             = 0x300\n\tCSTART                            = 0x11\n\tCSTATUS                           = 0x14\n\tCSTOP                             = 0x13\n\tCSTOPB                            = 0x400\n\tCSUSP                             = 0x1a\n\tCTL_HW                            = 0x6\n\tCTL_KERN                          = 0x1\n\tCTL_MAXNAME                       = 0xc\n\tCTL_NET                           = 0x4\n\tDLT_A429                          = 0xb8\n\tDLT_A653_ICM                      = 0xb9\n\tDLT_AIRONET_HEADER                = 0x78\n\tDLT_AOS                           = 0xde\n\tDLT_APPLE_IP_OVER_IEEE1394        = 0x8a\n\tDLT_ARCNET                        = 0x7\n\tDLT_ARCNET_LINUX                  = 0x81\n\tDLT_ATM_CLIP                      = 0x13\n\tDLT_ATM_RFC1483                   = 0xb\n\tDLT_AURORA                        = 0x7e\n\tDLT_AX25                          = 0x3\n\tDLT_AX25_KISS                     = 0xca\n\tDLT_BACNET_MS_TP                  = 0xa5\n\tDLT_BLUETOOTH_HCI_H4              = 0xbb\n\tDLT_BLUETOOTH_HCI_H4_WITH_PHDR    = 0xc9\n\tDLT_CAN20B                        = 0xbe\n\tDLT_CAN_SOCKETCAN                 = 0xe3\n\tDLT_CHAOS                         = 0x5\n\tDLT_CHDLC                         = 0x68\n\tDLT_CISCO_IOS                     = 0x76\n\tDLT_C_HDLC                        = 0x68\n\tDLT_C_HDLC_WITH_DIR               = 0xcd\n\tDLT_DBUS                          = 0xe7\n\tDLT_DECT                          = 0xdd\n\tDLT_DOCSIS                        = 0x8f\n\tDLT_DVB_CI                        = 0xeb\n\tDLT_ECONET                        = 0x73\n\tDLT_EN10MB                        = 0x1\n\tDLT_EN3MB                         = 0x2\n\tDLT_ENC                           = 0x6d\n\tDLT_ERF                           = 0xc5\n\tDLT_ERF_ETH                       = 0xaf\n\tDLT_ERF_POS                       = 0xb0\n\tDLT_FC_2                          = 0xe0\n\tDLT_FC_2_WITH_FRAME_DELIMS        = 0xe1\n\tDLT_FDDI                          = 0xa\n\tDLT_FLEXRAY                       = 0xd2\n\tDLT_FRELAY                        = 0x6b\n\tDLT_FRELAY_WITH_DIR               = 0xce\n\tDLT_GCOM_SERIAL                   = 0xad\n\tDLT_GCOM_T1E1                     = 0xac\n\tDLT_GPF_F                         = 0xab\n\tDLT_GPF_T                         = 0xaa\n\tDLT_GPRS_LLC                      = 0xa9\n\tDLT_GSMTAP_ABIS                   = 0xda\n\tDLT_GSMTAP_UM                     = 0xd9\n\tDLT_HHDLC                         = 0x79\n\tDLT_IBM_SN                        = 0x92\n\tDLT_IBM_SP                        = 0x91\n\tDLT_IEEE802                       = 0x6\n\tDLT_IEEE802_11                    = 0x69\n\tDLT_IEEE802_11_RADIO              = 0x7f\n\tDLT_IEEE802_11_RADIO_AVS          = 0xa3\n\tDLT_IEEE802_15_4                  = 0xc3\n\tDLT_IEEE802_15_4_LINUX            = 0xbf\n\tDLT_IEEE802_15_4_NOFCS            = 0xe6\n\tDLT_IEEE802_15_4_NONASK_PHY       = 0xd7\n\tDLT_IEEE802_16_MAC_CPS            = 0xbc\n\tDLT_IEEE802_16_MAC_CPS_RADIO      = 0xc1\n\tDLT_IPFILTER                      = 0x74\n\tDLT_IPMB                          = 0xc7\n\tDLT_IPMB_LINUX                    = 0xd1\n\tDLT_IPNET                         = 0xe2\n\tDLT_IPOIB                         = 0xf2\n\tDLT_IPV4                          = 0xe4\n\tDLT_IPV6                          = 0xe5\n\tDLT_IP_OVER_FC                    = 0x7a\n\tDLT_JUNIPER_ATM1                  = 0x89\n\tDLT_JUNIPER_ATM2                  = 0x87\n\tDLT_JUNIPER_ATM_CEMIC             = 0xee\n\tDLT_JUNIPER_CHDLC                 = 0xb5\n\tDLT_JUNIPER_ES                    = 0x84\n\tDLT_JUNIPER_ETHER                 = 0xb2\n\tDLT_JUNIPER_FIBRECHANNEL          = 0xea\n\tDLT_JUNIPER_FRELAY                = 0xb4\n\tDLT_JUNIPER_GGSN                  = 0x85\n\tDLT_JUNIPER_ISM                   = 0xc2\n\tDLT_JUNIPER_MFR                   = 0x86\n\tDLT_JUNIPER_MLFR                  = 0x83\n\tDLT_JUNIPER_MLPPP                 = 0x82\n\tDLT_JUNIPER_MONITOR               = 0xa4\n\tDLT_JUNIPER_PIC_PEER              = 0xae\n\tDLT_JUNIPER_PPP                   = 0xb3\n\tDLT_JUNIPER_PPPOE                 = 0xa7\n\tDLT_JUNIPER_PPPOE_ATM             = 0xa8\n\tDLT_JUNIPER_SERVICES              = 0x88\n\tDLT_JUNIPER_SRX_E2E               = 0xe9\n\tDLT_JUNIPER_ST                    = 0xc8\n\tDLT_JUNIPER_VP                    = 0xb7\n\tDLT_JUNIPER_VS                    = 0xe8\n\tDLT_LAPB_WITH_DIR                 = 0xcf\n\tDLT_LAPD                          = 0xcb\n\tDLT_LIN                           = 0xd4\n\tDLT_LINUX_EVDEV                   = 0xd8\n\tDLT_LINUX_IRDA                    = 0x90\n\tDLT_LINUX_LAPD                    = 0xb1\n\tDLT_LINUX_PPP_WITHDIRECTION       = 0xa6\n\tDLT_LINUX_SLL                     = 0x71\n\tDLT_LOOP                          = 0x6c\n\tDLT_LTALK                         = 0x72\n\tDLT_MATCHING_MAX                  = 0xf5\n\tDLT_MATCHING_MIN                  = 0x68\n\tDLT_MFR                           = 0xb6\n\tDLT_MOST                          = 0xd3\n\tDLT_MPEG_2_TS                     = 0xf3\n\tDLT_MPLS                          = 0xdb\n\tDLT_MTP2                          = 0x8c\n\tDLT_MTP2_WITH_PHDR                = 0x8b\n\tDLT_MTP3                          = 0x8d\n\tDLT_MUX27010                      = 0xec\n\tDLT_NETANALYZER                   = 0xf0\n\tDLT_NETANALYZER_TRANSPARENT       = 0xf1\n\tDLT_NFC_LLCP                      = 0xf5\n\tDLT_NFLOG                         = 0xef\n\tDLT_NG40                          = 0xf4\n\tDLT_NULL                          = 0x0\n\tDLT_PCI_EXP                       = 0x7d\n\tDLT_PFLOG                         = 0x75\n\tDLT_PFSYNC                        = 0x12\n\tDLT_PPI                           = 0xc0\n\tDLT_PPP                           = 0x9\n\tDLT_PPP_BSDOS                     = 0x10\n\tDLT_PPP_ETHER                     = 0x33\n\tDLT_PPP_PPPD                      = 0xa6\n\tDLT_PPP_SERIAL                    = 0x32\n\tDLT_PPP_WITH_DIR                  = 0xcc\n\tDLT_PPP_WITH_DIRECTION            = 0xa6\n\tDLT_PRISM_HEADER                  = 0x77\n\tDLT_PRONET                        = 0x4\n\tDLT_RAIF1                         = 0xc6\n\tDLT_RAW                           = 0xc\n\tDLT_RIO                           = 0x7c\n\tDLT_SCCP                          = 0x8e\n\tDLT_SITA                          = 0xc4\n\tDLT_SLIP                          = 0x8\n\tDLT_SLIP_BSDOS                    = 0xf\n\tDLT_STANAG_5066_D_PDU             = 0xed\n\tDLT_SUNATM                        = 0x7b\n\tDLT_SYMANTEC_FIREWALL             = 0x63\n\tDLT_TZSP                          = 0x80\n\tDLT_USB                           = 0xba\n\tDLT_USB_LINUX                     = 0xbd\n\tDLT_USB_LINUX_MMAPPED             = 0xdc\n\tDLT_USER0                         = 0x93\n\tDLT_USER1                         = 0x94\n\tDLT_USER10                        = 0x9d\n\tDLT_USER11                        = 0x9e\n\tDLT_USER12                        = 0x9f\n\tDLT_USER13                        = 0xa0\n\tDLT_USER14                        = 0xa1\n\tDLT_USER15                        = 0xa2\n\tDLT_USER2                         = 0x95\n\tDLT_USER3                         = 0x96\n\tDLT_USER4                         = 0x97\n\tDLT_USER5                         = 0x98\n\tDLT_USER6                         = 0x99\n\tDLT_USER7                         = 0x9a\n\tDLT_USER8                         = 0x9b\n\tDLT_USER9                         = 0x9c\n\tDLT_WIHART                        = 0xdf\n\tDLT_X2E_SERIAL                    = 0xd5\n\tDLT_X2E_XORAYA                    = 0xd6\n\tDT_BLK                            = 0x6\n\tDT_CHR                            = 0x2\n\tDT_DIR                            = 0x4\n\tDT_FIFO                           = 0x1\n\tDT_LNK                            = 0xa\n\tDT_REG                            = 0x8\n\tDT_SOCK                           = 0xc\n\tDT_UNKNOWN                        = 0x0\n\tDT_WHT                            = 0xe\n\tECHO                              = 0x8\n\tECHOCTL                           = 0x40\n\tECHOE                             = 0x2\n\tECHOK                             = 0x4\n\tECHOKE                            = 0x1\n\tECHONL                            = 0x10\n\tECHOPRT                           = 0x20\n\tEVFILT_AIO                        = -0x3\n\tEVFILT_EXCEPT                     = -0xf\n\tEVFILT_FS                         = -0x9\n\tEVFILT_MACHPORT                   = -0x8\n\tEVFILT_PROC                       = -0x5\n\tEVFILT_READ                       = -0x1\n\tEVFILT_SIGNAL                     = -0x6\n\tEVFILT_SYSCOUNT                   = 0xf\n\tEVFILT_THREADMARKER               = 0xf\n\tEVFILT_TIMER                      = -0x7\n\tEVFILT_USER                       = -0xa\n\tEVFILT_VM                         = -0xc\n\tEVFILT_VNODE                      = -0x4\n\tEVFILT_WRITE                      = -0x2\n\tEV_ADD                            = 0x1\n\tEV_CLEAR                          = 0x20\n\tEV_DELETE                         = 0x2\n\tEV_DISABLE                        = 0x8\n\tEV_DISPATCH                       = 0x80\n\tEV_DISPATCH2                      = 0x180\n\tEV_ENABLE                         = 0x4\n\tEV_EOF                            = 0x8000\n\tEV_ERROR                          = 0x4000\n\tEV_FLAG0                          = 0x1000\n\tEV_FLAG1                          = 0x2000\n\tEV_ONESHOT                        = 0x10\n\tEV_OOBAND                         = 0x2000\n\tEV_POLL                           = 0x1000\n\tEV_RECEIPT                        = 0x40\n\tEV_SYSFLAGS                       = 0xf000\n\tEV_UDATA_SPECIFIC                 = 0x100\n\tEV_VANISHED                       = 0x200\n\tEXTA                              = 0x4b00\n\tEXTB                              = 0x9600\n\tEXTPROC                           = 0x800\n\tFD_CLOEXEC                        = 0x1\n\tFD_SETSIZE                        = 0x400\n\tFF0                               = 0x0\n\tFF1                               = 0x4000\n\tFFDLY                             = 0x4000\n\tFLUSHO                            = 0x800000\n\tFSOPT_ATTR_CMN_EXTENDED           = 0x20\n\tFSOPT_NOFOLLOW                    = 0x1\n\tFSOPT_NOINMEMUPDATE               = 0x2\n\tFSOPT_PACK_INVAL_ATTRS            = 0x8\n\tFSOPT_REPORT_FULLSIZE             = 0x4\n\tF_ADDFILESIGS                     = 0x3d\n\tF_ADDFILESIGS_FOR_DYLD_SIM        = 0x53\n\tF_ADDFILESIGS_RETURN              = 0x61\n\tF_ADDSIGS                         = 0x3b\n\tF_ALLOCATEALL                     = 0x4\n\tF_ALLOCATECONTIG                  = 0x2\n\tF_BARRIERFSYNC                    = 0x55\n\tF_CHECK_LV                        = 0x62\n\tF_CHKCLEAN                        = 0x29\n\tF_DUPFD                           = 0x0\n\tF_DUPFD_CLOEXEC                   = 0x43\n\tF_FINDSIGS                        = 0x4e\n\tF_FLUSH_DATA                      = 0x28\n\tF_FREEZE_FS                       = 0x35\n\tF_FULLFSYNC                       = 0x33\n\tF_GETCODEDIR                      = 0x48\n\tF_GETFD                           = 0x1\n\tF_GETFL                           = 0x3\n\tF_GETLK                           = 0x7\n\tF_GETLKPID                        = 0x42\n\tF_GETNOSIGPIPE                    = 0x4a\n\tF_GETOWN                          = 0x5\n\tF_GETPATH                         = 0x32\n\tF_GETPATH_MTMINFO                 = 0x47\n\tF_GETPROTECTIONCLASS              = 0x3f\n\tF_GETPROTECTIONLEVEL              = 0x4d\n\tF_GLOBAL_NOCACHE                  = 0x37\n\tF_LOG2PHYS                        = 0x31\n\tF_LOG2PHYS_EXT                    = 0x41\n\tF_NOCACHE                         = 0x30\n\tF_NODIRECT                        = 0x3e\n\tF_OK                              = 0x0\n\tF_PATHPKG_CHECK                   = 0x34\n\tF_PEOFPOSMODE                     = 0x3\n\tF_PREALLOCATE                     = 0x2a\n\tF_PUNCHHOLE                       = 0x63\n\tF_RDADVISE                        = 0x2c\n\tF_RDAHEAD                         = 0x2d\n\tF_RDLCK                           = 0x1\n\tF_SETBACKINGSTORE                 = 0x46\n\tF_SETFD                           = 0x2\n\tF_SETFL                           = 0x4\n\tF_SETLK                           = 0x8\n\tF_SETLKW                          = 0x9\n\tF_SETLKWTIMEOUT                   = 0xa\n\tF_SETNOSIGPIPE                    = 0x49\n\tF_SETOWN                          = 0x6\n\tF_SETPROTECTIONCLASS              = 0x40\n\tF_SETSIZE                         = 0x2b\n\tF_SINGLE_WRITER                   = 0x4c\n\tF_THAW_FS                         = 0x36\n\tF_TRANSCODEKEY                    = 0x4b\n\tF_TRIM_ACTIVE_FILE                = 0x64\n\tF_UNLCK                           = 0x2\n\tF_VOLPOSMODE                      = 0x4\n\tF_WRLCK                           = 0x3\n\tHUPCL                             = 0x4000\n\tHW_MACHINE                        = 0x1\n\tICANON                            = 0x100\n\tICMP6_FILTER                      = 0x12\n\tICRNL                             = 0x100\n\tIEXTEN                            = 0x400\n\tIFF_ALLMULTI                      = 0x200\n\tIFF_ALTPHYS                       = 0x4000\n\tIFF_BROADCAST                     = 0x2\n\tIFF_DEBUG                         = 0x4\n\tIFF_LINK0                         = 0x1000\n\tIFF_LINK1                         = 0x2000\n\tIFF_LINK2                         = 0x4000\n\tIFF_LOOPBACK                      = 0x8\n\tIFF_MULTICAST                     = 0x8000\n\tIFF_NOARP                         = 0x80\n\tIFF_NOTRAILERS                    = 0x20\n\tIFF_OACTIVE                       = 0x400\n\tIFF_POINTOPOINT                   = 0x10\n\tIFF_PROMISC                       = 0x100\n\tIFF_RUNNING                       = 0x40\n\tIFF_SIMPLEX                       = 0x800\n\tIFF_UP                            = 0x1\n\tIFNAMSIZ                          = 0x10\n\tIFT_1822                          = 0x2\n\tIFT_AAL5                          = 0x31\n\tIFT_ARCNET                        = 0x23\n\tIFT_ARCNETPLUS                    = 0x24\n\tIFT_ATM                           = 0x25\n\tIFT_BRIDGE                        = 0xd1\n\tIFT_CARP                          = 0xf8\n\tIFT_CELLULAR                      = 0xff\n\tIFT_CEPT                          = 0x13\n\tIFT_DS3                           = 0x1e\n\tIFT_ENC                           = 0xf4\n\tIFT_EON                           = 0x19\n\tIFT_ETHER                         = 0x6\n\tIFT_FAITH                         = 0x38\n\tIFT_FDDI                          = 0xf\n\tIFT_FRELAY                        = 0x20\n\tIFT_FRELAYDCE                     = 0x2c\n\tIFT_GIF                           = 0x37\n\tIFT_HDH1822                       = 0x3\n\tIFT_HIPPI                         = 0x2f\n\tIFT_HSSI                          = 0x2e\n\tIFT_HY                            = 0xe\n\tIFT_IEEE1394                      = 0x90\n\tIFT_IEEE8023ADLAG                 = 0x88\n\tIFT_ISDNBASIC                     = 0x14\n\tIFT_ISDNPRIMARY                   = 0x15\n\tIFT_ISO88022LLC                   = 0x29\n\tIFT_ISO88023                      = 0x7\n\tIFT_ISO88024                      = 0x8\n\tIFT_ISO88025                      = 0x9\n\tIFT_ISO88026                      = 0xa\n\tIFT_L2VLAN                        = 0x87\n\tIFT_LAPB                          = 0x10\n\tIFT_LOCALTALK                     = 0x2a\n\tIFT_LOOP                          = 0x18\n\tIFT_MIOX25                        = 0x26\n\tIFT_MODEM                         = 0x30\n\tIFT_NSIP                          = 0x1b\n\tIFT_OTHER                         = 0x1\n\tIFT_P10                           = 0xc\n\tIFT_P80                           = 0xd\n\tIFT_PARA                          = 0x22\n\tIFT_PDP                           = 0xff\n\tIFT_PFLOG                         = 0xf5\n\tIFT_PFSYNC                        = 0xf6\n\tIFT_PKTAP                         = 0xfe\n\tIFT_PPP                           = 0x17\n\tIFT_PROPMUX                       = 0x36\n\tIFT_PROPVIRTUAL                   = 0x35\n\tIFT_PTPSERIAL                     = 0x16\n\tIFT_RS232                         = 0x21\n\tIFT_SDLC                          = 0x11\n\tIFT_SIP                           = 0x1f\n\tIFT_SLIP                          = 0x1c\n\tIFT_SMDSDXI                       = 0x2b\n\tIFT_SMDSICIP                      = 0x34\n\tIFT_SONET                         = 0x27\n\tIFT_SONETPATH                     = 0x32\n\tIFT_SONETVT                       = 0x33\n\tIFT_STARLAN                       = 0xb\n\tIFT_STF                           = 0x39\n\tIFT_T1                            = 0x12\n\tIFT_ULTRA                         = 0x1d\n\tIFT_V35                           = 0x2d\n\tIFT_X25                           = 0x5\n\tIFT_X25DDN                        = 0x4\n\tIFT_X25PLE                        = 0x28\n\tIFT_XETHER                        = 0x1a\n\tIGNBRK                            = 0x1\n\tIGNCR                             = 0x80\n\tIGNPAR                            = 0x4\n\tIMAXBEL                           = 0x2000\n\tINLCR                             = 0x40\n\tINPCK                             = 0x10\n\tIN_CLASSA_HOST                    = 0xffffff\n\tIN_CLASSA_MAX                     = 0x80\n\tIN_CLASSA_NET                     = 0xff000000\n\tIN_CLASSA_NSHIFT                  = 0x18\n\tIN_CLASSB_HOST                    = 0xffff\n\tIN_CLASSB_MAX                     = 0x10000\n\tIN_CLASSB_NET                     = 0xffff0000\n\tIN_CLASSB_NSHIFT                  = 0x10\n\tIN_CLASSC_HOST                    = 0xff\n\tIN_CLASSC_NET                     = 0xffffff00\n\tIN_CLASSC_NSHIFT                  = 0x8\n\tIN_CLASSD_HOST                    = 0xfffffff\n\tIN_CLASSD_NET                     = 0xf0000000\n\tIN_CLASSD_NSHIFT                  = 0x1c\n\tIN_LINKLOCALNETNUM                = 0xa9fe0000\n\tIN_LOOPBACKNET                    = 0x7f\n\tIPPROTO_3PC                       = 0x22\n\tIPPROTO_ADFS                      = 0x44\n\tIPPROTO_AH                        = 0x33\n\tIPPROTO_AHIP                      = 0x3d\n\tIPPROTO_APES                      = 0x63\n\tIPPROTO_ARGUS                     = 0xd\n\tIPPROTO_AX25                      = 0x5d\n\tIPPROTO_BHA                       = 0x31\n\tIPPROTO_BLT                       = 0x1e\n\tIPPROTO_BRSATMON                  = 0x4c\n\tIPPROTO_CFTP                      = 0x3e\n\tIPPROTO_CHAOS                     = 0x10\n\tIPPROTO_CMTP                      = 0x26\n\tIPPROTO_CPHB                      = 0x49\n\tIPPROTO_CPNX                      = 0x48\n\tIPPROTO_DDP                       = 0x25\n\tIPPROTO_DGP                       = 0x56\n\tIPPROTO_DIVERT                    = 0xfe\n\tIPPROTO_DONE                      = 0x101\n\tIPPROTO_DSTOPTS                   = 0x3c\n\tIPPROTO_EGP                       = 0x8\n\tIPPROTO_EMCON                     = 0xe\n\tIPPROTO_ENCAP                     = 0x62\n\tIPPROTO_EON                       = 0x50\n\tIPPROTO_ESP                       = 0x32\n\tIPPROTO_ETHERIP                   = 0x61\n\tIPPROTO_FRAGMENT                  = 0x2c\n\tIPPROTO_GGP                       = 0x3\n\tIPPROTO_GMTP                      = 0x64\n\tIPPROTO_GRE                       = 0x2f\n\tIPPROTO_HELLO                     = 0x3f\n\tIPPROTO_HMP                       = 0x14\n\tIPPROTO_HOPOPTS                   = 0x0\n\tIPPROTO_ICMP                      = 0x1\n\tIPPROTO_ICMPV6                    = 0x3a\n\tIPPROTO_IDP                       = 0x16\n\tIPPROTO_IDPR                      = 0x23\n\tIPPROTO_IDRP                      = 0x2d\n\tIPPROTO_IGMP                      = 0x2\n\tIPPROTO_IGP                       = 0x55\n\tIPPROTO_IGRP                      = 0x58\n\tIPPROTO_IL                        = 0x28\n\tIPPROTO_INLSP                     = 0x34\n\tIPPROTO_INP                       = 0x20\n\tIPPROTO_IP                        = 0x0\n\tIPPROTO_IPCOMP                    = 0x6c\n\tIPPROTO_IPCV                      = 0x47\n\tIPPROTO_IPEIP                     = 0x5e\n\tIPPROTO_IPIP                      = 0x4\n\tIPPROTO_IPPC                      = 0x43\n\tIPPROTO_IPV4                      = 0x4\n\tIPPROTO_IPV6                      = 0x29\n\tIPPROTO_IRTP                      = 0x1c\n\tIPPROTO_KRYPTOLAN                 = 0x41\n\tIPPROTO_LARP                      = 0x5b\n\tIPPROTO_LEAF1                     = 0x19\n\tIPPROTO_LEAF2                     = 0x1a\n\tIPPROTO_MAX                       = 0x100\n\tIPPROTO_MAXID                     = 0x34\n\tIPPROTO_MEAS                      = 0x13\n\tIPPROTO_MHRP                      = 0x30\n\tIPPROTO_MICP                      = 0x5f\n\tIPPROTO_MTP                       = 0x5c\n\tIPPROTO_MUX                       = 0x12\n\tIPPROTO_ND                        = 0x4d\n\tIPPROTO_NHRP                      = 0x36\n\tIPPROTO_NONE                      = 0x3b\n\tIPPROTO_NSP                       = 0x1f\n\tIPPROTO_NVPII                     = 0xb\n\tIPPROTO_OSPFIGP                   = 0x59\n\tIPPROTO_PGM                       = 0x71\n\tIPPROTO_PIGP                      = 0x9\n\tIPPROTO_PIM                       = 0x67\n\tIPPROTO_PRM                       = 0x15\n\tIPPROTO_PUP                       = 0xc\n\tIPPROTO_PVP                       = 0x4b\n\tIPPROTO_RAW                       = 0xff\n\tIPPROTO_RCCMON                    = 0xa\n\tIPPROTO_RDP                       = 0x1b\n\tIPPROTO_ROUTING                   = 0x2b\n\tIPPROTO_RSVP                      = 0x2e\n\tIPPROTO_RVD                       = 0x42\n\tIPPROTO_SATEXPAK                  = 0x40\n\tIPPROTO_SATMON                    = 0x45\n\tIPPROTO_SCCSP                     = 0x60\n\tIPPROTO_SCTP                      = 0x84\n\tIPPROTO_SDRP                      = 0x2a\n\tIPPROTO_SEP                       = 0x21\n\tIPPROTO_SRPC                      = 0x5a\n\tIPPROTO_ST                        = 0x7\n\tIPPROTO_SVMTP                     = 0x52\n\tIPPROTO_SWIPE                     = 0x35\n\tIPPROTO_TCF                       = 0x57\n\tIPPROTO_TCP                       = 0x6\n\tIPPROTO_TP                        = 0x1d\n\tIPPROTO_TPXX                      = 0x27\n\tIPPROTO_TRUNK1                    = 0x17\n\tIPPROTO_TRUNK2                    = 0x18\n\tIPPROTO_TTP                       = 0x54\n\tIPPROTO_UDP                       = 0x11\n\tIPPROTO_VINES                     = 0x53\n\tIPPROTO_VISA                      = 0x46\n\tIPPROTO_VMTP                      = 0x51\n\tIPPROTO_WBEXPAK                   = 0x4f\n\tIPPROTO_WBMON                     = 0x4e\n\tIPPROTO_WSN                       = 0x4a\n\tIPPROTO_XNET                      = 0xf\n\tIPPROTO_XTP                       = 0x24\n\tIPV6_2292DSTOPTS                  = 0x17\n\tIPV6_2292HOPLIMIT                 = 0x14\n\tIPV6_2292HOPOPTS                  = 0x16\n\tIPV6_2292NEXTHOP                  = 0x15\n\tIPV6_2292PKTINFO                  = 0x13\n\tIPV6_2292PKTOPTIONS               = 0x19\n\tIPV6_2292RTHDR                    = 0x18\n\tIPV6_BINDV6ONLY                   = 0x1b\n\tIPV6_BOUND_IF                     = 0x7d\n\tIPV6_CHECKSUM                     = 0x1a\n\tIPV6_DEFAULT_MULTICAST_HOPS       = 0x1\n\tIPV6_DEFAULT_MULTICAST_LOOP       = 0x1\n\tIPV6_DEFHLIM                      = 0x40\n\tIPV6_FAITH                        = 0x1d\n\tIPV6_FLOWINFO_MASK                = 0xffffff0f\n\tIPV6_FLOWLABEL_MASK               = 0xffff0f00\n\tIPV6_FLOW_ECN_MASK                = 0x300\n\tIPV6_FRAGTTL                      = 0x3c\n\tIPV6_FW_ADD                       = 0x1e\n\tIPV6_FW_DEL                       = 0x1f\n\tIPV6_FW_FLUSH                     = 0x20\n\tIPV6_FW_GET                       = 0x22\n\tIPV6_FW_ZERO                      = 0x21\n\tIPV6_HLIMDEC                      = 0x1\n\tIPV6_IPSEC_POLICY                 = 0x1c\n\tIPV6_JOIN_GROUP                   = 0xc\n\tIPV6_LEAVE_GROUP                  = 0xd\n\tIPV6_MAXHLIM                      = 0xff\n\tIPV6_MAXOPTHDR                    = 0x800\n\tIPV6_MAXPACKET                    = 0xffff\n\tIPV6_MAX_GROUP_SRC_FILTER         = 0x200\n\tIPV6_MAX_MEMBERSHIPS              = 0xfff\n\tIPV6_MAX_SOCK_SRC_FILTER          = 0x80\n\tIPV6_MIN_MEMBERSHIPS              = 0x1f\n\tIPV6_MMTU                         = 0x500\n\tIPV6_MULTICAST_HOPS               = 0xa\n\tIPV6_MULTICAST_IF                 = 0x9\n\tIPV6_MULTICAST_LOOP               = 0xb\n\tIPV6_PORTRANGE                    = 0xe\n\tIPV6_PORTRANGE_DEFAULT            = 0x0\n\tIPV6_PORTRANGE_HIGH               = 0x1\n\tIPV6_PORTRANGE_LOW                = 0x2\n\tIPV6_RECVTCLASS                   = 0x23\n\tIPV6_RTHDR_LOOSE                  = 0x0\n\tIPV6_RTHDR_STRICT                 = 0x1\n\tIPV6_RTHDR_TYPE_0                 = 0x0\n\tIPV6_SOCKOPT_RESERVED1            = 0x3\n\tIPV6_TCLASS                       = 0x24\n\tIPV6_UNICAST_HOPS                 = 0x4\n\tIPV6_V6ONLY                       = 0x1b\n\tIPV6_VERSION                      = 0x60\n\tIPV6_VERSION_MASK                 = 0xf0\n\tIP_ADD_MEMBERSHIP                 = 0xc\n\tIP_ADD_SOURCE_MEMBERSHIP          = 0x46\n\tIP_BLOCK_SOURCE                   = 0x48\n\tIP_BOUND_IF                       = 0x19\n\tIP_DEFAULT_MULTICAST_LOOP         = 0x1\n\tIP_DEFAULT_MULTICAST_TTL          = 0x1\n\tIP_DF                             = 0x4000\n\tIP_DROP_MEMBERSHIP                = 0xd\n\tIP_DROP_SOURCE_MEMBERSHIP         = 0x47\n\tIP_DUMMYNET_CONFIGURE             = 0x3c\n\tIP_DUMMYNET_DEL                   = 0x3d\n\tIP_DUMMYNET_FLUSH                 = 0x3e\n\tIP_DUMMYNET_GET                   = 0x40\n\tIP_FAITH                          = 0x16\n\tIP_FW_ADD                         = 0x28\n\tIP_FW_DEL                         = 0x29\n\tIP_FW_FLUSH                       = 0x2a\n\tIP_FW_GET                         = 0x2c\n\tIP_FW_RESETLOG                    = 0x2d\n\tIP_FW_ZERO                        = 0x2b\n\tIP_HDRINCL                        = 0x2\n\tIP_IPSEC_POLICY                   = 0x15\n\tIP_MAXPACKET                      = 0xffff\n\tIP_MAX_GROUP_SRC_FILTER           = 0x200\n\tIP_MAX_MEMBERSHIPS                = 0xfff\n\tIP_MAX_SOCK_MUTE_FILTER           = 0x80\n\tIP_MAX_SOCK_SRC_FILTER            = 0x80\n\tIP_MF                             = 0x2000\n\tIP_MIN_MEMBERSHIPS                = 0x1f\n\tIP_MSFILTER                       = 0x4a\n\tIP_MSS                            = 0x240\n\tIP_MULTICAST_IF                   = 0x9\n\tIP_MULTICAST_IFINDEX              = 0x42\n\tIP_MULTICAST_LOOP                 = 0xb\n\tIP_MULTICAST_TTL                  = 0xa\n\tIP_MULTICAST_VIF                  = 0xe\n\tIP_NAT__XXX                       = 0x37\n\tIP_OFFMASK                        = 0x1fff\n\tIP_OLD_FW_ADD                     = 0x32\n\tIP_OLD_FW_DEL                     = 0x33\n\tIP_OLD_FW_FLUSH                   = 0x34\n\tIP_OLD_FW_GET                     = 0x36\n\tIP_OLD_FW_RESETLOG                = 0x38\n\tIP_OLD_FW_ZERO                    = 0x35\n\tIP_OPTIONS                        = 0x1\n\tIP_PKTINFO                        = 0x1a\n\tIP_PORTRANGE                      = 0x13\n\tIP_PORTRANGE_DEFAULT              = 0x0\n\tIP_PORTRANGE_HIGH                 = 0x1\n\tIP_PORTRANGE_LOW                  = 0x2\n\tIP_RECVDSTADDR                    = 0x7\n\tIP_RECVIF                         = 0x14\n\tIP_RECVOPTS                       = 0x5\n\tIP_RECVPKTINFO                    = 0x1a\n\tIP_RECVRETOPTS                    = 0x6\n\tIP_RECVTOS                        = 0x1b\n\tIP_RECVTTL                        = 0x18\n\tIP_RETOPTS                        = 0x8\n\tIP_RF                             = 0x8000\n\tIP_RSVP_OFF                       = 0x10\n\tIP_RSVP_ON                        = 0xf\n\tIP_RSVP_VIF_OFF                   = 0x12\n\tIP_RSVP_VIF_ON                    = 0x11\n\tIP_STRIPHDR                       = 0x17\n\tIP_TOS                            = 0x3\n\tIP_TRAFFIC_MGT_BACKGROUND         = 0x41\n\tIP_TTL                            = 0x4\n\tIP_UNBLOCK_SOURCE                 = 0x49\n\tISIG                              = 0x80\n\tISTRIP                            = 0x20\n\tIUTF8                             = 0x4000\n\tIXANY                             = 0x800\n\tIXOFF                             = 0x400\n\tIXON                              = 0x200\n\tKERN_HOSTNAME                     = 0xa\n\tKERN_OSRELEASE                    = 0x2\n\tKERN_OSTYPE                       = 0x1\n\tKERN_VERSION                      = 0x4\n\tLOCK_EX                           = 0x2\n\tLOCK_NB                           = 0x4\n\tLOCK_SH                           = 0x1\n\tLOCK_UN                           = 0x8\n\tMADV_CAN_REUSE                    = 0x9\n\tMADV_DONTNEED                     = 0x4\n\tMADV_FREE                         = 0x5\n\tMADV_FREE_REUSABLE                = 0x7\n\tMADV_FREE_REUSE                   = 0x8\n\tMADV_NORMAL                       = 0x0\n\tMADV_PAGEOUT                      = 0xa\n\tMADV_RANDOM                       = 0x1\n\tMADV_SEQUENTIAL                   = 0x2\n\tMADV_WILLNEED                     = 0x3\n\tMADV_ZERO_WIRED_PAGES             = 0x6\n\tMAP_ANON                          = 0x1000\n\tMAP_ANONYMOUS                     = 0x1000\n\tMAP_COPY                          = 0x2\n\tMAP_FILE                          = 0x0\n\tMAP_FIXED                         = 0x10\n\tMAP_HASSEMAPHORE                  = 0x200\n\tMAP_JIT                           = 0x800\n\tMAP_NOCACHE                       = 0x400\n\tMAP_NOEXTEND                      = 0x100\n\tMAP_NORESERVE                     = 0x40\n\tMAP_PRIVATE                       = 0x2\n\tMAP_RENAME                        = 0x20\n\tMAP_RESERVED0080                  = 0x80\n\tMAP_RESILIENT_CODESIGN            = 0x2000\n\tMAP_RESILIENT_MEDIA               = 0x4000\n\tMAP_SHARED                        = 0x1\n\tMCL_CURRENT                       = 0x1\n\tMCL_FUTURE                        = 0x2\n\tMNT_ASYNC                         = 0x40\n\tMNT_AUTOMOUNTED                   = 0x400000\n\tMNT_CMDFLAGS                      = 0xf0000\n\tMNT_CPROTECT                      = 0x80\n\tMNT_DEFWRITE                      = 0x2000000\n\tMNT_DONTBROWSE                    = 0x100000\n\tMNT_DOVOLFS                       = 0x8000\n\tMNT_DWAIT                         = 0x4\n\tMNT_EXPORTED                      = 0x100\n\tMNT_FORCE                         = 0x80000\n\tMNT_IGNORE_OWNERSHIP              = 0x200000\n\tMNT_JOURNALED                     = 0x800000\n\tMNT_LOCAL                         = 0x1000\n\tMNT_MULTILABEL                    = 0x4000000\n\tMNT_NOATIME                       = 0x10000000\n\tMNT_NOBLOCK                       = 0x20000\n\tMNT_NODEV                         = 0x10\n\tMNT_NOEXEC                        = 0x4\n\tMNT_NOSUID                        = 0x8\n\tMNT_NOUSERXATTR                   = 0x1000000\n\tMNT_NOWAIT                        = 0x2\n\tMNT_QUARANTINE                    = 0x400\n\tMNT_QUOTA                         = 0x2000\n\tMNT_RDONLY                        = 0x1\n\tMNT_RELOAD                        = 0x40000\n\tMNT_ROOTFS                        = 0x4000\n\tMNT_SYNCHRONOUS                   = 0x2\n\tMNT_UNION                         = 0x20\n\tMNT_UNKNOWNPERMISSIONS            = 0x200000\n\tMNT_UPDATE                        = 0x10000\n\tMNT_VISFLAGMASK                   = 0x17f0f5ff\n\tMNT_WAIT                          = 0x1\n\tMSG_CTRUNC                        = 0x20\n\tMSG_DONTROUTE                     = 0x4\n\tMSG_DONTWAIT                      = 0x80\n\tMSG_EOF                           = 0x100\n\tMSG_EOR                           = 0x8\n\tMSG_FLUSH                         = 0x400\n\tMSG_HAVEMORE                      = 0x2000\n\tMSG_HOLD                          = 0x800\n\tMSG_NEEDSA                        = 0x10000\n\tMSG_OOB                           = 0x1\n\tMSG_PEEK                          = 0x2\n\tMSG_RCVMORE                       = 0x4000\n\tMSG_SEND                          = 0x1000\n\tMSG_TRUNC                         = 0x10\n\tMSG_WAITALL                       = 0x40\n\tMSG_WAITSTREAM                    = 0x200\n\tMS_ASYNC                          = 0x1\n\tMS_DEACTIVATE                     = 0x8\n\tMS_INVALIDATE                     = 0x2\n\tMS_KILLPAGES                      = 0x4\n\tMS_SYNC                           = 0x10\n\tNAME_MAX                          = 0xff\n\tNET_RT_DUMP                       = 0x1\n\tNET_RT_DUMP2                      = 0x7\n\tNET_RT_FLAGS                      = 0x2\n\tNET_RT_IFLIST                     = 0x3\n\tNET_RT_IFLIST2                    = 0x6\n\tNET_RT_MAXID                      = 0xa\n\tNET_RT_STAT                       = 0x4\n\tNET_RT_TRASH                      = 0x5\n\tNL0                               = 0x0\n\tNL1                               = 0x100\n\tNL2                               = 0x200\n\tNL3                               = 0x300\n\tNLDLY                             = 0x300\n\tNOFLSH                            = 0x80000000\n\tNOKERNINFO                        = 0x2000000\n\tNOTE_ABSOLUTE                     = 0x8\n\tNOTE_ATTRIB                       = 0x8\n\tNOTE_BACKGROUND                   = 0x40\n\tNOTE_CHILD                        = 0x4\n\tNOTE_CRITICAL                     = 0x20\n\tNOTE_DELETE                       = 0x1\n\tNOTE_EXEC                         = 0x20000000\n\tNOTE_EXIT                         = 0x80000000\n\tNOTE_EXITSTATUS                   = 0x4000000\n\tNOTE_EXIT_CSERROR                 = 0x40000\n\tNOTE_EXIT_DECRYPTFAIL             = 0x10000\n\tNOTE_EXIT_DETAIL                  = 0x2000000\n\tNOTE_EXIT_DETAIL_MASK             = 0x70000\n\tNOTE_EXIT_MEMORY                  = 0x20000\n\tNOTE_EXIT_REPARENTED              = 0x80000\n\tNOTE_EXTEND                       = 0x4\n\tNOTE_FFAND                        = 0x40000000\n\tNOTE_FFCOPY                       = 0xc0000000\n\tNOTE_FFCTRLMASK                   = 0xc0000000\n\tNOTE_FFLAGSMASK                   = 0xffffff\n\tNOTE_FFNOP                        = 0x0\n\tNOTE_FFOR                         = 0x80000000\n\tNOTE_FORK                         = 0x40000000\n\tNOTE_FUNLOCK                      = 0x100\n\tNOTE_LEEWAY                       = 0x10\n\tNOTE_LINK                         = 0x10\n\tNOTE_LOWAT                        = 0x1\n\tNOTE_MACH_CONTINUOUS_TIME         = 0x80\n\tNOTE_NONE                         = 0x80\n\tNOTE_NSECONDS                     = 0x4\n\tNOTE_OOB                          = 0x2\n\tNOTE_PCTRLMASK                    = -0x100000\n\tNOTE_PDATAMASK                    = 0xfffff\n\tNOTE_REAP                         = 0x10000000\n\tNOTE_RENAME                       = 0x20\n\tNOTE_REVOKE                       = 0x40\n\tNOTE_SECONDS                      = 0x1\n\tNOTE_SIGNAL                       = 0x8000000\n\tNOTE_TRACK                        = 0x1\n\tNOTE_TRACKERR                     = 0x2\n\tNOTE_TRIGGER                      = 0x1000000\n\tNOTE_USECONDS                     = 0x2\n\tNOTE_VM_ERROR                     = 0x10000000\n\tNOTE_VM_PRESSURE                  = 0x80000000\n\tNOTE_VM_PRESSURE_SUDDEN_TERMINATE = 0x20000000\n\tNOTE_VM_PRESSURE_TERMINATE        = 0x40000000\n\tNOTE_WRITE                        = 0x2\n\tOCRNL                             = 0x10\n\tOFDEL                             = 0x20000\n\tOFILL                             = 0x80\n\tONLCR                             = 0x2\n\tONLRET                            = 0x40\n\tONOCR                             = 0x20\n\tONOEOT                            = 0x8\n\tOPOST                             = 0x1\n\tOXTABS                            = 0x4\n\tO_ACCMODE                         = 0x3\n\tO_ALERT                           = 0x20000000\n\tO_APPEND                          = 0x8\n\tO_ASYNC                           = 0x40\n\tO_CLOEXEC                         = 0x1000000\n\tO_CREAT                           = 0x200\n\tO_DIRECTORY                       = 0x100000\n\tO_DP_GETRAWENCRYPTED              = 0x1\n\tO_DP_GETRAWUNENCRYPTED            = 0x2\n\tO_DSYNC                           = 0x400000\n\tO_EVTONLY                         = 0x8000\n\tO_EXCL                            = 0x800\n\tO_EXLOCK                          = 0x20\n\tO_FSYNC                           = 0x80\n\tO_NDELAY                          = 0x4\n\tO_NOCTTY                          = 0x20000\n\tO_NOFOLLOW                        = 0x100\n\tO_NONBLOCK                        = 0x4\n\tO_POPUP                           = 0x80000000\n\tO_RDONLY                          = 0x0\n\tO_RDWR                            = 0x2\n\tO_SHLOCK                          = 0x10\n\tO_SYMLINK                         = 0x200000\n\tO_SYNC                            = 0x80\n\tO_TRUNC                           = 0x400\n\tO_WRONLY                          = 0x1\n\tPARENB                            = 0x1000\n\tPARMRK                            = 0x8\n\tPARODD                            = 0x2000\n\tPENDIN                            = 0x20000000\n\tPRIO_PGRP                         = 0x1\n\tPRIO_PROCESS                      = 0x0\n\tPRIO_USER                         = 0x2\n\tPROT_EXEC                         = 0x4\n\tPROT_NONE                         = 0x0\n\tPROT_READ                         = 0x1\n\tPROT_WRITE                        = 0x2\n\tPT_ATTACH                         = 0xa\n\tPT_ATTACHEXC                      = 0xe\n\tPT_CONTINUE                       = 0x7\n\tPT_DENY_ATTACH                    = 0x1f\n\tPT_DETACH                         = 0xb\n\tPT_FIRSTMACH                      = 0x20\n\tPT_FORCEQUOTA                     = 0x1e\n\tPT_KILL                           = 0x8\n\tPT_READ_D                         = 0x2\n\tPT_READ_I                         = 0x1\n\tPT_READ_U                         = 0x3\n\tPT_SIGEXC                         = 0xc\n\tPT_STEP                           = 0x9\n\tPT_THUPDATE                       = 0xd\n\tPT_TRACE_ME                       = 0x0\n\tPT_WRITE_D                        = 0x5\n\tPT_WRITE_I                        = 0x4\n\tPT_WRITE_U                        = 0x6\n\tRLIMIT_AS                         = 0x5\n\tRLIMIT_CORE                       = 0x4\n\tRLIMIT_CPU                        = 0x0\n\tRLIMIT_CPU_USAGE_MONITOR          = 0x2\n\tRLIMIT_DATA                       = 0x2\n\tRLIMIT_FSIZE                      = 0x1\n\tRLIMIT_MEMLOCK                    = 0x6\n\tRLIMIT_NOFILE                     = 0x8\n\tRLIMIT_NPROC                      = 0x7\n\tRLIMIT_RSS                        = 0x5\n\tRLIMIT_STACK                      = 0x3\n\tRLIM_INFINITY                     = 0x7fffffffffffffff\n\tRTAX_AUTHOR                       = 0x6\n\tRTAX_BRD                          = 0x7\n\tRTAX_DST                          = 0x0\n\tRTAX_GATEWAY                      = 0x1\n\tRTAX_GENMASK                      = 0x3\n\tRTAX_IFA                          = 0x5\n\tRTAX_IFP                          = 0x4\n\tRTAX_MAX                          = 0x8\n\tRTAX_NETMASK                      = 0x2\n\tRTA_AUTHOR                        = 0x40\n\tRTA_BRD                           = 0x80\n\tRTA_DST                           = 0x1\n\tRTA_GATEWAY                       = 0x2\n\tRTA_GENMASK                       = 0x8\n\tRTA_IFA                           = 0x20\n\tRTA_IFP                           = 0x10\n\tRTA_NETMASK                       = 0x4\n\tRTF_BLACKHOLE                     = 0x1000\n\tRTF_BROADCAST                     = 0x400000\n\tRTF_CLONING                       = 0x100\n\tRTF_CONDEMNED                     = 0x2000000\n\tRTF_DELCLONE                      = 0x80\n\tRTF_DONE                          = 0x40\n\tRTF_DYNAMIC                       = 0x10\n\tRTF_GATEWAY                       = 0x2\n\tRTF_HOST                          = 0x4\n\tRTF_IFREF                         = 0x4000000\n\tRTF_IFSCOPE                       = 0x1000000\n\tRTF_LLINFO                        = 0x400\n\tRTF_LOCAL                         = 0x200000\n\tRTF_MODIFIED                      = 0x20\n\tRTF_MULTICAST                     = 0x800000\n\tRTF_NOIFREF                       = 0x2000\n\tRTF_PINNED                        = 0x100000\n\tRTF_PRCLONING                     = 0x10000\n\tRTF_PROTO1                        = 0x8000\n\tRTF_PROTO2                        = 0x4000\n\tRTF_PROTO3                        = 0x40000\n\tRTF_PROXY                         = 0x8000000\n\tRTF_REJECT                        = 0x8\n\tRTF_ROUTER                        = 0x10000000\n\tRTF_STATIC                        = 0x800\n\tRTF_UP                            = 0x1\n\tRTF_WASCLONED                     = 0x20000\n\tRTF_XRESOLVE                      = 0x200\n\tRTM_ADD                           = 0x1\n\tRTM_CHANGE                        = 0x3\n\tRTM_DELADDR                       = 0xd\n\tRTM_DELETE                        = 0x2\n\tRTM_DELMADDR                      = 0x10\n\tRTM_GET                           = 0x4\n\tRTM_GET2                          = 0x14\n\tRTM_IFINFO                        = 0xe\n\tRTM_IFINFO2                       = 0x12\n\tRTM_LOCK                          = 0x8\n\tRTM_LOSING                        = 0x5\n\tRTM_MISS                          = 0x7\n\tRTM_NEWADDR                       = 0xc\n\tRTM_NEWMADDR                      = 0xf\n\tRTM_NEWMADDR2                     = 0x13\n\tRTM_OLDADD                        = 0x9\n\tRTM_OLDDEL                        = 0xa\n\tRTM_REDIRECT                      = 0x6\n\tRTM_RESOLVE                       = 0xb\n\tRTM_RTTUNIT                       = 0xf4240\n\tRTM_VERSION                       = 0x5\n\tRTV_EXPIRE                        = 0x4\n\tRTV_HOPCOUNT                      = 0x2\n\tRTV_MTU                           = 0x1\n\tRTV_RPIPE                         = 0x8\n\tRTV_RTT                           = 0x40\n\tRTV_RTTVAR                        = 0x80\n\tRTV_SPIPE                         = 0x10\n\tRTV_SSTHRESH                      = 0x20\n\tRUSAGE_CHILDREN                   = -0x1\n\tRUSAGE_SELF                       = 0x0\n\tSCM_CREDS                         = 0x3\n\tSCM_RIGHTS                        = 0x1\n\tSCM_TIMESTAMP                     = 0x2\n\tSCM_TIMESTAMP_MONOTONIC           = 0x4\n\tSHUT_RD                           = 0x0\n\tSHUT_RDWR                         = 0x2\n\tSHUT_WR                           = 0x1\n\tSIOCADDMULTI                      = 0x80206931\n\tSIOCAIFADDR                       = 0x8040691a\n\tSIOCARPIPLL                       = 0xc0206928\n\tSIOCATMARK                        = 0x40047307\n\tSIOCAUTOADDR                      = 0xc0206926\n\tSIOCAUTONETMASK                   = 0x80206927\n\tSIOCDELMULTI                      = 0x80206932\n\tSIOCDIFADDR                       = 0x80206919\n\tSIOCDIFPHYADDR                    = 0x80206941\n\tSIOCGDRVSPEC                      = 0xc01c697b\n\tSIOCGETVLAN                       = 0xc020697f\n\tSIOCGHIWAT                        = 0x40047301\n\tSIOCGIFADDR                       = 0xc0206921\n\tSIOCGIFALTMTU                     = 0xc0206948\n\tSIOCGIFASYNCMAP                   = 0xc020697c\n\tSIOCGIFBOND                       = 0xc0206947\n\tSIOCGIFBRDADDR                    = 0xc0206923\n\tSIOCGIFCAP                        = 0xc020695b\n\tSIOCGIFCONF                       = 0xc0086924\n\tSIOCGIFDEVMTU                     = 0xc0206944\n\tSIOCGIFDSTADDR                    = 0xc0206922\n\tSIOCGIFFLAGS                      = 0xc0206911\n\tSIOCGIFGENERIC                    = 0xc020693a\n\tSIOCGIFKPI                        = 0xc0206987\n\tSIOCGIFMAC                        = 0xc0206982\n\tSIOCGIFMEDIA                      = 0xc0286938\n\tSIOCGIFMETRIC                     = 0xc0206917\n\tSIOCGIFMTU                        = 0xc0206933\n\tSIOCGIFNETMASK                    = 0xc0206925\n\tSIOCGIFPDSTADDR                   = 0xc0206940\n\tSIOCGIFPHYS                       = 0xc0206935\n\tSIOCGIFPSRCADDR                   = 0xc020693f\n\tSIOCGIFSTATUS                     = 0xc331693d\n\tSIOCGIFVLAN                       = 0xc020697f\n\tSIOCGIFWAKEFLAGS                  = 0xc0206988\n\tSIOCGLOWAT                        = 0x40047303\n\tSIOCGPGRP                         = 0x40047309\n\tSIOCIFCREATE                      = 0xc0206978\n\tSIOCIFCREATE2                     = 0xc020697a\n\tSIOCIFDESTROY                     = 0x80206979\n\tSIOCIFGCLONERS                    = 0xc00c6981\n\tSIOCRSLVMULTI                     = 0xc008693b\n\tSIOCSDRVSPEC                      = 0x801c697b\n\tSIOCSETVLAN                       = 0x8020697e\n\tSIOCSHIWAT                        = 0x80047300\n\tSIOCSIFADDR                       = 0x8020690c\n\tSIOCSIFALTMTU                     = 0x80206945\n\tSIOCSIFASYNCMAP                   = 0x8020697d\n\tSIOCSIFBOND                       = 0x80206946\n\tSIOCSIFBRDADDR                    = 0x80206913\n\tSIOCSIFCAP                        = 0x8020695a\n\tSIOCSIFDSTADDR                    = 0x8020690e\n\tSIOCSIFFLAGS                      = 0x80206910\n\tSIOCSIFGENERIC                    = 0x80206939\n\tSIOCSIFKPI                        = 0x80206986\n\tSIOCSIFLLADDR                     = 0x8020693c\n\tSIOCSIFMAC                        = 0x80206983\n\tSIOCSIFMEDIA                      = 0xc0206937\n\tSIOCSIFMETRIC                     = 0x80206918\n\tSIOCSIFMTU                        = 0x80206934\n\tSIOCSIFNETMASK                    = 0x80206916\n\tSIOCSIFPHYADDR                    = 0x8040693e\n\tSIOCSIFPHYS                       = 0x80206936\n\tSIOCSIFVLAN                       = 0x8020697e\n\tSIOCSLOWAT                        = 0x80047302\n\tSIOCSPGRP                         = 0x80047308\n\tSOCK_DGRAM                        = 0x2\n\tSOCK_MAXADDRLEN                   = 0xff\n\tSOCK_RAW                          = 0x3\n\tSOCK_RDM                          = 0x4\n\tSOCK_SEQPACKET                    = 0x5\n\tSOCK_STREAM                       = 0x1\n\tSOL_SOCKET                        = 0xffff\n\tSOMAXCONN                         = 0x80\n\tSO_ACCEPTCONN                     = 0x2\n\tSO_BROADCAST                      = 0x20\n\tSO_DEBUG                          = 0x1\n\tSO_DONTROUTE                      = 0x10\n\tSO_DONTTRUNC                      = 0x2000\n\tSO_ERROR                          = 0x1007\n\tSO_KEEPALIVE                      = 0x8\n\tSO_LABEL                          = 0x1010\n\tSO_LINGER                         = 0x80\n\tSO_LINGER_SEC                     = 0x1080\n\tSO_NETSVC_MARKING_LEVEL           = 0x1119\n\tSO_NET_SERVICE_TYPE               = 0x1116\n\tSO_NKE                            = 0x1021\n\tSO_NOADDRERR                      = 0x1023\n\tSO_NOSIGPIPE                      = 0x1022\n\tSO_NOTIFYCONFLICT                 = 0x1026\n\tSO_NP_EXTENSIONS                  = 0x1083\n\tSO_NREAD                          = 0x1020\n\tSO_NUMRCVPKT                      = 0x1112\n\tSO_NWRITE                         = 0x1024\n\tSO_OOBINLINE                      = 0x100\n\tSO_PEERLABEL                      = 0x1011\n\tSO_RANDOMPORT                     = 0x1082\n\tSO_RCVBUF                         = 0x1002\n\tSO_RCVLOWAT                       = 0x1004\n\tSO_RCVTIMEO                       = 0x1006\n\tSO_REUSEADDR                      = 0x4\n\tSO_REUSEPORT                      = 0x200\n\tSO_REUSESHAREUID                  = 0x1025\n\tSO_SNDBUF                         = 0x1001\n\tSO_SNDLOWAT                       = 0x1003\n\tSO_SNDTIMEO                       = 0x1005\n\tSO_TIMESTAMP                      = 0x400\n\tSO_TIMESTAMP_MONOTONIC            = 0x800\n\tSO_TYPE                           = 0x1008\n\tSO_UPCALLCLOSEWAIT                = 0x1027\n\tSO_USELOOPBACK                    = 0x40\n\tSO_WANTMORE                       = 0x4000\n\tSO_WANTOOBFLAG                    = 0x8000\n\tS_IEXEC                           = 0x40\n\tS_IFBLK                           = 0x6000\n\tS_IFCHR                           = 0x2000\n\tS_IFDIR                           = 0x4000\n\tS_IFIFO                           = 0x1000\n\tS_IFLNK                           = 0xa000\n\tS_IFMT                            = 0xf000\n\tS_IFREG                           = 0x8000\n\tS_IFSOCK                          = 0xc000\n\tS_IFWHT                           = 0xe000\n\tS_IREAD                           = 0x100\n\tS_IRGRP                           = 0x20\n\tS_IROTH                           = 0x4\n\tS_IRUSR                           = 0x100\n\tS_IRWXG                           = 0x38\n\tS_IRWXO                           = 0x7\n\tS_IRWXU                           = 0x1c0\n\tS_ISGID                           = 0x400\n\tS_ISTXT                           = 0x200\n\tS_ISUID                           = 0x800\n\tS_ISVTX                           = 0x200\n\tS_IWGRP                           = 0x10\n\tS_IWOTH                           = 0x2\n\tS_IWRITE                          = 0x80\n\tS_IWUSR                           = 0x80\n\tS_IXGRP                           = 0x8\n\tS_IXOTH                           = 0x1\n\tS_IXUSR                           = 0x40\n\tTAB0                              = 0x0\n\tTAB1                              = 0x400\n\tTAB2                              = 0x800\n\tTAB3                              = 0x4\n\tTABDLY                            = 0xc04\n\tTCIFLUSH                          = 0x1\n\tTCIOFF                            = 0x3\n\tTCIOFLUSH                         = 0x3\n\tTCION                             = 0x4\n\tTCOFLUSH                          = 0x2\n\tTCOOFF                            = 0x1\n\tTCOON                             = 0x2\n\tTCP_CONNECTIONTIMEOUT             = 0x20\n\tTCP_CONNECTION_INFO               = 0x106\n\tTCP_ENABLE_ECN                    = 0x104\n\tTCP_FASTOPEN                      = 0x105\n\tTCP_KEEPALIVE                     = 0x10\n\tTCP_KEEPCNT                       = 0x102\n\tTCP_KEEPINTVL                     = 0x101\n\tTCP_MAXHLEN                       = 0x3c\n\tTCP_MAXOLEN                       = 0x28\n\tTCP_MAXSEG                        = 0x2\n\tTCP_MAXWIN                        = 0xffff\n\tTCP_MAX_SACK                      = 0x4\n\tTCP_MAX_WINSHIFT                  = 0xe\n\tTCP_MINMSS                        = 0xd8\n\tTCP_MSS                           = 0x200\n\tTCP_NODELAY                       = 0x1\n\tTCP_NOOPT                         = 0x8\n\tTCP_NOPUSH                        = 0x4\n\tTCP_NOTSENT_LOWAT                 = 0x201\n\tTCP_RXT_CONNDROPTIME              = 0x80\n\tTCP_RXT_FINDROP                   = 0x100\n\tTCP_SENDMOREACKS                  = 0x103\n\tTCSAFLUSH                         = 0x2\n\tTIOCCBRK                          = 0x2000747a\n\tTIOCCDTR                          = 0x20007478\n\tTIOCCONS                          = 0x80047462\n\tTIOCDCDTIMESTAMP                  = 0x40087458\n\tTIOCDRAIN                         = 0x2000745e\n\tTIOCDSIMICROCODE                  = 0x20007455\n\tTIOCEXCL                          = 0x2000740d\n\tTIOCEXT                           = 0x80047460\n\tTIOCFLUSH                         = 0x80047410\n\tTIOCGDRAINWAIT                    = 0x40047456\n\tTIOCGETA                          = 0x402c7413\n\tTIOCGETD                          = 0x4004741a\n\tTIOCGPGRP                         = 0x40047477\n\tTIOCGWINSZ                        = 0x40087468\n\tTIOCIXOFF                         = 0x20007480\n\tTIOCIXON                          = 0x20007481\n\tTIOCMBIC                          = 0x8004746b\n\tTIOCMBIS                          = 0x8004746c\n\tTIOCMGDTRWAIT                     = 0x4004745a\n\tTIOCMGET                          = 0x4004746a\n\tTIOCMODG                          = 0x40047403\n\tTIOCMODS                          = 0x80047404\n\tTIOCMSDTRWAIT                     = 0x8004745b\n\tTIOCMSET                          = 0x8004746d\n\tTIOCM_CAR                         = 0x40\n\tTIOCM_CD                          = 0x40\n\tTIOCM_CTS                         = 0x20\n\tTIOCM_DSR                         = 0x100\n\tTIOCM_DTR                         = 0x2\n\tTIOCM_LE                          = 0x1\n\tTIOCM_RI                          = 0x80\n\tTIOCM_RNG                         = 0x80\n\tTIOCM_RTS                         = 0x4\n\tTIOCM_SR                          = 0x10\n\tTIOCM_ST                          = 0x8\n\tTIOCNOTTY                         = 0x20007471\n\tTIOCNXCL                          = 0x2000740e\n\tTIOCOUTQ                          = 0x40047473\n\tTIOCPKT                           = 0x80047470\n\tTIOCPKT_DATA                      = 0x0\n\tTIOCPKT_DOSTOP                    = 0x20\n\tTIOCPKT_FLUSHREAD                 = 0x1\n\tTIOCPKT_FLUSHWRITE                = 0x2\n\tTIOCPKT_IOCTL                     = 0x40\n\tTIOCPKT_NOSTOP                    = 0x10\n\tTIOCPKT_START                     = 0x8\n\tTIOCPKT_STOP                      = 0x4\n\tTIOCPTYGNAME                      = 0x40807453\n\tTIOCPTYGRANT                      = 0x20007454\n\tTIOCPTYUNLK                       = 0x20007452\n\tTIOCREMOTE                        = 0x80047469\n\tTIOCSBRK                          = 0x2000747b\n\tTIOCSCONS                         = 0x20007463\n\tTIOCSCTTY                         = 0x20007461\n\tTIOCSDRAINWAIT                    = 0x80047457\n\tTIOCSDTR                          = 0x20007479\n\tTIOCSETA                          = 0x802c7414\n\tTIOCSETAF                         = 0x802c7416\n\tTIOCSETAW                         = 0x802c7415\n\tTIOCSETD                          = 0x8004741b\n\tTIOCSIG                           = 0x2000745f\n\tTIOCSPGRP                         = 0x80047476\n\tTIOCSTART                         = 0x2000746e\n\tTIOCSTAT                          = 0x20007465\n\tTIOCSTI                           = 0x80017472\n\tTIOCSTOP                          = 0x2000746f\n\tTIOCSWINSZ                        = 0x80087467\n\tTIOCTIMESTAMP                     = 0x40087459\n\tTIOCUCNTL                         = 0x80047466\n\tTOSTOP                            = 0x400000\n\tVDISCARD                          = 0xf\n\tVDSUSP                            = 0xb\n\tVEOF                              = 0x0\n\tVEOL                              = 0x1\n\tVEOL2                             = 0x2\n\tVERASE                            = 0x3\n\tVINTR                             = 0x8\n\tVKILL                             = 0x5\n\tVLNEXT                            = 0xe\n\tVMIN                              = 0x10\n\tVM_LOADAVG                        = 0x2\n\tVM_MACHFACTOR                     = 0x4\n\tVM_MAXID                          = 0x6\n\tVM_METER                          = 0x1\n\tVM_SWAPUSAGE                      = 0x5\n\tVQUIT                             = 0x9\n\tVREPRINT                          = 0x6\n\tVSTART                            = 0xc\n\tVSTATUS                           = 0x12\n\tVSTOP                             = 0xd\n\tVSUSP                             = 0xa\n\tVT0                               = 0x0\n\tVT1                               = 0x10000\n\tVTDLY                             = 0x10000\n\tVTIME                             = 0x11\n\tVWERASE                           = 0x4\n\tWCONTINUED                        = 0x10\n\tWCOREFLAG                         = 0x80\n\tWEXITED                           = 0x4\n\tWNOHANG                           = 0x1\n\tWNOWAIT                           = 0x20\n\tWORDSIZE                          = 0x20\n\tWSTOPPED                          = 0x8\n\tWUNTRACED                         = 0x2\n\tXATTR_CREATE                      = 0x2\n\tXATTR_NODEFAULT                   = 0x10\n\tXATTR_NOFOLLOW                    = 0x1\n\tXATTR_NOSECURITY                  = 0x8\n\tXATTR_REPLACE                     = 0x4\n\tXATTR_SHOWCOMPRESSION             = 0x20\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x30)\n\tEADDRNOTAVAIL   = syscall.Errno(0x31)\n\tEAFNOSUPPORT    = syscall.Errno(0x2f)\n\tEAGAIN          = syscall.Errno(0x23)\n\tEALREADY        = syscall.Errno(0x25)\n\tEAUTH           = syscall.Errno(0x50)\n\tEBADARCH        = syscall.Errno(0x56)\n\tEBADEXEC        = syscall.Errno(0x55)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADMACHO       = syscall.Errno(0x58)\n\tEBADMSG         = syscall.Errno(0x5e)\n\tEBADRPC         = syscall.Errno(0x48)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x59)\n\tECHILD          = syscall.Errno(0xa)\n\tECONNABORTED    = syscall.Errno(0x35)\n\tECONNREFUSED    = syscall.Errno(0x3d)\n\tECONNRESET      = syscall.Errno(0x36)\n\tEDEADLK         = syscall.Errno(0xb)\n\tEDESTADDRREQ    = syscall.Errno(0x27)\n\tEDEVERR         = syscall.Errno(0x53)\n\tEDOM            = syscall.Errno(0x21)\n\tEDQUOT          = syscall.Errno(0x45)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFTYPE          = syscall.Errno(0x4f)\n\tEHOSTDOWN       = syscall.Errno(0x40)\n\tEHOSTUNREACH    = syscall.Errno(0x41)\n\tEIDRM           = syscall.Errno(0x5a)\n\tEILSEQ          = syscall.Errno(0x5c)\n\tEINPROGRESS     = syscall.Errno(0x24)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEISCONN         = syscall.Errno(0x38)\n\tEISDIR          = syscall.Errno(0x15)\n\tELAST           = syscall.Errno(0x6a)\n\tELOOP           = syscall.Errno(0x3e)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x28)\n\tEMULTIHOP       = syscall.Errno(0x5f)\n\tENAMETOOLONG    = syscall.Errno(0x3f)\n\tENEEDAUTH       = syscall.Errno(0x51)\n\tENETDOWN        = syscall.Errno(0x32)\n\tENETRESET       = syscall.Errno(0x34)\n\tENETUNREACH     = syscall.Errno(0x33)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x5d)\n\tENOBUFS         = syscall.Errno(0x37)\n\tENODATA         = syscall.Errno(0x60)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x4d)\n\tENOLINK         = syscall.Errno(0x61)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x5b)\n\tENOPOLICY       = syscall.Errno(0x67)\n\tENOPROTOOPT     = syscall.Errno(0x2a)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSR           = syscall.Errno(0x62)\n\tENOSTR          = syscall.Errno(0x63)\n\tENOSYS          = syscall.Errno(0x4e)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x39)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x42)\n\tENOTRECOVERABLE = syscall.Errno(0x68)\n\tENOTSOCK        = syscall.Errno(0x26)\n\tENOTSUP         = syscall.Errno(0x2d)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x66)\n\tEOVERFLOW       = syscall.Errno(0x54)\n\tEOWNERDEAD      = syscall.Errno(0x69)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x2e)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x43)\n\tEPROCUNAVAIL    = syscall.Errno(0x4c)\n\tEPROGMISMATCH   = syscall.Errno(0x4b)\n\tEPROGUNAVAIL    = syscall.Errno(0x4a)\n\tEPROTO          = syscall.Errno(0x64)\n\tEPROTONOSUPPORT = syscall.Errno(0x2b)\n\tEPROTOTYPE      = syscall.Errno(0x29)\n\tEPWROFF         = syscall.Errno(0x52)\n\tEQFULL          = syscall.Errno(0x6a)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x47)\n\tEROFS           = syscall.Errno(0x1e)\n\tERPCMISMATCH    = syscall.Errno(0x49)\n\tESHLIBVERS      = syscall.Errno(0x57)\n\tESHUTDOWN       = syscall.Errno(0x3a)\n\tESOCKTNOSUPPORT = syscall.Errno(0x2c)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x46)\n\tETIME           = syscall.Errno(0x65)\n\tETIMEDOUT       = syscall.Errno(0x3c)\n\tETOOMANYREFS    = syscall.Errno(0x3b)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUSERS          = syscall.Errno(0x44)\n\tEWOULDBLOCK     = syscall.Errno(0x23)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x14)\n\tSIGCONT   = syscall.Signal(0x13)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINFO   = syscall.Signal(0x1d)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x17)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTOP   = syscall.Signal(0x11)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x12)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x10)\n\tSIGUSR1   = syscall.Signal(0x1e)\n\tSIGUSR2   = syscall.Signal(0x1f)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"device not configured\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"resource busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"operation not supported by device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large\"},\n\t{35, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{36, \"EINPROGRESS\", \"operation now in progress\"},\n\t{37, \"EALREADY\", \"operation already in progress\"},\n\t{38, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{39, \"EDESTADDRREQ\", \"destination address required\"},\n\t{40, \"EMSGSIZE\", \"message too long\"},\n\t{41, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{42, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{43, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{44, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{45, \"ENOTSUP\", \"operation not supported\"},\n\t{46, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{47, \"EAFNOSUPPORT\", \"address family not supported by protocol family\"},\n\t{48, \"EADDRINUSE\", \"address already in use\"},\n\t{49, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{50, \"ENETDOWN\", \"network is down\"},\n\t{51, \"ENETUNREACH\", \"network is unreachable\"},\n\t{52, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{53, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{54, \"ECONNRESET\", \"connection reset by peer\"},\n\t{55, \"ENOBUFS\", \"no buffer space available\"},\n\t{56, \"EISCONN\", \"socket is already connected\"},\n\t{57, \"ENOTCONN\", \"socket is not connected\"},\n\t{58, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{59, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{60, \"ETIMEDOUT\", \"operation timed out\"},\n\t{61, \"ECONNREFUSED\", \"connection refused\"},\n\t{62, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{63, \"ENAMETOOLONG\", \"file name too long\"},\n\t{64, \"EHOSTDOWN\", \"host is down\"},\n\t{65, \"EHOSTUNREACH\", \"no route to host\"},\n\t{66, \"ENOTEMPTY\", \"directory not empty\"},\n\t{67, \"EPROCLIM\", \"too many processes\"},\n\t{68, \"EUSERS\", \"too many users\"},\n\t{69, \"EDQUOT\", \"disc quota exceeded\"},\n\t{70, \"ESTALE\", \"stale NFS file handle\"},\n\t{71, \"EREMOTE\", \"too many levels of remote in path\"},\n\t{72, \"EBADRPC\", \"RPC struct is bad\"},\n\t{73, \"ERPCMISMATCH\", \"RPC version wrong\"},\n\t{74, \"EPROGUNAVAIL\", \"RPC prog. not avail\"},\n\t{75, \"EPROGMISMATCH\", \"program version wrong\"},\n\t{76, \"EPROCUNAVAIL\", \"bad procedure for program\"},\n\t{77, \"ENOLCK\", \"no locks available\"},\n\t{78, \"ENOSYS\", \"function not implemented\"},\n\t{79, \"EFTYPE\", \"inappropriate file type or format\"},\n\t{80, \"EAUTH\", \"authentication error\"},\n\t{81, \"ENEEDAUTH\", \"need authenticator\"},\n\t{82, \"EPWROFF\", \"device power is off\"},\n\t{83, \"EDEVERR\", \"device error\"},\n\t{84, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n\t{85, \"EBADEXEC\", \"bad executable (or shared library)\"},\n\t{86, \"EBADARCH\", \"bad CPU type in executable\"},\n\t{87, \"ESHLIBVERS\", \"shared library version mismatch\"},\n\t{88, \"EBADMACHO\", \"malformed Mach-o file\"},\n\t{89, \"ECANCELED\", \"operation canceled\"},\n\t{90, \"EIDRM\", \"identifier removed\"},\n\t{91, \"ENOMSG\", \"no message of desired type\"},\n\t{92, \"EILSEQ\", \"illegal byte sequence\"},\n\t{93, \"ENOATTR\", \"attribute not found\"},\n\t{94, \"EBADMSG\", \"bad message\"},\n\t{95, \"EMULTIHOP\", \"EMULTIHOP (Reserved)\"},\n\t{96, \"ENODATA\", \"no message available on STREAM\"},\n\t{97, \"ENOLINK\", \"ENOLINK (Reserved)\"},\n\t{98, \"ENOSR\", \"no STREAM resources\"},\n\t{99, \"ENOSTR\", \"not a STREAM\"},\n\t{100, \"EPROTO\", \"protocol error\"},\n\t{101, \"ETIME\", \"STREAM ioctl timeout\"},\n\t{102, \"EOPNOTSUPP\", \"operation not supported on socket\"},\n\t{103, \"ENOPOLICY\", \"policy not found\"},\n\t{104, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{105, \"EOWNERDEAD\", \"previous owner died\"},\n\t{106, \"EQFULL\", \"interface output queue is full\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGABRT\", \"abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"suspended (signal)\"},\n\t{18, \"SIGTSTP\", \"suspended\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGINFO\", \"information request\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go",
    "content": "// mkerrors.sh -m64\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build amd64,darwin\n\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs -- -m64 _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                      = 0x10\n\tAF_CCITT                          = 0xa\n\tAF_CHAOS                          = 0x5\n\tAF_CNT                            = 0x15\n\tAF_COIP                           = 0x14\n\tAF_DATAKIT                        = 0x9\n\tAF_DECnet                         = 0xc\n\tAF_DLI                            = 0xd\n\tAF_E164                           = 0x1c\n\tAF_ECMA                           = 0x8\n\tAF_HYLINK                         = 0xf\n\tAF_IEEE80211                      = 0x25\n\tAF_IMPLINK                        = 0x3\n\tAF_INET                           = 0x2\n\tAF_INET6                          = 0x1e\n\tAF_IPX                            = 0x17\n\tAF_ISDN                           = 0x1c\n\tAF_ISO                            = 0x7\n\tAF_LAT                            = 0xe\n\tAF_LINK                           = 0x12\n\tAF_LOCAL                          = 0x1\n\tAF_MAX                            = 0x28\n\tAF_NATM                           = 0x1f\n\tAF_NDRV                           = 0x1b\n\tAF_NETBIOS                        = 0x21\n\tAF_NS                             = 0x6\n\tAF_OSI                            = 0x7\n\tAF_PPP                            = 0x22\n\tAF_PUP                            = 0x4\n\tAF_RESERVED_36                    = 0x24\n\tAF_ROUTE                          = 0x11\n\tAF_SIP                            = 0x18\n\tAF_SNA                            = 0xb\n\tAF_SYSTEM                         = 0x20\n\tAF_UNIX                           = 0x1\n\tAF_UNSPEC                         = 0x0\n\tAF_UTUN                           = 0x26\n\tALTWERASE                         = 0x200\n\tATTR_BIT_MAP_COUNT                = 0x5\n\tATTR_CMN_ACCESSMASK               = 0x20000\n\tATTR_CMN_ACCTIME                  = 0x1000\n\tATTR_CMN_ADDEDTIME                = 0x10000000\n\tATTR_CMN_BKUPTIME                 = 0x2000\n\tATTR_CMN_CHGTIME                  = 0x800\n\tATTR_CMN_CRTIME                   = 0x200\n\tATTR_CMN_DATA_PROTECT_FLAGS       = 0x40000000\n\tATTR_CMN_DEVID                    = 0x2\n\tATTR_CMN_DOCUMENT_ID              = 0x100000\n\tATTR_CMN_ERROR                    = 0x20000000\n\tATTR_CMN_EXTENDED_SECURITY        = 0x400000\n\tATTR_CMN_FILEID                   = 0x2000000\n\tATTR_CMN_FLAGS                    = 0x40000\n\tATTR_CMN_FNDRINFO                 = 0x4000\n\tATTR_CMN_FSID                     = 0x4\n\tATTR_CMN_FULLPATH                 = 0x8000000\n\tATTR_CMN_GEN_COUNT                = 0x80000\n\tATTR_CMN_GRPID                    = 0x10000\n\tATTR_CMN_GRPUUID                  = 0x1000000\n\tATTR_CMN_MODTIME                  = 0x400\n\tATTR_CMN_NAME                     = 0x1\n\tATTR_CMN_NAMEDATTRCOUNT           = 0x80000\n\tATTR_CMN_NAMEDATTRLIST            = 0x100000\n\tATTR_CMN_OBJID                    = 0x20\n\tATTR_CMN_OBJPERMANENTID           = 0x40\n\tATTR_CMN_OBJTAG                   = 0x10\n\tATTR_CMN_OBJTYPE                  = 0x8\n\tATTR_CMN_OWNERID                  = 0x8000\n\tATTR_CMN_PARENTID                 = 0x4000000\n\tATTR_CMN_PAROBJID                 = 0x80\n\tATTR_CMN_RETURNED_ATTRS           = 0x80000000\n\tATTR_CMN_SCRIPT                   = 0x100\n\tATTR_CMN_SETMASK                  = 0x41c7ff00\n\tATTR_CMN_USERACCESS               = 0x200000\n\tATTR_CMN_UUID                     = 0x800000\n\tATTR_CMN_VALIDMASK                = 0xffffffff\n\tATTR_CMN_VOLSETMASK               = 0x6700\n\tATTR_FILE_ALLOCSIZE               = 0x4\n\tATTR_FILE_CLUMPSIZE               = 0x10\n\tATTR_FILE_DATAALLOCSIZE           = 0x400\n\tATTR_FILE_DATAEXTENTS             = 0x800\n\tATTR_FILE_DATALENGTH              = 0x200\n\tATTR_FILE_DEVTYPE                 = 0x20\n\tATTR_FILE_FILETYPE                = 0x40\n\tATTR_FILE_FORKCOUNT               = 0x80\n\tATTR_FILE_FORKLIST                = 0x100\n\tATTR_FILE_IOBLOCKSIZE             = 0x8\n\tATTR_FILE_LINKCOUNT               = 0x1\n\tATTR_FILE_RSRCALLOCSIZE           = 0x2000\n\tATTR_FILE_RSRCEXTENTS             = 0x4000\n\tATTR_FILE_RSRCLENGTH              = 0x1000\n\tATTR_FILE_SETMASK                 = 0x20\n\tATTR_FILE_TOTALSIZE               = 0x2\n\tATTR_FILE_VALIDMASK               = 0x37ff\n\tATTR_VOL_ALLOCATIONCLUMP          = 0x40\n\tATTR_VOL_ATTRIBUTES               = 0x40000000\n\tATTR_VOL_CAPABILITIES             = 0x20000\n\tATTR_VOL_DIRCOUNT                 = 0x400\n\tATTR_VOL_ENCODINGSUSED            = 0x10000\n\tATTR_VOL_FILECOUNT                = 0x200\n\tATTR_VOL_FSTYPE                   = 0x1\n\tATTR_VOL_INFO                     = 0x80000000\n\tATTR_VOL_IOBLOCKSIZE              = 0x80\n\tATTR_VOL_MAXOBJCOUNT              = 0x800\n\tATTR_VOL_MINALLOCATION            = 0x20\n\tATTR_VOL_MOUNTEDDEVICE            = 0x8000\n\tATTR_VOL_MOUNTFLAGS               = 0x4000\n\tATTR_VOL_MOUNTPOINT               = 0x1000\n\tATTR_VOL_NAME                     = 0x2000\n\tATTR_VOL_OBJCOUNT                 = 0x100\n\tATTR_VOL_QUOTA_SIZE               = 0x10000000\n\tATTR_VOL_RESERVED_SIZE            = 0x20000000\n\tATTR_VOL_SETMASK                  = 0x80002000\n\tATTR_VOL_SIGNATURE                = 0x2\n\tATTR_VOL_SIZE                     = 0x4\n\tATTR_VOL_SPACEAVAIL               = 0x10\n\tATTR_VOL_SPACEFREE                = 0x8\n\tATTR_VOL_UUID                     = 0x40000\n\tATTR_VOL_VALIDMASK                = 0xf007ffff\n\tB0                                = 0x0\n\tB110                              = 0x6e\n\tB115200                           = 0x1c200\n\tB1200                             = 0x4b0\n\tB134                              = 0x86\n\tB14400                            = 0x3840\n\tB150                              = 0x96\n\tB1800                             = 0x708\n\tB19200                            = 0x4b00\n\tB200                              = 0xc8\n\tB230400                           = 0x38400\n\tB2400                             = 0x960\n\tB28800                            = 0x7080\n\tB300                              = 0x12c\n\tB38400                            = 0x9600\n\tB4800                             = 0x12c0\n\tB50                               = 0x32\n\tB57600                            = 0xe100\n\tB600                              = 0x258\n\tB7200                             = 0x1c20\n\tB75                               = 0x4b\n\tB76800                            = 0x12c00\n\tB9600                             = 0x2580\n\tBIOCFLUSH                         = 0x20004268\n\tBIOCGBLEN                         = 0x40044266\n\tBIOCGDLT                          = 0x4004426a\n\tBIOCGDLTLIST                      = 0xc00c4279\n\tBIOCGETIF                         = 0x4020426b\n\tBIOCGHDRCMPLT                     = 0x40044274\n\tBIOCGRSIG                         = 0x40044272\n\tBIOCGRTIMEOUT                     = 0x4010426e\n\tBIOCGSEESENT                      = 0x40044276\n\tBIOCGSTATS                        = 0x4008426f\n\tBIOCIMMEDIATE                     = 0x80044270\n\tBIOCPROMISC                       = 0x20004269\n\tBIOCSBLEN                         = 0xc0044266\n\tBIOCSDLT                          = 0x80044278\n\tBIOCSETF                          = 0x80104267\n\tBIOCSETFNR                        = 0x8010427e\n\tBIOCSETIF                         = 0x8020426c\n\tBIOCSHDRCMPLT                     = 0x80044275\n\tBIOCSRSIG                         = 0x80044273\n\tBIOCSRTIMEOUT                     = 0x8010426d\n\tBIOCSSEESENT                      = 0x80044277\n\tBIOCVERSION                       = 0x40044271\n\tBPF_A                             = 0x10\n\tBPF_ABS                           = 0x20\n\tBPF_ADD                           = 0x0\n\tBPF_ALIGNMENT                     = 0x4\n\tBPF_ALU                           = 0x4\n\tBPF_AND                           = 0x50\n\tBPF_B                             = 0x10\n\tBPF_DIV                           = 0x30\n\tBPF_H                             = 0x8\n\tBPF_IMM                           = 0x0\n\tBPF_IND                           = 0x40\n\tBPF_JA                            = 0x0\n\tBPF_JEQ                           = 0x10\n\tBPF_JGE                           = 0x30\n\tBPF_JGT                           = 0x20\n\tBPF_JMP                           = 0x5\n\tBPF_JSET                          = 0x40\n\tBPF_K                             = 0x0\n\tBPF_LD                            = 0x0\n\tBPF_LDX                           = 0x1\n\tBPF_LEN                           = 0x80\n\tBPF_LSH                           = 0x60\n\tBPF_MAJOR_VERSION                 = 0x1\n\tBPF_MAXBUFSIZE                    = 0x80000\n\tBPF_MAXINSNS                      = 0x200\n\tBPF_MEM                           = 0x60\n\tBPF_MEMWORDS                      = 0x10\n\tBPF_MINBUFSIZE                    = 0x20\n\tBPF_MINOR_VERSION                 = 0x1\n\tBPF_MISC                          = 0x7\n\tBPF_MSH                           = 0xa0\n\tBPF_MUL                           = 0x20\n\tBPF_NEG                           = 0x80\n\tBPF_OR                            = 0x40\n\tBPF_RELEASE                       = 0x30bb6\n\tBPF_RET                           = 0x6\n\tBPF_RSH                           = 0x70\n\tBPF_ST                            = 0x2\n\tBPF_STX                           = 0x3\n\tBPF_SUB                           = 0x10\n\tBPF_TAX                           = 0x0\n\tBPF_TXA                           = 0x80\n\tBPF_W                             = 0x0\n\tBPF_X                             = 0x8\n\tBRKINT                            = 0x2\n\tBS0                               = 0x0\n\tBS1                               = 0x8000\n\tBSDLY                             = 0x8000\n\tCFLUSH                            = 0xf\n\tCLOCAL                            = 0x8000\n\tCLOCK_MONOTONIC                   = 0x6\n\tCLOCK_MONOTONIC_RAW               = 0x4\n\tCLOCK_MONOTONIC_RAW_APPROX        = 0x5\n\tCLOCK_PROCESS_CPUTIME_ID          = 0xc\n\tCLOCK_REALTIME                    = 0x0\n\tCLOCK_THREAD_CPUTIME_ID           = 0x10\n\tCLOCK_UPTIME_RAW                  = 0x8\n\tCLOCK_UPTIME_RAW_APPROX           = 0x9\n\tCR0                               = 0x0\n\tCR1                               = 0x1000\n\tCR2                               = 0x2000\n\tCR3                               = 0x3000\n\tCRDLY                             = 0x3000\n\tCREAD                             = 0x800\n\tCRTSCTS                           = 0x30000\n\tCS5                               = 0x0\n\tCS6                               = 0x100\n\tCS7                               = 0x200\n\tCS8                               = 0x300\n\tCSIZE                             = 0x300\n\tCSTART                            = 0x11\n\tCSTATUS                           = 0x14\n\tCSTOP                             = 0x13\n\tCSTOPB                            = 0x400\n\tCSUSP                             = 0x1a\n\tCTL_HW                            = 0x6\n\tCTL_KERN                          = 0x1\n\tCTL_MAXNAME                       = 0xc\n\tCTL_NET                           = 0x4\n\tDLT_A429                          = 0xb8\n\tDLT_A653_ICM                      = 0xb9\n\tDLT_AIRONET_HEADER                = 0x78\n\tDLT_AOS                           = 0xde\n\tDLT_APPLE_IP_OVER_IEEE1394        = 0x8a\n\tDLT_ARCNET                        = 0x7\n\tDLT_ARCNET_LINUX                  = 0x81\n\tDLT_ATM_CLIP                      = 0x13\n\tDLT_ATM_RFC1483                   = 0xb\n\tDLT_AURORA                        = 0x7e\n\tDLT_AX25                          = 0x3\n\tDLT_AX25_KISS                     = 0xca\n\tDLT_BACNET_MS_TP                  = 0xa5\n\tDLT_BLUETOOTH_HCI_H4              = 0xbb\n\tDLT_BLUETOOTH_HCI_H4_WITH_PHDR    = 0xc9\n\tDLT_CAN20B                        = 0xbe\n\tDLT_CAN_SOCKETCAN                 = 0xe3\n\tDLT_CHAOS                         = 0x5\n\tDLT_CHDLC                         = 0x68\n\tDLT_CISCO_IOS                     = 0x76\n\tDLT_C_HDLC                        = 0x68\n\tDLT_C_HDLC_WITH_DIR               = 0xcd\n\tDLT_DBUS                          = 0xe7\n\tDLT_DECT                          = 0xdd\n\tDLT_DOCSIS                        = 0x8f\n\tDLT_DVB_CI                        = 0xeb\n\tDLT_ECONET                        = 0x73\n\tDLT_EN10MB                        = 0x1\n\tDLT_EN3MB                         = 0x2\n\tDLT_ENC                           = 0x6d\n\tDLT_ERF                           = 0xc5\n\tDLT_ERF_ETH                       = 0xaf\n\tDLT_ERF_POS                       = 0xb0\n\tDLT_FC_2                          = 0xe0\n\tDLT_FC_2_WITH_FRAME_DELIMS        = 0xe1\n\tDLT_FDDI                          = 0xa\n\tDLT_FLEXRAY                       = 0xd2\n\tDLT_FRELAY                        = 0x6b\n\tDLT_FRELAY_WITH_DIR               = 0xce\n\tDLT_GCOM_SERIAL                   = 0xad\n\tDLT_GCOM_T1E1                     = 0xac\n\tDLT_GPF_F                         = 0xab\n\tDLT_GPF_T                         = 0xaa\n\tDLT_GPRS_LLC                      = 0xa9\n\tDLT_GSMTAP_ABIS                   = 0xda\n\tDLT_GSMTAP_UM                     = 0xd9\n\tDLT_HHDLC                         = 0x79\n\tDLT_IBM_SN                        = 0x92\n\tDLT_IBM_SP                        = 0x91\n\tDLT_IEEE802                       = 0x6\n\tDLT_IEEE802_11                    = 0x69\n\tDLT_IEEE802_11_RADIO              = 0x7f\n\tDLT_IEEE802_11_RADIO_AVS          = 0xa3\n\tDLT_IEEE802_15_4                  = 0xc3\n\tDLT_IEEE802_15_4_LINUX            = 0xbf\n\tDLT_IEEE802_15_4_NOFCS            = 0xe6\n\tDLT_IEEE802_15_4_NONASK_PHY       = 0xd7\n\tDLT_IEEE802_16_MAC_CPS            = 0xbc\n\tDLT_IEEE802_16_MAC_CPS_RADIO      = 0xc1\n\tDLT_IPFILTER                      = 0x74\n\tDLT_IPMB                          = 0xc7\n\tDLT_IPMB_LINUX                    = 0xd1\n\tDLT_IPNET                         = 0xe2\n\tDLT_IPOIB                         = 0xf2\n\tDLT_IPV4                          = 0xe4\n\tDLT_IPV6                          = 0xe5\n\tDLT_IP_OVER_FC                    = 0x7a\n\tDLT_JUNIPER_ATM1                  = 0x89\n\tDLT_JUNIPER_ATM2                  = 0x87\n\tDLT_JUNIPER_ATM_CEMIC             = 0xee\n\tDLT_JUNIPER_CHDLC                 = 0xb5\n\tDLT_JUNIPER_ES                    = 0x84\n\tDLT_JUNIPER_ETHER                 = 0xb2\n\tDLT_JUNIPER_FIBRECHANNEL          = 0xea\n\tDLT_JUNIPER_FRELAY                = 0xb4\n\tDLT_JUNIPER_GGSN                  = 0x85\n\tDLT_JUNIPER_ISM                   = 0xc2\n\tDLT_JUNIPER_MFR                   = 0x86\n\tDLT_JUNIPER_MLFR                  = 0x83\n\tDLT_JUNIPER_MLPPP                 = 0x82\n\tDLT_JUNIPER_MONITOR               = 0xa4\n\tDLT_JUNIPER_PIC_PEER              = 0xae\n\tDLT_JUNIPER_PPP                   = 0xb3\n\tDLT_JUNIPER_PPPOE                 = 0xa7\n\tDLT_JUNIPER_PPPOE_ATM             = 0xa8\n\tDLT_JUNIPER_SERVICES              = 0x88\n\tDLT_JUNIPER_SRX_E2E               = 0xe9\n\tDLT_JUNIPER_ST                    = 0xc8\n\tDLT_JUNIPER_VP                    = 0xb7\n\tDLT_JUNIPER_VS                    = 0xe8\n\tDLT_LAPB_WITH_DIR                 = 0xcf\n\tDLT_LAPD                          = 0xcb\n\tDLT_LIN                           = 0xd4\n\tDLT_LINUX_EVDEV                   = 0xd8\n\tDLT_LINUX_IRDA                    = 0x90\n\tDLT_LINUX_LAPD                    = 0xb1\n\tDLT_LINUX_PPP_WITHDIRECTION       = 0xa6\n\tDLT_LINUX_SLL                     = 0x71\n\tDLT_LOOP                          = 0x6c\n\tDLT_LTALK                         = 0x72\n\tDLT_MATCHING_MAX                  = 0xf5\n\tDLT_MATCHING_MIN                  = 0x68\n\tDLT_MFR                           = 0xb6\n\tDLT_MOST                          = 0xd3\n\tDLT_MPEG_2_TS                     = 0xf3\n\tDLT_MPLS                          = 0xdb\n\tDLT_MTP2                          = 0x8c\n\tDLT_MTP2_WITH_PHDR                = 0x8b\n\tDLT_MTP3                          = 0x8d\n\tDLT_MUX27010                      = 0xec\n\tDLT_NETANALYZER                   = 0xf0\n\tDLT_NETANALYZER_TRANSPARENT       = 0xf1\n\tDLT_NFC_LLCP                      = 0xf5\n\tDLT_NFLOG                         = 0xef\n\tDLT_NG40                          = 0xf4\n\tDLT_NULL                          = 0x0\n\tDLT_PCI_EXP                       = 0x7d\n\tDLT_PFLOG                         = 0x75\n\tDLT_PFSYNC                        = 0x12\n\tDLT_PPI                           = 0xc0\n\tDLT_PPP                           = 0x9\n\tDLT_PPP_BSDOS                     = 0x10\n\tDLT_PPP_ETHER                     = 0x33\n\tDLT_PPP_PPPD                      = 0xa6\n\tDLT_PPP_SERIAL                    = 0x32\n\tDLT_PPP_WITH_DIR                  = 0xcc\n\tDLT_PPP_WITH_DIRECTION            = 0xa6\n\tDLT_PRISM_HEADER                  = 0x77\n\tDLT_PRONET                        = 0x4\n\tDLT_RAIF1                         = 0xc6\n\tDLT_RAW                           = 0xc\n\tDLT_RIO                           = 0x7c\n\tDLT_SCCP                          = 0x8e\n\tDLT_SITA                          = 0xc4\n\tDLT_SLIP                          = 0x8\n\tDLT_SLIP_BSDOS                    = 0xf\n\tDLT_STANAG_5066_D_PDU             = 0xed\n\tDLT_SUNATM                        = 0x7b\n\tDLT_SYMANTEC_FIREWALL             = 0x63\n\tDLT_TZSP                          = 0x80\n\tDLT_USB                           = 0xba\n\tDLT_USB_LINUX                     = 0xbd\n\tDLT_USB_LINUX_MMAPPED             = 0xdc\n\tDLT_USER0                         = 0x93\n\tDLT_USER1                         = 0x94\n\tDLT_USER10                        = 0x9d\n\tDLT_USER11                        = 0x9e\n\tDLT_USER12                        = 0x9f\n\tDLT_USER13                        = 0xa0\n\tDLT_USER14                        = 0xa1\n\tDLT_USER15                        = 0xa2\n\tDLT_USER2                         = 0x95\n\tDLT_USER3                         = 0x96\n\tDLT_USER4                         = 0x97\n\tDLT_USER5                         = 0x98\n\tDLT_USER6                         = 0x99\n\tDLT_USER7                         = 0x9a\n\tDLT_USER8                         = 0x9b\n\tDLT_USER9                         = 0x9c\n\tDLT_WIHART                        = 0xdf\n\tDLT_X2E_SERIAL                    = 0xd5\n\tDLT_X2E_XORAYA                    = 0xd6\n\tDT_BLK                            = 0x6\n\tDT_CHR                            = 0x2\n\tDT_DIR                            = 0x4\n\tDT_FIFO                           = 0x1\n\tDT_LNK                            = 0xa\n\tDT_REG                            = 0x8\n\tDT_SOCK                           = 0xc\n\tDT_UNKNOWN                        = 0x0\n\tDT_WHT                            = 0xe\n\tECHO                              = 0x8\n\tECHOCTL                           = 0x40\n\tECHOE                             = 0x2\n\tECHOK                             = 0x4\n\tECHOKE                            = 0x1\n\tECHONL                            = 0x10\n\tECHOPRT                           = 0x20\n\tEVFILT_AIO                        = -0x3\n\tEVFILT_EXCEPT                     = -0xf\n\tEVFILT_FS                         = -0x9\n\tEVFILT_MACHPORT                   = -0x8\n\tEVFILT_PROC                       = -0x5\n\tEVFILT_READ                       = -0x1\n\tEVFILT_SIGNAL                     = -0x6\n\tEVFILT_SYSCOUNT                   = 0xf\n\tEVFILT_THREADMARKER               = 0xf\n\tEVFILT_TIMER                      = -0x7\n\tEVFILT_USER                       = -0xa\n\tEVFILT_VM                         = -0xc\n\tEVFILT_VNODE                      = -0x4\n\tEVFILT_WRITE                      = -0x2\n\tEV_ADD                            = 0x1\n\tEV_CLEAR                          = 0x20\n\tEV_DELETE                         = 0x2\n\tEV_DISABLE                        = 0x8\n\tEV_DISPATCH                       = 0x80\n\tEV_DISPATCH2                      = 0x180\n\tEV_ENABLE                         = 0x4\n\tEV_EOF                            = 0x8000\n\tEV_ERROR                          = 0x4000\n\tEV_FLAG0                          = 0x1000\n\tEV_FLAG1                          = 0x2000\n\tEV_ONESHOT                        = 0x10\n\tEV_OOBAND                         = 0x2000\n\tEV_POLL                           = 0x1000\n\tEV_RECEIPT                        = 0x40\n\tEV_SYSFLAGS                       = 0xf000\n\tEV_UDATA_SPECIFIC                 = 0x100\n\tEV_VANISHED                       = 0x200\n\tEXTA                              = 0x4b00\n\tEXTB                              = 0x9600\n\tEXTPROC                           = 0x800\n\tFD_CLOEXEC                        = 0x1\n\tFD_SETSIZE                        = 0x400\n\tFF0                               = 0x0\n\tFF1                               = 0x4000\n\tFFDLY                             = 0x4000\n\tFLUSHO                            = 0x800000\n\tFSOPT_ATTR_CMN_EXTENDED           = 0x20\n\tFSOPT_NOFOLLOW                    = 0x1\n\tFSOPT_NOINMEMUPDATE               = 0x2\n\tFSOPT_PACK_INVAL_ATTRS            = 0x8\n\tFSOPT_REPORT_FULLSIZE             = 0x4\n\tF_ADDFILESIGS                     = 0x3d\n\tF_ADDFILESIGS_FOR_DYLD_SIM        = 0x53\n\tF_ADDFILESIGS_RETURN              = 0x61\n\tF_ADDSIGS                         = 0x3b\n\tF_ALLOCATEALL                     = 0x4\n\tF_ALLOCATECONTIG                  = 0x2\n\tF_BARRIERFSYNC                    = 0x55\n\tF_CHECK_LV                        = 0x62\n\tF_CHKCLEAN                        = 0x29\n\tF_DUPFD                           = 0x0\n\tF_DUPFD_CLOEXEC                   = 0x43\n\tF_FINDSIGS                        = 0x4e\n\tF_FLUSH_DATA                      = 0x28\n\tF_FREEZE_FS                       = 0x35\n\tF_FULLFSYNC                       = 0x33\n\tF_GETCODEDIR                      = 0x48\n\tF_GETFD                           = 0x1\n\tF_GETFL                           = 0x3\n\tF_GETLK                           = 0x7\n\tF_GETLKPID                        = 0x42\n\tF_GETNOSIGPIPE                    = 0x4a\n\tF_GETOWN                          = 0x5\n\tF_GETPATH                         = 0x32\n\tF_GETPATH_MTMINFO                 = 0x47\n\tF_GETPROTECTIONCLASS              = 0x3f\n\tF_GETPROTECTIONLEVEL              = 0x4d\n\tF_GLOBAL_NOCACHE                  = 0x37\n\tF_LOG2PHYS                        = 0x31\n\tF_LOG2PHYS_EXT                    = 0x41\n\tF_NOCACHE                         = 0x30\n\tF_NODIRECT                        = 0x3e\n\tF_OK                              = 0x0\n\tF_PATHPKG_CHECK                   = 0x34\n\tF_PEOFPOSMODE                     = 0x3\n\tF_PREALLOCATE                     = 0x2a\n\tF_PUNCHHOLE                       = 0x63\n\tF_RDADVISE                        = 0x2c\n\tF_RDAHEAD                         = 0x2d\n\tF_RDLCK                           = 0x1\n\tF_SETBACKINGSTORE                 = 0x46\n\tF_SETFD                           = 0x2\n\tF_SETFL                           = 0x4\n\tF_SETLK                           = 0x8\n\tF_SETLKW                          = 0x9\n\tF_SETLKWTIMEOUT                   = 0xa\n\tF_SETNOSIGPIPE                    = 0x49\n\tF_SETOWN                          = 0x6\n\tF_SETPROTECTIONCLASS              = 0x40\n\tF_SETSIZE                         = 0x2b\n\tF_SINGLE_WRITER                   = 0x4c\n\tF_THAW_FS                         = 0x36\n\tF_TRANSCODEKEY                    = 0x4b\n\tF_TRIM_ACTIVE_FILE                = 0x64\n\tF_UNLCK                           = 0x2\n\tF_VOLPOSMODE                      = 0x4\n\tF_WRLCK                           = 0x3\n\tHUPCL                             = 0x4000\n\tHW_MACHINE                        = 0x1\n\tICANON                            = 0x100\n\tICMP6_FILTER                      = 0x12\n\tICRNL                             = 0x100\n\tIEXTEN                            = 0x400\n\tIFF_ALLMULTI                      = 0x200\n\tIFF_ALTPHYS                       = 0x4000\n\tIFF_BROADCAST                     = 0x2\n\tIFF_DEBUG                         = 0x4\n\tIFF_LINK0                         = 0x1000\n\tIFF_LINK1                         = 0x2000\n\tIFF_LINK2                         = 0x4000\n\tIFF_LOOPBACK                      = 0x8\n\tIFF_MULTICAST                     = 0x8000\n\tIFF_NOARP                         = 0x80\n\tIFF_NOTRAILERS                    = 0x20\n\tIFF_OACTIVE                       = 0x400\n\tIFF_POINTOPOINT                   = 0x10\n\tIFF_PROMISC                       = 0x100\n\tIFF_RUNNING                       = 0x40\n\tIFF_SIMPLEX                       = 0x800\n\tIFF_UP                            = 0x1\n\tIFNAMSIZ                          = 0x10\n\tIFT_1822                          = 0x2\n\tIFT_AAL5                          = 0x31\n\tIFT_ARCNET                        = 0x23\n\tIFT_ARCNETPLUS                    = 0x24\n\tIFT_ATM                           = 0x25\n\tIFT_BRIDGE                        = 0xd1\n\tIFT_CARP                          = 0xf8\n\tIFT_CELLULAR                      = 0xff\n\tIFT_CEPT                          = 0x13\n\tIFT_DS3                           = 0x1e\n\tIFT_ENC                           = 0xf4\n\tIFT_EON                           = 0x19\n\tIFT_ETHER                         = 0x6\n\tIFT_FAITH                         = 0x38\n\tIFT_FDDI                          = 0xf\n\tIFT_FRELAY                        = 0x20\n\tIFT_FRELAYDCE                     = 0x2c\n\tIFT_GIF                           = 0x37\n\tIFT_HDH1822                       = 0x3\n\tIFT_HIPPI                         = 0x2f\n\tIFT_HSSI                          = 0x2e\n\tIFT_HY                            = 0xe\n\tIFT_IEEE1394                      = 0x90\n\tIFT_IEEE8023ADLAG                 = 0x88\n\tIFT_ISDNBASIC                     = 0x14\n\tIFT_ISDNPRIMARY                   = 0x15\n\tIFT_ISO88022LLC                   = 0x29\n\tIFT_ISO88023                      = 0x7\n\tIFT_ISO88024                      = 0x8\n\tIFT_ISO88025                      = 0x9\n\tIFT_ISO88026                      = 0xa\n\tIFT_L2VLAN                        = 0x87\n\tIFT_LAPB                          = 0x10\n\tIFT_LOCALTALK                     = 0x2a\n\tIFT_LOOP                          = 0x18\n\tIFT_MIOX25                        = 0x26\n\tIFT_MODEM                         = 0x30\n\tIFT_NSIP                          = 0x1b\n\tIFT_OTHER                         = 0x1\n\tIFT_P10                           = 0xc\n\tIFT_P80                           = 0xd\n\tIFT_PARA                          = 0x22\n\tIFT_PDP                           = 0xff\n\tIFT_PFLOG                         = 0xf5\n\tIFT_PFSYNC                        = 0xf6\n\tIFT_PKTAP                         = 0xfe\n\tIFT_PPP                           = 0x17\n\tIFT_PROPMUX                       = 0x36\n\tIFT_PROPVIRTUAL                   = 0x35\n\tIFT_PTPSERIAL                     = 0x16\n\tIFT_RS232                         = 0x21\n\tIFT_SDLC                          = 0x11\n\tIFT_SIP                           = 0x1f\n\tIFT_SLIP                          = 0x1c\n\tIFT_SMDSDXI                       = 0x2b\n\tIFT_SMDSICIP                      = 0x34\n\tIFT_SONET                         = 0x27\n\tIFT_SONETPATH                     = 0x32\n\tIFT_SONETVT                       = 0x33\n\tIFT_STARLAN                       = 0xb\n\tIFT_STF                           = 0x39\n\tIFT_T1                            = 0x12\n\tIFT_ULTRA                         = 0x1d\n\tIFT_V35                           = 0x2d\n\tIFT_X25                           = 0x5\n\tIFT_X25DDN                        = 0x4\n\tIFT_X25PLE                        = 0x28\n\tIFT_XETHER                        = 0x1a\n\tIGNBRK                            = 0x1\n\tIGNCR                             = 0x80\n\tIGNPAR                            = 0x4\n\tIMAXBEL                           = 0x2000\n\tINLCR                             = 0x40\n\tINPCK                             = 0x10\n\tIN_CLASSA_HOST                    = 0xffffff\n\tIN_CLASSA_MAX                     = 0x80\n\tIN_CLASSA_NET                     = 0xff000000\n\tIN_CLASSA_NSHIFT                  = 0x18\n\tIN_CLASSB_HOST                    = 0xffff\n\tIN_CLASSB_MAX                     = 0x10000\n\tIN_CLASSB_NET                     = 0xffff0000\n\tIN_CLASSB_NSHIFT                  = 0x10\n\tIN_CLASSC_HOST                    = 0xff\n\tIN_CLASSC_NET                     = 0xffffff00\n\tIN_CLASSC_NSHIFT                  = 0x8\n\tIN_CLASSD_HOST                    = 0xfffffff\n\tIN_CLASSD_NET                     = 0xf0000000\n\tIN_CLASSD_NSHIFT                  = 0x1c\n\tIN_LINKLOCALNETNUM                = 0xa9fe0000\n\tIN_LOOPBACKNET                    = 0x7f\n\tIPPROTO_3PC                       = 0x22\n\tIPPROTO_ADFS                      = 0x44\n\tIPPROTO_AH                        = 0x33\n\tIPPROTO_AHIP                      = 0x3d\n\tIPPROTO_APES                      = 0x63\n\tIPPROTO_ARGUS                     = 0xd\n\tIPPROTO_AX25                      = 0x5d\n\tIPPROTO_BHA                       = 0x31\n\tIPPROTO_BLT                       = 0x1e\n\tIPPROTO_BRSATMON                  = 0x4c\n\tIPPROTO_CFTP                      = 0x3e\n\tIPPROTO_CHAOS                     = 0x10\n\tIPPROTO_CMTP                      = 0x26\n\tIPPROTO_CPHB                      = 0x49\n\tIPPROTO_CPNX                      = 0x48\n\tIPPROTO_DDP                       = 0x25\n\tIPPROTO_DGP                       = 0x56\n\tIPPROTO_DIVERT                    = 0xfe\n\tIPPROTO_DONE                      = 0x101\n\tIPPROTO_DSTOPTS                   = 0x3c\n\tIPPROTO_EGP                       = 0x8\n\tIPPROTO_EMCON                     = 0xe\n\tIPPROTO_ENCAP                     = 0x62\n\tIPPROTO_EON                       = 0x50\n\tIPPROTO_ESP                       = 0x32\n\tIPPROTO_ETHERIP                   = 0x61\n\tIPPROTO_FRAGMENT                  = 0x2c\n\tIPPROTO_GGP                       = 0x3\n\tIPPROTO_GMTP                      = 0x64\n\tIPPROTO_GRE                       = 0x2f\n\tIPPROTO_HELLO                     = 0x3f\n\tIPPROTO_HMP                       = 0x14\n\tIPPROTO_HOPOPTS                   = 0x0\n\tIPPROTO_ICMP                      = 0x1\n\tIPPROTO_ICMPV6                    = 0x3a\n\tIPPROTO_IDP                       = 0x16\n\tIPPROTO_IDPR                      = 0x23\n\tIPPROTO_IDRP                      = 0x2d\n\tIPPROTO_IGMP                      = 0x2\n\tIPPROTO_IGP                       = 0x55\n\tIPPROTO_IGRP                      = 0x58\n\tIPPROTO_IL                        = 0x28\n\tIPPROTO_INLSP                     = 0x34\n\tIPPROTO_INP                       = 0x20\n\tIPPROTO_IP                        = 0x0\n\tIPPROTO_IPCOMP                    = 0x6c\n\tIPPROTO_IPCV                      = 0x47\n\tIPPROTO_IPEIP                     = 0x5e\n\tIPPROTO_IPIP                      = 0x4\n\tIPPROTO_IPPC                      = 0x43\n\tIPPROTO_IPV4                      = 0x4\n\tIPPROTO_IPV6                      = 0x29\n\tIPPROTO_IRTP                      = 0x1c\n\tIPPROTO_KRYPTOLAN                 = 0x41\n\tIPPROTO_LARP                      = 0x5b\n\tIPPROTO_LEAF1                     = 0x19\n\tIPPROTO_LEAF2                     = 0x1a\n\tIPPROTO_MAX                       = 0x100\n\tIPPROTO_MAXID                     = 0x34\n\tIPPROTO_MEAS                      = 0x13\n\tIPPROTO_MHRP                      = 0x30\n\tIPPROTO_MICP                      = 0x5f\n\tIPPROTO_MTP                       = 0x5c\n\tIPPROTO_MUX                       = 0x12\n\tIPPROTO_ND                        = 0x4d\n\tIPPROTO_NHRP                      = 0x36\n\tIPPROTO_NONE                      = 0x3b\n\tIPPROTO_NSP                       = 0x1f\n\tIPPROTO_NVPII                     = 0xb\n\tIPPROTO_OSPFIGP                   = 0x59\n\tIPPROTO_PGM                       = 0x71\n\tIPPROTO_PIGP                      = 0x9\n\tIPPROTO_PIM                       = 0x67\n\tIPPROTO_PRM                       = 0x15\n\tIPPROTO_PUP                       = 0xc\n\tIPPROTO_PVP                       = 0x4b\n\tIPPROTO_RAW                       = 0xff\n\tIPPROTO_RCCMON                    = 0xa\n\tIPPROTO_RDP                       = 0x1b\n\tIPPROTO_ROUTING                   = 0x2b\n\tIPPROTO_RSVP                      = 0x2e\n\tIPPROTO_RVD                       = 0x42\n\tIPPROTO_SATEXPAK                  = 0x40\n\tIPPROTO_SATMON                    = 0x45\n\tIPPROTO_SCCSP                     = 0x60\n\tIPPROTO_SCTP                      = 0x84\n\tIPPROTO_SDRP                      = 0x2a\n\tIPPROTO_SEP                       = 0x21\n\tIPPROTO_SRPC                      = 0x5a\n\tIPPROTO_ST                        = 0x7\n\tIPPROTO_SVMTP                     = 0x52\n\tIPPROTO_SWIPE                     = 0x35\n\tIPPROTO_TCF                       = 0x57\n\tIPPROTO_TCP                       = 0x6\n\tIPPROTO_TP                        = 0x1d\n\tIPPROTO_TPXX                      = 0x27\n\tIPPROTO_TRUNK1                    = 0x17\n\tIPPROTO_TRUNK2                    = 0x18\n\tIPPROTO_TTP                       = 0x54\n\tIPPROTO_UDP                       = 0x11\n\tIPPROTO_VINES                     = 0x53\n\tIPPROTO_VISA                      = 0x46\n\tIPPROTO_VMTP                      = 0x51\n\tIPPROTO_WBEXPAK                   = 0x4f\n\tIPPROTO_WBMON                     = 0x4e\n\tIPPROTO_WSN                       = 0x4a\n\tIPPROTO_XNET                      = 0xf\n\tIPPROTO_XTP                       = 0x24\n\tIPV6_2292DSTOPTS                  = 0x17\n\tIPV6_2292HOPLIMIT                 = 0x14\n\tIPV6_2292HOPOPTS                  = 0x16\n\tIPV6_2292NEXTHOP                  = 0x15\n\tIPV6_2292PKTINFO                  = 0x13\n\tIPV6_2292PKTOPTIONS               = 0x19\n\tIPV6_2292RTHDR                    = 0x18\n\tIPV6_BINDV6ONLY                   = 0x1b\n\tIPV6_BOUND_IF                     = 0x7d\n\tIPV6_CHECKSUM                     = 0x1a\n\tIPV6_DEFAULT_MULTICAST_HOPS       = 0x1\n\tIPV6_DEFAULT_MULTICAST_LOOP       = 0x1\n\tIPV6_DEFHLIM                      = 0x40\n\tIPV6_FAITH                        = 0x1d\n\tIPV6_FLOWINFO_MASK                = 0xffffff0f\n\tIPV6_FLOWLABEL_MASK               = 0xffff0f00\n\tIPV6_FLOW_ECN_MASK                = 0x300\n\tIPV6_FRAGTTL                      = 0x3c\n\tIPV6_FW_ADD                       = 0x1e\n\tIPV6_FW_DEL                       = 0x1f\n\tIPV6_FW_FLUSH                     = 0x20\n\tIPV6_FW_GET                       = 0x22\n\tIPV6_FW_ZERO                      = 0x21\n\tIPV6_HLIMDEC                      = 0x1\n\tIPV6_IPSEC_POLICY                 = 0x1c\n\tIPV6_JOIN_GROUP                   = 0xc\n\tIPV6_LEAVE_GROUP                  = 0xd\n\tIPV6_MAXHLIM                      = 0xff\n\tIPV6_MAXOPTHDR                    = 0x800\n\tIPV6_MAXPACKET                    = 0xffff\n\tIPV6_MAX_GROUP_SRC_FILTER         = 0x200\n\tIPV6_MAX_MEMBERSHIPS              = 0xfff\n\tIPV6_MAX_SOCK_SRC_FILTER          = 0x80\n\tIPV6_MIN_MEMBERSHIPS              = 0x1f\n\tIPV6_MMTU                         = 0x500\n\tIPV6_MULTICAST_HOPS               = 0xa\n\tIPV6_MULTICAST_IF                 = 0x9\n\tIPV6_MULTICAST_LOOP               = 0xb\n\tIPV6_PORTRANGE                    = 0xe\n\tIPV6_PORTRANGE_DEFAULT            = 0x0\n\tIPV6_PORTRANGE_HIGH               = 0x1\n\tIPV6_PORTRANGE_LOW                = 0x2\n\tIPV6_RECVTCLASS                   = 0x23\n\tIPV6_RTHDR_LOOSE                  = 0x0\n\tIPV6_RTHDR_STRICT                 = 0x1\n\tIPV6_RTHDR_TYPE_0                 = 0x0\n\tIPV6_SOCKOPT_RESERVED1            = 0x3\n\tIPV6_TCLASS                       = 0x24\n\tIPV6_UNICAST_HOPS                 = 0x4\n\tIPV6_V6ONLY                       = 0x1b\n\tIPV6_VERSION                      = 0x60\n\tIPV6_VERSION_MASK                 = 0xf0\n\tIP_ADD_MEMBERSHIP                 = 0xc\n\tIP_ADD_SOURCE_MEMBERSHIP          = 0x46\n\tIP_BLOCK_SOURCE                   = 0x48\n\tIP_BOUND_IF                       = 0x19\n\tIP_DEFAULT_MULTICAST_LOOP         = 0x1\n\tIP_DEFAULT_MULTICAST_TTL          = 0x1\n\tIP_DF                             = 0x4000\n\tIP_DROP_MEMBERSHIP                = 0xd\n\tIP_DROP_SOURCE_MEMBERSHIP         = 0x47\n\tIP_DUMMYNET_CONFIGURE             = 0x3c\n\tIP_DUMMYNET_DEL                   = 0x3d\n\tIP_DUMMYNET_FLUSH                 = 0x3e\n\tIP_DUMMYNET_GET                   = 0x40\n\tIP_FAITH                          = 0x16\n\tIP_FW_ADD                         = 0x28\n\tIP_FW_DEL                         = 0x29\n\tIP_FW_FLUSH                       = 0x2a\n\tIP_FW_GET                         = 0x2c\n\tIP_FW_RESETLOG                    = 0x2d\n\tIP_FW_ZERO                        = 0x2b\n\tIP_HDRINCL                        = 0x2\n\tIP_IPSEC_POLICY                   = 0x15\n\tIP_MAXPACKET                      = 0xffff\n\tIP_MAX_GROUP_SRC_FILTER           = 0x200\n\tIP_MAX_MEMBERSHIPS                = 0xfff\n\tIP_MAX_SOCK_MUTE_FILTER           = 0x80\n\tIP_MAX_SOCK_SRC_FILTER            = 0x80\n\tIP_MF                             = 0x2000\n\tIP_MIN_MEMBERSHIPS                = 0x1f\n\tIP_MSFILTER                       = 0x4a\n\tIP_MSS                            = 0x240\n\tIP_MULTICAST_IF                   = 0x9\n\tIP_MULTICAST_IFINDEX              = 0x42\n\tIP_MULTICAST_LOOP                 = 0xb\n\tIP_MULTICAST_TTL                  = 0xa\n\tIP_MULTICAST_VIF                  = 0xe\n\tIP_NAT__XXX                       = 0x37\n\tIP_OFFMASK                        = 0x1fff\n\tIP_OLD_FW_ADD                     = 0x32\n\tIP_OLD_FW_DEL                     = 0x33\n\tIP_OLD_FW_FLUSH                   = 0x34\n\tIP_OLD_FW_GET                     = 0x36\n\tIP_OLD_FW_RESETLOG                = 0x38\n\tIP_OLD_FW_ZERO                    = 0x35\n\tIP_OPTIONS                        = 0x1\n\tIP_PKTINFO                        = 0x1a\n\tIP_PORTRANGE                      = 0x13\n\tIP_PORTRANGE_DEFAULT              = 0x0\n\tIP_PORTRANGE_HIGH                 = 0x1\n\tIP_PORTRANGE_LOW                  = 0x2\n\tIP_RECVDSTADDR                    = 0x7\n\tIP_RECVIF                         = 0x14\n\tIP_RECVOPTS                       = 0x5\n\tIP_RECVPKTINFO                    = 0x1a\n\tIP_RECVRETOPTS                    = 0x6\n\tIP_RECVTOS                        = 0x1b\n\tIP_RECVTTL                        = 0x18\n\tIP_RETOPTS                        = 0x8\n\tIP_RF                             = 0x8000\n\tIP_RSVP_OFF                       = 0x10\n\tIP_RSVP_ON                        = 0xf\n\tIP_RSVP_VIF_OFF                   = 0x12\n\tIP_RSVP_VIF_ON                    = 0x11\n\tIP_STRIPHDR                       = 0x17\n\tIP_TOS                            = 0x3\n\tIP_TRAFFIC_MGT_BACKGROUND         = 0x41\n\tIP_TTL                            = 0x4\n\tIP_UNBLOCK_SOURCE                 = 0x49\n\tISIG                              = 0x80\n\tISTRIP                            = 0x20\n\tIUTF8                             = 0x4000\n\tIXANY                             = 0x800\n\tIXOFF                             = 0x400\n\tIXON                              = 0x200\n\tKERN_HOSTNAME                     = 0xa\n\tKERN_OSRELEASE                    = 0x2\n\tKERN_OSTYPE                       = 0x1\n\tKERN_VERSION                      = 0x4\n\tLOCK_EX                           = 0x2\n\tLOCK_NB                           = 0x4\n\tLOCK_SH                           = 0x1\n\tLOCK_UN                           = 0x8\n\tMADV_CAN_REUSE                    = 0x9\n\tMADV_DONTNEED                     = 0x4\n\tMADV_FREE                         = 0x5\n\tMADV_FREE_REUSABLE                = 0x7\n\tMADV_FREE_REUSE                   = 0x8\n\tMADV_NORMAL                       = 0x0\n\tMADV_PAGEOUT                      = 0xa\n\tMADV_RANDOM                       = 0x1\n\tMADV_SEQUENTIAL                   = 0x2\n\tMADV_WILLNEED                     = 0x3\n\tMADV_ZERO_WIRED_PAGES             = 0x6\n\tMAP_ANON                          = 0x1000\n\tMAP_ANONYMOUS                     = 0x1000\n\tMAP_COPY                          = 0x2\n\tMAP_FILE                          = 0x0\n\tMAP_FIXED                         = 0x10\n\tMAP_HASSEMAPHORE                  = 0x200\n\tMAP_JIT                           = 0x800\n\tMAP_NOCACHE                       = 0x400\n\tMAP_NOEXTEND                      = 0x100\n\tMAP_NORESERVE                     = 0x40\n\tMAP_PRIVATE                       = 0x2\n\tMAP_RENAME                        = 0x20\n\tMAP_RESERVED0080                  = 0x80\n\tMAP_RESILIENT_CODESIGN            = 0x2000\n\tMAP_RESILIENT_MEDIA               = 0x4000\n\tMAP_SHARED                        = 0x1\n\tMCL_CURRENT                       = 0x1\n\tMCL_FUTURE                        = 0x2\n\tMNT_ASYNC                         = 0x40\n\tMNT_AUTOMOUNTED                   = 0x400000\n\tMNT_CMDFLAGS                      = 0xf0000\n\tMNT_CPROTECT                      = 0x80\n\tMNT_DEFWRITE                      = 0x2000000\n\tMNT_DONTBROWSE                    = 0x100000\n\tMNT_DOVOLFS                       = 0x8000\n\tMNT_DWAIT                         = 0x4\n\tMNT_EXPORTED                      = 0x100\n\tMNT_FORCE                         = 0x80000\n\tMNT_IGNORE_OWNERSHIP              = 0x200000\n\tMNT_JOURNALED                     = 0x800000\n\tMNT_LOCAL                         = 0x1000\n\tMNT_MULTILABEL                    = 0x4000000\n\tMNT_NOATIME                       = 0x10000000\n\tMNT_NOBLOCK                       = 0x20000\n\tMNT_NODEV                         = 0x10\n\tMNT_NOEXEC                        = 0x4\n\tMNT_NOSUID                        = 0x8\n\tMNT_NOUSERXATTR                   = 0x1000000\n\tMNT_NOWAIT                        = 0x2\n\tMNT_QUARANTINE                    = 0x400\n\tMNT_QUOTA                         = 0x2000\n\tMNT_RDONLY                        = 0x1\n\tMNT_RELOAD                        = 0x40000\n\tMNT_ROOTFS                        = 0x4000\n\tMNT_SYNCHRONOUS                   = 0x2\n\tMNT_UNION                         = 0x20\n\tMNT_UNKNOWNPERMISSIONS            = 0x200000\n\tMNT_UPDATE                        = 0x10000\n\tMNT_VISFLAGMASK                   = 0x17f0f5ff\n\tMNT_WAIT                          = 0x1\n\tMSG_CTRUNC                        = 0x20\n\tMSG_DONTROUTE                     = 0x4\n\tMSG_DONTWAIT                      = 0x80\n\tMSG_EOF                           = 0x100\n\tMSG_EOR                           = 0x8\n\tMSG_FLUSH                         = 0x400\n\tMSG_HAVEMORE                      = 0x2000\n\tMSG_HOLD                          = 0x800\n\tMSG_NEEDSA                        = 0x10000\n\tMSG_OOB                           = 0x1\n\tMSG_PEEK                          = 0x2\n\tMSG_RCVMORE                       = 0x4000\n\tMSG_SEND                          = 0x1000\n\tMSG_TRUNC                         = 0x10\n\tMSG_WAITALL                       = 0x40\n\tMSG_WAITSTREAM                    = 0x200\n\tMS_ASYNC                          = 0x1\n\tMS_DEACTIVATE                     = 0x8\n\tMS_INVALIDATE                     = 0x2\n\tMS_KILLPAGES                      = 0x4\n\tMS_SYNC                           = 0x10\n\tNAME_MAX                          = 0xff\n\tNET_RT_DUMP                       = 0x1\n\tNET_RT_DUMP2                      = 0x7\n\tNET_RT_FLAGS                      = 0x2\n\tNET_RT_IFLIST                     = 0x3\n\tNET_RT_IFLIST2                    = 0x6\n\tNET_RT_MAXID                      = 0xa\n\tNET_RT_STAT                       = 0x4\n\tNET_RT_TRASH                      = 0x5\n\tNL0                               = 0x0\n\tNL1                               = 0x100\n\tNL2                               = 0x200\n\tNL3                               = 0x300\n\tNLDLY                             = 0x300\n\tNOFLSH                            = 0x80000000\n\tNOKERNINFO                        = 0x2000000\n\tNOTE_ABSOLUTE                     = 0x8\n\tNOTE_ATTRIB                       = 0x8\n\tNOTE_BACKGROUND                   = 0x40\n\tNOTE_CHILD                        = 0x4\n\tNOTE_CRITICAL                     = 0x20\n\tNOTE_DELETE                       = 0x1\n\tNOTE_EXEC                         = 0x20000000\n\tNOTE_EXIT                         = 0x80000000\n\tNOTE_EXITSTATUS                   = 0x4000000\n\tNOTE_EXIT_CSERROR                 = 0x40000\n\tNOTE_EXIT_DECRYPTFAIL             = 0x10000\n\tNOTE_EXIT_DETAIL                  = 0x2000000\n\tNOTE_EXIT_DETAIL_MASK             = 0x70000\n\tNOTE_EXIT_MEMORY                  = 0x20000\n\tNOTE_EXIT_REPARENTED              = 0x80000\n\tNOTE_EXTEND                       = 0x4\n\tNOTE_FFAND                        = 0x40000000\n\tNOTE_FFCOPY                       = 0xc0000000\n\tNOTE_FFCTRLMASK                   = 0xc0000000\n\tNOTE_FFLAGSMASK                   = 0xffffff\n\tNOTE_FFNOP                        = 0x0\n\tNOTE_FFOR                         = 0x80000000\n\tNOTE_FORK                         = 0x40000000\n\tNOTE_FUNLOCK                      = 0x100\n\tNOTE_LEEWAY                       = 0x10\n\tNOTE_LINK                         = 0x10\n\tNOTE_LOWAT                        = 0x1\n\tNOTE_MACH_CONTINUOUS_TIME         = 0x80\n\tNOTE_NONE                         = 0x80\n\tNOTE_NSECONDS                     = 0x4\n\tNOTE_OOB                          = 0x2\n\tNOTE_PCTRLMASK                    = -0x100000\n\tNOTE_PDATAMASK                    = 0xfffff\n\tNOTE_REAP                         = 0x10000000\n\tNOTE_RENAME                       = 0x20\n\tNOTE_REVOKE                       = 0x40\n\tNOTE_SECONDS                      = 0x1\n\tNOTE_SIGNAL                       = 0x8000000\n\tNOTE_TRACK                        = 0x1\n\tNOTE_TRACKERR                     = 0x2\n\tNOTE_TRIGGER                      = 0x1000000\n\tNOTE_USECONDS                     = 0x2\n\tNOTE_VM_ERROR                     = 0x10000000\n\tNOTE_VM_PRESSURE                  = 0x80000000\n\tNOTE_VM_PRESSURE_SUDDEN_TERMINATE = 0x20000000\n\tNOTE_VM_PRESSURE_TERMINATE        = 0x40000000\n\tNOTE_WRITE                        = 0x2\n\tOCRNL                             = 0x10\n\tOFDEL                             = 0x20000\n\tOFILL                             = 0x80\n\tONLCR                             = 0x2\n\tONLRET                            = 0x40\n\tONOCR                             = 0x20\n\tONOEOT                            = 0x8\n\tOPOST                             = 0x1\n\tOXTABS                            = 0x4\n\tO_ACCMODE                         = 0x3\n\tO_ALERT                           = 0x20000000\n\tO_APPEND                          = 0x8\n\tO_ASYNC                           = 0x40\n\tO_CLOEXEC                         = 0x1000000\n\tO_CREAT                           = 0x200\n\tO_DIRECTORY                       = 0x100000\n\tO_DP_GETRAWENCRYPTED              = 0x1\n\tO_DP_GETRAWUNENCRYPTED            = 0x2\n\tO_DSYNC                           = 0x400000\n\tO_EVTONLY                         = 0x8000\n\tO_EXCL                            = 0x800\n\tO_EXLOCK                          = 0x20\n\tO_FSYNC                           = 0x80\n\tO_NDELAY                          = 0x4\n\tO_NOCTTY                          = 0x20000\n\tO_NOFOLLOW                        = 0x100\n\tO_NONBLOCK                        = 0x4\n\tO_POPUP                           = 0x80000000\n\tO_RDONLY                          = 0x0\n\tO_RDWR                            = 0x2\n\tO_SHLOCK                          = 0x10\n\tO_SYMLINK                         = 0x200000\n\tO_SYNC                            = 0x80\n\tO_TRUNC                           = 0x400\n\tO_WRONLY                          = 0x1\n\tPARENB                            = 0x1000\n\tPARMRK                            = 0x8\n\tPARODD                            = 0x2000\n\tPENDIN                            = 0x20000000\n\tPRIO_PGRP                         = 0x1\n\tPRIO_PROCESS                      = 0x0\n\tPRIO_USER                         = 0x2\n\tPROT_EXEC                         = 0x4\n\tPROT_NONE                         = 0x0\n\tPROT_READ                         = 0x1\n\tPROT_WRITE                        = 0x2\n\tPT_ATTACH                         = 0xa\n\tPT_ATTACHEXC                      = 0xe\n\tPT_CONTINUE                       = 0x7\n\tPT_DENY_ATTACH                    = 0x1f\n\tPT_DETACH                         = 0xb\n\tPT_FIRSTMACH                      = 0x20\n\tPT_FORCEQUOTA                     = 0x1e\n\tPT_KILL                           = 0x8\n\tPT_READ_D                         = 0x2\n\tPT_READ_I                         = 0x1\n\tPT_READ_U                         = 0x3\n\tPT_SIGEXC                         = 0xc\n\tPT_STEP                           = 0x9\n\tPT_THUPDATE                       = 0xd\n\tPT_TRACE_ME                       = 0x0\n\tPT_WRITE_D                        = 0x5\n\tPT_WRITE_I                        = 0x4\n\tPT_WRITE_U                        = 0x6\n\tRLIMIT_AS                         = 0x5\n\tRLIMIT_CORE                       = 0x4\n\tRLIMIT_CPU                        = 0x0\n\tRLIMIT_CPU_USAGE_MONITOR          = 0x2\n\tRLIMIT_DATA                       = 0x2\n\tRLIMIT_FSIZE                      = 0x1\n\tRLIMIT_MEMLOCK                    = 0x6\n\tRLIMIT_NOFILE                     = 0x8\n\tRLIMIT_NPROC                      = 0x7\n\tRLIMIT_RSS                        = 0x5\n\tRLIMIT_STACK                      = 0x3\n\tRLIM_INFINITY                     = 0x7fffffffffffffff\n\tRTAX_AUTHOR                       = 0x6\n\tRTAX_BRD                          = 0x7\n\tRTAX_DST                          = 0x0\n\tRTAX_GATEWAY                      = 0x1\n\tRTAX_GENMASK                      = 0x3\n\tRTAX_IFA                          = 0x5\n\tRTAX_IFP                          = 0x4\n\tRTAX_MAX                          = 0x8\n\tRTAX_NETMASK                      = 0x2\n\tRTA_AUTHOR                        = 0x40\n\tRTA_BRD                           = 0x80\n\tRTA_DST                           = 0x1\n\tRTA_GATEWAY                       = 0x2\n\tRTA_GENMASK                       = 0x8\n\tRTA_IFA                           = 0x20\n\tRTA_IFP                           = 0x10\n\tRTA_NETMASK                       = 0x4\n\tRTF_BLACKHOLE                     = 0x1000\n\tRTF_BROADCAST                     = 0x400000\n\tRTF_CLONING                       = 0x100\n\tRTF_CONDEMNED                     = 0x2000000\n\tRTF_DELCLONE                      = 0x80\n\tRTF_DONE                          = 0x40\n\tRTF_DYNAMIC                       = 0x10\n\tRTF_GATEWAY                       = 0x2\n\tRTF_HOST                          = 0x4\n\tRTF_IFREF                         = 0x4000000\n\tRTF_IFSCOPE                       = 0x1000000\n\tRTF_LLINFO                        = 0x400\n\tRTF_LOCAL                         = 0x200000\n\tRTF_MODIFIED                      = 0x20\n\tRTF_MULTICAST                     = 0x800000\n\tRTF_NOIFREF                       = 0x2000\n\tRTF_PINNED                        = 0x100000\n\tRTF_PRCLONING                     = 0x10000\n\tRTF_PROTO1                        = 0x8000\n\tRTF_PROTO2                        = 0x4000\n\tRTF_PROTO3                        = 0x40000\n\tRTF_PROXY                         = 0x8000000\n\tRTF_REJECT                        = 0x8\n\tRTF_ROUTER                        = 0x10000000\n\tRTF_STATIC                        = 0x800\n\tRTF_UP                            = 0x1\n\tRTF_WASCLONED                     = 0x20000\n\tRTF_XRESOLVE                      = 0x200\n\tRTM_ADD                           = 0x1\n\tRTM_CHANGE                        = 0x3\n\tRTM_DELADDR                       = 0xd\n\tRTM_DELETE                        = 0x2\n\tRTM_DELMADDR                      = 0x10\n\tRTM_GET                           = 0x4\n\tRTM_GET2                          = 0x14\n\tRTM_IFINFO                        = 0xe\n\tRTM_IFINFO2                       = 0x12\n\tRTM_LOCK                          = 0x8\n\tRTM_LOSING                        = 0x5\n\tRTM_MISS                          = 0x7\n\tRTM_NEWADDR                       = 0xc\n\tRTM_NEWMADDR                      = 0xf\n\tRTM_NEWMADDR2                     = 0x13\n\tRTM_OLDADD                        = 0x9\n\tRTM_OLDDEL                        = 0xa\n\tRTM_REDIRECT                      = 0x6\n\tRTM_RESOLVE                       = 0xb\n\tRTM_RTTUNIT                       = 0xf4240\n\tRTM_VERSION                       = 0x5\n\tRTV_EXPIRE                        = 0x4\n\tRTV_HOPCOUNT                      = 0x2\n\tRTV_MTU                           = 0x1\n\tRTV_RPIPE                         = 0x8\n\tRTV_RTT                           = 0x40\n\tRTV_RTTVAR                        = 0x80\n\tRTV_SPIPE                         = 0x10\n\tRTV_SSTHRESH                      = 0x20\n\tRUSAGE_CHILDREN                   = -0x1\n\tRUSAGE_SELF                       = 0x0\n\tSCM_CREDS                         = 0x3\n\tSCM_RIGHTS                        = 0x1\n\tSCM_TIMESTAMP                     = 0x2\n\tSCM_TIMESTAMP_MONOTONIC           = 0x4\n\tSHUT_RD                           = 0x0\n\tSHUT_RDWR                         = 0x2\n\tSHUT_WR                           = 0x1\n\tSIOCADDMULTI                      = 0x80206931\n\tSIOCAIFADDR                       = 0x8040691a\n\tSIOCARPIPLL                       = 0xc0206928\n\tSIOCATMARK                        = 0x40047307\n\tSIOCAUTOADDR                      = 0xc0206926\n\tSIOCAUTONETMASK                   = 0x80206927\n\tSIOCDELMULTI                      = 0x80206932\n\tSIOCDIFADDR                       = 0x80206919\n\tSIOCDIFPHYADDR                    = 0x80206941\n\tSIOCGDRVSPEC                      = 0xc028697b\n\tSIOCGETVLAN                       = 0xc020697f\n\tSIOCGHIWAT                        = 0x40047301\n\tSIOCGIFADDR                       = 0xc0206921\n\tSIOCGIFALTMTU                     = 0xc0206948\n\tSIOCGIFASYNCMAP                   = 0xc020697c\n\tSIOCGIFBOND                       = 0xc0206947\n\tSIOCGIFBRDADDR                    = 0xc0206923\n\tSIOCGIFCAP                        = 0xc020695b\n\tSIOCGIFCONF                       = 0xc00c6924\n\tSIOCGIFDEVMTU                     = 0xc0206944\n\tSIOCGIFDSTADDR                    = 0xc0206922\n\tSIOCGIFFLAGS                      = 0xc0206911\n\tSIOCGIFGENERIC                    = 0xc020693a\n\tSIOCGIFKPI                        = 0xc0206987\n\tSIOCGIFMAC                        = 0xc0206982\n\tSIOCGIFMEDIA                      = 0xc02c6938\n\tSIOCGIFMETRIC                     = 0xc0206917\n\tSIOCGIFMTU                        = 0xc0206933\n\tSIOCGIFNETMASK                    = 0xc0206925\n\tSIOCGIFPDSTADDR                   = 0xc0206940\n\tSIOCGIFPHYS                       = 0xc0206935\n\tSIOCGIFPSRCADDR                   = 0xc020693f\n\tSIOCGIFSTATUS                     = 0xc331693d\n\tSIOCGIFVLAN                       = 0xc020697f\n\tSIOCGIFWAKEFLAGS                  = 0xc0206988\n\tSIOCGLOWAT                        = 0x40047303\n\tSIOCGPGRP                         = 0x40047309\n\tSIOCIFCREATE                      = 0xc0206978\n\tSIOCIFCREATE2                     = 0xc020697a\n\tSIOCIFDESTROY                     = 0x80206979\n\tSIOCIFGCLONERS                    = 0xc0106981\n\tSIOCRSLVMULTI                     = 0xc010693b\n\tSIOCSDRVSPEC                      = 0x8028697b\n\tSIOCSETVLAN                       = 0x8020697e\n\tSIOCSHIWAT                        = 0x80047300\n\tSIOCSIFADDR                       = 0x8020690c\n\tSIOCSIFALTMTU                     = 0x80206945\n\tSIOCSIFASYNCMAP                   = 0x8020697d\n\tSIOCSIFBOND                       = 0x80206946\n\tSIOCSIFBRDADDR                    = 0x80206913\n\tSIOCSIFCAP                        = 0x8020695a\n\tSIOCSIFDSTADDR                    = 0x8020690e\n\tSIOCSIFFLAGS                      = 0x80206910\n\tSIOCSIFGENERIC                    = 0x80206939\n\tSIOCSIFKPI                        = 0x80206986\n\tSIOCSIFLLADDR                     = 0x8020693c\n\tSIOCSIFMAC                        = 0x80206983\n\tSIOCSIFMEDIA                      = 0xc0206937\n\tSIOCSIFMETRIC                     = 0x80206918\n\tSIOCSIFMTU                        = 0x80206934\n\tSIOCSIFNETMASK                    = 0x80206916\n\tSIOCSIFPHYADDR                    = 0x8040693e\n\tSIOCSIFPHYS                       = 0x80206936\n\tSIOCSIFVLAN                       = 0x8020697e\n\tSIOCSLOWAT                        = 0x80047302\n\tSIOCSPGRP                         = 0x80047308\n\tSOCK_DGRAM                        = 0x2\n\tSOCK_MAXADDRLEN                   = 0xff\n\tSOCK_RAW                          = 0x3\n\tSOCK_RDM                          = 0x4\n\tSOCK_SEQPACKET                    = 0x5\n\tSOCK_STREAM                       = 0x1\n\tSOL_SOCKET                        = 0xffff\n\tSOMAXCONN                         = 0x80\n\tSO_ACCEPTCONN                     = 0x2\n\tSO_BROADCAST                      = 0x20\n\tSO_DEBUG                          = 0x1\n\tSO_DONTROUTE                      = 0x10\n\tSO_DONTTRUNC                      = 0x2000\n\tSO_ERROR                          = 0x1007\n\tSO_KEEPALIVE                      = 0x8\n\tSO_LABEL                          = 0x1010\n\tSO_LINGER                         = 0x80\n\tSO_LINGER_SEC                     = 0x1080\n\tSO_NETSVC_MARKING_LEVEL           = 0x1119\n\tSO_NET_SERVICE_TYPE               = 0x1116\n\tSO_NKE                            = 0x1021\n\tSO_NOADDRERR                      = 0x1023\n\tSO_NOSIGPIPE                      = 0x1022\n\tSO_NOTIFYCONFLICT                 = 0x1026\n\tSO_NP_EXTENSIONS                  = 0x1083\n\tSO_NREAD                          = 0x1020\n\tSO_NUMRCVPKT                      = 0x1112\n\tSO_NWRITE                         = 0x1024\n\tSO_OOBINLINE                      = 0x100\n\tSO_PEERLABEL                      = 0x1011\n\tSO_RANDOMPORT                     = 0x1082\n\tSO_RCVBUF                         = 0x1002\n\tSO_RCVLOWAT                       = 0x1004\n\tSO_RCVTIMEO                       = 0x1006\n\tSO_REUSEADDR                      = 0x4\n\tSO_REUSEPORT                      = 0x200\n\tSO_REUSESHAREUID                  = 0x1025\n\tSO_SNDBUF                         = 0x1001\n\tSO_SNDLOWAT                       = 0x1003\n\tSO_SNDTIMEO                       = 0x1005\n\tSO_TIMESTAMP                      = 0x400\n\tSO_TIMESTAMP_MONOTONIC            = 0x800\n\tSO_TYPE                           = 0x1008\n\tSO_UPCALLCLOSEWAIT                = 0x1027\n\tSO_USELOOPBACK                    = 0x40\n\tSO_WANTMORE                       = 0x4000\n\tSO_WANTOOBFLAG                    = 0x8000\n\tS_IEXEC                           = 0x40\n\tS_IFBLK                           = 0x6000\n\tS_IFCHR                           = 0x2000\n\tS_IFDIR                           = 0x4000\n\tS_IFIFO                           = 0x1000\n\tS_IFLNK                           = 0xa000\n\tS_IFMT                            = 0xf000\n\tS_IFREG                           = 0x8000\n\tS_IFSOCK                          = 0xc000\n\tS_IFWHT                           = 0xe000\n\tS_IREAD                           = 0x100\n\tS_IRGRP                           = 0x20\n\tS_IROTH                           = 0x4\n\tS_IRUSR                           = 0x100\n\tS_IRWXG                           = 0x38\n\tS_IRWXO                           = 0x7\n\tS_IRWXU                           = 0x1c0\n\tS_ISGID                           = 0x400\n\tS_ISTXT                           = 0x200\n\tS_ISUID                           = 0x800\n\tS_ISVTX                           = 0x200\n\tS_IWGRP                           = 0x10\n\tS_IWOTH                           = 0x2\n\tS_IWRITE                          = 0x80\n\tS_IWUSR                           = 0x80\n\tS_IXGRP                           = 0x8\n\tS_IXOTH                           = 0x1\n\tS_IXUSR                           = 0x40\n\tTAB0                              = 0x0\n\tTAB1                              = 0x400\n\tTAB2                              = 0x800\n\tTAB3                              = 0x4\n\tTABDLY                            = 0xc04\n\tTCIFLUSH                          = 0x1\n\tTCIOFF                            = 0x3\n\tTCIOFLUSH                         = 0x3\n\tTCION                             = 0x4\n\tTCOFLUSH                          = 0x2\n\tTCOOFF                            = 0x1\n\tTCOON                             = 0x2\n\tTCP_CONNECTIONTIMEOUT             = 0x20\n\tTCP_CONNECTION_INFO               = 0x106\n\tTCP_ENABLE_ECN                    = 0x104\n\tTCP_FASTOPEN                      = 0x105\n\tTCP_KEEPALIVE                     = 0x10\n\tTCP_KEEPCNT                       = 0x102\n\tTCP_KEEPINTVL                     = 0x101\n\tTCP_MAXHLEN                       = 0x3c\n\tTCP_MAXOLEN                       = 0x28\n\tTCP_MAXSEG                        = 0x2\n\tTCP_MAXWIN                        = 0xffff\n\tTCP_MAX_SACK                      = 0x4\n\tTCP_MAX_WINSHIFT                  = 0xe\n\tTCP_MINMSS                        = 0xd8\n\tTCP_MSS                           = 0x200\n\tTCP_NODELAY                       = 0x1\n\tTCP_NOOPT                         = 0x8\n\tTCP_NOPUSH                        = 0x4\n\tTCP_NOTSENT_LOWAT                 = 0x201\n\tTCP_RXT_CONNDROPTIME              = 0x80\n\tTCP_RXT_FINDROP                   = 0x100\n\tTCP_SENDMOREACKS                  = 0x103\n\tTCSAFLUSH                         = 0x2\n\tTIOCCBRK                          = 0x2000747a\n\tTIOCCDTR                          = 0x20007478\n\tTIOCCONS                          = 0x80047462\n\tTIOCDCDTIMESTAMP                  = 0x40107458\n\tTIOCDRAIN                         = 0x2000745e\n\tTIOCDSIMICROCODE                  = 0x20007455\n\tTIOCEXCL                          = 0x2000740d\n\tTIOCEXT                           = 0x80047460\n\tTIOCFLUSH                         = 0x80047410\n\tTIOCGDRAINWAIT                    = 0x40047456\n\tTIOCGETA                          = 0x40487413\n\tTIOCGETD                          = 0x4004741a\n\tTIOCGPGRP                         = 0x40047477\n\tTIOCGWINSZ                        = 0x40087468\n\tTIOCIXOFF                         = 0x20007480\n\tTIOCIXON                          = 0x20007481\n\tTIOCMBIC                          = 0x8004746b\n\tTIOCMBIS                          = 0x8004746c\n\tTIOCMGDTRWAIT                     = 0x4004745a\n\tTIOCMGET                          = 0x4004746a\n\tTIOCMODG                          = 0x40047403\n\tTIOCMODS                          = 0x80047404\n\tTIOCMSDTRWAIT                     = 0x8004745b\n\tTIOCMSET                          = 0x8004746d\n\tTIOCM_CAR                         = 0x40\n\tTIOCM_CD                          = 0x40\n\tTIOCM_CTS                         = 0x20\n\tTIOCM_DSR                         = 0x100\n\tTIOCM_DTR                         = 0x2\n\tTIOCM_LE                          = 0x1\n\tTIOCM_RI                          = 0x80\n\tTIOCM_RNG                         = 0x80\n\tTIOCM_RTS                         = 0x4\n\tTIOCM_SR                          = 0x10\n\tTIOCM_ST                          = 0x8\n\tTIOCNOTTY                         = 0x20007471\n\tTIOCNXCL                          = 0x2000740e\n\tTIOCOUTQ                          = 0x40047473\n\tTIOCPKT                           = 0x80047470\n\tTIOCPKT_DATA                      = 0x0\n\tTIOCPKT_DOSTOP                    = 0x20\n\tTIOCPKT_FLUSHREAD                 = 0x1\n\tTIOCPKT_FLUSHWRITE                = 0x2\n\tTIOCPKT_IOCTL                     = 0x40\n\tTIOCPKT_NOSTOP                    = 0x10\n\tTIOCPKT_START                     = 0x8\n\tTIOCPKT_STOP                      = 0x4\n\tTIOCPTYGNAME                      = 0x40807453\n\tTIOCPTYGRANT                      = 0x20007454\n\tTIOCPTYUNLK                       = 0x20007452\n\tTIOCREMOTE                        = 0x80047469\n\tTIOCSBRK                          = 0x2000747b\n\tTIOCSCONS                         = 0x20007463\n\tTIOCSCTTY                         = 0x20007461\n\tTIOCSDRAINWAIT                    = 0x80047457\n\tTIOCSDTR                          = 0x20007479\n\tTIOCSETA                          = 0x80487414\n\tTIOCSETAF                         = 0x80487416\n\tTIOCSETAW                         = 0x80487415\n\tTIOCSETD                          = 0x8004741b\n\tTIOCSIG                           = 0x2000745f\n\tTIOCSPGRP                         = 0x80047476\n\tTIOCSTART                         = 0x2000746e\n\tTIOCSTAT                          = 0x20007465\n\tTIOCSTI                           = 0x80017472\n\tTIOCSTOP                          = 0x2000746f\n\tTIOCSWINSZ                        = 0x80087467\n\tTIOCTIMESTAMP                     = 0x40107459\n\tTIOCUCNTL                         = 0x80047466\n\tTOSTOP                            = 0x400000\n\tVDISCARD                          = 0xf\n\tVDSUSP                            = 0xb\n\tVEOF                              = 0x0\n\tVEOL                              = 0x1\n\tVEOL2                             = 0x2\n\tVERASE                            = 0x3\n\tVINTR                             = 0x8\n\tVKILL                             = 0x5\n\tVLNEXT                            = 0xe\n\tVMIN                              = 0x10\n\tVM_LOADAVG                        = 0x2\n\tVM_MACHFACTOR                     = 0x4\n\tVM_MAXID                          = 0x6\n\tVM_METER                          = 0x1\n\tVM_SWAPUSAGE                      = 0x5\n\tVQUIT                             = 0x9\n\tVREPRINT                          = 0x6\n\tVSTART                            = 0xc\n\tVSTATUS                           = 0x12\n\tVSTOP                             = 0xd\n\tVSUSP                             = 0xa\n\tVT0                               = 0x0\n\tVT1                               = 0x10000\n\tVTDLY                             = 0x10000\n\tVTIME                             = 0x11\n\tVWERASE                           = 0x4\n\tWCONTINUED                        = 0x10\n\tWCOREFLAG                         = 0x80\n\tWEXITED                           = 0x4\n\tWNOHANG                           = 0x1\n\tWNOWAIT                           = 0x20\n\tWORDSIZE                          = 0x40\n\tWSTOPPED                          = 0x8\n\tWUNTRACED                         = 0x2\n\tXATTR_CREATE                      = 0x2\n\tXATTR_NODEFAULT                   = 0x10\n\tXATTR_NOFOLLOW                    = 0x1\n\tXATTR_NOSECURITY                  = 0x8\n\tXATTR_REPLACE                     = 0x4\n\tXATTR_SHOWCOMPRESSION             = 0x20\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x30)\n\tEADDRNOTAVAIL   = syscall.Errno(0x31)\n\tEAFNOSUPPORT    = syscall.Errno(0x2f)\n\tEAGAIN          = syscall.Errno(0x23)\n\tEALREADY        = syscall.Errno(0x25)\n\tEAUTH           = syscall.Errno(0x50)\n\tEBADARCH        = syscall.Errno(0x56)\n\tEBADEXEC        = syscall.Errno(0x55)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADMACHO       = syscall.Errno(0x58)\n\tEBADMSG         = syscall.Errno(0x5e)\n\tEBADRPC         = syscall.Errno(0x48)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x59)\n\tECHILD          = syscall.Errno(0xa)\n\tECONNABORTED    = syscall.Errno(0x35)\n\tECONNREFUSED    = syscall.Errno(0x3d)\n\tECONNRESET      = syscall.Errno(0x36)\n\tEDEADLK         = syscall.Errno(0xb)\n\tEDESTADDRREQ    = syscall.Errno(0x27)\n\tEDEVERR         = syscall.Errno(0x53)\n\tEDOM            = syscall.Errno(0x21)\n\tEDQUOT          = syscall.Errno(0x45)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFTYPE          = syscall.Errno(0x4f)\n\tEHOSTDOWN       = syscall.Errno(0x40)\n\tEHOSTUNREACH    = syscall.Errno(0x41)\n\tEIDRM           = syscall.Errno(0x5a)\n\tEILSEQ          = syscall.Errno(0x5c)\n\tEINPROGRESS     = syscall.Errno(0x24)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEISCONN         = syscall.Errno(0x38)\n\tEISDIR          = syscall.Errno(0x15)\n\tELAST           = syscall.Errno(0x6a)\n\tELOOP           = syscall.Errno(0x3e)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x28)\n\tEMULTIHOP       = syscall.Errno(0x5f)\n\tENAMETOOLONG    = syscall.Errno(0x3f)\n\tENEEDAUTH       = syscall.Errno(0x51)\n\tENETDOWN        = syscall.Errno(0x32)\n\tENETRESET       = syscall.Errno(0x34)\n\tENETUNREACH     = syscall.Errno(0x33)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x5d)\n\tENOBUFS         = syscall.Errno(0x37)\n\tENODATA         = syscall.Errno(0x60)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x4d)\n\tENOLINK         = syscall.Errno(0x61)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x5b)\n\tENOPOLICY       = syscall.Errno(0x67)\n\tENOPROTOOPT     = syscall.Errno(0x2a)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSR           = syscall.Errno(0x62)\n\tENOSTR          = syscall.Errno(0x63)\n\tENOSYS          = syscall.Errno(0x4e)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x39)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x42)\n\tENOTRECOVERABLE = syscall.Errno(0x68)\n\tENOTSOCK        = syscall.Errno(0x26)\n\tENOTSUP         = syscall.Errno(0x2d)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x66)\n\tEOVERFLOW       = syscall.Errno(0x54)\n\tEOWNERDEAD      = syscall.Errno(0x69)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x2e)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x43)\n\tEPROCUNAVAIL    = syscall.Errno(0x4c)\n\tEPROGMISMATCH   = syscall.Errno(0x4b)\n\tEPROGUNAVAIL    = syscall.Errno(0x4a)\n\tEPROTO          = syscall.Errno(0x64)\n\tEPROTONOSUPPORT = syscall.Errno(0x2b)\n\tEPROTOTYPE      = syscall.Errno(0x29)\n\tEPWROFF         = syscall.Errno(0x52)\n\tEQFULL          = syscall.Errno(0x6a)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x47)\n\tEROFS           = syscall.Errno(0x1e)\n\tERPCMISMATCH    = syscall.Errno(0x49)\n\tESHLIBVERS      = syscall.Errno(0x57)\n\tESHUTDOWN       = syscall.Errno(0x3a)\n\tESOCKTNOSUPPORT = syscall.Errno(0x2c)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x46)\n\tETIME           = syscall.Errno(0x65)\n\tETIMEDOUT       = syscall.Errno(0x3c)\n\tETOOMANYREFS    = syscall.Errno(0x3b)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUSERS          = syscall.Errno(0x44)\n\tEWOULDBLOCK     = syscall.Errno(0x23)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x14)\n\tSIGCONT   = syscall.Signal(0x13)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINFO   = syscall.Signal(0x1d)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x17)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTOP   = syscall.Signal(0x11)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x12)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x10)\n\tSIGUSR1   = syscall.Signal(0x1e)\n\tSIGUSR2   = syscall.Signal(0x1f)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"device not configured\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"resource busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"operation not supported by device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large\"},\n\t{35, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{36, \"EINPROGRESS\", \"operation now in progress\"},\n\t{37, \"EALREADY\", \"operation already in progress\"},\n\t{38, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{39, \"EDESTADDRREQ\", \"destination address required\"},\n\t{40, \"EMSGSIZE\", \"message too long\"},\n\t{41, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{42, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{43, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{44, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{45, \"ENOTSUP\", \"operation not supported\"},\n\t{46, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{47, \"EAFNOSUPPORT\", \"address family not supported by protocol family\"},\n\t{48, \"EADDRINUSE\", \"address already in use\"},\n\t{49, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{50, \"ENETDOWN\", \"network is down\"},\n\t{51, \"ENETUNREACH\", \"network is unreachable\"},\n\t{52, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{53, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{54, \"ECONNRESET\", \"connection reset by peer\"},\n\t{55, \"ENOBUFS\", \"no buffer space available\"},\n\t{56, \"EISCONN\", \"socket is already connected\"},\n\t{57, \"ENOTCONN\", \"socket is not connected\"},\n\t{58, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{59, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{60, \"ETIMEDOUT\", \"operation timed out\"},\n\t{61, \"ECONNREFUSED\", \"connection refused\"},\n\t{62, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{63, \"ENAMETOOLONG\", \"file name too long\"},\n\t{64, \"EHOSTDOWN\", \"host is down\"},\n\t{65, \"EHOSTUNREACH\", \"no route to host\"},\n\t{66, \"ENOTEMPTY\", \"directory not empty\"},\n\t{67, \"EPROCLIM\", \"too many processes\"},\n\t{68, \"EUSERS\", \"too many users\"},\n\t{69, \"EDQUOT\", \"disc quota exceeded\"},\n\t{70, \"ESTALE\", \"stale NFS file handle\"},\n\t{71, \"EREMOTE\", \"too many levels of remote in path\"},\n\t{72, \"EBADRPC\", \"RPC struct is bad\"},\n\t{73, \"ERPCMISMATCH\", \"RPC version wrong\"},\n\t{74, \"EPROGUNAVAIL\", \"RPC prog. not avail\"},\n\t{75, \"EPROGMISMATCH\", \"program version wrong\"},\n\t{76, \"EPROCUNAVAIL\", \"bad procedure for program\"},\n\t{77, \"ENOLCK\", \"no locks available\"},\n\t{78, \"ENOSYS\", \"function not implemented\"},\n\t{79, \"EFTYPE\", \"inappropriate file type or format\"},\n\t{80, \"EAUTH\", \"authentication error\"},\n\t{81, \"ENEEDAUTH\", \"need authenticator\"},\n\t{82, \"EPWROFF\", \"device power is off\"},\n\t{83, \"EDEVERR\", \"device error\"},\n\t{84, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n\t{85, \"EBADEXEC\", \"bad executable (or shared library)\"},\n\t{86, \"EBADARCH\", \"bad CPU type in executable\"},\n\t{87, \"ESHLIBVERS\", \"shared library version mismatch\"},\n\t{88, \"EBADMACHO\", \"malformed Mach-o file\"},\n\t{89, \"ECANCELED\", \"operation canceled\"},\n\t{90, \"EIDRM\", \"identifier removed\"},\n\t{91, \"ENOMSG\", \"no message of desired type\"},\n\t{92, \"EILSEQ\", \"illegal byte sequence\"},\n\t{93, \"ENOATTR\", \"attribute not found\"},\n\t{94, \"EBADMSG\", \"bad message\"},\n\t{95, \"EMULTIHOP\", \"EMULTIHOP (Reserved)\"},\n\t{96, \"ENODATA\", \"no message available on STREAM\"},\n\t{97, \"ENOLINK\", \"ENOLINK (Reserved)\"},\n\t{98, \"ENOSR\", \"no STREAM resources\"},\n\t{99, \"ENOSTR\", \"not a STREAM\"},\n\t{100, \"EPROTO\", \"protocol error\"},\n\t{101, \"ETIME\", \"STREAM ioctl timeout\"},\n\t{102, \"EOPNOTSUPP\", \"operation not supported on socket\"},\n\t{103, \"ENOPOLICY\", \"policy not found\"},\n\t{104, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{105, \"EOWNERDEAD\", \"previous owner died\"},\n\t{106, \"EQFULL\", \"interface output queue is full\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGABRT\", \"abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"suspended (signal)\"},\n\t{18, \"SIGTSTP\", \"suspended\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGINFO\", \"information request\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_darwin_arm.go",
    "content": "// mkerrors.sh\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build arm,darwin\n\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs -- _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                      = 0x10\n\tAF_CCITT                          = 0xa\n\tAF_CHAOS                          = 0x5\n\tAF_CNT                            = 0x15\n\tAF_COIP                           = 0x14\n\tAF_DATAKIT                        = 0x9\n\tAF_DECnet                         = 0xc\n\tAF_DLI                            = 0xd\n\tAF_E164                           = 0x1c\n\tAF_ECMA                           = 0x8\n\tAF_HYLINK                         = 0xf\n\tAF_IEEE80211                      = 0x25\n\tAF_IMPLINK                        = 0x3\n\tAF_INET                           = 0x2\n\tAF_INET6                          = 0x1e\n\tAF_IPX                            = 0x17\n\tAF_ISDN                           = 0x1c\n\tAF_ISO                            = 0x7\n\tAF_LAT                            = 0xe\n\tAF_LINK                           = 0x12\n\tAF_LOCAL                          = 0x1\n\tAF_MAX                            = 0x28\n\tAF_NATM                           = 0x1f\n\tAF_NDRV                           = 0x1b\n\tAF_NETBIOS                        = 0x21\n\tAF_NS                             = 0x6\n\tAF_OSI                            = 0x7\n\tAF_PPP                            = 0x22\n\tAF_PUP                            = 0x4\n\tAF_RESERVED_36                    = 0x24\n\tAF_ROUTE                          = 0x11\n\tAF_SIP                            = 0x18\n\tAF_SNA                            = 0xb\n\tAF_SYSTEM                         = 0x20\n\tAF_UNIX                           = 0x1\n\tAF_UNSPEC                         = 0x0\n\tAF_UTUN                           = 0x26\n\tALTWERASE                         = 0x200\n\tATTR_BIT_MAP_COUNT                = 0x5\n\tATTR_CMN_ACCESSMASK               = 0x20000\n\tATTR_CMN_ACCTIME                  = 0x1000\n\tATTR_CMN_ADDEDTIME                = 0x10000000\n\tATTR_CMN_BKUPTIME                 = 0x2000\n\tATTR_CMN_CHGTIME                  = 0x800\n\tATTR_CMN_CRTIME                   = 0x200\n\tATTR_CMN_DATA_PROTECT_FLAGS       = 0x40000000\n\tATTR_CMN_DEVID                    = 0x2\n\tATTR_CMN_DOCUMENT_ID              = 0x100000\n\tATTR_CMN_ERROR                    = 0x20000000\n\tATTR_CMN_EXTENDED_SECURITY        = 0x400000\n\tATTR_CMN_FILEID                   = 0x2000000\n\tATTR_CMN_FLAGS                    = 0x40000\n\tATTR_CMN_FNDRINFO                 = 0x4000\n\tATTR_CMN_FSID                     = 0x4\n\tATTR_CMN_FULLPATH                 = 0x8000000\n\tATTR_CMN_GEN_COUNT                = 0x80000\n\tATTR_CMN_GRPID                    = 0x10000\n\tATTR_CMN_GRPUUID                  = 0x1000000\n\tATTR_CMN_MODTIME                  = 0x400\n\tATTR_CMN_NAME                     = 0x1\n\tATTR_CMN_NAMEDATTRCOUNT           = 0x80000\n\tATTR_CMN_NAMEDATTRLIST            = 0x100000\n\tATTR_CMN_OBJID                    = 0x20\n\tATTR_CMN_OBJPERMANENTID           = 0x40\n\tATTR_CMN_OBJTAG                   = 0x10\n\tATTR_CMN_OBJTYPE                  = 0x8\n\tATTR_CMN_OWNERID                  = 0x8000\n\tATTR_CMN_PARENTID                 = 0x4000000\n\tATTR_CMN_PAROBJID                 = 0x80\n\tATTR_CMN_RETURNED_ATTRS           = 0x80000000\n\tATTR_CMN_SCRIPT                   = 0x100\n\tATTR_CMN_SETMASK                  = 0x41c7ff00\n\tATTR_CMN_USERACCESS               = 0x200000\n\tATTR_CMN_UUID                     = 0x800000\n\tATTR_CMN_VALIDMASK                = 0xffffffff\n\tATTR_CMN_VOLSETMASK               = 0x6700\n\tATTR_FILE_ALLOCSIZE               = 0x4\n\tATTR_FILE_CLUMPSIZE               = 0x10\n\tATTR_FILE_DATAALLOCSIZE           = 0x400\n\tATTR_FILE_DATAEXTENTS             = 0x800\n\tATTR_FILE_DATALENGTH              = 0x200\n\tATTR_FILE_DEVTYPE                 = 0x20\n\tATTR_FILE_FILETYPE                = 0x40\n\tATTR_FILE_FORKCOUNT               = 0x80\n\tATTR_FILE_FORKLIST                = 0x100\n\tATTR_FILE_IOBLOCKSIZE             = 0x8\n\tATTR_FILE_LINKCOUNT               = 0x1\n\tATTR_FILE_RSRCALLOCSIZE           = 0x2000\n\tATTR_FILE_RSRCEXTENTS             = 0x4000\n\tATTR_FILE_RSRCLENGTH              = 0x1000\n\tATTR_FILE_SETMASK                 = 0x20\n\tATTR_FILE_TOTALSIZE               = 0x2\n\tATTR_FILE_VALIDMASK               = 0x37ff\n\tATTR_VOL_ALLOCATIONCLUMP          = 0x40\n\tATTR_VOL_ATTRIBUTES               = 0x40000000\n\tATTR_VOL_CAPABILITIES             = 0x20000\n\tATTR_VOL_DIRCOUNT                 = 0x400\n\tATTR_VOL_ENCODINGSUSED            = 0x10000\n\tATTR_VOL_FILECOUNT                = 0x200\n\tATTR_VOL_FSTYPE                   = 0x1\n\tATTR_VOL_INFO                     = 0x80000000\n\tATTR_VOL_IOBLOCKSIZE              = 0x80\n\tATTR_VOL_MAXOBJCOUNT              = 0x800\n\tATTR_VOL_MINALLOCATION            = 0x20\n\tATTR_VOL_MOUNTEDDEVICE            = 0x8000\n\tATTR_VOL_MOUNTFLAGS               = 0x4000\n\tATTR_VOL_MOUNTPOINT               = 0x1000\n\tATTR_VOL_NAME                     = 0x2000\n\tATTR_VOL_OBJCOUNT                 = 0x100\n\tATTR_VOL_QUOTA_SIZE               = 0x10000000\n\tATTR_VOL_RESERVED_SIZE            = 0x20000000\n\tATTR_VOL_SETMASK                  = 0x80002000\n\tATTR_VOL_SIGNATURE                = 0x2\n\tATTR_VOL_SIZE                     = 0x4\n\tATTR_VOL_SPACEAVAIL               = 0x10\n\tATTR_VOL_SPACEFREE                = 0x8\n\tATTR_VOL_UUID                     = 0x40000\n\tATTR_VOL_VALIDMASK                = 0xf007ffff\n\tB0                                = 0x0\n\tB110                              = 0x6e\n\tB115200                           = 0x1c200\n\tB1200                             = 0x4b0\n\tB134                              = 0x86\n\tB14400                            = 0x3840\n\tB150                              = 0x96\n\tB1800                             = 0x708\n\tB19200                            = 0x4b00\n\tB200                              = 0xc8\n\tB230400                           = 0x38400\n\tB2400                             = 0x960\n\tB28800                            = 0x7080\n\tB300                              = 0x12c\n\tB38400                            = 0x9600\n\tB4800                             = 0x12c0\n\tB50                               = 0x32\n\tB57600                            = 0xe100\n\tB600                              = 0x258\n\tB7200                             = 0x1c20\n\tB75                               = 0x4b\n\tB76800                            = 0x12c00\n\tB9600                             = 0x2580\n\tBIOCFLUSH                         = 0x20004268\n\tBIOCGBLEN                         = 0x40044266\n\tBIOCGDLT                          = 0x4004426a\n\tBIOCGDLTLIST                      = 0xc00c4279\n\tBIOCGETIF                         = 0x4020426b\n\tBIOCGHDRCMPLT                     = 0x40044274\n\tBIOCGRSIG                         = 0x40044272\n\tBIOCGRTIMEOUT                     = 0x4010426e\n\tBIOCGSEESENT                      = 0x40044276\n\tBIOCGSTATS                        = 0x4008426f\n\tBIOCIMMEDIATE                     = 0x80044270\n\tBIOCPROMISC                       = 0x20004269\n\tBIOCSBLEN                         = 0xc0044266\n\tBIOCSDLT                          = 0x80044278\n\tBIOCSETF                          = 0x80104267\n\tBIOCSETFNR                        = 0x8010427e\n\tBIOCSETIF                         = 0x8020426c\n\tBIOCSHDRCMPLT                     = 0x80044275\n\tBIOCSRSIG                         = 0x80044273\n\tBIOCSRTIMEOUT                     = 0x8010426d\n\tBIOCSSEESENT                      = 0x80044277\n\tBIOCVERSION                       = 0x40044271\n\tBPF_A                             = 0x10\n\tBPF_ABS                           = 0x20\n\tBPF_ADD                           = 0x0\n\tBPF_ALIGNMENT                     = 0x4\n\tBPF_ALU                           = 0x4\n\tBPF_AND                           = 0x50\n\tBPF_B                             = 0x10\n\tBPF_DIV                           = 0x30\n\tBPF_H                             = 0x8\n\tBPF_IMM                           = 0x0\n\tBPF_IND                           = 0x40\n\tBPF_JA                            = 0x0\n\tBPF_JEQ                           = 0x10\n\tBPF_JGE                           = 0x30\n\tBPF_JGT                           = 0x20\n\tBPF_JMP                           = 0x5\n\tBPF_JSET                          = 0x40\n\tBPF_K                             = 0x0\n\tBPF_LD                            = 0x0\n\tBPF_LDX                           = 0x1\n\tBPF_LEN                           = 0x80\n\tBPF_LSH                           = 0x60\n\tBPF_MAJOR_VERSION                 = 0x1\n\tBPF_MAXBUFSIZE                    = 0x80000\n\tBPF_MAXINSNS                      = 0x200\n\tBPF_MEM                           = 0x60\n\tBPF_MEMWORDS                      = 0x10\n\tBPF_MINBUFSIZE                    = 0x20\n\tBPF_MINOR_VERSION                 = 0x1\n\tBPF_MISC                          = 0x7\n\tBPF_MSH                           = 0xa0\n\tBPF_MUL                           = 0x20\n\tBPF_NEG                           = 0x80\n\tBPF_OR                            = 0x40\n\tBPF_RELEASE                       = 0x30bb6\n\tBPF_RET                           = 0x6\n\tBPF_RSH                           = 0x70\n\tBPF_ST                            = 0x2\n\tBPF_STX                           = 0x3\n\tBPF_SUB                           = 0x10\n\tBPF_TAX                           = 0x0\n\tBPF_TXA                           = 0x80\n\tBPF_W                             = 0x0\n\tBPF_X                             = 0x8\n\tBRKINT                            = 0x2\n\tBS0                               = 0x0\n\tBS1                               = 0x8000\n\tBSDLY                             = 0x8000\n\tCFLUSH                            = 0xf\n\tCLOCAL                            = 0x8000\n\tCLOCK_MONOTONIC                   = 0x6\n\tCLOCK_MONOTONIC_RAW               = 0x4\n\tCLOCK_MONOTONIC_RAW_APPROX        = 0x5\n\tCLOCK_PROCESS_CPUTIME_ID          = 0xc\n\tCLOCK_REALTIME                    = 0x0\n\tCLOCK_THREAD_CPUTIME_ID           = 0x10\n\tCLOCK_UPTIME_RAW                  = 0x8\n\tCLOCK_UPTIME_RAW_APPROX           = 0x9\n\tCR0                               = 0x0\n\tCR1                               = 0x1000\n\tCR2                               = 0x2000\n\tCR3                               = 0x3000\n\tCRDLY                             = 0x3000\n\tCREAD                             = 0x800\n\tCRTSCTS                           = 0x30000\n\tCS5                               = 0x0\n\tCS6                               = 0x100\n\tCS7                               = 0x200\n\tCS8                               = 0x300\n\tCSIZE                             = 0x300\n\tCSTART                            = 0x11\n\tCSTATUS                           = 0x14\n\tCSTOP                             = 0x13\n\tCSTOPB                            = 0x400\n\tCSUSP                             = 0x1a\n\tCTL_HW                            = 0x6\n\tCTL_KERN                          = 0x1\n\tCTL_MAXNAME                       = 0xc\n\tCTL_NET                           = 0x4\n\tDLT_A429                          = 0xb8\n\tDLT_A653_ICM                      = 0xb9\n\tDLT_AIRONET_HEADER                = 0x78\n\tDLT_AOS                           = 0xde\n\tDLT_APPLE_IP_OVER_IEEE1394        = 0x8a\n\tDLT_ARCNET                        = 0x7\n\tDLT_ARCNET_LINUX                  = 0x81\n\tDLT_ATM_CLIP                      = 0x13\n\tDLT_ATM_RFC1483                   = 0xb\n\tDLT_AURORA                        = 0x7e\n\tDLT_AX25                          = 0x3\n\tDLT_AX25_KISS                     = 0xca\n\tDLT_BACNET_MS_TP                  = 0xa5\n\tDLT_BLUETOOTH_HCI_H4              = 0xbb\n\tDLT_BLUETOOTH_HCI_H4_WITH_PHDR    = 0xc9\n\tDLT_CAN20B                        = 0xbe\n\tDLT_CAN_SOCKETCAN                 = 0xe3\n\tDLT_CHAOS                         = 0x5\n\tDLT_CHDLC                         = 0x68\n\tDLT_CISCO_IOS                     = 0x76\n\tDLT_C_HDLC                        = 0x68\n\tDLT_C_HDLC_WITH_DIR               = 0xcd\n\tDLT_DBUS                          = 0xe7\n\tDLT_DECT                          = 0xdd\n\tDLT_DOCSIS                        = 0x8f\n\tDLT_DVB_CI                        = 0xeb\n\tDLT_ECONET                        = 0x73\n\tDLT_EN10MB                        = 0x1\n\tDLT_EN3MB                         = 0x2\n\tDLT_ENC                           = 0x6d\n\tDLT_ERF                           = 0xc5\n\tDLT_ERF_ETH                       = 0xaf\n\tDLT_ERF_POS                       = 0xb0\n\tDLT_FC_2                          = 0xe0\n\tDLT_FC_2_WITH_FRAME_DELIMS        = 0xe1\n\tDLT_FDDI                          = 0xa\n\tDLT_FLEXRAY                       = 0xd2\n\tDLT_FRELAY                        = 0x6b\n\tDLT_FRELAY_WITH_DIR               = 0xce\n\tDLT_GCOM_SERIAL                   = 0xad\n\tDLT_GCOM_T1E1                     = 0xac\n\tDLT_GPF_F                         = 0xab\n\tDLT_GPF_T                         = 0xaa\n\tDLT_GPRS_LLC                      = 0xa9\n\tDLT_GSMTAP_ABIS                   = 0xda\n\tDLT_GSMTAP_UM                     = 0xd9\n\tDLT_HHDLC                         = 0x79\n\tDLT_IBM_SN                        = 0x92\n\tDLT_IBM_SP                        = 0x91\n\tDLT_IEEE802                       = 0x6\n\tDLT_IEEE802_11                    = 0x69\n\tDLT_IEEE802_11_RADIO              = 0x7f\n\tDLT_IEEE802_11_RADIO_AVS          = 0xa3\n\tDLT_IEEE802_15_4                  = 0xc3\n\tDLT_IEEE802_15_4_LINUX            = 0xbf\n\tDLT_IEEE802_15_4_NOFCS            = 0xe6\n\tDLT_IEEE802_15_4_NONASK_PHY       = 0xd7\n\tDLT_IEEE802_16_MAC_CPS            = 0xbc\n\tDLT_IEEE802_16_MAC_CPS_RADIO      = 0xc1\n\tDLT_IPFILTER                      = 0x74\n\tDLT_IPMB                          = 0xc7\n\tDLT_IPMB_LINUX                    = 0xd1\n\tDLT_IPNET                         = 0xe2\n\tDLT_IPOIB                         = 0xf2\n\tDLT_IPV4                          = 0xe4\n\tDLT_IPV6                          = 0xe5\n\tDLT_IP_OVER_FC                    = 0x7a\n\tDLT_JUNIPER_ATM1                  = 0x89\n\tDLT_JUNIPER_ATM2                  = 0x87\n\tDLT_JUNIPER_ATM_CEMIC             = 0xee\n\tDLT_JUNIPER_CHDLC                 = 0xb5\n\tDLT_JUNIPER_ES                    = 0x84\n\tDLT_JUNIPER_ETHER                 = 0xb2\n\tDLT_JUNIPER_FIBRECHANNEL          = 0xea\n\tDLT_JUNIPER_FRELAY                = 0xb4\n\tDLT_JUNIPER_GGSN                  = 0x85\n\tDLT_JUNIPER_ISM                   = 0xc2\n\tDLT_JUNIPER_MFR                   = 0x86\n\tDLT_JUNIPER_MLFR                  = 0x83\n\tDLT_JUNIPER_MLPPP                 = 0x82\n\tDLT_JUNIPER_MONITOR               = 0xa4\n\tDLT_JUNIPER_PIC_PEER              = 0xae\n\tDLT_JUNIPER_PPP                   = 0xb3\n\tDLT_JUNIPER_PPPOE                 = 0xa7\n\tDLT_JUNIPER_PPPOE_ATM             = 0xa8\n\tDLT_JUNIPER_SERVICES              = 0x88\n\tDLT_JUNIPER_SRX_E2E               = 0xe9\n\tDLT_JUNIPER_ST                    = 0xc8\n\tDLT_JUNIPER_VP                    = 0xb7\n\tDLT_JUNIPER_VS                    = 0xe8\n\tDLT_LAPB_WITH_DIR                 = 0xcf\n\tDLT_LAPD                          = 0xcb\n\tDLT_LIN                           = 0xd4\n\tDLT_LINUX_EVDEV                   = 0xd8\n\tDLT_LINUX_IRDA                    = 0x90\n\tDLT_LINUX_LAPD                    = 0xb1\n\tDLT_LINUX_PPP_WITHDIRECTION       = 0xa6\n\tDLT_LINUX_SLL                     = 0x71\n\tDLT_LOOP                          = 0x6c\n\tDLT_LTALK                         = 0x72\n\tDLT_MATCHING_MAX                  = 0xf5\n\tDLT_MATCHING_MIN                  = 0x68\n\tDLT_MFR                           = 0xb6\n\tDLT_MOST                          = 0xd3\n\tDLT_MPEG_2_TS                     = 0xf3\n\tDLT_MPLS                          = 0xdb\n\tDLT_MTP2                          = 0x8c\n\tDLT_MTP2_WITH_PHDR                = 0x8b\n\tDLT_MTP3                          = 0x8d\n\tDLT_MUX27010                      = 0xec\n\tDLT_NETANALYZER                   = 0xf0\n\tDLT_NETANALYZER_TRANSPARENT       = 0xf1\n\tDLT_NFC_LLCP                      = 0xf5\n\tDLT_NFLOG                         = 0xef\n\tDLT_NG40                          = 0xf4\n\tDLT_NULL                          = 0x0\n\tDLT_PCI_EXP                       = 0x7d\n\tDLT_PFLOG                         = 0x75\n\tDLT_PFSYNC                        = 0x12\n\tDLT_PPI                           = 0xc0\n\tDLT_PPP                           = 0x9\n\tDLT_PPP_BSDOS                     = 0x10\n\tDLT_PPP_ETHER                     = 0x33\n\tDLT_PPP_PPPD                      = 0xa6\n\tDLT_PPP_SERIAL                    = 0x32\n\tDLT_PPP_WITH_DIR                  = 0xcc\n\tDLT_PPP_WITH_DIRECTION            = 0xa6\n\tDLT_PRISM_HEADER                  = 0x77\n\tDLT_PRONET                        = 0x4\n\tDLT_RAIF1                         = 0xc6\n\tDLT_RAW                           = 0xc\n\tDLT_RIO                           = 0x7c\n\tDLT_SCCP                          = 0x8e\n\tDLT_SITA                          = 0xc4\n\tDLT_SLIP                          = 0x8\n\tDLT_SLIP_BSDOS                    = 0xf\n\tDLT_STANAG_5066_D_PDU             = 0xed\n\tDLT_SUNATM                        = 0x7b\n\tDLT_SYMANTEC_FIREWALL             = 0x63\n\tDLT_TZSP                          = 0x80\n\tDLT_USB                           = 0xba\n\tDLT_USB_LINUX                     = 0xbd\n\tDLT_USB_LINUX_MMAPPED             = 0xdc\n\tDLT_USER0                         = 0x93\n\tDLT_USER1                         = 0x94\n\tDLT_USER10                        = 0x9d\n\tDLT_USER11                        = 0x9e\n\tDLT_USER12                        = 0x9f\n\tDLT_USER13                        = 0xa0\n\tDLT_USER14                        = 0xa1\n\tDLT_USER15                        = 0xa2\n\tDLT_USER2                         = 0x95\n\tDLT_USER3                         = 0x96\n\tDLT_USER4                         = 0x97\n\tDLT_USER5                         = 0x98\n\tDLT_USER6                         = 0x99\n\tDLT_USER7                         = 0x9a\n\tDLT_USER8                         = 0x9b\n\tDLT_USER9                         = 0x9c\n\tDLT_WIHART                        = 0xdf\n\tDLT_X2E_SERIAL                    = 0xd5\n\tDLT_X2E_XORAYA                    = 0xd6\n\tDT_BLK                            = 0x6\n\tDT_CHR                            = 0x2\n\tDT_DIR                            = 0x4\n\tDT_FIFO                           = 0x1\n\tDT_LNK                            = 0xa\n\tDT_REG                            = 0x8\n\tDT_SOCK                           = 0xc\n\tDT_UNKNOWN                        = 0x0\n\tDT_WHT                            = 0xe\n\tECHO                              = 0x8\n\tECHOCTL                           = 0x40\n\tECHOE                             = 0x2\n\tECHOK                             = 0x4\n\tECHOKE                            = 0x1\n\tECHONL                            = 0x10\n\tECHOPRT                           = 0x20\n\tEVFILT_AIO                        = -0x3\n\tEVFILT_EXCEPT                     = -0xf\n\tEVFILT_FS                         = -0x9\n\tEVFILT_MACHPORT                   = -0x8\n\tEVFILT_PROC                       = -0x5\n\tEVFILT_READ                       = -0x1\n\tEVFILT_SIGNAL                     = -0x6\n\tEVFILT_SYSCOUNT                   = 0xf\n\tEVFILT_THREADMARKER               = 0xf\n\tEVFILT_TIMER                      = -0x7\n\tEVFILT_USER                       = -0xa\n\tEVFILT_VM                         = -0xc\n\tEVFILT_VNODE                      = -0x4\n\tEVFILT_WRITE                      = -0x2\n\tEV_ADD                            = 0x1\n\tEV_CLEAR                          = 0x20\n\tEV_DELETE                         = 0x2\n\tEV_DISABLE                        = 0x8\n\tEV_DISPATCH                       = 0x80\n\tEV_DISPATCH2                      = 0x180\n\tEV_ENABLE                         = 0x4\n\tEV_EOF                            = 0x8000\n\tEV_ERROR                          = 0x4000\n\tEV_FLAG0                          = 0x1000\n\tEV_FLAG1                          = 0x2000\n\tEV_ONESHOT                        = 0x10\n\tEV_OOBAND                         = 0x2000\n\tEV_POLL                           = 0x1000\n\tEV_RECEIPT                        = 0x40\n\tEV_SYSFLAGS                       = 0xf000\n\tEV_UDATA_SPECIFIC                 = 0x100\n\tEV_VANISHED                       = 0x200\n\tEXTA                              = 0x4b00\n\tEXTB                              = 0x9600\n\tEXTPROC                           = 0x800\n\tFD_CLOEXEC                        = 0x1\n\tFD_SETSIZE                        = 0x400\n\tFF0                               = 0x0\n\tFF1                               = 0x4000\n\tFFDLY                             = 0x4000\n\tFLUSHO                            = 0x800000\n\tFSOPT_ATTR_CMN_EXTENDED           = 0x20\n\tFSOPT_NOFOLLOW                    = 0x1\n\tFSOPT_NOINMEMUPDATE               = 0x2\n\tFSOPT_PACK_INVAL_ATTRS            = 0x8\n\tFSOPT_REPORT_FULLSIZE             = 0x4\n\tF_ADDFILESIGS                     = 0x3d\n\tF_ADDFILESIGS_FOR_DYLD_SIM        = 0x53\n\tF_ADDFILESIGS_RETURN              = 0x61\n\tF_ADDSIGS                         = 0x3b\n\tF_ALLOCATEALL                     = 0x4\n\tF_ALLOCATECONTIG                  = 0x2\n\tF_BARRIERFSYNC                    = 0x55\n\tF_CHECK_LV                        = 0x62\n\tF_CHKCLEAN                        = 0x29\n\tF_DUPFD                           = 0x0\n\tF_DUPFD_CLOEXEC                   = 0x43\n\tF_FINDSIGS                        = 0x4e\n\tF_FLUSH_DATA                      = 0x28\n\tF_FREEZE_FS                       = 0x35\n\tF_FULLFSYNC                       = 0x33\n\tF_GETCODEDIR                      = 0x48\n\tF_GETFD                           = 0x1\n\tF_GETFL                           = 0x3\n\tF_GETLK                           = 0x7\n\tF_GETLKPID                        = 0x42\n\tF_GETNOSIGPIPE                    = 0x4a\n\tF_GETOWN                          = 0x5\n\tF_GETPATH                         = 0x32\n\tF_GETPATH_MTMINFO                 = 0x47\n\tF_GETPROTECTIONCLASS              = 0x3f\n\tF_GETPROTECTIONLEVEL              = 0x4d\n\tF_GLOBAL_NOCACHE                  = 0x37\n\tF_LOG2PHYS                        = 0x31\n\tF_LOG2PHYS_EXT                    = 0x41\n\tF_NOCACHE                         = 0x30\n\tF_NODIRECT                        = 0x3e\n\tF_OK                              = 0x0\n\tF_PATHPKG_CHECK                   = 0x34\n\tF_PEOFPOSMODE                     = 0x3\n\tF_PREALLOCATE                     = 0x2a\n\tF_PUNCHHOLE                       = 0x63\n\tF_RDADVISE                        = 0x2c\n\tF_RDAHEAD                         = 0x2d\n\tF_RDLCK                           = 0x1\n\tF_SETBACKINGSTORE                 = 0x46\n\tF_SETFD                           = 0x2\n\tF_SETFL                           = 0x4\n\tF_SETLK                           = 0x8\n\tF_SETLKW                          = 0x9\n\tF_SETLKWTIMEOUT                   = 0xa\n\tF_SETNOSIGPIPE                    = 0x49\n\tF_SETOWN                          = 0x6\n\tF_SETPROTECTIONCLASS              = 0x40\n\tF_SETSIZE                         = 0x2b\n\tF_SINGLE_WRITER                   = 0x4c\n\tF_THAW_FS                         = 0x36\n\tF_TRANSCODEKEY                    = 0x4b\n\tF_TRIM_ACTIVE_FILE                = 0x64\n\tF_UNLCK                           = 0x2\n\tF_VOLPOSMODE                      = 0x4\n\tF_WRLCK                           = 0x3\n\tHUPCL                             = 0x4000\n\tHW_MACHINE                        = 0x1\n\tICANON                            = 0x100\n\tICMP6_FILTER                      = 0x12\n\tICRNL                             = 0x100\n\tIEXTEN                            = 0x400\n\tIFF_ALLMULTI                      = 0x200\n\tIFF_ALTPHYS                       = 0x4000\n\tIFF_BROADCAST                     = 0x2\n\tIFF_DEBUG                         = 0x4\n\tIFF_LINK0                         = 0x1000\n\tIFF_LINK1                         = 0x2000\n\tIFF_LINK2                         = 0x4000\n\tIFF_LOOPBACK                      = 0x8\n\tIFF_MULTICAST                     = 0x8000\n\tIFF_NOARP                         = 0x80\n\tIFF_NOTRAILERS                    = 0x20\n\tIFF_OACTIVE                       = 0x400\n\tIFF_POINTOPOINT                   = 0x10\n\tIFF_PROMISC                       = 0x100\n\tIFF_RUNNING                       = 0x40\n\tIFF_SIMPLEX                       = 0x800\n\tIFF_UP                            = 0x1\n\tIFNAMSIZ                          = 0x10\n\tIFT_1822                          = 0x2\n\tIFT_AAL5                          = 0x31\n\tIFT_ARCNET                        = 0x23\n\tIFT_ARCNETPLUS                    = 0x24\n\tIFT_ATM                           = 0x25\n\tIFT_BRIDGE                        = 0xd1\n\tIFT_CARP                          = 0xf8\n\tIFT_CELLULAR                      = 0xff\n\tIFT_CEPT                          = 0x13\n\tIFT_DS3                           = 0x1e\n\tIFT_ENC                           = 0xf4\n\tIFT_EON                           = 0x19\n\tIFT_ETHER                         = 0x6\n\tIFT_FAITH                         = 0x38\n\tIFT_FDDI                          = 0xf\n\tIFT_FRELAY                        = 0x20\n\tIFT_FRELAYDCE                     = 0x2c\n\tIFT_GIF                           = 0x37\n\tIFT_HDH1822                       = 0x3\n\tIFT_HIPPI                         = 0x2f\n\tIFT_HSSI                          = 0x2e\n\tIFT_HY                            = 0xe\n\tIFT_IEEE1394                      = 0x90\n\tIFT_IEEE8023ADLAG                 = 0x88\n\tIFT_ISDNBASIC                     = 0x14\n\tIFT_ISDNPRIMARY                   = 0x15\n\tIFT_ISO88022LLC                   = 0x29\n\tIFT_ISO88023                      = 0x7\n\tIFT_ISO88024                      = 0x8\n\tIFT_ISO88025                      = 0x9\n\tIFT_ISO88026                      = 0xa\n\tIFT_L2VLAN                        = 0x87\n\tIFT_LAPB                          = 0x10\n\tIFT_LOCALTALK                     = 0x2a\n\tIFT_LOOP                          = 0x18\n\tIFT_MIOX25                        = 0x26\n\tIFT_MODEM                         = 0x30\n\tIFT_NSIP                          = 0x1b\n\tIFT_OTHER                         = 0x1\n\tIFT_P10                           = 0xc\n\tIFT_P80                           = 0xd\n\tIFT_PARA                          = 0x22\n\tIFT_PDP                           = 0xff\n\tIFT_PFLOG                         = 0xf5\n\tIFT_PFSYNC                        = 0xf6\n\tIFT_PKTAP                         = 0xfe\n\tIFT_PPP                           = 0x17\n\tIFT_PROPMUX                       = 0x36\n\tIFT_PROPVIRTUAL                   = 0x35\n\tIFT_PTPSERIAL                     = 0x16\n\tIFT_RS232                         = 0x21\n\tIFT_SDLC                          = 0x11\n\tIFT_SIP                           = 0x1f\n\tIFT_SLIP                          = 0x1c\n\tIFT_SMDSDXI                       = 0x2b\n\tIFT_SMDSICIP                      = 0x34\n\tIFT_SONET                         = 0x27\n\tIFT_SONETPATH                     = 0x32\n\tIFT_SONETVT                       = 0x33\n\tIFT_STARLAN                       = 0xb\n\tIFT_STF                           = 0x39\n\tIFT_T1                            = 0x12\n\tIFT_ULTRA                         = 0x1d\n\tIFT_V35                           = 0x2d\n\tIFT_X25                           = 0x5\n\tIFT_X25DDN                        = 0x4\n\tIFT_X25PLE                        = 0x28\n\tIFT_XETHER                        = 0x1a\n\tIGNBRK                            = 0x1\n\tIGNCR                             = 0x80\n\tIGNPAR                            = 0x4\n\tIMAXBEL                           = 0x2000\n\tINLCR                             = 0x40\n\tINPCK                             = 0x10\n\tIN_CLASSA_HOST                    = 0xffffff\n\tIN_CLASSA_MAX                     = 0x80\n\tIN_CLASSA_NET                     = 0xff000000\n\tIN_CLASSA_NSHIFT                  = 0x18\n\tIN_CLASSB_HOST                    = 0xffff\n\tIN_CLASSB_MAX                     = 0x10000\n\tIN_CLASSB_NET                     = 0xffff0000\n\tIN_CLASSB_NSHIFT                  = 0x10\n\tIN_CLASSC_HOST                    = 0xff\n\tIN_CLASSC_NET                     = 0xffffff00\n\tIN_CLASSC_NSHIFT                  = 0x8\n\tIN_CLASSD_HOST                    = 0xfffffff\n\tIN_CLASSD_NET                     = 0xf0000000\n\tIN_CLASSD_NSHIFT                  = 0x1c\n\tIN_LINKLOCALNETNUM                = 0xa9fe0000\n\tIN_LOOPBACKNET                    = 0x7f\n\tIPPROTO_3PC                       = 0x22\n\tIPPROTO_ADFS                      = 0x44\n\tIPPROTO_AH                        = 0x33\n\tIPPROTO_AHIP                      = 0x3d\n\tIPPROTO_APES                      = 0x63\n\tIPPROTO_ARGUS                     = 0xd\n\tIPPROTO_AX25                      = 0x5d\n\tIPPROTO_BHA                       = 0x31\n\tIPPROTO_BLT                       = 0x1e\n\tIPPROTO_BRSATMON                  = 0x4c\n\tIPPROTO_CFTP                      = 0x3e\n\tIPPROTO_CHAOS                     = 0x10\n\tIPPROTO_CMTP                      = 0x26\n\tIPPROTO_CPHB                      = 0x49\n\tIPPROTO_CPNX                      = 0x48\n\tIPPROTO_DDP                       = 0x25\n\tIPPROTO_DGP                       = 0x56\n\tIPPROTO_DIVERT                    = 0xfe\n\tIPPROTO_DONE                      = 0x101\n\tIPPROTO_DSTOPTS                   = 0x3c\n\tIPPROTO_EGP                       = 0x8\n\tIPPROTO_EMCON                     = 0xe\n\tIPPROTO_ENCAP                     = 0x62\n\tIPPROTO_EON                       = 0x50\n\tIPPROTO_ESP                       = 0x32\n\tIPPROTO_ETHERIP                   = 0x61\n\tIPPROTO_FRAGMENT                  = 0x2c\n\tIPPROTO_GGP                       = 0x3\n\tIPPROTO_GMTP                      = 0x64\n\tIPPROTO_GRE                       = 0x2f\n\tIPPROTO_HELLO                     = 0x3f\n\tIPPROTO_HMP                       = 0x14\n\tIPPROTO_HOPOPTS                   = 0x0\n\tIPPROTO_ICMP                      = 0x1\n\tIPPROTO_ICMPV6                    = 0x3a\n\tIPPROTO_IDP                       = 0x16\n\tIPPROTO_IDPR                      = 0x23\n\tIPPROTO_IDRP                      = 0x2d\n\tIPPROTO_IGMP                      = 0x2\n\tIPPROTO_IGP                       = 0x55\n\tIPPROTO_IGRP                      = 0x58\n\tIPPROTO_IL                        = 0x28\n\tIPPROTO_INLSP                     = 0x34\n\tIPPROTO_INP                       = 0x20\n\tIPPROTO_IP                        = 0x0\n\tIPPROTO_IPCOMP                    = 0x6c\n\tIPPROTO_IPCV                      = 0x47\n\tIPPROTO_IPEIP                     = 0x5e\n\tIPPROTO_IPIP                      = 0x4\n\tIPPROTO_IPPC                      = 0x43\n\tIPPROTO_IPV4                      = 0x4\n\tIPPROTO_IPV6                      = 0x29\n\tIPPROTO_IRTP                      = 0x1c\n\tIPPROTO_KRYPTOLAN                 = 0x41\n\tIPPROTO_LARP                      = 0x5b\n\tIPPROTO_LEAF1                     = 0x19\n\tIPPROTO_LEAF2                     = 0x1a\n\tIPPROTO_MAX                       = 0x100\n\tIPPROTO_MAXID                     = 0x34\n\tIPPROTO_MEAS                      = 0x13\n\tIPPROTO_MHRP                      = 0x30\n\tIPPROTO_MICP                      = 0x5f\n\tIPPROTO_MTP                       = 0x5c\n\tIPPROTO_MUX                       = 0x12\n\tIPPROTO_ND                        = 0x4d\n\tIPPROTO_NHRP                      = 0x36\n\tIPPROTO_NONE                      = 0x3b\n\tIPPROTO_NSP                       = 0x1f\n\tIPPROTO_NVPII                     = 0xb\n\tIPPROTO_OSPFIGP                   = 0x59\n\tIPPROTO_PGM                       = 0x71\n\tIPPROTO_PIGP                      = 0x9\n\tIPPROTO_PIM                       = 0x67\n\tIPPROTO_PRM                       = 0x15\n\tIPPROTO_PUP                       = 0xc\n\tIPPROTO_PVP                       = 0x4b\n\tIPPROTO_RAW                       = 0xff\n\tIPPROTO_RCCMON                    = 0xa\n\tIPPROTO_RDP                       = 0x1b\n\tIPPROTO_ROUTING                   = 0x2b\n\tIPPROTO_RSVP                      = 0x2e\n\tIPPROTO_RVD                       = 0x42\n\tIPPROTO_SATEXPAK                  = 0x40\n\tIPPROTO_SATMON                    = 0x45\n\tIPPROTO_SCCSP                     = 0x60\n\tIPPROTO_SCTP                      = 0x84\n\tIPPROTO_SDRP                      = 0x2a\n\tIPPROTO_SEP                       = 0x21\n\tIPPROTO_SRPC                      = 0x5a\n\tIPPROTO_ST                        = 0x7\n\tIPPROTO_SVMTP                     = 0x52\n\tIPPROTO_SWIPE                     = 0x35\n\tIPPROTO_TCF                       = 0x57\n\tIPPROTO_TCP                       = 0x6\n\tIPPROTO_TP                        = 0x1d\n\tIPPROTO_TPXX                      = 0x27\n\tIPPROTO_TRUNK1                    = 0x17\n\tIPPROTO_TRUNK2                    = 0x18\n\tIPPROTO_TTP                       = 0x54\n\tIPPROTO_UDP                       = 0x11\n\tIPPROTO_VINES                     = 0x53\n\tIPPROTO_VISA                      = 0x46\n\tIPPROTO_VMTP                      = 0x51\n\tIPPROTO_WBEXPAK                   = 0x4f\n\tIPPROTO_WBMON                     = 0x4e\n\tIPPROTO_WSN                       = 0x4a\n\tIPPROTO_XNET                      = 0xf\n\tIPPROTO_XTP                       = 0x24\n\tIPV6_2292DSTOPTS                  = 0x17\n\tIPV6_2292HOPLIMIT                 = 0x14\n\tIPV6_2292HOPOPTS                  = 0x16\n\tIPV6_2292NEXTHOP                  = 0x15\n\tIPV6_2292PKTINFO                  = 0x13\n\tIPV6_2292PKTOPTIONS               = 0x19\n\tIPV6_2292RTHDR                    = 0x18\n\tIPV6_BINDV6ONLY                   = 0x1b\n\tIPV6_BOUND_IF                     = 0x7d\n\tIPV6_CHECKSUM                     = 0x1a\n\tIPV6_DEFAULT_MULTICAST_HOPS       = 0x1\n\tIPV6_DEFAULT_MULTICAST_LOOP       = 0x1\n\tIPV6_DEFHLIM                      = 0x40\n\tIPV6_FAITH                        = 0x1d\n\tIPV6_FLOWINFO_MASK                = 0xffffff0f\n\tIPV6_FLOWLABEL_MASK               = 0xffff0f00\n\tIPV6_FLOW_ECN_MASK                = 0x300\n\tIPV6_FRAGTTL                      = 0x3c\n\tIPV6_FW_ADD                       = 0x1e\n\tIPV6_FW_DEL                       = 0x1f\n\tIPV6_FW_FLUSH                     = 0x20\n\tIPV6_FW_GET                       = 0x22\n\tIPV6_FW_ZERO                      = 0x21\n\tIPV6_HLIMDEC                      = 0x1\n\tIPV6_IPSEC_POLICY                 = 0x1c\n\tIPV6_JOIN_GROUP                   = 0xc\n\tIPV6_LEAVE_GROUP                  = 0xd\n\tIPV6_MAXHLIM                      = 0xff\n\tIPV6_MAXOPTHDR                    = 0x800\n\tIPV6_MAXPACKET                    = 0xffff\n\tIPV6_MAX_GROUP_SRC_FILTER         = 0x200\n\tIPV6_MAX_MEMBERSHIPS              = 0xfff\n\tIPV6_MAX_SOCK_SRC_FILTER          = 0x80\n\tIPV6_MIN_MEMBERSHIPS              = 0x1f\n\tIPV6_MMTU                         = 0x500\n\tIPV6_MULTICAST_HOPS               = 0xa\n\tIPV6_MULTICAST_IF                 = 0x9\n\tIPV6_MULTICAST_LOOP               = 0xb\n\tIPV6_PORTRANGE                    = 0xe\n\tIPV6_PORTRANGE_DEFAULT            = 0x0\n\tIPV6_PORTRANGE_HIGH               = 0x1\n\tIPV6_PORTRANGE_LOW                = 0x2\n\tIPV6_RECVTCLASS                   = 0x23\n\tIPV6_RTHDR_LOOSE                  = 0x0\n\tIPV6_RTHDR_STRICT                 = 0x1\n\tIPV6_RTHDR_TYPE_0                 = 0x0\n\tIPV6_SOCKOPT_RESERVED1            = 0x3\n\tIPV6_TCLASS                       = 0x24\n\tIPV6_UNICAST_HOPS                 = 0x4\n\tIPV6_V6ONLY                       = 0x1b\n\tIPV6_VERSION                      = 0x60\n\tIPV6_VERSION_MASK                 = 0xf0\n\tIP_ADD_MEMBERSHIP                 = 0xc\n\tIP_ADD_SOURCE_MEMBERSHIP          = 0x46\n\tIP_BLOCK_SOURCE                   = 0x48\n\tIP_BOUND_IF                       = 0x19\n\tIP_DEFAULT_MULTICAST_LOOP         = 0x1\n\tIP_DEFAULT_MULTICAST_TTL          = 0x1\n\tIP_DF                             = 0x4000\n\tIP_DROP_MEMBERSHIP                = 0xd\n\tIP_DROP_SOURCE_MEMBERSHIP         = 0x47\n\tIP_DUMMYNET_CONFIGURE             = 0x3c\n\tIP_DUMMYNET_DEL                   = 0x3d\n\tIP_DUMMYNET_FLUSH                 = 0x3e\n\tIP_DUMMYNET_GET                   = 0x40\n\tIP_FAITH                          = 0x16\n\tIP_FW_ADD                         = 0x28\n\tIP_FW_DEL                         = 0x29\n\tIP_FW_FLUSH                       = 0x2a\n\tIP_FW_GET                         = 0x2c\n\tIP_FW_RESETLOG                    = 0x2d\n\tIP_FW_ZERO                        = 0x2b\n\tIP_HDRINCL                        = 0x2\n\tIP_IPSEC_POLICY                   = 0x15\n\tIP_MAXPACKET                      = 0xffff\n\tIP_MAX_GROUP_SRC_FILTER           = 0x200\n\tIP_MAX_MEMBERSHIPS                = 0xfff\n\tIP_MAX_SOCK_MUTE_FILTER           = 0x80\n\tIP_MAX_SOCK_SRC_FILTER            = 0x80\n\tIP_MF                             = 0x2000\n\tIP_MIN_MEMBERSHIPS                = 0x1f\n\tIP_MSFILTER                       = 0x4a\n\tIP_MSS                            = 0x240\n\tIP_MULTICAST_IF                   = 0x9\n\tIP_MULTICAST_IFINDEX              = 0x42\n\tIP_MULTICAST_LOOP                 = 0xb\n\tIP_MULTICAST_TTL                  = 0xa\n\tIP_MULTICAST_VIF                  = 0xe\n\tIP_NAT__XXX                       = 0x37\n\tIP_OFFMASK                        = 0x1fff\n\tIP_OLD_FW_ADD                     = 0x32\n\tIP_OLD_FW_DEL                     = 0x33\n\tIP_OLD_FW_FLUSH                   = 0x34\n\tIP_OLD_FW_GET                     = 0x36\n\tIP_OLD_FW_RESETLOG                = 0x38\n\tIP_OLD_FW_ZERO                    = 0x35\n\tIP_OPTIONS                        = 0x1\n\tIP_PKTINFO                        = 0x1a\n\tIP_PORTRANGE                      = 0x13\n\tIP_PORTRANGE_DEFAULT              = 0x0\n\tIP_PORTRANGE_HIGH                 = 0x1\n\tIP_PORTRANGE_LOW                  = 0x2\n\tIP_RECVDSTADDR                    = 0x7\n\tIP_RECVIF                         = 0x14\n\tIP_RECVOPTS                       = 0x5\n\tIP_RECVPKTINFO                    = 0x1a\n\tIP_RECVRETOPTS                    = 0x6\n\tIP_RECVTOS                        = 0x1b\n\tIP_RECVTTL                        = 0x18\n\tIP_RETOPTS                        = 0x8\n\tIP_RF                             = 0x8000\n\tIP_RSVP_OFF                       = 0x10\n\tIP_RSVP_ON                        = 0xf\n\tIP_RSVP_VIF_OFF                   = 0x12\n\tIP_RSVP_VIF_ON                    = 0x11\n\tIP_STRIPHDR                       = 0x17\n\tIP_TOS                            = 0x3\n\tIP_TRAFFIC_MGT_BACKGROUND         = 0x41\n\tIP_TTL                            = 0x4\n\tIP_UNBLOCK_SOURCE                 = 0x49\n\tISIG                              = 0x80\n\tISTRIP                            = 0x20\n\tIUTF8                             = 0x4000\n\tIXANY                             = 0x800\n\tIXOFF                             = 0x400\n\tIXON                              = 0x200\n\tKERN_HOSTNAME                     = 0xa\n\tKERN_OSRELEASE                    = 0x2\n\tKERN_OSTYPE                       = 0x1\n\tKERN_VERSION                      = 0x4\n\tLOCK_EX                           = 0x2\n\tLOCK_NB                           = 0x4\n\tLOCK_SH                           = 0x1\n\tLOCK_UN                           = 0x8\n\tMADV_CAN_REUSE                    = 0x9\n\tMADV_DONTNEED                     = 0x4\n\tMADV_FREE                         = 0x5\n\tMADV_FREE_REUSABLE                = 0x7\n\tMADV_FREE_REUSE                   = 0x8\n\tMADV_NORMAL                       = 0x0\n\tMADV_PAGEOUT                      = 0xa\n\tMADV_RANDOM                       = 0x1\n\tMADV_SEQUENTIAL                   = 0x2\n\tMADV_WILLNEED                     = 0x3\n\tMADV_ZERO_WIRED_PAGES             = 0x6\n\tMAP_ANON                          = 0x1000\n\tMAP_ANONYMOUS                     = 0x1000\n\tMAP_COPY                          = 0x2\n\tMAP_FILE                          = 0x0\n\tMAP_FIXED                         = 0x10\n\tMAP_HASSEMAPHORE                  = 0x200\n\tMAP_JIT                           = 0x800\n\tMAP_NOCACHE                       = 0x400\n\tMAP_NOEXTEND                      = 0x100\n\tMAP_NORESERVE                     = 0x40\n\tMAP_PRIVATE                       = 0x2\n\tMAP_RENAME                        = 0x20\n\tMAP_RESERVED0080                  = 0x80\n\tMAP_RESILIENT_CODESIGN            = 0x2000\n\tMAP_RESILIENT_MEDIA               = 0x4000\n\tMAP_SHARED                        = 0x1\n\tMCL_CURRENT                       = 0x1\n\tMCL_FUTURE                        = 0x2\n\tMNT_ASYNC                         = 0x40\n\tMNT_AUTOMOUNTED                   = 0x400000\n\tMNT_CMDFLAGS                      = 0xf0000\n\tMNT_CPROTECT                      = 0x80\n\tMNT_DEFWRITE                      = 0x2000000\n\tMNT_DONTBROWSE                    = 0x100000\n\tMNT_DOVOLFS                       = 0x8000\n\tMNT_DWAIT                         = 0x4\n\tMNT_EXPORTED                      = 0x100\n\tMNT_FORCE                         = 0x80000\n\tMNT_IGNORE_OWNERSHIP              = 0x200000\n\tMNT_JOURNALED                     = 0x800000\n\tMNT_LOCAL                         = 0x1000\n\tMNT_MULTILABEL                    = 0x4000000\n\tMNT_NOATIME                       = 0x10000000\n\tMNT_NOBLOCK                       = 0x20000\n\tMNT_NODEV                         = 0x10\n\tMNT_NOEXEC                        = 0x4\n\tMNT_NOSUID                        = 0x8\n\tMNT_NOUSERXATTR                   = 0x1000000\n\tMNT_NOWAIT                        = 0x2\n\tMNT_QUARANTINE                    = 0x400\n\tMNT_QUOTA                         = 0x2000\n\tMNT_RDONLY                        = 0x1\n\tMNT_RELOAD                        = 0x40000\n\tMNT_ROOTFS                        = 0x4000\n\tMNT_SYNCHRONOUS                   = 0x2\n\tMNT_UNION                         = 0x20\n\tMNT_UNKNOWNPERMISSIONS            = 0x200000\n\tMNT_UPDATE                        = 0x10000\n\tMNT_VISFLAGMASK                   = 0x17f0f5ff\n\tMNT_WAIT                          = 0x1\n\tMSG_CTRUNC                        = 0x20\n\tMSG_DONTROUTE                     = 0x4\n\tMSG_DONTWAIT                      = 0x80\n\tMSG_EOF                           = 0x100\n\tMSG_EOR                           = 0x8\n\tMSG_FLUSH                         = 0x400\n\tMSG_HAVEMORE                      = 0x2000\n\tMSG_HOLD                          = 0x800\n\tMSG_NEEDSA                        = 0x10000\n\tMSG_OOB                           = 0x1\n\tMSG_PEEK                          = 0x2\n\tMSG_RCVMORE                       = 0x4000\n\tMSG_SEND                          = 0x1000\n\tMSG_TRUNC                         = 0x10\n\tMSG_WAITALL                       = 0x40\n\tMSG_WAITSTREAM                    = 0x200\n\tMS_ASYNC                          = 0x1\n\tMS_DEACTIVATE                     = 0x8\n\tMS_INVALIDATE                     = 0x2\n\tMS_KILLPAGES                      = 0x4\n\tMS_SYNC                           = 0x10\n\tNAME_MAX                          = 0xff\n\tNET_RT_DUMP                       = 0x1\n\tNET_RT_DUMP2                      = 0x7\n\tNET_RT_FLAGS                      = 0x2\n\tNET_RT_IFLIST                     = 0x3\n\tNET_RT_IFLIST2                    = 0x6\n\tNET_RT_MAXID                      = 0xa\n\tNET_RT_STAT                       = 0x4\n\tNET_RT_TRASH                      = 0x5\n\tNL0                               = 0x0\n\tNL1                               = 0x100\n\tNL2                               = 0x200\n\tNL3                               = 0x300\n\tNLDLY                             = 0x300\n\tNOFLSH                            = 0x80000000\n\tNOKERNINFO                        = 0x2000000\n\tNOTE_ABSOLUTE                     = 0x8\n\tNOTE_ATTRIB                       = 0x8\n\tNOTE_BACKGROUND                   = 0x40\n\tNOTE_CHILD                        = 0x4\n\tNOTE_CRITICAL                     = 0x20\n\tNOTE_DELETE                       = 0x1\n\tNOTE_EXEC                         = 0x20000000\n\tNOTE_EXIT                         = 0x80000000\n\tNOTE_EXITSTATUS                   = 0x4000000\n\tNOTE_EXIT_CSERROR                 = 0x40000\n\tNOTE_EXIT_DECRYPTFAIL             = 0x10000\n\tNOTE_EXIT_DETAIL                  = 0x2000000\n\tNOTE_EXIT_DETAIL_MASK             = 0x70000\n\tNOTE_EXIT_MEMORY                  = 0x20000\n\tNOTE_EXIT_REPARENTED              = 0x80000\n\tNOTE_EXTEND                       = 0x4\n\tNOTE_FFAND                        = 0x40000000\n\tNOTE_FFCOPY                       = 0xc0000000\n\tNOTE_FFCTRLMASK                   = 0xc0000000\n\tNOTE_FFLAGSMASK                   = 0xffffff\n\tNOTE_FFNOP                        = 0x0\n\tNOTE_FFOR                         = 0x80000000\n\tNOTE_FORK                         = 0x40000000\n\tNOTE_FUNLOCK                      = 0x100\n\tNOTE_LEEWAY                       = 0x10\n\tNOTE_LINK                         = 0x10\n\tNOTE_LOWAT                        = 0x1\n\tNOTE_MACH_CONTINUOUS_TIME         = 0x80\n\tNOTE_NONE                         = 0x80\n\tNOTE_NSECONDS                     = 0x4\n\tNOTE_OOB                          = 0x2\n\tNOTE_PCTRLMASK                    = -0x100000\n\tNOTE_PDATAMASK                    = 0xfffff\n\tNOTE_REAP                         = 0x10000000\n\tNOTE_RENAME                       = 0x20\n\tNOTE_REVOKE                       = 0x40\n\tNOTE_SECONDS                      = 0x1\n\tNOTE_SIGNAL                       = 0x8000000\n\tNOTE_TRACK                        = 0x1\n\tNOTE_TRACKERR                     = 0x2\n\tNOTE_TRIGGER                      = 0x1000000\n\tNOTE_USECONDS                     = 0x2\n\tNOTE_VM_ERROR                     = 0x10000000\n\tNOTE_VM_PRESSURE                  = 0x80000000\n\tNOTE_VM_PRESSURE_SUDDEN_TERMINATE = 0x20000000\n\tNOTE_VM_PRESSURE_TERMINATE        = 0x40000000\n\tNOTE_WRITE                        = 0x2\n\tOCRNL                             = 0x10\n\tOFDEL                             = 0x20000\n\tOFILL                             = 0x80\n\tONLCR                             = 0x2\n\tONLRET                            = 0x40\n\tONOCR                             = 0x20\n\tONOEOT                            = 0x8\n\tOPOST                             = 0x1\n\tOXTABS                            = 0x4\n\tO_ACCMODE                         = 0x3\n\tO_ALERT                           = 0x20000000\n\tO_APPEND                          = 0x8\n\tO_ASYNC                           = 0x40\n\tO_CLOEXEC                         = 0x1000000\n\tO_CREAT                           = 0x200\n\tO_DIRECTORY                       = 0x100000\n\tO_DP_GETRAWENCRYPTED              = 0x1\n\tO_DP_GETRAWUNENCRYPTED            = 0x2\n\tO_DSYNC                           = 0x400000\n\tO_EVTONLY                         = 0x8000\n\tO_EXCL                            = 0x800\n\tO_EXLOCK                          = 0x20\n\tO_FSYNC                           = 0x80\n\tO_NDELAY                          = 0x4\n\tO_NOCTTY                          = 0x20000\n\tO_NOFOLLOW                        = 0x100\n\tO_NONBLOCK                        = 0x4\n\tO_POPUP                           = 0x80000000\n\tO_RDONLY                          = 0x0\n\tO_RDWR                            = 0x2\n\tO_SHLOCK                          = 0x10\n\tO_SYMLINK                         = 0x200000\n\tO_SYNC                            = 0x80\n\tO_TRUNC                           = 0x400\n\tO_WRONLY                          = 0x1\n\tPARENB                            = 0x1000\n\tPARMRK                            = 0x8\n\tPARODD                            = 0x2000\n\tPENDIN                            = 0x20000000\n\tPRIO_PGRP                         = 0x1\n\tPRIO_PROCESS                      = 0x0\n\tPRIO_USER                         = 0x2\n\tPROT_EXEC                         = 0x4\n\tPROT_NONE                         = 0x0\n\tPROT_READ                         = 0x1\n\tPROT_WRITE                        = 0x2\n\tPT_ATTACH                         = 0xa\n\tPT_ATTACHEXC                      = 0xe\n\tPT_CONTINUE                       = 0x7\n\tPT_DENY_ATTACH                    = 0x1f\n\tPT_DETACH                         = 0xb\n\tPT_FIRSTMACH                      = 0x20\n\tPT_FORCEQUOTA                     = 0x1e\n\tPT_KILL                           = 0x8\n\tPT_READ_D                         = 0x2\n\tPT_READ_I                         = 0x1\n\tPT_READ_U                         = 0x3\n\tPT_SIGEXC                         = 0xc\n\tPT_STEP                           = 0x9\n\tPT_THUPDATE                       = 0xd\n\tPT_TRACE_ME                       = 0x0\n\tPT_WRITE_D                        = 0x5\n\tPT_WRITE_I                        = 0x4\n\tPT_WRITE_U                        = 0x6\n\tRLIMIT_AS                         = 0x5\n\tRLIMIT_CORE                       = 0x4\n\tRLIMIT_CPU                        = 0x0\n\tRLIMIT_CPU_USAGE_MONITOR          = 0x2\n\tRLIMIT_DATA                       = 0x2\n\tRLIMIT_FSIZE                      = 0x1\n\tRLIMIT_MEMLOCK                    = 0x6\n\tRLIMIT_NOFILE                     = 0x8\n\tRLIMIT_NPROC                      = 0x7\n\tRLIMIT_RSS                        = 0x5\n\tRLIMIT_STACK                      = 0x3\n\tRLIM_INFINITY                     = 0x7fffffffffffffff\n\tRTAX_AUTHOR                       = 0x6\n\tRTAX_BRD                          = 0x7\n\tRTAX_DST                          = 0x0\n\tRTAX_GATEWAY                      = 0x1\n\tRTAX_GENMASK                      = 0x3\n\tRTAX_IFA                          = 0x5\n\tRTAX_IFP                          = 0x4\n\tRTAX_MAX                          = 0x8\n\tRTAX_NETMASK                      = 0x2\n\tRTA_AUTHOR                        = 0x40\n\tRTA_BRD                           = 0x80\n\tRTA_DST                           = 0x1\n\tRTA_GATEWAY                       = 0x2\n\tRTA_GENMASK                       = 0x8\n\tRTA_IFA                           = 0x20\n\tRTA_IFP                           = 0x10\n\tRTA_NETMASK                       = 0x4\n\tRTF_BLACKHOLE                     = 0x1000\n\tRTF_BROADCAST                     = 0x400000\n\tRTF_CLONING                       = 0x100\n\tRTF_CONDEMNED                     = 0x2000000\n\tRTF_DELCLONE                      = 0x80\n\tRTF_DONE                          = 0x40\n\tRTF_DYNAMIC                       = 0x10\n\tRTF_GATEWAY                       = 0x2\n\tRTF_HOST                          = 0x4\n\tRTF_IFREF                         = 0x4000000\n\tRTF_IFSCOPE                       = 0x1000000\n\tRTF_LLINFO                        = 0x400\n\tRTF_LOCAL                         = 0x200000\n\tRTF_MODIFIED                      = 0x20\n\tRTF_MULTICAST                     = 0x800000\n\tRTF_NOIFREF                       = 0x2000\n\tRTF_PINNED                        = 0x100000\n\tRTF_PRCLONING                     = 0x10000\n\tRTF_PROTO1                        = 0x8000\n\tRTF_PROTO2                        = 0x4000\n\tRTF_PROTO3                        = 0x40000\n\tRTF_PROXY                         = 0x8000000\n\tRTF_REJECT                        = 0x8\n\tRTF_ROUTER                        = 0x10000000\n\tRTF_STATIC                        = 0x800\n\tRTF_UP                            = 0x1\n\tRTF_WASCLONED                     = 0x20000\n\tRTF_XRESOLVE                      = 0x200\n\tRTM_ADD                           = 0x1\n\tRTM_CHANGE                        = 0x3\n\tRTM_DELADDR                       = 0xd\n\tRTM_DELETE                        = 0x2\n\tRTM_DELMADDR                      = 0x10\n\tRTM_GET                           = 0x4\n\tRTM_GET2                          = 0x14\n\tRTM_IFINFO                        = 0xe\n\tRTM_IFINFO2                       = 0x12\n\tRTM_LOCK                          = 0x8\n\tRTM_LOSING                        = 0x5\n\tRTM_MISS                          = 0x7\n\tRTM_NEWADDR                       = 0xc\n\tRTM_NEWMADDR                      = 0xf\n\tRTM_NEWMADDR2                     = 0x13\n\tRTM_OLDADD                        = 0x9\n\tRTM_OLDDEL                        = 0xa\n\tRTM_REDIRECT                      = 0x6\n\tRTM_RESOLVE                       = 0xb\n\tRTM_RTTUNIT                       = 0xf4240\n\tRTM_VERSION                       = 0x5\n\tRTV_EXPIRE                        = 0x4\n\tRTV_HOPCOUNT                      = 0x2\n\tRTV_MTU                           = 0x1\n\tRTV_RPIPE                         = 0x8\n\tRTV_RTT                           = 0x40\n\tRTV_RTTVAR                        = 0x80\n\tRTV_SPIPE                         = 0x10\n\tRTV_SSTHRESH                      = 0x20\n\tRUSAGE_CHILDREN                   = -0x1\n\tRUSAGE_SELF                       = 0x0\n\tSCM_CREDS                         = 0x3\n\tSCM_RIGHTS                        = 0x1\n\tSCM_TIMESTAMP                     = 0x2\n\tSCM_TIMESTAMP_MONOTONIC           = 0x4\n\tSHUT_RD                           = 0x0\n\tSHUT_RDWR                         = 0x2\n\tSHUT_WR                           = 0x1\n\tSIOCADDMULTI                      = 0x80206931\n\tSIOCAIFADDR                       = 0x8040691a\n\tSIOCARPIPLL                       = 0xc0206928\n\tSIOCATMARK                        = 0x40047307\n\tSIOCAUTOADDR                      = 0xc0206926\n\tSIOCAUTONETMASK                   = 0x80206927\n\tSIOCDELMULTI                      = 0x80206932\n\tSIOCDIFADDR                       = 0x80206919\n\tSIOCDIFPHYADDR                    = 0x80206941\n\tSIOCGDRVSPEC                      = 0xc028697b\n\tSIOCGETVLAN                       = 0xc020697f\n\tSIOCGHIWAT                        = 0x40047301\n\tSIOCGIFADDR                       = 0xc0206921\n\tSIOCGIFALTMTU                     = 0xc0206948\n\tSIOCGIFASYNCMAP                   = 0xc020697c\n\tSIOCGIFBOND                       = 0xc0206947\n\tSIOCGIFBRDADDR                    = 0xc0206923\n\tSIOCGIFCAP                        = 0xc020695b\n\tSIOCGIFCONF                       = 0xc00c6924\n\tSIOCGIFDEVMTU                     = 0xc0206944\n\tSIOCGIFDSTADDR                    = 0xc0206922\n\tSIOCGIFFLAGS                      = 0xc0206911\n\tSIOCGIFGENERIC                    = 0xc020693a\n\tSIOCGIFKPI                        = 0xc0206987\n\tSIOCGIFMAC                        = 0xc0206982\n\tSIOCGIFMEDIA                      = 0xc02c6938\n\tSIOCGIFMETRIC                     = 0xc0206917\n\tSIOCGIFMTU                        = 0xc0206933\n\tSIOCGIFNETMASK                    = 0xc0206925\n\tSIOCGIFPDSTADDR                   = 0xc0206940\n\tSIOCGIFPHYS                       = 0xc0206935\n\tSIOCGIFPSRCADDR                   = 0xc020693f\n\tSIOCGIFSTATUS                     = 0xc331693d\n\tSIOCGIFVLAN                       = 0xc020697f\n\tSIOCGIFWAKEFLAGS                  = 0xc0206988\n\tSIOCGLOWAT                        = 0x40047303\n\tSIOCGPGRP                         = 0x40047309\n\tSIOCIFCREATE                      = 0xc0206978\n\tSIOCIFCREATE2                     = 0xc020697a\n\tSIOCIFDESTROY                     = 0x80206979\n\tSIOCIFGCLONERS                    = 0xc0106981\n\tSIOCRSLVMULTI                     = 0xc010693b\n\tSIOCSDRVSPEC                      = 0x8028697b\n\tSIOCSETVLAN                       = 0x8020697e\n\tSIOCSHIWAT                        = 0x80047300\n\tSIOCSIFADDR                       = 0x8020690c\n\tSIOCSIFALTMTU                     = 0x80206945\n\tSIOCSIFASYNCMAP                   = 0x8020697d\n\tSIOCSIFBOND                       = 0x80206946\n\tSIOCSIFBRDADDR                    = 0x80206913\n\tSIOCSIFCAP                        = 0x8020695a\n\tSIOCSIFDSTADDR                    = 0x8020690e\n\tSIOCSIFFLAGS                      = 0x80206910\n\tSIOCSIFGENERIC                    = 0x80206939\n\tSIOCSIFKPI                        = 0x80206986\n\tSIOCSIFLLADDR                     = 0x8020693c\n\tSIOCSIFMAC                        = 0x80206983\n\tSIOCSIFMEDIA                      = 0xc0206937\n\tSIOCSIFMETRIC                     = 0x80206918\n\tSIOCSIFMTU                        = 0x80206934\n\tSIOCSIFNETMASK                    = 0x80206916\n\tSIOCSIFPHYADDR                    = 0x8040693e\n\tSIOCSIFPHYS                       = 0x80206936\n\tSIOCSIFVLAN                       = 0x8020697e\n\tSIOCSLOWAT                        = 0x80047302\n\tSIOCSPGRP                         = 0x80047308\n\tSOCK_DGRAM                        = 0x2\n\tSOCK_MAXADDRLEN                   = 0xff\n\tSOCK_RAW                          = 0x3\n\tSOCK_RDM                          = 0x4\n\tSOCK_SEQPACKET                    = 0x5\n\tSOCK_STREAM                       = 0x1\n\tSOL_SOCKET                        = 0xffff\n\tSOMAXCONN                         = 0x80\n\tSO_ACCEPTCONN                     = 0x2\n\tSO_BROADCAST                      = 0x20\n\tSO_DEBUG                          = 0x1\n\tSO_DONTROUTE                      = 0x10\n\tSO_DONTTRUNC                      = 0x2000\n\tSO_ERROR                          = 0x1007\n\tSO_KEEPALIVE                      = 0x8\n\tSO_LABEL                          = 0x1010\n\tSO_LINGER                         = 0x80\n\tSO_LINGER_SEC                     = 0x1080\n\tSO_NETSVC_MARKING_LEVEL           = 0x1119\n\tSO_NET_SERVICE_TYPE               = 0x1116\n\tSO_NKE                            = 0x1021\n\tSO_NOADDRERR                      = 0x1023\n\tSO_NOSIGPIPE                      = 0x1022\n\tSO_NOTIFYCONFLICT                 = 0x1026\n\tSO_NP_EXTENSIONS                  = 0x1083\n\tSO_NREAD                          = 0x1020\n\tSO_NUMRCVPKT                      = 0x1112\n\tSO_NWRITE                         = 0x1024\n\tSO_OOBINLINE                      = 0x100\n\tSO_PEERLABEL                      = 0x1011\n\tSO_RANDOMPORT                     = 0x1082\n\tSO_RCVBUF                         = 0x1002\n\tSO_RCVLOWAT                       = 0x1004\n\tSO_RCVTIMEO                       = 0x1006\n\tSO_REUSEADDR                      = 0x4\n\tSO_REUSEPORT                      = 0x200\n\tSO_REUSESHAREUID                  = 0x1025\n\tSO_SNDBUF                         = 0x1001\n\tSO_SNDLOWAT                       = 0x1003\n\tSO_SNDTIMEO                       = 0x1005\n\tSO_TIMESTAMP                      = 0x400\n\tSO_TIMESTAMP_MONOTONIC            = 0x800\n\tSO_TYPE                           = 0x1008\n\tSO_UPCALLCLOSEWAIT                = 0x1027\n\tSO_USELOOPBACK                    = 0x40\n\tSO_WANTMORE                       = 0x4000\n\tSO_WANTOOBFLAG                    = 0x8000\n\tS_IEXEC                           = 0x40\n\tS_IFBLK                           = 0x6000\n\tS_IFCHR                           = 0x2000\n\tS_IFDIR                           = 0x4000\n\tS_IFIFO                           = 0x1000\n\tS_IFLNK                           = 0xa000\n\tS_IFMT                            = 0xf000\n\tS_IFREG                           = 0x8000\n\tS_IFSOCK                          = 0xc000\n\tS_IFWHT                           = 0xe000\n\tS_IREAD                           = 0x100\n\tS_IRGRP                           = 0x20\n\tS_IROTH                           = 0x4\n\tS_IRUSR                           = 0x100\n\tS_IRWXG                           = 0x38\n\tS_IRWXO                           = 0x7\n\tS_IRWXU                           = 0x1c0\n\tS_ISGID                           = 0x400\n\tS_ISTXT                           = 0x200\n\tS_ISUID                           = 0x800\n\tS_ISVTX                           = 0x200\n\tS_IWGRP                           = 0x10\n\tS_IWOTH                           = 0x2\n\tS_IWRITE                          = 0x80\n\tS_IWUSR                           = 0x80\n\tS_IXGRP                           = 0x8\n\tS_IXOTH                           = 0x1\n\tS_IXUSR                           = 0x40\n\tTAB0                              = 0x0\n\tTAB1                              = 0x400\n\tTAB2                              = 0x800\n\tTAB3                              = 0x4\n\tTABDLY                            = 0xc04\n\tTCIFLUSH                          = 0x1\n\tTCIOFF                            = 0x3\n\tTCIOFLUSH                         = 0x3\n\tTCION                             = 0x4\n\tTCOFLUSH                          = 0x2\n\tTCOOFF                            = 0x1\n\tTCOON                             = 0x2\n\tTCP_CONNECTIONTIMEOUT             = 0x20\n\tTCP_CONNECTION_INFO               = 0x106\n\tTCP_ENABLE_ECN                    = 0x104\n\tTCP_FASTOPEN                      = 0x105\n\tTCP_KEEPALIVE                     = 0x10\n\tTCP_KEEPCNT                       = 0x102\n\tTCP_KEEPINTVL                     = 0x101\n\tTCP_MAXHLEN                       = 0x3c\n\tTCP_MAXOLEN                       = 0x28\n\tTCP_MAXSEG                        = 0x2\n\tTCP_MAXWIN                        = 0xffff\n\tTCP_MAX_SACK                      = 0x4\n\tTCP_MAX_WINSHIFT                  = 0xe\n\tTCP_MINMSS                        = 0xd8\n\tTCP_MSS                           = 0x200\n\tTCP_NODELAY                       = 0x1\n\tTCP_NOOPT                         = 0x8\n\tTCP_NOPUSH                        = 0x4\n\tTCP_NOTSENT_LOWAT                 = 0x201\n\tTCP_RXT_CONNDROPTIME              = 0x80\n\tTCP_RXT_FINDROP                   = 0x100\n\tTCP_SENDMOREACKS                  = 0x103\n\tTCSAFLUSH                         = 0x2\n\tTIOCCBRK                          = 0x2000747a\n\tTIOCCDTR                          = 0x20007478\n\tTIOCCONS                          = 0x80047462\n\tTIOCDCDTIMESTAMP                  = 0x40107458\n\tTIOCDRAIN                         = 0x2000745e\n\tTIOCDSIMICROCODE                  = 0x20007455\n\tTIOCEXCL                          = 0x2000740d\n\tTIOCEXT                           = 0x80047460\n\tTIOCFLUSH                         = 0x80047410\n\tTIOCGDRAINWAIT                    = 0x40047456\n\tTIOCGETA                          = 0x40487413\n\tTIOCGETD                          = 0x4004741a\n\tTIOCGPGRP                         = 0x40047477\n\tTIOCGWINSZ                        = 0x40087468\n\tTIOCIXOFF                         = 0x20007480\n\tTIOCIXON                          = 0x20007481\n\tTIOCMBIC                          = 0x8004746b\n\tTIOCMBIS                          = 0x8004746c\n\tTIOCMGDTRWAIT                     = 0x4004745a\n\tTIOCMGET                          = 0x4004746a\n\tTIOCMODG                          = 0x40047403\n\tTIOCMODS                          = 0x80047404\n\tTIOCMSDTRWAIT                     = 0x8004745b\n\tTIOCMSET                          = 0x8004746d\n\tTIOCM_CAR                         = 0x40\n\tTIOCM_CD                          = 0x40\n\tTIOCM_CTS                         = 0x20\n\tTIOCM_DSR                         = 0x100\n\tTIOCM_DTR                         = 0x2\n\tTIOCM_LE                          = 0x1\n\tTIOCM_RI                          = 0x80\n\tTIOCM_RNG                         = 0x80\n\tTIOCM_RTS                         = 0x4\n\tTIOCM_SR                          = 0x10\n\tTIOCM_ST                          = 0x8\n\tTIOCNOTTY                         = 0x20007471\n\tTIOCNXCL                          = 0x2000740e\n\tTIOCOUTQ                          = 0x40047473\n\tTIOCPKT                           = 0x80047470\n\tTIOCPKT_DATA                      = 0x0\n\tTIOCPKT_DOSTOP                    = 0x20\n\tTIOCPKT_FLUSHREAD                 = 0x1\n\tTIOCPKT_FLUSHWRITE                = 0x2\n\tTIOCPKT_IOCTL                     = 0x40\n\tTIOCPKT_NOSTOP                    = 0x10\n\tTIOCPKT_START                     = 0x8\n\tTIOCPKT_STOP                      = 0x4\n\tTIOCPTYGNAME                      = 0x40807453\n\tTIOCPTYGRANT                      = 0x20007454\n\tTIOCPTYUNLK                       = 0x20007452\n\tTIOCREMOTE                        = 0x80047469\n\tTIOCSBRK                          = 0x2000747b\n\tTIOCSCONS                         = 0x20007463\n\tTIOCSCTTY                         = 0x20007461\n\tTIOCSDRAINWAIT                    = 0x80047457\n\tTIOCSDTR                          = 0x20007479\n\tTIOCSETA                          = 0x80487414\n\tTIOCSETAF                         = 0x80487416\n\tTIOCSETAW                         = 0x80487415\n\tTIOCSETD                          = 0x8004741b\n\tTIOCSIG                           = 0x2000745f\n\tTIOCSPGRP                         = 0x80047476\n\tTIOCSTART                         = 0x2000746e\n\tTIOCSTAT                          = 0x20007465\n\tTIOCSTI                           = 0x80017472\n\tTIOCSTOP                          = 0x2000746f\n\tTIOCSWINSZ                        = 0x80087467\n\tTIOCTIMESTAMP                     = 0x40107459\n\tTIOCUCNTL                         = 0x80047466\n\tTOSTOP                            = 0x400000\n\tVDISCARD                          = 0xf\n\tVDSUSP                            = 0xb\n\tVEOF                              = 0x0\n\tVEOL                              = 0x1\n\tVEOL2                             = 0x2\n\tVERASE                            = 0x3\n\tVINTR                             = 0x8\n\tVKILL                             = 0x5\n\tVLNEXT                            = 0xe\n\tVMIN                              = 0x10\n\tVM_LOADAVG                        = 0x2\n\tVM_MACHFACTOR                     = 0x4\n\tVM_MAXID                          = 0x6\n\tVM_METER                          = 0x1\n\tVM_SWAPUSAGE                      = 0x5\n\tVQUIT                             = 0x9\n\tVREPRINT                          = 0x6\n\tVSTART                            = 0xc\n\tVSTATUS                           = 0x12\n\tVSTOP                             = 0xd\n\tVSUSP                             = 0xa\n\tVT0                               = 0x0\n\tVT1                               = 0x10000\n\tVTDLY                             = 0x10000\n\tVTIME                             = 0x11\n\tVWERASE                           = 0x4\n\tWCONTINUED                        = 0x10\n\tWCOREFLAG                         = 0x80\n\tWEXITED                           = 0x4\n\tWNOHANG                           = 0x1\n\tWNOWAIT                           = 0x20\n\tWORDSIZE                          = 0x40\n\tWSTOPPED                          = 0x8\n\tWUNTRACED                         = 0x2\n\tXATTR_CREATE                      = 0x2\n\tXATTR_NODEFAULT                   = 0x10\n\tXATTR_NOFOLLOW                    = 0x1\n\tXATTR_NOSECURITY                  = 0x8\n\tXATTR_REPLACE                     = 0x4\n\tXATTR_SHOWCOMPRESSION             = 0x20\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x30)\n\tEADDRNOTAVAIL   = syscall.Errno(0x31)\n\tEAFNOSUPPORT    = syscall.Errno(0x2f)\n\tEAGAIN          = syscall.Errno(0x23)\n\tEALREADY        = syscall.Errno(0x25)\n\tEAUTH           = syscall.Errno(0x50)\n\tEBADARCH        = syscall.Errno(0x56)\n\tEBADEXEC        = syscall.Errno(0x55)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADMACHO       = syscall.Errno(0x58)\n\tEBADMSG         = syscall.Errno(0x5e)\n\tEBADRPC         = syscall.Errno(0x48)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x59)\n\tECHILD          = syscall.Errno(0xa)\n\tECONNABORTED    = syscall.Errno(0x35)\n\tECONNREFUSED    = syscall.Errno(0x3d)\n\tECONNRESET      = syscall.Errno(0x36)\n\tEDEADLK         = syscall.Errno(0xb)\n\tEDESTADDRREQ    = syscall.Errno(0x27)\n\tEDEVERR         = syscall.Errno(0x53)\n\tEDOM            = syscall.Errno(0x21)\n\tEDQUOT          = syscall.Errno(0x45)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFTYPE          = syscall.Errno(0x4f)\n\tEHOSTDOWN       = syscall.Errno(0x40)\n\tEHOSTUNREACH    = syscall.Errno(0x41)\n\tEIDRM           = syscall.Errno(0x5a)\n\tEILSEQ          = syscall.Errno(0x5c)\n\tEINPROGRESS     = syscall.Errno(0x24)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEISCONN         = syscall.Errno(0x38)\n\tEISDIR          = syscall.Errno(0x15)\n\tELAST           = syscall.Errno(0x6a)\n\tELOOP           = syscall.Errno(0x3e)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x28)\n\tEMULTIHOP       = syscall.Errno(0x5f)\n\tENAMETOOLONG    = syscall.Errno(0x3f)\n\tENEEDAUTH       = syscall.Errno(0x51)\n\tENETDOWN        = syscall.Errno(0x32)\n\tENETRESET       = syscall.Errno(0x34)\n\tENETUNREACH     = syscall.Errno(0x33)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x5d)\n\tENOBUFS         = syscall.Errno(0x37)\n\tENODATA         = syscall.Errno(0x60)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x4d)\n\tENOLINK         = syscall.Errno(0x61)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x5b)\n\tENOPOLICY       = syscall.Errno(0x67)\n\tENOPROTOOPT     = syscall.Errno(0x2a)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSR           = syscall.Errno(0x62)\n\tENOSTR          = syscall.Errno(0x63)\n\tENOSYS          = syscall.Errno(0x4e)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x39)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x42)\n\tENOTRECOVERABLE = syscall.Errno(0x68)\n\tENOTSOCK        = syscall.Errno(0x26)\n\tENOTSUP         = syscall.Errno(0x2d)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x66)\n\tEOVERFLOW       = syscall.Errno(0x54)\n\tEOWNERDEAD      = syscall.Errno(0x69)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x2e)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x43)\n\tEPROCUNAVAIL    = syscall.Errno(0x4c)\n\tEPROGMISMATCH   = syscall.Errno(0x4b)\n\tEPROGUNAVAIL    = syscall.Errno(0x4a)\n\tEPROTO          = syscall.Errno(0x64)\n\tEPROTONOSUPPORT = syscall.Errno(0x2b)\n\tEPROTOTYPE      = syscall.Errno(0x29)\n\tEPWROFF         = syscall.Errno(0x52)\n\tEQFULL          = syscall.Errno(0x6a)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x47)\n\tEROFS           = syscall.Errno(0x1e)\n\tERPCMISMATCH    = syscall.Errno(0x49)\n\tESHLIBVERS      = syscall.Errno(0x57)\n\tESHUTDOWN       = syscall.Errno(0x3a)\n\tESOCKTNOSUPPORT = syscall.Errno(0x2c)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x46)\n\tETIME           = syscall.Errno(0x65)\n\tETIMEDOUT       = syscall.Errno(0x3c)\n\tETOOMANYREFS    = syscall.Errno(0x3b)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUSERS          = syscall.Errno(0x44)\n\tEWOULDBLOCK     = syscall.Errno(0x23)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x14)\n\tSIGCONT   = syscall.Signal(0x13)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINFO   = syscall.Signal(0x1d)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x17)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTOP   = syscall.Signal(0x11)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x12)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x10)\n\tSIGUSR1   = syscall.Signal(0x1e)\n\tSIGUSR2   = syscall.Signal(0x1f)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"device not configured\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"resource busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"operation not supported by device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large\"},\n\t{35, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{36, \"EINPROGRESS\", \"operation now in progress\"},\n\t{37, \"EALREADY\", \"operation already in progress\"},\n\t{38, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{39, \"EDESTADDRREQ\", \"destination address required\"},\n\t{40, \"EMSGSIZE\", \"message too long\"},\n\t{41, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{42, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{43, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{44, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{45, \"ENOTSUP\", \"operation not supported\"},\n\t{46, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{47, \"EAFNOSUPPORT\", \"address family not supported by protocol family\"},\n\t{48, \"EADDRINUSE\", \"address already in use\"},\n\t{49, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{50, \"ENETDOWN\", \"network is down\"},\n\t{51, \"ENETUNREACH\", \"network is unreachable\"},\n\t{52, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{53, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{54, \"ECONNRESET\", \"connection reset by peer\"},\n\t{55, \"ENOBUFS\", \"no buffer space available\"},\n\t{56, \"EISCONN\", \"socket is already connected\"},\n\t{57, \"ENOTCONN\", \"socket is not connected\"},\n\t{58, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{59, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{60, \"ETIMEDOUT\", \"operation timed out\"},\n\t{61, \"ECONNREFUSED\", \"connection refused\"},\n\t{62, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{63, \"ENAMETOOLONG\", \"file name too long\"},\n\t{64, \"EHOSTDOWN\", \"host is down\"},\n\t{65, \"EHOSTUNREACH\", \"no route to host\"},\n\t{66, \"ENOTEMPTY\", \"directory not empty\"},\n\t{67, \"EPROCLIM\", \"too many processes\"},\n\t{68, \"EUSERS\", \"too many users\"},\n\t{69, \"EDQUOT\", \"disc quota exceeded\"},\n\t{70, \"ESTALE\", \"stale NFS file handle\"},\n\t{71, \"EREMOTE\", \"too many levels of remote in path\"},\n\t{72, \"EBADRPC\", \"RPC struct is bad\"},\n\t{73, \"ERPCMISMATCH\", \"RPC version wrong\"},\n\t{74, \"EPROGUNAVAIL\", \"RPC prog. not avail\"},\n\t{75, \"EPROGMISMATCH\", \"program version wrong\"},\n\t{76, \"EPROCUNAVAIL\", \"bad procedure for program\"},\n\t{77, \"ENOLCK\", \"no locks available\"},\n\t{78, \"ENOSYS\", \"function not implemented\"},\n\t{79, \"EFTYPE\", \"inappropriate file type or format\"},\n\t{80, \"EAUTH\", \"authentication error\"},\n\t{81, \"ENEEDAUTH\", \"need authenticator\"},\n\t{82, \"EPWROFF\", \"device power is off\"},\n\t{83, \"EDEVERR\", \"device error\"},\n\t{84, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n\t{85, \"EBADEXEC\", \"bad executable (or shared library)\"},\n\t{86, \"EBADARCH\", \"bad CPU type in executable\"},\n\t{87, \"ESHLIBVERS\", \"shared library version mismatch\"},\n\t{88, \"EBADMACHO\", \"malformed Mach-o file\"},\n\t{89, \"ECANCELED\", \"operation canceled\"},\n\t{90, \"EIDRM\", \"identifier removed\"},\n\t{91, \"ENOMSG\", \"no message of desired type\"},\n\t{92, \"EILSEQ\", \"illegal byte sequence\"},\n\t{93, \"ENOATTR\", \"attribute not found\"},\n\t{94, \"EBADMSG\", \"bad message\"},\n\t{95, \"EMULTIHOP\", \"EMULTIHOP (Reserved)\"},\n\t{96, \"ENODATA\", \"no message available on STREAM\"},\n\t{97, \"ENOLINK\", \"ENOLINK (Reserved)\"},\n\t{98, \"ENOSR\", \"no STREAM resources\"},\n\t{99, \"ENOSTR\", \"not a STREAM\"},\n\t{100, \"EPROTO\", \"protocol error\"},\n\t{101, \"ETIME\", \"STREAM ioctl timeout\"},\n\t{102, \"EOPNOTSUPP\", \"operation not supported on socket\"},\n\t{103, \"ENOPOLICY\", \"policy not found\"},\n\t{104, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{105, \"EOWNERDEAD\", \"previous owner died\"},\n\t{106, \"EQFULL\", \"interface output queue is full\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGABRT\", \"abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"suspended (signal)\"},\n\t{18, \"SIGTSTP\", \"suspended\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGINFO\", \"information request\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go",
    "content": "// mkerrors.sh -m64\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build arm64,darwin\n\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs -- -m64 _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                      = 0x10\n\tAF_CCITT                          = 0xa\n\tAF_CHAOS                          = 0x5\n\tAF_CNT                            = 0x15\n\tAF_COIP                           = 0x14\n\tAF_DATAKIT                        = 0x9\n\tAF_DECnet                         = 0xc\n\tAF_DLI                            = 0xd\n\tAF_E164                           = 0x1c\n\tAF_ECMA                           = 0x8\n\tAF_HYLINK                         = 0xf\n\tAF_IEEE80211                      = 0x25\n\tAF_IMPLINK                        = 0x3\n\tAF_INET                           = 0x2\n\tAF_INET6                          = 0x1e\n\tAF_IPX                            = 0x17\n\tAF_ISDN                           = 0x1c\n\tAF_ISO                            = 0x7\n\tAF_LAT                            = 0xe\n\tAF_LINK                           = 0x12\n\tAF_LOCAL                          = 0x1\n\tAF_MAX                            = 0x28\n\tAF_NATM                           = 0x1f\n\tAF_NDRV                           = 0x1b\n\tAF_NETBIOS                        = 0x21\n\tAF_NS                             = 0x6\n\tAF_OSI                            = 0x7\n\tAF_PPP                            = 0x22\n\tAF_PUP                            = 0x4\n\tAF_RESERVED_36                    = 0x24\n\tAF_ROUTE                          = 0x11\n\tAF_SIP                            = 0x18\n\tAF_SNA                            = 0xb\n\tAF_SYSTEM                         = 0x20\n\tAF_UNIX                           = 0x1\n\tAF_UNSPEC                         = 0x0\n\tAF_UTUN                           = 0x26\n\tALTWERASE                         = 0x200\n\tATTR_BIT_MAP_COUNT                = 0x5\n\tATTR_CMN_ACCESSMASK               = 0x20000\n\tATTR_CMN_ACCTIME                  = 0x1000\n\tATTR_CMN_ADDEDTIME                = 0x10000000\n\tATTR_CMN_BKUPTIME                 = 0x2000\n\tATTR_CMN_CHGTIME                  = 0x800\n\tATTR_CMN_CRTIME                   = 0x200\n\tATTR_CMN_DATA_PROTECT_FLAGS       = 0x40000000\n\tATTR_CMN_DEVID                    = 0x2\n\tATTR_CMN_DOCUMENT_ID              = 0x100000\n\tATTR_CMN_ERROR                    = 0x20000000\n\tATTR_CMN_EXTENDED_SECURITY        = 0x400000\n\tATTR_CMN_FILEID                   = 0x2000000\n\tATTR_CMN_FLAGS                    = 0x40000\n\tATTR_CMN_FNDRINFO                 = 0x4000\n\tATTR_CMN_FSID                     = 0x4\n\tATTR_CMN_FULLPATH                 = 0x8000000\n\tATTR_CMN_GEN_COUNT                = 0x80000\n\tATTR_CMN_GRPID                    = 0x10000\n\tATTR_CMN_GRPUUID                  = 0x1000000\n\tATTR_CMN_MODTIME                  = 0x400\n\tATTR_CMN_NAME                     = 0x1\n\tATTR_CMN_NAMEDATTRCOUNT           = 0x80000\n\tATTR_CMN_NAMEDATTRLIST            = 0x100000\n\tATTR_CMN_OBJID                    = 0x20\n\tATTR_CMN_OBJPERMANENTID           = 0x40\n\tATTR_CMN_OBJTAG                   = 0x10\n\tATTR_CMN_OBJTYPE                  = 0x8\n\tATTR_CMN_OWNERID                  = 0x8000\n\tATTR_CMN_PARENTID                 = 0x4000000\n\tATTR_CMN_PAROBJID                 = 0x80\n\tATTR_CMN_RETURNED_ATTRS           = 0x80000000\n\tATTR_CMN_SCRIPT                   = 0x100\n\tATTR_CMN_SETMASK                  = 0x41c7ff00\n\tATTR_CMN_USERACCESS               = 0x200000\n\tATTR_CMN_UUID                     = 0x800000\n\tATTR_CMN_VALIDMASK                = 0xffffffff\n\tATTR_CMN_VOLSETMASK               = 0x6700\n\tATTR_FILE_ALLOCSIZE               = 0x4\n\tATTR_FILE_CLUMPSIZE               = 0x10\n\tATTR_FILE_DATAALLOCSIZE           = 0x400\n\tATTR_FILE_DATAEXTENTS             = 0x800\n\tATTR_FILE_DATALENGTH              = 0x200\n\tATTR_FILE_DEVTYPE                 = 0x20\n\tATTR_FILE_FILETYPE                = 0x40\n\tATTR_FILE_FORKCOUNT               = 0x80\n\tATTR_FILE_FORKLIST                = 0x100\n\tATTR_FILE_IOBLOCKSIZE             = 0x8\n\tATTR_FILE_LINKCOUNT               = 0x1\n\tATTR_FILE_RSRCALLOCSIZE           = 0x2000\n\tATTR_FILE_RSRCEXTENTS             = 0x4000\n\tATTR_FILE_RSRCLENGTH              = 0x1000\n\tATTR_FILE_SETMASK                 = 0x20\n\tATTR_FILE_TOTALSIZE               = 0x2\n\tATTR_FILE_VALIDMASK               = 0x37ff\n\tATTR_VOL_ALLOCATIONCLUMP          = 0x40\n\tATTR_VOL_ATTRIBUTES               = 0x40000000\n\tATTR_VOL_CAPABILITIES             = 0x20000\n\tATTR_VOL_DIRCOUNT                 = 0x400\n\tATTR_VOL_ENCODINGSUSED            = 0x10000\n\tATTR_VOL_FILECOUNT                = 0x200\n\tATTR_VOL_FSTYPE                   = 0x1\n\tATTR_VOL_INFO                     = 0x80000000\n\tATTR_VOL_IOBLOCKSIZE              = 0x80\n\tATTR_VOL_MAXOBJCOUNT              = 0x800\n\tATTR_VOL_MINALLOCATION            = 0x20\n\tATTR_VOL_MOUNTEDDEVICE            = 0x8000\n\tATTR_VOL_MOUNTFLAGS               = 0x4000\n\tATTR_VOL_MOUNTPOINT               = 0x1000\n\tATTR_VOL_NAME                     = 0x2000\n\tATTR_VOL_OBJCOUNT                 = 0x100\n\tATTR_VOL_QUOTA_SIZE               = 0x10000000\n\tATTR_VOL_RESERVED_SIZE            = 0x20000000\n\tATTR_VOL_SETMASK                  = 0x80002000\n\tATTR_VOL_SIGNATURE                = 0x2\n\tATTR_VOL_SIZE                     = 0x4\n\tATTR_VOL_SPACEAVAIL               = 0x10\n\tATTR_VOL_SPACEFREE                = 0x8\n\tATTR_VOL_UUID                     = 0x40000\n\tATTR_VOL_VALIDMASK                = 0xf007ffff\n\tB0                                = 0x0\n\tB110                              = 0x6e\n\tB115200                           = 0x1c200\n\tB1200                             = 0x4b0\n\tB134                              = 0x86\n\tB14400                            = 0x3840\n\tB150                              = 0x96\n\tB1800                             = 0x708\n\tB19200                            = 0x4b00\n\tB200                              = 0xc8\n\tB230400                           = 0x38400\n\tB2400                             = 0x960\n\tB28800                            = 0x7080\n\tB300                              = 0x12c\n\tB38400                            = 0x9600\n\tB4800                             = 0x12c0\n\tB50                               = 0x32\n\tB57600                            = 0xe100\n\tB600                              = 0x258\n\tB7200                             = 0x1c20\n\tB75                               = 0x4b\n\tB76800                            = 0x12c00\n\tB9600                             = 0x2580\n\tBIOCFLUSH                         = 0x20004268\n\tBIOCGBLEN                         = 0x40044266\n\tBIOCGDLT                          = 0x4004426a\n\tBIOCGDLTLIST                      = 0xc00c4279\n\tBIOCGETIF                         = 0x4020426b\n\tBIOCGHDRCMPLT                     = 0x40044274\n\tBIOCGRSIG                         = 0x40044272\n\tBIOCGRTIMEOUT                     = 0x4010426e\n\tBIOCGSEESENT                      = 0x40044276\n\tBIOCGSTATS                        = 0x4008426f\n\tBIOCIMMEDIATE                     = 0x80044270\n\tBIOCPROMISC                       = 0x20004269\n\tBIOCSBLEN                         = 0xc0044266\n\tBIOCSDLT                          = 0x80044278\n\tBIOCSETF                          = 0x80104267\n\tBIOCSETFNR                        = 0x8010427e\n\tBIOCSETIF                         = 0x8020426c\n\tBIOCSHDRCMPLT                     = 0x80044275\n\tBIOCSRSIG                         = 0x80044273\n\tBIOCSRTIMEOUT                     = 0x8010426d\n\tBIOCSSEESENT                      = 0x80044277\n\tBIOCVERSION                       = 0x40044271\n\tBPF_A                             = 0x10\n\tBPF_ABS                           = 0x20\n\tBPF_ADD                           = 0x0\n\tBPF_ALIGNMENT                     = 0x4\n\tBPF_ALU                           = 0x4\n\tBPF_AND                           = 0x50\n\tBPF_B                             = 0x10\n\tBPF_DIV                           = 0x30\n\tBPF_H                             = 0x8\n\tBPF_IMM                           = 0x0\n\tBPF_IND                           = 0x40\n\tBPF_JA                            = 0x0\n\tBPF_JEQ                           = 0x10\n\tBPF_JGE                           = 0x30\n\tBPF_JGT                           = 0x20\n\tBPF_JMP                           = 0x5\n\tBPF_JSET                          = 0x40\n\tBPF_K                             = 0x0\n\tBPF_LD                            = 0x0\n\tBPF_LDX                           = 0x1\n\tBPF_LEN                           = 0x80\n\tBPF_LSH                           = 0x60\n\tBPF_MAJOR_VERSION                 = 0x1\n\tBPF_MAXBUFSIZE                    = 0x80000\n\tBPF_MAXINSNS                      = 0x200\n\tBPF_MEM                           = 0x60\n\tBPF_MEMWORDS                      = 0x10\n\tBPF_MINBUFSIZE                    = 0x20\n\tBPF_MINOR_VERSION                 = 0x1\n\tBPF_MISC                          = 0x7\n\tBPF_MSH                           = 0xa0\n\tBPF_MUL                           = 0x20\n\tBPF_NEG                           = 0x80\n\tBPF_OR                            = 0x40\n\tBPF_RELEASE                       = 0x30bb6\n\tBPF_RET                           = 0x6\n\tBPF_RSH                           = 0x70\n\tBPF_ST                            = 0x2\n\tBPF_STX                           = 0x3\n\tBPF_SUB                           = 0x10\n\tBPF_TAX                           = 0x0\n\tBPF_TXA                           = 0x80\n\tBPF_W                             = 0x0\n\tBPF_X                             = 0x8\n\tBRKINT                            = 0x2\n\tBS0                               = 0x0\n\tBS1                               = 0x8000\n\tBSDLY                             = 0x8000\n\tCFLUSH                            = 0xf\n\tCLOCAL                            = 0x8000\n\tCLOCK_MONOTONIC                   = 0x6\n\tCLOCK_MONOTONIC_RAW               = 0x4\n\tCLOCK_MONOTONIC_RAW_APPROX        = 0x5\n\tCLOCK_PROCESS_CPUTIME_ID          = 0xc\n\tCLOCK_REALTIME                    = 0x0\n\tCLOCK_THREAD_CPUTIME_ID           = 0x10\n\tCLOCK_UPTIME_RAW                  = 0x8\n\tCLOCK_UPTIME_RAW_APPROX           = 0x9\n\tCR0                               = 0x0\n\tCR1                               = 0x1000\n\tCR2                               = 0x2000\n\tCR3                               = 0x3000\n\tCRDLY                             = 0x3000\n\tCREAD                             = 0x800\n\tCRTSCTS                           = 0x30000\n\tCS5                               = 0x0\n\tCS6                               = 0x100\n\tCS7                               = 0x200\n\tCS8                               = 0x300\n\tCSIZE                             = 0x300\n\tCSTART                            = 0x11\n\tCSTATUS                           = 0x14\n\tCSTOP                             = 0x13\n\tCSTOPB                            = 0x400\n\tCSUSP                             = 0x1a\n\tCTL_HW                            = 0x6\n\tCTL_KERN                          = 0x1\n\tCTL_MAXNAME                       = 0xc\n\tCTL_NET                           = 0x4\n\tDLT_A429                          = 0xb8\n\tDLT_A653_ICM                      = 0xb9\n\tDLT_AIRONET_HEADER                = 0x78\n\tDLT_AOS                           = 0xde\n\tDLT_APPLE_IP_OVER_IEEE1394        = 0x8a\n\tDLT_ARCNET                        = 0x7\n\tDLT_ARCNET_LINUX                  = 0x81\n\tDLT_ATM_CLIP                      = 0x13\n\tDLT_ATM_RFC1483                   = 0xb\n\tDLT_AURORA                        = 0x7e\n\tDLT_AX25                          = 0x3\n\tDLT_AX25_KISS                     = 0xca\n\tDLT_BACNET_MS_TP                  = 0xa5\n\tDLT_BLUETOOTH_HCI_H4              = 0xbb\n\tDLT_BLUETOOTH_HCI_H4_WITH_PHDR    = 0xc9\n\tDLT_CAN20B                        = 0xbe\n\tDLT_CAN_SOCKETCAN                 = 0xe3\n\tDLT_CHAOS                         = 0x5\n\tDLT_CHDLC                         = 0x68\n\tDLT_CISCO_IOS                     = 0x76\n\tDLT_C_HDLC                        = 0x68\n\tDLT_C_HDLC_WITH_DIR               = 0xcd\n\tDLT_DBUS                          = 0xe7\n\tDLT_DECT                          = 0xdd\n\tDLT_DOCSIS                        = 0x8f\n\tDLT_DVB_CI                        = 0xeb\n\tDLT_ECONET                        = 0x73\n\tDLT_EN10MB                        = 0x1\n\tDLT_EN3MB                         = 0x2\n\tDLT_ENC                           = 0x6d\n\tDLT_ERF                           = 0xc5\n\tDLT_ERF_ETH                       = 0xaf\n\tDLT_ERF_POS                       = 0xb0\n\tDLT_FC_2                          = 0xe0\n\tDLT_FC_2_WITH_FRAME_DELIMS        = 0xe1\n\tDLT_FDDI                          = 0xa\n\tDLT_FLEXRAY                       = 0xd2\n\tDLT_FRELAY                        = 0x6b\n\tDLT_FRELAY_WITH_DIR               = 0xce\n\tDLT_GCOM_SERIAL                   = 0xad\n\tDLT_GCOM_T1E1                     = 0xac\n\tDLT_GPF_F                         = 0xab\n\tDLT_GPF_T                         = 0xaa\n\tDLT_GPRS_LLC                      = 0xa9\n\tDLT_GSMTAP_ABIS                   = 0xda\n\tDLT_GSMTAP_UM                     = 0xd9\n\tDLT_HHDLC                         = 0x79\n\tDLT_IBM_SN                        = 0x92\n\tDLT_IBM_SP                        = 0x91\n\tDLT_IEEE802                       = 0x6\n\tDLT_IEEE802_11                    = 0x69\n\tDLT_IEEE802_11_RADIO              = 0x7f\n\tDLT_IEEE802_11_RADIO_AVS          = 0xa3\n\tDLT_IEEE802_15_4                  = 0xc3\n\tDLT_IEEE802_15_4_LINUX            = 0xbf\n\tDLT_IEEE802_15_4_NOFCS            = 0xe6\n\tDLT_IEEE802_15_4_NONASK_PHY       = 0xd7\n\tDLT_IEEE802_16_MAC_CPS            = 0xbc\n\tDLT_IEEE802_16_MAC_CPS_RADIO      = 0xc1\n\tDLT_IPFILTER                      = 0x74\n\tDLT_IPMB                          = 0xc7\n\tDLT_IPMB_LINUX                    = 0xd1\n\tDLT_IPNET                         = 0xe2\n\tDLT_IPOIB                         = 0xf2\n\tDLT_IPV4                          = 0xe4\n\tDLT_IPV6                          = 0xe5\n\tDLT_IP_OVER_FC                    = 0x7a\n\tDLT_JUNIPER_ATM1                  = 0x89\n\tDLT_JUNIPER_ATM2                  = 0x87\n\tDLT_JUNIPER_ATM_CEMIC             = 0xee\n\tDLT_JUNIPER_CHDLC                 = 0xb5\n\tDLT_JUNIPER_ES                    = 0x84\n\tDLT_JUNIPER_ETHER                 = 0xb2\n\tDLT_JUNIPER_FIBRECHANNEL          = 0xea\n\tDLT_JUNIPER_FRELAY                = 0xb4\n\tDLT_JUNIPER_GGSN                  = 0x85\n\tDLT_JUNIPER_ISM                   = 0xc2\n\tDLT_JUNIPER_MFR                   = 0x86\n\tDLT_JUNIPER_MLFR                  = 0x83\n\tDLT_JUNIPER_MLPPP                 = 0x82\n\tDLT_JUNIPER_MONITOR               = 0xa4\n\tDLT_JUNIPER_PIC_PEER              = 0xae\n\tDLT_JUNIPER_PPP                   = 0xb3\n\tDLT_JUNIPER_PPPOE                 = 0xa7\n\tDLT_JUNIPER_PPPOE_ATM             = 0xa8\n\tDLT_JUNIPER_SERVICES              = 0x88\n\tDLT_JUNIPER_SRX_E2E               = 0xe9\n\tDLT_JUNIPER_ST                    = 0xc8\n\tDLT_JUNIPER_VP                    = 0xb7\n\tDLT_JUNIPER_VS                    = 0xe8\n\tDLT_LAPB_WITH_DIR                 = 0xcf\n\tDLT_LAPD                          = 0xcb\n\tDLT_LIN                           = 0xd4\n\tDLT_LINUX_EVDEV                   = 0xd8\n\tDLT_LINUX_IRDA                    = 0x90\n\tDLT_LINUX_LAPD                    = 0xb1\n\tDLT_LINUX_PPP_WITHDIRECTION       = 0xa6\n\tDLT_LINUX_SLL                     = 0x71\n\tDLT_LOOP                          = 0x6c\n\tDLT_LTALK                         = 0x72\n\tDLT_MATCHING_MAX                  = 0xf5\n\tDLT_MATCHING_MIN                  = 0x68\n\tDLT_MFR                           = 0xb6\n\tDLT_MOST                          = 0xd3\n\tDLT_MPEG_2_TS                     = 0xf3\n\tDLT_MPLS                          = 0xdb\n\tDLT_MTP2                          = 0x8c\n\tDLT_MTP2_WITH_PHDR                = 0x8b\n\tDLT_MTP3                          = 0x8d\n\tDLT_MUX27010                      = 0xec\n\tDLT_NETANALYZER                   = 0xf0\n\tDLT_NETANALYZER_TRANSPARENT       = 0xf1\n\tDLT_NFC_LLCP                      = 0xf5\n\tDLT_NFLOG                         = 0xef\n\tDLT_NG40                          = 0xf4\n\tDLT_NULL                          = 0x0\n\tDLT_PCI_EXP                       = 0x7d\n\tDLT_PFLOG                         = 0x75\n\tDLT_PFSYNC                        = 0x12\n\tDLT_PPI                           = 0xc0\n\tDLT_PPP                           = 0x9\n\tDLT_PPP_BSDOS                     = 0x10\n\tDLT_PPP_ETHER                     = 0x33\n\tDLT_PPP_PPPD                      = 0xa6\n\tDLT_PPP_SERIAL                    = 0x32\n\tDLT_PPP_WITH_DIR                  = 0xcc\n\tDLT_PPP_WITH_DIRECTION            = 0xa6\n\tDLT_PRISM_HEADER                  = 0x77\n\tDLT_PRONET                        = 0x4\n\tDLT_RAIF1                         = 0xc6\n\tDLT_RAW                           = 0xc\n\tDLT_RIO                           = 0x7c\n\tDLT_SCCP                          = 0x8e\n\tDLT_SITA                          = 0xc4\n\tDLT_SLIP                          = 0x8\n\tDLT_SLIP_BSDOS                    = 0xf\n\tDLT_STANAG_5066_D_PDU             = 0xed\n\tDLT_SUNATM                        = 0x7b\n\tDLT_SYMANTEC_FIREWALL             = 0x63\n\tDLT_TZSP                          = 0x80\n\tDLT_USB                           = 0xba\n\tDLT_USB_LINUX                     = 0xbd\n\tDLT_USB_LINUX_MMAPPED             = 0xdc\n\tDLT_USER0                         = 0x93\n\tDLT_USER1                         = 0x94\n\tDLT_USER10                        = 0x9d\n\tDLT_USER11                        = 0x9e\n\tDLT_USER12                        = 0x9f\n\tDLT_USER13                        = 0xa0\n\tDLT_USER14                        = 0xa1\n\tDLT_USER15                        = 0xa2\n\tDLT_USER2                         = 0x95\n\tDLT_USER3                         = 0x96\n\tDLT_USER4                         = 0x97\n\tDLT_USER5                         = 0x98\n\tDLT_USER6                         = 0x99\n\tDLT_USER7                         = 0x9a\n\tDLT_USER8                         = 0x9b\n\tDLT_USER9                         = 0x9c\n\tDLT_WIHART                        = 0xdf\n\tDLT_X2E_SERIAL                    = 0xd5\n\tDLT_X2E_XORAYA                    = 0xd6\n\tDT_BLK                            = 0x6\n\tDT_CHR                            = 0x2\n\tDT_DIR                            = 0x4\n\tDT_FIFO                           = 0x1\n\tDT_LNK                            = 0xa\n\tDT_REG                            = 0x8\n\tDT_SOCK                           = 0xc\n\tDT_UNKNOWN                        = 0x0\n\tDT_WHT                            = 0xe\n\tECHO                              = 0x8\n\tECHOCTL                           = 0x40\n\tECHOE                             = 0x2\n\tECHOK                             = 0x4\n\tECHOKE                            = 0x1\n\tECHONL                            = 0x10\n\tECHOPRT                           = 0x20\n\tEVFILT_AIO                        = -0x3\n\tEVFILT_EXCEPT                     = -0xf\n\tEVFILT_FS                         = -0x9\n\tEVFILT_MACHPORT                   = -0x8\n\tEVFILT_PROC                       = -0x5\n\tEVFILT_READ                       = -0x1\n\tEVFILT_SIGNAL                     = -0x6\n\tEVFILT_SYSCOUNT                   = 0xf\n\tEVFILT_THREADMARKER               = 0xf\n\tEVFILT_TIMER                      = -0x7\n\tEVFILT_USER                       = -0xa\n\tEVFILT_VM                         = -0xc\n\tEVFILT_VNODE                      = -0x4\n\tEVFILT_WRITE                      = -0x2\n\tEV_ADD                            = 0x1\n\tEV_CLEAR                          = 0x20\n\tEV_DELETE                         = 0x2\n\tEV_DISABLE                        = 0x8\n\tEV_DISPATCH                       = 0x80\n\tEV_DISPATCH2                      = 0x180\n\tEV_ENABLE                         = 0x4\n\tEV_EOF                            = 0x8000\n\tEV_ERROR                          = 0x4000\n\tEV_FLAG0                          = 0x1000\n\tEV_FLAG1                          = 0x2000\n\tEV_ONESHOT                        = 0x10\n\tEV_OOBAND                         = 0x2000\n\tEV_POLL                           = 0x1000\n\tEV_RECEIPT                        = 0x40\n\tEV_SYSFLAGS                       = 0xf000\n\tEV_UDATA_SPECIFIC                 = 0x100\n\tEV_VANISHED                       = 0x200\n\tEXTA                              = 0x4b00\n\tEXTB                              = 0x9600\n\tEXTPROC                           = 0x800\n\tFD_CLOEXEC                        = 0x1\n\tFD_SETSIZE                        = 0x400\n\tFF0                               = 0x0\n\tFF1                               = 0x4000\n\tFFDLY                             = 0x4000\n\tFLUSHO                            = 0x800000\n\tFSOPT_ATTR_CMN_EXTENDED           = 0x20\n\tFSOPT_NOFOLLOW                    = 0x1\n\tFSOPT_NOINMEMUPDATE               = 0x2\n\tFSOPT_PACK_INVAL_ATTRS            = 0x8\n\tFSOPT_REPORT_FULLSIZE             = 0x4\n\tF_ADDFILESIGS                     = 0x3d\n\tF_ADDFILESIGS_FOR_DYLD_SIM        = 0x53\n\tF_ADDFILESIGS_RETURN              = 0x61\n\tF_ADDSIGS                         = 0x3b\n\tF_ALLOCATEALL                     = 0x4\n\tF_ALLOCATECONTIG                  = 0x2\n\tF_BARRIERFSYNC                    = 0x55\n\tF_CHECK_LV                        = 0x62\n\tF_CHKCLEAN                        = 0x29\n\tF_DUPFD                           = 0x0\n\tF_DUPFD_CLOEXEC                   = 0x43\n\tF_FINDSIGS                        = 0x4e\n\tF_FLUSH_DATA                      = 0x28\n\tF_FREEZE_FS                       = 0x35\n\tF_FULLFSYNC                       = 0x33\n\tF_GETCODEDIR                      = 0x48\n\tF_GETFD                           = 0x1\n\tF_GETFL                           = 0x3\n\tF_GETLK                           = 0x7\n\tF_GETLKPID                        = 0x42\n\tF_GETNOSIGPIPE                    = 0x4a\n\tF_GETOWN                          = 0x5\n\tF_GETPATH                         = 0x32\n\tF_GETPATH_MTMINFO                 = 0x47\n\tF_GETPROTECTIONCLASS              = 0x3f\n\tF_GETPROTECTIONLEVEL              = 0x4d\n\tF_GLOBAL_NOCACHE                  = 0x37\n\tF_LOG2PHYS                        = 0x31\n\tF_LOG2PHYS_EXT                    = 0x41\n\tF_NOCACHE                         = 0x30\n\tF_NODIRECT                        = 0x3e\n\tF_OK                              = 0x0\n\tF_PATHPKG_CHECK                   = 0x34\n\tF_PEOFPOSMODE                     = 0x3\n\tF_PREALLOCATE                     = 0x2a\n\tF_PUNCHHOLE                       = 0x63\n\tF_RDADVISE                        = 0x2c\n\tF_RDAHEAD                         = 0x2d\n\tF_RDLCK                           = 0x1\n\tF_SETBACKINGSTORE                 = 0x46\n\tF_SETFD                           = 0x2\n\tF_SETFL                           = 0x4\n\tF_SETLK                           = 0x8\n\tF_SETLKW                          = 0x9\n\tF_SETLKWTIMEOUT                   = 0xa\n\tF_SETNOSIGPIPE                    = 0x49\n\tF_SETOWN                          = 0x6\n\tF_SETPROTECTIONCLASS              = 0x40\n\tF_SETSIZE                         = 0x2b\n\tF_SINGLE_WRITER                   = 0x4c\n\tF_THAW_FS                         = 0x36\n\tF_TRANSCODEKEY                    = 0x4b\n\tF_TRIM_ACTIVE_FILE                = 0x64\n\tF_UNLCK                           = 0x2\n\tF_VOLPOSMODE                      = 0x4\n\tF_WRLCK                           = 0x3\n\tHUPCL                             = 0x4000\n\tHW_MACHINE                        = 0x1\n\tICANON                            = 0x100\n\tICMP6_FILTER                      = 0x12\n\tICRNL                             = 0x100\n\tIEXTEN                            = 0x400\n\tIFF_ALLMULTI                      = 0x200\n\tIFF_ALTPHYS                       = 0x4000\n\tIFF_BROADCAST                     = 0x2\n\tIFF_DEBUG                         = 0x4\n\tIFF_LINK0                         = 0x1000\n\tIFF_LINK1                         = 0x2000\n\tIFF_LINK2                         = 0x4000\n\tIFF_LOOPBACK                      = 0x8\n\tIFF_MULTICAST                     = 0x8000\n\tIFF_NOARP                         = 0x80\n\tIFF_NOTRAILERS                    = 0x20\n\tIFF_OACTIVE                       = 0x400\n\tIFF_POINTOPOINT                   = 0x10\n\tIFF_PROMISC                       = 0x100\n\tIFF_RUNNING                       = 0x40\n\tIFF_SIMPLEX                       = 0x800\n\tIFF_UP                            = 0x1\n\tIFNAMSIZ                          = 0x10\n\tIFT_1822                          = 0x2\n\tIFT_AAL5                          = 0x31\n\tIFT_ARCNET                        = 0x23\n\tIFT_ARCNETPLUS                    = 0x24\n\tIFT_ATM                           = 0x25\n\tIFT_BRIDGE                        = 0xd1\n\tIFT_CARP                          = 0xf8\n\tIFT_CELLULAR                      = 0xff\n\tIFT_CEPT                          = 0x13\n\tIFT_DS3                           = 0x1e\n\tIFT_ENC                           = 0xf4\n\tIFT_EON                           = 0x19\n\tIFT_ETHER                         = 0x6\n\tIFT_FAITH                         = 0x38\n\tIFT_FDDI                          = 0xf\n\tIFT_FRELAY                        = 0x20\n\tIFT_FRELAYDCE                     = 0x2c\n\tIFT_GIF                           = 0x37\n\tIFT_HDH1822                       = 0x3\n\tIFT_HIPPI                         = 0x2f\n\tIFT_HSSI                          = 0x2e\n\tIFT_HY                            = 0xe\n\tIFT_IEEE1394                      = 0x90\n\tIFT_IEEE8023ADLAG                 = 0x88\n\tIFT_ISDNBASIC                     = 0x14\n\tIFT_ISDNPRIMARY                   = 0x15\n\tIFT_ISO88022LLC                   = 0x29\n\tIFT_ISO88023                      = 0x7\n\tIFT_ISO88024                      = 0x8\n\tIFT_ISO88025                      = 0x9\n\tIFT_ISO88026                      = 0xa\n\tIFT_L2VLAN                        = 0x87\n\tIFT_LAPB                          = 0x10\n\tIFT_LOCALTALK                     = 0x2a\n\tIFT_LOOP                          = 0x18\n\tIFT_MIOX25                        = 0x26\n\tIFT_MODEM                         = 0x30\n\tIFT_NSIP                          = 0x1b\n\tIFT_OTHER                         = 0x1\n\tIFT_P10                           = 0xc\n\tIFT_P80                           = 0xd\n\tIFT_PARA                          = 0x22\n\tIFT_PDP                           = 0xff\n\tIFT_PFLOG                         = 0xf5\n\tIFT_PFSYNC                        = 0xf6\n\tIFT_PKTAP                         = 0xfe\n\tIFT_PPP                           = 0x17\n\tIFT_PROPMUX                       = 0x36\n\tIFT_PROPVIRTUAL                   = 0x35\n\tIFT_PTPSERIAL                     = 0x16\n\tIFT_RS232                         = 0x21\n\tIFT_SDLC                          = 0x11\n\tIFT_SIP                           = 0x1f\n\tIFT_SLIP                          = 0x1c\n\tIFT_SMDSDXI                       = 0x2b\n\tIFT_SMDSICIP                      = 0x34\n\tIFT_SONET                         = 0x27\n\tIFT_SONETPATH                     = 0x32\n\tIFT_SONETVT                       = 0x33\n\tIFT_STARLAN                       = 0xb\n\tIFT_STF                           = 0x39\n\tIFT_T1                            = 0x12\n\tIFT_ULTRA                         = 0x1d\n\tIFT_V35                           = 0x2d\n\tIFT_X25                           = 0x5\n\tIFT_X25DDN                        = 0x4\n\tIFT_X25PLE                        = 0x28\n\tIFT_XETHER                        = 0x1a\n\tIGNBRK                            = 0x1\n\tIGNCR                             = 0x80\n\tIGNPAR                            = 0x4\n\tIMAXBEL                           = 0x2000\n\tINLCR                             = 0x40\n\tINPCK                             = 0x10\n\tIN_CLASSA_HOST                    = 0xffffff\n\tIN_CLASSA_MAX                     = 0x80\n\tIN_CLASSA_NET                     = 0xff000000\n\tIN_CLASSA_NSHIFT                  = 0x18\n\tIN_CLASSB_HOST                    = 0xffff\n\tIN_CLASSB_MAX                     = 0x10000\n\tIN_CLASSB_NET                     = 0xffff0000\n\tIN_CLASSB_NSHIFT                  = 0x10\n\tIN_CLASSC_HOST                    = 0xff\n\tIN_CLASSC_NET                     = 0xffffff00\n\tIN_CLASSC_NSHIFT                  = 0x8\n\tIN_CLASSD_HOST                    = 0xfffffff\n\tIN_CLASSD_NET                     = 0xf0000000\n\tIN_CLASSD_NSHIFT                  = 0x1c\n\tIN_LINKLOCALNETNUM                = 0xa9fe0000\n\tIN_LOOPBACKNET                    = 0x7f\n\tIPPROTO_3PC                       = 0x22\n\tIPPROTO_ADFS                      = 0x44\n\tIPPROTO_AH                        = 0x33\n\tIPPROTO_AHIP                      = 0x3d\n\tIPPROTO_APES                      = 0x63\n\tIPPROTO_ARGUS                     = 0xd\n\tIPPROTO_AX25                      = 0x5d\n\tIPPROTO_BHA                       = 0x31\n\tIPPROTO_BLT                       = 0x1e\n\tIPPROTO_BRSATMON                  = 0x4c\n\tIPPROTO_CFTP                      = 0x3e\n\tIPPROTO_CHAOS                     = 0x10\n\tIPPROTO_CMTP                      = 0x26\n\tIPPROTO_CPHB                      = 0x49\n\tIPPROTO_CPNX                      = 0x48\n\tIPPROTO_DDP                       = 0x25\n\tIPPROTO_DGP                       = 0x56\n\tIPPROTO_DIVERT                    = 0xfe\n\tIPPROTO_DONE                      = 0x101\n\tIPPROTO_DSTOPTS                   = 0x3c\n\tIPPROTO_EGP                       = 0x8\n\tIPPROTO_EMCON                     = 0xe\n\tIPPROTO_ENCAP                     = 0x62\n\tIPPROTO_EON                       = 0x50\n\tIPPROTO_ESP                       = 0x32\n\tIPPROTO_ETHERIP                   = 0x61\n\tIPPROTO_FRAGMENT                  = 0x2c\n\tIPPROTO_GGP                       = 0x3\n\tIPPROTO_GMTP                      = 0x64\n\tIPPROTO_GRE                       = 0x2f\n\tIPPROTO_HELLO                     = 0x3f\n\tIPPROTO_HMP                       = 0x14\n\tIPPROTO_HOPOPTS                   = 0x0\n\tIPPROTO_ICMP                      = 0x1\n\tIPPROTO_ICMPV6                    = 0x3a\n\tIPPROTO_IDP                       = 0x16\n\tIPPROTO_IDPR                      = 0x23\n\tIPPROTO_IDRP                      = 0x2d\n\tIPPROTO_IGMP                      = 0x2\n\tIPPROTO_IGP                       = 0x55\n\tIPPROTO_IGRP                      = 0x58\n\tIPPROTO_IL                        = 0x28\n\tIPPROTO_INLSP                     = 0x34\n\tIPPROTO_INP                       = 0x20\n\tIPPROTO_IP                        = 0x0\n\tIPPROTO_IPCOMP                    = 0x6c\n\tIPPROTO_IPCV                      = 0x47\n\tIPPROTO_IPEIP                     = 0x5e\n\tIPPROTO_IPIP                      = 0x4\n\tIPPROTO_IPPC                      = 0x43\n\tIPPROTO_IPV4                      = 0x4\n\tIPPROTO_IPV6                      = 0x29\n\tIPPROTO_IRTP                      = 0x1c\n\tIPPROTO_KRYPTOLAN                 = 0x41\n\tIPPROTO_LARP                      = 0x5b\n\tIPPROTO_LEAF1                     = 0x19\n\tIPPROTO_LEAF2                     = 0x1a\n\tIPPROTO_MAX                       = 0x100\n\tIPPROTO_MAXID                     = 0x34\n\tIPPROTO_MEAS                      = 0x13\n\tIPPROTO_MHRP                      = 0x30\n\tIPPROTO_MICP                      = 0x5f\n\tIPPROTO_MTP                       = 0x5c\n\tIPPROTO_MUX                       = 0x12\n\tIPPROTO_ND                        = 0x4d\n\tIPPROTO_NHRP                      = 0x36\n\tIPPROTO_NONE                      = 0x3b\n\tIPPROTO_NSP                       = 0x1f\n\tIPPROTO_NVPII                     = 0xb\n\tIPPROTO_OSPFIGP                   = 0x59\n\tIPPROTO_PGM                       = 0x71\n\tIPPROTO_PIGP                      = 0x9\n\tIPPROTO_PIM                       = 0x67\n\tIPPROTO_PRM                       = 0x15\n\tIPPROTO_PUP                       = 0xc\n\tIPPROTO_PVP                       = 0x4b\n\tIPPROTO_RAW                       = 0xff\n\tIPPROTO_RCCMON                    = 0xa\n\tIPPROTO_RDP                       = 0x1b\n\tIPPROTO_ROUTING                   = 0x2b\n\tIPPROTO_RSVP                      = 0x2e\n\tIPPROTO_RVD                       = 0x42\n\tIPPROTO_SATEXPAK                  = 0x40\n\tIPPROTO_SATMON                    = 0x45\n\tIPPROTO_SCCSP                     = 0x60\n\tIPPROTO_SCTP                      = 0x84\n\tIPPROTO_SDRP                      = 0x2a\n\tIPPROTO_SEP                       = 0x21\n\tIPPROTO_SRPC                      = 0x5a\n\tIPPROTO_ST                        = 0x7\n\tIPPROTO_SVMTP                     = 0x52\n\tIPPROTO_SWIPE                     = 0x35\n\tIPPROTO_TCF                       = 0x57\n\tIPPROTO_TCP                       = 0x6\n\tIPPROTO_TP                        = 0x1d\n\tIPPROTO_TPXX                      = 0x27\n\tIPPROTO_TRUNK1                    = 0x17\n\tIPPROTO_TRUNK2                    = 0x18\n\tIPPROTO_TTP                       = 0x54\n\tIPPROTO_UDP                       = 0x11\n\tIPPROTO_VINES                     = 0x53\n\tIPPROTO_VISA                      = 0x46\n\tIPPROTO_VMTP                      = 0x51\n\tIPPROTO_WBEXPAK                   = 0x4f\n\tIPPROTO_WBMON                     = 0x4e\n\tIPPROTO_WSN                       = 0x4a\n\tIPPROTO_XNET                      = 0xf\n\tIPPROTO_XTP                       = 0x24\n\tIPV6_2292DSTOPTS                  = 0x17\n\tIPV6_2292HOPLIMIT                 = 0x14\n\tIPV6_2292HOPOPTS                  = 0x16\n\tIPV6_2292NEXTHOP                  = 0x15\n\tIPV6_2292PKTINFO                  = 0x13\n\tIPV6_2292PKTOPTIONS               = 0x19\n\tIPV6_2292RTHDR                    = 0x18\n\tIPV6_BINDV6ONLY                   = 0x1b\n\tIPV6_BOUND_IF                     = 0x7d\n\tIPV6_CHECKSUM                     = 0x1a\n\tIPV6_DEFAULT_MULTICAST_HOPS       = 0x1\n\tIPV6_DEFAULT_MULTICAST_LOOP       = 0x1\n\tIPV6_DEFHLIM                      = 0x40\n\tIPV6_FAITH                        = 0x1d\n\tIPV6_FLOWINFO_MASK                = 0xffffff0f\n\tIPV6_FLOWLABEL_MASK               = 0xffff0f00\n\tIPV6_FLOW_ECN_MASK                = 0x300\n\tIPV6_FRAGTTL                      = 0x3c\n\tIPV6_FW_ADD                       = 0x1e\n\tIPV6_FW_DEL                       = 0x1f\n\tIPV6_FW_FLUSH                     = 0x20\n\tIPV6_FW_GET                       = 0x22\n\tIPV6_FW_ZERO                      = 0x21\n\tIPV6_HLIMDEC                      = 0x1\n\tIPV6_IPSEC_POLICY                 = 0x1c\n\tIPV6_JOIN_GROUP                   = 0xc\n\tIPV6_LEAVE_GROUP                  = 0xd\n\tIPV6_MAXHLIM                      = 0xff\n\tIPV6_MAXOPTHDR                    = 0x800\n\tIPV6_MAXPACKET                    = 0xffff\n\tIPV6_MAX_GROUP_SRC_FILTER         = 0x200\n\tIPV6_MAX_MEMBERSHIPS              = 0xfff\n\tIPV6_MAX_SOCK_SRC_FILTER          = 0x80\n\tIPV6_MIN_MEMBERSHIPS              = 0x1f\n\tIPV6_MMTU                         = 0x500\n\tIPV6_MULTICAST_HOPS               = 0xa\n\tIPV6_MULTICAST_IF                 = 0x9\n\tIPV6_MULTICAST_LOOP               = 0xb\n\tIPV6_PORTRANGE                    = 0xe\n\tIPV6_PORTRANGE_DEFAULT            = 0x0\n\tIPV6_PORTRANGE_HIGH               = 0x1\n\tIPV6_PORTRANGE_LOW                = 0x2\n\tIPV6_RECVTCLASS                   = 0x23\n\tIPV6_RTHDR_LOOSE                  = 0x0\n\tIPV6_RTHDR_STRICT                 = 0x1\n\tIPV6_RTHDR_TYPE_0                 = 0x0\n\tIPV6_SOCKOPT_RESERVED1            = 0x3\n\tIPV6_TCLASS                       = 0x24\n\tIPV6_UNICAST_HOPS                 = 0x4\n\tIPV6_V6ONLY                       = 0x1b\n\tIPV6_VERSION                      = 0x60\n\tIPV6_VERSION_MASK                 = 0xf0\n\tIP_ADD_MEMBERSHIP                 = 0xc\n\tIP_ADD_SOURCE_MEMBERSHIP          = 0x46\n\tIP_BLOCK_SOURCE                   = 0x48\n\tIP_BOUND_IF                       = 0x19\n\tIP_DEFAULT_MULTICAST_LOOP         = 0x1\n\tIP_DEFAULT_MULTICAST_TTL          = 0x1\n\tIP_DF                             = 0x4000\n\tIP_DROP_MEMBERSHIP                = 0xd\n\tIP_DROP_SOURCE_MEMBERSHIP         = 0x47\n\tIP_DUMMYNET_CONFIGURE             = 0x3c\n\tIP_DUMMYNET_DEL                   = 0x3d\n\tIP_DUMMYNET_FLUSH                 = 0x3e\n\tIP_DUMMYNET_GET                   = 0x40\n\tIP_FAITH                          = 0x16\n\tIP_FW_ADD                         = 0x28\n\tIP_FW_DEL                         = 0x29\n\tIP_FW_FLUSH                       = 0x2a\n\tIP_FW_GET                         = 0x2c\n\tIP_FW_RESETLOG                    = 0x2d\n\tIP_FW_ZERO                        = 0x2b\n\tIP_HDRINCL                        = 0x2\n\tIP_IPSEC_POLICY                   = 0x15\n\tIP_MAXPACKET                      = 0xffff\n\tIP_MAX_GROUP_SRC_FILTER           = 0x200\n\tIP_MAX_MEMBERSHIPS                = 0xfff\n\tIP_MAX_SOCK_MUTE_FILTER           = 0x80\n\tIP_MAX_SOCK_SRC_FILTER            = 0x80\n\tIP_MF                             = 0x2000\n\tIP_MIN_MEMBERSHIPS                = 0x1f\n\tIP_MSFILTER                       = 0x4a\n\tIP_MSS                            = 0x240\n\tIP_MULTICAST_IF                   = 0x9\n\tIP_MULTICAST_IFINDEX              = 0x42\n\tIP_MULTICAST_LOOP                 = 0xb\n\tIP_MULTICAST_TTL                  = 0xa\n\tIP_MULTICAST_VIF                  = 0xe\n\tIP_NAT__XXX                       = 0x37\n\tIP_OFFMASK                        = 0x1fff\n\tIP_OLD_FW_ADD                     = 0x32\n\tIP_OLD_FW_DEL                     = 0x33\n\tIP_OLD_FW_FLUSH                   = 0x34\n\tIP_OLD_FW_GET                     = 0x36\n\tIP_OLD_FW_RESETLOG                = 0x38\n\tIP_OLD_FW_ZERO                    = 0x35\n\tIP_OPTIONS                        = 0x1\n\tIP_PKTINFO                        = 0x1a\n\tIP_PORTRANGE                      = 0x13\n\tIP_PORTRANGE_DEFAULT              = 0x0\n\tIP_PORTRANGE_HIGH                 = 0x1\n\tIP_PORTRANGE_LOW                  = 0x2\n\tIP_RECVDSTADDR                    = 0x7\n\tIP_RECVIF                         = 0x14\n\tIP_RECVOPTS                       = 0x5\n\tIP_RECVPKTINFO                    = 0x1a\n\tIP_RECVRETOPTS                    = 0x6\n\tIP_RECVTOS                        = 0x1b\n\tIP_RECVTTL                        = 0x18\n\tIP_RETOPTS                        = 0x8\n\tIP_RF                             = 0x8000\n\tIP_RSVP_OFF                       = 0x10\n\tIP_RSVP_ON                        = 0xf\n\tIP_RSVP_VIF_OFF                   = 0x12\n\tIP_RSVP_VIF_ON                    = 0x11\n\tIP_STRIPHDR                       = 0x17\n\tIP_TOS                            = 0x3\n\tIP_TRAFFIC_MGT_BACKGROUND         = 0x41\n\tIP_TTL                            = 0x4\n\tIP_UNBLOCK_SOURCE                 = 0x49\n\tISIG                              = 0x80\n\tISTRIP                            = 0x20\n\tIUTF8                             = 0x4000\n\tIXANY                             = 0x800\n\tIXOFF                             = 0x400\n\tIXON                              = 0x200\n\tKERN_HOSTNAME                     = 0xa\n\tKERN_OSRELEASE                    = 0x2\n\tKERN_OSTYPE                       = 0x1\n\tKERN_VERSION                      = 0x4\n\tLOCK_EX                           = 0x2\n\tLOCK_NB                           = 0x4\n\tLOCK_SH                           = 0x1\n\tLOCK_UN                           = 0x8\n\tMADV_CAN_REUSE                    = 0x9\n\tMADV_DONTNEED                     = 0x4\n\tMADV_FREE                         = 0x5\n\tMADV_FREE_REUSABLE                = 0x7\n\tMADV_FREE_REUSE                   = 0x8\n\tMADV_NORMAL                       = 0x0\n\tMADV_PAGEOUT                      = 0xa\n\tMADV_RANDOM                       = 0x1\n\tMADV_SEQUENTIAL                   = 0x2\n\tMADV_WILLNEED                     = 0x3\n\tMADV_ZERO_WIRED_PAGES             = 0x6\n\tMAP_ANON                          = 0x1000\n\tMAP_ANONYMOUS                     = 0x1000\n\tMAP_COPY                          = 0x2\n\tMAP_FILE                          = 0x0\n\tMAP_FIXED                         = 0x10\n\tMAP_HASSEMAPHORE                  = 0x200\n\tMAP_JIT                           = 0x800\n\tMAP_NOCACHE                       = 0x400\n\tMAP_NOEXTEND                      = 0x100\n\tMAP_NORESERVE                     = 0x40\n\tMAP_PRIVATE                       = 0x2\n\tMAP_RENAME                        = 0x20\n\tMAP_RESERVED0080                  = 0x80\n\tMAP_RESILIENT_CODESIGN            = 0x2000\n\tMAP_RESILIENT_MEDIA               = 0x4000\n\tMAP_SHARED                        = 0x1\n\tMCL_CURRENT                       = 0x1\n\tMCL_FUTURE                        = 0x2\n\tMNT_ASYNC                         = 0x40\n\tMNT_AUTOMOUNTED                   = 0x400000\n\tMNT_CMDFLAGS                      = 0xf0000\n\tMNT_CPROTECT                      = 0x80\n\tMNT_DEFWRITE                      = 0x2000000\n\tMNT_DONTBROWSE                    = 0x100000\n\tMNT_DOVOLFS                       = 0x8000\n\tMNT_DWAIT                         = 0x4\n\tMNT_EXPORTED                      = 0x100\n\tMNT_FORCE                         = 0x80000\n\tMNT_IGNORE_OWNERSHIP              = 0x200000\n\tMNT_JOURNALED                     = 0x800000\n\tMNT_LOCAL                         = 0x1000\n\tMNT_MULTILABEL                    = 0x4000000\n\tMNT_NOATIME                       = 0x10000000\n\tMNT_NOBLOCK                       = 0x20000\n\tMNT_NODEV                         = 0x10\n\tMNT_NOEXEC                        = 0x4\n\tMNT_NOSUID                        = 0x8\n\tMNT_NOUSERXATTR                   = 0x1000000\n\tMNT_NOWAIT                        = 0x2\n\tMNT_QUARANTINE                    = 0x400\n\tMNT_QUOTA                         = 0x2000\n\tMNT_RDONLY                        = 0x1\n\tMNT_RELOAD                        = 0x40000\n\tMNT_ROOTFS                        = 0x4000\n\tMNT_SYNCHRONOUS                   = 0x2\n\tMNT_UNION                         = 0x20\n\tMNT_UNKNOWNPERMISSIONS            = 0x200000\n\tMNT_UPDATE                        = 0x10000\n\tMNT_VISFLAGMASK                   = 0x17f0f5ff\n\tMNT_WAIT                          = 0x1\n\tMSG_CTRUNC                        = 0x20\n\tMSG_DONTROUTE                     = 0x4\n\tMSG_DONTWAIT                      = 0x80\n\tMSG_EOF                           = 0x100\n\tMSG_EOR                           = 0x8\n\tMSG_FLUSH                         = 0x400\n\tMSG_HAVEMORE                      = 0x2000\n\tMSG_HOLD                          = 0x800\n\tMSG_NEEDSA                        = 0x10000\n\tMSG_OOB                           = 0x1\n\tMSG_PEEK                          = 0x2\n\tMSG_RCVMORE                       = 0x4000\n\tMSG_SEND                          = 0x1000\n\tMSG_TRUNC                         = 0x10\n\tMSG_WAITALL                       = 0x40\n\tMSG_WAITSTREAM                    = 0x200\n\tMS_ASYNC                          = 0x1\n\tMS_DEACTIVATE                     = 0x8\n\tMS_INVALIDATE                     = 0x2\n\tMS_KILLPAGES                      = 0x4\n\tMS_SYNC                           = 0x10\n\tNAME_MAX                          = 0xff\n\tNET_RT_DUMP                       = 0x1\n\tNET_RT_DUMP2                      = 0x7\n\tNET_RT_FLAGS                      = 0x2\n\tNET_RT_IFLIST                     = 0x3\n\tNET_RT_IFLIST2                    = 0x6\n\tNET_RT_MAXID                      = 0xa\n\tNET_RT_STAT                       = 0x4\n\tNET_RT_TRASH                      = 0x5\n\tNL0                               = 0x0\n\tNL1                               = 0x100\n\tNL2                               = 0x200\n\tNL3                               = 0x300\n\tNLDLY                             = 0x300\n\tNOFLSH                            = 0x80000000\n\tNOKERNINFO                        = 0x2000000\n\tNOTE_ABSOLUTE                     = 0x8\n\tNOTE_ATTRIB                       = 0x8\n\tNOTE_BACKGROUND                   = 0x40\n\tNOTE_CHILD                        = 0x4\n\tNOTE_CRITICAL                     = 0x20\n\tNOTE_DELETE                       = 0x1\n\tNOTE_EXEC                         = 0x20000000\n\tNOTE_EXIT                         = 0x80000000\n\tNOTE_EXITSTATUS                   = 0x4000000\n\tNOTE_EXIT_CSERROR                 = 0x40000\n\tNOTE_EXIT_DECRYPTFAIL             = 0x10000\n\tNOTE_EXIT_DETAIL                  = 0x2000000\n\tNOTE_EXIT_DETAIL_MASK             = 0x70000\n\tNOTE_EXIT_MEMORY                  = 0x20000\n\tNOTE_EXIT_REPARENTED              = 0x80000\n\tNOTE_EXTEND                       = 0x4\n\tNOTE_FFAND                        = 0x40000000\n\tNOTE_FFCOPY                       = 0xc0000000\n\tNOTE_FFCTRLMASK                   = 0xc0000000\n\tNOTE_FFLAGSMASK                   = 0xffffff\n\tNOTE_FFNOP                        = 0x0\n\tNOTE_FFOR                         = 0x80000000\n\tNOTE_FORK                         = 0x40000000\n\tNOTE_FUNLOCK                      = 0x100\n\tNOTE_LEEWAY                       = 0x10\n\tNOTE_LINK                         = 0x10\n\tNOTE_LOWAT                        = 0x1\n\tNOTE_MACH_CONTINUOUS_TIME         = 0x80\n\tNOTE_NONE                         = 0x80\n\tNOTE_NSECONDS                     = 0x4\n\tNOTE_OOB                          = 0x2\n\tNOTE_PCTRLMASK                    = -0x100000\n\tNOTE_PDATAMASK                    = 0xfffff\n\tNOTE_REAP                         = 0x10000000\n\tNOTE_RENAME                       = 0x20\n\tNOTE_REVOKE                       = 0x40\n\tNOTE_SECONDS                      = 0x1\n\tNOTE_SIGNAL                       = 0x8000000\n\tNOTE_TRACK                        = 0x1\n\tNOTE_TRACKERR                     = 0x2\n\tNOTE_TRIGGER                      = 0x1000000\n\tNOTE_USECONDS                     = 0x2\n\tNOTE_VM_ERROR                     = 0x10000000\n\tNOTE_VM_PRESSURE                  = 0x80000000\n\tNOTE_VM_PRESSURE_SUDDEN_TERMINATE = 0x20000000\n\tNOTE_VM_PRESSURE_TERMINATE        = 0x40000000\n\tNOTE_WRITE                        = 0x2\n\tOCRNL                             = 0x10\n\tOFDEL                             = 0x20000\n\tOFILL                             = 0x80\n\tONLCR                             = 0x2\n\tONLRET                            = 0x40\n\tONOCR                             = 0x20\n\tONOEOT                            = 0x8\n\tOPOST                             = 0x1\n\tOXTABS                            = 0x4\n\tO_ACCMODE                         = 0x3\n\tO_ALERT                           = 0x20000000\n\tO_APPEND                          = 0x8\n\tO_ASYNC                           = 0x40\n\tO_CLOEXEC                         = 0x1000000\n\tO_CREAT                           = 0x200\n\tO_DIRECTORY                       = 0x100000\n\tO_DP_GETRAWENCRYPTED              = 0x1\n\tO_DP_GETRAWUNENCRYPTED            = 0x2\n\tO_DSYNC                           = 0x400000\n\tO_EVTONLY                         = 0x8000\n\tO_EXCL                            = 0x800\n\tO_EXLOCK                          = 0x20\n\tO_FSYNC                           = 0x80\n\tO_NDELAY                          = 0x4\n\tO_NOCTTY                          = 0x20000\n\tO_NOFOLLOW                        = 0x100\n\tO_NONBLOCK                        = 0x4\n\tO_POPUP                           = 0x80000000\n\tO_RDONLY                          = 0x0\n\tO_RDWR                            = 0x2\n\tO_SHLOCK                          = 0x10\n\tO_SYMLINK                         = 0x200000\n\tO_SYNC                            = 0x80\n\tO_TRUNC                           = 0x400\n\tO_WRONLY                          = 0x1\n\tPARENB                            = 0x1000\n\tPARMRK                            = 0x8\n\tPARODD                            = 0x2000\n\tPENDIN                            = 0x20000000\n\tPRIO_PGRP                         = 0x1\n\tPRIO_PROCESS                      = 0x0\n\tPRIO_USER                         = 0x2\n\tPROT_EXEC                         = 0x4\n\tPROT_NONE                         = 0x0\n\tPROT_READ                         = 0x1\n\tPROT_WRITE                        = 0x2\n\tPT_ATTACH                         = 0xa\n\tPT_ATTACHEXC                      = 0xe\n\tPT_CONTINUE                       = 0x7\n\tPT_DENY_ATTACH                    = 0x1f\n\tPT_DETACH                         = 0xb\n\tPT_FIRSTMACH                      = 0x20\n\tPT_FORCEQUOTA                     = 0x1e\n\tPT_KILL                           = 0x8\n\tPT_READ_D                         = 0x2\n\tPT_READ_I                         = 0x1\n\tPT_READ_U                         = 0x3\n\tPT_SIGEXC                         = 0xc\n\tPT_STEP                           = 0x9\n\tPT_THUPDATE                       = 0xd\n\tPT_TRACE_ME                       = 0x0\n\tPT_WRITE_D                        = 0x5\n\tPT_WRITE_I                        = 0x4\n\tPT_WRITE_U                        = 0x6\n\tRLIMIT_AS                         = 0x5\n\tRLIMIT_CORE                       = 0x4\n\tRLIMIT_CPU                        = 0x0\n\tRLIMIT_CPU_USAGE_MONITOR          = 0x2\n\tRLIMIT_DATA                       = 0x2\n\tRLIMIT_FSIZE                      = 0x1\n\tRLIMIT_MEMLOCK                    = 0x6\n\tRLIMIT_NOFILE                     = 0x8\n\tRLIMIT_NPROC                      = 0x7\n\tRLIMIT_RSS                        = 0x5\n\tRLIMIT_STACK                      = 0x3\n\tRLIM_INFINITY                     = 0x7fffffffffffffff\n\tRTAX_AUTHOR                       = 0x6\n\tRTAX_BRD                          = 0x7\n\tRTAX_DST                          = 0x0\n\tRTAX_GATEWAY                      = 0x1\n\tRTAX_GENMASK                      = 0x3\n\tRTAX_IFA                          = 0x5\n\tRTAX_IFP                          = 0x4\n\tRTAX_MAX                          = 0x8\n\tRTAX_NETMASK                      = 0x2\n\tRTA_AUTHOR                        = 0x40\n\tRTA_BRD                           = 0x80\n\tRTA_DST                           = 0x1\n\tRTA_GATEWAY                       = 0x2\n\tRTA_GENMASK                       = 0x8\n\tRTA_IFA                           = 0x20\n\tRTA_IFP                           = 0x10\n\tRTA_NETMASK                       = 0x4\n\tRTF_BLACKHOLE                     = 0x1000\n\tRTF_BROADCAST                     = 0x400000\n\tRTF_CLONING                       = 0x100\n\tRTF_CONDEMNED                     = 0x2000000\n\tRTF_DELCLONE                      = 0x80\n\tRTF_DONE                          = 0x40\n\tRTF_DYNAMIC                       = 0x10\n\tRTF_GATEWAY                       = 0x2\n\tRTF_HOST                          = 0x4\n\tRTF_IFREF                         = 0x4000000\n\tRTF_IFSCOPE                       = 0x1000000\n\tRTF_LLINFO                        = 0x400\n\tRTF_LOCAL                         = 0x200000\n\tRTF_MODIFIED                      = 0x20\n\tRTF_MULTICAST                     = 0x800000\n\tRTF_NOIFREF                       = 0x2000\n\tRTF_PINNED                        = 0x100000\n\tRTF_PRCLONING                     = 0x10000\n\tRTF_PROTO1                        = 0x8000\n\tRTF_PROTO2                        = 0x4000\n\tRTF_PROTO3                        = 0x40000\n\tRTF_PROXY                         = 0x8000000\n\tRTF_REJECT                        = 0x8\n\tRTF_ROUTER                        = 0x10000000\n\tRTF_STATIC                        = 0x800\n\tRTF_UP                            = 0x1\n\tRTF_WASCLONED                     = 0x20000\n\tRTF_XRESOLVE                      = 0x200\n\tRTM_ADD                           = 0x1\n\tRTM_CHANGE                        = 0x3\n\tRTM_DELADDR                       = 0xd\n\tRTM_DELETE                        = 0x2\n\tRTM_DELMADDR                      = 0x10\n\tRTM_GET                           = 0x4\n\tRTM_GET2                          = 0x14\n\tRTM_IFINFO                        = 0xe\n\tRTM_IFINFO2                       = 0x12\n\tRTM_LOCK                          = 0x8\n\tRTM_LOSING                        = 0x5\n\tRTM_MISS                          = 0x7\n\tRTM_NEWADDR                       = 0xc\n\tRTM_NEWMADDR                      = 0xf\n\tRTM_NEWMADDR2                     = 0x13\n\tRTM_OLDADD                        = 0x9\n\tRTM_OLDDEL                        = 0xa\n\tRTM_REDIRECT                      = 0x6\n\tRTM_RESOLVE                       = 0xb\n\tRTM_RTTUNIT                       = 0xf4240\n\tRTM_VERSION                       = 0x5\n\tRTV_EXPIRE                        = 0x4\n\tRTV_HOPCOUNT                      = 0x2\n\tRTV_MTU                           = 0x1\n\tRTV_RPIPE                         = 0x8\n\tRTV_RTT                           = 0x40\n\tRTV_RTTVAR                        = 0x80\n\tRTV_SPIPE                         = 0x10\n\tRTV_SSTHRESH                      = 0x20\n\tRUSAGE_CHILDREN                   = -0x1\n\tRUSAGE_SELF                       = 0x0\n\tSCM_CREDS                         = 0x3\n\tSCM_RIGHTS                        = 0x1\n\tSCM_TIMESTAMP                     = 0x2\n\tSCM_TIMESTAMP_MONOTONIC           = 0x4\n\tSHUT_RD                           = 0x0\n\tSHUT_RDWR                         = 0x2\n\tSHUT_WR                           = 0x1\n\tSIOCADDMULTI                      = 0x80206931\n\tSIOCAIFADDR                       = 0x8040691a\n\tSIOCARPIPLL                       = 0xc0206928\n\tSIOCATMARK                        = 0x40047307\n\tSIOCAUTOADDR                      = 0xc0206926\n\tSIOCAUTONETMASK                   = 0x80206927\n\tSIOCDELMULTI                      = 0x80206932\n\tSIOCDIFADDR                       = 0x80206919\n\tSIOCDIFPHYADDR                    = 0x80206941\n\tSIOCGDRVSPEC                      = 0xc028697b\n\tSIOCGETVLAN                       = 0xc020697f\n\tSIOCGHIWAT                        = 0x40047301\n\tSIOCGIFADDR                       = 0xc0206921\n\tSIOCGIFALTMTU                     = 0xc0206948\n\tSIOCGIFASYNCMAP                   = 0xc020697c\n\tSIOCGIFBOND                       = 0xc0206947\n\tSIOCGIFBRDADDR                    = 0xc0206923\n\tSIOCGIFCAP                        = 0xc020695b\n\tSIOCGIFCONF                       = 0xc00c6924\n\tSIOCGIFDEVMTU                     = 0xc0206944\n\tSIOCGIFDSTADDR                    = 0xc0206922\n\tSIOCGIFFLAGS                      = 0xc0206911\n\tSIOCGIFGENERIC                    = 0xc020693a\n\tSIOCGIFKPI                        = 0xc0206987\n\tSIOCGIFMAC                        = 0xc0206982\n\tSIOCGIFMEDIA                      = 0xc02c6938\n\tSIOCGIFMETRIC                     = 0xc0206917\n\tSIOCGIFMTU                        = 0xc0206933\n\tSIOCGIFNETMASK                    = 0xc0206925\n\tSIOCGIFPDSTADDR                   = 0xc0206940\n\tSIOCGIFPHYS                       = 0xc0206935\n\tSIOCGIFPSRCADDR                   = 0xc020693f\n\tSIOCGIFSTATUS                     = 0xc331693d\n\tSIOCGIFVLAN                       = 0xc020697f\n\tSIOCGIFWAKEFLAGS                  = 0xc0206988\n\tSIOCGLOWAT                        = 0x40047303\n\tSIOCGPGRP                         = 0x40047309\n\tSIOCIFCREATE                      = 0xc0206978\n\tSIOCIFCREATE2                     = 0xc020697a\n\tSIOCIFDESTROY                     = 0x80206979\n\tSIOCIFGCLONERS                    = 0xc0106981\n\tSIOCRSLVMULTI                     = 0xc010693b\n\tSIOCSDRVSPEC                      = 0x8028697b\n\tSIOCSETVLAN                       = 0x8020697e\n\tSIOCSHIWAT                        = 0x80047300\n\tSIOCSIFADDR                       = 0x8020690c\n\tSIOCSIFALTMTU                     = 0x80206945\n\tSIOCSIFASYNCMAP                   = 0x8020697d\n\tSIOCSIFBOND                       = 0x80206946\n\tSIOCSIFBRDADDR                    = 0x80206913\n\tSIOCSIFCAP                        = 0x8020695a\n\tSIOCSIFDSTADDR                    = 0x8020690e\n\tSIOCSIFFLAGS                      = 0x80206910\n\tSIOCSIFGENERIC                    = 0x80206939\n\tSIOCSIFKPI                        = 0x80206986\n\tSIOCSIFLLADDR                     = 0x8020693c\n\tSIOCSIFMAC                        = 0x80206983\n\tSIOCSIFMEDIA                      = 0xc0206937\n\tSIOCSIFMETRIC                     = 0x80206918\n\tSIOCSIFMTU                        = 0x80206934\n\tSIOCSIFNETMASK                    = 0x80206916\n\tSIOCSIFPHYADDR                    = 0x8040693e\n\tSIOCSIFPHYS                       = 0x80206936\n\tSIOCSIFVLAN                       = 0x8020697e\n\tSIOCSLOWAT                        = 0x80047302\n\tSIOCSPGRP                         = 0x80047308\n\tSOCK_DGRAM                        = 0x2\n\tSOCK_MAXADDRLEN                   = 0xff\n\tSOCK_RAW                          = 0x3\n\tSOCK_RDM                          = 0x4\n\tSOCK_SEQPACKET                    = 0x5\n\tSOCK_STREAM                       = 0x1\n\tSOL_SOCKET                        = 0xffff\n\tSOMAXCONN                         = 0x80\n\tSO_ACCEPTCONN                     = 0x2\n\tSO_BROADCAST                      = 0x20\n\tSO_DEBUG                          = 0x1\n\tSO_DONTROUTE                      = 0x10\n\tSO_DONTTRUNC                      = 0x2000\n\tSO_ERROR                          = 0x1007\n\tSO_KEEPALIVE                      = 0x8\n\tSO_LABEL                          = 0x1010\n\tSO_LINGER                         = 0x80\n\tSO_LINGER_SEC                     = 0x1080\n\tSO_NETSVC_MARKING_LEVEL           = 0x1119\n\tSO_NET_SERVICE_TYPE               = 0x1116\n\tSO_NKE                            = 0x1021\n\tSO_NOADDRERR                      = 0x1023\n\tSO_NOSIGPIPE                      = 0x1022\n\tSO_NOTIFYCONFLICT                 = 0x1026\n\tSO_NP_EXTENSIONS                  = 0x1083\n\tSO_NREAD                          = 0x1020\n\tSO_NUMRCVPKT                      = 0x1112\n\tSO_NWRITE                         = 0x1024\n\tSO_OOBINLINE                      = 0x100\n\tSO_PEERLABEL                      = 0x1011\n\tSO_RANDOMPORT                     = 0x1082\n\tSO_RCVBUF                         = 0x1002\n\tSO_RCVLOWAT                       = 0x1004\n\tSO_RCVTIMEO                       = 0x1006\n\tSO_REUSEADDR                      = 0x4\n\tSO_REUSEPORT                      = 0x200\n\tSO_REUSESHAREUID                  = 0x1025\n\tSO_SNDBUF                         = 0x1001\n\tSO_SNDLOWAT                       = 0x1003\n\tSO_SNDTIMEO                       = 0x1005\n\tSO_TIMESTAMP                      = 0x400\n\tSO_TIMESTAMP_MONOTONIC            = 0x800\n\tSO_TYPE                           = 0x1008\n\tSO_UPCALLCLOSEWAIT                = 0x1027\n\tSO_USELOOPBACK                    = 0x40\n\tSO_WANTMORE                       = 0x4000\n\tSO_WANTOOBFLAG                    = 0x8000\n\tS_IEXEC                           = 0x40\n\tS_IFBLK                           = 0x6000\n\tS_IFCHR                           = 0x2000\n\tS_IFDIR                           = 0x4000\n\tS_IFIFO                           = 0x1000\n\tS_IFLNK                           = 0xa000\n\tS_IFMT                            = 0xf000\n\tS_IFREG                           = 0x8000\n\tS_IFSOCK                          = 0xc000\n\tS_IFWHT                           = 0xe000\n\tS_IREAD                           = 0x100\n\tS_IRGRP                           = 0x20\n\tS_IROTH                           = 0x4\n\tS_IRUSR                           = 0x100\n\tS_IRWXG                           = 0x38\n\tS_IRWXO                           = 0x7\n\tS_IRWXU                           = 0x1c0\n\tS_ISGID                           = 0x400\n\tS_ISTXT                           = 0x200\n\tS_ISUID                           = 0x800\n\tS_ISVTX                           = 0x200\n\tS_IWGRP                           = 0x10\n\tS_IWOTH                           = 0x2\n\tS_IWRITE                          = 0x80\n\tS_IWUSR                           = 0x80\n\tS_IXGRP                           = 0x8\n\tS_IXOTH                           = 0x1\n\tS_IXUSR                           = 0x40\n\tTAB0                              = 0x0\n\tTAB1                              = 0x400\n\tTAB2                              = 0x800\n\tTAB3                              = 0x4\n\tTABDLY                            = 0xc04\n\tTCIFLUSH                          = 0x1\n\tTCIOFF                            = 0x3\n\tTCIOFLUSH                         = 0x3\n\tTCION                             = 0x4\n\tTCOFLUSH                          = 0x2\n\tTCOOFF                            = 0x1\n\tTCOON                             = 0x2\n\tTCP_CONNECTIONTIMEOUT             = 0x20\n\tTCP_CONNECTION_INFO               = 0x106\n\tTCP_ENABLE_ECN                    = 0x104\n\tTCP_FASTOPEN                      = 0x105\n\tTCP_KEEPALIVE                     = 0x10\n\tTCP_KEEPCNT                       = 0x102\n\tTCP_KEEPINTVL                     = 0x101\n\tTCP_MAXHLEN                       = 0x3c\n\tTCP_MAXOLEN                       = 0x28\n\tTCP_MAXSEG                        = 0x2\n\tTCP_MAXWIN                        = 0xffff\n\tTCP_MAX_SACK                      = 0x4\n\tTCP_MAX_WINSHIFT                  = 0xe\n\tTCP_MINMSS                        = 0xd8\n\tTCP_MSS                           = 0x200\n\tTCP_NODELAY                       = 0x1\n\tTCP_NOOPT                         = 0x8\n\tTCP_NOPUSH                        = 0x4\n\tTCP_NOTSENT_LOWAT                 = 0x201\n\tTCP_RXT_CONNDROPTIME              = 0x80\n\tTCP_RXT_FINDROP                   = 0x100\n\tTCP_SENDMOREACKS                  = 0x103\n\tTCSAFLUSH                         = 0x2\n\tTIOCCBRK                          = 0x2000747a\n\tTIOCCDTR                          = 0x20007478\n\tTIOCCONS                          = 0x80047462\n\tTIOCDCDTIMESTAMP                  = 0x40107458\n\tTIOCDRAIN                         = 0x2000745e\n\tTIOCDSIMICROCODE                  = 0x20007455\n\tTIOCEXCL                          = 0x2000740d\n\tTIOCEXT                           = 0x80047460\n\tTIOCFLUSH                         = 0x80047410\n\tTIOCGDRAINWAIT                    = 0x40047456\n\tTIOCGETA                          = 0x40487413\n\tTIOCGETD                          = 0x4004741a\n\tTIOCGPGRP                         = 0x40047477\n\tTIOCGWINSZ                        = 0x40087468\n\tTIOCIXOFF                         = 0x20007480\n\tTIOCIXON                          = 0x20007481\n\tTIOCMBIC                          = 0x8004746b\n\tTIOCMBIS                          = 0x8004746c\n\tTIOCMGDTRWAIT                     = 0x4004745a\n\tTIOCMGET                          = 0x4004746a\n\tTIOCMODG                          = 0x40047403\n\tTIOCMODS                          = 0x80047404\n\tTIOCMSDTRWAIT                     = 0x8004745b\n\tTIOCMSET                          = 0x8004746d\n\tTIOCM_CAR                         = 0x40\n\tTIOCM_CD                          = 0x40\n\tTIOCM_CTS                         = 0x20\n\tTIOCM_DSR                         = 0x100\n\tTIOCM_DTR                         = 0x2\n\tTIOCM_LE                          = 0x1\n\tTIOCM_RI                          = 0x80\n\tTIOCM_RNG                         = 0x80\n\tTIOCM_RTS                         = 0x4\n\tTIOCM_SR                          = 0x10\n\tTIOCM_ST                          = 0x8\n\tTIOCNOTTY                         = 0x20007471\n\tTIOCNXCL                          = 0x2000740e\n\tTIOCOUTQ                          = 0x40047473\n\tTIOCPKT                           = 0x80047470\n\tTIOCPKT_DATA                      = 0x0\n\tTIOCPKT_DOSTOP                    = 0x20\n\tTIOCPKT_FLUSHREAD                 = 0x1\n\tTIOCPKT_FLUSHWRITE                = 0x2\n\tTIOCPKT_IOCTL                     = 0x40\n\tTIOCPKT_NOSTOP                    = 0x10\n\tTIOCPKT_START                     = 0x8\n\tTIOCPKT_STOP                      = 0x4\n\tTIOCPTYGNAME                      = 0x40807453\n\tTIOCPTYGRANT                      = 0x20007454\n\tTIOCPTYUNLK                       = 0x20007452\n\tTIOCREMOTE                        = 0x80047469\n\tTIOCSBRK                          = 0x2000747b\n\tTIOCSCONS                         = 0x20007463\n\tTIOCSCTTY                         = 0x20007461\n\tTIOCSDRAINWAIT                    = 0x80047457\n\tTIOCSDTR                          = 0x20007479\n\tTIOCSETA                          = 0x80487414\n\tTIOCSETAF                         = 0x80487416\n\tTIOCSETAW                         = 0x80487415\n\tTIOCSETD                          = 0x8004741b\n\tTIOCSIG                           = 0x2000745f\n\tTIOCSPGRP                         = 0x80047476\n\tTIOCSTART                         = 0x2000746e\n\tTIOCSTAT                          = 0x20007465\n\tTIOCSTI                           = 0x80017472\n\tTIOCSTOP                          = 0x2000746f\n\tTIOCSWINSZ                        = 0x80087467\n\tTIOCTIMESTAMP                     = 0x40107459\n\tTIOCUCNTL                         = 0x80047466\n\tTOSTOP                            = 0x400000\n\tVDISCARD                          = 0xf\n\tVDSUSP                            = 0xb\n\tVEOF                              = 0x0\n\tVEOL                              = 0x1\n\tVEOL2                             = 0x2\n\tVERASE                            = 0x3\n\tVINTR                             = 0x8\n\tVKILL                             = 0x5\n\tVLNEXT                            = 0xe\n\tVMIN                              = 0x10\n\tVM_LOADAVG                        = 0x2\n\tVM_MACHFACTOR                     = 0x4\n\tVM_MAXID                          = 0x6\n\tVM_METER                          = 0x1\n\tVM_SWAPUSAGE                      = 0x5\n\tVQUIT                             = 0x9\n\tVREPRINT                          = 0x6\n\tVSTART                            = 0xc\n\tVSTATUS                           = 0x12\n\tVSTOP                             = 0xd\n\tVSUSP                             = 0xa\n\tVT0                               = 0x0\n\tVT1                               = 0x10000\n\tVTDLY                             = 0x10000\n\tVTIME                             = 0x11\n\tVWERASE                           = 0x4\n\tWCONTINUED                        = 0x10\n\tWCOREFLAG                         = 0x80\n\tWEXITED                           = 0x4\n\tWNOHANG                           = 0x1\n\tWNOWAIT                           = 0x20\n\tWORDSIZE                          = 0x40\n\tWSTOPPED                          = 0x8\n\tWUNTRACED                         = 0x2\n\tXATTR_CREATE                      = 0x2\n\tXATTR_NODEFAULT                   = 0x10\n\tXATTR_NOFOLLOW                    = 0x1\n\tXATTR_NOSECURITY                  = 0x8\n\tXATTR_REPLACE                     = 0x4\n\tXATTR_SHOWCOMPRESSION             = 0x20\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x30)\n\tEADDRNOTAVAIL   = syscall.Errno(0x31)\n\tEAFNOSUPPORT    = syscall.Errno(0x2f)\n\tEAGAIN          = syscall.Errno(0x23)\n\tEALREADY        = syscall.Errno(0x25)\n\tEAUTH           = syscall.Errno(0x50)\n\tEBADARCH        = syscall.Errno(0x56)\n\tEBADEXEC        = syscall.Errno(0x55)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADMACHO       = syscall.Errno(0x58)\n\tEBADMSG         = syscall.Errno(0x5e)\n\tEBADRPC         = syscall.Errno(0x48)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x59)\n\tECHILD          = syscall.Errno(0xa)\n\tECONNABORTED    = syscall.Errno(0x35)\n\tECONNREFUSED    = syscall.Errno(0x3d)\n\tECONNRESET      = syscall.Errno(0x36)\n\tEDEADLK         = syscall.Errno(0xb)\n\tEDESTADDRREQ    = syscall.Errno(0x27)\n\tEDEVERR         = syscall.Errno(0x53)\n\tEDOM            = syscall.Errno(0x21)\n\tEDQUOT          = syscall.Errno(0x45)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFTYPE          = syscall.Errno(0x4f)\n\tEHOSTDOWN       = syscall.Errno(0x40)\n\tEHOSTUNREACH    = syscall.Errno(0x41)\n\tEIDRM           = syscall.Errno(0x5a)\n\tEILSEQ          = syscall.Errno(0x5c)\n\tEINPROGRESS     = syscall.Errno(0x24)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEISCONN         = syscall.Errno(0x38)\n\tEISDIR          = syscall.Errno(0x15)\n\tELAST           = syscall.Errno(0x6a)\n\tELOOP           = syscall.Errno(0x3e)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x28)\n\tEMULTIHOP       = syscall.Errno(0x5f)\n\tENAMETOOLONG    = syscall.Errno(0x3f)\n\tENEEDAUTH       = syscall.Errno(0x51)\n\tENETDOWN        = syscall.Errno(0x32)\n\tENETRESET       = syscall.Errno(0x34)\n\tENETUNREACH     = syscall.Errno(0x33)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x5d)\n\tENOBUFS         = syscall.Errno(0x37)\n\tENODATA         = syscall.Errno(0x60)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x4d)\n\tENOLINK         = syscall.Errno(0x61)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x5b)\n\tENOPOLICY       = syscall.Errno(0x67)\n\tENOPROTOOPT     = syscall.Errno(0x2a)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSR           = syscall.Errno(0x62)\n\tENOSTR          = syscall.Errno(0x63)\n\tENOSYS          = syscall.Errno(0x4e)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x39)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x42)\n\tENOTRECOVERABLE = syscall.Errno(0x68)\n\tENOTSOCK        = syscall.Errno(0x26)\n\tENOTSUP         = syscall.Errno(0x2d)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x66)\n\tEOVERFLOW       = syscall.Errno(0x54)\n\tEOWNERDEAD      = syscall.Errno(0x69)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x2e)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x43)\n\tEPROCUNAVAIL    = syscall.Errno(0x4c)\n\tEPROGMISMATCH   = syscall.Errno(0x4b)\n\tEPROGUNAVAIL    = syscall.Errno(0x4a)\n\tEPROTO          = syscall.Errno(0x64)\n\tEPROTONOSUPPORT = syscall.Errno(0x2b)\n\tEPROTOTYPE      = syscall.Errno(0x29)\n\tEPWROFF         = syscall.Errno(0x52)\n\tEQFULL          = syscall.Errno(0x6a)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x47)\n\tEROFS           = syscall.Errno(0x1e)\n\tERPCMISMATCH    = syscall.Errno(0x49)\n\tESHLIBVERS      = syscall.Errno(0x57)\n\tESHUTDOWN       = syscall.Errno(0x3a)\n\tESOCKTNOSUPPORT = syscall.Errno(0x2c)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x46)\n\tETIME           = syscall.Errno(0x65)\n\tETIMEDOUT       = syscall.Errno(0x3c)\n\tETOOMANYREFS    = syscall.Errno(0x3b)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUSERS          = syscall.Errno(0x44)\n\tEWOULDBLOCK     = syscall.Errno(0x23)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x14)\n\tSIGCONT   = syscall.Signal(0x13)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINFO   = syscall.Signal(0x1d)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x17)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTOP   = syscall.Signal(0x11)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x12)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x10)\n\tSIGUSR1   = syscall.Signal(0x1e)\n\tSIGUSR2   = syscall.Signal(0x1f)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"device not configured\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"resource busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"operation not supported by device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large\"},\n\t{35, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{36, \"EINPROGRESS\", \"operation now in progress\"},\n\t{37, \"EALREADY\", \"operation already in progress\"},\n\t{38, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{39, \"EDESTADDRREQ\", \"destination address required\"},\n\t{40, \"EMSGSIZE\", \"message too long\"},\n\t{41, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{42, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{43, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{44, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{45, \"ENOTSUP\", \"operation not supported\"},\n\t{46, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{47, \"EAFNOSUPPORT\", \"address family not supported by protocol family\"},\n\t{48, \"EADDRINUSE\", \"address already in use\"},\n\t{49, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{50, \"ENETDOWN\", \"network is down\"},\n\t{51, \"ENETUNREACH\", \"network is unreachable\"},\n\t{52, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{53, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{54, \"ECONNRESET\", \"connection reset by peer\"},\n\t{55, \"ENOBUFS\", \"no buffer space available\"},\n\t{56, \"EISCONN\", \"socket is already connected\"},\n\t{57, \"ENOTCONN\", \"socket is not connected\"},\n\t{58, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{59, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{60, \"ETIMEDOUT\", \"operation timed out\"},\n\t{61, \"ECONNREFUSED\", \"connection refused\"},\n\t{62, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{63, \"ENAMETOOLONG\", \"file name too long\"},\n\t{64, \"EHOSTDOWN\", \"host is down\"},\n\t{65, \"EHOSTUNREACH\", \"no route to host\"},\n\t{66, \"ENOTEMPTY\", \"directory not empty\"},\n\t{67, \"EPROCLIM\", \"too many processes\"},\n\t{68, \"EUSERS\", \"too many users\"},\n\t{69, \"EDQUOT\", \"disc quota exceeded\"},\n\t{70, \"ESTALE\", \"stale NFS file handle\"},\n\t{71, \"EREMOTE\", \"too many levels of remote in path\"},\n\t{72, \"EBADRPC\", \"RPC struct is bad\"},\n\t{73, \"ERPCMISMATCH\", \"RPC version wrong\"},\n\t{74, \"EPROGUNAVAIL\", \"RPC prog. not avail\"},\n\t{75, \"EPROGMISMATCH\", \"program version wrong\"},\n\t{76, \"EPROCUNAVAIL\", \"bad procedure for program\"},\n\t{77, \"ENOLCK\", \"no locks available\"},\n\t{78, \"ENOSYS\", \"function not implemented\"},\n\t{79, \"EFTYPE\", \"inappropriate file type or format\"},\n\t{80, \"EAUTH\", \"authentication error\"},\n\t{81, \"ENEEDAUTH\", \"need authenticator\"},\n\t{82, \"EPWROFF\", \"device power is off\"},\n\t{83, \"EDEVERR\", \"device error\"},\n\t{84, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n\t{85, \"EBADEXEC\", \"bad executable (or shared library)\"},\n\t{86, \"EBADARCH\", \"bad CPU type in executable\"},\n\t{87, \"ESHLIBVERS\", \"shared library version mismatch\"},\n\t{88, \"EBADMACHO\", \"malformed Mach-o file\"},\n\t{89, \"ECANCELED\", \"operation canceled\"},\n\t{90, \"EIDRM\", \"identifier removed\"},\n\t{91, \"ENOMSG\", \"no message of desired type\"},\n\t{92, \"EILSEQ\", \"illegal byte sequence\"},\n\t{93, \"ENOATTR\", \"attribute not found\"},\n\t{94, \"EBADMSG\", \"bad message\"},\n\t{95, \"EMULTIHOP\", \"EMULTIHOP (Reserved)\"},\n\t{96, \"ENODATA\", \"no message available on STREAM\"},\n\t{97, \"ENOLINK\", \"ENOLINK (Reserved)\"},\n\t{98, \"ENOSR\", \"no STREAM resources\"},\n\t{99, \"ENOSTR\", \"not a STREAM\"},\n\t{100, \"EPROTO\", \"protocol error\"},\n\t{101, \"ETIME\", \"STREAM ioctl timeout\"},\n\t{102, \"EOPNOTSUPP\", \"operation not supported on socket\"},\n\t{103, \"ENOPOLICY\", \"policy not found\"},\n\t{104, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{105, \"EOWNERDEAD\", \"previous owner died\"},\n\t{106, \"EQFULL\", \"interface output queue is full\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGABRT\", \"abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"suspended (signal)\"},\n\t{18, \"SIGTSTP\", \"suspended\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGINFO\", \"information request\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go",
    "content": "// mkerrors.sh -m64\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build amd64,dragonfly\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -m64 _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                      = 0x10\n\tAF_ATM                            = 0x1e\n\tAF_BLUETOOTH                      = 0x21\n\tAF_CCITT                          = 0xa\n\tAF_CHAOS                          = 0x5\n\tAF_CNT                            = 0x15\n\tAF_COIP                           = 0x14\n\tAF_DATAKIT                        = 0x9\n\tAF_DECnet                         = 0xc\n\tAF_DLI                            = 0xd\n\tAF_E164                           = 0x1a\n\tAF_ECMA                           = 0x8\n\tAF_HYLINK                         = 0xf\n\tAF_IEEE80211                      = 0x23\n\tAF_IMPLINK                        = 0x3\n\tAF_INET                           = 0x2\n\tAF_INET6                          = 0x1c\n\tAF_IPX                            = 0x17\n\tAF_ISDN                           = 0x1a\n\tAF_ISO                            = 0x7\n\tAF_LAT                            = 0xe\n\tAF_LINK                           = 0x12\n\tAF_LOCAL                          = 0x1\n\tAF_MAX                            = 0x24\n\tAF_MPLS                           = 0x22\n\tAF_NATM                           = 0x1d\n\tAF_NETBIOS                        = 0x6\n\tAF_NETGRAPH                       = 0x20\n\tAF_OSI                            = 0x7\n\tAF_PUP                            = 0x4\n\tAF_ROUTE                          = 0x11\n\tAF_SIP                            = 0x18\n\tAF_SNA                            = 0xb\n\tAF_UNIX                           = 0x1\n\tAF_UNSPEC                         = 0x0\n\tALTWERASE                         = 0x200\n\tB0                                = 0x0\n\tB110                              = 0x6e\n\tB115200                           = 0x1c200\n\tB1200                             = 0x4b0\n\tB134                              = 0x86\n\tB14400                            = 0x3840\n\tB150                              = 0x96\n\tB1800                             = 0x708\n\tB19200                            = 0x4b00\n\tB200                              = 0xc8\n\tB230400                           = 0x38400\n\tB2400                             = 0x960\n\tB28800                            = 0x7080\n\tB300                              = 0x12c\n\tB38400                            = 0x9600\n\tB4800                             = 0x12c0\n\tB50                               = 0x32\n\tB57600                            = 0xe100\n\tB600                              = 0x258\n\tB7200                             = 0x1c20\n\tB75                               = 0x4b\n\tB76800                            = 0x12c00\n\tB9600                             = 0x2580\n\tBIOCFLUSH                         = 0x20004268\n\tBIOCGBLEN                         = 0x40044266\n\tBIOCGDLT                          = 0x4004426a\n\tBIOCGDLTLIST                      = 0xc0104279\n\tBIOCGETIF                         = 0x4020426b\n\tBIOCGHDRCMPLT                     = 0x40044274\n\tBIOCGRSIG                         = 0x40044272\n\tBIOCGRTIMEOUT                     = 0x4010426e\n\tBIOCGSEESENT                      = 0x40044276\n\tBIOCGSTATS                        = 0x4008426f\n\tBIOCIMMEDIATE                     = 0x80044270\n\tBIOCLOCK                          = 0x2000427a\n\tBIOCPROMISC                       = 0x20004269\n\tBIOCSBLEN                         = 0xc0044266\n\tBIOCSDLT                          = 0x80044278\n\tBIOCSETF                          = 0x80104267\n\tBIOCSETIF                         = 0x8020426c\n\tBIOCSETWF                         = 0x8010427b\n\tBIOCSHDRCMPLT                     = 0x80044275\n\tBIOCSRSIG                         = 0x80044273\n\tBIOCSRTIMEOUT                     = 0x8010426d\n\tBIOCSSEESENT                      = 0x80044277\n\tBIOCVERSION                       = 0x40044271\n\tBPF_A                             = 0x10\n\tBPF_ABS                           = 0x20\n\tBPF_ADD                           = 0x0\n\tBPF_ALIGNMENT                     = 0x8\n\tBPF_ALU                           = 0x4\n\tBPF_AND                           = 0x50\n\tBPF_B                             = 0x10\n\tBPF_DEFAULTBUFSIZE                = 0x1000\n\tBPF_DIV                           = 0x30\n\tBPF_H                             = 0x8\n\tBPF_IMM                           = 0x0\n\tBPF_IND                           = 0x40\n\tBPF_JA                            = 0x0\n\tBPF_JEQ                           = 0x10\n\tBPF_JGE                           = 0x30\n\tBPF_JGT                           = 0x20\n\tBPF_JMP                           = 0x5\n\tBPF_JSET                          = 0x40\n\tBPF_K                             = 0x0\n\tBPF_LD                            = 0x0\n\tBPF_LDX                           = 0x1\n\tBPF_LEN                           = 0x80\n\tBPF_LSH                           = 0x60\n\tBPF_MAJOR_VERSION                 = 0x1\n\tBPF_MAXBUFSIZE                    = 0x80000\n\tBPF_MAXINSNS                      = 0x200\n\tBPF_MAX_CLONES                    = 0x80\n\tBPF_MEM                           = 0x60\n\tBPF_MEMWORDS                      = 0x10\n\tBPF_MINBUFSIZE                    = 0x20\n\tBPF_MINOR_VERSION                 = 0x1\n\tBPF_MISC                          = 0x7\n\tBPF_MSH                           = 0xa0\n\tBPF_MUL                           = 0x20\n\tBPF_NEG                           = 0x80\n\tBPF_OR                            = 0x40\n\tBPF_RELEASE                       = 0x30bb6\n\tBPF_RET                           = 0x6\n\tBPF_RSH                           = 0x70\n\tBPF_ST                            = 0x2\n\tBPF_STX                           = 0x3\n\tBPF_SUB                           = 0x10\n\tBPF_TAX                           = 0x0\n\tBPF_TXA                           = 0x80\n\tBPF_W                             = 0x0\n\tBPF_X                             = 0x8\n\tBRKINT                            = 0x2\n\tCFLUSH                            = 0xf\n\tCLOCAL                            = 0x8000\n\tCLOCK_MONOTONIC                   = 0x4\n\tCLOCK_MONOTONIC_FAST              = 0xc\n\tCLOCK_MONOTONIC_PRECISE           = 0xb\n\tCLOCK_PROCESS_CPUTIME_ID          = 0xf\n\tCLOCK_PROF                        = 0x2\n\tCLOCK_REALTIME                    = 0x0\n\tCLOCK_REALTIME_FAST               = 0xa\n\tCLOCK_REALTIME_PRECISE            = 0x9\n\tCLOCK_SECOND                      = 0xd\n\tCLOCK_THREAD_CPUTIME_ID           = 0xe\n\tCLOCK_UPTIME                      = 0x5\n\tCLOCK_UPTIME_FAST                 = 0x8\n\tCLOCK_UPTIME_PRECISE              = 0x7\n\tCLOCK_VIRTUAL                     = 0x1\n\tCREAD                             = 0x800\n\tCRTSCTS                           = 0x30000\n\tCS5                               = 0x0\n\tCS6                               = 0x100\n\tCS7                               = 0x200\n\tCS8                               = 0x300\n\tCSIZE                             = 0x300\n\tCSTART                            = 0x11\n\tCSTATUS                           = 0x14\n\tCSTOP                             = 0x13\n\tCSTOPB                            = 0x400\n\tCSUSP                             = 0x1a\n\tCTL_HW                            = 0x6\n\tCTL_KERN                          = 0x1\n\tCTL_MAXNAME                       = 0xc\n\tCTL_NET                           = 0x4\n\tDLT_A429                          = 0xb8\n\tDLT_A653_ICM                      = 0xb9\n\tDLT_AIRONET_HEADER                = 0x78\n\tDLT_APPLE_IP_OVER_IEEE1394        = 0x8a\n\tDLT_ARCNET                        = 0x7\n\tDLT_ARCNET_LINUX                  = 0x81\n\tDLT_ATM_CLIP                      = 0x13\n\tDLT_ATM_RFC1483                   = 0xb\n\tDLT_AURORA                        = 0x7e\n\tDLT_AX25                          = 0x3\n\tDLT_AX25_KISS                     = 0xca\n\tDLT_BACNET_MS_TP                  = 0xa5\n\tDLT_BLUETOOTH_HCI_H4              = 0xbb\n\tDLT_BLUETOOTH_HCI_H4_WITH_PHDR    = 0xc9\n\tDLT_CAN20B                        = 0xbe\n\tDLT_CHAOS                         = 0x5\n\tDLT_CHDLC                         = 0x68\n\tDLT_CISCO_IOS                     = 0x76\n\tDLT_C_HDLC                        = 0x68\n\tDLT_C_HDLC_WITH_DIR               = 0xcd\n\tDLT_DOCSIS                        = 0x8f\n\tDLT_ECONET                        = 0x73\n\tDLT_EN10MB                        = 0x1\n\tDLT_EN3MB                         = 0x2\n\tDLT_ENC                           = 0x6d\n\tDLT_ERF                           = 0xc5\n\tDLT_ERF_ETH                       = 0xaf\n\tDLT_ERF_POS                       = 0xb0\n\tDLT_FDDI                          = 0xa\n\tDLT_FLEXRAY                       = 0xd2\n\tDLT_FRELAY                        = 0x6b\n\tDLT_FRELAY_WITH_DIR               = 0xce\n\tDLT_GCOM_SERIAL                   = 0xad\n\tDLT_GCOM_T1E1                     = 0xac\n\tDLT_GPF_F                         = 0xab\n\tDLT_GPF_T                         = 0xaa\n\tDLT_GPRS_LLC                      = 0xa9\n\tDLT_HHDLC                         = 0x79\n\tDLT_IBM_SN                        = 0x92\n\tDLT_IBM_SP                        = 0x91\n\tDLT_IEEE802                       = 0x6\n\tDLT_IEEE802_11                    = 0x69\n\tDLT_IEEE802_11_RADIO              = 0x7f\n\tDLT_IEEE802_11_RADIO_AVS          = 0xa3\n\tDLT_IEEE802_15_4                  = 0xc3\n\tDLT_IEEE802_15_4_LINUX            = 0xbf\n\tDLT_IEEE802_15_4_NONASK_PHY       = 0xd7\n\tDLT_IEEE802_16_MAC_CPS            = 0xbc\n\tDLT_IEEE802_16_MAC_CPS_RADIO      = 0xc1\n\tDLT_IPFILTER                      = 0x74\n\tDLT_IPMB                          = 0xc7\n\tDLT_IPMB_LINUX                    = 0xd1\n\tDLT_IP_OVER_FC                    = 0x7a\n\tDLT_JUNIPER_ATM1                  = 0x89\n\tDLT_JUNIPER_ATM2                  = 0x87\n\tDLT_JUNIPER_CHDLC                 = 0xb5\n\tDLT_JUNIPER_ES                    = 0x84\n\tDLT_JUNIPER_ETHER                 = 0xb2\n\tDLT_JUNIPER_FRELAY                = 0xb4\n\tDLT_JUNIPER_GGSN                  = 0x85\n\tDLT_JUNIPER_ISM                   = 0xc2\n\tDLT_JUNIPER_MFR                   = 0x86\n\tDLT_JUNIPER_MLFR                  = 0x83\n\tDLT_JUNIPER_MLPPP                 = 0x82\n\tDLT_JUNIPER_MONITOR               = 0xa4\n\tDLT_JUNIPER_PIC_PEER              = 0xae\n\tDLT_JUNIPER_PPP                   = 0xb3\n\tDLT_JUNIPER_PPPOE                 = 0xa7\n\tDLT_JUNIPER_PPPOE_ATM             = 0xa8\n\tDLT_JUNIPER_SERVICES              = 0x88\n\tDLT_JUNIPER_ST                    = 0xc8\n\tDLT_JUNIPER_VP                    = 0xb7\n\tDLT_LAPB_WITH_DIR                 = 0xcf\n\tDLT_LAPD                          = 0xcb\n\tDLT_LIN                           = 0xd4\n\tDLT_LINUX_IRDA                    = 0x90\n\tDLT_LINUX_LAPD                    = 0xb1\n\tDLT_LINUX_SLL                     = 0x71\n\tDLT_LOOP                          = 0x6c\n\tDLT_LTALK                         = 0x72\n\tDLT_MFR                           = 0xb6\n\tDLT_MOST                          = 0xd3\n\tDLT_MTP2                          = 0x8c\n\tDLT_MTP2_WITH_PHDR                = 0x8b\n\tDLT_MTP3                          = 0x8d\n\tDLT_NULL                          = 0x0\n\tDLT_PCI_EXP                       = 0x7d\n\tDLT_PFLOG                         = 0x75\n\tDLT_PFSYNC                        = 0x12\n\tDLT_PPI                           = 0xc0\n\tDLT_PPP                           = 0x9\n\tDLT_PPP_BSDOS                     = 0x10\n\tDLT_PPP_ETHER                     = 0x33\n\tDLT_PPP_PPPD                      = 0xa6\n\tDLT_PPP_SERIAL                    = 0x32\n\tDLT_PPP_WITH_DIR                  = 0xcc\n\tDLT_PRISM_HEADER                  = 0x77\n\tDLT_PRONET                        = 0x4\n\tDLT_RAIF1                         = 0xc6\n\tDLT_RAW                           = 0xc\n\tDLT_REDBACK_SMARTEDGE             = 0x20\n\tDLT_RIO                           = 0x7c\n\tDLT_SCCP                          = 0x8e\n\tDLT_SITA                          = 0xc4\n\tDLT_SLIP                          = 0x8\n\tDLT_SLIP_BSDOS                    = 0xf\n\tDLT_SUNATM                        = 0x7b\n\tDLT_SYMANTEC_FIREWALL             = 0x63\n\tDLT_TZSP                          = 0x80\n\tDLT_USB                           = 0xba\n\tDLT_USB_LINUX                     = 0xbd\n\tDLT_X2E_SERIAL                    = 0xd5\n\tDLT_X2E_XORAYA                    = 0xd6\n\tDT_BLK                            = 0x6\n\tDT_CHR                            = 0x2\n\tDT_DBF                            = 0xf\n\tDT_DIR                            = 0x4\n\tDT_FIFO                           = 0x1\n\tDT_LNK                            = 0xa\n\tDT_REG                            = 0x8\n\tDT_SOCK                           = 0xc\n\tDT_UNKNOWN                        = 0x0\n\tDT_WHT                            = 0xe\n\tECHO                              = 0x8\n\tECHOCTL                           = 0x40\n\tECHOE                             = 0x2\n\tECHOK                             = 0x4\n\tECHOKE                            = 0x1\n\tECHONL                            = 0x10\n\tECHOPRT                           = 0x20\n\tEVFILT_AIO                        = -0x3\n\tEVFILT_EXCEPT                     = -0x8\n\tEVFILT_FS                         = -0xa\n\tEVFILT_MARKER                     = 0xf\n\tEVFILT_PROC                       = -0x5\n\tEVFILT_READ                       = -0x1\n\tEVFILT_SIGNAL                     = -0x6\n\tEVFILT_SYSCOUNT                   = 0xa\n\tEVFILT_TIMER                      = -0x7\n\tEVFILT_USER                       = -0x9\n\tEVFILT_VNODE                      = -0x4\n\tEVFILT_WRITE                      = -0x2\n\tEV_ADD                            = 0x1\n\tEV_CLEAR                          = 0x20\n\tEV_DELETE                         = 0x2\n\tEV_DISABLE                        = 0x8\n\tEV_DISPATCH                       = 0x80\n\tEV_ENABLE                         = 0x4\n\tEV_EOF                            = 0x8000\n\tEV_ERROR                          = 0x4000\n\tEV_FLAG1                          = 0x2000\n\tEV_NODATA                         = 0x1000\n\tEV_ONESHOT                        = 0x10\n\tEV_RECEIPT                        = 0x40\n\tEV_SYSFLAGS                       = 0xf000\n\tEXTA                              = 0x4b00\n\tEXTB                              = 0x9600\n\tEXTEXIT_LWP                       = 0x10000\n\tEXTEXIT_PROC                      = 0x0\n\tEXTEXIT_SETINT                    = 0x1\n\tEXTEXIT_SIMPLE                    = 0x0\n\tEXTPROC                           = 0x800\n\tFD_CLOEXEC                        = 0x1\n\tFD_SETSIZE                        = 0x400\n\tFLUSHO                            = 0x800000\n\tF_DUP2FD                          = 0xa\n\tF_DUP2FD_CLOEXEC                  = 0x12\n\tF_DUPFD                           = 0x0\n\tF_DUPFD_CLOEXEC                   = 0x11\n\tF_GETFD                           = 0x1\n\tF_GETFL                           = 0x3\n\tF_GETLK                           = 0x7\n\tF_GETOWN                          = 0x5\n\tF_OK                              = 0x0\n\tF_RDLCK                           = 0x1\n\tF_SETFD                           = 0x2\n\tF_SETFL                           = 0x4\n\tF_SETLK                           = 0x8\n\tF_SETLKW                          = 0x9\n\tF_SETOWN                          = 0x6\n\tF_UNLCK                           = 0x2\n\tF_WRLCK                           = 0x3\n\tHUPCL                             = 0x4000\n\tHW_MACHINE                        = 0x1\n\tICANON                            = 0x100\n\tICMP6_FILTER                      = 0x12\n\tICRNL                             = 0x100\n\tIEXTEN                            = 0x400\n\tIFAN_ARRIVAL                      = 0x0\n\tIFAN_DEPARTURE                    = 0x1\n\tIFF_ALLMULTI                      = 0x200\n\tIFF_ALTPHYS                       = 0x4000\n\tIFF_BROADCAST                     = 0x2\n\tIFF_CANTCHANGE                    = 0x118e72\n\tIFF_DEBUG                         = 0x4\n\tIFF_LINK0                         = 0x1000\n\tIFF_LINK1                         = 0x2000\n\tIFF_LINK2                         = 0x4000\n\tIFF_LOOPBACK                      = 0x8\n\tIFF_MONITOR                       = 0x40000\n\tIFF_MULTICAST                     = 0x8000\n\tIFF_NOARP                         = 0x80\n\tIFF_NPOLLING                      = 0x100000\n\tIFF_OACTIVE                       = 0x400\n\tIFF_OACTIVE_COMPAT                = 0x400\n\tIFF_POINTOPOINT                   = 0x10\n\tIFF_POLLING                       = 0x10000\n\tIFF_POLLING_COMPAT                = 0x10000\n\tIFF_PPROMISC                      = 0x20000\n\tIFF_PROMISC                       = 0x100\n\tIFF_RUNNING                       = 0x40\n\tIFF_SIMPLEX                       = 0x800\n\tIFF_SMART                         = 0x20\n\tIFF_STATICARP                     = 0x80000\n\tIFF_UP                            = 0x1\n\tIFNAMSIZ                          = 0x10\n\tIFT_1822                          = 0x2\n\tIFT_A12MPPSWITCH                  = 0x82\n\tIFT_AAL2                          = 0xbb\n\tIFT_AAL5                          = 0x31\n\tIFT_ADSL                          = 0x5e\n\tIFT_AFLANE8023                    = 0x3b\n\tIFT_AFLANE8025                    = 0x3c\n\tIFT_ARAP                          = 0x58\n\tIFT_ARCNET                        = 0x23\n\tIFT_ARCNETPLUS                    = 0x24\n\tIFT_ASYNC                         = 0x54\n\tIFT_ATM                           = 0x25\n\tIFT_ATMDXI                        = 0x69\n\tIFT_ATMFUNI                       = 0x6a\n\tIFT_ATMIMA                        = 0x6b\n\tIFT_ATMLOGICAL                    = 0x50\n\tIFT_ATMRADIO                      = 0xbd\n\tIFT_ATMSUBINTERFACE               = 0x86\n\tIFT_ATMVCIENDPT                   = 0xc2\n\tIFT_ATMVIRTUAL                    = 0x95\n\tIFT_BGPPOLICYACCOUNTING           = 0xa2\n\tIFT_BRIDGE                        = 0xd1\n\tIFT_BSC                           = 0x53\n\tIFT_CARP                          = 0xf8\n\tIFT_CCTEMUL                       = 0x3d\n\tIFT_CEPT                          = 0x13\n\tIFT_CES                           = 0x85\n\tIFT_CHANNEL                       = 0x46\n\tIFT_CNR                           = 0x55\n\tIFT_COFFEE                        = 0x84\n\tIFT_COMPOSITELINK                 = 0x9b\n\tIFT_DCN                           = 0x8d\n\tIFT_DIGITALPOWERLINE              = 0x8a\n\tIFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba\n\tIFT_DLSW                          = 0x4a\n\tIFT_DOCSCABLEDOWNSTREAM           = 0x80\n\tIFT_DOCSCABLEMACLAYER             = 0x7f\n\tIFT_DOCSCABLEUPSTREAM             = 0x81\n\tIFT_DS0                           = 0x51\n\tIFT_DS0BUNDLE                     = 0x52\n\tIFT_DS1FDL                        = 0xaa\n\tIFT_DS3                           = 0x1e\n\tIFT_DTM                           = 0x8c\n\tIFT_DVBASILN                      = 0xac\n\tIFT_DVBASIOUT                     = 0xad\n\tIFT_DVBRCCDOWNSTREAM              = 0x93\n\tIFT_DVBRCCMACLAYER                = 0x92\n\tIFT_DVBRCCUPSTREAM                = 0x94\n\tIFT_ENC                           = 0xf4\n\tIFT_EON                           = 0x19\n\tIFT_EPLRS                         = 0x57\n\tIFT_ESCON                         = 0x49\n\tIFT_ETHER                         = 0x6\n\tIFT_FAITH                         = 0xf2\n\tIFT_FAST                          = 0x7d\n\tIFT_FASTETHER                     = 0x3e\n\tIFT_FASTETHERFX                   = 0x45\n\tIFT_FDDI                          = 0xf\n\tIFT_FIBRECHANNEL                  = 0x38\n\tIFT_FRAMERELAYINTERCONNECT        = 0x3a\n\tIFT_FRAMERELAYMPI                 = 0x5c\n\tIFT_FRDLCIENDPT                   = 0xc1\n\tIFT_FRELAY                        = 0x20\n\tIFT_FRELAYDCE                     = 0x2c\n\tIFT_FRF16MFRBUNDLE                = 0xa3\n\tIFT_FRFORWARD                     = 0x9e\n\tIFT_G703AT2MB                     = 0x43\n\tIFT_G703AT64K                     = 0x42\n\tIFT_GIF                           = 0xf0\n\tIFT_GIGABITETHERNET               = 0x75\n\tIFT_GR303IDT                      = 0xb2\n\tIFT_GR303RDT                      = 0xb1\n\tIFT_H323GATEKEEPER                = 0xa4\n\tIFT_H323PROXY                     = 0xa5\n\tIFT_HDH1822                       = 0x3\n\tIFT_HDLC                          = 0x76\n\tIFT_HDSL2                         = 0xa8\n\tIFT_HIPERLAN2                     = 0xb7\n\tIFT_HIPPI                         = 0x2f\n\tIFT_HIPPIINTERFACE                = 0x39\n\tIFT_HOSTPAD                       = 0x5a\n\tIFT_HSSI                          = 0x2e\n\tIFT_HY                            = 0xe\n\tIFT_IBM370PARCHAN                 = 0x48\n\tIFT_IDSL                          = 0x9a\n\tIFT_IEEE1394                      = 0x90\n\tIFT_IEEE80211                     = 0x47\n\tIFT_IEEE80212                     = 0x37\n\tIFT_IEEE8023ADLAG                 = 0xa1\n\tIFT_IFGSN                         = 0x91\n\tIFT_IMT                           = 0xbe\n\tIFT_INTERLEAVE                    = 0x7c\n\tIFT_IP                            = 0x7e\n\tIFT_IPFORWARD                     = 0x8e\n\tIFT_IPOVERATM                     = 0x72\n\tIFT_IPOVERCDLC                    = 0x6d\n\tIFT_IPOVERCLAW                    = 0x6e\n\tIFT_IPSWITCH                      = 0x4e\n\tIFT_ISDN                          = 0x3f\n\tIFT_ISDNBASIC                     = 0x14\n\tIFT_ISDNPRIMARY                   = 0x15\n\tIFT_ISDNS                         = 0x4b\n\tIFT_ISDNU                         = 0x4c\n\tIFT_ISO88022LLC                   = 0x29\n\tIFT_ISO88023                      = 0x7\n\tIFT_ISO88024                      = 0x8\n\tIFT_ISO88025                      = 0x9\n\tIFT_ISO88025CRFPINT               = 0x62\n\tIFT_ISO88025DTR                   = 0x56\n\tIFT_ISO88025FIBER                 = 0x73\n\tIFT_ISO88026                      = 0xa\n\tIFT_ISUP                          = 0xb3\n\tIFT_L2VLAN                        = 0x87\n\tIFT_L3IPVLAN                      = 0x88\n\tIFT_L3IPXVLAN                     = 0x89\n\tIFT_LAPB                          = 0x10\n\tIFT_LAPD                          = 0x4d\n\tIFT_LAPF                          = 0x77\n\tIFT_LOCALTALK                     = 0x2a\n\tIFT_LOOP                          = 0x18\n\tIFT_MEDIAMAILOVERIP               = 0x8b\n\tIFT_MFSIGLINK                     = 0xa7\n\tIFT_MIOX25                        = 0x26\n\tIFT_MODEM                         = 0x30\n\tIFT_MPC                           = 0x71\n\tIFT_MPLS                          = 0xa6\n\tIFT_MPLSTUNNEL                    = 0x96\n\tIFT_MSDSL                         = 0x8f\n\tIFT_MVL                           = 0xbf\n\tIFT_MYRINET                       = 0x63\n\tIFT_NFAS                          = 0xaf\n\tIFT_NSIP                          = 0x1b\n\tIFT_OPTICALCHANNEL                = 0xc3\n\tIFT_OPTICALTRANSPORT              = 0xc4\n\tIFT_OTHER                         = 0x1\n\tIFT_P10                           = 0xc\n\tIFT_P80                           = 0xd\n\tIFT_PARA                          = 0x22\n\tIFT_PFLOG                         = 0xf5\n\tIFT_PFSYNC                        = 0xf6\n\tIFT_PLC                           = 0xae\n\tIFT_POS                           = 0xab\n\tIFT_PPP                           = 0x17\n\tIFT_PPPMULTILINKBUNDLE            = 0x6c\n\tIFT_PROPBWAP2MP                   = 0xb8\n\tIFT_PROPCNLS                      = 0x59\n\tIFT_PROPDOCSWIRELESSDOWNSTREAM    = 0xb5\n\tIFT_PROPDOCSWIRELESSMACLAYER      = 0xb4\n\tIFT_PROPDOCSWIRELESSUPSTREAM      = 0xb6\n\tIFT_PROPMUX                       = 0x36\n\tIFT_PROPVIRTUAL                   = 0x35\n\tIFT_PROPWIRELESSP2P               = 0x9d\n\tIFT_PTPSERIAL                     = 0x16\n\tIFT_PVC                           = 0xf1\n\tIFT_QLLC                          = 0x44\n\tIFT_RADIOMAC                      = 0xbc\n\tIFT_RADSL                         = 0x5f\n\tIFT_REACHDSL                      = 0xc0\n\tIFT_RFC1483                       = 0x9f\n\tIFT_RS232                         = 0x21\n\tIFT_RSRB                          = 0x4f\n\tIFT_SDLC                          = 0x11\n\tIFT_SDSL                          = 0x60\n\tIFT_SHDSL                         = 0xa9\n\tIFT_SIP                           = 0x1f\n\tIFT_SLIP                          = 0x1c\n\tIFT_SMDSDXI                       = 0x2b\n\tIFT_SMDSICIP                      = 0x34\n\tIFT_SONET                         = 0x27\n\tIFT_SONETOVERHEADCHANNEL          = 0xb9\n\tIFT_SONETPATH                     = 0x32\n\tIFT_SONETVT                       = 0x33\n\tIFT_SRP                           = 0x97\n\tIFT_SS7SIGLINK                    = 0x9c\n\tIFT_STACKTOSTACK                  = 0x6f\n\tIFT_STARLAN                       = 0xb\n\tIFT_STF                           = 0xf3\n\tIFT_T1                            = 0x12\n\tIFT_TDLC                          = 0x74\n\tIFT_TERMPAD                       = 0x5b\n\tIFT_TR008                         = 0xb0\n\tIFT_TRANSPHDLC                    = 0x7b\n\tIFT_TUNNEL                        = 0x83\n\tIFT_ULTRA                         = 0x1d\n\tIFT_USB                           = 0xa0\n\tIFT_V11                           = 0x40\n\tIFT_V35                           = 0x2d\n\tIFT_V36                           = 0x41\n\tIFT_V37                           = 0x78\n\tIFT_VDSL                          = 0x61\n\tIFT_VIRTUALIPADDRESS              = 0x70\n\tIFT_VOICEEM                       = 0x64\n\tIFT_VOICEENCAP                    = 0x67\n\tIFT_VOICEFXO                      = 0x65\n\tIFT_VOICEFXS                      = 0x66\n\tIFT_VOICEOVERATM                  = 0x98\n\tIFT_VOICEOVERFRAMERELAY           = 0x99\n\tIFT_VOICEOVERIP                   = 0x68\n\tIFT_X213                          = 0x5d\n\tIFT_X25                           = 0x5\n\tIFT_X25DDN                        = 0x4\n\tIFT_X25HUNTGROUP                  = 0x7a\n\tIFT_X25MLP                        = 0x79\n\tIFT_X25PLE                        = 0x28\n\tIFT_XETHER                        = 0x1a\n\tIGNBRK                            = 0x1\n\tIGNCR                             = 0x80\n\tIGNPAR                            = 0x4\n\tIMAXBEL                           = 0x2000\n\tINLCR                             = 0x40\n\tINPCK                             = 0x10\n\tIN_CLASSA_HOST                    = 0xffffff\n\tIN_CLASSA_MAX                     = 0x80\n\tIN_CLASSA_NET                     = 0xff000000\n\tIN_CLASSA_NSHIFT                  = 0x18\n\tIN_CLASSB_HOST                    = 0xffff\n\tIN_CLASSB_MAX                     = 0x10000\n\tIN_CLASSB_NET                     = 0xffff0000\n\tIN_CLASSB_NSHIFT                  = 0x10\n\tIN_CLASSC_HOST                    = 0xff\n\tIN_CLASSC_NET                     = 0xffffff00\n\tIN_CLASSC_NSHIFT                  = 0x8\n\tIN_CLASSD_HOST                    = 0xfffffff\n\tIN_CLASSD_NET                     = 0xf0000000\n\tIN_CLASSD_NSHIFT                  = 0x1c\n\tIN_LOOPBACKNET                    = 0x7f\n\tIPPROTO_3PC                       = 0x22\n\tIPPROTO_ADFS                      = 0x44\n\tIPPROTO_AH                        = 0x33\n\tIPPROTO_AHIP                      = 0x3d\n\tIPPROTO_APES                      = 0x63\n\tIPPROTO_ARGUS                     = 0xd\n\tIPPROTO_AX25                      = 0x5d\n\tIPPROTO_BHA                       = 0x31\n\tIPPROTO_BLT                       = 0x1e\n\tIPPROTO_BRSATMON                  = 0x4c\n\tIPPROTO_CARP                      = 0x70\n\tIPPROTO_CFTP                      = 0x3e\n\tIPPROTO_CHAOS                     = 0x10\n\tIPPROTO_CMTP                      = 0x26\n\tIPPROTO_CPHB                      = 0x49\n\tIPPROTO_CPNX                      = 0x48\n\tIPPROTO_DDP                       = 0x25\n\tIPPROTO_DGP                       = 0x56\n\tIPPROTO_DIVERT                    = 0xfe\n\tIPPROTO_DONE                      = 0x101\n\tIPPROTO_DSTOPTS                   = 0x3c\n\tIPPROTO_EGP                       = 0x8\n\tIPPROTO_EMCON                     = 0xe\n\tIPPROTO_ENCAP                     = 0x62\n\tIPPROTO_EON                       = 0x50\n\tIPPROTO_ESP                       = 0x32\n\tIPPROTO_ETHERIP                   = 0x61\n\tIPPROTO_FRAGMENT                  = 0x2c\n\tIPPROTO_GGP                       = 0x3\n\tIPPROTO_GMTP                      = 0x64\n\tIPPROTO_GRE                       = 0x2f\n\tIPPROTO_HELLO                     = 0x3f\n\tIPPROTO_HMP                       = 0x14\n\tIPPROTO_HOPOPTS                   = 0x0\n\tIPPROTO_ICMP                      = 0x1\n\tIPPROTO_ICMPV6                    = 0x3a\n\tIPPROTO_IDP                       = 0x16\n\tIPPROTO_IDPR                      = 0x23\n\tIPPROTO_IDRP                      = 0x2d\n\tIPPROTO_IGMP                      = 0x2\n\tIPPROTO_IGP                       = 0x55\n\tIPPROTO_IGRP                      = 0x58\n\tIPPROTO_IL                        = 0x28\n\tIPPROTO_INLSP                     = 0x34\n\tIPPROTO_INP                       = 0x20\n\tIPPROTO_IP                        = 0x0\n\tIPPROTO_IPCOMP                    = 0x6c\n\tIPPROTO_IPCV                      = 0x47\n\tIPPROTO_IPEIP                     = 0x5e\n\tIPPROTO_IPIP                      = 0x4\n\tIPPROTO_IPPC                      = 0x43\n\tIPPROTO_IPV4                      = 0x4\n\tIPPROTO_IPV6                      = 0x29\n\tIPPROTO_IRTP                      = 0x1c\n\tIPPROTO_KRYPTOLAN                 = 0x41\n\tIPPROTO_LARP                      = 0x5b\n\tIPPROTO_LEAF1                     = 0x19\n\tIPPROTO_LEAF2                     = 0x1a\n\tIPPROTO_MAX                       = 0x100\n\tIPPROTO_MAXID                     = 0x34\n\tIPPROTO_MEAS                      = 0x13\n\tIPPROTO_MHRP                      = 0x30\n\tIPPROTO_MICP                      = 0x5f\n\tIPPROTO_MOBILE                    = 0x37\n\tIPPROTO_MTP                       = 0x5c\n\tIPPROTO_MUX                       = 0x12\n\tIPPROTO_ND                        = 0x4d\n\tIPPROTO_NHRP                      = 0x36\n\tIPPROTO_NONE                      = 0x3b\n\tIPPROTO_NSP                       = 0x1f\n\tIPPROTO_NVPII                     = 0xb\n\tIPPROTO_OSPFIGP                   = 0x59\n\tIPPROTO_PFSYNC                    = 0xf0\n\tIPPROTO_PGM                       = 0x71\n\tIPPROTO_PIGP                      = 0x9\n\tIPPROTO_PIM                       = 0x67\n\tIPPROTO_PRM                       = 0x15\n\tIPPROTO_PUP                       = 0xc\n\tIPPROTO_PVP                       = 0x4b\n\tIPPROTO_RAW                       = 0xff\n\tIPPROTO_RCCMON                    = 0xa\n\tIPPROTO_RDP                       = 0x1b\n\tIPPROTO_ROUTING                   = 0x2b\n\tIPPROTO_RSVP                      = 0x2e\n\tIPPROTO_RVD                       = 0x42\n\tIPPROTO_SATEXPAK                  = 0x40\n\tIPPROTO_SATMON                    = 0x45\n\tIPPROTO_SCCSP                     = 0x60\n\tIPPROTO_SDRP                      = 0x2a\n\tIPPROTO_SEP                       = 0x21\n\tIPPROTO_SKIP                      = 0x39\n\tIPPROTO_SRPC                      = 0x5a\n\tIPPROTO_ST                        = 0x7\n\tIPPROTO_SVMTP                     = 0x52\n\tIPPROTO_SWIPE                     = 0x35\n\tIPPROTO_TCF                       = 0x57\n\tIPPROTO_TCP                       = 0x6\n\tIPPROTO_TLSP                      = 0x38\n\tIPPROTO_TP                        = 0x1d\n\tIPPROTO_TPXX                      = 0x27\n\tIPPROTO_TRUNK1                    = 0x17\n\tIPPROTO_TRUNK2                    = 0x18\n\tIPPROTO_TTP                       = 0x54\n\tIPPROTO_UDP                       = 0x11\n\tIPPROTO_UNKNOWN                   = 0x102\n\tIPPROTO_VINES                     = 0x53\n\tIPPROTO_VISA                      = 0x46\n\tIPPROTO_VMTP                      = 0x51\n\tIPPROTO_WBEXPAK                   = 0x4f\n\tIPPROTO_WBMON                     = 0x4e\n\tIPPROTO_WSN                       = 0x4a\n\tIPPROTO_XNET                      = 0xf\n\tIPPROTO_XTP                       = 0x24\n\tIPV6_AUTOFLOWLABEL                = 0x3b\n\tIPV6_BINDV6ONLY                   = 0x1b\n\tIPV6_CHECKSUM                     = 0x1a\n\tIPV6_DEFAULT_MULTICAST_HOPS       = 0x1\n\tIPV6_DEFAULT_MULTICAST_LOOP       = 0x1\n\tIPV6_DEFHLIM                      = 0x40\n\tIPV6_DONTFRAG                     = 0x3e\n\tIPV6_DSTOPTS                      = 0x32\n\tIPV6_FAITH                        = 0x1d\n\tIPV6_FLOWINFO_MASK                = 0xffffff0f\n\tIPV6_FLOWLABEL_MASK               = 0xffff0f00\n\tIPV6_FRAGTTL                      = 0x78\n\tIPV6_FW_ADD                       = 0x1e\n\tIPV6_FW_DEL                       = 0x1f\n\tIPV6_FW_FLUSH                     = 0x20\n\tIPV6_FW_GET                       = 0x22\n\tIPV6_FW_ZERO                      = 0x21\n\tIPV6_HLIMDEC                      = 0x1\n\tIPV6_HOPLIMIT                     = 0x2f\n\tIPV6_HOPOPTS                      = 0x31\n\tIPV6_IPSEC_POLICY                 = 0x1c\n\tIPV6_JOIN_GROUP                   = 0xc\n\tIPV6_LEAVE_GROUP                  = 0xd\n\tIPV6_MAXHLIM                      = 0xff\n\tIPV6_MAXPACKET                    = 0xffff\n\tIPV6_MINHLIM                      = 0x28\n\tIPV6_MMTU                         = 0x500\n\tIPV6_MSFILTER                     = 0x4a\n\tIPV6_MULTICAST_HOPS               = 0xa\n\tIPV6_MULTICAST_IF                 = 0x9\n\tIPV6_MULTICAST_LOOP               = 0xb\n\tIPV6_NEXTHOP                      = 0x30\n\tIPV6_PATHMTU                      = 0x2c\n\tIPV6_PKTINFO                      = 0x2e\n\tIPV6_PKTOPTIONS                   = 0x34\n\tIPV6_PORTRANGE                    = 0xe\n\tIPV6_PORTRANGE_DEFAULT            = 0x0\n\tIPV6_PORTRANGE_HIGH               = 0x1\n\tIPV6_PORTRANGE_LOW                = 0x2\n\tIPV6_PREFER_TEMPADDR              = 0x3f\n\tIPV6_RECVDSTOPTS                  = 0x28\n\tIPV6_RECVHOPLIMIT                 = 0x25\n\tIPV6_RECVHOPOPTS                  = 0x27\n\tIPV6_RECVPATHMTU                  = 0x2b\n\tIPV6_RECVPKTINFO                  = 0x24\n\tIPV6_RECVRTHDR                    = 0x26\n\tIPV6_RECVTCLASS                   = 0x39\n\tIPV6_RTHDR                        = 0x33\n\tIPV6_RTHDRDSTOPTS                 = 0x23\n\tIPV6_RTHDR_LOOSE                  = 0x0\n\tIPV6_RTHDR_STRICT                 = 0x1\n\tIPV6_RTHDR_TYPE_0                 = 0x0\n\tIPV6_SOCKOPT_RESERVED1            = 0x3\n\tIPV6_TCLASS                       = 0x3d\n\tIPV6_UNICAST_HOPS                 = 0x4\n\tIPV6_USE_MIN_MTU                  = 0x2a\n\tIPV6_V6ONLY                       = 0x1b\n\tIPV6_VERSION                      = 0x60\n\tIPV6_VERSION_MASK                 = 0xf0\n\tIP_ADD_MEMBERSHIP                 = 0xc\n\tIP_DEFAULT_MULTICAST_LOOP         = 0x1\n\tIP_DEFAULT_MULTICAST_TTL          = 0x1\n\tIP_DF                             = 0x4000\n\tIP_DROP_MEMBERSHIP                = 0xd\n\tIP_DUMMYNET_CONFIGURE             = 0x3c\n\tIP_DUMMYNET_DEL                   = 0x3d\n\tIP_DUMMYNET_FLUSH                 = 0x3e\n\tIP_DUMMYNET_GET                   = 0x40\n\tIP_FAITH                          = 0x16\n\tIP_FW_ADD                         = 0x32\n\tIP_FW_DEL                         = 0x33\n\tIP_FW_FLUSH                       = 0x34\n\tIP_FW_GET                         = 0x36\n\tIP_FW_RESETLOG                    = 0x37\n\tIP_FW_X                           = 0x31\n\tIP_FW_ZERO                        = 0x35\n\tIP_HDRINCL                        = 0x2\n\tIP_IPSEC_POLICY                   = 0x15\n\tIP_MAXPACKET                      = 0xffff\n\tIP_MAX_MEMBERSHIPS                = 0x14\n\tIP_MF                             = 0x2000\n\tIP_MINTTL                         = 0x42\n\tIP_MSS                            = 0x240\n\tIP_MULTICAST_IF                   = 0x9\n\tIP_MULTICAST_LOOP                 = 0xb\n\tIP_MULTICAST_TTL                  = 0xa\n\tIP_MULTICAST_VIF                  = 0xe\n\tIP_OFFMASK                        = 0x1fff\n\tIP_OPTIONS                        = 0x1\n\tIP_PORTRANGE                      = 0x13\n\tIP_PORTRANGE_DEFAULT              = 0x0\n\tIP_PORTRANGE_HIGH                 = 0x1\n\tIP_PORTRANGE_LOW                  = 0x2\n\tIP_RECVDSTADDR                    = 0x7\n\tIP_RECVIF                         = 0x14\n\tIP_RECVOPTS                       = 0x5\n\tIP_RECVRETOPTS                    = 0x6\n\tIP_RECVTTL                        = 0x41\n\tIP_RETOPTS                        = 0x8\n\tIP_RF                             = 0x8000\n\tIP_RSVP_OFF                       = 0x10\n\tIP_RSVP_ON                        = 0xf\n\tIP_RSVP_VIF_OFF                   = 0x12\n\tIP_RSVP_VIF_ON                    = 0x11\n\tIP_TOS                            = 0x3\n\tIP_TTL                            = 0x4\n\tISIG                              = 0x80\n\tISTRIP                            = 0x20\n\tIXANY                             = 0x800\n\tIXOFF                             = 0x400\n\tIXON                              = 0x200\n\tKERN_HOSTNAME                     = 0xa\n\tKERN_OSRELEASE                    = 0x2\n\tKERN_OSTYPE                       = 0x1\n\tKERN_VERSION                      = 0x4\n\tLOCK_EX                           = 0x2\n\tLOCK_NB                           = 0x4\n\tLOCK_SH                           = 0x1\n\tLOCK_UN                           = 0x8\n\tMADV_AUTOSYNC                     = 0x7\n\tMADV_CONTROL_END                  = 0xb\n\tMADV_CONTROL_START                = 0xa\n\tMADV_CORE                         = 0x9\n\tMADV_DONTNEED                     = 0x4\n\tMADV_FREE                         = 0x5\n\tMADV_INVAL                        = 0xa\n\tMADV_NOCORE                       = 0x8\n\tMADV_NORMAL                       = 0x0\n\tMADV_NOSYNC                       = 0x6\n\tMADV_RANDOM                       = 0x1\n\tMADV_SEQUENTIAL                   = 0x2\n\tMADV_SETMAP                       = 0xb\n\tMADV_WILLNEED                     = 0x3\n\tMAP_ANON                          = 0x1000\n\tMAP_ANONYMOUS                     = 0x1000\n\tMAP_COPY                          = 0x2\n\tMAP_FILE                          = 0x0\n\tMAP_FIXED                         = 0x10\n\tMAP_HASSEMAPHORE                  = 0x200\n\tMAP_INHERIT                       = 0x80\n\tMAP_NOCORE                        = 0x20000\n\tMAP_NOEXTEND                      = 0x100\n\tMAP_NORESERVE                     = 0x40\n\tMAP_NOSYNC                        = 0x800\n\tMAP_PRIVATE                       = 0x2\n\tMAP_RENAME                        = 0x20\n\tMAP_SHARED                        = 0x1\n\tMAP_SIZEALIGN                     = 0x40000\n\tMAP_STACK                         = 0x400\n\tMAP_TRYFIXED                      = 0x10000\n\tMAP_VPAGETABLE                    = 0x2000\n\tMCL_CURRENT                       = 0x1\n\tMCL_FUTURE                        = 0x2\n\tMNT_ASYNC                         = 0x40\n\tMNT_AUTOMOUNTED                   = 0x20\n\tMNT_CMDFLAGS                      = 0xf0000\n\tMNT_DEFEXPORTED                   = 0x200\n\tMNT_DELEXPORT                     = 0x20000\n\tMNT_EXKERB                        = 0x800\n\tMNT_EXPORTANON                    = 0x400\n\tMNT_EXPORTED                      = 0x100\n\tMNT_EXPUBLIC                      = 0x20000000\n\tMNT_EXRDONLY                      = 0x80\n\tMNT_FORCE                         = 0x80000\n\tMNT_IGNORE                        = 0x800000\n\tMNT_LAZY                          = 0x4\n\tMNT_LOCAL                         = 0x1000\n\tMNT_NOATIME                       = 0x10000000\n\tMNT_NOCLUSTERR                    = 0x40000000\n\tMNT_NOCLUSTERW                    = 0x80000000\n\tMNT_NODEV                         = 0x10\n\tMNT_NOEXEC                        = 0x4\n\tMNT_NOSUID                        = 0x8\n\tMNT_NOSYMFOLLOW                   = 0x400000\n\tMNT_NOWAIT                        = 0x2\n\tMNT_QUOTA                         = 0x2000\n\tMNT_RDONLY                        = 0x1\n\tMNT_RELOAD                        = 0x40000\n\tMNT_ROOTFS                        = 0x4000\n\tMNT_SOFTDEP                       = 0x200000\n\tMNT_SUIDDIR                       = 0x100000\n\tMNT_SYNCHRONOUS                   = 0x2\n\tMNT_TRIM                          = 0x1000000\n\tMNT_UPDATE                        = 0x10000\n\tMNT_USER                          = 0x8000\n\tMNT_VISFLAGMASK                   = 0xf1f0ffff\n\tMNT_WAIT                          = 0x1\n\tMSG_CMSG_CLOEXEC                  = 0x1000\n\tMSG_CTRUNC                        = 0x20\n\tMSG_DONTROUTE                     = 0x4\n\tMSG_DONTWAIT                      = 0x80\n\tMSG_EOF                           = 0x100\n\tMSG_EOR                           = 0x8\n\tMSG_FBLOCKING                     = 0x10000\n\tMSG_FMASK                         = 0xffff0000\n\tMSG_FNONBLOCKING                  = 0x20000\n\tMSG_NOSIGNAL                      = 0x400\n\tMSG_OOB                           = 0x1\n\tMSG_PEEK                          = 0x2\n\tMSG_SYNC                          = 0x800\n\tMSG_TRUNC                         = 0x10\n\tMSG_UNUSED09                      = 0x200\n\tMSG_WAITALL                       = 0x40\n\tMS_ASYNC                          = 0x1\n\tMS_INVALIDATE                     = 0x2\n\tMS_SYNC                           = 0x0\n\tNAME_MAX                          = 0xff\n\tNET_RT_DUMP                       = 0x1\n\tNET_RT_FLAGS                      = 0x2\n\tNET_RT_IFLIST                     = 0x3\n\tNET_RT_MAXID                      = 0x4\n\tNOFLSH                            = 0x80000000\n\tNOKERNINFO                        = 0x2000000\n\tNOTE_ATTRIB                       = 0x8\n\tNOTE_CHILD                        = 0x4\n\tNOTE_DELETE                       = 0x1\n\tNOTE_EXEC                         = 0x20000000\n\tNOTE_EXIT                         = 0x80000000\n\tNOTE_EXTEND                       = 0x4\n\tNOTE_FFAND                        = 0x40000000\n\tNOTE_FFCOPY                       = 0xc0000000\n\tNOTE_FFCTRLMASK                   = 0xc0000000\n\tNOTE_FFLAGSMASK                   = 0xffffff\n\tNOTE_FFNOP                        = 0x0\n\tNOTE_FFOR                         = 0x80000000\n\tNOTE_FORK                         = 0x40000000\n\tNOTE_LINK                         = 0x10\n\tNOTE_LOWAT                        = 0x1\n\tNOTE_OOB                          = 0x2\n\tNOTE_PCTRLMASK                    = 0xf0000000\n\tNOTE_PDATAMASK                    = 0xfffff\n\tNOTE_RENAME                       = 0x20\n\tNOTE_REVOKE                       = 0x40\n\tNOTE_TRACK                        = 0x1\n\tNOTE_TRACKERR                     = 0x2\n\tNOTE_TRIGGER                      = 0x1000000\n\tNOTE_WRITE                        = 0x2\n\tOCRNL                             = 0x10\n\tONLCR                             = 0x2\n\tONLRET                            = 0x40\n\tONOCR                             = 0x20\n\tONOEOT                            = 0x8\n\tOPOST                             = 0x1\n\tOXTABS                            = 0x4\n\tO_ACCMODE                         = 0x3\n\tO_APPEND                          = 0x8\n\tO_ASYNC                           = 0x40\n\tO_CLOEXEC                         = 0x20000\n\tO_CREAT                           = 0x200\n\tO_DIRECT                          = 0x10000\n\tO_DIRECTORY                       = 0x8000000\n\tO_EXCL                            = 0x800\n\tO_EXLOCK                          = 0x20\n\tO_FAPPEND                         = 0x100000\n\tO_FASYNCWRITE                     = 0x800000\n\tO_FBLOCKING                       = 0x40000\n\tO_FMASK                           = 0xfc0000\n\tO_FNONBLOCKING                    = 0x80000\n\tO_FOFFSET                         = 0x200000\n\tO_FSYNC                           = 0x80\n\tO_FSYNCWRITE                      = 0x400000\n\tO_NDELAY                          = 0x4\n\tO_NOCTTY                          = 0x8000\n\tO_NOFOLLOW                        = 0x100\n\tO_NONBLOCK                        = 0x4\n\tO_RDONLY                          = 0x0\n\tO_RDWR                            = 0x2\n\tO_SHLOCK                          = 0x10\n\tO_SYNC                            = 0x80\n\tO_TRUNC                           = 0x400\n\tO_WRONLY                          = 0x1\n\tPARENB                            = 0x1000\n\tPARMRK                            = 0x8\n\tPARODD                            = 0x2000\n\tPENDIN                            = 0x20000000\n\tPRIO_PGRP                         = 0x1\n\tPRIO_PROCESS                      = 0x0\n\tPRIO_USER                         = 0x2\n\tPROT_EXEC                         = 0x4\n\tPROT_NONE                         = 0x0\n\tPROT_READ                         = 0x1\n\tPROT_WRITE                        = 0x2\n\tRLIMIT_AS                         = 0xa\n\tRLIMIT_CORE                       = 0x4\n\tRLIMIT_CPU                        = 0x0\n\tRLIMIT_DATA                       = 0x2\n\tRLIMIT_FSIZE                      = 0x1\n\tRLIMIT_MEMLOCK                    = 0x6\n\tRLIMIT_NOFILE                     = 0x8\n\tRLIMIT_NPROC                      = 0x7\n\tRLIMIT_RSS                        = 0x5\n\tRLIMIT_STACK                      = 0x3\n\tRLIM_INFINITY                     = 0x7fffffffffffffff\n\tRTAX_AUTHOR                       = 0x6\n\tRTAX_BRD                          = 0x7\n\tRTAX_DST                          = 0x0\n\tRTAX_GATEWAY                      = 0x1\n\tRTAX_GENMASK                      = 0x3\n\tRTAX_IFA                          = 0x5\n\tRTAX_IFP                          = 0x4\n\tRTAX_MAX                          = 0xb\n\tRTAX_MPLS1                        = 0x8\n\tRTAX_MPLS2                        = 0x9\n\tRTAX_MPLS3                        = 0xa\n\tRTAX_NETMASK                      = 0x2\n\tRTA_AUTHOR                        = 0x40\n\tRTA_BRD                           = 0x80\n\tRTA_DST                           = 0x1\n\tRTA_GATEWAY                       = 0x2\n\tRTA_GENMASK                       = 0x8\n\tRTA_IFA                           = 0x20\n\tRTA_IFP                           = 0x10\n\tRTA_MPLS1                         = 0x100\n\tRTA_MPLS2                         = 0x200\n\tRTA_MPLS3                         = 0x400\n\tRTA_NETMASK                       = 0x4\n\tRTF_BLACKHOLE                     = 0x1000\n\tRTF_BROADCAST                     = 0x400000\n\tRTF_CLONING                       = 0x100\n\tRTF_DONE                          = 0x40\n\tRTF_DYNAMIC                       = 0x10\n\tRTF_GATEWAY                       = 0x2\n\tRTF_HOST                          = 0x4\n\tRTF_LLINFO                        = 0x400\n\tRTF_LOCAL                         = 0x200000\n\tRTF_MODIFIED                      = 0x20\n\tRTF_MPLSOPS                       = 0x1000000\n\tRTF_MULTICAST                     = 0x800000\n\tRTF_PINNED                        = 0x100000\n\tRTF_PRCLONING                     = 0x10000\n\tRTF_PROTO1                        = 0x8000\n\tRTF_PROTO2                        = 0x4000\n\tRTF_PROTO3                        = 0x40000\n\tRTF_REJECT                        = 0x8\n\tRTF_STATIC                        = 0x800\n\tRTF_UP                            = 0x1\n\tRTF_WASCLONED                     = 0x20000\n\tRTF_XRESOLVE                      = 0x200\n\tRTM_ADD                           = 0x1\n\tRTM_CHANGE                        = 0x3\n\tRTM_DELADDR                       = 0xd\n\tRTM_DELETE                        = 0x2\n\tRTM_DELMADDR                      = 0x10\n\tRTM_GET                           = 0x4\n\tRTM_IEEE80211                     = 0x12\n\tRTM_IFANNOUNCE                    = 0x11\n\tRTM_IFINFO                        = 0xe\n\tRTM_LOCK                          = 0x8\n\tRTM_LOSING                        = 0x5\n\tRTM_MISS                          = 0x7\n\tRTM_NEWADDR                       = 0xc\n\tRTM_NEWMADDR                      = 0xf\n\tRTM_OLDADD                        = 0x9\n\tRTM_OLDDEL                        = 0xa\n\tRTM_REDIRECT                      = 0x6\n\tRTM_RESOLVE                       = 0xb\n\tRTM_RTTUNIT                       = 0xf4240\n\tRTM_VERSION                       = 0x6\n\tRTV_EXPIRE                        = 0x4\n\tRTV_HOPCOUNT                      = 0x2\n\tRTV_IWCAPSEGS                     = 0x400\n\tRTV_IWMAXSEGS                     = 0x200\n\tRTV_MSL                           = 0x100\n\tRTV_MTU                           = 0x1\n\tRTV_RPIPE                         = 0x8\n\tRTV_RTT                           = 0x40\n\tRTV_RTTVAR                        = 0x80\n\tRTV_SPIPE                         = 0x10\n\tRTV_SSTHRESH                      = 0x20\n\tRUSAGE_CHILDREN                   = -0x1\n\tRUSAGE_SELF                       = 0x0\n\tSCM_CREDS                         = 0x3\n\tSCM_RIGHTS                        = 0x1\n\tSCM_TIMESTAMP                     = 0x2\n\tSHUT_RD                           = 0x0\n\tSHUT_RDWR                         = 0x2\n\tSHUT_WR                           = 0x1\n\tSIOCADDMULTI                      = 0x80206931\n\tSIOCADDRT                         = 0x8040720a\n\tSIOCAIFADDR                       = 0x8040691a\n\tSIOCALIFADDR                      = 0x8118691b\n\tSIOCATMARK                        = 0x40047307\n\tSIOCDELMULTI                      = 0x80206932\n\tSIOCDELRT                         = 0x8040720b\n\tSIOCDIFADDR                       = 0x80206919\n\tSIOCDIFPHYADDR                    = 0x80206949\n\tSIOCDLIFADDR                      = 0x8118691d\n\tSIOCGDRVSPEC                      = 0xc028697b\n\tSIOCGETSGCNT                      = 0xc0207210\n\tSIOCGETVIFCNT                     = 0xc028720f\n\tSIOCGHIWAT                        = 0x40047301\n\tSIOCGIFADDR                       = 0xc0206921\n\tSIOCGIFBRDADDR                    = 0xc0206923\n\tSIOCGIFCAP                        = 0xc020691f\n\tSIOCGIFCONF                       = 0xc0106924\n\tSIOCGIFDATA                       = 0xc0206926\n\tSIOCGIFDSTADDR                    = 0xc0206922\n\tSIOCGIFFLAGS                      = 0xc0206911\n\tSIOCGIFGENERIC                    = 0xc020693a\n\tSIOCGIFGMEMB                      = 0xc028698a\n\tSIOCGIFINDEX                      = 0xc0206920\n\tSIOCGIFMEDIA                      = 0xc0306938\n\tSIOCGIFMETRIC                     = 0xc0206917\n\tSIOCGIFMTU                        = 0xc0206933\n\tSIOCGIFNETMASK                    = 0xc0206925\n\tSIOCGIFPDSTADDR                   = 0xc0206948\n\tSIOCGIFPHYS                       = 0xc0206935\n\tSIOCGIFPOLLCPU                    = 0xc020697e\n\tSIOCGIFPSRCADDR                   = 0xc0206947\n\tSIOCGIFSTATUS                     = 0xc331693b\n\tSIOCGIFTSOLEN                     = 0xc0206980\n\tSIOCGLIFADDR                      = 0xc118691c\n\tSIOCGLIFPHYADDR                   = 0xc118694b\n\tSIOCGLOWAT                        = 0x40047303\n\tSIOCGPGRP                         = 0x40047309\n\tSIOCGPRIVATE_0                    = 0xc0206950\n\tSIOCGPRIVATE_1                    = 0xc0206951\n\tSIOCIFCREATE                      = 0xc020697a\n\tSIOCIFCREATE2                     = 0xc020697c\n\tSIOCIFDESTROY                     = 0x80206979\n\tSIOCIFGCLONERS                    = 0xc0106978\n\tSIOCSDRVSPEC                      = 0x8028697b\n\tSIOCSHIWAT                        = 0x80047300\n\tSIOCSIFADDR                       = 0x8020690c\n\tSIOCSIFBRDADDR                    = 0x80206913\n\tSIOCSIFCAP                        = 0x8020691e\n\tSIOCSIFDSTADDR                    = 0x8020690e\n\tSIOCSIFFLAGS                      = 0x80206910\n\tSIOCSIFGENERIC                    = 0x80206939\n\tSIOCSIFLLADDR                     = 0x8020693c\n\tSIOCSIFMEDIA                      = 0xc0206937\n\tSIOCSIFMETRIC                     = 0x80206918\n\tSIOCSIFMTU                        = 0x80206934\n\tSIOCSIFNAME                       = 0x80206928\n\tSIOCSIFNETMASK                    = 0x80206916\n\tSIOCSIFPHYADDR                    = 0x80406946\n\tSIOCSIFPHYS                       = 0x80206936\n\tSIOCSIFPOLLCPU                    = 0x8020697d\n\tSIOCSIFTSOLEN                     = 0x8020697f\n\tSIOCSLIFPHYADDR                   = 0x8118694a\n\tSIOCSLOWAT                        = 0x80047302\n\tSIOCSPGRP                         = 0x80047308\n\tSOCK_CLOEXEC                      = 0x10000000\n\tSOCK_DGRAM                        = 0x2\n\tSOCK_MAXADDRLEN                   = 0xff\n\tSOCK_NONBLOCK                     = 0x20000000\n\tSOCK_RAW                          = 0x3\n\tSOCK_RDM                          = 0x4\n\tSOCK_SEQPACKET                    = 0x5\n\tSOCK_STREAM                       = 0x1\n\tSOL_SOCKET                        = 0xffff\n\tSOMAXCONN                         = 0x80\n\tSO_ACCEPTCONN                     = 0x2\n\tSO_ACCEPTFILTER                   = 0x1000\n\tSO_BROADCAST                      = 0x20\n\tSO_CPUHINT                        = 0x1030\n\tSO_DEBUG                          = 0x1\n\tSO_DONTROUTE                      = 0x10\n\tSO_ERROR                          = 0x1007\n\tSO_KEEPALIVE                      = 0x8\n\tSO_LINGER                         = 0x80\n\tSO_NOSIGPIPE                      = 0x800\n\tSO_OOBINLINE                      = 0x100\n\tSO_RCVBUF                         = 0x1002\n\tSO_RCVLOWAT                       = 0x1004\n\tSO_RCVTIMEO                       = 0x1006\n\tSO_REUSEADDR                      = 0x4\n\tSO_REUSEPORT                      = 0x200\n\tSO_SNDBUF                         = 0x1001\n\tSO_SNDLOWAT                       = 0x1003\n\tSO_SNDSPACE                       = 0x100a\n\tSO_SNDTIMEO                       = 0x1005\n\tSO_TIMESTAMP                      = 0x400\n\tSO_TYPE                           = 0x1008\n\tSO_USELOOPBACK                    = 0x40\n\tS_BLKSIZE                         = 0x200\n\tS_IEXEC                           = 0x40\n\tS_IFBLK                           = 0x6000\n\tS_IFCHR                           = 0x2000\n\tS_IFDB                            = 0x9000\n\tS_IFDIR                           = 0x4000\n\tS_IFIFO                           = 0x1000\n\tS_IFLNK                           = 0xa000\n\tS_IFMT                            = 0xf000\n\tS_IFREG                           = 0x8000\n\tS_IFSOCK                          = 0xc000\n\tS_IFWHT                           = 0xe000\n\tS_IREAD                           = 0x100\n\tS_IRGRP                           = 0x20\n\tS_IROTH                           = 0x4\n\tS_IRUSR                           = 0x100\n\tS_IRWXG                           = 0x38\n\tS_IRWXO                           = 0x7\n\tS_IRWXU                           = 0x1c0\n\tS_ISGID                           = 0x400\n\tS_ISTXT                           = 0x200\n\tS_ISUID                           = 0x800\n\tS_ISVTX                           = 0x200\n\tS_IWGRP                           = 0x10\n\tS_IWOTH                           = 0x2\n\tS_IWRITE                          = 0x80\n\tS_IWUSR                           = 0x80\n\tS_IXGRP                           = 0x8\n\tS_IXOTH                           = 0x1\n\tS_IXUSR                           = 0x40\n\tTCIFLUSH                          = 0x1\n\tTCIOFF                            = 0x3\n\tTCIOFLUSH                         = 0x3\n\tTCION                             = 0x4\n\tTCOFLUSH                          = 0x2\n\tTCOOFF                            = 0x1\n\tTCOON                             = 0x2\n\tTCP_FASTKEEP                      = 0x80\n\tTCP_KEEPCNT                       = 0x400\n\tTCP_KEEPIDLE                      = 0x100\n\tTCP_KEEPINIT                      = 0x20\n\tTCP_KEEPINTVL                     = 0x200\n\tTCP_MAXBURST                      = 0x4\n\tTCP_MAXHLEN                       = 0x3c\n\tTCP_MAXOLEN                       = 0x28\n\tTCP_MAXSEG                        = 0x2\n\tTCP_MAXWIN                        = 0xffff\n\tTCP_MAX_WINSHIFT                  = 0xe\n\tTCP_MINMSS                        = 0x100\n\tTCP_MIN_WINSHIFT                  = 0x5\n\tTCP_MSS                           = 0x200\n\tTCP_NODELAY                       = 0x1\n\tTCP_NOOPT                         = 0x8\n\tTCP_NOPUSH                        = 0x4\n\tTCP_SIGNATURE_ENABLE              = 0x10\n\tTCSAFLUSH                         = 0x2\n\tTIOCCBRK                          = 0x2000747a\n\tTIOCCDTR                          = 0x20007478\n\tTIOCCONS                          = 0x80047462\n\tTIOCDCDTIMESTAMP                  = 0x40107458\n\tTIOCDRAIN                         = 0x2000745e\n\tTIOCEXCL                          = 0x2000740d\n\tTIOCEXT                           = 0x80047460\n\tTIOCFLUSH                         = 0x80047410\n\tTIOCGDRAINWAIT                    = 0x40047456\n\tTIOCGETA                          = 0x402c7413\n\tTIOCGETD                          = 0x4004741a\n\tTIOCGPGRP                         = 0x40047477\n\tTIOCGSID                          = 0x40047463\n\tTIOCGSIZE                         = 0x40087468\n\tTIOCGWINSZ                        = 0x40087468\n\tTIOCISPTMASTER                    = 0x20007455\n\tTIOCMBIC                          = 0x8004746b\n\tTIOCMBIS                          = 0x8004746c\n\tTIOCMGDTRWAIT                     = 0x4004745a\n\tTIOCMGET                          = 0x4004746a\n\tTIOCMODG                          = 0x40047403\n\tTIOCMODS                          = 0x80047404\n\tTIOCMSDTRWAIT                     = 0x8004745b\n\tTIOCMSET                          = 0x8004746d\n\tTIOCM_CAR                         = 0x40\n\tTIOCM_CD                          = 0x40\n\tTIOCM_CTS                         = 0x20\n\tTIOCM_DSR                         = 0x100\n\tTIOCM_DTR                         = 0x2\n\tTIOCM_LE                          = 0x1\n\tTIOCM_RI                          = 0x80\n\tTIOCM_RNG                         = 0x80\n\tTIOCM_RTS                         = 0x4\n\tTIOCM_SR                          = 0x10\n\tTIOCM_ST                          = 0x8\n\tTIOCNOTTY                         = 0x20007471\n\tTIOCNXCL                          = 0x2000740e\n\tTIOCOUTQ                          = 0x40047473\n\tTIOCPKT                           = 0x80047470\n\tTIOCPKT_DATA                      = 0x0\n\tTIOCPKT_DOSTOP                    = 0x20\n\tTIOCPKT_FLUSHREAD                 = 0x1\n\tTIOCPKT_FLUSHWRITE                = 0x2\n\tTIOCPKT_IOCTL                     = 0x40\n\tTIOCPKT_NOSTOP                    = 0x10\n\tTIOCPKT_START                     = 0x8\n\tTIOCPKT_STOP                      = 0x4\n\tTIOCREMOTE                        = 0x80047469\n\tTIOCSBRK                          = 0x2000747b\n\tTIOCSCTTY                         = 0x20007461\n\tTIOCSDRAINWAIT                    = 0x80047457\n\tTIOCSDTR                          = 0x20007479\n\tTIOCSETA                          = 0x802c7414\n\tTIOCSETAF                         = 0x802c7416\n\tTIOCSETAW                         = 0x802c7415\n\tTIOCSETD                          = 0x8004741b\n\tTIOCSIG                           = 0x2000745f\n\tTIOCSPGRP                         = 0x80047476\n\tTIOCSSIZE                         = 0x80087467\n\tTIOCSTART                         = 0x2000746e\n\tTIOCSTAT                          = 0x20007465\n\tTIOCSTI                           = 0x80017472\n\tTIOCSTOP                          = 0x2000746f\n\tTIOCSWINSZ                        = 0x80087467\n\tTIOCTIMESTAMP                     = 0x40107459\n\tTIOCUCNTL                         = 0x80047466\n\tTOSTOP                            = 0x400000\n\tVCHECKPT                          = 0x13\n\tVDISCARD                          = 0xf\n\tVDSUSP                            = 0xb\n\tVEOF                              = 0x0\n\tVEOL                              = 0x1\n\tVEOL2                             = 0x2\n\tVERASE                            = 0x3\n\tVERASE2                           = 0x7\n\tVINTR                             = 0x8\n\tVKILL                             = 0x5\n\tVLNEXT                            = 0xe\n\tVMIN                              = 0x10\n\tVM_BCACHE_SIZE_MAX                = 0x0\n\tVM_SWZONE_SIZE_MAX                = 0x4000000000\n\tVQUIT                             = 0x9\n\tVREPRINT                          = 0x6\n\tVSTART                            = 0xc\n\tVSTATUS                           = 0x12\n\tVSTOP                             = 0xd\n\tVSUSP                             = 0xa\n\tVTIME                             = 0x11\n\tVWERASE                           = 0x4\n\tWCONTINUED                        = 0x4\n\tWCOREFLAG                         = 0x80\n\tWLINUXCLONE                       = 0x80000000\n\tWNOHANG                           = 0x1\n\tWSTOPPED                          = 0x7f\n\tWUNTRACED                         = 0x2\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x30)\n\tEADDRNOTAVAIL   = syscall.Errno(0x31)\n\tEAFNOSUPPORT    = syscall.Errno(0x2f)\n\tEAGAIN          = syscall.Errno(0x23)\n\tEALREADY        = syscall.Errno(0x25)\n\tEASYNC          = syscall.Errno(0x63)\n\tEAUTH           = syscall.Errno(0x50)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADMSG         = syscall.Errno(0x59)\n\tEBADRPC         = syscall.Errno(0x48)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x55)\n\tECHILD          = syscall.Errno(0xa)\n\tECONNABORTED    = syscall.Errno(0x35)\n\tECONNREFUSED    = syscall.Errno(0x3d)\n\tECONNRESET      = syscall.Errno(0x36)\n\tEDEADLK         = syscall.Errno(0xb)\n\tEDESTADDRREQ    = syscall.Errno(0x27)\n\tEDOM            = syscall.Errno(0x21)\n\tEDOOFUS         = syscall.Errno(0x58)\n\tEDQUOT          = syscall.Errno(0x45)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFTYPE          = syscall.Errno(0x4f)\n\tEHOSTDOWN       = syscall.Errno(0x40)\n\tEHOSTUNREACH    = syscall.Errno(0x41)\n\tEIDRM           = syscall.Errno(0x52)\n\tEILSEQ          = syscall.Errno(0x56)\n\tEINPROGRESS     = syscall.Errno(0x24)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEISCONN         = syscall.Errno(0x38)\n\tEISDIR          = syscall.Errno(0x15)\n\tELAST           = syscall.Errno(0x63)\n\tELOOP           = syscall.Errno(0x3e)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x28)\n\tEMULTIHOP       = syscall.Errno(0x5a)\n\tENAMETOOLONG    = syscall.Errno(0x3f)\n\tENEEDAUTH       = syscall.Errno(0x51)\n\tENETDOWN        = syscall.Errno(0x32)\n\tENETRESET       = syscall.Errno(0x34)\n\tENETUNREACH     = syscall.Errno(0x33)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x57)\n\tENOBUFS         = syscall.Errno(0x37)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x4d)\n\tENOLINK         = syscall.Errno(0x5b)\n\tENOMEDIUM       = syscall.Errno(0x5d)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x53)\n\tENOPROTOOPT     = syscall.Errno(0x2a)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSYS          = syscall.Errno(0x4e)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x39)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x42)\n\tENOTSOCK        = syscall.Errno(0x26)\n\tENOTSUP         = syscall.Errno(0x2d)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x2d)\n\tEOVERFLOW       = syscall.Errno(0x54)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x2e)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x43)\n\tEPROCUNAVAIL    = syscall.Errno(0x4c)\n\tEPROGMISMATCH   = syscall.Errno(0x4b)\n\tEPROGUNAVAIL    = syscall.Errno(0x4a)\n\tEPROTO          = syscall.Errno(0x5c)\n\tEPROTONOSUPPORT = syscall.Errno(0x2b)\n\tEPROTOTYPE      = syscall.Errno(0x29)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x47)\n\tEROFS           = syscall.Errno(0x1e)\n\tERPCMISMATCH    = syscall.Errno(0x49)\n\tESHUTDOWN       = syscall.Errno(0x3a)\n\tESOCKTNOSUPPORT = syscall.Errno(0x2c)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x46)\n\tETIMEDOUT       = syscall.Errno(0x3c)\n\tETOOMANYREFS    = syscall.Errno(0x3b)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUNUSED94       = syscall.Errno(0x5e)\n\tEUNUSED95       = syscall.Errno(0x5f)\n\tEUNUSED96       = syscall.Errno(0x60)\n\tEUNUSED97       = syscall.Errno(0x61)\n\tEUNUSED98       = syscall.Errno(0x62)\n\tEUSERS          = syscall.Errno(0x44)\n\tEWOULDBLOCK     = syscall.Errno(0x23)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT     = syscall.Signal(0x6)\n\tSIGALRM     = syscall.Signal(0xe)\n\tSIGBUS      = syscall.Signal(0xa)\n\tSIGCHLD     = syscall.Signal(0x14)\n\tSIGCKPT     = syscall.Signal(0x21)\n\tSIGCKPTEXIT = syscall.Signal(0x22)\n\tSIGCONT     = syscall.Signal(0x13)\n\tSIGEMT      = syscall.Signal(0x7)\n\tSIGFPE      = syscall.Signal(0x8)\n\tSIGHUP      = syscall.Signal(0x1)\n\tSIGILL      = syscall.Signal(0x4)\n\tSIGINFO     = syscall.Signal(0x1d)\n\tSIGINT      = syscall.Signal(0x2)\n\tSIGIO       = syscall.Signal(0x17)\n\tSIGIOT      = syscall.Signal(0x6)\n\tSIGKILL     = syscall.Signal(0x9)\n\tSIGPIPE     = syscall.Signal(0xd)\n\tSIGPROF     = syscall.Signal(0x1b)\n\tSIGQUIT     = syscall.Signal(0x3)\n\tSIGSEGV     = syscall.Signal(0xb)\n\tSIGSTOP     = syscall.Signal(0x11)\n\tSIGSYS      = syscall.Signal(0xc)\n\tSIGTERM     = syscall.Signal(0xf)\n\tSIGTHR      = syscall.Signal(0x20)\n\tSIGTRAP     = syscall.Signal(0x5)\n\tSIGTSTP     = syscall.Signal(0x12)\n\tSIGTTIN     = syscall.Signal(0x15)\n\tSIGTTOU     = syscall.Signal(0x16)\n\tSIGURG      = syscall.Signal(0x10)\n\tSIGUSR1     = syscall.Signal(0x1e)\n\tSIGUSR2     = syscall.Signal(0x1f)\n\tSIGVTALRM   = syscall.Signal(0x1a)\n\tSIGWINCH    = syscall.Signal(0x1c)\n\tSIGXCPU     = syscall.Signal(0x18)\n\tSIGXFSZ     = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"device not configured\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"operation not supported by device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large\"},\n\t{35, \"EWOULDBLOCK\", \"resource temporarily unavailable\"},\n\t{36, \"EINPROGRESS\", \"operation now in progress\"},\n\t{37, \"EALREADY\", \"operation already in progress\"},\n\t{38, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{39, \"EDESTADDRREQ\", \"destination address required\"},\n\t{40, \"EMSGSIZE\", \"message too long\"},\n\t{41, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{42, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{43, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{44, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{45, \"EOPNOTSUPP\", \"operation not supported\"},\n\t{46, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{47, \"EAFNOSUPPORT\", \"address family not supported by protocol family\"},\n\t{48, \"EADDRINUSE\", \"address already in use\"},\n\t{49, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{50, \"ENETDOWN\", \"network is down\"},\n\t{51, \"ENETUNREACH\", \"network is unreachable\"},\n\t{52, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{53, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{54, \"ECONNRESET\", \"connection reset by peer\"},\n\t{55, \"ENOBUFS\", \"no buffer space available\"},\n\t{56, \"EISCONN\", \"socket is already connected\"},\n\t{57, \"ENOTCONN\", \"socket is not connected\"},\n\t{58, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{59, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{60, \"ETIMEDOUT\", \"operation timed out\"},\n\t{61, \"ECONNREFUSED\", \"connection refused\"},\n\t{62, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{63, \"ENAMETOOLONG\", \"file name too long\"},\n\t{64, \"EHOSTDOWN\", \"host is down\"},\n\t{65, \"EHOSTUNREACH\", \"no route to host\"},\n\t{66, \"ENOTEMPTY\", \"directory not empty\"},\n\t{67, \"EPROCLIM\", \"too many processes\"},\n\t{68, \"EUSERS\", \"too many users\"},\n\t{69, \"EDQUOT\", \"disc quota exceeded\"},\n\t{70, \"ESTALE\", \"stale NFS file handle\"},\n\t{71, \"EREMOTE\", \"too many levels of remote in path\"},\n\t{72, \"EBADRPC\", \"RPC struct is bad\"},\n\t{73, \"ERPCMISMATCH\", \"RPC version wrong\"},\n\t{74, \"EPROGUNAVAIL\", \"RPC prog. not avail\"},\n\t{75, \"EPROGMISMATCH\", \"program version wrong\"},\n\t{76, \"EPROCUNAVAIL\", \"bad procedure for program\"},\n\t{77, \"ENOLCK\", \"no locks available\"},\n\t{78, \"ENOSYS\", \"function not implemented\"},\n\t{79, \"EFTYPE\", \"inappropriate file type or format\"},\n\t{80, \"EAUTH\", \"authentication error\"},\n\t{81, \"ENEEDAUTH\", \"need authenticator\"},\n\t{82, \"EIDRM\", \"identifier removed\"},\n\t{83, \"ENOMSG\", \"no message of desired type\"},\n\t{84, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n\t{85, \"ECANCELED\", \"operation canceled\"},\n\t{86, \"EILSEQ\", \"illegal byte sequence\"},\n\t{87, \"ENOATTR\", \"attribute not found\"},\n\t{88, \"EDOOFUS\", \"programming error\"},\n\t{89, \"EBADMSG\", \"bad message\"},\n\t{90, \"EMULTIHOP\", \"multihop attempted\"},\n\t{91, \"ENOLINK\", \"link has been severed\"},\n\t{92, \"EPROTO\", \"protocol error\"},\n\t{93, \"ENOMEDIUM\", \"no medium found\"},\n\t{94, \"EUNUSED94\", \"unknown error: 94\"},\n\t{95, \"EUNUSED95\", \"unknown error: 95\"},\n\t{96, \"EUNUSED96\", \"unknown error: 96\"},\n\t{97, \"EUNUSED97\", \"unknown error: 97\"},\n\t{98, \"EUNUSED98\", \"unknown error: 98\"},\n\t{99, \"ELAST\", \"unknown error: 99\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGIOT\", \"abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"suspended (signal)\"},\n\t{18, \"SIGTSTP\", \"suspended\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGINFO\", \"information request\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n\t{32, \"SIGTHR\", \"thread Scheduler\"},\n\t{33, \"SIGCKPT\", \"checkPoint\"},\n\t{34, \"SIGCKPTEXIT\", \"checkPointExit\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go",
    "content": "// mkerrors.sh -m32\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build 386,freebsd\n\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs -- -m32 _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                   = 0x10\n\tAF_ARP                         = 0x23\n\tAF_ATM                         = 0x1e\n\tAF_BLUETOOTH                   = 0x24\n\tAF_CCITT                       = 0xa\n\tAF_CHAOS                       = 0x5\n\tAF_CNT                         = 0x15\n\tAF_COIP                        = 0x14\n\tAF_DATAKIT                     = 0x9\n\tAF_DECnet                      = 0xc\n\tAF_DLI                         = 0xd\n\tAF_E164                        = 0x1a\n\tAF_ECMA                        = 0x8\n\tAF_HYLINK                      = 0xf\n\tAF_IEEE80211                   = 0x25\n\tAF_IMPLINK                     = 0x3\n\tAF_INET                        = 0x2\n\tAF_INET6                       = 0x1c\n\tAF_INET6_SDP                   = 0x2a\n\tAF_INET_SDP                    = 0x28\n\tAF_IPX                         = 0x17\n\tAF_ISDN                        = 0x1a\n\tAF_ISO                         = 0x7\n\tAF_LAT                         = 0xe\n\tAF_LINK                        = 0x12\n\tAF_LOCAL                       = 0x1\n\tAF_MAX                         = 0x2a\n\tAF_NATM                        = 0x1d\n\tAF_NETBIOS                     = 0x6\n\tAF_NETGRAPH                    = 0x20\n\tAF_OSI                         = 0x7\n\tAF_PUP                         = 0x4\n\tAF_ROUTE                       = 0x11\n\tAF_SCLUSTER                    = 0x22\n\tAF_SIP                         = 0x18\n\tAF_SLOW                        = 0x21\n\tAF_SNA                         = 0xb\n\tAF_UNIX                        = 0x1\n\tAF_UNSPEC                      = 0x0\n\tAF_VENDOR00                    = 0x27\n\tAF_VENDOR01                    = 0x29\n\tAF_VENDOR02                    = 0x2b\n\tAF_VENDOR03                    = 0x2d\n\tAF_VENDOR04                    = 0x2f\n\tAF_VENDOR05                    = 0x31\n\tAF_VENDOR06                    = 0x33\n\tAF_VENDOR07                    = 0x35\n\tAF_VENDOR08                    = 0x37\n\tAF_VENDOR09                    = 0x39\n\tAF_VENDOR10                    = 0x3b\n\tAF_VENDOR11                    = 0x3d\n\tAF_VENDOR12                    = 0x3f\n\tAF_VENDOR13                    = 0x41\n\tAF_VENDOR14                    = 0x43\n\tAF_VENDOR15                    = 0x45\n\tAF_VENDOR16                    = 0x47\n\tAF_VENDOR17                    = 0x49\n\tAF_VENDOR18                    = 0x4b\n\tAF_VENDOR19                    = 0x4d\n\tAF_VENDOR20                    = 0x4f\n\tAF_VENDOR21                    = 0x51\n\tAF_VENDOR22                    = 0x53\n\tAF_VENDOR23                    = 0x55\n\tAF_VENDOR24                    = 0x57\n\tAF_VENDOR25                    = 0x59\n\tAF_VENDOR26                    = 0x5b\n\tAF_VENDOR27                    = 0x5d\n\tAF_VENDOR28                    = 0x5f\n\tAF_VENDOR29                    = 0x61\n\tAF_VENDOR30                    = 0x63\n\tAF_VENDOR31                    = 0x65\n\tAF_VENDOR32                    = 0x67\n\tAF_VENDOR33                    = 0x69\n\tAF_VENDOR34                    = 0x6b\n\tAF_VENDOR35                    = 0x6d\n\tAF_VENDOR36                    = 0x6f\n\tAF_VENDOR37                    = 0x71\n\tAF_VENDOR38                    = 0x73\n\tAF_VENDOR39                    = 0x75\n\tAF_VENDOR40                    = 0x77\n\tAF_VENDOR41                    = 0x79\n\tAF_VENDOR42                    = 0x7b\n\tAF_VENDOR43                    = 0x7d\n\tAF_VENDOR44                    = 0x7f\n\tAF_VENDOR45                    = 0x81\n\tAF_VENDOR46                    = 0x83\n\tAF_VENDOR47                    = 0x85\n\tALTWERASE                      = 0x200\n\tB0                             = 0x0\n\tB110                           = 0x6e\n\tB115200                        = 0x1c200\n\tB1200                          = 0x4b0\n\tB134                           = 0x86\n\tB14400                         = 0x3840\n\tB150                           = 0x96\n\tB1800                          = 0x708\n\tB19200                         = 0x4b00\n\tB200                           = 0xc8\n\tB230400                        = 0x38400\n\tB2400                          = 0x960\n\tB28800                         = 0x7080\n\tB300                           = 0x12c\n\tB38400                         = 0x9600\n\tB460800                        = 0x70800\n\tB4800                          = 0x12c0\n\tB50                            = 0x32\n\tB57600                         = 0xe100\n\tB600                           = 0x258\n\tB7200                          = 0x1c20\n\tB75                            = 0x4b\n\tB76800                         = 0x12c00\n\tB921600                        = 0xe1000\n\tB9600                          = 0x2580\n\tBIOCFEEDBACK                   = 0x8004427c\n\tBIOCFLUSH                      = 0x20004268\n\tBIOCGBLEN                      = 0x40044266\n\tBIOCGDIRECTION                 = 0x40044276\n\tBIOCGDLT                       = 0x4004426a\n\tBIOCGDLTLIST                   = 0xc0084279\n\tBIOCGETBUFMODE                 = 0x4004427d\n\tBIOCGETIF                      = 0x4020426b\n\tBIOCGETZMAX                    = 0x4004427f\n\tBIOCGHDRCMPLT                  = 0x40044274\n\tBIOCGRSIG                      = 0x40044272\n\tBIOCGRTIMEOUT                  = 0x4008426e\n\tBIOCGSEESENT                   = 0x40044276\n\tBIOCGSTATS                     = 0x4008426f\n\tBIOCGTSTAMP                    = 0x40044283\n\tBIOCIMMEDIATE                  = 0x80044270\n\tBIOCLOCK                       = 0x2000427a\n\tBIOCPROMISC                    = 0x20004269\n\tBIOCROTZBUF                    = 0x400c4280\n\tBIOCSBLEN                      = 0xc0044266\n\tBIOCSDIRECTION                 = 0x80044277\n\tBIOCSDLT                       = 0x80044278\n\tBIOCSETBUFMODE                 = 0x8004427e\n\tBIOCSETF                       = 0x80084267\n\tBIOCSETFNR                     = 0x80084282\n\tBIOCSETIF                      = 0x8020426c\n\tBIOCSETWF                      = 0x8008427b\n\tBIOCSETZBUF                    = 0x800c4281\n\tBIOCSHDRCMPLT                  = 0x80044275\n\tBIOCSRSIG                      = 0x80044273\n\tBIOCSRTIMEOUT                  = 0x8008426d\n\tBIOCSSEESENT                   = 0x80044277\n\tBIOCSTSTAMP                    = 0x80044284\n\tBIOCVERSION                    = 0x40044271\n\tBPF_A                          = 0x10\n\tBPF_ABS                        = 0x20\n\tBPF_ADD                        = 0x0\n\tBPF_ALIGNMENT                  = 0x4\n\tBPF_ALU                        = 0x4\n\tBPF_AND                        = 0x50\n\tBPF_B                          = 0x10\n\tBPF_BUFMODE_BUFFER             = 0x1\n\tBPF_BUFMODE_ZBUF               = 0x2\n\tBPF_DIV                        = 0x30\n\tBPF_H                          = 0x8\n\tBPF_IMM                        = 0x0\n\tBPF_IND                        = 0x40\n\tBPF_JA                         = 0x0\n\tBPF_JEQ                        = 0x10\n\tBPF_JGE                        = 0x30\n\tBPF_JGT                        = 0x20\n\tBPF_JMP                        = 0x5\n\tBPF_JSET                       = 0x40\n\tBPF_K                          = 0x0\n\tBPF_LD                         = 0x0\n\tBPF_LDX                        = 0x1\n\tBPF_LEN                        = 0x80\n\tBPF_LSH                        = 0x60\n\tBPF_MAJOR_VERSION              = 0x1\n\tBPF_MAXBUFSIZE                 = 0x80000\n\tBPF_MAXINSNS                   = 0x200\n\tBPF_MEM                        = 0x60\n\tBPF_MEMWORDS                   = 0x10\n\tBPF_MINBUFSIZE                 = 0x20\n\tBPF_MINOR_VERSION              = 0x1\n\tBPF_MISC                       = 0x7\n\tBPF_MOD                        = 0x90\n\tBPF_MSH                        = 0xa0\n\tBPF_MUL                        = 0x20\n\tBPF_NEG                        = 0x80\n\tBPF_OR                         = 0x40\n\tBPF_RELEASE                    = 0x30bb6\n\tBPF_RET                        = 0x6\n\tBPF_RSH                        = 0x70\n\tBPF_ST                         = 0x2\n\tBPF_STX                        = 0x3\n\tBPF_SUB                        = 0x10\n\tBPF_TAX                        = 0x0\n\tBPF_TXA                        = 0x80\n\tBPF_T_BINTIME                  = 0x2\n\tBPF_T_BINTIME_FAST             = 0x102\n\tBPF_T_BINTIME_MONOTONIC        = 0x202\n\tBPF_T_BINTIME_MONOTONIC_FAST   = 0x302\n\tBPF_T_FAST                     = 0x100\n\tBPF_T_FLAG_MASK                = 0x300\n\tBPF_T_FORMAT_MASK              = 0x3\n\tBPF_T_MICROTIME                = 0x0\n\tBPF_T_MICROTIME_FAST           = 0x100\n\tBPF_T_MICROTIME_MONOTONIC      = 0x200\n\tBPF_T_MICROTIME_MONOTONIC_FAST = 0x300\n\tBPF_T_MONOTONIC                = 0x200\n\tBPF_T_MONOTONIC_FAST           = 0x300\n\tBPF_T_NANOTIME                 = 0x1\n\tBPF_T_NANOTIME_FAST            = 0x101\n\tBPF_T_NANOTIME_MONOTONIC       = 0x201\n\tBPF_T_NANOTIME_MONOTONIC_FAST  = 0x301\n\tBPF_T_NONE                     = 0x3\n\tBPF_T_NORMAL                   = 0x0\n\tBPF_W                          = 0x0\n\tBPF_X                          = 0x8\n\tBPF_XOR                        = 0xa0\n\tBRKINT                         = 0x2\n\tCAP_ACCEPT                     = 0x200000020000000\n\tCAP_ACL_CHECK                  = 0x400000000010000\n\tCAP_ACL_DELETE                 = 0x400000000020000\n\tCAP_ACL_GET                    = 0x400000000040000\n\tCAP_ACL_SET                    = 0x400000000080000\n\tCAP_ALL0                       = 0x20007ffffffffff\n\tCAP_ALL1                       = 0x4000000001fffff\n\tCAP_BIND                       = 0x200000040000000\n\tCAP_BINDAT                     = 0x200008000000400\n\tCAP_CHFLAGSAT                  = 0x200000000001400\n\tCAP_CONNECT                    = 0x200000080000000\n\tCAP_CONNECTAT                  = 0x200010000000400\n\tCAP_CREATE                     = 0x200000000000040\n\tCAP_EVENT                      = 0x400000000000020\n\tCAP_EXTATTR_DELETE             = 0x400000000001000\n\tCAP_EXTATTR_GET                = 0x400000000002000\n\tCAP_EXTATTR_LIST               = 0x400000000004000\n\tCAP_EXTATTR_SET                = 0x400000000008000\n\tCAP_FCHDIR                     = 0x200000000000800\n\tCAP_FCHFLAGS                   = 0x200000000001000\n\tCAP_FCHMOD                     = 0x200000000002000\n\tCAP_FCHMODAT                   = 0x200000000002400\n\tCAP_FCHOWN                     = 0x200000000004000\n\tCAP_FCHOWNAT                   = 0x200000000004400\n\tCAP_FCNTL                      = 0x200000000008000\n\tCAP_FCNTL_ALL                  = 0x78\n\tCAP_FCNTL_GETFL                = 0x8\n\tCAP_FCNTL_GETOWN               = 0x20\n\tCAP_FCNTL_SETFL                = 0x10\n\tCAP_FCNTL_SETOWN               = 0x40\n\tCAP_FEXECVE                    = 0x200000000000080\n\tCAP_FLOCK                      = 0x200000000010000\n\tCAP_FPATHCONF                  = 0x200000000020000\n\tCAP_FSCK                       = 0x200000000040000\n\tCAP_FSTAT                      = 0x200000000080000\n\tCAP_FSTATAT                    = 0x200000000080400\n\tCAP_FSTATFS                    = 0x200000000100000\n\tCAP_FSYNC                      = 0x200000000000100\n\tCAP_FTRUNCATE                  = 0x200000000000200\n\tCAP_FUTIMES                    = 0x200000000200000\n\tCAP_FUTIMESAT                  = 0x200000000200400\n\tCAP_GETPEERNAME                = 0x200000100000000\n\tCAP_GETSOCKNAME                = 0x200000200000000\n\tCAP_GETSOCKOPT                 = 0x200000400000000\n\tCAP_IOCTL                      = 0x400000000000080\n\tCAP_IOCTLS_ALL                 = 0x7fffffff\n\tCAP_KQUEUE                     = 0x400000000100040\n\tCAP_KQUEUE_CHANGE              = 0x400000000100000\n\tCAP_KQUEUE_EVENT               = 0x400000000000040\n\tCAP_LINKAT_SOURCE              = 0x200020000000400\n\tCAP_LINKAT_TARGET              = 0x200000000400400\n\tCAP_LISTEN                     = 0x200000800000000\n\tCAP_LOOKUP                     = 0x200000000000400\n\tCAP_MAC_GET                    = 0x400000000000001\n\tCAP_MAC_SET                    = 0x400000000000002\n\tCAP_MKDIRAT                    = 0x200000000800400\n\tCAP_MKFIFOAT                   = 0x200000001000400\n\tCAP_MKNODAT                    = 0x200000002000400\n\tCAP_MMAP                       = 0x200000000000010\n\tCAP_MMAP_R                     = 0x20000000000001d\n\tCAP_MMAP_RW                    = 0x20000000000001f\n\tCAP_MMAP_RWX                   = 0x20000000000003f\n\tCAP_MMAP_RX                    = 0x20000000000003d\n\tCAP_MMAP_W                     = 0x20000000000001e\n\tCAP_MMAP_WX                    = 0x20000000000003e\n\tCAP_MMAP_X                     = 0x20000000000003c\n\tCAP_PDGETPID                   = 0x400000000000200\n\tCAP_PDKILL                     = 0x400000000000800\n\tCAP_PDWAIT                     = 0x400000000000400\n\tCAP_PEELOFF                    = 0x200001000000000\n\tCAP_POLL_EVENT                 = 0x400000000000020\n\tCAP_PREAD                      = 0x20000000000000d\n\tCAP_PWRITE                     = 0x20000000000000e\n\tCAP_READ                       = 0x200000000000001\n\tCAP_RECV                       = 0x200000000000001\n\tCAP_RENAMEAT_SOURCE            = 0x200000004000400\n\tCAP_RENAMEAT_TARGET            = 0x200040000000400\n\tCAP_RIGHTS_VERSION             = 0x0\n\tCAP_RIGHTS_VERSION_00          = 0x0\n\tCAP_SEEK                       = 0x20000000000000c\n\tCAP_SEEK_TELL                  = 0x200000000000004\n\tCAP_SEM_GETVALUE               = 0x400000000000004\n\tCAP_SEM_POST                   = 0x400000000000008\n\tCAP_SEM_WAIT                   = 0x400000000000010\n\tCAP_SEND                       = 0x200000000000002\n\tCAP_SETSOCKOPT                 = 0x200002000000000\n\tCAP_SHUTDOWN                   = 0x200004000000000\n\tCAP_SOCK_CLIENT                = 0x200007780000003\n\tCAP_SOCK_SERVER                = 0x200007f60000003\n\tCAP_SYMLINKAT                  = 0x200000008000400\n\tCAP_TTYHOOK                    = 0x400000000000100\n\tCAP_UNLINKAT                   = 0x200000010000400\n\tCAP_UNUSED0_44                 = 0x200080000000000\n\tCAP_UNUSED0_57                 = 0x300000000000000\n\tCAP_UNUSED1_22                 = 0x400000000200000\n\tCAP_UNUSED1_57                 = 0x500000000000000\n\tCAP_WRITE                      = 0x200000000000002\n\tCFLUSH                         = 0xf\n\tCLOCAL                         = 0x8000\n\tCLOCK_MONOTONIC                = 0x4\n\tCLOCK_MONOTONIC_FAST           = 0xc\n\tCLOCK_MONOTONIC_PRECISE        = 0xb\n\tCLOCK_PROCESS_CPUTIME_ID       = 0xf\n\tCLOCK_PROF                     = 0x2\n\tCLOCK_REALTIME                 = 0x0\n\tCLOCK_REALTIME_FAST            = 0xa\n\tCLOCK_REALTIME_PRECISE         = 0x9\n\tCLOCK_SECOND                   = 0xd\n\tCLOCK_THREAD_CPUTIME_ID        = 0xe\n\tCLOCK_UPTIME                   = 0x5\n\tCLOCK_UPTIME_FAST              = 0x8\n\tCLOCK_UPTIME_PRECISE           = 0x7\n\tCLOCK_VIRTUAL                  = 0x1\n\tCREAD                          = 0x800\n\tCRTSCTS                        = 0x30000\n\tCS5                            = 0x0\n\tCS6                            = 0x100\n\tCS7                            = 0x200\n\tCS8                            = 0x300\n\tCSIZE                          = 0x300\n\tCSTART                         = 0x11\n\tCSTATUS                        = 0x14\n\tCSTOP                          = 0x13\n\tCSTOPB                         = 0x400\n\tCSUSP                          = 0x1a\n\tCTL_HW                         = 0x6\n\tCTL_KERN                       = 0x1\n\tCTL_MAXNAME                    = 0x18\n\tCTL_NET                        = 0x4\n\tDLT_A429                       = 0xb8\n\tDLT_A653_ICM                   = 0xb9\n\tDLT_AIRONET_HEADER             = 0x78\n\tDLT_AOS                        = 0xde\n\tDLT_APPLE_IP_OVER_IEEE1394     = 0x8a\n\tDLT_ARCNET                     = 0x7\n\tDLT_ARCNET_LINUX               = 0x81\n\tDLT_ATM_CLIP                   = 0x13\n\tDLT_ATM_RFC1483                = 0xb\n\tDLT_AURORA                     = 0x7e\n\tDLT_AX25                       = 0x3\n\tDLT_AX25_KISS                  = 0xca\n\tDLT_BACNET_MS_TP               = 0xa5\n\tDLT_BLUETOOTH_BREDR_BB         = 0xff\n\tDLT_BLUETOOTH_HCI_H4           = 0xbb\n\tDLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9\n\tDLT_BLUETOOTH_LE_LL            = 0xfb\n\tDLT_BLUETOOTH_LE_LL_WITH_PHDR  = 0x100\n\tDLT_BLUETOOTH_LINUX_MONITOR    = 0xfe\n\tDLT_CAN20B                     = 0xbe\n\tDLT_CAN_SOCKETCAN              = 0xe3\n\tDLT_CHAOS                      = 0x5\n\tDLT_CHDLC                      = 0x68\n\tDLT_CISCO_IOS                  = 0x76\n\tDLT_C_HDLC                     = 0x68\n\tDLT_C_HDLC_WITH_DIR            = 0xcd\n\tDLT_DBUS                       = 0xe7\n\tDLT_DECT                       = 0xdd\n\tDLT_DOCSIS                     = 0x8f\n\tDLT_DVB_CI                     = 0xeb\n\tDLT_ECONET                     = 0x73\n\tDLT_EN10MB                     = 0x1\n\tDLT_EN3MB                      = 0x2\n\tDLT_ENC                        = 0x6d\n\tDLT_EPON                       = 0x103\n\tDLT_ERF                        = 0xc5\n\tDLT_ERF_ETH                    = 0xaf\n\tDLT_ERF_POS                    = 0xb0\n\tDLT_FC_2                       = 0xe0\n\tDLT_FC_2_WITH_FRAME_DELIMS     = 0xe1\n\tDLT_FDDI                       = 0xa\n\tDLT_FLEXRAY                    = 0xd2\n\tDLT_FRELAY                     = 0x6b\n\tDLT_FRELAY_WITH_DIR            = 0xce\n\tDLT_GCOM_SERIAL                = 0xad\n\tDLT_GCOM_T1E1                  = 0xac\n\tDLT_GPF_F                      = 0xab\n\tDLT_GPF_T                      = 0xaa\n\tDLT_GPRS_LLC                   = 0xa9\n\tDLT_GSMTAP_ABIS                = 0xda\n\tDLT_GSMTAP_UM                  = 0xd9\n\tDLT_HHDLC                      = 0x79\n\tDLT_IBM_SN                     = 0x92\n\tDLT_IBM_SP                     = 0x91\n\tDLT_IEEE802                    = 0x6\n\tDLT_IEEE802_11                 = 0x69\n\tDLT_IEEE802_11_RADIO           = 0x7f\n\tDLT_IEEE802_11_RADIO_AVS       = 0xa3\n\tDLT_IEEE802_15_4               = 0xc3\n\tDLT_IEEE802_15_4_LINUX         = 0xbf\n\tDLT_IEEE802_15_4_NOFCS         = 0xe6\n\tDLT_IEEE802_15_4_NONASK_PHY    = 0xd7\n\tDLT_IEEE802_16_MAC_CPS         = 0xbc\n\tDLT_IEEE802_16_MAC_CPS_RADIO   = 0xc1\n\tDLT_INFINIBAND                 = 0xf7\n\tDLT_IPFILTER                   = 0x74\n\tDLT_IPMB                       = 0xc7\n\tDLT_IPMB_LINUX                 = 0xd1\n\tDLT_IPMI_HPM_2                 = 0x104\n\tDLT_IPNET                      = 0xe2\n\tDLT_IPOIB                      = 0xf2\n\tDLT_IPV4                       = 0xe4\n\tDLT_IPV6                       = 0xe5\n\tDLT_IP_OVER_FC                 = 0x7a\n\tDLT_JUNIPER_ATM1               = 0x89\n\tDLT_JUNIPER_ATM2               = 0x87\n\tDLT_JUNIPER_ATM_CEMIC          = 0xee\n\tDLT_JUNIPER_CHDLC              = 0xb5\n\tDLT_JUNIPER_ES                 = 0x84\n\tDLT_JUNIPER_ETHER              = 0xb2\n\tDLT_JUNIPER_FIBRECHANNEL       = 0xea\n\tDLT_JUNIPER_FRELAY             = 0xb4\n\tDLT_JUNIPER_GGSN               = 0x85\n\tDLT_JUNIPER_ISM                = 0xc2\n\tDLT_JUNIPER_MFR                = 0x86\n\tDLT_JUNIPER_MLFR               = 0x83\n\tDLT_JUNIPER_MLPPP              = 0x82\n\tDLT_JUNIPER_MONITOR            = 0xa4\n\tDLT_JUNIPER_PIC_PEER           = 0xae\n\tDLT_JUNIPER_PPP                = 0xb3\n\tDLT_JUNIPER_PPPOE              = 0xa7\n\tDLT_JUNIPER_PPPOE_ATM          = 0xa8\n\tDLT_JUNIPER_SERVICES           = 0x88\n\tDLT_JUNIPER_SRX_E2E            = 0xe9\n\tDLT_JUNIPER_ST                 = 0xc8\n\tDLT_JUNIPER_VP                 = 0xb7\n\tDLT_JUNIPER_VS                 = 0xe8\n\tDLT_LAPB_WITH_DIR              = 0xcf\n\tDLT_LAPD                       = 0xcb\n\tDLT_LIN                        = 0xd4\n\tDLT_LINUX_EVDEV                = 0xd8\n\tDLT_LINUX_IRDA                 = 0x90\n\tDLT_LINUX_LAPD                 = 0xb1\n\tDLT_LINUX_PPP_WITHDIRECTION    = 0xa6\n\tDLT_LINUX_SLL                  = 0x71\n\tDLT_LOOP                       = 0x6c\n\tDLT_LTALK                      = 0x72\n\tDLT_MATCHING_MAX               = 0x104\n\tDLT_MATCHING_MIN               = 0x68\n\tDLT_MFR                        = 0xb6\n\tDLT_MOST                       = 0xd3\n\tDLT_MPEG_2_TS                  = 0xf3\n\tDLT_MPLS                       = 0xdb\n\tDLT_MTP2                       = 0x8c\n\tDLT_MTP2_WITH_PHDR             = 0x8b\n\tDLT_MTP3                       = 0x8d\n\tDLT_MUX27010                   = 0xec\n\tDLT_NETANALYZER                = 0xf0\n\tDLT_NETANALYZER_TRANSPARENT    = 0xf1\n\tDLT_NETLINK                    = 0xfd\n\tDLT_NFC_LLCP                   = 0xf5\n\tDLT_NFLOG                      = 0xef\n\tDLT_NG40                       = 0xf4\n\tDLT_NULL                       = 0x0\n\tDLT_PCI_EXP                    = 0x7d\n\tDLT_PFLOG                      = 0x75\n\tDLT_PFSYNC                     = 0x79\n\tDLT_PKTAP                      = 0x102\n\tDLT_PPI                        = 0xc0\n\tDLT_PPP                        = 0x9\n\tDLT_PPP_BSDOS                  = 0x10\n\tDLT_PPP_ETHER                  = 0x33\n\tDLT_PPP_PPPD                   = 0xa6\n\tDLT_PPP_SERIAL                 = 0x32\n\tDLT_PPP_WITH_DIR               = 0xcc\n\tDLT_PPP_WITH_DIRECTION         = 0xa6\n\tDLT_PRISM_HEADER               = 0x77\n\tDLT_PROFIBUS_DL                = 0x101\n\tDLT_PRONET                     = 0x4\n\tDLT_RAIF1                      = 0xc6\n\tDLT_RAW                        = 0xc\n\tDLT_RIO                        = 0x7c\n\tDLT_RTAC_SERIAL                = 0xfa\n\tDLT_SCCP                       = 0x8e\n\tDLT_SCTP                       = 0xf8\n\tDLT_SITA                       = 0xc4\n\tDLT_SLIP                       = 0x8\n\tDLT_SLIP_BSDOS                 = 0xf\n\tDLT_STANAG_5066_D_PDU          = 0xed\n\tDLT_SUNATM                     = 0x7b\n\tDLT_SYMANTEC_FIREWALL          = 0x63\n\tDLT_TZSP                       = 0x80\n\tDLT_USB                        = 0xba\n\tDLT_USBPCAP                    = 0xf9\n\tDLT_USB_LINUX                  = 0xbd\n\tDLT_USB_LINUX_MMAPPED          = 0xdc\n\tDLT_USER0                      = 0x93\n\tDLT_USER1                      = 0x94\n\tDLT_USER10                     = 0x9d\n\tDLT_USER11                     = 0x9e\n\tDLT_USER12                     = 0x9f\n\tDLT_USER13                     = 0xa0\n\tDLT_USER14                     = 0xa1\n\tDLT_USER15                     = 0xa2\n\tDLT_USER2                      = 0x95\n\tDLT_USER3                      = 0x96\n\tDLT_USER4                      = 0x97\n\tDLT_USER5                      = 0x98\n\tDLT_USER6                      = 0x99\n\tDLT_USER7                      = 0x9a\n\tDLT_USER8                      = 0x9b\n\tDLT_USER9                      = 0x9c\n\tDLT_WIHART                     = 0xdf\n\tDLT_WIRESHARK_UPPER_PDU        = 0xfc\n\tDLT_X2E_SERIAL                 = 0xd5\n\tDLT_X2E_XORAYA                 = 0xd6\n\tDT_BLK                         = 0x6\n\tDT_CHR                         = 0x2\n\tDT_DIR                         = 0x4\n\tDT_FIFO                        = 0x1\n\tDT_LNK                         = 0xa\n\tDT_REG                         = 0x8\n\tDT_SOCK                        = 0xc\n\tDT_UNKNOWN                     = 0x0\n\tDT_WHT                         = 0xe\n\tECHO                           = 0x8\n\tECHOCTL                        = 0x40\n\tECHOE                          = 0x2\n\tECHOK                          = 0x4\n\tECHOKE                         = 0x1\n\tECHONL                         = 0x10\n\tECHOPRT                        = 0x20\n\tEVFILT_AIO                     = -0x3\n\tEVFILT_FS                      = -0x9\n\tEVFILT_LIO                     = -0xa\n\tEVFILT_PROC                    = -0x5\n\tEVFILT_PROCDESC                = -0x8\n\tEVFILT_READ                    = -0x1\n\tEVFILT_SENDFILE                = -0xc\n\tEVFILT_SIGNAL                  = -0x6\n\tEVFILT_SYSCOUNT                = 0xc\n\tEVFILT_TIMER                   = -0x7\n\tEVFILT_USER                    = -0xb\n\tEVFILT_VNODE                   = -0x4\n\tEVFILT_WRITE                   = -0x2\n\tEV_ADD                         = 0x1\n\tEV_CLEAR                       = 0x20\n\tEV_DELETE                      = 0x2\n\tEV_DISABLE                     = 0x8\n\tEV_DISPATCH                    = 0x80\n\tEV_DROP                        = 0x1000\n\tEV_ENABLE                      = 0x4\n\tEV_EOF                         = 0x8000\n\tEV_ERROR                       = 0x4000\n\tEV_FLAG1                       = 0x2000\n\tEV_FLAG2                       = 0x4000\n\tEV_FORCEONESHOT                = 0x100\n\tEV_ONESHOT                     = 0x10\n\tEV_RECEIPT                     = 0x40\n\tEV_SYSFLAGS                    = 0xf000\n\tEXTA                           = 0x4b00\n\tEXTATTR_NAMESPACE_EMPTY        = 0x0\n\tEXTATTR_NAMESPACE_SYSTEM       = 0x2\n\tEXTATTR_NAMESPACE_USER         = 0x1\n\tEXTB                           = 0x9600\n\tEXTPROC                        = 0x800\n\tFD_CLOEXEC                     = 0x1\n\tFD_SETSIZE                     = 0x400\n\tFLUSHO                         = 0x800000\n\tF_CANCEL                       = 0x5\n\tF_DUP2FD                       = 0xa\n\tF_DUP2FD_CLOEXEC               = 0x12\n\tF_DUPFD                        = 0x0\n\tF_DUPFD_CLOEXEC                = 0x11\n\tF_GETFD                        = 0x1\n\tF_GETFL                        = 0x3\n\tF_GETLK                        = 0xb\n\tF_GETOWN                       = 0x5\n\tF_OGETLK                       = 0x7\n\tF_OK                           = 0x0\n\tF_OSETLK                       = 0x8\n\tF_OSETLKW                      = 0x9\n\tF_RDAHEAD                      = 0x10\n\tF_RDLCK                        = 0x1\n\tF_READAHEAD                    = 0xf\n\tF_SETFD                        = 0x2\n\tF_SETFL                        = 0x4\n\tF_SETLK                        = 0xc\n\tF_SETLKW                       = 0xd\n\tF_SETLK_REMOTE                 = 0xe\n\tF_SETOWN                       = 0x6\n\tF_UNLCK                        = 0x2\n\tF_UNLCKSYS                     = 0x4\n\tF_WRLCK                        = 0x3\n\tHUPCL                          = 0x4000\n\tHW_MACHINE                     = 0x1\n\tICANON                         = 0x100\n\tICMP6_FILTER                   = 0x12\n\tICRNL                          = 0x100\n\tIEXTEN                         = 0x400\n\tIFAN_ARRIVAL                   = 0x0\n\tIFAN_DEPARTURE                 = 0x1\n\tIFF_ALLMULTI                   = 0x200\n\tIFF_ALTPHYS                    = 0x4000\n\tIFF_BROADCAST                  = 0x2\n\tIFF_CANTCHANGE                 = 0x218f52\n\tIFF_CANTCONFIG                 = 0x10000\n\tIFF_DEBUG                      = 0x4\n\tIFF_DRV_OACTIVE                = 0x400\n\tIFF_DRV_RUNNING                = 0x40\n\tIFF_DYING                      = 0x200000\n\tIFF_LINK0                      = 0x1000\n\tIFF_LINK1                      = 0x2000\n\tIFF_LINK2                      = 0x4000\n\tIFF_LOOPBACK                   = 0x8\n\tIFF_MONITOR                    = 0x40000\n\tIFF_MULTICAST                  = 0x8000\n\tIFF_NOARP                      = 0x80\n\tIFF_OACTIVE                    = 0x400\n\tIFF_POINTOPOINT                = 0x10\n\tIFF_PPROMISC                   = 0x20000\n\tIFF_PROMISC                    = 0x100\n\tIFF_RENAMING                   = 0x400000\n\tIFF_RUNNING                    = 0x40\n\tIFF_SIMPLEX                    = 0x800\n\tIFF_STATICARP                  = 0x80000\n\tIFF_UP                         = 0x1\n\tIFNAMSIZ                       = 0x10\n\tIFT_BRIDGE                     = 0xd1\n\tIFT_CARP                       = 0xf8\n\tIFT_IEEE1394                   = 0x90\n\tIFT_INFINIBAND                 = 0xc7\n\tIFT_L2VLAN                     = 0x87\n\tIFT_L3IPVLAN                   = 0x88\n\tIFT_PPP                        = 0x17\n\tIFT_PROPVIRTUAL                = 0x35\n\tIGNBRK                         = 0x1\n\tIGNCR                          = 0x80\n\tIGNPAR                         = 0x4\n\tIMAXBEL                        = 0x2000\n\tINLCR                          = 0x40\n\tINPCK                          = 0x10\n\tIN_CLASSA_HOST                 = 0xffffff\n\tIN_CLASSA_MAX                  = 0x80\n\tIN_CLASSA_NET                  = 0xff000000\n\tIN_CLASSA_NSHIFT               = 0x18\n\tIN_CLASSB_HOST                 = 0xffff\n\tIN_CLASSB_MAX                  = 0x10000\n\tIN_CLASSB_NET                  = 0xffff0000\n\tIN_CLASSB_NSHIFT               = 0x10\n\tIN_CLASSC_HOST                 = 0xff\n\tIN_CLASSC_NET                  = 0xffffff00\n\tIN_CLASSC_NSHIFT               = 0x8\n\tIN_CLASSD_HOST                 = 0xfffffff\n\tIN_CLASSD_NET                  = 0xf0000000\n\tIN_CLASSD_NSHIFT               = 0x1c\n\tIN_LOOPBACKNET                 = 0x7f\n\tIN_RFC3021_MASK                = 0xfffffffe\n\tIPPROTO_3PC                    = 0x22\n\tIPPROTO_ADFS                   = 0x44\n\tIPPROTO_AH                     = 0x33\n\tIPPROTO_AHIP                   = 0x3d\n\tIPPROTO_APES                   = 0x63\n\tIPPROTO_ARGUS                  = 0xd\n\tIPPROTO_AX25                   = 0x5d\n\tIPPROTO_BHA                    = 0x31\n\tIPPROTO_BLT                    = 0x1e\n\tIPPROTO_BRSATMON               = 0x4c\n\tIPPROTO_CARP                   = 0x70\n\tIPPROTO_CFTP                   = 0x3e\n\tIPPROTO_CHAOS                  = 0x10\n\tIPPROTO_CMTP                   = 0x26\n\tIPPROTO_CPHB                   = 0x49\n\tIPPROTO_CPNX                   = 0x48\n\tIPPROTO_DDP                    = 0x25\n\tIPPROTO_DGP                    = 0x56\n\tIPPROTO_DIVERT                 = 0x102\n\tIPPROTO_DONE                   = 0x101\n\tIPPROTO_DSTOPTS                = 0x3c\n\tIPPROTO_EGP                    = 0x8\n\tIPPROTO_EMCON                  = 0xe\n\tIPPROTO_ENCAP                  = 0x62\n\tIPPROTO_EON                    = 0x50\n\tIPPROTO_ESP                    = 0x32\n\tIPPROTO_ETHERIP                = 0x61\n\tIPPROTO_FRAGMENT               = 0x2c\n\tIPPROTO_GGP                    = 0x3\n\tIPPROTO_GMTP                   = 0x64\n\tIPPROTO_GRE                    = 0x2f\n\tIPPROTO_HELLO                  = 0x3f\n\tIPPROTO_HIP                    = 0x8b\n\tIPPROTO_HMP                    = 0x14\n\tIPPROTO_HOPOPTS                = 0x0\n\tIPPROTO_ICMP                   = 0x1\n\tIPPROTO_ICMPV6                 = 0x3a\n\tIPPROTO_IDP                    = 0x16\n\tIPPROTO_IDPR                   = 0x23\n\tIPPROTO_IDRP                   = 0x2d\n\tIPPROTO_IGMP                   = 0x2\n\tIPPROTO_IGP                    = 0x55\n\tIPPROTO_IGRP                   = 0x58\n\tIPPROTO_IL                     = 0x28\n\tIPPROTO_INLSP                  = 0x34\n\tIPPROTO_INP                    = 0x20\n\tIPPROTO_IP                     = 0x0\n\tIPPROTO_IPCOMP                 = 0x6c\n\tIPPROTO_IPCV                   = 0x47\n\tIPPROTO_IPEIP                  = 0x5e\n\tIPPROTO_IPIP                   = 0x4\n\tIPPROTO_IPPC                   = 0x43\n\tIPPROTO_IPV4                   = 0x4\n\tIPPROTO_IPV6                   = 0x29\n\tIPPROTO_IRTP                   = 0x1c\n\tIPPROTO_KRYPTOLAN              = 0x41\n\tIPPROTO_LARP                   = 0x5b\n\tIPPROTO_LEAF1                  = 0x19\n\tIPPROTO_LEAF2                  = 0x1a\n\tIPPROTO_MAX                    = 0x100\n\tIPPROTO_MEAS                   = 0x13\n\tIPPROTO_MH                     = 0x87\n\tIPPROTO_MHRP                   = 0x30\n\tIPPROTO_MICP                   = 0x5f\n\tIPPROTO_MOBILE                 = 0x37\n\tIPPROTO_MPLS                   = 0x89\n\tIPPROTO_MTP                    = 0x5c\n\tIPPROTO_MUX                    = 0x12\n\tIPPROTO_ND                     = 0x4d\n\tIPPROTO_NHRP                   = 0x36\n\tIPPROTO_NONE                   = 0x3b\n\tIPPROTO_NSP                    = 0x1f\n\tIPPROTO_NVPII                  = 0xb\n\tIPPROTO_OLD_DIVERT             = 0xfe\n\tIPPROTO_OSPFIGP                = 0x59\n\tIPPROTO_PFSYNC                 = 0xf0\n\tIPPROTO_PGM                    = 0x71\n\tIPPROTO_PIGP                   = 0x9\n\tIPPROTO_PIM                    = 0x67\n\tIPPROTO_PRM                    = 0x15\n\tIPPROTO_PUP                    = 0xc\n\tIPPROTO_PVP                    = 0x4b\n\tIPPROTO_RAW                    = 0xff\n\tIPPROTO_RCCMON                 = 0xa\n\tIPPROTO_RDP                    = 0x1b\n\tIPPROTO_RESERVED_253           = 0xfd\n\tIPPROTO_RESERVED_254           = 0xfe\n\tIPPROTO_ROUTING                = 0x2b\n\tIPPROTO_RSVP                   = 0x2e\n\tIPPROTO_RVD                    = 0x42\n\tIPPROTO_SATEXPAK               = 0x40\n\tIPPROTO_SATMON                 = 0x45\n\tIPPROTO_SCCSP                  = 0x60\n\tIPPROTO_SCTP                   = 0x84\n\tIPPROTO_SDRP                   = 0x2a\n\tIPPROTO_SEND                   = 0x103\n\tIPPROTO_SEP                    = 0x21\n\tIPPROTO_SHIM6                  = 0x8c\n\tIPPROTO_SKIP                   = 0x39\n\tIPPROTO_SPACER                 = 0x7fff\n\tIPPROTO_SRPC                   = 0x5a\n\tIPPROTO_ST                     = 0x7\n\tIPPROTO_SVMTP                  = 0x52\n\tIPPROTO_SWIPE                  = 0x35\n\tIPPROTO_TCF                    = 0x57\n\tIPPROTO_TCP                    = 0x6\n\tIPPROTO_TLSP                   = 0x38\n\tIPPROTO_TP                     = 0x1d\n\tIPPROTO_TPXX                   = 0x27\n\tIPPROTO_TRUNK1                 = 0x17\n\tIPPROTO_TRUNK2                 = 0x18\n\tIPPROTO_TTP                    = 0x54\n\tIPPROTO_UDP                    = 0x11\n\tIPPROTO_UDPLITE                = 0x88\n\tIPPROTO_VINES                  = 0x53\n\tIPPROTO_VISA                   = 0x46\n\tIPPROTO_VMTP                   = 0x51\n\tIPPROTO_WBEXPAK                = 0x4f\n\tIPPROTO_WBMON                  = 0x4e\n\tIPPROTO_WSN                    = 0x4a\n\tIPPROTO_XNET                   = 0xf\n\tIPPROTO_XTP                    = 0x24\n\tIPV6_AUTOFLOWLABEL             = 0x3b\n\tIPV6_BINDANY                   = 0x40\n\tIPV6_BINDMULTI                 = 0x41\n\tIPV6_BINDV6ONLY                = 0x1b\n\tIPV6_CHECKSUM                  = 0x1a\n\tIPV6_DEFAULT_MULTICAST_HOPS    = 0x1\n\tIPV6_DEFAULT_MULTICAST_LOOP    = 0x1\n\tIPV6_DEFHLIM                   = 0x40\n\tIPV6_DONTFRAG                  = 0x3e\n\tIPV6_DSTOPTS                   = 0x32\n\tIPV6_FLOWID                    = 0x43\n\tIPV6_FLOWINFO_MASK             = 0xffffff0f\n\tIPV6_FLOWLABEL_MASK            = 0xffff0f00\n\tIPV6_FLOWTYPE                  = 0x44\n\tIPV6_FRAGTTL                   = 0x78\n\tIPV6_FW_ADD                    = 0x1e\n\tIPV6_FW_DEL                    = 0x1f\n\tIPV6_FW_FLUSH                  = 0x20\n\tIPV6_FW_GET                    = 0x22\n\tIPV6_FW_ZERO                   = 0x21\n\tIPV6_HLIMDEC                   = 0x1\n\tIPV6_HOPLIMIT                  = 0x2f\n\tIPV6_HOPOPTS                   = 0x31\n\tIPV6_IPSEC_POLICY              = 0x1c\n\tIPV6_JOIN_GROUP                = 0xc\n\tIPV6_LEAVE_GROUP               = 0xd\n\tIPV6_MAXHLIM                   = 0xff\n\tIPV6_MAXOPTHDR                 = 0x800\n\tIPV6_MAXPACKET                 = 0xffff\n\tIPV6_MAX_GROUP_SRC_FILTER      = 0x200\n\tIPV6_MAX_MEMBERSHIPS           = 0xfff\n\tIPV6_MAX_SOCK_SRC_FILTER       = 0x80\n\tIPV6_MIN_MEMBERSHIPS           = 0x1f\n\tIPV6_MMTU                      = 0x500\n\tIPV6_MSFILTER                  = 0x4a\n\tIPV6_MULTICAST_HOPS            = 0xa\n\tIPV6_MULTICAST_IF              = 0x9\n\tIPV6_MULTICAST_LOOP            = 0xb\n\tIPV6_NEXTHOP                   = 0x30\n\tIPV6_PATHMTU                   = 0x2c\n\tIPV6_PKTINFO                   = 0x2e\n\tIPV6_PORTRANGE                 = 0xe\n\tIPV6_PORTRANGE_DEFAULT         = 0x0\n\tIPV6_PORTRANGE_HIGH            = 0x1\n\tIPV6_PORTRANGE_LOW             = 0x2\n\tIPV6_PREFER_TEMPADDR           = 0x3f\n\tIPV6_RECVDSTOPTS               = 0x28\n\tIPV6_RECVFLOWID                = 0x46\n\tIPV6_RECVHOPLIMIT              = 0x25\n\tIPV6_RECVHOPOPTS               = 0x27\n\tIPV6_RECVPATHMTU               = 0x2b\n\tIPV6_RECVPKTINFO               = 0x24\n\tIPV6_RECVRSSBUCKETID           = 0x47\n\tIPV6_RECVRTHDR                 = 0x26\n\tIPV6_RECVTCLASS                = 0x39\n\tIPV6_RSSBUCKETID               = 0x45\n\tIPV6_RSS_LISTEN_BUCKET         = 0x42\n\tIPV6_RTHDR                     = 0x33\n\tIPV6_RTHDRDSTOPTS              = 0x23\n\tIPV6_RTHDR_LOOSE               = 0x0\n\tIPV6_RTHDR_STRICT              = 0x1\n\tIPV6_RTHDR_TYPE_0              = 0x0\n\tIPV6_SOCKOPT_RESERVED1         = 0x3\n\tIPV6_TCLASS                    = 0x3d\n\tIPV6_UNICAST_HOPS              = 0x4\n\tIPV6_USE_MIN_MTU               = 0x2a\n\tIPV6_V6ONLY                    = 0x1b\n\tIPV6_VERSION                   = 0x60\n\tIPV6_VERSION_MASK              = 0xf0\n\tIP_ADD_MEMBERSHIP              = 0xc\n\tIP_ADD_SOURCE_MEMBERSHIP       = 0x46\n\tIP_BINDANY                     = 0x18\n\tIP_BINDMULTI                   = 0x19\n\tIP_BLOCK_SOURCE                = 0x48\n\tIP_DEFAULT_MULTICAST_LOOP      = 0x1\n\tIP_DEFAULT_MULTICAST_TTL       = 0x1\n\tIP_DF                          = 0x4000\n\tIP_DONTFRAG                    = 0x43\n\tIP_DROP_MEMBERSHIP             = 0xd\n\tIP_DROP_SOURCE_MEMBERSHIP      = 0x47\n\tIP_DUMMYNET3                   = 0x31\n\tIP_DUMMYNET_CONFIGURE          = 0x3c\n\tIP_DUMMYNET_DEL                = 0x3d\n\tIP_DUMMYNET_FLUSH              = 0x3e\n\tIP_DUMMYNET_GET                = 0x40\n\tIP_FLOWID                      = 0x5a\n\tIP_FLOWTYPE                    = 0x5b\n\tIP_FW3                         = 0x30\n\tIP_FW_ADD                      = 0x32\n\tIP_FW_DEL                      = 0x33\n\tIP_FW_FLUSH                    = 0x34\n\tIP_FW_GET                      = 0x36\n\tIP_FW_NAT_CFG                  = 0x38\n\tIP_FW_NAT_DEL                  = 0x39\n\tIP_FW_NAT_GET_CONFIG           = 0x3a\n\tIP_FW_NAT_GET_LOG              = 0x3b\n\tIP_FW_RESETLOG                 = 0x37\n\tIP_FW_TABLE_ADD                = 0x28\n\tIP_FW_TABLE_DEL                = 0x29\n\tIP_FW_TABLE_FLUSH              = 0x2a\n\tIP_FW_TABLE_GETSIZE            = 0x2b\n\tIP_FW_TABLE_LIST               = 0x2c\n\tIP_FW_ZERO                     = 0x35\n\tIP_HDRINCL                     = 0x2\n\tIP_IPSEC_POLICY                = 0x15\n\tIP_MAXPACKET                   = 0xffff\n\tIP_MAX_GROUP_SRC_FILTER        = 0x200\n\tIP_MAX_MEMBERSHIPS             = 0xfff\n\tIP_MAX_SOCK_MUTE_FILTER        = 0x80\n\tIP_MAX_SOCK_SRC_FILTER         = 0x80\n\tIP_MAX_SOURCE_FILTER           = 0x400\n\tIP_MF                          = 0x2000\n\tIP_MINTTL                      = 0x42\n\tIP_MIN_MEMBERSHIPS             = 0x1f\n\tIP_MSFILTER                    = 0x4a\n\tIP_MSS                         = 0x240\n\tIP_MULTICAST_IF                = 0x9\n\tIP_MULTICAST_LOOP              = 0xb\n\tIP_MULTICAST_TTL               = 0xa\n\tIP_MULTICAST_VIF               = 0xe\n\tIP_OFFMASK                     = 0x1fff\n\tIP_ONESBCAST                   = 0x17\n\tIP_OPTIONS                     = 0x1\n\tIP_PORTRANGE                   = 0x13\n\tIP_PORTRANGE_DEFAULT           = 0x0\n\tIP_PORTRANGE_HIGH              = 0x1\n\tIP_PORTRANGE_LOW               = 0x2\n\tIP_RECVDSTADDR                 = 0x7\n\tIP_RECVFLOWID                  = 0x5d\n\tIP_RECVIF                      = 0x14\n\tIP_RECVOPTS                    = 0x5\n\tIP_RECVRETOPTS                 = 0x6\n\tIP_RECVRSSBUCKETID             = 0x5e\n\tIP_RECVTOS                     = 0x44\n\tIP_RECVTTL                     = 0x41\n\tIP_RETOPTS                     = 0x8\n\tIP_RF                          = 0x8000\n\tIP_RSSBUCKETID                 = 0x5c\n\tIP_RSS_LISTEN_BUCKET           = 0x1a\n\tIP_RSVP_OFF                    = 0x10\n\tIP_RSVP_ON                     = 0xf\n\tIP_RSVP_VIF_OFF                = 0x12\n\tIP_RSVP_VIF_ON                 = 0x11\n\tIP_SENDSRCADDR                 = 0x7\n\tIP_TOS                         = 0x3\n\tIP_TTL                         = 0x4\n\tIP_UNBLOCK_SOURCE              = 0x49\n\tISIG                           = 0x80\n\tISTRIP                         = 0x20\n\tIXANY                          = 0x800\n\tIXOFF                          = 0x400\n\tIXON                           = 0x200\n\tKERN_HOSTNAME                  = 0xa\n\tKERN_OSRELEASE                 = 0x2\n\tKERN_OSTYPE                    = 0x1\n\tKERN_VERSION                   = 0x4\n\tLOCK_EX                        = 0x2\n\tLOCK_NB                        = 0x4\n\tLOCK_SH                        = 0x1\n\tLOCK_UN                        = 0x8\n\tMADV_AUTOSYNC                  = 0x7\n\tMADV_CORE                      = 0x9\n\tMADV_DONTNEED                  = 0x4\n\tMADV_FREE                      = 0x5\n\tMADV_NOCORE                    = 0x8\n\tMADV_NORMAL                    = 0x0\n\tMADV_NOSYNC                    = 0x6\n\tMADV_PROTECT                   = 0xa\n\tMADV_RANDOM                    = 0x1\n\tMADV_SEQUENTIAL                = 0x2\n\tMADV_WILLNEED                  = 0x3\n\tMAP_ALIGNED_SUPER              = 0x1000000\n\tMAP_ALIGNMENT_MASK             = -0x1000000\n\tMAP_ALIGNMENT_SHIFT            = 0x18\n\tMAP_ANON                       = 0x1000\n\tMAP_ANONYMOUS                  = 0x1000\n\tMAP_COPY                       = 0x2\n\tMAP_EXCL                       = 0x4000\n\tMAP_FILE                       = 0x0\n\tMAP_FIXED                      = 0x10\n\tMAP_HASSEMAPHORE               = 0x200\n\tMAP_NOCORE                     = 0x20000\n\tMAP_NOSYNC                     = 0x800\n\tMAP_PREFAULT_READ              = 0x40000\n\tMAP_PRIVATE                    = 0x2\n\tMAP_RESERVED0020               = 0x20\n\tMAP_RESERVED0040               = 0x40\n\tMAP_RESERVED0080               = 0x80\n\tMAP_RESERVED0100               = 0x100\n\tMAP_SHARED                     = 0x1\n\tMAP_STACK                      = 0x400\n\tMCL_CURRENT                    = 0x1\n\tMCL_FUTURE                     = 0x2\n\tMNT_ACLS                       = 0x8000000\n\tMNT_ASYNC                      = 0x40\n\tMNT_AUTOMOUNTED                = 0x200000000\n\tMNT_BYFSID                     = 0x8000000\n\tMNT_CMDFLAGS                   = 0xd0f0000\n\tMNT_DEFEXPORTED                = 0x200\n\tMNT_DELEXPORT                  = 0x20000\n\tMNT_EXKERB                     = 0x800\n\tMNT_EXPORTANON                 = 0x400\n\tMNT_EXPORTED                   = 0x100\n\tMNT_EXPUBLIC                   = 0x20000000\n\tMNT_EXRDONLY                   = 0x80\n\tMNT_FORCE                      = 0x80000\n\tMNT_GJOURNAL                   = 0x2000000\n\tMNT_IGNORE                     = 0x800000\n\tMNT_LAZY                       = 0x3\n\tMNT_LOCAL                      = 0x1000\n\tMNT_MULTILABEL                 = 0x4000000\n\tMNT_NFS4ACLS                   = 0x10\n\tMNT_NOATIME                    = 0x10000000\n\tMNT_NOCLUSTERR                 = 0x40000000\n\tMNT_NOCLUSTERW                 = 0x80000000\n\tMNT_NOEXEC                     = 0x4\n\tMNT_NONBUSY                    = 0x4000000\n\tMNT_NOSUID                     = 0x8\n\tMNT_NOSYMFOLLOW                = 0x400000\n\tMNT_NOWAIT                     = 0x2\n\tMNT_QUOTA                      = 0x2000\n\tMNT_RDONLY                     = 0x1\n\tMNT_RELOAD                     = 0x40000\n\tMNT_ROOTFS                     = 0x4000\n\tMNT_SNAPSHOT                   = 0x1000000\n\tMNT_SOFTDEP                    = 0x200000\n\tMNT_SUIDDIR                    = 0x100000\n\tMNT_SUJ                        = 0x100000000\n\tMNT_SUSPEND                    = 0x4\n\tMNT_SYNCHRONOUS                = 0x2\n\tMNT_UNION                      = 0x20\n\tMNT_UPDATE                     = 0x10000\n\tMNT_UPDATEMASK                 = 0x2d8d0807e\n\tMNT_USER                       = 0x8000\n\tMNT_VISFLAGMASK                = 0x3fef0ffff\n\tMNT_WAIT                       = 0x1\n\tMSG_CMSG_CLOEXEC               = 0x40000\n\tMSG_COMPAT                     = 0x8000\n\tMSG_CTRUNC                     = 0x20\n\tMSG_DONTROUTE                  = 0x4\n\tMSG_DONTWAIT                   = 0x80\n\tMSG_EOF                        = 0x100\n\tMSG_EOR                        = 0x8\n\tMSG_NBIO                       = 0x4000\n\tMSG_NOSIGNAL                   = 0x20000\n\tMSG_NOTIFICATION               = 0x2000\n\tMSG_OOB                        = 0x1\n\tMSG_PEEK                       = 0x2\n\tMSG_TRUNC                      = 0x10\n\tMSG_WAITALL                    = 0x40\n\tMSG_WAITFORONE                 = 0x80000\n\tMS_ASYNC                       = 0x1\n\tMS_INVALIDATE                  = 0x2\n\tMS_SYNC                        = 0x0\n\tNAME_MAX                       = 0xff\n\tNET_RT_DUMP                    = 0x1\n\tNET_RT_FLAGS                   = 0x2\n\tNET_RT_IFLIST                  = 0x3\n\tNET_RT_IFLISTL                 = 0x5\n\tNET_RT_IFMALIST                = 0x4\n\tNOFLSH                         = 0x80000000\n\tNOKERNINFO                     = 0x2000000\n\tNOTE_ATTRIB                    = 0x8\n\tNOTE_CHILD                     = 0x4\n\tNOTE_CLOSE                     = 0x100\n\tNOTE_CLOSE_WRITE               = 0x200\n\tNOTE_DELETE                    = 0x1\n\tNOTE_EXEC                      = 0x20000000\n\tNOTE_EXIT                      = 0x80000000\n\tNOTE_EXTEND                    = 0x4\n\tNOTE_FFAND                     = 0x40000000\n\tNOTE_FFCOPY                    = 0xc0000000\n\tNOTE_FFCTRLMASK                = 0xc0000000\n\tNOTE_FFLAGSMASK                = 0xffffff\n\tNOTE_FFNOP                     = 0x0\n\tNOTE_FFOR                      = 0x80000000\n\tNOTE_FILE_POLL                 = 0x2\n\tNOTE_FORK                      = 0x40000000\n\tNOTE_LINK                      = 0x10\n\tNOTE_LOWAT                     = 0x1\n\tNOTE_MSECONDS                  = 0x2\n\tNOTE_NSECONDS                  = 0x8\n\tNOTE_OPEN                      = 0x80\n\tNOTE_PCTRLMASK                 = 0xf0000000\n\tNOTE_PDATAMASK                 = 0xfffff\n\tNOTE_READ                      = 0x400\n\tNOTE_RENAME                    = 0x20\n\tNOTE_REVOKE                    = 0x40\n\tNOTE_SECONDS                   = 0x1\n\tNOTE_TRACK                     = 0x1\n\tNOTE_TRACKERR                  = 0x2\n\tNOTE_TRIGGER                   = 0x1000000\n\tNOTE_USECONDS                  = 0x4\n\tNOTE_WRITE                     = 0x2\n\tOCRNL                          = 0x10\n\tONLCR                          = 0x2\n\tONLRET                         = 0x40\n\tONOCR                          = 0x20\n\tONOEOT                         = 0x8\n\tOPOST                          = 0x1\n\tOXTABS                         = 0x4\n\tO_ACCMODE                      = 0x3\n\tO_APPEND                       = 0x8\n\tO_ASYNC                        = 0x40\n\tO_CLOEXEC                      = 0x100000\n\tO_CREAT                        = 0x200\n\tO_DIRECT                       = 0x10000\n\tO_DIRECTORY                    = 0x20000\n\tO_EXCL                         = 0x800\n\tO_EXEC                         = 0x40000\n\tO_EXLOCK                       = 0x20\n\tO_FSYNC                        = 0x80\n\tO_NDELAY                       = 0x4\n\tO_NOCTTY                       = 0x8000\n\tO_NOFOLLOW                     = 0x100\n\tO_NONBLOCK                     = 0x4\n\tO_RDONLY                       = 0x0\n\tO_RDWR                         = 0x2\n\tO_SHLOCK                       = 0x10\n\tO_SYNC                         = 0x80\n\tO_TRUNC                        = 0x400\n\tO_TTY_INIT                     = 0x80000\n\tO_VERIFY                       = 0x200000\n\tO_WRONLY                       = 0x1\n\tPARENB                         = 0x1000\n\tPARMRK                         = 0x8\n\tPARODD                         = 0x2000\n\tPENDIN                         = 0x20000000\n\tPRIO_PGRP                      = 0x1\n\tPRIO_PROCESS                   = 0x0\n\tPRIO_USER                      = 0x2\n\tPROT_EXEC                      = 0x4\n\tPROT_NONE                      = 0x0\n\tPROT_READ                      = 0x1\n\tPROT_WRITE                     = 0x2\n\tRLIMIT_AS                      = 0xa\n\tRLIMIT_CORE                    = 0x4\n\tRLIMIT_CPU                     = 0x0\n\tRLIMIT_DATA                    = 0x2\n\tRLIMIT_FSIZE                   = 0x1\n\tRLIMIT_MEMLOCK                 = 0x6\n\tRLIMIT_NOFILE                  = 0x8\n\tRLIMIT_NPROC                   = 0x7\n\tRLIMIT_RSS                     = 0x5\n\tRLIMIT_STACK                   = 0x3\n\tRLIM_INFINITY                  = 0x7fffffffffffffff\n\tRTAX_AUTHOR                    = 0x6\n\tRTAX_BRD                       = 0x7\n\tRTAX_DST                       = 0x0\n\tRTAX_GATEWAY                   = 0x1\n\tRTAX_GENMASK                   = 0x3\n\tRTAX_IFA                       = 0x5\n\tRTAX_IFP                       = 0x4\n\tRTAX_MAX                       = 0x8\n\tRTAX_NETMASK                   = 0x2\n\tRTA_AUTHOR                     = 0x40\n\tRTA_BRD                        = 0x80\n\tRTA_DST                        = 0x1\n\tRTA_GATEWAY                    = 0x2\n\tRTA_GENMASK                    = 0x8\n\tRTA_IFA                        = 0x20\n\tRTA_IFP                        = 0x10\n\tRTA_NETMASK                    = 0x4\n\tRTF_BLACKHOLE                  = 0x1000\n\tRTF_BROADCAST                  = 0x400000\n\tRTF_DONE                       = 0x40\n\tRTF_DYNAMIC                    = 0x10\n\tRTF_FIXEDMTU                   = 0x80000\n\tRTF_FMASK                      = 0x1004d808\n\tRTF_GATEWAY                    = 0x2\n\tRTF_GWFLAG_COMPAT              = 0x80000000\n\tRTF_HOST                       = 0x4\n\tRTF_LLDATA                     = 0x400\n\tRTF_LLINFO                     = 0x400\n\tRTF_LOCAL                      = 0x200000\n\tRTF_MODIFIED                   = 0x20\n\tRTF_MULTICAST                  = 0x800000\n\tRTF_PINNED                     = 0x100000\n\tRTF_PROTO1                     = 0x8000\n\tRTF_PROTO2                     = 0x4000\n\tRTF_PROTO3                     = 0x40000\n\tRTF_REJECT                     = 0x8\n\tRTF_RNH_LOCKED                 = 0x40000000\n\tRTF_STATIC                     = 0x800\n\tRTF_STICKY                     = 0x10000000\n\tRTF_UP                         = 0x1\n\tRTF_XRESOLVE                   = 0x200\n\tRTM_ADD                        = 0x1\n\tRTM_CHANGE                     = 0x3\n\tRTM_DELADDR                    = 0xd\n\tRTM_DELETE                     = 0x2\n\tRTM_DELMADDR                   = 0x10\n\tRTM_GET                        = 0x4\n\tRTM_IEEE80211                  = 0x12\n\tRTM_IFANNOUNCE                 = 0x11\n\tRTM_IFINFO                     = 0xe\n\tRTM_LOCK                       = 0x8\n\tRTM_LOSING                     = 0x5\n\tRTM_MISS                       = 0x7\n\tRTM_NEWADDR                    = 0xc\n\tRTM_NEWMADDR                   = 0xf\n\tRTM_REDIRECT                   = 0x6\n\tRTM_RESOLVE                    = 0xb\n\tRTM_RTTUNIT                    = 0xf4240\n\tRTM_VERSION                    = 0x5\n\tRTV_EXPIRE                     = 0x4\n\tRTV_HOPCOUNT                   = 0x2\n\tRTV_MTU                        = 0x1\n\tRTV_RPIPE                      = 0x8\n\tRTV_RTT                        = 0x40\n\tRTV_RTTVAR                     = 0x80\n\tRTV_SPIPE                      = 0x10\n\tRTV_SSTHRESH                   = 0x20\n\tRTV_WEIGHT                     = 0x100\n\tRT_ALL_FIBS                    = -0x1\n\tRT_BLACKHOLE                   = 0x40\n\tRT_CACHING_CONTEXT             = 0x1\n\tRT_DEFAULT_FIB                 = 0x0\n\tRT_HAS_GW                      = 0x80\n\tRT_HAS_HEADER                  = 0x10\n\tRT_HAS_HEADER_BIT              = 0x4\n\tRT_L2_ME                       = 0x4\n\tRT_L2_ME_BIT                   = 0x2\n\tRT_LLE_CACHE                   = 0x100\n\tRT_MAY_LOOP                    = 0x8\n\tRT_MAY_LOOP_BIT                = 0x3\n\tRT_NORTREF                     = 0x2\n\tRT_REJECT                      = 0x20\n\tRUSAGE_CHILDREN                = -0x1\n\tRUSAGE_SELF                    = 0x0\n\tRUSAGE_THREAD                  = 0x1\n\tSCM_BINTIME                    = 0x4\n\tSCM_CREDS                      = 0x3\n\tSCM_RIGHTS                     = 0x1\n\tSCM_TIMESTAMP                  = 0x2\n\tSHUT_RD                        = 0x0\n\tSHUT_RDWR                      = 0x2\n\tSHUT_WR                        = 0x1\n\tSIOCADDMULTI                   = 0x80206931\n\tSIOCAIFADDR                    = 0x8040691a\n\tSIOCAIFGROUP                   = 0x80246987\n\tSIOCATMARK                     = 0x40047307\n\tSIOCDELMULTI                   = 0x80206932\n\tSIOCDIFADDR                    = 0x80206919\n\tSIOCDIFGROUP                   = 0x80246989\n\tSIOCDIFPHYADDR                 = 0x80206949\n\tSIOCGDRVSPEC                   = 0xc01c697b\n\tSIOCGETSGCNT                   = 0xc0147210\n\tSIOCGETVIFCNT                  = 0xc014720f\n\tSIOCGHIWAT                     = 0x40047301\n\tSIOCGI2C                       = 0xc020693d\n\tSIOCGIFADDR                    = 0xc0206921\n\tSIOCGIFBRDADDR                 = 0xc0206923\n\tSIOCGIFCAP                     = 0xc020691f\n\tSIOCGIFCONF                    = 0xc0086924\n\tSIOCGIFDESCR                   = 0xc020692a\n\tSIOCGIFDSTADDR                 = 0xc0206922\n\tSIOCGIFFIB                     = 0xc020695c\n\tSIOCGIFFLAGS                   = 0xc0206911\n\tSIOCGIFGENERIC                 = 0xc020693a\n\tSIOCGIFGMEMB                   = 0xc024698a\n\tSIOCGIFGROUP                   = 0xc0246988\n\tSIOCGIFINDEX                   = 0xc0206920\n\tSIOCGIFMAC                     = 0xc0206926\n\tSIOCGIFMEDIA                   = 0xc0286938\n\tSIOCGIFMETRIC                  = 0xc0206917\n\tSIOCGIFMTU                     = 0xc0206933\n\tSIOCGIFNETMASK                 = 0xc0206925\n\tSIOCGIFPDSTADDR                = 0xc0206948\n\tSIOCGIFPHYS                    = 0xc0206935\n\tSIOCGIFPSRCADDR                = 0xc0206947\n\tSIOCGIFSTATUS                  = 0xc331693b\n\tSIOCGIFXMEDIA                  = 0xc028698b\n\tSIOCGLOWAT                     = 0x40047303\n\tSIOCGPGRP                      = 0x40047309\n\tSIOCGPRIVATE_0                 = 0xc0206950\n\tSIOCGPRIVATE_1                 = 0xc0206951\n\tSIOCGTUNFIB                    = 0xc020695e\n\tSIOCIFCREATE                   = 0xc020697a\n\tSIOCIFCREATE2                  = 0xc020697c\n\tSIOCIFDESTROY                  = 0x80206979\n\tSIOCIFGCLONERS                 = 0xc00c6978\n\tSIOCSDRVSPEC                   = 0x801c697b\n\tSIOCSHIWAT                     = 0x80047300\n\tSIOCSIFADDR                    = 0x8020690c\n\tSIOCSIFBRDADDR                 = 0x80206913\n\tSIOCSIFCAP                     = 0x8020691e\n\tSIOCSIFDESCR                   = 0x80206929\n\tSIOCSIFDSTADDR                 = 0x8020690e\n\tSIOCSIFFIB                     = 0x8020695d\n\tSIOCSIFFLAGS                   = 0x80206910\n\tSIOCSIFGENERIC                 = 0x80206939\n\tSIOCSIFLLADDR                  = 0x8020693c\n\tSIOCSIFMAC                     = 0x80206927\n\tSIOCSIFMEDIA                   = 0xc0206937\n\tSIOCSIFMETRIC                  = 0x80206918\n\tSIOCSIFMTU                     = 0x80206934\n\tSIOCSIFNAME                    = 0x80206928\n\tSIOCSIFNETMASK                 = 0x80206916\n\tSIOCSIFPHYADDR                 = 0x80406946\n\tSIOCSIFPHYS                    = 0x80206936\n\tSIOCSIFRVNET                   = 0xc020695b\n\tSIOCSIFVNET                    = 0xc020695a\n\tSIOCSLOWAT                     = 0x80047302\n\tSIOCSPGRP                      = 0x80047308\n\tSIOCSTUNFIB                    = 0x8020695f\n\tSOCK_CLOEXEC                   = 0x10000000\n\tSOCK_DGRAM                     = 0x2\n\tSOCK_MAXADDRLEN                = 0xff\n\tSOCK_NONBLOCK                  = 0x20000000\n\tSOCK_RAW                       = 0x3\n\tSOCK_RDM                       = 0x4\n\tSOCK_SEQPACKET                 = 0x5\n\tSOCK_STREAM                    = 0x1\n\tSOL_SOCKET                     = 0xffff\n\tSOMAXCONN                      = 0x80\n\tSO_ACCEPTCONN                  = 0x2\n\tSO_ACCEPTFILTER                = 0x1000\n\tSO_BINTIME                     = 0x2000\n\tSO_BROADCAST                   = 0x20\n\tSO_DEBUG                       = 0x1\n\tSO_DONTROUTE                   = 0x10\n\tSO_ERROR                       = 0x1007\n\tSO_KEEPALIVE                   = 0x8\n\tSO_LABEL                       = 0x1009\n\tSO_LINGER                      = 0x80\n\tSO_LISTENINCQLEN               = 0x1013\n\tSO_LISTENQLEN                  = 0x1012\n\tSO_LISTENQLIMIT                = 0x1011\n\tSO_NOSIGPIPE                   = 0x800\n\tSO_NO_DDP                      = 0x8000\n\tSO_NO_OFFLOAD                  = 0x4000\n\tSO_OOBINLINE                   = 0x100\n\tSO_PEERLABEL                   = 0x1010\n\tSO_PROTOCOL                    = 0x1016\n\tSO_PROTOTYPE                   = 0x1016\n\tSO_RCVBUF                      = 0x1002\n\tSO_RCVLOWAT                    = 0x1004\n\tSO_RCVTIMEO                    = 0x1006\n\tSO_REUSEADDR                   = 0x4\n\tSO_REUSEPORT                   = 0x200\n\tSO_SETFIB                      = 0x1014\n\tSO_SNDBUF                      = 0x1001\n\tSO_SNDLOWAT                    = 0x1003\n\tSO_SNDTIMEO                    = 0x1005\n\tSO_TIMESTAMP                   = 0x400\n\tSO_TYPE                        = 0x1008\n\tSO_USELOOPBACK                 = 0x40\n\tSO_USER_COOKIE                 = 0x1015\n\tSO_VENDOR                      = 0x80000000\n\tS_BLKSIZE                      = 0x200\n\tS_IEXEC                        = 0x40\n\tS_IFBLK                        = 0x6000\n\tS_IFCHR                        = 0x2000\n\tS_IFDIR                        = 0x4000\n\tS_IFIFO                        = 0x1000\n\tS_IFLNK                        = 0xa000\n\tS_IFMT                         = 0xf000\n\tS_IFREG                        = 0x8000\n\tS_IFSOCK                       = 0xc000\n\tS_IFWHT                        = 0xe000\n\tS_IREAD                        = 0x100\n\tS_IRGRP                        = 0x20\n\tS_IROTH                        = 0x4\n\tS_IRUSR                        = 0x100\n\tS_IRWXG                        = 0x38\n\tS_IRWXO                        = 0x7\n\tS_IRWXU                        = 0x1c0\n\tS_ISGID                        = 0x400\n\tS_ISTXT                        = 0x200\n\tS_ISUID                        = 0x800\n\tS_ISVTX                        = 0x200\n\tS_IWGRP                        = 0x10\n\tS_IWOTH                        = 0x2\n\tS_IWRITE                       = 0x80\n\tS_IWUSR                        = 0x80\n\tS_IXGRP                        = 0x8\n\tS_IXOTH                        = 0x1\n\tS_IXUSR                        = 0x40\n\tTAB0                           = 0x0\n\tTAB3                           = 0x4\n\tTABDLY                         = 0x4\n\tTCIFLUSH                       = 0x1\n\tTCIOFF                         = 0x3\n\tTCIOFLUSH                      = 0x3\n\tTCION                          = 0x4\n\tTCOFLUSH                       = 0x2\n\tTCOOFF                         = 0x1\n\tTCOON                          = 0x2\n\tTCP_CA_NAME_MAX                = 0x10\n\tTCP_CCALGOOPT                  = 0x41\n\tTCP_CONGESTION                 = 0x40\n\tTCP_FASTOPEN                   = 0x401\n\tTCP_FUNCTION_BLK               = 0x2000\n\tTCP_FUNCTION_NAME_LEN_MAX      = 0x20\n\tTCP_INFO                       = 0x20\n\tTCP_KEEPCNT                    = 0x400\n\tTCP_KEEPIDLE                   = 0x100\n\tTCP_KEEPINIT                   = 0x80\n\tTCP_KEEPINTVL                  = 0x200\n\tTCP_MAXBURST                   = 0x4\n\tTCP_MAXHLEN                    = 0x3c\n\tTCP_MAXOLEN                    = 0x28\n\tTCP_MAXSEG                     = 0x2\n\tTCP_MAXWIN                     = 0xffff\n\tTCP_MAX_SACK                   = 0x4\n\tTCP_MAX_WINSHIFT               = 0xe\n\tTCP_MD5SIG                     = 0x10\n\tTCP_MINMSS                     = 0xd8\n\tTCP_MSS                        = 0x218\n\tTCP_NODELAY                    = 0x1\n\tTCP_NOOPT                      = 0x8\n\tTCP_NOPUSH                     = 0x4\n\tTCP_PCAP_IN                    = 0x1000\n\tTCP_PCAP_OUT                   = 0x800\n\tTCP_VENDOR                     = 0x80000000\n\tTCSAFLUSH                      = 0x2\n\tTIOCCBRK                       = 0x2000747a\n\tTIOCCDTR                       = 0x20007478\n\tTIOCCONS                       = 0x80047462\n\tTIOCDRAIN                      = 0x2000745e\n\tTIOCEXCL                       = 0x2000740d\n\tTIOCEXT                        = 0x80047460\n\tTIOCFLUSH                      = 0x80047410\n\tTIOCGDRAINWAIT                 = 0x40047456\n\tTIOCGETA                       = 0x402c7413\n\tTIOCGETD                       = 0x4004741a\n\tTIOCGPGRP                      = 0x40047477\n\tTIOCGPTN                       = 0x4004740f\n\tTIOCGSID                       = 0x40047463\n\tTIOCGWINSZ                     = 0x40087468\n\tTIOCMBIC                       = 0x8004746b\n\tTIOCMBIS                       = 0x8004746c\n\tTIOCMGDTRWAIT                  = 0x4004745a\n\tTIOCMGET                       = 0x4004746a\n\tTIOCMSDTRWAIT                  = 0x8004745b\n\tTIOCMSET                       = 0x8004746d\n\tTIOCM_CAR                      = 0x40\n\tTIOCM_CD                       = 0x40\n\tTIOCM_CTS                      = 0x20\n\tTIOCM_DCD                      = 0x40\n\tTIOCM_DSR                      = 0x100\n\tTIOCM_DTR                      = 0x2\n\tTIOCM_LE                       = 0x1\n\tTIOCM_RI                       = 0x80\n\tTIOCM_RNG                      = 0x80\n\tTIOCM_RTS                      = 0x4\n\tTIOCM_SR                       = 0x10\n\tTIOCM_ST                       = 0x8\n\tTIOCNOTTY                      = 0x20007471\n\tTIOCNXCL                       = 0x2000740e\n\tTIOCOUTQ                       = 0x40047473\n\tTIOCPKT                        = 0x80047470\n\tTIOCPKT_DATA                   = 0x0\n\tTIOCPKT_DOSTOP                 = 0x20\n\tTIOCPKT_FLUSHREAD              = 0x1\n\tTIOCPKT_FLUSHWRITE             = 0x2\n\tTIOCPKT_IOCTL                  = 0x40\n\tTIOCPKT_NOSTOP                 = 0x10\n\tTIOCPKT_START                  = 0x8\n\tTIOCPKT_STOP                   = 0x4\n\tTIOCPTMASTER                   = 0x2000741c\n\tTIOCSBRK                       = 0x2000747b\n\tTIOCSCTTY                      = 0x20007461\n\tTIOCSDRAINWAIT                 = 0x80047457\n\tTIOCSDTR                       = 0x20007479\n\tTIOCSETA                       = 0x802c7414\n\tTIOCSETAF                      = 0x802c7416\n\tTIOCSETAW                      = 0x802c7415\n\tTIOCSETD                       = 0x8004741b\n\tTIOCSIG                        = 0x2004745f\n\tTIOCSPGRP                      = 0x80047476\n\tTIOCSTART                      = 0x2000746e\n\tTIOCSTAT                       = 0x20007465\n\tTIOCSTI                        = 0x80017472\n\tTIOCSTOP                       = 0x2000746f\n\tTIOCSWINSZ                     = 0x80087467\n\tTIOCTIMESTAMP                  = 0x40087459\n\tTIOCUCNTL                      = 0x80047466\n\tTOSTOP                         = 0x400000\n\tVDISCARD                       = 0xf\n\tVDSUSP                         = 0xb\n\tVEOF                           = 0x0\n\tVEOL                           = 0x1\n\tVEOL2                          = 0x2\n\tVERASE                         = 0x3\n\tVERASE2                        = 0x7\n\tVINTR                          = 0x8\n\tVKILL                          = 0x5\n\tVLNEXT                         = 0xe\n\tVMIN                           = 0x10\n\tVQUIT                          = 0x9\n\tVREPRINT                       = 0x6\n\tVSTART                         = 0xc\n\tVSTATUS                        = 0x12\n\tVSTOP                          = 0xd\n\tVSUSP                          = 0xa\n\tVTIME                          = 0x11\n\tVWERASE                        = 0x4\n\tWCONTINUED                     = 0x4\n\tWCOREFLAG                      = 0x80\n\tWEXITED                        = 0x10\n\tWLINUXCLONE                    = 0x80000000\n\tWNOHANG                        = 0x1\n\tWNOWAIT                        = 0x8\n\tWSTOPPED                       = 0x2\n\tWTRAPPED                       = 0x20\n\tWUNTRACED                      = 0x2\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x30)\n\tEADDRNOTAVAIL   = syscall.Errno(0x31)\n\tEAFNOSUPPORT    = syscall.Errno(0x2f)\n\tEAGAIN          = syscall.Errno(0x23)\n\tEALREADY        = syscall.Errno(0x25)\n\tEAUTH           = syscall.Errno(0x50)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADMSG         = syscall.Errno(0x59)\n\tEBADRPC         = syscall.Errno(0x48)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x55)\n\tECAPMODE        = syscall.Errno(0x5e)\n\tECHILD          = syscall.Errno(0xa)\n\tECONNABORTED    = syscall.Errno(0x35)\n\tECONNREFUSED    = syscall.Errno(0x3d)\n\tECONNRESET      = syscall.Errno(0x36)\n\tEDEADLK         = syscall.Errno(0xb)\n\tEDESTADDRREQ    = syscall.Errno(0x27)\n\tEDOM            = syscall.Errno(0x21)\n\tEDOOFUS         = syscall.Errno(0x58)\n\tEDQUOT          = syscall.Errno(0x45)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFTYPE          = syscall.Errno(0x4f)\n\tEHOSTDOWN       = syscall.Errno(0x40)\n\tEHOSTUNREACH    = syscall.Errno(0x41)\n\tEIDRM           = syscall.Errno(0x52)\n\tEILSEQ          = syscall.Errno(0x56)\n\tEINPROGRESS     = syscall.Errno(0x24)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEISCONN         = syscall.Errno(0x38)\n\tEISDIR          = syscall.Errno(0x15)\n\tELAST           = syscall.Errno(0x60)\n\tELOOP           = syscall.Errno(0x3e)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x28)\n\tEMULTIHOP       = syscall.Errno(0x5a)\n\tENAMETOOLONG    = syscall.Errno(0x3f)\n\tENEEDAUTH       = syscall.Errno(0x51)\n\tENETDOWN        = syscall.Errno(0x32)\n\tENETRESET       = syscall.Errno(0x34)\n\tENETUNREACH     = syscall.Errno(0x33)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x57)\n\tENOBUFS         = syscall.Errno(0x37)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x4d)\n\tENOLINK         = syscall.Errno(0x5b)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x53)\n\tENOPROTOOPT     = syscall.Errno(0x2a)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSYS          = syscall.Errno(0x4e)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCAPABLE     = syscall.Errno(0x5d)\n\tENOTCONN        = syscall.Errno(0x39)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x42)\n\tENOTRECOVERABLE = syscall.Errno(0x5f)\n\tENOTSOCK        = syscall.Errno(0x26)\n\tENOTSUP         = syscall.Errno(0x2d)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x2d)\n\tEOVERFLOW       = syscall.Errno(0x54)\n\tEOWNERDEAD      = syscall.Errno(0x60)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x2e)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x43)\n\tEPROCUNAVAIL    = syscall.Errno(0x4c)\n\tEPROGMISMATCH   = syscall.Errno(0x4b)\n\tEPROGUNAVAIL    = syscall.Errno(0x4a)\n\tEPROTO          = syscall.Errno(0x5c)\n\tEPROTONOSUPPORT = syscall.Errno(0x2b)\n\tEPROTOTYPE      = syscall.Errno(0x29)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x47)\n\tEROFS           = syscall.Errno(0x1e)\n\tERPCMISMATCH    = syscall.Errno(0x49)\n\tESHUTDOWN       = syscall.Errno(0x3a)\n\tESOCKTNOSUPPORT = syscall.Errno(0x2c)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x46)\n\tETIMEDOUT       = syscall.Errno(0x3c)\n\tETOOMANYREFS    = syscall.Errno(0x3b)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUSERS          = syscall.Errno(0x44)\n\tEWOULDBLOCK     = syscall.Errno(0x23)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x14)\n\tSIGCONT   = syscall.Signal(0x13)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINFO   = syscall.Signal(0x1d)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x17)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGLIBRT  = syscall.Signal(0x21)\n\tSIGLWP    = syscall.Signal(0x20)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTOP   = syscall.Signal(0x11)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTHR    = syscall.Signal(0x20)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x12)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x10)\n\tSIGUSR1   = syscall.Signal(0x1e)\n\tSIGUSR2   = syscall.Signal(0x1f)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"device not configured\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"operation not supported by device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large\"},\n\t{35, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{36, \"EINPROGRESS\", \"operation now in progress\"},\n\t{37, \"EALREADY\", \"operation already in progress\"},\n\t{38, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{39, \"EDESTADDRREQ\", \"destination address required\"},\n\t{40, \"EMSGSIZE\", \"message too long\"},\n\t{41, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{42, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{43, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{44, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{45, \"EOPNOTSUPP\", \"operation not supported\"},\n\t{46, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{47, \"EAFNOSUPPORT\", \"address family not supported by protocol family\"},\n\t{48, \"EADDRINUSE\", \"address already in use\"},\n\t{49, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{50, \"ENETDOWN\", \"network is down\"},\n\t{51, \"ENETUNREACH\", \"network is unreachable\"},\n\t{52, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{53, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{54, \"ECONNRESET\", \"connection reset by peer\"},\n\t{55, \"ENOBUFS\", \"no buffer space available\"},\n\t{56, \"EISCONN\", \"socket is already connected\"},\n\t{57, \"ENOTCONN\", \"socket is not connected\"},\n\t{58, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{59, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{60, \"ETIMEDOUT\", \"operation timed out\"},\n\t{61, \"ECONNREFUSED\", \"connection refused\"},\n\t{62, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{63, \"ENAMETOOLONG\", \"file name too long\"},\n\t{64, \"EHOSTDOWN\", \"host is down\"},\n\t{65, \"EHOSTUNREACH\", \"no route to host\"},\n\t{66, \"ENOTEMPTY\", \"directory not empty\"},\n\t{67, \"EPROCLIM\", \"too many processes\"},\n\t{68, \"EUSERS\", \"too many users\"},\n\t{69, \"EDQUOT\", \"disc quota exceeded\"},\n\t{70, \"ESTALE\", \"stale NFS file handle\"},\n\t{71, \"EREMOTE\", \"too many levels of remote in path\"},\n\t{72, \"EBADRPC\", \"RPC struct is bad\"},\n\t{73, \"ERPCMISMATCH\", \"RPC version wrong\"},\n\t{74, \"EPROGUNAVAIL\", \"RPC prog. not avail\"},\n\t{75, \"EPROGMISMATCH\", \"program version wrong\"},\n\t{76, \"EPROCUNAVAIL\", \"bad procedure for program\"},\n\t{77, \"ENOLCK\", \"no locks available\"},\n\t{78, \"ENOSYS\", \"function not implemented\"},\n\t{79, \"EFTYPE\", \"inappropriate file type or format\"},\n\t{80, \"EAUTH\", \"authentication error\"},\n\t{81, \"ENEEDAUTH\", \"need authenticator\"},\n\t{82, \"EIDRM\", \"identifier removed\"},\n\t{83, \"ENOMSG\", \"no message of desired type\"},\n\t{84, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n\t{85, \"ECANCELED\", \"operation canceled\"},\n\t{86, \"EILSEQ\", \"illegal byte sequence\"},\n\t{87, \"ENOATTR\", \"attribute not found\"},\n\t{88, \"EDOOFUS\", \"programming error\"},\n\t{89, \"EBADMSG\", \"bad message\"},\n\t{90, \"EMULTIHOP\", \"multihop attempted\"},\n\t{91, \"ENOLINK\", \"link has been severed\"},\n\t{92, \"EPROTO\", \"protocol error\"},\n\t{93, \"ENOTCAPABLE\", \"capabilities insufficient\"},\n\t{94, \"ECAPMODE\", \"not permitted in capability mode\"},\n\t{95, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{96, \"EOWNERDEAD\", \"previous owner died\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGIOT\", \"abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"suspended (signal)\"},\n\t{18, \"SIGTSTP\", \"suspended\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGINFO\", \"information request\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n\t{32, \"SIGTHR\", \"unknown signal\"},\n\t{33, \"SIGLIBRT\", \"unknown signal\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go",
    "content": "// mkerrors.sh -m64\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build amd64,freebsd\n\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs -- -m64 _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                   = 0x10\n\tAF_ARP                         = 0x23\n\tAF_ATM                         = 0x1e\n\tAF_BLUETOOTH                   = 0x24\n\tAF_CCITT                       = 0xa\n\tAF_CHAOS                       = 0x5\n\tAF_CNT                         = 0x15\n\tAF_COIP                        = 0x14\n\tAF_DATAKIT                     = 0x9\n\tAF_DECnet                      = 0xc\n\tAF_DLI                         = 0xd\n\tAF_E164                        = 0x1a\n\tAF_ECMA                        = 0x8\n\tAF_HYLINK                      = 0xf\n\tAF_IEEE80211                   = 0x25\n\tAF_IMPLINK                     = 0x3\n\tAF_INET                        = 0x2\n\tAF_INET6                       = 0x1c\n\tAF_INET6_SDP                   = 0x2a\n\tAF_INET_SDP                    = 0x28\n\tAF_IPX                         = 0x17\n\tAF_ISDN                        = 0x1a\n\tAF_ISO                         = 0x7\n\tAF_LAT                         = 0xe\n\tAF_LINK                        = 0x12\n\tAF_LOCAL                       = 0x1\n\tAF_MAX                         = 0x2a\n\tAF_NATM                        = 0x1d\n\tAF_NETBIOS                     = 0x6\n\tAF_NETGRAPH                    = 0x20\n\tAF_OSI                         = 0x7\n\tAF_PUP                         = 0x4\n\tAF_ROUTE                       = 0x11\n\tAF_SCLUSTER                    = 0x22\n\tAF_SIP                         = 0x18\n\tAF_SLOW                        = 0x21\n\tAF_SNA                         = 0xb\n\tAF_UNIX                        = 0x1\n\tAF_UNSPEC                      = 0x0\n\tAF_VENDOR00                    = 0x27\n\tAF_VENDOR01                    = 0x29\n\tAF_VENDOR02                    = 0x2b\n\tAF_VENDOR03                    = 0x2d\n\tAF_VENDOR04                    = 0x2f\n\tAF_VENDOR05                    = 0x31\n\tAF_VENDOR06                    = 0x33\n\tAF_VENDOR07                    = 0x35\n\tAF_VENDOR08                    = 0x37\n\tAF_VENDOR09                    = 0x39\n\tAF_VENDOR10                    = 0x3b\n\tAF_VENDOR11                    = 0x3d\n\tAF_VENDOR12                    = 0x3f\n\tAF_VENDOR13                    = 0x41\n\tAF_VENDOR14                    = 0x43\n\tAF_VENDOR15                    = 0x45\n\tAF_VENDOR16                    = 0x47\n\tAF_VENDOR17                    = 0x49\n\tAF_VENDOR18                    = 0x4b\n\tAF_VENDOR19                    = 0x4d\n\tAF_VENDOR20                    = 0x4f\n\tAF_VENDOR21                    = 0x51\n\tAF_VENDOR22                    = 0x53\n\tAF_VENDOR23                    = 0x55\n\tAF_VENDOR24                    = 0x57\n\tAF_VENDOR25                    = 0x59\n\tAF_VENDOR26                    = 0x5b\n\tAF_VENDOR27                    = 0x5d\n\tAF_VENDOR28                    = 0x5f\n\tAF_VENDOR29                    = 0x61\n\tAF_VENDOR30                    = 0x63\n\tAF_VENDOR31                    = 0x65\n\tAF_VENDOR32                    = 0x67\n\tAF_VENDOR33                    = 0x69\n\tAF_VENDOR34                    = 0x6b\n\tAF_VENDOR35                    = 0x6d\n\tAF_VENDOR36                    = 0x6f\n\tAF_VENDOR37                    = 0x71\n\tAF_VENDOR38                    = 0x73\n\tAF_VENDOR39                    = 0x75\n\tAF_VENDOR40                    = 0x77\n\tAF_VENDOR41                    = 0x79\n\tAF_VENDOR42                    = 0x7b\n\tAF_VENDOR43                    = 0x7d\n\tAF_VENDOR44                    = 0x7f\n\tAF_VENDOR45                    = 0x81\n\tAF_VENDOR46                    = 0x83\n\tAF_VENDOR47                    = 0x85\n\tALTWERASE                      = 0x200\n\tB0                             = 0x0\n\tB110                           = 0x6e\n\tB115200                        = 0x1c200\n\tB1200                          = 0x4b0\n\tB134                           = 0x86\n\tB14400                         = 0x3840\n\tB150                           = 0x96\n\tB1800                          = 0x708\n\tB19200                         = 0x4b00\n\tB200                           = 0xc8\n\tB230400                        = 0x38400\n\tB2400                          = 0x960\n\tB28800                         = 0x7080\n\tB300                           = 0x12c\n\tB38400                         = 0x9600\n\tB460800                        = 0x70800\n\tB4800                          = 0x12c0\n\tB50                            = 0x32\n\tB57600                         = 0xe100\n\tB600                           = 0x258\n\tB7200                          = 0x1c20\n\tB75                            = 0x4b\n\tB76800                         = 0x12c00\n\tB921600                        = 0xe1000\n\tB9600                          = 0x2580\n\tBIOCFEEDBACK                   = 0x8004427c\n\tBIOCFLUSH                      = 0x20004268\n\tBIOCGBLEN                      = 0x40044266\n\tBIOCGDIRECTION                 = 0x40044276\n\tBIOCGDLT                       = 0x4004426a\n\tBIOCGDLTLIST                   = 0xc0104279\n\tBIOCGETBUFMODE                 = 0x4004427d\n\tBIOCGETIF                      = 0x4020426b\n\tBIOCGETZMAX                    = 0x4008427f\n\tBIOCGHDRCMPLT                  = 0x40044274\n\tBIOCGRSIG                      = 0x40044272\n\tBIOCGRTIMEOUT                  = 0x4010426e\n\tBIOCGSEESENT                   = 0x40044276\n\tBIOCGSTATS                     = 0x4008426f\n\tBIOCGTSTAMP                    = 0x40044283\n\tBIOCIMMEDIATE                  = 0x80044270\n\tBIOCLOCK                       = 0x2000427a\n\tBIOCPROMISC                    = 0x20004269\n\tBIOCROTZBUF                    = 0x40184280\n\tBIOCSBLEN                      = 0xc0044266\n\tBIOCSDIRECTION                 = 0x80044277\n\tBIOCSDLT                       = 0x80044278\n\tBIOCSETBUFMODE                 = 0x8004427e\n\tBIOCSETF                       = 0x80104267\n\tBIOCSETFNR                     = 0x80104282\n\tBIOCSETIF                      = 0x8020426c\n\tBIOCSETWF                      = 0x8010427b\n\tBIOCSETZBUF                    = 0x80184281\n\tBIOCSHDRCMPLT                  = 0x80044275\n\tBIOCSRSIG                      = 0x80044273\n\tBIOCSRTIMEOUT                  = 0x8010426d\n\tBIOCSSEESENT                   = 0x80044277\n\tBIOCSTSTAMP                    = 0x80044284\n\tBIOCVERSION                    = 0x40044271\n\tBPF_A                          = 0x10\n\tBPF_ABS                        = 0x20\n\tBPF_ADD                        = 0x0\n\tBPF_ALIGNMENT                  = 0x8\n\tBPF_ALU                        = 0x4\n\tBPF_AND                        = 0x50\n\tBPF_B                          = 0x10\n\tBPF_BUFMODE_BUFFER             = 0x1\n\tBPF_BUFMODE_ZBUF               = 0x2\n\tBPF_DIV                        = 0x30\n\tBPF_H                          = 0x8\n\tBPF_IMM                        = 0x0\n\tBPF_IND                        = 0x40\n\tBPF_JA                         = 0x0\n\tBPF_JEQ                        = 0x10\n\tBPF_JGE                        = 0x30\n\tBPF_JGT                        = 0x20\n\tBPF_JMP                        = 0x5\n\tBPF_JSET                       = 0x40\n\tBPF_K                          = 0x0\n\tBPF_LD                         = 0x0\n\tBPF_LDX                        = 0x1\n\tBPF_LEN                        = 0x80\n\tBPF_LSH                        = 0x60\n\tBPF_MAJOR_VERSION              = 0x1\n\tBPF_MAXBUFSIZE                 = 0x80000\n\tBPF_MAXINSNS                   = 0x200\n\tBPF_MEM                        = 0x60\n\tBPF_MEMWORDS                   = 0x10\n\tBPF_MINBUFSIZE                 = 0x20\n\tBPF_MINOR_VERSION              = 0x1\n\tBPF_MISC                       = 0x7\n\tBPF_MOD                        = 0x90\n\tBPF_MSH                        = 0xa0\n\tBPF_MUL                        = 0x20\n\tBPF_NEG                        = 0x80\n\tBPF_OR                         = 0x40\n\tBPF_RELEASE                    = 0x30bb6\n\tBPF_RET                        = 0x6\n\tBPF_RSH                        = 0x70\n\tBPF_ST                         = 0x2\n\tBPF_STX                        = 0x3\n\tBPF_SUB                        = 0x10\n\tBPF_TAX                        = 0x0\n\tBPF_TXA                        = 0x80\n\tBPF_T_BINTIME                  = 0x2\n\tBPF_T_BINTIME_FAST             = 0x102\n\tBPF_T_BINTIME_MONOTONIC        = 0x202\n\tBPF_T_BINTIME_MONOTONIC_FAST   = 0x302\n\tBPF_T_FAST                     = 0x100\n\tBPF_T_FLAG_MASK                = 0x300\n\tBPF_T_FORMAT_MASK              = 0x3\n\tBPF_T_MICROTIME                = 0x0\n\tBPF_T_MICROTIME_FAST           = 0x100\n\tBPF_T_MICROTIME_MONOTONIC      = 0x200\n\tBPF_T_MICROTIME_MONOTONIC_FAST = 0x300\n\tBPF_T_MONOTONIC                = 0x200\n\tBPF_T_MONOTONIC_FAST           = 0x300\n\tBPF_T_NANOTIME                 = 0x1\n\tBPF_T_NANOTIME_FAST            = 0x101\n\tBPF_T_NANOTIME_MONOTONIC       = 0x201\n\tBPF_T_NANOTIME_MONOTONIC_FAST  = 0x301\n\tBPF_T_NONE                     = 0x3\n\tBPF_T_NORMAL                   = 0x0\n\tBPF_W                          = 0x0\n\tBPF_X                          = 0x8\n\tBPF_XOR                        = 0xa0\n\tBRKINT                         = 0x2\n\tCAP_ACCEPT                     = 0x200000020000000\n\tCAP_ACL_CHECK                  = 0x400000000010000\n\tCAP_ACL_DELETE                 = 0x400000000020000\n\tCAP_ACL_GET                    = 0x400000000040000\n\tCAP_ACL_SET                    = 0x400000000080000\n\tCAP_ALL0                       = 0x20007ffffffffff\n\tCAP_ALL1                       = 0x4000000001fffff\n\tCAP_BIND                       = 0x200000040000000\n\tCAP_BINDAT                     = 0x200008000000400\n\tCAP_CHFLAGSAT                  = 0x200000000001400\n\tCAP_CONNECT                    = 0x200000080000000\n\tCAP_CONNECTAT                  = 0x200010000000400\n\tCAP_CREATE                     = 0x200000000000040\n\tCAP_EVENT                      = 0x400000000000020\n\tCAP_EXTATTR_DELETE             = 0x400000000001000\n\tCAP_EXTATTR_GET                = 0x400000000002000\n\tCAP_EXTATTR_LIST               = 0x400000000004000\n\tCAP_EXTATTR_SET                = 0x400000000008000\n\tCAP_FCHDIR                     = 0x200000000000800\n\tCAP_FCHFLAGS                   = 0x200000000001000\n\tCAP_FCHMOD                     = 0x200000000002000\n\tCAP_FCHMODAT                   = 0x200000000002400\n\tCAP_FCHOWN                     = 0x200000000004000\n\tCAP_FCHOWNAT                   = 0x200000000004400\n\tCAP_FCNTL                      = 0x200000000008000\n\tCAP_FCNTL_ALL                  = 0x78\n\tCAP_FCNTL_GETFL                = 0x8\n\tCAP_FCNTL_GETOWN               = 0x20\n\tCAP_FCNTL_SETFL                = 0x10\n\tCAP_FCNTL_SETOWN               = 0x40\n\tCAP_FEXECVE                    = 0x200000000000080\n\tCAP_FLOCK                      = 0x200000000010000\n\tCAP_FPATHCONF                  = 0x200000000020000\n\tCAP_FSCK                       = 0x200000000040000\n\tCAP_FSTAT                      = 0x200000000080000\n\tCAP_FSTATAT                    = 0x200000000080400\n\tCAP_FSTATFS                    = 0x200000000100000\n\tCAP_FSYNC                      = 0x200000000000100\n\tCAP_FTRUNCATE                  = 0x200000000000200\n\tCAP_FUTIMES                    = 0x200000000200000\n\tCAP_FUTIMESAT                  = 0x200000000200400\n\tCAP_GETPEERNAME                = 0x200000100000000\n\tCAP_GETSOCKNAME                = 0x200000200000000\n\tCAP_GETSOCKOPT                 = 0x200000400000000\n\tCAP_IOCTL                      = 0x400000000000080\n\tCAP_IOCTLS_ALL                 = 0x7fffffffffffffff\n\tCAP_KQUEUE                     = 0x400000000100040\n\tCAP_KQUEUE_CHANGE              = 0x400000000100000\n\tCAP_KQUEUE_EVENT               = 0x400000000000040\n\tCAP_LINKAT_SOURCE              = 0x200020000000400\n\tCAP_LINKAT_TARGET              = 0x200000000400400\n\tCAP_LISTEN                     = 0x200000800000000\n\tCAP_LOOKUP                     = 0x200000000000400\n\tCAP_MAC_GET                    = 0x400000000000001\n\tCAP_MAC_SET                    = 0x400000000000002\n\tCAP_MKDIRAT                    = 0x200000000800400\n\tCAP_MKFIFOAT                   = 0x200000001000400\n\tCAP_MKNODAT                    = 0x200000002000400\n\tCAP_MMAP                       = 0x200000000000010\n\tCAP_MMAP_R                     = 0x20000000000001d\n\tCAP_MMAP_RW                    = 0x20000000000001f\n\tCAP_MMAP_RWX                   = 0x20000000000003f\n\tCAP_MMAP_RX                    = 0x20000000000003d\n\tCAP_MMAP_W                     = 0x20000000000001e\n\tCAP_MMAP_WX                    = 0x20000000000003e\n\tCAP_MMAP_X                     = 0x20000000000003c\n\tCAP_PDGETPID                   = 0x400000000000200\n\tCAP_PDKILL                     = 0x400000000000800\n\tCAP_PDWAIT                     = 0x400000000000400\n\tCAP_PEELOFF                    = 0x200001000000000\n\tCAP_POLL_EVENT                 = 0x400000000000020\n\tCAP_PREAD                      = 0x20000000000000d\n\tCAP_PWRITE                     = 0x20000000000000e\n\tCAP_READ                       = 0x200000000000001\n\tCAP_RECV                       = 0x200000000000001\n\tCAP_RENAMEAT_SOURCE            = 0x200000004000400\n\tCAP_RENAMEAT_TARGET            = 0x200040000000400\n\tCAP_RIGHTS_VERSION             = 0x0\n\tCAP_RIGHTS_VERSION_00          = 0x0\n\tCAP_SEEK                       = 0x20000000000000c\n\tCAP_SEEK_TELL                  = 0x200000000000004\n\tCAP_SEM_GETVALUE               = 0x400000000000004\n\tCAP_SEM_POST                   = 0x400000000000008\n\tCAP_SEM_WAIT                   = 0x400000000000010\n\tCAP_SEND                       = 0x200000000000002\n\tCAP_SETSOCKOPT                 = 0x200002000000000\n\tCAP_SHUTDOWN                   = 0x200004000000000\n\tCAP_SOCK_CLIENT                = 0x200007780000003\n\tCAP_SOCK_SERVER                = 0x200007f60000003\n\tCAP_SYMLINKAT                  = 0x200000008000400\n\tCAP_TTYHOOK                    = 0x400000000000100\n\tCAP_UNLINKAT                   = 0x200000010000400\n\tCAP_UNUSED0_44                 = 0x200080000000000\n\tCAP_UNUSED0_57                 = 0x300000000000000\n\tCAP_UNUSED1_22                 = 0x400000000200000\n\tCAP_UNUSED1_57                 = 0x500000000000000\n\tCAP_WRITE                      = 0x200000000000002\n\tCFLUSH                         = 0xf\n\tCLOCAL                         = 0x8000\n\tCLOCK_MONOTONIC                = 0x4\n\tCLOCK_MONOTONIC_FAST           = 0xc\n\tCLOCK_MONOTONIC_PRECISE        = 0xb\n\tCLOCK_PROCESS_CPUTIME_ID       = 0xf\n\tCLOCK_PROF                     = 0x2\n\tCLOCK_REALTIME                 = 0x0\n\tCLOCK_REALTIME_FAST            = 0xa\n\tCLOCK_REALTIME_PRECISE         = 0x9\n\tCLOCK_SECOND                   = 0xd\n\tCLOCK_THREAD_CPUTIME_ID        = 0xe\n\tCLOCK_UPTIME                   = 0x5\n\tCLOCK_UPTIME_FAST              = 0x8\n\tCLOCK_UPTIME_PRECISE           = 0x7\n\tCLOCK_VIRTUAL                  = 0x1\n\tCREAD                          = 0x800\n\tCRTSCTS                        = 0x30000\n\tCS5                            = 0x0\n\tCS6                            = 0x100\n\tCS7                            = 0x200\n\tCS8                            = 0x300\n\tCSIZE                          = 0x300\n\tCSTART                         = 0x11\n\tCSTATUS                        = 0x14\n\tCSTOP                          = 0x13\n\tCSTOPB                         = 0x400\n\tCSUSP                          = 0x1a\n\tCTL_HW                         = 0x6\n\tCTL_KERN                       = 0x1\n\tCTL_MAXNAME                    = 0x18\n\tCTL_NET                        = 0x4\n\tDLT_A429                       = 0xb8\n\tDLT_A653_ICM                   = 0xb9\n\tDLT_AIRONET_HEADER             = 0x78\n\tDLT_AOS                        = 0xde\n\tDLT_APPLE_IP_OVER_IEEE1394     = 0x8a\n\tDLT_ARCNET                     = 0x7\n\tDLT_ARCNET_LINUX               = 0x81\n\tDLT_ATM_CLIP                   = 0x13\n\tDLT_ATM_RFC1483                = 0xb\n\tDLT_AURORA                     = 0x7e\n\tDLT_AX25                       = 0x3\n\tDLT_AX25_KISS                  = 0xca\n\tDLT_BACNET_MS_TP               = 0xa5\n\tDLT_BLUETOOTH_BREDR_BB         = 0xff\n\tDLT_BLUETOOTH_HCI_H4           = 0xbb\n\tDLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9\n\tDLT_BLUETOOTH_LE_LL            = 0xfb\n\tDLT_BLUETOOTH_LE_LL_WITH_PHDR  = 0x100\n\tDLT_BLUETOOTH_LINUX_MONITOR    = 0xfe\n\tDLT_CAN20B                     = 0xbe\n\tDLT_CAN_SOCKETCAN              = 0xe3\n\tDLT_CHAOS                      = 0x5\n\tDLT_CHDLC                      = 0x68\n\tDLT_CISCO_IOS                  = 0x76\n\tDLT_C_HDLC                     = 0x68\n\tDLT_C_HDLC_WITH_DIR            = 0xcd\n\tDLT_DBUS                       = 0xe7\n\tDLT_DECT                       = 0xdd\n\tDLT_DOCSIS                     = 0x8f\n\tDLT_DVB_CI                     = 0xeb\n\tDLT_ECONET                     = 0x73\n\tDLT_EN10MB                     = 0x1\n\tDLT_EN3MB                      = 0x2\n\tDLT_ENC                        = 0x6d\n\tDLT_EPON                       = 0x103\n\tDLT_ERF                        = 0xc5\n\tDLT_ERF_ETH                    = 0xaf\n\tDLT_ERF_POS                    = 0xb0\n\tDLT_FC_2                       = 0xe0\n\tDLT_FC_2_WITH_FRAME_DELIMS     = 0xe1\n\tDLT_FDDI                       = 0xa\n\tDLT_FLEXRAY                    = 0xd2\n\tDLT_FRELAY                     = 0x6b\n\tDLT_FRELAY_WITH_DIR            = 0xce\n\tDLT_GCOM_SERIAL                = 0xad\n\tDLT_GCOM_T1E1                  = 0xac\n\tDLT_GPF_F                      = 0xab\n\tDLT_GPF_T                      = 0xaa\n\tDLT_GPRS_LLC                   = 0xa9\n\tDLT_GSMTAP_ABIS                = 0xda\n\tDLT_GSMTAP_UM                  = 0xd9\n\tDLT_HHDLC                      = 0x79\n\tDLT_IBM_SN                     = 0x92\n\tDLT_IBM_SP                     = 0x91\n\tDLT_IEEE802                    = 0x6\n\tDLT_IEEE802_11                 = 0x69\n\tDLT_IEEE802_11_RADIO           = 0x7f\n\tDLT_IEEE802_11_RADIO_AVS       = 0xa3\n\tDLT_IEEE802_15_4               = 0xc3\n\tDLT_IEEE802_15_4_LINUX         = 0xbf\n\tDLT_IEEE802_15_4_NOFCS         = 0xe6\n\tDLT_IEEE802_15_4_NONASK_PHY    = 0xd7\n\tDLT_IEEE802_16_MAC_CPS         = 0xbc\n\tDLT_IEEE802_16_MAC_CPS_RADIO   = 0xc1\n\tDLT_INFINIBAND                 = 0xf7\n\tDLT_IPFILTER                   = 0x74\n\tDLT_IPMB                       = 0xc7\n\tDLT_IPMB_LINUX                 = 0xd1\n\tDLT_IPMI_HPM_2                 = 0x104\n\tDLT_IPNET                      = 0xe2\n\tDLT_IPOIB                      = 0xf2\n\tDLT_IPV4                       = 0xe4\n\tDLT_IPV6                       = 0xe5\n\tDLT_IP_OVER_FC                 = 0x7a\n\tDLT_JUNIPER_ATM1               = 0x89\n\tDLT_JUNIPER_ATM2               = 0x87\n\tDLT_JUNIPER_ATM_CEMIC          = 0xee\n\tDLT_JUNIPER_CHDLC              = 0xb5\n\tDLT_JUNIPER_ES                 = 0x84\n\tDLT_JUNIPER_ETHER              = 0xb2\n\tDLT_JUNIPER_FIBRECHANNEL       = 0xea\n\tDLT_JUNIPER_FRELAY             = 0xb4\n\tDLT_JUNIPER_GGSN               = 0x85\n\tDLT_JUNIPER_ISM                = 0xc2\n\tDLT_JUNIPER_MFR                = 0x86\n\tDLT_JUNIPER_MLFR               = 0x83\n\tDLT_JUNIPER_MLPPP              = 0x82\n\tDLT_JUNIPER_MONITOR            = 0xa4\n\tDLT_JUNIPER_PIC_PEER           = 0xae\n\tDLT_JUNIPER_PPP                = 0xb3\n\tDLT_JUNIPER_PPPOE              = 0xa7\n\tDLT_JUNIPER_PPPOE_ATM          = 0xa8\n\tDLT_JUNIPER_SERVICES           = 0x88\n\tDLT_JUNIPER_SRX_E2E            = 0xe9\n\tDLT_JUNIPER_ST                 = 0xc8\n\tDLT_JUNIPER_VP                 = 0xb7\n\tDLT_JUNIPER_VS                 = 0xe8\n\tDLT_LAPB_WITH_DIR              = 0xcf\n\tDLT_LAPD                       = 0xcb\n\tDLT_LIN                        = 0xd4\n\tDLT_LINUX_EVDEV                = 0xd8\n\tDLT_LINUX_IRDA                 = 0x90\n\tDLT_LINUX_LAPD                 = 0xb1\n\tDLT_LINUX_PPP_WITHDIRECTION    = 0xa6\n\tDLT_LINUX_SLL                  = 0x71\n\tDLT_LOOP                       = 0x6c\n\tDLT_LTALK                      = 0x72\n\tDLT_MATCHING_MAX               = 0x104\n\tDLT_MATCHING_MIN               = 0x68\n\tDLT_MFR                        = 0xb6\n\tDLT_MOST                       = 0xd3\n\tDLT_MPEG_2_TS                  = 0xf3\n\tDLT_MPLS                       = 0xdb\n\tDLT_MTP2                       = 0x8c\n\tDLT_MTP2_WITH_PHDR             = 0x8b\n\tDLT_MTP3                       = 0x8d\n\tDLT_MUX27010                   = 0xec\n\tDLT_NETANALYZER                = 0xf0\n\tDLT_NETANALYZER_TRANSPARENT    = 0xf1\n\tDLT_NETLINK                    = 0xfd\n\tDLT_NFC_LLCP                   = 0xf5\n\tDLT_NFLOG                      = 0xef\n\tDLT_NG40                       = 0xf4\n\tDLT_NULL                       = 0x0\n\tDLT_PCI_EXP                    = 0x7d\n\tDLT_PFLOG                      = 0x75\n\tDLT_PFSYNC                     = 0x79\n\tDLT_PKTAP                      = 0x102\n\tDLT_PPI                        = 0xc0\n\tDLT_PPP                        = 0x9\n\tDLT_PPP_BSDOS                  = 0x10\n\tDLT_PPP_ETHER                  = 0x33\n\tDLT_PPP_PPPD                   = 0xa6\n\tDLT_PPP_SERIAL                 = 0x32\n\tDLT_PPP_WITH_DIR               = 0xcc\n\tDLT_PPP_WITH_DIRECTION         = 0xa6\n\tDLT_PRISM_HEADER               = 0x77\n\tDLT_PROFIBUS_DL                = 0x101\n\tDLT_PRONET                     = 0x4\n\tDLT_RAIF1                      = 0xc6\n\tDLT_RAW                        = 0xc\n\tDLT_RIO                        = 0x7c\n\tDLT_RTAC_SERIAL                = 0xfa\n\tDLT_SCCP                       = 0x8e\n\tDLT_SCTP                       = 0xf8\n\tDLT_SITA                       = 0xc4\n\tDLT_SLIP                       = 0x8\n\tDLT_SLIP_BSDOS                 = 0xf\n\tDLT_STANAG_5066_D_PDU          = 0xed\n\tDLT_SUNATM                     = 0x7b\n\tDLT_SYMANTEC_FIREWALL          = 0x63\n\tDLT_TZSP                       = 0x80\n\tDLT_USB                        = 0xba\n\tDLT_USBPCAP                    = 0xf9\n\tDLT_USB_LINUX                  = 0xbd\n\tDLT_USB_LINUX_MMAPPED          = 0xdc\n\tDLT_USER0                      = 0x93\n\tDLT_USER1                      = 0x94\n\tDLT_USER10                     = 0x9d\n\tDLT_USER11                     = 0x9e\n\tDLT_USER12                     = 0x9f\n\tDLT_USER13                     = 0xa0\n\tDLT_USER14                     = 0xa1\n\tDLT_USER15                     = 0xa2\n\tDLT_USER2                      = 0x95\n\tDLT_USER3                      = 0x96\n\tDLT_USER4                      = 0x97\n\tDLT_USER5                      = 0x98\n\tDLT_USER6                      = 0x99\n\tDLT_USER7                      = 0x9a\n\tDLT_USER8                      = 0x9b\n\tDLT_USER9                      = 0x9c\n\tDLT_WIHART                     = 0xdf\n\tDLT_WIRESHARK_UPPER_PDU        = 0xfc\n\tDLT_X2E_SERIAL                 = 0xd5\n\tDLT_X2E_XORAYA                 = 0xd6\n\tDT_BLK                         = 0x6\n\tDT_CHR                         = 0x2\n\tDT_DIR                         = 0x4\n\tDT_FIFO                        = 0x1\n\tDT_LNK                         = 0xa\n\tDT_REG                         = 0x8\n\tDT_SOCK                        = 0xc\n\tDT_UNKNOWN                     = 0x0\n\tDT_WHT                         = 0xe\n\tECHO                           = 0x8\n\tECHOCTL                        = 0x40\n\tECHOE                          = 0x2\n\tECHOK                          = 0x4\n\tECHOKE                         = 0x1\n\tECHONL                         = 0x10\n\tECHOPRT                        = 0x20\n\tEVFILT_AIO                     = -0x3\n\tEVFILT_FS                      = -0x9\n\tEVFILT_LIO                     = -0xa\n\tEVFILT_PROC                    = -0x5\n\tEVFILT_PROCDESC                = -0x8\n\tEVFILT_READ                    = -0x1\n\tEVFILT_SENDFILE                = -0xc\n\tEVFILT_SIGNAL                  = -0x6\n\tEVFILT_SYSCOUNT                = 0xc\n\tEVFILT_TIMER                   = -0x7\n\tEVFILT_USER                    = -0xb\n\tEVFILT_VNODE                   = -0x4\n\tEVFILT_WRITE                   = -0x2\n\tEV_ADD                         = 0x1\n\tEV_CLEAR                       = 0x20\n\tEV_DELETE                      = 0x2\n\tEV_DISABLE                     = 0x8\n\tEV_DISPATCH                    = 0x80\n\tEV_DROP                        = 0x1000\n\tEV_ENABLE                      = 0x4\n\tEV_EOF                         = 0x8000\n\tEV_ERROR                       = 0x4000\n\tEV_FLAG1                       = 0x2000\n\tEV_FLAG2                       = 0x4000\n\tEV_FORCEONESHOT                = 0x100\n\tEV_ONESHOT                     = 0x10\n\tEV_RECEIPT                     = 0x40\n\tEV_SYSFLAGS                    = 0xf000\n\tEXTA                           = 0x4b00\n\tEXTATTR_NAMESPACE_EMPTY        = 0x0\n\tEXTATTR_NAMESPACE_SYSTEM       = 0x2\n\tEXTATTR_NAMESPACE_USER         = 0x1\n\tEXTB                           = 0x9600\n\tEXTPROC                        = 0x800\n\tFD_CLOEXEC                     = 0x1\n\tFD_SETSIZE                     = 0x400\n\tFLUSHO                         = 0x800000\n\tF_CANCEL                       = 0x5\n\tF_DUP2FD                       = 0xa\n\tF_DUP2FD_CLOEXEC               = 0x12\n\tF_DUPFD                        = 0x0\n\tF_DUPFD_CLOEXEC                = 0x11\n\tF_GETFD                        = 0x1\n\tF_GETFL                        = 0x3\n\tF_GETLK                        = 0xb\n\tF_GETOWN                       = 0x5\n\tF_OGETLK                       = 0x7\n\tF_OK                           = 0x0\n\tF_OSETLK                       = 0x8\n\tF_OSETLKW                      = 0x9\n\tF_RDAHEAD                      = 0x10\n\tF_RDLCK                        = 0x1\n\tF_READAHEAD                    = 0xf\n\tF_SETFD                        = 0x2\n\tF_SETFL                        = 0x4\n\tF_SETLK                        = 0xc\n\tF_SETLKW                       = 0xd\n\tF_SETLK_REMOTE                 = 0xe\n\tF_SETOWN                       = 0x6\n\tF_UNLCK                        = 0x2\n\tF_UNLCKSYS                     = 0x4\n\tF_WRLCK                        = 0x3\n\tHUPCL                          = 0x4000\n\tHW_MACHINE                     = 0x1\n\tICANON                         = 0x100\n\tICMP6_FILTER                   = 0x12\n\tICRNL                          = 0x100\n\tIEXTEN                         = 0x400\n\tIFAN_ARRIVAL                   = 0x0\n\tIFAN_DEPARTURE                 = 0x1\n\tIFF_ALLMULTI                   = 0x200\n\tIFF_ALTPHYS                    = 0x4000\n\tIFF_BROADCAST                  = 0x2\n\tIFF_CANTCHANGE                 = 0x218f52\n\tIFF_CANTCONFIG                 = 0x10000\n\tIFF_DEBUG                      = 0x4\n\tIFF_DRV_OACTIVE                = 0x400\n\tIFF_DRV_RUNNING                = 0x40\n\tIFF_DYING                      = 0x200000\n\tIFF_LINK0                      = 0x1000\n\tIFF_LINK1                      = 0x2000\n\tIFF_LINK2                      = 0x4000\n\tIFF_LOOPBACK                   = 0x8\n\tIFF_MONITOR                    = 0x40000\n\tIFF_MULTICAST                  = 0x8000\n\tIFF_NOARP                      = 0x80\n\tIFF_OACTIVE                    = 0x400\n\tIFF_POINTOPOINT                = 0x10\n\tIFF_PPROMISC                   = 0x20000\n\tIFF_PROMISC                    = 0x100\n\tIFF_RENAMING                   = 0x400000\n\tIFF_RUNNING                    = 0x40\n\tIFF_SIMPLEX                    = 0x800\n\tIFF_STATICARP                  = 0x80000\n\tIFF_UP                         = 0x1\n\tIFNAMSIZ                       = 0x10\n\tIFT_BRIDGE                     = 0xd1\n\tIFT_CARP                       = 0xf8\n\tIFT_IEEE1394                   = 0x90\n\tIFT_INFINIBAND                 = 0xc7\n\tIFT_L2VLAN                     = 0x87\n\tIFT_L3IPVLAN                   = 0x88\n\tIFT_PPP                        = 0x17\n\tIFT_PROPVIRTUAL                = 0x35\n\tIGNBRK                         = 0x1\n\tIGNCR                          = 0x80\n\tIGNPAR                         = 0x4\n\tIMAXBEL                        = 0x2000\n\tINLCR                          = 0x40\n\tINPCK                          = 0x10\n\tIN_CLASSA_HOST                 = 0xffffff\n\tIN_CLASSA_MAX                  = 0x80\n\tIN_CLASSA_NET                  = 0xff000000\n\tIN_CLASSA_NSHIFT               = 0x18\n\tIN_CLASSB_HOST                 = 0xffff\n\tIN_CLASSB_MAX                  = 0x10000\n\tIN_CLASSB_NET                  = 0xffff0000\n\tIN_CLASSB_NSHIFT               = 0x10\n\tIN_CLASSC_HOST                 = 0xff\n\tIN_CLASSC_NET                  = 0xffffff00\n\tIN_CLASSC_NSHIFT               = 0x8\n\tIN_CLASSD_HOST                 = 0xfffffff\n\tIN_CLASSD_NET                  = 0xf0000000\n\tIN_CLASSD_NSHIFT               = 0x1c\n\tIN_LOOPBACKNET                 = 0x7f\n\tIN_RFC3021_MASK                = 0xfffffffe\n\tIPPROTO_3PC                    = 0x22\n\tIPPROTO_ADFS                   = 0x44\n\tIPPROTO_AH                     = 0x33\n\tIPPROTO_AHIP                   = 0x3d\n\tIPPROTO_APES                   = 0x63\n\tIPPROTO_ARGUS                  = 0xd\n\tIPPROTO_AX25                   = 0x5d\n\tIPPROTO_BHA                    = 0x31\n\tIPPROTO_BLT                    = 0x1e\n\tIPPROTO_BRSATMON               = 0x4c\n\tIPPROTO_CARP                   = 0x70\n\tIPPROTO_CFTP                   = 0x3e\n\tIPPROTO_CHAOS                  = 0x10\n\tIPPROTO_CMTP                   = 0x26\n\tIPPROTO_CPHB                   = 0x49\n\tIPPROTO_CPNX                   = 0x48\n\tIPPROTO_DDP                    = 0x25\n\tIPPROTO_DGP                    = 0x56\n\tIPPROTO_DIVERT                 = 0x102\n\tIPPROTO_DONE                   = 0x101\n\tIPPROTO_DSTOPTS                = 0x3c\n\tIPPROTO_EGP                    = 0x8\n\tIPPROTO_EMCON                  = 0xe\n\tIPPROTO_ENCAP                  = 0x62\n\tIPPROTO_EON                    = 0x50\n\tIPPROTO_ESP                    = 0x32\n\tIPPROTO_ETHERIP                = 0x61\n\tIPPROTO_FRAGMENT               = 0x2c\n\tIPPROTO_GGP                    = 0x3\n\tIPPROTO_GMTP                   = 0x64\n\tIPPROTO_GRE                    = 0x2f\n\tIPPROTO_HELLO                  = 0x3f\n\tIPPROTO_HIP                    = 0x8b\n\tIPPROTO_HMP                    = 0x14\n\tIPPROTO_HOPOPTS                = 0x0\n\tIPPROTO_ICMP                   = 0x1\n\tIPPROTO_ICMPV6                 = 0x3a\n\tIPPROTO_IDP                    = 0x16\n\tIPPROTO_IDPR                   = 0x23\n\tIPPROTO_IDRP                   = 0x2d\n\tIPPROTO_IGMP                   = 0x2\n\tIPPROTO_IGP                    = 0x55\n\tIPPROTO_IGRP                   = 0x58\n\tIPPROTO_IL                     = 0x28\n\tIPPROTO_INLSP                  = 0x34\n\tIPPROTO_INP                    = 0x20\n\tIPPROTO_IP                     = 0x0\n\tIPPROTO_IPCOMP                 = 0x6c\n\tIPPROTO_IPCV                   = 0x47\n\tIPPROTO_IPEIP                  = 0x5e\n\tIPPROTO_IPIP                   = 0x4\n\tIPPROTO_IPPC                   = 0x43\n\tIPPROTO_IPV4                   = 0x4\n\tIPPROTO_IPV6                   = 0x29\n\tIPPROTO_IRTP                   = 0x1c\n\tIPPROTO_KRYPTOLAN              = 0x41\n\tIPPROTO_LARP                   = 0x5b\n\tIPPROTO_LEAF1                  = 0x19\n\tIPPROTO_LEAF2                  = 0x1a\n\tIPPROTO_MAX                    = 0x100\n\tIPPROTO_MEAS                   = 0x13\n\tIPPROTO_MH                     = 0x87\n\tIPPROTO_MHRP                   = 0x30\n\tIPPROTO_MICP                   = 0x5f\n\tIPPROTO_MOBILE                 = 0x37\n\tIPPROTO_MPLS                   = 0x89\n\tIPPROTO_MTP                    = 0x5c\n\tIPPROTO_MUX                    = 0x12\n\tIPPROTO_ND                     = 0x4d\n\tIPPROTO_NHRP                   = 0x36\n\tIPPROTO_NONE                   = 0x3b\n\tIPPROTO_NSP                    = 0x1f\n\tIPPROTO_NVPII                  = 0xb\n\tIPPROTO_OLD_DIVERT             = 0xfe\n\tIPPROTO_OSPFIGP                = 0x59\n\tIPPROTO_PFSYNC                 = 0xf0\n\tIPPROTO_PGM                    = 0x71\n\tIPPROTO_PIGP                   = 0x9\n\tIPPROTO_PIM                    = 0x67\n\tIPPROTO_PRM                    = 0x15\n\tIPPROTO_PUP                    = 0xc\n\tIPPROTO_PVP                    = 0x4b\n\tIPPROTO_RAW                    = 0xff\n\tIPPROTO_RCCMON                 = 0xa\n\tIPPROTO_RDP                    = 0x1b\n\tIPPROTO_RESERVED_253           = 0xfd\n\tIPPROTO_RESERVED_254           = 0xfe\n\tIPPROTO_ROUTING                = 0x2b\n\tIPPROTO_RSVP                   = 0x2e\n\tIPPROTO_RVD                    = 0x42\n\tIPPROTO_SATEXPAK               = 0x40\n\tIPPROTO_SATMON                 = 0x45\n\tIPPROTO_SCCSP                  = 0x60\n\tIPPROTO_SCTP                   = 0x84\n\tIPPROTO_SDRP                   = 0x2a\n\tIPPROTO_SEND                   = 0x103\n\tIPPROTO_SEP                    = 0x21\n\tIPPROTO_SHIM6                  = 0x8c\n\tIPPROTO_SKIP                   = 0x39\n\tIPPROTO_SPACER                 = 0x7fff\n\tIPPROTO_SRPC                   = 0x5a\n\tIPPROTO_ST                     = 0x7\n\tIPPROTO_SVMTP                  = 0x52\n\tIPPROTO_SWIPE                  = 0x35\n\tIPPROTO_TCF                    = 0x57\n\tIPPROTO_TCP                    = 0x6\n\tIPPROTO_TLSP                   = 0x38\n\tIPPROTO_TP                     = 0x1d\n\tIPPROTO_TPXX                   = 0x27\n\tIPPROTO_TRUNK1                 = 0x17\n\tIPPROTO_TRUNK2                 = 0x18\n\tIPPROTO_TTP                    = 0x54\n\tIPPROTO_UDP                    = 0x11\n\tIPPROTO_UDPLITE                = 0x88\n\tIPPROTO_VINES                  = 0x53\n\tIPPROTO_VISA                   = 0x46\n\tIPPROTO_VMTP                   = 0x51\n\tIPPROTO_WBEXPAK                = 0x4f\n\tIPPROTO_WBMON                  = 0x4e\n\tIPPROTO_WSN                    = 0x4a\n\tIPPROTO_XNET                   = 0xf\n\tIPPROTO_XTP                    = 0x24\n\tIPV6_AUTOFLOWLABEL             = 0x3b\n\tIPV6_BINDANY                   = 0x40\n\tIPV6_BINDMULTI                 = 0x41\n\tIPV6_BINDV6ONLY                = 0x1b\n\tIPV6_CHECKSUM                  = 0x1a\n\tIPV6_DEFAULT_MULTICAST_HOPS    = 0x1\n\tIPV6_DEFAULT_MULTICAST_LOOP    = 0x1\n\tIPV6_DEFHLIM                   = 0x40\n\tIPV6_DONTFRAG                  = 0x3e\n\tIPV6_DSTOPTS                   = 0x32\n\tIPV6_FLOWID                    = 0x43\n\tIPV6_FLOWINFO_MASK             = 0xffffff0f\n\tIPV6_FLOWLABEL_MASK            = 0xffff0f00\n\tIPV6_FLOWTYPE                  = 0x44\n\tIPV6_FRAGTTL                   = 0x78\n\tIPV6_FW_ADD                    = 0x1e\n\tIPV6_FW_DEL                    = 0x1f\n\tIPV6_FW_FLUSH                  = 0x20\n\tIPV6_FW_GET                    = 0x22\n\tIPV6_FW_ZERO                   = 0x21\n\tIPV6_HLIMDEC                   = 0x1\n\tIPV6_HOPLIMIT                  = 0x2f\n\tIPV6_HOPOPTS                   = 0x31\n\tIPV6_IPSEC_POLICY              = 0x1c\n\tIPV6_JOIN_GROUP                = 0xc\n\tIPV6_LEAVE_GROUP               = 0xd\n\tIPV6_MAXHLIM                   = 0xff\n\tIPV6_MAXOPTHDR                 = 0x800\n\tIPV6_MAXPACKET                 = 0xffff\n\tIPV6_MAX_GROUP_SRC_FILTER      = 0x200\n\tIPV6_MAX_MEMBERSHIPS           = 0xfff\n\tIPV6_MAX_SOCK_SRC_FILTER       = 0x80\n\tIPV6_MIN_MEMBERSHIPS           = 0x1f\n\tIPV6_MMTU                      = 0x500\n\tIPV6_MSFILTER                  = 0x4a\n\tIPV6_MULTICAST_HOPS            = 0xa\n\tIPV6_MULTICAST_IF              = 0x9\n\tIPV6_MULTICAST_LOOP            = 0xb\n\tIPV6_NEXTHOP                   = 0x30\n\tIPV6_PATHMTU                   = 0x2c\n\tIPV6_PKTINFO                   = 0x2e\n\tIPV6_PORTRANGE                 = 0xe\n\tIPV6_PORTRANGE_DEFAULT         = 0x0\n\tIPV6_PORTRANGE_HIGH            = 0x1\n\tIPV6_PORTRANGE_LOW             = 0x2\n\tIPV6_PREFER_TEMPADDR           = 0x3f\n\tIPV6_RECVDSTOPTS               = 0x28\n\tIPV6_RECVFLOWID                = 0x46\n\tIPV6_RECVHOPLIMIT              = 0x25\n\tIPV6_RECVHOPOPTS               = 0x27\n\tIPV6_RECVPATHMTU               = 0x2b\n\tIPV6_RECVPKTINFO               = 0x24\n\tIPV6_RECVRSSBUCKETID           = 0x47\n\tIPV6_RECVRTHDR                 = 0x26\n\tIPV6_RECVTCLASS                = 0x39\n\tIPV6_RSSBUCKETID               = 0x45\n\tIPV6_RSS_LISTEN_BUCKET         = 0x42\n\tIPV6_RTHDR                     = 0x33\n\tIPV6_RTHDRDSTOPTS              = 0x23\n\tIPV6_RTHDR_LOOSE               = 0x0\n\tIPV6_RTHDR_STRICT              = 0x1\n\tIPV6_RTHDR_TYPE_0              = 0x0\n\tIPV6_SOCKOPT_RESERVED1         = 0x3\n\tIPV6_TCLASS                    = 0x3d\n\tIPV6_UNICAST_HOPS              = 0x4\n\tIPV6_USE_MIN_MTU               = 0x2a\n\tIPV6_V6ONLY                    = 0x1b\n\tIPV6_VERSION                   = 0x60\n\tIPV6_VERSION_MASK              = 0xf0\n\tIP_ADD_MEMBERSHIP              = 0xc\n\tIP_ADD_SOURCE_MEMBERSHIP       = 0x46\n\tIP_BINDANY                     = 0x18\n\tIP_BINDMULTI                   = 0x19\n\tIP_BLOCK_SOURCE                = 0x48\n\tIP_DEFAULT_MULTICAST_LOOP      = 0x1\n\tIP_DEFAULT_MULTICAST_TTL       = 0x1\n\tIP_DF                          = 0x4000\n\tIP_DONTFRAG                    = 0x43\n\tIP_DROP_MEMBERSHIP             = 0xd\n\tIP_DROP_SOURCE_MEMBERSHIP      = 0x47\n\tIP_DUMMYNET3                   = 0x31\n\tIP_DUMMYNET_CONFIGURE          = 0x3c\n\tIP_DUMMYNET_DEL                = 0x3d\n\tIP_DUMMYNET_FLUSH              = 0x3e\n\tIP_DUMMYNET_GET                = 0x40\n\tIP_FLOWID                      = 0x5a\n\tIP_FLOWTYPE                    = 0x5b\n\tIP_FW3                         = 0x30\n\tIP_FW_ADD                      = 0x32\n\tIP_FW_DEL                      = 0x33\n\tIP_FW_FLUSH                    = 0x34\n\tIP_FW_GET                      = 0x36\n\tIP_FW_NAT_CFG                  = 0x38\n\tIP_FW_NAT_DEL                  = 0x39\n\tIP_FW_NAT_GET_CONFIG           = 0x3a\n\tIP_FW_NAT_GET_LOG              = 0x3b\n\tIP_FW_RESETLOG                 = 0x37\n\tIP_FW_TABLE_ADD                = 0x28\n\tIP_FW_TABLE_DEL                = 0x29\n\tIP_FW_TABLE_FLUSH              = 0x2a\n\tIP_FW_TABLE_GETSIZE            = 0x2b\n\tIP_FW_TABLE_LIST               = 0x2c\n\tIP_FW_ZERO                     = 0x35\n\tIP_HDRINCL                     = 0x2\n\tIP_IPSEC_POLICY                = 0x15\n\tIP_MAXPACKET                   = 0xffff\n\tIP_MAX_GROUP_SRC_FILTER        = 0x200\n\tIP_MAX_MEMBERSHIPS             = 0xfff\n\tIP_MAX_SOCK_MUTE_FILTER        = 0x80\n\tIP_MAX_SOCK_SRC_FILTER         = 0x80\n\tIP_MAX_SOURCE_FILTER           = 0x400\n\tIP_MF                          = 0x2000\n\tIP_MINTTL                      = 0x42\n\tIP_MIN_MEMBERSHIPS             = 0x1f\n\tIP_MSFILTER                    = 0x4a\n\tIP_MSS                         = 0x240\n\tIP_MULTICAST_IF                = 0x9\n\tIP_MULTICAST_LOOP              = 0xb\n\tIP_MULTICAST_TTL               = 0xa\n\tIP_MULTICAST_VIF               = 0xe\n\tIP_OFFMASK                     = 0x1fff\n\tIP_ONESBCAST                   = 0x17\n\tIP_OPTIONS                     = 0x1\n\tIP_PORTRANGE                   = 0x13\n\tIP_PORTRANGE_DEFAULT           = 0x0\n\tIP_PORTRANGE_HIGH              = 0x1\n\tIP_PORTRANGE_LOW               = 0x2\n\tIP_RECVDSTADDR                 = 0x7\n\tIP_RECVFLOWID                  = 0x5d\n\tIP_RECVIF                      = 0x14\n\tIP_RECVOPTS                    = 0x5\n\tIP_RECVRETOPTS                 = 0x6\n\tIP_RECVRSSBUCKETID             = 0x5e\n\tIP_RECVTOS                     = 0x44\n\tIP_RECVTTL                     = 0x41\n\tIP_RETOPTS                     = 0x8\n\tIP_RF                          = 0x8000\n\tIP_RSSBUCKETID                 = 0x5c\n\tIP_RSS_LISTEN_BUCKET           = 0x1a\n\tIP_RSVP_OFF                    = 0x10\n\tIP_RSVP_ON                     = 0xf\n\tIP_RSVP_VIF_OFF                = 0x12\n\tIP_RSVP_VIF_ON                 = 0x11\n\tIP_SENDSRCADDR                 = 0x7\n\tIP_TOS                         = 0x3\n\tIP_TTL                         = 0x4\n\tIP_UNBLOCK_SOURCE              = 0x49\n\tISIG                           = 0x80\n\tISTRIP                         = 0x20\n\tIXANY                          = 0x800\n\tIXOFF                          = 0x400\n\tIXON                           = 0x200\n\tKERN_HOSTNAME                  = 0xa\n\tKERN_OSRELEASE                 = 0x2\n\tKERN_OSTYPE                    = 0x1\n\tKERN_VERSION                   = 0x4\n\tLOCK_EX                        = 0x2\n\tLOCK_NB                        = 0x4\n\tLOCK_SH                        = 0x1\n\tLOCK_UN                        = 0x8\n\tMADV_AUTOSYNC                  = 0x7\n\tMADV_CORE                      = 0x9\n\tMADV_DONTNEED                  = 0x4\n\tMADV_FREE                      = 0x5\n\tMADV_NOCORE                    = 0x8\n\tMADV_NORMAL                    = 0x0\n\tMADV_NOSYNC                    = 0x6\n\tMADV_PROTECT                   = 0xa\n\tMADV_RANDOM                    = 0x1\n\tMADV_SEQUENTIAL                = 0x2\n\tMADV_WILLNEED                  = 0x3\n\tMAP_32BIT                      = 0x80000\n\tMAP_ALIGNED_SUPER              = 0x1000000\n\tMAP_ALIGNMENT_MASK             = -0x1000000\n\tMAP_ALIGNMENT_SHIFT            = 0x18\n\tMAP_ANON                       = 0x1000\n\tMAP_ANONYMOUS                  = 0x1000\n\tMAP_COPY                       = 0x2\n\tMAP_EXCL                       = 0x4000\n\tMAP_FILE                       = 0x0\n\tMAP_FIXED                      = 0x10\n\tMAP_HASSEMAPHORE               = 0x200\n\tMAP_NOCORE                     = 0x20000\n\tMAP_NOSYNC                     = 0x800\n\tMAP_PREFAULT_READ              = 0x40000\n\tMAP_PRIVATE                    = 0x2\n\tMAP_RESERVED0020               = 0x20\n\tMAP_RESERVED0040               = 0x40\n\tMAP_RESERVED0080               = 0x80\n\tMAP_RESERVED0100               = 0x100\n\tMAP_SHARED                     = 0x1\n\tMAP_STACK                      = 0x400\n\tMCL_CURRENT                    = 0x1\n\tMCL_FUTURE                     = 0x2\n\tMNT_ACLS                       = 0x8000000\n\tMNT_ASYNC                      = 0x40\n\tMNT_AUTOMOUNTED                = 0x200000000\n\tMNT_BYFSID                     = 0x8000000\n\tMNT_CMDFLAGS                   = 0xd0f0000\n\tMNT_DEFEXPORTED                = 0x200\n\tMNT_DELEXPORT                  = 0x20000\n\tMNT_EXKERB                     = 0x800\n\tMNT_EXPORTANON                 = 0x400\n\tMNT_EXPORTED                   = 0x100\n\tMNT_EXPUBLIC                   = 0x20000000\n\tMNT_EXRDONLY                   = 0x80\n\tMNT_FORCE                      = 0x80000\n\tMNT_GJOURNAL                   = 0x2000000\n\tMNT_IGNORE                     = 0x800000\n\tMNT_LAZY                       = 0x3\n\tMNT_LOCAL                      = 0x1000\n\tMNT_MULTILABEL                 = 0x4000000\n\tMNT_NFS4ACLS                   = 0x10\n\tMNT_NOATIME                    = 0x10000000\n\tMNT_NOCLUSTERR                 = 0x40000000\n\tMNT_NOCLUSTERW                 = 0x80000000\n\tMNT_NOEXEC                     = 0x4\n\tMNT_NONBUSY                    = 0x4000000\n\tMNT_NOSUID                     = 0x8\n\tMNT_NOSYMFOLLOW                = 0x400000\n\tMNT_NOWAIT                     = 0x2\n\tMNT_QUOTA                      = 0x2000\n\tMNT_RDONLY                     = 0x1\n\tMNT_RELOAD                     = 0x40000\n\tMNT_ROOTFS                     = 0x4000\n\tMNT_SNAPSHOT                   = 0x1000000\n\tMNT_SOFTDEP                    = 0x200000\n\tMNT_SUIDDIR                    = 0x100000\n\tMNT_SUJ                        = 0x100000000\n\tMNT_SUSPEND                    = 0x4\n\tMNT_SYNCHRONOUS                = 0x2\n\tMNT_UNION                      = 0x20\n\tMNT_UPDATE                     = 0x10000\n\tMNT_UPDATEMASK                 = 0x2d8d0807e\n\tMNT_USER                       = 0x8000\n\tMNT_VISFLAGMASK                = 0x3fef0ffff\n\tMNT_WAIT                       = 0x1\n\tMSG_CMSG_CLOEXEC               = 0x40000\n\tMSG_COMPAT                     = 0x8000\n\tMSG_CTRUNC                     = 0x20\n\tMSG_DONTROUTE                  = 0x4\n\tMSG_DONTWAIT                   = 0x80\n\tMSG_EOF                        = 0x100\n\tMSG_EOR                        = 0x8\n\tMSG_NBIO                       = 0x4000\n\tMSG_NOSIGNAL                   = 0x20000\n\tMSG_NOTIFICATION               = 0x2000\n\tMSG_OOB                        = 0x1\n\tMSG_PEEK                       = 0x2\n\tMSG_TRUNC                      = 0x10\n\tMSG_WAITALL                    = 0x40\n\tMSG_WAITFORONE                 = 0x80000\n\tMS_ASYNC                       = 0x1\n\tMS_INVALIDATE                  = 0x2\n\tMS_SYNC                        = 0x0\n\tNAME_MAX                       = 0xff\n\tNET_RT_DUMP                    = 0x1\n\tNET_RT_FLAGS                   = 0x2\n\tNET_RT_IFLIST                  = 0x3\n\tNET_RT_IFLISTL                 = 0x5\n\tNET_RT_IFMALIST                = 0x4\n\tNOFLSH                         = 0x80000000\n\tNOKERNINFO                     = 0x2000000\n\tNOTE_ATTRIB                    = 0x8\n\tNOTE_CHILD                     = 0x4\n\tNOTE_CLOSE                     = 0x100\n\tNOTE_CLOSE_WRITE               = 0x200\n\tNOTE_DELETE                    = 0x1\n\tNOTE_EXEC                      = 0x20000000\n\tNOTE_EXIT                      = 0x80000000\n\tNOTE_EXTEND                    = 0x4\n\tNOTE_FFAND                     = 0x40000000\n\tNOTE_FFCOPY                    = 0xc0000000\n\tNOTE_FFCTRLMASK                = 0xc0000000\n\tNOTE_FFLAGSMASK                = 0xffffff\n\tNOTE_FFNOP                     = 0x0\n\tNOTE_FFOR                      = 0x80000000\n\tNOTE_FILE_POLL                 = 0x2\n\tNOTE_FORK                      = 0x40000000\n\tNOTE_LINK                      = 0x10\n\tNOTE_LOWAT                     = 0x1\n\tNOTE_MSECONDS                  = 0x2\n\tNOTE_NSECONDS                  = 0x8\n\tNOTE_OPEN                      = 0x80\n\tNOTE_PCTRLMASK                 = 0xf0000000\n\tNOTE_PDATAMASK                 = 0xfffff\n\tNOTE_READ                      = 0x400\n\tNOTE_RENAME                    = 0x20\n\tNOTE_REVOKE                    = 0x40\n\tNOTE_SECONDS                   = 0x1\n\tNOTE_TRACK                     = 0x1\n\tNOTE_TRACKERR                  = 0x2\n\tNOTE_TRIGGER                   = 0x1000000\n\tNOTE_USECONDS                  = 0x4\n\tNOTE_WRITE                     = 0x2\n\tOCRNL                          = 0x10\n\tONLCR                          = 0x2\n\tONLRET                         = 0x40\n\tONOCR                          = 0x20\n\tONOEOT                         = 0x8\n\tOPOST                          = 0x1\n\tOXTABS                         = 0x4\n\tO_ACCMODE                      = 0x3\n\tO_APPEND                       = 0x8\n\tO_ASYNC                        = 0x40\n\tO_CLOEXEC                      = 0x100000\n\tO_CREAT                        = 0x200\n\tO_DIRECT                       = 0x10000\n\tO_DIRECTORY                    = 0x20000\n\tO_EXCL                         = 0x800\n\tO_EXEC                         = 0x40000\n\tO_EXLOCK                       = 0x20\n\tO_FSYNC                        = 0x80\n\tO_NDELAY                       = 0x4\n\tO_NOCTTY                       = 0x8000\n\tO_NOFOLLOW                     = 0x100\n\tO_NONBLOCK                     = 0x4\n\tO_RDONLY                       = 0x0\n\tO_RDWR                         = 0x2\n\tO_SHLOCK                       = 0x10\n\tO_SYNC                         = 0x80\n\tO_TRUNC                        = 0x400\n\tO_TTY_INIT                     = 0x80000\n\tO_VERIFY                       = 0x200000\n\tO_WRONLY                       = 0x1\n\tPARENB                         = 0x1000\n\tPARMRK                         = 0x8\n\tPARODD                         = 0x2000\n\tPENDIN                         = 0x20000000\n\tPRIO_PGRP                      = 0x1\n\tPRIO_PROCESS                   = 0x0\n\tPRIO_USER                      = 0x2\n\tPROT_EXEC                      = 0x4\n\tPROT_NONE                      = 0x0\n\tPROT_READ                      = 0x1\n\tPROT_WRITE                     = 0x2\n\tRLIMIT_AS                      = 0xa\n\tRLIMIT_CORE                    = 0x4\n\tRLIMIT_CPU                     = 0x0\n\tRLIMIT_DATA                    = 0x2\n\tRLIMIT_FSIZE                   = 0x1\n\tRLIMIT_MEMLOCK                 = 0x6\n\tRLIMIT_NOFILE                  = 0x8\n\tRLIMIT_NPROC                   = 0x7\n\tRLIMIT_RSS                     = 0x5\n\tRLIMIT_STACK                   = 0x3\n\tRLIM_INFINITY                  = 0x7fffffffffffffff\n\tRTAX_AUTHOR                    = 0x6\n\tRTAX_BRD                       = 0x7\n\tRTAX_DST                       = 0x0\n\tRTAX_GATEWAY                   = 0x1\n\tRTAX_GENMASK                   = 0x3\n\tRTAX_IFA                       = 0x5\n\tRTAX_IFP                       = 0x4\n\tRTAX_MAX                       = 0x8\n\tRTAX_NETMASK                   = 0x2\n\tRTA_AUTHOR                     = 0x40\n\tRTA_BRD                        = 0x80\n\tRTA_DST                        = 0x1\n\tRTA_GATEWAY                    = 0x2\n\tRTA_GENMASK                    = 0x8\n\tRTA_IFA                        = 0x20\n\tRTA_IFP                        = 0x10\n\tRTA_NETMASK                    = 0x4\n\tRTF_BLACKHOLE                  = 0x1000\n\tRTF_BROADCAST                  = 0x400000\n\tRTF_DONE                       = 0x40\n\tRTF_DYNAMIC                    = 0x10\n\tRTF_FIXEDMTU                   = 0x80000\n\tRTF_FMASK                      = 0x1004d808\n\tRTF_GATEWAY                    = 0x2\n\tRTF_GWFLAG_COMPAT              = 0x80000000\n\tRTF_HOST                       = 0x4\n\tRTF_LLDATA                     = 0x400\n\tRTF_LLINFO                     = 0x400\n\tRTF_LOCAL                      = 0x200000\n\tRTF_MODIFIED                   = 0x20\n\tRTF_MULTICAST                  = 0x800000\n\tRTF_PINNED                     = 0x100000\n\tRTF_PROTO1                     = 0x8000\n\tRTF_PROTO2                     = 0x4000\n\tRTF_PROTO3                     = 0x40000\n\tRTF_REJECT                     = 0x8\n\tRTF_RNH_LOCKED                 = 0x40000000\n\tRTF_STATIC                     = 0x800\n\tRTF_STICKY                     = 0x10000000\n\tRTF_UP                         = 0x1\n\tRTF_XRESOLVE                   = 0x200\n\tRTM_ADD                        = 0x1\n\tRTM_CHANGE                     = 0x3\n\tRTM_DELADDR                    = 0xd\n\tRTM_DELETE                     = 0x2\n\tRTM_DELMADDR                   = 0x10\n\tRTM_GET                        = 0x4\n\tRTM_IEEE80211                  = 0x12\n\tRTM_IFANNOUNCE                 = 0x11\n\tRTM_IFINFO                     = 0xe\n\tRTM_LOCK                       = 0x8\n\tRTM_LOSING                     = 0x5\n\tRTM_MISS                       = 0x7\n\tRTM_NEWADDR                    = 0xc\n\tRTM_NEWMADDR                   = 0xf\n\tRTM_REDIRECT                   = 0x6\n\tRTM_RESOLVE                    = 0xb\n\tRTM_RTTUNIT                    = 0xf4240\n\tRTM_VERSION                    = 0x5\n\tRTV_EXPIRE                     = 0x4\n\tRTV_HOPCOUNT                   = 0x2\n\tRTV_MTU                        = 0x1\n\tRTV_RPIPE                      = 0x8\n\tRTV_RTT                        = 0x40\n\tRTV_RTTVAR                     = 0x80\n\tRTV_SPIPE                      = 0x10\n\tRTV_SSTHRESH                   = 0x20\n\tRTV_WEIGHT                     = 0x100\n\tRT_ALL_FIBS                    = -0x1\n\tRT_BLACKHOLE                   = 0x40\n\tRT_CACHING_CONTEXT             = 0x1\n\tRT_DEFAULT_FIB                 = 0x0\n\tRT_HAS_GW                      = 0x80\n\tRT_HAS_HEADER                  = 0x10\n\tRT_HAS_HEADER_BIT              = 0x4\n\tRT_L2_ME                       = 0x4\n\tRT_L2_ME_BIT                   = 0x2\n\tRT_LLE_CACHE                   = 0x100\n\tRT_MAY_LOOP                    = 0x8\n\tRT_MAY_LOOP_BIT                = 0x3\n\tRT_NORTREF                     = 0x2\n\tRT_REJECT                      = 0x20\n\tRUSAGE_CHILDREN                = -0x1\n\tRUSAGE_SELF                    = 0x0\n\tRUSAGE_THREAD                  = 0x1\n\tSCM_BINTIME                    = 0x4\n\tSCM_CREDS                      = 0x3\n\tSCM_RIGHTS                     = 0x1\n\tSCM_TIMESTAMP                  = 0x2\n\tSHUT_RD                        = 0x0\n\tSHUT_RDWR                      = 0x2\n\tSHUT_WR                        = 0x1\n\tSIOCADDMULTI                   = 0x80206931\n\tSIOCAIFADDR                    = 0x8040691a\n\tSIOCAIFGROUP                   = 0x80286987\n\tSIOCATMARK                     = 0x40047307\n\tSIOCDELMULTI                   = 0x80206932\n\tSIOCDIFADDR                    = 0x80206919\n\tSIOCDIFGROUP                   = 0x80286989\n\tSIOCDIFPHYADDR                 = 0x80206949\n\tSIOCGDRVSPEC                   = 0xc028697b\n\tSIOCGETSGCNT                   = 0xc0207210\n\tSIOCGETVIFCNT                  = 0xc028720f\n\tSIOCGHIWAT                     = 0x40047301\n\tSIOCGI2C                       = 0xc020693d\n\tSIOCGIFADDR                    = 0xc0206921\n\tSIOCGIFBRDADDR                 = 0xc0206923\n\tSIOCGIFCAP                     = 0xc020691f\n\tSIOCGIFCONF                    = 0xc0106924\n\tSIOCGIFDESCR                   = 0xc020692a\n\tSIOCGIFDSTADDR                 = 0xc0206922\n\tSIOCGIFFIB                     = 0xc020695c\n\tSIOCGIFFLAGS                   = 0xc0206911\n\tSIOCGIFGENERIC                 = 0xc020693a\n\tSIOCGIFGMEMB                   = 0xc028698a\n\tSIOCGIFGROUP                   = 0xc0286988\n\tSIOCGIFINDEX                   = 0xc0206920\n\tSIOCGIFMAC                     = 0xc0206926\n\tSIOCGIFMEDIA                   = 0xc0306938\n\tSIOCGIFMETRIC                  = 0xc0206917\n\tSIOCGIFMTU                     = 0xc0206933\n\tSIOCGIFNETMASK                 = 0xc0206925\n\tSIOCGIFPDSTADDR                = 0xc0206948\n\tSIOCGIFPHYS                    = 0xc0206935\n\tSIOCGIFPSRCADDR                = 0xc0206947\n\tSIOCGIFSTATUS                  = 0xc331693b\n\tSIOCGIFXMEDIA                  = 0xc030698b\n\tSIOCGLOWAT                     = 0x40047303\n\tSIOCGPGRP                      = 0x40047309\n\tSIOCGPRIVATE_0                 = 0xc0206950\n\tSIOCGPRIVATE_1                 = 0xc0206951\n\tSIOCGTUNFIB                    = 0xc020695e\n\tSIOCIFCREATE                   = 0xc020697a\n\tSIOCIFCREATE2                  = 0xc020697c\n\tSIOCIFDESTROY                  = 0x80206979\n\tSIOCIFGCLONERS                 = 0xc0106978\n\tSIOCSDRVSPEC                   = 0x8028697b\n\tSIOCSHIWAT                     = 0x80047300\n\tSIOCSIFADDR                    = 0x8020690c\n\tSIOCSIFBRDADDR                 = 0x80206913\n\tSIOCSIFCAP                     = 0x8020691e\n\tSIOCSIFDESCR                   = 0x80206929\n\tSIOCSIFDSTADDR                 = 0x8020690e\n\tSIOCSIFFIB                     = 0x8020695d\n\tSIOCSIFFLAGS                   = 0x80206910\n\tSIOCSIFGENERIC                 = 0x80206939\n\tSIOCSIFLLADDR                  = 0x8020693c\n\tSIOCSIFMAC                     = 0x80206927\n\tSIOCSIFMEDIA                   = 0xc0206937\n\tSIOCSIFMETRIC                  = 0x80206918\n\tSIOCSIFMTU                     = 0x80206934\n\tSIOCSIFNAME                    = 0x80206928\n\tSIOCSIFNETMASK                 = 0x80206916\n\tSIOCSIFPHYADDR                 = 0x80406946\n\tSIOCSIFPHYS                    = 0x80206936\n\tSIOCSIFRVNET                   = 0xc020695b\n\tSIOCSIFVNET                    = 0xc020695a\n\tSIOCSLOWAT                     = 0x80047302\n\tSIOCSPGRP                      = 0x80047308\n\tSIOCSTUNFIB                    = 0x8020695f\n\tSOCK_CLOEXEC                   = 0x10000000\n\tSOCK_DGRAM                     = 0x2\n\tSOCK_MAXADDRLEN                = 0xff\n\tSOCK_NONBLOCK                  = 0x20000000\n\tSOCK_RAW                       = 0x3\n\tSOCK_RDM                       = 0x4\n\tSOCK_SEQPACKET                 = 0x5\n\tSOCK_STREAM                    = 0x1\n\tSOL_SOCKET                     = 0xffff\n\tSOMAXCONN                      = 0x80\n\tSO_ACCEPTCONN                  = 0x2\n\tSO_ACCEPTFILTER                = 0x1000\n\tSO_BINTIME                     = 0x2000\n\tSO_BROADCAST                   = 0x20\n\tSO_DEBUG                       = 0x1\n\tSO_DONTROUTE                   = 0x10\n\tSO_ERROR                       = 0x1007\n\tSO_KEEPALIVE                   = 0x8\n\tSO_LABEL                       = 0x1009\n\tSO_LINGER                      = 0x80\n\tSO_LISTENINCQLEN               = 0x1013\n\tSO_LISTENQLEN                  = 0x1012\n\tSO_LISTENQLIMIT                = 0x1011\n\tSO_NOSIGPIPE                   = 0x800\n\tSO_NO_DDP                      = 0x8000\n\tSO_NO_OFFLOAD                  = 0x4000\n\tSO_OOBINLINE                   = 0x100\n\tSO_PEERLABEL                   = 0x1010\n\tSO_PROTOCOL                    = 0x1016\n\tSO_PROTOTYPE                   = 0x1016\n\tSO_RCVBUF                      = 0x1002\n\tSO_RCVLOWAT                    = 0x1004\n\tSO_RCVTIMEO                    = 0x1006\n\tSO_REUSEADDR                   = 0x4\n\tSO_REUSEPORT                   = 0x200\n\tSO_SETFIB                      = 0x1014\n\tSO_SNDBUF                      = 0x1001\n\tSO_SNDLOWAT                    = 0x1003\n\tSO_SNDTIMEO                    = 0x1005\n\tSO_TIMESTAMP                   = 0x400\n\tSO_TYPE                        = 0x1008\n\tSO_USELOOPBACK                 = 0x40\n\tSO_USER_COOKIE                 = 0x1015\n\tSO_VENDOR                      = 0x80000000\n\tS_BLKSIZE                      = 0x200\n\tS_IEXEC                        = 0x40\n\tS_IFBLK                        = 0x6000\n\tS_IFCHR                        = 0x2000\n\tS_IFDIR                        = 0x4000\n\tS_IFIFO                        = 0x1000\n\tS_IFLNK                        = 0xa000\n\tS_IFMT                         = 0xf000\n\tS_IFREG                        = 0x8000\n\tS_IFSOCK                       = 0xc000\n\tS_IFWHT                        = 0xe000\n\tS_IREAD                        = 0x100\n\tS_IRGRP                        = 0x20\n\tS_IROTH                        = 0x4\n\tS_IRUSR                        = 0x100\n\tS_IRWXG                        = 0x38\n\tS_IRWXO                        = 0x7\n\tS_IRWXU                        = 0x1c0\n\tS_ISGID                        = 0x400\n\tS_ISTXT                        = 0x200\n\tS_ISUID                        = 0x800\n\tS_ISVTX                        = 0x200\n\tS_IWGRP                        = 0x10\n\tS_IWOTH                        = 0x2\n\tS_IWRITE                       = 0x80\n\tS_IWUSR                        = 0x80\n\tS_IXGRP                        = 0x8\n\tS_IXOTH                        = 0x1\n\tS_IXUSR                        = 0x40\n\tTAB0                           = 0x0\n\tTAB3                           = 0x4\n\tTABDLY                         = 0x4\n\tTCIFLUSH                       = 0x1\n\tTCIOFF                         = 0x3\n\tTCIOFLUSH                      = 0x3\n\tTCION                          = 0x4\n\tTCOFLUSH                       = 0x2\n\tTCOOFF                         = 0x1\n\tTCOON                          = 0x2\n\tTCP_CA_NAME_MAX                = 0x10\n\tTCP_CCALGOOPT                  = 0x41\n\tTCP_CONGESTION                 = 0x40\n\tTCP_FASTOPEN                   = 0x401\n\tTCP_FUNCTION_BLK               = 0x2000\n\tTCP_FUNCTION_NAME_LEN_MAX      = 0x20\n\tTCP_INFO                       = 0x20\n\tTCP_KEEPCNT                    = 0x400\n\tTCP_KEEPIDLE                   = 0x100\n\tTCP_KEEPINIT                   = 0x80\n\tTCP_KEEPINTVL                  = 0x200\n\tTCP_MAXBURST                   = 0x4\n\tTCP_MAXHLEN                    = 0x3c\n\tTCP_MAXOLEN                    = 0x28\n\tTCP_MAXSEG                     = 0x2\n\tTCP_MAXWIN                     = 0xffff\n\tTCP_MAX_SACK                   = 0x4\n\tTCP_MAX_WINSHIFT               = 0xe\n\tTCP_MD5SIG                     = 0x10\n\tTCP_MINMSS                     = 0xd8\n\tTCP_MSS                        = 0x218\n\tTCP_NODELAY                    = 0x1\n\tTCP_NOOPT                      = 0x8\n\tTCP_NOPUSH                     = 0x4\n\tTCP_PCAP_IN                    = 0x1000\n\tTCP_PCAP_OUT                   = 0x800\n\tTCP_VENDOR                     = 0x80000000\n\tTCSAFLUSH                      = 0x2\n\tTIOCCBRK                       = 0x2000747a\n\tTIOCCDTR                       = 0x20007478\n\tTIOCCONS                       = 0x80047462\n\tTIOCDRAIN                      = 0x2000745e\n\tTIOCEXCL                       = 0x2000740d\n\tTIOCEXT                        = 0x80047460\n\tTIOCFLUSH                      = 0x80047410\n\tTIOCGDRAINWAIT                 = 0x40047456\n\tTIOCGETA                       = 0x402c7413\n\tTIOCGETD                       = 0x4004741a\n\tTIOCGPGRP                      = 0x40047477\n\tTIOCGPTN                       = 0x4004740f\n\tTIOCGSID                       = 0x40047463\n\tTIOCGWINSZ                     = 0x40087468\n\tTIOCMBIC                       = 0x8004746b\n\tTIOCMBIS                       = 0x8004746c\n\tTIOCMGDTRWAIT                  = 0x4004745a\n\tTIOCMGET                       = 0x4004746a\n\tTIOCMSDTRWAIT                  = 0x8004745b\n\tTIOCMSET                       = 0x8004746d\n\tTIOCM_CAR                      = 0x40\n\tTIOCM_CD                       = 0x40\n\tTIOCM_CTS                      = 0x20\n\tTIOCM_DCD                      = 0x40\n\tTIOCM_DSR                      = 0x100\n\tTIOCM_DTR                      = 0x2\n\tTIOCM_LE                       = 0x1\n\tTIOCM_RI                       = 0x80\n\tTIOCM_RNG                      = 0x80\n\tTIOCM_RTS                      = 0x4\n\tTIOCM_SR                       = 0x10\n\tTIOCM_ST                       = 0x8\n\tTIOCNOTTY                      = 0x20007471\n\tTIOCNXCL                       = 0x2000740e\n\tTIOCOUTQ                       = 0x40047473\n\tTIOCPKT                        = 0x80047470\n\tTIOCPKT_DATA                   = 0x0\n\tTIOCPKT_DOSTOP                 = 0x20\n\tTIOCPKT_FLUSHREAD              = 0x1\n\tTIOCPKT_FLUSHWRITE             = 0x2\n\tTIOCPKT_IOCTL                  = 0x40\n\tTIOCPKT_NOSTOP                 = 0x10\n\tTIOCPKT_START                  = 0x8\n\tTIOCPKT_STOP                   = 0x4\n\tTIOCPTMASTER                   = 0x2000741c\n\tTIOCSBRK                       = 0x2000747b\n\tTIOCSCTTY                      = 0x20007461\n\tTIOCSDRAINWAIT                 = 0x80047457\n\tTIOCSDTR                       = 0x20007479\n\tTIOCSETA                       = 0x802c7414\n\tTIOCSETAF                      = 0x802c7416\n\tTIOCSETAW                      = 0x802c7415\n\tTIOCSETD                       = 0x8004741b\n\tTIOCSIG                        = 0x2004745f\n\tTIOCSPGRP                      = 0x80047476\n\tTIOCSTART                      = 0x2000746e\n\tTIOCSTAT                       = 0x20007465\n\tTIOCSTI                        = 0x80017472\n\tTIOCSTOP                       = 0x2000746f\n\tTIOCSWINSZ                     = 0x80087467\n\tTIOCTIMESTAMP                  = 0x40107459\n\tTIOCUCNTL                      = 0x80047466\n\tTOSTOP                         = 0x400000\n\tVDISCARD                       = 0xf\n\tVDSUSP                         = 0xb\n\tVEOF                           = 0x0\n\tVEOL                           = 0x1\n\tVEOL2                          = 0x2\n\tVERASE                         = 0x3\n\tVERASE2                        = 0x7\n\tVINTR                          = 0x8\n\tVKILL                          = 0x5\n\tVLNEXT                         = 0xe\n\tVMIN                           = 0x10\n\tVQUIT                          = 0x9\n\tVREPRINT                       = 0x6\n\tVSTART                         = 0xc\n\tVSTATUS                        = 0x12\n\tVSTOP                          = 0xd\n\tVSUSP                          = 0xa\n\tVTIME                          = 0x11\n\tVWERASE                        = 0x4\n\tWCONTINUED                     = 0x4\n\tWCOREFLAG                      = 0x80\n\tWEXITED                        = 0x10\n\tWLINUXCLONE                    = 0x80000000\n\tWNOHANG                        = 0x1\n\tWNOWAIT                        = 0x8\n\tWSTOPPED                       = 0x2\n\tWTRAPPED                       = 0x20\n\tWUNTRACED                      = 0x2\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x30)\n\tEADDRNOTAVAIL   = syscall.Errno(0x31)\n\tEAFNOSUPPORT    = syscall.Errno(0x2f)\n\tEAGAIN          = syscall.Errno(0x23)\n\tEALREADY        = syscall.Errno(0x25)\n\tEAUTH           = syscall.Errno(0x50)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADMSG         = syscall.Errno(0x59)\n\tEBADRPC         = syscall.Errno(0x48)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x55)\n\tECAPMODE        = syscall.Errno(0x5e)\n\tECHILD          = syscall.Errno(0xa)\n\tECONNABORTED    = syscall.Errno(0x35)\n\tECONNREFUSED    = syscall.Errno(0x3d)\n\tECONNRESET      = syscall.Errno(0x36)\n\tEDEADLK         = syscall.Errno(0xb)\n\tEDESTADDRREQ    = syscall.Errno(0x27)\n\tEDOM            = syscall.Errno(0x21)\n\tEDOOFUS         = syscall.Errno(0x58)\n\tEDQUOT          = syscall.Errno(0x45)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFTYPE          = syscall.Errno(0x4f)\n\tEHOSTDOWN       = syscall.Errno(0x40)\n\tEHOSTUNREACH    = syscall.Errno(0x41)\n\tEIDRM           = syscall.Errno(0x52)\n\tEILSEQ          = syscall.Errno(0x56)\n\tEINPROGRESS     = syscall.Errno(0x24)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEISCONN         = syscall.Errno(0x38)\n\tEISDIR          = syscall.Errno(0x15)\n\tELAST           = syscall.Errno(0x60)\n\tELOOP           = syscall.Errno(0x3e)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x28)\n\tEMULTIHOP       = syscall.Errno(0x5a)\n\tENAMETOOLONG    = syscall.Errno(0x3f)\n\tENEEDAUTH       = syscall.Errno(0x51)\n\tENETDOWN        = syscall.Errno(0x32)\n\tENETRESET       = syscall.Errno(0x34)\n\tENETUNREACH     = syscall.Errno(0x33)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x57)\n\tENOBUFS         = syscall.Errno(0x37)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x4d)\n\tENOLINK         = syscall.Errno(0x5b)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x53)\n\tENOPROTOOPT     = syscall.Errno(0x2a)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSYS          = syscall.Errno(0x4e)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCAPABLE     = syscall.Errno(0x5d)\n\tENOTCONN        = syscall.Errno(0x39)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x42)\n\tENOTRECOVERABLE = syscall.Errno(0x5f)\n\tENOTSOCK        = syscall.Errno(0x26)\n\tENOTSUP         = syscall.Errno(0x2d)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x2d)\n\tEOVERFLOW       = syscall.Errno(0x54)\n\tEOWNERDEAD      = syscall.Errno(0x60)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x2e)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x43)\n\tEPROCUNAVAIL    = syscall.Errno(0x4c)\n\tEPROGMISMATCH   = syscall.Errno(0x4b)\n\tEPROGUNAVAIL    = syscall.Errno(0x4a)\n\tEPROTO          = syscall.Errno(0x5c)\n\tEPROTONOSUPPORT = syscall.Errno(0x2b)\n\tEPROTOTYPE      = syscall.Errno(0x29)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x47)\n\tEROFS           = syscall.Errno(0x1e)\n\tERPCMISMATCH    = syscall.Errno(0x49)\n\tESHUTDOWN       = syscall.Errno(0x3a)\n\tESOCKTNOSUPPORT = syscall.Errno(0x2c)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x46)\n\tETIMEDOUT       = syscall.Errno(0x3c)\n\tETOOMANYREFS    = syscall.Errno(0x3b)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUSERS          = syscall.Errno(0x44)\n\tEWOULDBLOCK     = syscall.Errno(0x23)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x14)\n\tSIGCONT   = syscall.Signal(0x13)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINFO   = syscall.Signal(0x1d)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x17)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGLIBRT  = syscall.Signal(0x21)\n\tSIGLWP    = syscall.Signal(0x20)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTOP   = syscall.Signal(0x11)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTHR    = syscall.Signal(0x20)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x12)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x10)\n\tSIGUSR1   = syscall.Signal(0x1e)\n\tSIGUSR2   = syscall.Signal(0x1f)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"device not configured\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"operation not supported by device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large\"},\n\t{35, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{36, \"EINPROGRESS\", \"operation now in progress\"},\n\t{37, \"EALREADY\", \"operation already in progress\"},\n\t{38, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{39, \"EDESTADDRREQ\", \"destination address required\"},\n\t{40, \"EMSGSIZE\", \"message too long\"},\n\t{41, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{42, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{43, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{44, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{45, \"EOPNOTSUPP\", \"operation not supported\"},\n\t{46, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{47, \"EAFNOSUPPORT\", \"address family not supported by protocol family\"},\n\t{48, \"EADDRINUSE\", \"address already in use\"},\n\t{49, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{50, \"ENETDOWN\", \"network is down\"},\n\t{51, \"ENETUNREACH\", \"network is unreachable\"},\n\t{52, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{53, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{54, \"ECONNRESET\", \"connection reset by peer\"},\n\t{55, \"ENOBUFS\", \"no buffer space available\"},\n\t{56, \"EISCONN\", \"socket is already connected\"},\n\t{57, \"ENOTCONN\", \"socket is not connected\"},\n\t{58, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{59, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{60, \"ETIMEDOUT\", \"operation timed out\"},\n\t{61, \"ECONNREFUSED\", \"connection refused\"},\n\t{62, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{63, \"ENAMETOOLONG\", \"file name too long\"},\n\t{64, \"EHOSTDOWN\", \"host is down\"},\n\t{65, \"EHOSTUNREACH\", \"no route to host\"},\n\t{66, \"ENOTEMPTY\", \"directory not empty\"},\n\t{67, \"EPROCLIM\", \"too many processes\"},\n\t{68, \"EUSERS\", \"too many users\"},\n\t{69, \"EDQUOT\", \"disc quota exceeded\"},\n\t{70, \"ESTALE\", \"stale NFS file handle\"},\n\t{71, \"EREMOTE\", \"too many levels of remote in path\"},\n\t{72, \"EBADRPC\", \"RPC struct is bad\"},\n\t{73, \"ERPCMISMATCH\", \"RPC version wrong\"},\n\t{74, \"EPROGUNAVAIL\", \"RPC prog. not avail\"},\n\t{75, \"EPROGMISMATCH\", \"program version wrong\"},\n\t{76, \"EPROCUNAVAIL\", \"bad procedure for program\"},\n\t{77, \"ENOLCK\", \"no locks available\"},\n\t{78, \"ENOSYS\", \"function not implemented\"},\n\t{79, \"EFTYPE\", \"inappropriate file type or format\"},\n\t{80, \"EAUTH\", \"authentication error\"},\n\t{81, \"ENEEDAUTH\", \"need authenticator\"},\n\t{82, \"EIDRM\", \"identifier removed\"},\n\t{83, \"ENOMSG\", \"no message of desired type\"},\n\t{84, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n\t{85, \"ECANCELED\", \"operation canceled\"},\n\t{86, \"EILSEQ\", \"illegal byte sequence\"},\n\t{87, \"ENOATTR\", \"attribute not found\"},\n\t{88, \"EDOOFUS\", \"programming error\"},\n\t{89, \"EBADMSG\", \"bad message\"},\n\t{90, \"EMULTIHOP\", \"multihop attempted\"},\n\t{91, \"ENOLINK\", \"link has been severed\"},\n\t{92, \"EPROTO\", \"protocol error\"},\n\t{93, \"ENOTCAPABLE\", \"capabilities insufficient\"},\n\t{94, \"ECAPMODE\", \"not permitted in capability mode\"},\n\t{95, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{96, \"EOWNERDEAD\", \"previous owner died\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGIOT\", \"abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"suspended (signal)\"},\n\t{18, \"SIGTSTP\", \"suspended\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGINFO\", \"information request\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n\t{32, \"SIGTHR\", \"unknown signal\"},\n\t{33, \"SIGLIBRT\", \"unknown signal\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go",
    "content": "// mkerrors.sh\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build arm,freebsd\n\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs -- _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                   = 0x10\n\tAF_ARP                         = 0x23\n\tAF_ATM                         = 0x1e\n\tAF_BLUETOOTH                   = 0x24\n\tAF_CCITT                       = 0xa\n\tAF_CHAOS                       = 0x5\n\tAF_CNT                         = 0x15\n\tAF_COIP                        = 0x14\n\tAF_DATAKIT                     = 0x9\n\tAF_DECnet                      = 0xc\n\tAF_DLI                         = 0xd\n\tAF_E164                        = 0x1a\n\tAF_ECMA                        = 0x8\n\tAF_HYLINK                      = 0xf\n\tAF_IEEE80211                   = 0x25\n\tAF_IMPLINK                     = 0x3\n\tAF_INET                        = 0x2\n\tAF_INET6                       = 0x1c\n\tAF_INET6_SDP                   = 0x2a\n\tAF_INET_SDP                    = 0x28\n\tAF_IPX                         = 0x17\n\tAF_ISDN                        = 0x1a\n\tAF_ISO                         = 0x7\n\tAF_LAT                         = 0xe\n\tAF_LINK                        = 0x12\n\tAF_LOCAL                       = 0x1\n\tAF_MAX                         = 0x2a\n\tAF_NATM                        = 0x1d\n\tAF_NETBIOS                     = 0x6\n\tAF_NETGRAPH                    = 0x20\n\tAF_OSI                         = 0x7\n\tAF_PUP                         = 0x4\n\tAF_ROUTE                       = 0x11\n\tAF_SCLUSTER                    = 0x22\n\tAF_SIP                         = 0x18\n\tAF_SLOW                        = 0x21\n\tAF_SNA                         = 0xb\n\tAF_UNIX                        = 0x1\n\tAF_UNSPEC                      = 0x0\n\tAF_VENDOR00                    = 0x27\n\tAF_VENDOR01                    = 0x29\n\tAF_VENDOR02                    = 0x2b\n\tAF_VENDOR03                    = 0x2d\n\tAF_VENDOR04                    = 0x2f\n\tAF_VENDOR05                    = 0x31\n\tAF_VENDOR06                    = 0x33\n\tAF_VENDOR07                    = 0x35\n\tAF_VENDOR08                    = 0x37\n\tAF_VENDOR09                    = 0x39\n\tAF_VENDOR10                    = 0x3b\n\tAF_VENDOR11                    = 0x3d\n\tAF_VENDOR12                    = 0x3f\n\tAF_VENDOR13                    = 0x41\n\tAF_VENDOR14                    = 0x43\n\tAF_VENDOR15                    = 0x45\n\tAF_VENDOR16                    = 0x47\n\tAF_VENDOR17                    = 0x49\n\tAF_VENDOR18                    = 0x4b\n\tAF_VENDOR19                    = 0x4d\n\tAF_VENDOR20                    = 0x4f\n\tAF_VENDOR21                    = 0x51\n\tAF_VENDOR22                    = 0x53\n\tAF_VENDOR23                    = 0x55\n\tAF_VENDOR24                    = 0x57\n\tAF_VENDOR25                    = 0x59\n\tAF_VENDOR26                    = 0x5b\n\tAF_VENDOR27                    = 0x5d\n\tAF_VENDOR28                    = 0x5f\n\tAF_VENDOR29                    = 0x61\n\tAF_VENDOR30                    = 0x63\n\tAF_VENDOR31                    = 0x65\n\tAF_VENDOR32                    = 0x67\n\tAF_VENDOR33                    = 0x69\n\tAF_VENDOR34                    = 0x6b\n\tAF_VENDOR35                    = 0x6d\n\tAF_VENDOR36                    = 0x6f\n\tAF_VENDOR37                    = 0x71\n\tAF_VENDOR38                    = 0x73\n\tAF_VENDOR39                    = 0x75\n\tAF_VENDOR40                    = 0x77\n\tAF_VENDOR41                    = 0x79\n\tAF_VENDOR42                    = 0x7b\n\tAF_VENDOR43                    = 0x7d\n\tAF_VENDOR44                    = 0x7f\n\tAF_VENDOR45                    = 0x81\n\tAF_VENDOR46                    = 0x83\n\tAF_VENDOR47                    = 0x85\n\tALTWERASE                      = 0x200\n\tB0                             = 0x0\n\tB110                           = 0x6e\n\tB115200                        = 0x1c200\n\tB1200                          = 0x4b0\n\tB134                           = 0x86\n\tB14400                         = 0x3840\n\tB150                           = 0x96\n\tB1800                          = 0x708\n\tB19200                         = 0x4b00\n\tB200                           = 0xc8\n\tB230400                        = 0x38400\n\tB2400                          = 0x960\n\tB28800                         = 0x7080\n\tB300                           = 0x12c\n\tB38400                         = 0x9600\n\tB460800                        = 0x70800\n\tB4800                          = 0x12c0\n\tB50                            = 0x32\n\tB57600                         = 0xe100\n\tB600                           = 0x258\n\tB7200                          = 0x1c20\n\tB75                            = 0x4b\n\tB76800                         = 0x12c00\n\tB921600                        = 0xe1000\n\tB9600                          = 0x2580\n\tBIOCFEEDBACK                   = 0x8004427c\n\tBIOCFLUSH                      = 0x20004268\n\tBIOCGBLEN                      = 0x40044266\n\tBIOCGDIRECTION                 = 0x40044276\n\tBIOCGDLT                       = 0x4004426a\n\tBIOCGDLTLIST                   = 0xc0084279\n\tBIOCGETBUFMODE                 = 0x4004427d\n\tBIOCGETIF                      = 0x4020426b\n\tBIOCGETZMAX                    = 0x4004427f\n\tBIOCGHDRCMPLT                  = 0x40044274\n\tBIOCGRSIG                      = 0x40044272\n\tBIOCGRTIMEOUT                  = 0x4010426e\n\tBIOCGSEESENT                   = 0x40044276\n\tBIOCGSTATS                     = 0x4008426f\n\tBIOCGTSTAMP                    = 0x40044283\n\tBIOCIMMEDIATE                  = 0x80044270\n\tBIOCLOCK                       = 0x2000427a\n\tBIOCPROMISC                    = 0x20004269\n\tBIOCROTZBUF                    = 0x400c4280\n\tBIOCSBLEN                      = 0xc0044266\n\tBIOCSDIRECTION                 = 0x80044277\n\tBIOCSDLT                       = 0x80044278\n\tBIOCSETBUFMODE                 = 0x8004427e\n\tBIOCSETF                       = 0x80084267\n\tBIOCSETFNR                     = 0x80084282\n\tBIOCSETIF                      = 0x8020426c\n\tBIOCSETWF                      = 0x8008427b\n\tBIOCSETZBUF                    = 0x800c4281\n\tBIOCSHDRCMPLT                  = 0x80044275\n\tBIOCSRSIG                      = 0x80044273\n\tBIOCSRTIMEOUT                  = 0x8010426d\n\tBIOCSSEESENT                   = 0x80044277\n\tBIOCSTSTAMP                    = 0x80044284\n\tBIOCVERSION                    = 0x40044271\n\tBPF_A                          = 0x10\n\tBPF_ABS                        = 0x20\n\tBPF_ADD                        = 0x0\n\tBPF_ALIGNMENT                  = 0x4\n\tBPF_ALU                        = 0x4\n\tBPF_AND                        = 0x50\n\tBPF_B                          = 0x10\n\tBPF_BUFMODE_BUFFER             = 0x1\n\tBPF_BUFMODE_ZBUF               = 0x2\n\tBPF_DIV                        = 0x30\n\tBPF_H                          = 0x8\n\tBPF_IMM                        = 0x0\n\tBPF_IND                        = 0x40\n\tBPF_JA                         = 0x0\n\tBPF_JEQ                        = 0x10\n\tBPF_JGE                        = 0x30\n\tBPF_JGT                        = 0x20\n\tBPF_JMP                        = 0x5\n\tBPF_JSET                       = 0x40\n\tBPF_K                          = 0x0\n\tBPF_LD                         = 0x0\n\tBPF_LDX                        = 0x1\n\tBPF_LEN                        = 0x80\n\tBPF_LSH                        = 0x60\n\tBPF_MAJOR_VERSION              = 0x1\n\tBPF_MAXBUFSIZE                 = 0x80000\n\tBPF_MAXINSNS                   = 0x200\n\tBPF_MEM                        = 0x60\n\tBPF_MEMWORDS                   = 0x10\n\tBPF_MINBUFSIZE                 = 0x20\n\tBPF_MINOR_VERSION              = 0x1\n\tBPF_MISC                       = 0x7\n\tBPF_MOD                        = 0x90\n\tBPF_MSH                        = 0xa0\n\tBPF_MUL                        = 0x20\n\tBPF_NEG                        = 0x80\n\tBPF_OR                         = 0x40\n\tBPF_RELEASE                    = 0x30bb6\n\tBPF_RET                        = 0x6\n\tBPF_RSH                        = 0x70\n\tBPF_ST                         = 0x2\n\tBPF_STX                        = 0x3\n\tBPF_SUB                        = 0x10\n\tBPF_TAX                        = 0x0\n\tBPF_TXA                        = 0x80\n\tBPF_T_BINTIME                  = 0x2\n\tBPF_T_BINTIME_FAST             = 0x102\n\tBPF_T_BINTIME_MONOTONIC        = 0x202\n\tBPF_T_BINTIME_MONOTONIC_FAST   = 0x302\n\tBPF_T_FAST                     = 0x100\n\tBPF_T_FLAG_MASK                = 0x300\n\tBPF_T_FORMAT_MASK              = 0x3\n\tBPF_T_MICROTIME                = 0x0\n\tBPF_T_MICROTIME_FAST           = 0x100\n\tBPF_T_MICROTIME_MONOTONIC      = 0x200\n\tBPF_T_MICROTIME_MONOTONIC_FAST = 0x300\n\tBPF_T_MONOTONIC                = 0x200\n\tBPF_T_MONOTONIC_FAST           = 0x300\n\tBPF_T_NANOTIME                 = 0x1\n\tBPF_T_NANOTIME_FAST            = 0x101\n\tBPF_T_NANOTIME_MONOTONIC       = 0x201\n\tBPF_T_NANOTIME_MONOTONIC_FAST  = 0x301\n\tBPF_T_NONE                     = 0x3\n\tBPF_T_NORMAL                   = 0x0\n\tBPF_W                          = 0x0\n\tBPF_X                          = 0x8\n\tBPF_XOR                        = 0xa0\n\tBRKINT                         = 0x2\n\tCAP_ACCEPT                     = 0x200000020000000\n\tCAP_ACL_CHECK                  = 0x400000000010000\n\tCAP_ACL_DELETE                 = 0x400000000020000\n\tCAP_ACL_GET                    = 0x400000000040000\n\tCAP_ACL_SET                    = 0x400000000080000\n\tCAP_ALL0                       = 0x20007ffffffffff\n\tCAP_ALL1                       = 0x4000000001fffff\n\tCAP_BIND                       = 0x200000040000000\n\tCAP_BINDAT                     = 0x200008000000400\n\tCAP_CHFLAGSAT                  = 0x200000000001400\n\tCAP_CONNECT                    = 0x200000080000000\n\tCAP_CONNECTAT                  = 0x200010000000400\n\tCAP_CREATE                     = 0x200000000000040\n\tCAP_EVENT                      = 0x400000000000020\n\tCAP_EXTATTR_DELETE             = 0x400000000001000\n\tCAP_EXTATTR_GET                = 0x400000000002000\n\tCAP_EXTATTR_LIST               = 0x400000000004000\n\tCAP_EXTATTR_SET                = 0x400000000008000\n\tCAP_FCHDIR                     = 0x200000000000800\n\tCAP_FCHFLAGS                   = 0x200000000001000\n\tCAP_FCHMOD                     = 0x200000000002000\n\tCAP_FCHMODAT                   = 0x200000000002400\n\tCAP_FCHOWN                     = 0x200000000004000\n\tCAP_FCHOWNAT                   = 0x200000000004400\n\tCAP_FCNTL                      = 0x200000000008000\n\tCAP_FCNTL_ALL                  = 0x78\n\tCAP_FCNTL_GETFL                = 0x8\n\tCAP_FCNTL_GETOWN               = 0x20\n\tCAP_FCNTL_SETFL                = 0x10\n\tCAP_FCNTL_SETOWN               = 0x40\n\tCAP_FEXECVE                    = 0x200000000000080\n\tCAP_FLOCK                      = 0x200000000010000\n\tCAP_FPATHCONF                  = 0x200000000020000\n\tCAP_FSCK                       = 0x200000000040000\n\tCAP_FSTAT                      = 0x200000000080000\n\tCAP_FSTATAT                    = 0x200000000080400\n\tCAP_FSTATFS                    = 0x200000000100000\n\tCAP_FSYNC                      = 0x200000000000100\n\tCAP_FTRUNCATE                  = 0x200000000000200\n\tCAP_FUTIMES                    = 0x200000000200000\n\tCAP_FUTIMESAT                  = 0x200000000200400\n\tCAP_GETPEERNAME                = 0x200000100000000\n\tCAP_GETSOCKNAME                = 0x200000200000000\n\tCAP_GETSOCKOPT                 = 0x200000400000000\n\tCAP_IOCTL                      = 0x400000000000080\n\tCAP_IOCTLS_ALL                 = 0x7fffffff\n\tCAP_KQUEUE                     = 0x400000000100040\n\tCAP_KQUEUE_CHANGE              = 0x400000000100000\n\tCAP_KQUEUE_EVENT               = 0x400000000000040\n\tCAP_LINKAT_SOURCE              = 0x200020000000400\n\tCAP_LINKAT_TARGET              = 0x200000000400400\n\tCAP_LISTEN                     = 0x200000800000000\n\tCAP_LOOKUP                     = 0x200000000000400\n\tCAP_MAC_GET                    = 0x400000000000001\n\tCAP_MAC_SET                    = 0x400000000000002\n\tCAP_MKDIRAT                    = 0x200000000800400\n\tCAP_MKFIFOAT                   = 0x200000001000400\n\tCAP_MKNODAT                    = 0x200000002000400\n\tCAP_MMAP                       = 0x200000000000010\n\tCAP_MMAP_R                     = 0x20000000000001d\n\tCAP_MMAP_RW                    = 0x20000000000001f\n\tCAP_MMAP_RWX                   = 0x20000000000003f\n\tCAP_MMAP_RX                    = 0x20000000000003d\n\tCAP_MMAP_W                     = 0x20000000000001e\n\tCAP_MMAP_WX                    = 0x20000000000003e\n\tCAP_MMAP_X                     = 0x20000000000003c\n\tCAP_PDGETPID                   = 0x400000000000200\n\tCAP_PDKILL                     = 0x400000000000800\n\tCAP_PDWAIT                     = 0x400000000000400\n\tCAP_PEELOFF                    = 0x200001000000000\n\tCAP_POLL_EVENT                 = 0x400000000000020\n\tCAP_PREAD                      = 0x20000000000000d\n\tCAP_PWRITE                     = 0x20000000000000e\n\tCAP_READ                       = 0x200000000000001\n\tCAP_RECV                       = 0x200000000000001\n\tCAP_RENAMEAT_SOURCE            = 0x200000004000400\n\tCAP_RENAMEAT_TARGET            = 0x200040000000400\n\tCAP_RIGHTS_VERSION             = 0x0\n\tCAP_RIGHTS_VERSION_00          = 0x0\n\tCAP_SEEK                       = 0x20000000000000c\n\tCAP_SEEK_TELL                  = 0x200000000000004\n\tCAP_SEM_GETVALUE               = 0x400000000000004\n\tCAP_SEM_POST                   = 0x400000000000008\n\tCAP_SEM_WAIT                   = 0x400000000000010\n\tCAP_SEND                       = 0x200000000000002\n\tCAP_SETSOCKOPT                 = 0x200002000000000\n\tCAP_SHUTDOWN                   = 0x200004000000000\n\tCAP_SOCK_CLIENT                = 0x200007780000003\n\tCAP_SOCK_SERVER                = 0x200007f60000003\n\tCAP_SYMLINKAT                  = 0x200000008000400\n\tCAP_TTYHOOK                    = 0x400000000000100\n\tCAP_UNLINKAT                   = 0x200000010000400\n\tCAP_UNUSED0_44                 = 0x200080000000000\n\tCAP_UNUSED0_57                 = 0x300000000000000\n\tCAP_UNUSED1_22                 = 0x400000000200000\n\tCAP_UNUSED1_57                 = 0x500000000000000\n\tCAP_WRITE                      = 0x200000000000002\n\tCFLUSH                         = 0xf\n\tCLOCAL                         = 0x8000\n\tCLOCK_MONOTONIC                = 0x4\n\tCLOCK_MONOTONIC_FAST           = 0xc\n\tCLOCK_MONOTONIC_PRECISE        = 0xb\n\tCLOCK_PROCESS_CPUTIME_ID       = 0xf\n\tCLOCK_PROF                     = 0x2\n\tCLOCK_REALTIME                 = 0x0\n\tCLOCK_REALTIME_FAST            = 0xa\n\tCLOCK_REALTIME_PRECISE         = 0x9\n\tCLOCK_SECOND                   = 0xd\n\tCLOCK_THREAD_CPUTIME_ID        = 0xe\n\tCLOCK_UPTIME                   = 0x5\n\tCLOCK_UPTIME_FAST              = 0x8\n\tCLOCK_UPTIME_PRECISE           = 0x7\n\tCLOCK_VIRTUAL                  = 0x1\n\tCREAD                          = 0x800\n\tCRTSCTS                        = 0x30000\n\tCS5                            = 0x0\n\tCS6                            = 0x100\n\tCS7                            = 0x200\n\tCS8                            = 0x300\n\tCSIZE                          = 0x300\n\tCSTART                         = 0x11\n\tCSTATUS                        = 0x14\n\tCSTOP                          = 0x13\n\tCSTOPB                         = 0x400\n\tCSUSP                          = 0x1a\n\tCTL_HW                         = 0x6\n\tCTL_KERN                       = 0x1\n\tCTL_MAXNAME                    = 0x18\n\tCTL_NET                        = 0x4\n\tDLT_A429                       = 0xb8\n\tDLT_A653_ICM                   = 0xb9\n\tDLT_AIRONET_HEADER             = 0x78\n\tDLT_AOS                        = 0xde\n\tDLT_APPLE_IP_OVER_IEEE1394     = 0x8a\n\tDLT_ARCNET                     = 0x7\n\tDLT_ARCNET_LINUX               = 0x81\n\tDLT_ATM_CLIP                   = 0x13\n\tDLT_ATM_RFC1483                = 0xb\n\tDLT_AURORA                     = 0x7e\n\tDLT_AX25                       = 0x3\n\tDLT_AX25_KISS                  = 0xca\n\tDLT_BACNET_MS_TP               = 0xa5\n\tDLT_BLUETOOTH_BREDR_BB         = 0xff\n\tDLT_BLUETOOTH_HCI_H4           = 0xbb\n\tDLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9\n\tDLT_BLUETOOTH_LE_LL            = 0xfb\n\tDLT_BLUETOOTH_LE_LL_WITH_PHDR  = 0x100\n\tDLT_BLUETOOTH_LINUX_MONITOR    = 0xfe\n\tDLT_CAN20B                     = 0xbe\n\tDLT_CAN_SOCKETCAN              = 0xe3\n\tDLT_CHAOS                      = 0x5\n\tDLT_CHDLC                      = 0x68\n\tDLT_CISCO_IOS                  = 0x76\n\tDLT_CLASS_NETBSD_RAWAF         = 0x2240000\n\tDLT_C_HDLC                     = 0x68\n\tDLT_C_HDLC_WITH_DIR            = 0xcd\n\tDLT_DBUS                       = 0xe7\n\tDLT_DECT                       = 0xdd\n\tDLT_DOCSIS                     = 0x8f\n\tDLT_DVB_CI                     = 0xeb\n\tDLT_ECONET                     = 0x73\n\tDLT_EN10MB                     = 0x1\n\tDLT_EN3MB                      = 0x2\n\tDLT_ENC                        = 0x6d\n\tDLT_EPON                       = 0x103\n\tDLT_ERF                        = 0xc5\n\tDLT_ERF_ETH                    = 0xaf\n\tDLT_ERF_POS                    = 0xb0\n\tDLT_FC_2                       = 0xe0\n\tDLT_FC_2_WITH_FRAME_DELIMS     = 0xe1\n\tDLT_FDDI                       = 0xa\n\tDLT_FLEXRAY                    = 0xd2\n\tDLT_FRELAY                     = 0x6b\n\tDLT_FRELAY_WITH_DIR            = 0xce\n\tDLT_GCOM_SERIAL                = 0xad\n\tDLT_GCOM_T1E1                  = 0xac\n\tDLT_GPF_F                      = 0xab\n\tDLT_GPF_T                      = 0xaa\n\tDLT_GPRS_LLC                   = 0xa9\n\tDLT_GSMTAP_ABIS                = 0xda\n\tDLT_GSMTAP_UM                  = 0xd9\n\tDLT_IBM_SN                     = 0x92\n\tDLT_IBM_SP                     = 0x91\n\tDLT_IEEE802                    = 0x6\n\tDLT_IEEE802_11                 = 0x69\n\tDLT_IEEE802_11_RADIO           = 0x7f\n\tDLT_IEEE802_11_RADIO_AVS       = 0xa3\n\tDLT_IEEE802_15_4               = 0xc3\n\tDLT_IEEE802_15_4_LINUX         = 0xbf\n\tDLT_IEEE802_15_4_NOFCS         = 0xe6\n\tDLT_IEEE802_15_4_NONASK_PHY    = 0xd7\n\tDLT_IEEE802_16_MAC_CPS         = 0xbc\n\tDLT_IEEE802_16_MAC_CPS_RADIO   = 0xc1\n\tDLT_INFINIBAND                 = 0xf7\n\tDLT_IPFILTER                   = 0x74\n\tDLT_IPMB                       = 0xc7\n\tDLT_IPMB_LINUX                 = 0xd1\n\tDLT_IPMI_HPM_2                 = 0x104\n\tDLT_IPNET                      = 0xe2\n\tDLT_IPOIB                      = 0xf2\n\tDLT_IPV4                       = 0xe4\n\tDLT_IPV6                       = 0xe5\n\tDLT_IP_OVER_FC                 = 0x7a\n\tDLT_ISO_14443                  = 0x108\n\tDLT_JUNIPER_ATM1               = 0x89\n\tDLT_JUNIPER_ATM2               = 0x87\n\tDLT_JUNIPER_ATM_CEMIC          = 0xee\n\tDLT_JUNIPER_CHDLC              = 0xb5\n\tDLT_JUNIPER_ES                 = 0x84\n\tDLT_JUNIPER_ETHER              = 0xb2\n\tDLT_JUNIPER_FIBRECHANNEL       = 0xea\n\tDLT_JUNIPER_FRELAY             = 0xb4\n\tDLT_JUNIPER_GGSN               = 0x85\n\tDLT_JUNIPER_ISM                = 0xc2\n\tDLT_JUNIPER_MFR                = 0x86\n\tDLT_JUNIPER_MLFR               = 0x83\n\tDLT_JUNIPER_MLPPP              = 0x82\n\tDLT_JUNIPER_MONITOR            = 0xa4\n\tDLT_JUNIPER_PIC_PEER           = 0xae\n\tDLT_JUNIPER_PPP                = 0xb3\n\tDLT_JUNIPER_PPPOE              = 0xa7\n\tDLT_JUNIPER_PPPOE_ATM          = 0xa8\n\tDLT_JUNIPER_SERVICES           = 0x88\n\tDLT_JUNIPER_SRX_E2E            = 0xe9\n\tDLT_JUNIPER_ST                 = 0xc8\n\tDLT_JUNIPER_VP                 = 0xb7\n\tDLT_JUNIPER_VS                 = 0xe8\n\tDLT_LAPB_WITH_DIR              = 0xcf\n\tDLT_LAPD                       = 0xcb\n\tDLT_LIN                        = 0xd4\n\tDLT_LINUX_EVDEV                = 0xd8\n\tDLT_LINUX_IRDA                 = 0x90\n\tDLT_LINUX_LAPD                 = 0xb1\n\tDLT_LINUX_PPP_WITHDIRECTION    = 0xa6\n\tDLT_LINUX_SLL                  = 0x71\n\tDLT_LOOP                       = 0x6c\n\tDLT_LTALK                      = 0x72\n\tDLT_MATCHING_MAX               = 0x109\n\tDLT_MATCHING_MIN               = 0x68\n\tDLT_MFR                        = 0xb6\n\tDLT_MOST                       = 0xd3\n\tDLT_MPEG_2_TS                  = 0xf3\n\tDLT_MPLS                       = 0xdb\n\tDLT_MTP2                       = 0x8c\n\tDLT_MTP2_WITH_PHDR             = 0x8b\n\tDLT_MTP3                       = 0x8d\n\tDLT_MUX27010                   = 0xec\n\tDLT_NETANALYZER                = 0xf0\n\tDLT_NETANALYZER_TRANSPARENT    = 0xf1\n\tDLT_NETLINK                    = 0xfd\n\tDLT_NFC_LLCP                   = 0xf5\n\tDLT_NFLOG                      = 0xef\n\tDLT_NG40                       = 0xf4\n\tDLT_NULL                       = 0x0\n\tDLT_PCI_EXP                    = 0x7d\n\tDLT_PFLOG                      = 0x75\n\tDLT_PFSYNC                     = 0x79\n\tDLT_PKTAP                      = 0x102\n\tDLT_PPI                        = 0xc0\n\tDLT_PPP                        = 0x9\n\tDLT_PPP_BSDOS                  = 0xe\n\tDLT_PPP_ETHER                  = 0x33\n\tDLT_PPP_PPPD                   = 0xa6\n\tDLT_PPP_SERIAL                 = 0x32\n\tDLT_PPP_WITH_DIR               = 0xcc\n\tDLT_PPP_WITH_DIRECTION         = 0xa6\n\tDLT_PRISM_HEADER               = 0x77\n\tDLT_PROFIBUS_DL                = 0x101\n\tDLT_PRONET                     = 0x4\n\tDLT_RAIF1                      = 0xc6\n\tDLT_RAW                        = 0xc\n\tDLT_RDS                        = 0x109\n\tDLT_REDBACK_SMARTEDGE          = 0x20\n\tDLT_RIO                        = 0x7c\n\tDLT_RTAC_SERIAL                = 0xfa\n\tDLT_SCCP                       = 0x8e\n\tDLT_SCTP                       = 0xf8\n\tDLT_SITA                       = 0xc4\n\tDLT_SLIP                       = 0x8\n\tDLT_SLIP_BSDOS                 = 0xd\n\tDLT_STANAG_5066_D_PDU          = 0xed\n\tDLT_SUNATM                     = 0x7b\n\tDLT_SYMANTEC_FIREWALL          = 0x63\n\tDLT_TZSP                       = 0x80\n\tDLT_USB                        = 0xba\n\tDLT_USBPCAP                    = 0xf9\n\tDLT_USB_FREEBSD                = 0xba\n\tDLT_USB_LINUX                  = 0xbd\n\tDLT_USB_LINUX_MMAPPED          = 0xdc\n\tDLT_USER0                      = 0x93\n\tDLT_USER1                      = 0x94\n\tDLT_USER10                     = 0x9d\n\tDLT_USER11                     = 0x9e\n\tDLT_USER12                     = 0x9f\n\tDLT_USER13                     = 0xa0\n\tDLT_USER14                     = 0xa1\n\tDLT_USER15                     = 0xa2\n\tDLT_USER2                      = 0x95\n\tDLT_USER3                      = 0x96\n\tDLT_USER4                      = 0x97\n\tDLT_USER5                      = 0x98\n\tDLT_USER6                      = 0x99\n\tDLT_USER7                      = 0x9a\n\tDLT_USER8                      = 0x9b\n\tDLT_USER9                      = 0x9c\n\tDLT_WATTSTOPPER_DLM            = 0x107\n\tDLT_WIHART                     = 0xdf\n\tDLT_WIRESHARK_UPPER_PDU        = 0xfc\n\tDLT_X2E_SERIAL                 = 0xd5\n\tDLT_X2E_XORAYA                 = 0xd6\n\tDLT_ZWAVE_R1_R2                = 0x105\n\tDLT_ZWAVE_R3                   = 0x106\n\tDT_BLK                         = 0x6\n\tDT_CHR                         = 0x2\n\tDT_DIR                         = 0x4\n\tDT_FIFO                        = 0x1\n\tDT_LNK                         = 0xa\n\tDT_REG                         = 0x8\n\tDT_SOCK                        = 0xc\n\tDT_UNKNOWN                     = 0x0\n\tDT_WHT                         = 0xe\n\tECHO                           = 0x8\n\tECHOCTL                        = 0x40\n\tECHOE                          = 0x2\n\tECHOK                          = 0x4\n\tECHOKE                         = 0x1\n\tECHONL                         = 0x10\n\tECHOPRT                        = 0x20\n\tEVFILT_AIO                     = -0x3\n\tEVFILT_FS                      = -0x9\n\tEVFILT_LIO                     = -0xa\n\tEVFILT_PROC                    = -0x5\n\tEVFILT_PROCDESC                = -0x8\n\tEVFILT_READ                    = -0x1\n\tEVFILT_SENDFILE                = -0xc\n\tEVFILT_SIGNAL                  = -0x6\n\tEVFILT_SYSCOUNT                = 0xc\n\tEVFILT_TIMER                   = -0x7\n\tEVFILT_USER                    = -0xb\n\tEVFILT_VNODE                   = -0x4\n\tEVFILT_WRITE                   = -0x2\n\tEV_ADD                         = 0x1\n\tEV_CLEAR                       = 0x20\n\tEV_DELETE                      = 0x2\n\tEV_DISABLE                     = 0x8\n\tEV_DISPATCH                    = 0x80\n\tEV_DROP                        = 0x1000\n\tEV_ENABLE                      = 0x4\n\tEV_EOF                         = 0x8000\n\tEV_ERROR                       = 0x4000\n\tEV_FLAG1                       = 0x2000\n\tEV_FLAG2                       = 0x4000\n\tEV_FORCEONESHOT                = 0x100\n\tEV_ONESHOT                     = 0x10\n\tEV_RECEIPT                     = 0x40\n\tEV_SYSFLAGS                    = 0xf000\n\tEXTA                           = 0x4b00\n\tEXTATTR_NAMESPACE_EMPTY        = 0x0\n\tEXTATTR_NAMESPACE_SYSTEM       = 0x2\n\tEXTATTR_NAMESPACE_USER         = 0x1\n\tEXTB                           = 0x9600\n\tEXTPROC                        = 0x800\n\tFD_CLOEXEC                     = 0x1\n\tFD_SETSIZE                     = 0x400\n\tFLUSHO                         = 0x800000\n\tF_CANCEL                       = 0x5\n\tF_DUP2FD                       = 0xa\n\tF_DUP2FD_CLOEXEC               = 0x12\n\tF_DUPFD                        = 0x0\n\tF_DUPFD_CLOEXEC                = 0x11\n\tF_GETFD                        = 0x1\n\tF_GETFL                        = 0x3\n\tF_GETLK                        = 0xb\n\tF_GETOWN                       = 0x5\n\tF_OGETLK                       = 0x7\n\tF_OK                           = 0x0\n\tF_OSETLK                       = 0x8\n\tF_OSETLKW                      = 0x9\n\tF_RDAHEAD                      = 0x10\n\tF_RDLCK                        = 0x1\n\tF_READAHEAD                    = 0xf\n\tF_SETFD                        = 0x2\n\tF_SETFL                        = 0x4\n\tF_SETLK                        = 0xc\n\tF_SETLKW                       = 0xd\n\tF_SETLK_REMOTE                 = 0xe\n\tF_SETOWN                       = 0x6\n\tF_UNLCK                        = 0x2\n\tF_UNLCKSYS                     = 0x4\n\tF_WRLCK                        = 0x3\n\tHUPCL                          = 0x4000\n\tHW_MACHINE                     = 0x1\n\tICANON                         = 0x100\n\tICMP6_FILTER                   = 0x12\n\tICRNL                          = 0x100\n\tIEXTEN                         = 0x400\n\tIFAN_ARRIVAL                   = 0x0\n\tIFAN_DEPARTURE                 = 0x1\n\tIFF_ALLMULTI                   = 0x200\n\tIFF_ALTPHYS                    = 0x4000\n\tIFF_BROADCAST                  = 0x2\n\tIFF_CANTCHANGE                 = 0x218f52\n\tIFF_CANTCONFIG                 = 0x10000\n\tIFF_DEBUG                      = 0x4\n\tIFF_DRV_OACTIVE                = 0x400\n\tIFF_DRV_RUNNING                = 0x40\n\tIFF_DYING                      = 0x200000\n\tIFF_LINK0                      = 0x1000\n\tIFF_LINK1                      = 0x2000\n\tIFF_LINK2                      = 0x4000\n\tIFF_LOOPBACK                   = 0x8\n\tIFF_MONITOR                    = 0x40000\n\tIFF_MULTICAST                  = 0x8000\n\tIFF_NOARP                      = 0x80\n\tIFF_OACTIVE                    = 0x400\n\tIFF_POINTOPOINT                = 0x10\n\tIFF_PPROMISC                   = 0x20000\n\tIFF_PROMISC                    = 0x100\n\tIFF_RENAMING                   = 0x400000\n\tIFF_RUNNING                    = 0x40\n\tIFF_SIMPLEX                    = 0x800\n\tIFF_STATICARP                  = 0x80000\n\tIFF_UP                         = 0x1\n\tIFNAMSIZ                       = 0x10\n\tIFT_BRIDGE                     = 0xd1\n\tIFT_CARP                       = 0xf8\n\tIFT_IEEE1394                   = 0x90\n\tIFT_INFINIBAND                 = 0xc7\n\tIFT_L2VLAN                     = 0x87\n\tIFT_L3IPVLAN                   = 0x88\n\tIFT_PPP                        = 0x17\n\tIFT_PROPVIRTUAL                = 0x35\n\tIGNBRK                         = 0x1\n\tIGNCR                          = 0x80\n\tIGNPAR                         = 0x4\n\tIMAXBEL                        = 0x2000\n\tINLCR                          = 0x40\n\tINPCK                          = 0x10\n\tIN_CLASSA_HOST                 = 0xffffff\n\tIN_CLASSA_MAX                  = 0x80\n\tIN_CLASSA_NET                  = 0xff000000\n\tIN_CLASSA_NSHIFT               = 0x18\n\tIN_CLASSB_HOST                 = 0xffff\n\tIN_CLASSB_MAX                  = 0x10000\n\tIN_CLASSB_NET                  = 0xffff0000\n\tIN_CLASSB_NSHIFT               = 0x10\n\tIN_CLASSC_HOST                 = 0xff\n\tIN_CLASSC_NET                  = 0xffffff00\n\tIN_CLASSC_NSHIFT               = 0x8\n\tIN_CLASSD_HOST                 = 0xfffffff\n\tIN_CLASSD_NET                  = 0xf0000000\n\tIN_CLASSD_NSHIFT               = 0x1c\n\tIN_LOOPBACKNET                 = 0x7f\n\tIN_RFC3021_MASK                = 0xfffffffe\n\tIPPROTO_3PC                    = 0x22\n\tIPPROTO_ADFS                   = 0x44\n\tIPPROTO_AH                     = 0x33\n\tIPPROTO_AHIP                   = 0x3d\n\tIPPROTO_APES                   = 0x63\n\tIPPROTO_ARGUS                  = 0xd\n\tIPPROTO_AX25                   = 0x5d\n\tIPPROTO_BHA                    = 0x31\n\tIPPROTO_BLT                    = 0x1e\n\tIPPROTO_BRSATMON               = 0x4c\n\tIPPROTO_CARP                   = 0x70\n\tIPPROTO_CFTP                   = 0x3e\n\tIPPROTO_CHAOS                  = 0x10\n\tIPPROTO_CMTP                   = 0x26\n\tIPPROTO_CPHB                   = 0x49\n\tIPPROTO_CPNX                   = 0x48\n\tIPPROTO_DDP                    = 0x25\n\tIPPROTO_DGP                    = 0x56\n\tIPPROTO_DIVERT                 = 0x102\n\tIPPROTO_DONE                   = 0x101\n\tIPPROTO_DSTOPTS                = 0x3c\n\tIPPROTO_EGP                    = 0x8\n\tIPPROTO_EMCON                  = 0xe\n\tIPPROTO_ENCAP                  = 0x62\n\tIPPROTO_EON                    = 0x50\n\tIPPROTO_ESP                    = 0x32\n\tIPPROTO_ETHERIP                = 0x61\n\tIPPROTO_FRAGMENT               = 0x2c\n\tIPPROTO_GGP                    = 0x3\n\tIPPROTO_GMTP                   = 0x64\n\tIPPROTO_GRE                    = 0x2f\n\tIPPROTO_HELLO                  = 0x3f\n\tIPPROTO_HIP                    = 0x8b\n\tIPPROTO_HMP                    = 0x14\n\tIPPROTO_HOPOPTS                = 0x0\n\tIPPROTO_ICMP                   = 0x1\n\tIPPROTO_ICMPV6                 = 0x3a\n\tIPPROTO_IDP                    = 0x16\n\tIPPROTO_IDPR                   = 0x23\n\tIPPROTO_IDRP                   = 0x2d\n\tIPPROTO_IGMP                   = 0x2\n\tIPPROTO_IGP                    = 0x55\n\tIPPROTO_IGRP                   = 0x58\n\tIPPROTO_IL                     = 0x28\n\tIPPROTO_INLSP                  = 0x34\n\tIPPROTO_INP                    = 0x20\n\tIPPROTO_IP                     = 0x0\n\tIPPROTO_IPCOMP                 = 0x6c\n\tIPPROTO_IPCV                   = 0x47\n\tIPPROTO_IPEIP                  = 0x5e\n\tIPPROTO_IPIP                   = 0x4\n\tIPPROTO_IPPC                   = 0x43\n\tIPPROTO_IPV4                   = 0x4\n\tIPPROTO_IPV6                   = 0x29\n\tIPPROTO_IRTP                   = 0x1c\n\tIPPROTO_KRYPTOLAN              = 0x41\n\tIPPROTO_LARP                   = 0x5b\n\tIPPROTO_LEAF1                  = 0x19\n\tIPPROTO_LEAF2                  = 0x1a\n\tIPPROTO_MAX                    = 0x100\n\tIPPROTO_MEAS                   = 0x13\n\tIPPROTO_MH                     = 0x87\n\tIPPROTO_MHRP                   = 0x30\n\tIPPROTO_MICP                   = 0x5f\n\tIPPROTO_MOBILE                 = 0x37\n\tIPPROTO_MPLS                   = 0x89\n\tIPPROTO_MTP                    = 0x5c\n\tIPPROTO_MUX                    = 0x12\n\tIPPROTO_ND                     = 0x4d\n\tIPPROTO_NHRP                   = 0x36\n\tIPPROTO_NONE                   = 0x3b\n\tIPPROTO_NSP                    = 0x1f\n\tIPPROTO_NVPII                  = 0xb\n\tIPPROTO_OLD_DIVERT             = 0xfe\n\tIPPROTO_OSPFIGP                = 0x59\n\tIPPROTO_PFSYNC                 = 0xf0\n\tIPPROTO_PGM                    = 0x71\n\tIPPROTO_PIGP                   = 0x9\n\tIPPROTO_PIM                    = 0x67\n\tIPPROTO_PRM                    = 0x15\n\tIPPROTO_PUP                    = 0xc\n\tIPPROTO_PVP                    = 0x4b\n\tIPPROTO_RAW                    = 0xff\n\tIPPROTO_RCCMON                 = 0xa\n\tIPPROTO_RDP                    = 0x1b\n\tIPPROTO_RESERVED_253           = 0xfd\n\tIPPROTO_RESERVED_254           = 0xfe\n\tIPPROTO_ROUTING                = 0x2b\n\tIPPROTO_RSVP                   = 0x2e\n\tIPPROTO_RVD                    = 0x42\n\tIPPROTO_SATEXPAK               = 0x40\n\tIPPROTO_SATMON                 = 0x45\n\tIPPROTO_SCCSP                  = 0x60\n\tIPPROTO_SCTP                   = 0x84\n\tIPPROTO_SDRP                   = 0x2a\n\tIPPROTO_SEND                   = 0x103\n\tIPPROTO_SEP                    = 0x21\n\tIPPROTO_SHIM6                  = 0x8c\n\tIPPROTO_SKIP                   = 0x39\n\tIPPROTO_SPACER                 = 0x7fff\n\tIPPROTO_SRPC                   = 0x5a\n\tIPPROTO_ST                     = 0x7\n\tIPPROTO_SVMTP                  = 0x52\n\tIPPROTO_SWIPE                  = 0x35\n\tIPPROTO_TCF                    = 0x57\n\tIPPROTO_TCP                    = 0x6\n\tIPPROTO_TLSP                   = 0x38\n\tIPPROTO_TP                     = 0x1d\n\tIPPROTO_TPXX                   = 0x27\n\tIPPROTO_TRUNK1                 = 0x17\n\tIPPROTO_TRUNK2                 = 0x18\n\tIPPROTO_TTP                    = 0x54\n\tIPPROTO_UDP                    = 0x11\n\tIPPROTO_UDPLITE                = 0x88\n\tIPPROTO_VINES                  = 0x53\n\tIPPROTO_VISA                   = 0x46\n\tIPPROTO_VMTP                   = 0x51\n\tIPPROTO_WBEXPAK                = 0x4f\n\tIPPROTO_WBMON                  = 0x4e\n\tIPPROTO_WSN                    = 0x4a\n\tIPPROTO_XNET                   = 0xf\n\tIPPROTO_XTP                    = 0x24\n\tIPV6_AUTOFLOWLABEL             = 0x3b\n\tIPV6_BINDANY                   = 0x40\n\tIPV6_BINDMULTI                 = 0x41\n\tIPV6_BINDV6ONLY                = 0x1b\n\tIPV6_CHECKSUM                  = 0x1a\n\tIPV6_DEFAULT_MULTICAST_HOPS    = 0x1\n\tIPV6_DEFAULT_MULTICAST_LOOP    = 0x1\n\tIPV6_DEFHLIM                   = 0x40\n\tIPV6_DONTFRAG                  = 0x3e\n\tIPV6_DSTOPTS                   = 0x32\n\tIPV6_FLOWID                    = 0x43\n\tIPV6_FLOWINFO_MASK             = 0xffffff0f\n\tIPV6_FLOWLABEL_MASK            = 0xffff0f00\n\tIPV6_FLOWTYPE                  = 0x44\n\tIPV6_FRAGTTL                   = 0x78\n\tIPV6_FW_ADD                    = 0x1e\n\tIPV6_FW_DEL                    = 0x1f\n\tIPV6_FW_FLUSH                  = 0x20\n\tIPV6_FW_GET                    = 0x22\n\tIPV6_FW_ZERO                   = 0x21\n\tIPV6_HLIMDEC                   = 0x1\n\tIPV6_HOPLIMIT                  = 0x2f\n\tIPV6_HOPOPTS                   = 0x31\n\tIPV6_IPSEC_POLICY              = 0x1c\n\tIPV6_JOIN_GROUP                = 0xc\n\tIPV6_LEAVE_GROUP               = 0xd\n\tIPV6_MAXHLIM                   = 0xff\n\tIPV6_MAXOPTHDR                 = 0x800\n\tIPV6_MAXPACKET                 = 0xffff\n\tIPV6_MAX_GROUP_SRC_FILTER      = 0x200\n\tIPV6_MAX_MEMBERSHIPS           = 0xfff\n\tIPV6_MAX_SOCK_SRC_FILTER       = 0x80\n\tIPV6_MIN_MEMBERSHIPS           = 0x1f\n\tIPV6_MMTU                      = 0x500\n\tIPV6_MSFILTER                  = 0x4a\n\tIPV6_MULTICAST_HOPS            = 0xa\n\tIPV6_MULTICAST_IF              = 0x9\n\tIPV6_MULTICAST_LOOP            = 0xb\n\tIPV6_NEXTHOP                   = 0x30\n\tIPV6_PATHMTU                   = 0x2c\n\tIPV6_PKTINFO                   = 0x2e\n\tIPV6_PORTRANGE                 = 0xe\n\tIPV6_PORTRANGE_DEFAULT         = 0x0\n\tIPV6_PORTRANGE_HIGH            = 0x1\n\tIPV6_PORTRANGE_LOW             = 0x2\n\tIPV6_PREFER_TEMPADDR           = 0x3f\n\tIPV6_RECVDSTOPTS               = 0x28\n\tIPV6_RECVFLOWID                = 0x46\n\tIPV6_RECVHOPLIMIT              = 0x25\n\tIPV6_RECVHOPOPTS               = 0x27\n\tIPV6_RECVPATHMTU               = 0x2b\n\tIPV6_RECVPKTINFO               = 0x24\n\tIPV6_RECVRSSBUCKETID           = 0x47\n\tIPV6_RECVRTHDR                 = 0x26\n\tIPV6_RECVTCLASS                = 0x39\n\tIPV6_RSSBUCKETID               = 0x45\n\tIPV6_RSS_LISTEN_BUCKET         = 0x42\n\tIPV6_RTHDR                     = 0x33\n\tIPV6_RTHDRDSTOPTS              = 0x23\n\tIPV6_RTHDR_LOOSE               = 0x0\n\tIPV6_RTHDR_STRICT              = 0x1\n\tIPV6_RTHDR_TYPE_0              = 0x0\n\tIPV6_SOCKOPT_RESERVED1         = 0x3\n\tIPV6_TCLASS                    = 0x3d\n\tIPV6_UNICAST_HOPS              = 0x4\n\tIPV6_USE_MIN_MTU               = 0x2a\n\tIPV6_V6ONLY                    = 0x1b\n\tIPV6_VERSION                   = 0x60\n\tIPV6_VERSION_MASK              = 0xf0\n\tIP_ADD_MEMBERSHIP              = 0xc\n\tIP_ADD_SOURCE_MEMBERSHIP       = 0x46\n\tIP_BINDANY                     = 0x18\n\tIP_BINDMULTI                   = 0x19\n\tIP_BLOCK_SOURCE                = 0x48\n\tIP_DEFAULT_MULTICAST_LOOP      = 0x1\n\tIP_DEFAULT_MULTICAST_TTL       = 0x1\n\tIP_DF                          = 0x4000\n\tIP_DONTFRAG                    = 0x43\n\tIP_DROP_MEMBERSHIP             = 0xd\n\tIP_DROP_SOURCE_MEMBERSHIP      = 0x47\n\tIP_DUMMYNET3                   = 0x31\n\tIP_DUMMYNET_CONFIGURE          = 0x3c\n\tIP_DUMMYNET_DEL                = 0x3d\n\tIP_DUMMYNET_FLUSH              = 0x3e\n\tIP_DUMMYNET_GET                = 0x40\n\tIP_FLOWID                      = 0x5a\n\tIP_FLOWTYPE                    = 0x5b\n\tIP_FW3                         = 0x30\n\tIP_FW_ADD                      = 0x32\n\tIP_FW_DEL                      = 0x33\n\tIP_FW_FLUSH                    = 0x34\n\tIP_FW_GET                      = 0x36\n\tIP_FW_NAT_CFG                  = 0x38\n\tIP_FW_NAT_DEL                  = 0x39\n\tIP_FW_NAT_GET_CONFIG           = 0x3a\n\tIP_FW_NAT_GET_LOG              = 0x3b\n\tIP_FW_RESETLOG                 = 0x37\n\tIP_FW_TABLE_ADD                = 0x28\n\tIP_FW_TABLE_DEL                = 0x29\n\tIP_FW_TABLE_FLUSH              = 0x2a\n\tIP_FW_TABLE_GETSIZE            = 0x2b\n\tIP_FW_TABLE_LIST               = 0x2c\n\tIP_FW_ZERO                     = 0x35\n\tIP_HDRINCL                     = 0x2\n\tIP_IPSEC_POLICY                = 0x15\n\tIP_MAXPACKET                   = 0xffff\n\tIP_MAX_GROUP_SRC_FILTER        = 0x200\n\tIP_MAX_MEMBERSHIPS             = 0xfff\n\tIP_MAX_SOCK_MUTE_FILTER        = 0x80\n\tIP_MAX_SOCK_SRC_FILTER         = 0x80\n\tIP_MAX_SOURCE_FILTER           = 0x400\n\tIP_MF                          = 0x2000\n\tIP_MINTTL                      = 0x42\n\tIP_MIN_MEMBERSHIPS             = 0x1f\n\tIP_MSFILTER                    = 0x4a\n\tIP_MSS                         = 0x240\n\tIP_MULTICAST_IF                = 0x9\n\tIP_MULTICAST_LOOP              = 0xb\n\tIP_MULTICAST_TTL               = 0xa\n\tIP_MULTICAST_VIF               = 0xe\n\tIP_OFFMASK                     = 0x1fff\n\tIP_ONESBCAST                   = 0x17\n\tIP_OPTIONS                     = 0x1\n\tIP_PORTRANGE                   = 0x13\n\tIP_PORTRANGE_DEFAULT           = 0x0\n\tIP_PORTRANGE_HIGH              = 0x1\n\tIP_PORTRANGE_LOW               = 0x2\n\tIP_RECVDSTADDR                 = 0x7\n\tIP_RECVFLOWID                  = 0x5d\n\tIP_RECVIF                      = 0x14\n\tIP_RECVOPTS                    = 0x5\n\tIP_RECVRETOPTS                 = 0x6\n\tIP_RECVRSSBUCKETID             = 0x5e\n\tIP_RECVTOS                     = 0x44\n\tIP_RECVTTL                     = 0x41\n\tIP_RETOPTS                     = 0x8\n\tIP_RF                          = 0x8000\n\tIP_RSSBUCKETID                 = 0x5c\n\tIP_RSS_LISTEN_BUCKET           = 0x1a\n\tIP_RSVP_OFF                    = 0x10\n\tIP_RSVP_ON                     = 0xf\n\tIP_RSVP_VIF_OFF                = 0x12\n\tIP_RSVP_VIF_ON                 = 0x11\n\tIP_SENDSRCADDR                 = 0x7\n\tIP_TOS                         = 0x3\n\tIP_TTL                         = 0x4\n\tIP_UNBLOCK_SOURCE              = 0x49\n\tISIG                           = 0x80\n\tISTRIP                         = 0x20\n\tIXANY                          = 0x800\n\tIXOFF                          = 0x400\n\tIXON                           = 0x200\n\tKERN_HOSTNAME                  = 0xa\n\tKERN_OSRELEASE                 = 0x2\n\tKERN_OSTYPE                    = 0x1\n\tKERN_VERSION                   = 0x4\n\tLOCK_EX                        = 0x2\n\tLOCK_NB                        = 0x4\n\tLOCK_SH                        = 0x1\n\tLOCK_UN                        = 0x8\n\tMADV_AUTOSYNC                  = 0x7\n\tMADV_CORE                      = 0x9\n\tMADV_DONTNEED                  = 0x4\n\tMADV_FREE                      = 0x5\n\tMADV_NOCORE                    = 0x8\n\tMADV_NORMAL                    = 0x0\n\tMADV_NOSYNC                    = 0x6\n\tMADV_PROTECT                   = 0xa\n\tMADV_RANDOM                    = 0x1\n\tMADV_SEQUENTIAL                = 0x2\n\tMADV_WILLNEED                  = 0x3\n\tMAP_ALIGNED_SUPER              = 0x1000000\n\tMAP_ALIGNMENT_MASK             = -0x1000000\n\tMAP_ALIGNMENT_SHIFT            = 0x18\n\tMAP_ANON                       = 0x1000\n\tMAP_ANONYMOUS                  = 0x1000\n\tMAP_COPY                       = 0x2\n\tMAP_EXCL                       = 0x4000\n\tMAP_FILE                       = 0x0\n\tMAP_FIXED                      = 0x10\n\tMAP_GUARD                      = 0x2000\n\tMAP_HASSEMAPHORE               = 0x200\n\tMAP_NOCORE                     = 0x20000\n\tMAP_NOSYNC                     = 0x800\n\tMAP_PREFAULT_READ              = 0x40000\n\tMAP_PRIVATE                    = 0x2\n\tMAP_RESERVED0020               = 0x20\n\tMAP_RESERVED0040               = 0x40\n\tMAP_RESERVED0080               = 0x80\n\tMAP_RESERVED0100               = 0x100\n\tMAP_SHARED                     = 0x1\n\tMAP_STACK                      = 0x400\n\tMCL_CURRENT                    = 0x1\n\tMCL_FUTURE                     = 0x2\n\tMNT_ACLS                       = 0x8000000\n\tMNT_ASYNC                      = 0x40\n\tMNT_AUTOMOUNTED                = 0x200000000\n\tMNT_BYFSID                     = 0x8000000\n\tMNT_CMDFLAGS                   = 0xd0f0000\n\tMNT_DEFEXPORTED                = 0x200\n\tMNT_DELEXPORT                  = 0x20000\n\tMNT_EXKERB                     = 0x800\n\tMNT_EXPORTANON                 = 0x400\n\tMNT_EXPORTED                   = 0x100\n\tMNT_EXPUBLIC                   = 0x20000000\n\tMNT_EXRDONLY                   = 0x80\n\tMNT_FORCE                      = 0x80000\n\tMNT_GJOURNAL                   = 0x2000000\n\tMNT_IGNORE                     = 0x800000\n\tMNT_LAZY                       = 0x3\n\tMNT_LOCAL                      = 0x1000\n\tMNT_MULTILABEL                 = 0x4000000\n\tMNT_NFS4ACLS                   = 0x10\n\tMNT_NOATIME                    = 0x10000000\n\tMNT_NOCLUSTERR                 = 0x40000000\n\tMNT_NOCLUSTERW                 = 0x80000000\n\tMNT_NOEXEC                     = 0x4\n\tMNT_NONBUSY                    = 0x4000000\n\tMNT_NOSUID                     = 0x8\n\tMNT_NOSYMFOLLOW                = 0x400000\n\tMNT_NOWAIT                     = 0x2\n\tMNT_QUOTA                      = 0x2000\n\tMNT_RDONLY                     = 0x1\n\tMNT_RELOAD                     = 0x40000\n\tMNT_ROOTFS                     = 0x4000\n\tMNT_SNAPSHOT                   = 0x1000000\n\tMNT_SOFTDEP                    = 0x200000\n\tMNT_SUIDDIR                    = 0x100000\n\tMNT_SUJ                        = 0x100000000\n\tMNT_SUSPEND                    = 0x4\n\tMNT_SYNCHRONOUS                = 0x2\n\tMNT_UNION                      = 0x20\n\tMNT_UPDATE                     = 0x10000\n\tMNT_UPDATEMASK                 = 0x2d8d0807e\n\tMNT_USER                       = 0x8000\n\tMNT_VISFLAGMASK                = 0x3fef0ffff\n\tMNT_WAIT                       = 0x1\n\tMSG_CMSG_CLOEXEC               = 0x40000\n\tMSG_COMPAT                     = 0x8000\n\tMSG_CTRUNC                     = 0x20\n\tMSG_DONTROUTE                  = 0x4\n\tMSG_DONTWAIT                   = 0x80\n\tMSG_EOF                        = 0x100\n\tMSG_EOR                        = 0x8\n\tMSG_NBIO                       = 0x4000\n\tMSG_NOSIGNAL                   = 0x20000\n\tMSG_NOTIFICATION               = 0x2000\n\tMSG_OOB                        = 0x1\n\tMSG_PEEK                       = 0x2\n\tMSG_TRUNC                      = 0x10\n\tMSG_WAITALL                    = 0x40\n\tMSG_WAITFORONE                 = 0x80000\n\tMS_ASYNC                       = 0x1\n\tMS_INVALIDATE                  = 0x2\n\tMS_SYNC                        = 0x0\n\tNAME_MAX                       = 0xff\n\tNET_RT_DUMP                    = 0x1\n\tNET_RT_FLAGS                   = 0x2\n\tNET_RT_IFLIST                  = 0x3\n\tNET_RT_IFLISTL                 = 0x5\n\tNET_RT_IFMALIST                = 0x4\n\tNOFLSH                         = 0x80000000\n\tNOKERNINFO                     = 0x2000000\n\tNOTE_ATTRIB                    = 0x8\n\tNOTE_CHILD                     = 0x4\n\tNOTE_CLOSE                     = 0x100\n\tNOTE_CLOSE_WRITE               = 0x200\n\tNOTE_DELETE                    = 0x1\n\tNOTE_EXEC                      = 0x20000000\n\tNOTE_EXIT                      = 0x80000000\n\tNOTE_EXTEND                    = 0x4\n\tNOTE_FFAND                     = 0x40000000\n\tNOTE_FFCOPY                    = 0xc0000000\n\tNOTE_FFCTRLMASK                = 0xc0000000\n\tNOTE_FFLAGSMASK                = 0xffffff\n\tNOTE_FFNOP                     = 0x0\n\tNOTE_FFOR                      = 0x80000000\n\tNOTE_FILE_POLL                 = 0x2\n\tNOTE_FORK                      = 0x40000000\n\tNOTE_LINK                      = 0x10\n\tNOTE_LOWAT                     = 0x1\n\tNOTE_MSECONDS                  = 0x2\n\tNOTE_NSECONDS                  = 0x8\n\tNOTE_OPEN                      = 0x80\n\tNOTE_PCTRLMASK                 = 0xf0000000\n\tNOTE_PDATAMASK                 = 0xfffff\n\tNOTE_READ                      = 0x400\n\tNOTE_RENAME                    = 0x20\n\tNOTE_REVOKE                    = 0x40\n\tNOTE_SECONDS                   = 0x1\n\tNOTE_TRACK                     = 0x1\n\tNOTE_TRACKERR                  = 0x2\n\tNOTE_TRIGGER                   = 0x1000000\n\tNOTE_USECONDS                  = 0x4\n\tNOTE_WRITE                     = 0x2\n\tOCRNL                          = 0x10\n\tONLCR                          = 0x2\n\tONLRET                         = 0x40\n\tONOCR                          = 0x20\n\tONOEOT                         = 0x8\n\tOPOST                          = 0x1\n\tOXTABS                         = 0x4\n\tO_ACCMODE                      = 0x3\n\tO_APPEND                       = 0x8\n\tO_ASYNC                        = 0x40\n\tO_CLOEXEC                      = 0x100000\n\tO_CREAT                        = 0x200\n\tO_DIRECT                       = 0x10000\n\tO_DIRECTORY                    = 0x20000\n\tO_EXCL                         = 0x800\n\tO_EXEC                         = 0x40000\n\tO_EXLOCK                       = 0x20\n\tO_FSYNC                        = 0x80\n\tO_NDELAY                       = 0x4\n\tO_NOCTTY                       = 0x8000\n\tO_NOFOLLOW                     = 0x100\n\tO_NONBLOCK                     = 0x4\n\tO_RDONLY                       = 0x0\n\tO_RDWR                         = 0x2\n\tO_SHLOCK                       = 0x10\n\tO_SYNC                         = 0x80\n\tO_TRUNC                        = 0x400\n\tO_TTY_INIT                     = 0x80000\n\tO_VERIFY                       = 0x200000\n\tO_WRONLY                       = 0x1\n\tPARENB                         = 0x1000\n\tPARMRK                         = 0x8\n\tPARODD                         = 0x2000\n\tPENDIN                         = 0x20000000\n\tPRIO_PGRP                      = 0x1\n\tPRIO_PROCESS                   = 0x0\n\tPRIO_USER                      = 0x2\n\tPROT_EXEC                      = 0x4\n\tPROT_NONE                      = 0x0\n\tPROT_READ                      = 0x1\n\tPROT_WRITE                     = 0x2\n\tRLIMIT_AS                      = 0xa\n\tRLIMIT_CORE                    = 0x4\n\tRLIMIT_CPU                     = 0x0\n\tRLIMIT_DATA                    = 0x2\n\tRLIMIT_FSIZE                   = 0x1\n\tRLIMIT_MEMLOCK                 = 0x6\n\tRLIMIT_NOFILE                  = 0x8\n\tRLIMIT_NPROC                   = 0x7\n\tRLIMIT_RSS                     = 0x5\n\tRLIMIT_STACK                   = 0x3\n\tRLIM_INFINITY                  = 0x7fffffffffffffff\n\tRTAX_AUTHOR                    = 0x6\n\tRTAX_BRD                       = 0x7\n\tRTAX_DST                       = 0x0\n\tRTAX_GATEWAY                   = 0x1\n\tRTAX_GENMASK                   = 0x3\n\tRTAX_IFA                       = 0x5\n\tRTAX_IFP                       = 0x4\n\tRTAX_MAX                       = 0x8\n\tRTAX_NETMASK                   = 0x2\n\tRTA_AUTHOR                     = 0x40\n\tRTA_BRD                        = 0x80\n\tRTA_DST                        = 0x1\n\tRTA_GATEWAY                    = 0x2\n\tRTA_GENMASK                    = 0x8\n\tRTA_IFA                        = 0x20\n\tRTA_IFP                        = 0x10\n\tRTA_NETMASK                    = 0x4\n\tRTF_BLACKHOLE                  = 0x1000\n\tRTF_BROADCAST                  = 0x400000\n\tRTF_DONE                       = 0x40\n\tRTF_DYNAMIC                    = 0x10\n\tRTF_FIXEDMTU                   = 0x80000\n\tRTF_FMASK                      = 0x1004d808\n\tRTF_GATEWAY                    = 0x2\n\tRTF_GWFLAG_COMPAT              = 0x80000000\n\tRTF_HOST                       = 0x4\n\tRTF_LLDATA                     = 0x400\n\tRTF_LLINFO                     = 0x400\n\tRTF_LOCAL                      = 0x200000\n\tRTF_MODIFIED                   = 0x20\n\tRTF_MULTICAST                  = 0x800000\n\tRTF_PINNED                     = 0x100000\n\tRTF_PROTO1                     = 0x8000\n\tRTF_PROTO2                     = 0x4000\n\tRTF_PROTO3                     = 0x40000\n\tRTF_REJECT                     = 0x8\n\tRTF_RNH_LOCKED                 = 0x40000000\n\tRTF_STATIC                     = 0x800\n\tRTF_STICKY                     = 0x10000000\n\tRTF_UP                         = 0x1\n\tRTF_XRESOLVE                   = 0x200\n\tRTM_ADD                        = 0x1\n\tRTM_CHANGE                     = 0x3\n\tRTM_DELADDR                    = 0xd\n\tRTM_DELETE                     = 0x2\n\tRTM_DELMADDR                   = 0x10\n\tRTM_GET                        = 0x4\n\tRTM_IEEE80211                  = 0x12\n\tRTM_IFANNOUNCE                 = 0x11\n\tRTM_IFINFO                     = 0xe\n\tRTM_LOCK                       = 0x8\n\tRTM_LOSING                     = 0x5\n\tRTM_MISS                       = 0x7\n\tRTM_NEWADDR                    = 0xc\n\tRTM_NEWMADDR                   = 0xf\n\tRTM_REDIRECT                   = 0x6\n\tRTM_RESOLVE                    = 0xb\n\tRTM_RTTUNIT                    = 0xf4240\n\tRTM_VERSION                    = 0x5\n\tRTV_EXPIRE                     = 0x4\n\tRTV_HOPCOUNT                   = 0x2\n\tRTV_MTU                        = 0x1\n\tRTV_RPIPE                      = 0x8\n\tRTV_RTT                        = 0x40\n\tRTV_RTTVAR                     = 0x80\n\tRTV_SPIPE                      = 0x10\n\tRTV_SSTHRESH                   = 0x20\n\tRTV_WEIGHT                     = 0x100\n\tRT_ALL_FIBS                    = -0x1\n\tRT_BLACKHOLE                   = 0x40\n\tRT_CACHING_CONTEXT             = 0x1\n\tRT_DEFAULT_FIB                 = 0x0\n\tRT_HAS_GW                      = 0x80\n\tRT_HAS_HEADER                  = 0x10\n\tRT_HAS_HEADER_BIT              = 0x4\n\tRT_L2_ME                       = 0x4\n\tRT_L2_ME_BIT                   = 0x2\n\tRT_LLE_CACHE                   = 0x100\n\tRT_MAY_LOOP                    = 0x8\n\tRT_MAY_LOOP_BIT                = 0x3\n\tRT_NORTREF                     = 0x2\n\tRT_REJECT                      = 0x20\n\tRUSAGE_CHILDREN                = -0x1\n\tRUSAGE_SELF                    = 0x0\n\tRUSAGE_THREAD                  = 0x1\n\tSCM_BINTIME                    = 0x4\n\tSCM_CREDS                      = 0x3\n\tSCM_RIGHTS                     = 0x1\n\tSCM_TIMESTAMP                  = 0x2\n\tSHUT_RD                        = 0x0\n\tSHUT_RDWR                      = 0x2\n\tSHUT_WR                        = 0x1\n\tSIOCADDMULTI                   = 0x80206931\n\tSIOCAIFADDR                    = 0x8040691a\n\tSIOCAIFGROUP                   = 0x80246987\n\tSIOCATMARK                     = 0x40047307\n\tSIOCDELMULTI                   = 0x80206932\n\tSIOCDIFADDR                    = 0x80206919\n\tSIOCDIFGROUP                   = 0x80246989\n\tSIOCDIFPHYADDR                 = 0x80206949\n\tSIOCGDRVSPEC                   = 0xc01c697b\n\tSIOCGETSGCNT                   = 0xc0147210\n\tSIOCGETVIFCNT                  = 0xc014720f\n\tSIOCGHIWAT                     = 0x40047301\n\tSIOCGHWADDR                    = 0xc020693e\n\tSIOCGI2C                       = 0xc020693d\n\tSIOCGIFADDR                    = 0xc0206921\n\tSIOCGIFBRDADDR                 = 0xc0206923\n\tSIOCGIFCAP                     = 0xc020691f\n\tSIOCGIFCONF                    = 0xc0086924\n\tSIOCGIFDESCR                   = 0xc020692a\n\tSIOCGIFDSTADDR                 = 0xc0206922\n\tSIOCGIFFIB                     = 0xc020695c\n\tSIOCGIFFLAGS                   = 0xc0206911\n\tSIOCGIFGENERIC                 = 0xc020693a\n\tSIOCGIFGMEMB                   = 0xc024698a\n\tSIOCGIFGROUP                   = 0xc0246988\n\tSIOCGIFINDEX                   = 0xc0206920\n\tSIOCGIFMAC                     = 0xc0206926\n\tSIOCGIFMEDIA                   = 0xc0286938\n\tSIOCGIFMETRIC                  = 0xc0206917\n\tSIOCGIFMTU                     = 0xc0206933\n\tSIOCGIFNETMASK                 = 0xc0206925\n\tSIOCGIFPDSTADDR                = 0xc0206948\n\tSIOCGIFPHYS                    = 0xc0206935\n\tSIOCGIFPSRCADDR                = 0xc0206947\n\tSIOCGIFSTATUS                  = 0xc331693b\n\tSIOCGIFXMEDIA                  = 0xc028698b\n\tSIOCGLOWAT                     = 0x40047303\n\tSIOCGPGRP                      = 0x40047309\n\tSIOCGPRIVATE_0                 = 0xc0206950\n\tSIOCGPRIVATE_1                 = 0xc0206951\n\tSIOCGTUNFIB                    = 0xc020695e\n\tSIOCIFCREATE                   = 0xc020697a\n\tSIOCIFCREATE2                  = 0xc020697c\n\tSIOCIFDESTROY                  = 0x80206979\n\tSIOCIFGCLONERS                 = 0xc00c6978\n\tSIOCSDRVSPEC                   = 0x801c697b\n\tSIOCSHIWAT                     = 0x80047300\n\tSIOCSIFADDR                    = 0x8020690c\n\tSIOCSIFBRDADDR                 = 0x80206913\n\tSIOCSIFCAP                     = 0x8020691e\n\tSIOCSIFDESCR                   = 0x80206929\n\tSIOCSIFDSTADDR                 = 0x8020690e\n\tSIOCSIFFIB                     = 0x8020695d\n\tSIOCSIFFLAGS                   = 0x80206910\n\tSIOCSIFGENERIC                 = 0x80206939\n\tSIOCSIFLLADDR                  = 0x8020693c\n\tSIOCSIFMAC                     = 0x80206927\n\tSIOCSIFMEDIA                   = 0xc0206937\n\tSIOCSIFMETRIC                  = 0x80206918\n\tSIOCSIFMTU                     = 0x80206934\n\tSIOCSIFNAME                    = 0x80206928\n\tSIOCSIFNETMASK                 = 0x80206916\n\tSIOCSIFPHYADDR                 = 0x80406946\n\tSIOCSIFPHYS                    = 0x80206936\n\tSIOCSIFRVNET                   = 0xc020695b\n\tSIOCSIFVNET                    = 0xc020695a\n\tSIOCSLOWAT                     = 0x80047302\n\tSIOCSPGRP                      = 0x80047308\n\tSIOCSTUNFIB                    = 0x8020695f\n\tSOCK_CLOEXEC                   = 0x10000000\n\tSOCK_DGRAM                     = 0x2\n\tSOCK_MAXADDRLEN                = 0xff\n\tSOCK_NONBLOCK                  = 0x20000000\n\tSOCK_RAW                       = 0x3\n\tSOCK_RDM                       = 0x4\n\tSOCK_SEQPACKET                 = 0x5\n\tSOCK_STREAM                    = 0x1\n\tSOL_SOCKET                     = 0xffff\n\tSOMAXCONN                      = 0x80\n\tSO_ACCEPTCONN                  = 0x2\n\tSO_ACCEPTFILTER                = 0x1000\n\tSO_BINTIME                     = 0x2000\n\tSO_BROADCAST                   = 0x20\n\tSO_DEBUG                       = 0x1\n\tSO_DONTROUTE                   = 0x10\n\tSO_ERROR                       = 0x1007\n\tSO_KEEPALIVE                   = 0x8\n\tSO_LABEL                       = 0x1009\n\tSO_LINGER                      = 0x80\n\tSO_LISTENINCQLEN               = 0x1013\n\tSO_LISTENQLEN                  = 0x1012\n\tSO_LISTENQLIMIT                = 0x1011\n\tSO_NOSIGPIPE                   = 0x800\n\tSO_NO_DDP                      = 0x8000\n\tSO_NO_OFFLOAD                  = 0x4000\n\tSO_OOBINLINE                   = 0x100\n\tSO_PEERLABEL                   = 0x1010\n\tSO_PROTOCOL                    = 0x1016\n\tSO_PROTOTYPE                   = 0x1016\n\tSO_RCVBUF                      = 0x1002\n\tSO_RCVLOWAT                    = 0x1004\n\tSO_RCVTIMEO                    = 0x1006\n\tSO_REUSEADDR                   = 0x4\n\tSO_REUSEPORT                   = 0x200\n\tSO_SETFIB                      = 0x1014\n\tSO_SNDBUF                      = 0x1001\n\tSO_SNDLOWAT                    = 0x1003\n\tSO_SNDTIMEO                    = 0x1005\n\tSO_TIMESTAMP                   = 0x400\n\tSO_TYPE                        = 0x1008\n\tSO_USELOOPBACK                 = 0x40\n\tSO_USER_COOKIE                 = 0x1015\n\tSO_VENDOR                      = 0x80000000\n\tS_BLKSIZE                      = 0x200\n\tS_IEXEC                        = 0x40\n\tS_IFBLK                        = 0x6000\n\tS_IFCHR                        = 0x2000\n\tS_IFDIR                        = 0x4000\n\tS_IFIFO                        = 0x1000\n\tS_IFLNK                        = 0xa000\n\tS_IFMT                         = 0xf000\n\tS_IFREG                        = 0x8000\n\tS_IFSOCK                       = 0xc000\n\tS_IFWHT                        = 0xe000\n\tS_IREAD                        = 0x100\n\tS_IRGRP                        = 0x20\n\tS_IROTH                        = 0x4\n\tS_IRUSR                        = 0x100\n\tS_IRWXG                        = 0x38\n\tS_IRWXO                        = 0x7\n\tS_IRWXU                        = 0x1c0\n\tS_ISGID                        = 0x400\n\tS_ISTXT                        = 0x200\n\tS_ISUID                        = 0x800\n\tS_ISVTX                        = 0x200\n\tS_IWGRP                        = 0x10\n\tS_IWOTH                        = 0x2\n\tS_IWRITE                       = 0x80\n\tS_IWUSR                        = 0x80\n\tS_IXGRP                        = 0x8\n\tS_IXOTH                        = 0x1\n\tS_IXUSR                        = 0x40\n\tTAB0                           = 0x0\n\tTAB3                           = 0x4\n\tTABDLY                         = 0x4\n\tTCIFLUSH                       = 0x1\n\tTCIOFF                         = 0x3\n\tTCIOFLUSH                      = 0x3\n\tTCION                          = 0x4\n\tTCOFLUSH                       = 0x2\n\tTCOOFF                         = 0x1\n\tTCOON                          = 0x2\n\tTCP_CA_NAME_MAX                = 0x10\n\tTCP_CCALGOOPT                  = 0x41\n\tTCP_CONGESTION                 = 0x40\n\tTCP_FASTOPEN                   = 0x401\n\tTCP_FUNCTION_BLK               = 0x2000\n\tTCP_FUNCTION_NAME_LEN_MAX      = 0x20\n\tTCP_INFO                       = 0x20\n\tTCP_KEEPCNT                    = 0x400\n\tTCP_KEEPIDLE                   = 0x100\n\tTCP_KEEPINIT                   = 0x80\n\tTCP_KEEPINTVL                  = 0x200\n\tTCP_MAXBURST                   = 0x4\n\tTCP_MAXHLEN                    = 0x3c\n\tTCP_MAXOLEN                    = 0x28\n\tTCP_MAXSEG                     = 0x2\n\tTCP_MAXWIN                     = 0xffff\n\tTCP_MAX_SACK                   = 0x4\n\tTCP_MAX_WINSHIFT               = 0xe\n\tTCP_MD5SIG                     = 0x10\n\tTCP_MINMSS                     = 0xd8\n\tTCP_MSS                        = 0x218\n\tTCP_NODELAY                    = 0x1\n\tTCP_NOOPT                      = 0x8\n\tTCP_NOPUSH                     = 0x4\n\tTCP_PCAP_IN                    = 0x1000\n\tTCP_PCAP_OUT                   = 0x800\n\tTCP_VENDOR                     = 0x80000000\n\tTCSAFLUSH                      = 0x2\n\tTIOCCBRK                       = 0x2000747a\n\tTIOCCDTR                       = 0x20007478\n\tTIOCCONS                       = 0x80047462\n\tTIOCDRAIN                      = 0x2000745e\n\tTIOCEXCL                       = 0x2000740d\n\tTIOCEXT                        = 0x80047460\n\tTIOCFLUSH                      = 0x80047410\n\tTIOCGDRAINWAIT                 = 0x40047456\n\tTIOCGETA                       = 0x402c7413\n\tTIOCGETD                       = 0x4004741a\n\tTIOCGPGRP                      = 0x40047477\n\tTIOCGPTN                       = 0x4004740f\n\tTIOCGSID                       = 0x40047463\n\tTIOCGWINSZ                     = 0x40087468\n\tTIOCMBIC                       = 0x8004746b\n\tTIOCMBIS                       = 0x8004746c\n\tTIOCMGDTRWAIT                  = 0x4004745a\n\tTIOCMGET                       = 0x4004746a\n\tTIOCMSDTRWAIT                  = 0x8004745b\n\tTIOCMSET                       = 0x8004746d\n\tTIOCM_CAR                      = 0x40\n\tTIOCM_CD                       = 0x40\n\tTIOCM_CTS                      = 0x20\n\tTIOCM_DCD                      = 0x40\n\tTIOCM_DSR                      = 0x100\n\tTIOCM_DTR                      = 0x2\n\tTIOCM_LE                       = 0x1\n\tTIOCM_RI                       = 0x80\n\tTIOCM_RNG                      = 0x80\n\tTIOCM_RTS                      = 0x4\n\tTIOCM_SR                       = 0x10\n\tTIOCM_ST                       = 0x8\n\tTIOCNOTTY                      = 0x20007471\n\tTIOCNXCL                       = 0x2000740e\n\tTIOCOUTQ                       = 0x40047473\n\tTIOCPKT                        = 0x80047470\n\tTIOCPKT_DATA                   = 0x0\n\tTIOCPKT_DOSTOP                 = 0x20\n\tTIOCPKT_FLUSHREAD              = 0x1\n\tTIOCPKT_FLUSHWRITE             = 0x2\n\tTIOCPKT_IOCTL                  = 0x40\n\tTIOCPKT_NOSTOP                 = 0x10\n\tTIOCPKT_START                  = 0x8\n\tTIOCPKT_STOP                   = 0x4\n\tTIOCPTMASTER                   = 0x2000741c\n\tTIOCSBRK                       = 0x2000747b\n\tTIOCSCTTY                      = 0x20007461\n\tTIOCSDRAINWAIT                 = 0x80047457\n\tTIOCSDTR                       = 0x20007479\n\tTIOCSETA                       = 0x802c7414\n\tTIOCSETAF                      = 0x802c7416\n\tTIOCSETAW                      = 0x802c7415\n\tTIOCSETD                       = 0x8004741b\n\tTIOCSIG                        = 0x2004745f\n\tTIOCSPGRP                      = 0x80047476\n\tTIOCSTART                      = 0x2000746e\n\tTIOCSTAT                       = 0x20007465\n\tTIOCSTI                        = 0x80017472\n\tTIOCSTOP                       = 0x2000746f\n\tTIOCSWINSZ                     = 0x80087467\n\tTIOCTIMESTAMP                  = 0x40107459\n\tTIOCUCNTL                      = 0x80047466\n\tTOSTOP                         = 0x400000\n\tVDISCARD                       = 0xf\n\tVDSUSP                         = 0xb\n\tVEOF                           = 0x0\n\tVEOL                           = 0x1\n\tVEOL2                          = 0x2\n\tVERASE                         = 0x3\n\tVERASE2                        = 0x7\n\tVINTR                          = 0x8\n\tVKILL                          = 0x5\n\tVLNEXT                         = 0xe\n\tVMIN                           = 0x10\n\tVQUIT                          = 0x9\n\tVREPRINT                       = 0x6\n\tVSTART                         = 0xc\n\tVSTATUS                        = 0x12\n\tVSTOP                          = 0xd\n\tVSUSP                          = 0xa\n\tVTIME                          = 0x11\n\tVWERASE                        = 0x4\n\tWCONTINUED                     = 0x4\n\tWCOREFLAG                      = 0x80\n\tWEXITED                        = 0x10\n\tWLINUXCLONE                    = 0x80000000\n\tWNOHANG                        = 0x1\n\tWNOWAIT                        = 0x8\n\tWSTOPPED                       = 0x2\n\tWTRAPPED                       = 0x20\n\tWUNTRACED                      = 0x2\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x30)\n\tEADDRNOTAVAIL   = syscall.Errno(0x31)\n\tEAFNOSUPPORT    = syscall.Errno(0x2f)\n\tEAGAIN          = syscall.Errno(0x23)\n\tEALREADY        = syscall.Errno(0x25)\n\tEAUTH           = syscall.Errno(0x50)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADMSG         = syscall.Errno(0x59)\n\tEBADRPC         = syscall.Errno(0x48)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x55)\n\tECAPMODE        = syscall.Errno(0x5e)\n\tECHILD          = syscall.Errno(0xa)\n\tECONNABORTED    = syscall.Errno(0x35)\n\tECONNREFUSED    = syscall.Errno(0x3d)\n\tECONNRESET      = syscall.Errno(0x36)\n\tEDEADLK         = syscall.Errno(0xb)\n\tEDESTADDRREQ    = syscall.Errno(0x27)\n\tEDOM            = syscall.Errno(0x21)\n\tEDOOFUS         = syscall.Errno(0x58)\n\tEDQUOT          = syscall.Errno(0x45)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFTYPE          = syscall.Errno(0x4f)\n\tEHOSTDOWN       = syscall.Errno(0x40)\n\tEHOSTUNREACH    = syscall.Errno(0x41)\n\tEIDRM           = syscall.Errno(0x52)\n\tEILSEQ          = syscall.Errno(0x56)\n\tEINPROGRESS     = syscall.Errno(0x24)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEISCONN         = syscall.Errno(0x38)\n\tEISDIR          = syscall.Errno(0x15)\n\tELAST           = syscall.Errno(0x60)\n\tELOOP           = syscall.Errno(0x3e)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x28)\n\tEMULTIHOP       = syscall.Errno(0x5a)\n\tENAMETOOLONG    = syscall.Errno(0x3f)\n\tENEEDAUTH       = syscall.Errno(0x51)\n\tENETDOWN        = syscall.Errno(0x32)\n\tENETRESET       = syscall.Errno(0x34)\n\tENETUNREACH     = syscall.Errno(0x33)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x57)\n\tENOBUFS         = syscall.Errno(0x37)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x4d)\n\tENOLINK         = syscall.Errno(0x5b)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x53)\n\tENOPROTOOPT     = syscall.Errno(0x2a)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSYS          = syscall.Errno(0x4e)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCAPABLE     = syscall.Errno(0x5d)\n\tENOTCONN        = syscall.Errno(0x39)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x42)\n\tENOTRECOVERABLE = syscall.Errno(0x5f)\n\tENOTSOCK        = syscall.Errno(0x26)\n\tENOTSUP         = syscall.Errno(0x2d)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x2d)\n\tEOVERFLOW       = syscall.Errno(0x54)\n\tEOWNERDEAD      = syscall.Errno(0x60)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x2e)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x43)\n\tEPROCUNAVAIL    = syscall.Errno(0x4c)\n\tEPROGMISMATCH   = syscall.Errno(0x4b)\n\tEPROGUNAVAIL    = syscall.Errno(0x4a)\n\tEPROTO          = syscall.Errno(0x5c)\n\tEPROTONOSUPPORT = syscall.Errno(0x2b)\n\tEPROTOTYPE      = syscall.Errno(0x29)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x47)\n\tEROFS           = syscall.Errno(0x1e)\n\tERPCMISMATCH    = syscall.Errno(0x49)\n\tESHUTDOWN       = syscall.Errno(0x3a)\n\tESOCKTNOSUPPORT = syscall.Errno(0x2c)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x46)\n\tETIMEDOUT       = syscall.Errno(0x3c)\n\tETOOMANYREFS    = syscall.Errno(0x3b)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUSERS          = syscall.Errno(0x44)\n\tEWOULDBLOCK     = syscall.Errno(0x23)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x14)\n\tSIGCONT   = syscall.Signal(0x13)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINFO   = syscall.Signal(0x1d)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x17)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGLIBRT  = syscall.Signal(0x21)\n\tSIGLWP    = syscall.Signal(0x20)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTOP   = syscall.Signal(0x11)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTHR    = syscall.Signal(0x20)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x12)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x10)\n\tSIGUSR1   = syscall.Signal(0x1e)\n\tSIGUSR2   = syscall.Signal(0x1f)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"device not configured\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"operation not supported by device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large\"},\n\t{35, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{36, \"EINPROGRESS\", \"operation now in progress\"},\n\t{37, \"EALREADY\", \"operation already in progress\"},\n\t{38, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{39, \"EDESTADDRREQ\", \"destination address required\"},\n\t{40, \"EMSGSIZE\", \"message too long\"},\n\t{41, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{42, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{43, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{44, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{45, \"EOPNOTSUPP\", \"operation not supported\"},\n\t{46, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{47, \"EAFNOSUPPORT\", \"address family not supported by protocol family\"},\n\t{48, \"EADDRINUSE\", \"address already in use\"},\n\t{49, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{50, \"ENETDOWN\", \"network is down\"},\n\t{51, \"ENETUNREACH\", \"network is unreachable\"},\n\t{52, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{53, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{54, \"ECONNRESET\", \"connection reset by peer\"},\n\t{55, \"ENOBUFS\", \"no buffer space available\"},\n\t{56, \"EISCONN\", \"socket is already connected\"},\n\t{57, \"ENOTCONN\", \"socket is not connected\"},\n\t{58, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{59, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{60, \"ETIMEDOUT\", \"operation timed out\"},\n\t{61, \"ECONNREFUSED\", \"connection refused\"},\n\t{62, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{63, \"ENAMETOOLONG\", \"file name too long\"},\n\t{64, \"EHOSTDOWN\", \"host is down\"},\n\t{65, \"EHOSTUNREACH\", \"no route to host\"},\n\t{66, \"ENOTEMPTY\", \"directory not empty\"},\n\t{67, \"EPROCLIM\", \"too many processes\"},\n\t{68, \"EUSERS\", \"too many users\"},\n\t{69, \"EDQUOT\", \"disc quota exceeded\"},\n\t{70, \"ESTALE\", \"stale NFS file handle\"},\n\t{71, \"EREMOTE\", \"too many levels of remote in path\"},\n\t{72, \"EBADRPC\", \"RPC struct is bad\"},\n\t{73, \"ERPCMISMATCH\", \"RPC version wrong\"},\n\t{74, \"EPROGUNAVAIL\", \"RPC prog. not avail\"},\n\t{75, \"EPROGMISMATCH\", \"program version wrong\"},\n\t{76, \"EPROCUNAVAIL\", \"bad procedure for program\"},\n\t{77, \"ENOLCK\", \"no locks available\"},\n\t{78, \"ENOSYS\", \"function not implemented\"},\n\t{79, \"EFTYPE\", \"inappropriate file type or format\"},\n\t{80, \"EAUTH\", \"authentication error\"},\n\t{81, \"ENEEDAUTH\", \"need authenticator\"},\n\t{82, \"EIDRM\", \"identifier removed\"},\n\t{83, \"ENOMSG\", \"no message of desired type\"},\n\t{84, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n\t{85, \"ECANCELED\", \"operation canceled\"},\n\t{86, \"EILSEQ\", \"illegal byte sequence\"},\n\t{87, \"ENOATTR\", \"attribute not found\"},\n\t{88, \"EDOOFUS\", \"programming error\"},\n\t{89, \"EBADMSG\", \"bad message\"},\n\t{90, \"EMULTIHOP\", \"multihop attempted\"},\n\t{91, \"ENOLINK\", \"link has been severed\"},\n\t{92, \"EPROTO\", \"protocol error\"},\n\t{93, \"ENOTCAPABLE\", \"capabilities insufficient\"},\n\t{94, \"ECAPMODE\", \"not permitted in capability mode\"},\n\t{95, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{96, \"EOWNERDEAD\", \"previous owner died\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGIOT\", \"abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"suspended (signal)\"},\n\t{18, \"SIGTSTP\", \"suspended\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGINFO\", \"information request\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n\t{32, \"SIGTHR\", \"unknown signal\"},\n\t{33, \"SIGLIBRT\", \"unknown signal\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_freebsd_arm64.go",
    "content": "// mkerrors.sh -m64\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build arm64,freebsd\n\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs -- -m64 _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                   = 0x10\n\tAF_ARP                         = 0x23\n\tAF_ATM                         = 0x1e\n\tAF_BLUETOOTH                   = 0x24\n\tAF_CCITT                       = 0xa\n\tAF_CHAOS                       = 0x5\n\tAF_CNT                         = 0x15\n\tAF_COIP                        = 0x14\n\tAF_DATAKIT                     = 0x9\n\tAF_DECnet                      = 0xc\n\tAF_DLI                         = 0xd\n\tAF_E164                        = 0x1a\n\tAF_ECMA                        = 0x8\n\tAF_HYLINK                      = 0xf\n\tAF_IEEE80211                   = 0x25\n\tAF_IMPLINK                     = 0x3\n\tAF_INET                        = 0x2\n\tAF_INET6                       = 0x1c\n\tAF_INET6_SDP                   = 0x2a\n\tAF_INET_SDP                    = 0x28\n\tAF_IPX                         = 0x17\n\tAF_ISDN                        = 0x1a\n\tAF_ISO                         = 0x7\n\tAF_LAT                         = 0xe\n\tAF_LINK                        = 0x12\n\tAF_LOCAL                       = 0x1\n\tAF_MAX                         = 0x2a\n\tAF_NATM                        = 0x1d\n\tAF_NETBIOS                     = 0x6\n\tAF_NETGRAPH                    = 0x20\n\tAF_OSI                         = 0x7\n\tAF_PUP                         = 0x4\n\tAF_ROUTE                       = 0x11\n\tAF_SCLUSTER                    = 0x22\n\tAF_SIP                         = 0x18\n\tAF_SLOW                        = 0x21\n\tAF_SNA                         = 0xb\n\tAF_UNIX                        = 0x1\n\tAF_UNSPEC                      = 0x0\n\tAF_VENDOR00                    = 0x27\n\tAF_VENDOR01                    = 0x29\n\tAF_VENDOR02                    = 0x2b\n\tAF_VENDOR03                    = 0x2d\n\tAF_VENDOR04                    = 0x2f\n\tAF_VENDOR05                    = 0x31\n\tAF_VENDOR06                    = 0x33\n\tAF_VENDOR07                    = 0x35\n\tAF_VENDOR08                    = 0x37\n\tAF_VENDOR09                    = 0x39\n\tAF_VENDOR10                    = 0x3b\n\tAF_VENDOR11                    = 0x3d\n\tAF_VENDOR12                    = 0x3f\n\tAF_VENDOR13                    = 0x41\n\tAF_VENDOR14                    = 0x43\n\tAF_VENDOR15                    = 0x45\n\tAF_VENDOR16                    = 0x47\n\tAF_VENDOR17                    = 0x49\n\tAF_VENDOR18                    = 0x4b\n\tAF_VENDOR19                    = 0x4d\n\tAF_VENDOR20                    = 0x4f\n\tAF_VENDOR21                    = 0x51\n\tAF_VENDOR22                    = 0x53\n\tAF_VENDOR23                    = 0x55\n\tAF_VENDOR24                    = 0x57\n\tAF_VENDOR25                    = 0x59\n\tAF_VENDOR26                    = 0x5b\n\tAF_VENDOR27                    = 0x5d\n\tAF_VENDOR28                    = 0x5f\n\tAF_VENDOR29                    = 0x61\n\tAF_VENDOR30                    = 0x63\n\tAF_VENDOR31                    = 0x65\n\tAF_VENDOR32                    = 0x67\n\tAF_VENDOR33                    = 0x69\n\tAF_VENDOR34                    = 0x6b\n\tAF_VENDOR35                    = 0x6d\n\tAF_VENDOR36                    = 0x6f\n\tAF_VENDOR37                    = 0x71\n\tAF_VENDOR38                    = 0x73\n\tAF_VENDOR39                    = 0x75\n\tAF_VENDOR40                    = 0x77\n\tAF_VENDOR41                    = 0x79\n\tAF_VENDOR42                    = 0x7b\n\tAF_VENDOR43                    = 0x7d\n\tAF_VENDOR44                    = 0x7f\n\tAF_VENDOR45                    = 0x81\n\tAF_VENDOR46                    = 0x83\n\tAF_VENDOR47                    = 0x85\n\tALTWERASE                      = 0x200\n\tB0                             = 0x0\n\tB110                           = 0x6e\n\tB115200                        = 0x1c200\n\tB1200                          = 0x4b0\n\tB134                           = 0x86\n\tB14400                         = 0x3840\n\tB150                           = 0x96\n\tB1800                          = 0x708\n\tB19200                         = 0x4b00\n\tB200                           = 0xc8\n\tB230400                        = 0x38400\n\tB2400                          = 0x960\n\tB28800                         = 0x7080\n\tB300                           = 0x12c\n\tB38400                         = 0x9600\n\tB460800                        = 0x70800\n\tB4800                          = 0x12c0\n\tB50                            = 0x32\n\tB57600                         = 0xe100\n\tB600                           = 0x258\n\tB7200                          = 0x1c20\n\tB75                            = 0x4b\n\tB76800                         = 0x12c00\n\tB921600                        = 0xe1000\n\tB9600                          = 0x2580\n\tBIOCFEEDBACK                   = 0x8004427c\n\tBIOCFLUSH                      = 0x20004268\n\tBIOCGBLEN                      = 0x40044266\n\tBIOCGDIRECTION                 = 0x40044276\n\tBIOCGDLT                       = 0x4004426a\n\tBIOCGDLTLIST                   = 0xc0104279\n\tBIOCGETBUFMODE                 = 0x4004427d\n\tBIOCGETIF                      = 0x4020426b\n\tBIOCGETZMAX                    = 0x4008427f\n\tBIOCGHDRCMPLT                  = 0x40044274\n\tBIOCGRSIG                      = 0x40044272\n\tBIOCGRTIMEOUT                  = 0x4010426e\n\tBIOCGSEESENT                   = 0x40044276\n\tBIOCGSTATS                     = 0x4008426f\n\tBIOCGTSTAMP                    = 0x40044283\n\tBIOCIMMEDIATE                  = 0x80044270\n\tBIOCLOCK                       = 0x2000427a\n\tBIOCPROMISC                    = 0x20004269\n\tBIOCROTZBUF                    = 0x40184280\n\tBIOCSBLEN                      = 0xc0044266\n\tBIOCSDIRECTION                 = 0x80044277\n\tBIOCSDLT                       = 0x80044278\n\tBIOCSETBUFMODE                 = 0x8004427e\n\tBIOCSETF                       = 0x80104267\n\tBIOCSETFNR                     = 0x80104282\n\tBIOCSETIF                      = 0x8020426c\n\tBIOCSETWF                      = 0x8010427b\n\tBIOCSETZBUF                    = 0x80184281\n\tBIOCSHDRCMPLT                  = 0x80044275\n\tBIOCSRSIG                      = 0x80044273\n\tBIOCSRTIMEOUT                  = 0x8010426d\n\tBIOCSSEESENT                   = 0x80044277\n\tBIOCSTSTAMP                    = 0x80044284\n\tBIOCVERSION                    = 0x40044271\n\tBPF_A                          = 0x10\n\tBPF_ABS                        = 0x20\n\tBPF_ADD                        = 0x0\n\tBPF_ALIGNMENT                  = 0x8\n\tBPF_ALU                        = 0x4\n\tBPF_AND                        = 0x50\n\tBPF_B                          = 0x10\n\tBPF_BUFMODE_BUFFER             = 0x1\n\tBPF_BUFMODE_ZBUF               = 0x2\n\tBPF_DIV                        = 0x30\n\tBPF_H                          = 0x8\n\tBPF_IMM                        = 0x0\n\tBPF_IND                        = 0x40\n\tBPF_JA                         = 0x0\n\tBPF_JEQ                        = 0x10\n\tBPF_JGE                        = 0x30\n\tBPF_JGT                        = 0x20\n\tBPF_JMP                        = 0x5\n\tBPF_JSET                       = 0x40\n\tBPF_K                          = 0x0\n\tBPF_LD                         = 0x0\n\tBPF_LDX                        = 0x1\n\tBPF_LEN                        = 0x80\n\tBPF_LSH                        = 0x60\n\tBPF_MAJOR_VERSION              = 0x1\n\tBPF_MAXBUFSIZE                 = 0x80000\n\tBPF_MAXINSNS                   = 0x200\n\tBPF_MEM                        = 0x60\n\tBPF_MEMWORDS                   = 0x10\n\tBPF_MINBUFSIZE                 = 0x20\n\tBPF_MINOR_VERSION              = 0x1\n\tBPF_MISC                       = 0x7\n\tBPF_MOD                        = 0x90\n\tBPF_MSH                        = 0xa0\n\tBPF_MUL                        = 0x20\n\tBPF_NEG                        = 0x80\n\tBPF_OR                         = 0x40\n\tBPF_RELEASE                    = 0x30bb6\n\tBPF_RET                        = 0x6\n\tBPF_RSH                        = 0x70\n\tBPF_ST                         = 0x2\n\tBPF_STX                        = 0x3\n\tBPF_SUB                        = 0x10\n\tBPF_TAX                        = 0x0\n\tBPF_TXA                        = 0x80\n\tBPF_T_BINTIME                  = 0x2\n\tBPF_T_BINTIME_FAST             = 0x102\n\tBPF_T_BINTIME_MONOTONIC        = 0x202\n\tBPF_T_BINTIME_MONOTONIC_FAST   = 0x302\n\tBPF_T_FAST                     = 0x100\n\tBPF_T_FLAG_MASK                = 0x300\n\tBPF_T_FORMAT_MASK              = 0x3\n\tBPF_T_MICROTIME                = 0x0\n\tBPF_T_MICROTIME_FAST           = 0x100\n\tBPF_T_MICROTIME_MONOTONIC      = 0x200\n\tBPF_T_MICROTIME_MONOTONIC_FAST = 0x300\n\tBPF_T_MONOTONIC                = 0x200\n\tBPF_T_MONOTONIC_FAST           = 0x300\n\tBPF_T_NANOTIME                 = 0x1\n\tBPF_T_NANOTIME_FAST            = 0x101\n\tBPF_T_NANOTIME_MONOTONIC       = 0x201\n\tBPF_T_NANOTIME_MONOTONIC_FAST  = 0x301\n\tBPF_T_NONE                     = 0x3\n\tBPF_T_NORMAL                   = 0x0\n\tBPF_W                          = 0x0\n\tBPF_X                          = 0x8\n\tBPF_XOR                        = 0xa0\n\tBRKINT                         = 0x2\n\tCAP_ACCEPT                     = 0x200000020000000\n\tCAP_ACL_CHECK                  = 0x400000000010000\n\tCAP_ACL_DELETE                 = 0x400000000020000\n\tCAP_ACL_GET                    = 0x400000000040000\n\tCAP_ACL_SET                    = 0x400000000080000\n\tCAP_ALL0                       = 0x20007ffffffffff\n\tCAP_ALL1                       = 0x4000000001fffff\n\tCAP_BIND                       = 0x200000040000000\n\tCAP_BINDAT                     = 0x200008000000400\n\tCAP_CHFLAGSAT                  = 0x200000000001400\n\tCAP_CONNECT                    = 0x200000080000000\n\tCAP_CONNECTAT                  = 0x200010000000400\n\tCAP_CREATE                     = 0x200000000000040\n\tCAP_EVENT                      = 0x400000000000020\n\tCAP_EXTATTR_DELETE             = 0x400000000001000\n\tCAP_EXTATTR_GET                = 0x400000000002000\n\tCAP_EXTATTR_LIST               = 0x400000000004000\n\tCAP_EXTATTR_SET                = 0x400000000008000\n\tCAP_FCHDIR                     = 0x200000000000800\n\tCAP_FCHFLAGS                   = 0x200000000001000\n\tCAP_FCHMOD                     = 0x200000000002000\n\tCAP_FCHMODAT                   = 0x200000000002400\n\tCAP_FCHOWN                     = 0x200000000004000\n\tCAP_FCHOWNAT                   = 0x200000000004400\n\tCAP_FCNTL                      = 0x200000000008000\n\tCAP_FCNTL_ALL                  = 0x78\n\tCAP_FCNTL_GETFL                = 0x8\n\tCAP_FCNTL_GETOWN               = 0x20\n\tCAP_FCNTL_SETFL                = 0x10\n\tCAP_FCNTL_SETOWN               = 0x40\n\tCAP_FEXECVE                    = 0x200000000000080\n\tCAP_FLOCK                      = 0x200000000010000\n\tCAP_FPATHCONF                  = 0x200000000020000\n\tCAP_FSCK                       = 0x200000000040000\n\tCAP_FSTAT                      = 0x200000000080000\n\tCAP_FSTATAT                    = 0x200000000080400\n\tCAP_FSTATFS                    = 0x200000000100000\n\tCAP_FSYNC                      = 0x200000000000100\n\tCAP_FTRUNCATE                  = 0x200000000000200\n\tCAP_FUTIMES                    = 0x200000000200000\n\tCAP_FUTIMESAT                  = 0x200000000200400\n\tCAP_GETPEERNAME                = 0x200000100000000\n\tCAP_GETSOCKNAME                = 0x200000200000000\n\tCAP_GETSOCKOPT                 = 0x200000400000000\n\tCAP_IOCTL                      = 0x400000000000080\n\tCAP_IOCTLS_ALL                 = 0x7fffffffffffffff\n\tCAP_KQUEUE                     = 0x400000000100040\n\tCAP_KQUEUE_CHANGE              = 0x400000000100000\n\tCAP_KQUEUE_EVENT               = 0x400000000000040\n\tCAP_LINKAT_SOURCE              = 0x200020000000400\n\tCAP_LINKAT_TARGET              = 0x200000000400400\n\tCAP_LISTEN                     = 0x200000800000000\n\tCAP_LOOKUP                     = 0x200000000000400\n\tCAP_MAC_GET                    = 0x400000000000001\n\tCAP_MAC_SET                    = 0x400000000000002\n\tCAP_MKDIRAT                    = 0x200000000800400\n\tCAP_MKFIFOAT                   = 0x200000001000400\n\tCAP_MKNODAT                    = 0x200000002000400\n\tCAP_MMAP                       = 0x200000000000010\n\tCAP_MMAP_R                     = 0x20000000000001d\n\tCAP_MMAP_RW                    = 0x20000000000001f\n\tCAP_MMAP_RWX                   = 0x20000000000003f\n\tCAP_MMAP_RX                    = 0x20000000000003d\n\tCAP_MMAP_W                     = 0x20000000000001e\n\tCAP_MMAP_WX                    = 0x20000000000003e\n\tCAP_MMAP_X                     = 0x20000000000003c\n\tCAP_PDGETPID                   = 0x400000000000200\n\tCAP_PDKILL                     = 0x400000000000800\n\tCAP_PDWAIT                     = 0x400000000000400\n\tCAP_PEELOFF                    = 0x200001000000000\n\tCAP_POLL_EVENT                 = 0x400000000000020\n\tCAP_PREAD                      = 0x20000000000000d\n\tCAP_PWRITE                     = 0x20000000000000e\n\tCAP_READ                       = 0x200000000000001\n\tCAP_RECV                       = 0x200000000000001\n\tCAP_RENAMEAT_SOURCE            = 0x200000004000400\n\tCAP_RENAMEAT_TARGET            = 0x200040000000400\n\tCAP_RIGHTS_VERSION             = 0x0\n\tCAP_RIGHTS_VERSION_00          = 0x0\n\tCAP_SEEK                       = 0x20000000000000c\n\tCAP_SEEK_TELL                  = 0x200000000000004\n\tCAP_SEM_GETVALUE               = 0x400000000000004\n\tCAP_SEM_POST                   = 0x400000000000008\n\tCAP_SEM_WAIT                   = 0x400000000000010\n\tCAP_SEND                       = 0x200000000000002\n\tCAP_SETSOCKOPT                 = 0x200002000000000\n\tCAP_SHUTDOWN                   = 0x200004000000000\n\tCAP_SOCK_CLIENT                = 0x200007780000003\n\tCAP_SOCK_SERVER                = 0x200007f60000003\n\tCAP_SYMLINKAT                  = 0x200000008000400\n\tCAP_TTYHOOK                    = 0x400000000000100\n\tCAP_UNLINKAT                   = 0x200000010000400\n\tCAP_UNUSED0_44                 = 0x200080000000000\n\tCAP_UNUSED0_57                 = 0x300000000000000\n\tCAP_UNUSED1_22                 = 0x400000000200000\n\tCAP_UNUSED1_57                 = 0x500000000000000\n\tCAP_WRITE                      = 0x200000000000002\n\tCFLUSH                         = 0xf\n\tCLOCAL                         = 0x8000\n\tCLOCK_MONOTONIC                = 0x4\n\tCLOCK_MONOTONIC_FAST           = 0xc\n\tCLOCK_MONOTONIC_PRECISE        = 0xb\n\tCLOCK_PROCESS_CPUTIME_ID       = 0xf\n\tCLOCK_PROF                     = 0x2\n\tCLOCK_REALTIME                 = 0x0\n\tCLOCK_REALTIME_FAST            = 0xa\n\tCLOCK_REALTIME_PRECISE         = 0x9\n\tCLOCK_SECOND                   = 0xd\n\tCLOCK_THREAD_CPUTIME_ID        = 0xe\n\tCLOCK_UPTIME                   = 0x5\n\tCLOCK_UPTIME_FAST              = 0x8\n\tCLOCK_UPTIME_PRECISE           = 0x7\n\tCLOCK_VIRTUAL                  = 0x1\n\tCREAD                          = 0x800\n\tCRTSCTS                        = 0x30000\n\tCS5                            = 0x0\n\tCS6                            = 0x100\n\tCS7                            = 0x200\n\tCS8                            = 0x300\n\tCSIZE                          = 0x300\n\tCSTART                         = 0x11\n\tCSTATUS                        = 0x14\n\tCSTOP                          = 0x13\n\tCSTOPB                         = 0x400\n\tCSUSP                          = 0x1a\n\tCTL_HW                         = 0x6\n\tCTL_KERN                       = 0x1\n\tCTL_MAXNAME                    = 0x18\n\tCTL_NET                        = 0x4\n\tDLT_A429                       = 0xb8\n\tDLT_A653_ICM                   = 0xb9\n\tDLT_AIRONET_HEADER             = 0x78\n\tDLT_AOS                        = 0xde\n\tDLT_APPLE_IP_OVER_IEEE1394     = 0x8a\n\tDLT_ARCNET                     = 0x7\n\tDLT_ARCNET_LINUX               = 0x81\n\tDLT_ATM_CLIP                   = 0x13\n\tDLT_ATM_RFC1483                = 0xb\n\tDLT_AURORA                     = 0x7e\n\tDLT_AX25                       = 0x3\n\tDLT_AX25_KISS                  = 0xca\n\tDLT_BACNET_MS_TP               = 0xa5\n\tDLT_BLUETOOTH_BREDR_BB         = 0xff\n\tDLT_BLUETOOTH_HCI_H4           = 0xbb\n\tDLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9\n\tDLT_BLUETOOTH_LE_LL            = 0xfb\n\tDLT_BLUETOOTH_LE_LL_WITH_PHDR  = 0x100\n\tDLT_BLUETOOTH_LINUX_MONITOR    = 0xfe\n\tDLT_CAN20B                     = 0xbe\n\tDLT_CAN_SOCKETCAN              = 0xe3\n\tDLT_CHAOS                      = 0x5\n\tDLT_CHDLC                      = 0x68\n\tDLT_CISCO_IOS                  = 0x76\n\tDLT_C_HDLC                     = 0x68\n\tDLT_C_HDLC_WITH_DIR            = 0xcd\n\tDLT_DBUS                       = 0xe7\n\tDLT_DECT                       = 0xdd\n\tDLT_DOCSIS                     = 0x8f\n\tDLT_DVB_CI                     = 0xeb\n\tDLT_ECONET                     = 0x73\n\tDLT_EN10MB                     = 0x1\n\tDLT_EN3MB                      = 0x2\n\tDLT_ENC                        = 0x6d\n\tDLT_EPON                       = 0x103\n\tDLT_ERF                        = 0xc5\n\tDLT_ERF_ETH                    = 0xaf\n\tDLT_ERF_POS                    = 0xb0\n\tDLT_FC_2                       = 0xe0\n\tDLT_FC_2_WITH_FRAME_DELIMS     = 0xe1\n\tDLT_FDDI                       = 0xa\n\tDLT_FLEXRAY                    = 0xd2\n\tDLT_FRELAY                     = 0x6b\n\tDLT_FRELAY_WITH_DIR            = 0xce\n\tDLT_GCOM_SERIAL                = 0xad\n\tDLT_GCOM_T1E1                  = 0xac\n\tDLT_GPF_F                      = 0xab\n\tDLT_GPF_T                      = 0xaa\n\tDLT_GPRS_LLC                   = 0xa9\n\tDLT_GSMTAP_ABIS                = 0xda\n\tDLT_GSMTAP_UM                  = 0xd9\n\tDLT_HHDLC                      = 0x79\n\tDLT_IBM_SN                     = 0x92\n\tDLT_IBM_SP                     = 0x91\n\tDLT_IEEE802                    = 0x6\n\tDLT_IEEE802_11                 = 0x69\n\tDLT_IEEE802_11_RADIO           = 0x7f\n\tDLT_IEEE802_11_RADIO_AVS       = 0xa3\n\tDLT_IEEE802_15_4               = 0xc3\n\tDLT_IEEE802_15_4_LINUX         = 0xbf\n\tDLT_IEEE802_15_4_NOFCS         = 0xe6\n\tDLT_IEEE802_15_4_NONASK_PHY    = 0xd7\n\tDLT_IEEE802_16_MAC_CPS         = 0xbc\n\tDLT_IEEE802_16_MAC_CPS_RADIO   = 0xc1\n\tDLT_INFINIBAND                 = 0xf7\n\tDLT_IPFILTER                   = 0x74\n\tDLT_IPMB                       = 0xc7\n\tDLT_IPMB_LINUX                 = 0xd1\n\tDLT_IPMI_HPM_2                 = 0x104\n\tDLT_IPNET                      = 0xe2\n\tDLT_IPOIB                      = 0xf2\n\tDLT_IPV4                       = 0xe4\n\tDLT_IPV6                       = 0xe5\n\tDLT_IP_OVER_FC                 = 0x7a\n\tDLT_JUNIPER_ATM1               = 0x89\n\tDLT_JUNIPER_ATM2               = 0x87\n\tDLT_JUNIPER_ATM_CEMIC          = 0xee\n\tDLT_JUNIPER_CHDLC              = 0xb5\n\tDLT_JUNIPER_ES                 = 0x84\n\tDLT_JUNIPER_ETHER              = 0xb2\n\tDLT_JUNIPER_FIBRECHANNEL       = 0xea\n\tDLT_JUNIPER_FRELAY             = 0xb4\n\tDLT_JUNIPER_GGSN               = 0x85\n\tDLT_JUNIPER_ISM                = 0xc2\n\tDLT_JUNIPER_MFR                = 0x86\n\tDLT_JUNIPER_MLFR               = 0x83\n\tDLT_JUNIPER_MLPPP              = 0x82\n\tDLT_JUNIPER_MONITOR            = 0xa4\n\tDLT_JUNIPER_PIC_PEER           = 0xae\n\tDLT_JUNIPER_PPP                = 0xb3\n\tDLT_JUNIPER_PPPOE              = 0xa7\n\tDLT_JUNIPER_PPPOE_ATM          = 0xa8\n\tDLT_JUNIPER_SERVICES           = 0x88\n\tDLT_JUNIPER_SRX_E2E            = 0xe9\n\tDLT_JUNIPER_ST                 = 0xc8\n\tDLT_JUNIPER_VP                 = 0xb7\n\tDLT_JUNIPER_VS                 = 0xe8\n\tDLT_LAPB_WITH_DIR              = 0xcf\n\tDLT_LAPD                       = 0xcb\n\tDLT_LIN                        = 0xd4\n\tDLT_LINUX_EVDEV                = 0xd8\n\tDLT_LINUX_IRDA                 = 0x90\n\tDLT_LINUX_LAPD                 = 0xb1\n\tDLT_LINUX_PPP_WITHDIRECTION    = 0xa6\n\tDLT_LINUX_SLL                  = 0x71\n\tDLT_LOOP                       = 0x6c\n\tDLT_LTALK                      = 0x72\n\tDLT_MATCHING_MAX               = 0x104\n\tDLT_MATCHING_MIN               = 0x68\n\tDLT_MFR                        = 0xb6\n\tDLT_MOST                       = 0xd3\n\tDLT_MPEG_2_TS                  = 0xf3\n\tDLT_MPLS                       = 0xdb\n\tDLT_MTP2                       = 0x8c\n\tDLT_MTP2_WITH_PHDR             = 0x8b\n\tDLT_MTP3                       = 0x8d\n\tDLT_MUX27010                   = 0xec\n\tDLT_NETANALYZER                = 0xf0\n\tDLT_NETANALYZER_TRANSPARENT    = 0xf1\n\tDLT_NETLINK                    = 0xfd\n\tDLT_NFC_LLCP                   = 0xf5\n\tDLT_NFLOG                      = 0xef\n\tDLT_NG40                       = 0xf4\n\tDLT_NULL                       = 0x0\n\tDLT_PCI_EXP                    = 0x7d\n\tDLT_PFLOG                      = 0x75\n\tDLT_PFSYNC                     = 0x79\n\tDLT_PKTAP                      = 0x102\n\tDLT_PPI                        = 0xc0\n\tDLT_PPP                        = 0x9\n\tDLT_PPP_BSDOS                  = 0x10\n\tDLT_PPP_ETHER                  = 0x33\n\tDLT_PPP_PPPD                   = 0xa6\n\tDLT_PPP_SERIAL                 = 0x32\n\tDLT_PPP_WITH_DIR               = 0xcc\n\tDLT_PPP_WITH_DIRECTION         = 0xa6\n\tDLT_PRISM_HEADER               = 0x77\n\tDLT_PROFIBUS_DL                = 0x101\n\tDLT_PRONET                     = 0x4\n\tDLT_RAIF1                      = 0xc6\n\tDLT_RAW                        = 0xc\n\tDLT_RIO                        = 0x7c\n\tDLT_RTAC_SERIAL                = 0xfa\n\tDLT_SCCP                       = 0x8e\n\tDLT_SCTP                       = 0xf8\n\tDLT_SITA                       = 0xc4\n\tDLT_SLIP                       = 0x8\n\tDLT_SLIP_BSDOS                 = 0xf\n\tDLT_STANAG_5066_D_PDU          = 0xed\n\tDLT_SUNATM                     = 0x7b\n\tDLT_SYMANTEC_FIREWALL          = 0x63\n\tDLT_TZSP                       = 0x80\n\tDLT_USB                        = 0xba\n\tDLT_USBPCAP                    = 0xf9\n\tDLT_USB_LINUX                  = 0xbd\n\tDLT_USB_LINUX_MMAPPED          = 0xdc\n\tDLT_USER0                      = 0x93\n\tDLT_USER1                      = 0x94\n\tDLT_USER10                     = 0x9d\n\tDLT_USER11                     = 0x9e\n\tDLT_USER12                     = 0x9f\n\tDLT_USER13                     = 0xa0\n\tDLT_USER14                     = 0xa1\n\tDLT_USER15                     = 0xa2\n\tDLT_USER2                      = 0x95\n\tDLT_USER3                      = 0x96\n\tDLT_USER4                      = 0x97\n\tDLT_USER5                      = 0x98\n\tDLT_USER6                      = 0x99\n\tDLT_USER7                      = 0x9a\n\tDLT_USER8                      = 0x9b\n\tDLT_USER9                      = 0x9c\n\tDLT_WIHART                     = 0xdf\n\tDLT_WIRESHARK_UPPER_PDU        = 0xfc\n\tDLT_X2E_SERIAL                 = 0xd5\n\tDLT_X2E_XORAYA                 = 0xd6\n\tDT_BLK                         = 0x6\n\tDT_CHR                         = 0x2\n\tDT_DIR                         = 0x4\n\tDT_FIFO                        = 0x1\n\tDT_LNK                         = 0xa\n\tDT_REG                         = 0x8\n\tDT_SOCK                        = 0xc\n\tDT_UNKNOWN                     = 0x0\n\tDT_WHT                         = 0xe\n\tECHO                           = 0x8\n\tECHOCTL                        = 0x40\n\tECHOE                          = 0x2\n\tECHOK                          = 0x4\n\tECHOKE                         = 0x1\n\tECHONL                         = 0x10\n\tECHOPRT                        = 0x20\n\tEVFILT_AIO                     = -0x3\n\tEVFILT_FS                      = -0x9\n\tEVFILT_LIO                     = -0xa\n\tEVFILT_PROC                    = -0x5\n\tEVFILT_PROCDESC                = -0x8\n\tEVFILT_READ                    = -0x1\n\tEVFILT_SENDFILE                = -0xc\n\tEVFILT_SIGNAL                  = -0x6\n\tEVFILT_SYSCOUNT                = 0xc\n\tEVFILT_TIMER                   = -0x7\n\tEVFILT_USER                    = -0xb\n\tEVFILT_VNODE                   = -0x4\n\tEVFILT_WRITE                   = -0x2\n\tEV_ADD                         = 0x1\n\tEV_CLEAR                       = 0x20\n\tEV_DELETE                      = 0x2\n\tEV_DISABLE                     = 0x8\n\tEV_DISPATCH                    = 0x80\n\tEV_DROP                        = 0x1000\n\tEV_ENABLE                      = 0x4\n\tEV_EOF                         = 0x8000\n\tEV_ERROR                       = 0x4000\n\tEV_FLAG1                       = 0x2000\n\tEV_FLAG2                       = 0x4000\n\tEV_FORCEONESHOT                = 0x100\n\tEV_ONESHOT                     = 0x10\n\tEV_RECEIPT                     = 0x40\n\tEV_SYSFLAGS                    = 0xf000\n\tEXTA                           = 0x4b00\n\tEXTATTR_NAMESPACE_EMPTY        = 0x0\n\tEXTATTR_NAMESPACE_SYSTEM       = 0x2\n\tEXTATTR_NAMESPACE_USER         = 0x1\n\tEXTB                           = 0x9600\n\tEXTPROC                        = 0x800\n\tFD_CLOEXEC                     = 0x1\n\tFD_SETSIZE                     = 0x400\n\tFLUSHO                         = 0x800000\n\tF_CANCEL                       = 0x5\n\tF_DUP2FD                       = 0xa\n\tF_DUP2FD_CLOEXEC               = 0x12\n\tF_DUPFD                        = 0x0\n\tF_DUPFD_CLOEXEC                = 0x11\n\tF_GETFD                        = 0x1\n\tF_GETFL                        = 0x3\n\tF_GETLK                        = 0xb\n\tF_GETOWN                       = 0x5\n\tF_OGETLK                       = 0x7\n\tF_OK                           = 0x0\n\tF_OSETLK                       = 0x8\n\tF_OSETLKW                      = 0x9\n\tF_RDAHEAD                      = 0x10\n\tF_RDLCK                        = 0x1\n\tF_READAHEAD                    = 0xf\n\tF_SETFD                        = 0x2\n\tF_SETFL                        = 0x4\n\tF_SETLK                        = 0xc\n\tF_SETLKW                       = 0xd\n\tF_SETLK_REMOTE                 = 0xe\n\tF_SETOWN                       = 0x6\n\tF_UNLCK                        = 0x2\n\tF_UNLCKSYS                     = 0x4\n\tF_WRLCK                        = 0x3\n\tHUPCL                          = 0x4000\n\tHW_MACHINE                     = 0x1\n\tICANON                         = 0x100\n\tICMP6_FILTER                   = 0x12\n\tICRNL                          = 0x100\n\tIEXTEN                         = 0x400\n\tIFAN_ARRIVAL                   = 0x0\n\tIFAN_DEPARTURE                 = 0x1\n\tIFF_ALLMULTI                   = 0x200\n\tIFF_ALTPHYS                    = 0x4000\n\tIFF_BROADCAST                  = 0x2\n\tIFF_CANTCHANGE                 = 0x218f52\n\tIFF_CANTCONFIG                 = 0x10000\n\tIFF_DEBUG                      = 0x4\n\tIFF_DRV_OACTIVE                = 0x400\n\tIFF_DRV_RUNNING                = 0x40\n\tIFF_DYING                      = 0x200000\n\tIFF_LINK0                      = 0x1000\n\tIFF_LINK1                      = 0x2000\n\tIFF_LINK2                      = 0x4000\n\tIFF_LOOPBACK                   = 0x8\n\tIFF_MONITOR                    = 0x40000\n\tIFF_MULTICAST                  = 0x8000\n\tIFF_NOARP                      = 0x80\n\tIFF_OACTIVE                    = 0x400\n\tIFF_POINTOPOINT                = 0x10\n\tIFF_PPROMISC                   = 0x20000\n\tIFF_PROMISC                    = 0x100\n\tIFF_RENAMING                   = 0x400000\n\tIFF_RUNNING                    = 0x40\n\tIFF_SIMPLEX                    = 0x800\n\tIFF_STATICARP                  = 0x80000\n\tIFF_UP                         = 0x1\n\tIFNAMSIZ                       = 0x10\n\tIFT_BRIDGE                     = 0xd1\n\tIFT_CARP                       = 0xf8\n\tIFT_IEEE1394                   = 0x90\n\tIFT_INFINIBAND                 = 0xc7\n\tIFT_L2VLAN                     = 0x87\n\tIFT_L3IPVLAN                   = 0x88\n\tIFT_PPP                        = 0x17\n\tIFT_PROPVIRTUAL                = 0x35\n\tIGNBRK                         = 0x1\n\tIGNCR                          = 0x80\n\tIGNPAR                         = 0x4\n\tIMAXBEL                        = 0x2000\n\tINLCR                          = 0x40\n\tINPCK                          = 0x10\n\tIN_CLASSA_HOST                 = 0xffffff\n\tIN_CLASSA_MAX                  = 0x80\n\tIN_CLASSA_NET                  = 0xff000000\n\tIN_CLASSA_NSHIFT               = 0x18\n\tIN_CLASSB_HOST                 = 0xffff\n\tIN_CLASSB_MAX                  = 0x10000\n\tIN_CLASSB_NET                  = 0xffff0000\n\tIN_CLASSB_NSHIFT               = 0x10\n\tIN_CLASSC_HOST                 = 0xff\n\tIN_CLASSC_NET                  = 0xffffff00\n\tIN_CLASSC_NSHIFT               = 0x8\n\tIN_CLASSD_HOST                 = 0xfffffff\n\tIN_CLASSD_NET                  = 0xf0000000\n\tIN_CLASSD_NSHIFT               = 0x1c\n\tIN_LOOPBACKNET                 = 0x7f\n\tIN_RFC3021_MASK                = 0xfffffffe\n\tIPPROTO_3PC                    = 0x22\n\tIPPROTO_ADFS                   = 0x44\n\tIPPROTO_AH                     = 0x33\n\tIPPROTO_AHIP                   = 0x3d\n\tIPPROTO_APES                   = 0x63\n\tIPPROTO_ARGUS                  = 0xd\n\tIPPROTO_AX25                   = 0x5d\n\tIPPROTO_BHA                    = 0x31\n\tIPPROTO_BLT                    = 0x1e\n\tIPPROTO_BRSATMON               = 0x4c\n\tIPPROTO_CARP                   = 0x70\n\tIPPROTO_CFTP                   = 0x3e\n\tIPPROTO_CHAOS                  = 0x10\n\tIPPROTO_CMTP                   = 0x26\n\tIPPROTO_CPHB                   = 0x49\n\tIPPROTO_CPNX                   = 0x48\n\tIPPROTO_DDP                    = 0x25\n\tIPPROTO_DGP                    = 0x56\n\tIPPROTO_DIVERT                 = 0x102\n\tIPPROTO_DONE                   = 0x101\n\tIPPROTO_DSTOPTS                = 0x3c\n\tIPPROTO_EGP                    = 0x8\n\tIPPROTO_EMCON                  = 0xe\n\tIPPROTO_ENCAP                  = 0x62\n\tIPPROTO_EON                    = 0x50\n\tIPPROTO_ESP                    = 0x32\n\tIPPROTO_ETHERIP                = 0x61\n\tIPPROTO_FRAGMENT               = 0x2c\n\tIPPROTO_GGP                    = 0x3\n\tIPPROTO_GMTP                   = 0x64\n\tIPPROTO_GRE                    = 0x2f\n\tIPPROTO_HELLO                  = 0x3f\n\tIPPROTO_HIP                    = 0x8b\n\tIPPROTO_HMP                    = 0x14\n\tIPPROTO_HOPOPTS                = 0x0\n\tIPPROTO_ICMP                   = 0x1\n\tIPPROTO_ICMPV6                 = 0x3a\n\tIPPROTO_IDP                    = 0x16\n\tIPPROTO_IDPR                   = 0x23\n\tIPPROTO_IDRP                   = 0x2d\n\tIPPROTO_IGMP                   = 0x2\n\tIPPROTO_IGP                    = 0x55\n\tIPPROTO_IGRP                   = 0x58\n\tIPPROTO_IL                     = 0x28\n\tIPPROTO_INLSP                  = 0x34\n\tIPPROTO_INP                    = 0x20\n\tIPPROTO_IP                     = 0x0\n\tIPPROTO_IPCOMP                 = 0x6c\n\tIPPROTO_IPCV                   = 0x47\n\tIPPROTO_IPEIP                  = 0x5e\n\tIPPROTO_IPIP                   = 0x4\n\tIPPROTO_IPPC                   = 0x43\n\tIPPROTO_IPV4                   = 0x4\n\tIPPROTO_IPV6                   = 0x29\n\tIPPROTO_IRTP                   = 0x1c\n\tIPPROTO_KRYPTOLAN              = 0x41\n\tIPPROTO_LARP                   = 0x5b\n\tIPPROTO_LEAF1                  = 0x19\n\tIPPROTO_LEAF2                  = 0x1a\n\tIPPROTO_MAX                    = 0x100\n\tIPPROTO_MEAS                   = 0x13\n\tIPPROTO_MH                     = 0x87\n\tIPPROTO_MHRP                   = 0x30\n\tIPPROTO_MICP                   = 0x5f\n\tIPPROTO_MOBILE                 = 0x37\n\tIPPROTO_MPLS                   = 0x89\n\tIPPROTO_MTP                    = 0x5c\n\tIPPROTO_MUX                    = 0x12\n\tIPPROTO_ND                     = 0x4d\n\tIPPROTO_NHRP                   = 0x36\n\tIPPROTO_NONE                   = 0x3b\n\tIPPROTO_NSP                    = 0x1f\n\tIPPROTO_NVPII                  = 0xb\n\tIPPROTO_OLD_DIVERT             = 0xfe\n\tIPPROTO_OSPFIGP                = 0x59\n\tIPPROTO_PFSYNC                 = 0xf0\n\tIPPROTO_PGM                    = 0x71\n\tIPPROTO_PIGP                   = 0x9\n\tIPPROTO_PIM                    = 0x67\n\tIPPROTO_PRM                    = 0x15\n\tIPPROTO_PUP                    = 0xc\n\tIPPROTO_PVP                    = 0x4b\n\tIPPROTO_RAW                    = 0xff\n\tIPPROTO_RCCMON                 = 0xa\n\tIPPROTO_RDP                    = 0x1b\n\tIPPROTO_RESERVED_253           = 0xfd\n\tIPPROTO_RESERVED_254           = 0xfe\n\tIPPROTO_ROUTING                = 0x2b\n\tIPPROTO_RSVP                   = 0x2e\n\tIPPROTO_RVD                    = 0x42\n\tIPPROTO_SATEXPAK               = 0x40\n\tIPPROTO_SATMON                 = 0x45\n\tIPPROTO_SCCSP                  = 0x60\n\tIPPROTO_SCTP                   = 0x84\n\tIPPROTO_SDRP                   = 0x2a\n\tIPPROTO_SEND                   = 0x103\n\tIPPROTO_SEP                    = 0x21\n\tIPPROTO_SHIM6                  = 0x8c\n\tIPPROTO_SKIP                   = 0x39\n\tIPPROTO_SPACER                 = 0x7fff\n\tIPPROTO_SRPC                   = 0x5a\n\tIPPROTO_ST                     = 0x7\n\tIPPROTO_SVMTP                  = 0x52\n\tIPPROTO_SWIPE                  = 0x35\n\tIPPROTO_TCF                    = 0x57\n\tIPPROTO_TCP                    = 0x6\n\tIPPROTO_TLSP                   = 0x38\n\tIPPROTO_TP                     = 0x1d\n\tIPPROTO_TPXX                   = 0x27\n\tIPPROTO_TRUNK1                 = 0x17\n\tIPPROTO_TRUNK2                 = 0x18\n\tIPPROTO_TTP                    = 0x54\n\tIPPROTO_UDP                    = 0x11\n\tIPPROTO_UDPLITE                = 0x88\n\tIPPROTO_VINES                  = 0x53\n\tIPPROTO_VISA                   = 0x46\n\tIPPROTO_VMTP                   = 0x51\n\tIPPROTO_WBEXPAK                = 0x4f\n\tIPPROTO_WBMON                  = 0x4e\n\tIPPROTO_WSN                    = 0x4a\n\tIPPROTO_XNET                   = 0xf\n\tIPPROTO_XTP                    = 0x24\n\tIPV6_AUTOFLOWLABEL             = 0x3b\n\tIPV6_BINDANY                   = 0x40\n\tIPV6_BINDMULTI                 = 0x41\n\tIPV6_BINDV6ONLY                = 0x1b\n\tIPV6_CHECKSUM                  = 0x1a\n\tIPV6_DEFAULT_MULTICAST_HOPS    = 0x1\n\tIPV6_DEFAULT_MULTICAST_LOOP    = 0x1\n\tIPV6_DEFHLIM                   = 0x40\n\tIPV6_DONTFRAG                  = 0x3e\n\tIPV6_DSTOPTS                   = 0x32\n\tIPV6_FLOWID                    = 0x43\n\tIPV6_FLOWINFO_MASK             = 0xffffff0f\n\tIPV6_FLOWLABEL_MASK            = 0xffff0f00\n\tIPV6_FLOWTYPE                  = 0x44\n\tIPV6_FRAGTTL                   = 0x78\n\tIPV6_FW_ADD                    = 0x1e\n\tIPV6_FW_DEL                    = 0x1f\n\tIPV6_FW_FLUSH                  = 0x20\n\tIPV6_FW_GET                    = 0x22\n\tIPV6_FW_ZERO                   = 0x21\n\tIPV6_HLIMDEC                   = 0x1\n\tIPV6_HOPLIMIT                  = 0x2f\n\tIPV6_HOPOPTS                   = 0x31\n\tIPV6_IPSEC_POLICY              = 0x1c\n\tIPV6_JOIN_GROUP                = 0xc\n\tIPV6_LEAVE_GROUP               = 0xd\n\tIPV6_MAXHLIM                   = 0xff\n\tIPV6_MAXOPTHDR                 = 0x800\n\tIPV6_MAXPACKET                 = 0xffff\n\tIPV6_MAX_GROUP_SRC_FILTER      = 0x200\n\tIPV6_MAX_MEMBERSHIPS           = 0xfff\n\tIPV6_MAX_SOCK_SRC_FILTER       = 0x80\n\tIPV6_MIN_MEMBERSHIPS           = 0x1f\n\tIPV6_MMTU                      = 0x500\n\tIPV6_MSFILTER                  = 0x4a\n\tIPV6_MULTICAST_HOPS            = 0xa\n\tIPV6_MULTICAST_IF              = 0x9\n\tIPV6_MULTICAST_LOOP            = 0xb\n\tIPV6_NEXTHOP                   = 0x30\n\tIPV6_PATHMTU                   = 0x2c\n\tIPV6_PKTINFO                   = 0x2e\n\tIPV6_PORTRANGE                 = 0xe\n\tIPV6_PORTRANGE_DEFAULT         = 0x0\n\tIPV6_PORTRANGE_HIGH            = 0x1\n\tIPV6_PORTRANGE_LOW             = 0x2\n\tIPV6_PREFER_TEMPADDR           = 0x3f\n\tIPV6_RECVDSTOPTS               = 0x28\n\tIPV6_RECVFLOWID                = 0x46\n\tIPV6_RECVHOPLIMIT              = 0x25\n\tIPV6_RECVHOPOPTS               = 0x27\n\tIPV6_RECVPATHMTU               = 0x2b\n\tIPV6_RECVPKTINFO               = 0x24\n\tIPV6_RECVRSSBUCKETID           = 0x47\n\tIPV6_RECVRTHDR                 = 0x26\n\tIPV6_RECVTCLASS                = 0x39\n\tIPV6_RSSBUCKETID               = 0x45\n\tIPV6_RSS_LISTEN_BUCKET         = 0x42\n\tIPV6_RTHDR                     = 0x33\n\tIPV6_RTHDRDSTOPTS              = 0x23\n\tIPV6_RTHDR_LOOSE               = 0x0\n\tIPV6_RTHDR_STRICT              = 0x1\n\tIPV6_RTHDR_TYPE_0              = 0x0\n\tIPV6_SOCKOPT_RESERVED1         = 0x3\n\tIPV6_TCLASS                    = 0x3d\n\tIPV6_UNICAST_HOPS              = 0x4\n\tIPV6_USE_MIN_MTU               = 0x2a\n\tIPV6_V6ONLY                    = 0x1b\n\tIPV6_VERSION                   = 0x60\n\tIPV6_VERSION_MASK              = 0xf0\n\tIP_ADD_MEMBERSHIP              = 0xc\n\tIP_ADD_SOURCE_MEMBERSHIP       = 0x46\n\tIP_BINDANY                     = 0x18\n\tIP_BINDMULTI                   = 0x19\n\tIP_BLOCK_SOURCE                = 0x48\n\tIP_DEFAULT_MULTICAST_LOOP      = 0x1\n\tIP_DEFAULT_MULTICAST_TTL       = 0x1\n\tIP_DF                          = 0x4000\n\tIP_DONTFRAG                    = 0x43\n\tIP_DROP_MEMBERSHIP             = 0xd\n\tIP_DROP_SOURCE_MEMBERSHIP      = 0x47\n\tIP_DUMMYNET3                   = 0x31\n\tIP_DUMMYNET_CONFIGURE          = 0x3c\n\tIP_DUMMYNET_DEL                = 0x3d\n\tIP_DUMMYNET_FLUSH              = 0x3e\n\tIP_DUMMYNET_GET                = 0x40\n\tIP_FLOWID                      = 0x5a\n\tIP_FLOWTYPE                    = 0x5b\n\tIP_FW3                         = 0x30\n\tIP_FW_ADD                      = 0x32\n\tIP_FW_DEL                      = 0x33\n\tIP_FW_FLUSH                    = 0x34\n\tIP_FW_GET                      = 0x36\n\tIP_FW_NAT_CFG                  = 0x38\n\tIP_FW_NAT_DEL                  = 0x39\n\tIP_FW_NAT_GET_CONFIG           = 0x3a\n\tIP_FW_NAT_GET_LOG              = 0x3b\n\tIP_FW_RESETLOG                 = 0x37\n\tIP_FW_TABLE_ADD                = 0x28\n\tIP_FW_TABLE_DEL                = 0x29\n\tIP_FW_TABLE_FLUSH              = 0x2a\n\tIP_FW_TABLE_GETSIZE            = 0x2b\n\tIP_FW_TABLE_LIST               = 0x2c\n\tIP_FW_ZERO                     = 0x35\n\tIP_HDRINCL                     = 0x2\n\tIP_IPSEC_POLICY                = 0x15\n\tIP_MAXPACKET                   = 0xffff\n\tIP_MAX_GROUP_SRC_FILTER        = 0x200\n\tIP_MAX_MEMBERSHIPS             = 0xfff\n\tIP_MAX_SOCK_MUTE_FILTER        = 0x80\n\tIP_MAX_SOCK_SRC_FILTER         = 0x80\n\tIP_MAX_SOURCE_FILTER           = 0x400\n\tIP_MF                          = 0x2000\n\tIP_MINTTL                      = 0x42\n\tIP_MIN_MEMBERSHIPS             = 0x1f\n\tIP_MSFILTER                    = 0x4a\n\tIP_MSS                         = 0x240\n\tIP_MULTICAST_IF                = 0x9\n\tIP_MULTICAST_LOOP              = 0xb\n\tIP_MULTICAST_TTL               = 0xa\n\tIP_MULTICAST_VIF               = 0xe\n\tIP_OFFMASK                     = 0x1fff\n\tIP_ONESBCAST                   = 0x17\n\tIP_OPTIONS                     = 0x1\n\tIP_PORTRANGE                   = 0x13\n\tIP_PORTRANGE_DEFAULT           = 0x0\n\tIP_PORTRANGE_HIGH              = 0x1\n\tIP_PORTRANGE_LOW               = 0x2\n\tIP_RECVDSTADDR                 = 0x7\n\tIP_RECVFLOWID                  = 0x5d\n\tIP_RECVIF                      = 0x14\n\tIP_RECVOPTS                    = 0x5\n\tIP_RECVRETOPTS                 = 0x6\n\tIP_RECVRSSBUCKETID             = 0x5e\n\tIP_RECVTOS                     = 0x44\n\tIP_RECVTTL                     = 0x41\n\tIP_RETOPTS                     = 0x8\n\tIP_RF                          = 0x8000\n\tIP_RSSBUCKETID                 = 0x5c\n\tIP_RSS_LISTEN_BUCKET           = 0x1a\n\tIP_RSVP_OFF                    = 0x10\n\tIP_RSVP_ON                     = 0xf\n\tIP_RSVP_VIF_OFF                = 0x12\n\tIP_RSVP_VIF_ON                 = 0x11\n\tIP_SENDSRCADDR                 = 0x7\n\tIP_TOS                         = 0x3\n\tIP_TTL                         = 0x4\n\tIP_UNBLOCK_SOURCE              = 0x49\n\tISIG                           = 0x80\n\tISTRIP                         = 0x20\n\tIXANY                          = 0x800\n\tIXOFF                          = 0x400\n\tIXON                           = 0x200\n\tKERN_HOSTNAME                  = 0xa\n\tKERN_OSRELEASE                 = 0x2\n\tKERN_OSTYPE                    = 0x1\n\tKERN_VERSION                   = 0x4\n\tLOCK_EX                        = 0x2\n\tLOCK_NB                        = 0x4\n\tLOCK_SH                        = 0x1\n\tLOCK_UN                        = 0x8\n\tMADV_AUTOSYNC                  = 0x7\n\tMADV_CORE                      = 0x9\n\tMADV_DONTNEED                  = 0x4\n\tMADV_FREE                      = 0x5\n\tMADV_NOCORE                    = 0x8\n\tMADV_NORMAL                    = 0x0\n\tMADV_NOSYNC                    = 0x6\n\tMADV_PROTECT                   = 0xa\n\tMADV_RANDOM                    = 0x1\n\tMADV_SEQUENTIAL                = 0x2\n\tMADV_WILLNEED                  = 0x3\n\tMAP_32BIT                      = 0x80000\n\tMAP_ALIGNED_SUPER              = 0x1000000\n\tMAP_ALIGNMENT_MASK             = -0x1000000\n\tMAP_ALIGNMENT_SHIFT            = 0x18\n\tMAP_ANON                       = 0x1000\n\tMAP_ANONYMOUS                  = 0x1000\n\tMAP_COPY                       = 0x2\n\tMAP_EXCL                       = 0x4000\n\tMAP_FILE                       = 0x0\n\tMAP_FIXED                      = 0x10\n\tMAP_HASSEMAPHORE               = 0x200\n\tMAP_NOCORE                     = 0x20000\n\tMAP_NOSYNC                     = 0x800\n\tMAP_PREFAULT_READ              = 0x40000\n\tMAP_PRIVATE                    = 0x2\n\tMAP_RESERVED0020               = 0x20\n\tMAP_RESERVED0040               = 0x40\n\tMAP_RESERVED0080               = 0x80\n\tMAP_RESERVED0100               = 0x100\n\tMAP_SHARED                     = 0x1\n\tMAP_STACK                      = 0x400\n\tMCL_CURRENT                    = 0x1\n\tMCL_FUTURE                     = 0x2\n\tMNT_ACLS                       = 0x8000000\n\tMNT_ASYNC                      = 0x40\n\tMNT_AUTOMOUNTED                = 0x200000000\n\tMNT_BYFSID                     = 0x8000000\n\tMNT_CMDFLAGS                   = 0xd0f0000\n\tMNT_DEFEXPORTED                = 0x200\n\tMNT_DELEXPORT                  = 0x20000\n\tMNT_EXKERB                     = 0x800\n\tMNT_EXPORTANON                 = 0x400\n\tMNT_EXPORTED                   = 0x100\n\tMNT_EXPUBLIC                   = 0x20000000\n\tMNT_EXRDONLY                   = 0x80\n\tMNT_FORCE                      = 0x80000\n\tMNT_GJOURNAL                   = 0x2000000\n\tMNT_IGNORE                     = 0x800000\n\tMNT_LAZY                       = 0x3\n\tMNT_LOCAL                      = 0x1000\n\tMNT_MULTILABEL                 = 0x4000000\n\tMNT_NFS4ACLS                   = 0x10\n\tMNT_NOATIME                    = 0x10000000\n\tMNT_NOCLUSTERR                 = 0x40000000\n\tMNT_NOCLUSTERW                 = 0x80000000\n\tMNT_NOEXEC                     = 0x4\n\tMNT_NONBUSY                    = 0x4000000\n\tMNT_NOSUID                     = 0x8\n\tMNT_NOSYMFOLLOW                = 0x400000\n\tMNT_NOWAIT                     = 0x2\n\tMNT_QUOTA                      = 0x2000\n\tMNT_RDONLY                     = 0x1\n\tMNT_RELOAD                     = 0x40000\n\tMNT_ROOTFS                     = 0x4000\n\tMNT_SNAPSHOT                   = 0x1000000\n\tMNT_SOFTDEP                    = 0x200000\n\tMNT_SUIDDIR                    = 0x100000\n\tMNT_SUJ                        = 0x100000000\n\tMNT_SUSPEND                    = 0x4\n\tMNT_SYNCHRONOUS                = 0x2\n\tMNT_UNION                      = 0x20\n\tMNT_UPDATE                     = 0x10000\n\tMNT_UPDATEMASK                 = 0x2d8d0807e\n\tMNT_USER                       = 0x8000\n\tMNT_VISFLAGMASK                = 0x3fef0ffff\n\tMNT_WAIT                       = 0x1\n\tMSG_CMSG_CLOEXEC               = 0x40000\n\tMSG_COMPAT                     = 0x8000\n\tMSG_CTRUNC                     = 0x20\n\tMSG_DONTROUTE                  = 0x4\n\tMSG_DONTWAIT                   = 0x80\n\tMSG_EOF                        = 0x100\n\tMSG_EOR                        = 0x8\n\tMSG_NBIO                       = 0x4000\n\tMSG_NOSIGNAL                   = 0x20000\n\tMSG_NOTIFICATION               = 0x2000\n\tMSG_OOB                        = 0x1\n\tMSG_PEEK                       = 0x2\n\tMSG_TRUNC                      = 0x10\n\tMSG_WAITALL                    = 0x40\n\tMSG_WAITFORONE                 = 0x80000\n\tMS_ASYNC                       = 0x1\n\tMS_INVALIDATE                  = 0x2\n\tMS_SYNC                        = 0x0\n\tNAME_MAX                       = 0xff\n\tNET_RT_DUMP                    = 0x1\n\tNET_RT_FLAGS                   = 0x2\n\tNET_RT_IFLIST                  = 0x3\n\tNET_RT_IFLISTL                 = 0x5\n\tNET_RT_IFMALIST                = 0x4\n\tNOFLSH                         = 0x80000000\n\tNOKERNINFO                     = 0x2000000\n\tNOTE_ATTRIB                    = 0x8\n\tNOTE_CHILD                     = 0x4\n\tNOTE_CLOSE                     = 0x100\n\tNOTE_CLOSE_WRITE               = 0x200\n\tNOTE_DELETE                    = 0x1\n\tNOTE_EXEC                      = 0x20000000\n\tNOTE_EXIT                      = 0x80000000\n\tNOTE_EXTEND                    = 0x4\n\tNOTE_FFAND                     = 0x40000000\n\tNOTE_FFCOPY                    = 0xc0000000\n\tNOTE_FFCTRLMASK                = 0xc0000000\n\tNOTE_FFLAGSMASK                = 0xffffff\n\tNOTE_FFNOP                     = 0x0\n\tNOTE_FFOR                      = 0x80000000\n\tNOTE_FILE_POLL                 = 0x2\n\tNOTE_FORK                      = 0x40000000\n\tNOTE_LINK                      = 0x10\n\tNOTE_LOWAT                     = 0x1\n\tNOTE_MSECONDS                  = 0x2\n\tNOTE_NSECONDS                  = 0x8\n\tNOTE_OPEN                      = 0x80\n\tNOTE_PCTRLMASK                 = 0xf0000000\n\tNOTE_PDATAMASK                 = 0xfffff\n\tNOTE_READ                      = 0x400\n\tNOTE_RENAME                    = 0x20\n\tNOTE_REVOKE                    = 0x40\n\tNOTE_SECONDS                   = 0x1\n\tNOTE_TRACK                     = 0x1\n\tNOTE_TRACKERR                  = 0x2\n\tNOTE_TRIGGER                   = 0x1000000\n\tNOTE_USECONDS                  = 0x4\n\tNOTE_WRITE                     = 0x2\n\tOCRNL                          = 0x10\n\tONLCR                          = 0x2\n\tONLRET                         = 0x40\n\tONOCR                          = 0x20\n\tONOEOT                         = 0x8\n\tOPOST                          = 0x1\n\tOXTABS                         = 0x4\n\tO_ACCMODE                      = 0x3\n\tO_APPEND                       = 0x8\n\tO_ASYNC                        = 0x40\n\tO_CLOEXEC                      = 0x100000\n\tO_CREAT                        = 0x200\n\tO_DIRECT                       = 0x10000\n\tO_DIRECTORY                    = 0x20000\n\tO_EXCL                         = 0x800\n\tO_EXEC                         = 0x40000\n\tO_EXLOCK                       = 0x20\n\tO_FSYNC                        = 0x80\n\tO_NDELAY                       = 0x4\n\tO_NOCTTY                       = 0x8000\n\tO_NOFOLLOW                     = 0x100\n\tO_NONBLOCK                     = 0x4\n\tO_RDONLY                       = 0x0\n\tO_RDWR                         = 0x2\n\tO_SHLOCK                       = 0x10\n\tO_SYNC                         = 0x80\n\tO_TRUNC                        = 0x400\n\tO_TTY_INIT                     = 0x80000\n\tO_VERIFY                       = 0x200000\n\tO_WRONLY                       = 0x1\n\tPARENB                         = 0x1000\n\tPARMRK                         = 0x8\n\tPARODD                         = 0x2000\n\tPENDIN                         = 0x20000000\n\tPRIO_PGRP                      = 0x1\n\tPRIO_PROCESS                   = 0x0\n\tPRIO_USER                      = 0x2\n\tPROT_EXEC                      = 0x4\n\tPROT_NONE                      = 0x0\n\tPROT_READ                      = 0x1\n\tPROT_WRITE                     = 0x2\n\tRLIMIT_AS                      = 0xa\n\tRLIMIT_CORE                    = 0x4\n\tRLIMIT_CPU                     = 0x0\n\tRLIMIT_DATA                    = 0x2\n\tRLIMIT_FSIZE                   = 0x1\n\tRLIMIT_MEMLOCK                 = 0x6\n\tRLIMIT_NOFILE                  = 0x8\n\tRLIMIT_NPROC                   = 0x7\n\tRLIMIT_RSS                     = 0x5\n\tRLIMIT_STACK                   = 0x3\n\tRLIM_INFINITY                  = 0x7fffffffffffffff\n\tRTAX_AUTHOR                    = 0x6\n\tRTAX_BRD                       = 0x7\n\tRTAX_DST                       = 0x0\n\tRTAX_GATEWAY                   = 0x1\n\tRTAX_GENMASK                   = 0x3\n\tRTAX_IFA                       = 0x5\n\tRTAX_IFP                       = 0x4\n\tRTAX_MAX                       = 0x8\n\tRTAX_NETMASK                   = 0x2\n\tRTA_AUTHOR                     = 0x40\n\tRTA_BRD                        = 0x80\n\tRTA_DST                        = 0x1\n\tRTA_GATEWAY                    = 0x2\n\tRTA_GENMASK                    = 0x8\n\tRTA_IFA                        = 0x20\n\tRTA_IFP                        = 0x10\n\tRTA_NETMASK                    = 0x4\n\tRTF_BLACKHOLE                  = 0x1000\n\tRTF_BROADCAST                  = 0x400000\n\tRTF_DONE                       = 0x40\n\tRTF_DYNAMIC                    = 0x10\n\tRTF_FIXEDMTU                   = 0x80000\n\tRTF_FMASK                      = 0x1004d808\n\tRTF_GATEWAY                    = 0x2\n\tRTF_GWFLAG_COMPAT              = 0x80000000\n\tRTF_HOST                       = 0x4\n\tRTF_LLDATA                     = 0x400\n\tRTF_LLINFO                     = 0x400\n\tRTF_LOCAL                      = 0x200000\n\tRTF_MODIFIED                   = 0x20\n\tRTF_MULTICAST                  = 0x800000\n\tRTF_PINNED                     = 0x100000\n\tRTF_PROTO1                     = 0x8000\n\tRTF_PROTO2                     = 0x4000\n\tRTF_PROTO3                     = 0x40000\n\tRTF_REJECT                     = 0x8\n\tRTF_RNH_LOCKED                 = 0x40000000\n\tRTF_STATIC                     = 0x800\n\tRTF_STICKY                     = 0x10000000\n\tRTF_UP                         = 0x1\n\tRTF_XRESOLVE                   = 0x200\n\tRTM_ADD                        = 0x1\n\tRTM_CHANGE                     = 0x3\n\tRTM_DELADDR                    = 0xd\n\tRTM_DELETE                     = 0x2\n\tRTM_DELMADDR                   = 0x10\n\tRTM_GET                        = 0x4\n\tRTM_IEEE80211                  = 0x12\n\tRTM_IFANNOUNCE                 = 0x11\n\tRTM_IFINFO                     = 0xe\n\tRTM_LOCK                       = 0x8\n\tRTM_LOSING                     = 0x5\n\tRTM_MISS                       = 0x7\n\tRTM_NEWADDR                    = 0xc\n\tRTM_NEWMADDR                   = 0xf\n\tRTM_REDIRECT                   = 0x6\n\tRTM_RESOLVE                    = 0xb\n\tRTM_RTTUNIT                    = 0xf4240\n\tRTM_VERSION                    = 0x5\n\tRTV_EXPIRE                     = 0x4\n\tRTV_HOPCOUNT                   = 0x2\n\tRTV_MTU                        = 0x1\n\tRTV_RPIPE                      = 0x8\n\tRTV_RTT                        = 0x40\n\tRTV_RTTVAR                     = 0x80\n\tRTV_SPIPE                      = 0x10\n\tRTV_SSTHRESH                   = 0x20\n\tRTV_WEIGHT                     = 0x100\n\tRT_ALL_FIBS                    = -0x1\n\tRT_BLACKHOLE                   = 0x40\n\tRT_CACHING_CONTEXT             = 0x1\n\tRT_DEFAULT_FIB                 = 0x0\n\tRT_HAS_GW                      = 0x80\n\tRT_HAS_HEADER                  = 0x10\n\tRT_HAS_HEADER_BIT              = 0x4\n\tRT_L2_ME                       = 0x4\n\tRT_L2_ME_BIT                   = 0x2\n\tRT_LLE_CACHE                   = 0x100\n\tRT_MAY_LOOP                    = 0x8\n\tRT_MAY_LOOP_BIT                = 0x3\n\tRT_NORTREF                     = 0x2\n\tRT_REJECT                      = 0x20\n\tRUSAGE_CHILDREN                = -0x1\n\tRUSAGE_SELF                    = 0x0\n\tRUSAGE_THREAD                  = 0x1\n\tSCM_BINTIME                    = 0x4\n\tSCM_CREDS                      = 0x3\n\tSCM_RIGHTS                     = 0x1\n\tSCM_TIMESTAMP                  = 0x2\n\tSHUT_RD                        = 0x0\n\tSHUT_RDWR                      = 0x2\n\tSHUT_WR                        = 0x1\n\tSIOCADDMULTI                   = 0x80206931\n\tSIOCAIFADDR                    = 0x8040691a\n\tSIOCAIFGROUP                   = 0x80286987\n\tSIOCATMARK                     = 0x40047307\n\tSIOCDELMULTI                   = 0x80206932\n\tSIOCDIFADDR                    = 0x80206919\n\tSIOCDIFGROUP                   = 0x80286989\n\tSIOCDIFPHYADDR                 = 0x80206949\n\tSIOCGDRVSPEC                   = 0xc028697b\n\tSIOCGETSGCNT                   = 0xc0207210\n\tSIOCGETVIFCNT                  = 0xc028720f\n\tSIOCGHIWAT                     = 0x40047301\n\tSIOCGI2C                       = 0xc020693d\n\tSIOCGIFADDR                    = 0xc0206921\n\tSIOCGIFBRDADDR                 = 0xc0206923\n\tSIOCGIFCAP                     = 0xc020691f\n\tSIOCGIFCONF                    = 0xc0106924\n\tSIOCGIFDESCR                   = 0xc020692a\n\tSIOCGIFDSTADDR                 = 0xc0206922\n\tSIOCGIFFIB                     = 0xc020695c\n\tSIOCGIFFLAGS                   = 0xc0206911\n\tSIOCGIFGENERIC                 = 0xc020693a\n\tSIOCGIFGMEMB                   = 0xc028698a\n\tSIOCGIFGROUP                   = 0xc0286988\n\tSIOCGIFINDEX                   = 0xc0206920\n\tSIOCGIFMAC                     = 0xc0206926\n\tSIOCGIFMEDIA                   = 0xc0306938\n\tSIOCGIFMETRIC                  = 0xc0206917\n\tSIOCGIFMTU                     = 0xc0206933\n\tSIOCGIFNETMASK                 = 0xc0206925\n\tSIOCGIFPDSTADDR                = 0xc0206948\n\tSIOCGIFPHYS                    = 0xc0206935\n\tSIOCGIFPSRCADDR                = 0xc0206947\n\tSIOCGIFSTATUS                  = 0xc331693b\n\tSIOCGIFXMEDIA                  = 0xc030698b\n\tSIOCGLOWAT                     = 0x40047303\n\tSIOCGPGRP                      = 0x40047309\n\tSIOCGPRIVATE_0                 = 0xc0206950\n\tSIOCGPRIVATE_1                 = 0xc0206951\n\tSIOCGTUNFIB                    = 0xc020695e\n\tSIOCIFCREATE                   = 0xc020697a\n\tSIOCIFCREATE2                  = 0xc020697c\n\tSIOCIFDESTROY                  = 0x80206979\n\tSIOCIFGCLONERS                 = 0xc0106978\n\tSIOCSDRVSPEC                   = 0x8028697b\n\tSIOCSHIWAT                     = 0x80047300\n\tSIOCSIFADDR                    = 0x8020690c\n\tSIOCSIFBRDADDR                 = 0x80206913\n\tSIOCSIFCAP                     = 0x8020691e\n\tSIOCSIFDESCR                   = 0x80206929\n\tSIOCSIFDSTADDR                 = 0x8020690e\n\tSIOCSIFFIB                     = 0x8020695d\n\tSIOCSIFFLAGS                   = 0x80206910\n\tSIOCSIFGENERIC                 = 0x80206939\n\tSIOCSIFLLADDR                  = 0x8020693c\n\tSIOCSIFMAC                     = 0x80206927\n\tSIOCSIFMEDIA                   = 0xc0206937\n\tSIOCSIFMETRIC                  = 0x80206918\n\tSIOCSIFMTU                     = 0x80206934\n\tSIOCSIFNAME                    = 0x80206928\n\tSIOCSIFNETMASK                 = 0x80206916\n\tSIOCSIFPHYADDR                 = 0x80406946\n\tSIOCSIFPHYS                    = 0x80206936\n\tSIOCSIFRVNET                   = 0xc020695b\n\tSIOCSIFVNET                    = 0xc020695a\n\tSIOCSLOWAT                     = 0x80047302\n\tSIOCSPGRP                      = 0x80047308\n\tSIOCSTUNFIB                    = 0x8020695f\n\tSOCK_CLOEXEC                   = 0x10000000\n\tSOCK_DGRAM                     = 0x2\n\tSOCK_MAXADDRLEN                = 0xff\n\tSOCK_NONBLOCK                  = 0x20000000\n\tSOCK_RAW                       = 0x3\n\tSOCK_RDM                       = 0x4\n\tSOCK_SEQPACKET                 = 0x5\n\tSOCK_STREAM                    = 0x1\n\tSOL_SOCKET                     = 0xffff\n\tSOMAXCONN                      = 0x80\n\tSO_ACCEPTCONN                  = 0x2\n\tSO_ACCEPTFILTER                = 0x1000\n\tSO_BINTIME                     = 0x2000\n\tSO_BROADCAST                   = 0x20\n\tSO_DEBUG                       = 0x1\n\tSO_DONTROUTE                   = 0x10\n\tSO_ERROR                       = 0x1007\n\tSO_KEEPALIVE                   = 0x8\n\tSO_LABEL                       = 0x1009\n\tSO_LINGER                      = 0x80\n\tSO_LISTENINCQLEN               = 0x1013\n\tSO_LISTENQLEN                  = 0x1012\n\tSO_LISTENQLIMIT                = 0x1011\n\tSO_NOSIGPIPE                   = 0x800\n\tSO_NO_DDP                      = 0x8000\n\tSO_NO_OFFLOAD                  = 0x4000\n\tSO_OOBINLINE                   = 0x100\n\tSO_PEERLABEL                   = 0x1010\n\tSO_PROTOCOL                    = 0x1016\n\tSO_PROTOTYPE                   = 0x1016\n\tSO_RCVBUF                      = 0x1002\n\tSO_RCVLOWAT                    = 0x1004\n\tSO_RCVTIMEO                    = 0x1006\n\tSO_REUSEADDR                   = 0x4\n\tSO_REUSEPORT                   = 0x200\n\tSO_SETFIB                      = 0x1014\n\tSO_SNDBUF                      = 0x1001\n\tSO_SNDLOWAT                    = 0x1003\n\tSO_SNDTIMEO                    = 0x1005\n\tSO_TIMESTAMP                   = 0x400\n\tSO_TYPE                        = 0x1008\n\tSO_USELOOPBACK                 = 0x40\n\tSO_USER_COOKIE                 = 0x1015\n\tSO_VENDOR                      = 0x80000000\n\tS_BLKSIZE                      = 0x200\n\tS_IEXEC                        = 0x40\n\tS_IFBLK                        = 0x6000\n\tS_IFCHR                        = 0x2000\n\tS_IFDIR                        = 0x4000\n\tS_IFIFO                        = 0x1000\n\tS_IFLNK                        = 0xa000\n\tS_IFMT                         = 0xf000\n\tS_IFREG                        = 0x8000\n\tS_IFSOCK                       = 0xc000\n\tS_IFWHT                        = 0xe000\n\tS_IREAD                        = 0x100\n\tS_IRGRP                        = 0x20\n\tS_IROTH                        = 0x4\n\tS_IRUSR                        = 0x100\n\tS_IRWXG                        = 0x38\n\tS_IRWXO                        = 0x7\n\tS_IRWXU                        = 0x1c0\n\tS_ISGID                        = 0x400\n\tS_ISTXT                        = 0x200\n\tS_ISUID                        = 0x800\n\tS_ISVTX                        = 0x200\n\tS_IWGRP                        = 0x10\n\tS_IWOTH                        = 0x2\n\tS_IWRITE                       = 0x80\n\tS_IWUSR                        = 0x80\n\tS_IXGRP                        = 0x8\n\tS_IXOTH                        = 0x1\n\tS_IXUSR                        = 0x40\n\tTAB0                           = 0x0\n\tTAB3                           = 0x4\n\tTABDLY                         = 0x4\n\tTCIFLUSH                       = 0x1\n\tTCIOFF                         = 0x3\n\tTCIOFLUSH                      = 0x3\n\tTCION                          = 0x4\n\tTCOFLUSH                       = 0x2\n\tTCOOFF                         = 0x1\n\tTCOON                          = 0x2\n\tTCP_CA_NAME_MAX                = 0x10\n\tTCP_CCALGOOPT                  = 0x41\n\tTCP_CONGESTION                 = 0x40\n\tTCP_FASTOPEN                   = 0x401\n\tTCP_FUNCTION_BLK               = 0x2000\n\tTCP_FUNCTION_NAME_LEN_MAX      = 0x20\n\tTCP_INFO                       = 0x20\n\tTCP_KEEPCNT                    = 0x400\n\tTCP_KEEPIDLE                   = 0x100\n\tTCP_KEEPINIT                   = 0x80\n\tTCP_KEEPINTVL                  = 0x200\n\tTCP_MAXBURST                   = 0x4\n\tTCP_MAXHLEN                    = 0x3c\n\tTCP_MAXOLEN                    = 0x28\n\tTCP_MAXSEG                     = 0x2\n\tTCP_MAXWIN                     = 0xffff\n\tTCP_MAX_SACK                   = 0x4\n\tTCP_MAX_WINSHIFT               = 0xe\n\tTCP_MD5SIG                     = 0x10\n\tTCP_MINMSS                     = 0xd8\n\tTCP_MSS                        = 0x218\n\tTCP_NODELAY                    = 0x1\n\tTCP_NOOPT                      = 0x8\n\tTCP_NOPUSH                     = 0x4\n\tTCP_PCAP_IN                    = 0x1000\n\tTCP_PCAP_OUT                   = 0x800\n\tTCP_VENDOR                     = 0x80000000\n\tTCSAFLUSH                      = 0x2\n\tTIOCCBRK                       = 0x2000747a\n\tTIOCCDTR                       = 0x20007478\n\tTIOCCONS                       = 0x80047462\n\tTIOCDRAIN                      = 0x2000745e\n\tTIOCEXCL                       = 0x2000740d\n\tTIOCEXT                        = 0x80047460\n\tTIOCFLUSH                      = 0x80047410\n\tTIOCGDRAINWAIT                 = 0x40047456\n\tTIOCGETA                       = 0x402c7413\n\tTIOCGETD                       = 0x4004741a\n\tTIOCGPGRP                      = 0x40047477\n\tTIOCGPTN                       = 0x4004740f\n\tTIOCGSID                       = 0x40047463\n\tTIOCGWINSZ                     = 0x40087468\n\tTIOCMBIC                       = 0x8004746b\n\tTIOCMBIS                       = 0x8004746c\n\tTIOCMGDTRWAIT                  = 0x4004745a\n\tTIOCMGET                       = 0x4004746a\n\tTIOCMSDTRWAIT                  = 0x8004745b\n\tTIOCMSET                       = 0x8004746d\n\tTIOCM_CAR                      = 0x40\n\tTIOCM_CD                       = 0x40\n\tTIOCM_CTS                      = 0x20\n\tTIOCM_DCD                      = 0x40\n\tTIOCM_DSR                      = 0x100\n\tTIOCM_DTR                      = 0x2\n\tTIOCM_LE                       = 0x1\n\tTIOCM_RI                       = 0x80\n\tTIOCM_RNG                      = 0x80\n\tTIOCM_RTS                      = 0x4\n\tTIOCM_SR                       = 0x10\n\tTIOCM_ST                       = 0x8\n\tTIOCNOTTY                      = 0x20007471\n\tTIOCNXCL                       = 0x2000740e\n\tTIOCOUTQ                       = 0x40047473\n\tTIOCPKT                        = 0x80047470\n\tTIOCPKT_DATA                   = 0x0\n\tTIOCPKT_DOSTOP                 = 0x20\n\tTIOCPKT_FLUSHREAD              = 0x1\n\tTIOCPKT_FLUSHWRITE             = 0x2\n\tTIOCPKT_IOCTL                  = 0x40\n\tTIOCPKT_NOSTOP                 = 0x10\n\tTIOCPKT_START                  = 0x8\n\tTIOCPKT_STOP                   = 0x4\n\tTIOCPTMASTER                   = 0x2000741c\n\tTIOCSBRK                       = 0x2000747b\n\tTIOCSCTTY                      = 0x20007461\n\tTIOCSDRAINWAIT                 = 0x80047457\n\tTIOCSDTR                       = 0x20007479\n\tTIOCSETA                       = 0x802c7414\n\tTIOCSETAF                      = 0x802c7416\n\tTIOCSETAW                      = 0x802c7415\n\tTIOCSETD                       = 0x8004741b\n\tTIOCSIG                        = 0x2004745f\n\tTIOCSPGRP                      = 0x80047476\n\tTIOCSTART                      = 0x2000746e\n\tTIOCSTAT                       = 0x20007465\n\tTIOCSTI                        = 0x80017472\n\tTIOCSTOP                       = 0x2000746f\n\tTIOCSWINSZ                     = 0x80087467\n\tTIOCTIMESTAMP                  = 0x40107459\n\tTIOCUCNTL                      = 0x80047466\n\tTOSTOP                         = 0x400000\n\tVDISCARD                       = 0xf\n\tVDSUSP                         = 0xb\n\tVEOF                           = 0x0\n\tVEOL                           = 0x1\n\tVEOL2                          = 0x2\n\tVERASE                         = 0x3\n\tVERASE2                        = 0x7\n\tVINTR                          = 0x8\n\tVKILL                          = 0x5\n\tVLNEXT                         = 0xe\n\tVMIN                           = 0x10\n\tVQUIT                          = 0x9\n\tVREPRINT                       = 0x6\n\tVSTART                         = 0xc\n\tVSTATUS                        = 0x12\n\tVSTOP                          = 0xd\n\tVSUSP                          = 0xa\n\tVTIME                          = 0x11\n\tVWERASE                        = 0x4\n\tWCONTINUED                     = 0x4\n\tWCOREFLAG                      = 0x80\n\tWEXITED                        = 0x10\n\tWLINUXCLONE                    = 0x80000000\n\tWNOHANG                        = 0x1\n\tWNOWAIT                        = 0x8\n\tWSTOPPED                       = 0x2\n\tWTRAPPED                       = 0x20\n\tWUNTRACED                      = 0x2\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x30)\n\tEADDRNOTAVAIL   = syscall.Errno(0x31)\n\tEAFNOSUPPORT    = syscall.Errno(0x2f)\n\tEAGAIN          = syscall.Errno(0x23)\n\tEALREADY        = syscall.Errno(0x25)\n\tEAUTH           = syscall.Errno(0x50)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADMSG         = syscall.Errno(0x59)\n\tEBADRPC         = syscall.Errno(0x48)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x55)\n\tECAPMODE        = syscall.Errno(0x5e)\n\tECHILD          = syscall.Errno(0xa)\n\tECONNABORTED    = syscall.Errno(0x35)\n\tECONNREFUSED    = syscall.Errno(0x3d)\n\tECONNRESET      = syscall.Errno(0x36)\n\tEDEADLK         = syscall.Errno(0xb)\n\tEDESTADDRREQ    = syscall.Errno(0x27)\n\tEDOM            = syscall.Errno(0x21)\n\tEDOOFUS         = syscall.Errno(0x58)\n\tEDQUOT          = syscall.Errno(0x45)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFTYPE          = syscall.Errno(0x4f)\n\tEHOSTDOWN       = syscall.Errno(0x40)\n\tEHOSTUNREACH    = syscall.Errno(0x41)\n\tEIDRM           = syscall.Errno(0x52)\n\tEILSEQ          = syscall.Errno(0x56)\n\tEINPROGRESS     = syscall.Errno(0x24)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEISCONN         = syscall.Errno(0x38)\n\tEISDIR          = syscall.Errno(0x15)\n\tELAST           = syscall.Errno(0x60)\n\tELOOP           = syscall.Errno(0x3e)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x28)\n\tEMULTIHOP       = syscall.Errno(0x5a)\n\tENAMETOOLONG    = syscall.Errno(0x3f)\n\tENEEDAUTH       = syscall.Errno(0x51)\n\tENETDOWN        = syscall.Errno(0x32)\n\tENETRESET       = syscall.Errno(0x34)\n\tENETUNREACH     = syscall.Errno(0x33)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x57)\n\tENOBUFS         = syscall.Errno(0x37)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x4d)\n\tENOLINK         = syscall.Errno(0x5b)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x53)\n\tENOPROTOOPT     = syscall.Errno(0x2a)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSYS          = syscall.Errno(0x4e)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCAPABLE     = syscall.Errno(0x5d)\n\tENOTCONN        = syscall.Errno(0x39)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x42)\n\tENOTRECOVERABLE = syscall.Errno(0x5f)\n\tENOTSOCK        = syscall.Errno(0x26)\n\tENOTSUP         = syscall.Errno(0x2d)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x2d)\n\tEOVERFLOW       = syscall.Errno(0x54)\n\tEOWNERDEAD      = syscall.Errno(0x60)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x2e)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x43)\n\tEPROCUNAVAIL    = syscall.Errno(0x4c)\n\tEPROGMISMATCH   = syscall.Errno(0x4b)\n\tEPROGUNAVAIL    = syscall.Errno(0x4a)\n\tEPROTO          = syscall.Errno(0x5c)\n\tEPROTONOSUPPORT = syscall.Errno(0x2b)\n\tEPROTOTYPE      = syscall.Errno(0x29)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x47)\n\tEROFS           = syscall.Errno(0x1e)\n\tERPCMISMATCH    = syscall.Errno(0x49)\n\tESHUTDOWN       = syscall.Errno(0x3a)\n\tESOCKTNOSUPPORT = syscall.Errno(0x2c)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x46)\n\tETIMEDOUT       = syscall.Errno(0x3c)\n\tETOOMANYREFS    = syscall.Errno(0x3b)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUSERS          = syscall.Errno(0x44)\n\tEWOULDBLOCK     = syscall.Errno(0x23)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x14)\n\tSIGCONT   = syscall.Signal(0x13)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINFO   = syscall.Signal(0x1d)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x17)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGLIBRT  = syscall.Signal(0x21)\n\tSIGLWP    = syscall.Signal(0x20)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTOP   = syscall.Signal(0x11)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTHR    = syscall.Signal(0x20)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x12)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x10)\n\tSIGUSR1   = syscall.Signal(0x1e)\n\tSIGUSR2   = syscall.Signal(0x1f)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"device not configured\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"operation not supported by device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large\"},\n\t{35, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{36, \"EINPROGRESS\", \"operation now in progress\"},\n\t{37, \"EALREADY\", \"operation already in progress\"},\n\t{38, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{39, \"EDESTADDRREQ\", \"destination address required\"},\n\t{40, \"EMSGSIZE\", \"message too long\"},\n\t{41, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{42, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{43, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{44, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{45, \"EOPNOTSUPP\", \"operation not supported\"},\n\t{46, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{47, \"EAFNOSUPPORT\", \"address family not supported by protocol family\"},\n\t{48, \"EADDRINUSE\", \"address already in use\"},\n\t{49, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{50, \"ENETDOWN\", \"network is down\"},\n\t{51, \"ENETUNREACH\", \"network is unreachable\"},\n\t{52, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{53, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{54, \"ECONNRESET\", \"connection reset by peer\"},\n\t{55, \"ENOBUFS\", \"no buffer space available\"},\n\t{56, \"EISCONN\", \"socket is already connected\"},\n\t{57, \"ENOTCONN\", \"socket is not connected\"},\n\t{58, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{59, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{60, \"ETIMEDOUT\", \"operation timed out\"},\n\t{61, \"ECONNREFUSED\", \"connection refused\"},\n\t{62, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{63, \"ENAMETOOLONG\", \"file name too long\"},\n\t{64, \"EHOSTDOWN\", \"host is down\"},\n\t{65, \"EHOSTUNREACH\", \"no route to host\"},\n\t{66, \"ENOTEMPTY\", \"directory not empty\"},\n\t{67, \"EPROCLIM\", \"too many processes\"},\n\t{68, \"EUSERS\", \"too many users\"},\n\t{69, \"EDQUOT\", \"disc quota exceeded\"},\n\t{70, \"ESTALE\", \"stale NFS file handle\"},\n\t{71, \"EREMOTE\", \"too many levels of remote in path\"},\n\t{72, \"EBADRPC\", \"RPC struct is bad\"},\n\t{73, \"ERPCMISMATCH\", \"RPC version wrong\"},\n\t{74, \"EPROGUNAVAIL\", \"RPC prog. not avail\"},\n\t{75, \"EPROGMISMATCH\", \"program version wrong\"},\n\t{76, \"EPROCUNAVAIL\", \"bad procedure for program\"},\n\t{77, \"ENOLCK\", \"no locks available\"},\n\t{78, \"ENOSYS\", \"function not implemented\"},\n\t{79, \"EFTYPE\", \"inappropriate file type or format\"},\n\t{80, \"EAUTH\", \"authentication error\"},\n\t{81, \"ENEEDAUTH\", \"need authenticator\"},\n\t{82, \"EIDRM\", \"identifier removed\"},\n\t{83, \"ENOMSG\", \"no message of desired type\"},\n\t{84, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n\t{85, \"ECANCELED\", \"operation canceled\"},\n\t{86, \"EILSEQ\", \"illegal byte sequence\"},\n\t{87, \"ENOATTR\", \"attribute not found\"},\n\t{88, \"EDOOFUS\", \"programming error\"},\n\t{89, \"EBADMSG\", \"bad message\"},\n\t{90, \"EMULTIHOP\", \"multihop attempted\"},\n\t{91, \"ENOLINK\", \"link has been severed\"},\n\t{92, \"EPROTO\", \"protocol error\"},\n\t{93, \"ENOTCAPABLE\", \"capabilities insufficient\"},\n\t{94, \"ECAPMODE\", \"not permitted in capability mode\"},\n\t{95, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{96, \"EOWNERDEAD\", \"previous owner died\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGIOT\", \"abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"suspended (signal)\"},\n\t{18, \"SIGTSTP\", \"suspended\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGINFO\", \"information request\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n\t{32, \"SIGTHR\", \"unknown signal\"},\n\t{33, \"SIGLIBRT\", \"unknown signal\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_linux_386.go",
    "content": "// mkerrors.sh -Wall -Werror -static -I/tmp/include -m32\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build 386,linux\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m32 _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAAFS_MAGIC                           = 0x5a3c69f0\n\tADFS_SUPER_MAGIC                     = 0xadf5\n\tAFFS_SUPER_MAGIC                     = 0xadff\n\tAFS_FS_MAGIC                         = 0x6b414653\n\tAFS_SUPER_MAGIC                      = 0x5346414f\n\tAF_ALG                               = 0x26\n\tAF_APPLETALK                         = 0x5\n\tAF_ASH                               = 0x12\n\tAF_ATMPVC                            = 0x8\n\tAF_ATMSVC                            = 0x14\n\tAF_AX25                              = 0x3\n\tAF_BLUETOOTH                         = 0x1f\n\tAF_BRIDGE                            = 0x7\n\tAF_CAIF                              = 0x25\n\tAF_CAN                               = 0x1d\n\tAF_DECnet                            = 0xc\n\tAF_ECONET                            = 0x13\n\tAF_FILE                              = 0x1\n\tAF_IB                                = 0x1b\n\tAF_IEEE802154                        = 0x24\n\tAF_INET                              = 0x2\n\tAF_INET6                             = 0xa\n\tAF_IPX                               = 0x4\n\tAF_IRDA                              = 0x17\n\tAF_ISDN                              = 0x22\n\tAF_IUCV                              = 0x20\n\tAF_KCM                               = 0x29\n\tAF_KEY                               = 0xf\n\tAF_LLC                               = 0x1a\n\tAF_LOCAL                             = 0x1\n\tAF_MAX                               = 0x2d\n\tAF_MPLS                              = 0x1c\n\tAF_NETBEUI                           = 0xd\n\tAF_NETLINK                           = 0x10\n\tAF_NETROM                            = 0x6\n\tAF_NFC                               = 0x27\n\tAF_PACKET                            = 0x11\n\tAF_PHONET                            = 0x23\n\tAF_PPPOX                             = 0x18\n\tAF_QIPCRTR                           = 0x2a\n\tAF_RDS                               = 0x15\n\tAF_ROSE                              = 0xb\n\tAF_ROUTE                             = 0x10\n\tAF_RXRPC                             = 0x21\n\tAF_SECURITY                          = 0xe\n\tAF_SMC                               = 0x2b\n\tAF_SNA                               = 0x16\n\tAF_TIPC                              = 0x1e\n\tAF_UNIX                              = 0x1\n\tAF_UNSPEC                            = 0x0\n\tAF_VSOCK                             = 0x28\n\tAF_WANPIPE                           = 0x19\n\tAF_X25                               = 0x9\n\tAF_XDP                               = 0x2c\n\tALG_OP_DECRYPT                       = 0x0\n\tALG_OP_ENCRYPT                       = 0x1\n\tALG_SET_AEAD_ASSOCLEN                = 0x4\n\tALG_SET_AEAD_AUTHSIZE                = 0x5\n\tALG_SET_IV                           = 0x2\n\tALG_SET_KEY                          = 0x1\n\tALG_SET_OP                           = 0x3\n\tANON_INODE_FS_MAGIC                  = 0x9041934\n\tARPHRD_6LOWPAN                       = 0x339\n\tARPHRD_ADAPT                         = 0x108\n\tARPHRD_APPLETLK                      = 0x8\n\tARPHRD_ARCNET                        = 0x7\n\tARPHRD_ASH                           = 0x30d\n\tARPHRD_ATM                           = 0x13\n\tARPHRD_AX25                          = 0x3\n\tARPHRD_BIF                           = 0x307\n\tARPHRD_CAIF                          = 0x336\n\tARPHRD_CAN                           = 0x118\n\tARPHRD_CHAOS                         = 0x5\n\tARPHRD_CISCO                         = 0x201\n\tARPHRD_CSLIP                         = 0x101\n\tARPHRD_CSLIP6                        = 0x103\n\tARPHRD_DDCMP                         = 0x205\n\tARPHRD_DLCI                          = 0xf\n\tARPHRD_ECONET                        = 0x30e\n\tARPHRD_EETHER                        = 0x2\n\tARPHRD_ETHER                         = 0x1\n\tARPHRD_EUI64                         = 0x1b\n\tARPHRD_FCAL                          = 0x311\n\tARPHRD_FCFABRIC                      = 0x313\n\tARPHRD_FCPL                          = 0x312\n\tARPHRD_FCPP                          = 0x310\n\tARPHRD_FDDI                          = 0x306\n\tARPHRD_FRAD                          = 0x302\n\tARPHRD_HDLC                          = 0x201\n\tARPHRD_HIPPI                         = 0x30c\n\tARPHRD_HWX25                         = 0x110\n\tARPHRD_IEEE1394                      = 0x18\n\tARPHRD_IEEE802                       = 0x6\n\tARPHRD_IEEE80211                     = 0x321\n\tARPHRD_IEEE80211_PRISM               = 0x322\n\tARPHRD_IEEE80211_RADIOTAP            = 0x323\n\tARPHRD_IEEE802154                    = 0x324\n\tARPHRD_IEEE802154_MONITOR            = 0x325\n\tARPHRD_IEEE802_TR                    = 0x320\n\tARPHRD_INFINIBAND                    = 0x20\n\tARPHRD_IP6GRE                        = 0x337\n\tARPHRD_IPDDP                         = 0x309\n\tARPHRD_IPGRE                         = 0x30a\n\tARPHRD_IRDA                          = 0x30f\n\tARPHRD_LAPB                          = 0x204\n\tARPHRD_LOCALTLK                      = 0x305\n\tARPHRD_LOOPBACK                      = 0x304\n\tARPHRD_METRICOM                      = 0x17\n\tARPHRD_NETLINK                       = 0x338\n\tARPHRD_NETROM                        = 0x0\n\tARPHRD_NONE                          = 0xfffe\n\tARPHRD_PHONET                        = 0x334\n\tARPHRD_PHONET_PIPE                   = 0x335\n\tARPHRD_PIMREG                        = 0x30b\n\tARPHRD_PPP                           = 0x200\n\tARPHRD_PRONET                        = 0x4\n\tARPHRD_RAWHDLC                       = 0x206\n\tARPHRD_RAWIP                         = 0x207\n\tARPHRD_ROSE                          = 0x10e\n\tARPHRD_RSRVD                         = 0x104\n\tARPHRD_SIT                           = 0x308\n\tARPHRD_SKIP                          = 0x303\n\tARPHRD_SLIP                          = 0x100\n\tARPHRD_SLIP6                         = 0x102\n\tARPHRD_TUNNEL                        = 0x300\n\tARPHRD_TUNNEL6                       = 0x301\n\tARPHRD_VOID                          = 0xffff\n\tARPHRD_VSOCKMON                      = 0x33a\n\tARPHRD_X25                           = 0x10f\n\tAUTOFS_SUPER_MAGIC                   = 0x187\n\tB0                                   = 0x0\n\tB1000000                             = 0x1008\n\tB110                                 = 0x3\n\tB115200                              = 0x1002\n\tB1152000                             = 0x1009\n\tB1200                                = 0x9\n\tB134                                 = 0x4\n\tB150                                 = 0x5\n\tB1500000                             = 0x100a\n\tB1800                                = 0xa\n\tB19200                               = 0xe\n\tB200                                 = 0x6\n\tB2000000                             = 0x100b\n\tB230400                              = 0x1003\n\tB2400                                = 0xb\n\tB2500000                             = 0x100c\n\tB300                                 = 0x7\n\tB3000000                             = 0x100d\n\tB3500000                             = 0x100e\n\tB38400                               = 0xf\n\tB4000000                             = 0x100f\n\tB460800                              = 0x1004\n\tB4800                                = 0xc\n\tB50                                  = 0x1\n\tB500000                              = 0x1005\n\tB57600                               = 0x1001\n\tB576000                              = 0x1006\n\tB600                                 = 0x8\n\tB75                                  = 0x2\n\tB921600                              = 0x1007\n\tB9600                                = 0xd\n\tBALLOON_KVM_MAGIC                    = 0x13661366\n\tBDEVFS_MAGIC                         = 0x62646576\n\tBINDERFS_SUPER_MAGIC                 = 0x6c6f6f70\n\tBINFMTFS_MAGIC                       = 0x42494e4d\n\tBLKBSZGET                            = 0x80041270\n\tBLKBSZSET                            = 0x40041271\n\tBLKFLSBUF                            = 0x1261\n\tBLKFRAGET                            = 0x1265\n\tBLKFRASET                            = 0x1264\n\tBLKGETSIZE                           = 0x1260\n\tBLKGETSIZE64                         = 0x80041272\n\tBLKPBSZGET                           = 0x127b\n\tBLKRAGET                             = 0x1263\n\tBLKRASET                             = 0x1262\n\tBLKROGET                             = 0x125e\n\tBLKROSET                             = 0x125d\n\tBLKRRPART                            = 0x125f\n\tBLKSECTGET                           = 0x1267\n\tBLKSECTSET                           = 0x1266\n\tBLKSSZGET                            = 0x1268\n\tBOTHER                               = 0x1000\n\tBPF_A                                = 0x10\n\tBPF_ABS                              = 0x20\n\tBPF_ADD                              = 0x0\n\tBPF_ALU                              = 0x4\n\tBPF_ALU64                            = 0x7\n\tBPF_AND                              = 0x50\n\tBPF_ANY                              = 0x0\n\tBPF_ARSH                             = 0xc0\n\tBPF_B                                = 0x10\n\tBPF_BUILD_ID_SIZE                    = 0x14\n\tBPF_CALL                             = 0x80\n\tBPF_DEVCG_ACC_MKNOD                  = 0x1\n\tBPF_DEVCG_ACC_READ                   = 0x2\n\tBPF_DEVCG_ACC_WRITE                  = 0x4\n\tBPF_DEVCG_DEV_BLOCK                  = 0x1\n\tBPF_DEVCG_DEV_CHAR                   = 0x2\n\tBPF_DIV                              = 0x30\n\tBPF_DW                               = 0x18\n\tBPF_END                              = 0xd0\n\tBPF_EXIST                            = 0x2\n\tBPF_EXIT                             = 0x90\n\tBPF_FROM_BE                          = 0x8\n\tBPF_FROM_LE                          = 0x0\n\tBPF_FS_MAGIC                         = 0xcafe4a11\n\tBPF_F_ALLOW_MULTI                    = 0x2\n\tBPF_F_ALLOW_OVERRIDE                 = 0x1\n\tBPF_F_ANY_ALIGNMENT                  = 0x2\n\tBPF_F_CTXLEN_MASK                    = 0xfffff00000000\n\tBPF_F_CURRENT_CPU                    = 0xffffffff\n\tBPF_F_CURRENT_NETNS                  = -0x1\n\tBPF_F_DONT_FRAGMENT                  = 0x4\n\tBPF_F_FAST_STACK_CMP                 = 0x200\n\tBPF_F_HDR_FIELD_MASK                 = 0xf\n\tBPF_F_INDEX_MASK                     = 0xffffffff\n\tBPF_F_INGRESS                        = 0x1\n\tBPF_F_INVALIDATE_HASH                = 0x2\n\tBPF_F_LOCK                           = 0x4\n\tBPF_F_MARK_ENFORCE                   = 0x40\n\tBPF_F_MARK_MANGLED_0                 = 0x20\n\tBPF_F_NO_COMMON_LRU                  = 0x2\n\tBPF_F_NO_PREALLOC                    = 0x1\n\tBPF_F_NUMA_NODE                      = 0x4\n\tBPF_F_PSEUDO_HDR                     = 0x10\n\tBPF_F_QUERY_EFFECTIVE                = 0x1\n\tBPF_F_RDONLY                         = 0x8\n\tBPF_F_RECOMPUTE_CSUM                 = 0x1\n\tBPF_F_REUSE_STACKID                  = 0x400\n\tBPF_F_SEQ_NUMBER                     = 0x8\n\tBPF_F_SKIP_FIELD_MASK                = 0xff\n\tBPF_F_STACK_BUILD_ID                 = 0x20\n\tBPF_F_STRICT_ALIGNMENT               = 0x1\n\tBPF_F_TUNINFO_IPV6                   = 0x1\n\tBPF_F_USER_BUILD_ID                  = 0x800\n\tBPF_F_USER_STACK                     = 0x100\n\tBPF_F_WRONLY                         = 0x10\n\tBPF_F_ZERO_CSUM_TX                   = 0x2\n\tBPF_F_ZERO_SEED                      = 0x40\n\tBPF_H                                = 0x8\n\tBPF_IMM                              = 0x0\n\tBPF_IND                              = 0x40\n\tBPF_JA                               = 0x0\n\tBPF_JEQ                              = 0x10\n\tBPF_JGE                              = 0x30\n\tBPF_JGT                              = 0x20\n\tBPF_JLE                              = 0xb0\n\tBPF_JLT                              = 0xa0\n\tBPF_JMP                              = 0x5\n\tBPF_JMP32                            = 0x6\n\tBPF_JNE                              = 0x50\n\tBPF_JSET                             = 0x40\n\tBPF_JSGE                             = 0x70\n\tBPF_JSGT                             = 0x60\n\tBPF_JSLE                             = 0xd0\n\tBPF_JSLT                             = 0xc0\n\tBPF_K                                = 0x0\n\tBPF_LD                               = 0x0\n\tBPF_LDX                              = 0x1\n\tBPF_LEN                              = 0x80\n\tBPF_LL_OFF                           = -0x200000\n\tBPF_LSH                              = 0x60\n\tBPF_MAJOR_VERSION                    = 0x1\n\tBPF_MAXINSNS                         = 0x1000\n\tBPF_MEM                              = 0x60\n\tBPF_MEMWORDS                         = 0x10\n\tBPF_MINOR_VERSION                    = 0x1\n\tBPF_MISC                             = 0x7\n\tBPF_MOD                              = 0x90\n\tBPF_MOV                              = 0xb0\n\tBPF_MSH                              = 0xa0\n\tBPF_MUL                              = 0x20\n\tBPF_NEG                              = 0x80\n\tBPF_NET_OFF                          = -0x100000\n\tBPF_NOEXIST                          = 0x1\n\tBPF_OBJ_NAME_LEN                     = 0x10\n\tBPF_OR                               = 0x40\n\tBPF_PSEUDO_CALL                      = 0x1\n\tBPF_PSEUDO_MAP_FD                    = 0x1\n\tBPF_RET                              = 0x6\n\tBPF_RSH                              = 0x70\n\tBPF_SOCK_OPS_ALL_CB_FLAGS            = 0x7\n\tBPF_SOCK_OPS_RETRANS_CB_FLAG         = 0x2\n\tBPF_SOCK_OPS_RTO_CB_FLAG             = 0x1\n\tBPF_SOCK_OPS_STATE_CB_FLAG           = 0x4\n\tBPF_ST                               = 0x2\n\tBPF_STX                              = 0x3\n\tBPF_SUB                              = 0x10\n\tBPF_TAG_SIZE                         = 0x8\n\tBPF_TAX                              = 0x0\n\tBPF_TO_BE                            = 0x8\n\tBPF_TO_LE                            = 0x0\n\tBPF_TXA                              = 0x80\n\tBPF_W                                = 0x0\n\tBPF_X                                = 0x8\n\tBPF_XADD                             = 0xc0\n\tBPF_XOR                              = 0xa0\n\tBRKINT                               = 0x2\n\tBS0                                  = 0x0\n\tBS1                                  = 0x2000\n\tBSDLY                                = 0x2000\n\tBTRFS_SUPER_MAGIC                    = 0x9123683e\n\tBTRFS_TEST_MAGIC                     = 0x73727279\n\tCAN_BCM                              = 0x2\n\tCAN_EFF_FLAG                         = 0x80000000\n\tCAN_EFF_ID_BITS                      = 0x1d\n\tCAN_EFF_MASK                         = 0x1fffffff\n\tCAN_ERR_FLAG                         = 0x20000000\n\tCAN_ERR_MASK                         = 0x1fffffff\n\tCAN_INV_FILTER                       = 0x20000000\n\tCAN_ISOTP                            = 0x6\n\tCAN_MAX_DLC                          = 0x8\n\tCAN_MAX_DLEN                         = 0x8\n\tCAN_MCNET                            = 0x5\n\tCAN_MTU                              = 0x10\n\tCAN_NPROTO                           = 0x7\n\tCAN_RAW                              = 0x1\n\tCAN_RAW_FILTER_MAX                   = 0x200\n\tCAN_RTR_FLAG                         = 0x40000000\n\tCAN_SFF_ID_BITS                      = 0xb\n\tCAN_SFF_MASK                         = 0x7ff\n\tCAN_TP16                             = 0x3\n\tCAN_TP20                             = 0x4\n\tCBAUD                                = 0x100f\n\tCBAUDEX                              = 0x1000\n\tCFLUSH                               = 0xf\n\tCGROUP2_SUPER_MAGIC                  = 0x63677270\n\tCGROUP_SUPER_MAGIC                   = 0x27e0eb\n\tCIBAUD                               = 0x100f0000\n\tCLOCAL                               = 0x800\n\tCLOCK_BOOTTIME                       = 0x7\n\tCLOCK_BOOTTIME_ALARM                 = 0x9\n\tCLOCK_DEFAULT                        = 0x0\n\tCLOCK_EXT                            = 0x1\n\tCLOCK_INT                            = 0x2\n\tCLOCK_MONOTONIC                      = 0x1\n\tCLOCK_MONOTONIC_COARSE               = 0x6\n\tCLOCK_MONOTONIC_RAW                  = 0x4\n\tCLOCK_PROCESS_CPUTIME_ID             = 0x2\n\tCLOCK_REALTIME                       = 0x0\n\tCLOCK_REALTIME_ALARM                 = 0x8\n\tCLOCK_REALTIME_COARSE                = 0x5\n\tCLOCK_TAI                            = 0xb\n\tCLOCK_THREAD_CPUTIME_ID              = 0x3\n\tCLOCK_TXFROMRX                       = 0x4\n\tCLOCK_TXINT                          = 0x3\n\tCLONE_CHILD_CLEARTID                 = 0x200000\n\tCLONE_CHILD_SETTID                   = 0x1000000\n\tCLONE_DETACHED                       = 0x400000\n\tCLONE_FILES                          = 0x400\n\tCLONE_FS                             = 0x200\n\tCLONE_IO                             = 0x80000000\n\tCLONE_NEWCGROUP                      = 0x2000000\n\tCLONE_NEWIPC                         = 0x8000000\n\tCLONE_NEWNET                         = 0x40000000\n\tCLONE_NEWNS                          = 0x20000\n\tCLONE_NEWPID                         = 0x20000000\n\tCLONE_NEWUSER                        = 0x10000000\n\tCLONE_NEWUTS                         = 0x4000000\n\tCLONE_PARENT                         = 0x8000\n\tCLONE_PARENT_SETTID                  = 0x100000\n\tCLONE_PTRACE                         = 0x2000\n\tCLONE_SETTLS                         = 0x80000\n\tCLONE_SIGHAND                        = 0x800\n\tCLONE_SYSVSEM                        = 0x40000\n\tCLONE_THREAD                         = 0x10000\n\tCLONE_UNTRACED                       = 0x800000\n\tCLONE_VFORK                          = 0x4000\n\tCLONE_VM                             = 0x100\n\tCMSPAR                               = 0x40000000\n\tCODA_SUPER_MAGIC                     = 0x73757245\n\tCR0                                  = 0x0\n\tCR1                                  = 0x200\n\tCR2                                  = 0x400\n\tCR3                                  = 0x600\n\tCRAMFS_MAGIC                         = 0x28cd3d45\n\tCRDLY                                = 0x600\n\tCREAD                                = 0x80\n\tCRTSCTS                              = 0x80000000\n\tCRYPTO_MAX_NAME                      = 0x40\n\tCRYPTO_MSG_MAX                       = 0x15\n\tCRYPTO_NR_MSGTYPES                   = 0x6\n\tCRYPTO_REPORT_MAXSIZE                = 0x160\n\tCS5                                  = 0x0\n\tCS6                                  = 0x10\n\tCS7                                  = 0x20\n\tCS8                                  = 0x30\n\tCSIGNAL                              = 0xff\n\tCSIZE                                = 0x30\n\tCSTART                               = 0x11\n\tCSTATUS                              = 0x0\n\tCSTOP                                = 0x13\n\tCSTOPB                               = 0x40\n\tCSUSP                                = 0x1a\n\tDAXFS_MAGIC                          = 0x64646178\n\tDEBUGFS_MAGIC                        = 0x64626720\n\tDEVPTS_SUPER_MAGIC                   = 0x1cd1\n\tDT_BLK                               = 0x6\n\tDT_CHR                               = 0x2\n\tDT_DIR                               = 0x4\n\tDT_FIFO                              = 0x1\n\tDT_LNK                               = 0xa\n\tDT_REG                               = 0x8\n\tDT_SOCK                              = 0xc\n\tDT_UNKNOWN                           = 0x0\n\tDT_WHT                               = 0xe\n\tECHO                                 = 0x8\n\tECHOCTL                              = 0x200\n\tECHOE                                = 0x10\n\tECHOK                                = 0x20\n\tECHOKE                               = 0x800\n\tECHONL                               = 0x40\n\tECHOPRT                              = 0x400\n\tECRYPTFS_SUPER_MAGIC                 = 0xf15f\n\tEFD_CLOEXEC                          = 0x80000\n\tEFD_NONBLOCK                         = 0x800\n\tEFD_SEMAPHORE                        = 0x1\n\tEFIVARFS_MAGIC                       = 0xde5e81e4\n\tEFS_SUPER_MAGIC                      = 0x414a53\n\tENCODING_DEFAULT                     = 0x0\n\tENCODING_FM_MARK                     = 0x3\n\tENCODING_FM_SPACE                    = 0x4\n\tENCODING_MANCHESTER                  = 0x5\n\tENCODING_NRZ                         = 0x1\n\tENCODING_NRZI                        = 0x2\n\tEPOLLERR                             = 0x8\n\tEPOLLET                              = 0x80000000\n\tEPOLLEXCLUSIVE                       = 0x10000000\n\tEPOLLHUP                             = 0x10\n\tEPOLLIN                              = 0x1\n\tEPOLLMSG                             = 0x400\n\tEPOLLONESHOT                         = 0x40000000\n\tEPOLLOUT                             = 0x4\n\tEPOLLPRI                             = 0x2\n\tEPOLLRDBAND                          = 0x80\n\tEPOLLRDHUP                           = 0x2000\n\tEPOLLRDNORM                          = 0x40\n\tEPOLLWAKEUP                          = 0x20000000\n\tEPOLLWRBAND                          = 0x200\n\tEPOLLWRNORM                          = 0x100\n\tEPOLL_CLOEXEC                        = 0x80000\n\tEPOLL_CTL_ADD                        = 0x1\n\tEPOLL_CTL_DEL                        = 0x2\n\tEPOLL_CTL_MOD                        = 0x3\n\tETH_P_1588                           = 0x88f7\n\tETH_P_8021AD                         = 0x88a8\n\tETH_P_8021AH                         = 0x88e7\n\tETH_P_8021Q                          = 0x8100\n\tETH_P_80221                          = 0x8917\n\tETH_P_802_2                          = 0x4\n\tETH_P_802_3                          = 0x1\n\tETH_P_802_3_MIN                      = 0x600\n\tETH_P_802_EX1                        = 0x88b5\n\tETH_P_AARP                           = 0x80f3\n\tETH_P_AF_IUCV                        = 0xfbfb\n\tETH_P_ALL                            = 0x3\n\tETH_P_AOE                            = 0x88a2\n\tETH_P_ARCNET                         = 0x1a\n\tETH_P_ARP                            = 0x806\n\tETH_P_ATALK                          = 0x809b\n\tETH_P_ATMFATE                        = 0x8884\n\tETH_P_ATMMPOA                        = 0x884c\n\tETH_P_AX25                           = 0x2\n\tETH_P_BATMAN                         = 0x4305\n\tETH_P_BPQ                            = 0x8ff\n\tETH_P_CAIF                           = 0xf7\n\tETH_P_CAN                            = 0xc\n\tETH_P_CANFD                          = 0xd\n\tETH_P_CONTROL                        = 0x16\n\tETH_P_CUST                           = 0x6006\n\tETH_P_DDCMP                          = 0x6\n\tETH_P_DEC                            = 0x6000\n\tETH_P_DIAG                           = 0x6005\n\tETH_P_DNA_DL                         = 0x6001\n\tETH_P_DNA_RC                         = 0x6002\n\tETH_P_DNA_RT                         = 0x6003\n\tETH_P_DSA                            = 0x1b\n\tETH_P_ECONET                         = 0x18\n\tETH_P_EDSA                           = 0xdada\n\tETH_P_ERSPAN                         = 0x88be\n\tETH_P_ERSPAN2                        = 0x22eb\n\tETH_P_FCOE                           = 0x8906\n\tETH_P_FIP                            = 0x8914\n\tETH_P_HDLC                           = 0x19\n\tETH_P_HSR                            = 0x892f\n\tETH_P_IBOE                           = 0x8915\n\tETH_P_IEEE802154                     = 0xf6\n\tETH_P_IEEEPUP                        = 0xa00\n\tETH_P_IEEEPUPAT                      = 0xa01\n\tETH_P_IFE                            = 0xed3e\n\tETH_P_IP                             = 0x800\n\tETH_P_IPV6                           = 0x86dd\n\tETH_P_IPX                            = 0x8137\n\tETH_P_IRDA                           = 0x17\n\tETH_P_LAT                            = 0x6004\n\tETH_P_LINK_CTL                       = 0x886c\n\tETH_P_LOCALTALK                      = 0x9\n\tETH_P_LOOP                           = 0x60\n\tETH_P_LOOPBACK                       = 0x9000\n\tETH_P_MACSEC                         = 0x88e5\n\tETH_P_MAP                            = 0xf9\n\tETH_P_MOBITEX                        = 0x15\n\tETH_P_MPLS_MC                        = 0x8848\n\tETH_P_MPLS_UC                        = 0x8847\n\tETH_P_MVRP                           = 0x88f5\n\tETH_P_NCSI                           = 0x88f8\n\tETH_P_NSH                            = 0x894f\n\tETH_P_PAE                            = 0x888e\n\tETH_P_PAUSE                          = 0x8808\n\tETH_P_PHONET                         = 0xf5\n\tETH_P_PPPTALK                        = 0x10\n\tETH_P_PPP_DISC                       = 0x8863\n\tETH_P_PPP_MP                         = 0x8\n\tETH_P_PPP_SES                        = 0x8864\n\tETH_P_PREAUTH                        = 0x88c7\n\tETH_P_PRP                            = 0x88fb\n\tETH_P_PUP                            = 0x200\n\tETH_P_PUPAT                          = 0x201\n\tETH_P_QINQ1                          = 0x9100\n\tETH_P_QINQ2                          = 0x9200\n\tETH_P_QINQ3                          = 0x9300\n\tETH_P_RARP                           = 0x8035\n\tETH_P_SCA                            = 0x6007\n\tETH_P_SLOW                           = 0x8809\n\tETH_P_SNAP                           = 0x5\n\tETH_P_TDLS                           = 0x890d\n\tETH_P_TEB                            = 0x6558\n\tETH_P_TIPC                           = 0x88ca\n\tETH_P_TRAILER                        = 0x1c\n\tETH_P_TR_802_2                       = 0x11\n\tETH_P_TSN                            = 0x22f0\n\tETH_P_WAN_PPP                        = 0x7\n\tETH_P_WCCP                           = 0x883e\n\tETH_P_X25                            = 0x805\n\tETH_P_XDSA                           = 0xf8\n\tEXABYTE_ENABLE_NEST                  = 0xf0\n\tEXT2_SUPER_MAGIC                     = 0xef53\n\tEXT3_SUPER_MAGIC                     = 0xef53\n\tEXT4_SUPER_MAGIC                     = 0xef53\n\tEXTA                                 = 0xe\n\tEXTB                                 = 0xf\n\tEXTPROC                              = 0x10000\n\tF2FS_SUPER_MAGIC                     = 0xf2f52010\n\tFALLOC_FL_COLLAPSE_RANGE             = 0x8\n\tFALLOC_FL_INSERT_RANGE               = 0x20\n\tFALLOC_FL_KEEP_SIZE                  = 0x1\n\tFALLOC_FL_NO_HIDE_STALE              = 0x4\n\tFALLOC_FL_PUNCH_HOLE                 = 0x2\n\tFALLOC_FL_UNSHARE_RANGE              = 0x40\n\tFALLOC_FL_ZERO_RANGE                 = 0x10\n\tFANOTIFY_METADATA_VERSION            = 0x3\n\tFAN_ACCESS                           = 0x1\n\tFAN_ACCESS_PERM                      = 0x20000\n\tFAN_ALLOW                            = 0x1\n\tFAN_ALL_CLASS_BITS                   = 0xc\n\tFAN_ALL_EVENTS                       = 0x3b\n\tFAN_ALL_INIT_FLAGS                   = 0x3f\n\tFAN_ALL_MARK_FLAGS                   = 0xff\n\tFAN_ALL_OUTGOING_EVENTS              = 0x3403b\n\tFAN_ALL_PERM_EVENTS                  = 0x30000\n\tFAN_ATTRIB                           = 0x4\n\tFAN_AUDIT                            = 0x10\n\tFAN_CLASS_CONTENT                    = 0x4\n\tFAN_CLASS_NOTIF                      = 0x0\n\tFAN_CLASS_PRE_CONTENT                = 0x8\n\tFAN_CLOEXEC                          = 0x1\n\tFAN_CLOSE                            = 0x18\n\tFAN_CLOSE_NOWRITE                    = 0x10\n\tFAN_CLOSE_WRITE                      = 0x8\n\tFAN_CREATE                           = 0x100\n\tFAN_DELETE                           = 0x200\n\tFAN_DELETE_SELF                      = 0x400\n\tFAN_DENY                             = 0x2\n\tFAN_ENABLE_AUDIT                     = 0x40\n\tFAN_EVENT_INFO_TYPE_FID              = 0x1\n\tFAN_EVENT_METADATA_LEN               = 0x18\n\tFAN_EVENT_ON_CHILD                   = 0x8000000\n\tFAN_MARK_ADD                         = 0x1\n\tFAN_MARK_DONT_FOLLOW                 = 0x4\n\tFAN_MARK_FILESYSTEM                  = 0x100\n\tFAN_MARK_FLUSH                       = 0x80\n\tFAN_MARK_IGNORED_MASK                = 0x20\n\tFAN_MARK_IGNORED_SURV_MODIFY         = 0x40\n\tFAN_MARK_INODE                       = 0x0\n\tFAN_MARK_MOUNT                       = 0x10\n\tFAN_MARK_ONLYDIR                     = 0x8\n\tFAN_MARK_REMOVE                      = 0x2\n\tFAN_MODIFY                           = 0x2\n\tFAN_MOVE                             = 0xc0\n\tFAN_MOVED_FROM                       = 0x40\n\tFAN_MOVED_TO                         = 0x80\n\tFAN_MOVE_SELF                        = 0x800\n\tFAN_NOFD                             = -0x1\n\tFAN_NONBLOCK                         = 0x2\n\tFAN_ONDIR                            = 0x40000000\n\tFAN_OPEN                             = 0x20\n\tFAN_OPEN_EXEC                        = 0x1000\n\tFAN_OPEN_EXEC_PERM                   = 0x40000\n\tFAN_OPEN_PERM                        = 0x10000\n\tFAN_Q_OVERFLOW                       = 0x4000\n\tFAN_REPORT_FID                       = 0x200\n\tFAN_REPORT_TID                       = 0x100\n\tFAN_UNLIMITED_MARKS                  = 0x20\n\tFAN_UNLIMITED_QUEUE                  = 0x10\n\tFD_CLOEXEC                           = 0x1\n\tFD_SETSIZE                           = 0x400\n\tFF0                                  = 0x0\n\tFF1                                  = 0x8000\n\tFFDLY                                = 0x8000\n\tFLUSHO                               = 0x1000\n\tFP_XSTATE_MAGIC2                     = 0x46505845\n\tFS_ENCRYPTION_MODE_ADIANTUM          = 0x9\n\tFS_ENCRYPTION_MODE_AES_128_CBC       = 0x5\n\tFS_ENCRYPTION_MODE_AES_128_CTS       = 0x6\n\tFS_ENCRYPTION_MODE_AES_256_CBC       = 0x3\n\tFS_ENCRYPTION_MODE_AES_256_CTS       = 0x4\n\tFS_ENCRYPTION_MODE_AES_256_GCM       = 0x2\n\tFS_ENCRYPTION_MODE_AES_256_XTS       = 0x1\n\tFS_ENCRYPTION_MODE_INVALID           = 0x0\n\tFS_ENCRYPTION_MODE_SPECK128_256_CTS  = 0x8\n\tFS_ENCRYPTION_MODE_SPECK128_256_XTS  = 0x7\n\tFS_IOC_GET_ENCRYPTION_POLICY         = 0x400c6615\n\tFS_IOC_GET_ENCRYPTION_PWSALT         = 0x40106614\n\tFS_IOC_SET_ENCRYPTION_POLICY         = 0x800c6613\n\tFS_KEY_DESCRIPTOR_SIZE               = 0x8\n\tFS_KEY_DESC_PREFIX                   = \"fscrypt:\"\n\tFS_KEY_DESC_PREFIX_SIZE              = 0x8\n\tFS_MAX_KEY_SIZE                      = 0x40\n\tFS_POLICY_FLAGS_PAD_16               = 0x2\n\tFS_POLICY_FLAGS_PAD_32               = 0x3\n\tFS_POLICY_FLAGS_PAD_4                = 0x0\n\tFS_POLICY_FLAGS_PAD_8                = 0x1\n\tFS_POLICY_FLAGS_PAD_MASK             = 0x3\n\tFS_POLICY_FLAGS_VALID                = 0x7\n\tFUTEXFS_SUPER_MAGIC                  = 0xbad1dea\n\tF_ADD_SEALS                          = 0x409\n\tF_DUPFD                              = 0x0\n\tF_DUPFD_CLOEXEC                      = 0x406\n\tF_EXLCK                              = 0x4\n\tF_GETFD                              = 0x1\n\tF_GETFL                              = 0x3\n\tF_GETLEASE                           = 0x401\n\tF_GETLK                              = 0xc\n\tF_GETLK64                            = 0xc\n\tF_GETOWN                             = 0x9\n\tF_GETOWN_EX                          = 0x10\n\tF_GETPIPE_SZ                         = 0x408\n\tF_GETSIG                             = 0xb\n\tF_GET_FILE_RW_HINT                   = 0x40d\n\tF_GET_RW_HINT                        = 0x40b\n\tF_GET_SEALS                          = 0x40a\n\tF_LOCK                               = 0x1\n\tF_NOTIFY                             = 0x402\n\tF_OFD_GETLK                          = 0x24\n\tF_OFD_SETLK                          = 0x25\n\tF_OFD_SETLKW                         = 0x26\n\tF_OK                                 = 0x0\n\tF_RDLCK                              = 0x0\n\tF_SEAL_GROW                          = 0x4\n\tF_SEAL_SEAL                          = 0x1\n\tF_SEAL_SHRINK                        = 0x2\n\tF_SEAL_WRITE                         = 0x8\n\tF_SETFD                              = 0x2\n\tF_SETFL                              = 0x4\n\tF_SETLEASE                           = 0x400\n\tF_SETLK                              = 0xd\n\tF_SETLK64                            = 0xd\n\tF_SETLKW                             = 0xe\n\tF_SETLKW64                           = 0xe\n\tF_SETOWN                             = 0x8\n\tF_SETOWN_EX                          = 0xf\n\tF_SETPIPE_SZ                         = 0x407\n\tF_SETSIG                             = 0xa\n\tF_SET_FILE_RW_HINT                   = 0x40e\n\tF_SET_RW_HINT                        = 0x40c\n\tF_SHLCK                              = 0x8\n\tF_TEST                               = 0x3\n\tF_TLOCK                              = 0x2\n\tF_ULOCK                              = 0x0\n\tF_UNLCK                              = 0x2\n\tF_WRLCK                              = 0x1\n\tGENL_ADMIN_PERM                      = 0x1\n\tGENL_CMD_CAP_DO                      = 0x2\n\tGENL_CMD_CAP_DUMP                    = 0x4\n\tGENL_CMD_CAP_HASPOL                  = 0x8\n\tGENL_HDRLEN                          = 0x4\n\tGENL_ID_CTRL                         = 0x10\n\tGENL_ID_PMCRAID                      = 0x12\n\tGENL_ID_VFS_DQUOT                    = 0x11\n\tGENL_MAX_ID                          = 0x3ff\n\tGENL_MIN_ID                          = 0x10\n\tGENL_NAMSIZ                          = 0x10\n\tGENL_START_ALLOC                     = 0x13\n\tGENL_UNS_ADMIN_PERM                  = 0x10\n\tGRND_NONBLOCK                        = 0x1\n\tGRND_RANDOM                          = 0x2\n\tHDIO_DRIVE_CMD                       = 0x31f\n\tHDIO_DRIVE_CMD_AEB                   = 0x31e\n\tHDIO_DRIVE_CMD_HDR_SIZE              = 0x4\n\tHDIO_DRIVE_HOB_HDR_SIZE              = 0x8\n\tHDIO_DRIVE_RESET                     = 0x31c\n\tHDIO_DRIVE_TASK                      = 0x31e\n\tHDIO_DRIVE_TASKFILE                  = 0x31d\n\tHDIO_DRIVE_TASK_HDR_SIZE             = 0x8\n\tHDIO_GETGEO                          = 0x301\n\tHDIO_GET_32BIT                       = 0x309\n\tHDIO_GET_ACOUSTIC                    = 0x30f\n\tHDIO_GET_ADDRESS                     = 0x310\n\tHDIO_GET_BUSSTATE                    = 0x31a\n\tHDIO_GET_DMA                         = 0x30b\n\tHDIO_GET_IDENTITY                    = 0x30d\n\tHDIO_GET_KEEPSETTINGS                = 0x308\n\tHDIO_GET_MULTCOUNT                   = 0x304\n\tHDIO_GET_NICE                        = 0x30c\n\tHDIO_GET_NOWERR                      = 0x30a\n\tHDIO_GET_QDMA                        = 0x305\n\tHDIO_GET_UNMASKINTR                  = 0x302\n\tHDIO_GET_WCACHE                      = 0x30e\n\tHDIO_OBSOLETE_IDENTITY               = 0x307\n\tHDIO_SCAN_HWIF                       = 0x328\n\tHDIO_SET_32BIT                       = 0x324\n\tHDIO_SET_ACOUSTIC                    = 0x32c\n\tHDIO_SET_ADDRESS                     = 0x32f\n\tHDIO_SET_BUSSTATE                    = 0x32d\n\tHDIO_SET_DMA                         = 0x326\n\tHDIO_SET_KEEPSETTINGS                = 0x323\n\tHDIO_SET_MULTCOUNT                   = 0x321\n\tHDIO_SET_NICE                        = 0x329\n\tHDIO_SET_NOWERR                      = 0x325\n\tHDIO_SET_PIO_MODE                    = 0x327\n\tHDIO_SET_QDMA                        = 0x32e\n\tHDIO_SET_UNMASKINTR                  = 0x322\n\tHDIO_SET_WCACHE                      = 0x32b\n\tHDIO_SET_XFER                        = 0x306\n\tHDIO_TRISTATE_HWIF                   = 0x31b\n\tHDIO_UNREGISTER_HWIF                 = 0x32a\n\tHOSTFS_SUPER_MAGIC                   = 0xc0ffee\n\tHPFS_SUPER_MAGIC                     = 0xf995e849\n\tHUGETLBFS_MAGIC                      = 0x958458f6\n\tHUPCL                                = 0x400\n\tIBSHIFT                              = 0x10\n\tICANON                               = 0x2\n\tICMPV6_FILTER                        = 0x1\n\tICRNL                                = 0x100\n\tIEXTEN                               = 0x8000\n\tIFA_F_DADFAILED                      = 0x8\n\tIFA_F_DEPRECATED                     = 0x20\n\tIFA_F_HOMEADDRESS                    = 0x10\n\tIFA_F_MANAGETEMPADDR                 = 0x100\n\tIFA_F_MCAUTOJOIN                     = 0x400\n\tIFA_F_NODAD                          = 0x2\n\tIFA_F_NOPREFIXROUTE                  = 0x200\n\tIFA_F_OPTIMISTIC                     = 0x4\n\tIFA_F_PERMANENT                      = 0x80\n\tIFA_F_SECONDARY                      = 0x1\n\tIFA_F_STABLE_PRIVACY                 = 0x800\n\tIFA_F_TEMPORARY                      = 0x1\n\tIFA_F_TENTATIVE                      = 0x40\n\tIFA_MAX                              = 0xa\n\tIFF_ALLMULTI                         = 0x200\n\tIFF_ATTACH_QUEUE                     = 0x200\n\tIFF_AUTOMEDIA                        = 0x4000\n\tIFF_BROADCAST                        = 0x2\n\tIFF_DEBUG                            = 0x4\n\tIFF_DETACH_QUEUE                     = 0x400\n\tIFF_DORMANT                          = 0x20000\n\tIFF_DYNAMIC                          = 0x8000\n\tIFF_ECHO                             = 0x40000\n\tIFF_LOOPBACK                         = 0x8\n\tIFF_LOWER_UP                         = 0x10000\n\tIFF_MASTER                           = 0x400\n\tIFF_MULTICAST                        = 0x1000\n\tIFF_MULTI_QUEUE                      = 0x100\n\tIFF_NAPI                             = 0x10\n\tIFF_NAPI_FRAGS                       = 0x20\n\tIFF_NOARP                            = 0x80\n\tIFF_NOFILTER                         = 0x1000\n\tIFF_NOTRAILERS                       = 0x20\n\tIFF_NO_PI                            = 0x1000\n\tIFF_ONE_QUEUE                        = 0x2000\n\tIFF_PERSIST                          = 0x800\n\tIFF_POINTOPOINT                      = 0x10\n\tIFF_PORTSEL                          = 0x2000\n\tIFF_PROMISC                          = 0x100\n\tIFF_RUNNING                          = 0x40\n\tIFF_SLAVE                            = 0x800\n\tIFF_TAP                              = 0x2\n\tIFF_TUN                              = 0x1\n\tIFF_TUN_EXCL                         = 0x8000\n\tIFF_UP                               = 0x1\n\tIFF_VNET_HDR                         = 0x4000\n\tIFF_VOLATILE                         = 0x70c5a\n\tIFNAMSIZ                             = 0x10\n\tIGNBRK                               = 0x1\n\tIGNCR                                = 0x80\n\tIGNPAR                               = 0x4\n\tIMAXBEL                              = 0x2000\n\tINLCR                                = 0x40\n\tINPCK                                = 0x10\n\tIN_ACCESS                            = 0x1\n\tIN_ALL_EVENTS                        = 0xfff\n\tIN_ATTRIB                            = 0x4\n\tIN_CLASSA_HOST                       = 0xffffff\n\tIN_CLASSA_MAX                        = 0x80\n\tIN_CLASSA_NET                        = 0xff000000\n\tIN_CLASSA_NSHIFT                     = 0x18\n\tIN_CLASSB_HOST                       = 0xffff\n\tIN_CLASSB_MAX                        = 0x10000\n\tIN_CLASSB_NET                        = 0xffff0000\n\tIN_CLASSB_NSHIFT                     = 0x10\n\tIN_CLASSC_HOST                       = 0xff\n\tIN_CLASSC_NET                        = 0xffffff00\n\tIN_CLASSC_NSHIFT                     = 0x8\n\tIN_CLOEXEC                           = 0x80000\n\tIN_CLOSE                             = 0x18\n\tIN_CLOSE_NOWRITE                     = 0x10\n\tIN_CLOSE_WRITE                       = 0x8\n\tIN_CREATE                            = 0x100\n\tIN_DELETE                            = 0x200\n\tIN_DELETE_SELF                       = 0x400\n\tIN_DONT_FOLLOW                       = 0x2000000\n\tIN_EXCL_UNLINK                       = 0x4000000\n\tIN_IGNORED                           = 0x8000\n\tIN_ISDIR                             = 0x40000000\n\tIN_LOOPBACKNET                       = 0x7f\n\tIN_MASK_ADD                          = 0x20000000\n\tIN_MASK_CREATE                       = 0x10000000\n\tIN_MODIFY                            = 0x2\n\tIN_MOVE                              = 0xc0\n\tIN_MOVED_FROM                        = 0x40\n\tIN_MOVED_TO                          = 0x80\n\tIN_MOVE_SELF                         = 0x800\n\tIN_NONBLOCK                          = 0x800\n\tIN_ONESHOT                           = 0x80000000\n\tIN_ONLYDIR                           = 0x1000000\n\tIN_OPEN                              = 0x20\n\tIN_Q_OVERFLOW                        = 0x4000\n\tIN_UNMOUNT                           = 0x2000\n\tIOCTL_VM_SOCKETS_GET_LOCAL_CID       = 0x7b9\n\tIPPROTO_AH                           = 0x33\n\tIPPROTO_BEETPH                       = 0x5e\n\tIPPROTO_COMP                         = 0x6c\n\tIPPROTO_DCCP                         = 0x21\n\tIPPROTO_DSTOPTS                      = 0x3c\n\tIPPROTO_EGP                          = 0x8\n\tIPPROTO_ENCAP                        = 0x62\n\tIPPROTO_ESP                          = 0x32\n\tIPPROTO_FRAGMENT                     = 0x2c\n\tIPPROTO_GRE                          = 0x2f\n\tIPPROTO_HOPOPTS                      = 0x0\n\tIPPROTO_ICMP                         = 0x1\n\tIPPROTO_ICMPV6                       = 0x3a\n\tIPPROTO_IDP                          = 0x16\n\tIPPROTO_IGMP                         = 0x2\n\tIPPROTO_IP                           = 0x0\n\tIPPROTO_IPIP                         = 0x4\n\tIPPROTO_IPV6                         = 0x29\n\tIPPROTO_MH                           = 0x87\n\tIPPROTO_MPLS                         = 0x89\n\tIPPROTO_MTP                          = 0x5c\n\tIPPROTO_NONE                         = 0x3b\n\tIPPROTO_PIM                          = 0x67\n\tIPPROTO_PUP                          = 0xc\n\tIPPROTO_RAW                          = 0xff\n\tIPPROTO_ROUTING                      = 0x2b\n\tIPPROTO_RSVP                         = 0x2e\n\tIPPROTO_SCTP                         = 0x84\n\tIPPROTO_TCP                          = 0x6\n\tIPPROTO_TP                           = 0x1d\n\tIPPROTO_UDP                          = 0x11\n\tIPPROTO_UDPLITE                      = 0x88\n\tIPV6_2292DSTOPTS                     = 0x4\n\tIPV6_2292HOPLIMIT                    = 0x8\n\tIPV6_2292HOPOPTS                     = 0x3\n\tIPV6_2292PKTINFO                     = 0x2\n\tIPV6_2292PKTOPTIONS                  = 0x6\n\tIPV6_2292RTHDR                       = 0x5\n\tIPV6_ADDRFORM                        = 0x1\n\tIPV6_ADDR_PREFERENCES                = 0x48\n\tIPV6_ADD_MEMBERSHIP                  = 0x14\n\tIPV6_AUTHHDR                         = 0xa\n\tIPV6_AUTOFLOWLABEL                   = 0x46\n\tIPV6_CHECKSUM                        = 0x7\n\tIPV6_DONTFRAG                        = 0x3e\n\tIPV6_DROP_MEMBERSHIP                 = 0x15\n\tIPV6_DSTOPTS                         = 0x3b\n\tIPV6_FREEBIND                        = 0x4e\n\tIPV6_HDRINCL                         = 0x24\n\tIPV6_HOPLIMIT                        = 0x34\n\tIPV6_HOPOPTS                         = 0x36\n\tIPV6_IPSEC_POLICY                    = 0x22\n\tIPV6_JOIN_ANYCAST                    = 0x1b\n\tIPV6_JOIN_GROUP                      = 0x14\n\tIPV6_LEAVE_ANYCAST                   = 0x1c\n\tIPV6_LEAVE_GROUP                     = 0x15\n\tIPV6_MINHOPCOUNT                     = 0x49\n\tIPV6_MTU                             = 0x18\n\tIPV6_MTU_DISCOVER                    = 0x17\n\tIPV6_MULTICAST_ALL                   = 0x1d\n\tIPV6_MULTICAST_HOPS                  = 0x12\n\tIPV6_MULTICAST_IF                    = 0x11\n\tIPV6_MULTICAST_LOOP                  = 0x13\n\tIPV6_NEXTHOP                         = 0x9\n\tIPV6_ORIGDSTADDR                     = 0x4a\n\tIPV6_PATHMTU                         = 0x3d\n\tIPV6_PKTINFO                         = 0x32\n\tIPV6_PMTUDISC_DO                     = 0x2\n\tIPV6_PMTUDISC_DONT                   = 0x0\n\tIPV6_PMTUDISC_INTERFACE              = 0x4\n\tIPV6_PMTUDISC_OMIT                   = 0x5\n\tIPV6_PMTUDISC_PROBE                  = 0x3\n\tIPV6_PMTUDISC_WANT                   = 0x1\n\tIPV6_RECVDSTOPTS                     = 0x3a\n\tIPV6_RECVERR                         = 0x19\n\tIPV6_RECVFRAGSIZE                    = 0x4d\n\tIPV6_RECVHOPLIMIT                    = 0x33\n\tIPV6_RECVHOPOPTS                     = 0x35\n\tIPV6_RECVORIGDSTADDR                 = 0x4a\n\tIPV6_RECVPATHMTU                     = 0x3c\n\tIPV6_RECVPKTINFO                     = 0x31\n\tIPV6_RECVRTHDR                       = 0x38\n\tIPV6_RECVTCLASS                      = 0x42\n\tIPV6_ROUTER_ALERT                    = 0x16\n\tIPV6_RTHDR                           = 0x39\n\tIPV6_RTHDRDSTOPTS                    = 0x37\n\tIPV6_RTHDR_LOOSE                     = 0x0\n\tIPV6_RTHDR_STRICT                    = 0x1\n\tIPV6_RTHDR_TYPE_0                    = 0x0\n\tIPV6_RXDSTOPTS                       = 0x3b\n\tIPV6_RXHOPOPTS                       = 0x36\n\tIPV6_TCLASS                          = 0x43\n\tIPV6_TRANSPARENT                     = 0x4b\n\tIPV6_UNICAST_HOPS                    = 0x10\n\tIPV6_UNICAST_IF                      = 0x4c\n\tIPV6_V6ONLY                          = 0x1a\n\tIPV6_XFRM_POLICY                     = 0x23\n\tIP_ADD_MEMBERSHIP                    = 0x23\n\tIP_ADD_SOURCE_MEMBERSHIP             = 0x27\n\tIP_BIND_ADDRESS_NO_PORT              = 0x18\n\tIP_BLOCK_SOURCE                      = 0x26\n\tIP_CHECKSUM                          = 0x17\n\tIP_DEFAULT_MULTICAST_LOOP            = 0x1\n\tIP_DEFAULT_MULTICAST_TTL             = 0x1\n\tIP_DF                                = 0x4000\n\tIP_DROP_MEMBERSHIP                   = 0x24\n\tIP_DROP_SOURCE_MEMBERSHIP            = 0x28\n\tIP_FREEBIND                          = 0xf\n\tIP_HDRINCL                           = 0x3\n\tIP_IPSEC_POLICY                      = 0x10\n\tIP_MAXPACKET                         = 0xffff\n\tIP_MAX_MEMBERSHIPS                   = 0x14\n\tIP_MF                                = 0x2000\n\tIP_MINTTL                            = 0x15\n\tIP_MSFILTER                          = 0x29\n\tIP_MSS                               = 0x240\n\tIP_MTU                               = 0xe\n\tIP_MTU_DISCOVER                      = 0xa\n\tIP_MULTICAST_ALL                     = 0x31\n\tIP_MULTICAST_IF                      = 0x20\n\tIP_MULTICAST_LOOP                    = 0x22\n\tIP_MULTICAST_TTL                     = 0x21\n\tIP_NODEFRAG                          = 0x16\n\tIP_OFFMASK                           = 0x1fff\n\tIP_OPTIONS                           = 0x4\n\tIP_ORIGDSTADDR                       = 0x14\n\tIP_PASSSEC                           = 0x12\n\tIP_PKTINFO                           = 0x8\n\tIP_PKTOPTIONS                        = 0x9\n\tIP_PMTUDISC                          = 0xa\n\tIP_PMTUDISC_DO                       = 0x2\n\tIP_PMTUDISC_DONT                     = 0x0\n\tIP_PMTUDISC_INTERFACE                = 0x4\n\tIP_PMTUDISC_OMIT                     = 0x5\n\tIP_PMTUDISC_PROBE                    = 0x3\n\tIP_PMTUDISC_WANT                     = 0x1\n\tIP_RECVERR                           = 0xb\n\tIP_RECVFRAGSIZE                      = 0x19\n\tIP_RECVOPTS                          = 0x6\n\tIP_RECVORIGDSTADDR                   = 0x14\n\tIP_RECVRETOPTS                       = 0x7\n\tIP_RECVTOS                           = 0xd\n\tIP_RECVTTL                           = 0xc\n\tIP_RETOPTS                           = 0x7\n\tIP_RF                                = 0x8000\n\tIP_ROUTER_ALERT                      = 0x5\n\tIP_TOS                               = 0x1\n\tIP_TRANSPARENT                       = 0x13\n\tIP_TTL                               = 0x2\n\tIP_UNBLOCK_SOURCE                    = 0x25\n\tIP_UNICAST_IF                        = 0x32\n\tIP_XFRM_POLICY                       = 0x11\n\tISIG                                 = 0x1\n\tISOFS_SUPER_MAGIC                    = 0x9660\n\tISTRIP                               = 0x20\n\tIUCLC                                = 0x200\n\tIUTF8                                = 0x4000\n\tIXANY                                = 0x800\n\tIXOFF                                = 0x1000\n\tIXON                                 = 0x400\n\tJFFS2_SUPER_MAGIC                    = 0x72b6\n\tKEXEC_ARCH_386                       = 0x30000\n\tKEXEC_ARCH_68K                       = 0x40000\n\tKEXEC_ARCH_AARCH64                   = 0xb70000\n\tKEXEC_ARCH_ARM                       = 0x280000\n\tKEXEC_ARCH_DEFAULT                   = 0x0\n\tKEXEC_ARCH_IA_64                     = 0x320000\n\tKEXEC_ARCH_MASK                      = 0xffff0000\n\tKEXEC_ARCH_MIPS                      = 0x80000\n\tKEXEC_ARCH_MIPS_LE                   = 0xa0000\n\tKEXEC_ARCH_PPC                       = 0x140000\n\tKEXEC_ARCH_PPC64                     = 0x150000\n\tKEXEC_ARCH_S390                      = 0x160000\n\tKEXEC_ARCH_SH                        = 0x2a0000\n\tKEXEC_ARCH_X86_64                    = 0x3e0000\n\tKEXEC_FILE_NO_INITRAMFS              = 0x4\n\tKEXEC_FILE_ON_CRASH                  = 0x2\n\tKEXEC_FILE_UNLOAD                    = 0x1\n\tKEXEC_ON_CRASH                       = 0x1\n\tKEXEC_PRESERVE_CONTEXT               = 0x2\n\tKEXEC_SEGMENT_MAX                    = 0x10\n\tKEYCTL_ASSUME_AUTHORITY              = 0x10\n\tKEYCTL_CHOWN                         = 0x4\n\tKEYCTL_CLEAR                         = 0x7\n\tKEYCTL_DESCRIBE                      = 0x6\n\tKEYCTL_DH_COMPUTE                    = 0x17\n\tKEYCTL_GET_KEYRING_ID                = 0x0\n\tKEYCTL_GET_PERSISTENT                = 0x16\n\tKEYCTL_GET_SECURITY                  = 0x11\n\tKEYCTL_INSTANTIATE                   = 0xc\n\tKEYCTL_INSTANTIATE_IOV               = 0x14\n\tKEYCTL_INVALIDATE                    = 0x15\n\tKEYCTL_JOIN_SESSION_KEYRING          = 0x1\n\tKEYCTL_LINK                          = 0x8\n\tKEYCTL_NEGATE                        = 0xd\n\tKEYCTL_PKEY_DECRYPT                  = 0x1a\n\tKEYCTL_PKEY_ENCRYPT                  = 0x19\n\tKEYCTL_PKEY_QUERY                    = 0x18\n\tKEYCTL_PKEY_SIGN                     = 0x1b\n\tKEYCTL_PKEY_VERIFY                   = 0x1c\n\tKEYCTL_READ                          = 0xb\n\tKEYCTL_REJECT                        = 0x13\n\tKEYCTL_RESTRICT_KEYRING              = 0x1d\n\tKEYCTL_REVOKE                        = 0x3\n\tKEYCTL_SEARCH                        = 0xa\n\tKEYCTL_SESSION_TO_PARENT             = 0x12\n\tKEYCTL_SETPERM                       = 0x5\n\tKEYCTL_SET_REQKEY_KEYRING            = 0xe\n\tKEYCTL_SET_TIMEOUT                   = 0xf\n\tKEYCTL_SUPPORTS_DECRYPT              = 0x2\n\tKEYCTL_SUPPORTS_ENCRYPT              = 0x1\n\tKEYCTL_SUPPORTS_SIGN                 = 0x4\n\tKEYCTL_SUPPORTS_VERIFY               = 0x8\n\tKEYCTL_UNLINK                        = 0x9\n\tKEYCTL_UPDATE                        = 0x2\n\tKEY_REQKEY_DEFL_DEFAULT              = 0x0\n\tKEY_REQKEY_DEFL_GROUP_KEYRING        = 0x6\n\tKEY_REQKEY_DEFL_NO_CHANGE            = -0x1\n\tKEY_REQKEY_DEFL_PROCESS_KEYRING      = 0x2\n\tKEY_REQKEY_DEFL_REQUESTOR_KEYRING    = 0x7\n\tKEY_REQKEY_DEFL_SESSION_KEYRING      = 0x3\n\tKEY_REQKEY_DEFL_THREAD_KEYRING       = 0x1\n\tKEY_REQKEY_DEFL_USER_KEYRING         = 0x4\n\tKEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5\n\tKEY_SPEC_GROUP_KEYRING               = -0x6\n\tKEY_SPEC_PROCESS_KEYRING             = -0x2\n\tKEY_SPEC_REQKEY_AUTH_KEY             = -0x7\n\tKEY_SPEC_REQUESTOR_KEYRING           = -0x8\n\tKEY_SPEC_SESSION_KEYRING             = -0x3\n\tKEY_SPEC_THREAD_KEYRING              = -0x1\n\tKEY_SPEC_USER_KEYRING                = -0x4\n\tKEY_SPEC_USER_SESSION_KEYRING        = -0x5\n\tLINUX_REBOOT_CMD_CAD_OFF             = 0x0\n\tLINUX_REBOOT_CMD_CAD_ON              = 0x89abcdef\n\tLINUX_REBOOT_CMD_HALT                = 0xcdef0123\n\tLINUX_REBOOT_CMD_KEXEC               = 0x45584543\n\tLINUX_REBOOT_CMD_POWER_OFF           = 0x4321fedc\n\tLINUX_REBOOT_CMD_RESTART             = 0x1234567\n\tLINUX_REBOOT_CMD_RESTART2            = 0xa1b2c3d4\n\tLINUX_REBOOT_CMD_SW_SUSPEND          = 0xd000fce2\n\tLINUX_REBOOT_MAGIC1                  = 0xfee1dead\n\tLINUX_REBOOT_MAGIC2                  = 0x28121969\n\tLOCK_EX                              = 0x2\n\tLOCK_NB                              = 0x4\n\tLOCK_SH                              = 0x1\n\tLOCK_UN                              = 0x8\n\tMADV_DODUMP                          = 0x11\n\tMADV_DOFORK                          = 0xb\n\tMADV_DONTDUMP                        = 0x10\n\tMADV_DONTFORK                        = 0xa\n\tMADV_DONTNEED                        = 0x4\n\tMADV_FREE                            = 0x8\n\tMADV_HUGEPAGE                        = 0xe\n\tMADV_HWPOISON                        = 0x64\n\tMADV_KEEPONFORK                      = 0x13\n\tMADV_MERGEABLE                       = 0xc\n\tMADV_NOHUGEPAGE                      = 0xf\n\tMADV_NORMAL                          = 0x0\n\tMADV_RANDOM                          = 0x1\n\tMADV_REMOVE                          = 0x9\n\tMADV_SEQUENTIAL                      = 0x2\n\tMADV_UNMERGEABLE                     = 0xd\n\tMADV_WILLNEED                        = 0x3\n\tMADV_WIPEONFORK                      = 0x12\n\tMAP_32BIT                            = 0x40\n\tMAP_ANON                             = 0x20\n\tMAP_ANONYMOUS                        = 0x20\n\tMAP_DENYWRITE                        = 0x800\n\tMAP_EXECUTABLE                       = 0x1000\n\tMAP_FILE                             = 0x0\n\tMAP_FIXED                            = 0x10\n\tMAP_FIXED_NOREPLACE                  = 0x100000\n\tMAP_GROWSDOWN                        = 0x100\n\tMAP_HUGETLB                          = 0x40000\n\tMAP_HUGE_MASK                        = 0x3f\n\tMAP_HUGE_SHIFT                       = 0x1a\n\tMAP_LOCKED                           = 0x2000\n\tMAP_NONBLOCK                         = 0x10000\n\tMAP_NORESERVE                        = 0x4000\n\tMAP_POPULATE                         = 0x8000\n\tMAP_PRIVATE                          = 0x2\n\tMAP_SHARED                           = 0x1\n\tMAP_SHARED_VALIDATE                  = 0x3\n\tMAP_STACK                            = 0x20000\n\tMAP_SYNC                             = 0x80000\n\tMAP_TYPE                             = 0xf\n\tMCAST_BLOCK_SOURCE                   = 0x2b\n\tMCAST_EXCLUDE                        = 0x0\n\tMCAST_INCLUDE                        = 0x1\n\tMCAST_JOIN_GROUP                     = 0x2a\n\tMCAST_JOIN_SOURCE_GROUP              = 0x2e\n\tMCAST_LEAVE_GROUP                    = 0x2d\n\tMCAST_LEAVE_SOURCE_GROUP             = 0x2f\n\tMCAST_MSFILTER                       = 0x30\n\tMCAST_UNBLOCK_SOURCE                 = 0x2c\n\tMCL_CURRENT                          = 0x1\n\tMCL_FUTURE                           = 0x2\n\tMCL_ONFAULT                          = 0x4\n\tMFD_ALLOW_SEALING                    = 0x2\n\tMFD_CLOEXEC                          = 0x1\n\tMFD_HUGETLB                          = 0x4\n\tMFD_HUGE_16GB                        = -0x78000000\n\tMFD_HUGE_16MB                        = 0x60000000\n\tMFD_HUGE_1GB                         = 0x78000000\n\tMFD_HUGE_1MB                         = 0x50000000\n\tMFD_HUGE_256MB                       = 0x70000000\n\tMFD_HUGE_2GB                         = 0x7c000000\n\tMFD_HUGE_2MB                         = 0x54000000\n\tMFD_HUGE_32MB                        = 0x64000000\n\tMFD_HUGE_512KB                       = 0x4c000000\n\tMFD_HUGE_512MB                       = 0x74000000\n\tMFD_HUGE_64KB                        = 0x40000000\n\tMFD_HUGE_8MB                         = 0x5c000000\n\tMFD_HUGE_MASK                        = 0x3f\n\tMFD_HUGE_SHIFT                       = 0x1a\n\tMINIX2_SUPER_MAGIC                   = 0x2468\n\tMINIX2_SUPER_MAGIC2                  = 0x2478\n\tMINIX3_SUPER_MAGIC                   = 0x4d5a\n\tMINIX_SUPER_MAGIC                    = 0x137f\n\tMINIX_SUPER_MAGIC2                   = 0x138f\n\tMNT_DETACH                           = 0x2\n\tMNT_EXPIRE                           = 0x4\n\tMNT_FORCE                            = 0x1\n\tMODULE_INIT_IGNORE_MODVERSIONS       = 0x1\n\tMODULE_INIT_IGNORE_VERMAGIC          = 0x2\n\tMSDOS_SUPER_MAGIC                    = 0x4d44\n\tMSG_BATCH                            = 0x40000\n\tMSG_CMSG_CLOEXEC                     = 0x40000000\n\tMSG_CONFIRM                          = 0x800\n\tMSG_CTRUNC                           = 0x8\n\tMSG_DONTROUTE                        = 0x4\n\tMSG_DONTWAIT                         = 0x40\n\tMSG_EOR                              = 0x80\n\tMSG_ERRQUEUE                         = 0x2000\n\tMSG_FASTOPEN                         = 0x20000000\n\tMSG_FIN                              = 0x200\n\tMSG_MORE                             = 0x8000\n\tMSG_NOSIGNAL                         = 0x4000\n\tMSG_OOB                              = 0x1\n\tMSG_PEEK                             = 0x2\n\tMSG_PROXY                            = 0x10\n\tMSG_RST                              = 0x1000\n\tMSG_SYN                              = 0x400\n\tMSG_TRUNC                            = 0x20\n\tMSG_TRYHARD                          = 0x4\n\tMSG_WAITALL                          = 0x100\n\tMSG_WAITFORONE                       = 0x10000\n\tMSG_ZEROCOPY                         = 0x4000000\n\tMS_ACTIVE                            = 0x40000000\n\tMS_ASYNC                             = 0x1\n\tMS_BIND                              = 0x1000\n\tMS_BORN                              = 0x20000000\n\tMS_DIRSYNC                           = 0x80\n\tMS_INVALIDATE                        = 0x2\n\tMS_I_VERSION                         = 0x800000\n\tMS_KERNMOUNT                         = 0x400000\n\tMS_LAZYTIME                          = 0x2000000\n\tMS_MANDLOCK                          = 0x40\n\tMS_MGC_MSK                           = 0xffff0000\n\tMS_MGC_VAL                           = 0xc0ed0000\n\tMS_MOVE                              = 0x2000\n\tMS_NOATIME                           = 0x400\n\tMS_NODEV                             = 0x4\n\tMS_NODIRATIME                        = 0x800\n\tMS_NOEXEC                            = 0x8\n\tMS_NOREMOTELOCK                      = 0x8000000\n\tMS_NOSEC                             = 0x10000000\n\tMS_NOSUID                            = 0x2\n\tMS_NOUSER                            = -0x80000000\n\tMS_POSIXACL                          = 0x10000\n\tMS_PRIVATE                           = 0x40000\n\tMS_RDONLY                            = 0x1\n\tMS_REC                               = 0x4000\n\tMS_RELATIME                          = 0x200000\n\tMS_REMOUNT                           = 0x20\n\tMS_RMT_MASK                          = 0x2800051\n\tMS_SHARED                            = 0x100000\n\tMS_SILENT                            = 0x8000\n\tMS_SLAVE                             = 0x80000\n\tMS_STRICTATIME                       = 0x1000000\n\tMS_SUBMOUNT                          = 0x4000000\n\tMS_SYNC                              = 0x4\n\tMS_SYNCHRONOUS                       = 0x10\n\tMS_UNBINDABLE                        = 0x20000\n\tMS_VERBOSE                           = 0x8000\n\tMTD_INODE_FS_MAGIC                   = 0x11307854\n\tNAME_MAX                             = 0xff\n\tNCP_SUPER_MAGIC                      = 0x564c\n\tNETLINK_ADD_MEMBERSHIP               = 0x1\n\tNETLINK_AUDIT                        = 0x9\n\tNETLINK_BROADCAST_ERROR              = 0x4\n\tNETLINK_CAP_ACK                      = 0xa\n\tNETLINK_CONNECTOR                    = 0xb\n\tNETLINK_CRYPTO                       = 0x15\n\tNETLINK_DNRTMSG                      = 0xe\n\tNETLINK_DROP_MEMBERSHIP              = 0x2\n\tNETLINK_ECRYPTFS                     = 0x13\n\tNETLINK_EXT_ACK                      = 0xb\n\tNETLINK_FIB_LOOKUP                   = 0xa\n\tNETLINK_FIREWALL                     = 0x3\n\tNETLINK_GENERIC                      = 0x10\n\tNETLINK_GET_STRICT_CHK               = 0xc\n\tNETLINK_INET_DIAG                    = 0x4\n\tNETLINK_IP6_FW                       = 0xd\n\tNETLINK_ISCSI                        = 0x8\n\tNETLINK_KOBJECT_UEVENT               = 0xf\n\tNETLINK_LISTEN_ALL_NSID              = 0x8\n\tNETLINK_LIST_MEMBERSHIPS             = 0x9\n\tNETLINK_NETFILTER                    = 0xc\n\tNETLINK_NFLOG                        = 0x5\n\tNETLINK_NO_ENOBUFS                   = 0x5\n\tNETLINK_PKTINFO                      = 0x3\n\tNETLINK_RDMA                         = 0x14\n\tNETLINK_ROUTE                        = 0x0\n\tNETLINK_RX_RING                      = 0x6\n\tNETLINK_SCSITRANSPORT                = 0x12\n\tNETLINK_SELINUX                      = 0x7\n\tNETLINK_SMC                          = 0x16\n\tNETLINK_SOCK_DIAG                    = 0x4\n\tNETLINK_TX_RING                      = 0x7\n\tNETLINK_UNUSED                       = 0x1\n\tNETLINK_USERSOCK                     = 0x2\n\tNETLINK_XFRM                         = 0x6\n\tNETNSA_MAX                           = 0x5\n\tNETNSA_NSID_NOT_ASSIGNED             = -0x1\n\tNFNETLINK_V0                         = 0x0\n\tNFNLGRP_ACCT_QUOTA                   = 0x8\n\tNFNLGRP_CONNTRACK_DESTROY            = 0x3\n\tNFNLGRP_CONNTRACK_EXP_DESTROY        = 0x6\n\tNFNLGRP_CONNTRACK_EXP_NEW            = 0x4\n\tNFNLGRP_CONNTRACK_EXP_UPDATE         = 0x5\n\tNFNLGRP_CONNTRACK_NEW                = 0x1\n\tNFNLGRP_CONNTRACK_UPDATE             = 0x2\n\tNFNLGRP_MAX                          = 0x9\n\tNFNLGRP_NFTABLES                     = 0x7\n\tNFNLGRP_NFTRACE                      = 0x9\n\tNFNLGRP_NONE                         = 0x0\n\tNFNL_BATCH_MAX                       = 0x1\n\tNFNL_MSG_BATCH_BEGIN                 = 0x10\n\tNFNL_MSG_BATCH_END                   = 0x11\n\tNFNL_NFA_NEST                        = 0x8000\n\tNFNL_SUBSYS_ACCT                     = 0x7\n\tNFNL_SUBSYS_COUNT                    = 0xc\n\tNFNL_SUBSYS_CTHELPER                 = 0x9\n\tNFNL_SUBSYS_CTNETLINK                = 0x1\n\tNFNL_SUBSYS_CTNETLINK_EXP            = 0x2\n\tNFNL_SUBSYS_CTNETLINK_TIMEOUT        = 0x8\n\tNFNL_SUBSYS_IPSET                    = 0x6\n\tNFNL_SUBSYS_NFTABLES                 = 0xa\n\tNFNL_SUBSYS_NFT_COMPAT               = 0xb\n\tNFNL_SUBSYS_NONE                     = 0x0\n\tNFNL_SUBSYS_OSF                      = 0x5\n\tNFNL_SUBSYS_QUEUE                    = 0x3\n\tNFNL_SUBSYS_ULOG                     = 0x4\n\tNFS_SUPER_MAGIC                      = 0x6969\n\tNILFS_SUPER_MAGIC                    = 0x3434\n\tNL0                                  = 0x0\n\tNL1                                  = 0x100\n\tNLA_ALIGNTO                          = 0x4\n\tNLA_F_NESTED                         = 0x8000\n\tNLA_F_NET_BYTEORDER                  = 0x4000\n\tNLA_HDRLEN                           = 0x4\n\tNLDLY                                = 0x100\n\tNLMSG_ALIGNTO                        = 0x4\n\tNLMSG_DONE                           = 0x3\n\tNLMSG_ERROR                          = 0x2\n\tNLMSG_HDRLEN                         = 0x10\n\tNLMSG_MIN_TYPE                       = 0x10\n\tNLMSG_NOOP                           = 0x1\n\tNLMSG_OVERRUN                        = 0x4\n\tNLM_F_ACK                            = 0x4\n\tNLM_F_ACK_TLVS                       = 0x200\n\tNLM_F_APPEND                         = 0x800\n\tNLM_F_ATOMIC                         = 0x400\n\tNLM_F_CAPPED                         = 0x100\n\tNLM_F_CREATE                         = 0x400\n\tNLM_F_DUMP                           = 0x300\n\tNLM_F_DUMP_FILTERED                  = 0x20\n\tNLM_F_DUMP_INTR                      = 0x10\n\tNLM_F_ECHO                           = 0x8\n\tNLM_F_EXCL                           = 0x200\n\tNLM_F_MATCH                          = 0x200\n\tNLM_F_MULTI                          = 0x2\n\tNLM_F_NONREC                         = 0x100\n\tNLM_F_REPLACE                        = 0x100\n\tNLM_F_REQUEST                        = 0x1\n\tNLM_F_ROOT                           = 0x100\n\tNOFLSH                               = 0x80\n\tNSFS_MAGIC                           = 0x6e736673\n\tOCFS2_SUPER_MAGIC                    = 0x7461636f\n\tOCRNL                                = 0x8\n\tOFDEL                                = 0x80\n\tOFILL                                = 0x40\n\tOLCUC                                = 0x2\n\tONLCR                                = 0x4\n\tONLRET                               = 0x20\n\tONOCR                                = 0x10\n\tOPENPROM_SUPER_MAGIC                 = 0x9fa1\n\tOPOST                                = 0x1\n\tOVERLAYFS_SUPER_MAGIC                = 0x794c7630\n\tO_ACCMODE                            = 0x3\n\tO_APPEND                             = 0x400\n\tO_ASYNC                              = 0x2000\n\tO_CLOEXEC                            = 0x80000\n\tO_CREAT                              = 0x40\n\tO_DIRECT                             = 0x4000\n\tO_DIRECTORY                          = 0x10000\n\tO_DSYNC                              = 0x1000\n\tO_EXCL                               = 0x80\n\tO_FSYNC                              = 0x101000\n\tO_LARGEFILE                          = 0x8000\n\tO_NDELAY                             = 0x800\n\tO_NOATIME                            = 0x40000\n\tO_NOCTTY                             = 0x100\n\tO_NOFOLLOW                           = 0x20000\n\tO_NONBLOCK                           = 0x800\n\tO_PATH                               = 0x200000\n\tO_RDONLY                             = 0x0\n\tO_RDWR                               = 0x2\n\tO_RSYNC                              = 0x101000\n\tO_SYNC                               = 0x101000\n\tO_TMPFILE                            = 0x410000\n\tO_TRUNC                              = 0x200\n\tO_WRONLY                             = 0x1\n\tPACKET_ADD_MEMBERSHIP                = 0x1\n\tPACKET_AUXDATA                       = 0x8\n\tPACKET_BROADCAST                     = 0x1\n\tPACKET_COPY_THRESH                   = 0x7\n\tPACKET_DROP_MEMBERSHIP               = 0x2\n\tPACKET_FANOUT                        = 0x12\n\tPACKET_FANOUT_CBPF                   = 0x6\n\tPACKET_FANOUT_CPU                    = 0x2\n\tPACKET_FANOUT_DATA                   = 0x16\n\tPACKET_FANOUT_EBPF                   = 0x7\n\tPACKET_FANOUT_FLAG_DEFRAG            = 0x8000\n\tPACKET_FANOUT_FLAG_ROLLOVER          = 0x1000\n\tPACKET_FANOUT_FLAG_UNIQUEID          = 0x2000\n\tPACKET_FANOUT_HASH                   = 0x0\n\tPACKET_FANOUT_LB                     = 0x1\n\tPACKET_FANOUT_QM                     = 0x5\n\tPACKET_FANOUT_RND                    = 0x4\n\tPACKET_FANOUT_ROLLOVER               = 0x3\n\tPACKET_FASTROUTE                     = 0x6\n\tPACKET_HDRLEN                        = 0xb\n\tPACKET_HOST                          = 0x0\n\tPACKET_IGNORE_OUTGOING               = 0x17\n\tPACKET_KERNEL                        = 0x7\n\tPACKET_LOOPBACK                      = 0x5\n\tPACKET_LOSS                          = 0xe\n\tPACKET_MR_ALLMULTI                   = 0x2\n\tPACKET_MR_MULTICAST                  = 0x0\n\tPACKET_MR_PROMISC                    = 0x1\n\tPACKET_MR_UNICAST                    = 0x3\n\tPACKET_MULTICAST                     = 0x2\n\tPACKET_ORIGDEV                       = 0x9\n\tPACKET_OTHERHOST                     = 0x3\n\tPACKET_OUTGOING                      = 0x4\n\tPACKET_QDISC_BYPASS                  = 0x14\n\tPACKET_RECV_OUTPUT                   = 0x3\n\tPACKET_RESERVE                       = 0xc\n\tPACKET_ROLLOVER_STATS                = 0x15\n\tPACKET_RX_RING                       = 0x5\n\tPACKET_STATISTICS                    = 0x6\n\tPACKET_TIMESTAMP                     = 0x11\n\tPACKET_TX_HAS_OFF                    = 0x13\n\tPACKET_TX_RING                       = 0xd\n\tPACKET_TX_TIMESTAMP                  = 0x10\n\tPACKET_USER                          = 0x6\n\tPACKET_VERSION                       = 0xa\n\tPACKET_VNET_HDR                      = 0xf\n\tPARENB                               = 0x100\n\tPARITY_CRC16_PR0                     = 0x2\n\tPARITY_CRC16_PR0_CCITT               = 0x4\n\tPARITY_CRC16_PR1                     = 0x3\n\tPARITY_CRC16_PR1_CCITT               = 0x5\n\tPARITY_CRC32_PR0_CCITT               = 0x6\n\tPARITY_CRC32_PR1_CCITT               = 0x7\n\tPARITY_DEFAULT                       = 0x0\n\tPARITY_NONE                          = 0x1\n\tPARMRK                               = 0x8\n\tPARODD                               = 0x200\n\tPENDIN                               = 0x4000\n\tPERF_EVENT_IOC_DISABLE               = 0x2401\n\tPERF_EVENT_IOC_ENABLE                = 0x2400\n\tPERF_EVENT_IOC_ID                    = 0x80042407\n\tPERF_EVENT_IOC_MODIFY_ATTRIBUTES     = 0x4004240b\n\tPERF_EVENT_IOC_PAUSE_OUTPUT          = 0x40042409\n\tPERF_EVENT_IOC_PERIOD                = 0x40082404\n\tPERF_EVENT_IOC_QUERY_BPF             = 0xc004240a\n\tPERF_EVENT_IOC_REFRESH               = 0x2402\n\tPERF_EVENT_IOC_RESET                 = 0x2403\n\tPERF_EVENT_IOC_SET_BPF               = 0x40042408\n\tPERF_EVENT_IOC_SET_FILTER            = 0x40042406\n\tPERF_EVENT_IOC_SET_OUTPUT            = 0x2405\n\tPIPEFS_MAGIC                         = 0x50495045\n\tPPPIOCATTACH                         = 0x4004743d\n\tPPPIOCATTCHAN                        = 0x40047438\n\tPPPIOCCONNECT                        = 0x4004743a\n\tPPPIOCDETACH                         = 0x4004743c\n\tPPPIOCDISCONN                        = 0x7439\n\tPPPIOCGASYNCMAP                      = 0x80047458\n\tPPPIOCGCHAN                          = 0x80047437\n\tPPPIOCGDEBUG                         = 0x80047441\n\tPPPIOCGFLAGS                         = 0x8004745a\n\tPPPIOCGIDLE                          = 0x8008743f\n\tPPPIOCGL2TPSTATS                     = 0x80487436\n\tPPPIOCGMRU                           = 0x80047453\n\tPPPIOCGNPMODE                        = 0xc008744c\n\tPPPIOCGRASYNCMAP                     = 0x80047455\n\tPPPIOCGUNIT                          = 0x80047456\n\tPPPIOCGXASYNCMAP                     = 0x80207450\n\tPPPIOCNEWUNIT                        = 0xc004743e\n\tPPPIOCSACTIVE                        = 0x40087446\n\tPPPIOCSASYNCMAP                      = 0x40047457\n\tPPPIOCSCOMPRESS                      = 0x400c744d\n\tPPPIOCSDEBUG                         = 0x40047440\n\tPPPIOCSFLAGS                         = 0x40047459\n\tPPPIOCSMAXCID                        = 0x40047451\n\tPPPIOCSMRRU                          = 0x4004743b\n\tPPPIOCSMRU                           = 0x40047452\n\tPPPIOCSNPMODE                        = 0x4008744b\n\tPPPIOCSPASS                          = 0x40087447\n\tPPPIOCSRASYNCMAP                     = 0x40047454\n\tPPPIOCSXASYNCMAP                     = 0x4020744f\n\tPPPIOCXFERUNIT                       = 0x744e\n\tPRIO_PGRP                            = 0x1\n\tPRIO_PROCESS                         = 0x0\n\tPRIO_USER                            = 0x2\n\tPROC_SUPER_MAGIC                     = 0x9fa0\n\tPROT_EXEC                            = 0x4\n\tPROT_GROWSDOWN                       = 0x1000000\n\tPROT_GROWSUP                         = 0x2000000\n\tPROT_NONE                            = 0x0\n\tPROT_READ                            = 0x1\n\tPROT_WRITE                           = 0x2\n\tPR_CAPBSET_DROP                      = 0x18\n\tPR_CAPBSET_READ                      = 0x17\n\tPR_CAP_AMBIENT                       = 0x2f\n\tPR_CAP_AMBIENT_CLEAR_ALL             = 0x4\n\tPR_CAP_AMBIENT_IS_SET                = 0x1\n\tPR_CAP_AMBIENT_LOWER                 = 0x3\n\tPR_CAP_AMBIENT_RAISE                 = 0x2\n\tPR_ENDIAN_BIG                        = 0x0\n\tPR_ENDIAN_LITTLE                     = 0x1\n\tPR_ENDIAN_PPC_LITTLE                 = 0x2\n\tPR_FPEMU_NOPRINT                     = 0x1\n\tPR_FPEMU_SIGFPE                      = 0x2\n\tPR_FP_EXC_ASYNC                      = 0x2\n\tPR_FP_EXC_DISABLED                   = 0x0\n\tPR_FP_EXC_DIV                        = 0x10000\n\tPR_FP_EXC_INV                        = 0x100000\n\tPR_FP_EXC_NONRECOV                   = 0x1\n\tPR_FP_EXC_OVF                        = 0x20000\n\tPR_FP_EXC_PRECISE                    = 0x3\n\tPR_FP_EXC_RES                        = 0x80000\n\tPR_FP_EXC_SW_ENABLE                  = 0x80\n\tPR_FP_EXC_UND                        = 0x40000\n\tPR_FP_MODE_FR                        = 0x1\n\tPR_FP_MODE_FRE                       = 0x2\n\tPR_GET_CHILD_SUBREAPER               = 0x25\n\tPR_GET_DUMPABLE                      = 0x3\n\tPR_GET_ENDIAN                        = 0x13\n\tPR_GET_FPEMU                         = 0x9\n\tPR_GET_FPEXC                         = 0xb\n\tPR_GET_FP_MODE                       = 0x2e\n\tPR_GET_KEEPCAPS                      = 0x7\n\tPR_GET_NAME                          = 0x10\n\tPR_GET_NO_NEW_PRIVS                  = 0x27\n\tPR_GET_PDEATHSIG                     = 0x2\n\tPR_GET_SECCOMP                       = 0x15\n\tPR_GET_SECUREBITS                    = 0x1b\n\tPR_GET_SPECULATION_CTRL              = 0x34\n\tPR_GET_THP_DISABLE                   = 0x2a\n\tPR_GET_TID_ADDRESS                   = 0x28\n\tPR_GET_TIMERSLACK                    = 0x1e\n\tPR_GET_TIMING                        = 0xd\n\tPR_GET_TSC                           = 0x19\n\tPR_GET_UNALIGN                       = 0x5\n\tPR_MCE_KILL                          = 0x21\n\tPR_MCE_KILL_CLEAR                    = 0x0\n\tPR_MCE_KILL_DEFAULT                  = 0x2\n\tPR_MCE_KILL_EARLY                    = 0x1\n\tPR_MCE_KILL_GET                      = 0x22\n\tPR_MCE_KILL_LATE                     = 0x0\n\tPR_MCE_KILL_SET                      = 0x1\n\tPR_MPX_DISABLE_MANAGEMENT            = 0x2c\n\tPR_MPX_ENABLE_MANAGEMENT             = 0x2b\n\tPR_PAC_APDAKEY                       = 0x4\n\tPR_PAC_APDBKEY                       = 0x8\n\tPR_PAC_APGAKEY                       = 0x10\n\tPR_PAC_APIAKEY                       = 0x1\n\tPR_PAC_APIBKEY                       = 0x2\n\tPR_PAC_RESET_KEYS                    = 0x36\n\tPR_SET_CHILD_SUBREAPER               = 0x24\n\tPR_SET_DUMPABLE                      = 0x4\n\tPR_SET_ENDIAN                        = 0x14\n\tPR_SET_FPEMU                         = 0xa\n\tPR_SET_FPEXC                         = 0xc\n\tPR_SET_FP_MODE                       = 0x2d\n\tPR_SET_KEEPCAPS                      = 0x8\n\tPR_SET_MM                            = 0x23\n\tPR_SET_MM_ARG_END                    = 0x9\n\tPR_SET_MM_ARG_START                  = 0x8\n\tPR_SET_MM_AUXV                       = 0xc\n\tPR_SET_MM_BRK                        = 0x7\n\tPR_SET_MM_END_CODE                   = 0x2\n\tPR_SET_MM_END_DATA                   = 0x4\n\tPR_SET_MM_ENV_END                    = 0xb\n\tPR_SET_MM_ENV_START                  = 0xa\n\tPR_SET_MM_EXE_FILE                   = 0xd\n\tPR_SET_MM_MAP                        = 0xe\n\tPR_SET_MM_MAP_SIZE                   = 0xf\n\tPR_SET_MM_START_BRK                  = 0x6\n\tPR_SET_MM_START_CODE                 = 0x1\n\tPR_SET_MM_START_DATA                 = 0x3\n\tPR_SET_MM_START_STACK                = 0x5\n\tPR_SET_NAME                          = 0xf\n\tPR_SET_NO_NEW_PRIVS                  = 0x26\n\tPR_SET_PDEATHSIG                     = 0x1\n\tPR_SET_PTRACER                       = 0x59616d61\n\tPR_SET_PTRACER_ANY                   = 0xffffffff\n\tPR_SET_SECCOMP                       = 0x16\n\tPR_SET_SECUREBITS                    = 0x1c\n\tPR_SET_SPECULATION_CTRL              = 0x35\n\tPR_SET_THP_DISABLE                   = 0x29\n\tPR_SET_TIMERSLACK                    = 0x1d\n\tPR_SET_TIMING                        = 0xe\n\tPR_SET_TSC                           = 0x1a\n\tPR_SET_UNALIGN                       = 0x6\n\tPR_SPEC_DISABLE                      = 0x4\n\tPR_SPEC_DISABLE_NOEXEC               = 0x10\n\tPR_SPEC_ENABLE                       = 0x2\n\tPR_SPEC_FORCE_DISABLE                = 0x8\n\tPR_SPEC_INDIRECT_BRANCH              = 0x1\n\tPR_SPEC_NOT_AFFECTED                 = 0x0\n\tPR_SPEC_PRCTL                        = 0x1\n\tPR_SPEC_STORE_BYPASS                 = 0x0\n\tPR_SVE_GET_VL                        = 0x33\n\tPR_SVE_SET_VL                        = 0x32\n\tPR_SVE_SET_VL_ONEXEC                 = 0x40000\n\tPR_SVE_VL_INHERIT                    = 0x20000\n\tPR_SVE_VL_LEN_MASK                   = 0xffff\n\tPR_TASK_PERF_EVENTS_DISABLE          = 0x1f\n\tPR_TASK_PERF_EVENTS_ENABLE           = 0x20\n\tPR_TIMING_STATISTICAL                = 0x0\n\tPR_TIMING_TIMESTAMP                  = 0x1\n\tPR_TSC_ENABLE                        = 0x1\n\tPR_TSC_SIGSEGV                       = 0x2\n\tPR_UNALIGN_NOPRINT                   = 0x1\n\tPR_UNALIGN_SIGBUS                    = 0x2\n\tPSTOREFS_MAGIC                       = 0x6165676c\n\tPTRACE_ATTACH                        = 0x10\n\tPTRACE_CONT                          = 0x7\n\tPTRACE_DETACH                        = 0x11\n\tPTRACE_EVENT_CLONE                   = 0x3\n\tPTRACE_EVENT_EXEC                    = 0x4\n\tPTRACE_EVENT_EXIT                    = 0x6\n\tPTRACE_EVENT_FORK                    = 0x1\n\tPTRACE_EVENT_SECCOMP                 = 0x7\n\tPTRACE_EVENT_STOP                    = 0x80\n\tPTRACE_EVENT_VFORK                   = 0x2\n\tPTRACE_EVENT_VFORK_DONE              = 0x5\n\tPTRACE_GETEVENTMSG                   = 0x4201\n\tPTRACE_GETFPREGS                     = 0xe\n\tPTRACE_GETFPXREGS                    = 0x12\n\tPTRACE_GETREGS                       = 0xc\n\tPTRACE_GETREGSET                     = 0x4204\n\tPTRACE_GETSIGINFO                    = 0x4202\n\tPTRACE_GETSIGMASK                    = 0x420a\n\tPTRACE_GET_THREAD_AREA               = 0x19\n\tPTRACE_INTERRUPT                     = 0x4207\n\tPTRACE_KILL                          = 0x8\n\tPTRACE_LISTEN                        = 0x4208\n\tPTRACE_OLDSETOPTIONS                 = 0x15\n\tPTRACE_O_EXITKILL                    = 0x100000\n\tPTRACE_O_MASK                        = 0x3000ff\n\tPTRACE_O_SUSPEND_SECCOMP             = 0x200000\n\tPTRACE_O_TRACECLONE                  = 0x8\n\tPTRACE_O_TRACEEXEC                   = 0x10\n\tPTRACE_O_TRACEEXIT                   = 0x40\n\tPTRACE_O_TRACEFORK                   = 0x2\n\tPTRACE_O_TRACESECCOMP                = 0x80\n\tPTRACE_O_TRACESYSGOOD                = 0x1\n\tPTRACE_O_TRACEVFORK                  = 0x4\n\tPTRACE_O_TRACEVFORKDONE              = 0x20\n\tPTRACE_PEEKDATA                      = 0x2\n\tPTRACE_PEEKSIGINFO                   = 0x4209\n\tPTRACE_PEEKSIGINFO_SHARED            = 0x1\n\tPTRACE_PEEKTEXT                      = 0x1\n\tPTRACE_PEEKUSR                       = 0x3\n\tPTRACE_POKEDATA                      = 0x5\n\tPTRACE_POKETEXT                      = 0x4\n\tPTRACE_POKEUSR                       = 0x6\n\tPTRACE_SECCOMP_GET_FILTER            = 0x420c\n\tPTRACE_SECCOMP_GET_METADATA          = 0x420d\n\tPTRACE_SEIZE                         = 0x4206\n\tPTRACE_SETFPREGS                     = 0xf\n\tPTRACE_SETFPXREGS                    = 0x13\n\tPTRACE_SETOPTIONS                    = 0x4200\n\tPTRACE_SETREGS                       = 0xd\n\tPTRACE_SETREGSET                     = 0x4205\n\tPTRACE_SETSIGINFO                    = 0x4203\n\tPTRACE_SETSIGMASK                    = 0x420b\n\tPTRACE_SET_THREAD_AREA               = 0x1a\n\tPTRACE_SINGLEBLOCK                   = 0x21\n\tPTRACE_SINGLESTEP                    = 0x9\n\tPTRACE_SYSCALL                       = 0x18\n\tPTRACE_SYSEMU                        = 0x1f\n\tPTRACE_SYSEMU_SINGLESTEP             = 0x20\n\tPTRACE_TRACEME                       = 0x0\n\tQNX4_SUPER_MAGIC                     = 0x2f\n\tQNX6_SUPER_MAGIC                     = 0x68191122\n\tRAMFS_MAGIC                          = 0x858458f6\n\tRDTGROUP_SUPER_MAGIC                 = 0x7655821\n\tREISERFS_SUPER_MAGIC                 = 0x52654973\n\tRENAME_EXCHANGE                      = 0x2\n\tRENAME_NOREPLACE                     = 0x1\n\tRENAME_WHITEOUT                      = 0x4\n\tRLIMIT_AS                            = 0x9\n\tRLIMIT_CORE                          = 0x4\n\tRLIMIT_CPU                           = 0x0\n\tRLIMIT_DATA                          = 0x2\n\tRLIMIT_FSIZE                         = 0x1\n\tRLIMIT_LOCKS                         = 0xa\n\tRLIMIT_MEMLOCK                       = 0x8\n\tRLIMIT_MSGQUEUE                      = 0xc\n\tRLIMIT_NICE                          = 0xd\n\tRLIMIT_NOFILE                        = 0x7\n\tRLIMIT_NPROC                         = 0x6\n\tRLIMIT_RSS                           = 0x5\n\tRLIMIT_RTPRIO                        = 0xe\n\tRLIMIT_RTTIME                        = 0xf\n\tRLIMIT_SIGPENDING                    = 0xb\n\tRLIMIT_STACK                         = 0x3\n\tRLIM_INFINITY                        = 0xffffffffffffffff\n\tRNDADDENTROPY                        = 0x40085203\n\tRNDADDTOENTCNT                       = 0x40045201\n\tRNDCLEARPOOL                         = 0x5206\n\tRNDGETENTCNT                         = 0x80045200\n\tRNDGETPOOL                           = 0x80085202\n\tRNDRESEEDCRNG                        = 0x5207\n\tRNDZAPENTCNT                         = 0x5204\n\tRTAX_ADVMSS                          = 0x8\n\tRTAX_CC_ALGO                         = 0x10\n\tRTAX_CWND                            = 0x7\n\tRTAX_FASTOPEN_NO_COOKIE              = 0x11\n\tRTAX_FEATURES                        = 0xc\n\tRTAX_FEATURE_ALLFRAG                 = 0x8\n\tRTAX_FEATURE_ECN                     = 0x1\n\tRTAX_FEATURE_MASK                    = 0xf\n\tRTAX_FEATURE_SACK                    = 0x2\n\tRTAX_FEATURE_TIMESTAMP               = 0x4\n\tRTAX_HOPLIMIT                        = 0xa\n\tRTAX_INITCWND                        = 0xb\n\tRTAX_INITRWND                        = 0xe\n\tRTAX_LOCK                            = 0x1\n\tRTAX_MAX                             = 0x11\n\tRTAX_MTU                             = 0x2\n\tRTAX_QUICKACK                        = 0xf\n\tRTAX_REORDERING                      = 0x9\n\tRTAX_RTO_MIN                         = 0xd\n\tRTAX_RTT                             = 0x4\n\tRTAX_RTTVAR                          = 0x5\n\tRTAX_SSTHRESH                        = 0x6\n\tRTAX_UNSPEC                          = 0x0\n\tRTAX_WINDOW                          = 0x3\n\tRTA_ALIGNTO                          = 0x4\n\tRTA_MAX                              = 0x1d\n\tRTCF_DIRECTSRC                       = 0x4000000\n\tRTCF_DOREDIRECT                      = 0x1000000\n\tRTCF_LOG                             = 0x2000000\n\tRTCF_MASQ                            = 0x400000\n\tRTCF_NAT                             = 0x800000\n\tRTCF_VALVE                           = 0x200000\n\tRTC_AF                               = 0x20\n\tRTC_AIE_OFF                          = 0x7002\n\tRTC_AIE_ON                           = 0x7001\n\tRTC_ALM_READ                         = 0x80247008\n\tRTC_ALM_SET                          = 0x40247007\n\tRTC_EPOCH_READ                       = 0x8004700d\n\tRTC_EPOCH_SET                        = 0x4004700e\n\tRTC_IRQF                             = 0x80\n\tRTC_IRQP_READ                        = 0x8004700b\n\tRTC_IRQP_SET                         = 0x4004700c\n\tRTC_MAX_FREQ                         = 0x2000\n\tRTC_PF                               = 0x40\n\tRTC_PIE_OFF                          = 0x7006\n\tRTC_PIE_ON                           = 0x7005\n\tRTC_PLL_GET                          = 0x801c7011\n\tRTC_PLL_SET                          = 0x401c7012\n\tRTC_RD_TIME                          = 0x80247009\n\tRTC_SET_TIME                         = 0x4024700a\n\tRTC_UF                               = 0x10\n\tRTC_UIE_OFF                          = 0x7004\n\tRTC_UIE_ON                           = 0x7003\n\tRTC_VL_CLR                           = 0x7014\n\tRTC_VL_READ                          = 0x80047013\n\tRTC_WIE_OFF                          = 0x7010\n\tRTC_WIE_ON                           = 0x700f\n\tRTC_WKALM_RD                         = 0x80287010\n\tRTC_WKALM_SET                        = 0x4028700f\n\tRTF_ADDRCLASSMASK                    = 0xf8000000\n\tRTF_ADDRCONF                         = 0x40000\n\tRTF_ALLONLINK                        = 0x20000\n\tRTF_BROADCAST                        = 0x10000000\n\tRTF_CACHE                            = 0x1000000\n\tRTF_DEFAULT                          = 0x10000\n\tRTF_DYNAMIC                          = 0x10\n\tRTF_FLOW                             = 0x2000000\n\tRTF_GATEWAY                          = 0x2\n\tRTF_HOST                             = 0x4\n\tRTF_INTERFACE                        = 0x40000000\n\tRTF_IRTT                             = 0x100\n\tRTF_LINKRT                           = 0x100000\n\tRTF_LOCAL                            = 0x80000000\n\tRTF_MODIFIED                         = 0x20\n\tRTF_MSS                              = 0x40\n\tRTF_MTU                              = 0x40\n\tRTF_MULTICAST                        = 0x20000000\n\tRTF_NAT                              = 0x8000000\n\tRTF_NOFORWARD                        = 0x1000\n\tRTF_NONEXTHOP                        = 0x200000\n\tRTF_NOPMTUDISC                       = 0x4000\n\tRTF_POLICY                           = 0x4000000\n\tRTF_REINSTATE                        = 0x8\n\tRTF_REJECT                           = 0x200\n\tRTF_STATIC                           = 0x400\n\tRTF_THROW                            = 0x2000\n\tRTF_UP                               = 0x1\n\tRTF_WINDOW                           = 0x80\n\tRTF_XRESOLVE                         = 0x800\n\tRTM_BASE                             = 0x10\n\tRTM_DELACTION                        = 0x31\n\tRTM_DELADDR                          = 0x15\n\tRTM_DELADDRLABEL                     = 0x49\n\tRTM_DELCHAIN                         = 0x65\n\tRTM_DELLINK                          = 0x11\n\tRTM_DELMDB                           = 0x55\n\tRTM_DELNEIGH                         = 0x1d\n\tRTM_DELNETCONF                       = 0x51\n\tRTM_DELNSID                          = 0x59\n\tRTM_DELQDISC                         = 0x25\n\tRTM_DELROUTE                         = 0x19\n\tRTM_DELRULE                          = 0x21\n\tRTM_DELTCLASS                        = 0x29\n\tRTM_DELTFILTER                       = 0x2d\n\tRTM_F_CLONED                         = 0x200\n\tRTM_F_EQUALIZE                       = 0x400\n\tRTM_F_FIB_MATCH                      = 0x2000\n\tRTM_F_LOOKUP_TABLE                   = 0x1000\n\tRTM_F_NOTIFY                         = 0x100\n\tRTM_F_PREFIX                         = 0x800\n\tRTM_GETACTION                        = 0x32\n\tRTM_GETADDR                          = 0x16\n\tRTM_GETADDRLABEL                     = 0x4a\n\tRTM_GETANYCAST                       = 0x3e\n\tRTM_GETCHAIN                         = 0x66\n\tRTM_GETDCB                           = 0x4e\n\tRTM_GETLINK                          = 0x12\n\tRTM_GETMDB                           = 0x56\n\tRTM_GETMULTICAST                     = 0x3a\n\tRTM_GETNEIGH                         = 0x1e\n\tRTM_GETNEIGHTBL                      = 0x42\n\tRTM_GETNETCONF                       = 0x52\n\tRTM_GETNSID                          = 0x5a\n\tRTM_GETQDISC                         = 0x26\n\tRTM_GETROUTE                         = 0x1a\n\tRTM_GETRULE                          = 0x22\n\tRTM_GETSTATS                         = 0x5e\n\tRTM_GETTCLASS                        = 0x2a\n\tRTM_GETTFILTER                       = 0x2e\n\tRTM_MAX                              = 0x67\n\tRTM_NEWACTION                        = 0x30\n\tRTM_NEWADDR                          = 0x14\n\tRTM_NEWADDRLABEL                     = 0x48\n\tRTM_NEWCACHEREPORT                   = 0x60\n\tRTM_NEWCHAIN                         = 0x64\n\tRTM_NEWLINK                          = 0x10\n\tRTM_NEWMDB                           = 0x54\n\tRTM_NEWNDUSEROPT                     = 0x44\n\tRTM_NEWNEIGH                         = 0x1c\n\tRTM_NEWNEIGHTBL                      = 0x40\n\tRTM_NEWNETCONF                       = 0x50\n\tRTM_NEWNSID                          = 0x58\n\tRTM_NEWPREFIX                        = 0x34\n\tRTM_NEWQDISC                         = 0x24\n\tRTM_NEWROUTE                         = 0x18\n\tRTM_NEWRULE                          = 0x20\n\tRTM_NEWSTATS                         = 0x5c\n\tRTM_NEWTCLASS                        = 0x28\n\tRTM_NEWTFILTER                       = 0x2c\n\tRTM_NR_FAMILIES                      = 0x16\n\tRTM_NR_MSGTYPES                      = 0x58\n\tRTM_SETDCB                           = 0x4f\n\tRTM_SETLINK                          = 0x13\n\tRTM_SETNEIGHTBL                      = 0x43\n\tRTNH_ALIGNTO                         = 0x4\n\tRTNH_COMPARE_MASK                    = 0x19\n\tRTNH_F_DEAD                          = 0x1\n\tRTNH_F_LINKDOWN                      = 0x10\n\tRTNH_F_OFFLOAD                       = 0x8\n\tRTNH_F_ONLINK                        = 0x4\n\tRTNH_F_PERVASIVE                     = 0x2\n\tRTNH_F_UNRESOLVED                    = 0x20\n\tRTN_MAX                              = 0xb\n\tRTPROT_BABEL                         = 0x2a\n\tRTPROT_BGP                           = 0xba\n\tRTPROT_BIRD                          = 0xc\n\tRTPROT_BOOT                          = 0x3\n\tRTPROT_DHCP                          = 0x10\n\tRTPROT_DNROUTED                      = 0xd\n\tRTPROT_EIGRP                         = 0xc0\n\tRTPROT_GATED                         = 0x8\n\tRTPROT_ISIS                          = 0xbb\n\tRTPROT_KERNEL                        = 0x2\n\tRTPROT_MROUTED                       = 0x11\n\tRTPROT_MRT                           = 0xa\n\tRTPROT_NTK                           = 0xf\n\tRTPROT_OSPF                          = 0xbc\n\tRTPROT_RA                            = 0x9\n\tRTPROT_REDIRECT                      = 0x1\n\tRTPROT_RIP                           = 0xbd\n\tRTPROT_STATIC                        = 0x4\n\tRTPROT_UNSPEC                        = 0x0\n\tRTPROT_XORP                          = 0xe\n\tRTPROT_ZEBRA                         = 0xb\n\tRT_CLASS_DEFAULT                     = 0xfd\n\tRT_CLASS_LOCAL                       = 0xff\n\tRT_CLASS_MAIN                        = 0xfe\n\tRT_CLASS_MAX                         = 0xff\n\tRT_CLASS_UNSPEC                      = 0x0\n\tRUSAGE_CHILDREN                      = -0x1\n\tRUSAGE_SELF                          = 0x0\n\tRUSAGE_THREAD                        = 0x1\n\tSCM_CREDENTIALS                      = 0x2\n\tSCM_RIGHTS                           = 0x1\n\tSCM_TIMESTAMP                        = 0x1d\n\tSCM_TIMESTAMPING                     = 0x25\n\tSCM_TIMESTAMPING_OPT_STATS           = 0x36\n\tSCM_TIMESTAMPING_PKTINFO             = 0x3a\n\tSCM_TIMESTAMPNS                      = 0x23\n\tSCM_TXTIME                           = 0x3d\n\tSCM_WIFI_STATUS                      = 0x29\n\tSC_LOG_FLUSH                         = 0x100000\n\tSECCOMP_MODE_DISABLED                = 0x0\n\tSECCOMP_MODE_FILTER                  = 0x2\n\tSECCOMP_MODE_STRICT                  = 0x1\n\tSECURITYFS_MAGIC                     = 0x73636673\n\tSELINUX_MAGIC                        = 0xf97cff8c\n\tSFD_CLOEXEC                          = 0x80000\n\tSFD_NONBLOCK                         = 0x800\n\tSHUT_RD                              = 0x0\n\tSHUT_RDWR                            = 0x2\n\tSHUT_WR                              = 0x1\n\tSIOCADDDLCI                          = 0x8980\n\tSIOCADDMULTI                         = 0x8931\n\tSIOCADDRT                            = 0x890b\n\tSIOCATMARK                           = 0x8905\n\tSIOCBONDCHANGEACTIVE                 = 0x8995\n\tSIOCBONDENSLAVE                      = 0x8990\n\tSIOCBONDINFOQUERY                    = 0x8994\n\tSIOCBONDRELEASE                      = 0x8991\n\tSIOCBONDSETHWADDR                    = 0x8992\n\tSIOCBONDSLAVEINFOQUERY               = 0x8993\n\tSIOCBRADDBR                          = 0x89a0\n\tSIOCBRADDIF                          = 0x89a2\n\tSIOCBRDELBR                          = 0x89a1\n\tSIOCBRDELIF                          = 0x89a3\n\tSIOCDARP                             = 0x8953\n\tSIOCDELDLCI                          = 0x8981\n\tSIOCDELMULTI                         = 0x8932\n\tSIOCDELRT                            = 0x890c\n\tSIOCDEVPRIVATE                       = 0x89f0\n\tSIOCDIFADDR                          = 0x8936\n\tSIOCDRARP                            = 0x8960\n\tSIOCETHTOOL                          = 0x8946\n\tSIOCGARP                             = 0x8954\n\tSIOCGHWTSTAMP                        = 0x89b1\n\tSIOCGIFADDR                          = 0x8915\n\tSIOCGIFBR                            = 0x8940\n\tSIOCGIFBRDADDR                       = 0x8919\n\tSIOCGIFCONF                          = 0x8912\n\tSIOCGIFCOUNT                         = 0x8938\n\tSIOCGIFDSTADDR                       = 0x8917\n\tSIOCGIFENCAP                         = 0x8925\n\tSIOCGIFFLAGS                         = 0x8913\n\tSIOCGIFHWADDR                        = 0x8927\n\tSIOCGIFINDEX                         = 0x8933\n\tSIOCGIFMAP                           = 0x8970\n\tSIOCGIFMEM                           = 0x891f\n\tSIOCGIFMETRIC                        = 0x891d\n\tSIOCGIFMTU                           = 0x8921\n\tSIOCGIFNAME                          = 0x8910\n\tSIOCGIFNETMASK                       = 0x891b\n\tSIOCGIFPFLAGS                        = 0x8935\n\tSIOCGIFSLAVE                         = 0x8929\n\tSIOCGIFTXQLEN                        = 0x8942\n\tSIOCGIFVLAN                          = 0x8982\n\tSIOCGMIIPHY                          = 0x8947\n\tSIOCGMIIREG                          = 0x8948\n\tSIOCGPGRP                            = 0x8904\n\tSIOCGPPPCSTATS                       = 0x89f2\n\tSIOCGPPPSTATS                        = 0x89f0\n\tSIOCGPPPVER                          = 0x89f1\n\tSIOCGRARP                            = 0x8961\n\tSIOCGSKNS                            = 0x894c\n\tSIOCGSTAMP                           = 0x8906\n\tSIOCGSTAMPNS                         = 0x8907\n\tSIOCINQ                              = 0x541b\n\tSIOCOUTQ                             = 0x5411\n\tSIOCOUTQNSD                          = 0x894b\n\tSIOCPROTOPRIVATE                     = 0x89e0\n\tSIOCRTMSG                            = 0x890d\n\tSIOCSARP                             = 0x8955\n\tSIOCSHWTSTAMP                        = 0x89b0\n\tSIOCSIFADDR                          = 0x8916\n\tSIOCSIFBR                            = 0x8941\n\tSIOCSIFBRDADDR                       = 0x891a\n\tSIOCSIFDSTADDR                       = 0x8918\n\tSIOCSIFENCAP                         = 0x8926\n\tSIOCSIFFLAGS                         = 0x8914\n\tSIOCSIFHWADDR                        = 0x8924\n\tSIOCSIFHWBROADCAST                   = 0x8937\n\tSIOCSIFLINK                          = 0x8911\n\tSIOCSIFMAP                           = 0x8971\n\tSIOCSIFMEM                           = 0x8920\n\tSIOCSIFMETRIC                        = 0x891e\n\tSIOCSIFMTU                           = 0x8922\n\tSIOCSIFNAME                          = 0x8923\n\tSIOCSIFNETMASK                       = 0x891c\n\tSIOCSIFPFLAGS                        = 0x8934\n\tSIOCSIFSLAVE                         = 0x8930\n\tSIOCSIFTXQLEN                        = 0x8943\n\tSIOCSIFVLAN                          = 0x8983\n\tSIOCSMIIREG                          = 0x8949\n\tSIOCSPGRP                            = 0x8902\n\tSIOCSRARP                            = 0x8962\n\tSIOCWANDEV                           = 0x894a\n\tSMACK_MAGIC                          = 0x43415d53\n\tSMART_AUTOSAVE                       = 0xd2\n\tSMART_AUTO_OFFLINE                   = 0xdb\n\tSMART_DISABLE                        = 0xd9\n\tSMART_ENABLE                         = 0xd8\n\tSMART_HCYL_PASS                      = 0xc2\n\tSMART_IMMEDIATE_OFFLINE              = 0xd4\n\tSMART_LCYL_PASS                      = 0x4f\n\tSMART_READ_LOG_SECTOR                = 0xd5\n\tSMART_READ_THRESHOLDS                = 0xd1\n\tSMART_READ_VALUES                    = 0xd0\n\tSMART_SAVE                           = 0xd3\n\tSMART_STATUS                         = 0xda\n\tSMART_WRITE_LOG_SECTOR               = 0xd6\n\tSMART_WRITE_THRESHOLDS               = 0xd7\n\tSMB_SUPER_MAGIC                      = 0x517b\n\tSOCKFS_MAGIC                         = 0x534f434b\n\tSOCK_CLOEXEC                         = 0x80000\n\tSOCK_DCCP                            = 0x6\n\tSOCK_DGRAM                           = 0x2\n\tSOCK_IOC_TYPE                        = 0x89\n\tSOCK_NONBLOCK                        = 0x800\n\tSOCK_PACKET                          = 0xa\n\tSOCK_RAW                             = 0x3\n\tSOCK_RDM                             = 0x4\n\tSOCK_SEQPACKET                       = 0x5\n\tSOCK_STREAM                          = 0x1\n\tSOL_AAL                              = 0x109\n\tSOL_ALG                              = 0x117\n\tSOL_ATM                              = 0x108\n\tSOL_CAIF                             = 0x116\n\tSOL_CAN_BASE                         = 0x64\n\tSOL_DCCP                             = 0x10d\n\tSOL_DECNET                           = 0x105\n\tSOL_ICMPV6                           = 0x3a\n\tSOL_IP                               = 0x0\n\tSOL_IPV6                             = 0x29\n\tSOL_IRDA                             = 0x10a\n\tSOL_IUCV                             = 0x115\n\tSOL_KCM                              = 0x119\n\tSOL_LLC                              = 0x10c\n\tSOL_NETBEUI                          = 0x10b\n\tSOL_NETLINK                          = 0x10e\n\tSOL_NFC                              = 0x118\n\tSOL_PACKET                           = 0x107\n\tSOL_PNPIPE                           = 0x113\n\tSOL_PPPOL2TP                         = 0x111\n\tSOL_RAW                              = 0xff\n\tSOL_RDS                              = 0x114\n\tSOL_RXRPC                            = 0x110\n\tSOL_SOCKET                           = 0x1\n\tSOL_TCP                              = 0x6\n\tSOL_TIPC                             = 0x10f\n\tSOL_TLS                              = 0x11a\n\tSOL_X25                              = 0x106\n\tSOL_XDP                              = 0x11b\n\tSOMAXCONN                            = 0x80\n\tSO_ACCEPTCONN                        = 0x1e\n\tSO_ATTACH_BPF                        = 0x32\n\tSO_ATTACH_FILTER                     = 0x1a\n\tSO_ATTACH_REUSEPORT_CBPF             = 0x33\n\tSO_ATTACH_REUSEPORT_EBPF             = 0x34\n\tSO_BINDTODEVICE                      = 0x19\n\tSO_BINDTOIFINDEX                     = 0x3e\n\tSO_BPF_EXTENSIONS                    = 0x30\n\tSO_BROADCAST                         = 0x6\n\tSO_BSDCOMPAT                         = 0xe\n\tSO_BUSY_POLL                         = 0x2e\n\tSO_CNX_ADVICE                        = 0x35\n\tSO_COOKIE                            = 0x39\n\tSO_DEBUG                             = 0x1\n\tSO_DETACH_BPF                        = 0x1b\n\tSO_DETACH_FILTER                     = 0x1b\n\tSO_DOMAIN                            = 0x27\n\tSO_DONTROUTE                         = 0x5\n\tSO_EE_CODE_TXTIME_INVALID_PARAM      = 0x1\n\tSO_EE_CODE_TXTIME_MISSED             = 0x2\n\tSO_EE_CODE_ZEROCOPY_COPIED           = 0x1\n\tSO_EE_ORIGIN_ICMP                    = 0x2\n\tSO_EE_ORIGIN_ICMP6                   = 0x3\n\tSO_EE_ORIGIN_LOCAL                   = 0x1\n\tSO_EE_ORIGIN_NONE                    = 0x0\n\tSO_EE_ORIGIN_TIMESTAMPING            = 0x4\n\tSO_EE_ORIGIN_TXSTATUS                = 0x4\n\tSO_EE_ORIGIN_TXTIME                  = 0x6\n\tSO_EE_ORIGIN_ZEROCOPY                = 0x5\n\tSO_ERROR                             = 0x4\n\tSO_GET_FILTER                        = 0x1a\n\tSO_INCOMING_CPU                      = 0x31\n\tSO_INCOMING_NAPI_ID                  = 0x38\n\tSO_KEEPALIVE                         = 0x9\n\tSO_LINGER                            = 0xd\n\tSO_LOCK_FILTER                       = 0x2c\n\tSO_MARK                              = 0x24\n\tSO_MAX_PACING_RATE                   = 0x2f\n\tSO_MEMINFO                           = 0x37\n\tSO_NOFCS                             = 0x2b\n\tSO_NO_CHECK                          = 0xb\n\tSO_OOBINLINE                         = 0xa\n\tSO_PASSCRED                          = 0x10\n\tSO_PASSSEC                           = 0x22\n\tSO_PEEK_OFF                          = 0x2a\n\tSO_PEERCRED                          = 0x11\n\tSO_PEERGROUPS                        = 0x3b\n\tSO_PEERNAME                          = 0x1c\n\tSO_PEERSEC                           = 0x1f\n\tSO_PRIORITY                          = 0xc\n\tSO_PROTOCOL                          = 0x26\n\tSO_RCVBUF                            = 0x8\n\tSO_RCVBUFFORCE                       = 0x21\n\tSO_RCVLOWAT                          = 0x12\n\tSO_RCVTIMEO                          = 0x14\n\tSO_RCVTIMEO_NEW                      = 0x42\n\tSO_RCVTIMEO_OLD                      = 0x14\n\tSO_REUSEADDR                         = 0x2\n\tSO_REUSEPORT                         = 0xf\n\tSO_RXQ_OVFL                          = 0x28\n\tSO_SECURITY_AUTHENTICATION           = 0x16\n\tSO_SECURITY_ENCRYPTION_NETWORK       = 0x18\n\tSO_SECURITY_ENCRYPTION_TRANSPORT     = 0x17\n\tSO_SELECT_ERR_QUEUE                  = 0x2d\n\tSO_SNDBUF                            = 0x7\n\tSO_SNDBUFFORCE                       = 0x20\n\tSO_SNDLOWAT                          = 0x13\n\tSO_SNDTIMEO                          = 0x15\n\tSO_SNDTIMEO_NEW                      = 0x43\n\tSO_SNDTIMEO_OLD                      = 0x15\n\tSO_TIMESTAMP                         = 0x1d\n\tSO_TIMESTAMPING                      = 0x25\n\tSO_TIMESTAMPING_NEW                  = 0x41\n\tSO_TIMESTAMPING_OLD                  = 0x25\n\tSO_TIMESTAMPNS                       = 0x23\n\tSO_TIMESTAMPNS_NEW                   = 0x40\n\tSO_TIMESTAMPNS_OLD                   = 0x23\n\tSO_TIMESTAMP_NEW                     = 0x3f\n\tSO_TIMESTAMP_OLD                     = 0x1d\n\tSO_TXTIME                            = 0x3d\n\tSO_TYPE                              = 0x3\n\tSO_VM_SOCKETS_BUFFER_MAX_SIZE        = 0x2\n\tSO_VM_SOCKETS_BUFFER_MIN_SIZE        = 0x1\n\tSO_VM_SOCKETS_BUFFER_SIZE            = 0x0\n\tSO_VM_SOCKETS_CONNECT_TIMEOUT        = 0x6\n\tSO_VM_SOCKETS_NONBLOCK_TXRX          = 0x7\n\tSO_VM_SOCKETS_PEER_HOST_VM_ID        = 0x3\n\tSO_VM_SOCKETS_TRUSTED                = 0x5\n\tSO_WIFI_STATUS                       = 0x29\n\tSO_ZEROCOPY                          = 0x3c\n\tSPLICE_F_GIFT                        = 0x8\n\tSPLICE_F_MORE                        = 0x4\n\tSPLICE_F_MOVE                        = 0x1\n\tSPLICE_F_NONBLOCK                    = 0x2\n\tSQUASHFS_MAGIC                       = 0x73717368\n\tSTACK_END_MAGIC                      = 0x57ac6e9d\n\tSTATX_ALL                            = 0xfff\n\tSTATX_ATIME                          = 0x20\n\tSTATX_ATTR_APPEND                    = 0x20\n\tSTATX_ATTR_AUTOMOUNT                 = 0x1000\n\tSTATX_ATTR_COMPRESSED                = 0x4\n\tSTATX_ATTR_ENCRYPTED                 = 0x800\n\tSTATX_ATTR_IMMUTABLE                 = 0x10\n\tSTATX_ATTR_NODUMP                    = 0x40\n\tSTATX_BASIC_STATS                    = 0x7ff\n\tSTATX_BLOCKS                         = 0x400\n\tSTATX_BTIME                          = 0x800\n\tSTATX_CTIME                          = 0x80\n\tSTATX_GID                            = 0x10\n\tSTATX_INO                            = 0x100\n\tSTATX_MODE                           = 0x2\n\tSTATX_MTIME                          = 0x40\n\tSTATX_NLINK                          = 0x4\n\tSTATX_SIZE                           = 0x200\n\tSTATX_TYPE                           = 0x1\n\tSTATX_UID                            = 0x8\n\tSTATX__RESERVED                      = 0x80000000\n\tSYNC_FILE_RANGE_WAIT_AFTER           = 0x4\n\tSYNC_FILE_RANGE_WAIT_BEFORE          = 0x1\n\tSYNC_FILE_RANGE_WRITE                = 0x2\n\tSYSFS_MAGIC                          = 0x62656572\n\tS_BLKSIZE                            = 0x200\n\tS_IEXEC                              = 0x40\n\tS_IFBLK                              = 0x6000\n\tS_IFCHR                              = 0x2000\n\tS_IFDIR                              = 0x4000\n\tS_IFIFO                              = 0x1000\n\tS_IFLNK                              = 0xa000\n\tS_IFMT                               = 0xf000\n\tS_IFREG                              = 0x8000\n\tS_IFSOCK                             = 0xc000\n\tS_IREAD                              = 0x100\n\tS_IRGRP                              = 0x20\n\tS_IROTH                              = 0x4\n\tS_IRUSR                              = 0x100\n\tS_IRWXG                              = 0x38\n\tS_IRWXO                              = 0x7\n\tS_IRWXU                              = 0x1c0\n\tS_ISGID                              = 0x400\n\tS_ISUID                              = 0x800\n\tS_ISVTX                              = 0x200\n\tS_IWGRP                              = 0x10\n\tS_IWOTH                              = 0x2\n\tS_IWRITE                             = 0x80\n\tS_IWUSR                              = 0x80\n\tS_IXGRP                              = 0x8\n\tS_IXOTH                              = 0x1\n\tS_IXUSR                              = 0x40\n\tTAB0                                 = 0x0\n\tTAB1                                 = 0x800\n\tTAB2                                 = 0x1000\n\tTAB3                                 = 0x1800\n\tTABDLY                               = 0x1800\n\tTASKSTATS_CMD_ATTR_MAX               = 0x4\n\tTASKSTATS_CMD_MAX                    = 0x2\n\tTASKSTATS_GENL_NAME                  = \"TASKSTATS\"\n\tTASKSTATS_GENL_VERSION               = 0x1\n\tTASKSTATS_TYPE_MAX                   = 0x6\n\tTASKSTATS_VERSION                    = 0x9\n\tTCFLSH                               = 0x540b\n\tTCGETA                               = 0x5405\n\tTCGETS                               = 0x5401\n\tTCGETS2                              = 0x802c542a\n\tTCGETX                               = 0x5432\n\tTCIFLUSH                             = 0x0\n\tTCIOFF                               = 0x2\n\tTCIOFLUSH                            = 0x2\n\tTCION                                = 0x3\n\tTCOFLUSH                             = 0x1\n\tTCOOFF                               = 0x0\n\tTCOON                                = 0x1\n\tTCP_BPF_IW                           = 0x3e9\n\tTCP_BPF_SNDCWND_CLAMP                = 0x3ea\n\tTCP_CC_INFO                          = 0x1a\n\tTCP_CM_INQ                           = 0x24\n\tTCP_CONGESTION                       = 0xd\n\tTCP_COOKIE_IN_ALWAYS                 = 0x1\n\tTCP_COOKIE_MAX                       = 0x10\n\tTCP_COOKIE_MIN                       = 0x8\n\tTCP_COOKIE_OUT_NEVER                 = 0x2\n\tTCP_COOKIE_PAIR_SIZE                 = 0x20\n\tTCP_COOKIE_TRANSACTIONS              = 0xf\n\tTCP_CORK                             = 0x3\n\tTCP_DEFER_ACCEPT                     = 0x9\n\tTCP_FASTOPEN                         = 0x17\n\tTCP_FASTOPEN_CONNECT                 = 0x1e\n\tTCP_FASTOPEN_KEY                     = 0x21\n\tTCP_FASTOPEN_NO_COOKIE               = 0x22\n\tTCP_INFO                             = 0xb\n\tTCP_INQ                              = 0x24\n\tTCP_KEEPCNT                          = 0x6\n\tTCP_KEEPIDLE                         = 0x4\n\tTCP_KEEPINTVL                        = 0x5\n\tTCP_LINGER2                          = 0x8\n\tTCP_MAXSEG                           = 0x2\n\tTCP_MAXWIN                           = 0xffff\n\tTCP_MAX_WINSHIFT                     = 0xe\n\tTCP_MD5SIG                           = 0xe\n\tTCP_MD5SIG_EXT                       = 0x20\n\tTCP_MD5SIG_FLAG_PREFIX               = 0x1\n\tTCP_MD5SIG_MAXKEYLEN                 = 0x50\n\tTCP_MSS                              = 0x200\n\tTCP_MSS_DEFAULT                      = 0x218\n\tTCP_MSS_DESIRED                      = 0x4c4\n\tTCP_NODELAY                          = 0x1\n\tTCP_NOTSENT_LOWAT                    = 0x19\n\tTCP_QUEUE_SEQ                        = 0x15\n\tTCP_QUICKACK                         = 0xc\n\tTCP_REPAIR                           = 0x13\n\tTCP_REPAIR_OFF                       = 0x0\n\tTCP_REPAIR_OFF_NO_WP                 = -0x1\n\tTCP_REPAIR_ON                        = 0x1\n\tTCP_REPAIR_OPTIONS                   = 0x16\n\tTCP_REPAIR_QUEUE                     = 0x14\n\tTCP_REPAIR_WINDOW                    = 0x1d\n\tTCP_SAVED_SYN                        = 0x1c\n\tTCP_SAVE_SYN                         = 0x1b\n\tTCP_SYNCNT                           = 0x7\n\tTCP_S_DATA_IN                        = 0x4\n\tTCP_S_DATA_OUT                       = 0x8\n\tTCP_THIN_DUPACK                      = 0x11\n\tTCP_THIN_LINEAR_TIMEOUTS             = 0x10\n\tTCP_TIMESTAMP                        = 0x18\n\tTCP_ULP                              = 0x1f\n\tTCP_USER_TIMEOUT                     = 0x12\n\tTCP_WINDOW_CLAMP                     = 0xa\n\tTCP_ZEROCOPY_RECEIVE                 = 0x23\n\tTCSAFLUSH                            = 0x2\n\tTCSBRK                               = 0x5409\n\tTCSBRKP                              = 0x5425\n\tTCSETA                               = 0x5406\n\tTCSETAF                              = 0x5408\n\tTCSETAW                              = 0x5407\n\tTCSETS                               = 0x5402\n\tTCSETS2                              = 0x402c542b\n\tTCSETSF                              = 0x5404\n\tTCSETSF2                             = 0x402c542d\n\tTCSETSW                              = 0x5403\n\tTCSETSW2                             = 0x402c542c\n\tTCSETX                               = 0x5433\n\tTCSETXF                              = 0x5434\n\tTCSETXW                              = 0x5435\n\tTCXONC                               = 0x540a\n\tTIMER_ABSTIME                        = 0x1\n\tTIOCCBRK                             = 0x5428\n\tTIOCCONS                             = 0x541d\n\tTIOCEXCL                             = 0x540c\n\tTIOCGDEV                             = 0x80045432\n\tTIOCGETD                             = 0x5424\n\tTIOCGEXCL                            = 0x80045440\n\tTIOCGICOUNT                          = 0x545d\n\tTIOCGISO7816                         = 0x80285442\n\tTIOCGLCKTRMIOS                       = 0x5456\n\tTIOCGPGRP                            = 0x540f\n\tTIOCGPKT                             = 0x80045438\n\tTIOCGPTLCK                           = 0x80045439\n\tTIOCGPTN                             = 0x80045430\n\tTIOCGPTPEER                          = 0x5441\n\tTIOCGRS485                           = 0x542e\n\tTIOCGSERIAL                          = 0x541e\n\tTIOCGSID                             = 0x5429\n\tTIOCGSOFTCAR                         = 0x5419\n\tTIOCGWINSZ                           = 0x5413\n\tTIOCINQ                              = 0x541b\n\tTIOCLINUX                            = 0x541c\n\tTIOCMBIC                             = 0x5417\n\tTIOCMBIS                             = 0x5416\n\tTIOCMGET                             = 0x5415\n\tTIOCMIWAIT                           = 0x545c\n\tTIOCMSET                             = 0x5418\n\tTIOCM_CAR                            = 0x40\n\tTIOCM_CD                             = 0x40\n\tTIOCM_CTS                            = 0x20\n\tTIOCM_DSR                            = 0x100\n\tTIOCM_DTR                            = 0x2\n\tTIOCM_LE                             = 0x1\n\tTIOCM_RI                             = 0x80\n\tTIOCM_RNG                            = 0x80\n\tTIOCM_RTS                            = 0x4\n\tTIOCM_SR                             = 0x10\n\tTIOCM_ST                             = 0x8\n\tTIOCNOTTY                            = 0x5422\n\tTIOCNXCL                             = 0x540d\n\tTIOCOUTQ                             = 0x5411\n\tTIOCPKT                              = 0x5420\n\tTIOCPKT_DATA                         = 0x0\n\tTIOCPKT_DOSTOP                       = 0x20\n\tTIOCPKT_FLUSHREAD                    = 0x1\n\tTIOCPKT_FLUSHWRITE                   = 0x2\n\tTIOCPKT_IOCTL                        = 0x40\n\tTIOCPKT_NOSTOP                       = 0x10\n\tTIOCPKT_START                        = 0x8\n\tTIOCPKT_STOP                         = 0x4\n\tTIOCSBRK                             = 0x5427\n\tTIOCSCTTY                            = 0x540e\n\tTIOCSERCONFIG                        = 0x5453\n\tTIOCSERGETLSR                        = 0x5459\n\tTIOCSERGETMULTI                      = 0x545a\n\tTIOCSERGSTRUCT                       = 0x5458\n\tTIOCSERGWILD                         = 0x5454\n\tTIOCSERSETMULTI                      = 0x545b\n\tTIOCSERSWILD                         = 0x5455\n\tTIOCSER_TEMT                         = 0x1\n\tTIOCSETD                             = 0x5423\n\tTIOCSIG                              = 0x40045436\n\tTIOCSISO7816                         = 0xc0285443\n\tTIOCSLCKTRMIOS                       = 0x5457\n\tTIOCSPGRP                            = 0x5410\n\tTIOCSPTLCK                           = 0x40045431\n\tTIOCSRS485                           = 0x542f\n\tTIOCSSERIAL                          = 0x541f\n\tTIOCSSOFTCAR                         = 0x541a\n\tTIOCSTI                              = 0x5412\n\tTIOCSWINSZ                           = 0x5414\n\tTIOCVHANGUP                          = 0x5437\n\tTMPFS_MAGIC                          = 0x1021994\n\tTOSTOP                               = 0x100\n\tTPACKET_ALIGNMENT                    = 0x10\n\tTPACKET_HDRLEN                       = 0x34\n\tTP_STATUS_AVAILABLE                  = 0x0\n\tTP_STATUS_BLK_TMO                    = 0x20\n\tTP_STATUS_COPY                       = 0x2\n\tTP_STATUS_CSUMNOTREADY               = 0x8\n\tTP_STATUS_CSUM_VALID                 = 0x80\n\tTP_STATUS_KERNEL                     = 0x0\n\tTP_STATUS_LOSING                     = 0x4\n\tTP_STATUS_SENDING                    = 0x2\n\tTP_STATUS_SEND_REQUEST               = 0x1\n\tTP_STATUS_TS_RAW_HARDWARE            = -0x80000000\n\tTP_STATUS_TS_SOFTWARE                = 0x20000000\n\tTP_STATUS_TS_SYS_HARDWARE            = 0x40000000\n\tTP_STATUS_USER                       = 0x1\n\tTP_STATUS_VLAN_TPID_VALID            = 0x40\n\tTP_STATUS_VLAN_VALID                 = 0x10\n\tTP_STATUS_WRONG_FORMAT               = 0x4\n\tTRACEFS_MAGIC                        = 0x74726163\n\tTS_COMM_LEN                          = 0x20\n\tTUNATTACHFILTER                      = 0x400854d5\n\tTUNDETACHFILTER                      = 0x400854d6\n\tTUNGETFEATURES                       = 0x800454cf\n\tTUNGETFILTER                         = 0x800854db\n\tTUNGETIFF                            = 0x800454d2\n\tTUNGETSNDBUF                         = 0x800454d3\n\tTUNGETVNETBE                         = 0x800454df\n\tTUNGETVNETHDRSZ                      = 0x800454d7\n\tTUNGETVNETLE                         = 0x800454dd\n\tTUNSETCARRIER                        = 0x400454e2\n\tTUNSETDEBUG                          = 0x400454c9\n\tTUNSETFILTEREBPF                     = 0x800454e1\n\tTUNSETGROUP                          = 0x400454ce\n\tTUNSETIFF                            = 0x400454ca\n\tTUNSETIFINDEX                        = 0x400454da\n\tTUNSETLINK                           = 0x400454cd\n\tTUNSETNOCSUM                         = 0x400454c8\n\tTUNSETOFFLOAD                        = 0x400454d0\n\tTUNSETOWNER                          = 0x400454cc\n\tTUNSETPERSIST                        = 0x400454cb\n\tTUNSETQUEUE                          = 0x400454d9\n\tTUNSETSNDBUF                         = 0x400454d4\n\tTUNSETSTEERINGEBPF                   = 0x800454e0\n\tTUNSETTXFILTER                       = 0x400454d1\n\tTUNSETVNETBE                         = 0x400454de\n\tTUNSETVNETHDRSZ                      = 0x400454d8\n\tTUNSETVNETLE                         = 0x400454dc\n\tUBI_IOCATT                           = 0x40186f40\n\tUBI_IOCDET                           = 0x40046f41\n\tUBI_IOCEBCH                          = 0x40044f02\n\tUBI_IOCEBER                          = 0x40044f01\n\tUBI_IOCEBISMAP                       = 0x80044f05\n\tUBI_IOCEBMAP                         = 0x40084f03\n\tUBI_IOCEBUNMAP                       = 0x40044f04\n\tUBI_IOCMKVOL                         = 0x40986f00\n\tUBI_IOCRMVOL                         = 0x40046f01\n\tUBI_IOCRNVOL                         = 0x51106f03\n\tUBI_IOCRPEB                          = 0x40046f04\n\tUBI_IOCRSVOL                         = 0x400c6f02\n\tUBI_IOCSETVOLPROP                    = 0x40104f06\n\tUBI_IOCSPEB                          = 0x40046f05\n\tUBI_IOCVOLCRBLK                      = 0x40804f07\n\tUBI_IOCVOLRMBLK                      = 0x4f08\n\tUBI_IOCVOLUP                         = 0x40084f00\n\tUDF_SUPER_MAGIC                      = 0x15013346\n\tUMOUNT_NOFOLLOW                      = 0x8\n\tUSBDEVICE_SUPER_MAGIC                = 0x9fa2\n\tUTIME_NOW                            = 0x3fffffff\n\tUTIME_OMIT                           = 0x3ffffffe\n\tV9FS_MAGIC                           = 0x1021997\n\tVDISCARD                             = 0xd\n\tVEOF                                 = 0x4\n\tVEOL                                 = 0xb\n\tVEOL2                                = 0x10\n\tVERASE                               = 0x2\n\tVINTR                                = 0x0\n\tVKILL                                = 0x3\n\tVLNEXT                               = 0xf\n\tVMADDR_CID_ANY                       = 0xffffffff\n\tVMADDR_CID_HOST                      = 0x2\n\tVMADDR_CID_HYPERVISOR                = 0x0\n\tVMADDR_CID_RESERVED                  = 0x1\n\tVMADDR_PORT_ANY                      = 0xffffffff\n\tVMIN                                 = 0x6\n\tVM_SOCKETS_INVALID_VERSION           = 0xffffffff\n\tVQUIT                                = 0x1\n\tVREPRINT                             = 0xc\n\tVSTART                               = 0x8\n\tVSTOP                                = 0x9\n\tVSUSP                                = 0xa\n\tVSWTC                                = 0x7\n\tVT0                                  = 0x0\n\tVT1                                  = 0x4000\n\tVTDLY                                = 0x4000\n\tVTIME                                = 0x5\n\tVWERASE                              = 0xe\n\tWALL                                 = 0x40000000\n\tWCLONE                               = 0x80000000\n\tWCONTINUED                           = 0x8\n\tWDIOC_GETBOOTSTATUS                  = 0x80045702\n\tWDIOC_GETPRETIMEOUT                  = 0x80045709\n\tWDIOC_GETSTATUS                      = 0x80045701\n\tWDIOC_GETSUPPORT                     = 0x80285700\n\tWDIOC_GETTEMP                        = 0x80045703\n\tWDIOC_GETTIMELEFT                    = 0x8004570a\n\tWDIOC_GETTIMEOUT                     = 0x80045707\n\tWDIOC_KEEPALIVE                      = 0x80045705\n\tWDIOC_SETOPTIONS                     = 0x80045704\n\tWDIOC_SETPRETIMEOUT                  = 0xc0045708\n\tWDIOC_SETTIMEOUT                     = 0xc0045706\n\tWEXITED                              = 0x4\n\tWIN_ACKMEDIACHANGE                   = 0xdb\n\tWIN_CHECKPOWERMODE1                  = 0xe5\n\tWIN_CHECKPOWERMODE2                  = 0x98\n\tWIN_DEVICE_RESET                     = 0x8\n\tWIN_DIAGNOSE                         = 0x90\n\tWIN_DOORLOCK                         = 0xde\n\tWIN_DOORUNLOCK                       = 0xdf\n\tWIN_DOWNLOAD_MICROCODE               = 0x92\n\tWIN_FLUSH_CACHE                      = 0xe7\n\tWIN_FLUSH_CACHE_EXT                  = 0xea\n\tWIN_FORMAT                           = 0x50\n\tWIN_GETMEDIASTATUS                   = 0xda\n\tWIN_IDENTIFY                         = 0xec\n\tWIN_IDENTIFY_DMA                     = 0xee\n\tWIN_IDLEIMMEDIATE                    = 0xe1\n\tWIN_INIT                             = 0x60\n\tWIN_MEDIAEJECT                       = 0xed\n\tWIN_MULTREAD                         = 0xc4\n\tWIN_MULTREAD_EXT                     = 0x29\n\tWIN_MULTWRITE                        = 0xc5\n\tWIN_MULTWRITE_EXT                    = 0x39\n\tWIN_NOP                              = 0x0\n\tWIN_PACKETCMD                        = 0xa0\n\tWIN_PIDENTIFY                        = 0xa1\n\tWIN_POSTBOOT                         = 0xdc\n\tWIN_PREBOOT                          = 0xdd\n\tWIN_QUEUED_SERVICE                   = 0xa2\n\tWIN_READ                             = 0x20\n\tWIN_READDMA                          = 0xc8\n\tWIN_READDMA_EXT                      = 0x25\n\tWIN_READDMA_ONCE                     = 0xc9\n\tWIN_READDMA_QUEUED                   = 0xc7\n\tWIN_READDMA_QUEUED_EXT               = 0x26\n\tWIN_READ_BUFFER                      = 0xe4\n\tWIN_READ_EXT                         = 0x24\n\tWIN_READ_LONG                        = 0x22\n\tWIN_READ_LONG_ONCE                   = 0x23\n\tWIN_READ_NATIVE_MAX                  = 0xf8\n\tWIN_READ_NATIVE_MAX_EXT              = 0x27\n\tWIN_READ_ONCE                        = 0x21\n\tWIN_RECAL                            = 0x10\n\tWIN_RESTORE                          = 0x10\n\tWIN_SECURITY_DISABLE                 = 0xf6\n\tWIN_SECURITY_ERASE_PREPARE           = 0xf3\n\tWIN_SECURITY_ERASE_UNIT              = 0xf4\n\tWIN_SECURITY_FREEZE_LOCK             = 0xf5\n\tWIN_SECURITY_SET_PASS                = 0xf1\n\tWIN_SECURITY_UNLOCK                  = 0xf2\n\tWIN_SEEK                             = 0x70\n\tWIN_SETFEATURES                      = 0xef\n\tWIN_SETIDLE1                         = 0xe3\n\tWIN_SETIDLE2                         = 0x97\n\tWIN_SETMULT                          = 0xc6\n\tWIN_SET_MAX                          = 0xf9\n\tWIN_SET_MAX_EXT                      = 0x37\n\tWIN_SLEEPNOW1                        = 0xe6\n\tWIN_SLEEPNOW2                        = 0x99\n\tWIN_SMART                            = 0xb0\n\tWIN_SPECIFY                          = 0x91\n\tWIN_SRST                             = 0x8\n\tWIN_STANDBY                          = 0xe2\n\tWIN_STANDBY2                         = 0x96\n\tWIN_STANDBYNOW1                      = 0xe0\n\tWIN_STANDBYNOW2                      = 0x94\n\tWIN_VERIFY                           = 0x40\n\tWIN_VERIFY_EXT                       = 0x42\n\tWIN_VERIFY_ONCE                      = 0x41\n\tWIN_WRITE                            = 0x30\n\tWIN_WRITEDMA                         = 0xca\n\tWIN_WRITEDMA_EXT                     = 0x35\n\tWIN_WRITEDMA_ONCE                    = 0xcb\n\tWIN_WRITEDMA_QUEUED                  = 0xcc\n\tWIN_WRITEDMA_QUEUED_EXT              = 0x36\n\tWIN_WRITE_BUFFER                     = 0xe8\n\tWIN_WRITE_EXT                        = 0x34\n\tWIN_WRITE_LONG                       = 0x32\n\tWIN_WRITE_LONG_ONCE                  = 0x33\n\tWIN_WRITE_ONCE                       = 0x31\n\tWIN_WRITE_SAME                       = 0xe9\n\tWIN_WRITE_VERIFY                     = 0x3c\n\tWNOHANG                              = 0x1\n\tWNOTHREAD                            = 0x20000000\n\tWNOWAIT                              = 0x1000000\n\tWORDSIZE                             = 0x20\n\tWSTOPPED                             = 0x2\n\tWUNTRACED                            = 0x2\n\tX86_FXSR_MAGIC                       = 0x0\n\tXATTR_CREATE                         = 0x1\n\tXATTR_REPLACE                        = 0x2\n\tXCASE                                = 0x4\n\tXDP_COPY                             = 0x2\n\tXDP_FLAGS_DRV_MODE                   = 0x4\n\tXDP_FLAGS_HW_MODE                    = 0x8\n\tXDP_FLAGS_MASK                       = 0xf\n\tXDP_FLAGS_MODES                      = 0xe\n\tXDP_FLAGS_SKB_MODE                   = 0x2\n\tXDP_FLAGS_UPDATE_IF_NOEXIST          = 0x1\n\tXDP_MMAP_OFFSETS                     = 0x1\n\tXDP_PACKET_HEADROOM                  = 0x100\n\tXDP_PGOFF_RX_RING                    = 0x0\n\tXDP_PGOFF_TX_RING                    = 0x80000000\n\tXDP_RX_RING                          = 0x2\n\tXDP_SHARED_UMEM                      = 0x1\n\tXDP_STATISTICS                       = 0x7\n\tXDP_TX_RING                          = 0x3\n\tXDP_UMEM_COMPLETION_RING             = 0x6\n\tXDP_UMEM_FILL_RING                   = 0x5\n\tXDP_UMEM_PGOFF_COMPLETION_RING       = 0x180000000\n\tXDP_UMEM_PGOFF_FILL_RING             = 0x100000000\n\tXDP_UMEM_REG                         = 0x4\n\tXDP_ZEROCOPY                         = 0x4\n\tXENFS_SUPER_MAGIC                    = 0xabba1974\n\tXFS_SUPER_MAGIC                      = 0x58465342\n\tXTABS                                = 0x1800\n\tZSMALLOC_MAGIC                       = 0x58295829\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x62)\n\tEADDRNOTAVAIL   = syscall.Errno(0x63)\n\tEADV            = syscall.Errno(0x44)\n\tEAFNOSUPPORT    = syscall.Errno(0x61)\n\tEAGAIN          = syscall.Errno(0xb)\n\tEALREADY        = syscall.Errno(0x72)\n\tEBADE           = syscall.Errno(0x34)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADFD          = syscall.Errno(0x4d)\n\tEBADMSG         = syscall.Errno(0x4a)\n\tEBADR           = syscall.Errno(0x35)\n\tEBADRQC         = syscall.Errno(0x38)\n\tEBADSLT         = syscall.Errno(0x39)\n\tEBFONT          = syscall.Errno(0x3b)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x7d)\n\tECHILD          = syscall.Errno(0xa)\n\tECHRNG          = syscall.Errno(0x2c)\n\tECOMM           = syscall.Errno(0x46)\n\tECONNABORTED    = syscall.Errno(0x67)\n\tECONNREFUSED    = syscall.Errno(0x6f)\n\tECONNRESET      = syscall.Errno(0x68)\n\tEDEADLK         = syscall.Errno(0x23)\n\tEDEADLOCK       = syscall.Errno(0x23)\n\tEDESTADDRREQ    = syscall.Errno(0x59)\n\tEDOM            = syscall.Errno(0x21)\n\tEDOTDOT         = syscall.Errno(0x49)\n\tEDQUOT          = syscall.Errno(0x7a)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEHOSTDOWN       = syscall.Errno(0x70)\n\tEHOSTUNREACH    = syscall.Errno(0x71)\n\tEHWPOISON       = syscall.Errno(0x85)\n\tEIDRM           = syscall.Errno(0x2b)\n\tEILSEQ          = syscall.Errno(0x54)\n\tEINPROGRESS     = syscall.Errno(0x73)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEISCONN         = syscall.Errno(0x6a)\n\tEISDIR          = syscall.Errno(0x15)\n\tEISNAM          = syscall.Errno(0x78)\n\tEKEYEXPIRED     = syscall.Errno(0x7f)\n\tEKEYREJECTED    = syscall.Errno(0x81)\n\tEKEYREVOKED     = syscall.Errno(0x80)\n\tEL2HLT          = syscall.Errno(0x33)\n\tEL2NSYNC        = syscall.Errno(0x2d)\n\tEL3HLT          = syscall.Errno(0x2e)\n\tEL3RST          = syscall.Errno(0x2f)\n\tELIBACC         = syscall.Errno(0x4f)\n\tELIBBAD         = syscall.Errno(0x50)\n\tELIBEXEC        = syscall.Errno(0x53)\n\tELIBMAX         = syscall.Errno(0x52)\n\tELIBSCN         = syscall.Errno(0x51)\n\tELNRNG          = syscall.Errno(0x30)\n\tELOOP           = syscall.Errno(0x28)\n\tEMEDIUMTYPE     = syscall.Errno(0x7c)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x5a)\n\tEMULTIHOP       = syscall.Errno(0x48)\n\tENAMETOOLONG    = syscall.Errno(0x24)\n\tENAVAIL         = syscall.Errno(0x77)\n\tENETDOWN        = syscall.Errno(0x64)\n\tENETRESET       = syscall.Errno(0x66)\n\tENETUNREACH     = syscall.Errno(0x65)\n\tENFILE          = syscall.Errno(0x17)\n\tENOANO          = syscall.Errno(0x37)\n\tENOBUFS         = syscall.Errno(0x69)\n\tENOCSI          = syscall.Errno(0x32)\n\tENODATA         = syscall.Errno(0x3d)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOKEY          = syscall.Errno(0x7e)\n\tENOLCK          = syscall.Errno(0x25)\n\tENOLINK         = syscall.Errno(0x43)\n\tENOMEDIUM       = syscall.Errno(0x7b)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x2a)\n\tENONET          = syscall.Errno(0x40)\n\tENOPKG          = syscall.Errno(0x41)\n\tENOPROTOOPT     = syscall.Errno(0x5c)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSR           = syscall.Errno(0x3f)\n\tENOSTR          = syscall.Errno(0x3c)\n\tENOSYS          = syscall.Errno(0x26)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x6b)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x27)\n\tENOTNAM         = syscall.Errno(0x76)\n\tENOTRECOVERABLE = syscall.Errno(0x83)\n\tENOTSOCK        = syscall.Errno(0x58)\n\tENOTSUP         = syscall.Errno(0x5f)\n\tENOTTY          = syscall.Errno(0x19)\n\tENOTUNIQ        = syscall.Errno(0x4c)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x5f)\n\tEOVERFLOW       = syscall.Errno(0x4b)\n\tEOWNERDEAD      = syscall.Errno(0x82)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x60)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROTO          = syscall.Errno(0x47)\n\tEPROTONOSUPPORT = syscall.Errno(0x5d)\n\tEPROTOTYPE      = syscall.Errno(0x5b)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMCHG         = syscall.Errno(0x4e)\n\tEREMOTE         = syscall.Errno(0x42)\n\tEREMOTEIO       = syscall.Errno(0x79)\n\tERESTART        = syscall.Errno(0x55)\n\tERFKILL         = syscall.Errno(0x84)\n\tEROFS           = syscall.Errno(0x1e)\n\tESHUTDOWN       = syscall.Errno(0x6c)\n\tESOCKTNOSUPPORT = syscall.Errno(0x5e)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESRMNT          = syscall.Errno(0x45)\n\tESTALE          = syscall.Errno(0x74)\n\tESTRPIPE        = syscall.Errno(0x56)\n\tETIME           = syscall.Errno(0x3e)\n\tETIMEDOUT       = syscall.Errno(0x6e)\n\tETOOMANYREFS    = syscall.Errno(0x6d)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUCLEAN         = syscall.Errno(0x75)\n\tEUNATCH         = syscall.Errno(0x31)\n\tEUSERS          = syscall.Errno(0x57)\n\tEWOULDBLOCK     = syscall.Errno(0xb)\n\tEXDEV           = syscall.Errno(0x12)\n\tEXFULL          = syscall.Errno(0x36)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0x7)\n\tSIGCHLD   = syscall.Signal(0x11)\n\tSIGCLD    = syscall.Signal(0x11)\n\tSIGCONT   = syscall.Signal(0x12)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x1d)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPOLL   = syscall.Signal(0x1d)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGPWR    = syscall.Signal(0x1e)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTKFLT = syscall.Signal(0x10)\n\tSIGSTOP   = syscall.Signal(0x13)\n\tSIGSYS    = syscall.Signal(0x1f)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x14)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x17)\n\tSIGUSR1   = syscall.Signal(0xa)\n\tSIGUSR2   = syscall.Signal(0xc)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"no such device or address\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device or resource busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"invalid cross-device link\"},\n\t{19, \"ENODEV\", \"no such device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"numerical result out of range\"},\n\t{35, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{36, \"ENAMETOOLONG\", \"file name too long\"},\n\t{37, \"ENOLCK\", \"no locks available\"},\n\t{38, \"ENOSYS\", \"function not implemented\"},\n\t{39, \"ENOTEMPTY\", \"directory not empty\"},\n\t{40, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{42, \"ENOMSG\", \"no message of desired type\"},\n\t{43, \"EIDRM\", \"identifier removed\"},\n\t{44, \"ECHRNG\", \"channel number out of range\"},\n\t{45, \"EL2NSYNC\", \"level 2 not synchronized\"},\n\t{46, \"EL3HLT\", \"level 3 halted\"},\n\t{47, \"EL3RST\", \"level 3 reset\"},\n\t{48, \"ELNRNG\", \"link number out of range\"},\n\t{49, \"EUNATCH\", \"protocol driver not attached\"},\n\t{50, \"ENOCSI\", \"no CSI structure available\"},\n\t{51, \"EL2HLT\", \"level 2 halted\"},\n\t{52, \"EBADE\", \"invalid exchange\"},\n\t{53, \"EBADR\", \"invalid request descriptor\"},\n\t{54, \"EXFULL\", \"exchange full\"},\n\t{55, \"ENOANO\", \"no anode\"},\n\t{56, \"EBADRQC\", \"invalid request code\"},\n\t{57, \"EBADSLT\", \"invalid slot\"},\n\t{59, \"EBFONT\", \"bad font file format\"},\n\t{60, \"ENOSTR\", \"device not a stream\"},\n\t{61, \"ENODATA\", \"no data available\"},\n\t{62, \"ETIME\", \"timer expired\"},\n\t{63, \"ENOSR\", \"out of streams resources\"},\n\t{64, \"ENONET\", \"machine is not on the network\"},\n\t{65, \"ENOPKG\", \"package not installed\"},\n\t{66, \"EREMOTE\", \"object is remote\"},\n\t{67, \"ENOLINK\", \"link has been severed\"},\n\t{68, \"EADV\", \"advertise error\"},\n\t{69, \"ESRMNT\", \"srmount error\"},\n\t{70, \"ECOMM\", \"communication error on send\"},\n\t{71, \"EPROTO\", \"protocol error\"},\n\t{72, \"EMULTIHOP\", \"multihop attempted\"},\n\t{73, \"EDOTDOT\", \"RFS specific error\"},\n\t{74, \"EBADMSG\", \"bad message\"},\n\t{75, \"EOVERFLOW\", \"value too large for defined data type\"},\n\t{76, \"ENOTUNIQ\", \"name not unique on network\"},\n\t{77, \"EBADFD\", \"file descriptor in bad state\"},\n\t{78, \"EREMCHG\", \"remote address changed\"},\n\t{79, \"ELIBACC\", \"can not access a needed shared library\"},\n\t{80, \"ELIBBAD\", \"accessing a corrupted shared library\"},\n\t{81, \"ELIBSCN\", \".lib section in a.out corrupted\"},\n\t{82, \"ELIBMAX\", \"attempting to link in too many shared libraries\"},\n\t{83, \"ELIBEXEC\", \"cannot exec a shared library directly\"},\n\t{84, \"EILSEQ\", \"invalid or incomplete multibyte or wide character\"},\n\t{85, \"ERESTART\", \"interrupted system call should be restarted\"},\n\t{86, \"ESTRPIPE\", \"streams pipe error\"},\n\t{87, \"EUSERS\", \"too many users\"},\n\t{88, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{89, \"EDESTADDRREQ\", \"destination address required\"},\n\t{90, \"EMSGSIZE\", \"message too long\"},\n\t{91, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{92, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{93, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{94, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{95, \"ENOTSUP\", \"operation not supported\"},\n\t{96, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{97, \"EAFNOSUPPORT\", \"address family not supported by protocol\"},\n\t{98, \"EADDRINUSE\", \"address already in use\"},\n\t{99, \"EADDRNOTAVAIL\", \"cannot assign requested address\"},\n\t{100, \"ENETDOWN\", \"network is down\"},\n\t{101, \"ENETUNREACH\", \"network is unreachable\"},\n\t{102, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{103, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{104, \"ECONNRESET\", \"connection reset by peer\"},\n\t{105, \"ENOBUFS\", \"no buffer space available\"},\n\t{106, \"EISCONN\", \"transport endpoint is already connected\"},\n\t{107, \"ENOTCONN\", \"transport endpoint is not connected\"},\n\t{108, \"ESHUTDOWN\", \"cannot send after transport endpoint shutdown\"},\n\t{109, \"ETOOMANYREFS\", \"too many references: cannot splice\"},\n\t{110, \"ETIMEDOUT\", \"connection timed out\"},\n\t{111, \"ECONNREFUSED\", \"connection refused\"},\n\t{112, \"EHOSTDOWN\", \"host is down\"},\n\t{113, \"EHOSTUNREACH\", \"no route to host\"},\n\t{114, \"EALREADY\", \"operation already in progress\"},\n\t{115, \"EINPROGRESS\", \"operation now in progress\"},\n\t{116, \"ESTALE\", \"stale file handle\"},\n\t{117, \"EUCLEAN\", \"structure needs cleaning\"},\n\t{118, \"ENOTNAM\", \"not a XENIX named type file\"},\n\t{119, \"ENAVAIL\", \"no XENIX semaphores available\"},\n\t{120, \"EISNAM\", \"is a named type file\"},\n\t{121, \"EREMOTEIO\", \"remote I/O error\"},\n\t{122, \"EDQUOT\", \"disk quota exceeded\"},\n\t{123, \"ENOMEDIUM\", \"no medium found\"},\n\t{124, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{125, \"ECANCELED\", \"operation canceled\"},\n\t{126, \"ENOKEY\", \"required key not available\"},\n\t{127, \"EKEYEXPIRED\", \"key has expired\"},\n\t{128, \"EKEYREVOKED\", \"key has been revoked\"},\n\t{129, \"EKEYREJECTED\", \"key was rejected by service\"},\n\t{130, \"EOWNERDEAD\", \"owner died\"},\n\t{131, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{132, \"ERFKILL\", \"operation not possible due to RF-kill\"},\n\t{133, \"EHWPOISON\", \"memory page has hardware error\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/breakpoint trap\"},\n\t{6, \"SIGABRT\", \"aborted\"},\n\t{7, \"SIGBUS\", \"bus error\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGUSR1\", \"user defined signal 1\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGUSR2\", \"user defined signal 2\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGSTKFLT\", \"stack fault\"},\n\t{17, \"SIGCHLD\", \"child exited\"},\n\t{18, \"SIGCONT\", \"continued\"},\n\t{19, \"SIGSTOP\", \"stopped (signal)\"},\n\t{20, \"SIGTSTP\", \"stopped\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGURG\", \"urgent I/O condition\"},\n\t{24, \"SIGXCPU\", \"CPU time limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"file size limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window changed\"},\n\t{29, \"SIGIO\", \"I/O possible\"},\n\t{30, \"SIGPWR\", \"power failure\"},\n\t{31, \"SIGSYS\", \"bad system call\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go",
    "content": "// mkerrors.sh -Wall -Werror -static -I/tmp/include -m64\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build amd64,linux\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m64 _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAAFS_MAGIC                           = 0x5a3c69f0\n\tADFS_SUPER_MAGIC                     = 0xadf5\n\tAFFS_SUPER_MAGIC                     = 0xadff\n\tAFS_FS_MAGIC                         = 0x6b414653\n\tAFS_SUPER_MAGIC                      = 0x5346414f\n\tAF_ALG                               = 0x26\n\tAF_APPLETALK                         = 0x5\n\tAF_ASH                               = 0x12\n\tAF_ATMPVC                            = 0x8\n\tAF_ATMSVC                            = 0x14\n\tAF_AX25                              = 0x3\n\tAF_BLUETOOTH                         = 0x1f\n\tAF_BRIDGE                            = 0x7\n\tAF_CAIF                              = 0x25\n\tAF_CAN                               = 0x1d\n\tAF_DECnet                            = 0xc\n\tAF_ECONET                            = 0x13\n\tAF_FILE                              = 0x1\n\tAF_IB                                = 0x1b\n\tAF_IEEE802154                        = 0x24\n\tAF_INET                              = 0x2\n\tAF_INET6                             = 0xa\n\tAF_IPX                               = 0x4\n\tAF_IRDA                              = 0x17\n\tAF_ISDN                              = 0x22\n\tAF_IUCV                              = 0x20\n\tAF_KCM                               = 0x29\n\tAF_KEY                               = 0xf\n\tAF_LLC                               = 0x1a\n\tAF_LOCAL                             = 0x1\n\tAF_MAX                               = 0x2d\n\tAF_MPLS                              = 0x1c\n\tAF_NETBEUI                           = 0xd\n\tAF_NETLINK                           = 0x10\n\tAF_NETROM                            = 0x6\n\tAF_NFC                               = 0x27\n\tAF_PACKET                            = 0x11\n\tAF_PHONET                            = 0x23\n\tAF_PPPOX                             = 0x18\n\tAF_QIPCRTR                           = 0x2a\n\tAF_RDS                               = 0x15\n\tAF_ROSE                              = 0xb\n\tAF_ROUTE                             = 0x10\n\tAF_RXRPC                             = 0x21\n\tAF_SECURITY                          = 0xe\n\tAF_SMC                               = 0x2b\n\tAF_SNA                               = 0x16\n\tAF_TIPC                              = 0x1e\n\tAF_UNIX                              = 0x1\n\tAF_UNSPEC                            = 0x0\n\tAF_VSOCK                             = 0x28\n\tAF_WANPIPE                           = 0x19\n\tAF_X25                               = 0x9\n\tAF_XDP                               = 0x2c\n\tALG_OP_DECRYPT                       = 0x0\n\tALG_OP_ENCRYPT                       = 0x1\n\tALG_SET_AEAD_ASSOCLEN                = 0x4\n\tALG_SET_AEAD_AUTHSIZE                = 0x5\n\tALG_SET_IV                           = 0x2\n\tALG_SET_KEY                          = 0x1\n\tALG_SET_OP                           = 0x3\n\tANON_INODE_FS_MAGIC                  = 0x9041934\n\tARPHRD_6LOWPAN                       = 0x339\n\tARPHRD_ADAPT                         = 0x108\n\tARPHRD_APPLETLK                      = 0x8\n\tARPHRD_ARCNET                        = 0x7\n\tARPHRD_ASH                           = 0x30d\n\tARPHRD_ATM                           = 0x13\n\tARPHRD_AX25                          = 0x3\n\tARPHRD_BIF                           = 0x307\n\tARPHRD_CAIF                          = 0x336\n\tARPHRD_CAN                           = 0x118\n\tARPHRD_CHAOS                         = 0x5\n\tARPHRD_CISCO                         = 0x201\n\tARPHRD_CSLIP                         = 0x101\n\tARPHRD_CSLIP6                        = 0x103\n\tARPHRD_DDCMP                         = 0x205\n\tARPHRD_DLCI                          = 0xf\n\tARPHRD_ECONET                        = 0x30e\n\tARPHRD_EETHER                        = 0x2\n\tARPHRD_ETHER                         = 0x1\n\tARPHRD_EUI64                         = 0x1b\n\tARPHRD_FCAL                          = 0x311\n\tARPHRD_FCFABRIC                      = 0x313\n\tARPHRD_FCPL                          = 0x312\n\tARPHRD_FCPP                          = 0x310\n\tARPHRD_FDDI                          = 0x306\n\tARPHRD_FRAD                          = 0x302\n\tARPHRD_HDLC                          = 0x201\n\tARPHRD_HIPPI                         = 0x30c\n\tARPHRD_HWX25                         = 0x110\n\tARPHRD_IEEE1394                      = 0x18\n\tARPHRD_IEEE802                       = 0x6\n\tARPHRD_IEEE80211                     = 0x321\n\tARPHRD_IEEE80211_PRISM               = 0x322\n\tARPHRD_IEEE80211_RADIOTAP            = 0x323\n\tARPHRD_IEEE802154                    = 0x324\n\tARPHRD_IEEE802154_MONITOR            = 0x325\n\tARPHRD_IEEE802_TR                    = 0x320\n\tARPHRD_INFINIBAND                    = 0x20\n\tARPHRD_IP6GRE                        = 0x337\n\tARPHRD_IPDDP                         = 0x309\n\tARPHRD_IPGRE                         = 0x30a\n\tARPHRD_IRDA                          = 0x30f\n\tARPHRD_LAPB                          = 0x204\n\tARPHRD_LOCALTLK                      = 0x305\n\tARPHRD_LOOPBACK                      = 0x304\n\tARPHRD_METRICOM                      = 0x17\n\tARPHRD_NETLINK                       = 0x338\n\tARPHRD_NETROM                        = 0x0\n\tARPHRD_NONE                          = 0xfffe\n\tARPHRD_PHONET                        = 0x334\n\tARPHRD_PHONET_PIPE                   = 0x335\n\tARPHRD_PIMREG                        = 0x30b\n\tARPHRD_PPP                           = 0x200\n\tARPHRD_PRONET                        = 0x4\n\tARPHRD_RAWHDLC                       = 0x206\n\tARPHRD_RAWIP                         = 0x207\n\tARPHRD_ROSE                          = 0x10e\n\tARPHRD_RSRVD                         = 0x104\n\tARPHRD_SIT                           = 0x308\n\tARPHRD_SKIP                          = 0x303\n\tARPHRD_SLIP                          = 0x100\n\tARPHRD_SLIP6                         = 0x102\n\tARPHRD_TUNNEL                        = 0x300\n\tARPHRD_TUNNEL6                       = 0x301\n\tARPHRD_VOID                          = 0xffff\n\tARPHRD_VSOCKMON                      = 0x33a\n\tARPHRD_X25                           = 0x10f\n\tAUTOFS_SUPER_MAGIC                   = 0x187\n\tB0                                   = 0x0\n\tB1000000                             = 0x1008\n\tB110                                 = 0x3\n\tB115200                              = 0x1002\n\tB1152000                             = 0x1009\n\tB1200                                = 0x9\n\tB134                                 = 0x4\n\tB150                                 = 0x5\n\tB1500000                             = 0x100a\n\tB1800                                = 0xa\n\tB19200                               = 0xe\n\tB200                                 = 0x6\n\tB2000000                             = 0x100b\n\tB230400                              = 0x1003\n\tB2400                                = 0xb\n\tB2500000                             = 0x100c\n\tB300                                 = 0x7\n\tB3000000                             = 0x100d\n\tB3500000                             = 0x100e\n\tB38400                               = 0xf\n\tB4000000                             = 0x100f\n\tB460800                              = 0x1004\n\tB4800                                = 0xc\n\tB50                                  = 0x1\n\tB500000                              = 0x1005\n\tB57600                               = 0x1001\n\tB576000                              = 0x1006\n\tB600                                 = 0x8\n\tB75                                  = 0x2\n\tB921600                              = 0x1007\n\tB9600                                = 0xd\n\tBALLOON_KVM_MAGIC                    = 0x13661366\n\tBDEVFS_MAGIC                         = 0x62646576\n\tBINDERFS_SUPER_MAGIC                 = 0x6c6f6f70\n\tBINFMTFS_MAGIC                       = 0x42494e4d\n\tBLKBSZGET                            = 0x80081270\n\tBLKBSZSET                            = 0x40081271\n\tBLKFLSBUF                            = 0x1261\n\tBLKFRAGET                            = 0x1265\n\tBLKFRASET                            = 0x1264\n\tBLKGETSIZE                           = 0x1260\n\tBLKGETSIZE64                         = 0x80081272\n\tBLKPBSZGET                           = 0x127b\n\tBLKRAGET                             = 0x1263\n\tBLKRASET                             = 0x1262\n\tBLKROGET                             = 0x125e\n\tBLKROSET                             = 0x125d\n\tBLKRRPART                            = 0x125f\n\tBLKSECTGET                           = 0x1267\n\tBLKSECTSET                           = 0x1266\n\tBLKSSZGET                            = 0x1268\n\tBOTHER                               = 0x1000\n\tBPF_A                                = 0x10\n\tBPF_ABS                              = 0x20\n\tBPF_ADD                              = 0x0\n\tBPF_ALU                              = 0x4\n\tBPF_ALU64                            = 0x7\n\tBPF_AND                              = 0x50\n\tBPF_ANY                              = 0x0\n\tBPF_ARSH                             = 0xc0\n\tBPF_B                                = 0x10\n\tBPF_BUILD_ID_SIZE                    = 0x14\n\tBPF_CALL                             = 0x80\n\tBPF_DEVCG_ACC_MKNOD                  = 0x1\n\tBPF_DEVCG_ACC_READ                   = 0x2\n\tBPF_DEVCG_ACC_WRITE                  = 0x4\n\tBPF_DEVCG_DEV_BLOCK                  = 0x1\n\tBPF_DEVCG_DEV_CHAR                   = 0x2\n\tBPF_DIV                              = 0x30\n\tBPF_DW                               = 0x18\n\tBPF_END                              = 0xd0\n\tBPF_EXIST                            = 0x2\n\tBPF_EXIT                             = 0x90\n\tBPF_FROM_BE                          = 0x8\n\tBPF_FROM_LE                          = 0x0\n\tBPF_FS_MAGIC                         = 0xcafe4a11\n\tBPF_F_ALLOW_MULTI                    = 0x2\n\tBPF_F_ALLOW_OVERRIDE                 = 0x1\n\tBPF_F_ANY_ALIGNMENT                  = 0x2\n\tBPF_F_CTXLEN_MASK                    = 0xfffff00000000\n\tBPF_F_CURRENT_CPU                    = 0xffffffff\n\tBPF_F_CURRENT_NETNS                  = -0x1\n\tBPF_F_DONT_FRAGMENT                  = 0x4\n\tBPF_F_FAST_STACK_CMP                 = 0x200\n\tBPF_F_HDR_FIELD_MASK                 = 0xf\n\tBPF_F_INDEX_MASK                     = 0xffffffff\n\tBPF_F_INGRESS                        = 0x1\n\tBPF_F_INVALIDATE_HASH                = 0x2\n\tBPF_F_LOCK                           = 0x4\n\tBPF_F_MARK_ENFORCE                   = 0x40\n\tBPF_F_MARK_MANGLED_0                 = 0x20\n\tBPF_F_NO_COMMON_LRU                  = 0x2\n\tBPF_F_NO_PREALLOC                    = 0x1\n\tBPF_F_NUMA_NODE                      = 0x4\n\tBPF_F_PSEUDO_HDR                     = 0x10\n\tBPF_F_QUERY_EFFECTIVE                = 0x1\n\tBPF_F_RDONLY                         = 0x8\n\tBPF_F_RECOMPUTE_CSUM                 = 0x1\n\tBPF_F_REUSE_STACKID                  = 0x400\n\tBPF_F_SEQ_NUMBER                     = 0x8\n\tBPF_F_SKIP_FIELD_MASK                = 0xff\n\tBPF_F_STACK_BUILD_ID                 = 0x20\n\tBPF_F_STRICT_ALIGNMENT               = 0x1\n\tBPF_F_TUNINFO_IPV6                   = 0x1\n\tBPF_F_USER_BUILD_ID                  = 0x800\n\tBPF_F_USER_STACK                     = 0x100\n\tBPF_F_WRONLY                         = 0x10\n\tBPF_F_ZERO_CSUM_TX                   = 0x2\n\tBPF_F_ZERO_SEED                      = 0x40\n\tBPF_H                                = 0x8\n\tBPF_IMM                              = 0x0\n\tBPF_IND                              = 0x40\n\tBPF_JA                               = 0x0\n\tBPF_JEQ                              = 0x10\n\tBPF_JGE                              = 0x30\n\tBPF_JGT                              = 0x20\n\tBPF_JLE                              = 0xb0\n\tBPF_JLT                              = 0xa0\n\tBPF_JMP                              = 0x5\n\tBPF_JMP32                            = 0x6\n\tBPF_JNE                              = 0x50\n\tBPF_JSET                             = 0x40\n\tBPF_JSGE                             = 0x70\n\tBPF_JSGT                             = 0x60\n\tBPF_JSLE                             = 0xd0\n\tBPF_JSLT                             = 0xc0\n\tBPF_K                                = 0x0\n\tBPF_LD                               = 0x0\n\tBPF_LDX                              = 0x1\n\tBPF_LEN                              = 0x80\n\tBPF_LL_OFF                           = -0x200000\n\tBPF_LSH                              = 0x60\n\tBPF_MAJOR_VERSION                    = 0x1\n\tBPF_MAXINSNS                         = 0x1000\n\tBPF_MEM                              = 0x60\n\tBPF_MEMWORDS                         = 0x10\n\tBPF_MINOR_VERSION                    = 0x1\n\tBPF_MISC                             = 0x7\n\tBPF_MOD                              = 0x90\n\tBPF_MOV                              = 0xb0\n\tBPF_MSH                              = 0xa0\n\tBPF_MUL                              = 0x20\n\tBPF_NEG                              = 0x80\n\tBPF_NET_OFF                          = -0x100000\n\tBPF_NOEXIST                          = 0x1\n\tBPF_OBJ_NAME_LEN                     = 0x10\n\tBPF_OR                               = 0x40\n\tBPF_PSEUDO_CALL                      = 0x1\n\tBPF_PSEUDO_MAP_FD                    = 0x1\n\tBPF_RET                              = 0x6\n\tBPF_RSH                              = 0x70\n\tBPF_SOCK_OPS_ALL_CB_FLAGS            = 0x7\n\tBPF_SOCK_OPS_RETRANS_CB_FLAG         = 0x2\n\tBPF_SOCK_OPS_RTO_CB_FLAG             = 0x1\n\tBPF_SOCK_OPS_STATE_CB_FLAG           = 0x4\n\tBPF_ST                               = 0x2\n\tBPF_STX                              = 0x3\n\tBPF_SUB                              = 0x10\n\tBPF_TAG_SIZE                         = 0x8\n\tBPF_TAX                              = 0x0\n\tBPF_TO_BE                            = 0x8\n\tBPF_TO_LE                            = 0x0\n\tBPF_TXA                              = 0x80\n\tBPF_W                                = 0x0\n\tBPF_X                                = 0x8\n\tBPF_XADD                             = 0xc0\n\tBPF_XOR                              = 0xa0\n\tBRKINT                               = 0x2\n\tBS0                                  = 0x0\n\tBS1                                  = 0x2000\n\tBSDLY                                = 0x2000\n\tBTRFS_SUPER_MAGIC                    = 0x9123683e\n\tBTRFS_TEST_MAGIC                     = 0x73727279\n\tCAN_BCM                              = 0x2\n\tCAN_EFF_FLAG                         = 0x80000000\n\tCAN_EFF_ID_BITS                      = 0x1d\n\tCAN_EFF_MASK                         = 0x1fffffff\n\tCAN_ERR_FLAG                         = 0x20000000\n\tCAN_ERR_MASK                         = 0x1fffffff\n\tCAN_INV_FILTER                       = 0x20000000\n\tCAN_ISOTP                            = 0x6\n\tCAN_MAX_DLC                          = 0x8\n\tCAN_MAX_DLEN                         = 0x8\n\tCAN_MCNET                            = 0x5\n\tCAN_MTU                              = 0x10\n\tCAN_NPROTO                           = 0x7\n\tCAN_RAW                              = 0x1\n\tCAN_RAW_FILTER_MAX                   = 0x200\n\tCAN_RTR_FLAG                         = 0x40000000\n\tCAN_SFF_ID_BITS                      = 0xb\n\tCAN_SFF_MASK                         = 0x7ff\n\tCAN_TP16                             = 0x3\n\tCAN_TP20                             = 0x4\n\tCBAUD                                = 0x100f\n\tCBAUDEX                              = 0x1000\n\tCFLUSH                               = 0xf\n\tCGROUP2_SUPER_MAGIC                  = 0x63677270\n\tCGROUP_SUPER_MAGIC                   = 0x27e0eb\n\tCIBAUD                               = 0x100f0000\n\tCLOCAL                               = 0x800\n\tCLOCK_BOOTTIME                       = 0x7\n\tCLOCK_BOOTTIME_ALARM                 = 0x9\n\tCLOCK_DEFAULT                        = 0x0\n\tCLOCK_EXT                            = 0x1\n\tCLOCK_INT                            = 0x2\n\tCLOCK_MONOTONIC                      = 0x1\n\tCLOCK_MONOTONIC_COARSE               = 0x6\n\tCLOCK_MONOTONIC_RAW                  = 0x4\n\tCLOCK_PROCESS_CPUTIME_ID             = 0x2\n\tCLOCK_REALTIME                       = 0x0\n\tCLOCK_REALTIME_ALARM                 = 0x8\n\tCLOCK_REALTIME_COARSE                = 0x5\n\tCLOCK_TAI                            = 0xb\n\tCLOCK_THREAD_CPUTIME_ID              = 0x3\n\tCLOCK_TXFROMRX                       = 0x4\n\tCLOCK_TXINT                          = 0x3\n\tCLONE_CHILD_CLEARTID                 = 0x200000\n\tCLONE_CHILD_SETTID                   = 0x1000000\n\tCLONE_DETACHED                       = 0x400000\n\tCLONE_FILES                          = 0x400\n\tCLONE_FS                             = 0x200\n\tCLONE_IO                             = 0x80000000\n\tCLONE_NEWCGROUP                      = 0x2000000\n\tCLONE_NEWIPC                         = 0x8000000\n\tCLONE_NEWNET                         = 0x40000000\n\tCLONE_NEWNS                          = 0x20000\n\tCLONE_NEWPID                         = 0x20000000\n\tCLONE_NEWUSER                        = 0x10000000\n\tCLONE_NEWUTS                         = 0x4000000\n\tCLONE_PARENT                         = 0x8000\n\tCLONE_PARENT_SETTID                  = 0x100000\n\tCLONE_PTRACE                         = 0x2000\n\tCLONE_SETTLS                         = 0x80000\n\tCLONE_SIGHAND                        = 0x800\n\tCLONE_SYSVSEM                        = 0x40000\n\tCLONE_THREAD                         = 0x10000\n\tCLONE_UNTRACED                       = 0x800000\n\tCLONE_VFORK                          = 0x4000\n\tCLONE_VM                             = 0x100\n\tCMSPAR                               = 0x40000000\n\tCODA_SUPER_MAGIC                     = 0x73757245\n\tCR0                                  = 0x0\n\tCR1                                  = 0x200\n\tCR2                                  = 0x400\n\tCR3                                  = 0x600\n\tCRAMFS_MAGIC                         = 0x28cd3d45\n\tCRDLY                                = 0x600\n\tCREAD                                = 0x80\n\tCRTSCTS                              = 0x80000000\n\tCRYPTO_MAX_NAME                      = 0x40\n\tCRYPTO_MSG_MAX                       = 0x15\n\tCRYPTO_NR_MSGTYPES                   = 0x6\n\tCRYPTO_REPORT_MAXSIZE                = 0x160\n\tCS5                                  = 0x0\n\tCS6                                  = 0x10\n\tCS7                                  = 0x20\n\tCS8                                  = 0x30\n\tCSIGNAL                              = 0xff\n\tCSIZE                                = 0x30\n\tCSTART                               = 0x11\n\tCSTATUS                              = 0x0\n\tCSTOP                                = 0x13\n\tCSTOPB                               = 0x40\n\tCSUSP                                = 0x1a\n\tDAXFS_MAGIC                          = 0x64646178\n\tDEBUGFS_MAGIC                        = 0x64626720\n\tDEVPTS_SUPER_MAGIC                   = 0x1cd1\n\tDT_BLK                               = 0x6\n\tDT_CHR                               = 0x2\n\tDT_DIR                               = 0x4\n\tDT_FIFO                              = 0x1\n\tDT_LNK                               = 0xa\n\tDT_REG                               = 0x8\n\tDT_SOCK                              = 0xc\n\tDT_UNKNOWN                           = 0x0\n\tDT_WHT                               = 0xe\n\tECHO                                 = 0x8\n\tECHOCTL                              = 0x200\n\tECHOE                                = 0x10\n\tECHOK                                = 0x20\n\tECHOKE                               = 0x800\n\tECHONL                               = 0x40\n\tECHOPRT                              = 0x400\n\tECRYPTFS_SUPER_MAGIC                 = 0xf15f\n\tEFD_CLOEXEC                          = 0x80000\n\tEFD_NONBLOCK                         = 0x800\n\tEFD_SEMAPHORE                        = 0x1\n\tEFIVARFS_MAGIC                       = 0xde5e81e4\n\tEFS_SUPER_MAGIC                      = 0x414a53\n\tENCODING_DEFAULT                     = 0x0\n\tENCODING_FM_MARK                     = 0x3\n\tENCODING_FM_SPACE                    = 0x4\n\tENCODING_MANCHESTER                  = 0x5\n\tENCODING_NRZ                         = 0x1\n\tENCODING_NRZI                        = 0x2\n\tEPOLLERR                             = 0x8\n\tEPOLLET                              = 0x80000000\n\tEPOLLEXCLUSIVE                       = 0x10000000\n\tEPOLLHUP                             = 0x10\n\tEPOLLIN                              = 0x1\n\tEPOLLMSG                             = 0x400\n\tEPOLLONESHOT                         = 0x40000000\n\tEPOLLOUT                             = 0x4\n\tEPOLLPRI                             = 0x2\n\tEPOLLRDBAND                          = 0x80\n\tEPOLLRDHUP                           = 0x2000\n\tEPOLLRDNORM                          = 0x40\n\tEPOLLWAKEUP                          = 0x20000000\n\tEPOLLWRBAND                          = 0x200\n\tEPOLLWRNORM                          = 0x100\n\tEPOLL_CLOEXEC                        = 0x80000\n\tEPOLL_CTL_ADD                        = 0x1\n\tEPOLL_CTL_DEL                        = 0x2\n\tEPOLL_CTL_MOD                        = 0x3\n\tETH_P_1588                           = 0x88f7\n\tETH_P_8021AD                         = 0x88a8\n\tETH_P_8021AH                         = 0x88e7\n\tETH_P_8021Q                          = 0x8100\n\tETH_P_80221                          = 0x8917\n\tETH_P_802_2                          = 0x4\n\tETH_P_802_3                          = 0x1\n\tETH_P_802_3_MIN                      = 0x600\n\tETH_P_802_EX1                        = 0x88b5\n\tETH_P_AARP                           = 0x80f3\n\tETH_P_AF_IUCV                        = 0xfbfb\n\tETH_P_ALL                            = 0x3\n\tETH_P_AOE                            = 0x88a2\n\tETH_P_ARCNET                         = 0x1a\n\tETH_P_ARP                            = 0x806\n\tETH_P_ATALK                          = 0x809b\n\tETH_P_ATMFATE                        = 0x8884\n\tETH_P_ATMMPOA                        = 0x884c\n\tETH_P_AX25                           = 0x2\n\tETH_P_BATMAN                         = 0x4305\n\tETH_P_BPQ                            = 0x8ff\n\tETH_P_CAIF                           = 0xf7\n\tETH_P_CAN                            = 0xc\n\tETH_P_CANFD                          = 0xd\n\tETH_P_CONTROL                        = 0x16\n\tETH_P_CUST                           = 0x6006\n\tETH_P_DDCMP                          = 0x6\n\tETH_P_DEC                            = 0x6000\n\tETH_P_DIAG                           = 0x6005\n\tETH_P_DNA_DL                         = 0x6001\n\tETH_P_DNA_RC                         = 0x6002\n\tETH_P_DNA_RT                         = 0x6003\n\tETH_P_DSA                            = 0x1b\n\tETH_P_ECONET                         = 0x18\n\tETH_P_EDSA                           = 0xdada\n\tETH_P_ERSPAN                         = 0x88be\n\tETH_P_ERSPAN2                        = 0x22eb\n\tETH_P_FCOE                           = 0x8906\n\tETH_P_FIP                            = 0x8914\n\tETH_P_HDLC                           = 0x19\n\tETH_P_HSR                            = 0x892f\n\tETH_P_IBOE                           = 0x8915\n\tETH_P_IEEE802154                     = 0xf6\n\tETH_P_IEEEPUP                        = 0xa00\n\tETH_P_IEEEPUPAT                      = 0xa01\n\tETH_P_IFE                            = 0xed3e\n\tETH_P_IP                             = 0x800\n\tETH_P_IPV6                           = 0x86dd\n\tETH_P_IPX                            = 0x8137\n\tETH_P_IRDA                           = 0x17\n\tETH_P_LAT                            = 0x6004\n\tETH_P_LINK_CTL                       = 0x886c\n\tETH_P_LOCALTALK                      = 0x9\n\tETH_P_LOOP                           = 0x60\n\tETH_P_LOOPBACK                       = 0x9000\n\tETH_P_MACSEC                         = 0x88e5\n\tETH_P_MAP                            = 0xf9\n\tETH_P_MOBITEX                        = 0x15\n\tETH_P_MPLS_MC                        = 0x8848\n\tETH_P_MPLS_UC                        = 0x8847\n\tETH_P_MVRP                           = 0x88f5\n\tETH_P_NCSI                           = 0x88f8\n\tETH_P_NSH                            = 0x894f\n\tETH_P_PAE                            = 0x888e\n\tETH_P_PAUSE                          = 0x8808\n\tETH_P_PHONET                         = 0xf5\n\tETH_P_PPPTALK                        = 0x10\n\tETH_P_PPP_DISC                       = 0x8863\n\tETH_P_PPP_MP                         = 0x8\n\tETH_P_PPP_SES                        = 0x8864\n\tETH_P_PREAUTH                        = 0x88c7\n\tETH_P_PRP                            = 0x88fb\n\tETH_P_PUP                            = 0x200\n\tETH_P_PUPAT                          = 0x201\n\tETH_P_QINQ1                          = 0x9100\n\tETH_P_QINQ2                          = 0x9200\n\tETH_P_QINQ3                          = 0x9300\n\tETH_P_RARP                           = 0x8035\n\tETH_P_SCA                            = 0x6007\n\tETH_P_SLOW                           = 0x8809\n\tETH_P_SNAP                           = 0x5\n\tETH_P_TDLS                           = 0x890d\n\tETH_P_TEB                            = 0x6558\n\tETH_P_TIPC                           = 0x88ca\n\tETH_P_TRAILER                        = 0x1c\n\tETH_P_TR_802_2                       = 0x11\n\tETH_P_TSN                            = 0x22f0\n\tETH_P_WAN_PPP                        = 0x7\n\tETH_P_WCCP                           = 0x883e\n\tETH_P_X25                            = 0x805\n\tETH_P_XDSA                           = 0xf8\n\tEXABYTE_ENABLE_NEST                  = 0xf0\n\tEXT2_SUPER_MAGIC                     = 0xef53\n\tEXT3_SUPER_MAGIC                     = 0xef53\n\tEXT4_SUPER_MAGIC                     = 0xef53\n\tEXTA                                 = 0xe\n\tEXTB                                 = 0xf\n\tEXTPROC                              = 0x10000\n\tF2FS_SUPER_MAGIC                     = 0xf2f52010\n\tFALLOC_FL_COLLAPSE_RANGE             = 0x8\n\tFALLOC_FL_INSERT_RANGE               = 0x20\n\tFALLOC_FL_KEEP_SIZE                  = 0x1\n\tFALLOC_FL_NO_HIDE_STALE              = 0x4\n\tFALLOC_FL_PUNCH_HOLE                 = 0x2\n\tFALLOC_FL_UNSHARE_RANGE              = 0x40\n\tFALLOC_FL_ZERO_RANGE                 = 0x10\n\tFANOTIFY_METADATA_VERSION            = 0x3\n\tFAN_ACCESS                           = 0x1\n\tFAN_ACCESS_PERM                      = 0x20000\n\tFAN_ALLOW                            = 0x1\n\tFAN_ALL_CLASS_BITS                   = 0xc\n\tFAN_ALL_EVENTS                       = 0x3b\n\tFAN_ALL_INIT_FLAGS                   = 0x3f\n\tFAN_ALL_MARK_FLAGS                   = 0xff\n\tFAN_ALL_OUTGOING_EVENTS              = 0x3403b\n\tFAN_ALL_PERM_EVENTS                  = 0x30000\n\tFAN_ATTRIB                           = 0x4\n\tFAN_AUDIT                            = 0x10\n\tFAN_CLASS_CONTENT                    = 0x4\n\tFAN_CLASS_NOTIF                      = 0x0\n\tFAN_CLASS_PRE_CONTENT                = 0x8\n\tFAN_CLOEXEC                          = 0x1\n\tFAN_CLOSE                            = 0x18\n\tFAN_CLOSE_NOWRITE                    = 0x10\n\tFAN_CLOSE_WRITE                      = 0x8\n\tFAN_CREATE                           = 0x100\n\tFAN_DELETE                           = 0x200\n\tFAN_DELETE_SELF                      = 0x400\n\tFAN_DENY                             = 0x2\n\tFAN_ENABLE_AUDIT                     = 0x40\n\tFAN_EVENT_INFO_TYPE_FID              = 0x1\n\tFAN_EVENT_METADATA_LEN               = 0x18\n\tFAN_EVENT_ON_CHILD                   = 0x8000000\n\tFAN_MARK_ADD                         = 0x1\n\tFAN_MARK_DONT_FOLLOW                 = 0x4\n\tFAN_MARK_FILESYSTEM                  = 0x100\n\tFAN_MARK_FLUSH                       = 0x80\n\tFAN_MARK_IGNORED_MASK                = 0x20\n\tFAN_MARK_IGNORED_SURV_MODIFY         = 0x40\n\tFAN_MARK_INODE                       = 0x0\n\tFAN_MARK_MOUNT                       = 0x10\n\tFAN_MARK_ONLYDIR                     = 0x8\n\tFAN_MARK_REMOVE                      = 0x2\n\tFAN_MODIFY                           = 0x2\n\tFAN_MOVE                             = 0xc0\n\tFAN_MOVED_FROM                       = 0x40\n\tFAN_MOVED_TO                         = 0x80\n\tFAN_MOVE_SELF                        = 0x800\n\tFAN_NOFD                             = -0x1\n\tFAN_NONBLOCK                         = 0x2\n\tFAN_ONDIR                            = 0x40000000\n\tFAN_OPEN                             = 0x20\n\tFAN_OPEN_EXEC                        = 0x1000\n\tFAN_OPEN_EXEC_PERM                   = 0x40000\n\tFAN_OPEN_PERM                        = 0x10000\n\tFAN_Q_OVERFLOW                       = 0x4000\n\tFAN_REPORT_FID                       = 0x200\n\tFAN_REPORT_TID                       = 0x100\n\tFAN_UNLIMITED_MARKS                  = 0x20\n\tFAN_UNLIMITED_QUEUE                  = 0x10\n\tFD_CLOEXEC                           = 0x1\n\tFD_SETSIZE                           = 0x400\n\tFF0                                  = 0x0\n\tFF1                                  = 0x8000\n\tFFDLY                                = 0x8000\n\tFLUSHO                               = 0x1000\n\tFP_XSTATE_MAGIC2                     = 0x46505845\n\tFS_ENCRYPTION_MODE_ADIANTUM          = 0x9\n\tFS_ENCRYPTION_MODE_AES_128_CBC       = 0x5\n\tFS_ENCRYPTION_MODE_AES_128_CTS       = 0x6\n\tFS_ENCRYPTION_MODE_AES_256_CBC       = 0x3\n\tFS_ENCRYPTION_MODE_AES_256_CTS       = 0x4\n\tFS_ENCRYPTION_MODE_AES_256_GCM       = 0x2\n\tFS_ENCRYPTION_MODE_AES_256_XTS       = 0x1\n\tFS_ENCRYPTION_MODE_INVALID           = 0x0\n\tFS_ENCRYPTION_MODE_SPECK128_256_CTS  = 0x8\n\tFS_ENCRYPTION_MODE_SPECK128_256_XTS  = 0x7\n\tFS_IOC_GET_ENCRYPTION_POLICY         = 0x400c6615\n\tFS_IOC_GET_ENCRYPTION_PWSALT         = 0x40106614\n\tFS_IOC_SET_ENCRYPTION_POLICY         = 0x800c6613\n\tFS_KEY_DESCRIPTOR_SIZE               = 0x8\n\tFS_KEY_DESC_PREFIX                   = \"fscrypt:\"\n\tFS_KEY_DESC_PREFIX_SIZE              = 0x8\n\tFS_MAX_KEY_SIZE                      = 0x40\n\tFS_POLICY_FLAGS_PAD_16               = 0x2\n\tFS_POLICY_FLAGS_PAD_32               = 0x3\n\tFS_POLICY_FLAGS_PAD_4                = 0x0\n\tFS_POLICY_FLAGS_PAD_8                = 0x1\n\tFS_POLICY_FLAGS_PAD_MASK             = 0x3\n\tFS_POLICY_FLAGS_VALID                = 0x7\n\tFUTEXFS_SUPER_MAGIC                  = 0xbad1dea\n\tF_ADD_SEALS                          = 0x409\n\tF_DUPFD                              = 0x0\n\tF_DUPFD_CLOEXEC                      = 0x406\n\tF_EXLCK                              = 0x4\n\tF_GETFD                              = 0x1\n\tF_GETFL                              = 0x3\n\tF_GETLEASE                           = 0x401\n\tF_GETLK                              = 0x5\n\tF_GETLK64                            = 0x5\n\tF_GETOWN                             = 0x9\n\tF_GETOWN_EX                          = 0x10\n\tF_GETPIPE_SZ                         = 0x408\n\tF_GETSIG                             = 0xb\n\tF_GET_FILE_RW_HINT                   = 0x40d\n\tF_GET_RW_HINT                        = 0x40b\n\tF_GET_SEALS                          = 0x40a\n\tF_LOCK                               = 0x1\n\tF_NOTIFY                             = 0x402\n\tF_OFD_GETLK                          = 0x24\n\tF_OFD_SETLK                          = 0x25\n\tF_OFD_SETLKW                         = 0x26\n\tF_OK                                 = 0x0\n\tF_RDLCK                              = 0x0\n\tF_SEAL_GROW                          = 0x4\n\tF_SEAL_SEAL                          = 0x1\n\tF_SEAL_SHRINK                        = 0x2\n\tF_SEAL_WRITE                         = 0x8\n\tF_SETFD                              = 0x2\n\tF_SETFL                              = 0x4\n\tF_SETLEASE                           = 0x400\n\tF_SETLK                              = 0x6\n\tF_SETLK64                            = 0x6\n\tF_SETLKW                             = 0x7\n\tF_SETLKW64                           = 0x7\n\tF_SETOWN                             = 0x8\n\tF_SETOWN_EX                          = 0xf\n\tF_SETPIPE_SZ                         = 0x407\n\tF_SETSIG                             = 0xa\n\tF_SET_FILE_RW_HINT                   = 0x40e\n\tF_SET_RW_HINT                        = 0x40c\n\tF_SHLCK                              = 0x8\n\tF_TEST                               = 0x3\n\tF_TLOCK                              = 0x2\n\tF_ULOCK                              = 0x0\n\tF_UNLCK                              = 0x2\n\tF_WRLCK                              = 0x1\n\tGENL_ADMIN_PERM                      = 0x1\n\tGENL_CMD_CAP_DO                      = 0x2\n\tGENL_CMD_CAP_DUMP                    = 0x4\n\tGENL_CMD_CAP_HASPOL                  = 0x8\n\tGENL_HDRLEN                          = 0x4\n\tGENL_ID_CTRL                         = 0x10\n\tGENL_ID_PMCRAID                      = 0x12\n\tGENL_ID_VFS_DQUOT                    = 0x11\n\tGENL_MAX_ID                          = 0x3ff\n\tGENL_MIN_ID                          = 0x10\n\tGENL_NAMSIZ                          = 0x10\n\tGENL_START_ALLOC                     = 0x13\n\tGENL_UNS_ADMIN_PERM                  = 0x10\n\tGRND_NONBLOCK                        = 0x1\n\tGRND_RANDOM                          = 0x2\n\tHDIO_DRIVE_CMD                       = 0x31f\n\tHDIO_DRIVE_CMD_AEB                   = 0x31e\n\tHDIO_DRIVE_CMD_HDR_SIZE              = 0x4\n\tHDIO_DRIVE_HOB_HDR_SIZE              = 0x8\n\tHDIO_DRIVE_RESET                     = 0x31c\n\tHDIO_DRIVE_TASK                      = 0x31e\n\tHDIO_DRIVE_TASKFILE                  = 0x31d\n\tHDIO_DRIVE_TASK_HDR_SIZE             = 0x8\n\tHDIO_GETGEO                          = 0x301\n\tHDIO_GET_32BIT                       = 0x309\n\tHDIO_GET_ACOUSTIC                    = 0x30f\n\tHDIO_GET_ADDRESS                     = 0x310\n\tHDIO_GET_BUSSTATE                    = 0x31a\n\tHDIO_GET_DMA                         = 0x30b\n\tHDIO_GET_IDENTITY                    = 0x30d\n\tHDIO_GET_KEEPSETTINGS                = 0x308\n\tHDIO_GET_MULTCOUNT                   = 0x304\n\tHDIO_GET_NICE                        = 0x30c\n\tHDIO_GET_NOWERR                      = 0x30a\n\tHDIO_GET_QDMA                        = 0x305\n\tHDIO_GET_UNMASKINTR                  = 0x302\n\tHDIO_GET_WCACHE                      = 0x30e\n\tHDIO_OBSOLETE_IDENTITY               = 0x307\n\tHDIO_SCAN_HWIF                       = 0x328\n\tHDIO_SET_32BIT                       = 0x324\n\tHDIO_SET_ACOUSTIC                    = 0x32c\n\tHDIO_SET_ADDRESS                     = 0x32f\n\tHDIO_SET_BUSSTATE                    = 0x32d\n\tHDIO_SET_DMA                         = 0x326\n\tHDIO_SET_KEEPSETTINGS                = 0x323\n\tHDIO_SET_MULTCOUNT                   = 0x321\n\tHDIO_SET_NICE                        = 0x329\n\tHDIO_SET_NOWERR                      = 0x325\n\tHDIO_SET_PIO_MODE                    = 0x327\n\tHDIO_SET_QDMA                        = 0x32e\n\tHDIO_SET_UNMASKINTR                  = 0x322\n\tHDIO_SET_WCACHE                      = 0x32b\n\tHDIO_SET_XFER                        = 0x306\n\tHDIO_TRISTATE_HWIF                   = 0x31b\n\tHDIO_UNREGISTER_HWIF                 = 0x32a\n\tHOSTFS_SUPER_MAGIC                   = 0xc0ffee\n\tHPFS_SUPER_MAGIC                     = 0xf995e849\n\tHUGETLBFS_MAGIC                      = 0x958458f6\n\tHUPCL                                = 0x400\n\tIBSHIFT                              = 0x10\n\tICANON                               = 0x2\n\tICMPV6_FILTER                        = 0x1\n\tICRNL                                = 0x100\n\tIEXTEN                               = 0x8000\n\tIFA_F_DADFAILED                      = 0x8\n\tIFA_F_DEPRECATED                     = 0x20\n\tIFA_F_HOMEADDRESS                    = 0x10\n\tIFA_F_MANAGETEMPADDR                 = 0x100\n\tIFA_F_MCAUTOJOIN                     = 0x400\n\tIFA_F_NODAD                          = 0x2\n\tIFA_F_NOPREFIXROUTE                  = 0x200\n\tIFA_F_OPTIMISTIC                     = 0x4\n\tIFA_F_PERMANENT                      = 0x80\n\tIFA_F_SECONDARY                      = 0x1\n\tIFA_F_STABLE_PRIVACY                 = 0x800\n\tIFA_F_TEMPORARY                      = 0x1\n\tIFA_F_TENTATIVE                      = 0x40\n\tIFA_MAX                              = 0xa\n\tIFF_ALLMULTI                         = 0x200\n\tIFF_ATTACH_QUEUE                     = 0x200\n\tIFF_AUTOMEDIA                        = 0x4000\n\tIFF_BROADCAST                        = 0x2\n\tIFF_DEBUG                            = 0x4\n\tIFF_DETACH_QUEUE                     = 0x400\n\tIFF_DORMANT                          = 0x20000\n\tIFF_DYNAMIC                          = 0x8000\n\tIFF_ECHO                             = 0x40000\n\tIFF_LOOPBACK                         = 0x8\n\tIFF_LOWER_UP                         = 0x10000\n\tIFF_MASTER                           = 0x400\n\tIFF_MULTICAST                        = 0x1000\n\tIFF_MULTI_QUEUE                      = 0x100\n\tIFF_NAPI                             = 0x10\n\tIFF_NAPI_FRAGS                       = 0x20\n\tIFF_NOARP                            = 0x80\n\tIFF_NOFILTER                         = 0x1000\n\tIFF_NOTRAILERS                       = 0x20\n\tIFF_NO_PI                            = 0x1000\n\tIFF_ONE_QUEUE                        = 0x2000\n\tIFF_PERSIST                          = 0x800\n\tIFF_POINTOPOINT                      = 0x10\n\tIFF_PORTSEL                          = 0x2000\n\tIFF_PROMISC                          = 0x100\n\tIFF_RUNNING                          = 0x40\n\tIFF_SLAVE                            = 0x800\n\tIFF_TAP                              = 0x2\n\tIFF_TUN                              = 0x1\n\tIFF_TUN_EXCL                         = 0x8000\n\tIFF_UP                               = 0x1\n\tIFF_VNET_HDR                         = 0x4000\n\tIFF_VOLATILE                         = 0x70c5a\n\tIFNAMSIZ                             = 0x10\n\tIGNBRK                               = 0x1\n\tIGNCR                                = 0x80\n\tIGNPAR                               = 0x4\n\tIMAXBEL                              = 0x2000\n\tINLCR                                = 0x40\n\tINPCK                                = 0x10\n\tIN_ACCESS                            = 0x1\n\tIN_ALL_EVENTS                        = 0xfff\n\tIN_ATTRIB                            = 0x4\n\tIN_CLASSA_HOST                       = 0xffffff\n\tIN_CLASSA_MAX                        = 0x80\n\tIN_CLASSA_NET                        = 0xff000000\n\tIN_CLASSA_NSHIFT                     = 0x18\n\tIN_CLASSB_HOST                       = 0xffff\n\tIN_CLASSB_MAX                        = 0x10000\n\tIN_CLASSB_NET                        = 0xffff0000\n\tIN_CLASSB_NSHIFT                     = 0x10\n\tIN_CLASSC_HOST                       = 0xff\n\tIN_CLASSC_NET                        = 0xffffff00\n\tIN_CLASSC_NSHIFT                     = 0x8\n\tIN_CLOEXEC                           = 0x80000\n\tIN_CLOSE                             = 0x18\n\tIN_CLOSE_NOWRITE                     = 0x10\n\tIN_CLOSE_WRITE                       = 0x8\n\tIN_CREATE                            = 0x100\n\tIN_DELETE                            = 0x200\n\tIN_DELETE_SELF                       = 0x400\n\tIN_DONT_FOLLOW                       = 0x2000000\n\tIN_EXCL_UNLINK                       = 0x4000000\n\tIN_IGNORED                           = 0x8000\n\tIN_ISDIR                             = 0x40000000\n\tIN_LOOPBACKNET                       = 0x7f\n\tIN_MASK_ADD                          = 0x20000000\n\tIN_MASK_CREATE                       = 0x10000000\n\tIN_MODIFY                            = 0x2\n\tIN_MOVE                              = 0xc0\n\tIN_MOVED_FROM                        = 0x40\n\tIN_MOVED_TO                          = 0x80\n\tIN_MOVE_SELF                         = 0x800\n\tIN_NONBLOCK                          = 0x800\n\tIN_ONESHOT                           = 0x80000000\n\tIN_ONLYDIR                           = 0x1000000\n\tIN_OPEN                              = 0x20\n\tIN_Q_OVERFLOW                        = 0x4000\n\tIN_UNMOUNT                           = 0x2000\n\tIOCTL_VM_SOCKETS_GET_LOCAL_CID       = 0x7b9\n\tIPPROTO_AH                           = 0x33\n\tIPPROTO_BEETPH                       = 0x5e\n\tIPPROTO_COMP                         = 0x6c\n\tIPPROTO_DCCP                         = 0x21\n\tIPPROTO_DSTOPTS                      = 0x3c\n\tIPPROTO_EGP                          = 0x8\n\tIPPROTO_ENCAP                        = 0x62\n\tIPPROTO_ESP                          = 0x32\n\tIPPROTO_FRAGMENT                     = 0x2c\n\tIPPROTO_GRE                          = 0x2f\n\tIPPROTO_HOPOPTS                      = 0x0\n\tIPPROTO_ICMP                         = 0x1\n\tIPPROTO_ICMPV6                       = 0x3a\n\tIPPROTO_IDP                          = 0x16\n\tIPPROTO_IGMP                         = 0x2\n\tIPPROTO_IP                           = 0x0\n\tIPPROTO_IPIP                         = 0x4\n\tIPPROTO_IPV6                         = 0x29\n\tIPPROTO_MH                           = 0x87\n\tIPPROTO_MPLS                         = 0x89\n\tIPPROTO_MTP                          = 0x5c\n\tIPPROTO_NONE                         = 0x3b\n\tIPPROTO_PIM                          = 0x67\n\tIPPROTO_PUP                          = 0xc\n\tIPPROTO_RAW                          = 0xff\n\tIPPROTO_ROUTING                      = 0x2b\n\tIPPROTO_RSVP                         = 0x2e\n\tIPPROTO_SCTP                         = 0x84\n\tIPPROTO_TCP                          = 0x6\n\tIPPROTO_TP                           = 0x1d\n\tIPPROTO_UDP                          = 0x11\n\tIPPROTO_UDPLITE                      = 0x88\n\tIPV6_2292DSTOPTS                     = 0x4\n\tIPV6_2292HOPLIMIT                    = 0x8\n\tIPV6_2292HOPOPTS                     = 0x3\n\tIPV6_2292PKTINFO                     = 0x2\n\tIPV6_2292PKTOPTIONS                  = 0x6\n\tIPV6_2292RTHDR                       = 0x5\n\tIPV6_ADDRFORM                        = 0x1\n\tIPV6_ADDR_PREFERENCES                = 0x48\n\tIPV6_ADD_MEMBERSHIP                  = 0x14\n\tIPV6_AUTHHDR                         = 0xa\n\tIPV6_AUTOFLOWLABEL                   = 0x46\n\tIPV6_CHECKSUM                        = 0x7\n\tIPV6_DONTFRAG                        = 0x3e\n\tIPV6_DROP_MEMBERSHIP                 = 0x15\n\tIPV6_DSTOPTS                         = 0x3b\n\tIPV6_FREEBIND                        = 0x4e\n\tIPV6_HDRINCL                         = 0x24\n\tIPV6_HOPLIMIT                        = 0x34\n\tIPV6_HOPOPTS                         = 0x36\n\tIPV6_IPSEC_POLICY                    = 0x22\n\tIPV6_JOIN_ANYCAST                    = 0x1b\n\tIPV6_JOIN_GROUP                      = 0x14\n\tIPV6_LEAVE_ANYCAST                   = 0x1c\n\tIPV6_LEAVE_GROUP                     = 0x15\n\tIPV6_MINHOPCOUNT                     = 0x49\n\tIPV6_MTU                             = 0x18\n\tIPV6_MTU_DISCOVER                    = 0x17\n\tIPV6_MULTICAST_ALL                   = 0x1d\n\tIPV6_MULTICAST_HOPS                  = 0x12\n\tIPV6_MULTICAST_IF                    = 0x11\n\tIPV6_MULTICAST_LOOP                  = 0x13\n\tIPV6_NEXTHOP                         = 0x9\n\tIPV6_ORIGDSTADDR                     = 0x4a\n\tIPV6_PATHMTU                         = 0x3d\n\tIPV6_PKTINFO                         = 0x32\n\tIPV6_PMTUDISC_DO                     = 0x2\n\tIPV6_PMTUDISC_DONT                   = 0x0\n\tIPV6_PMTUDISC_INTERFACE              = 0x4\n\tIPV6_PMTUDISC_OMIT                   = 0x5\n\tIPV6_PMTUDISC_PROBE                  = 0x3\n\tIPV6_PMTUDISC_WANT                   = 0x1\n\tIPV6_RECVDSTOPTS                     = 0x3a\n\tIPV6_RECVERR                         = 0x19\n\tIPV6_RECVFRAGSIZE                    = 0x4d\n\tIPV6_RECVHOPLIMIT                    = 0x33\n\tIPV6_RECVHOPOPTS                     = 0x35\n\tIPV6_RECVORIGDSTADDR                 = 0x4a\n\tIPV6_RECVPATHMTU                     = 0x3c\n\tIPV6_RECVPKTINFO                     = 0x31\n\tIPV6_RECVRTHDR                       = 0x38\n\tIPV6_RECVTCLASS                      = 0x42\n\tIPV6_ROUTER_ALERT                    = 0x16\n\tIPV6_RTHDR                           = 0x39\n\tIPV6_RTHDRDSTOPTS                    = 0x37\n\tIPV6_RTHDR_LOOSE                     = 0x0\n\tIPV6_RTHDR_STRICT                    = 0x1\n\tIPV6_RTHDR_TYPE_0                    = 0x0\n\tIPV6_RXDSTOPTS                       = 0x3b\n\tIPV6_RXHOPOPTS                       = 0x36\n\tIPV6_TCLASS                          = 0x43\n\tIPV6_TRANSPARENT                     = 0x4b\n\tIPV6_UNICAST_HOPS                    = 0x10\n\tIPV6_UNICAST_IF                      = 0x4c\n\tIPV6_V6ONLY                          = 0x1a\n\tIPV6_XFRM_POLICY                     = 0x23\n\tIP_ADD_MEMBERSHIP                    = 0x23\n\tIP_ADD_SOURCE_MEMBERSHIP             = 0x27\n\tIP_BIND_ADDRESS_NO_PORT              = 0x18\n\tIP_BLOCK_SOURCE                      = 0x26\n\tIP_CHECKSUM                          = 0x17\n\tIP_DEFAULT_MULTICAST_LOOP            = 0x1\n\tIP_DEFAULT_MULTICAST_TTL             = 0x1\n\tIP_DF                                = 0x4000\n\tIP_DROP_MEMBERSHIP                   = 0x24\n\tIP_DROP_SOURCE_MEMBERSHIP            = 0x28\n\tIP_FREEBIND                          = 0xf\n\tIP_HDRINCL                           = 0x3\n\tIP_IPSEC_POLICY                      = 0x10\n\tIP_MAXPACKET                         = 0xffff\n\tIP_MAX_MEMBERSHIPS                   = 0x14\n\tIP_MF                                = 0x2000\n\tIP_MINTTL                            = 0x15\n\tIP_MSFILTER                          = 0x29\n\tIP_MSS                               = 0x240\n\tIP_MTU                               = 0xe\n\tIP_MTU_DISCOVER                      = 0xa\n\tIP_MULTICAST_ALL                     = 0x31\n\tIP_MULTICAST_IF                      = 0x20\n\tIP_MULTICAST_LOOP                    = 0x22\n\tIP_MULTICAST_TTL                     = 0x21\n\tIP_NODEFRAG                          = 0x16\n\tIP_OFFMASK                           = 0x1fff\n\tIP_OPTIONS                           = 0x4\n\tIP_ORIGDSTADDR                       = 0x14\n\tIP_PASSSEC                           = 0x12\n\tIP_PKTINFO                           = 0x8\n\tIP_PKTOPTIONS                        = 0x9\n\tIP_PMTUDISC                          = 0xa\n\tIP_PMTUDISC_DO                       = 0x2\n\tIP_PMTUDISC_DONT                     = 0x0\n\tIP_PMTUDISC_INTERFACE                = 0x4\n\tIP_PMTUDISC_OMIT                     = 0x5\n\tIP_PMTUDISC_PROBE                    = 0x3\n\tIP_PMTUDISC_WANT                     = 0x1\n\tIP_RECVERR                           = 0xb\n\tIP_RECVFRAGSIZE                      = 0x19\n\tIP_RECVOPTS                          = 0x6\n\tIP_RECVORIGDSTADDR                   = 0x14\n\tIP_RECVRETOPTS                       = 0x7\n\tIP_RECVTOS                           = 0xd\n\tIP_RECVTTL                           = 0xc\n\tIP_RETOPTS                           = 0x7\n\tIP_RF                                = 0x8000\n\tIP_ROUTER_ALERT                      = 0x5\n\tIP_TOS                               = 0x1\n\tIP_TRANSPARENT                       = 0x13\n\tIP_TTL                               = 0x2\n\tIP_UNBLOCK_SOURCE                    = 0x25\n\tIP_UNICAST_IF                        = 0x32\n\tIP_XFRM_POLICY                       = 0x11\n\tISIG                                 = 0x1\n\tISOFS_SUPER_MAGIC                    = 0x9660\n\tISTRIP                               = 0x20\n\tIUCLC                                = 0x200\n\tIUTF8                                = 0x4000\n\tIXANY                                = 0x800\n\tIXOFF                                = 0x1000\n\tIXON                                 = 0x400\n\tJFFS2_SUPER_MAGIC                    = 0x72b6\n\tKEXEC_ARCH_386                       = 0x30000\n\tKEXEC_ARCH_68K                       = 0x40000\n\tKEXEC_ARCH_AARCH64                   = 0xb70000\n\tKEXEC_ARCH_ARM                       = 0x280000\n\tKEXEC_ARCH_DEFAULT                   = 0x0\n\tKEXEC_ARCH_IA_64                     = 0x320000\n\tKEXEC_ARCH_MASK                      = 0xffff0000\n\tKEXEC_ARCH_MIPS                      = 0x80000\n\tKEXEC_ARCH_MIPS_LE                   = 0xa0000\n\tKEXEC_ARCH_PPC                       = 0x140000\n\tKEXEC_ARCH_PPC64                     = 0x150000\n\tKEXEC_ARCH_S390                      = 0x160000\n\tKEXEC_ARCH_SH                        = 0x2a0000\n\tKEXEC_ARCH_X86_64                    = 0x3e0000\n\tKEXEC_FILE_NO_INITRAMFS              = 0x4\n\tKEXEC_FILE_ON_CRASH                  = 0x2\n\tKEXEC_FILE_UNLOAD                    = 0x1\n\tKEXEC_ON_CRASH                       = 0x1\n\tKEXEC_PRESERVE_CONTEXT               = 0x2\n\tKEXEC_SEGMENT_MAX                    = 0x10\n\tKEYCTL_ASSUME_AUTHORITY              = 0x10\n\tKEYCTL_CHOWN                         = 0x4\n\tKEYCTL_CLEAR                         = 0x7\n\tKEYCTL_DESCRIBE                      = 0x6\n\tKEYCTL_DH_COMPUTE                    = 0x17\n\tKEYCTL_GET_KEYRING_ID                = 0x0\n\tKEYCTL_GET_PERSISTENT                = 0x16\n\tKEYCTL_GET_SECURITY                  = 0x11\n\tKEYCTL_INSTANTIATE                   = 0xc\n\tKEYCTL_INSTANTIATE_IOV               = 0x14\n\tKEYCTL_INVALIDATE                    = 0x15\n\tKEYCTL_JOIN_SESSION_KEYRING          = 0x1\n\tKEYCTL_LINK                          = 0x8\n\tKEYCTL_NEGATE                        = 0xd\n\tKEYCTL_PKEY_DECRYPT                  = 0x1a\n\tKEYCTL_PKEY_ENCRYPT                  = 0x19\n\tKEYCTL_PKEY_QUERY                    = 0x18\n\tKEYCTL_PKEY_SIGN                     = 0x1b\n\tKEYCTL_PKEY_VERIFY                   = 0x1c\n\tKEYCTL_READ                          = 0xb\n\tKEYCTL_REJECT                        = 0x13\n\tKEYCTL_RESTRICT_KEYRING              = 0x1d\n\tKEYCTL_REVOKE                        = 0x3\n\tKEYCTL_SEARCH                        = 0xa\n\tKEYCTL_SESSION_TO_PARENT             = 0x12\n\tKEYCTL_SETPERM                       = 0x5\n\tKEYCTL_SET_REQKEY_KEYRING            = 0xe\n\tKEYCTL_SET_TIMEOUT                   = 0xf\n\tKEYCTL_SUPPORTS_DECRYPT              = 0x2\n\tKEYCTL_SUPPORTS_ENCRYPT              = 0x1\n\tKEYCTL_SUPPORTS_SIGN                 = 0x4\n\tKEYCTL_SUPPORTS_VERIFY               = 0x8\n\tKEYCTL_UNLINK                        = 0x9\n\tKEYCTL_UPDATE                        = 0x2\n\tKEY_REQKEY_DEFL_DEFAULT              = 0x0\n\tKEY_REQKEY_DEFL_GROUP_KEYRING        = 0x6\n\tKEY_REQKEY_DEFL_NO_CHANGE            = -0x1\n\tKEY_REQKEY_DEFL_PROCESS_KEYRING      = 0x2\n\tKEY_REQKEY_DEFL_REQUESTOR_KEYRING    = 0x7\n\tKEY_REQKEY_DEFL_SESSION_KEYRING      = 0x3\n\tKEY_REQKEY_DEFL_THREAD_KEYRING       = 0x1\n\tKEY_REQKEY_DEFL_USER_KEYRING         = 0x4\n\tKEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5\n\tKEY_SPEC_GROUP_KEYRING               = -0x6\n\tKEY_SPEC_PROCESS_KEYRING             = -0x2\n\tKEY_SPEC_REQKEY_AUTH_KEY             = -0x7\n\tKEY_SPEC_REQUESTOR_KEYRING           = -0x8\n\tKEY_SPEC_SESSION_KEYRING             = -0x3\n\tKEY_SPEC_THREAD_KEYRING              = -0x1\n\tKEY_SPEC_USER_KEYRING                = -0x4\n\tKEY_SPEC_USER_SESSION_KEYRING        = -0x5\n\tLINUX_REBOOT_CMD_CAD_OFF             = 0x0\n\tLINUX_REBOOT_CMD_CAD_ON              = 0x89abcdef\n\tLINUX_REBOOT_CMD_HALT                = 0xcdef0123\n\tLINUX_REBOOT_CMD_KEXEC               = 0x45584543\n\tLINUX_REBOOT_CMD_POWER_OFF           = 0x4321fedc\n\tLINUX_REBOOT_CMD_RESTART             = 0x1234567\n\tLINUX_REBOOT_CMD_RESTART2            = 0xa1b2c3d4\n\tLINUX_REBOOT_CMD_SW_SUSPEND          = 0xd000fce2\n\tLINUX_REBOOT_MAGIC1                  = 0xfee1dead\n\tLINUX_REBOOT_MAGIC2                  = 0x28121969\n\tLOCK_EX                              = 0x2\n\tLOCK_NB                              = 0x4\n\tLOCK_SH                              = 0x1\n\tLOCK_UN                              = 0x8\n\tMADV_DODUMP                          = 0x11\n\tMADV_DOFORK                          = 0xb\n\tMADV_DONTDUMP                        = 0x10\n\tMADV_DONTFORK                        = 0xa\n\tMADV_DONTNEED                        = 0x4\n\tMADV_FREE                            = 0x8\n\tMADV_HUGEPAGE                        = 0xe\n\tMADV_HWPOISON                        = 0x64\n\tMADV_KEEPONFORK                      = 0x13\n\tMADV_MERGEABLE                       = 0xc\n\tMADV_NOHUGEPAGE                      = 0xf\n\tMADV_NORMAL                          = 0x0\n\tMADV_RANDOM                          = 0x1\n\tMADV_REMOVE                          = 0x9\n\tMADV_SEQUENTIAL                      = 0x2\n\tMADV_UNMERGEABLE                     = 0xd\n\tMADV_WILLNEED                        = 0x3\n\tMADV_WIPEONFORK                      = 0x12\n\tMAP_32BIT                            = 0x40\n\tMAP_ANON                             = 0x20\n\tMAP_ANONYMOUS                        = 0x20\n\tMAP_DENYWRITE                        = 0x800\n\tMAP_EXECUTABLE                       = 0x1000\n\tMAP_FILE                             = 0x0\n\tMAP_FIXED                            = 0x10\n\tMAP_FIXED_NOREPLACE                  = 0x100000\n\tMAP_GROWSDOWN                        = 0x100\n\tMAP_HUGETLB                          = 0x40000\n\tMAP_HUGE_MASK                        = 0x3f\n\tMAP_HUGE_SHIFT                       = 0x1a\n\tMAP_LOCKED                           = 0x2000\n\tMAP_NONBLOCK                         = 0x10000\n\tMAP_NORESERVE                        = 0x4000\n\tMAP_POPULATE                         = 0x8000\n\tMAP_PRIVATE                          = 0x2\n\tMAP_SHARED                           = 0x1\n\tMAP_SHARED_VALIDATE                  = 0x3\n\tMAP_STACK                            = 0x20000\n\tMAP_SYNC                             = 0x80000\n\tMAP_TYPE                             = 0xf\n\tMCAST_BLOCK_SOURCE                   = 0x2b\n\tMCAST_EXCLUDE                        = 0x0\n\tMCAST_INCLUDE                        = 0x1\n\tMCAST_JOIN_GROUP                     = 0x2a\n\tMCAST_JOIN_SOURCE_GROUP              = 0x2e\n\tMCAST_LEAVE_GROUP                    = 0x2d\n\tMCAST_LEAVE_SOURCE_GROUP             = 0x2f\n\tMCAST_MSFILTER                       = 0x30\n\tMCAST_UNBLOCK_SOURCE                 = 0x2c\n\tMCL_CURRENT                          = 0x1\n\tMCL_FUTURE                           = 0x2\n\tMCL_ONFAULT                          = 0x4\n\tMFD_ALLOW_SEALING                    = 0x2\n\tMFD_CLOEXEC                          = 0x1\n\tMFD_HUGETLB                          = 0x4\n\tMFD_HUGE_16GB                        = -0x78000000\n\tMFD_HUGE_16MB                        = 0x60000000\n\tMFD_HUGE_1GB                         = 0x78000000\n\tMFD_HUGE_1MB                         = 0x50000000\n\tMFD_HUGE_256MB                       = 0x70000000\n\tMFD_HUGE_2GB                         = 0x7c000000\n\tMFD_HUGE_2MB                         = 0x54000000\n\tMFD_HUGE_32MB                        = 0x64000000\n\tMFD_HUGE_512KB                       = 0x4c000000\n\tMFD_HUGE_512MB                       = 0x74000000\n\tMFD_HUGE_64KB                        = 0x40000000\n\tMFD_HUGE_8MB                         = 0x5c000000\n\tMFD_HUGE_MASK                        = 0x3f\n\tMFD_HUGE_SHIFT                       = 0x1a\n\tMINIX2_SUPER_MAGIC                   = 0x2468\n\tMINIX2_SUPER_MAGIC2                  = 0x2478\n\tMINIX3_SUPER_MAGIC                   = 0x4d5a\n\tMINIX_SUPER_MAGIC                    = 0x137f\n\tMINIX_SUPER_MAGIC2                   = 0x138f\n\tMNT_DETACH                           = 0x2\n\tMNT_EXPIRE                           = 0x4\n\tMNT_FORCE                            = 0x1\n\tMODULE_INIT_IGNORE_MODVERSIONS       = 0x1\n\tMODULE_INIT_IGNORE_VERMAGIC          = 0x2\n\tMSDOS_SUPER_MAGIC                    = 0x4d44\n\tMSG_BATCH                            = 0x40000\n\tMSG_CMSG_CLOEXEC                     = 0x40000000\n\tMSG_CONFIRM                          = 0x800\n\tMSG_CTRUNC                           = 0x8\n\tMSG_DONTROUTE                        = 0x4\n\tMSG_DONTWAIT                         = 0x40\n\tMSG_EOR                              = 0x80\n\tMSG_ERRQUEUE                         = 0x2000\n\tMSG_FASTOPEN                         = 0x20000000\n\tMSG_FIN                              = 0x200\n\tMSG_MORE                             = 0x8000\n\tMSG_NOSIGNAL                         = 0x4000\n\tMSG_OOB                              = 0x1\n\tMSG_PEEK                             = 0x2\n\tMSG_PROXY                            = 0x10\n\tMSG_RST                              = 0x1000\n\tMSG_SYN                              = 0x400\n\tMSG_TRUNC                            = 0x20\n\tMSG_TRYHARD                          = 0x4\n\tMSG_WAITALL                          = 0x100\n\tMSG_WAITFORONE                       = 0x10000\n\tMSG_ZEROCOPY                         = 0x4000000\n\tMS_ACTIVE                            = 0x40000000\n\tMS_ASYNC                             = 0x1\n\tMS_BIND                              = 0x1000\n\tMS_BORN                              = 0x20000000\n\tMS_DIRSYNC                           = 0x80\n\tMS_INVALIDATE                        = 0x2\n\tMS_I_VERSION                         = 0x800000\n\tMS_KERNMOUNT                         = 0x400000\n\tMS_LAZYTIME                          = 0x2000000\n\tMS_MANDLOCK                          = 0x40\n\tMS_MGC_MSK                           = 0xffff0000\n\tMS_MGC_VAL                           = 0xc0ed0000\n\tMS_MOVE                              = 0x2000\n\tMS_NOATIME                           = 0x400\n\tMS_NODEV                             = 0x4\n\tMS_NODIRATIME                        = 0x800\n\tMS_NOEXEC                            = 0x8\n\tMS_NOREMOTELOCK                      = 0x8000000\n\tMS_NOSEC                             = 0x10000000\n\tMS_NOSUID                            = 0x2\n\tMS_NOUSER                            = -0x80000000\n\tMS_POSIXACL                          = 0x10000\n\tMS_PRIVATE                           = 0x40000\n\tMS_RDONLY                            = 0x1\n\tMS_REC                               = 0x4000\n\tMS_RELATIME                          = 0x200000\n\tMS_REMOUNT                           = 0x20\n\tMS_RMT_MASK                          = 0x2800051\n\tMS_SHARED                            = 0x100000\n\tMS_SILENT                            = 0x8000\n\tMS_SLAVE                             = 0x80000\n\tMS_STRICTATIME                       = 0x1000000\n\tMS_SUBMOUNT                          = 0x4000000\n\tMS_SYNC                              = 0x4\n\tMS_SYNCHRONOUS                       = 0x10\n\tMS_UNBINDABLE                        = 0x20000\n\tMS_VERBOSE                           = 0x8000\n\tMTD_INODE_FS_MAGIC                   = 0x11307854\n\tNAME_MAX                             = 0xff\n\tNCP_SUPER_MAGIC                      = 0x564c\n\tNETLINK_ADD_MEMBERSHIP               = 0x1\n\tNETLINK_AUDIT                        = 0x9\n\tNETLINK_BROADCAST_ERROR              = 0x4\n\tNETLINK_CAP_ACK                      = 0xa\n\tNETLINK_CONNECTOR                    = 0xb\n\tNETLINK_CRYPTO                       = 0x15\n\tNETLINK_DNRTMSG                      = 0xe\n\tNETLINK_DROP_MEMBERSHIP              = 0x2\n\tNETLINK_ECRYPTFS                     = 0x13\n\tNETLINK_EXT_ACK                      = 0xb\n\tNETLINK_FIB_LOOKUP                   = 0xa\n\tNETLINK_FIREWALL                     = 0x3\n\tNETLINK_GENERIC                      = 0x10\n\tNETLINK_GET_STRICT_CHK               = 0xc\n\tNETLINK_INET_DIAG                    = 0x4\n\tNETLINK_IP6_FW                       = 0xd\n\tNETLINK_ISCSI                        = 0x8\n\tNETLINK_KOBJECT_UEVENT               = 0xf\n\tNETLINK_LISTEN_ALL_NSID              = 0x8\n\tNETLINK_LIST_MEMBERSHIPS             = 0x9\n\tNETLINK_NETFILTER                    = 0xc\n\tNETLINK_NFLOG                        = 0x5\n\tNETLINK_NO_ENOBUFS                   = 0x5\n\tNETLINK_PKTINFO                      = 0x3\n\tNETLINK_RDMA                         = 0x14\n\tNETLINK_ROUTE                        = 0x0\n\tNETLINK_RX_RING                      = 0x6\n\tNETLINK_SCSITRANSPORT                = 0x12\n\tNETLINK_SELINUX                      = 0x7\n\tNETLINK_SMC                          = 0x16\n\tNETLINK_SOCK_DIAG                    = 0x4\n\tNETLINK_TX_RING                      = 0x7\n\tNETLINK_UNUSED                       = 0x1\n\tNETLINK_USERSOCK                     = 0x2\n\tNETLINK_XFRM                         = 0x6\n\tNETNSA_MAX                           = 0x5\n\tNETNSA_NSID_NOT_ASSIGNED             = -0x1\n\tNFNETLINK_V0                         = 0x0\n\tNFNLGRP_ACCT_QUOTA                   = 0x8\n\tNFNLGRP_CONNTRACK_DESTROY            = 0x3\n\tNFNLGRP_CONNTRACK_EXP_DESTROY        = 0x6\n\tNFNLGRP_CONNTRACK_EXP_NEW            = 0x4\n\tNFNLGRP_CONNTRACK_EXP_UPDATE         = 0x5\n\tNFNLGRP_CONNTRACK_NEW                = 0x1\n\tNFNLGRP_CONNTRACK_UPDATE             = 0x2\n\tNFNLGRP_MAX                          = 0x9\n\tNFNLGRP_NFTABLES                     = 0x7\n\tNFNLGRP_NFTRACE                      = 0x9\n\tNFNLGRP_NONE                         = 0x0\n\tNFNL_BATCH_MAX                       = 0x1\n\tNFNL_MSG_BATCH_BEGIN                 = 0x10\n\tNFNL_MSG_BATCH_END                   = 0x11\n\tNFNL_NFA_NEST                        = 0x8000\n\tNFNL_SUBSYS_ACCT                     = 0x7\n\tNFNL_SUBSYS_COUNT                    = 0xc\n\tNFNL_SUBSYS_CTHELPER                 = 0x9\n\tNFNL_SUBSYS_CTNETLINK                = 0x1\n\tNFNL_SUBSYS_CTNETLINK_EXP            = 0x2\n\tNFNL_SUBSYS_CTNETLINK_TIMEOUT        = 0x8\n\tNFNL_SUBSYS_IPSET                    = 0x6\n\tNFNL_SUBSYS_NFTABLES                 = 0xa\n\tNFNL_SUBSYS_NFT_COMPAT               = 0xb\n\tNFNL_SUBSYS_NONE                     = 0x0\n\tNFNL_SUBSYS_OSF                      = 0x5\n\tNFNL_SUBSYS_QUEUE                    = 0x3\n\tNFNL_SUBSYS_ULOG                     = 0x4\n\tNFS_SUPER_MAGIC                      = 0x6969\n\tNILFS_SUPER_MAGIC                    = 0x3434\n\tNL0                                  = 0x0\n\tNL1                                  = 0x100\n\tNLA_ALIGNTO                          = 0x4\n\tNLA_F_NESTED                         = 0x8000\n\tNLA_F_NET_BYTEORDER                  = 0x4000\n\tNLA_HDRLEN                           = 0x4\n\tNLDLY                                = 0x100\n\tNLMSG_ALIGNTO                        = 0x4\n\tNLMSG_DONE                           = 0x3\n\tNLMSG_ERROR                          = 0x2\n\tNLMSG_HDRLEN                         = 0x10\n\tNLMSG_MIN_TYPE                       = 0x10\n\tNLMSG_NOOP                           = 0x1\n\tNLMSG_OVERRUN                        = 0x4\n\tNLM_F_ACK                            = 0x4\n\tNLM_F_ACK_TLVS                       = 0x200\n\tNLM_F_APPEND                         = 0x800\n\tNLM_F_ATOMIC                         = 0x400\n\tNLM_F_CAPPED                         = 0x100\n\tNLM_F_CREATE                         = 0x400\n\tNLM_F_DUMP                           = 0x300\n\tNLM_F_DUMP_FILTERED                  = 0x20\n\tNLM_F_DUMP_INTR                      = 0x10\n\tNLM_F_ECHO                           = 0x8\n\tNLM_F_EXCL                           = 0x200\n\tNLM_F_MATCH                          = 0x200\n\tNLM_F_MULTI                          = 0x2\n\tNLM_F_NONREC                         = 0x100\n\tNLM_F_REPLACE                        = 0x100\n\tNLM_F_REQUEST                        = 0x1\n\tNLM_F_ROOT                           = 0x100\n\tNOFLSH                               = 0x80\n\tNSFS_MAGIC                           = 0x6e736673\n\tOCFS2_SUPER_MAGIC                    = 0x7461636f\n\tOCRNL                                = 0x8\n\tOFDEL                                = 0x80\n\tOFILL                                = 0x40\n\tOLCUC                                = 0x2\n\tONLCR                                = 0x4\n\tONLRET                               = 0x20\n\tONOCR                                = 0x10\n\tOPENPROM_SUPER_MAGIC                 = 0x9fa1\n\tOPOST                                = 0x1\n\tOVERLAYFS_SUPER_MAGIC                = 0x794c7630\n\tO_ACCMODE                            = 0x3\n\tO_APPEND                             = 0x400\n\tO_ASYNC                              = 0x2000\n\tO_CLOEXEC                            = 0x80000\n\tO_CREAT                              = 0x40\n\tO_DIRECT                             = 0x4000\n\tO_DIRECTORY                          = 0x10000\n\tO_DSYNC                              = 0x1000\n\tO_EXCL                               = 0x80\n\tO_FSYNC                              = 0x101000\n\tO_LARGEFILE                          = 0x0\n\tO_NDELAY                             = 0x800\n\tO_NOATIME                            = 0x40000\n\tO_NOCTTY                             = 0x100\n\tO_NOFOLLOW                           = 0x20000\n\tO_NONBLOCK                           = 0x800\n\tO_PATH                               = 0x200000\n\tO_RDONLY                             = 0x0\n\tO_RDWR                               = 0x2\n\tO_RSYNC                              = 0x101000\n\tO_SYNC                               = 0x101000\n\tO_TMPFILE                            = 0x410000\n\tO_TRUNC                              = 0x200\n\tO_WRONLY                             = 0x1\n\tPACKET_ADD_MEMBERSHIP                = 0x1\n\tPACKET_AUXDATA                       = 0x8\n\tPACKET_BROADCAST                     = 0x1\n\tPACKET_COPY_THRESH                   = 0x7\n\tPACKET_DROP_MEMBERSHIP               = 0x2\n\tPACKET_FANOUT                        = 0x12\n\tPACKET_FANOUT_CBPF                   = 0x6\n\tPACKET_FANOUT_CPU                    = 0x2\n\tPACKET_FANOUT_DATA                   = 0x16\n\tPACKET_FANOUT_EBPF                   = 0x7\n\tPACKET_FANOUT_FLAG_DEFRAG            = 0x8000\n\tPACKET_FANOUT_FLAG_ROLLOVER          = 0x1000\n\tPACKET_FANOUT_FLAG_UNIQUEID          = 0x2000\n\tPACKET_FANOUT_HASH                   = 0x0\n\tPACKET_FANOUT_LB                     = 0x1\n\tPACKET_FANOUT_QM                     = 0x5\n\tPACKET_FANOUT_RND                    = 0x4\n\tPACKET_FANOUT_ROLLOVER               = 0x3\n\tPACKET_FASTROUTE                     = 0x6\n\tPACKET_HDRLEN                        = 0xb\n\tPACKET_HOST                          = 0x0\n\tPACKET_IGNORE_OUTGOING               = 0x17\n\tPACKET_KERNEL                        = 0x7\n\tPACKET_LOOPBACK                      = 0x5\n\tPACKET_LOSS                          = 0xe\n\tPACKET_MR_ALLMULTI                   = 0x2\n\tPACKET_MR_MULTICAST                  = 0x0\n\tPACKET_MR_PROMISC                    = 0x1\n\tPACKET_MR_UNICAST                    = 0x3\n\tPACKET_MULTICAST                     = 0x2\n\tPACKET_ORIGDEV                       = 0x9\n\tPACKET_OTHERHOST                     = 0x3\n\tPACKET_OUTGOING                      = 0x4\n\tPACKET_QDISC_BYPASS                  = 0x14\n\tPACKET_RECV_OUTPUT                   = 0x3\n\tPACKET_RESERVE                       = 0xc\n\tPACKET_ROLLOVER_STATS                = 0x15\n\tPACKET_RX_RING                       = 0x5\n\tPACKET_STATISTICS                    = 0x6\n\tPACKET_TIMESTAMP                     = 0x11\n\tPACKET_TX_HAS_OFF                    = 0x13\n\tPACKET_TX_RING                       = 0xd\n\tPACKET_TX_TIMESTAMP                  = 0x10\n\tPACKET_USER                          = 0x6\n\tPACKET_VERSION                       = 0xa\n\tPACKET_VNET_HDR                      = 0xf\n\tPARENB                               = 0x100\n\tPARITY_CRC16_PR0                     = 0x2\n\tPARITY_CRC16_PR0_CCITT               = 0x4\n\tPARITY_CRC16_PR1                     = 0x3\n\tPARITY_CRC16_PR1_CCITT               = 0x5\n\tPARITY_CRC32_PR0_CCITT               = 0x6\n\tPARITY_CRC32_PR1_CCITT               = 0x7\n\tPARITY_DEFAULT                       = 0x0\n\tPARITY_NONE                          = 0x1\n\tPARMRK                               = 0x8\n\tPARODD                               = 0x200\n\tPENDIN                               = 0x4000\n\tPERF_EVENT_IOC_DISABLE               = 0x2401\n\tPERF_EVENT_IOC_ENABLE                = 0x2400\n\tPERF_EVENT_IOC_ID                    = 0x80082407\n\tPERF_EVENT_IOC_MODIFY_ATTRIBUTES     = 0x4008240b\n\tPERF_EVENT_IOC_PAUSE_OUTPUT          = 0x40042409\n\tPERF_EVENT_IOC_PERIOD                = 0x40082404\n\tPERF_EVENT_IOC_QUERY_BPF             = 0xc008240a\n\tPERF_EVENT_IOC_REFRESH               = 0x2402\n\tPERF_EVENT_IOC_RESET                 = 0x2403\n\tPERF_EVENT_IOC_SET_BPF               = 0x40042408\n\tPERF_EVENT_IOC_SET_FILTER            = 0x40082406\n\tPERF_EVENT_IOC_SET_OUTPUT            = 0x2405\n\tPIPEFS_MAGIC                         = 0x50495045\n\tPPPIOCATTACH                         = 0x4004743d\n\tPPPIOCATTCHAN                        = 0x40047438\n\tPPPIOCCONNECT                        = 0x4004743a\n\tPPPIOCDETACH                         = 0x4004743c\n\tPPPIOCDISCONN                        = 0x7439\n\tPPPIOCGASYNCMAP                      = 0x80047458\n\tPPPIOCGCHAN                          = 0x80047437\n\tPPPIOCGDEBUG                         = 0x80047441\n\tPPPIOCGFLAGS                         = 0x8004745a\n\tPPPIOCGIDLE                          = 0x8010743f\n\tPPPIOCGL2TPSTATS                     = 0x80487436\n\tPPPIOCGMRU                           = 0x80047453\n\tPPPIOCGNPMODE                        = 0xc008744c\n\tPPPIOCGRASYNCMAP                     = 0x80047455\n\tPPPIOCGUNIT                          = 0x80047456\n\tPPPIOCGXASYNCMAP                     = 0x80207450\n\tPPPIOCNEWUNIT                        = 0xc004743e\n\tPPPIOCSACTIVE                        = 0x40107446\n\tPPPIOCSASYNCMAP                      = 0x40047457\n\tPPPIOCSCOMPRESS                      = 0x4010744d\n\tPPPIOCSDEBUG                         = 0x40047440\n\tPPPIOCSFLAGS                         = 0x40047459\n\tPPPIOCSMAXCID                        = 0x40047451\n\tPPPIOCSMRRU                          = 0x4004743b\n\tPPPIOCSMRU                           = 0x40047452\n\tPPPIOCSNPMODE                        = 0x4008744b\n\tPPPIOCSPASS                          = 0x40107447\n\tPPPIOCSRASYNCMAP                     = 0x40047454\n\tPPPIOCSXASYNCMAP                     = 0x4020744f\n\tPPPIOCXFERUNIT                       = 0x744e\n\tPRIO_PGRP                            = 0x1\n\tPRIO_PROCESS                         = 0x0\n\tPRIO_USER                            = 0x2\n\tPROC_SUPER_MAGIC                     = 0x9fa0\n\tPROT_EXEC                            = 0x4\n\tPROT_GROWSDOWN                       = 0x1000000\n\tPROT_GROWSUP                         = 0x2000000\n\tPROT_NONE                            = 0x0\n\tPROT_READ                            = 0x1\n\tPROT_WRITE                           = 0x2\n\tPR_CAPBSET_DROP                      = 0x18\n\tPR_CAPBSET_READ                      = 0x17\n\tPR_CAP_AMBIENT                       = 0x2f\n\tPR_CAP_AMBIENT_CLEAR_ALL             = 0x4\n\tPR_CAP_AMBIENT_IS_SET                = 0x1\n\tPR_CAP_AMBIENT_LOWER                 = 0x3\n\tPR_CAP_AMBIENT_RAISE                 = 0x2\n\tPR_ENDIAN_BIG                        = 0x0\n\tPR_ENDIAN_LITTLE                     = 0x1\n\tPR_ENDIAN_PPC_LITTLE                 = 0x2\n\tPR_FPEMU_NOPRINT                     = 0x1\n\tPR_FPEMU_SIGFPE                      = 0x2\n\tPR_FP_EXC_ASYNC                      = 0x2\n\tPR_FP_EXC_DISABLED                   = 0x0\n\tPR_FP_EXC_DIV                        = 0x10000\n\tPR_FP_EXC_INV                        = 0x100000\n\tPR_FP_EXC_NONRECOV                   = 0x1\n\tPR_FP_EXC_OVF                        = 0x20000\n\tPR_FP_EXC_PRECISE                    = 0x3\n\tPR_FP_EXC_RES                        = 0x80000\n\tPR_FP_EXC_SW_ENABLE                  = 0x80\n\tPR_FP_EXC_UND                        = 0x40000\n\tPR_FP_MODE_FR                        = 0x1\n\tPR_FP_MODE_FRE                       = 0x2\n\tPR_GET_CHILD_SUBREAPER               = 0x25\n\tPR_GET_DUMPABLE                      = 0x3\n\tPR_GET_ENDIAN                        = 0x13\n\tPR_GET_FPEMU                         = 0x9\n\tPR_GET_FPEXC                         = 0xb\n\tPR_GET_FP_MODE                       = 0x2e\n\tPR_GET_KEEPCAPS                      = 0x7\n\tPR_GET_NAME                          = 0x10\n\tPR_GET_NO_NEW_PRIVS                  = 0x27\n\tPR_GET_PDEATHSIG                     = 0x2\n\tPR_GET_SECCOMP                       = 0x15\n\tPR_GET_SECUREBITS                    = 0x1b\n\tPR_GET_SPECULATION_CTRL              = 0x34\n\tPR_GET_THP_DISABLE                   = 0x2a\n\tPR_GET_TID_ADDRESS                   = 0x28\n\tPR_GET_TIMERSLACK                    = 0x1e\n\tPR_GET_TIMING                        = 0xd\n\tPR_GET_TSC                           = 0x19\n\tPR_GET_UNALIGN                       = 0x5\n\tPR_MCE_KILL                          = 0x21\n\tPR_MCE_KILL_CLEAR                    = 0x0\n\tPR_MCE_KILL_DEFAULT                  = 0x2\n\tPR_MCE_KILL_EARLY                    = 0x1\n\tPR_MCE_KILL_GET                      = 0x22\n\tPR_MCE_KILL_LATE                     = 0x0\n\tPR_MCE_KILL_SET                      = 0x1\n\tPR_MPX_DISABLE_MANAGEMENT            = 0x2c\n\tPR_MPX_ENABLE_MANAGEMENT             = 0x2b\n\tPR_PAC_APDAKEY                       = 0x4\n\tPR_PAC_APDBKEY                       = 0x8\n\tPR_PAC_APGAKEY                       = 0x10\n\tPR_PAC_APIAKEY                       = 0x1\n\tPR_PAC_APIBKEY                       = 0x2\n\tPR_PAC_RESET_KEYS                    = 0x36\n\tPR_SET_CHILD_SUBREAPER               = 0x24\n\tPR_SET_DUMPABLE                      = 0x4\n\tPR_SET_ENDIAN                        = 0x14\n\tPR_SET_FPEMU                         = 0xa\n\tPR_SET_FPEXC                         = 0xc\n\tPR_SET_FP_MODE                       = 0x2d\n\tPR_SET_KEEPCAPS                      = 0x8\n\tPR_SET_MM                            = 0x23\n\tPR_SET_MM_ARG_END                    = 0x9\n\tPR_SET_MM_ARG_START                  = 0x8\n\tPR_SET_MM_AUXV                       = 0xc\n\tPR_SET_MM_BRK                        = 0x7\n\tPR_SET_MM_END_CODE                   = 0x2\n\tPR_SET_MM_END_DATA                   = 0x4\n\tPR_SET_MM_ENV_END                    = 0xb\n\tPR_SET_MM_ENV_START                  = 0xa\n\tPR_SET_MM_EXE_FILE                   = 0xd\n\tPR_SET_MM_MAP                        = 0xe\n\tPR_SET_MM_MAP_SIZE                   = 0xf\n\tPR_SET_MM_START_BRK                  = 0x6\n\tPR_SET_MM_START_CODE                 = 0x1\n\tPR_SET_MM_START_DATA                 = 0x3\n\tPR_SET_MM_START_STACK                = 0x5\n\tPR_SET_NAME                          = 0xf\n\tPR_SET_NO_NEW_PRIVS                  = 0x26\n\tPR_SET_PDEATHSIG                     = 0x1\n\tPR_SET_PTRACER                       = 0x59616d61\n\tPR_SET_PTRACER_ANY                   = 0xffffffffffffffff\n\tPR_SET_SECCOMP                       = 0x16\n\tPR_SET_SECUREBITS                    = 0x1c\n\tPR_SET_SPECULATION_CTRL              = 0x35\n\tPR_SET_THP_DISABLE                   = 0x29\n\tPR_SET_TIMERSLACK                    = 0x1d\n\tPR_SET_TIMING                        = 0xe\n\tPR_SET_TSC                           = 0x1a\n\tPR_SET_UNALIGN                       = 0x6\n\tPR_SPEC_DISABLE                      = 0x4\n\tPR_SPEC_DISABLE_NOEXEC               = 0x10\n\tPR_SPEC_ENABLE                       = 0x2\n\tPR_SPEC_FORCE_DISABLE                = 0x8\n\tPR_SPEC_INDIRECT_BRANCH              = 0x1\n\tPR_SPEC_NOT_AFFECTED                 = 0x0\n\tPR_SPEC_PRCTL                        = 0x1\n\tPR_SPEC_STORE_BYPASS                 = 0x0\n\tPR_SVE_GET_VL                        = 0x33\n\tPR_SVE_SET_VL                        = 0x32\n\tPR_SVE_SET_VL_ONEXEC                 = 0x40000\n\tPR_SVE_VL_INHERIT                    = 0x20000\n\tPR_SVE_VL_LEN_MASK                   = 0xffff\n\tPR_TASK_PERF_EVENTS_DISABLE          = 0x1f\n\tPR_TASK_PERF_EVENTS_ENABLE           = 0x20\n\tPR_TIMING_STATISTICAL                = 0x0\n\tPR_TIMING_TIMESTAMP                  = 0x1\n\tPR_TSC_ENABLE                        = 0x1\n\tPR_TSC_SIGSEGV                       = 0x2\n\tPR_UNALIGN_NOPRINT                   = 0x1\n\tPR_UNALIGN_SIGBUS                    = 0x2\n\tPSTOREFS_MAGIC                       = 0x6165676c\n\tPTRACE_ARCH_PRCTL                    = 0x1e\n\tPTRACE_ATTACH                        = 0x10\n\tPTRACE_CONT                          = 0x7\n\tPTRACE_DETACH                        = 0x11\n\tPTRACE_EVENT_CLONE                   = 0x3\n\tPTRACE_EVENT_EXEC                    = 0x4\n\tPTRACE_EVENT_EXIT                    = 0x6\n\tPTRACE_EVENT_FORK                    = 0x1\n\tPTRACE_EVENT_SECCOMP                 = 0x7\n\tPTRACE_EVENT_STOP                    = 0x80\n\tPTRACE_EVENT_VFORK                   = 0x2\n\tPTRACE_EVENT_VFORK_DONE              = 0x5\n\tPTRACE_GETEVENTMSG                   = 0x4201\n\tPTRACE_GETFPREGS                     = 0xe\n\tPTRACE_GETFPXREGS                    = 0x12\n\tPTRACE_GETREGS                       = 0xc\n\tPTRACE_GETREGSET                     = 0x4204\n\tPTRACE_GETSIGINFO                    = 0x4202\n\tPTRACE_GETSIGMASK                    = 0x420a\n\tPTRACE_GET_THREAD_AREA               = 0x19\n\tPTRACE_INTERRUPT                     = 0x4207\n\tPTRACE_KILL                          = 0x8\n\tPTRACE_LISTEN                        = 0x4208\n\tPTRACE_OLDSETOPTIONS                 = 0x15\n\tPTRACE_O_EXITKILL                    = 0x100000\n\tPTRACE_O_MASK                        = 0x3000ff\n\tPTRACE_O_SUSPEND_SECCOMP             = 0x200000\n\tPTRACE_O_TRACECLONE                  = 0x8\n\tPTRACE_O_TRACEEXEC                   = 0x10\n\tPTRACE_O_TRACEEXIT                   = 0x40\n\tPTRACE_O_TRACEFORK                   = 0x2\n\tPTRACE_O_TRACESECCOMP                = 0x80\n\tPTRACE_O_TRACESYSGOOD                = 0x1\n\tPTRACE_O_TRACEVFORK                  = 0x4\n\tPTRACE_O_TRACEVFORKDONE              = 0x20\n\tPTRACE_PEEKDATA                      = 0x2\n\tPTRACE_PEEKSIGINFO                   = 0x4209\n\tPTRACE_PEEKSIGINFO_SHARED            = 0x1\n\tPTRACE_PEEKTEXT                      = 0x1\n\tPTRACE_PEEKUSR                       = 0x3\n\tPTRACE_POKEDATA                      = 0x5\n\tPTRACE_POKETEXT                      = 0x4\n\tPTRACE_POKEUSR                       = 0x6\n\tPTRACE_SECCOMP_GET_FILTER            = 0x420c\n\tPTRACE_SECCOMP_GET_METADATA          = 0x420d\n\tPTRACE_SEIZE                         = 0x4206\n\tPTRACE_SETFPREGS                     = 0xf\n\tPTRACE_SETFPXREGS                    = 0x13\n\tPTRACE_SETOPTIONS                    = 0x4200\n\tPTRACE_SETREGS                       = 0xd\n\tPTRACE_SETREGSET                     = 0x4205\n\tPTRACE_SETSIGINFO                    = 0x4203\n\tPTRACE_SETSIGMASK                    = 0x420b\n\tPTRACE_SET_THREAD_AREA               = 0x1a\n\tPTRACE_SINGLEBLOCK                   = 0x21\n\tPTRACE_SINGLESTEP                    = 0x9\n\tPTRACE_SYSCALL                       = 0x18\n\tPTRACE_SYSEMU                        = 0x1f\n\tPTRACE_SYSEMU_SINGLESTEP             = 0x20\n\tPTRACE_TRACEME                       = 0x0\n\tQNX4_SUPER_MAGIC                     = 0x2f\n\tQNX6_SUPER_MAGIC                     = 0x68191122\n\tRAMFS_MAGIC                          = 0x858458f6\n\tRDTGROUP_SUPER_MAGIC                 = 0x7655821\n\tREISERFS_SUPER_MAGIC                 = 0x52654973\n\tRENAME_EXCHANGE                      = 0x2\n\tRENAME_NOREPLACE                     = 0x1\n\tRENAME_WHITEOUT                      = 0x4\n\tRLIMIT_AS                            = 0x9\n\tRLIMIT_CORE                          = 0x4\n\tRLIMIT_CPU                           = 0x0\n\tRLIMIT_DATA                          = 0x2\n\tRLIMIT_FSIZE                         = 0x1\n\tRLIMIT_LOCKS                         = 0xa\n\tRLIMIT_MEMLOCK                       = 0x8\n\tRLIMIT_MSGQUEUE                      = 0xc\n\tRLIMIT_NICE                          = 0xd\n\tRLIMIT_NOFILE                        = 0x7\n\tRLIMIT_NPROC                         = 0x6\n\tRLIMIT_RSS                           = 0x5\n\tRLIMIT_RTPRIO                        = 0xe\n\tRLIMIT_RTTIME                        = 0xf\n\tRLIMIT_SIGPENDING                    = 0xb\n\tRLIMIT_STACK                         = 0x3\n\tRLIM_INFINITY                        = 0xffffffffffffffff\n\tRNDADDENTROPY                        = 0x40085203\n\tRNDADDTOENTCNT                       = 0x40045201\n\tRNDCLEARPOOL                         = 0x5206\n\tRNDGETENTCNT                         = 0x80045200\n\tRNDGETPOOL                           = 0x80085202\n\tRNDRESEEDCRNG                        = 0x5207\n\tRNDZAPENTCNT                         = 0x5204\n\tRTAX_ADVMSS                          = 0x8\n\tRTAX_CC_ALGO                         = 0x10\n\tRTAX_CWND                            = 0x7\n\tRTAX_FASTOPEN_NO_COOKIE              = 0x11\n\tRTAX_FEATURES                        = 0xc\n\tRTAX_FEATURE_ALLFRAG                 = 0x8\n\tRTAX_FEATURE_ECN                     = 0x1\n\tRTAX_FEATURE_MASK                    = 0xf\n\tRTAX_FEATURE_SACK                    = 0x2\n\tRTAX_FEATURE_TIMESTAMP               = 0x4\n\tRTAX_HOPLIMIT                        = 0xa\n\tRTAX_INITCWND                        = 0xb\n\tRTAX_INITRWND                        = 0xe\n\tRTAX_LOCK                            = 0x1\n\tRTAX_MAX                             = 0x11\n\tRTAX_MTU                             = 0x2\n\tRTAX_QUICKACK                        = 0xf\n\tRTAX_REORDERING                      = 0x9\n\tRTAX_RTO_MIN                         = 0xd\n\tRTAX_RTT                             = 0x4\n\tRTAX_RTTVAR                          = 0x5\n\tRTAX_SSTHRESH                        = 0x6\n\tRTAX_UNSPEC                          = 0x0\n\tRTAX_WINDOW                          = 0x3\n\tRTA_ALIGNTO                          = 0x4\n\tRTA_MAX                              = 0x1d\n\tRTCF_DIRECTSRC                       = 0x4000000\n\tRTCF_DOREDIRECT                      = 0x1000000\n\tRTCF_LOG                             = 0x2000000\n\tRTCF_MASQ                            = 0x400000\n\tRTCF_NAT                             = 0x800000\n\tRTCF_VALVE                           = 0x200000\n\tRTC_AF                               = 0x20\n\tRTC_AIE_OFF                          = 0x7002\n\tRTC_AIE_ON                           = 0x7001\n\tRTC_ALM_READ                         = 0x80247008\n\tRTC_ALM_SET                          = 0x40247007\n\tRTC_EPOCH_READ                       = 0x8008700d\n\tRTC_EPOCH_SET                        = 0x4008700e\n\tRTC_IRQF                             = 0x80\n\tRTC_IRQP_READ                        = 0x8008700b\n\tRTC_IRQP_SET                         = 0x4008700c\n\tRTC_MAX_FREQ                         = 0x2000\n\tRTC_PF                               = 0x40\n\tRTC_PIE_OFF                          = 0x7006\n\tRTC_PIE_ON                           = 0x7005\n\tRTC_PLL_GET                          = 0x80207011\n\tRTC_PLL_SET                          = 0x40207012\n\tRTC_RD_TIME                          = 0x80247009\n\tRTC_SET_TIME                         = 0x4024700a\n\tRTC_UF                               = 0x10\n\tRTC_UIE_OFF                          = 0x7004\n\tRTC_UIE_ON                           = 0x7003\n\tRTC_VL_CLR                           = 0x7014\n\tRTC_VL_READ                          = 0x80047013\n\tRTC_WIE_OFF                          = 0x7010\n\tRTC_WIE_ON                           = 0x700f\n\tRTC_WKALM_RD                         = 0x80287010\n\tRTC_WKALM_SET                        = 0x4028700f\n\tRTF_ADDRCLASSMASK                    = 0xf8000000\n\tRTF_ADDRCONF                         = 0x40000\n\tRTF_ALLONLINK                        = 0x20000\n\tRTF_BROADCAST                        = 0x10000000\n\tRTF_CACHE                            = 0x1000000\n\tRTF_DEFAULT                          = 0x10000\n\tRTF_DYNAMIC                          = 0x10\n\tRTF_FLOW                             = 0x2000000\n\tRTF_GATEWAY                          = 0x2\n\tRTF_HOST                             = 0x4\n\tRTF_INTERFACE                        = 0x40000000\n\tRTF_IRTT                             = 0x100\n\tRTF_LINKRT                           = 0x100000\n\tRTF_LOCAL                            = 0x80000000\n\tRTF_MODIFIED                         = 0x20\n\tRTF_MSS                              = 0x40\n\tRTF_MTU                              = 0x40\n\tRTF_MULTICAST                        = 0x20000000\n\tRTF_NAT                              = 0x8000000\n\tRTF_NOFORWARD                        = 0x1000\n\tRTF_NONEXTHOP                        = 0x200000\n\tRTF_NOPMTUDISC                       = 0x4000\n\tRTF_POLICY                           = 0x4000000\n\tRTF_REINSTATE                        = 0x8\n\tRTF_REJECT                           = 0x200\n\tRTF_STATIC                           = 0x400\n\tRTF_THROW                            = 0x2000\n\tRTF_UP                               = 0x1\n\tRTF_WINDOW                           = 0x80\n\tRTF_XRESOLVE                         = 0x800\n\tRTM_BASE                             = 0x10\n\tRTM_DELACTION                        = 0x31\n\tRTM_DELADDR                          = 0x15\n\tRTM_DELADDRLABEL                     = 0x49\n\tRTM_DELCHAIN                         = 0x65\n\tRTM_DELLINK                          = 0x11\n\tRTM_DELMDB                           = 0x55\n\tRTM_DELNEIGH                         = 0x1d\n\tRTM_DELNETCONF                       = 0x51\n\tRTM_DELNSID                          = 0x59\n\tRTM_DELQDISC                         = 0x25\n\tRTM_DELROUTE                         = 0x19\n\tRTM_DELRULE                          = 0x21\n\tRTM_DELTCLASS                        = 0x29\n\tRTM_DELTFILTER                       = 0x2d\n\tRTM_F_CLONED                         = 0x200\n\tRTM_F_EQUALIZE                       = 0x400\n\tRTM_F_FIB_MATCH                      = 0x2000\n\tRTM_F_LOOKUP_TABLE                   = 0x1000\n\tRTM_F_NOTIFY                         = 0x100\n\tRTM_F_PREFIX                         = 0x800\n\tRTM_GETACTION                        = 0x32\n\tRTM_GETADDR                          = 0x16\n\tRTM_GETADDRLABEL                     = 0x4a\n\tRTM_GETANYCAST                       = 0x3e\n\tRTM_GETCHAIN                         = 0x66\n\tRTM_GETDCB                           = 0x4e\n\tRTM_GETLINK                          = 0x12\n\tRTM_GETMDB                           = 0x56\n\tRTM_GETMULTICAST                     = 0x3a\n\tRTM_GETNEIGH                         = 0x1e\n\tRTM_GETNEIGHTBL                      = 0x42\n\tRTM_GETNETCONF                       = 0x52\n\tRTM_GETNSID                          = 0x5a\n\tRTM_GETQDISC                         = 0x26\n\tRTM_GETROUTE                         = 0x1a\n\tRTM_GETRULE                          = 0x22\n\tRTM_GETSTATS                         = 0x5e\n\tRTM_GETTCLASS                        = 0x2a\n\tRTM_GETTFILTER                       = 0x2e\n\tRTM_MAX                              = 0x67\n\tRTM_NEWACTION                        = 0x30\n\tRTM_NEWADDR                          = 0x14\n\tRTM_NEWADDRLABEL                     = 0x48\n\tRTM_NEWCACHEREPORT                   = 0x60\n\tRTM_NEWCHAIN                         = 0x64\n\tRTM_NEWLINK                          = 0x10\n\tRTM_NEWMDB                           = 0x54\n\tRTM_NEWNDUSEROPT                     = 0x44\n\tRTM_NEWNEIGH                         = 0x1c\n\tRTM_NEWNEIGHTBL                      = 0x40\n\tRTM_NEWNETCONF                       = 0x50\n\tRTM_NEWNSID                          = 0x58\n\tRTM_NEWPREFIX                        = 0x34\n\tRTM_NEWQDISC                         = 0x24\n\tRTM_NEWROUTE                         = 0x18\n\tRTM_NEWRULE                          = 0x20\n\tRTM_NEWSTATS                         = 0x5c\n\tRTM_NEWTCLASS                        = 0x28\n\tRTM_NEWTFILTER                       = 0x2c\n\tRTM_NR_FAMILIES                      = 0x16\n\tRTM_NR_MSGTYPES                      = 0x58\n\tRTM_SETDCB                           = 0x4f\n\tRTM_SETLINK                          = 0x13\n\tRTM_SETNEIGHTBL                      = 0x43\n\tRTNH_ALIGNTO                         = 0x4\n\tRTNH_COMPARE_MASK                    = 0x19\n\tRTNH_F_DEAD                          = 0x1\n\tRTNH_F_LINKDOWN                      = 0x10\n\tRTNH_F_OFFLOAD                       = 0x8\n\tRTNH_F_ONLINK                        = 0x4\n\tRTNH_F_PERVASIVE                     = 0x2\n\tRTNH_F_UNRESOLVED                    = 0x20\n\tRTN_MAX                              = 0xb\n\tRTPROT_BABEL                         = 0x2a\n\tRTPROT_BGP                           = 0xba\n\tRTPROT_BIRD                          = 0xc\n\tRTPROT_BOOT                          = 0x3\n\tRTPROT_DHCP                          = 0x10\n\tRTPROT_DNROUTED                      = 0xd\n\tRTPROT_EIGRP                         = 0xc0\n\tRTPROT_GATED                         = 0x8\n\tRTPROT_ISIS                          = 0xbb\n\tRTPROT_KERNEL                        = 0x2\n\tRTPROT_MROUTED                       = 0x11\n\tRTPROT_MRT                           = 0xa\n\tRTPROT_NTK                           = 0xf\n\tRTPROT_OSPF                          = 0xbc\n\tRTPROT_RA                            = 0x9\n\tRTPROT_REDIRECT                      = 0x1\n\tRTPROT_RIP                           = 0xbd\n\tRTPROT_STATIC                        = 0x4\n\tRTPROT_UNSPEC                        = 0x0\n\tRTPROT_XORP                          = 0xe\n\tRTPROT_ZEBRA                         = 0xb\n\tRT_CLASS_DEFAULT                     = 0xfd\n\tRT_CLASS_LOCAL                       = 0xff\n\tRT_CLASS_MAIN                        = 0xfe\n\tRT_CLASS_MAX                         = 0xff\n\tRT_CLASS_UNSPEC                      = 0x0\n\tRUSAGE_CHILDREN                      = -0x1\n\tRUSAGE_SELF                          = 0x0\n\tRUSAGE_THREAD                        = 0x1\n\tSCM_CREDENTIALS                      = 0x2\n\tSCM_RIGHTS                           = 0x1\n\tSCM_TIMESTAMP                        = 0x1d\n\tSCM_TIMESTAMPING                     = 0x25\n\tSCM_TIMESTAMPING_OPT_STATS           = 0x36\n\tSCM_TIMESTAMPING_PKTINFO             = 0x3a\n\tSCM_TIMESTAMPNS                      = 0x23\n\tSCM_TXTIME                           = 0x3d\n\tSCM_WIFI_STATUS                      = 0x29\n\tSC_LOG_FLUSH                         = 0x100000\n\tSECCOMP_MODE_DISABLED                = 0x0\n\tSECCOMP_MODE_FILTER                  = 0x2\n\tSECCOMP_MODE_STRICT                  = 0x1\n\tSECURITYFS_MAGIC                     = 0x73636673\n\tSELINUX_MAGIC                        = 0xf97cff8c\n\tSFD_CLOEXEC                          = 0x80000\n\tSFD_NONBLOCK                         = 0x800\n\tSHUT_RD                              = 0x0\n\tSHUT_RDWR                            = 0x2\n\tSHUT_WR                              = 0x1\n\tSIOCADDDLCI                          = 0x8980\n\tSIOCADDMULTI                         = 0x8931\n\tSIOCADDRT                            = 0x890b\n\tSIOCATMARK                           = 0x8905\n\tSIOCBONDCHANGEACTIVE                 = 0x8995\n\tSIOCBONDENSLAVE                      = 0x8990\n\tSIOCBONDINFOQUERY                    = 0x8994\n\tSIOCBONDRELEASE                      = 0x8991\n\tSIOCBONDSETHWADDR                    = 0x8992\n\tSIOCBONDSLAVEINFOQUERY               = 0x8993\n\tSIOCBRADDBR                          = 0x89a0\n\tSIOCBRADDIF                          = 0x89a2\n\tSIOCBRDELBR                          = 0x89a1\n\tSIOCBRDELIF                          = 0x89a3\n\tSIOCDARP                             = 0x8953\n\tSIOCDELDLCI                          = 0x8981\n\tSIOCDELMULTI                         = 0x8932\n\tSIOCDELRT                            = 0x890c\n\tSIOCDEVPRIVATE                       = 0x89f0\n\tSIOCDIFADDR                          = 0x8936\n\tSIOCDRARP                            = 0x8960\n\tSIOCETHTOOL                          = 0x8946\n\tSIOCGARP                             = 0x8954\n\tSIOCGHWTSTAMP                        = 0x89b1\n\tSIOCGIFADDR                          = 0x8915\n\tSIOCGIFBR                            = 0x8940\n\tSIOCGIFBRDADDR                       = 0x8919\n\tSIOCGIFCONF                          = 0x8912\n\tSIOCGIFCOUNT                         = 0x8938\n\tSIOCGIFDSTADDR                       = 0x8917\n\tSIOCGIFENCAP                         = 0x8925\n\tSIOCGIFFLAGS                         = 0x8913\n\tSIOCGIFHWADDR                        = 0x8927\n\tSIOCGIFINDEX                         = 0x8933\n\tSIOCGIFMAP                           = 0x8970\n\tSIOCGIFMEM                           = 0x891f\n\tSIOCGIFMETRIC                        = 0x891d\n\tSIOCGIFMTU                           = 0x8921\n\tSIOCGIFNAME                          = 0x8910\n\tSIOCGIFNETMASK                       = 0x891b\n\tSIOCGIFPFLAGS                        = 0x8935\n\tSIOCGIFSLAVE                         = 0x8929\n\tSIOCGIFTXQLEN                        = 0x8942\n\tSIOCGIFVLAN                          = 0x8982\n\tSIOCGMIIPHY                          = 0x8947\n\tSIOCGMIIREG                          = 0x8948\n\tSIOCGPGRP                            = 0x8904\n\tSIOCGPPPCSTATS                       = 0x89f2\n\tSIOCGPPPSTATS                        = 0x89f0\n\tSIOCGPPPVER                          = 0x89f1\n\tSIOCGRARP                            = 0x8961\n\tSIOCGSKNS                            = 0x894c\n\tSIOCGSTAMP                           = 0x8906\n\tSIOCGSTAMPNS                         = 0x8907\n\tSIOCINQ                              = 0x541b\n\tSIOCOUTQ                             = 0x5411\n\tSIOCOUTQNSD                          = 0x894b\n\tSIOCPROTOPRIVATE                     = 0x89e0\n\tSIOCRTMSG                            = 0x890d\n\tSIOCSARP                             = 0x8955\n\tSIOCSHWTSTAMP                        = 0x89b0\n\tSIOCSIFADDR                          = 0x8916\n\tSIOCSIFBR                            = 0x8941\n\tSIOCSIFBRDADDR                       = 0x891a\n\tSIOCSIFDSTADDR                       = 0x8918\n\tSIOCSIFENCAP                         = 0x8926\n\tSIOCSIFFLAGS                         = 0x8914\n\tSIOCSIFHWADDR                        = 0x8924\n\tSIOCSIFHWBROADCAST                   = 0x8937\n\tSIOCSIFLINK                          = 0x8911\n\tSIOCSIFMAP                           = 0x8971\n\tSIOCSIFMEM                           = 0x8920\n\tSIOCSIFMETRIC                        = 0x891e\n\tSIOCSIFMTU                           = 0x8922\n\tSIOCSIFNAME                          = 0x8923\n\tSIOCSIFNETMASK                       = 0x891c\n\tSIOCSIFPFLAGS                        = 0x8934\n\tSIOCSIFSLAVE                         = 0x8930\n\tSIOCSIFTXQLEN                        = 0x8943\n\tSIOCSIFVLAN                          = 0x8983\n\tSIOCSMIIREG                          = 0x8949\n\tSIOCSPGRP                            = 0x8902\n\tSIOCSRARP                            = 0x8962\n\tSIOCWANDEV                           = 0x894a\n\tSMACK_MAGIC                          = 0x43415d53\n\tSMART_AUTOSAVE                       = 0xd2\n\tSMART_AUTO_OFFLINE                   = 0xdb\n\tSMART_DISABLE                        = 0xd9\n\tSMART_ENABLE                         = 0xd8\n\tSMART_HCYL_PASS                      = 0xc2\n\tSMART_IMMEDIATE_OFFLINE              = 0xd4\n\tSMART_LCYL_PASS                      = 0x4f\n\tSMART_READ_LOG_SECTOR                = 0xd5\n\tSMART_READ_THRESHOLDS                = 0xd1\n\tSMART_READ_VALUES                    = 0xd0\n\tSMART_SAVE                           = 0xd3\n\tSMART_STATUS                         = 0xda\n\tSMART_WRITE_LOG_SECTOR               = 0xd6\n\tSMART_WRITE_THRESHOLDS               = 0xd7\n\tSMB_SUPER_MAGIC                      = 0x517b\n\tSOCKFS_MAGIC                         = 0x534f434b\n\tSOCK_CLOEXEC                         = 0x80000\n\tSOCK_DCCP                            = 0x6\n\tSOCK_DGRAM                           = 0x2\n\tSOCK_IOC_TYPE                        = 0x89\n\tSOCK_NONBLOCK                        = 0x800\n\tSOCK_PACKET                          = 0xa\n\tSOCK_RAW                             = 0x3\n\tSOCK_RDM                             = 0x4\n\tSOCK_SEQPACKET                       = 0x5\n\tSOCK_STREAM                          = 0x1\n\tSOL_AAL                              = 0x109\n\tSOL_ALG                              = 0x117\n\tSOL_ATM                              = 0x108\n\tSOL_CAIF                             = 0x116\n\tSOL_CAN_BASE                         = 0x64\n\tSOL_DCCP                             = 0x10d\n\tSOL_DECNET                           = 0x105\n\tSOL_ICMPV6                           = 0x3a\n\tSOL_IP                               = 0x0\n\tSOL_IPV6                             = 0x29\n\tSOL_IRDA                             = 0x10a\n\tSOL_IUCV                             = 0x115\n\tSOL_KCM                              = 0x119\n\tSOL_LLC                              = 0x10c\n\tSOL_NETBEUI                          = 0x10b\n\tSOL_NETLINK                          = 0x10e\n\tSOL_NFC                              = 0x118\n\tSOL_PACKET                           = 0x107\n\tSOL_PNPIPE                           = 0x113\n\tSOL_PPPOL2TP                         = 0x111\n\tSOL_RAW                              = 0xff\n\tSOL_RDS                              = 0x114\n\tSOL_RXRPC                            = 0x110\n\tSOL_SOCKET                           = 0x1\n\tSOL_TCP                              = 0x6\n\tSOL_TIPC                             = 0x10f\n\tSOL_TLS                              = 0x11a\n\tSOL_X25                              = 0x106\n\tSOL_XDP                              = 0x11b\n\tSOMAXCONN                            = 0x80\n\tSO_ACCEPTCONN                        = 0x1e\n\tSO_ATTACH_BPF                        = 0x32\n\tSO_ATTACH_FILTER                     = 0x1a\n\tSO_ATTACH_REUSEPORT_CBPF             = 0x33\n\tSO_ATTACH_REUSEPORT_EBPF             = 0x34\n\tSO_BINDTODEVICE                      = 0x19\n\tSO_BINDTOIFINDEX                     = 0x3e\n\tSO_BPF_EXTENSIONS                    = 0x30\n\tSO_BROADCAST                         = 0x6\n\tSO_BSDCOMPAT                         = 0xe\n\tSO_BUSY_POLL                         = 0x2e\n\tSO_CNX_ADVICE                        = 0x35\n\tSO_COOKIE                            = 0x39\n\tSO_DEBUG                             = 0x1\n\tSO_DETACH_BPF                        = 0x1b\n\tSO_DETACH_FILTER                     = 0x1b\n\tSO_DOMAIN                            = 0x27\n\tSO_DONTROUTE                         = 0x5\n\tSO_EE_CODE_TXTIME_INVALID_PARAM      = 0x1\n\tSO_EE_CODE_TXTIME_MISSED             = 0x2\n\tSO_EE_CODE_ZEROCOPY_COPIED           = 0x1\n\tSO_EE_ORIGIN_ICMP                    = 0x2\n\tSO_EE_ORIGIN_ICMP6                   = 0x3\n\tSO_EE_ORIGIN_LOCAL                   = 0x1\n\tSO_EE_ORIGIN_NONE                    = 0x0\n\tSO_EE_ORIGIN_TIMESTAMPING            = 0x4\n\tSO_EE_ORIGIN_TXSTATUS                = 0x4\n\tSO_EE_ORIGIN_TXTIME                  = 0x6\n\tSO_EE_ORIGIN_ZEROCOPY                = 0x5\n\tSO_ERROR                             = 0x4\n\tSO_GET_FILTER                        = 0x1a\n\tSO_INCOMING_CPU                      = 0x31\n\tSO_INCOMING_NAPI_ID                  = 0x38\n\tSO_KEEPALIVE                         = 0x9\n\tSO_LINGER                            = 0xd\n\tSO_LOCK_FILTER                       = 0x2c\n\tSO_MARK                              = 0x24\n\tSO_MAX_PACING_RATE                   = 0x2f\n\tSO_MEMINFO                           = 0x37\n\tSO_NOFCS                             = 0x2b\n\tSO_NO_CHECK                          = 0xb\n\tSO_OOBINLINE                         = 0xa\n\tSO_PASSCRED                          = 0x10\n\tSO_PASSSEC                           = 0x22\n\tSO_PEEK_OFF                          = 0x2a\n\tSO_PEERCRED                          = 0x11\n\tSO_PEERGROUPS                        = 0x3b\n\tSO_PEERNAME                          = 0x1c\n\tSO_PEERSEC                           = 0x1f\n\tSO_PRIORITY                          = 0xc\n\tSO_PROTOCOL                          = 0x26\n\tSO_RCVBUF                            = 0x8\n\tSO_RCVBUFFORCE                       = 0x21\n\tSO_RCVLOWAT                          = 0x12\n\tSO_RCVTIMEO                          = 0x14\n\tSO_RCVTIMEO_NEW                      = 0x42\n\tSO_RCVTIMEO_OLD                      = 0x14\n\tSO_REUSEADDR                         = 0x2\n\tSO_REUSEPORT                         = 0xf\n\tSO_RXQ_OVFL                          = 0x28\n\tSO_SECURITY_AUTHENTICATION           = 0x16\n\tSO_SECURITY_ENCRYPTION_NETWORK       = 0x18\n\tSO_SECURITY_ENCRYPTION_TRANSPORT     = 0x17\n\tSO_SELECT_ERR_QUEUE                  = 0x2d\n\tSO_SNDBUF                            = 0x7\n\tSO_SNDBUFFORCE                       = 0x20\n\tSO_SNDLOWAT                          = 0x13\n\tSO_SNDTIMEO                          = 0x15\n\tSO_SNDTIMEO_NEW                      = 0x43\n\tSO_SNDTIMEO_OLD                      = 0x15\n\tSO_TIMESTAMP                         = 0x1d\n\tSO_TIMESTAMPING                      = 0x25\n\tSO_TIMESTAMPING_NEW                  = 0x41\n\tSO_TIMESTAMPING_OLD                  = 0x25\n\tSO_TIMESTAMPNS                       = 0x23\n\tSO_TIMESTAMPNS_NEW                   = 0x40\n\tSO_TIMESTAMPNS_OLD                   = 0x23\n\tSO_TIMESTAMP_NEW                     = 0x3f\n\tSO_TIMESTAMP_OLD                     = 0x1d\n\tSO_TXTIME                            = 0x3d\n\tSO_TYPE                              = 0x3\n\tSO_VM_SOCKETS_BUFFER_MAX_SIZE        = 0x2\n\tSO_VM_SOCKETS_BUFFER_MIN_SIZE        = 0x1\n\tSO_VM_SOCKETS_BUFFER_SIZE            = 0x0\n\tSO_VM_SOCKETS_CONNECT_TIMEOUT        = 0x6\n\tSO_VM_SOCKETS_NONBLOCK_TXRX          = 0x7\n\tSO_VM_SOCKETS_PEER_HOST_VM_ID        = 0x3\n\tSO_VM_SOCKETS_TRUSTED                = 0x5\n\tSO_WIFI_STATUS                       = 0x29\n\tSO_ZEROCOPY                          = 0x3c\n\tSPLICE_F_GIFT                        = 0x8\n\tSPLICE_F_MORE                        = 0x4\n\tSPLICE_F_MOVE                        = 0x1\n\tSPLICE_F_NONBLOCK                    = 0x2\n\tSQUASHFS_MAGIC                       = 0x73717368\n\tSTACK_END_MAGIC                      = 0x57ac6e9d\n\tSTATX_ALL                            = 0xfff\n\tSTATX_ATIME                          = 0x20\n\tSTATX_ATTR_APPEND                    = 0x20\n\tSTATX_ATTR_AUTOMOUNT                 = 0x1000\n\tSTATX_ATTR_COMPRESSED                = 0x4\n\tSTATX_ATTR_ENCRYPTED                 = 0x800\n\tSTATX_ATTR_IMMUTABLE                 = 0x10\n\tSTATX_ATTR_NODUMP                    = 0x40\n\tSTATX_BASIC_STATS                    = 0x7ff\n\tSTATX_BLOCKS                         = 0x400\n\tSTATX_BTIME                          = 0x800\n\tSTATX_CTIME                          = 0x80\n\tSTATX_GID                            = 0x10\n\tSTATX_INO                            = 0x100\n\tSTATX_MODE                           = 0x2\n\tSTATX_MTIME                          = 0x40\n\tSTATX_NLINK                          = 0x4\n\tSTATX_SIZE                           = 0x200\n\tSTATX_TYPE                           = 0x1\n\tSTATX_UID                            = 0x8\n\tSTATX__RESERVED                      = 0x80000000\n\tSYNC_FILE_RANGE_WAIT_AFTER           = 0x4\n\tSYNC_FILE_RANGE_WAIT_BEFORE          = 0x1\n\tSYNC_FILE_RANGE_WRITE                = 0x2\n\tSYSFS_MAGIC                          = 0x62656572\n\tS_BLKSIZE                            = 0x200\n\tS_IEXEC                              = 0x40\n\tS_IFBLK                              = 0x6000\n\tS_IFCHR                              = 0x2000\n\tS_IFDIR                              = 0x4000\n\tS_IFIFO                              = 0x1000\n\tS_IFLNK                              = 0xa000\n\tS_IFMT                               = 0xf000\n\tS_IFREG                              = 0x8000\n\tS_IFSOCK                             = 0xc000\n\tS_IREAD                              = 0x100\n\tS_IRGRP                              = 0x20\n\tS_IROTH                              = 0x4\n\tS_IRUSR                              = 0x100\n\tS_IRWXG                              = 0x38\n\tS_IRWXO                              = 0x7\n\tS_IRWXU                              = 0x1c0\n\tS_ISGID                              = 0x400\n\tS_ISUID                              = 0x800\n\tS_ISVTX                              = 0x200\n\tS_IWGRP                              = 0x10\n\tS_IWOTH                              = 0x2\n\tS_IWRITE                             = 0x80\n\tS_IWUSR                              = 0x80\n\tS_IXGRP                              = 0x8\n\tS_IXOTH                              = 0x1\n\tS_IXUSR                              = 0x40\n\tTAB0                                 = 0x0\n\tTAB1                                 = 0x800\n\tTAB2                                 = 0x1000\n\tTAB3                                 = 0x1800\n\tTABDLY                               = 0x1800\n\tTASKSTATS_CMD_ATTR_MAX               = 0x4\n\tTASKSTATS_CMD_MAX                    = 0x2\n\tTASKSTATS_GENL_NAME                  = \"TASKSTATS\"\n\tTASKSTATS_GENL_VERSION               = 0x1\n\tTASKSTATS_TYPE_MAX                   = 0x6\n\tTASKSTATS_VERSION                    = 0x9\n\tTCFLSH                               = 0x540b\n\tTCGETA                               = 0x5405\n\tTCGETS                               = 0x5401\n\tTCGETS2                              = 0x802c542a\n\tTCGETX                               = 0x5432\n\tTCIFLUSH                             = 0x0\n\tTCIOFF                               = 0x2\n\tTCIOFLUSH                            = 0x2\n\tTCION                                = 0x3\n\tTCOFLUSH                             = 0x1\n\tTCOOFF                               = 0x0\n\tTCOON                                = 0x1\n\tTCP_BPF_IW                           = 0x3e9\n\tTCP_BPF_SNDCWND_CLAMP                = 0x3ea\n\tTCP_CC_INFO                          = 0x1a\n\tTCP_CM_INQ                           = 0x24\n\tTCP_CONGESTION                       = 0xd\n\tTCP_COOKIE_IN_ALWAYS                 = 0x1\n\tTCP_COOKIE_MAX                       = 0x10\n\tTCP_COOKIE_MIN                       = 0x8\n\tTCP_COOKIE_OUT_NEVER                 = 0x2\n\tTCP_COOKIE_PAIR_SIZE                 = 0x20\n\tTCP_COOKIE_TRANSACTIONS              = 0xf\n\tTCP_CORK                             = 0x3\n\tTCP_DEFER_ACCEPT                     = 0x9\n\tTCP_FASTOPEN                         = 0x17\n\tTCP_FASTOPEN_CONNECT                 = 0x1e\n\tTCP_FASTOPEN_KEY                     = 0x21\n\tTCP_FASTOPEN_NO_COOKIE               = 0x22\n\tTCP_INFO                             = 0xb\n\tTCP_INQ                              = 0x24\n\tTCP_KEEPCNT                          = 0x6\n\tTCP_KEEPIDLE                         = 0x4\n\tTCP_KEEPINTVL                        = 0x5\n\tTCP_LINGER2                          = 0x8\n\tTCP_MAXSEG                           = 0x2\n\tTCP_MAXWIN                           = 0xffff\n\tTCP_MAX_WINSHIFT                     = 0xe\n\tTCP_MD5SIG                           = 0xe\n\tTCP_MD5SIG_EXT                       = 0x20\n\tTCP_MD5SIG_FLAG_PREFIX               = 0x1\n\tTCP_MD5SIG_MAXKEYLEN                 = 0x50\n\tTCP_MSS                              = 0x200\n\tTCP_MSS_DEFAULT                      = 0x218\n\tTCP_MSS_DESIRED                      = 0x4c4\n\tTCP_NODELAY                          = 0x1\n\tTCP_NOTSENT_LOWAT                    = 0x19\n\tTCP_QUEUE_SEQ                        = 0x15\n\tTCP_QUICKACK                         = 0xc\n\tTCP_REPAIR                           = 0x13\n\tTCP_REPAIR_OFF                       = 0x0\n\tTCP_REPAIR_OFF_NO_WP                 = -0x1\n\tTCP_REPAIR_ON                        = 0x1\n\tTCP_REPAIR_OPTIONS                   = 0x16\n\tTCP_REPAIR_QUEUE                     = 0x14\n\tTCP_REPAIR_WINDOW                    = 0x1d\n\tTCP_SAVED_SYN                        = 0x1c\n\tTCP_SAVE_SYN                         = 0x1b\n\tTCP_SYNCNT                           = 0x7\n\tTCP_S_DATA_IN                        = 0x4\n\tTCP_S_DATA_OUT                       = 0x8\n\tTCP_THIN_DUPACK                      = 0x11\n\tTCP_THIN_LINEAR_TIMEOUTS             = 0x10\n\tTCP_TIMESTAMP                        = 0x18\n\tTCP_ULP                              = 0x1f\n\tTCP_USER_TIMEOUT                     = 0x12\n\tTCP_WINDOW_CLAMP                     = 0xa\n\tTCP_ZEROCOPY_RECEIVE                 = 0x23\n\tTCSAFLUSH                            = 0x2\n\tTCSBRK                               = 0x5409\n\tTCSBRKP                              = 0x5425\n\tTCSETA                               = 0x5406\n\tTCSETAF                              = 0x5408\n\tTCSETAW                              = 0x5407\n\tTCSETS                               = 0x5402\n\tTCSETS2                              = 0x402c542b\n\tTCSETSF                              = 0x5404\n\tTCSETSF2                             = 0x402c542d\n\tTCSETSW                              = 0x5403\n\tTCSETSW2                             = 0x402c542c\n\tTCSETX                               = 0x5433\n\tTCSETXF                              = 0x5434\n\tTCSETXW                              = 0x5435\n\tTCXONC                               = 0x540a\n\tTIMER_ABSTIME                        = 0x1\n\tTIOCCBRK                             = 0x5428\n\tTIOCCONS                             = 0x541d\n\tTIOCEXCL                             = 0x540c\n\tTIOCGDEV                             = 0x80045432\n\tTIOCGETD                             = 0x5424\n\tTIOCGEXCL                            = 0x80045440\n\tTIOCGICOUNT                          = 0x545d\n\tTIOCGISO7816                         = 0x80285442\n\tTIOCGLCKTRMIOS                       = 0x5456\n\tTIOCGPGRP                            = 0x540f\n\tTIOCGPKT                             = 0x80045438\n\tTIOCGPTLCK                           = 0x80045439\n\tTIOCGPTN                             = 0x80045430\n\tTIOCGPTPEER                          = 0x5441\n\tTIOCGRS485                           = 0x542e\n\tTIOCGSERIAL                          = 0x541e\n\tTIOCGSID                             = 0x5429\n\tTIOCGSOFTCAR                         = 0x5419\n\tTIOCGWINSZ                           = 0x5413\n\tTIOCINQ                              = 0x541b\n\tTIOCLINUX                            = 0x541c\n\tTIOCMBIC                             = 0x5417\n\tTIOCMBIS                             = 0x5416\n\tTIOCMGET                             = 0x5415\n\tTIOCMIWAIT                           = 0x545c\n\tTIOCMSET                             = 0x5418\n\tTIOCM_CAR                            = 0x40\n\tTIOCM_CD                             = 0x40\n\tTIOCM_CTS                            = 0x20\n\tTIOCM_DSR                            = 0x100\n\tTIOCM_DTR                            = 0x2\n\tTIOCM_LE                             = 0x1\n\tTIOCM_RI                             = 0x80\n\tTIOCM_RNG                            = 0x80\n\tTIOCM_RTS                            = 0x4\n\tTIOCM_SR                             = 0x10\n\tTIOCM_ST                             = 0x8\n\tTIOCNOTTY                            = 0x5422\n\tTIOCNXCL                             = 0x540d\n\tTIOCOUTQ                             = 0x5411\n\tTIOCPKT                              = 0x5420\n\tTIOCPKT_DATA                         = 0x0\n\tTIOCPKT_DOSTOP                       = 0x20\n\tTIOCPKT_FLUSHREAD                    = 0x1\n\tTIOCPKT_FLUSHWRITE                   = 0x2\n\tTIOCPKT_IOCTL                        = 0x40\n\tTIOCPKT_NOSTOP                       = 0x10\n\tTIOCPKT_START                        = 0x8\n\tTIOCPKT_STOP                         = 0x4\n\tTIOCSBRK                             = 0x5427\n\tTIOCSCTTY                            = 0x540e\n\tTIOCSERCONFIG                        = 0x5453\n\tTIOCSERGETLSR                        = 0x5459\n\tTIOCSERGETMULTI                      = 0x545a\n\tTIOCSERGSTRUCT                       = 0x5458\n\tTIOCSERGWILD                         = 0x5454\n\tTIOCSERSETMULTI                      = 0x545b\n\tTIOCSERSWILD                         = 0x5455\n\tTIOCSER_TEMT                         = 0x1\n\tTIOCSETD                             = 0x5423\n\tTIOCSIG                              = 0x40045436\n\tTIOCSISO7816                         = 0xc0285443\n\tTIOCSLCKTRMIOS                       = 0x5457\n\tTIOCSPGRP                            = 0x5410\n\tTIOCSPTLCK                           = 0x40045431\n\tTIOCSRS485                           = 0x542f\n\tTIOCSSERIAL                          = 0x541f\n\tTIOCSSOFTCAR                         = 0x541a\n\tTIOCSTI                              = 0x5412\n\tTIOCSWINSZ                           = 0x5414\n\tTIOCVHANGUP                          = 0x5437\n\tTMPFS_MAGIC                          = 0x1021994\n\tTOSTOP                               = 0x100\n\tTPACKET_ALIGNMENT                    = 0x10\n\tTPACKET_HDRLEN                       = 0x34\n\tTP_STATUS_AVAILABLE                  = 0x0\n\tTP_STATUS_BLK_TMO                    = 0x20\n\tTP_STATUS_COPY                       = 0x2\n\tTP_STATUS_CSUMNOTREADY               = 0x8\n\tTP_STATUS_CSUM_VALID                 = 0x80\n\tTP_STATUS_KERNEL                     = 0x0\n\tTP_STATUS_LOSING                     = 0x4\n\tTP_STATUS_SENDING                    = 0x2\n\tTP_STATUS_SEND_REQUEST               = 0x1\n\tTP_STATUS_TS_RAW_HARDWARE            = -0x80000000\n\tTP_STATUS_TS_SOFTWARE                = 0x20000000\n\tTP_STATUS_TS_SYS_HARDWARE            = 0x40000000\n\tTP_STATUS_USER                       = 0x1\n\tTP_STATUS_VLAN_TPID_VALID            = 0x40\n\tTP_STATUS_VLAN_VALID                 = 0x10\n\tTP_STATUS_WRONG_FORMAT               = 0x4\n\tTRACEFS_MAGIC                        = 0x74726163\n\tTS_COMM_LEN                          = 0x20\n\tTUNATTACHFILTER                      = 0x401054d5\n\tTUNDETACHFILTER                      = 0x401054d6\n\tTUNGETFEATURES                       = 0x800454cf\n\tTUNGETFILTER                         = 0x801054db\n\tTUNGETIFF                            = 0x800454d2\n\tTUNGETSNDBUF                         = 0x800454d3\n\tTUNGETVNETBE                         = 0x800454df\n\tTUNGETVNETHDRSZ                      = 0x800454d7\n\tTUNGETVNETLE                         = 0x800454dd\n\tTUNSETCARRIER                        = 0x400454e2\n\tTUNSETDEBUG                          = 0x400454c9\n\tTUNSETFILTEREBPF                     = 0x800454e1\n\tTUNSETGROUP                          = 0x400454ce\n\tTUNSETIFF                            = 0x400454ca\n\tTUNSETIFINDEX                        = 0x400454da\n\tTUNSETLINK                           = 0x400454cd\n\tTUNSETNOCSUM                         = 0x400454c8\n\tTUNSETOFFLOAD                        = 0x400454d0\n\tTUNSETOWNER                          = 0x400454cc\n\tTUNSETPERSIST                        = 0x400454cb\n\tTUNSETQUEUE                          = 0x400454d9\n\tTUNSETSNDBUF                         = 0x400454d4\n\tTUNSETSTEERINGEBPF                   = 0x800454e0\n\tTUNSETTXFILTER                       = 0x400454d1\n\tTUNSETVNETBE                         = 0x400454de\n\tTUNSETVNETHDRSZ                      = 0x400454d8\n\tTUNSETVNETLE                         = 0x400454dc\n\tUBI_IOCATT                           = 0x40186f40\n\tUBI_IOCDET                           = 0x40046f41\n\tUBI_IOCEBCH                          = 0x40044f02\n\tUBI_IOCEBER                          = 0x40044f01\n\tUBI_IOCEBISMAP                       = 0x80044f05\n\tUBI_IOCEBMAP                         = 0x40084f03\n\tUBI_IOCEBUNMAP                       = 0x40044f04\n\tUBI_IOCMKVOL                         = 0x40986f00\n\tUBI_IOCRMVOL                         = 0x40046f01\n\tUBI_IOCRNVOL                         = 0x51106f03\n\tUBI_IOCRPEB                          = 0x40046f04\n\tUBI_IOCRSVOL                         = 0x400c6f02\n\tUBI_IOCSETVOLPROP                    = 0x40104f06\n\tUBI_IOCSPEB                          = 0x40046f05\n\tUBI_IOCVOLCRBLK                      = 0x40804f07\n\tUBI_IOCVOLRMBLK                      = 0x4f08\n\tUBI_IOCVOLUP                         = 0x40084f00\n\tUDF_SUPER_MAGIC                      = 0x15013346\n\tUMOUNT_NOFOLLOW                      = 0x8\n\tUSBDEVICE_SUPER_MAGIC                = 0x9fa2\n\tUTIME_NOW                            = 0x3fffffff\n\tUTIME_OMIT                           = 0x3ffffffe\n\tV9FS_MAGIC                           = 0x1021997\n\tVDISCARD                             = 0xd\n\tVEOF                                 = 0x4\n\tVEOL                                 = 0xb\n\tVEOL2                                = 0x10\n\tVERASE                               = 0x2\n\tVINTR                                = 0x0\n\tVKILL                                = 0x3\n\tVLNEXT                               = 0xf\n\tVMADDR_CID_ANY                       = 0xffffffff\n\tVMADDR_CID_HOST                      = 0x2\n\tVMADDR_CID_HYPERVISOR                = 0x0\n\tVMADDR_CID_RESERVED                  = 0x1\n\tVMADDR_PORT_ANY                      = 0xffffffff\n\tVMIN                                 = 0x6\n\tVM_SOCKETS_INVALID_VERSION           = 0xffffffff\n\tVQUIT                                = 0x1\n\tVREPRINT                             = 0xc\n\tVSTART                               = 0x8\n\tVSTOP                                = 0x9\n\tVSUSP                                = 0xa\n\tVSWTC                                = 0x7\n\tVT0                                  = 0x0\n\tVT1                                  = 0x4000\n\tVTDLY                                = 0x4000\n\tVTIME                                = 0x5\n\tVWERASE                              = 0xe\n\tWALL                                 = 0x40000000\n\tWCLONE                               = 0x80000000\n\tWCONTINUED                           = 0x8\n\tWDIOC_GETBOOTSTATUS                  = 0x80045702\n\tWDIOC_GETPRETIMEOUT                  = 0x80045709\n\tWDIOC_GETSTATUS                      = 0x80045701\n\tWDIOC_GETSUPPORT                     = 0x80285700\n\tWDIOC_GETTEMP                        = 0x80045703\n\tWDIOC_GETTIMELEFT                    = 0x8004570a\n\tWDIOC_GETTIMEOUT                     = 0x80045707\n\tWDIOC_KEEPALIVE                      = 0x80045705\n\tWDIOC_SETOPTIONS                     = 0x80045704\n\tWDIOC_SETPRETIMEOUT                  = 0xc0045708\n\tWDIOC_SETTIMEOUT                     = 0xc0045706\n\tWEXITED                              = 0x4\n\tWIN_ACKMEDIACHANGE                   = 0xdb\n\tWIN_CHECKPOWERMODE1                  = 0xe5\n\tWIN_CHECKPOWERMODE2                  = 0x98\n\tWIN_DEVICE_RESET                     = 0x8\n\tWIN_DIAGNOSE                         = 0x90\n\tWIN_DOORLOCK                         = 0xde\n\tWIN_DOORUNLOCK                       = 0xdf\n\tWIN_DOWNLOAD_MICROCODE               = 0x92\n\tWIN_FLUSH_CACHE                      = 0xe7\n\tWIN_FLUSH_CACHE_EXT                  = 0xea\n\tWIN_FORMAT                           = 0x50\n\tWIN_GETMEDIASTATUS                   = 0xda\n\tWIN_IDENTIFY                         = 0xec\n\tWIN_IDENTIFY_DMA                     = 0xee\n\tWIN_IDLEIMMEDIATE                    = 0xe1\n\tWIN_INIT                             = 0x60\n\tWIN_MEDIAEJECT                       = 0xed\n\tWIN_MULTREAD                         = 0xc4\n\tWIN_MULTREAD_EXT                     = 0x29\n\tWIN_MULTWRITE                        = 0xc5\n\tWIN_MULTWRITE_EXT                    = 0x39\n\tWIN_NOP                              = 0x0\n\tWIN_PACKETCMD                        = 0xa0\n\tWIN_PIDENTIFY                        = 0xa1\n\tWIN_POSTBOOT                         = 0xdc\n\tWIN_PREBOOT                          = 0xdd\n\tWIN_QUEUED_SERVICE                   = 0xa2\n\tWIN_READ                             = 0x20\n\tWIN_READDMA                          = 0xc8\n\tWIN_READDMA_EXT                      = 0x25\n\tWIN_READDMA_ONCE                     = 0xc9\n\tWIN_READDMA_QUEUED                   = 0xc7\n\tWIN_READDMA_QUEUED_EXT               = 0x26\n\tWIN_READ_BUFFER                      = 0xe4\n\tWIN_READ_EXT                         = 0x24\n\tWIN_READ_LONG                        = 0x22\n\tWIN_READ_LONG_ONCE                   = 0x23\n\tWIN_READ_NATIVE_MAX                  = 0xf8\n\tWIN_READ_NATIVE_MAX_EXT              = 0x27\n\tWIN_READ_ONCE                        = 0x21\n\tWIN_RECAL                            = 0x10\n\tWIN_RESTORE                          = 0x10\n\tWIN_SECURITY_DISABLE                 = 0xf6\n\tWIN_SECURITY_ERASE_PREPARE           = 0xf3\n\tWIN_SECURITY_ERASE_UNIT              = 0xf4\n\tWIN_SECURITY_FREEZE_LOCK             = 0xf5\n\tWIN_SECURITY_SET_PASS                = 0xf1\n\tWIN_SECURITY_UNLOCK                  = 0xf2\n\tWIN_SEEK                             = 0x70\n\tWIN_SETFEATURES                      = 0xef\n\tWIN_SETIDLE1                         = 0xe3\n\tWIN_SETIDLE2                         = 0x97\n\tWIN_SETMULT                          = 0xc6\n\tWIN_SET_MAX                          = 0xf9\n\tWIN_SET_MAX_EXT                      = 0x37\n\tWIN_SLEEPNOW1                        = 0xe6\n\tWIN_SLEEPNOW2                        = 0x99\n\tWIN_SMART                            = 0xb0\n\tWIN_SPECIFY                          = 0x91\n\tWIN_SRST                             = 0x8\n\tWIN_STANDBY                          = 0xe2\n\tWIN_STANDBY2                         = 0x96\n\tWIN_STANDBYNOW1                      = 0xe0\n\tWIN_STANDBYNOW2                      = 0x94\n\tWIN_VERIFY                           = 0x40\n\tWIN_VERIFY_EXT                       = 0x42\n\tWIN_VERIFY_ONCE                      = 0x41\n\tWIN_WRITE                            = 0x30\n\tWIN_WRITEDMA                         = 0xca\n\tWIN_WRITEDMA_EXT                     = 0x35\n\tWIN_WRITEDMA_ONCE                    = 0xcb\n\tWIN_WRITEDMA_QUEUED                  = 0xcc\n\tWIN_WRITEDMA_QUEUED_EXT              = 0x36\n\tWIN_WRITE_BUFFER                     = 0xe8\n\tWIN_WRITE_EXT                        = 0x34\n\tWIN_WRITE_LONG                       = 0x32\n\tWIN_WRITE_LONG_ONCE                  = 0x33\n\tWIN_WRITE_ONCE                       = 0x31\n\tWIN_WRITE_SAME                       = 0xe9\n\tWIN_WRITE_VERIFY                     = 0x3c\n\tWNOHANG                              = 0x1\n\tWNOTHREAD                            = 0x20000000\n\tWNOWAIT                              = 0x1000000\n\tWORDSIZE                             = 0x40\n\tWSTOPPED                             = 0x2\n\tWUNTRACED                            = 0x2\n\tXATTR_CREATE                         = 0x1\n\tXATTR_REPLACE                        = 0x2\n\tXCASE                                = 0x4\n\tXDP_COPY                             = 0x2\n\tXDP_FLAGS_DRV_MODE                   = 0x4\n\tXDP_FLAGS_HW_MODE                    = 0x8\n\tXDP_FLAGS_MASK                       = 0xf\n\tXDP_FLAGS_MODES                      = 0xe\n\tXDP_FLAGS_SKB_MODE                   = 0x2\n\tXDP_FLAGS_UPDATE_IF_NOEXIST          = 0x1\n\tXDP_MMAP_OFFSETS                     = 0x1\n\tXDP_PACKET_HEADROOM                  = 0x100\n\tXDP_PGOFF_RX_RING                    = 0x0\n\tXDP_PGOFF_TX_RING                    = 0x80000000\n\tXDP_RX_RING                          = 0x2\n\tXDP_SHARED_UMEM                      = 0x1\n\tXDP_STATISTICS                       = 0x7\n\tXDP_TX_RING                          = 0x3\n\tXDP_UMEM_COMPLETION_RING             = 0x6\n\tXDP_UMEM_FILL_RING                   = 0x5\n\tXDP_UMEM_PGOFF_COMPLETION_RING       = 0x180000000\n\tXDP_UMEM_PGOFF_FILL_RING             = 0x100000000\n\tXDP_UMEM_REG                         = 0x4\n\tXDP_ZEROCOPY                         = 0x4\n\tXENFS_SUPER_MAGIC                    = 0xabba1974\n\tXFS_SUPER_MAGIC                      = 0x58465342\n\tXTABS                                = 0x1800\n\tZSMALLOC_MAGIC                       = 0x58295829\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x62)\n\tEADDRNOTAVAIL   = syscall.Errno(0x63)\n\tEADV            = syscall.Errno(0x44)\n\tEAFNOSUPPORT    = syscall.Errno(0x61)\n\tEAGAIN          = syscall.Errno(0xb)\n\tEALREADY        = syscall.Errno(0x72)\n\tEBADE           = syscall.Errno(0x34)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADFD          = syscall.Errno(0x4d)\n\tEBADMSG         = syscall.Errno(0x4a)\n\tEBADR           = syscall.Errno(0x35)\n\tEBADRQC         = syscall.Errno(0x38)\n\tEBADSLT         = syscall.Errno(0x39)\n\tEBFONT          = syscall.Errno(0x3b)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x7d)\n\tECHILD          = syscall.Errno(0xa)\n\tECHRNG          = syscall.Errno(0x2c)\n\tECOMM           = syscall.Errno(0x46)\n\tECONNABORTED    = syscall.Errno(0x67)\n\tECONNREFUSED    = syscall.Errno(0x6f)\n\tECONNRESET      = syscall.Errno(0x68)\n\tEDEADLK         = syscall.Errno(0x23)\n\tEDEADLOCK       = syscall.Errno(0x23)\n\tEDESTADDRREQ    = syscall.Errno(0x59)\n\tEDOM            = syscall.Errno(0x21)\n\tEDOTDOT         = syscall.Errno(0x49)\n\tEDQUOT          = syscall.Errno(0x7a)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEHOSTDOWN       = syscall.Errno(0x70)\n\tEHOSTUNREACH    = syscall.Errno(0x71)\n\tEHWPOISON       = syscall.Errno(0x85)\n\tEIDRM           = syscall.Errno(0x2b)\n\tEILSEQ          = syscall.Errno(0x54)\n\tEINPROGRESS     = syscall.Errno(0x73)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEISCONN         = syscall.Errno(0x6a)\n\tEISDIR          = syscall.Errno(0x15)\n\tEISNAM          = syscall.Errno(0x78)\n\tEKEYEXPIRED     = syscall.Errno(0x7f)\n\tEKEYREJECTED    = syscall.Errno(0x81)\n\tEKEYREVOKED     = syscall.Errno(0x80)\n\tEL2HLT          = syscall.Errno(0x33)\n\tEL2NSYNC        = syscall.Errno(0x2d)\n\tEL3HLT          = syscall.Errno(0x2e)\n\tEL3RST          = syscall.Errno(0x2f)\n\tELIBACC         = syscall.Errno(0x4f)\n\tELIBBAD         = syscall.Errno(0x50)\n\tELIBEXEC        = syscall.Errno(0x53)\n\tELIBMAX         = syscall.Errno(0x52)\n\tELIBSCN         = syscall.Errno(0x51)\n\tELNRNG          = syscall.Errno(0x30)\n\tELOOP           = syscall.Errno(0x28)\n\tEMEDIUMTYPE     = syscall.Errno(0x7c)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x5a)\n\tEMULTIHOP       = syscall.Errno(0x48)\n\tENAMETOOLONG    = syscall.Errno(0x24)\n\tENAVAIL         = syscall.Errno(0x77)\n\tENETDOWN        = syscall.Errno(0x64)\n\tENETRESET       = syscall.Errno(0x66)\n\tENETUNREACH     = syscall.Errno(0x65)\n\tENFILE          = syscall.Errno(0x17)\n\tENOANO          = syscall.Errno(0x37)\n\tENOBUFS         = syscall.Errno(0x69)\n\tENOCSI          = syscall.Errno(0x32)\n\tENODATA         = syscall.Errno(0x3d)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOKEY          = syscall.Errno(0x7e)\n\tENOLCK          = syscall.Errno(0x25)\n\tENOLINK         = syscall.Errno(0x43)\n\tENOMEDIUM       = syscall.Errno(0x7b)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x2a)\n\tENONET          = syscall.Errno(0x40)\n\tENOPKG          = syscall.Errno(0x41)\n\tENOPROTOOPT     = syscall.Errno(0x5c)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSR           = syscall.Errno(0x3f)\n\tENOSTR          = syscall.Errno(0x3c)\n\tENOSYS          = syscall.Errno(0x26)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x6b)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x27)\n\tENOTNAM         = syscall.Errno(0x76)\n\tENOTRECOVERABLE = syscall.Errno(0x83)\n\tENOTSOCK        = syscall.Errno(0x58)\n\tENOTSUP         = syscall.Errno(0x5f)\n\tENOTTY          = syscall.Errno(0x19)\n\tENOTUNIQ        = syscall.Errno(0x4c)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x5f)\n\tEOVERFLOW       = syscall.Errno(0x4b)\n\tEOWNERDEAD      = syscall.Errno(0x82)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x60)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROTO          = syscall.Errno(0x47)\n\tEPROTONOSUPPORT = syscall.Errno(0x5d)\n\tEPROTOTYPE      = syscall.Errno(0x5b)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMCHG         = syscall.Errno(0x4e)\n\tEREMOTE         = syscall.Errno(0x42)\n\tEREMOTEIO       = syscall.Errno(0x79)\n\tERESTART        = syscall.Errno(0x55)\n\tERFKILL         = syscall.Errno(0x84)\n\tEROFS           = syscall.Errno(0x1e)\n\tESHUTDOWN       = syscall.Errno(0x6c)\n\tESOCKTNOSUPPORT = syscall.Errno(0x5e)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESRMNT          = syscall.Errno(0x45)\n\tESTALE          = syscall.Errno(0x74)\n\tESTRPIPE        = syscall.Errno(0x56)\n\tETIME           = syscall.Errno(0x3e)\n\tETIMEDOUT       = syscall.Errno(0x6e)\n\tETOOMANYREFS    = syscall.Errno(0x6d)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUCLEAN         = syscall.Errno(0x75)\n\tEUNATCH         = syscall.Errno(0x31)\n\tEUSERS          = syscall.Errno(0x57)\n\tEWOULDBLOCK     = syscall.Errno(0xb)\n\tEXDEV           = syscall.Errno(0x12)\n\tEXFULL          = syscall.Errno(0x36)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0x7)\n\tSIGCHLD   = syscall.Signal(0x11)\n\tSIGCLD    = syscall.Signal(0x11)\n\tSIGCONT   = syscall.Signal(0x12)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x1d)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPOLL   = syscall.Signal(0x1d)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGPWR    = syscall.Signal(0x1e)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTKFLT = syscall.Signal(0x10)\n\tSIGSTOP   = syscall.Signal(0x13)\n\tSIGSYS    = syscall.Signal(0x1f)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x14)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x17)\n\tSIGUSR1   = syscall.Signal(0xa)\n\tSIGUSR2   = syscall.Signal(0xc)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"no such device or address\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device or resource busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"invalid cross-device link\"},\n\t{19, \"ENODEV\", \"no such device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"numerical result out of range\"},\n\t{35, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{36, \"ENAMETOOLONG\", \"file name too long\"},\n\t{37, \"ENOLCK\", \"no locks available\"},\n\t{38, \"ENOSYS\", \"function not implemented\"},\n\t{39, \"ENOTEMPTY\", \"directory not empty\"},\n\t{40, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{42, \"ENOMSG\", \"no message of desired type\"},\n\t{43, \"EIDRM\", \"identifier removed\"},\n\t{44, \"ECHRNG\", \"channel number out of range\"},\n\t{45, \"EL2NSYNC\", \"level 2 not synchronized\"},\n\t{46, \"EL3HLT\", \"level 3 halted\"},\n\t{47, \"EL3RST\", \"level 3 reset\"},\n\t{48, \"ELNRNG\", \"link number out of range\"},\n\t{49, \"EUNATCH\", \"protocol driver not attached\"},\n\t{50, \"ENOCSI\", \"no CSI structure available\"},\n\t{51, \"EL2HLT\", \"level 2 halted\"},\n\t{52, \"EBADE\", \"invalid exchange\"},\n\t{53, \"EBADR\", \"invalid request descriptor\"},\n\t{54, \"EXFULL\", \"exchange full\"},\n\t{55, \"ENOANO\", \"no anode\"},\n\t{56, \"EBADRQC\", \"invalid request code\"},\n\t{57, \"EBADSLT\", \"invalid slot\"},\n\t{59, \"EBFONT\", \"bad font file format\"},\n\t{60, \"ENOSTR\", \"device not a stream\"},\n\t{61, \"ENODATA\", \"no data available\"},\n\t{62, \"ETIME\", \"timer expired\"},\n\t{63, \"ENOSR\", \"out of streams resources\"},\n\t{64, \"ENONET\", \"machine is not on the network\"},\n\t{65, \"ENOPKG\", \"package not installed\"},\n\t{66, \"EREMOTE\", \"object is remote\"},\n\t{67, \"ENOLINK\", \"link has been severed\"},\n\t{68, \"EADV\", \"advertise error\"},\n\t{69, \"ESRMNT\", \"srmount error\"},\n\t{70, \"ECOMM\", \"communication error on send\"},\n\t{71, \"EPROTO\", \"protocol error\"},\n\t{72, \"EMULTIHOP\", \"multihop attempted\"},\n\t{73, \"EDOTDOT\", \"RFS specific error\"},\n\t{74, \"EBADMSG\", \"bad message\"},\n\t{75, \"EOVERFLOW\", \"value too large for defined data type\"},\n\t{76, \"ENOTUNIQ\", \"name not unique on network\"},\n\t{77, \"EBADFD\", \"file descriptor in bad state\"},\n\t{78, \"EREMCHG\", \"remote address changed\"},\n\t{79, \"ELIBACC\", \"can not access a needed shared library\"},\n\t{80, \"ELIBBAD\", \"accessing a corrupted shared library\"},\n\t{81, \"ELIBSCN\", \".lib section in a.out corrupted\"},\n\t{82, \"ELIBMAX\", \"attempting to link in too many shared libraries\"},\n\t{83, \"ELIBEXEC\", \"cannot exec a shared library directly\"},\n\t{84, \"EILSEQ\", \"invalid or incomplete multibyte or wide character\"},\n\t{85, \"ERESTART\", \"interrupted system call should be restarted\"},\n\t{86, \"ESTRPIPE\", \"streams pipe error\"},\n\t{87, \"EUSERS\", \"too many users\"},\n\t{88, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{89, \"EDESTADDRREQ\", \"destination address required\"},\n\t{90, \"EMSGSIZE\", \"message too long\"},\n\t{91, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{92, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{93, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{94, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{95, \"ENOTSUP\", \"operation not supported\"},\n\t{96, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{97, \"EAFNOSUPPORT\", \"address family not supported by protocol\"},\n\t{98, \"EADDRINUSE\", \"address already in use\"},\n\t{99, \"EADDRNOTAVAIL\", \"cannot assign requested address\"},\n\t{100, \"ENETDOWN\", \"network is down\"},\n\t{101, \"ENETUNREACH\", \"network is unreachable\"},\n\t{102, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{103, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{104, \"ECONNRESET\", \"connection reset by peer\"},\n\t{105, \"ENOBUFS\", \"no buffer space available\"},\n\t{106, \"EISCONN\", \"transport endpoint is already connected\"},\n\t{107, \"ENOTCONN\", \"transport endpoint is not connected\"},\n\t{108, \"ESHUTDOWN\", \"cannot send after transport endpoint shutdown\"},\n\t{109, \"ETOOMANYREFS\", \"too many references: cannot splice\"},\n\t{110, \"ETIMEDOUT\", \"connection timed out\"},\n\t{111, \"ECONNREFUSED\", \"connection refused\"},\n\t{112, \"EHOSTDOWN\", \"host is down\"},\n\t{113, \"EHOSTUNREACH\", \"no route to host\"},\n\t{114, \"EALREADY\", \"operation already in progress\"},\n\t{115, \"EINPROGRESS\", \"operation now in progress\"},\n\t{116, \"ESTALE\", \"stale file handle\"},\n\t{117, \"EUCLEAN\", \"structure needs cleaning\"},\n\t{118, \"ENOTNAM\", \"not a XENIX named type file\"},\n\t{119, \"ENAVAIL\", \"no XENIX semaphores available\"},\n\t{120, \"EISNAM\", \"is a named type file\"},\n\t{121, \"EREMOTEIO\", \"remote I/O error\"},\n\t{122, \"EDQUOT\", \"disk quota exceeded\"},\n\t{123, \"ENOMEDIUM\", \"no medium found\"},\n\t{124, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{125, \"ECANCELED\", \"operation canceled\"},\n\t{126, \"ENOKEY\", \"required key not available\"},\n\t{127, \"EKEYEXPIRED\", \"key has expired\"},\n\t{128, \"EKEYREVOKED\", \"key has been revoked\"},\n\t{129, \"EKEYREJECTED\", \"key was rejected by service\"},\n\t{130, \"EOWNERDEAD\", \"owner died\"},\n\t{131, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{132, \"ERFKILL\", \"operation not possible due to RF-kill\"},\n\t{133, \"EHWPOISON\", \"memory page has hardware error\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/breakpoint trap\"},\n\t{6, \"SIGABRT\", \"aborted\"},\n\t{7, \"SIGBUS\", \"bus error\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGUSR1\", \"user defined signal 1\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGUSR2\", \"user defined signal 2\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGSTKFLT\", \"stack fault\"},\n\t{17, \"SIGCHLD\", \"child exited\"},\n\t{18, \"SIGCONT\", \"continued\"},\n\t{19, \"SIGSTOP\", \"stopped (signal)\"},\n\t{20, \"SIGTSTP\", \"stopped\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGURG\", \"urgent I/O condition\"},\n\t{24, \"SIGXCPU\", \"CPU time limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"file size limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window changed\"},\n\t{29, \"SIGIO\", \"I/O possible\"},\n\t{30, \"SIGPWR\", \"power failure\"},\n\t{31, \"SIGSYS\", \"bad system call\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_linux_arm.go",
    "content": "// mkerrors.sh -Wall -Werror -static -I/tmp/include\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build arm,linux\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAAFS_MAGIC                           = 0x5a3c69f0\n\tADFS_SUPER_MAGIC                     = 0xadf5\n\tAFFS_SUPER_MAGIC                     = 0xadff\n\tAFS_FS_MAGIC                         = 0x6b414653\n\tAFS_SUPER_MAGIC                      = 0x5346414f\n\tAF_ALG                               = 0x26\n\tAF_APPLETALK                         = 0x5\n\tAF_ASH                               = 0x12\n\tAF_ATMPVC                            = 0x8\n\tAF_ATMSVC                            = 0x14\n\tAF_AX25                              = 0x3\n\tAF_BLUETOOTH                         = 0x1f\n\tAF_BRIDGE                            = 0x7\n\tAF_CAIF                              = 0x25\n\tAF_CAN                               = 0x1d\n\tAF_DECnet                            = 0xc\n\tAF_ECONET                            = 0x13\n\tAF_FILE                              = 0x1\n\tAF_IB                                = 0x1b\n\tAF_IEEE802154                        = 0x24\n\tAF_INET                              = 0x2\n\tAF_INET6                             = 0xa\n\tAF_IPX                               = 0x4\n\tAF_IRDA                              = 0x17\n\tAF_ISDN                              = 0x22\n\tAF_IUCV                              = 0x20\n\tAF_KCM                               = 0x29\n\tAF_KEY                               = 0xf\n\tAF_LLC                               = 0x1a\n\tAF_LOCAL                             = 0x1\n\tAF_MAX                               = 0x2d\n\tAF_MPLS                              = 0x1c\n\tAF_NETBEUI                           = 0xd\n\tAF_NETLINK                           = 0x10\n\tAF_NETROM                            = 0x6\n\tAF_NFC                               = 0x27\n\tAF_PACKET                            = 0x11\n\tAF_PHONET                            = 0x23\n\tAF_PPPOX                             = 0x18\n\tAF_QIPCRTR                           = 0x2a\n\tAF_RDS                               = 0x15\n\tAF_ROSE                              = 0xb\n\tAF_ROUTE                             = 0x10\n\tAF_RXRPC                             = 0x21\n\tAF_SECURITY                          = 0xe\n\tAF_SMC                               = 0x2b\n\tAF_SNA                               = 0x16\n\tAF_TIPC                              = 0x1e\n\tAF_UNIX                              = 0x1\n\tAF_UNSPEC                            = 0x0\n\tAF_VSOCK                             = 0x28\n\tAF_WANPIPE                           = 0x19\n\tAF_X25                               = 0x9\n\tAF_XDP                               = 0x2c\n\tALG_OP_DECRYPT                       = 0x0\n\tALG_OP_ENCRYPT                       = 0x1\n\tALG_SET_AEAD_ASSOCLEN                = 0x4\n\tALG_SET_AEAD_AUTHSIZE                = 0x5\n\tALG_SET_IV                           = 0x2\n\tALG_SET_KEY                          = 0x1\n\tALG_SET_OP                           = 0x3\n\tANON_INODE_FS_MAGIC                  = 0x9041934\n\tARPHRD_6LOWPAN                       = 0x339\n\tARPHRD_ADAPT                         = 0x108\n\tARPHRD_APPLETLK                      = 0x8\n\tARPHRD_ARCNET                        = 0x7\n\tARPHRD_ASH                           = 0x30d\n\tARPHRD_ATM                           = 0x13\n\tARPHRD_AX25                          = 0x3\n\tARPHRD_BIF                           = 0x307\n\tARPHRD_CAIF                          = 0x336\n\tARPHRD_CAN                           = 0x118\n\tARPHRD_CHAOS                         = 0x5\n\tARPHRD_CISCO                         = 0x201\n\tARPHRD_CSLIP                         = 0x101\n\tARPHRD_CSLIP6                        = 0x103\n\tARPHRD_DDCMP                         = 0x205\n\tARPHRD_DLCI                          = 0xf\n\tARPHRD_ECONET                        = 0x30e\n\tARPHRD_EETHER                        = 0x2\n\tARPHRD_ETHER                         = 0x1\n\tARPHRD_EUI64                         = 0x1b\n\tARPHRD_FCAL                          = 0x311\n\tARPHRD_FCFABRIC                      = 0x313\n\tARPHRD_FCPL                          = 0x312\n\tARPHRD_FCPP                          = 0x310\n\tARPHRD_FDDI                          = 0x306\n\tARPHRD_FRAD                          = 0x302\n\tARPHRD_HDLC                          = 0x201\n\tARPHRD_HIPPI                         = 0x30c\n\tARPHRD_HWX25                         = 0x110\n\tARPHRD_IEEE1394                      = 0x18\n\tARPHRD_IEEE802                       = 0x6\n\tARPHRD_IEEE80211                     = 0x321\n\tARPHRD_IEEE80211_PRISM               = 0x322\n\tARPHRD_IEEE80211_RADIOTAP            = 0x323\n\tARPHRD_IEEE802154                    = 0x324\n\tARPHRD_IEEE802154_MONITOR            = 0x325\n\tARPHRD_IEEE802_TR                    = 0x320\n\tARPHRD_INFINIBAND                    = 0x20\n\tARPHRD_IP6GRE                        = 0x337\n\tARPHRD_IPDDP                         = 0x309\n\tARPHRD_IPGRE                         = 0x30a\n\tARPHRD_IRDA                          = 0x30f\n\tARPHRD_LAPB                          = 0x204\n\tARPHRD_LOCALTLK                      = 0x305\n\tARPHRD_LOOPBACK                      = 0x304\n\tARPHRD_METRICOM                      = 0x17\n\tARPHRD_NETLINK                       = 0x338\n\tARPHRD_NETROM                        = 0x0\n\tARPHRD_NONE                          = 0xfffe\n\tARPHRD_PHONET                        = 0x334\n\tARPHRD_PHONET_PIPE                   = 0x335\n\tARPHRD_PIMREG                        = 0x30b\n\tARPHRD_PPP                           = 0x200\n\tARPHRD_PRONET                        = 0x4\n\tARPHRD_RAWHDLC                       = 0x206\n\tARPHRD_RAWIP                         = 0x207\n\tARPHRD_ROSE                          = 0x10e\n\tARPHRD_RSRVD                         = 0x104\n\tARPHRD_SIT                           = 0x308\n\tARPHRD_SKIP                          = 0x303\n\tARPHRD_SLIP                          = 0x100\n\tARPHRD_SLIP6                         = 0x102\n\tARPHRD_TUNNEL                        = 0x300\n\tARPHRD_TUNNEL6                       = 0x301\n\tARPHRD_VOID                          = 0xffff\n\tARPHRD_VSOCKMON                      = 0x33a\n\tARPHRD_X25                           = 0x10f\n\tAUTOFS_SUPER_MAGIC                   = 0x187\n\tB0                                   = 0x0\n\tB1000000                             = 0x1008\n\tB110                                 = 0x3\n\tB115200                              = 0x1002\n\tB1152000                             = 0x1009\n\tB1200                                = 0x9\n\tB134                                 = 0x4\n\tB150                                 = 0x5\n\tB1500000                             = 0x100a\n\tB1800                                = 0xa\n\tB19200                               = 0xe\n\tB200                                 = 0x6\n\tB2000000                             = 0x100b\n\tB230400                              = 0x1003\n\tB2400                                = 0xb\n\tB2500000                             = 0x100c\n\tB300                                 = 0x7\n\tB3000000                             = 0x100d\n\tB3500000                             = 0x100e\n\tB38400                               = 0xf\n\tB4000000                             = 0x100f\n\tB460800                              = 0x1004\n\tB4800                                = 0xc\n\tB50                                  = 0x1\n\tB500000                              = 0x1005\n\tB57600                               = 0x1001\n\tB576000                              = 0x1006\n\tB600                                 = 0x8\n\tB75                                  = 0x2\n\tB921600                              = 0x1007\n\tB9600                                = 0xd\n\tBALLOON_KVM_MAGIC                    = 0x13661366\n\tBDEVFS_MAGIC                         = 0x62646576\n\tBINDERFS_SUPER_MAGIC                 = 0x6c6f6f70\n\tBINFMTFS_MAGIC                       = 0x42494e4d\n\tBLKBSZGET                            = 0x80041270\n\tBLKBSZSET                            = 0x40041271\n\tBLKFLSBUF                            = 0x1261\n\tBLKFRAGET                            = 0x1265\n\tBLKFRASET                            = 0x1264\n\tBLKGETSIZE                           = 0x1260\n\tBLKGETSIZE64                         = 0x80041272\n\tBLKPBSZGET                           = 0x127b\n\tBLKRAGET                             = 0x1263\n\tBLKRASET                             = 0x1262\n\tBLKROGET                             = 0x125e\n\tBLKROSET                             = 0x125d\n\tBLKRRPART                            = 0x125f\n\tBLKSECTGET                           = 0x1267\n\tBLKSECTSET                           = 0x1266\n\tBLKSSZGET                            = 0x1268\n\tBOTHER                               = 0x1000\n\tBPF_A                                = 0x10\n\tBPF_ABS                              = 0x20\n\tBPF_ADD                              = 0x0\n\tBPF_ALU                              = 0x4\n\tBPF_ALU64                            = 0x7\n\tBPF_AND                              = 0x50\n\tBPF_ANY                              = 0x0\n\tBPF_ARSH                             = 0xc0\n\tBPF_B                                = 0x10\n\tBPF_BUILD_ID_SIZE                    = 0x14\n\tBPF_CALL                             = 0x80\n\tBPF_DEVCG_ACC_MKNOD                  = 0x1\n\tBPF_DEVCG_ACC_READ                   = 0x2\n\tBPF_DEVCG_ACC_WRITE                  = 0x4\n\tBPF_DEVCG_DEV_BLOCK                  = 0x1\n\tBPF_DEVCG_DEV_CHAR                   = 0x2\n\tBPF_DIV                              = 0x30\n\tBPF_DW                               = 0x18\n\tBPF_END                              = 0xd0\n\tBPF_EXIST                            = 0x2\n\tBPF_EXIT                             = 0x90\n\tBPF_FROM_BE                          = 0x8\n\tBPF_FROM_LE                          = 0x0\n\tBPF_FS_MAGIC                         = 0xcafe4a11\n\tBPF_F_ALLOW_MULTI                    = 0x2\n\tBPF_F_ALLOW_OVERRIDE                 = 0x1\n\tBPF_F_ANY_ALIGNMENT                  = 0x2\n\tBPF_F_CTXLEN_MASK                    = 0xfffff00000000\n\tBPF_F_CURRENT_CPU                    = 0xffffffff\n\tBPF_F_CURRENT_NETNS                  = -0x1\n\tBPF_F_DONT_FRAGMENT                  = 0x4\n\tBPF_F_FAST_STACK_CMP                 = 0x200\n\tBPF_F_HDR_FIELD_MASK                 = 0xf\n\tBPF_F_INDEX_MASK                     = 0xffffffff\n\tBPF_F_INGRESS                        = 0x1\n\tBPF_F_INVALIDATE_HASH                = 0x2\n\tBPF_F_LOCK                           = 0x4\n\tBPF_F_MARK_ENFORCE                   = 0x40\n\tBPF_F_MARK_MANGLED_0                 = 0x20\n\tBPF_F_NO_COMMON_LRU                  = 0x2\n\tBPF_F_NO_PREALLOC                    = 0x1\n\tBPF_F_NUMA_NODE                      = 0x4\n\tBPF_F_PSEUDO_HDR                     = 0x10\n\tBPF_F_QUERY_EFFECTIVE                = 0x1\n\tBPF_F_RDONLY                         = 0x8\n\tBPF_F_RECOMPUTE_CSUM                 = 0x1\n\tBPF_F_REUSE_STACKID                  = 0x400\n\tBPF_F_SEQ_NUMBER                     = 0x8\n\tBPF_F_SKIP_FIELD_MASK                = 0xff\n\tBPF_F_STACK_BUILD_ID                 = 0x20\n\tBPF_F_STRICT_ALIGNMENT               = 0x1\n\tBPF_F_TUNINFO_IPV6                   = 0x1\n\tBPF_F_USER_BUILD_ID                  = 0x800\n\tBPF_F_USER_STACK                     = 0x100\n\tBPF_F_WRONLY                         = 0x10\n\tBPF_F_ZERO_CSUM_TX                   = 0x2\n\tBPF_F_ZERO_SEED                      = 0x40\n\tBPF_H                                = 0x8\n\tBPF_IMM                              = 0x0\n\tBPF_IND                              = 0x40\n\tBPF_JA                               = 0x0\n\tBPF_JEQ                              = 0x10\n\tBPF_JGE                              = 0x30\n\tBPF_JGT                              = 0x20\n\tBPF_JLE                              = 0xb0\n\tBPF_JLT                              = 0xa0\n\tBPF_JMP                              = 0x5\n\tBPF_JMP32                            = 0x6\n\tBPF_JNE                              = 0x50\n\tBPF_JSET                             = 0x40\n\tBPF_JSGE                             = 0x70\n\tBPF_JSGT                             = 0x60\n\tBPF_JSLE                             = 0xd0\n\tBPF_JSLT                             = 0xc0\n\tBPF_K                                = 0x0\n\tBPF_LD                               = 0x0\n\tBPF_LDX                              = 0x1\n\tBPF_LEN                              = 0x80\n\tBPF_LL_OFF                           = -0x200000\n\tBPF_LSH                              = 0x60\n\tBPF_MAJOR_VERSION                    = 0x1\n\tBPF_MAXINSNS                         = 0x1000\n\tBPF_MEM                              = 0x60\n\tBPF_MEMWORDS                         = 0x10\n\tBPF_MINOR_VERSION                    = 0x1\n\tBPF_MISC                             = 0x7\n\tBPF_MOD                              = 0x90\n\tBPF_MOV                              = 0xb0\n\tBPF_MSH                              = 0xa0\n\tBPF_MUL                              = 0x20\n\tBPF_NEG                              = 0x80\n\tBPF_NET_OFF                          = -0x100000\n\tBPF_NOEXIST                          = 0x1\n\tBPF_OBJ_NAME_LEN                     = 0x10\n\tBPF_OR                               = 0x40\n\tBPF_PSEUDO_CALL                      = 0x1\n\tBPF_PSEUDO_MAP_FD                    = 0x1\n\tBPF_RET                              = 0x6\n\tBPF_RSH                              = 0x70\n\tBPF_SOCK_OPS_ALL_CB_FLAGS            = 0x7\n\tBPF_SOCK_OPS_RETRANS_CB_FLAG         = 0x2\n\tBPF_SOCK_OPS_RTO_CB_FLAG             = 0x1\n\tBPF_SOCK_OPS_STATE_CB_FLAG           = 0x4\n\tBPF_ST                               = 0x2\n\tBPF_STX                              = 0x3\n\tBPF_SUB                              = 0x10\n\tBPF_TAG_SIZE                         = 0x8\n\tBPF_TAX                              = 0x0\n\tBPF_TO_BE                            = 0x8\n\tBPF_TO_LE                            = 0x0\n\tBPF_TXA                              = 0x80\n\tBPF_W                                = 0x0\n\tBPF_X                                = 0x8\n\tBPF_XADD                             = 0xc0\n\tBPF_XOR                              = 0xa0\n\tBRKINT                               = 0x2\n\tBS0                                  = 0x0\n\tBS1                                  = 0x2000\n\tBSDLY                                = 0x2000\n\tBTRFS_SUPER_MAGIC                    = 0x9123683e\n\tBTRFS_TEST_MAGIC                     = 0x73727279\n\tCAN_BCM                              = 0x2\n\tCAN_EFF_FLAG                         = 0x80000000\n\tCAN_EFF_ID_BITS                      = 0x1d\n\tCAN_EFF_MASK                         = 0x1fffffff\n\tCAN_ERR_FLAG                         = 0x20000000\n\tCAN_ERR_MASK                         = 0x1fffffff\n\tCAN_INV_FILTER                       = 0x20000000\n\tCAN_ISOTP                            = 0x6\n\tCAN_MAX_DLC                          = 0x8\n\tCAN_MAX_DLEN                         = 0x8\n\tCAN_MCNET                            = 0x5\n\tCAN_MTU                              = 0x10\n\tCAN_NPROTO                           = 0x7\n\tCAN_RAW                              = 0x1\n\tCAN_RAW_FILTER_MAX                   = 0x200\n\tCAN_RTR_FLAG                         = 0x40000000\n\tCAN_SFF_ID_BITS                      = 0xb\n\tCAN_SFF_MASK                         = 0x7ff\n\tCAN_TP16                             = 0x3\n\tCAN_TP20                             = 0x4\n\tCBAUD                                = 0x100f\n\tCBAUDEX                              = 0x1000\n\tCFLUSH                               = 0xf\n\tCGROUP2_SUPER_MAGIC                  = 0x63677270\n\tCGROUP_SUPER_MAGIC                   = 0x27e0eb\n\tCIBAUD                               = 0x100f0000\n\tCLOCAL                               = 0x800\n\tCLOCK_BOOTTIME                       = 0x7\n\tCLOCK_BOOTTIME_ALARM                 = 0x9\n\tCLOCK_DEFAULT                        = 0x0\n\tCLOCK_EXT                            = 0x1\n\tCLOCK_INT                            = 0x2\n\tCLOCK_MONOTONIC                      = 0x1\n\tCLOCK_MONOTONIC_COARSE               = 0x6\n\tCLOCK_MONOTONIC_RAW                  = 0x4\n\tCLOCK_PROCESS_CPUTIME_ID             = 0x2\n\tCLOCK_REALTIME                       = 0x0\n\tCLOCK_REALTIME_ALARM                 = 0x8\n\tCLOCK_REALTIME_COARSE                = 0x5\n\tCLOCK_TAI                            = 0xb\n\tCLOCK_THREAD_CPUTIME_ID              = 0x3\n\tCLOCK_TXFROMRX                       = 0x4\n\tCLOCK_TXINT                          = 0x3\n\tCLONE_CHILD_CLEARTID                 = 0x200000\n\tCLONE_CHILD_SETTID                   = 0x1000000\n\tCLONE_DETACHED                       = 0x400000\n\tCLONE_FILES                          = 0x400\n\tCLONE_FS                             = 0x200\n\tCLONE_IO                             = 0x80000000\n\tCLONE_NEWCGROUP                      = 0x2000000\n\tCLONE_NEWIPC                         = 0x8000000\n\tCLONE_NEWNET                         = 0x40000000\n\tCLONE_NEWNS                          = 0x20000\n\tCLONE_NEWPID                         = 0x20000000\n\tCLONE_NEWUSER                        = 0x10000000\n\tCLONE_NEWUTS                         = 0x4000000\n\tCLONE_PARENT                         = 0x8000\n\tCLONE_PARENT_SETTID                  = 0x100000\n\tCLONE_PTRACE                         = 0x2000\n\tCLONE_SETTLS                         = 0x80000\n\tCLONE_SIGHAND                        = 0x800\n\tCLONE_SYSVSEM                        = 0x40000\n\tCLONE_THREAD                         = 0x10000\n\tCLONE_UNTRACED                       = 0x800000\n\tCLONE_VFORK                          = 0x4000\n\tCLONE_VM                             = 0x100\n\tCMSPAR                               = 0x40000000\n\tCODA_SUPER_MAGIC                     = 0x73757245\n\tCR0                                  = 0x0\n\tCR1                                  = 0x200\n\tCR2                                  = 0x400\n\tCR3                                  = 0x600\n\tCRAMFS_MAGIC                         = 0x28cd3d45\n\tCRDLY                                = 0x600\n\tCREAD                                = 0x80\n\tCRTSCTS                              = 0x80000000\n\tCRYPTO_MAX_NAME                      = 0x40\n\tCRYPTO_MSG_MAX                       = 0x15\n\tCRYPTO_NR_MSGTYPES                   = 0x6\n\tCRYPTO_REPORT_MAXSIZE                = 0x160\n\tCS5                                  = 0x0\n\tCS6                                  = 0x10\n\tCS7                                  = 0x20\n\tCS8                                  = 0x30\n\tCSIGNAL                              = 0xff\n\tCSIZE                                = 0x30\n\tCSTART                               = 0x11\n\tCSTATUS                              = 0x0\n\tCSTOP                                = 0x13\n\tCSTOPB                               = 0x40\n\tCSUSP                                = 0x1a\n\tDAXFS_MAGIC                          = 0x64646178\n\tDEBUGFS_MAGIC                        = 0x64626720\n\tDEVPTS_SUPER_MAGIC                   = 0x1cd1\n\tDT_BLK                               = 0x6\n\tDT_CHR                               = 0x2\n\tDT_DIR                               = 0x4\n\tDT_FIFO                              = 0x1\n\tDT_LNK                               = 0xa\n\tDT_REG                               = 0x8\n\tDT_SOCK                              = 0xc\n\tDT_UNKNOWN                           = 0x0\n\tDT_WHT                               = 0xe\n\tECHO                                 = 0x8\n\tECHOCTL                              = 0x200\n\tECHOE                                = 0x10\n\tECHOK                                = 0x20\n\tECHOKE                               = 0x800\n\tECHONL                               = 0x40\n\tECHOPRT                              = 0x400\n\tECRYPTFS_SUPER_MAGIC                 = 0xf15f\n\tEFD_CLOEXEC                          = 0x80000\n\tEFD_NONBLOCK                         = 0x800\n\tEFD_SEMAPHORE                        = 0x1\n\tEFIVARFS_MAGIC                       = 0xde5e81e4\n\tEFS_SUPER_MAGIC                      = 0x414a53\n\tENCODING_DEFAULT                     = 0x0\n\tENCODING_FM_MARK                     = 0x3\n\tENCODING_FM_SPACE                    = 0x4\n\tENCODING_MANCHESTER                  = 0x5\n\tENCODING_NRZ                         = 0x1\n\tENCODING_NRZI                        = 0x2\n\tEPOLLERR                             = 0x8\n\tEPOLLET                              = 0x80000000\n\tEPOLLEXCLUSIVE                       = 0x10000000\n\tEPOLLHUP                             = 0x10\n\tEPOLLIN                              = 0x1\n\tEPOLLMSG                             = 0x400\n\tEPOLLONESHOT                         = 0x40000000\n\tEPOLLOUT                             = 0x4\n\tEPOLLPRI                             = 0x2\n\tEPOLLRDBAND                          = 0x80\n\tEPOLLRDHUP                           = 0x2000\n\tEPOLLRDNORM                          = 0x40\n\tEPOLLWAKEUP                          = 0x20000000\n\tEPOLLWRBAND                          = 0x200\n\tEPOLLWRNORM                          = 0x100\n\tEPOLL_CLOEXEC                        = 0x80000\n\tEPOLL_CTL_ADD                        = 0x1\n\tEPOLL_CTL_DEL                        = 0x2\n\tEPOLL_CTL_MOD                        = 0x3\n\tETH_P_1588                           = 0x88f7\n\tETH_P_8021AD                         = 0x88a8\n\tETH_P_8021AH                         = 0x88e7\n\tETH_P_8021Q                          = 0x8100\n\tETH_P_80221                          = 0x8917\n\tETH_P_802_2                          = 0x4\n\tETH_P_802_3                          = 0x1\n\tETH_P_802_3_MIN                      = 0x600\n\tETH_P_802_EX1                        = 0x88b5\n\tETH_P_AARP                           = 0x80f3\n\tETH_P_AF_IUCV                        = 0xfbfb\n\tETH_P_ALL                            = 0x3\n\tETH_P_AOE                            = 0x88a2\n\tETH_P_ARCNET                         = 0x1a\n\tETH_P_ARP                            = 0x806\n\tETH_P_ATALK                          = 0x809b\n\tETH_P_ATMFATE                        = 0x8884\n\tETH_P_ATMMPOA                        = 0x884c\n\tETH_P_AX25                           = 0x2\n\tETH_P_BATMAN                         = 0x4305\n\tETH_P_BPQ                            = 0x8ff\n\tETH_P_CAIF                           = 0xf7\n\tETH_P_CAN                            = 0xc\n\tETH_P_CANFD                          = 0xd\n\tETH_P_CONTROL                        = 0x16\n\tETH_P_CUST                           = 0x6006\n\tETH_P_DDCMP                          = 0x6\n\tETH_P_DEC                            = 0x6000\n\tETH_P_DIAG                           = 0x6005\n\tETH_P_DNA_DL                         = 0x6001\n\tETH_P_DNA_RC                         = 0x6002\n\tETH_P_DNA_RT                         = 0x6003\n\tETH_P_DSA                            = 0x1b\n\tETH_P_ECONET                         = 0x18\n\tETH_P_EDSA                           = 0xdada\n\tETH_P_ERSPAN                         = 0x88be\n\tETH_P_ERSPAN2                        = 0x22eb\n\tETH_P_FCOE                           = 0x8906\n\tETH_P_FIP                            = 0x8914\n\tETH_P_HDLC                           = 0x19\n\tETH_P_HSR                            = 0x892f\n\tETH_P_IBOE                           = 0x8915\n\tETH_P_IEEE802154                     = 0xf6\n\tETH_P_IEEEPUP                        = 0xa00\n\tETH_P_IEEEPUPAT                      = 0xa01\n\tETH_P_IFE                            = 0xed3e\n\tETH_P_IP                             = 0x800\n\tETH_P_IPV6                           = 0x86dd\n\tETH_P_IPX                            = 0x8137\n\tETH_P_IRDA                           = 0x17\n\tETH_P_LAT                            = 0x6004\n\tETH_P_LINK_CTL                       = 0x886c\n\tETH_P_LOCALTALK                      = 0x9\n\tETH_P_LOOP                           = 0x60\n\tETH_P_LOOPBACK                       = 0x9000\n\tETH_P_MACSEC                         = 0x88e5\n\tETH_P_MAP                            = 0xf9\n\tETH_P_MOBITEX                        = 0x15\n\tETH_P_MPLS_MC                        = 0x8848\n\tETH_P_MPLS_UC                        = 0x8847\n\tETH_P_MVRP                           = 0x88f5\n\tETH_P_NCSI                           = 0x88f8\n\tETH_P_NSH                            = 0x894f\n\tETH_P_PAE                            = 0x888e\n\tETH_P_PAUSE                          = 0x8808\n\tETH_P_PHONET                         = 0xf5\n\tETH_P_PPPTALK                        = 0x10\n\tETH_P_PPP_DISC                       = 0x8863\n\tETH_P_PPP_MP                         = 0x8\n\tETH_P_PPP_SES                        = 0x8864\n\tETH_P_PREAUTH                        = 0x88c7\n\tETH_P_PRP                            = 0x88fb\n\tETH_P_PUP                            = 0x200\n\tETH_P_PUPAT                          = 0x201\n\tETH_P_QINQ1                          = 0x9100\n\tETH_P_QINQ2                          = 0x9200\n\tETH_P_QINQ3                          = 0x9300\n\tETH_P_RARP                           = 0x8035\n\tETH_P_SCA                            = 0x6007\n\tETH_P_SLOW                           = 0x8809\n\tETH_P_SNAP                           = 0x5\n\tETH_P_TDLS                           = 0x890d\n\tETH_P_TEB                            = 0x6558\n\tETH_P_TIPC                           = 0x88ca\n\tETH_P_TRAILER                        = 0x1c\n\tETH_P_TR_802_2                       = 0x11\n\tETH_P_TSN                            = 0x22f0\n\tETH_P_WAN_PPP                        = 0x7\n\tETH_P_WCCP                           = 0x883e\n\tETH_P_X25                            = 0x805\n\tETH_P_XDSA                           = 0xf8\n\tEXABYTE_ENABLE_NEST                  = 0xf0\n\tEXT2_SUPER_MAGIC                     = 0xef53\n\tEXT3_SUPER_MAGIC                     = 0xef53\n\tEXT4_SUPER_MAGIC                     = 0xef53\n\tEXTA                                 = 0xe\n\tEXTB                                 = 0xf\n\tEXTPROC                              = 0x10000\n\tF2FS_SUPER_MAGIC                     = 0xf2f52010\n\tFALLOC_FL_COLLAPSE_RANGE             = 0x8\n\tFALLOC_FL_INSERT_RANGE               = 0x20\n\tFALLOC_FL_KEEP_SIZE                  = 0x1\n\tFALLOC_FL_NO_HIDE_STALE              = 0x4\n\tFALLOC_FL_PUNCH_HOLE                 = 0x2\n\tFALLOC_FL_UNSHARE_RANGE              = 0x40\n\tFALLOC_FL_ZERO_RANGE                 = 0x10\n\tFANOTIFY_METADATA_VERSION            = 0x3\n\tFAN_ACCESS                           = 0x1\n\tFAN_ACCESS_PERM                      = 0x20000\n\tFAN_ALLOW                            = 0x1\n\tFAN_ALL_CLASS_BITS                   = 0xc\n\tFAN_ALL_EVENTS                       = 0x3b\n\tFAN_ALL_INIT_FLAGS                   = 0x3f\n\tFAN_ALL_MARK_FLAGS                   = 0xff\n\tFAN_ALL_OUTGOING_EVENTS              = 0x3403b\n\tFAN_ALL_PERM_EVENTS                  = 0x30000\n\tFAN_ATTRIB                           = 0x4\n\tFAN_AUDIT                            = 0x10\n\tFAN_CLASS_CONTENT                    = 0x4\n\tFAN_CLASS_NOTIF                      = 0x0\n\tFAN_CLASS_PRE_CONTENT                = 0x8\n\tFAN_CLOEXEC                          = 0x1\n\tFAN_CLOSE                            = 0x18\n\tFAN_CLOSE_NOWRITE                    = 0x10\n\tFAN_CLOSE_WRITE                      = 0x8\n\tFAN_CREATE                           = 0x100\n\tFAN_DELETE                           = 0x200\n\tFAN_DELETE_SELF                      = 0x400\n\tFAN_DENY                             = 0x2\n\tFAN_ENABLE_AUDIT                     = 0x40\n\tFAN_EVENT_INFO_TYPE_FID              = 0x1\n\tFAN_EVENT_METADATA_LEN               = 0x18\n\tFAN_EVENT_ON_CHILD                   = 0x8000000\n\tFAN_MARK_ADD                         = 0x1\n\tFAN_MARK_DONT_FOLLOW                 = 0x4\n\tFAN_MARK_FILESYSTEM                  = 0x100\n\tFAN_MARK_FLUSH                       = 0x80\n\tFAN_MARK_IGNORED_MASK                = 0x20\n\tFAN_MARK_IGNORED_SURV_MODIFY         = 0x40\n\tFAN_MARK_INODE                       = 0x0\n\tFAN_MARK_MOUNT                       = 0x10\n\tFAN_MARK_ONLYDIR                     = 0x8\n\tFAN_MARK_REMOVE                      = 0x2\n\tFAN_MODIFY                           = 0x2\n\tFAN_MOVE                             = 0xc0\n\tFAN_MOVED_FROM                       = 0x40\n\tFAN_MOVED_TO                         = 0x80\n\tFAN_MOVE_SELF                        = 0x800\n\tFAN_NOFD                             = -0x1\n\tFAN_NONBLOCK                         = 0x2\n\tFAN_ONDIR                            = 0x40000000\n\tFAN_OPEN                             = 0x20\n\tFAN_OPEN_EXEC                        = 0x1000\n\tFAN_OPEN_EXEC_PERM                   = 0x40000\n\tFAN_OPEN_PERM                        = 0x10000\n\tFAN_Q_OVERFLOW                       = 0x4000\n\tFAN_REPORT_FID                       = 0x200\n\tFAN_REPORT_TID                       = 0x100\n\tFAN_UNLIMITED_MARKS                  = 0x20\n\tFAN_UNLIMITED_QUEUE                  = 0x10\n\tFD_CLOEXEC                           = 0x1\n\tFD_SETSIZE                           = 0x400\n\tFF0                                  = 0x0\n\tFF1                                  = 0x8000\n\tFFDLY                                = 0x8000\n\tFLUSHO                               = 0x1000\n\tFS_ENCRYPTION_MODE_ADIANTUM          = 0x9\n\tFS_ENCRYPTION_MODE_AES_128_CBC       = 0x5\n\tFS_ENCRYPTION_MODE_AES_128_CTS       = 0x6\n\tFS_ENCRYPTION_MODE_AES_256_CBC       = 0x3\n\tFS_ENCRYPTION_MODE_AES_256_CTS       = 0x4\n\tFS_ENCRYPTION_MODE_AES_256_GCM       = 0x2\n\tFS_ENCRYPTION_MODE_AES_256_XTS       = 0x1\n\tFS_ENCRYPTION_MODE_INVALID           = 0x0\n\tFS_ENCRYPTION_MODE_SPECK128_256_CTS  = 0x8\n\tFS_ENCRYPTION_MODE_SPECK128_256_XTS  = 0x7\n\tFS_IOC_GET_ENCRYPTION_POLICY         = 0x400c6615\n\tFS_IOC_GET_ENCRYPTION_PWSALT         = 0x40106614\n\tFS_IOC_SET_ENCRYPTION_POLICY         = 0x800c6613\n\tFS_KEY_DESCRIPTOR_SIZE               = 0x8\n\tFS_KEY_DESC_PREFIX                   = \"fscrypt:\"\n\tFS_KEY_DESC_PREFIX_SIZE              = 0x8\n\tFS_MAX_KEY_SIZE                      = 0x40\n\tFS_POLICY_FLAGS_PAD_16               = 0x2\n\tFS_POLICY_FLAGS_PAD_32               = 0x3\n\tFS_POLICY_FLAGS_PAD_4                = 0x0\n\tFS_POLICY_FLAGS_PAD_8                = 0x1\n\tFS_POLICY_FLAGS_PAD_MASK             = 0x3\n\tFS_POLICY_FLAGS_VALID                = 0x7\n\tFUTEXFS_SUPER_MAGIC                  = 0xbad1dea\n\tF_ADD_SEALS                          = 0x409\n\tF_DUPFD                              = 0x0\n\tF_DUPFD_CLOEXEC                      = 0x406\n\tF_EXLCK                              = 0x4\n\tF_GETFD                              = 0x1\n\tF_GETFL                              = 0x3\n\tF_GETLEASE                           = 0x401\n\tF_GETLK                              = 0xc\n\tF_GETLK64                            = 0xc\n\tF_GETOWN                             = 0x9\n\tF_GETOWN_EX                          = 0x10\n\tF_GETPIPE_SZ                         = 0x408\n\tF_GETSIG                             = 0xb\n\tF_GET_FILE_RW_HINT                   = 0x40d\n\tF_GET_RW_HINT                        = 0x40b\n\tF_GET_SEALS                          = 0x40a\n\tF_LOCK                               = 0x1\n\tF_NOTIFY                             = 0x402\n\tF_OFD_GETLK                          = 0x24\n\tF_OFD_SETLK                          = 0x25\n\tF_OFD_SETLKW                         = 0x26\n\tF_OK                                 = 0x0\n\tF_RDLCK                              = 0x0\n\tF_SEAL_GROW                          = 0x4\n\tF_SEAL_SEAL                          = 0x1\n\tF_SEAL_SHRINK                        = 0x2\n\tF_SEAL_WRITE                         = 0x8\n\tF_SETFD                              = 0x2\n\tF_SETFL                              = 0x4\n\tF_SETLEASE                           = 0x400\n\tF_SETLK                              = 0xd\n\tF_SETLK64                            = 0xd\n\tF_SETLKW                             = 0xe\n\tF_SETLKW64                           = 0xe\n\tF_SETOWN                             = 0x8\n\tF_SETOWN_EX                          = 0xf\n\tF_SETPIPE_SZ                         = 0x407\n\tF_SETSIG                             = 0xa\n\tF_SET_FILE_RW_HINT                   = 0x40e\n\tF_SET_RW_HINT                        = 0x40c\n\tF_SHLCK                              = 0x8\n\tF_TEST                               = 0x3\n\tF_TLOCK                              = 0x2\n\tF_ULOCK                              = 0x0\n\tF_UNLCK                              = 0x2\n\tF_WRLCK                              = 0x1\n\tGENL_ADMIN_PERM                      = 0x1\n\tGENL_CMD_CAP_DO                      = 0x2\n\tGENL_CMD_CAP_DUMP                    = 0x4\n\tGENL_CMD_CAP_HASPOL                  = 0x8\n\tGENL_HDRLEN                          = 0x4\n\tGENL_ID_CTRL                         = 0x10\n\tGENL_ID_PMCRAID                      = 0x12\n\tGENL_ID_VFS_DQUOT                    = 0x11\n\tGENL_MAX_ID                          = 0x3ff\n\tGENL_MIN_ID                          = 0x10\n\tGENL_NAMSIZ                          = 0x10\n\tGENL_START_ALLOC                     = 0x13\n\tGENL_UNS_ADMIN_PERM                  = 0x10\n\tGRND_NONBLOCK                        = 0x1\n\tGRND_RANDOM                          = 0x2\n\tHDIO_DRIVE_CMD                       = 0x31f\n\tHDIO_DRIVE_CMD_AEB                   = 0x31e\n\tHDIO_DRIVE_CMD_HDR_SIZE              = 0x4\n\tHDIO_DRIVE_HOB_HDR_SIZE              = 0x8\n\tHDIO_DRIVE_RESET                     = 0x31c\n\tHDIO_DRIVE_TASK                      = 0x31e\n\tHDIO_DRIVE_TASKFILE                  = 0x31d\n\tHDIO_DRIVE_TASK_HDR_SIZE             = 0x8\n\tHDIO_GETGEO                          = 0x301\n\tHDIO_GET_32BIT                       = 0x309\n\tHDIO_GET_ACOUSTIC                    = 0x30f\n\tHDIO_GET_ADDRESS                     = 0x310\n\tHDIO_GET_BUSSTATE                    = 0x31a\n\tHDIO_GET_DMA                         = 0x30b\n\tHDIO_GET_IDENTITY                    = 0x30d\n\tHDIO_GET_KEEPSETTINGS                = 0x308\n\tHDIO_GET_MULTCOUNT                   = 0x304\n\tHDIO_GET_NICE                        = 0x30c\n\tHDIO_GET_NOWERR                      = 0x30a\n\tHDIO_GET_QDMA                        = 0x305\n\tHDIO_GET_UNMASKINTR                  = 0x302\n\tHDIO_GET_WCACHE                      = 0x30e\n\tHDIO_OBSOLETE_IDENTITY               = 0x307\n\tHDIO_SCAN_HWIF                       = 0x328\n\tHDIO_SET_32BIT                       = 0x324\n\tHDIO_SET_ACOUSTIC                    = 0x32c\n\tHDIO_SET_ADDRESS                     = 0x32f\n\tHDIO_SET_BUSSTATE                    = 0x32d\n\tHDIO_SET_DMA                         = 0x326\n\tHDIO_SET_KEEPSETTINGS                = 0x323\n\tHDIO_SET_MULTCOUNT                   = 0x321\n\tHDIO_SET_NICE                        = 0x329\n\tHDIO_SET_NOWERR                      = 0x325\n\tHDIO_SET_PIO_MODE                    = 0x327\n\tHDIO_SET_QDMA                        = 0x32e\n\tHDIO_SET_UNMASKINTR                  = 0x322\n\tHDIO_SET_WCACHE                      = 0x32b\n\tHDIO_SET_XFER                        = 0x306\n\tHDIO_TRISTATE_HWIF                   = 0x31b\n\tHDIO_UNREGISTER_HWIF                 = 0x32a\n\tHOSTFS_SUPER_MAGIC                   = 0xc0ffee\n\tHPFS_SUPER_MAGIC                     = 0xf995e849\n\tHUGETLBFS_MAGIC                      = 0x958458f6\n\tHUPCL                                = 0x400\n\tIBSHIFT                              = 0x10\n\tICANON                               = 0x2\n\tICMPV6_FILTER                        = 0x1\n\tICRNL                                = 0x100\n\tIEXTEN                               = 0x8000\n\tIFA_F_DADFAILED                      = 0x8\n\tIFA_F_DEPRECATED                     = 0x20\n\tIFA_F_HOMEADDRESS                    = 0x10\n\tIFA_F_MANAGETEMPADDR                 = 0x100\n\tIFA_F_MCAUTOJOIN                     = 0x400\n\tIFA_F_NODAD                          = 0x2\n\tIFA_F_NOPREFIXROUTE                  = 0x200\n\tIFA_F_OPTIMISTIC                     = 0x4\n\tIFA_F_PERMANENT                      = 0x80\n\tIFA_F_SECONDARY                      = 0x1\n\tIFA_F_STABLE_PRIVACY                 = 0x800\n\tIFA_F_TEMPORARY                      = 0x1\n\tIFA_F_TENTATIVE                      = 0x40\n\tIFA_MAX                              = 0xa\n\tIFF_ALLMULTI                         = 0x200\n\tIFF_ATTACH_QUEUE                     = 0x200\n\tIFF_AUTOMEDIA                        = 0x4000\n\tIFF_BROADCAST                        = 0x2\n\tIFF_DEBUG                            = 0x4\n\tIFF_DETACH_QUEUE                     = 0x400\n\tIFF_DORMANT                          = 0x20000\n\tIFF_DYNAMIC                          = 0x8000\n\tIFF_ECHO                             = 0x40000\n\tIFF_LOOPBACK                         = 0x8\n\tIFF_LOWER_UP                         = 0x10000\n\tIFF_MASTER                           = 0x400\n\tIFF_MULTICAST                        = 0x1000\n\tIFF_MULTI_QUEUE                      = 0x100\n\tIFF_NAPI                             = 0x10\n\tIFF_NAPI_FRAGS                       = 0x20\n\tIFF_NOARP                            = 0x80\n\tIFF_NOFILTER                         = 0x1000\n\tIFF_NOTRAILERS                       = 0x20\n\tIFF_NO_PI                            = 0x1000\n\tIFF_ONE_QUEUE                        = 0x2000\n\tIFF_PERSIST                          = 0x800\n\tIFF_POINTOPOINT                      = 0x10\n\tIFF_PORTSEL                          = 0x2000\n\tIFF_PROMISC                          = 0x100\n\tIFF_RUNNING                          = 0x40\n\tIFF_SLAVE                            = 0x800\n\tIFF_TAP                              = 0x2\n\tIFF_TUN                              = 0x1\n\tIFF_TUN_EXCL                         = 0x8000\n\tIFF_UP                               = 0x1\n\tIFF_VNET_HDR                         = 0x4000\n\tIFF_VOLATILE                         = 0x70c5a\n\tIFNAMSIZ                             = 0x10\n\tIGNBRK                               = 0x1\n\tIGNCR                                = 0x80\n\tIGNPAR                               = 0x4\n\tIMAXBEL                              = 0x2000\n\tINLCR                                = 0x40\n\tINPCK                                = 0x10\n\tIN_ACCESS                            = 0x1\n\tIN_ALL_EVENTS                        = 0xfff\n\tIN_ATTRIB                            = 0x4\n\tIN_CLASSA_HOST                       = 0xffffff\n\tIN_CLASSA_MAX                        = 0x80\n\tIN_CLASSA_NET                        = 0xff000000\n\tIN_CLASSA_NSHIFT                     = 0x18\n\tIN_CLASSB_HOST                       = 0xffff\n\tIN_CLASSB_MAX                        = 0x10000\n\tIN_CLASSB_NET                        = 0xffff0000\n\tIN_CLASSB_NSHIFT                     = 0x10\n\tIN_CLASSC_HOST                       = 0xff\n\tIN_CLASSC_NET                        = 0xffffff00\n\tIN_CLASSC_NSHIFT                     = 0x8\n\tIN_CLOEXEC                           = 0x80000\n\tIN_CLOSE                             = 0x18\n\tIN_CLOSE_NOWRITE                     = 0x10\n\tIN_CLOSE_WRITE                       = 0x8\n\tIN_CREATE                            = 0x100\n\tIN_DELETE                            = 0x200\n\tIN_DELETE_SELF                       = 0x400\n\tIN_DONT_FOLLOW                       = 0x2000000\n\tIN_EXCL_UNLINK                       = 0x4000000\n\tIN_IGNORED                           = 0x8000\n\tIN_ISDIR                             = 0x40000000\n\tIN_LOOPBACKNET                       = 0x7f\n\tIN_MASK_ADD                          = 0x20000000\n\tIN_MASK_CREATE                       = 0x10000000\n\tIN_MODIFY                            = 0x2\n\tIN_MOVE                              = 0xc0\n\tIN_MOVED_FROM                        = 0x40\n\tIN_MOVED_TO                          = 0x80\n\tIN_MOVE_SELF                         = 0x800\n\tIN_NONBLOCK                          = 0x800\n\tIN_ONESHOT                           = 0x80000000\n\tIN_ONLYDIR                           = 0x1000000\n\tIN_OPEN                              = 0x20\n\tIN_Q_OVERFLOW                        = 0x4000\n\tIN_UNMOUNT                           = 0x2000\n\tIOCTL_VM_SOCKETS_GET_LOCAL_CID       = 0x7b9\n\tIPPROTO_AH                           = 0x33\n\tIPPROTO_BEETPH                       = 0x5e\n\tIPPROTO_COMP                         = 0x6c\n\tIPPROTO_DCCP                         = 0x21\n\tIPPROTO_DSTOPTS                      = 0x3c\n\tIPPROTO_EGP                          = 0x8\n\tIPPROTO_ENCAP                        = 0x62\n\tIPPROTO_ESP                          = 0x32\n\tIPPROTO_FRAGMENT                     = 0x2c\n\tIPPROTO_GRE                          = 0x2f\n\tIPPROTO_HOPOPTS                      = 0x0\n\tIPPROTO_ICMP                         = 0x1\n\tIPPROTO_ICMPV6                       = 0x3a\n\tIPPROTO_IDP                          = 0x16\n\tIPPROTO_IGMP                         = 0x2\n\tIPPROTO_IP                           = 0x0\n\tIPPROTO_IPIP                         = 0x4\n\tIPPROTO_IPV6                         = 0x29\n\tIPPROTO_MH                           = 0x87\n\tIPPROTO_MPLS                         = 0x89\n\tIPPROTO_MTP                          = 0x5c\n\tIPPROTO_NONE                         = 0x3b\n\tIPPROTO_PIM                          = 0x67\n\tIPPROTO_PUP                          = 0xc\n\tIPPROTO_RAW                          = 0xff\n\tIPPROTO_ROUTING                      = 0x2b\n\tIPPROTO_RSVP                         = 0x2e\n\tIPPROTO_SCTP                         = 0x84\n\tIPPROTO_TCP                          = 0x6\n\tIPPROTO_TP                           = 0x1d\n\tIPPROTO_UDP                          = 0x11\n\tIPPROTO_UDPLITE                      = 0x88\n\tIPV6_2292DSTOPTS                     = 0x4\n\tIPV6_2292HOPLIMIT                    = 0x8\n\tIPV6_2292HOPOPTS                     = 0x3\n\tIPV6_2292PKTINFO                     = 0x2\n\tIPV6_2292PKTOPTIONS                  = 0x6\n\tIPV6_2292RTHDR                       = 0x5\n\tIPV6_ADDRFORM                        = 0x1\n\tIPV6_ADDR_PREFERENCES                = 0x48\n\tIPV6_ADD_MEMBERSHIP                  = 0x14\n\tIPV6_AUTHHDR                         = 0xa\n\tIPV6_AUTOFLOWLABEL                   = 0x46\n\tIPV6_CHECKSUM                        = 0x7\n\tIPV6_DONTFRAG                        = 0x3e\n\tIPV6_DROP_MEMBERSHIP                 = 0x15\n\tIPV6_DSTOPTS                         = 0x3b\n\tIPV6_FREEBIND                        = 0x4e\n\tIPV6_HDRINCL                         = 0x24\n\tIPV6_HOPLIMIT                        = 0x34\n\tIPV6_HOPOPTS                         = 0x36\n\tIPV6_IPSEC_POLICY                    = 0x22\n\tIPV6_JOIN_ANYCAST                    = 0x1b\n\tIPV6_JOIN_GROUP                      = 0x14\n\tIPV6_LEAVE_ANYCAST                   = 0x1c\n\tIPV6_LEAVE_GROUP                     = 0x15\n\tIPV6_MINHOPCOUNT                     = 0x49\n\tIPV6_MTU                             = 0x18\n\tIPV6_MTU_DISCOVER                    = 0x17\n\tIPV6_MULTICAST_ALL                   = 0x1d\n\tIPV6_MULTICAST_HOPS                  = 0x12\n\tIPV6_MULTICAST_IF                    = 0x11\n\tIPV6_MULTICAST_LOOP                  = 0x13\n\tIPV6_NEXTHOP                         = 0x9\n\tIPV6_ORIGDSTADDR                     = 0x4a\n\tIPV6_PATHMTU                         = 0x3d\n\tIPV6_PKTINFO                         = 0x32\n\tIPV6_PMTUDISC_DO                     = 0x2\n\tIPV6_PMTUDISC_DONT                   = 0x0\n\tIPV6_PMTUDISC_INTERFACE              = 0x4\n\tIPV6_PMTUDISC_OMIT                   = 0x5\n\tIPV6_PMTUDISC_PROBE                  = 0x3\n\tIPV6_PMTUDISC_WANT                   = 0x1\n\tIPV6_RECVDSTOPTS                     = 0x3a\n\tIPV6_RECVERR                         = 0x19\n\tIPV6_RECVFRAGSIZE                    = 0x4d\n\tIPV6_RECVHOPLIMIT                    = 0x33\n\tIPV6_RECVHOPOPTS                     = 0x35\n\tIPV6_RECVORIGDSTADDR                 = 0x4a\n\tIPV6_RECVPATHMTU                     = 0x3c\n\tIPV6_RECVPKTINFO                     = 0x31\n\tIPV6_RECVRTHDR                       = 0x38\n\tIPV6_RECVTCLASS                      = 0x42\n\tIPV6_ROUTER_ALERT                    = 0x16\n\tIPV6_RTHDR                           = 0x39\n\tIPV6_RTHDRDSTOPTS                    = 0x37\n\tIPV6_RTHDR_LOOSE                     = 0x0\n\tIPV6_RTHDR_STRICT                    = 0x1\n\tIPV6_RTHDR_TYPE_0                    = 0x0\n\tIPV6_RXDSTOPTS                       = 0x3b\n\tIPV6_RXHOPOPTS                       = 0x36\n\tIPV6_TCLASS                          = 0x43\n\tIPV6_TRANSPARENT                     = 0x4b\n\tIPV6_UNICAST_HOPS                    = 0x10\n\tIPV6_UNICAST_IF                      = 0x4c\n\tIPV6_V6ONLY                          = 0x1a\n\tIPV6_XFRM_POLICY                     = 0x23\n\tIP_ADD_MEMBERSHIP                    = 0x23\n\tIP_ADD_SOURCE_MEMBERSHIP             = 0x27\n\tIP_BIND_ADDRESS_NO_PORT              = 0x18\n\tIP_BLOCK_SOURCE                      = 0x26\n\tIP_CHECKSUM                          = 0x17\n\tIP_DEFAULT_MULTICAST_LOOP            = 0x1\n\tIP_DEFAULT_MULTICAST_TTL             = 0x1\n\tIP_DF                                = 0x4000\n\tIP_DROP_MEMBERSHIP                   = 0x24\n\tIP_DROP_SOURCE_MEMBERSHIP            = 0x28\n\tIP_FREEBIND                          = 0xf\n\tIP_HDRINCL                           = 0x3\n\tIP_IPSEC_POLICY                      = 0x10\n\tIP_MAXPACKET                         = 0xffff\n\tIP_MAX_MEMBERSHIPS                   = 0x14\n\tIP_MF                                = 0x2000\n\tIP_MINTTL                            = 0x15\n\tIP_MSFILTER                          = 0x29\n\tIP_MSS                               = 0x240\n\tIP_MTU                               = 0xe\n\tIP_MTU_DISCOVER                      = 0xa\n\tIP_MULTICAST_ALL                     = 0x31\n\tIP_MULTICAST_IF                      = 0x20\n\tIP_MULTICAST_LOOP                    = 0x22\n\tIP_MULTICAST_TTL                     = 0x21\n\tIP_NODEFRAG                          = 0x16\n\tIP_OFFMASK                           = 0x1fff\n\tIP_OPTIONS                           = 0x4\n\tIP_ORIGDSTADDR                       = 0x14\n\tIP_PASSSEC                           = 0x12\n\tIP_PKTINFO                           = 0x8\n\tIP_PKTOPTIONS                        = 0x9\n\tIP_PMTUDISC                          = 0xa\n\tIP_PMTUDISC_DO                       = 0x2\n\tIP_PMTUDISC_DONT                     = 0x0\n\tIP_PMTUDISC_INTERFACE                = 0x4\n\tIP_PMTUDISC_OMIT                     = 0x5\n\tIP_PMTUDISC_PROBE                    = 0x3\n\tIP_PMTUDISC_WANT                     = 0x1\n\tIP_RECVERR                           = 0xb\n\tIP_RECVFRAGSIZE                      = 0x19\n\tIP_RECVOPTS                          = 0x6\n\tIP_RECVORIGDSTADDR                   = 0x14\n\tIP_RECVRETOPTS                       = 0x7\n\tIP_RECVTOS                           = 0xd\n\tIP_RECVTTL                           = 0xc\n\tIP_RETOPTS                           = 0x7\n\tIP_RF                                = 0x8000\n\tIP_ROUTER_ALERT                      = 0x5\n\tIP_TOS                               = 0x1\n\tIP_TRANSPARENT                       = 0x13\n\tIP_TTL                               = 0x2\n\tIP_UNBLOCK_SOURCE                    = 0x25\n\tIP_UNICAST_IF                        = 0x32\n\tIP_XFRM_POLICY                       = 0x11\n\tISIG                                 = 0x1\n\tISOFS_SUPER_MAGIC                    = 0x9660\n\tISTRIP                               = 0x20\n\tIUCLC                                = 0x200\n\tIUTF8                                = 0x4000\n\tIXANY                                = 0x800\n\tIXOFF                                = 0x1000\n\tIXON                                 = 0x400\n\tJFFS2_SUPER_MAGIC                    = 0x72b6\n\tKEXEC_ARCH_386                       = 0x30000\n\tKEXEC_ARCH_68K                       = 0x40000\n\tKEXEC_ARCH_AARCH64                   = 0xb70000\n\tKEXEC_ARCH_ARM                       = 0x280000\n\tKEXEC_ARCH_DEFAULT                   = 0x0\n\tKEXEC_ARCH_IA_64                     = 0x320000\n\tKEXEC_ARCH_MASK                      = 0xffff0000\n\tKEXEC_ARCH_MIPS                      = 0x80000\n\tKEXEC_ARCH_MIPS_LE                   = 0xa0000\n\tKEXEC_ARCH_PPC                       = 0x140000\n\tKEXEC_ARCH_PPC64                     = 0x150000\n\tKEXEC_ARCH_S390                      = 0x160000\n\tKEXEC_ARCH_SH                        = 0x2a0000\n\tKEXEC_ARCH_X86_64                    = 0x3e0000\n\tKEXEC_FILE_NO_INITRAMFS              = 0x4\n\tKEXEC_FILE_ON_CRASH                  = 0x2\n\tKEXEC_FILE_UNLOAD                    = 0x1\n\tKEXEC_ON_CRASH                       = 0x1\n\tKEXEC_PRESERVE_CONTEXT               = 0x2\n\tKEXEC_SEGMENT_MAX                    = 0x10\n\tKEYCTL_ASSUME_AUTHORITY              = 0x10\n\tKEYCTL_CHOWN                         = 0x4\n\tKEYCTL_CLEAR                         = 0x7\n\tKEYCTL_DESCRIBE                      = 0x6\n\tKEYCTL_DH_COMPUTE                    = 0x17\n\tKEYCTL_GET_KEYRING_ID                = 0x0\n\tKEYCTL_GET_PERSISTENT                = 0x16\n\tKEYCTL_GET_SECURITY                  = 0x11\n\tKEYCTL_INSTANTIATE                   = 0xc\n\tKEYCTL_INSTANTIATE_IOV               = 0x14\n\tKEYCTL_INVALIDATE                    = 0x15\n\tKEYCTL_JOIN_SESSION_KEYRING          = 0x1\n\tKEYCTL_LINK                          = 0x8\n\tKEYCTL_NEGATE                        = 0xd\n\tKEYCTL_PKEY_DECRYPT                  = 0x1a\n\tKEYCTL_PKEY_ENCRYPT                  = 0x19\n\tKEYCTL_PKEY_QUERY                    = 0x18\n\tKEYCTL_PKEY_SIGN                     = 0x1b\n\tKEYCTL_PKEY_VERIFY                   = 0x1c\n\tKEYCTL_READ                          = 0xb\n\tKEYCTL_REJECT                        = 0x13\n\tKEYCTL_RESTRICT_KEYRING              = 0x1d\n\tKEYCTL_REVOKE                        = 0x3\n\tKEYCTL_SEARCH                        = 0xa\n\tKEYCTL_SESSION_TO_PARENT             = 0x12\n\tKEYCTL_SETPERM                       = 0x5\n\tKEYCTL_SET_REQKEY_KEYRING            = 0xe\n\tKEYCTL_SET_TIMEOUT                   = 0xf\n\tKEYCTL_SUPPORTS_DECRYPT              = 0x2\n\tKEYCTL_SUPPORTS_ENCRYPT              = 0x1\n\tKEYCTL_SUPPORTS_SIGN                 = 0x4\n\tKEYCTL_SUPPORTS_VERIFY               = 0x8\n\tKEYCTL_UNLINK                        = 0x9\n\tKEYCTL_UPDATE                        = 0x2\n\tKEY_REQKEY_DEFL_DEFAULT              = 0x0\n\tKEY_REQKEY_DEFL_GROUP_KEYRING        = 0x6\n\tKEY_REQKEY_DEFL_NO_CHANGE            = -0x1\n\tKEY_REQKEY_DEFL_PROCESS_KEYRING      = 0x2\n\tKEY_REQKEY_DEFL_REQUESTOR_KEYRING    = 0x7\n\tKEY_REQKEY_DEFL_SESSION_KEYRING      = 0x3\n\tKEY_REQKEY_DEFL_THREAD_KEYRING       = 0x1\n\tKEY_REQKEY_DEFL_USER_KEYRING         = 0x4\n\tKEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5\n\tKEY_SPEC_GROUP_KEYRING               = -0x6\n\tKEY_SPEC_PROCESS_KEYRING             = -0x2\n\tKEY_SPEC_REQKEY_AUTH_KEY             = -0x7\n\tKEY_SPEC_REQUESTOR_KEYRING           = -0x8\n\tKEY_SPEC_SESSION_KEYRING             = -0x3\n\tKEY_SPEC_THREAD_KEYRING              = -0x1\n\tKEY_SPEC_USER_KEYRING                = -0x4\n\tKEY_SPEC_USER_SESSION_KEYRING        = -0x5\n\tLINUX_REBOOT_CMD_CAD_OFF             = 0x0\n\tLINUX_REBOOT_CMD_CAD_ON              = 0x89abcdef\n\tLINUX_REBOOT_CMD_HALT                = 0xcdef0123\n\tLINUX_REBOOT_CMD_KEXEC               = 0x45584543\n\tLINUX_REBOOT_CMD_POWER_OFF           = 0x4321fedc\n\tLINUX_REBOOT_CMD_RESTART             = 0x1234567\n\tLINUX_REBOOT_CMD_RESTART2            = 0xa1b2c3d4\n\tLINUX_REBOOT_CMD_SW_SUSPEND          = 0xd000fce2\n\tLINUX_REBOOT_MAGIC1                  = 0xfee1dead\n\tLINUX_REBOOT_MAGIC2                  = 0x28121969\n\tLOCK_EX                              = 0x2\n\tLOCK_NB                              = 0x4\n\tLOCK_SH                              = 0x1\n\tLOCK_UN                              = 0x8\n\tMADV_DODUMP                          = 0x11\n\tMADV_DOFORK                          = 0xb\n\tMADV_DONTDUMP                        = 0x10\n\tMADV_DONTFORK                        = 0xa\n\tMADV_DONTNEED                        = 0x4\n\tMADV_FREE                            = 0x8\n\tMADV_HUGEPAGE                        = 0xe\n\tMADV_HWPOISON                        = 0x64\n\tMADV_KEEPONFORK                      = 0x13\n\tMADV_MERGEABLE                       = 0xc\n\tMADV_NOHUGEPAGE                      = 0xf\n\tMADV_NORMAL                          = 0x0\n\tMADV_RANDOM                          = 0x1\n\tMADV_REMOVE                          = 0x9\n\tMADV_SEQUENTIAL                      = 0x2\n\tMADV_UNMERGEABLE                     = 0xd\n\tMADV_WILLNEED                        = 0x3\n\tMADV_WIPEONFORK                      = 0x12\n\tMAP_ANON                             = 0x20\n\tMAP_ANONYMOUS                        = 0x20\n\tMAP_DENYWRITE                        = 0x800\n\tMAP_EXECUTABLE                       = 0x1000\n\tMAP_FILE                             = 0x0\n\tMAP_FIXED                            = 0x10\n\tMAP_FIXED_NOREPLACE                  = 0x100000\n\tMAP_GROWSDOWN                        = 0x100\n\tMAP_HUGETLB                          = 0x40000\n\tMAP_HUGE_MASK                        = 0x3f\n\tMAP_HUGE_SHIFT                       = 0x1a\n\tMAP_LOCKED                           = 0x2000\n\tMAP_NONBLOCK                         = 0x10000\n\tMAP_NORESERVE                        = 0x4000\n\tMAP_POPULATE                         = 0x8000\n\tMAP_PRIVATE                          = 0x2\n\tMAP_SHARED                           = 0x1\n\tMAP_SHARED_VALIDATE                  = 0x3\n\tMAP_STACK                            = 0x20000\n\tMAP_SYNC                             = 0x80000\n\tMAP_TYPE                             = 0xf\n\tMCAST_BLOCK_SOURCE                   = 0x2b\n\tMCAST_EXCLUDE                        = 0x0\n\tMCAST_INCLUDE                        = 0x1\n\tMCAST_JOIN_GROUP                     = 0x2a\n\tMCAST_JOIN_SOURCE_GROUP              = 0x2e\n\tMCAST_LEAVE_GROUP                    = 0x2d\n\tMCAST_LEAVE_SOURCE_GROUP             = 0x2f\n\tMCAST_MSFILTER                       = 0x30\n\tMCAST_UNBLOCK_SOURCE                 = 0x2c\n\tMCL_CURRENT                          = 0x1\n\tMCL_FUTURE                           = 0x2\n\tMCL_ONFAULT                          = 0x4\n\tMFD_ALLOW_SEALING                    = 0x2\n\tMFD_CLOEXEC                          = 0x1\n\tMFD_HUGETLB                          = 0x4\n\tMFD_HUGE_16GB                        = -0x78000000\n\tMFD_HUGE_16MB                        = 0x60000000\n\tMFD_HUGE_1GB                         = 0x78000000\n\tMFD_HUGE_1MB                         = 0x50000000\n\tMFD_HUGE_256MB                       = 0x70000000\n\tMFD_HUGE_2GB                         = 0x7c000000\n\tMFD_HUGE_2MB                         = 0x54000000\n\tMFD_HUGE_32MB                        = 0x64000000\n\tMFD_HUGE_512KB                       = 0x4c000000\n\tMFD_HUGE_512MB                       = 0x74000000\n\tMFD_HUGE_64KB                        = 0x40000000\n\tMFD_HUGE_8MB                         = 0x5c000000\n\tMFD_HUGE_MASK                        = 0x3f\n\tMFD_HUGE_SHIFT                       = 0x1a\n\tMINIX2_SUPER_MAGIC                   = 0x2468\n\tMINIX2_SUPER_MAGIC2                  = 0x2478\n\tMINIX3_SUPER_MAGIC                   = 0x4d5a\n\tMINIX_SUPER_MAGIC                    = 0x137f\n\tMINIX_SUPER_MAGIC2                   = 0x138f\n\tMNT_DETACH                           = 0x2\n\tMNT_EXPIRE                           = 0x4\n\tMNT_FORCE                            = 0x1\n\tMODULE_INIT_IGNORE_MODVERSIONS       = 0x1\n\tMODULE_INIT_IGNORE_VERMAGIC          = 0x2\n\tMSDOS_SUPER_MAGIC                    = 0x4d44\n\tMSG_BATCH                            = 0x40000\n\tMSG_CMSG_CLOEXEC                     = 0x40000000\n\tMSG_CONFIRM                          = 0x800\n\tMSG_CTRUNC                           = 0x8\n\tMSG_DONTROUTE                        = 0x4\n\tMSG_DONTWAIT                         = 0x40\n\tMSG_EOR                              = 0x80\n\tMSG_ERRQUEUE                         = 0x2000\n\tMSG_FASTOPEN                         = 0x20000000\n\tMSG_FIN                              = 0x200\n\tMSG_MORE                             = 0x8000\n\tMSG_NOSIGNAL                         = 0x4000\n\tMSG_OOB                              = 0x1\n\tMSG_PEEK                             = 0x2\n\tMSG_PROXY                            = 0x10\n\tMSG_RST                              = 0x1000\n\tMSG_SYN                              = 0x400\n\tMSG_TRUNC                            = 0x20\n\tMSG_TRYHARD                          = 0x4\n\tMSG_WAITALL                          = 0x100\n\tMSG_WAITFORONE                       = 0x10000\n\tMSG_ZEROCOPY                         = 0x4000000\n\tMS_ACTIVE                            = 0x40000000\n\tMS_ASYNC                             = 0x1\n\tMS_BIND                              = 0x1000\n\tMS_BORN                              = 0x20000000\n\tMS_DIRSYNC                           = 0x80\n\tMS_INVALIDATE                        = 0x2\n\tMS_I_VERSION                         = 0x800000\n\tMS_KERNMOUNT                         = 0x400000\n\tMS_LAZYTIME                          = 0x2000000\n\tMS_MANDLOCK                          = 0x40\n\tMS_MGC_MSK                           = 0xffff0000\n\tMS_MGC_VAL                           = 0xc0ed0000\n\tMS_MOVE                              = 0x2000\n\tMS_NOATIME                           = 0x400\n\tMS_NODEV                             = 0x4\n\tMS_NODIRATIME                        = 0x800\n\tMS_NOEXEC                            = 0x8\n\tMS_NOREMOTELOCK                      = 0x8000000\n\tMS_NOSEC                             = 0x10000000\n\tMS_NOSUID                            = 0x2\n\tMS_NOUSER                            = -0x80000000\n\tMS_POSIXACL                          = 0x10000\n\tMS_PRIVATE                           = 0x40000\n\tMS_RDONLY                            = 0x1\n\tMS_REC                               = 0x4000\n\tMS_RELATIME                          = 0x200000\n\tMS_REMOUNT                           = 0x20\n\tMS_RMT_MASK                          = 0x2800051\n\tMS_SHARED                            = 0x100000\n\tMS_SILENT                            = 0x8000\n\tMS_SLAVE                             = 0x80000\n\tMS_STRICTATIME                       = 0x1000000\n\tMS_SUBMOUNT                          = 0x4000000\n\tMS_SYNC                              = 0x4\n\tMS_SYNCHRONOUS                       = 0x10\n\tMS_UNBINDABLE                        = 0x20000\n\tMS_VERBOSE                           = 0x8000\n\tMTD_INODE_FS_MAGIC                   = 0x11307854\n\tNAME_MAX                             = 0xff\n\tNCP_SUPER_MAGIC                      = 0x564c\n\tNETLINK_ADD_MEMBERSHIP               = 0x1\n\tNETLINK_AUDIT                        = 0x9\n\tNETLINK_BROADCAST_ERROR              = 0x4\n\tNETLINK_CAP_ACK                      = 0xa\n\tNETLINK_CONNECTOR                    = 0xb\n\tNETLINK_CRYPTO                       = 0x15\n\tNETLINK_DNRTMSG                      = 0xe\n\tNETLINK_DROP_MEMBERSHIP              = 0x2\n\tNETLINK_ECRYPTFS                     = 0x13\n\tNETLINK_EXT_ACK                      = 0xb\n\tNETLINK_FIB_LOOKUP                   = 0xa\n\tNETLINK_FIREWALL                     = 0x3\n\tNETLINK_GENERIC                      = 0x10\n\tNETLINK_GET_STRICT_CHK               = 0xc\n\tNETLINK_INET_DIAG                    = 0x4\n\tNETLINK_IP6_FW                       = 0xd\n\tNETLINK_ISCSI                        = 0x8\n\tNETLINK_KOBJECT_UEVENT               = 0xf\n\tNETLINK_LISTEN_ALL_NSID              = 0x8\n\tNETLINK_LIST_MEMBERSHIPS             = 0x9\n\tNETLINK_NETFILTER                    = 0xc\n\tNETLINK_NFLOG                        = 0x5\n\tNETLINK_NO_ENOBUFS                   = 0x5\n\tNETLINK_PKTINFO                      = 0x3\n\tNETLINK_RDMA                         = 0x14\n\tNETLINK_ROUTE                        = 0x0\n\tNETLINK_RX_RING                      = 0x6\n\tNETLINK_SCSITRANSPORT                = 0x12\n\tNETLINK_SELINUX                      = 0x7\n\tNETLINK_SMC                          = 0x16\n\tNETLINK_SOCK_DIAG                    = 0x4\n\tNETLINK_TX_RING                      = 0x7\n\tNETLINK_UNUSED                       = 0x1\n\tNETLINK_USERSOCK                     = 0x2\n\tNETLINK_XFRM                         = 0x6\n\tNETNSA_MAX                           = 0x5\n\tNETNSA_NSID_NOT_ASSIGNED             = -0x1\n\tNFNETLINK_V0                         = 0x0\n\tNFNLGRP_ACCT_QUOTA                   = 0x8\n\tNFNLGRP_CONNTRACK_DESTROY            = 0x3\n\tNFNLGRP_CONNTRACK_EXP_DESTROY        = 0x6\n\tNFNLGRP_CONNTRACK_EXP_NEW            = 0x4\n\tNFNLGRP_CONNTRACK_EXP_UPDATE         = 0x5\n\tNFNLGRP_CONNTRACK_NEW                = 0x1\n\tNFNLGRP_CONNTRACK_UPDATE             = 0x2\n\tNFNLGRP_MAX                          = 0x9\n\tNFNLGRP_NFTABLES                     = 0x7\n\tNFNLGRP_NFTRACE                      = 0x9\n\tNFNLGRP_NONE                         = 0x0\n\tNFNL_BATCH_MAX                       = 0x1\n\tNFNL_MSG_BATCH_BEGIN                 = 0x10\n\tNFNL_MSG_BATCH_END                   = 0x11\n\tNFNL_NFA_NEST                        = 0x8000\n\tNFNL_SUBSYS_ACCT                     = 0x7\n\tNFNL_SUBSYS_COUNT                    = 0xc\n\tNFNL_SUBSYS_CTHELPER                 = 0x9\n\tNFNL_SUBSYS_CTNETLINK                = 0x1\n\tNFNL_SUBSYS_CTNETLINK_EXP            = 0x2\n\tNFNL_SUBSYS_CTNETLINK_TIMEOUT        = 0x8\n\tNFNL_SUBSYS_IPSET                    = 0x6\n\tNFNL_SUBSYS_NFTABLES                 = 0xa\n\tNFNL_SUBSYS_NFT_COMPAT               = 0xb\n\tNFNL_SUBSYS_NONE                     = 0x0\n\tNFNL_SUBSYS_OSF                      = 0x5\n\tNFNL_SUBSYS_QUEUE                    = 0x3\n\tNFNL_SUBSYS_ULOG                     = 0x4\n\tNFS_SUPER_MAGIC                      = 0x6969\n\tNILFS_SUPER_MAGIC                    = 0x3434\n\tNL0                                  = 0x0\n\tNL1                                  = 0x100\n\tNLA_ALIGNTO                          = 0x4\n\tNLA_F_NESTED                         = 0x8000\n\tNLA_F_NET_BYTEORDER                  = 0x4000\n\tNLA_HDRLEN                           = 0x4\n\tNLDLY                                = 0x100\n\tNLMSG_ALIGNTO                        = 0x4\n\tNLMSG_DONE                           = 0x3\n\tNLMSG_ERROR                          = 0x2\n\tNLMSG_HDRLEN                         = 0x10\n\tNLMSG_MIN_TYPE                       = 0x10\n\tNLMSG_NOOP                           = 0x1\n\tNLMSG_OVERRUN                        = 0x4\n\tNLM_F_ACK                            = 0x4\n\tNLM_F_ACK_TLVS                       = 0x200\n\tNLM_F_APPEND                         = 0x800\n\tNLM_F_ATOMIC                         = 0x400\n\tNLM_F_CAPPED                         = 0x100\n\tNLM_F_CREATE                         = 0x400\n\tNLM_F_DUMP                           = 0x300\n\tNLM_F_DUMP_FILTERED                  = 0x20\n\tNLM_F_DUMP_INTR                      = 0x10\n\tNLM_F_ECHO                           = 0x8\n\tNLM_F_EXCL                           = 0x200\n\tNLM_F_MATCH                          = 0x200\n\tNLM_F_MULTI                          = 0x2\n\tNLM_F_NONREC                         = 0x100\n\tNLM_F_REPLACE                        = 0x100\n\tNLM_F_REQUEST                        = 0x1\n\tNLM_F_ROOT                           = 0x100\n\tNOFLSH                               = 0x80\n\tNSFS_MAGIC                           = 0x6e736673\n\tOCFS2_SUPER_MAGIC                    = 0x7461636f\n\tOCRNL                                = 0x8\n\tOFDEL                                = 0x80\n\tOFILL                                = 0x40\n\tOLCUC                                = 0x2\n\tONLCR                                = 0x4\n\tONLRET                               = 0x20\n\tONOCR                                = 0x10\n\tOPENPROM_SUPER_MAGIC                 = 0x9fa1\n\tOPOST                                = 0x1\n\tOVERLAYFS_SUPER_MAGIC                = 0x794c7630\n\tO_ACCMODE                            = 0x3\n\tO_APPEND                             = 0x400\n\tO_ASYNC                              = 0x2000\n\tO_CLOEXEC                            = 0x80000\n\tO_CREAT                              = 0x40\n\tO_DIRECT                             = 0x10000\n\tO_DIRECTORY                          = 0x4000\n\tO_DSYNC                              = 0x1000\n\tO_EXCL                               = 0x80\n\tO_FSYNC                              = 0x101000\n\tO_LARGEFILE                          = 0x20000\n\tO_NDELAY                             = 0x800\n\tO_NOATIME                            = 0x40000\n\tO_NOCTTY                             = 0x100\n\tO_NOFOLLOW                           = 0x8000\n\tO_NONBLOCK                           = 0x800\n\tO_PATH                               = 0x200000\n\tO_RDONLY                             = 0x0\n\tO_RDWR                               = 0x2\n\tO_RSYNC                              = 0x101000\n\tO_SYNC                               = 0x101000\n\tO_TMPFILE                            = 0x404000\n\tO_TRUNC                              = 0x200\n\tO_WRONLY                             = 0x1\n\tPACKET_ADD_MEMBERSHIP                = 0x1\n\tPACKET_AUXDATA                       = 0x8\n\tPACKET_BROADCAST                     = 0x1\n\tPACKET_COPY_THRESH                   = 0x7\n\tPACKET_DROP_MEMBERSHIP               = 0x2\n\tPACKET_FANOUT                        = 0x12\n\tPACKET_FANOUT_CBPF                   = 0x6\n\tPACKET_FANOUT_CPU                    = 0x2\n\tPACKET_FANOUT_DATA                   = 0x16\n\tPACKET_FANOUT_EBPF                   = 0x7\n\tPACKET_FANOUT_FLAG_DEFRAG            = 0x8000\n\tPACKET_FANOUT_FLAG_ROLLOVER          = 0x1000\n\tPACKET_FANOUT_FLAG_UNIQUEID          = 0x2000\n\tPACKET_FANOUT_HASH                   = 0x0\n\tPACKET_FANOUT_LB                     = 0x1\n\tPACKET_FANOUT_QM                     = 0x5\n\tPACKET_FANOUT_RND                    = 0x4\n\tPACKET_FANOUT_ROLLOVER               = 0x3\n\tPACKET_FASTROUTE                     = 0x6\n\tPACKET_HDRLEN                        = 0xb\n\tPACKET_HOST                          = 0x0\n\tPACKET_IGNORE_OUTGOING               = 0x17\n\tPACKET_KERNEL                        = 0x7\n\tPACKET_LOOPBACK                      = 0x5\n\tPACKET_LOSS                          = 0xe\n\tPACKET_MR_ALLMULTI                   = 0x2\n\tPACKET_MR_MULTICAST                  = 0x0\n\tPACKET_MR_PROMISC                    = 0x1\n\tPACKET_MR_UNICAST                    = 0x3\n\tPACKET_MULTICAST                     = 0x2\n\tPACKET_ORIGDEV                       = 0x9\n\tPACKET_OTHERHOST                     = 0x3\n\tPACKET_OUTGOING                      = 0x4\n\tPACKET_QDISC_BYPASS                  = 0x14\n\tPACKET_RECV_OUTPUT                   = 0x3\n\tPACKET_RESERVE                       = 0xc\n\tPACKET_ROLLOVER_STATS                = 0x15\n\tPACKET_RX_RING                       = 0x5\n\tPACKET_STATISTICS                    = 0x6\n\tPACKET_TIMESTAMP                     = 0x11\n\tPACKET_TX_HAS_OFF                    = 0x13\n\tPACKET_TX_RING                       = 0xd\n\tPACKET_TX_TIMESTAMP                  = 0x10\n\tPACKET_USER                          = 0x6\n\tPACKET_VERSION                       = 0xa\n\tPACKET_VNET_HDR                      = 0xf\n\tPARENB                               = 0x100\n\tPARITY_CRC16_PR0                     = 0x2\n\tPARITY_CRC16_PR0_CCITT               = 0x4\n\tPARITY_CRC16_PR1                     = 0x3\n\tPARITY_CRC16_PR1_CCITT               = 0x5\n\tPARITY_CRC32_PR0_CCITT               = 0x6\n\tPARITY_CRC32_PR1_CCITT               = 0x7\n\tPARITY_DEFAULT                       = 0x0\n\tPARITY_NONE                          = 0x1\n\tPARMRK                               = 0x8\n\tPARODD                               = 0x200\n\tPENDIN                               = 0x4000\n\tPERF_EVENT_IOC_DISABLE               = 0x2401\n\tPERF_EVENT_IOC_ENABLE                = 0x2400\n\tPERF_EVENT_IOC_ID                    = 0x80042407\n\tPERF_EVENT_IOC_MODIFY_ATTRIBUTES     = 0x4004240b\n\tPERF_EVENT_IOC_PAUSE_OUTPUT          = 0x40042409\n\tPERF_EVENT_IOC_PERIOD                = 0x40082404\n\tPERF_EVENT_IOC_QUERY_BPF             = 0xc004240a\n\tPERF_EVENT_IOC_REFRESH               = 0x2402\n\tPERF_EVENT_IOC_RESET                 = 0x2403\n\tPERF_EVENT_IOC_SET_BPF               = 0x40042408\n\tPERF_EVENT_IOC_SET_FILTER            = 0x40042406\n\tPERF_EVENT_IOC_SET_OUTPUT            = 0x2405\n\tPIPEFS_MAGIC                         = 0x50495045\n\tPPPIOCATTACH                         = 0x4004743d\n\tPPPIOCATTCHAN                        = 0x40047438\n\tPPPIOCCONNECT                        = 0x4004743a\n\tPPPIOCDETACH                         = 0x4004743c\n\tPPPIOCDISCONN                        = 0x7439\n\tPPPIOCGASYNCMAP                      = 0x80047458\n\tPPPIOCGCHAN                          = 0x80047437\n\tPPPIOCGDEBUG                         = 0x80047441\n\tPPPIOCGFLAGS                         = 0x8004745a\n\tPPPIOCGIDLE                          = 0x8008743f\n\tPPPIOCGL2TPSTATS                     = 0x80487436\n\tPPPIOCGMRU                           = 0x80047453\n\tPPPIOCGNPMODE                        = 0xc008744c\n\tPPPIOCGRASYNCMAP                     = 0x80047455\n\tPPPIOCGUNIT                          = 0x80047456\n\tPPPIOCGXASYNCMAP                     = 0x80207450\n\tPPPIOCNEWUNIT                        = 0xc004743e\n\tPPPIOCSACTIVE                        = 0x40087446\n\tPPPIOCSASYNCMAP                      = 0x40047457\n\tPPPIOCSCOMPRESS                      = 0x400c744d\n\tPPPIOCSDEBUG                         = 0x40047440\n\tPPPIOCSFLAGS                         = 0x40047459\n\tPPPIOCSMAXCID                        = 0x40047451\n\tPPPIOCSMRRU                          = 0x4004743b\n\tPPPIOCSMRU                           = 0x40047452\n\tPPPIOCSNPMODE                        = 0x4008744b\n\tPPPIOCSPASS                          = 0x40087447\n\tPPPIOCSRASYNCMAP                     = 0x40047454\n\tPPPIOCSXASYNCMAP                     = 0x4020744f\n\tPPPIOCXFERUNIT                       = 0x744e\n\tPRIO_PGRP                            = 0x1\n\tPRIO_PROCESS                         = 0x0\n\tPRIO_USER                            = 0x2\n\tPROC_SUPER_MAGIC                     = 0x9fa0\n\tPROT_EXEC                            = 0x4\n\tPROT_GROWSDOWN                       = 0x1000000\n\tPROT_GROWSUP                         = 0x2000000\n\tPROT_NONE                            = 0x0\n\tPROT_READ                            = 0x1\n\tPROT_WRITE                           = 0x2\n\tPR_CAPBSET_DROP                      = 0x18\n\tPR_CAPBSET_READ                      = 0x17\n\tPR_CAP_AMBIENT                       = 0x2f\n\tPR_CAP_AMBIENT_CLEAR_ALL             = 0x4\n\tPR_CAP_AMBIENT_IS_SET                = 0x1\n\tPR_CAP_AMBIENT_LOWER                 = 0x3\n\tPR_CAP_AMBIENT_RAISE                 = 0x2\n\tPR_ENDIAN_BIG                        = 0x0\n\tPR_ENDIAN_LITTLE                     = 0x1\n\tPR_ENDIAN_PPC_LITTLE                 = 0x2\n\tPR_FPEMU_NOPRINT                     = 0x1\n\tPR_FPEMU_SIGFPE                      = 0x2\n\tPR_FP_EXC_ASYNC                      = 0x2\n\tPR_FP_EXC_DISABLED                   = 0x0\n\tPR_FP_EXC_DIV                        = 0x10000\n\tPR_FP_EXC_INV                        = 0x100000\n\tPR_FP_EXC_NONRECOV                   = 0x1\n\tPR_FP_EXC_OVF                        = 0x20000\n\tPR_FP_EXC_PRECISE                    = 0x3\n\tPR_FP_EXC_RES                        = 0x80000\n\tPR_FP_EXC_SW_ENABLE                  = 0x80\n\tPR_FP_EXC_UND                        = 0x40000\n\tPR_FP_MODE_FR                        = 0x1\n\tPR_FP_MODE_FRE                       = 0x2\n\tPR_GET_CHILD_SUBREAPER               = 0x25\n\tPR_GET_DUMPABLE                      = 0x3\n\tPR_GET_ENDIAN                        = 0x13\n\tPR_GET_FPEMU                         = 0x9\n\tPR_GET_FPEXC                         = 0xb\n\tPR_GET_FP_MODE                       = 0x2e\n\tPR_GET_KEEPCAPS                      = 0x7\n\tPR_GET_NAME                          = 0x10\n\tPR_GET_NO_NEW_PRIVS                  = 0x27\n\tPR_GET_PDEATHSIG                     = 0x2\n\tPR_GET_SECCOMP                       = 0x15\n\tPR_GET_SECUREBITS                    = 0x1b\n\tPR_GET_SPECULATION_CTRL              = 0x34\n\tPR_GET_THP_DISABLE                   = 0x2a\n\tPR_GET_TID_ADDRESS                   = 0x28\n\tPR_GET_TIMERSLACK                    = 0x1e\n\tPR_GET_TIMING                        = 0xd\n\tPR_GET_TSC                           = 0x19\n\tPR_GET_UNALIGN                       = 0x5\n\tPR_MCE_KILL                          = 0x21\n\tPR_MCE_KILL_CLEAR                    = 0x0\n\tPR_MCE_KILL_DEFAULT                  = 0x2\n\tPR_MCE_KILL_EARLY                    = 0x1\n\tPR_MCE_KILL_GET                      = 0x22\n\tPR_MCE_KILL_LATE                     = 0x0\n\tPR_MCE_KILL_SET                      = 0x1\n\tPR_MPX_DISABLE_MANAGEMENT            = 0x2c\n\tPR_MPX_ENABLE_MANAGEMENT             = 0x2b\n\tPR_PAC_APDAKEY                       = 0x4\n\tPR_PAC_APDBKEY                       = 0x8\n\tPR_PAC_APGAKEY                       = 0x10\n\tPR_PAC_APIAKEY                       = 0x1\n\tPR_PAC_APIBKEY                       = 0x2\n\tPR_PAC_RESET_KEYS                    = 0x36\n\tPR_SET_CHILD_SUBREAPER               = 0x24\n\tPR_SET_DUMPABLE                      = 0x4\n\tPR_SET_ENDIAN                        = 0x14\n\tPR_SET_FPEMU                         = 0xa\n\tPR_SET_FPEXC                         = 0xc\n\tPR_SET_FP_MODE                       = 0x2d\n\tPR_SET_KEEPCAPS                      = 0x8\n\tPR_SET_MM                            = 0x23\n\tPR_SET_MM_ARG_END                    = 0x9\n\tPR_SET_MM_ARG_START                  = 0x8\n\tPR_SET_MM_AUXV                       = 0xc\n\tPR_SET_MM_BRK                        = 0x7\n\tPR_SET_MM_END_CODE                   = 0x2\n\tPR_SET_MM_END_DATA                   = 0x4\n\tPR_SET_MM_ENV_END                    = 0xb\n\tPR_SET_MM_ENV_START                  = 0xa\n\tPR_SET_MM_EXE_FILE                   = 0xd\n\tPR_SET_MM_MAP                        = 0xe\n\tPR_SET_MM_MAP_SIZE                   = 0xf\n\tPR_SET_MM_START_BRK                  = 0x6\n\tPR_SET_MM_START_CODE                 = 0x1\n\tPR_SET_MM_START_DATA                 = 0x3\n\tPR_SET_MM_START_STACK                = 0x5\n\tPR_SET_NAME                          = 0xf\n\tPR_SET_NO_NEW_PRIVS                  = 0x26\n\tPR_SET_PDEATHSIG                     = 0x1\n\tPR_SET_PTRACER                       = 0x59616d61\n\tPR_SET_PTRACER_ANY                   = 0xffffffff\n\tPR_SET_SECCOMP                       = 0x16\n\tPR_SET_SECUREBITS                    = 0x1c\n\tPR_SET_SPECULATION_CTRL              = 0x35\n\tPR_SET_THP_DISABLE                   = 0x29\n\tPR_SET_TIMERSLACK                    = 0x1d\n\tPR_SET_TIMING                        = 0xe\n\tPR_SET_TSC                           = 0x1a\n\tPR_SET_UNALIGN                       = 0x6\n\tPR_SPEC_DISABLE                      = 0x4\n\tPR_SPEC_DISABLE_NOEXEC               = 0x10\n\tPR_SPEC_ENABLE                       = 0x2\n\tPR_SPEC_FORCE_DISABLE                = 0x8\n\tPR_SPEC_INDIRECT_BRANCH              = 0x1\n\tPR_SPEC_NOT_AFFECTED                 = 0x0\n\tPR_SPEC_PRCTL                        = 0x1\n\tPR_SPEC_STORE_BYPASS                 = 0x0\n\tPR_SVE_GET_VL                        = 0x33\n\tPR_SVE_SET_VL                        = 0x32\n\tPR_SVE_SET_VL_ONEXEC                 = 0x40000\n\tPR_SVE_VL_INHERIT                    = 0x20000\n\tPR_SVE_VL_LEN_MASK                   = 0xffff\n\tPR_TASK_PERF_EVENTS_DISABLE          = 0x1f\n\tPR_TASK_PERF_EVENTS_ENABLE           = 0x20\n\tPR_TIMING_STATISTICAL                = 0x0\n\tPR_TIMING_TIMESTAMP                  = 0x1\n\tPR_TSC_ENABLE                        = 0x1\n\tPR_TSC_SIGSEGV                       = 0x2\n\tPR_UNALIGN_NOPRINT                   = 0x1\n\tPR_UNALIGN_SIGBUS                    = 0x2\n\tPSTOREFS_MAGIC                       = 0x6165676c\n\tPTRACE_ATTACH                        = 0x10\n\tPTRACE_CONT                          = 0x7\n\tPTRACE_DETACH                        = 0x11\n\tPTRACE_EVENT_CLONE                   = 0x3\n\tPTRACE_EVENT_EXEC                    = 0x4\n\tPTRACE_EVENT_EXIT                    = 0x6\n\tPTRACE_EVENT_FORK                    = 0x1\n\tPTRACE_EVENT_SECCOMP                 = 0x7\n\tPTRACE_EVENT_STOP                    = 0x80\n\tPTRACE_EVENT_VFORK                   = 0x2\n\tPTRACE_EVENT_VFORK_DONE              = 0x5\n\tPTRACE_GETCRUNCHREGS                 = 0x19\n\tPTRACE_GETEVENTMSG                   = 0x4201\n\tPTRACE_GETFDPIC                      = 0x1f\n\tPTRACE_GETFDPIC_EXEC                 = 0x0\n\tPTRACE_GETFDPIC_INTERP               = 0x1\n\tPTRACE_GETFPREGS                     = 0xe\n\tPTRACE_GETHBPREGS                    = 0x1d\n\tPTRACE_GETREGS                       = 0xc\n\tPTRACE_GETREGSET                     = 0x4204\n\tPTRACE_GETSIGINFO                    = 0x4202\n\tPTRACE_GETSIGMASK                    = 0x420a\n\tPTRACE_GETVFPREGS                    = 0x1b\n\tPTRACE_GETWMMXREGS                   = 0x12\n\tPTRACE_GET_THREAD_AREA               = 0x16\n\tPTRACE_INTERRUPT                     = 0x4207\n\tPTRACE_KILL                          = 0x8\n\tPTRACE_LISTEN                        = 0x4208\n\tPTRACE_OLDSETOPTIONS                 = 0x15\n\tPTRACE_O_EXITKILL                    = 0x100000\n\tPTRACE_O_MASK                        = 0x3000ff\n\tPTRACE_O_SUSPEND_SECCOMP             = 0x200000\n\tPTRACE_O_TRACECLONE                  = 0x8\n\tPTRACE_O_TRACEEXEC                   = 0x10\n\tPTRACE_O_TRACEEXIT                   = 0x40\n\tPTRACE_O_TRACEFORK                   = 0x2\n\tPTRACE_O_TRACESECCOMP                = 0x80\n\tPTRACE_O_TRACESYSGOOD                = 0x1\n\tPTRACE_O_TRACEVFORK                  = 0x4\n\tPTRACE_O_TRACEVFORKDONE              = 0x20\n\tPTRACE_PEEKDATA                      = 0x2\n\tPTRACE_PEEKSIGINFO                   = 0x4209\n\tPTRACE_PEEKSIGINFO_SHARED            = 0x1\n\tPTRACE_PEEKTEXT                      = 0x1\n\tPTRACE_PEEKUSR                       = 0x3\n\tPTRACE_POKEDATA                      = 0x5\n\tPTRACE_POKETEXT                      = 0x4\n\tPTRACE_POKEUSR                       = 0x6\n\tPTRACE_SECCOMP_GET_FILTER            = 0x420c\n\tPTRACE_SECCOMP_GET_METADATA          = 0x420d\n\tPTRACE_SEIZE                         = 0x4206\n\tPTRACE_SETCRUNCHREGS                 = 0x1a\n\tPTRACE_SETFPREGS                     = 0xf\n\tPTRACE_SETHBPREGS                    = 0x1e\n\tPTRACE_SETOPTIONS                    = 0x4200\n\tPTRACE_SETREGS                       = 0xd\n\tPTRACE_SETREGSET                     = 0x4205\n\tPTRACE_SETSIGINFO                    = 0x4203\n\tPTRACE_SETSIGMASK                    = 0x420b\n\tPTRACE_SETVFPREGS                    = 0x1c\n\tPTRACE_SETWMMXREGS                   = 0x13\n\tPTRACE_SET_SYSCALL                   = 0x17\n\tPTRACE_SINGLESTEP                    = 0x9\n\tPTRACE_SYSCALL                       = 0x18\n\tPTRACE_TRACEME                       = 0x0\n\tPT_DATA_ADDR                         = 0x10004\n\tPT_TEXT_ADDR                         = 0x10000\n\tPT_TEXT_END_ADDR                     = 0x10008\n\tQNX4_SUPER_MAGIC                     = 0x2f\n\tQNX6_SUPER_MAGIC                     = 0x68191122\n\tRAMFS_MAGIC                          = 0x858458f6\n\tRDTGROUP_SUPER_MAGIC                 = 0x7655821\n\tREISERFS_SUPER_MAGIC                 = 0x52654973\n\tRENAME_EXCHANGE                      = 0x2\n\tRENAME_NOREPLACE                     = 0x1\n\tRENAME_WHITEOUT                      = 0x4\n\tRLIMIT_AS                            = 0x9\n\tRLIMIT_CORE                          = 0x4\n\tRLIMIT_CPU                           = 0x0\n\tRLIMIT_DATA                          = 0x2\n\tRLIMIT_FSIZE                         = 0x1\n\tRLIMIT_LOCKS                         = 0xa\n\tRLIMIT_MEMLOCK                       = 0x8\n\tRLIMIT_MSGQUEUE                      = 0xc\n\tRLIMIT_NICE                          = 0xd\n\tRLIMIT_NOFILE                        = 0x7\n\tRLIMIT_NPROC                         = 0x6\n\tRLIMIT_RSS                           = 0x5\n\tRLIMIT_RTPRIO                        = 0xe\n\tRLIMIT_RTTIME                        = 0xf\n\tRLIMIT_SIGPENDING                    = 0xb\n\tRLIMIT_STACK                         = 0x3\n\tRLIM_INFINITY                        = 0xffffffffffffffff\n\tRNDADDENTROPY                        = 0x40085203\n\tRNDADDTOENTCNT                       = 0x40045201\n\tRNDCLEARPOOL                         = 0x5206\n\tRNDGETENTCNT                         = 0x80045200\n\tRNDGETPOOL                           = 0x80085202\n\tRNDRESEEDCRNG                        = 0x5207\n\tRNDZAPENTCNT                         = 0x5204\n\tRTAX_ADVMSS                          = 0x8\n\tRTAX_CC_ALGO                         = 0x10\n\tRTAX_CWND                            = 0x7\n\tRTAX_FASTOPEN_NO_COOKIE              = 0x11\n\tRTAX_FEATURES                        = 0xc\n\tRTAX_FEATURE_ALLFRAG                 = 0x8\n\tRTAX_FEATURE_ECN                     = 0x1\n\tRTAX_FEATURE_MASK                    = 0xf\n\tRTAX_FEATURE_SACK                    = 0x2\n\tRTAX_FEATURE_TIMESTAMP               = 0x4\n\tRTAX_HOPLIMIT                        = 0xa\n\tRTAX_INITCWND                        = 0xb\n\tRTAX_INITRWND                        = 0xe\n\tRTAX_LOCK                            = 0x1\n\tRTAX_MAX                             = 0x11\n\tRTAX_MTU                             = 0x2\n\tRTAX_QUICKACK                        = 0xf\n\tRTAX_REORDERING                      = 0x9\n\tRTAX_RTO_MIN                         = 0xd\n\tRTAX_RTT                             = 0x4\n\tRTAX_RTTVAR                          = 0x5\n\tRTAX_SSTHRESH                        = 0x6\n\tRTAX_UNSPEC                          = 0x0\n\tRTAX_WINDOW                          = 0x3\n\tRTA_ALIGNTO                          = 0x4\n\tRTA_MAX                              = 0x1d\n\tRTCF_DIRECTSRC                       = 0x4000000\n\tRTCF_DOREDIRECT                      = 0x1000000\n\tRTCF_LOG                             = 0x2000000\n\tRTCF_MASQ                            = 0x400000\n\tRTCF_NAT                             = 0x800000\n\tRTCF_VALVE                           = 0x200000\n\tRTC_AF                               = 0x20\n\tRTC_AIE_OFF                          = 0x7002\n\tRTC_AIE_ON                           = 0x7001\n\tRTC_ALM_READ                         = 0x80247008\n\tRTC_ALM_SET                          = 0x40247007\n\tRTC_EPOCH_READ                       = 0x8004700d\n\tRTC_EPOCH_SET                        = 0x4004700e\n\tRTC_IRQF                             = 0x80\n\tRTC_IRQP_READ                        = 0x8004700b\n\tRTC_IRQP_SET                         = 0x4004700c\n\tRTC_MAX_FREQ                         = 0x2000\n\tRTC_PF                               = 0x40\n\tRTC_PIE_OFF                          = 0x7006\n\tRTC_PIE_ON                           = 0x7005\n\tRTC_PLL_GET                          = 0x801c7011\n\tRTC_PLL_SET                          = 0x401c7012\n\tRTC_RD_TIME                          = 0x80247009\n\tRTC_SET_TIME                         = 0x4024700a\n\tRTC_UF                               = 0x10\n\tRTC_UIE_OFF                          = 0x7004\n\tRTC_UIE_ON                           = 0x7003\n\tRTC_VL_CLR                           = 0x7014\n\tRTC_VL_READ                          = 0x80047013\n\tRTC_WIE_OFF                          = 0x7010\n\tRTC_WIE_ON                           = 0x700f\n\tRTC_WKALM_RD                         = 0x80287010\n\tRTC_WKALM_SET                        = 0x4028700f\n\tRTF_ADDRCLASSMASK                    = 0xf8000000\n\tRTF_ADDRCONF                         = 0x40000\n\tRTF_ALLONLINK                        = 0x20000\n\tRTF_BROADCAST                        = 0x10000000\n\tRTF_CACHE                            = 0x1000000\n\tRTF_DEFAULT                          = 0x10000\n\tRTF_DYNAMIC                          = 0x10\n\tRTF_FLOW                             = 0x2000000\n\tRTF_GATEWAY                          = 0x2\n\tRTF_HOST                             = 0x4\n\tRTF_INTERFACE                        = 0x40000000\n\tRTF_IRTT                             = 0x100\n\tRTF_LINKRT                           = 0x100000\n\tRTF_LOCAL                            = 0x80000000\n\tRTF_MODIFIED                         = 0x20\n\tRTF_MSS                              = 0x40\n\tRTF_MTU                              = 0x40\n\tRTF_MULTICAST                        = 0x20000000\n\tRTF_NAT                              = 0x8000000\n\tRTF_NOFORWARD                        = 0x1000\n\tRTF_NONEXTHOP                        = 0x200000\n\tRTF_NOPMTUDISC                       = 0x4000\n\tRTF_POLICY                           = 0x4000000\n\tRTF_REINSTATE                        = 0x8\n\tRTF_REJECT                           = 0x200\n\tRTF_STATIC                           = 0x400\n\tRTF_THROW                            = 0x2000\n\tRTF_UP                               = 0x1\n\tRTF_WINDOW                           = 0x80\n\tRTF_XRESOLVE                         = 0x800\n\tRTM_BASE                             = 0x10\n\tRTM_DELACTION                        = 0x31\n\tRTM_DELADDR                          = 0x15\n\tRTM_DELADDRLABEL                     = 0x49\n\tRTM_DELCHAIN                         = 0x65\n\tRTM_DELLINK                          = 0x11\n\tRTM_DELMDB                           = 0x55\n\tRTM_DELNEIGH                         = 0x1d\n\tRTM_DELNETCONF                       = 0x51\n\tRTM_DELNSID                          = 0x59\n\tRTM_DELQDISC                         = 0x25\n\tRTM_DELROUTE                         = 0x19\n\tRTM_DELRULE                          = 0x21\n\tRTM_DELTCLASS                        = 0x29\n\tRTM_DELTFILTER                       = 0x2d\n\tRTM_F_CLONED                         = 0x200\n\tRTM_F_EQUALIZE                       = 0x400\n\tRTM_F_FIB_MATCH                      = 0x2000\n\tRTM_F_LOOKUP_TABLE                   = 0x1000\n\tRTM_F_NOTIFY                         = 0x100\n\tRTM_F_PREFIX                         = 0x800\n\tRTM_GETACTION                        = 0x32\n\tRTM_GETADDR                          = 0x16\n\tRTM_GETADDRLABEL                     = 0x4a\n\tRTM_GETANYCAST                       = 0x3e\n\tRTM_GETCHAIN                         = 0x66\n\tRTM_GETDCB                           = 0x4e\n\tRTM_GETLINK                          = 0x12\n\tRTM_GETMDB                           = 0x56\n\tRTM_GETMULTICAST                     = 0x3a\n\tRTM_GETNEIGH                         = 0x1e\n\tRTM_GETNEIGHTBL                      = 0x42\n\tRTM_GETNETCONF                       = 0x52\n\tRTM_GETNSID                          = 0x5a\n\tRTM_GETQDISC                         = 0x26\n\tRTM_GETROUTE                         = 0x1a\n\tRTM_GETRULE                          = 0x22\n\tRTM_GETSTATS                         = 0x5e\n\tRTM_GETTCLASS                        = 0x2a\n\tRTM_GETTFILTER                       = 0x2e\n\tRTM_MAX                              = 0x67\n\tRTM_NEWACTION                        = 0x30\n\tRTM_NEWADDR                          = 0x14\n\tRTM_NEWADDRLABEL                     = 0x48\n\tRTM_NEWCACHEREPORT                   = 0x60\n\tRTM_NEWCHAIN                         = 0x64\n\tRTM_NEWLINK                          = 0x10\n\tRTM_NEWMDB                           = 0x54\n\tRTM_NEWNDUSEROPT                     = 0x44\n\tRTM_NEWNEIGH                         = 0x1c\n\tRTM_NEWNEIGHTBL                      = 0x40\n\tRTM_NEWNETCONF                       = 0x50\n\tRTM_NEWNSID                          = 0x58\n\tRTM_NEWPREFIX                        = 0x34\n\tRTM_NEWQDISC                         = 0x24\n\tRTM_NEWROUTE                         = 0x18\n\tRTM_NEWRULE                          = 0x20\n\tRTM_NEWSTATS                         = 0x5c\n\tRTM_NEWTCLASS                        = 0x28\n\tRTM_NEWTFILTER                       = 0x2c\n\tRTM_NR_FAMILIES                      = 0x16\n\tRTM_NR_MSGTYPES                      = 0x58\n\tRTM_SETDCB                           = 0x4f\n\tRTM_SETLINK                          = 0x13\n\tRTM_SETNEIGHTBL                      = 0x43\n\tRTNH_ALIGNTO                         = 0x4\n\tRTNH_COMPARE_MASK                    = 0x19\n\tRTNH_F_DEAD                          = 0x1\n\tRTNH_F_LINKDOWN                      = 0x10\n\tRTNH_F_OFFLOAD                       = 0x8\n\tRTNH_F_ONLINK                        = 0x4\n\tRTNH_F_PERVASIVE                     = 0x2\n\tRTNH_F_UNRESOLVED                    = 0x20\n\tRTN_MAX                              = 0xb\n\tRTPROT_BABEL                         = 0x2a\n\tRTPROT_BGP                           = 0xba\n\tRTPROT_BIRD                          = 0xc\n\tRTPROT_BOOT                          = 0x3\n\tRTPROT_DHCP                          = 0x10\n\tRTPROT_DNROUTED                      = 0xd\n\tRTPROT_EIGRP                         = 0xc0\n\tRTPROT_GATED                         = 0x8\n\tRTPROT_ISIS                          = 0xbb\n\tRTPROT_KERNEL                        = 0x2\n\tRTPROT_MROUTED                       = 0x11\n\tRTPROT_MRT                           = 0xa\n\tRTPROT_NTK                           = 0xf\n\tRTPROT_OSPF                          = 0xbc\n\tRTPROT_RA                            = 0x9\n\tRTPROT_REDIRECT                      = 0x1\n\tRTPROT_RIP                           = 0xbd\n\tRTPROT_STATIC                        = 0x4\n\tRTPROT_UNSPEC                        = 0x0\n\tRTPROT_XORP                          = 0xe\n\tRTPROT_ZEBRA                         = 0xb\n\tRT_CLASS_DEFAULT                     = 0xfd\n\tRT_CLASS_LOCAL                       = 0xff\n\tRT_CLASS_MAIN                        = 0xfe\n\tRT_CLASS_MAX                         = 0xff\n\tRT_CLASS_UNSPEC                      = 0x0\n\tRUSAGE_CHILDREN                      = -0x1\n\tRUSAGE_SELF                          = 0x0\n\tRUSAGE_THREAD                        = 0x1\n\tSCM_CREDENTIALS                      = 0x2\n\tSCM_RIGHTS                           = 0x1\n\tSCM_TIMESTAMP                        = 0x1d\n\tSCM_TIMESTAMPING                     = 0x25\n\tSCM_TIMESTAMPING_OPT_STATS           = 0x36\n\tSCM_TIMESTAMPING_PKTINFO             = 0x3a\n\tSCM_TIMESTAMPNS                      = 0x23\n\tSCM_TXTIME                           = 0x3d\n\tSCM_WIFI_STATUS                      = 0x29\n\tSC_LOG_FLUSH                         = 0x100000\n\tSECCOMP_MODE_DISABLED                = 0x0\n\tSECCOMP_MODE_FILTER                  = 0x2\n\tSECCOMP_MODE_STRICT                  = 0x1\n\tSECURITYFS_MAGIC                     = 0x73636673\n\tSELINUX_MAGIC                        = 0xf97cff8c\n\tSFD_CLOEXEC                          = 0x80000\n\tSFD_NONBLOCK                         = 0x800\n\tSHUT_RD                              = 0x0\n\tSHUT_RDWR                            = 0x2\n\tSHUT_WR                              = 0x1\n\tSIOCADDDLCI                          = 0x8980\n\tSIOCADDMULTI                         = 0x8931\n\tSIOCADDRT                            = 0x890b\n\tSIOCATMARK                           = 0x8905\n\tSIOCBONDCHANGEACTIVE                 = 0x8995\n\tSIOCBONDENSLAVE                      = 0x8990\n\tSIOCBONDINFOQUERY                    = 0x8994\n\tSIOCBONDRELEASE                      = 0x8991\n\tSIOCBONDSETHWADDR                    = 0x8992\n\tSIOCBONDSLAVEINFOQUERY               = 0x8993\n\tSIOCBRADDBR                          = 0x89a0\n\tSIOCBRADDIF                          = 0x89a2\n\tSIOCBRDELBR                          = 0x89a1\n\tSIOCBRDELIF                          = 0x89a3\n\tSIOCDARP                             = 0x8953\n\tSIOCDELDLCI                          = 0x8981\n\tSIOCDELMULTI                         = 0x8932\n\tSIOCDELRT                            = 0x890c\n\tSIOCDEVPRIVATE                       = 0x89f0\n\tSIOCDIFADDR                          = 0x8936\n\tSIOCDRARP                            = 0x8960\n\tSIOCETHTOOL                          = 0x8946\n\tSIOCGARP                             = 0x8954\n\tSIOCGHWTSTAMP                        = 0x89b1\n\tSIOCGIFADDR                          = 0x8915\n\tSIOCGIFBR                            = 0x8940\n\tSIOCGIFBRDADDR                       = 0x8919\n\tSIOCGIFCONF                          = 0x8912\n\tSIOCGIFCOUNT                         = 0x8938\n\tSIOCGIFDSTADDR                       = 0x8917\n\tSIOCGIFENCAP                         = 0x8925\n\tSIOCGIFFLAGS                         = 0x8913\n\tSIOCGIFHWADDR                        = 0x8927\n\tSIOCGIFINDEX                         = 0x8933\n\tSIOCGIFMAP                           = 0x8970\n\tSIOCGIFMEM                           = 0x891f\n\tSIOCGIFMETRIC                        = 0x891d\n\tSIOCGIFMTU                           = 0x8921\n\tSIOCGIFNAME                          = 0x8910\n\tSIOCGIFNETMASK                       = 0x891b\n\tSIOCGIFPFLAGS                        = 0x8935\n\tSIOCGIFSLAVE                         = 0x8929\n\tSIOCGIFTXQLEN                        = 0x8942\n\tSIOCGIFVLAN                          = 0x8982\n\tSIOCGMIIPHY                          = 0x8947\n\tSIOCGMIIREG                          = 0x8948\n\tSIOCGPGRP                            = 0x8904\n\tSIOCGPPPCSTATS                       = 0x89f2\n\tSIOCGPPPSTATS                        = 0x89f0\n\tSIOCGPPPVER                          = 0x89f1\n\tSIOCGRARP                            = 0x8961\n\tSIOCGSKNS                            = 0x894c\n\tSIOCGSTAMP                           = 0x8906\n\tSIOCGSTAMPNS                         = 0x8907\n\tSIOCINQ                              = 0x541b\n\tSIOCOUTQ                             = 0x5411\n\tSIOCOUTQNSD                          = 0x894b\n\tSIOCPROTOPRIVATE                     = 0x89e0\n\tSIOCRTMSG                            = 0x890d\n\tSIOCSARP                             = 0x8955\n\tSIOCSHWTSTAMP                        = 0x89b0\n\tSIOCSIFADDR                          = 0x8916\n\tSIOCSIFBR                            = 0x8941\n\tSIOCSIFBRDADDR                       = 0x891a\n\tSIOCSIFDSTADDR                       = 0x8918\n\tSIOCSIFENCAP                         = 0x8926\n\tSIOCSIFFLAGS                         = 0x8914\n\tSIOCSIFHWADDR                        = 0x8924\n\tSIOCSIFHWBROADCAST                   = 0x8937\n\tSIOCSIFLINK                          = 0x8911\n\tSIOCSIFMAP                           = 0x8971\n\tSIOCSIFMEM                           = 0x8920\n\tSIOCSIFMETRIC                        = 0x891e\n\tSIOCSIFMTU                           = 0x8922\n\tSIOCSIFNAME                          = 0x8923\n\tSIOCSIFNETMASK                       = 0x891c\n\tSIOCSIFPFLAGS                        = 0x8934\n\tSIOCSIFSLAVE                         = 0x8930\n\tSIOCSIFTXQLEN                        = 0x8943\n\tSIOCSIFVLAN                          = 0x8983\n\tSIOCSMIIREG                          = 0x8949\n\tSIOCSPGRP                            = 0x8902\n\tSIOCSRARP                            = 0x8962\n\tSIOCWANDEV                           = 0x894a\n\tSMACK_MAGIC                          = 0x43415d53\n\tSMART_AUTOSAVE                       = 0xd2\n\tSMART_AUTO_OFFLINE                   = 0xdb\n\tSMART_DISABLE                        = 0xd9\n\tSMART_ENABLE                         = 0xd8\n\tSMART_HCYL_PASS                      = 0xc2\n\tSMART_IMMEDIATE_OFFLINE              = 0xd4\n\tSMART_LCYL_PASS                      = 0x4f\n\tSMART_READ_LOG_SECTOR                = 0xd5\n\tSMART_READ_THRESHOLDS                = 0xd1\n\tSMART_READ_VALUES                    = 0xd0\n\tSMART_SAVE                           = 0xd3\n\tSMART_STATUS                         = 0xda\n\tSMART_WRITE_LOG_SECTOR               = 0xd6\n\tSMART_WRITE_THRESHOLDS               = 0xd7\n\tSMB_SUPER_MAGIC                      = 0x517b\n\tSOCKFS_MAGIC                         = 0x534f434b\n\tSOCK_CLOEXEC                         = 0x80000\n\tSOCK_DCCP                            = 0x6\n\tSOCK_DGRAM                           = 0x2\n\tSOCK_IOC_TYPE                        = 0x89\n\tSOCK_NONBLOCK                        = 0x800\n\tSOCK_PACKET                          = 0xa\n\tSOCK_RAW                             = 0x3\n\tSOCK_RDM                             = 0x4\n\tSOCK_SEQPACKET                       = 0x5\n\tSOCK_STREAM                          = 0x1\n\tSOL_AAL                              = 0x109\n\tSOL_ALG                              = 0x117\n\tSOL_ATM                              = 0x108\n\tSOL_CAIF                             = 0x116\n\tSOL_CAN_BASE                         = 0x64\n\tSOL_DCCP                             = 0x10d\n\tSOL_DECNET                           = 0x105\n\tSOL_ICMPV6                           = 0x3a\n\tSOL_IP                               = 0x0\n\tSOL_IPV6                             = 0x29\n\tSOL_IRDA                             = 0x10a\n\tSOL_IUCV                             = 0x115\n\tSOL_KCM                              = 0x119\n\tSOL_LLC                              = 0x10c\n\tSOL_NETBEUI                          = 0x10b\n\tSOL_NETLINK                          = 0x10e\n\tSOL_NFC                              = 0x118\n\tSOL_PACKET                           = 0x107\n\tSOL_PNPIPE                           = 0x113\n\tSOL_PPPOL2TP                         = 0x111\n\tSOL_RAW                              = 0xff\n\tSOL_RDS                              = 0x114\n\tSOL_RXRPC                            = 0x110\n\tSOL_SOCKET                           = 0x1\n\tSOL_TCP                              = 0x6\n\tSOL_TIPC                             = 0x10f\n\tSOL_TLS                              = 0x11a\n\tSOL_X25                              = 0x106\n\tSOL_XDP                              = 0x11b\n\tSOMAXCONN                            = 0x80\n\tSO_ACCEPTCONN                        = 0x1e\n\tSO_ATTACH_BPF                        = 0x32\n\tSO_ATTACH_FILTER                     = 0x1a\n\tSO_ATTACH_REUSEPORT_CBPF             = 0x33\n\tSO_ATTACH_REUSEPORT_EBPF             = 0x34\n\tSO_BINDTODEVICE                      = 0x19\n\tSO_BINDTOIFINDEX                     = 0x3e\n\tSO_BPF_EXTENSIONS                    = 0x30\n\tSO_BROADCAST                         = 0x6\n\tSO_BSDCOMPAT                         = 0xe\n\tSO_BUSY_POLL                         = 0x2e\n\tSO_CNX_ADVICE                        = 0x35\n\tSO_COOKIE                            = 0x39\n\tSO_DEBUG                             = 0x1\n\tSO_DETACH_BPF                        = 0x1b\n\tSO_DETACH_FILTER                     = 0x1b\n\tSO_DOMAIN                            = 0x27\n\tSO_DONTROUTE                         = 0x5\n\tSO_EE_CODE_TXTIME_INVALID_PARAM      = 0x1\n\tSO_EE_CODE_TXTIME_MISSED             = 0x2\n\tSO_EE_CODE_ZEROCOPY_COPIED           = 0x1\n\tSO_EE_ORIGIN_ICMP                    = 0x2\n\tSO_EE_ORIGIN_ICMP6                   = 0x3\n\tSO_EE_ORIGIN_LOCAL                   = 0x1\n\tSO_EE_ORIGIN_NONE                    = 0x0\n\tSO_EE_ORIGIN_TIMESTAMPING            = 0x4\n\tSO_EE_ORIGIN_TXSTATUS                = 0x4\n\tSO_EE_ORIGIN_TXTIME                  = 0x6\n\tSO_EE_ORIGIN_ZEROCOPY                = 0x5\n\tSO_ERROR                             = 0x4\n\tSO_GET_FILTER                        = 0x1a\n\tSO_INCOMING_CPU                      = 0x31\n\tSO_INCOMING_NAPI_ID                  = 0x38\n\tSO_KEEPALIVE                         = 0x9\n\tSO_LINGER                            = 0xd\n\tSO_LOCK_FILTER                       = 0x2c\n\tSO_MARK                              = 0x24\n\tSO_MAX_PACING_RATE                   = 0x2f\n\tSO_MEMINFO                           = 0x37\n\tSO_NOFCS                             = 0x2b\n\tSO_NO_CHECK                          = 0xb\n\tSO_OOBINLINE                         = 0xa\n\tSO_PASSCRED                          = 0x10\n\tSO_PASSSEC                           = 0x22\n\tSO_PEEK_OFF                          = 0x2a\n\tSO_PEERCRED                          = 0x11\n\tSO_PEERGROUPS                        = 0x3b\n\tSO_PEERNAME                          = 0x1c\n\tSO_PEERSEC                           = 0x1f\n\tSO_PRIORITY                          = 0xc\n\tSO_PROTOCOL                          = 0x26\n\tSO_RCVBUF                            = 0x8\n\tSO_RCVBUFFORCE                       = 0x21\n\tSO_RCVLOWAT                          = 0x12\n\tSO_RCVTIMEO                          = 0x14\n\tSO_RCVTIMEO_NEW                      = 0x42\n\tSO_RCVTIMEO_OLD                      = 0x14\n\tSO_REUSEADDR                         = 0x2\n\tSO_REUSEPORT                         = 0xf\n\tSO_RXQ_OVFL                          = 0x28\n\tSO_SECURITY_AUTHENTICATION           = 0x16\n\tSO_SECURITY_ENCRYPTION_NETWORK       = 0x18\n\tSO_SECURITY_ENCRYPTION_TRANSPORT     = 0x17\n\tSO_SELECT_ERR_QUEUE                  = 0x2d\n\tSO_SNDBUF                            = 0x7\n\tSO_SNDBUFFORCE                       = 0x20\n\tSO_SNDLOWAT                          = 0x13\n\tSO_SNDTIMEO                          = 0x15\n\tSO_SNDTIMEO_NEW                      = 0x43\n\tSO_SNDTIMEO_OLD                      = 0x15\n\tSO_TIMESTAMP                         = 0x1d\n\tSO_TIMESTAMPING                      = 0x25\n\tSO_TIMESTAMPING_NEW                  = 0x41\n\tSO_TIMESTAMPING_OLD                  = 0x25\n\tSO_TIMESTAMPNS                       = 0x23\n\tSO_TIMESTAMPNS_NEW                   = 0x40\n\tSO_TIMESTAMPNS_OLD                   = 0x23\n\tSO_TIMESTAMP_NEW                     = 0x3f\n\tSO_TIMESTAMP_OLD                     = 0x1d\n\tSO_TXTIME                            = 0x3d\n\tSO_TYPE                              = 0x3\n\tSO_VM_SOCKETS_BUFFER_MAX_SIZE        = 0x2\n\tSO_VM_SOCKETS_BUFFER_MIN_SIZE        = 0x1\n\tSO_VM_SOCKETS_BUFFER_SIZE            = 0x0\n\tSO_VM_SOCKETS_CONNECT_TIMEOUT        = 0x6\n\tSO_VM_SOCKETS_NONBLOCK_TXRX          = 0x7\n\tSO_VM_SOCKETS_PEER_HOST_VM_ID        = 0x3\n\tSO_VM_SOCKETS_TRUSTED                = 0x5\n\tSO_WIFI_STATUS                       = 0x29\n\tSO_ZEROCOPY                          = 0x3c\n\tSPLICE_F_GIFT                        = 0x8\n\tSPLICE_F_MORE                        = 0x4\n\tSPLICE_F_MOVE                        = 0x1\n\tSPLICE_F_NONBLOCK                    = 0x2\n\tSQUASHFS_MAGIC                       = 0x73717368\n\tSTACK_END_MAGIC                      = 0x57ac6e9d\n\tSTATX_ALL                            = 0xfff\n\tSTATX_ATIME                          = 0x20\n\tSTATX_ATTR_APPEND                    = 0x20\n\tSTATX_ATTR_AUTOMOUNT                 = 0x1000\n\tSTATX_ATTR_COMPRESSED                = 0x4\n\tSTATX_ATTR_ENCRYPTED                 = 0x800\n\tSTATX_ATTR_IMMUTABLE                 = 0x10\n\tSTATX_ATTR_NODUMP                    = 0x40\n\tSTATX_BASIC_STATS                    = 0x7ff\n\tSTATX_BLOCKS                         = 0x400\n\tSTATX_BTIME                          = 0x800\n\tSTATX_CTIME                          = 0x80\n\tSTATX_GID                            = 0x10\n\tSTATX_INO                            = 0x100\n\tSTATX_MODE                           = 0x2\n\tSTATX_MTIME                          = 0x40\n\tSTATX_NLINK                          = 0x4\n\tSTATX_SIZE                           = 0x200\n\tSTATX_TYPE                           = 0x1\n\tSTATX_UID                            = 0x8\n\tSTATX__RESERVED                      = 0x80000000\n\tSYNC_FILE_RANGE_WAIT_AFTER           = 0x4\n\tSYNC_FILE_RANGE_WAIT_BEFORE          = 0x1\n\tSYNC_FILE_RANGE_WRITE                = 0x2\n\tSYSFS_MAGIC                          = 0x62656572\n\tS_BLKSIZE                            = 0x200\n\tS_IEXEC                              = 0x40\n\tS_IFBLK                              = 0x6000\n\tS_IFCHR                              = 0x2000\n\tS_IFDIR                              = 0x4000\n\tS_IFIFO                              = 0x1000\n\tS_IFLNK                              = 0xa000\n\tS_IFMT                               = 0xf000\n\tS_IFREG                              = 0x8000\n\tS_IFSOCK                             = 0xc000\n\tS_IREAD                              = 0x100\n\tS_IRGRP                              = 0x20\n\tS_IROTH                              = 0x4\n\tS_IRUSR                              = 0x100\n\tS_IRWXG                              = 0x38\n\tS_IRWXO                              = 0x7\n\tS_IRWXU                              = 0x1c0\n\tS_ISGID                              = 0x400\n\tS_ISUID                              = 0x800\n\tS_ISVTX                              = 0x200\n\tS_IWGRP                              = 0x10\n\tS_IWOTH                              = 0x2\n\tS_IWRITE                             = 0x80\n\tS_IWUSR                              = 0x80\n\tS_IXGRP                              = 0x8\n\tS_IXOTH                              = 0x1\n\tS_IXUSR                              = 0x40\n\tTAB0                                 = 0x0\n\tTAB1                                 = 0x800\n\tTAB2                                 = 0x1000\n\tTAB3                                 = 0x1800\n\tTABDLY                               = 0x1800\n\tTASKSTATS_CMD_ATTR_MAX               = 0x4\n\tTASKSTATS_CMD_MAX                    = 0x2\n\tTASKSTATS_GENL_NAME                  = \"TASKSTATS\"\n\tTASKSTATS_GENL_VERSION               = 0x1\n\tTASKSTATS_TYPE_MAX                   = 0x6\n\tTASKSTATS_VERSION                    = 0x9\n\tTCFLSH                               = 0x540b\n\tTCGETA                               = 0x5405\n\tTCGETS                               = 0x5401\n\tTCGETS2                              = 0x802c542a\n\tTCGETX                               = 0x5432\n\tTCIFLUSH                             = 0x0\n\tTCIOFF                               = 0x2\n\tTCIOFLUSH                            = 0x2\n\tTCION                                = 0x3\n\tTCOFLUSH                             = 0x1\n\tTCOOFF                               = 0x0\n\tTCOON                                = 0x1\n\tTCP_BPF_IW                           = 0x3e9\n\tTCP_BPF_SNDCWND_CLAMP                = 0x3ea\n\tTCP_CC_INFO                          = 0x1a\n\tTCP_CM_INQ                           = 0x24\n\tTCP_CONGESTION                       = 0xd\n\tTCP_COOKIE_IN_ALWAYS                 = 0x1\n\tTCP_COOKIE_MAX                       = 0x10\n\tTCP_COOKIE_MIN                       = 0x8\n\tTCP_COOKIE_OUT_NEVER                 = 0x2\n\tTCP_COOKIE_PAIR_SIZE                 = 0x20\n\tTCP_COOKIE_TRANSACTIONS              = 0xf\n\tTCP_CORK                             = 0x3\n\tTCP_DEFER_ACCEPT                     = 0x9\n\tTCP_FASTOPEN                         = 0x17\n\tTCP_FASTOPEN_CONNECT                 = 0x1e\n\tTCP_FASTOPEN_KEY                     = 0x21\n\tTCP_FASTOPEN_NO_COOKIE               = 0x22\n\tTCP_INFO                             = 0xb\n\tTCP_INQ                              = 0x24\n\tTCP_KEEPCNT                          = 0x6\n\tTCP_KEEPIDLE                         = 0x4\n\tTCP_KEEPINTVL                        = 0x5\n\tTCP_LINGER2                          = 0x8\n\tTCP_MAXSEG                           = 0x2\n\tTCP_MAXWIN                           = 0xffff\n\tTCP_MAX_WINSHIFT                     = 0xe\n\tTCP_MD5SIG                           = 0xe\n\tTCP_MD5SIG_EXT                       = 0x20\n\tTCP_MD5SIG_FLAG_PREFIX               = 0x1\n\tTCP_MD5SIG_MAXKEYLEN                 = 0x50\n\tTCP_MSS                              = 0x200\n\tTCP_MSS_DEFAULT                      = 0x218\n\tTCP_MSS_DESIRED                      = 0x4c4\n\tTCP_NODELAY                          = 0x1\n\tTCP_NOTSENT_LOWAT                    = 0x19\n\tTCP_QUEUE_SEQ                        = 0x15\n\tTCP_QUICKACK                         = 0xc\n\tTCP_REPAIR                           = 0x13\n\tTCP_REPAIR_OFF                       = 0x0\n\tTCP_REPAIR_OFF_NO_WP                 = -0x1\n\tTCP_REPAIR_ON                        = 0x1\n\tTCP_REPAIR_OPTIONS                   = 0x16\n\tTCP_REPAIR_QUEUE                     = 0x14\n\tTCP_REPAIR_WINDOW                    = 0x1d\n\tTCP_SAVED_SYN                        = 0x1c\n\tTCP_SAVE_SYN                         = 0x1b\n\tTCP_SYNCNT                           = 0x7\n\tTCP_S_DATA_IN                        = 0x4\n\tTCP_S_DATA_OUT                       = 0x8\n\tTCP_THIN_DUPACK                      = 0x11\n\tTCP_THIN_LINEAR_TIMEOUTS             = 0x10\n\tTCP_TIMESTAMP                        = 0x18\n\tTCP_ULP                              = 0x1f\n\tTCP_USER_TIMEOUT                     = 0x12\n\tTCP_WINDOW_CLAMP                     = 0xa\n\tTCP_ZEROCOPY_RECEIVE                 = 0x23\n\tTCSAFLUSH                            = 0x2\n\tTCSBRK                               = 0x5409\n\tTCSBRKP                              = 0x5425\n\tTCSETA                               = 0x5406\n\tTCSETAF                              = 0x5408\n\tTCSETAW                              = 0x5407\n\tTCSETS                               = 0x5402\n\tTCSETS2                              = 0x402c542b\n\tTCSETSF                              = 0x5404\n\tTCSETSF2                             = 0x402c542d\n\tTCSETSW                              = 0x5403\n\tTCSETSW2                             = 0x402c542c\n\tTCSETX                               = 0x5433\n\tTCSETXF                              = 0x5434\n\tTCSETXW                              = 0x5435\n\tTCXONC                               = 0x540a\n\tTIMER_ABSTIME                        = 0x1\n\tTIOCCBRK                             = 0x5428\n\tTIOCCONS                             = 0x541d\n\tTIOCEXCL                             = 0x540c\n\tTIOCGDEV                             = 0x80045432\n\tTIOCGETD                             = 0x5424\n\tTIOCGEXCL                            = 0x80045440\n\tTIOCGICOUNT                          = 0x545d\n\tTIOCGISO7816                         = 0x80285442\n\tTIOCGLCKTRMIOS                       = 0x5456\n\tTIOCGPGRP                            = 0x540f\n\tTIOCGPKT                             = 0x80045438\n\tTIOCGPTLCK                           = 0x80045439\n\tTIOCGPTN                             = 0x80045430\n\tTIOCGPTPEER                          = 0x5441\n\tTIOCGRS485                           = 0x542e\n\tTIOCGSERIAL                          = 0x541e\n\tTIOCGSID                             = 0x5429\n\tTIOCGSOFTCAR                         = 0x5419\n\tTIOCGWINSZ                           = 0x5413\n\tTIOCINQ                              = 0x541b\n\tTIOCLINUX                            = 0x541c\n\tTIOCMBIC                             = 0x5417\n\tTIOCMBIS                             = 0x5416\n\tTIOCMGET                             = 0x5415\n\tTIOCMIWAIT                           = 0x545c\n\tTIOCMSET                             = 0x5418\n\tTIOCM_CAR                            = 0x40\n\tTIOCM_CD                             = 0x40\n\tTIOCM_CTS                            = 0x20\n\tTIOCM_DSR                            = 0x100\n\tTIOCM_DTR                            = 0x2\n\tTIOCM_LE                             = 0x1\n\tTIOCM_RI                             = 0x80\n\tTIOCM_RNG                            = 0x80\n\tTIOCM_RTS                            = 0x4\n\tTIOCM_SR                             = 0x10\n\tTIOCM_ST                             = 0x8\n\tTIOCNOTTY                            = 0x5422\n\tTIOCNXCL                             = 0x540d\n\tTIOCOUTQ                             = 0x5411\n\tTIOCPKT                              = 0x5420\n\tTIOCPKT_DATA                         = 0x0\n\tTIOCPKT_DOSTOP                       = 0x20\n\tTIOCPKT_FLUSHREAD                    = 0x1\n\tTIOCPKT_FLUSHWRITE                   = 0x2\n\tTIOCPKT_IOCTL                        = 0x40\n\tTIOCPKT_NOSTOP                       = 0x10\n\tTIOCPKT_START                        = 0x8\n\tTIOCPKT_STOP                         = 0x4\n\tTIOCSBRK                             = 0x5427\n\tTIOCSCTTY                            = 0x540e\n\tTIOCSERCONFIG                        = 0x5453\n\tTIOCSERGETLSR                        = 0x5459\n\tTIOCSERGETMULTI                      = 0x545a\n\tTIOCSERGSTRUCT                       = 0x5458\n\tTIOCSERGWILD                         = 0x5454\n\tTIOCSERSETMULTI                      = 0x545b\n\tTIOCSERSWILD                         = 0x5455\n\tTIOCSER_TEMT                         = 0x1\n\tTIOCSETD                             = 0x5423\n\tTIOCSIG                              = 0x40045436\n\tTIOCSISO7816                         = 0xc0285443\n\tTIOCSLCKTRMIOS                       = 0x5457\n\tTIOCSPGRP                            = 0x5410\n\tTIOCSPTLCK                           = 0x40045431\n\tTIOCSRS485                           = 0x542f\n\tTIOCSSERIAL                          = 0x541f\n\tTIOCSSOFTCAR                         = 0x541a\n\tTIOCSTI                              = 0x5412\n\tTIOCSWINSZ                           = 0x5414\n\tTIOCVHANGUP                          = 0x5437\n\tTMPFS_MAGIC                          = 0x1021994\n\tTOSTOP                               = 0x100\n\tTPACKET_ALIGNMENT                    = 0x10\n\tTPACKET_HDRLEN                       = 0x34\n\tTP_STATUS_AVAILABLE                  = 0x0\n\tTP_STATUS_BLK_TMO                    = 0x20\n\tTP_STATUS_COPY                       = 0x2\n\tTP_STATUS_CSUMNOTREADY               = 0x8\n\tTP_STATUS_CSUM_VALID                 = 0x80\n\tTP_STATUS_KERNEL                     = 0x0\n\tTP_STATUS_LOSING                     = 0x4\n\tTP_STATUS_SENDING                    = 0x2\n\tTP_STATUS_SEND_REQUEST               = 0x1\n\tTP_STATUS_TS_RAW_HARDWARE            = -0x80000000\n\tTP_STATUS_TS_SOFTWARE                = 0x20000000\n\tTP_STATUS_TS_SYS_HARDWARE            = 0x40000000\n\tTP_STATUS_USER                       = 0x1\n\tTP_STATUS_VLAN_TPID_VALID            = 0x40\n\tTP_STATUS_VLAN_VALID                 = 0x10\n\tTP_STATUS_WRONG_FORMAT               = 0x4\n\tTRACEFS_MAGIC                        = 0x74726163\n\tTS_COMM_LEN                          = 0x20\n\tTUNATTACHFILTER                      = 0x400854d5\n\tTUNDETACHFILTER                      = 0x400854d6\n\tTUNGETFEATURES                       = 0x800454cf\n\tTUNGETFILTER                         = 0x800854db\n\tTUNGETIFF                            = 0x800454d2\n\tTUNGETSNDBUF                         = 0x800454d3\n\tTUNGETVNETBE                         = 0x800454df\n\tTUNGETVNETHDRSZ                      = 0x800454d7\n\tTUNGETVNETLE                         = 0x800454dd\n\tTUNSETCARRIER                        = 0x400454e2\n\tTUNSETDEBUG                          = 0x400454c9\n\tTUNSETFILTEREBPF                     = 0x800454e1\n\tTUNSETGROUP                          = 0x400454ce\n\tTUNSETIFF                            = 0x400454ca\n\tTUNSETIFINDEX                        = 0x400454da\n\tTUNSETLINK                           = 0x400454cd\n\tTUNSETNOCSUM                         = 0x400454c8\n\tTUNSETOFFLOAD                        = 0x400454d0\n\tTUNSETOWNER                          = 0x400454cc\n\tTUNSETPERSIST                        = 0x400454cb\n\tTUNSETQUEUE                          = 0x400454d9\n\tTUNSETSNDBUF                         = 0x400454d4\n\tTUNSETSTEERINGEBPF                   = 0x800454e0\n\tTUNSETTXFILTER                       = 0x400454d1\n\tTUNSETVNETBE                         = 0x400454de\n\tTUNSETVNETHDRSZ                      = 0x400454d8\n\tTUNSETVNETLE                         = 0x400454dc\n\tUBI_IOCATT                           = 0x40186f40\n\tUBI_IOCDET                           = 0x40046f41\n\tUBI_IOCEBCH                          = 0x40044f02\n\tUBI_IOCEBER                          = 0x40044f01\n\tUBI_IOCEBISMAP                       = 0x80044f05\n\tUBI_IOCEBMAP                         = 0x40084f03\n\tUBI_IOCEBUNMAP                       = 0x40044f04\n\tUBI_IOCMKVOL                         = 0x40986f00\n\tUBI_IOCRMVOL                         = 0x40046f01\n\tUBI_IOCRNVOL                         = 0x51106f03\n\tUBI_IOCRPEB                          = 0x40046f04\n\tUBI_IOCRSVOL                         = 0x400c6f02\n\tUBI_IOCSETVOLPROP                    = 0x40104f06\n\tUBI_IOCSPEB                          = 0x40046f05\n\tUBI_IOCVOLCRBLK                      = 0x40804f07\n\tUBI_IOCVOLRMBLK                      = 0x4f08\n\tUBI_IOCVOLUP                         = 0x40084f00\n\tUDF_SUPER_MAGIC                      = 0x15013346\n\tUMOUNT_NOFOLLOW                      = 0x8\n\tUSBDEVICE_SUPER_MAGIC                = 0x9fa2\n\tUTIME_NOW                            = 0x3fffffff\n\tUTIME_OMIT                           = 0x3ffffffe\n\tV9FS_MAGIC                           = 0x1021997\n\tVDISCARD                             = 0xd\n\tVEOF                                 = 0x4\n\tVEOL                                 = 0xb\n\tVEOL2                                = 0x10\n\tVERASE                               = 0x2\n\tVINTR                                = 0x0\n\tVKILL                                = 0x3\n\tVLNEXT                               = 0xf\n\tVMADDR_CID_ANY                       = 0xffffffff\n\tVMADDR_CID_HOST                      = 0x2\n\tVMADDR_CID_HYPERVISOR                = 0x0\n\tVMADDR_CID_RESERVED                  = 0x1\n\tVMADDR_PORT_ANY                      = 0xffffffff\n\tVMIN                                 = 0x6\n\tVM_SOCKETS_INVALID_VERSION           = 0xffffffff\n\tVQUIT                                = 0x1\n\tVREPRINT                             = 0xc\n\tVSTART                               = 0x8\n\tVSTOP                                = 0x9\n\tVSUSP                                = 0xa\n\tVSWTC                                = 0x7\n\tVT0                                  = 0x0\n\tVT1                                  = 0x4000\n\tVTDLY                                = 0x4000\n\tVTIME                                = 0x5\n\tVWERASE                              = 0xe\n\tWALL                                 = 0x40000000\n\tWCLONE                               = 0x80000000\n\tWCONTINUED                           = 0x8\n\tWDIOC_GETBOOTSTATUS                  = 0x80045702\n\tWDIOC_GETPRETIMEOUT                  = 0x80045709\n\tWDIOC_GETSTATUS                      = 0x80045701\n\tWDIOC_GETSUPPORT                     = 0x80285700\n\tWDIOC_GETTEMP                        = 0x80045703\n\tWDIOC_GETTIMELEFT                    = 0x8004570a\n\tWDIOC_GETTIMEOUT                     = 0x80045707\n\tWDIOC_KEEPALIVE                      = 0x80045705\n\tWDIOC_SETOPTIONS                     = 0x80045704\n\tWDIOC_SETPRETIMEOUT                  = 0xc0045708\n\tWDIOC_SETTIMEOUT                     = 0xc0045706\n\tWEXITED                              = 0x4\n\tWIN_ACKMEDIACHANGE                   = 0xdb\n\tWIN_CHECKPOWERMODE1                  = 0xe5\n\tWIN_CHECKPOWERMODE2                  = 0x98\n\tWIN_DEVICE_RESET                     = 0x8\n\tWIN_DIAGNOSE                         = 0x90\n\tWIN_DOORLOCK                         = 0xde\n\tWIN_DOORUNLOCK                       = 0xdf\n\tWIN_DOWNLOAD_MICROCODE               = 0x92\n\tWIN_FLUSH_CACHE                      = 0xe7\n\tWIN_FLUSH_CACHE_EXT                  = 0xea\n\tWIN_FORMAT                           = 0x50\n\tWIN_GETMEDIASTATUS                   = 0xda\n\tWIN_IDENTIFY                         = 0xec\n\tWIN_IDENTIFY_DMA                     = 0xee\n\tWIN_IDLEIMMEDIATE                    = 0xe1\n\tWIN_INIT                             = 0x60\n\tWIN_MEDIAEJECT                       = 0xed\n\tWIN_MULTREAD                         = 0xc4\n\tWIN_MULTREAD_EXT                     = 0x29\n\tWIN_MULTWRITE                        = 0xc5\n\tWIN_MULTWRITE_EXT                    = 0x39\n\tWIN_NOP                              = 0x0\n\tWIN_PACKETCMD                        = 0xa0\n\tWIN_PIDENTIFY                        = 0xa1\n\tWIN_POSTBOOT                         = 0xdc\n\tWIN_PREBOOT                          = 0xdd\n\tWIN_QUEUED_SERVICE                   = 0xa2\n\tWIN_READ                             = 0x20\n\tWIN_READDMA                          = 0xc8\n\tWIN_READDMA_EXT                      = 0x25\n\tWIN_READDMA_ONCE                     = 0xc9\n\tWIN_READDMA_QUEUED                   = 0xc7\n\tWIN_READDMA_QUEUED_EXT               = 0x26\n\tWIN_READ_BUFFER                      = 0xe4\n\tWIN_READ_EXT                         = 0x24\n\tWIN_READ_LONG                        = 0x22\n\tWIN_READ_LONG_ONCE                   = 0x23\n\tWIN_READ_NATIVE_MAX                  = 0xf8\n\tWIN_READ_NATIVE_MAX_EXT              = 0x27\n\tWIN_READ_ONCE                        = 0x21\n\tWIN_RECAL                            = 0x10\n\tWIN_RESTORE                          = 0x10\n\tWIN_SECURITY_DISABLE                 = 0xf6\n\tWIN_SECURITY_ERASE_PREPARE           = 0xf3\n\tWIN_SECURITY_ERASE_UNIT              = 0xf4\n\tWIN_SECURITY_FREEZE_LOCK             = 0xf5\n\tWIN_SECURITY_SET_PASS                = 0xf1\n\tWIN_SECURITY_UNLOCK                  = 0xf2\n\tWIN_SEEK                             = 0x70\n\tWIN_SETFEATURES                      = 0xef\n\tWIN_SETIDLE1                         = 0xe3\n\tWIN_SETIDLE2                         = 0x97\n\tWIN_SETMULT                          = 0xc6\n\tWIN_SET_MAX                          = 0xf9\n\tWIN_SET_MAX_EXT                      = 0x37\n\tWIN_SLEEPNOW1                        = 0xe6\n\tWIN_SLEEPNOW2                        = 0x99\n\tWIN_SMART                            = 0xb0\n\tWIN_SPECIFY                          = 0x91\n\tWIN_SRST                             = 0x8\n\tWIN_STANDBY                          = 0xe2\n\tWIN_STANDBY2                         = 0x96\n\tWIN_STANDBYNOW1                      = 0xe0\n\tWIN_STANDBYNOW2                      = 0x94\n\tWIN_VERIFY                           = 0x40\n\tWIN_VERIFY_EXT                       = 0x42\n\tWIN_VERIFY_ONCE                      = 0x41\n\tWIN_WRITE                            = 0x30\n\tWIN_WRITEDMA                         = 0xca\n\tWIN_WRITEDMA_EXT                     = 0x35\n\tWIN_WRITEDMA_ONCE                    = 0xcb\n\tWIN_WRITEDMA_QUEUED                  = 0xcc\n\tWIN_WRITEDMA_QUEUED_EXT              = 0x36\n\tWIN_WRITE_BUFFER                     = 0xe8\n\tWIN_WRITE_EXT                        = 0x34\n\tWIN_WRITE_LONG                       = 0x32\n\tWIN_WRITE_LONG_ONCE                  = 0x33\n\tWIN_WRITE_ONCE                       = 0x31\n\tWIN_WRITE_SAME                       = 0xe9\n\tWIN_WRITE_VERIFY                     = 0x3c\n\tWNOHANG                              = 0x1\n\tWNOTHREAD                            = 0x20000000\n\tWNOWAIT                              = 0x1000000\n\tWORDSIZE                             = 0x20\n\tWSTOPPED                             = 0x2\n\tWUNTRACED                            = 0x2\n\tXATTR_CREATE                         = 0x1\n\tXATTR_REPLACE                        = 0x2\n\tXCASE                                = 0x4\n\tXDP_COPY                             = 0x2\n\tXDP_FLAGS_DRV_MODE                   = 0x4\n\tXDP_FLAGS_HW_MODE                    = 0x8\n\tXDP_FLAGS_MASK                       = 0xf\n\tXDP_FLAGS_MODES                      = 0xe\n\tXDP_FLAGS_SKB_MODE                   = 0x2\n\tXDP_FLAGS_UPDATE_IF_NOEXIST          = 0x1\n\tXDP_MMAP_OFFSETS                     = 0x1\n\tXDP_PACKET_HEADROOM                  = 0x100\n\tXDP_PGOFF_RX_RING                    = 0x0\n\tXDP_PGOFF_TX_RING                    = 0x80000000\n\tXDP_RX_RING                          = 0x2\n\tXDP_SHARED_UMEM                      = 0x1\n\tXDP_STATISTICS                       = 0x7\n\tXDP_TX_RING                          = 0x3\n\tXDP_UMEM_COMPLETION_RING             = 0x6\n\tXDP_UMEM_FILL_RING                   = 0x5\n\tXDP_UMEM_PGOFF_COMPLETION_RING       = 0x180000000\n\tXDP_UMEM_PGOFF_FILL_RING             = 0x100000000\n\tXDP_UMEM_REG                         = 0x4\n\tXDP_ZEROCOPY                         = 0x4\n\tXENFS_SUPER_MAGIC                    = 0xabba1974\n\tXFS_SUPER_MAGIC                      = 0x58465342\n\tXTABS                                = 0x1800\n\tZSMALLOC_MAGIC                       = 0x58295829\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x62)\n\tEADDRNOTAVAIL   = syscall.Errno(0x63)\n\tEADV            = syscall.Errno(0x44)\n\tEAFNOSUPPORT    = syscall.Errno(0x61)\n\tEAGAIN          = syscall.Errno(0xb)\n\tEALREADY        = syscall.Errno(0x72)\n\tEBADE           = syscall.Errno(0x34)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADFD          = syscall.Errno(0x4d)\n\tEBADMSG         = syscall.Errno(0x4a)\n\tEBADR           = syscall.Errno(0x35)\n\tEBADRQC         = syscall.Errno(0x38)\n\tEBADSLT         = syscall.Errno(0x39)\n\tEBFONT          = syscall.Errno(0x3b)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x7d)\n\tECHILD          = syscall.Errno(0xa)\n\tECHRNG          = syscall.Errno(0x2c)\n\tECOMM           = syscall.Errno(0x46)\n\tECONNABORTED    = syscall.Errno(0x67)\n\tECONNREFUSED    = syscall.Errno(0x6f)\n\tECONNRESET      = syscall.Errno(0x68)\n\tEDEADLK         = syscall.Errno(0x23)\n\tEDEADLOCK       = syscall.Errno(0x23)\n\tEDESTADDRREQ    = syscall.Errno(0x59)\n\tEDOM            = syscall.Errno(0x21)\n\tEDOTDOT         = syscall.Errno(0x49)\n\tEDQUOT          = syscall.Errno(0x7a)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEHOSTDOWN       = syscall.Errno(0x70)\n\tEHOSTUNREACH    = syscall.Errno(0x71)\n\tEHWPOISON       = syscall.Errno(0x85)\n\tEIDRM           = syscall.Errno(0x2b)\n\tEILSEQ          = syscall.Errno(0x54)\n\tEINPROGRESS     = syscall.Errno(0x73)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEISCONN         = syscall.Errno(0x6a)\n\tEISDIR          = syscall.Errno(0x15)\n\tEISNAM          = syscall.Errno(0x78)\n\tEKEYEXPIRED     = syscall.Errno(0x7f)\n\tEKEYREJECTED    = syscall.Errno(0x81)\n\tEKEYREVOKED     = syscall.Errno(0x80)\n\tEL2HLT          = syscall.Errno(0x33)\n\tEL2NSYNC        = syscall.Errno(0x2d)\n\tEL3HLT          = syscall.Errno(0x2e)\n\tEL3RST          = syscall.Errno(0x2f)\n\tELIBACC         = syscall.Errno(0x4f)\n\tELIBBAD         = syscall.Errno(0x50)\n\tELIBEXEC        = syscall.Errno(0x53)\n\tELIBMAX         = syscall.Errno(0x52)\n\tELIBSCN         = syscall.Errno(0x51)\n\tELNRNG          = syscall.Errno(0x30)\n\tELOOP           = syscall.Errno(0x28)\n\tEMEDIUMTYPE     = syscall.Errno(0x7c)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x5a)\n\tEMULTIHOP       = syscall.Errno(0x48)\n\tENAMETOOLONG    = syscall.Errno(0x24)\n\tENAVAIL         = syscall.Errno(0x77)\n\tENETDOWN        = syscall.Errno(0x64)\n\tENETRESET       = syscall.Errno(0x66)\n\tENETUNREACH     = syscall.Errno(0x65)\n\tENFILE          = syscall.Errno(0x17)\n\tENOANO          = syscall.Errno(0x37)\n\tENOBUFS         = syscall.Errno(0x69)\n\tENOCSI          = syscall.Errno(0x32)\n\tENODATA         = syscall.Errno(0x3d)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOKEY          = syscall.Errno(0x7e)\n\tENOLCK          = syscall.Errno(0x25)\n\tENOLINK         = syscall.Errno(0x43)\n\tENOMEDIUM       = syscall.Errno(0x7b)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x2a)\n\tENONET          = syscall.Errno(0x40)\n\tENOPKG          = syscall.Errno(0x41)\n\tENOPROTOOPT     = syscall.Errno(0x5c)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSR           = syscall.Errno(0x3f)\n\tENOSTR          = syscall.Errno(0x3c)\n\tENOSYS          = syscall.Errno(0x26)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x6b)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x27)\n\tENOTNAM         = syscall.Errno(0x76)\n\tENOTRECOVERABLE = syscall.Errno(0x83)\n\tENOTSOCK        = syscall.Errno(0x58)\n\tENOTSUP         = syscall.Errno(0x5f)\n\tENOTTY          = syscall.Errno(0x19)\n\tENOTUNIQ        = syscall.Errno(0x4c)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x5f)\n\tEOVERFLOW       = syscall.Errno(0x4b)\n\tEOWNERDEAD      = syscall.Errno(0x82)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x60)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROTO          = syscall.Errno(0x47)\n\tEPROTONOSUPPORT = syscall.Errno(0x5d)\n\tEPROTOTYPE      = syscall.Errno(0x5b)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMCHG         = syscall.Errno(0x4e)\n\tEREMOTE         = syscall.Errno(0x42)\n\tEREMOTEIO       = syscall.Errno(0x79)\n\tERESTART        = syscall.Errno(0x55)\n\tERFKILL         = syscall.Errno(0x84)\n\tEROFS           = syscall.Errno(0x1e)\n\tESHUTDOWN       = syscall.Errno(0x6c)\n\tESOCKTNOSUPPORT = syscall.Errno(0x5e)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESRMNT          = syscall.Errno(0x45)\n\tESTALE          = syscall.Errno(0x74)\n\tESTRPIPE        = syscall.Errno(0x56)\n\tETIME           = syscall.Errno(0x3e)\n\tETIMEDOUT       = syscall.Errno(0x6e)\n\tETOOMANYREFS    = syscall.Errno(0x6d)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUCLEAN         = syscall.Errno(0x75)\n\tEUNATCH         = syscall.Errno(0x31)\n\tEUSERS          = syscall.Errno(0x57)\n\tEWOULDBLOCK     = syscall.Errno(0xb)\n\tEXDEV           = syscall.Errno(0x12)\n\tEXFULL          = syscall.Errno(0x36)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0x7)\n\tSIGCHLD   = syscall.Signal(0x11)\n\tSIGCLD    = syscall.Signal(0x11)\n\tSIGCONT   = syscall.Signal(0x12)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x1d)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPOLL   = syscall.Signal(0x1d)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGPWR    = syscall.Signal(0x1e)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTKFLT = syscall.Signal(0x10)\n\tSIGSTOP   = syscall.Signal(0x13)\n\tSIGSYS    = syscall.Signal(0x1f)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x14)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x17)\n\tSIGUSR1   = syscall.Signal(0xa)\n\tSIGUSR2   = syscall.Signal(0xc)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"no such device or address\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device or resource busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"invalid cross-device link\"},\n\t{19, \"ENODEV\", \"no such device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"numerical result out of range\"},\n\t{35, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{36, \"ENAMETOOLONG\", \"file name too long\"},\n\t{37, \"ENOLCK\", \"no locks available\"},\n\t{38, \"ENOSYS\", \"function not implemented\"},\n\t{39, \"ENOTEMPTY\", \"directory not empty\"},\n\t{40, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{42, \"ENOMSG\", \"no message of desired type\"},\n\t{43, \"EIDRM\", \"identifier removed\"},\n\t{44, \"ECHRNG\", \"channel number out of range\"},\n\t{45, \"EL2NSYNC\", \"level 2 not synchronized\"},\n\t{46, \"EL3HLT\", \"level 3 halted\"},\n\t{47, \"EL3RST\", \"level 3 reset\"},\n\t{48, \"ELNRNG\", \"link number out of range\"},\n\t{49, \"EUNATCH\", \"protocol driver not attached\"},\n\t{50, \"ENOCSI\", \"no CSI structure available\"},\n\t{51, \"EL2HLT\", \"level 2 halted\"},\n\t{52, \"EBADE\", \"invalid exchange\"},\n\t{53, \"EBADR\", \"invalid request descriptor\"},\n\t{54, \"EXFULL\", \"exchange full\"},\n\t{55, \"ENOANO\", \"no anode\"},\n\t{56, \"EBADRQC\", \"invalid request code\"},\n\t{57, \"EBADSLT\", \"invalid slot\"},\n\t{59, \"EBFONT\", \"bad font file format\"},\n\t{60, \"ENOSTR\", \"device not a stream\"},\n\t{61, \"ENODATA\", \"no data available\"},\n\t{62, \"ETIME\", \"timer expired\"},\n\t{63, \"ENOSR\", \"out of streams resources\"},\n\t{64, \"ENONET\", \"machine is not on the network\"},\n\t{65, \"ENOPKG\", \"package not installed\"},\n\t{66, \"EREMOTE\", \"object is remote\"},\n\t{67, \"ENOLINK\", \"link has been severed\"},\n\t{68, \"EADV\", \"advertise error\"},\n\t{69, \"ESRMNT\", \"srmount error\"},\n\t{70, \"ECOMM\", \"communication error on send\"},\n\t{71, \"EPROTO\", \"protocol error\"},\n\t{72, \"EMULTIHOP\", \"multihop attempted\"},\n\t{73, \"EDOTDOT\", \"RFS specific error\"},\n\t{74, \"EBADMSG\", \"bad message\"},\n\t{75, \"EOVERFLOW\", \"value too large for defined data type\"},\n\t{76, \"ENOTUNIQ\", \"name not unique on network\"},\n\t{77, \"EBADFD\", \"file descriptor in bad state\"},\n\t{78, \"EREMCHG\", \"remote address changed\"},\n\t{79, \"ELIBACC\", \"can not access a needed shared library\"},\n\t{80, \"ELIBBAD\", \"accessing a corrupted shared library\"},\n\t{81, \"ELIBSCN\", \".lib section in a.out corrupted\"},\n\t{82, \"ELIBMAX\", \"attempting to link in too many shared libraries\"},\n\t{83, \"ELIBEXEC\", \"cannot exec a shared library directly\"},\n\t{84, \"EILSEQ\", \"invalid or incomplete multibyte or wide character\"},\n\t{85, \"ERESTART\", \"interrupted system call should be restarted\"},\n\t{86, \"ESTRPIPE\", \"streams pipe error\"},\n\t{87, \"EUSERS\", \"too many users\"},\n\t{88, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{89, \"EDESTADDRREQ\", \"destination address required\"},\n\t{90, \"EMSGSIZE\", \"message too long\"},\n\t{91, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{92, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{93, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{94, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{95, \"ENOTSUP\", \"operation not supported\"},\n\t{96, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{97, \"EAFNOSUPPORT\", \"address family not supported by protocol\"},\n\t{98, \"EADDRINUSE\", \"address already in use\"},\n\t{99, \"EADDRNOTAVAIL\", \"cannot assign requested address\"},\n\t{100, \"ENETDOWN\", \"network is down\"},\n\t{101, \"ENETUNREACH\", \"network is unreachable\"},\n\t{102, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{103, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{104, \"ECONNRESET\", \"connection reset by peer\"},\n\t{105, \"ENOBUFS\", \"no buffer space available\"},\n\t{106, \"EISCONN\", \"transport endpoint is already connected\"},\n\t{107, \"ENOTCONN\", \"transport endpoint is not connected\"},\n\t{108, \"ESHUTDOWN\", \"cannot send after transport endpoint shutdown\"},\n\t{109, \"ETOOMANYREFS\", \"too many references: cannot splice\"},\n\t{110, \"ETIMEDOUT\", \"connection timed out\"},\n\t{111, \"ECONNREFUSED\", \"connection refused\"},\n\t{112, \"EHOSTDOWN\", \"host is down\"},\n\t{113, \"EHOSTUNREACH\", \"no route to host\"},\n\t{114, \"EALREADY\", \"operation already in progress\"},\n\t{115, \"EINPROGRESS\", \"operation now in progress\"},\n\t{116, \"ESTALE\", \"stale file handle\"},\n\t{117, \"EUCLEAN\", \"structure needs cleaning\"},\n\t{118, \"ENOTNAM\", \"not a XENIX named type file\"},\n\t{119, \"ENAVAIL\", \"no XENIX semaphores available\"},\n\t{120, \"EISNAM\", \"is a named type file\"},\n\t{121, \"EREMOTEIO\", \"remote I/O error\"},\n\t{122, \"EDQUOT\", \"disk quota exceeded\"},\n\t{123, \"ENOMEDIUM\", \"no medium found\"},\n\t{124, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{125, \"ECANCELED\", \"operation canceled\"},\n\t{126, \"ENOKEY\", \"required key not available\"},\n\t{127, \"EKEYEXPIRED\", \"key has expired\"},\n\t{128, \"EKEYREVOKED\", \"key has been revoked\"},\n\t{129, \"EKEYREJECTED\", \"key was rejected by service\"},\n\t{130, \"EOWNERDEAD\", \"owner died\"},\n\t{131, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{132, \"ERFKILL\", \"operation not possible due to RF-kill\"},\n\t{133, \"EHWPOISON\", \"memory page has hardware error\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/breakpoint trap\"},\n\t{6, \"SIGABRT\", \"aborted\"},\n\t{7, \"SIGBUS\", \"bus error\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGUSR1\", \"user defined signal 1\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGUSR2\", \"user defined signal 2\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGSTKFLT\", \"stack fault\"},\n\t{17, \"SIGCHLD\", \"child exited\"},\n\t{18, \"SIGCONT\", \"continued\"},\n\t{19, \"SIGSTOP\", \"stopped (signal)\"},\n\t{20, \"SIGTSTP\", \"stopped\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGURG\", \"urgent I/O condition\"},\n\t{24, \"SIGXCPU\", \"CPU time limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"file size limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window changed\"},\n\t{29, \"SIGIO\", \"I/O possible\"},\n\t{30, \"SIGPWR\", \"power failure\"},\n\t{31, \"SIGSYS\", \"bad system call\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go",
    "content": "// mkerrors.sh -Wall -Werror -static -I/tmp/include -fsigned-char\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build arm64,linux\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAAFS_MAGIC                           = 0x5a3c69f0\n\tADFS_SUPER_MAGIC                     = 0xadf5\n\tAFFS_SUPER_MAGIC                     = 0xadff\n\tAFS_FS_MAGIC                         = 0x6b414653\n\tAFS_SUPER_MAGIC                      = 0x5346414f\n\tAF_ALG                               = 0x26\n\tAF_APPLETALK                         = 0x5\n\tAF_ASH                               = 0x12\n\tAF_ATMPVC                            = 0x8\n\tAF_ATMSVC                            = 0x14\n\tAF_AX25                              = 0x3\n\tAF_BLUETOOTH                         = 0x1f\n\tAF_BRIDGE                            = 0x7\n\tAF_CAIF                              = 0x25\n\tAF_CAN                               = 0x1d\n\tAF_DECnet                            = 0xc\n\tAF_ECONET                            = 0x13\n\tAF_FILE                              = 0x1\n\tAF_IB                                = 0x1b\n\tAF_IEEE802154                        = 0x24\n\tAF_INET                              = 0x2\n\tAF_INET6                             = 0xa\n\tAF_IPX                               = 0x4\n\tAF_IRDA                              = 0x17\n\tAF_ISDN                              = 0x22\n\tAF_IUCV                              = 0x20\n\tAF_KCM                               = 0x29\n\tAF_KEY                               = 0xf\n\tAF_LLC                               = 0x1a\n\tAF_LOCAL                             = 0x1\n\tAF_MAX                               = 0x2d\n\tAF_MPLS                              = 0x1c\n\tAF_NETBEUI                           = 0xd\n\tAF_NETLINK                           = 0x10\n\tAF_NETROM                            = 0x6\n\tAF_NFC                               = 0x27\n\tAF_PACKET                            = 0x11\n\tAF_PHONET                            = 0x23\n\tAF_PPPOX                             = 0x18\n\tAF_QIPCRTR                           = 0x2a\n\tAF_RDS                               = 0x15\n\tAF_ROSE                              = 0xb\n\tAF_ROUTE                             = 0x10\n\tAF_RXRPC                             = 0x21\n\tAF_SECURITY                          = 0xe\n\tAF_SMC                               = 0x2b\n\tAF_SNA                               = 0x16\n\tAF_TIPC                              = 0x1e\n\tAF_UNIX                              = 0x1\n\tAF_UNSPEC                            = 0x0\n\tAF_VSOCK                             = 0x28\n\tAF_WANPIPE                           = 0x19\n\tAF_X25                               = 0x9\n\tAF_XDP                               = 0x2c\n\tALG_OP_DECRYPT                       = 0x0\n\tALG_OP_ENCRYPT                       = 0x1\n\tALG_SET_AEAD_ASSOCLEN                = 0x4\n\tALG_SET_AEAD_AUTHSIZE                = 0x5\n\tALG_SET_IV                           = 0x2\n\tALG_SET_KEY                          = 0x1\n\tALG_SET_OP                           = 0x3\n\tANON_INODE_FS_MAGIC                  = 0x9041934\n\tARPHRD_6LOWPAN                       = 0x339\n\tARPHRD_ADAPT                         = 0x108\n\tARPHRD_APPLETLK                      = 0x8\n\tARPHRD_ARCNET                        = 0x7\n\tARPHRD_ASH                           = 0x30d\n\tARPHRD_ATM                           = 0x13\n\tARPHRD_AX25                          = 0x3\n\tARPHRD_BIF                           = 0x307\n\tARPHRD_CAIF                          = 0x336\n\tARPHRD_CAN                           = 0x118\n\tARPHRD_CHAOS                         = 0x5\n\tARPHRD_CISCO                         = 0x201\n\tARPHRD_CSLIP                         = 0x101\n\tARPHRD_CSLIP6                        = 0x103\n\tARPHRD_DDCMP                         = 0x205\n\tARPHRD_DLCI                          = 0xf\n\tARPHRD_ECONET                        = 0x30e\n\tARPHRD_EETHER                        = 0x2\n\tARPHRD_ETHER                         = 0x1\n\tARPHRD_EUI64                         = 0x1b\n\tARPHRD_FCAL                          = 0x311\n\tARPHRD_FCFABRIC                      = 0x313\n\tARPHRD_FCPL                          = 0x312\n\tARPHRD_FCPP                          = 0x310\n\tARPHRD_FDDI                          = 0x306\n\tARPHRD_FRAD                          = 0x302\n\tARPHRD_HDLC                          = 0x201\n\tARPHRD_HIPPI                         = 0x30c\n\tARPHRD_HWX25                         = 0x110\n\tARPHRD_IEEE1394                      = 0x18\n\tARPHRD_IEEE802                       = 0x6\n\tARPHRD_IEEE80211                     = 0x321\n\tARPHRD_IEEE80211_PRISM               = 0x322\n\tARPHRD_IEEE80211_RADIOTAP            = 0x323\n\tARPHRD_IEEE802154                    = 0x324\n\tARPHRD_IEEE802154_MONITOR            = 0x325\n\tARPHRD_IEEE802_TR                    = 0x320\n\tARPHRD_INFINIBAND                    = 0x20\n\tARPHRD_IP6GRE                        = 0x337\n\tARPHRD_IPDDP                         = 0x309\n\tARPHRD_IPGRE                         = 0x30a\n\tARPHRD_IRDA                          = 0x30f\n\tARPHRD_LAPB                          = 0x204\n\tARPHRD_LOCALTLK                      = 0x305\n\tARPHRD_LOOPBACK                      = 0x304\n\tARPHRD_METRICOM                      = 0x17\n\tARPHRD_NETLINK                       = 0x338\n\tARPHRD_NETROM                        = 0x0\n\tARPHRD_NONE                          = 0xfffe\n\tARPHRD_PHONET                        = 0x334\n\tARPHRD_PHONET_PIPE                   = 0x335\n\tARPHRD_PIMREG                        = 0x30b\n\tARPHRD_PPP                           = 0x200\n\tARPHRD_PRONET                        = 0x4\n\tARPHRD_RAWHDLC                       = 0x206\n\tARPHRD_RAWIP                         = 0x207\n\tARPHRD_ROSE                          = 0x10e\n\tARPHRD_RSRVD                         = 0x104\n\tARPHRD_SIT                           = 0x308\n\tARPHRD_SKIP                          = 0x303\n\tARPHRD_SLIP                          = 0x100\n\tARPHRD_SLIP6                         = 0x102\n\tARPHRD_TUNNEL                        = 0x300\n\tARPHRD_TUNNEL6                       = 0x301\n\tARPHRD_VOID                          = 0xffff\n\tARPHRD_VSOCKMON                      = 0x33a\n\tARPHRD_X25                           = 0x10f\n\tAUTOFS_SUPER_MAGIC                   = 0x187\n\tB0                                   = 0x0\n\tB1000000                             = 0x1008\n\tB110                                 = 0x3\n\tB115200                              = 0x1002\n\tB1152000                             = 0x1009\n\tB1200                                = 0x9\n\tB134                                 = 0x4\n\tB150                                 = 0x5\n\tB1500000                             = 0x100a\n\tB1800                                = 0xa\n\tB19200                               = 0xe\n\tB200                                 = 0x6\n\tB2000000                             = 0x100b\n\tB230400                              = 0x1003\n\tB2400                                = 0xb\n\tB2500000                             = 0x100c\n\tB300                                 = 0x7\n\tB3000000                             = 0x100d\n\tB3500000                             = 0x100e\n\tB38400                               = 0xf\n\tB4000000                             = 0x100f\n\tB460800                              = 0x1004\n\tB4800                                = 0xc\n\tB50                                  = 0x1\n\tB500000                              = 0x1005\n\tB57600                               = 0x1001\n\tB576000                              = 0x1006\n\tB600                                 = 0x8\n\tB75                                  = 0x2\n\tB921600                              = 0x1007\n\tB9600                                = 0xd\n\tBALLOON_KVM_MAGIC                    = 0x13661366\n\tBDEVFS_MAGIC                         = 0x62646576\n\tBINDERFS_SUPER_MAGIC                 = 0x6c6f6f70\n\tBINFMTFS_MAGIC                       = 0x42494e4d\n\tBLKBSZGET                            = 0x80081270\n\tBLKBSZSET                            = 0x40081271\n\tBLKFLSBUF                            = 0x1261\n\tBLKFRAGET                            = 0x1265\n\tBLKFRASET                            = 0x1264\n\tBLKGETSIZE                           = 0x1260\n\tBLKGETSIZE64                         = 0x80081272\n\tBLKPBSZGET                           = 0x127b\n\tBLKRAGET                             = 0x1263\n\tBLKRASET                             = 0x1262\n\tBLKROGET                             = 0x125e\n\tBLKROSET                             = 0x125d\n\tBLKRRPART                            = 0x125f\n\tBLKSECTGET                           = 0x1267\n\tBLKSECTSET                           = 0x1266\n\tBLKSSZGET                            = 0x1268\n\tBOTHER                               = 0x1000\n\tBPF_A                                = 0x10\n\tBPF_ABS                              = 0x20\n\tBPF_ADD                              = 0x0\n\tBPF_ALU                              = 0x4\n\tBPF_ALU64                            = 0x7\n\tBPF_AND                              = 0x50\n\tBPF_ANY                              = 0x0\n\tBPF_ARSH                             = 0xc0\n\tBPF_B                                = 0x10\n\tBPF_BUILD_ID_SIZE                    = 0x14\n\tBPF_CALL                             = 0x80\n\tBPF_DEVCG_ACC_MKNOD                  = 0x1\n\tBPF_DEVCG_ACC_READ                   = 0x2\n\tBPF_DEVCG_ACC_WRITE                  = 0x4\n\tBPF_DEVCG_DEV_BLOCK                  = 0x1\n\tBPF_DEVCG_DEV_CHAR                   = 0x2\n\tBPF_DIV                              = 0x30\n\tBPF_DW                               = 0x18\n\tBPF_END                              = 0xd0\n\tBPF_EXIST                            = 0x2\n\tBPF_EXIT                             = 0x90\n\tBPF_FROM_BE                          = 0x8\n\tBPF_FROM_LE                          = 0x0\n\tBPF_FS_MAGIC                         = 0xcafe4a11\n\tBPF_F_ALLOW_MULTI                    = 0x2\n\tBPF_F_ALLOW_OVERRIDE                 = 0x1\n\tBPF_F_ANY_ALIGNMENT                  = 0x2\n\tBPF_F_CTXLEN_MASK                    = 0xfffff00000000\n\tBPF_F_CURRENT_CPU                    = 0xffffffff\n\tBPF_F_CURRENT_NETNS                  = -0x1\n\tBPF_F_DONT_FRAGMENT                  = 0x4\n\tBPF_F_FAST_STACK_CMP                 = 0x200\n\tBPF_F_HDR_FIELD_MASK                 = 0xf\n\tBPF_F_INDEX_MASK                     = 0xffffffff\n\tBPF_F_INGRESS                        = 0x1\n\tBPF_F_INVALIDATE_HASH                = 0x2\n\tBPF_F_LOCK                           = 0x4\n\tBPF_F_MARK_ENFORCE                   = 0x40\n\tBPF_F_MARK_MANGLED_0                 = 0x20\n\tBPF_F_NO_COMMON_LRU                  = 0x2\n\tBPF_F_NO_PREALLOC                    = 0x1\n\tBPF_F_NUMA_NODE                      = 0x4\n\tBPF_F_PSEUDO_HDR                     = 0x10\n\tBPF_F_QUERY_EFFECTIVE                = 0x1\n\tBPF_F_RDONLY                         = 0x8\n\tBPF_F_RECOMPUTE_CSUM                 = 0x1\n\tBPF_F_REUSE_STACKID                  = 0x400\n\tBPF_F_SEQ_NUMBER                     = 0x8\n\tBPF_F_SKIP_FIELD_MASK                = 0xff\n\tBPF_F_STACK_BUILD_ID                 = 0x20\n\tBPF_F_STRICT_ALIGNMENT               = 0x1\n\tBPF_F_TUNINFO_IPV6                   = 0x1\n\tBPF_F_USER_BUILD_ID                  = 0x800\n\tBPF_F_USER_STACK                     = 0x100\n\tBPF_F_WRONLY                         = 0x10\n\tBPF_F_ZERO_CSUM_TX                   = 0x2\n\tBPF_F_ZERO_SEED                      = 0x40\n\tBPF_H                                = 0x8\n\tBPF_IMM                              = 0x0\n\tBPF_IND                              = 0x40\n\tBPF_JA                               = 0x0\n\tBPF_JEQ                              = 0x10\n\tBPF_JGE                              = 0x30\n\tBPF_JGT                              = 0x20\n\tBPF_JLE                              = 0xb0\n\tBPF_JLT                              = 0xa0\n\tBPF_JMP                              = 0x5\n\tBPF_JMP32                            = 0x6\n\tBPF_JNE                              = 0x50\n\tBPF_JSET                             = 0x40\n\tBPF_JSGE                             = 0x70\n\tBPF_JSGT                             = 0x60\n\tBPF_JSLE                             = 0xd0\n\tBPF_JSLT                             = 0xc0\n\tBPF_K                                = 0x0\n\tBPF_LD                               = 0x0\n\tBPF_LDX                              = 0x1\n\tBPF_LEN                              = 0x80\n\tBPF_LL_OFF                           = -0x200000\n\tBPF_LSH                              = 0x60\n\tBPF_MAJOR_VERSION                    = 0x1\n\tBPF_MAXINSNS                         = 0x1000\n\tBPF_MEM                              = 0x60\n\tBPF_MEMWORDS                         = 0x10\n\tBPF_MINOR_VERSION                    = 0x1\n\tBPF_MISC                             = 0x7\n\tBPF_MOD                              = 0x90\n\tBPF_MOV                              = 0xb0\n\tBPF_MSH                              = 0xa0\n\tBPF_MUL                              = 0x20\n\tBPF_NEG                              = 0x80\n\tBPF_NET_OFF                          = -0x100000\n\tBPF_NOEXIST                          = 0x1\n\tBPF_OBJ_NAME_LEN                     = 0x10\n\tBPF_OR                               = 0x40\n\tBPF_PSEUDO_CALL                      = 0x1\n\tBPF_PSEUDO_MAP_FD                    = 0x1\n\tBPF_RET                              = 0x6\n\tBPF_RSH                              = 0x70\n\tBPF_SOCK_OPS_ALL_CB_FLAGS            = 0x7\n\tBPF_SOCK_OPS_RETRANS_CB_FLAG         = 0x2\n\tBPF_SOCK_OPS_RTO_CB_FLAG             = 0x1\n\tBPF_SOCK_OPS_STATE_CB_FLAG           = 0x4\n\tBPF_ST                               = 0x2\n\tBPF_STX                              = 0x3\n\tBPF_SUB                              = 0x10\n\tBPF_TAG_SIZE                         = 0x8\n\tBPF_TAX                              = 0x0\n\tBPF_TO_BE                            = 0x8\n\tBPF_TO_LE                            = 0x0\n\tBPF_TXA                              = 0x80\n\tBPF_W                                = 0x0\n\tBPF_X                                = 0x8\n\tBPF_XADD                             = 0xc0\n\tBPF_XOR                              = 0xa0\n\tBRKINT                               = 0x2\n\tBS0                                  = 0x0\n\tBS1                                  = 0x2000\n\tBSDLY                                = 0x2000\n\tBTRFS_SUPER_MAGIC                    = 0x9123683e\n\tBTRFS_TEST_MAGIC                     = 0x73727279\n\tCAN_BCM                              = 0x2\n\tCAN_EFF_FLAG                         = 0x80000000\n\tCAN_EFF_ID_BITS                      = 0x1d\n\tCAN_EFF_MASK                         = 0x1fffffff\n\tCAN_ERR_FLAG                         = 0x20000000\n\tCAN_ERR_MASK                         = 0x1fffffff\n\tCAN_INV_FILTER                       = 0x20000000\n\tCAN_ISOTP                            = 0x6\n\tCAN_MAX_DLC                          = 0x8\n\tCAN_MAX_DLEN                         = 0x8\n\tCAN_MCNET                            = 0x5\n\tCAN_MTU                              = 0x10\n\tCAN_NPROTO                           = 0x7\n\tCAN_RAW                              = 0x1\n\tCAN_RAW_FILTER_MAX                   = 0x200\n\tCAN_RTR_FLAG                         = 0x40000000\n\tCAN_SFF_ID_BITS                      = 0xb\n\tCAN_SFF_MASK                         = 0x7ff\n\tCAN_TP16                             = 0x3\n\tCAN_TP20                             = 0x4\n\tCBAUD                                = 0x100f\n\tCBAUDEX                              = 0x1000\n\tCFLUSH                               = 0xf\n\tCGROUP2_SUPER_MAGIC                  = 0x63677270\n\tCGROUP_SUPER_MAGIC                   = 0x27e0eb\n\tCIBAUD                               = 0x100f0000\n\tCLOCAL                               = 0x800\n\tCLOCK_BOOTTIME                       = 0x7\n\tCLOCK_BOOTTIME_ALARM                 = 0x9\n\tCLOCK_DEFAULT                        = 0x0\n\tCLOCK_EXT                            = 0x1\n\tCLOCK_INT                            = 0x2\n\tCLOCK_MONOTONIC                      = 0x1\n\tCLOCK_MONOTONIC_COARSE               = 0x6\n\tCLOCK_MONOTONIC_RAW                  = 0x4\n\tCLOCK_PROCESS_CPUTIME_ID             = 0x2\n\tCLOCK_REALTIME                       = 0x0\n\tCLOCK_REALTIME_ALARM                 = 0x8\n\tCLOCK_REALTIME_COARSE                = 0x5\n\tCLOCK_TAI                            = 0xb\n\tCLOCK_THREAD_CPUTIME_ID              = 0x3\n\tCLOCK_TXFROMRX                       = 0x4\n\tCLOCK_TXINT                          = 0x3\n\tCLONE_CHILD_CLEARTID                 = 0x200000\n\tCLONE_CHILD_SETTID                   = 0x1000000\n\tCLONE_DETACHED                       = 0x400000\n\tCLONE_FILES                          = 0x400\n\tCLONE_FS                             = 0x200\n\tCLONE_IO                             = 0x80000000\n\tCLONE_NEWCGROUP                      = 0x2000000\n\tCLONE_NEWIPC                         = 0x8000000\n\tCLONE_NEWNET                         = 0x40000000\n\tCLONE_NEWNS                          = 0x20000\n\tCLONE_NEWPID                         = 0x20000000\n\tCLONE_NEWUSER                        = 0x10000000\n\tCLONE_NEWUTS                         = 0x4000000\n\tCLONE_PARENT                         = 0x8000\n\tCLONE_PARENT_SETTID                  = 0x100000\n\tCLONE_PTRACE                         = 0x2000\n\tCLONE_SETTLS                         = 0x80000\n\tCLONE_SIGHAND                        = 0x800\n\tCLONE_SYSVSEM                        = 0x40000\n\tCLONE_THREAD                         = 0x10000\n\tCLONE_UNTRACED                       = 0x800000\n\tCLONE_VFORK                          = 0x4000\n\tCLONE_VM                             = 0x100\n\tCMSPAR                               = 0x40000000\n\tCODA_SUPER_MAGIC                     = 0x73757245\n\tCR0                                  = 0x0\n\tCR1                                  = 0x200\n\tCR2                                  = 0x400\n\tCR3                                  = 0x600\n\tCRAMFS_MAGIC                         = 0x28cd3d45\n\tCRDLY                                = 0x600\n\tCREAD                                = 0x80\n\tCRTSCTS                              = 0x80000000\n\tCRYPTO_MAX_NAME                      = 0x40\n\tCRYPTO_MSG_MAX                       = 0x15\n\tCRYPTO_NR_MSGTYPES                   = 0x6\n\tCRYPTO_REPORT_MAXSIZE                = 0x160\n\tCS5                                  = 0x0\n\tCS6                                  = 0x10\n\tCS7                                  = 0x20\n\tCS8                                  = 0x30\n\tCSIGNAL                              = 0xff\n\tCSIZE                                = 0x30\n\tCSTART                               = 0x11\n\tCSTATUS                              = 0x0\n\tCSTOP                                = 0x13\n\tCSTOPB                               = 0x40\n\tCSUSP                                = 0x1a\n\tDAXFS_MAGIC                          = 0x64646178\n\tDEBUGFS_MAGIC                        = 0x64626720\n\tDEVPTS_SUPER_MAGIC                   = 0x1cd1\n\tDT_BLK                               = 0x6\n\tDT_CHR                               = 0x2\n\tDT_DIR                               = 0x4\n\tDT_FIFO                              = 0x1\n\tDT_LNK                               = 0xa\n\tDT_REG                               = 0x8\n\tDT_SOCK                              = 0xc\n\tDT_UNKNOWN                           = 0x0\n\tDT_WHT                               = 0xe\n\tECHO                                 = 0x8\n\tECHOCTL                              = 0x200\n\tECHOE                                = 0x10\n\tECHOK                                = 0x20\n\tECHOKE                               = 0x800\n\tECHONL                               = 0x40\n\tECHOPRT                              = 0x400\n\tECRYPTFS_SUPER_MAGIC                 = 0xf15f\n\tEFD_CLOEXEC                          = 0x80000\n\tEFD_NONBLOCK                         = 0x800\n\tEFD_SEMAPHORE                        = 0x1\n\tEFIVARFS_MAGIC                       = 0xde5e81e4\n\tEFS_SUPER_MAGIC                      = 0x414a53\n\tENCODING_DEFAULT                     = 0x0\n\tENCODING_FM_MARK                     = 0x3\n\tENCODING_FM_SPACE                    = 0x4\n\tENCODING_MANCHESTER                  = 0x5\n\tENCODING_NRZ                         = 0x1\n\tENCODING_NRZI                        = 0x2\n\tEPOLLERR                             = 0x8\n\tEPOLLET                              = 0x80000000\n\tEPOLLEXCLUSIVE                       = 0x10000000\n\tEPOLLHUP                             = 0x10\n\tEPOLLIN                              = 0x1\n\tEPOLLMSG                             = 0x400\n\tEPOLLONESHOT                         = 0x40000000\n\tEPOLLOUT                             = 0x4\n\tEPOLLPRI                             = 0x2\n\tEPOLLRDBAND                          = 0x80\n\tEPOLLRDHUP                           = 0x2000\n\tEPOLLRDNORM                          = 0x40\n\tEPOLLWAKEUP                          = 0x20000000\n\tEPOLLWRBAND                          = 0x200\n\tEPOLLWRNORM                          = 0x100\n\tEPOLL_CLOEXEC                        = 0x80000\n\tEPOLL_CTL_ADD                        = 0x1\n\tEPOLL_CTL_DEL                        = 0x2\n\tEPOLL_CTL_MOD                        = 0x3\n\tESR_MAGIC                            = 0x45535201\n\tETH_P_1588                           = 0x88f7\n\tETH_P_8021AD                         = 0x88a8\n\tETH_P_8021AH                         = 0x88e7\n\tETH_P_8021Q                          = 0x8100\n\tETH_P_80221                          = 0x8917\n\tETH_P_802_2                          = 0x4\n\tETH_P_802_3                          = 0x1\n\tETH_P_802_3_MIN                      = 0x600\n\tETH_P_802_EX1                        = 0x88b5\n\tETH_P_AARP                           = 0x80f3\n\tETH_P_AF_IUCV                        = 0xfbfb\n\tETH_P_ALL                            = 0x3\n\tETH_P_AOE                            = 0x88a2\n\tETH_P_ARCNET                         = 0x1a\n\tETH_P_ARP                            = 0x806\n\tETH_P_ATALK                          = 0x809b\n\tETH_P_ATMFATE                        = 0x8884\n\tETH_P_ATMMPOA                        = 0x884c\n\tETH_P_AX25                           = 0x2\n\tETH_P_BATMAN                         = 0x4305\n\tETH_P_BPQ                            = 0x8ff\n\tETH_P_CAIF                           = 0xf7\n\tETH_P_CAN                            = 0xc\n\tETH_P_CANFD                          = 0xd\n\tETH_P_CONTROL                        = 0x16\n\tETH_P_CUST                           = 0x6006\n\tETH_P_DDCMP                          = 0x6\n\tETH_P_DEC                            = 0x6000\n\tETH_P_DIAG                           = 0x6005\n\tETH_P_DNA_DL                         = 0x6001\n\tETH_P_DNA_RC                         = 0x6002\n\tETH_P_DNA_RT                         = 0x6003\n\tETH_P_DSA                            = 0x1b\n\tETH_P_ECONET                         = 0x18\n\tETH_P_EDSA                           = 0xdada\n\tETH_P_ERSPAN                         = 0x88be\n\tETH_P_ERSPAN2                        = 0x22eb\n\tETH_P_FCOE                           = 0x8906\n\tETH_P_FIP                            = 0x8914\n\tETH_P_HDLC                           = 0x19\n\tETH_P_HSR                            = 0x892f\n\tETH_P_IBOE                           = 0x8915\n\tETH_P_IEEE802154                     = 0xf6\n\tETH_P_IEEEPUP                        = 0xa00\n\tETH_P_IEEEPUPAT                      = 0xa01\n\tETH_P_IFE                            = 0xed3e\n\tETH_P_IP                             = 0x800\n\tETH_P_IPV6                           = 0x86dd\n\tETH_P_IPX                            = 0x8137\n\tETH_P_IRDA                           = 0x17\n\tETH_P_LAT                            = 0x6004\n\tETH_P_LINK_CTL                       = 0x886c\n\tETH_P_LOCALTALK                      = 0x9\n\tETH_P_LOOP                           = 0x60\n\tETH_P_LOOPBACK                       = 0x9000\n\tETH_P_MACSEC                         = 0x88e5\n\tETH_P_MAP                            = 0xf9\n\tETH_P_MOBITEX                        = 0x15\n\tETH_P_MPLS_MC                        = 0x8848\n\tETH_P_MPLS_UC                        = 0x8847\n\tETH_P_MVRP                           = 0x88f5\n\tETH_P_NCSI                           = 0x88f8\n\tETH_P_NSH                            = 0x894f\n\tETH_P_PAE                            = 0x888e\n\tETH_P_PAUSE                          = 0x8808\n\tETH_P_PHONET                         = 0xf5\n\tETH_P_PPPTALK                        = 0x10\n\tETH_P_PPP_DISC                       = 0x8863\n\tETH_P_PPP_MP                         = 0x8\n\tETH_P_PPP_SES                        = 0x8864\n\tETH_P_PREAUTH                        = 0x88c7\n\tETH_P_PRP                            = 0x88fb\n\tETH_P_PUP                            = 0x200\n\tETH_P_PUPAT                          = 0x201\n\tETH_P_QINQ1                          = 0x9100\n\tETH_P_QINQ2                          = 0x9200\n\tETH_P_QINQ3                          = 0x9300\n\tETH_P_RARP                           = 0x8035\n\tETH_P_SCA                            = 0x6007\n\tETH_P_SLOW                           = 0x8809\n\tETH_P_SNAP                           = 0x5\n\tETH_P_TDLS                           = 0x890d\n\tETH_P_TEB                            = 0x6558\n\tETH_P_TIPC                           = 0x88ca\n\tETH_P_TRAILER                        = 0x1c\n\tETH_P_TR_802_2                       = 0x11\n\tETH_P_TSN                            = 0x22f0\n\tETH_P_WAN_PPP                        = 0x7\n\tETH_P_WCCP                           = 0x883e\n\tETH_P_X25                            = 0x805\n\tETH_P_XDSA                           = 0xf8\n\tEXABYTE_ENABLE_NEST                  = 0xf0\n\tEXT2_SUPER_MAGIC                     = 0xef53\n\tEXT3_SUPER_MAGIC                     = 0xef53\n\tEXT4_SUPER_MAGIC                     = 0xef53\n\tEXTA                                 = 0xe\n\tEXTB                                 = 0xf\n\tEXTPROC                              = 0x10000\n\tEXTRA_MAGIC                          = 0x45585401\n\tF2FS_SUPER_MAGIC                     = 0xf2f52010\n\tFALLOC_FL_COLLAPSE_RANGE             = 0x8\n\tFALLOC_FL_INSERT_RANGE               = 0x20\n\tFALLOC_FL_KEEP_SIZE                  = 0x1\n\tFALLOC_FL_NO_HIDE_STALE              = 0x4\n\tFALLOC_FL_PUNCH_HOLE                 = 0x2\n\tFALLOC_FL_UNSHARE_RANGE              = 0x40\n\tFALLOC_FL_ZERO_RANGE                 = 0x10\n\tFANOTIFY_METADATA_VERSION            = 0x3\n\tFAN_ACCESS                           = 0x1\n\tFAN_ACCESS_PERM                      = 0x20000\n\tFAN_ALLOW                            = 0x1\n\tFAN_ALL_CLASS_BITS                   = 0xc\n\tFAN_ALL_EVENTS                       = 0x3b\n\tFAN_ALL_INIT_FLAGS                   = 0x3f\n\tFAN_ALL_MARK_FLAGS                   = 0xff\n\tFAN_ALL_OUTGOING_EVENTS              = 0x3403b\n\tFAN_ALL_PERM_EVENTS                  = 0x30000\n\tFAN_ATTRIB                           = 0x4\n\tFAN_AUDIT                            = 0x10\n\tFAN_CLASS_CONTENT                    = 0x4\n\tFAN_CLASS_NOTIF                      = 0x0\n\tFAN_CLASS_PRE_CONTENT                = 0x8\n\tFAN_CLOEXEC                          = 0x1\n\tFAN_CLOSE                            = 0x18\n\tFAN_CLOSE_NOWRITE                    = 0x10\n\tFAN_CLOSE_WRITE                      = 0x8\n\tFAN_CREATE                           = 0x100\n\tFAN_DELETE                           = 0x200\n\tFAN_DELETE_SELF                      = 0x400\n\tFAN_DENY                             = 0x2\n\tFAN_ENABLE_AUDIT                     = 0x40\n\tFAN_EVENT_INFO_TYPE_FID              = 0x1\n\tFAN_EVENT_METADATA_LEN               = 0x18\n\tFAN_EVENT_ON_CHILD                   = 0x8000000\n\tFAN_MARK_ADD                         = 0x1\n\tFAN_MARK_DONT_FOLLOW                 = 0x4\n\tFAN_MARK_FILESYSTEM                  = 0x100\n\tFAN_MARK_FLUSH                       = 0x80\n\tFAN_MARK_IGNORED_MASK                = 0x20\n\tFAN_MARK_IGNORED_SURV_MODIFY         = 0x40\n\tFAN_MARK_INODE                       = 0x0\n\tFAN_MARK_MOUNT                       = 0x10\n\tFAN_MARK_ONLYDIR                     = 0x8\n\tFAN_MARK_REMOVE                      = 0x2\n\tFAN_MODIFY                           = 0x2\n\tFAN_MOVE                             = 0xc0\n\tFAN_MOVED_FROM                       = 0x40\n\tFAN_MOVED_TO                         = 0x80\n\tFAN_MOVE_SELF                        = 0x800\n\tFAN_NOFD                             = -0x1\n\tFAN_NONBLOCK                         = 0x2\n\tFAN_ONDIR                            = 0x40000000\n\tFAN_OPEN                             = 0x20\n\tFAN_OPEN_EXEC                        = 0x1000\n\tFAN_OPEN_EXEC_PERM                   = 0x40000\n\tFAN_OPEN_PERM                        = 0x10000\n\tFAN_Q_OVERFLOW                       = 0x4000\n\tFAN_REPORT_FID                       = 0x200\n\tFAN_REPORT_TID                       = 0x100\n\tFAN_UNLIMITED_MARKS                  = 0x20\n\tFAN_UNLIMITED_QUEUE                  = 0x10\n\tFD_CLOEXEC                           = 0x1\n\tFD_SETSIZE                           = 0x400\n\tFF0                                  = 0x0\n\tFF1                                  = 0x8000\n\tFFDLY                                = 0x8000\n\tFLUSHO                               = 0x1000\n\tFPSIMD_MAGIC                         = 0x46508001\n\tFS_ENCRYPTION_MODE_ADIANTUM          = 0x9\n\tFS_ENCRYPTION_MODE_AES_128_CBC       = 0x5\n\tFS_ENCRYPTION_MODE_AES_128_CTS       = 0x6\n\tFS_ENCRYPTION_MODE_AES_256_CBC       = 0x3\n\tFS_ENCRYPTION_MODE_AES_256_CTS       = 0x4\n\tFS_ENCRYPTION_MODE_AES_256_GCM       = 0x2\n\tFS_ENCRYPTION_MODE_AES_256_XTS       = 0x1\n\tFS_ENCRYPTION_MODE_INVALID           = 0x0\n\tFS_ENCRYPTION_MODE_SPECK128_256_CTS  = 0x8\n\tFS_ENCRYPTION_MODE_SPECK128_256_XTS  = 0x7\n\tFS_IOC_GET_ENCRYPTION_POLICY         = 0x400c6615\n\tFS_IOC_GET_ENCRYPTION_PWSALT         = 0x40106614\n\tFS_IOC_SET_ENCRYPTION_POLICY         = 0x800c6613\n\tFS_KEY_DESCRIPTOR_SIZE               = 0x8\n\tFS_KEY_DESC_PREFIX                   = \"fscrypt:\"\n\tFS_KEY_DESC_PREFIX_SIZE              = 0x8\n\tFS_MAX_KEY_SIZE                      = 0x40\n\tFS_POLICY_FLAGS_PAD_16               = 0x2\n\tFS_POLICY_FLAGS_PAD_32               = 0x3\n\tFS_POLICY_FLAGS_PAD_4                = 0x0\n\tFS_POLICY_FLAGS_PAD_8                = 0x1\n\tFS_POLICY_FLAGS_PAD_MASK             = 0x3\n\tFS_POLICY_FLAGS_VALID                = 0x7\n\tFUTEXFS_SUPER_MAGIC                  = 0xbad1dea\n\tF_ADD_SEALS                          = 0x409\n\tF_DUPFD                              = 0x0\n\tF_DUPFD_CLOEXEC                      = 0x406\n\tF_EXLCK                              = 0x4\n\tF_GETFD                              = 0x1\n\tF_GETFL                              = 0x3\n\tF_GETLEASE                           = 0x401\n\tF_GETLK                              = 0x5\n\tF_GETLK64                            = 0x5\n\tF_GETOWN                             = 0x9\n\tF_GETOWN_EX                          = 0x10\n\tF_GETPIPE_SZ                         = 0x408\n\tF_GETSIG                             = 0xb\n\tF_GET_FILE_RW_HINT                   = 0x40d\n\tF_GET_RW_HINT                        = 0x40b\n\tF_GET_SEALS                          = 0x40a\n\tF_LOCK                               = 0x1\n\tF_NOTIFY                             = 0x402\n\tF_OFD_GETLK                          = 0x24\n\tF_OFD_SETLK                          = 0x25\n\tF_OFD_SETLKW                         = 0x26\n\tF_OK                                 = 0x0\n\tF_RDLCK                              = 0x0\n\tF_SEAL_GROW                          = 0x4\n\tF_SEAL_SEAL                          = 0x1\n\tF_SEAL_SHRINK                        = 0x2\n\tF_SEAL_WRITE                         = 0x8\n\tF_SETFD                              = 0x2\n\tF_SETFL                              = 0x4\n\tF_SETLEASE                           = 0x400\n\tF_SETLK                              = 0x6\n\tF_SETLK64                            = 0x6\n\tF_SETLKW                             = 0x7\n\tF_SETLKW64                           = 0x7\n\tF_SETOWN                             = 0x8\n\tF_SETOWN_EX                          = 0xf\n\tF_SETPIPE_SZ                         = 0x407\n\tF_SETSIG                             = 0xa\n\tF_SET_FILE_RW_HINT                   = 0x40e\n\tF_SET_RW_HINT                        = 0x40c\n\tF_SHLCK                              = 0x8\n\tF_TEST                               = 0x3\n\tF_TLOCK                              = 0x2\n\tF_ULOCK                              = 0x0\n\tF_UNLCK                              = 0x2\n\tF_WRLCK                              = 0x1\n\tGENL_ADMIN_PERM                      = 0x1\n\tGENL_CMD_CAP_DO                      = 0x2\n\tGENL_CMD_CAP_DUMP                    = 0x4\n\tGENL_CMD_CAP_HASPOL                  = 0x8\n\tGENL_HDRLEN                          = 0x4\n\tGENL_ID_CTRL                         = 0x10\n\tGENL_ID_PMCRAID                      = 0x12\n\tGENL_ID_VFS_DQUOT                    = 0x11\n\tGENL_MAX_ID                          = 0x3ff\n\tGENL_MIN_ID                          = 0x10\n\tGENL_NAMSIZ                          = 0x10\n\tGENL_START_ALLOC                     = 0x13\n\tGENL_UNS_ADMIN_PERM                  = 0x10\n\tGRND_NONBLOCK                        = 0x1\n\tGRND_RANDOM                          = 0x2\n\tHDIO_DRIVE_CMD                       = 0x31f\n\tHDIO_DRIVE_CMD_AEB                   = 0x31e\n\tHDIO_DRIVE_CMD_HDR_SIZE              = 0x4\n\tHDIO_DRIVE_HOB_HDR_SIZE              = 0x8\n\tHDIO_DRIVE_RESET                     = 0x31c\n\tHDIO_DRIVE_TASK                      = 0x31e\n\tHDIO_DRIVE_TASKFILE                  = 0x31d\n\tHDIO_DRIVE_TASK_HDR_SIZE             = 0x8\n\tHDIO_GETGEO                          = 0x301\n\tHDIO_GET_32BIT                       = 0x309\n\tHDIO_GET_ACOUSTIC                    = 0x30f\n\tHDIO_GET_ADDRESS                     = 0x310\n\tHDIO_GET_BUSSTATE                    = 0x31a\n\tHDIO_GET_DMA                         = 0x30b\n\tHDIO_GET_IDENTITY                    = 0x30d\n\tHDIO_GET_KEEPSETTINGS                = 0x308\n\tHDIO_GET_MULTCOUNT                   = 0x304\n\tHDIO_GET_NICE                        = 0x30c\n\tHDIO_GET_NOWERR                      = 0x30a\n\tHDIO_GET_QDMA                        = 0x305\n\tHDIO_GET_UNMASKINTR                  = 0x302\n\tHDIO_GET_WCACHE                      = 0x30e\n\tHDIO_OBSOLETE_IDENTITY               = 0x307\n\tHDIO_SCAN_HWIF                       = 0x328\n\tHDIO_SET_32BIT                       = 0x324\n\tHDIO_SET_ACOUSTIC                    = 0x32c\n\tHDIO_SET_ADDRESS                     = 0x32f\n\tHDIO_SET_BUSSTATE                    = 0x32d\n\tHDIO_SET_DMA                         = 0x326\n\tHDIO_SET_KEEPSETTINGS                = 0x323\n\tHDIO_SET_MULTCOUNT                   = 0x321\n\tHDIO_SET_NICE                        = 0x329\n\tHDIO_SET_NOWERR                      = 0x325\n\tHDIO_SET_PIO_MODE                    = 0x327\n\tHDIO_SET_QDMA                        = 0x32e\n\tHDIO_SET_UNMASKINTR                  = 0x322\n\tHDIO_SET_WCACHE                      = 0x32b\n\tHDIO_SET_XFER                        = 0x306\n\tHDIO_TRISTATE_HWIF                   = 0x31b\n\tHDIO_UNREGISTER_HWIF                 = 0x32a\n\tHOSTFS_SUPER_MAGIC                   = 0xc0ffee\n\tHPFS_SUPER_MAGIC                     = 0xf995e849\n\tHUGETLBFS_MAGIC                      = 0x958458f6\n\tHUPCL                                = 0x400\n\tIBSHIFT                              = 0x10\n\tICANON                               = 0x2\n\tICMPV6_FILTER                        = 0x1\n\tICRNL                                = 0x100\n\tIEXTEN                               = 0x8000\n\tIFA_F_DADFAILED                      = 0x8\n\tIFA_F_DEPRECATED                     = 0x20\n\tIFA_F_HOMEADDRESS                    = 0x10\n\tIFA_F_MANAGETEMPADDR                 = 0x100\n\tIFA_F_MCAUTOJOIN                     = 0x400\n\tIFA_F_NODAD                          = 0x2\n\tIFA_F_NOPREFIXROUTE                  = 0x200\n\tIFA_F_OPTIMISTIC                     = 0x4\n\tIFA_F_PERMANENT                      = 0x80\n\tIFA_F_SECONDARY                      = 0x1\n\tIFA_F_STABLE_PRIVACY                 = 0x800\n\tIFA_F_TEMPORARY                      = 0x1\n\tIFA_F_TENTATIVE                      = 0x40\n\tIFA_MAX                              = 0xa\n\tIFF_ALLMULTI                         = 0x200\n\tIFF_ATTACH_QUEUE                     = 0x200\n\tIFF_AUTOMEDIA                        = 0x4000\n\tIFF_BROADCAST                        = 0x2\n\tIFF_DEBUG                            = 0x4\n\tIFF_DETACH_QUEUE                     = 0x400\n\tIFF_DORMANT                          = 0x20000\n\tIFF_DYNAMIC                          = 0x8000\n\tIFF_ECHO                             = 0x40000\n\tIFF_LOOPBACK                         = 0x8\n\tIFF_LOWER_UP                         = 0x10000\n\tIFF_MASTER                           = 0x400\n\tIFF_MULTICAST                        = 0x1000\n\tIFF_MULTI_QUEUE                      = 0x100\n\tIFF_NAPI                             = 0x10\n\tIFF_NAPI_FRAGS                       = 0x20\n\tIFF_NOARP                            = 0x80\n\tIFF_NOFILTER                         = 0x1000\n\tIFF_NOTRAILERS                       = 0x20\n\tIFF_NO_PI                            = 0x1000\n\tIFF_ONE_QUEUE                        = 0x2000\n\tIFF_PERSIST                          = 0x800\n\tIFF_POINTOPOINT                      = 0x10\n\tIFF_PORTSEL                          = 0x2000\n\tIFF_PROMISC                          = 0x100\n\tIFF_RUNNING                          = 0x40\n\tIFF_SLAVE                            = 0x800\n\tIFF_TAP                              = 0x2\n\tIFF_TUN                              = 0x1\n\tIFF_TUN_EXCL                         = 0x8000\n\tIFF_UP                               = 0x1\n\tIFF_VNET_HDR                         = 0x4000\n\tIFF_VOLATILE                         = 0x70c5a\n\tIFNAMSIZ                             = 0x10\n\tIGNBRK                               = 0x1\n\tIGNCR                                = 0x80\n\tIGNPAR                               = 0x4\n\tIMAXBEL                              = 0x2000\n\tINLCR                                = 0x40\n\tINPCK                                = 0x10\n\tIN_ACCESS                            = 0x1\n\tIN_ALL_EVENTS                        = 0xfff\n\tIN_ATTRIB                            = 0x4\n\tIN_CLASSA_HOST                       = 0xffffff\n\tIN_CLASSA_MAX                        = 0x80\n\tIN_CLASSA_NET                        = 0xff000000\n\tIN_CLASSA_NSHIFT                     = 0x18\n\tIN_CLASSB_HOST                       = 0xffff\n\tIN_CLASSB_MAX                        = 0x10000\n\tIN_CLASSB_NET                        = 0xffff0000\n\tIN_CLASSB_NSHIFT                     = 0x10\n\tIN_CLASSC_HOST                       = 0xff\n\tIN_CLASSC_NET                        = 0xffffff00\n\tIN_CLASSC_NSHIFT                     = 0x8\n\tIN_CLOEXEC                           = 0x80000\n\tIN_CLOSE                             = 0x18\n\tIN_CLOSE_NOWRITE                     = 0x10\n\tIN_CLOSE_WRITE                       = 0x8\n\tIN_CREATE                            = 0x100\n\tIN_DELETE                            = 0x200\n\tIN_DELETE_SELF                       = 0x400\n\tIN_DONT_FOLLOW                       = 0x2000000\n\tIN_EXCL_UNLINK                       = 0x4000000\n\tIN_IGNORED                           = 0x8000\n\tIN_ISDIR                             = 0x40000000\n\tIN_LOOPBACKNET                       = 0x7f\n\tIN_MASK_ADD                          = 0x20000000\n\tIN_MASK_CREATE                       = 0x10000000\n\tIN_MODIFY                            = 0x2\n\tIN_MOVE                              = 0xc0\n\tIN_MOVED_FROM                        = 0x40\n\tIN_MOVED_TO                          = 0x80\n\tIN_MOVE_SELF                         = 0x800\n\tIN_NONBLOCK                          = 0x800\n\tIN_ONESHOT                           = 0x80000000\n\tIN_ONLYDIR                           = 0x1000000\n\tIN_OPEN                              = 0x20\n\tIN_Q_OVERFLOW                        = 0x4000\n\tIN_UNMOUNT                           = 0x2000\n\tIOCTL_VM_SOCKETS_GET_LOCAL_CID       = 0x7b9\n\tIPPROTO_AH                           = 0x33\n\tIPPROTO_BEETPH                       = 0x5e\n\tIPPROTO_COMP                         = 0x6c\n\tIPPROTO_DCCP                         = 0x21\n\tIPPROTO_DSTOPTS                      = 0x3c\n\tIPPROTO_EGP                          = 0x8\n\tIPPROTO_ENCAP                        = 0x62\n\tIPPROTO_ESP                          = 0x32\n\tIPPROTO_FRAGMENT                     = 0x2c\n\tIPPROTO_GRE                          = 0x2f\n\tIPPROTO_HOPOPTS                      = 0x0\n\tIPPROTO_ICMP                         = 0x1\n\tIPPROTO_ICMPV6                       = 0x3a\n\tIPPROTO_IDP                          = 0x16\n\tIPPROTO_IGMP                         = 0x2\n\tIPPROTO_IP                           = 0x0\n\tIPPROTO_IPIP                         = 0x4\n\tIPPROTO_IPV6                         = 0x29\n\tIPPROTO_MH                           = 0x87\n\tIPPROTO_MPLS                         = 0x89\n\tIPPROTO_MTP                          = 0x5c\n\tIPPROTO_NONE                         = 0x3b\n\tIPPROTO_PIM                          = 0x67\n\tIPPROTO_PUP                          = 0xc\n\tIPPROTO_RAW                          = 0xff\n\tIPPROTO_ROUTING                      = 0x2b\n\tIPPROTO_RSVP                         = 0x2e\n\tIPPROTO_SCTP                         = 0x84\n\tIPPROTO_TCP                          = 0x6\n\tIPPROTO_TP                           = 0x1d\n\tIPPROTO_UDP                          = 0x11\n\tIPPROTO_UDPLITE                      = 0x88\n\tIPV6_2292DSTOPTS                     = 0x4\n\tIPV6_2292HOPLIMIT                    = 0x8\n\tIPV6_2292HOPOPTS                     = 0x3\n\tIPV6_2292PKTINFO                     = 0x2\n\tIPV6_2292PKTOPTIONS                  = 0x6\n\tIPV6_2292RTHDR                       = 0x5\n\tIPV6_ADDRFORM                        = 0x1\n\tIPV6_ADDR_PREFERENCES                = 0x48\n\tIPV6_ADD_MEMBERSHIP                  = 0x14\n\tIPV6_AUTHHDR                         = 0xa\n\tIPV6_AUTOFLOWLABEL                   = 0x46\n\tIPV6_CHECKSUM                        = 0x7\n\tIPV6_DONTFRAG                        = 0x3e\n\tIPV6_DROP_MEMBERSHIP                 = 0x15\n\tIPV6_DSTOPTS                         = 0x3b\n\tIPV6_FREEBIND                        = 0x4e\n\tIPV6_HDRINCL                         = 0x24\n\tIPV6_HOPLIMIT                        = 0x34\n\tIPV6_HOPOPTS                         = 0x36\n\tIPV6_IPSEC_POLICY                    = 0x22\n\tIPV6_JOIN_ANYCAST                    = 0x1b\n\tIPV6_JOIN_GROUP                      = 0x14\n\tIPV6_LEAVE_ANYCAST                   = 0x1c\n\tIPV6_LEAVE_GROUP                     = 0x15\n\tIPV6_MINHOPCOUNT                     = 0x49\n\tIPV6_MTU                             = 0x18\n\tIPV6_MTU_DISCOVER                    = 0x17\n\tIPV6_MULTICAST_ALL                   = 0x1d\n\tIPV6_MULTICAST_HOPS                  = 0x12\n\tIPV6_MULTICAST_IF                    = 0x11\n\tIPV6_MULTICAST_LOOP                  = 0x13\n\tIPV6_NEXTHOP                         = 0x9\n\tIPV6_ORIGDSTADDR                     = 0x4a\n\tIPV6_PATHMTU                         = 0x3d\n\tIPV6_PKTINFO                         = 0x32\n\tIPV6_PMTUDISC_DO                     = 0x2\n\tIPV6_PMTUDISC_DONT                   = 0x0\n\tIPV6_PMTUDISC_INTERFACE              = 0x4\n\tIPV6_PMTUDISC_OMIT                   = 0x5\n\tIPV6_PMTUDISC_PROBE                  = 0x3\n\tIPV6_PMTUDISC_WANT                   = 0x1\n\tIPV6_RECVDSTOPTS                     = 0x3a\n\tIPV6_RECVERR                         = 0x19\n\tIPV6_RECVFRAGSIZE                    = 0x4d\n\tIPV6_RECVHOPLIMIT                    = 0x33\n\tIPV6_RECVHOPOPTS                     = 0x35\n\tIPV6_RECVORIGDSTADDR                 = 0x4a\n\tIPV6_RECVPATHMTU                     = 0x3c\n\tIPV6_RECVPKTINFO                     = 0x31\n\tIPV6_RECVRTHDR                       = 0x38\n\tIPV6_RECVTCLASS                      = 0x42\n\tIPV6_ROUTER_ALERT                    = 0x16\n\tIPV6_RTHDR                           = 0x39\n\tIPV6_RTHDRDSTOPTS                    = 0x37\n\tIPV6_RTHDR_LOOSE                     = 0x0\n\tIPV6_RTHDR_STRICT                    = 0x1\n\tIPV6_RTHDR_TYPE_0                    = 0x0\n\tIPV6_RXDSTOPTS                       = 0x3b\n\tIPV6_RXHOPOPTS                       = 0x36\n\tIPV6_TCLASS                          = 0x43\n\tIPV6_TRANSPARENT                     = 0x4b\n\tIPV6_UNICAST_HOPS                    = 0x10\n\tIPV6_UNICAST_IF                      = 0x4c\n\tIPV6_V6ONLY                          = 0x1a\n\tIPV6_XFRM_POLICY                     = 0x23\n\tIP_ADD_MEMBERSHIP                    = 0x23\n\tIP_ADD_SOURCE_MEMBERSHIP             = 0x27\n\tIP_BIND_ADDRESS_NO_PORT              = 0x18\n\tIP_BLOCK_SOURCE                      = 0x26\n\tIP_CHECKSUM                          = 0x17\n\tIP_DEFAULT_MULTICAST_LOOP            = 0x1\n\tIP_DEFAULT_MULTICAST_TTL             = 0x1\n\tIP_DF                                = 0x4000\n\tIP_DROP_MEMBERSHIP                   = 0x24\n\tIP_DROP_SOURCE_MEMBERSHIP            = 0x28\n\tIP_FREEBIND                          = 0xf\n\tIP_HDRINCL                           = 0x3\n\tIP_IPSEC_POLICY                      = 0x10\n\tIP_MAXPACKET                         = 0xffff\n\tIP_MAX_MEMBERSHIPS                   = 0x14\n\tIP_MF                                = 0x2000\n\tIP_MINTTL                            = 0x15\n\tIP_MSFILTER                          = 0x29\n\tIP_MSS                               = 0x240\n\tIP_MTU                               = 0xe\n\tIP_MTU_DISCOVER                      = 0xa\n\tIP_MULTICAST_ALL                     = 0x31\n\tIP_MULTICAST_IF                      = 0x20\n\tIP_MULTICAST_LOOP                    = 0x22\n\tIP_MULTICAST_TTL                     = 0x21\n\tIP_NODEFRAG                          = 0x16\n\tIP_OFFMASK                           = 0x1fff\n\tIP_OPTIONS                           = 0x4\n\tIP_ORIGDSTADDR                       = 0x14\n\tIP_PASSSEC                           = 0x12\n\tIP_PKTINFO                           = 0x8\n\tIP_PKTOPTIONS                        = 0x9\n\tIP_PMTUDISC                          = 0xa\n\tIP_PMTUDISC_DO                       = 0x2\n\tIP_PMTUDISC_DONT                     = 0x0\n\tIP_PMTUDISC_INTERFACE                = 0x4\n\tIP_PMTUDISC_OMIT                     = 0x5\n\tIP_PMTUDISC_PROBE                    = 0x3\n\tIP_PMTUDISC_WANT                     = 0x1\n\tIP_RECVERR                           = 0xb\n\tIP_RECVFRAGSIZE                      = 0x19\n\tIP_RECVOPTS                          = 0x6\n\tIP_RECVORIGDSTADDR                   = 0x14\n\tIP_RECVRETOPTS                       = 0x7\n\tIP_RECVTOS                           = 0xd\n\tIP_RECVTTL                           = 0xc\n\tIP_RETOPTS                           = 0x7\n\tIP_RF                                = 0x8000\n\tIP_ROUTER_ALERT                      = 0x5\n\tIP_TOS                               = 0x1\n\tIP_TRANSPARENT                       = 0x13\n\tIP_TTL                               = 0x2\n\tIP_UNBLOCK_SOURCE                    = 0x25\n\tIP_UNICAST_IF                        = 0x32\n\tIP_XFRM_POLICY                       = 0x11\n\tISIG                                 = 0x1\n\tISOFS_SUPER_MAGIC                    = 0x9660\n\tISTRIP                               = 0x20\n\tIUCLC                                = 0x200\n\tIUTF8                                = 0x4000\n\tIXANY                                = 0x800\n\tIXOFF                                = 0x1000\n\tIXON                                 = 0x400\n\tJFFS2_SUPER_MAGIC                    = 0x72b6\n\tKEXEC_ARCH_386                       = 0x30000\n\tKEXEC_ARCH_68K                       = 0x40000\n\tKEXEC_ARCH_AARCH64                   = 0xb70000\n\tKEXEC_ARCH_ARM                       = 0x280000\n\tKEXEC_ARCH_DEFAULT                   = 0x0\n\tKEXEC_ARCH_IA_64                     = 0x320000\n\tKEXEC_ARCH_MASK                      = 0xffff0000\n\tKEXEC_ARCH_MIPS                      = 0x80000\n\tKEXEC_ARCH_MIPS_LE                   = 0xa0000\n\tKEXEC_ARCH_PPC                       = 0x140000\n\tKEXEC_ARCH_PPC64                     = 0x150000\n\tKEXEC_ARCH_S390                      = 0x160000\n\tKEXEC_ARCH_SH                        = 0x2a0000\n\tKEXEC_ARCH_X86_64                    = 0x3e0000\n\tKEXEC_FILE_NO_INITRAMFS              = 0x4\n\tKEXEC_FILE_ON_CRASH                  = 0x2\n\tKEXEC_FILE_UNLOAD                    = 0x1\n\tKEXEC_ON_CRASH                       = 0x1\n\tKEXEC_PRESERVE_CONTEXT               = 0x2\n\tKEXEC_SEGMENT_MAX                    = 0x10\n\tKEYCTL_ASSUME_AUTHORITY              = 0x10\n\tKEYCTL_CHOWN                         = 0x4\n\tKEYCTL_CLEAR                         = 0x7\n\tKEYCTL_DESCRIBE                      = 0x6\n\tKEYCTL_DH_COMPUTE                    = 0x17\n\tKEYCTL_GET_KEYRING_ID                = 0x0\n\tKEYCTL_GET_PERSISTENT                = 0x16\n\tKEYCTL_GET_SECURITY                  = 0x11\n\tKEYCTL_INSTANTIATE                   = 0xc\n\tKEYCTL_INSTANTIATE_IOV               = 0x14\n\tKEYCTL_INVALIDATE                    = 0x15\n\tKEYCTL_JOIN_SESSION_KEYRING          = 0x1\n\tKEYCTL_LINK                          = 0x8\n\tKEYCTL_NEGATE                        = 0xd\n\tKEYCTL_PKEY_DECRYPT                  = 0x1a\n\tKEYCTL_PKEY_ENCRYPT                  = 0x19\n\tKEYCTL_PKEY_QUERY                    = 0x18\n\tKEYCTL_PKEY_SIGN                     = 0x1b\n\tKEYCTL_PKEY_VERIFY                   = 0x1c\n\tKEYCTL_READ                          = 0xb\n\tKEYCTL_REJECT                        = 0x13\n\tKEYCTL_RESTRICT_KEYRING              = 0x1d\n\tKEYCTL_REVOKE                        = 0x3\n\tKEYCTL_SEARCH                        = 0xa\n\tKEYCTL_SESSION_TO_PARENT             = 0x12\n\tKEYCTL_SETPERM                       = 0x5\n\tKEYCTL_SET_REQKEY_KEYRING            = 0xe\n\tKEYCTL_SET_TIMEOUT                   = 0xf\n\tKEYCTL_SUPPORTS_DECRYPT              = 0x2\n\tKEYCTL_SUPPORTS_ENCRYPT              = 0x1\n\tKEYCTL_SUPPORTS_SIGN                 = 0x4\n\tKEYCTL_SUPPORTS_VERIFY               = 0x8\n\tKEYCTL_UNLINK                        = 0x9\n\tKEYCTL_UPDATE                        = 0x2\n\tKEY_REQKEY_DEFL_DEFAULT              = 0x0\n\tKEY_REQKEY_DEFL_GROUP_KEYRING        = 0x6\n\tKEY_REQKEY_DEFL_NO_CHANGE            = -0x1\n\tKEY_REQKEY_DEFL_PROCESS_KEYRING      = 0x2\n\tKEY_REQKEY_DEFL_REQUESTOR_KEYRING    = 0x7\n\tKEY_REQKEY_DEFL_SESSION_KEYRING      = 0x3\n\tKEY_REQKEY_DEFL_THREAD_KEYRING       = 0x1\n\tKEY_REQKEY_DEFL_USER_KEYRING         = 0x4\n\tKEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5\n\tKEY_SPEC_GROUP_KEYRING               = -0x6\n\tKEY_SPEC_PROCESS_KEYRING             = -0x2\n\tKEY_SPEC_REQKEY_AUTH_KEY             = -0x7\n\tKEY_SPEC_REQUESTOR_KEYRING           = -0x8\n\tKEY_SPEC_SESSION_KEYRING             = -0x3\n\tKEY_SPEC_THREAD_KEYRING              = -0x1\n\tKEY_SPEC_USER_KEYRING                = -0x4\n\tKEY_SPEC_USER_SESSION_KEYRING        = -0x5\n\tLINUX_REBOOT_CMD_CAD_OFF             = 0x0\n\tLINUX_REBOOT_CMD_CAD_ON              = 0x89abcdef\n\tLINUX_REBOOT_CMD_HALT                = 0xcdef0123\n\tLINUX_REBOOT_CMD_KEXEC               = 0x45584543\n\tLINUX_REBOOT_CMD_POWER_OFF           = 0x4321fedc\n\tLINUX_REBOOT_CMD_RESTART             = 0x1234567\n\tLINUX_REBOOT_CMD_RESTART2            = 0xa1b2c3d4\n\tLINUX_REBOOT_CMD_SW_SUSPEND          = 0xd000fce2\n\tLINUX_REBOOT_MAGIC1                  = 0xfee1dead\n\tLINUX_REBOOT_MAGIC2                  = 0x28121969\n\tLOCK_EX                              = 0x2\n\tLOCK_NB                              = 0x4\n\tLOCK_SH                              = 0x1\n\tLOCK_UN                              = 0x8\n\tMADV_DODUMP                          = 0x11\n\tMADV_DOFORK                          = 0xb\n\tMADV_DONTDUMP                        = 0x10\n\tMADV_DONTFORK                        = 0xa\n\tMADV_DONTNEED                        = 0x4\n\tMADV_FREE                            = 0x8\n\tMADV_HUGEPAGE                        = 0xe\n\tMADV_HWPOISON                        = 0x64\n\tMADV_KEEPONFORK                      = 0x13\n\tMADV_MERGEABLE                       = 0xc\n\tMADV_NOHUGEPAGE                      = 0xf\n\tMADV_NORMAL                          = 0x0\n\tMADV_RANDOM                          = 0x1\n\tMADV_REMOVE                          = 0x9\n\tMADV_SEQUENTIAL                      = 0x2\n\tMADV_UNMERGEABLE                     = 0xd\n\tMADV_WILLNEED                        = 0x3\n\tMADV_WIPEONFORK                      = 0x12\n\tMAP_ANON                             = 0x20\n\tMAP_ANONYMOUS                        = 0x20\n\tMAP_DENYWRITE                        = 0x800\n\tMAP_EXECUTABLE                       = 0x1000\n\tMAP_FILE                             = 0x0\n\tMAP_FIXED                            = 0x10\n\tMAP_FIXED_NOREPLACE                  = 0x100000\n\tMAP_GROWSDOWN                        = 0x100\n\tMAP_HUGETLB                          = 0x40000\n\tMAP_HUGE_MASK                        = 0x3f\n\tMAP_HUGE_SHIFT                       = 0x1a\n\tMAP_LOCKED                           = 0x2000\n\tMAP_NONBLOCK                         = 0x10000\n\tMAP_NORESERVE                        = 0x4000\n\tMAP_POPULATE                         = 0x8000\n\tMAP_PRIVATE                          = 0x2\n\tMAP_SHARED                           = 0x1\n\tMAP_SHARED_VALIDATE                  = 0x3\n\tMAP_STACK                            = 0x20000\n\tMAP_SYNC                             = 0x80000\n\tMAP_TYPE                             = 0xf\n\tMCAST_BLOCK_SOURCE                   = 0x2b\n\tMCAST_EXCLUDE                        = 0x0\n\tMCAST_INCLUDE                        = 0x1\n\tMCAST_JOIN_GROUP                     = 0x2a\n\tMCAST_JOIN_SOURCE_GROUP              = 0x2e\n\tMCAST_LEAVE_GROUP                    = 0x2d\n\tMCAST_LEAVE_SOURCE_GROUP             = 0x2f\n\tMCAST_MSFILTER                       = 0x30\n\tMCAST_UNBLOCK_SOURCE                 = 0x2c\n\tMCL_CURRENT                          = 0x1\n\tMCL_FUTURE                           = 0x2\n\tMCL_ONFAULT                          = 0x4\n\tMFD_ALLOW_SEALING                    = 0x2\n\tMFD_CLOEXEC                          = 0x1\n\tMFD_HUGETLB                          = 0x4\n\tMFD_HUGE_16GB                        = -0x78000000\n\tMFD_HUGE_16MB                        = 0x60000000\n\tMFD_HUGE_1GB                         = 0x78000000\n\tMFD_HUGE_1MB                         = 0x50000000\n\tMFD_HUGE_256MB                       = 0x70000000\n\tMFD_HUGE_2GB                         = 0x7c000000\n\tMFD_HUGE_2MB                         = 0x54000000\n\tMFD_HUGE_32MB                        = 0x64000000\n\tMFD_HUGE_512KB                       = 0x4c000000\n\tMFD_HUGE_512MB                       = 0x74000000\n\tMFD_HUGE_64KB                        = 0x40000000\n\tMFD_HUGE_8MB                         = 0x5c000000\n\tMFD_HUGE_MASK                        = 0x3f\n\tMFD_HUGE_SHIFT                       = 0x1a\n\tMINIX2_SUPER_MAGIC                   = 0x2468\n\tMINIX2_SUPER_MAGIC2                  = 0x2478\n\tMINIX3_SUPER_MAGIC                   = 0x4d5a\n\tMINIX_SUPER_MAGIC                    = 0x137f\n\tMINIX_SUPER_MAGIC2                   = 0x138f\n\tMNT_DETACH                           = 0x2\n\tMNT_EXPIRE                           = 0x4\n\tMNT_FORCE                            = 0x1\n\tMODULE_INIT_IGNORE_MODVERSIONS       = 0x1\n\tMODULE_INIT_IGNORE_VERMAGIC          = 0x2\n\tMSDOS_SUPER_MAGIC                    = 0x4d44\n\tMSG_BATCH                            = 0x40000\n\tMSG_CMSG_CLOEXEC                     = 0x40000000\n\tMSG_CONFIRM                          = 0x800\n\tMSG_CTRUNC                           = 0x8\n\tMSG_DONTROUTE                        = 0x4\n\tMSG_DONTWAIT                         = 0x40\n\tMSG_EOR                              = 0x80\n\tMSG_ERRQUEUE                         = 0x2000\n\tMSG_FASTOPEN                         = 0x20000000\n\tMSG_FIN                              = 0x200\n\tMSG_MORE                             = 0x8000\n\tMSG_NOSIGNAL                         = 0x4000\n\tMSG_OOB                              = 0x1\n\tMSG_PEEK                             = 0x2\n\tMSG_PROXY                            = 0x10\n\tMSG_RST                              = 0x1000\n\tMSG_SYN                              = 0x400\n\tMSG_TRUNC                            = 0x20\n\tMSG_TRYHARD                          = 0x4\n\tMSG_WAITALL                          = 0x100\n\tMSG_WAITFORONE                       = 0x10000\n\tMSG_ZEROCOPY                         = 0x4000000\n\tMS_ACTIVE                            = 0x40000000\n\tMS_ASYNC                             = 0x1\n\tMS_BIND                              = 0x1000\n\tMS_BORN                              = 0x20000000\n\tMS_DIRSYNC                           = 0x80\n\tMS_INVALIDATE                        = 0x2\n\tMS_I_VERSION                         = 0x800000\n\tMS_KERNMOUNT                         = 0x400000\n\tMS_LAZYTIME                          = 0x2000000\n\tMS_MANDLOCK                          = 0x40\n\tMS_MGC_MSK                           = 0xffff0000\n\tMS_MGC_VAL                           = 0xc0ed0000\n\tMS_MOVE                              = 0x2000\n\tMS_NOATIME                           = 0x400\n\tMS_NODEV                             = 0x4\n\tMS_NODIRATIME                        = 0x800\n\tMS_NOEXEC                            = 0x8\n\tMS_NOREMOTELOCK                      = 0x8000000\n\tMS_NOSEC                             = 0x10000000\n\tMS_NOSUID                            = 0x2\n\tMS_NOUSER                            = -0x80000000\n\tMS_POSIXACL                          = 0x10000\n\tMS_PRIVATE                           = 0x40000\n\tMS_RDONLY                            = 0x1\n\tMS_REC                               = 0x4000\n\tMS_RELATIME                          = 0x200000\n\tMS_REMOUNT                           = 0x20\n\tMS_RMT_MASK                          = 0x2800051\n\tMS_SHARED                            = 0x100000\n\tMS_SILENT                            = 0x8000\n\tMS_SLAVE                             = 0x80000\n\tMS_STRICTATIME                       = 0x1000000\n\tMS_SUBMOUNT                          = 0x4000000\n\tMS_SYNC                              = 0x4\n\tMS_SYNCHRONOUS                       = 0x10\n\tMS_UNBINDABLE                        = 0x20000\n\tMS_VERBOSE                           = 0x8000\n\tMTD_INODE_FS_MAGIC                   = 0x11307854\n\tNAME_MAX                             = 0xff\n\tNCP_SUPER_MAGIC                      = 0x564c\n\tNETLINK_ADD_MEMBERSHIP               = 0x1\n\tNETLINK_AUDIT                        = 0x9\n\tNETLINK_BROADCAST_ERROR              = 0x4\n\tNETLINK_CAP_ACK                      = 0xa\n\tNETLINK_CONNECTOR                    = 0xb\n\tNETLINK_CRYPTO                       = 0x15\n\tNETLINK_DNRTMSG                      = 0xe\n\tNETLINK_DROP_MEMBERSHIP              = 0x2\n\tNETLINK_ECRYPTFS                     = 0x13\n\tNETLINK_EXT_ACK                      = 0xb\n\tNETLINK_FIB_LOOKUP                   = 0xa\n\tNETLINK_FIREWALL                     = 0x3\n\tNETLINK_GENERIC                      = 0x10\n\tNETLINK_GET_STRICT_CHK               = 0xc\n\tNETLINK_INET_DIAG                    = 0x4\n\tNETLINK_IP6_FW                       = 0xd\n\tNETLINK_ISCSI                        = 0x8\n\tNETLINK_KOBJECT_UEVENT               = 0xf\n\tNETLINK_LISTEN_ALL_NSID              = 0x8\n\tNETLINK_LIST_MEMBERSHIPS             = 0x9\n\tNETLINK_NETFILTER                    = 0xc\n\tNETLINK_NFLOG                        = 0x5\n\tNETLINK_NO_ENOBUFS                   = 0x5\n\tNETLINK_PKTINFO                      = 0x3\n\tNETLINK_RDMA                         = 0x14\n\tNETLINK_ROUTE                        = 0x0\n\tNETLINK_RX_RING                      = 0x6\n\tNETLINK_SCSITRANSPORT                = 0x12\n\tNETLINK_SELINUX                      = 0x7\n\tNETLINK_SMC                          = 0x16\n\tNETLINK_SOCK_DIAG                    = 0x4\n\tNETLINK_TX_RING                      = 0x7\n\tNETLINK_UNUSED                       = 0x1\n\tNETLINK_USERSOCK                     = 0x2\n\tNETLINK_XFRM                         = 0x6\n\tNETNSA_MAX                           = 0x5\n\tNETNSA_NSID_NOT_ASSIGNED             = -0x1\n\tNFNETLINK_V0                         = 0x0\n\tNFNLGRP_ACCT_QUOTA                   = 0x8\n\tNFNLGRP_CONNTRACK_DESTROY            = 0x3\n\tNFNLGRP_CONNTRACK_EXP_DESTROY        = 0x6\n\tNFNLGRP_CONNTRACK_EXP_NEW            = 0x4\n\tNFNLGRP_CONNTRACK_EXP_UPDATE         = 0x5\n\tNFNLGRP_CONNTRACK_NEW                = 0x1\n\tNFNLGRP_CONNTRACK_UPDATE             = 0x2\n\tNFNLGRP_MAX                          = 0x9\n\tNFNLGRP_NFTABLES                     = 0x7\n\tNFNLGRP_NFTRACE                      = 0x9\n\tNFNLGRP_NONE                         = 0x0\n\tNFNL_BATCH_MAX                       = 0x1\n\tNFNL_MSG_BATCH_BEGIN                 = 0x10\n\tNFNL_MSG_BATCH_END                   = 0x11\n\tNFNL_NFA_NEST                        = 0x8000\n\tNFNL_SUBSYS_ACCT                     = 0x7\n\tNFNL_SUBSYS_COUNT                    = 0xc\n\tNFNL_SUBSYS_CTHELPER                 = 0x9\n\tNFNL_SUBSYS_CTNETLINK                = 0x1\n\tNFNL_SUBSYS_CTNETLINK_EXP            = 0x2\n\tNFNL_SUBSYS_CTNETLINK_TIMEOUT        = 0x8\n\tNFNL_SUBSYS_IPSET                    = 0x6\n\tNFNL_SUBSYS_NFTABLES                 = 0xa\n\tNFNL_SUBSYS_NFT_COMPAT               = 0xb\n\tNFNL_SUBSYS_NONE                     = 0x0\n\tNFNL_SUBSYS_OSF                      = 0x5\n\tNFNL_SUBSYS_QUEUE                    = 0x3\n\tNFNL_SUBSYS_ULOG                     = 0x4\n\tNFS_SUPER_MAGIC                      = 0x6969\n\tNILFS_SUPER_MAGIC                    = 0x3434\n\tNL0                                  = 0x0\n\tNL1                                  = 0x100\n\tNLA_ALIGNTO                          = 0x4\n\tNLA_F_NESTED                         = 0x8000\n\tNLA_F_NET_BYTEORDER                  = 0x4000\n\tNLA_HDRLEN                           = 0x4\n\tNLDLY                                = 0x100\n\tNLMSG_ALIGNTO                        = 0x4\n\tNLMSG_DONE                           = 0x3\n\tNLMSG_ERROR                          = 0x2\n\tNLMSG_HDRLEN                         = 0x10\n\tNLMSG_MIN_TYPE                       = 0x10\n\tNLMSG_NOOP                           = 0x1\n\tNLMSG_OVERRUN                        = 0x4\n\tNLM_F_ACK                            = 0x4\n\tNLM_F_ACK_TLVS                       = 0x200\n\tNLM_F_APPEND                         = 0x800\n\tNLM_F_ATOMIC                         = 0x400\n\tNLM_F_CAPPED                         = 0x100\n\tNLM_F_CREATE                         = 0x400\n\tNLM_F_DUMP                           = 0x300\n\tNLM_F_DUMP_FILTERED                  = 0x20\n\tNLM_F_DUMP_INTR                      = 0x10\n\tNLM_F_ECHO                           = 0x8\n\tNLM_F_EXCL                           = 0x200\n\tNLM_F_MATCH                          = 0x200\n\tNLM_F_MULTI                          = 0x2\n\tNLM_F_NONREC                         = 0x100\n\tNLM_F_REPLACE                        = 0x100\n\tNLM_F_REQUEST                        = 0x1\n\tNLM_F_ROOT                           = 0x100\n\tNOFLSH                               = 0x80\n\tNSFS_MAGIC                           = 0x6e736673\n\tOCFS2_SUPER_MAGIC                    = 0x7461636f\n\tOCRNL                                = 0x8\n\tOFDEL                                = 0x80\n\tOFILL                                = 0x40\n\tOLCUC                                = 0x2\n\tONLCR                                = 0x4\n\tONLRET                               = 0x20\n\tONOCR                                = 0x10\n\tOPENPROM_SUPER_MAGIC                 = 0x9fa1\n\tOPOST                                = 0x1\n\tOVERLAYFS_SUPER_MAGIC                = 0x794c7630\n\tO_ACCMODE                            = 0x3\n\tO_APPEND                             = 0x400\n\tO_ASYNC                              = 0x2000\n\tO_CLOEXEC                            = 0x80000\n\tO_CREAT                              = 0x40\n\tO_DIRECT                             = 0x10000\n\tO_DIRECTORY                          = 0x4000\n\tO_DSYNC                              = 0x1000\n\tO_EXCL                               = 0x80\n\tO_FSYNC                              = 0x101000\n\tO_LARGEFILE                          = 0x0\n\tO_NDELAY                             = 0x800\n\tO_NOATIME                            = 0x40000\n\tO_NOCTTY                             = 0x100\n\tO_NOFOLLOW                           = 0x8000\n\tO_NONBLOCK                           = 0x800\n\tO_PATH                               = 0x200000\n\tO_RDONLY                             = 0x0\n\tO_RDWR                               = 0x2\n\tO_RSYNC                              = 0x101000\n\tO_SYNC                               = 0x101000\n\tO_TMPFILE                            = 0x404000\n\tO_TRUNC                              = 0x200\n\tO_WRONLY                             = 0x1\n\tPACKET_ADD_MEMBERSHIP                = 0x1\n\tPACKET_AUXDATA                       = 0x8\n\tPACKET_BROADCAST                     = 0x1\n\tPACKET_COPY_THRESH                   = 0x7\n\tPACKET_DROP_MEMBERSHIP               = 0x2\n\tPACKET_FANOUT                        = 0x12\n\tPACKET_FANOUT_CBPF                   = 0x6\n\tPACKET_FANOUT_CPU                    = 0x2\n\tPACKET_FANOUT_DATA                   = 0x16\n\tPACKET_FANOUT_EBPF                   = 0x7\n\tPACKET_FANOUT_FLAG_DEFRAG            = 0x8000\n\tPACKET_FANOUT_FLAG_ROLLOVER          = 0x1000\n\tPACKET_FANOUT_FLAG_UNIQUEID          = 0x2000\n\tPACKET_FANOUT_HASH                   = 0x0\n\tPACKET_FANOUT_LB                     = 0x1\n\tPACKET_FANOUT_QM                     = 0x5\n\tPACKET_FANOUT_RND                    = 0x4\n\tPACKET_FANOUT_ROLLOVER               = 0x3\n\tPACKET_FASTROUTE                     = 0x6\n\tPACKET_HDRLEN                        = 0xb\n\tPACKET_HOST                          = 0x0\n\tPACKET_IGNORE_OUTGOING               = 0x17\n\tPACKET_KERNEL                        = 0x7\n\tPACKET_LOOPBACK                      = 0x5\n\tPACKET_LOSS                          = 0xe\n\tPACKET_MR_ALLMULTI                   = 0x2\n\tPACKET_MR_MULTICAST                  = 0x0\n\tPACKET_MR_PROMISC                    = 0x1\n\tPACKET_MR_UNICAST                    = 0x3\n\tPACKET_MULTICAST                     = 0x2\n\tPACKET_ORIGDEV                       = 0x9\n\tPACKET_OTHERHOST                     = 0x3\n\tPACKET_OUTGOING                      = 0x4\n\tPACKET_QDISC_BYPASS                  = 0x14\n\tPACKET_RECV_OUTPUT                   = 0x3\n\tPACKET_RESERVE                       = 0xc\n\tPACKET_ROLLOVER_STATS                = 0x15\n\tPACKET_RX_RING                       = 0x5\n\tPACKET_STATISTICS                    = 0x6\n\tPACKET_TIMESTAMP                     = 0x11\n\tPACKET_TX_HAS_OFF                    = 0x13\n\tPACKET_TX_RING                       = 0xd\n\tPACKET_TX_TIMESTAMP                  = 0x10\n\tPACKET_USER                          = 0x6\n\tPACKET_VERSION                       = 0xa\n\tPACKET_VNET_HDR                      = 0xf\n\tPARENB                               = 0x100\n\tPARITY_CRC16_PR0                     = 0x2\n\tPARITY_CRC16_PR0_CCITT               = 0x4\n\tPARITY_CRC16_PR1                     = 0x3\n\tPARITY_CRC16_PR1_CCITT               = 0x5\n\tPARITY_CRC32_PR0_CCITT               = 0x6\n\tPARITY_CRC32_PR1_CCITT               = 0x7\n\tPARITY_DEFAULT                       = 0x0\n\tPARITY_NONE                          = 0x1\n\tPARMRK                               = 0x8\n\tPARODD                               = 0x200\n\tPENDIN                               = 0x4000\n\tPERF_EVENT_IOC_DISABLE               = 0x2401\n\tPERF_EVENT_IOC_ENABLE                = 0x2400\n\tPERF_EVENT_IOC_ID                    = 0x80082407\n\tPERF_EVENT_IOC_MODIFY_ATTRIBUTES     = 0x4008240b\n\tPERF_EVENT_IOC_PAUSE_OUTPUT          = 0x40042409\n\tPERF_EVENT_IOC_PERIOD                = 0x40082404\n\tPERF_EVENT_IOC_QUERY_BPF             = 0xc008240a\n\tPERF_EVENT_IOC_REFRESH               = 0x2402\n\tPERF_EVENT_IOC_RESET                 = 0x2403\n\tPERF_EVENT_IOC_SET_BPF               = 0x40042408\n\tPERF_EVENT_IOC_SET_FILTER            = 0x40082406\n\tPERF_EVENT_IOC_SET_OUTPUT            = 0x2405\n\tPIPEFS_MAGIC                         = 0x50495045\n\tPPPIOCATTACH                         = 0x4004743d\n\tPPPIOCATTCHAN                        = 0x40047438\n\tPPPIOCCONNECT                        = 0x4004743a\n\tPPPIOCDETACH                         = 0x4004743c\n\tPPPIOCDISCONN                        = 0x7439\n\tPPPIOCGASYNCMAP                      = 0x80047458\n\tPPPIOCGCHAN                          = 0x80047437\n\tPPPIOCGDEBUG                         = 0x80047441\n\tPPPIOCGFLAGS                         = 0x8004745a\n\tPPPIOCGIDLE                          = 0x8010743f\n\tPPPIOCGL2TPSTATS                     = 0x80487436\n\tPPPIOCGMRU                           = 0x80047453\n\tPPPIOCGNPMODE                        = 0xc008744c\n\tPPPIOCGRASYNCMAP                     = 0x80047455\n\tPPPIOCGUNIT                          = 0x80047456\n\tPPPIOCGXASYNCMAP                     = 0x80207450\n\tPPPIOCNEWUNIT                        = 0xc004743e\n\tPPPIOCSACTIVE                        = 0x40107446\n\tPPPIOCSASYNCMAP                      = 0x40047457\n\tPPPIOCSCOMPRESS                      = 0x4010744d\n\tPPPIOCSDEBUG                         = 0x40047440\n\tPPPIOCSFLAGS                         = 0x40047459\n\tPPPIOCSMAXCID                        = 0x40047451\n\tPPPIOCSMRRU                          = 0x4004743b\n\tPPPIOCSMRU                           = 0x40047452\n\tPPPIOCSNPMODE                        = 0x4008744b\n\tPPPIOCSPASS                          = 0x40107447\n\tPPPIOCSRASYNCMAP                     = 0x40047454\n\tPPPIOCSXASYNCMAP                     = 0x4020744f\n\tPPPIOCXFERUNIT                       = 0x744e\n\tPRIO_PGRP                            = 0x1\n\tPRIO_PROCESS                         = 0x0\n\tPRIO_USER                            = 0x2\n\tPROC_SUPER_MAGIC                     = 0x9fa0\n\tPROT_EXEC                            = 0x4\n\tPROT_GROWSDOWN                       = 0x1000000\n\tPROT_GROWSUP                         = 0x2000000\n\tPROT_NONE                            = 0x0\n\tPROT_READ                            = 0x1\n\tPROT_WRITE                           = 0x2\n\tPR_CAPBSET_DROP                      = 0x18\n\tPR_CAPBSET_READ                      = 0x17\n\tPR_CAP_AMBIENT                       = 0x2f\n\tPR_CAP_AMBIENT_CLEAR_ALL             = 0x4\n\tPR_CAP_AMBIENT_IS_SET                = 0x1\n\tPR_CAP_AMBIENT_LOWER                 = 0x3\n\tPR_CAP_AMBIENT_RAISE                 = 0x2\n\tPR_ENDIAN_BIG                        = 0x0\n\tPR_ENDIAN_LITTLE                     = 0x1\n\tPR_ENDIAN_PPC_LITTLE                 = 0x2\n\tPR_FPEMU_NOPRINT                     = 0x1\n\tPR_FPEMU_SIGFPE                      = 0x2\n\tPR_FP_EXC_ASYNC                      = 0x2\n\tPR_FP_EXC_DISABLED                   = 0x0\n\tPR_FP_EXC_DIV                        = 0x10000\n\tPR_FP_EXC_INV                        = 0x100000\n\tPR_FP_EXC_NONRECOV                   = 0x1\n\tPR_FP_EXC_OVF                        = 0x20000\n\tPR_FP_EXC_PRECISE                    = 0x3\n\tPR_FP_EXC_RES                        = 0x80000\n\tPR_FP_EXC_SW_ENABLE                  = 0x80\n\tPR_FP_EXC_UND                        = 0x40000\n\tPR_FP_MODE_FR                        = 0x1\n\tPR_FP_MODE_FRE                       = 0x2\n\tPR_GET_CHILD_SUBREAPER               = 0x25\n\tPR_GET_DUMPABLE                      = 0x3\n\tPR_GET_ENDIAN                        = 0x13\n\tPR_GET_FPEMU                         = 0x9\n\tPR_GET_FPEXC                         = 0xb\n\tPR_GET_FP_MODE                       = 0x2e\n\tPR_GET_KEEPCAPS                      = 0x7\n\tPR_GET_NAME                          = 0x10\n\tPR_GET_NO_NEW_PRIVS                  = 0x27\n\tPR_GET_PDEATHSIG                     = 0x2\n\tPR_GET_SECCOMP                       = 0x15\n\tPR_GET_SECUREBITS                    = 0x1b\n\tPR_GET_SPECULATION_CTRL              = 0x34\n\tPR_GET_THP_DISABLE                   = 0x2a\n\tPR_GET_TID_ADDRESS                   = 0x28\n\tPR_GET_TIMERSLACK                    = 0x1e\n\tPR_GET_TIMING                        = 0xd\n\tPR_GET_TSC                           = 0x19\n\tPR_GET_UNALIGN                       = 0x5\n\tPR_MCE_KILL                          = 0x21\n\tPR_MCE_KILL_CLEAR                    = 0x0\n\tPR_MCE_KILL_DEFAULT                  = 0x2\n\tPR_MCE_KILL_EARLY                    = 0x1\n\tPR_MCE_KILL_GET                      = 0x22\n\tPR_MCE_KILL_LATE                     = 0x0\n\tPR_MCE_KILL_SET                      = 0x1\n\tPR_MPX_DISABLE_MANAGEMENT            = 0x2c\n\tPR_MPX_ENABLE_MANAGEMENT             = 0x2b\n\tPR_PAC_APDAKEY                       = 0x4\n\tPR_PAC_APDBKEY                       = 0x8\n\tPR_PAC_APGAKEY                       = 0x10\n\tPR_PAC_APIAKEY                       = 0x1\n\tPR_PAC_APIBKEY                       = 0x2\n\tPR_PAC_RESET_KEYS                    = 0x36\n\tPR_SET_CHILD_SUBREAPER               = 0x24\n\tPR_SET_DUMPABLE                      = 0x4\n\tPR_SET_ENDIAN                        = 0x14\n\tPR_SET_FPEMU                         = 0xa\n\tPR_SET_FPEXC                         = 0xc\n\tPR_SET_FP_MODE                       = 0x2d\n\tPR_SET_KEEPCAPS                      = 0x8\n\tPR_SET_MM                            = 0x23\n\tPR_SET_MM_ARG_END                    = 0x9\n\tPR_SET_MM_ARG_START                  = 0x8\n\tPR_SET_MM_AUXV                       = 0xc\n\tPR_SET_MM_BRK                        = 0x7\n\tPR_SET_MM_END_CODE                   = 0x2\n\tPR_SET_MM_END_DATA                   = 0x4\n\tPR_SET_MM_ENV_END                    = 0xb\n\tPR_SET_MM_ENV_START                  = 0xa\n\tPR_SET_MM_EXE_FILE                   = 0xd\n\tPR_SET_MM_MAP                        = 0xe\n\tPR_SET_MM_MAP_SIZE                   = 0xf\n\tPR_SET_MM_START_BRK                  = 0x6\n\tPR_SET_MM_START_CODE                 = 0x1\n\tPR_SET_MM_START_DATA                 = 0x3\n\tPR_SET_MM_START_STACK                = 0x5\n\tPR_SET_NAME                          = 0xf\n\tPR_SET_NO_NEW_PRIVS                  = 0x26\n\tPR_SET_PDEATHSIG                     = 0x1\n\tPR_SET_PTRACER                       = 0x59616d61\n\tPR_SET_PTRACER_ANY                   = 0xffffffffffffffff\n\tPR_SET_SECCOMP                       = 0x16\n\tPR_SET_SECUREBITS                    = 0x1c\n\tPR_SET_SPECULATION_CTRL              = 0x35\n\tPR_SET_THP_DISABLE                   = 0x29\n\tPR_SET_TIMERSLACK                    = 0x1d\n\tPR_SET_TIMING                        = 0xe\n\tPR_SET_TSC                           = 0x1a\n\tPR_SET_UNALIGN                       = 0x6\n\tPR_SPEC_DISABLE                      = 0x4\n\tPR_SPEC_DISABLE_NOEXEC               = 0x10\n\tPR_SPEC_ENABLE                       = 0x2\n\tPR_SPEC_FORCE_DISABLE                = 0x8\n\tPR_SPEC_INDIRECT_BRANCH              = 0x1\n\tPR_SPEC_NOT_AFFECTED                 = 0x0\n\tPR_SPEC_PRCTL                        = 0x1\n\tPR_SPEC_STORE_BYPASS                 = 0x0\n\tPR_SVE_GET_VL                        = 0x33\n\tPR_SVE_SET_VL                        = 0x32\n\tPR_SVE_SET_VL_ONEXEC                 = 0x40000\n\tPR_SVE_VL_INHERIT                    = 0x20000\n\tPR_SVE_VL_LEN_MASK                   = 0xffff\n\tPR_TASK_PERF_EVENTS_DISABLE          = 0x1f\n\tPR_TASK_PERF_EVENTS_ENABLE           = 0x20\n\tPR_TIMING_STATISTICAL                = 0x0\n\tPR_TIMING_TIMESTAMP                  = 0x1\n\tPR_TSC_ENABLE                        = 0x1\n\tPR_TSC_SIGSEGV                       = 0x2\n\tPR_UNALIGN_NOPRINT                   = 0x1\n\tPR_UNALIGN_SIGBUS                    = 0x2\n\tPSTOREFS_MAGIC                       = 0x6165676c\n\tPTRACE_ATTACH                        = 0x10\n\tPTRACE_CONT                          = 0x7\n\tPTRACE_DETACH                        = 0x11\n\tPTRACE_EVENT_CLONE                   = 0x3\n\tPTRACE_EVENT_EXEC                    = 0x4\n\tPTRACE_EVENT_EXIT                    = 0x6\n\tPTRACE_EVENT_FORK                    = 0x1\n\tPTRACE_EVENT_SECCOMP                 = 0x7\n\tPTRACE_EVENT_STOP                    = 0x80\n\tPTRACE_EVENT_VFORK                   = 0x2\n\tPTRACE_EVENT_VFORK_DONE              = 0x5\n\tPTRACE_GETEVENTMSG                   = 0x4201\n\tPTRACE_GETREGS                       = 0xc\n\tPTRACE_GETREGSET                     = 0x4204\n\tPTRACE_GETSIGINFO                    = 0x4202\n\tPTRACE_GETSIGMASK                    = 0x420a\n\tPTRACE_INTERRUPT                     = 0x4207\n\tPTRACE_KILL                          = 0x8\n\tPTRACE_LISTEN                        = 0x4208\n\tPTRACE_O_EXITKILL                    = 0x100000\n\tPTRACE_O_MASK                        = 0x3000ff\n\tPTRACE_O_SUSPEND_SECCOMP             = 0x200000\n\tPTRACE_O_TRACECLONE                  = 0x8\n\tPTRACE_O_TRACEEXEC                   = 0x10\n\tPTRACE_O_TRACEEXIT                   = 0x40\n\tPTRACE_O_TRACEFORK                   = 0x2\n\tPTRACE_O_TRACESECCOMP                = 0x80\n\tPTRACE_O_TRACESYSGOOD                = 0x1\n\tPTRACE_O_TRACEVFORK                  = 0x4\n\tPTRACE_O_TRACEVFORKDONE              = 0x20\n\tPTRACE_PEEKDATA                      = 0x2\n\tPTRACE_PEEKSIGINFO                   = 0x4209\n\tPTRACE_PEEKSIGINFO_SHARED            = 0x1\n\tPTRACE_PEEKTEXT                      = 0x1\n\tPTRACE_PEEKUSR                       = 0x3\n\tPTRACE_POKEDATA                      = 0x5\n\tPTRACE_POKETEXT                      = 0x4\n\tPTRACE_POKEUSR                       = 0x6\n\tPTRACE_SECCOMP_GET_FILTER            = 0x420c\n\tPTRACE_SECCOMP_GET_METADATA          = 0x420d\n\tPTRACE_SEIZE                         = 0x4206\n\tPTRACE_SETOPTIONS                    = 0x4200\n\tPTRACE_SETREGS                       = 0xd\n\tPTRACE_SETREGSET                     = 0x4205\n\tPTRACE_SETSIGINFO                    = 0x4203\n\tPTRACE_SETSIGMASK                    = 0x420b\n\tPTRACE_SINGLESTEP                    = 0x9\n\tPTRACE_SYSCALL                       = 0x18\n\tPTRACE_TRACEME                       = 0x0\n\tQNX4_SUPER_MAGIC                     = 0x2f\n\tQNX6_SUPER_MAGIC                     = 0x68191122\n\tRAMFS_MAGIC                          = 0x858458f6\n\tRDTGROUP_SUPER_MAGIC                 = 0x7655821\n\tREISERFS_SUPER_MAGIC                 = 0x52654973\n\tRENAME_EXCHANGE                      = 0x2\n\tRENAME_NOREPLACE                     = 0x1\n\tRENAME_WHITEOUT                      = 0x4\n\tRLIMIT_AS                            = 0x9\n\tRLIMIT_CORE                          = 0x4\n\tRLIMIT_CPU                           = 0x0\n\tRLIMIT_DATA                          = 0x2\n\tRLIMIT_FSIZE                         = 0x1\n\tRLIMIT_LOCKS                         = 0xa\n\tRLIMIT_MEMLOCK                       = 0x8\n\tRLIMIT_MSGQUEUE                      = 0xc\n\tRLIMIT_NICE                          = 0xd\n\tRLIMIT_NOFILE                        = 0x7\n\tRLIMIT_NPROC                         = 0x6\n\tRLIMIT_RSS                           = 0x5\n\tRLIMIT_RTPRIO                        = 0xe\n\tRLIMIT_RTTIME                        = 0xf\n\tRLIMIT_SIGPENDING                    = 0xb\n\tRLIMIT_STACK                         = 0x3\n\tRLIM_INFINITY                        = 0xffffffffffffffff\n\tRNDADDENTROPY                        = 0x40085203\n\tRNDADDTOENTCNT                       = 0x40045201\n\tRNDCLEARPOOL                         = 0x5206\n\tRNDGETENTCNT                         = 0x80045200\n\tRNDGETPOOL                           = 0x80085202\n\tRNDRESEEDCRNG                        = 0x5207\n\tRNDZAPENTCNT                         = 0x5204\n\tRTAX_ADVMSS                          = 0x8\n\tRTAX_CC_ALGO                         = 0x10\n\tRTAX_CWND                            = 0x7\n\tRTAX_FASTOPEN_NO_COOKIE              = 0x11\n\tRTAX_FEATURES                        = 0xc\n\tRTAX_FEATURE_ALLFRAG                 = 0x8\n\tRTAX_FEATURE_ECN                     = 0x1\n\tRTAX_FEATURE_MASK                    = 0xf\n\tRTAX_FEATURE_SACK                    = 0x2\n\tRTAX_FEATURE_TIMESTAMP               = 0x4\n\tRTAX_HOPLIMIT                        = 0xa\n\tRTAX_INITCWND                        = 0xb\n\tRTAX_INITRWND                        = 0xe\n\tRTAX_LOCK                            = 0x1\n\tRTAX_MAX                             = 0x11\n\tRTAX_MTU                             = 0x2\n\tRTAX_QUICKACK                        = 0xf\n\tRTAX_REORDERING                      = 0x9\n\tRTAX_RTO_MIN                         = 0xd\n\tRTAX_RTT                             = 0x4\n\tRTAX_RTTVAR                          = 0x5\n\tRTAX_SSTHRESH                        = 0x6\n\tRTAX_UNSPEC                          = 0x0\n\tRTAX_WINDOW                          = 0x3\n\tRTA_ALIGNTO                          = 0x4\n\tRTA_MAX                              = 0x1d\n\tRTCF_DIRECTSRC                       = 0x4000000\n\tRTCF_DOREDIRECT                      = 0x1000000\n\tRTCF_LOG                             = 0x2000000\n\tRTCF_MASQ                            = 0x400000\n\tRTCF_NAT                             = 0x800000\n\tRTCF_VALVE                           = 0x200000\n\tRTC_AF                               = 0x20\n\tRTC_AIE_OFF                          = 0x7002\n\tRTC_AIE_ON                           = 0x7001\n\tRTC_ALM_READ                         = 0x80247008\n\tRTC_ALM_SET                          = 0x40247007\n\tRTC_EPOCH_READ                       = 0x8008700d\n\tRTC_EPOCH_SET                        = 0x4008700e\n\tRTC_IRQF                             = 0x80\n\tRTC_IRQP_READ                        = 0x8008700b\n\tRTC_IRQP_SET                         = 0x4008700c\n\tRTC_MAX_FREQ                         = 0x2000\n\tRTC_PF                               = 0x40\n\tRTC_PIE_OFF                          = 0x7006\n\tRTC_PIE_ON                           = 0x7005\n\tRTC_PLL_GET                          = 0x80207011\n\tRTC_PLL_SET                          = 0x40207012\n\tRTC_RD_TIME                          = 0x80247009\n\tRTC_SET_TIME                         = 0x4024700a\n\tRTC_UF                               = 0x10\n\tRTC_UIE_OFF                          = 0x7004\n\tRTC_UIE_ON                           = 0x7003\n\tRTC_VL_CLR                           = 0x7014\n\tRTC_VL_READ                          = 0x80047013\n\tRTC_WIE_OFF                          = 0x7010\n\tRTC_WIE_ON                           = 0x700f\n\tRTC_WKALM_RD                         = 0x80287010\n\tRTC_WKALM_SET                        = 0x4028700f\n\tRTF_ADDRCLASSMASK                    = 0xf8000000\n\tRTF_ADDRCONF                         = 0x40000\n\tRTF_ALLONLINK                        = 0x20000\n\tRTF_BROADCAST                        = 0x10000000\n\tRTF_CACHE                            = 0x1000000\n\tRTF_DEFAULT                          = 0x10000\n\tRTF_DYNAMIC                          = 0x10\n\tRTF_FLOW                             = 0x2000000\n\tRTF_GATEWAY                          = 0x2\n\tRTF_HOST                             = 0x4\n\tRTF_INTERFACE                        = 0x40000000\n\tRTF_IRTT                             = 0x100\n\tRTF_LINKRT                           = 0x100000\n\tRTF_LOCAL                            = 0x80000000\n\tRTF_MODIFIED                         = 0x20\n\tRTF_MSS                              = 0x40\n\tRTF_MTU                              = 0x40\n\tRTF_MULTICAST                        = 0x20000000\n\tRTF_NAT                              = 0x8000000\n\tRTF_NOFORWARD                        = 0x1000\n\tRTF_NONEXTHOP                        = 0x200000\n\tRTF_NOPMTUDISC                       = 0x4000\n\tRTF_POLICY                           = 0x4000000\n\tRTF_REINSTATE                        = 0x8\n\tRTF_REJECT                           = 0x200\n\tRTF_STATIC                           = 0x400\n\tRTF_THROW                            = 0x2000\n\tRTF_UP                               = 0x1\n\tRTF_WINDOW                           = 0x80\n\tRTF_XRESOLVE                         = 0x800\n\tRTM_BASE                             = 0x10\n\tRTM_DELACTION                        = 0x31\n\tRTM_DELADDR                          = 0x15\n\tRTM_DELADDRLABEL                     = 0x49\n\tRTM_DELCHAIN                         = 0x65\n\tRTM_DELLINK                          = 0x11\n\tRTM_DELMDB                           = 0x55\n\tRTM_DELNEIGH                         = 0x1d\n\tRTM_DELNETCONF                       = 0x51\n\tRTM_DELNSID                          = 0x59\n\tRTM_DELQDISC                         = 0x25\n\tRTM_DELROUTE                         = 0x19\n\tRTM_DELRULE                          = 0x21\n\tRTM_DELTCLASS                        = 0x29\n\tRTM_DELTFILTER                       = 0x2d\n\tRTM_F_CLONED                         = 0x200\n\tRTM_F_EQUALIZE                       = 0x400\n\tRTM_F_FIB_MATCH                      = 0x2000\n\tRTM_F_LOOKUP_TABLE                   = 0x1000\n\tRTM_F_NOTIFY                         = 0x100\n\tRTM_F_PREFIX                         = 0x800\n\tRTM_GETACTION                        = 0x32\n\tRTM_GETADDR                          = 0x16\n\tRTM_GETADDRLABEL                     = 0x4a\n\tRTM_GETANYCAST                       = 0x3e\n\tRTM_GETCHAIN                         = 0x66\n\tRTM_GETDCB                           = 0x4e\n\tRTM_GETLINK                          = 0x12\n\tRTM_GETMDB                           = 0x56\n\tRTM_GETMULTICAST                     = 0x3a\n\tRTM_GETNEIGH                         = 0x1e\n\tRTM_GETNEIGHTBL                      = 0x42\n\tRTM_GETNETCONF                       = 0x52\n\tRTM_GETNSID                          = 0x5a\n\tRTM_GETQDISC                         = 0x26\n\tRTM_GETROUTE                         = 0x1a\n\tRTM_GETRULE                          = 0x22\n\tRTM_GETSTATS                         = 0x5e\n\tRTM_GETTCLASS                        = 0x2a\n\tRTM_GETTFILTER                       = 0x2e\n\tRTM_MAX                              = 0x67\n\tRTM_NEWACTION                        = 0x30\n\tRTM_NEWADDR                          = 0x14\n\tRTM_NEWADDRLABEL                     = 0x48\n\tRTM_NEWCACHEREPORT                   = 0x60\n\tRTM_NEWCHAIN                         = 0x64\n\tRTM_NEWLINK                          = 0x10\n\tRTM_NEWMDB                           = 0x54\n\tRTM_NEWNDUSEROPT                     = 0x44\n\tRTM_NEWNEIGH                         = 0x1c\n\tRTM_NEWNEIGHTBL                      = 0x40\n\tRTM_NEWNETCONF                       = 0x50\n\tRTM_NEWNSID                          = 0x58\n\tRTM_NEWPREFIX                        = 0x34\n\tRTM_NEWQDISC                         = 0x24\n\tRTM_NEWROUTE                         = 0x18\n\tRTM_NEWRULE                          = 0x20\n\tRTM_NEWSTATS                         = 0x5c\n\tRTM_NEWTCLASS                        = 0x28\n\tRTM_NEWTFILTER                       = 0x2c\n\tRTM_NR_FAMILIES                      = 0x16\n\tRTM_NR_MSGTYPES                      = 0x58\n\tRTM_SETDCB                           = 0x4f\n\tRTM_SETLINK                          = 0x13\n\tRTM_SETNEIGHTBL                      = 0x43\n\tRTNH_ALIGNTO                         = 0x4\n\tRTNH_COMPARE_MASK                    = 0x19\n\tRTNH_F_DEAD                          = 0x1\n\tRTNH_F_LINKDOWN                      = 0x10\n\tRTNH_F_OFFLOAD                       = 0x8\n\tRTNH_F_ONLINK                        = 0x4\n\tRTNH_F_PERVASIVE                     = 0x2\n\tRTNH_F_UNRESOLVED                    = 0x20\n\tRTN_MAX                              = 0xb\n\tRTPROT_BABEL                         = 0x2a\n\tRTPROT_BGP                           = 0xba\n\tRTPROT_BIRD                          = 0xc\n\tRTPROT_BOOT                          = 0x3\n\tRTPROT_DHCP                          = 0x10\n\tRTPROT_DNROUTED                      = 0xd\n\tRTPROT_EIGRP                         = 0xc0\n\tRTPROT_GATED                         = 0x8\n\tRTPROT_ISIS                          = 0xbb\n\tRTPROT_KERNEL                        = 0x2\n\tRTPROT_MROUTED                       = 0x11\n\tRTPROT_MRT                           = 0xa\n\tRTPROT_NTK                           = 0xf\n\tRTPROT_OSPF                          = 0xbc\n\tRTPROT_RA                            = 0x9\n\tRTPROT_REDIRECT                      = 0x1\n\tRTPROT_RIP                           = 0xbd\n\tRTPROT_STATIC                        = 0x4\n\tRTPROT_UNSPEC                        = 0x0\n\tRTPROT_XORP                          = 0xe\n\tRTPROT_ZEBRA                         = 0xb\n\tRT_CLASS_DEFAULT                     = 0xfd\n\tRT_CLASS_LOCAL                       = 0xff\n\tRT_CLASS_MAIN                        = 0xfe\n\tRT_CLASS_MAX                         = 0xff\n\tRT_CLASS_UNSPEC                      = 0x0\n\tRUSAGE_CHILDREN                      = -0x1\n\tRUSAGE_SELF                          = 0x0\n\tRUSAGE_THREAD                        = 0x1\n\tSCM_CREDENTIALS                      = 0x2\n\tSCM_RIGHTS                           = 0x1\n\tSCM_TIMESTAMP                        = 0x1d\n\tSCM_TIMESTAMPING                     = 0x25\n\tSCM_TIMESTAMPING_OPT_STATS           = 0x36\n\tSCM_TIMESTAMPING_PKTINFO             = 0x3a\n\tSCM_TIMESTAMPNS                      = 0x23\n\tSCM_TXTIME                           = 0x3d\n\tSCM_WIFI_STATUS                      = 0x29\n\tSC_LOG_FLUSH                         = 0x100000\n\tSECCOMP_MODE_DISABLED                = 0x0\n\tSECCOMP_MODE_FILTER                  = 0x2\n\tSECCOMP_MODE_STRICT                  = 0x1\n\tSECURITYFS_MAGIC                     = 0x73636673\n\tSELINUX_MAGIC                        = 0xf97cff8c\n\tSFD_CLOEXEC                          = 0x80000\n\tSFD_NONBLOCK                         = 0x800\n\tSHUT_RD                              = 0x0\n\tSHUT_RDWR                            = 0x2\n\tSHUT_WR                              = 0x1\n\tSIOCADDDLCI                          = 0x8980\n\tSIOCADDMULTI                         = 0x8931\n\tSIOCADDRT                            = 0x890b\n\tSIOCATMARK                           = 0x8905\n\tSIOCBONDCHANGEACTIVE                 = 0x8995\n\tSIOCBONDENSLAVE                      = 0x8990\n\tSIOCBONDINFOQUERY                    = 0x8994\n\tSIOCBONDRELEASE                      = 0x8991\n\tSIOCBONDSETHWADDR                    = 0x8992\n\tSIOCBONDSLAVEINFOQUERY               = 0x8993\n\tSIOCBRADDBR                          = 0x89a0\n\tSIOCBRADDIF                          = 0x89a2\n\tSIOCBRDELBR                          = 0x89a1\n\tSIOCBRDELIF                          = 0x89a3\n\tSIOCDARP                             = 0x8953\n\tSIOCDELDLCI                          = 0x8981\n\tSIOCDELMULTI                         = 0x8932\n\tSIOCDELRT                            = 0x890c\n\tSIOCDEVPRIVATE                       = 0x89f0\n\tSIOCDIFADDR                          = 0x8936\n\tSIOCDRARP                            = 0x8960\n\tSIOCETHTOOL                          = 0x8946\n\tSIOCGARP                             = 0x8954\n\tSIOCGHWTSTAMP                        = 0x89b1\n\tSIOCGIFADDR                          = 0x8915\n\tSIOCGIFBR                            = 0x8940\n\tSIOCGIFBRDADDR                       = 0x8919\n\tSIOCGIFCONF                          = 0x8912\n\tSIOCGIFCOUNT                         = 0x8938\n\tSIOCGIFDSTADDR                       = 0x8917\n\tSIOCGIFENCAP                         = 0x8925\n\tSIOCGIFFLAGS                         = 0x8913\n\tSIOCGIFHWADDR                        = 0x8927\n\tSIOCGIFINDEX                         = 0x8933\n\tSIOCGIFMAP                           = 0x8970\n\tSIOCGIFMEM                           = 0x891f\n\tSIOCGIFMETRIC                        = 0x891d\n\tSIOCGIFMTU                           = 0x8921\n\tSIOCGIFNAME                          = 0x8910\n\tSIOCGIFNETMASK                       = 0x891b\n\tSIOCGIFPFLAGS                        = 0x8935\n\tSIOCGIFSLAVE                         = 0x8929\n\tSIOCGIFTXQLEN                        = 0x8942\n\tSIOCGIFVLAN                          = 0x8982\n\tSIOCGMIIPHY                          = 0x8947\n\tSIOCGMIIREG                          = 0x8948\n\tSIOCGPGRP                            = 0x8904\n\tSIOCGPPPCSTATS                       = 0x89f2\n\tSIOCGPPPSTATS                        = 0x89f0\n\tSIOCGPPPVER                          = 0x89f1\n\tSIOCGRARP                            = 0x8961\n\tSIOCGSKNS                            = 0x894c\n\tSIOCGSTAMP                           = 0x8906\n\tSIOCGSTAMPNS                         = 0x8907\n\tSIOCINQ                              = 0x541b\n\tSIOCOUTQ                             = 0x5411\n\tSIOCOUTQNSD                          = 0x894b\n\tSIOCPROTOPRIVATE                     = 0x89e0\n\tSIOCRTMSG                            = 0x890d\n\tSIOCSARP                             = 0x8955\n\tSIOCSHWTSTAMP                        = 0x89b0\n\tSIOCSIFADDR                          = 0x8916\n\tSIOCSIFBR                            = 0x8941\n\tSIOCSIFBRDADDR                       = 0x891a\n\tSIOCSIFDSTADDR                       = 0x8918\n\tSIOCSIFENCAP                         = 0x8926\n\tSIOCSIFFLAGS                         = 0x8914\n\tSIOCSIFHWADDR                        = 0x8924\n\tSIOCSIFHWBROADCAST                   = 0x8937\n\tSIOCSIFLINK                          = 0x8911\n\tSIOCSIFMAP                           = 0x8971\n\tSIOCSIFMEM                           = 0x8920\n\tSIOCSIFMETRIC                        = 0x891e\n\tSIOCSIFMTU                           = 0x8922\n\tSIOCSIFNAME                          = 0x8923\n\tSIOCSIFNETMASK                       = 0x891c\n\tSIOCSIFPFLAGS                        = 0x8934\n\tSIOCSIFSLAVE                         = 0x8930\n\tSIOCSIFTXQLEN                        = 0x8943\n\tSIOCSIFVLAN                          = 0x8983\n\tSIOCSMIIREG                          = 0x8949\n\tSIOCSPGRP                            = 0x8902\n\tSIOCSRARP                            = 0x8962\n\tSIOCWANDEV                           = 0x894a\n\tSMACK_MAGIC                          = 0x43415d53\n\tSMART_AUTOSAVE                       = 0xd2\n\tSMART_AUTO_OFFLINE                   = 0xdb\n\tSMART_DISABLE                        = 0xd9\n\tSMART_ENABLE                         = 0xd8\n\tSMART_HCYL_PASS                      = 0xc2\n\tSMART_IMMEDIATE_OFFLINE              = 0xd4\n\tSMART_LCYL_PASS                      = 0x4f\n\tSMART_READ_LOG_SECTOR                = 0xd5\n\tSMART_READ_THRESHOLDS                = 0xd1\n\tSMART_READ_VALUES                    = 0xd0\n\tSMART_SAVE                           = 0xd3\n\tSMART_STATUS                         = 0xda\n\tSMART_WRITE_LOG_SECTOR               = 0xd6\n\tSMART_WRITE_THRESHOLDS               = 0xd7\n\tSMB_SUPER_MAGIC                      = 0x517b\n\tSOCKFS_MAGIC                         = 0x534f434b\n\tSOCK_CLOEXEC                         = 0x80000\n\tSOCK_DCCP                            = 0x6\n\tSOCK_DGRAM                           = 0x2\n\tSOCK_IOC_TYPE                        = 0x89\n\tSOCK_NONBLOCK                        = 0x800\n\tSOCK_PACKET                          = 0xa\n\tSOCK_RAW                             = 0x3\n\tSOCK_RDM                             = 0x4\n\tSOCK_SEQPACKET                       = 0x5\n\tSOCK_STREAM                          = 0x1\n\tSOL_AAL                              = 0x109\n\tSOL_ALG                              = 0x117\n\tSOL_ATM                              = 0x108\n\tSOL_CAIF                             = 0x116\n\tSOL_CAN_BASE                         = 0x64\n\tSOL_DCCP                             = 0x10d\n\tSOL_DECNET                           = 0x105\n\tSOL_ICMPV6                           = 0x3a\n\tSOL_IP                               = 0x0\n\tSOL_IPV6                             = 0x29\n\tSOL_IRDA                             = 0x10a\n\tSOL_IUCV                             = 0x115\n\tSOL_KCM                              = 0x119\n\tSOL_LLC                              = 0x10c\n\tSOL_NETBEUI                          = 0x10b\n\tSOL_NETLINK                          = 0x10e\n\tSOL_NFC                              = 0x118\n\tSOL_PACKET                           = 0x107\n\tSOL_PNPIPE                           = 0x113\n\tSOL_PPPOL2TP                         = 0x111\n\tSOL_RAW                              = 0xff\n\tSOL_RDS                              = 0x114\n\tSOL_RXRPC                            = 0x110\n\tSOL_SOCKET                           = 0x1\n\tSOL_TCP                              = 0x6\n\tSOL_TIPC                             = 0x10f\n\tSOL_TLS                              = 0x11a\n\tSOL_X25                              = 0x106\n\tSOL_XDP                              = 0x11b\n\tSOMAXCONN                            = 0x80\n\tSO_ACCEPTCONN                        = 0x1e\n\tSO_ATTACH_BPF                        = 0x32\n\tSO_ATTACH_FILTER                     = 0x1a\n\tSO_ATTACH_REUSEPORT_CBPF             = 0x33\n\tSO_ATTACH_REUSEPORT_EBPF             = 0x34\n\tSO_BINDTODEVICE                      = 0x19\n\tSO_BINDTOIFINDEX                     = 0x3e\n\tSO_BPF_EXTENSIONS                    = 0x30\n\tSO_BROADCAST                         = 0x6\n\tSO_BSDCOMPAT                         = 0xe\n\tSO_BUSY_POLL                         = 0x2e\n\tSO_CNX_ADVICE                        = 0x35\n\tSO_COOKIE                            = 0x39\n\tSO_DEBUG                             = 0x1\n\tSO_DETACH_BPF                        = 0x1b\n\tSO_DETACH_FILTER                     = 0x1b\n\tSO_DOMAIN                            = 0x27\n\tSO_DONTROUTE                         = 0x5\n\tSO_EE_CODE_TXTIME_INVALID_PARAM      = 0x1\n\tSO_EE_CODE_TXTIME_MISSED             = 0x2\n\tSO_EE_CODE_ZEROCOPY_COPIED           = 0x1\n\tSO_EE_ORIGIN_ICMP                    = 0x2\n\tSO_EE_ORIGIN_ICMP6                   = 0x3\n\tSO_EE_ORIGIN_LOCAL                   = 0x1\n\tSO_EE_ORIGIN_NONE                    = 0x0\n\tSO_EE_ORIGIN_TIMESTAMPING            = 0x4\n\tSO_EE_ORIGIN_TXSTATUS                = 0x4\n\tSO_EE_ORIGIN_TXTIME                  = 0x6\n\tSO_EE_ORIGIN_ZEROCOPY                = 0x5\n\tSO_ERROR                             = 0x4\n\tSO_GET_FILTER                        = 0x1a\n\tSO_INCOMING_CPU                      = 0x31\n\tSO_INCOMING_NAPI_ID                  = 0x38\n\tSO_KEEPALIVE                         = 0x9\n\tSO_LINGER                            = 0xd\n\tSO_LOCK_FILTER                       = 0x2c\n\tSO_MARK                              = 0x24\n\tSO_MAX_PACING_RATE                   = 0x2f\n\tSO_MEMINFO                           = 0x37\n\tSO_NOFCS                             = 0x2b\n\tSO_NO_CHECK                          = 0xb\n\tSO_OOBINLINE                         = 0xa\n\tSO_PASSCRED                          = 0x10\n\tSO_PASSSEC                           = 0x22\n\tSO_PEEK_OFF                          = 0x2a\n\tSO_PEERCRED                          = 0x11\n\tSO_PEERGROUPS                        = 0x3b\n\tSO_PEERNAME                          = 0x1c\n\tSO_PEERSEC                           = 0x1f\n\tSO_PRIORITY                          = 0xc\n\tSO_PROTOCOL                          = 0x26\n\tSO_RCVBUF                            = 0x8\n\tSO_RCVBUFFORCE                       = 0x21\n\tSO_RCVLOWAT                          = 0x12\n\tSO_RCVTIMEO                          = 0x14\n\tSO_RCVTIMEO_NEW                      = 0x42\n\tSO_RCVTIMEO_OLD                      = 0x14\n\tSO_REUSEADDR                         = 0x2\n\tSO_REUSEPORT                         = 0xf\n\tSO_RXQ_OVFL                          = 0x28\n\tSO_SECURITY_AUTHENTICATION           = 0x16\n\tSO_SECURITY_ENCRYPTION_NETWORK       = 0x18\n\tSO_SECURITY_ENCRYPTION_TRANSPORT     = 0x17\n\tSO_SELECT_ERR_QUEUE                  = 0x2d\n\tSO_SNDBUF                            = 0x7\n\tSO_SNDBUFFORCE                       = 0x20\n\tSO_SNDLOWAT                          = 0x13\n\tSO_SNDTIMEO                          = 0x15\n\tSO_SNDTIMEO_NEW                      = 0x43\n\tSO_SNDTIMEO_OLD                      = 0x15\n\tSO_TIMESTAMP                         = 0x1d\n\tSO_TIMESTAMPING                      = 0x25\n\tSO_TIMESTAMPING_NEW                  = 0x41\n\tSO_TIMESTAMPING_OLD                  = 0x25\n\tSO_TIMESTAMPNS                       = 0x23\n\tSO_TIMESTAMPNS_NEW                   = 0x40\n\tSO_TIMESTAMPNS_OLD                   = 0x23\n\tSO_TIMESTAMP_NEW                     = 0x3f\n\tSO_TIMESTAMP_OLD                     = 0x1d\n\tSO_TXTIME                            = 0x3d\n\tSO_TYPE                              = 0x3\n\tSO_VM_SOCKETS_BUFFER_MAX_SIZE        = 0x2\n\tSO_VM_SOCKETS_BUFFER_MIN_SIZE        = 0x1\n\tSO_VM_SOCKETS_BUFFER_SIZE            = 0x0\n\tSO_VM_SOCKETS_CONNECT_TIMEOUT        = 0x6\n\tSO_VM_SOCKETS_NONBLOCK_TXRX          = 0x7\n\tSO_VM_SOCKETS_PEER_HOST_VM_ID        = 0x3\n\tSO_VM_SOCKETS_TRUSTED                = 0x5\n\tSO_WIFI_STATUS                       = 0x29\n\tSO_ZEROCOPY                          = 0x3c\n\tSPLICE_F_GIFT                        = 0x8\n\tSPLICE_F_MORE                        = 0x4\n\tSPLICE_F_MOVE                        = 0x1\n\tSPLICE_F_NONBLOCK                    = 0x2\n\tSQUASHFS_MAGIC                       = 0x73717368\n\tSTACK_END_MAGIC                      = 0x57ac6e9d\n\tSTATX_ALL                            = 0xfff\n\tSTATX_ATIME                          = 0x20\n\tSTATX_ATTR_APPEND                    = 0x20\n\tSTATX_ATTR_AUTOMOUNT                 = 0x1000\n\tSTATX_ATTR_COMPRESSED                = 0x4\n\tSTATX_ATTR_ENCRYPTED                 = 0x800\n\tSTATX_ATTR_IMMUTABLE                 = 0x10\n\tSTATX_ATTR_NODUMP                    = 0x40\n\tSTATX_BASIC_STATS                    = 0x7ff\n\tSTATX_BLOCKS                         = 0x400\n\tSTATX_BTIME                          = 0x800\n\tSTATX_CTIME                          = 0x80\n\tSTATX_GID                            = 0x10\n\tSTATX_INO                            = 0x100\n\tSTATX_MODE                           = 0x2\n\tSTATX_MTIME                          = 0x40\n\tSTATX_NLINK                          = 0x4\n\tSTATX_SIZE                           = 0x200\n\tSTATX_TYPE                           = 0x1\n\tSTATX_UID                            = 0x8\n\tSTATX__RESERVED                      = 0x80000000\n\tSVE_MAGIC                            = 0x53564501\n\tSYNC_FILE_RANGE_WAIT_AFTER           = 0x4\n\tSYNC_FILE_RANGE_WAIT_BEFORE          = 0x1\n\tSYNC_FILE_RANGE_WRITE                = 0x2\n\tSYSFS_MAGIC                          = 0x62656572\n\tS_BLKSIZE                            = 0x200\n\tS_IEXEC                              = 0x40\n\tS_IFBLK                              = 0x6000\n\tS_IFCHR                              = 0x2000\n\tS_IFDIR                              = 0x4000\n\tS_IFIFO                              = 0x1000\n\tS_IFLNK                              = 0xa000\n\tS_IFMT                               = 0xf000\n\tS_IFREG                              = 0x8000\n\tS_IFSOCK                             = 0xc000\n\tS_IREAD                              = 0x100\n\tS_IRGRP                              = 0x20\n\tS_IROTH                              = 0x4\n\tS_IRUSR                              = 0x100\n\tS_IRWXG                              = 0x38\n\tS_IRWXO                              = 0x7\n\tS_IRWXU                              = 0x1c0\n\tS_ISGID                              = 0x400\n\tS_ISUID                              = 0x800\n\tS_ISVTX                              = 0x200\n\tS_IWGRP                              = 0x10\n\tS_IWOTH                              = 0x2\n\tS_IWRITE                             = 0x80\n\tS_IWUSR                              = 0x80\n\tS_IXGRP                              = 0x8\n\tS_IXOTH                              = 0x1\n\tS_IXUSR                              = 0x40\n\tTAB0                                 = 0x0\n\tTAB1                                 = 0x800\n\tTAB2                                 = 0x1000\n\tTAB3                                 = 0x1800\n\tTABDLY                               = 0x1800\n\tTASKSTATS_CMD_ATTR_MAX               = 0x4\n\tTASKSTATS_CMD_MAX                    = 0x2\n\tTASKSTATS_GENL_NAME                  = \"TASKSTATS\"\n\tTASKSTATS_GENL_VERSION               = 0x1\n\tTASKSTATS_TYPE_MAX                   = 0x6\n\tTASKSTATS_VERSION                    = 0x9\n\tTCFLSH                               = 0x540b\n\tTCGETA                               = 0x5405\n\tTCGETS                               = 0x5401\n\tTCGETS2                              = 0x802c542a\n\tTCGETX                               = 0x5432\n\tTCIFLUSH                             = 0x0\n\tTCIOFF                               = 0x2\n\tTCIOFLUSH                            = 0x2\n\tTCION                                = 0x3\n\tTCOFLUSH                             = 0x1\n\tTCOOFF                               = 0x0\n\tTCOON                                = 0x1\n\tTCP_BPF_IW                           = 0x3e9\n\tTCP_BPF_SNDCWND_CLAMP                = 0x3ea\n\tTCP_CC_INFO                          = 0x1a\n\tTCP_CM_INQ                           = 0x24\n\tTCP_CONGESTION                       = 0xd\n\tTCP_COOKIE_IN_ALWAYS                 = 0x1\n\tTCP_COOKIE_MAX                       = 0x10\n\tTCP_COOKIE_MIN                       = 0x8\n\tTCP_COOKIE_OUT_NEVER                 = 0x2\n\tTCP_COOKIE_PAIR_SIZE                 = 0x20\n\tTCP_COOKIE_TRANSACTIONS              = 0xf\n\tTCP_CORK                             = 0x3\n\tTCP_DEFER_ACCEPT                     = 0x9\n\tTCP_FASTOPEN                         = 0x17\n\tTCP_FASTOPEN_CONNECT                 = 0x1e\n\tTCP_FASTOPEN_KEY                     = 0x21\n\tTCP_FASTOPEN_NO_COOKIE               = 0x22\n\tTCP_INFO                             = 0xb\n\tTCP_INQ                              = 0x24\n\tTCP_KEEPCNT                          = 0x6\n\tTCP_KEEPIDLE                         = 0x4\n\tTCP_KEEPINTVL                        = 0x5\n\tTCP_LINGER2                          = 0x8\n\tTCP_MAXSEG                           = 0x2\n\tTCP_MAXWIN                           = 0xffff\n\tTCP_MAX_WINSHIFT                     = 0xe\n\tTCP_MD5SIG                           = 0xe\n\tTCP_MD5SIG_EXT                       = 0x20\n\tTCP_MD5SIG_FLAG_PREFIX               = 0x1\n\tTCP_MD5SIG_MAXKEYLEN                 = 0x50\n\tTCP_MSS                              = 0x200\n\tTCP_MSS_DEFAULT                      = 0x218\n\tTCP_MSS_DESIRED                      = 0x4c4\n\tTCP_NODELAY                          = 0x1\n\tTCP_NOTSENT_LOWAT                    = 0x19\n\tTCP_QUEUE_SEQ                        = 0x15\n\tTCP_QUICKACK                         = 0xc\n\tTCP_REPAIR                           = 0x13\n\tTCP_REPAIR_OFF                       = 0x0\n\tTCP_REPAIR_OFF_NO_WP                 = -0x1\n\tTCP_REPAIR_ON                        = 0x1\n\tTCP_REPAIR_OPTIONS                   = 0x16\n\tTCP_REPAIR_QUEUE                     = 0x14\n\tTCP_REPAIR_WINDOW                    = 0x1d\n\tTCP_SAVED_SYN                        = 0x1c\n\tTCP_SAVE_SYN                         = 0x1b\n\tTCP_SYNCNT                           = 0x7\n\tTCP_S_DATA_IN                        = 0x4\n\tTCP_S_DATA_OUT                       = 0x8\n\tTCP_THIN_DUPACK                      = 0x11\n\tTCP_THIN_LINEAR_TIMEOUTS             = 0x10\n\tTCP_TIMESTAMP                        = 0x18\n\tTCP_ULP                              = 0x1f\n\tTCP_USER_TIMEOUT                     = 0x12\n\tTCP_WINDOW_CLAMP                     = 0xa\n\tTCP_ZEROCOPY_RECEIVE                 = 0x23\n\tTCSAFLUSH                            = 0x2\n\tTCSBRK                               = 0x5409\n\tTCSBRKP                              = 0x5425\n\tTCSETA                               = 0x5406\n\tTCSETAF                              = 0x5408\n\tTCSETAW                              = 0x5407\n\tTCSETS                               = 0x5402\n\tTCSETS2                              = 0x402c542b\n\tTCSETSF                              = 0x5404\n\tTCSETSF2                             = 0x402c542d\n\tTCSETSW                              = 0x5403\n\tTCSETSW2                             = 0x402c542c\n\tTCSETX                               = 0x5433\n\tTCSETXF                              = 0x5434\n\tTCSETXW                              = 0x5435\n\tTCXONC                               = 0x540a\n\tTIMER_ABSTIME                        = 0x1\n\tTIOCCBRK                             = 0x5428\n\tTIOCCONS                             = 0x541d\n\tTIOCEXCL                             = 0x540c\n\tTIOCGDEV                             = 0x80045432\n\tTIOCGETD                             = 0x5424\n\tTIOCGEXCL                            = 0x80045440\n\tTIOCGICOUNT                          = 0x545d\n\tTIOCGISO7816                         = 0x80285442\n\tTIOCGLCKTRMIOS                       = 0x5456\n\tTIOCGPGRP                            = 0x540f\n\tTIOCGPKT                             = 0x80045438\n\tTIOCGPTLCK                           = 0x80045439\n\tTIOCGPTN                             = 0x80045430\n\tTIOCGPTPEER                          = 0x5441\n\tTIOCGRS485                           = 0x542e\n\tTIOCGSERIAL                          = 0x541e\n\tTIOCGSID                             = 0x5429\n\tTIOCGSOFTCAR                         = 0x5419\n\tTIOCGWINSZ                           = 0x5413\n\tTIOCINQ                              = 0x541b\n\tTIOCLINUX                            = 0x541c\n\tTIOCMBIC                             = 0x5417\n\tTIOCMBIS                             = 0x5416\n\tTIOCMGET                             = 0x5415\n\tTIOCMIWAIT                           = 0x545c\n\tTIOCMSET                             = 0x5418\n\tTIOCM_CAR                            = 0x40\n\tTIOCM_CD                             = 0x40\n\tTIOCM_CTS                            = 0x20\n\tTIOCM_DSR                            = 0x100\n\tTIOCM_DTR                            = 0x2\n\tTIOCM_LE                             = 0x1\n\tTIOCM_RI                             = 0x80\n\tTIOCM_RNG                            = 0x80\n\tTIOCM_RTS                            = 0x4\n\tTIOCM_SR                             = 0x10\n\tTIOCM_ST                             = 0x8\n\tTIOCNOTTY                            = 0x5422\n\tTIOCNXCL                             = 0x540d\n\tTIOCOUTQ                             = 0x5411\n\tTIOCPKT                              = 0x5420\n\tTIOCPKT_DATA                         = 0x0\n\tTIOCPKT_DOSTOP                       = 0x20\n\tTIOCPKT_FLUSHREAD                    = 0x1\n\tTIOCPKT_FLUSHWRITE                   = 0x2\n\tTIOCPKT_IOCTL                        = 0x40\n\tTIOCPKT_NOSTOP                       = 0x10\n\tTIOCPKT_START                        = 0x8\n\tTIOCPKT_STOP                         = 0x4\n\tTIOCSBRK                             = 0x5427\n\tTIOCSCTTY                            = 0x540e\n\tTIOCSERCONFIG                        = 0x5453\n\tTIOCSERGETLSR                        = 0x5459\n\tTIOCSERGETMULTI                      = 0x545a\n\tTIOCSERGSTRUCT                       = 0x5458\n\tTIOCSERGWILD                         = 0x5454\n\tTIOCSERSETMULTI                      = 0x545b\n\tTIOCSERSWILD                         = 0x5455\n\tTIOCSER_TEMT                         = 0x1\n\tTIOCSETD                             = 0x5423\n\tTIOCSIG                              = 0x40045436\n\tTIOCSISO7816                         = 0xc0285443\n\tTIOCSLCKTRMIOS                       = 0x5457\n\tTIOCSPGRP                            = 0x5410\n\tTIOCSPTLCK                           = 0x40045431\n\tTIOCSRS485                           = 0x542f\n\tTIOCSSERIAL                          = 0x541f\n\tTIOCSSOFTCAR                         = 0x541a\n\tTIOCSTI                              = 0x5412\n\tTIOCSWINSZ                           = 0x5414\n\tTIOCVHANGUP                          = 0x5437\n\tTMPFS_MAGIC                          = 0x1021994\n\tTOSTOP                               = 0x100\n\tTPACKET_ALIGNMENT                    = 0x10\n\tTPACKET_HDRLEN                       = 0x34\n\tTP_STATUS_AVAILABLE                  = 0x0\n\tTP_STATUS_BLK_TMO                    = 0x20\n\tTP_STATUS_COPY                       = 0x2\n\tTP_STATUS_CSUMNOTREADY               = 0x8\n\tTP_STATUS_CSUM_VALID                 = 0x80\n\tTP_STATUS_KERNEL                     = 0x0\n\tTP_STATUS_LOSING                     = 0x4\n\tTP_STATUS_SENDING                    = 0x2\n\tTP_STATUS_SEND_REQUEST               = 0x1\n\tTP_STATUS_TS_RAW_HARDWARE            = -0x80000000\n\tTP_STATUS_TS_SOFTWARE                = 0x20000000\n\tTP_STATUS_TS_SYS_HARDWARE            = 0x40000000\n\tTP_STATUS_USER                       = 0x1\n\tTP_STATUS_VLAN_TPID_VALID            = 0x40\n\tTP_STATUS_VLAN_VALID                 = 0x10\n\tTP_STATUS_WRONG_FORMAT               = 0x4\n\tTRACEFS_MAGIC                        = 0x74726163\n\tTS_COMM_LEN                          = 0x20\n\tTUNATTACHFILTER                      = 0x401054d5\n\tTUNDETACHFILTER                      = 0x401054d6\n\tTUNGETFEATURES                       = 0x800454cf\n\tTUNGETFILTER                         = 0x801054db\n\tTUNGETIFF                            = 0x800454d2\n\tTUNGETSNDBUF                         = 0x800454d3\n\tTUNGETVNETBE                         = 0x800454df\n\tTUNGETVNETHDRSZ                      = 0x800454d7\n\tTUNGETVNETLE                         = 0x800454dd\n\tTUNSETCARRIER                        = 0x400454e2\n\tTUNSETDEBUG                          = 0x400454c9\n\tTUNSETFILTEREBPF                     = 0x800454e1\n\tTUNSETGROUP                          = 0x400454ce\n\tTUNSETIFF                            = 0x400454ca\n\tTUNSETIFINDEX                        = 0x400454da\n\tTUNSETLINK                           = 0x400454cd\n\tTUNSETNOCSUM                         = 0x400454c8\n\tTUNSETOFFLOAD                        = 0x400454d0\n\tTUNSETOWNER                          = 0x400454cc\n\tTUNSETPERSIST                        = 0x400454cb\n\tTUNSETQUEUE                          = 0x400454d9\n\tTUNSETSNDBUF                         = 0x400454d4\n\tTUNSETSTEERINGEBPF                   = 0x800454e0\n\tTUNSETTXFILTER                       = 0x400454d1\n\tTUNSETVNETBE                         = 0x400454de\n\tTUNSETVNETHDRSZ                      = 0x400454d8\n\tTUNSETVNETLE                         = 0x400454dc\n\tUBI_IOCATT                           = 0x40186f40\n\tUBI_IOCDET                           = 0x40046f41\n\tUBI_IOCEBCH                          = 0x40044f02\n\tUBI_IOCEBER                          = 0x40044f01\n\tUBI_IOCEBISMAP                       = 0x80044f05\n\tUBI_IOCEBMAP                         = 0x40084f03\n\tUBI_IOCEBUNMAP                       = 0x40044f04\n\tUBI_IOCMKVOL                         = 0x40986f00\n\tUBI_IOCRMVOL                         = 0x40046f01\n\tUBI_IOCRNVOL                         = 0x51106f03\n\tUBI_IOCRPEB                          = 0x40046f04\n\tUBI_IOCRSVOL                         = 0x400c6f02\n\tUBI_IOCSETVOLPROP                    = 0x40104f06\n\tUBI_IOCSPEB                          = 0x40046f05\n\tUBI_IOCVOLCRBLK                      = 0x40804f07\n\tUBI_IOCVOLRMBLK                      = 0x4f08\n\tUBI_IOCVOLUP                         = 0x40084f00\n\tUDF_SUPER_MAGIC                      = 0x15013346\n\tUMOUNT_NOFOLLOW                      = 0x8\n\tUSBDEVICE_SUPER_MAGIC                = 0x9fa2\n\tUTIME_NOW                            = 0x3fffffff\n\tUTIME_OMIT                           = 0x3ffffffe\n\tV9FS_MAGIC                           = 0x1021997\n\tVDISCARD                             = 0xd\n\tVEOF                                 = 0x4\n\tVEOL                                 = 0xb\n\tVEOL2                                = 0x10\n\tVERASE                               = 0x2\n\tVINTR                                = 0x0\n\tVKILL                                = 0x3\n\tVLNEXT                               = 0xf\n\tVMADDR_CID_ANY                       = 0xffffffff\n\tVMADDR_CID_HOST                      = 0x2\n\tVMADDR_CID_HYPERVISOR                = 0x0\n\tVMADDR_CID_RESERVED                  = 0x1\n\tVMADDR_PORT_ANY                      = 0xffffffff\n\tVMIN                                 = 0x6\n\tVM_SOCKETS_INVALID_VERSION           = 0xffffffff\n\tVQUIT                                = 0x1\n\tVREPRINT                             = 0xc\n\tVSTART                               = 0x8\n\tVSTOP                                = 0x9\n\tVSUSP                                = 0xa\n\tVSWTC                                = 0x7\n\tVT0                                  = 0x0\n\tVT1                                  = 0x4000\n\tVTDLY                                = 0x4000\n\tVTIME                                = 0x5\n\tVWERASE                              = 0xe\n\tWALL                                 = 0x40000000\n\tWCLONE                               = 0x80000000\n\tWCONTINUED                           = 0x8\n\tWDIOC_GETBOOTSTATUS                  = 0x80045702\n\tWDIOC_GETPRETIMEOUT                  = 0x80045709\n\tWDIOC_GETSTATUS                      = 0x80045701\n\tWDIOC_GETSUPPORT                     = 0x80285700\n\tWDIOC_GETTEMP                        = 0x80045703\n\tWDIOC_GETTIMELEFT                    = 0x8004570a\n\tWDIOC_GETTIMEOUT                     = 0x80045707\n\tWDIOC_KEEPALIVE                      = 0x80045705\n\tWDIOC_SETOPTIONS                     = 0x80045704\n\tWDIOC_SETPRETIMEOUT                  = 0xc0045708\n\tWDIOC_SETTIMEOUT                     = 0xc0045706\n\tWEXITED                              = 0x4\n\tWIN_ACKMEDIACHANGE                   = 0xdb\n\tWIN_CHECKPOWERMODE1                  = 0xe5\n\tWIN_CHECKPOWERMODE2                  = 0x98\n\tWIN_DEVICE_RESET                     = 0x8\n\tWIN_DIAGNOSE                         = 0x90\n\tWIN_DOORLOCK                         = 0xde\n\tWIN_DOORUNLOCK                       = 0xdf\n\tWIN_DOWNLOAD_MICROCODE               = 0x92\n\tWIN_FLUSH_CACHE                      = 0xe7\n\tWIN_FLUSH_CACHE_EXT                  = 0xea\n\tWIN_FORMAT                           = 0x50\n\tWIN_GETMEDIASTATUS                   = 0xda\n\tWIN_IDENTIFY                         = 0xec\n\tWIN_IDENTIFY_DMA                     = 0xee\n\tWIN_IDLEIMMEDIATE                    = 0xe1\n\tWIN_INIT                             = 0x60\n\tWIN_MEDIAEJECT                       = 0xed\n\tWIN_MULTREAD                         = 0xc4\n\tWIN_MULTREAD_EXT                     = 0x29\n\tWIN_MULTWRITE                        = 0xc5\n\tWIN_MULTWRITE_EXT                    = 0x39\n\tWIN_NOP                              = 0x0\n\tWIN_PACKETCMD                        = 0xa0\n\tWIN_PIDENTIFY                        = 0xa1\n\tWIN_POSTBOOT                         = 0xdc\n\tWIN_PREBOOT                          = 0xdd\n\tWIN_QUEUED_SERVICE                   = 0xa2\n\tWIN_READ                             = 0x20\n\tWIN_READDMA                          = 0xc8\n\tWIN_READDMA_EXT                      = 0x25\n\tWIN_READDMA_ONCE                     = 0xc9\n\tWIN_READDMA_QUEUED                   = 0xc7\n\tWIN_READDMA_QUEUED_EXT               = 0x26\n\tWIN_READ_BUFFER                      = 0xe4\n\tWIN_READ_EXT                         = 0x24\n\tWIN_READ_LONG                        = 0x22\n\tWIN_READ_LONG_ONCE                   = 0x23\n\tWIN_READ_NATIVE_MAX                  = 0xf8\n\tWIN_READ_NATIVE_MAX_EXT              = 0x27\n\tWIN_READ_ONCE                        = 0x21\n\tWIN_RECAL                            = 0x10\n\tWIN_RESTORE                          = 0x10\n\tWIN_SECURITY_DISABLE                 = 0xf6\n\tWIN_SECURITY_ERASE_PREPARE           = 0xf3\n\tWIN_SECURITY_ERASE_UNIT              = 0xf4\n\tWIN_SECURITY_FREEZE_LOCK             = 0xf5\n\tWIN_SECURITY_SET_PASS                = 0xf1\n\tWIN_SECURITY_UNLOCK                  = 0xf2\n\tWIN_SEEK                             = 0x70\n\tWIN_SETFEATURES                      = 0xef\n\tWIN_SETIDLE1                         = 0xe3\n\tWIN_SETIDLE2                         = 0x97\n\tWIN_SETMULT                          = 0xc6\n\tWIN_SET_MAX                          = 0xf9\n\tWIN_SET_MAX_EXT                      = 0x37\n\tWIN_SLEEPNOW1                        = 0xe6\n\tWIN_SLEEPNOW2                        = 0x99\n\tWIN_SMART                            = 0xb0\n\tWIN_SPECIFY                          = 0x91\n\tWIN_SRST                             = 0x8\n\tWIN_STANDBY                          = 0xe2\n\tWIN_STANDBY2                         = 0x96\n\tWIN_STANDBYNOW1                      = 0xe0\n\tWIN_STANDBYNOW2                      = 0x94\n\tWIN_VERIFY                           = 0x40\n\tWIN_VERIFY_EXT                       = 0x42\n\tWIN_VERIFY_ONCE                      = 0x41\n\tWIN_WRITE                            = 0x30\n\tWIN_WRITEDMA                         = 0xca\n\tWIN_WRITEDMA_EXT                     = 0x35\n\tWIN_WRITEDMA_ONCE                    = 0xcb\n\tWIN_WRITEDMA_QUEUED                  = 0xcc\n\tWIN_WRITEDMA_QUEUED_EXT              = 0x36\n\tWIN_WRITE_BUFFER                     = 0xe8\n\tWIN_WRITE_EXT                        = 0x34\n\tWIN_WRITE_LONG                       = 0x32\n\tWIN_WRITE_LONG_ONCE                  = 0x33\n\tWIN_WRITE_ONCE                       = 0x31\n\tWIN_WRITE_SAME                       = 0xe9\n\tWIN_WRITE_VERIFY                     = 0x3c\n\tWNOHANG                              = 0x1\n\tWNOTHREAD                            = 0x20000000\n\tWNOWAIT                              = 0x1000000\n\tWORDSIZE                             = 0x40\n\tWSTOPPED                             = 0x2\n\tWUNTRACED                            = 0x2\n\tXATTR_CREATE                         = 0x1\n\tXATTR_REPLACE                        = 0x2\n\tXCASE                                = 0x4\n\tXDP_COPY                             = 0x2\n\tXDP_FLAGS_DRV_MODE                   = 0x4\n\tXDP_FLAGS_HW_MODE                    = 0x8\n\tXDP_FLAGS_MASK                       = 0xf\n\tXDP_FLAGS_MODES                      = 0xe\n\tXDP_FLAGS_SKB_MODE                   = 0x2\n\tXDP_FLAGS_UPDATE_IF_NOEXIST          = 0x1\n\tXDP_MMAP_OFFSETS                     = 0x1\n\tXDP_PACKET_HEADROOM                  = 0x100\n\tXDP_PGOFF_RX_RING                    = 0x0\n\tXDP_PGOFF_TX_RING                    = 0x80000000\n\tXDP_RX_RING                          = 0x2\n\tXDP_SHARED_UMEM                      = 0x1\n\tXDP_STATISTICS                       = 0x7\n\tXDP_TX_RING                          = 0x3\n\tXDP_UMEM_COMPLETION_RING             = 0x6\n\tXDP_UMEM_FILL_RING                   = 0x5\n\tXDP_UMEM_PGOFF_COMPLETION_RING       = 0x180000000\n\tXDP_UMEM_PGOFF_FILL_RING             = 0x100000000\n\tXDP_UMEM_REG                         = 0x4\n\tXDP_ZEROCOPY                         = 0x4\n\tXENFS_SUPER_MAGIC                    = 0xabba1974\n\tXFS_SUPER_MAGIC                      = 0x58465342\n\tXTABS                                = 0x1800\n\tZSMALLOC_MAGIC                       = 0x58295829\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x62)\n\tEADDRNOTAVAIL   = syscall.Errno(0x63)\n\tEADV            = syscall.Errno(0x44)\n\tEAFNOSUPPORT    = syscall.Errno(0x61)\n\tEAGAIN          = syscall.Errno(0xb)\n\tEALREADY        = syscall.Errno(0x72)\n\tEBADE           = syscall.Errno(0x34)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADFD          = syscall.Errno(0x4d)\n\tEBADMSG         = syscall.Errno(0x4a)\n\tEBADR           = syscall.Errno(0x35)\n\tEBADRQC         = syscall.Errno(0x38)\n\tEBADSLT         = syscall.Errno(0x39)\n\tEBFONT          = syscall.Errno(0x3b)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x7d)\n\tECHILD          = syscall.Errno(0xa)\n\tECHRNG          = syscall.Errno(0x2c)\n\tECOMM           = syscall.Errno(0x46)\n\tECONNABORTED    = syscall.Errno(0x67)\n\tECONNREFUSED    = syscall.Errno(0x6f)\n\tECONNRESET      = syscall.Errno(0x68)\n\tEDEADLK         = syscall.Errno(0x23)\n\tEDEADLOCK       = syscall.Errno(0x23)\n\tEDESTADDRREQ    = syscall.Errno(0x59)\n\tEDOM            = syscall.Errno(0x21)\n\tEDOTDOT         = syscall.Errno(0x49)\n\tEDQUOT          = syscall.Errno(0x7a)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEHOSTDOWN       = syscall.Errno(0x70)\n\tEHOSTUNREACH    = syscall.Errno(0x71)\n\tEHWPOISON       = syscall.Errno(0x85)\n\tEIDRM           = syscall.Errno(0x2b)\n\tEILSEQ          = syscall.Errno(0x54)\n\tEINPROGRESS     = syscall.Errno(0x73)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEISCONN         = syscall.Errno(0x6a)\n\tEISDIR          = syscall.Errno(0x15)\n\tEISNAM          = syscall.Errno(0x78)\n\tEKEYEXPIRED     = syscall.Errno(0x7f)\n\tEKEYREJECTED    = syscall.Errno(0x81)\n\tEKEYREVOKED     = syscall.Errno(0x80)\n\tEL2HLT          = syscall.Errno(0x33)\n\tEL2NSYNC        = syscall.Errno(0x2d)\n\tEL3HLT          = syscall.Errno(0x2e)\n\tEL3RST          = syscall.Errno(0x2f)\n\tELIBACC         = syscall.Errno(0x4f)\n\tELIBBAD         = syscall.Errno(0x50)\n\tELIBEXEC        = syscall.Errno(0x53)\n\tELIBMAX         = syscall.Errno(0x52)\n\tELIBSCN         = syscall.Errno(0x51)\n\tELNRNG          = syscall.Errno(0x30)\n\tELOOP           = syscall.Errno(0x28)\n\tEMEDIUMTYPE     = syscall.Errno(0x7c)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x5a)\n\tEMULTIHOP       = syscall.Errno(0x48)\n\tENAMETOOLONG    = syscall.Errno(0x24)\n\tENAVAIL         = syscall.Errno(0x77)\n\tENETDOWN        = syscall.Errno(0x64)\n\tENETRESET       = syscall.Errno(0x66)\n\tENETUNREACH     = syscall.Errno(0x65)\n\tENFILE          = syscall.Errno(0x17)\n\tENOANO          = syscall.Errno(0x37)\n\tENOBUFS         = syscall.Errno(0x69)\n\tENOCSI          = syscall.Errno(0x32)\n\tENODATA         = syscall.Errno(0x3d)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOKEY          = syscall.Errno(0x7e)\n\tENOLCK          = syscall.Errno(0x25)\n\tENOLINK         = syscall.Errno(0x43)\n\tENOMEDIUM       = syscall.Errno(0x7b)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x2a)\n\tENONET          = syscall.Errno(0x40)\n\tENOPKG          = syscall.Errno(0x41)\n\tENOPROTOOPT     = syscall.Errno(0x5c)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSR           = syscall.Errno(0x3f)\n\tENOSTR          = syscall.Errno(0x3c)\n\tENOSYS          = syscall.Errno(0x26)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x6b)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x27)\n\tENOTNAM         = syscall.Errno(0x76)\n\tENOTRECOVERABLE = syscall.Errno(0x83)\n\tENOTSOCK        = syscall.Errno(0x58)\n\tENOTSUP         = syscall.Errno(0x5f)\n\tENOTTY          = syscall.Errno(0x19)\n\tENOTUNIQ        = syscall.Errno(0x4c)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x5f)\n\tEOVERFLOW       = syscall.Errno(0x4b)\n\tEOWNERDEAD      = syscall.Errno(0x82)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x60)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROTO          = syscall.Errno(0x47)\n\tEPROTONOSUPPORT = syscall.Errno(0x5d)\n\tEPROTOTYPE      = syscall.Errno(0x5b)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMCHG         = syscall.Errno(0x4e)\n\tEREMOTE         = syscall.Errno(0x42)\n\tEREMOTEIO       = syscall.Errno(0x79)\n\tERESTART        = syscall.Errno(0x55)\n\tERFKILL         = syscall.Errno(0x84)\n\tEROFS           = syscall.Errno(0x1e)\n\tESHUTDOWN       = syscall.Errno(0x6c)\n\tESOCKTNOSUPPORT = syscall.Errno(0x5e)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESRMNT          = syscall.Errno(0x45)\n\tESTALE          = syscall.Errno(0x74)\n\tESTRPIPE        = syscall.Errno(0x56)\n\tETIME           = syscall.Errno(0x3e)\n\tETIMEDOUT       = syscall.Errno(0x6e)\n\tETOOMANYREFS    = syscall.Errno(0x6d)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUCLEAN         = syscall.Errno(0x75)\n\tEUNATCH         = syscall.Errno(0x31)\n\tEUSERS          = syscall.Errno(0x57)\n\tEWOULDBLOCK     = syscall.Errno(0xb)\n\tEXDEV           = syscall.Errno(0x12)\n\tEXFULL          = syscall.Errno(0x36)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0x7)\n\tSIGCHLD   = syscall.Signal(0x11)\n\tSIGCLD    = syscall.Signal(0x11)\n\tSIGCONT   = syscall.Signal(0x12)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x1d)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPOLL   = syscall.Signal(0x1d)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGPWR    = syscall.Signal(0x1e)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTKFLT = syscall.Signal(0x10)\n\tSIGSTOP   = syscall.Signal(0x13)\n\tSIGSYS    = syscall.Signal(0x1f)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x14)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x17)\n\tSIGUSR1   = syscall.Signal(0xa)\n\tSIGUSR2   = syscall.Signal(0xc)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"no such device or address\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device or resource busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"invalid cross-device link\"},\n\t{19, \"ENODEV\", \"no such device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"numerical result out of range\"},\n\t{35, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{36, \"ENAMETOOLONG\", \"file name too long\"},\n\t{37, \"ENOLCK\", \"no locks available\"},\n\t{38, \"ENOSYS\", \"function not implemented\"},\n\t{39, \"ENOTEMPTY\", \"directory not empty\"},\n\t{40, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{42, \"ENOMSG\", \"no message of desired type\"},\n\t{43, \"EIDRM\", \"identifier removed\"},\n\t{44, \"ECHRNG\", \"channel number out of range\"},\n\t{45, \"EL2NSYNC\", \"level 2 not synchronized\"},\n\t{46, \"EL3HLT\", \"level 3 halted\"},\n\t{47, \"EL3RST\", \"level 3 reset\"},\n\t{48, \"ELNRNG\", \"link number out of range\"},\n\t{49, \"EUNATCH\", \"protocol driver not attached\"},\n\t{50, \"ENOCSI\", \"no CSI structure available\"},\n\t{51, \"EL2HLT\", \"level 2 halted\"},\n\t{52, \"EBADE\", \"invalid exchange\"},\n\t{53, \"EBADR\", \"invalid request descriptor\"},\n\t{54, \"EXFULL\", \"exchange full\"},\n\t{55, \"ENOANO\", \"no anode\"},\n\t{56, \"EBADRQC\", \"invalid request code\"},\n\t{57, \"EBADSLT\", \"invalid slot\"},\n\t{59, \"EBFONT\", \"bad font file format\"},\n\t{60, \"ENOSTR\", \"device not a stream\"},\n\t{61, \"ENODATA\", \"no data available\"},\n\t{62, \"ETIME\", \"timer expired\"},\n\t{63, \"ENOSR\", \"out of streams resources\"},\n\t{64, \"ENONET\", \"machine is not on the network\"},\n\t{65, \"ENOPKG\", \"package not installed\"},\n\t{66, \"EREMOTE\", \"object is remote\"},\n\t{67, \"ENOLINK\", \"link has been severed\"},\n\t{68, \"EADV\", \"advertise error\"},\n\t{69, \"ESRMNT\", \"srmount error\"},\n\t{70, \"ECOMM\", \"communication error on send\"},\n\t{71, \"EPROTO\", \"protocol error\"},\n\t{72, \"EMULTIHOP\", \"multihop attempted\"},\n\t{73, \"EDOTDOT\", \"RFS specific error\"},\n\t{74, \"EBADMSG\", \"bad message\"},\n\t{75, \"EOVERFLOW\", \"value too large for defined data type\"},\n\t{76, \"ENOTUNIQ\", \"name not unique on network\"},\n\t{77, \"EBADFD\", \"file descriptor in bad state\"},\n\t{78, \"EREMCHG\", \"remote address changed\"},\n\t{79, \"ELIBACC\", \"can not access a needed shared library\"},\n\t{80, \"ELIBBAD\", \"accessing a corrupted shared library\"},\n\t{81, \"ELIBSCN\", \".lib section in a.out corrupted\"},\n\t{82, \"ELIBMAX\", \"attempting to link in too many shared libraries\"},\n\t{83, \"ELIBEXEC\", \"cannot exec a shared library directly\"},\n\t{84, \"EILSEQ\", \"invalid or incomplete multibyte or wide character\"},\n\t{85, \"ERESTART\", \"interrupted system call should be restarted\"},\n\t{86, \"ESTRPIPE\", \"streams pipe error\"},\n\t{87, \"EUSERS\", \"too many users\"},\n\t{88, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{89, \"EDESTADDRREQ\", \"destination address required\"},\n\t{90, \"EMSGSIZE\", \"message too long\"},\n\t{91, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{92, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{93, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{94, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{95, \"ENOTSUP\", \"operation not supported\"},\n\t{96, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{97, \"EAFNOSUPPORT\", \"address family not supported by protocol\"},\n\t{98, \"EADDRINUSE\", \"address already in use\"},\n\t{99, \"EADDRNOTAVAIL\", \"cannot assign requested address\"},\n\t{100, \"ENETDOWN\", \"network is down\"},\n\t{101, \"ENETUNREACH\", \"network is unreachable\"},\n\t{102, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{103, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{104, \"ECONNRESET\", \"connection reset by peer\"},\n\t{105, \"ENOBUFS\", \"no buffer space available\"},\n\t{106, \"EISCONN\", \"transport endpoint is already connected\"},\n\t{107, \"ENOTCONN\", \"transport endpoint is not connected\"},\n\t{108, \"ESHUTDOWN\", \"cannot send after transport endpoint shutdown\"},\n\t{109, \"ETOOMANYREFS\", \"too many references: cannot splice\"},\n\t{110, \"ETIMEDOUT\", \"connection timed out\"},\n\t{111, \"ECONNREFUSED\", \"connection refused\"},\n\t{112, \"EHOSTDOWN\", \"host is down\"},\n\t{113, \"EHOSTUNREACH\", \"no route to host\"},\n\t{114, \"EALREADY\", \"operation already in progress\"},\n\t{115, \"EINPROGRESS\", \"operation now in progress\"},\n\t{116, \"ESTALE\", \"stale file handle\"},\n\t{117, \"EUCLEAN\", \"structure needs cleaning\"},\n\t{118, \"ENOTNAM\", \"not a XENIX named type file\"},\n\t{119, \"ENAVAIL\", \"no XENIX semaphores available\"},\n\t{120, \"EISNAM\", \"is a named type file\"},\n\t{121, \"EREMOTEIO\", \"remote I/O error\"},\n\t{122, \"EDQUOT\", \"disk quota exceeded\"},\n\t{123, \"ENOMEDIUM\", \"no medium found\"},\n\t{124, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{125, \"ECANCELED\", \"operation canceled\"},\n\t{126, \"ENOKEY\", \"required key not available\"},\n\t{127, \"EKEYEXPIRED\", \"key has expired\"},\n\t{128, \"EKEYREVOKED\", \"key has been revoked\"},\n\t{129, \"EKEYREJECTED\", \"key was rejected by service\"},\n\t{130, \"EOWNERDEAD\", \"owner died\"},\n\t{131, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{132, \"ERFKILL\", \"operation not possible due to RF-kill\"},\n\t{133, \"EHWPOISON\", \"memory page has hardware error\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/breakpoint trap\"},\n\t{6, \"SIGABRT\", \"aborted\"},\n\t{7, \"SIGBUS\", \"bus error\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGUSR1\", \"user defined signal 1\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGUSR2\", \"user defined signal 2\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGSTKFLT\", \"stack fault\"},\n\t{17, \"SIGCHLD\", \"child exited\"},\n\t{18, \"SIGCONT\", \"continued\"},\n\t{19, \"SIGSTOP\", \"stopped (signal)\"},\n\t{20, \"SIGTSTP\", \"stopped\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGURG\", \"urgent I/O condition\"},\n\t{24, \"SIGXCPU\", \"CPU time limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"file size limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window changed\"},\n\t{29, \"SIGIO\", \"I/O possible\"},\n\t{30, \"SIGPWR\", \"power failure\"},\n\t{31, \"SIGSYS\", \"bad system call\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_linux_mips.go",
    "content": "// mkerrors.sh -Wall -Werror -static -I/tmp/include\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build mips,linux\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAAFS_MAGIC                           = 0x5a3c69f0\n\tADFS_SUPER_MAGIC                     = 0xadf5\n\tAFFS_SUPER_MAGIC                     = 0xadff\n\tAFS_FS_MAGIC                         = 0x6b414653\n\tAFS_SUPER_MAGIC                      = 0x5346414f\n\tAF_ALG                               = 0x26\n\tAF_APPLETALK                         = 0x5\n\tAF_ASH                               = 0x12\n\tAF_ATMPVC                            = 0x8\n\tAF_ATMSVC                            = 0x14\n\tAF_AX25                              = 0x3\n\tAF_BLUETOOTH                         = 0x1f\n\tAF_BRIDGE                            = 0x7\n\tAF_CAIF                              = 0x25\n\tAF_CAN                               = 0x1d\n\tAF_DECnet                            = 0xc\n\tAF_ECONET                            = 0x13\n\tAF_FILE                              = 0x1\n\tAF_IB                                = 0x1b\n\tAF_IEEE802154                        = 0x24\n\tAF_INET                              = 0x2\n\tAF_INET6                             = 0xa\n\tAF_IPX                               = 0x4\n\tAF_IRDA                              = 0x17\n\tAF_ISDN                              = 0x22\n\tAF_IUCV                              = 0x20\n\tAF_KCM                               = 0x29\n\tAF_KEY                               = 0xf\n\tAF_LLC                               = 0x1a\n\tAF_LOCAL                             = 0x1\n\tAF_MAX                               = 0x2d\n\tAF_MPLS                              = 0x1c\n\tAF_NETBEUI                           = 0xd\n\tAF_NETLINK                           = 0x10\n\tAF_NETROM                            = 0x6\n\tAF_NFC                               = 0x27\n\tAF_PACKET                            = 0x11\n\tAF_PHONET                            = 0x23\n\tAF_PPPOX                             = 0x18\n\tAF_QIPCRTR                           = 0x2a\n\tAF_RDS                               = 0x15\n\tAF_ROSE                              = 0xb\n\tAF_ROUTE                             = 0x10\n\tAF_RXRPC                             = 0x21\n\tAF_SECURITY                          = 0xe\n\tAF_SMC                               = 0x2b\n\tAF_SNA                               = 0x16\n\tAF_TIPC                              = 0x1e\n\tAF_UNIX                              = 0x1\n\tAF_UNSPEC                            = 0x0\n\tAF_VSOCK                             = 0x28\n\tAF_WANPIPE                           = 0x19\n\tAF_X25                               = 0x9\n\tAF_XDP                               = 0x2c\n\tALG_OP_DECRYPT                       = 0x0\n\tALG_OP_ENCRYPT                       = 0x1\n\tALG_SET_AEAD_ASSOCLEN                = 0x4\n\tALG_SET_AEAD_AUTHSIZE                = 0x5\n\tALG_SET_IV                           = 0x2\n\tALG_SET_KEY                          = 0x1\n\tALG_SET_OP                           = 0x3\n\tANON_INODE_FS_MAGIC                  = 0x9041934\n\tARPHRD_6LOWPAN                       = 0x339\n\tARPHRD_ADAPT                         = 0x108\n\tARPHRD_APPLETLK                      = 0x8\n\tARPHRD_ARCNET                        = 0x7\n\tARPHRD_ASH                           = 0x30d\n\tARPHRD_ATM                           = 0x13\n\tARPHRD_AX25                          = 0x3\n\tARPHRD_BIF                           = 0x307\n\tARPHRD_CAIF                          = 0x336\n\tARPHRD_CAN                           = 0x118\n\tARPHRD_CHAOS                         = 0x5\n\tARPHRD_CISCO                         = 0x201\n\tARPHRD_CSLIP                         = 0x101\n\tARPHRD_CSLIP6                        = 0x103\n\tARPHRD_DDCMP                         = 0x205\n\tARPHRD_DLCI                          = 0xf\n\tARPHRD_ECONET                        = 0x30e\n\tARPHRD_EETHER                        = 0x2\n\tARPHRD_ETHER                         = 0x1\n\tARPHRD_EUI64                         = 0x1b\n\tARPHRD_FCAL                          = 0x311\n\tARPHRD_FCFABRIC                      = 0x313\n\tARPHRD_FCPL                          = 0x312\n\tARPHRD_FCPP                          = 0x310\n\tARPHRD_FDDI                          = 0x306\n\tARPHRD_FRAD                          = 0x302\n\tARPHRD_HDLC                          = 0x201\n\tARPHRD_HIPPI                         = 0x30c\n\tARPHRD_HWX25                         = 0x110\n\tARPHRD_IEEE1394                      = 0x18\n\tARPHRD_IEEE802                       = 0x6\n\tARPHRD_IEEE80211                     = 0x321\n\tARPHRD_IEEE80211_PRISM               = 0x322\n\tARPHRD_IEEE80211_RADIOTAP            = 0x323\n\tARPHRD_IEEE802154                    = 0x324\n\tARPHRD_IEEE802154_MONITOR            = 0x325\n\tARPHRD_IEEE802_TR                    = 0x320\n\tARPHRD_INFINIBAND                    = 0x20\n\tARPHRD_IP6GRE                        = 0x337\n\tARPHRD_IPDDP                         = 0x309\n\tARPHRD_IPGRE                         = 0x30a\n\tARPHRD_IRDA                          = 0x30f\n\tARPHRD_LAPB                          = 0x204\n\tARPHRD_LOCALTLK                      = 0x305\n\tARPHRD_LOOPBACK                      = 0x304\n\tARPHRD_METRICOM                      = 0x17\n\tARPHRD_NETLINK                       = 0x338\n\tARPHRD_NETROM                        = 0x0\n\tARPHRD_NONE                          = 0xfffe\n\tARPHRD_PHONET                        = 0x334\n\tARPHRD_PHONET_PIPE                   = 0x335\n\tARPHRD_PIMREG                        = 0x30b\n\tARPHRD_PPP                           = 0x200\n\tARPHRD_PRONET                        = 0x4\n\tARPHRD_RAWHDLC                       = 0x206\n\tARPHRD_RAWIP                         = 0x207\n\tARPHRD_ROSE                          = 0x10e\n\tARPHRD_RSRVD                         = 0x104\n\tARPHRD_SIT                           = 0x308\n\tARPHRD_SKIP                          = 0x303\n\tARPHRD_SLIP                          = 0x100\n\tARPHRD_SLIP6                         = 0x102\n\tARPHRD_TUNNEL                        = 0x300\n\tARPHRD_TUNNEL6                       = 0x301\n\tARPHRD_VOID                          = 0xffff\n\tARPHRD_VSOCKMON                      = 0x33a\n\tARPHRD_X25                           = 0x10f\n\tAUTOFS_SUPER_MAGIC                   = 0x187\n\tB0                                   = 0x0\n\tB1000000                             = 0x1008\n\tB110                                 = 0x3\n\tB115200                              = 0x1002\n\tB1152000                             = 0x1009\n\tB1200                                = 0x9\n\tB134                                 = 0x4\n\tB150                                 = 0x5\n\tB1500000                             = 0x100a\n\tB1800                                = 0xa\n\tB19200                               = 0xe\n\tB200                                 = 0x6\n\tB2000000                             = 0x100b\n\tB230400                              = 0x1003\n\tB2400                                = 0xb\n\tB2500000                             = 0x100c\n\tB300                                 = 0x7\n\tB3000000                             = 0x100d\n\tB3500000                             = 0x100e\n\tB38400                               = 0xf\n\tB4000000                             = 0x100f\n\tB460800                              = 0x1004\n\tB4800                                = 0xc\n\tB50                                  = 0x1\n\tB500000                              = 0x1005\n\tB57600                               = 0x1001\n\tB576000                              = 0x1006\n\tB600                                 = 0x8\n\tB75                                  = 0x2\n\tB921600                              = 0x1007\n\tB9600                                = 0xd\n\tBALLOON_KVM_MAGIC                    = 0x13661366\n\tBDEVFS_MAGIC                         = 0x62646576\n\tBINDERFS_SUPER_MAGIC                 = 0x6c6f6f70\n\tBINFMTFS_MAGIC                       = 0x42494e4d\n\tBLKBSZGET                            = 0x40041270\n\tBLKBSZSET                            = 0x80041271\n\tBLKFLSBUF                            = 0x20001261\n\tBLKFRAGET                            = 0x20001265\n\tBLKFRASET                            = 0x20001264\n\tBLKGETSIZE                           = 0x20001260\n\tBLKGETSIZE64                         = 0x40041272\n\tBLKPBSZGET                           = 0x2000127b\n\tBLKRAGET                             = 0x20001263\n\tBLKRASET                             = 0x20001262\n\tBLKROGET                             = 0x2000125e\n\tBLKROSET                             = 0x2000125d\n\tBLKRRPART                            = 0x2000125f\n\tBLKSECTGET                           = 0x20001267\n\tBLKSECTSET                           = 0x20001266\n\tBLKSSZGET                            = 0x20001268\n\tBOTHER                               = 0x1000\n\tBPF_A                                = 0x10\n\tBPF_ABS                              = 0x20\n\tBPF_ADD                              = 0x0\n\tBPF_ALU                              = 0x4\n\tBPF_ALU64                            = 0x7\n\tBPF_AND                              = 0x50\n\tBPF_ANY                              = 0x0\n\tBPF_ARSH                             = 0xc0\n\tBPF_B                                = 0x10\n\tBPF_BUILD_ID_SIZE                    = 0x14\n\tBPF_CALL                             = 0x80\n\tBPF_DEVCG_ACC_MKNOD                  = 0x1\n\tBPF_DEVCG_ACC_READ                   = 0x2\n\tBPF_DEVCG_ACC_WRITE                  = 0x4\n\tBPF_DEVCG_DEV_BLOCK                  = 0x1\n\tBPF_DEVCG_DEV_CHAR                   = 0x2\n\tBPF_DIV                              = 0x30\n\tBPF_DW                               = 0x18\n\tBPF_END                              = 0xd0\n\tBPF_EXIST                            = 0x2\n\tBPF_EXIT                             = 0x90\n\tBPF_FROM_BE                          = 0x8\n\tBPF_FROM_LE                          = 0x0\n\tBPF_FS_MAGIC                         = 0xcafe4a11\n\tBPF_F_ALLOW_MULTI                    = 0x2\n\tBPF_F_ALLOW_OVERRIDE                 = 0x1\n\tBPF_F_ANY_ALIGNMENT                  = 0x2\n\tBPF_F_CTXLEN_MASK                    = 0xfffff00000000\n\tBPF_F_CURRENT_CPU                    = 0xffffffff\n\tBPF_F_CURRENT_NETNS                  = -0x1\n\tBPF_F_DONT_FRAGMENT                  = 0x4\n\tBPF_F_FAST_STACK_CMP                 = 0x200\n\tBPF_F_HDR_FIELD_MASK                 = 0xf\n\tBPF_F_INDEX_MASK                     = 0xffffffff\n\tBPF_F_INGRESS                        = 0x1\n\tBPF_F_INVALIDATE_HASH                = 0x2\n\tBPF_F_LOCK                           = 0x4\n\tBPF_F_MARK_ENFORCE                   = 0x40\n\tBPF_F_MARK_MANGLED_0                 = 0x20\n\tBPF_F_NO_COMMON_LRU                  = 0x2\n\tBPF_F_NO_PREALLOC                    = 0x1\n\tBPF_F_NUMA_NODE                      = 0x4\n\tBPF_F_PSEUDO_HDR                     = 0x10\n\tBPF_F_QUERY_EFFECTIVE                = 0x1\n\tBPF_F_RDONLY                         = 0x8\n\tBPF_F_RECOMPUTE_CSUM                 = 0x1\n\tBPF_F_REUSE_STACKID                  = 0x400\n\tBPF_F_SEQ_NUMBER                     = 0x8\n\tBPF_F_SKIP_FIELD_MASK                = 0xff\n\tBPF_F_STACK_BUILD_ID                 = 0x20\n\tBPF_F_STRICT_ALIGNMENT               = 0x1\n\tBPF_F_TUNINFO_IPV6                   = 0x1\n\tBPF_F_USER_BUILD_ID                  = 0x800\n\tBPF_F_USER_STACK                     = 0x100\n\tBPF_F_WRONLY                         = 0x10\n\tBPF_F_ZERO_CSUM_TX                   = 0x2\n\tBPF_F_ZERO_SEED                      = 0x40\n\tBPF_H                                = 0x8\n\tBPF_IMM                              = 0x0\n\tBPF_IND                              = 0x40\n\tBPF_JA                               = 0x0\n\tBPF_JEQ                              = 0x10\n\tBPF_JGE                              = 0x30\n\tBPF_JGT                              = 0x20\n\tBPF_JLE                              = 0xb0\n\tBPF_JLT                              = 0xa0\n\tBPF_JMP                              = 0x5\n\tBPF_JMP32                            = 0x6\n\tBPF_JNE                              = 0x50\n\tBPF_JSET                             = 0x40\n\tBPF_JSGE                             = 0x70\n\tBPF_JSGT                             = 0x60\n\tBPF_JSLE                             = 0xd0\n\tBPF_JSLT                             = 0xc0\n\tBPF_K                                = 0x0\n\tBPF_LD                               = 0x0\n\tBPF_LDX                              = 0x1\n\tBPF_LEN                              = 0x80\n\tBPF_LL_OFF                           = -0x200000\n\tBPF_LSH                              = 0x60\n\tBPF_MAJOR_VERSION                    = 0x1\n\tBPF_MAXINSNS                         = 0x1000\n\tBPF_MEM                              = 0x60\n\tBPF_MEMWORDS                         = 0x10\n\tBPF_MINOR_VERSION                    = 0x1\n\tBPF_MISC                             = 0x7\n\tBPF_MOD                              = 0x90\n\tBPF_MOV                              = 0xb0\n\tBPF_MSH                              = 0xa0\n\tBPF_MUL                              = 0x20\n\tBPF_NEG                              = 0x80\n\tBPF_NET_OFF                          = -0x100000\n\tBPF_NOEXIST                          = 0x1\n\tBPF_OBJ_NAME_LEN                     = 0x10\n\tBPF_OR                               = 0x40\n\tBPF_PSEUDO_CALL                      = 0x1\n\tBPF_PSEUDO_MAP_FD                    = 0x1\n\tBPF_RET                              = 0x6\n\tBPF_RSH                              = 0x70\n\tBPF_SOCK_OPS_ALL_CB_FLAGS            = 0x7\n\tBPF_SOCK_OPS_RETRANS_CB_FLAG         = 0x2\n\tBPF_SOCK_OPS_RTO_CB_FLAG             = 0x1\n\tBPF_SOCK_OPS_STATE_CB_FLAG           = 0x4\n\tBPF_ST                               = 0x2\n\tBPF_STX                              = 0x3\n\tBPF_SUB                              = 0x10\n\tBPF_TAG_SIZE                         = 0x8\n\tBPF_TAX                              = 0x0\n\tBPF_TO_BE                            = 0x8\n\tBPF_TO_LE                            = 0x0\n\tBPF_TXA                              = 0x80\n\tBPF_W                                = 0x0\n\tBPF_X                                = 0x8\n\tBPF_XADD                             = 0xc0\n\tBPF_XOR                              = 0xa0\n\tBRKINT                               = 0x2\n\tBS0                                  = 0x0\n\tBS1                                  = 0x2000\n\tBSDLY                                = 0x2000\n\tBTRFS_SUPER_MAGIC                    = 0x9123683e\n\tBTRFS_TEST_MAGIC                     = 0x73727279\n\tCAN_BCM                              = 0x2\n\tCAN_EFF_FLAG                         = 0x80000000\n\tCAN_EFF_ID_BITS                      = 0x1d\n\tCAN_EFF_MASK                         = 0x1fffffff\n\tCAN_ERR_FLAG                         = 0x20000000\n\tCAN_ERR_MASK                         = 0x1fffffff\n\tCAN_INV_FILTER                       = 0x20000000\n\tCAN_ISOTP                            = 0x6\n\tCAN_MAX_DLC                          = 0x8\n\tCAN_MAX_DLEN                         = 0x8\n\tCAN_MCNET                            = 0x5\n\tCAN_MTU                              = 0x10\n\tCAN_NPROTO                           = 0x7\n\tCAN_RAW                              = 0x1\n\tCAN_RAW_FILTER_MAX                   = 0x200\n\tCAN_RTR_FLAG                         = 0x40000000\n\tCAN_SFF_ID_BITS                      = 0xb\n\tCAN_SFF_MASK                         = 0x7ff\n\tCAN_TP16                             = 0x3\n\tCAN_TP20                             = 0x4\n\tCBAUD                                = 0x100f\n\tCBAUDEX                              = 0x1000\n\tCFLUSH                               = 0xf\n\tCGROUP2_SUPER_MAGIC                  = 0x63677270\n\tCGROUP_SUPER_MAGIC                   = 0x27e0eb\n\tCIBAUD                               = 0x100f0000\n\tCLOCAL                               = 0x800\n\tCLOCK_BOOTTIME                       = 0x7\n\tCLOCK_BOOTTIME_ALARM                 = 0x9\n\tCLOCK_DEFAULT                        = 0x0\n\tCLOCK_EXT                            = 0x1\n\tCLOCK_INT                            = 0x2\n\tCLOCK_MONOTONIC                      = 0x1\n\tCLOCK_MONOTONIC_COARSE               = 0x6\n\tCLOCK_MONOTONIC_RAW                  = 0x4\n\tCLOCK_PROCESS_CPUTIME_ID             = 0x2\n\tCLOCK_REALTIME                       = 0x0\n\tCLOCK_REALTIME_ALARM                 = 0x8\n\tCLOCK_REALTIME_COARSE                = 0x5\n\tCLOCK_TAI                            = 0xb\n\tCLOCK_THREAD_CPUTIME_ID              = 0x3\n\tCLOCK_TXFROMRX                       = 0x4\n\tCLOCK_TXINT                          = 0x3\n\tCLONE_CHILD_CLEARTID                 = 0x200000\n\tCLONE_CHILD_SETTID                   = 0x1000000\n\tCLONE_DETACHED                       = 0x400000\n\tCLONE_FILES                          = 0x400\n\tCLONE_FS                             = 0x200\n\tCLONE_IO                             = 0x80000000\n\tCLONE_NEWCGROUP                      = 0x2000000\n\tCLONE_NEWIPC                         = 0x8000000\n\tCLONE_NEWNET                         = 0x40000000\n\tCLONE_NEWNS                          = 0x20000\n\tCLONE_NEWPID                         = 0x20000000\n\tCLONE_NEWUSER                        = 0x10000000\n\tCLONE_NEWUTS                         = 0x4000000\n\tCLONE_PARENT                         = 0x8000\n\tCLONE_PARENT_SETTID                  = 0x100000\n\tCLONE_PTRACE                         = 0x2000\n\tCLONE_SETTLS                         = 0x80000\n\tCLONE_SIGHAND                        = 0x800\n\tCLONE_SYSVSEM                        = 0x40000\n\tCLONE_THREAD                         = 0x10000\n\tCLONE_UNTRACED                       = 0x800000\n\tCLONE_VFORK                          = 0x4000\n\tCLONE_VM                             = 0x100\n\tCMSPAR                               = 0x40000000\n\tCODA_SUPER_MAGIC                     = 0x73757245\n\tCR0                                  = 0x0\n\tCR1                                  = 0x200\n\tCR2                                  = 0x400\n\tCR3                                  = 0x600\n\tCRAMFS_MAGIC                         = 0x28cd3d45\n\tCRDLY                                = 0x600\n\tCREAD                                = 0x80\n\tCRTSCTS                              = 0x80000000\n\tCRYPTO_MAX_NAME                      = 0x40\n\tCRYPTO_MSG_MAX                       = 0x15\n\tCRYPTO_NR_MSGTYPES                   = 0x6\n\tCRYPTO_REPORT_MAXSIZE                = 0x160\n\tCS5                                  = 0x0\n\tCS6                                  = 0x10\n\tCS7                                  = 0x20\n\tCS8                                  = 0x30\n\tCSIGNAL                              = 0xff\n\tCSIZE                                = 0x30\n\tCSTART                               = 0x11\n\tCSTATUS                              = 0x0\n\tCSTOP                                = 0x13\n\tCSTOPB                               = 0x40\n\tCSUSP                                = 0x1a\n\tDAXFS_MAGIC                          = 0x64646178\n\tDEBUGFS_MAGIC                        = 0x64626720\n\tDEVPTS_SUPER_MAGIC                   = 0x1cd1\n\tDT_BLK                               = 0x6\n\tDT_CHR                               = 0x2\n\tDT_DIR                               = 0x4\n\tDT_FIFO                              = 0x1\n\tDT_LNK                               = 0xa\n\tDT_REG                               = 0x8\n\tDT_SOCK                              = 0xc\n\tDT_UNKNOWN                           = 0x0\n\tDT_WHT                               = 0xe\n\tECHO                                 = 0x8\n\tECHOCTL                              = 0x200\n\tECHOE                                = 0x10\n\tECHOK                                = 0x20\n\tECHOKE                               = 0x800\n\tECHONL                               = 0x40\n\tECHOPRT                              = 0x400\n\tECRYPTFS_SUPER_MAGIC                 = 0xf15f\n\tEFD_CLOEXEC                          = 0x80000\n\tEFD_NONBLOCK                         = 0x80\n\tEFD_SEMAPHORE                        = 0x1\n\tEFIVARFS_MAGIC                       = 0xde5e81e4\n\tEFS_SUPER_MAGIC                      = 0x414a53\n\tENCODING_DEFAULT                     = 0x0\n\tENCODING_FM_MARK                     = 0x3\n\tENCODING_FM_SPACE                    = 0x4\n\tENCODING_MANCHESTER                  = 0x5\n\tENCODING_NRZ                         = 0x1\n\tENCODING_NRZI                        = 0x2\n\tEPOLLERR                             = 0x8\n\tEPOLLET                              = 0x80000000\n\tEPOLLEXCLUSIVE                       = 0x10000000\n\tEPOLLHUP                             = 0x10\n\tEPOLLIN                              = 0x1\n\tEPOLLMSG                             = 0x400\n\tEPOLLONESHOT                         = 0x40000000\n\tEPOLLOUT                             = 0x4\n\tEPOLLPRI                             = 0x2\n\tEPOLLRDBAND                          = 0x80\n\tEPOLLRDHUP                           = 0x2000\n\tEPOLLRDNORM                          = 0x40\n\tEPOLLWAKEUP                          = 0x20000000\n\tEPOLLWRBAND                          = 0x200\n\tEPOLLWRNORM                          = 0x100\n\tEPOLL_CLOEXEC                        = 0x80000\n\tEPOLL_CTL_ADD                        = 0x1\n\tEPOLL_CTL_DEL                        = 0x2\n\tEPOLL_CTL_MOD                        = 0x3\n\tETH_P_1588                           = 0x88f7\n\tETH_P_8021AD                         = 0x88a8\n\tETH_P_8021AH                         = 0x88e7\n\tETH_P_8021Q                          = 0x8100\n\tETH_P_80221                          = 0x8917\n\tETH_P_802_2                          = 0x4\n\tETH_P_802_3                          = 0x1\n\tETH_P_802_3_MIN                      = 0x600\n\tETH_P_802_EX1                        = 0x88b5\n\tETH_P_AARP                           = 0x80f3\n\tETH_P_AF_IUCV                        = 0xfbfb\n\tETH_P_ALL                            = 0x3\n\tETH_P_AOE                            = 0x88a2\n\tETH_P_ARCNET                         = 0x1a\n\tETH_P_ARP                            = 0x806\n\tETH_P_ATALK                          = 0x809b\n\tETH_P_ATMFATE                        = 0x8884\n\tETH_P_ATMMPOA                        = 0x884c\n\tETH_P_AX25                           = 0x2\n\tETH_P_BATMAN                         = 0x4305\n\tETH_P_BPQ                            = 0x8ff\n\tETH_P_CAIF                           = 0xf7\n\tETH_P_CAN                            = 0xc\n\tETH_P_CANFD                          = 0xd\n\tETH_P_CONTROL                        = 0x16\n\tETH_P_CUST                           = 0x6006\n\tETH_P_DDCMP                          = 0x6\n\tETH_P_DEC                            = 0x6000\n\tETH_P_DIAG                           = 0x6005\n\tETH_P_DNA_DL                         = 0x6001\n\tETH_P_DNA_RC                         = 0x6002\n\tETH_P_DNA_RT                         = 0x6003\n\tETH_P_DSA                            = 0x1b\n\tETH_P_ECONET                         = 0x18\n\tETH_P_EDSA                           = 0xdada\n\tETH_P_ERSPAN                         = 0x88be\n\tETH_P_ERSPAN2                        = 0x22eb\n\tETH_P_FCOE                           = 0x8906\n\tETH_P_FIP                            = 0x8914\n\tETH_P_HDLC                           = 0x19\n\tETH_P_HSR                            = 0x892f\n\tETH_P_IBOE                           = 0x8915\n\tETH_P_IEEE802154                     = 0xf6\n\tETH_P_IEEEPUP                        = 0xa00\n\tETH_P_IEEEPUPAT                      = 0xa01\n\tETH_P_IFE                            = 0xed3e\n\tETH_P_IP                             = 0x800\n\tETH_P_IPV6                           = 0x86dd\n\tETH_P_IPX                            = 0x8137\n\tETH_P_IRDA                           = 0x17\n\tETH_P_LAT                            = 0x6004\n\tETH_P_LINK_CTL                       = 0x886c\n\tETH_P_LOCALTALK                      = 0x9\n\tETH_P_LOOP                           = 0x60\n\tETH_P_LOOPBACK                       = 0x9000\n\tETH_P_MACSEC                         = 0x88e5\n\tETH_P_MAP                            = 0xf9\n\tETH_P_MOBITEX                        = 0x15\n\tETH_P_MPLS_MC                        = 0x8848\n\tETH_P_MPLS_UC                        = 0x8847\n\tETH_P_MVRP                           = 0x88f5\n\tETH_P_NCSI                           = 0x88f8\n\tETH_P_NSH                            = 0x894f\n\tETH_P_PAE                            = 0x888e\n\tETH_P_PAUSE                          = 0x8808\n\tETH_P_PHONET                         = 0xf5\n\tETH_P_PPPTALK                        = 0x10\n\tETH_P_PPP_DISC                       = 0x8863\n\tETH_P_PPP_MP                         = 0x8\n\tETH_P_PPP_SES                        = 0x8864\n\tETH_P_PREAUTH                        = 0x88c7\n\tETH_P_PRP                            = 0x88fb\n\tETH_P_PUP                            = 0x200\n\tETH_P_PUPAT                          = 0x201\n\tETH_P_QINQ1                          = 0x9100\n\tETH_P_QINQ2                          = 0x9200\n\tETH_P_QINQ3                          = 0x9300\n\tETH_P_RARP                           = 0x8035\n\tETH_P_SCA                            = 0x6007\n\tETH_P_SLOW                           = 0x8809\n\tETH_P_SNAP                           = 0x5\n\tETH_P_TDLS                           = 0x890d\n\tETH_P_TEB                            = 0x6558\n\tETH_P_TIPC                           = 0x88ca\n\tETH_P_TRAILER                        = 0x1c\n\tETH_P_TR_802_2                       = 0x11\n\tETH_P_TSN                            = 0x22f0\n\tETH_P_WAN_PPP                        = 0x7\n\tETH_P_WCCP                           = 0x883e\n\tETH_P_X25                            = 0x805\n\tETH_P_XDSA                           = 0xf8\n\tEXABYTE_ENABLE_NEST                  = 0xf0\n\tEXT2_SUPER_MAGIC                     = 0xef53\n\tEXT3_SUPER_MAGIC                     = 0xef53\n\tEXT4_SUPER_MAGIC                     = 0xef53\n\tEXTA                                 = 0xe\n\tEXTB                                 = 0xf\n\tEXTPROC                              = 0x10000\n\tF2FS_SUPER_MAGIC                     = 0xf2f52010\n\tFALLOC_FL_COLLAPSE_RANGE             = 0x8\n\tFALLOC_FL_INSERT_RANGE               = 0x20\n\tFALLOC_FL_KEEP_SIZE                  = 0x1\n\tFALLOC_FL_NO_HIDE_STALE              = 0x4\n\tFALLOC_FL_PUNCH_HOLE                 = 0x2\n\tFALLOC_FL_UNSHARE_RANGE              = 0x40\n\tFALLOC_FL_ZERO_RANGE                 = 0x10\n\tFANOTIFY_METADATA_VERSION            = 0x3\n\tFAN_ACCESS                           = 0x1\n\tFAN_ACCESS_PERM                      = 0x20000\n\tFAN_ALLOW                            = 0x1\n\tFAN_ALL_CLASS_BITS                   = 0xc\n\tFAN_ALL_EVENTS                       = 0x3b\n\tFAN_ALL_INIT_FLAGS                   = 0x3f\n\tFAN_ALL_MARK_FLAGS                   = 0xff\n\tFAN_ALL_OUTGOING_EVENTS              = 0x3403b\n\tFAN_ALL_PERM_EVENTS                  = 0x30000\n\tFAN_ATTRIB                           = 0x4\n\tFAN_AUDIT                            = 0x10\n\tFAN_CLASS_CONTENT                    = 0x4\n\tFAN_CLASS_NOTIF                      = 0x0\n\tFAN_CLASS_PRE_CONTENT                = 0x8\n\tFAN_CLOEXEC                          = 0x1\n\tFAN_CLOSE                            = 0x18\n\tFAN_CLOSE_NOWRITE                    = 0x10\n\tFAN_CLOSE_WRITE                      = 0x8\n\tFAN_CREATE                           = 0x100\n\tFAN_DELETE                           = 0x200\n\tFAN_DELETE_SELF                      = 0x400\n\tFAN_DENY                             = 0x2\n\tFAN_ENABLE_AUDIT                     = 0x40\n\tFAN_EVENT_INFO_TYPE_FID              = 0x1\n\tFAN_EVENT_METADATA_LEN               = 0x18\n\tFAN_EVENT_ON_CHILD                   = 0x8000000\n\tFAN_MARK_ADD                         = 0x1\n\tFAN_MARK_DONT_FOLLOW                 = 0x4\n\tFAN_MARK_FILESYSTEM                  = 0x100\n\tFAN_MARK_FLUSH                       = 0x80\n\tFAN_MARK_IGNORED_MASK                = 0x20\n\tFAN_MARK_IGNORED_SURV_MODIFY         = 0x40\n\tFAN_MARK_INODE                       = 0x0\n\tFAN_MARK_MOUNT                       = 0x10\n\tFAN_MARK_ONLYDIR                     = 0x8\n\tFAN_MARK_REMOVE                      = 0x2\n\tFAN_MODIFY                           = 0x2\n\tFAN_MOVE                             = 0xc0\n\tFAN_MOVED_FROM                       = 0x40\n\tFAN_MOVED_TO                         = 0x80\n\tFAN_MOVE_SELF                        = 0x800\n\tFAN_NOFD                             = -0x1\n\tFAN_NONBLOCK                         = 0x2\n\tFAN_ONDIR                            = 0x40000000\n\tFAN_OPEN                             = 0x20\n\tFAN_OPEN_EXEC                        = 0x1000\n\tFAN_OPEN_EXEC_PERM                   = 0x40000\n\tFAN_OPEN_PERM                        = 0x10000\n\tFAN_Q_OVERFLOW                       = 0x4000\n\tFAN_REPORT_FID                       = 0x200\n\tFAN_REPORT_TID                       = 0x100\n\tFAN_UNLIMITED_MARKS                  = 0x20\n\tFAN_UNLIMITED_QUEUE                  = 0x10\n\tFD_CLOEXEC                           = 0x1\n\tFD_SETSIZE                           = 0x400\n\tFF0                                  = 0x0\n\tFF1                                  = 0x8000\n\tFFDLY                                = 0x8000\n\tFLUSHO                               = 0x2000\n\tFS_ENCRYPTION_MODE_ADIANTUM          = 0x9\n\tFS_ENCRYPTION_MODE_AES_128_CBC       = 0x5\n\tFS_ENCRYPTION_MODE_AES_128_CTS       = 0x6\n\tFS_ENCRYPTION_MODE_AES_256_CBC       = 0x3\n\tFS_ENCRYPTION_MODE_AES_256_CTS       = 0x4\n\tFS_ENCRYPTION_MODE_AES_256_GCM       = 0x2\n\tFS_ENCRYPTION_MODE_AES_256_XTS       = 0x1\n\tFS_ENCRYPTION_MODE_INVALID           = 0x0\n\tFS_ENCRYPTION_MODE_SPECK128_256_CTS  = 0x8\n\tFS_ENCRYPTION_MODE_SPECK128_256_XTS  = 0x7\n\tFS_IOC_GET_ENCRYPTION_POLICY         = 0x800c6615\n\tFS_IOC_GET_ENCRYPTION_PWSALT         = 0x80106614\n\tFS_IOC_SET_ENCRYPTION_POLICY         = 0x400c6613\n\tFS_KEY_DESCRIPTOR_SIZE               = 0x8\n\tFS_KEY_DESC_PREFIX                   = \"fscrypt:\"\n\tFS_KEY_DESC_PREFIX_SIZE              = 0x8\n\tFS_MAX_KEY_SIZE                      = 0x40\n\tFS_POLICY_FLAGS_PAD_16               = 0x2\n\tFS_POLICY_FLAGS_PAD_32               = 0x3\n\tFS_POLICY_FLAGS_PAD_4                = 0x0\n\tFS_POLICY_FLAGS_PAD_8                = 0x1\n\tFS_POLICY_FLAGS_PAD_MASK             = 0x3\n\tFS_POLICY_FLAGS_VALID                = 0x7\n\tFUTEXFS_SUPER_MAGIC                  = 0xbad1dea\n\tF_ADD_SEALS                          = 0x409\n\tF_DUPFD                              = 0x0\n\tF_DUPFD_CLOEXEC                      = 0x406\n\tF_EXLCK                              = 0x4\n\tF_GETFD                              = 0x1\n\tF_GETFL                              = 0x3\n\tF_GETLEASE                           = 0x401\n\tF_GETLK                              = 0x21\n\tF_GETLK64                            = 0x21\n\tF_GETOWN                             = 0x17\n\tF_GETOWN_EX                          = 0x10\n\tF_GETPIPE_SZ                         = 0x408\n\tF_GETSIG                             = 0xb\n\tF_GET_FILE_RW_HINT                   = 0x40d\n\tF_GET_RW_HINT                        = 0x40b\n\tF_GET_SEALS                          = 0x40a\n\tF_LOCK                               = 0x1\n\tF_NOTIFY                             = 0x402\n\tF_OFD_GETLK                          = 0x24\n\tF_OFD_SETLK                          = 0x25\n\tF_OFD_SETLKW                         = 0x26\n\tF_OK                                 = 0x0\n\tF_RDLCK                              = 0x0\n\tF_SEAL_GROW                          = 0x4\n\tF_SEAL_SEAL                          = 0x1\n\tF_SEAL_SHRINK                        = 0x2\n\tF_SEAL_WRITE                         = 0x8\n\tF_SETFD                              = 0x2\n\tF_SETFL                              = 0x4\n\tF_SETLEASE                           = 0x400\n\tF_SETLK                              = 0x22\n\tF_SETLK64                            = 0x22\n\tF_SETLKW                             = 0x23\n\tF_SETLKW64                           = 0x23\n\tF_SETOWN                             = 0x18\n\tF_SETOWN_EX                          = 0xf\n\tF_SETPIPE_SZ                         = 0x407\n\tF_SETSIG                             = 0xa\n\tF_SET_FILE_RW_HINT                   = 0x40e\n\tF_SET_RW_HINT                        = 0x40c\n\tF_SHLCK                              = 0x8\n\tF_TEST                               = 0x3\n\tF_TLOCK                              = 0x2\n\tF_ULOCK                              = 0x0\n\tF_UNLCK                              = 0x2\n\tF_WRLCK                              = 0x1\n\tGENL_ADMIN_PERM                      = 0x1\n\tGENL_CMD_CAP_DO                      = 0x2\n\tGENL_CMD_CAP_DUMP                    = 0x4\n\tGENL_CMD_CAP_HASPOL                  = 0x8\n\tGENL_HDRLEN                          = 0x4\n\tGENL_ID_CTRL                         = 0x10\n\tGENL_ID_PMCRAID                      = 0x12\n\tGENL_ID_VFS_DQUOT                    = 0x11\n\tGENL_MAX_ID                          = 0x3ff\n\tGENL_MIN_ID                          = 0x10\n\tGENL_NAMSIZ                          = 0x10\n\tGENL_START_ALLOC                     = 0x13\n\tGENL_UNS_ADMIN_PERM                  = 0x10\n\tGRND_NONBLOCK                        = 0x1\n\tGRND_RANDOM                          = 0x2\n\tHDIO_DRIVE_CMD                       = 0x31f\n\tHDIO_DRIVE_CMD_AEB                   = 0x31e\n\tHDIO_DRIVE_CMD_HDR_SIZE              = 0x4\n\tHDIO_DRIVE_HOB_HDR_SIZE              = 0x8\n\tHDIO_DRIVE_RESET                     = 0x31c\n\tHDIO_DRIVE_TASK                      = 0x31e\n\tHDIO_DRIVE_TASKFILE                  = 0x31d\n\tHDIO_DRIVE_TASK_HDR_SIZE             = 0x8\n\tHDIO_GETGEO                          = 0x301\n\tHDIO_GET_32BIT                       = 0x309\n\tHDIO_GET_ACOUSTIC                    = 0x30f\n\tHDIO_GET_ADDRESS                     = 0x310\n\tHDIO_GET_BUSSTATE                    = 0x31a\n\tHDIO_GET_DMA                         = 0x30b\n\tHDIO_GET_IDENTITY                    = 0x30d\n\tHDIO_GET_KEEPSETTINGS                = 0x308\n\tHDIO_GET_MULTCOUNT                   = 0x304\n\tHDIO_GET_NICE                        = 0x30c\n\tHDIO_GET_NOWERR                      = 0x30a\n\tHDIO_GET_QDMA                        = 0x305\n\tHDIO_GET_UNMASKINTR                  = 0x302\n\tHDIO_GET_WCACHE                      = 0x30e\n\tHDIO_OBSOLETE_IDENTITY               = 0x307\n\tHDIO_SCAN_HWIF                       = 0x328\n\tHDIO_SET_32BIT                       = 0x324\n\tHDIO_SET_ACOUSTIC                    = 0x32c\n\tHDIO_SET_ADDRESS                     = 0x32f\n\tHDIO_SET_BUSSTATE                    = 0x32d\n\tHDIO_SET_DMA                         = 0x326\n\tHDIO_SET_KEEPSETTINGS                = 0x323\n\tHDIO_SET_MULTCOUNT                   = 0x321\n\tHDIO_SET_NICE                        = 0x329\n\tHDIO_SET_NOWERR                      = 0x325\n\tHDIO_SET_PIO_MODE                    = 0x327\n\tHDIO_SET_QDMA                        = 0x32e\n\tHDIO_SET_UNMASKINTR                  = 0x322\n\tHDIO_SET_WCACHE                      = 0x32b\n\tHDIO_SET_XFER                        = 0x306\n\tHDIO_TRISTATE_HWIF                   = 0x31b\n\tHDIO_UNREGISTER_HWIF                 = 0x32a\n\tHOSTFS_SUPER_MAGIC                   = 0xc0ffee\n\tHPFS_SUPER_MAGIC                     = 0xf995e849\n\tHUGETLBFS_MAGIC                      = 0x958458f6\n\tHUPCL                                = 0x400\n\tIBSHIFT                              = 0x10\n\tICANON                               = 0x2\n\tICMPV6_FILTER                        = 0x1\n\tICRNL                                = 0x100\n\tIEXTEN                               = 0x100\n\tIFA_F_DADFAILED                      = 0x8\n\tIFA_F_DEPRECATED                     = 0x20\n\tIFA_F_HOMEADDRESS                    = 0x10\n\tIFA_F_MANAGETEMPADDR                 = 0x100\n\tIFA_F_MCAUTOJOIN                     = 0x400\n\tIFA_F_NODAD                          = 0x2\n\tIFA_F_NOPREFIXROUTE                  = 0x200\n\tIFA_F_OPTIMISTIC                     = 0x4\n\tIFA_F_PERMANENT                      = 0x80\n\tIFA_F_SECONDARY                      = 0x1\n\tIFA_F_STABLE_PRIVACY                 = 0x800\n\tIFA_F_TEMPORARY                      = 0x1\n\tIFA_F_TENTATIVE                      = 0x40\n\tIFA_MAX                              = 0xa\n\tIFF_ALLMULTI                         = 0x200\n\tIFF_ATTACH_QUEUE                     = 0x200\n\tIFF_AUTOMEDIA                        = 0x4000\n\tIFF_BROADCAST                        = 0x2\n\tIFF_DEBUG                            = 0x4\n\tIFF_DETACH_QUEUE                     = 0x400\n\tIFF_DORMANT                          = 0x20000\n\tIFF_DYNAMIC                          = 0x8000\n\tIFF_ECHO                             = 0x40000\n\tIFF_LOOPBACK                         = 0x8\n\tIFF_LOWER_UP                         = 0x10000\n\tIFF_MASTER                           = 0x400\n\tIFF_MULTICAST                        = 0x1000\n\tIFF_MULTI_QUEUE                      = 0x100\n\tIFF_NAPI                             = 0x10\n\tIFF_NAPI_FRAGS                       = 0x20\n\tIFF_NOARP                            = 0x80\n\tIFF_NOFILTER                         = 0x1000\n\tIFF_NOTRAILERS                       = 0x20\n\tIFF_NO_PI                            = 0x1000\n\tIFF_ONE_QUEUE                        = 0x2000\n\tIFF_PERSIST                          = 0x800\n\tIFF_POINTOPOINT                      = 0x10\n\tIFF_PORTSEL                          = 0x2000\n\tIFF_PROMISC                          = 0x100\n\tIFF_RUNNING                          = 0x40\n\tIFF_SLAVE                            = 0x800\n\tIFF_TAP                              = 0x2\n\tIFF_TUN                              = 0x1\n\tIFF_TUN_EXCL                         = 0x8000\n\tIFF_UP                               = 0x1\n\tIFF_VNET_HDR                         = 0x4000\n\tIFF_VOLATILE                         = 0x70c5a\n\tIFNAMSIZ                             = 0x10\n\tIGNBRK                               = 0x1\n\tIGNCR                                = 0x80\n\tIGNPAR                               = 0x4\n\tIMAXBEL                              = 0x2000\n\tINLCR                                = 0x40\n\tINPCK                                = 0x10\n\tIN_ACCESS                            = 0x1\n\tIN_ALL_EVENTS                        = 0xfff\n\tIN_ATTRIB                            = 0x4\n\tIN_CLASSA_HOST                       = 0xffffff\n\tIN_CLASSA_MAX                        = 0x80\n\tIN_CLASSA_NET                        = 0xff000000\n\tIN_CLASSA_NSHIFT                     = 0x18\n\tIN_CLASSB_HOST                       = 0xffff\n\tIN_CLASSB_MAX                        = 0x10000\n\tIN_CLASSB_NET                        = 0xffff0000\n\tIN_CLASSB_NSHIFT                     = 0x10\n\tIN_CLASSC_HOST                       = 0xff\n\tIN_CLASSC_NET                        = 0xffffff00\n\tIN_CLASSC_NSHIFT                     = 0x8\n\tIN_CLOEXEC                           = 0x80000\n\tIN_CLOSE                             = 0x18\n\tIN_CLOSE_NOWRITE                     = 0x10\n\tIN_CLOSE_WRITE                       = 0x8\n\tIN_CREATE                            = 0x100\n\tIN_DELETE                            = 0x200\n\tIN_DELETE_SELF                       = 0x400\n\tIN_DONT_FOLLOW                       = 0x2000000\n\tIN_EXCL_UNLINK                       = 0x4000000\n\tIN_IGNORED                           = 0x8000\n\tIN_ISDIR                             = 0x40000000\n\tIN_LOOPBACKNET                       = 0x7f\n\tIN_MASK_ADD                          = 0x20000000\n\tIN_MASK_CREATE                       = 0x10000000\n\tIN_MODIFY                            = 0x2\n\tIN_MOVE                              = 0xc0\n\tIN_MOVED_FROM                        = 0x40\n\tIN_MOVED_TO                          = 0x80\n\tIN_MOVE_SELF                         = 0x800\n\tIN_NONBLOCK                          = 0x80\n\tIN_ONESHOT                           = 0x80000000\n\tIN_ONLYDIR                           = 0x1000000\n\tIN_OPEN                              = 0x20\n\tIN_Q_OVERFLOW                        = 0x4000\n\tIN_UNMOUNT                           = 0x2000\n\tIOCTL_VM_SOCKETS_GET_LOCAL_CID       = 0x200007b9\n\tIPPROTO_AH                           = 0x33\n\tIPPROTO_BEETPH                       = 0x5e\n\tIPPROTO_COMP                         = 0x6c\n\tIPPROTO_DCCP                         = 0x21\n\tIPPROTO_DSTOPTS                      = 0x3c\n\tIPPROTO_EGP                          = 0x8\n\tIPPROTO_ENCAP                        = 0x62\n\tIPPROTO_ESP                          = 0x32\n\tIPPROTO_FRAGMENT                     = 0x2c\n\tIPPROTO_GRE                          = 0x2f\n\tIPPROTO_HOPOPTS                      = 0x0\n\tIPPROTO_ICMP                         = 0x1\n\tIPPROTO_ICMPV6                       = 0x3a\n\tIPPROTO_IDP                          = 0x16\n\tIPPROTO_IGMP                         = 0x2\n\tIPPROTO_IP                           = 0x0\n\tIPPROTO_IPIP                         = 0x4\n\tIPPROTO_IPV6                         = 0x29\n\tIPPROTO_MH                           = 0x87\n\tIPPROTO_MPLS                         = 0x89\n\tIPPROTO_MTP                          = 0x5c\n\tIPPROTO_NONE                         = 0x3b\n\tIPPROTO_PIM                          = 0x67\n\tIPPROTO_PUP                          = 0xc\n\tIPPROTO_RAW                          = 0xff\n\tIPPROTO_ROUTING                      = 0x2b\n\tIPPROTO_RSVP                         = 0x2e\n\tIPPROTO_SCTP                         = 0x84\n\tIPPROTO_TCP                          = 0x6\n\tIPPROTO_TP                           = 0x1d\n\tIPPROTO_UDP                          = 0x11\n\tIPPROTO_UDPLITE                      = 0x88\n\tIPV6_2292DSTOPTS                     = 0x4\n\tIPV6_2292HOPLIMIT                    = 0x8\n\tIPV6_2292HOPOPTS                     = 0x3\n\tIPV6_2292PKTINFO                     = 0x2\n\tIPV6_2292PKTOPTIONS                  = 0x6\n\tIPV6_2292RTHDR                       = 0x5\n\tIPV6_ADDRFORM                        = 0x1\n\tIPV6_ADDR_PREFERENCES                = 0x48\n\tIPV6_ADD_MEMBERSHIP                  = 0x14\n\tIPV6_AUTHHDR                         = 0xa\n\tIPV6_AUTOFLOWLABEL                   = 0x46\n\tIPV6_CHECKSUM                        = 0x7\n\tIPV6_DONTFRAG                        = 0x3e\n\tIPV6_DROP_MEMBERSHIP                 = 0x15\n\tIPV6_DSTOPTS                         = 0x3b\n\tIPV6_FREEBIND                        = 0x4e\n\tIPV6_HDRINCL                         = 0x24\n\tIPV6_HOPLIMIT                        = 0x34\n\tIPV6_HOPOPTS                         = 0x36\n\tIPV6_IPSEC_POLICY                    = 0x22\n\tIPV6_JOIN_ANYCAST                    = 0x1b\n\tIPV6_JOIN_GROUP                      = 0x14\n\tIPV6_LEAVE_ANYCAST                   = 0x1c\n\tIPV6_LEAVE_GROUP                     = 0x15\n\tIPV6_MINHOPCOUNT                     = 0x49\n\tIPV6_MTU                             = 0x18\n\tIPV6_MTU_DISCOVER                    = 0x17\n\tIPV6_MULTICAST_ALL                   = 0x1d\n\tIPV6_MULTICAST_HOPS                  = 0x12\n\tIPV6_MULTICAST_IF                    = 0x11\n\tIPV6_MULTICAST_LOOP                  = 0x13\n\tIPV6_NEXTHOP                         = 0x9\n\tIPV6_ORIGDSTADDR                     = 0x4a\n\tIPV6_PATHMTU                         = 0x3d\n\tIPV6_PKTINFO                         = 0x32\n\tIPV6_PMTUDISC_DO                     = 0x2\n\tIPV6_PMTUDISC_DONT                   = 0x0\n\tIPV6_PMTUDISC_INTERFACE              = 0x4\n\tIPV6_PMTUDISC_OMIT                   = 0x5\n\tIPV6_PMTUDISC_PROBE                  = 0x3\n\tIPV6_PMTUDISC_WANT                   = 0x1\n\tIPV6_RECVDSTOPTS                     = 0x3a\n\tIPV6_RECVERR                         = 0x19\n\tIPV6_RECVFRAGSIZE                    = 0x4d\n\tIPV6_RECVHOPLIMIT                    = 0x33\n\tIPV6_RECVHOPOPTS                     = 0x35\n\tIPV6_RECVORIGDSTADDR                 = 0x4a\n\tIPV6_RECVPATHMTU                     = 0x3c\n\tIPV6_RECVPKTINFO                     = 0x31\n\tIPV6_RECVRTHDR                       = 0x38\n\tIPV6_RECVTCLASS                      = 0x42\n\tIPV6_ROUTER_ALERT                    = 0x16\n\tIPV6_RTHDR                           = 0x39\n\tIPV6_RTHDRDSTOPTS                    = 0x37\n\tIPV6_RTHDR_LOOSE                     = 0x0\n\tIPV6_RTHDR_STRICT                    = 0x1\n\tIPV6_RTHDR_TYPE_0                    = 0x0\n\tIPV6_RXDSTOPTS                       = 0x3b\n\tIPV6_RXHOPOPTS                       = 0x36\n\tIPV6_TCLASS                          = 0x43\n\tIPV6_TRANSPARENT                     = 0x4b\n\tIPV6_UNICAST_HOPS                    = 0x10\n\tIPV6_UNICAST_IF                      = 0x4c\n\tIPV6_V6ONLY                          = 0x1a\n\tIPV6_XFRM_POLICY                     = 0x23\n\tIP_ADD_MEMBERSHIP                    = 0x23\n\tIP_ADD_SOURCE_MEMBERSHIP             = 0x27\n\tIP_BIND_ADDRESS_NO_PORT              = 0x18\n\tIP_BLOCK_SOURCE                      = 0x26\n\tIP_CHECKSUM                          = 0x17\n\tIP_DEFAULT_MULTICAST_LOOP            = 0x1\n\tIP_DEFAULT_MULTICAST_TTL             = 0x1\n\tIP_DF                                = 0x4000\n\tIP_DROP_MEMBERSHIP                   = 0x24\n\tIP_DROP_SOURCE_MEMBERSHIP            = 0x28\n\tIP_FREEBIND                          = 0xf\n\tIP_HDRINCL                           = 0x3\n\tIP_IPSEC_POLICY                      = 0x10\n\tIP_MAXPACKET                         = 0xffff\n\tIP_MAX_MEMBERSHIPS                   = 0x14\n\tIP_MF                                = 0x2000\n\tIP_MINTTL                            = 0x15\n\tIP_MSFILTER                          = 0x29\n\tIP_MSS                               = 0x240\n\tIP_MTU                               = 0xe\n\tIP_MTU_DISCOVER                      = 0xa\n\tIP_MULTICAST_ALL                     = 0x31\n\tIP_MULTICAST_IF                      = 0x20\n\tIP_MULTICAST_LOOP                    = 0x22\n\tIP_MULTICAST_TTL                     = 0x21\n\tIP_NODEFRAG                          = 0x16\n\tIP_OFFMASK                           = 0x1fff\n\tIP_OPTIONS                           = 0x4\n\tIP_ORIGDSTADDR                       = 0x14\n\tIP_PASSSEC                           = 0x12\n\tIP_PKTINFO                           = 0x8\n\tIP_PKTOPTIONS                        = 0x9\n\tIP_PMTUDISC                          = 0xa\n\tIP_PMTUDISC_DO                       = 0x2\n\tIP_PMTUDISC_DONT                     = 0x0\n\tIP_PMTUDISC_INTERFACE                = 0x4\n\tIP_PMTUDISC_OMIT                     = 0x5\n\tIP_PMTUDISC_PROBE                    = 0x3\n\tIP_PMTUDISC_WANT                     = 0x1\n\tIP_RECVERR                           = 0xb\n\tIP_RECVFRAGSIZE                      = 0x19\n\tIP_RECVOPTS                          = 0x6\n\tIP_RECVORIGDSTADDR                   = 0x14\n\tIP_RECVRETOPTS                       = 0x7\n\tIP_RECVTOS                           = 0xd\n\tIP_RECVTTL                           = 0xc\n\tIP_RETOPTS                           = 0x7\n\tIP_RF                                = 0x8000\n\tIP_ROUTER_ALERT                      = 0x5\n\tIP_TOS                               = 0x1\n\tIP_TRANSPARENT                       = 0x13\n\tIP_TTL                               = 0x2\n\tIP_UNBLOCK_SOURCE                    = 0x25\n\tIP_UNICAST_IF                        = 0x32\n\tIP_XFRM_POLICY                       = 0x11\n\tISIG                                 = 0x1\n\tISOFS_SUPER_MAGIC                    = 0x9660\n\tISTRIP                               = 0x20\n\tIUCLC                                = 0x200\n\tIUTF8                                = 0x4000\n\tIXANY                                = 0x800\n\tIXOFF                                = 0x1000\n\tIXON                                 = 0x400\n\tJFFS2_SUPER_MAGIC                    = 0x72b6\n\tKEXEC_ARCH_386                       = 0x30000\n\tKEXEC_ARCH_68K                       = 0x40000\n\tKEXEC_ARCH_AARCH64                   = 0xb70000\n\tKEXEC_ARCH_ARM                       = 0x280000\n\tKEXEC_ARCH_DEFAULT                   = 0x0\n\tKEXEC_ARCH_IA_64                     = 0x320000\n\tKEXEC_ARCH_MASK                      = 0xffff0000\n\tKEXEC_ARCH_MIPS                      = 0x80000\n\tKEXEC_ARCH_MIPS_LE                   = 0xa0000\n\tKEXEC_ARCH_PPC                       = 0x140000\n\tKEXEC_ARCH_PPC64                     = 0x150000\n\tKEXEC_ARCH_S390                      = 0x160000\n\tKEXEC_ARCH_SH                        = 0x2a0000\n\tKEXEC_ARCH_X86_64                    = 0x3e0000\n\tKEXEC_FILE_NO_INITRAMFS              = 0x4\n\tKEXEC_FILE_ON_CRASH                  = 0x2\n\tKEXEC_FILE_UNLOAD                    = 0x1\n\tKEXEC_ON_CRASH                       = 0x1\n\tKEXEC_PRESERVE_CONTEXT               = 0x2\n\tKEXEC_SEGMENT_MAX                    = 0x10\n\tKEYCTL_ASSUME_AUTHORITY              = 0x10\n\tKEYCTL_CHOWN                         = 0x4\n\tKEYCTL_CLEAR                         = 0x7\n\tKEYCTL_DESCRIBE                      = 0x6\n\tKEYCTL_DH_COMPUTE                    = 0x17\n\tKEYCTL_GET_KEYRING_ID                = 0x0\n\tKEYCTL_GET_PERSISTENT                = 0x16\n\tKEYCTL_GET_SECURITY                  = 0x11\n\tKEYCTL_INSTANTIATE                   = 0xc\n\tKEYCTL_INSTANTIATE_IOV               = 0x14\n\tKEYCTL_INVALIDATE                    = 0x15\n\tKEYCTL_JOIN_SESSION_KEYRING          = 0x1\n\tKEYCTL_LINK                          = 0x8\n\tKEYCTL_NEGATE                        = 0xd\n\tKEYCTL_PKEY_DECRYPT                  = 0x1a\n\tKEYCTL_PKEY_ENCRYPT                  = 0x19\n\tKEYCTL_PKEY_QUERY                    = 0x18\n\tKEYCTL_PKEY_SIGN                     = 0x1b\n\tKEYCTL_PKEY_VERIFY                   = 0x1c\n\tKEYCTL_READ                          = 0xb\n\tKEYCTL_REJECT                        = 0x13\n\tKEYCTL_RESTRICT_KEYRING              = 0x1d\n\tKEYCTL_REVOKE                        = 0x3\n\tKEYCTL_SEARCH                        = 0xa\n\tKEYCTL_SESSION_TO_PARENT             = 0x12\n\tKEYCTL_SETPERM                       = 0x5\n\tKEYCTL_SET_REQKEY_KEYRING            = 0xe\n\tKEYCTL_SET_TIMEOUT                   = 0xf\n\tKEYCTL_SUPPORTS_DECRYPT              = 0x2\n\tKEYCTL_SUPPORTS_ENCRYPT              = 0x1\n\tKEYCTL_SUPPORTS_SIGN                 = 0x4\n\tKEYCTL_SUPPORTS_VERIFY               = 0x8\n\tKEYCTL_UNLINK                        = 0x9\n\tKEYCTL_UPDATE                        = 0x2\n\tKEY_REQKEY_DEFL_DEFAULT              = 0x0\n\tKEY_REQKEY_DEFL_GROUP_KEYRING        = 0x6\n\tKEY_REQKEY_DEFL_NO_CHANGE            = -0x1\n\tKEY_REQKEY_DEFL_PROCESS_KEYRING      = 0x2\n\tKEY_REQKEY_DEFL_REQUESTOR_KEYRING    = 0x7\n\tKEY_REQKEY_DEFL_SESSION_KEYRING      = 0x3\n\tKEY_REQKEY_DEFL_THREAD_KEYRING       = 0x1\n\tKEY_REQKEY_DEFL_USER_KEYRING         = 0x4\n\tKEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5\n\tKEY_SPEC_GROUP_KEYRING               = -0x6\n\tKEY_SPEC_PROCESS_KEYRING             = -0x2\n\tKEY_SPEC_REQKEY_AUTH_KEY             = -0x7\n\tKEY_SPEC_REQUESTOR_KEYRING           = -0x8\n\tKEY_SPEC_SESSION_KEYRING             = -0x3\n\tKEY_SPEC_THREAD_KEYRING              = -0x1\n\tKEY_SPEC_USER_KEYRING                = -0x4\n\tKEY_SPEC_USER_SESSION_KEYRING        = -0x5\n\tLINUX_REBOOT_CMD_CAD_OFF             = 0x0\n\tLINUX_REBOOT_CMD_CAD_ON              = 0x89abcdef\n\tLINUX_REBOOT_CMD_HALT                = 0xcdef0123\n\tLINUX_REBOOT_CMD_KEXEC               = 0x45584543\n\tLINUX_REBOOT_CMD_POWER_OFF           = 0x4321fedc\n\tLINUX_REBOOT_CMD_RESTART             = 0x1234567\n\tLINUX_REBOOT_CMD_RESTART2            = 0xa1b2c3d4\n\tLINUX_REBOOT_CMD_SW_SUSPEND          = 0xd000fce2\n\tLINUX_REBOOT_MAGIC1                  = 0xfee1dead\n\tLINUX_REBOOT_MAGIC2                  = 0x28121969\n\tLOCK_EX                              = 0x2\n\tLOCK_NB                              = 0x4\n\tLOCK_SH                              = 0x1\n\tLOCK_UN                              = 0x8\n\tMADV_DODUMP                          = 0x11\n\tMADV_DOFORK                          = 0xb\n\tMADV_DONTDUMP                        = 0x10\n\tMADV_DONTFORK                        = 0xa\n\tMADV_DONTNEED                        = 0x4\n\tMADV_FREE                            = 0x8\n\tMADV_HUGEPAGE                        = 0xe\n\tMADV_HWPOISON                        = 0x64\n\tMADV_KEEPONFORK                      = 0x13\n\tMADV_MERGEABLE                       = 0xc\n\tMADV_NOHUGEPAGE                      = 0xf\n\tMADV_NORMAL                          = 0x0\n\tMADV_RANDOM                          = 0x1\n\tMADV_REMOVE                          = 0x9\n\tMADV_SEQUENTIAL                      = 0x2\n\tMADV_UNMERGEABLE                     = 0xd\n\tMADV_WILLNEED                        = 0x3\n\tMADV_WIPEONFORK                      = 0x12\n\tMAP_ANON                             = 0x800\n\tMAP_ANONYMOUS                        = 0x800\n\tMAP_DENYWRITE                        = 0x2000\n\tMAP_EXECUTABLE                       = 0x4000\n\tMAP_FILE                             = 0x0\n\tMAP_FIXED                            = 0x10\n\tMAP_FIXED_NOREPLACE                  = 0x100000\n\tMAP_GROWSDOWN                        = 0x1000\n\tMAP_HUGETLB                          = 0x80000\n\tMAP_HUGE_MASK                        = 0x3f\n\tMAP_HUGE_SHIFT                       = 0x1a\n\tMAP_LOCKED                           = 0x8000\n\tMAP_NONBLOCK                         = 0x20000\n\tMAP_NORESERVE                        = 0x400\n\tMAP_POPULATE                         = 0x10000\n\tMAP_PRIVATE                          = 0x2\n\tMAP_RENAME                           = 0x800\n\tMAP_SHARED                           = 0x1\n\tMAP_SHARED_VALIDATE                  = 0x3\n\tMAP_STACK                            = 0x40000\n\tMAP_TYPE                             = 0xf\n\tMCAST_BLOCK_SOURCE                   = 0x2b\n\tMCAST_EXCLUDE                        = 0x0\n\tMCAST_INCLUDE                        = 0x1\n\tMCAST_JOIN_GROUP                     = 0x2a\n\tMCAST_JOIN_SOURCE_GROUP              = 0x2e\n\tMCAST_LEAVE_GROUP                    = 0x2d\n\tMCAST_LEAVE_SOURCE_GROUP             = 0x2f\n\tMCAST_MSFILTER                       = 0x30\n\tMCAST_UNBLOCK_SOURCE                 = 0x2c\n\tMCL_CURRENT                          = 0x1\n\tMCL_FUTURE                           = 0x2\n\tMCL_ONFAULT                          = 0x4\n\tMFD_ALLOW_SEALING                    = 0x2\n\tMFD_CLOEXEC                          = 0x1\n\tMFD_HUGETLB                          = 0x4\n\tMFD_HUGE_16GB                        = -0x78000000\n\tMFD_HUGE_16MB                        = 0x60000000\n\tMFD_HUGE_1GB                         = 0x78000000\n\tMFD_HUGE_1MB                         = 0x50000000\n\tMFD_HUGE_256MB                       = 0x70000000\n\tMFD_HUGE_2GB                         = 0x7c000000\n\tMFD_HUGE_2MB                         = 0x54000000\n\tMFD_HUGE_32MB                        = 0x64000000\n\tMFD_HUGE_512KB                       = 0x4c000000\n\tMFD_HUGE_512MB                       = 0x74000000\n\tMFD_HUGE_64KB                        = 0x40000000\n\tMFD_HUGE_8MB                         = 0x5c000000\n\tMFD_HUGE_MASK                        = 0x3f\n\tMFD_HUGE_SHIFT                       = 0x1a\n\tMINIX2_SUPER_MAGIC                   = 0x2468\n\tMINIX2_SUPER_MAGIC2                  = 0x2478\n\tMINIX3_SUPER_MAGIC                   = 0x4d5a\n\tMINIX_SUPER_MAGIC                    = 0x137f\n\tMINIX_SUPER_MAGIC2                   = 0x138f\n\tMNT_DETACH                           = 0x2\n\tMNT_EXPIRE                           = 0x4\n\tMNT_FORCE                            = 0x1\n\tMODULE_INIT_IGNORE_MODVERSIONS       = 0x1\n\tMODULE_INIT_IGNORE_VERMAGIC          = 0x2\n\tMSDOS_SUPER_MAGIC                    = 0x4d44\n\tMSG_BATCH                            = 0x40000\n\tMSG_CMSG_CLOEXEC                     = 0x40000000\n\tMSG_CONFIRM                          = 0x800\n\tMSG_CTRUNC                           = 0x8\n\tMSG_DONTROUTE                        = 0x4\n\tMSG_DONTWAIT                         = 0x40\n\tMSG_EOR                              = 0x80\n\tMSG_ERRQUEUE                         = 0x2000\n\tMSG_FASTOPEN                         = 0x20000000\n\tMSG_FIN                              = 0x200\n\tMSG_MORE                             = 0x8000\n\tMSG_NOSIGNAL                         = 0x4000\n\tMSG_OOB                              = 0x1\n\tMSG_PEEK                             = 0x2\n\tMSG_PROXY                            = 0x10\n\tMSG_RST                              = 0x1000\n\tMSG_SYN                              = 0x400\n\tMSG_TRUNC                            = 0x20\n\tMSG_TRYHARD                          = 0x4\n\tMSG_WAITALL                          = 0x100\n\tMSG_WAITFORONE                       = 0x10000\n\tMSG_ZEROCOPY                         = 0x4000000\n\tMS_ACTIVE                            = 0x40000000\n\tMS_ASYNC                             = 0x1\n\tMS_BIND                              = 0x1000\n\tMS_BORN                              = 0x20000000\n\tMS_DIRSYNC                           = 0x80\n\tMS_INVALIDATE                        = 0x2\n\tMS_I_VERSION                         = 0x800000\n\tMS_KERNMOUNT                         = 0x400000\n\tMS_LAZYTIME                          = 0x2000000\n\tMS_MANDLOCK                          = 0x40\n\tMS_MGC_MSK                           = 0xffff0000\n\tMS_MGC_VAL                           = 0xc0ed0000\n\tMS_MOVE                              = 0x2000\n\tMS_NOATIME                           = 0x400\n\tMS_NODEV                             = 0x4\n\tMS_NODIRATIME                        = 0x800\n\tMS_NOEXEC                            = 0x8\n\tMS_NOREMOTELOCK                      = 0x8000000\n\tMS_NOSEC                             = 0x10000000\n\tMS_NOSUID                            = 0x2\n\tMS_NOUSER                            = -0x80000000\n\tMS_POSIXACL                          = 0x10000\n\tMS_PRIVATE                           = 0x40000\n\tMS_RDONLY                            = 0x1\n\tMS_REC                               = 0x4000\n\tMS_RELATIME                          = 0x200000\n\tMS_REMOUNT                           = 0x20\n\tMS_RMT_MASK                          = 0x2800051\n\tMS_SHARED                            = 0x100000\n\tMS_SILENT                            = 0x8000\n\tMS_SLAVE                             = 0x80000\n\tMS_STRICTATIME                       = 0x1000000\n\tMS_SUBMOUNT                          = 0x4000000\n\tMS_SYNC                              = 0x4\n\tMS_SYNCHRONOUS                       = 0x10\n\tMS_UNBINDABLE                        = 0x20000\n\tMS_VERBOSE                           = 0x8000\n\tMTD_INODE_FS_MAGIC                   = 0x11307854\n\tNAME_MAX                             = 0xff\n\tNCP_SUPER_MAGIC                      = 0x564c\n\tNETLINK_ADD_MEMBERSHIP               = 0x1\n\tNETLINK_AUDIT                        = 0x9\n\tNETLINK_BROADCAST_ERROR              = 0x4\n\tNETLINK_CAP_ACK                      = 0xa\n\tNETLINK_CONNECTOR                    = 0xb\n\tNETLINK_CRYPTO                       = 0x15\n\tNETLINK_DNRTMSG                      = 0xe\n\tNETLINK_DROP_MEMBERSHIP              = 0x2\n\tNETLINK_ECRYPTFS                     = 0x13\n\tNETLINK_EXT_ACK                      = 0xb\n\tNETLINK_FIB_LOOKUP                   = 0xa\n\tNETLINK_FIREWALL                     = 0x3\n\tNETLINK_GENERIC                      = 0x10\n\tNETLINK_GET_STRICT_CHK               = 0xc\n\tNETLINK_INET_DIAG                    = 0x4\n\tNETLINK_IP6_FW                       = 0xd\n\tNETLINK_ISCSI                        = 0x8\n\tNETLINK_KOBJECT_UEVENT               = 0xf\n\tNETLINK_LISTEN_ALL_NSID              = 0x8\n\tNETLINK_LIST_MEMBERSHIPS             = 0x9\n\tNETLINK_NETFILTER                    = 0xc\n\tNETLINK_NFLOG                        = 0x5\n\tNETLINK_NO_ENOBUFS                   = 0x5\n\tNETLINK_PKTINFO                      = 0x3\n\tNETLINK_RDMA                         = 0x14\n\tNETLINK_ROUTE                        = 0x0\n\tNETLINK_RX_RING                      = 0x6\n\tNETLINK_SCSITRANSPORT                = 0x12\n\tNETLINK_SELINUX                      = 0x7\n\tNETLINK_SMC                          = 0x16\n\tNETLINK_SOCK_DIAG                    = 0x4\n\tNETLINK_TX_RING                      = 0x7\n\tNETLINK_UNUSED                       = 0x1\n\tNETLINK_USERSOCK                     = 0x2\n\tNETLINK_XFRM                         = 0x6\n\tNETNSA_MAX                           = 0x5\n\tNETNSA_NSID_NOT_ASSIGNED             = -0x1\n\tNFNETLINK_V0                         = 0x0\n\tNFNLGRP_ACCT_QUOTA                   = 0x8\n\tNFNLGRP_CONNTRACK_DESTROY            = 0x3\n\tNFNLGRP_CONNTRACK_EXP_DESTROY        = 0x6\n\tNFNLGRP_CONNTRACK_EXP_NEW            = 0x4\n\tNFNLGRP_CONNTRACK_EXP_UPDATE         = 0x5\n\tNFNLGRP_CONNTRACK_NEW                = 0x1\n\tNFNLGRP_CONNTRACK_UPDATE             = 0x2\n\tNFNLGRP_MAX                          = 0x9\n\tNFNLGRP_NFTABLES                     = 0x7\n\tNFNLGRP_NFTRACE                      = 0x9\n\tNFNLGRP_NONE                         = 0x0\n\tNFNL_BATCH_MAX                       = 0x1\n\tNFNL_MSG_BATCH_BEGIN                 = 0x10\n\tNFNL_MSG_BATCH_END                   = 0x11\n\tNFNL_NFA_NEST                        = 0x8000\n\tNFNL_SUBSYS_ACCT                     = 0x7\n\tNFNL_SUBSYS_COUNT                    = 0xc\n\tNFNL_SUBSYS_CTHELPER                 = 0x9\n\tNFNL_SUBSYS_CTNETLINK                = 0x1\n\tNFNL_SUBSYS_CTNETLINK_EXP            = 0x2\n\tNFNL_SUBSYS_CTNETLINK_TIMEOUT        = 0x8\n\tNFNL_SUBSYS_IPSET                    = 0x6\n\tNFNL_SUBSYS_NFTABLES                 = 0xa\n\tNFNL_SUBSYS_NFT_COMPAT               = 0xb\n\tNFNL_SUBSYS_NONE                     = 0x0\n\tNFNL_SUBSYS_OSF                      = 0x5\n\tNFNL_SUBSYS_QUEUE                    = 0x3\n\tNFNL_SUBSYS_ULOG                     = 0x4\n\tNFS_SUPER_MAGIC                      = 0x6969\n\tNILFS_SUPER_MAGIC                    = 0x3434\n\tNL0                                  = 0x0\n\tNL1                                  = 0x100\n\tNLA_ALIGNTO                          = 0x4\n\tNLA_F_NESTED                         = 0x8000\n\tNLA_F_NET_BYTEORDER                  = 0x4000\n\tNLA_HDRLEN                           = 0x4\n\tNLDLY                                = 0x100\n\tNLMSG_ALIGNTO                        = 0x4\n\tNLMSG_DONE                           = 0x3\n\tNLMSG_ERROR                          = 0x2\n\tNLMSG_HDRLEN                         = 0x10\n\tNLMSG_MIN_TYPE                       = 0x10\n\tNLMSG_NOOP                           = 0x1\n\tNLMSG_OVERRUN                        = 0x4\n\tNLM_F_ACK                            = 0x4\n\tNLM_F_ACK_TLVS                       = 0x200\n\tNLM_F_APPEND                         = 0x800\n\tNLM_F_ATOMIC                         = 0x400\n\tNLM_F_CAPPED                         = 0x100\n\tNLM_F_CREATE                         = 0x400\n\tNLM_F_DUMP                           = 0x300\n\tNLM_F_DUMP_FILTERED                  = 0x20\n\tNLM_F_DUMP_INTR                      = 0x10\n\tNLM_F_ECHO                           = 0x8\n\tNLM_F_EXCL                           = 0x200\n\tNLM_F_MATCH                          = 0x200\n\tNLM_F_MULTI                          = 0x2\n\tNLM_F_NONREC                         = 0x100\n\tNLM_F_REPLACE                        = 0x100\n\tNLM_F_REQUEST                        = 0x1\n\tNLM_F_ROOT                           = 0x100\n\tNOFLSH                               = 0x80\n\tNSFS_MAGIC                           = 0x6e736673\n\tOCFS2_SUPER_MAGIC                    = 0x7461636f\n\tOCRNL                                = 0x8\n\tOFDEL                                = 0x80\n\tOFILL                                = 0x40\n\tOLCUC                                = 0x2\n\tONLCR                                = 0x4\n\tONLRET                               = 0x20\n\tONOCR                                = 0x10\n\tOPENPROM_SUPER_MAGIC                 = 0x9fa1\n\tOPOST                                = 0x1\n\tOVERLAYFS_SUPER_MAGIC                = 0x794c7630\n\tO_ACCMODE                            = 0x3\n\tO_APPEND                             = 0x8\n\tO_ASYNC                              = 0x1000\n\tO_CLOEXEC                            = 0x80000\n\tO_CREAT                              = 0x100\n\tO_DIRECT                             = 0x8000\n\tO_DIRECTORY                          = 0x10000\n\tO_DSYNC                              = 0x10\n\tO_EXCL                               = 0x400\n\tO_FSYNC                              = 0x4010\n\tO_LARGEFILE                          = 0x2000\n\tO_NDELAY                             = 0x80\n\tO_NOATIME                            = 0x40000\n\tO_NOCTTY                             = 0x800\n\tO_NOFOLLOW                           = 0x20000\n\tO_NONBLOCK                           = 0x80\n\tO_PATH                               = 0x200000\n\tO_RDONLY                             = 0x0\n\tO_RDWR                               = 0x2\n\tO_RSYNC                              = 0x4010\n\tO_SYNC                               = 0x4010\n\tO_TMPFILE                            = 0x410000\n\tO_TRUNC                              = 0x200\n\tO_WRONLY                             = 0x1\n\tPACKET_ADD_MEMBERSHIP                = 0x1\n\tPACKET_AUXDATA                       = 0x8\n\tPACKET_BROADCAST                     = 0x1\n\tPACKET_COPY_THRESH                   = 0x7\n\tPACKET_DROP_MEMBERSHIP               = 0x2\n\tPACKET_FANOUT                        = 0x12\n\tPACKET_FANOUT_CBPF                   = 0x6\n\tPACKET_FANOUT_CPU                    = 0x2\n\tPACKET_FANOUT_DATA                   = 0x16\n\tPACKET_FANOUT_EBPF                   = 0x7\n\tPACKET_FANOUT_FLAG_DEFRAG            = 0x8000\n\tPACKET_FANOUT_FLAG_ROLLOVER          = 0x1000\n\tPACKET_FANOUT_FLAG_UNIQUEID          = 0x2000\n\tPACKET_FANOUT_HASH                   = 0x0\n\tPACKET_FANOUT_LB                     = 0x1\n\tPACKET_FANOUT_QM                     = 0x5\n\tPACKET_FANOUT_RND                    = 0x4\n\tPACKET_FANOUT_ROLLOVER               = 0x3\n\tPACKET_FASTROUTE                     = 0x6\n\tPACKET_HDRLEN                        = 0xb\n\tPACKET_HOST                          = 0x0\n\tPACKET_IGNORE_OUTGOING               = 0x17\n\tPACKET_KERNEL                        = 0x7\n\tPACKET_LOOPBACK                      = 0x5\n\tPACKET_LOSS                          = 0xe\n\tPACKET_MR_ALLMULTI                   = 0x2\n\tPACKET_MR_MULTICAST                  = 0x0\n\tPACKET_MR_PROMISC                    = 0x1\n\tPACKET_MR_UNICAST                    = 0x3\n\tPACKET_MULTICAST                     = 0x2\n\tPACKET_ORIGDEV                       = 0x9\n\tPACKET_OTHERHOST                     = 0x3\n\tPACKET_OUTGOING                      = 0x4\n\tPACKET_QDISC_BYPASS                  = 0x14\n\tPACKET_RECV_OUTPUT                   = 0x3\n\tPACKET_RESERVE                       = 0xc\n\tPACKET_ROLLOVER_STATS                = 0x15\n\tPACKET_RX_RING                       = 0x5\n\tPACKET_STATISTICS                    = 0x6\n\tPACKET_TIMESTAMP                     = 0x11\n\tPACKET_TX_HAS_OFF                    = 0x13\n\tPACKET_TX_RING                       = 0xd\n\tPACKET_TX_TIMESTAMP                  = 0x10\n\tPACKET_USER                          = 0x6\n\tPACKET_VERSION                       = 0xa\n\tPACKET_VNET_HDR                      = 0xf\n\tPARENB                               = 0x100\n\tPARITY_CRC16_PR0                     = 0x2\n\tPARITY_CRC16_PR0_CCITT               = 0x4\n\tPARITY_CRC16_PR1                     = 0x3\n\tPARITY_CRC16_PR1_CCITT               = 0x5\n\tPARITY_CRC32_PR0_CCITT               = 0x6\n\tPARITY_CRC32_PR1_CCITT               = 0x7\n\tPARITY_DEFAULT                       = 0x0\n\tPARITY_NONE                          = 0x1\n\tPARMRK                               = 0x8\n\tPARODD                               = 0x200\n\tPENDIN                               = 0x4000\n\tPERF_EVENT_IOC_DISABLE               = 0x20002401\n\tPERF_EVENT_IOC_ENABLE                = 0x20002400\n\tPERF_EVENT_IOC_ID                    = 0x40042407\n\tPERF_EVENT_IOC_MODIFY_ATTRIBUTES     = 0x8004240b\n\tPERF_EVENT_IOC_PAUSE_OUTPUT          = 0x80042409\n\tPERF_EVENT_IOC_PERIOD                = 0x80082404\n\tPERF_EVENT_IOC_QUERY_BPF             = 0xc004240a\n\tPERF_EVENT_IOC_REFRESH               = 0x20002402\n\tPERF_EVENT_IOC_RESET                 = 0x20002403\n\tPERF_EVENT_IOC_SET_BPF               = 0x80042408\n\tPERF_EVENT_IOC_SET_FILTER            = 0x80042406\n\tPERF_EVENT_IOC_SET_OUTPUT            = 0x20002405\n\tPIPEFS_MAGIC                         = 0x50495045\n\tPPPIOCATTACH                         = 0x8004743d\n\tPPPIOCATTCHAN                        = 0x80047438\n\tPPPIOCCONNECT                        = 0x8004743a\n\tPPPIOCDETACH                         = 0x8004743c\n\tPPPIOCDISCONN                        = 0x20007439\n\tPPPIOCGASYNCMAP                      = 0x40047458\n\tPPPIOCGCHAN                          = 0x40047437\n\tPPPIOCGDEBUG                         = 0x40047441\n\tPPPIOCGFLAGS                         = 0x4004745a\n\tPPPIOCGIDLE                          = 0x4008743f\n\tPPPIOCGL2TPSTATS                     = 0x40487436\n\tPPPIOCGMRU                           = 0x40047453\n\tPPPIOCGNPMODE                        = 0xc008744c\n\tPPPIOCGRASYNCMAP                     = 0x40047455\n\tPPPIOCGUNIT                          = 0x40047456\n\tPPPIOCGXASYNCMAP                     = 0x40207450\n\tPPPIOCNEWUNIT                        = 0xc004743e\n\tPPPIOCSACTIVE                        = 0x80087446\n\tPPPIOCSASYNCMAP                      = 0x80047457\n\tPPPIOCSCOMPRESS                      = 0x800c744d\n\tPPPIOCSDEBUG                         = 0x80047440\n\tPPPIOCSFLAGS                         = 0x80047459\n\tPPPIOCSMAXCID                        = 0x80047451\n\tPPPIOCSMRRU                          = 0x8004743b\n\tPPPIOCSMRU                           = 0x80047452\n\tPPPIOCSNPMODE                        = 0x8008744b\n\tPPPIOCSPASS                          = 0x80087447\n\tPPPIOCSRASYNCMAP                     = 0x80047454\n\tPPPIOCSXASYNCMAP                     = 0x8020744f\n\tPPPIOCXFERUNIT                       = 0x2000744e\n\tPRIO_PGRP                            = 0x1\n\tPRIO_PROCESS                         = 0x0\n\tPRIO_USER                            = 0x2\n\tPROC_SUPER_MAGIC                     = 0x9fa0\n\tPROT_EXEC                            = 0x4\n\tPROT_GROWSDOWN                       = 0x1000000\n\tPROT_GROWSUP                         = 0x2000000\n\tPROT_NONE                            = 0x0\n\tPROT_READ                            = 0x1\n\tPROT_WRITE                           = 0x2\n\tPR_CAPBSET_DROP                      = 0x18\n\tPR_CAPBSET_READ                      = 0x17\n\tPR_CAP_AMBIENT                       = 0x2f\n\tPR_CAP_AMBIENT_CLEAR_ALL             = 0x4\n\tPR_CAP_AMBIENT_IS_SET                = 0x1\n\tPR_CAP_AMBIENT_LOWER                 = 0x3\n\tPR_CAP_AMBIENT_RAISE                 = 0x2\n\tPR_ENDIAN_BIG                        = 0x0\n\tPR_ENDIAN_LITTLE                     = 0x1\n\tPR_ENDIAN_PPC_LITTLE                 = 0x2\n\tPR_FPEMU_NOPRINT                     = 0x1\n\tPR_FPEMU_SIGFPE                      = 0x2\n\tPR_FP_EXC_ASYNC                      = 0x2\n\tPR_FP_EXC_DISABLED                   = 0x0\n\tPR_FP_EXC_DIV                        = 0x10000\n\tPR_FP_EXC_INV                        = 0x100000\n\tPR_FP_EXC_NONRECOV                   = 0x1\n\tPR_FP_EXC_OVF                        = 0x20000\n\tPR_FP_EXC_PRECISE                    = 0x3\n\tPR_FP_EXC_RES                        = 0x80000\n\tPR_FP_EXC_SW_ENABLE                  = 0x80\n\tPR_FP_EXC_UND                        = 0x40000\n\tPR_FP_MODE_FR                        = 0x1\n\tPR_FP_MODE_FRE                       = 0x2\n\tPR_GET_CHILD_SUBREAPER               = 0x25\n\tPR_GET_DUMPABLE                      = 0x3\n\tPR_GET_ENDIAN                        = 0x13\n\tPR_GET_FPEMU                         = 0x9\n\tPR_GET_FPEXC                         = 0xb\n\tPR_GET_FP_MODE                       = 0x2e\n\tPR_GET_KEEPCAPS                      = 0x7\n\tPR_GET_NAME                          = 0x10\n\tPR_GET_NO_NEW_PRIVS                  = 0x27\n\tPR_GET_PDEATHSIG                     = 0x2\n\tPR_GET_SECCOMP                       = 0x15\n\tPR_GET_SECUREBITS                    = 0x1b\n\tPR_GET_SPECULATION_CTRL              = 0x34\n\tPR_GET_THP_DISABLE                   = 0x2a\n\tPR_GET_TID_ADDRESS                   = 0x28\n\tPR_GET_TIMERSLACK                    = 0x1e\n\tPR_GET_TIMING                        = 0xd\n\tPR_GET_TSC                           = 0x19\n\tPR_GET_UNALIGN                       = 0x5\n\tPR_MCE_KILL                          = 0x21\n\tPR_MCE_KILL_CLEAR                    = 0x0\n\tPR_MCE_KILL_DEFAULT                  = 0x2\n\tPR_MCE_KILL_EARLY                    = 0x1\n\tPR_MCE_KILL_GET                      = 0x22\n\tPR_MCE_KILL_LATE                     = 0x0\n\tPR_MCE_KILL_SET                      = 0x1\n\tPR_MPX_DISABLE_MANAGEMENT            = 0x2c\n\tPR_MPX_ENABLE_MANAGEMENT             = 0x2b\n\tPR_PAC_APDAKEY                       = 0x4\n\tPR_PAC_APDBKEY                       = 0x8\n\tPR_PAC_APGAKEY                       = 0x10\n\tPR_PAC_APIAKEY                       = 0x1\n\tPR_PAC_APIBKEY                       = 0x2\n\tPR_PAC_RESET_KEYS                    = 0x36\n\tPR_SET_CHILD_SUBREAPER               = 0x24\n\tPR_SET_DUMPABLE                      = 0x4\n\tPR_SET_ENDIAN                        = 0x14\n\tPR_SET_FPEMU                         = 0xa\n\tPR_SET_FPEXC                         = 0xc\n\tPR_SET_FP_MODE                       = 0x2d\n\tPR_SET_KEEPCAPS                      = 0x8\n\tPR_SET_MM                            = 0x23\n\tPR_SET_MM_ARG_END                    = 0x9\n\tPR_SET_MM_ARG_START                  = 0x8\n\tPR_SET_MM_AUXV                       = 0xc\n\tPR_SET_MM_BRK                        = 0x7\n\tPR_SET_MM_END_CODE                   = 0x2\n\tPR_SET_MM_END_DATA                   = 0x4\n\tPR_SET_MM_ENV_END                    = 0xb\n\tPR_SET_MM_ENV_START                  = 0xa\n\tPR_SET_MM_EXE_FILE                   = 0xd\n\tPR_SET_MM_MAP                        = 0xe\n\tPR_SET_MM_MAP_SIZE                   = 0xf\n\tPR_SET_MM_START_BRK                  = 0x6\n\tPR_SET_MM_START_CODE                 = 0x1\n\tPR_SET_MM_START_DATA                 = 0x3\n\tPR_SET_MM_START_STACK                = 0x5\n\tPR_SET_NAME                          = 0xf\n\tPR_SET_NO_NEW_PRIVS                  = 0x26\n\tPR_SET_PDEATHSIG                     = 0x1\n\tPR_SET_PTRACER                       = 0x59616d61\n\tPR_SET_PTRACER_ANY                   = 0xffffffff\n\tPR_SET_SECCOMP                       = 0x16\n\tPR_SET_SECUREBITS                    = 0x1c\n\tPR_SET_SPECULATION_CTRL              = 0x35\n\tPR_SET_THP_DISABLE                   = 0x29\n\tPR_SET_TIMERSLACK                    = 0x1d\n\tPR_SET_TIMING                        = 0xe\n\tPR_SET_TSC                           = 0x1a\n\tPR_SET_UNALIGN                       = 0x6\n\tPR_SPEC_DISABLE                      = 0x4\n\tPR_SPEC_DISABLE_NOEXEC               = 0x10\n\tPR_SPEC_ENABLE                       = 0x2\n\tPR_SPEC_FORCE_DISABLE                = 0x8\n\tPR_SPEC_INDIRECT_BRANCH              = 0x1\n\tPR_SPEC_NOT_AFFECTED                 = 0x0\n\tPR_SPEC_PRCTL                        = 0x1\n\tPR_SPEC_STORE_BYPASS                 = 0x0\n\tPR_SVE_GET_VL                        = 0x33\n\tPR_SVE_SET_VL                        = 0x32\n\tPR_SVE_SET_VL_ONEXEC                 = 0x40000\n\tPR_SVE_VL_INHERIT                    = 0x20000\n\tPR_SVE_VL_LEN_MASK                   = 0xffff\n\tPR_TASK_PERF_EVENTS_DISABLE          = 0x1f\n\tPR_TASK_PERF_EVENTS_ENABLE           = 0x20\n\tPR_TIMING_STATISTICAL                = 0x0\n\tPR_TIMING_TIMESTAMP                  = 0x1\n\tPR_TSC_ENABLE                        = 0x1\n\tPR_TSC_SIGSEGV                       = 0x2\n\tPR_UNALIGN_NOPRINT                   = 0x1\n\tPR_UNALIGN_SIGBUS                    = 0x2\n\tPSTOREFS_MAGIC                       = 0x6165676c\n\tPTRACE_ATTACH                        = 0x10\n\tPTRACE_CONT                          = 0x7\n\tPTRACE_DETACH                        = 0x11\n\tPTRACE_EVENT_CLONE                   = 0x3\n\tPTRACE_EVENT_EXEC                    = 0x4\n\tPTRACE_EVENT_EXIT                    = 0x6\n\tPTRACE_EVENT_FORK                    = 0x1\n\tPTRACE_EVENT_SECCOMP                 = 0x7\n\tPTRACE_EVENT_STOP                    = 0x80\n\tPTRACE_EVENT_VFORK                   = 0x2\n\tPTRACE_EVENT_VFORK_DONE              = 0x5\n\tPTRACE_GETEVENTMSG                   = 0x4201\n\tPTRACE_GETFPREGS                     = 0xe\n\tPTRACE_GETREGS                       = 0xc\n\tPTRACE_GETREGSET                     = 0x4204\n\tPTRACE_GETSIGINFO                    = 0x4202\n\tPTRACE_GETSIGMASK                    = 0x420a\n\tPTRACE_GET_THREAD_AREA               = 0x19\n\tPTRACE_GET_THREAD_AREA_3264          = 0xc4\n\tPTRACE_GET_WATCH_REGS                = 0xd0\n\tPTRACE_INTERRUPT                     = 0x4207\n\tPTRACE_KILL                          = 0x8\n\tPTRACE_LISTEN                        = 0x4208\n\tPTRACE_OLDSETOPTIONS                 = 0x15\n\tPTRACE_O_EXITKILL                    = 0x100000\n\tPTRACE_O_MASK                        = 0x3000ff\n\tPTRACE_O_SUSPEND_SECCOMP             = 0x200000\n\tPTRACE_O_TRACECLONE                  = 0x8\n\tPTRACE_O_TRACEEXEC                   = 0x10\n\tPTRACE_O_TRACEEXIT                   = 0x40\n\tPTRACE_O_TRACEFORK                   = 0x2\n\tPTRACE_O_TRACESECCOMP                = 0x80\n\tPTRACE_O_TRACESYSGOOD                = 0x1\n\tPTRACE_O_TRACEVFORK                  = 0x4\n\tPTRACE_O_TRACEVFORKDONE              = 0x20\n\tPTRACE_PEEKDATA                      = 0x2\n\tPTRACE_PEEKDATA_3264                 = 0xc1\n\tPTRACE_PEEKSIGINFO                   = 0x4209\n\tPTRACE_PEEKSIGINFO_SHARED            = 0x1\n\tPTRACE_PEEKTEXT                      = 0x1\n\tPTRACE_PEEKTEXT_3264                 = 0xc0\n\tPTRACE_PEEKUSR                       = 0x3\n\tPTRACE_POKEDATA                      = 0x5\n\tPTRACE_POKEDATA_3264                 = 0xc3\n\tPTRACE_POKETEXT                      = 0x4\n\tPTRACE_POKETEXT_3264                 = 0xc2\n\tPTRACE_POKEUSR                       = 0x6\n\tPTRACE_SECCOMP_GET_FILTER            = 0x420c\n\tPTRACE_SECCOMP_GET_METADATA          = 0x420d\n\tPTRACE_SEIZE                         = 0x4206\n\tPTRACE_SETFPREGS                     = 0xf\n\tPTRACE_SETOPTIONS                    = 0x4200\n\tPTRACE_SETREGS                       = 0xd\n\tPTRACE_SETREGSET                     = 0x4205\n\tPTRACE_SETSIGINFO                    = 0x4203\n\tPTRACE_SETSIGMASK                    = 0x420b\n\tPTRACE_SET_THREAD_AREA               = 0x1a\n\tPTRACE_SET_WATCH_REGS                = 0xd1\n\tPTRACE_SINGLESTEP                    = 0x9\n\tPTRACE_SYSCALL                       = 0x18\n\tPTRACE_TRACEME                       = 0x0\n\tQNX4_SUPER_MAGIC                     = 0x2f\n\tQNX6_SUPER_MAGIC                     = 0x68191122\n\tRAMFS_MAGIC                          = 0x858458f6\n\tRDTGROUP_SUPER_MAGIC                 = 0x7655821\n\tREISERFS_SUPER_MAGIC                 = 0x52654973\n\tRENAME_EXCHANGE                      = 0x2\n\tRENAME_NOREPLACE                     = 0x1\n\tRENAME_WHITEOUT                      = 0x4\n\tRLIMIT_AS                            = 0x6\n\tRLIMIT_CORE                          = 0x4\n\tRLIMIT_CPU                           = 0x0\n\tRLIMIT_DATA                          = 0x2\n\tRLIMIT_FSIZE                         = 0x1\n\tRLIMIT_LOCKS                         = 0xa\n\tRLIMIT_MEMLOCK                       = 0x9\n\tRLIMIT_MSGQUEUE                      = 0xc\n\tRLIMIT_NICE                          = 0xd\n\tRLIMIT_NOFILE                        = 0x5\n\tRLIMIT_NPROC                         = 0x8\n\tRLIMIT_RSS                           = 0x7\n\tRLIMIT_RTPRIO                        = 0xe\n\tRLIMIT_RTTIME                        = 0xf\n\tRLIMIT_SIGPENDING                    = 0xb\n\tRLIMIT_STACK                         = 0x3\n\tRLIM_INFINITY                        = 0xffffffffffffffff\n\tRNDADDENTROPY                        = 0x80085203\n\tRNDADDTOENTCNT                       = 0x80045201\n\tRNDCLEARPOOL                         = 0x20005206\n\tRNDGETENTCNT                         = 0x40045200\n\tRNDGETPOOL                           = 0x40085202\n\tRNDRESEEDCRNG                        = 0x20005207\n\tRNDZAPENTCNT                         = 0x20005204\n\tRTAX_ADVMSS                          = 0x8\n\tRTAX_CC_ALGO                         = 0x10\n\tRTAX_CWND                            = 0x7\n\tRTAX_FASTOPEN_NO_COOKIE              = 0x11\n\tRTAX_FEATURES                        = 0xc\n\tRTAX_FEATURE_ALLFRAG                 = 0x8\n\tRTAX_FEATURE_ECN                     = 0x1\n\tRTAX_FEATURE_MASK                    = 0xf\n\tRTAX_FEATURE_SACK                    = 0x2\n\tRTAX_FEATURE_TIMESTAMP               = 0x4\n\tRTAX_HOPLIMIT                        = 0xa\n\tRTAX_INITCWND                        = 0xb\n\tRTAX_INITRWND                        = 0xe\n\tRTAX_LOCK                            = 0x1\n\tRTAX_MAX                             = 0x11\n\tRTAX_MTU                             = 0x2\n\tRTAX_QUICKACK                        = 0xf\n\tRTAX_REORDERING                      = 0x9\n\tRTAX_RTO_MIN                         = 0xd\n\tRTAX_RTT                             = 0x4\n\tRTAX_RTTVAR                          = 0x5\n\tRTAX_SSTHRESH                        = 0x6\n\tRTAX_UNSPEC                          = 0x0\n\tRTAX_WINDOW                          = 0x3\n\tRTA_ALIGNTO                          = 0x4\n\tRTA_MAX                              = 0x1d\n\tRTCF_DIRECTSRC                       = 0x4000000\n\tRTCF_DOREDIRECT                      = 0x1000000\n\tRTCF_LOG                             = 0x2000000\n\tRTCF_MASQ                            = 0x400000\n\tRTCF_NAT                             = 0x800000\n\tRTCF_VALVE                           = 0x200000\n\tRTC_AF                               = 0x20\n\tRTC_AIE_OFF                          = 0x20007002\n\tRTC_AIE_ON                           = 0x20007001\n\tRTC_ALM_READ                         = 0x40247008\n\tRTC_ALM_SET                          = 0x80247007\n\tRTC_EPOCH_READ                       = 0x4004700d\n\tRTC_EPOCH_SET                        = 0x8004700e\n\tRTC_IRQF                             = 0x80\n\tRTC_IRQP_READ                        = 0x4004700b\n\tRTC_IRQP_SET                         = 0x8004700c\n\tRTC_MAX_FREQ                         = 0x2000\n\tRTC_PF                               = 0x40\n\tRTC_PIE_OFF                          = 0x20007006\n\tRTC_PIE_ON                           = 0x20007005\n\tRTC_PLL_GET                          = 0x401c7011\n\tRTC_PLL_SET                          = 0x801c7012\n\tRTC_RD_TIME                          = 0x40247009\n\tRTC_SET_TIME                         = 0x8024700a\n\tRTC_UF                               = 0x10\n\tRTC_UIE_OFF                          = 0x20007004\n\tRTC_UIE_ON                           = 0x20007003\n\tRTC_VL_CLR                           = 0x20007014\n\tRTC_VL_READ                          = 0x40047013\n\tRTC_WIE_OFF                          = 0x20007010\n\tRTC_WIE_ON                           = 0x2000700f\n\tRTC_WKALM_RD                         = 0x40287010\n\tRTC_WKALM_SET                        = 0x8028700f\n\tRTF_ADDRCLASSMASK                    = 0xf8000000\n\tRTF_ADDRCONF                         = 0x40000\n\tRTF_ALLONLINK                        = 0x20000\n\tRTF_BROADCAST                        = 0x10000000\n\tRTF_CACHE                            = 0x1000000\n\tRTF_DEFAULT                          = 0x10000\n\tRTF_DYNAMIC                          = 0x10\n\tRTF_FLOW                             = 0x2000000\n\tRTF_GATEWAY                          = 0x2\n\tRTF_HOST                             = 0x4\n\tRTF_INTERFACE                        = 0x40000000\n\tRTF_IRTT                             = 0x100\n\tRTF_LINKRT                           = 0x100000\n\tRTF_LOCAL                            = 0x80000000\n\tRTF_MODIFIED                         = 0x20\n\tRTF_MSS                              = 0x40\n\tRTF_MTU                              = 0x40\n\tRTF_MULTICAST                        = 0x20000000\n\tRTF_NAT                              = 0x8000000\n\tRTF_NOFORWARD                        = 0x1000\n\tRTF_NONEXTHOP                        = 0x200000\n\tRTF_NOPMTUDISC                       = 0x4000\n\tRTF_POLICY                           = 0x4000000\n\tRTF_REINSTATE                        = 0x8\n\tRTF_REJECT                           = 0x200\n\tRTF_STATIC                           = 0x400\n\tRTF_THROW                            = 0x2000\n\tRTF_UP                               = 0x1\n\tRTF_WINDOW                           = 0x80\n\tRTF_XRESOLVE                         = 0x800\n\tRTM_BASE                             = 0x10\n\tRTM_DELACTION                        = 0x31\n\tRTM_DELADDR                          = 0x15\n\tRTM_DELADDRLABEL                     = 0x49\n\tRTM_DELCHAIN                         = 0x65\n\tRTM_DELLINK                          = 0x11\n\tRTM_DELMDB                           = 0x55\n\tRTM_DELNEIGH                         = 0x1d\n\tRTM_DELNETCONF                       = 0x51\n\tRTM_DELNSID                          = 0x59\n\tRTM_DELQDISC                         = 0x25\n\tRTM_DELROUTE                         = 0x19\n\tRTM_DELRULE                          = 0x21\n\tRTM_DELTCLASS                        = 0x29\n\tRTM_DELTFILTER                       = 0x2d\n\tRTM_F_CLONED                         = 0x200\n\tRTM_F_EQUALIZE                       = 0x400\n\tRTM_F_FIB_MATCH                      = 0x2000\n\tRTM_F_LOOKUP_TABLE                   = 0x1000\n\tRTM_F_NOTIFY                         = 0x100\n\tRTM_F_PREFIX                         = 0x800\n\tRTM_GETACTION                        = 0x32\n\tRTM_GETADDR                          = 0x16\n\tRTM_GETADDRLABEL                     = 0x4a\n\tRTM_GETANYCAST                       = 0x3e\n\tRTM_GETCHAIN                         = 0x66\n\tRTM_GETDCB                           = 0x4e\n\tRTM_GETLINK                          = 0x12\n\tRTM_GETMDB                           = 0x56\n\tRTM_GETMULTICAST                     = 0x3a\n\tRTM_GETNEIGH                         = 0x1e\n\tRTM_GETNEIGHTBL                      = 0x42\n\tRTM_GETNETCONF                       = 0x52\n\tRTM_GETNSID                          = 0x5a\n\tRTM_GETQDISC                         = 0x26\n\tRTM_GETROUTE                         = 0x1a\n\tRTM_GETRULE                          = 0x22\n\tRTM_GETSTATS                         = 0x5e\n\tRTM_GETTCLASS                        = 0x2a\n\tRTM_GETTFILTER                       = 0x2e\n\tRTM_MAX                              = 0x67\n\tRTM_NEWACTION                        = 0x30\n\tRTM_NEWADDR                          = 0x14\n\tRTM_NEWADDRLABEL                     = 0x48\n\tRTM_NEWCACHEREPORT                   = 0x60\n\tRTM_NEWCHAIN                         = 0x64\n\tRTM_NEWLINK                          = 0x10\n\tRTM_NEWMDB                           = 0x54\n\tRTM_NEWNDUSEROPT                     = 0x44\n\tRTM_NEWNEIGH                         = 0x1c\n\tRTM_NEWNEIGHTBL                      = 0x40\n\tRTM_NEWNETCONF                       = 0x50\n\tRTM_NEWNSID                          = 0x58\n\tRTM_NEWPREFIX                        = 0x34\n\tRTM_NEWQDISC                         = 0x24\n\tRTM_NEWROUTE                         = 0x18\n\tRTM_NEWRULE                          = 0x20\n\tRTM_NEWSTATS                         = 0x5c\n\tRTM_NEWTCLASS                        = 0x28\n\tRTM_NEWTFILTER                       = 0x2c\n\tRTM_NR_FAMILIES                      = 0x16\n\tRTM_NR_MSGTYPES                      = 0x58\n\tRTM_SETDCB                           = 0x4f\n\tRTM_SETLINK                          = 0x13\n\tRTM_SETNEIGHTBL                      = 0x43\n\tRTNH_ALIGNTO                         = 0x4\n\tRTNH_COMPARE_MASK                    = 0x19\n\tRTNH_F_DEAD                          = 0x1\n\tRTNH_F_LINKDOWN                      = 0x10\n\tRTNH_F_OFFLOAD                       = 0x8\n\tRTNH_F_ONLINK                        = 0x4\n\tRTNH_F_PERVASIVE                     = 0x2\n\tRTNH_F_UNRESOLVED                    = 0x20\n\tRTN_MAX                              = 0xb\n\tRTPROT_BABEL                         = 0x2a\n\tRTPROT_BGP                           = 0xba\n\tRTPROT_BIRD                          = 0xc\n\tRTPROT_BOOT                          = 0x3\n\tRTPROT_DHCP                          = 0x10\n\tRTPROT_DNROUTED                      = 0xd\n\tRTPROT_EIGRP                         = 0xc0\n\tRTPROT_GATED                         = 0x8\n\tRTPROT_ISIS                          = 0xbb\n\tRTPROT_KERNEL                        = 0x2\n\tRTPROT_MROUTED                       = 0x11\n\tRTPROT_MRT                           = 0xa\n\tRTPROT_NTK                           = 0xf\n\tRTPROT_OSPF                          = 0xbc\n\tRTPROT_RA                            = 0x9\n\tRTPROT_REDIRECT                      = 0x1\n\tRTPROT_RIP                           = 0xbd\n\tRTPROT_STATIC                        = 0x4\n\tRTPROT_UNSPEC                        = 0x0\n\tRTPROT_XORP                          = 0xe\n\tRTPROT_ZEBRA                         = 0xb\n\tRT_CLASS_DEFAULT                     = 0xfd\n\tRT_CLASS_LOCAL                       = 0xff\n\tRT_CLASS_MAIN                        = 0xfe\n\tRT_CLASS_MAX                         = 0xff\n\tRT_CLASS_UNSPEC                      = 0x0\n\tRUSAGE_CHILDREN                      = -0x1\n\tRUSAGE_SELF                          = 0x0\n\tRUSAGE_THREAD                        = 0x1\n\tSCM_CREDENTIALS                      = 0x2\n\tSCM_RIGHTS                           = 0x1\n\tSCM_TIMESTAMP                        = 0x1d\n\tSCM_TIMESTAMPING                     = 0x25\n\tSCM_TIMESTAMPING_OPT_STATS           = 0x36\n\tSCM_TIMESTAMPING_PKTINFO             = 0x3a\n\tSCM_TIMESTAMPNS                      = 0x23\n\tSCM_TXTIME                           = 0x3d\n\tSCM_WIFI_STATUS                      = 0x29\n\tSC_LOG_FLUSH                         = 0x100000\n\tSECCOMP_MODE_DISABLED                = 0x0\n\tSECCOMP_MODE_FILTER                  = 0x2\n\tSECCOMP_MODE_STRICT                  = 0x1\n\tSECURITYFS_MAGIC                     = 0x73636673\n\tSELINUX_MAGIC                        = 0xf97cff8c\n\tSFD_CLOEXEC                          = 0x80000\n\tSFD_NONBLOCK                         = 0x80\n\tSHUT_RD                              = 0x0\n\tSHUT_RDWR                            = 0x2\n\tSHUT_WR                              = 0x1\n\tSIOCADDDLCI                          = 0x8980\n\tSIOCADDMULTI                         = 0x8931\n\tSIOCADDRT                            = 0x890b\n\tSIOCATMARK                           = 0x40047307\n\tSIOCBONDCHANGEACTIVE                 = 0x8995\n\tSIOCBONDENSLAVE                      = 0x8990\n\tSIOCBONDINFOQUERY                    = 0x8994\n\tSIOCBONDRELEASE                      = 0x8991\n\tSIOCBONDSETHWADDR                    = 0x8992\n\tSIOCBONDSLAVEINFOQUERY               = 0x8993\n\tSIOCBRADDBR                          = 0x89a0\n\tSIOCBRADDIF                          = 0x89a2\n\tSIOCBRDELBR                          = 0x89a1\n\tSIOCBRDELIF                          = 0x89a3\n\tSIOCDARP                             = 0x8953\n\tSIOCDELDLCI                          = 0x8981\n\tSIOCDELMULTI                         = 0x8932\n\tSIOCDELRT                            = 0x890c\n\tSIOCDEVPRIVATE                       = 0x89f0\n\tSIOCDIFADDR                          = 0x8936\n\tSIOCDRARP                            = 0x8960\n\tSIOCETHTOOL                          = 0x8946\n\tSIOCGARP                             = 0x8954\n\tSIOCGHWTSTAMP                        = 0x89b1\n\tSIOCGIFADDR                          = 0x8915\n\tSIOCGIFBR                            = 0x8940\n\tSIOCGIFBRDADDR                       = 0x8919\n\tSIOCGIFCONF                          = 0x8912\n\tSIOCGIFCOUNT                         = 0x8938\n\tSIOCGIFDSTADDR                       = 0x8917\n\tSIOCGIFENCAP                         = 0x8925\n\tSIOCGIFFLAGS                         = 0x8913\n\tSIOCGIFHWADDR                        = 0x8927\n\tSIOCGIFINDEX                         = 0x8933\n\tSIOCGIFMAP                           = 0x8970\n\tSIOCGIFMEM                           = 0x891f\n\tSIOCGIFMETRIC                        = 0x891d\n\tSIOCGIFMTU                           = 0x8921\n\tSIOCGIFNAME                          = 0x8910\n\tSIOCGIFNETMASK                       = 0x891b\n\tSIOCGIFPFLAGS                        = 0x8935\n\tSIOCGIFSLAVE                         = 0x8929\n\tSIOCGIFTXQLEN                        = 0x8942\n\tSIOCGIFVLAN                          = 0x8982\n\tSIOCGMIIPHY                          = 0x8947\n\tSIOCGMIIREG                          = 0x8948\n\tSIOCGPGRP                            = 0x40047309\n\tSIOCGPPPCSTATS                       = 0x89f2\n\tSIOCGPPPSTATS                        = 0x89f0\n\tSIOCGPPPVER                          = 0x89f1\n\tSIOCGRARP                            = 0x8961\n\tSIOCGSKNS                            = 0x894c\n\tSIOCGSTAMP                           = 0x8906\n\tSIOCGSTAMPNS                         = 0x8907\n\tSIOCINQ                              = 0x467f\n\tSIOCOUTQ                             = 0x7472\n\tSIOCOUTQNSD                          = 0x894b\n\tSIOCPROTOPRIVATE                     = 0x89e0\n\tSIOCRTMSG                            = 0x890d\n\tSIOCSARP                             = 0x8955\n\tSIOCSHWTSTAMP                        = 0x89b0\n\tSIOCSIFADDR                          = 0x8916\n\tSIOCSIFBR                            = 0x8941\n\tSIOCSIFBRDADDR                       = 0x891a\n\tSIOCSIFDSTADDR                       = 0x8918\n\tSIOCSIFENCAP                         = 0x8926\n\tSIOCSIFFLAGS                         = 0x8914\n\tSIOCSIFHWADDR                        = 0x8924\n\tSIOCSIFHWBROADCAST                   = 0x8937\n\tSIOCSIFLINK                          = 0x8911\n\tSIOCSIFMAP                           = 0x8971\n\tSIOCSIFMEM                           = 0x8920\n\tSIOCSIFMETRIC                        = 0x891e\n\tSIOCSIFMTU                           = 0x8922\n\tSIOCSIFNAME                          = 0x8923\n\tSIOCSIFNETMASK                       = 0x891c\n\tSIOCSIFPFLAGS                        = 0x8934\n\tSIOCSIFSLAVE                         = 0x8930\n\tSIOCSIFTXQLEN                        = 0x8943\n\tSIOCSIFVLAN                          = 0x8983\n\tSIOCSMIIREG                          = 0x8949\n\tSIOCSPGRP                            = 0x80047308\n\tSIOCSRARP                            = 0x8962\n\tSIOCWANDEV                           = 0x894a\n\tSMACK_MAGIC                          = 0x43415d53\n\tSMART_AUTOSAVE                       = 0xd2\n\tSMART_AUTO_OFFLINE                   = 0xdb\n\tSMART_DISABLE                        = 0xd9\n\tSMART_ENABLE                         = 0xd8\n\tSMART_HCYL_PASS                      = 0xc2\n\tSMART_IMMEDIATE_OFFLINE              = 0xd4\n\tSMART_LCYL_PASS                      = 0x4f\n\tSMART_READ_LOG_SECTOR                = 0xd5\n\tSMART_READ_THRESHOLDS                = 0xd1\n\tSMART_READ_VALUES                    = 0xd0\n\tSMART_SAVE                           = 0xd3\n\tSMART_STATUS                         = 0xda\n\tSMART_WRITE_LOG_SECTOR               = 0xd6\n\tSMART_WRITE_THRESHOLDS               = 0xd7\n\tSMB_SUPER_MAGIC                      = 0x517b\n\tSOCKFS_MAGIC                         = 0x534f434b\n\tSOCK_CLOEXEC                         = 0x80000\n\tSOCK_DCCP                            = 0x6\n\tSOCK_DGRAM                           = 0x1\n\tSOCK_IOC_TYPE                        = 0x89\n\tSOCK_NONBLOCK                        = 0x80\n\tSOCK_PACKET                          = 0xa\n\tSOCK_RAW                             = 0x3\n\tSOCK_RDM                             = 0x4\n\tSOCK_SEQPACKET                       = 0x5\n\tSOCK_STREAM                          = 0x2\n\tSOL_AAL                              = 0x109\n\tSOL_ALG                              = 0x117\n\tSOL_ATM                              = 0x108\n\tSOL_CAIF                             = 0x116\n\tSOL_CAN_BASE                         = 0x64\n\tSOL_DCCP                             = 0x10d\n\tSOL_DECNET                           = 0x105\n\tSOL_ICMPV6                           = 0x3a\n\tSOL_IP                               = 0x0\n\tSOL_IPV6                             = 0x29\n\tSOL_IRDA                             = 0x10a\n\tSOL_IUCV                             = 0x115\n\tSOL_KCM                              = 0x119\n\tSOL_LLC                              = 0x10c\n\tSOL_NETBEUI                          = 0x10b\n\tSOL_NETLINK                          = 0x10e\n\tSOL_NFC                              = 0x118\n\tSOL_PACKET                           = 0x107\n\tSOL_PNPIPE                           = 0x113\n\tSOL_PPPOL2TP                         = 0x111\n\tSOL_RAW                              = 0xff\n\tSOL_RDS                              = 0x114\n\tSOL_RXRPC                            = 0x110\n\tSOL_SOCKET                           = 0xffff\n\tSOL_TCP                              = 0x6\n\tSOL_TIPC                             = 0x10f\n\tSOL_TLS                              = 0x11a\n\tSOL_X25                              = 0x106\n\tSOL_XDP                              = 0x11b\n\tSOMAXCONN                            = 0x80\n\tSO_ACCEPTCONN                        = 0x1009\n\tSO_ATTACH_BPF                        = 0x32\n\tSO_ATTACH_FILTER                     = 0x1a\n\tSO_ATTACH_REUSEPORT_CBPF             = 0x33\n\tSO_ATTACH_REUSEPORT_EBPF             = 0x34\n\tSO_BINDTODEVICE                      = 0x19\n\tSO_BINDTOIFINDEX                     = 0x3e\n\tSO_BPF_EXTENSIONS                    = 0x30\n\tSO_BROADCAST                         = 0x20\n\tSO_BSDCOMPAT                         = 0xe\n\tSO_BUSY_POLL                         = 0x2e\n\tSO_CNX_ADVICE                        = 0x35\n\tSO_COOKIE                            = 0x39\n\tSO_DEBUG                             = 0x1\n\tSO_DETACH_BPF                        = 0x1b\n\tSO_DETACH_FILTER                     = 0x1b\n\tSO_DOMAIN                            = 0x1029\n\tSO_DONTROUTE                         = 0x10\n\tSO_EE_CODE_TXTIME_INVALID_PARAM      = 0x1\n\tSO_EE_CODE_TXTIME_MISSED             = 0x2\n\tSO_EE_CODE_ZEROCOPY_COPIED           = 0x1\n\tSO_EE_ORIGIN_ICMP                    = 0x2\n\tSO_EE_ORIGIN_ICMP6                   = 0x3\n\tSO_EE_ORIGIN_LOCAL                   = 0x1\n\tSO_EE_ORIGIN_NONE                    = 0x0\n\tSO_EE_ORIGIN_TIMESTAMPING            = 0x4\n\tSO_EE_ORIGIN_TXSTATUS                = 0x4\n\tSO_EE_ORIGIN_TXTIME                  = 0x6\n\tSO_EE_ORIGIN_ZEROCOPY                = 0x5\n\tSO_ERROR                             = 0x1007\n\tSO_GET_FILTER                        = 0x1a\n\tSO_INCOMING_CPU                      = 0x31\n\tSO_INCOMING_NAPI_ID                  = 0x38\n\tSO_KEEPALIVE                         = 0x8\n\tSO_LINGER                            = 0x80\n\tSO_LOCK_FILTER                       = 0x2c\n\tSO_MARK                              = 0x24\n\tSO_MAX_PACING_RATE                   = 0x2f\n\tSO_MEMINFO                           = 0x37\n\tSO_NOFCS                             = 0x2b\n\tSO_NO_CHECK                          = 0xb\n\tSO_OOBINLINE                         = 0x100\n\tSO_PASSCRED                          = 0x11\n\tSO_PASSSEC                           = 0x22\n\tSO_PEEK_OFF                          = 0x2a\n\tSO_PEERCRED                          = 0x12\n\tSO_PEERGROUPS                        = 0x3b\n\tSO_PEERNAME                          = 0x1c\n\tSO_PEERSEC                           = 0x1e\n\tSO_PRIORITY                          = 0xc\n\tSO_PROTOCOL                          = 0x1028\n\tSO_RCVBUF                            = 0x1002\n\tSO_RCVBUFFORCE                       = 0x21\n\tSO_RCVLOWAT                          = 0x1004\n\tSO_RCVTIMEO                          = 0x1006\n\tSO_RCVTIMEO_NEW                      = 0x42\n\tSO_RCVTIMEO_OLD                      = 0x1006\n\tSO_REUSEADDR                         = 0x4\n\tSO_REUSEPORT                         = 0x200\n\tSO_RXQ_OVFL                          = 0x28\n\tSO_SECURITY_AUTHENTICATION           = 0x16\n\tSO_SECURITY_ENCRYPTION_NETWORK       = 0x18\n\tSO_SECURITY_ENCRYPTION_TRANSPORT     = 0x17\n\tSO_SELECT_ERR_QUEUE                  = 0x2d\n\tSO_SNDBUF                            = 0x1001\n\tSO_SNDBUFFORCE                       = 0x1f\n\tSO_SNDLOWAT                          = 0x1003\n\tSO_SNDTIMEO                          = 0x1005\n\tSO_SNDTIMEO_NEW                      = 0x43\n\tSO_SNDTIMEO_OLD                      = 0x1005\n\tSO_STYLE                             = 0x1008\n\tSO_TIMESTAMP                         = 0x1d\n\tSO_TIMESTAMPING                      = 0x25\n\tSO_TIMESTAMPING_NEW                  = 0x41\n\tSO_TIMESTAMPING_OLD                  = 0x25\n\tSO_TIMESTAMPNS                       = 0x23\n\tSO_TIMESTAMPNS_NEW                   = 0x40\n\tSO_TIMESTAMPNS_OLD                   = 0x23\n\tSO_TIMESTAMP_NEW                     = 0x3f\n\tSO_TIMESTAMP_OLD                     = 0x1d\n\tSO_TXTIME                            = 0x3d\n\tSO_TYPE                              = 0x1008\n\tSO_VM_SOCKETS_BUFFER_MAX_SIZE        = 0x2\n\tSO_VM_SOCKETS_BUFFER_MIN_SIZE        = 0x1\n\tSO_VM_SOCKETS_BUFFER_SIZE            = 0x0\n\tSO_VM_SOCKETS_CONNECT_TIMEOUT        = 0x6\n\tSO_VM_SOCKETS_NONBLOCK_TXRX          = 0x7\n\tSO_VM_SOCKETS_PEER_HOST_VM_ID        = 0x3\n\tSO_VM_SOCKETS_TRUSTED                = 0x5\n\tSO_WIFI_STATUS                       = 0x29\n\tSO_ZEROCOPY                          = 0x3c\n\tSPLICE_F_GIFT                        = 0x8\n\tSPLICE_F_MORE                        = 0x4\n\tSPLICE_F_MOVE                        = 0x1\n\tSPLICE_F_NONBLOCK                    = 0x2\n\tSQUASHFS_MAGIC                       = 0x73717368\n\tSTACK_END_MAGIC                      = 0x57ac6e9d\n\tSTATX_ALL                            = 0xfff\n\tSTATX_ATIME                          = 0x20\n\tSTATX_ATTR_APPEND                    = 0x20\n\tSTATX_ATTR_AUTOMOUNT                 = 0x1000\n\tSTATX_ATTR_COMPRESSED                = 0x4\n\tSTATX_ATTR_ENCRYPTED                 = 0x800\n\tSTATX_ATTR_IMMUTABLE                 = 0x10\n\tSTATX_ATTR_NODUMP                    = 0x40\n\tSTATX_BASIC_STATS                    = 0x7ff\n\tSTATX_BLOCKS                         = 0x400\n\tSTATX_BTIME                          = 0x800\n\tSTATX_CTIME                          = 0x80\n\tSTATX_GID                            = 0x10\n\tSTATX_INO                            = 0x100\n\tSTATX_MODE                           = 0x2\n\tSTATX_MTIME                          = 0x40\n\tSTATX_NLINK                          = 0x4\n\tSTATX_SIZE                           = 0x200\n\tSTATX_TYPE                           = 0x1\n\tSTATX_UID                            = 0x8\n\tSTATX__RESERVED                      = 0x80000000\n\tSYNC_FILE_RANGE_WAIT_AFTER           = 0x4\n\tSYNC_FILE_RANGE_WAIT_BEFORE          = 0x1\n\tSYNC_FILE_RANGE_WRITE                = 0x2\n\tSYSFS_MAGIC                          = 0x62656572\n\tS_BLKSIZE                            = 0x200\n\tS_IEXEC                              = 0x40\n\tS_IFBLK                              = 0x6000\n\tS_IFCHR                              = 0x2000\n\tS_IFDIR                              = 0x4000\n\tS_IFIFO                              = 0x1000\n\tS_IFLNK                              = 0xa000\n\tS_IFMT                               = 0xf000\n\tS_IFREG                              = 0x8000\n\tS_IFSOCK                             = 0xc000\n\tS_IREAD                              = 0x100\n\tS_IRGRP                              = 0x20\n\tS_IROTH                              = 0x4\n\tS_IRUSR                              = 0x100\n\tS_IRWXG                              = 0x38\n\tS_IRWXO                              = 0x7\n\tS_IRWXU                              = 0x1c0\n\tS_ISGID                              = 0x400\n\tS_ISUID                              = 0x800\n\tS_ISVTX                              = 0x200\n\tS_IWGRP                              = 0x10\n\tS_IWOTH                              = 0x2\n\tS_IWRITE                             = 0x80\n\tS_IWUSR                              = 0x80\n\tS_IXGRP                              = 0x8\n\tS_IXOTH                              = 0x1\n\tS_IXUSR                              = 0x40\n\tTAB0                                 = 0x0\n\tTAB1                                 = 0x800\n\tTAB2                                 = 0x1000\n\tTAB3                                 = 0x1800\n\tTABDLY                               = 0x1800\n\tTASKSTATS_CMD_ATTR_MAX               = 0x4\n\tTASKSTATS_CMD_MAX                    = 0x2\n\tTASKSTATS_GENL_NAME                  = \"TASKSTATS\"\n\tTASKSTATS_GENL_VERSION               = 0x1\n\tTASKSTATS_TYPE_MAX                   = 0x6\n\tTASKSTATS_VERSION                    = 0x9\n\tTCFLSH                               = 0x5407\n\tTCGETA                               = 0x5401\n\tTCGETS                               = 0x540d\n\tTCGETS2                              = 0x4030542a\n\tTCIFLUSH                             = 0x0\n\tTCIOFF                               = 0x2\n\tTCIOFLUSH                            = 0x2\n\tTCION                                = 0x3\n\tTCOFLUSH                             = 0x1\n\tTCOOFF                               = 0x0\n\tTCOON                                = 0x1\n\tTCP_BPF_IW                           = 0x3e9\n\tTCP_BPF_SNDCWND_CLAMP                = 0x3ea\n\tTCP_CC_INFO                          = 0x1a\n\tTCP_CM_INQ                           = 0x24\n\tTCP_CONGESTION                       = 0xd\n\tTCP_COOKIE_IN_ALWAYS                 = 0x1\n\tTCP_COOKIE_MAX                       = 0x10\n\tTCP_COOKIE_MIN                       = 0x8\n\tTCP_COOKIE_OUT_NEVER                 = 0x2\n\tTCP_COOKIE_PAIR_SIZE                 = 0x20\n\tTCP_COOKIE_TRANSACTIONS              = 0xf\n\tTCP_CORK                             = 0x3\n\tTCP_DEFER_ACCEPT                     = 0x9\n\tTCP_FASTOPEN                         = 0x17\n\tTCP_FASTOPEN_CONNECT                 = 0x1e\n\tTCP_FASTOPEN_KEY                     = 0x21\n\tTCP_FASTOPEN_NO_COOKIE               = 0x22\n\tTCP_INFO                             = 0xb\n\tTCP_INQ                              = 0x24\n\tTCP_KEEPCNT                          = 0x6\n\tTCP_KEEPIDLE                         = 0x4\n\tTCP_KEEPINTVL                        = 0x5\n\tTCP_LINGER2                          = 0x8\n\tTCP_MAXSEG                           = 0x2\n\tTCP_MAXWIN                           = 0xffff\n\tTCP_MAX_WINSHIFT                     = 0xe\n\tTCP_MD5SIG                           = 0xe\n\tTCP_MD5SIG_EXT                       = 0x20\n\tTCP_MD5SIG_FLAG_PREFIX               = 0x1\n\tTCP_MD5SIG_MAXKEYLEN                 = 0x50\n\tTCP_MSS                              = 0x200\n\tTCP_MSS_DEFAULT                      = 0x218\n\tTCP_MSS_DESIRED                      = 0x4c4\n\tTCP_NODELAY                          = 0x1\n\tTCP_NOTSENT_LOWAT                    = 0x19\n\tTCP_QUEUE_SEQ                        = 0x15\n\tTCP_QUICKACK                         = 0xc\n\tTCP_REPAIR                           = 0x13\n\tTCP_REPAIR_OFF                       = 0x0\n\tTCP_REPAIR_OFF_NO_WP                 = -0x1\n\tTCP_REPAIR_ON                        = 0x1\n\tTCP_REPAIR_OPTIONS                   = 0x16\n\tTCP_REPAIR_QUEUE                     = 0x14\n\tTCP_REPAIR_WINDOW                    = 0x1d\n\tTCP_SAVED_SYN                        = 0x1c\n\tTCP_SAVE_SYN                         = 0x1b\n\tTCP_SYNCNT                           = 0x7\n\tTCP_S_DATA_IN                        = 0x4\n\tTCP_S_DATA_OUT                       = 0x8\n\tTCP_THIN_DUPACK                      = 0x11\n\tTCP_THIN_LINEAR_TIMEOUTS             = 0x10\n\tTCP_TIMESTAMP                        = 0x18\n\tTCP_ULP                              = 0x1f\n\tTCP_USER_TIMEOUT                     = 0x12\n\tTCP_WINDOW_CLAMP                     = 0xa\n\tTCP_ZEROCOPY_RECEIVE                 = 0x23\n\tTCSAFLUSH                            = 0x5410\n\tTCSBRK                               = 0x5405\n\tTCSBRKP                              = 0x5486\n\tTCSETA                               = 0x5402\n\tTCSETAF                              = 0x5404\n\tTCSETAW                              = 0x5403\n\tTCSETS                               = 0x540e\n\tTCSETS2                              = 0x8030542b\n\tTCSETSF                              = 0x5410\n\tTCSETSF2                             = 0x8030542d\n\tTCSETSW                              = 0x540f\n\tTCSETSW2                             = 0x8030542c\n\tTCXONC                               = 0x5406\n\tTIMER_ABSTIME                        = 0x1\n\tTIOCCBRK                             = 0x5428\n\tTIOCCONS                             = 0x80047478\n\tTIOCEXCL                             = 0x740d\n\tTIOCGDEV                             = 0x40045432\n\tTIOCGETD                             = 0x7400\n\tTIOCGETP                             = 0x7408\n\tTIOCGEXCL                            = 0x40045440\n\tTIOCGICOUNT                          = 0x5492\n\tTIOCGISO7816                         = 0x40285442\n\tTIOCGLCKTRMIOS                       = 0x548b\n\tTIOCGLTC                             = 0x7474\n\tTIOCGPGRP                            = 0x40047477\n\tTIOCGPKT                             = 0x40045438\n\tTIOCGPTLCK                           = 0x40045439\n\tTIOCGPTN                             = 0x40045430\n\tTIOCGPTPEER                          = 0x20005441\n\tTIOCGRS485                           = 0x4020542e\n\tTIOCGSERIAL                          = 0x5484\n\tTIOCGSID                             = 0x7416\n\tTIOCGSOFTCAR                         = 0x5481\n\tTIOCGWINSZ                           = 0x40087468\n\tTIOCINQ                              = 0x467f\n\tTIOCLINUX                            = 0x5483\n\tTIOCMBIC                             = 0x741c\n\tTIOCMBIS                             = 0x741b\n\tTIOCMGET                             = 0x741d\n\tTIOCMIWAIT                           = 0x5491\n\tTIOCMSET                             = 0x741a\n\tTIOCM_CAR                            = 0x100\n\tTIOCM_CD                             = 0x100\n\tTIOCM_CTS                            = 0x40\n\tTIOCM_DSR                            = 0x400\n\tTIOCM_DTR                            = 0x2\n\tTIOCM_LE                             = 0x1\n\tTIOCM_RI                             = 0x200\n\tTIOCM_RNG                            = 0x200\n\tTIOCM_RTS                            = 0x4\n\tTIOCM_SR                             = 0x20\n\tTIOCM_ST                             = 0x10\n\tTIOCNOTTY                            = 0x5471\n\tTIOCNXCL                             = 0x740e\n\tTIOCOUTQ                             = 0x7472\n\tTIOCPKT                              = 0x5470\n\tTIOCPKT_DATA                         = 0x0\n\tTIOCPKT_DOSTOP                       = 0x20\n\tTIOCPKT_FLUSHREAD                    = 0x1\n\tTIOCPKT_FLUSHWRITE                   = 0x2\n\tTIOCPKT_IOCTL                        = 0x40\n\tTIOCPKT_NOSTOP                       = 0x10\n\tTIOCPKT_START                        = 0x8\n\tTIOCPKT_STOP                         = 0x4\n\tTIOCSBRK                             = 0x5427\n\tTIOCSCTTY                            = 0x5480\n\tTIOCSERCONFIG                        = 0x5488\n\tTIOCSERGETLSR                        = 0x548e\n\tTIOCSERGETMULTI                      = 0x548f\n\tTIOCSERGSTRUCT                       = 0x548d\n\tTIOCSERGWILD                         = 0x5489\n\tTIOCSERSETMULTI                      = 0x5490\n\tTIOCSERSWILD                         = 0x548a\n\tTIOCSER_TEMT                         = 0x1\n\tTIOCSETD                             = 0x7401\n\tTIOCSETN                             = 0x740a\n\tTIOCSETP                             = 0x7409\n\tTIOCSIG                              = 0x80045436\n\tTIOCSISO7816                         = 0xc0285443\n\tTIOCSLCKTRMIOS                       = 0x548c\n\tTIOCSLTC                             = 0x7475\n\tTIOCSPGRP                            = 0x80047476\n\tTIOCSPTLCK                           = 0x80045431\n\tTIOCSRS485                           = 0xc020542f\n\tTIOCSSERIAL                          = 0x5485\n\tTIOCSSOFTCAR                         = 0x5482\n\tTIOCSTI                              = 0x5472\n\tTIOCSWINSZ                           = 0x80087467\n\tTIOCVHANGUP                          = 0x5437\n\tTMPFS_MAGIC                          = 0x1021994\n\tTOSTOP                               = 0x8000\n\tTPACKET_ALIGNMENT                    = 0x10\n\tTPACKET_HDRLEN                       = 0x34\n\tTP_STATUS_AVAILABLE                  = 0x0\n\tTP_STATUS_BLK_TMO                    = 0x20\n\tTP_STATUS_COPY                       = 0x2\n\tTP_STATUS_CSUMNOTREADY               = 0x8\n\tTP_STATUS_CSUM_VALID                 = 0x80\n\tTP_STATUS_KERNEL                     = 0x0\n\tTP_STATUS_LOSING                     = 0x4\n\tTP_STATUS_SENDING                    = 0x2\n\tTP_STATUS_SEND_REQUEST               = 0x1\n\tTP_STATUS_TS_RAW_HARDWARE            = -0x80000000\n\tTP_STATUS_TS_SOFTWARE                = 0x20000000\n\tTP_STATUS_TS_SYS_HARDWARE            = 0x40000000\n\tTP_STATUS_USER                       = 0x1\n\tTP_STATUS_VLAN_TPID_VALID            = 0x40\n\tTP_STATUS_VLAN_VALID                 = 0x10\n\tTP_STATUS_WRONG_FORMAT               = 0x4\n\tTRACEFS_MAGIC                        = 0x74726163\n\tTS_COMM_LEN                          = 0x20\n\tTUNATTACHFILTER                      = 0x800854d5\n\tTUNDETACHFILTER                      = 0x800854d6\n\tTUNGETFEATURES                       = 0x400454cf\n\tTUNGETFILTER                         = 0x400854db\n\tTUNGETIFF                            = 0x400454d2\n\tTUNGETSNDBUF                         = 0x400454d3\n\tTUNGETVNETBE                         = 0x400454df\n\tTUNGETVNETHDRSZ                      = 0x400454d7\n\tTUNGETVNETLE                         = 0x400454dd\n\tTUNSETCARRIER                        = 0x800454e2\n\tTUNSETDEBUG                          = 0x800454c9\n\tTUNSETFILTEREBPF                     = 0x400454e1\n\tTUNSETGROUP                          = 0x800454ce\n\tTUNSETIFF                            = 0x800454ca\n\tTUNSETIFINDEX                        = 0x800454da\n\tTUNSETLINK                           = 0x800454cd\n\tTUNSETNOCSUM                         = 0x800454c8\n\tTUNSETOFFLOAD                        = 0x800454d0\n\tTUNSETOWNER                          = 0x800454cc\n\tTUNSETPERSIST                        = 0x800454cb\n\tTUNSETQUEUE                          = 0x800454d9\n\tTUNSETSNDBUF                         = 0x800454d4\n\tTUNSETSTEERINGEBPF                   = 0x400454e0\n\tTUNSETTXFILTER                       = 0x800454d1\n\tTUNSETVNETBE                         = 0x800454de\n\tTUNSETVNETHDRSZ                      = 0x800454d8\n\tTUNSETVNETLE                         = 0x800454dc\n\tUBI_IOCATT                           = 0x80186f40\n\tUBI_IOCDET                           = 0x80046f41\n\tUBI_IOCEBCH                          = 0x80044f02\n\tUBI_IOCEBER                          = 0x80044f01\n\tUBI_IOCEBISMAP                       = 0x40044f05\n\tUBI_IOCEBMAP                         = 0x80084f03\n\tUBI_IOCEBUNMAP                       = 0x80044f04\n\tUBI_IOCMKVOL                         = 0x80986f00\n\tUBI_IOCRMVOL                         = 0x80046f01\n\tUBI_IOCRNVOL                         = 0x91106f03\n\tUBI_IOCRPEB                          = 0x80046f04\n\tUBI_IOCRSVOL                         = 0x800c6f02\n\tUBI_IOCSETVOLPROP                    = 0x80104f06\n\tUBI_IOCSPEB                          = 0x80046f05\n\tUBI_IOCVOLCRBLK                      = 0x80804f07\n\tUBI_IOCVOLRMBLK                      = 0x20004f08\n\tUBI_IOCVOLUP                         = 0x80084f00\n\tUDF_SUPER_MAGIC                      = 0x15013346\n\tUMOUNT_NOFOLLOW                      = 0x8\n\tUSBDEVICE_SUPER_MAGIC                = 0x9fa2\n\tUTIME_NOW                            = 0x3fffffff\n\tUTIME_OMIT                           = 0x3ffffffe\n\tV9FS_MAGIC                           = 0x1021997\n\tVDISCARD                             = 0xd\n\tVEOF                                 = 0x10\n\tVEOL                                 = 0x11\n\tVEOL2                                = 0x6\n\tVERASE                               = 0x2\n\tVINTR                                = 0x0\n\tVKILL                                = 0x3\n\tVLNEXT                               = 0xf\n\tVMADDR_CID_ANY                       = 0xffffffff\n\tVMADDR_CID_HOST                      = 0x2\n\tVMADDR_CID_HYPERVISOR                = 0x0\n\tVMADDR_CID_RESERVED                  = 0x1\n\tVMADDR_PORT_ANY                      = 0xffffffff\n\tVMIN                                 = 0x4\n\tVM_SOCKETS_INVALID_VERSION           = 0xffffffff\n\tVQUIT                                = 0x1\n\tVREPRINT                             = 0xc\n\tVSTART                               = 0x8\n\tVSTOP                                = 0x9\n\tVSUSP                                = 0xa\n\tVSWTC                                = 0x7\n\tVSWTCH                               = 0x7\n\tVT0                                  = 0x0\n\tVT1                                  = 0x4000\n\tVTDLY                                = 0x4000\n\tVTIME                                = 0x5\n\tVWERASE                              = 0xe\n\tWALL                                 = 0x40000000\n\tWCLONE                               = 0x80000000\n\tWCONTINUED                           = 0x8\n\tWDIOC_GETBOOTSTATUS                  = 0x40045702\n\tWDIOC_GETPRETIMEOUT                  = 0x40045709\n\tWDIOC_GETSTATUS                      = 0x40045701\n\tWDIOC_GETSUPPORT                     = 0x40285700\n\tWDIOC_GETTEMP                        = 0x40045703\n\tWDIOC_GETTIMELEFT                    = 0x4004570a\n\tWDIOC_GETTIMEOUT                     = 0x40045707\n\tWDIOC_KEEPALIVE                      = 0x40045705\n\tWDIOC_SETOPTIONS                     = 0x40045704\n\tWDIOC_SETPRETIMEOUT                  = 0xc0045708\n\tWDIOC_SETTIMEOUT                     = 0xc0045706\n\tWEXITED                              = 0x4\n\tWIN_ACKMEDIACHANGE                   = 0xdb\n\tWIN_CHECKPOWERMODE1                  = 0xe5\n\tWIN_CHECKPOWERMODE2                  = 0x98\n\tWIN_DEVICE_RESET                     = 0x8\n\tWIN_DIAGNOSE                         = 0x90\n\tWIN_DOORLOCK                         = 0xde\n\tWIN_DOORUNLOCK                       = 0xdf\n\tWIN_DOWNLOAD_MICROCODE               = 0x92\n\tWIN_FLUSH_CACHE                      = 0xe7\n\tWIN_FLUSH_CACHE_EXT                  = 0xea\n\tWIN_FORMAT                           = 0x50\n\tWIN_GETMEDIASTATUS                   = 0xda\n\tWIN_IDENTIFY                         = 0xec\n\tWIN_IDENTIFY_DMA                     = 0xee\n\tWIN_IDLEIMMEDIATE                    = 0xe1\n\tWIN_INIT                             = 0x60\n\tWIN_MEDIAEJECT                       = 0xed\n\tWIN_MULTREAD                         = 0xc4\n\tWIN_MULTREAD_EXT                     = 0x29\n\tWIN_MULTWRITE                        = 0xc5\n\tWIN_MULTWRITE_EXT                    = 0x39\n\tWIN_NOP                              = 0x0\n\tWIN_PACKETCMD                        = 0xa0\n\tWIN_PIDENTIFY                        = 0xa1\n\tWIN_POSTBOOT                         = 0xdc\n\tWIN_PREBOOT                          = 0xdd\n\tWIN_QUEUED_SERVICE                   = 0xa2\n\tWIN_READ                             = 0x20\n\tWIN_READDMA                          = 0xc8\n\tWIN_READDMA_EXT                      = 0x25\n\tWIN_READDMA_ONCE                     = 0xc9\n\tWIN_READDMA_QUEUED                   = 0xc7\n\tWIN_READDMA_QUEUED_EXT               = 0x26\n\tWIN_READ_BUFFER                      = 0xe4\n\tWIN_READ_EXT                         = 0x24\n\tWIN_READ_LONG                        = 0x22\n\tWIN_READ_LONG_ONCE                   = 0x23\n\tWIN_READ_NATIVE_MAX                  = 0xf8\n\tWIN_READ_NATIVE_MAX_EXT              = 0x27\n\tWIN_READ_ONCE                        = 0x21\n\tWIN_RECAL                            = 0x10\n\tWIN_RESTORE                          = 0x10\n\tWIN_SECURITY_DISABLE                 = 0xf6\n\tWIN_SECURITY_ERASE_PREPARE           = 0xf3\n\tWIN_SECURITY_ERASE_UNIT              = 0xf4\n\tWIN_SECURITY_FREEZE_LOCK             = 0xf5\n\tWIN_SECURITY_SET_PASS                = 0xf1\n\tWIN_SECURITY_UNLOCK                  = 0xf2\n\tWIN_SEEK                             = 0x70\n\tWIN_SETFEATURES                      = 0xef\n\tWIN_SETIDLE1                         = 0xe3\n\tWIN_SETIDLE2                         = 0x97\n\tWIN_SETMULT                          = 0xc6\n\tWIN_SET_MAX                          = 0xf9\n\tWIN_SET_MAX_EXT                      = 0x37\n\tWIN_SLEEPNOW1                        = 0xe6\n\tWIN_SLEEPNOW2                        = 0x99\n\tWIN_SMART                            = 0xb0\n\tWIN_SPECIFY                          = 0x91\n\tWIN_SRST                             = 0x8\n\tWIN_STANDBY                          = 0xe2\n\tWIN_STANDBY2                         = 0x96\n\tWIN_STANDBYNOW1                      = 0xe0\n\tWIN_STANDBYNOW2                      = 0x94\n\tWIN_VERIFY                           = 0x40\n\tWIN_VERIFY_EXT                       = 0x42\n\tWIN_VERIFY_ONCE                      = 0x41\n\tWIN_WRITE                            = 0x30\n\tWIN_WRITEDMA                         = 0xca\n\tWIN_WRITEDMA_EXT                     = 0x35\n\tWIN_WRITEDMA_ONCE                    = 0xcb\n\tWIN_WRITEDMA_QUEUED                  = 0xcc\n\tWIN_WRITEDMA_QUEUED_EXT              = 0x36\n\tWIN_WRITE_BUFFER                     = 0xe8\n\tWIN_WRITE_EXT                        = 0x34\n\tWIN_WRITE_LONG                       = 0x32\n\tWIN_WRITE_LONG_ONCE                  = 0x33\n\tWIN_WRITE_ONCE                       = 0x31\n\tWIN_WRITE_SAME                       = 0xe9\n\tWIN_WRITE_VERIFY                     = 0x3c\n\tWNOHANG                              = 0x1\n\tWNOTHREAD                            = 0x20000000\n\tWNOWAIT                              = 0x1000000\n\tWORDSIZE                             = 0x20\n\tWSTOPPED                             = 0x2\n\tWUNTRACED                            = 0x2\n\tXATTR_CREATE                         = 0x1\n\tXATTR_REPLACE                        = 0x2\n\tXCASE                                = 0x4\n\tXDP_COPY                             = 0x2\n\tXDP_FLAGS_DRV_MODE                   = 0x4\n\tXDP_FLAGS_HW_MODE                    = 0x8\n\tXDP_FLAGS_MASK                       = 0xf\n\tXDP_FLAGS_MODES                      = 0xe\n\tXDP_FLAGS_SKB_MODE                   = 0x2\n\tXDP_FLAGS_UPDATE_IF_NOEXIST          = 0x1\n\tXDP_MMAP_OFFSETS                     = 0x1\n\tXDP_PACKET_HEADROOM                  = 0x100\n\tXDP_PGOFF_RX_RING                    = 0x0\n\tXDP_PGOFF_TX_RING                    = 0x80000000\n\tXDP_RX_RING                          = 0x2\n\tXDP_SHARED_UMEM                      = 0x1\n\tXDP_STATISTICS                       = 0x7\n\tXDP_TX_RING                          = 0x3\n\tXDP_UMEM_COMPLETION_RING             = 0x6\n\tXDP_UMEM_FILL_RING                   = 0x5\n\tXDP_UMEM_PGOFF_COMPLETION_RING       = 0x180000000\n\tXDP_UMEM_PGOFF_FILL_RING             = 0x100000000\n\tXDP_UMEM_REG                         = 0x4\n\tXDP_ZEROCOPY                         = 0x4\n\tXENFS_SUPER_MAGIC                    = 0xabba1974\n\tXFS_SUPER_MAGIC                      = 0x58465342\n\tXTABS                                = 0x1800\n\tZSMALLOC_MAGIC                       = 0x58295829\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x7d)\n\tEADDRNOTAVAIL   = syscall.Errno(0x7e)\n\tEADV            = syscall.Errno(0x44)\n\tEAFNOSUPPORT    = syscall.Errno(0x7c)\n\tEAGAIN          = syscall.Errno(0xb)\n\tEALREADY        = syscall.Errno(0x95)\n\tEBADE           = syscall.Errno(0x32)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADFD          = syscall.Errno(0x51)\n\tEBADMSG         = syscall.Errno(0x4d)\n\tEBADR           = syscall.Errno(0x33)\n\tEBADRQC         = syscall.Errno(0x36)\n\tEBADSLT         = syscall.Errno(0x37)\n\tEBFONT          = syscall.Errno(0x3b)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x9e)\n\tECHILD          = syscall.Errno(0xa)\n\tECHRNG          = syscall.Errno(0x25)\n\tECOMM           = syscall.Errno(0x46)\n\tECONNABORTED    = syscall.Errno(0x82)\n\tECONNREFUSED    = syscall.Errno(0x92)\n\tECONNRESET      = syscall.Errno(0x83)\n\tEDEADLK         = syscall.Errno(0x2d)\n\tEDEADLOCK       = syscall.Errno(0x38)\n\tEDESTADDRREQ    = syscall.Errno(0x60)\n\tEDOM            = syscall.Errno(0x21)\n\tEDOTDOT         = syscall.Errno(0x49)\n\tEDQUOT          = syscall.Errno(0x46d)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEHOSTDOWN       = syscall.Errno(0x93)\n\tEHOSTUNREACH    = syscall.Errno(0x94)\n\tEHWPOISON       = syscall.Errno(0xa8)\n\tEIDRM           = syscall.Errno(0x24)\n\tEILSEQ          = syscall.Errno(0x58)\n\tEINIT           = syscall.Errno(0x8d)\n\tEINPROGRESS     = syscall.Errno(0x96)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEISCONN         = syscall.Errno(0x85)\n\tEISDIR          = syscall.Errno(0x15)\n\tEISNAM          = syscall.Errno(0x8b)\n\tEKEYEXPIRED     = syscall.Errno(0xa2)\n\tEKEYREJECTED    = syscall.Errno(0xa4)\n\tEKEYREVOKED     = syscall.Errno(0xa3)\n\tEL2HLT          = syscall.Errno(0x2c)\n\tEL2NSYNC        = syscall.Errno(0x26)\n\tEL3HLT          = syscall.Errno(0x27)\n\tEL3RST          = syscall.Errno(0x28)\n\tELIBACC         = syscall.Errno(0x53)\n\tELIBBAD         = syscall.Errno(0x54)\n\tELIBEXEC        = syscall.Errno(0x57)\n\tELIBMAX         = syscall.Errno(0x56)\n\tELIBSCN         = syscall.Errno(0x55)\n\tELNRNG          = syscall.Errno(0x29)\n\tELOOP           = syscall.Errno(0x5a)\n\tEMEDIUMTYPE     = syscall.Errno(0xa0)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x61)\n\tEMULTIHOP       = syscall.Errno(0x4a)\n\tENAMETOOLONG    = syscall.Errno(0x4e)\n\tENAVAIL         = syscall.Errno(0x8a)\n\tENETDOWN        = syscall.Errno(0x7f)\n\tENETRESET       = syscall.Errno(0x81)\n\tENETUNREACH     = syscall.Errno(0x80)\n\tENFILE          = syscall.Errno(0x17)\n\tENOANO          = syscall.Errno(0x35)\n\tENOBUFS         = syscall.Errno(0x84)\n\tENOCSI          = syscall.Errno(0x2b)\n\tENODATA         = syscall.Errno(0x3d)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOKEY          = syscall.Errno(0xa1)\n\tENOLCK          = syscall.Errno(0x2e)\n\tENOLINK         = syscall.Errno(0x43)\n\tENOMEDIUM       = syscall.Errno(0x9f)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x23)\n\tENONET          = syscall.Errno(0x40)\n\tENOPKG          = syscall.Errno(0x41)\n\tENOPROTOOPT     = syscall.Errno(0x63)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSR           = syscall.Errno(0x3f)\n\tENOSTR          = syscall.Errno(0x3c)\n\tENOSYS          = syscall.Errno(0x59)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x86)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x5d)\n\tENOTNAM         = syscall.Errno(0x89)\n\tENOTRECOVERABLE = syscall.Errno(0xa6)\n\tENOTSOCK        = syscall.Errno(0x5f)\n\tENOTSUP         = syscall.Errno(0x7a)\n\tENOTTY          = syscall.Errno(0x19)\n\tENOTUNIQ        = syscall.Errno(0x50)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x7a)\n\tEOVERFLOW       = syscall.Errno(0x4f)\n\tEOWNERDEAD      = syscall.Errno(0xa5)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x7b)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROTO          = syscall.Errno(0x47)\n\tEPROTONOSUPPORT = syscall.Errno(0x78)\n\tEPROTOTYPE      = syscall.Errno(0x62)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMCHG         = syscall.Errno(0x52)\n\tEREMDEV         = syscall.Errno(0x8e)\n\tEREMOTE         = syscall.Errno(0x42)\n\tEREMOTEIO       = syscall.Errno(0x8c)\n\tERESTART        = syscall.Errno(0x5b)\n\tERFKILL         = syscall.Errno(0xa7)\n\tEROFS           = syscall.Errno(0x1e)\n\tESHUTDOWN       = syscall.Errno(0x8f)\n\tESOCKTNOSUPPORT = syscall.Errno(0x79)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESRMNT          = syscall.Errno(0x45)\n\tESTALE          = syscall.Errno(0x97)\n\tESTRPIPE        = syscall.Errno(0x5c)\n\tETIME           = syscall.Errno(0x3e)\n\tETIMEDOUT       = syscall.Errno(0x91)\n\tETOOMANYREFS    = syscall.Errno(0x90)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUCLEAN         = syscall.Errno(0x87)\n\tEUNATCH         = syscall.Errno(0x2a)\n\tEUSERS          = syscall.Errno(0x5e)\n\tEWOULDBLOCK     = syscall.Errno(0xb)\n\tEXDEV           = syscall.Errno(0x12)\n\tEXFULL          = syscall.Errno(0x34)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x12)\n\tSIGCLD    = syscall.Signal(0x12)\n\tSIGCONT   = syscall.Signal(0x19)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x16)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPOLL   = syscall.Signal(0x16)\n\tSIGPROF   = syscall.Signal(0x1d)\n\tSIGPWR    = syscall.Signal(0x13)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTOP   = syscall.Signal(0x17)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x18)\n\tSIGTTIN   = syscall.Signal(0x1a)\n\tSIGTTOU   = syscall.Signal(0x1b)\n\tSIGURG    = syscall.Signal(0x15)\n\tSIGUSR1   = syscall.Signal(0x10)\n\tSIGUSR2   = syscall.Signal(0x11)\n\tSIGVTALRM = syscall.Signal(0x1c)\n\tSIGWINCH  = syscall.Signal(0x14)\n\tSIGXCPU   = syscall.Signal(0x1e)\n\tSIGXFSZ   = syscall.Signal(0x1f)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"no such device or address\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device or resource busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"invalid cross-device link\"},\n\t{19, \"ENODEV\", \"no such device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"numerical result out of range\"},\n\t{35, \"ENOMSG\", \"no message of desired type\"},\n\t{36, \"EIDRM\", \"identifier removed\"},\n\t{37, \"ECHRNG\", \"channel number out of range\"},\n\t{38, \"EL2NSYNC\", \"level 2 not synchronized\"},\n\t{39, \"EL3HLT\", \"level 3 halted\"},\n\t{40, \"EL3RST\", \"level 3 reset\"},\n\t{41, \"ELNRNG\", \"link number out of range\"},\n\t{42, \"EUNATCH\", \"protocol driver not attached\"},\n\t{43, \"ENOCSI\", \"no CSI structure available\"},\n\t{44, \"EL2HLT\", \"level 2 halted\"},\n\t{45, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{46, \"ENOLCK\", \"no locks available\"},\n\t{50, \"EBADE\", \"invalid exchange\"},\n\t{51, \"EBADR\", \"invalid request descriptor\"},\n\t{52, \"EXFULL\", \"exchange full\"},\n\t{53, \"ENOANO\", \"no anode\"},\n\t{54, \"EBADRQC\", \"invalid request code\"},\n\t{55, \"EBADSLT\", \"invalid slot\"},\n\t{56, \"EDEADLOCK\", \"file locking deadlock error\"},\n\t{59, \"EBFONT\", \"bad font file format\"},\n\t{60, \"ENOSTR\", \"device not a stream\"},\n\t{61, \"ENODATA\", \"no data available\"},\n\t{62, \"ETIME\", \"timer expired\"},\n\t{63, \"ENOSR\", \"out of streams resources\"},\n\t{64, \"ENONET\", \"machine is not on the network\"},\n\t{65, \"ENOPKG\", \"package not installed\"},\n\t{66, \"EREMOTE\", \"object is remote\"},\n\t{67, \"ENOLINK\", \"link has been severed\"},\n\t{68, \"EADV\", \"advertise error\"},\n\t{69, \"ESRMNT\", \"srmount error\"},\n\t{70, \"ECOMM\", \"communication error on send\"},\n\t{71, \"EPROTO\", \"protocol error\"},\n\t{73, \"EDOTDOT\", \"RFS specific error\"},\n\t{74, \"EMULTIHOP\", \"multihop attempted\"},\n\t{77, \"EBADMSG\", \"bad message\"},\n\t{78, \"ENAMETOOLONG\", \"file name too long\"},\n\t{79, \"EOVERFLOW\", \"value too large for defined data type\"},\n\t{80, \"ENOTUNIQ\", \"name not unique on network\"},\n\t{81, \"EBADFD\", \"file descriptor in bad state\"},\n\t{82, \"EREMCHG\", \"remote address changed\"},\n\t{83, \"ELIBACC\", \"can not access a needed shared library\"},\n\t{84, \"ELIBBAD\", \"accessing a corrupted shared library\"},\n\t{85, \"ELIBSCN\", \".lib section in a.out corrupted\"},\n\t{86, \"ELIBMAX\", \"attempting to link in too many shared libraries\"},\n\t{87, \"ELIBEXEC\", \"cannot exec a shared library directly\"},\n\t{88, \"EILSEQ\", \"invalid or incomplete multibyte or wide character\"},\n\t{89, \"ENOSYS\", \"function not implemented\"},\n\t{90, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{91, \"ERESTART\", \"interrupted system call should be restarted\"},\n\t{92, \"ESTRPIPE\", \"streams pipe error\"},\n\t{93, \"ENOTEMPTY\", \"directory not empty\"},\n\t{94, \"EUSERS\", \"too many users\"},\n\t{95, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{96, \"EDESTADDRREQ\", \"destination address required\"},\n\t{97, \"EMSGSIZE\", \"message too long\"},\n\t{98, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{99, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{120, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{121, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{122, \"ENOTSUP\", \"operation not supported\"},\n\t{123, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{124, \"EAFNOSUPPORT\", \"address family not supported by protocol\"},\n\t{125, \"EADDRINUSE\", \"address already in use\"},\n\t{126, \"EADDRNOTAVAIL\", \"cannot assign requested address\"},\n\t{127, \"ENETDOWN\", \"network is down\"},\n\t{128, \"ENETUNREACH\", \"network is unreachable\"},\n\t{129, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{130, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{131, \"ECONNRESET\", \"connection reset by peer\"},\n\t{132, \"ENOBUFS\", \"no buffer space available\"},\n\t{133, \"EISCONN\", \"transport endpoint is already connected\"},\n\t{134, \"ENOTCONN\", \"transport endpoint is not connected\"},\n\t{135, \"EUCLEAN\", \"structure needs cleaning\"},\n\t{137, \"ENOTNAM\", \"not a XENIX named type file\"},\n\t{138, \"ENAVAIL\", \"no XENIX semaphores available\"},\n\t{139, \"EISNAM\", \"is a named type file\"},\n\t{140, \"EREMOTEIO\", \"remote I/O error\"},\n\t{141, \"EINIT\", \"unknown error 141\"},\n\t{142, \"EREMDEV\", \"unknown error 142\"},\n\t{143, \"ESHUTDOWN\", \"cannot send after transport endpoint shutdown\"},\n\t{144, \"ETOOMANYREFS\", \"too many references: cannot splice\"},\n\t{145, \"ETIMEDOUT\", \"connection timed out\"},\n\t{146, \"ECONNREFUSED\", \"connection refused\"},\n\t{147, \"EHOSTDOWN\", \"host is down\"},\n\t{148, \"EHOSTUNREACH\", \"no route to host\"},\n\t{149, \"EALREADY\", \"operation already in progress\"},\n\t{150, \"EINPROGRESS\", \"operation now in progress\"},\n\t{151, \"ESTALE\", \"stale file handle\"},\n\t{158, \"ECANCELED\", \"operation canceled\"},\n\t{159, \"ENOMEDIUM\", \"no medium found\"},\n\t{160, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{161, \"ENOKEY\", \"required key not available\"},\n\t{162, \"EKEYEXPIRED\", \"key has expired\"},\n\t{163, \"EKEYREVOKED\", \"key has been revoked\"},\n\t{164, \"EKEYREJECTED\", \"key was rejected by service\"},\n\t{165, \"EOWNERDEAD\", \"owner died\"},\n\t{166, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{167, \"ERFKILL\", \"operation not possible due to RF-kill\"},\n\t{168, \"EHWPOISON\", \"memory page has hardware error\"},\n\t{1133, \"EDQUOT\", \"disk quota exceeded\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/breakpoint trap\"},\n\t{6, \"SIGABRT\", \"aborted\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGUSR1\", \"user defined signal 1\"},\n\t{17, \"SIGUSR2\", \"user defined signal 2\"},\n\t{18, \"SIGCHLD\", \"child exited\"},\n\t{19, \"SIGPWR\", \"power failure\"},\n\t{20, \"SIGWINCH\", \"window changed\"},\n\t{21, \"SIGURG\", \"urgent I/O condition\"},\n\t{22, \"SIGIO\", \"I/O possible\"},\n\t{23, \"SIGSTOP\", \"stopped (signal)\"},\n\t{24, \"SIGTSTP\", \"stopped\"},\n\t{25, \"SIGCONT\", \"continued\"},\n\t{26, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{27, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{28, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{29, \"SIGPROF\", \"profiling timer expired\"},\n\t{30, \"SIGXCPU\", \"CPU time limit exceeded\"},\n\t{31, \"SIGXFSZ\", \"file size limit exceeded\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go",
    "content": "// mkerrors.sh -Wall -Werror -static -I/tmp/include\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build mips64,linux\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAAFS_MAGIC                           = 0x5a3c69f0\n\tADFS_SUPER_MAGIC                     = 0xadf5\n\tAFFS_SUPER_MAGIC                     = 0xadff\n\tAFS_FS_MAGIC                         = 0x6b414653\n\tAFS_SUPER_MAGIC                      = 0x5346414f\n\tAF_ALG                               = 0x26\n\tAF_APPLETALK                         = 0x5\n\tAF_ASH                               = 0x12\n\tAF_ATMPVC                            = 0x8\n\tAF_ATMSVC                            = 0x14\n\tAF_AX25                              = 0x3\n\tAF_BLUETOOTH                         = 0x1f\n\tAF_BRIDGE                            = 0x7\n\tAF_CAIF                              = 0x25\n\tAF_CAN                               = 0x1d\n\tAF_DECnet                            = 0xc\n\tAF_ECONET                            = 0x13\n\tAF_FILE                              = 0x1\n\tAF_IB                                = 0x1b\n\tAF_IEEE802154                        = 0x24\n\tAF_INET                              = 0x2\n\tAF_INET6                             = 0xa\n\tAF_IPX                               = 0x4\n\tAF_IRDA                              = 0x17\n\tAF_ISDN                              = 0x22\n\tAF_IUCV                              = 0x20\n\tAF_KCM                               = 0x29\n\tAF_KEY                               = 0xf\n\tAF_LLC                               = 0x1a\n\tAF_LOCAL                             = 0x1\n\tAF_MAX                               = 0x2d\n\tAF_MPLS                              = 0x1c\n\tAF_NETBEUI                           = 0xd\n\tAF_NETLINK                           = 0x10\n\tAF_NETROM                            = 0x6\n\tAF_NFC                               = 0x27\n\tAF_PACKET                            = 0x11\n\tAF_PHONET                            = 0x23\n\tAF_PPPOX                             = 0x18\n\tAF_QIPCRTR                           = 0x2a\n\tAF_RDS                               = 0x15\n\tAF_ROSE                              = 0xb\n\tAF_ROUTE                             = 0x10\n\tAF_RXRPC                             = 0x21\n\tAF_SECURITY                          = 0xe\n\tAF_SMC                               = 0x2b\n\tAF_SNA                               = 0x16\n\tAF_TIPC                              = 0x1e\n\tAF_UNIX                              = 0x1\n\tAF_UNSPEC                            = 0x0\n\tAF_VSOCK                             = 0x28\n\tAF_WANPIPE                           = 0x19\n\tAF_X25                               = 0x9\n\tAF_XDP                               = 0x2c\n\tALG_OP_DECRYPT                       = 0x0\n\tALG_OP_ENCRYPT                       = 0x1\n\tALG_SET_AEAD_ASSOCLEN                = 0x4\n\tALG_SET_AEAD_AUTHSIZE                = 0x5\n\tALG_SET_IV                           = 0x2\n\tALG_SET_KEY                          = 0x1\n\tALG_SET_OP                           = 0x3\n\tANON_INODE_FS_MAGIC                  = 0x9041934\n\tARPHRD_6LOWPAN                       = 0x339\n\tARPHRD_ADAPT                         = 0x108\n\tARPHRD_APPLETLK                      = 0x8\n\tARPHRD_ARCNET                        = 0x7\n\tARPHRD_ASH                           = 0x30d\n\tARPHRD_ATM                           = 0x13\n\tARPHRD_AX25                          = 0x3\n\tARPHRD_BIF                           = 0x307\n\tARPHRD_CAIF                          = 0x336\n\tARPHRD_CAN                           = 0x118\n\tARPHRD_CHAOS                         = 0x5\n\tARPHRD_CISCO                         = 0x201\n\tARPHRD_CSLIP                         = 0x101\n\tARPHRD_CSLIP6                        = 0x103\n\tARPHRD_DDCMP                         = 0x205\n\tARPHRD_DLCI                          = 0xf\n\tARPHRD_ECONET                        = 0x30e\n\tARPHRD_EETHER                        = 0x2\n\tARPHRD_ETHER                         = 0x1\n\tARPHRD_EUI64                         = 0x1b\n\tARPHRD_FCAL                          = 0x311\n\tARPHRD_FCFABRIC                      = 0x313\n\tARPHRD_FCPL                          = 0x312\n\tARPHRD_FCPP                          = 0x310\n\tARPHRD_FDDI                          = 0x306\n\tARPHRD_FRAD                          = 0x302\n\tARPHRD_HDLC                          = 0x201\n\tARPHRD_HIPPI                         = 0x30c\n\tARPHRD_HWX25                         = 0x110\n\tARPHRD_IEEE1394                      = 0x18\n\tARPHRD_IEEE802                       = 0x6\n\tARPHRD_IEEE80211                     = 0x321\n\tARPHRD_IEEE80211_PRISM               = 0x322\n\tARPHRD_IEEE80211_RADIOTAP            = 0x323\n\tARPHRD_IEEE802154                    = 0x324\n\tARPHRD_IEEE802154_MONITOR            = 0x325\n\tARPHRD_IEEE802_TR                    = 0x320\n\tARPHRD_INFINIBAND                    = 0x20\n\tARPHRD_IP6GRE                        = 0x337\n\tARPHRD_IPDDP                         = 0x309\n\tARPHRD_IPGRE                         = 0x30a\n\tARPHRD_IRDA                          = 0x30f\n\tARPHRD_LAPB                          = 0x204\n\tARPHRD_LOCALTLK                      = 0x305\n\tARPHRD_LOOPBACK                      = 0x304\n\tARPHRD_METRICOM                      = 0x17\n\tARPHRD_NETLINK                       = 0x338\n\tARPHRD_NETROM                        = 0x0\n\tARPHRD_NONE                          = 0xfffe\n\tARPHRD_PHONET                        = 0x334\n\tARPHRD_PHONET_PIPE                   = 0x335\n\tARPHRD_PIMREG                        = 0x30b\n\tARPHRD_PPP                           = 0x200\n\tARPHRD_PRONET                        = 0x4\n\tARPHRD_RAWHDLC                       = 0x206\n\tARPHRD_RAWIP                         = 0x207\n\tARPHRD_ROSE                          = 0x10e\n\tARPHRD_RSRVD                         = 0x104\n\tARPHRD_SIT                           = 0x308\n\tARPHRD_SKIP                          = 0x303\n\tARPHRD_SLIP                          = 0x100\n\tARPHRD_SLIP6                         = 0x102\n\tARPHRD_TUNNEL                        = 0x300\n\tARPHRD_TUNNEL6                       = 0x301\n\tARPHRD_VOID                          = 0xffff\n\tARPHRD_VSOCKMON                      = 0x33a\n\tARPHRD_X25                           = 0x10f\n\tAUTOFS_SUPER_MAGIC                   = 0x187\n\tB0                                   = 0x0\n\tB1000000                             = 0x1008\n\tB110                                 = 0x3\n\tB115200                              = 0x1002\n\tB1152000                             = 0x1009\n\tB1200                                = 0x9\n\tB134                                 = 0x4\n\tB150                                 = 0x5\n\tB1500000                             = 0x100a\n\tB1800                                = 0xa\n\tB19200                               = 0xe\n\tB200                                 = 0x6\n\tB2000000                             = 0x100b\n\tB230400                              = 0x1003\n\tB2400                                = 0xb\n\tB2500000                             = 0x100c\n\tB300                                 = 0x7\n\tB3000000                             = 0x100d\n\tB3500000                             = 0x100e\n\tB38400                               = 0xf\n\tB4000000                             = 0x100f\n\tB460800                              = 0x1004\n\tB4800                                = 0xc\n\tB50                                  = 0x1\n\tB500000                              = 0x1005\n\tB57600                               = 0x1001\n\tB576000                              = 0x1006\n\tB600                                 = 0x8\n\tB75                                  = 0x2\n\tB921600                              = 0x1007\n\tB9600                                = 0xd\n\tBALLOON_KVM_MAGIC                    = 0x13661366\n\tBDEVFS_MAGIC                         = 0x62646576\n\tBINDERFS_SUPER_MAGIC                 = 0x6c6f6f70\n\tBINFMTFS_MAGIC                       = 0x42494e4d\n\tBLKBSZGET                            = 0x40081270\n\tBLKBSZSET                            = 0x80081271\n\tBLKFLSBUF                            = 0x20001261\n\tBLKFRAGET                            = 0x20001265\n\tBLKFRASET                            = 0x20001264\n\tBLKGETSIZE                           = 0x20001260\n\tBLKGETSIZE64                         = 0x40081272\n\tBLKPBSZGET                           = 0x2000127b\n\tBLKRAGET                             = 0x20001263\n\tBLKRASET                             = 0x20001262\n\tBLKROGET                             = 0x2000125e\n\tBLKROSET                             = 0x2000125d\n\tBLKRRPART                            = 0x2000125f\n\tBLKSECTGET                           = 0x20001267\n\tBLKSECTSET                           = 0x20001266\n\tBLKSSZGET                            = 0x20001268\n\tBOTHER                               = 0x1000\n\tBPF_A                                = 0x10\n\tBPF_ABS                              = 0x20\n\tBPF_ADD                              = 0x0\n\tBPF_ALU                              = 0x4\n\tBPF_ALU64                            = 0x7\n\tBPF_AND                              = 0x50\n\tBPF_ANY                              = 0x0\n\tBPF_ARSH                             = 0xc0\n\tBPF_B                                = 0x10\n\tBPF_BUILD_ID_SIZE                    = 0x14\n\tBPF_CALL                             = 0x80\n\tBPF_DEVCG_ACC_MKNOD                  = 0x1\n\tBPF_DEVCG_ACC_READ                   = 0x2\n\tBPF_DEVCG_ACC_WRITE                  = 0x4\n\tBPF_DEVCG_DEV_BLOCK                  = 0x1\n\tBPF_DEVCG_DEV_CHAR                   = 0x2\n\tBPF_DIV                              = 0x30\n\tBPF_DW                               = 0x18\n\tBPF_END                              = 0xd0\n\tBPF_EXIST                            = 0x2\n\tBPF_EXIT                             = 0x90\n\tBPF_FROM_BE                          = 0x8\n\tBPF_FROM_LE                          = 0x0\n\tBPF_FS_MAGIC                         = 0xcafe4a11\n\tBPF_F_ALLOW_MULTI                    = 0x2\n\tBPF_F_ALLOW_OVERRIDE                 = 0x1\n\tBPF_F_ANY_ALIGNMENT                  = 0x2\n\tBPF_F_CTXLEN_MASK                    = 0xfffff00000000\n\tBPF_F_CURRENT_CPU                    = 0xffffffff\n\tBPF_F_CURRENT_NETNS                  = -0x1\n\tBPF_F_DONT_FRAGMENT                  = 0x4\n\tBPF_F_FAST_STACK_CMP                 = 0x200\n\tBPF_F_HDR_FIELD_MASK                 = 0xf\n\tBPF_F_INDEX_MASK                     = 0xffffffff\n\tBPF_F_INGRESS                        = 0x1\n\tBPF_F_INVALIDATE_HASH                = 0x2\n\tBPF_F_LOCK                           = 0x4\n\tBPF_F_MARK_ENFORCE                   = 0x40\n\tBPF_F_MARK_MANGLED_0                 = 0x20\n\tBPF_F_NO_COMMON_LRU                  = 0x2\n\tBPF_F_NO_PREALLOC                    = 0x1\n\tBPF_F_NUMA_NODE                      = 0x4\n\tBPF_F_PSEUDO_HDR                     = 0x10\n\tBPF_F_QUERY_EFFECTIVE                = 0x1\n\tBPF_F_RDONLY                         = 0x8\n\tBPF_F_RECOMPUTE_CSUM                 = 0x1\n\tBPF_F_REUSE_STACKID                  = 0x400\n\tBPF_F_SEQ_NUMBER                     = 0x8\n\tBPF_F_SKIP_FIELD_MASK                = 0xff\n\tBPF_F_STACK_BUILD_ID                 = 0x20\n\tBPF_F_STRICT_ALIGNMENT               = 0x1\n\tBPF_F_TUNINFO_IPV6                   = 0x1\n\tBPF_F_USER_BUILD_ID                  = 0x800\n\tBPF_F_USER_STACK                     = 0x100\n\tBPF_F_WRONLY                         = 0x10\n\tBPF_F_ZERO_CSUM_TX                   = 0x2\n\tBPF_F_ZERO_SEED                      = 0x40\n\tBPF_H                                = 0x8\n\tBPF_IMM                              = 0x0\n\tBPF_IND                              = 0x40\n\tBPF_JA                               = 0x0\n\tBPF_JEQ                              = 0x10\n\tBPF_JGE                              = 0x30\n\tBPF_JGT                              = 0x20\n\tBPF_JLE                              = 0xb0\n\tBPF_JLT                              = 0xa0\n\tBPF_JMP                              = 0x5\n\tBPF_JMP32                            = 0x6\n\tBPF_JNE                              = 0x50\n\tBPF_JSET                             = 0x40\n\tBPF_JSGE                             = 0x70\n\tBPF_JSGT                             = 0x60\n\tBPF_JSLE                             = 0xd0\n\tBPF_JSLT                             = 0xc0\n\tBPF_K                                = 0x0\n\tBPF_LD                               = 0x0\n\tBPF_LDX                              = 0x1\n\tBPF_LEN                              = 0x80\n\tBPF_LL_OFF                           = -0x200000\n\tBPF_LSH                              = 0x60\n\tBPF_MAJOR_VERSION                    = 0x1\n\tBPF_MAXINSNS                         = 0x1000\n\tBPF_MEM                              = 0x60\n\tBPF_MEMWORDS                         = 0x10\n\tBPF_MINOR_VERSION                    = 0x1\n\tBPF_MISC                             = 0x7\n\tBPF_MOD                              = 0x90\n\tBPF_MOV                              = 0xb0\n\tBPF_MSH                              = 0xa0\n\tBPF_MUL                              = 0x20\n\tBPF_NEG                              = 0x80\n\tBPF_NET_OFF                          = -0x100000\n\tBPF_NOEXIST                          = 0x1\n\tBPF_OBJ_NAME_LEN                     = 0x10\n\tBPF_OR                               = 0x40\n\tBPF_PSEUDO_CALL                      = 0x1\n\tBPF_PSEUDO_MAP_FD                    = 0x1\n\tBPF_RET                              = 0x6\n\tBPF_RSH                              = 0x70\n\tBPF_SOCK_OPS_ALL_CB_FLAGS            = 0x7\n\tBPF_SOCK_OPS_RETRANS_CB_FLAG         = 0x2\n\tBPF_SOCK_OPS_RTO_CB_FLAG             = 0x1\n\tBPF_SOCK_OPS_STATE_CB_FLAG           = 0x4\n\tBPF_ST                               = 0x2\n\tBPF_STX                              = 0x3\n\tBPF_SUB                              = 0x10\n\tBPF_TAG_SIZE                         = 0x8\n\tBPF_TAX                              = 0x0\n\tBPF_TO_BE                            = 0x8\n\tBPF_TO_LE                            = 0x0\n\tBPF_TXA                              = 0x80\n\tBPF_W                                = 0x0\n\tBPF_X                                = 0x8\n\tBPF_XADD                             = 0xc0\n\tBPF_XOR                              = 0xa0\n\tBRKINT                               = 0x2\n\tBS0                                  = 0x0\n\tBS1                                  = 0x2000\n\tBSDLY                                = 0x2000\n\tBTRFS_SUPER_MAGIC                    = 0x9123683e\n\tBTRFS_TEST_MAGIC                     = 0x73727279\n\tCAN_BCM                              = 0x2\n\tCAN_EFF_FLAG                         = 0x80000000\n\tCAN_EFF_ID_BITS                      = 0x1d\n\tCAN_EFF_MASK                         = 0x1fffffff\n\tCAN_ERR_FLAG                         = 0x20000000\n\tCAN_ERR_MASK                         = 0x1fffffff\n\tCAN_INV_FILTER                       = 0x20000000\n\tCAN_ISOTP                            = 0x6\n\tCAN_MAX_DLC                          = 0x8\n\tCAN_MAX_DLEN                         = 0x8\n\tCAN_MCNET                            = 0x5\n\tCAN_MTU                              = 0x10\n\tCAN_NPROTO                           = 0x7\n\tCAN_RAW                              = 0x1\n\tCAN_RAW_FILTER_MAX                   = 0x200\n\tCAN_RTR_FLAG                         = 0x40000000\n\tCAN_SFF_ID_BITS                      = 0xb\n\tCAN_SFF_MASK                         = 0x7ff\n\tCAN_TP16                             = 0x3\n\tCAN_TP20                             = 0x4\n\tCBAUD                                = 0x100f\n\tCBAUDEX                              = 0x1000\n\tCFLUSH                               = 0xf\n\tCGROUP2_SUPER_MAGIC                  = 0x63677270\n\tCGROUP_SUPER_MAGIC                   = 0x27e0eb\n\tCIBAUD                               = 0x100f0000\n\tCLOCAL                               = 0x800\n\tCLOCK_BOOTTIME                       = 0x7\n\tCLOCK_BOOTTIME_ALARM                 = 0x9\n\tCLOCK_DEFAULT                        = 0x0\n\tCLOCK_EXT                            = 0x1\n\tCLOCK_INT                            = 0x2\n\tCLOCK_MONOTONIC                      = 0x1\n\tCLOCK_MONOTONIC_COARSE               = 0x6\n\tCLOCK_MONOTONIC_RAW                  = 0x4\n\tCLOCK_PROCESS_CPUTIME_ID             = 0x2\n\tCLOCK_REALTIME                       = 0x0\n\tCLOCK_REALTIME_ALARM                 = 0x8\n\tCLOCK_REALTIME_COARSE                = 0x5\n\tCLOCK_TAI                            = 0xb\n\tCLOCK_THREAD_CPUTIME_ID              = 0x3\n\tCLOCK_TXFROMRX                       = 0x4\n\tCLOCK_TXINT                          = 0x3\n\tCLONE_CHILD_CLEARTID                 = 0x200000\n\tCLONE_CHILD_SETTID                   = 0x1000000\n\tCLONE_DETACHED                       = 0x400000\n\tCLONE_FILES                          = 0x400\n\tCLONE_FS                             = 0x200\n\tCLONE_IO                             = 0x80000000\n\tCLONE_NEWCGROUP                      = 0x2000000\n\tCLONE_NEWIPC                         = 0x8000000\n\tCLONE_NEWNET                         = 0x40000000\n\tCLONE_NEWNS                          = 0x20000\n\tCLONE_NEWPID                         = 0x20000000\n\tCLONE_NEWUSER                        = 0x10000000\n\tCLONE_NEWUTS                         = 0x4000000\n\tCLONE_PARENT                         = 0x8000\n\tCLONE_PARENT_SETTID                  = 0x100000\n\tCLONE_PTRACE                         = 0x2000\n\tCLONE_SETTLS                         = 0x80000\n\tCLONE_SIGHAND                        = 0x800\n\tCLONE_SYSVSEM                        = 0x40000\n\tCLONE_THREAD                         = 0x10000\n\tCLONE_UNTRACED                       = 0x800000\n\tCLONE_VFORK                          = 0x4000\n\tCLONE_VM                             = 0x100\n\tCMSPAR                               = 0x40000000\n\tCODA_SUPER_MAGIC                     = 0x73757245\n\tCR0                                  = 0x0\n\tCR1                                  = 0x200\n\tCR2                                  = 0x400\n\tCR3                                  = 0x600\n\tCRAMFS_MAGIC                         = 0x28cd3d45\n\tCRDLY                                = 0x600\n\tCREAD                                = 0x80\n\tCRTSCTS                              = 0x80000000\n\tCRYPTO_MAX_NAME                      = 0x40\n\tCRYPTO_MSG_MAX                       = 0x15\n\tCRYPTO_NR_MSGTYPES                   = 0x6\n\tCRYPTO_REPORT_MAXSIZE                = 0x160\n\tCS5                                  = 0x0\n\tCS6                                  = 0x10\n\tCS7                                  = 0x20\n\tCS8                                  = 0x30\n\tCSIGNAL                              = 0xff\n\tCSIZE                                = 0x30\n\tCSTART                               = 0x11\n\tCSTATUS                              = 0x0\n\tCSTOP                                = 0x13\n\tCSTOPB                               = 0x40\n\tCSUSP                                = 0x1a\n\tDAXFS_MAGIC                          = 0x64646178\n\tDEBUGFS_MAGIC                        = 0x64626720\n\tDEVPTS_SUPER_MAGIC                   = 0x1cd1\n\tDT_BLK                               = 0x6\n\tDT_CHR                               = 0x2\n\tDT_DIR                               = 0x4\n\tDT_FIFO                              = 0x1\n\tDT_LNK                               = 0xa\n\tDT_REG                               = 0x8\n\tDT_SOCK                              = 0xc\n\tDT_UNKNOWN                           = 0x0\n\tDT_WHT                               = 0xe\n\tECHO                                 = 0x8\n\tECHOCTL                              = 0x200\n\tECHOE                                = 0x10\n\tECHOK                                = 0x20\n\tECHOKE                               = 0x800\n\tECHONL                               = 0x40\n\tECHOPRT                              = 0x400\n\tECRYPTFS_SUPER_MAGIC                 = 0xf15f\n\tEFD_CLOEXEC                          = 0x80000\n\tEFD_NONBLOCK                         = 0x80\n\tEFD_SEMAPHORE                        = 0x1\n\tEFIVARFS_MAGIC                       = 0xde5e81e4\n\tEFS_SUPER_MAGIC                      = 0x414a53\n\tENCODING_DEFAULT                     = 0x0\n\tENCODING_FM_MARK                     = 0x3\n\tENCODING_FM_SPACE                    = 0x4\n\tENCODING_MANCHESTER                  = 0x5\n\tENCODING_NRZ                         = 0x1\n\tENCODING_NRZI                        = 0x2\n\tEPOLLERR                             = 0x8\n\tEPOLLET                              = 0x80000000\n\tEPOLLEXCLUSIVE                       = 0x10000000\n\tEPOLLHUP                             = 0x10\n\tEPOLLIN                              = 0x1\n\tEPOLLMSG                             = 0x400\n\tEPOLLONESHOT                         = 0x40000000\n\tEPOLLOUT                             = 0x4\n\tEPOLLPRI                             = 0x2\n\tEPOLLRDBAND                          = 0x80\n\tEPOLLRDHUP                           = 0x2000\n\tEPOLLRDNORM                          = 0x40\n\tEPOLLWAKEUP                          = 0x20000000\n\tEPOLLWRBAND                          = 0x200\n\tEPOLLWRNORM                          = 0x100\n\tEPOLL_CLOEXEC                        = 0x80000\n\tEPOLL_CTL_ADD                        = 0x1\n\tEPOLL_CTL_DEL                        = 0x2\n\tEPOLL_CTL_MOD                        = 0x3\n\tETH_P_1588                           = 0x88f7\n\tETH_P_8021AD                         = 0x88a8\n\tETH_P_8021AH                         = 0x88e7\n\tETH_P_8021Q                          = 0x8100\n\tETH_P_80221                          = 0x8917\n\tETH_P_802_2                          = 0x4\n\tETH_P_802_3                          = 0x1\n\tETH_P_802_3_MIN                      = 0x600\n\tETH_P_802_EX1                        = 0x88b5\n\tETH_P_AARP                           = 0x80f3\n\tETH_P_AF_IUCV                        = 0xfbfb\n\tETH_P_ALL                            = 0x3\n\tETH_P_AOE                            = 0x88a2\n\tETH_P_ARCNET                         = 0x1a\n\tETH_P_ARP                            = 0x806\n\tETH_P_ATALK                          = 0x809b\n\tETH_P_ATMFATE                        = 0x8884\n\tETH_P_ATMMPOA                        = 0x884c\n\tETH_P_AX25                           = 0x2\n\tETH_P_BATMAN                         = 0x4305\n\tETH_P_BPQ                            = 0x8ff\n\tETH_P_CAIF                           = 0xf7\n\tETH_P_CAN                            = 0xc\n\tETH_P_CANFD                          = 0xd\n\tETH_P_CONTROL                        = 0x16\n\tETH_P_CUST                           = 0x6006\n\tETH_P_DDCMP                          = 0x6\n\tETH_P_DEC                            = 0x6000\n\tETH_P_DIAG                           = 0x6005\n\tETH_P_DNA_DL                         = 0x6001\n\tETH_P_DNA_RC                         = 0x6002\n\tETH_P_DNA_RT                         = 0x6003\n\tETH_P_DSA                            = 0x1b\n\tETH_P_ECONET                         = 0x18\n\tETH_P_EDSA                           = 0xdada\n\tETH_P_ERSPAN                         = 0x88be\n\tETH_P_ERSPAN2                        = 0x22eb\n\tETH_P_FCOE                           = 0x8906\n\tETH_P_FIP                            = 0x8914\n\tETH_P_HDLC                           = 0x19\n\tETH_P_HSR                            = 0x892f\n\tETH_P_IBOE                           = 0x8915\n\tETH_P_IEEE802154                     = 0xf6\n\tETH_P_IEEEPUP                        = 0xa00\n\tETH_P_IEEEPUPAT                      = 0xa01\n\tETH_P_IFE                            = 0xed3e\n\tETH_P_IP                             = 0x800\n\tETH_P_IPV6                           = 0x86dd\n\tETH_P_IPX                            = 0x8137\n\tETH_P_IRDA                           = 0x17\n\tETH_P_LAT                            = 0x6004\n\tETH_P_LINK_CTL                       = 0x886c\n\tETH_P_LOCALTALK                      = 0x9\n\tETH_P_LOOP                           = 0x60\n\tETH_P_LOOPBACK                       = 0x9000\n\tETH_P_MACSEC                         = 0x88e5\n\tETH_P_MAP                            = 0xf9\n\tETH_P_MOBITEX                        = 0x15\n\tETH_P_MPLS_MC                        = 0x8848\n\tETH_P_MPLS_UC                        = 0x8847\n\tETH_P_MVRP                           = 0x88f5\n\tETH_P_NCSI                           = 0x88f8\n\tETH_P_NSH                            = 0x894f\n\tETH_P_PAE                            = 0x888e\n\tETH_P_PAUSE                          = 0x8808\n\tETH_P_PHONET                         = 0xf5\n\tETH_P_PPPTALK                        = 0x10\n\tETH_P_PPP_DISC                       = 0x8863\n\tETH_P_PPP_MP                         = 0x8\n\tETH_P_PPP_SES                        = 0x8864\n\tETH_P_PREAUTH                        = 0x88c7\n\tETH_P_PRP                            = 0x88fb\n\tETH_P_PUP                            = 0x200\n\tETH_P_PUPAT                          = 0x201\n\tETH_P_QINQ1                          = 0x9100\n\tETH_P_QINQ2                          = 0x9200\n\tETH_P_QINQ3                          = 0x9300\n\tETH_P_RARP                           = 0x8035\n\tETH_P_SCA                            = 0x6007\n\tETH_P_SLOW                           = 0x8809\n\tETH_P_SNAP                           = 0x5\n\tETH_P_TDLS                           = 0x890d\n\tETH_P_TEB                            = 0x6558\n\tETH_P_TIPC                           = 0x88ca\n\tETH_P_TRAILER                        = 0x1c\n\tETH_P_TR_802_2                       = 0x11\n\tETH_P_TSN                            = 0x22f0\n\tETH_P_WAN_PPP                        = 0x7\n\tETH_P_WCCP                           = 0x883e\n\tETH_P_X25                            = 0x805\n\tETH_P_XDSA                           = 0xf8\n\tEXABYTE_ENABLE_NEST                  = 0xf0\n\tEXT2_SUPER_MAGIC                     = 0xef53\n\tEXT3_SUPER_MAGIC                     = 0xef53\n\tEXT4_SUPER_MAGIC                     = 0xef53\n\tEXTA                                 = 0xe\n\tEXTB                                 = 0xf\n\tEXTPROC                              = 0x10000\n\tF2FS_SUPER_MAGIC                     = 0xf2f52010\n\tFALLOC_FL_COLLAPSE_RANGE             = 0x8\n\tFALLOC_FL_INSERT_RANGE               = 0x20\n\tFALLOC_FL_KEEP_SIZE                  = 0x1\n\tFALLOC_FL_NO_HIDE_STALE              = 0x4\n\tFALLOC_FL_PUNCH_HOLE                 = 0x2\n\tFALLOC_FL_UNSHARE_RANGE              = 0x40\n\tFALLOC_FL_ZERO_RANGE                 = 0x10\n\tFANOTIFY_METADATA_VERSION            = 0x3\n\tFAN_ACCESS                           = 0x1\n\tFAN_ACCESS_PERM                      = 0x20000\n\tFAN_ALLOW                            = 0x1\n\tFAN_ALL_CLASS_BITS                   = 0xc\n\tFAN_ALL_EVENTS                       = 0x3b\n\tFAN_ALL_INIT_FLAGS                   = 0x3f\n\tFAN_ALL_MARK_FLAGS                   = 0xff\n\tFAN_ALL_OUTGOING_EVENTS              = 0x3403b\n\tFAN_ALL_PERM_EVENTS                  = 0x30000\n\tFAN_ATTRIB                           = 0x4\n\tFAN_AUDIT                            = 0x10\n\tFAN_CLASS_CONTENT                    = 0x4\n\tFAN_CLASS_NOTIF                      = 0x0\n\tFAN_CLASS_PRE_CONTENT                = 0x8\n\tFAN_CLOEXEC                          = 0x1\n\tFAN_CLOSE                            = 0x18\n\tFAN_CLOSE_NOWRITE                    = 0x10\n\tFAN_CLOSE_WRITE                      = 0x8\n\tFAN_CREATE                           = 0x100\n\tFAN_DELETE                           = 0x200\n\tFAN_DELETE_SELF                      = 0x400\n\tFAN_DENY                             = 0x2\n\tFAN_ENABLE_AUDIT                     = 0x40\n\tFAN_EVENT_INFO_TYPE_FID              = 0x1\n\tFAN_EVENT_METADATA_LEN               = 0x18\n\tFAN_EVENT_ON_CHILD                   = 0x8000000\n\tFAN_MARK_ADD                         = 0x1\n\tFAN_MARK_DONT_FOLLOW                 = 0x4\n\tFAN_MARK_FILESYSTEM                  = 0x100\n\tFAN_MARK_FLUSH                       = 0x80\n\tFAN_MARK_IGNORED_MASK                = 0x20\n\tFAN_MARK_IGNORED_SURV_MODIFY         = 0x40\n\tFAN_MARK_INODE                       = 0x0\n\tFAN_MARK_MOUNT                       = 0x10\n\tFAN_MARK_ONLYDIR                     = 0x8\n\tFAN_MARK_REMOVE                      = 0x2\n\tFAN_MODIFY                           = 0x2\n\tFAN_MOVE                             = 0xc0\n\tFAN_MOVED_FROM                       = 0x40\n\tFAN_MOVED_TO                         = 0x80\n\tFAN_MOVE_SELF                        = 0x800\n\tFAN_NOFD                             = -0x1\n\tFAN_NONBLOCK                         = 0x2\n\tFAN_ONDIR                            = 0x40000000\n\tFAN_OPEN                             = 0x20\n\tFAN_OPEN_EXEC                        = 0x1000\n\tFAN_OPEN_EXEC_PERM                   = 0x40000\n\tFAN_OPEN_PERM                        = 0x10000\n\tFAN_Q_OVERFLOW                       = 0x4000\n\tFAN_REPORT_FID                       = 0x200\n\tFAN_REPORT_TID                       = 0x100\n\tFAN_UNLIMITED_MARKS                  = 0x20\n\tFAN_UNLIMITED_QUEUE                  = 0x10\n\tFD_CLOEXEC                           = 0x1\n\tFD_SETSIZE                           = 0x400\n\tFF0                                  = 0x0\n\tFF1                                  = 0x8000\n\tFFDLY                                = 0x8000\n\tFLUSHO                               = 0x2000\n\tFS_ENCRYPTION_MODE_ADIANTUM          = 0x9\n\tFS_ENCRYPTION_MODE_AES_128_CBC       = 0x5\n\tFS_ENCRYPTION_MODE_AES_128_CTS       = 0x6\n\tFS_ENCRYPTION_MODE_AES_256_CBC       = 0x3\n\tFS_ENCRYPTION_MODE_AES_256_CTS       = 0x4\n\tFS_ENCRYPTION_MODE_AES_256_GCM       = 0x2\n\tFS_ENCRYPTION_MODE_AES_256_XTS       = 0x1\n\tFS_ENCRYPTION_MODE_INVALID           = 0x0\n\tFS_ENCRYPTION_MODE_SPECK128_256_CTS  = 0x8\n\tFS_ENCRYPTION_MODE_SPECK128_256_XTS  = 0x7\n\tFS_IOC_GET_ENCRYPTION_POLICY         = 0x800c6615\n\tFS_IOC_GET_ENCRYPTION_PWSALT         = 0x80106614\n\tFS_IOC_SET_ENCRYPTION_POLICY         = 0x400c6613\n\tFS_KEY_DESCRIPTOR_SIZE               = 0x8\n\tFS_KEY_DESC_PREFIX                   = \"fscrypt:\"\n\tFS_KEY_DESC_PREFIX_SIZE              = 0x8\n\tFS_MAX_KEY_SIZE                      = 0x40\n\tFS_POLICY_FLAGS_PAD_16               = 0x2\n\tFS_POLICY_FLAGS_PAD_32               = 0x3\n\tFS_POLICY_FLAGS_PAD_4                = 0x0\n\tFS_POLICY_FLAGS_PAD_8                = 0x1\n\tFS_POLICY_FLAGS_PAD_MASK             = 0x3\n\tFS_POLICY_FLAGS_VALID                = 0x7\n\tFUTEXFS_SUPER_MAGIC                  = 0xbad1dea\n\tF_ADD_SEALS                          = 0x409\n\tF_DUPFD                              = 0x0\n\tF_DUPFD_CLOEXEC                      = 0x406\n\tF_EXLCK                              = 0x4\n\tF_GETFD                              = 0x1\n\tF_GETFL                              = 0x3\n\tF_GETLEASE                           = 0x401\n\tF_GETLK                              = 0xe\n\tF_GETLK64                            = 0xe\n\tF_GETOWN                             = 0x17\n\tF_GETOWN_EX                          = 0x10\n\tF_GETPIPE_SZ                         = 0x408\n\tF_GETSIG                             = 0xb\n\tF_GET_FILE_RW_HINT                   = 0x40d\n\tF_GET_RW_HINT                        = 0x40b\n\tF_GET_SEALS                          = 0x40a\n\tF_LOCK                               = 0x1\n\tF_NOTIFY                             = 0x402\n\tF_OFD_GETLK                          = 0x24\n\tF_OFD_SETLK                          = 0x25\n\tF_OFD_SETLKW                         = 0x26\n\tF_OK                                 = 0x0\n\tF_RDLCK                              = 0x0\n\tF_SEAL_GROW                          = 0x4\n\tF_SEAL_SEAL                          = 0x1\n\tF_SEAL_SHRINK                        = 0x2\n\tF_SEAL_WRITE                         = 0x8\n\tF_SETFD                              = 0x2\n\tF_SETFL                              = 0x4\n\tF_SETLEASE                           = 0x400\n\tF_SETLK                              = 0x6\n\tF_SETLK64                            = 0x6\n\tF_SETLKW                             = 0x7\n\tF_SETLKW64                           = 0x7\n\tF_SETOWN                             = 0x18\n\tF_SETOWN_EX                          = 0xf\n\tF_SETPIPE_SZ                         = 0x407\n\tF_SETSIG                             = 0xa\n\tF_SET_FILE_RW_HINT                   = 0x40e\n\tF_SET_RW_HINT                        = 0x40c\n\tF_SHLCK                              = 0x8\n\tF_TEST                               = 0x3\n\tF_TLOCK                              = 0x2\n\tF_ULOCK                              = 0x0\n\tF_UNLCK                              = 0x2\n\tF_WRLCK                              = 0x1\n\tGENL_ADMIN_PERM                      = 0x1\n\tGENL_CMD_CAP_DO                      = 0x2\n\tGENL_CMD_CAP_DUMP                    = 0x4\n\tGENL_CMD_CAP_HASPOL                  = 0x8\n\tGENL_HDRLEN                          = 0x4\n\tGENL_ID_CTRL                         = 0x10\n\tGENL_ID_PMCRAID                      = 0x12\n\tGENL_ID_VFS_DQUOT                    = 0x11\n\tGENL_MAX_ID                          = 0x3ff\n\tGENL_MIN_ID                          = 0x10\n\tGENL_NAMSIZ                          = 0x10\n\tGENL_START_ALLOC                     = 0x13\n\tGENL_UNS_ADMIN_PERM                  = 0x10\n\tGRND_NONBLOCK                        = 0x1\n\tGRND_RANDOM                          = 0x2\n\tHDIO_DRIVE_CMD                       = 0x31f\n\tHDIO_DRIVE_CMD_AEB                   = 0x31e\n\tHDIO_DRIVE_CMD_HDR_SIZE              = 0x4\n\tHDIO_DRIVE_HOB_HDR_SIZE              = 0x8\n\tHDIO_DRIVE_RESET                     = 0x31c\n\tHDIO_DRIVE_TASK                      = 0x31e\n\tHDIO_DRIVE_TASKFILE                  = 0x31d\n\tHDIO_DRIVE_TASK_HDR_SIZE             = 0x8\n\tHDIO_GETGEO                          = 0x301\n\tHDIO_GET_32BIT                       = 0x309\n\tHDIO_GET_ACOUSTIC                    = 0x30f\n\tHDIO_GET_ADDRESS                     = 0x310\n\tHDIO_GET_BUSSTATE                    = 0x31a\n\tHDIO_GET_DMA                         = 0x30b\n\tHDIO_GET_IDENTITY                    = 0x30d\n\tHDIO_GET_KEEPSETTINGS                = 0x308\n\tHDIO_GET_MULTCOUNT                   = 0x304\n\tHDIO_GET_NICE                        = 0x30c\n\tHDIO_GET_NOWERR                      = 0x30a\n\tHDIO_GET_QDMA                        = 0x305\n\tHDIO_GET_UNMASKINTR                  = 0x302\n\tHDIO_GET_WCACHE                      = 0x30e\n\tHDIO_OBSOLETE_IDENTITY               = 0x307\n\tHDIO_SCAN_HWIF                       = 0x328\n\tHDIO_SET_32BIT                       = 0x324\n\tHDIO_SET_ACOUSTIC                    = 0x32c\n\tHDIO_SET_ADDRESS                     = 0x32f\n\tHDIO_SET_BUSSTATE                    = 0x32d\n\tHDIO_SET_DMA                         = 0x326\n\tHDIO_SET_KEEPSETTINGS                = 0x323\n\tHDIO_SET_MULTCOUNT                   = 0x321\n\tHDIO_SET_NICE                        = 0x329\n\tHDIO_SET_NOWERR                      = 0x325\n\tHDIO_SET_PIO_MODE                    = 0x327\n\tHDIO_SET_QDMA                        = 0x32e\n\tHDIO_SET_UNMASKINTR                  = 0x322\n\tHDIO_SET_WCACHE                      = 0x32b\n\tHDIO_SET_XFER                        = 0x306\n\tHDIO_TRISTATE_HWIF                   = 0x31b\n\tHDIO_UNREGISTER_HWIF                 = 0x32a\n\tHOSTFS_SUPER_MAGIC                   = 0xc0ffee\n\tHPFS_SUPER_MAGIC                     = 0xf995e849\n\tHUGETLBFS_MAGIC                      = 0x958458f6\n\tHUPCL                                = 0x400\n\tIBSHIFT                              = 0x10\n\tICANON                               = 0x2\n\tICMPV6_FILTER                        = 0x1\n\tICRNL                                = 0x100\n\tIEXTEN                               = 0x100\n\tIFA_F_DADFAILED                      = 0x8\n\tIFA_F_DEPRECATED                     = 0x20\n\tIFA_F_HOMEADDRESS                    = 0x10\n\tIFA_F_MANAGETEMPADDR                 = 0x100\n\tIFA_F_MCAUTOJOIN                     = 0x400\n\tIFA_F_NODAD                          = 0x2\n\tIFA_F_NOPREFIXROUTE                  = 0x200\n\tIFA_F_OPTIMISTIC                     = 0x4\n\tIFA_F_PERMANENT                      = 0x80\n\tIFA_F_SECONDARY                      = 0x1\n\tIFA_F_STABLE_PRIVACY                 = 0x800\n\tIFA_F_TEMPORARY                      = 0x1\n\tIFA_F_TENTATIVE                      = 0x40\n\tIFA_MAX                              = 0xa\n\tIFF_ALLMULTI                         = 0x200\n\tIFF_ATTACH_QUEUE                     = 0x200\n\tIFF_AUTOMEDIA                        = 0x4000\n\tIFF_BROADCAST                        = 0x2\n\tIFF_DEBUG                            = 0x4\n\tIFF_DETACH_QUEUE                     = 0x400\n\tIFF_DORMANT                          = 0x20000\n\tIFF_DYNAMIC                          = 0x8000\n\tIFF_ECHO                             = 0x40000\n\tIFF_LOOPBACK                         = 0x8\n\tIFF_LOWER_UP                         = 0x10000\n\tIFF_MASTER                           = 0x400\n\tIFF_MULTICAST                        = 0x1000\n\tIFF_MULTI_QUEUE                      = 0x100\n\tIFF_NAPI                             = 0x10\n\tIFF_NAPI_FRAGS                       = 0x20\n\tIFF_NOARP                            = 0x80\n\tIFF_NOFILTER                         = 0x1000\n\tIFF_NOTRAILERS                       = 0x20\n\tIFF_NO_PI                            = 0x1000\n\tIFF_ONE_QUEUE                        = 0x2000\n\tIFF_PERSIST                          = 0x800\n\tIFF_POINTOPOINT                      = 0x10\n\tIFF_PORTSEL                          = 0x2000\n\tIFF_PROMISC                          = 0x100\n\tIFF_RUNNING                          = 0x40\n\tIFF_SLAVE                            = 0x800\n\tIFF_TAP                              = 0x2\n\tIFF_TUN                              = 0x1\n\tIFF_TUN_EXCL                         = 0x8000\n\tIFF_UP                               = 0x1\n\tIFF_VNET_HDR                         = 0x4000\n\tIFF_VOLATILE                         = 0x70c5a\n\tIFNAMSIZ                             = 0x10\n\tIGNBRK                               = 0x1\n\tIGNCR                                = 0x80\n\tIGNPAR                               = 0x4\n\tIMAXBEL                              = 0x2000\n\tINLCR                                = 0x40\n\tINPCK                                = 0x10\n\tIN_ACCESS                            = 0x1\n\tIN_ALL_EVENTS                        = 0xfff\n\tIN_ATTRIB                            = 0x4\n\tIN_CLASSA_HOST                       = 0xffffff\n\tIN_CLASSA_MAX                        = 0x80\n\tIN_CLASSA_NET                        = 0xff000000\n\tIN_CLASSA_NSHIFT                     = 0x18\n\tIN_CLASSB_HOST                       = 0xffff\n\tIN_CLASSB_MAX                        = 0x10000\n\tIN_CLASSB_NET                        = 0xffff0000\n\tIN_CLASSB_NSHIFT                     = 0x10\n\tIN_CLASSC_HOST                       = 0xff\n\tIN_CLASSC_NET                        = 0xffffff00\n\tIN_CLASSC_NSHIFT                     = 0x8\n\tIN_CLOEXEC                           = 0x80000\n\tIN_CLOSE                             = 0x18\n\tIN_CLOSE_NOWRITE                     = 0x10\n\tIN_CLOSE_WRITE                       = 0x8\n\tIN_CREATE                            = 0x100\n\tIN_DELETE                            = 0x200\n\tIN_DELETE_SELF                       = 0x400\n\tIN_DONT_FOLLOW                       = 0x2000000\n\tIN_EXCL_UNLINK                       = 0x4000000\n\tIN_IGNORED                           = 0x8000\n\tIN_ISDIR                             = 0x40000000\n\tIN_LOOPBACKNET                       = 0x7f\n\tIN_MASK_ADD                          = 0x20000000\n\tIN_MASK_CREATE                       = 0x10000000\n\tIN_MODIFY                            = 0x2\n\tIN_MOVE                              = 0xc0\n\tIN_MOVED_FROM                        = 0x40\n\tIN_MOVED_TO                          = 0x80\n\tIN_MOVE_SELF                         = 0x800\n\tIN_NONBLOCK                          = 0x80\n\tIN_ONESHOT                           = 0x80000000\n\tIN_ONLYDIR                           = 0x1000000\n\tIN_OPEN                              = 0x20\n\tIN_Q_OVERFLOW                        = 0x4000\n\tIN_UNMOUNT                           = 0x2000\n\tIOCTL_VM_SOCKETS_GET_LOCAL_CID       = 0x200007b9\n\tIPPROTO_AH                           = 0x33\n\tIPPROTO_BEETPH                       = 0x5e\n\tIPPROTO_COMP                         = 0x6c\n\tIPPROTO_DCCP                         = 0x21\n\tIPPROTO_DSTOPTS                      = 0x3c\n\tIPPROTO_EGP                          = 0x8\n\tIPPROTO_ENCAP                        = 0x62\n\tIPPROTO_ESP                          = 0x32\n\tIPPROTO_FRAGMENT                     = 0x2c\n\tIPPROTO_GRE                          = 0x2f\n\tIPPROTO_HOPOPTS                      = 0x0\n\tIPPROTO_ICMP                         = 0x1\n\tIPPROTO_ICMPV6                       = 0x3a\n\tIPPROTO_IDP                          = 0x16\n\tIPPROTO_IGMP                         = 0x2\n\tIPPROTO_IP                           = 0x0\n\tIPPROTO_IPIP                         = 0x4\n\tIPPROTO_IPV6                         = 0x29\n\tIPPROTO_MH                           = 0x87\n\tIPPROTO_MPLS                         = 0x89\n\tIPPROTO_MTP                          = 0x5c\n\tIPPROTO_NONE                         = 0x3b\n\tIPPROTO_PIM                          = 0x67\n\tIPPROTO_PUP                          = 0xc\n\tIPPROTO_RAW                          = 0xff\n\tIPPROTO_ROUTING                      = 0x2b\n\tIPPROTO_RSVP                         = 0x2e\n\tIPPROTO_SCTP                         = 0x84\n\tIPPROTO_TCP                          = 0x6\n\tIPPROTO_TP                           = 0x1d\n\tIPPROTO_UDP                          = 0x11\n\tIPPROTO_UDPLITE                      = 0x88\n\tIPV6_2292DSTOPTS                     = 0x4\n\tIPV6_2292HOPLIMIT                    = 0x8\n\tIPV6_2292HOPOPTS                     = 0x3\n\tIPV6_2292PKTINFO                     = 0x2\n\tIPV6_2292PKTOPTIONS                  = 0x6\n\tIPV6_2292RTHDR                       = 0x5\n\tIPV6_ADDRFORM                        = 0x1\n\tIPV6_ADDR_PREFERENCES                = 0x48\n\tIPV6_ADD_MEMBERSHIP                  = 0x14\n\tIPV6_AUTHHDR                         = 0xa\n\tIPV6_AUTOFLOWLABEL                   = 0x46\n\tIPV6_CHECKSUM                        = 0x7\n\tIPV6_DONTFRAG                        = 0x3e\n\tIPV6_DROP_MEMBERSHIP                 = 0x15\n\tIPV6_DSTOPTS                         = 0x3b\n\tIPV6_FREEBIND                        = 0x4e\n\tIPV6_HDRINCL                         = 0x24\n\tIPV6_HOPLIMIT                        = 0x34\n\tIPV6_HOPOPTS                         = 0x36\n\tIPV6_IPSEC_POLICY                    = 0x22\n\tIPV6_JOIN_ANYCAST                    = 0x1b\n\tIPV6_JOIN_GROUP                      = 0x14\n\tIPV6_LEAVE_ANYCAST                   = 0x1c\n\tIPV6_LEAVE_GROUP                     = 0x15\n\tIPV6_MINHOPCOUNT                     = 0x49\n\tIPV6_MTU                             = 0x18\n\tIPV6_MTU_DISCOVER                    = 0x17\n\tIPV6_MULTICAST_ALL                   = 0x1d\n\tIPV6_MULTICAST_HOPS                  = 0x12\n\tIPV6_MULTICAST_IF                    = 0x11\n\tIPV6_MULTICAST_LOOP                  = 0x13\n\tIPV6_NEXTHOP                         = 0x9\n\tIPV6_ORIGDSTADDR                     = 0x4a\n\tIPV6_PATHMTU                         = 0x3d\n\tIPV6_PKTINFO                         = 0x32\n\tIPV6_PMTUDISC_DO                     = 0x2\n\tIPV6_PMTUDISC_DONT                   = 0x0\n\tIPV6_PMTUDISC_INTERFACE              = 0x4\n\tIPV6_PMTUDISC_OMIT                   = 0x5\n\tIPV6_PMTUDISC_PROBE                  = 0x3\n\tIPV6_PMTUDISC_WANT                   = 0x1\n\tIPV6_RECVDSTOPTS                     = 0x3a\n\tIPV6_RECVERR                         = 0x19\n\tIPV6_RECVFRAGSIZE                    = 0x4d\n\tIPV6_RECVHOPLIMIT                    = 0x33\n\tIPV6_RECVHOPOPTS                     = 0x35\n\tIPV6_RECVORIGDSTADDR                 = 0x4a\n\tIPV6_RECVPATHMTU                     = 0x3c\n\tIPV6_RECVPKTINFO                     = 0x31\n\tIPV6_RECVRTHDR                       = 0x38\n\tIPV6_RECVTCLASS                      = 0x42\n\tIPV6_ROUTER_ALERT                    = 0x16\n\tIPV6_RTHDR                           = 0x39\n\tIPV6_RTHDRDSTOPTS                    = 0x37\n\tIPV6_RTHDR_LOOSE                     = 0x0\n\tIPV6_RTHDR_STRICT                    = 0x1\n\tIPV6_RTHDR_TYPE_0                    = 0x0\n\tIPV6_RXDSTOPTS                       = 0x3b\n\tIPV6_RXHOPOPTS                       = 0x36\n\tIPV6_TCLASS                          = 0x43\n\tIPV6_TRANSPARENT                     = 0x4b\n\tIPV6_UNICAST_HOPS                    = 0x10\n\tIPV6_UNICAST_IF                      = 0x4c\n\tIPV6_V6ONLY                          = 0x1a\n\tIPV6_XFRM_POLICY                     = 0x23\n\tIP_ADD_MEMBERSHIP                    = 0x23\n\tIP_ADD_SOURCE_MEMBERSHIP             = 0x27\n\tIP_BIND_ADDRESS_NO_PORT              = 0x18\n\tIP_BLOCK_SOURCE                      = 0x26\n\tIP_CHECKSUM                          = 0x17\n\tIP_DEFAULT_MULTICAST_LOOP            = 0x1\n\tIP_DEFAULT_MULTICAST_TTL             = 0x1\n\tIP_DF                                = 0x4000\n\tIP_DROP_MEMBERSHIP                   = 0x24\n\tIP_DROP_SOURCE_MEMBERSHIP            = 0x28\n\tIP_FREEBIND                          = 0xf\n\tIP_HDRINCL                           = 0x3\n\tIP_IPSEC_POLICY                      = 0x10\n\tIP_MAXPACKET                         = 0xffff\n\tIP_MAX_MEMBERSHIPS                   = 0x14\n\tIP_MF                                = 0x2000\n\tIP_MINTTL                            = 0x15\n\tIP_MSFILTER                          = 0x29\n\tIP_MSS                               = 0x240\n\tIP_MTU                               = 0xe\n\tIP_MTU_DISCOVER                      = 0xa\n\tIP_MULTICAST_ALL                     = 0x31\n\tIP_MULTICAST_IF                      = 0x20\n\tIP_MULTICAST_LOOP                    = 0x22\n\tIP_MULTICAST_TTL                     = 0x21\n\tIP_NODEFRAG                          = 0x16\n\tIP_OFFMASK                           = 0x1fff\n\tIP_OPTIONS                           = 0x4\n\tIP_ORIGDSTADDR                       = 0x14\n\tIP_PASSSEC                           = 0x12\n\tIP_PKTINFO                           = 0x8\n\tIP_PKTOPTIONS                        = 0x9\n\tIP_PMTUDISC                          = 0xa\n\tIP_PMTUDISC_DO                       = 0x2\n\tIP_PMTUDISC_DONT                     = 0x0\n\tIP_PMTUDISC_INTERFACE                = 0x4\n\tIP_PMTUDISC_OMIT                     = 0x5\n\tIP_PMTUDISC_PROBE                    = 0x3\n\tIP_PMTUDISC_WANT                     = 0x1\n\tIP_RECVERR                           = 0xb\n\tIP_RECVFRAGSIZE                      = 0x19\n\tIP_RECVOPTS                          = 0x6\n\tIP_RECVORIGDSTADDR                   = 0x14\n\tIP_RECVRETOPTS                       = 0x7\n\tIP_RECVTOS                           = 0xd\n\tIP_RECVTTL                           = 0xc\n\tIP_RETOPTS                           = 0x7\n\tIP_RF                                = 0x8000\n\tIP_ROUTER_ALERT                      = 0x5\n\tIP_TOS                               = 0x1\n\tIP_TRANSPARENT                       = 0x13\n\tIP_TTL                               = 0x2\n\tIP_UNBLOCK_SOURCE                    = 0x25\n\tIP_UNICAST_IF                        = 0x32\n\tIP_XFRM_POLICY                       = 0x11\n\tISIG                                 = 0x1\n\tISOFS_SUPER_MAGIC                    = 0x9660\n\tISTRIP                               = 0x20\n\tIUCLC                                = 0x200\n\tIUTF8                                = 0x4000\n\tIXANY                                = 0x800\n\tIXOFF                                = 0x1000\n\tIXON                                 = 0x400\n\tJFFS2_SUPER_MAGIC                    = 0x72b6\n\tKEXEC_ARCH_386                       = 0x30000\n\tKEXEC_ARCH_68K                       = 0x40000\n\tKEXEC_ARCH_AARCH64                   = 0xb70000\n\tKEXEC_ARCH_ARM                       = 0x280000\n\tKEXEC_ARCH_DEFAULT                   = 0x0\n\tKEXEC_ARCH_IA_64                     = 0x320000\n\tKEXEC_ARCH_MASK                      = 0xffff0000\n\tKEXEC_ARCH_MIPS                      = 0x80000\n\tKEXEC_ARCH_MIPS_LE                   = 0xa0000\n\tKEXEC_ARCH_PPC                       = 0x140000\n\tKEXEC_ARCH_PPC64                     = 0x150000\n\tKEXEC_ARCH_S390                      = 0x160000\n\tKEXEC_ARCH_SH                        = 0x2a0000\n\tKEXEC_ARCH_X86_64                    = 0x3e0000\n\tKEXEC_FILE_NO_INITRAMFS              = 0x4\n\tKEXEC_FILE_ON_CRASH                  = 0x2\n\tKEXEC_FILE_UNLOAD                    = 0x1\n\tKEXEC_ON_CRASH                       = 0x1\n\tKEXEC_PRESERVE_CONTEXT               = 0x2\n\tKEXEC_SEGMENT_MAX                    = 0x10\n\tKEYCTL_ASSUME_AUTHORITY              = 0x10\n\tKEYCTL_CHOWN                         = 0x4\n\tKEYCTL_CLEAR                         = 0x7\n\tKEYCTL_DESCRIBE                      = 0x6\n\tKEYCTL_DH_COMPUTE                    = 0x17\n\tKEYCTL_GET_KEYRING_ID                = 0x0\n\tKEYCTL_GET_PERSISTENT                = 0x16\n\tKEYCTL_GET_SECURITY                  = 0x11\n\tKEYCTL_INSTANTIATE                   = 0xc\n\tKEYCTL_INSTANTIATE_IOV               = 0x14\n\tKEYCTL_INVALIDATE                    = 0x15\n\tKEYCTL_JOIN_SESSION_KEYRING          = 0x1\n\tKEYCTL_LINK                          = 0x8\n\tKEYCTL_NEGATE                        = 0xd\n\tKEYCTL_PKEY_DECRYPT                  = 0x1a\n\tKEYCTL_PKEY_ENCRYPT                  = 0x19\n\tKEYCTL_PKEY_QUERY                    = 0x18\n\tKEYCTL_PKEY_SIGN                     = 0x1b\n\tKEYCTL_PKEY_VERIFY                   = 0x1c\n\tKEYCTL_READ                          = 0xb\n\tKEYCTL_REJECT                        = 0x13\n\tKEYCTL_RESTRICT_KEYRING              = 0x1d\n\tKEYCTL_REVOKE                        = 0x3\n\tKEYCTL_SEARCH                        = 0xa\n\tKEYCTL_SESSION_TO_PARENT             = 0x12\n\tKEYCTL_SETPERM                       = 0x5\n\tKEYCTL_SET_REQKEY_KEYRING            = 0xe\n\tKEYCTL_SET_TIMEOUT                   = 0xf\n\tKEYCTL_SUPPORTS_DECRYPT              = 0x2\n\tKEYCTL_SUPPORTS_ENCRYPT              = 0x1\n\tKEYCTL_SUPPORTS_SIGN                 = 0x4\n\tKEYCTL_SUPPORTS_VERIFY               = 0x8\n\tKEYCTL_UNLINK                        = 0x9\n\tKEYCTL_UPDATE                        = 0x2\n\tKEY_REQKEY_DEFL_DEFAULT              = 0x0\n\tKEY_REQKEY_DEFL_GROUP_KEYRING        = 0x6\n\tKEY_REQKEY_DEFL_NO_CHANGE            = -0x1\n\tKEY_REQKEY_DEFL_PROCESS_KEYRING      = 0x2\n\tKEY_REQKEY_DEFL_REQUESTOR_KEYRING    = 0x7\n\tKEY_REQKEY_DEFL_SESSION_KEYRING      = 0x3\n\tKEY_REQKEY_DEFL_THREAD_KEYRING       = 0x1\n\tKEY_REQKEY_DEFL_USER_KEYRING         = 0x4\n\tKEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5\n\tKEY_SPEC_GROUP_KEYRING               = -0x6\n\tKEY_SPEC_PROCESS_KEYRING             = -0x2\n\tKEY_SPEC_REQKEY_AUTH_KEY             = -0x7\n\tKEY_SPEC_REQUESTOR_KEYRING           = -0x8\n\tKEY_SPEC_SESSION_KEYRING             = -0x3\n\tKEY_SPEC_THREAD_KEYRING              = -0x1\n\tKEY_SPEC_USER_KEYRING                = -0x4\n\tKEY_SPEC_USER_SESSION_KEYRING        = -0x5\n\tLINUX_REBOOT_CMD_CAD_OFF             = 0x0\n\tLINUX_REBOOT_CMD_CAD_ON              = 0x89abcdef\n\tLINUX_REBOOT_CMD_HALT                = 0xcdef0123\n\tLINUX_REBOOT_CMD_KEXEC               = 0x45584543\n\tLINUX_REBOOT_CMD_POWER_OFF           = 0x4321fedc\n\tLINUX_REBOOT_CMD_RESTART             = 0x1234567\n\tLINUX_REBOOT_CMD_RESTART2            = 0xa1b2c3d4\n\tLINUX_REBOOT_CMD_SW_SUSPEND          = 0xd000fce2\n\tLINUX_REBOOT_MAGIC1                  = 0xfee1dead\n\tLINUX_REBOOT_MAGIC2                  = 0x28121969\n\tLOCK_EX                              = 0x2\n\tLOCK_NB                              = 0x4\n\tLOCK_SH                              = 0x1\n\tLOCK_UN                              = 0x8\n\tMADV_DODUMP                          = 0x11\n\tMADV_DOFORK                          = 0xb\n\tMADV_DONTDUMP                        = 0x10\n\tMADV_DONTFORK                        = 0xa\n\tMADV_DONTNEED                        = 0x4\n\tMADV_FREE                            = 0x8\n\tMADV_HUGEPAGE                        = 0xe\n\tMADV_HWPOISON                        = 0x64\n\tMADV_KEEPONFORK                      = 0x13\n\tMADV_MERGEABLE                       = 0xc\n\tMADV_NOHUGEPAGE                      = 0xf\n\tMADV_NORMAL                          = 0x0\n\tMADV_RANDOM                          = 0x1\n\tMADV_REMOVE                          = 0x9\n\tMADV_SEQUENTIAL                      = 0x2\n\tMADV_UNMERGEABLE                     = 0xd\n\tMADV_WILLNEED                        = 0x3\n\tMADV_WIPEONFORK                      = 0x12\n\tMAP_ANON                             = 0x800\n\tMAP_ANONYMOUS                        = 0x800\n\tMAP_DENYWRITE                        = 0x2000\n\tMAP_EXECUTABLE                       = 0x4000\n\tMAP_FILE                             = 0x0\n\tMAP_FIXED                            = 0x10\n\tMAP_FIXED_NOREPLACE                  = 0x100000\n\tMAP_GROWSDOWN                        = 0x1000\n\tMAP_HUGETLB                          = 0x80000\n\tMAP_HUGE_MASK                        = 0x3f\n\tMAP_HUGE_SHIFT                       = 0x1a\n\tMAP_LOCKED                           = 0x8000\n\tMAP_NONBLOCK                         = 0x20000\n\tMAP_NORESERVE                        = 0x400\n\tMAP_POPULATE                         = 0x10000\n\tMAP_PRIVATE                          = 0x2\n\tMAP_RENAME                           = 0x800\n\tMAP_SHARED                           = 0x1\n\tMAP_SHARED_VALIDATE                  = 0x3\n\tMAP_STACK                            = 0x40000\n\tMAP_TYPE                             = 0xf\n\tMCAST_BLOCK_SOURCE                   = 0x2b\n\tMCAST_EXCLUDE                        = 0x0\n\tMCAST_INCLUDE                        = 0x1\n\tMCAST_JOIN_GROUP                     = 0x2a\n\tMCAST_JOIN_SOURCE_GROUP              = 0x2e\n\tMCAST_LEAVE_GROUP                    = 0x2d\n\tMCAST_LEAVE_SOURCE_GROUP             = 0x2f\n\tMCAST_MSFILTER                       = 0x30\n\tMCAST_UNBLOCK_SOURCE                 = 0x2c\n\tMCL_CURRENT                          = 0x1\n\tMCL_FUTURE                           = 0x2\n\tMCL_ONFAULT                          = 0x4\n\tMFD_ALLOW_SEALING                    = 0x2\n\tMFD_CLOEXEC                          = 0x1\n\tMFD_HUGETLB                          = 0x4\n\tMFD_HUGE_16GB                        = -0x78000000\n\tMFD_HUGE_16MB                        = 0x60000000\n\tMFD_HUGE_1GB                         = 0x78000000\n\tMFD_HUGE_1MB                         = 0x50000000\n\tMFD_HUGE_256MB                       = 0x70000000\n\tMFD_HUGE_2GB                         = 0x7c000000\n\tMFD_HUGE_2MB                         = 0x54000000\n\tMFD_HUGE_32MB                        = 0x64000000\n\tMFD_HUGE_512KB                       = 0x4c000000\n\tMFD_HUGE_512MB                       = 0x74000000\n\tMFD_HUGE_64KB                        = 0x40000000\n\tMFD_HUGE_8MB                         = 0x5c000000\n\tMFD_HUGE_MASK                        = 0x3f\n\tMFD_HUGE_SHIFT                       = 0x1a\n\tMINIX2_SUPER_MAGIC                   = 0x2468\n\tMINIX2_SUPER_MAGIC2                  = 0x2478\n\tMINIX3_SUPER_MAGIC                   = 0x4d5a\n\tMINIX_SUPER_MAGIC                    = 0x137f\n\tMINIX_SUPER_MAGIC2                   = 0x138f\n\tMNT_DETACH                           = 0x2\n\tMNT_EXPIRE                           = 0x4\n\tMNT_FORCE                            = 0x1\n\tMODULE_INIT_IGNORE_MODVERSIONS       = 0x1\n\tMODULE_INIT_IGNORE_VERMAGIC          = 0x2\n\tMSDOS_SUPER_MAGIC                    = 0x4d44\n\tMSG_BATCH                            = 0x40000\n\tMSG_CMSG_CLOEXEC                     = 0x40000000\n\tMSG_CONFIRM                          = 0x800\n\tMSG_CTRUNC                           = 0x8\n\tMSG_DONTROUTE                        = 0x4\n\tMSG_DONTWAIT                         = 0x40\n\tMSG_EOR                              = 0x80\n\tMSG_ERRQUEUE                         = 0x2000\n\tMSG_FASTOPEN                         = 0x20000000\n\tMSG_FIN                              = 0x200\n\tMSG_MORE                             = 0x8000\n\tMSG_NOSIGNAL                         = 0x4000\n\tMSG_OOB                              = 0x1\n\tMSG_PEEK                             = 0x2\n\tMSG_PROXY                            = 0x10\n\tMSG_RST                              = 0x1000\n\tMSG_SYN                              = 0x400\n\tMSG_TRUNC                            = 0x20\n\tMSG_TRYHARD                          = 0x4\n\tMSG_WAITALL                          = 0x100\n\tMSG_WAITFORONE                       = 0x10000\n\tMSG_ZEROCOPY                         = 0x4000000\n\tMS_ACTIVE                            = 0x40000000\n\tMS_ASYNC                             = 0x1\n\tMS_BIND                              = 0x1000\n\tMS_BORN                              = 0x20000000\n\tMS_DIRSYNC                           = 0x80\n\tMS_INVALIDATE                        = 0x2\n\tMS_I_VERSION                         = 0x800000\n\tMS_KERNMOUNT                         = 0x400000\n\tMS_LAZYTIME                          = 0x2000000\n\tMS_MANDLOCK                          = 0x40\n\tMS_MGC_MSK                           = 0xffff0000\n\tMS_MGC_VAL                           = 0xc0ed0000\n\tMS_MOVE                              = 0x2000\n\tMS_NOATIME                           = 0x400\n\tMS_NODEV                             = 0x4\n\tMS_NODIRATIME                        = 0x800\n\tMS_NOEXEC                            = 0x8\n\tMS_NOREMOTELOCK                      = 0x8000000\n\tMS_NOSEC                             = 0x10000000\n\tMS_NOSUID                            = 0x2\n\tMS_NOUSER                            = -0x80000000\n\tMS_POSIXACL                          = 0x10000\n\tMS_PRIVATE                           = 0x40000\n\tMS_RDONLY                            = 0x1\n\tMS_REC                               = 0x4000\n\tMS_RELATIME                          = 0x200000\n\tMS_REMOUNT                           = 0x20\n\tMS_RMT_MASK                          = 0x2800051\n\tMS_SHARED                            = 0x100000\n\tMS_SILENT                            = 0x8000\n\tMS_SLAVE                             = 0x80000\n\tMS_STRICTATIME                       = 0x1000000\n\tMS_SUBMOUNT                          = 0x4000000\n\tMS_SYNC                              = 0x4\n\tMS_SYNCHRONOUS                       = 0x10\n\tMS_UNBINDABLE                        = 0x20000\n\tMS_VERBOSE                           = 0x8000\n\tMTD_INODE_FS_MAGIC                   = 0x11307854\n\tNAME_MAX                             = 0xff\n\tNCP_SUPER_MAGIC                      = 0x564c\n\tNETLINK_ADD_MEMBERSHIP               = 0x1\n\tNETLINK_AUDIT                        = 0x9\n\tNETLINK_BROADCAST_ERROR              = 0x4\n\tNETLINK_CAP_ACK                      = 0xa\n\tNETLINK_CONNECTOR                    = 0xb\n\tNETLINK_CRYPTO                       = 0x15\n\tNETLINK_DNRTMSG                      = 0xe\n\tNETLINK_DROP_MEMBERSHIP              = 0x2\n\tNETLINK_ECRYPTFS                     = 0x13\n\tNETLINK_EXT_ACK                      = 0xb\n\tNETLINK_FIB_LOOKUP                   = 0xa\n\tNETLINK_FIREWALL                     = 0x3\n\tNETLINK_GENERIC                      = 0x10\n\tNETLINK_GET_STRICT_CHK               = 0xc\n\tNETLINK_INET_DIAG                    = 0x4\n\tNETLINK_IP6_FW                       = 0xd\n\tNETLINK_ISCSI                        = 0x8\n\tNETLINK_KOBJECT_UEVENT               = 0xf\n\tNETLINK_LISTEN_ALL_NSID              = 0x8\n\tNETLINK_LIST_MEMBERSHIPS             = 0x9\n\tNETLINK_NETFILTER                    = 0xc\n\tNETLINK_NFLOG                        = 0x5\n\tNETLINK_NO_ENOBUFS                   = 0x5\n\tNETLINK_PKTINFO                      = 0x3\n\tNETLINK_RDMA                         = 0x14\n\tNETLINK_ROUTE                        = 0x0\n\tNETLINK_RX_RING                      = 0x6\n\tNETLINK_SCSITRANSPORT                = 0x12\n\tNETLINK_SELINUX                      = 0x7\n\tNETLINK_SMC                          = 0x16\n\tNETLINK_SOCK_DIAG                    = 0x4\n\tNETLINK_TX_RING                      = 0x7\n\tNETLINK_UNUSED                       = 0x1\n\tNETLINK_USERSOCK                     = 0x2\n\tNETLINK_XFRM                         = 0x6\n\tNETNSA_MAX                           = 0x5\n\tNETNSA_NSID_NOT_ASSIGNED             = -0x1\n\tNFNETLINK_V0                         = 0x0\n\tNFNLGRP_ACCT_QUOTA                   = 0x8\n\tNFNLGRP_CONNTRACK_DESTROY            = 0x3\n\tNFNLGRP_CONNTRACK_EXP_DESTROY        = 0x6\n\tNFNLGRP_CONNTRACK_EXP_NEW            = 0x4\n\tNFNLGRP_CONNTRACK_EXP_UPDATE         = 0x5\n\tNFNLGRP_CONNTRACK_NEW                = 0x1\n\tNFNLGRP_CONNTRACK_UPDATE             = 0x2\n\tNFNLGRP_MAX                          = 0x9\n\tNFNLGRP_NFTABLES                     = 0x7\n\tNFNLGRP_NFTRACE                      = 0x9\n\tNFNLGRP_NONE                         = 0x0\n\tNFNL_BATCH_MAX                       = 0x1\n\tNFNL_MSG_BATCH_BEGIN                 = 0x10\n\tNFNL_MSG_BATCH_END                   = 0x11\n\tNFNL_NFA_NEST                        = 0x8000\n\tNFNL_SUBSYS_ACCT                     = 0x7\n\tNFNL_SUBSYS_COUNT                    = 0xc\n\tNFNL_SUBSYS_CTHELPER                 = 0x9\n\tNFNL_SUBSYS_CTNETLINK                = 0x1\n\tNFNL_SUBSYS_CTNETLINK_EXP            = 0x2\n\tNFNL_SUBSYS_CTNETLINK_TIMEOUT        = 0x8\n\tNFNL_SUBSYS_IPSET                    = 0x6\n\tNFNL_SUBSYS_NFTABLES                 = 0xa\n\tNFNL_SUBSYS_NFT_COMPAT               = 0xb\n\tNFNL_SUBSYS_NONE                     = 0x0\n\tNFNL_SUBSYS_OSF                      = 0x5\n\tNFNL_SUBSYS_QUEUE                    = 0x3\n\tNFNL_SUBSYS_ULOG                     = 0x4\n\tNFS_SUPER_MAGIC                      = 0x6969\n\tNILFS_SUPER_MAGIC                    = 0x3434\n\tNL0                                  = 0x0\n\tNL1                                  = 0x100\n\tNLA_ALIGNTO                          = 0x4\n\tNLA_F_NESTED                         = 0x8000\n\tNLA_F_NET_BYTEORDER                  = 0x4000\n\tNLA_HDRLEN                           = 0x4\n\tNLDLY                                = 0x100\n\tNLMSG_ALIGNTO                        = 0x4\n\tNLMSG_DONE                           = 0x3\n\tNLMSG_ERROR                          = 0x2\n\tNLMSG_HDRLEN                         = 0x10\n\tNLMSG_MIN_TYPE                       = 0x10\n\tNLMSG_NOOP                           = 0x1\n\tNLMSG_OVERRUN                        = 0x4\n\tNLM_F_ACK                            = 0x4\n\tNLM_F_ACK_TLVS                       = 0x200\n\tNLM_F_APPEND                         = 0x800\n\tNLM_F_ATOMIC                         = 0x400\n\tNLM_F_CAPPED                         = 0x100\n\tNLM_F_CREATE                         = 0x400\n\tNLM_F_DUMP                           = 0x300\n\tNLM_F_DUMP_FILTERED                  = 0x20\n\tNLM_F_DUMP_INTR                      = 0x10\n\tNLM_F_ECHO                           = 0x8\n\tNLM_F_EXCL                           = 0x200\n\tNLM_F_MATCH                          = 0x200\n\tNLM_F_MULTI                          = 0x2\n\tNLM_F_NONREC                         = 0x100\n\tNLM_F_REPLACE                        = 0x100\n\tNLM_F_REQUEST                        = 0x1\n\tNLM_F_ROOT                           = 0x100\n\tNOFLSH                               = 0x80\n\tNSFS_MAGIC                           = 0x6e736673\n\tOCFS2_SUPER_MAGIC                    = 0x7461636f\n\tOCRNL                                = 0x8\n\tOFDEL                                = 0x80\n\tOFILL                                = 0x40\n\tOLCUC                                = 0x2\n\tONLCR                                = 0x4\n\tONLRET                               = 0x20\n\tONOCR                                = 0x10\n\tOPENPROM_SUPER_MAGIC                 = 0x9fa1\n\tOPOST                                = 0x1\n\tOVERLAYFS_SUPER_MAGIC                = 0x794c7630\n\tO_ACCMODE                            = 0x3\n\tO_APPEND                             = 0x8\n\tO_ASYNC                              = 0x1000\n\tO_CLOEXEC                            = 0x80000\n\tO_CREAT                              = 0x100\n\tO_DIRECT                             = 0x8000\n\tO_DIRECTORY                          = 0x10000\n\tO_DSYNC                              = 0x10\n\tO_EXCL                               = 0x400\n\tO_FSYNC                              = 0x4010\n\tO_LARGEFILE                          = 0x0\n\tO_NDELAY                             = 0x80\n\tO_NOATIME                            = 0x40000\n\tO_NOCTTY                             = 0x800\n\tO_NOFOLLOW                           = 0x20000\n\tO_NONBLOCK                           = 0x80\n\tO_PATH                               = 0x200000\n\tO_RDONLY                             = 0x0\n\tO_RDWR                               = 0x2\n\tO_RSYNC                              = 0x4010\n\tO_SYNC                               = 0x4010\n\tO_TMPFILE                            = 0x410000\n\tO_TRUNC                              = 0x200\n\tO_WRONLY                             = 0x1\n\tPACKET_ADD_MEMBERSHIP                = 0x1\n\tPACKET_AUXDATA                       = 0x8\n\tPACKET_BROADCAST                     = 0x1\n\tPACKET_COPY_THRESH                   = 0x7\n\tPACKET_DROP_MEMBERSHIP               = 0x2\n\tPACKET_FANOUT                        = 0x12\n\tPACKET_FANOUT_CBPF                   = 0x6\n\tPACKET_FANOUT_CPU                    = 0x2\n\tPACKET_FANOUT_DATA                   = 0x16\n\tPACKET_FANOUT_EBPF                   = 0x7\n\tPACKET_FANOUT_FLAG_DEFRAG            = 0x8000\n\tPACKET_FANOUT_FLAG_ROLLOVER          = 0x1000\n\tPACKET_FANOUT_FLAG_UNIQUEID          = 0x2000\n\tPACKET_FANOUT_HASH                   = 0x0\n\tPACKET_FANOUT_LB                     = 0x1\n\tPACKET_FANOUT_QM                     = 0x5\n\tPACKET_FANOUT_RND                    = 0x4\n\tPACKET_FANOUT_ROLLOVER               = 0x3\n\tPACKET_FASTROUTE                     = 0x6\n\tPACKET_HDRLEN                        = 0xb\n\tPACKET_HOST                          = 0x0\n\tPACKET_IGNORE_OUTGOING               = 0x17\n\tPACKET_KERNEL                        = 0x7\n\tPACKET_LOOPBACK                      = 0x5\n\tPACKET_LOSS                          = 0xe\n\tPACKET_MR_ALLMULTI                   = 0x2\n\tPACKET_MR_MULTICAST                  = 0x0\n\tPACKET_MR_PROMISC                    = 0x1\n\tPACKET_MR_UNICAST                    = 0x3\n\tPACKET_MULTICAST                     = 0x2\n\tPACKET_ORIGDEV                       = 0x9\n\tPACKET_OTHERHOST                     = 0x3\n\tPACKET_OUTGOING                      = 0x4\n\tPACKET_QDISC_BYPASS                  = 0x14\n\tPACKET_RECV_OUTPUT                   = 0x3\n\tPACKET_RESERVE                       = 0xc\n\tPACKET_ROLLOVER_STATS                = 0x15\n\tPACKET_RX_RING                       = 0x5\n\tPACKET_STATISTICS                    = 0x6\n\tPACKET_TIMESTAMP                     = 0x11\n\tPACKET_TX_HAS_OFF                    = 0x13\n\tPACKET_TX_RING                       = 0xd\n\tPACKET_TX_TIMESTAMP                  = 0x10\n\tPACKET_USER                          = 0x6\n\tPACKET_VERSION                       = 0xa\n\tPACKET_VNET_HDR                      = 0xf\n\tPARENB                               = 0x100\n\tPARITY_CRC16_PR0                     = 0x2\n\tPARITY_CRC16_PR0_CCITT               = 0x4\n\tPARITY_CRC16_PR1                     = 0x3\n\tPARITY_CRC16_PR1_CCITT               = 0x5\n\tPARITY_CRC32_PR0_CCITT               = 0x6\n\tPARITY_CRC32_PR1_CCITT               = 0x7\n\tPARITY_DEFAULT                       = 0x0\n\tPARITY_NONE                          = 0x1\n\tPARMRK                               = 0x8\n\tPARODD                               = 0x200\n\tPENDIN                               = 0x4000\n\tPERF_EVENT_IOC_DISABLE               = 0x20002401\n\tPERF_EVENT_IOC_ENABLE                = 0x20002400\n\tPERF_EVENT_IOC_ID                    = 0x40082407\n\tPERF_EVENT_IOC_MODIFY_ATTRIBUTES     = 0x8008240b\n\tPERF_EVENT_IOC_PAUSE_OUTPUT          = 0x80042409\n\tPERF_EVENT_IOC_PERIOD                = 0x80082404\n\tPERF_EVENT_IOC_QUERY_BPF             = 0xc008240a\n\tPERF_EVENT_IOC_REFRESH               = 0x20002402\n\tPERF_EVENT_IOC_RESET                 = 0x20002403\n\tPERF_EVENT_IOC_SET_BPF               = 0x80042408\n\tPERF_EVENT_IOC_SET_FILTER            = 0x80082406\n\tPERF_EVENT_IOC_SET_OUTPUT            = 0x20002405\n\tPIPEFS_MAGIC                         = 0x50495045\n\tPPPIOCATTACH                         = 0x8004743d\n\tPPPIOCATTCHAN                        = 0x80047438\n\tPPPIOCCONNECT                        = 0x8004743a\n\tPPPIOCDETACH                         = 0x8004743c\n\tPPPIOCDISCONN                        = 0x20007439\n\tPPPIOCGASYNCMAP                      = 0x40047458\n\tPPPIOCGCHAN                          = 0x40047437\n\tPPPIOCGDEBUG                         = 0x40047441\n\tPPPIOCGFLAGS                         = 0x4004745a\n\tPPPIOCGIDLE                          = 0x4010743f\n\tPPPIOCGL2TPSTATS                     = 0x40487436\n\tPPPIOCGMRU                           = 0x40047453\n\tPPPIOCGNPMODE                        = 0xc008744c\n\tPPPIOCGRASYNCMAP                     = 0x40047455\n\tPPPIOCGUNIT                          = 0x40047456\n\tPPPIOCGXASYNCMAP                     = 0x40207450\n\tPPPIOCNEWUNIT                        = 0xc004743e\n\tPPPIOCSACTIVE                        = 0x80107446\n\tPPPIOCSASYNCMAP                      = 0x80047457\n\tPPPIOCSCOMPRESS                      = 0x8010744d\n\tPPPIOCSDEBUG                         = 0x80047440\n\tPPPIOCSFLAGS                         = 0x80047459\n\tPPPIOCSMAXCID                        = 0x80047451\n\tPPPIOCSMRRU                          = 0x8004743b\n\tPPPIOCSMRU                           = 0x80047452\n\tPPPIOCSNPMODE                        = 0x8008744b\n\tPPPIOCSPASS                          = 0x80107447\n\tPPPIOCSRASYNCMAP                     = 0x80047454\n\tPPPIOCSXASYNCMAP                     = 0x8020744f\n\tPPPIOCXFERUNIT                       = 0x2000744e\n\tPRIO_PGRP                            = 0x1\n\tPRIO_PROCESS                         = 0x0\n\tPRIO_USER                            = 0x2\n\tPROC_SUPER_MAGIC                     = 0x9fa0\n\tPROT_EXEC                            = 0x4\n\tPROT_GROWSDOWN                       = 0x1000000\n\tPROT_GROWSUP                         = 0x2000000\n\tPROT_NONE                            = 0x0\n\tPROT_READ                            = 0x1\n\tPROT_WRITE                           = 0x2\n\tPR_CAPBSET_DROP                      = 0x18\n\tPR_CAPBSET_READ                      = 0x17\n\tPR_CAP_AMBIENT                       = 0x2f\n\tPR_CAP_AMBIENT_CLEAR_ALL             = 0x4\n\tPR_CAP_AMBIENT_IS_SET                = 0x1\n\tPR_CAP_AMBIENT_LOWER                 = 0x3\n\tPR_CAP_AMBIENT_RAISE                 = 0x2\n\tPR_ENDIAN_BIG                        = 0x0\n\tPR_ENDIAN_LITTLE                     = 0x1\n\tPR_ENDIAN_PPC_LITTLE                 = 0x2\n\tPR_FPEMU_NOPRINT                     = 0x1\n\tPR_FPEMU_SIGFPE                      = 0x2\n\tPR_FP_EXC_ASYNC                      = 0x2\n\tPR_FP_EXC_DISABLED                   = 0x0\n\tPR_FP_EXC_DIV                        = 0x10000\n\tPR_FP_EXC_INV                        = 0x100000\n\tPR_FP_EXC_NONRECOV                   = 0x1\n\tPR_FP_EXC_OVF                        = 0x20000\n\tPR_FP_EXC_PRECISE                    = 0x3\n\tPR_FP_EXC_RES                        = 0x80000\n\tPR_FP_EXC_SW_ENABLE                  = 0x80\n\tPR_FP_EXC_UND                        = 0x40000\n\tPR_FP_MODE_FR                        = 0x1\n\tPR_FP_MODE_FRE                       = 0x2\n\tPR_GET_CHILD_SUBREAPER               = 0x25\n\tPR_GET_DUMPABLE                      = 0x3\n\tPR_GET_ENDIAN                        = 0x13\n\tPR_GET_FPEMU                         = 0x9\n\tPR_GET_FPEXC                         = 0xb\n\tPR_GET_FP_MODE                       = 0x2e\n\tPR_GET_KEEPCAPS                      = 0x7\n\tPR_GET_NAME                          = 0x10\n\tPR_GET_NO_NEW_PRIVS                  = 0x27\n\tPR_GET_PDEATHSIG                     = 0x2\n\tPR_GET_SECCOMP                       = 0x15\n\tPR_GET_SECUREBITS                    = 0x1b\n\tPR_GET_SPECULATION_CTRL              = 0x34\n\tPR_GET_THP_DISABLE                   = 0x2a\n\tPR_GET_TID_ADDRESS                   = 0x28\n\tPR_GET_TIMERSLACK                    = 0x1e\n\tPR_GET_TIMING                        = 0xd\n\tPR_GET_TSC                           = 0x19\n\tPR_GET_UNALIGN                       = 0x5\n\tPR_MCE_KILL                          = 0x21\n\tPR_MCE_KILL_CLEAR                    = 0x0\n\tPR_MCE_KILL_DEFAULT                  = 0x2\n\tPR_MCE_KILL_EARLY                    = 0x1\n\tPR_MCE_KILL_GET                      = 0x22\n\tPR_MCE_KILL_LATE                     = 0x0\n\tPR_MCE_KILL_SET                      = 0x1\n\tPR_MPX_DISABLE_MANAGEMENT            = 0x2c\n\tPR_MPX_ENABLE_MANAGEMENT             = 0x2b\n\tPR_PAC_APDAKEY                       = 0x4\n\tPR_PAC_APDBKEY                       = 0x8\n\tPR_PAC_APGAKEY                       = 0x10\n\tPR_PAC_APIAKEY                       = 0x1\n\tPR_PAC_APIBKEY                       = 0x2\n\tPR_PAC_RESET_KEYS                    = 0x36\n\tPR_SET_CHILD_SUBREAPER               = 0x24\n\tPR_SET_DUMPABLE                      = 0x4\n\tPR_SET_ENDIAN                        = 0x14\n\tPR_SET_FPEMU                         = 0xa\n\tPR_SET_FPEXC                         = 0xc\n\tPR_SET_FP_MODE                       = 0x2d\n\tPR_SET_KEEPCAPS                      = 0x8\n\tPR_SET_MM                            = 0x23\n\tPR_SET_MM_ARG_END                    = 0x9\n\tPR_SET_MM_ARG_START                  = 0x8\n\tPR_SET_MM_AUXV                       = 0xc\n\tPR_SET_MM_BRK                        = 0x7\n\tPR_SET_MM_END_CODE                   = 0x2\n\tPR_SET_MM_END_DATA                   = 0x4\n\tPR_SET_MM_ENV_END                    = 0xb\n\tPR_SET_MM_ENV_START                  = 0xa\n\tPR_SET_MM_EXE_FILE                   = 0xd\n\tPR_SET_MM_MAP                        = 0xe\n\tPR_SET_MM_MAP_SIZE                   = 0xf\n\tPR_SET_MM_START_BRK                  = 0x6\n\tPR_SET_MM_START_CODE                 = 0x1\n\tPR_SET_MM_START_DATA                 = 0x3\n\tPR_SET_MM_START_STACK                = 0x5\n\tPR_SET_NAME                          = 0xf\n\tPR_SET_NO_NEW_PRIVS                  = 0x26\n\tPR_SET_PDEATHSIG                     = 0x1\n\tPR_SET_PTRACER                       = 0x59616d61\n\tPR_SET_PTRACER_ANY                   = 0xffffffffffffffff\n\tPR_SET_SECCOMP                       = 0x16\n\tPR_SET_SECUREBITS                    = 0x1c\n\tPR_SET_SPECULATION_CTRL              = 0x35\n\tPR_SET_THP_DISABLE                   = 0x29\n\tPR_SET_TIMERSLACK                    = 0x1d\n\tPR_SET_TIMING                        = 0xe\n\tPR_SET_TSC                           = 0x1a\n\tPR_SET_UNALIGN                       = 0x6\n\tPR_SPEC_DISABLE                      = 0x4\n\tPR_SPEC_DISABLE_NOEXEC               = 0x10\n\tPR_SPEC_ENABLE                       = 0x2\n\tPR_SPEC_FORCE_DISABLE                = 0x8\n\tPR_SPEC_INDIRECT_BRANCH              = 0x1\n\tPR_SPEC_NOT_AFFECTED                 = 0x0\n\tPR_SPEC_PRCTL                        = 0x1\n\tPR_SPEC_STORE_BYPASS                 = 0x0\n\tPR_SVE_GET_VL                        = 0x33\n\tPR_SVE_SET_VL                        = 0x32\n\tPR_SVE_SET_VL_ONEXEC                 = 0x40000\n\tPR_SVE_VL_INHERIT                    = 0x20000\n\tPR_SVE_VL_LEN_MASK                   = 0xffff\n\tPR_TASK_PERF_EVENTS_DISABLE          = 0x1f\n\tPR_TASK_PERF_EVENTS_ENABLE           = 0x20\n\tPR_TIMING_STATISTICAL                = 0x0\n\tPR_TIMING_TIMESTAMP                  = 0x1\n\tPR_TSC_ENABLE                        = 0x1\n\tPR_TSC_SIGSEGV                       = 0x2\n\tPR_UNALIGN_NOPRINT                   = 0x1\n\tPR_UNALIGN_SIGBUS                    = 0x2\n\tPSTOREFS_MAGIC                       = 0x6165676c\n\tPTRACE_ATTACH                        = 0x10\n\tPTRACE_CONT                          = 0x7\n\tPTRACE_DETACH                        = 0x11\n\tPTRACE_EVENT_CLONE                   = 0x3\n\tPTRACE_EVENT_EXEC                    = 0x4\n\tPTRACE_EVENT_EXIT                    = 0x6\n\tPTRACE_EVENT_FORK                    = 0x1\n\tPTRACE_EVENT_SECCOMP                 = 0x7\n\tPTRACE_EVENT_STOP                    = 0x80\n\tPTRACE_EVENT_VFORK                   = 0x2\n\tPTRACE_EVENT_VFORK_DONE              = 0x5\n\tPTRACE_GETEVENTMSG                   = 0x4201\n\tPTRACE_GETFPREGS                     = 0xe\n\tPTRACE_GETREGS                       = 0xc\n\tPTRACE_GETREGSET                     = 0x4204\n\tPTRACE_GETSIGINFO                    = 0x4202\n\tPTRACE_GETSIGMASK                    = 0x420a\n\tPTRACE_GET_THREAD_AREA               = 0x19\n\tPTRACE_GET_THREAD_AREA_3264          = 0xc4\n\tPTRACE_GET_WATCH_REGS                = 0xd0\n\tPTRACE_INTERRUPT                     = 0x4207\n\tPTRACE_KILL                          = 0x8\n\tPTRACE_LISTEN                        = 0x4208\n\tPTRACE_OLDSETOPTIONS                 = 0x15\n\tPTRACE_O_EXITKILL                    = 0x100000\n\tPTRACE_O_MASK                        = 0x3000ff\n\tPTRACE_O_SUSPEND_SECCOMP             = 0x200000\n\tPTRACE_O_TRACECLONE                  = 0x8\n\tPTRACE_O_TRACEEXEC                   = 0x10\n\tPTRACE_O_TRACEEXIT                   = 0x40\n\tPTRACE_O_TRACEFORK                   = 0x2\n\tPTRACE_O_TRACESECCOMP                = 0x80\n\tPTRACE_O_TRACESYSGOOD                = 0x1\n\tPTRACE_O_TRACEVFORK                  = 0x4\n\tPTRACE_O_TRACEVFORKDONE              = 0x20\n\tPTRACE_PEEKDATA                      = 0x2\n\tPTRACE_PEEKDATA_3264                 = 0xc1\n\tPTRACE_PEEKSIGINFO                   = 0x4209\n\tPTRACE_PEEKSIGINFO_SHARED            = 0x1\n\tPTRACE_PEEKTEXT                      = 0x1\n\tPTRACE_PEEKTEXT_3264                 = 0xc0\n\tPTRACE_PEEKUSR                       = 0x3\n\tPTRACE_POKEDATA                      = 0x5\n\tPTRACE_POKEDATA_3264                 = 0xc3\n\tPTRACE_POKETEXT                      = 0x4\n\tPTRACE_POKETEXT_3264                 = 0xc2\n\tPTRACE_POKEUSR                       = 0x6\n\tPTRACE_SECCOMP_GET_FILTER            = 0x420c\n\tPTRACE_SECCOMP_GET_METADATA          = 0x420d\n\tPTRACE_SEIZE                         = 0x4206\n\tPTRACE_SETFPREGS                     = 0xf\n\tPTRACE_SETOPTIONS                    = 0x4200\n\tPTRACE_SETREGS                       = 0xd\n\tPTRACE_SETREGSET                     = 0x4205\n\tPTRACE_SETSIGINFO                    = 0x4203\n\tPTRACE_SETSIGMASK                    = 0x420b\n\tPTRACE_SET_THREAD_AREA               = 0x1a\n\tPTRACE_SET_WATCH_REGS                = 0xd1\n\tPTRACE_SINGLESTEP                    = 0x9\n\tPTRACE_SYSCALL                       = 0x18\n\tPTRACE_TRACEME                       = 0x0\n\tQNX4_SUPER_MAGIC                     = 0x2f\n\tQNX6_SUPER_MAGIC                     = 0x68191122\n\tRAMFS_MAGIC                          = 0x858458f6\n\tRDTGROUP_SUPER_MAGIC                 = 0x7655821\n\tREISERFS_SUPER_MAGIC                 = 0x52654973\n\tRENAME_EXCHANGE                      = 0x2\n\tRENAME_NOREPLACE                     = 0x1\n\tRENAME_WHITEOUT                      = 0x4\n\tRLIMIT_AS                            = 0x6\n\tRLIMIT_CORE                          = 0x4\n\tRLIMIT_CPU                           = 0x0\n\tRLIMIT_DATA                          = 0x2\n\tRLIMIT_FSIZE                         = 0x1\n\tRLIMIT_LOCKS                         = 0xa\n\tRLIMIT_MEMLOCK                       = 0x9\n\tRLIMIT_MSGQUEUE                      = 0xc\n\tRLIMIT_NICE                          = 0xd\n\tRLIMIT_NOFILE                        = 0x5\n\tRLIMIT_NPROC                         = 0x8\n\tRLIMIT_RSS                           = 0x7\n\tRLIMIT_RTPRIO                        = 0xe\n\tRLIMIT_RTTIME                        = 0xf\n\tRLIMIT_SIGPENDING                    = 0xb\n\tRLIMIT_STACK                         = 0x3\n\tRLIM_INFINITY                        = 0xffffffffffffffff\n\tRNDADDENTROPY                        = 0x80085203\n\tRNDADDTOENTCNT                       = 0x80045201\n\tRNDCLEARPOOL                         = 0x20005206\n\tRNDGETENTCNT                         = 0x40045200\n\tRNDGETPOOL                           = 0x40085202\n\tRNDRESEEDCRNG                        = 0x20005207\n\tRNDZAPENTCNT                         = 0x20005204\n\tRTAX_ADVMSS                          = 0x8\n\tRTAX_CC_ALGO                         = 0x10\n\tRTAX_CWND                            = 0x7\n\tRTAX_FASTOPEN_NO_COOKIE              = 0x11\n\tRTAX_FEATURES                        = 0xc\n\tRTAX_FEATURE_ALLFRAG                 = 0x8\n\tRTAX_FEATURE_ECN                     = 0x1\n\tRTAX_FEATURE_MASK                    = 0xf\n\tRTAX_FEATURE_SACK                    = 0x2\n\tRTAX_FEATURE_TIMESTAMP               = 0x4\n\tRTAX_HOPLIMIT                        = 0xa\n\tRTAX_INITCWND                        = 0xb\n\tRTAX_INITRWND                        = 0xe\n\tRTAX_LOCK                            = 0x1\n\tRTAX_MAX                             = 0x11\n\tRTAX_MTU                             = 0x2\n\tRTAX_QUICKACK                        = 0xf\n\tRTAX_REORDERING                      = 0x9\n\tRTAX_RTO_MIN                         = 0xd\n\tRTAX_RTT                             = 0x4\n\tRTAX_RTTVAR                          = 0x5\n\tRTAX_SSTHRESH                        = 0x6\n\tRTAX_UNSPEC                          = 0x0\n\tRTAX_WINDOW                          = 0x3\n\tRTA_ALIGNTO                          = 0x4\n\tRTA_MAX                              = 0x1d\n\tRTCF_DIRECTSRC                       = 0x4000000\n\tRTCF_DOREDIRECT                      = 0x1000000\n\tRTCF_LOG                             = 0x2000000\n\tRTCF_MASQ                            = 0x400000\n\tRTCF_NAT                             = 0x800000\n\tRTCF_VALVE                           = 0x200000\n\tRTC_AF                               = 0x20\n\tRTC_AIE_OFF                          = 0x20007002\n\tRTC_AIE_ON                           = 0x20007001\n\tRTC_ALM_READ                         = 0x40247008\n\tRTC_ALM_SET                          = 0x80247007\n\tRTC_EPOCH_READ                       = 0x4008700d\n\tRTC_EPOCH_SET                        = 0x8008700e\n\tRTC_IRQF                             = 0x80\n\tRTC_IRQP_READ                        = 0x4008700b\n\tRTC_IRQP_SET                         = 0x8008700c\n\tRTC_MAX_FREQ                         = 0x2000\n\tRTC_PF                               = 0x40\n\tRTC_PIE_OFF                          = 0x20007006\n\tRTC_PIE_ON                           = 0x20007005\n\tRTC_PLL_GET                          = 0x40207011\n\tRTC_PLL_SET                          = 0x80207012\n\tRTC_RD_TIME                          = 0x40247009\n\tRTC_SET_TIME                         = 0x8024700a\n\tRTC_UF                               = 0x10\n\tRTC_UIE_OFF                          = 0x20007004\n\tRTC_UIE_ON                           = 0x20007003\n\tRTC_VL_CLR                           = 0x20007014\n\tRTC_VL_READ                          = 0x40047013\n\tRTC_WIE_OFF                          = 0x20007010\n\tRTC_WIE_ON                           = 0x2000700f\n\tRTC_WKALM_RD                         = 0x40287010\n\tRTC_WKALM_SET                        = 0x8028700f\n\tRTF_ADDRCLASSMASK                    = 0xf8000000\n\tRTF_ADDRCONF                         = 0x40000\n\tRTF_ALLONLINK                        = 0x20000\n\tRTF_BROADCAST                        = 0x10000000\n\tRTF_CACHE                            = 0x1000000\n\tRTF_DEFAULT                          = 0x10000\n\tRTF_DYNAMIC                          = 0x10\n\tRTF_FLOW                             = 0x2000000\n\tRTF_GATEWAY                          = 0x2\n\tRTF_HOST                             = 0x4\n\tRTF_INTERFACE                        = 0x40000000\n\tRTF_IRTT                             = 0x100\n\tRTF_LINKRT                           = 0x100000\n\tRTF_LOCAL                            = 0x80000000\n\tRTF_MODIFIED                         = 0x20\n\tRTF_MSS                              = 0x40\n\tRTF_MTU                              = 0x40\n\tRTF_MULTICAST                        = 0x20000000\n\tRTF_NAT                              = 0x8000000\n\tRTF_NOFORWARD                        = 0x1000\n\tRTF_NONEXTHOP                        = 0x200000\n\tRTF_NOPMTUDISC                       = 0x4000\n\tRTF_POLICY                           = 0x4000000\n\tRTF_REINSTATE                        = 0x8\n\tRTF_REJECT                           = 0x200\n\tRTF_STATIC                           = 0x400\n\tRTF_THROW                            = 0x2000\n\tRTF_UP                               = 0x1\n\tRTF_WINDOW                           = 0x80\n\tRTF_XRESOLVE                         = 0x800\n\tRTM_BASE                             = 0x10\n\tRTM_DELACTION                        = 0x31\n\tRTM_DELADDR                          = 0x15\n\tRTM_DELADDRLABEL                     = 0x49\n\tRTM_DELCHAIN                         = 0x65\n\tRTM_DELLINK                          = 0x11\n\tRTM_DELMDB                           = 0x55\n\tRTM_DELNEIGH                         = 0x1d\n\tRTM_DELNETCONF                       = 0x51\n\tRTM_DELNSID                          = 0x59\n\tRTM_DELQDISC                         = 0x25\n\tRTM_DELROUTE                         = 0x19\n\tRTM_DELRULE                          = 0x21\n\tRTM_DELTCLASS                        = 0x29\n\tRTM_DELTFILTER                       = 0x2d\n\tRTM_F_CLONED                         = 0x200\n\tRTM_F_EQUALIZE                       = 0x400\n\tRTM_F_FIB_MATCH                      = 0x2000\n\tRTM_F_LOOKUP_TABLE                   = 0x1000\n\tRTM_F_NOTIFY                         = 0x100\n\tRTM_F_PREFIX                         = 0x800\n\tRTM_GETACTION                        = 0x32\n\tRTM_GETADDR                          = 0x16\n\tRTM_GETADDRLABEL                     = 0x4a\n\tRTM_GETANYCAST                       = 0x3e\n\tRTM_GETCHAIN                         = 0x66\n\tRTM_GETDCB                           = 0x4e\n\tRTM_GETLINK                          = 0x12\n\tRTM_GETMDB                           = 0x56\n\tRTM_GETMULTICAST                     = 0x3a\n\tRTM_GETNEIGH                         = 0x1e\n\tRTM_GETNEIGHTBL                      = 0x42\n\tRTM_GETNETCONF                       = 0x52\n\tRTM_GETNSID                          = 0x5a\n\tRTM_GETQDISC                         = 0x26\n\tRTM_GETROUTE                         = 0x1a\n\tRTM_GETRULE                          = 0x22\n\tRTM_GETSTATS                         = 0x5e\n\tRTM_GETTCLASS                        = 0x2a\n\tRTM_GETTFILTER                       = 0x2e\n\tRTM_MAX                              = 0x67\n\tRTM_NEWACTION                        = 0x30\n\tRTM_NEWADDR                          = 0x14\n\tRTM_NEWADDRLABEL                     = 0x48\n\tRTM_NEWCACHEREPORT                   = 0x60\n\tRTM_NEWCHAIN                         = 0x64\n\tRTM_NEWLINK                          = 0x10\n\tRTM_NEWMDB                           = 0x54\n\tRTM_NEWNDUSEROPT                     = 0x44\n\tRTM_NEWNEIGH                         = 0x1c\n\tRTM_NEWNEIGHTBL                      = 0x40\n\tRTM_NEWNETCONF                       = 0x50\n\tRTM_NEWNSID                          = 0x58\n\tRTM_NEWPREFIX                        = 0x34\n\tRTM_NEWQDISC                         = 0x24\n\tRTM_NEWROUTE                         = 0x18\n\tRTM_NEWRULE                          = 0x20\n\tRTM_NEWSTATS                         = 0x5c\n\tRTM_NEWTCLASS                        = 0x28\n\tRTM_NEWTFILTER                       = 0x2c\n\tRTM_NR_FAMILIES                      = 0x16\n\tRTM_NR_MSGTYPES                      = 0x58\n\tRTM_SETDCB                           = 0x4f\n\tRTM_SETLINK                          = 0x13\n\tRTM_SETNEIGHTBL                      = 0x43\n\tRTNH_ALIGNTO                         = 0x4\n\tRTNH_COMPARE_MASK                    = 0x19\n\tRTNH_F_DEAD                          = 0x1\n\tRTNH_F_LINKDOWN                      = 0x10\n\tRTNH_F_OFFLOAD                       = 0x8\n\tRTNH_F_ONLINK                        = 0x4\n\tRTNH_F_PERVASIVE                     = 0x2\n\tRTNH_F_UNRESOLVED                    = 0x20\n\tRTN_MAX                              = 0xb\n\tRTPROT_BABEL                         = 0x2a\n\tRTPROT_BGP                           = 0xba\n\tRTPROT_BIRD                          = 0xc\n\tRTPROT_BOOT                          = 0x3\n\tRTPROT_DHCP                          = 0x10\n\tRTPROT_DNROUTED                      = 0xd\n\tRTPROT_EIGRP                         = 0xc0\n\tRTPROT_GATED                         = 0x8\n\tRTPROT_ISIS                          = 0xbb\n\tRTPROT_KERNEL                        = 0x2\n\tRTPROT_MROUTED                       = 0x11\n\tRTPROT_MRT                           = 0xa\n\tRTPROT_NTK                           = 0xf\n\tRTPROT_OSPF                          = 0xbc\n\tRTPROT_RA                            = 0x9\n\tRTPROT_REDIRECT                      = 0x1\n\tRTPROT_RIP                           = 0xbd\n\tRTPROT_STATIC                        = 0x4\n\tRTPROT_UNSPEC                        = 0x0\n\tRTPROT_XORP                          = 0xe\n\tRTPROT_ZEBRA                         = 0xb\n\tRT_CLASS_DEFAULT                     = 0xfd\n\tRT_CLASS_LOCAL                       = 0xff\n\tRT_CLASS_MAIN                        = 0xfe\n\tRT_CLASS_MAX                         = 0xff\n\tRT_CLASS_UNSPEC                      = 0x0\n\tRUSAGE_CHILDREN                      = -0x1\n\tRUSAGE_SELF                          = 0x0\n\tRUSAGE_THREAD                        = 0x1\n\tSCM_CREDENTIALS                      = 0x2\n\tSCM_RIGHTS                           = 0x1\n\tSCM_TIMESTAMP                        = 0x1d\n\tSCM_TIMESTAMPING                     = 0x25\n\tSCM_TIMESTAMPING_OPT_STATS           = 0x36\n\tSCM_TIMESTAMPING_PKTINFO             = 0x3a\n\tSCM_TIMESTAMPNS                      = 0x23\n\tSCM_TXTIME                           = 0x3d\n\tSCM_WIFI_STATUS                      = 0x29\n\tSC_LOG_FLUSH                         = 0x100000\n\tSECCOMP_MODE_DISABLED                = 0x0\n\tSECCOMP_MODE_FILTER                  = 0x2\n\tSECCOMP_MODE_STRICT                  = 0x1\n\tSECURITYFS_MAGIC                     = 0x73636673\n\tSELINUX_MAGIC                        = 0xf97cff8c\n\tSFD_CLOEXEC                          = 0x80000\n\tSFD_NONBLOCK                         = 0x80\n\tSHUT_RD                              = 0x0\n\tSHUT_RDWR                            = 0x2\n\tSHUT_WR                              = 0x1\n\tSIOCADDDLCI                          = 0x8980\n\tSIOCADDMULTI                         = 0x8931\n\tSIOCADDRT                            = 0x890b\n\tSIOCATMARK                           = 0x40047307\n\tSIOCBONDCHANGEACTIVE                 = 0x8995\n\tSIOCBONDENSLAVE                      = 0x8990\n\tSIOCBONDINFOQUERY                    = 0x8994\n\tSIOCBONDRELEASE                      = 0x8991\n\tSIOCBONDSETHWADDR                    = 0x8992\n\tSIOCBONDSLAVEINFOQUERY               = 0x8993\n\tSIOCBRADDBR                          = 0x89a0\n\tSIOCBRADDIF                          = 0x89a2\n\tSIOCBRDELBR                          = 0x89a1\n\tSIOCBRDELIF                          = 0x89a3\n\tSIOCDARP                             = 0x8953\n\tSIOCDELDLCI                          = 0x8981\n\tSIOCDELMULTI                         = 0x8932\n\tSIOCDELRT                            = 0x890c\n\tSIOCDEVPRIVATE                       = 0x89f0\n\tSIOCDIFADDR                          = 0x8936\n\tSIOCDRARP                            = 0x8960\n\tSIOCETHTOOL                          = 0x8946\n\tSIOCGARP                             = 0x8954\n\tSIOCGHWTSTAMP                        = 0x89b1\n\tSIOCGIFADDR                          = 0x8915\n\tSIOCGIFBR                            = 0x8940\n\tSIOCGIFBRDADDR                       = 0x8919\n\tSIOCGIFCONF                          = 0x8912\n\tSIOCGIFCOUNT                         = 0x8938\n\tSIOCGIFDSTADDR                       = 0x8917\n\tSIOCGIFENCAP                         = 0x8925\n\tSIOCGIFFLAGS                         = 0x8913\n\tSIOCGIFHWADDR                        = 0x8927\n\tSIOCGIFINDEX                         = 0x8933\n\tSIOCGIFMAP                           = 0x8970\n\tSIOCGIFMEM                           = 0x891f\n\tSIOCGIFMETRIC                        = 0x891d\n\tSIOCGIFMTU                           = 0x8921\n\tSIOCGIFNAME                          = 0x8910\n\tSIOCGIFNETMASK                       = 0x891b\n\tSIOCGIFPFLAGS                        = 0x8935\n\tSIOCGIFSLAVE                         = 0x8929\n\tSIOCGIFTXQLEN                        = 0x8942\n\tSIOCGIFVLAN                          = 0x8982\n\tSIOCGMIIPHY                          = 0x8947\n\tSIOCGMIIREG                          = 0x8948\n\tSIOCGPGRP                            = 0x40047309\n\tSIOCGPPPCSTATS                       = 0x89f2\n\tSIOCGPPPSTATS                        = 0x89f0\n\tSIOCGPPPVER                          = 0x89f1\n\tSIOCGRARP                            = 0x8961\n\tSIOCGSKNS                            = 0x894c\n\tSIOCGSTAMP                           = 0x8906\n\tSIOCGSTAMPNS                         = 0x8907\n\tSIOCINQ                              = 0x467f\n\tSIOCOUTQ                             = 0x7472\n\tSIOCOUTQNSD                          = 0x894b\n\tSIOCPROTOPRIVATE                     = 0x89e0\n\tSIOCRTMSG                            = 0x890d\n\tSIOCSARP                             = 0x8955\n\tSIOCSHWTSTAMP                        = 0x89b0\n\tSIOCSIFADDR                          = 0x8916\n\tSIOCSIFBR                            = 0x8941\n\tSIOCSIFBRDADDR                       = 0x891a\n\tSIOCSIFDSTADDR                       = 0x8918\n\tSIOCSIFENCAP                         = 0x8926\n\tSIOCSIFFLAGS                         = 0x8914\n\tSIOCSIFHWADDR                        = 0x8924\n\tSIOCSIFHWBROADCAST                   = 0x8937\n\tSIOCSIFLINK                          = 0x8911\n\tSIOCSIFMAP                           = 0x8971\n\tSIOCSIFMEM                           = 0x8920\n\tSIOCSIFMETRIC                        = 0x891e\n\tSIOCSIFMTU                           = 0x8922\n\tSIOCSIFNAME                          = 0x8923\n\tSIOCSIFNETMASK                       = 0x891c\n\tSIOCSIFPFLAGS                        = 0x8934\n\tSIOCSIFSLAVE                         = 0x8930\n\tSIOCSIFTXQLEN                        = 0x8943\n\tSIOCSIFVLAN                          = 0x8983\n\tSIOCSMIIREG                          = 0x8949\n\tSIOCSPGRP                            = 0x80047308\n\tSIOCSRARP                            = 0x8962\n\tSIOCWANDEV                           = 0x894a\n\tSMACK_MAGIC                          = 0x43415d53\n\tSMART_AUTOSAVE                       = 0xd2\n\tSMART_AUTO_OFFLINE                   = 0xdb\n\tSMART_DISABLE                        = 0xd9\n\tSMART_ENABLE                         = 0xd8\n\tSMART_HCYL_PASS                      = 0xc2\n\tSMART_IMMEDIATE_OFFLINE              = 0xd4\n\tSMART_LCYL_PASS                      = 0x4f\n\tSMART_READ_LOG_SECTOR                = 0xd5\n\tSMART_READ_THRESHOLDS                = 0xd1\n\tSMART_READ_VALUES                    = 0xd0\n\tSMART_SAVE                           = 0xd3\n\tSMART_STATUS                         = 0xda\n\tSMART_WRITE_LOG_SECTOR               = 0xd6\n\tSMART_WRITE_THRESHOLDS               = 0xd7\n\tSMB_SUPER_MAGIC                      = 0x517b\n\tSOCKFS_MAGIC                         = 0x534f434b\n\tSOCK_CLOEXEC                         = 0x80000\n\tSOCK_DCCP                            = 0x6\n\tSOCK_DGRAM                           = 0x1\n\tSOCK_IOC_TYPE                        = 0x89\n\tSOCK_NONBLOCK                        = 0x80\n\tSOCK_PACKET                          = 0xa\n\tSOCK_RAW                             = 0x3\n\tSOCK_RDM                             = 0x4\n\tSOCK_SEQPACKET                       = 0x5\n\tSOCK_STREAM                          = 0x2\n\tSOL_AAL                              = 0x109\n\tSOL_ALG                              = 0x117\n\tSOL_ATM                              = 0x108\n\tSOL_CAIF                             = 0x116\n\tSOL_CAN_BASE                         = 0x64\n\tSOL_DCCP                             = 0x10d\n\tSOL_DECNET                           = 0x105\n\tSOL_ICMPV6                           = 0x3a\n\tSOL_IP                               = 0x0\n\tSOL_IPV6                             = 0x29\n\tSOL_IRDA                             = 0x10a\n\tSOL_IUCV                             = 0x115\n\tSOL_KCM                              = 0x119\n\tSOL_LLC                              = 0x10c\n\tSOL_NETBEUI                          = 0x10b\n\tSOL_NETLINK                          = 0x10e\n\tSOL_NFC                              = 0x118\n\tSOL_PACKET                           = 0x107\n\tSOL_PNPIPE                           = 0x113\n\tSOL_PPPOL2TP                         = 0x111\n\tSOL_RAW                              = 0xff\n\tSOL_RDS                              = 0x114\n\tSOL_RXRPC                            = 0x110\n\tSOL_SOCKET                           = 0xffff\n\tSOL_TCP                              = 0x6\n\tSOL_TIPC                             = 0x10f\n\tSOL_TLS                              = 0x11a\n\tSOL_X25                              = 0x106\n\tSOL_XDP                              = 0x11b\n\tSOMAXCONN                            = 0x80\n\tSO_ACCEPTCONN                        = 0x1009\n\tSO_ATTACH_BPF                        = 0x32\n\tSO_ATTACH_FILTER                     = 0x1a\n\tSO_ATTACH_REUSEPORT_CBPF             = 0x33\n\tSO_ATTACH_REUSEPORT_EBPF             = 0x34\n\tSO_BINDTODEVICE                      = 0x19\n\tSO_BINDTOIFINDEX                     = 0x3e\n\tSO_BPF_EXTENSIONS                    = 0x30\n\tSO_BROADCAST                         = 0x20\n\tSO_BSDCOMPAT                         = 0xe\n\tSO_BUSY_POLL                         = 0x2e\n\tSO_CNX_ADVICE                        = 0x35\n\tSO_COOKIE                            = 0x39\n\tSO_DEBUG                             = 0x1\n\tSO_DETACH_BPF                        = 0x1b\n\tSO_DETACH_FILTER                     = 0x1b\n\tSO_DOMAIN                            = 0x1029\n\tSO_DONTROUTE                         = 0x10\n\tSO_EE_CODE_TXTIME_INVALID_PARAM      = 0x1\n\tSO_EE_CODE_TXTIME_MISSED             = 0x2\n\tSO_EE_CODE_ZEROCOPY_COPIED           = 0x1\n\tSO_EE_ORIGIN_ICMP                    = 0x2\n\tSO_EE_ORIGIN_ICMP6                   = 0x3\n\tSO_EE_ORIGIN_LOCAL                   = 0x1\n\tSO_EE_ORIGIN_NONE                    = 0x0\n\tSO_EE_ORIGIN_TIMESTAMPING            = 0x4\n\tSO_EE_ORIGIN_TXSTATUS                = 0x4\n\tSO_EE_ORIGIN_TXTIME                  = 0x6\n\tSO_EE_ORIGIN_ZEROCOPY                = 0x5\n\tSO_ERROR                             = 0x1007\n\tSO_GET_FILTER                        = 0x1a\n\tSO_INCOMING_CPU                      = 0x31\n\tSO_INCOMING_NAPI_ID                  = 0x38\n\tSO_KEEPALIVE                         = 0x8\n\tSO_LINGER                            = 0x80\n\tSO_LOCK_FILTER                       = 0x2c\n\tSO_MARK                              = 0x24\n\tSO_MAX_PACING_RATE                   = 0x2f\n\tSO_MEMINFO                           = 0x37\n\tSO_NOFCS                             = 0x2b\n\tSO_NO_CHECK                          = 0xb\n\tSO_OOBINLINE                         = 0x100\n\tSO_PASSCRED                          = 0x11\n\tSO_PASSSEC                           = 0x22\n\tSO_PEEK_OFF                          = 0x2a\n\tSO_PEERCRED                          = 0x12\n\tSO_PEERGROUPS                        = 0x3b\n\tSO_PEERNAME                          = 0x1c\n\tSO_PEERSEC                           = 0x1e\n\tSO_PRIORITY                          = 0xc\n\tSO_PROTOCOL                          = 0x1028\n\tSO_RCVBUF                            = 0x1002\n\tSO_RCVBUFFORCE                       = 0x21\n\tSO_RCVLOWAT                          = 0x1004\n\tSO_RCVTIMEO                          = 0x1006\n\tSO_RCVTIMEO_NEW                      = 0x42\n\tSO_RCVTIMEO_OLD                      = 0x1006\n\tSO_REUSEADDR                         = 0x4\n\tSO_REUSEPORT                         = 0x200\n\tSO_RXQ_OVFL                          = 0x28\n\tSO_SECURITY_AUTHENTICATION           = 0x16\n\tSO_SECURITY_ENCRYPTION_NETWORK       = 0x18\n\tSO_SECURITY_ENCRYPTION_TRANSPORT     = 0x17\n\tSO_SELECT_ERR_QUEUE                  = 0x2d\n\tSO_SNDBUF                            = 0x1001\n\tSO_SNDBUFFORCE                       = 0x1f\n\tSO_SNDLOWAT                          = 0x1003\n\tSO_SNDTIMEO                          = 0x1005\n\tSO_SNDTIMEO_NEW                      = 0x43\n\tSO_SNDTIMEO_OLD                      = 0x1005\n\tSO_STYLE                             = 0x1008\n\tSO_TIMESTAMP                         = 0x1d\n\tSO_TIMESTAMPING                      = 0x25\n\tSO_TIMESTAMPING_NEW                  = 0x41\n\tSO_TIMESTAMPING_OLD                  = 0x25\n\tSO_TIMESTAMPNS                       = 0x23\n\tSO_TIMESTAMPNS_NEW                   = 0x40\n\tSO_TIMESTAMPNS_OLD                   = 0x23\n\tSO_TIMESTAMP_NEW                     = 0x3f\n\tSO_TIMESTAMP_OLD                     = 0x1d\n\tSO_TXTIME                            = 0x3d\n\tSO_TYPE                              = 0x1008\n\tSO_VM_SOCKETS_BUFFER_MAX_SIZE        = 0x2\n\tSO_VM_SOCKETS_BUFFER_MIN_SIZE        = 0x1\n\tSO_VM_SOCKETS_BUFFER_SIZE            = 0x0\n\tSO_VM_SOCKETS_CONNECT_TIMEOUT        = 0x6\n\tSO_VM_SOCKETS_NONBLOCK_TXRX          = 0x7\n\tSO_VM_SOCKETS_PEER_HOST_VM_ID        = 0x3\n\tSO_VM_SOCKETS_TRUSTED                = 0x5\n\tSO_WIFI_STATUS                       = 0x29\n\tSO_ZEROCOPY                          = 0x3c\n\tSPLICE_F_GIFT                        = 0x8\n\tSPLICE_F_MORE                        = 0x4\n\tSPLICE_F_MOVE                        = 0x1\n\tSPLICE_F_NONBLOCK                    = 0x2\n\tSQUASHFS_MAGIC                       = 0x73717368\n\tSTACK_END_MAGIC                      = 0x57ac6e9d\n\tSTATX_ALL                            = 0xfff\n\tSTATX_ATIME                          = 0x20\n\tSTATX_ATTR_APPEND                    = 0x20\n\tSTATX_ATTR_AUTOMOUNT                 = 0x1000\n\tSTATX_ATTR_COMPRESSED                = 0x4\n\tSTATX_ATTR_ENCRYPTED                 = 0x800\n\tSTATX_ATTR_IMMUTABLE                 = 0x10\n\tSTATX_ATTR_NODUMP                    = 0x40\n\tSTATX_BASIC_STATS                    = 0x7ff\n\tSTATX_BLOCKS                         = 0x400\n\tSTATX_BTIME                          = 0x800\n\tSTATX_CTIME                          = 0x80\n\tSTATX_GID                            = 0x10\n\tSTATX_INO                            = 0x100\n\tSTATX_MODE                           = 0x2\n\tSTATX_MTIME                          = 0x40\n\tSTATX_NLINK                          = 0x4\n\tSTATX_SIZE                           = 0x200\n\tSTATX_TYPE                           = 0x1\n\tSTATX_UID                            = 0x8\n\tSTATX__RESERVED                      = 0x80000000\n\tSYNC_FILE_RANGE_WAIT_AFTER           = 0x4\n\tSYNC_FILE_RANGE_WAIT_BEFORE          = 0x1\n\tSYNC_FILE_RANGE_WRITE                = 0x2\n\tSYSFS_MAGIC                          = 0x62656572\n\tS_BLKSIZE                            = 0x200\n\tS_IEXEC                              = 0x40\n\tS_IFBLK                              = 0x6000\n\tS_IFCHR                              = 0x2000\n\tS_IFDIR                              = 0x4000\n\tS_IFIFO                              = 0x1000\n\tS_IFLNK                              = 0xa000\n\tS_IFMT                               = 0xf000\n\tS_IFREG                              = 0x8000\n\tS_IFSOCK                             = 0xc000\n\tS_IREAD                              = 0x100\n\tS_IRGRP                              = 0x20\n\tS_IROTH                              = 0x4\n\tS_IRUSR                              = 0x100\n\tS_IRWXG                              = 0x38\n\tS_IRWXO                              = 0x7\n\tS_IRWXU                              = 0x1c0\n\tS_ISGID                              = 0x400\n\tS_ISUID                              = 0x800\n\tS_ISVTX                              = 0x200\n\tS_IWGRP                              = 0x10\n\tS_IWOTH                              = 0x2\n\tS_IWRITE                             = 0x80\n\tS_IWUSR                              = 0x80\n\tS_IXGRP                              = 0x8\n\tS_IXOTH                              = 0x1\n\tS_IXUSR                              = 0x40\n\tTAB0                                 = 0x0\n\tTAB1                                 = 0x800\n\tTAB2                                 = 0x1000\n\tTAB3                                 = 0x1800\n\tTABDLY                               = 0x1800\n\tTASKSTATS_CMD_ATTR_MAX               = 0x4\n\tTASKSTATS_CMD_MAX                    = 0x2\n\tTASKSTATS_GENL_NAME                  = \"TASKSTATS\"\n\tTASKSTATS_GENL_VERSION               = 0x1\n\tTASKSTATS_TYPE_MAX                   = 0x6\n\tTASKSTATS_VERSION                    = 0x9\n\tTCFLSH                               = 0x5407\n\tTCGETA                               = 0x5401\n\tTCGETS                               = 0x540d\n\tTCGETS2                              = 0x4030542a\n\tTCIFLUSH                             = 0x0\n\tTCIOFF                               = 0x2\n\tTCIOFLUSH                            = 0x2\n\tTCION                                = 0x3\n\tTCOFLUSH                             = 0x1\n\tTCOOFF                               = 0x0\n\tTCOON                                = 0x1\n\tTCP_BPF_IW                           = 0x3e9\n\tTCP_BPF_SNDCWND_CLAMP                = 0x3ea\n\tTCP_CC_INFO                          = 0x1a\n\tTCP_CM_INQ                           = 0x24\n\tTCP_CONGESTION                       = 0xd\n\tTCP_COOKIE_IN_ALWAYS                 = 0x1\n\tTCP_COOKIE_MAX                       = 0x10\n\tTCP_COOKIE_MIN                       = 0x8\n\tTCP_COOKIE_OUT_NEVER                 = 0x2\n\tTCP_COOKIE_PAIR_SIZE                 = 0x20\n\tTCP_COOKIE_TRANSACTIONS              = 0xf\n\tTCP_CORK                             = 0x3\n\tTCP_DEFER_ACCEPT                     = 0x9\n\tTCP_FASTOPEN                         = 0x17\n\tTCP_FASTOPEN_CONNECT                 = 0x1e\n\tTCP_FASTOPEN_KEY                     = 0x21\n\tTCP_FASTOPEN_NO_COOKIE               = 0x22\n\tTCP_INFO                             = 0xb\n\tTCP_INQ                              = 0x24\n\tTCP_KEEPCNT                          = 0x6\n\tTCP_KEEPIDLE                         = 0x4\n\tTCP_KEEPINTVL                        = 0x5\n\tTCP_LINGER2                          = 0x8\n\tTCP_MAXSEG                           = 0x2\n\tTCP_MAXWIN                           = 0xffff\n\tTCP_MAX_WINSHIFT                     = 0xe\n\tTCP_MD5SIG                           = 0xe\n\tTCP_MD5SIG_EXT                       = 0x20\n\tTCP_MD5SIG_FLAG_PREFIX               = 0x1\n\tTCP_MD5SIG_MAXKEYLEN                 = 0x50\n\tTCP_MSS                              = 0x200\n\tTCP_MSS_DEFAULT                      = 0x218\n\tTCP_MSS_DESIRED                      = 0x4c4\n\tTCP_NODELAY                          = 0x1\n\tTCP_NOTSENT_LOWAT                    = 0x19\n\tTCP_QUEUE_SEQ                        = 0x15\n\tTCP_QUICKACK                         = 0xc\n\tTCP_REPAIR                           = 0x13\n\tTCP_REPAIR_OFF                       = 0x0\n\tTCP_REPAIR_OFF_NO_WP                 = -0x1\n\tTCP_REPAIR_ON                        = 0x1\n\tTCP_REPAIR_OPTIONS                   = 0x16\n\tTCP_REPAIR_QUEUE                     = 0x14\n\tTCP_REPAIR_WINDOW                    = 0x1d\n\tTCP_SAVED_SYN                        = 0x1c\n\tTCP_SAVE_SYN                         = 0x1b\n\tTCP_SYNCNT                           = 0x7\n\tTCP_S_DATA_IN                        = 0x4\n\tTCP_S_DATA_OUT                       = 0x8\n\tTCP_THIN_DUPACK                      = 0x11\n\tTCP_THIN_LINEAR_TIMEOUTS             = 0x10\n\tTCP_TIMESTAMP                        = 0x18\n\tTCP_ULP                              = 0x1f\n\tTCP_USER_TIMEOUT                     = 0x12\n\tTCP_WINDOW_CLAMP                     = 0xa\n\tTCP_ZEROCOPY_RECEIVE                 = 0x23\n\tTCSAFLUSH                            = 0x5410\n\tTCSBRK                               = 0x5405\n\tTCSBRKP                              = 0x5486\n\tTCSETA                               = 0x5402\n\tTCSETAF                              = 0x5404\n\tTCSETAW                              = 0x5403\n\tTCSETS                               = 0x540e\n\tTCSETS2                              = 0x8030542b\n\tTCSETSF                              = 0x5410\n\tTCSETSF2                             = 0x8030542d\n\tTCSETSW                              = 0x540f\n\tTCSETSW2                             = 0x8030542c\n\tTCXONC                               = 0x5406\n\tTIMER_ABSTIME                        = 0x1\n\tTIOCCBRK                             = 0x5428\n\tTIOCCONS                             = 0x80047478\n\tTIOCEXCL                             = 0x740d\n\tTIOCGDEV                             = 0x40045432\n\tTIOCGETD                             = 0x7400\n\tTIOCGETP                             = 0x7408\n\tTIOCGEXCL                            = 0x40045440\n\tTIOCGICOUNT                          = 0x5492\n\tTIOCGISO7816                         = 0x40285442\n\tTIOCGLCKTRMIOS                       = 0x548b\n\tTIOCGLTC                             = 0x7474\n\tTIOCGPGRP                            = 0x40047477\n\tTIOCGPKT                             = 0x40045438\n\tTIOCGPTLCK                           = 0x40045439\n\tTIOCGPTN                             = 0x40045430\n\tTIOCGPTPEER                          = 0x20005441\n\tTIOCGRS485                           = 0x4020542e\n\tTIOCGSERIAL                          = 0x5484\n\tTIOCGSID                             = 0x7416\n\tTIOCGSOFTCAR                         = 0x5481\n\tTIOCGWINSZ                           = 0x40087468\n\tTIOCINQ                              = 0x467f\n\tTIOCLINUX                            = 0x5483\n\tTIOCMBIC                             = 0x741c\n\tTIOCMBIS                             = 0x741b\n\tTIOCMGET                             = 0x741d\n\tTIOCMIWAIT                           = 0x5491\n\tTIOCMSET                             = 0x741a\n\tTIOCM_CAR                            = 0x100\n\tTIOCM_CD                             = 0x100\n\tTIOCM_CTS                            = 0x40\n\tTIOCM_DSR                            = 0x400\n\tTIOCM_DTR                            = 0x2\n\tTIOCM_LE                             = 0x1\n\tTIOCM_RI                             = 0x200\n\tTIOCM_RNG                            = 0x200\n\tTIOCM_RTS                            = 0x4\n\tTIOCM_SR                             = 0x20\n\tTIOCM_ST                             = 0x10\n\tTIOCNOTTY                            = 0x5471\n\tTIOCNXCL                             = 0x740e\n\tTIOCOUTQ                             = 0x7472\n\tTIOCPKT                              = 0x5470\n\tTIOCPKT_DATA                         = 0x0\n\tTIOCPKT_DOSTOP                       = 0x20\n\tTIOCPKT_FLUSHREAD                    = 0x1\n\tTIOCPKT_FLUSHWRITE                   = 0x2\n\tTIOCPKT_IOCTL                        = 0x40\n\tTIOCPKT_NOSTOP                       = 0x10\n\tTIOCPKT_START                        = 0x8\n\tTIOCPKT_STOP                         = 0x4\n\tTIOCSBRK                             = 0x5427\n\tTIOCSCTTY                            = 0x5480\n\tTIOCSERCONFIG                        = 0x5488\n\tTIOCSERGETLSR                        = 0x548e\n\tTIOCSERGETMULTI                      = 0x548f\n\tTIOCSERGSTRUCT                       = 0x548d\n\tTIOCSERGWILD                         = 0x5489\n\tTIOCSERSETMULTI                      = 0x5490\n\tTIOCSERSWILD                         = 0x548a\n\tTIOCSER_TEMT                         = 0x1\n\tTIOCSETD                             = 0x7401\n\tTIOCSETN                             = 0x740a\n\tTIOCSETP                             = 0x7409\n\tTIOCSIG                              = 0x80045436\n\tTIOCSISO7816                         = 0xc0285443\n\tTIOCSLCKTRMIOS                       = 0x548c\n\tTIOCSLTC                             = 0x7475\n\tTIOCSPGRP                            = 0x80047476\n\tTIOCSPTLCK                           = 0x80045431\n\tTIOCSRS485                           = 0xc020542f\n\tTIOCSSERIAL                          = 0x5485\n\tTIOCSSOFTCAR                         = 0x5482\n\tTIOCSTI                              = 0x5472\n\tTIOCSWINSZ                           = 0x80087467\n\tTIOCVHANGUP                          = 0x5437\n\tTMPFS_MAGIC                          = 0x1021994\n\tTOSTOP                               = 0x8000\n\tTPACKET_ALIGNMENT                    = 0x10\n\tTPACKET_HDRLEN                       = 0x34\n\tTP_STATUS_AVAILABLE                  = 0x0\n\tTP_STATUS_BLK_TMO                    = 0x20\n\tTP_STATUS_COPY                       = 0x2\n\tTP_STATUS_CSUMNOTREADY               = 0x8\n\tTP_STATUS_CSUM_VALID                 = 0x80\n\tTP_STATUS_KERNEL                     = 0x0\n\tTP_STATUS_LOSING                     = 0x4\n\tTP_STATUS_SENDING                    = 0x2\n\tTP_STATUS_SEND_REQUEST               = 0x1\n\tTP_STATUS_TS_RAW_HARDWARE            = -0x80000000\n\tTP_STATUS_TS_SOFTWARE                = 0x20000000\n\tTP_STATUS_TS_SYS_HARDWARE            = 0x40000000\n\tTP_STATUS_USER                       = 0x1\n\tTP_STATUS_VLAN_TPID_VALID            = 0x40\n\tTP_STATUS_VLAN_VALID                 = 0x10\n\tTP_STATUS_WRONG_FORMAT               = 0x4\n\tTRACEFS_MAGIC                        = 0x74726163\n\tTS_COMM_LEN                          = 0x20\n\tTUNATTACHFILTER                      = 0x801054d5\n\tTUNDETACHFILTER                      = 0x801054d6\n\tTUNGETFEATURES                       = 0x400454cf\n\tTUNGETFILTER                         = 0x401054db\n\tTUNGETIFF                            = 0x400454d2\n\tTUNGETSNDBUF                         = 0x400454d3\n\tTUNGETVNETBE                         = 0x400454df\n\tTUNGETVNETHDRSZ                      = 0x400454d7\n\tTUNGETVNETLE                         = 0x400454dd\n\tTUNSETCARRIER                        = 0x800454e2\n\tTUNSETDEBUG                          = 0x800454c9\n\tTUNSETFILTEREBPF                     = 0x400454e1\n\tTUNSETGROUP                          = 0x800454ce\n\tTUNSETIFF                            = 0x800454ca\n\tTUNSETIFINDEX                        = 0x800454da\n\tTUNSETLINK                           = 0x800454cd\n\tTUNSETNOCSUM                         = 0x800454c8\n\tTUNSETOFFLOAD                        = 0x800454d0\n\tTUNSETOWNER                          = 0x800454cc\n\tTUNSETPERSIST                        = 0x800454cb\n\tTUNSETQUEUE                          = 0x800454d9\n\tTUNSETSNDBUF                         = 0x800454d4\n\tTUNSETSTEERINGEBPF                   = 0x400454e0\n\tTUNSETTXFILTER                       = 0x800454d1\n\tTUNSETVNETBE                         = 0x800454de\n\tTUNSETVNETHDRSZ                      = 0x800454d8\n\tTUNSETVNETLE                         = 0x800454dc\n\tUBI_IOCATT                           = 0x80186f40\n\tUBI_IOCDET                           = 0x80046f41\n\tUBI_IOCEBCH                          = 0x80044f02\n\tUBI_IOCEBER                          = 0x80044f01\n\tUBI_IOCEBISMAP                       = 0x40044f05\n\tUBI_IOCEBMAP                         = 0x80084f03\n\tUBI_IOCEBUNMAP                       = 0x80044f04\n\tUBI_IOCMKVOL                         = 0x80986f00\n\tUBI_IOCRMVOL                         = 0x80046f01\n\tUBI_IOCRNVOL                         = 0x91106f03\n\tUBI_IOCRPEB                          = 0x80046f04\n\tUBI_IOCRSVOL                         = 0x800c6f02\n\tUBI_IOCSETVOLPROP                    = 0x80104f06\n\tUBI_IOCSPEB                          = 0x80046f05\n\tUBI_IOCVOLCRBLK                      = 0x80804f07\n\tUBI_IOCVOLRMBLK                      = 0x20004f08\n\tUBI_IOCVOLUP                         = 0x80084f00\n\tUDF_SUPER_MAGIC                      = 0x15013346\n\tUMOUNT_NOFOLLOW                      = 0x8\n\tUSBDEVICE_SUPER_MAGIC                = 0x9fa2\n\tUTIME_NOW                            = 0x3fffffff\n\tUTIME_OMIT                           = 0x3ffffffe\n\tV9FS_MAGIC                           = 0x1021997\n\tVDISCARD                             = 0xd\n\tVEOF                                 = 0x10\n\tVEOL                                 = 0x11\n\tVEOL2                                = 0x6\n\tVERASE                               = 0x2\n\tVINTR                                = 0x0\n\tVKILL                                = 0x3\n\tVLNEXT                               = 0xf\n\tVMADDR_CID_ANY                       = 0xffffffff\n\tVMADDR_CID_HOST                      = 0x2\n\tVMADDR_CID_HYPERVISOR                = 0x0\n\tVMADDR_CID_RESERVED                  = 0x1\n\tVMADDR_PORT_ANY                      = 0xffffffff\n\tVMIN                                 = 0x4\n\tVM_SOCKETS_INVALID_VERSION           = 0xffffffff\n\tVQUIT                                = 0x1\n\tVREPRINT                             = 0xc\n\tVSTART                               = 0x8\n\tVSTOP                                = 0x9\n\tVSUSP                                = 0xa\n\tVSWTC                                = 0x7\n\tVSWTCH                               = 0x7\n\tVT0                                  = 0x0\n\tVT1                                  = 0x4000\n\tVTDLY                                = 0x4000\n\tVTIME                                = 0x5\n\tVWERASE                              = 0xe\n\tWALL                                 = 0x40000000\n\tWCLONE                               = 0x80000000\n\tWCONTINUED                           = 0x8\n\tWDIOC_GETBOOTSTATUS                  = 0x40045702\n\tWDIOC_GETPRETIMEOUT                  = 0x40045709\n\tWDIOC_GETSTATUS                      = 0x40045701\n\tWDIOC_GETSUPPORT                     = 0x40285700\n\tWDIOC_GETTEMP                        = 0x40045703\n\tWDIOC_GETTIMELEFT                    = 0x4004570a\n\tWDIOC_GETTIMEOUT                     = 0x40045707\n\tWDIOC_KEEPALIVE                      = 0x40045705\n\tWDIOC_SETOPTIONS                     = 0x40045704\n\tWDIOC_SETPRETIMEOUT                  = 0xc0045708\n\tWDIOC_SETTIMEOUT                     = 0xc0045706\n\tWEXITED                              = 0x4\n\tWIN_ACKMEDIACHANGE                   = 0xdb\n\tWIN_CHECKPOWERMODE1                  = 0xe5\n\tWIN_CHECKPOWERMODE2                  = 0x98\n\tWIN_DEVICE_RESET                     = 0x8\n\tWIN_DIAGNOSE                         = 0x90\n\tWIN_DOORLOCK                         = 0xde\n\tWIN_DOORUNLOCK                       = 0xdf\n\tWIN_DOWNLOAD_MICROCODE               = 0x92\n\tWIN_FLUSH_CACHE                      = 0xe7\n\tWIN_FLUSH_CACHE_EXT                  = 0xea\n\tWIN_FORMAT                           = 0x50\n\tWIN_GETMEDIASTATUS                   = 0xda\n\tWIN_IDENTIFY                         = 0xec\n\tWIN_IDENTIFY_DMA                     = 0xee\n\tWIN_IDLEIMMEDIATE                    = 0xe1\n\tWIN_INIT                             = 0x60\n\tWIN_MEDIAEJECT                       = 0xed\n\tWIN_MULTREAD                         = 0xc4\n\tWIN_MULTREAD_EXT                     = 0x29\n\tWIN_MULTWRITE                        = 0xc5\n\tWIN_MULTWRITE_EXT                    = 0x39\n\tWIN_NOP                              = 0x0\n\tWIN_PACKETCMD                        = 0xa0\n\tWIN_PIDENTIFY                        = 0xa1\n\tWIN_POSTBOOT                         = 0xdc\n\tWIN_PREBOOT                          = 0xdd\n\tWIN_QUEUED_SERVICE                   = 0xa2\n\tWIN_READ                             = 0x20\n\tWIN_READDMA                          = 0xc8\n\tWIN_READDMA_EXT                      = 0x25\n\tWIN_READDMA_ONCE                     = 0xc9\n\tWIN_READDMA_QUEUED                   = 0xc7\n\tWIN_READDMA_QUEUED_EXT               = 0x26\n\tWIN_READ_BUFFER                      = 0xe4\n\tWIN_READ_EXT                         = 0x24\n\tWIN_READ_LONG                        = 0x22\n\tWIN_READ_LONG_ONCE                   = 0x23\n\tWIN_READ_NATIVE_MAX                  = 0xf8\n\tWIN_READ_NATIVE_MAX_EXT              = 0x27\n\tWIN_READ_ONCE                        = 0x21\n\tWIN_RECAL                            = 0x10\n\tWIN_RESTORE                          = 0x10\n\tWIN_SECURITY_DISABLE                 = 0xf6\n\tWIN_SECURITY_ERASE_PREPARE           = 0xf3\n\tWIN_SECURITY_ERASE_UNIT              = 0xf4\n\tWIN_SECURITY_FREEZE_LOCK             = 0xf5\n\tWIN_SECURITY_SET_PASS                = 0xf1\n\tWIN_SECURITY_UNLOCK                  = 0xf2\n\tWIN_SEEK                             = 0x70\n\tWIN_SETFEATURES                      = 0xef\n\tWIN_SETIDLE1                         = 0xe3\n\tWIN_SETIDLE2                         = 0x97\n\tWIN_SETMULT                          = 0xc6\n\tWIN_SET_MAX                          = 0xf9\n\tWIN_SET_MAX_EXT                      = 0x37\n\tWIN_SLEEPNOW1                        = 0xe6\n\tWIN_SLEEPNOW2                        = 0x99\n\tWIN_SMART                            = 0xb0\n\tWIN_SPECIFY                          = 0x91\n\tWIN_SRST                             = 0x8\n\tWIN_STANDBY                          = 0xe2\n\tWIN_STANDBY2                         = 0x96\n\tWIN_STANDBYNOW1                      = 0xe0\n\tWIN_STANDBYNOW2                      = 0x94\n\tWIN_VERIFY                           = 0x40\n\tWIN_VERIFY_EXT                       = 0x42\n\tWIN_VERIFY_ONCE                      = 0x41\n\tWIN_WRITE                            = 0x30\n\tWIN_WRITEDMA                         = 0xca\n\tWIN_WRITEDMA_EXT                     = 0x35\n\tWIN_WRITEDMA_ONCE                    = 0xcb\n\tWIN_WRITEDMA_QUEUED                  = 0xcc\n\tWIN_WRITEDMA_QUEUED_EXT              = 0x36\n\tWIN_WRITE_BUFFER                     = 0xe8\n\tWIN_WRITE_EXT                        = 0x34\n\tWIN_WRITE_LONG                       = 0x32\n\tWIN_WRITE_LONG_ONCE                  = 0x33\n\tWIN_WRITE_ONCE                       = 0x31\n\tWIN_WRITE_SAME                       = 0xe9\n\tWIN_WRITE_VERIFY                     = 0x3c\n\tWNOHANG                              = 0x1\n\tWNOTHREAD                            = 0x20000000\n\tWNOWAIT                              = 0x1000000\n\tWORDSIZE                             = 0x40\n\tWSTOPPED                             = 0x2\n\tWUNTRACED                            = 0x2\n\tXATTR_CREATE                         = 0x1\n\tXATTR_REPLACE                        = 0x2\n\tXCASE                                = 0x4\n\tXDP_COPY                             = 0x2\n\tXDP_FLAGS_DRV_MODE                   = 0x4\n\tXDP_FLAGS_HW_MODE                    = 0x8\n\tXDP_FLAGS_MASK                       = 0xf\n\tXDP_FLAGS_MODES                      = 0xe\n\tXDP_FLAGS_SKB_MODE                   = 0x2\n\tXDP_FLAGS_UPDATE_IF_NOEXIST          = 0x1\n\tXDP_MMAP_OFFSETS                     = 0x1\n\tXDP_PACKET_HEADROOM                  = 0x100\n\tXDP_PGOFF_RX_RING                    = 0x0\n\tXDP_PGOFF_TX_RING                    = 0x80000000\n\tXDP_RX_RING                          = 0x2\n\tXDP_SHARED_UMEM                      = 0x1\n\tXDP_STATISTICS                       = 0x7\n\tXDP_TX_RING                          = 0x3\n\tXDP_UMEM_COMPLETION_RING             = 0x6\n\tXDP_UMEM_FILL_RING                   = 0x5\n\tXDP_UMEM_PGOFF_COMPLETION_RING       = 0x180000000\n\tXDP_UMEM_PGOFF_FILL_RING             = 0x100000000\n\tXDP_UMEM_REG                         = 0x4\n\tXDP_ZEROCOPY                         = 0x4\n\tXENFS_SUPER_MAGIC                    = 0xabba1974\n\tXFS_SUPER_MAGIC                      = 0x58465342\n\tXTABS                                = 0x1800\n\tZSMALLOC_MAGIC                       = 0x58295829\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x7d)\n\tEADDRNOTAVAIL   = syscall.Errno(0x7e)\n\tEADV            = syscall.Errno(0x44)\n\tEAFNOSUPPORT    = syscall.Errno(0x7c)\n\tEAGAIN          = syscall.Errno(0xb)\n\tEALREADY        = syscall.Errno(0x95)\n\tEBADE           = syscall.Errno(0x32)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADFD          = syscall.Errno(0x51)\n\tEBADMSG         = syscall.Errno(0x4d)\n\tEBADR           = syscall.Errno(0x33)\n\tEBADRQC         = syscall.Errno(0x36)\n\tEBADSLT         = syscall.Errno(0x37)\n\tEBFONT          = syscall.Errno(0x3b)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x9e)\n\tECHILD          = syscall.Errno(0xa)\n\tECHRNG          = syscall.Errno(0x25)\n\tECOMM           = syscall.Errno(0x46)\n\tECONNABORTED    = syscall.Errno(0x82)\n\tECONNREFUSED    = syscall.Errno(0x92)\n\tECONNRESET      = syscall.Errno(0x83)\n\tEDEADLK         = syscall.Errno(0x2d)\n\tEDEADLOCK       = syscall.Errno(0x38)\n\tEDESTADDRREQ    = syscall.Errno(0x60)\n\tEDOM            = syscall.Errno(0x21)\n\tEDOTDOT         = syscall.Errno(0x49)\n\tEDQUOT          = syscall.Errno(0x46d)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEHOSTDOWN       = syscall.Errno(0x93)\n\tEHOSTUNREACH    = syscall.Errno(0x94)\n\tEHWPOISON       = syscall.Errno(0xa8)\n\tEIDRM           = syscall.Errno(0x24)\n\tEILSEQ          = syscall.Errno(0x58)\n\tEINIT           = syscall.Errno(0x8d)\n\tEINPROGRESS     = syscall.Errno(0x96)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEISCONN         = syscall.Errno(0x85)\n\tEISDIR          = syscall.Errno(0x15)\n\tEISNAM          = syscall.Errno(0x8b)\n\tEKEYEXPIRED     = syscall.Errno(0xa2)\n\tEKEYREJECTED    = syscall.Errno(0xa4)\n\tEKEYREVOKED     = syscall.Errno(0xa3)\n\tEL2HLT          = syscall.Errno(0x2c)\n\tEL2NSYNC        = syscall.Errno(0x26)\n\tEL3HLT          = syscall.Errno(0x27)\n\tEL3RST          = syscall.Errno(0x28)\n\tELIBACC         = syscall.Errno(0x53)\n\tELIBBAD         = syscall.Errno(0x54)\n\tELIBEXEC        = syscall.Errno(0x57)\n\tELIBMAX         = syscall.Errno(0x56)\n\tELIBSCN         = syscall.Errno(0x55)\n\tELNRNG          = syscall.Errno(0x29)\n\tELOOP           = syscall.Errno(0x5a)\n\tEMEDIUMTYPE     = syscall.Errno(0xa0)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x61)\n\tEMULTIHOP       = syscall.Errno(0x4a)\n\tENAMETOOLONG    = syscall.Errno(0x4e)\n\tENAVAIL         = syscall.Errno(0x8a)\n\tENETDOWN        = syscall.Errno(0x7f)\n\tENETRESET       = syscall.Errno(0x81)\n\tENETUNREACH     = syscall.Errno(0x80)\n\tENFILE          = syscall.Errno(0x17)\n\tENOANO          = syscall.Errno(0x35)\n\tENOBUFS         = syscall.Errno(0x84)\n\tENOCSI          = syscall.Errno(0x2b)\n\tENODATA         = syscall.Errno(0x3d)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOKEY          = syscall.Errno(0xa1)\n\tENOLCK          = syscall.Errno(0x2e)\n\tENOLINK         = syscall.Errno(0x43)\n\tENOMEDIUM       = syscall.Errno(0x9f)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x23)\n\tENONET          = syscall.Errno(0x40)\n\tENOPKG          = syscall.Errno(0x41)\n\tENOPROTOOPT     = syscall.Errno(0x63)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSR           = syscall.Errno(0x3f)\n\tENOSTR          = syscall.Errno(0x3c)\n\tENOSYS          = syscall.Errno(0x59)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x86)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x5d)\n\tENOTNAM         = syscall.Errno(0x89)\n\tENOTRECOVERABLE = syscall.Errno(0xa6)\n\tENOTSOCK        = syscall.Errno(0x5f)\n\tENOTSUP         = syscall.Errno(0x7a)\n\tENOTTY          = syscall.Errno(0x19)\n\tENOTUNIQ        = syscall.Errno(0x50)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x7a)\n\tEOVERFLOW       = syscall.Errno(0x4f)\n\tEOWNERDEAD      = syscall.Errno(0xa5)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x7b)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROTO          = syscall.Errno(0x47)\n\tEPROTONOSUPPORT = syscall.Errno(0x78)\n\tEPROTOTYPE      = syscall.Errno(0x62)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMCHG         = syscall.Errno(0x52)\n\tEREMDEV         = syscall.Errno(0x8e)\n\tEREMOTE         = syscall.Errno(0x42)\n\tEREMOTEIO       = syscall.Errno(0x8c)\n\tERESTART        = syscall.Errno(0x5b)\n\tERFKILL         = syscall.Errno(0xa7)\n\tEROFS           = syscall.Errno(0x1e)\n\tESHUTDOWN       = syscall.Errno(0x8f)\n\tESOCKTNOSUPPORT = syscall.Errno(0x79)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESRMNT          = syscall.Errno(0x45)\n\tESTALE          = syscall.Errno(0x97)\n\tESTRPIPE        = syscall.Errno(0x5c)\n\tETIME           = syscall.Errno(0x3e)\n\tETIMEDOUT       = syscall.Errno(0x91)\n\tETOOMANYREFS    = syscall.Errno(0x90)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUCLEAN         = syscall.Errno(0x87)\n\tEUNATCH         = syscall.Errno(0x2a)\n\tEUSERS          = syscall.Errno(0x5e)\n\tEWOULDBLOCK     = syscall.Errno(0xb)\n\tEXDEV           = syscall.Errno(0x12)\n\tEXFULL          = syscall.Errno(0x34)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x12)\n\tSIGCLD    = syscall.Signal(0x12)\n\tSIGCONT   = syscall.Signal(0x19)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x16)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPOLL   = syscall.Signal(0x16)\n\tSIGPROF   = syscall.Signal(0x1d)\n\tSIGPWR    = syscall.Signal(0x13)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTOP   = syscall.Signal(0x17)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x18)\n\tSIGTTIN   = syscall.Signal(0x1a)\n\tSIGTTOU   = syscall.Signal(0x1b)\n\tSIGURG    = syscall.Signal(0x15)\n\tSIGUSR1   = syscall.Signal(0x10)\n\tSIGUSR2   = syscall.Signal(0x11)\n\tSIGVTALRM = syscall.Signal(0x1c)\n\tSIGWINCH  = syscall.Signal(0x14)\n\tSIGXCPU   = syscall.Signal(0x1e)\n\tSIGXFSZ   = syscall.Signal(0x1f)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"no such device or address\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device or resource busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"invalid cross-device link\"},\n\t{19, \"ENODEV\", \"no such device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"numerical result out of range\"},\n\t{35, \"ENOMSG\", \"no message of desired type\"},\n\t{36, \"EIDRM\", \"identifier removed\"},\n\t{37, \"ECHRNG\", \"channel number out of range\"},\n\t{38, \"EL2NSYNC\", \"level 2 not synchronized\"},\n\t{39, \"EL3HLT\", \"level 3 halted\"},\n\t{40, \"EL3RST\", \"level 3 reset\"},\n\t{41, \"ELNRNG\", \"link number out of range\"},\n\t{42, \"EUNATCH\", \"protocol driver not attached\"},\n\t{43, \"ENOCSI\", \"no CSI structure available\"},\n\t{44, \"EL2HLT\", \"level 2 halted\"},\n\t{45, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{46, \"ENOLCK\", \"no locks available\"},\n\t{50, \"EBADE\", \"invalid exchange\"},\n\t{51, \"EBADR\", \"invalid request descriptor\"},\n\t{52, \"EXFULL\", \"exchange full\"},\n\t{53, \"ENOANO\", \"no anode\"},\n\t{54, \"EBADRQC\", \"invalid request code\"},\n\t{55, \"EBADSLT\", \"invalid slot\"},\n\t{56, \"EDEADLOCK\", \"file locking deadlock error\"},\n\t{59, \"EBFONT\", \"bad font file format\"},\n\t{60, \"ENOSTR\", \"device not a stream\"},\n\t{61, \"ENODATA\", \"no data available\"},\n\t{62, \"ETIME\", \"timer expired\"},\n\t{63, \"ENOSR\", \"out of streams resources\"},\n\t{64, \"ENONET\", \"machine is not on the network\"},\n\t{65, \"ENOPKG\", \"package not installed\"},\n\t{66, \"EREMOTE\", \"object is remote\"},\n\t{67, \"ENOLINK\", \"link has been severed\"},\n\t{68, \"EADV\", \"advertise error\"},\n\t{69, \"ESRMNT\", \"srmount error\"},\n\t{70, \"ECOMM\", \"communication error on send\"},\n\t{71, \"EPROTO\", \"protocol error\"},\n\t{73, \"EDOTDOT\", \"RFS specific error\"},\n\t{74, \"EMULTIHOP\", \"multihop attempted\"},\n\t{77, \"EBADMSG\", \"bad message\"},\n\t{78, \"ENAMETOOLONG\", \"file name too long\"},\n\t{79, \"EOVERFLOW\", \"value too large for defined data type\"},\n\t{80, \"ENOTUNIQ\", \"name not unique on network\"},\n\t{81, \"EBADFD\", \"file descriptor in bad state\"},\n\t{82, \"EREMCHG\", \"remote address changed\"},\n\t{83, \"ELIBACC\", \"can not access a needed shared library\"},\n\t{84, \"ELIBBAD\", \"accessing a corrupted shared library\"},\n\t{85, \"ELIBSCN\", \".lib section in a.out corrupted\"},\n\t{86, \"ELIBMAX\", \"attempting to link in too many shared libraries\"},\n\t{87, \"ELIBEXEC\", \"cannot exec a shared library directly\"},\n\t{88, \"EILSEQ\", \"invalid or incomplete multibyte or wide character\"},\n\t{89, \"ENOSYS\", \"function not implemented\"},\n\t{90, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{91, \"ERESTART\", \"interrupted system call should be restarted\"},\n\t{92, \"ESTRPIPE\", \"streams pipe error\"},\n\t{93, \"ENOTEMPTY\", \"directory not empty\"},\n\t{94, \"EUSERS\", \"too many users\"},\n\t{95, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{96, \"EDESTADDRREQ\", \"destination address required\"},\n\t{97, \"EMSGSIZE\", \"message too long\"},\n\t{98, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{99, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{120, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{121, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{122, \"ENOTSUP\", \"operation not supported\"},\n\t{123, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{124, \"EAFNOSUPPORT\", \"address family not supported by protocol\"},\n\t{125, \"EADDRINUSE\", \"address already in use\"},\n\t{126, \"EADDRNOTAVAIL\", \"cannot assign requested address\"},\n\t{127, \"ENETDOWN\", \"network is down\"},\n\t{128, \"ENETUNREACH\", \"network is unreachable\"},\n\t{129, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{130, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{131, \"ECONNRESET\", \"connection reset by peer\"},\n\t{132, \"ENOBUFS\", \"no buffer space available\"},\n\t{133, \"EISCONN\", \"transport endpoint is already connected\"},\n\t{134, \"ENOTCONN\", \"transport endpoint is not connected\"},\n\t{135, \"EUCLEAN\", \"structure needs cleaning\"},\n\t{137, \"ENOTNAM\", \"not a XENIX named type file\"},\n\t{138, \"ENAVAIL\", \"no XENIX semaphores available\"},\n\t{139, \"EISNAM\", \"is a named type file\"},\n\t{140, \"EREMOTEIO\", \"remote I/O error\"},\n\t{141, \"EINIT\", \"unknown error 141\"},\n\t{142, \"EREMDEV\", \"unknown error 142\"},\n\t{143, \"ESHUTDOWN\", \"cannot send after transport endpoint shutdown\"},\n\t{144, \"ETOOMANYREFS\", \"too many references: cannot splice\"},\n\t{145, \"ETIMEDOUT\", \"connection timed out\"},\n\t{146, \"ECONNREFUSED\", \"connection refused\"},\n\t{147, \"EHOSTDOWN\", \"host is down\"},\n\t{148, \"EHOSTUNREACH\", \"no route to host\"},\n\t{149, \"EALREADY\", \"operation already in progress\"},\n\t{150, \"EINPROGRESS\", \"operation now in progress\"},\n\t{151, \"ESTALE\", \"stale file handle\"},\n\t{158, \"ECANCELED\", \"operation canceled\"},\n\t{159, \"ENOMEDIUM\", \"no medium found\"},\n\t{160, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{161, \"ENOKEY\", \"required key not available\"},\n\t{162, \"EKEYEXPIRED\", \"key has expired\"},\n\t{163, \"EKEYREVOKED\", \"key has been revoked\"},\n\t{164, \"EKEYREJECTED\", \"key was rejected by service\"},\n\t{165, \"EOWNERDEAD\", \"owner died\"},\n\t{166, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{167, \"ERFKILL\", \"operation not possible due to RF-kill\"},\n\t{168, \"EHWPOISON\", \"memory page has hardware error\"},\n\t{1133, \"EDQUOT\", \"disk quota exceeded\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/breakpoint trap\"},\n\t{6, \"SIGABRT\", \"aborted\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGUSR1\", \"user defined signal 1\"},\n\t{17, \"SIGUSR2\", \"user defined signal 2\"},\n\t{18, \"SIGCHLD\", \"child exited\"},\n\t{19, \"SIGPWR\", \"power failure\"},\n\t{20, \"SIGWINCH\", \"window changed\"},\n\t{21, \"SIGURG\", \"urgent I/O condition\"},\n\t{22, \"SIGIO\", \"I/O possible\"},\n\t{23, \"SIGSTOP\", \"stopped (signal)\"},\n\t{24, \"SIGTSTP\", \"stopped\"},\n\t{25, \"SIGCONT\", \"continued\"},\n\t{26, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{27, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{28, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{29, \"SIGPROF\", \"profiling timer expired\"},\n\t{30, \"SIGXCPU\", \"CPU time limit exceeded\"},\n\t{31, \"SIGXFSZ\", \"file size limit exceeded\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go",
    "content": "// mkerrors.sh -Wall -Werror -static -I/tmp/include\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build mips64le,linux\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAAFS_MAGIC                           = 0x5a3c69f0\n\tADFS_SUPER_MAGIC                     = 0xadf5\n\tAFFS_SUPER_MAGIC                     = 0xadff\n\tAFS_FS_MAGIC                         = 0x6b414653\n\tAFS_SUPER_MAGIC                      = 0x5346414f\n\tAF_ALG                               = 0x26\n\tAF_APPLETALK                         = 0x5\n\tAF_ASH                               = 0x12\n\tAF_ATMPVC                            = 0x8\n\tAF_ATMSVC                            = 0x14\n\tAF_AX25                              = 0x3\n\tAF_BLUETOOTH                         = 0x1f\n\tAF_BRIDGE                            = 0x7\n\tAF_CAIF                              = 0x25\n\tAF_CAN                               = 0x1d\n\tAF_DECnet                            = 0xc\n\tAF_ECONET                            = 0x13\n\tAF_FILE                              = 0x1\n\tAF_IB                                = 0x1b\n\tAF_IEEE802154                        = 0x24\n\tAF_INET                              = 0x2\n\tAF_INET6                             = 0xa\n\tAF_IPX                               = 0x4\n\tAF_IRDA                              = 0x17\n\tAF_ISDN                              = 0x22\n\tAF_IUCV                              = 0x20\n\tAF_KCM                               = 0x29\n\tAF_KEY                               = 0xf\n\tAF_LLC                               = 0x1a\n\tAF_LOCAL                             = 0x1\n\tAF_MAX                               = 0x2d\n\tAF_MPLS                              = 0x1c\n\tAF_NETBEUI                           = 0xd\n\tAF_NETLINK                           = 0x10\n\tAF_NETROM                            = 0x6\n\tAF_NFC                               = 0x27\n\tAF_PACKET                            = 0x11\n\tAF_PHONET                            = 0x23\n\tAF_PPPOX                             = 0x18\n\tAF_QIPCRTR                           = 0x2a\n\tAF_RDS                               = 0x15\n\tAF_ROSE                              = 0xb\n\tAF_ROUTE                             = 0x10\n\tAF_RXRPC                             = 0x21\n\tAF_SECURITY                          = 0xe\n\tAF_SMC                               = 0x2b\n\tAF_SNA                               = 0x16\n\tAF_TIPC                              = 0x1e\n\tAF_UNIX                              = 0x1\n\tAF_UNSPEC                            = 0x0\n\tAF_VSOCK                             = 0x28\n\tAF_WANPIPE                           = 0x19\n\tAF_X25                               = 0x9\n\tAF_XDP                               = 0x2c\n\tALG_OP_DECRYPT                       = 0x0\n\tALG_OP_ENCRYPT                       = 0x1\n\tALG_SET_AEAD_ASSOCLEN                = 0x4\n\tALG_SET_AEAD_AUTHSIZE                = 0x5\n\tALG_SET_IV                           = 0x2\n\tALG_SET_KEY                          = 0x1\n\tALG_SET_OP                           = 0x3\n\tANON_INODE_FS_MAGIC                  = 0x9041934\n\tARPHRD_6LOWPAN                       = 0x339\n\tARPHRD_ADAPT                         = 0x108\n\tARPHRD_APPLETLK                      = 0x8\n\tARPHRD_ARCNET                        = 0x7\n\tARPHRD_ASH                           = 0x30d\n\tARPHRD_ATM                           = 0x13\n\tARPHRD_AX25                          = 0x3\n\tARPHRD_BIF                           = 0x307\n\tARPHRD_CAIF                          = 0x336\n\tARPHRD_CAN                           = 0x118\n\tARPHRD_CHAOS                         = 0x5\n\tARPHRD_CISCO                         = 0x201\n\tARPHRD_CSLIP                         = 0x101\n\tARPHRD_CSLIP6                        = 0x103\n\tARPHRD_DDCMP                         = 0x205\n\tARPHRD_DLCI                          = 0xf\n\tARPHRD_ECONET                        = 0x30e\n\tARPHRD_EETHER                        = 0x2\n\tARPHRD_ETHER                         = 0x1\n\tARPHRD_EUI64                         = 0x1b\n\tARPHRD_FCAL                          = 0x311\n\tARPHRD_FCFABRIC                      = 0x313\n\tARPHRD_FCPL                          = 0x312\n\tARPHRD_FCPP                          = 0x310\n\tARPHRD_FDDI                          = 0x306\n\tARPHRD_FRAD                          = 0x302\n\tARPHRD_HDLC                          = 0x201\n\tARPHRD_HIPPI                         = 0x30c\n\tARPHRD_HWX25                         = 0x110\n\tARPHRD_IEEE1394                      = 0x18\n\tARPHRD_IEEE802                       = 0x6\n\tARPHRD_IEEE80211                     = 0x321\n\tARPHRD_IEEE80211_PRISM               = 0x322\n\tARPHRD_IEEE80211_RADIOTAP            = 0x323\n\tARPHRD_IEEE802154                    = 0x324\n\tARPHRD_IEEE802154_MONITOR            = 0x325\n\tARPHRD_IEEE802_TR                    = 0x320\n\tARPHRD_INFINIBAND                    = 0x20\n\tARPHRD_IP6GRE                        = 0x337\n\tARPHRD_IPDDP                         = 0x309\n\tARPHRD_IPGRE                         = 0x30a\n\tARPHRD_IRDA                          = 0x30f\n\tARPHRD_LAPB                          = 0x204\n\tARPHRD_LOCALTLK                      = 0x305\n\tARPHRD_LOOPBACK                      = 0x304\n\tARPHRD_METRICOM                      = 0x17\n\tARPHRD_NETLINK                       = 0x338\n\tARPHRD_NETROM                        = 0x0\n\tARPHRD_NONE                          = 0xfffe\n\tARPHRD_PHONET                        = 0x334\n\tARPHRD_PHONET_PIPE                   = 0x335\n\tARPHRD_PIMREG                        = 0x30b\n\tARPHRD_PPP                           = 0x200\n\tARPHRD_PRONET                        = 0x4\n\tARPHRD_RAWHDLC                       = 0x206\n\tARPHRD_RAWIP                         = 0x207\n\tARPHRD_ROSE                          = 0x10e\n\tARPHRD_RSRVD                         = 0x104\n\tARPHRD_SIT                           = 0x308\n\tARPHRD_SKIP                          = 0x303\n\tARPHRD_SLIP                          = 0x100\n\tARPHRD_SLIP6                         = 0x102\n\tARPHRD_TUNNEL                        = 0x300\n\tARPHRD_TUNNEL6                       = 0x301\n\tARPHRD_VOID                          = 0xffff\n\tARPHRD_VSOCKMON                      = 0x33a\n\tARPHRD_X25                           = 0x10f\n\tAUTOFS_SUPER_MAGIC                   = 0x187\n\tB0                                   = 0x0\n\tB1000000                             = 0x1008\n\tB110                                 = 0x3\n\tB115200                              = 0x1002\n\tB1152000                             = 0x1009\n\tB1200                                = 0x9\n\tB134                                 = 0x4\n\tB150                                 = 0x5\n\tB1500000                             = 0x100a\n\tB1800                                = 0xa\n\tB19200                               = 0xe\n\tB200                                 = 0x6\n\tB2000000                             = 0x100b\n\tB230400                              = 0x1003\n\tB2400                                = 0xb\n\tB2500000                             = 0x100c\n\tB300                                 = 0x7\n\tB3000000                             = 0x100d\n\tB3500000                             = 0x100e\n\tB38400                               = 0xf\n\tB4000000                             = 0x100f\n\tB460800                              = 0x1004\n\tB4800                                = 0xc\n\tB50                                  = 0x1\n\tB500000                              = 0x1005\n\tB57600                               = 0x1001\n\tB576000                              = 0x1006\n\tB600                                 = 0x8\n\tB75                                  = 0x2\n\tB921600                              = 0x1007\n\tB9600                                = 0xd\n\tBALLOON_KVM_MAGIC                    = 0x13661366\n\tBDEVFS_MAGIC                         = 0x62646576\n\tBINDERFS_SUPER_MAGIC                 = 0x6c6f6f70\n\tBINFMTFS_MAGIC                       = 0x42494e4d\n\tBLKBSZGET                            = 0x40081270\n\tBLKBSZSET                            = 0x80081271\n\tBLKFLSBUF                            = 0x20001261\n\tBLKFRAGET                            = 0x20001265\n\tBLKFRASET                            = 0x20001264\n\tBLKGETSIZE                           = 0x20001260\n\tBLKGETSIZE64                         = 0x40081272\n\tBLKPBSZGET                           = 0x2000127b\n\tBLKRAGET                             = 0x20001263\n\tBLKRASET                             = 0x20001262\n\tBLKROGET                             = 0x2000125e\n\tBLKROSET                             = 0x2000125d\n\tBLKRRPART                            = 0x2000125f\n\tBLKSECTGET                           = 0x20001267\n\tBLKSECTSET                           = 0x20001266\n\tBLKSSZGET                            = 0x20001268\n\tBOTHER                               = 0x1000\n\tBPF_A                                = 0x10\n\tBPF_ABS                              = 0x20\n\tBPF_ADD                              = 0x0\n\tBPF_ALU                              = 0x4\n\tBPF_ALU64                            = 0x7\n\tBPF_AND                              = 0x50\n\tBPF_ANY                              = 0x0\n\tBPF_ARSH                             = 0xc0\n\tBPF_B                                = 0x10\n\tBPF_BUILD_ID_SIZE                    = 0x14\n\tBPF_CALL                             = 0x80\n\tBPF_DEVCG_ACC_MKNOD                  = 0x1\n\tBPF_DEVCG_ACC_READ                   = 0x2\n\tBPF_DEVCG_ACC_WRITE                  = 0x4\n\tBPF_DEVCG_DEV_BLOCK                  = 0x1\n\tBPF_DEVCG_DEV_CHAR                   = 0x2\n\tBPF_DIV                              = 0x30\n\tBPF_DW                               = 0x18\n\tBPF_END                              = 0xd0\n\tBPF_EXIST                            = 0x2\n\tBPF_EXIT                             = 0x90\n\tBPF_FROM_BE                          = 0x8\n\tBPF_FROM_LE                          = 0x0\n\tBPF_FS_MAGIC                         = 0xcafe4a11\n\tBPF_F_ALLOW_MULTI                    = 0x2\n\tBPF_F_ALLOW_OVERRIDE                 = 0x1\n\tBPF_F_ANY_ALIGNMENT                  = 0x2\n\tBPF_F_CTXLEN_MASK                    = 0xfffff00000000\n\tBPF_F_CURRENT_CPU                    = 0xffffffff\n\tBPF_F_CURRENT_NETNS                  = -0x1\n\tBPF_F_DONT_FRAGMENT                  = 0x4\n\tBPF_F_FAST_STACK_CMP                 = 0x200\n\tBPF_F_HDR_FIELD_MASK                 = 0xf\n\tBPF_F_INDEX_MASK                     = 0xffffffff\n\tBPF_F_INGRESS                        = 0x1\n\tBPF_F_INVALIDATE_HASH                = 0x2\n\tBPF_F_LOCK                           = 0x4\n\tBPF_F_MARK_ENFORCE                   = 0x40\n\tBPF_F_MARK_MANGLED_0                 = 0x20\n\tBPF_F_NO_COMMON_LRU                  = 0x2\n\tBPF_F_NO_PREALLOC                    = 0x1\n\tBPF_F_NUMA_NODE                      = 0x4\n\tBPF_F_PSEUDO_HDR                     = 0x10\n\tBPF_F_QUERY_EFFECTIVE                = 0x1\n\tBPF_F_RDONLY                         = 0x8\n\tBPF_F_RECOMPUTE_CSUM                 = 0x1\n\tBPF_F_REUSE_STACKID                  = 0x400\n\tBPF_F_SEQ_NUMBER                     = 0x8\n\tBPF_F_SKIP_FIELD_MASK                = 0xff\n\tBPF_F_STACK_BUILD_ID                 = 0x20\n\tBPF_F_STRICT_ALIGNMENT               = 0x1\n\tBPF_F_TUNINFO_IPV6                   = 0x1\n\tBPF_F_USER_BUILD_ID                  = 0x800\n\tBPF_F_USER_STACK                     = 0x100\n\tBPF_F_WRONLY                         = 0x10\n\tBPF_F_ZERO_CSUM_TX                   = 0x2\n\tBPF_F_ZERO_SEED                      = 0x40\n\tBPF_H                                = 0x8\n\tBPF_IMM                              = 0x0\n\tBPF_IND                              = 0x40\n\tBPF_JA                               = 0x0\n\tBPF_JEQ                              = 0x10\n\tBPF_JGE                              = 0x30\n\tBPF_JGT                              = 0x20\n\tBPF_JLE                              = 0xb0\n\tBPF_JLT                              = 0xa0\n\tBPF_JMP                              = 0x5\n\tBPF_JMP32                            = 0x6\n\tBPF_JNE                              = 0x50\n\tBPF_JSET                             = 0x40\n\tBPF_JSGE                             = 0x70\n\tBPF_JSGT                             = 0x60\n\tBPF_JSLE                             = 0xd0\n\tBPF_JSLT                             = 0xc0\n\tBPF_K                                = 0x0\n\tBPF_LD                               = 0x0\n\tBPF_LDX                              = 0x1\n\tBPF_LEN                              = 0x80\n\tBPF_LL_OFF                           = -0x200000\n\tBPF_LSH                              = 0x60\n\tBPF_MAJOR_VERSION                    = 0x1\n\tBPF_MAXINSNS                         = 0x1000\n\tBPF_MEM                              = 0x60\n\tBPF_MEMWORDS                         = 0x10\n\tBPF_MINOR_VERSION                    = 0x1\n\tBPF_MISC                             = 0x7\n\tBPF_MOD                              = 0x90\n\tBPF_MOV                              = 0xb0\n\tBPF_MSH                              = 0xa0\n\tBPF_MUL                              = 0x20\n\tBPF_NEG                              = 0x80\n\tBPF_NET_OFF                          = -0x100000\n\tBPF_NOEXIST                          = 0x1\n\tBPF_OBJ_NAME_LEN                     = 0x10\n\tBPF_OR                               = 0x40\n\tBPF_PSEUDO_CALL                      = 0x1\n\tBPF_PSEUDO_MAP_FD                    = 0x1\n\tBPF_RET                              = 0x6\n\tBPF_RSH                              = 0x70\n\tBPF_SOCK_OPS_ALL_CB_FLAGS            = 0x7\n\tBPF_SOCK_OPS_RETRANS_CB_FLAG         = 0x2\n\tBPF_SOCK_OPS_RTO_CB_FLAG             = 0x1\n\tBPF_SOCK_OPS_STATE_CB_FLAG           = 0x4\n\tBPF_ST                               = 0x2\n\tBPF_STX                              = 0x3\n\tBPF_SUB                              = 0x10\n\tBPF_TAG_SIZE                         = 0x8\n\tBPF_TAX                              = 0x0\n\tBPF_TO_BE                            = 0x8\n\tBPF_TO_LE                            = 0x0\n\tBPF_TXA                              = 0x80\n\tBPF_W                                = 0x0\n\tBPF_X                                = 0x8\n\tBPF_XADD                             = 0xc0\n\tBPF_XOR                              = 0xa0\n\tBRKINT                               = 0x2\n\tBS0                                  = 0x0\n\tBS1                                  = 0x2000\n\tBSDLY                                = 0x2000\n\tBTRFS_SUPER_MAGIC                    = 0x9123683e\n\tBTRFS_TEST_MAGIC                     = 0x73727279\n\tCAN_BCM                              = 0x2\n\tCAN_EFF_FLAG                         = 0x80000000\n\tCAN_EFF_ID_BITS                      = 0x1d\n\tCAN_EFF_MASK                         = 0x1fffffff\n\tCAN_ERR_FLAG                         = 0x20000000\n\tCAN_ERR_MASK                         = 0x1fffffff\n\tCAN_INV_FILTER                       = 0x20000000\n\tCAN_ISOTP                            = 0x6\n\tCAN_MAX_DLC                          = 0x8\n\tCAN_MAX_DLEN                         = 0x8\n\tCAN_MCNET                            = 0x5\n\tCAN_MTU                              = 0x10\n\tCAN_NPROTO                           = 0x7\n\tCAN_RAW                              = 0x1\n\tCAN_RAW_FILTER_MAX                   = 0x200\n\tCAN_RTR_FLAG                         = 0x40000000\n\tCAN_SFF_ID_BITS                      = 0xb\n\tCAN_SFF_MASK                         = 0x7ff\n\tCAN_TP16                             = 0x3\n\tCAN_TP20                             = 0x4\n\tCBAUD                                = 0x100f\n\tCBAUDEX                              = 0x1000\n\tCFLUSH                               = 0xf\n\tCGROUP2_SUPER_MAGIC                  = 0x63677270\n\tCGROUP_SUPER_MAGIC                   = 0x27e0eb\n\tCIBAUD                               = 0x100f0000\n\tCLOCAL                               = 0x800\n\tCLOCK_BOOTTIME                       = 0x7\n\tCLOCK_BOOTTIME_ALARM                 = 0x9\n\tCLOCK_DEFAULT                        = 0x0\n\tCLOCK_EXT                            = 0x1\n\tCLOCK_INT                            = 0x2\n\tCLOCK_MONOTONIC                      = 0x1\n\tCLOCK_MONOTONIC_COARSE               = 0x6\n\tCLOCK_MONOTONIC_RAW                  = 0x4\n\tCLOCK_PROCESS_CPUTIME_ID             = 0x2\n\tCLOCK_REALTIME                       = 0x0\n\tCLOCK_REALTIME_ALARM                 = 0x8\n\tCLOCK_REALTIME_COARSE                = 0x5\n\tCLOCK_TAI                            = 0xb\n\tCLOCK_THREAD_CPUTIME_ID              = 0x3\n\tCLOCK_TXFROMRX                       = 0x4\n\tCLOCK_TXINT                          = 0x3\n\tCLONE_CHILD_CLEARTID                 = 0x200000\n\tCLONE_CHILD_SETTID                   = 0x1000000\n\tCLONE_DETACHED                       = 0x400000\n\tCLONE_FILES                          = 0x400\n\tCLONE_FS                             = 0x200\n\tCLONE_IO                             = 0x80000000\n\tCLONE_NEWCGROUP                      = 0x2000000\n\tCLONE_NEWIPC                         = 0x8000000\n\tCLONE_NEWNET                         = 0x40000000\n\tCLONE_NEWNS                          = 0x20000\n\tCLONE_NEWPID                         = 0x20000000\n\tCLONE_NEWUSER                        = 0x10000000\n\tCLONE_NEWUTS                         = 0x4000000\n\tCLONE_PARENT                         = 0x8000\n\tCLONE_PARENT_SETTID                  = 0x100000\n\tCLONE_PTRACE                         = 0x2000\n\tCLONE_SETTLS                         = 0x80000\n\tCLONE_SIGHAND                        = 0x800\n\tCLONE_SYSVSEM                        = 0x40000\n\tCLONE_THREAD                         = 0x10000\n\tCLONE_UNTRACED                       = 0x800000\n\tCLONE_VFORK                          = 0x4000\n\tCLONE_VM                             = 0x100\n\tCMSPAR                               = 0x40000000\n\tCODA_SUPER_MAGIC                     = 0x73757245\n\tCR0                                  = 0x0\n\tCR1                                  = 0x200\n\tCR2                                  = 0x400\n\tCR3                                  = 0x600\n\tCRAMFS_MAGIC                         = 0x28cd3d45\n\tCRDLY                                = 0x600\n\tCREAD                                = 0x80\n\tCRTSCTS                              = 0x80000000\n\tCRYPTO_MAX_NAME                      = 0x40\n\tCRYPTO_MSG_MAX                       = 0x15\n\tCRYPTO_NR_MSGTYPES                   = 0x6\n\tCRYPTO_REPORT_MAXSIZE                = 0x160\n\tCS5                                  = 0x0\n\tCS6                                  = 0x10\n\tCS7                                  = 0x20\n\tCS8                                  = 0x30\n\tCSIGNAL                              = 0xff\n\tCSIZE                                = 0x30\n\tCSTART                               = 0x11\n\tCSTATUS                              = 0x0\n\tCSTOP                                = 0x13\n\tCSTOPB                               = 0x40\n\tCSUSP                                = 0x1a\n\tDAXFS_MAGIC                          = 0x64646178\n\tDEBUGFS_MAGIC                        = 0x64626720\n\tDEVPTS_SUPER_MAGIC                   = 0x1cd1\n\tDT_BLK                               = 0x6\n\tDT_CHR                               = 0x2\n\tDT_DIR                               = 0x4\n\tDT_FIFO                              = 0x1\n\tDT_LNK                               = 0xa\n\tDT_REG                               = 0x8\n\tDT_SOCK                              = 0xc\n\tDT_UNKNOWN                           = 0x0\n\tDT_WHT                               = 0xe\n\tECHO                                 = 0x8\n\tECHOCTL                              = 0x200\n\tECHOE                                = 0x10\n\tECHOK                                = 0x20\n\tECHOKE                               = 0x800\n\tECHONL                               = 0x40\n\tECHOPRT                              = 0x400\n\tECRYPTFS_SUPER_MAGIC                 = 0xf15f\n\tEFD_CLOEXEC                          = 0x80000\n\tEFD_NONBLOCK                         = 0x80\n\tEFD_SEMAPHORE                        = 0x1\n\tEFIVARFS_MAGIC                       = 0xde5e81e4\n\tEFS_SUPER_MAGIC                      = 0x414a53\n\tENCODING_DEFAULT                     = 0x0\n\tENCODING_FM_MARK                     = 0x3\n\tENCODING_FM_SPACE                    = 0x4\n\tENCODING_MANCHESTER                  = 0x5\n\tENCODING_NRZ                         = 0x1\n\tENCODING_NRZI                        = 0x2\n\tEPOLLERR                             = 0x8\n\tEPOLLET                              = 0x80000000\n\tEPOLLEXCLUSIVE                       = 0x10000000\n\tEPOLLHUP                             = 0x10\n\tEPOLLIN                              = 0x1\n\tEPOLLMSG                             = 0x400\n\tEPOLLONESHOT                         = 0x40000000\n\tEPOLLOUT                             = 0x4\n\tEPOLLPRI                             = 0x2\n\tEPOLLRDBAND                          = 0x80\n\tEPOLLRDHUP                           = 0x2000\n\tEPOLLRDNORM                          = 0x40\n\tEPOLLWAKEUP                          = 0x20000000\n\tEPOLLWRBAND                          = 0x200\n\tEPOLLWRNORM                          = 0x100\n\tEPOLL_CLOEXEC                        = 0x80000\n\tEPOLL_CTL_ADD                        = 0x1\n\tEPOLL_CTL_DEL                        = 0x2\n\tEPOLL_CTL_MOD                        = 0x3\n\tETH_P_1588                           = 0x88f7\n\tETH_P_8021AD                         = 0x88a8\n\tETH_P_8021AH                         = 0x88e7\n\tETH_P_8021Q                          = 0x8100\n\tETH_P_80221                          = 0x8917\n\tETH_P_802_2                          = 0x4\n\tETH_P_802_3                          = 0x1\n\tETH_P_802_3_MIN                      = 0x600\n\tETH_P_802_EX1                        = 0x88b5\n\tETH_P_AARP                           = 0x80f3\n\tETH_P_AF_IUCV                        = 0xfbfb\n\tETH_P_ALL                            = 0x3\n\tETH_P_AOE                            = 0x88a2\n\tETH_P_ARCNET                         = 0x1a\n\tETH_P_ARP                            = 0x806\n\tETH_P_ATALK                          = 0x809b\n\tETH_P_ATMFATE                        = 0x8884\n\tETH_P_ATMMPOA                        = 0x884c\n\tETH_P_AX25                           = 0x2\n\tETH_P_BATMAN                         = 0x4305\n\tETH_P_BPQ                            = 0x8ff\n\tETH_P_CAIF                           = 0xf7\n\tETH_P_CAN                            = 0xc\n\tETH_P_CANFD                          = 0xd\n\tETH_P_CONTROL                        = 0x16\n\tETH_P_CUST                           = 0x6006\n\tETH_P_DDCMP                          = 0x6\n\tETH_P_DEC                            = 0x6000\n\tETH_P_DIAG                           = 0x6005\n\tETH_P_DNA_DL                         = 0x6001\n\tETH_P_DNA_RC                         = 0x6002\n\tETH_P_DNA_RT                         = 0x6003\n\tETH_P_DSA                            = 0x1b\n\tETH_P_ECONET                         = 0x18\n\tETH_P_EDSA                           = 0xdada\n\tETH_P_ERSPAN                         = 0x88be\n\tETH_P_ERSPAN2                        = 0x22eb\n\tETH_P_FCOE                           = 0x8906\n\tETH_P_FIP                            = 0x8914\n\tETH_P_HDLC                           = 0x19\n\tETH_P_HSR                            = 0x892f\n\tETH_P_IBOE                           = 0x8915\n\tETH_P_IEEE802154                     = 0xf6\n\tETH_P_IEEEPUP                        = 0xa00\n\tETH_P_IEEEPUPAT                      = 0xa01\n\tETH_P_IFE                            = 0xed3e\n\tETH_P_IP                             = 0x800\n\tETH_P_IPV6                           = 0x86dd\n\tETH_P_IPX                            = 0x8137\n\tETH_P_IRDA                           = 0x17\n\tETH_P_LAT                            = 0x6004\n\tETH_P_LINK_CTL                       = 0x886c\n\tETH_P_LOCALTALK                      = 0x9\n\tETH_P_LOOP                           = 0x60\n\tETH_P_LOOPBACK                       = 0x9000\n\tETH_P_MACSEC                         = 0x88e5\n\tETH_P_MAP                            = 0xf9\n\tETH_P_MOBITEX                        = 0x15\n\tETH_P_MPLS_MC                        = 0x8848\n\tETH_P_MPLS_UC                        = 0x8847\n\tETH_P_MVRP                           = 0x88f5\n\tETH_P_NCSI                           = 0x88f8\n\tETH_P_NSH                            = 0x894f\n\tETH_P_PAE                            = 0x888e\n\tETH_P_PAUSE                          = 0x8808\n\tETH_P_PHONET                         = 0xf5\n\tETH_P_PPPTALK                        = 0x10\n\tETH_P_PPP_DISC                       = 0x8863\n\tETH_P_PPP_MP                         = 0x8\n\tETH_P_PPP_SES                        = 0x8864\n\tETH_P_PREAUTH                        = 0x88c7\n\tETH_P_PRP                            = 0x88fb\n\tETH_P_PUP                            = 0x200\n\tETH_P_PUPAT                          = 0x201\n\tETH_P_QINQ1                          = 0x9100\n\tETH_P_QINQ2                          = 0x9200\n\tETH_P_QINQ3                          = 0x9300\n\tETH_P_RARP                           = 0x8035\n\tETH_P_SCA                            = 0x6007\n\tETH_P_SLOW                           = 0x8809\n\tETH_P_SNAP                           = 0x5\n\tETH_P_TDLS                           = 0x890d\n\tETH_P_TEB                            = 0x6558\n\tETH_P_TIPC                           = 0x88ca\n\tETH_P_TRAILER                        = 0x1c\n\tETH_P_TR_802_2                       = 0x11\n\tETH_P_TSN                            = 0x22f0\n\tETH_P_WAN_PPP                        = 0x7\n\tETH_P_WCCP                           = 0x883e\n\tETH_P_X25                            = 0x805\n\tETH_P_XDSA                           = 0xf8\n\tEXABYTE_ENABLE_NEST                  = 0xf0\n\tEXT2_SUPER_MAGIC                     = 0xef53\n\tEXT3_SUPER_MAGIC                     = 0xef53\n\tEXT4_SUPER_MAGIC                     = 0xef53\n\tEXTA                                 = 0xe\n\tEXTB                                 = 0xf\n\tEXTPROC                              = 0x10000\n\tF2FS_SUPER_MAGIC                     = 0xf2f52010\n\tFALLOC_FL_COLLAPSE_RANGE             = 0x8\n\tFALLOC_FL_INSERT_RANGE               = 0x20\n\tFALLOC_FL_KEEP_SIZE                  = 0x1\n\tFALLOC_FL_NO_HIDE_STALE              = 0x4\n\tFALLOC_FL_PUNCH_HOLE                 = 0x2\n\tFALLOC_FL_UNSHARE_RANGE              = 0x40\n\tFALLOC_FL_ZERO_RANGE                 = 0x10\n\tFANOTIFY_METADATA_VERSION            = 0x3\n\tFAN_ACCESS                           = 0x1\n\tFAN_ACCESS_PERM                      = 0x20000\n\tFAN_ALLOW                            = 0x1\n\tFAN_ALL_CLASS_BITS                   = 0xc\n\tFAN_ALL_EVENTS                       = 0x3b\n\tFAN_ALL_INIT_FLAGS                   = 0x3f\n\tFAN_ALL_MARK_FLAGS                   = 0xff\n\tFAN_ALL_OUTGOING_EVENTS              = 0x3403b\n\tFAN_ALL_PERM_EVENTS                  = 0x30000\n\tFAN_ATTRIB                           = 0x4\n\tFAN_AUDIT                            = 0x10\n\tFAN_CLASS_CONTENT                    = 0x4\n\tFAN_CLASS_NOTIF                      = 0x0\n\tFAN_CLASS_PRE_CONTENT                = 0x8\n\tFAN_CLOEXEC                          = 0x1\n\tFAN_CLOSE                            = 0x18\n\tFAN_CLOSE_NOWRITE                    = 0x10\n\tFAN_CLOSE_WRITE                      = 0x8\n\tFAN_CREATE                           = 0x100\n\tFAN_DELETE                           = 0x200\n\tFAN_DELETE_SELF                      = 0x400\n\tFAN_DENY                             = 0x2\n\tFAN_ENABLE_AUDIT                     = 0x40\n\tFAN_EVENT_INFO_TYPE_FID              = 0x1\n\tFAN_EVENT_METADATA_LEN               = 0x18\n\tFAN_EVENT_ON_CHILD                   = 0x8000000\n\tFAN_MARK_ADD                         = 0x1\n\tFAN_MARK_DONT_FOLLOW                 = 0x4\n\tFAN_MARK_FILESYSTEM                  = 0x100\n\tFAN_MARK_FLUSH                       = 0x80\n\tFAN_MARK_IGNORED_MASK                = 0x20\n\tFAN_MARK_IGNORED_SURV_MODIFY         = 0x40\n\tFAN_MARK_INODE                       = 0x0\n\tFAN_MARK_MOUNT                       = 0x10\n\tFAN_MARK_ONLYDIR                     = 0x8\n\tFAN_MARK_REMOVE                      = 0x2\n\tFAN_MODIFY                           = 0x2\n\tFAN_MOVE                             = 0xc0\n\tFAN_MOVED_FROM                       = 0x40\n\tFAN_MOVED_TO                         = 0x80\n\tFAN_MOVE_SELF                        = 0x800\n\tFAN_NOFD                             = -0x1\n\tFAN_NONBLOCK                         = 0x2\n\tFAN_ONDIR                            = 0x40000000\n\tFAN_OPEN                             = 0x20\n\tFAN_OPEN_EXEC                        = 0x1000\n\tFAN_OPEN_EXEC_PERM                   = 0x40000\n\tFAN_OPEN_PERM                        = 0x10000\n\tFAN_Q_OVERFLOW                       = 0x4000\n\tFAN_REPORT_FID                       = 0x200\n\tFAN_REPORT_TID                       = 0x100\n\tFAN_UNLIMITED_MARKS                  = 0x20\n\tFAN_UNLIMITED_QUEUE                  = 0x10\n\tFD_CLOEXEC                           = 0x1\n\tFD_SETSIZE                           = 0x400\n\tFF0                                  = 0x0\n\tFF1                                  = 0x8000\n\tFFDLY                                = 0x8000\n\tFLUSHO                               = 0x2000\n\tFS_ENCRYPTION_MODE_ADIANTUM          = 0x9\n\tFS_ENCRYPTION_MODE_AES_128_CBC       = 0x5\n\tFS_ENCRYPTION_MODE_AES_128_CTS       = 0x6\n\tFS_ENCRYPTION_MODE_AES_256_CBC       = 0x3\n\tFS_ENCRYPTION_MODE_AES_256_CTS       = 0x4\n\tFS_ENCRYPTION_MODE_AES_256_GCM       = 0x2\n\tFS_ENCRYPTION_MODE_AES_256_XTS       = 0x1\n\tFS_ENCRYPTION_MODE_INVALID           = 0x0\n\tFS_ENCRYPTION_MODE_SPECK128_256_CTS  = 0x8\n\tFS_ENCRYPTION_MODE_SPECK128_256_XTS  = 0x7\n\tFS_IOC_GET_ENCRYPTION_POLICY         = 0x800c6615\n\tFS_IOC_GET_ENCRYPTION_PWSALT         = 0x80106614\n\tFS_IOC_SET_ENCRYPTION_POLICY         = 0x400c6613\n\tFS_KEY_DESCRIPTOR_SIZE               = 0x8\n\tFS_KEY_DESC_PREFIX                   = \"fscrypt:\"\n\tFS_KEY_DESC_PREFIX_SIZE              = 0x8\n\tFS_MAX_KEY_SIZE                      = 0x40\n\tFS_POLICY_FLAGS_PAD_16               = 0x2\n\tFS_POLICY_FLAGS_PAD_32               = 0x3\n\tFS_POLICY_FLAGS_PAD_4                = 0x0\n\tFS_POLICY_FLAGS_PAD_8                = 0x1\n\tFS_POLICY_FLAGS_PAD_MASK             = 0x3\n\tFS_POLICY_FLAGS_VALID                = 0x7\n\tFUTEXFS_SUPER_MAGIC                  = 0xbad1dea\n\tF_ADD_SEALS                          = 0x409\n\tF_DUPFD                              = 0x0\n\tF_DUPFD_CLOEXEC                      = 0x406\n\tF_EXLCK                              = 0x4\n\tF_GETFD                              = 0x1\n\tF_GETFL                              = 0x3\n\tF_GETLEASE                           = 0x401\n\tF_GETLK                              = 0xe\n\tF_GETLK64                            = 0xe\n\tF_GETOWN                             = 0x17\n\tF_GETOWN_EX                          = 0x10\n\tF_GETPIPE_SZ                         = 0x408\n\tF_GETSIG                             = 0xb\n\tF_GET_FILE_RW_HINT                   = 0x40d\n\tF_GET_RW_HINT                        = 0x40b\n\tF_GET_SEALS                          = 0x40a\n\tF_LOCK                               = 0x1\n\tF_NOTIFY                             = 0x402\n\tF_OFD_GETLK                          = 0x24\n\tF_OFD_SETLK                          = 0x25\n\tF_OFD_SETLKW                         = 0x26\n\tF_OK                                 = 0x0\n\tF_RDLCK                              = 0x0\n\tF_SEAL_GROW                          = 0x4\n\tF_SEAL_SEAL                          = 0x1\n\tF_SEAL_SHRINK                        = 0x2\n\tF_SEAL_WRITE                         = 0x8\n\tF_SETFD                              = 0x2\n\tF_SETFL                              = 0x4\n\tF_SETLEASE                           = 0x400\n\tF_SETLK                              = 0x6\n\tF_SETLK64                            = 0x6\n\tF_SETLKW                             = 0x7\n\tF_SETLKW64                           = 0x7\n\tF_SETOWN                             = 0x18\n\tF_SETOWN_EX                          = 0xf\n\tF_SETPIPE_SZ                         = 0x407\n\tF_SETSIG                             = 0xa\n\tF_SET_FILE_RW_HINT                   = 0x40e\n\tF_SET_RW_HINT                        = 0x40c\n\tF_SHLCK                              = 0x8\n\tF_TEST                               = 0x3\n\tF_TLOCK                              = 0x2\n\tF_ULOCK                              = 0x0\n\tF_UNLCK                              = 0x2\n\tF_WRLCK                              = 0x1\n\tGENL_ADMIN_PERM                      = 0x1\n\tGENL_CMD_CAP_DO                      = 0x2\n\tGENL_CMD_CAP_DUMP                    = 0x4\n\tGENL_CMD_CAP_HASPOL                  = 0x8\n\tGENL_HDRLEN                          = 0x4\n\tGENL_ID_CTRL                         = 0x10\n\tGENL_ID_PMCRAID                      = 0x12\n\tGENL_ID_VFS_DQUOT                    = 0x11\n\tGENL_MAX_ID                          = 0x3ff\n\tGENL_MIN_ID                          = 0x10\n\tGENL_NAMSIZ                          = 0x10\n\tGENL_START_ALLOC                     = 0x13\n\tGENL_UNS_ADMIN_PERM                  = 0x10\n\tGRND_NONBLOCK                        = 0x1\n\tGRND_RANDOM                          = 0x2\n\tHDIO_DRIVE_CMD                       = 0x31f\n\tHDIO_DRIVE_CMD_AEB                   = 0x31e\n\tHDIO_DRIVE_CMD_HDR_SIZE              = 0x4\n\tHDIO_DRIVE_HOB_HDR_SIZE              = 0x8\n\tHDIO_DRIVE_RESET                     = 0x31c\n\tHDIO_DRIVE_TASK                      = 0x31e\n\tHDIO_DRIVE_TASKFILE                  = 0x31d\n\tHDIO_DRIVE_TASK_HDR_SIZE             = 0x8\n\tHDIO_GETGEO                          = 0x301\n\tHDIO_GET_32BIT                       = 0x309\n\tHDIO_GET_ACOUSTIC                    = 0x30f\n\tHDIO_GET_ADDRESS                     = 0x310\n\tHDIO_GET_BUSSTATE                    = 0x31a\n\tHDIO_GET_DMA                         = 0x30b\n\tHDIO_GET_IDENTITY                    = 0x30d\n\tHDIO_GET_KEEPSETTINGS                = 0x308\n\tHDIO_GET_MULTCOUNT                   = 0x304\n\tHDIO_GET_NICE                        = 0x30c\n\tHDIO_GET_NOWERR                      = 0x30a\n\tHDIO_GET_QDMA                        = 0x305\n\tHDIO_GET_UNMASKINTR                  = 0x302\n\tHDIO_GET_WCACHE                      = 0x30e\n\tHDIO_OBSOLETE_IDENTITY               = 0x307\n\tHDIO_SCAN_HWIF                       = 0x328\n\tHDIO_SET_32BIT                       = 0x324\n\tHDIO_SET_ACOUSTIC                    = 0x32c\n\tHDIO_SET_ADDRESS                     = 0x32f\n\tHDIO_SET_BUSSTATE                    = 0x32d\n\tHDIO_SET_DMA                         = 0x326\n\tHDIO_SET_KEEPSETTINGS                = 0x323\n\tHDIO_SET_MULTCOUNT                   = 0x321\n\tHDIO_SET_NICE                        = 0x329\n\tHDIO_SET_NOWERR                      = 0x325\n\tHDIO_SET_PIO_MODE                    = 0x327\n\tHDIO_SET_QDMA                        = 0x32e\n\tHDIO_SET_UNMASKINTR                  = 0x322\n\tHDIO_SET_WCACHE                      = 0x32b\n\tHDIO_SET_XFER                        = 0x306\n\tHDIO_TRISTATE_HWIF                   = 0x31b\n\tHDIO_UNREGISTER_HWIF                 = 0x32a\n\tHOSTFS_SUPER_MAGIC                   = 0xc0ffee\n\tHPFS_SUPER_MAGIC                     = 0xf995e849\n\tHUGETLBFS_MAGIC                      = 0x958458f6\n\tHUPCL                                = 0x400\n\tIBSHIFT                              = 0x10\n\tICANON                               = 0x2\n\tICMPV6_FILTER                        = 0x1\n\tICRNL                                = 0x100\n\tIEXTEN                               = 0x100\n\tIFA_F_DADFAILED                      = 0x8\n\tIFA_F_DEPRECATED                     = 0x20\n\tIFA_F_HOMEADDRESS                    = 0x10\n\tIFA_F_MANAGETEMPADDR                 = 0x100\n\tIFA_F_MCAUTOJOIN                     = 0x400\n\tIFA_F_NODAD                          = 0x2\n\tIFA_F_NOPREFIXROUTE                  = 0x200\n\tIFA_F_OPTIMISTIC                     = 0x4\n\tIFA_F_PERMANENT                      = 0x80\n\tIFA_F_SECONDARY                      = 0x1\n\tIFA_F_STABLE_PRIVACY                 = 0x800\n\tIFA_F_TEMPORARY                      = 0x1\n\tIFA_F_TENTATIVE                      = 0x40\n\tIFA_MAX                              = 0xa\n\tIFF_ALLMULTI                         = 0x200\n\tIFF_ATTACH_QUEUE                     = 0x200\n\tIFF_AUTOMEDIA                        = 0x4000\n\tIFF_BROADCAST                        = 0x2\n\tIFF_DEBUG                            = 0x4\n\tIFF_DETACH_QUEUE                     = 0x400\n\tIFF_DORMANT                          = 0x20000\n\tIFF_DYNAMIC                          = 0x8000\n\tIFF_ECHO                             = 0x40000\n\tIFF_LOOPBACK                         = 0x8\n\tIFF_LOWER_UP                         = 0x10000\n\tIFF_MASTER                           = 0x400\n\tIFF_MULTICAST                        = 0x1000\n\tIFF_MULTI_QUEUE                      = 0x100\n\tIFF_NAPI                             = 0x10\n\tIFF_NAPI_FRAGS                       = 0x20\n\tIFF_NOARP                            = 0x80\n\tIFF_NOFILTER                         = 0x1000\n\tIFF_NOTRAILERS                       = 0x20\n\tIFF_NO_PI                            = 0x1000\n\tIFF_ONE_QUEUE                        = 0x2000\n\tIFF_PERSIST                          = 0x800\n\tIFF_POINTOPOINT                      = 0x10\n\tIFF_PORTSEL                          = 0x2000\n\tIFF_PROMISC                          = 0x100\n\tIFF_RUNNING                          = 0x40\n\tIFF_SLAVE                            = 0x800\n\tIFF_TAP                              = 0x2\n\tIFF_TUN                              = 0x1\n\tIFF_TUN_EXCL                         = 0x8000\n\tIFF_UP                               = 0x1\n\tIFF_VNET_HDR                         = 0x4000\n\tIFF_VOLATILE                         = 0x70c5a\n\tIFNAMSIZ                             = 0x10\n\tIGNBRK                               = 0x1\n\tIGNCR                                = 0x80\n\tIGNPAR                               = 0x4\n\tIMAXBEL                              = 0x2000\n\tINLCR                                = 0x40\n\tINPCK                                = 0x10\n\tIN_ACCESS                            = 0x1\n\tIN_ALL_EVENTS                        = 0xfff\n\tIN_ATTRIB                            = 0x4\n\tIN_CLASSA_HOST                       = 0xffffff\n\tIN_CLASSA_MAX                        = 0x80\n\tIN_CLASSA_NET                        = 0xff000000\n\tIN_CLASSA_NSHIFT                     = 0x18\n\tIN_CLASSB_HOST                       = 0xffff\n\tIN_CLASSB_MAX                        = 0x10000\n\tIN_CLASSB_NET                        = 0xffff0000\n\tIN_CLASSB_NSHIFT                     = 0x10\n\tIN_CLASSC_HOST                       = 0xff\n\tIN_CLASSC_NET                        = 0xffffff00\n\tIN_CLASSC_NSHIFT                     = 0x8\n\tIN_CLOEXEC                           = 0x80000\n\tIN_CLOSE                             = 0x18\n\tIN_CLOSE_NOWRITE                     = 0x10\n\tIN_CLOSE_WRITE                       = 0x8\n\tIN_CREATE                            = 0x100\n\tIN_DELETE                            = 0x200\n\tIN_DELETE_SELF                       = 0x400\n\tIN_DONT_FOLLOW                       = 0x2000000\n\tIN_EXCL_UNLINK                       = 0x4000000\n\tIN_IGNORED                           = 0x8000\n\tIN_ISDIR                             = 0x40000000\n\tIN_LOOPBACKNET                       = 0x7f\n\tIN_MASK_ADD                          = 0x20000000\n\tIN_MASK_CREATE                       = 0x10000000\n\tIN_MODIFY                            = 0x2\n\tIN_MOVE                              = 0xc0\n\tIN_MOVED_FROM                        = 0x40\n\tIN_MOVED_TO                          = 0x80\n\tIN_MOVE_SELF                         = 0x800\n\tIN_NONBLOCK                          = 0x80\n\tIN_ONESHOT                           = 0x80000000\n\tIN_ONLYDIR                           = 0x1000000\n\tIN_OPEN                              = 0x20\n\tIN_Q_OVERFLOW                        = 0x4000\n\tIN_UNMOUNT                           = 0x2000\n\tIOCTL_VM_SOCKETS_GET_LOCAL_CID       = 0x200007b9\n\tIPPROTO_AH                           = 0x33\n\tIPPROTO_BEETPH                       = 0x5e\n\tIPPROTO_COMP                         = 0x6c\n\tIPPROTO_DCCP                         = 0x21\n\tIPPROTO_DSTOPTS                      = 0x3c\n\tIPPROTO_EGP                          = 0x8\n\tIPPROTO_ENCAP                        = 0x62\n\tIPPROTO_ESP                          = 0x32\n\tIPPROTO_FRAGMENT                     = 0x2c\n\tIPPROTO_GRE                          = 0x2f\n\tIPPROTO_HOPOPTS                      = 0x0\n\tIPPROTO_ICMP                         = 0x1\n\tIPPROTO_ICMPV6                       = 0x3a\n\tIPPROTO_IDP                          = 0x16\n\tIPPROTO_IGMP                         = 0x2\n\tIPPROTO_IP                           = 0x0\n\tIPPROTO_IPIP                         = 0x4\n\tIPPROTO_IPV6                         = 0x29\n\tIPPROTO_MH                           = 0x87\n\tIPPROTO_MPLS                         = 0x89\n\tIPPROTO_MTP                          = 0x5c\n\tIPPROTO_NONE                         = 0x3b\n\tIPPROTO_PIM                          = 0x67\n\tIPPROTO_PUP                          = 0xc\n\tIPPROTO_RAW                          = 0xff\n\tIPPROTO_ROUTING                      = 0x2b\n\tIPPROTO_RSVP                         = 0x2e\n\tIPPROTO_SCTP                         = 0x84\n\tIPPROTO_TCP                          = 0x6\n\tIPPROTO_TP                           = 0x1d\n\tIPPROTO_UDP                          = 0x11\n\tIPPROTO_UDPLITE                      = 0x88\n\tIPV6_2292DSTOPTS                     = 0x4\n\tIPV6_2292HOPLIMIT                    = 0x8\n\tIPV6_2292HOPOPTS                     = 0x3\n\tIPV6_2292PKTINFO                     = 0x2\n\tIPV6_2292PKTOPTIONS                  = 0x6\n\tIPV6_2292RTHDR                       = 0x5\n\tIPV6_ADDRFORM                        = 0x1\n\tIPV6_ADDR_PREFERENCES                = 0x48\n\tIPV6_ADD_MEMBERSHIP                  = 0x14\n\tIPV6_AUTHHDR                         = 0xa\n\tIPV6_AUTOFLOWLABEL                   = 0x46\n\tIPV6_CHECKSUM                        = 0x7\n\tIPV6_DONTFRAG                        = 0x3e\n\tIPV6_DROP_MEMBERSHIP                 = 0x15\n\tIPV6_DSTOPTS                         = 0x3b\n\tIPV6_FREEBIND                        = 0x4e\n\tIPV6_HDRINCL                         = 0x24\n\tIPV6_HOPLIMIT                        = 0x34\n\tIPV6_HOPOPTS                         = 0x36\n\tIPV6_IPSEC_POLICY                    = 0x22\n\tIPV6_JOIN_ANYCAST                    = 0x1b\n\tIPV6_JOIN_GROUP                      = 0x14\n\tIPV6_LEAVE_ANYCAST                   = 0x1c\n\tIPV6_LEAVE_GROUP                     = 0x15\n\tIPV6_MINHOPCOUNT                     = 0x49\n\tIPV6_MTU                             = 0x18\n\tIPV6_MTU_DISCOVER                    = 0x17\n\tIPV6_MULTICAST_ALL                   = 0x1d\n\tIPV6_MULTICAST_HOPS                  = 0x12\n\tIPV6_MULTICAST_IF                    = 0x11\n\tIPV6_MULTICAST_LOOP                  = 0x13\n\tIPV6_NEXTHOP                         = 0x9\n\tIPV6_ORIGDSTADDR                     = 0x4a\n\tIPV6_PATHMTU                         = 0x3d\n\tIPV6_PKTINFO                         = 0x32\n\tIPV6_PMTUDISC_DO                     = 0x2\n\tIPV6_PMTUDISC_DONT                   = 0x0\n\tIPV6_PMTUDISC_INTERFACE              = 0x4\n\tIPV6_PMTUDISC_OMIT                   = 0x5\n\tIPV6_PMTUDISC_PROBE                  = 0x3\n\tIPV6_PMTUDISC_WANT                   = 0x1\n\tIPV6_RECVDSTOPTS                     = 0x3a\n\tIPV6_RECVERR                         = 0x19\n\tIPV6_RECVFRAGSIZE                    = 0x4d\n\tIPV6_RECVHOPLIMIT                    = 0x33\n\tIPV6_RECVHOPOPTS                     = 0x35\n\tIPV6_RECVORIGDSTADDR                 = 0x4a\n\tIPV6_RECVPATHMTU                     = 0x3c\n\tIPV6_RECVPKTINFO                     = 0x31\n\tIPV6_RECVRTHDR                       = 0x38\n\tIPV6_RECVTCLASS                      = 0x42\n\tIPV6_ROUTER_ALERT                    = 0x16\n\tIPV6_RTHDR                           = 0x39\n\tIPV6_RTHDRDSTOPTS                    = 0x37\n\tIPV6_RTHDR_LOOSE                     = 0x0\n\tIPV6_RTHDR_STRICT                    = 0x1\n\tIPV6_RTHDR_TYPE_0                    = 0x0\n\tIPV6_RXDSTOPTS                       = 0x3b\n\tIPV6_RXHOPOPTS                       = 0x36\n\tIPV6_TCLASS                          = 0x43\n\tIPV6_TRANSPARENT                     = 0x4b\n\tIPV6_UNICAST_HOPS                    = 0x10\n\tIPV6_UNICAST_IF                      = 0x4c\n\tIPV6_V6ONLY                          = 0x1a\n\tIPV6_XFRM_POLICY                     = 0x23\n\tIP_ADD_MEMBERSHIP                    = 0x23\n\tIP_ADD_SOURCE_MEMBERSHIP             = 0x27\n\tIP_BIND_ADDRESS_NO_PORT              = 0x18\n\tIP_BLOCK_SOURCE                      = 0x26\n\tIP_CHECKSUM                          = 0x17\n\tIP_DEFAULT_MULTICAST_LOOP            = 0x1\n\tIP_DEFAULT_MULTICAST_TTL             = 0x1\n\tIP_DF                                = 0x4000\n\tIP_DROP_MEMBERSHIP                   = 0x24\n\tIP_DROP_SOURCE_MEMBERSHIP            = 0x28\n\tIP_FREEBIND                          = 0xf\n\tIP_HDRINCL                           = 0x3\n\tIP_IPSEC_POLICY                      = 0x10\n\tIP_MAXPACKET                         = 0xffff\n\tIP_MAX_MEMBERSHIPS                   = 0x14\n\tIP_MF                                = 0x2000\n\tIP_MINTTL                            = 0x15\n\tIP_MSFILTER                          = 0x29\n\tIP_MSS                               = 0x240\n\tIP_MTU                               = 0xe\n\tIP_MTU_DISCOVER                      = 0xa\n\tIP_MULTICAST_ALL                     = 0x31\n\tIP_MULTICAST_IF                      = 0x20\n\tIP_MULTICAST_LOOP                    = 0x22\n\tIP_MULTICAST_TTL                     = 0x21\n\tIP_NODEFRAG                          = 0x16\n\tIP_OFFMASK                           = 0x1fff\n\tIP_OPTIONS                           = 0x4\n\tIP_ORIGDSTADDR                       = 0x14\n\tIP_PASSSEC                           = 0x12\n\tIP_PKTINFO                           = 0x8\n\tIP_PKTOPTIONS                        = 0x9\n\tIP_PMTUDISC                          = 0xa\n\tIP_PMTUDISC_DO                       = 0x2\n\tIP_PMTUDISC_DONT                     = 0x0\n\tIP_PMTUDISC_INTERFACE                = 0x4\n\tIP_PMTUDISC_OMIT                     = 0x5\n\tIP_PMTUDISC_PROBE                    = 0x3\n\tIP_PMTUDISC_WANT                     = 0x1\n\tIP_RECVERR                           = 0xb\n\tIP_RECVFRAGSIZE                      = 0x19\n\tIP_RECVOPTS                          = 0x6\n\tIP_RECVORIGDSTADDR                   = 0x14\n\tIP_RECVRETOPTS                       = 0x7\n\tIP_RECVTOS                           = 0xd\n\tIP_RECVTTL                           = 0xc\n\tIP_RETOPTS                           = 0x7\n\tIP_RF                                = 0x8000\n\tIP_ROUTER_ALERT                      = 0x5\n\tIP_TOS                               = 0x1\n\tIP_TRANSPARENT                       = 0x13\n\tIP_TTL                               = 0x2\n\tIP_UNBLOCK_SOURCE                    = 0x25\n\tIP_UNICAST_IF                        = 0x32\n\tIP_XFRM_POLICY                       = 0x11\n\tISIG                                 = 0x1\n\tISOFS_SUPER_MAGIC                    = 0x9660\n\tISTRIP                               = 0x20\n\tIUCLC                                = 0x200\n\tIUTF8                                = 0x4000\n\tIXANY                                = 0x800\n\tIXOFF                                = 0x1000\n\tIXON                                 = 0x400\n\tJFFS2_SUPER_MAGIC                    = 0x72b6\n\tKEXEC_ARCH_386                       = 0x30000\n\tKEXEC_ARCH_68K                       = 0x40000\n\tKEXEC_ARCH_AARCH64                   = 0xb70000\n\tKEXEC_ARCH_ARM                       = 0x280000\n\tKEXEC_ARCH_DEFAULT                   = 0x0\n\tKEXEC_ARCH_IA_64                     = 0x320000\n\tKEXEC_ARCH_MASK                      = 0xffff0000\n\tKEXEC_ARCH_MIPS                      = 0x80000\n\tKEXEC_ARCH_MIPS_LE                   = 0xa0000\n\tKEXEC_ARCH_PPC                       = 0x140000\n\tKEXEC_ARCH_PPC64                     = 0x150000\n\tKEXEC_ARCH_S390                      = 0x160000\n\tKEXEC_ARCH_SH                        = 0x2a0000\n\tKEXEC_ARCH_X86_64                    = 0x3e0000\n\tKEXEC_FILE_NO_INITRAMFS              = 0x4\n\tKEXEC_FILE_ON_CRASH                  = 0x2\n\tKEXEC_FILE_UNLOAD                    = 0x1\n\tKEXEC_ON_CRASH                       = 0x1\n\tKEXEC_PRESERVE_CONTEXT               = 0x2\n\tKEXEC_SEGMENT_MAX                    = 0x10\n\tKEYCTL_ASSUME_AUTHORITY              = 0x10\n\tKEYCTL_CHOWN                         = 0x4\n\tKEYCTL_CLEAR                         = 0x7\n\tKEYCTL_DESCRIBE                      = 0x6\n\tKEYCTL_DH_COMPUTE                    = 0x17\n\tKEYCTL_GET_KEYRING_ID                = 0x0\n\tKEYCTL_GET_PERSISTENT                = 0x16\n\tKEYCTL_GET_SECURITY                  = 0x11\n\tKEYCTL_INSTANTIATE                   = 0xc\n\tKEYCTL_INSTANTIATE_IOV               = 0x14\n\tKEYCTL_INVALIDATE                    = 0x15\n\tKEYCTL_JOIN_SESSION_KEYRING          = 0x1\n\tKEYCTL_LINK                          = 0x8\n\tKEYCTL_NEGATE                        = 0xd\n\tKEYCTL_PKEY_DECRYPT                  = 0x1a\n\tKEYCTL_PKEY_ENCRYPT                  = 0x19\n\tKEYCTL_PKEY_QUERY                    = 0x18\n\tKEYCTL_PKEY_SIGN                     = 0x1b\n\tKEYCTL_PKEY_VERIFY                   = 0x1c\n\tKEYCTL_READ                          = 0xb\n\tKEYCTL_REJECT                        = 0x13\n\tKEYCTL_RESTRICT_KEYRING              = 0x1d\n\tKEYCTL_REVOKE                        = 0x3\n\tKEYCTL_SEARCH                        = 0xa\n\tKEYCTL_SESSION_TO_PARENT             = 0x12\n\tKEYCTL_SETPERM                       = 0x5\n\tKEYCTL_SET_REQKEY_KEYRING            = 0xe\n\tKEYCTL_SET_TIMEOUT                   = 0xf\n\tKEYCTL_SUPPORTS_DECRYPT              = 0x2\n\tKEYCTL_SUPPORTS_ENCRYPT              = 0x1\n\tKEYCTL_SUPPORTS_SIGN                 = 0x4\n\tKEYCTL_SUPPORTS_VERIFY               = 0x8\n\tKEYCTL_UNLINK                        = 0x9\n\tKEYCTL_UPDATE                        = 0x2\n\tKEY_REQKEY_DEFL_DEFAULT              = 0x0\n\tKEY_REQKEY_DEFL_GROUP_KEYRING        = 0x6\n\tKEY_REQKEY_DEFL_NO_CHANGE            = -0x1\n\tKEY_REQKEY_DEFL_PROCESS_KEYRING      = 0x2\n\tKEY_REQKEY_DEFL_REQUESTOR_KEYRING    = 0x7\n\tKEY_REQKEY_DEFL_SESSION_KEYRING      = 0x3\n\tKEY_REQKEY_DEFL_THREAD_KEYRING       = 0x1\n\tKEY_REQKEY_DEFL_USER_KEYRING         = 0x4\n\tKEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5\n\tKEY_SPEC_GROUP_KEYRING               = -0x6\n\tKEY_SPEC_PROCESS_KEYRING             = -0x2\n\tKEY_SPEC_REQKEY_AUTH_KEY             = -0x7\n\tKEY_SPEC_REQUESTOR_KEYRING           = -0x8\n\tKEY_SPEC_SESSION_KEYRING             = -0x3\n\tKEY_SPEC_THREAD_KEYRING              = -0x1\n\tKEY_SPEC_USER_KEYRING                = -0x4\n\tKEY_SPEC_USER_SESSION_KEYRING        = -0x5\n\tLINUX_REBOOT_CMD_CAD_OFF             = 0x0\n\tLINUX_REBOOT_CMD_CAD_ON              = 0x89abcdef\n\tLINUX_REBOOT_CMD_HALT                = 0xcdef0123\n\tLINUX_REBOOT_CMD_KEXEC               = 0x45584543\n\tLINUX_REBOOT_CMD_POWER_OFF           = 0x4321fedc\n\tLINUX_REBOOT_CMD_RESTART             = 0x1234567\n\tLINUX_REBOOT_CMD_RESTART2            = 0xa1b2c3d4\n\tLINUX_REBOOT_CMD_SW_SUSPEND          = 0xd000fce2\n\tLINUX_REBOOT_MAGIC1                  = 0xfee1dead\n\tLINUX_REBOOT_MAGIC2                  = 0x28121969\n\tLOCK_EX                              = 0x2\n\tLOCK_NB                              = 0x4\n\tLOCK_SH                              = 0x1\n\tLOCK_UN                              = 0x8\n\tMADV_DODUMP                          = 0x11\n\tMADV_DOFORK                          = 0xb\n\tMADV_DONTDUMP                        = 0x10\n\tMADV_DONTFORK                        = 0xa\n\tMADV_DONTNEED                        = 0x4\n\tMADV_FREE                            = 0x8\n\tMADV_HUGEPAGE                        = 0xe\n\tMADV_HWPOISON                        = 0x64\n\tMADV_KEEPONFORK                      = 0x13\n\tMADV_MERGEABLE                       = 0xc\n\tMADV_NOHUGEPAGE                      = 0xf\n\tMADV_NORMAL                          = 0x0\n\tMADV_RANDOM                          = 0x1\n\tMADV_REMOVE                          = 0x9\n\tMADV_SEQUENTIAL                      = 0x2\n\tMADV_UNMERGEABLE                     = 0xd\n\tMADV_WILLNEED                        = 0x3\n\tMADV_WIPEONFORK                      = 0x12\n\tMAP_ANON                             = 0x800\n\tMAP_ANONYMOUS                        = 0x800\n\tMAP_DENYWRITE                        = 0x2000\n\tMAP_EXECUTABLE                       = 0x4000\n\tMAP_FILE                             = 0x0\n\tMAP_FIXED                            = 0x10\n\tMAP_FIXED_NOREPLACE                  = 0x100000\n\tMAP_GROWSDOWN                        = 0x1000\n\tMAP_HUGETLB                          = 0x80000\n\tMAP_HUGE_MASK                        = 0x3f\n\tMAP_HUGE_SHIFT                       = 0x1a\n\tMAP_LOCKED                           = 0x8000\n\tMAP_NONBLOCK                         = 0x20000\n\tMAP_NORESERVE                        = 0x400\n\tMAP_POPULATE                         = 0x10000\n\tMAP_PRIVATE                          = 0x2\n\tMAP_RENAME                           = 0x800\n\tMAP_SHARED                           = 0x1\n\tMAP_SHARED_VALIDATE                  = 0x3\n\tMAP_STACK                            = 0x40000\n\tMAP_TYPE                             = 0xf\n\tMCAST_BLOCK_SOURCE                   = 0x2b\n\tMCAST_EXCLUDE                        = 0x0\n\tMCAST_INCLUDE                        = 0x1\n\tMCAST_JOIN_GROUP                     = 0x2a\n\tMCAST_JOIN_SOURCE_GROUP              = 0x2e\n\tMCAST_LEAVE_GROUP                    = 0x2d\n\tMCAST_LEAVE_SOURCE_GROUP             = 0x2f\n\tMCAST_MSFILTER                       = 0x30\n\tMCAST_UNBLOCK_SOURCE                 = 0x2c\n\tMCL_CURRENT                          = 0x1\n\tMCL_FUTURE                           = 0x2\n\tMCL_ONFAULT                          = 0x4\n\tMFD_ALLOW_SEALING                    = 0x2\n\tMFD_CLOEXEC                          = 0x1\n\tMFD_HUGETLB                          = 0x4\n\tMFD_HUGE_16GB                        = -0x78000000\n\tMFD_HUGE_16MB                        = 0x60000000\n\tMFD_HUGE_1GB                         = 0x78000000\n\tMFD_HUGE_1MB                         = 0x50000000\n\tMFD_HUGE_256MB                       = 0x70000000\n\tMFD_HUGE_2GB                         = 0x7c000000\n\tMFD_HUGE_2MB                         = 0x54000000\n\tMFD_HUGE_32MB                        = 0x64000000\n\tMFD_HUGE_512KB                       = 0x4c000000\n\tMFD_HUGE_512MB                       = 0x74000000\n\tMFD_HUGE_64KB                        = 0x40000000\n\tMFD_HUGE_8MB                         = 0x5c000000\n\tMFD_HUGE_MASK                        = 0x3f\n\tMFD_HUGE_SHIFT                       = 0x1a\n\tMINIX2_SUPER_MAGIC                   = 0x2468\n\tMINIX2_SUPER_MAGIC2                  = 0x2478\n\tMINIX3_SUPER_MAGIC                   = 0x4d5a\n\tMINIX_SUPER_MAGIC                    = 0x137f\n\tMINIX_SUPER_MAGIC2                   = 0x138f\n\tMNT_DETACH                           = 0x2\n\tMNT_EXPIRE                           = 0x4\n\tMNT_FORCE                            = 0x1\n\tMODULE_INIT_IGNORE_MODVERSIONS       = 0x1\n\tMODULE_INIT_IGNORE_VERMAGIC          = 0x2\n\tMSDOS_SUPER_MAGIC                    = 0x4d44\n\tMSG_BATCH                            = 0x40000\n\tMSG_CMSG_CLOEXEC                     = 0x40000000\n\tMSG_CONFIRM                          = 0x800\n\tMSG_CTRUNC                           = 0x8\n\tMSG_DONTROUTE                        = 0x4\n\tMSG_DONTWAIT                         = 0x40\n\tMSG_EOR                              = 0x80\n\tMSG_ERRQUEUE                         = 0x2000\n\tMSG_FASTOPEN                         = 0x20000000\n\tMSG_FIN                              = 0x200\n\tMSG_MORE                             = 0x8000\n\tMSG_NOSIGNAL                         = 0x4000\n\tMSG_OOB                              = 0x1\n\tMSG_PEEK                             = 0x2\n\tMSG_PROXY                            = 0x10\n\tMSG_RST                              = 0x1000\n\tMSG_SYN                              = 0x400\n\tMSG_TRUNC                            = 0x20\n\tMSG_TRYHARD                          = 0x4\n\tMSG_WAITALL                          = 0x100\n\tMSG_WAITFORONE                       = 0x10000\n\tMSG_ZEROCOPY                         = 0x4000000\n\tMS_ACTIVE                            = 0x40000000\n\tMS_ASYNC                             = 0x1\n\tMS_BIND                              = 0x1000\n\tMS_BORN                              = 0x20000000\n\tMS_DIRSYNC                           = 0x80\n\tMS_INVALIDATE                        = 0x2\n\tMS_I_VERSION                         = 0x800000\n\tMS_KERNMOUNT                         = 0x400000\n\tMS_LAZYTIME                          = 0x2000000\n\tMS_MANDLOCK                          = 0x40\n\tMS_MGC_MSK                           = 0xffff0000\n\tMS_MGC_VAL                           = 0xc0ed0000\n\tMS_MOVE                              = 0x2000\n\tMS_NOATIME                           = 0x400\n\tMS_NODEV                             = 0x4\n\tMS_NODIRATIME                        = 0x800\n\tMS_NOEXEC                            = 0x8\n\tMS_NOREMOTELOCK                      = 0x8000000\n\tMS_NOSEC                             = 0x10000000\n\tMS_NOSUID                            = 0x2\n\tMS_NOUSER                            = -0x80000000\n\tMS_POSIXACL                          = 0x10000\n\tMS_PRIVATE                           = 0x40000\n\tMS_RDONLY                            = 0x1\n\tMS_REC                               = 0x4000\n\tMS_RELATIME                          = 0x200000\n\tMS_REMOUNT                           = 0x20\n\tMS_RMT_MASK                          = 0x2800051\n\tMS_SHARED                            = 0x100000\n\tMS_SILENT                            = 0x8000\n\tMS_SLAVE                             = 0x80000\n\tMS_STRICTATIME                       = 0x1000000\n\tMS_SUBMOUNT                          = 0x4000000\n\tMS_SYNC                              = 0x4\n\tMS_SYNCHRONOUS                       = 0x10\n\tMS_UNBINDABLE                        = 0x20000\n\tMS_VERBOSE                           = 0x8000\n\tMTD_INODE_FS_MAGIC                   = 0x11307854\n\tNAME_MAX                             = 0xff\n\tNCP_SUPER_MAGIC                      = 0x564c\n\tNETLINK_ADD_MEMBERSHIP               = 0x1\n\tNETLINK_AUDIT                        = 0x9\n\tNETLINK_BROADCAST_ERROR              = 0x4\n\tNETLINK_CAP_ACK                      = 0xa\n\tNETLINK_CONNECTOR                    = 0xb\n\tNETLINK_CRYPTO                       = 0x15\n\tNETLINK_DNRTMSG                      = 0xe\n\tNETLINK_DROP_MEMBERSHIP              = 0x2\n\tNETLINK_ECRYPTFS                     = 0x13\n\tNETLINK_EXT_ACK                      = 0xb\n\tNETLINK_FIB_LOOKUP                   = 0xa\n\tNETLINK_FIREWALL                     = 0x3\n\tNETLINK_GENERIC                      = 0x10\n\tNETLINK_GET_STRICT_CHK               = 0xc\n\tNETLINK_INET_DIAG                    = 0x4\n\tNETLINK_IP6_FW                       = 0xd\n\tNETLINK_ISCSI                        = 0x8\n\tNETLINK_KOBJECT_UEVENT               = 0xf\n\tNETLINK_LISTEN_ALL_NSID              = 0x8\n\tNETLINK_LIST_MEMBERSHIPS             = 0x9\n\tNETLINK_NETFILTER                    = 0xc\n\tNETLINK_NFLOG                        = 0x5\n\tNETLINK_NO_ENOBUFS                   = 0x5\n\tNETLINK_PKTINFO                      = 0x3\n\tNETLINK_RDMA                         = 0x14\n\tNETLINK_ROUTE                        = 0x0\n\tNETLINK_RX_RING                      = 0x6\n\tNETLINK_SCSITRANSPORT                = 0x12\n\tNETLINK_SELINUX                      = 0x7\n\tNETLINK_SMC                          = 0x16\n\tNETLINK_SOCK_DIAG                    = 0x4\n\tNETLINK_TX_RING                      = 0x7\n\tNETLINK_UNUSED                       = 0x1\n\tNETLINK_USERSOCK                     = 0x2\n\tNETLINK_XFRM                         = 0x6\n\tNETNSA_MAX                           = 0x5\n\tNETNSA_NSID_NOT_ASSIGNED             = -0x1\n\tNFNETLINK_V0                         = 0x0\n\tNFNLGRP_ACCT_QUOTA                   = 0x8\n\tNFNLGRP_CONNTRACK_DESTROY            = 0x3\n\tNFNLGRP_CONNTRACK_EXP_DESTROY        = 0x6\n\tNFNLGRP_CONNTRACK_EXP_NEW            = 0x4\n\tNFNLGRP_CONNTRACK_EXP_UPDATE         = 0x5\n\tNFNLGRP_CONNTRACK_NEW                = 0x1\n\tNFNLGRP_CONNTRACK_UPDATE             = 0x2\n\tNFNLGRP_MAX                          = 0x9\n\tNFNLGRP_NFTABLES                     = 0x7\n\tNFNLGRP_NFTRACE                      = 0x9\n\tNFNLGRP_NONE                         = 0x0\n\tNFNL_BATCH_MAX                       = 0x1\n\tNFNL_MSG_BATCH_BEGIN                 = 0x10\n\tNFNL_MSG_BATCH_END                   = 0x11\n\tNFNL_NFA_NEST                        = 0x8000\n\tNFNL_SUBSYS_ACCT                     = 0x7\n\tNFNL_SUBSYS_COUNT                    = 0xc\n\tNFNL_SUBSYS_CTHELPER                 = 0x9\n\tNFNL_SUBSYS_CTNETLINK                = 0x1\n\tNFNL_SUBSYS_CTNETLINK_EXP            = 0x2\n\tNFNL_SUBSYS_CTNETLINK_TIMEOUT        = 0x8\n\tNFNL_SUBSYS_IPSET                    = 0x6\n\tNFNL_SUBSYS_NFTABLES                 = 0xa\n\tNFNL_SUBSYS_NFT_COMPAT               = 0xb\n\tNFNL_SUBSYS_NONE                     = 0x0\n\tNFNL_SUBSYS_OSF                      = 0x5\n\tNFNL_SUBSYS_QUEUE                    = 0x3\n\tNFNL_SUBSYS_ULOG                     = 0x4\n\tNFS_SUPER_MAGIC                      = 0x6969\n\tNILFS_SUPER_MAGIC                    = 0x3434\n\tNL0                                  = 0x0\n\tNL1                                  = 0x100\n\tNLA_ALIGNTO                          = 0x4\n\tNLA_F_NESTED                         = 0x8000\n\tNLA_F_NET_BYTEORDER                  = 0x4000\n\tNLA_HDRLEN                           = 0x4\n\tNLDLY                                = 0x100\n\tNLMSG_ALIGNTO                        = 0x4\n\tNLMSG_DONE                           = 0x3\n\tNLMSG_ERROR                          = 0x2\n\tNLMSG_HDRLEN                         = 0x10\n\tNLMSG_MIN_TYPE                       = 0x10\n\tNLMSG_NOOP                           = 0x1\n\tNLMSG_OVERRUN                        = 0x4\n\tNLM_F_ACK                            = 0x4\n\tNLM_F_ACK_TLVS                       = 0x200\n\tNLM_F_APPEND                         = 0x800\n\tNLM_F_ATOMIC                         = 0x400\n\tNLM_F_CAPPED                         = 0x100\n\tNLM_F_CREATE                         = 0x400\n\tNLM_F_DUMP                           = 0x300\n\tNLM_F_DUMP_FILTERED                  = 0x20\n\tNLM_F_DUMP_INTR                      = 0x10\n\tNLM_F_ECHO                           = 0x8\n\tNLM_F_EXCL                           = 0x200\n\tNLM_F_MATCH                          = 0x200\n\tNLM_F_MULTI                          = 0x2\n\tNLM_F_NONREC                         = 0x100\n\tNLM_F_REPLACE                        = 0x100\n\tNLM_F_REQUEST                        = 0x1\n\tNLM_F_ROOT                           = 0x100\n\tNOFLSH                               = 0x80\n\tNSFS_MAGIC                           = 0x6e736673\n\tOCFS2_SUPER_MAGIC                    = 0x7461636f\n\tOCRNL                                = 0x8\n\tOFDEL                                = 0x80\n\tOFILL                                = 0x40\n\tOLCUC                                = 0x2\n\tONLCR                                = 0x4\n\tONLRET                               = 0x20\n\tONOCR                                = 0x10\n\tOPENPROM_SUPER_MAGIC                 = 0x9fa1\n\tOPOST                                = 0x1\n\tOVERLAYFS_SUPER_MAGIC                = 0x794c7630\n\tO_ACCMODE                            = 0x3\n\tO_APPEND                             = 0x8\n\tO_ASYNC                              = 0x1000\n\tO_CLOEXEC                            = 0x80000\n\tO_CREAT                              = 0x100\n\tO_DIRECT                             = 0x8000\n\tO_DIRECTORY                          = 0x10000\n\tO_DSYNC                              = 0x10\n\tO_EXCL                               = 0x400\n\tO_FSYNC                              = 0x4010\n\tO_LARGEFILE                          = 0x0\n\tO_NDELAY                             = 0x80\n\tO_NOATIME                            = 0x40000\n\tO_NOCTTY                             = 0x800\n\tO_NOFOLLOW                           = 0x20000\n\tO_NONBLOCK                           = 0x80\n\tO_PATH                               = 0x200000\n\tO_RDONLY                             = 0x0\n\tO_RDWR                               = 0x2\n\tO_RSYNC                              = 0x4010\n\tO_SYNC                               = 0x4010\n\tO_TMPFILE                            = 0x410000\n\tO_TRUNC                              = 0x200\n\tO_WRONLY                             = 0x1\n\tPACKET_ADD_MEMBERSHIP                = 0x1\n\tPACKET_AUXDATA                       = 0x8\n\tPACKET_BROADCAST                     = 0x1\n\tPACKET_COPY_THRESH                   = 0x7\n\tPACKET_DROP_MEMBERSHIP               = 0x2\n\tPACKET_FANOUT                        = 0x12\n\tPACKET_FANOUT_CBPF                   = 0x6\n\tPACKET_FANOUT_CPU                    = 0x2\n\tPACKET_FANOUT_DATA                   = 0x16\n\tPACKET_FANOUT_EBPF                   = 0x7\n\tPACKET_FANOUT_FLAG_DEFRAG            = 0x8000\n\tPACKET_FANOUT_FLAG_ROLLOVER          = 0x1000\n\tPACKET_FANOUT_FLAG_UNIQUEID          = 0x2000\n\tPACKET_FANOUT_HASH                   = 0x0\n\tPACKET_FANOUT_LB                     = 0x1\n\tPACKET_FANOUT_QM                     = 0x5\n\tPACKET_FANOUT_RND                    = 0x4\n\tPACKET_FANOUT_ROLLOVER               = 0x3\n\tPACKET_FASTROUTE                     = 0x6\n\tPACKET_HDRLEN                        = 0xb\n\tPACKET_HOST                          = 0x0\n\tPACKET_IGNORE_OUTGOING               = 0x17\n\tPACKET_KERNEL                        = 0x7\n\tPACKET_LOOPBACK                      = 0x5\n\tPACKET_LOSS                          = 0xe\n\tPACKET_MR_ALLMULTI                   = 0x2\n\tPACKET_MR_MULTICAST                  = 0x0\n\tPACKET_MR_PROMISC                    = 0x1\n\tPACKET_MR_UNICAST                    = 0x3\n\tPACKET_MULTICAST                     = 0x2\n\tPACKET_ORIGDEV                       = 0x9\n\tPACKET_OTHERHOST                     = 0x3\n\tPACKET_OUTGOING                      = 0x4\n\tPACKET_QDISC_BYPASS                  = 0x14\n\tPACKET_RECV_OUTPUT                   = 0x3\n\tPACKET_RESERVE                       = 0xc\n\tPACKET_ROLLOVER_STATS                = 0x15\n\tPACKET_RX_RING                       = 0x5\n\tPACKET_STATISTICS                    = 0x6\n\tPACKET_TIMESTAMP                     = 0x11\n\tPACKET_TX_HAS_OFF                    = 0x13\n\tPACKET_TX_RING                       = 0xd\n\tPACKET_TX_TIMESTAMP                  = 0x10\n\tPACKET_USER                          = 0x6\n\tPACKET_VERSION                       = 0xa\n\tPACKET_VNET_HDR                      = 0xf\n\tPARENB                               = 0x100\n\tPARITY_CRC16_PR0                     = 0x2\n\tPARITY_CRC16_PR0_CCITT               = 0x4\n\tPARITY_CRC16_PR1                     = 0x3\n\tPARITY_CRC16_PR1_CCITT               = 0x5\n\tPARITY_CRC32_PR0_CCITT               = 0x6\n\tPARITY_CRC32_PR1_CCITT               = 0x7\n\tPARITY_DEFAULT                       = 0x0\n\tPARITY_NONE                          = 0x1\n\tPARMRK                               = 0x8\n\tPARODD                               = 0x200\n\tPENDIN                               = 0x4000\n\tPERF_EVENT_IOC_DISABLE               = 0x20002401\n\tPERF_EVENT_IOC_ENABLE                = 0x20002400\n\tPERF_EVENT_IOC_ID                    = 0x40082407\n\tPERF_EVENT_IOC_MODIFY_ATTRIBUTES     = 0x8008240b\n\tPERF_EVENT_IOC_PAUSE_OUTPUT          = 0x80042409\n\tPERF_EVENT_IOC_PERIOD                = 0x80082404\n\tPERF_EVENT_IOC_QUERY_BPF             = 0xc008240a\n\tPERF_EVENT_IOC_REFRESH               = 0x20002402\n\tPERF_EVENT_IOC_RESET                 = 0x20002403\n\tPERF_EVENT_IOC_SET_BPF               = 0x80042408\n\tPERF_EVENT_IOC_SET_FILTER            = 0x80082406\n\tPERF_EVENT_IOC_SET_OUTPUT            = 0x20002405\n\tPIPEFS_MAGIC                         = 0x50495045\n\tPPPIOCATTACH                         = 0x8004743d\n\tPPPIOCATTCHAN                        = 0x80047438\n\tPPPIOCCONNECT                        = 0x8004743a\n\tPPPIOCDETACH                         = 0x8004743c\n\tPPPIOCDISCONN                        = 0x20007439\n\tPPPIOCGASYNCMAP                      = 0x40047458\n\tPPPIOCGCHAN                          = 0x40047437\n\tPPPIOCGDEBUG                         = 0x40047441\n\tPPPIOCGFLAGS                         = 0x4004745a\n\tPPPIOCGIDLE                          = 0x4010743f\n\tPPPIOCGL2TPSTATS                     = 0x40487436\n\tPPPIOCGMRU                           = 0x40047453\n\tPPPIOCGNPMODE                        = 0xc008744c\n\tPPPIOCGRASYNCMAP                     = 0x40047455\n\tPPPIOCGUNIT                          = 0x40047456\n\tPPPIOCGXASYNCMAP                     = 0x40207450\n\tPPPIOCNEWUNIT                        = 0xc004743e\n\tPPPIOCSACTIVE                        = 0x80107446\n\tPPPIOCSASYNCMAP                      = 0x80047457\n\tPPPIOCSCOMPRESS                      = 0x8010744d\n\tPPPIOCSDEBUG                         = 0x80047440\n\tPPPIOCSFLAGS                         = 0x80047459\n\tPPPIOCSMAXCID                        = 0x80047451\n\tPPPIOCSMRRU                          = 0x8004743b\n\tPPPIOCSMRU                           = 0x80047452\n\tPPPIOCSNPMODE                        = 0x8008744b\n\tPPPIOCSPASS                          = 0x80107447\n\tPPPIOCSRASYNCMAP                     = 0x80047454\n\tPPPIOCSXASYNCMAP                     = 0x8020744f\n\tPPPIOCXFERUNIT                       = 0x2000744e\n\tPRIO_PGRP                            = 0x1\n\tPRIO_PROCESS                         = 0x0\n\tPRIO_USER                            = 0x2\n\tPROC_SUPER_MAGIC                     = 0x9fa0\n\tPROT_EXEC                            = 0x4\n\tPROT_GROWSDOWN                       = 0x1000000\n\tPROT_GROWSUP                         = 0x2000000\n\tPROT_NONE                            = 0x0\n\tPROT_READ                            = 0x1\n\tPROT_WRITE                           = 0x2\n\tPR_CAPBSET_DROP                      = 0x18\n\tPR_CAPBSET_READ                      = 0x17\n\tPR_CAP_AMBIENT                       = 0x2f\n\tPR_CAP_AMBIENT_CLEAR_ALL             = 0x4\n\tPR_CAP_AMBIENT_IS_SET                = 0x1\n\tPR_CAP_AMBIENT_LOWER                 = 0x3\n\tPR_CAP_AMBIENT_RAISE                 = 0x2\n\tPR_ENDIAN_BIG                        = 0x0\n\tPR_ENDIAN_LITTLE                     = 0x1\n\tPR_ENDIAN_PPC_LITTLE                 = 0x2\n\tPR_FPEMU_NOPRINT                     = 0x1\n\tPR_FPEMU_SIGFPE                      = 0x2\n\tPR_FP_EXC_ASYNC                      = 0x2\n\tPR_FP_EXC_DISABLED                   = 0x0\n\tPR_FP_EXC_DIV                        = 0x10000\n\tPR_FP_EXC_INV                        = 0x100000\n\tPR_FP_EXC_NONRECOV                   = 0x1\n\tPR_FP_EXC_OVF                        = 0x20000\n\tPR_FP_EXC_PRECISE                    = 0x3\n\tPR_FP_EXC_RES                        = 0x80000\n\tPR_FP_EXC_SW_ENABLE                  = 0x80\n\tPR_FP_EXC_UND                        = 0x40000\n\tPR_FP_MODE_FR                        = 0x1\n\tPR_FP_MODE_FRE                       = 0x2\n\tPR_GET_CHILD_SUBREAPER               = 0x25\n\tPR_GET_DUMPABLE                      = 0x3\n\tPR_GET_ENDIAN                        = 0x13\n\tPR_GET_FPEMU                         = 0x9\n\tPR_GET_FPEXC                         = 0xb\n\tPR_GET_FP_MODE                       = 0x2e\n\tPR_GET_KEEPCAPS                      = 0x7\n\tPR_GET_NAME                          = 0x10\n\tPR_GET_NO_NEW_PRIVS                  = 0x27\n\tPR_GET_PDEATHSIG                     = 0x2\n\tPR_GET_SECCOMP                       = 0x15\n\tPR_GET_SECUREBITS                    = 0x1b\n\tPR_GET_SPECULATION_CTRL              = 0x34\n\tPR_GET_THP_DISABLE                   = 0x2a\n\tPR_GET_TID_ADDRESS                   = 0x28\n\tPR_GET_TIMERSLACK                    = 0x1e\n\tPR_GET_TIMING                        = 0xd\n\tPR_GET_TSC                           = 0x19\n\tPR_GET_UNALIGN                       = 0x5\n\tPR_MCE_KILL                          = 0x21\n\tPR_MCE_KILL_CLEAR                    = 0x0\n\tPR_MCE_KILL_DEFAULT                  = 0x2\n\tPR_MCE_KILL_EARLY                    = 0x1\n\tPR_MCE_KILL_GET                      = 0x22\n\tPR_MCE_KILL_LATE                     = 0x0\n\tPR_MCE_KILL_SET                      = 0x1\n\tPR_MPX_DISABLE_MANAGEMENT            = 0x2c\n\tPR_MPX_ENABLE_MANAGEMENT             = 0x2b\n\tPR_PAC_APDAKEY                       = 0x4\n\tPR_PAC_APDBKEY                       = 0x8\n\tPR_PAC_APGAKEY                       = 0x10\n\tPR_PAC_APIAKEY                       = 0x1\n\tPR_PAC_APIBKEY                       = 0x2\n\tPR_PAC_RESET_KEYS                    = 0x36\n\tPR_SET_CHILD_SUBREAPER               = 0x24\n\tPR_SET_DUMPABLE                      = 0x4\n\tPR_SET_ENDIAN                        = 0x14\n\tPR_SET_FPEMU                         = 0xa\n\tPR_SET_FPEXC                         = 0xc\n\tPR_SET_FP_MODE                       = 0x2d\n\tPR_SET_KEEPCAPS                      = 0x8\n\tPR_SET_MM                            = 0x23\n\tPR_SET_MM_ARG_END                    = 0x9\n\tPR_SET_MM_ARG_START                  = 0x8\n\tPR_SET_MM_AUXV                       = 0xc\n\tPR_SET_MM_BRK                        = 0x7\n\tPR_SET_MM_END_CODE                   = 0x2\n\tPR_SET_MM_END_DATA                   = 0x4\n\tPR_SET_MM_ENV_END                    = 0xb\n\tPR_SET_MM_ENV_START                  = 0xa\n\tPR_SET_MM_EXE_FILE                   = 0xd\n\tPR_SET_MM_MAP                        = 0xe\n\tPR_SET_MM_MAP_SIZE                   = 0xf\n\tPR_SET_MM_START_BRK                  = 0x6\n\tPR_SET_MM_START_CODE                 = 0x1\n\tPR_SET_MM_START_DATA                 = 0x3\n\tPR_SET_MM_START_STACK                = 0x5\n\tPR_SET_NAME                          = 0xf\n\tPR_SET_NO_NEW_PRIVS                  = 0x26\n\tPR_SET_PDEATHSIG                     = 0x1\n\tPR_SET_PTRACER                       = 0x59616d61\n\tPR_SET_PTRACER_ANY                   = 0xffffffffffffffff\n\tPR_SET_SECCOMP                       = 0x16\n\tPR_SET_SECUREBITS                    = 0x1c\n\tPR_SET_SPECULATION_CTRL              = 0x35\n\tPR_SET_THP_DISABLE                   = 0x29\n\tPR_SET_TIMERSLACK                    = 0x1d\n\tPR_SET_TIMING                        = 0xe\n\tPR_SET_TSC                           = 0x1a\n\tPR_SET_UNALIGN                       = 0x6\n\tPR_SPEC_DISABLE                      = 0x4\n\tPR_SPEC_DISABLE_NOEXEC               = 0x10\n\tPR_SPEC_ENABLE                       = 0x2\n\tPR_SPEC_FORCE_DISABLE                = 0x8\n\tPR_SPEC_INDIRECT_BRANCH              = 0x1\n\tPR_SPEC_NOT_AFFECTED                 = 0x0\n\tPR_SPEC_PRCTL                        = 0x1\n\tPR_SPEC_STORE_BYPASS                 = 0x0\n\tPR_SVE_GET_VL                        = 0x33\n\tPR_SVE_SET_VL                        = 0x32\n\tPR_SVE_SET_VL_ONEXEC                 = 0x40000\n\tPR_SVE_VL_INHERIT                    = 0x20000\n\tPR_SVE_VL_LEN_MASK                   = 0xffff\n\tPR_TASK_PERF_EVENTS_DISABLE          = 0x1f\n\tPR_TASK_PERF_EVENTS_ENABLE           = 0x20\n\tPR_TIMING_STATISTICAL                = 0x0\n\tPR_TIMING_TIMESTAMP                  = 0x1\n\tPR_TSC_ENABLE                        = 0x1\n\tPR_TSC_SIGSEGV                       = 0x2\n\tPR_UNALIGN_NOPRINT                   = 0x1\n\tPR_UNALIGN_SIGBUS                    = 0x2\n\tPSTOREFS_MAGIC                       = 0x6165676c\n\tPTRACE_ATTACH                        = 0x10\n\tPTRACE_CONT                          = 0x7\n\tPTRACE_DETACH                        = 0x11\n\tPTRACE_EVENT_CLONE                   = 0x3\n\tPTRACE_EVENT_EXEC                    = 0x4\n\tPTRACE_EVENT_EXIT                    = 0x6\n\tPTRACE_EVENT_FORK                    = 0x1\n\tPTRACE_EVENT_SECCOMP                 = 0x7\n\tPTRACE_EVENT_STOP                    = 0x80\n\tPTRACE_EVENT_VFORK                   = 0x2\n\tPTRACE_EVENT_VFORK_DONE              = 0x5\n\tPTRACE_GETEVENTMSG                   = 0x4201\n\tPTRACE_GETFPREGS                     = 0xe\n\tPTRACE_GETREGS                       = 0xc\n\tPTRACE_GETREGSET                     = 0x4204\n\tPTRACE_GETSIGINFO                    = 0x4202\n\tPTRACE_GETSIGMASK                    = 0x420a\n\tPTRACE_GET_THREAD_AREA               = 0x19\n\tPTRACE_GET_THREAD_AREA_3264          = 0xc4\n\tPTRACE_GET_WATCH_REGS                = 0xd0\n\tPTRACE_INTERRUPT                     = 0x4207\n\tPTRACE_KILL                          = 0x8\n\tPTRACE_LISTEN                        = 0x4208\n\tPTRACE_OLDSETOPTIONS                 = 0x15\n\tPTRACE_O_EXITKILL                    = 0x100000\n\tPTRACE_O_MASK                        = 0x3000ff\n\tPTRACE_O_SUSPEND_SECCOMP             = 0x200000\n\tPTRACE_O_TRACECLONE                  = 0x8\n\tPTRACE_O_TRACEEXEC                   = 0x10\n\tPTRACE_O_TRACEEXIT                   = 0x40\n\tPTRACE_O_TRACEFORK                   = 0x2\n\tPTRACE_O_TRACESECCOMP                = 0x80\n\tPTRACE_O_TRACESYSGOOD                = 0x1\n\tPTRACE_O_TRACEVFORK                  = 0x4\n\tPTRACE_O_TRACEVFORKDONE              = 0x20\n\tPTRACE_PEEKDATA                      = 0x2\n\tPTRACE_PEEKDATA_3264                 = 0xc1\n\tPTRACE_PEEKSIGINFO                   = 0x4209\n\tPTRACE_PEEKSIGINFO_SHARED            = 0x1\n\tPTRACE_PEEKTEXT                      = 0x1\n\tPTRACE_PEEKTEXT_3264                 = 0xc0\n\tPTRACE_PEEKUSR                       = 0x3\n\tPTRACE_POKEDATA                      = 0x5\n\tPTRACE_POKEDATA_3264                 = 0xc3\n\tPTRACE_POKETEXT                      = 0x4\n\tPTRACE_POKETEXT_3264                 = 0xc2\n\tPTRACE_POKEUSR                       = 0x6\n\tPTRACE_SECCOMP_GET_FILTER            = 0x420c\n\tPTRACE_SECCOMP_GET_METADATA          = 0x420d\n\tPTRACE_SEIZE                         = 0x4206\n\tPTRACE_SETFPREGS                     = 0xf\n\tPTRACE_SETOPTIONS                    = 0x4200\n\tPTRACE_SETREGS                       = 0xd\n\tPTRACE_SETREGSET                     = 0x4205\n\tPTRACE_SETSIGINFO                    = 0x4203\n\tPTRACE_SETSIGMASK                    = 0x420b\n\tPTRACE_SET_THREAD_AREA               = 0x1a\n\tPTRACE_SET_WATCH_REGS                = 0xd1\n\tPTRACE_SINGLESTEP                    = 0x9\n\tPTRACE_SYSCALL                       = 0x18\n\tPTRACE_TRACEME                       = 0x0\n\tQNX4_SUPER_MAGIC                     = 0x2f\n\tQNX6_SUPER_MAGIC                     = 0x68191122\n\tRAMFS_MAGIC                          = 0x858458f6\n\tRDTGROUP_SUPER_MAGIC                 = 0x7655821\n\tREISERFS_SUPER_MAGIC                 = 0x52654973\n\tRENAME_EXCHANGE                      = 0x2\n\tRENAME_NOREPLACE                     = 0x1\n\tRENAME_WHITEOUT                      = 0x4\n\tRLIMIT_AS                            = 0x6\n\tRLIMIT_CORE                          = 0x4\n\tRLIMIT_CPU                           = 0x0\n\tRLIMIT_DATA                          = 0x2\n\tRLIMIT_FSIZE                         = 0x1\n\tRLIMIT_LOCKS                         = 0xa\n\tRLIMIT_MEMLOCK                       = 0x9\n\tRLIMIT_MSGQUEUE                      = 0xc\n\tRLIMIT_NICE                          = 0xd\n\tRLIMIT_NOFILE                        = 0x5\n\tRLIMIT_NPROC                         = 0x8\n\tRLIMIT_RSS                           = 0x7\n\tRLIMIT_RTPRIO                        = 0xe\n\tRLIMIT_RTTIME                        = 0xf\n\tRLIMIT_SIGPENDING                    = 0xb\n\tRLIMIT_STACK                         = 0x3\n\tRLIM_INFINITY                        = 0xffffffffffffffff\n\tRNDADDENTROPY                        = 0x80085203\n\tRNDADDTOENTCNT                       = 0x80045201\n\tRNDCLEARPOOL                         = 0x20005206\n\tRNDGETENTCNT                         = 0x40045200\n\tRNDGETPOOL                           = 0x40085202\n\tRNDRESEEDCRNG                        = 0x20005207\n\tRNDZAPENTCNT                         = 0x20005204\n\tRTAX_ADVMSS                          = 0x8\n\tRTAX_CC_ALGO                         = 0x10\n\tRTAX_CWND                            = 0x7\n\tRTAX_FASTOPEN_NO_COOKIE              = 0x11\n\tRTAX_FEATURES                        = 0xc\n\tRTAX_FEATURE_ALLFRAG                 = 0x8\n\tRTAX_FEATURE_ECN                     = 0x1\n\tRTAX_FEATURE_MASK                    = 0xf\n\tRTAX_FEATURE_SACK                    = 0x2\n\tRTAX_FEATURE_TIMESTAMP               = 0x4\n\tRTAX_HOPLIMIT                        = 0xa\n\tRTAX_INITCWND                        = 0xb\n\tRTAX_INITRWND                        = 0xe\n\tRTAX_LOCK                            = 0x1\n\tRTAX_MAX                             = 0x11\n\tRTAX_MTU                             = 0x2\n\tRTAX_QUICKACK                        = 0xf\n\tRTAX_REORDERING                      = 0x9\n\tRTAX_RTO_MIN                         = 0xd\n\tRTAX_RTT                             = 0x4\n\tRTAX_RTTVAR                          = 0x5\n\tRTAX_SSTHRESH                        = 0x6\n\tRTAX_UNSPEC                          = 0x0\n\tRTAX_WINDOW                          = 0x3\n\tRTA_ALIGNTO                          = 0x4\n\tRTA_MAX                              = 0x1d\n\tRTCF_DIRECTSRC                       = 0x4000000\n\tRTCF_DOREDIRECT                      = 0x1000000\n\tRTCF_LOG                             = 0x2000000\n\tRTCF_MASQ                            = 0x400000\n\tRTCF_NAT                             = 0x800000\n\tRTCF_VALVE                           = 0x200000\n\tRTC_AF                               = 0x20\n\tRTC_AIE_OFF                          = 0x20007002\n\tRTC_AIE_ON                           = 0x20007001\n\tRTC_ALM_READ                         = 0x40247008\n\tRTC_ALM_SET                          = 0x80247007\n\tRTC_EPOCH_READ                       = 0x4008700d\n\tRTC_EPOCH_SET                        = 0x8008700e\n\tRTC_IRQF                             = 0x80\n\tRTC_IRQP_READ                        = 0x4008700b\n\tRTC_IRQP_SET                         = 0x8008700c\n\tRTC_MAX_FREQ                         = 0x2000\n\tRTC_PF                               = 0x40\n\tRTC_PIE_OFF                          = 0x20007006\n\tRTC_PIE_ON                           = 0x20007005\n\tRTC_PLL_GET                          = 0x40207011\n\tRTC_PLL_SET                          = 0x80207012\n\tRTC_RD_TIME                          = 0x40247009\n\tRTC_SET_TIME                         = 0x8024700a\n\tRTC_UF                               = 0x10\n\tRTC_UIE_OFF                          = 0x20007004\n\tRTC_UIE_ON                           = 0x20007003\n\tRTC_VL_CLR                           = 0x20007014\n\tRTC_VL_READ                          = 0x40047013\n\tRTC_WIE_OFF                          = 0x20007010\n\tRTC_WIE_ON                           = 0x2000700f\n\tRTC_WKALM_RD                         = 0x40287010\n\tRTC_WKALM_SET                        = 0x8028700f\n\tRTF_ADDRCLASSMASK                    = 0xf8000000\n\tRTF_ADDRCONF                         = 0x40000\n\tRTF_ALLONLINK                        = 0x20000\n\tRTF_BROADCAST                        = 0x10000000\n\tRTF_CACHE                            = 0x1000000\n\tRTF_DEFAULT                          = 0x10000\n\tRTF_DYNAMIC                          = 0x10\n\tRTF_FLOW                             = 0x2000000\n\tRTF_GATEWAY                          = 0x2\n\tRTF_HOST                             = 0x4\n\tRTF_INTERFACE                        = 0x40000000\n\tRTF_IRTT                             = 0x100\n\tRTF_LINKRT                           = 0x100000\n\tRTF_LOCAL                            = 0x80000000\n\tRTF_MODIFIED                         = 0x20\n\tRTF_MSS                              = 0x40\n\tRTF_MTU                              = 0x40\n\tRTF_MULTICAST                        = 0x20000000\n\tRTF_NAT                              = 0x8000000\n\tRTF_NOFORWARD                        = 0x1000\n\tRTF_NONEXTHOP                        = 0x200000\n\tRTF_NOPMTUDISC                       = 0x4000\n\tRTF_POLICY                           = 0x4000000\n\tRTF_REINSTATE                        = 0x8\n\tRTF_REJECT                           = 0x200\n\tRTF_STATIC                           = 0x400\n\tRTF_THROW                            = 0x2000\n\tRTF_UP                               = 0x1\n\tRTF_WINDOW                           = 0x80\n\tRTF_XRESOLVE                         = 0x800\n\tRTM_BASE                             = 0x10\n\tRTM_DELACTION                        = 0x31\n\tRTM_DELADDR                          = 0x15\n\tRTM_DELADDRLABEL                     = 0x49\n\tRTM_DELCHAIN                         = 0x65\n\tRTM_DELLINK                          = 0x11\n\tRTM_DELMDB                           = 0x55\n\tRTM_DELNEIGH                         = 0x1d\n\tRTM_DELNETCONF                       = 0x51\n\tRTM_DELNSID                          = 0x59\n\tRTM_DELQDISC                         = 0x25\n\tRTM_DELROUTE                         = 0x19\n\tRTM_DELRULE                          = 0x21\n\tRTM_DELTCLASS                        = 0x29\n\tRTM_DELTFILTER                       = 0x2d\n\tRTM_F_CLONED                         = 0x200\n\tRTM_F_EQUALIZE                       = 0x400\n\tRTM_F_FIB_MATCH                      = 0x2000\n\tRTM_F_LOOKUP_TABLE                   = 0x1000\n\tRTM_F_NOTIFY                         = 0x100\n\tRTM_F_PREFIX                         = 0x800\n\tRTM_GETACTION                        = 0x32\n\tRTM_GETADDR                          = 0x16\n\tRTM_GETADDRLABEL                     = 0x4a\n\tRTM_GETANYCAST                       = 0x3e\n\tRTM_GETCHAIN                         = 0x66\n\tRTM_GETDCB                           = 0x4e\n\tRTM_GETLINK                          = 0x12\n\tRTM_GETMDB                           = 0x56\n\tRTM_GETMULTICAST                     = 0x3a\n\tRTM_GETNEIGH                         = 0x1e\n\tRTM_GETNEIGHTBL                      = 0x42\n\tRTM_GETNETCONF                       = 0x52\n\tRTM_GETNSID                          = 0x5a\n\tRTM_GETQDISC                         = 0x26\n\tRTM_GETROUTE                         = 0x1a\n\tRTM_GETRULE                          = 0x22\n\tRTM_GETSTATS                         = 0x5e\n\tRTM_GETTCLASS                        = 0x2a\n\tRTM_GETTFILTER                       = 0x2e\n\tRTM_MAX                              = 0x67\n\tRTM_NEWACTION                        = 0x30\n\tRTM_NEWADDR                          = 0x14\n\tRTM_NEWADDRLABEL                     = 0x48\n\tRTM_NEWCACHEREPORT                   = 0x60\n\tRTM_NEWCHAIN                         = 0x64\n\tRTM_NEWLINK                          = 0x10\n\tRTM_NEWMDB                           = 0x54\n\tRTM_NEWNDUSEROPT                     = 0x44\n\tRTM_NEWNEIGH                         = 0x1c\n\tRTM_NEWNEIGHTBL                      = 0x40\n\tRTM_NEWNETCONF                       = 0x50\n\tRTM_NEWNSID                          = 0x58\n\tRTM_NEWPREFIX                        = 0x34\n\tRTM_NEWQDISC                         = 0x24\n\tRTM_NEWROUTE                         = 0x18\n\tRTM_NEWRULE                          = 0x20\n\tRTM_NEWSTATS                         = 0x5c\n\tRTM_NEWTCLASS                        = 0x28\n\tRTM_NEWTFILTER                       = 0x2c\n\tRTM_NR_FAMILIES                      = 0x16\n\tRTM_NR_MSGTYPES                      = 0x58\n\tRTM_SETDCB                           = 0x4f\n\tRTM_SETLINK                          = 0x13\n\tRTM_SETNEIGHTBL                      = 0x43\n\tRTNH_ALIGNTO                         = 0x4\n\tRTNH_COMPARE_MASK                    = 0x19\n\tRTNH_F_DEAD                          = 0x1\n\tRTNH_F_LINKDOWN                      = 0x10\n\tRTNH_F_OFFLOAD                       = 0x8\n\tRTNH_F_ONLINK                        = 0x4\n\tRTNH_F_PERVASIVE                     = 0x2\n\tRTNH_F_UNRESOLVED                    = 0x20\n\tRTN_MAX                              = 0xb\n\tRTPROT_BABEL                         = 0x2a\n\tRTPROT_BGP                           = 0xba\n\tRTPROT_BIRD                          = 0xc\n\tRTPROT_BOOT                          = 0x3\n\tRTPROT_DHCP                          = 0x10\n\tRTPROT_DNROUTED                      = 0xd\n\tRTPROT_EIGRP                         = 0xc0\n\tRTPROT_GATED                         = 0x8\n\tRTPROT_ISIS                          = 0xbb\n\tRTPROT_KERNEL                        = 0x2\n\tRTPROT_MROUTED                       = 0x11\n\tRTPROT_MRT                           = 0xa\n\tRTPROT_NTK                           = 0xf\n\tRTPROT_OSPF                          = 0xbc\n\tRTPROT_RA                            = 0x9\n\tRTPROT_REDIRECT                      = 0x1\n\tRTPROT_RIP                           = 0xbd\n\tRTPROT_STATIC                        = 0x4\n\tRTPROT_UNSPEC                        = 0x0\n\tRTPROT_XORP                          = 0xe\n\tRTPROT_ZEBRA                         = 0xb\n\tRT_CLASS_DEFAULT                     = 0xfd\n\tRT_CLASS_LOCAL                       = 0xff\n\tRT_CLASS_MAIN                        = 0xfe\n\tRT_CLASS_MAX                         = 0xff\n\tRT_CLASS_UNSPEC                      = 0x0\n\tRUSAGE_CHILDREN                      = -0x1\n\tRUSAGE_SELF                          = 0x0\n\tRUSAGE_THREAD                        = 0x1\n\tSCM_CREDENTIALS                      = 0x2\n\tSCM_RIGHTS                           = 0x1\n\tSCM_TIMESTAMP                        = 0x1d\n\tSCM_TIMESTAMPING                     = 0x25\n\tSCM_TIMESTAMPING_OPT_STATS           = 0x36\n\tSCM_TIMESTAMPING_PKTINFO             = 0x3a\n\tSCM_TIMESTAMPNS                      = 0x23\n\tSCM_TXTIME                           = 0x3d\n\tSCM_WIFI_STATUS                      = 0x29\n\tSC_LOG_FLUSH                         = 0x100000\n\tSECCOMP_MODE_DISABLED                = 0x0\n\tSECCOMP_MODE_FILTER                  = 0x2\n\tSECCOMP_MODE_STRICT                  = 0x1\n\tSECURITYFS_MAGIC                     = 0x73636673\n\tSELINUX_MAGIC                        = 0xf97cff8c\n\tSFD_CLOEXEC                          = 0x80000\n\tSFD_NONBLOCK                         = 0x80\n\tSHUT_RD                              = 0x0\n\tSHUT_RDWR                            = 0x2\n\tSHUT_WR                              = 0x1\n\tSIOCADDDLCI                          = 0x8980\n\tSIOCADDMULTI                         = 0x8931\n\tSIOCADDRT                            = 0x890b\n\tSIOCATMARK                           = 0x40047307\n\tSIOCBONDCHANGEACTIVE                 = 0x8995\n\tSIOCBONDENSLAVE                      = 0x8990\n\tSIOCBONDINFOQUERY                    = 0x8994\n\tSIOCBONDRELEASE                      = 0x8991\n\tSIOCBONDSETHWADDR                    = 0x8992\n\tSIOCBONDSLAVEINFOQUERY               = 0x8993\n\tSIOCBRADDBR                          = 0x89a0\n\tSIOCBRADDIF                          = 0x89a2\n\tSIOCBRDELBR                          = 0x89a1\n\tSIOCBRDELIF                          = 0x89a3\n\tSIOCDARP                             = 0x8953\n\tSIOCDELDLCI                          = 0x8981\n\tSIOCDELMULTI                         = 0x8932\n\tSIOCDELRT                            = 0x890c\n\tSIOCDEVPRIVATE                       = 0x89f0\n\tSIOCDIFADDR                          = 0x8936\n\tSIOCDRARP                            = 0x8960\n\tSIOCETHTOOL                          = 0x8946\n\tSIOCGARP                             = 0x8954\n\tSIOCGHWTSTAMP                        = 0x89b1\n\tSIOCGIFADDR                          = 0x8915\n\tSIOCGIFBR                            = 0x8940\n\tSIOCGIFBRDADDR                       = 0x8919\n\tSIOCGIFCONF                          = 0x8912\n\tSIOCGIFCOUNT                         = 0x8938\n\tSIOCGIFDSTADDR                       = 0x8917\n\tSIOCGIFENCAP                         = 0x8925\n\tSIOCGIFFLAGS                         = 0x8913\n\tSIOCGIFHWADDR                        = 0x8927\n\tSIOCGIFINDEX                         = 0x8933\n\tSIOCGIFMAP                           = 0x8970\n\tSIOCGIFMEM                           = 0x891f\n\tSIOCGIFMETRIC                        = 0x891d\n\tSIOCGIFMTU                           = 0x8921\n\tSIOCGIFNAME                          = 0x8910\n\tSIOCGIFNETMASK                       = 0x891b\n\tSIOCGIFPFLAGS                        = 0x8935\n\tSIOCGIFSLAVE                         = 0x8929\n\tSIOCGIFTXQLEN                        = 0x8942\n\tSIOCGIFVLAN                          = 0x8982\n\tSIOCGMIIPHY                          = 0x8947\n\tSIOCGMIIREG                          = 0x8948\n\tSIOCGPGRP                            = 0x40047309\n\tSIOCGPPPCSTATS                       = 0x89f2\n\tSIOCGPPPSTATS                        = 0x89f0\n\tSIOCGPPPVER                          = 0x89f1\n\tSIOCGRARP                            = 0x8961\n\tSIOCGSKNS                            = 0x894c\n\tSIOCGSTAMP                           = 0x8906\n\tSIOCGSTAMPNS                         = 0x8907\n\tSIOCINQ                              = 0x467f\n\tSIOCOUTQ                             = 0x7472\n\tSIOCOUTQNSD                          = 0x894b\n\tSIOCPROTOPRIVATE                     = 0x89e0\n\tSIOCRTMSG                            = 0x890d\n\tSIOCSARP                             = 0x8955\n\tSIOCSHWTSTAMP                        = 0x89b0\n\tSIOCSIFADDR                          = 0x8916\n\tSIOCSIFBR                            = 0x8941\n\tSIOCSIFBRDADDR                       = 0x891a\n\tSIOCSIFDSTADDR                       = 0x8918\n\tSIOCSIFENCAP                         = 0x8926\n\tSIOCSIFFLAGS                         = 0x8914\n\tSIOCSIFHWADDR                        = 0x8924\n\tSIOCSIFHWBROADCAST                   = 0x8937\n\tSIOCSIFLINK                          = 0x8911\n\tSIOCSIFMAP                           = 0x8971\n\tSIOCSIFMEM                           = 0x8920\n\tSIOCSIFMETRIC                        = 0x891e\n\tSIOCSIFMTU                           = 0x8922\n\tSIOCSIFNAME                          = 0x8923\n\tSIOCSIFNETMASK                       = 0x891c\n\tSIOCSIFPFLAGS                        = 0x8934\n\tSIOCSIFSLAVE                         = 0x8930\n\tSIOCSIFTXQLEN                        = 0x8943\n\tSIOCSIFVLAN                          = 0x8983\n\tSIOCSMIIREG                          = 0x8949\n\tSIOCSPGRP                            = 0x80047308\n\tSIOCSRARP                            = 0x8962\n\tSIOCWANDEV                           = 0x894a\n\tSMACK_MAGIC                          = 0x43415d53\n\tSMART_AUTOSAVE                       = 0xd2\n\tSMART_AUTO_OFFLINE                   = 0xdb\n\tSMART_DISABLE                        = 0xd9\n\tSMART_ENABLE                         = 0xd8\n\tSMART_HCYL_PASS                      = 0xc2\n\tSMART_IMMEDIATE_OFFLINE              = 0xd4\n\tSMART_LCYL_PASS                      = 0x4f\n\tSMART_READ_LOG_SECTOR                = 0xd5\n\tSMART_READ_THRESHOLDS                = 0xd1\n\tSMART_READ_VALUES                    = 0xd0\n\tSMART_SAVE                           = 0xd3\n\tSMART_STATUS                         = 0xda\n\tSMART_WRITE_LOG_SECTOR               = 0xd6\n\tSMART_WRITE_THRESHOLDS               = 0xd7\n\tSMB_SUPER_MAGIC                      = 0x517b\n\tSOCKFS_MAGIC                         = 0x534f434b\n\tSOCK_CLOEXEC                         = 0x80000\n\tSOCK_DCCP                            = 0x6\n\tSOCK_DGRAM                           = 0x1\n\tSOCK_IOC_TYPE                        = 0x89\n\tSOCK_NONBLOCK                        = 0x80\n\tSOCK_PACKET                          = 0xa\n\tSOCK_RAW                             = 0x3\n\tSOCK_RDM                             = 0x4\n\tSOCK_SEQPACKET                       = 0x5\n\tSOCK_STREAM                          = 0x2\n\tSOL_AAL                              = 0x109\n\tSOL_ALG                              = 0x117\n\tSOL_ATM                              = 0x108\n\tSOL_CAIF                             = 0x116\n\tSOL_CAN_BASE                         = 0x64\n\tSOL_DCCP                             = 0x10d\n\tSOL_DECNET                           = 0x105\n\tSOL_ICMPV6                           = 0x3a\n\tSOL_IP                               = 0x0\n\tSOL_IPV6                             = 0x29\n\tSOL_IRDA                             = 0x10a\n\tSOL_IUCV                             = 0x115\n\tSOL_KCM                              = 0x119\n\tSOL_LLC                              = 0x10c\n\tSOL_NETBEUI                          = 0x10b\n\tSOL_NETLINK                          = 0x10e\n\tSOL_NFC                              = 0x118\n\tSOL_PACKET                           = 0x107\n\tSOL_PNPIPE                           = 0x113\n\tSOL_PPPOL2TP                         = 0x111\n\tSOL_RAW                              = 0xff\n\tSOL_RDS                              = 0x114\n\tSOL_RXRPC                            = 0x110\n\tSOL_SOCKET                           = 0xffff\n\tSOL_TCP                              = 0x6\n\tSOL_TIPC                             = 0x10f\n\tSOL_TLS                              = 0x11a\n\tSOL_X25                              = 0x106\n\tSOL_XDP                              = 0x11b\n\tSOMAXCONN                            = 0x80\n\tSO_ACCEPTCONN                        = 0x1009\n\tSO_ATTACH_BPF                        = 0x32\n\tSO_ATTACH_FILTER                     = 0x1a\n\tSO_ATTACH_REUSEPORT_CBPF             = 0x33\n\tSO_ATTACH_REUSEPORT_EBPF             = 0x34\n\tSO_BINDTODEVICE                      = 0x19\n\tSO_BINDTOIFINDEX                     = 0x3e\n\tSO_BPF_EXTENSIONS                    = 0x30\n\tSO_BROADCAST                         = 0x20\n\tSO_BSDCOMPAT                         = 0xe\n\tSO_BUSY_POLL                         = 0x2e\n\tSO_CNX_ADVICE                        = 0x35\n\tSO_COOKIE                            = 0x39\n\tSO_DEBUG                             = 0x1\n\tSO_DETACH_BPF                        = 0x1b\n\tSO_DETACH_FILTER                     = 0x1b\n\tSO_DOMAIN                            = 0x1029\n\tSO_DONTROUTE                         = 0x10\n\tSO_EE_CODE_TXTIME_INVALID_PARAM      = 0x1\n\tSO_EE_CODE_TXTIME_MISSED             = 0x2\n\tSO_EE_CODE_ZEROCOPY_COPIED           = 0x1\n\tSO_EE_ORIGIN_ICMP                    = 0x2\n\tSO_EE_ORIGIN_ICMP6                   = 0x3\n\tSO_EE_ORIGIN_LOCAL                   = 0x1\n\tSO_EE_ORIGIN_NONE                    = 0x0\n\tSO_EE_ORIGIN_TIMESTAMPING            = 0x4\n\tSO_EE_ORIGIN_TXSTATUS                = 0x4\n\tSO_EE_ORIGIN_TXTIME                  = 0x6\n\tSO_EE_ORIGIN_ZEROCOPY                = 0x5\n\tSO_ERROR                             = 0x1007\n\tSO_GET_FILTER                        = 0x1a\n\tSO_INCOMING_CPU                      = 0x31\n\tSO_INCOMING_NAPI_ID                  = 0x38\n\tSO_KEEPALIVE                         = 0x8\n\tSO_LINGER                            = 0x80\n\tSO_LOCK_FILTER                       = 0x2c\n\tSO_MARK                              = 0x24\n\tSO_MAX_PACING_RATE                   = 0x2f\n\tSO_MEMINFO                           = 0x37\n\tSO_NOFCS                             = 0x2b\n\tSO_NO_CHECK                          = 0xb\n\tSO_OOBINLINE                         = 0x100\n\tSO_PASSCRED                          = 0x11\n\tSO_PASSSEC                           = 0x22\n\tSO_PEEK_OFF                          = 0x2a\n\tSO_PEERCRED                          = 0x12\n\tSO_PEERGROUPS                        = 0x3b\n\tSO_PEERNAME                          = 0x1c\n\tSO_PEERSEC                           = 0x1e\n\tSO_PRIORITY                          = 0xc\n\tSO_PROTOCOL                          = 0x1028\n\tSO_RCVBUF                            = 0x1002\n\tSO_RCVBUFFORCE                       = 0x21\n\tSO_RCVLOWAT                          = 0x1004\n\tSO_RCVTIMEO                          = 0x1006\n\tSO_RCVTIMEO_NEW                      = 0x42\n\tSO_RCVTIMEO_OLD                      = 0x1006\n\tSO_REUSEADDR                         = 0x4\n\tSO_REUSEPORT                         = 0x200\n\tSO_RXQ_OVFL                          = 0x28\n\tSO_SECURITY_AUTHENTICATION           = 0x16\n\tSO_SECURITY_ENCRYPTION_NETWORK       = 0x18\n\tSO_SECURITY_ENCRYPTION_TRANSPORT     = 0x17\n\tSO_SELECT_ERR_QUEUE                  = 0x2d\n\tSO_SNDBUF                            = 0x1001\n\tSO_SNDBUFFORCE                       = 0x1f\n\tSO_SNDLOWAT                          = 0x1003\n\tSO_SNDTIMEO                          = 0x1005\n\tSO_SNDTIMEO_NEW                      = 0x43\n\tSO_SNDTIMEO_OLD                      = 0x1005\n\tSO_STYLE                             = 0x1008\n\tSO_TIMESTAMP                         = 0x1d\n\tSO_TIMESTAMPING                      = 0x25\n\tSO_TIMESTAMPING_NEW                  = 0x41\n\tSO_TIMESTAMPING_OLD                  = 0x25\n\tSO_TIMESTAMPNS                       = 0x23\n\tSO_TIMESTAMPNS_NEW                   = 0x40\n\tSO_TIMESTAMPNS_OLD                   = 0x23\n\tSO_TIMESTAMP_NEW                     = 0x3f\n\tSO_TIMESTAMP_OLD                     = 0x1d\n\tSO_TXTIME                            = 0x3d\n\tSO_TYPE                              = 0x1008\n\tSO_VM_SOCKETS_BUFFER_MAX_SIZE        = 0x2\n\tSO_VM_SOCKETS_BUFFER_MIN_SIZE        = 0x1\n\tSO_VM_SOCKETS_BUFFER_SIZE            = 0x0\n\tSO_VM_SOCKETS_CONNECT_TIMEOUT        = 0x6\n\tSO_VM_SOCKETS_NONBLOCK_TXRX          = 0x7\n\tSO_VM_SOCKETS_PEER_HOST_VM_ID        = 0x3\n\tSO_VM_SOCKETS_TRUSTED                = 0x5\n\tSO_WIFI_STATUS                       = 0x29\n\tSO_ZEROCOPY                          = 0x3c\n\tSPLICE_F_GIFT                        = 0x8\n\tSPLICE_F_MORE                        = 0x4\n\tSPLICE_F_MOVE                        = 0x1\n\tSPLICE_F_NONBLOCK                    = 0x2\n\tSQUASHFS_MAGIC                       = 0x73717368\n\tSTACK_END_MAGIC                      = 0x57ac6e9d\n\tSTATX_ALL                            = 0xfff\n\tSTATX_ATIME                          = 0x20\n\tSTATX_ATTR_APPEND                    = 0x20\n\tSTATX_ATTR_AUTOMOUNT                 = 0x1000\n\tSTATX_ATTR_COMPRESSED                = 0x4\n\tSTATX_ATTR_ENCRYPTED                 = 0x800\n\tSTATX_ATTR_IMMUTABLE                 = 0x10\n\tSTATX_ATTR_NODUMP                    = 0x40\n\tSTATX_BASIC_STATS                    = 0x7ff\n\tSTATX_BLOCKS                         = 0x400\n\tSTATX_BTIME                          = 0x800\n\tSTATX_CTIME                          = 0x80\n\tSTATX_GID                            = 0x10\n\tSTATX_INO                            = 0x100\n\tSTATX_MODE                           = 0x2\n\tSTATX_MTIME                          = 0x40\n\tSTATX_NLINK                          = 0x4\n\tSTATX_SIZE                           = 0x200\n\tSTATX_TYPE                           = 0x1\n\tSTATX_UID                            = 0x8\n\tSTATX__RESERVED                      = 0x80000000\n\tSYNC_FILE_RANGE_WAIT_AFTER           = 0x4\n\tSYNC_FILE_RANGE_WAIT_BEFORE          = 0x1\n\tSYNC_FILE_RANGE_WRITE                = 0x2\n\tSYSFS_MAGIC                          = 0x62656572\n\tS_BLKSIZE                            = 0x200\n\tS_IEXEC                              = 0x40\n\tS_IFBLK                              = 0x6000\n\tS_IFCHR                              = 0x2000\n\tS_IFDIR                              = 0x4000\n\tS_IFIFO                              = 0x1000\n\tS_IFLNK                              = 0xa000\n\tS_IFMT                               = 0xf000\n\tS_IFREG                              = 0x8000\n\tS_IFSOCK                             = 0xc000\n\tS_IREAD                              = 0x100\n\tS_IRGRP                              = 0x20\n\tS_IROTH                              = 0x4\n\tS_IRUSR                              = 0x100\n\tS_IRWXG                              = 0x38\n\tS_IRWXO                              = 0x7\n\tS_IRWXU                              = 0x1c0\n\tS_ISGID                              = 0x400\n\tS_ISUID                              = 0x800\n\tS_ISVTX                              = 0x200\n\tS_IWGRP                              = 0x10\n\tS_IWOTH                              = 0x2\n\tS_IWRITE                             = 0x80\n\tS_IWUSR                              = 0x80\n\tS_IXGRP                              = 0x8\n\tS_IXOTH                              = 0x1\n\tS_IXUSR                              = 0x40\n\tTAB0                                 = 0x0\n\tTAB1                                 = 0x800\n\tTAB2                                 = 0x1000\n\tTAB3                                 = 0x1800\n\tTABDLY                               = 0x1800\n\tTASKSTATS_CMD_ATTR_MAX               = 0x4\n\tTASKSTATS_CMD_MAX                    = 0x2\n\tTASKSTATS_GENL_NAME                  = \"TASKSTATS\"\n\tTASKSTATS_GENL_VERSION               = 0x1\n\tTASKSTATS_TYPE_MAX                   = 0x6\n\tTASKSTATS_VERSION                    = 0x9\n\tTCFLSH                               = 0x5407\n\tTCGETA                               = 0x5401\n\tTCGETS                               = 0x540d\n\tTCGETS2                              = 0x4030542a\n\tTCIFLUSH                             = 0x0\n\tTCIOFF                               = 0x2\n\tTCIOFLUSH                            = 0x2\n\tTCION                                = 0x3\n\tTCOFLUSH                             = 0x1\n\tTCOOFF                               = 0x0\n\tTCOON                                = 0x1\n\tTCP_BPF_IW                           = 0x3e9\n\tTCP_BPF_SNDCWND_CLAMP                = 0x3ea\n\tTCP_CC_INFO                          = 0x1a\n\tTCP_CM_INQ                           = 0x24\n\tTCP_CONGESTION                       = 0xd\n\tTCP_COOKIE_IN_ALWAYS                 = 0x1\n\tTCP_COOKIE_MAX                       = 0x10\n\tTCP_COOKIE_MIN                       = 0x8\n\tTCP_COOKIE_OUT_NEVER                 = 0x2\n\tTCP_COOKIE_PAIR_SIZE                 = 0x20\n\tTCP_COOKIE_TRANSACTIONS              = 0xf\n\tTCP_CORK                             = 0x3\n\tTCP_DEFER_ACCEPT                     = 0x9\n\tTCP_FASTOPEN                         = 0x17\n\tTCP_FASTOPEN_CONNECT                 = 0x1e\n\tTCP_FASTOPEN_KEY                     = 0x21\n\tTCP_FASTOPEN_NO_COOKIE               = 0x22\n\tTCP_INFO                             = 0xb\n\tTCP_INQ                              = 0x24\n\tTCP_KEEPCNT                          = 0x6\n\tTCP_KEEPIDLE                         = 0x4\n\tTCP_KEEPINTVL                        = 0x5\n\tTCP_LINGER2                          = 0x8\n\tTCP_MAXSEG                           = 0x2\n\tTCP_MAXWIN                           = 0xffff\n\tTCP_MAX_WINSHIFT                     = 0xe\n\tTCP_MD5SIG                           = 0xe\n\tTCP_MD5SIG_EXT                       = 0x20\n\tTCP_MD5SIG_FLAG_PREFIX               = 0x1\n\tTCP_MD5SIG_MAXKEYLEN                 = 0x50\n\tTCP_MSS                              = 0x200\n\tTCP_MSS_DEFAULT                      = 0x218\n\tTCP_MSS_DESIRED                      = 0x4c4\n\tTCP_NODELAY                          = 0x1\n\tTCP_NOTSENT_LOWAT                    = 0x19\n\tTCP_QUEUE_SEQ                        = 0x15\n\tTCP_QUICKACK                         = 0xc\n\tTCP_REPAIR                           = 0x13\n\tTCP_REPAIR_OFF                       = 0x0\n\tTCP_REPAIR_OFF_NO_WP                 = -0x1\n\tTCP_REPAIR_ON                        = 0x1\n\tTCP_REPAIR_OPTIONS                   = 0x16\n\tTCP_REPAIR_QUEUE                     = 0x14\n\tTCP_REPAIR_WINDOW                    = 0x1d\n\tTCP_SAVED_SYN                        = 0x1c\n\tTCP_SAVE_SYN                         = 0x1b\n\tTCP_SYNCNT                           = 0x7\n\tTCP_S_DATA_IN                        = 0x4\n\tTCP_S_DATA_OUT                       = 0x8\n\tTCP_THIN_DUPACK                      = 0x11\n\tTCP_THIN_LINEAR_TIMEOUTS             = 0x10\n\tTCP_TIMESTAMP                        = 0x18\n\tTCP_ULP                              = 0x1f\n\tTCP_USER_TIMEOUT                     = 0x12\n\tTCP_WINDOW_CLAMP                     = 0xa\n\tTCP_ZEROCOPY_RECEIVE                 = 0x23\n\tTCSAFLUSH                            = 0x5410\n\tTCSBRK                               = 0x5405\n\tTCSBRKP                              = 0x5486\n\tTCSETA                               = 0x5402\n\tTCSETAF                              = 0x5404\n\tTCSETAW                              = 0x5403\n\tTCSETS                               = 0x540e\n\tTCSETS2                              = 0x8030542b\n\tTCSETSF                              = 0x5410\n\tTCSETSF2                             = 0x8030542d\n\tTCSETSW                              = 0x540f\n\tTCSETSW2                             = 0x8030542c\n\tTCXONC                               = 0x5406\n\tTIMER_ABSTIME                        = 0x1\n\tTIOCCBRK                             = 0x5428\n\tTIOCCONS                             = 0x80047478\n\tTIOCEXCL                             = 0x740d\n\tTIOCGDEV                             = 0x40045432\n\tTIOCGETD                             = 0x7400\n\tTIOCGETP                             = 0x7408\n\tTIOCGEXCL                            = 0x40045440\n\tTIOCGICOUNT                          = 0x5492\n\tTIOCGISO7816                         = 0x40285442\n\tTIOCGLCKTRMIOS                       = 0x548b\n\tTIOCGLTC                             = 0x7474\n\tTIOCGPGRP                            = 0x40047477\n\tTIOCGPKT                             = 0x40045438\n\tTIOCGPTLCK                           = 0x40045439\n\tTIOCGPTN                             = 0x40045430\n\tTIOCGPTPEER                          = 0x20005441\n\tTIOCGRS485                           = 0x4020542e\n\tTIOCGSERIAL                          = 0x5484\n\tTIOCGSID                             = 0x7416\n\tTIOCGSOFTCAR                         = 0x5481\n\tTIOCGWINSZ                           = 0x40087468\n\tTIOCINQ                              = 0x467f\n\tTIOCLINUX                            = 0x5483\n\tTIOCMBIC                             = 0x741c\n\tTIOCMBIS                             = 0x741b\n\tTIOCMGET                             = 0x741d\n\tTIOCMIWAIT                           = 0x5491\n\tTIOCMSET                             = 0x741a\n\tTIOCM_CAR                            = 0x100\n\tTIOCM_CD                             = 0x100\n\tTIOCM_CTS                            = 0x40\n\tTIOCM_DSR                            = 0x400\n\tTIOCM_DTR                            = 0x2\n\tTIOCM_LE                             = 0x1\n\tTIOCM_RI                             = 0x200\n\tTIOCM_RNG                            = 0x200\n\tTIOCM_RTS                            = 0x4\n\tTIOCM_SR                             = 0x20\n\tTIOCM_ST                             = 0x10\n\tTIOCNOTTY                            = 0x5471\n\tTIOCNXCL                             = 0x740e\n\tTIOCOUTQ                             = 0x7472\n\tTIOCPKT                              = 0x5470\n\tTIOCPKT_DATA                         = 0x0\n\tTIOCPKT_DOSTOP                       = 0x20\n\tTIOCPKT_FLUSHREAD                    = 0x1\n\tTIOCPKT_FLUSHWRITE                   = 0x2\n\tTIOCPKT_IOCTL                        = 0x40\n\tTIOCPKT_NOSTOP                       = 0x10\n\tTIOCPKT_START                        = 0x8\n\tTIOCPKT_STOP                         = 0x4\n\tTIOCSBRK                             = 0x5427\n\tTIOCSCTTY                            = 0x5480\n\tTIOCSERCONFIG                        = 0x5488\n\tTIOCSERGETLSR                        = 0x548e\n\tTIOCSERGETMULTI                      = 0x548f\n\tTIOCSERGSTRUCT                       = 0x548d\n\tTIOCSERGWILD                         = 0x5489\n\tTIOCSERSETMULTI                      = 0x5490\n\tTIOCSERSWILD                         = 0x548a\n\tTIOCSER_TEMT                         = 0x1\n\tTIOCSETD                             = 0x7401\n\tTIOCSETN                             = 0x740a\n\tTIOCSETP                             = 0x7409\n\tTIOCSIG                              = 0x80045436\n\tTIOCSISO7816                         = 0xc0285443\n\tTIOCSLCKTRMIOS                       = 0x548c\n\tTIOCSLTC                             = 0x7475\n\tTIOCSPGRP                            = 0x80047476\n\tTIOCSPTLCK                           = 0x80045431\n\tTIOCSRS485                           = 0xc020542f\n\tTIOCSSERIAL                          = 0x5485\n\tTIOCSSOFTCAR                         = 0x5482\n\tTIOCSTI                              = 0x5472\n\tTIOCSWINSZ                           = 0x80087467\n\tTIOCVHANGUP                          = 0x5437\n\tTMPFS_MAGIC                          = 0x1021994\n\tTOSTOP                               = 0x8000\n\tTPACKET_ALIGNMENT                    = 0x10\n\tTPACKET_HDRLEN                       = 0x34\n\tTP_STATUS_AVAILABLE                  = 0x0\n\tTP_STATUS_BLK_TMO                    = 0x20\n\tTP_STATUS_COPY                       = 0x2\n\tTP_STATUS_CSUMNOTREADY               = 0x8\n\tTP_STATUS_CSUM_VALID                 = 0x80\n\tTP_STATUS_KERNEL                     = 0x0\n\tTP_STATUS_LOSING                     = 0x4\n\tTP_STATUS_SENDING                    = 0x2\n\tTP_STATUS_SEND_REQUEST               = 0x1\n\tTP_STATUS_TS_RAW_HARDWARE            = -0x80000000\n\tTP_STATUS_TS_SOFTWARE                = 0x20000000\n\tTP_STATUS_TS_SYS_HARDWARE            = 0x40000000\n\tTP_STATUS_USER                       = 0x1\n\tTP_STATUS_VLAN_TPID_VALID            = 0x40\n\tTP_STATUS_VLAN_VALID                 = 0x10\n\tTP_STATUS_WRONG_FORMAT               = 0x4\n\tTRACEFS_MAGIC                        = 0x74726163\n\tTS_COMM_LEN                          = 0x20\n\tTUNATTACHFILTER                      = 0x801054d5\n\tTUNDETACHFILTER                      = 0x801054d6\n\tTUNGETFEATURES                       = 0x400454cf\n\tTUNGETFILTER                         = 0x401054db\n\tTUNGETIFF                            = 0x400454d2\n\tTUNGETSNDBUF                         = 0x400454d3\n\tTUNGETVNETBE                         = 0x400454df\n\tTUNGETVNETHDRSZ                      = 0x400454d7\n\tTUNGETVNETLE                         = 0x400454dd\n\tTUNSETCARRIER                        = 0x800454e2\n\tTUNSETDEBUG                          = 0x800454c9\n\tTUNSETFILTEREBPF                     = 0x400454e1\n\tTUNSETGROUP                          = 0x800454ce\n\tTUNSETIFF                            = 0x800454ca\n\tTUNSETIFINDEX                        = 0x800454da\n\tTUNSETLINK                           = 0x800454cd\n\tTUNSETNOCSUM                         = 0x800454c8\n\tTUNSETOFFLOAD                        = 0x800454d0\n\tTUNSETOWNER                          = 0x800454cc\n\tTUNSETPERSIST                        = 0x800454cb\n\tTUNSETQUEUE                          = 0x800454d9\n\tTUNSETSNDBUF                         = 0x800454d4\n\tTUNSETSTEERINGEBPF                   = 0x400454e0\n\tTUNSETTXFILTER                       = 0x800454d1\n\tTUNSETVNETBE                         = 0x800454de\n\tTUNSETVNETHDRSZ                      = 0x800454d8\n\tTUNSETVNETLE                         = 0x800454dc\n\tUBI_IOCATT                           = 0x80186f40\n\tUBI_IOCDET                           = 0x80046f41\n\tUBI_IOCEBCH                          = 0x80044f02\n\tUBI_IOCEBER                          = 0x80044f01\n\tUBI_IOCEBISMAP                       = 0x40044f05\n\tUBI_IOCEBMAP                         = 0x80084f03\n\tUBI_IOCEBUNMAP                       = 0x80044f04\n\tUBI_IOCMKVOL                         = 0x80986f00\n\tUBI_IOCRMVOL                         = 0x80046f01\n\tUBI_IOCRNVOL                         = 0x91106f03\n\tUBI_IOCRPEB                          = 0x80046f04\n\tUBI_IOCRSVOL                         = 0x800c6f02\n\tUBI_IOCSETVOLPROP                    = 0x80104f06\n\tUBI_IOCSPEB                          = 0x80046f05\n\tUBI_IOCVOLCRBLK                      = 0x80804f07\n\tUBI_IOCVOLRMBLK                      = 0x20004f08\n\tUBI_IOCVOLUP                         = 0x80084f00\n\tUDF_SUPER_MAGIC                      = 0x15013346\n\tUMOUNT_NOFOLLOW                      = 0x8\n\tUSBDEVICE_SUPER_MAGIC                = 0x9fa2\n\tUTIME_NOW                            = 0x3fffffff\n\tUTIME_OMIT                           = 0x3ffffffe\n\tV9FS_MAGIC                           = 0x1021997\n\tVDISCARD                             = 0xd\n\tVEOF                                 = 0x10\n\tVEOL                                 = 0x11\n\tVEOL2                                = 0x6\n\tVERASE                               = 0x2\n\tVINTR                                = 0x0\n\tVKILL                                = 0x3\n\tVLNEXT                               = 0xf\n\tVMADDR_CID_ANY                       = 0xffffffff\n\tVMADDR_CID_HOST                      = 0x2\n\tVMADDR_CID_HYPERVISOR                = 0x0\n\tVMADDR_CID_RESERVED                  = 0x1\n\tVMADDR_PORT_ANY                      = 0xffffffff\n\tVMIN                                 = 0x4\n\tVM_SOCKETS_INVALID_VERSION           = 0xffffffff\n\tVQUIT                                = 0x1\n\tVREPRINT                             = 0xc\n\tVSTART                               = 0x8\n\tVSTOP                                = 0x9\n\tVSUSP                                = 0xa\n\tVSWTC                                = 0x7\n\tVSWTCH                               = 0x7\n\tVT0                                  = 0x0\n\tVT1                                  = 0x4000\n\tVTDLY                                = 0x4000\n\tVTIME                                = 0x5\n\tVWERASE                              = 0xe\n\tWALL                                 = 0x40000000\n\tWCLONE                               = 0x80000000\n\tWCONTINUED                           = 0x8\n\tWDIOC_GETBOOTSTATUS                  = 0x40045702\n\tWDIOC_GETPRETIMEOUT                  = 0x40045709\n\tWDIOC_GETSTATUS                      = 0x40045701\n\tWDIOC_GETSUPPORT                     = 0x40285700\n\tWDIOC_GETTEMP                        = 0x40045703\n\tWDIOC_GETTIMELEFT                    = 0x4004570a\n\tWDIOC_GETTIMEOUT                     = 0x40045707\n\tWDIOC_KEEPALIVE                      = 0x40045705\n\tWDIOC_SETOPTIONS                     = 0x40045704\n\tWDIOC_SETPRETIMEOUT                  = 0xc0045708\n\tWDIOC_SETTIMEOUT                     = 0xc0045706\n\tWEXITED                              = 0x4\n\tWIN_ACKMEDIACHANGE                   = 0xdb\n\tWIN_CHECKPOWERMODE1                  = 0xe5\n\tWIN_CHECKPOWERMODE2                  = 0x98\n\tWIN_DEVICE_RESET                     = 0x8\n\tWIN_DIAGNOSE                         = 0x90\n\tWIN_DOORLOCK                         = 0xde\n\tWIN_DOORUNLOCK                       = 0xdf\n\tWIN_DOWNLOAD_MICROCODE               = 0x92\n\tWIN_FLUSH_CACHE                      = 0xe7\n\tWIN_FLUSH_CACHE_EXT                  = 0xea\n\tWIN_FORMAT                           = 0x50\n\tWIN_GETMEDIASTATUS                   = 0xda\n\tWIN_IDENTIFY                         = 0xec\n\tWIN_IDENTIFY_DMA                     = 0xee\n\tWIN_IDLEIMMEDIATE                    = 0xe1\n\tWIN_INIT                             = 0x60\n\tWIN_MEDIAEJECT                       = 0xed\n\tWIN_MULTREAD                         = 0xc4\n\tWIN_MULTREAD_EXT                     = 0x29\n\tWIN_MULTWRITE                        = 0xc5\n\tWIN_MULTWRITE_EXT                    = 0x39\n\tWIN_NOP                              = 0x0\n\tWIN_PACKETCMD                        = 0xa0\n\tWIN_PIDENTIFY                        = 0xa1\n\tWIN_POSTBOOT                         = 0xdc\n\tWIN_PREBOOT                          = 0xdd\n\tWIN_QUEUED_SERVICE                   = 0xa2\n\tWIN_READ                             = 0x20\n\tWIN_READDMA                          = 0xc8\n\tWIN_READDMA_EXT                      = 0x25\n\tWIN_READDMA_ONCE                     = 0xc9\n\tWIN_READDMA_QUEUED                   = 0xc7\n\tWIN_READDMA_QUEUED_EXT               = 0x26\n\tWIN_READ_BUFFER                      = 0xe4\n\tWIN_READ_EXT                         = 0x24\n\tWIN_READ_LONG                        = 0x22\n\tWIN_READ_LONG_ONCE                   = 0x23\n\tWIN_READ_NATIVE_MAX                  = 0xf8\n\tWIN_READ_NATIVE_MAX_EXT              = 0x27\n\tWIN_READ_ONCE                        = 0x21\n\tWIN_RECAL                            = 0x10\n\tWIN_RESTORE                          = 0x10\n\tWIN_SECURITY_DISABLE                 = 0xf6\n\tWIN_SECURITY_ERASE_PREPARE           = 0xf3\n\tWIN_SECURITY_ERASE_UNIT              = 0xf4\n\tWIN_SECURITY_FREEZE_LOCK             = 0xf5\n\tWIN_SECURITY_SET_PASS                = 0xf1\n\tWIN_SECURITY_UNLOCK                  = 0xf2\n\tWIN_SEEK                             = 0x70\n\tWIN_SETFEATURES                      = 0xef\n\tWIN_SETIDLE1                         = 0xe3\n\tWIN_SETIDLE2                         = 0x97\n\tWIN_SETMULT                          = 0xc6\n\tWIN_SET_MAX                          = 0xf9\n\tWIN_SET_MAX_EXT                      = 0x37\n\tWIN_SLEEPNOW1                        = 0xe6\n\tWIN_SLEEPNOW2                        = 0x99\n\tWIN_SMART                            = 0xb0\n\tWIN_SPECIFY                          = 0x91\n\tWIN_SRST                             = 0x8\n\tWIN_STANDBY                          = 0xe2\n\tWIN_STANDBY2                         = 0x96\n\tWIN_STANDBYNOW1                      = 0xe0\n\tWIN_STANDBYNOW2                      = 0x94\n\tWIN_VERIFY                           = 0x40\n\tWIN_VERIFY_EXT                       = 0x42\n\tWIN_VERIFY_ONCE                      = 0x41\n\tWIN_WRITE                            = 0x30\n\tWIN_WRITEDMA                         = 0xca\n\tWIN_WRITEDMA_EXT                     = 0x35\n\tWIN_WRITEDMA_ONCE                    = 0xcb\n\tWIN_WRITEDMA_QUEUED                  = 0xcc\n\tWIN_WRITEDMA_QUEUED_EXT              = 0x36\n\tWIN_WRITE_BUFFER                     = 0xe8\n\tWIN_WRITE_EXT                        = 0x34\n\tWIN_WRITE_LONG                       = 0x32\n\tWIN_WRITE_LONG_ONCE                  = 0x33\n\tWIN_WRITE_ONCE                       = 0x31\n\tWIN_WRITE_SAME                       = 0xe9\n\tWIN_WRITE_VERIFY                     = 0x3c\n\tWNOHANG                              = 0x1\n\tWNOTHREAD                            = 0x20000000\n\tWNOWAIT                              = 0x1000000\n\tWORDSIZE                             = 0x40\n\tWSTOPPED                             = 0x2\n\tWUNTRACED                            = 0x2\n\tXATTR_CREATE                         = 0x1\n\tXATTR_REPLACE                        = 0x2\n\tXCASE                                = 0x4\n\tXDP_COPY                             = 0x2\n\tXDP_FLAGS_DRV_MODE                   = 0x4\n\tXDP_FLAGS_HW_MODE                    = 0x8\n\tXDP_FLAGS_MASK                       = 0xf\n\tXDP_FLAGS_MODES                      = 0xe\n\tXDP_FLAGS_SKB_MODE                   = 0x2\n\tXDP_FLAGS_UPDATE_IF_NOEXIST          = 0x1\n\tXDP_MMAP_OFFSETS                     = 0x1\n\tXDP_PACKET_HEADROOM                  = 0x100\n\tXDP_PGOFF_RX_RING                    = 0x0\n\tXDP_PGOFF_TX_RING                    = 0x80000000\n\tXDP_RX_RING                          = 0x2\n\tXDP_SHARED_UMEM                      = 0x1\n\tXDP_STATISTICS                       = 0x7\n\tXDP_TX_RING                          = 0x3\n\tXDP_UMEM_COMPLETION_RING             = 0x6\n\tXDP_UMEM_FILL_RING                   = 0x5\n\tXDP_UMEM_PGOFF_COMPLETION_RING       = 0x180000000\n\tXDP_UMEM_PGOFF_FILL_RING             = 0x100000000\n\tXDP_UMEM_REG                         = 0x4\n\tXDP_ZEROCOPY                         = 0x4\n\tXENFS_SUPER_MAGIC                    = 0xabba1974\n\tXFS_SUPER_MAGIC                      = 0x58465342\n\tXTABS                                = 0x1800\n\tZSMALLOC_MAGIC                       = 0x58295829\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x7d)\n\tEADDRNOTAVAIL   = syscall.Errno(0x7e)\n\tEADV            = syscall.Errno(0x44)\n\tEAFNOSUPPORT    = syscall.Errno(0x7c)\n\tEAGAIN          = syscall.Errno(0xb)\n\tEALREADY        = syscall.Errno(0x95)\n\tEBADE           = syscall.Errno(0x32)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADFD          = syscall.Errno(0x51)\n\tEBADMSG         = syscall.Errno(0x4d)\n\tEBADR           = syscall.Errno(0x33)\n\tEBADRQC         = syscall.Errno(0x36)\n\tEBADSLT         = syscall.Errno(0x37)\n\tEBFONT          = syscall.Errno(0x3b)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x9e)\n\tECHILD          = syscall.Errno(0xa)\n\tECHRNG          = syscall.Errno(0x25)\n\tECOMM           = syscall.Errno(0x46)\n\tECONNABORTED    = syscall.Errno(0x82)\n\tECONNREFUSED    = syscall.Errno(0x92)\n\tECONNRESET      = syscall.Errno(0x83)\n\tEDEADLK         = syscall.Errno(0x2d)\n\tEDEADLOCK       = syscall.Errno(0x38)\n\tEDESTADDRREQ    = syscall.Errno(0x60)\n\tEDOM            = syscall.Errno(0x21)\n\tEDOTDOT         = syscall.Errno(0x49)\n\tEDQUOT          = syscall.Errno(0x46d)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEHOSTDOWN       = syscall.Errno(0x93)\n\tEHOSTUNREACH    = syscall.Errno(0x94)\n\tEHWPOISON       = syscall.Errno(0xa8)\n\tEIDRM           = syscall.Errno(0x24)\n\tEILSEQ          = syscall.Errno(0x58)\n\tEINIT           = syscall.Errno(0x8d)\n\tEINPROGRESS     = syscall.Errno(0x96)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEISCONN         = syscall.Errno(0x85)\n\tEISDIR          = syscall.Errno(0x15)\n\tEISNAM          = syscall.Errno(0x8b)\n\tEKEYEXPIRED     = syscall.Errno(0xa2)\n\tEKEYREJECTED    = syscall.Errno(0xa4)\n\tEKEYREVOKED     = syscall.Errno(0xa3)\n\tEL2HLT          = syscall.Errno(0x2c)\n\tEL2NSYNC        = syscall.Errno(0x26)\n\tEL3HLT          = syscall.Errno(0x27)\n\tEL3RST          = syscall.Errno(0x28)\n\tELIBACC         = syscall.Errno(0x53)\n\tELIBBAD         = syscall.Errno(0x54)\n\tELIBEXEC        = syscall.Errno(0x57)\n\tELIBMAX         = syscall.Errno(0x56)\n\tELIBSCN         = syscall.Errno(0x55)\n\tELNRNG          = syscall.Errno(0x29)\n\tELOOP           = syscall.Errno(0x5a)\n\tEMEDIUMTYPE     = syscall.Errno(0xa0)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x61)\n\tEMULTIHOP       = syscall.Errno(0x4a)\n\tENAMETOOLONG    = syscall.Errno(0x4e)\n\tENAVAIL         = syscall.Errno(0x8a)\n\tENETDOWN        = syscall.Errno(0x7f)\n\tENETRESET       = syscall.Errno(0x81)\n\tENETUNREACH     = syscall.Errno(0x80)\n\tENFILE          = syscall.Errno(0x17)\n\tENOANO          = syscall.Errno(0x35)\n\tENOBUFS         = syscall.Errno(0x84)\n\tENOCSI          = syscall.Errno(0x2b)\n\tENODATA         = syscall.Errno(0x3d)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOKEY          = syscall.Errno(0xa1)\n\tENOLCK          = syscall.Errno(0x2e)\n\tENOLINK         = syscall.Errno(0x43)\n\tENOMEDIUM       = syscall.Errno(0x9f)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x23)\n\tENONET          = syscall.Errno(0x40)\n\tENOPKG          = syscall.Errno(0x41)\n\tENOPROTOOPT     = syscall.Errno(0x63)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSR           = syscall.Errno(0x3f)\n\tENOSTR          = syscall.Errno(0x3c)\n\tENOSYS          = syscall.Errno(0x59)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x86)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x5d)\n\tENOTNAM         = syscall.Errno(0x89)\n\tENOTRECOVERABLE = syscall.Errno(0xa6)\n\tENOTSOCK        = syscall.Errno(0x5f)\n\tENOTSUP         = syscall.Errno(0x7a)\n\tENOTTY          = syscall.Errno(0x19)\n\tENOTUNIQ        = syscall.Errno(0x50)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x7a)\n\tEOVERFLOW       = syscall.Errno(0x4f)\n\tEOWNERDEAD      = syscall.Errno(0xa5)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x7b)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROTO          = syscall.Errno(0x47)\n\tEPROTONOSUPPORT = syscall.Errno(0x78)\n\tEPROTOTYPE      = syscall.Errno(0x62)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMCHG         = syscall.Errno(0x52)\n\tEREMDEV         = syscall.Errno(0x8e)\n\tEREMOTE         = syscall.Errno(0x42)\n\tEREMOTEIO       = syscall.Errno(0x8c)\n\tERESTART        = syscall.Errno(0x5b)\n\tERFKILL         = syscall.Errno(0xa7)\n\tEROFS           = syscall.Errno(0x1e)\n\tESHUTDOWN       = syscall.Errno(0x8f)\n\tESOCKTNOSUPPORT = syscall.Errno(0x79)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESRMNT          = syscall.Errno(0x45)\n\tESTALE          = syscall.Errno(0x97)\n\tESTRPIPE        = syscall.Errno(0x5c)\n\tETIME           = syscall.Errno(0x3e)\n\tETIMEDOUT       = syscall.Errno(0x91)\n\tETOOMANYREFS    = syscall.Errno(0x90)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUCLEAN         = syscall.Errno(0x87)\n\tEUNATCH         = syscall.Errno(0x2a)\n\tEUSERS          = syscall.Errno(0x5e)\n\tEWOULDBLOCK     = syscall.Errno(0xb)\n\tEXDEV           = syscall.Errno(0x12)\n\tEXFULL          = syscall.Errno(0x34)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x12)\n\tSIGCLD    = syscall.Signal(0x12)\n\tSIGCONT   = syscall.Signal(0x19)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x16)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPOLL   = syscall.Signal(0x16)\n\tSIGPROF   = syscall.Signal(0x1d)\n\tSIGPWR    = syscall.Signal(0x13)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTOP   = syscall.Signal(0x17)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x18)\n\tSIGTTIN   = syscall.Signal(0x1a)\n\tSIGTTOU   = syscall.Signal(0x1b)\n\tSIGURG    = syscall.Signal(0x15)\n\tSIGUSR1   = syscall.Signal(0x10)\n\tSIGUSR2   = syscall.Signal(0x11)\n\tSIGVTALRM = syscall.Signal(0x1c)\n\tSIGWINCH  = syscall.Signal(0x14)\n\tSIGXCPU   = syscall.Signal(0x1e)\n\tSIGXFSZ   = syscall.Signal(0x1f)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"no such device or address\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device or resource busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"invalid cross-device link\"},\n\t{19, \"ENODEV\", \"no such device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"numerical result out of range\"},\n\t{35, \"ENOMSG\", \"no message of desired type\"},\n\t{36, \"EIDRM\", \"identifier removed\"},\n\t{37, \"ECHRNG\", \"channel number out of range\"},\n\t{38, \"EL2NSYNC\", \"level 2 not synchronized\"},\n\t{39, \"EL3HLT\", \"level 3 halted\"},\n\t{40, \"EL3RST\", \"level 3 reset\"},\n\t{41, \"ELNRNG\", \"link number out of range\"},\n\t{42, \"EUNATCH\", \"protocol driver not attached\"},\n\t{43, \"ENOCSI\", \"no CSI structure available\"},\n\t{44, \"EL2HLT\", \"level 2 halted\"},\n\t{45, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{46, \"ENOLCK\", \"no locks available\"},\n\t{50, \"EBADE\", \"invalid exchange\"},\n\t{51, \"EBADR\", \"invalid request descriptor\"},\n\t{52, \"EXFULL\", \"exchange full\"},\n\t{53, \"ENOANO\", \"no anode\"},\n\t{54, \"EBADRQC\", \"invalid request code\"},\n\t{55, \"EBADSLT\", \"invalid slot\"},\n\t{56, \"EDEADLOCK\", \"file locking deadlock error\"},\n\t{59, \"EBFONT\", \"bad font file format\"},\n\t{60, \"ENOSTR\", \"device not a stream\"},\n\t{61, \"ENODATA\", \"no data available\"},\n\t{62, \"ETIME\", \"timer expired\"},\n\t{63, \"ENOSR\", \"out of streams resources\"},\n\t{64, \"ENONET\", \"machine is not on the network\"},\n\t{65, \"ENOPKG\", \"package not installed\"},\n\t{66, \"EREMOTE\", \"object is remote\"},\n\t{67, \"ENOLINK\", \"link has been severed\"},\n\t{68, \"EADV\", \"advertise error\"},\n\t{69, \"ESRMNT\", \"srmount error\"},\n\t{70, \"ECOMM\", \"communication error on send\"},\n\t{71, \"EPROTO\", \"protocol error\"},\n\t{73, \"EDOTDOT\", \"RFS specific error\"},\n\t{74, \"EMULTIHOP\", \"multihop attempted\"},\n\t{77, \"EBADMSG\", \"bad message\"},\n\t{78, \"ENAMETOOLONG\", \"file name too long\"},\n\t{79, \"EOVERFLOW\", \"value too large for defined data type\"},\n\t{80, \"ENOTUNIQ\", \"name not unique on network\"},\n\t{81, \"EBADFD\", \"file descriptor in bad state\"},\n\t{82, \"EREMCHG\", \"remote address changed\"},\n\t{83, \"ELIBACC\", \"can not access a needed shared library\"},\n\t{84, \"ELIBBAD\", \"accessing a corrupted shared library\"},\n\t{85, \"ELIBSCN\", \".lib section in a.out corrupted\"},\n\t{86, \"ELIBMAX\", \"attempting to link in too many shared libraries\"},\n\t{87, \"ELIBEXEC\", \"cannot exec a shared library directly\"},\n\t{88, \"EILSEQ\", \"invalid or incomplete multibyte or wide character\"},\n\t{89, \"ENOSYS\", \"function not implemented\"},\n\t{90, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{91, \"ERESTART\", \"interrupted system call should be restarted\"},\n\t{92, \"ESTRPIPE\", \"streams pipe error\"},\n\t{93, \"ENOTEMPTY\", \"directory not empty\"},\n\t{94, \"EUSERS\", \"too many users\"},\n\t{95, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{96, \"EDESTADDRREQ\", \"destination address required\"},\n\t{97, \"EMSGSIZE\", \"message too long\"},\n\t{98, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{99, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{120, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{121, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{122, \"ENOTSUP\", \"operation not supported\"},\n\t{123, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{124, \"EAFNOSUPPORT\", \"address family not supported by protocol\"},\n\t{125, \"EADDRINUSE\", \"address already in use\"},\n\t{126, \"EADDRNOTAVAIL\", \"cannot assign requested address\"},\n\t{127, \"ENETDOWN\", \"network is down\"},\n\t{128, \"ENETUNREACH\", \"network is unreachable\"},\n\t{129, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{130, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{131, \"ECONNRESET\", \"connection reset by peer\"},\n\t{132, \"ENOBUFS\", \"no buffer space available\"},\n\t{133, \"EISCONN\", \"transport endpoint is already connected\"},\n\t{134, \"ENOTCONN\", \"transport endpoint is not connected\"},\n\t{135, \"EUCLEAN\", \"structure needs cleaning\"},\n\t{137, \"ENOTNAM\", \"not a XENIX named type file\"},\n\t{138, \"ENAVAIL\", \"no XENIX semaphores available\"},\n\t{139, \"EISNAM\", \"is a named type file\"},\n\t{140, \"EREMOTEIO\", \"remote I/O error\"},\n\t{141, \"EINIT\", \"unknown error 141\"},\n\t{142, \"EREMDEV\", \"unknown error 142\"},\n\t{143, \"ESHUTDOWN\", \"cannot send after transport endpoint shutdown\"},\n\t{144, \"ETOOMANYREFS\", \"too many references: cannot splice\"},\n\t{145, \"ETIMEDOUT\", \"connection timed out\"},\n\t{146, \"ECONNREFUSED\", \"connection refused\"},\n\t{147, \"EHOSTDOWN\", \"host is down\"},\n\t{148, \"EHOSTUNREACH\", \"no route to host\"},\n\t{149, \"EALREADY\", \"operation already in progress\"},\n\t{150, \"EINPROGRESS\", \"operation now in progress\"},\n\t{151, \"ESTALE\", \"stale file handle\"},\n\t{158, \"ECANCELED\", \"operation canceled\"},\n\t{159, \"ENOMEDIUM\", \"no medium found\"},\n\t{160, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{161, \"ENOKEY\", \"required key not available\"},\n\t{162, \"EKEYEXPIRED\", \"key has expired\"},\n\t{163, \"EKEYREVOKED\", \"key has been revoked\"},\n\t{164, \"EKEYREJECTED\", \"key was rejected by service\"},\n\t{165, \"EOWNERDEAD\", \"owner died\"},\n\t{166, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{167, \"ERFKILL\", \"operation not possible due to RF-kill\"},\n\t{168, \"EHWPOISON\", \"memory page has hardware error\"},\n\t{1133, \"EDQUOT\", \"disk quota exceeded\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/breakpoint trap\"},\n\t{6, \"SIGABRT\", \"aborted\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGUSR1\", \"user defined signal 1\"},\n\t{17, \"SIGUSR2\", \"user defined signal 2\"},\n\t{18, \"SIGCHLD\", \"child exited\"},\n\t{19, \"SIGPWR\", \"power failure\"},\n\t{20, \"SIGWINCH\", \"window changed\"},\n\t{21, \"SIGURG\", \"urgent I/O condition\"},\n\t{22, \"SIGIO\", \"I/O possible\"},\n\t{23, \"SIGSTOP\", \"stopped (signal)\"},\n\t{24, \"SIGTSTP\", \"stopped\"},\n\t{25, \"SIGCONT\", \"continued\"},\n\t{26, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{27, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{28, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{29, \"SIGPROF\", \"profiling timer expired\"},\n\t{30, \"SIGXCPU\", \"CPU time limit exceeded\"},\n\t{31, \"SIGXFSZ\", \"file size limit exceeded\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go",
    "content": "// mkerrors.sh -Wall -Werror -static -I/tmp/include\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build mipsle,linux\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAAFS_MAGIC                           = 0x5a3c69f0\n\tADFS_SUPER_MAGIC                     = 0xadf5\n\tAFFS_SUPER_MAGIC                     = 0xadff\n\tAFS_FS_MAGIC                         = 0x6b414653\n\tAFS_SUPER_MAGIC                      = 0x5346414f\n\tAF_ALG                               = 0x26\n\tAF_APPLETALK                         = 0x5\n\tAF_ASH                               = 0x12\n\tAF_ATMPVC                            = 0x8\n\tAF_ATMSVC                            = 0x14\n\tAF_AX25                              = 0x3\n\tAF_BLUETOOTH                         = 0x1f\n\tAF_BRIDGE                            = 0x7\n\tAF_CAIF                              = 0x25\n\tAF_CAN                               = 0x1d\n\tAF_DECnet                            = 0xc\n\tAF_ECONET                            = 0x13\n\tAF_FILE                              = 0x1\n\tAF_IB                                = 0x1b\n\tAF_IEEE802154                        = 0x24\n\tAF_INET                              = 0x2\n\tAF_INET6                             = 0xa\n\tAF_IPX                               = 0x4\n\tAF_IRDA                              = 0x17\n\tAF_ISDN                              = 0x22\n\tAF_IUCV                              = 0x20\n\tAF_KCM                               = 0x29\n\tAF_KEY                               = 0xf\n\tAF_LLC                               = 0x1a\n\tAF_LOCAL                             = 0x1\n\tAF_MAX                               = 0x2d\n\tAF_MPLS                              = 0x1c\n\tAF_NETBEUI                           = 0xd\n\tAF_NETLINK                           = 0x10\n\tAF_NETROM                            = 0x6\n\tAF_NFC                               = 0x27\n\tAF_PACKET                            = 0x11\n\tAF_PHONET                            = 0x23\n\tAF_PPPOX                             = 0x18\n\tAF_QIPCRTR                           = 0x2a\n\tAF_RDS                               = 0x15\n\tAF_ROSE                              = 0xb\n\tAF_ROUTE                             = 0x10\n\tAF_RXRPC                             = 0x21\n\tAF_SECURITY                          = 0xe\n\tAF_SMC                               = 0x2b\n\tAF_SNA                               = 0x16\n\tAF_TIPC                              = 0x1e\n\tAF_UNIX                              = 0x1\n\tAF_UNSPEC                            = 0x0\n\tAF_VSOCK                             = 0x28\n\tAF_WANPIPE                           = 0x19\n\tAF_X25                               = 0x9\n\tAF_XDP                               = 0x2c\n\tALG_OP_DECRYPT                       = 0x0\n\tALG_OP_ENCRYPT                       = 0x1\n\tALG_SET_AEAD_ASSOCLEN                = 0x4\n\tALG_SET_AEAD_AUTHSIZE                = 0x5\n\tALG_SET_IV                           = 0x2\n\tALG_SET_KEY                          = 0x1\n\tALG_SET_OP                           = 0x3\n\tANON_INODE_FS_MAGIC                  = 0x9041934\n\tARPHRD_6LOWPAN                       = 0x339\n\tARPHRD_ADAPT                         = 0x108\n\tARPHRD_APPLETLK                      = 0x8\n\tARPHRD_ARCNET                        = 0x7\n\tARPHRD_ASH                           = 0x30d\n\tARPHRD_ATM                           = 0x13\n\tARPHRD_AX25                          = 0x3\n\tARPHRD_BIF                           = 0x307\n\tARPHRD_CAIF                          = 0x336\n\tARPHRD_CAN                           = 0x118\n\tARPHRD_CHAOS                         = 0x5\n\tARPHRD_CISCO                         = 0x201\n\tARPHRD_CSLIP                         = 0x101\n\tARPHRD_CSLIP6                        = 0x103\n\tARPHRD_DDCMP                         = 0x205\n\tARPHRD_DLCI                          = 0xf\n\tARPHRD_ECONET                        = 0x30e\n\tARPHRD_EETHER                        = 0x2\n\tARPHRD_ETHER                         = 0x1\n\tARPHRD_EUI64                         = 0x1b\n\tARPHRD_FCAL                          = 0x311\n\tARPHRD_FCFABRIC                      = 0x313\n\tARPHRD_FCPL                          = 0x312\n\tARPHRD_FCPP                          = 0x310\n\tARPHRD_FDDI                          = 0x306\n\tARPHRD_FRAD                          = 0x302\n\tARPHRD_HDLC                          = 0x201\n\tARPHRD_HIPPI                         = 0x30c\n\tARPHRD_HWX25                         = 0x110\n\tARPHRD_IEEE1394                      = 0x18\n\tARPHRD_IEEE802                       = 0x6\n\tARPHRD_IEEE80211                     = 0x321\n\tARPHRD_IEEE80211_PRISM               = 0x322\n\tARPHRD_IEEE80211_RADIOTAP            = 0x323\n\tARPHRD_IEEE802154                    = 0x324\n\tARPHRD_IEEE802154_MONITOR            = 0x325\n\tARPHRD_IEEE802_TR                    = 0x320\n\tARPHRD_INFINIBAND                    = 0x20\n\tARPHRD_IP6GRE                        = 0x337\n\tARPHRD_IPDDP                         = 0x309\n\tARPHRD_IPGRE                         = 0x30a\n\tARPHRD_IRDA                          = 0x30f\n\tARPHRD_LAPB                          = 0x204\n\tARPHRD_LOCALTLK                      = 0x305\n\tARPHRD_LOOPBACK                      = 0x304\n\tARPHRD_METRICOM                      = 0x17\n\tARPHRD_NETLINK                       = 0x338\n\tARPHRD_NETROM                        = 0x0\n\tARPHRD_NONE                          = 0xfffe\n\tARPHRD_PHONET                        = 0x334\n\tARPHRD_PHONET_PIPE                   = 0x335\n\tARPHRD_PIMREG                        = 0x30b\n\tARPHRD_PPP                           = 0x200\n\tARPHRD_PRONET                        = 0x4\n\tARPHRD_RAWHDLC                       = 0x206\n\tARPHRD_RAWIP                         = 0x207\n\tARPHRD_ROSE                          = 0x10e\n\tARPHRD_RSRVD                         = 0x104\n\tARPHRD_SIT                           = 0x308\n\tARPHRD_SKIP                          = 0x303\n\tARPHRD_SLIP                          = 0x100\n\tARPHRD_SLIP6                         = 0x102\n\tARPHRD_TUNNEL                        = 0x300\n\tARPHRD_TUNNEL6                       = 0x301\n\tARPHRD_VOID                          = 0xffff\n\tARPHRD_VSOCKMON                      = 0x33a\n\tARPHRD_X25                           = 0x10f\n\tAUTOFS_SUPER_MAGIC                   = 0x187\n\tB0                                   = 0x0\n\tB1000000                             = 0x1008\n\tB110                                 = 0x3\n\tB115200                              = 0x1002\n\tB1152000                             = 0x1009\n\tB1200                                = 0x9\n\tB134                                 = 0x4\n\tB150                                 = 0x5\n\tB1500000                             = 0x100a\n\tB1800                                = 0xa\n\tB19200                               = 0xe\n\tB200                                 = 0x6\n\tB2000000                             = 0x100b\n\tB230400                              = 0x1003\n\tB2400                                = 0xb\n\tB2500000                             = 0x100c\n\tB300                                 = 0x7\n\tB3000000                             = 0x100d\n\tB3500000                             = 0x100e\n\tB38400                               = 0xf\n\tB4000000                             = 0x100f\n\tB460800                              = 0x1004\n\tB4800                                = 0xc\n\tB50                                  = 0x1\n\tB500000                              = 0x1005\n\tB57600                               = 0x1001\n\tB576000                              = 0x1006\n\tB600                                 = 0x8\n\tB75                                  = 0x2\n\tB921600                              = 0x1007\n\tB9600                                = 0xd\n\tBALLOON_KVM_MAGIC                    = 0x13661366\n\tBDEVFS_MAGIC                         = 0x62646576\n\tBINDERFS_SUPER_MAGIC                 = 0x6c6f6f70\n\tBINFMTFS_MAGIC                       = 0x42494e4d\n\tBLKBSZGET                            = 0x40041270\n\tBLKBSZSET                            = 0x80041271\n\tBLKFLSBUF                            = 0x20001261\n\tBLKFRAGET                            = 0x20001265\n\tBLKFRASET                            = 0x20001264\n\tBLKGETSIZE                           = 0x20001260\n\tBLKGETSIZE64                         = 0x40041272\n\tBLKPBSZGET                           = 0x2000127b\n\tBLKRAGET                             = 0x20001263\n\tBLKRASET                             = 0x20001262\n\tBLKROGET                             = 0x2000125e\n\tBLKROSET                             = 0x2000125d\n\tBLKRRPART                            = 0x2000125f\n\tBLKSECTGET                           = 0x20001267\n\tBLKSECTSET                           = 0x20001266\n\tBLKSSZGET                            = 0x20001268\n\tBOTHER                               = 0x1000\n\tBPF_A                                = 0x10\n\tBPF_ABS                              = 0x20\n\tBPF_ADD                              = 0x0\n\tBPF_ALU                              = 0x4\n\tBPF_ALU64                            = 0x7\n\tBPF_AND                              = 0x50\n\tBPF_ANY                              = 0x0\n\tBPF_ARSH                             = 0xc0\n\tBPF_B                                = 0x10\n\tBPF_BUILD_ID_SIZE                    = 0x14\n\tBPF_CALL                             = 0x80\n\tBPF_DEVCG_ACC_MKNOD                  = 0x1\n\tBPF_DEVCG_ACC_READ                   = 0x2\n\tBPF_DEVCG_ACC_WRITE                  = 0x4\n\tBPF_DEVCG_DEV_BLOCK                  = 0x1\n\tBPF_DEVCG_DEV_CHAR                   = 0x2\n\tBPF_DIV                              = 0x30\n\tBPF_DW                               = 0x18\n\tBPF_END                              = 0xd0\n\tBPF_EXIST                            = 0x2\n\tBPF_EXIT                             = 0x90\n\tBPF_FROM_BE                          = 0x8\n\tBPF_FROM_LE                          = 0x0\n\tBPF_FS_MAGIC                         = 0xcafe4a11\n\tBPF_F_ALLOW_MULTI                    = 0x2\n\tBPF_F_ALLOW_OVERRIDE                 = 0x1\n\tBPF_F_ANY_ALIGNMENT                  = 0x2\n\tBPF_F_CTXLEN_MASK                    = 0xfffff00000000\n\tBPF_F_CURRENT_CPU                    = 0xffffffff\n\tBPF_F_CURRENT_NETNS                  = -0x1\n\tBPF_F_DONT_FRAGMENT                  = 0x4\n\tBPF_F_FAST_STACK_CMP                 = 0x200\n\tBPF_F_HDR_FIELD_MASK                 = 0xf\n\tBPF_F_INDEX_MASK                     = 0xffffffff\n\tBPF_F_INGRESS                        = 0x1\n\tBPF_F_INVALIDATE_HASH                = 0x2\n\tBPF_F_LOCK                           = 0x4\n\tBPF_F_MARK_ENFORCE                   = 0x40\n\tBPF_F_MARK_MANGLED_0                 = 0x20\n\tBPF_F_NO_COMMON_LRU                  = 0x2\n\tBPF_F_NO_PREALLOC                    = 0x1\n\tBPF_F_NUMA_NODE                      = 0x4\n\tBPF_F_PSEUDO_HDR                     = 0x10\n\tBPF_F_QUERY_EFFECTIVE                = 0x1\n\tBPF_F_RDONLY                         = 0x8\n\tBPF_F_RECOMPUTE_CSUM                 = 0x1\n\tBPF_F_REUSE_STACKID                  = 0x400\n\tBPF_F_SEQ_NUMBER                     = 0x8\n\tBPF_F_SKIP_FIELD_MASK                = 0xff\n\tBPF_F_STACK_BUILD_ID                 = 0x20\n\tBPF_F_STRICT_ALIGNMENT               = 0x1\n\tBPF_F_TUNINFO_IPV6                   = 0x1\n\tBPF_F_USER_BUILD_ID                  = 0x800\n\tBPF_F_USER_STACK                     = 0x100\n\tBPF_F_WRONLY                         = 0x10\n\tBPF_F_ZERO_CSUM_TX                   = 0x2\n\tBPF_F_ZERO_SEED                      = 0x40\n\tBPF_H                                = 0x8\n\tBPF_IMM                              = 0x0\n\tBPF_IND                              = 0x40\n\tBPF_JA                               = 0x0\n\tBPF_JEQ                              = 0x10\n\tBPF_JGE                              = 0x30\n\tBPF_JGT                              = 0x20\n\tBPF_JLE                              = 0xb0\n\tBPF_JLT                              = 0xa0\n\tBPF_JMP                              = 0x5\n\tBPF_JMP32                            = 0x6\n\tBPF_JNE                              = 0x50\n\tBPF_JSET                             = 0x40\n\tBPF_JSGE                             = 0x70\n\tBPF_JSGT                             = 0x60\n\tBPF_JSLE                             = 0xd0\n\tBPF_JSLT                             = 0xc0\n\tBPF_K                                = 0x0\n\tBPF_LD                               = 0x0\n\tBPF_LDX                              = 0x1\n\tBPF_LEN                              = 0x80\n\tBPF_LL_OFF                           = -0x200000\n\tBPF_LSH                              = 0x60\n\tBPF_MAJOR_VERSION                    = 0x1\n\tBPF_MAXINSNS                         = 0x1000\n\tBPF_MEM                              = 0x60\n\tBPF_MEMWORDS                         = 0x10\n\tBPF_MINOR_VERSION                    = 0x1\n\tBPF_MISC                             = 0x7\n\tBPF_MOD                              = 0x90\n\tBPF_MOV                              = 0xb0\n\tBPF_MSH                              = 0xa0\n\tBPF_MUL                              = 0x20\n\tBPF_NEG                              = 0x80\n\tBPF_NET_OFF                          = -0x100000\n\tBPF_NOEXIST                          = 0x1\n\tBPF_OBJ_NAME_LEN                     = 0x10\n\tBPF_OR                               = 0x40\n\tBPF_PSEUDO_CALL                      = 0x1\n\tBPF_PSEUDO_MAP_FD                    = 0x1\n\tBPF_RET                              = 0x6\n\tBPF_RSH                              = 0x70\n\tBPF_SOCK_OPS_ALL_CB_FLAGS            = 0x7\n\tBPF_SOCK_OPS_RETRANS_CB_FLAG         = 0x2\n\tBPF_SOCK_OPS_RTO_CB_FLAG             = 0x1\n\tBPF_SOCK_OPS_STATE_CB_FLAG           = 0x4\n\tBPF_ST                               = 0x2\n\tBPF_STX                              = 0x3\n\tBPF_SUB                              = 0x10\n\tBPF_TAG_SIZE                         = 0x8\n\tBPF_TAX                              = 0x0\n\tBPF_TO_BE                            = 0x8\n\tBPF_TO_LE                            = 0x0\n\tBPF_TXA                              = 0x80\n\tBPF_W                                = 0x0\n\tBPF_X                                = 0x8\n\tBPF_XADD                             = 0xc0\n\tBPF_XOR                              = 0xa0\n\tBRKINT                               = 0x2\n\tBS0                                  = 0x0\n\tBS1                                  = 0x2000\n\tBSDLY                                = 0x2000\n\tBTRFS_SUPER_MAGIC                    = 0x9123683e\n\tBTRFS_TEST_MAGIC                     = 0x73727279\n\tCAN_BCM                              = 0x2\n\tCAN_EFF_FLAG                         = 0x80000000\n\tCAN_EFF_ID_BITS                      = 0x1d\n\tCAN_EFF_MASK                         = 0x1fffffff\n\tCAN_ERR_FLAG                         = 0x20000000\n\tCAN_ERR_MASK                         = 0x1fffffff\n\tCAN_INV_FILTER                       = 0x20000000\n\tCAN_ISOTP                            = 0x6\n\tCAN_MAX_DLC                          = 0x8\n\tCAN_MAX_DLEN                         = 0x8\n\tCAN_MCNET                            = 0x5\n\tCAN_MTU                              = 0x10\n\tCAN_NPROTO                           = 0x7\n\tCAN_RAW                              = 0x1\n\tCAN_RAW_FILTER_MAX                   = 0x200\n\tCAN_RTR_FLAG                         = 0x40000000\n\tCAN_SFF_ID_BITS                      = 0xb\n\tCAN_SFF_MASK                         = 0x7ff\n\tCAN_TP16                             = 0x3\n\tCAN_TP20                             = 0x4\n\tCBAUD                                = 0x100f\n\tCBAUDEX                              = 0x1000\n\tCFLUSH                               = 0xf\n\tCGROUP2_SUPER_MAGIC                  = 0x63677270\n\tCGROUP_SUPER_MAGIC                   = 0x27e0eb\n\tCIBAUD                               = 0x100f0000\n\tCLOCAL                               = 0x800\n\tCLOCK_BOOTTIME                       = 0x7\n\tCLOCK_BOOTTIME_ALARM                 = 0x9\n\tCLOCK_DEFAULT                        = 0x0\n\tCLOCK_EXT                            = 0x1\n\tCLOCK_INT                            = 0x2\n\tCLOCK_MONOTONIC                      = 0x1\n\tCLOCK_MONOTONIC_COARSE               = 0x6\n\tCLOCK_MONOTONIC_RAW                  = 0x4\n\tCLOCK_PROCESS_CPUTIME_ID             = 0x2\n\tCLOCK_REALTIME                       = 0x0\n\tCLOCK_REALTIME_ALARM                 = 0x8\n\tCLOCK_REALTIME_COARSE                = 0x5\n\tCLOCK_TAI                            = 0xb\n\tCLOCK_THREAD_CPUTIME_ID              = 0x3\n\tCLOCK_TXFROMRX                       = 0x4\n\tCLOCK_TXINT                          = 0x3\n\tCLONE_CHILD_CLEARTID                 = 0x200000\n\tCLONE_CHILD_SETTID                   = 0x1000000\n\tCLONE_DETACHED                       = 0x400000\n\tCLONE_FILES                          = 0x400\n\tCLONE_FS                             = 0x200\n\tCLONE_IO                             = 0x80000000\n\tCLONE_NEWCGROUP                      = 0x2000000\n\tCLONE_NEWIPC                         = 0x8000000\n\tCLONE_NEWNET                         = 0x40000000\n\tCLONE_NEWNS                          = 0x20000\n\tCLONE_NEWPID                         = 0x20000000\n\tCLONE_NEWUSER                        = 0x10000000\n\tCLONE_NEWUTS                         = 0x4000000\n\tCLONE_PARENT                         = 0x8000\n\tCLONE_PARENT_SETTID                  = 0x100000\n\tCLONE_PTRACE                         = 0x2000\n\tCLONE_SETTLS                         = 0x80000\n\tCLONE_SIGHAND                        = 0x800\n\tCLONE_SYSVSEM                        = 0x40000\n\tCLONE_THREAD                         = 0x10000\n\tCLONE_UNTRACED                       = 0x800000\n\tCLONE_VFORK                          = 0x4000\n\tCLONE_VM                             = 0x100\n\tCMSPAR                               = 0x40000000\n\tCODA_SUPER_MAGIC                     = 0x73757245\n\tCR0                                  = 0x0\n\tCR1                                  = 0x200\n\tCR2                                  = 0x400\n\tCR3                                  = 0x600\n\tCRAMFS_MAGIC                         = 0x28cd3d45\n\tCRDLY                                = 0x600\n\tCREAD                                = 0x80\n\tCRTSCTS                              = 0x80000000\n\tCRYPTO_MAX_NAME                      = 0x40\n\tCRYPTO_MSG_MAX                       = 0x15\n\tCRYPTO_NR_MSGTYPES                   = 0x6\n\tCRYPTO_REPORT_MAXSIZE                = 0x160\n\tCS5                                  = 0x0\n\tCS6                                  = 0x10\n\tCS7                                  = 0x20\n\tCS8                                  = 0x30\n\tCSIGNAL                              = 0xff\n\tCSIZE                                = 0x30\n\tCSTART                               = 0x11\n\tCSTATUS                              = 0x0\n\tCSTOP                                = 0x13\n\tCSTOPB                               = 0x40\n\tCSUSP                                = 0x1a\n\tDAXFS_MAGIC                          = 0x64646178\n\tDEBUGFS_MAGIC                        = 0x64626720\n\tDEVPTS_SUPER_MAGIC                   = 0x1cd1\n\tDT_BLK                               = 0x6\n\tDT_CHR                               = 0x2\n\tDT_DIR                               = 0x4\n\tDT_FIFO                              = 0x1\n\tDT_LNK                               = 0xa\n\tDT_REG                               = 0x8\n\tDT_SOCK                              = 0xc\n\tDT_UNKNOWN                           = 0x0\n\tDT_WHT                               = 0xe\n\tECHO                                 = 0x8\n\tECHOCTL                              = 0x200\n\tECHOE                                = 0x10\n\tECHOK                                = 0x20\n\tECHOKE                               = 0x800\n\tECHONL                               = 0x40\n\tECHOPRT                              = 0x400\n\tECRYPTFS_SUPER_MAGIC                 = 0xf15f\n\tEFD_CLOEXEC                          = 0x80000\n\tEFD_NONBLOCK                         = 0x80\n\tEFD_SEMAPHORE                        = 0x1\n\tEFIVARFS_MAGIC                       = 0xde5e81e4\n\tEFS_SUPER_MAGIC                      = 0x414a53\n\tENCODING_DEFAULT                     = 0x0\n\tENCODING_FM_MARK                     = 0x3\n\tENCODING_FM_SPACE                    = 0x4\n\tENCODING_MANCHESTER                  = 0x5\n\tENCODING_NRZ                         = 0x1\n\tENCODING_NRZI                        = 0x2\n\tEPOLLERR                             = 0x8\n\tEPOLLET                              = 0x80000000\n\tEPOLLEXCLUSIVE                       = 0x10000000\n\tEPOLLHUP                             = 0x10\n\tEPOLLIN                              = 0x1\n\tEPOLLMSG                             = 0x400\n\tEPOLLONESHOT                         = 0x40000000\n\tEPOLLOUT                             = 0x4\n\tEPOLLPRI                             = 0x2\n\tEPOLLRDBAND                          = 0x80\n\tEPOLLRDHUP                           = 0x2000\n\tEPOLLRDNORM                          = 0x40\n\tEPOLLWAKEUP                          = 0x20000000\n\tEPOLLWRBAND                          = 0x200\n\tEPOLLWRNORM                          = 0x100\n\tEPOLL_CLOEXEC                        = 0x80000\n\tEPOLL_CTL_ADD                        = 0x1\n\tEPOLL_CTL_DEL                        = 0x2\n\tEPOLL_CTL_MOD                        = 0x3\n\tETH_P_1588                           = 0x88f7\n\tETH_P_8021AD                         = 0x88a8\n\tETH_P_8021AH                         = 0x88e7\n\tETH_P_8021Q                          = 0x8100\n\tETH_P_80221                          = 0x8917\n\tETH_P_802_2                          = 0x4\n\tETH_P_802_3                          = 0x1\n\tETH_P_802_3_MIN                      = 0x600\n\tETH_P_802_EX1                        = 0x88b5\n\tETH_P_AARP                           = 0x80f3\n\tETH_P_AF_IUCV                        = 0xfbfb\n\tETH_P_ALL                            = 0x3\n\tETH_P_AOE                            = 0x88a2\n\tETH_P_ARCNET                         = 0x1a\n\tETH_P_ARP                            = 0x806\n\tETH_P_ATALK                          = 0x809b\n\tETH_P_ATMFATE                        = 0x8884\n\tETH_P_ATMMPOA                        = 0x884c\n\tETH_P_AX25                           = 0x2\n\tETH_P_BATMAN                         = 0x4305\n\tETH_P_BPQ                            = 0x8ff\n\tETH_P_CAIF                           = 0xf7\n\tETH_P_CAN                            = 0xc\n\tETH_P_CANFD                          = 0xd\n\tETH_P_CONTROL                        = 0x16\n\tETH_P_CUST                           = 0x6006\n\tETH_P_DDCMP                          = 0x6\n\tETH_P_DEC                            = 0x6000\n\tETH_P_DIAG                           = 0x6005\n\tETH_P_DNA_DL                         = 0x6001\n\tETH_P_DNA_RC                         = 0x6002\n\tETH_P_DNA_RT                         = 0x6003\n\tETH_P_DSA                            = 0x1b\n\tETH_P_ECONET                         = 0x18\n\tETH_P_EDSA                           = 0xdada\n\tETH_P_ERSPAN                         = 0x88be\n\tETH_P_ERSPAN2                        = 0x22eb\n\tETH_P_FCOE                           = 0x8906\n\tETH_P_FIP                            = 0x8914\n\tETH_P_HDLC                           = 0x19\n\tETH_P_HSR                            = 0x892f\n\tETH_P_IBOE                           = 0x8915\n\tETH_P_IEEE802154                     = 0xf6\n\tETH_P_IEEEPUP                        = 0xa00\n\tETH_P_IEEEPUPAT                      = 0xa01\n\tETH_P_IFE                            = 0xed3e\n\tETH_P_IP                             = 0x800\n\tETH_P_IPV6                           = 0x86dd\n\tETH_P_IPX                            = 0x8137\n\tETH_P_IRDA                           = 0x17\n\tETH_P_LAT                            = 0x6004\n\tETH_P_LINK_CTL                       = 0x886c\n\tETH_P_LOCALTALK                      = 0x9\n\tETH_P_LOOP                           = 0x60\n\tETH_P_LOOPBACK                       = 0x9000\n\tETH_P_MACSEC                         = 0x88e5\n\tETH_P_MAP                            = 0xf9\n\tETH_P_MOBITEX                        = 0x15\n\tETH_P_MPLS_MC                        = 0x8848\n\tETH_P_MPLS_UC                        = 0x8847\n\tETH_P_MVRP                           = 0x88f5\n\tETH_P_NCSI                           = 0x88f8\n\tETH_P_NSH                            = 0x894f\n\tETH_P_PAE                            = 0x888e\n\tETH_P_PAUSE                          = 0x8808\n\tETH_P_PHONET                         = 0xf5\n\tETH_P_PPPTALK                        = 0x10\n\tETH_P_PPP_DISC                       = 0x8863\n\tETH_P_PPP_MP                         = 0x8\n\tETH_P_PPP_SES                        = 0x8864\n\tETH_P_PREAUTH                        = 0x88c7\n\tETH_P_PRP                            = 0x88fb\n\tETH_P_PUP                            = 0x200\n\tETH_P_PUPAT                          = 0x201\n\tETH_P_QINQ1                          = 0x9100\n\tETH_P_QINQ2                          = 0x9200\n\tETH_P_QINQ3                          = 0x9300\n\tETH_P_RARP                           = 0x8035\n\tETH_P_SCA                            = 0x6007\n\tETH_P_SLOW                           = 0x8809\n\tETH_P_SNAP                           = 0x5\n\tETH_P_TDLS                           = 0x890d\n\tETH_P_TEB                            = 0x6558\n\tETH_P_TIPC                           = 0x88ca\n\tETH_P_TRAILER                        = 0x1c\n\tETH_P_TR_802_2                       = 0x11\n\tETH_P_TSN                            = 0x22f0\n\tETH_P_WAN_PPP                        = 0x7\n\tETH_P_WCCP                           = 0x883e\n\tETH_P_X25                            = 0x805\n\tETH_P_XDSA                           = 0xf8\n\tEXABYTE_ENABLE_NEST                  = 0xf0\n\tEXT2_SUPER_MAGIC                     = 0xef53\n\tEXT3_SUPER_MAGIC                     = 0xef53\n\tEXT4_SUPER_MAGIC                     = 0xef53\n\tEXTA                                 = 0xe\n\tEXTB                                 = 0xf\n\tEXTPROC                              = 0x10000\n\tF2FS_SUPER_MAGIC                     = 0xf2f52010\n\tFALLOC_FL_COLLAPSE_RANGE             = 0x8\n\tFALLOC_FL_INSERT_RANGE               = 0x20\n\tFALLOC_FL_KEEP_SIZE                  = 0x1\n\tFALLOC_FL_NO_HIDE_STALE              = 0x4\n\tFALLOC_FL_PUNCH_HOLE                 = 0x2\n\tFALLOC_FL_UNSHARE_RANGE              = 0x40\n\tFALLOC_FL_ZERO_RANGE                 = 0x10\n\tFANOTIFY_METADATA_VERSION            = 0x3\n\tFAN_ACCESS                           = 0x1\n\tFAN_ACCESS_PERM                      = 0x20000\n\tFAN_ALLOW                            = 0x1\n\tFAN_ALL_CLASS_BITS                   = 0xc\n\tFAN_ALL_EVENTS                       = 0x3b\n\tFAN_ALL_INIT_FLAGS                   = 0x3f\n\tFAN_ALL_MARK_FLAGS                   = 0xff\n\tFAN_ALL_OUTGOING_EVENTS              = 0x3403b\n\tFAN_ALL_PERM_EVENTS                  = 0x30000\n\tFAN_ATTRIB                           = 0x4\n\tFAN_AUDIT                            = 0x10\n\tFAN_CLASS_CONTENT                    = 0x4\n\tFAN_CLASS_NOTIF                      = 0x0\n\tFAN_CLASS_PRE_CONTENT                = 0x8\n\tFAN_CLOEXEC                          = 0x1\n\tFAN_CLOSE                            = 0x18\n\tFAN_CLOSE_NOWRITE                    = 0x10\n\tFAN_CLOSE_WRITE                      = 0x8\n\tFAN_CREATE                           = 0x100\n\tFAN_DELETE                           = 0x200\n\tFAN_DELETE_SELF                      = 0x400\n\tFAN_DENY                             = 0x2\n\tFAN_ENABLE_AUDIT                     = 0x40\n\tFAN_EVENT_INFO_TYPE_FID              = 0x1\n\tFAN_EVENT_METADATA_LEN               = 0x18\n\tFAN_EVENT_ON_CHILD                   = 0x8000000\n\tFAN_MARK_ADD                         = 0x1\n\tFAN_MARK_DONT_FOLLOW                 = 0x4\n\tFAN_MARK_FILESYSTEM                  = 0x100\n\tFAN_MARK_FLUSH                       = 0x80\n\tFAN_MARK_IGNORED_MASK                = 0x20\n\tFAN_MARK_IGNORED_SURV_MODIFY         = 0x40\n\tFAN_MARK_INODE                       = 0x0\n\tFAN_MARK_MOUNT                       = 0x10\n\tFAN_MARK_ONLYDIR                     = 0x8\n\tFAN_MARK_REMOVE                      = 0x2\n\tFAN_MODIFY                           = 0x2\n\tFAN_MOVE                             = 0xc0\n\tFAN_MOVED_FROM                       = 0x40\n\tFAN_MOVED_TO                         = 0x80\n\tFAN_MOVE_SELF                        = 0x800\n\tFAN_NOFD                             = -0x1\n\tFAN_NONBLOCK                         = 0x2\n\tFAN_ONDIR                            = 0x40000000\n\tFAN_OPEN                             = 0x20\n\tFAN_OPEN_EXEC                        = 0x1000\n\tFAN_OPEN_EXEC_PERM                   = 0x40000\n\tFAN_OPEN_PERM                        = 0x10000\n\tFAN_Q_OVERFLOW                       = 0x4000\n\tFAN_REPORT_FID                       = 0x200\n\tFAN_REPORT_TID                       = 0x100\n\tFAN_UNLIMITED_MARKS                  = 0x20\n\tFAN_UNLIMITED_QUEUE                  = 0x10\n\tFD_CLOEXEC                           = 0x1\n\tFD_SETSIZE                           = 0x400\n\tFF0                                  = 0x0\n\tFF1                                  = 0x8000\n\tFFDLY                                = 0x8000\n\tFLUSHO                               = 0x2000\n\tFS_ENCRYPTION_MODE_ADIANTUM          = 0x9\n\tFS_ENCRYPTION_MODE_AES_128_CBC       = 0x5\n\tFS_ENCRYPTION_MODE_AES_128_CTS       = 0x6\n\tFS_ENCRYPTION_MODE_AES_256_CBC       = 0x3\n\tFS_ENCRYPTION_MODE_AES_256_CTS       = 0x4\n\tFS_ENCRYPTION_MODE_AES_256_GCM       = 0x2\n\tFS_ENCRYPTION_MODE_AES_256_XTS       = 0x1\n\tFS_ENCRYPTION_MODE_INVALID           = 0x0\n\tFS_ENCRYPTION_MODE_SPECK128_256_CTS  = 0x8\n\tFS_ENCRYPTION_MODE_SPECK128_256_XTS  = 0x7\n\tFS_IOC_GET_ENCRYPTION_POLICY         = 0x800c6615\n\tFS_IOC_GET_ENCRYPTION_PWSALT         = 0x80106614\n\tFS_IOC_SET_ENCRYPTION_POLICY         = 0x400c6613\n\tFS_KEY_DESCRIPTOR_SIZE               = 0x8\n\tFS_KEY_DESC_PREFIX                   = \"fscrypt:\"\n\tFS_KEY_DESC_PREFIX_SIZE              = 0x8\n\tFS_MAX_KEY_SIZE                      = 0x40\n\tFS_POLICY_FLAGS_PAD_16               = 0x2\n\tFS_POLICY_FLAGS_PAD_32               = 0x3\n\tFS_POLICY_FLAGS_PAD_4                = 0x0\n\tFS_POLICY_FLAGS_PAD_8                = 0x1\n\tFS_POLICY_FLAGS_PAD_MASK             = 0x3\n\tFS_POLICY_FLAGS_VALID                = 0x7\n\tFUTEXFS_SUPER_MAGIC                  = 0xbad1dea\n\tF_ADD_SEALS                          = 0x409\n\tF_DUPFD                              = 0x0\n\tF_DUPFD_CLOEXEC                      = 0x406\n\tF_EXLCK                              = 0x4\n\tF_GETFD                              = 0x1\n\tF_GETFL                              = 0x3\n\tF_GETLEASE                           = 0x401\n\tF_GETLK                              = 0x21\n\tF_GETLK64                            = 0x21\n\tF_GETOWN                             = 0x17\n\tF_GETOWN_EX                          = 0x10\n\tF_GETPIPE_SZ                         = 0x408\n\tF_GETSIG                             = 0xb\n\tF_GET_FILE_RW_HINT                   = 0x40d\n\tF_GET_RW_HINT                        = 0x40b\n\tF_GET_SEALS                          = 0x40a\n\tF_LOCK                               = 0x1\n\tF_NOTIFY                             = 0x402\n\tF_OFD_GETLK                          = 0x24\n\tF_OFD_SETLK                          = 0x25\n\tF_OFD_SETLKW                         = 0x26\n\tF_OK                                 = 0x0\n\tF_RDLCK                              = 0x0\n\tF_SEAL_GROW                          = 0x4\n\tF_SEAL_SEAL                          = 0x1\n\tF_SEAL_SHRINK                        = 0x2\n\tF_SEAL_WRITE                         = 0x8\n\tF_SETFD                              = 0x2\n\tF_SETFL                              = 0x4\n\tF_SETLEASE                           = 0x400\n\tF_SETLK                              = 0x22\n\tF_SETLK64                            = 0x22\n\tF_SETLKW                             = 0x23\n\tF_SETLKW64                           = 0x23\n\tF_SETOWN                             = 0x18\n\tF_SETOWN_EX                          = 0xf\n\tF_SETPIPE_SZ                         = 0x407\n\tF_SETSIG                             = 0xa\n\tF_SET_FILE_RW_HINT                   = 0x40e\n\tF_SET_RW_HINT                        = 0x40c\n\tF_SHLCK                              = 0x8\n\tF_TEST                               = 0x3\n\tF_TLOCK                              = 0x2\n\tF_ULOCK                              = 0x0\n\tF_UNLCK                              = 0x2\n\tF_WRLCK                              = 0x1\n\tGENL_ADMIN_PERM                      = 0x1\n\tGENL_CMD_CAP_DO                      = 0x2\n\tGENL_CMD_CAP_DUMP                    = 0x4\n\tGENL_CMD_CAP_HASPOL                  = 0x8\n\tGENL_HDRLEN                          = 0x4\n\tGENL_ID_CTRL                         = 0x10\n\tGENL_ID_PMCRAID                      = 0x12\n\tGENL_ID_VFS_DQUOT                    = 0x11\n\tGENL_MAX_ID                          = 0x3ff\n\tGENL_MIN_ID                          = 0x10\n\tGENL_NAMSIZ                          = 0x10\n\tGENL_START_ALLOC                     = 0x13\n\tGENL_UNS_ADMIN_PERM                  = 0x10\n\tGRND_NONBLOCK                        = 0x1\n\tGRND_RANDOM                          = 0x2\n\tHDIO_DRIVE_CMD                       = 0x31f\n\tHDIO_DRIVE_CMD_AEB                   = 0x31e\n\tHDIO_DRIVE_CMD_HDR_SIZE              = 0x4\n\tHDIO_DRIVE_HOB_HDR_SIZE              = 0x8\n\tHDIO_DRIVE_RESET                     = 0x31c\n\tHDIO_DRIVE_TASK                      = 0x31e\n\tHDIO_DRIVE_TASKFILE                  = 0x31d\n\tHDIO_DRIVE_TASK_HDR_SIZE             = 0x8\n\tHDIO_GETGEO                          = 0x301\n\tHDIO_GET_32BIT                       = 0x309\n\tHDIO_GET_ACOUSTIC                    = 0x30f\n\tHDIO_GET_ADDRESS                     = 0x310\n\tHDIO_GET_BUSSTATE                    = 0x31a\n\tHDIO_GET_DMA                         = 0x30b\n\tHDIO_GET_IDENTITY                    = 0x30d\n\tHDIO_GET_KEEPSETTINGS                = 0x308\n\tHDIO_GET_MULTCOUNT                   = 0x304\n\tHDIO_GET_NICE                        = 0x30c\n\tHDIO_GET_NOWERR                      = 0x30a\n\tHDIO_GET_QDMA                        = 0x305\n\tHDIO_GET_UNMASKINTR                  = 0x302\n\tHDIO_GET_WCACHE                      = 0x30e\n\tHDIO_OBSOLETE_IDENTITY               = 0x307\n\tHDIO_SCAN_HWIF                       = 0x328\n\tHDIO_SET_32BIT                       = 0x324\n\tHDIO_SET_ACOUSTIC                    = 0x32c\n\tHDIO_SET_ADDRESS                     = 0x32f\n\tHDIO_SET_BUSSTATE                    = 0x32d\n\tHDIO_SET_DMA                         = 0x326\n\tHDIO_SET_KEEPSETTINGS                = 0x323\n\tHDIO_SET_MULTCOUNT                   = 0x321\n\tHDIO_SET_NICE                        = 0x329\n\tHDIO_SET_NOWERR                      = 0x325\n\tHDIO_SET_PIO_MODE                    = 0x327\n\tHDIO_SET_QDMA                        = 0x32e\n\tHDIO_SET_UNMASKINTR                  = 0x322\n\tHDIO_SET_WCACHE                      = 0x32b\n\tHDIO_SET_XFER                        = 0x306\n\tHDIO_TRISTATE_HWIF                   = 0x31b\n\tHDIO_UNREGISTER_HWIF                 = 0x32a\n\tHOSTFS_SUPER_MAGIC                   = 0xc0ffee\n\tHPFS_SUPER_MAGIC                     = 0xf995e849\n\tHUGETLBFS_MAGIC                      = 0x958458f6\n\tHUPCL                                = 0x400\n\tIBSHIFT                              = 0x10\n\tICANON                               = 0x2\n\tICMPV6_FILTER                        = 0x1\n\tICRNL                                = 0x100\n\tIEXTEN                               = 0x100\n\tIFA_F_DADFAILED                      = 0x8\n\tIFA_F_DEPRECATED                     = 0x20\n\tIFA_F_HOMEADDRESS                    = 0x10\n\tIFA_F_MANAGETEMPADDR                 = 0x100\n\tIFA_F_MCAUTOJOIN                     = 0x400\n\tIFA_F_NODAD                          = 0x2\n\tIFA_F_NOPREFIXROUTE                  = 0x200\n\tIFA_F_OPTIMISTIC                     = 0x4\n\tIFA_F_PERMANENT                      = 0x80\n\tIFA_F_SECONDARY                      = 0x1\n\tIFA_F_STABLE_PRIVACY                 = 0x800\n\tIFA_F_TEMPORARY                      = 0x1\n\tIFA_F_TENTATIVE                      = 0x40\n\tIFA_MAX                              = 0xa\n\tIFF_ALLMULTI                         = 0x200\n\tIFF_ATTACH_QUEUE                     = 0x200\n\tIFF_AUTOMEDIA                        = 0x4000\n\tIFF_BROADCAST                        = 0x2\n\tIFF_DEBUG                            = 0x4\n\tIFF_DETACH_QUEUE                     = 0x400\n\tIFF_DORMANT                          = 0x20000\n\tIFF_DYNAMIC                          = 0x8000\n\tIFF_ECHO                             = 0x40000\n\tIFF_LOOPBACK                         = 0x8\n\tIFF_LOWER_UP                         = 0x10000\n\tIFF_MASTER                           = 0x400\n\tIFF_MULTICAST                        = 0x1000\n\tIFF_MULTI_QUEUE                      = 0x100\n\tIFF_NAPI                             = 0x10\n\tIFF_NAPI_FRAGS                       = 0x20\n\tIFF_NOARP                            = 0x80\n\tIFF_NOFILTER                         = 0x1000\n\tIFF_NOTRAILERS                       = 0x20\n\tIFF_NO_PI                            = 0x1000\n\tIFF_ONE_QUEUE                        = 0x2000\n\tIFF_PERSIST                          = 0x800\n\tIFF_POINTOPOINT                      = 0x10\n\tIFF_PORTSEL                          = 0x2000\n\tIFF_PROMISC                          = 0x100\n\tIFF_RUNNING                          = 0x40\n\tIFF_SLAVE                            = 0x800\n\tIFF_TAP                              = 0x2\n\tIFF_TUN                              = 0x1\n\tIFF_TUN_EXCL                         = 0x8000\n\tIFF_UP                               = 0x1\n\tIFF_VNET_HDR                         = 0x4000\n\tIFF_VOLATILE                         = 0x70c5a\n\tIFNAMSIZ                             = 0x10\n\tIGNBRK                               = 0x1\n\tIGNCR                                = 0x80\n\tIGNPAR                               = 0x4\n\tIMAXBEL                              = 0x2000\n\tINLCR                                = 0x40\n\tINPCK                                = 0x10\n\tIN_ACCESS                            = 0x1\n\tIN_ALL_EVENTS                        = 0xfff\n\tIN_ATTRIB                            = 0x4\n\tIN_CLASSA_HOST                       = 0xffffff\n\tIN_CLASSA_MAX                        = 0x80\n\tIN_CLASSA_NET                        = 0xff000000\n\tIN_CLASSA_NSHIFT                     = 0x18\n\tIN_CLASSB_HOST                       = 0xffff\n\tIN_CLASSB_MAX                        = 0x10000\n\tIN_CLASSB_NET                        = 0xffff0000\n\tIN_CLASSB_NSHIFT                     = 0x10\n\tIN_CLASSC_HOST                       = 0xff\n\tIN_CLASSC_NET                        = 0xffffff00\n\tIN_CLASSC_NSHIFT                     = 0x8\n\tIN_CLOEXEC                           = 0x80000\n\tIN_CLOSE                             = 0x18\n\tIN_CLOSE_NOWRITE                     = 0x10\n\tIN_CLOSE_WRITE                       = 0x8\n\tIN_CREATE                            = 0x100\n\tIN_DELETE                            = 0x200\n\tIN_DELETE_SELF                       = 0x400\n\tIN_DONT_FOLLOW                       = 0x2000000\n\tIN_EXCL_UNLINK                       = 0x4000000\n\tIN_IGNORED                           = 0x8000\n\tIN_ISDIR                             = 0x40000000\n\tIN_LOOPBACKNET                       = 0x7f\n\tIN_MASK_ADD                          = 0x20000000\n\tIN_MASK_CREATE                       = 0x10000000\n\tIN_MODIFY                            = 0x2\n\tIN_MOVE                              = 0xc0\n\tIN_MOVED_FROM                        = 0x40\n\tIN_MOVED_TO                          = 0x80\n\tIN_MOVE_SELF                         = 0x800\n\tIN_NONBLOCK                          = 0x80\n\tIN_ONESHOT                           = 0x80000000\n\tIN_ONLYDIR                           = 0x1000000\n\tIN_OPEN                              = 0x20\n\tIN_Q_OVERFLOW                        = 0x4000\n\tIN_UNMOUNT                           = 0x2000\n\tIOCTL_VM_SOCKETS_GET_LOCAL_CID       = 0x200007b9\n\tIPPROTO_AH                           = 0x33\n\tIPPROTO_BEETPH                       = 0x5e\n\tIPPROTO_COMP                         = 0x6c\n\tIPPROTO_DCCP                         = 0x21\n\tIPPROTO_DSTOPTS                      = 0x3c\n\tIPPROTO_EGP                          = 0x8\n\tIPPROTO_ENCAP                        = 0x62\n\tIPPROTO_ESP                          = 0x32\n\tIPPROTO_FRAGMENT                     = 0x2c\n\tIPPROTO_GRE                          = 0x2f\n\tIPPROTO_HOPOPTS                      = 0x0\n\tIPPROTO_ICMP                         = 0x1\n\tIPPROTO_ICMPV6                       = 0x3a\n\tIPPROTO_IDP                          = 0x16\n\tIPPROTO_IGMP                         = 0x2\n\tIPPROTO_IP                           = 0x0\n\tIPPROTO_IPIP                         = 0x4\n\tIPPROTO_IPV6                         = 0x29\n\tIPPROTO_MH                           = 0x87\n\tIPPROTO_MPLS                         = 0x89\n\tIPPROTO_MTP                          = 0x5c\n\tIPPROTO_NONE                         = 0x3b\n\tIPPROTO_PIM                          = 0x67\n\tIPPROTO_PUP                          = 0xc\n\tIPPROTO_RAW                          = 0xff\n\tIPPROTO_ROUTING                      = 0x2b\n\tIPPROTO_RSVP                         = 0x2e\n\tIPPROTO_SCTP                         = 0x84\n\tIPPROTO_TCP                          = 0x6\n\tIPPROTO_TP                           = 0x1d\n\tIPPROTO_UDP                          = 0x11\n\tIPPROTO_UDPLITE                      = 0x88\n\tIPV6_2292DSTOPTS                     = 0x4\n\tIPV6_2292HOPLIMIT                    = 0x8\n\tIPV6_2292HOPOPTS                     = 0x3\n\tIPV6_2292PKTINFO                     = 0x2\n\tIPV6_2292PKTOPTIONS                  = 0x6\n\tIPV6_2292RTHDR                       = 0x5\n\tIPV6_ADDRFORM                        = 0x1\n\tIPV6_ADDR_PREFERENCES                = 0x48\n\tIPV6_ADD_MEMBERSHIP                  = 0x14\n\tIPV6_AUTHHDR                         = 0xa\n\tIPV6_AUTOFLOWLABEL                   = 0x46\n\tIPV6_CHECKSUM                        = 0x7\n\tIPV6_DONTFRAG                        = 0x3e\n\tIPV6_DROP_MEMBERSHIP                 = 0x15\n\tIPV6_DSTOPTS                         = 0x3b\n\tIPV6_FREEBIND                        = 0x4e\n\tIPV6_HDRINCL                         = 0x24\n\tIPV6_HOPLIMIT                        = 0x34\n\tIPV6_HOPOPTS                         = 0x36\n\tIPV6_IPSEC_POLICY                    = 0x22\n\tIPV6_JOIN_ANYCAST                    = 0x1b\n\tIPV6_JOIN_GROUP                      = 0x14\n\tIPV6_LEAVE_ANYCAST                   = 0x1c\n\tIPV6_LEAVE_GROUP                     = 0x15\n\tIPV6_MINHOPCOUNT                     = 0x49\n\tIPV6_MTU                             = 0x18\n\tIPV6_MTU_DISCOVER                    = 0x17\n\tIPV6_MULTICAST_ALL                   = 0x1d\n\tIPV6_MULTICAST_HOPS                  = 0x12\n\tIPV6_MULTICAST_IF                    = 0x11\n\tIPV6_MULTICAST_LOOP                  = 0x13\n\tIPV6_NEXTHOP                         = 0x9\n\tIPV6_ORIGDSTADDR                     = 0x4a\n\tIPV6_PATHMTU                         = 0x3d\n\tIPV6_PKTINFO                         = 0x32\n\tIPV6_PMTUDISC_DO                     = 0x2\n\tIPV6_PMTUDISC_DONT                   = 0x0\n\tIPV6_PMTUDISC_INTERFACE              = 0x4\n\tIPV6_PMTUDISC_OMIT                   = 0x5\n\tIPV6_PMTUDISC_PROBE                  = 0x3\n\tIPV6_PMTUDISC_WANT                   = 0x1\n\tIPV6_RECVDSTOPTS                     = 0x3a\n\tIPV6_RECVERR                         = 0x19\n\tIPV6_RECVFRAGSIZE                    = 0x4d\n\tIPV6_RECVHOPLIMIT                    = 0x33\n\tIPV6_RECVHOPOPTS                     = 0x35\n\tIPV6_RECVORIGDSTADDR                 = 0x4a\n\tIPV6_RECVPATHMTU                     = 0x3c\n\tIPV6_RECVPKTINFO                     = 0x31\n\tIPV6_RECVRTHDR                       = 0x38\n\tIPV6_RECVTCLASS                      = 0x42\n\tIPV6_ROUTER_ALERT                    = 0x16\n\tIPV6_RTHDR                           = 0x39\n\tIPV6_RTHDRDSTOPTS                    = 0x37\n\tIPV6_RTHDR_LOOSE                     = 0x0\n\tIPV6_RTHDR_STRICT                    = 0x1\n\tIPV6_RTHDR_TYPE_0                    = 0x0\n\tIPV6_RXDSTOPTS                       = 0x3b\n\tIPV6_RXHOPOPTS                       = 0x36\n\tIPV6_TCLASS                          = 0x43\n\tIPV6_TRANSPARENT                     = 0x4b\n\tIPV6_UNICAST_HOPS                    = 0x10\n\tIPV6_UNICAST_IF                      = 0x4c\n\tIPV6_V6ONLY                          = 0x1a\n\tIPV6_XFRM_POLICY                     = 0x23\n\tIP_ADD_MEMBERSHIP                    = 0x23\n\tIP_ADD_SOURCE_MEMBERSHIP             = 0x27\n\tIP_BIND_ADDRESS_NO_PORT              = 0x18\n\tIP_BLOCK_SOURCE                      = 0x26\n\tIP_CHECKSUM                          = 0x17\n\tIP_DEFAULT_MULTICAST_LOOP            = 0x1\n\tIP_DEFAULT_MULTICAST_TTL             = 0x1\n\tIP_DF                                = 0x4000\n\tIP_DROP_MEMBERSHIP                   = 0x24\n\tIP_DROP_SOURCE_MEMBERSHIP            = 0x28\n\tIP_FREEBIND                          = 0xf\n\tIP_HDRINCL                           = 0x3\n\tIP_IPSEC_POLICY                      = 0x10\n\tIP_MAXPACKET                         = 0xffff\n\tIP_MAX_MEMBERSHIPS                   = 0x14\n\tIP_MF                                = 0x2000\n\tIP_MINTTL                            = 0x15\n\tIP_MSFILTER                          = 0x29\n\tIP_MSS                               = 0x240\n\tIP_MTU                               = 0xe\n\tIP_MTU_DISCOVER                      = 0xa\n\tIP_MULTICAST_ALL                     = 0x31\n\tIP_MULTICAST_IF                      = 0x20\n\tIP_MULTICAST_LOOP                    = 0x22\n\tIP_MULTICAST_TTL                     = 0x21\n\tIP_NODEFRAG                          = 0x16\n\tIP_OFFMASK                           = 0x1fff\n\tIP_OPTIONS                           = 0x4\n\tIP_ORIGDSTADDR                       = 0x14\n\tIP_PASSSEC                           = 0x12\n\tIP_PKTINFO                           = 0x8\n\tIP_PKTOPTIONS                        = 0x9\n\tIP_PMTUDISC                          = 0xa\n\tIP_PMTUDISC_DO                       = 0x2\n\tIP_PMTUDISC_DONT                     = 0x0\n\tIP_PMTUDISC_INTERFACE                = 0x4\n\tIP_PMTUDISC_OMIT                     = 0x5\n\tIP_PMTUDISC_PROBE                    = 0x3\n\tIP_PMTUDISC_WANT                     = 0x1\n\tIP_RECVERR                           = 0xb\n\tIP_RECVFRAGSIZE                      = 0x19\n\tIP_RECVOPTS                          = 0x6\n\tIP_RECVORIGDSTADDR                   = 0x14\n\tIP_RECVRETOPTS                       = 0x7\n\tIP_RECVTOS                           = 0xd\n\tIP_RECVTTL                           = 0xc\n\tIP_RETOPTS                           = 0x7\n\tIP_RF                                = 0x8000\n\tIP_ROUTER_ALERT                      = 0x5\n\tIP_TOS                               = 0x1\n\tIP_TRANSPARENT                       = 0x13\n\tIP_TTL                               = 0x2\n\tIP_UNBLOCK_SOURCE                    = 0x25\n\tIP_UNICAST_IF                        = 0x32\n\tIP_XFRM_POLICY                       = 0x11\n\tISIG                                 = 0x1\n\tISOFS_SUPER_MAGIC                    = 0x9660\n\tISTRIP                               = 0x20\n\tIUCLC                                = 0x200\n\tIUTF8                                = 0x4000\n\tIXANY                                = 0x800\n\tIXOFF                                = 0x1000\n\tIXON                                 = 0x400\n\tJFFS2_SUPER_MAGIC                    = 0x72b6\n\tKEXEC_ARCH_386                       = 0x30000\n\tKEXEC_ARCH_68K                       = 0x40000\n\tKEXEC_ARCH_AARCH64                   = 0xb70000\n\tKEXEC_ARCH_ARM                       = 0x280000\n\tKEXEC_ARCH_DEFAULT                   = 0x0\n\tKEXEC_ARCH_IA_64                     = 0x320000\n\tKEXEC_ARCH_MASK                      = 0xffff0000\n\tKEXEC_ARCH_MIPS                      = 0x80000\n\tKEXEC_ARCH_MIPS_LE                   = 0xa0000\n\tKEXEC_ARCH_PPC                       = 0x140000\n\tKEXEC_ARCH_PPC64                     = 0x150000\n\tKEXEC_ARCH_S390                      = 0x160000\n\tKEXEC_ARCH_SH                        = 0x2a0000\n\tKEXEC_ARCH_X86_64                    = 0x3e0000\n\tKEXEC_FILE_NO_INITRAMFS              = 0x4\n\tKEXEC_FILE_ON_CRASH                  = 0x2\n\tKEXEC_FILE_UNLOAD                    = 0x1\n\tKEXEC_ON_CRASH                       = 0x1\n\tKEXEC_PRESERVE_CONTEXT               = 0x2\n\tKEXEC_SEGMENT_MAX                    = 0x10\n\tKEYCTL_ASSUME_AUTHORITY              = 0x10\n\tKEYCTL_CHOWN                         = 0x4\n\tKEYCTL_CLEAR                         = 0x7\n\tKEYCTL_DESCRIBE                      = 0x6\n\tKEYCTL_DH_COMPUTE                    = 0x17\n\tKEYCTL_GET_KEYRING_ID                = 0x0\n\tKEYCTL_GET_PERSISTENT                = 0x16\n\tKEYCTL_GET_SECURITY                  = 0x11\n\tKEYCTL_INSTANTIATE                   = 0xc\n\tKEYCTL_INSTANTIATE_IOV               = 0x14\n\tKEYCTL_INVALIDATE                    = 0x15\n\tKEYCTL_JOIN_SESSION_KEYRING          = 0x1\n\tKEYCTL_LINK                          = 0x8\n\tKEYCTL_NEGATE                        = 0xd\n\tKEYCTL_PKEY_DECRYPT                  = 0x1a\n\tKEYCTL_PKEY_ENCRYPT                  = 0x19\n\tKEYCTL_PKEY_QUERY                    = 0x18\n\tKEYCTL_PKEY_SIGN                     = 0x1b\n\tKEYCTL_PKEY_VERIFY                   = 0x1c\n\tKEYCTL_READ                          = 0xb\n\tKEYCTL_REJECT                        = 0x13\n\tKEYCTL_RESTRICT_KEYRING              = 0x1d\n\tKEYCTL_REVOKE                        = 0x3\n\tKEYCTL_SEARCH                        = 0xa\n\tKEYCTL_SESSION_TO_PARENT             = 0x12\n\tKEYCTL_SETPERM                       = 0x5\n\tKEYCTL_SET_REQKEY_KEYRING            = 0xe\n\tKEYCTL_SET_TIMEOUT                   = 0xf\n\tKEYCTL_SUPPORTS_DECRYPT              = 0x2\n\tKEYCTL_SUPPORTS_ENCRYPT              = 0x1\n\tKEYCTL_SUPPORTS_SIGN                 = 0x4\n\tKEYCTL_SUPPORTS_VERIFY               = 0x8\n\tKEYCTL_UNLINK                        = 0x9\n\tKEYCTL_UPDATE                        = 0x2\n\tKEY_REQKEY_DEFL_DEFAULT              = 0x0\n\tKEY_REQKEY_DEFL_GROUP_KEYRING        = 0x6\n\tKEY_REQKEY_DEFL_NO_CHANGE            = -0x1\n\tKEY_REQKEY_DEFL_PROCESS_KEYRING      = 0x2\n\tKEY_REQKEY_DEFL_REQUESTOR_KEYRING    = 0x7\n\tKEY_REQKEY_DEFL_SESSION_KEYRING      = 0x3\n\tKEY_REQKEY_DEFL_THREAD_KEYRING       = 0x1\n\tKEY_REQKEY_DEFL_USER_KEYRING         = 0x4\n\tKEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5\n\tKEY_SPEC_GROUP_KEYRING               = -0x6\n\tKEY_SPEC_PROCESS_KEYRING             = -0x2\n\tKEY_SPEC_REQKEY_AUTH_KEY             = -0x7\n\tKEY_SPEC_REQUESTOR_KEYRING           = -0x8\n\tKEY_SPEC_SESSION_KEYRING             = -0x3\n\tKEY_SPEC_THREAD_KEYRING              = -0x1\n\tKEY_SPEC_USER_KEYRING                = -0x4\n\tKEY_SPEC_USER_SESSION_KEYRING        = -0x5\n\tLINUX_REBOOT_CMD_CAD_OFF             = 0x0\n\tLINUX_REBOOT_CMD_CAD_ON              = 0x89abcdef\n\tLINUX_REBOOT_CMD_HALT                = 0xcdef0123\n\tLINUX_REBOOT_CMD_KEXEC               = 0x45584543\n\tLINUX_REBOOT_CMD_POWER_OFF           = 0x4321fedc\n\tLINUX_REBOOT_CMD_RESTART             = 0x1234567\n\tLINUX_REBOOT_CMD_RESTART2            = 0xa1b2c3d4\n\tLINUX_REBOOT_CMD_SW_SUSPEND          = 0xd000fce2\n\tLINUX_REBOOT_MAGIC1                  = 0xfee1dead\n\tLINUX_REBOOT_MAGIC2                  = 0x28121969\n\tLOCK_EX                              = 0x2\n\tLOCK_NB                              = 0x4\n\tLOCK_SH                              = 0x1\n\tLOCK_UN                              = 0x8\n\tMADV_DODUMP                          = 0x11\n\tMADV_DOFORK                          = 0xb\n\tMADV_DONTDUMP                        = 0x10\n\tMADV_DONTFORK                        = 0xa\n\tMADV_DONTNEED                        = 0x4\n\tMADV_FREE                            = 0x8\n\tMADV_HUGEPAGE                        = 0xe\n\tMADV_HWPOISON                        = 0x64\n\tMADV_KEEPONFORK                      = 0x13\n\tMADV_MERGEABLE                       = 0xc\n\tMADV_NOHUGEPAGE                      = 0xf\n\tMADV_NORMAL                          = 0x0\n\tMADV_RANDOM                          = 0x1\n\tMADV_REMOVE                          = 0x9\n\tMADV_SEQUENTIAL                      = 0x2\n\tMADV_UNMERGEABLE                     = 0xd\n\tMADV_WILLNEED                        = 0x3\n\tMADV_WIPEONFORK                      = 0x12\n\tMAP_ANON                             = 0x800\n\tMAP_ANONYMOUS                        = 0x800\n\tMAP_DENYWRITE                        = 0x2000\n\tMAP_EXECUTABLE                       = 0x4000\n\tMAP_FILE                             = 0x0\n\tMAP_FIXED                            = 0x10\n\tMAP_FIXED_NOREPLACE                  = 0x100000\n\tMAP_GROWSDOWN                        = 0x1000\n\tMAP_HUGETLB                          = 0x80000\n\tMAP_HUGE_MASK                        = 0x3f\n\tMAP_HUGE_SHIFT                       = 0x1a\n\tMAP_LOCKED                           = 0x8000\n\tMAP_NONBLOCK                         = 0x20000\n\tMAP_NORESERVE                        = 0x400\n\tMAP_POPULATE                         = 0x10000\n\tMAP_PRIVATE                          = 0x2\n\tMAP_RENAME                           = 0x800\n\tMAP_SHARED                           = 0x1\n\tMAP_SHARED_VALIDATE                  = 0x3\n\tMAP_STACK                            = 0x40000\n\tMAP_TYPE                             = 0xf\n\tMCAST_BLOCK_SOURCE                   = 0x2b\n\tMCAST_EXCLUDE                        = 0x0\n\tMCAST_INCLUDE                        = 0x1\n\tMCAST_JOIN_GROUP                     = 0x2a\n\tMCAST_JOIN_SOURCE_GROUP              = 0x2e\n\tMCAST_LEAVE_GROUP                    = 0x2d\n\tMCAST_LEAVE_SOURCE_GROUP             = 0x2f\n\tMCAST_MSFILTER                       = 0x30\n\tMCAST_UNBLOCK_SOURCE                 = 0x2c\n\tMCL_CURRENT                          = 0x1\n\tMCL_FUTURE                           = 0x2\n\tMCL_ONFAULT                          = 0x4\n\tMFD_ALLOW_SEALING                    = 0x2\n\tMFD_CLOEXEC                          = 0x1\n\tMFD_HUGETLB                          = 0x4\n\tMFD_HUGE_16GB                        = -0x78000000\n\tMFD_HUGE_16MB                        = 0x60000000\n\tMFD_HUGE_1GB                         = 0x78000000\n\tMFD_HUGE_1MB                         = 0x50000000\n\tMFD_HUGE_256MB                       = 0x70000000\n\tMFD_HUGE_2GB                         = 0x7c000000\n\tMFD_HUGE_2MB                         = 0x54000000\n\tMFD_HUGE_32MB                        = 0x64000000\n\tMFD_HUGE_512KB                       = 0x4c000000\n\tMFD_HUGE_512MB                       = 0x74000000\n\tMFD_HUGE_64KB                        = 0x40000000\n\tMFD_HUGE_8MB                         = 0x5c000000\n\tMFD_HUGE_MASK                        = 0x3f\n\tMFD_HUGE_SHIFT                       = 0x1a\n\tMINIX2_SUPER_MAGIC                   = 0x2468\n\tMINIX2_SUPER_MAGIC2                  = 0x2478\n\tMINIX3_SUPER_MAGIC                   = 0x4d5a\n\tMINIX_SUPER_MAGIC                    = 0x137f\n\tMINIX_SUPER_MAGIC2                   = 0x138f\n\tMNT_DETACH                           = 0x2\n\tMNT_EXPIRE                           = 0x4\n\tMNT_FORCE                            = 0x1\n\tMODULE_INIT_IGNORE_MODVERSIONS       = 0x1\n\tMODULE_INIT_IGNORE_VERMAGIC          = 0x2\n\tMSDOS_SUPER_MAGIC                    = 0x4d44\n\tMSG_BATCH                            = 0x40000\n\tMSG_CMSG_CLOEXEC                     = 0x40000000\n\tMSG_CONFIRM                          = 0x800\n\tMSG_CTRUNC                           = 0x8\n\tMSG_DONTROUTE                        = 0x4\n\tMSG_DONTWAIT                         = 0x40\n\tMSG_EOR                              = 0x80\n\tMSG_ERRQUEUE                         = 0x2000\n\tMSG_FASTOPEN                         = 0x20000000\n\tMSG_FIN                              = 0x200\n\tMSG_MORE                             = 0x8000\n\tMSG_NOSIGNAL                         = 0x4000\n\tMSG_OOB                              = 0x1\n\tMSG_PEEK                             = 0x2\n\tMSG_PROXY                            = 0x10\n\tMSG_RST                              = 0x1000\n\tMSG_SYN                              = 0x400\n\tMSG_TRUNC                            = 0x20\n\tMSG_TRYHARD                          = 0x4\n\tMSG_WAITALL                          = 0x100\n\tMSG_WAITFORONE                       = 0x10000\n\tMSG_ZEROCOPY                         = 0x4000000\n\tMS_ACTIVE                            = 0x40000000\n\tMS_ASYNC                             = 0x1\n\tMS_BIND                              = 0x1000\n\tMS_BORN                              = 0x20000000\n\tMS_DIRSYNC                           = 0x80\n\tMS_INVALIDATE                        = 0x2\n\tMS_I_VERSION                         = 0x800000\n\tMS_KERNMOUNT                         = 0x400000\n\tMS_LAZYTIME                          = 0x2000000\n\tMS_MANDLOCK                          = 0x40\n\tMS_MGC_MSK                           = 0xffff0000\n\tMS_MGC_VAL                           = 0xc0ed0000\n\tMS_MOVE                              = 0x2000\n\tMS_NOATIME                           = 0x400\n\tMS_NODEV                             = 0x4\n\tMS_NODIRATIME                        = 0x800\n\tMS_NOEXEC                            = 0x8\n\tMS_NOREMOTELOCK                      = 0x8000000\n\tMS_NOSEC                             = 0x10000000\n\tMS_NOSUID                            = 0x2\n\tMS_NOUSER                            = -0x80000000\n\tMS_POSIXACL                          = 0x10000\n\tMS_PRIVATE                           = 0x40000\n\tMS_RDONLY                            = 0x1\n\tMS_REC                               = 0x4000\n\tMS_RELATIME                          = 0x200000\n\tMS_REMOUNT                           = 0x20\n\tMS_RMT_MASK                          = 0x2800051\n\tMS_SHARED                            = 0x100000\n\tMS_SILENT                            = 0x8000\n\tMS_SLAVE                             = 0x80000\n\tMS_STRICTATIME                       = 0x1000000\n\tMS_SUBMOUNT                          = 0x4000000\n\tMS_SYNC                              = 0x4\n\tMS_SYNCHRONOUS                       = 0x10\n\tMS_UNBINDABLE                        = 0x20000\n\tMS_VERBOSE                           = 0x8000\n\tMTD_INODE_FS_MAGIC                   = 0x11307854\n\tNAME_MAX                             = 0xff\n\tNCP_SUPER_MAGIC                      = 0x564c\n\tNETLINK_ADD_MEMBERSHIP               = 0x1\n\tNETLINK_AUDIT                        = 0x9\n\tNETLINK_BROADCAST_ERROR              = 0x4\n\tNETLINK_CAP_ACK                      = 0xa\n\tNETLINK_CONNECTOR                    = 0xb\n\tNETLINK_CRYPTO                       = 0x15\n\tNETLINK_DNRTMSG                      = 0xe\n\tNETLINK_DROP_MEMBERSHIP              = 0x2\n\tNETLINK_ECRYPTFS                     = 0x13\n\tNETLINK_EXT_ACK                      = 0xb\n\tNETLINK_FIB_LOOKUP                   = 0xa\n\tNETLINK_FIREWALL                     = 0x3\n\tNETLINK_GENERIC                      = 0x10\n\tNETLINK_GET_STRICT_CHK               = 0xc\n\tNETLINK_INET_DIAG                    = 0x4\n\tNETLINK_IP6_FW                       = 0xd\n\tNETLINK_ISCSI                        = 0x8\n\tNETLINK_KOBJECT_UEVENT               = 0xf\n\tNETLINK_LISTEN_ALL_NSID              = 0x8\n\tNETLINK_LIST_MEMBERSHIPS             = 0x9\n\tNETLINK_NETFILTER                    = 0xc\n\tNETLINK_NFLOG                        = 0x5\n\tNETLINK_NO_ENOBUFS                   = 0x5\n\tNETLINK_PKTINFO                      = 0x3\n\tNETLINK_RDMA                         = 0x14\n\tNETLINK_ROUTE                        = 0x0\n\tNETLINK_RX_RING                      = 0x6\n\tNETLINK_SCSITRANSPORT                = 0x12\n\tNETLINK_SELINUX                      = 0x7\n\tNETLINK_SMC                          = 0x16\n\tNETLINK_SOCK_DIAG                    = 0x4\n\tNETLINK_TX_RING                      = 0x7\n\tNETLINK_UNUSED                       = 0x1\n\tNETLINK_USERSOCK                     = 0x2\n\tNETLINK_XFRM                         = 0x6\n\tNETNSA_MAX                           = 0x5\n\tNETNSA_NSID_NOT_ASSIGNED             = -0x1\n\tNFNETLINK_V0                         = 0x0\n\tNFNLGRP_ACCT_QUOTA                   = 0x8\n\tNFNLGRP_CONNTRACK_DESTROY            = 0x3\n\tNFNLGRP_CONNTRACK_EXP_DESTROY        = 0x6\n\tNFNLGRP_CONNTRACK_EXP_NEW            = 0x4\n\tNFNLGRP_CONNTRACK_EXP_UPDATE         = 0x5\n\tNFNLGRP_CONNTRACK_NEW                = 0x1\n\tNFNLGRP_CONNTRACK_UPDATE             = 0x2\n\tNFNLGRP_MAX                          = 0x9\n\tNFNLGRP_NFTABLES                     = 0x7\n\tNFNLGRP_NFTRACE                      = 0x9\n\tNFNLGRP_NONE                         = 0x0\n\tNFNL_BATCH_MAX                       = 0x1\n\tNFNL_MSG_BATCH_BEGIN                 = 0x10\n\tNFNL_MSG_BATCH_END                   = 0x11\n\tNFNL_NFA_NEST                        = 0x8000\n\tNFNL_SUBSYS_ACCT                     = 0x7\n\tNFNL_SUBSYS_COUNT                    = 0xc\n\tNFNL_SUBSYS_CTHELPER                 = 0x9\n\tNFNL_SUBSYS_CTNETLINK                = 0x1\n\tNFNL_SUBSYS_CTNETLINK_EXP            = 0x2\n\tNFNL_SUBSYS_CTNETLINK_TIMEOUT        = 0x8\n\tNFNL_SUBSYS_IPSET                    = 0x6\n\tNFNL_SUBSYS_NFTABLES                 = 0xa\n\tNFNL_SUBSYS_NFT_COMPAT               = 0xb\n\tNFNL_SUBSYS_NONE                     = 0x0\n\tNFNL_SUBSYS_OSF                      = 0x5\n\tNFNL_SUBSYS_QUEUE                    = 0x3\n\tNFNL_SUBSYS_ULOG                     = 0x4\n\tNFS_SUPER_MAGIC                      = 0x6969\n\tNILFS_SUPER_MAGIC                    = 0x3434\n\tNL0                                  = 0x0\n\tNL1                                  = 0x100\n\tNLA_ALIGNTO                          = 0x4\n\tNLA_F_NESTED                         = 0x8000\n\tNLA_F_NET_BYTEORDER                  = 0x4000\n\tNLA_HDRLEN                           = 0x4\n\tNLDLY                                = 0x100\n\tNLMSG_ALIGNTO                        = 0x4\n\tNLMSG_DONE                           = 0x3\n\tNLMSG_ERROR                          = 0x2\n\tNLMSG_HDRLEN                         = 0x10\n\tNLMSG_MIN_TYPE                       = 0x10\n\tNLMSG_NOOP                           = 0x1\n\tNLMSG_OVERRUN                        = 0x4\n\tNLM_F_ACK                            = 0x4\n\tNLM_F_ACK_TLVS                       = 0x200\n\tNLM_F_APPEND                         = 0x800\n\tNLM_F_ATOMIC                         = 0x400\n\tNLM_F_CAPPED                         = 0x100\n\tNLM_F_CREATE                         = 0x400\n\tNLM_F_DUMP                           = 0x300\n\tNLM_F_DUMP_FILTERED                  = 0x20\n\tNLM_F_DUMP_INTR                      = 0x10\n\tNLM_F_ECHO                           = 0x8\n\tNLM_F_EXCL                           = 0x200\n\tNLM_F_MATCH                          = 0x200\n\tNLM_F_MULTI                          = 0x2\n\tNLM_F_NONREC                         = 0x100\n\tNLM_F_REPLACE                        = 0x100\n\tNLM_F_REQUEST                        = 0x1\n\tNLM_F_ROOT                           = 0x100\n\tNOFLSH                               = 0x80\n\tNSFS_MAGIC                           = 0x6e736673\n\tOCFS2_SUPER_MAGIC                    = 0x7461636f\n\tOCRNL                                = 0x8\n\tOFDEL                                = 0x80\n\tOFILL                                = 0x40\n\tOLCUC                                = 0x2\n\tONLCR                                = 0x4\n\tONLRET                               = 0x20\n\tONOCR                                = 0x10\n\tOPENPROM_SUPER_MAGIC                 = 0x9fa1\n\tOPOST                                = 0x1\n\tOVERLAYFS_SUPER_MAGIC                = 0x794c7630\n\tO_ACCMODE                            = 0x3\n\tO_APPEND                             = 0x8\n\tO_ASYNC                              = 0x1000\n\tO_CLOEXEC                            = 0x80000\n\tO_CREAT                              = 0x100\n\tO_DIRECT                             = 0x8000\n\tO_DIRECTORY                          = 0x10000\n\tO_DSYNC                              = 0x10\n\tO_EXCL                               = 0x400\n\tO_FSYNC                              = 0x4010\n\tO_LARGEFILE                          = 0x2000\n\tO_NDELAY                             = 0x80\n\tO_NOATIME                            = 0x40000\n\tO_NOCTTY                             = 0x800\n\tO_NOFOLLOW                           = 0x20000\n\tO_NONBLOCK                           = 0x80\n\tO_PATH                               = 0x200000\n\tO_RDONLY                             = 0x0\n\tO_RDWR                               = 0x2\n\tO_RSYNC                              = 0x4010\n\tO_SYNC                               = 0x4010\n\tO_TMPFILE                            = 0x410000\n\tO_TRUNC                              = 0x200\n\tO_WRONLY                             = 0x1\n\tPACKET_ADD_MEMBERSHIP                = 0x1\n\tPACKET_AUXDATA                       = 0x8\n\tPACKET_BROADCAST                     = 0x1\n\tPACKET_COPY_THRESH                   = 0x7\n\tPACKET_DROP_MEMBERSHIP               = 0x2\n\tPACKET_FANOUT                        = 0x12\n\tPACKET_FANOUT_CBPF                   = 0x6\n\tPACKET_FANOUT_CPU                    = 0x2\n\tPACKET_FANOUT_DATA                   = 0x16\n\tPACKET_FANOUT_EBPF                   = 0x7\n\tPACKET_FANOUT_FLAG_DEFRAG            = 0x8000\n\tPACKET_FANOUT_FLAG_ROLLOVER          = 0x1000\n\tPACKET_FANOUT_FLAG_UNIQUEID          = 0x2000\n\tPACKET_FANOUT_HASH                   = 0x0\n\tPACKET_FANOUT_LB                     = 0x1\n\tPACKET_FANOUT_QM                     = 0x5\n\tPACKET_FANOUT_RND                    = 0x4\n\tPACKET_FANOUT_ROLLOVER               = 0x3\n\tPACKET_FASTROUTE                     = 0x6\n\tPACKET_HDRLEN                        = 0xb\n\tPACKET_HOST                          = 0x0\n\tPACKET_IGNORE_OUTGOING               = 0x17\n\tPACKET_KERNEL                        = 0x7\n\tPACKET_LOOPBACK                      = 0x5\n\tPACKET_LOSS                          = 0xe\n\tPACKET_MR_ALLMULTI                   = 0x2\n\tPACKET_MR_MULTICAST                  = 0x0\n\tPACKET_MR_PROMISC                    = 0x1\n\tPACKET_MR_UNICAST                    = 0x3\n\tPACKET_MULTICAST                     = 0x2\n\tPACKET_ORIGDEV                       = 0x9\n\tPACKET_OTHERHOST                     = 0x3\n\tPACKET_OUTGOING                      = 0x4\n\tPACKET_QDISC_BYPASS                  = 0x14\n\tPACKET_RECV_OUTPUT                   = 0x3\n\tPACKET_RESERVE                       = 0xc\n\tPACKET_ROLLOVER_STATS                = 0x15\n\tPACKET_RX_RING                       = 0x5\n\tPACKET_STATISTICS                    = 0x6\n\tPACKET_TIMESTAMP                     = 0x11\n\tPACKET_TX_HAS_OFF                    = 0x13\n\tPACKET_TX_RING                       = 0xd\n\tPACKET_TX_TIMESTAMP                  = 0x10\n\tPACKET_USER                          = 0x6\n\tPACKET_VERSION                       = 0xa\n\tPACKET_VNET_HDR                      = 0xf\n\tPARENB                               = 0x100\n\tPARITY_CRC16_PR0                     = 0x2\n\tPARITY_CRC16_PR0_CCITT               = 0x4\n\tPARITY_CRC16_PR1                     = 0x3\n\tPARITY_CRC16_PR1_CCITT               = 0x5\n\tPARITY_CRC32_PR0_CCITT               = 0x6\n\tPARITY_CRC32_PR1_CCITT               = 0x7\n\tPARITY_DEFAULT                       = 0x0\n\tPARITY_NONE                          = 0x1\n\tPARMRK                               = 0x8\n\tPARODD                               = 0x200\n\tPENDIN                               = 0x4000\n\tPERF_EVENT_IOC_DISABLE               = 0x20002401\n\tPERF_EVENT_IOC_ENABLE                = 0x20002400\n\tPERF_EVENT_IOC_ID                    = 0x40042407\n\tPERF_EVENT_IOC_MODIFY_ATTRIBUTES     = 0x8004240b\n\tPERF_EVENT_IOC_PAUSE_OUTPUT          = 0x80042409\n\tPERF_EVENT_IOC_PERIOD                = 0x80082404\n\tPERF_EVENT_IOC_QUERY_BPF             = 0xc004240a\n\tPERF_EVENT_IOC_REFRESH               = 0x20002402\n\tPERF_EVENT_IOC_RESET                 = 0x20002403\n\tPERF_EVENT_IOC_SET_BPF               = 0x80042408\n\tPERF_EVENT_IOC_SET_FILTER            = 0x80042406\n\tPERF_EVENT_IOC_SET_OUTPUT            = 0x20002405\n\tPIPEFS_MAGIC                         = 0x50495045\n\tPPPIOCATTACH                         = 0x8004743d\n\tPPPIOCATTCHAN                        = 0x80047438\n\tPPPIOCCONNECT                        = 0x8004743a\n\tPPPIOCDETACH                         = 0x8004743c\n\tPPPIOCDISCONN                        = 0x20007439\n\tPPPIOCGASYNCMAP                      = 0x40047458\n\tPPPIOCGCHAN                          = 0x40047437\n\tPPPIOCGDEBUG                         = 0x40047441\n\tPPPIOCGFLAGS                         = 0x4004745a\n\tPPPIOCGIDLE                          = 0x4008743f\n\tPPPIOCGL2TPSTATS                     = 0x40487436\n\tPPPIOCGMRU                           = 0x40047453\n\tPPPIOCGNPMODE                        = 0xc008744c\n\tPPPIOCGRASYNCMAP                     = 0x40047455\n\tPPPIOCGUNIT                          = 0x40047456\n\tPPPIOCGXASYNCMAP                     = 0x40207450\n\tPPPIOCNEWUNIT                        = 0xc004743e\n\tPPPIOCSACTIVE                        = 0x80087446\n\tPPPIOCSASYNCMAP                      = 0x80047457\n\tPPPIOCSCOMPRESS                      = 0x800c744d\n\tPPPIOCSDEBUG                         = 0x80047440\n\tPPPIOCSFLAGS                         = 0x80047459\n\tPPPIOCSMAXCID                        = 0x80047451\n\tPPPIOCSMRRU                          = 0x8004743b\n\tPPPIOCSMRU                           = 0x80047452\n\tPPPIOCSNPMODE                        = 0x8008744b\n\tPPPIOCSPASS                          = 0x80087447\n\tPPPIOCSRASYNCMAP                     = 0x80047454\n\tPPPIOCSXASYNCMAP                     = 0x8020744f\n\tPPPIOCXFERUNIT                       = 0x2000744e\n\tPRIO_PGRP                            = 0x1\n\tPRIO_PROCESS                         = 0x0\n\tPRIO_USER                            = 0x2\n\tPROC_SUPER_MAGIC                     = 0x9fa0\n\tPROT_EXEC                            = 0x4\n\tPROT_GROWSDOWN                       = 0x1000000\n\tPROT_GROWSUP                         = 0x2000000\n\tPROT_NONE                            = 0x0\n\tPROT_READ                            = 0x1\n\tPROT_WRITE                           = 0x2\n\tPR_CAPBSET_DROP                      = 0x18\n\tPR_CAPBSET_READ                      = 0x17\n\tPR_CAP_AMBIENT                       = 0x2f\n\tPR_CAP_AMBIENT_CLEAR_ALL             = 0x4\n\tPR_CAP_AMBIENT_IS_SET                = 0x1\n\tPR_CAP_AMBIENT_LOWER                 = 0x3\n\tPR_CAP_AMBIENT_RAISE                 = 0x2\n\tPR_ENDIAN_BIG                        = 0x0\n\tPR_ENDIAN_LITTLE                     = 0x1\n\tPR_ENDIAN_PPC_LITTLE                 = 0x2\n\tPR_FPEMU_NOPRINT                     = 0x1\n\tPR_FPEMU_SIGFPE                      = 0x2\n\tPR_FP_EXC_ASYNC                      = 0x2\n\tPR_FP_EXC_DISABLED                   = 0x0\n\tPR_FP_EXC_DIV                        = 0x10000\n\tPR_FP_EXC_INV                        = 0x100000\n\tPR_FP_EXC_NONRECOV                   = 0x1\n\tPR_FP_EXC_OVF                        = 0x20000\n\tPR_FP_EXC_PRECISE                    = 0x3\n\tPR_FP_EXC_RES                        = 0x80000\n\tPR_FP_EXC_SW_ENABLE                  = 0x80\n\tPR_FP_EXC_UND                        = 0x40000\n\tPR_FP_MODE_FR                        = 0x1\n\tPR_FP_MODE_FRE                       = 0x2\n\tPR_GET_CHILD_SUBREAPER               = 0x25\n\tPR_GET_DUMPABLE                      = 0x3\n\tPR_GET_ENDIAN                        = 0x13\n\tPR_GET_FPEMU                         = 0x9\n\tPR_GET_FPEXC                         = 0xb\n\tPR_GET_FP_MODE                       = 0x2e\n\tPR_GET_KEEPCAPS                      = 0x7\n\tPR_GET_NAME                          = 0x10\n\tPR_GET_NO_NEW_PRIVS                  = 0x27\n\tPR_GET_PDEATHSIG                     = 0x2\n\tPR_GET_SECCOMP                       = 0x15\n\tPR_GET_SECUREBITS                    = 0x1b\n\tPR_GET_SPECULATION_CTRL              = 0x34\n\tPR_GET_THP_DISABLE                   = 0x2a\n\tPR_GET_TID_ADDRESS                   = 0x28\n\tPR_GET_TIMERSLACK                    = 0x1e\n\tPR_GET_TIMING                        = 0xd\n\tPR_GET_TSC                           = 0x19\n\tPR_GET_UNALIGN                       = 0x5\n\tPR_MCE_KILL                          = 0x21\n\tPR_MCE_KILL_CLEAR                    = 0x0\n\tPR_MCE_KILL_DEFAULT                  = 0x2\n\tPR_MCE_KILL_EARLY                    = 0x1\n\tPR_MCE_KILL_GET                      = 0x22\n\tPR_MCE_KILL_LATE                     = 0x0\n\tPR_MCE_KILL_SET                      = 0x1\n\tPR_MPX_DISABLE_MANAGEMENT            = 0x2c\n\tPR_MPX_ENABLE_MANAGEMENT             = 0x2b\n\tPR_PAC_APDAKEY                       = 0x4\n\tPR_PAC_APDBKEY                       = 0x8\n\tPR_PAC_APGAKEY                       = 0x10\n\tPR_PAC_APIAKEY                       = 0x1\n\tPR_PAC_APIBKEY                       = 0x2\n\tPR_PAC_RESET_KEYS                    = 0x36\n\tPR_SET_CHILD_SUBREAPER               = 0x24\n\tPR_SET_DUMPABLE                      = 0x4\n\tPR_SET_ENDIAN                        = 0x14\n\tPR_SET_FPEMU                         = 0xa\n\tPR_SET_FPEXC                         = 0xc\n\tPR_SET_FP_MODE                       = 0x2d\n\tPR_SET_KEEPCAPS                      = 0x8\n\tPR_SET_MM                            = 0x23\n\tPR_SET_MM_ARG_END                    = 0x9\n\tPR_SET_MM_ARG_START                  = 0x8\n\tPR_SET_MM_AUXV                       = 0xc\n\tPR_SET_MM_BRK                        = 0x7\n\tPR_SET_MM_END_CODE                   = 0x2\n\tPR_SET_MM_END_DATA                   = 0x4\n\tPR_SET_MM_ENV_END                    = 0xb\n\tPR_SET_MM_ENV_START                  = 0xa\n\tPR_SET_MM_EXE_FILE                   = 0xd\n\tPR_SET_MM_MAP                        = 0xe\n\tPR_SET_MM_MAP_SIZE                   = 0xf\n\tPR_SET_MM_START_BRK                  = 0x6\n\tPR_SET_MM_START_CODE                 = 0x1\n\tPR_SET_MM_START_DATA                 = 0x3\n\tPR_SET_MM_START_STACK                = 0x5\n\tPR_SET_NAME                          = 0xf\n\tPR_SET_NO_NEW_PRIVS                  = 0x26\n\tPR_SET_PDEATHSIG                     = 0x1\n\tPR_SET_PTRACER                       = 0x59616d61\n\tPR_SET_PTRACER_ANY                   = 0xffffffff\n\tPR_SET_SECCOMP                       = 0x16\n\tPR_SET_SECUREBITS                    = 0x1c\n\tPR_SET_SPECULATION_CTRL              = 0x35\n\tPR_SET_THP_DISABLE                   = 0x29\n\tPR_SET_TIMERSLACK                    = 0x1d\n\tPR_SET_TIMING                        = 0xe\n\tPR_SET_TSC                           = 0x1a\n\tPR_SET_UNALIGN                       = 0x6\n\tPR_SPEC_DISABLE                      = 0x4\n\tPR_SPEC_DISABLE_NOEXEC               = 0x10\n\tPR_SPEC_ENABLE                       = 0x2\n\tPR_SPEC_FORCE_DISABLE                = 0x8\n\tPR_SPEC_INDIRECT_BRANCH              = 0x1\n\tPR_SPEC_NOT_AFFECTED                 = 0x0\n\tPR_SPEC_PRCTL                        = 0x1\n\tPR_SPEC_STORE_BYPASS                 = 0x0\n\tPR_SVE_GET_VL                        = 0x33\n\tPR_SVE_SET_VL                        = 0x32\n\tPR_SVE_SET_VL_ONEXEC                 = 0x40000\n\tPR_SVE_VL_INHERIT                    = 0x20000\n\tPR_SVE_VL_LEN_MASK                   = 0xffff\n\tPR_TASK_PERF_EVENTS_DISABLE          = 0x1f\n\tPR_TASK_PERF_EVENTS_ENABLE           = 0x20\n\tPR_TIMING_STATISTICAL                = 0x0\n\tPR_TIMING_TIMESTAMP                  = 0x1\n\tPR_TSC_ENABLE                        = 0x1\n\tPR_TSC_SIGSEGV                       = 0x2\n\tPR_UNALIGN_NOPRINT                   = 0x1\n\tPR_UNALIGN_SIGBUS                    = 0x2\n\tPSTOREFS_MAGIC                       = 0x6165676c\n\tPTRACE_ATTACH                        = 0x10\n\tPTRACE_CONT                          = 0x7\n\tPTRACE_DETACH                        = 0x11\n\tPTRACE_EVENT_CLONE                   = 0x3\n\tPTRACE_EVENT_EXEC                    = 0x4\n\tPTRACE_EVENT_EXIT                    = 0x6\n\tPTRACE_EVENT_FORK                    = 0x1\n\tPTRACE_EVENT_SECCOMP                 = 0x7\n\tPTRACE_EVENT_STOP                    = 0x80\n\tPTRACE_EVENT_VFORK                   = 0x2\n\tPTRACE_EVENT_VFORK_DONE              = 0x5\n\tPTRACE_GETEVENTMSG                   = 0x4201\n\tPTRACE_GETFPREGS                     = 0xe\n\tPTRACE_GETREGS                       = 0xc\n\tPTRACE_GETREGSET                     = 0x4204\n\tPTRACE_GETSIGINFO                    = 0x4202\n\tPTRACE_GETSIGMASK                    = 0x420a\n\tPTRACE_GET_THREAD_AREA               = 0x19\n\tPTRACE_GET_THREAD_AREA_3264          = 0xc4\n\tPTRACE_GET_WATCH_REGS                = 0xd0\n\tPTRACE_INTERRUPT                     = 0x4207\n\tPTRACE_KILL                          = 0x8\n\tPTRACE_LISTEN                        = 0x4208\n\tPTRACE_OLDSETOPTIONS                 = 0x15\n\tPTRACE_O_EXITKILL                    = 0x100000\n\tPTRACE_O_MASK                        = 0x3000ff\n\tPTRACE_O_SUSPEND_SECCOMP             = 0x200000\n\tPTRACE_O_TRACECLONE                  = 0x8\n\tPTRACE_O_TRACEEXEC                   = 0x10\n\tPTRACE_O_TRACEEXIT                   = 0x40\n\tPTRACE_O_TRACEFORK                   = 0x2\n\tPTRACE_O_TRACESECCOMP                = 0x80\n\tPTRACE_O_TRACESYSGOOD                = 0x1\n\tPTRACE_O_TRACEVFORK                  = 0x4\n\tPTRACE_O_TRACEVFORKDONE              = 0x20\n\tPTRACE_PEEKDATA                      = 0x2\n\tPTRACE_PEEKDATA_3264                 = 0xc1\n\tPTRACE_PEEKSIGINFO                   = 0x4209\n\tPTRACE_PEEKSIGINFO_SHARED            = 0x1\n\tPTRACE_PEEKTEXT                      = 0x1\n\tPTRACE_PEEKTEXT_3264                 = 0xc0\n\tPTRACE_PEEKUSR                       = 0x3\n\tPTRACE_POKEDATA                      = 0x5\n\tPTRACE_POKEDATA_3264                 = 0xc3\n\tPTRACE_POKETEXT                      = 0x4\n\tPTRACE_POKETEXT_3264                 = 0xc2\n\tPTRACE_POKEUSR                       = 0x6\n\tPTRACE_SECCOMP_GET_FILTER            = 0x420c\n\tPTRACE_SECCOMP_GET_METADATA          = 0x420d\n\tPTRACE_SEIZE                         = 0x4206\n\tPTRACE_SETFPREGS                     = 0xf\n\tPTRACE_SETOPTIONS                    = 0x4200\n\tPTRACE_SETREGS                       = 0xd\n\tPTRACE_SETREGSET                     = 0x4205\n\tPTRACE_SETSIGINFO                    = 0x4203\n\tPTRACE_SETSIGMASK                    = 0x420b\n\tPTRACE_SET_THREAD_AREA               = 0x1a\n\tPTRACE_SET_WATCH_REGS                = 0xd1\n\tPTRACE_SINGLESTEP                    = 0x9\n\tPTRACE_SYSCALL                       = 0x18\n\tPTRACE_TRACEME                       = 0x0\n\tQNX4_SUPER_MAGIC                     = 0x2f\n\tQNX6_SUPER_MAGIC                     = 0x68191122\n\tRAMFS_MAGIC                          = 0x858458f6\n\tRDTGROUP_SUPER_MAGIC                 = 0x7655821\n\tREISERFS_SUPER_MAGIC                 = 0x52654973\n\tRENAME_EXCHANGE                      = 0x2\n\tRENAME_NOREPLACE                     = 0x1\n\tRENAME_WHITEOUT                      = 0x4\n\tRLIMIT_AS                            = 0x6\n\tRLIMIT_CORE                          = 0x4\n\tRLIMIT_CPU                           = 0x0\n\tRLIMIT_DATA                          = 0x2\n\tRLIMIT_FSIZE                         = 0x1\n\tRLIMIT_LOCKS                         = 0xa\n\tRLIMIT_MEMLOCK                       = 0x9\n\tRLIMIT_MSGQUEUE                      = 0xc\n\tRLIMIT_NICE                          = 0xd\n\tRLIMIT_NOFILE                        = 0x5\n\tRLIMIT_NPROC                         = 0x8\n\tRLIMIT_RSS                           = 0x7\n\tRLIMIT_RTPRIO                        = 0xe\n\tRLIMIT_RTTIME                        = 0xf\n\tRLIMIT_SIGPENDING                    = 0xb\n\tRLIMIT_STACK                         = 0x3\n\tRLIM_INFINITY                        = 0xffffffffffffffff\n\tRNDADDENTROPY                        = 0x80085203\n\tRNDADDTOENTCNT                       = 0x80045201\n\tRNDCLEARPOOL                         = 0x20005206\n\tRNDGETENTCNT                         = 0x40045200\n\tRNDGETPOOL                           = 0x40085202\n\tRNDRESEEDCRNG                        = 0x20005207\n\tRNDZAPENTCNT                         = 0x20005204\n\tRTAX_ADVMSS                          = 0x8\n\tRTAX_CC_ALGO                         = 0x10\n\tRTAX_CWND                            = 0x7\n\tRTAX_FASTOPEN_NO_COOKIE              = 0x11\n\tRTAX_FEATURES                        = 0xc\n\tRTAX_FEATURE_ALLFRAG                 = 0x8\n\tRTAX_FEATURE_ECN                     = 0x1\n\tRTAX_FEATURE_MASK                    = 0xf\n\tRTAX_FEATURE_SACK                    = 0x2\n\tRTAX_FEATURE_TIMESTAMP               = 0x4\n\tRTAX_HOPLIMIT                        = 0xa\n\tRTAX_INITCWND                        = 0xb\n\tRTAX_INITRWND                        = 0xe\n\tRTAX_LOCK                            = 0x1\n\tRTAX_MAX                             = 0x11\n\tRTAX_MTU                             = 0x2\n\tRTAX_QUICKACK                        = 0xf\n\tRTAX_REORDERING                      = 0x9\n\tRTAX_RTO_MIN                         = 0xd\n\tRTAX_RTT                             = 0x4\n\tRTAX_RTTVAR                          = 0x5\n\tRTAX_SSTHRESH                        = 0x6\n\tRTAX_UNSPEC                          = 0x0\n\tRTAX_WINDOW                          = 0x3\n\tRTA_ALIGNTO                          = 0x4\n\tRTA_MAX                              = 0x1d\n\tRTCF_DIRECTSRC                       = 0x4000000\n\tRTCF_DOREDIRECT                      = 0x1000000\n\tRTCF_LOG                             = 0x2000000\n\tRTCF_MASQ                            = 0x400000\n\tRTCF_NAT                             = 0x800000\n\tRTCF_VALVE                           = 0x200000\n\tRTC_AF                               = 0x20\n\tRTC_AIE_OFF                          = 0x20007002\n\tRTC_AIE_ON                           = 0x20007001\n\tRTC_ALM_READ                         = 0x40247008\n\tRTC_ALM_SET                          = 0x80247007\n\tRTC_EPOCH_READ                       = 0x4004700d\n\tRTC_EPOCH_SET                        = 0x8004700e\n\tRTC_IRQF                             = 0x80\n\tRTC_IRQP_READ                        = 0x4004700b\n\tRTC_IRQP_SET                         = 0x8004700c\n\tRTC_MAX_FREQ                         = 0x2000\n\tRTC_PF                               = 0x40\n\tRTC_PIE_OFF                          = 0x20007006\n\tRTC_PIE_ON                           = 0x20007005\n\tRTC_PLL_GET                          = 0x401c7011\n\tRTC_PLL_SET                          = 0x801c7012\n\tRTC_RD_TIME                          = 0x40247009\n\tRTC_SET_TIME                         = 0x8024700a\n\tRTC_UF                               = 0x10\n\tRTC_UIE_OFF                          = 0x20007004\n\tRTC_UIE_ON                           = 0x20007003\n\tRTC_VL_CLR                           = 0x20007014\n\tRTC_VL_READ                          = 0x40047013\n\tRTC_WIE_OFF                          = 0x20007010\n\tRTC_WIE_ON                           = 0x2000700f\n\tRTC_WKALM_RD                         = 0x40287010\n\tRTC_WKALM_SET                        = 0x8028700f\n\tRTF_ADDRCLASSMASK                    = 0xf8000000\n\tRTF_ADDRCONF                         = 0x40000\n\tRTF_ALLONLINK                        = 0x20000\n\tRTF_BROADCAST                        = 0x10000000\n\tRTF_CACHE                            = 0x1000000\n\tRTF_DEFAULT                          = 0x10000\n\tRTF_DYNAMIC                          = 0x10\n\tRTF_FLOW                             = 0x2000000\n\tRTF_GATEWAY                          = 0x2\n\tRTF_HOST                             = 0x4\n\tRTF_INTERFACE                        = 0x40000000\n\tRTF_IRTT                             = 0x100\n\tRTF_LINKRT                           = 0x100000\n\tRTF_LOCAL                            = 0x80000000\n\tRTF_MODIFIED                         = 0x20\n\tRTF_MSS                              = 0x40\n\tRTF_MTU                              = 0x40\n\tRTF_MULTICAST                        = 0x20000000\n\tRTF_NAT                              = 0x8000000\n\tRTF_NOFORWARD                        = 0x1000\n\tRTF_NONEXTHOP                        = 0x200000\n\tRTF_NOPMTUDISC                       = 0x4000\n\tRTF_POLICY                           = 0x4000000\n\tRTF_REINSTATE                        = 0x8\n\tRTF_REJECT                           = 0x200\n\tRTF_STATIC                           = 0x400\n\tRTF_THROW                            = 0x2000\n\tRTF_UP                               = 0x1\n\tRTF_WINDOW                           = 0x80\n\tRTF_XRESOLVE                         = 0x800\n\tRTM_BASE                             = 0x10\n\tRTM_DELACTION                        = 0x31\n\tRTM_DELADDR                          = 0x15\n\tRTM_DELADDRLABEL                     = 0x49\n\tRTM_DELCHAIN                         = 0x65\n\tRTM_DELLINK                          = 0x11\n\tRTM_DELMDB                           = 0x55\n\tRTM_DELNEIGH                         = 0x1d\n\tRTM_DELNETCONF                       = 0x51\n\tRTM_DELNSID                          = 0x59\n\tRTM_DELQDISC                         = 0x25\n\tRTM_DELROUTE                         = 0x19\n\tRTM_DELRULE                          = 0x21\n\tRTM_DELTCLASS                        = 0x29\n\tRTM_DELTFILTER                       = 0x2d\n\tRTM_F_CLONED                         = 0x200\n\tRTM_F_EQUALIZE                       = 0x400\n\tRTM_F_FIB_MATCH                      = 0x2000\n\tRTM_F_LOOKUP_TABLE                   = 0x1000\n\tRTM_F_NOTIFY                         = 0x100\n\tRTM_F_PREFIX                         = 0x800\n\tRTM_GETACTION                        = 0x32\n\tRTM_GETADDR                          = 0x16\n\tRTM_GETADDRLABEL                     = 0x4a\n\tRTM_GETANYCAST                       = 0x3e\n\tRTM_GETCHAIN                         = 0x66\n\tRTM_GETDCB                           = 0x4e\n\tRTM_GETLINK                          = 0x12\n\tRTM_GETMDB                           = 0x56\n\tRTM_GETMULTICAST                     = 0x3a\n\tRTM_GETNEIGH                         = 0x1e\n\tRTM_GETNEIGHTBL                      = 0x42\n\tRTM_GETNETCONF                       = 0x52\n\tRTM_GETNSID                          = 0x5a\n\tRTM_GETQDISC                         = 0x26\n\tRTM_GETROUTE                         = 0x1a\n\tRTM_GETRULE                          = 0x22\n\tRTM_GETSTATS                         = 0x5e\n\tRTM_GETTCLASS                        = 0x2a\n\tRTM_GETTFILTER                       = 0x2e\n\tRTM_MAX                              = 0x67\n\tRTM_NEWACTION                        = 0x30\n\tRTM_NEWADDR                          = 0x14\n\tRTM_NEWADDRLABEL                     = 0x48\n\tRTM_NEWCACHEREPORT                   = 0x60\n\tRTM_NEWCHAIN                         = 0x64\n\tRTM_NEWLINK                          = 0x10\n\tRTM_NEWMDB                           = 0x54\n\tRTM_NEWNDUSEROPT                     = 0x44\n\tRTM_NEWNEIGH                         = 0x1c\n\tRTM_NEWNEIGHTBL                      = 0x40\n\tRTM_NEWNETCONF                       = 0x50\n\tRTM_NEWNSID                          = 0x58\n\tRTM_NEWPREFIX                        = 0x34\n\tRTM_NEWQDISC                         = 0x24\n\tRTM_NEWROUTE                         = 0x18\n\tRTM_NEWRULE                          = 0x20\n\tRTM_NEWSTATS                         = 0x5c\n\tRTM_NEWTCLASS                        = 0x28\n\tRTM_NEWTFILTER                       = 0x2c\n\tRTM_NR_FAMILIES                      = 0x16\n\tRTM_NR_MSGTYPES                      = 0x58\n\tRTM_SETDCB                           = 0x4f\n\tRTM_SETLINK                          = 0x13\n\tRTM_SETNEIGHTBL                      = 0x43\n\tRTNH_ALIGNTO                         = 0x4\n\tRTNH_COMPARE_MASK                    = 0x19\n\tRTNH_F_DEAD                          = 0x1\n\tRTNH_F_LINKDOWN                      = 0x10\n\tRTNH_F_OFFLOAD                       = 0x8\n\tRTNH_F_ONLINK                        = 0x4\n\tRTNH_F_PERVASIVE                     = 0x2\n\tRTNH_F_UNRESOLVED                    = 0x20\n\tRTN_MAX                              = 0xb\n\tRTPROT_BABEL                         = 0x2a\n\tRTPROT_BGP                           = 0xba\n\tRTPROT_BIRD                          = 0xc\n\tRTPROT_BOOT                          = 0x3\n\tRTPROT_DHCP                          = 0x10\n\tRTPROT_DNROUTED                      = 0xd\n\tRTPROT_EIGRP                         = 0xc0\n\tRTPROT_GATED                         = 0x8\n\tRTPROT_ISIS                          = 0xbb\n\tRTPROT_KERNEL                        = 0x2\n\tRTPROT_MROUTED                       = 0x11\n\tRTPROT_MRT                           = 0xa\n\tRTPROT_NTK                           = 0xf\n\tRTPROT_OSPF                          = 0xbc\n\tRTPROT_RA                            = 0x9\n\tRTPROT_REDIRECT                      = 0x1\n\tRTPROT_RIP                           = 0xbd\n\tRTPROT_STATIC                        = 0x4\n\tRTPROT_UNSPEC                        = 0x0\n\tRTPROT_XORP                          = 0xe\n\tRTPROT_ZEBRA                         = 0xb\n\tRT_CLASS_DEFAULT                     = 0xfd\n\tRT_CLASS_LOCAL                       = 0xff\n\tRT_CLASS_MAIN                        = 0xfe\n\tRT_CLASS_MAX                         = 0xff\n\tRT_CLASS_UNSPEC                      = 0x0\n\tRUSAGE_CHILDREN                      = -0x1\n\tRUSAGE_SELF                          = 0x0\n\tRUSAGE_THREAD                        = 0x1\n\tSCM_CREDENTIALS                      = 0x2\n\tSCM_RIGHTS                           = 0x1\n\tSCM_TIMESTAMP                        = 0x1d\n\tSCM_TIMESTAMPING                     = 0x25\n\tSCM_TIMESTAMPING_OPT_STATS           = 0x36\n\tSCM_TIMESTAMPING_PKTINFO             = 0x3a\n\tSCM_TIMESTAMPNS                      = 0x23\n\tSCM_TXTIME                           = 0x3d\n\tSCM_WIFI_STATUS                      = 0x29\n\tSC_LOG_FLUSH                         = 0x100000\n\tSECCOMP_MODE_DISABLED                = 0x0\n\tSECCOMP_MODE_FILTER                  = 0x2\n\tSECCOMP_MODE_STRICT                  = 0x1\n\tSECURITYFS_MAGIC                     = 0x73636673\n\tSELINUX_MAGIC                        = 0xf97cff8c\n\tSFD_CLOEXEC                          = 0x80000\n\tSFD_NONBLOCK                         = 0x80\n\tSHUT_RD                              = 0x0\n\tSHUT_RDWR                            = 0x2\n\tSHUT_WR                              = 0x1\n\tSIOCADDDLCI                          = 0x8980\n\tSIOCADDMULTI                         = 0x8931\n\tSIOCADDRT                            = 0x890b\n\tSIOCATMARK                           = 0x40047307\n\tSIOCBONDCHANGEACTIVE                 = 0x8995\n\tSIOCBONDENSLAVE                      = 0x8990\n\tSIOCBONDINFOQUERY                    = 0x8994\n\tSIOCBONDRELEASE                      = 0x8991\n\tSIOCBONDSETHWADDR                    = 0x8992\n\tSIOCBONDSLAVEINFOQUERY               = 0x8993\n\tSIOCBRADDBR                          = 0x89a0\n\tSIOCBRADDIF                          = 0x89a2\n\tSIOCBRDELBR                          = 0x89a1\n\tSIOCBRDELIF                          = 0x89a3\n\tSIOCDARP                             = 0x8953\n\tSIOCDELDLCI                          = 0x8981\n\tSIOCDELMULTI                         = 0x8932\n\tSIOCDELRT                            = 0x890c\n\tSIOCDEVPRIVATE                       = 0x89f0\n\tSIOCDIFADDR                          = 0x8936\n\tSIOCDRARP                            = 0x8960\n\tSIOCETHTOOL                          = 0x8946\n\tSIOCGARP                             = 0x8954\n\tSIOCGHWTSTAMP                        = 0x89b1\n\tSIOCGIFADDR                          = 0x8915\n\tSIOCGIFBR                            = 0x8940\n\tSIOCGIFBRDADDR                       = 0x8919\n\tSIOCGIFCONF                          = 0x8912\n\tSIOCGIFCOUNT                         = 0x8938\n\tSIOCGIFDSTADDR                       = 0x8917\n\tSIOCGIFENCAP                         = 0x8925\n\tSIOCGIFFLAGS                         = 0x8913\n\tSIOCGIFHWADDR                        = 0x8927\n\tSIOCGIFINDEX                         = 0x8933\n\tSIOCGIFMAP                           = 0x8970\n\tSIOCGIFMEM                           = 0x891f\n\tSIOCGIFMETRIC                        = 0x891d\n\tSIOCGIFMTU                           = 0x8921\n\tSIOCGIFNAME                          = 0x8910\n\tSIOCGIFNETMASK                       = 0x891b\n\tSIOCGIFPFLAGS                        = 0x8935\n\tSIOCGIFSLAVE                         = 0x8929\n\tSIOCGIFTXQLEN                        = 0x8942\n\tSIOCGIFVLAN                          = 0x8982\n\tSIOCGMIIPHY                          = 0x8947\n\tSIOCGMIIREG                          = 0x8948\n\tSIOCGPGRP                            = 0x40047309\n\tSIOCGPPPCSTATS                       = 0x89f2\n\tSIOCGPPPSTATS                        = 0x89f0\n\tSIOCGPPPVER                          = 0x89f1\n\tSIOCGRARP                            = 0x8961\n\tSIOCGSKNS                            = 0x894c\n\tSIOCGSTAMP                           = 0x8906\n\tSIOCGSTAMPNS                         = 0x8907\n\tSIOCINQ                              = 0x467f\n\tSIOCOUTQ                             = 0x7472\n\tSIOCOUTQNSD                          = 0x894b\n\tSIOCPROTOPRIVATE                     = 0x89e0\n\tSIOCRTMSG                            = 0x890d\n\tSIOCSARP                             = 0x8955\n\tSIOCSHWTSTAMP                        = 0x89b0\n\tSIOCSIFADDR                          = 0x8916\n\tSIOCSIFBR                            = 0x8941\n\tSIOCSIFBRDADDR                       = 0x891a\n\tSIOCSIFDSTADDR                       = 0x8918\n\tSIOCSIFENCAP                         = 0x8926\n\tSIOCSIFFLAGS                         = 0x8914\n\tSIOCSIFHWADDR                        = 0x8924\n\tSIOCSIFHWBROADCAST                   = 0x8937\n\tSIOCSIFLINK                          = 0x8911\n\tSIOCSIFMAP                           = 0x8971\n\tSIOCSIFMEM                           = 0x8920\n\tSIOCSIFMETRIC                        = 0x891e\n\tSIOCSIFMTU                           = 0x8922\n\tSIOCSIFNAME                          = 0x8923\n\tSIOCSIFNETMASK                       = 0x891c\n\tSIOCSIFPFLAGS                        = 0x8934\n\tSIOCSIFSLAVE                         = 0x8930\n\tSIOCSIFTXQLEN                        = 0x8943\n\tSIOCSIFVLAN                          = 0x8983\n\tSIOCSMIIREG                          = 0x8949\n\tSIOCSPGRP                            = 0x80047308\n\tSIOCSRARP                            = 0x8962\n\tSIOCWANDEV                           = 0x894a\n\tSMACK_MAGIC                          = 0x43415d53\n\tSMART_AUTOSAVE                       = 0xd2\n\tSMART_AUTO_OFFLINE                   = 0xdb\n\tSMART_DISABLE                        = 0xd9\n\tSMART_ENABLE                         = 0xd8\n\tSMART_HCYL_PASS                      = 0xc2\n\tSMART_IMMEDIATE_OFFLINE              = 0xd4\n\tSMART_LCYL_PASS                      = 0x4f\n\tSMART_READ_LOG_SECTOR                = 0xd5\n\tSMART_READ_THRESHOLDS                = 0xd1\n\tSMART_READ_VALUES                    = 0xd0\n\tSMART_SAVE                           = 0xd3\n\tSMART_STATUS                         = 0xda\n\tSMART_WRITE_LOG_SECTOR               = 0xd6\n\tSMART_WRITE_THRESHOLDS               = 0xd7\n\tSMB_SUPER_MAGIC                      = 0x517b\n\tSOCKFS_MAGIC                         = 0x534f434b\n\tSOCK_CLOEXEC                         = 0x80000\n\tSOCK_DCCP                            = 0x6\n\tSOCK_DGRAM                           = 0x1\n\tSOCK_IOC_TYPE                        = 0x89\n\tSOCK_NONBLOCK                        = 0x80\n\tSOCK_PACKET                          = 0xa\n\tSOCK_RAW                             = 0x3\n\tSOCK_RDM                             = 0x4\n\tSOCK_SEQPACKET                       = 0x5\n\tSOCK_STREAM                          = 0x2\n\tSOL_AAL                              = 0x109\n\tSOL_ALG                              = 0x117\n\tSOL_ATM                              = 0x108\n\tSOL_CAIF                             = 0x116\n\tSOL_CAN_BASE                         = 0x64\n\tSOL_DCCP                             = 0x10d\n\tSOL_DECNET                           = 0x105\n\tSOL_ICMPV6                           = 0x3a\n\tSOL_IP                               = 0x0\n\tSOL_IPV6                             = 0x29\n\tSOL_IRDA                             = 0x10a\n\tSOL_IUCV                             = 0x115\n\tSOL_KCM                              = 0x119\n\tSOL_LLC                              = 0x10c\n\tSOL_NETBEUI                          = 0x10b\n\tSOL_NETLINK                          = 0x10e\n\tSOL_NFC                              = 0x118\n\tSOL_PACKET                           = 0x107\n\tSOL_PNPIPE                           = 0x113\n\tSOL_PPPOL2TP                         = 0x111\n\tSOL_RAW                              = 0xff\n\tSOL_RDS                              = 0x114\n\tSOL_RXRPC                            = 0x110\n\tSOL_SOCKET                           = 0xffff\n\tSOL_TCP                              = 0x6\n\tSOL_TIPC                             = 0x10f\n\tSOL_TLS                              = 0x11a\n\tSOL_X25                              = 0x106\n\tSOL_XDP                              = 0x11b\n\tSOMAXCONN                            = 0x80\n\tSO_ACCEPTCONN                        = 0x1009\n\tSO_ATTACH_BPF                        = 0x32\n\tSO_ATTACH_FILTER                     = 0x1a\n\tSO_ATTACH_REUSEPORT_CBPF             = 0x33\n\tSO_ATTACH_REUSEPORT_EBPF             = 0x34\n\tSO_BINDTODEVICE                      = 0x19\n\tSO_BINDTOIFINDEX                     = 0x3e\n\tSO_BPF_EXTENSIONS                    = 0x30\n\tSO_BROADCAST                         = 0x20\n\tSO_BSDCOMPAT                         = 0xe\n\tSO_BUSY_POLL                         = 0x2e\n\tSO_CNX_ADVICE                        = 0x35\n\tSO_COOKIE                            = 0x39\n\tSO_DEBUG                             = 0x1\n\tSO_DETACH_BPF                        = 0x1b\n\tSO_DETACH_FILTER                     = 0x1b\n\tSO_DOMAIN                            = 0x1029\n\tSO_DONTROUTE                         = 0x10\n\tSO_EE_CODE_TXTIME_INVALID_PARAM      = 0x1\n\tSO_EE_CODE_TXTIME_MISSED             = 0x2\n\tSO_EE_CODE_ZEROCOPY_COPIED           = 0x1\n\tSO_EE_ORIGIN_ICMP                    = 0x2\n\tSO_EE_ORIGIN_ICMP6                   = 0x3\n\tSO_EE_ORIGIN_LOCAL                   = 0x1\n\tSO_EE_ORIGIN_NONE                    = 0x0\n\tSO_EE_ORIGIN_TIMESTAMPING            = 0x4\n\tSO_EE_ORIGIN_TXSTATUS                = 0x4\n\tSO_EE_ORIGIN_TXTIME                  = 0x6\n\tSO_EE_ORIGIN_ZEROCOPY                = 0x5\n\tSO_ERROR                             = 0x1007\n\tSO_GET_FILTER                        = 0x1a\n\tSO_INCOMING_CPU                      = 0x31\n\tSO_INCOMING_NAPI_ID                  = 0x38\n\tSO_KEEPALIVE                         = 0x8\n\tSO_LINGER                            = 0x80\n\tSO_LOCK_FILTER                       = 0x2c\n\tSO_MARK                              = 0x24\n\tSO_MAX_PACING_RATE                   = 0x2f\n\tSO_MEMINFO                           = 0x37\n\tSO_NOFCS                             = 0x2b\n\tSO_NO_CHECK                          = 0xb\n\tSO_OOBINLINE                         = 0x100\n\tSO_PASSCRED                          = 0x11\n\tSO_PASSSEC                           = 0x22\n\tSO_PEEK_OFF                          = 0x2a\n\tSO_PEERCRED                          = 0x12\n\tSO_PEERGROUPS                        = 0x3b\n\tSO_PEERNAME                          = 0x1c\n\tSO_PEERSEC                           = 0x1e\n\tSO_PRIORITY                          = 0xc\n\tSO_PROTOCOL                          = 0x1028\n\tSO_RCVBUF                            = 0x1002\n\tSO_RCVBUFFORCE                       = 0x21\n\tSO_RCVLOWAT                          = 0x1004\n\tSO_RCVTIMEO                          = 0x1006\n\tSO_RCVTIMEO_NEW                      = 0x42\n\tSO_RCVTIMEO_OLD                      = 0x1006\n\tSO_REUSEADDR                         = 0x4\n\tSO_REUSEPORT                         = 0x200\n\tSO_RXQ_OVFL                          = 0x28\n\tSO_SECURITY_AUTHENTICATION           = 0x16\n\tSO_SECURITY_ENCRYPTION_NETWORK       = 0x18\n\tSO_SECURITY_ENCRYPTION_TRANSPORT     = 0x17\n\tSO_SELECT_ERR_QUEUE                  = 0x2d\n\tSO_SNDBUF                            = 0x1001\n\tSO_SNDBUFFORCE                       = 0x1f\n\tSO_SNDLOWAT                          = 0x1003\n\tSO_SNDTIMEO                          = 0x1005\n\tSO_SNDTIMEO_NEW                      = 0x43\n\tSO_SNDTIMEO_OLD                      = 0x1005\n\tSO_STYLE                             = 0x1008\n\tSO_TIMESTAMP                         = 0x1d\n\tSO_TIMESTAMPING                      = 0x25\n\tSO_TIMESTAMPING_NEW                  = 0x41\n\tSO_TIMESTAMPING_OLD                  = 0x25\n\tSO_TIMESTAMPNS                       = 0x23\n\tSO_TIMESTAMPNS_NEW                   = 0x40\n\tSO_TIMESTAMPNS_OLD                   = 0x23\n\tSO_TIMESTAMP_NEW                     = 0x3f\n\tSO_TIMESTAMP_OLD                     = 0x1d\n\tSO_TXTIME                            = 0x3d\n\tSO_TYPE                              = 0x1008\n\tSO_VM_SOCKETS_BUFFER_MAX_SIZE        = 0x2\n\tSO_VM_SOCKETS_BUFFER_MIN_SIZE        = 0x1\n\tSO_VM_SOCKETS_BUFFER_SIZE            = 0x0\n\tSO_VM_SOCKETS_CONNECT_TIMEOUT        = 0x6\n\tSO_VM_SOCKETS_NONBLOCK_TXRX          = 0x7\n\tSO_VM_SOCKETS_PEER_HOST_VM_ID        = 0x3\n\tSO_VM_SOCKETS_TRUSTED                = 0x5\n\tSO_WIFI_STATUS                       = 0x29\n\tSO_ZEROCOPY                          = 0x3c\n\tSPLICE_F_GIFT                        = 0x8\n\tSPLICE_F_MORE                        = 0x4\n\tSPLICE_F_MOVE                        = 0x1\n\tSPLICE_F_NONBLOCK                    = 0x2\n\tSQUASHFS_MAGIC                       = 0x73717368\n\tSTACK_END_MAGIC                      = 0x57ac6e9d\n\tSTATX_ALL                            = 0xfff\n\tSTATX_ATIME                          = 0x20\n\tSTATX_ATTR_APPEND                    = 0x20\n\tSTATX_ATTR_AUTOMOUNT                 = 0x1000\n\tSTATX_ATTR_COMPRESSED                = 0x4\n\tSTATX_ATTR_ENCRYPTED                 = 0x800\n\tSTATX_ATTR_IMMUTABLE                 = 0x10\n\tSTATX_ATTR_NODUMP                    = 0x40\n\tSTATX_BASIC_STATS                    = 0x7ff\n\tSTATX_BLOCKS                         = 0x400\n\tSTATX_BTIME                          = 0x800\n\tSTATX_CTIME                          = 0x80\n\tSTATX_GID                            = 0x10\n\tSTATX_INO                            = 0x100\n\tSTATX_MODE                           = 0x2\n\tSTATX_MTIME                          = 0x40\n\tSTATX_NLINK                          = 0x4\n\tSTATX_SIZE                           = 0x200\n\tSTATX_TYPE                           = 0x1\n\tSTATX_UID                            = 0x8\n\tSTATX__RESERVED                      = 0x80000000\n\tSYNC_FILE_RANGE_WAIT_AFTER           = 0x4\n\tSYNC_FILE_RANGE_WAIT_BEFORE          = 0x1\n\tSYNC_FILE_RANGE_WRITE                = 0x2\n\tSYSFS_MAGIC                          = 0x62656572\n\tS_BLKSIZE                            = 0x200\n\tS_IEXEC                              = 0x40\n\tS_IFBLK                              = 0x6000\n\tS_IFCHR                              = 0x2000\n\tS_IFDIR                              = 0x4000\n\tS_IFIFO                              = 0x1000\n\tS_IFLNK                              = 0xa000\n\tS_IFMT                               = 0xf000\n\tS_IFREG                              = 0x8000\n\tS_IFSOCK                             = 0xc000\n\tS_IREAD                              = 0x100\n\tS_IRGRP                              = 0x20\n\tS_IROTH                              = 0x4\n\tS_IRUSR                              = 0x100\n\tS_IRWXG                              = 0x38\n\tS_IRWXO                              = 0x7\n\tS_IRWXU                              = 0x1c0\n\tS_ISGID                              = 0x400\n\tS_ISUID                              = 0x800\n\tS_ISVTX                              = 0x200\n\tS_IWGRP                              = 0x10\n\tS_IWOTH                              = 0x2\n\tS_IWRITE                             = 0x80\n\tS_IWUSR                              = 0x80\n\tS_IXGRP                              = 0x8\n\tS_IXOTH                              = 0x1\n\tS_IXUSR                              = 0x40\n\tTAB0                                 = 0x0\n\tTAB1                                 = 0x800\n\tTAB2                                 = 0x1000\n\tTAB3                                 = 0x1800\n\tTABDLY                               = 0x1800\n\tTASKSTATS_CMD_ATTR_MAX               = 0x4\n\tTASKSTATS_CMD_MAX                    = 0x2\n\tTASKSTATS_GENL_NAME                  = \"TASKSTATS\"\n\tTASKSTATS_GENL_VERSION               = 0x1\n\tTASKSTATS_TYPE_MAX                   = 0x6\n\tTASKSTATS_VERSION                    = 0x9\n\tTCFLSH                               = 0x5407\n\tTCGETA                               = 0x5401\n\tTCGETS                               = 0x540d\n\tTCGETS2                              = 0x4030542a\n\tTCIFLUSH                             = 0x0\n\tTCIOFF                               = 0x2\n\tTCIOFLUSH                            = 0x2\n\tTCION                                = 0x3\n\tTCOFLUSH                             = 0x1\n\tTCOOFF                               = 0x0\n\tTCOON                                = 0x1\n\tTCP_BPF_IW                           = 0x3e9\n\tTCP_BPF_SNDCWND_CLAMP                = 0x3ea\n\tTCP_CC_INFO                          = 0x1a\n\tTCP_CM_INQ                           = 0x24\n\tTCP_CONGESTION                       = 0xd\n\tTCP_COOKIE_IN_ALWAYS                 = 0x1\n\tTCP_COOKIE_MAX                       = 0x10\n\tTCP_COOKIE_MIN                       = 0x8\n\tTCP_COOKIE_OUT_NEVER                 = 0x2\n\tTCP_COOKIE_PAIR_SIZE                 = 0x20\n\tTCP_COOKIE_TRANSACTIONS              = 0xf\n\tTCP_CORK                             = 0x3\n\tTCP_DEFER_ACCEPT                     = 0x9\n\tTCP_FASTOPEN                         = 0x17\n\tTCP_FASTOPEN_CONNECT                 = 0x1e\n\tTCP_FASTOPEN_KEY                     = 0x21\n\tTCP_FASTOPEN_NO_COOKIE               = 0x22\n\tTCP_INFO                             = 0xb\n\tTCP_INQ                              = 0x24\n\tTCP_KEEPCNT                          = 0x6\n\tTCP_KEEPIDLE                         = 0x4\n\tTCP_KEEPINTVL                        = 0x5\n\tTCP_LINGER2                          = 0x8\n\tTCP_MAXSEG                           = 0x2\n\tTCP_MAXWIN                           = 0xffff\n\tTCP_MAX_WINSHIFT                     = 0xe\n\tTCP_MD5SIG                           = 0xe\n\tTCP_MD5SIG_EXT                       = 0x20\n\tTCP_MD5SIG_FLAG_PREFIX               = 0x1\n\tTCP_MD5SIG_MAXKEYLEN                 = 0x50\n\tTCP_MSS                              = 0x200\n\tTCP_MSS_DEFAULT                      = 0x218\n\tTCP_MSS_DESIRED                      = 0x4c4\n\tTCP_NODELAY                          = 0x1\n\tTCP_NOTSENT_LOWAT                    = 0x19\n\tTCP_QUEUE_SEQ                        = 0x15\n\tTCP_QUICKACK                         = 0xc\n\tTCP_REPAIR                           = 0x13\n\tTCP_REPAIR_OFF                       = 0x0\n\tTCP_REPAIR_OFF_NO_WP                 = -0x1\n\tTCP_REPAIR_ON                        = 0x1\n\tTCP_REPAIR_OPTIONS                   = 0x16\n\tTCP_REPAIR_QUEUE                     = 0x14\n\tTCP_REPAIR_WINDOW                    = 0x1d\n\tTCP_SAVED_SYN                        = 0x1c\n\tTCP_SAVE_SYN                         = 0x1b\n\tTCP_SYNCNT                           = 0x7\n\tTCP_S_DATA_IN                        = 0x4\n\tTCP_S_DATA_OUT                       = 0x8\n\tTCP_THIN_DUPACK                      = 0x11\n\tTCP_THIN_LINEAR_TIMEOUTS             = 0x10\n\tTCP_TIMESTAMP                        = 0x18\n\tTCP_ULP                              = 0x1f\n\tTCP_USER_TIMEOUT                     = 0x12\n\tTCP_WINDOW_CLAMP                     = 0xa\n\tTCP_ZEROCOPY_RECEIVE                 = 0x23\n\tTCSAFLUSH                            = 0x5410\n\tTCSBRK                               = 0x5405\n\tTCSBRKP                              = 0x5486\n\tTCSETA                               = 0x5402\n\tTCSETAF                              = 0x5404\n\tTCSETAW                              = 0x5403\n\tTCSETS                               = 0x540e\n\tTCSETS2                              = 0x8030542b\n\tTCSETSF                              = 0x5410\n\tTCSETSF2                             = 0x8030542d\n\tTCSETSW                              = 0x540f\n\tTCSETSW2                             = 0x8030542c\n\tTCXONC                               = 0x5406\n\tTIMER_ABSTIME                        = 0x1\n\tTIOCCBRK                             = 0x5428\n\tTIOCCONS                             = 0x80047478\n\tTIOCEXCL                             = 0x740d\n\tTIOCGDEV                             = 0x40045432\n\tTIOCGETD                             = 0x7400\n\tTIOCGETP                             = 0x7408\n\tTIOCGEXCL                            = 0x40045440\n\tTIOCGICOUNT                          = 0x5492\n\tTIOCGISO7816                         = 0x40285442\n\tTIOCGLCKTRMIOS                       = 0x548b\n\tTIOCGLTC                             = 0x7474\n\tTIOCGPGRP                            = 0x40047477\n\tTIOCGPKT                             = 0x40045438\n\tTIOCGPTLCK                           = 0x40045439\n\tTIOCGPTN                             = 0x40045430\n\tTIOCGPTPEER                          = 0x20005441\n\tTIOCGRS485                           = 0x4020542e\n\tTIOCGSERIAL                          = 0x5484\n\tTIOCGSID                             = 0x7416\n\tTIOCGSOFTCAR                         = 0x5481\n\tTIOCGWINSZ                           = 0x40087468\n\tTIOCINQ                              = 0x467f\n\tTIOCLINUX                            = 0x5483\n\tTIOCMBIC                             = 0x741c\n\tTIOCMBIS                             = 0x741b\n\tTIOCMGET                             = 0x741d\n\tTIOCMIWAIT                           = 0x5491\n\tTIOCMSET                             = 0x741a\n\tTIOCM_CAR                            = 0x100\n\tTIOCM_CD                             = 0x100\n\tTIOCM_CTS                            = 0x40\n\tTIOCM_DSR                            = 0x400\n\tTIOCM_DTR                            = 0x2\n\tTIOCM_LE                             = 0x1\n\tTIOCM_RI                             = 0x200\n\tTIOCM_RNG                            = 0x200\n\tTIOCM_RTS                            = 0x4\n\tTIOCM_SR                             = 0x20\n\tTIOCM_ST                             = 0x10\n\tTIOCNOTTY                            = 0x5471\n\tTIOCNXCL                             = 0x740e\n\tTIOCOUTQ                             = 0x7472\n\tTIOCPKT                              = 0x5470\n\tTIOCPKT_DATA                         = 0x0\n\tTIOCPKT_DOSTOP                       = 0x20\n\tTIOCPKT_FLUSHREAD                    = 0x1\n\tTIOCPKT_FLUSHWRITE                   = 0x2\n\tTIOCPKT_IOCTL                        = 0x40\n\tTIOCPKT_NOSTOP                       = 0x10\n\tTIOCPKT_START                        = 0x8\n\tTIOCPKT_STOP                         = 0x4\n\tTIOCSBRK                             = 0x5427\n\tTIOCSCTTY                            = 0x5480\n\tTIOCSERCONFIG                        = 0x5488\n\tTIOCSERGETLSR                        = 0x548e\n\tTIOCSERGETMULTI                      = 0x548f\n\tTIOCSERGSTRUCT                       = 0x548d\n\tTIOCSERGWILD                         = 0x5489\n\tTIOCSERSETMULTI                      = 0x5490\n\tTIOCSERSWILD                         = 0x548a\n\tTIOCSER_TEMT                         = 0x1\n\tTIOCSETD                             = 0x7401\n\tTIOCSETN                             = 0x740a\n\tTIOCSETP                             = 0x7409\n\tTIOCSIG                              = 0x80045436\n\tTIOCSISO7816                         = 0xc0285443\n\tTIOCSLCKTRMIOS                       = 0x548c\n\tTIOCSLTC                             = 0x7475\n\tTIOCSPGRP                            = 0x80047476\n\tTIOCSPTLCK                           = 0x80045431\n\tTIOCSRS485                           = 0xc020542f\n\tTIOCSSERIAL                          = 0x5485\n\tTIOCSSOFTCAR                         = 0x5482\n\tTIOCSTI                              = 0x5472\n\tTIOCSWINSZ                           = 0x80087467\n\tTIOCVHANGUP                          = 0x5437\n\tTMPFS_MAGIC                          = 0x1021994\n\tTOSTOP                               = 0x8000\n\tTPACKET_ALIGNMENT                    = 0x10\n\tTPACKET_HDRLEN                       = 0x34\n\tTP_STATUS_AVAILABLE                  = 0x0\n\tTP_STATUS_BLK_TMO                    = 0x20\n\tTP_STATUS_COPY                       = 0x2\n\tTP_STATUS_CSUMNOTREADY               = 0x8\n\tTP_STATUS_CSUM_VALID                 = 0x80\n\tTP_STATUS_KERNEL                     = 0x0\n\tTP_STATUS_LOSING                     = 0x4\n\tTP_STATUS_SENDING                    = 0x2\n\tTP_STATUS_SEND_REQUEST               = 0x1\n\tTP_STATUS_TS_RAW_HARDWARE            = -0x80000000\n\tTP_STATUS_TS_SOFTWARE                = 0x20000000\n\tTP_STATUS_TS_SYS_HARDWARE            = 0x40000000\n\tTP_STATUS_USER                       = 0x1\n\tTP_STATUS_VLAN_TPID_VALID            = 0x40\n\tTP_STATUS_VLAN_VALID                 = 0x10\n\tTP_STATUS_WRONG_FORMAT               = 0x4\n\tTRACEFS_MAGIC                        = 0x74726163\n\tTS_COMM_LEN                          = 0x20\n\tTUNATTACHFILTER                      = 0x800854d5\n\tTUNDETACHFILTER                      = 0x800854d6\n\tTUNGETFEATURES                       = 0x400454cf\n\tTUNGETFILTER                         = 0x400854db\n\tTUNGETIFF                            = 0x400454d2\n\tTUNGETSNDBUF                         = 0x400454d3\n\tTUNGETVNETBE                         = 0x400454df\n\tTUNGETVNETHDRSZ                      = 0x400454d7\n\tTUNGETVNETLE                         = 0x400454dd\n\tTUNSETCARRIER                        = 0x800454e2\n\tTUNSETDEBUG                          = 0x800454c9\n\tTUNSETFILTEREBPF                     = 0x400454e1\n\tTUNSETGROUP                          = 0x800454ce\n\tTUNSETIFF                            = 0x800454ca\n\tTUNSETIFINDEX                        = 0x800454da\n\tTUNSETLINK                           = 0x800454cd\n\tTUNSETNOCSUM                         = 0x800454c8\n\tTUNSETOFFLOAD                        = 0x800454d0\n\tTUNSETOWNER                          = 0x800454cc\n\tTUNSETPERSIST                        = 0x800454cb\n\tTUNSETQUEUE                          = 0x800454d9\n\tTUNSETSNDBUF                         = 0x800454d4\n\tTUNSETSTEERINGEBPF                   = 0x400454e0\n\tTUNSETTXFILTER                       = 0x800454d1\n\tTUNSETVNETBE                         = 0x800454de\n\tTUNSETVNETHDRSZ                      = 0x800454d8\n\tTUNSETVNETLE                         = 0x800454dc\n\tUBI_IOCATT                           = 0x80186f40\n\tUBI_IOCDET                           = 0x80046f41\n\tUBI_IOCEBCH                          = 0x80044f02\n\tUBI_IOCEBER                          = 0x80044f01\n\tUBI_IOCEBISMAP                       = 0x40044f05\n\tUBI_IOCEBMAP                         = 0x80084f03\n\tUBI_IOCEBUNMAP                       = 0x80044f04\n\tUBI_IOCMKVOL                         = 0x80986f00\n\tUBI_IOCRMVOL                         = 0x80046f01\n\tUBI_IOCRNVOL                         = 0x91106f03\n\tUBI_IOCRPEB                          = 0x80046f04\n\tUBI_IOCRSVOL                         = 0x800c6f02\n\tUBI_IOCSETVOLPROP                    = 0x80104f06\n\tUBI_IOCSPEB                          = 0x80046f05\n\tUBI_IOCVOLCRBLK                      = 0x80804f07\n\tUBI_IOCVOLRMBLK                      = 0x20004f08\n\tUBI_IOCVOLUP                         = 0x80084f00\n\tUDF_SUPER_MAGIC                      = 0x15013346\n\tUMOUNT_NOFOLLOW                      = 0x8\n\tUSBDEVICE_SUPER_MAGIC                = 0x9fa2\n\tUTIME_NOW                            = 0x3fffffff\n\tUTIME_OMIT                           = 0x3ffffffe\n\tV9FS_MAGIC                           = 0x1021997\n\tVDISCARD                             = 0xd\n\tVEOF                                 = 0x10\n\tVEOL                                 = 0x11\n\tVEOL2                                = 0x6\n\tVERASE                               = 0x2\n\tVINTR                                = 0x0\n\tVKILL                                = 0x3\n\tVLNEXT                               = 0xf\n\tVMADDR_CID_ANY                       = 0xffffffff\n\tVMADDR_CID_HOST                      = 0x2\n\tVMADDR_CID_HYPERVISOR                = 0x0\n\tVMADDR_CID_RESERVED                  = 0x1\n\tVMADDR_PORT_ANY                      = 0xffffffff\n\tVMIN                                 = 0x4\n\tVM_SOCKETS_INVALID_VERSION           = 0xffffffff\n\tVQUIT                                = 0x1\n\tVREPRINT                             = 0xc\n\tVSTART                               = 0x8\n\tVSTOP                                = 0x9\n\tVSUSP                                = 0xa\n\tVSWTC                                = 0x7\n\tVSWTCH                               = 0x7\n\tVT0                                  = 0x0\n\tVT1                                  = 0x4000\n\tVTDLY                                = 0x4000\n\tVTIME                                = 0x5\n\tVWERASE                              = 0xe\n\tWALL                                 = 0x40000000\n\tWCLONE                               = 0x80000000\n\tWCONTINUED                           = 0x8\n\tWDIOC_GETBOOTSTATUS                  = 0x40045702\n\tWDIOC_GETPRETIMEOUT                  = 0x40045709\n\tWDIOC_GETSTATUS                      = 0x40045701\n\tWDIOC_GETSUPPORT                     = 0x40285700\n\tWDIOC_GETTEMP                        = 0x40045703\n\tWDIOC_GETTIMELEFT                    = 0x4004570a\n\tWDIOC_GETTIMEOUT                     = 0x40045707\n\tWDIOC_KEEPALIVE                      = 0x40045705\n\tWDIOC_SETOPTIONS                     = 0x40045704\n\tWDIOC_SETPRETIMEOUT                  = 0xc0045708\n\tWDIOC_SETTIMEOUT                     = 0xc0045706\n\tWEXITED                              = 0x4\n\tWIN_ACKMEDIACHANGE                   = 0xdb\n\tWIN_CHECKPOWERMODE1                  = 0xe5\n\tWIN_CHECKPOWERMODE2                  = 0x98\n\tWIN_DEVICE_RESET                     = 0x8\n\tWIN_DIAGNOSE                         = 0x90\n\tWIN_DOORLOCK                         = 0xde\n\tWIN_DOORUNLOCK                       = 0xdf\n\tWIN_DOWNLOAD_MICROCODE               = 0x92\n\tWIN_FLUSH_CACHE                      = 0xe7\n\tWIN_FLUSH_CACHE_EXT                  = 0xea\n\tWIN_FORMAT                           = 0x50\n\tWIN_GETMEDIASTATUS                   = 0xda\n\tWIN_IDENTIFY                         = 0xec\n\tWIN_IDENTIFY_DMA                     = 0xee\n\tWIN_IDLEIMMEDIATE                    = 0xe1\n\tWIN_INIT                             = 0x60\n\tWIN_MEDIAEJECT                       = 0xed\n\tWIN_MULTREAD                         = 0xc4\n\tWIN_MULTREAD_EXT                     = 0x29\n\tWIN_MULTWRITE                        = 0xc5\n\tWIN_MULTWRITE_EXT                    = 0x39\n\tWIN_NOP                              = 0x0\n\tWIN_PACKETCMD                        = 0xa0\n\tWIN_PIDENTIFY                        = 0xa1\n\tWIN_POSTBOOT                         = 0xdc\n\tWIN_PREBOOT                          = 0xdd\n\tWIN_QUEUED_SERVICE                   = 0xa2\n\tWIN_READ                             = 0x20\n\tWIN_READDMA                          = 0xc8\n\tWIN_READDMA_EXT                      = 0x25\n\tWIN_READDMA_ONCE                     = 0xc9\n\tWIN_READDMA_QUEUED                   = 0xc7\n\tWIN_READDMA_QUEUED_EXT               = 0x26\n\tWIN_READ_BUFFER                      = 0xe4\n\tWIN_READ_EXT                         = 0x24\n\tWIN_READ_LONG                        = 0x22\n\tWIN_READ_LONG_ONCE                   = 0x23\n\tWIN_READ_NATIVE_MAX                  = 0xf8\n\tWIN_READ_NATIVE_MAX_EXT              = 0x27\n\tWIN_READ_ONCE                        = 0x21\n\tWIN_RECAL                            = 0x10\n\tWIN_RESTORE                          = 0x10\n\tWIN_SECURITY_DISABLE                 = 0xf6\n\tWIN_SECURITY_ERASE_PREPARE           = 0xf3\n\tWIN_SECURITY_ERASE_UNIT              = 0xf4\n\tWIN_SECURITY_FREEZE_LOCK             = 0xf5\n\tWIN_SECURITY_SET_PASS                = 0xf1\n\tWIN_SECURITY_UNLOCK                  = 0xf2\n\tWIN_SEEK                             = 0x70\n\tWIN_SETFEATURES                      = 0xef\n\tWIN_SETIDLE1                         = 0xe3\n\tWIN_SETIDLE2                         = 0x97\n\tWIN_SETMULT                          = 0xc6\n\tWIN_SET_MAX                          = 0xf9\n\tWIN_SET_MAX_EXT                      = 0x37\n\tWIN_SLEEPNOW1                        = 0xe6\n\tWIN_SLEEPNOW2                        = 0x99\n\tWIN_SMART                            = 0xb0\n\tWIN_SPECIFY                          = 0x91\n\tWIN_SRST                             = 0x8\n\tWIN_STANDBY                          = 0xe2\n\tWIN_STANDBY2                         = 0x96\n\tWIN_STANDBYNOW1                      = 0xe0\n\tWIN_STANDBYNOW2                      = 0x94\n\tWIN_VERIFY                           = 0x40\n\tWIN_VERIFY_EXT                       = 0x42\n\tWIN_VERIFY_ONCE                      = 0x41\n\tWIN_WRITE                            = 0x30\n\tWIN_WRITEDMA                         = 0xca\n\tWIN_WRITEDMA_EXT                     = 0x35\n\tWIN_WRITEDMA_ONCE                    = 0xcb\n\tWIN_WRITEDMA_QUEUED                  = 0xcc\n\tWIN_WRITEDMA_QUEUED_EXT              = 0x36\n\tWIN_WRITE_BUFFER                     = 0xe8\n\tWIN_WRITE_EXT                        = 0x34\n\tWIN_WRITE_LONG                       = 0x32\n\tWIN_WRITE_LONG_ONCE                  = 0x33\n\tWIN_WRITE_ONCE                       = 0x31\n\tWIN_WRITE_SAME                       = 0xe9\n\tWIN_WRITE_VERIFY                     = 0x3c\n\tWNOHANG                              = 0x1\n\tWNOTHREAD                            = 0x20000000\n\tWNOWAIT                              = 0x1000000\n\tWORDSIZE                             = 0x20\n\tWSTOPPED                             = 0x2\n\tWUNTRACED                            = 0x2\n\tXATTR_CREATE                         = 0x1\n\tXATTR_REPLACE                        = 0x2\n\tXCASE                                = 0x4\n\tXDP_COPY                             = 0x2\n\tXDP_FLAGS_DRV_MODE                   = 0x4\n\tXDP_FLAGS_HW_MODE                    = 0x8\n\tXDP_FLAGS_MASK                       = 0xf\n\tXDP_FLAGS_MODES                      = 0xe\n\tXDP_FLAGS_SKB_MODE                   = 0x2\n\tXDP_FLAGS_UPDATE_IF_NOEXIST          = 0x1\n\tXDP_MMAP_OFFSETS                     = 0x1\n\tXDP_PACKET_HEADROOM                  = 0x100\n\tXDP_PGOFF_RX_RING                    = 0x0\n\tXDP_PGOFF_TX_RING                    = 0x80000000\n\tXDP_RX_RING                          = 0x2\n\tXDP_SHARED_UMEM                      = 0x1\n\tXDP_STATISTICS                       = 0x7\n\tXDP_TX_RING                          = 0x3\n\tXDP_UMEM_COMPLETION_RING             = 0x6\n\tXDP_UMEM_FILL_RING                   = 0x5\n\tXDP_UMEM_PGOFF_COMPLETION_RING       = 0x180000000\n\tXDP_UMEM_PGOFF_FILL_RING             = 0x100000000\n\tXDP_UMEM_REG                         = 0x4\n\tXDP_ZEROCOPY                         = 0x4\n\tXENFS_SUPER_MAGIC                    = 0xabba1974\n\tXFS_SUPER_MAGIC                      = 0x58465342\n\tXTABS                                = 0x1800\n\tZSMALLOC_MAGIC                       = 0x58295829\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x7d)\n\tEADDRNOTAVAIL   = syscall.Errno(0x7e)\n\tEADV            = syscall.Errno(0x44)\n\tEAFNOSUPPORT    = syscall.Errno(0x7c)\n\tEAGAIN          = syscall.Errno(0xb)\n\tEALREADY        = syscall.Errno(0x95)\n\tEBADE           = syscall.Errno(0x32)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADFD          = syscall.Errno(0x51)\n\tEBADMSG         = syscall.Errno(0x4d)\n\tEBADR           = syscall.Errno(0x33)\n\tEBADRQC         = syscall.Errno(0x36)\n\tEBADSLT         = syscall.Errno(0x37)\n\tEBFONT          = syscall.Errno(0x3b)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x9e)\n\tECHILD          = syscall.Errno(0xa)\n\tECHRNG          = syscall.Errno(0x25)\n\tECOMM           = syscall.Errno(0x46)\n\tECONNABORTED    = syscall.Errno(0x82)\n\tECONNREFUSED    = syscall.Errno(0x92)\n\tECONNRESET      = syscall.Errno(0x83)\n\tEDEADLK         = syscall.Errno(0x2d)\n\tEDEADLOCK       = syscall.Errno(0x38)\n\tEDESTADDRREQ    = syscall.Errno(0x60)\n\tEDOM            = syscall.Errno(0x21)\n\tEDOTDOT         = syscall.Errno(0x49)\n\tEDQUOT          = syscall.Errno(0x46d)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEHOSTDOWN       = syscall.Errno(0x93)\n\tEHOSTUNREACH    = syscall.Errno(0x94)\n\tEHWPOISON       = syscall.Errno(0xa8)\n\tEIDRM           = syscall.Errno(0x24)\n\tEILSEQ          = syscall.Errno(0x58)\n\tEINIT           = syscall.Errno(0x8d)\n\tEINPROGRESS     = syscall.Errno(0x96)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEISCONN         = syscall.Errno(0x85)\n\tEISDIR          = syscall.Errno(0x15)\n\tEISNAM          = syscall.Errno(0x8b)\n\tEKEYEXPIRED     = syscall.Errno(0xa2)\n\tEKEYREJECTED    = syscall.Errno(0xa4)\n\tEKEYREVOKED     = syscall.Errno(0xa3)\n\tEL2HLT          = syscall.Errno(0x2c)\n\tEL2NSYNC        = syscall.Errno(0x26)\n\tEL3HLT          = syscall.Errno(0x27)\n\tEL3RST          = syscall.Errno(0x28)\n\tELIBACC         = syscall.Errno(0x53)\n\tELIBBAD         = syscall.Errno(0x54)\n\tELIBEXEC        = syscall.Errno(0x57)\n\tELIBMAX         = syscall.Errno(0x56)\n\tELIBSCN         = syscall.Errno(0x55)\n\tELNRNG          = syscall.Errno(0x29)\n\tELOOP           = syscall.Errno(0x5a)\n\tEMEDIUMTYPE     = syscall.Errno(0xa0)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x61)\n\tEMULTIHOP       = syscall.Errno(0x4a)\n\tENAMETOOLONG    = syscall.Errno(0x4e)\n\tENAVAIL         = syscall.Errno(0x8a)\n\tENETDOWN        = syscall.Errno(0x7f)\n\tENETRESET       = syscall.Errno(0x81)\n\tENETUNREACH     = syscall.Errno(0x80)\n\tENFILE          = syscall.Errno(0x17)\n\tENOANO          = syscall.Errno(0x35)\n\tENOBUFS         = syscall.Errno(0x84)\n\tENOCSI          = syscall.Errno(0x2b)\n\tENODATA         = syscall.Errno(0x3d)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOKEY          = syscall.Errno(0xa1)\n\tENOLCK          = syscall.Errno(0x2e)\n\tENOLINK         = syscall.Errno(0x43)\n\tENOMEDIUM       = syscall.Errno(0x9f)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x23)\n\tENONET          = syscall.Errno(0x40)\n\tENOPKG          = syscall.Errno(0x41)\n\tENOPROTOOPT     = syscall.Errno(0x63)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSR           = syscall.Errno(0x3f)\n\tENOSTR          = syscall.Errno(0x3c)\n\tENOSYS          = syscall.Errno(0x59)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x86)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x5d)\n\tENOTNAM         = syscall.Errno(0x89)\n\tENOTRECOVERABLE = syscall.Errno(0xa6)\n\tENOTSOCK        = syscall.Errno(0x5f)\n\tENOTSUP         = syscall.Errno(0x7a)\n\tENOTTY          = syscall.Errno(0x19)\n\tENOTUNIQ        = syscall.Errno(0x50)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x7a)\n\tEOVERFLOW       = syscall.Errno(0x4f)\n\tEOWNERDEAD      = syscall.Errno(0xa5)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x7b)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROTO          = syscall.Errno(0x47)\n\tEPROTONOSUPPORT = syscall.Errno(0x78)\n\tEPROTOTYPE      = syscall.Errno(0x62)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMCHG         = syscall.Errno(0x52)\n\tEREMDEV         = syscall.Errno(0x8e)\n\tEREMOTE         = syscall.Errno(0x42)\n\tEREMOTEIO       = syscall.Errno(0x8c)\n\tERESTART        = syscall.Errno(0x5b)\n\tERFKILL         = syscall.Errno(0xa7)\n\tEROFS           = syscall.Errno(0x1e)\n\tESHUTDOWN       = syscall.Errno(0x8f)\n\tESOCKTNOSUPPORT = syscall.Errno(0x79)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESRMNT          = syscall.Errno(0x45)\n\tESTALE          = syscall.Errno(0x97)\n\tESTRPIPE        = syscall.Errno(0x5c)\n\tETIME           = syscall.Errno(0x3e)\n\tETIMEDOUT       = syscall.Errno(0x91)\n\tETOOMANYREFS    = syscall.Errno(0x90)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUCLEAN         = syscall.Errno(0x87)\n\tEUNATCH         = syscall.Errno(0x2a)\n\tEUSERS          = syscall.Errno(0x5e)\n\tEWOULDBLOCK     = syscall.Errno(0xb)\n\tEXDEV           = syscall.Errno(0x12)\n\tEXFULL          = syscall.Errno(0x34)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x12)\n\tSIGCLD    = syscall.Signal(0x12)\n\tSIGCONT   = syscall.Signal(0x19)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x16)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPOLL   = syscall.Signal(0x16)\n\tSIGPROF   = syscall.Signal(0x1d)\n\tSIGPWR    = syscall.Signal(0x13)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTOP   = syscall.Signal(0x17)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x18)\n\tSIGTTIN   = syscall.Signal(0x1a)\n\tSIGTTOU   = syscall.Signal(0x1b)\n\tSIGURG    = syscall.Signal(0x15)\n\tSIGUSR1   = syscall.Signal(0x10)\n\tSIGUSR2   = syscall.Signal(0x11)\n\tSIGVTALRM = syscall.Signal(0x1c)\n\tSIGWINCH  = syscall.Signal(0x14)\n\tSIGXCPU   = syscall.Signal(0x1e)\n\tSIGXFSZ   = syscall.Signal(0x1f)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"no such device or address\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device or resource busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"invalid cross-device link\"},\n\t{19, \"ENODEV\", \"no such device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"numerical result out of range\"},\n\t{35, \"ENOMSG\", \"no message of desired type\"},\n\t{36, \"EIDRM\", \"identifier removed\"},\n\t{37, \"ECHRNG\", \"channel number out of range\"},\n\t{38, \"EL2NSYNC\", \"level 2 not synchronized\"},\n\t{39, \"EL3HLT\", \"level 3 halted\"},\n\t{40, \"EL3RST\", \"level 3 reset\"},\n\t{41, \"ELNRNG\", \"link number out of range\"},\n\t{42, \"EUNATCH\", \"protocol driver not attached\"},\n\t{43, \"ENOCSI\", \"no CSI structure available\"},\n\t{44, \"EL2HLT\", \"level 2 halted\"},\n\t{45, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{46, \"ENOLCK\", \"no locks available\"},\n\t{50, \"EBADE\", \"invalid exchange\"},\n\t{51, \"EBADR\", \"invalid request descriptor\"},\n\t{52, \"EXFULL\", \"exchange full\"},\n\t{53, \"ENOANO\", \"no anode\"},\n\t{54, \"EBADRQC\", \"invalid request code\"},\n\t{55, \"EBADSLT\", \"invalid slot\"},\n\t{56, \"EDEADLOCK\", \"file locking deadlock error\"},\n\t{59, \"EBFONT\", \"bad font file format\"},\n\t{60, \"ENOSTR\", \"device not a stream\"},\n\t{61, \"ENODATA\", \"no data available\"},\n\t{62, \"ETIME\", \"timer expired\"},\n\t{63, \"ENOSR\", \"out of streams resources\"},\n\t{64, \"ENONET\", \"machine is not on the network\"},\n\t{65, \"ENOPKG\", \"package not installed\"},\n\t{66, \"EREMOTE\", \"object is remote\"},\n\t{67, \"ENOLINK\", \"link has been severed\"},\n\t{68, \"EADV\", \"advertise error\"},\n\t{69, \"ESRMNT\", \"srmount error\"},\n\t{70, \"ECOMM\", \"communication error on send\"},\n\t{71, \"EPROTO\", \"protocol error\"},\n\t{73, \"EDOTDOT\", \"RFS specific error\"},\n\t{74, \"EMULTIHOP\", \"multihop attempted\"},\n\t{77, \"EBADMSG\", \"bad message\"},\n\t{78, \"ENAMETOOLONG\", \"file name too long\"},\n\t{79, \"EOVERFLOW\", \"value too large for defined data type\"},\n\t{80, \"ENOTUNIQ\", \"name not unique on network\"},\n\t{81, \"EBADFD\", \"file descriptor in bad state\"},\n\t{82, \"EREMCHG\", \"remote address changed\"},\n\t{83, \"ELIBACC\", \"can not access a needed shared library\"},\n\t{84, \"ELIBBAD\", \"accessing a corrupted shared library\"},\n\t{85, \"ELIBSCN\", \".lib section in a.out corrupted\"},\n\t{86, \"ELIBMAX\", \"attempting to link in too many shared libraries\"},\n\t{87, \"ELIBEXEC\", \"cannot exec a shared library directly\"},\n\t{88, \"EILSEQ\", \"invalid or incomplete multibyte or wide character\"},\n\t{89, \"ENOSYS\", \"function not implemented\"},\n\t{90, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{91, \"ERESTART\", \"interrupted system call should be restarted\"},\n\t{92, \"ESTRPIPE\", \"streams pipe error\"},\n\t{93, \"ENOTEMPTY\", \"directory not empty\"},\n\t{94, \"EUSERS\", \"too many users\"},\n\t{95, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{96, \"EDESTADDRREQ\", \"destination address required\"},\n\t{97, \"EMSGSIZE\", \"message too long\"},\n\t{98, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{99, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{120, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{121, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{122, \"ENOTSUP\", \"operation not supported\"},\n\t{123, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{124, \"EAFNOSUPPORT\", \"address family not supported by protocol\"},\n\t{125, \"EADDRINUSE\", \"address already in use\"},\n\t{126, \"EADDRNOTAVAIL\", \"cannot assign requested address\"},\n\t{127, \"ENETDOWN\", \"network is down\"},\n\t{128, \"ENETUNREACH\", \"network is unreachable\"},\n\t{129, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{130, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{131, \"ECONNRESET\", \"connection reset by peer\"},\n\t{132, \"ENOBUFS\", \"no buffer space available\"},\n\t{133, \"EISCONN\", \"transport endpoint is already connected\"},\n\t{134, \"ENOTCONN\", \"transport endpoint is not connected\"},\n\t{135, \"EUCLEAN\", \"structure needs cleaning\"},\n\t{137, \"ENOTNAM\", \"not a XENIX named type file\"},\n\t{138, \"ENAVAIL\", \"no XENIX semaphores available\"},\n\t{139, \"EISNAM\", \"is a named type file\"},\n\t{140, \"EREMOTEIO\", \"remote I/O error\"},\n\t{141, \"EINIT\", \"unknown error 141\"},\n\t{142, \"EREMDEV\", \"unknown error 142\"},\n\t{143, \"ESHUTDOWN\", \"cannot send after transport endpoint shutdown\"},\n\t{144, \"ETOOMANYREFS\", \"too many references: cannot splice\"},\n\t{145, \"ETIMEDOUT\", \"connection timed out\"},\n\t{146, \"ECONNREFUSED\", \"connection refused\"},\n\t{147, \"EHOSTDOWN\", \"host is down\"},\n\t{148, \"EHOSTUNREACH\", \"no route to host\"},\n\t{149, \"EALREADY\", \"operation already in progress\"},\n\t{150, \"EINPROGRESS\", \"operation now in progress\"},\n\t{151, \"ESTALE\", \"stale file handle\"},\n\t{158, \"ECANCELED\", \"operation canceled\"},\n\t{159, \"ENOMEDIUM\", \"no medium found\"},\n\t{160, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{161, \"ENOKEY\", \"required key not available\"},\n\t{162, \"EKEYEXPIRED\", \"key has expired\"},\n\t{163, \"EKEYREVOKED\", \"key has been revoked\"},\n\t{164, \"EKEYREJECTED\", \"key was rejected by service\"},\n\t{165, \"EOWNERDEAD\", \"owner died\"},\n\t{166, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{167, \"ERFKILL\", \"operation not possible due to RF-kill\"},\n\t{168, \"EHWPOISON\", \"memory page has hardware error\"},\n\t{1133, \"EDQUOT\", \"disk quota exceeded\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/breakpoint trap\"},\n\t{6, \"SIGABRT\", \"aborted\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGUSR1\", \"user defined signal 1\"},\n\t{17, \"SIGUSR2\", \"user defined signal 2\"},\n\t{18, \"SIGCHLD\", \"child exited\"},\n\t{19, \"SIGPWR\", \"power failure\"},\n\t{20, \"SIGWINCH\", \"window changed\"},\n\t{21, \"SIGURG\", \"urgent I/O condition\"},\n\t{22, \"SIGIO\", \"I/O possible\"},\n\t{23, \"SIGSTOP\", \"stopped (signal)\"},\n\t{24, \"SIGTSTP\", \"stopped\"},\n\t{25, \"SIGCONT\", \"continued\"},\n\t{26, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{27, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{28, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{29, \"SIGPROF\", \"profiling timer expired\"},\n\t{30, \"SIGXCPU\", \"CPU time limit exceeded\"},\n\t{31, \"SIGXFSZ\", \"file size limit exceeded\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go",
    "content": "// mkerrors.sh -Wall -Werror -static -I/tmp/include\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build ppc64,linux\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAAFS_MAGIC                           = 0x5a3c69f0\n\tADFS_SUPER_MAGIC                     = 0xadf5\n\tAFFS_SUPER_MAGIC                     = 0xadff\n\tAFS_FS_MAGIC                         = 0x6b414653\n\tAFS_SUPER_MAGIC                      = 0x5346414f\n\tAF_ALG                               = 0x26\n\tAF_APPLETALK                         = 0x5\n\tAF_ASH                               = 0x12\n\tAF_ATMPVC                            = 0x8\n\tAF_ATMSVC                            = 0x14\n\tAF_AX25                              = 0x3\n\tAF_BLUETOOTH                         = 0x1f\n\tAF_BRIDGE                            = 0x7\n\tAF_CAIF                              = 0x25\n\tAF_CAN                               = 0x1d\n\tAF_DECnet                            = 0xc\n\tAF_ECONET                            = 0x13\n\tAF_FILE                              = 0x1\n\tAF_IB                                = 0x1b\n\tAF_IEEE802154                        = 0x24\n\tAF_INET                              = 0x2\n\tAF_INET6                             = 0xa\n\tAF_IPX                               = 0x4\n\tAF_IRDA                              = 0x17\n\tAF_ISDN                              = 0x22\n\tAF_IUCV                              = 0x20\n\tAF_KCM                               = 0x29\n\tAF_KEY                               = 0xf\n\tAF_LLC                               = 0x1a\n\tAF_LOCAL                             = 0x1\n\tAF_MAX                               = 0x2d\n\tAF_MPLS                              = 0x1c\n\tAF_NETBEUI                           = 0xd\n\tAF_NETLINK                           = 0x10\n\tAF_NETROM                            = 0x6\n\tAF_NFC                               = 0x27\n\tAF_PACKET                            = 0x11\n\tAF_PHONET                            = 0x23\n\tAF_PPPOX                             = 0x18\n\tAF_QIPCRTR                           = 0x2a\n\tAF_RDS                               = 0x15\n\tAF_ROSE                              = 0xb\n\tAF_ROUTE                             = 0x10\n\tAF_RXRPC                             = 0x21\n\tAF_SECURITY                          = 0xe\n\tAF_SMC                               = 0x2b\n\tAF_SNA                               = 0x16\n\tAF_TIPC                              = 0x1e\n\tAF_UNIX                              = 0x1\n\tAF_UNSPEC                            = 0x0\n\tAF_VSOCK                             = 0x28\n\tAF_WANPIPE                           = 0x19\n\tAF_X25                               = 0x9\n\tAF_XDP                               = 0x2c\n\tALG_OP_DECRYPT                       = 0x0\n\tALG_OP_ENCRYPT                       = 0x1\n\tALG_SET_AEAD_ASSOCLEN                = 0x4\n\tALG_SET_AEAD_AUTHSIZE                = 0x5\n\tALG_SET_IV                           = 0x2\n\tALG_SET_KEY                          = 0x1\n\tALG_SET_OP                           = 0x3\n\tANON_INODE_FS_MAGIC                  = 0x9041934\n\tARPHRD_6LOWPAN                       = 0x339\n\tARPHRD_ADAPT                         = 0x108\n\tARPHRD_APPLETLK                      = 0x8\n\tARPHRD_ARCNET                        = 0x7\n\tARPHRD_ASH                           = 0x30d\n\tARPHRD_ATM                           = 0x13\n\tARPHRD_AX25                          = 0x3\n\tARPHRD_BIF                           = 0x307\n\tARPHRD_CAIF                          = 0x336\n\tARPHRD_CAN                           = 0x118\n\tARPHRD_CHAOS                         = 0x5\n\tARPHRD_CISCO                         = 0x201\n\tARPHRD_CSLIP                         = 0x101\n\tARPHRD_CSLIP6                        = 0x103\n\tARPHRD_DDCMP                         = 0x205\n\tARPHRD_DLCI                          = 0xf\n\tARPHRD_ECONET                        = 0x30e\n\tARPHRD_EETHER                        = 0x2\n\tARPHRD_ETHER                         = 0x1\n\tARPHRD_EUI64                         = 0x1b\n\tARPHRD_FCAL                          = 0x311\n\tARPHRD_FCFABRIC                      = 0x313\n\tARPHRD_FCPL                          = 0x312\n\tARPHRD_FCPP                          = 0x310\n\tARPHRD_FDDI                          = 0x306\n\tARPHRD_FRAD                          = 0x302\n\tARPHRD_HDLC                          = 0x201\n\tARPHRD_HIPPI                         = 0x30c\n\tARPHRD_HWX25                         = 0x110\n\tARPHRD_IEEE1394                      = 0x18\n\tARPHRD_IEEE802                       = 0x6\n\tARPHRD_IEEE80211                     = 0x321\n\tARPHRD_IEEE80211_PRISM               = 0x322\n\tARPHRD_IEEE80211_RADIOTAP            = 0x323\n\tARPHRD_IEEE802154                    = 0x324\n\tARPHRD_IEEE802154_MONITOR            = 0x325\n\tARPHRD_IEEE802_TR                    = 0x320\n\tARPHRD_INFINIBAND                    = 0x20\n\tARPHRD_IP6GRE                        = 0x337\n\tARPHRD_IPDDP                         = 0x309\n\tARPHRD_IPGRE                         = 0x30a\n\tARPHRD_IRDA                          = 0x30f\n\tARPHRD_LAPB                          = 0x204\n\tARPHRD_LOCALTLK                      = 0x305\n\tARPHRD_LOOPBACK                      = 0x304\n\tARPHRD_METRICOM                      = 0x17\n\tARPHRD_NETLINK                       = 0x338\n\tARPHRD_NETROM                        = 0x0\n\tARPHRD_NONE                          = 0xfffe\n\tARPHRD_PHONET                        = 0x334\n\tARPHRD_PHONET_PIPE                   = 0x335\n\tARPHRD_PIMREG                        = 0x30b\n\tARPHRD_PPP                           = 0x200\n\tARPHRD_PRONET                        = 0x4\n\tARPHRD_RAWHDLC                       = 0x206\n\tARPHRD_RAWIP                         = 0x207\n\tARPHRD_ROSE                          = 0x10e\n\tARPHRD_RSRVD                         = 0x104\n\tARPHRD_SIT                           = 0x308\n\tARPHRD_SKIP                          = 0x303\n\tARPHRD_SLIP                          = 0x100\n\tARPHRD_SLIP6                         = 0x102\n\tARPHRD_TUNNEL                        = 0x300\n\tARPHRD_TUNNEL6                       = 0x301\n\tARPHRD_VOID                          = 0xffff\n\tARPHRD_VSOCKMON                      = 0x33a\n\tARPHRD_X25                           = 0x10f\n\tAUTOFS_SUPER_MAGIC                   = 0x187\n\tB0                                   = 0x0\n\tB1000000                             = 0x17\n\tB110                                 = 0x3\n\tB115200                              = 0x11\n\tB1152000                             = 0x18\n\tB1200                                = 0x9\n\tB134                                 = 0x4\n\tB150                                 = 0x5\n\tB1500000                             = 0x19\n\tB1800                                = 0xa\n\tB19200                               = 0xe\n\tB200                                 = 0x6\n\tB2000000                             = 0x1a\n\tB230400                              = 0x12\n\tB2400                                = 0xb\n\tB2500000                             = 0x1b\n\tB300                                 = 0x7\n\tB3000000                             = 0x1c\n\tB3500000                             = 0x1d\n\tB38400                               = 0xf\n\tB4000000                             = 0x1e\n\tB460800                              = 0x13\n\tB4800                                = 0xc\n\tB50                                  = 0x1\n\tB500000                              = 0x14\n\tB57600                               = 0x10\n\tB576000                              = 0x15\n\tB600                                 = 0x8\n\tB75                                  = 0x2\n\tB921600                              = 0x16\n\tB9600                                = 0xd\n\tBALLOON_KVM_MAGIC                    = 0x13661366\n\tBDEVFS_MAGIC                         = 0x62646576\n\tBINDERFS_SUPER_MAGIC                 = 0x6c6f6f70\n\tBINFMTFS_MAGIC                       = 0x42494e4d\n\tBLKBSZGET                            = 0x40081270\n\tBLKBSZSET                            = 0x80081271\n\tBLKFLSBUF                            = 0x20001261\n\tBLKFRAGET                            = 0x20001265\n\tBLKFRASET                            = 0x20001264\n\tBLKGETSIZE                           = 0x20001260\n\tBLKGETSIZE64                         = 0x40081272\n\tBLKPBSZGET                           = 0x2000127b\n\tBLKRAGET                             = 0x20001263\n\tBLKRASET                             = 0x20001262\n\tBLKROGET                             = 0x2000125e\n\tBLKROSET                             = 0x2000125d\n\tBLKRRPART                            = 0x2000125f\n\tBLKSECTGET                           = 0x20001267\n\tBLKSECTSET                           = 0x20001266\n\tBLKSSZGET                            = 0x20001268\n\tBOTHER                               = 0x1f\n\tBPF_A                                = 0x10\n\tBPF_ABS                              = 0x20\n\tBPF_ADD                              = 0x0\n\tBPF_ALU                              = 0x4\n\tBPF_ALU64                            = 0x7\n\tBPF_AND                              = 0x50\n\tBPF_ANY                              = 0x0\n\tBPF_ARSH                             = 0xc0\n\tBPF_B                                = 0x10\n\tBPF_BUILD_ID_SIZE                    = 0x14\n\tBPF_CALL                             = 0x80\n\tBPF_DEVCG_ACC_MKNOD                  = 0x1\n\tBPF_DEVCG_ACC_READ                   = 0x2\n\tBPF_DEVCG_ACC_WRITE                  = 0x4\n\tBPF_DEVCG_DEV_BLOCK                  = 0x1\n\tBPF_DEVCG_DEV_CHAR                   = 0x2\n\tBPF_DIV                              = 0x30\n\tBPF_DW                               = 0x18\n\tBPF_END                              = 0xd0\n\tBPF_EXIST                            = 0x2\n\tBPF_EXIT                             = 0x90\n\tBPF_FROM_BE                          = 0x8\n\tBPF_FROM_LE                          = 0x0\n\tBPF_FS_MAGIC                         = 0xcafe4a11\n\tBPF_F_ALLOW_MULTI                    = 0x2\n\tBPF_F_ALLOW_OVERRIDE                 = 0x1\n\tBPF_F_ANY_ALIGNMENT                  = 0x2\n\tBPF_F_CTXLEN_MASK                    = 0xfffff00000000\n\tBPF_F_CURRENT_CPU                    = 0xffffffff\n\tBPF_F_CURRENT_NETNS                  = -0x1\n\tBPF_F_DONT_FRAGMENT                  = 0x4\n\tBPF_F_FAST_STACK_CMP                 = 0x200\n\tBPF_F_HDR_FIELD_MASK                 = 0xf\n\tBPF_F_INDEX_MASK                     = 0xffffffff\n\tBPF_F_INGRESS                        = 0x1\n\tBPF_F_INVALIDATE_HASH                = 0x2\n\tBPF_F_LOCK                           = 0x4\n\tBPF_F_MARK_ENFORCE                   = 0x40\n\tBPF_F_MARK_MANGLED_0                 = 0x20\n\tBPF_F_NO_COMMON_LRU                  = 0x2\n\tBPF_F_NO_PREALLOC                    = 0x1\n\tBPF_F_NUMA_NODE                      = 0x4\n\tBPF_F_PSEUDO_HDR                     = 0x10\n\tBPF_F_QUERY_EFFECTIVE                = 0x1\n\tBPF_F_RDONLY                         = 0x8\n\tBPF_F_RECOMPUTE_CSUM                 = 0x1\n\tBPF_F_REUSE_STACKID                  = 0x400\n\tBPF_F_SEQ_NUMBER                     = 0x8\n\tBPF_F_SKIP_FIELD_MASK                = 0xff\n\tBPF_F_STACK_BUILD_ID                 = 0x20\n\tBPF_F_STRICT_ALIGNMENT               = 0x1\n\tBPF_F_TUNINFO_IPV6                   = 0x1\n\tBPF_F_USER_BUILD_ID                  = 0x800\n\tBPF_F_USER_STACK                     = 0x100\n\tBPF_F_WRONLY                         = 0x10\n\tBPF_F_ZERO_CSUM_TX                   = 0x2\n\tBPF_F_ZERO_SEED                      = 0x40\n\tBPF_H                                = 0x8\n\tBPF_IMM                              = 0x0\n\tBPF_IND                              = 0x40\n\tBPF_JA                               = 0x0\n\tBPF_JEQ                              = 0x10\n\tBPF_JGE                              = 0x30\n\tBPF_JGT                              = 0x20\n\tBPF_JLE                              = 0xb0\n\tBPF_JLT                              = 0xa0\n\tBPF_JMP                              = 0x5\n\tBPF_JMP32                            = 0x6\n\tBPF_JNE                              = 0x50\n\tBPF_JSET                             = 0x40\n\tBPF_JSGE                             = 0x70\n\tBPF_JSGT                             = 0x60\n\tBPF_JSLE                             = 0xd0\n\tBPF_JSLT                             = 0xc0\n\tBPF_K                                = 0x0\n\tBPF_LD                               = 0x0\n\tBPF_LDX                              = 0x1\n\tBPF_LEN                              = 0x80\n\tBPF_LL_OFF                           = -0x200000\n\tBPF_LSH                              = 0x60\n\tBPF_MAJOR_VERSION                    = 0x1\n\tBPF_MAXINSNS                         = 0x1000\n\tBPF_MEM                              = 0x60\n\tBPF_MEMWORDS                         = 0x10\n\tBPF_MINOR_VERSION                    = 0x1\n\tBPF_MISC                             = 0x7\n\tBPF_MOD                              = 0x90\n\tBPF_MOV                              = 0xb0\n\tBPF_MSH                              = 0xa0\n\tBPF_MUL                              = 0x20\n\tBPF_NEG                              = 0x80\n\tBPF_NET_OFF                          = -0x100000\n\tBPF_NOEXIST                          = 0x1\n\tBPF_OBJ_NAME_LEN                     = 0x10\n\tBPF_OR                               = 0x40\n\tBPF_PSEUDO_CALL                      = 0x1\n\tBPF_PSEUDO_MAP_FD                    = 0x1\n\tBPF_RET                              = 0x6\n\tBPF_RSH                              = 0x70\n\tBPF_SOCK_OPS_ALL_CB_FLAGS            = 0x7\n\tBPF_SOCK_OPS_RETRANS_CB_FLAG         = 0x2\n\tBPF_SOCK_OPS_RTO_CB_FLAG             = 0x1\n\tBPF_SOCK_OPS_STATE_CB_FLAG           = 0x4\n\tBPF_ST                               = 0x2\n\tBPF_STX                              = 0x3\n\tBPF_SUB                              = 0x10\n\tBPF_TAG_SIZE                         = 0x8\n\tBPF_TAX                              = 0x0\n\tBPF_TO_BE                            = 0x8\n\tBPF_TO_LE                            = 0x0\n\tBPF_TXA                              = 0x80\n\tBPF_W                                = 0x0\n\tBPF_X                                = 0x8\n\tBPF_XADD                             = 0xc0\n\tBPF_XOR                              = 0xa0\n\tBRKINT                               = 0x2\n\tBS0                                  = 0x0\n\tBS1                                  = 0x8000\n\tBSDLY                                = 0x8000\n\tBTRFS_SUPER_MAGIC                    = 0x9123683e\n\tBTRFS_TEST_MAGIC                     = 0x73727279\n\tCAN_BCM                              = 0x2\n\tCAN_EFF_FLAG                         = 0x80000000\n\tCAN_EFF_ID_BITS                      = 0x1d\n\tCAN_EFF_MASK                         = 0x1fffffff\n\tCAN_ERR_FLAG                         = 0x20000000\n\tCAN_ERR_MASK                         = 0x1fffffff\n\tCAN_INV_FILTER                       = 0x20000000\n\tCAN_ISOTP                            = 0x6\n\tCAN_MAX_DLC                          = 0x8\n\tCAN_MAX_DLEN                         = 0x8\n\tCAN_MCNET                            = 0x5\n\tCAN_MTU                              = 0x10\n\tCAN_NPROTO                           = 0x7\n\tCAN_RAW                              = 0x1\n\tCAN_RAW_FILTER_MAX                   = 0x200\n\tCAN_RTR_FLAG                         = 0x40000000\n\tCAN_SFF_ID_BITS                      = 0xb\n\tCAN_SFF_MASK                         = 0x7ff\n\tCAN_TP16                             = 0x3\n\tCAN_TP20                             = 0x4\n\tCBAUD                                = 0xff\n\tCBAUDEX                              = 0x0\n\tCFLUSH                               = 0xf\n\tCGROUP2_SUPER_MAGIC                  = 0x63677270\n\tCGROUP_SUPER_MAGIC                   = 0x27e0eb\n\tCIBAUD                               = 0xff0000\n\tCLOCAL                               = 0x8000\n\tCLOCK_BOOTTIME                       = 0x7\n\tCLOCK_BOOTTIME_ALARM                 = 0x9\n\tCLOCK_DEFAULT                        = 0x0\n\tCLOCK_EXT                            = 0x1\n\tCLOCK_INT                            = 0x2\n\tCLOCK_MONOTONIC                      = 0x1\n\tCLOCK_MONOTONIC_COARSE               = 0x6\n\tCLOCK_MONOTONIC_RAW                  = 0x4\n\tCLOCK_PROCESS_CPUTIME_ID             = 0x2\n\tCLOCK_REALTIME                       = 0x0\n\tCLOCK_REALTIME_ALARM                 = 0x8\n\tCLOCK_REALTIME_COARSE                = 0x5\n\tCLOCK_TAI                            = 0xb\n\tCLOCK_THREAD_CPUTIME_ID              = 0x3\n\tCLOCK_TXFROMRX                       = 0x4\n\tCLOCK_TXINT                          = 0x3\n\tCLONE_CHILD_CLEARTID                 = 0x200000\n\tCLONE_CHILD_SETTID                   = 0x1000000\n\tCLONE_DETACHED                       = 0x400000\n\tCLONE_FILES                          = 0x400\n\tCLONE_FS                             = 0x200\n\tCLONE_IO                             = 0x80000000\n\tCLONE_NEWCGROUP                      = 0x2000000\n\tCLONE_NEWIPC                         = 0x8000000\n\tCLONE_NEWNET                         = 0x40000000\n\tCLONE_NEWNS                          = 0x20000\n\tCLONE_NEWPID                         = 0x20000000\n\tCLONE_NEWUSER                        = 0x10000000\n\tCLONE_NEWUTS                         = 0x4000000\n\tCLONE_PARENT                         = 0x8000\n\tCLONE_PARENT_SETTID                  = 0x100000\n\tCLONE_PTRACE                         = 0x2000\n\tCLONE_SETTLS                         = 0x80000\n\tCLONE_SIGHAND                        = 0x800\n\tCLONE_SYSVSEM                        = 0x40000\n\tCLONE_THREAD                         = 0x10000\n\tCLONE_UNTRACED                       = 0x800000\n\tCLONE_VFORK                          = 0x4000\n\tCLONE_VM                             = 0x100\n\tCMSPAR                               = 0x40000000\n\tCODA_SUPER_MAGIC                     = 0x73757245\n\tCR0                                  = 0x0\n\tCR1                                  = 0x1000\n\tCR2                                  = 0x2000\n\tCR3                                  = 0x3000\n\tCRAMFS_MAGIC                         = 0x28cd3d45\n\tCRDLY                                = 0x3000\n\tCREAD                                = 0x800\n\tCRTSCTS                              = 0x80000000\n\tCRYPTO_MAX_NAME                      = 0x40\n\tCRYPTO_MSG_MAX                       = 0x15\n\tCRYPTO_NR_MSGTYPES                   = 0x6\n\tCRYPTO_REPORT_MAXSIZE                = 0x160\n\tCS5                                  = 0x0\n\tCS6                                  = 0x100\n\tCS7                                  = 0x200\n\tCS8                                  = 0x300\n\tCSIGNAL                              = 0xff\n\tCSIZE                                = 0x300\n\tCSTART                               = 0x11\n\tCSTATUS                              = 0x0\n\tCSTOP                                = 0x13\n\tCSTOPB                               = 0x400\n\tCSUSP                                = 0x1a\n\tDAXFS_MAGIC                          = 0x64646178\n\tDEBUGFS_MAGIC                        = 0x64626720\n\tDEVPTS_SUPER_MAGIC                   = 0x1cd1\n\tDT_BLK                               = 0x6\n\tDT_CHR                               = 0x2\n\tDT_DIR                               = 0x4\n\tDT_FIFO                              = 0x1\n\tDT_LNK                               = 0xa\n\tDT_REG                               = 0x8\n\tDT_SOCK                              = 0xc\n\tDT_UNKNOWN                           = 0x0\n\tDT_WHT                               = 0xe\n\tECHO                                 = 0x8\n\tECHOCTL                              = 0x40\n\tECHOE                                = 0x2\n\tECHOK                                = 0x4\n\tECHOKE                               = 0x1\n\tECHONL                               = 0x10\n\tECHOPRT                              = 0x20\n\tECRYPTFS_SUPER_MAGIC                 = 0xf15f\n\tEFD_CLOEXEC                          = 0x80000\n\tEFD_NONBLOCK                         = 0x800\n\tEFD_SEMAPHORE                        = 0x1\n\tEFIVARFS_MAGIC                       = 0xde5e81e4\n\tEFS_SUPER_MAGIC                      = 0x414a53\n\tENCODING_DEFAULT                     = 0x0\n\tENCODING_FM_MARK                     = 0x3\n\tENCODING_FM_SPACE                    = 0x4\n\tENCODING_MANCHESTER                  = 0x5\n\tENCODING_NRZ                         = 0x1\n\tENCODING_NRZI                        = 0x2\n\tEPOLLERR                             = 0x8\n\tEPOLLET                              = 0x80000000\n\tEPOLLEXCLUSIVE                       = 0x10000000\n\tEPOLLHUP                             = 0x10\n\tEPOLLIN                              = 0x1\n\tEPOLLMSG                             = 0x400\n\tEPOLLONESHOT                         = 0x40000000\n\tEPOLLOUT                             = 0x4\n\tEPOLLPRI                             = 0x2\n\tEPOLLRDBAND                          = 0x80\n\tEPOLLRDHUP                           = 0x2000\n\tEPOLLRDNORM                          = 0x40\n\tEPOLLWAKEUP                          = 0x20000000\n\tEPOLLWRBAND                          = 0x200\n\tEPOLLWRNORM                          = 0x100\n\tEPOLL_CLOEXEC                        = 0x80000\n\tEPOLL_CTL_ADD                        = 0x1\n\tEPOLL_CTL_DEL                        = 0x2\n\tEPOLL_CTL_MOD                        = 0x3\n\tETH_P_1588                           = 0x88f7\n\tETH_P_8021AD                         = 0x88a8\n\tETH_P_8021AH                         = 0x88e7\n\tETH_P_8021Q                          = 0x8100\n\tETH_P_80221                          = 0x8917\n\tETH_P_802_2                          = 0x4\n\tETH_P_802_3                          = 0x1\n\tETH_P_802_3_MIN                      = 0x600\n\tETH_P_802_EX1                        = 0x88b5\n\tETH_P_AARP                           = 0x80f3\n\tETH_P_AF_IUCV                        = 0xfbfb\n\tETH_P_ALL                            = 0x3\n\tETH_P_AOE                            = 0x88a2\n\tETH_P_ARCNET                         = 0x1a\n\tETH_P_ARP                            = 0x806\n\tETH_P_ATALK                          = 0x809b\n\tETH_P_ATMFATE                        = 0x8884\n\tETH_P_ATMMPOA                        = 0x884c\n\tETH_P_AX25                           = 0x2\n\tETH_P_BATMAN                         = 0x4305\n\tETH_P_BPQ                            = 0x8ff\n\tETH_P_CAIF                           = 0xf7\n\tETH_P_CAN                            = 0xc\n\tETH_P_CANFD                          = 0xd\n\tETH_P_CONTROL                        = 0x16\n\tETH_P_CUST                           = 0x6006\n\tETH_P_DDCMP                          = 0x6\n\tETH_P_DEC                            = 0x6000\n\tETH_P_DIAG                           = 0x6005\n\tETH_P_DNA_DL                         = 0x6001\n\tETH_P_DNA_RC                         = 0x6002\n\tETH_P_DNA_RT                         = 0x6003\n\tETH_P_DSA                            = 0x1b\n\tETH_P_ECONET                         = 0x18\n\tETH_P_EDSA                           = 0xdada\n\tETH_P_ERSPAN                         = 0x88be\n\tETH_P_ERSPAN2                        = 0x22eb\n\tETH_P_FCOE                           = 0x8906\n\tETH_P_FIP                            = 0x8914\n\tETH_P_HDLC                           = 0x19\n\tETH_P_HSR                            = 0x892f\n\tETH_P_IBOE                           = 0x8915\n\tETH_P_IEEE802154                     = 0xf6\n\tETH_P_IEEEPUP                        = 0xa00\n\tETH_P_IEEEPUPAT                      = 0xa01\n\tETH_P_IFE                            = 0xed3e\n\tETH_P_IP                             = 0x800\n\tETH_P_IPV6                           = 0x86dd\n\tETH_P_IPX                            = 0x8137\n\tETH_P_IRDA                           = 0x17\n\tETH_P_LAT                            = 0x6004\n\tETH_P_LINK_CTL                       = 0x886c\n\tETH_P_LOCALTALK                      = 0x9\n\tETH_P_LOOP                           = 0x60\n\tETH_P_LOOPBACK                       = 0x9000\n\tETH_P_MACSEC                         = 0x88e5\n\tETH_P_MAP                            = 0xf9\n\tETH_P_MOBITEX                        = 0x15\n\tETH_P_MPLS_MC                        = 0x8848\n\tETH_P_MPLS_UC                        = 0x8847\n\tETH_P_MVRP                           = 0x88f5\n\tETH_P_NCSI                           = 0x88f8\n\tETH_P_NSH                            = 0x894f\n\tETH_P_PAE                            = 0x888e\n\tETH_P_PAUSE                          = 0x8808\n\tETH_P_PHONET                         = 0xf5\n\tETH_P_PPPTALK                        = 0x10\n\tETH_P_PPP_DISC                       = 0x8863\n\tETH_P_PPP_MP                         = 0x8\n\tETH_P_PPP_SES                        = 0x8864\n\tETH_P_PREAUTH                        = 0x88c7\n\tETH_P_PRP                            = 0x88fb\n\tETH_P_PUP                            = 0x200\n\tETH_P_PUPAT                          = 0x201\n\tETH_P_QINQ1                          = 0x9100\n\tETH_P_QINQ2                          = 0x9200\n\tETH_P_QINQ3                          = 0x9300\n\tETH_P_RARP                           = 0x8035\n\tETH_P_SCA                            = 0x6007\n\tETH_P_SLOW                           = 0x8809\n\tETH_P_SNAP                           = 0x5\n\tETH_P_TDLS                           = 0x890d\n\tETH_P_TEB                            = 0x6558\n\tETH_P_TIPC                           = 0x88ca\n\tETH_P_TRAILER                        = 0x1c\n\tETH_P_TR_802_2                       = 0x11\n\tETH_P_TSN                            = 0x22f0\n\tETH_P_WAN_PPP                        = 0x7\n\tETH_P_WCCP                           = 0x883e\n\tETH_P_X25                            = 0x805\n\tETH_P_XDSA                           = 0xf8\n\tEXABYTE_ENABLE_NEST                  = 0xf0\n\tEXT2_SUPER_MAGIC                     = 0xef53\n\tEXT3_SUPER_MAGIC                     = 0xef53\n\tEXT4_SUPER_MAGIC                     = 0xef53\n\tEXTA                                 = 0xe\n\tEXTB                                 = 0xf\n\tEXTPROC                              = 0x10000000\n\tF2FS_SUPER_MAGIC                     = 0xf2f52010\n\tFALLOC_FL_COLLAPSE_RANGE             = 0x8\n\tFALLOC_FL_INSERT_RANGE               = 0x20\n\tFALLOC_FL_KEEP_SIZE                  = 0x1\n\tFALLOC_FL_NO_HIDE_STALE              = 0x4\n\tFALLOC_FL_PUNCH_HOLE                 = 0x2\n\tFALLOC_FL_UNSHARE_RANGE              = 0x40\n\tFALLOC_FL_ZERO_RANGE                 = 0x10\n\tFANOTIFY_METADATA_VERSION            = 0x3\n\tFAN_ACCESS                           = 0x1\n\tFAN_ACCESS_PERM                      = 0x20000\n\tFAN_ALLOW                            = 0x1\n\tFAN_ALL_CLASS_BITS                   = 0xc\n\tFAN_ALL_EVENTS                       = 0x3b\n\tFAN_ALL_INIT_FLAGS                   = 0x3f\n\tFAN_ALL_MARK_FLAGS                   = 0xff\n\tFAN_ALL_OUTGOING_EVENTS              = 0x3403b\n\tFAN_ALL_PERM_EVENTS                  = 0x30000\n\tFAN_ATTRIB                           = 0x4\n\tFAN_AUDIT                            = 0x10\n\tFAN_CLASS_CONTENT                    = 0x4\n\tFAN_CLASS_NOTIF                      = 0x0\n\tFAN_CLASS_PRE_CONTENT                = 0x8\n\tFAN_CLOEXEC                          = 0x1\n\tFAN_CLOSE                            = 0x18\n\tFAN_CLOSE_NOWRITE                    = 0x10\n\tFAN_CLOSE_WRITE                      = 0x8\n\tFAN_CREATE                           = 0x100\n\tFAN_DELETE                           = 0x200\n\tFAN_DELETE_SELF                      = 0x400\n\tFAN_DENY                             = 0x2\n\tFAN_ENABLE_AUDIT                     = 0x40\n\tFAN_EVENT_INFO_TYPE_FID              = 0x1\n\tFAN_EVENT_METADATA_LEN               = 0x18\n\tFAN_EVENT_ON_CHILD                   = 0x8000000\n\tFAN_MARK_ADD                         = 0x1\n\tFAN_MARK_DONT_FOLLOW                 = 0x4\n\tFAN_MARK_FILESYSTEM                  = 0x100\n\tFAN_MARK_FLUSH                       = 0x80\n\tFAN_MARK_IGNORED_MASK                = 0x20\n\tFAN_MARK_IGNORED_SURV_MODIFY         = 0x40\n\tFAN_MARK_INODE                       = 0x0\n\tFAN_MARK_MOUNT                       = 0x10\n\tFAN_MARK_ONLYDIR                     = 0x8\n\tFAN_MARK_REMOVE                      = 0x2\n\tFAN_MODIFY                           = 0x2\n\tFAN_MOVE                             = 0xc0\n\tFAN_MOVED_FROM                       = 0x40\n\tFAN_MOVED_TO                         = 0x80\n\tFAN_MOVE_SELF                        = 0x800\n\tFAN_NOFD                             = -0x1\n\tFAN_NONBLOCK                         = 0x2\n\tFAN_ONDIR                            = 0x40000000\n\tFAN_OPEN                             = 0x20\n\tFAN_OPEN_EXEC                        = 0x1000\n\tFAN_OPEN_EXEC_PERM                   = 0x40000\n\tFAN_OPEN_PERM                        = 0x10000\n\tFAN_Q_OVERFLOW                       = 0x4000\n\tFAN_REPORT_FID                       = 0x200\n\tFAN_REPORT_TID                       = 0x100\n\tFAN_UNLIMITED_MARKS                  = 0x20\n\tFAN_UNLIMITED_QUEUE                  = 0x10\n\tFD_CLOEXEC                           = 0x1\n\tFD_SETSIZE                           = 0x400\n\tFF0                                  = 0x0\n\tFF1                                  = 0x4000\n\tFFDLY                                = 0x4000\n\tFLUSHO                               = 0x800000\n\tFS_ENCRYPTION_MODE_ADIANTUM          = 0x9\n\tFS_ENCRYPTION_MODE_AES_128_CBC       = 0x5\n\tFS_ENCRYPTION_MODE_AES_128_CTS       = 0x6\n\tFS_ENCRYPTION_MODE_AES_256_CBC       = 0x3\n\tFS_ENCRYPTION_MODE_AES_256_CTS       = 0x4\n\tFS_ENCRYPTION_MODE_AES_256_GCM       = 0x2\n\tFS_ENCRYPTION_MODE_AES_256_XTS       = 0x1\n\tFS_ENCRYPTION_MODE_INVALID           = 0x0\n\tFS_ENCRYPTION_MODE_SPECK128_256_CTS  = 0x8\n\tFS_ENCRYPTION_MODE_SPECK128_256_XTS  = 0x7\n\tFS_IOC_GET_ENCRYPTION_POLICY         = 0x800c6615\n\tFS_IOC_GET_ENCRYPTION_PWSALT         = 0x80106614\n\tFS_IOC_SET_ENCRYPTION_POLICY         = 0x400c6613\n\tFS_KEY_DESCRIPTOR_SIZE               = 0x8\n\tFS_KEY_DESC_PREFIX                   = \"fscrypt:\"\n\tFS_KEY_DESC_PREFIX_SIZE              = 0x8\n\tFS_MAX_KEY_SIZE                      = 0x40\n\tFS_POLICY_FLAGS_PAD_16               = 0x2\n\tFS_POLICY_FLAGS_PAD_32               = 0x3\n\tFS_POLICY_FLAGS_PAD_4                = 0x0\n\tFS_POLICY_FLAGS_PAD_8                = 0x1\n\tFS_POLICY_FLAGS_PAD_MASK             = 0x3\n\tFS_POLICY_FLAGS_VALID                = 0x7\n\tFUTEXFS_SUPER_MAGIC                  = 0xbad1dea\n\tF_ADD_SEALS                          = 0x409\n\tF_DUPFD                              = 0x0\n\tF_DUPFD_CLOEXEC                      = 0x406\n\tF_EXLCK                              = 0x4\n\tF_GETFD                              = 0x1\n\tF_GETFL                              = 0x3\n\tF_GETLEASE                           = 0x401\n\tF_GETLK                              = 0x5\n\tF_GETLK64                            = 0xc\n\tF_GETOWN                             = 0x9\n\tF_GETOWN_EX                          = 0x10\n\tF_GETPIPE_SZ                         = 0x408\n\tF_GETSIG                             = 0xb\n\tF_GET_FILE_RW_HINT                   = 0x40d\n\tF_GET_RW_HINT                        = 0x40b\n\tF_GET_SEALS                          = 0x40a\n\tF_LOCK                               = 0x1\n\tF_NOTIFY                             = 0x402\n\tF_OFD_GETLK                          = 0x24\n\tF_OFD_SETLK                          = 0x25\n\tF_OFD_SETLKW                         = 0x26\n\tF_OK                                 = 0x0\n\tF_RDLCK                              = 0x0\n\tF_SEAL_GROW                          = 0x4\n\tF_SEAL_SEAL                          = 0x1\n\tF_SEAL_SHRINK                        = 0x2\n\tF_SEAL_WRITE                         = 0x8\n\tF_SETFD                              = 0x2\n\tF_SETFL                              = 0x4\n\tF_SETLEASE                           = 0x400\n\tF_SETLK                              = 0x6\n\tF_SETLK64                            = 0xd\n\tF_SETLKW                             = 0x7\n\tF_SETLKW64                           = 0xe\n\tF_SETOWN                             = 0x8\n\tF_SETOWN_EX                          = 0xf\n\tF_SETPIPE_SZ                         = 0x407\n\tF_SETSIG                             = 0xa\n\tF_SET_FILE_RW_HINT                   = 0x40e\n\tF_SET_RW_HINT                        = 0x40c\n\tF_SHLCK                              = 0x8\n\tF_TEST                               = 0x3\n\tF_TLOCK                              = 0x2\n\tF_ULOCK                              = 0x0\n\tF_UNLCK                              = 0x2\n\tF_WRLCK                              = 0x1\n\tGENL_ADMIN_PERM                      = 0x1\n\tGENL_CMD_CAP_DO                      = 0x2\n\tGENL_CMD_CAP_DUMP                    = 0x4\n\tGENL_CMD_CAP_HASPOL                  = 0x8\n\tGENL_HDRLEN                          = 0x4\n\tGENL_ID_CTRL                         = 0x10\n\tGENL_ID_PMCRAID                      = 0x12\n\tGENL_ID_VFS_DQUOT                    = 0x11\n\tGENL_MAX_ID                          = 0x3ff\n\tGENL_MIN_ID                          = 0x10\n\tGENL_NAMSIZ                          = 0x10\n\tGENL_START_ALLOC                     = 0x13\n\tGENL_UNS_ADMIN_PERM                  = 0x10\n\tGRND_NONBLOCK                        = 0x1\n\tGRND_RANDOM                          = 0x2\n\tHDIO_DRIVE_CMD                       = 0x31f\n\tHDIO_DRIVE_CMD_AEB                   = 0x31e\n\tHDIO_DRIVE_CMD_HDR_SIZE              = 0x4\n\tHDIO_DRIVE_HOB_HDR_SIZE              = 0x8\n\tHDIO_DRIVE_RESET                     = 0x31c\n\tHDIO_DRIVE_TASK                      = 0x31e\n\tHDIO_DRIVE_TASKFILE                  = 0x31d\n\tHDIO_DRIVE_TASK_HDR_SIZE             = 0x8\n\tHDIO_GETGEO                          = 0x301\n\tHDIO_GET_32BIT                       = 0x309\n\tHDIO_GET_ACOUSTIC                    = 0x30f\n\tHDIO_GET_ADDRESS                     = 0x310\n\tHDIO_GET_BUSSTATE                    = 0x31a\n\tHDIO_GET_DMA                         = 0x30b\n\tHDIO_GET_IDENTITY                    = 0x30d\n\tHDIO_GET_KEEPSETTINGS                = 0x308\n\tHDIO_GET_MULTCOUNT                   = 0x304\n\tHDIO_GET_NICE                        = 0x30c\n\tHDIO_GET_NOWERR                      = 0x30a\n\tHDIO_GET_QDMA                        = 0x305\n\tHDIO_GET_UNMASKINTR                  = 0x302\n\tHDIO_GET_WCACHE                      = 0x30e\n\tHDIO_OBSOLETE_IDENTITY               = 0x307\n\tHDIO_SCAN_HWIF                       = 0x328\n\tHDIO_SET_32BIT                       = 0x324\n\tHDIO_SET_ACOUSTIC                    = 0x32c\n\tHDIO_SET_ADDRESS                     = 0x32f\n\tHDIO_SET_BUSSTATE                    = 0x32d\n\tHDIO_SET_DMA                         = 0x326\n\tHDIO_SET_KEEPSETTINGS                = 0x323\n\tHDIO_SET_MULTCOUNT                   = 0x321\n\tHDIO_SET_NICE                        = 0x329\n\tHDIO_SET_NOWERR                      = 0x325\n\tHDIO_SET_PIO_MODE                    = 0x327\n\tHDIO_SET_QDMA                        = 0x32e\n\tHDIO_SET_UNMASKINTR                  = 0x322\n\tHDIO_SET_WCACHE                      = 0x32b\n\tHDIO_SET_XFER                        = 0x306\n\tHDIO_TRISTATE_HWIF                   = 0x31b\n\tHDIO_UNREGISTER_HWIF                 = 0x32a\n\tHOSTFS_SUPER_MAGIC                   = 0xc0ffee\n\tHPFS_SUPER_MAGIC                     = 0xf995e849\n\tHUGETLBFS_MAGIC                      = 0x958458f6\n\tHUPCL                                = 0x4000\n\tIBSHIFT                              = 0x10\n\tICANON                               = 0x100\n\tICMPV6_FILTER                        = 0x1\n\tICRNL                                = 0x100\n\tIEXTEN                               = 0x400\n\tIFA_F_DADFAILED                      = 0x8\n\tIFA_F_DEPRECATED                     = 0x20\n\tIFA_F_HOMEADDRESS                    = 0x10\n\tIFA_F_MANAGETEMPADDR                 = 0x100\n\tIFA_F_MCAUTOJOIN                     = 0x400\n\tIFA_F_NODAD                          = 0x2\n\tIFA_F_NOPREFIXROUTE                  = 0x200\n\tIFA_F_OPTIMISTIC                     = 0x4\n\tIFA_F_PERMANENT                      = 0x80\n\tIFA_F_SECONDARY                      = 0x1\n\tIFA_F_STABLE_PRIVACY                 = 0x800\n\tIFA_F_TEMPORARY                      = 0x1\n\tIFA_F_TENTATIVE                      = 0x40\n\tIFA_MAX                              = 0xa\n\tIFF_ALLMULTI                         = 0x200\n\tIFF_ATTACH_QUEUE                     = 0x200\n\tIFF_AUTOMEDIA                        = 0x4000\n\tIFF_BROADCAST                        = 0x2\n\tIFF_DEBUG                            = 0x4\n\tIFF_DETACH_QUEUE                     = 0x400\n\tIFF_DORMANT                          = 0x20000\n\tIFF_DYNAMIC                          = 0x8000\n\tIFF_ECHO                             = 0x40000\n\tIFF_LOOPBACK                         = 0x8\n\tIFF_LOWER_UP                         = 0x10000\n\tIFF_MASTER                           = 0x400\n\tIFF_MULTICAST                        = 0x1000\n\tIFF_MULTI_QUEUE                      = 0x100\n\tIFF_NAPI                             = 0x10\n\tIFF_NAPI_FRAGS                       = 0x20\n\tIFF_NOARP                            = 0x80\n\tIFF_NOFILTER                         = 0x1000\n\tIFF_NOTRAILERS                       = 0x20\n\tIFF_NO_PI                            = 0x1000\n\tIFF_ONE_QUEUE                        = 0x2000\n\tIFF_PERSIST                          = 0x800\n\tIFF_POINTOPOINT                      = 0x10\n\tIFF_PORTSEL                          = 0x2000\n\tIFF_PROMISC                          = 0x100\n\tIFF_RUNNING                          = 0x40\n\tIFF_SLAVE                            = 0x800\n\tIFF_TAP                              = 0x2\n\tIFF_TUN                              = 0x1\n\tIFF_TUN_EXCL                         = 0x8000\n\tIFF_UP                               = 0x1\n\tIFF_VNET_HDR                         = 0x4000\n\tIFF_VOLATILE                         = 0x70c5a\n\tIFNAMSIZ                             = 0x10\n\tIGNBRK                               = 0x1\n\tIGNCR                                = 0x80\n\tIGNPAR                               = 0x4\n\tIMAXBEL                              = 0x2000\n\tINLCR                                = 0x40\n\tINPCK                                = 0x10\n\tIN_ACCESS                            = 0x1\n\tIN_ALL_EVENTS                        = 0xfff\n\tIN_ATTRIB                            = 0x4\n\tIN_CLASSA_HOST                       = 0xffffff\n\tIN_CLASSA_MAX                        = 0x80\n\tIN_CLASSA_NET                        = 0xff000000\n\tIN_CLASSA_NSHIFT                     = 0x18\n\tIN_CLASSB_HOST                       = 0xffff\n\tIN_CLASSB_MAX                        = 0x10000\n\tIN_CLASSB_NET                        = 0xffff0000\n\tIN_CLASSB_NSHIFT                     = 0x10\n\tIN_CLASSC_HOST                       = 0xff\n\tIN_CLASSC_NET                        = 0xffffff00\n\tIN_CLASSC_NSHIFT                     = 0x8\n\tIN_CLOEXEC                           = 0x80000\n\tIN_CLOSE                             = 0x18\n\tIN_CLOSE_NOWRITE                     = 0x10\n\tIN_CLOSE_WRITE                       = 0x8\n\tIN_CREATE                            = 0x100\n\tIN_DELETE                            = 0x200\n\tIN_DELETE_SELF                       = 0x400\n\tIN_DONT_FOLLOW                       = 0x2000000\n\tIN_EXCL_UNLINK                       = 0x4000000\n\tIN_IGNORED                           = 0x8000\n\tIN_ISDIR                             = 0x40000000\n\tIN_LOOPBACKNET                       = 0x7f\n\tIN_MASK_ADD                          = 0x20000000\n\tIN_MASK_CREATE                       = 0x10000000\n\tIN_MODIFY                            = 0x2\n\tIN_MOVE                              = 0xc0\n\tIN_MOVED_FROM                        = 0x40\n\tIN_MOVED_TO                          = 0x80\n\tIN_MOVE_SELF                         = 0x800\n\tIN_NONBLOCK                          = 0x800\n\tIN_ONESHOT                           = 0x80000000\n\tIN_ONLYDIR                           = 0x1000000\n\tIN_OPEN                              = 0x20\n\tIN_Q_OVERFLOW                        = 0x4000\n\tIN_UNMOUNT                           = 0x2000\n\tIOCTL_VM_SOCKETS_GET_LOCAL_CID       = 0x200007b9\n\tIPPROTO_AH                           = 0x33\n\tIPPROTO_BEETPH                       = 0x5e\n\tIPPROTO_COMP                         = 0x6c\n\tIPPROTO_DCCP                         = 0x21\n\tIPPROTO_DSTOPTS                      = 0x3c\n\tIPPROTO_EGP                          = 0x8\n\tIPPROTO_ENCAP                        = 0x62\n\tIPPROTO_ESP                          = 0x32\n\tIPPROTO_FRAGMENT                     = 0x2c\n\tIPPROTO_GRE                          = 0x2f\n\tIPPROTO_HOPOPTS                      = 0x0\n\tIPPROTO_ICMP                         = 0x1\n\tIPPROTO_ICMPV6                       = 0x3a\n\tIPPROTO_IDP                          = 0x16\n\tIPPROTO_IGMP                         = 0x2\n\tIPPROTO_IP                           = 0x0\n\tIPPROTO_IPIP                         = 0x4\n\tIPPROTO_IPV6                         = 0x29\n\tIPPROTO_MH                           = 0x87\n\tIPPROTO_MPLS                         = 0x89\n\tIPPROTO_MTP                          = 0x5c\n\tIPPROTO_NONE                         = 0x3b\n\tIPPROTO_PIM                          = 0x67\n\tIPPROTO_PUP                          = 0xc\n\tIPPROTO_RAW                          = 0xff\n\tIPPROTO_ROUTING                      = 0x2b\n\tIPPROTO_RSVP                         = 0x2e\n\tIPPROTO_SCTP                         = 0x84\n\tIPPROTO_TCP                          = 0x6\n\tIPPROTO_TP                           = 0x1d\n\tIPPROTO_UDP                          = 0x11\n\tIPPROTO_UDPLITE                      = 0x88\n\tIPV6_2292DSTOPTS                     = 0x4\n\tIPV6_2292HOPLIMIT                    = 0x8\n\tIPV6_2292HOPOPTS                     = 0x3\n\tIPV6_2292PKTINFO                     = 0x2\n\tIPV6_2292PKTOPTIONS                  = 0x6\n\tIPV6_2292RTHDR                       = 0x5\n\tIPV6_ADDRFORM                        = 0x1\n\tIPV6_ADDR_PREFERENCES                = 0x48\n\tIPV6_ADD_MEMBERSHIP                  = 0x14\n\tIPV6_AUTHHDR                         = 0xa\n\tIPV6_AUTOFLOWLABEL                   = 0x46\n\tIPV6_CHECKSUM                        = 0x7\n\tIPV6_DONTFRAG                        = 0x3e\n\tIPV6_DROP_MEMBERSHIP                 = 0x15\n\tIPV6_DSTOPTS                         = 0x3b\n\tIPV6_FREEBIND                        = 0x4e\n\tIPV6_HDRINCL                         = 0x24\n\tIPV6_HOPLIMIT                        = 0x34\n\tIPV6_HOPOPTS                         = 0x36\n\tIPV6_IPSEC_POLICY                    = 0x22\n\tIPV6_JOIN_ANYCAST                    = 0x1b\n\tIPV6_JOIN_GROUP                      = 0x14\n\tIPV6_LEAVE_ANYCAST                   = 0x1c\n\tIPV6_LEAVE_GROUP                     = 0x15\n\tIPV6_MINHOPCOUNT                     = 0x49\n\tIPV6_MTU                             = 0x18\n\tIPV6_MTU_DISCOVER                    = 0x17\n\tIPV6_MULTICAST_ALL                   = 0x1d\n\tIPV6_MULTICAST_HOPS                  = 0x12\n\tIPV6_MULTICAST_IF                    = 0x11\n\tIPV6_MULTICAST_LOOP                  = 0x13\n\tIPV6_NEXTHOP                         = 0x9\n\tIPV6_ORIGDSTADDR                     = 0x4a\n\tIPV6_PATHMTU                         = 0x3d\n\tIPV6_PKTINFO                         = 0x32\n\tIPV6_PMTUDISC_DO                     = 0x2\n\tIPV6_PMTUDISC_DONT                   = 0x0\n\tIPV6_PMTUDISC_INTERFACE              = 0x4\n\tIPV6_PMTUDISC_OMIT                   = 0x5\n\tIPV6_PMTUDISC_PROBE                  = 0x3\n\tIPV6_PMTUDISC_WANT                   = 0x1\n\tIPV6_RECVDSTOPTS                     = 0x3a\n\tIPV6_RECVERR                         = 0x19\n\tIPV6_RECVFRAGSIZE                    = 0x4d\n\tIPV6_RECVHOPLIMIT                    = 0x33\n\tIPV6_RECVHOPOPTS                     = 0x35\n\tIPV6_RECVORIGDSTADDR                 = 0x4a\n\tIPV6_RECVPATHMTU                     = 0x3c\n\tIPV6_RECVPKTINFO                     = 0x31\n\tIPV6_RECVRTHDR                       = 0x38\n\tIPV6_RECVTCLASS                      = 0x42\n\tIPV6_ROUTER_ALERT                    = 0x16\n\tIPV6_RTHDR                           = 0x39\n\tIPV6_RTHDRDSTOPTS                    = 0x37\n\tIPV6_RTHDR_LOOSE                     = 0x0\n\tIPV6_RTHDR_STRICT                    = 0x1\n\tIPV6_RTHDR_TYPE_0                    = 0x0\n\tIPV6_RXDSTOPTS                       = 0x3b\n\tIPV6_RXHOPOPTS                       = 0x36\n\tIPV6_TCLASS                          = 0x43\n\tIPV6_TRANSPARENT                     = 0x4b\n\tIPV6_UNICAST_HOPS                    = 0x10\n\tIPV6_UNICAST_IF                      = 0x4c\n\tIPV6_V6ONLY                          = 0x1a\n\tIPV6_XFRM_POLICY                     = 0x23\n\tIP_ADD_MEMBERSHIP                    = 0x23\n\tIP_ADD_SOURCE_MEMBERSHIP             = 0x27\n\tIP_BIND_ADDRESS_NO_PORT              = 0x18\n\tIP_BLOCK_SOURCE                      = 0x26\n\tIP_CHECKSUM                          = 0x17\n\tIP_DEFAULT_MULTICAST_LOOP            = 0x1\n\tIP_DEFAULT_MULTICAST_TTL             = 0x1\n\tIP_DF                                = 0x4000\n\tIP_DROP_MEMBERSHIP                   = 0x24\n\tIP_DROP_SOURCE_MEMBERSHIP            = 0x28\n\tIP_FREEBIND                          = 0xf\n\tIP_HDRINCL                           = 0x3\n\tIP_IPSEC_POLICY                      = 0x10\n\tIP_MAXPACKET                         = 0xffff\n\tIP_MAX_MEMBERSHIPS                   = 0x14\n\tIP_MF                                = 0x2000\n\tIP_MINTTL                            = 0x15\n\tIP_MSFILTER                          = 0x29\n\tIP_MSS                               = 0x240\n\tIP_MTU                               = 0xe\n\tIP_MTU_DISCOVER                      = 0xa\n\tIP_MULTICAST_ALL                     = 0x31\n\tIP_MULTICAST_IF                      = 0x20\n\tIP_MULTICAST_LOOP                    = 0x22\n\tIP_MULTICAST_TTL                     = 0x21\n\tIP_NODEFRAG                          = 0x16\n\tIP_OFFMASK                           = 0x1fff\n\tIP_OPTIONS                           = 0x4\n\tIP_ORIGDSTADDR                       = 0x14\n\tIP_PASSSEC                           = 0x12\n\tIP_PKTINFO                           = 0x8\n\tIP_PKTOPTIONS                        = 0x9\n\tIP_PMTUDISC                          = 0xa\n\tIP_PMTUDISC_DO                       = 0x2\n\tIP_PMTUDISC_DONT                     = 0x0\n\tIP_PMTUDISC_INTERFACE                = 0x4\n\tIP_PMTUDISC_OMIT                     = 0x5\n\tIP_PMTUDISC_PROBE                    = 0x3\n\tIP_PMTUDISC_WANT                     = 0x1\n\tIP_RECVERR                           = 0xb\n\tIP_RECVFRAGSIZE                      = 0x19\n\tIP_RECVOPTS                          = 0x6\n\tIP_RECVORIGDSTADDR                   = 0x14\n\tIP_RECVRETOPTS                       = 0x7\n\tIP_RECVTOS                           = 0xd\n\tIP_RECVTTL                           = 0xc\n\tIP_RETOPTS                           = 0x7\n\tIP_RF                                = 0x8000\n\tIP_ROUTER_ALERT                      = 0x5\n\tIP_TOS                               = 0x1\n\tIP_TRANSPARENT                       = 0x13\n\tIP_TTL                               = 0x2\n\tIP_UNBLOCK_SOURCE                    = 0x25\n\tIP_UNICAST_IF                        = 0x32\n\tIP_XFRM_POLICY                       = 0x11\n\tISIG                                 = 0x80\n\tISOFS_SUPER_MAGIC                    = 0x9660\n\tISTRIP                               = 0x20\n\tIUCLC                                = 0x1000\n\tIUTF8                                = 0x4000\n\tIXANY                                = 0x800\n\tIXOFF                                = 0x400\n\tIXON                                 = 0x200\n\tJFFS2_SUPER_MAGIC                    = 0x72b6\n\tKEXEC_ARCH_386                       = 0x30000\n\tKEXEC_ARCH_68K                       = 0x40000\n\tKEXEC_ARCH_AARCH64                   = 0xb70000\n\tKEXEC_ARCH_ARM                       = 0x280000\n\tKEXEC_ARCH_DEFAULT                   = 0x0\n\tKEXEC_ARCH_IA_64                     = 0x320000\n\tKEXEC_ARCH_MASK                      = 0xffff0000\n\tKEXEC_ARCH_MIPS                      = 0x80000\n\tKEXEC_ARCH_MIPS_LE                   = 0xa0000\n\tKEXEC_ARCH_PPC                       = 0x140000\n\tKEXEC_ARCH_PPC64                     = 0x150000\n\tKEXEC_ARCH_S390                      = 0x160000\n\tKEXEC_ARCH_SH                        = 0x2a0000\n\tKEXEC_ARCH_X86_64                    = 0x3e0000\n\tKEXEC_FILE_NO_INITRAMFS              = 0x4\n\tKEXEC_FILE_ON_CRASH                  = 0x2\n\tKEXEC_FILE_UNLOAD                    = 0x1\n\tKEXEC_ON_CRASH                       = 0x1\n\tKEXEC_PRESERVE_CONTEXT               = 0x2\n\tKEXEC_SEGMENT_MAX                    = 0x10\n\tKEYCTL_ASSUME_AUTHORITY              = 0x10\n\tKEYCTL_CHOWN                         = 0x4\n\tKEYCTL_CLEAR                         = 0x7\n\tKEYCTL_DESCRIBE                      = 0x6\n\tKEYCTL_DH_COMPUTE                    = 0x17\n\tKEYCTL_GET_KEYRING_ID                = 0x0\n\tKEYCTL_GET_PERSISTENT                = 0x16\n\tKEYCTL_GET_SECURITY                  = 0x11\n\tKEYCTL_INSTANTIATE                   = 0xc\n\tKEYCTL_INSTANTIATE_IOV               = 0x14\n\tKEYCTL_INVALIDATE                    = 0x15\n\tKEYCTL_JOIN_SESSION_KEYRING          = 0x1\n\tKEYCTL_LINK                          = 0x8\n\tKEYCTL_NEGATE                        = 0xd\n\tKEYCTL_PKEY_DECRYPT                  = 0x1a\n\tKEYCTL_PKEY_ENCRYPT                  = 0x19\n\tKEYCTL_PKEY_QUERY                    = 0x18\n\tKEYCTL_PKEY_SIGN                     = 0x1b\n\tKEYCTL_PKEY_VERIFY                   = 0x1c\n\tKEYCTL_READ                          = 0xb\n\tKEYCTL_REJECT                        = 0x13\n\tKEYCTL_RESTRICT_KEYRING              = 0x1d\n\tKEYCTL_REVOKE                        = 0x3\n\tKEYCTL_SEARCH                        = 0xa\n\tKEYCTL_SESSION_TO_PARENT             = 0x12\n\tKEYCTL_SETPERM                       = 0x5\n\tKEYCTL_SET_REQKEY_KEYRING            = 0xe\n\tKEYCTL_SET_TIMEOUT                   = 0xf\n\tKEYCTL_SUPPORTS_DECRYPT              = 0x2\n\tKEYCTL_SUPPORTS_ENCRYPT              = 0x1\n\tKEYCTL_SUPPORTS_SIGN                 = 0x4\n\tKEYCTL_SUPPORTS_VERIFY               = 0x8\n\tKEYCTL_UNLINK                        = 0x9\n\tKEYCTL_UPDATE                        = 0x2\n\tKEY_REQKEY_DEFL_DEFAULT              = 0x0\n\tKEY_REQKEY_DEFL_GROUP_KEYRING        = 0x6\n\tKEY_REQKEY_DEFL_NO_CHANGE            = -0x1\n\tKEY_REQKEY_DEFL_PROCESS_KEYRING      = 0x2\n\tKEY_REQKEY_DEFL_REQUESTOR_KEYRING    = 0x7\n\tKEY_REQKEY_DEFL_SESSION_KEYRING      = 0x3\n\tKEY_REQKEY_DEFL_THREAD_KEYRING       = 0x1\n\tKEY_REQKEY_DEFL_USER_KEYRING         = 0x4\n\tKEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5\n\tKEY_SPEC_GROUP_KEYRING               = -0x6\n\tKEY_SPEC_PROCESS_KEYRING             = -0x2\n\tKEY_SPEC_REQKEY_AUTH_KEY             = -0x7\n\tKEY_SPEC_REQUESTOR_KEYRING           = -0x8\n\tKEY_SPEC_SESSION_KEYRING             = -0x3\n\tKEY_SPEC_THREAD_KEYRING              = -0x1\n\tKEY_SPEC_USER_KEYRING                = -0x4\n\tKEY_SPEC_USER_SESSION_KEYRING        = -0x5\n\tLINUX_REBOOT_CMD_CAD_OFF             = 0x0\n\tLINUX_REBOOT_CMD_CAD_ON              = 0x89abcdef\n\tLINUX_REBOOT_CMD_HALT                = 0xcdef0123\n\tLINUX_REBOOT_CMD_KEXEC               = 0x45584543\n\tLINUX_REBOOT_CMD_POWER_OFF           = 0x4321fedc\n\tLINUX_REBOOT_CMD_RESTART             = 0x1234567\n\tLINUX_REBOOT_CMD_RESTART2            = 0xa1b2c3d4\n\tLINUX_REBOOT_CMD_SW_SUSPEND          = 0xd000fce2\n\tLINUX_REBOOT_MAGIC1                  = 0xfee1dead\n\tLINUX_REBOOT_MAGIC2                  = 0x28121969\n\tLOCK_EX                              = 0x2\n\tLOCK_NB                              = 0x4\n\tLOCK_SH                              = 0x1\n\tLOCK_UN                              = 0x8\n\tMADV_DODUMP                          = 0x11\n\tMADV_DOFORK                          = 0xb\n\tMADV_DONTDUMP                        = 0x10\n\tMADV_DONTFORK                        = 0xa\n\tMADV_DONTNEED                        = 0x4\n\tMADV_FREE                            = 0x8\n\tMADV_HUGEPAGE                        = 0xe\n\tMADV_HWPOISON                        = 0x64\n\tMADV_KEEPONFORK                      = 0x13\n\tMADV_MERGEABLE                       = 0xc\n\tMADV_NOHUGEPAGE                      = 0xf\n\tMADV_NORMAL                          = 0x0\n\tMADV_RANDOM                          = 0x1\n\tMADV_REMOVE                          = 0x9\n\tMADV_SEQUENTIAL                      = 0x2\n\tMADV_UNMERGEABLE                     = 0xd\n\tMADV_WILLNEED                        = 0x3\n\tMADV_WIPEONFORK                      = 0x12\n\tMAP_ANON                             = 0x20\n\tMAP_ANONYMOUS                        = 0x20\n\tMAP_DENYWRITE                        = 0x800\n\tMAP_EXECUTABLE                       = 0x1000\n\tMAP_FILE                             = 0x0\n\tMAP_FIXED                            = 0x10\n\tMAP_FIXED_NOREPLACE                  = 0x100000\n\tMAP_GROWSDOWN                        = 0x100\n\tMAP_HUGETLB                          = 0x40000\n\tMAP_HUGE_MASK                        = 0x3f\n\tMAP_HUGE_SHIFT                       = 0x1a\n\tMAP_LOCKED                           = 0x80\n\tMAP_NONBLOCK                         = 0x10000\n\tMAP_NORESERVE                        = 0x40\n\tMAP_POPULATE                         = 0x8000\n\tMAP_PRIVATE                          = 0x2\n\tMAP_SHARED                           = 0x1\n\tMAP_SHARED_VALIDATE                  = 0x3\n\tMAP_STACK                            = 0x20000\n\tMAP_TYPE                             = 0xf\n\tMCAST_BLOCK_SOURCE                   = 0x2b\n\tMCAST_EXCLUDE                        = 0x0\n\tMCAST_INCLUDE                        = 0x1\n\tMCAST_JOIN_GROUP                     = 0x2a\n\tMCAST_JOIN_SOURCE_GROUP              = 0x2e\n\tMCAST_LEAVE_GROUP                    = 0x2d\n\tMCAST_LEAVE_SOURCE_GROUP             = 0x2f\n\tMCAST_MSFILTER                       = 0x30\n\tMCAST_UNBLOCK_SOURCE                 = 0x2c\n\tMCL_CURRENT                          = 0x2000\n\tMCL_FUTURE                           = 0x4000\n\tMCL_ONFAULT                          = 0x8000\n\tMFD_ALLOW_SEALING                    = 0x2\n\tMFD_CLOEXEC                          = 0x1\n\tMFD_HUGETLB                          = 0x4\n\tMFD_HUGE_16GB                        = -0x78000000\n\tMFD_HUGE_16MB                        = 0x60000000\n\tMFD_HUGE_1GB                         = 0x78000000\n\tMFD_HUGE_1MB                         = 0x50000000\n\tMFD_HUGE_256MB                       = 0x70000000\n\tMFD_HUGE_2GB                         = 0x7c000000\n\tMFD_HUGE_2MB                         = 0x54000000\n\tMFD_HUGE_32MB                        = 0x64000000\n\tMFD_HUGE_512KB                       = 0x4c000000\n\tMFD_HUGE_512MB                       = 0x74000000\n\tMFD_HUGE_64KB                        = 0x40000000\n\tMFD_HUGE_8MB                         = 0x5c000000\n\tMFD_HUGE_MASK                        = 0x3f\n\tMFD_HUGE_SHIFT                       = 0x1a\n\tMINIX2_SUPER_MAGIC                   = 0x2468\n\tMINIX2_SUPER_MAGIC2                  = 0x2478\n\tMINIX3_SUPER_MAGIC                   = 0x4d5a\n\tMINIX_SUPER_MAGIC                    = 0x137f\n\tMINIX_SUPER_MAGIC2                   = 0x138f\n\tMNT_DETACH                           = 0x2\n\tMNT_EXPIRE                           = 0x4\n\tMNT_FORCE                            = 0x1\n\tMODULE_INIT_IGNORE_MODVERSIONS       = 0x1\n\tMODULE_INIT_IGNORE_VERMAGIC          = 0x2\n\tMSDOS_SUPER_MAGIC                    = 0x4d44\n\tMSG_BATCH                            = 0x40000\n\tMSG_CMSG_CLOEXEC                     = 0x40000000\n\tMSG_CONFIRM                          = 0x800\n\tMSG_CTRUNC                           = 0x8\n\tMSG_DONTROUTE                        = 0x4\n\tMSG_DONTWAIT                         = 0x40\n\tMSG_EOR                              = 0x80\n\tMSG_ERRQUEUE                         = 0x2000\n\tMSG_FASTOPEN                         = 0x20000000\n\tMSG_FIN                              = 0x200\n\tMSG_MORE                             = 0x8000\n\tMSG_NOSIGNAL                         = 0x4000\n\tMSG_OOB                              = 0x1\n\tMSG_PEEK                             = 0x2\n\tMSG_PROXY                            = 0x10\n\tMSG_RST                              = 0x1000\n\tMSG_SYN                              = 0x400\n\tMSG_TRUNC                            = 0x20\n\tMSG_TRYHARD                          = 0x4\n\tMSG_WAITALL                          = 0x100\n\tMSG_WAITFORONE                       = 0x10000\n\tMSG_ZEROCOPY                         = 0x4000000\n\tMS_ACTIVE                            = 0x40000000\n\tMS_ASYNC                             = 0x1\n\tMS_BIND                              = 0x1000\n\tMS_BORN                              = 0x20000000\n\tMS_DIRSYNC                           = 0x80\n\tMS_INVALIDATE                        = 0x2\n\tMS_I_VERSION                         = 0x800000\n\tMS_KERNMOUNT                         = 0x400000\n\tMS_LAZYTIME                          = 0x2000000\n\tMS_MANDLOCK                          = 0x40\n\tMS_MGC_MSK                           = 0xffff0000\n\tMS_MGC_VAL                           = 0xc0ed0000\n\tMS_MOVE                              = 0x2000\n\tMS_NOATIME                           = 0x400\n\tMS_NODEV                             = 0x4\n\tMS_NODIRATIME                        = 0x800\n\tMS_NOEXEC                            = 0x8\n\tMS_NOREMOTELOCK                      = 0x8000000\n\tMS_NOSEC                             = 0x10000000\n\tMS_NOSUID                            = 0x2\n\tMS_NOUSER                            = -0x80000000\n\tMS_POSIXACL                          = 0x10000\n\tMS_PRIVATE                           = 0x40000\n\tMS_RDONLY                            = 0x1\n\tMS_REC                               = 0x4000\n\tMS_RELATIME                          = 0x200000\n\tMS_REMOUNT                           = 0x20\n\tMS_RMT_MASK                          = 0x2800051\n\tMS_SHARED                            = 0x100000\n\tMS_SILENT                            = 0x8000\n\tMS_SLAVE                             = 0x80000\n\tMS_STRICTATIME                       = 0x1000000\n\tMS_SUBMOUNT                          = 0x4000000\n\tMS_SYNC                              = 0x4\n\tMS_SYNCHRONOUS                       = 0x10\n\tMS_UNBINDABLE                        = 0x20000\n\tMS_VERBOSE                           = 0x8000\n\tMTD_INODE_FS_MAGIC                   = 0x11307854\n\tNAME_MAX                             = 0xff\n\tNCP_SUPER_MAGIC                      = 0x564c\n\tNETLINK_ADD_MEMBERSHIP               = 0x1\n\tNETLINK_AUDIT                        = 0x9\n\tNETLINK_BROADCAST_ERROR              = 0x4\n\tNETLINK_CAP_ACK                      = 0xa\n\tNETLINK_CONNECTOR                    = 0xb\n\tNETLINK_CRYPTO                       = 0x15\n\tNETLINK_DNRTMSG                      = 0xe\n\tNETLINK_DROP_MEMBERSHIP              = 0x2\n\tNETLINK_ECRYPTFS                     = 0x13\n\tNETLINK_EXT_ACK                      = 0xb\n\tNETLINK_FIB_LOOKUP                   = 0xa\n\tNETLINK_FIREWALL                     = 0x3\n\tNETLINK_GENERIC                      = 0x10\n\tNETLINK_GET_STRICT_CHK               = 0xc\n\tNETLINK_INET_DIAG                    = 0x4\n\tNETLINK_IP6_FW                       = 0xd\n\tNETLINK_ISCSI                        = 0x8\n\tNETLINK_KOBJECT_UEVENT               = 0xf\n\tNETLINK_LISTEN_ALL_NSID              = 0x8\n\tNETLINK_LIST_MEMBERSHIPS             = 0x9\n\tNETLINK_NETFILTER                    = 0xc\n\tNETLINK_NFLOG                        = 0x5\n\tNETLINK_NO_ENOBUFS                   = 0x5\n\tNETLINK_PKTINFO                      = 0x3\n\tNETLINK_RDMA                         = 0x14\n\tNETLINK_ROUTE                        = 0x0\n\tNETLINK_RX_RING                      = 0x6\n\tNETLINK_SCSITRANSPORT                = 0x12\n\tNETLINK_SELINUX                      = 0x7\n\tNETLINK_SMC                          = 0x16\n\tNETLINK_SOCK_DIAG                    = 0x4\n\tNETLINK_TX_RING                      = 0x7\n\tNETLINK_UNUSED                       = 0x1\n\tNETLINK_USERSOCK                     = 0x2\n\tNETLINK_XFRM                         = 0x6\n\tNETNSA_MAX                           = 0x5\n\tNETNSA_NSID_NOT_ASSIGNED             = -0x1\n\tNFNETLINK_V0                         = 0x0\n\tNFNLGRP_ACCT_QUOTA                   = 0x8\n\tNFNLGRP_CONNTRACK_DESTROY            = 0x3\n\tNFNLGRP_CONNTRACK_EXP_DESTROY        = 0x6\n\tNFNLGRP_CONNTRACK_EXP_NEW            = 0x4\n\tNFNLGRP_CONNTRACK_EXP_UPDATE         = 0x5\n\tNFNLGRP_CONNTRACK_NEW                = 0x1\n\tNFNLGRP_CONNTRACK_UPDATE             = 0x2\n\tNFNLGRP_MAX                          = 0x9\n\tNFNLGRP_NFTABLES                     = 0x7\n\tNFNLGRP_NFTRACE                      = 0x9\n\tNFNLGRP_NONE                         = 0x0\n\tNFNL_BATCH_MAX                       = 0x1\n\tNFNL_MSG_BATCH_BEGIN                 = 0x10\n\tNFNL_MSG_BATCH_END                   = 0x11\n\tNFNL_NFA_NEST                        = 0x8000\n\tNFNL_SUBSYS_ACCT                     = 0x7\n\tNFNL_SUBSYS_COUNT                    = 0xc\n\tNFNL_SUBSYS_CTHELPER                 = 0x9\n\tNFNL_SUBSYS_CTNETLINK                = 0x1\n\tNFNL_SUBSYS_CTNETLINK_EXP            = 0x2\n\tNFNL_SUBSYS_CTNETLINK_TIMEOUT        = 0x8\n\tNFNL_SUBSYS_IPSET                    = 0x6\n\tNFNL_SUBSYS_NFTABLES                 = 0xa\n\tNFNL_SUBSYS_NFT_COMPAT               = 0xb\n\tNFNL_SUBSYS_NONE                     = 0x0\n\tNFNL_SUBSYS_OSF                      = 0x5\n\tNFNL_SUBSYS_QUEUE                    = 0x3\n\tNFNL_SUBSYS_ULOG                     = 0x4\n\tNFS_SUPER_MAGIC                      = 0x6969\n\tNILFS_SUPER_MAGIC                    = 0x3434\n\tNL0                                  = 0x0\n\tNL1                                  = 0x100\n\tNL2                                  = 0x200\n\tNL3                                  = 0x300\n\tNLA_ALIGNTO                          = 0x4\n\tNLA_F_NESTED                         = 0x8000\n\tNLA_F_NET_BYTEORDER                  = 0x4000\n\tNLA_HDRLEN                           = 0x4\n\tNLDLY                                = 0x300\n\tNLMSG_ALIGNTO                        = 0x4\n\tNLMSG_DONE                           = 0x3\n\tNLMSG_ERROR                          = 0x2\n\tNLMSG_HDRLEN                         = 0x10\n\tNLMSG_MIN_TYPE                       = 0x10\n\tNLMSG_NOOP                           = 0x1\n\tNLMSG_OVERRUN                        = 0x4\n\tNLM_F_ACK                            = 0x4\n\tNLM_F_ACK_TLVS                       = 0x200\n\tNLM_F_APPEND                         = 0x800\n\tNLM_F_ATOMIC                         = 0x400\n\tNLM_F_CAPPED                         = 0x100\n\tNLM_F_CREATE                         = 0x400\n\tNLM_F_DUMP                           = 0x300\n\tNLM_F_DUMP_FILTERED                  = 0x20\n\tNLM_F_DUMP_INTR                      = 0x10\n\tNLM_F_ECHO                           = 0x8\n\tNLM_F_EXCL                           = 0x200\n\tNLM_F_MATCH                          = 0x200\n\tNLM_F_MULTI                          = 0x2\n\tNLM_F_NONREC                         = 0x100\n\tNLM_F_REPLACE                        = 0x100\n\tNLM_F_REQUEST                        = 0x1\n\tNLM_F_ROOT                           = 0x100\n\tNOFLSH                               = 0x80000000\n\tNSFS_MAGIC                           = 0x6e736673\n\tOCFS2_SUPER_MAGIC                    = 0x7461636f\n\tOCRNL                                = 0x8\n\tOFDEL                                = 0x80\n\tOFILL                                = 0x40\n\tOLCUC                                = 0x4\n\tONLCR                                = 0x2\n\tONLRET                               = 0x20\n\tONOCR                                = 0x10\n\tOPENPROM_SUPER_MAGIC                 = 0x9fa1\n\tOPOST                                = 0x1\n\tOVERLAYFS_SUPER_MAGIC                = 0x794c7630\n\tO_ACCMODE                            = 0x3\n\tO_APPEND                             = 0x400\n\tO_ASYNC                              = 0x2000\n\tO_CLOEXEC                            = 0x80000\n\tO_CREAT                              = 0x40\n\tO_DIRECT                             = 0x20000\n\tO_DIRECTORY                          = 0x4000\n\tO_DSYNC                              = 0x1000\n\tO_EXCL                               = 0x80\n\tO_FSYNC                              = 0x101000\n\tO_LARGEFILE                          = 0x0\n\tO_NDELAY                             = 0x800\n\tO_NOATIME                            = 0x40000\n\tO_NOCTTY                             = 0x100\n\tO_NOFOLLOW                           = 0x8000\n\tO_NONBLOCK                           = 0x800\n\tO_PATH                               = 0x200000\n\tO_RDONLY                             = 0x0\n\tO_RDWR                               = 0x2\n\tO_RSYNC                              = 0x101000\n\tO_SYNC                               = 0x101000\n\tO_TMPFILE                            = 0x404000\n\tO_TRUNC                              = 0x200\n\tO_WRONLY                             = 0x1\n\tPACKET_ADD_MEMBERSHIP                = 0x1\n\tPACKET_AUXDATA                       = 0x8\n\tPACKET_BROADCAST                     = 0x1\n\tPACKET_COPY_THRESH                   = 0x7\n\tPACKET_DROP_MEMBERSHIP               = 0x2\n\tPACKET_FANOUT                        = 0x12\n\tPACKET_FANOUT_CBPF                   = 0x6\n\tPACKET_FANOUT_CPU                    = 0x2\n\tPACKET_FANOUT_DATA                   = 0x16\n\tPACKET_FANOUT_EBPF                   = 0x7\n\tPACKET_FANOUT_FLAG_DEFRAG            = 0x8000\n\tPACKET_FANOUT_FLAG_ROLLOVER          = 0x1000\n\tPACKET_FANOUT_FLAG_UNIQUEID          = 0x2000\n\tPACKET_FANOUT_HASH                   = 0x0\n\tPACKET_FANOUT_LB                     = 0x1\n\tPACKET_FANOUT_QM                     = 0x5\n\tPACKET_FANOUT_RND                    = 0x4\n\tPACKET_FANOUT_ROLLOVER               = 0x3\n\tPACKET_FASTROUTE                     = 0x6\n\tPACKET_HDRLEN                        = 0xb\n\tPACKET_HOST                          = 0x0\n\tPACKET_IGNORE_OUTGOING               = 0x17\n\tPACKET_KERNEL                        = 0x7\n\tPACKET_LOOPBACK                      = 0x5\n\tPACKET_LOSS                          = 0xe\n\tPACKET_MR_ALLMULTI                   = 0x2\n\tPACKET_MR_MULTICAST                  = 0x0\n\tPACKET_MR_PROMISC                    = 0x1\n\tPACKET_MR_UNICAST                    = 0x3\n\tPACKET_MULTICAST                     = 0x2\n\tPACKET_ORIGDEV                       = 0x9\n\tPACKET_OTHERHOST                     = 0x3\n\tPACKET_OUTGOING                      = 0x4\n\tPACKET_QDISC_BYPASS                  = 0x14\n\tPACKET_RECV_OUTPUT                   = 0x3\n\tPACKET_RESERVE                       = 0xc\n\tPACKET_ROLLOVER_STATS                = 0x15\n\tPACKET_RX_RING                       = 0x5\n\tPACKET_STATISTICS                    = 0x6\n\tPACKET_TIMESTAMP                     = 0x11\n\tPACKET_TX_HAS_OFF                    = 0x13\n\tPACKET_TX_RING                       = 0xd\n\tPACKET_TX_TIMESTAMP                  = 0x10\n\tPACKET_USER                          = 0x6\n\tPACKET_VERSION                       = 0xa\n\tPACKET_VNET_HDR                      = 0xf\n\tPARENB                               = 0x1000\n\tPARITY_CRC16_PR0                     = 0x2\n\tPARITY_CRC16_PR0_CCITT               = 0x4\n\tPARITY_CRC16_PR1                     = 0x3\n\tPARITY_CRC16_PR1_CCITT               = 0x5\n\tPARITY_CRC32_PR0_CCITT               = 0x6\n\tPARITY_CRC32_PR1_CCITT               = 0x7\n\tPARITY_DEFAULT                       = 0x0\n\tPARITY_NONE                          = 0x1\n\tPARMRK                               = 0x8\n\tPARODD                               = 0x2000\n\tPENDIN                               = 0x20000000\n\tPERF_EVENT_IOC_DISABLE               = 0x20002401\n\tPERF_EVENT_IOC_ENABLE                = 0x20002400\n\tPERF_EVENT_IOC_ID                    = 0x40082407\n\tPERF_EVENT_IOC_MODIFY_ATTRIBUTES     = 0x8008240b\n\tPERF_EVENT_IOC_PAUSE_OUTPUT          = 0x80042409\n\tPERF_EVENT_IOC_PERIOD                = 0x80082404\n\tPERF_EVENT_IOC_QUERY_BPF             = 0xc008240a\n\tPERF_EVENT_IOC_REFRESH               = 0x20002402\n\tPERF_EVENT_IOC_RESET                 = 0x20002403\n\tPERF_EVENT_IOC_SET_BPF               = 0x80042408\n\tPERF_EVENT_IOC_SET_FILTER            = 0x80082406\n\tPERF_EVENT_IOC_SET_OUTPUT            = 0x20002405\n\tPIPEFS_MAGIC                         = 0x50495045\n\tPPPIOCATTACH                         = 0x8004743d\n\tPPPIOCATTCHAN                        = 0x80047438\n\tPPPIOCCONNECT                        = 0x8004743a\n\tPPPIOCDETACH                         = 0x8004743c\n\tPPPIOCDISCONN                        = 0x20007439\n\tPPPIOCGASYNCMAP                      = 0x40047458\n\tPPPIOCGCHAN                          = 0x40047437\n\tPPPIOCGDEBUG                         = 0x40047441\n\tPPPIOCGFLAGS                         = 0x4004745a\n\tPPPIOCGIDLE                          = 0x4010743f\n\tPPPIOCGL2TPSTATS                     = 0x40487436\n\tPPPIOCGMRU                           = 0x40047453\n\tPPPIOCGNPMODE                        = 0xc008744c\n\tPPPIOCGRASYNCMAP                     = 0x40047455\n\tPPPIOCGUNIT                          = 0x40047456\n\tPPPIOCGXASYNCMAP                     = 0x40207450\n\tPPPIOCNEWUNIT                        = 0xc004743e\n\tPPPIOCSACTIVE                        = 0x80107446\n\tPPPIOCSASYNCMAP                      = 0x80047457\n\tPPPIOCSCOMPRESS                      = 0x8010744d\n\tPPPIOCSDEBUG                         = 0x80047440\n\tPPPIOCSFLAGS                         = 0x80047459\n\tPPPIOCSMAXCID                        = 0x80047451\n\tPPPIOCSMRRU                          = 0x8004743b\n\tPPPIOCSMRU                           = 0x80047452\n\tPPPIOCSNPMODE                        = 0x8008744b\n\tPPPIOCSPASS                          = 0x80107447\n\tPPPIOCSRASYNCMAP                     = 0x80047454\n\tPPPIOCSXASYNCMAP                     = 0x8020744f\n\tPPPIOCXFERUNIT                       = 0x2000744e\n\tPRIO_PGRP                            = 0x1\n\tPRIO_PROCESS                         = 0x0\n\tPRIO_USER                            = 0x2\n\tPROC_SUPER_MAGIC                     = 0x9fa0\n\tPROT_EXEC                            = 0x4\n\tPROT_GROWSDOWN                       = 0x1000000\n\tPROT_GROWSUP                         = 0x2000000\n\tPROT_NONE                            = 0x0\n\tPROT_READ                            = 0x1\n\tPROT_SAO                             = 0x10\n\tPROT_WRITE                           = 0x2\n\tPR_CAPBSET_DROP                      = 0x18\n\tPR_CAPBSET_READ                      = 0x17\n\tPR_CAP_AMBIENT                       = 0x2f\n\tPR_CAP_AMBIENT_CLEAR_ALL             = 0x4\n\tPR_CAP_AMBIENT_IS_SET                = 0x1\n\tPR_CAP_AMBIENT_LOWER                 = 0x3\n\tPR_CAP_AMBIENT_RAISE                 = 0x2\n\tPR_ENDIAN_BIG                        = 0x0\n\tPR_ENDIAN_LITTLE                     = 0x1\n\tPR_ENDIAN_PPC_LITTLE                 = 0x2\n\tPR_FPEMU_NOPRINT                     = 0x1\n\tPR_FPEMU_SIGFPE                      = 0x2\n\tPR_FP_EXC_ASYNC                      = 0x2\n\tPR_FP_EXC_DISABLED                   = 0x0\n\tPR_FP_EXC_DIV                        = 0x10000\n\tPR_FP_EXC_INV                        = 0x100000\n\tPR_FP_EXC_NONRECOV                   = 0x1\n\tPR_FP_EXC_OVF                        = 0x20000\n\tPR_FP_EXC_PRECISE                    = 0x3\n\tPR_FP_EXC_RES                        = 0x80000\n\tPR_FP_EXC_SW_ENABLE                  = 0x80\n\tPR_FP_EXC_UND                        = 0x40000\n\tPR_FP_MODE_FR                        = 0x1\n\tPR_FP_MODE_FRE                       = 0x2\n\tPR_GET_CHILD_SUBREAPER               = 0x25\n\tPR_GET_DUMPABLE                      = 0x3\n\tPR_GET_ENDIAN                        = 0x13\n\tPR_GET_FPEMU                         = 0x9\n\tPR_GET_FPEXC                         = 0xb\n\tPR_GET_FP_MODE                       = 0x2e\n\tPR_GET_KEEPCAPS                      = 0x7\n\tPR_GET_NAME                          = 0x10\n\tPR_GET_NO_NEW_PRIVS                  = 0x27\n\tPR_GET_PDEATHSIG                     = 0x2\n\tPR_GET_SECCOMP                       = 0x15\n\tPR_GET_SECUREBITS                    = 0x1b\n\tPR_GET_SPECULATION_CTRL              = 0x34\n\tPR_GET_THP_DISABLE                   = 0x2a\n\tPR_GET_TID_ADDRESS                   = 0x28\n\tPR_GET_TIMERSLACK                    = 0x1e\n\tPR_GET_TIMING                        = 0xd\n\tPR_GET_TSC                           = 0x19\n\tPR_GET_UNALIGN                       = 0x5\n\tPR_MCE_KILL                          = 0x21\n\tPR_MCE_KILL_CLEAR                    = 0x0\n\tPR_MCE_KILL_DEFAULT                  = 0x2\n\tPR_MCE_KILL_EARLY                    = 0x1\n\tPR_MCE_KILL_GET                      = 0x22\n\tPR_MCE_KILL_LATE                     = 0x0\n\tPR_MCE_KILL_SET                      = 0x1\n\tPR_MPX_DISABLE_MANAGEMENT            = 0x2c\n\tPR_MPX_ENABLE_MANAGEMENT             = 0x2b\n\tPR_PAC_APDAKEY                       = 0x4\n\tPR_PAC_APDBKEY                       = 0x8\n\tPR_PAC_APGAKEY                       = 0x10\n\tPR_PAC_APIAKEY                       = 0x1\n\tPR_PAC_APIBKEY                       = 0x2\n\tPR_PAC_RESET_KEYS                    = 0x36\n\tPR_SET_CHILD_SUBREAPER               = 0x24\n\tPR_SET_DUMPABLE                      = 0x4\n\tPR_SET_ENDIAN                        = 0x14\n\tPR_SET_FPEMU                         = 0xa\n\tPR_SET_FPEXC                         = 0xc\n\tPR_SET_FP_MODE                       = 0x2d\n\tPR_SET_KEEPCAPS                      = 0x8\n\tPR_SET_MM                            = 0x23\n\tPR_SET_MM_ARG_END                    = 0x9\n\tPR_SET_MM_ARG_START                  = 0x8\n\tPR_SET_MM_AUXV                       = 0xc\n\tPR_SET_MM_BRK                        = 0x7\n\tPR_SET_MM_END_CODE                   = 0x2\n\tPR_SET_MM_END_DATA                   = 0x4\n\tPR_SET_MM_ENV_END                    = 0xb\n\tPR_SET_MM_ENV_START                  = 0xa\n\tPR_SET_MM_EXE_FILE                   = 0xd\n\tPR_SET_MM_MAP                        = 0xe\n\tPR_SET_MM_MAP_SIZE                   = 0xf\n\tPR_SET_MM_START_BRK                  = 0x6\n\tPR_SET_MM_START_CODE                 = 0x1\n\tPR_SET_MM_START_DATA                 = 0x3\n\tPR_SET_MM_START_STACK                = 0x5\n\tPR_SET_NAME                          = 0xf\n\tPR_SET_NO_NEW_PRIVS                  = 0x26\n\tPR_SET_PDEATHSIG                     = 0x1\n\tPR_SET_PTRACER                       = 0x59616d61\n\tPR_SET_PTRACER_ANY                   = 0xffffffffffffffff\n\tPR_SET_SECCOMP                       = 0x16\n\tPR_SET_SECUREBITS                    = 0x1c\n\tPR_SET_SPECULATION_CTRL              = 0x35\n\tPR_SET_THP_DISABLE                   = 0x29\n\tPR_SET_TIMERSLACK                    = 0x1d\n\tPR_SET_TIMING                        = 0xe\n\tPR_SET_TSC                           = 0x1a\n\tPR_SET_UNALIGN                       = 0x6\n\tPR_SPEC_DISABLE                      = 0x4\n\tPR_SPEC_DISABLE_NOEXEC               = 0x10\n\tPR_SPEC_ENABLE                       = 0x2\n\tPR_SPEC_FORCE_DISABLE                = 0x8\n\tPR_SPEC_INDIRECT_BRANCH              = 0x1\n\tPR_SPEC_NOT_AFFECTED                 = 0x0\n\tPR_SPEC_PRCTL                        = 0x1\n\tPR_SPEC_STORE_BYPASS                 = 0x0\n\tPR_SVE_GET_VL                        = 0x33\n\tPR_SVE_SET_VL                        = 0x32\n\tPR_SVE_SET_VL_ONEXEC                 = 0x40000\n\tPR_SVE_VL_INHERIT                    = 0x20000\n\tPR_SVE_VL_LEN_MASK                   = 0xffff\n\tPR_TASK_PERF_EVENTS_DISABLE          = 0x1f\n\tPR_TASK_PERF_EVENTS_ENABLE           = 0x20\n\tPR_TIMING_STATISTICAL                = 0x0\n\tPR_TIMING_TIMESTAMP                  = 0x1\n\tPR_TSC_ENABLE                        = 0x1\n\tPR_TSC_SIGSEGV                       = 0x2\n\tPR_UNALIGN_NOPRINT                   = 0x1\n\tPR_UNALIGN_SIGBUS                    = 0x2\n\tPSTOREFS_MAGIC                       = 0x6165676c\n\tPTRACE_ATTACH                        = 0x10\n\tPTRACE_CONT                          = 0x7\n\tPTRACE_DETACH                        = 0x11\n\tPTRACE_EVENT_CLONE                   = 0x3\n\tPTRACE_EVENT_EXEC                    = 0x4\n\tPTRACE_EVENT_EXIT                    = 0x6\n\tPTRACE_EVENT_FORK                    = 0x1\n\tPTRACE_EVENT_SECCOMP                 = 0x7\n\tPTRACE_EVENT_STOP                    = 0x80\n\tPTRACE_EVENT_VFORK                   = 0x2\n\tPTRACE_EVENT_VFORK_DONE              = 0x5\n\tPTRACE_GETEVENTMSG                   = 0x4201\n\tPTRACE_GETEVRREGS                    = 0x14\n\tPTRACE_GETFPREGS                     = 0xe\n\tPTRACE_GETREGS                       = 0xc\n\tPTRACE_GETREGS64                     = 0x16\n\tPTRACE_GETREGSET                     = 0x4204\n\tPTRACE_GETSIGINFO                    = 0x4202\n\tPTRACE_GETSIGMASK                    = 0x420a\n\tPTRACE_GETVRREGS                     = 0x12\n\tPTRACE_GETVSRREGS                    = 0x1b\n\tPTRACE_GET_DEBUGREG                  = 0x19\n\tPTRACE_INTERRUPT                     = 0x4207\n\tPTRACE_KILL                          = 0x8\n\tPTRACE_LISTEN                        = 0x4208\n\tPTRACE_O_EXITKILL                    = 0x100000\n\tPTRACE_O_MASK                        = 0x3000ff\n\tPTRACE_O_SUSPEND_SECCOMP             = 0x200000\n\tPTRACE_O_TRACECLONE                  = 0x8\n\tPTRACE_O_TRACEEXEC                   = 0x10\n\tPTRACE_O_TRACEEXIT                   = 0x40\n\tPTRACE_O_TRACEFORK                   = 0x2\n\tPTRACE_O_TRACESECCOMP                = 0x80\n\tPTRACE_O_TRACESYSGOOD                = 0x1\n\tPTRACE_O_TRACEVFORK                  = 0x4\n\tPTRACE_O_TRACEVFORKDONE              = 0x20\n\tPTRACE_PEEKDATA                      = 0x2\n\tPTRACE_PEEKSIGINFO                   = 0x4209\n\tPTRACE_PEEKSIGINFO_SHARED            = 0x1\n\tPTRACE_PEEKTEXT                      = 0x1\n\tPTRACE_PEEKUSR                       = 0x3\n\tPTRACE_POKEDATA                      = 0x5\n\tPTRACE_POKETEXT                      = 0x4\n\tPTRACE_POKEUSR                       = 0x6\n\tPTRACE_SECCOMP_GET_FILTER            = 0x420c\n\tPTRACE_SECCOMP_GET_METADATA          = 0x420d\n\tPTRACE_SEIZE                         = 0x4206\n\tPTRACE_SETEVRREGS                    = 0x15\n\tPTRACE_SETFPREGS                     = 0xf\n\tPTRACE_SETOPTIONS                    = 0x4200\n\tPTRACE_SETREGS                       = 0xd\n\tPTRACE_SETREGS64                     = 0x17\n\tPTRACE_SETREGSET                     = 0x4205\n\tPTRACE_SETSIGINFO                    = 0x4203\n\tPTRACE_SETSIGMASK                    = 0x420b\n\tPTRACE_SETVRREGS                     = 0x13\n\tPTRACE_SETVSRREGS                    = 0x1c\n\tPTRACE_SET_DEBUGREG                  = 0x1a\n\tPTRACE_SINGLEBLOCK                   = 0x100\n\tPTRACE_SINGLESTEP                    = 0x9\n\tPTRACE_SYSCALL                       = 0x18\n\tPTRACE_SYSEMU                        = 0x1d\n\tPTRACE_SYSEMU_SINGLESTEP             = 0x1e\n\tPTRACE_TRACEME                       = 0x0\n\tPT_CCR                               = 0x26\n\tPT_CTR                               = 0x23\n\tPT_DAR                               = 0x29\n\tPT_DSCR                              = 0x2c\n\tPT_DSISR                             = 0x2a\n\tPT_FPR0                              = 0x30\n\tPT_FPSCR                             = 0x50\n\tPT_LNK                               = 0x24\n\tPT_MSR                               = 0x21\n\tPT_NIP                               = 0x20\n\tPT_ORIG_R3                           = 0x22\n\tPT_R0                                = 0x0\n\tPT_R1                                = 0x1\n\tPT_R10                               = 0xa\n\tPT_R11                               = 0xb\n\tPT_R12                               = 0xc\n\tPT_R13                               = 0xd\n\tPT_R14                               = 0xe\n\tPT_R15                               = 0xf\n\tPT_R16                               = 0x10\n\tPT_R17                               = 0x11\n\tPT_R18                               = 0x12\n\tPT_R19                               = 0x13\n\tPT_R2                                = 0x2\n\tPT_R20                               = 0x14\n\tPT_R21                               = 0x15\n\tPT_R22                               = 0x16\n\tPT_R23                               = 0x17\n\tPT_R24                               = 0x18\n\tPT_R25                               = 0x19\n\tPT_R26                               = 0x1a\n\tPT_R27                               = 0x1b\n\tPT_R28                               = 0x1c\n\tPT_R29                               = 0x1d\n\tPT_R3                                = 0x3\n\tPT_R30                               = 0x1e\n\tPT_R31                               = 0x1f\n\tPT_R4                                = 0x4\n\tPT_R5                                = 0x5\n\tPT_R6                                = 0x6\n\tPT_R7                                = 0x7\n\tPT_R8                                = 0x8\n\tPT_R9                                = 0x9\n\tPT_REGS_COUNT                        = 0x2c\n\tPT_RESULT                            = 0x2b\n\tPT_SOFTE                             = 0x27\n\tPT_TRAP                              = 0x28\n\tPT_VR0                               = 0x52\n\tPT_VRSAVE                            = 0x94\n\tPT_VSCR                              = 0x93\n\tPT_VSR0                              = 0x96\n\tPT_VSR31                             = 0xd4\n\tPT_XER                               = 0x25\n\tQNX4_SUPER_MAGIC                     = 0x2f\n\tQNX6_SUPER_MAGIC                     = 0x68191122\n\tRAMFS_MAGIC                          = 0x858458f6\n\tRDTGROUP_SUPER_MAGIC                 = 0x7655821\n\tREISERFS_SUPER_MAGIC                 = 0x52654973\n\tRENAME_EXCHANGE                      = 0x2\n\tRENAME_NOREPLACE                     = 0x1\n\tRENAME_WHITEOUT                      = 0x4\n\tRLIMIT_AS                            = 0x9\n\tRLIMIT_CORE                          = 0x4\n\tRLIMIT_CPU                           = 0x0\n\tRLIMIT_DATA                          = 0x2\n\tRLIMIT_FSIZE                         = 0x1\n\tRLIMIT_LOCKS                         = 0xa\n\tRLIMIT_MEMLOCK                       = 0x8\n\tRLIMIT_MSGQUEUE                      = 0xc\n\tRLIMIT_NICE                          = 0xd\n\tRLIMIT_NOFILE                        = 0x7\n\tRLIMIT_NPROC                         = 0x6\n\tRLIMIT_RSS                           = 0x5\n\tRLIMIT_RTPRIO                        = 0xe\n\tRLIMIT_RTTIME                        = 0xf\n\tRLIMIT_SIGPENDING                    = 0xb\n\tRLIMIT_STACK                         = 0x3\n\tRLIM_INFINITY                        = 0xffffffffffffffff\n\tRNDADDENTROPY                        = 0x80085203\n\tRNDADDTOENTCNT                       = 0x80045201\n\tRNDCLEARPOOL                         = 0x20005206\n\tRNDGETENTCNT                         = 0x40045200\n\tRNDGETPOOL                           = 0x40085202\n\tRNDRESEEDCRNG                        = 0x20005207\n\tRNDZAPENTCNT                         = 0x20005204\n\tRTAX_ADVMSS                          = 0x8\n\tRTAX_CC_ALGO                         = 0x10\n\tRTAX_CWND                            = 0x7\n\tRTAX_FASTOPEN_NO_COOKIE              = 0x11\n\tRTAX_FEATURES                        = 0xc\n\tRTAX_FEATURE_ALLFRAG                 = 0x8\n\tRTAX_FEATURE_ECN                     = 0x1\n\tRTAX_FEATURE_MASK                    = 0xf\n\tRTAX_FEATURE_SACK                    = 0x2\n\tRTAX_FEATURE_TIMESTAMP               = 0x4\n\tRTAX_HOPLIMIT                        = 0xa\n\tRTAX_INITCWND                        = 0xb\n\tRTAX_INITRWND                        = 0xe\n\tRTAX_LOCK                            = 0x1\n\tRTAX_MAX                             = 0x11\n\tRTAX_MTU                             = 0x2\n\tRTAX_QUICKACK                        = 0xf\n\tRTAX_REORDERING                      = 0x9\n\tRTAX_RTO_MIN                         = 0xd\n\tRTAX_RTT                             = 0x4\n\tRTAX_RTTVAR                          = 0x5\n\tRTAX_SSTHRESH                        = 0x6\n\tRTAX_UNSPEC                          = 0x0\n\tRTAX_WINDOW                          = 0x3\n\tRTA_ALIGNTO                          = 0x4\n\tRTA_MAX                              = 0x1d\n\tRTCF_DIRECTSRC                       = 0x4000000\n\tRTCF_DOREDIRECT                      = 0x1000000\n\tRTCF_LOG                             = 0x2000000\n\tRTCF_MASQ                            = 0x400000\n\tRTCF_NAT                             = 0x800000\n\tRTCF_VALVE                           = 0x200000\n\tRTC_AF                               = 0x20\n\tRTC_AIE_OFF                          = 0x20007002\n\tRTC_AIE_ON                           = 0x20007001\n\tRTC_ALM_READ                         = 0x40247008\n\tRTC_ALM_SET                          = 0x80247007\n\tRTC_EPOCH_READ                       = 0x4008700d\n\tRTC_EPOCH_SET                        = 0x8008700e\n\tRTC_IRQF                             = 0x80\n\tRTC_IRQP_READ                        = 0x4008700b\n\tRTC_IRQP_SET                         = 0x8008700c\n\tRTC_MAX_FREQ                         = 0x2000\n\tRTC_PF                               = 0x40\n\tRTC_PIE_OFF                          = 0x20007006\n\tRTC_PIE_ON                           = 0x20007005\n\tRTC_PLL_GET                          = 0x40207011\n\tRTC_PLL_SET                          = 0x80207012\n\tRTC_RD_TIME                          = 0x40247009\n\tRTC_SET_TIME                         = 0x8024700a\n\tRTC_UF                               = 0x10\n\tRTC_UIE_OFF                          = 0x20007004\n\tRTC_UIE_ON                           = 0x20007003\n\tRTC_VL_CLR                           = 0x20007014\n\tRTC_VL_READ                          = 0x40047013\n\tRTC_WIE_OFF                          = 0x20007010\n\tRTC_WIE_ON                           = 0x2000700f\n\tRTC_WKALM_RD                         = 0x40287010\n\tRTC_WKALM_SET                        = 0x8028700f\n\tRTF_ADDRCLASSMASK                    = 0xf8000000\n\tRTF_ADDRCONF                         = 0x40000\n\tRTF_ALLONLINK                        = 0x20000\n\tRTF_BROADCAST                        = 0x10000000\n\tRTF_CACHE                            = 0x1000000\n\tRTF_DEFAULT                          = 0x10000\n\tRTF_DYNAMIC                          = 0x10\n\tRTF_FLOW                             = 0x2000000\n\tRTF_GATEWAY                          = 0x2\n\tRTF_HOST                             = 0x4\n\tRTF_INTERFACE                        = 0x40000000\n\tRTF_IRTT                             = 0x100\n\tRTF_LINKRT                           = 0x100000\n\tRTF_LOCAL                            = 0x80000000\n\tRTF_MODIFIED                         = 0x20\n\tRTF_MSS                              = 0x40\n\tRTF_MTU                              = 0x40\n\tRTF_MULTICAST                        = 0x20000000\n\tRTF_NAT                              = 0x8000000\n\tRTF_NOFORWARD                        = 0x1000\n\tRTF_NONEXTHOP                        = 0x200000\n\tRTF_NOPMTUDISC                       = 0x4000\n\tRTF_POLICY                           = 0x4000000\n\tRTF_REINSTATE                        = 0x8\n\tRTF_REJECT                           = 0x200\n\tRTF_STATIC                           = 0x400\n\tRTF_THROW                            = 0x2000\n\tRTF_UP                               = 0x1\n\tRTF_WINDOW                           = 0x80\n\tRTF_XRESOLVE                         = 0x800\n\tRTM_BASE                             = 0x10\n\tRTM_DELACTION                        = 0x31\n\tRTM_DELADDR                          = 0x15\n\tRTM_DELADDRLABEL                     = 0x49\n\tRTM_DELCHAIN                         = 0x65\n\tRTM_DELLINK                          = 0x11\n\tRTM_DELMDB                           = 0x55\n\tRTM_DELNEIGH                         = 0x1d\n\tRTM_DELNETCONF                       = 0x51\n\tRTM_DELNSID                          = 0x59\n\tRTM_DELQDISC                         = 0x25\n\tRTM_DELROUTE                         = 0x19\n\tRTM_DELRULE                          = 0x21\n\tRTM_DELTCLASS                        = 0x29\n\tRTM_DELTFILTER                       = 0x2d\n\tRTM_F_CLONED                         = 0x200\n\tRTM_F_EQUALIZE                       = 0x400\n\tRTM_F_FIB_MATCH                      = 0x2000\n\tRTM_F_LOOKUP_TABLE                   = 0x1000\n\tRTM_F_NOTIFY                         = 0x100\n\tRTM_F_PREFIX                         = 0x800\n\tRTM_GETACTION                        = 0x32\n\tRTM_GETADDR                          = 0x16\n\tRTM_GETADDRLABEL                     = 0x4a\n\tRTM_GETANYCAST                       = 0x3e\n\tRTM_GETCHAIN                         = 0x66\n\tRTM_GETDCB                           = 0x4e\n\tRTM_GETLINK                          = 0x12\n\tRTM_GETMDB                           = 0x56\n\tRTM_GETMULTICAST                     = 0x3a\n\tRTM_GETNEIGH                         = 0x1e\n\tRTM_GETNEIGHTBL                      = 0x42\n\tRTM_GETNETCONF                       = 0x52\n\tRTM_GETNSID                          = 0x5a\n\tRTM_GETQDISC                         = 0x26\n\tRTM_GETROUTE                         = 0x1a\n\tRTM_GETRULE                          = 0x22\n\tRTM_GETSTATS                         = 0x5e\n\tRTM_GETTCLASS                        = 0x2a\n\tRTM_GETTFILTER                       = 0x2e\n\tRTM_MAX                              = 0x67\n\tRTM_NEWACTION                        = 0x30\n\tRTM_NEWADDR                          = 0x14\n\tRTM_NEWADDRLABEL                     = 0x48\n\tRTM_NEWCACHEREPORT                   = 0x60\n\tRTM_NEWCHAIN                         = 0x64\n\tRTM_NEWLINK                          = 0x10\n\tRTM_NEWMDB                           = 0x54\n\tRTM_NEWNDUSEROPT                     = 0x44\n\tRTM_NEWNEIGH                         = 0x1c\n\tRTM_NEWNEIGHTBL                      = 0x40\n\tRTM_NEWNETCONF                       = 0x50\n\tRTM_NEWNSID                          = 0x58\n\tRTM_NEWPREFIX                        = 0x34\n\tRTM_NEWQDISC                         = 0x24\n\tRTM_NEWROUTE                         = 0x18\n\tRTM_NEWRULE                          = 0x20\n\tRTM_NEWSTATS                         = 0x5c\n\tRTM_NEWTCLASS                        = 0x28\n\tRTM_NEWTFILTER                       = 0x2c\n\tRTM_NR_FAMILIES                      = 0x16\n\tRTM_NR_MSGTYPES                      = 0x58\n\tRTM_SETDCB                           = 0x4f\n\tRTM_SETLINK                          = 0x13\n\tRTM_SETNEIGHTBL                      = 0x43\n\tRTNH_ALIGNTO                         = 0x4\n\tRTNH_COMPARE_MASK                    = 0x19\n\tRTNH_F_DEAD                          = 0x1\n\tRTNH_F_LINKDOWN                      = 0x10\n\tRTNH_F_OFFLOAD                       = 0x8\n\tRTNH_F_ONLINK                        = 0x4\n\tRTNH_F_PERVASIVE                     = 0x2\n\tRTNH_F_UNRESOLVED                    = 0x20\n\tRTN_MAX                              = 0xb\n\tRTPROT_BABEL                         = 0x2a\n\tRTPROT_BGP                           = 0xba\n\tRTPROT_BIRD                          = 0xc\n\tRTPROT_BOOT                          = 0x3\n\tRTPROT_DHCP                          = 0x10\n\tRTPROT_DNROUTED                      = 0xd\n\tRTPROT_EIGRP                         = 0xc0\n\tRTPROT_GATED                         = 0x8\n\tRTPROT_ISIS                          = 0xbb\n\tRTPROT_KERNEL                        = 0x2\n\tRTPROT_MROUTED                       = 0x11\n\tRTPROT_MRT                           = 0xa\n\tRTPROT_NTK                           = 0xf\n\tRTPROT_OSPF                          = 0xbc\n\tRTPROT_RA                            = 0x9\n\tRTPROT_REDIRECT                      = 0x1\n\tRTPROT_RIP                           = 0xbd\n\tRTPROT_STATIC                        = 0x4\n\tRTPROT_UNSPEC                        = 0x0\n\tRTPROT_XORP                          = 0xe\n\tRTPROT_ZEBRA                         = 0xb\n\tRT_CLASS_DEFAULT                     = 0xfd\n\tRT_CLASS_LOCAL                       = 0xff\n\tRT_CLASS_MAIN                        = 0xfe\n\tRT_CLASS_MAX                         = 0xff\n\tRT_CLASS_UNSPEC                      = 0x0\n\tRUSAGE_CHILDREN                      = -0x1\n\tRUSAGE_SELF                          = 0x0\n\tRUSAGE_THREAD                        = 0x1\n\tSCM_CREDENTIALS                      = 0x2\n\tSCM_RIGHTS                           = 0x1\n\tSCM_TIMESTAMP                        = 0x1d\n\tSCM_TIMESTAMPING                     = 0x25\n\tSCM_TIMESTAMPING_OPT_STATS           = 0x36\n\tSCM_TIMESTAMPING_PKTINFO             = 0x3a\n\tSCM_TIMESTAMPNS                      = 0x23\n\tSCM_TXTIME                           = 0x3d\n\tSCM_WIFI_STATUS                      = 0x29\n\tSC_LOG_FLUSH                         = 0x100000\n\tSECCOMP_MODE_DISABLED                = 0x0\n\tSECCOMP_MODE_FILTER                  = 0x2\n\tSECCOMP_MODE_STRICT                  = 0x1\n\tSECURITYFS_MAGIC                     = 0x73636673\n\tSELINUX_MAGIC                        = 0xf97cff8c\n\tSFD_CLOEXEC                          = 0x80000\n\tSFD_NONBLOCK                         = 0x800\n\tSHUT_RD                              = 0x0\n\tSHUT_RDWR                            = 0x2\n\tSHUT_WR                              = 0x1\n\tSIOCADDDLCI                          = 0x8980\n\tSIOCADDMULTI                         = 0x8931\n\tSIOCADDRT                            = 0x890b\n\tSIOCATMARK                           = 0x8905\n\tSIOCBONDCHANGEACTIVE                 = 0x8995\n\tSIOCBONDENSLAVE                      = 0x8990\n\tSIOCBONDINFOQUERY                    = 0x8994\n\tSIOCBONDRELEASE                      = 0x8991\n\tSIOCBONDSETHWADDR                    = 0x8992\n\tSIOCBONDSLAVEINFOQUERY               = 0x8993\n\tSIOCBRADDBR                          = 0x89a0\n\tSIOCBRADDIF                          = 0x89a2\n\tSIOCBRDELBR                          = 0x89a1\n\tSIOCBRDELIF                          = 0x89a3\n\tSIOCDARP                             = 0x8953\n\tSIOCDELDLCI                          = 0x8981\n\tSIOCDELMULTI                         = 0x8932\n\tSIOCDELRT                            = 0x890c\n\tSIOCDEVPRIVATE                       = 0x89f0\n\tSIOCDIFADDR                          = 0x8936\n\tSIOCDRARP                            = 0x8960\n\tSIOCETHTOOL                          = 0x8946\n\tSIOCGARP                             = 0x8954\n\tSIOCGHWTSTAMP                        = 0x89b1\n\tSIOCGIFADDR                          = 0x8915\n\tSIOCGIFBR                            = 0x8940\n\tSIOCGIFBRDADDR                       = 0x8919\n\tSIOCGIFCONF                          = 0x8912\n\tSIOCGIFCOUNT                         = 0x8938\n\tSIOCGIFDSTADDR                       = 0x8917\n\tSIOCGIFENCAP                         = 0x8925\n\tSIOCGIFFLAGS                         = 0x8913\n\tSIOCGIFHWADDR                        = 0x8927\n\tSIOCGIFINDEX                         = 0x8933\n\tSIOCGIFMAP                           = 0x8970\n\tSIOCGIFMEM                           = 0x891f\n\tSIOCGIFMETRIC                        = 0x891d\n\tSIOCGIFMTU                           = 0x8921\n\tSIOCGIFNAME                          = 0x8910\n\tSIOCGIFNETMASK                       = 0x891b\n\tSIOCGIFPFLAGS                        = 0x8935\n\tSIOCGIFSLAVE                         = 0x8929\n\tSIOCGIFTXQLEN                        = 0x8942\n\tSIOCGIFVLAN                          = 0x8982\n\tSIOCGMIIPHY                          = 0x8947\n\tSIOCGMIIREG                          = 0x8948\n\tSIOCGPGRP                            = 0x8904\n\tSIOCGPPPCSTATS                       = 0x89f2\n\tSIOCGPPPSTATS                        = 0x89f0\n\tSIOCGPPPVER                          = 0x89f1\n\tSIOCGRARP                            = 0x8961\n\tSIOCGSKNS                            = 0x894c\n\tSIOCGSTAMP                           = 0x8906\n\tSIOCGSTAMPNS                         = 0x8907\n\tSIOCINQ                              = 0x4004667f\n\tSIOCOUTQ                             = 0x40047473\n\tSIOCOUTQNSD                          = 0x894b\n\tSIOCPROTOPRIVATE                     = 0x89e0\n\tSIOCRTMSG                            = 0x890d\n\tSIOCSARP                             = 0x8955\n\tSIOCSHWTSTAMP                        = 0x89b0\n\tSIOCSIFADDR                          = 0x8916\n\tSIOCSIFBR                            = 0x8941\n\tSIOCSIFBRDADDR                       = 0x891a\n\tSIOCSIFDSTADDR                       = 0x8918\n\tSIOCSIFENCAP                         = 0x8926\n\tSIOCSIFFLAGS                         = 0x8914\n\tSIOCSIFHWADDR                        = 0x8924\n\tSIOCSIFHWBROADCAST                   = 0x8937\n\tSIOCSIFLINK                          = 0x8911\n\tSIOCSIFMAP                           = 0x8971\n\tSIOCSIFMEM                           = 0x8920\n\tSIOCSIFMETRIC                        = 0x891e\n\tSIOCSIFMTU                           = 0x8922\n\tSIOCSIFNAME                          = 0x8923\n\tSIOCSIFNETMASK                       = 0x891c\n\tSIOCSIFPFLAGS                        = 0x8934\n\tSIOCSIFSLAVE                         = 0x8930\n\tSIOCSIFTXQLEN                        = 0x8943\n\tSIOCSIFVLAN                          = 0x8983\n\tSIOCSMIIREG                          = 0x8949\n\tSIOCSPGRP                            = 0x8902\n\tSIOCSRARP                            = 0x8962\n\tSIOCWANDEV                           = 0x894a\n\tSMACK_MAGIC                          = 0x43415d53\n\tSMART_AUTOSAVE                       = 0xd2\n\tSMART_AUTO_OFFLINE                   = 0xdb\n\tSMART_DISABLE                        = 0xd9\n\tSMART_ENABLE                         = 0xd8\n\tSMART_HCYL_PASS                      = 0xc2\n\tSMART_IMMEDIATE_OFFLINE              = 0xd4\n\tSMART_LCYL_PASS                      = 0x4f\n\tSMART_READ_LOG_SECTOR                = 0xd5\n\tSMART_READ_THRESHOLDS                = 0xd1\n\tSMART_READ_VALUES                    = 0xd0\n\tSMART_SAVE                           = 0xd3\n\tSMART_STATUS                         = 0xda\n\tSMART_WRITE_LOG_SECTOR               = 0xd6\n\tSMART_WRITE_THRESHOLDS               = 0xd7\n\tSMB_SUPER_MAGIC                      = 0x517b\n\tSOCKFS_MAGIC                         = 0x534f434b\n\tSOCK_CLOEXEC                         = 0x80000\n\tSOCK_DCCP                            = 0x6\n\tSOCK_DGRAM                           = 0x2\n\tSOCK_IOC_TYPE                        = 0x89\n\tSOCK_NONBLOCK                        = 0x800\n\tSOCK_PACKET                          = 0xa\n\tSOCK_RAW                             = 0x3\n\tSOCK_RDM                             = 0x4\n\tSOCK_SEQPACKET                       = 0x5\n\tSOCK_STREAM                          = 0x1\n\tSOL_AAL                              = 0x109\n\tSOL_ALG                              = 0x117\n\tSOL_ATM                              = 0x108\n\tSOL_CAIF                             = 0x116\n\tSOL_CAN_BASE                         = 0x64\n\tSOL_DCCP                             = 0x10d\n\tSOL_DECNET                           = 0x105\n\tSOL_ICMPV6                           = 0x3a\n\tSOL_IP                               = 0x0\n\tSOL_IPV6                             = 0x29\n\tSOL_IRDA                             = 0x10a\n\tSOL_IUCV                             = 0x115\n\tSOL_KCM                              = 0x119\n\tSOL_LLC                              = 0x10c\n\tSOL_NETBEUI                          = 0x10b\n\tSOL_NETLINK                          = 0x10e\n\tSOL_NFC                              = 0x118\n\tSOL_PACKET                           = 0x107\n\tSOL_PNPIPE                           = 0x113\n\tSOL_PPPOL2TP                         = 0x111\n\tSOL_RAW                              = 0xff\n\tSOL_RDS                              = 0x114\n\tSOL_RXRPC                            = 0x110\n\tSOL_SOCKET                           = 0x1\n\tSOL_TCP                              = 0x6\n\tSOL_TIPC                             = 0x10f\n\tSOL_TLS                              = 0x11a\n\tSOL_X25                              = 0x106\n\tSOL_XDP                              = 0x11b\n\tSOMAXCONN                            = 0x80\n\tSO_ACCEPTCONN                        = 0x1e\n\tSO_ATTACH_BPF                        = 0x32\n\tSO_ATTACH_FILTER                     = 0x1a\n\tSO_ATTACH_REUSEPORT_CBPF             = 0x33\n\tSO_ATTACH_REUSEPORT_EBPF             = 0x34\n\tSO_BINDTODEVICE                      = 0x19\n\tSO_BINDTOIFINDEX                     = 0x3e\n\tSO_BPF_EXTENSIONS                    = 0x30\n\tSO_BROADCAST                         = 0x6\n\tSO_BSDCOMPAT                         = 0xe\n\tSO_BUSY_POLL                         = 0x2e\n\tSO_CNX_ADVICE                        = 0x35\n\tSO_COOKIE                            = 0x39\n\tSO_DEBUG                             = 0x1\n\tSO_DETACH_BPF                        = 0x1b\n\tSO_DETACH_FILTER                     = 0x1b\n\tSO_DOMAIN                            = 0x27\n\tSO_DONTROUTE                         = 0x5\n\tSO_EE_CODE_TXTIME_INVALID_PARAM      = 0x1\n\tSO_EE_CODE_TXTIME_MISSED             = 0x2\n\tSO_EE_CODE_ZEROCOPY_COPIED           = 0x1\n\tSO_EE_ORIGIN_ICMP                    = 0x2\n\tSO_EE_ORIGIN_ICMP6                   = 0x3\n\tSO_EE_ORIGIN_LOCAL                   = 0x1\n\tSO_EE_ORIGIN_NONE                    = 0x0\n\tSO_EE_ORIGIN_TIMESTAMPING            = 0x4\n\tSO_EE_ORIGIN_TXSTATUS                = 0x4\n\tSO_EE_ORIGIN_TXTIME                  = 0x6\n\tSO_EE_ORIGIN_ZEROCOPY                = 0x5\n\tSO_ERROR                             = 0x4\n\tSO_GET_FILTER                        = 0x1a\n\tSO_INCOMING_CPU                      = 0x31\n\tSO_INCOMING_NAPI_ID                  = 0x38\n\tSO_KEEPALIVE                         = 0x9\n\tSO_LINGER                            = 0xd\n\tSO_LOCK_FILTER                       = 0x2c\n\tSO_MARK                              = 0x24\n\tSO_MAX_PACING_RATE                   = 0x2f\n\tSO_MEMINFO                           = 0x37\n\tSO_NOFCS                             = 0x2b\n\tSO_NO_CHECK                          = 0xb\n\tSO_OOBINLINE                         = 0xa\n\tSO_PASSCRED                          = 0x14\n\tSO_PASSSEC                           = 0x22\n\tSO_PEEK_OFF                          = 0x2a\n\tSO_PEERCRED                          = 0x15\n\tSO_PEERGROUPS                        = 0x3b\n\tSO_PEERNAME                          = 0x1c\n\tSO_PEERSEC                           = 0x1f\n\tSO_PRIORITY                          = 0xc\n\tSO_PROTOCOL                          = 0x26\n\tSO_RCVBUF                            = 0x8\n\tSO_RCVBUFFORCE                       = 0x21\n\tSO_RCVLOWAT                          = 0x10\n\tSO_RCVTIMEO                          = 0x12\n\tSO_RCVTIMEO_NEW                      = 0x42\n\tSO_RCVTIMEO_OLD                      = 0x12\n\tSO_REUSEADDR                         = 0x2\n\tSO_REUSEPORT                         = 0xf\n\tSO_RXQ_OVFL                          = 0x28\n\tSO_SECURITY_AUTHENTICATION           = 0x16\n\tSO_SECURITY_ENCRYPTION_NETWORK       = 0x18\n\tSO_SECURITY_ENCRYPTION_TRANSPORT     = 0x17\n\tSO_SELECT_ERR_QUEUE                  = 0x2d\n\tSO_SNDBUF                            = 0x7\n\tSO_SNDBUFFORCE                       = 0x20\n\tSO_SNDLOWAT                          = 0x11\n\tSO_SNDTIMEO                          = 0x13\n\tSO_SNDTIMEO_NEW                      = 0x43\n\tSO_SNDTIMEO_OLD                      = 0x13\n\tSO_TIMESTAMP                         = 0x1d\n\tSO_TIMESTAMPING                      = 0x25\n\tSO_TIMESTAMPING_NEW                  = 0x41\n\tSO_TIMESTAMPING_OLD                  = 0x25\n\tSO_TIMESTAMPNS                       = 0x23\n\tSO_TIMESTAMPNS_NEW                   = 0x40\n\tSO_TIMESTAMPNS_OLD                   = 0x23\n\tSO_TIMESTAMP_NEW                     = 0x3f\n\tSO_TIMESTAMP_OLD                     = 0x1d\n\tSO_TXTIME                            = 0x3d\n\tSO_TYPE                              = 0x3\n\tSO_VM_SOCKETS_BUFFER_MAX_SIZE        = 0x2\n\tSO_VM_SOCKETS_BUFFER_MIN_SIZE        = 0x1\n\tSO_VM_SOCKETS_BUFFER_SIZE            = 0x0\n\tSO_VM_SOCKETS_CONNECT_TIMEOUT        = 0x6\n\tSO_VM_SOCKETS_NONBLOCK_TXRX          = 0x7\n\tSO_VM_SOCKETS_PEER_HOST_VM_ID        = 0x3\n\tSO_VM_SOCKETS_TRUSTED                = 0x5\n\tSO_WIFI_STATUS                       = 0x29\n\tSO_ZEROCOPY                          = 0x3c\n\tSPLICE_F_GIFT                        = 0x8\n\tSPLICE_F_MORE                        = 0x4\n\tSPLICE_F_MOVE                        = 0x1\n\tSPLICE_F_NONBLOCK                    = 0x2\n\tSQUASHFS_MAGIC                       = 0x73717368\n\tSTACK_END_MAGIC                      = 0x57ac6e9d\n\tSTATX_ALL                            = 0xfff\n\tSTATX_ATIME                          = 0x20\n\tSTATX_ATTR_APPEND                    = 0x20\n\tSTATX_ATTR_AUTOMOUNT                 = 0x1000\n\tSTATX_ATTR_COMPRESSED                = 0x4\n\tSTATX_ATTR_ENCRYPTED                 = 0x800\n\tSTATX_ATTR_IMMUTABLE                 = 0x10\n\tSTATX_ATTR_NODUMP                    = 0x40\n\tSTATX_BASIC_STATS                    = 0x7ff\n\tSTATX_BLOCKS                         = 0x400\n\tSTATX_BTIME                          = 0x800\n\tSTATX_CTIME                          = 0x80\n\tSTATX_GID                            = 0x10\n\tSTATX_INO                            = 0x100\n\tSTATX_MODE                           = 0x2\n\tSTATX_MTIME                          = 0x40\n\tSTATX_NLINK                          = 0x4\n\tSTATX_SIZE                           = 0x200\n\tSTATX_TYPE                           = 0x1\n\tSTATX_UID                            = 0x8\n\tSTATX__RESERVED                      = 0x80000000\n\tSYNC_FILE_RANGE_WAIT_AFTER           = 0x4\n\tSYNC_FILE_RANGE_WAIT_BEFORE          = 0x1\n\tSYNC_FILE_RANGE_WRITE                = 0x2\n\tSYSFS_MAGIC                          = 0x62656572\n\tS_BLKSIZE                            = 0x200\n\tS_IEXEC                              = 0x40\n\tS_IFBLK                              = 0x6000\n\tS_IFCHR                              = 0x2000\n\tS_IFDIR                              = 0x4000\n\tS_IFIFO                              = 0x1000\n\tS_IFLNK                              = 0xa000\n\tS_IFMT                               = 0xf000\n\tS_IFREG                              = 0x8000\n\tS_IFSOCK                             = 0xc000\n\tS_IREAD                              = 0x100\n\tS_IRGRP                              = 0x20\n\tS_IROTH                              = 0x4\n\tS_IRUSR                              = 0x100\n\tS_IRWXG                              = 0x38\n\tS_IRWXO                              = 0x7\n\tS_IRWXU                              = 0x1c0\n\tS_ISGID                              = 0x400\n\tS_ISUID                              = 0x800\n\tS_ISVTX                              = 0x200\n\tS_IWGRP                              = 0x10\n\tS_IWOTH                              = 0x2\n\tS_IWRITE                             = 0x80\n\tS_IWUSR                              = 0x80\n\tS_IXGRP                              = 0x8\n\tS_IXOTH                              = 0x1\n\tS_IXUSR                              = 0x40\n\tTAB0                                 = 0x0\n\tTAB1                                 = 0x400\n\tTAB2                                 = 0x800\n\tTAB3                                 = 0xc00\n\tTABDLY                               = 0xc00\n\tTASKSTATS_CMD_ATTR_MAX               = 0x4\n\tTASKSTATS_CMD_MAX                    = 0x2\n\tTASKSTATS_GENL_NAME                  = \"TASKSTATS\"\n\tTASKSTATS_GENL_VERSION               = 0x1\n\tTASKSTATS_TYPE_MAX                   = 0x6\n\tTASKSTATS_VERSION                    = 0x9\n\tTCFLSH                               = 0x2000741f\n\tTCGETA                               = 0x40147417\n\tTCGETS                               = 0x402c7413\n\tTCIFLUSH                             = 0x0\n\tTCIOFF                               = 0x2\n\tTCIOFLUSH                            = 0x2\n\tTCION                                = 0x3\n\tTCOFLUSH                             = 0x1\n\tTCOOFF                               = 0x0\n\tTCOON                                = 0x1\n\tTCP_BPF_IW                           = 0x3e9\n\tTCP_BPF_SNDCWND_CLAMP                = 0x3ea\n\tTCP_CC_INFO                          = 0x1a\n\tTCP_CM_INQ                           = 0x24\n\tTCP_CONGESTION                       = 0xd\n\tTCP_COOKIE_IN_ALWAYS                 = 0x1\n\tTCP_COOKIE_MAX                       = 0x10\n\tTCP_COOKIE_MIN                       = 0x8\n\tTCP_COOKIE_OUT_NEVER                 = 0x2\n\tTCP_COOKIE_PAIR_SIZE                 = 0x20\n\tTCP_COOKIE_TRANSACTIONS              = 0xf\n\tTCP_CORK                             = 0x3\n\tTCP_DEFER_ACCEPT                     = 0x9\n\tTCP_FASTOPEN                         = 0x17\n\tTCP_FASTOPEN_CONNECT                 = 0x1e\n\tTCP_FASTOPEN_KEY                     = 0x21\n\tTCP_FASTOPEN_NO_COOKIE               = 0x22\n\tTCP_INFO                             = 0xb\n\tTCP_INQ                              = 0x24\n\tTCP_KEEPCNT                          = 0x6\n\tTCP_KEEPIDLE                         = 0x4\n\tTCP_KEEPINTVL                        = 0x5\n\tTCP_LINGER2                          = 0x8\n\tTCP_MAXSEG                           = 0x2\n\tTCP_MAXWIN                           = 0xffff\n\tTCP_MAX_WINSHIFT                     = 0xe\n\tTCP_MD5SIG                           = 0xe\n\tTCP_MD5SIG_EXT                       = 0x20\n\tTCP_MD5SIG_FLAG_PREFIX               = 0x1\n\tTCP_MD5SIG_MAXKEYLEN                 = 0x50\n\tTCP_MSS                              = 0x200\n\tTCP_MSS_DEFAULT                      = 0x218\n\tTCP_MSS_DESIRED                      = 0x4c4\n\tTCP_NODELAY                          = 0x1\n\tTCP_NOTSENT_LOWAT                    = 0x19\n\tTCP_QUEUE_SEQ                        = 0x15\n\tTCP_QUICKACK                         = 0xc\n\tTCP_REPAIR                           = 0x13\n\tTCP_REPAIR_OFF                       = 0x0\n\tTCP_REPAIR_OFF_NO_WP                 = -0x1\n\tTCP_REPAIR_ON                        = 0x1\n\tTCP_REPAIR_OPTIONS                   = 0x16\n\tTCP_REPAIR_QUEUE                     = 0x14\n\tTCP_REPAIR_WINDOW                    = 0x1d\n\tTCP_SAVED_SYN                        = 0x1c\n\tTCP_SAVE_SYN                         = 0x1b\n\tTCP_SYNCNT                           = 0x7\n\tTCP_S_DATA_IN                        = 0x4\n\tTCP_S_DATA_OUT                       = 0x8\n\tTCP_THIN_DUPACK                      = 0x11\n\tTCP_THIN_LINEAR_TIMEOUTS             = 0x10\n\tTCP_TIMESTAMP                        = 0x18\n\tTCP_ULP                              = 0x1f\n\tTCP_USER_TIMEOUT                     = 0x12\n\tTCP_WINDOW_CLAMP                     = 0xa\n\tTCP_ZEROCOPY_RECEIVE                 = 0x23\n\tTCSAFLUSH                            = 0x2\n\tTCSBRK                               = 0x2000741d\n\tTCSBRKP                              = 0x5425\n\tTCSETA                               = 0x80147418\n\tTCSETAF                              = 0x8014741c\n\tTCSETAW                              = 0x80147419\n\tTCSETS                               = 0x802c7414\n\tTCSETSF                              = 0x802c7416\n\tTCSETSW                              = 0x802c7415\n\tTCXONC                               = 0x2000741e\n\tTIMER_ABSTIME                        = 0x1\n\tTIOCCBRK                             = 0x5428\n\tTIOCCONS                             = 0x541d\n\tTIOCEXCL                             = 0x540c\n\tTIOCGDEV                             = 0x40045432\n\tTIOCGETC                             = 0x40067412\n\tTIOCGETD                             = 0x5424\n\tTIOCGETP                             = 0x40067408\n\tTIOCGEXCL                            = 0x40045440\n\tTIOCGICOUNT                          = 0x545d\n\tTIOCGISO7816                         = 0x40285442\n\tTIOCGLCKTRMIOS                       = 0x5456\n\tTIOCGLTC                             = 0x40067474\n\tTIOCGPGRP                            = 0x40047477\n\tTIOCGPKT                             = 0x40045438\n\tTIOCGPTLCK                           = 0x40045439\n\tTIOCGPTN                             = 0x40045430\n\tTIOCGPTPEER                          = 0x20005441\n\tTIOCGRS485                           = 0x542e\n\tTIOCGSERIAL                          = 0x541e\n\tTIOCGSID                             = 0x5429\n\tTIOCGSOFTCAR                         = 0x5419\n\tTIOCGWINSZ                           = 0x40087468\n\tTIOCINQ                              = 0x4004667f\n\tTIOCLINUX                            = 0x541c\n\tTIOCMBIC                             = 0x5417\n\tTIOCMBIS                             = 0x5416\n\tTIOCMGET                             = 0x5415\n\tTIOCMIWAIT                           = 0x545c\n\tTIOCMSET                             = 0x5418\n\tTIOCM_CAR                            = 0x40\n\tTIOCM_CD                             = 0x40\n\tTIOCM_CTS                            = 0x20\n\tTIOCM_DSR                            = 0x100\n\tTIOCM_DTR                            = 0x2\n\tTIOCM_LE                             = 0x1\n\tTIOCM_LOOP                           = 0x8000\n\tTIOCM_OUT1                           = 0x2000\n\tTIOCM_OUT2                           = 0x4000\n\tTIOCM_RI                             = 0x80\n\tTIOCM_RNG                            = 0x80\n\tTIOCM_RTS                            = 0x4\n\tTIOCM_SR                             = 0x10\n\tTIOCM_ST                             = 0x8\n\tTIOCNOTTY                            = 0x5422\n\tTIOCNXCL                             = 0x540d\n\tTIOCOUTQ                             = 0x40047473\n\tTIOCPKT                              = 0x5420\n\tTIOCPKT_DATA                         = 0x0\n\tTIOCPKT_DOSTOP                       = 0x20\n\tTIOCPKT_FLUSHREAD                    = 0x1\n\tTIOCPKT_FLUSHWRITE                   = 0x2\n\tTIOCPKT_IOCTL                        = 0x40\n\tTIOCPKT_NOSTOP                       = 0x10\n\tTIOCPKT_START                        = 0x8\n\tTIOCPKT_STOP                         = 0x4\n\tTIOCSBRK                             = 0x5427\n\tTIOCSCTTY                            = 0x540e\n\tTIOCSERCONFIG                        = 0x5453\n\tTIOCSERGETLSR                        = 0x5459\n\tTIOCSERGETMULTI                      = 0x545a\n\tTIOCSERGSTRUCT                       = 0x5458\n\tTIOCSERGWILD                         = 0x5454\n\tTIOCSERSETMULTI                      = 0x545b\n\tTIOCSERSWILD                         = 0x5455\n\tTIOCSER_TEMT                         = 0x1\n\tTIOCSETC                             = 0x80067411\n\tTIOCSETD                             = 0x5423\n\tTIOCSETN                             = 0x8006740a\n\tTIOCSETP                             = 0x80067409\n\tTIOCSIG                              = 0x80045436\n\tTIOCSISO7816                         = 0xc0285443\n\tTIOCSLCKTRMIOS                       = 0x5457\n\tTIOCSLTC                             = 0x80067475\n\tTIOCSPGRP                            = 0x80047476\n\tTIOCSPTLCK                           = 0x80045431\n\tTIOCSRS485                           = 0x542f\n\tTIOCSSERIAL                          = 0x541f\n\tTIOCSSOFTCAR                         = 0x541a\n\tTIOCSTART                            = 0x2000746e\n\tTIOCSTI                              = 0x5412\n\tTIOCSTOP                             = 0x2000746f\n\tTIOCSWINSZ                           = 0x80087467\n\tTIOCVHANGUP                          = 0x5437\n\tTMPFS_MAGIC                          = 0x1021994\n\tTOSTOP                               = 0x400000\n\tTPACKET_ALIGNMENT                    = 0x10\n\tTPACKET_HDRLEN                       = 0x34\n\tTP_STATUS_AVAILABLE                  = 0x0\n\tTP_STATUS_BLK_TMO                    = 0x20\n\tTP_STATUS_COPY                       = 0x2\n\tTP_STATUS_CSUMNOTREADY               = 0x8\n\tTP_STATUS_CSUM_VALID                 = 0x80\n\tTP_STATUS_KERNEL                     = 0x0\n\tTP_STATUS_LOSING                     = 0x4\n\tTP_STATUS_SENDING                    = 0x2\n\tTP_STATUS_SEND_REQUEST               = 0x1\n\tTP_STATUS_TS_RAW_HARDWARE            = -0x80000000\n\tTP_STATUS_TS_SOFTWARE                = 0x20000000\n\tTP_STATUS_TS_SYS_HARDWARE            = 0x40000000\n\tTP_STATUS_USER                       = 0x1\n\tTP_STATUS_VLAN_TPID_VALID            = 0x40\n\tTP_STATUS_VLAN_VALID                 = 0x10\n\tTP_STATUS_WRONG_FORMAT               = 0x4\n\tTRACEFS_MAGIC                        = 0x74726163\n\tTS_COMM_LEN                          = 0x20\n\tTUNATTACHFILTER                      = 0x801054d5\n\tTUNDETACHFILTER                      = 0x801054d6\n\tTUNGETFEATURES                       = 0x400454cf\n\tTUNGETFILTER                         = 0x401054db\n\tTUNGETIFF                            = 0x400454d2\n\tTUNGETSNDBUF                         = 0x400454d3\n\tTUNGETVNETBE                         = 0x400454df\n\tTUNGETVNETHDRSZ                      = 0x400454d7\n\tTUNGETVNETLE                         = 0x400454dd\n\tTUNSETCARRIER                        = 0x800454e2\n\tTUNSETDEBUG                          = 0x800454c9\n\tTUNSETFILTEREBPF                     = 0x400454e1\n\tTUNSETGROUP                          = 0x800454ce\n\tTUNSETIFF                            = 0x800454ca\n\tTUNSETIFINDEX                        = 0x800454da\n\tTUNSETLINK                           = 0x800454cd\n\tTUNSETNOCSUM                         = 0x800454c8\n\tTUNSETOFFLOAD                        = 0x800454d0\n\tTUNSETOWNER                          = 0x800454cc\n\tTUNSETPERSIST                        = 0x800454cb\n\tTUNSETQUEUE                          = 0x800454d9\n\tTUNSETSNDBUF                         = 0x800454d4\n\tTUNSETSTEERINGEBPF                   = 0x400454e0\n\tTUNSETTXFILTER                       = 0x800454d1\n\tTUNSETVNETBE                         = 0x800454de\n\tTUNSETVNETHDRSZ                      = 0x800454d8\n\tTUNSETVNETLE                         = 0x800454dc\n\tUBI_IOCATT                           = 0x80186f40\n\tUBI_IOCDET                           = 0x80046f41\n\tUBI_IOCEBCH                          = 0x80044f02\n\tUBI_IOCEBER                          = 0x80044f01\n\tUBI_IOCEBISMAP                       = 0x40044f05\n\tUBI_IOCEBMAP                         = 0x80084f03\n\tUBI_IOCEBUNMAP                       = 0x80044f04\n\tUBI_IOCMKVOL                         = 0x80986f00\n\tUBI_IOCRMVOL                         = 0x80046f01\n\tUBI_IOCRNVOL                         = 0x91106f03\n\tUBI_IOCRPEB                          = 0x80046f04\n\tUBI_IOCRSVOL                         = 0x800c6f02\n\tUBI_IOCSETVOLPROP                    = 0x80104f06\n\tUBI_IOCSPEB                          = 0x80046f05\n\tUBI_IOCVOLCRBLK                      = 0x80804f07\n\tUBI_IOCVOLRMBLK                      = 0x20004f08\n\tUBI_IOCVOLUP                         = 0x80084f00\n\tUDF_SUPER_MAGIC                      = 0x15013346\n\tUMOUNT_NOFOLLOW                      = 0x8\n\tUSBDEVICE_SUPER_MAGIC                = 0x9fa2\n\tUTIME_NOW                            = 0x3fffffff\n\tUTIME_OMIT                           = 0x3ffffffe\n\tV9FS_MAGIC                           = 0x1021997\n\tVDISCARD                             = 0x10\n\tVEOF                                 = 0x4\n\tVEOL                                 = 0x6\n\tVEOL2                                = 0x8\n\tVERASE                               = 0x2\n\tVINTR                                = 0x0\n\tVKILL                                = 0x3\n\tVLNEXT                               = 0xf\n\tVMADDR_CID_ANY                       = 0xffffffff\n\tVMADDR_CID_HOST                      = 0x2\n\tVMADDR_CID_HYPERVISOR                = 0x0\n\tVMADDR_CID_RESERVED                  = 0x1\n\tVMADDR_PORT_ANY                      = 0xffffffff\n\tVMIN                                 = 0x5\n\tVM_SOCKETS_INVALID_VERSION           = 0xffffffff\n\tVQUIT                                = 0x1\n\tVREPRINT                             = 0xb\n\tVSTART                               = 0xd\n\tVSTOP                                = 0xe\n\tVSUSP                                = 0xc\n\tVSWTC                                = 0x9\n\tVT0                                  = 0x0\n\tVT1                                  = 0x10000\n\tVTDLY                                = 0x10000\n\tVTIME                                = 0x7\n\tVWERASE                              = 0xa\n\tWALL                                 = 0x40000000\n\tWCLONE                               = 0x80000000\n\tWCONTINUED                           = 0x8\n\tWDIOC_GETBOOTSTATUS                  = 0x40045702\n\tWDIOC_GETPRETIMEOUT                  = 0x40045709\n\tWDIOC_GETSTATUS                      = 0x40045701\n\tWDIOC_GETSUPPORT                     = 0x40285700\n\tWDIOC_GETTEMP                        = 0x40045703\n\tWDIOC_GETTIMELEFT                    = 0x4004570a\n\tWDIOC_GETTIMEOUT                     = 0x40045707\n\tWDIOC_KEEPALIVE                      = 0x40045705\n\tWDIOC_SETOPTIONS                     = 0x40045704\n\tWDIOC_SETPRETIMEOUT                  = 0xc0045708\n\tWDIOC_SETTIMEOUT                     = 0xc0045706\n\tWEXITED                              = 0x4\n\tWIN_ACKMEDIACHANGE                   = 0xdb\n\tWIN_CHECKPOWERMODE1                  = 0xe5\n\tWIN_CHECKPOWERMODE2                  = 0x98\n\tWIN_DEVICE_RESET                     = 0x8\n\tWIN_DIAGNOSE                         = 0x90\n\tWIN_DOORLOCK                         = 0xde\n\tWIN_DOORUNLOCK                       = 0xdf\n\tWIN_DOWNLOAD_MICROCODE               = 0x92\n\tWIN_FLUSH_CACHE                      = 0xe7\n\tWIN_FLUSH_CACHE_EXT                  = 0xea\n\tWIN_FORMAT                           = 0x50\n\tWIN_GETMEDIASTATUS                   = 0xda\n\tWIN_IDENTIFY                         = 0xec\n\tWIN_IDENTIFY_DMA                     = 0xee\n\tWIN_IDLEIMMEDIATE                    = 0xe1\n\tWIN_INIT                             = 0x60\n\tWIN_MEDIAEJECT                       = 0xed\n\tWIN_MULTREAD                         = 0xc4\n\tWIN_MULTREAD_EXT                     = 0x29\n\tWIN_MULTWRITE                        = 0xc5\n\tWIN_MULTWRITE_EXT                    = 0x39\n\tWIN_NOP                              = 0x0\n\tWIN_PACKETCMD                        = 0xa0\n\tWIN_PIDENTIFY                        = 0xa1\n\tWIN_POSTBOOT                         = 0xdc\n\tWIN_PREBOOT                          = 0xdd\n\tWIN_QUEUED_SERVICE                   = 0xa2\n\tWIN_READ                             = 0x20\n\tWIN_READDMA                          = 0xc8\n\tWIN_READDMA_EXT                      = 0x25\n\tWIN_READDMA_ONCE                     = 0xc9\n\tWIN_READDMA_QUEUED                   = 0xc7\n\tWIN_READDMA_QUEUED_EXT               = 0x26\n\tWIN_READ_BUFFER                      = 0xe4\n\tWIN_READ_EXT                         = 0x24\n\tWIN_READ_LONG                        = 0x22\n\tWIN_READ_LONG_ONCE                   = 0x23\n\tWIN_READ_NATIVE_MAX                  = 0xf8\n\tWIN_READ_NATIVE_MAX_EXT              = 0x27\n\tWIN_READ_ONCE                        = 0x21\n\tWIN_RECAL                            = 0x10\n\tWIN_RESTORE                          = 0x10\n\tWIN_SECURITY_DISABLE                 = 0xf6\n\tWIN_SECURITY_ERASE_PREPARE           = 0xf3\n\tWIN_SECURITY_ERASE_UNIT              = 0xf4\n\tWIN_SECURITY_FREEZE_LOCK             = 0xf5\n\tWIN_SECURITY_SET_PASS                = 0xf1\n\tWIN_SECURITY_UNLOCK                  = 0xf2\n\tWIN_SEEK                             = 0x70\n\tWIN_SETFEATURES                      = 0xef\n\tWIN_SETIDLE1                         = 0xe3\n\tWIN_SETIDLE2                         = 0x97\n\tWIN_SETMULT                          = 0xc6\n\tWIN_SET_MAX                          = 0xf9\n\tWIN_SET_MAX_EXT                      = 0x37\n\tWIN_SLEEPNOW1                        = 0xe6\n\tWIN_SLEEPNOW2                        = 0x99\n\tWIN_SMART                            = 0xb0\n\tWIN_SPECIFY                          = 0x91\n\tWIN_SRST                             = 0x8\n\tWIN_STANDBY                          = 0xe2\n\tWIN_STANDBY2                         = 0x96\n\tWIN_STANDBYNOW1                      = 0xe0\n\tWIN_STANDBYNOW2                      = 0x94\n\tWIN_VERIFY                           = 0x40\n\tWIN_VERIFY_EXT                       = 0x42\n\tWIN_VERIFY_ONCE                      = 0x41\n\tWIN_WRITE                            = 0x30\n\tWIN_WRITEDMA                         = 0xca\n\tWIN_WRITEDMA_EXT                     = 0x35\n\tWIN_WRITEDMA_ONCE                    = 0xcb\n\tWIN_WRITEDMA_QUEUED                  = 0xcc\n\tWIN_WRITEDMA_QUEUED_EXT              = 0x36\n\tWIN_WRITE_BUFFER                     = 0xe8\n\tWIN_WRITE_EXT                        = 0x34\n\tWIN_WRITE_LONG                       = 0x32\n\tWIN_WRITE_LONG_ONCE                  = 0x33\n\tWIN_WRITE_ONCE                       = 0x31\n\tWIN_WRITE_SAME                       = 0xe9\n\tWIN_WRITE_VERIFY                     = 0x3c\n\tWNOHANG                              = 0x1\n\tWNOTHREAD                            = 0x20000000\n\tWNOWAIT                              = 0x1000000\n\tWORDSIZE                             = 0x40\n\tWSTOPPED                             = 0x2\n\tWUNTRACED                            = 0x2\n\tXATTR_CREATE                         = 0x1\n\tXATTR_REPLACE                        = 0x2\n\tXCASE                                = 0x4000\n\tXDP_COPY                             = 0x2\n\tXDP_FLAGS_DRV_MODE                   = 0x4\n\tXDP_FLAGS_HW_MODE                    = 0x8\n\tXDP_FLAGS_MASK                       = 0xf\n\tXDP_FLAGS_MODES                      = 0xe\n\tXDP_FLAGS_SKB_MODE                   = 0x2\n\tXDP_FLAGS_UPDATE_IF_NOEXIST          = 0x1\n\tXDP_MMAP_OFFSETS                     = 0x1\n\tXDP_PACKET_HEADROOM                  = 0x100\n\tXDP_PGOFF_RX_RING                    = 0x0\n\tXDP_PGOFF_TX_RING                    = 0x80000000\n\tXDP_RX_RING                          = 0x2\n\tXDP_SHARED_UMEM                      = 0x1\n\tXDP_STATISTICS                       = 0x7\n\tXDP_TX_RING                          = 0x3\n\tXDP_UMEM_COMPLETION_RING             = 0x6\n\tXDP_UMEM_FILL_RING                   = 0x5\n\tXDP_UMEM_PGOFF_COMPLETION_RING       = 0x180000000\n\tXDP_UMEM_PGOFF_FILL_RING             = 0x100000000\n\tXDP_UMEM_REG                         = 0x4\n\tXDP_ZEROCOPY                         = 0x4\n\tXENFS_SUPER_MAGIC                    = 0xabba1974\n\tXFS_SUPER_MAGIC                      = 0x58465342\n\tXTABS                                = 0xc00\n\tZSMALLOC_MAGIC                       = 0x58295829\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x62)\n\tEADDRNOTAVAIL   = syscall.Errno(0x63)\n\tEADV            = syscall.Errno(0x44)\n\tEAFNOSUPPORT    = syscall.Errno(0x61)\n\tEAGAIN          = syscall.Errno(0xb)\n\tEALREADY        = syscall.Errno(0x72)\n\tEBADE           = syscall.Errno(0x34)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADFD          = syscall.Errno(0x4d)\n\tEBADMSG         = syscall.Errno(0x4a)\n\tEBADR           = syscall.Errno(0x35)\n\tEBADRQC         = syscall.Errno(0x38)\n\tEBADSLT         = syscall.Errno(0x39)\n\tEBFONT          = syscall.Errno(0x3b)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x7d)\n\tECHILD          = syscall.Errno(0xa)\n\tECHRNG          = syscall.Errno(0x2c)\n\tECOMM           = syscall.Errno(0x46)\n\tECONNABORTED    = syscall.Errno(0x67)\n\tECONNREFUSED    = syscall.Errno(0x6f)\n\tECONNRESET      = syscall.Errno(0x68)\n\tEDEADLK         = syscall.Errno(0x23)\n\tEDEADLOCK       = syscall.Errno(0x3a)\n\tEDESTADDRREQ    = syscall.Errno(0x59)\n\tEDOM            = syscall.Errno(0x21)\n\tEDOTDOT         = syscall.Errno(0x49)\n\tEDQUOT          = syscall.Errno(0x7a)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEHOSTDOWN       = syscall.Errno(0x70)\n\tEHOSTUNREACH    = syscall.Errno(0x71)\n\tEHWPOISON       = syscall.Errno(0x85)\n\tEIDRM           = syscall.Errno(0x2b)\n\tEILSEQ          = syscall.Errno(0x54)\n\tEINPROGRESS     = syscall.Errno(0x73)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEISCONN         = syscall.Errno(0x6a)\n\tEISDIR          = syscall.Errno(0x15)\n\tEISNAM          = syscall.Errno(0x78)\n\tEKEYEXPIRED     = syscall.Errno(0x7f)\n\tEKEYREJECTED    = syscall.Errno(0x81)\n\tEKEYREVOKED     = syscall.Errno(0x80)\n\tEL2HLT          = syscall.Errno(0x33)\n\tEL2NSYNC        = syscall.Errno(0x2d)\n\tEL3HLT          = syscall.Errno(0x2e)\n\tEL3RST          = syscall.Errno(0x2f)\n\tELIBACC         = syscall.Errno(0x4f)\n\tELIBBAD         = syscall.Errno(0x50)\n\tELIBEXEC        = syscall.Errno(0x53)\n\tELIBMAX         = syscall.Errno(0x52)\n\tELIBSCN         = syscall.Errno(0x51)\n\tELNRNG          = syscall.Errno(0x30)\n\tELOOP           = syscall.Errno(0x28)\n\tEMEDIUMTYPE     = syscall.Errno(0x7c)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x5a)\n\tEMULTIHOP       = syscall.Errno(0x48)\n\tENAMETOOLONG    = syscall.Errno(0x24)\n\tENAVAIL         = syscall.Errno(0x77)\n\tENETDOWN        = syscall.Errno(0x64)\n\tENETRESET       = syscall.Errno(0x66)\n\tENETUNREACH     = syscall.Errno(0x65)\n\tENFILE          = syscall.Errno(0x17)\n\tENOANO          = syscall.Errno(0x37)\n\tENOBUFS         = syscall.Errno(0x69)\n\tENOCSI          = syscall.Errno(0x32)\n\tENODATA         = syscall.Errno(0x3d)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOKEY          = syscall.Errno(0x7e)\n\tENOLCK          = syscall.Errno(0x25)\n\tENOLINK         = syscall.Errno(0x43)\n\tENOMEDIUM       = syscall.Errno(0x7b)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x2a)\n\tENONET          = syscall.Errno(0x40)\n\tENOPKG          = syscall.Errno(0x41)\n\tENOPROTOOPT     = syscall.Errno(0x5c)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSR           = syscall.Errno(0x3f)\n\tENOSTR          = syscall.Errno(0x3c)\n\tENOSYS          = syscall.Errno(0x26)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x6b)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x27)\n\tENOTNAM         = syscall.Errno(0x76)\n\tENOTRECOVERABLE = syscall.Errno(0x83)\n\tENOTSOCK        = syscall.Errno(0x58)\n\tENOTSUP         = syscall.Errno(0x5f)\n\tENOTTY          = syscall.Errno(0x19)\n\tENOTUNIQ        = syscall.Errno(0x4c)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x5f)\n\tEOVERFLOW       = syscall.Errno(0x4b)\n\tEOWNERDEAD      = syscall.Errno(0x82)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x60)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROTO          = syscall.Errno(0x47)\n\tEPROTONOSUPPORT = syscall.Errno(0x5d)\n\tEPROTOTYPE      = syscall.Errno(0x5b)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMCHG         = syscall.Errno(0x4e)\n\tEREMOTE         = syscall.Errno(0x42)\n\tEREMOTEIO       = syscall.Errno(0x79)\n\tERESTART        = syscall.Errno(0x55)\n\tERFKILL         = syscall.Errno(0x84)\n\tEROFS           = syscall.Errno(0x1e)\n\tESHUTDOWN       = syscall.Errno(0x6c)\n\tESOCKTNOSUPPORT = syscall.Errno(0x5e)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESRMNT          = syscall.Errno(0x45)\n\tESTALE          = syscall.Errno(0x74)\n\tESTRPIPE        = syscall.Errno(0x56)\n\tETIME           = syscall.Errno(0x3e)\n\tETIMEDOUT       = syscall.Errno(0x6e)\n\tETOOMANYREFS    = syscall.Errno(0x6d)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUCLEAN         = syscall.Errno(0x75)\n\tEUNATCH         = syscall.Errno(0x31)\n\tEUSERS          = syscall.Errno(0x57)\n\tEWOULDBLOCK     = syscall.Errno(0xb)\n\tEXDEV           = syscall.Errno(0x12)\n\tEXFULL          = syscall.Errno(0x36)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0x7)\n\tSIGCHLD   = syscall.Signal(0x11)\n\tSIGCLD    = syscall.Signal(0x11)\n\tSIGCONT   = syscall.Signal(0x12)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x1d)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPOLL   = syscall.Signal(0x1d)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGPWR    = syscall.Signal(0x1e)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTKFLT = syscall.Signal(0x10)\n\tSIGSTOP   = syscall.Signal(0x13)\n\tSIGSYS    = syscall.Signal(0x1f)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x14)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x17)\n\tSIGUSR1   = syscall.Signal(0xa)\n\tSIGUSR2   = syscall.Signal(0xc)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"no such device or address\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device or resource busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"invalid cross-device link\"},\n\t{19, \"ENODEV\", \"no such device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"numerical result out of range\"},\n\t{35, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{36, \"ENAMETOOLONG\", \"file name too long\"},\n\t{37, \"ENOLCK\", \"no locks available\"},\n\t{38, \"ENOSYS\", \"function not implemented\"},\n\t{39, \"ENOTEMPTY\", \"directory not empty\"},\n\t{40, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{42, \"ENOMSG\", \"no message of desired type\"},\n\t{43, \"EIDRM\", \"identifier removed\"},\n\t{44, \"ECHRNG\", \"channel number out of range\"},\n\t{45, \"EL2NSYNC\", \"level 2 not synchronized\"},\n\t{46, \"EL3HLT\", \"level 3 halted\"},\n\t{47, \"EL3RST\", \"level 3 reset\"},\n\t{48, \"ELNRNG\", \"link number out of range\"},\n\t{49, \"EUNATCH\", \"protocol driver not attached\"},\n\t{50, \"ENOCSI\", \"no CSI structure available\"},\n\t{51, \"EL2HLT\", \"level 2 halted\"},\n\t{52, \"EBADE\", \"invalid exchange\"},\n\t{53, \"EBADR\", \"invalid request descriptor\"},\n\t{54, \"EXFULL\", \"exchange full\"},\n\t{55, \"ENOANO\", \"no anode\"},\n\t{56, \"EBADRQC\", \"invalid request code\"},\n\t{57, \"EBADSLT\", \"invalid slot\"},\n\t{58, \"EDEADLOCK\", \"file locking deadlock error\"},\n\t{59, \"EBFONT\", \"bad font file format\"},\n\t{60, \"ENOSTR\", \"device not a stream\"},\n\t{61, \"ENODATA\", \"no data available\"},\n\t{62, \"ETIME\", \"timer expired\"},\n\t{63, \"ENOSR\", \"out of streams resources\"},\n\t{64, \"ENONET\", \"machine is not on the network\"},\n\t{65, \"ENOPKG\", \"package not installed\"},\n\t{66, \"EREMOTE\", \"object is remote\"},\n\t{67, \"ENOLINK\", \"link has been severed\"},\n\t{68, \"EADV\", \"advertise error\"},\n\t{69, \"ESRMNT\", \"srmount error\"},\n\t{70, \"ECOMM\", \"communication error on send\"},\n\t{71, \"EPROTO\", \"protocol error\"},\n\t{72, \"EMULTIHOP\", \"multihop attempted\"},\n\t{73, \"EDOTDOT\", \"RFS specific error\"},\n\t{74, \"EBADMSG\", \"bad message\"},\n\t{75, \"EOVERFLOW\", \"value too large for defined data type\"},\n\t{76, \"ENOTUNIQ\", \"name not unique on network\"},\n\t{77, \"EBADFD\", \"file descriptor in bad state\"},\n\t{78, \"EREMCHG\", \"remote address changed\"},\n\t{79, \"ELIBACC\", \"can not access a needed shared library\"},\n\t{80, \"ELIBBAD\", \"accessing a corrupted shared library\"},\n\t{81, \"ELIBSCN\", \".lib section in a.out corrupted\"},\n\t{82, \"ELIBMAX\", \"attempting to link in too many shared libraries\"},\n\t{83, \"ELIBEXEC\", \"cannot exec a shared library directly\"},\n\t{84, \"EILSEQ\", \"invalid or incomplete multibyte or wide character\"},\n\t{85, \"ERESTART\", \"interrupted system call should be restarted\"},\n\t{86, \"ESTRPIPE\", \"streams pipe error\"},\n\t{87, \"EUSERS\", \"too many users\"},\n\t{88, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{89, \"EDESTADDRREQ\", \"destination address required\"},\n\t{90, \"EMSGSIZE\", \"message too long\"},\n\t{91, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{92, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{93, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{94, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{95, \"ENOTSUP\", \"operation not supported\"},\n\t{96, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{97, \"EAFNOSUPPORT\", \"address family not supported by protocol\"},\n\t{98, \"EADDRINUSE\", \"address already in use\"},\n\t{99, \"EADDRNOTAVAIL\", \"cannot assign requested address\"},\n\t{100, \"ENETDOWN\", \"network is down\"},\n\t{101, \"ENETUNREACH\", \"network is unreachable\"},\n\t{102, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{103, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{104, \"ECONNRESET\", \"connection reset by peer\"},\n\t{105, \"ENOBUFS\", \"no buffer space available\"},\n\t{106, \"EISCONN\", \"transport endpoint is already connected\"},\n\t{107, \"ENOTCONN\", \"transport endpoint is not connected\"},\n\t{108, \"ESHUTDOWN\", \"cannot send after transport endpoint shutdown\"},\n\t{109, \"ETOOMANYREFS\", \"too many references: cannot splice\"},\n\t{110, \"ETIMEDOUT\", \"connection timed out\"},\n\t{111, \"ECONNREFUSED\", \"connection refused\"},\n\t{112, \"EHOSTDOWN\", \"host is down\"},\n\t{113, \"EHOSTUNREACH\", \"no route to host\"},\n\t{114, \"EALREADY\", \"operation already in progress\"},\n\t{115, \"EINPROGRESS\", \"operation now in progress\"},\n\t{116, \"ESTALE\", \"stale file handle\"},\n\t{117, \"EUCLEAN\", \"structure needs cleaning\"},\n\t{118, \"ENOTNAM\", \"not a XENIX named type file\"},\n\t{119, \"ENAVAIL\", \"no XENIX semaphores available\"},\n\t{120, \"EISNAM\", \"is a named type file\"},\n\t{121, \"EREMOTEIO\", \"remote I/O error\"},\n\t{122, \"EDQUOT\", \"disk quota exceeded\"},\n\t{123, \"ENOMEDIUM\", \"no medium found\"},\n\t{124, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{125, \"ECANCELED\", \"operation canceled\"},\n\t{126, \"ENOKEY\", \"required key not available\"},\n\t{127, \"EKEYEXPIRED\", \"key has expired\"},\n\t{128, \"EKEYREVOKED\", \"key has been revoked\"},\n\t{129, \"EKEYREJECTED\", \"key was rejected by service\"},\n\t{130, \"EOWNERDEAD\", \"owner died\"},\n\t{131, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{132, \"ERFKILL\", \"operation not possible due to RF-kill\"},\n\t{133, \"EHWPOISON\", \"memory page has hardware error\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/breakpoint trap\"},\n\t{6, \"SIGABRT\", \"aborted\"},\n\t{7, \"SIGBUS\", \"bus error\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGUSR1\", \"user defined signal 1\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGUSR2\", \"user defined signal 2\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGSTKFLT\", \"stack fault\"},\n\t{17, \"SIGCHLD\", \"child exited\"},\n\t{18, \"SIGCONT\", \"continued\"},\n\t{19, \"SIGSTOP\", \"stopped (signal)\"},\n\t{20, \"SIGTSTP\", \"stopped\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGURG\", \"urgent I/O condition\"},\n\t{24, \"SIGXCPU\", \"CPU time limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"file size limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window changed\"},\n\t{29, \"SIGIO\", \"I/O possible\"},\n\t{30, \"SIGPWR\", \"power failure\"},\n\t{31, \"SIGSYS\", \"bad system call\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go",
    "content": "// mkerrors.sh -Wall -Werror -static -I/tmp/include\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build ppc64le,linux\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAAFS_MAGIC                           = 0x5a3c69f0\n\tADFS_SUPER_MAGIC                     = 0xadf5\n\tAFFS_SUPER_MAGIC                     = 0xadff\n\tAFS_FS_MAGIC                         = 0x6b414653\n\tAFS_SUPER_MAGIC                      = 0x5346414f\n\tAF_ALG                               = 0x26\n\tAF_APPLETALK                         = 0x5\n\tAF_ASH                               = 0x12\n\tAF_ATMPVC                            = 0x8\n\tAF_ATMSVC                            = 0x14\n\tAF_AX25                              = 0x3\n\tAF_BLUETOOTH                         = 0x1f\n\tAF_BRIDGE                            = 0x7\n\tAF_CAIF                              = 0x25\n\tAF_CAN                               = 0x1d\n\tAF_DECnet                            = 0xc\n\tAF_ECONET                            = 0x13\n\tAF_FILE                              = 0x1\n\tAF_IB                                = 0x1b\n\tAF_IEEE802154                        = 0x24\n\tAF_INET                              = 0x2\n\tAF_INET6                             = 0xa\n\tAF_IPX                               = 0x4\n\tAF_IRDA                              = 0x17\n\tAF_ISDN                              = 0x22\n\tAF_IUCV                              = 0x20\n\tAF_KCM                               = 0x29\n\tAF_KEY                               = 0xf\n\tAF_LLC                               = 0x1a\n\tAF_LOCAL                             = 0x1\n\tAF_MAX                               = 0x2d\n\tAF_MPLS                              = 0x1c\n\tAF_NETBEUI                           = 0xd\n\tAF_NETLINK                           = 0x10\n\tAF_NETROM                            = 0x6\n\tAF_NFC                               = 0x27\n\tAF_PACKET                            = 0x11\n\tAF_PHONET                            = 0x23\n\tAF_PPPOX                             = 0x18\n\tAF_QIPCRTR                           = 0x2a\n\tAF_RDS                               = 0x15\n\tAF_ROSE                              = 0xb\n\tAF_ROUTE                             = 0x10\n\tAF_RXRPC                             = 0x21\n\tAF_SECURITY                          = 0xe\n\tAF_SMC                               = 0x2b\n\tAF_SNA                               = 0x16\n\tAF_TIPC                              = 0x1e\n\tAF_UNIX                              = 0x1\n\tAF_UNSPEC                            = 0x0\n\tAF_VSOCK                             = 0x28\n\tAF_WANPIPE                           = 0x19\n\tAF_X25                               = 0x9\n\tAF_XDP                               = 0x2c\n\tALG_OP_DECRYPT                       = 0x0\n\tALG_OP_ENCRYPT                       = 0x1\n\tALG_SET_AEAD_ASSOCLEN                = 0x4\n\tALG_SET_AEAD_AUTHSIZE                = 0x5\n\tALG_SET_IV                           = 0x2\n\tALG_SET_KEY                          = 0x1\n\tALG_SET_OP                           = 0x3\n\tANON_INODE_FS_MAGIC                  = 0x9041934\n\tARPHRD_6LOWPAN                       = 0x339\n\tARPHRD_ADAPT                         = 0x108\n\tARPHRD_APPLETLK                      = 0x8\n\tARPHRD_ARCNET                        = 0x7\n\tARPHRD_ASH                           = 0x30d\n\tARPHRD_ATM                           = 0x13\n\tARPHRD_AX25                          = 0x3\n\tARPHRD_BIF                           = 0x307\n\tARPHRD_CAIF                          = 0x336\n\tARPHRD_CAN                           = 0x118\n\tARPHRD_CHAOS                         = 0x5\n\tARPHRD_CISCO                         = 0x201\n\tARPHRD_CSLIP                         = 0x101\n\tARPHRD_CSLIP6                        = 0x103\n\tARPHRD_DDCMP                         = 0x205\n\tARPHRD_DLCI                          = 0xf\n\tARPHRD_ECONET                        = 0x30e\n\tARPHRD_EETHER                        = 0x2\n\tARPHRD_ETHER                         = 0x1\n\tARPHRD_EUI64                         = 0x1b\n\tARPHRD_FCAL                          = 0x311\n\tARPHRD_FCFABRIC                      = 0x313\n\tARPHRD_FCPL                          = 0x312\n\tARPHRD_FCPP                          = 0x310\n\tARPHRD_FDDI                          = 0x306\n\tARPHRD_FRAD                          = 0x302\n\tARPHRD_HDLC                          = 0x201\n\tARPHRD_HIPPI                         = 0x30c\n\tARPHRD_HWX25                         = 0x110\n\tARPHRD_IEEE1394                      = 0x18\n\tARPHRD_IEEE802                       = 0x6\n\tARPHRD_IEEE80211                     = 0x321\n\tARPHRD_IEEE80211_PRISM               = 0x322\n\tARPHRD_IEEE80211_RADIOTAP            = 0x323\n\tARPHRD_IEEE802154                    = 0x324\n\tARPHRD_IEEE802154_MONITOR            = 0x325\n\tARPHRD_IEEE802_TR                    = 0x320\n\tARPHRD_INFINIBAND                    = 0x20\n\tARPHRD_IP6GRE                        = 0x337\n\tARPHRD_IPDDP                         = 0x309\n\tARPHRD_IPGRE                         = 0x30a\n\tARPHRD_IRDA                          = 0x30f\n\tARPHRD_LAPB                          = 0x204\n\tARPHRD_LOCALTLK                      = 0x305\n\tARPHRD_LOOPBACK                      = 0x304\n\tARPHRD_METRICOM                      = 0x17\n\tARPHRD_NETLINK                       = 0x338\n\tARPHRD_NETROM                        = 0x0\n\tARPHRD_NONE                          = 0xfffe\n\tARPHRD_PHONET                        = 0x334\n\tARPHRD_PHONET_PIPE                   = 0x335\n\tARPHRD_PIMREG                        = 0x30b\n\tARPHRD_PPP                           = 0x200\n\tARPHRD_PRONET                        = 0x4\n\tARPHRD_RAWHDLC                       = 0x206\n\tARPHRD_RAWIP                         = 0x207\n\tARPHRD_ROSE                          = 0x10e\n\tARPHRD_RSRVD                         = 0x104\n\tARPHRD_SIT                           = 0x308\n\tARPHRD_SKIP                          = 0x303\n\tARPHRD_SLIP                          = 0x100\n\tARPHRD_SLIP6                         = 0x102\n\tARPHRD_TUNNEL                        = 0x300\n\tARPHRD_TUNNEL6                       = 0x301\n\tARPHRD_VOID                          = 0xffff\n\tARPHRD_VSOCKMON                      = 0x33a\n\tARPHRD_X25                           = 0x10f\n\tAUTOFS_SUPER_MAGIC                   = 0x187\n\tB0                                   = 0x0\n\tB1000000                             = 0x17\n\tB110                                 = 0x3\n\tB115200                              = 0x11\n\tB1152000                             = 0x18\n\tB1200                                = 0x9\n\tB134                                 = 0x4\n\tB150                                 = 0x5\n\tB1500000                             = 0x19\n\tB1800                                = 0xa\n\tB19200                               = 0xe\n\tB200                                 = 0x6\n\tB2000000                             = 0x1a\n\tB230400                              = 0x12\n\tB2400                                = 0xb\n\tB2500000                             = 0x1b\n\tB300                                 = 0x7\n\tB3000000                             = 0x1c\n\tB3500000                             = 0x1d\n\tB38400                               = 0xf\n\tB4000000                             = 0x1e\n\tB460800                              = 0x13\n\tB4800                                = 0xc\n\tB50                                  = 0x1\n\tB500000                              = 0x14\n\tB57600                               = 0x10\n\tB576000                              = 0x15\n\tB600                                 = 0x8\n\tB75                                  = 0x2\n\tB921600                              = 0x16\n\tB9600                                = 0xd\n\tBALLOON_KVM_MAGIC                    = 0x13661366\n\tBDEVFS_MAGIC                         = 0x62646576\n\tBINDERFS_SUPER_MAGIC                 = 0x6c6f6f70\n\tBINFMTFS_MAGIC                       = 0x42494e4d\n\tBLKBSZGET                            = 0x40081270\n\tBLKBSZSET                            = 0x80081271\n\tBLKFLSBUF                            = 0x20001261\n\tBLKFRAGET                            = 0x20001265\n\tBLKFRASET                            = 0x20001264\n\tBLKGETSIZE                           = 0x20001260\n\tBLKGETSIZE64                         = 0x40081272\n\tBLKPBSZGET                           = 0x2000127b\n\tBLKRAGET                             = 0x20001263\n\tBLKRASET                             = 0x20001262\n\tBLKROGET                             = 0x2000125e\n\tBLKROSET                             = 0x2000125d\n\tBLKRRPART                            = 0x2000125f\n\tBLKSECTGET                           = 0x20001267\n\tBLKSECTSET                           = 0x20001266\n\tBLKSSZGET                            = 0x20001268\n\tBOTHER                               = 0x1f\n\tBPF_A                                = 0x10\n\tBPF_ABS                              = 0x20\n\tBPF_ADD                              = 0x0\n\tBPF_ALU                              = 0x4\n\tBPF_ALU64                            = 0x7\n\tBPF_AND                              = 0x50\n\tBPF_ANY                              = 0x0\n\tBPF_ARSH                             = 0xc0\n\tBPF_B                                = 0x10\n\tBPF_BUILD_ID_SIZE                    = 0x14\n\tBPF_CALL                             = 0x80\n\tBPF_DEVCG_ACC_MKNOD                  = 0x1\n\tBPF_DEVCG_ACC_READ                   = 0x2\n\tBPF_DEVCG_ACC_WRITE                  = 0x4\n\tBPF_DEVCG_DEV_BLOCK                  = 0x1\n\tBPF_DEVCG_DEV_CHAR                   = 0x2\n\tBPF_DIV                              = 0x30\n\tBPF_DW                               = 0x18\n\tBPF_END                              = 0xd0\n\tBPF_EXIST                            = 0x2\n\tBPF_EXIT                             = 0x90\n\tBPF_FROM_BE                          = 0x8\n\tBPF_FROM_LE                          = 0x0\n\tBPF_FS_MAGIC                         = 0xcafe4a11\n\tBPF_F_ALLOW_MULTI                    = 0x2\n\tBPF_F_ALLOW_OVERRIDE                 = 0x1\n\tBPF_F_ANY_ALIGNMENT                  = 0x2\n\tBPF_F_CTXLEN_MASK                    = 0xfffff00000000\n\tBPF_F_CURRENT_CPU                    = 0xffffffff\n\tBPF_F_CURRENT_NETNS                  = -0x1\n\tBPF_F_DONT_FRAGMENT                  = 0x4\n\tBPF_F_FAST_STACK_CMP                 = 0x200\n\tBPF_F_HDR_FIELD_MASK                 = 0xf\n\tBPF_F_INDEX_MASK                     = 0xffffffff\n\tBPF_F_INGRESS                        = 0x1\n\tBPF_F_INVALIDATE_HASH                = 0x2\n\tBPF_F_LOCK                           = 0x4\n\tBPF_F_MARK_ENFORCE                   = 0x40\n\tBPF_F_MARK_MANGLED_0                 = 0x20\n\tBPF_F_NO_COMMON_LRU                  = 0x2\n\tBPF_F_NO_PREALLOC                    = 0x1\n\tBPF_F_NUMA_NODE                      = 0x4\n\tBPF_F_PSEUDO_HDR                     = 0x10\n\tBPF_F_QUERY_EFFECTIVE                = 0x1\n\tBPF_F_RDONLY                         = 0x8\n\tBPF_F_RECOMPUTE_CSUM                 = 0x1\n\tBPF_F_REUSE_STACKID                  = 0x400\n\tBPF_F_SEQ_NUMBER                     = 0x8\n\tBPF_F_SKIP_FIELD_MASK                = 0xff\n\tBPF_F_STACK_BUILD_ID                 = 0x20\n\tBPF_F_STRICT_ALIGNMENT               = 0x1\n\tBPF_F_TUNINFO_IPV6                   = 0x1\n\tBPF_F_USER_BUILD_ID                  = 0x800\n\tBPF_F_USER_STACK                     = 0x100\n\tBPF_F_WRONLY                         = 0x10\n\tBPF_F_ZERO_CSUM_TX                   = 0x2\n\tBPF_F_ZERO_SEED                      = 0x40\n\tBPF_H                                = 0x8\n\tBPF_IMM                              = 0x0\n\tBPF_IND                              = 0x40\n\tBPF_JA                               = 0x0\n\tBPF_JEQ                              = 0x10\n\tBPF_JGE                              = 0x30\n\tBPF_JGT                              = 0x20\n\tBPF_JLE                              = 0xb0\n\tBPF_JLT                              = 0xa0\n\tBPF_JMP                              = 0x5\n\tBPF_JMP32                            = 0x6\n\tBPF_JNE                              = 0x50\n\tBPF_JSET                             = 0x40\n\tBPF_JSGE                             = 0x70\n\tBPF_JSGT                             = 0x60\n\tBPF_JSLE                             = 0xd0\n\tBPF_JSLT                             = 0xc0\n\tBPF_K                                = 0x0\n\tBPF_LD                               = 0x0\n\tBPF_LDX                              = 0x1\n\tBPF_LEN                              = 0x80\n\tBPF_LL_OFF                           = -0x200000\n\tBPF_LSH                              = 0x60\n\tBPF_MAJOR_VERSION                    = 0x1\n\tBPF_MAXINSNS                         = 0x1000\n\tBPF_MEM                              = 0x60\n\tBPF_MEMWORDS                         = 0x10\n\tBPF_MINOR_VERSION                    = 0x1\n\tBPF_MISC                             = 0x7\n\tBPF_MOD                              = 0x90\n\tBPF_MOV                              = 0xb0\n\tBPF_MSH                              = 0xa0\n\tBPF_MUL                              = 0x20\n\tBPF_NEG                              = 0x80\n\tBPF_NET_OFF                          = -0x100000\n\tBPF_NOEXIST                          = 0x1\n\tBPF_OBJ_NAME_LEN                     = 0x10\n\tBPF_OR                               = 0x40\n\tBPF_PSEUDO_CALL                      = 0x1\n\tBPF_PSEUDO_MAP_FD                    = 0x1\n\tBPF_RET                              = 0x6\n\tBPF_RSH                              = 0x70\n\tBPF_SOCK_OPS_ALL_CB_FLAGS            = 0x7\n\tBPF_SOCK_OPS_RETRANS_CB_FLAG         = 0x2\n\tBPF_SOCK_OPS_RTO_CB_FLAG             = 0x1\n\tBPF_SOCK_OPS_STATE_CB_FLAG           = 0x4\n\tBPF_ST                               = 0x2\n\tBPF_STX                              = 0x3\n\tBPF_SUB                              = 0x10\n\tBPF_TAG_SIZE                         = 0x8\n\tBPF_TAX                              = 0x0\n\tBPF_TO_BE                            = 0x8\n\tBPF_TO_LE                            = 0x0\n\tBPF_TXA                              = 0x80\n\tBPF_W                                = 0x0\n\tBPF_X                                = 0x8\n\tBPF_XADD                             = 0xc0\n\tBPF_XOR                              = 0xa0\n\tBRKINT                               = 0x2\n\tBS0                                  = 0x0\n\tBS1                                  = 0x8000\n\tBSDLY                                = 0x8000\n\tBTRFS_SUPER_MAGIC                    = 0x9123683e\n\tBTRFS_TEST_MAGIC                     = 0x73727279\n\tCAN_BCM                              = 0x2\n\tCAN_EFF_FLAG                         = 0x80000000\n\tCAN_EFF_ID_BITS                      = 0x1d\n\tCAN_EFF_MASK                         = 0x1fffffff\n\tCAN_ERR_FLAG                         = 0x20000000\n\tCAN_ERR_MASK                         = 0x1fffffff\n\tCAN_INV_FILTER                       = 0x20000000\n\tCAN_ISOTP                            = 0x6\n\tCAN_MAX_DLC                          = 0x8\n\tCAN_MAX_DLEN                         = 0x8\n\tCAN_MCNET                            = 0x5\n\tCAN_MTU                              = 0x10\n\tCAN_NPROTO                           = 0x7\n\tCAN_RAW                              = 0x1\n\tCAN_RAW_FILTER_MAX                   = 0x200\n\tCAN_RTR_FLAG                         = 0x40000000\n\tCAN_SFF_ID_BITS                      = 0xb\n\tCAN_SFF_MASK                         = 0x7ff\n\tCAN_TP16                             = 0x3\n\tCAN_TP20                             = 0x4\n\tCBAUD                                = 0xff\n\tCBAUDEX                              = 0x0\n\tCFLUSH                               = 0xf\n\tCGROUP2_SUPER_MAGIC                  = 0x63677270\n\tCGROUP_SUPER_MAGIC                   = 0x27e0eb\n\tCIBAUD                               = 0xff0000\n\tCLOCAL                               = 0x8000\n\tCLOCK_BOOTTIME                       = 0x7\n\tCLOCK_BOOTTIME_ALARM                 = 0x9\n\tCLOCK_DEFAULT                        = 0x0\n\tCLOCK_EXT                            = 0x1\n\tCLOCK_INT                            = 0x2\n\tCLOCK_MONOTONIC                      = 0x1\n\tCLOCK_MONOTONIC_COARSE               = 0x6\n\tCLOCK_MONOTONIC_RAW                  = 0x4\n\tCLOCK_PROCESS_CPUTIME_ID             = 0x2\n\tCLOCK_REALTIME                       = 0x0\n\tCLOCK_REALTIME_ALARM                 = 0x8\n\tCLOCK_REALTIME_COARSE                = 0x5\n\tCLOCK_TAI                            = 0xb\n\tCLOCK_THREAD_CPUTIME_ID              = 0x3\n\tCLOCK_TXFROMRX                       = 0x4\n\tCLOCK_TXINT                          = 0x3\n\tCLONE_CHILD_CLEARTID                 = 0x200000\n\tCLONE_CHILD_SETTID                   = 0x1000000\n\tCLONE_DETACHED                       = 0x400000\n\tCLONE_FILES                          = 0x400\n\tCLONE_FS                             = 0x200\n\tCLONE_IO                             = 0x80000000\n\tCLONE_NEWCGROUP                      = 0x2000000\n\tCLONE_NEWIPC                         = 0x8000000\n\tCLONE_NEWNET                         = 0x40000000\n\tCLONE_NEWNS                          = 0x20000\n\tCLONE_NEWPID                         = 0x20000000\n\tCLONE_NEWUSER                        = 0x10000000\n\tCLONE_NEWUTS                         = 0x4000000\n\tCLONE_PARENT                         = 0x8000\n\tCLONE_PARENT_SETTID                  = 0x100000\n\tCLONE_PTRACE                         = 0x2000\n\tCLONE_SETTLS                         = 0x80000\n\tCLONE_SIGHAND                        = 0x800\n\tCLONE_SYSVSEM                        = 0x40000\n\tCLONE_THREAD                         = 0x10000\n\tCLONE_UNTRACED                       = 0x800000\n\tCLONE_VFORK                          = 0x4000\n\tCLONE_VM                             = 0x100\n\tCMSPAR                               = 0x40000000\n\tCODA_SUPER_MAGIC                     = 0x73757245\n\tCR0                                  = 0x0\n\tCR1                                  = 0x1000\n\tCR2                                  = 0x2000\n\tCR3                                  = 0x3000\n\tCRAMFS_MAGIC                         = 0x28cd3d45\n\tCRDLY                                = 0x3000\n\tCREAD                                = 0x800\n\tCRTSCTS                              = 0x80000000\n\tCRYPTO_MAX_NAME                      = 0x40\n\tCRYPTO_MSG_MAX                       = 0x15\n\tCRYPTO_NR_MSGTYPES                   = 0x6\n\tCRYPTO_REPORT_MAXSIZE                = 0x160\n\tCS5                                  = 0x0\n\tCS6                                  = 0x100\n\tCS7                                  = 0x200\n\tCS8                                  = 0x300\n\tCSIGNAL                              = 0xff\n\tCSIZE                                = 0x300\n\tCSTART                               = 0x11\n\tCSTATUS                              = 0x0\n\tCSTOP                                = 0x13\n\tCSTOPB                               = 0x400\n\tCSUSP                                = 0x1a\n\tDAXFS_MAGIC                          = 0x64646178\n\tDEBUGFS_MAGIC                        = 0x64626720\n\tDEVPTS_SUPER_MAGIC                   = 0x1cd1\n\tDT_BLK                               = 0x6\n\tDT_CHR                               = 0x2\n\tDT_DIR                               = 0x4\n\tDT_FIFO                              = 0x1\n\tDT_LNK                               = 0xa\n\tDT_REG                               = 0x8\n\tDT_SOCK                              = 0xc\n\tDT_UNKNOWN                           = 0x0\n\tDT_WHT                               = 0xe\n\tECHO                                 = 0x8\n\tECHOCTL                              = 0x40\n\tECHOE                                = 0x2\n\tECHOK                                = 0x4\n\tECHOKE                               = 0x1\n\tECHONL                               = 0x10\n\tECHOPRT                              = 0x20\n\tECRYPTFS_SUPER_MAGIC                 = 0xf15f\n\tEFD_CLOEXEC                          = 0x80000\n\tEFD_NONBLOCK                         = 0x800\n\tEFD_SEMAPHORE                        = 0x1\n\tEFIVARFS_MAGIC                       = 0xde5e81e4\n\tEFS_SUPER_MAGIC                      = 0x414a53\n\tENCODING_DEFAULT                     = 0x0\n\tENCODING_FM_MARK                     = 0x3\n\tENCODING_FM_SPACE                    = 0x4\n\tENCODING_MANCHESTER                  = 0x5\n\tENCODING_NRZ                         = 0x1\n\tENCODING_NRZI                        = 0x2\n\tEPOLLERR                             = 0x8\n\tEPOLLET                              = 0x80000000\n\tEPOLLEXCLUSIVE                       = 0x10000000\n\tEPOLLHUP                             = 0x10\n\tEPOLLIN                              = 0x1\n\tEPOLLMSG                             = 0x400\n\tEPOLLONESHOT                         = 0x40000000\n\tEPOLLOUT                             = 0x4\n\tEPOLLPRI                             = 0x2\n\tEPOLLRDBAND                          = 0x80\n\tEPOLLRDHUP                           = 0x2000\n\tEPOLLRDNORM                          = 0x40\n\tEPOLLWAKEUP                          = 0x20000000\n\tEPOLLWRBAND                          = 0x200\n\tEPOLLWRNORM                          = 0x100\n\tEPOLL_CLOEXEC                        = 0x80000\n\tEPOLL_CTL_ADD                        = 0x1\n\tEPOLL_CTL_DEL                        = 0x2\n\tEPOLL_CTL_MOD                        = 0x3\n\tETH_P_1588                           = 0x88f7\n\tETH_P_8021AD                         = 0x88a8\n\tETH_P_8021AH                         = 0x88e7\n\tETH_P_8021Q                          = 0x8100\n\tETH_P_80221                          = 0x8917\n\tETH_P_802_2                          = 0x4\n\tETH_P_802_3                          = 0x1\n\tETH_P_802_3_MIN                      = 0x600\n\tETH_P_802_EX1                        = 0x88b5\n\tETH_P_AARP                           = 0x80f3\n\tETH_P_AF_IUCV                        = 0xfbfb\n\tETH_P_ALL                            = 0x3\n\tETH_P_AOE                            = 0x88a2\n\tETH_P_ARCNET                         = 0x1a\n\tETH_P_ARP                            = 0x806\n\tETH_P_ATALK                          = 0x809b\n\tETH_P_ATMFATE                        = 0x8884\n\tETH_P_ATMMPOA                        = 0x884c\n\tETH_P_AX25                           = 0x2\n\tETH_P_BATMAN                         = 0x4305\n\tETH_P_BPQ                            = 0x8ff\n\tETH_P_CAIF                           = 0xf7\n\tETH_P_CAN                            = 0xc\n\tETH_P_CANFD                          = 0xd\n\tETH_P_CONTROL                        = 0x16\n\tETH_P_CUST                           = 0x6006\n\tETH_P_DDCMP                          = 0x6\n\tETH_P_DEC                            = 0x6000\n\tETH_P_DIAG                           = 0x6005\n\tETH_P_DNA_DL                         = 0x6001\n\tETH_P_DNA_RC                         = 0x6002\n\tETH_P_DNA_RT                         = 0x6003\n\tETH_P_DSA                            = 0x1b\n\tETH_P_ECONET                         = 0x18\n\tETH_P_EDSA                           = 0xdada\n\tETH_P_ERSPAN                         = 0x88be\n\tETH_P_ERSPAN2                        = 0x22eb\n\tETH_P_FCOE                           = 0x8906\n\tETH_P_FIP                            = 0x8914\n\tETH_P_HDLC                           = 0x19\n\tETH_P_HSR                            = 0x892f\n\tETH_P_IBOE                           = 0x8915\n\tETH_P_IEEE802154                     = 0xf6\n\tETH_P_IEEEPUP                        = 0xa00\n\tETH_P_IEEEPUPAT                      = 0xa01\n\tETH_P_IFE                            = 0xed3e\n\tETH_P_IP                             = 0x800\n\tETH_P_IPV6                           = 0x86dd\n\tETH_P_IPX                            = 0x8137\n\tETH_P_IRDA                           = 0x17\n\tETH_P_LAT                            = 0x6004\n\tETH_P_LINK_CTL                       = 0x886c\n\tETH_P_LOCALTALK                      = 0x9\n\tETH_P_LOOP                           = 0x60\n\tETH_P_LOOPBACK                       = 0x9000\n\tETH_P_MACSEC                         = 0x88e5\n\tETH_P_MAP                            = 0xf9\n\tETH_P_MOBITEX                        = 0x15\n\tETH_P_MPLS_MC                        = 0x8848\n\tETH_P_MPLS_UC                        = 0x8847\n\tETH_P_MVRP                           = 0x88f5\n\tETH_P_NCSI                           = 0x88f8\n\tETH_P_NSH                            = 0x894f\n\tETH_P_PAE                            = 0x888e\n\tETH_P_PAUSE                          = 0x8808\n\tETH_P_PHONET                         = 0xf5\n\tETH_P_PPPTALK                        = 0x10\n\tETH_P_PPP_DISC                       = 0x8863\n\tETH_P_PPP_MP                         = 0x8\n\tETH_P_PPP_SES                        = 0x8864\n\tETH_P_PREAUTH                        = 0x88c7\n\tETH_P_PRP                            = 0x88fb\n\tETH_P_PUP                            = 0x200\n\tETH_P_PUPAT                          = 0x201\n\tETH_P_QINQ1                          = 0x9100\n\tETH_P_QINQ2                          = 0x9200\n\tETH_P_QINQ3                          = 0x9300\n\tETH_P_RARP                           = 0x8035\n\tETH_P_SCA                            = 0x6007\n\tETH_P_SLOW                           = 0x8809\n\tETH_P_SNAP                           = 0x5\n\tETH_P_TDLS                           = 0x890d\n\tETH_P_TEB                            = 0x6558\n\tETH_P_TIPC                           = 0x88ca\n\tETH_P_TRAILER                        = 0x1c\n\tETH_P_TR_802_2                       = 0x11\n\tETH_P_TSN                            = 0x22f0\n\tETH_P_WAN_PPP                        = 0x7\n\tETH_P_WCCP                           = 0x883e\n\tETH_P_X25                            = 0x805\n\tETH_P_XDSA                           = 0xf8\n\tEXABYTE_ENABLE_NEST                  = 0xf0\n\tEXT2_SUPER_MAGIC                     = 0xef53\n\tEXT3_SUPER_MAGIC                     = 0xef53\n\tEXT4_SUPER_MAGIC                     = 0xef53\n\tEXTA                                 = 0xe\n\tEXTB                                 = 0xf\n\tEXTPROC                              = 0x10000000\n\tF2FS_SUPER_MAGIC                     = 0xf2f52010\n\tFALLOC_FL_COLLAPSE_RANGE             = 0x8\n\tFALLOC_FL_INSERT_RANGE               = 0x20\n\tFALLOC_FL_KEEP_SIZE                  = 0x1\n\tFALLOC_FL_NO_HIDE_STALE              = 0x4\n\tFALLOC_FL_PUNCH_HOLE                 = 0x2\n\tFALLOC_FL_UNSHARE_RANGE              = 0x40\n\tFALLOC_FL_ZERO_RANGE                 = 0x10\n\tFANOTIFY_METADATA_VERSION            = 0x3\n\tFAN_ACCESS                           = 0x1\n\tFAN_ACCESS_PERM                      = 0x20000\n\tFAN_ALLOW                            = 0x1\n\tFAN_ALL_CLASS_BITS                   = 0xc\n\tFAN_ALL_EVENTS                       = 0x3b\n\tFAN_ALL_INIT_FLAGS                   = 0x3f\n\tFAN_ALL_MARK_FLAGS                   = 0xff\n\tFAN_ALL_OUTGOING_EVENTS              = 0x3403b\n\tFAN_ALL_PERM_EVENTS                  = 0x30000\n\tFAN_ATTRIB                           = 0x4\n\tFAN_AUDIT                            = 0x10\n\tFAN_CLASS_CONTENT                    = 0x4\n\tFAN_CLASS_NOTIF                      = 0x0\n\tFAN_CLASS_PRE_CONTENT                = 0x8\n\tFAN_CLOEXEC                          = 0x1\n\tFAN_CLOSE                            = 0x18\n\tFAN_CLOSE_NOWRITE                    = 0x10\n\tFAN_CLOSE_WRITE                      = 0x8\n\tFAN_CREATE                           = 0x100\n\tFAN_DELETE                           = 0x200\n\tFAN_DELETE_SELF                      = 0x400\n\tFAN_DENY                             = 0x2\n\tFAN_ENABLE_AUDIT                     = 0x40\n\tFAN_EVENT_INFO_TYPE_FID              = 0x1\n\tFAN_EVENT_METADATA_LEN               = 0x18\n\tFAN_EVENT_ON_CHILD                   = 0x8000000\n\tFAN_MARK_ADD                         = 0x1\n\tFAN_MARK_DONT_FOLLOW                 = 0x4\n\tFAN_MARK_FILESYSTEM                  = 0x100\n\tFAN_MARK_FLUSH                       = 0x80\n\tFAN_MARK_IGNORED_MASK                = 0x20\n\tFAN_MARK_IGNORED_SURV_MODIFY         = 0x40\n\tFAN_MARK_INODE                       = 0x0\n\tFAN_MARK_MOUNT                       = 0x10\n\tFAN_MARK_ONLYDIR                     = 0x8\n\tFAN_MARK_REMOVE                      = 0x2\n\tFAN_MODIFY                           = 0x2\n\tFAN_MOVE                             = 0xc0\n\tFAN_MOVED_FROM                       = 0x40\n\tFAN_MOVED_TO                         = 0x80\n\tFAN_MOVE_SELF                        = 0x800\n\tFAN_NOFD                             = -0x1\n\tFAN_NONBLOCK                         = 0x2\n\tFAN_ONDIR                            = 0x40000000\n\tFAN_OPEN                             = 0x20\n\tFAN_OPEN_EXEC                        = 0x1000\n\tFAN_OPEN_EXEC_PERM                   = 0x40000\n\tFAN_OPEN_PERM                        = 0x10000\n\tFAN_Q_OVERFLOW                       = 0x4000\n\tFAN_REPORT_FID                       = 0x200\n\tFAN_REPORT_TID                       = 0x100\n\tFAN_UNLIMITED_MARKS                  = 0x20\n\tFAN_UNLIMITED_QUEUE                  = 0x10\n\tFD_CLOEXEC                           = 0x1\n\tFD_SETSIZE                           = 0x400\n\tFF0                                  = 0x0\n\tFF1                                  = 0x4000\n\tFFDLY                                = 0x4000\n\tFLUSHO                               = 0x800000\n\tFS_ENCRYPTION_MODE_ADIANTUM          = 0x9\n\tFS_ENCRYPTION_MODE_AES_128_CBC       = 0x5\n\tFS_ENCRYPTION_MODE_AES_128_CTS       = 0x6\n\tFS_ENCRYPTION_MODE_AES_256_CBC       = 0x3\n\tFS_ENCRYPTION_MODE_AES_256_CTS       = 0x4\n\tFS_ENCRYPTION_MODE_AES_256_GCM       = 0x2\n\tFS_ENCRYPTION_MODE_AES_256_XTS       = 0x1\n\tFS_ENCRYPTION_MODE_INVALID           = 0x0\n\tFS_ENCRYPTION_MODE_SPECK128_256_CTS  = 0x8\n\tFS_ENCRYPTION_MODE_SPECK128_256_XTS  = 0x7\n\tFS_IOC_GET_ENCRYPTION_POLICY         = 0x800c6615\n\tFS_IOC_GET_ENCRYPTION_PWSALT         = 0x80106614\n\tFS_IOC_SET_ENCRYPTION_POLICY         = 0x400c6613\n\tFS_KEY_DESCRIPTOR_SIZE               = 0x8\n\tFS_KEY_DESC_PREFIX                   = \"fscrypt:\"\n\tFS_KEY_DESC_PREFIX_SIZE              = 0x8\n\tFS_MAX_KEY_SIZE                      = 0x40\n\tFS_POLICY_FLAGS_PAD_16               = 0x2\n\tFS_POLICY_FLAGS_PAD_32               = 0x3\n\tFS_POLICY_FLAGS_PAD_4                = 0x0\n\tFS_POLICY_FLAGS_PAD_8                = 0x1\n\tFS_POLICY_FLAGS_PAD_MASK             = 0x3\n\tFS_POLICY_FLAGS_VALID                = 0x7\n\tFUTEXFS_SUPER_MAGIC                  = 0xbad1dea\n\tF_ADD_SEALS                          = 0x409\n\tF_DUPFD                              = 0x0\n\tF_DUPFD_CLOEXEC                      = 0x406\n\tF_EXLCK                              = 0x4\n\tF_GETFD                              = 0x1\n\tF_GETFL                              = 0x3\n\tF_GETLEASE                           = 0x401\n\tF_GETLK                              = 0x5\n\tF_GETLK64                            = 0xc\n\tF_GETOWN                             = 0x9\n\tF_GETOWN_EX                          = 0x10\n\tF_GETPIPE_SZ                         = 0x408\n\tF_GETSIG                             = 0xb\n\tF_GET_FILE_RW_HINT                   = 0x40d\n\tF_GET_RW_HINT                        = 0x40b\n\tF_GET_SEALS                          = 0x40a\n\tF_LOCK                               = 0x1\n\tF_NOTIFY                             = 0x402\n\tF_OFD_GETLK                          = 0x24\n\tF_OFD_SETLK                          = 0x25\n\tF_OFD_SETLKW                         = 0x26\n\tF_OK                                 = 0x0\n\tF_RDLCK                              = 0x0\n\tF_SEAL_GROW                          = 0x4\n\tF_SEAL_SEAL                          = 0x1\n\tF_SEAL_SHRINK                        = 0x2\n\tF_SEAL_WRITE                         = 0x8\n\tF_SETFD                              = 0x2\n\tF_SETFL                              = 0x4\n\tF_SETLEASE                           = 0x400\n\tF_SETLK                              = 0x6\n\tF_SETLK64                            = 0xd\n\tF_SETLKW                             = 0x7\n\tF_SETLKW64                           = 0xe\n\tF_SETOWN                             = 0x8\n\tF_SETOWN_EX                          = 0xf\n\tF_SETPIPE_SZ                         = 0x407\n\tF_SETSIG                             = 0xa\n\tF_SET_FILE_RW_HINT                   = 0x40e\n\tF_SET_RW_HINT                        = 0x40c\n\tF_SHLCK                              = 0x8\n\tF_TEST                               = 0x3\n\tF_TLOCK                              = 0x2\n\tF_ULOCK                              = 0x0\n\tF_UNLCK                              = 0x2\n\tF_WRLCK                              = 0x1\n\tGENL_ADMIN_PERM                      = 0x1\n\tGENL_CMD_CAP_DO                      = 0x2\n\tGENL_CMD_CAP_DUMP                    = 0x4\n\tGENL_CMD_CAP_HASPOL                  = 0x8\n\tGENL_HDRLEN                          = 0x4\n\tGENL_ID_CTRL                         = 0x10\n\tGENL_ID_PMCRAID                      = 0x12\n\tGENL_ID_VFS_DQUOT                    = 0x11\n\tGENL_MAX_ID                          = 0x3ff\n\tGENL_MIN_ID                          = 0x10\n\tGENL_NAMSIZ                          = 0x10\n\tGENL_START_ALLOC                     = 0x13\n\tGENL_UNS_ADMIN_PERM                  = 0x10\n\tGRND_NONBLOCK                        = 0x1\n\tGRND_RANDOM                          = 0x2\n\tHDIO_DRIVE_CMD                       = 0x31f\n\tHDIO_DRIVE_CMD_AEB                   = 0x31e\n\tHDIO_DRIVE_CMD_HDR_SIZE              = 0x4\n\tHDIO_DRIVE_HOB_HDR_SIZE              = 0x8\n\tHDIO_DRIVE_RESET                     = 0x31c\n\tHDIO_DRIVE_TASK                      = 0x31e\n\tHDIO_DRIVE_TASKFILE                  = 0x31d\n\tHDIO_DRIVE_TASK_HDR_SIZE             = 0x8\n\tHDIO_GETGEO                          = 0x301\n\tHDIO_GET_32BIT                       = 0x309\n\tHDIO_GET_ACOUSTIC                    = 0x30f\n\tHDIO_GET_ADDRESS                     = 0x310\n\tHDIO_GET_BUSSTATE                    = 0x31a\n\tHDIO_GET_DMA                         = 0x30b\n\tHDIO_GET_IDENTITY                    = 0x30d\n\tHDIO_GET_KEEPSETTINGS                = 0x308\n\tHDIO_GET_MULTCOUNT                   = 0x304\n\tHDIO_GET_NICE                        = 0x30c\n\tHDIO_GET_NOWERR                      = 0x30a\n\tHDIO_GET_QDMA                        = 0x305\n\tHDIO_GET_UNMASKINTR                  = 0x302\n\tHDIO_GET_WCACHE                      = 0x30e\n\tHDIO_OBSOLETE_IDENTITY               = 0x307\n\tHDIO_SCAN_HWIF                       = 0x328\n\tHDIO_SET_32BIT                       = 0x324\n\tHDIO_SET_ACOUSTIC                    = 0x32c\n\tHDIO_SET_ADDRESS                     = 0x32f\n\tHDIO_SET_BUSSTATE                    = 0x32d\n\tHDIO_SET_DMA                         = 0x326\n\tHDIO_SET_KEEPSETTINGS                = 0x323\n\tHDIO_SET_MULTCOUNT                   = 0x321\n\tHDIO_SET_NICE                        = 0x329\n\tHDIO_SET_NOWERR                      = 0x325\n\tHDIO_SET_PIO_MODE                    = 0x327\n\tHDIO_SET_QDMA                        = 0x32e\n\tHDIO_SET_UNMASKINTR                  = 0x322\n\tHDIO_SET_WCACHE                      = 0x32b\n\tHDIO_SET_XFER                        = 0x306\n\tHDIO_TRISTATE_HWIF                   = 0x31b\n\tHDIO_UNREGISTER_HWIF                 = 0x32a\n\tHOSTFS_SUPER_MAGIC                   = 0xc0ffee\n\tHPFS_SUPER_MAGIC                     = 0xf995e849\n\tHUGETLBFS_MAGIC                      = 0x958458f6\n\tHUPCL                                = 0x4000\n\tIBSHIFT                              = 0x10\n\tICANON                               = 0x100\n\tICMPV6_FILTER                        = 0x1\n\tICRNL                                = 0x100\n\tIEXTEN                               = 0x400\n\tIFA_F_DADFAILED                      = 0x8\n\tIFA_F_DEPRECATED                     = 0x20\n\tIFA_F_HOMEADDRESS                    = 0x10\n\tIFA_F_MANAGETEMPADDR                 = 0x100\n\tIFA_F_MCAUTOJOIN                     = 0x400\n\tIFA_F_NODAD                          = 0x2\n\tIFA_F_NOPREFIXROUTE                  = 0x200\n\tIFA_F_OPTIMISTIC                     = 0x4\n\tIFA_F_PERMANENT                      = 0x80\n\tIFA_F_SECONDARY                      = 0x1\n\tIFA_F_STABLE_PRIVACY                 = 0x800\n\tIFA_F_TEMPORARY                      = 0x1\n\tIFA_F_TENTATIVE                      = 0x40\n\tIFA_MAX                              = 0xa\n\tIFF_ALLMULTI                         = 0x200\n\tIFF_ATTACH_QUEUE                     = 0x200\n\tIFF_AUTOMEDIA                        = 0x4000\n\tIFF_BROADCAST                        = 0x2\n\tIFF_DEBUG                            = 0x4\n\tIFF_DETACH_QUEUE                     = 0x400\n\tIFF_DORMANT                          = 0x20000\n\tIFF_DYNAMIC                          = 0x8000\n\tIFF_ECHO                             = 0x40000\n\tIFF_LOOPBACK                         = 0x8\n\tIFF_LOWER_UP                         = 0x10000\n\tIFF_MASTER                           = 0x400\n\tIFF_MULTICAST                        = 0x1000\n\tIFF_MULTI_QUEUE                      = 0x100\n\tIFF_NAPI                             = 0x10\n\tIFF_NAPI_FRAGS                       = 0x20\n\tIFF_NOARP                            = 0x80\n\tIFF_NOFILTER                         = 0x1000\n\tIFF_NOTRAILERS                       = 0x20\n\tIFF_NO_PI                            = 0x1000\n\tIFF_ONE_QUEUE                        = 0x2000\n\tIFF_PERSIST                          = 0x800\n\tIFF_POINTOPOINT                      = 0x10\n\tIFF_PORTSEL                          = 0x2000\n\tIFF_PROMISC                          = 0x100\n\tIFF_RUNNING                          = 0x40\n\tIFF_SLAVE                            = 0x800\n\tIFF_TAP                              = 0x2\n\tIFF_TUN                              = 0x1\n\tIFF_TUN_EXCL                         = 0x8000\n\tIFF_UP                               = 0x1\n\tIFF_VNET_HDR                         = 0x4000\n\tIFF_VOLATILE                         = 0x70c5a\n\tIFNAMSIZ                             = 0x10\n\tIGNBRK                               = 0x1\n\tIGNCR                                = 0x80\n\tIGNPAR                               = 0x4\n\tIMAXBEL                              = 0x2000\n\tINLCR                                = 0x40\n\tINPCK                                = 0x10\n\tIN_ACCESS                            = 0x1\n\tIN_ALL_EVENTS                        = 0xfff\n\tIN_ATTRIB                            = 0x4\n\tIN_CLASSA_HOST                       = 0xffffff\n\tIN_CLASSA_MAX                        = 0x80\n\tIN_CLASSA_NET                        = 0xff000000\n\tIN_CLASSA_NSHIFT                     = 0x18\n\tIN_CLASSB_HOST                       = 0xffff\n\tIN_CLASSB_MAX                        = 0x10000\n\tIN_CLASSB_NET                        = 0xffff0000\n\tIN_CLASSB_NSHIFT                     = 0x10\n\tIN_CLASSC_HOST                       = 0xff\n\tIN_CLASSC_NET                        = 0xffffff00\n\tIN_CLASSC_NSHIFT                     = 0x8\n\tIN_CLOEXEC                           = 0x80000\n\tIN_CLOSE                             = 0x18\n\tIN_CLOSE_NOWRITE                     = 0x10\n\tIN_CLOSE_WRITE                       = 0x8\n\tIN_CREATE                            = 0x100\n\tIN_DELETE                            = 0x200\n\tIN_DELETE_SELF                       = 0x400\n\tIN_DONT_FOLLOW                       = 0x2000000\n\tIN_EXCL_UNLINK                       = 0x4000000\n\tIN_IGNORED                           = 0x8000\n\tIN_ISDIR                             = 0x40000000\n\tIN_LOOPBACKNET                       = 0x7f\n\tIN_MASK_ADD                          = 0x20000000\n\tIN_MASK_CREATE                       = 0x10000000\n\tIN_MODIFY                            = 0x2\n\tIN_MOVE                              = 0xc0\n\tIN_MOVED_FROM                        = 0x40\n\tIN_MOVED_TO                          = 0x80\n\tIN_MOVE_SELF                         = 0x800\n\tIN_NONBLOCK                          = 0x800\n\tIN_ONESHOT                           = 0x80000000\n\tIN_ONLYDIR                           = 0x1000000\n\tIN_OPEN                              = 0x20\n\tIN_Q_OVERFLOW                        = 0x4000\n\tIN_UNMOUNT                           = 0x2000\n\tIOCTL_VM_SOCKETS_GET_LOCAL_CID       = 0x200007b9\n\tIPPROTO_AH                           = 0x33\n\tIPPROTO_BEETPH                       = 0x5e\n\tIPPROTO_COMP                         = 0x6c\n\tIPPROTO_DCCP                         = 0x21\n\tIPPROTO_DSTOPTS                      = 0x3c\n\tIPPROTO_EGP                          = 0x8\n\tIPPROTO_ENCAP                        = 0x62\n\tIPPROTO_ESP                          = 0x32\n\tIPPROTO_FRAGMENT                     = 0x2c\n\tIPPROTO_GRE                          = 0x2f\n\tIPPROTO_HOPOPTS                      = 0x0\n\tIPPROTO_ICMP                         = 0x1\n\tIPPROTO_ICMPV6                       = 0x3a\n\tIPPROTO_IDP                          = 0x16\n\tIPPROTO_IGMP                         = 0x2\n\tIPPROTO_IP                           = 0x0\n\tIPPROTO_IPIP                         = 0x4\n\tIPPROTO_IPV6                         = 0x29\n\tIPPROTO_MH                           = 0x87\n\tIPPROTO_MPLS                         = 0x89\n\tIPPROTO_MTP                          = 0x5c\n\tIPPROTO_NONE                         = 0x3b\n\tIPPROTO_PIM                          = 0x67\n\tIPPROTO_PUP                          = 0xc\n\tIPPROTO_RAW                          = 0xff\n\tIPPROTO_ROUTING                      = 0x2b\n\tIPPROTO_RSVP                         = 0x2e\n\tIPPROTO_SCTP                         = 0x84\n\tIPPROTO_TCP                          = 0x6\n\tIPPROTO_TP                           = 0x1d\n\tIPPROTO_UDP                          = 0x11\n\tIPPROTO_UDPLITE                      = 0x88\n\tIPV6_2292DSTOPTS                     = 0x4\n\tIPV6_2292HOPLIMIT                    = 0x8\n\tIPV6_2292HOPOPTS                     = 0x3\n\tIPV6_2292PKTINFO                     = 0x2\n\tIPV6_2292PKTOPTIONS                  = 0x6\n\tIPV6_2292RTHDR                       = 0x5\n\tIPV6_ADDRFORM                        = 0x1\n\tIPV6_ADDR_PREFERENCES                = 0x48\n\tIPV6_ADD_MEMBERSHIP                  = 0x14\n\tIPV6_AUTHHDR                         = 0xa\n\tIPV6_AUTOFLOWLABEL                   = 0x46\n\tIPV6_CHECKSUM                        = 0x7\n\tIPV6_DONTFRAG                        = 0x3e\n\tIPV6_DROP_MEMBERSHIP                 = 0x15\n\tIPV6_DSTOPTS                         = 0x3b\n\tIPV6_FREEBIND                        = 0x4e\n\tIPV6_HDRINCL                         = 0x24\n\tIPV6_HOPLIMIT                        = 0x34\n\tIPV6_HOPOPTS                         = 0x36\n\tIPV6_IPSEC_POLICY                    = 0x22\n\tIPV6_JOIN_ANYCAST                    = 0x1b\n\tIPV6_JOIN_GROUP                      = 0x14\n\tIPV6_LEAVE_ANYCAST                   = 0x1c\n\tIPV6_LEAVE_GROUP                     = 0x15\n\tIPV6_MINHOPCOUNT                     = 0x49\n\tIPV6_MTU                             = 0x18\n\tIPV6_MTU_DISCOVER                    = 0x17\n\tIPV6_MULTICAST_ALL                   = 0x1d\n\tIPV6_MULTICAST_HOPS                  = 0x12\n\tIPV6_MULTICAST_IF                    = 0x11\n\tIPV6_MULTICAST_LOOP                  = 0x13\n\tIPV6_NEXTHOP                         = 0x9\n\tIPV6_ORIGDSTADDR                     = 0x4a\n\tIPV6_PATHMTU                         = 0x3d\n\tIPV6_PKTINFO                         = 0x32\n\tIPV6_PMTUDISC_DO                     = 0x2\n\tIPV6_PMTUDISC_DONT                   = 0x0\n\tIPV6_PMTUDISC_INTERFACE              = 0x4\n\tIPV6_PMTUDISC_OMIT                   = 0x5\n\tIPV6_PMTUDISC_PROBE                  = 0x3\n\tIPV6_PMTUDISC_WANT                   = 0x1\n\tIPV6_RECVDSTOPTS                     = 0x3a\n\tIPV6_RECVERR                         = 0x19\n\tIPV6_RECVFRAGSIZE                    = 0x4d\n\tIPV6_RECVHOPLIMIT                    = 0x33\n\tIPV6_RECVHOPOPTS                     = 0x35\n\tIPV6_RECVORIGDSTADDR                 = 0x4a\n\tIPV6_RECVPATHMTU                     = 0x3c\n\tIPV6_RECVPKTINFO                     = 0x31\n\tIPV6_RECVRTHDR                       = 0x38\n\tIPV6_RECVTCLASS                      = 0x42\n\tIPV6_ROUTER_ALERT                    = 0x16\n\tIPV6_RTHDR                           = 0x39\n\tIPV6_RTHDRDSTOPTS                    = 0x37\n\tIPV6_RTHDR_LOOSE                     = 0x0\n\tIPV6_RTHDR_STRICT                    = 0x1\n\tIPV6_RTHDR_TYPE_0                    = 0x0\n\tIPV6_RXDSTOPTS                       = 0x3b\n\tIPV6_RXHOPOPTS                       = 0x36\n\tIPV6_TCLASS                          = 0x43\n\tIPV6_TRANSPARENT                     = 0x4b\n\tIPV6_UNICAST_HOPS                    = 0x10\n\tIPV6_UNICAST_IF                      = 0x4c\n\tIPV6_V6ONLY                          = 0x1a\n\tIPV6_XFRM_POLICY                     = 0x23\n\tIP_ADD_MEMBERSHIP                    = 0x23\n\tIP_ADD_SOURCE_MEMBERSHIP             = 0x27\n\tIP_BIND_ADDRESS_NO_PORT              = 0x18\n\tIP_BLOCK_SOURCE                      = 0x26\n\tIP_CHECKSUM                          = 0x17\n\tIP_DEFAULT_MULTICAST_LOOP            = 0x1\n\tIP_DEFAULT_MULTICAST_TTL             = 0x1\n\tIP_DF                                = 0x4000\n\tIP_DROP_MEMBERSHIP                   = 0x24\n\tIP_DROP_SOURCE_MEMBERSHIP            = 0x28\n\tIP_FREEBIND                          = 0xf\n\tIP_HDRINCL                           = 0x3\n\tIP_IPSEC_POLICY                      = 0x10\n\tIP_MAXPACKET                         = 0xffff\n\tIP_MAX_MEMBERSHIPS                   = 0x14\n\tIP_MF                                = 0x2000\n\tIP_MINTTL                            = 0x15\n\tIP_MSFILTER                          = 0x29\n\tIP_MSS                               = 0x240\n\tIP_MTU                               = 0xe\n\tIP_MTU_DISCOVER                      = 0xa\n\tIP_MULTICAST_ALL                     = 0x31\n\tIP_MULTICAST_IF                      = 0x20\n\tIP_MULTICAST_LOOP                    = 0x22\n\tIP_MULTICAST_TTL                     = 0x21\n\tIP_NODEFRAG                          = 0x16\n\tIP_OFFMASK                           = 0x1fff\n\tIP_OPTIONS                           = 0x4\n\tIP_ORIGDSTADDR                       = 0x14\n\tIP_PASSSEC                           = 0x12\n\tIP_PKTINFO                           = 0x8\n\tIP_PKTOPTIONS                        = 0x9\n\tIP_PMTUDISC                          = 0xa\n\tIP_PMTUDISC_DO                       = 0x2\n\tIP_PMTUDISC_DONT                     = 0x0\n\tIP_PMTUDISC_INTERFACE                = 0x4\n\tIP_PMTUDISC_OMIT                     = 0x5\n\tIP_PMTUDISC_PROBE                    = 0x3\n\tIP_PMTUDISC_WANT                     = 0x1\n\tIP_RECVERR                           = 0xb\n\tIP_RECVFRAGSIZE                      = 0x19\n\tIP_RECVOPTS                          = 0x6\n\tIP_RECVORIGDSTADDR                   = 0x14\n\tIP_RECVRETOPTS                       = 0x7\n\tIP_RECVTOS                           = 0xd\n\tIP_RECVTTL                           = 0xc\n\tIP_RETOPTS                           = 0x7\n\tIP_RF                                = 0x8000\n\tIP_ROUTER_ALERT                      = 0x5\n\tIP_TOS                               = 0x1\n\tIP_TRANSPARENT                       = 0x13\n\tIP_TTL                               = 0x2\n\tIP_UNBLOCK_SOURCE                    = 0x25\n\tIP_UNICAST_IF                        = 0x32\n\tIP_XFRM_POLICY                       = 0x11\n\tISIG                                 = 0x80\n\tISOFS_SUPER_MAGIC                    = 0x9660\n\tISTRIP                               = 0x20\n\tIUCLC                                = 0x1000\n\tIUTF8                                = 0x4000\n\tIXANY                                = 0x800\n\tIXOFF                                = 0x400\n\tIXON                                 = 0x200\n\tJFFS2_SUPER_MAGIC                    = 0x72b6\n\tKEXEC_ARCH_386                       = 0x30000\n\tKEXEC_ARCH_68K                       = 0x40000\n\tKEXEC_ARCH_AARCH64                   = 0xb70000\n\tKEXEC_ARCH_ARM                       = 0x280000\n\tKEXEC_ARCH_DEFAULT                   = 0x0\n\tKEXEC_ARCH_IA_64                     = 0x320000\n\tKEXEC_ARCH_MASK                      = 0xffff0000\n\tKEXEC_ARCH_MIPS                      = 0x80000\n\tKEXEC_ARCH_MIPS_LE                   = 0xa0000\n\tKEXEC_ARCH_PPC                       = 0x140000\n\tKEXEC_ARCH_PPC64                     = 0x150000\n\tKEXEC_ARCH_S390                      = 0x160000\n\tKEXEC_ARCH_SH                        = 0x2a0000\n\tKEXEC_ARCH_X86_64                    = 0x3e0000\n\tKEXEC_FILE_NO_INITRAMFS              = 0x4\n\tKEXEC_FILE_ON_CRASH                  = 0x2\n\tKEXEC_FILE_UNLOAD                    = 0x1\n\tKEXEC_ON_CRASH                       = 0x1\n\tKEXEC_PRESERVE_CONTEXT               = 0x2\n\tKEXEC_SEGMENT_MAX                    = 0x10\n\tKEYCTL_ASSUME_AUTHORITY              = 0x10\n\tKEYCTL_CHOWN                         = 0x4\n\tKEYCTL_CLEAR                         = 0x7\n\tKEYCTL_DESCRIBE                      = 0x6\n\tKEYCTL_DH_COMPUTE                    = 0x17\n\tKEYCTL_GET_KEYRING_ID                = 0x0\n\tKEYCTL_GET_PERSISTENT                = 0x16\n\tKEYCTL_GET_SECURITY                  = 0x11\n\tKEYCTL_INSTANTIATE                   = 0xc\n\tKEYCTL_INSTANTIATE_IOV               = 0x14\n\tKEYCTL_INVALIDATE                    = 0x15\n\tKEYCTL_JOIN_SESSION_KEYRING          = 0x1\n\tKEYCTL_LINK                          = 0x8\n\tKEYCTL_NEGATE                        = 0xd\n\tKEYCTL_PKEY_DECRYPT                  = 0x1a\n\tKEYCTL_PKEY_ENCRYPT                  = 0x19\n\tKEYCTL_PKEY_QUERY                    = 0x18\n\tKEYCTL_PKEY_SIGN                     = 0x1b\n\tKEYCTL_PKEY_VERIFY                   = 0x1c\n\tKEYCTL_READ                          = 0xb\n\tKEYCTL_REJECT                        = 0x13\n\tKEYCTL_RESTRICT_KEYRING              = 0x1d\n\tKEYCTL_REVOKE                        = 0x3\n\tKEYCTL_SEARCH                        = 0xa\n\tKEYCTL_SESSION_TO_PARENT             = 0x12\n\tKEYCTL_SETPERM                       = 0x5\n\tKEYCTL_SET_REQKEY_KEYRING            = 0xe\n\tKEYCTL_SET_TIMEOUT                   = 0xf\n\tKEYCTL_SUPPORTS_DECRYPT              = 0x2\n\tKEYCTL_SUPPORTS_ENCRYPT              = 0x1\n\tKEYCTL_SUPPORTS_SIGN                 = 0x4\n\tKEYCTL_SUPPORTS_VERIFY               = 0x8\n\tKEYCTL_UNLINK                        = 0x9\n\tKEYCTL_UPDATE                        = 0x2\n\tKEY_REQKEY_DEFL_DEFAULT              = 0x0\n\tKEY_REQKEY_DEFL_GROUP_KEYRING        = 0x6\n\tKEY_REQKEY_DEFL_NO_CHANGE            = -0x1\n\tKEY_REQKEY_DEFL_PROCESS_KEYRING      = 0x2\n\tKEY_REQKEY_DEFL_REQUESTOR_KEYRING    = 0x7\n\tKEY_REQKEY_DEFL_SESSION_KEYRING      = 0x3\n\tKEY_REQKEY_DEFL_THREAD_KEYRING       = 0x1\n\tKEY_REQKEY_DEFL_USER_KEYRING         = 0x4\n\tKEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5\n\tKEY_SPEC_GROUP_KEYRING               = -0x6\n\tKEY_SPEC_PROCESS_KEYRING             = -0x2\n\tKEY_SPEC_REQKEY_AUTH_KEY             = -0x7\n\tKEY_SPEC_REQUESTOR_KEYRING           = -0x8\n\tKEY_SPEC_SESSION_KEYRING             = -0x3\n\tKEY_SPEC_THREAD_KEYRING              = -0x1\n\tKEY_SPEC_USER_KEYRING                = -0x4\n\tKEY_SPEC_USER_SESSION_KEYRING        = -0x5\n\tLINUX_REBOOT_CMD_CAD_OFF             = 0x0\n\tLINUX_REBOOT_CMD_CAD_ON              = 0x89abcdef\n\tLINUX_REBOOT_CMD_HALT                = 0xcdef0123\n\tLINUX_REBOOT_CMD_KEXEC               = 0x45584543\n\tLINUX_REBOOT_CMD_POWER_OFF           = 0x4321fedc\n\tLINUX_REBOOT_CMD_RESTART             = 0x1234567\n\tLINUX_REBOOT_CMD_RESTART2            = 0xa1b2c3d4\n\tLINUX_REBOOT_CMD_SW_SUSPEND          = 0xd000fce2\n\tLINUX_REBOOT_MAGIC1                  = 0xfee1dead\n\tLINUX_REBOOT_MAGIC2                  = 0x28121969\n\tLOCK_EX                              = 0x2\n\tLOCK_NB                              = 0x4\n\tLOCK_SH                              = 0x1\n\tLOCK_UN                              = 0x8\n\tMADV_DODUMP                          = 0x11\n\tMADV_DOFORK                          = 0xb\n\tMADV_DONTDUMP                        = 0x10\n\tMADV_DONTFORK                        = 0xa\n\tMADV_DONTNEED                        = 0x4\n\tMADV_FREE                            = 0x8\n\tMADV_HUGEPAGE                        = 0xe\n\tMADV_HWPOISON                        = 0x64\n\tMADV_KEEPONFORK                      = 0x13\n\tMADV_MERGEABLE                       = 0xc\n\tMADV_NOHUGEPAGE                      = 0xf\n\tMADV_NORMAL                          = 0x0\n\tMADV_RANDOM                          = 0x1\n\tMADV_REMOVE                          = 0x9\n\tMADV_SEQUENTIAL                      = 0x2\n\tMADV_UNMERGEABLE                     = 0xd\n\tMADV_WILLNEED                        = 0x3\n\tMADV_WIPEONFORK                      = 0x12\n\tMAP_ANON                             = 0x20\n\tMAP_ANONYMOUS                        = 0x20\n\tMAP_DENYWRITE                        = 0x800\n\tMAP_EXECUTABLE                       = 0x1000\n\tMAP_FILE                             = 0x0\n\tMAP_FIXED                            = 0x10\n\tMAP_FIXED_NOREPLACE                  = 0x100000\n\tMAP_GROWSDOWN                        = 0x100\n\tMAP_HUGETLB                          = 0x40000\n\tMAP_HUGE_MASK                        = 0x3f\n\tMAP_HUGE_SHIFT                       = 0x1a\n\tMAP_LOCKED                           = 0x80\n\tMAP_NONBLOCK                         = 0x10000\n\tMAP_NORESERVE                        = 0x40\n\tMAP_POPULATE                         = 0x8000\n\tMAP_PRIVATE                          = 0x2\n\tMAP_SHARED                           = 0x1\n\tMAP_SHARED_VALIDATE                  = 0x3\n\tMAP_STACK                            = 0x20000\n\tMAP_TYPE                             = 0xf\n\tMCAST_BLOCK_SOURCE                   = 0x2b\n\tMCAST_EXCLUDE                        = 0x0\n\tMCAST_INCLUDE                        = 0x1\n\tMCAST_JOIN_GROUP                     = 0x2a\n\tMCAST_JOIN_SOURCE_GROUP              = 0x2e\n\tMCAST_LEAVE_GROUP                    = 0x2d\n\tMCAST_LEAVE_SOURCE_GROUP             = 0x2f\n\tMCAST_MSFILTER                       = 0x30\n\tMCAST_UNBLOCK_SOURCE                 = 0x2c\n\tMCL_CURRENT                          = 0x2000\n\tMCL_FUTURE                           = 0x4000\n\tMCL_ONFAULT                          = 0x8000\n\tMFD_ALLOW_SEALING                    = 0x2\n\tMFD_CLOEXEC                          = 0x1\n\tMFD_HUGETLB                          = 0x4\n\tMFD_HUGE_16GB                        = -0x78000000\n\tMFD_HUGE_16MB                        = 0x60000000\n\tMFD_HUGE_1GB                         = 0x78000000\n\tMFD_HUGE_1MB                         = 0x50000000\n\tMFD_HUGE_256MB                       = 0x70000000\n\tMFD_HUGE_2GB                         = 0x7c000000\n\tMFD_HUGE_2MB                         = 0x54000000\n\tMFD_HUGE_32MB                        = 0x64000000\n\tMFD_HUGE_512KB                       = 0x4c000000\n\tMFD_HUGE_512MB                       = 0x74000000\n\tMFD_HUGE_64KB                        = 0x40000000\n\tMFD_HUGE_8MB                         = 0x5c000000\n\tMFD_HUGE_MASK                        = 0x3f\n\tMFD_HUGE_SHIFT                       = 0x1a\n\tMINIX2_SUPER_MAGIC                   = 0x2468\n\tMINIX2_SUPER_MAGIC2                  = 0x2478\n\tMINIX3_SUPER_MAGIC                   = 0x4d5a\n\tMINIX_SUPER_MAGIC                    = 0x137f\n\tMINIX_SUPER_MAGIC2                   = 0x138f\n\tMNT_DETACH                           = 0x2\n\tMNT_EXPIRE                           = 0x4\n\tMNT_FORCE                            = 0x1\n\tMODULE_INIT_IGNORE_MODVERSIONS       = 0x1\n\tMODULE_INIT_IGNORE_VERMAGIC          = 0x2\n\tMSDOS_SUPER_MAGIC                    = 0x4d44\n\tMSG_BATCH                            = 0x40000\n\tMSG_CMSG_CLOEXEC                     = 0x40000000\n\tMSG_CONFIRM                          = 0x800\n\tMSG_CTRUNC                           = 0x8\n\tMSG_DONTROUTE                        = 0x4\n\tMSG_DONTWAIT                         = 0x40\n\tMSG_EOR                              = 0x80\n\tMSG_ERRQUEUE                         = 0x2000\n\tMSG_FASTOPEN                         = 0x20000000\n\tMSG_FIN                              = 0x200\n\tMSG_MORE                             = 0x8000\n\tMSG_NOSIGNAL                         = 0x4000\n\tMSG_OOB                              = 0x1\n\tMSG_PEEK                             = 0x2\n\tMSG_PROXY                            = 0x10\n\tMSG_RST                              = 0x1000\n\tMSG_SYN                              = 0x400\n\tMSG_TRUNC                            = 0x20\n\tMSG_TRYHARD                          = 0x4\n\tMSG_WAITALL                          = 0x100\n\tMSG_WAITFORONE                       = 0x10000\n\tMSG_ZEROCOPY                         = 0x4000000\n\tMS_ACTIVE                            = 0x40000000\n\tMS_ASYNC                             = 0x1\n\tMS_BIND                              = 0x1000\n\tMS_BORN                              = 0x20000000\n\tMS_DIRSYNC                           = 0x80\n\tMS_INVALIDATE                        = 0x2\n\tMS_I_VERSION                         = 0x800000\n\tMS_KERNMOUNT                         = 0x400000\n\tMS_LAZYTIME                          = 0x2000000\n\tMS_MANDLOCK                          = 0x40\n\tMS_MGC_MSK                           = 0xffff0000\n\tMS_MGC_VAL                           = 0xc0ed0000\n\tMS_MOVE                              = 0x2000\n\tMS_NOATIME                           = 0x400\n\tMS_NODEV                             = 0x4\n\tMS_NODIRATIME                        = 0x800\n\tMS_NOEXEC                            = 0x8\n\tMS_NOREMOTELOCK                      = 0x8000000\n\tMS_NOSEC                             = 0x10000000\n\tMS_NOSUID                            = 0x2\n\tMS_NOUSER                            = -0x80000000\n\tMS_POSIXACL                          = 0x10000\n\tMS_PRIVATE                           = 0x40000\n\tMS_RDONLY                            = 0x1\n\tMS_REC                               = 0x4000\n\tMS_RELATIME                          = 0x200000\n\tMS_REMOUNT                           = 0x20\n\tMS_RMT_MASK                          = 0x2800051\n\tMS_SHARED                            = 0x100000\n\tMS_SILENT                            = 0x8000\n\tMS_SLAVE                             = 0x80000\n\tMS_STRICTATIME                       = 0x1000000\n\tMS_SUBMOUNT                          = 0x4000000\n\tMS_SYNC                              = 0x4\n\tMS_SYNCHRONOUS                       = 0x10\n\tMS_UNBINDABLE                        = 0x20000\n\tMS_VERBOSE                           = 0x8000\n\tMTD_INODE_FS_MAGIC                   = 0x11307854\n\tNAME_MAX                             = 0xff\n\tNCP_SUPER_MAGIC                      = 0x564c\n\tNETLINK_ADD_MEMBERSHIP               = 0x1\n\tNETLINK_AUDIT                        = 0x9\n\tNETLINK_BROADCAST_ERROR              = 0x4\n\tNETLINK_CAP_ACK                      = 0xa\n\tNETLINK_CONNECTOR                    = 0xb\n\tNETLINK_CRYPTO                       = 0x15\n\tNETLINK_DNRTMSG                      = 0xe\n\tNETLINK_DROP_MEMBERSHIP              = 0x2\n\tNETLINK_ECRYPTFS                     = 0x13\n\tNETLINK_EXT_ACK                      = 0xb\n\tNETLINK_FIB_LOOKUP                   = 0xa\n\tNETLINK_FIREWALL                     = 0x3\n\tNETLINK_GENERIC                      = 0x10\n\tNETLINK_GET_STRICT_CHK               = 0xc\n\tNETLINK_INET_DIAG                    = 0x4\n\tNETLINK_IP6_FW                       = 0xd\n\tNETLINK_ISCSI                        = 0x8\n\tNETLINK_KOBJECT_UEVENT               = 0xf\n\tNETLINK_LISTEN_ALL_NSID              = 0x8\n\tNETLINK_LIST_MEMBERSHIPS             = 0x9\n\tNETLINK_NETFILTER                    = 0xc\n\tNETLINK_NFLOG                        = 0x5\n\tNETLINK_NO_ENOBUFS                   = 0x5\n\tNETLINK_PKTINFO                      = 0x3\n\tNETLINK_RDMA                         = 0x14\n\tNETLINK_ROUTE                        = 0x0\n\tNETLINK_RX_RING                      = 0x6\n\tNETLINK_SCSITRANSPORT                = 0x12\n\tNETLINK_SELINUX                      = 0x7\n\tNETLINK_SMC                          = 0x16\n\tNETLINK_SOCK_DIAG                    = 0x4\n\tNETLINK_TX_RING                      = 0x7\n\tNETLINK_UNUSED                       = 0x1\n\tNETLINK_USERSOCK                     = 0x2\n\tNETLINK_XFRM                         = 0x6\n\tNETNSA_MAX                           = 0x5\n\tNETNSA_NSID_NOT_ASSIGNED             = -0x1\n\tNFNETLINK_V0                         = 0x0\n\tNFNLGRP_ACCT_QUOTA                   = 0x8\n\tNFNLGRP_CONNTRACK_DESTROY            = 0x3\n\tNFNLGRP_CONNTRACK_EXP_DESTROY        = 0x6\n\tNFNLGRP_CONNTRACK_EXP_NEW            = 0x4\n\tNFNLGRP_CONNTRACK_EXP_UPDATE         = 0x5\n\tNFNLGRP_CONNTRACK_NEW                = 0x1\n\tNFNLGRP_CONNTRACK_UPDATE             = 0x2\n\tNFNLGRP_MAX                          = 0x9\n\tNFNLGRP_NFTABLES                     = 0x7\n\tNFNLGRP_NFTRACE                      = 0x9\n\tNFNLGRP_NONE                         = 0x0\n\tNFNL_BATCH_MAX                       = 0x1\n\tNFNL_MSG_BATCH_BEGIN                 = 0x10\n\tNFNL_MSG_BATCH_END                   = 0x11\n\tNFNL_NFA_NEST                        = 0x8000\n\tNFNL_SUBSYS_ACCT                     = 0x7\n\tNFNL_SUBSYS_COUNT                    = 0xc\n\tNFNL_SUBSYS_CTHELPER                 = 0x9\n\tNFNL_SUBSYS_CTNETLINK                = 0x1\n\tNFNL_SUBSYS_CTNETLINK_EXP            = 0x2\n\tNFNL_SUBSYS_CTNETLINK_TIMEOUT        = 0x8\n\tNFNL_SUBSYS_IPSET                    = 0x6\n\tNFNL_SUBSYS_NFTABLES                 = 0xa\n\tNFNL_SUBSYS_NFT_COMPAT               = 0xb\n\tNFNL_SUBSYS_NONE                     = 0x0\n\tNFNL_SUBSYS_OSF                      = 0x5\n\tNFNL_SUBSYS_QUEUE                    = 0x3\n\tNFNL_SUBSYS_ULOG                     = 0x4\n\tNFS_SUPER_MAGIC                      = 0x6969\n\tNILFS_SUPER_MAGIC                    = 0x3434\n\tNL0                                  = 0x0\n\tNL1                                  = 0x100\n\tNL2                                  = 0x200\n\tNL3                                  = 0x300\n\tNLA_ALIGNTO                          = 0x4\n\tNLA_F_NESTED                         = 0x8000\n\tNLA_F_NET_BYTEORDER                  = 0x4000\n\tNLA_HDRLEN                           = 0x4\n\tNLDLY                                = 0x300\n\tNLMSG_ALIGNTO                        = 0x4\n\tNLMSG_DONE                           = 0x3\n\tNLMSG_ERROR                          = 0x2\n\tNLMSG_HDRLEN                         = 0x10\n\tNLMSG_MIN_TYPE                       = 0x10\n\tNLMSG_NOOP                           = 0x1\n\tNLMSG_OVERRUN                        = 0x4\n\tNLM_F_ACK                            = 0x4\n\tNLM_F_ACK_TLVS                       = 0x200\n\tNLM_F_APPEND                         = 0x800\n\tNLM_F_ATOMIC                         = 0x400\n\tNLM_F_CAPPED                         = 0x100\n\tNLM_F_CREATE                         = 0x400\n\tNLM_F_DUMP                           = 0x300\n\tNLM_F_DUMP_FILTERED                  = 0x20\n\tNLM_F_DUMP_INTR                      = 0x10\n\tNLM_F_ECHO                           = 0x8\n\tNLM_F_EXCL                           = 0x200\n\tNLM_F_MATCH                          = 0x200\n\tNLM_F_MULTI                          = 0x2\n\tNLM_F_NONREC                         = 0x100\n\tNLM_F_REPLACE                        = 0x100\n\tNLM_F_REQUEST                        = 0x1\n\tNLM_F_ROOT                           = 0x100\n\tNOFLSH                               = 0x80000000\n\tNSFS_MAGIC                           = 0x6e736673\n\tOCFS2_SUPER_MAGIC                    = 0x7461636f\n\tOCRNL                                = 0x8\n\tOFDEL                                = 0x80\n\tOFILL                                = 0x40\n\tOLCUC                                = 0x4\n\tONLCR                                = 0x2\n\tONLRET                               = 0x20\n\tONOCR                                = 0x10\n\tOPENPROM_SUPER_MAGIC                 = 0x9fa1\n\tOPOST                                = 0x1\n\tOVERLAYFS_SUPER_MAGIC                = 0x794c7630\n\tO_ACCMODE                            = 0x3\n\tO_APPEND                             = 0x400\n\tO_ASYNC                              = 0x2000\n\tO_CLOEXEC                            = 0x80000\n\tO_CREAT                              = 0x40\n\tO_DIRECT                             = 0x20000\n\tO_DIRECTORY                          = 0x4000\n\tO_DSYNC                              = 0x1000\n\tO_EXCL                               = 0x80\n\tO_FSYNC                              = 0x101000\n\tO_LARGEFILE                          = 0x0\n\tO_NDELAY                             = 0x800\n\tO_NOATIME                            = 0x40000\n\tO_NOCTTY                             = 0x100\n\tO_NOFOLLOW                           = 0x8000\n\tO_NONBLOCK                           = 0x800\n\tO_PATH                               = 0x200000\n\tO_RDONLY                             = 0x0\n\tO_RDWR                               = 0x2\n\tO_RSYNC                              = 0x101000\n\tO_SYNC                               = 0x101000\n\tO_TMPFILE                            = 0x404000\n\tO_TRUNC                              = 0x200\n\tO_WRONLY                             = 0x1\n\tPACKET_ADD_MEMBERSHIP                = 0x1\n\tPACKET_AUXDATA                       = 0x8\n\tPACKET_BROADCAST                     = 0x1\n\tPACKET_COPY_THRESH                   = 0x7\n\tPACKET_DROP_MEMBERSHIP               = 0x2\n\tPACKET_FANOUT                        = 0x12\n\tPACKET_FANOUT_CBPF                   = 0x6\n\tPACKET_FANOUT_CPU                    = 0x2\n\tPACKET_FANOUT_DATA                   = 0x16\n\tPACKET_FANOUT_EBPF                   = 0x7\n\tPACKET_FANOUT_FLAG_DEFRAG            = 0x8000\n\tPACKET_FANOUT_FLAG_ROLLOVER          = 0x1000\n\tPACKET_FANOUT_FLAG_UNIQUEID          = 0x2000\n\tPACKET_FANOUT_HASH                   = 0x0\n\tPACKET_FANOUT_LB                     = 0x1\n\tPACKET_FANOUT_QM                     = 0x5\n\tPACKET_FANOUT_RND                    = 0x4\n\tPACKET_FANOUT_ROLLOVER               = 0x3\n\tPACKET_FASTROUTE                     = 0x6\n\tPACKET_HDRLEN                        = 0xb\n\tPACKET_HOST                          = 0x0\n\tPACKET_IGNORE_OUTGOING               = 0x17\n\tPACKET_KERNEL                        = 0x7\n\tPACKET_LOOPBACK                      = 0x5\n\tPACKET_LOSS                          = 0xe\n\tPACKET_MR_ALLMULTI                   = 0x2\n\tPACKET_MR_MULTICAST                  = 0x0\n\tPACKET_MR_PROMISC                    = 0x1\n\tPACKET_MR_UNICAST                    = 0x3\n\tPACKET_MULTICAST                     = 0x2\n\tPACKET_ORIGDEV                       = 0x9\n\tPACKET_OTHERHOST                     = 0x3\n\tPACKET_OUTGOING                      = 0x4\n\tPACKET_QDISC_BYPASS                  = 0x14\n\tPACKET_RECV_OUTPUT                   = 0x3\n\tPACKET_RESERVE                       = 0xc\n\tPACKET_ROLLOVER_STATS                = 0x15\n\tPACKET_RX_RING                       = 0x5\n\tPACKET_STATISTICS                    = 0x6\n\tPACKET_TIMESTAMP                     = 0x11\n\tPACKET_TX_HAS_OFF                    = 0x13\n\tPACKET_TX_RING                       = 0xd\n\tPACKET_TX_TIMESTAMP                  = 0x10\n\tPACKET_USER                          = 0x6\n\tPACKET_VERSION                       = 0xa\n\tPACKET_VNET_HDR                      = 0xf\n\tPARENB                               = 0x1000\n\tPARITY_CRC16_PR0                     = 0x2\n\tPARITY_CRC16_PR0_CCITT               = 0x4\n\tPARITY_CRC16_PR1                     = 0x3\n\tPARITY_CRC16_PR1_CCITT               = 0x5\n\tPARITY_CRC32_PR0_CCITT               = 0x6\n\tPARITY_CRC32_PR1_CCITT               = 0x7\n\tPARITY_DEFAULT                       = 0x0\n\tPARITY_NONE                          = 0x1\n\tPARMRK                               = 0x8\n\tPARODD                               = 0x2000\n\tPENDIN                               = 0x20000000\n\tPERF_EVENT_IOC_DISABLE               = 0x20002401\n\tPERF_EVENT_IOC_ENABLE                = 0x20002400\n\tPERF_EVENT_IOC_ID                    = 0x40082407\n\tPERF_EVENT_IOC_MODIFY_ATTRIBUTES     = 0x8008240b\n\tPERF_EVENT_IOC_PAUSE_OUTPUT          = 0x80042409\n\tPERF_EVENT_IOC_PERIOD                = 0x80082404\n\tPERF_EVENT_IOC_QUERY_BPF             = 0xc008240a\n\tPERF_EVENT_IOC_REFRESH               = 0x20002402\n\tPERF_EVENT_IOC_RESET                 = 0x20002403\n\tPERF_EVENT_IOC_SET_BPF               = 0x80042408\n\tPERF_EVENT_IOC_SET_FILTER            = 0x80082406\n\tPERF_EVENT_IOC_SET_OUTPUT            = 0x20002405\n\tPIPEFS_MAGIC                         = 0x50495045\n\tPPPIOCATTACH                         = 0x8004743d\n\tPPPIOCATTCHAN                        = 0x80047438\n\tPPPIOCCONNECT                        = 0x8004743a\n\tPPPIOCDETACH                         = 0x8004743c\n\tPPPIOCDISCONN                        = 0x20007439\n\tPPPIOCGASYNCMAP                      = 0x40047458\n\tPPPIOCGCHAN                          = 0x40047437\n\tPPPIOCGDEBUG                         = 0x40047441\n\tPPPIOCGFLAGS                         = 0x4004745a\n\tPPPIOCGIDLE                          = 0x4010743f\n\tPPPIOCGL2TPSTATS                     = 0x40487436\n\tPPPIOCGMRU                           = 0x40047453\n\tPPPIOCGNPMODE                        = 0xc008744c\n\tPPPIOCGRASYNCMAP                     = 0x40047455\n\tPPPIOCGUNIT                          = 0x40047456\n\tPPPIOCGXASYNCMAP                     = 0x40207450\n\tPPPIOCNEWUNIT                        = 0xc004743e\n\tPPPIOCSACTIVE                        = 0x80107446\n\tPPPIOCSASYNCMAP                      = 0x80047457\n\tPPPIOCSCOMPRESS                      = 0x8010744d\n\tPPPIOCSDEBUG                         = 0x80047440\n\tPPPIOCSFLAGS                         = 0x80047459\n\tPPPIOCSMAXCID                        = 0x80047451\n\tPPPIOCSMRRU                          = 0x8004743b\n\tPPPIOCSMRU                           = 0x80047452\n\tPPPIOCSNPMODE                        = 0x8008744b\n\tPPPIOCSPASS                          = 0x80107447\n\tPPPIOCSRASYNCMAP                     = 0x80047454\n\tPPPIOCSXASYNCMAP                     = 0x8020744f\n\tPPPIOCXFERUNIT                       = 0x2000744e\n\tPRIO_PGRP                            = 0x1\n\tPRIO_PROCESS                         = 0x0\n\tPRIO_USER                            = 0x2\n\tPROC_SUPER_MAGIC                     = 0x9fa0\n\tPROT_EXEC                            = 0x4\n\tPROT_GROWSDOWN                       = 0x1000000\n\tPROT_GROWSUP                         = 0x2000000\n\tPROT_NONE                            = 0x0\n\tPROT_READ                            = 0x1\n\tPROT_SAO                             = 0x10\n\tPROT_WRITE                           = 0x2\n\tPR_CAPBSET_DROP                      = 0x18\n\tPR_CAPBSET_READ                      = 0x17\n\tPR_CAP_AMBIENT                       = 0x2f\n\tPR_CAP_AMBIENT_CLEAR_ALL             = 0x4\n\tPR_CAP_AMBIENT_IS_SET                = 0x1\n\tPR_CAP_AMBIENT_LOWER                 = 0x3\n\tPR_CAP_AMBIENT_RAISE                 = 0x2\n\tPR_ENDIAN_BIG                        = 0x0\n\tPR_ENDIAN_LITTLE                     = 0x1\n\tPR_ENDIAN_PPC_LITTLE                 = 0x2\n\tPR_FPEMU_NOPRINT                     = 0x1\n\tPR_FPEMU_SIGFPE                      = 0x2\n\tPR_FP_EXC_ASYNC                      = 0x2\n\tPR_FP_EXC_DISABLED                   = 0x0\n\tPR_FP_EXC_DIV                        = 0x10000\n\tPR_FP_EXC_INV                        = 0x100000\n\tPR_FP_EXC_NONRECOV                   = 0x1\n\tPR_FP_EXC_OVF                        = 0x20000\n\tPR_FP_EXC_PRECISE                    = 0x3\n\tPR_FP_EXC_RES                        = 0x80000\n\tPR_FP_EXC_SW_ENABLE                  = 0x80\n\tPR_FP_EXC_UND                        = 0x40000\n\tPR_FP_MODE_FR                        = 0x1\n\tPR_FP_MODE_FRE                       = 0x2\n\tPR_GET_CHILD_SUBREAPER               = 0x25\n\tPR_GET_DUMPABLE                      = 0x3\n\tPR_GET_ENDIAN                        = 0x13\n\tPR_GET_FPEMU                         = 0x9\n\tPR_GET_FPEXC                         = 0xb\n\tPR_GET_FP_MODE                       = 0x2e\n\tPR_GET_KEEPCAPS                      = 0x7\n\tPR_GET_NAME                          = 0x10\n\tPR_GET_NO_NEW_PRIVS                  = 0x27\n\tPR_GET_PDEATHSIG                     = 0x2\n\tPR_GET_SECCOMP                       = 0x15\n\tPR_GET_SECUREBITS                    = 0x1b\n\tPR_GET_SPECULATION_CTRL              = 0x34\n\tPR_GET_THP_DISABLE                   = 0x2a\n\tPR_GET_TID_ADDRESS                   = 0x28\n\tPR_GET_TIMERSLACK                    = 0x1e\n\tPR_GET_TIMING                        = 0xd\n\tPR_GET_TSC                           = 0x19\n\tPR_GET_UNALIGN                       = 0x5\n\tPR_MCE_KILL                          = 0x21\n\tPR_MCE_KILL_CLEAR                    = 0x0\n\tPR_MCE_KILL_DEFAULT                  = 0x2\n\tPR_MCE_KILL_EARLY                    = 0x1\n\tPR_MCE_KILL_GET                      = 0x22\n\tPR_MCE_KILL_LATE                     = 0x0\n\tPR_MCE_KILL_SET                      = 0x1\n\tPR_MPX_DISABLE_MANAGEMENT            = 0x2c\n\tPR_MPX_ENABLE_MANAGEMENT             = 0x2b\n\tPR_PAC_APDAKEY                       = 0x4\n\tPR_PAC_APDBKEY                       = 0x8\n\tPR_PAC_APGAKEY                       = 0x10\n\tPR_PAC_APIAKEY                       = 0x1\n\tPR_PAC_APIBKEY                       = 0x2\n\tPR_PAC_RESET_KEYS                    = 0x36\n\tPR_SET_CHILD_SUBREAPER               = 0x24\n\tPR_SET_DUMPABLE                      = 0x4\n\tPR_SET_ENDIAN                        = 0x14\n\tPR_SET_FPEMU                         = 0xa\n\tPR_SET_FPEXC                         = 0xc\n\tPR_SET_FP_MODE                       = 0x2d\n\tPR_SET_KEEPCAPS                      = 0x8\n\tPR_SET_MM                            = 0x23\n\tPR_SET_MM_ARG_END                    = 0x9\n\tPR_SET_MM_ARG_START                  = 0x8\n\tPR_SET_MM_AUXV                       = 0xc\n\tPR_SET_MM_BRK                        = 0x7\n\tPR_SET_MM_END_CODE                   = 0x2\n\tPR_SET_MM_END_DATA                   = 0x4\n\tPR_SET_MM_ENV_END                    = 0xb\n\tPR_SET_MM_ENV_START                  = 0xa\n\tPR_SET_MM_EXE_FILE                   = 0xd\n\tPR_SET_MM_MAP                        = 0xe\n\tPR_SET_MM_MAP_SIZE                   = 0xf\n\tPR_SET_MM_START_BRK                  = 0x6\n\tPR_SET_MM_START_CODE                 = 0x1\n\tPR_SET_MM_START_DATA                 = 0x3\n\tPR_SET_MM_START_STACK                = 0x5\n\tPR_SET_NAME                          = 0xf\n\tPR_SET_NO_NEW_PRIVS                  = 0x26\n\tPR_SET_PDEATHSIG                     = 0x1\n\tPR_SET_PTRACER                       = 0x59616d61\n\tPR_SET_PTRACER_ANY                   = 0xffffffffffffffff\n\tPR_SET_SECCOMP                       = 0x16\n\tPR_SET_SECUREBITS                    = 0x1c\n\tPR_SET_SPECULATION_CTRL              = 0x35\n\tPR_SET_THP_DISABLE                   = 0x29\n\tPR_SET_TIMERSLACK                    = 0x1d\n\tPR_SET_TIMING                        = 0xe\n\tPR_SET_TSC                           = 0x1a\n\tPR_SET_UNALIGN                       = 0x6\n\tPR_SPEC_DISABLE                      = 0x4\n\tPR_SPEC_DISABLE_NOEXEC               = 0x10\n\tPR_SPEC_ENABLE                       = 0x2\n\tPR_SPEC_FORCE_DISABLE                = 0x8\n\tPR_SPEC_INDIRECT_BRANCH              = 0x1\n\tPR_SPEC_NOT_AFFECTED                 = 0x0\n\tPR_SPEC_PRCTL                        = 0x1\n\tPR_SPEC_STORE_BYPASS                 = 0x0\n\tPR_SVE_GET_VL                        = 0x33\n\tPR_SVE_SET_VL                        = 0x32\n\tPR_SVE_SET_VL_ONEXEC                 = 0x40000\n\tPR_SVE_VL_INHERIT                    = 0x20000\n\tPR_SVE_VL_LEN_MASK                   = 0xffff\n\tPR_TASK_PERF_EVENTS_DISABLE          = 0x1f\n\tPR_TASK_PERF_EVENTS_ENABLE           = 0x20\n\tPR_TIMING_STATISTICAL                = 0x0\n\tPR_TIMING_TIMESTAMP                  = 0x1\n\tPR_TSC_ENABLE                        = 0x1\n\tPR_TSC_SIGSEGV                       = 0x2\n\tPR_UNALIGN_NOPRINT                   = 0x1\n\tPR_UNALIGN_SIGBUS                    = 0x2\n\tPSTOREFS_MAGIC                       = 0x6165676c\n\tPTRACE_ATTACH                        = 0x10\n\tPTRACE_CONT                          = 0x7\n\tPTRACE_DETACH                        = 0x11\n\tPTRACE_EVENT_CLONE                   = 0x3\n\tPTRACE_EVENT_EXEC                    = 0x4\n\tPTRACE_EVENT_EXIT                    = 0x6\n\tPTRACE_EVENT_FORK                    = 0x1\n\tPTRACE_EVENT_SECCOMP                 = 0x7\n\tPTRACE_EVENT_STOP                    = 0x80\n\tPTRACE_EVENT_VFORK                   = 0x2\n\tPTRACE_EVENT_VFORK_DONE              = 0x5\n\tPTRACE_GETEVENTMSG                   = 0x4201\n\tPTRACE_GETEVRREGS                    = 0x14\n\tPTRACE_GETFPREGS                     = 0xe\n\tPTRACE_GETREGS                       = 0xc\n\tPTRACE_GETREGS64                     = 0x16\n\tPTRACE_GETREGSET                     = 0x4204\n\tPTRACE_GETSIGINFO                    = 0x4202\n\tPTRACE_GETSIGMASK                    = 0x420a\n\tPTRACE_GETVRREGS                     = 0x12\n\tPTRACE_GETVSRREGS                    = 0x1b\n\tPTRACE_GET_DEBUGREG                  = 0x19\n\tPTRACE_INTERRUPT                     = 0x4207\n\tPTRACE_KILL                          = 0x8\n\tPTRACE_LISTEN                        = 0x4208\n\tPTRACE_O_EXITKILL                    = 0x100000\n\tPTRACE_O_MASK                        = 0x3000ff\n\tPTRACE_O_SUSPEND_SECCOMP             = 0x200000\n\tPTRACE_O_TRACECLONE                  = 0x8\n\tPTRACE_O_TRACEEXEC                   = 0x10\n\tPTRACE_O_TRACEEXIT                   = 0x40\n\tPTRACE_O_TRACEFORK                   = 0x2\n\tPTRACE_O_TRACESECCOMP                = 0x80\n\tPTRACE_O_TRACESYSGOOD                = 0x1\n\tPTRACE_O_TRACEVFORK                  = 0x4\n\tPTRACE_O_TRACEVFORKDONE              = 0x20\n\tPTRACE_PEEKDATA                      = 0x2\n\tPTRACE_PEEKSIGINFO                   = 0x4209\n\tPTRACE_PEEKSIGINFO_SHARED            = 0x1\n\tPTRACE_PEEKTEXT                      = 0x1\n\tPTRACE_PEEKUSR                       = 0x3\n\tPTRACE_POKEDATA                      = 0x5\n\tPTRACE_POKETEXT                      = 0x4\n\tPTRACE_POKEUSR                       = 0x6\n\tPTRACE_SECCOMP_GET_FILTER            = 0x420c\n\tPTRACE_SECCOMP_GET_METADATA          = 0x420d\n\tPTRACE_SEIZE                         = 0x4206\n\tPTRACE_SETEVRREGS                    = 0x15\n\tPTRACE_SETFPREGS                     = 0xf\n\tPTRACE_SETOPTIONS                    = 0x4200\n\tPTRACE_SETREGS                       = 0xd\n\tPTRACE_SETREGS64                     = 0x17\n\tPTRACE_SETREGSET                     = 0x4205\n\tPTRACE_SETSIGINFO                    = 0x4203\n\tPTRACE_SETSIGMASK                    = 0x420b\n\tPTRACE_SETVRREGS                     = 0x13\n\tPTRACE_SETVSRREGS                    = 0x1c\n\tPTRACE_SET_DEBUGREG                  = 0x1a\n\tPTRACE_SINGLEBLOCK                   = 0x100\n\tPTRACE_SINGLESTEP                    = 0x9\n\tPTRACE_SYSCALL                       = 0x18\n\tPTRACE_SYSEMU                        = 0x1d\n\tPTRACE_SYSEMU_SINGLESTEP             = 0x1e\n\tPTRACE_TRACEME                       = 0x0\n\tPT_CCR                               = 0x26\n\tPT_CTR                               = 0x23\n\tPT_DAR                               = 0x29\n\tPT_DSCR                              = 0x2c\n\tPT_DSISR                             = 0x2a\n\tPT_FPR0                              = 0x30\n\tPT_FPSCR                             = 0x50\n\tPT_LNK                               = 0x24\n\tPT_MSR                               = 0x21\n\tPT_NIP                               = 0x20\n\tPT_ORIG_R3                           = 0x22\n\tPT_R0                                = 0x0\n\tPT_R1                                = 0x1\n\tPT_R10                               = 0xa\n\tPT_R11                               = 0xb\n\tPT_R12                               = 0xc\n\tPT_R13                               = 0xd\n\tPT_R14                               = 0xe\n\tPT_R15                               = 0xf\n\tPT_R16                               = 0x10\n\tPT_R17                               = 0x11\n\tPT_R18                               = 0x12\n\tPT_R19                               = 0x13\n\tPT_R2                                = 0x2\n\tPT_R20                               = 0x14\n\tPT_R21                               = 0x15\n\tPT_R22                               = 0x16\n\tPT_R23                               = 0x17\n\tPT_R24                               = 0x18\n\tPT_R25                               = 0x19\n\tPT_R26                               = 0x1a\n\tPT_R27                               = 0x1b\n\tPT_R28                               = 0x1c\n\tPT_R29                               = 0x1d\n\tPT_R3                                = 0x3\n\tPT_R30                               = 0x1e\n\tPT_R31                               = 0x1f\n\tPT_R4                                = 0x4\n\tPT_R5                                = 0x5\n\tPT_R6                                = 0x6\n\tPT_R7                                = 0x7\n\tPT_R8                                = 0x8\n\tPT_R9                                = 0x9\n\tPT_REGS_COUNT                        = 0x2c\n\tPT_RESULT                            = 0x2b\n\tPT_SOFTE                             = 0x27\n\tPT_TRAP                              = 0x28\n\tPT_VR0                               = 0x52\n\tPT_VRSAVE                            = 0x94\n\tPT_VSCR                              = 0x93\n\tPT_VSR0                              = 0x96\n\tPT_VSR31                             = 0xd4\n\tPT_XER                               = 0x25\n\tQNX4_SUPER_MAGIC                     = 0x2f\n\tQNX6_SUPER_MAGIC                     = 0x68191122\n\tRAMFS_MAGIC                          = 0x858458f6\n\tRDTGROUP_SUPER_MAGIC                 = 0x7655821\n\tREISERFS_SUPER_MAGIC                 = 0x52654973\n\tRENAME_EXCHANGE                      = 0x2\n\tRENAME_NOREPLACE                     = 0x1\n\tRENAME_WHITEOUT                      = 0x4\n\tRLIMIT_AS                            = 0x9\n\tRLIMIT_CORE                          = 0x4\n\tRLIMIT_CPU                           = 0x0\n\tRLIMIT_DATA                          = 0x2\n\tRLIMIT_FSIZE                         = 0x1\n\tRLIMIT_LOCKS                         = 0xa\n\tRLIMIT_MEMLOCK                       = 0x8\n\tRLIMIT_MSGQUEUE                      = 0xc\n\tRLIMIT_NICE                          = 0xd\n\tRLIMIT_NOFILE                        = 0x7\n\tRLIMIT_NPROC                         = 0x6\n\tRLIMIT_RSS                           = 0x5\n\tRLIMIT_RTPRIO                        = 0xe\n\tRLIMIT_RTTIME                        = 0xf\n\tRLIMIT_SIGPENDING                    = 0xb\n\tRLIMIT_STACK                         = 0x3\n\tRLIM_INFINITY                        = 0xffffffffffffffff\n\tRNDADDENTROPY                        = 0x80085203\n\tRNDADDTOENTCNT                       = 0x80045201\n\tRNDCLEARPOOL                         = 0x20005206\n\tRNDGETENTCNT                         = 0x40045200\n\tRNDGETPOOL                           = 0x40085202\n\tRNDRESEEDCRNG                        = 0x20005207\n\tRNDZAPENTCNT                         = 0x20005204\n\tRTAX_ADVMSS                          = 0x8\n\tRTAX_CC_ALGO                         = 0x10\n\tRTAX_CWND                            = 0x7\n\tRTAX_FASTOPEN_NO_COOKIE              = 0x11\n\tRTAX_FEATURES                        = 0xc\n\tRTAX_FEATURE_ALLFRAG                 = 0x8\n\tRTAX_FEATURE_ECN                     = 0x1\n\tRTAX_FEATURE_MASK                    = 0xf\n\tRTAX_FEATURE_SACK                    = 0x2\n\tRTAX_FEATURE_TIMESTAMP               = 0x4\n\tRTAX_HOPLIMIT                        = 0xa\n\tRTAX_INITCWND                        = 0xb\n\tRTAX_INITRWND                        = 0xe\n\tRTAX_LOCK                            = 0x1\n\tRTAX_MAX                             = 0x11\n\tRTAX_MTU                             = 0x2\n\tRTAX_QUICKACK                        = 0xf\n\tRTAX_REORDERING                      = 0x9\n\tRTAX_RTO_MIN                         = 0xd\n\tRTAX_RTT                             = 0x4\n\tRTAX_RTTVAR                          = 0x5\n\tRTAX_SSTHRESH                        = 0x6\n\tRTAX_UNSPEC                          = 0x0\n\tRTAX_WINDOW                          = 0x3\n\tRTA_ALIGNTO                          = 0x4\n\tRTA_MAX                              = 0x1d\n\tRTCF_DIRECTSRC                       = 0x4000000\n\tRTCF_DOREDIRECT                      = 0x1000000\n\tRTCF_LOG                             = 0x2000000\n\tRTCF_MASQ                            = 0x400000\n\tRTCF_NAT                             = 0x800000\n\tRTCF_VALVE                           = 0x200000\n\tRTC_AF                               = 0x20\n\tRTC_AIE_OFF                          = 0x20007002\n\tRTC_AIE_ON                           = 0x20007001\n\tRTC_ALM_READ                         = 0x40247008\n\tRTC_ALM_SET                          = 0x80247007\n\tRTC_EPOCH_READ                       = 0x4008700d\n\tRTC_EPOCH_SET                        = 0x8008700e\n\tRTC_IRQF                             = 0x80\n\tRTC_IRQP_READ                        = 0x4008700b\n\tRTC_IRQP_SET                         = 0x8008700c\n\tRTC_MAX_FREQ                         = 0x2000\n\tRTC_PF                               = 0x40\n\tRTC_PIE_OFF                          = 0x20007006\n\tRTC_PIE_ON                           = 0x20007005\n\tRTC_PLL_GET                          = 0x40207011\n\tRTC_PLL_SET                          = 0x80207012\n\tRTC_RD_TIME                          = 0x40247009\n\tRTC_SET_TIME                         = 0x8024700a\n\tRTC_UF                               = 0x10\n\tRTC_UIE_OFF                          = 0x20007004\n\tRTC_UIE_ON                           = 0x20007003\n\tRTC_VL_CLR                           = 0x20007014\n\tRTC_VL_READ                          = 0x40047013\n\tRTC_WIE_OFF                          = 0x20007010\n\tRTC_WIE_ON                           = 0x2000700f\n\tRTC_WKALM_RD                         = 0x40287010\n\tRTC_WKALM_SET                        = 0x8028700f\n\tRTF_ADDRCLASSMASK                    = 0xf8000000\n\tRTF_ADDRCONF                         = 0x40000\n\tRTF_ALLONLINK                        = 0x20000\n\tRTF_BROADCAST                        = 0x10000000\n\tRTF_CACHE                            = 0x1000000\n\tRTF_DEFAULT                          = 0x10000\n\tRTF_DYNAMIC                          = 0x10\n\tRTF_FLOW                             = 0x2000000\n\tRTF_GATEWAY                          = 0x2\n\tRTF_HOST                             = 0x4\n\tRTF_INTERFACE                        = 0x40000000\n\tRTF_IRTT                             = 0x100\n\tRTF_LINKRT                           = 0x100000\n\tRTF_LOCAL                            = 0x80000000\n\tRTF_MODIFIED                         = 0x20\n\tRTF_MSS                              = 0x40\n\tRTF_MTU                              = 0x40\n\tRTF_MULTICAST                        = 0x20000000\n\tRTF_NAT                              = 0x8000000\n\tRTF_NOFORWARD                        = 0x1000\n\tRTF_NONEXTHOP                        = 0x200000\n\tRTF_NOPMTUDISC                       = 0x4000\n\tRTF_POLICY                           = 0x4000000\n\tRTF_REINSTATE                        = 0x8\n\tRTF_REJECT                           = 0x200\n\tRTF_STATIC                           = 0x400\n\tRTF_THROW                            = 0x2000\n\tRTF_UP                               = 0x1\n\tRTF_WINDOW                           = 0x80\n\tRTF_XRESOLVE                         = 0x800\n\tRTM_BASE                             = 0x10\n\tRTM_DELACTION                        = 0x31\n\tRTM_DELADDR                          = 0x15\n\tRTM_DELADDRLABEL                     = 0x49\n\tRTM_DELCHAIN                         = 0x65\n\tRTM_DELLINK                          = 0x11\n\tRTM_DELMDB                           = 0x55\n\tRTM_DELNEIGH                         = 0x1d\n\tRTM_DELNETCONF                       = 0x51\n\tRTM_DELNSID                          = 0x59\n\tRTM_DELQDISC                         = 0x25\n\tRTM_DELROUTE                         = 0x19\n\tRTM_DELRULE                          = 0x21\n\tRTM_DELTCLASS                        = 0x29\n\tRTM_DELTFILTER                       = 0x2d\n\tRTM_F_CLONED                         = 0x200\n\tRTM_F_EQUALIZE                       = 0x400\n\tRTM_F_FIB_MATCH                      = 0x2000\n\tRTM_F_LOOKUP_TABLE                   = 0x1000\n\tRTM_F_NOTIFY                         = 0x100\n\tRTM_F_PREFIX                         = 0x800\n\tRTM_GETACTION                        = 0x32\n\tRTM_GETADDR                          = 0x16\n\tRTM_GETADDRLABEL                     = 0x4a\n\tRTM_GETANYCAST                       = 0x3e\n\tRTM_GETCHAIN                         = 0x66\n\tRTM_GETDCB                           = 0x4e\n\tRTM_GETLINK                          = 0x12\n\tRTM_GETMDB                           = 0x56\n\tRTM_GETMULTICAST                     = 0x3a\n\tRTM_GETNEIGH                         = 0x1e\n\tRTM_GETNEIGHTBL                      = 0x42\n\tRTM_GETNETCONF                       = 0x52\n\tRTM_GETNSID                          = 0x5a\n\tRTM_GETQDISC                         = 0x26\n\tRTM_GETROUTE                         = 0x1a\n\tRTM_GETRULE                          = 0x22\n\tRTM_GETSTATS                         = 0x5e\n\tRTM_GETTCLASS                        = 0x2a\n\tRTM_GETTFILTER                       = 0x2e\n\tRTM_MAX                              = 0x67\n\tRTM_NEWACTION                        = 0x30\n\tRTM_NEWADDR                          = 0x14\n\tRTM_NEWADDRLABEL                     = 0x48\n\tRTM_NEWCACHEREPORT                   = 0x60\n\tRTM_NEWCHAIN                         = 0x64\n\tRTM_NEWLINK                          = 0x10\n\tRTM_NEWMDB                           = 0x54\n\tRTM_NEWNDUSEROPT                     = 0x44\n\tRTM_NEWNEIGH                         = 0x1c\n\tRTM_NEWNEIGHTBL                      = 0x40\n\tRTM_NEWNETCONF                       = 0x50\n\tRTM_NEWNSID                          = 0x58\n\tRTM_NEWPREFIX                        = 0x34\n\tRTM_NEWQDISC                         = 0x24\n\tRTM_NEWROUTE                         = 0x18\n\tRTM_NEWRULE                          = 0x20\n\tRTM_NEWSTATS                         = 0x5c\n\tRTM_NEWTCLASS                        = 0x28\n\tRTM_NEWTFILTER                       = 0x2c\n\tRTM_NR_FAMILIES                      = 0x16\n\tRTM_NR_MSGTYPES                      = 0x58\n\tRTM_SETDCB                           = 0x4f\n\tRTM_SETLINK                          = 0x13\n\tRTM_SETNEIGHTBL                      = 0x43\n\tRTNH_ALIGNTO                         = 0x4\n\tRTNH_COMPARE_MASK                    = 0x19\n\tRTNH_F_DEAD                          = 0x1\n\tRTNH_F_LINKDOWN                      = 0x10\n\tRTNH_F_OFFLOAD                       = 0x8\n\tRTNH_F_ONLINK                        = 0x4\n\tRTNH_F_PERVASIVE                     = 0x2\n\tRTNH_F_UNRESOLVED                    = 0x20\n\tRTN_MAX                              = 0xb\n\tRTPROT_BABEL                         = 0x2a\n\tRTPROT_BGP                           = 0xba\n\tRTPROT_BIRD                          = 0xc\n\tRTPROT_BOOT                          = 0x3\n\tRTPROT_DHCP                          = 0x10\n\tRTPROT_DNROUTED                      = 0xd\n\tRTPROT_EIGRP                         = 0xc0\n\tRTPROT_GATED                         = 0x8\n\tRTPROT_ISIS                          = 0xbb\n\tRTPROT_KERNEL                        = 0x2\n\tRTPROT_MROUTED                       = 0x11\n\tRTPROT_MRT                           = 0xa\n\tRTPROT_NTK                           = 0xf\n\tRTPROT_OSPF                          = 0xbc\n\tRTPROT_RA                            = 0x9\n\tRTPROT_REDIRECT                      = 0x1\n\tRTPROT_RIP                           = 0xbd\n\tRTPROT_STATIC                        = 0x4\n\tRTPROT_UNSPEC                        = 0x0\n\tRTPROT_XORP                          = 0xe\n\tRTPROT_ZEBRA                         = 0xb\n\tRT_CLASS_DEFAULT                     = 0xfd\n\tRT_CLASS_LOCAL                       = 0xff\n\tRT_CLASS_MAIN                        = 0xfe\n\tRT_CLASS_MAX                         = 0xff\n\tRT_CLASS_UNSPEC                      = 0x0\n\tRUSAGE_CHILDREN                      = -0x1\n\tRUSAGE_SELF                          = 0x0\n\tRUSAGE_THREAD                        = 0x1\n\tSCM_CREDENTIALS                      = 0x2\n\tSCM_RIGHTS                           = 0x1\n\tSCM_TIMESTAMP                        = 0x1d\n\tSCM_TIMESTAMPING                     = 0x25\n\tSCM_TIMESTAMPING_OPT_STATS           = 0x36\n\tSCM_TIMESTAMPING_PKTINFO             = 0x3a\n\tSCM_TIMESTAMPNS                      = 0x23\n\tSCM_TXTIME                           = 0x3d\n\tSCM_WIFI_STATUS                      = 0x29\n\tSC_LOG_FLUSH                         = 0x100000\n\tSECCOMP_MODE_DISABLED                = 0x0\n\tSECCOMP_MODE_FILTER                  = 0x2\n\tSECCOMP_MODE_STRICT                  = 0x1\n\tSECURITYFS_MAGIC                     = 0x73636673\n\tSELINUX_MAGIC                        = 0xf97cff8c\n\tSFD_CLOEXEC                          = 0x80000\n\tSFD_NONBLOCK                         = 0x800\n\tSHUT_RD                              = 0x0\n\tSHUT_RDWR                            = 0x2\n\tSHUT_WR                              = 0x1\n\tSIOCADDDLCI                          = 0x8980\n\tSIOCADDMULTI                         = 0x8931\n\tSIOCADDRT                            = 0x890b\n\tSIOCATMARK                           = 0x8905\n\tSIOCBONDCHANGEACTIVE                 = 0x8995\n\tSIOCBONDENSLAVE                      = 0x8990\n\tSIOCBONDINFOQUERY                    = 0x8994\n\tSIOCBONDRELEASE                      = 0x8991\n\tSIOCBONDSETHWADDR                    = 0x8992\n\tSIOCBONDSLAVEINFOQUERY               = 0x8993\n\tSIOCBRADDBR                          = 0x89a0\n\tSIOCBRADDIF                          = 0x89a2\n\tSIOCBRDELBR                          = 0x89a1\n\tSIOCBRDELIF                          = 0x89a3\n\tSIOCDARP                             = 0x8953\n\tSIOCDELDLCI                          = 0x8981\n\tSIOCDELMULTI                         = 0x8932\n\tSIOCDELRT                            = 0x890c\n\tSIOCDEVPRIVATE                       = 0x89f0\n\tSIOCDIFADDR                          = 0x8936\n\tSIOCDRARP                            = 0x8960\n\tSIOCETHTOOL                          = 0x8946\n\tSIOCGARP                             = 0x8954\n\tSIOCGHWTSTAMP                        = 0x89b1\n\tSIOCGIFADDR                          = 0x8915\n\tSIOCGIFBR                            = 0x8940\n\tSIOCGIFBRDADDR                       = 0x8919\n\tSIOCGIFCONF                          = 0x8912\n\tSIOCGIFCOUNT                         = 0x8938\n\tSIOCGIFDSTADDR                       = 0x8917\n\tSIOCGIFENCAP                         = 0x8925\n\tSIOCGIFFLAGS                         = 0x8913\n\tSIOCGIFHWADDR                        = 0x8927\n\tSIOCGIFINDEX                         = 0x8933\n\tSIOCGIFMAP                           = 0x8970\n\tSIOCGIFMEM                           = 0x891f\n\tSIOCGIFMETRIC                        = 0x891d\n\tSIOCGIFMTU                           = 0x8921\n\tSIOCGIFNAME                          = 0x8910\n\tSIOCGIFNETMASK                       = 0x891b\n\tSIOCGIFPFLAGS                        = 0x8935\n\tSIOCGIFSLAVE                         = 0x8929\n\tSIOCGIFTXQLEN                        = 0x8942\n\tSIOCGIFVLAN                          = 0x8982\n\tSIOCGMIIPHY                          = 0x8947\n\tSIOCGMIIREG                          = 0x8948\n\tSIOCGPGRP                            = 0x8904\n\tSIOCGPPPCSTATS                       = 0x89f2\n\tSIOCGPPPSTATS                        = 0x89f0\n\tSIOCGPPPVER                          = 0x89f1\n\tSIOCGRARP                            = 0x8961\n\tSIOCGSKNS                            = 0x894c\n\tSIOCGSTAMP                           = 0x8906\n\tSIOCGSTAMPNS                         = 0x8907\n\tSIOCINQ                              = 0x4004667f\n\tSIOCOUTQ                             = 0x40047473\n\tSIOCOUTQNSD                          = 0x894b\n\tSIOCPROTOPRIVATE                     = 0x89e0\n\tSIOCRTMSG                            = 0x890d\n\tSIOCSARP                             = 0x8955\n\tSIOCSHWTSTAMP                        = 0x89b0\n\tSIOCSIFADDR                          = 0x8916\n\tSIOCSIFBR                            = 0x8941\n\tSIOCSIFBRDADDR                       = 0x891a\n\tSIOCSIFDSTADDR                       = 0x8918\n\tSIOCSIFENCAP                         = 0x8926\n\tSIOCSIFFLAGS                         = 0x8914\n\tSIOCSIFHWADDR                        = 0x8924\n\tSIOCSIFHWBROADCAST                   = 0x8937\n\tSIOCSIFLINK                          = 0x8911\n\tSIOCSIFMAP                           = 0x8971\n\tSIOCSIFMEM                           = 0x8920\n\tSIOCSIFMETRIC                        = 0x891e\n\tSIOCSIFMTU                           = 0x8922\n\tSIOCSIFNAME                          = 0x8923\n\tSIOCSIFNETMASK                       = 0x891c\n\tSIOCSIFPFLAGS                        = 0x8934\n\tSIOCSIFSLAVE                         = 0x8930\n\tSIOCSIFTXQLEN                        = 0x8943\n\tSIOCSIFVLAN                          = 0x8983\n\tSIOCSMIIREG                          = 0x8949\n\tSIOCSPGRP                            = 0x8902\n\tSIOCSRARP                            = 0x8962\n\tSIOCWANDEV                           = 0x894a\n\tSMACK_MAGIC                          = 0x43415d53\n\tSMART_AUTOSAVE                       = 0xd2\n\tSMART_AUTO_OFFLINE                   = 0xdb\n\tSMART_DISABLE                        = 0xd9\n\tSMART_ENABLE                         = 0xd8\n\tSMART_HCYL_PASS                      = 0xc2\n\tSMART_IMMEDIATE_OFFLINE              = 0xd4\n\tSMART_LCYL_PASS                      = 0x4f\n\tSMART_READ_LOG_SECTOR                = 0xd5\n\tSMART_READ_THRESHOLDS                = 0xd1\n\tSMART_READ_VALUES                    = 0xd0\n\tSMART_SAVE                           = 0xd3\n\tSMART_STATUS                         = 0xda\n\tSMART_WRITE_LOG_SECTOR               = 0xd6\n\tSMART_WRITE_THRESHOLDS               = 0xd7\n\tSMB_SUPER_MAGIC                      = 0x517b\n\tSOCKFS_MAGIC                         = 0x534f434b\n\tSOCK_CLOEXEC                         = 0x80000\n\tSOCK_DCCP                            = 0x6\n\tSOCK_DGRAM                           = 0x2\n\tSOCK_IOC_TYPE                        = 0x89\n\tSOCK_NONBLOCK                        = 0x800\n\tSOCK_PACKET                          = 0xa\n\tSOCK_RAW                             = 0x3\n\tSOCK_RDM                             = 0x4\n\tSOCK_SEQPACKET                       = 0x5\n\tSOCK_STREAM                          = 0x1\n\tSOL_AAL                              = 0x109\n\tSOL_ALG                              = 0x117\n\tSOL_ATM                              = 0x108\n\tSOL_CAIF                             = 0x116\n\tSOL_CAN_BASE                         = 0x64\n\tSOL_DCCP                             = 0x10d\n\tSOL_DECNET                           = 0x105\n\tSOL_ICMPV6                           = 0x3a\n\tSOL_IP                               = 0x0\n\tSOL_IPV6                             = 0x29\n\tSOL_IRDA                             = 0x10a\n\tSOL_IUCV                             = 0x115\n\tSOL_KCM                              = 0x119\n\tSOL_LLC                              = 0x10c\n\tSOL_NETBEUI                          = 0x10b\n\tSOL_NETLINK                          = 0x10e\n\tSOL_NFC                              = 0x118\n\tSOL_PACKET                           = 0x107\n\tSOL_PNPIPE                           = 0x113\n\tSOL_PPPOL2TP                         = 0x111\n\tSOL_RAW                              = 0xff\n\tSOL_RDS                              = 0x114\n\tSOL_RXRPC                            = 0x110\n\tSOL_SOCKET                           = 0x1\n\tSOL_TCP                              = 0x6\n\tSOL_TIPC                             = 0x10f\n\tSOL_TLS                              = 0x11a\n\tSOL_X25                              = 0x106\n\tSOL_XDP                              = 0x11b\n\tSOMAXCONN                            = 0x80\n\tSO_ACCEPTCONN                        = 0x1e\n\tSO_ATTACH_BPF                        = 0x32\n\tSO_ATTACH_FILTER                     = 0x1a\n\tSO_ATTACH_REUSEPORT_CBPF             = 0x33\n\tSO_ATTACH_REUSEPORT_EBPF             = 0x34\n\tSO_BINDTODEVICE                      = 0x19\n\tSO_BINDTOIFINDEX                     = 0x3e\n\tSO_BPF_EXTENSIONS                    = 0x30\n\tSO_BROADCAST                         = 0x6\n\tSO_BSDCOMPAT                         = 0xe\n\tSO_BUSY_POLL                         = 0x2e\n\tSO_CNX_ADVICE                        = 0x35\n\tSO_COOKIE                            = 0x39\n\tSO_DEBUG                             = 0x1\n\tSO_DETACH_BPF                        = 0x1b\n\tSO_DETACH_FILTER                     = 0x1b\n\tSO_DOMAIN                            = 0x27\n\tSO_DONTROUTE                         = 0x5\n\tSO_EE_CODE_TXTIME_INVALID_PARAM      = 0x1\n\tSO_EE_CODE_TXTIME_MISSED             = 0x2\n\tSO_EE_CODE_ZEROCOPY_COPIED           = 0x1\n\tSO_EE_ORIGIN_ICMP                    = 0x2\n\tSO_EE_ORIGIN_ICMP6                   = 0x3\n\tSO_EE_ORIGIN_LOCAL                   = 0x1\n\tSO_EE_ORIGIN_NONE                    = 0x0\n\tSO_EE_ORIGIN_TIMESTAMPING            = 0x4\n\tSO_EE_ORIGIN_TXSTATUS                = 0x4\n\tSO_EE_ORIGIN_TXTIME                  = 0x6\n\tSO_EE_ORIGIN_ZEROCOPY                = 0x5\n\tSO_ERROR                             = 0x4\n\tSO_GET_FILTER                        = 0x1a\n\tSO_INCOMING_CPU                      = 0x31\n\tSO_INCOMING_NAPI_ID                  = 0x38\n\tSO_KEEPALIVE                         = 0x9\n\tSO_LINGER                            = 0xd\n\tSO_LOCK_FILTER                       = 0x2c\n\tSO_MARK                              = 0x24\n\tSO_MAX_PACING_RATE                   = 0x2f\n\tSO_MEMINFO                           = 0x37\n\tSO_NOFCS                             = 0x2b\n\tSO_NO_CHECK                          = 0xb\n\tSO_OOBINLINE                         = 0xa\n\tSO_PASSCRED                          = 0x14\n\tSO_PASSSEC                           = 0x22\n\tSO_PEEK_OFF                          = 0x2a\n\tSO_PEERCRED                          = 0x15\n\tSO_PEERGROUPS                        = 0x3b\n\tSO_PEERNAME                          = 0x1c\n\tSO_PEERSEC                           = 0x1f\n\tSO_PRIORITY                          = 0xc\n\tSO_PROTOCOL                          = 0x26\n\tSO_RCVBUF                            = 0x8\n\tSO_RCVBUFFORCE                       = 0x21\n\tSO_RCVLOWAT                          = 0x10\n\tSO_RCVTIMEO                          = 0x12\n\tSO_RCVTIMEO_NEW                      = 0x42\n\tSO_RCVTIMEO_OLD                      = 0x12\n\tSO_REUSEADDR                         = 0x2\n\tSO_REUSEPORT                         = 0xf\n\tSO_RXQ_OVFL                          = 0x28\n\tSO_SECURITY_AUTHENTICATION           = 0x16\n\tSO_SECURITY_ENCRYPTION_NETWORK       = 0x18\n\tSO_SECURITY_ENCRYPTION_TRANSPORT     = 0x17\n\tSO_SELECT_ERR_QUEUE                  = 0x2d\n\tSO_SNDBUF                            = 0x7\n\tSO_SNDBUFFORCE                       = 0x20\n\tSO_SNDLOWAT                          = 0x11\n\tSO_SNDTIMEO                          = 0x13\n\tSO_SNDTIMEO_NEW                      = 0x43\n\tSO_SNDTIMEO_OLD                      = 0x13\n\tSO_TIMESTAMP                         = 0x1d\n\tSO_TIMESTAMPING                      = 0x25\n\tSO_TIMESTAMPING_NEW                  = 0x41\n\tSO_TIMESTAMPING_OLD                  = 0x25\n\tSO_TIMESTAMPNS                       = 0x23\n\tSO_TIMESTAMPNS_NEW                   = 0x40\n\tSO_TIMESTAMPNS_OLD                   = 0x23\n\tSO_TIMESTAMP_NEW                     = 0x3f\n\tSO_TIMESTAMP_OLD                     = 0x1d\n\tSO_TXTIME                            = 0x3d\n\tSO_TYPE                              = 0x3\n\tSO_VM_SOCKETS_BUFFER_MAX_SIZE        = 0x2\n\tSO_VM_SOCKETS_BUFFER_MIN_SIZE        = 0x1\n\tSO_VM_SOCKETS_BUFFER_SIZE            = 0x0\n\tSO_VM_SOCKETS_CONNECT_TIMEOUT        = 0x6\n\tSO_VM_SOCKETS_NONBLOCK_TXRX          = 0x7\n\tSO_VM_SOCKETS_PEER_HOST_VM_ID        = 0x3\n\tSO_VM_SOCKETS_TRUSTED                = 0x5\n\tSO_WIFI_STATUS                       = 0x29\n\tSO_ZEROCOPY                          = 0x3c\n\tSPLICE_F_GIFT                        = 0x8\n\tSPLICE_F_MORE                        = 0x4\n\tSPLICE_F_MOVE                        = 0x1\n\tSPLICE_F_NONBLOCK                    = 0x2\n\tSQUASHFS_MAGIC                       = 0x73717368\n\tSTACK_END_MAGIC                      = 0x57ac6e9d\n\tSTATX_ALL                            = 0xfff\n\tSTATX_ATIME                          = 0x20\n\tSTATX_ATTR_APPEND                    = 0x20\n\tSTATX_ATTR_AUTOMOUNT                 = 0x1000\n\tSTATX_ATTR_COMPRESSED                = 0x4\n\tSTATX_ATTR_ENCRYPTED                 = 0x800\n\tSTATX_ATTR_IMMUTABLE                 = 0x10\n\tSTATX_ATTR_NODUMP                    = 0x40\n\tSTATX_BASIC_STATS                    = 0x7ff\n\tSTATX_BLOCKS                         = 0x400\n\tSTATX_BTIME                          = 0x800\n\tSTATX_CTIME                          = 0x80\n\tSTATX_GID                            = 0x10\n\tSTATX_INO                            = 0x100\n\tSTATX_MODE                           = 0x2\n\tSTATX_MTIME                          = 0x40\n\tSTATX_NLINK                          = 0x4\n\tSTATX_SIZE                           = 0x200\n\tSTATX_TYPE                           = 0x1\n\tSTATX_UID                            = 0x8\n\tSTATX__RESERVED                      = 0x80000000\n\tSYNC_FILE_RANGE_WAIT_AFTER           = 0x4\n\tSYNC_FILE_RANGE_WAIT_BEFORE          = 0x1\n\tSYNC_FILE_RANGE_WRITE                = 0x2\n\tSYSFS_MAGIC                          = 0x62656572\n\tS_BLKSIZE                            = 0x200\n\tS_IEXEC                              = 0x40\n\tS_IFBLK                              = 0x6000\n\tS_IFCHR                              = 0x2000\n\tS_IFDIR                              = 0x4000\n\tS_IFIFO                              = 0x1000\n\tS_IFLNK                              = 0xa000\n\tS_IFMT                               = 0xf000\n\tS_IFREG                              = 0x8000\n\tS_IFSOCK                             = 0xc000\n\tS_IREAD                              = 0x100\n\tS_IRGRP                              = 0x20\n\tS_IROTH                              = 0x4\n\tS_IRUSR                              = 0x100\n\tS_IRWXG                              = 0x38\n\tS_IRWXO                              = 0x7\n\tS_IRWXU                              = 0x1c0\n\tS_ISGID                              = 0x400\n\tS_ISUID                              = 0x800\n\tS_ISVTX                              = 0x200\n\tS_IWGRP                              = 0x10\n\tS_IWOTH                              = 0x2\n\tS_IWRITE                             = 0x80\n\tS_IWUSR                              = 0x80\n\tS_IXGRP                              = 0x8\n\tS_IXOTH                              = 0x1\n\tS_IXUSR                              = 0x40\n\tTAB0                                 = 0x0\n\tTAB1                                 = 0x400\n\tTAB2                                 = 0x800\n\tTAB3                                 = 0xc00\n\tTABDLY                               = 0xc00\n\tTASKSTATS_CMD_ATTR_MAX               = 0x4\n\tTASKSTATS_CMD_MAX                    = 0x2\n\tTASKSTATS_GENL_NAME                  = \"TASKSTATS\"\n\tTASKSTATS_GENL_VERSION               = 0x1\n\tTASKSTATS_TYPE_MAX                   = 0x6\n\tTASKSTATS_VERSION                    = 0x9\n\tTCFLSH                               = 0x2000741f\n\tTCGETA                               = 0x40147417\n\tTCGETS                               = 0x402c7413\n\tTCIFLUSH                             = 0x0\n\tTCIOFF                               = 0x2\n\tTCIOFLUSH                            = 0x2\n\tTCION                                = 0x3\n\tTCOFLUSH                             = 0x1\n\tTCOOFF                               = 0x0\n\tTCOON                                = 0x1\n\tTCP_BPF_IW                           = 0x3e9\n\tTCP_BPF_SNDCWND_CLAMP                = 0x3ea\n\tTCP_CC_INFO                          = 0x1a\n\tTCP_CM_INQ                           = 0x24\n\tTCP_CONGESTION                       = 0xd\n\tTCP_COOKIE_IN_ALWAYS                 = 0x1\n\tTCP_COOKIE_MAX                       = 0x10\n\tTCP_COOKIE_MIN                       = 0x8\n\tTCP_COOKIE_OUT_NEVER                 = 0x2\n\tTCP_COOKIE_PAIR_SIZE                 = 0x20\n\tTCP_COOKIE_TRANSACTIONS              = 0xf\n\tTCP_CORK                             = 0x3\n\tTCP_DEFER_ACCEPT                     = 0x9\n\tTCP_FASTOPEN                         = 0x17\n\tTCP_FASTOPEN_CONNECT                 = 0x1e\n\tTCP_FASTOPEN_KEY                     = 0x21\n\tTCP_FASTOPEN_NO_COOKIE               = 0x22\n\tTCP_INFO                             = 0xb\n\tTCP_INQ                              = 0x24\n\tTCP_KEEPCNT                          = 0x6\n\tTCP_KEEPIDLE                         = 0x4\n\tTCP_KEEPINTVL                        = 0x5\n\tTCP_LINGER2                          = 0x8\n\tTCP_MAXSEG                           = 0x2\n\tTCP_MAXWIN                           = 0xffff\n\tTCP_MAX_WINSHIFT                     = 0xe\n\tTCP_MD5SIG                           = 0xe\n\tTCP_MD5SIG_EXT                       = 0x20\n\tTCP_MD5SIG_FLAG_PREFIX               = 0x1\n\tTCP_MD5SIG_MAXKEYLEN                 = 0x50\n\tTCP_MSS                              = 0x200\n\tTCP_MSS_DEFAULT                      = 0x218\n\tTCP_MSS_DESIRED                      = 0x4c4\n\tTCP_NODELAY                          = 0x1\n\tTCP_NOTSENT_LOWAT                    = 0x19\n\tTCP_QUEUE_SEQ                        = 0x15\n\tTCP_QUICKACK                         = 0xc\n\tTCP_REPAIR                           = 0x13\n\tTCP_REPAIR_OFF                       = 0x0\n\tTCP_REPAIR_OFF_NO_WP                 = -0x1\n\tTCP_REPAIR_ON                        = 0x1\n\tTCP_REPAIR_OPTIONS                   = 0x16\n\tTCP_REPAIR_QUEUE                     = 0x14\n\tTCP_REPAIR_WINDOW                    = 0x1d\n\tTCP_SAVED_SYN                        = 0x1c\n\tTCP_SAVE_SYN                         = 0x1b\n\tTCP_SYNCNT                           = 0x7\n\tTCP_S_DATA_IN                        = 0x4\n\tTCP_S_DATA_OUT                       = 0x8\n\tTCP_THIN_DUPACK                      = 0x11\n\tTCP_THIN_LINEAR_TIMEOUTS             = 0x10\n\tTCP_TIMESTAMP                        = 0x18\n\tTCP_ULP                              = 0x1f\n\tTCP_USER_TIMEOUT                     = 0x12\n\tTCP_WINDOW_CLAMP                     = 0xa\n\tTCP_ZEROCOPY_RECEIVE                 = 0x23\n\tTCSAFLUSH                            = 0x2\n\tTCSBRK                               = 0x2000741d\n\tTCSBRKP                              = 0x5425\n\tTCSETA                               = 0x80147418\n\tTCSETAF                              = 0x8014741c\n\tTCSETAW                              = 0x80147419\n\tTCSETS                               = 0x802c7414\n\tTCSETSF                              = 0x802c7416\n\tTCSETSW                              = 0x802c7415\n\tTCXONC                               = 0x2000741e\n\tTIMER_ABSTIME                        = 0x1\n\tTIOCCBRK                             = 0x5428\n\tTIOCCONS                             = 0x541d\n\tTIOCEXCL                             = 0x540c\n\tTIOCGDEV                             = 0x40045432\n\tTIOCGETC                             = 0x40067412\n\tTIOCGETD                             = 0x5424\n\tTIOCGETP                             = 0x40067408\n\tTIOCGEXCL                            = 0x40045440\n\tTIOCGICOUNT                          = 0x545d\n\tTIOCGISO7816                         = 0x40285442\n\tTIOCGLCKTRMIOS                       = 0x5456\n\tTIOCGLTC                             = 0x40067474\n\tTIOCGPGRP                            = 0x40047477\n\tTIOCGPKT                             = 0x40045438\n\tTIOCGPTLCK                           = 0x40045439\n\tTIOCGPTN                             = 0x40045430\n\tTIOCGPTPEER                          = 0x20005441\n\tTIOCGRS485                           = 0x542e\n\tTIOCGSERIAL                          = 0x541e\n\tTIOCGSID                             = 0x5429\n\tTIOCGSOFTCAR                         = 0x5419\n\tTIOCGWINSZ                           = 0x40087468\n\tTIOCINQ                              = 0x4004667f\n\tTIOCLINUX                            = 0x541c\n\tTIOCMBIC                             = 0x5417\n\tTIOCMBIS                             = 0x5416\n\tTIOCMGET                             = 0x5415\n\tTIOCMIWAIT                           = 0x545c\n\tTIOCMSET                             = 0x5418\n\tTIOCM_CAR                            = 0x40\n\tTIOCM_CD                             = 0x40\n\tTIOCM_CTS                            = 0x20\n\tTIOCM_DSR                            = 0x100\n\tTIOCM_DTR                            = 0x2\n\tTIOCM_LE                             = 0x1\n\tTIOCM_LOOP                           = 0x8000\n\tTIOCM_OUT1                           = 0x2000\n\tTIOCM_OUT2                           = 0x4000\n\tTIOCM_RI                             = 0x80\n\tTIOCM_RNG                            = 0x80\n\tTIOCM_RTS                            = 0x4\n\tTIOCM_SR                             = 0x10\n\tTIOCM_ST                             = 0x8\n\tTIOCNOTTY                            = 0x5422\n\tTIOCNXCL                             = 0x540d\n\tTIOCOUTQ                             = 0x40047473\n\tTIOCPKT                              = 0x5420\n\tTIOCPKT_DATA                         = 0x0\n\tTIOCPKT_DOSTOP                       = 0x20\n\tTIOCPKT_FLUSHREAD                    = 0x1\n\tTIOCPKT_FLUSHWRITE                   = 0x2\n\tTIOCPKT_IOCTL                        = 0x40\n\tTIOCPKT_NOSTOP                       = 0x10\n\tTIOCPKT_START                        = 0x8\n\tTIOCPKT_STOP                         = 0x4\n\tTIOCSBRK                             = 0x5427\n\tTIOCSCTTY                            = 0x540e\n\tTIOCSERCONFIG                        = 0x5453\n\tTIOCSERGETLSR                        = 0x5459\n\tTIOCSERGETMULTI                      = 0x545a\n\tTIOCSERGSTRUCT                       = 0x5458\n\tTIOCSERGWILD                         = 0x5454\n\tTIOCSERSETMULTI                      = 0x545b\n\tTIOCSERSWILD                         = 0x5455\n\tTIOCSER_TEMT                         = 0x1\n\tTIOCSETC                             = 0x80067411\n\tTIOCSETD                             = 0x5423\n\tTIOCSETN                             = 0x8006740a\n\tTIOCSETP                             = 0x80067409\n\tTIOCSIG                              = 0x80045436\n\tTIOCSISO7816                         = 0xc0285443\n\tTIOCSLCKTRMIOS                       = 0x5457\n\tTIOCSLTC                             = 0x80067475\n\tTIOCSPGRP                            = 0x80047476\n\tTIOCSPTLCK                           = 0x80045431\n\tTIOCSRS485                           = 0x542f\n\tTIOCSSERIAL                          = 0x541f\n\tTIOCSSOFTCAR                         = 0x541a\n\tTIOCSTART                            = 0x2000746e\n\tTIOCSTI                              = 0x5412\n\tTIOCSTOP                             = 0x2000746f\n\tTIOCSWINSZ                           = 0x80087467\n\tTIOCVHANGUP                          = 0x5437\n\tTMPFS_MAGIC                          = 0x1021994\n\tTOSTOP                               = 0x400000\n\tTPACKET_ALIGNMENT                    = 0x10\n\tTPACKET_HDRLEN                       = 0x34\n\tTP_STATUS_AVAILABLE                  = 0x0\n\tTP_STATUS_BLK_TMO                    = 0x20\n\tTP_STATUS_COPY                       = 0x2\n\tTP_STATUS_CSUMNOTREADY               = 0x8\n\tTP_STATUS_CSUM_VALID                 = 0x80\n\tTP_STATUS_KERNEL                     = 0x0\n\tTP_STATUS_LOSING                     = 0x4\n\tTP_STATUS_SENDING                    = 0x2\n\tTP_STATUS_SEND_REQUEST               = 0x1\n\tTP_STATUS_TS_RAW_HARDWARE            = -0x80000000\n\tTP_STATUS_TS_SOFTWARE                = 0x20000000\n\tTP_STATUS_TS_SYS_HARDWARE            = 0x40000000\n\tTP_STATUS_USER                       = 0x1\n\tTP_STATUS_VLAN_TPID_VALID            = 0x40\n\tTP_STATUS_VLAN_VALID                 = 0x10\n\tTP_STATUS_WRONG_FORMAT               = 0x4\n\tTRACEFS_MAGIC                        = 0x74726163\n\tTS_COMM_LEN                          = 0x20\n\tTUNATTACHFILTER                      = 0x801054d5\n\tTUNDETACHFILTER                      = 0x801054d6\n\tTUNGETFEATURES                       = 0x400454cf\n\tTUNGETFILTER                         = 0x401054db\n\tTUNGETIFF                            = 0x400454d2\n\tTUNGETSNDBUF                         = 0x400454d3\n\tTUNGETVNETBE                         = 0x400454df\n\tTUNGETVNETHDRSZ                      = 0x400454d7\n\tTUNGETVNETLE                         = 0x400454dd\n\tTUNSETCARRIER                        = 0x800454e2\n\tTUNSETDEBUG                          = 0x800454c9\n\tTUNSETFILTEREBPF                     = 0x400454e1\n\tTUNSETGROUP                          = 0x800454ce\n\tTUNSETIFF                            = 0x800454ca\n\tTUNSETIFINDEX                        = 0x800454da\n\tTUNSETLINK                           = 0x800454cd\n\tTUNSETNOCSUM                         = 0x800454c8\n\tTUNSETOFFLOAD                        = 0x800454d0\n\tTUNSETOWNER                          = 0x800454cc\n\tTUNSETPERSIST                        = 0x800454cb\n\tTUNSETQUEUE                          = 0x800454d9\n\tTUNSETSNDBUF                         = 0x800454d4\n\tTUNSETSTEERINGEBPF                   = 0x400454e0\n\tTUNSETTXFILTER                       = 0x800454d1\n\tTUNSETVNETBE                         = 0x800454de\n\tTUNSETVNETHDRSZ                      = 0x800454d8\n\tTUNSETVNETLE                         = 0x800454dc\n\tUBI_IOCATT                           = 0x80186f40\n\tUBI_IOCDET                           = 0x80046f41\n\tUBI_IOCEBCH                          = 0x80044f02\n\tUBI_IOCEBER                          = 0x80044f01\n\tUBI_IOCEBISMAP                       = 0x40044f05\n\tUBI_IOCEBMAP                         = 0x80084f03\n\tUBI_IOCEBUNMAP                       = 0x80044f04\n\tUBI_IOCMKVOL                         = 0x80986f00\n\tUBI_IOCRMVOL                         = 0x80046f01\n\tUBI_IOCRNVOL                         = 0x91106f03\n\tUBI_IOCRPEB                          = 0x80046f04\n\tUBI_IOCRSVOL                         = 0x800c6f02\n\tUBI_IOCSETVOLPROP                    = 0x80104f06\n\tUBI_IOCSPEB                          = 0x80046f05\n\tUBI_IOCVOLCRBLK                      = 0x80804f07\n\tUBI_IOCVOLRMBLK                      = 0x20004f08\n\tUBI_IOCVOLUP                         = 0x80084f00\n\tUDF_SUPER_MAGIC                      = 0x15013346\n\tUMOUNT_NOFOLLOW                      = 0x8\n\tUSBDEVICE_SUPER_MAGIC                = 0x9fa2\n\tUTIME_NOW                            = 0x3fffffff\n\tUTIME_OMIT                           = 0x3ffffffe\n\tV9FS_MAGIC                           = 0x1021997\n\tVDISCARD                             = 0x10\n\tVEOF                                 = 0x4\n\tVEOL                                 = 0x6\n\tVEOL2                                = 0x8\n\tVERASE                               = 0x2\n\tVINTR                                = 0x0\n\tVKILL                                = 0x3\n\tVLNEXT                               = 0xf\n\tVMADDR_CID_ANY                       = 0xffffffff\n\tVMADDR_CID_HOST                      = 0x2\n\tVMADDR_CID_HYPERVISOR                = 0x0\n\tVMADDR_CID_RESERVED                  = 0x1\n\tVMADDR_PORT_ANY                      = 0xffffffff\n\tVMIN                                 = 0x5\n\tVM_SOCKETS_INVALID_VERSION           = 0xffffffff\n\tVQUIT                                = 0x1\n\tVREPRINT                             = 0xb\n\tVSTART                               = 0xd\n\tVSTOP                                = 0xe\n\tVSUSP                                = 0xc\n\tVSWTC                                = 0x9\n\tVT0                                  = 0x0\n\tVT1                                  = 0x10000\n\tVTDLY                                = 0x10000\n\tVTIME                                = 0x7\n\tVWERASE                              = 0xa\n\tWALL                                 = 0x40000000\n\tWCLONE                               = 0x80000000\n\tWCONTINUED                           = 0x8\n\tWDIOC_GETBOOTSTATUS                  = 0x40045702\n\tWDIOC_GETPRETIMEOUT                  = 0x40045709\n\tWDIOC_GETSTATUS                      = 0x40045701\n\tWDIOC_GETSUPPORT                     = 0x40285700\n\tWDIOC_GETTEMP                        = 0x40045703\n\tWDIOC_GETTIMELEFT                    = 0x4004570a\n\tWDIOC_GETTIMEOUT                     = 0x40045707\n\tWDIOC_KEEPALIVE                      = 0x40045705\n\tWDIOC_SETOPTIONS                     = 0x40045704\n\tWDIOC_SETPRETIMEOUT                  = 0xc0045708\n\tWDIOC_SETTIMEOUT                     = 0xc0045706\n\tWEXITED                              = 0x4\n\tWIN_ACKMEDIACHANGE                   = 0xdb\n\tWIN_CHECKPOWERMODE1                  = 0xe5\n\tWIN_CHECKPOWERMODE2                  = 0x98\n\tWIN_DEVICE_RESET                     = 0x8\n\tWIN_DIAGNOSE                         = 0x90\n\tWIN_DOORLOCK                         = 0xde\n\tWIN_DOORUNLOCK                       = 0xdf\n\tWIN_DOWNLOAD_MICROCODE               = 0x92\n\tWIN_FLUSH_CACHE                      = 0xe7\n\tWIN_FLUSH_CACHE_EXT                  = 0xea\n\tWIN_FORMAT                           = 0x50\n\tWIN_GETMEDIASTATUS                   = 0xda\n\tWIN_IDENTIFY                         = 0xec\n\tWIN_IDENTIFY_DMA                     = 0xee\n\tWIN_IDLEIMMEDIATE                    = 0xe1\n\tWIN_INIT                             = 0x60\n\tWIN_MEDIAEJECT                       = 0xed\n\tWIN_MULTREAD                         = 0xc4\n\tWIN_MULTREAD_EXT                     = 0x29\n\tWIN_MULTWRITE                        = 0xc5\n\tWIN_MULTWRITE_EXT                    = 0x39\n\tWIN_NOP                              = 0x0\n\tWIN_PACKETCMD                        = 0xa0\n\tWIN_PIDENTIFY                        = 0xa1\n\tWIN_POSTBOOT                         = 0xdc\n\tWIN_PREBOOT                          = 0xdd\n\tWIN_QUEUED_SERVICE                   = 0xa2\n\tWIN_READ                             = 0x20\n\tWIN_READDMA                          = 0xc8\n\tWIN_READDMA_EXT                      = 0x25\n\tWIN_READDMA_ONCE                     = 0xc9\n\tWIN_READDMA_QUEUED                   = 0xc7\n\tWIN_READDMA_QUEUED_EXT               = 0x26\n\tWIN_READ_BUFFER                      = 0xe4\n\tWIN_READ_EXT                         = 0x24\n\tWIN_READ_LONG                        = 0x22\n\tWIN_READ_LONG_ONCE                   = 0x23\n\tWIN_READ_NATIVE_MAX                  = 0xf8\n\tWIN_READ_NATIVE_MAX_EXT              = 0x27\n\tWIN_READ_ONCE                        = 0x21\n\tWIN_RECAL                            = 0x10\n\tWIN_RESTORE                          = 0x10\n\tWIN_SECURITY_DISABLE                 = 0xf6\n\tWIN_SECURITY_ERASE_PREPARE           = 0xf3\n\tWIN_SECURITY_ERASE_UNIT              = 0xf4\n\tWIN_SECURITY_FREEZE_LOCK             = 0xf5\n\tWIN_SECURITY_SET_PASS                = 0xf1\n\tWIN_SECURITY_UNLOCK                  = 0xf2\n\tWIN_SEEK                             = 0x70\n\tWIN_SETFEATURES                      = 0xef\n\tWIN_SETIDLE1                         = 0xe3\n\tWIN_SETIDLE2                         = 0x97\n\tWIN_SETMULT                          = 0xc6\n\tWIN_SET_MAX                          = 0xf9\n\tWIN_SET_MAX_EXT                      = 0x37\n\tWIN_SLEEPNOW1                        = 0xe6\n\tWIN_SLEEPNOW2                        = 0x99\n\tWIN_SMART                            = 0xb0\n\tWIN_SPECIFY                          = 0x91\n\tWIN_SRST                             = 0x8\n\tWIN_STANDBY                          = 0xe2\n\tWIN_STANDBY2                         = 0x96\n\tWIN_STANDBYNOW1                      = 0xe0\n\tWIN_STANDBYNOW2                      = 0x94\n\tWIN_VERIFY                           = 0x40\n\tWIN_VERIFY_EXT                       = 0x42\n\tWIN_VERIFY_ONCE                      = 0x41\n\tWIN_WRITE                            = 0x30\n\tWIN_WRITEDMA                         = 0xca\n\tWIN_WRITEDMA_EXT                     = 0x35\n\tWIN_WRITEDMA_ONCE                    = 0xcb\n\tWIN_WRITEDMA_QUEUED                  = 0xcc\n\tWIN_WRITEDMA_QUEUED_EXT              = 0x36\n\tWIN_WRITE_BUFFER                     = 0xe8\n\tWIN_WRITE_EXT                        = 0x34\n\tWIN_WRITE_LONG                       = 0x32\n\tWIN_WRITE_LONG_ONCE                  = 0x33\n\tWIN_WRITE_ONCE                       = 0x31\n\tWIN_WRITE_SAME                       = 0xe9\n\tWIN_WRITE_VERIFY                     = 0x3c\n\tWNOHANG                              = 0x1\n\tWNOTHREAD                            = 0x20000000\n\tWNOWAIT                              = 0x1000000\n\tWORDSIZE                             = 0x40\n\tWSTOPPED                             = 0x2\n\tWUNTRACED                            = 0x2\n\tXATTR_CREATE                         = 0x1\n\tXATTR_REPLACE                        = 0x2\n\tXCASE                                = 0x4000\n\tXDP_COPY                             = 0x2\n\tXDP_FLAGS_DRV_MODE                   = 0x4\n\tXDP_FLAGS_HW_MODE                    = 0x8\n\tXDP_FLAGS_MASK                       = 0xf\n\tXDP_FLAGS_MODES                      = 0xe\n\tXDP_FLAGS_SKB_MODE                   = 0x2\n\tXDP_FLAGS_UPDATE_IF_NOEXIST          = 0x1\n\tXDP_MMAP_OFFSETS                     = 0x1\n\tXDP_PACKET_HEADROOM                  = 0x100\n\tXDP_PGOFF_RX_RING                    = 0x0\n\tXDP_PGOFF_TX_RING                    = 0x80000000\n\tXDP_RX_RING                          = 0x2\n\tXDP_SHARED_UMEM                      = 0x1\n\tXDP_STATISTICS                       = 0x7\n\tXDP_TX_RING                          = 0x3\n\tXDP_UMEM_COMPLETION_RING             = 0x6\n\tXDP_UMEM_FILL_RING                   = 0x5\n\tXDP_UMEM_PGOFF_COMPLETION_RING       = 0x180000000\n\tXDP_UMEM_PGOFF_FILL_RING             = 0x100000000\n\tXDP_UMEM_REG                         = 0x4\n\tXDP_ZEROCOPY                         = 0x4\n\tXENFS_SUPER_MAGIC                    = 0xabba1974\n\tXFS_SUPER_MAGIC                      = 0x58465342\n\tXTABS                                = 0xc00\n\tZSMALLOC_MAGIC                       = 0x58295829\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x62)\n\tEADDRNOTAVAIL   = syscall.Errno(0x63)\n\tEADV            = syscall.Errno(0x44)\n\tEAFNOSUPPORT    = syscall.Errno(0x61)\n\tEAGAIN          = syscall.Errno(0xb)\n\tEALREADY        = syscall.Errno(0x72)\n\tEBADE           = syscall.Errno(0x34)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADFD          = syscall.Errno(0x4d)\n\tEBADMSG         = syscall.Errno(0x4a)\n\tEBADR           = syscall.Errno(0x35)\n\tEBADRQC         = syscall.Errno(0x38)\n\tEBADSLT         = syscall.Errno(0x39)\n\tEBFONT          = syscall.Errno(0x3b)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x7d)\n\tECHILD          = syscall.Errno(0xa)\n\tECHRNG          = syscall.Errno(0x2c)\n\tECOMM           = syscall.Errno(0x46)\n\tECONNABORTED    = syscall.Errno(0x67)\n\tECONNREFUSED    = syscall.Errno(0x6f)\n\tECONNRESET      = syscall.Errno(0x68)\n\tEDEADLK         = syscall.Errno(0x23)\n\tEDEADLOCK       = syscall.Errno(0x3a)\n\tEDESTADDRREQ    = syscall.Errno(0x59)\n\tEDOM            = syscall.Errno(0x21)\n\tEDOTDOT         = syscall.Errno(0x49)\n\tEDQUOT          = syscall.Errno(0x7a)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEHOSTDOWN       = syscall.Errno(0x70)\n\tEHOSTUNREACH    = syscall.Errno(0x71)\n\tEHWPOISON       = syscall.Errno(0x85)\n\tEIDRM           = syscall.Errno(0x2b)\n\tEILSEQ          = syscall.Errno(0x54)\n\tEINPROGRESS     = syscall.Errno(0x73)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEISCONN         = syscall.Errno(0x6a)\n\tEISDIR          = syscall.Errno(0x15)\n\tEISNAM          = syscall.Errno(0x78)\n\tEKEYEXPIRED     = syscall.Errno(0x7f)\n\tEKEYREJECTED    = syscall.Errno(0x81)\n\tEKEYREVOKED     = syscall.Errno(0x80)\n\tEL2HLT          = syscall.Errno(0x33)\n\tEL2NSYNC        = syscall.Errno(0x2d)\n\tEL3HLT          = syscall.Errno(0x2e)\n\tEL3RST          = syscall.Errno(0x2f)\n\tELIBACC         = syscall.Errno(0x4f)\n\tELIBBAD         = syscall.Errno(0x50)\n\tELIBEXEC        = syscall.Errno(0x53)\n\tELIBMAX         = syscall.Errno(0x52)\n\tELIBSCN         = syscall.Errno(0x51)\n\tELNRNG          = syscall.Errno(0x30)\n\tELOOP           = syscall.Errno(0x28)\n\tEMEDIUMTYPE     = syscall.Errno(0x7c)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x5a)\n\tEMULTIHOP       = syscall.Errno(0x48)\n\tENAMETOOLONG    = syscall.Errno(0x24)\n\tENAVAIL         = syscall.Errno(0x77)\n\tENETDOWN        = syscall.Errno(0x64)\n\tENETRESET       = syscall.Errno(0x66)\n\tENETUNREACH     = syscall.Errno(0x65)\n\tENFILE          = syscall.Errno(0x17)\n\tENOANO          = syscall.Errno(0x37)\n\tENOBUFS         = syscall.Errno(0x69)\n\tENOCSI          = syscall.Errno(0x32)\n\tENODATA         = syscall.Errno(0x3d)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOKEY          = syscall.Errno(0x7e)\n\tENOLCK          = syscall.Errno(0x25)\n\tENOLINK         = syscall.Errno(0x43)\n\tENOMEDIUM       = syscall.Errno(0x7b)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x2a)\n\tENONET          = syscall.Errno(0x40)\n\tENOPKG          = syscall.Errno(0x41)\n\tENOPROTOOPT     = syscall.Errno(0x5c)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSR           = syscall.Errno(0x3f)\n\tENOSTR          = syscall.Errno(0x3c)\n\tENOSYS          = syscall.Errno(0x26)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x6b)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x27)\n\tENOTNAM         = syscall.Errno(0x76)\n\tENOTRECOVERABLE = syscall.Errno(0x83)\n\tENOTSOCK        = syscall.Errno(0x58)\n\tENOTSUP         = syscall.Errno(0x5f)\n\tENOTTY          = syscall.Errno(0x19)\n\tENOTUNIQ        = syscall.Errno(0x4c)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x5f)\n\tEOVERFLOW       = syscall.Errno(0x4b)\n\tEOWNERDEAD      = syscall.Errno(0x82)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x60)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROTO          = syscall.Errno(0x47)\n\tEPROTONOSUPPORT = syscall.Errno(0x5d)\n\tEPROTOTYPE      = syscall.Errno(0x5b)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMCHG         = syscall.Errno(0x4e)\n\tEREMOTE         = syscall.Errno(0x42)\n\tEREMOTEIO       = syscall.Errno(0x79)\n\tERESTART        = syscall.Errno(0x55)\n\tERFKILL         = syscall.Errno(0x84)\n\tEROFS           = syscall.Errno(0x1e)\n\tESHUTDOWN       = syscall.Errno(0x6c)\n\tESOCKTNOSUPPORT = syscall.Errno(0x5e)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESRMNT          = syscall.Errno(0x45)\n\tESTALE          = syscall.Errno(0x74)\n\tESTRPIPE        = syscall.Errno(0x56)\n\tETIME           = syscall.Errno(0x3e)\n\tETIMEDOUT       = syscall.Errno(0x6e)\n\tETOOMANYREFS    = syscall.Errno(0x6d)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUCLEAN         = syscall.Errno(0x75)\n\tEUNATCH         = syscall.Errno(0x31)\n\tEUSERS          = syscall.Errno(0x57)\n\tEWOULDBLOCK     = syscall.Errno(0xb)\n\tEXDEV           = syscall.Errno(0x12)\n\tEXFULL          = syscall.Errno(0x36)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0x7)\n\tSIGCHLD   = syscall.Signal(0x11)\n\tSIGCLD    = syscall.Signal(0x11)\n\tSIGCONT   = syscall.Signal(0x12)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x1d)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPOLL   = syscall.Signal(0x1d)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGPWR    = syscall.Signal(0x1e)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTKFLT = syscall.Signal(0x10)\n\tSIGSTOP   = syscall.Signal(0x13)\n\tSIGSYS    = syscall.Signal(0x1f)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x14)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x17)\n\tSIGUSR1   = syscall.Signal(0xa)\n\tSIGUSR2   = syscall.Signal(0xc)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"no such device or address\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device or resource busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"invalid cross-device link\"},\n\t{19, \"ENODEV\", \"no such device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"numerical result out of range\"},\n\t{35, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{36, \"ENAMETOOLONG\", \"file name too long\"},\n\t{37, \"ENOLCK\", \"no locks available\"},\n\t{38, \"ENOSYS\", \"function not implemented\"},\n\t{39, \"ENOTEMPTY\", \"directory not empty\"},\n\t{40, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{42, \"ENOMSG\", \"no message of desired type\"},\n\t{43, \"EIDRM\", \"identifier removed\"},\n\t{44, \"ECHRNG\", \"channel number out of range\"},\n\t{45, \"EL2NSYNC\", \"level 2 not synchronized\"},\n\t{46, \"EL3HLT\", \"level 3 halted\"},\n\t{47, \"EL3RST\", \"level 3 reset\"},\n\t{48, \"ELNRNG\", \"link number out of range\"},\n\t{49, \"EUNATCH\", \"protocol driver not attached\"},\n\t{50, \"ENOCSI\", \"no CSI structure available\"},\n\t{51, \"EL2HLT\", \"level 2 halted\"},\n\t{52, \"EBADE\", \"invalid exchange\"},\n\t{53, \"EBADR\", \"invalid request descriptor\"},\n\t{54, \"EXFULL\", \"exchange full\"},\n\t{55, \"ENOANO\", \"no anode\"},\n\t{56, \"EBADRQC\", \"invalid request code\"},\n\t{57, \"EBADSLT\", \"invalid slot\"},\n\t{58, \"EDEADLOCK\", \"file locking deadlock error\"},\n\t{59, \"EBFONT\", \"bad font file format\"},\n\t{60, \"ENOSTR\", \"device not a stream\"},\n\t{61, \"ENODATA\", \"no data available\"},\n\t{62, \"ETIME\", \"timer expired\"},\n\t{63, \"ENOSR\", \"out of streams resources\"},\n\t{64, \"ENONET\", \"machine is not on the network\"},\n\t{65, \"ENOPKG\", \"package not installed\"},\n\t{66, \"EREMOTE\", \"object is remote\"},\n\t{67, \"ENOLINK\", \"link has been severed\"},\n\t{68, \"EADV\", \"advertise error\"},\n\t{69, \"ESRMNT\", \"srmount error\"},\n\t{70, \"ECOMM\", \"communication error on send\"},\n\t{71, \"EPROTO\", \"protocol error\"},\n\t{72, \"EMULTIHOP\", \"multihop attempted\"},\n\t{73, \"EDOTDOT\", \"RFS specific error\"},\n\t{74, \"EBADMSG\", \"bad message\"},\n\t{75, \"EOVERFLOW\", \"value too large for defined data type\"},\n\t{76, \"ENOTUNIQ\", \"name not unique on network\"},\n\t{77, \"EBADFD\", \"file descriptor in bad state\"},\n\t{78, \"EREMCHG\", \"remote address changed\"},\n\t{79, \"ELIBACC\", \"can not access a needed shared library\"},\n\t{80, \"ELIBBAD\", \"accessing a corrupted shared library\"},\n\t{81, \"ELIBSCN\", \".lib section in a.out corrupted\"},\n\t{82, \"ELIBMAX\", \"attempting to link in too many shared libraries\"},\n\t{83, \"ELIBEXEC\", \"cannot exec a shared library directly\"},\n\t{84, \"EILSEQ\", \"invalid or incomplete multibyte or wide character\"},\n\t{85, \"ERESTART\", \"interrupted system call should be restarted\"},\n\t{86, \"ESTRPIPE\", \"streams pipe error\"},\n\t{87, \"EUSERS\", \"too many users\"},\n\t{88, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{89, \"EDESTADDRREQ\", \"destination address required\"},\n\t{90, \"EMSGSIZE\", \"message too long\"},\n\t{91, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{92, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{93, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{94, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{95, \"ENOTSUP\", \"operation not supported\"},\n\t{96, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{97, \"EAFNOSUPPORT\", \"address family not supported by protocol\"},\n\t{98, \"EADDRINUSE\", \"address already in use\"},\n\t{99, \"EADDRNOTAVAIL\", \"cannot assign requested address\"},\n\t{100, \"ENETDOWN\", \"network is down\"},\n\t{101, \"ENETUNREACH\", \"network is unreachable\"},\n\t{102, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{103, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{104, \"ECONNRESET\", \"connection reset by peer\"},\n\t{105, \"ENOBUFS\", \"no buffer space available\"},\n\t{106, \"EISCONN\", \"transport endpoint is already connected\"},\n\t{107, \"ENOTCONN\", \"transport endpoint is not connected\"},\n\t{108, \"ESHUTDOWN\", \"cannot send after transport endpoint shutdown\"},\n\t{109, \"ETOOMANYREFS\", \"too many references: cannot splice\"},\n\t{110, \"ETIMEDOUT\", \"connection timed out\"},\n\t{111, \"ECONNREFUSED\", \"connection refused\"},\n\t{112, \"EHOSTDOWN\", \"host is down\"},\n\t{113, \"EHOSTUNREACH\", \"no route to host\"},\n\t{114, \"EALREADY\", \"operation already in progress\"},\n\t{115, \"EINPROGRESS\", \"operation now in progress\"},\n\t{116, \"ESTALE\", \"stale file handle\"},\n\t{117, \"EUCLEAN\", \"structure needs cleaning\"},\n\t{118, \"ENOTNAM\", \"not a XENIX named type file\"},\n\t{119, \"ENAVAIL\", \"no XENIX semaphores available\"},\n\t{120, \"EISNAM\", \"is a named type file\"},\n\t{121, \"EREMOTEIO\", \"remote I/O error\"},\n\t{122, \"EDQUOT\", \"disk quota exceeded\"},\n\t{123, \"ENOMEDIUM\", \"no medium found\"},\n\t{124, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{125, \"ECANCELED\", \"operation canceled\"},\n\t{126, \"ENOKEY\", \"required key not available\"},\n\t{127, \"EKEYEXPIRED\", \"key has expired\"},\n\t{128, \"EKEYREVOKED\", \"key has been revoked\"},\n\t{129, \"EKEYREJECTED\", \"key was rejected by service\"},\n\t{130, \"EOWNERDEAD\", \"owner died\"},\n\t{131, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{132, \"ERFKILL\", \"operation not possible due to RF-kill\"},\n\t{133, \"EHWPOISON\", \"memory page has hardware error\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/breakpoint trap\"},\n\t{6, \"SIGABRT\", \"aborted\"},\n\t{7, \"SIGBUS\", \"bus error\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGUSR1\", \"user defined signal 1\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGUSR2\", \"user defined signal 2\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGSTKFLT\", \"stack fault\"},\n\t{17, \"SIGCHLD\", \"child exited\"},\n\t{18, \"SIGCONT\", \"continued\"},\n\t{19, \"SIGSTOP\", \"stopped (signal)\"},\n\t{20, \"SIGTSTP\", \"stopped\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGURG\", \"urgent I/O condition\"},\n\t{24, \"SIGXCPU\", \"CPU time limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"file size limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window changed\"},\n\t{29, \"SIGIO\", \"I/O possible\"},\n\t{30, \"SIGPWR\", \"power failure\"},\n\t{31, \"SIGSYS\", \"bad system call\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go",
    "content": "// mkerrors.sh -Wall -Werror -static -I/tmp/include\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build riscv64,linux\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAAFS_MAGIC                           = 0x5a3c69f0\n\tADFS_SUPER_MAGIC                     = 0xadf5\n\tAFFS_SUPER_MAGIC                     = 0xadff\n\tAFS_FS_MAGIC                         = 0x6b414653\n\tAFS_SUPER_MAGIC                      = 0x5346414f\n\tAF_ALG                               = 0x26\n\tAF_APPLETALK                         = 0x5\n\tAF_ASH                               = 0x12\n\tAF_ATMPVC                            = 0x8\n\tAF_ATMSVC                            = 0x14\n\tAF_AX25                              = 0x3\n\tAF_BLUETOOTH                         = 0x1f\n\tAF_BRIDGE                            = 0x7\n\tAF_CAIF                              = 0x25\n\tAF_CAN                               = 0x1d\n\tAF_DECnet                            = 0xc\n\tAF_ECONET                            = 0x13\n\tAF_FILE                              = 0x1\n\tAF_IB                                = 0x1b\n\tAF_IEEE802154                        = 0x24\n\tAF_INET                              = 0x2\n\tAF_INET6                             = 0xa\n\tAF_IPX                               = 0x4\n\tAF_IRDA                              = 0x17\n\tAF_ISDN                              = 0x22\n\tAF_IUCV                              = 0x20\n\tAF_KCM                               = 0x29\n\tAF_KEY                               = 0xf\n\tAF_LLC                               = 0x1a\n\tAF_LOCAL                             = 0x1\n\tAF_MAX                               = 0x2d\n\tAF_MPLS                              = 0x1c\n\tAF_NETBEUI                           = 0xd\n\tAF_NETLINK                           = 0x10\n\tAF_NETROM                            = 0x6\n\tAF_NFC                               = 0x27\n\tAF_PACKET                            = 0x11\n\tAF_PHONET                            = 0x23\n\tAF_PPPOX                             = 0x18\n\tAF_QIPCRTR                           = 0x2a\n\tAF_RDS                               = 0x15\n\tAF_ROSE                              = 0xb\n\tAF_ROUTE                             = 0x10\n\tAF_RXRPC                             = 0x21\n\tAF_SECURITY                          = 0xe\n\tAF_SMC                               = 0x2b\n\tAF_SNA                               = 0x16\n\tAF_TIPC                              = 0x1e\n\tAF_UNIX                              = 0x1\n\tAF_UNSPEC                            = 0x0\n\tAF_VSOCK                             = 0x28\n\tAF_WANPIPE                           = 0x19\n\tAF_X25                               = 0x9\n\tAF_XDP                               = 0x2c\n\tALG_OP_DECRYPT                       = 0x0\n\tALG_OP_ENCRYPT                       = 0x1\n\tALG_SET_AEAD_ASSOCLEN                = 0x4\n\tALG_SET_AEAD_AUTHSIZE                = 0x5\n\tALG_SET_IV                           = 0x2\n\tALG_SET_KEY                          = 0x1\n\tALG_SET_OP                           = 0x3\n\tANON_INODE_FS_MAGIC                  = 0x9041934\n\tARPHRD_6LOWPAN                       = 0x339\n\tARPHRD_ADAPT                         = 0x108\n\tARPHRD_APPLETLK                      = 0x8\n\tARPHRD_ARCNET                        = 0x7\n\tARPHRD_ASH                           = 0x30d\n\tARPHRD_ATM                           = 0x13\n\tARPHRD_AX25                          = 0x3\n\tARPHRD_BIF                           = 0x307\n\tARPHRD_CAIF                          = 0x336\n\tARPHRD_CAN                           = 0x118\n\tARPHRD_CHAOS                         = 0x5\n\tARPHRD_CISCO                         = 0x201\n\tARPHRD_CSLIP                         = 0x101\n\tARPHRD_CSLIP6                        = 0x103\n\tARPHRD_DDCMP                         = 0x205\n\tARPHRD_DLCI                          = 0xf\n\tARPHRD_ECONET                        = 0x30e\n\tARPHRD_EETHER                        = 0x2\n\tARPHRD_ETHER                         = 0x1\n\tARPHRD_EUI64                         = 0x1b\n\tARPHRD_FCAL                          = 0x311\n\tARPHRD_FCFABRIC                      = 0x313\n\tARPHRD_FCPL                          = 0x312\n\tARPHRD_FCPP                          = 0x310\n\tARPHRD_FDDI                          = 0x306\n\tARPHRD_FRAD                          = 0x302\n\tARPHRD_HDLC                          = 0x201\n\tARPHRD_HIPPI                         = 0x30c\n\tARPHRD_HWX25                         = 0x110\n\tARPHRD_IEEE1394                      = 0x18\n\tARPHRD_IEEE802                       = 0x6\n\tARPHRD_IEEE80211                     = 0x321\n\tARPHRD_IEEE80211_PRISM               = 0x322\n\tARPHRD_IEEE80211_RADIOTAP            = 0x323\n\tARPHRD_IEEE802154                    = 0x324\n\tARPHRD_IEEE802154_MONITOR            = 0x325\n\tARPHRD_IEEE802_TR                    = 0x320\n\tARPHRD_INFINIBAND                    = 0x20\n\tARPHRD_IP6GRE                        = 0x337\n\tARPHRD_IPDDP                         = 0x309\n\tARPHRD_IPGRE                         = 0x30a\n\tARPHRD_IRDA                          = 0x30f\n\tARPHRD_LAPB                          = 0x204\n\tARPHRD_LOCALTLK                      = 0x305\n\tARPHRD_LOOPBACK                      = 0x304\n\tARPHRD_METRICOM                      = 0x17\n\tARPHRD_NETLINK                       = 0x338\n\tARPHRD_NETROM                        = 0x0\n\tARPHRD_NONE                          = 0xfffe\n\tARPHRD_PHONET                        = 0x334\n\tARPHRD_PHONET_PIPE                   = 0x335\n\tARPHRD_PIMREG                        = 0x30b\n\tARPHRD_PPP                           = 0x200\n\tARPHRD_PRONET                        = 0x4\n\tARPHRD_RAWHDLC                       = 0x206\n\tARPHRD_RAWIP                         = 0x207\n\tARPHRD_ROSE                          = 0x10e\n\tARPHRD_RSRVD                         = 0x104\n\tARPHRD_SIT                           = 0x308\n\tARPHRD_SKIP                          = 0x303\n\tARPHRD_SLIP                          = 0x100\n\tARPHRD_SLIP6                         = 0x102\n\tARPHRD_TUNNEL                        = 0x300\n\tARPHRD_TUNNEL6                       = 0x301\n\tARPHRD_VOID                          = 0xffff\n\tARPHRD_VSOCKMON                      = 0x33a\n\tARPHRD_X25                           = 0x10f\n\tAUTOFS_SUPER_MAGIC                   = 0x187\n\tB0                                   = 0x0\n\tB1000000                             = 0x1008\n\tB110                                 = 0x3\n\tB115200                              = 0x1002\n\tB1152000                             = 0x1009\n\tB1200                                = 0x9\n\tB134                                 = 0x4\n\tB150                                 = 0x5\n\tB1500000                             = 0x100a\n\tB1800                                = 0xa\n\tB19200                               = 0xe\n\tB200                                 = 0x6\n\tB2000000                             = 0x100b\n\tB230400                              = 0x1003\n\tB2400                                = 0xb\n\tB2500000                             = 0x100c\n\tB300                                 = 0x7\n\tB3000000                             = 0x100d\n\tB3500000                             = 0x100e\n\tB38400                               = 0xf\n\tB4000000                             = 0x100f\n\tB460800                              = 0x1004\n\tB4800                                = 0xc\n\tB50                                  = 0x1\n\tB500000                              = 0x1005\n\tB57600                               = 0x1001\n\tB576000                              = 0x1006\n\tB600                                 = 0x8\n\tB75                                  = 0x2\n\tB921600                              = 0x1007\n\tB9600                                = 0xd\n\tBALLOON_KVM_MAGIC                    = 0x13661366\n\tBDEVFS_MAGIC                         = 0x62646576\n\tBINDERFS_SUPER_MAGIC                 = 0x6c6f6f70\n\tBINFMTFS_MAGIC                       = 0x42494e4d\n\tBLKBSZGET                            = 0x80081270\n\tBLKBSZSET                            = 0x40081271\n\tBLKFLSBUF                            = 0x1261\n\tBLKFRAGET                            = 0x1265\n\tBLKFRASET                            = 0x1264\n\tBLKGETSIZE                           = 0x1260\n\tBLKGETSIZE64                         = 0x80081272\n\tBLKPBSZGET                           = 0x127b\n\tBLKRAGET                             = 0x1263\n\tBLKRASET                             = 0x1262\n\tBLKROGET                             = 0x125e\n\tBLKROSET                             = 0x125d\n\tBLKRRPART                            = 0x125f\n\tBLKSECTGET                           = 0x1267\n\tBLKSECTSET                           = 0x1266\n\tBLKSSZGET                            = 0x1268\n\tBOTHER                               = 0x1000\n\tBPF_A                                = 0x10\n\tBPF_ABS                              = 0x20\n\tBPF_ADD                              = 0x0\n\tBPF_ALU                              = 0x4\n\tBPF_ALU64                            = 0x7\n\tBPF_AND                              = 0x50\n\tBPF_ANY                              = 0x0\n\tBPF_ARSH                             = 0xc0\n\tBPF_B                                = 0x10\n\tBPF_BUILD_ID_SIZE                    = 0x14\n\tBPF_CALL                             = 0x80\n\tBPF_DEVCG_ACC_MKNOD                  = 0x1\n\tBPF_DEVCG_ACC_READ                   = 0x2\n\tBPF_DEVCG_ACC_WRITE                  = 0x4\n\tBPF_DEVCG_DEV_BLOCK                  = 0x1\n\tBPF_DEVCG_DEV_CHAR                   = 0x2\n\tBPF_DIV                              = 0x30\n\tBPF_DW                               = 0x18\n\tBPF_END                              = 0xd0\n\tBPF_EXIST                            = 0x2\n\tBPF_EXIT                             = 0x90\n\tBPF_FROM_BE                          = 0x8\n\tBPF_FROM_LE                          = 0x0\n\tBPF_FS_MAGIC                         = 0xcafe4a11\n\tBPF_F_ALLOW_MULTI                    = 0x2\n\tBPF_F_ALLOW_OVERRIDE                 = 0x1\n\tBPF_F_ANY_ALIGNMENT                  = 0x2\n\tBPF_F_CTXLEN_MASK                    = 0xfffff00000000\n\tBPF_F_CURRENT_CPU                    = 0xffffffff\n\tBPF_F_CURRENT_NETNS                  = -0x1\n\tBPF_F_DONT_FRAGMENT                  = 0x4\n\tBPF_F_FAST_STACK_CMP                 = 0x200\n\tBPF_F_HDR_FIELD_MASK                 = 0xf\n\tBPF_F_INDEX_MASK                     = 0xffffffff\n\tBPF_F_INGRESS                        = 0x1\n\tBPF_F_INVALIDATE_HASH                = 0x2\n\tBPF_F_LOCK                           = 0x4\n\tBPF_F_MARK_ENFORCE                   = 0x40\n\tBPF_F_MARK_MANGLED_0                 = 0x20\n\tBPF_F_NO_COMMON_LRU                  = 0x2\n\tBPF_F_NO_PREALLOC                    = 0x1\n\tBPF_F_NUMA_NODE                      = 0x4\n\tBPF_F_PSEUDO_HDR                     = 0x10\n\tBPF_F_QUERY_EFFECTIVE                = 0x1\n\tBPF_F_RDONLY                         = 0x8\n\tBPF_F_RECOMPUTE_CSUM                 = 0x1\n\tBPF_F_REUSE_STACKID                  = 0x400\n\tBPF_F_SEQ_NUMBER                     = 0x8\n\tBPF_F_SKIP_FIELD_MASK                = 0xff\n\tBPF_F_STACK_BUILD_ID                 = 0x20\n\tBPF_F_STRICT_ALIGNMENT               = 0x1\n\tBPF_F_TUNINFO_IPV6                   = 0x1\n\tBPF_F_USER_BUILD_ID                  = 0x800\n\tBPF_F_USER_STACK                     = 0x100\n\tBPF_F_WRONLY                         = 0x10\n\tBPF_F_ZERO_CSUM_TX                   = 0x2\n\tBPF_F_ZERO_SEED                      = 0x40\n\tBPF_H                                = 0x8\n\tBPF_IMM                              = 0x0\n\tBPF_IND                              = 0x40\n\tBPF_JA                               = 0x0\n\tBPF_JEQ                              = 0x10\n\tBPF_JGE                              = 0x30\n\tBPF_JGT                              = 0x20\n\tBPF_JLE                              = 0xb0\n\tBPF_JLT                              = 0xa0\n\tBPF_JMP                              = 0x5\n\tBPF_JMP32                            = 0x6\n\tBPF_JNE                              = 0x50\n\tBPF_JSET                             = 0x40\n\tBPF_JSGE                             = 0x70\n\tBPF_JSGT                             = 0x60\n\tBPF_JSLE                             = 0xd0\n\tBPF_JSLT                             = 0xc0\n\tBPF_K                                = 0x0\n\tBPF_LD                               = 0x0\n\tBPF_LDX                              = 0x1\n\tBPF_LEN                              = 0x80\n\tBPF_LL_OFF                           = -0x200000\n\tBPF_LSH                              = 0x60\n\tBPF_MAJOR_VERSION                    = 0x1\n\tBPF_MAXINSNS                         = 0x1000\n\tBPF_MEM                              = 0x60\n\tBPF_MEMWORDS                         = 0x10\n\tBPF_MINOR_VERSION                    = 0x1\n\tBPF_MISC                             = 0x7\n\tBPF_MOD                              = 0x90\n\tBPF_MOV                              = 0xb0\n\tBPF_MSH                              = 0xa0\n\tBPF_MUL                              = 0x20\n\tBPF_NEG                              = 0x80\n\tBPF_NET_OFF                          = -0x100000\n\tBPF_NOEXIST                          = 0x1\n\tBPF_OBJ_NAME_LEN                     = 0x10\n\tBPF_OR                               = 0x40\n\tBPF_PSEUDO_CALL                      = 0x1\n\tBPF_PSEUDO_MAP_FD                    = 0x1\n\tBPF_RET                              = 0x6\n\tBPF_RSH                              = 0x70\n\tBPF_SOCK_OPS_ALL_CB_FLAGS            = 0x7\n\tBPF_SOCK_OPS_RETRANS_CB_FLAG         = 0x2\n\tBPF_SOCK_OPS_RTO_CB_FLAG             = 0x1\n\tBPF_SOCK_OPS_STATE_CB_FLAG           = 0x4\n\tBPF_ST                               = 0x2\n\tBPF_STX                              = 0x3\n\tBPF_SUB                              = 0x10\n\tBPF_TAG_SIZE                         = 0x8\n\tBPF_TAX                              = 0x0\n\tBPF_TO_BE                            = 0x8\n\tBPF_TO_LE                            = 0x0\n\tBPF_TXA                              = 0x80\n\tBPF_W                                = 0x0\n\tBPF_X                                = 0x8\n\tBPF_XADD                             = 0xc0\n\tBPF_XOR                              = 0xa0\n\tBRKINT                               = 0x2\n\tBS0                                  = 0x0\n\tBS1                                  = 0x2000\n\tBSDLY                                = 0x2000\n\tBTRFS_SUPER_MAGIC                    = 0x9123683e\n\tBTRFS_TEST_MAGIC                     = 0x73727279\n\tCAN_BCM                              = 0x2\n\tCAN_EFF_FLAG                         = 0x80000000\n\tCAN_EFF_ID_BITS                      = 0x1d\n\tCAN_EFF_MASK                         = 0x1fffffff\n\tCAN_ERR_FLAG                         = 0x20000000\n\tCAN_ERR_MASK                         = 0x1fffffff\n\tCAN_INV_FILTER                       = 0x20000000\n\tCAN_ISOTP                            = 0x6\n\tCAN_MAX_DLC                          = 0x8\n\tCAN_MAX_DLEN                         = 0x8\n\tCAN_MCNET                            = 0x5\n\tCAN_MTU                              = 0x10\n\tCAN_NPROTO                           = 0x7\n\tCAN_RAW                              = 0x1\n\tCAN_RAW_FILTER_MAX                   = 0x200\n\tCAN_RTR_FLAG                         = 0x40000000\n\tCAN_SFF_ID_BITS                      = 0xb\n\tCAN_SFF_MASK                         = 0x7ff\n\tCAN_TP16                             = 0x3\n\tCAN_TP20                             = 0x4\n\tCBAUD                                = 0x100f\n\tCBAUDEX                              = 0x1000\n\tCFLUSH                               = 0xf\n\tCGROUP2_SUPER_MAGIC                  = 0x63677270\n\tCGROUP_SUPER_MAGIC                   = 0x27e0eb\n\tCIBAUD                               = 0x100f0000\n\tCLOCAL                               = 0x800\n\tCLOCK_BOOTTIME                       = 0x7\n\tCLOCK_BOOTTIME_ALARM                 = 0x9\n\tCLOCK_DEFAULT                        = 0x0\n\tCLOCK_EXT                            = 0x1\n\tCLOCK_INT                            = 0x2\n\tCLOCK_MONOTONIC                      = 0x1\n\tCLOCK_MONOTONIC_COARSE               = 0x6\n\tCLOCK_MONOTONIC_RAW                  = 0x4\n\tCLOCK_PROCESS_CPUTIME_ID             = 0x2\n\tCLOCK_REALTIME                       = 0x0\n\tCLOCK_REALTIME_ALARM                 = 0x8\n\tCLOCK_REALTIME_COARSE                = 0x5\n\tCLOCK_TAI                            = 0xb\n\tCLOCK_THREAD_CPUTIME_ID              = 0x3\n\tCLOCK_TXFROMRX                       = 0x4\n\tCLOCK_TXINT                          = 0x3\n\tCLONE_CHILD_CLEARTID                 = 0x200000\n\tCLONE_CHILD_SETTID                   = 0x1000000\n\tCLONE_DETACHED                       = 0x400000\n\tCLONE_FILES                          = 0x400\n\tCLONE_FS                             = 0x200\n\tCLONE_IO                             = 0x80000000\n\tCLONE_NEWCGROUP                      = 0x2000000\n\tCLONE_NEWIPC                         = 0x8000000\n\tCLONE_NEWNET                         = 0x40000000\n\tCLONE_NEWNS                          = 0x20000\n\tCLONE_NEWPID                         = 0x20000000\n\tCLONE_NEWUSER                        = 0x10000000\n\tCLONE_NEWUTS                         = 0x4000000\n\tCLONE_PARENT                         = 0x8000\n\tCLONE_PARENT_SETTID                  = 0x100000\n\tCLONE_PTRACE                         = 0x2000\n\tCLONE_SETTLS                         = 0x80000\n\tCLONE_SIGHAND                        = 0x800\n\tCLONE_SYSVSEM                        = 0x40000\n\tCLONE_THREAD                         = 0x10000\n\tCLONE_UNTRACED                       = 0x800000\n\tCLONE_VFORK                          = 0x4000\n\tCLONE_VM                             = 0x100\n\tCMSPAR                               = 0x40000000\n\tCODA_SUPER_MAGIC                     = 0x73757245\n\tCR0                                  = 0x0\n\tCR1                                  = 0x200\n\tCR2                                  = 0x400\n\tCR3                                  = 0x600\n\tCRAMFS_MAGIC                         = 0x28cd3d45\n\tCRDLY                                = 0x600\n\tCREAD                                = 0x80\n\tCRTSCTS                              = 0x80000000\n\tCRYPTO_MAX_NAME                      = 0x40\n\tCRYPTO_MSG_MAX                       = 0x15\n\tCRYPTO_NR_MSGTYPES                   = 0x6\n\tCRYPTO_REPORT_MAXSIZE                = 0x160\n\tCS5                                  = 0x0\n\tCS6                                  = 0x10\n\tCS7                                  = 0x20\n\tCS8                                  = 0x30\n\tCSIGNAL                              = 0xff\n\tCSIZE                                = 0x30\n\tCSTART                               = 0x11\n\tCSTATUS                              = 0x0\n\tCSTOP                                = 0x13\n\tCSTOPB                               = 0x40\n\tCSUSP                                = 0x1a\n\tDAXFS_MAGIC                          = 0x64646178\n\tDEBUGFS_MAGIC                        = 0x64626720\n\tDEVPTS_SUPER_MAGIC                   = 0x1cd1\n\tDT_BLK                               = 0x6\n\tDT_CHR                               = 0x2\n\tDT_DIR                               = 0x4\n\tDT_FIFO                              = 0x1\n\tDT_LNK                               = 0xa\n\tDT_REG                               = 0x8\n\tDT_SOCK                              = 0xc\n\tDT_UNKNOWN                           = 0x0\n\tDT_WHT                               = 0xe\n\tECHO                                 = 0x8\n\tECHOCTL                              = 0x200\n\tECHOE                                = 0x10\n\tECHOK                                = 0x20\n\tECHOKE                               = 0x800\n\tECHONL                               = 0x40\n\tECHOPRT                              = 0x400\n\tECRYPTFS_SUPER_MAGIC                 = 0xf15f\n\tEFD_CLOEXEC                          = 0x80000\n\tEFD_NONBLOCK                         = 0x800\n\tEFD_SEMAPHORE                        = 0x1\n\tEFIVARFS_MAGIC                       = 0xde5e81e4\n\tEFS_SUPER_MAGIC                      = 0x414a53\n\tENCODING_DEFAULT                     = 0x0\n\tENCODING_FM_MARK                     = 0x3\n\tENCODING_FM_SPACE                    = 0x4\n\tENCODING_MANCHESTER                  = 0x5\n\tENCODING_NRZ                         = 0x1\n\tENCODING_NRZI                        = 0x2\n\tEPOLLERR                             = 0x8\n\tEPOLLET                              = 0x80000000\n\tEPOLLEXCLUSIVE                       = 0x10000000\n\tEPOLLHUP                             = 0x10\n\tEPOLLIN                              = 0x1\n\tEPOLLMSG                             = 0x400\n\tEPOLLONESHOT                         = 0x40000000\n\tEPOLLOUT                             = 0x4\n\tEPOLLPRI                             = 0x2\n\tEPOLLRDBAND                          = 0x80\n\tEPOLLRDHUP                           = 0x2000\n\tEPOLLRDNORM                          = 0x40\n\tEPOLLWAKEUP                          = 0x20000000\n\tEPOLLWRBAND                          = 0x200\n\tEPOLLWRNORM                          = 0x100\n\tEPOLL_CLOEXEC                        = 0x80000\n\tEPOLL_CTL_ADD                        = 0x1\n\tEPOLL_CTL_DEL                        = 0x2\n\tEPOLL_CTL_MOD                        = 0x3\n\tETH_P_1588                           = 0x88f7\n\tETH_P_8021AD                         = 0x88a8\n\tETH_P_8021AH                         = 0x88e7\n\tETH_P_8021Q                          = 0x8100\n\tETH_P_80221                          = 0x8917\n\tETH_P_802_2                          = 0x4\n\tETH_P_802_3                          = 0x1\n\tETH_P_802_3_MIN                      = 0x600\n\tETH_P_802_EX1                        = 0x88b5\n\tETH_P_AARP                           = 0x80f3\n\tETH_P_AF_IUCV                        = 0xfbfb\n\tETH_P_ALL                            = 0x3\n\tETH_P_AOE                            = 0x88a2\n\tETH_P_ARCNET                         = 0x1a\n\tETH_P_ARP                            = 0x806\n\tETH_P_ATALK                          = 0x809b\n\tETH_P_ATMFATE                        = 0x8884\n\tETH_P_ATMMPOA                        = 0x884c\n\tETH_P_AX25                           = 0x2\n\tETH_P_BATMAN                         = 0x4305\n\tETH_P_BPQ                            = 0x8ff\n\tETH_P_CAIF                           = 0xf7\n\tETH_P_CAN                            = 0xc\n\tETH_P_CANFD                          = 0xd\n\tETH_P_CONTROL                        = 0x16\n\tETH_P_CUST                           = 0x6006\n\tETH_P_DDCMP                          = 0x6\n\tETH_P_DEC                            = 0x6000\n\tETH_P_DIAG                           = 0x6005\n\tETH_P_DNA_DL                         = 0x6001\n\tETH_P_DNA_RC                         = 0x6002\n\tETH_P_DNA_RT                         = 0x6003\n\tETH_P_DSA                            = 0x1b\n\tETH_P_ECONET                         = 0x18\n\tETH_P_EDSA                           = 0xdada\n\tETH_P_ERSPAN                         = 0x88be\n\tETH_P_ERSPAN2                        = 0x22eb\n\tETH_P_FCOE                           = 0x8906\n\tETH_P_FIP                            = 0x8914\n\tETH_P_HDLC                           = 0x19\n\tETH_P_HSR                            = 0x892f\n\tETH_P_IBOE                           = 0x8915\n\tETH_P_IEEE802154                     = 0xf6\n\tETH_P_IEEEPUP                        = 0xa00\n\tETH_P_IEEEPUPAT                      = 0xa01\n\tETH_P_IFE                            = 0xed3e\n\tETH_P_IP                             = 0x800\n\tETH_P_IPV6                           = 0x86dd\n\tETH_P_IPX                            = 0x8137\n\tETH_P_IRDA                           = 0x17\n\tETH_P_LAT                            = 0x6004\n\tETH_P_LINK_CTL                       = 0x886c\n\tETH_P_LOCALTALK                      = 0x9\n\tETH_P_LOOP                           = 0x60\n\tETH_P_LOOPBACK                       = 0x9000\n\tETH_P_MACSEC                         = 0x88e5\n\tETH_P_MAP                            = 0xf9\n\tETH_P_MOBITEX                        = 0x15\n\tETH_P_MPLS_MC                        = 0x8848\n\tETH_P_MPLS_UC                        = 0x8847\n\tETH_P_MVRP                           = 0x88f5\n\tETH_P_NCSI                           = 0x88f8\n\tETH_P_NSH                            = 0x894f\n\tETH_P_PAE                            = 0x888e\n\tETH_P_PAUSE                          = 0x8808\n\tETH_P_PHONET                         = 0xf5\n\tETH_P_PPPTALK                        = 0x10\n\tETH_P_PPP_DISC                       = 0x8863\n\tETH_P_PPP_MP                         = 0x8\n\tETH_P_PPP_SES                        = 0x8864\n\tETH_P_PREAUTH                        = 0x88c7\n\tETH_P_PRP                            = 0x88fb\n\tETH_P_PUP                            = 0x200\n\tETH_P_PUPAT                          = 0x201\n\tETH_P_QINQ1                          = 0x9100\n\tETH_P_QINQ2                          = 0x9200\n\tETH_P_QINQ3                          = 0x9300\n\tETH_P_RARP                           = 0x8035\n\tETH_P_SCA                            = 0x6007\n\tETH_P_SLOW                           = 0x8809\n\tETH_P_SNAP                           = 0x5\n\tETH_P_TDLS                           = 0x890d\n\tETH_P_TEB                            = 0x6558\n\tETH_P_TIPC                           = 0x88ca\n\tETH_P_TRAILER                        = 0x1c\n\tETH_P_TR_802_2                       = 0x11\n\tETH_P_TSN                            = 0x22f0\n\tETH_P_WAN_PPP                        = 0x7\n\tETH_P_WCCP                           = 0x883e\n\tETH_P_X25                            = 0x805\n\tETH_P_XDSA                           = 0xf8\n\tEXABYTE_ENABLE_NEST                  = 0xf0\n\tEXT2_SUPER_MAGIC                     = 0xef53\n\tEXT3_SUPER_MAGIC                     = 0xef53\n\tEXT4_SUPER_MAGIC                     = 0xef53\n\tEXTA                                 = 0xe\n\tEXTB                                 = 0xf\n\tEXTPROC                              = 0x10000\n\tF2FS_SUPER_MAGIC                     = 0xf2f52010\n\tFALLOC_FL_COLLAPSE_RANGE             = 0x8\n\tFALLOC_FL_INSERT_RANGE               = 0x20\n\tFALLOC_FL_KEEP_SIZE                  = 0x1\n\tFALLOC_FL_NO_HIDE_STALE              = 0x4\n\tFALLOC_FL_PUNCH_HOLE                 = 0x2\n\tFALLOC_FL_UNSHARE_RANGE              = 0x40\n\tFALLOC_FL_ZERO_RANGE                 = 0x10\n\tFANOTIFY_METADATA_VERSION            = 0x3\n\tFAN_ACCESS                           = 0x1\n\tFAN_ACCESS_PERM                      = 0x20000\n\tFAN_ALLOW                            = 0x1\n\tFAN_ALL_CLASS_BITS                   = 0xc\n\tFAN_ALL_EVENTS                       = 0x3b\n\tFAN_ALL_INIT_FLAGS                   = 0x3f\n\tFAN_ALL_MARK_FLAGS                   = 0xff\n\tFAN_ALL_OUTGOING_EVENTS              = 0x3403b\n\tFAN_ALL_PERM_EVENTS                  = 0x30000\n\tFAN_ATTRIB                           = 0x4\n\tFAN_AUDIT                            = 0x10\n\tFAN_CLASS_CONTENT                    = 0x4\n\tFAN_CLASS_NOTIF                      = 0x0\n\tFAN_CLASS_PRE_CONTENT                = 0x8\n\tFAN_CLOEXEC                          = 0x1\n\tFAN_CLOSE                            = 0x18\n\tFAN_CLOSE_NOWRITE                    = 0x10\n\tFAN_CLOSE_WRITE                      = 0x8\n\tFAN_CREATE                           = 0x100\n\tFAN_DELETE                           = 0x200\n\tFAN_DELETE_SELF                      = 0x400\n\tFAN_DENY                             = 0x2\n\tFAN_ENABLE_AUDIT                     = 0x40\n\tFAN_EVENT_INFO_TYPE_FID              = 0x1\n\tFAN_EVENT_METADATA_LEN               = 0x18\n\tFAN_EVENT_ON_CHILD                   = 0x8000000\n\tFAN_MARK_ADD                         = 0x1\n\tFAN_MARK_DONT_FOLLOW                 = 0x4\n\tFAN_MARK_FILESYSTEM                  = 0x100\n\tFAN_MARK_FLUSH                       = 0x80\n\tFAN_MARK_IGNORED_MASK                = 0x20\n\tFAN_MARK_IGNORED_SURV_MODIFY         = 0x40\n\tFAN_MARK_INODE                       = 0x0\n\tFAN_MARK_MOUNT                       = 0x10\n\tFAN_MARK_ONLYDIR                     = 0x8\n\tFAN_MARK_REMOVE                      = 0x2\n\tFAN_MODIFY                           = 0x2\n\tFAN_MOVE                             = 0xc0\n\tFAN_MOVED_FROM                       = 0x40\n\tFAN_MOVED_TO                         = 0x80\n\tFAN_MOVE_SELF                        = 0x800\n\tFAN_NOFD                             = -0x1\n\tFAN_NONBLOCK                         = 0x2\n\tFAN_ONDIR                            = 0x40000000\n\tFAN_OPEN                             = 0x20\n\tFAN_OPEN_EXEC                        = 0x1000\n\tFAN_OPEN_EXEC_PERM                   = 0x40000\n\tFAN_OPEN_PERM                        = 0x10000\n\tFAN_Q_OVERFLOW                       = 0x4000\n\tFAN_REPORT_FID                       = 0x200\n\tFAN_REPORT_TID                       = 0x100\n\tFAN_UNLIMITED_MARKS                  = 0x20\n\tFAN_UNLIMITED_QUEUE                  = 0x10\n\tFD_CLOEXEC                           = 0x1\n\tFD_SETSIZE                           = 0x400\n\tFF0                                  = 0x0\n\tFF1                                  = 0x8000\n\tFFDLY                                = 0x8000\n\tFLUSHO                               = 0x1000\n\tFS_ENCRYPTION_MODE_ADIANTUM          = 0x9\n\tFS_ENCRYPTION_MODE_AES_128_CBC       = 0x5\n\tFS_ENCRYPTION_MODE_AES_128_CTS       = 0x6\n\tFS_ENCRYPTION_MODE_AES_256_CBC       = 0x3\n\tFS_ENCRYPTION_MODE_AES_256_CTS       = 0x4\n\tFS_ENCRYPTION_MODE_AES_256_GCM       = 0x2\n\tFS_ENCRYPTION_MODE_AES_256_XTS       = 0x1\n\tFS_ENCRYPTION_MODE_INVALID           = 0x0\n\tFS_ENCRYPTION_MODE_SPECK128_256_CTS  = 0x8\n\tFS_ENCRYPTION_MODE_SPECK128_256_XTS  = 0x7\n\tFS_IOC_GET_ENCRYPTION_POLICY         = 0x400c6615\n\tFS_IOC_GET_ENCRYPTION_PWSALT         = 0x40106614\n\tFS_IOC_SET_ENCRYPTION_POLICY         = 0x800c6613\n\tFS_KEY_DESCRIPTOR_SIZE               = 0x8\n\tFS_KEY_DESC_PREFIX                   = \"fscrypt:\"\n\tFS_KEY_DESC_PREFIX_SIZE              = 0x8\n\tFS_MAX_KEY_SIZE                      = 0x40\n\tFS_POLICY_FLAGS_PAD_16               = 0x2\n\tFS_POLICY_FLAGS_PAD_32               = 0x3\n\tFS_POLICY_FLAGS_PAD_4                = 0x0\n\tFS_POLICY_FLAGS_PAD_8                = 0x1\n\tFS_POLICY_FLAGS_PAD_MASK             = 0x3\n\tFS_POLICY_FLAGS_VALID                = 0x7\n\tFUTEXFS_SUPER_MAGIC                  = 0xbad1dea\n\tF_ADD_SEALS                          = 0x409\n\tF_DUPFD                              = 0x0\n\tF_DUPFD_CLOEXEC                      = 0x406\n\tF_EXLCK                              = 0x4\n\tF_GETFD                              = 0x1\n\tF_GETFL                              = 0x3\n\tF_GETLEASE                           = 0x401\n\tF_GETLK                              = 0x5\n\tF_GETLK64                            = 0x5\n\tF_GETOWN                             = 0x9\n\tF_GETOWN_EX                          = 0x10\n\tF_GETPIPE_SZ                         = 0x408\n\tF_GETSIG                             = 0xb\n\tF_GET_FILE_RW_HINT                   = 0x40d\n\tF_GET_RW_HINT                        = 0x40b\n\tF_GET_SEALS                          = 0x40a\n\tF_LOCK                               = 0x1\n\tF_NOTIFY                             = 0x402\n\tF_OFD_GETLK                          = 0x24\n\tF_OFD_SETLK                          = 0x25\n\tF_OFD_SETLKW                         = 0x26\n\tF_OK                                 = 0x0\n\tF_RDLCK                              = 0x0\n\tF_SEAL_GROW                          = 0x4\n\tF_SEAL_SEAL                          = 0x1\n\tF_SEAL_SHRINK                        = 0x2\n\tF_SEAL_WRITE                         = 0x8\n\tF_SETFD                              = 0x2\n\tF_SETFL                              = 0x4\n\tF_SETLEASE                           = 0x400\n\tF_SETLK                              = 0x6\n\tF_SETLK64                            = 0x6\n\tF_SETLKW                             = 0x7\n\tF_SETLKW64                           = 0x7\n\tF_SETOWN                             = 0x8\n\tF_SETOWN_EX                          = 0xf\n\tF_SETPIPE_SZ                         = 0x407\n\tF_SETSIG                             = 0xa\n\tF_SET_FILE_RW_HINT                   = 0x40e\n\tF_SET_RW_HINT                        = 0x40c\n\tF_SHLCK                              = 0x8\n\tF_TEST                               = 0x3\n\tF_TLOCK                              = 0x2\n\tF_ULOCK                              = 0x0\n\tF_UNLCK                              = 0x2\n\tF_WRLCK                              = 0x1\n\tGENL_ADMIN_PERM                      = 0x1\n\tGENL_CMD_CAP_DO                      = 0x2\n\tGENL_CMD_CAP_DUMP                    = 0x4\n\tGENL_CMD_CAP_HASPOL                  = 0x8\n\tGENL_HDRLEN                          = 0x4\n\tGENL_ID_CTRL                         = 0x10\n\tGENL_ID_PMCRAID                      = 0x12\n\tGENL_ID_VFS_DQUOT                    = 0x11\n\tGENL_MAX_ID                          = 0x3ff\n\tGENL_MIN_ID                          = 0x10\n\tGENL_NAMSIZ                          = 0x10\n\tGENL_START_ALLOC                     = 0x13\n\tGENL_UNS_ADMIN_PERM                  = 0x10\n\tGRND_NONBLOCK                        = 0x1\n\tGRND_RANDOM                          = 0x2\n\tHDIO_DRIVE_CMD                       = 0x31f\n\tHDIO_DRIVE_CMD_AEB                   = 0x31e\n\tHDIO_DRIVE_CMD_HDR_SIZE              = 0x4\n\tHDIO_DRIVE_HOB_HDR_SIZE              = 0x8\n\tHDIO_DRIVE_RESET                     = 0x31c\n\tHDIO_DRIVE_TASK                      = 0x31e\n\tHDIO_DRIVE_TASKFILE                  = 0x31d\n\tHDIO_DRIVE_TASK_HDR_SIZE             = 0x8\n\tHDIO_GETGEO                          = 0x301\n\tHDIO_GET_32BIT                       = 0x309\n\tHDIO_GET_ACOUSTIC                    = 0x30f\n\tHDIO_GET_ADDRESS                     = 0x310\n\tHDIO_GET_BUSSTATE                    = 0x31a\n\tHDIO_GET_DMA                         = 0x30b\n\tHDIO_GET_IDENTITY                    = 0x30d\n\tHDIO_GET_KEEPSETTINGS                = 0x308\n\tHDIO_GET_MULTCOUNT                   = 0x304\n\tHDIO_GET_NICE                        = 0x30c\n\tHDIO_GET_NOWERR                      = 0x30a\n\tHDIO_GET_QDMA                        = 0x305\n\tHDIO_GET_UNMASKINTR                  = 0x302\n\tHDIO_GET_WCACHE                      = 0x30e\n\tHDIO_OBSOLETE_IDENTITY               = 0x307\n\tHDIO_SCAN_HWIF                       = 0x328\n\tHDIO_SET_32BIT                       = 0x324\n\tHDIO_SET_ACOUSTIC                    = 0x32c\n\tHDIO_SET_ADDRESS                     = 0x32f\n\tHDIO_SET_BUSSTATE                    = 0x32d\n\tHDIO_SET_DMA                         = 0x326\n\tHDIO_SET_KEEPSETTINGS                = 0x323\n\tHDIO_SET_MULTCOUNT                   = 0x321\n\tHDIO_SET_NICE                        = 0x329\n\tHDIO_SET_NOWERR                      = 0x325\n\tHDIO_SET_PIO_MODE                    = 0x327\n\tHDIO_SET_QDMA                        = 0x32e\n\tHDIO_SET_UNMASKINTR                  = 0x322\n\tHDIO_SET_WCACHE                      = 0x32b\n\tHDIO_SET_XFER                        = 0x306\n\tHDIO_TRISTATE_HWIF                   = 0x31b\n\tHDIO_UNREGISTER_HWIF                 = 0x32a\n\tHOSTFS_SUPER_MAGIC                   = 0xc0ffee\n\tHPFS_SUPER_MAGIC                     = 0xf995e849\n\tHUGETLBFS_MAGIC                      = 0x958458f6\n\tHUPCL                                = 0x400\n\tIBSHIFT                              = 0x10\n\tICANON                               = 0x2\n\tICMPV6_FILTER                        = 0x1\n\tICRNL                                = 0x100\n\tIEXTEN                               = 0x8000\n\tIFA_F_DADFAILED                      = 0x8\n\tIFA_F_DEPRECATED                     = 0x20\n\tIFA_F_HOMEADDRESS                    = 0x10\n\tIFA_F_MANAGETEMPADDR                 = 0x100\n\tIFA_F_MCAUTOJOIN                     = 0x400\n\tIFA_F_NODAD                          = 0x2\n\tIFA_F_NOPREFIXROUTE                  = 0x200\n\tIFA_F_OPTIMISTIC                     = 0x4\n\tIFA_F_PERMANENT                      = 0x80\n\tIFA_F_SECONDARY                      = 0x1\n\tIFA_F_STABLE_PRIVACY                 = 0x800\n\tIFA_F_TEMPORARY                      = 0x1\n\tIFA_F_TENTATIVE                      = 0x40\n\tIFA_MAX                              = 0xa\n\tIFF_ALLMULTI                         = 0x200\n\tIFF_ATTACH_QUEUE                     = 0x200\n\tIFF_AUTOMEDIA                        = 0x4000\n\tIFF_BROADCAST                        = 0x2\n\tIFF_DEBUG                            = 0x4\n\tIFF_DETACH_QUEUE                     = 0x400\n\tIFF_DORMANT                          = 0x20000\n\tIFF_DYNAMIC                          = 0x8000\n\tIFF_ECHO                             = 0x40000\n\tIFF_LOOPBACK                         = 0x8\n\tIFF_LOWER_UP                         = 0x10000\n\tIFF_MASTER                           = 0x400\n\tIFF_MULTICAST                        = 0x1000\n\tIFF_MULTI_QUEUE                      = 0x100\n\tIFF_NAPI                             = 0x10\n\tIFF_NAPI_FRAGS                       = 0x20\n\tIFF_NOARP                            = 0x80\n\tIFF_NOFILTER                         = 0x1000\n\tIFF_NOTRAILERS                       = 0x20\n\tIFF_NO_PI                            = 0x1000\n\tIFF_ONE_QUEUE                        = 0x2000\n\tIFF_PERSIST                          = 0x800\n\tIFF_POINTOPOINT                      = 0x10\n\tIFF_PORTSEL                          = 0x2000\n\tIFF_PROMISC                          = 0x100\n\tIFF_RUNNING                          = 0x40\n\tIFF_SLAVE                            = 0x800\n\tIFF_TAP                              = 0x2\n\tIFF_TUN                              = 0x1\n\tIFF_TUN_EXCL                         = 0x8000\n\tIFF_UP                               = 0x1\n\tIFF_VNET_HDR                         = 0x4000\n\tIFF_VOLATILE                         = 0x70c5a\n\tIFNAMSIZ                             = 0x10\n\tIGNBRK                               = 0x1\n\tIGNCR                                = 0x80\n\tIGNPAR                               = 0x4\n\tIMAXBEL                              = 0x2000\n\tINLCR                                = 0x40\n\tINPCK                                = 0x10\n\tIN_ACCESS                            = 0x1\n\tIN_ALL_EVENTS                        = 0xfff\n\tIN_ATTRIB                            = 0x4\n\tIN_CLASSA_HOST                       = 0xffffff\n\tIN_CLASSA_MAX                        = 0x80\n\tIN_CLASSA_NET                        = 0xff000000\n\tIN_CLASSA_NSHIFT                     = 0x18\n\tIN_CLASSB_HOST                       = 0xffff\n\tIN_CLASSB_MAX                        = 0x10000\n\tIN_CLASSB_NET                        = 0xffff0000\n\tIN_CLASSB_NSHIFT                     = 0x10\n\tIN_CLASSC_HOST                       = 0xff\n\tIN_CLASSC_NET                        = 0xffffff00\n\tIN_CLASSC_NSHIFT                     = 0x8\n\tIN_CLOEXEC                           = 0x80000\n\tIN_CLOSE                             = 0x18\n\tIN_CLOSE_NOWRITE                     = 0x10\n\tIN_CLOSE_WRITE                       = 0x8\n\tIN_CREATE                            = 0x100\n\tIN_DELETE                            = 0x200\n\tIN_DELETE_SELF                       = 0x400\n\tIN_DONT_FOLLOW                       = 0x2000000\n\tIN_EXCL_UNLINK                       = 0x4000000\n\tIN_IGNORED                           = 0x8000\n\tIN_ISDIR                             = 0x40000000\n\tIN_LOOPBACKNET                       = 0x7f\n\tIN_MASK_ADD                          = 0x20000000\n\tIN_MASK_CREATE                       = 0x10000000\n\tIN_MODIFY                            = 0x2\n\tIN_MOVE                              = 0xc0\n\tIN_MOVED_FROM                        = 0x40\n\tIN_MOVED_TO                          = 0x80\n\tIN_MOVE_SELF                         = 0x800\n\tIN_NONBLOCK                          = 0x800\n\tIN_ONESHOT                           = 0x80000000\n\tIN_ONLYDIR                           = 0x1000000\n\tIN_OPEN                              = 0x20\n\tIN_Q_OVERFLOW                        = 0x4000\n\tIN_UNMOUNT                           = 0x2000\n\tIOCTL_VM_SOCKETS_GET_LOCAL_CID       = 0x7b9\n\tIPPROTO_AH                           = 0x33\n\tIPPROTO_BEETPH                       = 0x5e\n\tIPPROTO_COMP                         = 0x6c\n\tIPPROTO_DCCP                         = 0x21\n\tIPPROTO_DSTOPTS                      = 0x3c\n\tIPPROTO_EGP                          = 0x8\n\tIPPROTO_ENCAP                        = 0x62\n\tIPPROTO_ESP                          = 0x32\n\tIPPROTO_FRAGMENT                     = 0x2c\n\tIPPROTO_GRE                          = 0x2f\n\tIPPROTO_HOPOPTS                      = 0x0\n\tIPPROTO_ICMP                         = 0x1\n\tIPPROTO_ICMPV6                       = 0x3a\n\tIPPROTO_IDP                          = 0x16\n\tIPPROTO_IGMP                         = 0x2\n\tIPPROTO_IP                           = 0x0\n\tIPPROTO_IPIP                         = 0x4\n\tIPPROTO_IPV6                         = 0x29\n\tIPPROTO_MH                           = 0x87\n\tIPPROTO_MPLS                         = 0x89\n\tIPPROTO_MTP                          = 0x5c\n\tIPPROTO_NONE                         = 0x3b\n\tIPPROTO_PIM                          = 0x67\n\tIPPROTO_PUP                          = 0xc\n\tIPPROTO_RAW                          = 0xff\n\tIPPROTO_ROUTING                      = 0x2b\n\tIPPROTO_RSVP                         = 0x2e\n\tIPPROTO_SCTP                         = 0x84\n\tIPPROTO_TCP                          = 0x6\n\tIPPROTO_TP                           = 0x1d\n\tIPPROTO_UDP                          = 0x11\n\tIPPROTO_UDPLITE                      = 0x88\n\tIPV6_2292DSTOPTS                     = 0x4\n\tIPV6_2292HOPLIMIT                    = 0x8\n\tIPV6_2292HOPOPTS                     = 0x3\n\tIPV6_2292PKTINFO                     = 0x2\n\tIPV6_2292PKTOPTIONS                  = 0x6\n\tIPV6_2292RTHDR                       = 0x5\n\tIPV6_ADDRFORM                        = 0x1\n\tIPV6_ADDR_PREFERENCES                = 0x48\n\tIPV6_ADD_MEMBERSHIP                  = 0x14\n\tIPV6_AUTHHDR                         = 0xa\n\tIPV6_AUTOFLOWLABEL                   = 0x46\n\tIPV6_CHECKSUM                        = 0x7\n\tIPV6_DONTFRAG                        = 0x3e\n\tIPV6_DROP_MEMBERSHIP                 = 0x15\n\tIPV6_DSTOPTS                         = 0x3b\n\tIPV6_FREEBIND                        = 0x4e\n\tIPV6_HDRINCL                         = 0x24\n\tIPV6_HOPLIMIT                        = 0x34\n\tIPV6_HOPOPTS                         = 0x36\n\tIPV6_IPSEC_POLICY                    = 0x22\n\tIPV6_JOIN_ANYCAST                    = 0x1b\n\tIPV6_JOIN_GROUP                      = 0x14\n\tIPV6_LEAVE_ANYCAST                   = 0x1c\n\tIPV6_LEAVE_GROUP                     = 0x15\n\tIPV6_MINHOPCOUNT                     = 0x49\n\tIPV6_MTU                             = 0x18\n\tIPV6_MTU_DISCOVER                    = 0x17\n\tIPV6_MULTICAST_ALL                   = 0x1d\n\tIPV6_MULTICAST_HOPS                  = 0x12\n\tIPV6_MULTICAST_IF                    = 0x11\n\tIPV6_MULTICAST_LOOP                  = 0x13\n\tIPV6_NEXTHOP                         = 0x9\n\tIPV6_ORIGDSTADDR                     = 0x4a\n\tIPV6_PATHMTU                         = 0x3d\n\tIPV6_PKTINFO                         = 0x32\n\tIPV6_PMTUDISC_DO                     = 0x2\n\tIPV6_PMTUDISC_DONT                   = 0x0\n\tIPV6_PMTUDISC_INTERFACE              = 0x4\n\tIPV6_PMTUDISC_OMIT                   = 0x5\n\tIPV6_PMTUDISC_PROBE                  = 0x3\n\tIPV6_PMTUDISC_WANT                   = 0x1\n\tIPV6_RECVDSTOPTS                     = 0x3a\n\tIPV6_RECVERR                         = 0x19\n\tIPV6_RECVFRAGSIZE                    = 0x4d\n\tIPV6_RECVHOPLIMIT                    = 0x33\n\tIPV6_RECVHOPOPTS                     = 0x35\n\tIPV6_RECVORIGDSTADDR                 = 0x4a\n\tIPV6_RECVPATHMTU                     = 0x3c\n\tIPV6_RECVPKTINFO                     = 0x31\n\tIPV6_RECVRTHDR                       = 0x38\n\tIPV6_RECVTCLASS                      = 0x42\n\tIPV6_ROUTER_ALERT                    = 0x16\n\tIPV6_RTHDR                           = 0x39\n\tIPV6_RTHDRDSTOPTS                    = 0x37\n\tIPV6_RTHDR_LOOSE                     = 0x0\n\tIPV6_RTHDR_STRICT                    = 0x1\n\tIPV6_RTHDR_TYPE_0                    = 0x0\n\tIPV6_RXDSTOPTS                       = 0x3b\n\tIPV6_RXHOPOPTS                       = 0x36\n\tIPV6_TCLASS                          = 0x43\n\tIPV6_TRANSPARENT                     = 0x4b\n\tIPV6_UNICAST_HOPS                    = 0x10\n\tIPV6_UNICAST_IF                      = 0x4c\n\tIPV6_V6ONLY                          = 0x1a\n\tIPV6_XFRM_POLICY                     = 0x23\n\tIP_ADD_MEMBERSHIP                    = 0x23\n\tIP_ADD_SOURCE_MEMBERSHIP             = 0x27\n\tIP_BIND_ADDRESS_NO_PORT              = 0x18\n\tIP_BLOCK_SOURCE                      = 0x26\n\tIP_CHECKSUM                          = 0x17\n\tIP_DEFAULT_MULTICAST_LOOP            = 0x1\n\tIP_DEFAULT_MULTICAST_TTL             = 0x1\n\tIP_DF                                = 0x4000\n\tIP_DROP_MEMBERSHIP                   = 0x24\n\tIP_DROP_SOURCE_MEMBERSHIP            = 0x28\n\tIP_FREEBIND                          = 0xf\n\tIP_HDRINCL                           = 0x3\n\tIP_IPSEC_POLICY                      = 0x10\n\tIP_MAXPACKET                         = 0xffff\n\tIP_MAX_MEMBERSHIPS                   = 0x14\n\tIP_MF                                = 0x2000\n\tIP_MINTTL                            = 0x15\n\tIP_MSFILTER                          = 0x29\n\tIP_MSS                               = 0x240\n\tIP_MTU                               = 0xe\n\tIP_MTU_DISCOVER                      = 0xa\n\tIP_MULTICAST_ALL                     = 0x31\n\tIP_MULTICAST_IF                      = 0x20\n\tIP_MULTICAST_LOOP                    = 0x22\n\tIP_MULTICAST_TTL                     = 0x21\n\tIP_NODEFRAG                          = 0x16\n\tIP_OFFMASK                           = 0x1fff\n\tIP_OPTIONS                           = 0x4\n\tIP_ORIGDSTADDR                       = 0x14\n\tIP_PASSSEC                           = 0x12\n\tIP_PKTINFO                           = 0x8\n\tIP_PKTOPTIONS                        = 0x9\n\tIP_PMTUDISC                          = 0xa\n\tIP_PMTUDISC_DO                       = 0x2\n\tIP_PMTUDISC_DONT                     = 0x0\n\tIP_PMTUDISC_INTERFACE                = 0x4\n\tIP_PMTUDISC_OMIT                     = 0x5\n\tIP_PMTUDISC_PROBE                    = 0x3\n\tIP_PMTUDISC_WANT                     = 0x1\n\tIP_RECVERR                           = 0xb\n\tIP_RECVFRAGSIZE                      = 0x19\n\tIP_RECVOPTS                          = 0x6\n\tIP_RECVORIGDSTADDR                   = 0x14\n\tIP_RECVRETOPTS                       = 0x7\n\tIP_RECVTOS                           = 0xd\n\tIP_RECVTTL                           = 0xc\n\tIP_RETOPTS                           = 0x7\n\tIP_RF                                = 0x8000\n\tIP_ROUTER_ALERT                      = 0x5\n\tIP_TOS                               = 0x1\n\tIP_TRANSPARENT                       = 0x13\n\tIP_TTL                               = 0x2\n\tIP_UNBLOCK_SOURCE                    = 0x25\n\tIP_UNICAST_IF                        = 0x32\n\tIP_XFRM_POLICY                       = 0x11\n\tISIG                                 = 0x1\n\tISOFS_SUPER_MAGIC                    = 0x9660\n\tISTRIP                               = 0x20\n\tIUCLC                                = 0x200\n\tIUTF8                                = 0x4000\n\tIXANY                                = 0x800\n\tIXOFF                                = 0x1000\n\tIXON                                 = 0x400\n\tJFFS2_SUPER_MAGIC                    = 0x72b6\n\tKEXEC_ARCH_386                       = 0x30000\n\tKEXEC_ARCH_68K                       = 0x40000\n\tKEXEC_ARCH_AARCH64                   = 0xb70000\n\tKEXEC_ARCH_ARM                       = 0x280000\n\tKEXEC_ARCH_DEFAULT                   = 0x0\n\tKEXEC_ARCH_IA_64                     = 0x320000\n\tKEXEC_ARCH_MASK                      = 0xffff0000\n\tKEXEC_ARCH_MIPS                      = 0x80000\n\tKEXEC_ARCH_MIPS_LE                   = 0xa0000\n\tKEXEC_ARCH_PPC                       = 0x140000\n\tKEXEC_ARCH_PPC64                     = 0x150000\n\tKEXEC_ARCH_S390                      = 0x160000\n\tKEXEC_ARCH_SH                        = 0x2a0000\n\tKEXEC_ARCH_X86_64                    = 0x3e0000\n\tKEXEC_FILE_NO_INITRAMFS              = 0x4\n\tKEXEC_FILE_ON_CRASH                  = 0x2\n\tKEXEC_FILE_UNLOAD                    = 0x1\n\tKEXEC_ON_CRASH                       = 0x1\n\tKEXEC_PRESERVE_CONTEXT               = 0x2\n\tKEXEC_SEGMENT_MAX                    = 0x10\n\tKEYCTL_ASSUME_AUTHORITY              = 0x10\n\tKEYCTL_CHOWN                         = 0x4\n\tKEYCTL_CLEAR                         = 0x7\n\tKEYCTL_DESCRIBE                      = 0x6\n\tKEYCTL_DH_COMPUTE                    = 0x17\n\tKEYCTL_GET_KEYRING_ID                = 0x0\n\tKEYCTL_GET_PERSISTENT                = 0x16\n\tKEYCTL_GET_SECURITY                  = 0x11\n\tKEYCTL_INSTANTIATE                   = 0xc\n\tKEYCTL_INSTANTIATE_IOV               = 0x14\n\tKEYCTL_INVALIDATE                    = 0x15\n\tKEYCTL_JOIN_SESSION_KEYRING          = 0x1\n\tKEYCTL_LINK                          = 0x8\n\tKEYCTL_NEGATE                        = 0xd\n\tKEYCTL_PKEY_DECRYPT                  = 0x1a\n\tKEYCTL_PKEY_ENCRYPT                  = 0x19\n\tKEYCTL_PKEY_QUERY                    = 0x18\n\tKEYCTL_PKEY_SIGN                     = 0x1b\n\tKEYCTL_PKEY_VERIFY                   = 0x1c\n\tKEYCTL_READ                          = 0xb\n\tKEYCTL_REJECT                        = 0x13\n\tKEYCTL_RESTRICT_KEYRING              = 0x1d\n\tKEYCTL_REVOKE                        = 0x3\n\tKEYCTL_SEARCH                        = 0xa\n\tKEYCTL_SESSION_TO_PARENT             = 0x12\n\tKEYCTL_SETPERM                       = 0x5\n\tKEYCTL_SET_REQKEY_KEYRING            = 0xe\n\tKEYCTL_SET_TIMEOUT                   = 0xf\n\tKEYCTL_SUPPORTS_DECRYPT              = 0x2\n\tKEYCTL_SUPPORTS_ENCRYPT              = 0x1\n\tKEYCTL_SUPPORTS_SIGN                 = 0x4\n\tKEYCTL_SUPPORTS_VERIFY               = 0x8\n\tKEYCTL_UNLINK                        = 0x9\n\tKEYCTL_UPDATE                        = 0x2\n\tKEY_REQKEY_DEFL_DEFAULT              = 0x0\n\tKEY_REQKEY_DEFL_GROUP_KEYRING        = 0x6\n\tKEY_REQKEY_DEFL_NO_CHANGE            = -0x1\n\tKEY_REQKEY_DEFL_PROCESS_KEYRING      = 0x2\n\tKEY_REQKEY_DEFL_REQUESTOR_KEYRING    = 0x7\n\tKEY_REQKEY_DEFL_SESSION_KEYRING      = 0x3\n\tKEY_REQKEY_DEFL_THREAD_KEYRING       = 0x1\n\tKEY_REQKEY_DEFL_USER_KEYRING         = 0x4\n\tKEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5\n\tKEY_SPEC_GROUP_KEYRING               = -0x6\n\tKEY_SPEC_PROCESS_KEYRING             = -0x2\n\tKEY_SPEC_REQKEY_AUTH_KEY             = -0x7\n\tKEY_SPEC_REQUESTOR_KEYRING           = -0x8\n\tKEY_SPEC_SESSION_KEYRING             = -0x3\n\tKEY_SPEC_THREAD_KEYRING              = -0x1\n\tKEY_SPEC_USER_KEYRING                = -0x4\n\tKEY_SPEC_USER_SESSION_KEYRING        = -0x5\n\tLINUX_REBOOT_CMD_CAD_OFF             = 0x0\n\tLINUX_REBOOT_CMD_CAD_ON              = 0x89abcdef\n\tLINUX_REBOOT_CMD_HALT                = 0xcdef0123\n\tLINUX_REBOOT_CMD_KEXEC               = 0x45584543\n\tLINUX_REBOOT_CMD_POWER_OFF           = 0x4321fedc\n\tLINUX_REBOOT_CMD_RESTART             = 0x1234567\n\tLINUX_REBOOT_CMD_RESTART2            = 0xa1b2c3d4\n\tLINUX_REBOOT_CMD_SW_SUSPEND          = 0xd000fce2\n\tLINUX_REBOOT_MAGIC1                  = 0xfee1dead\n\tLINUX_REBOOT_MAGIC2                  = 0x28121969\n\tLOCK_EX                              = 0x2\n\tLOCK_NB                              = 0x4\n\tLOCK_SH                              = 0x1\n\tLOCK_UN                              = 0x8\n\tMADV_DODUMP                          = 0x11\n\tMADV_DOFORK                          = 0xb\n\tMADV_DONTDUMP                        = 0x10\n\tMADV_DONTFORK                        = 0xa\n\tMADV_DONTNEED                        = 0x4\n\tMADV_FREE                            = 0x8\n\tMADV_HUGEPAGE                        = 0xe\n\tMADV_HWPOISON                        = 0x64\n\tMADV_KEEPONFORK                      = 0x13\n\tMADV_MERGEABLE                       = 0xc\n\tMADV_NOHUGEPAGE                      = 0xf\n\tMADV_NORMAL                          = 0x0\n\tMADV_RANDOM                          = 0x1\n\tMADV_REMOVE                          = 0x9\n\tMADV_SEQUENTIAL                      = 0x2\n\tMADV_UNMERGEABLE                     = 0xd\n\tMADV_WILLNEED                        = 0x3\n\tMADV_WIPEONFORK                      = 0x12\n\tMAP_ANON                             = 0x20\n\tMAP_ANONYMOUS                        = 0x20\n\tMAP_DENYWRITE                        = 0x800\n\tMAP_EXECUTABLE                       = 0x1000\n\tMAP_FILE                             = 0x0\n\tMAP_FIXED                            = 0x10\n\tMAP_FIXED_NOREPLACE                  = 0x100000\n\tMAP_GROWSDOWN                        = 0x100\n\tMAP_HUGETLB                          = 0x40000\n\tMAP_HUGE_MASK                        = 0x3f\n\tMAP_HUGE_SHIFT                       = 0x1a\n\tMAP_LOCKED                           = 0x2000\n\tMAP_NONBLOCK                         = 0x10000\n\tMAP_NORESERVE                        = 0x4000\n\tMAP_POPULATE                         = 0x8000\n\tMAP_PRIVATE                          = 0x2\n\tMAP_SHARED                           = 0x1\n\tMAP_SHARED_VALIDATE                  = 0x3\n\tMAP_STACK                            = 0x20000\n\tMAP_SYNC                             = 0x80000\n\tMAP_TYPE                             = 0xf\n\tMCAST_BLOCK_SOURCE                   = 0x2b\n\tMCAST_EXCLUDE                        = 0x0\n\tMCAST_INCLUDE                        = 0x1\n\tMCAST_JOIN_GROUP                     = 0x2a\n\tMCAST_JOIN_SOURCE_GROUP              = 0x2e\n\tMCAST_LEAVE_GROUP                    = 0x2d\n\tMCAST_LEAVE_SOURCE_GROUP             = 0x2f\n\tMCAST_MSFILTER                       = 0x30\n\tMCAST_UNBLOCK_SOURCE                 = 0x2c\n\tMCL_CURRENT                          = 0x1\n\tMCL_FUTURE                           = 0x2\n\tMCL_ONFAULT                          = 0x4\n\tMFD_ALLOW_SEALING                    = 0x2\n\tMFD_CLOEXEC                          = 0x1\n\tMFD_HUGETLB                          = 0x4\n\tMFD_HUGE_16GB                        = -0x78000000\n\tMFD_HUGE_16MB                        = 0x60000000\n\tMFD_HUGE_1GB                         = 0x78000000\n\tMFD_HUGE_1MB                         = 0x50000000\n\tMFD_HUGE_256MB                       = 0x70000000\n\tMFD_HUGE_2GB                         = 0x7c000000\n\tMFD_HUGE_2MB                         = 0x54000000\n\tMFD_HUGE_32MB                        = 0x64000000\n\tMFD_HUGE_512KB                       = 0x4c000000\n\tMFD_HUGE_512MB                       = 0x74000000\n\tMFD_HUGE_64KB                        = 0x40000000\n\tMFD_HUGE_8MB                         = 0x5c000000\n\tMFD_HUGE_MASK                        = 0x3f\n\tMFD_HUGE_SHIFT                       = 0x1a\n\tMINIX2_SUPER_MAGIC                   = 0x2468\n\tMINIX2_SUPER_MAGIC2                  = 0x2478\n\tMINIX3_SUPER_MAGIC                   = 0x4d5a\n\tMINIX_SUPER_MAGIC                    = 0x137f\n\tMINIX_SUPER_MAGIC2                   = 0x138f\n\tMNT_DETACH                           = 0x2\n\tMNT_EXPIRE                           = 0x4\n\tMNT_FORCE                            = 0x1\n\tMODULE_INIT_IGNORE_MODVERSIONS       = 0x1\n\tMODULE_INIT_IGNORE_VERMAGIC          = 0x2\n\tMSDOS_SUPER_MAGIC                    = 0x4d44\n\tMSG_BATCH                            = 0x40000\n\tMSG_CMSG_CLOEXEC                     = 0x40000000\n\tMSG_CONFIRM                          = 0x800\n\tMSG_CTRUNC                           = 0x8\n\tMSG_DONTROUTE                        = 0x4\n\tMSG_DONTWAIT                         = 0x40\n\tMSG_EOR                              = 0x80\n\tMSG_ERRQUEUE                         = 0x2000\n\tMSG_FASTOPEN                         = 0x20000000\n\tMSG_FIN                              = 0x200\n\tMSG_MORE                             = 0x8000\n\tMSG_NOSIGNAL                         = 0x4000\n\tMSG_OOB                              = 0x1\n\tMSG_PEEK                             = 0x2\n\tMSG_PROXY                            = 0x10\n\tMSG_RST                              = 0x1000\n\tMSG_SYN                              = 0x400\n\tMSG_TRUNC                            = 0x20\n\tMSG_TRYHARD                          = 0x4\n\tMSG_WAITALL                          = 0x100\n\tMSG_WAITFORONE                       = 0x10000\n\tMSG_ZEROCOPY                         = 0x4000000\n\tMS_ACTIVE                            = 0x40000000\n\tMS_ASYNC                             = 0x1\n\tMS_BIND                              = 0x1000\n\tMS_BORN                              = 0x20000000\n\tMS_DIRSYNC                           = 0x80\n\tMS_INVALIDATE                        = 0x2\n\tMS_I_VERSION                         = 0x800000\n\tMS_KERNMOUNT                         = 0x400000\n\tMS_LAZYTIME                          = 0x2000000\n\tMS_MANDLOCK                          = 0x40\n\tMS_MGC_MSK                           = 0xffff0000\n\tMS_MGC_VAL                           = 0xc0ed0000\n\tMS_MOVE                              = 0x2000\n\tMS_NOATIME                           = 0x400\n\tMS_NODEV                             = 0x4\n\tMS_NODIRATIME                        = 0x800\n\tMS_NOEXEC                            = 0x8\n\tMS_NOREMOTELOCK                      = 0x8000000\n\tMS_NOSEC                             = 0x10000000\n\tMS_NOSUID                            = 0x2\n\tMS_NOUSER                            = -0x80000000\n\tMS_POSIXACL                          = 0x10000\n\tMS_PRIVATE                           = 0x40000\n\tMS_RDONLY                            = 0x1\n\tMS_REC                               = 0x4000\n\tMS_RELATIME                          = 0x200000\n\tMS_REMOUNT                           = 0x20\n\tMS_RMT_MASK                          = 0x2800051\n\tMS_SHARED                            = 0x100000\n\tMS_SILENT                            = 0x8000\n\tMS_SLAVE                             = 0x80000\n\tMS_STRICTATIME                       = 0x1000000\n\tMS_SUBMOUNT                          = 0x4000000\n\tMS_SYNC                              = 0x4\n\tMS_SYNCHRONOUS                       = 0x10\n\tMS_UNBINDABLE                        = 0x20000\n\tMS_VERBOSE                           = 0x8000\n\tMTD_INODE_FS_MAGIC                   = 0x11307854\n\tNAME_MAX                             = 0xff\n\tNCP_SUPER_MAGIC                      = 0x564c\n\tNETLINK_ADD_MEMBERSHIP               = 0x1\n\tNETLINK_AUDIT                        = 0x9\n\tNETLINK_BROADCAST_ERROR              = 0x4\n\tNETLINK_CAP_ACK                      = 0xa\n\tNETLINK_CONNECTOR                    = 0xb\n\tNETLINK_CRYPTO                       = 0x15\n\tNETLINK_DNRTMSG                      = 0xe\n\tNETLINK_DROP_MEMBERSHIP              = 0x2\n\tNETLINK_ECRYPTFS                     = 0x13\n\tNETLINK_EXT_ACK                      = 0xb\n\tNETLINK_FIB_LOOKUP                   = 0xa\n\tNETLINK_FIREWALL                     = 0x3\n\tNETLINK_GENERIC                      = 0x10\n\tNETLINK_GET_STRICT_CHK               = 0xc\n\tNETLINK_INET_DIAG                    = 0x4\n\tNETLINK_IP6_FW                       = 0xd\n\tNETLINK_ISCSI                        = 0x8\n\tNETLINK_KOBJECT_UEVENT               = 0xf\n\tNETLINK_LISTEN_ALL_NSID              = 0x8\n\tNETLINK_LIST_MEMBERSHIPS             = 0x9\n\tNETLINK_NETFILTER                    = 0xc\n\tNETLINK_NFLOG                        = 0x5\n\tNETLINK_NO_ENOBUFS                   = 0x5\n\tNETLINK_PKTINFO                      = 0x3\n\tNETLINK_RDMA                         = 0x14\n\tNETLINK_ROUTE                        = 0x0\n\tNETLINK_RX_RING                      = 0x6\n\tNETLINK_SCSITRANSPORT                = 0x12\n\tNETLINK_SELINUX                      = 0x7\n\tNETLINK_SMC                          = 0x16\n\tNETLINK_SOCK_DIAG                    = 0x4\n\tNETLINK_TX_RING                      = 0x7\n\tNETLINK_UNUSED                       = 0x1\n\tNETLINK_USERSOCK                     = 0x2\n\tNETLINK_XFRM                         = 0x6\n\tNETNSA_MAX                           = 0x5\n\tNETNSA_NSID_NOT_ASSIGNED             = -0x1\n\tNFNETLINK_V0                         = 0x0\n\tNFNLGRP_ACCT_QUOTA                   = 0x8\n\tNFNLGRP_CONNTRACK_DESTROY            = 0x3\n\tNFNLGRP_CONNTRACK_EXP_DESTROY        = 0x6\n\tNFNLGRP_CONNTRACK_EXP_NEW            = 0x4\n\tNFNLGRP_CONNTRACK_EXP_UPDATE         = 0x5\n\tNFNLGRP_CONNTRACK_NEW                = 0x1\n\tNFNLGRP_CONNTRACK_UPDATE             = 0x2\n\tNFNLGRP_MAX                          = 0x9\n\tNFNLGRP_NFTABLES                     = 0x7\n\tNFNLGRP_NFTRACE                      = 0x9\n\tNFNLGRP_NONE                         = 0x0\n\tNFNL_BATCH_MAX                       = 0x1\n\tNFNL_MSG_BATCH_BEGIN                 = 0x10\n\tNFNL_MSG_BATCH_END                   = 0x11\n\tNFNL_NFA_NEST                        = 0x8000\n\tNFNL_SUBSYS_ACCT                     = 0x7\n\tNFNL_SUBSYS_COUNT                    = 0xc\n\tNFNL_SUBSYS_CTHELPER                 = 0x9\n\tNFNL_SUBSYS_CTNETLINK                = 0x1\n\tNFNL_SUBSYS_CTNETLINK_EXP            = 0x2\n\tNFNL_SUBSYS_CTNETLINK_TIMEOUT        = 0x8\n\tNFNL_SUBSYS_IPSET                    = 0x6\n\tNFNL_SUBSYS_NFTABLES                 = 0xa\n\tNFNL_SUBSYS_NFT_COMPAT               = 0xb\n\tNFNL_SUBSYS_NONE                     = 0x0\n\tNFNL_SUBSYS_OSF                      = 0x5\n\tNFNL_SUBSYS_QUEUE                    = 0x3\n\tNFNL_SUBSYS_ULOG                     = 0x4\n\tNFS_SUPER_MAGIC                      = 0x6969\n\tNILFS_SUPER_MAGIC                    = 0x3434\n\tNL0                                  = 0x0\n\tNL1                                  = 0x100\n\tNLA_ALIGNTO                          = 0x4\n\tNLA_F_NESTED                         = 0x8000\n\tNLA_F_NET_BYTEORDER                  = 0x4000\n\tNLA_HDRLEN                           = 0x4\n\tNLDLY                                = 0x100\n\tNLMSG_ALIGNTO                        = 0x4\n\tNLMSG_DONE                           = 0x3\n\tNLMSG_ERROR                          = 0x2\n\tNLMSG_HDRLEN                         = 0x10\n\tNLMSG_MIN_TYPE                       = 0x10\n\tNLMSG_NOOP                           = 0x1\n\tNLMSG_OVERRUN                        = 0x4\n\tNLM_F_ACK                            = 0x4\n\tNLM_F_ACK_TLVS                       = 0x200\n\tNLM_F_APPEND                         = 0x800\n\tNLM_F_ATOMIC                         = 0x400\n\tNLM_F_CAPPED                         = 0x100\n\tNLM_F_CREATE                         = 0x400\n\tNLM_F_DUMP                           = 0x300\n\tNLM_F_DUMP_FILTERED                  = 0x20\n\tNLM_F_DUMP_INTR                      = 0x10\n\tNLM_F_ECHO                           = 0x8\n\tNLM_F_EXCL                           = 0x200\n\tNLM_F_MATCH                          = 0x200\n\tNLM_F_MULTI                          = 0x2\n\tNLM_F_NONREC                         = 0x100\n\tNLM_F_REPLACE                        = 0x100\n\tNLM_F_REQUEST                        = 0x1\n\tNLM_F_ROOT                           = 0x100\n\tNOFLSH                               = 0x80\n\tNSFS_MAGIC                           = 0x6e736673\n\tOCFS2_SUPER_MAGIC                    = 0x7461636f\n\tOCRNL                                = 0x8\n\tOFDEL                                = 0x80\n\tOFILL                                = 0x40\n\tOLCUC                                = 0x2\n\tONLCR                                = 0x4\n\tONLRET                               = 0x20\n\tONOCR                                = 0x10\n\tOPENPROM_SUPER_MAGIC                 = 0x9fa1\n\tOPOST                                = 0x1\n\tOVERLAYFS_SUPER_MAGIC                = 0x794c7630\n\tO_ACCMODE                            = 0x3\n\tO_APPEND                             = 0x400\n\tO_ASYNC                              = 0x2000\n\tO_CLOEXEC                            = 0x80000\n\tO_CREAT                              = 0x40\n\tO_DIRECT                             = 0x4000\n\tO_DIRECTORY                          = 0x10000\n\tO_DSYNC                              = 0x1000\n\tO_EXCL                               = 0x80\n\tO_FSYNC                              = 0x101000\n\tO_LARGEFILE                          = 0x0\n\tO_NDELAY                             = 0x800\n\tO_NOATIME                            = 0x40000\n\tO_NOCTTY                             = 0x100\n\tO_NOFOLLOW                           = 0x20000\n\tO_NONBLOCK                           = 0x800\n\tO_PATH                               = 0x200000\n\tO_RDONLY                             = 0x0\n\tO_RDWR                               = 0x2\n\tO_RSYNC                              = 0x101000\n\tO_SYNC                               = 0x101000\n\tO_TMPFILE                            = 0x410000\n\tO_TRUNC                              = 0x200\n\tO_WRONLY                             = 0x1\n\tPACKET_ADD_MEMBERSHIP                = 0x1\n\tPACKET_AUXDATA                       = 0x8\n\tPACKET_BROADCAST                     = 0x1\n\tPACKET_COPY_THRESH                   = 0x7\n\tPACKET_DROP_MEMBERSHIP               = 0x2\n\tPACKET_FANOUT                        = 0x12\n\tPACKET_FANOUT_CBPF                   = 0x6\n\tPACKET_FANOUT_CPU                    = 0x2\n\tPACKET_FANOUT_DATA                   = 0x16\n\tPACKET_FANOUT_EBPF                   = 0x7\n\tPACKET_FANOUT_FLAG_DEFRAG            = 0x8000\n\tPACKET_FANOUT_FLAG_ROLLOVER          = 0x1000\n\tPACKET_FANOUT_FLAG_UNIQUEID          = 0x2000\n\tPACKET_FANOUT_HASH                   = 0x0\n\tPACKET_FANOUT_LB                     = 0x1\n\tPACKET_FANOUT_QM                     = 0x5\n\tPACKET_FANOUT_RND                    = 0x4\n\tPACKET_FANOUT_ROLLOVER               = 0x3\n\tPACKET_FASTROUTE                     = 0x6\n\tPACKET_HDRLEN                        = 0xb\n\tPACKET_HOST                          = 0x0\n\tPACKET_IGNORE_OUTGOING               = 0x17\n\tPACKET_KERNEL                        = 0x7\n\tPACKET_LOOPBACK                      = 0x5\n\tPACKET_LOSS                          = 0xe\n\tPACKET_MR_ALLMULTI                   = 0x2\n\tPACKET_MR_MULTICAST                  = 0x0\n\tPACKET_MR_PROMISC                    = 0x1\n\tPACKET_MR_UNICAST                    = 0x3\n\tPACKET_MULTICAST                     = 0x2\n\tPACKET_ORIGDEV                       = 0x9\n\tPACKET_OTHERHOST                     = 0x3\n\tPACKET_OUTGOING                      = 0x4\n\tPACKET_QDISC_BYPASS                  = 0x14\n\tPACKET_RECV_OUTPUT                   = 0x3\n\tPACKET_RESERVE                       = 0xc\n\tPACKET_ROLLOVER_STATS                = 0x15\n\tPACKET_RX_RING                       = 0x5\n\tPACKET_STATISTICS                    = 0x6\n\tPACKET_TIMESTAMP                     = 0x11\n\tPACKET_TX_HAS_OFF                    = 0x13\n\tPACKET_TX_RING                       = 0xd\n\tPACKET_TX_TIMESTAMP                  = 0x10\n\tPACKET_USER                          = 0x6\n\tPACKET_VERSION                       = 0xa\n\tPACKET_VNET_HDR                      = 0xf\n\tPARENB                               = 0x100\n\tPARITY_CRC16_PR0                     = 0x2\n\tPARITY_CRC16_PR0_CCITT               = 0x4\n\tPARITY_CRC16_PR1                     = 0x3\n\tPARITY_CRC16_PR1_CCITT               = 0x5\n\tPARITY_CRC32_PR0_CCITT               = 0x6\n\tPARITY_CRC32_PR1_CCITT               = 0x7\n\tPARITY_DEFAULT                       = 0x0\n\tPARITY_NONE                          = 0x1\n\tPARMRK                               = 0x8\n\tPARODD                               = 0x200\n\tPENDIN                               = 0x4000\n\tPERF_EVENT_IOC_DISABLE               = 0x2401\n\tPERF_EVENT_IOC_ENABLE                = 0x2400\n\tPERF_EVENT_IOC_ID                    = 0x80082407\n\tPERF_EVENT_IOC_MODIFY_ATTRIBUTES     = 0x4008240b\n\tPERF_EVENT_IOC_PAUSE_OUTPUT          = 0x40042409\n\tPERF_EVENT_IOC_PERIOD                = 0x40082404\n\tPERF_EVENT_IOC_QUERY_BPF             = 0xc008240a\n\tPERF_EVENT_IOC_REFRESH               = 0x2402\n\tPERF_EVENT_IOC_RESET                 = 0x2403\n\tPERF_EVENT_IOC_SET_BPF               = 0x40042408\n\tPERF_EVENT_IOC_SET_FILTER            = 0x40082406\n\tPERF_EVENT_IOC_SET_OUTPUT            = 0x2405\n\tPIPEFS_MAGIC                         = 0x50495045\n\tPPPIOCATTACH                         = 0x4004743d\n\tPPPIOCATTCHAN                        = 0x40047438\n\tPPPIOCCONNECT                        = 0x4004743a\n\tPPPIOCDETACH                         = 0x4004743c\n\tPPPIOCDISCONN                        = 0x7439\n\tPPPIOCGASYNCMAP                      = 0x80047458\n\tPPPIOCGCHAN                          = 0x80047437\n\tPPPIOCGDEBUG                         = 0x80047441\n\tPPPIOCGFLAGS                         = 0x8004745a\n\tPPPIOCGIDLE                          = 0x8010743f\n\tPPPIOCGL2TPSTATS                     = 0x80487436\n\tPPPIOCGMRU                           = 0x80047453\n\tPPPIOCGNPMODE                        = 0xc008744c\n\tPPPIOCGRASYNCMAP                     = 0x80047455\n\tPPPIOCGUNIT                          = 0x80047456\n\tPPPIOCGXASYNCMAP                     = 0x80207450\n\tPPPIOCNEWUNIT                        = 0xc004743e\n\tPPPIOCSACTIVE                        = 0x40107446\n\tPPPIOCSASYNCMAP                      = 0x40047457\n\tPPPIOCSCOMPRESS                      = 0x4010744d\n\tPPPIOCSDEBUG                         = 0x40047440\n\tPPPIOCSFLAGS                         = 0x40047459\n\tPPPIOCSMAXCID                        = 0x40047451\n\tPPPIOCSMRRU                          = 0x4004743b\n\tPPPIOCSMRU                           = 0x40047452\n\tPPPIOCSNPMODE                        = 0x4008744b\n\tPPPIOCSPASS                          = 0x40107447\n\tPPPIOCSRASYNCMAP                     = 0x40047454\n\tPPPIOCSXASYNCMAP                     = 0x4020744f\n\tPPPIOCXFERUNIT                       = 0x744e\n\tPRIO_PGRP                            = 0x1\n\tPRIO_PROCESS                         = 0x0\n\tPRIO_USER                            = 0x2\n\tPROC_SUPER_MAGIC                     = 0x9fa0\n\tPROT_EXEC                            = 0x4\n\tPROT_GROWSDOWN                       = 0x1000000\n\tPROT_GROWSUP                         = 0x2000000\n\tPROT_NONE                            = 0x0\n\tPROT_READ                            = 0x1\n\tPROT_WRITE                           = 0x2\n\tPR_CAPBSET_DROP                      = 0x18\n\tPR_CAPBSET_READ                      = 0x17\n\tPR_CAP_AMBIENT                       = 0x2f\n\tPR_CAP_AMBIENT_CLEAR_ALL             = 0x4\n\tPR_CAP_AMBIENT_IS_SET                = 0x1\n\tPR_CAP_AMBIENT_LOWER                 = 0x3\n\tPR_CAP_AMBIENT_RAISE                 = 0x2\n\tPR_ENDIAN_BIG                        = 0x0\n\tPR_ENDIAN_LITTLE                     = 0x1\n\tPR_ENDIAN_PPC_LITTLE                 = 0x2\n\tPR_FPEMU_NOPRINT                     = 0x1\n\tPR_FPEMU_SIGFPE                      = 0x2\n\tPR_FP_EXC_ASYNC                      = 0x2\n\tPR_FP_EXC_DISABLED                   = 0x0\n\tPR_FP_EXC_DIV                        = 0x10000\n\tPR_FP_EXC_INV                        = 0x100000\n\tPR_FP_EXC_NONRECOV                   = 0x1\n\tPR_FP_EXC_OVF                        = 0x20000\n\tPR_FP_EXC_PRECISE                    = 0x3\n\tPR_FP_EXC_RES                        = 0x80000\n\tPR_FP_EXC_SW_ENABLE                  = 0x80\n\tPR_FP_EXC_UND                        = 0x40000\n\tPR_FP_MODE_FR                        = 0x1\n\tPR_FP_MODE_FRE                       = 0x2\n\tPR_GET_CHILD_SUBREAPER               = 0x25\n\tPR_GET_DUMPABLE                      = 0x3\n\tPR_GET_ENDIAN                        = 0x13\n\tPR_GET_FPEMU                         = 0x9\n\tPR_GET_FPEXC                         = 0xb\n\tPR_GET_FP_MODE                       = 0x2e\n\tPR_GET_KEEPCAPS                      = 0x7\n\tPR_GET_NAME                          = 0x10\n\tPR_GET_NO_NEW_PRIVS                  = 0x27\n\tPR_GET_PDEATHSIG                     = 0x2\n\tPR_GET_SECCOMP                       = 0x15\n\tPR_GET_SECUREBITS                    = 0x1b\n\tPR_GET_SPECULATION_CTRL              = 0x34\n\tPR_GET_THP_DISABLE                   = 0x2a\n\tPR_GET_TID_ADDRESS                   = 0x28\n\tPR_GET_TIMERSLACK                    = 0x1e\n\tPR_GET_TIMING                        = 0xd\n\tPR_GET_TSC                           = 0x19\n\tPR_GET_UNALIGN                       = 0x5\n\tPR_MCE_KILL                          = 0x21\n\tPR_MCE_KILL_CLEAR                    = 0x0\n\tPR_MCE_KILL_DEFAULT                  = 0x2\n\tPR_MCE_KILL_EARLY                    = 0x1\n\tPR_MCE_KILL_GET                      = 0x22\n\tPR_MCE_KILL_LATE                     = 0x0\n\tPR_MCE_KILL_SET                      = 0x1\n\tPR_MPX_DISABLE_MANAGEMENT            = 0x2c\n\tPR_MPX_ENABLE_MANAGEMENT             = 0x2b\n\tPR_PAC_APDAKEY                       = 0x4\n\tPR_PAC_APDBKEY                       = 0x8\n\tPR_PAC_APGAKEY                       = 0x10\n\tPR_PAC_APIAKEY                       = 0x1\n\tPR_PAC_APIBKEY                       = 0x2\n\tPR_PAC_RESET_KEYS                    = 0x36\n\tPR_SET_CHILD_SUBREAPER               = 0x24\n\tPR_SET_DUMPABLE                      = 0x4\n\tPR_SET_ENDIAN                        = 0x14\n\tPR_SET_FPEMU                         = 0xa\n\tPR_SET_FPEXC                         = 0xc\n\tPR_SET_FP_MODE                       = 0x2d\n\tPR_SET_KEEPCAPS                      = 0x8\n\tPR_SET_MM                            = 0x23\n\tPR_SET_MM_ARG_END                    = 0x9\n\tPR_SET_MM_ARG_START                  = 0x8\n\tPR_SET_MM_AUXV                       = 0xc\n\tPR_SET_MM_BRK                        = 0x7\n\tPR_SET_MM_END_CODE                   = 0x2\n\tPR_SET_MM_END_DATA                   = 0x4\n\tPR_SET_MM_ENV_END                    = 0xb\n\tPR_SET_MM_ENV_START                  = 0xa\n\tPR_SET_MM_EXE_FILE                   = 0xd\n\tPR_SET_MM_MAP                        = 0xe\n\tPR_SET_MM_MAP_SIZE                   = 0xf\n\tPR_SET_MM_START_BRK                  = 0x6\n\tPR_SET_MM_START_CODE                 = 0x1\n\tPR_SET_MM_START_DATA                 = 0x3\n\tPR_SET_MM_START_STACK                = 0x5\n\tPR_SET_NAME                          = 0xf\n\tPR_SET_NO_NEW_PRIVS                  = 0x26\n\tPR_SET_PDEATHSIG                     = 0x1\n\tPR_SET_PTRACER                       = 0x59616d61\n\tPR_SET_PTRACER_ANY                   = 0xffffffffffffffff\n\tPR_SET_SECCOMP                       = 0x16\n\tPR_SET_SECUREBITS                    = 0x1c\n\tPR_SET_SPECULATION_CTRL              = 0x35\n\tPR_SET_THP_DISABLE                   = 0x29\n\tPR_SET_TIMERSLACK                    = 0x1d\n\tPR_SET_TIMING                        = 0xe\n\tPR_SET_TSC                           = 0x1a\n\tPR_SET_UNALIGN                       = 0x6\n\tPR_SPEC_DISABLE                      = 0x4\n\tPR_SPEC_DISABLE_NOEXEC               = 0x10\n\tPR_SPEC_ENABLE                       = 0x2\n\tPR_SPEC_FORCE_DISABLE                = 0x8\n\tPR_SPEC_INDIRECT_BRANCH              = 0x1\n\tPR_SPEC_NOT_AFFECTED                 = 0x0\n\tPR_SPEC_PRCTL                        = 0x1\n\tPR_SPEC_STORE_BYPASS                 = 0x0\n\tPR_SVE_GET_VL                        = 0x33\n\tPR_SVE_SET_VL                        = 0x32\n\tPR_SVE_SET_VL_ONEXEC                 = 0x40000\n\tPR_SVE_VL_INHERIT                    = 0x20000\n\tPR_SVE_VL_LEN_MASK                   = 0xffff\n\tPR_TASK_PERF_EVENTS_DISABLE          = 0x1f\n\tPR_TASK_PERF_EVENTS_ENABLE           = 0x20\n\tPR_TIMING_STATISTICAL                = 0x0\n\tPR_TIMING_TIMESTAMP                  = 0x1\n\tPR_TSC_ENABLE                        = 0x1\n\tPR_TSC_SIGSEGV                       = 0x2\n\tPR_UNALIGN_NOPRINT                   = 0x1\n\tPR_UNALIGN_SIGBUS                    = 0x2\n\tPSTOREFS_MAGIC                       = 0x6165676c\n\tPTRACE_ATTACH                        = 0x10\n\tPTRACE_CONT                          = 0x7\n\tPTRACE_DETACH                        = 0x11\n\tPTRACE_EVENT_CLONE                   = 0x3\n\tPTRACE_EVENT_EXEC                    = 0x4\n\tPTRACE_EVENT_EXIT                    = 0x6\n\tPTRACE_EVENT_FORK                    = 0x1\n\tPTRACE_EVENT_SECCOMP                 = 0x7\n\tPTRACE_EVENT_STOP                    = 0x80\n\tPTRACE_EVENT_VFORK                   = 0x2\n\tPTRACE_EVENT_VFORK_DONE              = 0x5\n\tPTRACE_GETEVENTMSG                   = 0x4201\n\tPTRACE_GETREGS                       = 0xc\n\tPTRACE_GETREGSET                     = 0x4204\n\tPTRACE_GETSIGINFO                    = 0x4202\n\tPTRACE_GETSIGMASK                    = 0x420a\n\tPTRACE_INTERRUPT                     = 0x4207\n\tPTRACE_KILL                          = 0x8\n\tPTRACE_LISTEN                        = 0x4208\n\tPTRACE_O_EXITKILL                    = 0x100000\n\tPTRACE_O_MASK                        = 0x3000ff\n\tPTRACE_O_SUSPEND_SECCOMP             = 0x200000\n\tPTRACE_O_TRACECLONE                  = 0x8\n\tPTRACE_O_TRACEEXEC                   = 0x10\n\tPTRACE_O_TRACEEXIT                   = 0x40\n\tPTRACE_O_TRACEFORK                   = 0x2\n\tPTRACE_O_TRACESECCOMP                = 0x80\n\tPTRACE_O_TRACESYSGOOD                = 0x1\n\tPTRACE_O_TRACEVFORK                  = 0x4\n\tPTRACE_O_TRACEVFORKDONE              = 0x20\n\tPTRACE_PEEKDATA                      = 0x2\n\tPTRACE_PEEKSIGINFO                   = 0x4209\n\tPTRACE_PEEKSIGINFO_SHARED            = 0x1\n\tPTRACE_PEEKTEXT                      = 0x1\n\tPTRACE_PEEKUSR                       = 0x3\n\tPTRACE_POKEDATA                      = 0x5\n\tPTRACE_POKETEXT                      = 0x4\n\tPTRACE_POKEUSR                       = 0x6\n\tPTRACE_SECCOMP_GET_FILTER            = 0x420c\n\tPTRACE_SECCOMP_GET_METADATA          = 0x420d\n\tPTRACE_SEIZE                         = 0x4206\n\tPTRACE_SETOPTIONS                    = 0x4200\n\tPTRACE_SETREGS                       = 0xd\n\tPTRACE_SETREGSET                     = 0x4205\n\tPTRACE_SETSIGINFO                    = 0x4203\n\tPTRACE_SETSIGMASK                    = 0x420b\n\tPTRACE_SINGLESTEP                    = 0x9\n\tPTRACE_SYSCALL                       = 0x18\n\tPTRACE_TRACEME                       = 0x0\n\tQNX4_SUPER_MAGIC                     = 0x2f\n\tQNX6_SUPER_MAGIC                     = 0x68191122\n\tRAMFS_MAGIC                          = 0x858458f6\n\tRDTGROUP_SUPER_MAGIC                 = 0x7655821\n\tREISERFS_SUPER_MAGIC                 = 0x52654973\n\tRENAME_EXCHANGE                      = 0x2\n\tRENAME_NOREPLACE                     = 0x1\n\tRENAME_WHITEOUT                      = 0x4\n\tRLIMIT_AS                            = 0x9\n\tRLIMIT_CORE                          = 0x4\n\tRLIMIT_CPU                           = 0x0\n\tRLIMIT_DATA                          = 0x2\n\tRLIMIT_FSIZE                         = 0x1\n\tRLIMIT_LOCKS                         = 0xa\n\tRLIMIT_MEMLOCK                       = 0x8\n\tRLIMIT_MSGQUEUE                      = 0xc\n\tRLIMIT_NICE                          = 0xd\n\tRLIMIT_NOFILE                        = 0x7\n\tRLIMIT_NPROC                         = 0x6\n\tRLIMIT_RSS                           = 0x5\n\tRLIMIT_RTPRIO                        = 0xe\n\tRLIMIT_RTTIME                        = 0xf\n\tRLIMIT_SIGPENDING                    = 0xb\n\tRLIMIT_STACK                         = 0x3\n\tRLIM_INFINITY                        = 0xffffffffffffffff\n\tRNDADDENTROPY                        = 0x40085203\n\tRNDADDTOENTCNT                       = 0x40045201\n\tRNDCLEARPOOL                         = 0x5206\n\tRNDGETENTCNT                         = 0x80045200\n\tRNDGETPOOL                           = 0x80085202\n\tRNDRESEEDCRNG                        = 0x5207\n\tRNDZAPENTCNT                         = 0x5204\n\tRTAX_ADVMSS                          = 0x8\n\tRTAX_CC_ALGO                         = 0x10\n\tRTAX_CWND                            = 0x7\n\tRTAX_FASTOPEN_NO_COOKIE              = 0x11\n\tRTAX_FEATURES                        = 0xc\n\tRTAX_FEATURE_ALLFRAG                 = 0x8\n\tRTAX_FEATURE_ECN                     = 0x1\n\tRTAX_FEATURE_MASK                    = 0xf\n\tRTAX_FEATURE_SACK                    = 0x2\n\tRTAX_FEATURE_TIMESTAMP               = 0x4\n\tRTAX_HOPLIMIT                        = 0xa\n\tRTAX_INITCWND                        = 0xb\n\tRTAX_INITRWND                        = 0xe\n\tRTAX_LOCK                            = 0x1\n\tRTAX_MAX                             = 0x11\n\tRTAX_MTU                             = 0x2\n\tRTAX_QUICKACK                        = 0xf\n\tRTAX_REORDERING                      = 0x9\n\tRTAX_RTO_MIN                         = 0xd\n\tRTAX_RTT                             = 0x4\n\tRTAX_RTTVAR                          = 0x5\n\tRTAX_SSTHRESH                        = 0x6\n\tRTAX_UNSPEC                          = 0x0\n\tRTAX_WINDOW                          = 0x3\n\tRTA_ALIGNTO                          = 0x4\n\tRTA_MAX                              = 0x1d\n\tRTCF_DIRECTSRC                       = 0x4000000\n\tRTCF_DOREDIRECT                      = 0x1000000\n\tRTCF_LOG                             = 0x2000000\n\tRTCF_MASQ                            = 0x400000\n\tRTCF_NAT                             = 0x800000\n\tRTCF_VALVE                           = 0x200000\n\tRTC_AF                               = 0x20\n\tRTC_AIE_OFF                          = 0x7002\n\tRTC_AIE_ON                           = 0x7001\n\tRTC_ALM_READ                         = 0x80247008\n\tRTC_ALM_SET                          = 0x40247007\n\tRTC_EPOCH_READ                       = 0x8008700d\n\tRTC_EPOCH_SET                        = 0x4008700e\n\tRTC_IRQF                             = 0x80\n\tRTC_IRQP_READ                        = 0x8008700b\n\tRTC_IRQP_SET                         = 0x4008700c\n\tRTC_MAX_FREQ                         = 0x2000\n\tRTC_PF                               = 0x40\n\tRTC_PIE_OFF                          = 0x7006\n\tRTC_PIE_ON                           = 0x7005\n\tRTC_PLL_GET                          = 0x80207011\n\tRTC_PLL_SET                          = 0x40207012\n\tRTC_RD_TIME                          = 0x80247009\n\tRTC_SET_TIME                         = 0x4024700a\n\tRTC_UF                               = 0x10\n\tRTC_UIE_OFF                          = 0x7004\n\tRTC_UIE_ON                           = 0x7003\n\tRTC_VL_CLR                           = 0x7014\n\tRTC_VL_READ                          = 0x80047013\n\tRTC_WIE_OFF                          = 0x7010\n\tRTC_WIE_ON                           = 0x700f\n\tRTC_WKALM_RD                         = 0x80287010\n\tRTC_WKALM_SET                        = 0x4028700f\n\tRTF_ADDRCLASSMASK                    = 0xf8000000\n\tRTF_ADDRCONF                         = 0x40000\n\tRTF_ALLONLINK                        = 0x20000\n\tRTF_BROADCAST                        = 0x10000000\n\tRTF_CACHE                            = 0x1000000\n\tRTF_DEFAULT                          = 0x10000\n\tRTF_DYNAMIC                          = 0x10\n\tRTF_FLOW                             = 0x2000000\n\tRTF_GATEWAY                          = 0x2\n\tRTF_HOST                             = 0x4\n\tRTF_INTERFACE                        = 0x40000000\n\tRTF_IRTT                             = 0x100\n\tRTF_LINKRT                           = 0x100000\n\tRTF_LOCAL                            = 0x80000000\n\tRTF_MODIFIED                         = 0x20\n\tRTF_MSS                              = 0x40\n\tRTF_MTU                              = 0x40\n\tRTF_MULTICAST                        = 0x20000000\n\tRTF_NAT                              = 0x8000000\n\tRTF_NOFORWARD                        = 0x1000\n\tRTF_NONEXTHOP                        = 0x200000\n\tRTF_NOPMTUDISC                       = 0x4000\n\tRTF_POLICY                           = 0x4000000\n\tRTF_REINSTATE                        = 0x8\n\tRTF_REJECT                           = 0x200\n\tRTF_STATIC                           = 0x400\n\tRTF_THROW                            = 0x2000\n\tRTF_UP                               = 0x1\n\tRTF_WINDOW                           = 0x80\n\tRTF_XRESOLVE                         = 0x800\n\tRTM_BASE                             = 0x10\n\tRTM_DELACTION                        = 0x31\n\tRTM_DELADDR                          = 0x15\n\tRTM_DELADDRLABEL                     = 0x49\n\tRTM_DELCHAIN                         = 0x65\n\tRTM_DELLINK                          = 0x11\n\tRTM_DELMDB                           = 0x55\n\tRTM_DELNEIGH                         = 0x1d\n\tRTM_DELNETCONF                       = 0x51\n\tRTM_DELNSID                          = 0x59\n\tRTM_DELQDISC                         = 0x25\n\tRTM_DELROUTE                         = 0x19\n\tRTM_DELRULE                          = 0x21\n\tRTM_DELTCLASS                        = 0x29\n\tRTM_DELTFILTER                       = 0x2d\n\tRTM_F_CLONED                         = 0x200\n\tRTM_F_EQUALIZE                       = 0x400\n\tRTM_F_FIB_MATCH                      = 0x2000\n\tRTM_F_LOOKUP_TABLE                   = 0x1000\n\tRTM_F_NOTIFY                         = 0x100\n\tRTM_F_PREFIX                         = 0x800\n\tRTM_GETACTION                        = 0x32\n\tRTM_GETADDR                          = 0x16\n\tRTM_GETADDRLABEL                     = 0x4a\n\tRTM_GETANYCAST                       = 0x3e\n\tRTM_GETCHAIN                         = 0x66\n\tRTM_GETDCB                           = 0x4e\n\tRTM_GETLINK                          = 0x12\n\tRTM_GETMDB                           = 0x56\n\tRTM_GETMULTICAST                     = 0x3a\n\tRTM_GETNEIGH                         = 0x1e\n\tRTM_GETNEIGHTBL                      = 0x42\n\tRTM_GETNETCONF                       = 0x52\n\tRTM_GETNSID                          = 0x5a\n\tRTM_GETQDISC                         = 0x26\n\tRTM_GETROUTE                         = 0x1a\n\tRTM_GETRULE                          = 0x22\n\tRTM_GETSTATS                         = 0x5e\n\tRTM_GETTCLASS                        = 0x2a\n\tRTM_GETTFILTER                       = 0x2e\n\tRTM_MAX                              = 0x67\n\tRTM_NEWACTION                        = 0x30\n\tRTM_NEWADDR                          = 0x14\n\tRTM_NEWADDRLABEL                     = 0x48\n\tRTM_NEWCACHEREPORT                   = 0x60\n\tRTM_NEWCHAIN                         = 0x64\n\tRTM_NEWLINK                          = 0x10\n\tRTM_NEWMDB                           = 0x54\n\tRTM_NEWNDUSEROPT                     = 0x44\n\tRTM_NEWNEIGH                         = 0x1c\n\tRTM_NEWNEIGHTBL                      = 0x40\n\tRTM_NEWNETCONF                       = 0x50\n\tRTM_NEWNSID                          = 0x58\n\tRTM_NEWPREFIX                        = 0x34\n\tRTM_NEWQDISC                         = 0x24\n\tRTM_NEWROUTE                         = 0x18\n\tRTM_NEWRULE                          = 0x20\n\tRTM_NEWSTATS                         = 0x5c\n\tRTM_NEWTCLASS                        = 0x28\n\tRTM_NEWTFILTER                       = 0x2c\n\tRTM_NR_FAMILIES                      = 0x16\n\tRTM_NR_MSGTYPES                      = 0x58\n\tRTM_SETDCB                           = 0x4f\n\tRTM_SETLINK                          = 0x13\n\tRTM_SETNEIGHTBL                      = 0x43\n\tRTNH_ALIGNTO                         = 0x4\n\tRTNH_COMPARE_MASK                    = 0x19\n\tRTNH_F_DEAD                          = 0x1\n\tRTNH_F_LINKDOWN                      = 0x10\n\tRTNH_F_OFFLOAD                       = 0x8\n\tRTNH_F_ONLINK                        = 0x4\n\tRTNH_F_PERVASIVE                     = 0x2\n\tRTNH_F_UNRESOLVED                    = 0x20\n\tRTN_MAX                              = 0xb\n\tRTPROT_BABEL                         = 0x2a\n\tRTPROT_BGP                           = 0xba\n\tRTPROT_BIRD                          = 0xc\n\tRTPROT_BOOT                          = 0x3\n\tRTPROT_DHCP                          = 0x10\n\tRTPROT_DNROUTED                      = 0xd\n\tRTPROT_EIGRP                         = 0xc0\n\tRTPROT_GATED                         = 0x8\n\tRTPROT_ISIS                          = 0xbb\n\tRTPROT_KERNEL                        = 0x2\n\tRTPROT_MROUTED                       = 0x11\n\tRTPROT_MRT                           = 0xa\n\tRTPROT_NTK                           = 0xf\n\tRTPROT_OSPF                          = 0xbc\n\tRTPROT_RA                            = 0x9\n\tRTPROT_REDIRECT                      = 0x1\n\tRTPROT_RIP                           = 0xbd\n\tRTPROT_STATIC                        = 0x4\n\tRTPROT_UNSPEC                        = 0x0\n\tRTPROT_XORP                          = 0xe\n\tRTPROT_ZEBRA                         = 0xb\n\tRT_CLASS_DEFAULT                     = 0xfd\n\tRT_CLASS_LOCAL                       = 0xff\n\tRT_CLASS_MAIN                        = 0xfe\n\tRT_CLASS_MAX                         = 0xff\n\tRT_CLASS_UNSPEC                      = 0x0\n\tRUSAGE_CHILDREN                      = -0x1\n\tRUSAGE_SELF                          = 0x0\n\tRUSAGE_THREAD                        = 0x1\n\tSCM_CREDENTIALS                      = 0x2\n\tSCM_RIGHTS                           = 0x1\n\tSCM_TIMESTAMP                        = 0x1d\n\tSCM_TIMESTAMPING                     = 0x25\n\tSCM_TIMESTAMPING_OPT_STATS           = 0x36\n\tSCM_TIMESTAMPING_PKTINFO             = 0x3a\n\tSCM_TIMESTAMPNS                      = 0x23\n\tSCM_TXTIME                           = 0x3d\n\tSCM_WIFI_STATUS                      = 0x29\n\tSC_LOG_FLUSH                         = 0x100000\n\tSECCOMP_MODE_DISABLED                = 0x0\n\tSECCOMP_MODE_FILTER                  = 0x2\n\tSECCOMP_MODE_STRICT                  = 0x1\n\tSECURITYFS_MAGIC                     = 0x73636673\n\tSELINUX_MAGIC                        = 0xf97cff8c\n\tSFD_CLOEXEC                          = 0x80000\n\tSFD_NONBLOCK                         = 0x800\n\tSHUT_RD                              = 0x0\n\tSHUT_RDWR                            = 0x2\n\tSHUT_WR                              = 0x1\n\tSIOCADDDLCI                          = 0x8980\n\tSIOCADDMULTI                         = 0x8931\n\tSIOCADDRT                            = 0x890b\n\tSIOCATMARK                           = 0x8905\n\tSIOCBONDCHANGEACTIVE                 = 0x8995\n\tSIOCBONDENSLAVE                      = 0x8990\n\tSIOCBONDINFOQUERY                    = 0x8994\n\tSIOCBONDRELEASE                      = 0x8991\n\tSIOCBONDSETHWADDR                    = 0x8992\n\tSIOCBONDSLAVEINFOQUERY               = 0x8993\n\tSIOCBRADDBR                          = 0x89a0\n\tSIOCBRADDIF                          = 0x89a2\n\tSIOCBRDELBR                          = 0x89a1\n\tSIOCBRDELIF                          = 0x89a3\n\tSIOCDARP                             = 0x8953\n\tSIOCDELDLCI                          = 0x8981\n\tSIOCDELMULTI                         = 0x8932\n\tSIOCDELRT                            = 0x890c\n\tSIOCDEVPRIVATE                       = 0x89f0\n\tSIOCDIFADDR                          = 0x8936\n\tSIOCDRARP                            = 0x8960\n\tSIOCETHTOOL                          = 0x8946\n\tSIOCGARP                             = 0x8954\n\tSIOCGHWTSTAMP                        = 0x89b1\n\tSIOCGIFADDR                          = 0x8915\n\tSIOCGIFBR                            = 0x8940\n\tSIOCGIFBRDADDR                       = 0x8919\n\tSIOCGIFCONF                          = 0x8912\n\tSIOCGIFCOUNT                         = 0x8938\n\tSIOCGIFDSTADDR                       = 0x8917\n\tSIOCGIFENCAP                         = 0x8925\n\tSIOCGIFFLAGS                         = 0x8913\n\tSIOCGIFHWADDR                        = 0x8927\n\tSIOCGIFINDEX                         = 0x8933\n\tSIOCGIFMAP                           = 0x8970\n\tSIOCGIFMEM                           = 0x891f\n\tSIOCGIFMETRIC                        = 0x891d\n\tSIOCGIFMTU                           = 0x8921\n\tSIOCGIFNAME                          = 0x8910\n\tSIOCGIFNETMASK                       = 0x891b\n\tSIOCGIFPFLAGS                        = 0x8935\n\tSIOCGIFSLAVE                         = 0x8929\n\tSIOCGIFTXQLEN                        = 0x8942\n\tSIOCGIFVLAN                          = 0x8982\n\tSIOCGMIIPHY                          = 0x8947\n\tSIOCGMIIREG                          = 0x8948\n\tSIOCGPGRP                            = 0x8904\n\tSIOCGPPPCSTATS                       = 0x89f2\n\tSIOCGPPPSTATS                        = 0x89f0\n\tSIOCGPPPVER                          = 0x89f1\n\tSIOCGRARP                            = 0x8961\n\tSIOCGSKNS                            = 0x894c\n\tSIOCGSTAMP                           = 0x8906\n\tSIOCGSTAMPNS                         = 0x8907\n\tSIOCINQ                              = 0x541b\n\tSIOCOUTQ                             = 0x5411\n\tSIOCOUTQNSD                          = 0x894b\n\tSIOCPROTOPRIVATE                     = 0x89e0\n\tSIOCRTMSG                            = 0x890d\n\tSIOCSARP                             = 0x8955\n\tSIOCSHWTSTAMP                        = 0x89b0\n\tSIOCSIFADDR                          = 0x8916\n\tSIOCSIFBR                            = 0x8941\n\tSIOCSIFBRDADDR                       = 0x891a\n\tSIOCSIFDSTADDR                       = 0x8918\n\tSIOCSIFENCAP                         = 0x8926\n\tSIOCSIFFLAGS                         = 0x8914\n\tSIOCSIFHWADDR                        = 0x8924\n\tSIOCSIFHWBROADCAST                   = 0x8937\n\tSIOCSIFLINK                          = 0x8911\n\tSIOCSIFMAP                           = 0x8971\n\tSIOCSIFMEM                           = 0x8920\n\tSIOCSIFMETRIC                        = 0x891e\n\tSIOCSIFMTU                           = 0x8922\n\tSIOCSIFNAME                          = 0x8923\n\tSIOCSIFNETMASK                       = 0x891c\n\tSIOCSIFPFLAGS                        = 0x8934\n\tSIOCSIFSLAVE                         = 0x8930\n\tSIOCSIFTXQLEN                        = 0x8943\n\tSIOCSIFVLAN                          = 0x8983\n\tSIOCSMIIREG                          = 0x8949\n\tSIOCSPGRP                            = 0x8902\n\tSIOCSRARP                            = 0x8962\n\tSIOCWANDEV                           = 0x894a\n\tSMACK_MAGIC                          = 0x43415d53\n\tSMART_AUTOSAVE                       = 0xd2\n\tSMART_AUTO_OFFLINE                   = 0xdb\n\tSMART_DISABLE                        = 0xd9\n\tSMART_ENABLE                         = 0xd8\n\tSMART_HCYL_PASS                      = 0xc2\n\tSMART_IMMEDIATE_OFFLINE              = 0xd4\n\tSMART_LCYL_PASS                      = 0x4f\n\tSMART_READ_LOG_SECTOR                = 0xd5\n\tSMART_READ_THRESHOLDS                = 0xd1\n\tSMART_READ_VALUES                    = 0xd0\n\tSMART_SAVE                           = 0xd3\n\tSMART_STATUS                         = 0xda\n\tSMART_WRITE_LOG_SECTOR               = 0xd6\n\tSMART_WRITE_THRESHOLDS               = 0xd7\n\tSMB_SUPER_MAGIC                      = 0x517b\n\tSOCKFS_MAGIC                         = 0x534f434b\n\tSOCK_CLOEXEC                         = 0x80000\n\tSOCK_DCCP                            = 0x6\n\tSOCK_DGRAM                           = 0x2\n\tSOCK_IOC_TYPE                        = 0x89\n\tSOCK_NONBLOCK                        = 0x800\n\tSOCK_PACKET                          = 0xa\n\tSOCK_RAW                             = 0x3\n\tSOCK_RDM                             = 0x4\n\tSOCK_SEQPACKET                       = 0x5\n\tSOCK_STREAM                          = 0x1\n\tSOL_AAL                              = 0x109\n\tSOL_ALG                              = 0x117\n\tSOL_ATM                              = 0x108\n\tSOL_CAIF                             = 0x116\n\tSOL_CAN_BASE                         = 0x64\n\tSOL_DCCP                             = 0x10d\n\tSOL_DECNET                           = 0x105\n\tSOL_ICMPV6                           = 0x3a\n\tSOL_IP                               = 0x0\n\tSOL_IPV6                             = 0x29\n\tSOL_IRDA                             = 0x10a\n\tSOL_IUCV                             = 0x115\n\tSOL_KCM                              = 0x119\n\tSOL_LLC                              = 0x10c\n\tSOL_NETBEUI                          = 0x10b\n\tSOL_NETLINK                          = 0x10e\n\tSOL_NFC                              = 0x118\n\tSOL_PACKET                           = 0x107\n\tSOL_PNPIPE                           = 0x113\n\tSOL_PPPOL2TP                         = 0x111\n\tSOL_RAW                              = 0xff\n\tSOL_RDS                              = 0x114\n\tSOL_RXRPC                            = 0x110\n\tSOL_SOCKET                           = 0x1\n\tSOL_TCP                              = 0x6\n\tSOL_TIPC                             = 0x10f\n\tSOL_TLS                              = 0x11a\n\tSOL_X25                              = 0x106\n\tSOL_XDP                              = 0x11b\n\tSOMAXCONN                            = 0x80\n\tSO_ACCEPTCONN                        = 0x1e\n\tSO_ATTACH_BPF                        = 0x32\n\tSO_ATTACH_FILTER                     = 0x1a\n\tSO_ATTACH_REUSEPORT_CBPF             = 0x33\n\tSO_ATTACH_REUSEPORT_EBPF             = 0x34\n\tSO_BINDTODEVICE                      = 0x19\n\tSO_BINDTOIFINDEX                     = 0x3e\n\tSO_BPF_EXTENSIONS                    = 0x30\n\tSO_BROADCAST                         = 0x6\n\tSO_BSDCOMPAT                         = 0xe\n\tSO_BUSY_POLL                         = 0x2e\n\tSO_CNX_ADVICE                        = 0x35\n\tSO_COOKIE                            = 0x39\n\tSO_DEBUG                             = 0x1\n\tSO_DETACH_BPF                        = 0x1b\n\tSO_DETACH_FILTER                     = 0x1b\n\tSO_DOMAIN                            = 0x27\n\tSO_DONTROUTE                         = 0x5\n\tSO_EE_CODE_TXTIME_INVALID_PARAM      = 0x1\n\tSO_EE_CODE_TXTIME_MISSED             = 0x2\n\tSO_EE_CODE_ZEROCOPY_COPIED           = 0x1\n\tSO_EE_ORIGIN_ICMP                    = 0x2\n\tSO_EE_ORIGIN_ICMP6                   = 0x3\n\tSO_EE_ORIGIN_LOCAL                   = 0x1\n\tSO_EE_ORIGIN_NONE                    = 0x0\n\tSO_EE_ORIGIN_TIMESTAMPING            = 0x4\n\tSO_EE_ORIGIN_TXSTATUS                = 0x4\n\tSO_EE_ORIGIN_TXTIME                  = 0x6\n\tSO_EE_ORIGIN_ZEROCOPY                = 0x5\n\tSO_ERROR                             = 0x4\n\tSO_GET_FILTER                        = 0x1a\n\tSO_INCOMING_CPU                      = 0x31\n\tSO_INCOMING_NAPI_ID                  = 0x38\n\tSO_KEEPALIVE                         = 0x9\n\tSO_LINGER                            = 0xd\n\tSO_LOCK_FILTER                       = 0x2c\n\tSO_MARK                              = 0x24\n\tSO_MAX_PACING_RATE                   = 0x2f\n\tSO_MEMINFO                           = 0x37\n\tSO_NOFCS                             = 0x2b\n\tSO_NO_CHECK                          = 0xb\n\tSO_OOBINLINE                         = 0xa\n\tSO_PASSCRED                          = 0x10\n\tSO_PASSSEC                           = 0x22\n\tSO_PEEK_OFF                          = 0x2a\n\tSO_PEERCRED                          = 0x11\n\tSO_PEERGROUPS                        = 0x3b\n\tSO_PEERNAME                          = 0x1c\n\tSO_PEERSEC                           = 0x1f\n\tSO_PRIORITY                          = 0xc\n\tSO_PROTOCOL                          = 0x26\n\tSO_RCVBUF                            = 0x8\n\tSO_RCVBUFFORCE                       = 0x21\n\tSO_RCVLOWAT                          = 0x12\n\tSO_RCVTIMEO                          = 0x14\n\tSO_RCVTIMEO_NEW                      = 0x42\n\tSO_RCVTIMEO_OLD                      = 0x14\n\tSO_REUSEADDR                         = 0x2\n\tSO_REUSEPORT                         = 0xf\n\tSO_RXQ_OVFL                          = 0x28\n\tSO_SECURITY_AUTHENTICATION           = 0x16\n\tSO_SECURITY_ENCRYPTION_NETWORK       = 0x18\n\tSO_SECURITY_ENCRYPTION_TRANSPORT     = 0x17\n\tSO_SELECT_ERR_QUEUE                  = 0x2d\n\tSO_SNDBUF                            = 0x7\n\tSO_SNDBUFFORCE                       = 0x20\n\tSO_SNDLOWAT                          = 0x13\n\tSO_SNDTIMEO                          = 0x15\n\tSO_SNDTIMEO_NEW                      = 0x43\n\tSO_SNDTIMEO_OLD                      = 0x15\n\tSO_TIMESTAMP                         = 0x1d\n\tSO_TIMESTAMPING                      = 0x25\n\tSO_TIMESTAMPING_NEW                  = 0x41\n\tSO_TIMESTAMPING_OLD                  = 0x25\n\tSO_TIMESTAMPNS                       = 0x23\n\tSO_TIMESTAMPNS_NEW                   = 0x40\n\tSO_TIMESTAMPNS_OLD                   = 0x23\n\tSO_TIMESTAMP_NEW                     = 0x3f\n\tSO_TIMESTAMP_OLD                     = 0x1d\n\tSO_TXTIME                            = 0x3d\n\tSO_TYPE                              = 0x3\n\tSO_VM_SOCKETS_BUFFER_MAX_SIZE        = 0x2\n\tSO_VM_SOCKETS_BUFFER_MIN_SIZE        = 0x1\n\tSO_VM_SOCKETS_BUFFER_SIZE            = 0x0\n\tSO_VM_SOCKETS_CONNECT_TIMEOUT        = 0x6\n\tSO_VM_SOCKETS_NONBLOCK_TXRX          = 0x7\n\tSO_VM_SOCKETS_PEER_HOST_VM_ID        = 0x3\n\tSO_VM_SOCKETS_TRUSTED                = 0x5\n\tSO_WIFI_STATUS                       = 0x29\n\tSO_ZEROCOPY                          = 0x3c\n\tSPLICE_F_GIFT                        = 0x8\n\tSPLICE_F_MORE                        = 0x4\n\tSPLICE_F_MOVE                        = 0x1\n\tSPLICE_F_NONBLOCK                    = 0x2\n\tSQUASHFS_MAGIC                       = 0x73717368\n\tSTACK_END_MAGIC                      = 0x57ac6e9d\n\tSTATX_ALL                            = 0xfff\n\tSTATX_ATIME                          = 0x20\n\tSTATX_ATTR_APPEND                    = 0x20\n\tSTATX_ATTR_AUTOMOUNT                 = 0x1000\n\tSTATX_ATTR_COMPRESSED                = 0x4\n\tSTATX_ATTR_ENCRYPTED                 = 0x800\n\tSTATX_ATTR_IMMUTABLE                 = 0x10\n\tSTATX_ATTR_NODUMP                    = 0x40\n\tSTATX_BASIC_STATS                    = 0x7ff\n\tSTATX_BLOCKS                         = 0x400\n\tSTATX_BTIME                          = 0x800\n\tSTATX_CTIME                          = 0x80\n\tSTATX_GID                            = 0x10\n\tSTATX_INO                            = 0x100\n\tSTATX_MODE                           = 0x2\n\tSTATX_MTIME                          = 0x40\n\tSTATX_NLINK                          = 0x4\n\tSTATX_SIZE                           = 0x200\n\tSTATX_TYPE                           = 0x1\n\tSTATX_UID                            = 0x8\n\tSTATX__RESERVED                      = 0x80000000\n\tSYNC_FILE_RANGE_WAIT_AFTER           = 0x4\n\tSYNC_FILE_RANGE_WAIT_BEFORE          = 0x1\n\tSYNC_FILE_RANGE_WRITE                = 0x2\n\tSYSFS_MAGIC                          = 0x62656572\n\tS_BLKSIZE                            = 0x200\n\tS_IEXEC                              = 0x40\n\tS_IFBLK                              = 0x6000\n\tS_IFCHR                              = 0x2000\n\tS_IFDIR                              = 0x4000\n\tS_IFIFO                              = 0x1000\n\tS_IFLNK                              = 0xa000\n\tS_IFMT                               = 0xf000\n\tS_IFREG                              = 0x8000\n\tS_IFSOCK                             = 0xc000\n\tS_IREAD                              = 0x100\n\tS_IRGRP                              = 0x20\n\tS_IROTH                              = 0x4\n\tS_IRUSR                              = 0x100\n\tS_IRWXG                              = 0x38\n\tS_IRWXO                              = 0x7\n\tS_IRWXU                              = 0x1c0\n\tS_ISGID                              = 0x400\n\tS_ISUID                              = 0x800\n\tS_ISVTX                              = 0x200\n\tS_IWGRP                              = 0x10\n\tS_IWOTH                              = 0x2\n\tS_IWRITE                             = 0x80\n\tS_IWUSR                              = 0x80\n\tS_IXGRP                              = 0x8\n\tS_IXOTH                              = 0x1\n\tS_IXUSR                              = 0x40\n\tTAB0                                 = 0x0\n\tTAB1                                 = 0x800\n\tTAB2                                 = 0x1000\n\tTAB3                                 = 0x1800\n\tTABDLY                               = 0x1800\n\tTASKSTATS_CMD_ATTR_MAX               = 0x4\n\tTASKSTATS_CMD_MAX                    = 0x2\n\tTASKSTATS_GENL_NAME                  = \"TASKSTATS\"\n\tTASKSTATS_GENL_VERSION               = 0x1\n\tTASKSTATS_TYPE_MAX                   = 0x6\n\tTASKSTATS_VERSION                    = 0x9\n\tTCFLSH                               = 0x540b\n\tTCGETA                               = 0x5405\n\tTCGETS                               = 0x5401\n\tTCGETS2                              = 0x802c542a\n\tTCGETX                               = 0x5432\n\tTCIFLUSH                             = 0x0\n\tTCIOFF                               = 0x2\n\tTCIOFLUSH                            = 0x2\n\tTCION                                = 0x3\n\tTCOFLUSH                             = 0x1\n\tTCOOFF                               = 0x0\n\tTCOON                                = 0x1\n\tTCP_BPF_IW                           = 0x3e9\n\tTCP_BPF_SNDCWND_CLAMP                = 0x3ea\n\tTCP_CC_INFO                          = 0x1a\n\tTCP_CM_INQ                           = 0x24\n\tTCP_CONGESTION                       = 0xd\n\tTCP_COOKIE_IN_ALWAYS                 = 0x1\n\tTCP_COOKIE_MAX                       = 0x10\n\tTCP_COOKIE_MIN                       = 0x8\n\tTCP_COOKIE_OUT_NEVER                 = 0x2\n\tTCP_COOKIE_PAIR_SIZE                 = 0x20\n\tTCP_COOKIE_TRANSACTIONS              = 0xf\n\tTCP_CORK                             = 0x3\n\tTCP_DEFER_ACCEPT                     = 0x9\n\tTCP_FASTOPEN                         = 0x17\n\tTCP_FASTOPEN_CONNECT                 = 0x1e\n\tTCP_FASTOPEN_KEY                     = 0x21\n\tTCP_FASTOPEN_NO_COOKIE               = 0x22\n\tTCP_INFO                             = 0xb\n\tTCP_INQ                              = 0x24\n\tTCP_KEEPCNT                          = 0x6\n\tTCP_KEEPIDLE                         = 0x4\n\tTCP_KEEPINTVL                        = 0x5\n\tTCP_LINGER2                          = 0x8\n\tTCP_MAXSEG                           = 0x2\n\tTCP_MAXWIN                           = 0xffff\n\tTCP_MAX_WINSHIFT                     = 0xe\n\tTCP_MD5SIG                           = 0xe\n\tTCP_MD5SIG_EXT                       = 0x20\n\tTCP_MD5SIG_FLAG_PREFIX               = 0x1\n\tTCP_MD5SIG_MAXKEYLEN                 = 0x50\n\tTCP_MSS                              = 0x200\n\tTCP_MSS_DEFAULT                      = 0x218\n\tTCP_MSS_DESIRED                      = 0x4c4\n\tTCP_NODELAY                          = 0x1\n\tTCP_NOTSENT_LOWAT                    = 0x19\n\tTCP_QUEUE_SEQ                        = 0x15\n\tTCP_QUICKACK                         = 0xc\n\tTCP_REPAIR                           = 0x13\n\tTCP_REPAIR_OFF                       = 0x0\n\tTCP_REPAIR_OFF_NO_WP                 = -0x1\n\tTCP_REPAIR_ON                        = 0x1\n\tTCP_REPAIR_OPTIONS                   = 0x16\n\tTCP_REPAIR_QUEUE                     = 0x14\n\tTCP_REPAIR_WINDOW                    = 0x1d\n\tTCP_SAVED_SYN                        = 0x1c\n\tTCP_SAVE_SYN                         = 0x1b\n\tTCP_SYNCNT                           = 0x7\n\tTCP_S_DATA_IN                        = 0x4\n\tTCP_S_DATA_OUT                       = 0x8\n\tTCP_THIN_DUPACK                      = 0x11\n\tTCP_THIN_LINEAR_TIMEOUTS             = 0x10\n\tTCP_TIMESTAMP                        = 0x18\n\tTCP_ULP                              = 0x1f\n\tTCP_USER_TIMEOUT                     = 0x12\n\tTCP_WINDOW_CLAMP                     = 0xa\n\tTCP_ZEROCOPY_RECEIVE                 = 0x23\n\tTCSAFLUSH                            = 0x2\n\tTCSBRK                               = 0x5409\n\tTCSBRKP                              = 0x5425\n\tTCSETA                               = 0x5406\n\tTCSETAF                              = 0x5408\n\tTCSETAW                              = 0x5407\n\tTCSETS                               = 0x5402\n\tTCSETS2                              = 0x402c542b\n\tTCSETSF                              = 0x5404\n\tTCSETSF2                             = 0x402c542d\n\tTCSETSW                              = 0x5403\n\tTCSETSW2                             = 0x402c542c\n\tTCSETX                               = 0x5433\n\tTCSETXF                              = 0x5434\n\tTCSETXW                              = 0x5435\n\tTCXONC                               = 0x540a\n\tTIMER_ABSTIME                        = 0x1\n\tTIOCCBRK                             = 0x5428\n\tTIOCCONS                             = 0x541d\n\tTIOCEXCL                             = 0x540c\n\tTIOCGDEV                             = 0x80045432\n\tTIOCGETD                             = 0x5424\n\tTIOCGEXCL                            = 0x80045440\n\tTIOCGICOUNT                          = 0x545d\n\tTIOCGISO7816                         = 0x80285442\n\tTIOCGLCKTRMIOS                       = 0x5456\n\tTIOCGPGRP                            = 0x540f\n\tTIOCGPKT                             = 0x80045438\n\tTIOCGPTLCK                           = 0x80045439\n\tTIOCGPTN                             = 0x80045430\n\tTIOCGPTPEER                          = 0x5441\n\tTIOCGRS485                           = 0x542e\n\tTIOCGSERIAL                          = 0x541e\n\tTIOCGSID                             = 0x5429\n\tTIOCGSOFTCAR                         = 0x5419\n\tTIOCGWINSZ                           = 0x5413\n\tTIOCINQ                              = 0x541b\n\tTIOCLINUX                            = 0x541c\n\tTIOCMBIC                             = 0x5417\n\tTIOCMBIS                             = 0x5416\n\tTIOCMGET                             = 0x5415\n\tTIOCMIWAIT                           = 0x545c\n\tTIOCMSET                             = 0x5418\n\tTIOCM_CAR                            = 0x40\n\tTIOCM_CD                             = 0x40\n\tTIOCM_CTS                            = 0x20\n\tTIOCM_DSR                            = 0x100\n\tTIOCM_DTR                            = 0x2\n\tTIOCM_LE                             = 0x1\n\tTIOCM_RI                             = 0x80\n\tTIOCM_RNG                            = 0x80\n\tTIOCM_RTS                            = 0x4\n\tTIOCM_SR                             = 0x10\n\tTIOCM_ST                             = 0x8\n\tTIOCNOTTY                            = 0x5422\n\tTIOCNXCL                             = 0x540d\n\tTIOCOUTQ                             = 0x5411\n\tTIOCPKT                              = 0x5420\n\tTIOCPKT_DATA                         = 0x0\n\tTIOCPKT_DOSTOP                       = 0x20\n\tTIOCPKT_FLUSHREAD                    = 0x1\n\tTIOCPKT_FLUSHWRITE                   = 0x2\n\tTIOCPKT_IOCTL                        = 0x40\n\tTIOCPKT_NOSTOP                       = 0x10\n\tTIOCPKT_START                        = 0x8\n\tTIOCPKT_STOP                         = 0x4\n\tTIOCSBRK                             = 0x5427\n\tTIOCSCTTY                            = 0x540e\n\tTIOCSERCONFIG                        = 0x5453\n\tTIOCSERGETLSR                        = 0x5459\n\tTIOCSERGETMULTI                      = 0x545a\n\tTIOCSERGSTRUCT                       = 0x5458\n\tTIOCSERGWILD                         = 0x5454\n\tTIOCSERSETMULTI                      = 0x545b\n\tTIOCSERSWILD                         = 0x5455\n\tTIOCSER_TEMT                         = 0x1\n\tTIOCSETD                             = 0x5423\n\tTIOCSIG                              = 0x40045436\n\tTIOCSISO7816                         = 0xc0285443\n\tTIOCSLCKTRMIOS                       = 0x5457\n\tTIOCSPGRP                            = 0x5410\n\tTIOCSPTLCK                           = 0x40045431\n\tTIOCSRS485                           = 0x542f\n\tTIOCSSERIAL                          = 0x541f\n\tTIOCSSOFTCAR                         = 0x541a\n\tTIOCSTI                              = 0x5412\n\tTIOCSWINSZ                           = 0x5414\n\tTIOCVHANGUP                          = 0x5437\n\tTMPFS_MAGIC                          = 0x1021994\n\tTOSTOP                               = 0x100\n\tTPACKET_ALIGNMENT                    = 0x10\n\tTPACKET_HDRLEN                       = 0x34\n\tTP_STATUS_AVAILABLE                  = 0x0\n\tTP_STATUS_BLK_TMO                    = 0x20\n\tTP_STATUS_COPY                       = 0x2\n\tTP_STATUS_CSUMNOTREADY               = 0x8\n\tTP_STATUS_CSUM_VALID                 = 0x80\n\tTP_STATUS_KERNEL                     = 0x0\n\tTP_STATUS_LOSING                     = 0x4\n\tTP_STATUS_SENDING                    = 0x2\n\tTP_STATUS_SEND_REQUEST               = 0x1\n\tTP_STATUS_TS_RAW_HARDWARE            = -0x80000000\n\tTP_STATUS_TS_SOFTWARE                = 0x20000000\n\tTP_STATUS_TS_SYS_HARDWARE            = 0x40000000\n\tTP_STATUS_USER                       = 0x1\n\tTP_STATUS_VLAN_TPID_VALID            = 0x40\n\tTP_STATUS_VLAN_VALID                 = 0x10\n\tTP_STATUS_WRONG_FORMAT               = 0x4\n\tTRACEFS_MAGIC                        = 0x74726163\n\tTS_COMM_LEN                          = 0x20\n\tTUNATTACHFILTER                      = 0x401054d5\n\tTUNDETACHFILTER                      = 0x401054d6\n\tTUNGETFEATURES                       = 0x800454cf\n\tTUNGETFILTER                         = 0x801054db\n\tTUNGETIFF                            = 0x800454d2\n\tTUNGETSNDBUF                         = 0x800454d3\n\tTUNGETVNETBE                         = 0x800454df\n\tTUNGETVNETHDRSZ                      = 0x800454d7\n\tTUNGETVNETLE                         = 0x800454dd\n\tTUNSETCARRIER                        = 0x400454e2\n\tTUNSETDEBUG                          = 0x400454c9\n\tTUNSETFILTEREBPF                     = 0x800454e1\n\tTUNSETGROUP                          = 0x400454ce\n\tTUNSETIFF                            = 0x400454ca\n\tTUNSETIFINDEX                        = 0x400454da\n\tTUNSETLINK                           = 0x400454cd\n\tTUNSETNOCSUM                         = 0x400454c8\n\tTUNSETOFFLOAD                        = 0x400454d0\n\tTUNSETOWNER                          = 0x400454cc\n\tTUNSETPERSIST                        = 0x400454cb\n\tTUNSETQUEUE                          = 0x400454d9\n\tTUNSETSNDBUF                         = 0x400454d4\n\tTUNSETSTEERINGEBPF                   = 0x800454e0\n\tTUNSETTXFILTER                       = 0x400454d1\n\tTUNSETVNETBE                         = 0x400454de\n\tTUNSETVNETHDRSZ                      = 0x400454d8\n\tTUNSETVNETLE                         = 0x400454dc\n\tUBI_IOCATT                           = 0x40186f40\n\tUBI_IOCDET                           = 0x40046f41\n\tUBI_IOCEBCH                          = 0x40044f02\n\tUBI_IOCEBER                          = 0x40044f01\n\tUBI_IOCEBISMAP                       = 0x80044f05\n\tUBI_IOCEBMAP                         = 0x40084f03\n\tUBI_IOCEBUNMAP                       = 0x40044f04\n\tUBI_IOCMKVOL                         = 0x40986f00\n\tUBI_IOCRMVOL                         = 0x40046f01\n\tUBI_IOCRNVOL                         = 0x51106f03\n\tUBI_IOCRPEB                          = 0x40046f04\n\tUBI_IOCRSVOL                         = 0x400c6f02\n\tUBI_IOCSETVOLPROP                    = 0x40104f06\n\tUBI_IOCSPEB                          = 0x40046f05\n\tUBI_IOCVOLCRBLK                      = 0x40804f07\n\tUBI_IOCVOLRMBLK                      = 0x4f08\n\tUBI_IOCVOLUP                         = 0x40084f00\n\tUDF_SUPER_MAGIC                      = 0x15013346\n\tUMOUNT_NOFOLLOW                      = 0x8\n\tUSBDEVICE_SUPER_MAGIC                = 0x9fa2\n\tUTIME_NOW                            = 0x3fffffff\n\tUTIME_OMIT                           = 0x3ffffffe\n\tV9FS_MAGIC                           = 0x1021997\n\tVDISCARD                             = 0xd\n\tVEOF                                 = 0x4\n\tVEOL                                 = 0xb\n\tVEOL2                                = 0x10\n\tVERASE                               = 0x2\n\tVINTR                                = 0x0\n\tVKILL                                = 0x3\n\tVLNEXT                               = 0xf\n\tVMADDR_CID_ANY                       = 0xffffffff\n\tVMADDR_CID_HOST                      = 0x2\n\tVMADDR_CID_HYPERVISOR                = 0x0\n\tVMADDR_CID_RESERVED                  = 0x1\n\tVMADDR_PORT_ANY                      = 0xffffffff\n\tVMIN                                 = 0x6\n\tVM_SOCKETS_INVALID_VERSION           = 0xffffffff\n\tVQUIT                                = 0x1\n\tVREPRINT                             = 0xc\n\tVSTART                               = 0x8\n\tVSTOP                                = 0x9\n\tVSUSP                                = 0xa\n\tVSWTC                                = 0x7\n\tVT0                                  = 0x0\n\tVT1                                  = 0x4000\n\tVTDLY                                = 0x4000\n\tVTIME                                = 0x5\n\tVWERASE                              = 0xe\n\tWALL                                 = 0x40000000\n\tWCLONE                               = 0x80000000\n\tWCONTINUED                           = 0x8\n\tWDIOC_GETBOOTSTATUS                  = 0x80045702\n\tWDIOC_GETPRETIMEOUT                  = 0x80045709\n\tWDIOC_GETSTATUS                      = 0x80045701\n\tWDIOC_GETSUPPORT                     = 0x80285700\n\tWDIOC_GETTEMP                        = 0x80045703\n\tWDIOC_GETTIMELEFT                    = 0x8004570a\n\tWDIOC_GETTIMEOUT                     = 0x80045707\n\tWDIOC_KEEPALIVE                      = 0x80045705\n\tWDIOC_SETOPTIONS                     = 0x80045704\n\tWDIOC_SETPRETIMEOUT                  = 0xc0045708\n\tWDIOC_SETTIMEOUT                     = 0xc0045706\n\tWEXITED                              = 0x4\n\tWIN_ACKMEDIACHANGE                   = 0xdb\n\tWIN_CHECKPOWERMODE1                  = 0xe5\n\tWIN_CHECKPOWERMODE2                  = 0x98\n\tWIN_DEVICE_RESET                     = 0x8\n\tWIN_DIAGNOSE                         = 0x90\n\tWIN_DOORLOCK                         = 0xde\n\tWIN_DOORUNLOCK                       = 0xdf\n\tWIN_DOWNLOAD_MICROCODE               = 0x92\n\tWIN_FLUSH_CACHE                      = 0xe7\n\tWIN_FLUSH_CACHE_EXT                  = 0xea\n\tWIN_FORMAT                           = 0x50\n\tWIN_GETMEDIASTATUS                   = 0xda\n\tWIN_IDENTIFY                         = 0xec\n\tWIN_IDENTIFY_DMA                     = 0xee\n\tWIN_IDLEIMMEDIATE                    = 0xe1\n\tWIN_INIT                             = 0x60\n\tWIN_MEDIAEJECT                       = 0xed\n\tWIN_MULTREAD                         = 0xc4\n\tWIN_MULTREAD_EXT                     = 0x29\n\tWIN_MULTWRITE                        = 0xc5\n\tWIN_MULTWRITE_EXT                    = 0x39\n\tWIN_NOP                              = 0x0\n\tWIN_PACKETCMD                        = 0xa0\n\tWIN_PIDENTIFY                        = 0xa1\n\tWIN_POSTBOOT                         = 0xdc\n\tWIN_PREBOOT                          = 0xdd\n\tWIN_QUEUED_SERVICE                   = 0xa2\n\tWIN_READ                             = 0x20\n\tWIN_READDMA                          = 0xc8\n\tWIN_READDMA_EXT                      = 0x25\n\tWIN_READDMA_ONCE                     = 0xc9\n\tWIN_READDMA_QUEUED                   = 0xc7\n\tWIN_READDMA_QUEUED_EXT               = 0x26\n\tWIN_READ_BUFFER                      = 0xe4\n\tWIN_READ_EXT                         = 0x24\n\tWIN_READ_LONG                        = 0x22\n\tWIN_READ_LONG_ONCE                   = 0x23\n\tWIN_READ_NATIVE_MAX                  = 0xf8\n\tWIN_READ_NATIVE_MAX_EXT              = 0x27\n\tWIN_READ_ONCE                        = 0x21\n\tWIN_RECAL                            = 0x10\n\tWIN_RESTORE                          = 0x10\n\tWIN_SECURITY_DISABLE                 = 0xf6\n\tWIN_SECURITY_ERASE_PREPARE           = 0xf3\n\tWIN_SECURITY_ERASE_UNIT              = 0xf4\n\tWIN_SECURITY_FREEZE_LOCK             = 0xf5\n\tWIN_SECURITY_SET_PASS                = 0xf1\n\tWIN_SECURITY_UNLOCK                  = 0xf2\n\tWIN_SEEK                             = 0x70\n\tWIN_SETFEATURES                      = 0xef\n\tWIN_SETIDLE1                         = 0xe3\n\tWIN_SETIDLE2                         = 0x97\n\tWIN_SETMULT                          = 0xc6\n\tWIN_SET_MAX                          = 0xf9\n\tWIN_SET_MAX_EXT                      = 0x37\n\tWIN_SLEEPNOW1                        = 0xe6\n\tWIN_SLEEPNOW2                        = 0x99\n\tWIN_SMART                            = 0xb0\n\tWIN_SPECIFY                          = 0x91\n\tWIN_SRST                             = 0x8\n\tWIN_STANDBY                          = 0xe2\n\tWIN_STANDBY2                         = 0x96\n\tWIN_STANDBYNOW1                      = 0xe0\n\tWIN_STANDBYNOW2                      = 0x94\n\tWIN_VERIFY                           = 0x40\n\tWIN_VERIFY_EXT                       = 0x42\n\tWIN_VERIFY_ONCE                      = 0x41\n\tWIN_WRITE                            = 0x30\n\tWIN_WRITEDMA                         = 0xca\n\tWIN_WRITEDMA_EXT                     = 0x35\n\tWIN_WRITEDMA_ONCE                    = 0xcb\n\tWIN_WRITEDMA_QUEUED                  = 0xcc\n\tWIN_WRITEDMA_QUEUED_EXT              = 0x36\n\tWIN_WRITE_BUFFER                     = 0xe8\n\tWIN_WRITE_EXT                        = 0x34\n\tWIN_WRITE_LONG                       = 0x32\n\tWIN_WRITE_LONG_ONCE                  = 0x33\n\tWIN_WRITE_ONCE                       = 0x31\n\tWIN_WRITE_SAME                       = 0xe9\n\tWIN_WRITE_VERIFY                     = 0x3c\n\tWNOHANG                              = 0x1\n\tWNOTHREAD                            = 0x20000000\n\tWNOWAIT                              = 0x1000000\n\tWORDSIZE                             = 0x40\n\tWSTOPPED                             = 0x2\n\tWUNTRACED                            = 0x2\n\tXATTR_CREATE                         = 0x1\n\tXATTR_REPLACE                        = 0x2\n\tXCASE                                = 0x4\n\tXDP_COPY                             = 0x2\n\tXDP_FLAGS_DRV_MODE                   = 0x4\n\tXDP_FLAGS_HW_MODE                    = 0x8\n\tXDP_FLAGS_MASK                       = 0xf\n\tXDP_FLAGS_MODES                      = 0xe\n\tXDP_FLAGS_SKB_MODE                   = 0x2\n\tXDP_FLAGS_UPDATE_IF_NOEXIST          = 0x1\n\tXDP_MMAP_OFFSETS                     = 0x1\n\tXDP_PACKET_HEADROOM                  = 0x100\n\tXDP_PGOFF_RX_RING                    = 0x0\n\tXDP_PGOFF_TX_RING                    = 0x80000000\n\tXDP_RX_RING                          = 0x2\n\tXDP_SHARED_UMEM                      = 0x1\n\tXDP_STATISTICS                       = 0x7\n\tXDP_TX_RING                          = 0x3\n\tXDP_UMEM_COMPLETION_RING             = 0x6\n\tXDP_UMEM_FILL_RING                   = 0x5\n\tXDP_UMEM_PGOFF_COMPLETION_RING       = 0x180000000\n\tXDP_UMEM_PGOFF_FILL_RING             = 0x100000000\n\tXDP_UMEM_REG                         = 0x4\n\tXDP_ZEROCOPY                         = 0x4\n\tXENFS_SUPER_MAGIC                    = 0xabba1974\n\tXFS_SUPER_MAGIC                      = 0x58465342\n\tXTABS                                = 0x1800\n\tZSMALLOC_MAGIC                       = 0x58295829\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x62)\n\tEADDRNOTAVAIL   = syscall.Errno(0x63)\n\tEADV            = syscall.Errno(0x44)\n\tEAFNOSUPPORT    = syscall.Errno(0x61)\n\tEAGAIN          = syscall.Errno(0xb)\n\tEALREADY        = syscall.Errno(0x72)\n\tEBADE           = syscall.Errno(0x34)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADFD          = syscall.Errno(0x4d)\n\tEBADMSG         = syscall.Errno(0x4a)\n\tEBADR           = syscall.Errno(0x35)\n\tEBADRQC         = syscall.Errno(0x38)\n\tEBADSLT         = syscall.Errno(0x39)\n\tEBFONT          = syscall.Errno(0x3b)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x7d)\n\tECHILD          = syscall.Errno(0xa)\n\tECHRNG          = syscall.Errno(0x2c)\n\tECOMM           = syscall.Errno(0x46)\n\tECONNABORTED    = syscall.Errno(0x67)\n\tECONNREFUSED    = syscall.Errno(0x6f)\n\tECONNRESET      = syscall.Errno(0x68)\n\tEDEADLK         = syscall.Errno(0x23)\n\tEDEADLOCK       = syscall.Errno(0x23)\n\tEDESTADDRREQ    = syscall.Errno(0x59)\n\tEDOM            = syscall.Errno(0x21)\n\tEDOTDOT         = syscall.Errno(0x49)\n\tEDQUOT          = syscall.Errno(0x7a)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEHOSTDOWN       = syscall.Errno(0x70)\n\tEHOSTUNREACH    = syscall.Errno(0x71)\n\tEHWPOISON       = syscall.Errno(0x85)\n\tEIDRM           = syscall.Errno(0x2b)\n\tEILSEQ          = syscall.Errno(0x54)\n\tEINPROGRESS     = syscall.Errno(0x73)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEISCONN         = syscall.Errno(0x6a)\n\tEISDIR          = syscall.Errno(0x15)\n\tEISNAM          = syscall.Errno(0x78)\n\tEKEYEXPIRED     = syscall.Errno(0x7f)\n\tEKEYREJECTED    = syscall.Errno(0x81)\n\tEKEYREVOKED     = syscall.Errno(0x80)\n\tEL2HLT          = syscall.Errno(0x33)\n\tEL2NSYNC        = syscall.Errno(0x2d)\n\tEL3HLT          = syscall.Errno(0x2e)\n\tEL3RST          = syscall.Errno(0x2f)\n\tELIBACC         = syscall.Errno(0x4f)\n\tELIBBAD         = syscall.Errno(0x50)\n\tELIBEXEC        = syscall.Errno(0x53)\n\tELIBMAX         = syscall.Errno(0x52)\n\tELIBSCN         = syscall.Errno(0x51)\n\tELNRNG          = syscall.Errno(0x30)\n\tELOOP           = syscall.Errno(0x28)\n\tEMEDIUMTYPE     = syscall.Errno(0x7c)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x5a)\n\tEMULTIHOP       = syscall.Errno(0x48)\n\tENAMETOOLONG    = syscall.Errno(0x24)\n\tENAVAIL         = syscall.Errno(0x77)\n\tENETDOWN        = syscall.Errno(0x64)\n\tENETRESET       = syscall.Errno(0x66)\n\tENETUNREACH     = syscall.Errno(0x65)\n\tENFILE          = syscall.Errno(0x17)\n\tENOANO          = syscall.Errno(0x37)\n\tENOBUFS         = syscall.Errno(0x69)\n\tENOCSI          = syscall.Errno(0x32)\n\tENODATA         = syscall.Errno(0x3d)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOKEY          = syscall.Errno(0x7e)\n\tENOLCK          = syscall.Errno(0x25)\n\tENOLINK         = syscall.Errno(0x43)\n\tENOMEDIUM       = syscall.Errno(0x7b)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x2a)\n\tENONET          = syscall.Errno(0x40)\n\tENOPKG          = syscall.Errno(0x41)\n\tENOPROTOOPT     = syscall.Errno(0x5c)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSR           = syscall.Errno(0x3f)\n\tENOSTR          = syscall.Errno(0x3c)\n\tENOSYS          = syscall.Errno(0x26)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x6b)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x27)\n\tENOTNAM         = syscall.Errno(0x76)\n\tENOTRECOVERABLE = syscall.Errno(0x83)\n\tENOTSOCK        = syscall.Errno(0x58)\n\tENOTSUP         = syscall.Errno(0x5f)\n\tENOTTY          = syscall.Errno(0x19)\n\tENOTUNIQ        = syscall.Errno(0x4c)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x5f)\n\tEOVERFLOW       = syscall.Errno(0x4b)\n\tEOWNERDEAD      = syscall.Errno(0x82)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x60)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROTO          = syscall.Errno(0x47)\n\tEPROTONOSUPPORT = syscall.Errno(0x5d)\n\tEPROTOTYPE      = syscall.Errno(0x5b)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMCHG         = syscall.Errno(0x4e)\n\tEREMOTE         = syscall.Errno(0x42)\n\tEREMOTEIO       = syscall.Errno(0x79)\n\tERESTART        = syscall.Errno(0x55)\n\tERFKILL         = syscall.Errno(0x84)\n\tEROFS           = syscall.Errno(0x1e)\n\tESHUTDOWN       = syscall.Errno(0x6c)\n\tESOCKTNOSUPPORT = syscall.Errno(0x5e)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESRMNT          = syscall.Errno(0x45)\n\tESTALE          = syscall.Errno(0x74)\n\tESTRPIPE        = syscall.Errno(0x56)\n\tETIME           = syscall.Errno(0x3e)\n\tETIMEDOUT       = syscall.Errno(0x6e)\n\tETOOMANYREFS    = syscall.Errno(0x6d)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUCLEAN         = syscall.Errno(0x75)\n\tEUNATCH         = syscall.Errno(0x31)\n\tEUSERS          = syscall.Errno(0x57)\n\tEWOULDBLOCK     = syscall.Errno(0xb)\n\tEXDEV           = syscall.Errno(0x12)\n\tEXFULL          = syscall.Errno(0x36)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0x7)\n\tSIGCHLD   = syscall.Signal(0x11)\n\tSIGCLD    = syscall.Signal(0x11)\n\tSIGCONT   = syscall.Signal(0x12)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x1d)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPOLL   = syscall.Signal(0x1d)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGPWR    = syscall.Signal(0x1e)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTKFLT = syscall.Signal(0x10)\n\tSIGSTOP   = syscall.Signal(0x13)\n\tSIGSYS    = syscall.Signal(0x1f)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x14)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x17)\n\tSIGUSR1   = syscall.Signal(0xa)\n\tSIGUSR2   = syscall.Signal(0xc)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"no such device or address\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device or resource busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"invalid cross-device link\"},\n\t{19, \"ENODEV\", \"no such device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"numerical result out of range\"},\n\t{35, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{36, \"ENAMETOOLONG\", \"file name too long\"},\n\t{37, \"ENOLCK\", \"no locks available\"},\n\t{38, \"ENOSYS\", \"function not implemented\"},\n\t{39, \"ENOTEMPTY\", \"directory not empty\"},\n\t{40, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{42, \"ENOMSG\", \"no message of desired type\"},\n\t{43, \"EIDRM\", \"identifier removed\"},\n\t{44, \"ECHRNG\", \"channel number out of range\"},\n\t{45, \"EL2NSYNC\", \"level 2 not synchronized\"},\n\t{46, \"EL3HLT\", \"level 3 halted\"},\n\t{47, \"EL3RST\", \"level 3 reset\"},\n\t{48, \"ELNRNG\", \"link number out of range\"},\n\t{49, \"EUNATCH\", \"protocol driver not attached\"},\n\t{50, \"ENOCSI\", \"no CSI structure available\"},\n\t{51, \"EL2HLT\", \"level 2 halted\"},\n\t{52, \"EBADE\", \"invalid exchange\"},\n\t{53, \"EBADR\", \"invalid request descriptor\"},\n\t{54, \"EXFULL\", \"exchange full\"},\n\t{55, \"ENOANO\", \"no anode\"},\n\t{56, \"EBADRQC\", \"invalid request code\"},\n\t{57, \"EBADSLT\", \"invalid slot\"},\n\t{59, \"EBFONT\", \"bad font file format\"},\n\t{60, \"ENOSTR\", \"device not a stream\"},\n\t{61, \"ENODATA\", \"no data available\"},\n\t{62, \"ETIME\", \"timer expired\"},\n\t{63, \"ENOSR\", \"out of streams resources\"},\n\t{64, \"ENONET\", \"machine is not on the network\"},\n\t{65, \"ENOPKG\", \"package not installed\"},\n\t{66, \"EREMOTE\", \"object is remote\"},\n\t{67, \"ENOLINK\", \"link has been severed\"},\n\t{68, \"EADV\", \"advertise error\"},\n\t{69, \"ESRMNT\", \"srmount error\"},\n\t{70, \"ECOMM\", \"communication error on send\"},\n\t{71, \"EPROTO\", \"protocol error\"},\n\t{72, \"EMULTIHOP\", \"multihop attempted\"},\n\t{73, \"EDOTDOT\", \"RFS specific error\"},\n\t{74, \"EBADMSG\", \"bad message\"},\n\t{75, \"EOVERFLOW\", \"value too large for defined data type\"},\n\t{76, \"ENOTUNIQ\", \"name not unique on network\"},\n\t{77, \"EBADFD\", \"file descriptor in bad state\"},\n\t{78, \"EREMCHG\", \"remote address changed\"},\n\t{79, \"ELIBACC\", \"can not access a needed shared library\"},\n\t{80, \"ELIBBAD\", \"accessing a corrupted shared library\"},\n\t{81, \"ELIBSCN\", \".lib section in a.out corrupted\"},\n\t{82, \"ELIBMAX\", \"attempting to link in too many shared libraries\"},\n\t{83, \"ELIBEXEC\", \"cannot exec a shared library directly\"},\n\t{84, \"EILSEQ\", \"invalid or incomplete multibyte or wide character\"},\n\t{85, \"ERESTART\", \"interrupted system call should be restarted\"},\n\t{86, \"ESTRPIPE\", \"streams pipe error\"},\n\t{87, \"EUSERS\", \"too many users\"},\n\t{88, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{89, \"EDESTADDRREQ\", \"destination address required\"},\n\t{90, \"EMSGSIZE\", \"message too long\"},\n\t{91, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{92, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{93, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{94, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{95, \"ENOTSUP\", \"operation not supported\"},\n\t{96, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{97, \"EAFNOSUPPORT\", \"address family not supported by protocol\"},\n\t{98, \"EADDRINUSE\", \"address already in use\"},\n\t{99, \"EADDRNOTAVAIL\", \"cannot assign requested address\"},\n\t{100, \"ENETDOWN\", \"network is down\"},\n\t{101, \"ENETUNREACH\", \"network is unreachable\"},\n\t{102, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{103, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{104, \"ECONNRESET\", \"connection reset by peer\"},\n\t{105, \"ENOBUFS\", \"no buffer space available\"},\n\t{106, \"EISCONN\", \"transport endpoint is already connected\"},\n\t{107, \"ENOTCONN\", \"transport endpoint is not connected\"},\n\t{108, \"ESHUTDOWN\", \"cannot send after transport endpoint shutdown\"},\n\t{109, \"ETOOMANYREFS\", \"too many references: cannot splice\"},\n\t{110, \"ETIMEDOUT\", \"connection timed out\"},\n\t{111, \"ECONNREFUSED\", \"connection refused\"},\n\t{112, \"EHOSTDOWN\", \"host is down\"},\n\t{113, \"EHOSTUNREACH\", \"no route to host\"},\n\t{114, \"EALREADY\", \"operation already in progress\"},\n\t{115, \"EINPROGRESS\", \"operation now in progress\"},\n\t{116, \"ESTALE\", \"stale file handle\"},\n\t{117, \"EUCLEAN\", \"structure needs cleaning\"},\n\t{118, \"ENOTNAM\", \"not a XENIX named type file\"},\n\t{119, \"ENAVAIL\", \"no XENIX semaphores available\"},\n\t{120, \"EISNAM\", \"is a named type file\"},\n\t{121, \"EREMOTEIO\", \"remote I/O error\"},\n\t{122, \"EDQUOT\", \"disk quota exceeded\"},\n\t{123, \"ENOMEDIUM\", \"no medium found\"},\n\t{124, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{125, \"ECANCELED\", \"operation canceled\"},\n\t{126, \"ENOKEY\", \"required key not available\"},\n\t{127, \"EKEYEXPIRED\", \"key has expired\"},\n\t{128, \"EKEYREVOKED\", \"key has been revoked\"},\n\t{129, \"EKEYREJECTED\", \"key was rejected by service\"},\n\t{130, \"EOWNERDEAD\", \"owner died\"},\n\t{131, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{132, \"ERFKILL\", \"operation not possible due to RF-kill\"},\n\t{133, \"EHWPOISON\", \"memory page has hardware error\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/breakpoint trap\"},\n\t{6, \"SIGABRT\", \"aborted\"},\n\t{7, \"SIGBUS\", \"bus error\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGUSR1\", \"user defined signal 1\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGUSR2\", \"user defined signal 2\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGSTKFLT\", \"stack fault\"},\n\t{17, \"SIGCHLD\", \"child exited\"},\n\t{18, \"SIGCONT\", \"continued\"},\n\t{19, \"SIGSTOP\", \"stopped (signal)\"},\n\t{20, \"SIGTSTP\", \"stopped\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGURG\", \"urgent I/O condition\"},\n\t{24, \"SIGXCPU\", \"CPU time limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"file size limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window changed\"},\n\t{29, \"SIGIO\", \"I/O possible\"},\n\t{30, \"SIGPWR\", \"power failure\"},\n\t{31, \"SIGSYS\", \"bad system call\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go",
    "content": "// mkerrors.sh -Wall -Werror -static -I/tmp/include -fsigned-char\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build s390x,linux\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAAFS_MAGIC                           = 0x5a3c69f0\n\tADFS_SUPER_MAGIC                     = 0xadf5\n\tAFFS_SUPER_MAGIC                     = 0xadff\n\tAFS_FS_MAGIC                         = 0x6b414653\n\tAFS_SUPER_MAGIC                      = 0x5346414f\n\tAF_ALG                               = 0x26\n\tAF_APPLETALK                         = 0x5\n\tAF_ASH                               = 0x12\n\tAF_ATMPVC                            = 0x8\n\tAF_ATMSVC                            = 0x14\n\tAF_AX25                              = 0x3\n\tAF_BLUETOOTH                         = 0x1f\n\tAF_BRIDGE                            = 0x7\n\tAF_CAIF                              = 0x25\n\tAF_CAN                               = 0x1d\n\tAF_DECnet                            = 0xc\n\tAF_ECONET                            = 0x13\n\tAF_FILE                              = 0x1\n\tAF_IB                                = 0x1b\n\tAF_IEEE802154                        = 0x24\n\tAF_INET                              = 0x2\n\tAF_INET6                             = 0xa\n\tAF_IPX                               = 0x4\n\tAF_IRDA                              = 0x17\n\tAF_ISDN                              = 0x22\n\tAF_IUCV                              = 0x20\n\tAF_KCM                               = 0x29\n\tAF_KEY                               = 0xf\n\tAF_LLC                               = 0x1a\n\tAF_LOCAL                             = 0x1\n\tAF_MAX                               = 0x2d\n\tAF_MPLS                              = 0x1c\n\tAF_NETBEUI                           = 0xd\n\tAF_NETLINK                           = 0x10\n\tAF_NETROM                            = 0x6\n\tAF_NFC                               = 0x27\n\tAF_PACKET                            = 0x11\n\tAF_PHONET                            = 0x23\n\tAF_PPPOX                             = 0x18\n\tAF_QIPCRTR                           = 0x2a\n\tAF_RDS                               = 0x15\n\tAF_ROSE                              = 0xb\n\tAF_ROUTE                             = 0x10\n\tAF_RXRPC                             = 0x21\n\tAF_SECURITY                          = 0xe\n\tAF_SMC                               = 0x2b\n\tAF_SNA                               = 0x16\n\tAF_TIPC                              = 0x1e\n\tAF_UNIX                              = 0x1\n\tAF_UNSPEC                            = 0x0\n\tAF_VSOCK                             = 0x28\n\tAF_WANPIPE                           = 0x19\n\tAF_X25                               = 0x9\n\tAF_XDP                               = 0x2c\n\tALG_OP_DECRYPT                       = 0x0\n\tALG_OP_ENCRYPT                       = 0x1\n\tALG_SET_AEAD_ASSOCLEN                = 0x4\n\tALG_SET_AEAD_AUTHSIZE                = 0x5\n\tALG_SET_IV                           = 0x2\n\tALG_SET_KEY                          = 0x1\n\tALG_SET_OP                           = 0x3\n\tANON_INODE_FS_MAGIC                  = 0x9041934\n\tARPHRD_6LOWPAN                       = 0x339\n\tARPHRD_ADAPT                         = 0x108\n\tARPHRD_APPLETLK                      = 0x8\n\tARPHRD_ARCNET                        = 0x7\n\tARPHRD_ASH                           = 0x30d\n\tARPHRD_ATM                           = 0x13\n\tARPHRD_AX25                          = 0x3\n\tARPHRD_BIF                           = 0x307\n\tARPHRD_CAIF                          = 0x336\n\tARPHRD_CAN                           = 0x118\n\tARPHRD_CHAOS                         = 0x5\n\tARPHRD_CISCO                         = 0x201\n\tARPHRD_CSLIP                         = 0x101\n\tARPHRD_CSLIP6                        = 0x103\n\tARPHRD_DDCMP                         = 0x205\n\tARPHRD_DLCI                          = 0xf\n\tARPHRD_ECONET                        = 0x30e\n\tARPHRD_EETHER                        = 0x2\n\tARPHRD_ETHER                         = 0x1\n\tARPHRD_EUI64                         = 0x1b\n\tARPHRD_FCAL                          = 0x311\n\tARPHRD_FCFABRIC                      = 0x313\n\tARPHRD_FCPL                          = 0x312\n\tARPHRD_FCPP                          = 0x310\n\tARPHRD_FDDI                          = 0x306\n\tARPHRD_FRAD                          = 0x302\n\tARPHRD_HDLC                          = 0x201\n\tARPHRD_HIPPI                         = 0x30c\n\tARPHRD_HWX25                         = 0x110\n\tARPHRD_IEEE1394                      = 0x18\n\tARPHRD_IEEE802                       = 0x6\n\tARPHRD_IEEE80211                     = 0x321\n\tARPHRD_IEEE80211_PRISM               = 0x322\n\tARPHRD_IEEE80211_RADIOTAP            = 0x323\n\tARPHRD_IEEE802154                    = 0x324\n\tARPHRD_IEEE802154_MONITOR            = 0x325\n\tARPHRD_IEEE802_TR                    = 0x320\n\tARPHRD_INFINIBAND                    = 0x20\n\tARPHRD_IP6GRE                        = 0x337\n\tARPHRD_IPDDP                         = 0x309\n\tARPHRD_IPGRE                         = 0x30a\n\tARPHRD_IRDA                          = 0x30f\n\tARPHRD_LAPB                          = 0x204\n\tARPHRD_LOCALTLK                      = 0x305\n\tARPHRD_LOOPBACK                      = 0x304\n\tARPHRD_METRICOM                      = 0x17\n\tARPHRD_NETLINK                       = 0x338\n\tARPHRD_NETROM                        = 0x0\n\tARPHRD_NONE                          = 0xfffe\n\tARPHRD_PHONET                        = 0x334\n\tARPHRD_PHONET_PIPE                   = 0x335\n\tARPHRD_PIMREG                        = 0x30b\n\tARPHRD_PPP                           = 0x200\n\tARPHRD_PRONET                        = 0x4\n\tARPHRD_RAWHDLC                       = 0x206\n\tARPHRD_RAWIP                         = 0x207\n\tARPHRD_ROSE                          = 0x10e\n\tARPHRD_RSRVD                         = 0x104\n\tARPHRD_SIT                           = 0x308\n\tARPHRD_SKIP                          = 0x303\n\tARPHRD_SLIP                          = 0x100\n\tARPHRD_SLIP6                         = 0x102\n\tARPHRD_TUNNEL                        = 0x300\n\tARPHRD_TUNNEL6                       = 0x301\n\tARPHRD_VOID                          = 0xffff\n\tARPHRD_VSOCKMON                      = 0x33a\n\tARPHRD_X25                           = 0x10f\n\tAUTOFS_SUPER_MAGIC                   = 0x187\n\tB0                                   = 0x0\n\tB1000000                             = 0x1008\n\tB110                                 = 0x3\n\tB115200                              = 0x1002\n\tB1152000                             = 0x1009\n\tB1200                                = 0x9\n\tB134                                 = 0x4\n\tB150                                 = 0x5\n\tB1500000                             = 0x100a\n\tB1800                                = 0xa\n\tB19200                               = 0xe\n\tB200                                 = 0x6\n\tB2000000                             = 0x100b\n\tB230400                              = 0x1003\n\tB2400                                = 0xb\n\tB2500000                             = 0x100c\n\tB300                                 = 0x7\n\tB3000000                             = 0x100d\n\tB3500000                             = 0x100e\n\tB38400                               = 0xf\n\tB4000000                             = 0x100f\n\tB460800                              = 0x1004\n\tB4800                                = 0xc\n\tB50                                  = 0x1\n\tB500000                              = 0x1005\n\tB57600                               = 0x1001\n\tB576000                              = 0x1006\n\tB600                                 = 0x8\n\tB75                                  = 0x2\n\tB921600                              = 0x1007\n\tB9600                                = 0xd\n\tBALLOON_KVM_MAGIC                    = 0x13661366\n\tBDEVFS_MAGIC                         = 0x62646576\n\tBINDERFS_SUPER_MAGIC                 = 0x6c6f6f70\n\tBINFMTFS_MAGIC                       = 0x42494e4d\n\tBLKBSZGET                            = 0x80081270\n\tBLKBSZSET                            = 0x40081271\n\tBLKFLSBUF                            = 0x1261\n\tBLKFRAGET                            = 0x1265\n\tBLKFRASET                            = 0x1264\n\tBLKGETSIZE                           = 0x1260\n\tBLKGETSIZE64                         = 0x80081272\n\tBLKPBSZGET                           = 0x127b\n\tBLKRAGET                             = 0x1263\n\tBLKRASET                             = 0x1262\n\tBLKROGET                             = 0x125e\n\tBLKROSET                             = 0x125d\n\tBLKRRPART                            = 0x125f\n\tBLKSECTGET                           = 0x1267\n\tBLKSECTSET                           = 0x1266\n\tBLKSSZGET                            = 0x1268\n\tBOTHER                               = 0x1000\n\tBPF_A                                = 0x10\n\tBPF_ABS                              = 0x20\n\tBPF_ADD                              = 0x0\n\tBPF_ALU                              = 0x4\n\tBPF_ALU64                            = 0x7\n\tBPF_AND                              = 0x50\n\tBPF_ANY                              = 0x0\n\tBPF_ARSH                             = 0xc0\n\tBPF_B                                = 0x10\n\tBPF_BUILD_ID_SIZE                    = 0x14\n\tBPF_CALL                             = 0x80\n\tBPF_DEVCG_ACC_MKNOD                  = 0x1\n\tBPF_DEVCG_ACC_READ                   = 0x2\n\tBPF_DEVCG_ACC_WRITE                  = 0x4\n\tBPF_DEVCG_DEV_BLOCK                  = 0x1\n\tBPF_DEVCG_DEV_CHAR                   = 0x2\n\tBPF_DIV                              = 0x30\n\tBPF_DW                               = 0x18\n\tBPF_END                              = 0xd0\n\tBPF_EXIST                            = 0x2\n\tBPF_EXIT                             = 0x90\n\tBPF_FROM_BE                          = 0x8\n\tBPF_FROM_LE                          = 0x0\n\tBPF_FS_MAGIC                         = 0xcafe4a11\n\tBPF_F_ALLOW_MULTI                    = 0x2\n\tBPF_F_ALLOW_OVERRIDE                 = 0x1\n\tBPF_F_ANY_ALIGNMENT                  = 0x2\n\tBPF_F_CTXLEN_MASK                    = 0xfffff00000000\n\tBPF_F_CURRENT_CPU                    = 0xffffffff\n\tBPF_F_CURRENT_NETNS                  = -0x1\n\tBPF_F_DONT_FRAGMENT                  = 0x4\n\tBPF_F_FAST_STACK_CMP                 = 0x200\n\tBPF_F_HDR_FIELD_MASK                 = 0xf\n\tBPF_F_INDEX_MASK                     = 0xffffffff\n\tBPF_F_INGRESS                        = 0x1\n\tBPF_F_INVALIDATE_HASH                = 0x2\n\tBPF_F_LOCK                           = 0x4\n\tBPF_F_MARK_ENFORCE                   = 0x40\n\tBPF_F_MARK_MANGLED_0                 = 0x20\n\tBPF_F_NO_COMMON_LRU                  = 0x2\n\tBPF_F_NO_PREALLOC                    = 0x1\n\tBPF_F_NUMA_NODE                      = 0x4\n\tBPF_F_PSEUDO_HDR                     = 0x10\n\tBPF_F_QUERY_EFFECTIVE                = 0x1\n\tBPF_F_RDONLY                         = 0x8\n\tBPF_F_RECOMPUTE_CSUM                 = 0x1\n\tBPF_F_REUSE_STACKID                  = 0x400\n\tBPF_F_SEQ_NUMBER                     = 0x8\n\tBPF_F_SKIP_FIELD_MASK                = 0xff\n\tBPF_F_STACK_BUILD_ID                 = 0x20\n\tBPF_F_STRICT_ALIGNMENT               = 0x1\n\tBPF_F_TUNINFO_IPV6                   = 0x1\n\tBPF_F_USER_BUILD_ID                  = 0x800\n\tBPF_F_USER_STACK                     = 0x100\n\tBPF_F_WRONLY                         = 0x10\n\tBPF_F_ZERO_CSUM_TX                   = 0x2\n\tBPF_F_ZERO_SEED                      = 0x40\n\tBPF_H                                = 0x8\n\tBPF_IMM                              = 0x0\n\tBPF_IND                              = 0x40\n\tBPF_JA                               = 0x0\n\tBPF_JEQ                              = 0x10\n\tBPF_JGE                              = 0x30\n\tBPF_JGT                              = 0x20\n\tBPF_JLE                              = 0xb0\n\tBPF_JLT                              = 0xa0\n\tBPF_JMP                              = 0x5\n\tBPF_JMP32                            = 0x6\n\tBPF_JNE                              = 0x50\n\tBPF_JSET                             = 0x40\n\tBPF_JSGE                             = 0x70\n\tBPF_JSGT                             = 0x60\n\tBPF_JSLE                             = 0xd0\n\tBPF_JSLT                             = 0xc0\n\tBPF_K                                = 0x0\n\tBPF_LD                               = 0x0\n\tBPF_LDX                              = 0x1\n\tBPF_LEN                              = 0x80\n\tBPF_LL_OFF                           = -0x200000\n\tBPF_LSH                              = 0x60\n\tBPF_MAJOR_VERSION                    = 0x1\n\tBPF_MAXINSNS                         = 0x1000\n\tBPF_MEM                              = 0x60\n\tBPF_MEMWORDS                         = 0x10\n\tBPF_MINOR_VERSION                    = 0x1\n\tBPF_MISC                             = 0x7\n\tBPF_MOD                              = 0x90\n\tBPF_MOV                              = 0xb0\n\tBPF_MSH                              = 0xa0\n\tBPF_MUL                              = 0x20\n\tBPF_NEG                              = 0x80\n\tBPF_NET_OFF                          = -0x100000\n\tBPF_NOEXIST                          = 0x1\n\tBPF_OBJ_NAME_LEN                     = 0x10\n\tBPF_OR                               = 0x40\n\tBPF_PSEUDO_CALL                      = 0x1\n\tBPF_PSEUDO_MAP_FD                    = 0x1\n\tBPF_RET                              = 0x6\n\tBPF_RSH                              = 0x70\n\tBPF_SOCK_OPS_ALL_CB_FLAGS            = 0x7\n\tBPF_SOCK_OPS_RETRANS_CB_FLAG         = 0x2\n\tBPF_SOCK_OPS_RTO_CB_FLAG             = 0x1\n\tBPF_SOCK_OPS_STATE_CB_FLAG           = 0x4\n\tBPF_ST                               = 0x2\n\tBPF_STX                              = 0x3\n\tBPF_SUB                              = 0x10\n\tBPF_TAG_SIZE                         = 0x8\n\tBPF_TAX                              = 0x0\n\tBPF_TO_BE                            = 0x8\n\tBPF_TO_LE                            = 0x0\n\tBPF_TXA                              = 0x80\n\tBPF_W                                = 0x0\n\tBPF_X                                = 0x8\n\tBPF_XADD                             = 0xc0\n\tBPF_XOR                              = 0xa0\n\tBRKINT                               = 0x2\n\tBS0                                  = 0x0\n\tBS1                                  = 0x2000\n\tBSDLY                                = 0x2000\n\tBTRFS_SUPER_MAGIC                    = 0x9123683e\n\tBTRFS_TEST_MAGIC                     = 0x73727279\n\tCAN_BCM                              = 0x2\n\tCAN_EFF_FLAG                         = 0x80000000\n\tCAN_EFF_ID_BITS                      = 0x1d\n\tCAN_EFF_MASK                         = 0x1fffffff\n\tCAN_ERR_FLAG                         = 0x20000000\n\tCAN_ERR_MASK                         = 0x1fffffff\n\tCAN_INV_FILTER                       = 0x20000000\n\tCAN_ISOTP                            = 0x6\n\tCAN_MAX_DLC                          = 0x8\n\tCAN_MAX_DLEN                         = 0x8\n\tCAN_MCNET                            = 0x5\n\tCAN_MTU                              = 0x10\n\tCAN_NPROTO                           = 0x7\n\tCAN_RAW                              = 0x1\n\tCAN_RAW_FILTER_MAX                   = 0x200\n\tCAN_RTR_FLAG                         = 0x40000000\n\tCAN_SFF_ID_BITS                      = 0xb\n\tCAN_SFF_MASK                         = 0x7ff\n\tCAN_TP16                             = 0x3\n\tCAN_TP20                             = 0x4\n\tCBAUD                                = 0x100f\n\tCBAUDEX                              = 0x1000\n\tCFLUSH                               = 0xf\n\tCGROUP2_SUPER_MAGIC                  = 0x63677270\n\tCGROUP_SUPER_MAGIC                   = 0x27e0eb\n\tCIBAUD                               = 0x100f0000\n\tCLOCAL                               = 0x800\n\tCLOCK_BOOTTIME                       = 0x7\n\tCLOCK_BOOTTIME_ALARM                 = 0x9\n\tCLOCK_DEFAULT                        = 0x0\n\tCLOCK_EXT                            = 0x1\n\tCLOCK_INT                            = 0x2\n\tCLOCK_MONOTONIC                      = 0x1\n\tCLOCK_MONOTONIC_COARSE               = 0x6\n\tCLOCK_MONOTONIC_RAW                  = 0x4\n\tCLOCK_PROCESS_CPUTIME_ID             = 0x2\n\tCLOCK_REALTIME                       = 0x0\n\tCLOCK_REALTIME_ALARM                 = 0x8\n\tCLOCK_REALTIME_COARSE                = 0x5\n\tCLOCK_TAI                            = 0xb\n\tCLOCK_THREAD_CPUTIME_ID              = 0x3\n\tCLOCK_TXFROMRX                       = 0x4\n\tCLOCK_TXINT                          = 0x3\n\tCLONE_CHILD_CLEARTID                 = 0x200000\n\tCLONE_CHILD_SETTID                   = 0x1000000\n\tCLONE_DETACHED                       = 0x400000\n\tCLONE_FILES                          = 0x400\n\tCLONE_FS                             = 0x200\n\tCLONE_IO                             = 0x80000000\n\tCLONE_NEWCGROUP                      = 0x2000000\n\tCLONE_NEWIPC                         = 0x8000000\n\tCLONE_NEWNET                         = 0x40000000\n\tCLONE_NEWNS                          = 0x20000\n\tCLONE_NEWPID                         = 0x20000000\n\tCLONE_NEWUSER                        = 0x10000000\n\tCLONE_NEWUTS                         = 0x4000000\n\tCLONE_PARENT                         = 0x8000\n\tCLONE_PARENT_SETTID                  = 0x100000\n\tCLONE_PTRACE                         = 0x2000\n\tCLONE_SETTLS                         = 0x80000\n\tCLONE_SIGHAND                        = 0x800\n\tCLONE_SYSVSEM                        = 0x40000\n\tCLONE_THREAD                         = 0x10000\n\tCLONE_UNTRACED                       = 0x800000\n\tCLONE_VFORK                          = 0x4000\n\tCLONE_VM                             = 0x100\n\tCMSPAR                               = 0x40000000\n\tCODA_SUPER_MAGIC                     = 0x73757245\n\tCR0                                  = 0x0\n\tCR1                                  = 0x200\n\tCR2                                  = 0x400\n\tCR3                                  = 0x600\n\tCRAMFS_MAGIC                         = 0x28cd3d45\n\tCRDLY                                = 0x600\n\tCREAD                                = 0x80\n\tCRTSCTS                              = 0x80000000\n\tCRYPTO_MAX_NAME                      = 0x40\n\tCRYPTO_MSG_MAX                       = 0x15\n\tCRYPTO_NR_MSGTYPES                   = 0x6\n\tCRYPTO_REPORT_MAXSIZE                = 0x160\n\tCS5                                  = 0x0\n\tCS6                                  = 0x10\n\tCS7                                  = 0x20\n\tCS8                                  = 0x30\n\tCSIGNAL                              = 0xff\n\tCSIZE                                = 0x30\n\tCSTART                               = 0x11\n\tCSTATUS                              = 0x0\n\tCSTOP                                = 0x13\n\tCSTOPB                               = 0x40\n\tCSUSP                                = 0x1a\n\tDAXFS_MAGIC                          = 0x64646178\n\tDEBUGFS_MAGIC                        = 0x64626720\n\tDEVPTS_SUPER_MAGIC                   = 0x1cd1\n\tDT_BLK                               = 0x6\n\tDT_CHR                               = 0x2\n\tDT_DIR                               = 0x4\n\tDT_FIFO                              = 0x1\n\tDT_LNK                               = 0xa\n\tDT_REG                               = 0x8\n\tDT_SOCK                              = 0xc\n\tDT_UNKNOWN                           = 0x0\n\tDT_WHT                               = 0xe\n\tECHO                                 = 0x8\n\tECHOCTL                              = 0x200\n\tECHOE                                = 0x10\n\tECHOK                                = 0x20\n\tECHOKE                               = 0x800\n\tECHONL                               = 0x40\n\tECHOPRT                              = 0x400\n\tECRYPTFS_SUPER_MAGIC                 = 0xf15f\n\tEFD_CLOEXEC                          = 0x80000\n\tEFD_NONBLOCK                         = 0x800\n\tEFD_SEMAPHORE                        = 0x1\n\tEFIVARFS_MAGIC                       = 0xde5e81e4\n\tEFS_SUPER_MAGIC                      = 0x414a53\n\tENCODING_DEFAULT                     = 0x0\n\tENCODING_FM_MARK                     = 0x3\n\tENCODING_FM_SPACE                    = 0x4\n\tENCODING_MANCHESTER                  = 0x5\n\tENCODING_NRZ                         = 0x1\n\tENCODING_NRZI                        = 0x2\n\tEPOLLERR                             = 0x8\n\tEPOLLET                              = 0x80000000\n\tEPOLLEXCLUSIVE                       = 0x10000000\n\tEPOLLHUP                             = 0x10\n\tEPOLLIN                              = 0x1\n\tEPOLLMSG                             = 0x400\n\tEPOLLONESHOT                         = 0x40000000\n\tEPOLLOUT                             = 0x4\n\tEPOLLPRI                             = 0x2\n\tEPOLLRDBAND                          = 0x80\n\tEPOLLRDHUP                           = 0x2000\n\tEPOLLRDNORM                          = 0x40\n\tEPOLLWAKEUP                          = 0x20000000\n\tEPOLLWRBAND                          = 0x200\n\tEPOLLWRNORM                          = 0x100\n\tEPOLL_CLOEXEC                        = 0x80000\n\tEPOLL_CTL_ADD                        = 0x1\n\tEPOLL_CTL_DEL                        = 0x2\n\tEPOLL_CTL_MOD                        = 0x3\n\tETH_P_1588                           = 0x88f7\n\tETH_P_8021AD                         = 0x88a8\n\tETH_P_8021AH                         = 0x88e7\n\tETH_P_8021Q                          = 0x8100\n\tETH_P_80221                          = 0x8917\n\tETH_P_802_2                          = 0x4\n\tETH_P_802_3                          = 0x1\n\tETH_P_802_3_MIN                      = 0x600\n\tETH_P_802_EX1                        = 0x88b5\n\tETH_P_AARP                           = 0x80f3\n\tETH_P_AF_IUCV                        = 0xfbfb\n\tETH_P_ALL                            = 0x3\n\tETH_P_AOE                            = 0x88a2\n\tETH_P_ARCNET                         = 0x1a\n\tETH_P_ARP                            = 0x806\n\tETH_P_ATALK                          = 0x809b\n\tETH_P_ATMFATE                        = 0x8884\n\tETH_P_ATMMPOA                        = 0x884c\n\tETH_P_AX25                           = 0x2\n\tETH_P_BATMAN                         = 0x4305\n\tETH_P_BPQ                            = 0x8ff\n\tETH_P_CAIF                           = 0xf7\n\tETH_P_CAN                            = 0xc\n\tETH_P_CANFD                          = 0xd\n\tETH_P_CONTROL                        = 0x16\n\tETH_P_CUST                           = 0x6006\n\tETH_P_DDCMP                          = 0x6\n\tETH_P_DEC                            = 0x6000\n\tETH_P_DIAG                           = 0x6005\n\tETH_P_DNA_DL                         = 0x6001\n\tETH_P_DNA_RC                         = 0x6002\n\tETH_P_DNA_RT                         = 0x6003\n\tETH_P_DSA                            = 0x1b\n\tETH_P_ECONET                         = 0x18\n\tETH_P_EDSA                           = 0xdada\n\tETH_P_ERSPAN                         = 0x88be\n\tETH_P_ERSPAN2                        = 0x22eb\n\tETH_P_FCOE                           = 0x8906\n\tETH_P_FIP                            = 0x8914\n\tETH_P_HDLC                           = 0x19\n\tETH_P_HSR                            = 0x892f\n\tETH_P_IBOE                           = 0x8915\n\tETH_P_IEEE802154                     = 0xf6\n\tETH_P_IEEEPUP                        = 0xa00\n\tETH_P_IEEEPUPAT                      = 0xa01\n\tETH_P_IFE                            = 0xed3e\n\tETH_P_IP                             = 0x800\n\tETH_P_IPV6                           = 0x86dd\n\tETH_P_IPX                            = 0x8137\n\tETH_P_IRDA                           = 0x17\n\tETH_P_LAT                            = 0x6004\n\tETH_P_LINK_CTL                       = 0x886c\n\tETH_P_LOCALTALK                      = 0x9\n\tETH_P_LOOP                           = 0x60\n\tETH_P_LOOPBACK                       = 0x9000\n\tETH_P_MACSEC                         = 0x88e5\n\tETH_P_MAP                            = 0xf9\n\tETH_P_MOBITEX                        = 0x15\n\tETH_P_MPLS_MC                        = 0x8848\n\tETH_P_MPLS_UC                        = 0x8847\n\tETH_P_MVRP                           = 0x88f5\n\tETH_P_NCSI                           = 0x88f8\n\tETH_P_NSH                            = 0x894f\n\tETH_P_PAE                            = 0x888e\n\tETH_P_PAUSE                          = 0x8808\n\tETH_P_PHONET                         = 0xf5\n\tETH_P_PPPTALK                        = 0x10\n\tETH_P_PPP_DISC                       = 0x8863\n\tETH_P_PPP_MP                         = 0x8\n\tETH_P_PPP_SES                        = 0x8864\n\tETH_P_PREAUTH                        = 0x88c7\n\tETH_P_PRP                            = 0x88fb\n\tETH_P_PUP                            = 0x200\n\tETH_P_PUPAT                          = 0x201\n\tETH_P_QINQ1                          = 0x9100\n\tETH_P_QINQ2                          = 0x9200\n\tETH_P_QINQ3                          = 0x9300\n\tETH_P_RARP                           = 0x8035\n\tETH_P_SCA                            = 0x6007\n\tETH_P_SLOW                           = 0x8809\n\tETH_P_SNAP                           = 0x5\n\tETH_P_TDLS                           = 0x890d\n\tETH_P_TEB                            = 0x6558\n\tETH_P_TIPC                           = 0x88ca\n\tETH_P_TRAILER                        = 0x1c\n\tETH_P_TR_802_2                       = 0x11\n\tETH_P_TSN                            = 0x22f0\n\tETH_P_WAN_PPP                        = 0x7\n\tETH_P_WCCP                           = 0x883e\n\tETH_P_X25                            = 0x805\n\tETH_P_XDSA                           = 0xf8\n\tEXABYTE_ENABLE_NEST                  = 0xf0\n\tEXT2_SUPER_MAGIC                     = 0xef53\n\tEXT3_SUPER_MAGIC                     = 0xef53\n\tEXT4_SUPER_MAGIC                     = 0xef53\n\tEXTA                                 = 0xe\n\tEXTB                                 = 0xf\n\tEXTPROC                              = 0x10000\n\tF2FS_SUPER_MAGIC                     = 0xf2f52010\n\tFALLOC_FL_COLLAPSE_RANGE             = 0x8\n\tFALLOC_FL_INSERT_RANGE               = 0x20\n\tFALLOC_FL_KEEP_SIZE                  = 0x1\n\tFALLOC_FL_NO_HIDE_STALE              = 0x4\n\tFALLOC_FL_PUNCH_HOLE                 = 0x2\n\tFALLOC_FL_UNSHARE_RANGE              = 0x40\n\tFALLOC_FL_ZERO_RANGE                 = 0x10\n\tFANOTIFY_METADATA_VERSION            = 0x3\n\tFAN_ACCESS                           = 0x1\n\tFAN_ACCESS_PERM                      = 0x20000\n\tFAN_ALLOW                            = 0x1\n\tFAN_ALL_CLASS_BITS                   = 0xc\n\tFAN_ALL_EVENTS                       = 0x3b\n\tFAN_ALL_INIT_FLAGS                   = 0x3f\n\tFAN_ALL_MARK_FLAGS                   = 0xff\n\tFAN_ALL_OUTGOING_EVENTS              = 0x3403b\n\tFAN_ALL_PERM_EVENTS                  = 0x30000\n\tFAN_ATTRIB                           = 0x4\n\tFAN_AUDIT                            = 0x10\n\tFAN_CLASS_CONTENT                    = 0x4\n\tFAN_CLASS_NOTIF                      = 0x0\n\tFAN_CLASS_PRE_CONTENT                = 0x8\n\tFAN_CLOEXEC                          = 0x1\n\tFAN_CLOSE                            = 0x18\n\tFAN_CLOSE_NOWRITE                    = 0x10\n\tFAN_CLOSE_WRITE                      = 0x8\n\tFAN_CREATE                           = 0x100\n\tFAN_DELETE                           = 0x200\n\tFAN_DELETE_SELF                      = 0x400\n\tFAN_DENY                             = 0x2\n\tFAN_ENABLE_AUDIT                     = 0x40\n\tFAN_EVENT_INFO_TYPE_FID              = 0x1\n\tFAN_EVENT_METADATA_LEN               = 0x18\n\tFAN_EVENT_ON_CHILD                   = 0x8000000\n\tFAN_MARK_ADD                         = 0x1\n\tFAN_MARK_DONT_FOLLOW                 = 0x4\n\tFAN_MARK_FILESYSTEM                  = 0x100\n\tFAN_MARK_FLUSH                       = 0x80\n\tFAN_MARK_IGNORED_MASK                = 0x20\n\tFAN_MARK_IGNORED_SURV_MODIFY         = 0x40\n\tFAN_MARK_INODE                       = 0x0\n\tFAN_MARK_MOUNT                       = 0x10\n\tFAN_MARK_ONLYDIR                     = 0x8\n\tFAN_MARK_REMOVE                      = 0x2\n\tFAN_MODIFY                           = 0x2\n\tFAN_MOVE                             = 0xc0\n\tFAN_MOVED_FROM                       = 0x40\n\tFAN_MOVED_TO                         = 0x80\n\tFAN_MOVE_SELF                        = 0x800\n\tFAN_NOFD                             = -0x1\n\tFAN_NONBLOCK                         = 0x2\n\tFAN_ONDIR                            = 0x40000000\n\tFAN_OPEN                             = 0x20\n\tFAN_OPEN_EXEC                        = 0x1000\n\tFAN_OPEN_EXEC_PERM                   = 0x40000\n\tFAN_OPEN_PERM                        = 0x10000\n\tFAN_Q_OVERFLOW                       = 0x4000\n\tFAN_REPORT_FID                       = 0x200\n\tFAN_REPORT_TID                       = 0x100\n\tFAN_UNLIMITED_MARKS                  = 0x20\n\tFAN_UNLIMITED_QUEUE                  = 0x10\n\tFD_CLOEXEC                           = 0x1\n\tFD_SETSIZE                           = 0x400\n\tFF0                                  = 0x0\n\tFF1                                  = 0x8000\n\tFFDLY                                = 0x8000\n\tFLUSHO                               = 0x1000\n\tFS_ENCRYPTION_MODE_ADIANTUM          = 0x9\n\tFS_ENCRYPTION_MODE_AES_128_CBC       = 0x5\n\tFS_ENCRYPTION_MODE_AES_128_CTS       = 0x6\n\tFS_ENCRYPTION_MODE_AES_256_CBC       = 0x3\n\tFS_ENCRYPTION_MODE_AES_256_CTS       = 0x4\n\tFS_ENCRYPTION_MODE_AES_256_GCM       = 0x2\n\tFS_ENCRYPTION_MODE_AES_256_XTS       = 0x1\n\tFS_ENCRYPTION_MODE_INVALID           = 0x0\n\tFS_ENCRYPTION_MODE_SPECK128_256_CTS  = 0x8\n\tFS_ENCRYPTION_MODE_SPECK128_256_XTS  = 0x7\n\tFS_IOC_GET_ENCRYPTION_POLICY         = 0x400c6615\n\tFS_IOC_GET_ENCRYPTION_PWSALT         = 0x40106614\n\tFS_IOC_SET_ENCRYPTION_POLICY         = 0x800c6613\n\tFS_KEY_DESCRIPTOR_SIZE               = 0x8\n\tFS_KEY_DESC_PREFIX                   = \"fscrypt:\"\n\tFS_KEY_DESC_PREFIX_SIZE              = 0x8\n\tFS_MAX_KEY_SIZE                      = 0x40\n\tFS_POLICY_FLAGS_PAD_16               = 0x2\n\tFS_POLICY_FLAGS_PAD_32               = 0x3\n\tFS_POLICY_FLAGS_PAD_4                = 0x0\n\tFS_POLICY_FLAGS_PAD_8                = 0x1\n\tFS_POLICY_FLAGS_PAD_MASK             = 0x3\n\tFS_POLICY_FLAGS_VALID                = 0x7\n\tFUTEXFS_SUPER_MAGIC                  = 0xbad1dea\n\tF_ADD_SEALS                          = 0x409\n\tF_DUPFD                              = 0x0\n\tF_DUPFD_CLOEXEC                      = 0x406\n\tF_EXLCK                              = 0x4\n\tF_GETFD                              = 0x1\n\tF_GETFL                              = 0x3\n\tF_GETLEASE                           = 0x401\n\tF_GETLK                              = 0x5\n\tF_GETLK64                            = 0x5\n\tF_GETOWN                             = 0x9\n\tF_GETOWN_EX                          = 0x10\n\tF_GETPIPE_SZ                         = 0x408\n\tF_GETSIG                             = 0xb\n\tF_GET_FILE_RW_HINT                   = 0x40d\n\tF_GET_RW_HINT                        = 0x40b\n\tF_GET_SEALS                          = 0x40a\n\tF_LOCK                               = 0x1\n\tF_NOTIFY                             = 0x402\n\tF_OFD_GETLK                          = 0x24\n\tF_OFD_SETLK                          = 0x25\n\tF_OFD_SETLKW                         = 0x26\n\tF_OK                                 = 0x0\n\tF_RDLCK                              = 0x0\n\tF_SEAL_GROW                          = 0x4\n\tF_SEAL_SEAL                          = 0x1\n\tF_SEAL_SHRINK                        = 0x2\n\tF_SEAL_WRITE                         = 0x8\n\tF_SETFD                              = 0x2\n\tF_SETFL                              = 0x4\n\tF_SETLEASE                           = 0x400\n\tF_SETLK                              = 0x6\n\tF_SETLK64                            = 0x6\n\tF_SETLKW                             = 0x7\n\tF_SETLKW64                           = 0x7\n\tF_SETOWN                             = 0x8\n\tF_SETOWN_EX                          = 0xf\n\tF_SETPIPE_SZ                         = 0x407\n\tF_SETSIG                             = 0xa\n\tF_SET_FILE_RW_HINT                   = 0x40e\n\tF_SET_RW_HINT                        = 0x40c\n\tF_SHLCK                              = 0x8\n\tF_TEST                               = 0x3\n\tF_TLOCK                              = 0x2\n\tF_ULOCK                              = 0x0\n\tF_UNLCK                              = 0x2\n\tF_WRLCK                              = 0x1\n\tGENL_ADMIN_PERM                      = 0x1\n\tGENL_CMD_CAP_DO                      = 0x2\n\tGENL_CMD_CAP_DUMP                    = 0x4\n\tGENL_CMD_CAP_HASPOL                  = 0x8\n\tGENL_HDRLEN                          = 0x4\n\tGENL_ID_CTRL                         = 0x10\n\tGENL_ID_PMCRAID                      = 0x12\n\tGENL_ID_VFS_DQUOT                    = 0x11\n\tGENL_MAX_ID                          = 0x3ff\n\tGENL_MIN_ID                          = 0x10\n\tGENL_NAMSIZ                          = 0x10\n\tGENL_START_ALLOC                     = 0x13\n\tGENL_UNS_ADMIN_PERM                  = 0x10\n\tGRND_NONBLOCK                        = 0x1\n\tGRND_RANDOM                          = 0x2\n\tHDIO_DRIVE_CMD                       = 0x31f\n\tHDIO_DRIVE_CMD_AEB                   = 0x31e\n\tHDIO_DRIVE_CMD_HDR_SIZE              = 0x4\n\tHDIO_DRIVE_HOB_HDR_SIZE              = 0x8\n\tHDIO_DRIVE_RESET                     = 0x31c\n\tHDIO_DRIVE_TASK                      = 0x31e\n\tHDIO_DRIVE_TASKFILE                  = 0x31d\n\tHDIO_DRIVE_TASK_HDR_SIZE             = 0x8\n\tHDIO_GETGEO                          = 0x301\n\tHDIO_GET_32BIT                       = 0x309\n\tHDIO_GET_ACOUSTIC                    = 0x30f\n\tHDIO_GET_ADDRESS                     = 0x310\n\tHDIO_GET_BUSSTATE                    = 0x31a\n\tHDIO_GET_DMA                         = 0x30b\n\tHDIO_GET_IDENTITY                    = 0x30d\n\tHDIO_GET_KEEPSETTINGS                = 0x308\n\tHDIO_GET_MULTCOUNT                   = 0x304\n\tHDIO_GET_NICE                        = 0x30c\n\tHDIO_GET_NOWERR                      = 0x30a\n\tHDIO_GET_QDMA                        = 0x305\n\tHDIO_GET_UNMASKINTR                  = 0x302\n\tHDIO_GET_WCACHE                      = 0x30e\n\tHDIO_OBSOLETE_IDENTITY               = 0x307\n\tHDIO_SCAN_HWIF                       = 0x328\n\tHDIO_SET_32BIT                       = 0x324\n\tHDIO_SET_ACOUSTIC                    = 0x32c\n\tHDIO_SET_ADDRESS                     = 0x32f\n\tHDIO_SET_BUSSTATE                    = 0x32d\n\tHDIO_SET_DMA                         = 0x326\n\tHDIO_SET_KEEPSETTINGS                = 0x323\n\tHDIO_SET_MULTCOUNT                   = 0x321\n\tHDIO_SET_NICE                        = 0x329\n\tHDIO_SET_NOWERR                      = 0x325\n\tHDIO_SET_PIO_MODE                    = 0x327\n\tHDIO_SET_QDMA                        = 0x32e\n\tHDIO_SET_UNMASKINTR                  = 0x322\n\tHDIO_SET_WCACHE                      = 0x32b\n\tHDIO_SET_XFER                        = 0x306\n\tHDIO_TRISTATE_HWIF                   = 0x31b\n\tHDIO_UNREGISTER_HWIF                 = 0x32a\n\tHOSTFS_SUPER_MAGIC                   = 0xc0ffee\n\tHPFS_SUPER_MAGIC                     = 0xf995e849\n\tHUGETLBFS_MAGIC                      = 0x958458f6\n\tHUPCL                                = 0x400\n\tIBSHIFT                              = 0x10\n\tICANON                               = 0x2\n\tICMPV6_FILTER                        = 0x1\n\tICRNL                                = 0x100\n\tIEXTEN                               = 0x8000\n\tIFA_F_DADFAILED                      = 0x8\n\tIFA_F_DEPRECATED                     = 0x20\n\tIFA_F_HOMEADDRESS                    = 0x10\n\tIFA_F_MANAGETEMPADDR                 = 0x100\n\tIFA_F_MCAUTOJOIN                     = 0x400\n\tIFA_F_NODAD                          = 0x2\n\tIFA_F_NOPREFIXROUTE                  = 0x200\n\tIFA_F_OPTIMISTIC                     = 0x4\n\tIFA_F_PERMANENT                      = 0x80\n\tIFA_F_SECONDARY                      = 0x1\n\tIFA_F_STABLE_PRIVACY                 = 0x800\n\tIFA_F_TEMPORARY                      = 0x1\n\tIFA_F_TENTATIVE                      = 0x40\n\tIFA_MAX                              = 0xa\n\tIFF_ALLMULTI                         = 0x200\n\tIFF_ATTACH_QUEUE                     = 0x200\n\tIFF_AUTOMEDIA                        = 0x4000\n\tIFF_BROADCAST                        = 0x2\n\tIFF_DEBUG                            = 0x4\n\tIFF_DETACH_QUEUE                     = 0x400\n\tIFF_DORMANT                          = 0x20000\n\tIFF_DYNAMIC                          = 0x8000\n\tIFF_ECHO                             = 0x40000\n\tIFF_LOOPBACK                         = 0x8\n\tIFF_LOWER_UP                         = 0x10000\n\tIFF_MASTER                           = 0x400\n\tIFF_MULTICAST                        = 0x1000\n\tIFF_MULTI_QUEUE                      = 0x100\n\tIFF_NAPI                             = 0x10\n\tIFF_NAPI_FRAGS                       = 0x20\n\tIFF_NOARP                            = 0x80\n\tIFF_NOFILTER                         = 0x1000\n\tIFF_NOTRAILERS                       = 0x20\n\tIFF_NO_PI                            = 0x1000\n\tIFF_ONE_QUEUE                        = 0x2000\n\tIFF_PERSIST                          = 0x800\n\tIFF_POINTOPOINT                      = 0x10\n\tIFF_PORTSEL                          = 0x2000\n\tIFF_PROMISC                          = 0x100\n\tIFF_RUNNING                          = 0x40\n\tIFF_SLAVE                            = 0x800\n\tIFF_TAP                              = 0x2\n\tIFF_TUN                              = 0x1\n\tIFF_TUN_EXCL                         = 0x8000\n\tIFF_UP                               = 0x1\n\tIFF_VNET_HDR                         = 0x4000\n\tIFF_VOLATILE                         = 0x70c5a\n\tIFNAMSIZ                             = 0x10\n\tIGNBRK                               = 0x1\n\tIGNCR                                = 0x80\n\tIGNPAR                               = 0x4\n\tIMAXBEL                              = 0x2000\n\tINLCR                                = 0x40\n\tINPCK                                = 0x10\n\tIN_ACCESS                            = 0x1\n\tIN_ALL_EVENTS                        = 0xfff\n\tIN_ATTRIB                            = 0x4\n\tIN_CLASSA_HOST                       = 0xffffff\n\tIN_CLASSA_MAX                        = 0x80\n\tIN_CLASSA_NET                        = 0xff000000\n\tIN_CLASSA_NSHIFT                     = 0x18\n\tIN_CLASSB_HOST                       = 0xffff\n\tIN_CLASSB_MAX                        = 0x10000\n\tIN_CLASSB_NET                        = 0xffff0000\n\tIN_CLASSB_NSHIFT                     = 0x10\n\tIN_CLASSC_HOST                       = 0xff\n\tIN_CLASSC_NET                        = 0xffffff00\n\tIN_CLASSC_NSHIFT                     = 0x8\n\tIN_CLOEXEC                           = 0x80000\n\tIN_CLOSE                             = 0x18\n\tIN_CLOSE_NOWRITE                     = 0x10\n\tIN_CLOSE_WRITE                       = 0x8\n\tIN_CREATE                            = 0x100\n\tIN_DELETE                            = 0x200\n\tIN_DELETE_SELF                       = 0x400\n\tIN_DONT_FOLLOW                       = 0x2000000\n\tIN_EXCL_UNLINK                       = 0x4000000\n\tIN_IGNORED                           = 0x8000\n\tIN_ISDIR                             = 0x40000000\n\tIN_LOOPBACKNET                       = 0x7f\n\tIN_MASK_ADD                          = 0x20000000\n\tIN_MASK_CREATE                       = 0x10000000\n\tIN_MODIFY                            = 0x2\n\tIN_MOVE                              = 0xc0\n\tIN_MOVED_FROM                        = 0x40\n\tIN_MOVED_TO                          = 0x80\n\tIN_MOVE_SELF                         = 0x800\n\tIN_NONBLOCK                          = 0x800\n\tIN_ONESHOT                           = 0x80000000\n\tIN_ONLYDIR                           = 0x1000000\n\tIN_OPEN                              = 0x20\n\tIN_Q_OVERFLOW                        = 0x4000\n\tIN_UNMOUNT                           = 0x2000\n\tIOCTL_VM_SOCKETS_GET_LOCAL_CID       = 0x7b9\n\tIPPROTO_AH                           = 0x33\n\tIPPROTO_BEETPH                       = 0x5e\n\tIPPROTO_COMP                         = 0x6c\n\tIPPROTO_DCCP                         = 0x21\n\tIPPROTO_DSTOPTS                      = 0x3c\n\tIPPROTO_EGP                          = 0x8\n\tIPPROTO_ENCAP                        = 0x62\n\tIPPROTO_ESP                          = 0x32\n\tIPPROTO_FRAGMENT                     = 0x2c\n\tIPPROTO_GRE                          = 0x2f\n\tIPPROTO_HOPOPTS                      = 0x0\n\tIPPROTO_ICMP                         = 0x1\n\tIPPROTO_ICMPV6                       = 0x3a\n\tIPPROTO_IDP                          = 0x16\n\tIPPROTO_IGMP                         = 0x2\n\tIPPROTO_IP                           = 0x0\n\tIPPROTO_IPIP                         = 0x4\n\tIPPROTO_IPV6                         = 0x29\n\tIPPROTO_MH                           = 0x87\n\tIPPROTO_MPLS                         = 0x89\n\tIPPROTO_MTP                          = 0x5c\n\tIPPROTO_NONE                         = 0x3b\n\tIPPROTO_PIM                          = 0x67\n\tIPPROTO_PUP                          = 0xc\n\tIPPROTO_RAW                          = 0xff\n\tIPPROTO_ROUTING                      = 0x2b\n\tIPPROTO_RSVP                         = 0x2e\n\tIPPROTO_SCTP                         = 0x84\n\tIPPROTO_TCP                          = 0x6\n\tIPPROTO_TP                           = 0x1d\n\tIPPROTO_UDP                          = 0x11\n\tIPPROTO_UDPLITE                      = 0x88\n\tIPV6_2292DSTOPTS                     = 0x4\n\tIPV6_2292HOPLIMIT                    = 0x8\n\tIPV6_2292HOPOPTS                     = 0x3\n\tIPV6_2292PKTINFO                     = 0x2\n\tIPV6_2292PKTOPTIONS                  = 0x6\n\tIPV6_2292RTHDR                       = 0x5\n\tIPV6_ADDRFORM                        = 0x1\n\tIPV6_ADDR_PREFERENCES                = 0x48\n\tIPV6_ADD_MEMBERSHIP                  = 0x14\n\tIPV6_AUTHHDR                         = 0xa\n\tIPV6_AUTOFLOWLABEL                   = 0x46\n\tIPV6_CHECKSUM                        = 0x7\n\tIPV6_DONTFRAG                        = 0x3e\n\tIPV6_DROP_MEMBERSHIP                 = 0x15\n\tIPV6_DSTOPTS                         = 0x3b\n\tIPV6_FREEBIND                        = 0x4e\n\tIPV6_HDRINCL                         = 0x24\n\tIPV6_HOPLIMIT                        = 0x34\n\tIPV6_HOPOPTS                         = 0x36\n\tIPV6_IPSEC_POLICY                    = 0x22\n\tIPV6_JOIN_ANYCAST                    = 0x1b\n\tIPV6_JOIN_GROUP                      = 0x14\n\tIPV6_LEAVE_ANYCAST                   = 0x1c\n\tIPV6_LEAVE_GROUP                     = 0x15\n\tIPV6_MINHOPCOUNT                     = 0x49\n\tIPV6_MTU                             = 0x18\n\tIPV6_MTU_DISCOVER                    = 0x17\n\tIPV6_MULTICAST_ALL                   = 0x1d\n\tIPV6_MULTICAST_HOPS                  = 0x12\n\tIPV6_MULTICAST_IF                    = 0x11\n\tIPV6_MULTICAST_LOOP                  = 0x13\n\tIPV6_NEXTHOP                         = 0x9\n\tIPV6_ORIGDSTADDR                     = 0x4a\n\tIPV6_PATHMTU                         = 0x3d\n\tIPV6_PKTINFO                         = 0x32\n\tIPV6_PMTUDISC_DO                     = 0x2\n\tIPV6_PMTUDISC_DONT                   = 0x0\n\tIPV6_PMTUDISC_INTERFACE              = 0x4\n\tIPV6_PMTUDISC_OMIT                   = 0x5\n\tIPV6_PMTUDISC_PROBE                  = 0x3\n\tIPV6_PMTUDISC_WANT                   = 0x1\n\tIPV6_RECVDSTOPTS                     = 0x3a\n\tIPV6_RECVERR                         = 0x19\n\tIPV6_RECVFRAGSIZE                    = 0x4d\n\tIPV6_RECVHOPLIMIT                    = 0x33\n\tIPV6_RECVHOPOPTS                     = 0x35\n\tIPV6_RECVORIGDSTADDR                 = 0x4a\n\tIPV6_RECVPATHMTU                     = 0x3c\n\tIPV6_RECVPKTINFO                     = 0x31\n\tIPV6_RECVRTHDR                       = 0x38\n\tIPV6_RECVTCLASS                      = 0x42\n\tIPV6_ROUTER_ALERT                    = 0x16\n\tIPV6_RTHDR                           = 0x39\n\tIPV6_RTHDRDSTOPTS                    = 0x37\n\tIPV6_RTHDR_LOOSE                     = 0x0\n\tIPV6_RTHDR_STRICT                    = 0x1\n\tIPV6_RTHDR_TYPE_0                    = 0x0\n\tIPV6_RXDSTOPTS                       = 0x3b\n\tIPV6_RXHOPOPTS                       = 0x36\n\tIPV6_TCLASS                          = 0x43\n\tIPV6_TRANSPARENT                     = 0x4b\n\tIPV6_UNICAST_HOPS                    = 0x10\n\tIPV6_UNICAST_IF                      = 0x4c\n\tIPV6_V6ONLY                          = 0x1a\n\tIPV6_XFRM_POLICY                     = 0x23\n\tIP_ADD_MEMBERSHIP                    = 0x23\n\tIP_ADD_SOURCE_MEMBERSHIP             = 0x27\n\tIP_BIND_ADDRESS_NO_PORT              = 0x18\n\tIP_BLOCK_SOURCE                      = 0x26\n\tIP_CHECKSUM                          = 0x17\n\tIP_DEFAULT_MULTICAST_LOOP            = 0x1\n\tIP_DEFAULT_MULTICAST_TTL             = 0x1\n\tIP_DF                                = 0x4000\n\tIP_DROP_MEMBERSHIP                   = 0x24\n\tIP_DROP_SOURCE_MEMBERSHIP            = 0x28\n\tIP_FREEBIND                          = 0xf\n\tIP_HDRINCL                           = 0x3\n\tIP_IPSEC_POLICY                      = 0x10\n\tIP_MAXPACKET                         = 0xffff\n\tIP_MAX_MEMBERSHIPS                   = 0x14\n\tIP_MF                                = 0x2000\n\tIP_MINTTL                            = 0x15\n\tIP_MSFILTER                          = 0x29\n\tIP_MSS                               = 0x240\n\tIP_MTU                               = 0xe\n\tIP_MTU_DISCOVER                      = 0xa\n\tIP_MULTICAST_ALL                     = 0x31\n\tIP_MULTICAST_IF                      = 0x20\n\tIP_MULTICAST_LOOP                    = 0x22\n\tIP_MULTICAST_TTL                     = 0x21\n\tIP_NODEFRAG                          = 0x16\n\tIP_OFFMASK                           = 0x1fff\n\tIP_OPTIONS                           = 0x4\n\tIP_ORIGDSTADDR                       = 0x14\n\tIP_PASSSEC                           = 0x12\n\tIP_PKTINFO                           = 0x8\n\tIP_PKTOPTIONS                        = 0x9\n\tIP_PMTUDISC                          = 0xa\n\tIP_PMTUDISC_DO                       = 0x2\n\tIP_PMTUDISC_DONT                     = 0x0\n\tIP_PMTUDISC_INTERFACE                = 0x4\n\tIP_PMTUDISC_OMIT                     = 0x5\n\tIP_PMTUDISC_PROBE                    = 0x3\n\tIP_PMTUDISC_WANT                     = 0x1\n\tIP_RECVERR                           = 0xb\n\tIP_RECVFRAGSIZE                      = 0x19\n\tIP_RECVOPTS                          = 0x6\n\tIP_RECVORIGDSTADDR                   = 0x14\n\tIP_RECVRETOPTS                       = 0x7\n\tIP_RECVTOS                           = 0xd\n\tIP_RECVTTL                           = 0xc\n\tIP_RETOPTS                           = 0x7\n\tIP_RF                                = 0x8000\n\tIP_ROUTER_ALERT                      = 0x5\n\tIP_TOS                               = 0x1\n\tIP_TRANSPARENT                       = 0x13\n\tIP_TTL                               = 0x2\n\tIP_UNBLOCK_SOURCE                    = 0x25\n\tIP_UNICAST_IF                        = 0x32\n\tIP_XFRM_POLICY                       = 0x11\n\tISIG                                 = 0x1\n\tISOFS_SUPER_MAGIC                    = 0x9660\n\tISTRIP                               = 0x20\n\tIUCLC                                = 0x200\n\tIUTF8                                = 0x4000\n\tIXANY                                = 0x800\n\tIXOFF                                = 0x1000\n\tIXON                                 = 0x400\n\tJFFS2_SUPER_MAGIC                    = 0x72b6\n\tKEXEC_ARCH_386                       = 0x30000\n\tKEXEC_ARCH_68K                       = 0x40000\n\tKEXEC_ARCH_AARCH64                   = 0xb70000\n\tKEXEC_ARCH_ARM                       = 0x280000\n\tKEXEC_ARCH_DEFAULT                   = 0x0\n\tKEXEC_ARCH_IA_64                     = 0x320000\n\tKEXEC_ARCH_MASK                      = 0xffff0000\n\tKEXEC_ARCH_MIPS                      = 0x80000\n\tKEXEC_ARCH_MIPS_LE                   = 0xa0000\n\tKEXEC_ARCH_PPC                       = 0x140000\n\tKEXEC_ARCH_PPC64                     = 0x150000\n\tKEXEC_ARCH_S390                      = 0x160000\n\tKEXEC_ARCH_SH                        = 0x2a0000\n\tKEXEC_ARCH_X86_64                    = 0x3e0000\n\tKEXEC_FILE_NO_INITRAMFS              = 0x4\n\tKEXEC_FILE_ON_CRASH                  = 0x2\n\tKEXEC_FILE_UNLOAD                    = 0x1\n\tKEXEC_ON_CRASH                       = 0x1\n\tKEXEC_PRESERVE_CONTEXT               = 0x2\n\tKEXEC_SEGMENT_MAX                    = 0x10\n\tKEYCTL_ASSUME_AUTHORITY              = 0x10\n\tKEYCTL_CHOWN                         = 0x4\n\tKEYCTL_CLEAR                         = 0x7\n\tKEYCTL_DESCRIBE                      = 0x6\n\tKEYCTL_DH_COMPUTE                    = 0x17\n\tKEYCTL_GET_KEYRING_ID                = 0x0\n\tKEYCTL_GET_PERSISTENT                = 0x16\n\tKEYCTL_GET_SECURITY                  = 0x11\n\tKEYCTL_INSTANTIATE                   = 0xc\n\tKEYCTL_INSTANTIATE_IOV               = 0x14\n\tKEYCTL_INVALIDATE                    = 0x15\n\tKEYCTL_JOIN_SESSION_KEYRING          = 0x1\n\tKEYCTL_LINK                          = 0x8\n\tKEYCTL_NEGATE                        = 0xd\n\tKEYCTL_PKEY_DECRYPT                  = 0x1a\n\tKEYCTL_PKEY_ENCRYPT                  = 0x19\n\tKEYCTL_PKEY_QUERY                    = 0x18\n\tKEYCTL_PKEY_SIGN                     = 0x1b\n\tKEYCTL_PKEY_VERIFY                   = 0x1c\n\tKEYCTL_READ                          = 0xb\n\tKEYCTL_REJECT                        = 0x13\n\tKEYCTL_RESTRICT_KEYRING              = 0x1d\n\tKEYCTL_REVOKE                        = 0x3\n\tKEYCTL_SEARCH                        = 0xa\n\tKEYCTL_SESSION_TO_PARENT             = 0x12\n\tKEYCTL_SETPERM                       = 0x5\n\tKEYCTL_SET_REQKEY_KEYRING            = 0xe\n\tKEYCTL_SET_TIMEOUT                   = 0xf\n\tKEYCTL_SUPPORTS_DECRYPT              = 0x2\n\tKEYCTL_SUPPORTS_ENCRYPT              = 0x1\n\tKEYCTL_SUPPORTS_SIGN                 = 0x4\n\tKEYCTL_SUPPORTS_VERIFY               = 0x8\n\tKEYCTL_UNLINK                        = 0x9\n\tKEYCTL_UPDATE                        = 0x2\n\tKEY_REQKEY_DEFL_DEFAULT              = 0x0\n\tKEY_REQKEY_DEFL_GROUP_KEYRING        = 0x6\n\tKEY_REQKEY_DEFL_NO_CHANGE            = -0x1\n\tKEY_REQKEY_DEFL_PROCESS_KEYRING      = 0x2\n\tKEY_REQKEY_DEFL_REQUESTOR_KEYRING    = 0x7\n\tKEY_REQKEY_DEFL_SESSION_KEYRING      = 0x3\n\tKEY_REQKEY_DEFL_THREAD_KEYRING       = 0x1\n\tKEY_REQKEY_DEFL_USER_KEYRING         = 0x4\n\tKEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5\n\tKEY_SPEC_GROUP_KEYRING               = -0x6\n\tKEY_SPEC_PROCESS_KEYRING             = -0x2\n\tKEY_SPEC_REQKEY_AUTH_KEY             = -0x7\n\tKEY_SPEC_REQUESTOR_KEYRING           = -0x8\n\tKEY_SPEC_SESSION_KEYRING             = -0x3\n\tKEY_SPEC_THREAD_KEYRING              = -0x1\n\tKEY_SPEC_USER_KEYRING                = -0x4\n\tKEY_SPEC_USER_SESSION_KEYRING        = -0x5\n\tLINUX_REBOOT_CMD_CAD_OFF             = 0x0\n\tLINUX_REBOOT_CMD_CAD_ON              = 0x89abcdef\n\tLINUX_REBOOT_CMD_HALT                = 0xcdef0123\n\tLINUX_REBOOT_CMD_KEXEC               = 0x45584543\n\tLINUX_REBOOT_CMD_POWER_OFF           = 0x4321fedc\n\tLINUX_REBOOT_CMD_RESTART             = 0x1234567\n\tLINUX_REBOOT_CMD_RESTART2            = 0xa1b2c3d4\n\tLINUX_REBOOT_CMD_SW_SUSPEND          = 0xd000fce2\n\tLINUX_REBOOT_MAGIC1                  = 0xfee1dead\n\tLINUX_REBOOT_MAGIC2                  = 0x28121969\n\tLOCK_EX                              = 0x2\n\tLOCK_NB                              = 0x4\n\tLOCK_SH                              = 0x1\n\tLOCK_UN                              = 0x8\n\tMADV_DODUMP                          = 0x11\n\tMADV_DOFORK                          = 0xb\n\tMADV_DONTDUMP                        = 0x10\n\tMADV_DONTFORK                        = 0xa\n\tMADV_DONTNEED                        = 0x4\n\tMADV_FREE                            = 0x8\n\tMADV_HUGEPAGE                        = 0xe\n\tMADV_HWPOISON                        = 0x64\n\tMADV_KEEPONFORK                      = 0x13\n\tMADV_MERGEABLE                       = 0xc\n\tMADV_NOHUGEPAGE                      = 0xf\n\tMADV_NORMAL                          = 0x0\n\tMADV_RANDOM                          = 0x1\n\tMADV_REMOVE                          = 0x9\n\tMADV_SEQUENTIAL                      = 0x2\n\tMADV_UNMERGEABLE                     = 0xd\n\tMADV_WILLNEED                        = 0x3\n\tMADV_WIPEONFORK                      = 0x12\n\tMAP_ANON                             = 0x20\n\tMAP_ANONYMOUS                        = 0x20\n\tMAP_DENYWRITE                        = 0x800\n\tMAP_EXECUTABLE                       = 0x1000\n\tMAP_FILE                             = 0x0\n\tMAP_FIXED                            = 0x10\n\tMAP_FIXED_NOREPLACE                  = 0x100000\n\tMAP_GROWSDOWN                        = 0x100\n\tMAP_HUGETLB                          = 0x40000\n\tMAP_HUGE_MASK                        = 0x3f\n\tMAP_HUGE_SHIFT                       = 0x1a\n\tMAP_LOCKED                           = 0x2000\n\tMAP_NONBLOCK                         = 0x10000\n\tMAP_NORESERVE                        = 0x4000\n\tMAP_POPULATE                         = 0x8000\n\tMAP_PRIVATE                          = 0x2\n\tMAP_SHARED                           = 0x1\n\tMAP_SHARED_VALIDATE                  = 0x3\n\tMAP_STACK                            = 0x20000\n\tMAP_SYNC                             = 0x80000\n\tMAP_TYPE                             = 0xf\n\tMCAST_BLOCK_SOURCE                   = 0x2b\n\tMCAST_EXCLUDE                        = 0x0\n\tMCAST_INCLUDE                        = 0x1\n\tMCAST_JOIN_GROUP                     = 0x2a\n\tMCAST_JOIN_SOURCE_GROUP              = 0x2e\n\tMCAST_LEAVE_GROUP                    = 0x2d\n\tMCAST_LEAVE_SOURCE_GROUP             = 0x2f\n\tMCAST_MSFILTER                       = 0x30\n\tMCAST_UNBLOCK_SOURCE                 = 0x2c\n\tMCL_CURRENT                          = 0x1\n\tMCL_FUTURE                           = 0x2\n\tMCL_ONFAULT                          = 0x4\n\tMFD_ALLOW_SEALING                    = 0x2\n\tMFD_CLOEXEC                          = 0x1\n\tMFD_HUGETLB                          = 0x4\n\tMFD_HUGE_16GB                        = -0x78000000\n\tMFD_HUGE_16MB                        = 0x60000000\n\tMFD_HUGE_1GB                         = 0x78000000\n\tMFD_HUGE_1MB                         = 0x50000000\n\tMFD_HUGE_256MB                       = 0x70000000\n\tMFD_HUGE_2GB                         = 0x7c000000\n\tMFD_HUGE_2MB                         = 0x54000000\n\tMFD_HUGE_32MB                        = 0x64000000\n\tMFD_HUGE_512KB                       = 0x4c000000\n\tMFD_HUGE_512MB                       = 0x74000000\n\tMFD_HUGE_64KB                        = 0x40000000\n\tMFD_HUGE_8MB                         = 0x5c000000\n\tMFD_HUGE_MASK                        = 0x3f\n\tMFD_HUGE_SHIFT                       = 0x1a\n\tMINIX2_SUPER_MAGIC                   = 0x2468\n\tMINIX2_SUPER_MAGIC2                  = 0x2478\n\tMINIX3_SUPER_MAGIC                   = 0x4d5a\n\tMINIX_SUPER_MAGIC                    = 0x137f\n\tMINIX_SUPER_MAGIC2                   = 0x138f\n\tMNT_DETACH                           = 0x2\n\tMNT_EXPIRE                           = 0x4\n\tMNT_FORCE                            = 0x1\n\tMODULE_INIT_IGNORE_MODVERSIONS       = 0x1\n\tMODULE_INIT_IGNORE_VERMAGIC          = 0x2\n\tMSDOS_SUPER_MAGIC                    = 0x4d44\n\tMSG_BATCH                            = 0x40000\n\tMSG_CMSG_CLOEXEC                     = 0x40000000\n\tMSG_CONFIRM                          = 0x800\n\tMSG_CTRUNC                           = 0x8\n\tMSG_DONTROUTE                        = 0x4\n\tMSG_DONTWAIT                         = 0x40\n\tMSG_EOR                              = 0x80\n\tMSG_ERRQUEUE                         = 0x2000\n\tMSG_FASTOPEN                         = 0x20000000\n\tMSG_FIN                              = 0x200\n\tMSG_MORE                             = 0x8000\n\tMSG_NOSIGNAL                         = 0x4000\n\tMSG_OOB                              = 0x1\n\tMSG_PEEK                             = 0x2\n\tMSG_PROXY                            = 0x10\n\tMSG_RST                              = 0x1000\n\tMSG_SYN                              = 0x400\n\tMSG_TRUNC                            = 0x20\n\tMSG_TRYHARD                          = 0x4\n\tMSG_WAITALL                          = 0x100\n\tMSG_WAITFORONE                       = 0x10000\n\tMSG_ZEROCOPY                         = 0x4000000\n\tMS_ACTIVE                            = 0x40000000\n\tMS_ASYNC                             = 0x1\n\tMS_BIND                              = 0x1000\n\tMS_BORN                              = 0x20000000\n\tMS_DIRSYNC                           = 0x80\n\tMS_INVALIDATE                        = 0x2\n\tMS_I_VERSION                         = 0x800000\n\tMS_KERNMOUNT                         = 0x400000\n\tMS_LAZYTIME                          = 0x2000000\n\tMS_MANDLOCK                          = 0x40\n\tMS_MGC_MSK                           = 0xffff0000\n\tMS_MGC_VAL                           = 0xc0ed0000\n\tMS_MOVE                              = 0x2000\n\tMS_NOATIME                           = 0x400\n\tMS_NODEV                             = 0x4\n\tMS_NODIRATIME                        = 0x800\n\tMS_NOEXEC                            = 0x8\n\tMS_NOREMOTELOCK                      = 0x8000000\n\tMS_NOSEC                             = 0x10000000\n\tMS_NOSUID                            = 0x2\n\tMS_NOUSER                            = -0x80000000\n\tMS_POSIXACL                          = 0x10000\n\tMS_PRIVATE                           = 0x40000\n\tMS_RDONLY                            = 0x1\n\tMS_REC                               = 0x4000\n\tMS_RELATIME                          = 0x200000\n\tMS_REMOUNT                           = 0x20\n\tMS_RMT_MASK                          = 0x2800051\n\tMS_SHARED                            = 0x100000\n\tMS_SILENT                            = 0x8000\n\tMS_SLAVE                             = 0x80000\n\tMS_STRICTATIME                       = 0x1000000\n\tMS_SUBMOUNT                          = 0x4000000\n\tMS_SYNC                              = 0x4\n\tMS_SYNCHRONOUS                       = 0x10\n\tMS_UNBINDABLE                        = 0x20000\n\tMS_VERBOSE                           = 0x8000\n\tMTD_INODE_FS_MAGIC                   = 0x11307854\n\tNAME_MAX                             = 0xff\n\tNCP_SUPER_MAGIC                      = 0x564c\n\tNETLINK_ADD_MEMBERSHIP               = 0x1\n\tNETLINK_AUDIT                        = 0x9\n\tNETLINK_BROADCAST_ERROR              = 0x4\n\tNETLINK_CAP_ACK                      = 0xa\n\tNETLINK_CONNECTOR                    = 0xb\n\tNETLINK_CRYPTO                       = 0x15\n\tNETLINK_DNRTMSG                      = 0xe\n\tNETLINK_DROP_MEMBERSHIP              = 0x2\n\tNETLINK_ECRYPTFS                     = 0x13\n\tNETLINK_EXT_ACK                      = 0xb\n\tNETLINK_FIB_LOOKUP                   = 0xa\n\tNETLINK_FIREWALL                     = 0x3\n\tNETLINK_GENERIC                      = 0x10\n\tNETLINK_GET_STRICT_CHK               = 0xc\n\tNETLINK_INET_DIAG                    = 0x4\n\tNETLINK_IP6_FW                       = 0xd\n\tNETLINK_ISCSI                        = 0x8\n\tNETLINK_KOBJECT_UEVENT               = 0xf\n\tNETLINK_LISTEN_ALL_NSID              = 0x8\n\tNETLINK_LIST_MEMBERSHIPS             = 0x9\n\tNETLINK_NETFILTER                    = 0xc\n\tNETLINK_NFLOG                        = 0x5\n\tNETLINK_NO_ENOBUFS                   = 0x5\n\tNETLINK_PKTINFO                      = 0x3\n\tNETLINK_RDMA                         = 0x14\n\tNETLINK_ROUTE                        = 0x0\n\tNETLINK_RX_RING                      = 0x6\n\tNETLINK_SCSITRANSPORT                = 0x12\n\tNETLINK_SELINUX                      = 0x7\n\tNETLINK_SMC                          = 0x16\n\tNETLINK_SOCK_DIAG                    = 0x4\n\tNETLINK_TX_RING                      = 0x7\n\tNETLINK_UNUSED                       = 0x1\n\tNETLINK_USERSOCK                     = 0x2\n\tNETLINK_XFRM                         = 0x6\n\tNETNSA_MAX                           = 0x5\n\tNETNSA_NSID_NOT_ASSIGNED             = -0x1\n\tNFNETLINK_V0                         = 0x0\n\tNFNLGRP_ACCT_QUOTA                   = 0x8\n\tNFNLGRP_CONNTRACK_DESTROY            = 0x3\n\tNFNLGRP_CONNTRACK_EXP_DESTROY        = 0x6\n\tNFNLGRP_CONNTRACK_EXP_NEW            = 0x4\n\tNFNLGRP_CONNTRACK_EXP_UPDATE         = 0x5\n\tNFNLGRP_CONNTRACK_NEW                = 0x1\n\tNFNLGRP_CONNTRACK_UPDATE             = 0x2\n\tNFNLGRP_MAX                          = 0x9\n\tNFNLGRP_NFTABLES                     = 0x7\n\tNFNLGRP_NFTRACE                      = 0x9\n\tNFNLGRP_NONE                         = 0x0\n\tNFNL_BATCH_MAX                       = 0x1\n\tNFNL_MSG_BATCH_BEGIN                 = 0x10\n\tNFNL_MSG_BATCH_END                   = 0x11\n\tNFNL_NFA_NEST                        = 0x8000\n\tNFNL_SUBSYS_ACCT                     = 0x7\n\tNFNL_SUBSYS_COUNT                    = 0xc\n\tNFNL_SUBSYS_CTHELPER                 = 0x9\n\tNFNL_SUBSYS_CTNETLINK                = 0x1\n\tNFNL_SUBSYS_CTNETLINK_EXP            = 0x2\n\tNFNL_SUBSYS_CTNETLINK_TIMEOUT        = 0x8\n\tNFNL_SUBSYS_IPSET                    = 0x6\n\tNFNL_SUBSYS_NFTABLES                 = 0xa\n\tNFNL_SUBSYS_NFT_COMPAT               = 0xb\n\tNFNL_SUBSYS_NONE                     = 0x0\n\tNFNL_SUBSYS_OSF                      = 0x5\n\tNFNL_SUBSYS_QUEUE                    = 0x3\n\tNFNL_SUBSYS_ULOG                     = 0x4\n\tNFS_SUPER_MAGIC                      = 0x6969\n\tNILFS_SUPER_MAGIC                    = 0x3434\n\tNL0                                  = 0x0\n\tNL1                                  = 0x100\n\tNLA_ALIGNTO                          = 0x4\n\tNLA_F_NESTED                         = 0x8000\n\tNLA_F_NET_BYTEORDER                  = 0x4000\n\tNLA_HDRLEN                           = 0x4\n\tNLDLY                                = 0x100\n\tNLMSG_ALIGNTO                        = 0x4\n\tNLMSG_DONE                           = 0x3\n\tNLMSG_ERROR                          = 0x2\n\tNLMSG_HDRLEN                         = 0x10\n\tNLMSG_MIN_TYPE                       = 0x10\n\tNLMSG_NOOP                           = 0x1\n\tNLMSG_OVERRUN                        = 0x4\n\tNLM_F_ACK                            = 0x4\n\tNLM_F_ACK_TLVS                       = 0x200\n\tNLM_F_APPEND                         = 0x800\n\tNLM_F_ATOMIC                         = 0x400\n\tNLM_F_CAPPED                         = 0x100\n\tNLM_F_CREATE                         = 0x400\n\tNLM_F_DUMP                           = 0x300\n\tNLM_F_DUMP_FILTERED                  = 0x20\n\tNLM_F_DUMP_INTR                      = 0x10\n\tNLM_F_ECHO                           = 0x8\n\tNLM_F_EXCL                           = 0x200\n\tNLM_F_MATCH                          = 0x200\n\tNLM_F_MULTI                          = 0x2\n\tNLM_F_NONREC                         = 0x100\n\tNLM_F_REPLACE                        = 0x100\n\tNLM_F_REQUEST                        = 0x1\n\tNLM_F_ROOT                           = 0x100\n\tNOFLSH                               = 0x80\n\tNSFS_MAGIC                           = 0x6e736673\n\tOCFS2_SUPER_MAGIC                    = 0x7461636f\n\tOCRNL                                = 0x8\n\tOFDEL                                = 0x80\n\tOFILL                                = 0x40\n\tOLCUC                                = 0x2\n\tONLCR                                = 0x4\n\tONLRET                               = 0x20\n\tONOCR                                = 0x10\n\tOPENPROM_SUPER_MAGIC                 = 0x9fa1\n\tOPOST                                = 0x1\n\tOVERLAYFS_SUPER_MAGIC                = 0x794c7630\n\tO_ACCMODE                            = 0x3\n\tO_APPEND                             = 0x400\n\tO_ASYNC                              = 0x2000\n\tO_CLOEXEC                            = 0x80000\n\tO_CREAT                              = 0x40\n\tO_DIRECT                             = 0x4000\n\tO_DIRECTORY                          = 0x10000\n\tO_DSYNC                              = 0x1000\n\tO_EXCL                               = 0x80\n\tO_FSYNC                              = 0x101000\n\tO_LARGEFILE                          = 0x0\n\tO_NDELAY                             = 0x800\n\tO_NOATIME                            = 0x40000\n\tO_NOCTTY                             = 0x100\n\tO_NOFOLLOW                           = 0x20000\n\tO_NONBLOCK                           = 0x800\n\tO_PATH                               = 0x200000\n\tO_RDONLY                             = 0x0\n\tO_RDWR                               = 0x2\n\tO_RSYNC                              = 0x101000\n\tO_SYNC                               = 0x101000\n\tO_TMPFILE                            = 0x410000\n\tO_TRUNC                              = 0x200\n\tO_WRONLY                             = 0x1\n\tPACKET_ADD_MEMBERSHIP                = 0x1\n\tPACKET_AUXDATA                       = 0x8\n\tPACKET_BROADCAST                     = 0x1\n\tPACKET_COPY_THRESH                   = 0x7\n\tPACKET_DROP_MEMBERSHIP               = 0x2\n\tPACKET_FANOUT                        = 0x12\n\tPACKET_FANOUT_CBPF                   = 0x6\n\tPACKET_FANOUT_CPU                    = 0x2\n\tPACKET_FANOUT_DATA                   = 0x16\n\tPACKET_FANOUT_EBPF                   = 0x7\n\tPACKET_FANOUT_FLAG_DEFRAG            = 0x8000\n\tPACKET_FANOUT_FLAG_ROLLOVER          = 0x1000\n\tPACKET_FANOUT_FLAG_UNIQUEID          = 0x2000\n\tPACKET_FANOUT_HASH                   = 0x0\n\tPACKET_FANOUT_LB                     = 0x1\n\tPACKET_FANOUT_QM                     = 0x5\n\tPACKET_FANOUT_RND                    = 0x4\n\tPACKET_FANOUT_ROLLOVER               = 0x3\n\tPACKET_FASTROUTE                     = 0x6\n\tPACKET_HDRLEN                        = 0xb\n\tPACKET_HOST                          = 0x0\n\tPACKET_IGNORE_OUTGOING               = 0x17\n\tPACKET_KERNEL                        = 0x7\n\tPACKET_LOOPBACK                      = 0x5\n\tPACKET_LOSS                          = 0xe\n\tPACKET_MR_ALLMULTI                   = 0x2\n\tPACKET_MR_MULTICAST                  = 0x0\n\tPACKET_MR_PROMISC                    = 0x1\n\tPACKET_MR_UNICAST                    = 0x3\n\tPACKET_MULTICAST                     = 0x2\n\tPACKET_ORIGDEV                       = 0x9\n\tPACKET_OTHERHOST                     = 0x3\n\tPACKET_OUTGOING                      = 0x4\n\tPACKET_QDISC_BYPASS                  = 0x14\n\tPACKET_RECV_OUTPUT                   = 0x3\n\tPACKET_RESERVE                       = 0xc\n\tPACKET_ROLLOVER_STATS                = 0x15\n\tPACKET_RX_RING                       = 0x5\n\tPACKET_STATISTICS                    = 0x6\n\tPACKET_TIMESTAMP                     = 0x11\n\tPACKET_TX_HAS_OFF                    = 0x13\n\tPACKET_TX_RING                       = 0xd\n\tPACKET_TX_TIMESTAMP                  = 0x10\n\tPACKET_USER                          = 0x6\n\tPACKET_VERSION                       = 0xa\n\tPACKET_VNET_HDR                      = 0xf\n\tPARENB                               = 0x100\n\tPARITY_CRC16_PR0                     = 0x2\n\tPARITY_CRC16_PR0_CCITT               = 0x4\n\tPARITY_CRC16_PR1                     = 0x3\n\tPARITY_CRC16_PR1_CCITT               = 0x5\n\tPARITY_CRC32_PR0_CCITT               = 0x6\n\tPARITY_CRC32_PR1_CCITT               = 0x7\n\tPARITY_DEFAULT                       = 0x0\n\tPARITY_NONE                          = 0x1\n\tPARMRK                               = 0x8\n\tPARODD                               = 0x200\n\tPENDIN                               = 0x4000\n\tPERF_EVENT_IOC_DISABLE               = 0x2401\n\tPERF_EVENT_IOC_ENABLE                = 0x2400\n\tPERF_EVENT_IOC_ID                    = 0x80082407\n\tPERF_EVENT_IOC_MODIFY_ATTRIBUTES     = 0x4008240b\n\tPERF_EVENT_IOC_PAUSE_OUTPUT          = 0x40042409\n\tPERF_EVENT_IOC_PERIOD                = 0x40082404\n\tPERF_EVENT_IOC_QUERY_BPF             = 0xc008240a\n\tPERF_EVENT_IOC_REFRESH               = 0x2402\n\tPERF_EVENT_IOC_RESET                 = 0x2403\n\tPERF_EVENT_IOC_SET_BPF               = 0x40042408\n\tPERF_EVENT_IOC_SET_FILTER            = 0x40082406\n\tPERF_EVENT_IOC_SET_OUTPUT            = 0x2405\n\tPIPEFS_MAGIC                         = 0x50495045\n\tPPPIOCATTACH                         = 0x4004743d\n\tPPPIOCATTCHAN                        = 0x40047438\n\tPPPIOCCONNECT                        = 0x4004743a\n\tPPPIOCDETACH                         = 0x4004743c\n\tPPPIOCDISCONN                        = 0x7439\n\tPPPIOCGASYNCMAP                      = 0x80047458\n\tPPPIOCGCHAN                          = 0x80047437\n\tPPPIOCGDEBUG                         = 0x80047441\n\tPPPIOCGFLAGS                         = 0x8004745a\n\tPPPIOCGIDLE                          = 0x8010743f\n\tPPPIOCGL2TPSTATS                     = 0x80487436\n\tPPPIOCGMRU                           = 0x80047453\n\tPPPIOCGNPMODE                        = 0xc008744c\n\tPPPIOCGRASYNCMAP                     = 0x80047455\n\tPPPIOCGUNIT                          = 0x80047456\n\tPPPIOCGXASYNCMAP                     = 0x80207450\n\tPPPIOCNEWUNIT                        = 0xc004743e\n\tPPPIOCSACTIVE                        = 0x40107446\n\tPPPIOCSASYNCMAP                      = 0x40047457\n\tPPPIOCSCOMPRESS                      = 0x4010744d\n\tPPPIOCSDEBUG                         = 0x40047440\n\tPPPIOCSFLAGS                         = 0x40047459\n\tPPPIOCSMAXCID                        = 0x40047451\n\tPPPIOCSMRRU                          = 0x4004743b\n\tPPPIOCSMRU                           = 0x40047452\n\tPPPIOCSNPMODE                        = 0x4008744b\n\tPPPIOCSPASS                          = 0x40107447\n\tPPPIOCSRASYNCMAP                     = 0x40047454\n\tPPPIOCSXASYNCMAP                     = 0x4020744f\n\tPPPIOCXFERUNIT                       = 0x744e\n\tPRIO_PGRP                            = 0x1\n\tPRIO_PROCESS                         = 0x0\n\tPRIO_USER                            = 0x2\n\tPROC_SUPER_MAGIC                     = 0x9fa0\n\tPROT_EXEC                            = 0x4\n\tPROT_GROWSDOWN                       = 0x1000000\n\tPROT_GROWSUP                         = 0x2000000\n\tPROT_NONE                            = 0x0\n\tPROT_READ                            = 0x1\n\tPROT_WRITE                           = 0x2\n\tPR_CAPBSET_DROP                      = 0x18\n\tPR_CAPBSET_READ                      = 0x17\n\tPR_CAP_AMBIENT                       = 0x2f\n\tPR_CAP_AMBIENT_CLEAR_ALL             = 0x4\n\tPR_CAP_AMBIENT_IS_SET                = 0x1\n\tPR_CAP_AMBIENT_LOWER                 = 0x3\n\tPR_CAP_AMBIENT_RAISE                 = 0x2\n\tPR_ENDIAN_BIG                        = 0x0\n\tPR_ENDIAN_LITTLE                     = 0x1\n\tPR_ENDIAN_PPC_LITTLE                 = 0x2\n\tPR_FPEMU_NOPRINT                     = 0x1\n\tPR_FPEMU_SIGFPE                      = 0x2\n\tPR_FP_EXC_ASYNC                      = 0x2\n\tPR_FP_EXC_DISABLED                   = 0x0\n\tPR_FP_EXC_DIV                        = 0x10000\n\tPR_FP_EXC_INV                        = 0x100000\n\tPR_FP_EXC_NONRECOV                   = 0x1\n\tPR_FP_EXC_OVF                        = 0x20000\n\tPR_FP_EXC_PRECISE                    = 0x3\n\tPR_FP_EXC_RES                        = 0x80000\n\tPR_FP_EXC_SW_ENABLE                  = 0x80\n\tPR_FP_EXC_UND                        = 0x40000\n\tPR_FP_MODE_FR                        = 0x1\n\tPR_FP_MODE_FRE                       = 0x2\n\tPR_GET_CHILD_SUBREAPER               = 0x25\n\tPR_GET_DUMPABLE                      = 0x3\n\tPR_GET_ENDIAN                        = 0x13\n\tPR_GET_FPEMU                         = 0x9\n\tPR_GET_FPEXC                         = 0xb\n\tPR_GET_FP_MODE                       = 0x2e\n\tPR_GET_KEEPCAPS                      = 0x7\n\tPR_GET_NAME                          = 0x10\n\tPR_GET_NO_NEW_PRIVS                  = 0x27\n\tPR_GET_PDEATHSIG                     = 0x2\n\tPR_GET_SECCOMP                       = 0x15\n\tPR_GET_SECUREBITS                    = 0x1b\n\tPR_GET_SPECULATION_CTRL              = 0x34\n\tPR_GET_THP_DISABLE                   = 0x2a\n\tPR_GET_TID_ADDRESS                   = 0x28\n\tPR_GET_TIMERSLACK                    = 0x1e\n\tPR_GET_TIMING                        = 0xd\n\tPR_GET_TSC                           = 0x19\n\tPR_GET_UNALIGN                       = 0x5\n\tPR_MCE_KILL                          = 0x21\n\tPR_MCE_KILL_CLEAR                    = 0x0\n\tPR_MCE_KILL_DEFAULT                  = 0x2\n\tPR_MCE_KILL_EARLY                    = 0x1\n\tPR_MCE_KILL_GET                      = 0x22\n\tPR_MCE_KILL_LATE                     = 0x0\n\tPR_MCE_KILL_SET                      = 0x1\n\tPR_MPX_DISABLE_MANAGEMENT            = 0x2c\n\tPR_MPX_ENABLE_MANAGEMENT             = 0x2b\n\tPR_PAC_APDAKEY                       = 0x4\n\tPR_PAC_APDBKEY                       = 0x8\n\tPR_PAC_APGAKEY                       = 0x10\n\tPR_PAC_APIAKEY                       = 0x1\n\tPR_PAC_APIBKEY                       = 0x2\n\tPR_PAC_RESET_KEYS                    = 0x36\n\tPR_SET_CHILD_SUBREAPER               = 0x24\n\tPR_SET_DUMPABLE                      = 0x4\n\tPR_SET_ENDIAN                        = 0x14\n\tPR_SET_FPEMU                         = 0xa\n\tPR_SET_FPEXC                         = 0xc\n\tPR_SET_FP_MODE                       = 0x2d\n\tPR_SET_KEEPCAPS                      = 0x8\n\tPR_SET_MM                            = 0x23\n\tPR_SET_MM_ARG_END                    = 0x9\n\tPR_SET_MM_ARG_START                  = 0x8\n\tPR_SET_MM_AUXV                       = 0xc\n\tPR_SET_MM_BRK                        = 0x7\n\tPR_SET_MM_END_CODE                   = 0x2\n\tPR_SET_MM_END_DATA                   = 0x4\n\tPR_SET_MM_ENV_END                    = 0xb\n\tPR_SET_MM_ENV_START                  = 0xa\n\tPR_SET_MM_EXE_FILE                   = 0xd\n\tPR_SET_MM_MAP                        = 0xe\n\tPR_SET_MM_MAP_SIZE                   = 0xf\n\tPR_SET_MM_START_BRK                  = 0x6\n\tPR_SET_MM_START_CODE                 = 0x1\n\tPR_SET_MM_START_DATA                 = 0x3\n\tPR_SET_MM_START_STACK                = 0x5\n\tPR_SET_NAME                          = 0xf\n\tPR_SET_NO_NEW_PRIVS                  = 0x26\n\tPR_SET_PDEATHSIG                     = 0x1\n\tPR_SET_PTRACER                       = 0x59616d61\n\tPR_SET_PTRACER_ANY                   = 0xffffffffffffffff\n\tPR_SET_SECCOMP                       = 0x16\n\tPR_SET_SECUREBITS                    = 0x1c\n\tPR_SET_SPECULATION_CTRL              = 0x35\n\tPR_SET_THP_DISABLE                   = 0x29\n\tPR_SET_TIMERSLACK                    = 0x1d\n\tPR_SET_TIMING                        = 0xe\n\tPR_SET_TSC                           = 0x1a\n\tPR_SET_UNALIGN                       = 0x6\n\tPR_SPEC_DISABLE                      = 0x4\n\tPR_SPEC_DISABLE_NOEXEC               = 0x10\n\tPR_SPEC_ENABLE                       = 0x2\n\tPR_SPEC_FORCE_DISABLE                = 0x8\n\tPR_SPEC_INDIRECT_BRANCH              = 0x1\n\tPR_SPEC_NOT_AFFECTED                 = 0x0\n\tPR_SPEC_PRCTL                        = 0x1\n\tPR_SPEC_STORE_BYPASS                 = 0x0\n\tPR_SVE_GET_VL                        = 0x33\n\tPR_SVE_SET_VL                        = 0x32\n\tPR_SVE_SET_VL_ONEXEC                 = 0x40000\n\tPR_SVE_VL_INHERIT                    = 0x20000\n\tPR_SVE_VL_LEN_MASK                   = 0xffff\n\tPR_TASK_PERF_EVENTS_DISABLE          = 0x1f\n\tPR_TASK_PERF_EVENTS_ENABLE           = 0x20\n\tPR_TIMING_STATISTICAL                = 0x0\n\tPR_TIMING_TIMESTAMP                  = 0x1\n\tPR_TSC_ENABLE                        = 0x1\n\tPR_TSC_SIGSEGV                       = 0x2\n\tPR_UNALIGN_NOPRINT                   = 0x1\n\tPR_UNALIGN_SIGBUS                    = 0x2\n\tPSTOREFS_MAGIC                       = 0x6165676c\n\tPTRACE_ATTACH                        = 0x10\n\tPTRACE_CONT                          = 0x7\n\tPTRACE_DETACH                        = 0x11\n\tPTRACE_DISABLE_TE                    = 0x5010\n\tPTRACE_ENABLE_TE                     = 0x5009\n\tPTRACE_EVENT_CLONE                   = 0x3\n\tPTRACE_EVENT_EXEC                    = 0x4\n\tPTRACE_EVENT_EXIT                    = 0x6\n\tPTRACE_EVENT_FORK                    = 0x1\n\tPTRACE_EVENT_SECCOMP                 = 0x7\n\tPTRACE_EVENT_STOP                    = 0x80\n\tPTRACE_EVENT_VFORK                   = 0x2\n\tPTRACE_EVENT_VFORK_DONE              = 0x5\n\tPTRACE_GETEVENTMSG                   = 0x4201\n\tPTRACE_GETREGS                       = 0xc\n\tPTRACE_GETREGSET                     = 0x4204\n\tPTRACE_GETSIGINFO                    = 0x4202\n\tPTRACE_GETSIGMASK                    = 0x420a\n\tPTRACE_GET_LAST_BREAK                = 0x5006\n\tPTRACE_INTERRUPT                     = 0x4207\n\tPTRACE_KILL                          = 0x8\n\tPTRACE_LISTEN                        = 0x4208\n\tPTRACE_OLDSETOPTIONS                 = 0x15\n\tPTRACE_O_EXITKILL                    = 0x100000\n\tPTRACE_O_MASK                        = 0x3000ff\n\tPTRACE_O_SUSPEND_SECCOMP             = 0x200000\n\tPTRACE_O_TRACECLONE                  = 0x8\n\tPTRACE_O_TRACEEXEC                   = 0x10\n\tPTRACE_O_TRACEEXIT                   = 0x40\n\tPTRACE_O_TRACEFORK                   = 0x2\n\tPTRACE_O_TRACESECCOMP                = 0x80\n\tPTRACE_O_TRACESYSGOOD                = 0x1\n\tPTRACE_O_TRACEVFORK                  = 0x4\n\tPTRACE_O_TRACEVFORKDONE              = 0x20\n\tPTRACE_PEEKDATA                      = 0x2\n\tPTRACE_PEEKDATA_AREA                 = 0x5003\n\tPTRACE_PEEKSIGINFO                   = 0x4209\n\tPTRACE_PEEKSIGINFO_SHARED            = 0x1\n\tPTRACE_PEEKTEXT                      = 0x1\n\tPTRACE_PEEKTEXT_AREA                 = 0x5002\n\tPTRACE_PEEKUSR                       = 0x3\n\tPTRACE_PEEKUSR_AREA                  = 0x5000\n\tPTRACE_PEEK_SYSTEM_CALL              = 0x5007\n\tPTRACE_POKEDATA                      = 0x5\n\tPTRACE_POKEDATA_AREA                 = 0x5005\n\tPTRACE_POKETEXT                      = 0x4\n\tPTRACE_POKETEXT_AREA                 = 0x5004\n\tPTRACE_POKEUSR                       = 0x6\n\tPTRACE_POKEUSR_AREA                  = 0x5001\n\tPTRACE_POKE_SYSTEM_CALL              = 0x5008\n\tPTRACE_PROT                          = 0x15\n\tPTRACE_SECCOMP_GET_FILTER            = 0x420c\n\tPTRACE_SECCOMP_GET_METADATA          = 0x420d\n\tPTRACE_SEIZE                         = 0x4206\n\tPTRACE_SETOPTIONS                    = 0x4200\n\tPTRACE_SETREGS                       = 0xd\n\tPTRACE_SETREGSET                     = 0x4205\n\tPTRACE_SETSIGINFO                    = 0x4203\n\tPTRACE_SETSIGMASK                    = 0x420b\n\tPTRACE_SINGLEBLOCK                   = 0xc\n\tPTRACE_SINGLESTEP                    = 0x9\n\tPTRACE_SYSCALL                       = 0x18\n\tPTRACE_TE_ABORT_RAND                 = 0x5011\n\tPTRACE_TRACEME                       = 0x0\n\tPT_ACR0                              = 0x90\n\tPT_ACR1                              = 0x94\n\tPT_ACR10                             = 0xb8\n\tPT_ACR11                             = 0xbc\n\tPT_ACR12                             = 0xc0\n\tPT_ACR13                             = 0xc4\n\tPT_ACR14                             = 0xc8\n\tPT_ACR15                             = 0xcc\n\tPT_ACR2                              = 0x98\n\tPT_ACR3                              = 0x9c\n\tPT_ACR4                              = 0xa0\n\tPT_ACR5                              = 0xa4\n\tPT_ACR6                              = 0xa8\n\tPT_ACR7                              = 0xac\n\tPT_ACR8                              = 0xb0\n\tPT_ACR9                              = 0xb4\n\tPT_CR_10                             = 0x168\n\tPT_CR_11                             = 0x170\n\tPT_CR_9                              = 0x160\n\tPT_ENDREGS                           = 0x1af\n\tPT_FPC                               = 0xd8\n\tPT_FPR0                              = 0xe0\n\tPT_FPR1                              = 0xe8\n\tPT_FPR10                             = 0x130\n\tPT_FPR11                             = 0x138\n\tPT_FPR12                             = 0x140\n\tPT_FPR13                             = 0x148\n\tPT_FPR14                             = 0x150\n\tPT_FPR15                             = 0x158\n\tPT_FPR2                              = 0xf0\n\tPT_FPR3                              = 0xf8\n\tPT_FPR4                              = 0x100\n\tPT_FPR5                              = 0x108\n\tPT_FPR6                              = 0x110\n\tPT_FPR7                              = 0x118\n\tPT_FPR8                              = 0x120\n\tPT_FPR9                              = 0x128\n\tPT_GPR0                              = 0x10\n\tPT_GPR1                              = 0x18\n\tPT_GPR10                             = 0x60\n\tPT_GPR11                             = 0x68\n\tPT_GPR12                             = 0x70\n\tPT_GPR13                             = 0x78\n\tPT_GPR14                             = 0x80\n\tPT_GPR15                             = 0x88\n\tPT_GPR2                              = 0x20\n\tPT_GPR3                              = 0x28\n\tPT_GPR4                              = 0x30\n\tPT_GPR5                              = 0x38\n\tPT_GPR6                              = 0x40\n\tPT_GPR7                              = 0x48\n\tPT_GPR8                              = 0x50\n\tPT_GPR9                              = 0x58\n\tPT_IEEE_IP                           = 0x1a8\n\tPT_LASTOFF                           = 0x1a8\n\tPT_ORIGGPR2                          = 0xd0\n\tPT_PSWADDR                           = 0x8\n\tPT_PSWMASK                           = 0x0\n\tQNX4_SUPER_MAGIC                     = 0x2f\n\tQNX6_SUPER_MAGIC                     = 0x68191122\n\tRAMFS_MAGIC                          = 0x858458f6\n\tRDTGROUP_SUPER_MAGIC                 = 0x7655821\n\tREISERFS_SUPER_MAGIC                 = 0x52654973\n\tRENAME_EXCHANGE                      = 0x2\n\tRENAME_NOREPLACE                     = 0x1\n\tRENAME_WHITEOUT                      = 0x4\n\tRLIMIT_AS                            = 0x9\n\tRLIMIT_CORE                          = 0x4\n\tRLIMIT_CPU                           = 0x0\n\tRLIMIT_DATA                          = 0x2\n\tRLIMIT_FSIZE                         = 0x1\n\tRLIMIT_LOCKS                         = 0xa\n\tRLIMIT_MEMLOCK                       = 0x8\n\tRLIMIT_MSGQUEUE                      = 0xc\n\tRLIMIT_NICE                          = 0xd\n\tRLIMIT_NOFILE                        = 0x7\n\tRLIMIT_NPROC                         = 0x6\n\tRLIMIT_RSS                           = 0x5\n\tRLIMIT_RTPRIO                        = 0xe\n\tRLIMIT_RTTIME                        = 0xf\n\tRLIMIT_SIGPENDING                    = 0xb\n\tRLIMIT_STACK                         = 0x3\n\tRLIM_INFINITY                        = 0xffffffffffffffff\n\tRNDADDENTROPY                        = 0x40085203\n\tRNDADDTOENTCNT                       = 0x40045201\n\tRNDCLEARPOOL                         = 0x5206\n\tRNDGETENTCNT                         = 0x80045200\n\tRNDGETPOOL                           = 0x80085202\n\tRNDRESEEDCRNG                        = 0x5207\n\tRNDZAPENTCNT                         = 0x5204\n\tRTAX_ADVMSS                          = 0x8\n\tRTAX_CC_ALGO                         = 0x10\n\tRTAX_CWND                            = 0x7\n\tRTAX_FASTOPEN_NO_COOKIE              = 0x11\n\tRTAX_FEATURES                        = 0xc\n\tRTAX_FEATURE_ALLFRAG                 = 0x8\n\tRTAX_FEATURE_ECN                     = 0x1\n\tRTAX_FEATURE_MASK                    = 0xf\n\tRTAX_FEATURE_SACK                    = 0x2\n\tRTAX_FEATURE_TIMESTAMP               = 0x4\n\tRTAX_HOPLIMIT                        = 0xa\n\tRTAX_INITCWND                        = 0xb\n\tRTAX_INITRWND                        = 0xe\n\tRTAX_LOCK                            = 0x1\n\tRTAX_MAX                             = 0x11\n\tRTAX_MTU                             = 0x2\n\tRTAX_QUICKACK                        = 0xf\n\tRTAX_REORDERING                      = 0x9\n\tRTAX_RTO_MIN                         = 0xd\n\tRTAX_RTT                             = 0x4\n\tRTAX_RTTVAR                          = 0x5\n\tRTAX_SSTHRESH                        = 0x6\n\tRTAX_UNSPEC                          = 0x0\n\tRTAX_WINDOW                          = 0x3\n\tRTA_ALIGNTO                          = 0x4\n\tRTA_MAX                              = 0x1d\n\tRTCF_DIRECTSRC                       = 0x4000000\n\tRTCF_DOREDIRECT                      = 0x1000000\n\tRTCF_LOG                             = 0x2000000\n\tRTCF_MASQ                            = 0x400000\n\tRTCF_NAT                             = 0x800000\n\tRTCF_VALVE                           = 0x200000\n\tRTC_AF                               = 0x20\n\tRTC_AIE_OFF                          = 0x7002\n\tRTC_AIE_ON                           = 0x7001\n\tRTC_ALM_READ                         = 0x80247008\n\tRTC_ALM_SET                          = 0x40247007\n\tRTC_EPOCH_READ                       = 0x8008700d\n\tRTC_EPOCH_SET                        = 0x4008700e\n\tRTC_IRQF                             = 0x80\n\tRTC_IRQP_READ                        = 0x8008700b\n\tRTC_IRQP_SET                         = 0x4008700c\n\tRTC_MAX_FREQ                         = 0x2000\n\tRTC_PF                               = 0x40\n\tRTC_PIE_OFF                          = 0x7006\n\tRTC_PIE_ON                           = 0x7005\n\tRTC_PLL_GET                          = 0x80207011\n\tRTC_PLL_SET                          = 0x40207012\n\tRTC_RD_TIME                          = 0x80247009\n\tRTC_SET_TIME                         = 0x4024700a\n\tRTC_UF                               = 0x10\n\tRTC_UIE_OFF                          = 0x7004\n\tRTC_UIE_ON                           = 0x7003\n\tRTC_VL_CLR                           = 0x7014\n\tRTC_VL_READ                          = 0x80047013\n\tRTC_WIE_OFF                          = 0x7010\n\tRTC_WIE_ON                           = 0x700f\n\tRTC_WKALM_RD                         = 0x80287010\n\tRTC_WKALM_SET                        = 0x4028700f\n\tRTF_ADDRCLASSMASK                    = 0xf8000000\n\tRTF_ADDRCONF                         = 0x40000\n\tRTF_ALLONLINK                        = 0x20000\n\tRTF_BROADCAST                        = 0x10000000\n\tRTF_CACHE                            = 0x1000000\n\tRTF_DEFAULT                          = 0x10000\n\tRTF_DYNAMIC                          = 0x10\n\tRTF_FLOW                             = 0x2000000\n\tRTF_GATEWAY                          = 0x2\n\tRTF_HOST                             = 0x4\n\tRTF_INTERFACE                        = 0x40000000\n\tRTF_IRTT                             = 0x100\n\tRTF_LINKRT                           = 0x100000\n\tRTF_LOCAL                            = 0x80000000\n\tRTF_MODIFIED                         = 0x20\n\tRTF_MSS                              = 0x40\n\tRTF_MTU                              = 0x40\n\tRTF_MULTICAST                        = 0x20000000\n\tRTF_NAT                              = 0x8000000\n\tRTF_NOFORWARD                        = 0x1000\n\tRTF_NONEXTHOP                        = 0x200000\n\tRTF_NOPMTUDISC                       = 0x4000\n\tRTF_POLICY                           = 0x4000000\n\tRTF_REINSTATE                        = 0x8\n\tRTF_REJECT                           = 0x200\n\tRTF_STATIC                           = 0x400\n\tRTF_THROW                            = 0x2000\n\tRTF_UP                               = 0x1\n\tRTF_WINDOW                           = 0x80\n\tRTF_XRESOLVE                         = 0x800\n\tRTM_BASE                             = 0x10\n\tRTM_DELACTION                        = 0x31\n\tRTM_DELADDR                          = 0x15\n\tRTM_DELADDRLABEL                     = 0x49\n\tRTM_DELCHAIN                         = 0x65\n\tRTM_DELLINK                          = 0x11\n\tRTM_DELMDB                           = 0x55\n\tRTM_DELNEIGH                         = 0x1d\n\tRTM_DELNETCONF                       = 0x51\n\tRTM_DELNSID                          = 0x59\n\tRTM_DELQDISC                         = 0x25\n\tRTM_DELROUTE                         = 0x19\n\tRTM_DELRULE                          = 0x21\n\tRTM_DELTCLASS                        = 0x29\n\tRTM_DELTFILTER                       = 0x2d\n\tRTM_F_CLONED                         = 0x200\n\tRTM_F_EQUALIZE                       = 0x400\n\tRTM_F_FIB_MATCH                      = 0x2000\n\tRTM_F_LOOKUP_TABLE                   = 0x1000\n\tRTM_F_NOTIFY                         = 0x100\n\tRTM_F_PREFIX                         = 0x800\n\tRTM_GETACTION                        = 0x32\n\tRTM_GETADDR                          = 0x16\n\tRTM_GETADDRLABEL                     = 0x4a\n\tRTM_GETANYCAST                       = 0x3e\n\tRTM_GETCHAIN                         = 0x66\n\tRTM_GETDCB                           = 0x4e\n\tRTM_GETLINK                          = 0x12\n\tRTM_GETMDB                           = 0x56\n\tRTM_GETMULTICAST                     = 0x3a\n\tRTM_GETNEIGH                         = 0x1e\n\tRTM_GETNEIGHTBL                      = 0x42\n\tRTM_GETNETCONF                       = 0x52\n\tRTM_GETNSID                          = 0x5a\n\tRTM_GETQDISC                         = 0x26\n\tRTM_GETROUTE                         = 0x1a\n\tRTM_GETRULE                          = 0x22\n\tRTM_GETSTATS                         = 0x5e\n\tRTM_GETTCLASS                        = 0x2a\n\tRTM_GETTFILTER                       = 0x2e\n\tRTM_MAX                              = 0x67\n\tRTM_NEWACTION                        = 0x30\n\tRTM_NEWADDR                          = 0x14\n\tRTM_NEWADDRLABEL                     = 0x48\n\tRTM_NEWCACHEREPORT                   = 0x60\n\tRTM_NEWCHAIN                         = 0x64\n\tRTM_NEWLINK                          = 0x10\n\tRTM_NEWMDB                           = 0x54\n\tRTM_NEWNDUSEROPT                     = 0x44\n\tRTM_NEWNEIGH                         = 0x1c\n\tRTM_NEWNEIGHTBL                      = 0x40\n\tRTM_NEWNETCONF                       = 0x50\n\tRTM_NEWNSID                          = 0x58\n\tRTM_NEWPREFIX                        = 0x34\n\tRTM_NEWQDISC                         = 0x24\n\tRTM_NEWROUTE                         = 0x18\n\tRTM_NEWRULE                          = 0x20\n\tRTM_NEWSTATS                         = 0x5c\n\tRTM_NEWTCLASS                        = 0x28\n\tRTM_NEWTFILTER                       = 0x2c\n\tRTM_NR_FAMILIES                      = 0x16\n\tRTM_NR_MSGTYPES                      = 0x58\n\tRTM_SETDCB                           = 0x4f\n\tRTM_SETLINK                          = 0x13\n\tRTM_SETNEIGHTBL                      = 0x43\n\tRTNH_ALIGNTO                         = 0x4\n\tRTNH_COMPARE_MASK                    = 0x19\n\tRTNH_F_DEAD                          = 0x1\n\tRTNH_F_LINKDOWN                      = 0x10\n\tRTNH_F_OFFLOAD                       = 0x8\n\tRTNH_F_ONLINK                        = 0x4\n\tRTNH_F_PERVASIVE                     = 0x2\n\tRTNH_F_UNRESOLVED                    = 0x20\n\tRTN_MAX                              = 0xb\n\tRTPROT_BABEL                         = 0x2a\n\tRTPROT_BGP                           = 0xba\n\tRTPROT_BIRD                          = 0xc\n\tRTPROT_BOOT                          = 0x3\n\tRTPROT_DHCP                          = 0x10\n\tRTPROT_DNROUTED                      = 0xd\n\tRTPROT_EIGRP                         = 0xc0\n\tRTPROT_GATED                         = 0x8\n\tRTPROT_ISIS                          = 0xbb\n\tRTPROT_KERNEL                        = 0x2\n\tRTPROT_MROUTED                       = 0x11\n\tRTPROT_MRT                           = 0xa\n\tRTPROT_NTK                           = 0xf\n\tRTPROT_OSPF                          = 0xbc\n\tRTPROT_RA                            = 0x9\n\tRTPROT_REDIRECT                      = 0x1\n\tRTPROT_RIP                           = 0xbd\n\tRTPROT_STATIC                        = 0x4\n\tRTPROT_UNSPEC                        = 0x0\n\tRTPROT_XORP                          = 0xe\n\tRTPROT_ZEBRA                         = 0xb\n\tRT_CLASS_DEFAULT                     = 0xfd\n\tRT_CLASS_LOCAL                       = 0xff\n\tRT_CLASS_MAIN                        = 0xfe\n\tRT_CLASS_MAX                         = 0xff\n\tRT_CLASS_UNSPEC                      = 0x0\n\tRUSAGE_CHILDREN                      = -0x1\n\tRUSAGE_SELF                          = 0x0\n\tRUSAGE_THREAD                        = 0x1\n\tSCM_CREDENTIALS                      = 0x2\n\tSCM_RIGHTS                           = 0x1\n\tSCM_TIMESTAMP                        = 0x1d\n\tSCM_TIMESTAMPING                     = 0x25\n\tSCM_TIMESTAMPING_OPT_STATS           = 0x36\n\tSCM_TIMESTAMPING_PKTINFO             = 0x3a\n\tSCM_TIMESTAMPNS                      = 0x23\n\tSCM_TXTIME                           = 0x3d\n\tSCM_WIFI_STATUS                      = 0x29\n\tSC_LOG_FLUSH                         = 0x100000\n\tSECCOMP_MODE_DISABLED                = 0x0\n\tSECCOMP_MODE_FILTER                  = 0x2\n\tSECCOMP_MODE_STRICT                  = 0x1\n\tSECURITYFS_MAGIC                     = 0x73636673\n\tSELINUX_MAGIC                        = 0xf97cff8c\n\tSFD_CLOEXEC                          = 0x80000\n\tSFD_NONBLOCK                         = 0x800\n\tSHUT_RD                              = 0x0\n\tSHUT_RDWR                            = 0x2\n\tSHUT_WR                              = 0x1\n\tSIOCADDDLCI                          = 0x8980\n\tSIOCADDMULTI                         = 0x8931\n\tSIOCADDRT                            = 0x890b\n\tSIOCATMARK                           = 0x8905\n\tSIOCBONDCHANGEACTIVE                 = 0x8995\n\tSIOCBONDENSLAVE                      = 0x8990\n\tSIOCBONDINFOQUERY                    = 0x8994\n\tSIOCBONDRELEASE                      = 0x8991\n\tSIOCBONDSETHWADDR                    = 0x8992\n\tSIOCBONDSLAVEINFOQUERY               = 0x8993\n\tSIOCBRADDBR                          = 0x89a0\n\tSIOCBRADDIF                          = 0x89a2\n\tSIOCBRDELBR                          = 0x89a1\n\tSIOCBRDELIF                          = 0x89a3\n\tSIOCDARP                             = 0x8953\n\tSIOCDELDLCI                          = 0x8981\n\tSIOCDELMULTI                         = 0x8932\n\tSIOCDELRT                            = 0x890c\n\tSIOCDEVPRIVATE                       = 0x89f0\n\tSIOCDIFADDR                          = 0x8936\n\tSIOCDRARP                            = 0x8960\n\tSIOCETHTOOL                          = 0x8946\n\tSIOCGARP                             = 0x8954\n\tSIOCGHWTSTAMP                        = 0x89b1\n\tSIOCGIFADDR                          = 0x8915\n\tSIOCGIFBR                            = 0x8940\n\tSIOCGIFBRDADDR                       = 0x8919\n\tSIOCGIFCONF                          = 0x8912\n\tSIOCGIFCOUNT                         = 0x8938\n\tSIOCGIFDSTADDR                       = 0x8917\n\tSIOCGIFENCAP                         = 0x8925\n\tSIOCGIFFLAGS                         = 0x8913\n\tSIOCGIFHWADDR                        = 0x8927\n\tSIOCGIFINDEX                         = 0x8933\n\tSIOCGIFMAP                           = 0x8970\n\tSIOCGIFMEM                           = 0x891f\n\tSIOCGIFMETRIC                        = 0x891d\n\tSIOCGIFMTU                           = 0x8921\n\tSIOCGIFNAME                          = 0x8910\n\tSIOCGIFNETMASK                       = 0x891b\n\tSIOCGIFPFLAGS                        = 0x8935\n\tSIOCGIFSLAVE                         = 0x8929\n\tSIOCGIFTXQLEN                        = 0x8942\n\tSIOCGIFVLAN                          = 0x8982\n\tSIOCGMIIPHY                          = 0x8947\n\tSIOCGMIIREG                          = 0x8948\n\tSIOCGPGRP                            = 0x8904\n\tSIOCGPPPCSTATS                       = 0x89f2\n\tSIOCGPPPSTATS                        = 0x89f0\n\tSIOCGPPPVER                          = 0x89f1\n\tSIOCGRARP                            = 0x8961\n\tSIOCGSKNS                            = 0x894c\n\tSIOCGSTAMP                           = 0x8906\n\tSIOCGSTAMPNS                         = 0x8907\n\tSIOCINQ                              = 0x541b\n\tSIOCOUTQ                             = 0x5411\n\tSIOCOUTQNSD                          = 0x894b\n\tSIOCPROTOPRIVATE                     = 0x89e0\n\tSIOCRTMSG                            = 0x890d\n\tSIOCSARP                             = 0x8955\n\tSIOCSHWTSTAMP                        = 0x89b0\n\tSIOCSIFADDR                          = 0x8916\n\tSIOCSIFBR                            = 0x8941\n\tSIOCSIFBRDADDR                       = 0x891a\n\tSIOCSIFDSTADDR                       = 0x8918\n\tSIOCSIFENCAP                         = 0x8926\n\tSIOCSIFFLAGS                         = 0x8914\n\tSIOCSIFHWADDR                        = 0x8924\n\tSIOCSIFHWBROADCAST                   = 0x8937\n\tSIOCSIFLINK                          = 0x8911\n\tSIOCSIFMAP                           = 0x8971\n\tSIOCSIFMEM                           = 0x8920\n\tSIOCSIFMETRIC                        = 0x891e\n\tSIOCSIFMTU                           = 0x8922\n\tSIOCSIFNAME                          = 0x8923\n\tSIOCSIFNETMASK                       = 0x891c\n\tSIOCSIFPFLAGS                        = 0x8934\n\tSIOCSIFSLAVE                         = 0x8930\n\tSIOCSIFTXQLEN                        = 0x8943\n\tSIOCSIFVLAN                          = 0x8983\n\tSIOCSMIIREG                          = 0x8949\n\tSIOCSPGRP                            = 0x8902\n\tSIOCSRARP                            = 0x8962\n\tSIOCWANDEV                           = 0x894a\n\tSMACK_MAGIC                          = 0x43415d53\n\tSMART_AUTOSAVE                       = 0xd2\n\tSMART_AUTO_OFFLINE                   = 0xdb\n\tSMART_DISABLE                        = 0xd9\n\tSMART_ENABLE                         = 0xd8\n\tSMART_HCYL_PASS                      = 0xc2\n\tSMART_IMMEDIATE_OFFLINE              = 0xd4\n\tSMART_LCYL_PASS                      = 0x4f\n\tSMART_READ_LOG_SECTOR                = 0xd5\n\tSMART_READ_THRESHOLDS                = 0xd1\n\tSMART_READ_VALUES                    = 0xd0\n\tSMART_SAVE                           = 0xd3\n\tSMART_STATUS                         = 0xda\n\tSMART_WRITE_LOG_SECTOR               = 0xd6\n\tSMART_WRITE_THRESHOLDS               = 0xd7\n\tSMB_SUPER_MAGIC                      = 0x517b\n\tSOCKFS_MAGIC                         = 0x534f434b\n\tSOCK_CLOEXEC                         = 0x80000\n\tSOCK_DCCP                            = 0x6\n\tSOCK_DGRAM                           = 0x2\n\tSOCK_IOC_TYPE                        = 0x89\n\tSOCK_NONBLOCK                        = 0x800\n\tSOCK_PACKET                          = 0xa\n\tSOCK_RAW                             = 0x3\n\tSOCK_RDM                             = 0x4\n\tSOCK_SEQPACKET                       = 0x5\n\tSOCK_STREAM                          = 0x1\n\tSOL_AAL                              = 0x109\n\tSOL_ALG                              = 0x117\n\tSOL_ATM                              = 0x108\n\tSOL_CAIF                             = 0x116\n\tSOL_CAN_BASE                         = 0x64\n\tSOL_DCCP                             = 0x10d\n\tSOL_DECNET                           = 0x105\n\tSOL_ICMPV6                           = 0x3a\n\tSOL_IP                               = 0x0\n\tSOL_IPV6                             = 0x29\n\tSOL_IRDA                             = 0x10a\n\tSOL_IUCV                             = 0x115\n\tSOL_KCM                              = 0x119\n\tSOL_LLC                              = 0x10c\n\tSOL_NETBEUI                          = 0x10b\n\tSOL_NETLINK                          = 0x10e\n\tSOL_NFC                              = 0x118\n\tSOL_PACKET                           = 0x107\n\tSOL_PNPIPE                           = 0x113\n\tSOL_PPPOL2TP                         = 0x111\n\tSOL_RAW                              = 0xff\n\tSOL_RDS                              = 0x114\n\tSOL_RXRPC                            = 0x110\n\tSOL_SOCKET                           = 0x1\n\tSOL_TCP                              = 0x6\n\tSOL_TIPC                             = 0x10f\n\tSOL_TLS                              = 0x11a\n\tSOL_X25                              = 0x106\n\tSOL_XDP                              = 0x11b\n\tSOMAXCONN                            = 0x80\n\tSO_ACCEPTCONN                        = 0x1e\n\tSO_ATTACH_BPF                        = 0x32\n\tSO_ATTACH_FILTER                     = 0x1a\n\tSO_ATTACH_REUSEPORT_CBPF             = 0x33\n\tSO_ATTACH_REUSEPORT_EBPF             = 0x34\n\tSO_BINDTODEVICE                      = 0x19\n\tSO_BINDTOIFINDEX                     = 0x3e\n\tSO_BPF_EXTENSIONS                    = 0x30\n\tSO_BROADCAST                         = 0x6\n\tSO_BSDCOMPAT                         = 0xe\n\tSO_BUSY_POLL                         = 0x2e\n\tSO_CNX_ADVICE                        = 0x35\n\tSO_COOKIE                            = 0x39\n\tSO_DEBUG                             = 0x1\n\tSO_DETACH_BPF                        = 0x1b\n\tSO_DETACH_FILTER                     = 0x1b\n\tSO_DOMAIN                            = 0x27\n\tSO_DONTROUTE                         = 0x5\n\tSO_EE_CODE_TXTIME_INVALID_PARAM      = 0x1\n\tSO_EE_CODE_TXTIME_MISSED             = 0x2\n\tSO_EE_CODE_ZEROCOPY_COPIED           = 0x1\n\tSO_EE_ORIGIN_ICMP                    = 0x2\n\tSO_EE_ORIGIN_ICMP6                   = 0x3\n\tSO_EE_ORIGIN_LOCAL                   = 0x1\n\tSO_EE_ORIGIN_NONE                    = 0x0\n\tSO_EE_ORIGIN_TIMESTAMPING            = 0x4\n\tSO_EE_ORIGIN_TXSTATUS                = 0x4\n\tSO_EE_ORIGIN_TXTIME                  = 0x6\n\tSO_EE_ORIGIN_ZEROCOPY                = 0x5\n\tSO_ERROR                             = 0x4\n\tSO_GET_FILTER                        = 0x1a\n\tSO_INCOMING_CPU                      = 0x31\n\tSO_INCOMING_NAPI_ID                  = 0x38\n\tSO_KEEPALIVE                         = 0x9\n\tSO_LINGER                            = 0xd\n\tSO_LOCK_FILTER                       = 0x2c\n\tSO_MARK                              = 0x24\n\tSO_MAX_PACING_RATE                   = 0x2f\n\tSO_MEMINFO                           = 0x37\n\tSO_NOFCS                             = 0x2b\n\tSO_NO_CHECK                          = 0xb\n\tSO_OOBINLINE                         = 0xa\n\tSO_PASSCRED                          = 0x10\n\tSO_PASSSEC                           = 0x22\n\tSO_PEEK_OFF                          = 0x2a\n\tSO_PEERCRED                          = 0x11\n\tSO_PEERGROUPS                        = 0x3b\n\tSO_PEERNAME                          = 0x1c\n\tSO_PEERSEC                           = 0x1f\n\tSO_PRIORITY                          = 0xc\n\tSO_PROTOCOL                          = 0x26\n\tSO_RCVBUF                            = 0x8\n\tSO_RCVBUFFORCE                       = 0x21\n\tSO_RCVLOWAT                          = 0x12\n\tSO_RCVTIMEO                          = 0x14\n\tSO_RCVTIMEO_NEW                      = 0x42\n\tSO_RCVTIMEO_OLD                      = 0x14\n\tSO_REUSEADDR                         = 0x2\n\tSO_REUSEPORT                         = 0xf\n\tSO_RXQ_OVFL                          = 0x28\n\tSO_SECURITY_AUTHENTICATION           = 0x16\n\tSO_SECURITY_ENCRYPTION_NETWORK       = 0x18\n\tSO_SECURITY_ENCRYPTION_TRANSPORT     = 0x17\n\tSO_SELECT_ERR_QUEUE                  = 0x2d\n\tSO_SNDBUF                            = 0x7\n\tSO_SNDBUFFORCE                       = 0x20\n\tSO_SNDLOWAT                          = 0x13\n\tSO_SNDTIMEO                          = 0x15\n\tSO_SNDTIMEO_NEW                      = 0x43\n\tSO_SNDTIMEO_OLD                      = 0x15\n\tSO_TIMESTAMP                         = 0x1d\n\tSO_TIMESTAMPING                      = 0x25\n\tSO_TIMESTAMPING_NEW                  = 0x41\n\tSO_TIMESTAMPING_OLD                  = 0x25\n\tSO_TIMESTAMPNS                       = 0x23\n\tSO_TIMESTAMPNS_NEW                   = 0x40\n\tSO_TIMESTAMPNS_OLD                   = 0x23\n\tSO_TIMESTAMP_NEW                     = 0x3f\n\tSO_TIMESTAMP_OLD                     = 0x1d\n\tSO_TXTIME                            = 0x3d\n\tSO_TYPE                              = 0x3\n\tSO_VM_SOCKETS_BUFFER_MAX_SIZE        = 0x2\n\tSO_VM_SOCKETS_BUFFER_MIN_SIZE        = 0x1\n\tSO_VM_SOCKETS_BUFFER_SIZE            = 0x0\n\tSO_VM_SOCKETS_CONNECT_TIMEOUT        = 0x6\n\tSO_VM_SOCKETS_NONBLOCK_TXRX          = 0x7\n\tSO_VM_SOCKETS_PEER_HOST_VM_ID        = 0x3\n\tSO_VM_SOCKETS_TRUSTED                = 0x5\n\tSO_WIFI_STATUS                       = 0x29\n\tSO_ZEROCOPY                          = 0x3c\n\tSPLICE_F_GIFT                        = 0x8\n\tSPLICE_F_MORE                        = 0x4\n\tSPLICE_F_MOVE                        = 0x1\n\tSPLICE_F_NONBLOCK                    = 0x2\n\tSQUASHFS_MAGIC                       = 0x73717368\n\tSTACK_END_MAGIC                      = 0x57ac6e9d\n\tSTATX_ALL                            = 0xfff\n\tSTATX_ATIME                          = 0x20\n\tSTATX_ATTR_APPEND                    = 0x20\n\tSTATX_ATTR_AUTOMOUNT                 = 0x1000\n\tSTATX_ATTR_COMPRESSED                = 0x4\n\tSTATX_ATTR_ENCRYPTED                 = 0x800\n\tSTATX_ATTR_IMMUTABLE                 = 0x10\n\tSTATX_ATTR_NODUMP                    = 0x40\n\tSTATX_BASIC_STATS                    = 0x7ff\n\tSTATX_BLOCKS                         = 0x400\n\tSTATX_BTIME                          = 0x800\n\tSTATX_CTIME                          = 0x80\n\tSTATX_GID                            = 0x10\n\tSTATX_INO                            = 0x100\n\tSTATX_MODE                           = 0x2\n\tSTATX_MTIME                          = 0x40\n\tSTATX_NLINK                          = 0x4\n\tSTATX_SIZE                           = 0x200\n\tSTATX_TYPE                           = 0x1\n\tSTATX_UID                            = 0x8\n\tSTATX__RESERVED                      = 0x80000000\n\tSYNC_FILE_RANGE_WAIT_AFTER           = 0x4\n\tSYNC_FILE_RANGE_WAIT_BEFORE          = 0x1\n\tSYNC_FILE_RANGE_WRITE                = 0x2\n\tSYSFS_MAGIC                          = 0x62656572\n\tS_BLKSIZE                            = 0x200\n\tS_IEXEC                              = 0x40\n\tS_IFBLK                              = 0x6000\n\tS_IFCHR                              = 0x2000\n\tS_IFDIR                              = 0x4000\n\tS_IFIFO                              = 0x1000\n\tS_IFLNK                              = 0xa000\n\tS_IFMT                               = 0xf000\n\tS_IFREG                              = 0x8000\n\tS_IFSOCK                             = 0xc000\n\tS_IREAD                              = 0x100\n\tS_IRGRP                              = 0x20\n\tS_IROTH                              = 0x4\n\tS_IRUSR                              = 0x100\n\tS_IRWXG                              = 0x38\n\tS_IRWXO                              = 0x7\n\tS_IRWXU                              = 0x1c0\n\tS_ISGID                              = 0x400\n\tS_ISUID                              = 0x800\n\tS_ISVTX                              = 0x200\n\tS_IWGRP                              = 0x10\n\tS_IWOTH                              = 0x2\n\tS_IWRITE                             = 0x80\n\tS_IWUSR                              = 0x80\n\tS_IXGRP                              = 0x8\n\tS_IXOTH                              = 0x1\n\tS_IXUSR                              = 0x40\n\tTAB0                                 = 0x0\n\tTAB1                                 = 0x800\n\tTAB2                                 = 0x1000\n\tTAB3                                 = 0x1800\n\tTABDLY                               = 0x1800\n\tTASKSTATS_CMD_ATTR_MAX               = 0x4\n\tTASKSTATS_CMD_MAX                    = 0x2\n\tTASKSTATS_GENL_NAME                  = \"TASKSTATS\"\n\tTASKSTATS_GENL_VERSION               = 0x1\n\tTASKSTATS_TYPE_MAX                   = 0x6\n\tTASKSTATS_VERSION                    = 0x9\n\tTCFLSH                               = 0x540b\n\tTCGETA                               = 0x5405\n\tTCGETS                               = 0x5401\n\tTCGETS2                              = 0x802c542a\n\tTCGETX                               = 0x5432\n\tTCIFLUSH                             = 0x0\n\tTCIOFF                               = 0x2\n\tTCIOFLUSH                            = 0x2\n\tTCION                                = 0x3\n\tTCOFLUSH                             = 0x1\n\tTCOOFF                               = 0x0\n\tTCOON                                = 0x1\n\tTCP_BPF_IW                           = 0x3e9\n\tTCP_BPF_SNDCWND_CLAMP                = 0x3ea\n\tTCP_CC_INFO                          = 0x1a\n\tTCP_CM_INQ                           = 0x24\n\tTCP_CONGESTION                       = 0xd\n\tTCP_COOKIE_IN_ALWAYS                 = 0x1\n\tTCP_COOKIE_MAX                       = 0x10\n\tTCP_COOKIE_MIN                       = 0x8\n\tTCP_COOKIE_OUT_NEVER                 = 0x2\n\tTCP_COOKIE_PAIR_SIZE                 = 0x20\n\tTCP_COOKIE_TRANSACTIONS              = 0xf\n\tTCP_CORK                             = 0x3\n\tTCP_DEFER_ACCEPT                     = 0x9\n\tTCP_FASTOPEN                         = 0x17\n\tTCP_FASTOPEN_CONNECT                 = 0x1e\n\tTCP_FASTOPEN_KEY                     = 0x21\n\tTCP_FASTOPEN_NO_COOKIE               = 0x22\n\tTCP_INFO                             = 0xb\n\tTCP_INQ                              = 0x24\n\tTCP_KEEPCNT                          = 0x6\n\tTCP_KEEPIDLE                         = 0x4\n\tTCP_KEEPINTVL                        = 0x5\n\tTCP_LINGER2                          = 0x8\n\tTCP_MAXSEG                           = 0x2\n\tTCP_MAXWIN                           = 0xffff\n\tTCP_MAX_WINSHIFT                     = 0xe\n\tTCP_MD5SIG                           = 0xe\n\tTCP_MD5SIG_EXT                       = 0x20\n\tTCP_MD5SIG_FLAG_PREFIX               = 0x1\n\tTCP_MD5SIG_MAXKEYLEN                 = 0x50\n\tTCP_MSS                              = 0x200\n\tTCP_MSS_DEFAULT                      = 0x218\n\tTCP_MSS_DESIRED                      = 0x4c4\n\tTCP_NODELAY                          = 0x1\n\tTCP_NOTSENT_LOWAT                    = 0x19\n\tTCP_QUEUE_SEQ                        = 0x15\n\tTCP_QUICKACK                         = 0xc\n\tTCP_REPAIR                           = 0x13\n\tTCP_REPAIR_OFF                       = 0x0\n\tTCP_REPAIR_OFF_NO_WP                 = -0x1\n\tTCP_REPAIR_ON                        = 0x1\n\tTCP_REPAIR_OPTIONS                   = 0x16\n\tTCP_REPAIR_QUEUE                     = 0x14\n\tTCP_REPAIR_WINDOW                    = 0x1d\n\tTCP_SAVED_SYN                        = 0x1c\n\tTCP_SAVE_SYN                         = 0x1b\n\tTCP_SYNCNT                           = 0x7\n\tTCP_S_DATA_IN                        = 0x4\n\tTCP_S_DATA_OUT                       = 0x8\n\tTCP_THIN_DUPACK                      = 0x11\n\tTCP_THIN_LINEAR_TIMEOUTS             = 0x10\n\tTCP_TIMESTAMP                        = 0x18\n\tTCP_ULP                              = 0x1f\n\tTCP_USER_TIMEOUT                     = 0x12\n\tTCP_WINDOW_CLAMP                     = 0xa\n\tTCP_ZEROCOPY_RECEIVE                 = 0x23\n\tTCSAFLUSH                            = 0x2\n\tTCSBRK                               = 0x5409\n\tTCSBRKP                              = 0x5425\n\tTCSETA                               = 0x5406\n\tTCSETAF                              = 0x5408\n\tTCSETAW                              = 0x5407\n\tTCSETS                               = 0x5402\n\tTCSETS2                              = 0x402c542b\n\tTCSETSF                              = 0x5404\n\tTCSETSF2                             = 0x402c542d\n\tTCSETSW                              = 0x5403\n\tTCSETSW2                             = 0x402c542c\n\tTCSETX                               = 0x5433\n\tTCSETXF                              = 0x5434\n\tTCSETXW                              = 0x5435\n\tTCXONC                               = 0x540a\n\tTIMER_ABSTIME                        = 0x1\n\tTIOCCBRK                             = 0x5428\n\tTIOCCONS                             = 0x541d\n\tTIOCEXCL                             = 0x540c\n\tTIOCGDEV                             = 0x80045432\n\tTIOCGETD                             = 0x5424\n\tTIOCGEXCL                            = 0x80045440\n\tTIOCGICOUNT                          = 0x545d\n\tTIOCGISO7816                         = 0x80285442\n\tTIOCGLCKTRMIOS                       = 0x5456\n\tTIOCGPGRP                            = 0x540f\n\tTIOCGPKT                             = 0x80045438\n\tTIOCGPTLCK                           = 0x80045439\n\tTIOCGPTN                             = 0x80045430\n\tTIOCGPTPEER                          = 0x5441\n\tTIOCGRS485                           = 0x542e\n\tTIOCGSERIAL                          = 0x541e\n\tTIOCGSID                             = 0x5429\n\tTIOCGSOFTCAR                         = 0x5419\n\tTIOCGWINSZ                           = 0x5413\n\tTIOCINQ                              = 0x541b\n\tTIOCLINUX                            = 0x541c\n\tTIOCMBIC                             = 0x5417\n\tTIOCMBIS                             = 0x5416\n\tTIOCMGET                             = 0x5415\n\tTIOCMIWAIT                           = 0x545c\n\tTIOCMSET                             = 0x5418\n\tTIOCM_CAR                            = 0x40\n\tTIOCM_CD                             = 0x40\n\tTIOCM_CTS                            = 0x20\n\tTIOCM_DSR                            = 0x100\n\tTIOCM_DTR                            = 0x2\n\tTIOCM_LE                             = 0x1\n\tTIOCM_RI                             = 0x80\n\tTIOCM_RNG                            = 0x80\n\tTIOCM_RTS                            = 0x4\n\tTIOCM_SR                             = 0x10\n\tTIOCM_ST                             = 0x8\n\tTIOCNOTTY                            = 0x5422\n\tTIOCNXCL                             = 0x540d\n\tTIOCOUTQ                             = 0x5411\n\tTIOCPKT                              = 0x5420\n\tTIOCPKT_DATA                         = 0x0\n\tTIOCPKT_DOSTOP                       = 0x20\n\tTIOCPKT_FLUSHREAD                    = 0x1\n\tTIOCPKT_FLUSHWRITE                   = 0x2\n\tTIOCPKT_IOCTL                        = 0x40\n\tTIOCPKT_NOSTOP                       = 0x10\n\tTIOCPKT_START                        = 0x8\n\tTIOCPKT_STOP                         = 0x4\n\tTIOCSBRK                             = 0x5427\n\tTIOCSCTTY                            = 0x540e\n\tTIOCSERCONFIG                        = 0x5453\n\tTIOCSERGETLSR                        = 0x5459\n\tTIOCSERGETMULTI                      = 0x545a\n\tTIOCSERGSTRUCT                       = 0x5458\n\tTIOCSERGWILD                         = 0x5454\n\tTIOCSERSETMULTI                      = 0x545b\n\tTIOCSERSWILD                         = 0x5455\n\tTIOCSER_TEMT                         = 0x1\n\tTIOCSETD                             = 0x5423\n\tTIOCSIG                              = 0x40045436\n\tTIOCSISO7816                         = 0xc0285443\n\tTIOCSLCKTRMIOS                       = 0x5457\n\tTIOCSPGRP                            = 0x5410\n\tTIOCSPTLCK                           = 0x40045431\n\tTIOCSRS485                           = 0x542f\n\tTIOCSSERIAL                          = 0x541f\n\tTIOCSSOFTCAR                         = 0x541a\n\tTIOCSTI                              = 0x5412\n\tTIOCSWINSZ                           = 0x5414\n\tTIOCVHANGUP                          = 0x5437\n\tTMPFS_MAGIC                          = 0x1021994\n\tTOSTOP                               = 0x100\n\tTPACKET_ALIGNMENT                    = 0x10\n\tTPACKET_HDRLEN                       = 0x34\n\tTP_STATUS_AVAILABLE                  = 0x0\n\tTP_STATUS_BLK_TMO                    = 0x20\n\tTP_STATUS_COPY                       = 0x2\n\tTP_STATUS_CSUMNOTREADY               = 0x8\n\tTP_STATUS_CSUM_VALID                 = 0x80\n\tTP_STATUS_KERNEL                     = 0x0\n\tTP_STATUS_LOSING                     = 0x4\n\tTP_STATUS_SENDING                    = 0x2\n\tTP_STATUS_SEND_REQUEST               = 0x1\n\tTP_STATUS_TS_RAW_HARDWARE            = -0x80000000\n\tTP_STATUS_TS_SOFTWARE                = 0x20000000\n\tTP_STATUS_TS_SYS_HARDWARE            = 0x40000000\n\tTP_STATUS_USER                       = 0x1\n\tTP_STATUS_VLAN_TPID_VALID            = 0x40\n\tTP_STATUS_VLAN_VALID                 = 0x10\n\tTP_STATUS_WRONG_FORMAT               = 0x4\n\tTRACEFS_MAGIC                        = 0x74726163\n\tTS_COMM_LEN                          = 0x20\n\tTUNATTACHFILTER                      = 0x401054d5\n\tTUNDETACHFILTER                      = 0x401054d6\n\tTUNGETFEATURES                       = 0x800454cf\n\tTUNGETFILTER                         = 0x801054db\n\tTUNGETIFF                            = 0x800454d2\n\tTUNGETSNDBUF                         = 0x800454d3\n\tTUNGETVNETBE                         = 0x800454df\n\tTUNGETVNETHDRSZ                      = 0x800454d7\n\tTUNGETVNETLE                         = 0x800454dd\n\tTUNSETCARRIER                        = 0x400454e2\n\tTUNSETDEBUG                          = 0x400454c9\n\tTUNSETFILTEREBPF                     = 0x800454e1\n\tTUNSETGROUP                          = 0x400454ce\n\tTUNSETIFF                            = 0x400454ca\n\tTUNSETIFINDEX                        = 0x400454da\n\tTUNSETLINK                           = 0x400454cd\n\tTUNSETNOCSUM                         = 0x400454c8\n\tTUNSETOFFLOAD                        = 0x400454d0\n\tTUNSETOWNER                          = 0x400454cc\n\tTUNSETPERSIST                        = 0x400454cb\n\tTUNSETQUEUE                          = 0x400454d9\n\tTUNSETSNDBUF                         = 0x400454d4\n\tTUNSETSTEERINGEBPF                   = 0x800454e0\n\tTUNSETTXFILTER                       = 0x400454d1\n\tTUNSETVNETBE                         = 0x400454de\n\tTUNSETVNETHDRSZ                      = 0x400454d8\n\tTUNSETVNETLE                         = 0x400454dc\n\tUBI_IOCATT                           = 0x40186f40\n\tUBI_IOCDET                           = 0x40046f41\n\tUBI_IOCEBCH                          = 0x40044f02\n\tUBI_IOCEBER                          = 0x40044f01\n\tUBI_IOCEBISMAP                       = 0x80044f05\n\tUBI_IOCEBMAP                         = 0x40084f03\n\tUBI_IOCEBUNMAP                       = 0x40044f04\n\tUBI_IOCMKVOL                         = 0x40986f00\n\tUBI_IOCRMVOL                         = 0x40046f01\n\tUBI_IOCRNVOL                         = 0x51106f03\n\tUBI_IOCRPEB                          = 0x40046f04\n\tUBI_IOCRSVOL                         = 0x400c6f02\n\tUBI_IOCSETVOLPROP                    = 0x40104f06\n\tUBI_IOCSPEB                          = 0x40046f05\n\tUBI_IOCVOLCRBLK                      = 0x40804f07\n\tUBI_IOCVOLRMBLK                      = 0x4f08\n\tUBI_IOCVOLUP                         = 0x40084f00\n\tUDF_SUPER_MAGIC                      = 0x15013346\n\tUMOUNT_NOFOLLOW                      = 0x8\n\tUSBDEVICE_SUPER_MAGIC                = 0x9fa2\n\tUTIME_NOW                            = 0x3fffffff\n\tUTIME_OMIT                           = 0x3ffffffe\n\tV9FS_MAGIC                           = 0x1021997\n\tVDISCARD                             = 0xd\n\tVEOF                                 = 0x4\n\tVEOL                                 = 0xb\n\tVEOL2                                = 0x10\n\tVERASE                               = 0x2\n\tVINTR                                = 0x0\n\tVKILL                                = 0x3\n\tVLNEXT                               = 0xf\n\tVMADDR_CID_ANY                       = 0xffffffff\n\tVMADDR_CID_HOST                      = 0x2\n\tVMADDR_CID_HYPERVISOR                = 0x0\n\tVMADDR_CID_RESERVED                  = 0x1\n\tVMADDR_PORT_ANY                      = 0xffffffff\n\tVMIN                                 = 0x6\n\tVM_SOCKETS_INVALID_VERSION           = 0xffffffff\n\tVQUIT                                = 0x1\n\tVREPRINT                             = 0xc\n\tVSTART                               = 0x8\n\tVSTOP                                = 0x9\n\tVSUSP                                = 0xa\n\tVSWTC                                = 0x7\n\tVT0                                  = 0x0\n\tVT1                                  = 0x4000\n\tVTDLY                                = 0x4000\n\tVTIME                                = 0x5\n\tVWERASE                              = 0xe\n\tWALL                                 = 0x40000000\n\tWCLONE                               = 0x80000000\n\tWCONTINUED                           = 0x8\n\tWDIOC_GETBOOTSTATUS                  = 0x80045702\n\tWDIOC_GETPRETIMEOUT                  = 0x80045709\n\tWDIOC_GETSTATUS                      = 0x80045701\n\tWDIOC_GETSUPPORT                     = 0x80285700\n\tWDIOC_GETTEMP                        = 0x80045703\n\tWDIOC_GETTIMELEFT                    = 0x8004570a\n\tWDIOC_GETTIMEOUT                     = 0x80045707\n\tWDIOC_KEEPALIVE                      = 0x80045705\n\tWDIOC_SETOPTIONS                     = 0x80045704\n\tWDIOC_SETPRETIMEOUT                  = 0xc0045708\n\tWDIOC_SETTIMEOUT                     = 0xc0045706\n\tWEXITED                              = 0x4\n\tWIN_ACKMEDIACHANGE                   = 0xdb\n\tWIN_CHECKPOWERMODE1                  = 0xe5\n\tWIN_CHECKPOWERMODE2                  = 0x98\n\tWIN_DEVICE_RESET                     = 0x8\n\tWIN_DIAGNOSE                         = 0x90\n\tWIN_DOORLOCK                         = 0xde\n\tWIN_DOORUNLOCK                       = 0xdf\n\tWIN_DOWNLOAD_MICROCODE               = 0x92\n\tWIN_FLUSH_CACHE                      = 0xe7\n\tWIN_FLUSH_CACHE_EXT                  = 0xea\n\tWIN_FORMAT                           = 0x50\n\tWIN_GETMEDIASTATUS                   = 0xda\n\tWIN_IDENTIFY                         = 0xec\n\tWIN_IDENTIFY_DMA                     = 0xee\n\tWIN_IDLEIMMEDIATE                    = 0xe1\n\tWIN_INIT                             = 0x60\n\tWIN_MEDIAEJECT                       = 0xed\n\tWIN_MULTREAD                         = 0xc4\n\tWIN_MULTREAD_EXT                     = 0x29\n\tWIN_MULTWRITE                        = 0xc5\n\tWIN_MULTWRITE_EXT                    = 0x39\n\tWIN_NOP                              = 0x0\n\tWIN_PACKETCMD                        = 0xa0\n\tWIN_PIDENTIFY                        = 0xa1\n\tWIN_POSTBOOT                         = 0xdc\n\tWIN_PREBOOT                          = 0xdd\n\tWIN_QUEUED_SERVICE                   = 0xa2\n\tWIN_READ                             = 0x20\n\tWIN_READDMA                          = 0xc8\n\tWIN_READDMA_EXT                      = 0x25\n\tWIN_READDMA_ONCE                     = 0xc9\n\tWIN_READDMA_QUEUED                   = 0xc7\n\tWIN_READDMA_QUEUED_EXT               = 0x26\n\tWIN_READ_BUFFER                      = 0xe4\n\tWIN_READ_EXT                         = 0x24\n\tWIN_READ_LONG                        = 0x22\n\tWIN_READ_LONG_ONCE                   = 0x23\n\tWIN_READ_NATIVE_MAX                  = 0xf8\n\tWIN_READ_NATIVE_MAX_EXT              = 0x27\n\tWIN_READ_ONCE                        = 0x21\n\tWIN_RECAL                            = 0x10\n\tWIN_RESTORE                          = 0x10\n\tWIN_SECURITY_DISABLE                 = 0xf6\n\tWIN_SECURITY_ERASE_PREPARE           = 0xf3\n\tWIN_SECURITY_ERASE_UNIT              = 0xf4\n\tWIN_SECURITY_FREEZE_LOCK             = 0xf5\n\tWIN_SECURITY_SET_PASS                = 0xf1\n\tWIN_SECURITY_UNLOCK                  = 0xf2\n\tWIN_SEEK                             = 0x70\n\tWIN_SETFEATURES                      = 0xef\n\tWIN_SETIDLE1                         = 0xe3\n\tWIN_SETIDLE2                         = 0x97\n\tWIN_SETMULT                          = 0xc6\n\tWIN_SET_MAX                          = 0xf9\n\tWIN_SET_MAX_EXT                      = 0x37\n\tWIN_SLEEPNOW1                        = 0xe6\n\tWIN_SLEEPNOW2                        = 0x99\n\tWIN_SMART                            = 0xb0\n\tWIN_SPECIFY                          = 0x91\n\tWIN_SRST                             = 0x8\n\tWIN_STANDBY                          = 0xe2\n\tWIN_STANDBY2                         = 0x96\n\tWIN_STANDBYNOW1                      = 0xe0\n\tWIN_STANDBYNOW2                      = 0x94\n\tWIN_VERIFY                           = 0x40\n\tWIN_VERIFY_EXT                       = 0x42\n\tWIN_VERIFY_ONCE                      = 0x41\n\tWIN_WRITE                            = 0x30\n\tWIN_WRITEDMA                         = 0xca\n\tWIN_WRITEDMA_EXT                     = 0x35\n\tWIN_WRITEDMA_ONCE                    = 0xcb\n\tWIN_WRITEDMA_QUEUED                  = 0xcc\n\tWIN_WRITEDMA_QUEUED_EXT              = 0x36\n\tWIN_WRITE_BUFFER                     = 0xe8\n\tWIN_WRITE_EXT                        = 0x34\n\tWIN_WRITE_LONG                       = 0x32\n\tWIN_WRITE_LONG_ONCE                  = 0x33\n\tWIN_WRITE_ONCE                       = 0x31\n\tWIN_WRITE_SAME                       = 0xe9\n\tWIN_WRITE_VERIFY                     = 0x3c\n\tWNOHANG                              = 0x1\n\tWNOTHREAD                            = 0x20000000\n\tWNOWAIT                              = 0x1000000\n\tWORDSIZE                             = 0x40\n\tWSTOPPED                             = 0x2\n\tWUNTRACED                            = 0x2\n\tXATTR_CREATE                         = 0x1\n\tXATTR_REPLACE                        = 0x2\n\tXCASE                                = 0x4\n\tXDP_COPY                             = 0x2\n\tXDP_FLAGS_DRV_MODE                   = 0x4\n\tXDP_FLAGS_HW_MODE                    = 0x8\n\tXDP_FLAGS_MASK                       = 0xf\n\tXDP_FLAGS_MODES                      = 0xe\n\tXDP_FLAGS_SKB_MODE                   = 0x2\n\tXDP_FLAGS_UPDATE_IF_NOEXIST          = 0x1\n\tXDP_MMAP_OFFSETS                     = 0x1\n\tXDP_PACKET_HEADROOM                  = 0x100\n\tXDP_PGOFF_RX_RING                    = 0x0\n\tXDP_PGOFF_TX_RING                    = 0x80000000\n\tXDP_RX_RING                          = 0x2\n\tXDP_SHARED_UMEM                      = 0x1\n\tXDP_STATISTICS                       = 0x7\n\tXDP_TX_RING                          = 0x3\n\tXDP_UMEM_COMPLETION_RING             = 0x6\n\tXDP_UMEM_FILL_RING                   = 0x5\n\tXDP_UMEM_PGOFF_COMPLETION_RING       = 0x180000000\n\tXDP_UMEM_PGOFF_FILL_RING             = 0x100000000\n\tXDP_UMEM_REG                         = 0x4\n\tXDP_ZEROCOPY                         = 0x4\n\tXENFS_SUPER_MAGIC                    = 0xabba1974\n\tXFS_SUPER_MAGIC                      = 0x58465342\n\tXTABS                                = 0x1800\n\tZSMALLOC_MAGIC                       = 0x58295829\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x62)\n\tEADDRNOTAVAIL   = syscall.Errno(0x63)\n\tEADV            = syscall.Errno(0x44)\n\tEAFNOSUPPORT    = syscall.Errno(0x61)\n\tEAGAIN          = syscall.Errno(0xb)\n\tEALREADY        = syscall.Errno(0x72)\n\tEBADE           = syscall.Errno(0x34)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADFD          = syscall.Errno(0x4d)\n\tEBADMSG         = syscall.Errno(0x4a)\n\tEBADR           = syscall.Errno(0x35)\n\tEBADRQC         = syscall.Errno(0x38)\n\tEBADSLT         = syscall.Errno(0x39)\n\tEBFONT          = syscall.Errno(0x3b)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x7d)\n\tECHILD          = syscall.Errno(0xa)\n\tECHRNG          = syscall.Errno(0x2c)\n\tECOMM           = syscall.Errno(0x46)\n\tECONNABORTED    = syscall.Errno(0x67)\n\tECONNREFUSED    = syscall.Errno(0x6f)\n\tECONNRESET      = syscall.Errno(0x68)\n\tEDEADLK         = syscall.Errno(0x23)\n\tEDEADLOCK       = syscall.Errno(0x23)\n\tEDESTADDRREQ    = syscall.Errno(0x59)\n\tEDOM            = syscall.Errno(0x21)\n\tEDOTDOT         = syscall.Errno(0x49)\n\tEDQUOT          = syscall.Errno(0x7a)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEHOSTDOWN       = syscall.Errno(0x70)\n\tEHOSTUNREACH    = syscall.Errno(0x71)\n\tEHWPOISON       = syscall.Errno(0x85)\n\tEIDRM           = syscall.Errno(0x2b)\n\tEILSEQ          = syscall.Errno(0x54)\n\tEINPROGRESS     = syscall.Errno(0x73)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEISCONN         = syscall.Errno(0x6a)\n\tEISDIR          = syscall.Errno(0x15)\n\tEISNAM          = syscall.Errno(0x78)\n\tEKEYEXPIRED     = syscall.Errno(0x7f)\n\tEKEYREJECTED    = syscall.Errno(0x81)\n\tEKEYREVOKED     = syscall.Errno(0x80)\n\tEL2HLT          = syscall.Errno(0x33)\n\tEL2NSYNC        = syscall.Errno(0x2d)\n\tEL3HLT          = syscall.Errno(0x2e)\n\tEL3RST          = syscall.Errno(0x2f)\n\tELIBACC         = syscall.Errno(0x4f)\n\tELIBBAD         = syscall.Errno(0x50)\n\tELIBEXEC        = syscall.Errno(0x53)\n\tELIBMAX         = syscall.Errno(0x52)\n\tELIBSCN         = syscall.Errno(0x51)\n\tELNRNG          = syscall.Errno(0x30)\n\tELOOP           = syscall.Errno(0x28)\n\tEMEDIUMTYPE     = syscall.Errno(0x7c)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x5a)\n\tEMULTIHOP       = syscall.Errno(0x48)\n\tENAMETOOLONG    = syscall.Errno(0x24)\n\tENAVAIL         = syscall.Errno(0x77)\n\tENETDOWN        = syscall.Errno(0x64)\n\tENETRESET       = syscall.Errno(0x66)\n\tENETUNREACH     = syscall.Errno(0x65)\n\tENFILE          = syscall.Errno(0x17)\n\tENOANO          = syscall.Errno(0x37)\n\tENOBUFS         = syscall.Errno(0x69)\n\tENOCSI          = syscall.Errno(0x32)\n\tENODATA         = syscall.Errno(0x3d)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOKEY          = syscall.Errno(0x7e)\n\tENOLCK          = syscall.Errno(0x25)\n\tENOLINK         = syscall.Errno(0x43)\n\tENOMEDIUM       = syscall.Errno(0x7b)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x2a)\n\tENONET          = syscall.Errno(0x40)\n\tENOPKG          = syscall.Errno(0x41)\n\tENOPROTOOPT     = syscall.Errno(0x5c)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSR           = syscall.Errno(0x3f)\n\tENOSTR          = syscall.Errno(0x3c)\n\tENOSYS          = syscall.Errno(0x26)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x6b)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x27)\n\tENOTNAM         = syscall.Errno(0x76)\n\tENOTRECOVERABLE = syscall.Errno(0x83)\n\tENOTSOCK        = syscall.Errno(0x58)\n\tENOTSUP         = syscall.Errno(0x5f)\n\tENOTTY          = syscall.Errno(0x19)\n\tENOTUNIQ        = syscall.Errno(0x4c)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x5f)\n\tEOVERFLOW       = syscall.Errno(0x4b)\n\tEOWNERDEAD      = syscall.Errno(0x82)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x60)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROTO          = syscall.Errno(0x47)\n\tEPROTONOSUPPORT = syscall.Errno(0x5d)\n\tEPROTOTYPE      = syscall.Errno(0x5b)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMCHG         = syscall.Errno(0x4e)\n\tEREMOTE         = syscall.Errno(0x42)\n\tEREMOTEIO       = syscall.Errno(0x79)\n\tERESTART        = syscall.Errno(0x55)\n\tERFKILL         = syscall.Errno(0x84)\n\tEROFS           = syscall.Errno(0x1e)\n\tESHUTDOWN       = syscall.Errno(0x6c)\n\tESOCKTNOSUPPORT = syscall.Errno(0x5e)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESRMNT          = syscall.Errno(0x45)\n\tESTALE          = syscall.Errno(0x74)\n\tESTRPIPE        = syscall.Errno(0x56)\n\tETIME           = syscall.Errno(0x3e)\n\tETIMEDOUT       = syscall.Errno(0x6e)\n\tETOOMANYREFS    = syscall.Errno(0x6d)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUCLEAN         = syscall.Errno(0x75)\n\tEUNATCH         = syscall.Errno(0x31)\n\tEUSERS          = syscall.Errno(0x57)\n\tEWOULDBLOCK     = syscall.Errno(0xb)\n\tEXDEV           = syscall.Errno(0x12)\n\tEXFULL          = syscall.Errno(0x36)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0x7)\n\tSIGCHLD   = syscall.Signal(0x11)\n\tSIGCLD    = syscall.Signal(0x11)\n\tSIGCONT   = syscall.Signal(0x12)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x1d)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPOLL   = syscall.Signal(0x1d)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGPWR    = syscall.Signal(0x1e)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTKFLT = syscall.Signal(0x10)\n\tSIGSTOP   = syscall.Signal(0x13)\n\tSIGSYS    = syscall.Signal(0x1f)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x14)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x17)\n\tSIGUSR1   = syscall.Signal(0xa)\n\tSIGUSR2   = syscall.Signal(0xc)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"no such device or address\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device or resource busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"invalid cross-device link\"},\n\t{19, \"ENODEV\", \"no such device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"numerical result out of range\"},\n\t{35, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{36, \"ENAMETOOLONG\", \"file name too long\"},\n\t{37, \"ENOLCK\", \"no locks available\"},\n\t{38, \"ENOSYS\", \"function not implemented\"},\n\t{39, \"ENOTEMPTY\", \"directory not empty\"},\n\t{40, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{42, \"ENOMSG\", \"no message of desired type\"},\n\t{43, \"EIDRM\", \"identifier removed\"},\n\t{44, \"ECHRNG\", \"channel number out of range\"},\n\t{45, \"EL2NSYNC\", \"level 2 not synchronized\"},\n\t{46, \"EL3HLT\", \"level 3 halted\"},\n\t{47, \"EL3RST\", \"level 3 reset\"},\n\t{48, \"ELNRNG\", \"link number out of range\"},\n\t{49, \"EUNATCH\", \"protocol driver not attached\"},\n\t{50, \"ENOCSI\", \"no CSI structure available\"},\n\t{51, \"EL2HLT\", \"level 2 halted\"},\n\t{52, \"EBADE\", \"invalid exchange\"},\n\t{53, \"EBADR\", \"invalid request descriptor\"},\n\t{54, \"EXFULL\", \"exchange full\"},\n\t{55, \"ENOANO\", \"no anode\"},\n\t{56, \"EBADRQC\", \"invalid request code\"},\n\t{57, \"EBADSLT\", \"invalid slot\"},\n\t{59, \"EBFONT\", \"bad font file format\"},\n\t{60, \"ENOSTR\", \"device not a stream\"},\n\t{61, \"ENODATA\", \"no data available\"},\n\t{62, \"ETIME\", \"timer expired\"},\n\t{63, \"ENOSR\", \"out of streams resources\"},\n\t{64, \"ENONET\", \"machine is not on the network\"},\n\t{65, \"ENOPKG\", \"package not installed\"},\n\t{66, \"EREMOTE\", \"object is remote\"},\n\t{67, \"ENOLINK\", \"link has been severed\"},\n\t{68, \"EADV\", \"advertise error\"},\n\t{69, \"ESRMNT\", \"srmount error\"},\n\t{70, \"ECOMM\", \"communication error on send\"},\n\t{71, \"EPROTO\", \"protocol error\"},\n\t{72, \"EMULTIHOP\", \"multihop attempted\"},\n\t{73, \"EDOTDOT\", \"RFS specific error\"},\n\t{74, \"EBADMSG\", \"bad message\"},\n\t{75, \"EOVERFLOW\", \"value too large for defined data type\"},\n\t{76, \"ENOTUNIQ\", \"name not unique on network\"},\n\t{77, \"EBADFD\", \"file descriptor in bad state\"},\n\t{78, \"EREMCHG\", \"remote address changed\"},\n\t{79, \"ELIBACC\", \"can not access a needed shared library\"},\n\t{80, \"ELIBBAD\", \"accessing a corrupted shared library\"},\n\t{81, \"ELIBSCN\", \".lib section in a.out corrupted\"},\n\t{82, \"ELIBMAX\", \"attempting to link in too many shared libraries\"},\n\t{83, \"ELIBEXEC\", \"cannot exec a shared library directly\"},\n\t{84, \"EILSEQ\", \"invalid or incomplete multibyte or wide character\"},\n\t{85, \"ERESTART\", \"interrupted system call should be restarted\"},\n\t{86, \"ESTRPIPE\", \"streams pipe error\"},\n\t{87, \"EUSERS\", \"too many users\"},\n\t{88, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{89, \"EDESTADDRREQ\", \"destination address required\"},\n\t{90, \"EMSGSIZE\", \"message too long\"},\n\t{91, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{92, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{93, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{94, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{95, \"ENOTSUP\", \"operation not supported\"},\n\t{96, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{97, \"EAFNOSUPPORT\", \"address family not supported by protocol\"},\n\t{98, \"EADDRINUSE\", \"address already in use\"},\n\t{99, \"EADDRNOTAVAIL\", \"cannot assign requested address\"},\n\t{100, \"ENETDOWN\", \"network is down\"},\n\t{101, \"ENETUNREACH\", \"network is unreachable\"},\n\t{102, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{103, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{104, \"ECONNRESET\", \"connection reset by peer\"},\n\t{105, \"ENOBUFS\", \"no buffer space available\"},\n\t{106, \"EISCONN\", \"transport endpoint is already connected\"},\n\t{107, \"ENOTCONN\", \"transport endpoint is not connected\"},\n\t{108, \"ESHUTDOWN\", \"cannot send after transport endpoint shutdown\"},\n\t{109, \"ETOOMANYREFS\", \"too many references: cannot splice\"},\n\t{110, \"ETIMEDOUT\", \"connection timed out\"},\n\t{111, \"ECONNREFUSED\", \"connection refused\"},\n\t{112, \"EHOSTDOWN\", \"host is down\"},\n\t{113, \"EHOSTUNREACH\", \"no route to host\"},\n\t{114, \"EALREADY\", \"operation already in progress\"},\n\t{115, \"EINPROGRESS\", \"operation now in progress\"},\n\t{116, \"ESTALE\", \"stale file handle\"},\n\t{117, \"EUCLEAN\", \"structure needs cleaning\"},\n\t{118, \"ENOTNAM\", \"not a XENIX named type file\"},\n\t{119, \"ENAVAIL\", \"no XENIX semaphores available\"},\n\t{120, \"EISNAM\", \"is a named type file\"},\n\t{121, \"EREMOTEIO\", \"remote I/O error\"},\n\t{122, \"EDQUOT\", \"disk quota exceeded\"},\n\t{123, \"ENOMEDIUM\", \"no medium found\"},\n\t{124, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{125, \"ECANCELED\", \"operation canceled\"},\n\t{126, \"ENOKEY\", \"required key not available\"},\n\t{127, \"EKEYEXPIRED\", \"key has expired\"},\n\t{128, \"EKEYREVOKED\", \"key has been revoked\"},\n\t{129, \"EKEYREJECTED\", \"key was rejected by service\"},\n\t{130, \"EOWNERDEAD\", \"owner died\"},\n\t{131, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{132, \"ERFKILL\", \"operation not possible due to RF-kill\"},\n\t{133, \"EHWPOISON\", \"memory page has hardware error\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/breakpoint trap\"},\n\t{6, \"SIGABRT\", \"aborted\"},\n\t{7, \"SIGBUS\", \"bus error\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGUSR1\", \"user defined signal 1\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGUSR2\", \"user defined signal 2\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGSTKFLT\", \"stack fault\"},\n\t{17, \"SIGCHLD\", \"child exited\"},\n\t{18, \"SIGCONT\", \"continued\"},\n\t{19, \"SIGSTOP\", \"stopped (signal)\"},\n\t{20, \"SIGTSTP\", \"stopped\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGURG\", \"urgent I/O condition\"},\n\t{24, \"SIGXCPU\", \"CPU time limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"file size limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window changed\"},\n\t{29, \"SIGIO\", \"I/O possible\"},\n\t{30, \"SIGPWR\", \"power failure\"},\n\t{31, \"SIGSYS\", \"bad system call\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go",
    "content": "// mkerrors.sh -Wall -Werror -static -I/tmp/include\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build sparc64,linux\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAAFS_MAGIC                           = 0x5a3c69f0\n\tADFS_SUPER_MAGIC                     = 0xadf5\n\tAFFS_SUPER_MAGIC                     = 0xadff\n\tAFS_FS_MAGIC                         = 0x6b414653\n\tAFS_SUPER_MAGIC                      = 0x5346414f\n\tAF_ALG                               = 0x26\n\tAF_APPLETALK                         = 0x5\n\tAF_ASH                               = 0x12\n\tAF_ATMPVC                            = 0x8\n\tAF_ATMSVC                            = 0x14\n\tAF_AX25                              = 0x3\n\tAF_BLUETOOTH                         = 0x1f\n\tAF_BRIDGE                            = 0x7\n\tAF_CAIF                              = 0x25\n\tAF_CAN                               = 0x1d\n\tAF_DECnet                            = 0xc\n\tAF_ECONET                            = 0x13\n\tAF_FILE                              = 0x1\n\tAF_IB                                = 0x1b\n\tAF_IEEE802154                        = 0x24\n\tAF_INET                              = 0x2\n\tAF_INET6                             = 0xa\n\tAF_IPX                               = 0x4\n\tAF_IRDA                              = 0x17\n\tAF_ISDN                              = 0x22\n\tAF_IUCV                              = 0x20\n\tAF_KCM                               = 0x29\n\tAF_KEY                               = 0xf\n\tAF_LLC                               = 0x1a\n\tAF_LOCAL                             = 0x1\n\tAF_MAX                               = 0x2d\n\tAF_MPLS                              = 0x1c\n\tAF_NETBEUI                           = 0xd\n\tAF_NETLINK                           = 0x10\n\tAF_NETROM                            = 0x6\n\tAF_NFC                               = 0x27\n\tAF_PACKET                            = 0x11\n\tAF_PHONET                            = 0x23\n\tAF_PPPOX                             = 0x18\n\tAF_QIPCRTR                           = 0x2a\n\tAF_RDS                               = 0x15\n\tAF_ROSE                              = 0xb\n\tAF_ROUTE                             = 0x10\n\tAF_RXRPC                             = 0x21\n\tAF_SECURITY                          = 0xe\n\tAF_SMC                               = 0x2b\n\tAF_SNA                               = 0x16\n\tAF_TIPC                              = 0x1e\n\tAF_UNIX                              = 0x1\n\tAF_UNSPEC                            = 0x0\n\tAF_VSOCK                             = 0x28\n\tAF_WANPIPE                           = 0x19\n\tAF_X25                               = 0x9\n\tAF_XDP                               = 0x2c\n\tALG_OP_DECRYPT                       = 0x0\n\tALG_OP_ENCRYPT                       = 0x1\n\tALG_SET_AEAD_ASSOCLEN                = 0x4\n\tALG_SET_AEAD_AUTHSIZE                = 0x5\n\tALG_SET_IV                           = 0x2\n\tALG_SET_KEY                          = 0x1\n\tALG_SET_OP                           = 0x3\n\tANON_INODE_FS_MAGIC                  = 0x9041934\n\tARPHRD_6LOWPAN                       = 0x339\n\tARPHRD_ADAPT                         = 0x108\n\tARPHRD_APPLETLK                      = 0x8\n\tARPHRD_ARCNET                        = 0x7\n\tARPHRD_ASH                           = 0x30d\n\tARPHRD_ATM                           = 0x13\n\tARPHRD_AX25                          = 0x3\n\tARPHRD_BIF                           = 0x307\n\tARPHRD_CAIF                          = 0x336\n\tARPHRD_CAN                           = 0x118\n\tARPHRD_CHAOS                         = 0x5\n\tARPHRD_CISCO                         = 0x201\n\tARPHRD_CSLIP                         = 0x101\n\tARPHRD_CSLIP6                        = 0x103\n\tARPHRD_DDCMP                         = 0x205\n\tARPHRD_DLCI                          = 0xf\n\tARPHRD_ECONET                        = 0x30e\n\tARPHRD_EETHER                        = 0x2\n\tARPHRD_ETHER                         = 0x1\n\tARPHRD_EUI64                         = 0x1b\n\tARPHRD_FCAL                          = 0x311\n\tARPHRD_FCFABRIC                      = 0x313\n\tARPHRD_FCPL                          = 0x312\n\tARPHRD_FCPP                          = 0x310\n\tARPHRD_FDDI                          = 0x306\n\tARPHRD_FRAD                          = 0x302\n\tARPHRD_HDLC                          = 0x201\n\tARPHRD_HIPPI                         = 0x30c\n\tARPHRD_HWX25                         = 0x110\n\tARPHRD_IEEE1394                      = 0x18\n\tARPHRD_IEEE802                       = 0x6\n\tARPHRD_IEEE80211                     = 0x321\n\tARPHRD_IEEE80211_PRISM               = 0x322\n\tARPHRD_IEEE80211_RADIOTAP            = 0x323\n\tARPHRD_IEEE802154                    = 0x324\n\tARPHRD_IEEE802154_MONITOR            = 0x325\n\tARPHRD_IEEE802_TR                    = 0x320\n\tARPHRD_INFINIBAND                    = 0x20\n\tARPHRD_IP6GRE                        = 0x337\n\tARPHRD_IPDDP                         = 0x309\n\tARPHRD_IPGRE                         = 0x30a\n\tARPHRD_IRDA                          = 0x30f\n\tARPHRD_LAPB                          = 0x204\n\tARPHRD_LOCALTLK                      = 0x305\n\tARPHRD_LOOPBACK                      = 0x304\n\tARPHRD_METRICOM                      = 0x17\n\tARPHRD_NETLINK                       = 0x338\n\tARPHRD_NETROM                        = 0x0\n\tARPHRD_NONE                          = 0xfffe\n\tARPHRD_PHONET                        = 0x334\n\tARPHRD_PHONET_PIPE                   = 0x335\n\tARPHRD_PIMREG                        = 0x30b\n\tARPHRD_PPP                           = 0x200\n\tARPHRD_PRONET                        = 0x4\n\tARPHRD_RAWHDLC                       = 0x206\n\tARPHRD_RAWIP                         = 0x207\n\tARPHRD_ROSE                          = 0x10e\n\tARPHRD_RSRVD                         = 0x104\n\tARPHRD_SIT                           = 0x308\n\tARPHRD_SKIP                          = 0x303\n\tARPHRD_SLIP                          = 0x100\n\tARPHRD_SLIP6                         = 0x102\n\tARPHRD_TUNNEL                        = 0x300\n\tARPHRD_TUNNEL6                       = 0x301\n\tARPHRD_VOID                          = 0xffff\n\tARPHRD_VSOCKMON                      = 0x33a\n\tARPHRD_X25                           = 0x10f\n\tASI_LEON_DFLUSH                      = 0x11\n\tASI_LEON_IFLUSH                      = 0x10\n\tASI_LEON_MMUFLUSH                    = 0x18\n\tAUTOFS_SUPER_MAGIC                   = 0x187\n\tB0                                   = 0x0\n\tB1000000                             = 0x1008\n\tB110                                 = 0x3\n\tB115200                              = 0x1002\n\tB1152000                             = 0x1009\n\tB1200                                = 0x9\n\tB134                                 = 0x4\n\tB150                                 = 0x5\n\tB1500000                             = 0x100a\n\tB1800                                = 0xa\n\tB19200                               = 0xe\n\tB200                                 = 0x6\n\tB2000000                             = 0x100b\n\tB230400                              = 0x1003\n\tB2400                                = 0xb\n\tB2500000                             = 0x100c\n\tB300                                 = 0x7\n\tB3000000                             = 0x100d\n\tB3500000                             = 0x100e\n\tB38400                               = 0xf\n\tB4000000                             = 0x100f\n\tB460800                              = 0x1004\n\tB4800                                = 0xc\n\tB50                                  = 0x1\n\tB500000                              = 0x1005\n\tB57600                               = 0x1001\n\tB576000                              = 0x1006\n\tB600                                 = 0x8\n\tB75                                  = 0x2\n\tB921600                              = 0x1007\n\tB9600                                = 0xd\n\tBALLOON_KVM_MAGIC                    = 0x13661366\n\tBDEVFS_MAGIC                         = 0x62646576\n\tBINDERFS_SUPER_MAGIC                 = 0x6c6f6f70\n\tBINFMTFS_MAGIC                       = 0x42494e4d\n\tBLKBSZGET                            = 0x40081270\n\tBLKBSZSET                            = 0x80081271\n\tBLKFLSBUF                            = 0x20001261\n\tBLKFRAGET                            = 0x20001265\n\tBLKFRASET                            = 0x20001264\n\tBLKGETSIZE                           = 0x20001260\n\tBLKGETSIZE64                         = 0x40081272\n\tBLKPBSZGET                           = 0x2000127b\n\tBLKRAGET                             = 0x20001263\n\tBLKRASET                             = 0x20001262\n\tBLKROGET                             = 0x2000125e\n\tBLKROSET                             = 0x2000125d\n\tBLKRRPART                            = 0x2000125f\n\tBLKSECTGET                           = 0x20001267\n\tBLKSECTSET                           = 0x20001266\n\tBLKSSZGET                            = 0x20001268\n\tBOTHER                               = 0x1000\n\tBPF_A                                = 0x10\n\tBPF_ABS                              = 0x20\n\tBPF_ADD                              = 0x0\n\tBPF_ALU                              = 0x4\n\tBPF_ALU64                            = 0x7\n\tBPF_AND                              = 0x50\n\tBPF_ANY                              = 0x0\n\tBPF_ARSH                             = 0xc0\n\tBPF_B                                = 0x10\n\tBPF_BUILD_ID_SIZE                    = 0x14\n\tBPF_CALL                             = 0x80\n\tBPF_DEVCG_ACC_MKNOD                  = 0x1\n\tBPF_DEVCG_ACC_READ                   = 0x2\n\tBPF_DEVCG_ACC_WRITE                  = 0x4\n\tBPF_DEVCG_DEV_BLOCK                  = 0x1\n\tBPF_DEVCG_DEV_CHAR                   = 0x2\n\tBPF_DIV                              = 0x30\n\tBPF_DW                               = 0x18\n\tBPF_END                              = 0xd0\n\tBPF_EXIST                            = 0x2\n\tBPF_EXIT                             = 0x90\n\tBPF_FROM_BE                          = 0x8\n\tBPF_FROM_LE                          = 0x0\n\tBPF_FS_MAGIC                         = 0xcafe4a11\n\tBPF_F_ALLOW_MULTI                    = 0x2\n\tBPF_F_ALLOW_OVERRIDE                 = 0x1\n\tBPF_F_ANY_ALIGNMENT                  = 0x2\n\tBPF_F_CTXLEN_MASK                    = 0xfffff00000000\n\tBPF_F_CURRENT_CPU                    = 0xffffffff\n\tBPF_F_CURRENT_NETNS                  = -0x1\n\tBPF_F_DONT_FRAGMENT                  = 0x4\n\tBPF_F_FAST_STACK_CMP                 = 0x200\n\tBPF_F_HDR_FIELD_MASK                 = 0xf\n\tBPF_F_INDEX_MASK                     = 0xffffffff\n\tBPF_F_INGRESS                        = 0x1\n\tBPF_F_INVALIDATE_HASH                = 0x2\n\tBPF_F_LOCK                           = 0x4\n\tBPF_F_MARK_ENFORCE                   = 0x40\n\tBPF_F_MARK_MANGLED_0                 = 0x20\n\tBPF_F_NO_COMMON_LRU                  = 0x2\n\tBPF_F_NO_PREALLOC                    = 0x1\n\tBPF_F_NUMA_NODE                      = 0x4\n\tBPF_F_PSEUDO_HDR                     = 0x10\n\tBPF_F_QUERY_EFFECTIVE                = 0x1\n\tBPF_F_RDONLY                         = 0x8\n\tBPF_F_RECOMPUTE_CSUM                 = 0x1\n\tBPF_F_REUSE_STACKID                  = 0x400\n\tBPF_F_SEQ_NUMBER                     = 0x8\n\tBPF_F_SKIP_FIELD_MASK                = 0xff\n\tBPF_F_STACK_BUILD_ID                 = 0x20\n\tBPF_F_STRICT_ALIGNMENT               = 0x1\n\tBPF_F_TUNINFO_IPV6                   = 0x1\n\tBPF_F_USER_BUILD_ID                  = 0x800\n\tBPF_F_USER_STACK                     = 0x100\n\tBPF_F_WRONLY                         = 0x10\n\tBPF_F_ZERO_CSUM_TX                   = 0x2\n\tBPF_F_ZERO_SEED                      = 0x40\n\tBPF_H                                = 0x8\n\tBPF_IMM                              = 0x0\n\tBPF_IND                              = 0x40\n\tBPF_JA                               = 0x0\n\tBPF_JEQ                              = 0x10\n\tBPF_JGE                              = 0x30\n\tBPF_JGT                              = 0x20\n\tBPF_JLE                              = 0xb0\n\tBPF_JLT                              = 0xa0\n\tBPF_JMP                              = 0x5\n\tBPF_JMP32                            = 0x6\n\tBPF_JNE                              = 0x50\n\tBPF_JSET                             = 0x40\n\tBPF_JSGE                             = 0x70\n\tBPF_JSGT                             = 0x60\n\tBPF_JSLE                             = 0xd0\n\tBPF_JSLT                             = 0xc0\n\tBPF_K                                = 0x0\n\tBPF_LD                               = 0x0\n\tBPF_LDX                              = 0x1\n\tBPF_LEN                              = 0x80\n\tBPF_LL_OFF                           = -0x200000\n\tBPF_LSH                              = 0x60\n\tBPF_MAJOR_VERSION                    = 0x1\n\tBPF_MAXINSNS                         = 0x1000\n\tBPF_MEM                              = 0x60\n\tBPF_MEMWORDS                         = 0x10\n\tBPF_MINOR_VERSION                    = 0x1\n\tBPF_MISC                             = 0x7\n\tBPF_MOD                              = 0x90\n\tBPF_MOV                              = 0xb0\n\tBPF_MSH                              = 0xa0\n\tBPF_MUL                              = 0x20\n\tBPF_NEG                              = 0x80\n\tBPF_NET_OFF                          = -0x100000\n\tBPF_NOEXIST                          = 0x1\n\tBPF_OBJ_NAME_LEN                     = 0x10\n\tBPF_OR                               = 0x40\n\tBPF_PSEUDO_CALL                      = 0x1\n\tBPF_PSEUDO_MAP_FD                    = 0x1\n\tBPF_RET                              = 0x6\n\tBPF_RSH                              = 0x70\n\tBPF_SOCK_OPS_ALL_CB_FLAGS            = 0x7\n\tBPF_SOCK_OPS_RETRANS_CB_FLAG         = 0x2\n\tBPF_SOCK_OPS_RTO_CB_FLAG             = 0x1\n\tBPF_SOCK_OPS_STATE_CB_FLAG           = 0x4\n\tBPF_ST                               = 0x2\n\tBPF_STX                              = 0x3\n\tBPF_SUB                              = 0x10\n\tBPF_TAG_SIZE                         = 0x8\n\tBPF_TAX                              = 0x0\n\tBPF_TO_BE                            = 0x8\n\tBPF_TO_LE                            = 0x0\n\tBPF_TXA                              = 0x80\n\tBPF_W                                = 0x0\n\tBPF_X                                = 0x8\n\tBPF_XADD                             = 0xc0\n\tBPF_XOR                              = 0xa0\n\tBRKINT                               = 0x2\n\tBS0                                  = 0x0\n\tBS1                                  = 0x2000\n\tBSDLY                                = 0x2000\n\tBTRFS_SUPER_MAGIC                    = 0x9123683e\n\tBTRFS_TEST_MAGIC                     = 0x73727279\n\tCAN_BCM                              = 0x2\n\tCAN_EFF_FLAG                         = 0x80000000\n\tCAN_EFF_ID_BITS                      = 0x1d\n\tCAN_EFF_MASK                         = 0x1fffffff\n\tCAN_ERR_FLAG                         = 0x20000000\n\tCAN_ERR_MASK                         = 0x1fffffff\n\tCAN_INV_FILTER                       = 0x20000000\n\tCAN_ISOTP                            = 0x6\n\tCAN_MAX_DLC                          = 0x8\n\tCAN_MAX_DLEN                         = 0x8\n\tCAN_MCNET                            = 0x5\n\tCAN_MTU                              = 0x10\n\tCAN_NPROTO                           = 0x7\n\tCAN_RAW                              = 0x1\n\tCAN_RAW_FILTER_MAX                   = 0x200\n\tCAN_RTR_FLAG                         = 0x40000000\n\tCAN_SFF_ID_BITS                      = 0xb\n\tCAN_SFF_MASK                         = 0x7ff\n\tCAN_TP16                             = 0x3\n\tCAN_TP20                             = 0x4\n\tCBAUD                                = 0x100f\n\tCBAUDEX                              = 0x1000\n\tCFLUSH                               = 0xf\n\tCGROUP2_SUPER_MAGIC                  = 0x63677270\n\tCGROUP_SUPER_MAGIC                   = 0x27e0eb\n\tCIBAUD                               = 0x100f0000\n\tCLOCAL                               = 0x800\n\tCLOCK_BOOTTIME                       = 0x7\n\tCLOCK_BOOTTIME_ALARM                 = 0x9\n\tCLOCK_DEFAULT                        = 0x0\n\tCLOCK_EXT                            = 0x1\n\tCLOCK_INT                            = 0x2\n\tCLOCK_MONOTONIC                      = 0x1\n\tCLOCK_MONOTONIC_COARSE               = 0x6\n\tCLOCK_MONOTONIC_RAW                  = 0x4\n\tCLOCK_PROCESS_CPUTIME_ID             = 0x2\n\tCLOCK_REALTIME                       = 0x0\n\tCLOCK_REALTIME_ALARM                 = 0x8\n\tCLOCK_REALTIME_COARSE                = 0x5\n\tCLOCK_TAI                            = 0xb\n\tCLOCK_THREAD_CPUTIME_ID              = 0x3\n\tCLOCK_TXFROMRX                       = 0x4\n\tCLOCK_TXINT                          = 0x3\n\tCLONE_CHILD_CLEARTID                 = 0x200000\n\tCLONE_CHILD_SETTID                   = 0x1000000\n\tCLONE_DETACHED                       = 0x400000\n\tCLONE_FILES                          = 0x400\n\tCLONE_FS                             = 0x200\n\tCLONE_IO                             = 0x80000000\n\tCLONE_NEWCGROUP                      = 0x2000000\n\tCLONE_NEWIPC                         = 0x8000000\n\tCLONE_NEWNET                         = 0x40000000\n\tCLONE_NEWNS                          = 0x20000\n\tCLONE_NEWPID                         = 0x20000000\n\tCLONE_NEWUSER                        = 0x10000000\n\tCLONE_NEWUTS                         = 0x4000000\n\tCLONE_PARENT                         = 0x8000\n\tCLONE_PARENT_SETTID                  = 0x100000\n\tCLONE_PTRACE                         = 0x2000\n\tCLONE_SETTLS                         = 0x80000\n\tCLONE_SIGHAND                        = 0x800\n\tCLONE_SYSVSEM                        = 0x40000\n\tCLONE_THREAD                         = 0x10000\n\tCLONE_UNTRACED                       = 0x800000\n\tCLONE_VFORK                          = 0x4000\n\tCLONE_VM                             = 0x100\n\tCMSPAR                               = 0x40000000\n\tCODA_SUPER_MAGIC                     = 0x73757245\n\tCR0                                  = 0x0\n\tCR1                                  = 0x200\n\tCR2                                  = 0x400\n\tCR3                                  = 0x600\n\tCRAMFS_MAGIC                         = 0x28cd3d45\n\tCRDLY                                = 0x600\n\tCREAD                                = 0x80\n\tCRTSCTS                              = 0x80000000\n\tCRYPTO_MAX_NAME                      = 0x40\n\tCRYPTO_MSG_MAX                       = 0x15\n\tCRYPTO_NR_MSGTYPES                   = 0x6\n\tCRYPTO_REPORT_MAXSIZE                = 0x160\n\tCS5                                  = 0x0\n\tCS6                                  = 0x10\n\tCS7                                  = 0x20\n\tCS8                                  = 0x30\n\tCSIGNAL                              = 0xff\n\tCSIZE                                = 0x30\n\tCSTART                               = 0x11\n\tCSTATUS                              = 0x0\n\tCSTOP                                = 0x13\n\tCSTOPB                               = 0x40\n\tCSUSP                                = 0x1a\n\tDAXFS_MAGIC                          = 0x64646178\n\tDEBUGFS_MAGIC                        = 0x64626720\n\tDEVPTS_SUPER_MAGIC                   = 0x1cd1\n\tDT_BLK                               = 0x6\n\tDT_CHR                               = 0x2\n\tDT_DIR                               = 0x4\n\tDT_FIFO                              = 0x1\n\tDT_LNK                               = 0xa\n\tDT_REG                               = 0x8\n\tDT_SOCK                              = 0xc\n\tDT_UNKNOWN                           = 0x0\n\tDT_WHT                               = 0xe\n\tECHO                                 = 0x8\n\tECHOCTL                              = 0x200\n\tECHOE                                = 0x10\n\tECHOK                                = 0x20\n\tECHOKE                               = 0x800\n\tECHONL                               = 0x40\n\tECHOPRT                              = 0x400\n\tECRYPTFS_SUPER_MAGIC                 = 0xf15f\n\tEFD_CLOEXEC                          = 0x400000\n\tEFD_NONBLOCK                         = 0x4000\n\tEFD_SEMAPHORE                        = 0x1\n\tEFIVARFS_MAGIC                       = 0xde5e81e4\n\tEFS_SUPER_MAGIC                      = 0x414a53\n\tEMT_TAGOVF                           = 0x1\n\tENCODING_DEFAULT                     = 0x0\n\tENCODING_FM_MARK                     = 0x3\n\tENCODING_FM_SPACE                    = 0x4\n\tENCODING_MANCHESTER                  = 0x5\n\tENCODING_NRZ                         = 0x1\n\tENCODING_NRZI                        = 0x2\n\tEPOLLERR                             = 0x8\n\tEPOLLET                              = 0x80000000\n\tEPOLLEXCLUSIVE                       = 0x10000000\n\tEPOLLHUP                             = 0x10\n\tEPOLLIN                              = 0x1\n\tEPOLLMSG                             = 0x400\n\tEPOLLONESHOT                         = 0x40000000\n\tEPOLLOUT                             = 0x4\n\tEPOLLPRI                             = 0x2\n\tEPOLLRDBAND                          = 0x80\n\tEPOLLRDHUP                           = 0x2000\n\tEPOLLRDNORM                          = 0x40\n\tEPOLLWAKEUP                          = 0x20000000\n\tEPOLLWRBAND                          = 0x200\n\tEPOLLWRNORM                          = 0x100\n\tEPOLL_CLOEXEC                        = 0x400000\n\tEPOLL_CTL_ADD                        = 0x1\n\tEPOLL_CTL_DEL                        = 0x2\n\tEPOLL_CTL_MOD                        = 0x3\n\tETH_P_1588                           = 0x88f7\n\tETH_P_8021AD                         = 0x88a8\n\tETH_P_8021AH                         = 0x88e7\n\tETH_P_8021Q                          = 0x8100\n\tETH_P_80221                          = 0x8917\n\tETH_P_802_2                          = 0x4\n\tETH_P_802_3                          = 0x1\n\tETH_P_802_3_MIN                      = 0x600\n\tETH_P_802_EX1                        = 0x88b5\n\tETH_P_AARP                           = 0x80f3\n\tETH_P_AF_IUCV                        = 0xfbfb\n\tETH_P_ALL                            = 0x3\n\tETH_P_AOE                            = 0x88a2\n\tETH_P_ARCNET                         = 0x1a\n\tETH_P_ARP                            = 0x806\n\tETH_P_ATALK                          = 0x809b\n\tETH_P_ATMFATE                        = 0x8884\n\tETH_P_ATMMPOA                        = 0x884c\n\tETH_P_AX25                           = 0x2\n\tETH_P_BATMAN                         = 0x4305\n\tETH_P_BPQ                            = 0x8ff\n\tETH_P_CAIF                           = 0xf7\n\tETH_P_CAN                            = 0xc\n\tETH_P_CANFD                          = 0xd\n\tETH_P_CONTROL                        = 0x16\n\tETH_P_CUST                           = 0x6006\n\tETH_P_DDCMP                          = 0x6\n\tETH_P_DEC                            = 0x6000\n\tETH_P_DIAG                           = 0x6005\n\tETH_P_DNA_DL                         = 0x6001\n\tETH_P_DNA_RC                         = 0x6002\n\tETH_P_DNA_RT                         = 0x6003\n\tETH_P_DSA                            = 0x1b\n\tETH_P_ECONET                         = 0x18\n\tETH_P_EDSA                           = 0xdada\n\tETH_P_ERSPAN                         = 0x88be\n\tETH_P_ERSPAN2                        = 0x22eb\n\tETH_P_FCOE                           = 0x8906\n\tETH_P_FIP                            = 0x8914\n\tETH_P_HDLC                           = 0x19\n\tETH_P_HSR                            = 0x892f\n\tETH_P_IBOE                           = 0x8915\n\tETH_P_IEEE802154                     = 0xf6\n\tETH_P_IEEEPUP                        = 0xa00\n\tETH_P_IEEEPUPAT                      = 0xa01\n\tETH_P_IFE                            = 0xed3e\n\tETH_P_IP                             = 0x800\n\tETH_P_IPV6                           = 0x86dd\n\tETH_P_IPX                            = 0x8137\n\tETH_P_IRDA                           = 0x17\n\tETH_P_LAT                            = 0x6004\n\tETH_P_LINK_CTL                       = 0x886c\n\tETH_P_LOCALTALK                      = 0x9\n\tETH_P_LOOP                           = 0x60\n\tETH_P_LOOPBACK                       = 0x9000\n\tETH_P_MACSEC                         = 0x88e5\n\tETH_P_MAP                            = 0xf9\n\tETH_P_MOBITEX                        = 0x15\n\tETH_P_MPLS_MC                        = 0x8848\n\tETH_P_MPLS_UC                        = 0x8847\n\tETH_P_MVRP                           = 0x88f5\n\tETH_P_NCSI                           = 0x88f8\n\tETH_P_NSH                            = 0x894f\n\tETH_P_PAE                            = 0x888e\n\tETH_P_PAUSE                          = 0x8808\n\tETH_P_PHONET                         = 0xf5\n\tETH_P_PPPTALK                        = 0x10\n\tETH_P_PPP_DISC                       = 0x8863\n\tETH_P_PPP_MP                         = 0x8\n\tETH_P_PPP_SES                        = 0x8864\n\tETH_P_PREAUTH                        = 0x88c7\n\tETH_P_PRP                            = 0x88fb\n\tETH_P_PUP                            = 0x200\n\tETH_P_PUPAT                          = 0x201\n\tETH_P_QINQ1                          = 0x9100\n\tETH_P_QINQ2                          = 0x9200\n\tETH_P_QINQ3                          = 0x9300\n\tETH_P_RARP                           = 0x8035\n\tETH_P_SCA                            = 0x6007\n\tETH_P_SLOW                           = 0x8809\n\tETH_P_SNAP                           = 0x5\n\tETH_P_TDLS                           = 0x890d\n\tETH_P_TEB                            = 0x6558\n\tETH_P_TIPC                           = 0x88ca\n\tETH_P_TRAILER                        = 0x1c\n\tETH_P_TR_802_2                       = 0x11\n\tETH_P_TSN                            = 0x22f0\n\tETH_P_WAN_PPP                        = 0x7\n\tETH_P_WCCP                           = 0x883e\n\tETH_P_X25                            = 0x805\n\tETH_P_XDSA                           = 0xf8\n\tEXABYTE_ENABLE_NEST                  = 0xf0\n\tEXT2_SUPER_MAGIC                     = 0xef53\n\tEXT3_SUPER_MAGIC                     = 0xef53\n\tEXT4_SUPER_MAGIC                     = 0xef53\n\tEXTA                                 = 0xe\n\tEXTB                                 = 0xf\n\tEXTPROC                              = 0x10000\n\tF2FS_SUPER_MAGIC                     = 0xf2f52010\n\tFALLOC_FL_COLLAPSE_RANGE             = 0x8\n\tFALLOC_FL_INSERT_RANGE               = 0x20\n\tFALLOC_FL_KEEP_SIZE                  = 0x1\n\tFALLOC_FL_NO_HIDE_STALE              = 0x4\n\tFALLOC_FL_PUNCH_HOLE                 = 0x2\n\tFALLOC_FL_UNSHARE_RANGE              = 0x40\n\tFALLOC_FL_ZERO_RANGE                 = 0x10\n\tFANOTIFY_METADATA_VERSION            = 0x3\n\tFAN_ACCESS                           = 0x1\n\tFAN_ACCESS_PERM                      = 0x20000\n\tFAN_ALLOW                            = 0x1\n\tFAN_ALL_CLASS_BITS                   = 0xc\n\tFAN_ALL_EVENTS                       = 0x3b\n\tFAN_ALL_INIT_FLAGS                   = 0x3f\n\tFAN_ALL_MARK_FLAGS                   = 0xff\n\tFAN_ALL_OUTGOING_EVENTS              = 0x3403b\n\tFAN_ALL_PERM_EVENTS                  = 0x30000\n\tFAN_ATTRIB                           = 0x4\n\tFAN_AUDIT                            = 0x10\n\tFAN_CLASS_CONTENT                    = 0x4\n\tFAN_CLASS_NOTIF                      = 0x0\n\tFAN_CLASS_PRE_CONTENT                = 0x8\n\tFAN_CLOEXEC                          = 0x1\n\tFAN_CLOSE                            = 0x18\n\tFAN_CLOSE_NOWRITE                    = 0x10\n\tFAN_CLOSE_WRITE                      = 0x8\n\tFAN_CREATE                           = 0x100\n\tFAN_DELETE                           = 0x200\n\tFAN_DELETE_SELF                      = 0x400\n\tFAN_DENY                             = 0x2\n\tFAN_ENABLE_AUDIT                     = 0x40\n\tFAN_EVENT_INFO_TYPE_FID              = 0x1\n\tFAN_EVENT_METADATA_LEN               = 0x18\n\tFAN_EVENT_ON_CHILD                   = 0x8000000\n\tFAN_MARK_ADD                         = 0x1\n\tFAN_MARK_DONT_FOLLOW                 = 0x4\n\tFAN_MARK_FILESYSTEM                  = 0x100\n\tFAN_MARK_FLUSH                       = 0x80\n\tFAN_MARK_IGNORED_MASK                = 0x20\n\tFAN_MARK_IGNORED_SURV_MODIFY         = 0x40\n\tFAN_MARK_INODE                       = 0x0\n\tFAN_MARK_MOUNT                       = 0x10\n\tFAN_MARK_ONLYDIR                     = 0x8\n\tFAN_MARK_REMOVE                      = 0x2\n\tFAN_MODIFY                           = 0x2\n\tFAN_MOVE                             = 0xc0\n\tFAN_MOVED_FROM                       = 0x40\n\tFAN_MOVED_TO                         = 0x80\n\tFAN_MOVE_SELF                        = 0x800\n\tFAN_NOFD                             = -0x1\n\tFAN_NONBLOCK                         = 0x2\n\tFAN_ONDIR                            = 0x40000000\n\tFAN_OPEN                             = 0x20\n\tFAN_OPEN_EXEC                        = 0x1000\n\tFAN_OPEN_EXEC_PERM                   = 0x40000\n\tFAN_OPEN_PERM                        = 0x10000\n\tFAN_Q_OVERFLOW                       = 0x4000\n\tFAN_REPORT_FID                       = 0x200\n\tFAN_REPORT_TID                       = 0x100\n\tFAN_UNLIMITED_MARKS                  = 0x20\n\tFAN_UNLIMITED_QUEUE                  = 0x10\n\tFD_CLOEXEC                           = 0x1\n\tFD_SETSIZE                           = 0x400\n\tFF0                                  = 0x0\n\tFF1                                  = 0x8000\n\tFFDLY                                = 0x8000\n\tFLUSHO                               = 0x1000\n\tFS_ENCRYPTION_MODE_ADIANTUM          = 0x9\n\tFS_ENCRYPTION_MODE_AES_128_CBC       = 0x5\n\tFS_ENCRYPTION_MODE_AES_128_CTS       = 0x6\n\tFS_ENCRYPTION_MODE_AES_256_CBC       = 0x3\n\tFS_ENCRYPTION_MODE_AES_256_CTS       = 0x4\n\tFS_ENCRYPTION_MODE_AES_256_GCM       = 0x2\n\tFS_ENCRYPTION_MODE_AES_256_XTS       = 0x1\n\tFS_ENCRYPTION_MODE_INVALID           = 0x0\n\tFS_ENCRYPTION_MODE_SPECK128_256_CTS  = 0x8\n\tFS_ENCRYPTION_MODE_SPECK128_256_XTS  = 0x7\n\tFS_IOC_GET_ENCRYPTION_POLICY         = 0x800c6615\n\tFS_IOC_GET_ENCRYPTION_PWSALT         = 0x80106614\n\tFS_IOC_SET_ENCRYPTION_POLICY         = 0x400c6613\n\tFS_KEY_DESCRIPTOR_SIZE               = 0x8\n\tFS_KEY_DESC_PREFIX                   = \"fscrypt:\"\n\tFS_KEY_DESC_PREFIX_SIZE              = 0x8\n\tFS_MAX_KEY_SIZE                      = 0x40\n\tFS_POLICY_FLAGS_PAD_16               = 0x2\n\tFS_POLICY_FLAGS_PAD_32               = 0x3\n\tFS_POLICY_FLAGS_PAD_4                = 0x0\n\tFS_POLICY_FLAGS_PAD_8                = 0x1\n\tFS_POLICY_FLAGS_PAD_MASK             = 0x3\n\tFS_POLICY_FLAGS_VALID                = 0x7\n\tFUTEXFS_SUPER_MAGIC                  = 0xbad1dea\n\tF_ADD_SEALS                          = 0x409\n\tF_DUPFD                              = 0x0\n\tF_DUPFD_CLOEXEC                      = 0x406\n\tF_EXLCK                              = 0x4\n\tF_GETFD                              = 0x1\n\tF_GETFL                              = 0x3\n\tF_GETLEASE                           = 0x401\n\tF_GETLK                              = 0x7\n\tF_GETLK64                            = 0x7\n\tF_GETOWN                             = 0x5\n\tF_GETOWN_EX                          = 0x10\n\tF_GETPIPE_SZ                         = 0x408\n\tF_GETSIG                             = 0xb\n\tF_GET_FILE_RW_HINT                   = 0x40d\n\tF_GET_RW_HINT                        = 0x40b\n\tF_GET_SEALS                          = 0x40a\n\tF_LOCK                               = 0x1\n\tF_NOTIFY                             = 0x402\n\tF_OFD_GETLK                          = 0x24\n\tF_OFD_SETLK                          = 0x25\n\tF_OFD_SETLKW                         = 0x26\n\tF_OK                                 = 0x0\n\tF_RDLCK                              = 0x1\n\tF_SEAL_GROW                          = 0x4\n\tF_SEAL_SEAL                          = 0x1\n\tF_SEAL_SHRINK                        = 0x2\n\tF_SEAL_WRITE                         = 0x8\n\tF_SETFD                              = 0x2\n\tF_SETFL                              = 0x4\n\tF_SETLEASE                           = 0x400\n\tF_SETLK                              = 0x8\n\tF_SETLK64                            = 0x8\n\tF_SETLKW                             = 0x9\n\tF_SETLKW64                           = 0x9\n\tF_SETOWN                             = 0x6\n\tF_SETOWN_EX                          = 0xf\n\tF_SETPIPE_SZ                         = 0x407\n\tF_SETSIG                             = 0xa\n\tF_SET_FILE_RW_HINT                   = 0x40e\n\tF_SET_RW_HINT                        = 0x40c\n\tF_SHLCK                              = 0x8\n\tF_TEST                               = 0x3\n\tF_TLOCK                              = 0x2\n\tF_ULOCK                              = 0x0\n\tF_UNLCK                              = 0x3\n\tF_WRLCK                              = 0x2\n\tGENL_ADMIN_PERM                      = 0x1\n\tGENL_CMD_CAP_DO                      = 0x2\n\tGENL_CMD_CAP_DUMP                    = 0x4\n\tGENL_CMD_CAP_HASPOL                  = 0x8\n\tGENL_HDRLEN                          = 0x4\n\tGENL_ID_CTRL                         = 0x10\n\tGENL_ID_PMCRAID                      = 0x12\n\tGENL_ID_VFS_DQUOT                    = 0x11\n\tGENL_MAX_ID                          = 0x3ff\n\tGENL_MIN_ID                          = 0x10\n\tGENL_NAMSIZ                          = 0x10\n\tGENL_START_ALLOC                     = 0x13\n\tGENL_UNS_ADMIN_PERM                  = 0x10\n\tGRND_NONBLOCK                        = 0x1\n\tGRND_RANDOM                          = 0x2\n\tHDIO_DRIVE_CMD                       = 0x31f\n\tHDIO_DRIVE_CMD_AEB                   = 0x31e\n\tHDIO_DRIVE_CMD_HDR_SIZE              = 0x4\n\tHDIO_DRIVE_HOB_HDR_SIZE              = 0x8\n\tHDIO_DRIVE_RESET                     = 0x31c\n\tHDIO_DRIVE_TASK                      = 0x31e\n\tHDIO_DRIVE_TASKFILE                  = 0x31d\n\tHDIO_DRIVE_TASK_HDR_SIZE             = 0x8\n\tHDIO_GETGEO                          = 0x301\n\tHDIO_GET_32BIT                       = 0x309\n\tHDIO_GET_ACOUSTIC                    = 0x30f\n\tHDIO_GET_ADDRESS                     = 0x310\n\tHDIO_GET_BUSSTATE                    = 0x31a\n\tHDIO_GET_DMA                         = 0x30b\n\tHDIO_GET_IDENTITY                    = 0x30d\n\tHDIO_GET_KEEPSETTINGS                = 0x308\n\tHDIO_GET_MULTCOUNT                   = 0x304\n\tHDIO_GET_NICE                        = 0x30c\n\tHDIO_GET_NOWERR                      = 0x30a\n\tHDIO_GET_QDMA                        = 0x305\n\tHDIO_GET_UNMASKINTR                  = 0x302\n\tHDIO_GET_WCACHE                      = 0x30e\n\tHDIO_OBSOLETE_IDENTITY               = 0x307\n\tHDIO_SCAN_HWIF                       = 0x328\n\tHDIO_SET_32BIT                       = 0x324\n\tHDIO_SET_ACOUSTIC                    = 0x32c\n\tHDIO_SET_ADDRESS                     = 0x32f\n\tHDIO_SET_BUSSTATE                    = 0x32d\n\tHDIO_SET_DMA                         = 0x326\n\tHDIO_SET_KEEPSETTINGS                = 0x323\n\tHDIO_SET_MULTCOUNT                   = 0x321\n\tHDIO_SET_NICE                        = 0x329\n\tHDIO_SET_NOWERR                      = 0x325\n\tHDIO_SET_PIO_MODE                    = 0x327\n\tHDIO_SET_QDMA                        = 0x32e\n\tHDIO_SET_UNMASKINTR                  = 0x322\n\tHDIO_SET_WCACHE                      = 0x32b\n\tHDIO_SET_XFER                        = 0x306\n\tHDIO_TRISTATE_HWIF                   = 0x31b\n\tHDIO_UNREGISTER_HWIF                 = 0x32a\n\tHOSTFS_SUPER_MAGIC                   = 0xc0ffee\n\tHPFS_SUPER_MAGIC                     = 0xf995e849\n\tHUGETLBFS_MAGIC                      = 0x958458f6\n\tHUPCL                                = 0x400\n\tIBSHIFT                              = 0x10\n\tICANON                               = 0x2\n\tICMPV6_FILTER                        = 0x1\n\tICRNL                                = 0x100\n\tIEXTEN                               = 0x8000\n\tIFA_F_DADFAILED                      = 0x8\n\tIFA_F_DEPRECATED                     = 0x20\n\tIFA_F_HOMEADDRESS                    = 0x10\n\tIFA_F_MANAGETEMPADDR                 = 0x100\n\tIFA_F_MCAUTOJOIN                     = 0x400\n\tIFA_F_NODAD                          = 0x2\n\tIFA_F_NOPREFIXROUTE                  = 0x200\n\tIFA_F_OPTIMISTIC                     = 0x4\n\tIFA_F_PERMANENT                      = 0x80\n\tIFA_F_SECONDARY                      = 0x1\n\tIFA_F_STABLE_PRIVACY                 = 0x800\n\tIFA_F_TEMPORARY                      = 0x1\n\tIFA_F_TENTATIVE                      = 0x40\n\tIFA_MAX                              = 0xa\n\tIFF_ALLMULTI                         = 0x200\n\tIFF_ATTACH_QUEUE                     = 0x200\n\tIFF_AUTOMEDIA                        = 0x4000\n\tIFF_BROADCAST                        = 0x2\n\tIFF_DEBUG                            = 0x4\n\tIFF_DETACH_QUEUE                     = 0x400\n\tIFF_DORMANT                          = 0x20000\n\tIFF_DYNAMIC                          = 0x8000\n\tIFF_ECHO                             = 0x40000\n\tIFF_LOOPBACK                         = 0x8\n\tIFF_LOWER_UP                         = 0x10000\n\tIFF_MASTER                           = 0x400\n\tIFF_MULTICAST                        = 0x1000\n\tIFF_MULTI_QUEUE                      = 0x100\n\tIFF_NAPI                             = 0x10\n\tIFF_NAPI_FRAGS                       = 0x20\n\tIFF_NOARP                            = 0x80\n\tIFF_NOFILTER                         = 0x1000\n\tIFF_NOTRAILERS                       = 0x20\n\tIFF_NO_PI                            = 0x1000\n\tIFF_ONE_QUEUE                        = 0x2000\n\tIFF_PERSIST                          = 0x800\n\tIFF_POINTOPOINT                      = 0x10\n\tIFF_PORTSEL                          = 0x2000\n\tIFF_PROMISC                          = 0x100\n\tIFF_RUNNING                          = 0x40\n\tIFF_SLAVE                            = 0x800\n\tIFF_TAP                              = 0x2\n\tIFF_TUN                              = 0x1\n\tIFF_TUN_EXCL                         = 0x8000\n\tIFF_UP                               = 0x1\n\tIFF_VNET_HDR                         = 0x4000\n\tIFF_VOLATILE                         = 0x70c5a\n\tIFNAMSIZ                             = 0x10\n\tIGNBRK                               = 0x1\n\tIGNCR                                = 0x80\n\tIGNPAR                               = 0x4\n\tIMAXBEL                              = 0x2000\n\tINLCR                                = 0x40\n\tINPCK                                = 0x10\n\tIN_ACCESS                            = 0x1\n\tIN_ALL_EVENTS                        = 0xfff\n\tIN_ATTRIB                            = 0x4\n\tIN_CLASSA_HOST                       = 0xffffff\n\tIN_CLASSA_MAX                        = 0x80\n\tIN_CLASSA_NET                        = 0xff000000\n\tIN_CLASSA_NSHIFT                     = 0x18\n\tIN_CLASSB_HOST                       = 0xffff\n\tIN_CLASSB_MAX                        = 0x10000\n\tIN_CLASSB_NET                        = 0xffff0000\n\tIN_CLASSB_NSHIFT                     = 0x10\n\tIN_CLASSC_HOST                       = 0xff\n\tIN_CLASSC_NET                        = 0xffffff00\n\tIN_CLASSC_NSHIFT                     = 0x8\n\tIN_CLOEXEC                           = 0x400000\n\tIN_CLOSE                             = 0x18\n\tIN_CLOSE_NOWRITE                     = 0x10\n\tIN_CLOSE_WRITE                       = 0x8\n\tIN_CREATE                            = 0x100\n\tIN_DELETE                            = 0x200\n\tIN_DELETE_SELF                       = 0x400\n\tIN_DONT_FOLLOW                       = 0x2000000\n\tIN_EXCL_UNLINK                       = 0x4000000\n\tIN_IGNORED                           = 0x8000\n\tIN_ISDIR                             = 0x40000000\n\tIN_LOOPBACKNET                       = 0x7f\n\tIN_MASK_ADD                          = 0x20000000\n\tIN_MASK_CREATE                       = 0x10000000\n\tIN_MODIFY                            = 0x2\n\tIN_MOVE                              = 0xc0\n\tIN_MOVED_FROM                        = 0x40\n\tIN_MOVED_TO                          = 0x80\n\tIN_MOVE_SELF                         = 0x800\n\tIN_NONBLOCK                          = 0x4000\n\tIN_ONESHOT                           = 0x80000000\n\tIN_ONLYDIR                           = 0x1000000\n\tIN_OPEN                              = 0x20\n\tIN_Q_OVERFLOW                        = 0x4000\n\tIN_UNMOUNT                           = 0x2000\n\tIOCTL_VM_SOCKETS_GET_LOCAL_CID       = 0x200007b9\n\tIPPROTO_AH                           = 0x33\n\tIPPROTO_BEETPH                       = 0x5e\n\tIPPROTO_COMP                         = 0x6c\n\tIPPROTO_DCCP                         = 0x21\n\tIPPROTO_DSTOPTS                      = 0x3c\n\tIPPROTO_EGP                          = 0x8\n\tIPPROTO_ENCAP                        = 0x62\n\tIPPROTO_ESP                          = 0x32\n\tIPPROTO_FRAGMENT                     = 0x2c\n\tIPPROTO_GRE                          = 0x2f\n\tIPPROTO_HOPOPTS                      = 0x0\n\tIPPROTO_ICMP                         = 0x1\n\tIPPROTO_ICMPV6                       = 0x3a\n\tIPPROTO_IDP                          = 0x16\n\tIPPROTO_IGMP                         = 0x2\n\tIPPROTO_IP                           = 0x0\n\tIPPROTO_IPIP                         = 0x4\n\tIPPROTO_IPV6                         = 0x29\n\tIPPROTO_MH                           = 0x87\n\tIPPROTO_MPLS                         = 0x89\n\tIPPROTO_MTP                          = 0x5c\n\tIPPROTO_NONE                         = 0x3b\n\tIPPROTO_PIM                          = 0x67\n\tIPPROTO_PUP                          = 0xc\n\tIPPROTO_RAW                          = 0xff\n\tIPPROTO_ROUTING                      = 0x2b\n\tIPPROTO_RSVP                         = 0x2e\n\tIPPROTO_SCTP                         = 0x84\n\tIPPROTO_TCP                          = 0x6\n\tIPPROTO_TP                           = 0x1d\n\tIPPROTO_UDP                          = 0x11\n\tIPPROTO_UDPLITE                      = 0x88\n\tIPV6_2292DSTOPTS                     = 0x4\n\tIPV6_2292HOPLIMIT                    = 0x8\n\tIPV6_2292HOPOPTS                     = 0x3\n\tIPV6_2292PKTINFO                     = 0x2\n\tIPV6_2292PKTOPTIONS                  = 0x6\n\tIPV6_2292RTHDR                       = 0x5\n\tIPV6_ADDRFORM                        = 0x1\n\tIPV6_ADDR_PREFERENCES                = 0x48\n\tIPV6_ADD_MEMBERSHIP                  = 0x14\n\tIPV6_AUTHHDR                         = 0xa\n\tIPV6_AUTOFLOWLABEL                   = 0x46\n\tIPV6_CHECKSUM                        = 0x7\n\tIPV6_DONTFRAG                        = 0x3e\n\tIPV6_DROP_MEMBERSHIP                 = 0x15\n\tIPV6_DSTOPTS                         = 0x3b\n\tIPV6_FREEBIND                        = 0x4e\n\tIPV6_HDRINCL                         = 0x24\n\tIPV6_HOPLIMIT                        = 0x34\n\tIPV6_HOPOPTS                         = 0x36\n\tIPV6_IPSEC_POLICY                    = 0x22\n\tIPV6_JOIN_ANYCAST                    = 0x1b\n\tIPV6_JOIN_GROUP                      = 0x14\n\tIPV6_LEAVE_ANYCAST                   = 0x1c\n\tIPV6_LEAVE_GROUP                     = 0x15\n\tIPV6_MINHOPCOUNT                     = 0x49\n\tIPV6_MTU                             = 0x18\n\tIPV6_MTU_DISCOVER                    = 0x17\n\tIPV6_MULTICAST_ALL                   = 0x1d\n\tIPV6_MULTICAST_HOPS                  = 0x12\n\tIPV6_MULTICAST_IF                    = 0x11\n\tIPV6_MULTICAST_LOOP                  = 0x13\n\tIPV6_NEXTHOP                         = 0x9\n\tIPV6_ORIGDSTADDR                     = 0x4a\n\tIPV6_PATHMTU                         = 0x3d\n\tIPV6_PKTINFO                         = 0x32\n\tIPV6_PMTUDISC_DO                     = 0x2\n\tIPV6_PMTUDISC_DONT                   = 0x0\n\tIPV6_PMTUDISC_INTERFACE              = 0x4\n\tIPV6_PMTUDISC_OMIT                   = 0x5\n\tIPV6_PMTUDISC_PROBE                  = 0x3\n\tIPV6_PMTUDISC_WANT                   = 0x1\n\tIPV6_RECVDSTOPTS                     = 0x3a\n\tIPV6_RECVERR                         = 0x19\n\tIPV6_RECVFRAGSIZE                    = 0x4d\n\tIPV6_RECVHOPLIMIT                    = 0x33\n\tIPV6_RECVHOPOPTS                     = 0x35\n\tIPV6_RECVORIGDSTADDR                 = 0x4a\n\tIPV6_RECVPATHMTU                     = 0x3c\n\tIPV6_RECVPKTINFO                     = 0x31\n\tIPV6_RECVRTHDR                       = 0x38\n\tIPV6_RECVTCLASS                      = 0x42\n\tIPV6_ROUTER_ALERT                    = 0x16\n\tIPV6_RTHDR                           = 0x39\n\tIPV6_RTHDRDSTOPTS                    = 0x37\n\tIPV6_RTHDR_LOOSE                     = 0x0\n\tIPV6_RTHDR_STRICT                    = 0x1\n\tIPV6_RTHDR_TYPE_0                    = 0x0\n\tIPV6_RXDSTOPTS                       = 0x3b\n\tIPV6_RXHOPOPTS                       = 0x36\n\tIPV6_TCLASS                          = 0x43\n\tIPV6_TRANSPARENT                     = 0x4b\n\tIPV6_UNICAST_HOPS                    = 0x10\n\tIPV6_UNICAST_IF                      = 0x4c\n\tIPV6_V6ONLY                          = 0x1a\n\tIPV6_XFRM_POLICY                     = 0x23\n\tIP_ADD_MEMBERSHIP                    = 0x23\n\tIP_ADD_SOURCE_MEMBERSHIP             = 0x27\n\tIP_BIND_ADDRESS_NO_PORT              = 0x18\n\tIP_BLOCK_SOURCE                      = 0x26\n\tIP_CHECKSUM                          = 0x17\n\tIP_DEFAULT_MULTICAST_LOOP            = 0x1\n\tIP_DEFAULT_MULTICAST_TTL             = 0x1\n\tIP_DF                                = 0x4000\n\tIP_DROP_MEMBERSHIP                   = 0x24\n\tIP_DROP_SOURCE_MEMBERSHIP            = 0x28\n\tIP_FREEBIND                          = 0xf\n\tIP_HDRINCL                           = 0x3\n\tIP_IPSEC_POLICY                      = 0x10\n\tIP_MAXPACKET                         = 0xffff\n\tIP_MAX_MEMBERSHIPS                   = 0x14\n\tIP_MF                                = 0x2000\n\tIP_MINTTL                            = 0x15\n\tIP_MSFILTER                          = 0x29\n\tIP_MSS                               = 0x240\n\tIP_MTU                               = 0xe\n\tIP_MTU_DISCOVER                      = 0xa\n\tIP_MULTICAST_ALL                     = 0x31\n\tIP_MULTICAST_IF                      = 0x20\n\tIP_MULTICAST_LOOP                    = 0x22\n\tIP_MULTICAST_TTL                     = 0x21\n\tIP_NODEFRAG                          = 0x16\n\tIP_OFFMASK                           = 0x1fff\n\tIP_OPTIONS                           = 0x4\n\tIP_ORIGDSTADDR                       = 0x14\n\tIP_PASSSEC                           = 0x12\n\tIP_PKTINFO                           = 0x8\n\tIP_PKTOPTIONS                        = 0x9\n\tIP_PMTUDISC                          = 0xa\n\tIP_PMTUDISC_DO                       = 0x2\n\tIP_PMTUDISC_DONT                     = 0x0\n\tIP_PMTUDISC_INTERFACE                = 0x4\n\tIP_PMTUDISC_OMIT                     = 0x5\n\tIP_PMTUDISC_PROBE                    = 0x3\n\tIP_PMTUDISC_WANT                     = 0x1\n\tIP_RECVERR                           = 0xb\n\tIP_RECVFRAGSIZE                      = 0x19\n\tIP_RECVOPTS                          = 0x6\n\tIP_RECVORIGDSTADDR                   = 0x14\n\tIP_RECVRETOPTS                       = 0x7\n\tIP_RECVTOS                           = 0xd\n\tIP_RECVTTL                           = 0xc\n\tIP_RETOPTS                           = 0x7\n\tIP_RF                                = 0x8000\n\tIP_ROUTER_ALERT                      = 0x5\n\tIP_TOS                               = 0x1\n\tIP_TRANSPARENT                       = 0x13\n\tIP_TTL                               = 0x2\n\tIP_UNBLOCK_SOURCE                    = 0x25\n\tIP_UNICAST_IF                        = 0x32\n\tIP_XFRM_POLICY                       = 0x11\n\tISIG                                 = 0x1\n\tISOFS_SUPER_MAGIC                    = 0x9660\n\tISTRIP                               = 0x20\n\tIUCLC                                = 0x200\n\tIUTF8                                = 0x4000\n\tIXANY                                = 0x800\n\tIXOFF                                = 0x1000\n\tIXON                                 = 0x400\n\tJFFS2_SUPER_MAGIC                    = 0x72b6\n\tKEXEC_ARCH_386                       = 0x30000\n\tKEXEC_ARCH_68K                       = 0x40000\n\tKEXEC_ARCH_AARCH64                   = 0xb70000\n\tKEXEC_ARCH_ARM                       = 0x280000\n\tKEXEC_ARCH_DEFAULT                   = 0x0\n\tKEXEC_ARCH_IA_64                     = 0x320000\n\tKEXEC_ARCH_MASK                      = 0xffff0000\n\tKEXEC_ARCH_MIPS                      = 0x80000\n\tKEXEC_ARCH_MIPS_LE                   = 0xa0000\n\tKEXEC_ARCH_PPC                       = 0x140000\n\tKEXEC_ARCH_PPC64                     = 0x150000\n\tKEXEC_ARCH_S390                      = 0x160000\n\tKEXEC_ARCH_SH                        = 0x2a0000\n\tKEXEC_ARCH_X86_64                    = 0x3e0000\n\tKEXEC_FILE_NO_INITRAMFS              = 0x4\n\tKEXEC_FILE_ON_CRASH                  = 0x2\n\tKEXEC_FILE_UNLOAD                    = 0x1\n\tKEXEC_ON_CRASH                       = 0x1\n\tKEXEC_PRESERVE_CONTEXT               = 0x2\n\tKEXEC_SEGMENT_MAX                    = 0x10\n\tKEYCTL_ASSUME_AUTHORITY              = 0x10\n\tKEYCTL_CHOWN                         = 0x4\n\tKEYCTL_CLEAR                         = 0x7\n\tKEYCTL_DESCRIBE                      = 0x6\n\tKEYCTL_DH_COMPUTE                    = 0x17\n\tKEYCTL_GET_KEYRING_ID                = 0x0\n\tKEYCTL_GET_PERSISTENT                = 0x16\n\tKEYCTL_GET_SECURITY                  = 0x11\n\tKEYCTL_INSTANTIATE                   = 0xc\n\tKEYCTL_INSTANTIATE_IOV               = 0x14\n\tKEYCTL_INVALIDATE                    = 0x15\n\tKEYCTL_JOIN_SESSION_KEYRING          = 0x1\n\tKEYCTL_LINK                          = 0x8\n\tKEYCTL_NEGATE                        = 0xd\n\tKEYCTL_PKEY_DECRYPT                  = 0x1a\n\tKEYCTL_PKEY_ENCRYPT                  = 0x19\n\tKEYCTL_PKEY_QUERY                    = 0x18\n\tKEYCTL_PKEY_SIGN                     = 0x1b\n\tKEYCTL_PKEY_VERIFY                   = 0x1c\n\tKEYCTL_READ                          = 0xb\n\tKEYCTL_REJECT                        = 0x13\n\tKEYCTL_RESTRICT_KEYRING              = 0x1d\n\tKEYCTL_REVOKE                        = 0x3\n\tKEYCTL_SEARCH                        = 0xa\n\tKEYCTL_SESSION_TO_PARENT             = 0x12\n\tKEYCTL_SETPERM                       = 0x5\n\tKEYCTL_SET_REQKEY_KEYRING            = 0xe\n\tKEYCTL_SET_TIMEOUT                   = 0xf\n\tKEYCTL_SUPPORTS_DECRYPT              = 0x2\n\tKEYCTL_SUPPORTS_ENCRYPT              = 0x1\n\tKEYCTL_SUPPORTS_SIGN                 = 0x4\n\tKEYCTL_SUPPORTS_VERIFY               = 0x8\n\tKEYCTL_UNLINK                        = 0x9\n\tKEYCTL_UPDATE                        = 0x2\n\tKEY_REQKEY_DEFL_DEFAULT              = 0x0\n\tKEY_REQKEY_DEFL_GROUP_KEYRING        = 0x6\n\tKEY_REQKEY_DEFL_NO_CHANGE            = -0x1\n\tKEY_REQKEY_DEFL_PROCESS_KEYRING      = 0x2\n\tKEY_REQKEY_DEFL_REQUESTOR_KEYRING    = 0x7\n\tKEY_REQKEY_DEFL_SESSION_KEYRING      = 0x3\n\tKEY_REQKEY_DEFL_THREAD_KEYRING       = 0x1\n\tKEY_REQKEY_DEFL_USER_KEYRING         = 0x4\n\tKEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5\n\tKEY_SPEC_GROUP_KEYRING               = -0x6\n\tKEY_SPEC_PROCESS_KEYRING             = -0x2\n\tKEY_SPEC_REQKEY_AUTH_KEY             = -0x7\n\tKEY_SPEC_REQUESTOR_KEYRING           = -0x8\n\tKEY_SPEC_SESSION_KEYRING             = -0x3\n\tKEY_SPEC_THREAD_KEYRING              = -0x1\n\tKEY_SPEC_USER_KEYRING                = -0x4\n\tKEY_SPEC_USER_SESSION_KEYRING        = -0x5\n\tLINUX_REBOOT_CMD_CAD_OFF             = 0x0\n\tLINUX_REBOOT_CMD_CAD_ON              = 0x89abcdef\n\tLINUX_REBOOT_CMD_HALT                = 0xcdef0123\n\tLINUX_REBOOT_CMD_KEXEC               = 0x45584543\n\tLINUX_REBOOT_CMD_POWER_OFF           = 0x4321fedc\n\tLINUX_REBOOT_CMD_RESTART             = 0x1234567\n\tLINUX_REBOOT_CMD_RESTART2            = 0xa1b2c3d4\n\tLINUX_REBOOT_CMD_SW_SUSPEND          = 0xd000fce2\n\tLINUX_REBOOT_MAGIC1                  = 0xfee1dead\n\tLINUX_REBOOT_MAGIC2                  = 0x28121969\n\tLOCK_EX                              = 0x2\n\tLOCK_NB                              = 0x4\n\tLOCK_SH                              = 0x1\n\tLOCK_UN                              = 0x8\n\tMADV_DODUMP                          = 0x11\n\tMADV_DOFORK                          = 0xb\n\tMADV_DONTDUMP                        = 0x10\n\tMADV_DONTFORK                        = 0xa\n\tMADV_DONTNEED                        = 0x4\n\tMADV_FREE                            = 0x8\n\tMADV_HUGEPAGE                        = 0xe\n\tMADV_HWPOISON                        = 0x64\n\tMADV_KEEPONFORK                      = 0x13\n\tMADV_MERGEABLE                       = 0xc\n\tMADV_NOHUGEPAGE                      = 0xf\n\tMADV_NORMAL                          = 0x0\n\tMADV_RANDOM                          = 0x1\n\tMADV_REMOVE                          = 0x9\n\tMADV_SEQUENTIAL                      = 0x2\n\tMADV_UNMERGEABLE                     = 0xd\n\tMADV_WILLNEED                        = 0x3\n\tMADV_WIPEONFORK                      = 0x12\n\tMAP_ANON                             = 0x20\n\tMAP_ANONYMOUS                        = 0x20\n\tMAP_DENYWRITE                        = 0x800\n\tMAP_EXECUTABLE                       = 0x1000\n\tMAP_FILE                             = 0x0\n\tMAP_FIXED                            = 0x10\n\tMAP_FIXED_NOREPLACE                  = 0x100000\n\tMAP_GROWSDOWN                        = 0x200\n\tMAP_HUGETLB                          = 0x40000\n\tMAP_HUGE_MASK                        = 0x3f\n\tMAP_HUGE_SHIFT                       = 0x1a\n\tMAP_LOCKED                           = 0x100\n\tMAP_NONBLOCK                         = 0x10000\n\tMAP_NORESERVE                        = 0x40\n\tMAP_POPULATE                         = 0x8000\n\tMAP_PRIVATE                          = 0x2\n\tMAP_RENAME                           = 0x20\n\tMAP_SHARED                           = 0x1\n\tMAP_SHARED_VALIDATE                  = 0x3\n\tMAP_STACK                            = 0x20000\n\tMAP_TYPE                             = 0xf\n\tMCAST_BLOCK_SOURCE                   = 0x2b\n\tMCAST_EXCLUDE                        = 0x0\n\tMCAST_INCLUDE                        = 0x1\n\tMCAST_JOIN_GROUP                     = 0x2a\n\tMCAST_JOIN_SOURCE_GROUP              = 0x2e\n\tMCAST_LEAVE_GROUP                    = 0x2d\n\tMCAST_LEAVE_SOURCE_GROUP             = 0x2f\n\tMCAST_MSFILTER                       = 0x30\n\tMCAST_UNBLOCK_SOURCE                 = 0x2c\n\tMCL_CURRENT                          = 0x2000\n\tMCL_FUTURE                           = 0x4000\n\tMCL_ONFAULT                          = 0x8000\n\tMFD_ALLOW_SEALING                    = 0x2\n\tMFD_CLOEXEC                          = 0x1\n\tMFD_HUGETLB                          = 0x4\n\tMFD_HUGE_16GB                        = -0x78000000\n\tMFD_HUGE_16MB                        = 0x60000000\n\tMFD_HUGE_1GB                         = 0x78000000\n\tMFD_HUGE_1MB                         = 0x50000000\n\tMFD_HUGE_256MB                       = 0x70000000\n\tMFD_HUGE_2GB                         = 0x7c000000\n\tMFD_HUGE_2MB                         = 0x54000000\n\tMFD_HUGE_32MB                        = 0x64000000\n\tMFD_HUGE_512KB                       = 0x4c000000\n\tMFD_HUGE_512MB                       = 0x74000000\n\tMFD_HUGE_64KB                        = 0x40000000\n\tMFD_HUGE_8MB                         = 0x5c000000\n\tMFD_HUGE_MASK                        = 0x3f\n\tMFD_HUGE_SHIFT                       = 0x1a\n\tMINIX2_SUPER_MAGIC                   = 0x2468\n\tMINIX2_SUPER_MAGIC2                  = 0x2478\n\tMINIX3_SUPER_MAGIC                   = 0x4d5a\n\tMINIX_SUPER_MAGIC                    = 0x137f\n\tMINIX_SUPER_MAGIC2                   = 0x138f\n\tMNT_DETACH                           = 0x2\n\tMNT_EXPIRE                           = 0x4\n\tMNT_FORCE                            = 0x1\n\tMODULE_INIT_IGNORE_MODVERSIONS       = 0x1\n\tMODULE_INIT_IGNORE_VERMAGIC          = 0x2\n\tMSDOS_SUPER_MAGIC                    = 0x4d44\n\tMSG_BATCH                            = 0x40000\n\tMSG_CMSG_CLOEXEC                     = 0x40000000\n\tMSG_CONFIRM                          = 0x800\n\tMSG_CTRUNC                           = 0x8\n\tMSG_DONTROUTE                        = 0x4\n\tMSG_DONTWAIT                         = 0x40\n\tMSG_EOR                              = 0x80\n\tMSG_ERRQUEUE                         = 0x2000\n\tMSG_FASTOPEN                         = 0x20000000\n\tMSG_FIN                              = 0x200\n\tMSG_MORE                             = 0x8000\n\tMSG_NOSIGNAL                         = 0x4000\n\tMSG_OOB                              = 0x1\n\tMSG_PEEK                             = 0x2\n\tMSG_PROXY                            = 0x10\n\tMSG_RST                              = 0x1000\n\tMSG_SYN                              = 0x400\n\tMSG_TRUNC                            = 0x20\n\tMSG_TRYHARD                          = 0x4\n\tMSG_WAITALL                          = 0x100\n\tMSG_WAITFORONE                       = 0x10000\n\tMSG_ZEROCOPY                         = 0x4000000\n\tMS_ACTIVE                            = 0x40000000\n\tMS_ASYNC                             = 0x1\n\tMS_BIND                              = 0x1000\n\tMS_BORN                              = 0x20000000\n\tMS_DIRSYNC                           = 0x80\n\tMS_INVALIDATE                        = 0x2\n\tMS_I_VERSION                         = 0x800000\n\tMS_KERNMOUNT                         = 0x400000\n\tMS_LAZYTIME                          = 0x2000000\n\tMS_MANDLOCK                          = 0x40\n\tMS_MGC_MSK                           = 0xffff0000\n\tMS_MGC_VAL                           = 0xc0ed0000\n\tMS_MOVE                              = 0x2000\n\tMS_NOATIME                           = 0x400\n\tMS_NODEV                             = 0x4\n\tMS_NODIRATIME                        = 0x800\n\tMS_NOEXEC                            = 0x8\n\tMS_NOREMOTELOCK                      = 0x8000000\n\tMS_NOSEC                             = 0x10000000\n\tMS_NOSUID                            = 0x2\n\tMS_NOUSER                            = -0x80000000\n\tMS_POSIXACL                          = 0x10000\n\tMS_PRIVATE                           = 0x40000\n\tMS_RDONLY                            = 0x1\n\tMS_REC                               = 0x4000\n\tMS_RELATIME                          = 0x200000\n\tMS_REMOUNT                           = 0x20\n\tMS_RMT_MASK                          = 0x2800051\n\tMS_SHARED                            = 0x100000\n\tMS_SILENT                            = 0x8000\n\tMS_SLAVE                             = 0x80000\n\tMS_STRICTATIME                       = 0x1000000\n\tMS_SUBMOUNT                          = 0x4000000\n\tMS_SYNC                              = 0x4\n\tMS_SYNCHRONOUS                       = 0x10\n\tMS_UNBINDABLE                        = 0x20000\n\tMS_VERBOSE                           = 0x8000\n\tMTD_INODE_FS_MAGIC                   = 0x11307854\n\tNAME_MAX                             = 0xff\n\tNCP_SUPER_MAGIC                      = 0x564c\n\tNETLINK_ADD_MEMBERSHIP               = 0x1\n\tNETLINK_AUDIT                        = 0x9\n\tNETLINK_BROADCAST_ERROR              = 0x4\n\tNETLINK_CAP_ACK                      = 0xa\n\tNETLINK_CONNECTOR                    = 0xb\n\tNETLINK_CRYPTO                       = 0x15\n\tNETLINK_DNRTMSG                      = 0xe\n\tNETLINK_DROP_MEMBERSHIP              = 0x2\n\tNETLINK_ECRYPTFS                     = 0x13\n\tNETLINK_EXT_ACK                      = 0xb\n\tNETLINK_FIB_LOOKUP                   = 0xa\n\tNETLINK_FIREWALL                     = 0x3\n\tNETLINK_GENERIC                      = 0x10\n\tNETLINK_GET_STRICT_CHK               = 0xc\n\tNETLINK_INET_DIAG                    = 0x4\n\tNETLINK_IP6_FW                       = 0xd\n\tNETLINK_ISCSI                        = 0x8\n\tNETLINK_KOBJECT_UEVENT               = 0xf\n\tNETLINK_LISTEN_ALL_NSID              = 0x8\n\tNETLINK_LIST_MEMBERSHIPS             = 0x9\n\tNETLINK_NETFILTER                    = 0xc\n\tNETLINK_NFLOG                        = 0x5\n\tNETLINK_NO_ENOBUFS                   = 0x5\n\tNETLINK_PKTINFO                      = 0x3\n\tNETLINK_RDMA                         = 0x14\n\tNETLINK_ROUTE                        = 0x0\n\tNETLINK_RX_RING                      = 0x6\n\tNETLINK_SCSITRANSPORT                = 0x12\n\tNETLINK_SELINUX                      = 0x7\n\tNETLINK_SMC                          = 0x16\n\tNETLINK_SOCK_DIAG                    = 0x4\n\tNETLINK_TX_RING                      = 0x7\n\tNETLINK_UNUSED                       = 0x1\n\tNETLINK_USERSOCK                     = 0x2\n\tNETLINK_XFRM                         = 0x6\n\tNETNSA_MAX                           = 0x5\n\tNETNSA_NSID_NOT_ASSIGNED             = -0x1\n\tNFNETLINK_V0                         = 0x0\n\tNFNLGRP_ACCT_QUOTA                   = 0x8\n\tNFNLGRP_CONNTRACK_DESTROY            = 0x3\n\tNFNLGRP_CONNTRACK_EXP_DESTROY        = 0x6\n\tNFNLGRP_CONNTRACK_EXP_NEW            = 0x4\n\tNFNLGRP_CONNTRACK_EXP_UPDATE         = 0x5\n\tNFNLGRP_CONNTRACK_NEW                = 0x1\n\tNFNLGRP_CONNTRACK_UPDATE             = 0x2\n\tNFNLGRP_MAX                          = 0x9\n\tNFNLGRP_NFTABLES                     = 0x7\n\tNFNLGRP_NFTRACE                      = 0x9\n\tNFNLGRP_NONE                         = 0x0\n\tNFNL_BATCH_MAX                       = 0x1\n\tNFNL_MSG_BATCH_BEGIN                 = 0x10\n\tNFNL_MSG_BATCH_END                   = 0x11\n\tNFNL_NFA_NEST                        = 0x8000\n\tNFNL_SUBSYS_ACCT                     = 0x7\n\tNFNL_SUBSYS_COUNT                    = 0xc\n\tNFNL_SUBSYS_CTHELPER                 = 0x9\n\tNFNL_SUBSYS_CTNETLINK                = 0x1\n\tNFNL_SUBSYS_CTNETLINK_EXP            = 0x2\n\tNFNL_SUBSYS_CTNETLINK_TIMEOUT        = 0x8\n\tNFNL_SUBSYS_IPSET                    = 0x6\n\tNFNL_SUBSYS_NFTABLES                 = 0xa\n\tNFNL_SUBSYS_NFT_COMPAT               = 0xb\n\tNFNL_SUBSYS_NONE                     = 0x0\n\tNFNL_SUBSYS_OSF                      = 0x5\n\tNFNL_SUBSYS_QUEUE                    = 0x3\n\tNFNL_SUBSYS_ULOG                     = 0x4\n\tNFS_SUPER_MAGIC                      = 0x6969\n\tNILFS_SUPER_MAGIC                    = 0x3434\n\tNL0                                  = 0x0\n\tNL1                                  = 0x100\n\tNLA_ALIGNTO                          = 0x4\n\tNLA_F_NESTED                         = 0x8000\n\tNLA_F_NET_BYTEORDER                  = 0x4000\n\tNLA_HDRLEN                           = 0x4\n\tNLDLY                                = 0x100\n\tNLMSG_ALIGNTO                        = 0x4\n\tNLMSG_DONE                           = 0x3\n\tNLMSG_ERROR                          = 0x2\n\tNLMSG_HDRLEN                         = 0x10\n\tNLMSG_MIN_TYPE                       = 0x10\n\tNLMSG_NOOP                           = 0x1\n\tNLMSG_OVERRUN                        = 0x4\n\tNLM_F_ACK                            = 0x4\n\tNLM_F_ACK_TLVS                       = 0x200\n\tNLM_F_APPEND                         = 0x800\n\tNLM_F_ATOMIC                         = 0x400\n\tNLM_F_CAPPED                         = 0x100\n\tNLM_F_CREATE                         = 0x400\n\tNLM_F_DUMP                           = 0x300\n\tNLM_F_DUMP_FILTERED                  = 0x20\n\tNLM_F_DUMP_INTR                      = 0x10\n\tNLM_F_ECHO                           = 0x8\n\tNLM_F_EXCL                           = 0x200\n\tNLM_F_MATCH                          = 0x200\n\tNLM_F_MULTI                          = 0x2\n\tNLM_F_NONREC                         = 0x100\n\tNLM_F_REPLACE                        = 0x100\n\tNLM_F_REQUEST                        = 0x1\n\tNLM_F_ROOT                           = 0x100\n\tNOFLSH                               = 0x80\n\tNSFS_MAGIC                           = 0x6e736673\n\tOCFS2_SUPER_MAGIC                    = 0x7461636f\n\tOCRNL                                = 0x8\n\tOFDEL                                = 0x80\n\tOFILL                                = 0x40\n\tOLCUC                                = 0x2\n\tONLCR                                = 0x4\n\tONLRET                               = 0x20\n\tONOCR                                = 0x10\n\tOPENPROM_SUPER_MAGIC                 = 0x9fa1\n\tOPOST                                = 0x1\n\tOVERLAYFS_SUPER_MAGIC                = 0x794c7630\n\tO_ACCMODE                            = 0x3\n\tO_APPEND                             = 0x8\n\tO_ASYNC                              = 0x40\n\tO_CLOEXEC                            = 0x400000\n\tO_CREAT                              = 0x200\n\tO_DIRECT                             = 0x100000\n\tO_DIRECTORY                          = 0x10000\n\tO_DSYNC                              = 0x2000\n\tO_EXCL                               = 0x800\n\tO_FSYNC                              = 0x802000\n\tO_LARGEFILE                          = 0x0\n\tO_NDELAY                             = 0x4004\n\tO_NOATIME                            = 0x200000\n\tO_NOCTTY                             = 0x8000\n\tO_NOFOLLOW                           = 0x20000\n\tO_NONBLOCK                           = 0x4000\n\tO_PATH                               = 0x1000000\n\tO_RDONLY                             = 0x0\n\tO_RDWR                               = 0x2\n\tO_RSYNC                              = 0x802000\n\tO_SYNC                               = 0x802000\n\tO_TMPFILE                            = 0x2010000\n\tO_TRUNC                              = 0x400\n\tO_WRONLY                             = 0x1\n\tPACKET_ADD_MEMBERSHIP                = 0x1\n\tPACKET_AUXDATA                       = 0x8\n\tPACKET_BROADCAST                     = 0x1\n\tPACKET_COPY_THRESH                   = 0x7\n\tPACKET_DROP_MEMBERSHIP               = 0x2\n\tPACKET_FANOUT                        = 0x12\n\tPACKET_FANOUT_CBPF                   = 0x6\n\tPACKET_FANOUT_CPU                    = 0x2\n\tPACKET_FANOUT_DATA                   = 0x16\n\tPACKET_FANOUT_EBPF                   = 0x7\n\tPACKET_FANOUT_FLAG_DEFRAG            = 0x8000\n\tPACKET_FANOUT_FLAG_ROLLOVER          = 0x1000\n\tPACKET_FANOUT_FLAG_UNIQUEID          = 0x2000\n\tPACKET_FANOUT_HASH                   = 0x0\n\tPACKET_FANOUT_LB                     = 0x1\n\tPACKET_FANOUT_QM                     = 0x5\n\tPACKET_FANOUT_RND                    = 0x4\n\tPACKET_FANOUT_ROLLOVER               = 0x3\n\tPACKET_FASTROUTE                     = 0x6\n\tPACKET_HDRLEN                        = 0xb\n\tPACKET_HOST                          = 0x0\n\tPACKET_IGNORE_OUTGOING               = 0x17\n\tPACKET_KERNEL                        = 0x7\n\tPACKET_LOOPBACK                      = 0x5\n\tPACKET_LOSS                          = 0xe\n\tPACKET_MR_ALLMULTI                   = 0x2\n\tPACKET_MR_MULTICAST                  = 0x0\n\tPACKET_MR_PROMISC                    = 0x1\n\tPACKET_MR_UNICAST                    = 0x3\n\tPACKET_MULTICAST                     = 0x2\n\tPACKET_ORIGDEV                       = 0x9\n\tPACKET_OTHERHOST                     = 0x3\n\tPACKET_OUTGOING                      = 0x4\n\tPACKET_QDISC_BYPASS                  = 0x14\n\tPACKET_RECV_OUTPUT                   = 0x3\n\tPACKET_RESERVE                       = 0xc\n\tPACKET_ROLLOVER_STATS                = 0x15\n\tPACKET_RX_RING                       = 0x5\n\tPACKET_STATISTICS                    = 0x6\n\tPACKET_TIMESTAMP                     = 0x11\n\tPACKET_TX_HAS_OFF                    = 0x13\n\tPACKET_TX_RING                       = 0xd\n\tPACKET_TX_TIMESTAMP                  = 0x10\n\tPACKET_USER                          = 0x6\n\tPACKET_VERSION                       = 0xa\n\tPACKET_VNET_HDR                      = 0xf\n\tPARENB                               = 0x100\n\tPARITY_CRC16_PR0                     = 0x2\n\tPARITY_CRC16_PR0_CCITT               = 0x4\n\tPARITY_CRC16_PR1                     = 0x3\n\tPARITY_CRC16_PR1_CCITT               = 0x5\n\tPARITY_CRC32_PR0_CCITT               = 0x6\n\tPARITY_CRC32_PR1_CCITT               = 0x7\n\tPARITY_DEFAULT                       = 0x0\n\tPARITY_NONE                          = 0x1\n\tPARMRK                               = 0x8\n\tPARODD                               = 0x200\n\tPENDIN                               = 0x4000\n\tPERF_EVENT_IOC_DISABLE               = 0x20002401\n\tPERF_EVENT_IOC_ENABLE                = 0x20002400\n\tPERF_EVENT_IOC_ID                    = 0x40082407\n\tPERF_EVENT_IOC_MODIFY_ATTRIBUTES     = 0x8008240b\n\tPERF_EVENT_IOC_PAUSE_OUTPUT          = 0x80042409\n\tPERF_EVENT_IOC_PERIOD                = 0x80082404\n\tPERF_EVENT_IOC_QUERY_BPF             = 0xc008240a\n\tPERF_EVENT_IOC_REFRESH               = 0x20002402\n\tPERF_EVENT_IOC_RESET                 = 0x20002403\n\tPERF_EVENT_IOC_SET_BPF               = 0x80042408\n\tPERF_EVENT_IOC_SET_FILTER            = 0x80082406\n\tPERF_EVENT_IOC_SET_OUTPUT            = 0x20002405\n\tPIPEFS_MAGIC                         = 0x50495045\n\tPPPIOCATTACH                         = 0x8004743d\n\tPPPIOCATTCHAN                        = 0x80047438\n\tPPPIOCCONNECT                        = 0x8004743a\n\tPPPIOCDETACH                         = 0x8004743c\n\tPPPIOCDISCONN                        = 0x20007439\n\tPPPIOCGASYNCMAP                      = 0x40047458\n\tPPPIOCGCHAN                          = 0x40047437\n\tPPPIOCGDEBUG                         = 0x40047441\n\tPPPIOCGFLAGS                         = 0x4004745a\n\tPPPIOCGIDLE                          = 0x4010743f\n\tPPPIOCGL2TPSTATS                     = 0x40487436\n\tPPPIOCGMRU                           = 0x40047453\n\tPPPIOCGNPMODE                        = 0xc008744c\n\tPPPIOCGRASYNCMAP                     = 0x40047455\n\tPPPIOCGUNIT                          = 0x40047456\n\tPPPIOCGXASYNCMAP                     = 0x40207450\n\tPPPIOCNEWUNIT                        = 0xc004743e\n\tPPPIOCSACTIVE                        = 0x80107446\n\tPPPIOCSASYNCMAP                      = 0x80047457\n\tPPPIOCSCOMPRESS                      = 0x8010744d\n\tPPPIOCSDEBUG                         = 0x80047440\n\tPPPIOCSFLAGS                         = 0x80047459\n\tPPPIOCSMAXCID                        = 0x80047451\n\tPPPIOCSMRRU                          = 0x8004743b\n\tPPPIOCSMRU                           = 0x80047452\n\tPPPIOCSNPMODE                        = 0x8008744b\n\tPPPIOCSPASS                          = 0x80107447\n\tPPPIOCSRASYNCMAP                     = 0x80047454\n\tPPPIOCSXASYNCMAP                     = 0x8020744f\n\tPPPIOCXFERUNIT                       = 0x2000744e\n\tPRIO_PGRP                            = 0x1\n\tPRIO_PROCESS                         = 0x0\n\tPRIO_USER                            = 0x2\n\tPROC_SUPER_MAGIC                     = 0x9fa0\n\tPROT_EXEC                            = 0x4\n\tPROT_GROWSDOWN                       = 0x1000000\n\tPROT_GROWSUP                         = 0x2000000\n\tPROT_NONE                            = 0x0\n\tPROT_READ                            = 0x1\n\tPROT_WRITE                           = 0x2\n\tPR_CAPBSET_DROP                      = 0x18\n\tPR_CAPBSET_READ                      = 0x17\n\tPR_CAP_AMBIENT                       = 0x2f\n\tPR_CAP_AMBIENT_CLEAR_ALL             = 0x4\n\tPR_CAP_AMBIENT_IS_SET                = 0x1\n\tPR_CAP_AMBIENT_LOWER                 = 0x3\n\tPR_CAP_AMBIENT_RAISE                 = 0x2\n\tPR_ENDIAN_BIG                        = 0x0\n\tPR_ENDIAN_LITTLE                     = 0x1\n\tPR_ENDIAN_PPC_LITTLE                 = 0x2\n\tPR_FPEMU_NOPRINT                     = 0x1\n\tPR_FPEMU_SIGFPE                      = 0x2\n\tPR_FP_EXC_ASYNC                      = 0x2\n\tPR_FP_EXC_DISABLED                   = 0x0\n\tPR_FP_EXC_DIV                        = 0x10000\n\tPR_FP_EXC_INV                        = 0x100000\n\tPR_FP_EXC_NONRECOV                   = 0x1\n\tPR_FP_EXC_OVF                        = 0x20000\n\tPR_FP_EXC_PRECISE                    = 0x3\n\tPR_FP_EXC_RES                        = 0x80000\n\tPR_FP_EXC_SW_ENABLE                  = 0x80\n\tPR_FP_EXC_UND                        = 0x40000\n\tPR_FP_MODE_FR                        = 0x1\n\tPR_FP_MODE_FRE                       = 0x2\n\tPR_GET_CHILD_SUBREAPER               = 0x25\n\tPR_GET_DUMPABLE                      = 0x3\n\tPR_GET_ENDIAN                        = 0x13\n\tPR_GET_FPEMU                         = 0x9\n\tPR_GET_FPEXC                         = 0xb\n\tPR_GET_FP_MODE                       = 0x2e\n\tPR_GET_KEEPCAPS                      = 0x7\n\tPR_GET_NAME                          = 0x10\n\tPR_GET_NO_NEW_PRIVS                  = 0x27\n\tPR_GET_PDEATHSIG                     = 0x2\n\tPR_GET_SECCOMP                       = 0x15\n\tPR_GET_SECUREBITS                    = 0x1b\n\tPR_GET_SPECULATION_CTRL              = 0x34\n\tPR_GET_THP_DISABLE                   = 0x2a\n\tPR_GET_TID_ADDRESS                   = 0x28\n\tPR_GET_TIMERSLACK                    = 0x1e\n\tPR_GET_TIMING                        = 0xd\n\tPR_GET_TSC                           = 0x19\n\tPR_GET_UNALIGN                       = 0x5\n\tPR_MCE_KILL                          = 0x21\n\tPR_MCE_KILL_CLEAR                    = 0x0\n\tPR_MCE_KILL_DEFAULT                  = 0x2\n\tPR_MCE_KILL_EARLY                    = 0x1\n\tPR_MCE_KILL_GET                      = 0x22\n\tPR_MCE_KILL_LATE                     = 0x0\n\tPR_MCE_KILL_SET                      = 0x1\n\tPR_MPX_DISABLE_MANAGEMENT            = 0x2c\n\tPR_MPX_ENABLE_MANAGEMENT             = 0x2b\n\tPR_PAC_APDAKEY                       = 0x4\n\tPR_PAC_APDBKEY                       = 0x8\n\tPR_PAC_APGAKEY                       = 0x10\n\tPR_PAC_APIAKEY                       = 0x1\n\tPR_PAC_APIBKEY                       = 0x2\n\tPR_PAC_RESET_KEYS                    = 0x36\n\tPR_SET_CHILD_SUBREAPER               = 0x24\n\tPR_SET_DUMPABLE                      = 0x4\n\tPR_SET_ENDIAN                        = 0x14\n\tPR_SET_FPEMU                         = 0xa\n\tPR_SET_FPEXC                         = 0xc\n\tPR_SET_FP_MODE                       = 0x2d\n\tPR_SET_KEEPCAPS                      = 0x8\n\tPR_SET_MM                            = 0x23\n\tPR_SET_MM_ARG_END                    = 0x9\n\tPR_SET_MM_ARG_START                  = 0x8\n\tPR_SET_MM_AUXV                       = 0xc\n\tPR_SET_MM_BRK                        = 0x7\n\tPR_SET_MM_END_CODE                   = 0x2\n\tPR_SET_MM_END_DATA                   = 0x4\n\tPR_SET_MM_ENV_END                    = 0xb\n\tPR_SET_MM_ENV_START                  = 0xa\n\tPR_SET_MM_EXE_FILE                   = 0xd\n\tPR_SET_MM_MAP                        = 0xe\n\tPR_SET_MM_MAP_SIZE                   = 0xf\n\tPR_SET_MM_START_BRK                  = 0x6\n\tPR_SET_MM_START_CODE                 = 0x1\n\tPR_SET_MM_START_DATA                 = 0x3\n\tPR_SET_MM_START_STACK                = 0x5\n\tPR_SET_NAME                          = 0xf\n\tPR_SET_NO_NEW_PRIVS                  = 0x26\n\tPR_SET_PDEATHSIG                     = 0x1\n\tPR_SET_PTRACER                       = 0x59616d61\n\tPR_SET_PTRACER_ANY                   = 0xffffffffffffffff\n\tPR_SET_SECCOMP                       = 0x16\n\tPR_SET_SECUREBITS                    = 0x1c\n\tPR_SET_SPECULATION_CTRL              = 0x35\n\tPR_SET_THP_DISABLE                   = 0x29\n\tPR_SET_TIMERSLACK                    = 0x1d\n\tPR_SET_TIMING                        = 0xe\n\tPR_SET_TSC                           = 0x1a\n\tPR_SET_UNALIGN                       = 0x6\n\tPR_SPEC_DISABLE                      = 0x4\n\tPR_SPEC_DISABLE_NOEXEC               = 0x10\n\tPR_SPEC_ENABLE                       = 0x2\n\tPR_SPEC_FORCE_DISABLE                = 0x8\n\tPR_SPEC_INDIRECT_BRANCH              = 0x1\n\tPR_SPEC_NOT_AFFECTED                 = 0x0\n\tPR_SPEC_PRCTL                        = 0x1\n\tPR_SPEC_STORE_BYPASS                 = 0x0\n\tPR_SVE_GET_VL                        = 0x33\n\tPR_SVE_SET_VL                        = 0x32\n\tPR_SVE_SET_VL_ONEXEC                 = 0x40000\n\tPR_SVE_VL_INHERIT                    = 0x20000\n\tPR_SVE_VL_LEN_MASK                   = 0xffff\n\tPR_TASK_PERF_EVENTS_DISABLE          = 0x1f\n\tPR_TASK_PERF_EVENTS_ENABLE           = 0x20\n\tPR_TIMING_STATISTICAL                = 0x0\n\tPR_TIMING_TIMESTAMP                  = 0x1\n\tPR_TSC_ENABLE                        = 0x1\n\tPR_TSC_SIGSEGV                       = 0x2\n\tPR_UNALIGN_NOPRINT                   = 0x1\n\tPR_UNALIGN_SIGBUS                    = 0x2\n\tPSTOREFS_MAGIC                       = 0x6165676c\n\tPTRACE_ATTACH                        = 0x10\n\tPTRACE_CONT                          = 0x7\n\tPTRACE_DETACH                        = 0x11\n\tPTRACE_EVENT_CLONE                   = 0x3\n\tPTRACE_EVENT_EXEC                    = 0x4\n\tPTRACE_EVENT_EXIT                    = 0x6\n\tPTRACE_EVENT_FORK                    = 0x1\n\tPTRACE_EVENT_SECCOMP                 = 0x7\n\tPTRACE_EVENT_STOP                    = 0x80\n\tPTRACE_EVENT_VFORK                   = 0x2\n\tPTRACE_EVENT_VFORK_DONE              = 0x5\n\tPTRACE_GETEVENTMSG                   = 0x4201\n\tPTRACE_GETFPAREGS                    = 0x14\n\tPTRACE_GETFPREGS                     = 0xe\n\tPTRACE_GETFPREGS64                   = 0x19\n\tPTRACE_GETREGS                       = 0xc\n\tPTRACE_GETREGS64                     = 0x16\n\tPTRACE_GETREGSET                     = 0x4204\n\tPTRACE_GETSIGINFO                    = 0x4202\n\tPTRACE_GETSIGMASK                    = 0x420a\n\tPTRACE_INTERRUPT                     = 0x4207\n\tPTRACE_KILL                          = 0x8\n\tPTRACE_LISTEN                        = 0x4208\n\tPTRACE_O_EXITKILL                    = 0x100000\n\tPTRACE_O_MASK                        = 0x3000ff\n\tPTRACE_O_SUSPEND_SECCOMP             = 0x200000\n\tPTRACE_O_TRACECLONE                  = 0x8\n\tPTRACE_O_TRACEEXEC                   = 0x10\n\tPTRACE_O_TRACEEXIT                   = 0x40\n\tPTRACE_O_TRACEFORK                   = 0x2\n\tPTRACE_O_TRACESECCOMP                = 0x80\n\tPTRACE_O_TRACESYSGOOD                = 0x1\n\tPTRACE_O_TRACEVFORK                  = 0x4\n\tPTRACE_O_TRACEVFORKDONE              = 0x20\n\tPTRACE_PEEKDATA                      = 0x2\n\tPTRACE_PEEKSIGINFO                   = 0x4209\n\tPTRACE_PEEKSIGINFO_SHARED            = 0x1\n\tPTRACE_PEEKTEXT                      = 0x1\n\tPTRACE_PEEKUSR                       = 0x3\n\tPTRACE_POKEDATA                      = 0x5\n\tPTRACE_POKETEXT                      = 0x4\n\tPTRACE_POKEUSR                       = 0x6\n\tPTRACE_READDATA                      = 0x10\n\tPTRACE_READTEXT                      = 0x12\n\tPTRACE_SECCOMP_GET_FILTER            = 0x420c\n\tPTRACE_SECCOMP_GET_METADATA          = 0x420d\n\tPTRACE_SEIZE                         = 0x4206\n\tPTRACE_SETFPAREGS                    = 0x15\n\tPTRACE_SETFPREGS                     = 0xf\n\tPTRACE_SETFPREGS64                   = 0x1a\n\tPTRACE_SETOPTIONS                    = 0x4200\n\tPTRACE_SETREGS                       = 0xd\n\tPTRACE_SETREGS64                     = 0x17\n\tPTRACE_SETREGSET                     = 0x4205\n\tPTRACE_SETSIGINFO                    = 0x4203\n\tPTRACE_SETSIGMASK                    = 0x420b\n\tPTRACE_SINGLESTEP                    = 0x9\n\tPTRACE_SPARC_DETACH                  = 0xb\n\tPTRACE_SYSCALL                       = 0x18\n\tPTRACE_TRACEME                       = 0x0\n\tPTRACE_WRITEDATA                     = 0x11\n\tPTRACE_WRITETEXT                     = 0x13\n\tPT_FP                                = 0x48\n\tPT_G0                                = 0x10\n\tPT_G1                                = 0x14\n\tPT_G2                                = 0x18\n\tPT_G3                                = 0x1c\n\tPT_G4                                = 0x20\n\tPT_G5                                = 0x24\n\tPT_G6                                = 0x28\n\tPT_G7                                = 0x2c\n\tPT_I0                                = 0x30\n\tPT_I1                                = 0x34\n\tPT_I2                                = 0x38\n\tPT_I3                                = 0x3c\n\tPT_I4                                = 0x40\n\tPT_I5                                = 0x44\n\tPT_I6                                = 0x48\n\tPT_I7                                = 0x4c\n\tPT_NPC                               = 0x8\n\tPT_PC                                = 0x4\n\tPT_PSR                               = 0x0\n\tPT_REGS_MAGIC                        = 0x57ac6c00\n\tPT_TNPC                              = 0x90\n\tPT_TPC                               = 0x88\n\tPT_TSTATE                            = 0x80\n\tPT_V9_FP                             = 0x70\n\tPT_V9_G0                             = 0x0\n\tPT_V9_G1                             = 0x8\n\tPT_V9_G2                             = 0x10\n\tPT_V9_G3                             = 0x18\n\tPT_V9_G4                             = 0x20\n\tPT_V9_G5                             = 0x28\n\tPT_V9_G6                             = 0x30\n\tPT_V9_G7                             = 0x38\n\tPT_V9_I0                             = 0x40\n\tPT_V9_I1                             = 0x48\n\tPT_V9_I2                             = 0x50\n\tPT_V9_I3                             = 0x58\n\tPT_V9_I4                             = 0x60\n\tPT_V9_I5                             = 0x68\n\tPT_V9_I6                             = 0x70\n\tPT_V9_I7                             = 0x78\n\tPT_V9_MAGIC                          = 0x9c\n\tPT_V9_TNPC                           = 0x90\n\tPT_V9_TPC                            = 0x88\n\tPT_V9_TSTATE                         = 0x80\n\tPT_V9_Y                              = 0x98\n\tPT_WIM                               = 0x10\n\tPT_Y                                 = 0xc\n\tQNX4_SUPER_MAGIC                     = 0x2f\n\tQNX6_SUPER_MAGIC                     = 0x68191122\n\tRAMFS_MAGIC                          = 0x858458f6\n\tRDTGROUP_SUPER_MAGIC                 = 0x7655821\n\tREISERFS_SUPER_MAGIC                 = 0x52654973\n\tRENAME_EXCHANGE                      = 0x2\n\tRENAME_NOREPLACE                     = 0x1\n\tRENAME_WHITEOUT                      = 0x4\n\tRLIMIT_AS                            = 0x9\n\tRLIMIT_CORE                          = 0x4\n\tRLIMIT_CPU                           = 0x0\n\tRLIMIT_DATA                          = 0x2\n\tRLIMIT_FSIZE                         = 0x1\n\tRLIMIT_LOCKS                         = 0xa\n\tRLIMIT_MEMLOCK                       = 0x8\n\tRLIMIT_MSGQUEUE                      = 0xc\n\tRLIMIT_NICE                          = 0xd\n\tRLIMIT_NOFILE                        = 0x6\n\tRLIMIT_NPROC                         = 0x7\n\tRLIMIT_RSS                           = 0x5\n\tRLIMIT_RTPRIO                        = 0xe\n\tRLIMIT_RTTIME                        = 0xf\n\tRLIMIT_SIGPENDING                    = 0xb\n\tRLIMIT_STACK                         = 0x3\n\tRLIM_INFINITY                        = 0xffffffffffffffff\n\tRNDADDENTROPY                        = 0x80085203\n\tRNDADDTOENTCNT                       = 0x80045201\n\tRNDCLEARPOOL                         = 0x20005206\n\tRNDGETENTCNT                         = 0x40045200\n\tRNDGETPOOL                           = 0x40085202\n\tRNDRESEEDCRNG                        = 0x20005207\n\tRNDZAPENTCNT                         = 0x20005204\n\tRTAX_ADVMSS                          = 0x8\n\tRTAX_CC_ALGO                         = 0x10\n\tRTAX_CWND                            = 0x7\n\tRTAX_FASTOPEN_NO_COOKIE              = 0x11\n\tRTAX_FEATURES                        = 0xc\n\tRTAX_FEATURE_ALLFRAG                 = 0x8\n\tRTAX_FEATURE_ECN                     = 0x1\n\tRTAX_FEATURE_MASK                    = 0xf\n\tRTAX_FEATURE_SACK                    = 0x2\n\tRTAX_FEATURE_TIMESTAMP               = 0x4\n\tRTAX_HOPLIMIT                        = 0xa\n\tRTAX_INITCWND                        = 0xb\n\tRTAX_INITRWND                        = 0xe\n\tRTAX_LOCK                            = 0x1\n\tRTAX_MAX                             = 0x11\n\tRTAX_MTU                             = 0x2\n\tRTAX_QUICKACK                        = 0xf\n\tRTAX_REORDERING                      = 0x9\n\tRTAX_RTO_MIN                         = 0xd\n\tRTAX_RTT                             = 0x4\n\tRTAX_RTTVAR                          = 0x5\n\tRTAX_SSTHRESH                        = 0x6\n\tRTAX_UNSPEC                          = 0x0\n\tRTAX_WINDOW                          = 0x3\n\tRTA_ALIGNTO                          = 0x4\n\tRTA_MAX                              = 0x1d\n\tRTCF_DIRECTSRC                       = 0x4000000\n\tRTCF_DOREDIRECT                      = 0x1000000\n\tRTCF_LOG                             = 0x2000000\n\tRTCF_MASQ                            = 0x400000\n\tRTCF_NAT                             = 0x800000\n\tRTCF_VALVE                           = 0x200000\n\tRTC_AF                               = 0x20\n\tRTC_AIE_OFF                          = 0x20007002\n\tRTC_AIE_ON                           = 0x20007001\n\tRTC_ALM_READ                         = 0x40247008\n\tRTC_ALM_SET                          = 0x80247007\n\tRTC_EPOCH_READ                       = 0x4008700d\n\tRTC_EPOCH_SET                        = 0x8008700e\n\tRTC_IRQF                             = 0x80\n\tRTC_IRQP_READ                        = 0x4008700b\n\tRTC_IRQP_SET                         = 0x8008700c\n\tRTC_MAX_FREQ                         = 0x2000\n\tRTC_PF                               = 0x40\n\tRTC_PIE_OFF                          = 0x20007006\n\tRTC_PIE_ON                           = 0x20007005\n\tRTC_PLL_GET                          = 0x40207011\n\tRTC_PLL_SET                          = 0x80207012\n\tRTC_RD_TIME                          = 0x40247009\n\tRTC_SET_TIME                         = 0x8024700a\n\tRTC_UF                               = 0x10\n\tRTC_UIE_OFF                          = 0x20007004\n\tRTC_UIE_ON                           = 0x20007003\n\tRTC_VL_CLR                           = 0x20007014\n\tRTC_VL_READ                          = 0x40047013\n\tRTC_WIE_OFF                          = 0x20007010\n\tRTC_WIE_ON                           = 0x2000700f\n\tRTC_WKALM_RD                         = 0x40287010\n\tRTC_WKALM_SET                        = 0x8028700f\n\tRTF_ADDRCLASSMASK                    = 0xf8000000\n\tRTF_ADDRCONF                         = 0x40000\n\tRTF_ALLONLINK                        = 0x20000\n\tRTF_BROADCAST                        = 0x10000000\n\tRTF_CACHE                            = 0x1000000\n\tRTF_DEFAULT                          = 0x10000\n\tRTF_DYNAMIC                          = 0x10\n\tRTF_FLOW                             = 0x2000000\n\tRTF_GATEWAY                          = 0x2\n\tRTF_HOST                             = 0x4\n\tRTF_INTERFACE                        = 0x40000000\n\tRTF_IRTT                             = 0x100\n\tRTF_LINKRT                           = 0x100000\n\tRTF_LOCAL                            = 0x80000000\n\tRTF_MODIFIED                         = 0x20\n\tRTF_MSS                              = 0x40\n\tRTF_MTU                              = 0x40\n\tRTF_MULTICAST                        = 0x20000000\n\tRTF_NAT                              = 0x8000000\n\tRTF_NOFORWARD                        = 0x1000\n\tRTF_NONEXTHOP                        = 0x200000\n\tRTF_NOPMTUDISC                       = 0x4000\n\tRTF_POLICY                           = 0x4000000\n\tRTF_REINSTATE                        = 0x8\n\tRTF_REJECT                           = 0x200\n\tRTF_STATIC                           = 0x400\n\tRTF_THROW                            = 0x2000\n\tRTF_UP                               = 0x1\n\tRTF_WINDOW                           = 0x80\n\tRTF_XRESOLVE                         = 0x800\n\tRTM_BASE                             = 0x10\n\tRTM_DELACTION                        = 0x31\n\tRTM_DELADDR                          = 0x15\n\tRTM_DELADDRLABEL                     = 0x49\n\tRTM_DELCHAIN                         = 0x65\n\tRTM_DELLINK                          = 0x11\n\tRTM_DELMDB                           = 0x55\n\tRTM_DELNEIGH                         = 0x1d\n\tRTM_DELNETCONF                       = 0x51\n\tRTM_DELNSID                          = 0x59\n\tRTM_DELQDISC                         = 0x25\n\tRTM_DELROUTE                         = 0x19\n\tRTM_DELRULE                          = 0x21\n\tRTM_DELTCLASS                        = 0x29\n\tRTM_DELTFILTER                       = 0x2d\n\tRTM_F_CLONED                         = 0x200\n\tRTM_F_EQUALIZE                       = 0x400\n\tRTM_F_FIB_MATCH                      = 0x2000\n\tRTM_F_LOOKUP_TABLE                   = 0x1000\n\tRTM_F_NOTIFY                         = 0x100\n\tRTM_F_PREFIX                         = 0x800\n\tRTM_GETACTION                        = 0x32\n\tRTM_GETADDR                          = 0x16\n\tRTM_GETADDRLABEL                     = 0x4a\n\tRTM_GETANYCAST                       = 0x3e\n\tRTM_GETCHAIN                         = 0x66\n\tRTM_GETDCB                           = 0x4e\n\tRTM_GETLINK                          = 0x12\n\tRTM_GETMDB                           = 0x56\n\tRTM_GETMULTICAST                     = 0x3a\n\tRTM_GETNEIGH                         = 0x1e\n\tRTM_GETNEIGHTBL                      = 0x42\n\tRTM_GETNETCONF                       = 0x52\n\tRTM_GETNSID                          = 0x5a\n\tRTM_GETQDISC                         = 0x26\n\tRTM_GETROUTE                         = 0x1a\n\tRTM_GETRULE                          = 0x22\n\tRTM_GETSTATS                         = 0x5e\n\tRTM_GETTCLASS                        = 0x2a\n\tRTM_GETTFILTER                       = 0x2e\n\tRTM_MAX                              = 0x67\n\tRTM_NEWACTION                        = 0x30\n\tRTM_NEWADDR                          = 0x14\n\tRTM_NEWADDRLABEL                     = 0x48\n\tRTM_NEWCACHEREPORT                   = 0x60\n\tRTM_NEWCHAIN                         = 0x64\n\tRTM_NEWLINK                          = 0x10\n\tRTM_NEWMDB                           = 0x54\n\tRTM_NEWNDUSEROPT                     = 0x44\n\tRTM_NEWNEIGH                         = 0x1c\n\tRTM_NEWNEIGHTBL                      = 0x40\n\tRTM_NEWNETCONF                       = 0x50\n\tRTM_NEWNSID                          = 0x58\n\tRTM_NEWPREFIX                        = 0x34\n\tRTM_NEWQDISC                         = 0x24\n\tRTM_NEWROUTE                         = 0x18\n\tRTM_NEWRULE                          = 0x20\n\tRTM_NEWSTATS                         = 0x5c\n\tRTM_NEWTCLASS                        = 0x28\n\tRTM_NEWTFILTER                       = 0x2c\n\tRTM_NR_FAMILIES                      = 0x16\n\tRTM_NR_MSGTYPES                      = 0x58\n\tRTM_SETDCB                           = 0x4f\n\tRTM_SETLINK                          = 0x13\n\tRTM_SETNEIGHTBL                      = 0x43\n\tRTNH_ALIGNTO                         = 0x4\n\tRTNH_COMPARE_MASK                    = 0x19\n\tRTNH_F_DEAD                          = 0x1\n\tRTNH_F_LINKDOWN                      = 0x10\n\tRTNH_F_OFFLOAD                       = 0x8\n\tRTNH_F_ONLINK                        = 0x4\n\tRTNH_F_PERVASIVE                     = 0x2\n\tRTNH_F_UNRESOLVED                    = 0x20\n\tRTN_MAX                              = 0xb\n\tRTPROT_BABEL                         = 0x2a\n\tRTPROT_BGP                           = 0xba\n\tRTPROT_BIRD                          = 0xc\n\tRTPROT_BOOT                          = 0x3\n\tRTPROT_DHCP                          = 0x10\n\tRTPROT_DNROUTED                      = 0xd\n\tRTPROT_EIGRP                         = 0xc0\n\tRTPROT_GATED                         = 0x8\n\tRTPROT_ISIS                          = 0xbb\n\tRTPROT_KERNEL                        = 0x2\n\tRTPROT_MROUTED                       = 0x11\n\tRTPROT_MRT                           = 0xa\n\tRTPROT_NTK                           = 0xf\n\tRTPROT_OSPF                          = 0xbc\n\tRTPROT_RA                            = 0x9\n\tRTPROT_REDIRECT                      = 0x1\n\tRTPROT_RIP                           = 0xbd\n\tRTPROT_STATIC                        = 0x4\n\tRTPROT_UNSPEC                        = 0x0\n\tRTPROT_XORP                          = 0xe\n\tRTPROT_ZEBRA                         = 0xb\n\tRT_CLASS_DEFAULT                     = 0xfd\n\tRT_CLASS_LOCAL                       = 0xff\n\tRT_CLASS_MAIN                        = 0xfe\n\tRT_CLASS_MAX                         = 0xff\n\tRT_CLASS_UNSPEC                      = 0x0\n\tRUSAGE_CHILDREN                      = -0x1\n\tRUSAGE_SELF                          = 0x0\n\tRUSAGE_THREAD                        = 0x1\n\tSCM_CREDENTIALS                      = 0x2\n\tSCM_RIGHTS                           = 0x1\n\tSCM_TIMESTAMP                        = 0x1d\n\tSCM_TIMESTAMPING                     = 0x23\n\tSCM_TIMESTAMPING_OPT_STATS           = 0x38\n\tSCM_TIMESTAMPING_PKTINFO             = 0x3c\n\tSCM_TIMESTAMPNS                      = 0x21\n\tSCM_TXTIME                           = 0x3f\n\tSCM_WIFI_STATUS                      = 0x25\n\tSC_LOG_FLUSH                         = 0x100000\n\tSECCOMP_MODE_DISABLED                = 0x0\n\tSECCOMP_MODE_FILTER                  = 0x2\n\tSECCOMP_MODE_STRICT                  = 0x1\n\tSECURITYFS_MAGIC                     = 0x73636673\n\tSELINUX_MAGIC                        = 0xf97cff8c\n\tSFD_CLOEXEC                          = 0x400000\n\tSFD_NONBLOCK                         = 0x4000\n\tSHUT_RD                              = 0x0\n\tSHUT_RDWR                            = 0x2\n\tSHUT_WR                              = 0x1\n\tSIOCADDDLCI                          = 0x8980\n\tSIOCADDMULTI                         = 0x8931\n\tSIOCADDRT                            = 0x890b\n\tSIOCATMARK                           = 0x8905\n\tSIOCBONDCHANGEACTIVE                 = 0x8995\n\tSIOCBONDENSLAVE                      = 0x8990\n\tSIOCBONDINFOQUERY                    = 0x8994\n\tSIOCBONDRELEASE                      = 0x8991\n\tSIOCBONDSETHWADDR                    = 0x8992\n\tSIOCBONDSLAVEINFOQUERY               = 0x8993\n\tSIOCBRADDBR                          = 0x89a0\n\tSIOCBRADDIF                          = 0x89a2\n\tSIOCBRDELBR                          = 0x89a1\n\tSIOCBRDELIF                          = 0x89a3\n\tSIOCDARP                             = 0x8953\n\tSIOCDELDLCI                          = 0x8981\n\tSIOCDELMULTI                         = 0x8932\n\tSIOCDELRT                            = 0x890c\n\tSIOCDEVPRIVATE                       = 0x89f0\n\tSIOCDIFADDR                          = 0x8936\n\tSIOCDRARP                            = 0x8960\n\tSIOCETHTOOL                          = 0x8946\n\tSIOCGARP                             = 0x8954\n\tSIOCGHWTSTAMP                        = 0x89b1\n\tSIOCGIFADDR                          = 0x8915\n\tSIOCGIFBR                            = 0x8940\n\tSIOCGIFBRDADDR                       = 0x8919\n\tSIOCGIFCONF                          = 0x8912\n\tSIOCGIFCOUNT                         = 0x8938\n\tSIOCGIFDSTADDR                       = 0x8917\n\tSIOCGIFENCAP                         = 0x8925\n\tSIOCGIFFLAGS                         = 0x8913\n\tSIOCGIFHWADDR                        = 0x8927\n\tSIOCGIFINDEX                         = 0x8933\n\tSIOCGIFMAP                           = 0x8970\n\tSIOCGIFMEM                           = 0x891f\n\tSIOCGIFMETRIC                        = 0x891d\n\tSIOCGIFMTU                           = 0x8921\n\tSIOCGIFNAME                          = 0x8910\n\tSIOCGIFNETMASK                       = 0x891b\n\tSIOCGIFPFLAGS                        = 0x8935\n\tSIOCGIFSLAVE                         = 0x8929\n\tSIOCGIFTXQLEN                        = 0x8942\n\tSIOCGIFVLAN                          = 0x8982\n\tSIOCGMIIPHY                          = 0x8947\n\tSIOCGMIIREG                          = 0x8948\n\tSIOCGPGRP                            = 0x8904\n\tSIOCGPPPCSTATS                       = 0x89f2\n\tSIOCGPPPSTATS                        = 0x89f0\n\tSIOCGPPPVER                          = 0x89f1\n\tSIOCGRARP                            = 0x8961\n\tSIOCGSKNS                            = 0x894c\n\tSIOCGSTAMP                           = 0x8906\n\tSIOCGSTAMPNS                         = 0x8907\n\tSIOCINQ                              = 0x4004667f\n\tSIOCOUTQ                             = 0x40047473\n\tSIOCOUTQNSD                          = 0x894b\n\tSIOCPROTOPRIVATE                     = 0x89e0\n\tSIOCRTMSG                            = 0x890d\n\tSIOCSARP                             = 0x8955\n\tSIOCSHWTSTAMP                        = 0x89b0\n\tSIOCSIFADDR                          = 0x8916\n\tSIOCSIFBR                            = 0x8941\n\tSIOCSIFBRDADDR                       = 0x891a\n\tSIOCSIFDSTADDR                       = 0x8918\n\tSIOCSIFENCAP                         = 0x8926\n\tSIOCSIFFLAGS                         = 0x8914\n\tSIOCSIFHWADDR                        = 0x8924\n\tSIOCSIFHWBROADCAST                   = 0x8937\n\tSIOCSIFLINK                          = 0x8911\n\tSIOCSIFMAP                           = 0x8971\n\tSIOCSIFMEM                           = 0x8920\n\tSIOCSIFMETRIC                        = 0x891e\n\tSIOCSIFMTU                           = 0x8922\n\tSIOCSIFNAME                          = 0x8923\n\tSIOCSIFNETMASK                       = 0x891c\n\tSIOCSIFPFLAGS                        = 0x8934\n\tSIOCSIFSLAVE                         = 0x8930\n\tSIOCSIFTXQLEN                        = 0x8943\n\tSIOCSIFVLAN                          = 0x8983\n\tSIOCSMIIREG                          = 0x8949\n\tSIOCSPGRP                            = 0x8902\n\tSIOCSRARP                            = 0x8962\n\tSIOCWANDEV                           = 0x894a\n\tSMACK_MAGIC                          = 0x43415d53\n\tSMART_AUTOSAVE                       = 0xd2\n\tSMART_AUTO_OFFLINE                   = 0xdb\n\tSMART_DISABLE                        = 0xd9\n\tSMART_ENABLE                         = 0xd8\n\tSMART_HCYL_PASS                      = 0xc2\n\tSMART_IMMEDIATE_OFFLINE              = 0xd4\n\tSMART_LCYL_PASS                      = 0x4f\n\tSMART_READ_LOG_SECTOR                = 0xd5\n\tSMART_READ_THRESHOLDS                = 0xd1\n\tSMART_READ_VALUES                    = 0xd0\n\tSMART_SAVE                           = 0xd3\n\tSMART_STATUS                         = 0xda\n\tSMART_WRITE_LOG_SECTOR               = 0xd6\n\tSMART_WRITE_THRESHOLDS               = 0xd7\n\tSMB_SUPER_MAGIC                      = 0x517b\n\tSOCKFS_MAGIC                         = 0x534f434b\n\tSOCK_CLOEXEC                         = 0x400000\n\tSOCK_DCCP                            = 0x6\n\tSOCK_DGRAM                           = 0x2\n\tSOCK_IOC_TYPE                        = 0x89\n\tSOCK_NONBLOCK                        = 0x4000\n\tSOCK_PACKET                          = 0xa\n\tSOCK_RAW                             = 0x3\n\tSOCK_RDM                             = 0x4\n\tSOCK_SEQPACKET                       = 0x5\n\tSOCK_STREAM                          = 0x1\n\tSOL_AAL                              = 0x109\n\tSOL_ALG                              = 0x117\n\tSOL_ATM                              = 0x108\n\tSOL_CAIF                             = 0x116\n\tSOL_CAN_BASE                         = 0x64\n\tSOL_DCCP                             = 0x10d\n\tSOL_DECNET                           = 0x105\n\tSOL_ICMPV6                           = 0x3a\n\tSOL_IP                               = 0x0\n\tSOL_IPV6                             = 0x29\n\tSOL_IRDA                             = 0x10a\n\tSOL_IUCV                             = 0x115\n\tSOL_KCM                              = 0x119\n\tSOL_LLC                              = 0x10c\n\tSOL_NETBEUI                          = 0x10b\n\tSOL_NETLINK                          = 0x10e\n\tSOL_NFC                              = 0x118\n\tSOL_PACKET                           = 0x107\n\tSOL_PNPIPE                           = 0x113\n\tSOL_PPPOL2TP                         = 0x111\n\tSOL_RAW                              = 0xff\n\tSOL_RDS                              = 0x114\n\tSOL_RXRPC                            = 0x110\n\tSOL_SOCKET                           = 0xffff\n\tSOL_TCP                              = 0x6\n\tSOL_TIPC                             = 0x10f\n\tSOL_TLS                              = 0x11a\n\tSOL_X25                              = 0x106\n\tSOL_XDP                              = 0x11b\n\tSOMAXCONN                            = 0x80\n\tSO_ACCEPTCONN                        = 0x8000\n\tSO_ATTACH_BPF                        = 0x34\n\tSO_ATTACH_FILTER                     = 0x1a\n\tSO_ATTACH_REUSEPORT_CBPF             = 0x35\n\tSO_ATTACH_REUSEPORT_EBPF             = 0x36\n\tSO_BINDTODEVICE                      = 0xd\n\tSO_BINDTOIFINDEX                     = 0x41\n\tSO_BPF_EXTENSIONS                    = 0x32\n\tSO_BROADCAST                         = 0x20\n\tSO_BSDCOMPAT                         = 0x400\n\tSO_BUSY_POLL                         = 0x30\n\tSO_CNX_ADVICE                        = 0x37\n\tSO_COOKIE                            = 0x3b\n\tSO_DEBUG                             = 0x1\n\tSO_DETACH_BPF                        = 0x1b\n\tSO_DETACH_FILTER                     = 0x1b\n\tSO_DOMAIN                            = 0x1029\n\tSO_DONTROUTE                         = 0x10\n\tSO_EE_CODE_TXTIME_INVALID_PARAM      = 0x1\n\tSO_EE_CODE_TXTIME_MISSED             = 0x2\n\tSO_EE_CODE_ZEROCOPY_COPIED           = 0x1\n\tSO_EE_ORIGIN_ICMP                    = 0x2\n\tSO_EE_ORIGIN_ICMP6                   = 0x3\n\tSO_EE_ORIGIN_LOCAL                   = 0x1\n\tSO_EE_ORIGIN_NONE                    = 0x0\n\tSO_EE_ORIGIN_TIMESTAMPING            = 0x4\n\tSO_EE_ORIGIN_TXSTATUS                = 0x4\n\tSO_EE_ORIGIN_TXTIME                  = 0x6\n\tSO_EE_ORIGIN_ZEROCOPY                = 0x5\n\tSO_ERROR                             = 0x1007\n\tSO_GET_FILTER                        = 0x1a\n\tSO_INCOMING_CPU                      = 0x33\n\tSO_INCOMING_NAPI_ID                  = 0x3a\n\tSO_KEEPALIVE                         = 0x8\n\tSO_LINGER                            = 0x80\n\tSO_LOCK_FILTER                       = 0x28\n\tSO_MARK                              = 0x22\n\tSO_MAX_PACING_RATE                   = 0x31\n\tSO_MEMINFO                           = 0x39\n\tSO_NOFCS                             = 0x27\n\tSO_NO_CHECK                          = 0xb\n\tSO_OOBINLINE                         = 0x100\n\tSO_PASSCRED                          = 0x2\n\tSO_PASSSEC                           = 0x1f\n\tSO_PEEK_OFF                          = 0x26\n\tSO_PEERCRED                          = 0x40\n\tSO_PEERGROUPS                        = 0x3d\n\tSO_PEERNAME                          = 0x1c\n\tSO_PEERSEC                           = 0x1e\n\tSO_PRIORITY                          = 0xc\n\tSO_PROTOCOL                          = 0x1028\n\tSO_RCVBUF                            = 0x1002\n\tSO_RCVBUFFORCE                       = 0x100b\n\tSO_RCVLOWAT                          = 0x800\n\tSO_RCVTIMEO                          = 0x2000\n\tSO_RCVTIMEO_NEW                      = 0x44\n\tSO_RCVTIMEO_OLD                      = 0x2000\n\tSO_REUSEADDR                         = 0x4\n\tSO_REUSEPORT                         = 0x200\n\tSO_RXQ_OVFL                          = 0x24\n\tSO_SECURITY_AUTHENTICATION           = 0x5001\n\tSO_SECURITY_ENCRYPTION_NETWORK       = 0x5004\n\tSO_SECURITY_ENCRYPTION_TRANSPORT     = 0x5002\n\tSO_SELECT_ERR_QUEUE                  = 0x29\n\tSO_SNDBUF                            = 0x1001\n\tSO_SNDBUFFORCE                       = 0x100a\n\tSO_SNDLOWAT                          = 0x1000\n\tSO_SNDTIMEO                          = 0x4000\n\tSO_SNDTIMEO_NEW                      = 0x45\n\tSO_SNDTIMEO_OLD                      = 0x4000\n\tSO_TIMESTAMP                         = 0x1d\n\tSO_TIMESTAMPING                      = 0x23\n\tSO_TIMESTAMPING_NEW                  = 0x43\n\tSO_TIMESTAMPING_OLD                  = 0x23\n\tSO_TIMESTAMPNS                       = 0x21\n\tSO_TIMESTAMPNS_NEW                   = 0x42\n\tSO_TIMESTAMPNS_OLD                   = 0x21\n\tSO_TIMESTAMP_NEW                     = 0x46\n\tSO_TIMESTAMP_OLD                     = 0x1d\n\tSO_TXTIME                            = 0x3f\n\tSO_TYPE                              = 0x1008\n\tSO_VM_SOCKETS_BUFFER_MAX_SIZE        = 0x2\n\tSO_VM_SOCKETS_BUFFER_MIN_SIZE        = 0x1\n\tSO_VM_SOCKETS_BUFFER_SIZE            = 0x0\n\tSO_VM_SOCKETS_CONNECT_TIMEOUT        = 0x6\n\tSO_VM_SOCKETS_NONBLOCK_TXRX          = 0x7\n\tSO_VM_SOCKETS_PEER_HOST_VM_ID        = 0x3\n\tSO_VM_SOCKETS_TRUSTED                = 0x5\n\tSO_WIFI_STATUS                       = 0x25\n\tSO_ZEROCOPY                          = 0x3e\n\tSPLICE_F_GIFT                        = 0x8\n\tSPLICE_F_MORE                        = 0x4\n\tSPLICE_F_MOVE                        = 0x1\n\tSPLICE_F_NONBLOCK                    = 0x2\n\tSQUASHFS_MAGIC                       = 0x73717368\n\tSTACK_END_MAGIC                      = 0x57ac6e9d\n\tSTATX_ALL                            = 0xfff\n\tSTATX_ATIME                          = 0x20\n\tSTATX_ATTR_APPEND                    = 0x20\n\tSTATX_ATTR_AUTOMOUNT                 = 0x1000\n\tSTATX_ATTR_COMPRESSED                = 0x4\n\tSTATX_ATTR_ENCRYPTED                 = 0x800\n\tSTATX_ATTR_IMMUTABLE                 = 0x10\n\tSTATX_ATTR_NODUMP                    = 0x40\n\tSTATX_BASIC_STATS                    = 0x7ff\n\tSTATX_BLOCKS                         = 0x400\n\tSTATX_BTIME                          = 0x800\n\tSTATX_CTIME                          = 0x80\n\tSTATX_GID                            = 0x10\n\tSTATX_INO                            = 0x100\n\tSTATX_MODE                           = 0x2\n\tSTATX_MTIME                          = 0x40\n\tSTATX_NLINK                          = 0x4\n\tSTATX_SIZE                           = 0x200\n\tSTATX_TYPE                           = 0x1\n\tSTATX_UID                            = 0x8\n\tSTATX__RESERVED                      = 0x80000000\n\tSYNC_FILE_RANGE_WAIT_AFTER           = 0x4\n\tSYNC_FILE_RANGE_WAIT_BEFORE          = 0x1\n\tSYNC_FILE_RANGE_WRITE                = 0x2\n\tSYSFS_MAGIC                          = 0x62656572\n\tS_BLKSIZE                            = 0x200\n\tS_IEXEC                              = 0x40\n\tS_IFBLK                              = 0x6000\n\tS_IFCHR                              = 0x2000\n\tS_IFDIR                              = 0x4000\n\tS_IFIFO                              = 0x1000\n\tS_IFLNK                              = 0xa000\n\tS_IFMT                               = 0xf000\n\tS_IFREG                              = 0x8000\n\tS_IFSOCK                             = 0xc000\n\tS_IREAD                              = 0x100\n\tS_IRGRP                              = 0x20\n\tS_IROTH                              = 0x4\n\tS_IRUSR                              = 0x100\n\tS_IRWXG                              = 0x38\n\tS_IRWXO                              = 0x7\n\tS_IRWXU                              = 0x1c0\n\tS_ISGID                              = 0x400\n\tS_ISUID                              = 0x800\n\tS_ISVTX                              = 0x200\n\tS_IWGRP                              = 0x10\n\tS_IWOTH                              = 0x2\n\tS_IWRITE                             = 0x80\n\tS_IWUSR                              = 0x80\n\tS_IXGRP                              = 0x8\n\tS_IXOTH                              = 0x1\n\tS_IXUSR                              = 0x40\n\tTAB0                                 = 0x0\n\tTAB1                                 = 0x800\n\tTAB2                                 = 0x1000\n\tTAB3                                 = 0x1800\n\tTABDLY                               = 0x1800\n\tTASKSTATS_CMD_ATTR_MAX               = 0x4\n\tTASKSTATS_CMD_MAX                    = 0x2\n\tTASKSTATS_GENL_NAME                  = \"TASKSTATS\"\n\tTASKSTATS_GENL_VERSION               = 0x1\n\tTASKSTATS_TYPE_MAX                   = 0x6\n\tTASKSTATS_VERSION                    = 0x9\n\tTCFLSH                               = 0x20005407\n\tTCGETA                               = 0x40125401\n\tTCGETS                               = 0x40245408\n\tTCGETS2                              = 0x402c540c\n\tTCIFLUSH                             = 0x0\n\tTCIOFF                               = 0x2\n\tTCIOFLUSH                            = 0x2\n\tTCION                                = 0x3\n\tTCOFLUSH                             = 0x1\n\tTCOOFF                               = 0x0\n\tTCOON                                = 0x1\n\tTCP_BPF_IW                           = 0x3e9\n\tTCP_BPF_SNDCWND_CLAMP                = 0x3ea\n\tTCP_CC_INFO                          = 0x1a\n\tTCP_CM_INQ                           = 0x24\n\tTCP_CONGESTION                       = 0xd\n\tTCP_COOKIE_IN_ALWAYS                 = 0x1\n\tTCP_COOKIE_MAX                       = 0x10\n\tTCP_COOKIE_MIN                       = 0x8\n\tTCP_COOKIE_OUT_NEVER                 = 0x2\n\tTCP_COOKIE_PAIR_SIZE                 = 0x20\n\tTCP_COOKIE_TRANSACTIONS              = 0xf\n\tTCP_CORK                             = 0x3\n\tTCP_DEFER_ACCEPT                     = 0x9\n\tTCP_FASTOPEN                         = 0x17\n\tTCP_FASTOPEN_CONNECT                 = 0x1e\n\tTCP_FASTOPEN_KEY                     = 0x21\n\tTCP_FASTOPEN_NO_COOKIE               = 0x22\n\tTCP_INFO                             = 0xb\n\tTCP_INQ                              = 0x24\n\tTCP_KEEPCNT                          = 0x6\n\tTCP_KEEPIDLE                         = 0x4\n\tTCP_KEEPINTVL                        = 0x5\n\tTCP_LINGER2                          = 0x8\n\tTCP_MAXSEG                           = 0x2\n\tTCP_MAXWIN                           = 0xffff\n\tTCP_MAX_WINSHIFT                     = 0xe\n\tTCP_MD5SIG                           = 0xe\n\tTCP_MD5SIG_EXT                       = 0x20\n\tTCP_MD5SIG_FLAG_PREFIX               = 0x1\n\tTCP_MD5SIG_MAXKEYLEN                 = 0x50\n\tTCP_MSS                              = 0x200\n\tTCP_MSS_DEFAULT                      = 0x218\n\tTCP_MSS_DESIRED                      = 0x4c4\n\tTCP_NODELAY                          = 0x1\n\tTCP_NOTSENT_LOWAT                    = 0x19\n\tTCP_QUEUE_SEQ                        = 0x15\n\tTCP_QUICKACK                         = 0xc\n\tTCP_REPAIR                           = 0x13\n\tTCP_REPAIR_OFF                       = 0x0\n\tTCP_REPAIR_OFF_NO_WP                 = -0x1\n\tTCP_REPAIR_ON                        = 0x1\n\tTCP_REPAIR_OPTIONS                   = 0x16\n\tTCP_REPAIR_QUEUE                     = 0x14\n\tTCP_REPAIR_WINDOW                    = 0x1d\n\tTCP_SAVED_SYN                        = 0x1c\n\tTCP_SAVE_SYN                         = 0x1b\n\tTCP_SYNCNT                           = 0x7\n\tTCP_S_DATA_IN                        = 0x4\n\tTCP_S_DATA_OUT                       = 0x8\n\tTCP_THIN_DUPACK                      = 0x11\n\tTCP_THIN_LINEAR_TIMEOUTS             = 0x10\n\tTCP_TIMESTAMP                        = 0x18\n\tTCP_ULP                              = 0x1f\n\tTCP_USER_TIMEOUT                     = 0x12\n\tTCP_WINDOW_CLAMP                     = 0xa\n\tTCP_ZEROCOPY_RECEIVE                 = 0x23\n\tTCSAFLUSH                            = 0x2\n\tTCSBRK                               = 0x20005405\n\tTCSBRKP                              = 0x5425\n\tTCSETA                               = 0x80125402\n\tTCSETAF                              = 0x80125404\n\tTCSETAW                              = 0x80125403\n\tTCSETS                               = 0x80245409\n\tTCSETS2                              = 0x802c540d\n\tTCSETSF                              = 0x8024540b\n\tTCSETSF2                             = 0x802c540f\n\tTCSETSW                              = 0x8024540a\n\tTCSETSW2                             = 0x802c540e\n\tTCXONC                               = 0x20005406\n\tTIMER_ABSTIME                        = 0x1\n\tTIOCCBRK                             = 0x2000747a\n\tTIOCCONS                             = 0x20007424\n\tTIOCEXCL                             = 0x2000740d\n\tTIOCGDEV                             = 0x40045432\n\tTIOCGETD                             = 0x40047400\n\tTIOCGEXCL                            = 0x40045440\n\tTIOCGICOUNT                          = 0x545d\n\tTIOCGISO7816                         = 0x40285443\n\tTIOCGLCKTRMIOS                       = 0x5456\n\tTIOCGPGRP                            = 0x40047483\n\tTIOCGPKT                             = 0x40045438\n\tTIOCGPTLCK                           = 0x40045439\n\tTIOCGPTN                             = 0x40047486\n\tTIOCGPTPEER                          = 0x20007489\n\tTIOCGRS485                           = 0x40205441\n\tTIOCGSERIAL                          = 0x541e\n\tTIOCGSID                             = 0x40047485\n\tTIOCGSOFTCAR                         = 0x40047464\n\tTIOCGWINSZ                           = 0x40087468\n\tTIOCINQ                              = 0x4004667f\n\tTIOCLINUX                            = 0x541c\n\tTIOCMBIC                             = 0x8004746b\n\tTIOCMBIS                             = 0x8004746c\n\tTIOCMGET                             = 0x4004746a\n\tTIOCMIWAIT                           = 0x545c\n\tTIOCMSET                             = 0x8004746d\n\tTIOCM_CAR                            = 0x40\n\tTIOCM_CD                             = 0x40\n\tTIOCM_CTS                            = 0x20\n\tTIOCM_DSR                            = 0x100\n\tTIOCM_DTR                            = 0x2\n\tTIOCM_LE                             = 0x1\n\tTIOCM_RI                             = 0x80\n\tTIOCM_RNG                            = 0x80\n\tTIOCM_RTS                            = 0x4\n\tTIOCM_SR                             = 0x10\n\tTIOCM_ST                             = 0x8\n\tTIOCNOTTY                            = 0x20007471\n\tTIOCNXCL                             = 0x2000740e\n\tTIOCOUTQ                             = 0x40047473\n\tTIOCPKT                              = 0x80047470\n\tTIOCPKT_DATA                         = 0x0\n\tTIOCPKT_DOSTOP                       = 0x20\n\tTIOCPKT_FLUSHREAD                    = 0x1\n\tTIOCPKT_FLUSHWRITE                   = 0x2\n\tTIOCPKT_IOCTL                        = 0x40\n\tTIOCPKT_NOSTOP                       = 0x10\n\tTIOCPKT_START                        = 0x8\n\tTIOCPKT_STOP                         = 0x4\n\tTIOCSBRK                             = 0x2000747b\n\tTIOCSCTTY                            = 0x20007484\n\tTIOCSERCONFIG                        = 0x5453\n\tTIOCSERGETLSR                        = 0x5459\n\tTIOCSERGETMULTI                      = 0x545a\n\tTIOCSERGSTRUCT                       = 0x5458\n\tTIOCSERGWILD                         = 0x5454\n\tTIOCSERSETMULTI                      = 0x545b\n\tTIOCSERSWILD                         = 0x5455\n\tTIOCSETD                             = 0x80047401\n\tTIOCSIG                              = 0x80047488\n\tTIOCSISO7816                         = 0xc0285444\n\tTIOCSLCKTRMIOS                       = 0x5457\n\tTIOCSPGRP                            = 0x80047482\n\tTIOCSPTLCK                           = 0x80047487\n\tTIOCSRS485                           = 0xc0205442\n\tTIOCSSERIAL                          = 0x541f\n\tTIOCSSOFTCAR                         = 0x80047465\n\tTIOCSTART                            = 0x2000746e\n\tTIOCSTI                              = 0x80017472\n\tTIOCSTOP                             = 0x2000746f\n\tTIOCSWINSZ                           = 0x80087467\n\tTIOCVHANGUP                          = 0x20005437\n\tTMPFS_MAGIC                          = 0x1021994\n\tTOSTOP                               = 0x100\n\tTPACKET_ALIGNMENT                    = 0x10\n\tTPACKET_HDRLEN                       = 0x34\n\tTP_STATUS_AVAILABLE                  = 0x0\n\tTP_STATUS_BLK_TMO                    = 0x20\n\tTP_STATUS_COPY                       = 0x2\n\tTP_STATUS_CSUMNOTREADY               = 0x8\n\tTP_STATUS_CSUM_VALID                 = 0x80\n\tTP_STATUS_KERNEL                     = 0x0\n\tTP_STATUS_LOSING                     = 0x4\n\tTP_STATUS_SENDING                    = 0x2\n\tTP_STATUS_SEND_REQUEST               = 0x1\n\tTP_STATUS_TS_RAW_HARDWARE            = -0x80000000\n\tTP_STATUS_TS_SOFTWARE                = 0x20000000\n\tTP_STATUS_TS_SYS_HARDWARE            = 0x40000000\n\tTP_STATUS_USER                       = 0x1\n\tTP_STATUS_VLAN_TPID_VALID            = 0x40\n\tTP_STATUS_VLAN_VALID                 = 0x10\n\tTP_STATUS_WRONG_FORMAT               = 0x4\n\tTRACEFS_MAGIC                        = 0x74726163\n\tTS_COMM_LEN                          = 0x20\n\tTUNATTACHFILTER                      = 0x801054d5\n\tTUNDETACHFILTER                      = 0x801054d6\n\tTUNGETFEATURES                       = 0x400454cf\n\tTUNGETFILTER                         = 0x401054db\n\tTUNGETIFF                            = 0x400454d2\n\tTUNGETSNDBUF                         = 0x400454d3\n\tTUNGETVNETBE                         = 0x400454df\n\tTUNGETVNETHDRSZ                      = 0x400454d7\n\tTUNGETVNETLE                         = 0x400454dd\n\tTUNSETCARRIER                        = 0x800454e2\n\tTUNSETDEBUG                          = 0x800454c9\n\tTUNSETFILTEREBPF                     = 0x400454e1\n\tTUNSETGROUP                          = 0x800454ce\n\tTUNSETIFF                            = 0x800454ca\n\tTUNSETIFINDEX                        = 0x800454da\n\tTUNSETLINK                           = 0x800454cd\n\tTUNSETNOCSUM                         = 0x800454c8\n\tTUNSETOFFLOAD                        = 0x800454d0\n\tTUNSETOWNER                          = 0x800454cc\n\tTUNSETPERSIST                        = 0x800454cb\n\tTUNSETQUEUE                          = 0x800454d9\n\tTUNSETSNDBUF                         = 0x800454d4\n\tTUNSETSTEERINGEBPF                   = 0x400454e0\n\tTUNSETTXFILTER                       = 0x800454d1\n\tTUNSETVNETBE                         = 0x800454de\n\tTUNSETVNETHDRSZ                      = 0x800454d8\n\tTUNSETVNETLE                         = 0x800454dc\n\tUBI_IOCATT                           = 0x80186f40\n\tUBI_IOCDET                           = 0x80046f41\n\tUBI_IOCEBCH                          = 0x80044f02\n\tUBI_IOCEBER                          = 0x80044f01\n\tUBI_IOCEBISMAP                       = 0x40044f05\n\tUBI_IOCEBMAP                         = 0x80084f03\n\tUBI_IOCEBUNMAP                       = 0x80044f04\n\tUBI_IOCMKVOL                         = 0x80986f00\n\tUBI_IOCRMVOL                         = 0x80046f01\n\tUBI_IOCRNVOL                         = 0x91106f03\n\tUBI_IOCRPEB                          = 0x80046f04\n\tUBI_IOCRSVOL                         = 0x800c6f02\n\tUBI_IOCSETVOLPROP                    = 0x80104f06\n\tUBI_IOCSPEB                          = 0x80046f05\n\tUBI_IOCVOLCRBLK                      = 0x80804f07\n\tUBI_IOCVOLRMBLK                      = 0x20004f08\n\tUBI_IOCVOLUP                         = 0x80084f00\n\tUDF_SUPER_MAGIC                      = 0x15013346\n\tUMOUNT_NOFOLLOW                      = 0x8\n\tUSBDEVICE_SUPER_MAGIC                = 0x9fa2\n\tUTIME_NOW                            = 0x3fffffff\n\tUTIME_OMIT                           = 0x3ffffffe\n\tV9FS_MAGIC                           = 0x1021997\n\tVDISCARD                             = 0xd\n\tVEOF                                 = 0x4\n\tVEOL                                 = 0xb\n\tVEOL2                                = 0x10\n\tVERASE                               = 0x2\n\tVINTR                                = 0x0\n\tVKILL                                = 0x3\n\tVLNEXT                               = 0xf\n\tVMADDR_CID_ANY                       = 0xffffffff\n\tVMADDR_CID_HOST                      = 0x2\n\tVMADDR_CID_HYPERVISOR                = 0x0\n\tVMADDR_CID_RESERVED                  = 0x1\n\tVMADDR_PORT_ANY                      = 0xffffffff\n\tVMIN                                 = 0x6\n\tVM_SOCKETS_INVALID_VERSION           = 0xffffffff\n\tVQUIT                                = 0x1\n\tVREPRINT                             = 0xc\n\tVSTART                               = 0x8\n\tVSTOP                                = 0x9\n\tVSUSP                                = 0xa\n\tVSWTC                                = 0x7\n\tVT0                                  = 0x0\n\tVT1                                  = 0x4000\n\tVTDLY                                = 0x4000\n\tVTIME                                = 0x5\n\tVWERASE                              = 0xe\n\tWALL                                 = 0x40000000\n\tWCLONE                               = 0x80000000\n\tWCONTINUED                           = 0x8\n\tWDIOC_GETBOOTSTATUS                  = 0x40045702\n\tWDIOC_GETPRETIMEOUT                  = 0x40045709\n\tWDIOC_GETSTATUS                      = 0x40045701\n\tWDIOC_GETSUPPORT                     = 0x40285700\n\tWDIOC_GETTEMP                        = 0x40045703\n\tWDIOC_GETTIMELEFT                    = 0x4004570a\n\tWDIOC_GETTIMEOUT                     = 0x40045707\n\tWDIOC_KEEPALIVE                      = 0x40045705\n\tWDIOC_SETOPTIONS                     = 0x40045704\n\tWDIOC_SETPRETIMEOUT                  = 0xc0045708\n\tWDIOC_SETTIMEOUT                     = 0xc0045706\n\tWEXITED                              = 0x4\n\tWIN_ACKMEDIACHANGE                   = 0xdb\n\tWIN_CHECKPOWERMODE1                  = 0xe5\n\tWIN_CHECKPOWERMODE2                  = 0x98\n\tWIN_DEVICE_RESET                     = 0x8\n\tWIN_DIAGNOSE                         = 0x90\n\tWIN_DOORLOCK                         = 0xde\n\tWIN_DOORUNLOCK                       = 0xdf\n\tWIN_DOWNLOAD_MICROCODE               = 0x92\n\tWIN_FLUSH_CACHE                      = 0xe7\n\tWIN_FLUSH_CACHE_EXT                  = 0xea\n\tWIN_FORMAT                           = 0x50\n\tWIN_GETMEDIASTATUS                   = 0xda\n\tWIN_IDENTIFY                         = 0xec\n\tWIN_IDENTIFY_DMA                     = 0xee\n\tWIN_IDLEIMMEDIATE                    = 0xe1\n\tWIN_INIT                             = 0x60\n\tWIN_MEDIAEJECT                       = 0xed\n\tWIN_MULTREAD                         = 0xc4\n\tWIN_MULTREAD_EXT                     = 0x29\n\tWIN_MULTWRITE                        = 0xc5\n\tWIN_MULTWRITE_EXT                    = 0x39\n\tWIN_NOP                              = 0x0\n\tWIN_PACKETCMD                        = 0xa0\n\tWIN_PIDENTIFY                        = 0xa1\n\tWIN_POSTBOOT                         = 0xdc\n\tWIN_PREBOOT                          = 0xdd\n\tWIN_QUEUED_SERVICE                   = 0xa2\n\tWIN_READ                             = 0x20\n\tWIN_READDMA                          = 0xc8\n\tWIN_READDMA_EXT                      = 0x25\n\tWIN_READDMA_ONCE                     = 0xc9\n\tWIN_READDMA_QUEUED                   = 0xc7\n\tWIN_READDMA_QUEUED_EXT               = 0x26\n\tWIN_READ_BUFFER                      = 0xe4\n\tWIN_READ_EXT                         = 0x24\n\tWIN_READ_LONG                        = 0x22\n\tWIN_READ_LONG_ONCE                   = 0x23\n\tWIN_READ_NATIVE_MAX                  = 0xf8\n\tWIN_READ_NATIVE_MAX_EXT              = 0x27\n\tWIN_READ_ONCE                        = 0x21\n\tWIN_RECAL                            = 0x10\n\tWIN_RESTORE                          = 0x10\n\tWIN_SECURITY_DISABLE                 = 0xf6\n\tWIN_SECURITY_ERASE_PREPARE           = 0xf3\n\tWIN_SECURITY_ERASE_UNIT              = 0xf4\n\tWIN_SECURITY_FREEZE_LOCK             = 0xf5\n\tWIN_SECURITY_SET_PASS                = 0xf1\n\tWIN_SECURITY_UNLOCK                  = 0xf2\n\tWIN_SEEK                             = 0x70\n\tWIN_SETFEATURES                      = 0xef\n\tWIN_SETIDLE1                         = 0xe3\n\tWIN_SETIDLE2                         = 0x97\n\tWIN_SETMULT                          = 0xc6\n\tWIN_SET_MAX                          = 0xf9\n\tWIN_SET_MAX_EXT                      = 0x37\n\tWIN_SLEEPNOW1                        = 0xe6\n\tWIN_SLEEPNOW2                        = 0x99\n\tWIN_SMART                            = 0xb0\n\tWIN_SPECIFY                          = 0x91\n\tWIN_SRST                             = 0x8\n\tWIN_STANDBY                          = 0xe2\n\tWIN_STANDBY2                         = 0x96\n\tWIN_STANDBYNOW1                      = 0xe0\n\tWIN_STANDBYNOW2                      = 0x94\n\tWIN_VERIFY                           = 0x40\n\tWIN_VERIFY_EXT                       = 0x42\n\tWIN_VERIFY_ONCE                      = 0x41\n\tWIN_WRITE                            = 0x30\n\tWIN_WRITEDMA                         = 0xca\n\tWIN_WRITEDMA_EXT                     = 0x35\n\tWIN_WRITEDMA_ONCE                    = 0xcb\n\tWIN_WRITEDMA_QUEUED                  = 0xcc\n\tWIN_WRITEDMA_QUEUED_EXT              = 0x36\n\tWIN_WRITE_BUFFER                     = 0xe8\n\tWIN_WRITE_EXT                        = 0x34\n\tWIN_WRITE_LONG                       = 0x32\n\tWIN_WRITE_LONG_ONCE                  = 0x33\n\tWIN_WRITE_ONCE                       = 0x31\n\tWIN_WRITE_SAME                       = 0xe9\n\tWIN_WRITE_VERIFY                     = 0x3c\n\tWNOHANG                              = 0x1\n\tWNOTHREAD                            = 0x20000000\n\tWNOWAIT                              = 0x1000000\n\tWORDSIZE                             = 0x40\n\tWSTOPPED                             = 0x2\n\tWUNTRACED                            = 0x2\n\tXATTR_CREATE                         = 0x1\n\tXATTR_REPLACE                        = 0x2\n\tXCASE                                = 0x4\n\tXDP_COPY                             = 0x2\n\tXDP_FLAGS_DRV_MODE                   = 0x4\n\tXDP_FLAGS_HW_MODE                    = 0x8\n\tXDP_FLAGS_MASK                       = 0xf\n\tXDP_FLAGS_MODES                      = 0xe\n\tXDP_FLAGS_SKB_MODE                   = 0x2\n\tXDP_FLAGS_UPDATE_IF_NOEXIST          = 0x1\n\tXDP_MMAP_OFFSETS                     = 0x1\n\tXDP_PACKET_HEADROOM                  = 0x100\n\tXDP_PGOFF_RX_RING                    = 0x0\n\tXDP_PGOFF_TX_RING                    = 0x80000000\n\tXDP_RX_RING                          = 0x2\n\tXDP_SHARED_UMEM                      = 0x1\n\tXDP_STATISTICS                       = 0x7\n\tXDP_TX_RING                          = 0x3\n\tXDP_UMEM_COMPLETION_RING             = 0x6\n\tXDP_UMEM_FILL_RING                   = 0x5\n\tXDP_UMEM_PGOFF_COMPLETION_RING       = 0x180000000\n\tXDP_UMEM_PGOFF_FILL_RING             = 0x100000000\n\tXDP_UMEM_REG                         = 0x4\n\tXDP_ZEROCOPY                         = 0x4\n\tXENFS_SUPER_MAGIC                    = 0xabba1974\n\tXFS_SUPER_MAGIC                      = 0x58465342\n\tXTABS                                = 0x1800\n\tZSMALLOC_MAGIC                       = 0x58295829\n\t__TIOCFLUSH                          = 0x80047410\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x30)\n\tEADDRNOTAVAIL   = syscall.Errno(0x31)\n\tEADV            = syscall.Errno(0x53)\n\tEAFNOSUPPORT    = syscall.Errno(0x2f)\n\tEAGAIN          = syscall.Errno(0xb)\n\tEALREADY        = syscall.Errno(0x25)\n\tEBADE           = syscall.Errno(0x66)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADFD          = syscall.Errno(0x5d)\n\tEBADMSG         = syscall.Errno(0x4c)\n\tEBADR           = syscall.Errno(0x67)\n\tEBADRQC         = syscall.Errno(0x6a)\n\tEBADSLT         = syscall.Errno(0x6b)\n\tEBFONT          = syscall.Errno(0x6d)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x7f)\n\tECHILD          = syscall.Errno(0xa)\n\tECHRNG          = syscall.Errno(0x5e)\n\tECOMM           = syscall.Errno(0x55)\n\tECONNABORTED    = syscall.Errno(0x35)\n\tECONNREFUSED    = syscall.Errno(0x3d)\n\tECONNRESET      = syscall.Errno(0x36)\n\tEDEADLK         = syscall.Errno(0x4e)\n\tEDEADLOCK       = syscall.Errno(0x6c)\n\tEDESTADDRREQ    = syscall.Errno(0x27)\n\tEDOM            = syscall.Errno(0x21)\n\tEDOTDOT         = syscall.Errno(0x58)\n\tEDQUOT          = syscall.Errno(0x45)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEHOSTDOWN       = syscall.Errno(0x40)\n\tEHOSTUNREACH    = syscall.Errno(0x41)\n\tEHWPOISON       = syscall.Errno(0x87)\n\tEIDRM           = syscall.Errno(0x4d)\n\tEILSEQ          = syscall.Errno(0x7a)\n\tEINPROGRESS     = syscall.Errno(0x24)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEISCONN         = syscall.Errno(0x38)\n\tEISDIR          = syscall.Errno(0x15)\n\tEISNAM          = syscall.Errno(0x78)\n\tEKEYEXPIRED     = syscall.Errno(0x81)\n\tEKEYREJECTED    = syscall.Errno(0x83)\n\tEKEYREVOKED     = syscall.Errno(0x82)\n\tEL2HLT          = syscall.Errno(0x65)\n\tEL2NSYNC        = syscall.Errno(0x5f)\n\tEL3HLT          = syscall.Errno(0x60)\n\tEL3RST          = syscall.Errno(0x61)\n\tELIBACC         = syscall.Errno(0x72)\n\tELIBBAD         = syscall.Errno(0x70)\n\tELIBEXEC        = syscall.Errno(0x6e)\n\tELIBMAX         = syscall.Errno(0x7b)\n\tELIBSCN         = syscall.Errno(0x7c)\n\tELNRNG          = syscall.Errno(0x62)\n\tELOOP           = syscall.Errno(0x3e)\n\tEMEDIUMTYPE     = syscall.Errno(0x7e)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x28)\n\tEMULTIHOP       = syscall.Errno(0x57)\n\tENAMETOOLONG    = syscall.Errno(0x3f)\n\tENAVAIL         = syscall.Errno(0x77)\n\tENETDOWN        = syscall.Errno(0x32)\n\tENETRESET       = syscall.Errno(0x34)\n\tENETUNREACH     = syscall.Errno(0x33)\n\tENFILE          = syscall.Errno(0x17)\n\tENOANO          = syscall.Errno(0x69)\n\tENOBUFS         = syscall.Errno(0x37)\n\tENOCSI          = syscall.Errno(0x64)\n\tENODATA         = syscall.Errno(0x6f)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOKEY          = syscall.Errno(0x80)\n\tENOLCK          = syscall.Errno(0x4f)\n\tENOLINK         = syscall.Errno(0x52)\n\tENOMEDIUM       = syscall.Errno(0x7d)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x4b)\n\tENONET          = syscall.Errno(0x50)\n\tENOPKG          = syscall.Errno(0x71)\n\tENOPROTOOPT     = syscall.Errno(0x2a)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSR           = syscall.Errno(0x4a)\n\tENOSTR          = syscall.Errno(0x48)\n\tENOSYS          = syscall.Errno(0x5a)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x39)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x42)\n\tENOTNAM         = syscall.Errno(0x76)\n\tENOTRECOVERABLE = syscall.Errno(0x85)\n\tENOTSOCK        = syscall.Errno(0x26)\n\tENOTSUP         = syscall.Errno(0x2d)\n\tENOTTY          = syscall.Errno(0x19)\n\tENOTUNIQ        = syscall.Errno(0x73)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x2d)\n\tEOVERFLOW       = syscall.Errno(0x5c)\n\tEOWNERDEAD      = syscall.Errno(0x84)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x2e)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x43)\n\tEPROTO          = syscall.Errno(0x56)\n\tEPROTONOSUPPORT = syscall.Errno(0x2b)\n\tEPROTOTYPE      = syscall.Errno(0x29)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMCHG         = syscall.Errno(0x59)\n\tEREMOTE         = syscall.Errno(0x47)\n\tEREMOTEIO       = syscall.Errno(0x79)\n\tERESTART        = syscall.Errno(0x74)\n\tERFKILL         = syscall.Errno(0x86)\n\tEROFS           = syscall.Errno(0x1e)\n\tERREMOTE        = syscall.Errno(0x51)\n\tESHUTDOWN       = syscall.Errno(0x3a)\n\tESOCKTNOSUPPORT = syscall.Errno(0x2c)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESRMNT          = syscall.Errno(0x54)\n\tESTALE          = syscall.Errno(0x46)\n\tESTRPIPE        = syscall.Errno(0x5b)\n\tETIME           = syscall.Errno(0x49)\n\tETIMEDOUT       = syscall.Errno(0x3c)\n\tETOOMANYREFS    = syscall.Errno(0x3b)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUCLEAN         = syscall.Errno(0x75)\n\tEUNATCH         = syscall.Errno(0x63)\n\tEUSERS          = syscall.Errno(0x44)\n\tEWOULDBLOCK     = syscall.Errno(0xb)\n\tEXDEV           = syscall.Errno(0x12)\n\tEXFULL          = syscall.Errno(0x68)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x14)\n\tSIGCLD    = syscall.Signal(0x14)\n\tSIGCONT   = syscall.Signal(0x13)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x17)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGLOST   = syscall.Signal(0x1d)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPOLL   = syscall.Signal(0x17)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGPWR    = syscall.Signal(0x1d)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTOP   = syscall.Signal(0x11)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x12)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x10)\n\tSIGUSR1   = syscall.Signal(0x1e)\n\tSIGUSR2   = syscall.Signal(0x1f)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"no such device or address\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device or resource busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"invalid cross-device link\"},\n\t{19, \"ENODEV\", \"no such device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"numerical result out of range\"},\n\t{36, \"EINPROGRESS\", \"operation now in progress\"},\n\t{37, \"EALREADY\", \"operation already in progress\"},\n\t{38, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{39, \"EDESTADDRREQ\", \"destination address required\"},\n\t{40, \"EMSGSIZE\", \"message too long\"},\n\t{41, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{42, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{43, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{44, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{45, \"ENOTSUP\", \"operation not supported\"},\n\t{46, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{47, \"EAFNOSUPPORT\", \"address family not supported by protocol\"},\n\t{48, \"EADDRINUSE\", \"address already in use\"},\n\t{49, \"EADDRNOTAVAIL\", \"cannot assign requested address\"},\n\t{50, \"ENETDOWN\", \"network is down\"},\n\t{51, \"ENETUNREACH\", \"network is unreachable\"},\n\t{52, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{53, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{54, \"ECONNRESET\", \"connection reset by peer\"},\n\t{55, \"ENOBUFS\", \"no buffer space available\"},\n\t{56, \"EISCONN\", \"transport endpoint is already connected\"},\n\t{57, \"ENOTCONN\", \"transport endpoint is not connected\"},\n\t{58, \"ESHUTDOWN\", \"cannot send after transport endpoint shutdown\"},\n\t{59, \"ETOOMANYREFS\", \"too many references: cannot splice\"},\n\t{60, \"ETIMEDOUT\", \"connection timed out\"},\n\t{61, \"ECONNREFUSED\", \"connection refused\"},\n\t{62, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{63, \"ENAMETOOLONG\", \"file name too long\"},\n\t{64, \"EHOSTDOWN\", \"host is down\"},\n\t{65, \"EHOSTUNREACH\", \"no route to host\"},\n\t{66, \"ENOTEMPTY\", \"directory not empty\"},\n\t{67, \"EPROCLIM\", \"too many processes\"},\n\t{68, \"EUSERS\", \"too many users\"},\n\t{69, \"EDQUOT\", \"disk quota exceeded\"},\n\t{70, \"ESTALE\", \"stale file handle\"},\n\t{71, \"EREMOTE\", \"object is remote\"},\n\t{72, \"ENOSTR\", \"device not a stream\"},\n\t{73, \"ETIME\", \"timer expired\"},\n\t{74, \"ENOSR\", \"out of streams resources\"},\n\t{75, \"ENOMSG\", \"no message of desired type\"},\n\t{76, \"EBADMSG\", \"bad message\"},\n\t{77, \"EIDRM\", \"identifier removed\"},\n\t{78, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{79, \"ENOLCK\", \"no locks available\"},\n\t{80, \"ENONET\", \"machine is not on the network\"},\n\t{81, \"ERREMOTE\", \"unknown error 81\"},\n\t{82, \"ENOLINK\", \"link has been severed\"},\n\t{83, \"EADV\", \"advertise error\"},\n\t{84, \"ESRMNT\", \"srmount error\"},\n\t{85, \"ECOMM\", \"communication error on send\"},\n\t{86, \"EPROTO\", \"protocol error\"},\n\t{87, \"EMULTIHOP\", \"multihop attempted\"},\n\t{88, \"EDOTDOT\", \"RFS specific error\"},\n\t{89, \"EREMCHG\", \"remote address changed\"},\n\t{90, \"ENOSYS\", \"function not implemented\"},\n\t{91, \"ESTRPIPE\", \"streams pipe error\"},\n\t{92, \"EOVERFLOW\", \"value too large for defined data type\"},\n\t{93, \"EBADFD\", \"file descriptor in bad state\"},\n\t{94, \"ECHRNG\", \"channel number out of range\"},\n\t{95, \"EL2NSYNC\", \"level 2 not synchronized\"},\n\t{96, \"EL3HLT\", \"level 3 halted\"},\n\t{97, \"EL3RST\", \"level 3 reset\"},\n\t{98, \"ELNRNG\", \"link number out of range\"},\n\t{99, \"EUNATCH\", \"protocol driver not attached\"},\n\t{100, \"ENOCSI\", \"no CSI structure available\"},\n\t{101, \"EL2HLT\", \"level 2 halted\"},\n\t{102, \"EBADE\", \"invalid exchange\"},\n\t{103, \"EBADR\", \"invalid request descriptor\"},\n\t{104, \"EXFULL\", \"exchange full\"},\n\t{105, \"ENOANO\", \"no anode\"},\n\t{106, \"EBADRQC\", \"invalid request code\"},\n\t{107, \"EBADSLT\", \"invalid slot\"},\n\t{108, \"EDEADLOCK\", \"file locking deadlock error\"},\n\t{109, \"EBFONT\", \"bad font file format\"},\n\t{110, \"ELIBEXEC\", \"cannot exec a shared library directly\"},\n\t{111, \"ENODATA\", \"no data available\"},\n\t{112, \"ELIBBAD\", \"accessing a corrupted shared library\"},\n\t{113, \"ENOPKG\", \"package not installed\"},\n\t{114, \"ELIBACC\", \"can not access a needed shared library\"},\n\t{115, \"ENOTUNIQ\", \"name not unique on network\"},\n\t{116, \"ERESTART\", \"interrupted system call should be restarted\"},\n\t{117, \"EUCLEAN\", \"structure needs cleaning\"},\n\t{118, \"ENOTNAM\", \"not a XENIX named type file\"},\n\t{119, \"ENAVAIL\", \"no XENIX semaphores available\"},\n\t{120, \"EISNAM\", \"is a named type file\"},\n\t{121, \"EREMOTEIO\", \"remote I/O error\"},\n\t{122, \"EILSEQ\", \"invalid or incomplete multibyte or wide character\"},\n\t{123, \"ELIBMAX\", \"attempting to link in too many shared libraries\"},\n\t{124, \"ELIBSCN\", \".lib section in a.out corrupted\"},\n\t{125, \"ENOMEDIUM\", \"no medium found\"},\n\t{126, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{127, \"ECANCELED\", \"operation canceled\"},\n\t{128, \"ENOKEY\", \"required key not available\"},\n\t{129, \"EKEYEXPIRED\", \"key has expired\"},\n\t{130, \"EKEYREVOKED\", \"key has been revoked\"},\n\t{131, \"EKEYREJECTED\", \"key was rejected by service\"},\n\t{132, \"EOWNERDEAD\", \"owner died\"},\n\t{133, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{134, \"ERFKILL\", \"operation not possible due to RF-kill\"},\n\t{135, \"EHWPOISON\", \"memory page has hardware error\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/breakpoint trap\"},\n\t{6, \"SIGABRT\", \"aborted\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"stopped (signal)\"},\n\t{18, \"SIGTSTP\", \"stopped\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible\"},\n\t{24, \"SIGXCPU\", \"CPU time limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"file size limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window changed\"},\n\t{29, \"SIGLOST\", \"power failure\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go",
    "content": "// mkerrors.sh -m32\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build 386,netbsd\n\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs -- -m32 _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                      = 0x10\n\tAF_ARP                            = 0x1c\n\tAF_BLUETOOTH                      = 0x1f\n\tAF_CCITT                          = 0xa\n\tAF_CHAOS                          = 0x5\n\tAF_CNT                            = 0x15\n\tAF_COIP                           = 0x14\n\tAF_DATAKIT                        = 0x9\n\tAF_DECnet                         = 0xc\n\tAF_DLI                            = 0xd\n\tAF_E164                           = 0x1a\n\tAF_ECMA                           = 0x8\n\tAF_HYLINK                         = 0xf\n\tAF_IEEE80211                      = 0x20\n\tAF_IMPLINK                        = 0x3\n\tAF_INET                           = 0x2\n\tAF_INET6                          = 0x18\n\tAF_IPX                            = 0x17\n\tAF_ISDN                           = 0x1a\n\tAF_ISO                            = 0x7\n\tAF_LAT                            = 0xe\n\tAF_LINK                           = 0x12\n\tAF_LOCAL                          = 0x1\n\tAF_MAX                            = 0x23\n\tAF_MPLS                           = 0x21\n\tAF_NATM                           = 0x1b\n\tAF_NS                             = 0x6\n\tAF_OROUTE                         = 0x11\n\tAF_OSI                            = 0x7\n\tAF_PUP                            = 0x4\n\tAF_ROUTE                          = 0x22\n\tAF_SNA                            = 0xb\n\tAF_UNIX                           = 0x1\n\tAF_UNSPEC                         = 0x0\n\tARPHRD_ARCNET                     = 0x7\n\tARPHRD_ETHER                      = 0x1\n\tARPHRD_FRELAY                     = 0xf\n\tARPHRD_IEEE1394                   = 0x18\n\tARPHRD_IEEE802                    = 0x6\n\tARPHRD_STRIP                      = 0x17\n\tB0                                = 0x0\n\tB110                              = 0x6e\n\tB115200                           = 0x1c200\n\tB1200                             = 0x4b0\n\tB134                              = 0x86\n\tB14400                            = 0x3840\n\tB150                              = 0x96\n\tB1800                             = 0x708\n\tB19200                            = 0x4b00\n\tB200                              = 0xc8\n\tB230400                           = 0x38400\n\tB2400                             = 0x960\n\tB28800                            = 0x7080\n\tB300                              = 0x12c\n\tB38400                            = 0x9600\n\tB460800                           = 0x70800\n\tB4800                             = 0x12c0\n\tB50                               = 0x32\n\tB57600                            = 0xe100\n\tB600                              = 0x258\n\tB7200                             = 0x1c20\n\tB75                               = 0x4b\n\tB76800                            = 0x12c00\n\tB921600                           = 0xe1000\n\tB9600                             = 0x2580\n\tBIOCFEEDBACK                      = 0x8004427d\n\tBIOCFLUSH                         = 0x20004268\n\tBIOCGBLEN                         = 0x40044266\n\tBIOCGDLT                          = 0x4004426a\n\tBIOCGDLTLIST                      = 0xc0084277\n\tBIOCGETIF                         = 0x4090426b\n\tBIOCGFEEDBACK                     = 0x4004427c\n\tBIOCGHDRCMPLT                     = 0x40044274\n\tBIOCGRTIMEOUT                     = 0x400c427b\n\tBIOCGSEESENT                      = 0x40044278\n\tBIOCGSTATS                        = 0x4080426f\n\tBIOCGSTATSOLD                     = 0x4008426f\n\tBIOCIMMEDIATE                     = 0x80044270\n\tBIOCPROMISC                       = 0x20004269\n\tBIOCSBLEN                         = 0xc0044266\n\tBIOCSDLT                          = 0x80044276\n\tBIOCSETF                          = 0x80084267\n\tBIOCSETIF                         = 0x8090426c\n\tBIOCSFEEDBACK                     = 0x8004427d\n\tBIOCSHDRCMPLT                     = 0x80044275\n\tBIOCSRTIMEOUT                     = 0x800c427a\n\tBIOCSSEESENT                      = 0x80044279\n\tBIOCSTCPF                         = 0x80084272\n\tBIOCSUDPF                         = 0x80084273\n\tBIOCVERSION                       = 0x40044271\n\tBPF_A                             = 0x10\n\tBPF_ABS                           = 0x20\n\tBPF_ADD                           = 0x0\n\tBPF_ALIGNMENT                     = 0x4\n\tBPF_ALIGNMENT32                   = 0x4\n\tBPF_ALU                           = 0x4\n\tBPF_AND                           = 0x50\n\tBPF_B                             = 0x10\n\tBPF_DFLTBUFSIZE                   = 0x100000\n\tBPF_DIV                           = 0x30\n\tBPF_H                             = 0x8\n\tBPF_IMM                           = 0x0\n\tBPF_IND                           = 0x40\n\tBPF_JA                            = 0x0\n\tBPF_JEQ                           = 0x10\n\tBPF_JGE                           = 0x30\n\tBPF_JGT                           = 0x20\n\tBPF_JMP                           = 0x5\n\tBPF_JSET                          = 0x40\n\tBPF_K                             = 0x0\n\tBPF_LD                            = 0x0\n\tBPF_LDX                           = 0x1\n\tBPF_LEN                           = 0x80\n\tBPF_LSH                           = 0x60\n\tBPF_MAJOR_VERSION                 = 0x1\n\tBPF_MAXBUFSIZE                    = 0x1000000\n\tBPF_MAXINSNS                      = 0x200\n\tBPF_MEM                           = 0x60\n\tBPF_MEMWORDS                      = 0x10\n\tBPF_MINBUFSIZE                    = 0x20\n\tBPF_MINOR_VERSION                 = 0x1\n\tBPF_MISC                          = 0x7\n\tBPF_MSH                           = 0xa0\n\tBPF_MUL                           = 0x20\n\tBPF_NEG                           = 0x80\n\tBPF_OR                            = 0x40\n\tBPF_RELEASE                       = 0x30bb6\n\tBPF_RET                           = 0x6\n\tBPF_RSH                           = 0x70\n\tBPF_ST                            = 0x2\n\tBPF_STX                           = 0x3\n\tBPF_SUB                           = 0x10\n\tBPF_TAX                           = 0x0\n\tBPF_TXA                           = 0x80\n\tBPF_W                             = 0x0\n\tBPF_X                             = 0x8\n\tBRKINT                            = 0x2\n\tCFLUSH                            = 0xf\n\tCLOCAL                            = 0x8000\n\tCLONE_CSIGNAL                     = 0xff\n\tCLONE_FILES                       = 0x400\n\tCLONE_FS                          = 0x200\n\tCLONE_PID                         = 0x1000\n\tCLONE_PTRACE                      = 0x2000\n\tCLONE_SIGHAND                     = 0x800\n\tCLONE_VFORK                       = 0x4000\n\tCLONE_VM                          = 0x100\n\tCREAD                             = 0x800\n\tCRTSCTS                           = 0x10000\n\tCS5                               = 0x0\n\tCS6                               = 0x100\n\tCS7                               = 0x200\n\tCS8                               = 0x300\n\tCSIZE                             = 0x300\n\tCSTART                            = 0x11\n\tCSTATUS                           = 0x14\n\tCSTOP                             = 0x13\n\tCSTOPB                            = 0x400\n\tCSUSP                             = 0x1a\n\tCTL_HW                            = 0x6\n\tCTL_KERN                          = 0x1\n\tCTL_MAXNAME                       = 0xc\n\tCTL_NET                           = 0x4\n\tCTL_QUERY                         = -0x2\n\tDIOCBSFLUSH                       = 0x20006478\n\tDLT_A429                          = 0xb8\n\tDLT_A653_ICM                      = 0xb9\n\tDLT_AIRONET_HEADER                = 0x78\n\tDLT_AOS                           = 0xde\n\tDLT_APPLE_IP_OVER_IEEE1394        = 0x8a\n\tDLT_ARCNET                        = 0x7\n\tDLT_ARCNET_LINUX                  = 0x81\n\tDLT_ATM_CLIP                      = 0x13\n\tDLT_ATM_RFC1483                   = 0xb\n\tDLT_AURORA                        = 0x7e\n\tDLT_AX25                          = 0x3\n\tDLT_AX25_KISS                     = 0xca\n\tDLT_BACNET_MS_TP                  = 0xa5\n\tDLT_BLUETOOTH_HCI_H4              = 0xbb\n\tDLT_BLUETOOTH_HCI_H4_WITH_PHDR    = 0xc9\n\tDLT_CAN20B                        = 0xbe\n\tDLT_CAN_SOCKETCAN                 = 0xe3\n\tDLT_CHAOS                         = 0x5\n\tDLT_CISCO_IOS                     = 0x76\n\tDLT_C_HDLC                        = 0x68\n\tDLT_C_HDLC_WITH_DIR               = 0xcd\n\tDLT_DECT                          = 0xdd\n\tDLT_DOCSIS                        = 0x8f\n\tDLT_ECONET                        = 0x73\n\tDLT_EN10MB                        = 0x1\n\tDLT_EN3MB                         = 0x2\n\tDLT_ENC                           = 0x6d\n\tDLT_ERF                           = 0xc5\n\tDLT_ERF_ETH                       = 0xaf\n\tDLT_ERF_POS                       = 0xb0\n\tDLT_FC_2                          = 0xe0\n\tDLT_FC_2_WITH_FRAME_DELIMS        = 0xe1\n\tDLT_FDDI                          = 0xa\n\tDLT_FLEXRAY                       = 0xd2\n\tDLT_FRELAY                        = 0x6b\n\tDLT_FRELAY_WITH_DIR               = 0xce\n\tDLT_GCOM_SERIAL                   = 0xad\n\tDLT_GCOM_T1E1                     = 0xac\n\tDLT_GPF_F                         = 0xab\n\tDLT_GPF_T                         = 0xaa\n\tDLT_GPRS_LLC                      = 0xa9\n\tDLT_GSMTAP_ABIS                   = 0xda\n\tDLT_GSMTAP_UM                     = 0xd9\n\tDLT_HDLC                          = 0x10\n\tDLT_HHDLC                         = 0x79\n\tDLT_HIPPI                         = 0xf\n\tDLT_IBM_SN                        = 0x92\n\tDLT_IBM_SP                        = 0x91\n\tDLT_IEEE802                       = 0x6\n\tDLT_IEEE802_11                    = 0x69\n\tDLT_IEEE802_11_RADIO              = 0x7f\n\tDLT_IEEE802_11_RADIO_AVS          = 0xa3\n\tDLT_IEEE802_15_4                  = 0xc3\n\tDLT_IEEE802_15_4_LINUX            = 0xbf\n\tDLT_IEEE802_15_4_NONASK_PHY       = 0xd7\n\tDLT_IEEE802_16_MAC_CPS            = 0xbc\n\tDLT_IEEE802_16_MAC_CPS_RADIO      = 0xc1\n\tDLT_IPMB                          = 0xc7\n\tDLT_IPMB_LINUX                    = 0xd1\n\tDLT_IPNET                         = 0xe2\n\tDLT_IPV4                          = 0xe4\n\tDLT_IPV6                          = 0xe5\n\tDLT_IP_OVER_FC                    = 0x7a\n\tDLT_JUNIPER_ATM1                  = 0x89\n\tDLT_JUNIPER_ATM2                  = 0x87\n\tDLT_JUNIPER_CHDLC                 = 0xb5\n\tDLT_JUNIPER_ES                    = 0x84\n\tDLT_JUNIPER_ETHER                 = 0xb2\n\tDLT_JUNIPER_FRELAY                = 0xb4\n\tDLT_JUNIPER_GGSN                  = 0x85\n\tDLT_JUNIPER_ISM                   = 0xc2\n\tDLT_JUNIPER_MFR                   = 0x86\n\tDLT_JUNIPER_MLFR                  = 0x83\n\tDLT_JUNIPER_MLPPP                 = 0x82\n\tDLT_JUNIPER_MONITOR               = 0xa4\n\tDLT_JUNIPER_PIC_PEER              = 0xae\n\tDLT_JUNIPER_PPP                   = 0xb3\n\tDLT_JUNIPER_PPPOE                 = 0xa7\n\tDLT_JUNIPER_PPPOE_ATM             = 0xa8\n\tDLT_JUNIPER_SERVICES              = 0x88\n\tDLT_JUNIPER_ST                    = 0xc8\n\tDLT_JUNIPER_VP                    = 0xb7\n\tDLT_LAPB_WITH_DIR                 = 0xcf\n\tDLT_LAPD                          = 0xcb\n\tDLT_LIN                           = 0xd4\n\tDLT_LINUX_EVDEV                   = 0xd8\n\tDLT_LINUX_IRDA                    = 0x90\n\tDLT_LINUX_LAPD                    = 0xb1\n\tDLT_LINUX_SLL                     = 0x71\n\tDLT_LOOP                          = 0x6c\n\tDLT_LTALK                         = 0x72\n\tDLT_MFR                           = 0xb6\n\tDLT_MOST                          = 0xd3\n\tDLT_MPLS                          = 0xdb\n\tDLT_MTP2                          = 0x8c\n\tDLT_MTP2_WITH_PHDR                = 0x8b\n\tDLT_MTP3                          = 0x8d\n\tDLT_NULL                          = 0x0\n\tDLT_PCI_EXP                       = 0x7d\n\tDLT_PFLOG                         = 0x75\n\tDLT_PFSYNC                        = 0x12\n\tDLT_PPI                           = 0xc0\n\tDLT_PPP                           = 0x9\n\tDLT_PPP_BSDOS                     = 0xe\n\tDLT_PPP_ETHER                     = 0x33\n\tDLT_PPP_PPPD                      = 0xa6\n\tDLT_PPP_SERIAL                    = 0x32\n\tDLT_PPP_WITH_DIR                  = 0xcc\n\tDLT_PRISM_HEADER                  = 0x77\n\tDLT_PRONET                        = 0x4\n\tDLT_RAIF1                         = 0xc6\n\tDLT_RAW                           = 0xc\n\tDLT_RAWAF_MASK                    = 0x2240000\n\tDLT_RIO                           = 0x7c\n\tDLT_SCCP                          = 0x8e\n\tDLT_SITA                          = 0xc4\n\tDLT_SLIP                          = 0x8\n\tDLT_SLIP_BSDOS                    = 0xd\n\tDLT_SUNATM                        = 0x7b\n\tDLT_SYMANTEC_FIREWALL             = 0x63\n\tDLT_TZSP                          = 0x80\n\tDLT_USB                           = 0xba\n\tDLT_USB_LINUX                     = 0xbd\n\tDLT_USB_LINUX_MMAPPED             = 0xdc\n\tDLT_WIHART                        = 0xdf\n\tDLT_X2E_SERIAL                    = 0xd5\n\tDLT_X2E_XORAYA                    = 0xd6\n\tDT_BLK                            = 0x6\n\tDT_CHR                            = 0x2\n\tDT_DIR                            = 0x4\n\tDT_FIFO                           = 0x1\n\tDT_LNK                            = 0xa\n\tDT_REG                            = 0x8\n\tDT_SOCK                           = 0xc\n\tDT_UNKNOWN                        = 0x0\n\tDT_WHT                            = 0xe\n\tECHO                              = 0x8\n\tECHOCTL                           = 0x40\n\tECHOE                             = 0x2\n\tECHOK                             = 0x4\n\tECHOKE                            = 0x1\n\tECHONL                            = 0x10\n\tECHOPRT                           = 0x20\n\tEMUL_LINUX                        = 0x1\n\tEMUL_LINUX32                      = 0x5\n\tEMUL_MAXID                        = 0x6\n\tEN_SW_CTL_INF                     = 0x1000\n\tEN_SW_CTL_PREC                    = 0x300\n\tEN_SW_CTL_ROUND                   = 0xc00\n\tEN_SW_DATACHAIN                   = 0x80\n\tEN_SW_DENORM                      = 0x2\n\tEN_SW_INVOP                       = 0x1\n\tEN_SW_OVERFLOW                    = 0x8\n\tEN_SW_PRECLOSS                    = 0x20\n\tEN_SW_UNDERFLOW                   = 0x10\n\tEN_SW_ZERODIV                     = 0x4\n\tETHERCAP_JUMBO_MTU                = 0x4\n\tETHERCAP_VLAN_HWTAGGING           = 0x2\n\tETHERCAP_VLAN_MTU                 = 0x1\n\tETHERMIN                          = 0x2e\n\tETHERMTU                          = 0x5dc\n\tETHERMTU_JUMBO                    = 0x2328\n\tETHERTYPE_8023                    = 0x4\n\tETHERTYPE_AARP                    = 0x80f3\n\tETHERTYPE_ACCTON                  = 0x8390\n\tETHERTYPE_AEONIC                  = 0x8036\n\tETHERTYPE_ALPHA                   = 0x814a\n\tETHERTYPE_AMBER                   = 0x6008\n\tETHERTYPE_AMOEBA                  = 0x8145\n\tETHERTYPE_APOLLO                  = 0x80f7\n\tETHERTYPE_APOLLODOMAIN            = 0x8019\n\tETHERTYPE_APPLETALK               = 0x809b\n\tETHERTYPE_APPLITEK                = 0x80c7\n\tETHERTYPE_ARGONAUT                = 0x803a\n\tETHERTYPE_ARP                     = 0x806\n\tETHERTYPE_AT                      = 0x809b\n\tETHERTYPE_ATALK                   = 0x809b\n\tETHERTYPE_ATOMIC                  = 0x86df\n\tETHERTYPE_ATT                     = 0x8069\n\tETHERTYPE_ATTSTANFORD             = 0x8008\n\tETHERTYPE_AUTOPHON                = 0x806a\n\tETHERTYPE_AXIS                    = 0x8856\n\tETHERTYPE_BCLOOP                  = 0x9003\n\tETHERTYPE_BOFL                    = 0x8102\n\tETHERTYPE_CABLETRON               = 0x7034\n\tETHERTYPE_CHAOS                   = 0x804\n\tETHERTYPE_COMDESIGN               = 0x806c\n\tETHERTYPE_COMPUGRAPHIC            = 0x806d\n\tETHERTYPE_COUNTERPOINT            = 0x8062\n\tETHERTYPE_CRONUS                  = 0x8004\n\tETHERTYPE_CRONUSVLN               = 0x8003\n\tETHERTYPE_DCA                     = 0x1234\n\tETHERTYPE_DDE                     = 0x807b\n\tETHERTYPE_DEBNI                   = 0xaaaa\n\tETHERTYPE_DECAM                   = 0x8048\n\tETHERTYPE_DECCUST                 = 0x6006\n\tETHERTYPE_DECDIAG                 = 0x6005\n\tETHERTYPE_DECDNS                  = 0x803c\n\tETHERTYPE_DECDTS                  = 0x803e\n\tETHERTYPE_DECEXPER                = 0x6000\n\tETHERTYPE_DECLAST                 = 0x8041\n\tETHERTYPE_DECLTM                  = 0x803f\n\tETHERTYPE_DECMUMPS                = 0x6009\n\tETHERTYPE_DECNETBIOS              = 0x8040\n\tETHERTYPE_DELTACON                = 0x86de\n\tETHERTYPE_DIDDLE                  = 0x4321\n\tETHERTYPE_DLOG1                   = 0x660\n\tETHERTYPE_DLOG2                   = 0x661\n\tETHERTYPE_DN                      = 0x6003\n\tETHERTYPE_DOGFIGHT                = 0x1989\n\tETHERTYPE_DSMD                    = 0x8039\n\tETHERTYPE_ECMA                    = 0x803\n\tETHERTYPE_ENCRYPT                 = 0x803d\n\tETHERTYPE_ES                      = 0x805d\n\tETHERTYPE_EXCELAN                 = 0x8010\n\tETHERTYPE_EXPERDATA               = 0x8049\n\tETHERTYPE_FLIP                    = 0x8146\n\tETHERTYPE_FLOWCONTROL             = 0x8808\n\tETHERTYPE_FRARP                   = 0x808\n\tETHERTYPE_GENDYN                  = 0x8068\n\tETHERTYPE_HAYES                   = 0x8130\n\tETHERTYPE_HIPPI_FP                = 0x8180\n\tETHERTYPE_HITACHI                 = 0x8820\n\tETHERTYPE_HP                      = 0x8005\n\tETHERTYPE_IEEEPUP                 = 0xa00\n\tETHERTYPE_IEEEPUPAT               = 0xa01\n\tETHERTYPE_IMLBL                   = 0x4c42\n\tETHERTYPE_IMLBLDIAG               = 0x424c\n\tETHERTYPE_IP                      = 0x800\n\tETHERTYPE_IPAS                    = 0x876c\n\tETHERTYPE_IPV6                    = 0x86dd\n\tETHERTYPE_IPX                     = 0x8137\n\tETHERTYPE_IPXNEW                  = 0x8037\n\tETHERTYPE_KALPANA                 = 0x8582\n\tETHERTYPE_LANBRIDGE               = 0x8038\n\tETHERTYPE_LANPROBE                = 0x8888\n\tETHERTYPE_LAT                     = 0x6004\n\tETHERTYPE_LBACK                   = 0x9000\n\tETHERTYPE_LITTLE                  = 0x8060\n\tETHERTYPE_LOGICRAFT               = 0x8148\n\tETHERTYPE_LOOPBACK                = 0x9000\n\tETHERTYPE_MATRA                   = 0x807a\n\tETHERTYPE_MAX                     = 0xffff\n\tETHERTYPE_MERIT                   = 0x807c\n\tETHERTYPE_MICP                    = 0x873a\n\tETHERTYPE_MOPDL                   = 0x6001\n\tETHERTYPE_MOPRC                   = 0x6002\n\tETHERTYPE_MOTOROLA                = 0x818d\n\tETHERTYPE_MPLS                    = 0x8847\n\tETHERTYPE_MPLS_MCAST              = 0x8848\n\tETHERTYPE_MUMPS                   = 0x813f\n\tETHERTYPE_NBPCC                   = 0x3c04\n\tETHERTYPE_NBPCLAIM                = 0x3c09\n\tETHERTYPE_NBPCLREQ                = 0x3c05\n\tETHERTYPE_NBPCLRSP                = 0x3c06\n\tETHERTYPE_NBPCREQ                 = 0x3c02\n\tETHERTYPE_NBPCRSP                 = 0x3c03\n\tETHERTYPE_NBPDG                   = 0x3c07\n\tETHERTYPE_NBPDGB                  = 0x3c08\n\tETHERTYPE_NBPDLTE                 = 0x3c0a\n\tETHERTYPE_NBPRAR                  = 0x3c0c\n\tETHERTYPE_NBPRAS                  = 0x3c0b\n\tETHERTYPE_NBPRST                  = 0x3c0d\n\tETHERTYPE_NBPSCD                  = 0x3c01\n\tETHERTYPE_NBPVCD                  = 0x3c00\n\tETHERTYPE_NBS                     = 0x802\n\tETHERTYPE_NCD                     = 0x8149\n\tETHERTYPE_NESTAR                  = 0x8006\n\tETHERTYPE_NETBEUI                 = 0x8191\n\tETHERTYPE_NOVELL                  = 0x8138\n\tETHERTYPE_NS                      = 0x600\n\tETHERTYPE_NSAT                    = 0x601\n\tETHERTYPE_NSCOMPAT                = 0x807\n\tETHERTYPE_NTRAILER                = 0x10\n\tETHERTYPE_OS9                     = 0x7007\n\tETHERTYPE_OS9NET                  = 0x7009\n\tETHERTYPE_PACER                   = 0x80c6\n\tETHERTYPE_PAE                     = 0x888e\n\tETHERTYPE_PCS                     = 0x4242\n\tETHERTYPE_PLANNING                = 0x8044\n\tETHERTYPE_PPP                     = 0x880b\n\tETHERTYPE_PPPOE                   = 0x8864\n\tETHERTYPE_PPPOEDISC               = 0x8863\n\tETHERTYPE_PRIMENTS                = 0x7031\n\tETHERTYPE_PUP                     = 0x200\n\tETHERTYPE_PUPAT                   = 0x200\n\tETHERTYPE_RACAL                   = 0x7030\n\tETHERTYPE_RATIONAL                = 0x8150\n\tETHERTYPE_RAWFR                   = 0x6559\n\tETHERTYPE_RCL                     = 0x1995\n\tETHERTYPE_RDP                     = 0x8739\n\tETHERTYPE_RETIX                   = 0x80f2\n\tETHERTYPE_REVARP                  = 0x8035\n\tETHERTYPE_SCA                     = 0x6007\n\tETHERTYPE_SECTRA                  = 0x86db\n\tETHERTYPE_SECUREDATA              = 0x876d\n\tETHERTYPE_SGITW                   = 0x817e\n\tETHERTYPE_SG_BOUNCE               = 0x8016\n\tETHERTYPE_SG_DIAG                 = 0x8013\n\tETHERTYPE_SG_NETGAMES             = 0x8014\n\tETHERTYPE_SG_RESV                 = 0x8015\n\tETHERTYPE_SIMNET                  = 0x5208\n\tETHERTYPE_SLOWPROTOCOLS           = 0x8809\n\tETHERTYPE_SNA                     = 0x80d5\n\tETHERTYPE_SNMP                    = 0x814c\n\tETHERTYPE_SONIX                   = 0xfaf5\n\tETHERTYPE_SPIDER                  = 0x809f\n\tETHERTYPE_SPRITE                  = 0x500\n\tETHERTYPE_STP                     = 0x8181\n\tETHERTYPE_TALARIS                 = 0x812b\n\tETHERTYPE_TALARISMC               = 0x852b\n\tETHERTYPE_TCPCOMP                 = 0x876b\n\tETHERTYPE_TCPSM                   = 0x9002\n\tETHERTYPE_TEC                     = 0x814f\n\tETHERTYPE_TIGAN                   = 0x802f\n\tETHERTYPE_TRAIL                   = 0x1000\n\tETHERTYPE_TRANSETHER              = 0x6558\n\tETHERTYPE_TYMSHARE                = 0x802e\n\tETHERTYPE_UBBST                   = 0x7005\n\tETHERTYPE_UBDEBUG                 = 0x900\n\tETHERTYPE_UBDIAGLOOP              = 0x7002\n\tETHERTYPE_UBDL                    = 0x7000\n\tETHERTYPE_UBNIU                   = 0x7001\n\tETHERTYPE_UBNMC                   = 0x7003\n\tETHERTYPE_VALID                   = 0x1600\n\tETHERTYPE_VARIAN                  = 0x80dd\n\tETHERTYPE_VAXELN                  = 0x803b\n\tETHERTYPE_VEECO                   = 0x8067\n\tETHERTYPE_VEXP                    = 0x805b\n\tETHERTYPE_VGLAB                   = 0x8131\n\tETHERTYPE_VINES                   = 0xbad\n\tETHERTYPE_VINESECHO               = 0xbaf\n\tETHERTYPE_VINESLOOP               = 0xbae\n\tETHERTYPE_VITAL                   = 0xff00\n\tETHERTYPE_VLAN                    = 0x8100\n\tETHERTYPE_VLTLMAN                 = 0x8080\n\tETHERTYPE_VPROD                   = 0x805c\n\tETHERTYPE_VURESERVED              = 0x8147\n\tETHERTYPE_WATERLOO                = 0x8130\n\tETHERTYPE_WELLFLEET               = 0x8103\n\tETHERTYPE_X25                     = 0x805\n\tETHERTYPE_X75                     = 0x801\n\tETHERTYPE_XNSSM                   = 0x9001\n\tETHERTYPE_XTP                     = 0x817d\n\tETHER_ADDR_LEN                    = 0x6\n\tETHER_CRC_LEN                     = 0x4\n\tETHER_CRC_POLY_BE                 = 0x4c11db6\n\tETHER_CRC_POLY_LE                 = 0xedb88320\n\tETHER_HDR_LEN                     = 0xe\n\tETHER_MAX_LEN                     = 0x5ee\n\tETHER_MAX_LEN_JUMBO               = 0x233a\n\tETHER_MIN_LEN                     = 0x40\n\tETHER_PPPOE_ENCAP_LEN             = 0x8\n\tETHER_TYPE_LEN                    = 0x2\n\tETHER_VLAN_ENCAP_LEN              = 0x4\n\tEVFILT_AIO                        = 0x2\n\tEVFILT_PROC                       = 0x4\n\tEVFILT_READ                       = 0x0\n\tEVFILT_SIGNAL                     = 0x5\n\tEVFILT_SYSCOUNT                   = 0x7\n\tEVFILT_TIMER                      = 0x6\n\tEVFILT_VNODE                      = 0x3\n\tEVFILT_WRITE                      = 0x1\n\tEV_ADD                            = 0x1\n\tEV_CLEAR                          = 0x20\n\tEV_DELETE                         = 0x2\n\tEV_DISABLE                        = 0x8\n\tEV_ENABLE                         = 0x4\n\tEV_EOF                            = 0x8000\n\tEV_ERROR                          = 0x4000\n\tEV_FLAG1                          = 0x2000\n\tEV_ONESHOT                        = 0x10\n\tEV_SYSFLAGS                       = 0xf000\n\tEXTA                              = 0x4b00\n\tEXTATTR_CMD_START                 = 0x1\n\tEXTATTR_CMD_STOP                  = 0x2\n\tEXTATTR_NAMESPACE_SYSTEM          = 0x2\n\tEXTATTR_NAMESPACE_USER            = 0x1\n\tEXTB                              = 0x9600\n\tEXTPROC                           = 0x800\n\tFD_CLOEXEC                        = 0x1\n\tFD_SETSIZE                        = 0x100\n\tFLUSHO                            = 0x800000\n\tF_CLOSEM                          = 0xa\n\tF_DUPFD                           = 0x0\n\tF_DUPFD_CLOEXEC                   = 0xc\n\tF_FSCTL                           = -0x80000000\n\tF_FSDIRMASK                       = 0x70000000\n\tF_FSIN                            = 0x10000000\n\tF_FSINOUT                         = 0x30000000\n\tF_FSOUT                           = 0x20000000\n\tF_FSPRIV                          = 0x8000\n\tF_FSVOID                          = 0x40000000\n\tF_GETFD                           = 0x1\n\tF_GETFL                           = 0x3\n\tF_GETLK                           = 0x7\n\tF_GETNOSIGPIPE                    = 0xd\n\tF_GETOWN                          = 0x5\n\tF_MAXFD                           = 0xb\n\tF_OK                              = 0x0\n\tF_PARAM_MASK                      = 0xfff\n\tF_PARAM_MAX                       = 0xfff\n\tF_RDLCK                           = 0x1\n\tF_SETFD                           = 0x2\n\tF_SETFL                           = 0x4\n\tF_SETLK                           = 0x8\n\tF_SETLKW                          = 0x9\n\tF_SETNOSIGPIPE                    = 0xe\n\tF_SETOWN                          = 0x6\n\tF_UNLCK                           = 0x2\n\tF_WRLCK                           = 0x3\n\tHUPCL                             = 0x4000\n\tHW_MACHINE                        = 0x1\n\tICANON                            = 0x100\n\tICMP6_FILTER                      = 0x12\n\tICRNL                             = 0x100\n\tIEXTEN                            = 0x400\n\tIFAN_ARRIVAL                      = 0x0\n\tIFAN_DEPARTURE                    = 0x1\n\tIFA_ROUTE                         = 0x1\n\tIFF_ALLMULTI                      = 0x200\n\tIFF_BROADCAST                     = 0x2\n\tIFF_CANTCHANGE                    = 0x8f52\n\tIFF_DEBUG                         = 0x4\n\tIFF_LINK0                         = 0x1000\n\tIFF_LINK1                         = 0x2000\n\tIFF_LINK2                         = 0x4000\n\tIFF_LOOPBACK                      = 0x8\n\tIFF_MULTICAST                     = 0x8000\n\tIFF_NOARP                         = 0x80\n\tIFF_NOTRAILERS                    = 0x20\n\tIFF_OACTIVE                       = 0x400\n\tIFF_POINTOPOINT                   = 0x10\n\tIFF_PROMISC                       = 0x100\n\tIFF_RUNNING                       = 0x40\n\tIFF_SIMPLEX                       = 0x800\n\tIFF_UP                            = 0x1\n\tIFNAMSIZ                          = 0x10\n\tIFT_1822                          = 0x2\n\tIFT_A12MPPSWITCH                  = 0x82\n\tIFT_AAL2                          = 0xbb\n\tIFT_AAL5                          = 0x31\n\tIFT_ADSL                          = 0x5e\n\tIFT_AFLANE8023                    = 0x3b\n\tIFT_AFLANE8025                    = 0x3c\n\tIFT_ARAP                          = 0x58\n\tIFT_ARCNET                        = 0x23\n\tIFT_ARCNETPLUS                    = 0x24\n\tIFT_ASYNC                         = 0x54\n\tIFT_ATM                           = 0x25\n\tIFT_ATMDXI                        = 0x69\n\tIFT_ATMFUNI                       = 0x6a\n\tIFT_ATMIMA                        = 0x6b\n\tIFT_ATMLOGICAL                    = 0x50\n\tIFT_ATMRADIO                      = 0xbd\n\tIFT_ATMSUBINTERFACE               = 0x86\n\tIFT_ATMVCIENDPT                   = 0xc2\n\tIFT_ATMVIRTUAL                    = 0x95\n\tIFT_BGPPOLICYACCOUNTING           = 0xa2\n\tIFT_BRIDGE                        = 0xd1\n\tIFT_BSC                           = 0x53\n\tIFT_CARP                          = 0xf8\n\tIFT_CCTEMUL                       = 0x3d\n\tIFT_CEPT                          = 0x13\n\tIFT_CES                           = 0x85\n\tIFT_CHANNEL                       = 0x46\n\tIFT_CNR                           = 0x55\n\tIFT_COFFEE                        = 0x84\n\tIFT_COMPOSITELINK                 = 0x9b\n\tIFT_DCN                           = 0x8d\n\tIFT_DIGITALPOWERLINE              = 0x8a\n\tIFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba\n\tIFT_DLSW                          = 0x4a\n\tIFT_DOCSCABLEDOWNSTREAM           = 0x80\n\tIFT_DOCSCABLEMACLAYER             = 0x7f\n\tIFT_DOCSCABLEUPSTREAM             = 0x81\n\tIFT_DOCSCABLEUPSTREAMCHANNEL      = 0xcd\n\tIFT_DS0                           = 0x51\n\tIFT_DS0BUNDLE                     = 0x52\n\tIFT_DS1FDL                        = 0xaa\n\tIFT_DS3                           = 0x1e\n\tIFT_DTM                           = 0x8c\n\tIFT_DVBASILN                      = 0xac\n\tIFT_DVBASIOUT                     = 0xad\n\tIFT_DVBRCCDOWNSTREAM              = 0x93\n\tIFT_DVBRCCMACLAYER                = 0x92\n\tIFT_DVBRCCUPSTREAM                = 0x94\n\tIFT_ECONET                        = 0xce\n\tIFT_EON                           = 0x19\n\tIFT_EPLRS                         = 0x57\n\tIFT_ESCON                         = 0x49\n\tIFT_ETHER                         = 0x6\n\tIFT_FAITH                         = 0xf2\n\tIFT_FAST                          = 0x7d\n\tIFT_FASTETHER                     = 0x3e\n\tIFT_FASTETHERFX                   = 0x45\n\tIFT_FDDI                          = 0xf\n\tIFT_FIBRECHANNEL                  = 0x38\n\tIFT_FRAMERELAYINTERCONNECT        = 0x3a\n\tIFT_FRAMERELAYMPI                 = 0x5c\n\tIFT_FRDLCIENDPT                   = 0xc1\n\tIFT_FRELAY                        = 0x20\n\tIFT_FRELAYDCE                     = 0x2c\n\tIFT_FRF16MFRBUNDLE                = 0xa3\n\tIFT_FRFORWARD                     = 0x9e\n\tIFT_G703AT2MB                     = 0x43\n\tIFT_G703AT64K                     = 0x42\n\tIFT_GIF                           = 0xf0\n\tIFT_GIGABITETHERNET               = 0x75\n\tIFT_GR303IDT                      = 0xb2\n\tIFT_GR303RDT                      = 0xb1\n\tIFT_H323GATEKEEPER                = 0xa4\n\tIFT_H323PROXY                     = 0xa5\n\tIFT_HDH1822                       = 0x3\n\tIFT_HDLC                          = 0x76\n\tIFT_HDSL2                         = 0xa8\n\tIFT_HIPERLAN2                     = 0xb7\n\tIFT_HIPPI                         = 0x2f\n\tIFT_HIPPIINTERFACE                = 0x39\n\tIFT_HOSTPAD                       = 0x5a\n\tIFT_HSSI                          = 0x2e\n\tIFT_HY                            = 0xe\n\tIFT_IBM370PARCHAN                 = 0x48\n\tIFT_IDSL                          = 0x9a\n\tIFT_IEEE1394                      = 0x90\n\tIFT_IEEE80211                     = 0x47\n\tIFT_IEEE80212                     = 0x37\n\tIFT_IEEE8023ADLAG                 = 0xa1\n\tIFT_IFGSN                         = 0x91\n\tIFT_IMT                           = 0xbe\n\tIFT_INFINIBAND                    = 0xc7\n\tIFT_INTERLEAVE                    = 0x7c\n\tIFT_IP                            = 0x7e\n\tIFT_IPFORWARD                     = 0x8e\n\tIFT_IPOVERATM                     = 0x72\n\tIFT_IPOVERCDLC                    = 0x6d\n\tIFT_IPOVERCLAW                    = 0x6e\n\tIFT_IPSWITCH                      = 0x4e\n\tIFT_ISDN                          = 0x3f\n\tIFT_ISDNBASIC                     = 0x14\n\tIFT_ISDNPRIMARY                   = 0x15\n\tIFT_ISDNS                         = 0x4b\n\tIFT_ISDNU                         = 0x4c\n\tIFT_ISO88022LLC                   = 0x29\n\tIFT_ISO88023                      = 0x7\n\tIFT_ISO88024                      = 0x8\n\tIFT_ISO88025                      = 0x9\n\tIFT_ISO88025CRFPINT               = 0x62\n\tIFT_ISO88025DTR                   = 0x56\n\tIFT_ISO88025FIBER                 = 0x73\n\tIFT_ISO88026                      = 0xa\n\tIFT_ISUP                          = 0xb3\n\tIFT_L2VLAN                        = 0x87\n\tIFT_L3IPVLAN                      = 0x88\n\tIFT_L3IPXVLAN                     = 0x89\n\tIFT_LAPB                          = 0x10\n\tIFT_LAPD                          = 0x4d\n\tIFT_LAPF                          = 0x77\n\tIFT_LINEGROUP                     = 0xd2\n\tIFT_LOCALTALK                     = 0x2a\n\tIFT_LOOP                          = 0x18\n\tIFT_MEDIAMAILOVERIP               = 0x8b\n\tIFT_MFSIGLINK                     = 0xa7\n\tIFT_MIOX25                        = 0x26\n\tIFT_MODEM                         = 0x30\n\tIFT_MPC                           = 0x71\n\tIFT_MPLS                          = 0xa6\n\tIFT_MPLSTUNNEL                    = 0x96\n\tIFT_MSDSL                         = 0x8f\n\tIFT_MVL                           = 0xbf\n\tIFT_MYRINET                       = 0x63\n\tIFT_NFAS                          = 0xaf\n\tIFT_NSIP                          = 0x1b\n\tIFT_OPTICALCHANNEL                = 0xc3\n\tIFT_OPTICALTRANSPORT              = 0xc4\n\tIFT_OTHER                         = 0x1\n\tIFT_P10                           = 0xc\n\tIFT_P80                           = 0xd\n\tIFT_PARA                          = 0x22\n\tIFT_PFLOG                         = 0xf5\n\tIFT_PFSYNC                        = 0xf6\n\tIFT_PLC                           = 0xae\n\tIFT_PON155                        = 0xcf\n\tIFT_PON622                        = 0xd0\n\tIFT_POS                           = 0xab\n\tIFT_PPP                           = 0x17\n\tIFT_PPPMULTILINKBUNDLE            = 0x6c\n\tIFT_PROPATM                       = 0xc5\n\tIFT_PROPBWAP2MP                   = 0xb8\n\tIFT_PROPCNLS                      = 0x59\n\tIFT_PROPDOCSWIRELESSDOWNSTREAM    = 0xb5\n\tIFT_PROPDOCSWIRELESSMACLAYER      = 0xb4\n\tIFT_PROPDOCSWIRELESSUPSTREAM      = 0xb6\n\tIFT_PROPMUX                       = 0x36\n\tIFT_PROPVIRTUAL                   = 0x35\n\tIFT_PROPWIRELESSP2P               = 0x9d\n\tIFT_PTPSERIAL                     = 0x16\n\tIFT_PVC                           = 0xf1\n\tIFT_Q2931                         = 0xc9\n\tIFT_QLLC                          = 0x44\n\tIFT_RADIOMAC                      = 0xbc\n\tIFT_RADSL                         = 0x5f\n\tIFT_REACHDSL                      = 0xc0\n\tIFT_RFC1483                       = 0x9f\n\tIFT_RS232                         = 0x21\n\tIFT_RSRB                          = 0x4f\n\tIFT_SDLC                          = 0x11\n\tIFT_SDSL                          = 0x60\n\tIFT_SHDSL                         = 0xa9\n\tIFT_SIP                           = 0x1f\n\tIFT_SIPSIG                        = 0xcc\n\tIFT_SIPTG                         = 0xcb\n\tIFT_SLIP                          = 0x1c\n\tIFT_SMDSDXI                       = 0x2b\n\tIFT_SMDSICIP                      = 0x34\n\tIFT_SONET                         = 0x27\n\tIFT_SONETOVERHEADCHANNEL          = 0xb9\n\tIFT_SONETPATH                     = 0x32\n\tIFT_SONETVT                       = 0x33\n\tIFT_SRP                           = 0x97\n\tIFT_SS7SIGLINK                    = 0x9c\n\tIFT_STACKTOSTACK                  = 0x6f\n\tIFT_STARLAN                       = 0xb\n\tIFT_STF                           = 0xd7\n\tIFT_T1                            = 0x12\n\tIFT_TDLC                          = 0x74\n\tIFT_TELINK                        = 0xc8\n\tIFT_TERMPAD                       = 0x5b\n\tIFT_TR008                         = 0xb0\n\tIFT_TRANSPHDLC                    = 0x7b\n\tIFT_TUNNEL                        = 0x83\n\tIFT_ULTRA                         = 0x1d\n\tIFT_USB                           = 0xa0\n\tIFT_V11                           = 0x40\n\tIFT_V35                           = 0x2d\n\tIFT_V36                           = 0x41\n\tIFT_V37                           = 0x78\n\tIFT_VDSL                          = 0x61\n\tIFT_VIRTUALIPADDRESS              = 0x70\n\tIFT_VIRTUALTG                     = 0xca\n\tIFT_VOICEDID                      = 0xd5\n\tIFT_VOICEEM                       = 0x64\n\tIFT_VOICEEMFGD                    = 0xd3\n\tIFT_VOICEENCAP                    = 0x67\n\tIFT_VOICEFGDEANA                  = 0xd4\n\tIFT_VOICEFXO                      = 0x65\n\tIFT_VOICEFXS                      = 0x66\n\tIFT_VOICEOVERATM                  = 0x98\n\tIFT_VOICEOVERCABLE                = 0xc6\n\tIFT_VOICEOVERFRAMERELAY           = 0x99\n\tIFT_VOICEOVERIP                   = 0x68\n\tIFT_X213                          = 0x5d\n\tIFT_X25                           = 0x5\n\tIFT_X25DDN                        = 0x4\n\tIFT_X25HUNTGROUP                  = 0x7a\n\tIFT_X25MLP                        = 0x79\n\tIFT_X25PLE                        = 0x28\n\tIFT_XETHER                        = 0x1a\n\tIGNBRK                            = 0x1\n\tIGNCR                             = 0x80\n\tIGNPAR                            = 0x4\n\tIMAXBEL                           = 0x2000\n\tINLCR                             = 0x40\n\tINPCK                             = 0x10\n\tIN_CLASSA_HOST                    = 0xffffff\n\tIN_CLASSA_MAX                     = 0x80\n\tIN_CLASSA_NET                     = 0xff000000\n\tIN_CLASSA_NSHIFT                  = 0x18\n\tIN_CLASSB_HOST                    = 0xffff\n\tIN_CLASSB_MAX                     = 0x10000\n\tIN_CLASSB_NET                     = 0xffff0000\n\tIN_CLASSB_NSHIFT                  = 0x10\n\tIN_CLASSC_HOST                    = 0xff\n\tIN_CLASSC_NET                     = 0xffffff00\n\tIN_CLASSC_NSHIFT                  = 0x8\n\tIN_CLASSD_HOST                    = 0xfffffff\n\tIN_CLASSD_NET                     = 0xf0000000\n\tIN_CLASSD_NSHIFT                  = 0x1c\n\tIN_LOOPBACKNET                    = 0x7f\n\tIPPROTO_AH                        = 0x33\n\tIPPROTO_CARP                      = 0x70\n\tIPPROTO_DONE                      = 0x101\n\tIPPROTO_DSTOPTS                   = 0x3c\n\tIPPROTO_EGP                       = 0x8\n\tIPPROTO_ENCAP                     = 0x62\n\tIPPROTO_EON                       = 0x50\n\tIPPROTO_ESP                       = 0x32\n\tIPPROTO_ETHERIP                   = 0x61\n\tIPPROTO_FRAGMENT                  = 0x2c\n\tIPPROTO_GGP                       = 0x3\n\tIPPROTO_GRE                       = 0x2f\n\tIPPROTO_HOPOPTS                   = 0x0\n\tIPPROTO_ICMP                      = 0x1\n\tIPPROTO_ICMPV6                    = 0x3a\n\tIPPROTO_IDP                       = 0x16\n\tIPPROTO_IGMP                      = 0x2\n\tIPPROTO_IP                        = 0x0\n\tIPPROTO_IPCOMP                    = 0x6c\n\tIPPROTO_IPIP                      = 0x4\n\tIPPROTO_IPV4                      = 0x4\n\tIPPROTO_IPV6                      = 0x29\n\tIPPROTO_IPV6_ICMP                 = 0x3a\n\tIPPROTO_MAX                       = 0x100\n\tIPPROTO_MAXID                     = 0x34\n\tIPPROTO_MOBILE                    = 0x37\n\tIPPROTO_NONE                      = 0x3b\n\tIPPROTO_PFSYNC                    = 0xf0\n\tIPPROTO_PIM                       = 0x67\n\tIPPROTO_PUP                       = 0xc\n\tIPPROTO_RAW                       = 0xff\n\tIPPROTO_ROUTING                   = 0x2b\n\tIPPROTO_RSVP                      = 0x2e\n\tIPPROTO_TCP                       = 0x6\n\tIPPROTO_TP                        = 0x1d\n\tIPPROTO_UDP                       = 0x11\n\tIPPROTO_VRRP                      = 0x70\n\tIPV6_CHECKSUM                     = 0x1a\n\tIPV6_DEFAULT_MULTICAST_HOPS       = 0x1\n\tIPV6_DEFAULT_MULTICAST_LOOP       = 0x1\n\tIPV6_DEFHLIM                      = 0x40\n\tIPV6_DONTFRAG                     = 0x3e\n\tIPV6_DSTOPTS                      = 0x32\n\tIPV6_FAITH                        = 0x1d\n\tIPV6_FLOWINFO_MASK                = 0xffffff0f\n\tIPV6_FLOWLABEL_MASK               = 0xffff0f00\n\tIPV6_FRAGTTL                      = 0x78\n\tIPV6_HLIMDEC                      = 0x1\n\tIPV6_HOPLIMIT                     = 0x2f\n\tIPV6_HOPOPTS                      = 0x31\n\tIPV6_IPSEC_POLICY                 = 0x1c\n\tIPV6_JOIN_GROUP                   = 0xc\n\tIPV6_LEAVE_GROUP                  = 0xd\n\tIPV6_MAXHLIM                      = 0xff\n\tIPV6_MAXPACKET                    = 0xffff\n\tIPV6_MMTU                         = 0x500\n\tIPV6_MULTICAST_HOPS               = 0xa\n\tIPV6_MULTICAST_IF                 = 0x9\n\tIPV6_MULTICAST_LOOP               = 0xb\n\tIPV6_NEXTHOP                      = 0x30\n\tIPV6_PATHMTU                      = 0x2c\n\tIPV6_PKTINFO                      = 0x2e\n\tIPV6_PORTRANGE                    = 0xe\n\tIPV6_PORTRANGE_DEFAULT            = 0x0\n\tIPV6_PORTRANGE_HIGH               = 0x1\n\tIPV6_PORTRANGE_LOW                = 0x2\n\tIPV6_RECVDSTOPTS                  = 0x28\n\tIPV6_RECVHOPLIMIT                 = 0x25\n\tIPV6_RECVHOPOPTS                  = 0x27\n\tIPV6_RECVPATHMTU                  = 0x2b\n\tIPV6_RECVPKTINFO                  = 0x24\n\tIPV6_RECVRTHDR                    = 0x26\n\tIPV6_RECVTCLASS                   = 0x39\n\tIPV6_RTHDR                        = 0x33\n\tIPV6_RTHDRDSTOPTS                 = 0x23\n\tIPV6_RTHDR_LOOSE                  = 0x0\n\tIPV6_RTHDR_STRICT                 = 0x1\n\tIPV6_RTHDR_TYPE_0                 = 0x0\n\tIPV6_SOCKOPT_RESERVED1            = 0x3\n\tIPV6_TCLASS                       = 0x3d\n\tIPV6_UNICAST_HOPS                 = 0x4\n\tIPV6_USE_MIN_MTU                  = 0x2a\n\tIPV6_V6ONLY                       = 0x1b\n\tIPV6_VERSION                      = 0x60\n\tIPV6_VERSION_MASK                 = 0xf0\n\tIP_ADD_MEMBERSHIP                 = 0xc\n\tIP_DEFAULT_MULTICAST_LOOP         = 0x1\n\tIP_DEFAULT_MULTICAST_TTL          = 0x1\n\tIP_DF                             = 0x4000\n\tIP_DROP_MEMBERSHIP                = 0xd\n\tIP_EF                             = 0x8000\n\tIP_ERRORMTU                       = 0x15\n\tIP_HDRINCL                        = 0x2\n\tIP_IPSEC_POLICY                   = 0x16\n\tIP_MAXPACKET                      = 0xffff\n\tIP_MAX_MEMBERSHIPS                = 0x14\n\tIP_MF                             = 0x2000\n\tIP_MINFRAGSIZE                    = 0x45\n\tIP_MINTTL                         = 0x18\n\tIP_MSS                            = 0x240\n\tIP_MULTICAST_IF                   = 0x9\n\tIP_MULTICAST_LOOP                 = 0xb\n\tIP_MULTICAST_TTL                  = 0xa\n\tIP_OFFMASK                        = 0x1fff\n\tIP_OPTIONS                        = 0x1\n\tIP_PORTRANGE                      = 0x13\n\tIP_PORTRANGE_DEFAULT              = 0x0\n\tIP_PORTRANGE_HIGH                 = 0x1\n\tIP_PORTRANGE_LOW                  = 0x2\n\tIP_RECVDSTADDR                    = 0x7\n\tIP_RECVIF                         = 0x14\n\tIP_RECVOPTS                       = 0x5\n\tIP_RECVRETOPTS                    = 0x6\n\tIP_RECVTTL                        = 0x17\n\tIP_RETOPTS                        = 0x8\n\tIP_RF                             = 0x8000\n\tIP_TOS                            = 0x3\n\tIP_TTL                            = 0x4\n\tISIG                              = 0x80\n\tISTRIP                            = 0x20\n\tIXANY                             = 0x800\n\tIXOFF                             = 0x400\n\tIXON                              = 0x200\n\tKERN_HOSTNAME                     = 0xa\n\tKERN_OSRELEASE                    = 0x2\n\tKERN_OSTYPE                       = 0x1\n\tKERN_VERSION                      = 0x4\n\tLOCK_EX                           = 0x2\n\tLOCK_NB                           = 0x4\n\tLOCK_SH                           = 0x1\n\tLOCK_UN                           = 0x8\n\tMADV_DONTNEED                     = 0x4\n\tMADV_FREE                         = 0x6\n\tMADV_NORMAL                       = 0x0\n\tMADV_RANDOM                       = 0x1\n\tMADV_SEQUENTIAL                   = 0x2\n\tMADV_SPACEAVAIL                   = 0x5\n\tMADV_WILLNEED                     = 0x3\n\tMAP_ALIGNMENT_16MB                = 0x18000000\n\tMAP_ALIGNMENT_1TB                 = 0x28000000\n\tMAP_ALIGNMENT_256TB               = 0x30000000\n\tMAP_ALIGNMENT_4GB                 = 0x20000000\n\tMAP_ALIGNMENT_64KB                = 0x10000000\n\tMAP_ALIGNMENT_64PB                = 0x38000000\n\tMAP_ALIGNMENT_MASK                = -0x1000000\n\tMAP_ALIGNMENT_SHIFT               = 0x18\n\tMAP_ANON                          = 0x1000\n\tMAP_FILE                          = 0x0\n\tMAP_FIXED                         = 0x10\n\tMAP_HASSEMAPHORE                  = 0x200\n\tMAP_INHERIT                       = 0x80\n\tMAP_INHERIT_COPY                  = 0x1\n\tMAP_INHERIT_DEFAULT               = 0x1\n\tMAP_INHERIT_DONATE_COPY           = 0x3\n\tMAP_INHERIT_NONE                  = 0x2\n\tMAP_INHERIT_SHARE                 = 0x0\n\tMAP_NORESERVE                     = 0x40\n\tMAP_PRIVATE                       = 0x2\n\tMAP_RENAME                        = 0x20\n\tMAP_SHARED                        = 0x1\n\tMAP_STACK                         = 0x2000\n\tMAP_TRYFIXED                      = 0x400\n\tMAP_WIRED                         = 0x800\n\tMCL_CURRENT                       = 0x1\n\tMCL_FUTURE                        = 0x2\n\tMNT_ASYNC                         = 0x40\n\tMNT_BASIC_FLAGS                   = 0xe782807f\n\tMNT_DEFEXPORTED                   = 0x200\n\tMNT_DISCARD                       = 0x800000\n\tMNT_EXKERB                        = 0x800\n\tMNT_EXNORESPORT                   = 0x8000000\n\tMNT_EXPORTANON                    = 0x400\n\tMNT_EXPORTED                      = 0x100\n\tMNT_EXPUBLIC                      = 0x10000000\n\tMNT_EXRDONLY                      = 0x80\n\tMNT_EXTATTR                       = 0x1000000\n\tMNT_FORCE                         = 0x80000\n\tMNT_GETARGS                       = 0x400000\n\tMNT_IGNORE                        = 0x100000\n\tMNT_LAZY                          = 0x3\n\tMNT_LOCAL                         = 0x1000\n\tMNT_LOG                           = 0x2000000\n\tMNT_NOATIME                       = 0x4000000\n\tMNT_NOCOREDUMP                    = 0x8000\n\tMNT_NODEV                         = 0x10\n\tMNT_NODEVMTIME                    = 0x40000000\n\tMNT_NOEXEC                        = 0x4\n\tMNT_NOSUID                        = 0x8\n\tMNT_NOWAIT                        = 0x2\n\tMNT_OP_FLAGS                      = 0x4d0000\n\tMNT_QUOTA                         = 0x2000\n\tMNT_RDONLY                        = 0x1\n\tMNT_RELATIME                      = 0x20000\n\tMNT_RELOAD                        = 0x40000\n\tMNT_ROOTFS                        = 0x4000\n\tMNT_SOFTDEP                       = 0x80000000\n\tMNT_SYMPERM                       = 0x20000000\n\tMNT_SYNCHRONOUS                   = 0x2\n\tMNT_UNION                         = 0x20\n\tMNT_UPDATE                        = 0x10000\n\tMNT_VISFLAGMASK                   = 0xff90ffff\n\tMNT_WAIT                          = 0x1\n\tMSG_BCAST                         = 0x100\n\tMSG_CMSG_CLOEXEC                  = 0x800\n\tMSG_CONTROLMBUF                   = 0x2000000\n\tMSG_CTRUNC                        = 0x20\n\tMSG_DONTROUTE                     = 0x4\n\tMSG_DONTWAIT                      = 0x80\n\tMSG_EOR                           = 0x8\n\tMSG_IOVUSRSPACE                   = 0x4000000\n\tMSG_LENUSRSPACE                   = 0x8000000\n\tMSG_MCAST                         = 0x200\n\tMSG_NAMEMBUF                      = 0x1000000\n\tMSG_NBIO                          = 0x1000\n\tMSG_NOSIGNAL                      = 0x400\n\tMSG_OOB                           = 0x1\n\tMSG_PEEK                          = 0x2\n\tMSG_TRUNC                         = 0x10\n\tMSG_USERFLAGS                     = 0xffffff\n\tMSG_WAITALL                       = 0x40\n\tMS_ASYNC                          = 0x1\n\tMS_INVALIDATE                     = 0x2\n\tMS_SYNC                           = 0x4\n\tNAME_MAX                          = 0x1ff\n\tNET_RT_DUMP                       = 0x1\n\tNET_RT_FLAGS                      = 0x2\n\tNET_RT_IFLIST                     = 0x5\n\tNET_RT_MAXID                      = 0x6\n\tNET_RT_OIFLIST                    = 0x4\n\tNET_RT_OOIFLIST                   = 0x3\n\tNOFLSH                            = 0x80000000\n\tNOTE_ATTRIB                       = 0x8\n\tNOTE_CHILD                        = 0x4\n\tNOTE_DELETE                       = 0x1\n\tNOTE_EXEC                         = 0x20000000\n\tNOTE_EXIT                         = 0x80000000\n\tNOTE_EXTEND                       = 0x4\n\tNOTE_FORK                         = 0x40000000\n\tNOTE_LINK                         = 0x10\n\tNOTE_LOWAT                        = 0x1\n\tNOTE_PCTRLMASK                    = 0xf0000000\n\tNOTE_PDATAMASK                    = 0xfffff\n\tNOTE_RENAME                       = 0x20\n\tNOTE_REVOKE                       = 0x40\n\tNOTE_TRACK                        = 0x1\n\tNOTE_TRACKERR                     = 0x2\n\tNOTE_WRITE                        = 0x2\n\tOCRNL                             = 0x10\n\tOFIOGETBMAP                       = 0xc004667a\n\tONLCR                             = 0x2\n\tONLRET                            = 0x40\n\tONOCR                             = 0x20\n\tONOEOT                            = 0x8\n\tOPOST                             = 0x1\n\tO_ACCMODE                         = 0x3\n\tO_ALT_IO                          = 0x40000\n\tO_APPEND                          = 0x8\n\tO_ASYNC                           = 0x40\n\tO_CLOEXEC                         = 0x400000\n\tO_CREAT                           = 0x200\n\tO_DIRECT                          = 0x80000\n\tO_DIRECTORY                       = 0x200000\n\tO_DSYNC                           = 0x10000\n\tO_EXCL                            = 0x800\n\tO_EXLOCK                          = 0x20\n\tO_FSYNC                           = 0x80\n\tO_NDELAY                          = 0x4\n\tO_NOCTTY                          = 0x8000\n\tO_NOFOLLOW                        = 0x100\n\tO_NONBLOCK                        = 0x4\n\tO_NOSIGPIPE                       = 0x1000000\n\tO_RDONLY                          = 0x0\n\tO_RDWR                            = 0x2\n\tO_RSYNC                           = 0x20000\n\tO_SHLOCK                          = 0x10\n\tO_SYNC                            = 0x80\n\tO_TRUNC                           = 0x400\n\tO_WRONLY                          = 0x1\n\tPARENB                            = 0x1000\n\tPARMRK                            = 0x8\n\tPARODD                            = 0x2000\n\tPENDIN                            = 0x20000000\n\tPRIO_PGRP                         = 0x1\n\tPRIO_PROCESS                      = 0x0\n\tPRIO_USER                         = 0x2\n\tPRI_IOFLUSH                       = 0x7c\n\tPROT_EXEC                         = 0x4\n\tPROT_NONE                         = 0x0\n\tPROT_READ                         = 0x1\n\tPROT_WRITE                        = 0x2\n\tRLIMIT_AS                         = 0xa\n\tRLIMIT_CORE                       = 0x4\n\tRLIMIT_CPU                        = 0x0\n\tRLIMIT_DATA                       = 0x2\n\tRLIMIT_FSIZE                      = 0x1\n\tRLIMIT_MEMLOCK                    = 0x6\n\tRLIMIT_NOFILE                     = 0x8\n\tRLIMIT_NPROC                      = 0x7\n\tRLIMIT_RSS                        = 0x5\n\tRLIMIT_STACK                      = 0x3\n\tRLIM_INFINITY                     = 0x7fffffffffffffff\n\tRTAX_AUTHOR                       = 0x6\n\tRTAX_BRD                          = 0x7\n\tRTAX_DST                          = 0x0\n\tRTAX_GATEWAY                      = 0x1\n\tRTAX_GENMASK                      = 0x3\n\tRTAX_IFA                          = 0x5\n\tRTAX_IFP                          = 0x4\n\tRTAX_MAX                          = 0x9\n\tRTAX_NETMASK                      = 0x2\n\tRTAX_TAG                          = 0x8\n\tRTA_AUTHOR                        = 0x40\n\tRTA_BRD                           = 0x80\n\tRTA_DST                           = 0x1\n\tRTA_GATEWAY                       = 0x2\n\tRTA_GENMASK                       = 0x8\n\tRTA_IFA                           = 0x20\n\tRTA_IFP                           = 0x10\n\tRTA_NETMASK                       = 0x4\n\tRTA_TAG                           = 0x100\n\tRTF_ANNOUNCE                      = 0x20000\n\tRTF_BLACKHOLE                     = 0x1000\n\tRTF_CLONED                        = 0x2000\n\tRTF_CLONING                       = 0x100\n\tRTF_DONE                          = 0x40\n\tRTF_DYNAMIC                       = 0x10\n\tRTF_GATEWAY                       = 0x2\n\tRTF_HOST                          = 0x4\n\tRTF_LLINFO                        = 0x400\n\tRTF_MASK                          = 0x80\n\tRTF_MODIFIED                      = 0x20\n\tRTF_PROTO1                        = 0x8000\n\tRTF_PROTO2                        = 0x4000\n\tRTF_REJECT                        = 0x8\n\tRTF_SRC                           = 0x10000\n\tRTF_STATIC                        = 0x800\n\tRTF_UP                            = 0x1\n\tRTF_XRESOLVE                      = 0x200\n\tRTM_ADD                           = 0x1\n\tRTM_CHANGE                        = 0x3\n\tRTM_CHGADDR                       = 0x15\n\tRTM_DELADDR                       = 0xd\n\tRTM_DELETE                        = 0x2\n\tRTM_GET                           = 0x4\n\tRTM_IEEE80211                     = 0x11\n\tRTM_IFANNOUNCE                    = 0x10\n\tRTM_IFINFO                        = 0x14\n\tRTM_LLINFO_UPD                    = 0x13\n\tRTM_LOCK                          = 0x8\n\tRTM_LOSING                        = 0x5\n\tRTM_MISS                          = 0x7\n\tRTM_NEWADDR                       = 0xc\n\tRTM_OIFINFO                       = 0xf\n\tRTM_OLDADD                        = 0x9\n\tRTM_OLDDEL                        = 0xa\n\tRTM_OOIFINFO                      = 0xe\n\tRTM_REDIRECT                      = 0x6\n\tRTM_RESOLVE                       = 0xb\n\tRTM_RTTUNIT                       = 0xf4240\n\tRTM_SETGATE                       = 0x12\n\tRTM_VERSION                       = 0x4\n\tRTV_EXPIRE                        = 0x4\n\tRTV_HOPCOUNT                      = 0x2\n\tRTV_MTU                           = 0x1\n\tRTV_RPIPE                         = 0x8\n\tRTV_RTT                           = 0x40\n\tRTV_RTTVAR                        = 0x80\n\tRTV_SPIPE                         = 0x10\n\tRTV_SSTHRESH                      = 0x20\n\tRUSAGE_CHILDREN                   = -0x1\n\tRUSAGE_SELF                       = 0x0\n\tSCM_CREDS                         = 0x4\n\tSCM_RIGHTS                        = 0x1\n\tSCM_TIMESTAMP                     = 0x8\n\tSHUT_RD                           = 0x0\n\tSHUT_RDWR                         = 0x2\n\tSHUT_WR                           = 0x1\n\tSIOCADDMULTI                      = 0x80906931\n\tSIOCADDRT                         = 0x8030720a\n\tSIOCAIFADDR                       = 0x8040691a\n\tSIOCALIFADDR                      = 0x8118691c\n\tSIOCATMARK                        = 0x40047307\n\tSIOCDELMULTI                      = 0x80906932\n\tSIOCDELRT                         = 0x8030720b\n\tSIOCDIFADDR                       = 0x80906919\n\tSIOCDIFPHYADDR                    = 0x80906949\n\tSIOCDLIFADDR                      = 0x8118691e\n\tSIOCGDRVSPEC                      = 0xc01c697b\n\tSIOCGETPFSYNC                     = 0xc09069f8\n\tSIOCGETSGCNT                      = 0xc0147534\n\tSIOCGETVIFCNT                     = 0xc0147533\n\tSIOCGHIWAT                        = 0x40047301\n\tSIOCGIFADDR                       = 0xc0906921\n\tSIOCGIFADDRPREF                   = 0xc0946920\n\tSIOCGIFALIAS                      = 0xc040691b\n\tSIOCGIFBRDADDR                    = 0xc0906923\n\tSIOCGIFCAP                        = 0xc0206976\n\tSIOCGIFCONF                       = 0xc0086926\n\tSIOCGIFDATA                       = 0xc0946985\n\tSIOCGIFDLT                        = 0xc0906977\n\tSIOCGIFDSTADDR                    = 0xc0906922\n\tSIOCGIFFLAGS                      = 0xc0906911\n\tSIOCGIFGENERIC                    = 0xc090693a\n\tSIOCGIFMEDIA                      = 0xc0286936\n\tSIOCGIFMETRIC                     = 0xc0906917\n\tSIOCGIFMTU                        = 0xc090697e\n\tSIOCGIFNETMASK                    = 0xc0906925\n\tSIOCGIFPDSTADDR                   = 0xc0906948\n\tSIOCGIFPSRCADDR                   = 0xc0906947\n\tSIOCGLIFADDR                      = 0xc118691d\n\tSIOCGLIFPHYADDR                   = 0xc118694b\n\tSIOCGLINKSTR                      = 0xc01c6987\n\tSIOCGLOWAT                        = 0x40047303\n\tSIOCGPGRP                         = 0x40047309\n\tSIOCGVH                           = 0xc0906983\n\tSIOCIFCREATE                      = 0x8090697a\n\tSIOCIFDESTROY                     = 0x80906979\n\tSIOCIFGCLONERS                    = 0xc00c6978\n\tSIOCINITIFADDR                    = 0xc0446984\n\tSIOCSDRVSPEC                      = 0x801c697b\n\tSIOCSETPFSYNC                     = 0x809069f7\n\tSIOCSHIWAT                        = 0x80047300\n\tSIOCSIFADDR                       = 0x8090690c\n\tSIOCSIFADDRPREF                   = 0x8094691f\n\tSIOCSIFBRDADDR                    = 0x80906913\n\tSIOCSIFCAP                        = 0x80206975\n\tSIOCSIFDSTADDR                    = 0x8090690e\n\tSIOCSIFFLAGS                      = 0x80906910\n\tSIOCSIFGENERIC                    = 0x80906939\n\tSIOCSIFMEDIA                      = 0xc0906935\n\tSIOCSIFMETRIC                     = 0x80906918\n\tSIOCSIFMTU                        = 0x8090697f\n\tSIOCSIFNETMASK                    = 0x80906916\n\tSIOCSIFPHYADDR                    = 0x80406946\n\tSIOCSLIFPHYADDR                   = 0x8118694a\n\tSIOCSLINKSTR                      = 0x801c6988\n\tSIOCSLOWAT                        = 0x80047302\n\tSIOCSPGRP                         = 0x80047308\n\tSIOCSVH                           = 0xc0906982\n\tSIOCZIFDATA                       = 0xc0946986\n\tSOCK_CLOEXEC                      = 0x10000000\n\tSOCK_DGRAM                        = 0x2\n\tSOCK_FLAGS_MASK                   = 0xf0000000\n\tSOCK_NONBLOCK                     = 0x20000000\n\tSOCK_NOSIGPIPE                    = 0x40000000\n\tSOCK_RAW                          = 0x3\n\tSOCK_RDM                          = 0x4\n\tSOCK_SEQPACKET                    = 0x5\n\tSOCK_STREAM                       = 0x1\n\tSOL_SOCKET                        = 0xffff\n\tSOMAXCONN                         = 0x80\n\tSO_ACCEPTCONN                     = 0x2\n\tSO_ACCEPTFILTER                   = 0x1000\n\tSO_BROADCAST                      = 0x20\n\tSO_DEBUG                          = 0x1\n\tSO_DONTROUTE                      = 0x10\n\tSO_ERROR                          = 0x1007\n\tSO_KEEPALIVE                      = 0x8\n\tSO_LINGER                         = 0x80\n\tSO_NOHEADER                       = 0x100a\n\tSO_NOSIGPIPE                      = 0x800\n\tSO_OOBINLINE                      = 0x100\n\tSO_OVERFLOWED                     = 0x1009\n\tSO_RCVBUF                         = 0x1002\n\tSO_RCVLOWAT                       = 0x1004\n\tSO_RCVTIMEO                       = 0x100c\n\tSO_REUSEADDR                      = 0x4\n\tSO_REUSEPORT                      = 0x200\n\tSO_SNDBUF                         = 0x1001\n\tSO_SNDLOWAT                       = 0x1003\n\tSO_SNDTIMEO                       = 0x100b\n\tSO_TIMESTAMP                      = 0x2000\n\tSO_TYPE                           = 0x1008\n\tSO_USELOOPBACK                    = 0x40\n\tSYSCTL_VERSION                    = 0x1000000\n\tSYSCTL_VERS_0                     = 0x0\n\tSYSCTL_VERS_1                     = 0x1000000\n\tSYSCTL_VERS_MASK                  = 0xff000000\n\tS_ARCH1                           = 0x10000\n\tS_ARCH2                           = 0x20000\n\tS_BLKSIZE                         = 0x200\n\tS_IEXEC                           = 0x40\n\tS_IFBLK                           = 0x6000\n\tS_IFCHR                           = 0x2000\n\tS_IFDIR                           = 0x4000\n\tS_IFIFO                           = 0x1000\n\tS_IFLNK                           = 0xa000\n\tS_IFMT                            = 0xf000\n\tS_IFREG                           = 0x8000\n\tS_IFSOCK                          = 0xc000\n\tS_IFWHT                           = 0xe000\n\tS_IREAD                           = 0x100\n\tS_IRGRP                           = 0x20\n\tS_IROTH                           = 0x4\n\tS_IRUSR                           = 0x100\n\tS_IRWXG                           = 0x38\n\tS_IRWXO                           = 0x7\n\tS_IRWXU                           = 0x1c0\n\tS_ISGID                           = 0x400\n\tS_ISTXT                           = 0x200\n\tS_ISUID                           = 0x800\n\tS_ISVTX                           = 0x200\n\tS_IWGRP                           = 0x10\n\tS_IWOTH                           = 0x2\n\tS_IWRITE                          = 0x80\n\tS_IWUSR                           = 0x80\n\tS_IXGRP                           = 0x8\n\tS_IXOTH                           = 0x1\n\tS_IXUSR                           = 0x40\n\tS_LOGIN_SET                       = 0x1\n\tTCIFLUSH                          = 0x1\n\tTCIOFLUSH                         = 0x3\n\tTCOFLUSH                          = 0x2\n\tTCP_CONGCTL                       = 0x20\n\tTCP_KEEPCNT                       = 0x6\n\tTCP_KEEPIDLE                      = 0x3\n\tTCP_KEEPINIT                      = 0x7\n\tTCP_KEEPINTVL                     = 0x5\n\tTCP_MAXBURST                      = 0x4\n\tTCP_MAXSEG                        = 0x2\n\tTCP_MAXWIN                        = 0xffff\n\tTCP_MAX_WINSHIFT                  = 0xe\n\tTCP_MD5SIG                        = 0x10\n\tTCP_MINMSS                        = 0xd8\n\tTCP_MSS                           = 0x218\n\tTCP_NODELAY                       = 0x1\n\tTCSAFLUSH                         = 0x2\n\tTIOCCBRK                          = 0x2000747a\n\tTIOCCDTR                          = 0x20007478\n\tTIOCCONS                          = 0x80047462\n\tTIOCDCDTIMESTAMP                  = 0x400c7458\n\tTIOCDRAIN                         = 0x2000745e\n\tTIOCEXCL                          = 0x2000740d\n\tTIOCEXT                           = 0x80047460\n\tTIOCFLAG_CDTRCTS                  = 0x10\n\tTIOCFLAG_CLOCAL                   = 0x2\n\tTIOCFLAG_CRTSCTS                  = 0x4\n\tTIOCFLAG_MDMBUF                   = 0x8\n\tTIOCFLAG_SOFTCAR                  = 0x1\n\tTIOCFLUSH                         = 0x80047410\n\tTIOCGETA                          = 0x402c7413\n\tTIOCGETD                          = 0x4004741a\n\tTIOCGFLAGS                        = 0x4004745d\n\tTIOCGLINED                        = 0x40207442\n\tTIOCGPGRP                         = 0x40047477\n\tTIOCGQSIZE                        = 0x40047481\n\tTIOCGRANTPT                       = 0x20007447\n\tTIOCGSID                          = 0x40047463\n\tTIOCGSIZE                         = 0x40087468\n\tTIOCGWINSZ                        = 0x40087468\n\tTIOCMBIC                          = 0x8004746b\n\tTIOCMBIS                          = 0x8004746c\n\tTIOCMGET                          = 0x4004746a\n\tTIOCMSET                          = 0x8004746d\n\tTIOCM_CAR                         = 0x40\n\tTIOCM_CD                          = 0x40\n\tTIOCM_CTS                         = 0x20\n\tTIOCM_DSR                         = 0x100\n\tTIOCM_DTR                         = 0x2\n\tTIOCM_LE                          = 0x1\n\tTIOCM_RI                          = 0x80\n\tTIOCM_RNG                         = 0x80\n\tTIOCM_RTS                         = 0x4\n\tTIOCM_SR                          = 0x10\n\tTIOCM_ST                          = 0x8\n\tTIOCNOTTY                         = 0x20007471\n\tTIOCNXCL                          = 0x2000740e\n\tTIOCOUTQ                          = 0x40047473\n\tTIOCPKT                           = 0x80047470\n\tTIOCPKT_DATA                      = 0x0\n\tTIOCPKT_DOSTOP                    = 0x20\n\tTIOCPKT_FLUSHREAD                 = 0x1\n\tTIOCPKT_FLUSHWRITE                = 0x2\n\tTIOCPKT_IOCTL                     = 0x40\n\tTIOCPKT_NOSTOP                    = 0x10\n\tTIOCPKT_START                     = 0x8\n\tTIOCPKT_STOP                      = 0x4\n\tTIOCPTMGET                        = 0x40287446\n\tTIOCPTSNAME                       = 0x40287448\n\tTIOCRCVFRAME                      = 0x80047445\n\tTIOCREMOTE                        = 0x80047469\n\tTIOCSBRK                          = 0x2000747b\n\tTIOCSCTTY                         = 0x20007461\n\tTIOCSDTR                          = 0x20007479\n\tTIOCSETA                          = 0x802c7414\n\tTIOCSETAF                         = 0x802c7416\n\tTIOCSETAW                         = 0x802c7415\n\tTIOCSETD                          = 0x8004741b\n\tTIOCSFLAGS                        = 0x8004745c\n\tTIOCSIG                           = 0x2000745f\n\tTIOCSLINED                        = 0x80207443\n\tTIOCSPGRP                         = 0x80047476\n\tTIOCSQSIZE                        = 0x80047480\n\tTIOCSSIZE                         = 0x80087467\n\tTIOCSTART                         = 0x2000746e\n\tTIOCSTAT                          = 0x80047465\n\tTIOCSTI                           = 0x80017472\n\tTIOCSTOP                          = 0x2000746f\n\tTIOCSWINSZ                        = 0x80087467\n\tTIOCUCNTL                         = 0x80047466\n\tTIOCXMTFRAME                      = 0x80047444\n\tTOSTOP                            = 0x400000\n\tVDISCARD                          = 0xf\n\tVDSUSP                            = 0xb\n\tVEOF                              = 0x0\n\tVEOL                              = 0x1\n\tVEOL2                             = 0x2\n\tVERASE                            = 0x3\n\tVINTR                             = 0x8\n\tVKILL                             = 0x5\n\tVLNEXT                            = 0xe\n\tVMIN                              = 0x10\n\tVQUIT                             = 0x9\n\tVREPRINT                          = 0x6\n\tVSTART                            = 0xc\n\tVSTATUS                           = 0x12\n\tVSTOP                             = 0xd\n\tVSUSP                             = 0xa\n\tVTIME                             = 0x11\n\tVWERASE                           = 0x4\n\tWALL                              = 0x8\n\tWALLSIG                           = 0x8\n\tWALTSIG                           = 0x4\n\tWCLONE                            = 0x4\n\tWCOREFLAG                         = 0x80\n\tWNOHANG                           = 0x1\n\tWNOWAIT                           = 0x10000\n\tWNOZOMBIE                         = 0x20000\n\tWOPTSCHECKED                      = 0x40000\n\tWSTOPPED                          = 0x7f\n\tWUNTRACED                         = 0x2\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x30)\n\tEADDRNOTAVAIL   = syscall.Errno(0x31)\n\tEAFNOSUPPORT    = syscall.Errno(0x2f)\n\tEAGAIN          = syscall.Errno(0x23)\n\tEALREADY        = syscall.Errno(0x25)\n\tEAUTH           = syscall.Errno(0x50)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADMSG         = syscall.Errno(0x58)\n\tEBADRPC         = syscall.Errno(0x48)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x57)\n\tECHILD          = syscall.Errno(0xa)\n\tECONNABORTED    = syscall.Errno(0x35)\n\tECONNREFUSED    = syscall.Errno(0x3d)\n\tECONNRESET      = syscall.Errno(0x36)\n\tEDEADLK         = syscall.Errno(0xb)\n\tEDESTADDRREQ    = syscall.Errno(0x27)\n\tEDOM            = syscall.Errno(0x21)\n\tEDQUOT          = syscall.Errno(0x45)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFTYPE          = syscall.Errno(0x4f)\n\tEHOSTDOWN       = syscall.Errno(0x40)\n\tEHOSTUNREACH    = syscall.Errno(0x41)\n\tEIDRM           = syscall.Errno(0x52)\n\tEILSEQ          = syscall.Errno(0x55)\n\tEINPROGRESS     = syscall.Errno(0x24)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEISCONN         = syscall.Errno(0x38)\n\tEISDIR          = syscall.Errno(0x15)\n\tELAST           = syscall.Errno(0x60)\n\tELOOP           = syscall.Errno(0x3e)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x28)\n\tEMULTIHOP       = syscall.Errno(0x5e)\n\tENAMETOOLONG    = syscall.Errno(0x3f)\n\tENEEDAUTH       = syscall.Errno(0x51)\n\tENETDOWN        = syscall.Errno(0x32)\n\tENETRESET       = syscall.Errno(0x34)\n\tENETUNREACH     = syscall.Errno(0x33)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x5d)\n\tENOBUFS         = syscall.Errno(0x37)\n\tENODATA         = syscall.Errno(0x59)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x4d)\n\tENOLINK         = syscall.Errno(0x5f)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x53)\n\tENOPROTOOPT     = syscall.Errno(0x2a)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSR           = syscall.Errno(0x5a)\n\tENOSTR          = syscall.Errno(0x5b)\n\tENOSYS          = syscall.Errno(0x4e)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x39)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x42)\n\tENOTSOCK        = syscall.Errno(0x26)\n\tENOTSUP         = syscall.Errno(0x56)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x2d)\n\tEOVERFLOW       = syscall.Errno(0x54)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x2e)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x43)\n\tEPROCUNAVAIL    = syscall.Errno(0x4c)\n\tEPROGMISMATCH   = syscall.Errno(0x4b)\n\tEPROGUNAVAIL    = syscall.Errno(0x4a)\n\tEPROTO          = syscall.Errno(0x60)\n\tEPROTONOSUPPORT = syscall.Errno(0x2b)\n\tEPROTOTYPE      = syscall.Errno(0x29)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x47)\n\tEROFS           = syscall.Errno(0x1e)\n\tERPCMISMATCH    = syscall.Errno(0x49)\n\tESHUTDOWN       = syscall.Errno(0x3a)\n\tESOCKTNOSUPPORT = syscall.Errno(0x2c)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x46)\n\tETIME           = syscall.Errno(0x5c)\n\tETIMEDOUT       = syscall.Errno(0x3c)\n\tETOOMANYREFS    = syscall.Errno(0x3b)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUSERS          = syscall.Errno(0x44)\n\tEWOULDBLOCK     = syscall.Errno(0x23)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x14)\n\tSIGCONT   = syscall.Signal(0x13)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINFO   = syscall.Signal(0x1d)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x17)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGPWR    = syscall.Signal(0x20)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTOP   = syscall.Signal(0x11)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x12)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x10)\n\tSIGUSR1   = syscall.Signal(0x1e)\n\tSIGUSR2   = syscall.Signal(0x1f)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"device not configured\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"operation not supported by device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large or too small\"},\n\t{35, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{36, \"EINPROGRESS\", \"operation now in progress\"},\n\t{37, \"EALREADY\", \"operation already in progress\"},\n\t{38, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{39, \"EDESTADDRREQ\", \"destination address required\"},\n\t{40, \"EMSGSIZE\", \"message too long\"},\n\t{41, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{42, \"ENOPROTOOPT\", \"protocol option not available\"},\n\t{43, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{44, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{45, \"EOPNOTSUPP\", \"operation not supported\"},\n\t{46, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{47, \"EAFNOSUPPORT\", \"address family not supported by protocol family\"},\n\t{48, \"EADDRINUSE\", \"address already in use\"},\n\t{49, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{50, \"ENETDOWN\", \"network is down\"},\n\t{51, \"ENETUNREACH\", \"network is unreachable\"},\n\t{52, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{53, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{54, \"ECONNRESET\", \"connection reset by peer\"},\n\t{55, \"ENOBUFS\", \"no buffer space available\"},\n\t{56, \"EISCONN\", \"socket is already connected\"},\n\t{57, \"ENOTCONN\", \"socket is not connected\"},\n\t{58, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{59, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{60, \"ETIMEDOUT\", \"connection timed out\"},\n\t{61, \"ECONNREFUSED\", \"connection refused\"},\n\t{62, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{63, \"ENAMETOOLONG\", \"file name too long\"},\n\t{64, \"EHOSTDOWN\", \"host is down\"},\n\t{65, \"EHOSTUNREACH\", \"no route to host\"},\n\t{66, \"ENOTEMPTY\", \"directory not empty\"},\n\t{67, \"EPROCLIM\", \"too many processes\"},\n\t{68, \"EUSERS\", \"too many users\"},\n\t{69, \"EDQUOT\", \"disc quota exceeded\"},\n\t{70, \"ESTALE\", \"stale NFS file handle\"},\n\t{71, \"EREMOTE\", \"too many levels of remote in path\"},\n\t{72, \"EBADRPC\", \"RPC struct is bad\"},\n\t{73, \"ERPCMISMATCH\", \"RPC version wrong\"},\n\t{74, \"EPROGUNAVAIL\", \"RPC prog. not avail\"},\n\t{75, \"EPROGMISMATCH\", \"program version wrong\"},\n\t{76, \"EPROCUNAVAIL\", \"bad procedure for program\"},\n\t{77, \"ENOLCK\", \"no locks available\"},\n\t{78, \"ENOSYS\", \"function not implemented\"},\n\t{79, \"EFTYPE\", \"inappropriate file type or format\"},\n\t{80, \"EAUTH\", \"authentication error\"},\n\t{81, \"ENEEDAUTH\", \"need authenticator\"},\n\t{82, \"EIDRM\", \"identifier removed\"},\n\t{83, \"ENOMSG\", \"no message of desired type\"},\n\t{84, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n\t{85, \"EILSEQ\", \"illegal byte sequence\"},\n\t{86, \"ENOTSUP\", \"not supported\"},\n\t{87, \"ECANCELED\", \"operation Canceled\"},\n\t{88, \"EBADMSG\", \"bad or Corrupt message\"},\n\t{89, \"ENODATA\", \"no message available\"},\n\t{90, \"ENOSR\", \"no STREAM resources\"},\n\t{91, \"ENOSTR\", \"not a STREAM\"},\n\t{92, \"ETIME\", \"STREAM ioctl timeout\"},\n\t{93, \"ENOATTR\", \"attribute not found\"},\n\t{94, \"EMULTIHOP\", \"multihop attempted\"},\n\t{95, \"ENOLINK\", \"link has been severed\"},\n\t{96, \"ELAST\", \"protocol error\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGIOT\", \"abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"stopped (signal)\"},\n\t{18, \"SIGTSTP\", \"stopped\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGINFO\", \"information request\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n\t{32, \"SIGPWR\", \"power fail/restart\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go",
    "content": "// mkerrors.sh -m64\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build amd64,netbsd\n\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs -- -m64 _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                      = 0x10\n\tAF_ARP                            = 0x1c\n\tAF_BLUETOOTH                      = 0x1f\n\tAF_CCITT                          = 0xa\n\tAF_CHAOS                          = 0x5\n\tAF_CNT                            = 0x15\n\tAF_COIP                           = 0x14\n\tAF_DATAKIT                        = 0x9\n\tAF_DECnet                         = 0xc\n\tAF_DLI                            = 0xd\n\tAF_E164                           = 0x1a\n\tAF_ECMA                           = 0x8\n\tAF_HYLINK                         = 0xf\n\tAF_IEEE80211                      = 0x20\n\tAF_IMPLINK                        = 0x3\n\tAF_INET                           = 0x2\n\tAF_INET6                          = 0x18\n\tAF_IPX                            = 0x17\n\tAF_ISDN                           = 0x1a\n\tAF_ISO                            = 0x7\n\tAF_LAT                            = 0xe\n\tAF_LINK                           = 0x12\n\tAF_LOCAL                          = 0x1\n\tAF_MAX                            = 0x23\n\tAF_MPLS                           = 0x21\n\tAF_NATM                           = 0x1b\n\tAF_NS                             = 0x6\n\tAF_OROUTE                         = 0x11\n\tAF_OSI                            = 0x7\n\tAF_PUP                            = 0x4\n\tAF_ROUTE                          = 0x22\n\tAF_SNA                            = 0xb\n\tAF_UNIX                           = 0x1\n\tAF_UNSPEC                         = 0x0\n\tARPHRD_ARCNET                     = 0x7\n\tARPHRD_ETHER                      = 0x1\n\tARPHRD_FRELAY                     = 0xf\n\tARPHRD_IEEE1394                   = 0x18\n\tARPHRD_IEEE802                    = 0x6\n\tARPHRD_STRIP                      = 0x17\n\tB0                                = 0x0\n\tB110                              = 0x6e\n\tB115200                           = 0x1c200\n\tB1200                             = 0x4b0\n\tB134                              = 0x86\n\tB14400                            = 0x3840\n\tB150                              = 0x96\n\tB1800                             = 0x708\n\tB19200                            = 0x4b00\n\tB200                              = 0xc8\n\tB230400                           = 0x38400\n\tB2400                             = 0x960\n\tB28800                            = 0x7080\n\tB300                              = 0x12c\n\tB38400                            = 0x9600\n\tB460800                           = 0x70800\n\tB4800                             = 0x12c0\n\tB50                               = 0x32\n\tB57600                            = 0xe100\n\tB600                              = 0x258\n\tB7200                             = 0x1c20\n\tB75                               = 0x4b\n\tB76800                            = 0x12c00\n\tB921600                           = 0xe1000\n\tB9600                             = 0x2580\n\tBIOCFEEDBACK                      = 0x8004427d\n\tBIOCFLUSH                         = 0x20004268\n\tBIOCGBLEN                         = 0x40044266\n\tBIOCGDLT                          = 0x4004426a\n\tBIOCGDLTLIST                      = 0xc0104277\n\tBIOCGETIF                         = 0x4090426b\n\tBIOCGFEEDBACK                     = 0x4004427c\n\tBIOCGHDRCMPLT                     = 0x40044274\n\tBIOCGRTIMEOUT                     = 0x4010427b\n\tBIOCGSEESENT                      = 0x40044278\n\tBIOCGSTATS                        = 0x4080426f\n\tBIOCGSTATSOLD                     = 0x4008426f\n\tBIOCIMMEDIATE                     = 0x80044270\n\tBIOCPROMISC                       = 0x20004269\n\tBIOCSBLEN                         = 0xc0044266\n\tBIOCSDLT                          = 0x80044276\n\tBIOCSETF                          = 0x80104267\n\tBIOCSETIF                         = 0x8090426c\n\tBIOCSFEEDBACK                     = 0x8004427d\n\tBIOCSHDRCMPLT                     = 0x80044275\n\tBIOCSRTIMEOUT                     = 0x8010427a\n\tBIOCSSEESENT                      = 0x80044279\n\tBIOCSTCPF                         = 0x80104272\n\tBIOCSUDPF                         = 0x80104273\n\tBIOCVERSION                       = 0x40044271\n\tBPF_A                             = 0x10\n\tBPF_ABS                           = 0x20\n\tBPF_ADD                           = 0x0\n\tBPF_ALIGNMENT                     = 0x8\n\tBPF_ALIGNMENT32                   = 0x4\n\tBPF_ALU                           = 0x4\n\tBPF_AND                           = 0x50\n\tBPF_B                             = 0x10\n\tBPF_DFLTBUFSIZE                   = 0x100000\n\tBPF_DIV                           = 0x30\n\tBPF_H                             = 0x8\n\tBPF_IMM                           = 0x0\n\tBPF_IND                           = 0x40\n\tBPF_JA                            = 0x0\n\tBPF_JEQ                           = 0x10\n\tBPF_JGE                           = 0x30\n\tBPF_JGT                           = 0x20\n\tBPF_JMP                           = 0x5\n\tBPF_JSET                          = 0x40\n\tBPF_K                             = 0x0\n\tBPF_LD                            = 0x0\n\tBPF_LDX                           = 0x1\n\tBPF_LEN                           = 0x80\n\tBPF_LSH                           = 0x60\n\tBPF_MAJOR_VERSION                 = 0x1\n\tBPF_MAXBUFSIZE                    = 0x1000000\n\tBPF_MAXINSNS                      = 0x200\n\tBPF_MEM                           = 0x60\n\tBPF_MEMWORDS                      = 0x10\n\tBPF_MINBUFSIZE                    = 0x20\n\tBPF_MINOR_VERSION                 = 0x1\n\tBPF_MISC                          = 0x7\n\tBPF_MSH                           = 0xa0\n\tBPF_MUL                           = 0x20\n\tBPF_NEG                           = 0x80\n\tBPF_OR                            = 0x40\n\tBPF_RELEASE                       = 0x30bb6\n\tBPF_RET                           = 0x6\n\tBPF_RSH                           = 0x70\n\tBPF_ST                            = 0x2\n\tBPF_STX                           = 0x3\n\tBPF_SUB                           = 0x10\n\tBPF_TAX                           = 0x0\n\tBPF_TXA                           = 0x80\n\tBPF_W                             = 0x0\n\tBPF_X                             = 0x8\n\tBRKINT                            = 0x2\n\tCFLUSH                            = 0xf\n\tCLOCAL                            = 0x8000\n\tCLONE_CSIGNAL                     = 0xff\n\tCLONE_FILES                       = 0x400\n\tCLONE_FS                          = 0x200\n\tCLONE_PID                         = 0x1000\n\tCLONE_PTRACE                      = 0x2000\n\tCLONE_SIGHAND                     = 0x800\n\tCLONE_VFORK                       = 0x4000\n\tCLONE_VM                          = 0x100\n\tCREAD                             = 0x800\n\tCRTSCTS                           = 0x10000\n\tCS5                               = 0x0\n\tCS6                               = 0x100\n\tCS7                               = 0x200\n\tCS8                               = 0x300\n\tCSIZE                             = 0x300\n\tCSTART                            = 0x11\n\tCSTATUS                           = 0x14\n\tCSTOP                             = 0x13\n\tCSTOPB                            = 0x400\n\tCSUSP                             = 0x1a\n\tCTL_HW                            = 0x6\n\tCTL_KERN                          = 0x1\n\tCTL_MAXNAME                       = 0xc\n\tCTL_NET                           = 0x4\n\tCTL_QUERY                         = -0x2\n\tDIOCBSFLUSH                       = 0x20006478\n\tDLT_A429                          = 0xb8\n\tDLT_A653_ICM                      = 0xb9\n\tDLT_AIRONET_HEADER                = 0x78\n\tDLT_AOS                           = 0xde\n\tDLT_APPLE_IP_OVER_IEEE1394        = 0x8a\n\tDLT_ARCNET                        = 0x7\n\tDLT_ARCNET_LINUX                  = 0x81\n\tDLT_ATM_CLIP                      = 0x13\n\tDLT_ATM_RFC1483                   = 0xb\n\tDLT_AURORA                        = 0x7e\n\tDLT_AX25                          = 0x3\n\tDLT_AX25_KISS                     = 0xca\n\tDLT_BACNET_MS_TP                  = 0xa5\n\tDLT_BLUETOOTH_HCI_H4              = 0xbb\n\tDLT_BLUETOOTH_HCI_H4_WITH_PHDR    = 0xc9\n\tDLT_CAN20B                        = 0xbe\n\tDLT_CAN_SOCKETCAN                 = 0xe3\n\tDLT_CHAOS                         = 0x5\n\tDLT_CISCO_IOS                     = 0x76\n\tDLT_C_HDLC                        = 0x68\n\tDLT_C_HDLC_WITH_DIR               = 0xcd\n\tDLT_DECT                          = 0xdd\n\tDLT_DOCSIS                        = 0x8f\n\tDLT_ECONET                        = 0x73\n\tDLT_EN10MB                        = 0x1\n\tDLT_EN3MB                         = 0x2\n\tDLT_ENC                           = 0x6d\n\tDLT_ERF                           = 0xc5\n\tDLT_ERF_ETH                       = 0xaf\n\tDLT_ERF_POS                       = 0xb0\n\tDLT_FC_2                          = 0xe0\n\tDLT_FC_2_WITH_FRAME_DELIMS        = 0xe1\n\tDLT_FDDI                          = 0xa\n\tDLT_FLEXRAY                       = 0xd2\n\tDLT_FRELAY                        = 0x6b\n\tDLT_FRELAY_WITH_DIR               = 0xce\n\tDLT_GCOM_SERIAL                   = 0xad\n\tDLT_GCOM_T1E1                     = 0xac\n\tDLT_GPF_F                         = 0xab\n\tDLT_GPF_T                         = 0xaa\n\tDLT_GPRS_LLC                      = 0xa9\n\tDLT_GSMTAP_ABIS                   = 0xda\n\tDLT_GSMTAP_UM                     = 0xd9\n\tDLT_HDLC                          = 0x10\n\tDLT_HHDLC                         = 0x79\n\tDLT_HIPPI                         = 0xf\n\tDLT_IBM_SN                        = 0x92\n\tDLT_IBM_SP                        = 0x91\n\tDLT_IEEE802                       = 0x6\n\tDLT_IEEE802_11                    = 0x69\n\tDLT_IEEE802_11_RADIO              = 0x7f\n\tDLT_IEEE802_11_RADIO_AVS          = 0xa3\n\tDLT_IEEE802_15_4                  = 0xc3\n\tDLT_IEEE802_15_4_LINUX            = 0xbf\n\tDLT_IEEE802_15_4_NONASK_PHY       = 0xd7\n\tDLT_IEEE802_16_MAC_CPS            = 0xbc\n\tDLT_IEEE802_16_MAC_CPS_RADIO      = 0xc1\n\tDLT_IPMB                          = 0xc7\n\tDLT_IPMB_LINUX                    = 0xd1\n\tDLT_IPNET                         = 0xe2\n\tDLT_IPV4                          = 0xe4\n\tDLT_IPV6                          = 0xe5\n\tDLT_IP_OVER_FC                    = 0x7a\n\tDLT_JUNIPER_ATM1                  = 0x89\n\tDLT_JUNIPER_ATM2                  = 0x87\n\tDLT_JUNIPER_CHDLC                 = 0xb5\n\tDLT_JUNIPER_ES                    = 0x84\n\tDLT_JUNIPER_ETHER                 = 0xb2\n\tDLT_JUNIPER_FRELAY                = 0xb4\n\tDLT_JUNIPER_GGSN                  = 0x85\n\tDLT_JUNIPER_ISM                   = 0xc2\n\tDLT_JUNIPER_MFR                   = 0x86\n\tDLT_JUNIPER_MLFR                  = 0x83\n\tDLT_JUNIPER_MLPPP                 = 0x82\n\tDLT_JUNIPER_MONITOR               = 0xa4\n\tDLT_JUNIPER_PIC_PEER              = 0xae\n\tDLT_JUNIPER_PPP                   = 0xb3\n\tDLT_JUNIPER_PPPOE                 = 0xa7\n\tDLT_JUNIPER_PPPOE_ATM             = 0xa8\n\tDLT_JUNIPER_SERVICES              = 0x88\n\tDLT_JUNIPER_ST                    = 0xc8\n\tDLT_JUNIPER_VP                    = 0xb7\n\tDLT_LAPB_WITH_DIR                 = 0xcf\n\tDLT_LAPD                          = 0xcb\n\tDLT_LIN                           = 0xd4\n\tDLT_LINUX_EVDEV                   = 0xd8\n\tDLT_LINUX_IRDA                    = 0x90\n\tDLT_LINUX_LAPD                    = 0xb1\n\tDLT_LINUX_SLL                     = 0x71\n\tDLT_LOOP                          = 0x6c\n\tDLT_LTALK                         = 0x72\n\tDLT_MFR                           = 0xb6\n\tDLT_MOST                          = 0xd3\n\tDLT_MPLS                          = 0xdb\n\tDLT_MTP2                          = 0x8c\n\tDLT_MTP2_WITH_PHDR                = 0x8b\n\tDLT_MTP3                          = 0x8d\n\tDLT_NULL                          = 0x0\n\tDLT_PCI_EXP                       = 0x7d\n\tDLT_PFLOG                         = 0x75\n\tDLT_PFSYNC                        = 0x12\n\tDLT_PPI                           = 0xc0\n\tDLT_PPP                           = 0x9\n\tDLT_PPP_BSDOS                     = 0xe\n\tDLT_PPP_ETHER                     = 0x33\n\tDLT_PPP_PPPD                      = 0xa6\n\tDLT_PPP_SERIAL                    = 0x32\n\tDLT_PPP_WITH_DIR                  = 0xcc\n\tDLT_PRISM_HEADER                  = 0x77\n\tDLT_PRONET                        = 0x4\n\tDLT_RAIF1                         = 0xc6\n\tDLT_RAW                           = 0xc\n\tDLT_RAWAF_MASK                    = 0x2240000\n\tDLT_RIO                           = 0x7c\n\tDLT_SCCP                          = 0x8e\n\tDLT_SITA                          = 0xc4\n\tDLT_SLIP                          = 0x8\n\tDLT_SLIP_BSDOS                    = 0xd\n\tDLT_SUNATM                        = 0x7b\n\tDLT_SYMANTEC_FIREWALL             = 0x63\n\tDLT_TZSP                          = 0x80\n\tDLT_USB                           = 0xba\n\tDLT_USB_LINUX                     = 0xbd\n\tDLT_USB_LINUX_MMAPPED             = 0xdc\n\tDLT_WIHART                        = 0xdf\n\tDLT_X2E_SERIAL                    = 0xd5\n\tDLT_X2E_XORAYA                    = 0xd6\n\tDT_BLK                            = 0x6\n\tDT_CHR                            = 0x2\n\tDT_DIR                            = 0x4\n\tDT_FIFO                           = 0x1\n\tDT_LNK                            = 0xa\n\tDT_REG                            = 0x8\n\tDT_SOCK                           = 0xc\n\tDT_UNKNOWN                        = 0x0\n\tDT_WHT                            = 0xe\n\tECHO                              = 0x8\n\tECHOCTL                           = 0x40\n\tECHOE                             = 0x2\n\tECHOK                             = 0x4\n\tECHOKE                            = 0x1\n\tECHONL                            = 0x10\n\tECHOPRT                           = 0x20\n\tEMUL_LINUX                        = 0x1\n\tEMUL_LINUX32                      = 0x5\n\tEMUL_MAXID                        = 0x6\n\tETHERCAP_JUMBO_MTU                = 0x4\n\tETHERCAP_VLAN_HWTAGGING           = 0x2\n\tETHERCAP_VLAN_MTU                 = 0x1\n\tETHERMIN                          = 0x2e\n\tETHERMTU                          = 0x5dc\n\tETHERMTU_JUMBO                    = 0x2328\n\tETHERTYPE_8023                    = 0x4\n\tETHERTYPE_AARP                    = 0x80f3\n\tETHERTYPE_ACCTON                  = 0x8390\n\tETHERTYPE_AEONIC                  = 0x8036\n\tETHERTYPE_ALPHA                   = 0x814a\n\tETHERTYPE_AMBER                   = 0x6008\n\tETHERTYPE_AMOEBA                  = 0x8145\n\tETHERTYPE_APOLLO                  = 0x80f7\n\tETHERTYPE_APOLLODOMAIN            = 0x8019\n\tETHERTYPE_APPLETALK               = 0x809b\n\tETHERTYPE_APPLITEK                = 0x80c7\n\tETHERTYPE_ARGONAUT                = 0x803a\n\tETHERTYPE_ARP                     = 0x806\n\tETHERTYPE_AT                      = 0x809b\n\tETHERTYPE_ATALK                   = 0x809b\n\tETHERTYPE_ATOMIC                  = 0x86df\n\tETHERTYPE_ATT                     = 0x8069\n\tETHERTYPE_ATTSTANFORD             = 0x8008\n\tETHERTYPE_AUTOPHON                = 0x806a\n\tETHERTYPE_AXIS                    = 0x8856\n\tETHERTYPE_BCLOOP                  = 0x9003\n\tETHERTYPE_BOFL                    = 0x8102\n\tETHERTYPE_CABLETRON               = 0x7034\n\tETHERTYPE_CHAOS                   = 0x804\n\tETHERTYPE_COMDESIGN               = 0x806c\n\tETHERTYPE_COMPUGRAPHIC            = 0x806d\n\tETHERTYPE_COUNTERPOINT            = 0x8062\n\tETHERTYPE_CRONUS                  = 0x8004\n\tETHERTYPE_CRONUSVLN               = 0x8003\n\tETHERTYPE_DCA                     = 0x1234\n\tETHERTYPE_DDE                     = 0x807b\n\tETHERTYPE_DEBNI                   = 0xaaaa\n\tETHERTYPE_DECAM                   = 0x8048\n\tETHERTYPE_DECCUST                 = 0x6006\n\tETHERTYPE_DECDIAG                 = 0x6005\n\tETHERTYPE_DECDNS                  = 0x803c\n\tETHERTYPE_DECDTS                  = 0x803e\n\tETHERTYPE_DECEXPER                = 0x6000\n\tETHERTYPE_DECLAST                 = 0x8041\n\tETHERTYPE_DECLTM                  = 0x803f\n\tETHERTYPE_DECMUMPS                = 0x6009\n\tETHERTYPE_DECNETBIOS              = 0x8040\n\tETHERTYPE_DELTACON                = 0x86de\n\tETHERTYPE_DIDDLE                  = 0x4321\n\tETHERTYPE_DLOG1                   = 0x660\n\tETHERTYPE_DLOG2                   = 0x661\n\tETHERTYPE_DN                      = 0x6003\n\tETHERTYPE_DOGFIGHT                = 0x1989\n\tETHERTYPE_DSMD                    = 0x8039\n\tETHERTYPE_ECMA                    = 0x803\n\tETHERTYPE_ENCRYPT                 = 0x803d\n\tETHERTYPE_ES                      = 0x805d\n\tETHERTYPE_EXCELAN                 = 0x8010\n\tETHERTYPE_EXPERDATA               = 0x8049\n\tETHERTYPE_FLIP                    = 0x8146\n\tETHERTYPE_FLOWCONTROL             = 0x8808\n\tETHERTYPE_FRARP                   = 0x808\n\tETHERTYPE_GENDYN                  = 0x8068\n\tETHERTYPE_HAYES                   = 0x8130\n\tETHERTYPE_HIPPI_FP                = 0x8180\n\tETHERTYPE_HITACHI                 = 0x8820\n\tETHERTYPE_HP                      = 0x8005\n\tETHERTYPE_IEEEPUP                 = 0xa00\n\tETHERTYPE_IEEEPUPAT               = 0xa01\n\tETHERTYPE_IMLBL                   = 0x4c42\n\tETHERTYPE_IMLBLDIAG               = 0x424c\n\tETHERTYPE_IP                      = 0x800\n\tETHERTYPE_IPAS                    = 0x876c\n\tETHERTYPE_IPV6                    = 0x86dd\n\tETHERTYPE_IPX                     = 0x8137\n\tETHERTYPE_IPXNEW                  = 0x8037\n\tETHERTYPE_KALPANA                 = 0x8582\n\tETHERTYPE_LANBRIDGE               = 0x8038\n\tETHERTYPE_LANPROBE                = 0x8888\n\tETHERTYPE_LAT                     = 0x6004\n\tETHERTYPE_LBACK                   = 0x9000\n\tETHERTYPE_LITTLE                  = 0x8060\n\tETHERTYPE_LOGICRAFT               = 0x8148\n\tETHERTYPE_LOOPBACK                = 0x9000\n\tETHERTYPE_MATRA                   = 0x807a\n\tETHERTYPE_MAX                     = 0xffff\n\tETHERTYPE_MERIT                   = 0x807c\n\tETHERTYPE_MICP                    = 0x873a\n\tETHERTYPE_MOPDL                   = 0x6001\n\tETHERTYPE_MOPRC                   = 0x6002\n\tETHERTYPE_MOTOROLA                = 0x818d\n\tETHERTYPE_MPLS                    = 0x8847\n\tETHERTYPE_MPLS_MCAST              = 0x8848\n\tETHERTYPE_MUMPS                   = 0x813f\n\tETHERTYPE_NBPCC                   = 0x3c04\n\tETHERTYPE_NBPCLAIM                = 0x3c09\n\tETHERTYPE_NBPCLREQ                = 0x3c05\n\tETHERTYPE_NBPCLRSP                = 0x3c06\n\tETHERTYPE_NBPCREQ                 = 0x3c02\n\tETHERTYPE_NBPCRSP                 = 0x3c03\n\tETHERTYPE_NBPDG                   = 0x3c07\n\tETHERTYPE_NBPDGB                  = 0x3c08\n\tETHERTYPE_NBPDLTE                 = 0x3c0a\n\tETHERTYPE_NBPRAR                  = 0x3c0c\n\tETHERTYPE_NBPRAS                  = 0x3c0b\n\tETHERTYPE_NBPRST                  = 0x3c0d\n\tETHERTYPE_NBPSCD                  = 0x3c01\n\tETHERTYPE_NBPVCD                  = 0x3c00\n\tETHERTYPE_NBS                     = 0x802\n\tETHERTYPE_NCD                     = 0x8149\n\tETHERTYPE_NESTAR                  = 0x8006\n\tETHERTYPE_NETBEUI                 = 0x8191\n\tETHERTYPE_NOVELL                  = 0x8138\n\tETHERTYPE_NS                      = 0x600\n\tETHERTYPE_NSAT                    = 0x601\n\tETHERTYPE_NSCOMPAT                = 0x807\n\tETHERTYPE_NTRAILER                = 0x10\n\tETHERTYPE_OS9                     = 0x7007\n\tETHERTYPE_OS9NET                  = 0x7009\n\tETHERTYPE_PACER                   = 0x80c6\n\tETHERTYPE_PAE                     = 0x888e\n\tETHERTYPE_PCS                     = 0x4242\n\tETHERTYPE_PLANNING                = 0x8044\n\tETHERTYPE_PPP                     = 0x880b\n\tETHERTYPE_PPPOE                   = 0x8864\n\tETHERTYPE_PPPOEDISC               = 0x8863\n\tETHERTYPE_PRIMENTS                = 0x7031\n\tETHERTYPE_PUP                     = 0x200\n\tETHERTYPE_PUPAT                   = 0x200\n\tETHERTYPE_RACAL                   = 0x7030\n\tETHERTYPE_RATIONAL                = 0x8150\n\tETHERTYPE_RAWFR                   = 0x6559\n\tETHERTYPE_RCL                     = 0x1995\n\tETHERTYPE_RDP                     = 0x8739\n\tETHERTYPE_RETIX                   = 0x80f2\n\tETHERTYPE_REVARP                  = 0x8035\n\tETHERTYPE_SCA                     = 0x6007\n\tETHERTYPE_SECTRA                  = 0x86db\n\tETHERTYPE_SECUREDATA              = 0x876d\n\tETHERTYPE_SGITW                   = 0x817e\n\tETHERTYPE_SG_BOUNCE               = 0x8016\n\tETHERTYPE_SG_DIAG                 = 0x8013\n\tETHERTYPE_SG_NETGAMES             = 0x8014\n\tETHERTYPE_SG_RESV                 = 0x8015\n\tETHERTYPE_SIMNET                  = 0x5208\n\tETHERTYPE_SLOWPROTOCOLS           = 0x8809\n\tETHERTYPE_SNA                     = 0x80d5\n\tETHERTYPE_SNMP                    = 0x814c\n\tETHERTYPE_SONIX                   = 0xfaf5\n\tETHERTYPE_SPIDER                  = 0x809f\n\tETHERTYPE_SPRITE                  = 0x500\n\tETHERTYPE_STP                     = 0x8181\n\tETHERTYPE_TALARIS                 = 0x812b\n\tETHERTYPE_TALARISMC               = 0x852b\n\tETHERTYPE_TCPCOMP                 = 0x876b\n\tETHERTYPE_TCPSM                   = 0x9002\n\tETHERTYPE_TEC                     = 0x814f\n\tETHERTYPE_TIGAN                   = 0x802f\n\tETHERTYPE_TRAIL                   = 0x1000\n\tETHERTYPE_TRANSETHER              = 0x6558\n\tETHERTYPE_TYMSHARE                = 0x802e\n\tETHERTYPE_UBBST                   = 0x7005\n\tETHERTYPE_UBDEBUG                 = 0x900\n\tETHERTYPE_UBDIAGLOOP              = 0x7002\n\tETHERTYPE_UBDL                    = 0x7000\n\tETHERTYPE_UBNIU                   = 0x7001\n\tETHERTYPE_UBNMC                   = 0x7003\n\tETHERTYPE_VALID                   = 0x1600\n\tETHERTYPE_VARIAN                  = 0x80dd\n\tETHERTYPE_VAXELN                  = 0x803b\n\tETHERTYPE_VEECO                   = 0x8067\n\tETHERTYPE_VEXP                    = 0x805b\n\tETHERTYPE_VGLAB                   = 0x8131\n\tETHERTYPE_VINES                   = 0xbad\n\tETHERTYPE_VINESECHO               = 0xbaf\n\tETHERTYPE_VINESLOOP               = 0xbae\n\tETHERTYPE_VITAL                   = 0xff00\n\tETHERTYPE_VLAN                    = 0x8100\n\tETHERTYPE_VLTLMAN                 = 0x8080\n\tETHERTYPE_VPROD                   = 0x805c\n\tETHERTYPE_VURESERVED              = 0x8147\n\tETHERTYPE_WATERLOO                = 0x8130\n\tETHERTYPE_WELLFLEET               = 0x8103\n\tETHERTYPE_X25                     = 0x805\n\tETHERTYPE_X75                     = 0x801\n\tETHERTYPE_XNSSM                   = 0x9001\n\tETHERTYPE_XTP                     = 0x817d\n\tETHER_ADDR_LEN                    = 0x6\n\tETHER_CRC_LEN                     = 0x4\n\tETHER_CRC_POLY_BE                 = 0x4c11db6\n\tETHER_CRC_POLY_LE                 = 0xedb88320\n\tETHER_HDR_LEN                     = 0xe\n\tETHER_MAX_LEN                     = 0x5ee\n\tETHER_MAX_LEN_JUMBO               = 0x233a\n\tETHER_MIN_LEN                     = 0x40\n\tETHER_PPPOE_ENCAP_LEN             = 0x8\n\tETHER_TYPE_LEN                    = 0x2\n\tETHER_VLAN_ENCAP_LEN              = 0x4\n\tEVFILT_AIO                        = 0x2\n\tEVFILT_PROC                       = 0x4\n\tEVFILT_READ                       = 0x0\n\tEVFILT_SIGNAL                     = 0x5\n\tEVFILT_SYSCOUNT                   = 0x7\n\tEVFILT_TIMER                      = 0x6\n\tEVFILT_VNODE                      = 0x3\n\tEVFILT_WRITE                      = 0x1\n\tEV_ADD                            = 0x1\n\tEV_CLEAR                          = 0x20\n\tEV_DELETE                         = 0x2\n\tEV_DISABLE                        = 0x8\n\tEV_ENABLE                         = 0x4\n\tEV_EOF                            = 0x8000\n\tEV_ERROR                          = 0x4000\n\tEV_FLAG1                          = 0x2000\n\tEV_ONESHOT                        = 0x10\n\tEV_SYSFLAGS                       = 0xf000\n\tEXTA                              = 0x4b00\n\tEXTATTR_CMD_START                 = 0x1\n\tEXTATTR_CMD_STOP                  = 0x2\n\tEXTATTR_NAMESPACE_SYSTEM          = 0x2\n\tEXTATTR_NAMESPACE_USER            = 0x1\n\tEXTB                              = 0x9600\n\tEXTPROC                           = 0x800\n\tFD_CLOEXEC                        = 0x1\n\tFD_SETSIZE                        = 0x100\n\tFLUSHO                            = 0x800000\n\tF_CLOSEM                          = 0xa\n\tF_DUPFD                           = 0x0\n\tF_DUPFD_CLOEXEC                   = 0xc\n\tF_FSCTL                           = -0x80000000\n\tF_FSDIRMASK                       = 0x70000000\n\tF_FSIN                            = 0x10000000\n\tF_FSINOUT                         = 0x30000000\n\tF_FSOUT                           = 0x20000000\n\tF_FSPRIV                          = 0x8000\n\tF_FSVOID                          = 0x40000000\n\tF_GETFD                           = 0x1\n\tF_GETFL                           = 0x3\n\tF_GETLK                           = 0x7\n\tF_GETNOSIGPIPE                    = 0xd\n\tF_GETOWN                          = 0x5\n\tF_MAXFD                           = 0xb\n\tF_OK                              = 0x0\n\tF_PARAM_MASK                      = 0xfff\n\tF_PARAM_MAX                       = 0xfff\n\tF_RDLCK                           = 0x1\n\tF_SETFD                           = 0x2\n\tF_SETFL                           = 0x4\n\tF_SETLK                           = 0x8\n\tF_SETLKW                          = 0x9\n\tF_SETNOSIGPIPE                    = 0xe\n\tF_SETOWN                          = 0x6\n\tF_UNLCK                           = 0x2\n\tF_WRLCK                           = 0x3\n\tHUPCL                             = 0x4000\n\tHW_MACHINE                        = 0x1\n\tICANON                            = 0x100\n\tICMP6_FILTER                      = 0x12\n\tICRNL                             = 0x100\n\tIEXTEN                            = 0x400\n\tIFAN_ARRIVAL                      = 0x0\n\tIFAN_DEPARTURE                    = 0x1\n\tIFA_ROUTE                         = 0x1\n\tIFF_ALLMULTI                      = 0x200\n\tIFF_BROADCAST                     = 0x2\n\tIFF_CANTCHANGE                    = 0x8f52\n\tIFF_DEBUG                         = 0x4\n\tIFF_LINK0                         = 0x1000\n\tIFF_LINK1                         = 0x2000\n\tIFF_LINK2                         = 0x4000\n\tIFF_LOOPBACK                      = 0x8\n\tIFF_MULTICAST                     = 0x8000\n\tIFF_NOARP                         = 0x80\n\tIFF_NOTRAILERS                    = 0x20\n\tIFF_OACTIVE                       = 0x400\n\tIFF_POINTOPOINT                   = 0x10\n\tIFF_PROMISC                       = 0x100\n\tIFF_RUNNING                       = 0x40\n\tIFF_SIMPLEX                       = 0x800\n\tIFF_UP                            = 0x1\n\tIFNAMSIZ                          = 0x10\n\tIFT_1822                          = 0x2\n\tIFT_A12MPPSWITCH                  = 0x82\n\tIFT_AAL2                          = 0xbb\n\tIFT_AAL5                          = 0x31\n\tIFT_ADSL                          = 0x5e\n\tIFT_AFLANE8023                    = 0x3b\n\tIFT_AFLANE8025                    = 0x3c\n\tIFT_ARAP                          = 0x58\n\tIFT_ARCNET                        = 0x23\n\tIFT_ARCNETPLUS                    = 0x24\n\tIFT_ASYNC                         = 0x54\n\tIFT_ATM                           = 0x25\n\tIFT_ATMDXI                        = 0x69\n\tIFT_ATMFUNI                       = 0x6a\n\tIFT_ATMIMA                        = 0x6b\n\tIFT_ATMLOGICAL                    = 0x50\n\tIFT_ATMRADIO                      = 0xbd\n\tIFT_ATMSUBINTERFACE               = 0x86\n\tIFT_ATMVCIENDPT                   = 0xc2\n\tIFT_ATMVIRTUAL                    = 0x95\n\tIFT_BGPPOLICYACCOUNTING           = 0xa2\n\tIFT_BRIDGE                        = 0xd1\n\tIFT_BSC                           = 0x53\n\tIFT_CARP                          = 0xf8\n\tIFT_CCTEMUL                       = 0x3d\n\tIFT_CEPT                          = 0x13\n\tIFT_CES                           = 0x85\n\tIFT_CHANNEL                       = 0x46\n\tIFT_CNR                           = 0x55\n\tIFT_COFFEE                        = 0x84\n\tIFT_COMPOSITELINK                 = 0x9b\n\tIFT_DCN                           = 0x8d\n\tIFT_DIGITALPOWERLINE              = 0x8a\n\tIFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba\n\tIFT_DLSW                          = 0x4a\n\tIFT_DOCSCABLEDOWNSTREAM           = 0x80\n\tIFT_DOCSCABLEMACLAYER             = 0x7f\n\tIFT_DOCSCABLEUPSTREAM             = 0x81\n\tIFT_DOCSCABLEUPSTREAMCHANNEL      = 0xcd\n\tIFT_DS0                           = 0x51\n\tIFT_DS0BUNDLE                     = 0x52\n\tIFT_DS1FDL                        = 0xaa\n\tIFT_DS3                           = 0x1e\n\tIFT_DTM                           = 0x8c\n\tIFT_DVBASILN                      = 0xac\n\tIFT_DVBASIOUT                     = 0xad\n\tIFT_DVBRCCDOWNSTREAM              = 0x93\n\tIFT_DVBRCCMACLAYER                = 0x92\n\tIFT_DVBRCCUPSTREAM                = 0x94\n\tIFT_ECONET                        = 0xce\n\tIFT_EON                           = 0x19\n\tIFT_EPLRS                         = 0x57\n\tIFT_ESCON                         = 0x49\n\tIFT_ETHER                         = 0x6\n\tIFT_FAITH                         = 0xf2\n\tIFT_FAST                          = 0x7d\n\tIFT_FASTETHER                     = 0x3e\n\tIFT_FASTETHERFX                   = 0x45\n\tIFT_FDDI                          = 0xf\n\tIFT_FIBRECHANNEL                  = 0x38\n\tIFT_FRAMERELAYINTERCONNECT        = 0x3a\n\tIFT_FRAMERELAYMPI                 = 0x5c\n\tIFT_FRDLCIENDPT                   = 0xc1\n\tIFT_FRELAY                        = 0x20\n\tIFT_FRELAYDCE                     = 0x2c\n\tIFT_FRF16MFRBUNDLE                = 0xa3\n\tIFT_FRFORWARD                     = 0x9e\n\tIFT_G703AT2MB                     = 0x43\n\tIFT_G703AT64K                     = 0x42\n\tIFT_GIF                           = 0xf0\n\tIFT_GIGABITETHERNET               = 0x75\n\tIFT_GR303IDT                      = 0xb2\n\tIFT_GR303RDT                      = 0xb1\n\tIFT_H323GATEKEEPER                = 0xa4\n\tIFT_H323PROXY                     = 0xa5\n\tIFT_HDH1822                       = 0x3\n\tIFT_HDLC                          = 0x76\n\tIFT_HDSL2                         = 0xa8\n\tIFT_HIPERLAN2                     = 0xb7\n\tIFT_HIPPI                         = 0x2f\n\tIFT_HIPPIINTERFACE                = 0x39\n\tIFT_HOSTPAD                       = 0x5a\n\tIFT_HSSI                          = 0x2e\n\tIFT_HY                            = 0xe\n\tIFT_IBM370PARCHAN                 = 0x48\n\tIFT_IDSL                          = 0x9a\n\tIFT_IEEE1394                      = 0x90\n\tIFT_IEEE80211                     = 0x47\n\tIFT_IEEE80212                     = 0x37\n\tIFT_IEEE8023ADLAG                 = 0xa1\n\tIFT_IFGSN                         = 0x91\n\tIFT_IMT                           = 0xbe\n\tIFT_INFINIBAND                    = 0xc7\n\tIFT_INTERLEAVE                    = 0x7c\n\tIFT_IP                            = 0x7e\n\tIFT_IPFORWARD                     = 0x8e\n\tIFT_IPOVERATM                     = 0x72\n\tIFT_IPOVERCDLC                    = 0x6d\n\tIFT_IPOVERCLAW                    = 0x6e\n\tIFT_IPSWITCH                      = 0x4e\n\tIFT_ISDN                          = 0x3f\n\tIFT_ISDNBASIC                     = 0x14\n\tIFT_ISDNPRIMARY                   = 0x15\n\tIFT_ISDNS                         = 0x4b\n\tIFT_ISDNU                         = 0x4c\n\tIFT_ISO88022LLC                   = 0x29\n\tIFT_ISO88023                      = 0x7\n\tIFT_ISO88024                      = 0x8\n\tIFT_ISO88025                      = 0x9\n\tIFT_ISO88025CRFPINT               = 0x62\n\tIFT_ISO88025DTR                   = 0x56\n\tIFT_ISO88025FIBER                 = 0x73\n\tIFT_ISO88026                      = 0xa\n\tIFT_ISUP                          = 0xb3\n\tIFT_L2VLAN                        = 0x87\n\tIFT_L3IPVLAN                      = 0x88\n\tIFT_L3IPXVLAN                     = 0x89\n\tIFT_LAPB                          = 0x10\n\tIFT_LAPD                          = 0x4d\n\tIFT_LAPF                          = 0x77\n\tIFT_LINEGROUP                     = 0xd2\n\tIFT_LOCALTALK                     = 0x2a\n\tIFT_LOOP                          = 0x18\n\tIFT_MEDIAMAILOVERIP               = 0x8b\n\tIFT_MFSIGLINK                     = 0xa7\n\tIFT_MIOX25                        = 0x26\n\tIFT_MODEM                         = 0x30\n\tIFT_MPC                           = 0x71\n\tIFT_MPLS                          = 0xa6\n\tIFT_MPLSTUNNEL                    = 0x96\n\tIFT_MSDSL                         = 0x8f\n\tIFT_MVL                           = 0xbf\n\tIFT_MYRINET                       = 0x63\n\tIFT_NFAS                          = 0xaf\n\tIFT_NSIP                          = 0x1b\n\tIFT_OPTICALCHANNEL                = 0xc3\n\tIFT_OPTICALTRANSPORT              = 0xc4\n\tIFT_OTHER                         = 0x1\n\tIFT_P10                           = 0xc\n\tIFT_P80                           = 0xd\n\tIFT_PARA                          = 0x22\n\tIFT_PFLOG                         = 0xf5\n\tIFT_PFSYNC                        = 0xf6\n\tIFT_PLC                           = 0xae\n\tIFT_PON155                        = 0xcf\n\tIFT_PON622                        = 0xd0\n\tIFT_POS                           = 0xab\n\tIFT_PPP                           = 0x17\n\tIFT_PPPMULTILINKBUNDLE            = 0x6c\n\tIFT_PROPATM                       = 0xc5\n\tIFT_PROPBWAP2MP                   = 0xb8\n\tIFT_PROPCNLS                      = 0x59\n\tIFT_PROPDOCSWIRELESSDOWNSTREAM    = 0xb5\n\tIFT_PROPDOCSWIRELESSMACLAYER      = 0xb4\n\tIFT_PROPDOCSWIRELESSUPSTREAM      = 0xb6\n\tIFT_PROPMUX                       = 0x36\n\tIFT_PROPVIRTUAL                   = 0x35\n\tIFT_PROPWIRELESSP2P               = 0x9d\n\tIFT_PTPSERIAL                     = 0x16\n\tIFT_PVC                           = 0xf1\n\tIFT_Q2931                         = 0xc9\n\tIFT_QLLC                          = 0x44\n\tIFT_RADIOMAC                      = 0xbc\n\tIFT_RADSL                         = 0x5f\n\tIFT_REACHDSL                      = 0xc0\n\tIFT_RFC1483                       = 0x9f\n\tIFT_RS232                         = 0x21\n\tIFT_RSRB                          = 0x4f\n\tIFT_SDLC                          = 0x11\n\tIFT_SDSL                          = 0x60\n\tIFT_SHDSL                         = 0xa9\n\tIFT_SIP                           = 0x1f\n\tIFT_SIPSIG                        = 0xcc\n\tIFT_SIPTG                         = 0xcb\n\tIFT_SLIP                          = 0x1c\n\tIFT_SMDSDXI                       = 0x2b\n\tIFT_SMDSICIP                      = 0x34\n\tIFT_SONET                         = 0x27\n\tIFT_SONETOVERHEADCHANNEL          = 0xb9\n\tIFT_SONETPATH                     = 0x32\n\tIFT_SONETVT                       = 0x33\n\tIFT_SRP                           = 0x97\n\tIFT_SS7SIGLINK                    = 0x9c\n\tIFT_STACKTOSTACK                  = 0x6f\n\tIFT_STARLAN                       = 0xb\n\tIFT_STF                           = 0xd7\n\tIFT_T1                            = 0x12\n\tIFT_TDLC                          = 0x74\n\tIFT_TELINK                        = 0xc8\n\tIFT_TERMPAD                       = 0x5b\n\tIFT_TR008                         = 0xb0\n\tIFT_TRANSPHDLC                    = 0x7b\n\tIFT_TUNNEL                        = 0x83\n\tIFT_ULTRA                         = 0x1d\n\tIFT_USB                           = 0xa0\n\tIFT_V11                           = 0x40\n\tIFT_V35                           = 0x2d\n\tIFT_V36                           = 0x41\n\tIFT_V37                           = 0x78\n\tIFT_VDSL                          = 0x61\n\tIFT_VIRTUALIPADDRESS              = 0x70\n\tIFT_VIRTUALTG                     = 0xca\n\tIFT_VOICEDID                      = 0xd5\n\tIFT_VOICEEM                       = 0x64\n\tIFT_VOICEEMFGD                    = 0xd3\n\tIFT_VOICEENCAP                    = 0x67\n\tIFT_VOICEFGDEANA                  = 0xd4\n\tIFT_VOICEFXO                      = 0x65\n\tIFT_VOICEFXS                      = 0x66\n\tIFT_VOICEOVERATM                  = 0x98\n\tIFT_VOICEOVERCABLE                = 0xc6\n\tIFT_VOICEOVERFRAMERELAY           = 0x99\n\tIFT_VOICEOVERIP                   = 0x68\n\tIFT_X213                          = 0x5d\n\tIFT_X25                           = 0x5\n\tIFT_X25DDN                        = 0x4\n\tIFT_X25HUNTGROUP                  = 0x7a\n\tIFT_X25MLP                        = 0x79\n\tIFT_X25PLE                        = 0x28\n\tIFT_XETHER                        = 0x1a\n\tIGNBRK                            = 0x1\n\tIGNCR                             = 0x80\n\tIGNPAR                            = 0x4\n\tIMAXBEL                           = 0x2000\n\tINLCR                             = 0x40\n\tINPCK                             = 0x10\n\tIN_CLASSA_HOST                    = 0xffffff\n\tIN_CLASSA_MAX                     = 0x80\n\tIN_CLASSA_NET                     = 0xff000000\n\tIN_CLASSA_NSHIFT                  = 0x18\n\tIN_CLASSB_HOST                    = 0xffff\n\tIN_CLASSB_MAX                     = 0x10000\n\tIN_CLASSB_NET                     = 0xffff0000\n\tIN_CLASSB_NSHIFT                  = 0x10\n\tIN_CLASSC_HOST                    = 0xff\n\tIN_CLASSC_NET                     = 0xffffff00\n\tIN_CLASSC_NSHIFT                  = 0x8\n\tIN_CLASSD_HOST                    = 0xfffffff\n\tIN_CLASSD_NET                     = 0xf0000000\n\tIN_CLASSD_NSHIFT                  = 0x1c\n\tIN_LOOPBACKNET                    = 0x7f\n\tIPPROTO_AH                        = 0x33\n\tIPPROTO_CARP                      = 0x70\n\tIPPROTO_DONE                      = 0x101\n\tIPPROTO_DSTOPTS                   = 0x3c\n\tIPPROTO_EGP                       = 0x8\n\tIPPROTO_ENCAP                     = 0x62\n\tIPPROTO_EON                       = 0x50\n\tIPPROTO_ESP                       = 0x32\n\tIPPROTO_ETHERIP                   = 0x61\n\tIPPROTO_FRAGMENT                  = 0x2c\n\tIPPROTO_GGP                       = 0x3\n\tIPPROTO_GRE                       = 0x2f\n\tIPPROTO_HOPOPTS                   = 0x0\n\tIPPROTO_ICMP                      = 0x1\n\tIPPROTO_ICMPV6                    = 0x3a\n\tIPPROTO_IDP                       = 0x16\n\tIPPROTO_IGMP                      = 0x2\n\tIPPROTO_IP                        = 0x0\n\tIPPROTO_IPCOMP                    = 0x6c\n\tIPPROTO_IPIP                      = 0x4\n\tIPPROTO_IPV4                      = 0x4\n\tIPPROTO_IPV6                      = 0x29\n\tIPPROTO_IPV6_ICMP                 = 0x3a\n\tIPPROTO_MAX                       = 0x100\n\tIPPROTO_MAXID                     = 0x34\n\tIPPROTO_MOBILE                    = 0x37\n\tIPPROTO_NONE                      = 0x3b\n\tIPPROTO_PFSYNC                    = 0xf0\n\tIPPROTO_PIM                       = 0x67\n\tIPPROTO_PUP                       = 0xc\n\tIPPROTO_RAW                       = 0xff\n\tIPPROTO_ROUTING                   = 0x2b\n\tIPPROTO_RSVP                      = 0x2e\n\tIPPROTO_TCP                       = 0x6\n\tIPPROTO_TP                        = 0x1d\n\tIPPROTO_UDP                       = 0x11\n\tIPPROTO_VRRP                      = 0x70\n\tIPV6_CHECKSUM                     = 0x1a\n\tIPV6_DEFAULT_MULTICAST_HOPS       = 0x1\n\tIPV6_DEFAULT_MULTICAST_LOOP       = 0x1\n\tIPV6_DEFHLIM                      = 0x40\n\tIPV6_DONTFRAG                     = 0x3e\n\tIPV6_DSTOPTS                      = 0x32\n\tIPV6_FAITH                        = 0x1d\n\tIPV6_FLOWINFO_MASK                = 0xffffff0f\n\tIPV6_FLOWLABEL_MASK               = 0xffff0f00\n\tIPV6_FRAGTTL                      = 0x78\n\tIPV6_HLIMDEC                      = 0x1\n\tIPV6_HOPLIMIT                     = 0x2f\n\tIPV6_HOPOPTS                      = 0x31\n\tIPV6_IPSEC_POLICY                 = 0x1c\n\tIPV6_JOIN_GROUP                   = 0xc\n\tIPV6_LEAVE_GROUP                  = 0xd\n\tIPV6_MAXHLIM                      = 0xff\n\tIPV6_MAXPACKET                    = 0xffff\n\tIPV6_MMTU                         = 0x500\n\tIPV6_MULTICAST_HOPS               = 0xa\n\tIPV6_MULTICAST_IF                 = 0x9\n\tIPV6_MULTICAST_LOOP               = 0xb\n\tIPV6_NEXTHOP                      = 0x30\n\tIPV6_PATHMTU                      = 0x2c\n\tIPV6_PKTINFO                      = 0x2e\n\tIPV6_PORTRANGE                    = 0xe\n\tIPV6_PORTRANGE_DEFAULT            = 0x0\n\tIPV6_PORTRANGE_HIGH               = 0x1\n\tIPV6_PORTRANGE_LOW                = 0x2\n\tIPV6_RECVDSTOPTS                  = 0x28\n\tIPV6_RECVHOPLIMIT                 = 0x25\n\tIPV6_RECVHOPOPTS                  = 0x27\n\tIPV6_RECVPATHMTU                  = 0x2b\n\tIPV6_RECVPKTINFO                  = 0x24\n\tIPV6_RECVRTHDR                    = 0x26\n\tIPV6_RECVTCLASS                   = 0x39\n\tIPV6_RTHDR                        = 0x33\n\tIPV6_RTHDRDSTOPTS                 = 0x23\n\tIPV6_RTHDR_LOOSE                  = 0x0\n\tIPV6_RTHDR_STRICT                 = 0x1\n\tIPV6_RTHDR_TYPE_0                 = 0x0\n\tIPV6_SOCKOPT_RESERVED1            = 0x3\n\tIPV6_TCLASS                       = 0x3d\n\tIPV6_UNICAST_HOPS                 = 0x4\n\tIPV6_USE_MIN_MTU                  = 0x2a\n\tIPV6_V6ONLY                       = 0x1b\n\tIPV6_VERSION                      = 0x60\n\tIPV6_VERSION_MASK                 = 0xf0\n\tIP_ADD_MEMBERSHIP                 = 0xc\n\tIP_DEFAULT_MULTICAST_LOOP         = 0x1\n\tIP_DEFAULT_MULTICAST_TTL          = 0x1\n\tIP_DF                             = 0x4000\n\tIP_DROP_MEMBERSHIP                = 0xd\n\tIP_EF                             = 0x8000\n\tIP_ERRORMTU                       = 0x15\n\tIP_HDRINCL                        = 0x2\n\tIP_IPSEC_POLICY                   = 0x16\n\tIP_MAXPACKET                      = 0xffff\n\tIP_MAX_MEMBERSHIPS                = 0x14\n\tIP_MF                             = 0x2000\n\tIP_MINFRAGSIZE                    = 0x45\n\tIP_MINTTL                         = 0x18\n\tIP_MSS                            = 0x240\n\tIP_MULTICAST_IF                   = 0x9\n\tIP_MULTICAST_LOOP                 = 0xb\n\tIP_MULTICAST_TTL                  = 0xa\n\tIP_OFFMASK                        = 0x1fff\n\tIP_OPTIONS                        = 0x1\n\tIP_PORTRANGE                      = 0x13\n\tIP_PORTRANGE_DEFAULT              = 0x0\n\tIP_PORTRANGE_HIGH                 = 0x1\n\tIP_PORTRANGE_LOW                  = 0x2\n\tIP_RECVDSTADDR                    = 0x7\n\tIP_RECVIF                         = 0x14\n\tIP_RECVOPTS                       = 0x5\n\tIP_RECVRETOPTS                    = 0x6\n\tIP_RECVTTL                        = 0x17\n\tIP_RETOPTS                        = 0x8\n\tIP_RF                             = 0x8000\n\tIP_TOS                            = 0x3\n\tIP_TTL                            = 0x4\n\tISIG                              = 0x80\n\tISTRIP                            = 0x20\n\tIXANY                             = 0x800\n\tIXOFF                             = 0x400\n\tIXON                              = 0x200\n\tKERN_HOSTNAME                     = 0xa\n\tKERN_OSRELEASE                    = 0x2\n\tKERN_OSTYPE                       = 0x1\n\tKERN_VERSION                      = 0x4\n\tLOCK_EX                           = 0x2\n\tLOCK_NB                           = 0x4\n\tLOCK_SH                           = 0x1\n\tLOCK_UN                           = 0x8\n\tMADV_DONTNEED                     = 0x4\n\tMADV_FREE                         = 0x6\n\tMADV_NORMAL                       = 0x0\n\tMADV_RANDOM                       = 0x1\n\tMADV_SEQUENTIAL                   = 0x2\n\tMADV_SPACEAVAIL                   = 0x5\n\tMADV_WILLNEED                     = 0x3\n\tMAP_ALIGNMENT_16MB                = 0x18000000\n\tMAP_ALIGNMENT_1TB                 = 0x28000000\n\tMAP_ALIGNMENT_256TB               = 0x30000000\n\tMAP_ALIGNMENT_4GB                 = 0x20000000\n\tMAP_ALIGNMENT_64KB                = 0x10000000\n\tMAP_ALIGNMENT_64PB                = 0x38000000\n\tMAP_ALIGNMENT_MASK                = -0x1000000\n\tMAP_ALIGNMENT_SHIFT               = 0x18\n\tMAP_ANON                          = 0x1000\n\tMAP_FILE                          = 0x0\n\tMAP_FIXED                         = 0x10\n\tMAP_HASSEMAPHORE                  = 0x200\n\tMAP_INHERIT                       = 0x80\n\tMAP_INHERIT_COPY                  = 0x1\n\tMAP_INHERIT_DEFAULT               = 0x1\n\tMAP_INHERIT_DONATE_COPY           = 0x3\n\tMAP_INHERIT_NONE                  = 0x2\n\tMAP_INHERIT_SHARE                 = 0x0\n\tMAP_NORESERVE                     = 0x40\n\tMAP_PRIVATE                       = 0x2\n\tMAP_RENAME                        = 0x20\n\tMAP_SHARED                        = 0x1\n\tMAP_STACK                         = 0x2000\n\tMAP_TRYFIXED                      = 0x400\n\tMAP_WIRED                         = 0x800\n\tMCL_CURRENT                       = 0x1\n\tMCL_FUTURE                        = 0x2\n\tMNT_ASYNC                         = 0x40\n\tMNT_BASIC_FLAGS                   = 0xe782807f\n\tMNT_DEFEXPORTED                   = 0x200\n\tMNT_DISCARD                       = 0x800000\n\tMNT_EXKERB                        = 0x800\n\tMNT_EXNORESPORT                   = 0x8000000\n\tMNT_EXPORTANON                    = 0x400\n\tMNT_EXPORTED                      = 0x100\n\tMNT_EXPUBLIC                      = 0x10000000\n\tMNT_EXRDONLY                      = 0x80\n\tMNT_EXTATTR                       = 0x1000000\n\tMNT_FORCE                         = 0x80000\n\tMNT_GETARGS                       = 0x400000\n\tMNT_IGNORE                        = 0x100000\n\tMNT_LAZY                          = 0x3\n\tMNT_LOCAL                         = 0x1000\n\tMNT_LOG                           = 0x2000000\n\tMNT_NOATIME                       = 0x4000000\n\tMNT_NOCOREDUMP                    = 0x8000\n\tMNT_NODEV                         = 0x10\n\tMNT_NODEVMTIME                    = 0x40000000\n\tMNT_NOEXEC                        = 0x4\n\tMNT_NOSUID                        = 0x8\n\tMNT_NOWAIT                        = 0x2\n\tMNT_OP_FLAGS                      = 0x4d0000\n\tMNT_QUOTA                         = 0x2000\n\tMNT_RDONLY                        = 0x1\n\tMNT_RELATIME                      = 0x20000\n\tMNT_RELOAD                        = 0x40000\n\tMNT_ROOTFS                        = 0x4000\n\tMNT_SOFTDEP                       = 0x80000000\n\tMNT_SYMPERM                       = 0x20000000\n\tMNT_SYNCHRONOUS                   = 0x2\n\tMNT_UNION                         = 0x20\n\tMNT_UPDATE                        = 0x10000\n\tMNT_VISFLAGMASK                   = 0xff90ffff\n\tMNT_WAIT                          = 0x1\n\tMSG_BCAST                         = 0x100\n\tMSG_CMSG_CLOEXEC                  = 0x800\n\tMSG_CONTROLMBUF                   = 0x2000000\n\tMSG_CTRUNC                        = 0x20\n\tMSG_DONTROUTE                     = 0x4\n\tMSG_DONTWAIT                      = 0x80\n\tMSG_EOR                           = 0x8\n\tMSG_IOVUSRSPACE                   = 0x4000000\n\tMSG_LENUSRSPACE                   = 0x8000000\n\tMSG_MCAST                         = 0x200\n\tMSG_NAMEMBUF                      = 0x1000000\n\tMSG_NBIO                          = 0x1000\n\tMSG_NOSIGNAL                      = 0x400\n\tMSG_OOB                           = 0x1\n\tMSG_PEEK                          = 0x2\n\tMSG_TRUNC                         = 0x10\n\tMSG_USERFLAGS                     = 0xffffff\n\tMSG_WAITALL                       = 0x40\n\tMS_ASYNC                          = 0x1\n\tMS_INVALIDATE                     = 0x2\n\tMS_SYNC                           = 0x4\n\tNAME_MAX                          = 0x1ff\n\tNET_RT_DUMP                       = 0x1\n\tNET_RT_FLAGS                      = 0x2\n\tNET_RT_IFLIST                     = 0x5\n\tNET_RT_MAXID                      = 0x6\n\tNET_RT_OIFLIST                    = 0x4\n\tNET_RT_OOIFLIST                   = 0x3\n\tNOFLSH                            = 0x80000000\n\tNOTE_ATTRIB                       = 0x8\n\tNOTE_CHILD                        = 0x4\n\tNOTE_DELETE                       = 0x1\n\tNOTE_EXEC                         = 0x20000000\n\tNOTE_EXIT                         = 0x80000000\n\tNOTE_EXTEND                       = 0x4\n\tNOTE_FORK                         = 0x40000000\n\tNOTE_LINK                         = 0x10\n\tNOTE_LOWAT                        = 0x1\n\tNOTE_PCTRLMASK                    = 0xf0000000\n\tNOTE_PDATAMASK                    = 0xfffff\n\tNOTE_RENAME                       = 0x20\n\tNOTE_REVOKE                       = 0x40\n\tNOTE_TRACK                        = 0x1\n\tNOTE_TRACKERR                     = 0x2\n\tNOTE_WRITE                        = 0x2\n\tOCRNL                             = 0x10\n\tOFIOGETBMAP                       = 0xc004667a\n\tONLCR                             = 0x2\n\tONLRET                            = 0x40\n\tONOCR                             = 0x20\n\tONOEOT                            = 0x8\n\tOPOST                             = 0x1\n\tO_ACCMODE                         = 0x3\n\tO_ALT_IO                          = 0x40000\n\tO_APPEND                          = 0x8\n\tO_ASYNC                           = 0x40\n\tO_CLOEXEC                         = 0x400000\n\tO_CREAT                           = 0x200\n\tO_DIRECT                          = 0x80000\n\tO_DIRECTORY                       = 0x200000\n\tO_DSYNC                           = 0x10000\n\tO_EXCL                            = 0x800\n\tO_EXLOCK                          = 0x20\n\tO_FSYNC                           = 0x80\n\tO_NDELAY                          = 0x4\n\tO_NOCTTY                          = 0x8000\n\tO_NOFOLLOW                        = 0x100\n\tO_NONBLOCK                        = 0x4\n\tO_NOSIGPIPE                       = 0x1000000\n\tO_RDONLY                          = 0x0\n\tO_RDWR                            = 0x2\n\tO_RSYNC                           = 0x20000\n\tO_SHLOCK                          = 0x10\n\tO_SYNC                            = 0x80\n\tO_TRUNC                           = 0x400\n\tO_WRONLY                          = 0x1\n\tPARENB                            = 0x1000\n\tPARMRK                            = 0x8\n\tPARODD                            = 0x2000\n\tPENDIN                            = 0x20000000\n\tPRIO_PGRP                         = 0x1\n\tPRIO_PROCESS                      = 0x0\n\tPRIO_USER                         = 0x2\n\tPRI_IOFLUSH                       = 0x7c\n\tPROT_EXEC                         = 0x4\n\tPROT_NONE                         = 0x0\n\tPROT_READ                         = 0x1\n\tPROT_WRITE                        = 0x2\n\tRLIMIT_AS                         = 0xa\n\tRLIMIT_CORE                       = 0x4\n\tRLIMIT_CPU                        = 0x0\n\tRLIMIT_DATA                       = 0x2\n\tRLIMIT_FSIZE                      = 0x1\n\tRLIMIT_MEMLOCK                    = 0x6\n\tRLIMIT_NOFILE                     = 0x8\n\tRLIMIT_NPROC                      = 0x7\n\tRLIMIT_RSS                        = 0x5\n\tRLIMIT_STACK                      = 0x3\n\tRLIM_INFINITY                     = 0x7fffffffffffffff\n\tRTAX_AUTHOR                       = 0x6\n\tRTAX_BRD                          = 0x7\n\tRTAX_DST                          = 0x0\n\tRTAX_GATEWAY                      = 0x1\n\tRTAX_GENMASK                      = 0x3\n\tRTAX_IFA                          = 0x5\n\tRTAX_IFP                          = 0x4\n\tRTAX_MAX                          = 0x9\n\tRTAX_NETMASK                      = 0x2\n\tRTAX_TAG                          = 0x8\n\tRTA_AUTHOR                        = 0x40\n\tRTA_BRD                           = 0x80\n\tRTA_DST                           = 0x1\n\tRTA_GATEWAY                       = 0x2\n\tRTA_GENMASK                       = 0x8\n\tRTA_IFA                           = 0x20\n\tRTA_IFP                           = 0x10\n\tRTA_NETMASK                       = 0x4\n\tRTA_TAG                           = 0x100\n\tRTF_ANNOUNCE                      = 0x20000\n\tRTF_BLACKHOLE                     = 0x1000\n\tRTF_CLONED                        = 0x2000\n\tRTF_CLONING                       = 0x100\n\tRTF_DONE                          = 0x40\n\tRTF_DYNAMIC                       = 0x10\n\tRTF_GATEWAY                       = 0x2\n\tRTF_HOST                          = 0x4\n\tRTF_LLINFO                        = 0x400\n\tRTF_MASK                          = 0x80\n\tRTF_MODIFIED                      = 0x20\n\tRTF_PROTO1                        = 0x8000\n\tRTF_PROTO2                        = 0x4000\n\tRTF_REJECT                        = 0x8\n\tRTF_SRC                           = 0x10000\n\tRTF_STATIC                        = 0x800\n\tRTF_UP                            = 0x1\n\tRTF_XRESOLVE                      = 0x200\n\tRTM_ADD                           = 0x1\n\tRTM_CHANGE                        = 0x3\n\tRTM_CHGADDR                       = 0x15\n\tRTM_DELADDR                       = 0xd\n\tRTM_DELETE                        = 0x2\n\tRTM_GET                           = 0x4\n\tRTM_IEEE80211                     = 0x11\n\tRTM_IFANNOUNCE                    = 0x10\n\tRTM_IFINFO                        = 0x14\n\tRTM_LLINFO_UPD                    = 0x13\n\tRTM_LOCK                          = 0x8\n\tRTM_LOSING                        = 0x5\n\tRTM_MISS                          = 0x7\n\tRTM_NEWADDR                       = 0xc\n\tRTM_OIFINFO                       = 0xf\n\tRTM_OLDADD                        = 0x9\n\tRTM_OLDDEL                        = 0xa\n\tRTM_OOIFINFO                      = 0xe\n\tRTM_REDIRECT                      = 0x6\n\tRTM_RESOLVE                       = 0xb\n\tRTM_RTTUNIT                       = 0xf4240\n\tRTM_SETGATE                       = 0x12\n\tRTM_VERSION                       = 0x4\n\tRTV_EXPIRE                        = 0x4\n\tRTV_HOPCOUNT                      = 0x2\n\tRTV_MTU                           = 0x1\n\tRTV_RPIPE                         = 0x8\n\tRTV_RTT                           = 0x40\n\tRTV_RTTVAR                        = 0x80\n\tRTV_SPIPE                         = 0x10\n\tRTV_SSTHRESH                      = 0x20\n\tRUSAGE_CHILDREN                   = -0x1\n\tRUSAGE_SELF                       = 0x0\n\tSCM_CREDS                         = 0x4\n\tSCM_RIGHTS                        = 0x1\n\tSCM_TIMESTAMP                     = 0x8\n\tSHUT_RD                           = 0x0\n\tSHUT_RDWR                         = 0x2\n\tSHUT_WR                           = 0x1\n\tSIOCADDMULTI                      = 0x80906931\n\tSIOCADDRT                         = 0x8038720a\n\tSIOCAIFADDR                       = 0x8040691a\n\tSIOCALIFADDR                      = 0x8118691c\n\tSIOCATMARK                        = 0x40047307\n\tSIOCDELMULTI                      = 0x80906932\n\tSIOCDELRT                         = 0x8038720b\n\tSIOCDIFADDR                       = 0x80906919\n\tSIOCDIFPHYADDR                    = 0x80906949\n\tSIOCDLIFADDR                      = 0x8118691e\n\tSIOCGDRVSPEC                      = 0xc028697b\n\tSIOCGETPFSYNC                     = 0xc09069f8\n\tSIOCGETSGCNT                      = 0xc0207534\n\tSIOCGETVIFCNT                     = 0xc0287533\n\tSIOCGHIWAT                        = 0x40047301\n\tSIOCGIFADDR                       = 0xc0906921\n\tSIOCGIFADDRPREF                   = 0xc0986920\n\tSIOCGIFALIAS                      = 0xc040691b\n\tSIOCGIFBRDADDR                    = 0xc0906923\n\tSIOCGIFCAP                        = 0xc0206976\n\tSIOCGIFCONF                       = 0xc0106926\n\tSIOCGIFDATA                       = 0xc0986985\n\tSIOCGIFDLT                        = 0xc0906977\n\tSIOCGIFDSTADDR                    = 0xc0906922\n\tSIOCGIFFLAGS                      = 0xc0906911\n\tSIOCGIFGENERIC                    = 0xc090693a\n\tSIOCGIFMEDIA                      = 0xc0306936\n\tSIOCGIFMETRIC                     = 0xc0906917\n\tSIOCGIFMTU                        = 0xc090697e\n\tSIOCGIFNETMASK                    = 0xc0906925\n\tSIOCGIFPDSTADDR                   = 0xc0906948\n\tSIOCGIFPSRCADDR                   = 0xc0906947\n\tSIOCGLIFADDR                      = 0xc118691d\n\tSIOCGLIFPHYADDR                   = 0xc118694b\n\tSIOCGLINKSTR                      = 0xc0286987\n\tSIOCGLOWAT                        = 0x40047303\n\tSIOCGPGRP                         = 0x40047309\n\tSIOCGVH                           = 0xc0906983\n\tSIOCIFCREATE                      = 0x8090697a\n\tSIOCIFDESTROY                     = 0x80906979\n\tSIOCIFGCLONERS                    = 0xc0106978\n\tSIOCINITIFADDR                    = 0xc0706984\n\tSIOCSDRVSPEC                      = 0x8028697b\n\tSIOCSETPFSYNC                     = 0x809069f7\n\tSIOCSHIWAT                        = 0x80047300\n\tSIOCSIFADDR                       = 0x8090690c\n\tSIOCSIFADDRPREF                   = 0x8098691f\n\tSIOCSIFBRDADDR                    = 0x80906913\n\tSIOCSIFCAP                        = 0x80206975\n\tSIOCSIFDSTADDR                    = 0x8090690e\n\tSIOCSIFFLAGS                      = 0x80906910\n\tSIOCSIFGENERIC                    = 0x80906939\n\tSIOCSIFMEDIA                      = 0xc0906935\n\tSIOCSIFMETRIC                     = 0x80906918\n\tSIOCSIFMTU                        = 0x8090697f\n\tSIOCSIFNETMASK                    = 0x80906916\n\tSIOCSIFPHYADDR                    = 0x80406946\n\tSIOCSLIFPHYADDR                   = 0x8118694a\n\tSIOCSLINKSTR                      = 0x80286988\n\tSIOCSLOWAT                        = 0x80047302\n\tSIOCSPGRP                         = 0x80047308\n\tSIOCSVH                           = 0xc0906982\n\tSIOCZIFDATA                       = 0xc0986986\n\tSOCK_CLOEXEC                      = 0x10000000\n\tSOCK_DGRAM                        = 0x2\n\tSOCK_FLAGS_MASK                   = 0xf0000000\n\tSOCK_NONBLOCK                     = 0x20000000\n\tSOCK_NOSIGPIPE                    = 0x40000000\n\tSOCK_RAW                          = 0x3\n\tSOCK_RDM                          = 0x4\n\tSOCK_SEQPACKET                    = 0x5\n\tSOCK_STREAM                       = 0x1\n\tSOL_SOCKET                        = 0xffff\n\tSOMAXCONN                         = 0x80\n\tSO_ACCEPTCONN                     = 0x2\n\tSO_ACCEPTFILTER                   = 0x1000\n\tSO_BROADCAST                      = 0x20\n\tSO_DEBUG                          = 0x1\n\tSO_DONTROUTE                      = 0x10\n\tSO_ERROR                          = 0x1007\n\tSO_KEEPALIVE                      = 0x8\n\tSO_LINGER                         = 0x80\n\tSO_NOHEADER                       = 0x100a\n\tSO_NOSIGPIPE                      = 0x800\n\tSO_OOBINLINE                      = 0x100\n\tSO_OVERFLOWED                     = 0x1009\n\tSO_RCVBUF                         = 0x1002\n\tSO_RCVLOWAT                       = 0x1004\n\tSO_RCVTIMEO                       = 0x100c\n\tSO_REUSEADDR                      = 0x4\n\tSO_REUSEPORT                      = 0x200\n\tSO_SNDBUF                         = 0x1001\n\tSO_SNDLOWAT                       = 0x1003\n\tSO_SNDTIMEO                       = 0x100b\n\tSO_TIMESTAMP                      = 0x2000\n\tSO_TYPE                           = 0x1008\n\tSO_USELOOPBACK                    = 0x40\n\tSYSCTL_VERSION                    = 0x1000000\n\tSYSCTL_VERS_0                     = 0x0\n\tSYSCTL_VERS_1                     = 0x1000000\n\tSYSCTL_VERS_MASK                  = 0xff000000\n\tS_ARCH1                           = 0x10000\n\tS_ARCH2                           = 0x20000\n\tS_BLKSIZE                         = 0x200\n\tS_IEXEC                           = 0x40\n\tS_IFBLK                           = 0x6000\n\tS_IFCHR                           = 0x2000\n\tS_IFDIR                           = 0x4000\n\tS_IFIFO                           = 0x1000\n\tS_IFLNK                           = 0xa000\n\tS_IFMT                            = 0xf000\n\tS_IFREG                           = 0x8000\n\tS_IFSOCK                          = 0xc000\n\tS_IFWHT                           = 0xe000\n\tS_IREAD                           = 0x100\n\tS_IRGRP                           = 0x20\n\tS_IROTH                           = 0x4\n\tS_IRUSR                           = 0x100\n\tS_IRWXG                           = 0x38\n\tS_IRWXO                           = 0x7\n\tS_IRWXU                           = 0x1c0\n\tS_ISGID                           = 0x400\n\tS_ISTXT                           = 0x200\n\tS_ISUID                           = 0x800\n\tS_ISVTX                           = 0x200\n\tS_IWGRP                           = 0x10\n\tS_IWOTH                           = 0x2\n\tS_IWRITE                          = 0x80\n\tS_IWUSR                           = 0x80\n\tS_IXGRP                           = 0x8\n\tS_IXOTH                           = 0x1\n\tS_IXUSR                           = 0x40\n\tS_LOGIN_SET                       = 0x1\n\tTCIFLUSH                          = 0x1\n\tTCIOFLUSH                         = 0x3\n\tTCOFLUSH                          = 0x2\n\tTCP_CONGCTL                       = 0x20\n\tTCP_KEEPCNT                       = 0x6\n\tTCP_KEEPIDLE                      = 0x3\n\tTCP_KEEPINIT                      = 0x7\n\tTCP_KEEPINTVL                     = 0x5\n\tTCP_MAXBURST                      = 0x4\n\tTCP_MAXSEG                        = 0x2\n\tTCP_MAXWIN                        = 0xffff\n\tTCP_MAX_WINSHIFT                  = 0xe\n\tTCP_MD5SIG                        = 0x10\n\tTCP_MINMSS                        = 0xd8\n\tTCP_MSS                           = 0x218\n\tTCP_NODELAY                       = 0x1\n\tTCSAFLUSH                         = 0x2\n\tTIOCCBRK                          = 0x2000747a\n\tTIOCCDTR                          = 0x20007478\n\tTIOCCONS                          = 0x80047462\n\tTIOCDCDTIMESTAMP                  = 0x40107458\n\tTIOCDRAIN                         = 0x2000745e\n\tTIOCEXCL                          = 0x2000740d\n\tTIOCEXT                           = 0x80047460\n\tTIOCFLAG_CDTRCTS                  = 0x10\n\tTIOCFLAG_CLOCAL                   = 0x2\n\tTIOCFLAG_CRTSCTS                  = 0x4\n\tTIOCFLAG_MDMBUF                   = 0x8\n\tTIOCFLAG_SOFTCAR                  = 0x1\n\tTIOCFLUSH                         = 0x80047410\n\tTIOCGETA                          = 0x402c7413\n\tTIOCGETD                          = 0x4004741a\n\tTIOCGFLAGS                        = 0x4004745d\n\tTIOCGLINED                        = 0x40207442\n\tTIOCGPGRP                         = 0x40047477\n\tTIOCGQSIZE                        = 0x40047481\n\tTIOCGRANTPT                       = 0x20007447\n\tTIOCGSID                          = 0x40047463\n\tTIOCGSIZE                         = 0x40087468\n\tTIOCGWINSZ                        = 0x40087468\n\tTIOCMBIC                          = 0x8004746b\n\tTIOCMBIS                          = 0x8004746c\n\tTIOCMGET                          = 0x4004746a\n\tTIOCMSET                          = 0x8004746d\n\tTIOCM_CAR                         = 0x40\n\tTIOCM_CD                          = 0x40\n\tTIOCM_CTS                         = 0x20\n\tTIOCM_DSR                         = 0x100\n\tTIOCM_DTR                         = 0x2\n\tTIOCM_LE                          = 0x1\n\tTIOCM_RI                          = 0x80\n\tTIOCM_RNG                         = 0x80\n\tTIOCM_RTS                         = 0x4\n\tTIOCM_SR                          = 0x10\n\tTIOCM_ST                          = 0x8\n\tTIOCNOTTY                         = 0x20007471\n\tTIOCNXCL                          = 0x2000740e\n\tTIOCOUTQ                          = 0x40047473\n\tTIOCPKT                           = 0x80047470\n\tTIOCPKT_DATA                      = 0x0\n\tTIOCPKT_DOSTOP                    = 0x20\n\tTIOCPKT_FLUSHREAD                 = 0x1\n\tTIOCPKT_FLUSHWRITE                = 0x2\n\tTIOCPKT_IOCTL                     = 0x40\n\tTIOCPKT_NOSTOP                    = 0x10\n\tTIOCPKT_START                     = 0x8\n\tTIOCPKT_STOP                      = 0x4\n\tTIOCPTMGET                        = 0x40287446\n\tTIOCPTSNAME                       = 0x40287448\n\tTIOCRCVFRAME                      = 0x80087445\n\tTIOCREMOTE                        = 0x80047469\n\tTIOCSBRK                          = 0x2000747b\n\tTIOCSCTTY                         = 0x20007461\n\tTIOCSDTR                          = 0x20007479\n\tTIOCSETA                          = 0x802c7414\n\tTIOCSETAF                         = 0x802c7416\n\tTIOCSETAW                         = 0x802c7415\n\tTIOCSETD                          = 0x8004741b\n\tTIOCSFLAGS                        = 0x8004745c\n\tTIOCSIG                           = 0x2000745f\n\tTIOCSLINED                        = 0x80207443\n\tTIOCSPGRP                         = 0x80047476\n\tTIOCSQSIZE                        = 0x80047480\n\tTIOCSSIZE                         = 0x80087467\n\tTIOCSTART                         = 0x2000746e\n\tTIOCSTAT                          = 0x80047465\n\tTIOCSTI                           = 0x80017472\n\tTIOCSTOP                          = 0x2000746f\n\tTIOCSWINSZ                        = 0x80087467\n\tTIOCUCNTL                         = 0x80047466\n\tTIOCXMTFRAME                      = 0x80087444\n\tTOSTOP                            = 0x400000\n\tVDISCARD                          = 0xf\n\tVDSUSP                            = 0xb\n\tVEOF                              = 0x0\n\tVEOL                              = 0x1\n\tVEOL2                             = 0x2\n\tVERASE                            = 0x3\n\tVINTR                             = 0x8\n\tVKILL                             = 0x5\n\tVLNEXT                            = 0xe\n\tVMIN                              = 0x10\n\tVQUIT                             = 0x9\n\tVREPRINT                          = 0x6\n\tVSTART                            = 0xc\n\tVSTATUS                           = 0x12\n\tVSTOP                             = 0xd\n\tVSUSP                             = 0xa\n\tVTIME                             = 0x11\n\tVWERASE                           = 0x4\n\tWALL                              = 0x8\n\tWALLSIG                           = 0x8\n\tWALTSIG                           = 0x4\n\tWCLONE                            = 0x4\n\tWCOREFLAG                         = 0x80\n\tWNOHANG                           = 0x1\n\tWNOWAIT                           = 0x10000\n\tWNOZOMBIE                         = 0x20000\n\tWOPTSCHECKED                      = 0x40000\n\tWSTOPPED                          = 0x7f\n\tWUNTRACED                         = 0x2\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x30)\n\tEADDRNOTAVAIL   = syscall.Errno(0x31)\n\tEAFNOSUPPORT    = syscall.Errno(0x2f)\n\tEAGAIN          = syscall.Errno(0x23)\n\tEALREADY        = syscall.Errno(0x25)\n\tEAUTH           = syscall.Errno(0x50)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADMSG         = syscall.Errno(0x58)\n\tEBADRPC         = syscall.Errno(0x48)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x57)\n\tECHILD          = syscall.Errno(0xa)\n\tECONNABORTED    = syscall.Errno(0x35)\n\tECONNREFUSED    = syscall.Errno(0x3d)\n\tECONNRESET      = syscall.Errno(0x36)\n\tEDEADLK         = syscall.Errno(0xb)\n\tEDESTADDRREQ    = syscall.Errno(0x27)\n\tEDOM            = syscall.Errno(0x21)\n\tEDQUOT          = syscall.Errno(0x45)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFTYPE          = syscall.Errno(0x4f)\n\tEHOSTDOWN       = syscall.Errno(0x40)\n\tEHOSTUNREACH    = syscall.Errno(0x41)\n\tEIDRM           = syscall.Errno(0x52)\n\tEILSEQ          = syscall.Errno(0x55)\n\tEINPROGRESS     = syscall.Errno(0x24)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEISCONN         = syscall.Errno(0x38)\n\tEISDIR          = syscall.Errno(0x15)\n\tELAST           = syscall.Errno(0x60)\n\tELOOP           = syscall.Errno(0x3e)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x28)\n\tEMULTIHOP       = syscall.Errno(0x5e)\n\tENAMETOOLONG    = syscall.Errno(0x3f)\n\tENEEDAUTH       = syscall.Errno(0x51)\n\tENETDOWN        = syscall.Errno(0x32)\n\tENETRESET       = syscall.Errno(0x34)\n\tENETUNREACH     = syscall.Errno(0x33)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x5d)\n\tENOBUFS         = syscall.Errno(0x37)\n\tENODATA         = syscall.Errno(0x59)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x4d)\n\tENOLINK         = syscall.Errno(0x5f)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x53)\n\tENOPROTOOPT     = syscall.Errno(0x2a)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSR           = syscall.Errno(0x5a)\n\tENOSTR          = syscall.Errno(0x5b)\n\tENOSYS          = syscall.Errno(0x4e)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x39)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x42)\n\tENOTSOCK        = syscall.Errno(0x26)\n\tENOTSUP         = syscall.Errno(0x56)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x2d)\n\tEOVERFLOW       = syscall.Errno(0x54)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x2e)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x43)\n\tEPROCUNAVAIL    = syscall.Errno(0x4c)\n\tEPROGMISMATCH   = syscall.Errno(0x4b)\n\tEPROGUNAVAIL    = syscall.Errno(0x4a)\n\tEPROTO          = syscall.Errno(0x60)\n\tEPROTONOSUPPORT = syscall.Errno(0x2b)\n\tEPROTOTYPE      = syscall.Errno(0x29)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x47)\n\tEROFS           = syscall.Errno(0x1e)\n\tERPCMISMATCH    = syscall.Errno(0x49)\n\tESHUTDOWN       = syscall.Errno(0x3a)\n\tESOCKTNOSUPPORT = syscall.Errno(0x2c)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x46)\n\tETIME           = syscall.Errno(0x5c)\n\tETIMEDOUT       = syscall.Errno(0x3c)\n\tETOOMANYREFS    = syscall.Errno(0x3b)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUSERS          = syscall.Errno(0x44)\n\tEWOULDBLOCK     = syscall.Errno(0x23)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x14)\n\tSIGCONT   = syscall.Signal(0x13)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINFO   = syscall.Signal(0x1d)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x17)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGPWR    = syscall.Signal(0x20)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTOP   = syscall.Signal(0x11)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x12)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x10)\n\tSIGUSR1   = syscall.Signal(0x1e)\n\tSIGUSR2   = syscall.Signal(0x1f)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"device not configured\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"operation not supported by device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large or too small\"},\n\t{35, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{36, \"EINPROGRESS\", \"operation now in progress\"},\n\t{37, \"EALREADY\", \"operation already in progress\"},\n\t{38, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{39, \"EDESTADDRREQ\", \"destination address required\"},\n\t{40, \"EMSGSIZE\", \"message too long\"},\n\t{41, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{42, \"ENOPROTOOPT\", \"protocol option not available\"},\n\t{43, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{44, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{45, \"EOPNOTSUPP\", \"operation not supported\"},\n\t{46, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{47, \"EAFNOSUPPORT\", \"address family not supported by protocol family\"},\n\t{48, \"EADDRINUSE\", \"address already in use\"},\n\t{49, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{50, \"ENETDOWN\", \"network is down\"},\n\t{51, \"ENETUNREACH\", \"network is unreachable\"},\n\t{52, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{53, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{54, \"ECONNRESET\", \"connection reset by peer\"},\n\t{55, \"ENOBUFS\", \"no buffer space available\"},\n\t{56, \"EISCONN\", \"socket is already connected\"},\n\t{57, \"ENOTCONN\", \"socket is not connected\"},\n\t{58, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{59, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{60, \"ETIMEDOUT\", \"connection timed out\"},\n\t{61, \"ECONNREFUSED\", \"connection refused\"},\n\t{62, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{63, \"ENAMETOOLONG\", \"file name too long\"},\n\t{64, \"EHOSTDOWN\", \"host is down\"},\n\t{65, \"EHOSTUNREACH\", \"no route to host\"},\n\t{66, \"ENOTEMPTY\", \"directory not empty\"},\n\t{67, \"EPROCLIM\", \"too many processes\"},\n\t{68, \"EUSERS\", \"too many users\"},\n\t{69, \"EDQUOT\", \"disc quota exceeded\"},\n\t{70, \"ESTALE\", \"stale NFS file handle\"},\n\t{71, \"EREMOTE\", \"too many levels of remote in path\"},\n\t{72, \"EBADRPC\", \"RPC struct is bad\"},\n\t{73, \"ERPCMISMATCH\", \"RPC version wrong\"},\n\t{74, \"EPROGUNAVAIL\", \"RPC prog. not avail\"},\n\t{75, \"EPROGMISMATCH\", \"program version wrong\"},\n\t{76, \"EPROCUNAVAIL\", \"bad procedure for program\"},\n\t{77, \"ENOLCK\", \"no locks available\"},\n\t{78, \"ENOSYS\", \"function not implemented\"},\n\t{79, \"EFTYPE\", \"inappropriate file type or format\"},\n\t{80, \"EAUTH\", \"authentication error\"},\n\t{81, \"ENEEDAUTH\", \"need authenticator\"},\n\t{82, \"EIDRM\", \"identifier removed\"},\n\t{83, \"ENOMSG\", \"no message of desired type\"},\n\t{84, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n\t{85, \"EILSEQ\", \"illegal byte sequence\"},\n\t{86, \"ENOTSUP\", \"not supported\"},\n\t{87, \"ECANCELED\", \"operation Canceled\"},\n\t{88, \"EBADMSG\", \"bad or Corrupt message\"},\n\t{89, \"ENODATA\", \"no message available\"},\n\t{90, \"ENOSR\", \"no STREAM resources\"},\n\t{91, \"ENOSTR\", \"not a STREAM\"},\n\t{92, \"ETIME\", \"STREAM ioctl timeout\"},\n\t{93, \"ENOATTR\", \"attribute not found\"},\n\t{94, \"EMULTIHOP\", \"multihop attempted\"},\n\t{95, \"ENOLINK\", \"link has been severed\"},\n\t{96, \"ELAST\", \"protocol error\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGIOT\", \"abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"stopped (signal)\"},\n\t{18, \"SIGTSTP\", \"stopped\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGINFO\", \"information request\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n\t{32, \"SIGPWR\", \"power fail/restart\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go",
    "content": "// mkerrors.sh -marm\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build arm,netbsd\n\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs -- -marm _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                      = 0x10\n\tAF_ARP                            = 0x1c\n\tAF_BLUETOOTH                      = 0x1f\n\tAF_CCITT                          = 0xa\n\tAF_CHAOS                          = 0x5\n\tAF_CNT                            = 0x15\n\tAF_COIP                           = 0x14\n\tAF_DATAKIT                        = 0x9\n\tAF_DECnet                         = 0xc\n\tAF_DLI                            = 0xd\n\tAF_E164                           = 0x1a\n\tAF_ECMA                           = 0x8\n\tAF_HYLINK                         = 0xf\n\tAF_IEEE80211                      = 0x20\n\tAF_IMPLINK                        = 0x3\n\tAF_INET                           = 0x2\n\tAF_INET6                          = 0x18\n\tAF_IPX                            = 0x17\n\tAF_ISDN                           = 0x1a\n\tAF_ISO                            = 0x7\n\tAF_LAT                            = 0xe\n\tAF_LINK                           = 0x12\n\tAF_LOCAL                          = 0x1\n\tAF_MAX                            = 0x23\n\tAF_MPLS                           = 0x21\n\tAF_NATM                           = 0x1b\n\tAF_NS                             = 0x6\n\tAF_OROUTE                         = 0x11\n\tAF_OSI                            = 0x7\n\tAF_PUP                            = 0x4\n\tAF_ROUTE                          = 0x22\n\tAF_SNA                            = 0xb\n\tAF_UNIX                           = 0x1\n\tAF_UNSPEC                         = 0x0\n\tARPHRD_ARCNET                     = 0x7\n\tARPHRD_ETHER                      = 0x1\n\tARPHRD_FRELAY                     = 0xf\n\tARPHRD_IEEE1394                   = 0x18\n\tARPHRD_IEEE802                    = 0x6\n\tARPHRD_STRIP                      = 0x17\n\tB0                                = 0x0\n\tB110                              = 0x6e\n\tB115200                           = 0x1c200\n\tB1200                             = 0x4b0\n\tB134                              = 0x86\n\tB14400                            = 0x3840\n\tB150                              = 0x96\n\tB1800                             = 0x708\n\tB19200                            = 0x4b00\n\tB200                              = 0xc8\n\tB230400                           = 0x38400\n\tB2400                             = 0x960\n\tB28800                            = 0x7080\n\tB300                              = 0x12c\n\tB38400                            = 0x9600\n\tB460800                           = 0x70800\n\tB4800                             = 0x12c0\n\tB50                               = 0x32\n\tB57600                            = 0xe100\n\tB600                              = 0x258\n\tB7200                             = 0x1c20\n\tB75                               = 0x4b\n\tB76800                            = 0x12c00\n\tB921600                           = 0xe1000\n\tB9600                             = 0x2580\n\tBIOCFEEDBACK                      = 0x8004427d\n\tBIOCFLUSH                         = 0x20004268\n\tBIOCGBLEN                         = 0x40044266\n\tBIOCGDLT                          = 0x4004426a\n\tBIOCGDLTLIST                      = 0xc0084277\n\tBIOCGETIF                         = 0x4090426b\n\tBIOCGFEEDBACK                     = 0x4004427c\n\tBIOCGHDRCMPLT                     = 0x40044274\n\tBIOCGRTIMEOUT                     = 0x400c427b\n\tBIOCGSEESENT                      = 0x40044278\n\tBIOCGSTATS                        = 0x4080426f\n\tBIOCGSTATSOLD                     = 0x4008426f\n\tBIOCIMMEDIATE                     = 0x80044270\n\tBIOCPROMISC                       = 0x20004269\n\tBIOCSBLEN                         = 0xc0044266\n\tBIOCSDLT                          = 0x80044276\n\tBIOCSETF                          = 0x80084267\n\tBIOCSETIF                         = 0x8090426c\n\tBIOCSFEEDBACK                     = 0x8004427d\n\tBIOCSHDRCMPLT                     = 0x80044275\n\tBIOCSRTIMEOUT                     = 0x800c427a\n\tBIOCSSEESENT                      = 0x80044279\n\tBIOCSTCPF                         = 0x80084272\n\tBIOCSUDPF                         = 0x80084273\n\tBIOCVERSION                       = 0x40044271\n\tBPF_A                             = 0x10\n\tBPF_ABS                           = 0x20\n\tBPF_ADD                           = 0x0\n\tBPF_ALIGNMENT                     = 0x4\n\tBPF_ALIGNMENT32                   = 0x4\n\tBPF_ALU                           = 0x4\n\tBPF_AND                           = 0x50\n\tBPF_B                             = 0x10\n\tBPF_DFLTBUFSIZE                   = 0x100000\n\tBPF_DIV                           = 0x30\n\tBPF_H                             = 0x8\n\tBPF_IMM                           = 0x0\n\tBPF_IND                           = 0x40\n\tBPF_JA                            = 0x0\n\tBPF_JEQ                           = 0x10\n\tBPF_JGE                           = 0x30\n\tBPF_JGT                           = 0x20\n\tBPF_JMP                           = 0x5\n\tBPF_JSET                          = 0x40\n\tBPF_K                             = 0x0\n\tBPF_LD                            = 0x0\n\tBPF_LDX                           = 0x1\n\tBPF_LEN                           = 0x80\n\tBPF_LSH                           = 0x60\n\tBPF_MAJOR_VERSION                 = 0x1\n\tBPF_MAXBUFSIZE                    = 0x1000000\n\tBPF_MAXINSNS                      = 0x200\n\tBPF_MEM                           = 0x60\n\tBPF_MEMWORDS                      = 0x10\n\tBPF_MINBUFSIZE                    = 0x20\n\tBPF_MINOR_VERSION                 = 0x1\n\tBPF_MISC                          = 0x7\n\tBPF_MSH                           = 0xa0\n\tBPF_MUL                           = 0x20\n\tBPF_NEG                           = 0x80\n\tBPF_OR                            = 0x40\n\tBPF_RELEASE                       = 0x30bb6\n\tBPF_RET                           = 0x6\n\tBPF_RSH                           = 0x70\n\tBPF_ST                            = 0x2\n\tBPF_STX                           = 0x3\n\tBPF_SUB                           = 0x10\n\tBPF_TAX                           = 0x0\n\tBPF_TXA                           = 0x80\n\tBPF_W                             = 0x0\n\tBPF_X                             = 0x8\n\tBRKINT                            = 0x2\n\tCFLUSH                            = 0xf\n\tCLOCAL                            = 0x8000\n\tCREAD                             = 0x800\n\tCRTSCTS                           = 0x10000\n\tCS5                               = 0x0\n\tCS6                               = 0x100\n\tCS7                               = 0x200\n\tCS8                               = 0x300\n\tCSIZE                             = 0x300\n\tCSTART                            = 0x11\n\tCSTATUS                           = 0x14\n\tCSTOP                             = 0x13\n\tCSTOPB                            = 0x400\n\tCSUSP                             = 0x1a\n\tCTL_HW                            = 0x6\n\tCTL_KERN                          = 0x1\n\tCTL_MAXNAME                       = 0xc\n\tCTL_NET                           = 0x4\n\tCTL_QUERY                         = -0x2\n\tDIOCBSFLUSH                       = 0x20006478\n\tDLT_A429                          = 0xb8\n\tDLT_A653_ICM                      = 0xb9\n\tDLT_AIRONET_HEADER                = 0x78\n\tDLT_AOS                           = 0xde\n\tDLT_APPLE_IP_OVER_IEEE1394        = 0x8a\n\tDLT_ARCNET                        = 0x7\n\tDLT_ARCNET_LINUX                  = 0x81\n\tDLT_ATM_CLIP                      = 0x13\n\tDLT_ATM_RFC1483                   = 0xb\n\tDLT_AURORA                        = 0x7e\n\tDLT_AX25                          = 0x3\n\tDLT_AX25_KISS                     = 0xca\n\tDLT_BACNET_MS_TP                  = 0xa5\n\tDLT_BLUETOOTH_HCI_H4              = 0xbb\n\tDLT_BLUETOOTH_HCI_H4_WITH_PHDR    = 0xc9\n\tDLT_CAN20B                        = 0xbe\n\tDLT_CAN_SOCKETCAN                 = 0xe3\n\tDLT_CHAOS                         = 0x5\n\tDLT_CISCO_IOS                     = 0x76\n\tDLT_C_HDLC                        = 0x68\n\tDLT_C_HDLC_WITH_DIR               = 0xcd\n\tDLT_DECT                          = 0xdd\n\tDLT_DOCSIS                        = 0x8f\n\tDLT_ECONET                        = 0x73\n\tDLT_EN10MB                        = 0x1\n\tDLT_EN3MB                         = 0x2\n\tDLT_ENC                           = 0x6d\n\tDLT_ERF                           = 0xc5\n\tDLT_ERF_ETH                       = 0xaf\n\tDLT_ERF_POS                       = 0xb0\n\tDLT_FC_2                          = 0xe0\n\tDLT_FC_2_WITH_FRAME_DELIMS        = 0xe1\n\tDLT_FDDI                          = 0xa\n\tDLT_FLEXRAY                       = 0xd2\n\tDLT_FRELAY                        = 0x6b\n\tDLT_FRELAY_WITH_DIR               = 0xce\n\tDLT_GCOM_SERIAL                   = 0xad\n\tDLT_GCOM_T1E1                     = 0xac\n\tDLT_GPF_F                         = 0xab\n\tDLT_GPF_T                         = 0xaa\n\tDLT_GPRS_LLC                      = 0xa9\n\tDLT_GSMTAP_ABIS                   = 0xda\n\tDLT_GSMTAP_UM                     = 0xd9\n\tDLT_HDLC                          = 0x10\n\tDLT_HHDLC                         = 0x79\n\tDLT_HIPPI                         = 0xf\n\tDLT_IBM_SN                        = 0x92\n\tDLT_IBM_SP                        = 0x91\n\tDLT_IEEE802                       = 0x6\n\tDLT_IEEE802_11                    = 0x69\n\tDLT_IEEE802_11_RADIO              = 0x7f\n\tDLT_IEEE802_11_RADIO_AVS          = 0xa3\n\tDLT_IEEE802_15_4                  = 0xc3\n\tDLT_IEEE802_15_4_LINUX            = 0xbf\n\tDLT_IEEE802_15_4_NONASK_PHY       = 0xd7\n\tDLT_IEEE802_16_MAC_CPS            = 0xbc\n\tDLT_IEEE802_16_MAC_CPS_RADIO      = 0xc1\n\tDLT_IPMB                          = 0xc7\n\tDLT_IPMB_LINUX                    = 0xd1\n\tDLT_IPNET                         = 0xe2\n\tDLT_IPV4                          = 0xe4\n\tDLT_IPV6                          = 0xe5\n\tDLT_IP_OVER_FC                    = 0x7a\n\tDLT_JUNIPER_ATM1                  = 0x89\n\tDLT_JUNIPER_ATM2                  = 0x87\n\tDLT_JUNIPER_CHDLC                 = 0xb5\n\tDLT_JUNIPER_ES                    = 0x84\n\tDLT_JUNIPER_ETHER                 = 0xb2\n\tDLT_JUNIPER_FRELAY                = 0xb4\n\tDLT_JUNIPER_GGSN                  = 0x85\n\tDLT_JUNIPER_ISM                   = 0xc2\n\tDLT_JUNIPER_MFR                   = 0x86\n\tDLT_JUNIPER_MLFR                  = 0x83\n\tDLT_JUNIPER_MLPPP                 = 0x82\n\tDLT_JUNIPER_MONITOR               = 0xa4\n\tDLT_JUNIPER_PIC_PEER              = 0xae\n\tDLT_JUNIPER_PPP                   = 0xb3\n\tDLT_JUNIPER_PPPOE                 = 0xa7\n\tDLT_JUNIPER_PPPOE_ATM             = 0xa8\n\tDLT_JUNIPER_SERVICES              = 0x88\n\tDLT_JUNIPER_ST                    = 0xc8\n\tDLT_JUNIPER_VP                    = 0xb7\n\tDLT_LAPB_WITH_DIR                 = 0xcf\n\tDLT_LAPD                          = 0xcb\n\tDLT_LIN                           = 0xd4\n\tDLT_LINUX_EVDEV                   = 0xd8\n\tDLT_LINUX_IRDA                    = 0x90\n\tDLT_LINUX_LAPD                    = 0xb1\n\tDLT_LINUX_SLL                     = 0x71\n\tDLT_LOOP                          = 0x6c\n\tDLT_LTALK                         = 0x72\n\tDLT_MFR                           = 0xb6\n\tDLT_MOST                          = 0xd3\n\tDLT_MPLS                          = 0xdb\n\tDLT_MTP2                          = 0x8c\n\tDLT_MTP2_WITH_PHDR                = 0x8b\n\tDLT_MTP3                          = 0x8d\n\tDLT_NULL                          = 0x0\n\tDLT_PCI_EXP                       = 0x7d\n\tDLT_PFLOG                         = 0x75\n\tDLT_PFSYNC                        = 0x12\n\tDLT_PPI                           = 0xc0\n\tDLT_PPP                           = 0x9\n\tDLT_PPP_BSDOS                     = 0xe\n\tDLT_PPP_ETHER                     = 0x33\n\tDLT_PPP_PPPD                      = 0xa6\n\tDLT_PPP_SERIAL                    = 0x32\n\tDLT_PPP_WITH_DIR                  = 0xcc\n\tDLT_PRISM_HEADER                  = 0x77\n\tDLT_PRONET                        = 0x4\n\tDLT_RAIF1                         = 0xc6\n\tDLT_RAW                           = 0xc\n\tDLT_RAWAF_MASK                    = 0x2240000\n\tDLT_RIO                           = 0x7c\n\tDLT_SCCP                          = 0x8e\n\tDLT_SITA                          = 0xc4\n\tDLT_SLIP                          = 0x8\n\tDLT_SLIP_BSDOS                    = 0xd\n\tDLT_SUNATM                        = 0x7b\n\tDLT_SYMANTEC_FIREWALL             = 0x63\n\tDLT_TZSP                          = 0x80\n\tDLT_USB                           = 0xba\n\tDLT_USB_LINUX                     = 0xbd\n\tDLT_USB_LINUX_MMAPPED             = 0xdc\n\tDLT_WIHART                        = 0xdf\n\tDLT_X2E_SERIAL                    = 0xd5\n\tDLT_X2E_XORAYA                    = 0xd6\n\tDT_BLK                            = 0x6\n\tDT_CHR                            = 0x2\n\tDT_DIR                            = 0x4\n\tDT_FIFO                           = 0x1\n\tDT_LNK                            = 0xa\n\tDT_REG                            = 0x8\n\tDT_SOCK                           = 0xc\n\tDT_UNKNOWN                        = 0x0\n\tDT_WHT                            = 0xe\n\tECHO                              = 0x8\n\tECHOCTL                           = 0x40\n\tECHOE                             = 0x2\n\tECHOK                             = 0x4\n\tECHOKE                            = 0x1\n\tECHONL                            = 0x10\n\tECHOPRT                           = 0x20\n\tEMUL_LINUX                        = 0x1\n\tEMUL_LINUX32                      = 0x5\n\tEMUL_MAXID                        = 0x6\n\tETHERCAP_JUMBO_MTU                = 0x4\n\tETHERCAP_VLAN_HWTAGGING           = 0x2\n\tETHERCAP_VLAN_MTU                 = 0x1\n\tETHERMIN                          = 0x2e\n\tETHERMTU                          = 0x5dc\n\tETHERMTU_JUMBO                    = 0x2328\n\tETHERTYPE_8023                    = 0x4\n\tETHERTYPE_AARP                    = 0x80f3\n\tETHERTYPE_ACCTON                  = 0x8390\n\tETHERTYPE_AEONIC                  = 0x8036\n\tETHERTYPE_ALPHA                   = 0x814a\n\tETHERTYPE_AMBER                   = 0x6008\n\tETHERTYPE_AMOEBA                  = 0x8145\n\tETHERTYPE_APOLLO                  = 0x80f7\n\tETHERTYPE_APOLLODOMAIN            = 0x8019\n\tETHERTYPE_APPLETALK               = 0x809b\n\tETHERTYPE_APPLITEK                = 0x80c7\n\tETHERTYPE_ARGONAUT                = 0x803a\n\tETHERTYPE_ARP                     = 0x806\n\tETHERTYPE_AT                      = 0x809b\n\tETHERTYPE_ATALK                   = 0x809b\n\tETHERTYPE_ATOMIC                  = 0x86df\n\tETHERTYPE_ATT                     = 0x8069\n\tETHERTYPE_ATTSTANFORD             = 0x8008\n\tETHERTYPE_AUTOPHON                = 0x806a\n\tETHERTYPE_AXIS                    = 0x8856\n\tETHERTYPE_BCLOOP                  = 0x9003\n\tETHERTYPE_BOFL                    = 0x8102\n\tETHERTYPE_CABLETRON               = 0x7034\n\tETHERTYPE_CHAOS                   = 0x804\n\tETHERTYPE_COMDESIGN               = 0x806c\n\tETHERTYPE_COMPUGRAPHIC            = 0x806d\n\tETHERTYPE_COUNTERPOINT            = 0x8062\n\tETHERTYPE_CRONUS                  = 0x8004\n\tETHERTYPE_CRONUSVLN               = 0x8003\n\tETHERTYPE_DCA                     = 0x1234\n\tETHERTYPE_DDE                     = 0x807b\n\tETHERTYPE_DEBNI                   = 0xaaaa\n\tETHERTYPE_DECAM                   = 0x8048\n\tETHERTYPE_DECCUST                 = 0x6006\n\tETHERTYPE_DECDIAG                 = 0x6005\n\tETHERTYPE_DECDNS                  = 0x803c\n\tETHERTYPE_DECDTS                  = 0x803e\n\tETHERTYPE_DECEXPER                = 0x6000\n\tETHERTYPE_DECLAST                 = 0x8041\n\tETHERTYPE_DECLTM                  = 0x803f\n\tETHERTYPE_DECMUMPS                = 0x6009\n\tETHERTYPE_DECNETBIOS              = 0x8040\n\tETHERTYPE_DELTACON                = 0x86de\n\tETHERTYPE_DIDDLE                  = 0x4321\n\tETHERTYPE_DLOG1                   = 0x660\n\tETHERTYPE_DLOG2                   = 0x661\n\tETHERTYPE_DN                      = 0x6003\n\tETHERTYPE_DOGFIGHT                = 0x1989\n\tETHERTYPE_DSMD                    = 0x8039\n\tETHERTYPE_ECMA                    = 0x803\n\tETHERTYPE_ENCRYPT                 = 0x803d\n\tETHERTYPE_ES                      = 0x805d\n\tETHERTYPE_EXCELAN                 = 0x8010\n\tETHERTYPE_EXPERDATA               = 0x8049\n\tETHERTYPE_FLIP                    = 0x8146\n\tETHERTYPE_FLOWCONTROL             = 0x8808\n\tETHERTYPE_FRARP                   = 0x808\n\tETHERTYPE_GENDYN                  = 0x8068\n\tETHERTYPE_HAYES                   = 0x8130\n\tETHERTYPE_HIPPI_FP                = 0x8180\n\tETHERTYPE_HITACHI                 = 0x8820\n\tETHERTYPE_HP                      = 0x8005\n\tETHERTYPE_IEEEPUP                 = 0xa00\n\tETHERTYPE_IEEEPUPAT               = 0xa01\n\tETHERTYPE_IMLBL                   = 0x4c42\n\tETHERTYPE_IMLBLDIAG               = 0x424c\n\tETHERTYPE_IP                      = 0x800\n\tETHERTYPE_IPAS                    = 0x876c\n\tETHERTYPE_IPV6                    = 0x86dd\n\tETHERTYPE_IPX                     = 0x8137\n\tETHERTYPE_IPXNEW                  = 0x8037\n\tETHERTYPE_KALPANA                 = 0x8582\n\tETHERTYPE_LANBRIDGE               = 0x8038\n\tETHERTYPE_LANPROBE                = 0x8888\n\tETHERTYPE_LAT                     = 0x6004\n\tETHERTYPE_LBACK                   = 0x9000\n\tETHERTYPE_LITTLE                  = 0x8060\n\tETHERTYPE_LOGICRAFT               = 0x8148\n\tETHERTYPE_LOOPBACK                = 0x9000\n\tETHERTYPE_MATRA                   = 0x807a\n\tETHERTYPE_MAX                     = 0xffff\n\tETHERTYPE_MERIT                   = 0x807c\n\tETHERTYPE_MICP                    = 0x873a\n\tETHERTYPE_MOPDL                   = 0x6001\n\tETHERTYPE_MOPRC                   = 0x6002\n\tETHERTYPE_MOTOROLA                = 0x818d\n\tETHERTYPE_MPLS                    = 0x8847\n\tETHERTYPE_MPLS_MCAST              = 0x8848\n\tETHERTYPE_MUMPS                   = 0x813f\n\tETHERTYPE_NBPCC                   = 0x3c04\n\tETHERTYPE_NBPCLAIM                = 0x3c09\n\tETHERTYPE_NBPCLREQ                = 0x3c05\n\tETHERTYPE_NBPCLRSP                = 0x3c06\n\tETHERTYPE_NBPCREQ                 = 0x3c02\n\tETHERTYPE_NBPCRSP                 = 0x3c03\n\tETHERTYPE_NBPDG                   = 0x3c07\n\tETHERTYPE_NBPDGB                  = 0x3c08\n\tETHERTYPE_NBPDLTE                 = 0x3c0a\n\tETHERTYPE_NBPRAR                  = 0x3c0c\n\tETHERTYPE_NBPRAS                  = 0x3c0b\n\tETHERTYPE_NBPRST                  = 0x3c0d\n\tETHERTYPE_NBPSCD                  = 0x3c01\n\tETHERTYPE_NBPVCD                  = 0x3c00\n\tETHERTYPE_NBS                     = 0x802\n\tETHERTYPE_NCD                     = 0x8149\n\tETHERTYPE_NESTAR                  = 0x8006\n\tETHERTYPE_NETBEUI                 = 0x8191\n\tETHERTYPE_NOVELL                  = 0x8138\n\tETHERTYPE_NS                      = 0x600\n\tETHERTYPE_NSAT                    = 0x601\n\tETHERTYPE_NSCOMPAT                = 0x807\n\tETHERTYPE_NTRAILER                = 0x10\n\tETHERTYPE_OS9                     = 0x7007\n\tETHERTYPE_OS9NET                  = 0x7009\n\tETHERTYPE_PACER                   = 0x80c6\n\tETHERTYPE_PAE                     = 0x888e\n\tETHERTYPE_PCS                     = 0x4242\n\tETHERTYPE_PLANNING                = 0x8044\n\tETHERTYPE_PPP                     = 0x880b\n\tETHERTYPE_PPPOE                   = 0x8864\n\tETHERTYPE_PPPOEDISC               = 0x8863\n\tETHERTYPE_PRIMENTS                = 0x7031\n\tETHERTYPE_PUP                     = 0x200\n\tETHERTYPE_PUPAT                   = 0x200\n\tETHERTYPE_RACAL                   = 0x7030\n\tETHERTYPE_RATIONAL                = 0x8150\n\tETHERTYPE_RAWFR                   = 0x6559\n\tETHERTYPE_RCL                     = 0x1995\n\tETHERTYPE_RDP                     = 0x8739\n\tETHERTYPE_RETIX                   = 0x80f2\n\tETHERTYPE_REVARP                  = 0x8035\n\tETHERTYPE_SCA                     = 0x6007\n\tETHERTYPE_SECTRA                  = 0x86db\n\tETHERTYPE_SECUREDATA              = 0x876d\n\tETHERTYPE_SGITW                   = 0x817e\n\tETHERTYPE_SG_BOUNCE               = 0x8016\n\tETHERTYPE_SG_DIAG                 = 0x8013\n\tETHERTYPE_SG_NETGAMES             = 0x8014\n\tETHERTYPE_SG_RESV                 = 0x8015\n\tETHERTYPE_SIMNET                  = 0x5208\n\tETHERTYPE_SLOWPROTOCOLS           = 0x8809\n\tETHERTYPE_SNA                     = 0x80d5\n\tETHERTYPE_SNMP                    = 0x814c\n\tETHERTYPE_SONIX                   = 0xfaf5\n\tETHERTYPE_SPIDER                  = 0x809f\n\tETHERTYPE_SPRITE                  = 0x500\n\tETHERTYPE_STP                     = 0x8181\n\tETHERTYPE_TALARIS                 = 0x812b\n\tETHERTYPE_TALARISMC               = 0x852b\n\tETHERTYPE_TCPCOMP                 = 0x876b\n\tETHERTYPE_TCPSM                   = 0x9002\n\tETHERTYPE_TEC                     = 0x814f\n\tETHERTYPE_TIGAN                   = 0x802f\n\tETHERTYPE_TRAIL                   = 0x1000\n\tETHERTYPE_TRANSETHER              = 0x6558\n\tETHERTYPE_TYMSHARE                = 0x802e\n\tETHERTYPE_UBBST                   = 0x7005\n\tETHERTYPE_UBDEBUG                 = 0x900\n\tETHERTYPE_UBDIAGLOOP              = 0x7002\n\tETHERTYPE_UBDL                    = 0x7000\n\tETHERTYPE_UBNIU                   = 0x7001\n\tETHERTYPE_UBNMC                   = 0x7003\n\tETHERTYPE_VALID                   = 0x1600\n\tETHERTYPE_VARIAN                  = 0x80dd\n\tETHERTYPE_VAXELN                  = 0x803b\n\tETHERTYPE_VEECO                   = 0x8067\n\tETHERTYPE_VEXP                    = 0x805b\n\tETHERTYPE_VGLAB                   = 0x8131\n\tETHERTYPE_VINES                   = 0xbad\n\tETHERTYPE_VINESECHO               = 0xbaf\n\tETHERTYPE_VINESLOOP               = 0xbae\n\tETHERTYPE_VITAL                   = 0xff00\n\tETHERTYPE_VLAN                    = 0x8100\n\tETHERTYPE_VLTLMAN                 = 0x8080\n\tETHERTYPE_VPROD                   = 0x805c\n\tETHERTYPE_VURESERVED              = 0x8147\n\tETHERTYPE_WATERLOO                = 0x8130\n\tETHERTYPE_WELLFLEET               = 0x8103\n\tETHERTYPE_X25                     = 0x805\n\tETHERTYPE_X75                     = 0x801\n\tETHERTYPE_XNSSM                   = 0x9001\n\tETHERTYPE_XTP                     = 0x817d\n\tETHER_ADDR_LEN                    = 0x6\n\tETHER_CRC_LEN                     = 0x4\n\tETHER_CRC_POLY_BE                 = 0x4c11db6\n\tETHER_CRC_POLY_LE                 = 0xedb88320\n\tETHER_HDR_LEN                     = 0xe\n\tETHER_MAX_LEN                     = 0x5ee\n\tETHER_MAX_LEN_JUMBO               = 0x233a\n\tETHER_MIN_LEN                     = 0x40\n\tETHER_PPPOE_ENCAP_LEN             = 0x8\n\tETHER_TYPE_LEN                    = 0x2\n\tETHER_VLAN_ENCAP_LEN              = 0x4\n\tEVFILT_AIO                        = 0x2\n\tEVFILT_PROC                       = 0x4\n\tEVFILT_READ                       = 0x0\n\tEVFILT_SIGNAL                     = 0x5\n\tEVFILT_SYSCOUNT                   = 0x7\n\tEVFILT_TIMER                      = 0x6\n\tEVFILT_VNODE                      = 0x3\n\tEVFILT_WRITE                      = 0x1\n\tEV_ADD                            = 0x1\n\tEV_CLEAR                          = 0x20\n\tEV_DELETE                         = 0x2\n\tEV_DISABLE                        = 0x8\n\tEV_ENABLE                         = 0x4\n\tEV_EOF                            = 0x8000\n\tEV_ERROR                          = 0x4000\n\tEV_FLAG1                          = 0x2000\n\tEV_ONESHOT                        = 0x10\n\tEV_SYSFLAGS                       = 0xf000\n\tEXTA                              = 0x4b00\n\tEXTATTR_CMD_START                 = 0x1\n\tEXTATTR_CMD_STOP                  = 0x2\n\tEXTATTR_NAMESPACE_SYSTEM          = 0x2\n\tEXTATTR_NAMESPACE_USER            = 0x1\n\tEXTB                              = 0x9600\n\tEXTPROC                           = 0x800\n\tFD_CLOEXEC                        = 0x1\n\tFD_SETSIZE                        = 0x100\n\tFLUSHO                            = 0x800000\n\tF_CLOSEM                          = 0xa\n\tF_DUPFD                           = 0x0\n\tF_DUPFD_CLOEXEC                   = 0xc\n\tF_FSCTL                           = -0x80000000\n\tF_FSDIRMASK                       = 0x70000000\n\tF_FSIN                            = 0x10000000\n\tF_FSINOUT                         = 0x30000000\n\tF_FSOUT                           = 0x20000000\n\tF_FSPRIV                          = 0x8000\n\tF_FSVOID                          = 0x40000000\n\tF_GETFD                           = 0x1\n\tF_GETFL                           = 0x3\n\tF_GETLK                           = 0x7\n\tF_GETNOSIGPIPE                    = 0xd\n\tF_GETOWN                          = 0x5\n\tF_MAXFD                           = 0xb\n\tF_OK                              = 0x0\n\tF_PARAM_MASK                      = 0xfff\n\tF_PARAM_MAX                       = 0xfff\n\tF_RDLCK                           = 0x1\n\tF_SETFD                           = 0x2\n\tF_SETFL                           = 0x4\n\tF_SETLK                           = 0x8\n\tF_SETLKW                          = 0x9\n\tF_SETNOSIGPIPE                    = 0xe\n\tF_SETOWN                          = 0x6\n\tF_UNLCK                           = 0x2\n\tF_WRLCK                           = 0x3\n\tHUPCL                             = 0x4000\n\tHW_MACHINE                        = 0x1\n\tICANON                            = 0x100\n\tICMP6_FILTER                      = 0x12\n\tICRNL                             = 0x100\n\tIEXTEN                            = 0x400\n\tIFAN_ARRIVAL                      = 0x0\n\tIFAN_DEPARTURE                    = 0x1\n\tIFA_ROUTE                         = 0x1\n\tIFF_ALLMULTI                      = 0x200\n\tIFF_BROADCAST                     = 0x2\n\tIFF_CANTCHANGE                    = 0x8f52\n\tIFF_DEBUG                         = 0x4\n\tIFF_LINK0                         = 0x1000\n\tIFF_LINK1                         = 0x2000\n\tIFF_LINK2                         = 0x4000\n\tIFF_LOOPBACK                      = 0x8\n\tIFF_MULTICAST                     = 0x8000\n\tIFF_NOARP                         = 0x80\n\tIFF_NOTRAILERS                    = 0x20\n\tIFF_OACTIVE                       = 0x400\n\tIFF_POINTOPOINT                   = 0x10\n\tIFF_PROMISC                       = 0x100\n\tIFF_RUNNING                       = 0x40\n\tIFF_SIMPLEX                       = 0x800\n\tIFF_UP                            = 0x1\n\tIFNAMSIZ                          = 0x10\n\tIFT_1822                          = 0x2\n\tIFT_A12MPPSWITCH                  = 0x82\n\tIFT_AAL2                          = 0xbb\n\tIFT_AAL5                          = 0x31\n\tIFT_ADSL                          = 0x5e\n\tIFT_AFLANE8023                    = 0x3b\n\tIFT_AFLANE8025                    = 0x3c\n\tIFT_ARAP                          = 0x58\n\tIFT_ARCNET                        = 0x23\n\tIFT_ARCNETPLUS                    = 0x24\n\tIFT_ASYNC                         = 0x54\n\tIFT_ATM                           = 0x25\n\tIFT_ATMDXI                        = 0x69\n\tIFT_ATMFUNI                       = 0x6a\n\tIFT_ATMIMA                        = 0x6b\n\tIFT_ATMLOGICAL                    = 0x50\n\tIFT_ATMRADIO                      = 0xbd\n\tIFT_ATMSUBINTERFACE               = 0x86\n\tIFT_ATMVCIENDPT                   = 0xc2\n\tIFT_ATMVIRTUAL                    = 0x95\n\tIFT_BGPPOLICYACCOUNTING           = 0xa2\n\tIFT_BRIDGE                        = 0xd1\n\tIFT_BSC                           = 0x53\n\tIFT_CARP                          = 0xf8\n\tIFT_CCTEMUL                       = 0x3d\n\tIFT_CEPT                          = 0x13\n\tIFT_CES                           = 0x85\n\tIFT_CHANNEL                       = 0x46\n\tIFT_CNR                           = 0x55\n\tIFT_COFFEE                        = 0x84\n\tIFT_COMPOSITELINK                 = 0x9b\n\tIFT_DCN                           = 0x8d\n\tIFT_DIGITALPOWERLINE              = 0x8a\n\tIFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba\n\tIFT_DLSW                          = 0x4a\n\tIFT_DOCSCABLEDOWNSTREAM           = 0x80\n\tIFT_DOCSCABLEMACLAYER             = 0x7f\n\tIFT_DOCSCABLEUPSTREAM             = 0x81\n\tIFT_DOCSCABLEUPSTREAMCHANNEL      = 0xcd\n\tIFT_DS0                           = 0x51\n\tIFT_DS0BUNDLE                     = 0x52\n\tIFT_DS1FDL                        = 0xaa\n\tIFT_DS3                           = 0x1e\n\tIFT_DTM                           = 0x8c\n\tIFT_DVBASILN                      = 0xac\n\tIFT_DVBASIOUT                     = 0xad\n\tIFT_DVBRCCDOWNSTREAM              = 0x93\n\tIFT_DVBRCCMACLAYER                = 0x92\n\tIFT_DVBRCCUPSTREAM                = 0x94\n\tIFT_ECONET                        = 0xce\n\tIFT_EON                           = 0x19\n\tIFT_EPLRS                         = 0x57\n\tIFT_ESCON                         = 0x49\n\tIFT_ETHER                         = 0x6\n\tIFT_FAITH                         = 0xf2\n\tIFT_FAST                          = 0x7d\n\tIFT_FASTETHER                     = 0x3e\n\tIFT_FASTETHERFX                   = 0x45\n\tIFT_FDDI                          = 0xf\n\tIFT_FIBRECHANNEL                  = 0x38\n\tIFT_FRAMERELAYINTERCONNECT        = 0x3a\n\tIFT_FRAMERELAYMPI                 = 0x5c\n\tIFT_FRDLCIENDPT                   = 0xc1\n\tIFT_FRELAY                        = 0x20\n\tIFT_FRELAYDCE                     = 0x2c\n\tIFT_FRF16MFRBUNDLE                = 0xa3\n\tIFT_FRFORWARD                     = 0x9e\n\tIFT_G703AT2MB                     = 0x43\n\tIFT_G703AT64K                     = 0x42\n\tIFT_GIF                           = 0xf0\n\tIFT_GIGABITETHERNET               = 0x75\n\tIFT_GR303IDT                      = 0xb2\n\tIFT_GR303RDT                      = 0xb1\n\tIFT_H323GATEKEEPER                = 0xa4\n\tIFT_H323PROXY                     = 0xa5\n\tIFT_HDH1822                       = 0x3\n\tIFT_HDLC                          = 0x76\n\tIFT_HDSL2                         = 0xa8\n\tIFT_HIPERLAN2                     = 0xb7\n\tIFT_HIPPI                         = 0x2f\n\tIFT_HIPPIINTERFACE                = 0x39\n\tIFT_HOSTPAD                       = 0x5a\n\tIFT_HSSI                          = 0x2e\n\tIFT_HY                            = 0xe\n\tIFT_IBM370PARCHAN                 = 0x48\n\tIFT_IDSL                          = 0x9a\n\tIFT_IEEE1394                      = 0x90\n\tIFT_IEEE80211                     = 0x47\n\tIFT_IEEE80212                     = 0x37\n\tIFT_IEEE8023ADLAG                 = 0xa1\n\tIFT_IFGSN                         = 0x91\n\tIFT_IMT                           = 0xbe\n\tIFT_INFINIBAND                    = 0xc7\n\tIFT_INTERLEAVE                    = 0x7c\n\tIFT_IP                            = 0x7e\n\tIFT_IPFORWARD                     = 0x8e\n\tIFT_IPOVERATM                     = 0x72\n\tIFT_IPOVERCDLC                    = 0x6d\n\tIFT_IPOVERCLAW                    = 0x6e\n\tIFT_IPSWITCH                      = 0x4e\n\tIFT_ISDN                          = 0x3f\n\tIFT_ISDNBASIC                     = 0x14\n\tIFT_ISDNPRIMARY                   = 0x15\n\tIFT_ISDNS                         = 0x4b\n\tIFT_ISDNU                         = 0x4c\n\tIFT_ISO88022LLC                   = 0x29\n\tIFT_ISO88023                      = 0x7\n\tIFT_ISO88024                      = 0x8\n\tIFT_ISO88025                      = 0x9\n\tIFT_ISO88025CRFPINT               = 0x62\n\tIFT_ISO88025DTR                   = 0x56\n\tIFT_ISO88025FIBER                 = 0x73\n\tIFT_ISO88026                      = 0xa\n\tIFT_ISUP                          = 0xb3\n\tIFT_L2VLAN                        = 0x87\n\tIFT_L3IPVLAN                      = 0x88\n\tIFT_L3IPXVLAN                     = 0x89\n\tIFT_LAPB                          = 0x10\n\tIFT_LAPD                          = 0x4d\n\tIFT_LAPF                          = 0x77\n\tIFT_LINEGROUP                     = 0xd2\n\tIFT_LOCALTALK                     = 0x2a\n\tIFT_LOOP                          = 0x18\n\tIFT_MEDIAMAILOVERIP               = 0x8b\n\tIFT_MFSIGLINK                     = 0xa7\n\tIFT_MIOX25                        = 0x26\n\tIFT_MODEM                         = 0x30\n\tIFT_MPC                           = 0x71\n\tIFT_MPLS                          = 0xa6\n\tIFT_MPLSTUNNEL                    = 0x96\n\tIFT_MSDSL                         = 0x8f\n\tIFT_MVL                           = 0xbf\n\tIFT_MYRINET                       = 0x63\n\tIFT_NFAS                          = 0xaf\n\tIFT_NSIP                          = 0x1b\n\tIFT_OPTICALCHANNEL                = 0xc3\n\tIFT_OPTICALTRANSPORT              = 0xc4\n\tIFT_OTHER                         = 0x1\n\tIFT_P10                           = 0xc\n\tIFT_P80                           = 0xd\n\tIFT_PARA                          = 0x22\n\tIFT_PFLOG                         = 0xf5\n\tIFT_PFSYNC                        = 0xf6\n\tIFT_PLC                           = 0xae\n\tIFT_PON155                        = 0xcf\n\tIFT_PON622                        = 0xd0\n\tIFT_POS                           = 0xab\n\tIFT_PPP                           = 0x17\n\tIFT_PPPMULTILINKBUNDLE            = 0x6c\n\tIFT_PROPATM                       = 0xc5\n\tIFT_PROPBWAP2MP                   = 0xb8\n\tIFT_PROPCNLS                      = 0x59\n\tIFT_PROPDOCSWIRELESSDOWNSTREAM    = 0xb5\n\tIFT_PROPDOCSWIRELESSMACLAYER      = 0xb4\n\tIFT_PROPDOCSWIRELESSUPSTREAM      = 0xb6\n\tIFT_PROPMUX                       = 0x36\n\tIFT_PROPVIRTUAL                   = 0x35\n\tIFT_PROPWIRELESSP2P               = 0x9d\n\tIFT_PTPSERIAL                     = 0x16\n\tIFT_PVC                           = 0xf1\n\tIFT_Q2931                         = 0xc9\n\tIFT_QLLC                          = 0x44\n\tIFT_RADIOMAC                      = 0xbc\n\tIFT_RADSL                         = 0x5f\n\tIFT_REACHDSL                      = 0xc0\n\tIFT_RFC1483                       = 0x9f\n\tIFT_RS232                         = 0x21\n\tIFT_RSRB                          = 0x4f\n\tIFT_SDLC                          = 0x11\n\tIFT_SDSL                          = 0x60\n\tIFT_SHDSL                         = 0xa9\n\tIFT_SIP                           = 0x1f\n\tIFT_SIPSIG                        = 0xcc\n\tIFT_SIPTG                         = 0xcb\n\tIFT_SLIP                          = 0x1c\n\tIFT_SMDSDXI                       = 0x2b\n\tIFT_SMDSICIP                      = 0x34\n\tIFT_SONET                         = 0x27\n\tIFT_SONETOVERHEADCHANNEL          = 0xb9\n\tIFT_SONETPATH                     = 0x32\n\tIFT_SONETVT                       = 0x33\n\tIFT_SRP                           = 0x97\n\tIFT_SS7SIGLINK                    = 0x9c\n\tIFT_STACKTOSTACK                  = 0x6f\n\tIFT_STARLAN                       = 0xb\n\tIFT_STF                           = 0xd7\n\tIFT_T1                            = 0x12\n\tIFT_TDLC                          = 0x74\n\tIFT_TELINK                        = 0xc8\n\tIFT_TERMPAD                       = 0x5b\n\tIFT_TR008                         = 0xb0\n\tIFT_TRANSPHDLC                    = 0x7b\n\tIFT_TUNNEL                        = 0x83\n\tIFT_ULTRA                         = 0x1d\n\tIFT_USB                           = 0xa0\n\tIFT_V11                           = 0x40\n\tIFT_V35                           = 0x2d\n\tIFT_V36                           = 0x41\n\tIFT_V37                           = 0x78\n\tIFT_VDSL                          = 0x61\n\tIFT_VIRTUALIPADDRESS              = 0x70\n\tIFT_VIRTUALTG                     = 0xca\n\tIFT_VOICEDID                      = 0xd5\n\tIFT_VOICEEM                       = 0x64\n\tIFT_VOICEEMFGD                    = 0xd3\n\tIFT_VOICEENCAP                    = 0x67\n\tIFT_VOICEFGDEANA                  = 0xd4\n\tIFT_VOICEFXO                      = 0x65\n\tIFT_VOICEFXS                      = 0x66\n\tIFT_VOICEOVERATM                  = 0x98\n\tIFT_VOICEOVERCABLE                = 0xc6\n\tIFT_VOICEOVERFRAMERELAY           = 0x99\n\tIFT_VOICEOVERIP                   = 0x68\n\tIFT_X213                          = 0x5d\n\tIFT_X25                           = 0x5\n\tIFT_X25DDN                        = 0x4\n\tIFT_X25HUNTGROUP                  = 0x7a\n\tIFT_X25MLP                        = 0x79\n\tIFT_X25PLE                        = 0x28\n\tIFT_XETHER                        = 0x1a\n\tIGNBRK                            = 0x1\n\tIGNCR                             = 0x80\n\tIGNPAR                            = 0x4\n\tIMAXBEL                           = 0x2000\n\tINLCR                             = 0x40\n\tINPCK                             = 0x10\n\tIN_CLASSA_HOST                    = 0xffffff\n\tIN_CLASSA_MAX                     = 0x80\n\tIN_CLASSA_NET                     = 0xff000000\n\tIN_CLASSA_NSHIFT                  = 0x18\n\tIN_CLASSB_HOST                    = 0xffff\n\tIN_CLASSB_MAX                     = 0x10000\n\tIN_CLASSB_NET                     = 0xffff0000\n\tIN_CLASSB_NSHIFT                  = 0x10\n\tIN_CLASSC_HOST                    = 0xff\n\tIN_CLASSC_NET                     = 0xffffff00\n\tIN_CLASSC_NSHIFT                  = 0x8\n\tIN_CLASSD_HOST                    = 0xfffffff\n\tIN_CLASSD_NET                     = 0xf0000000\n\tIN_CLASSD_NSHIFT                  = 0x1c\n\tIN_LOOPBACKNET                    = 0x7f\n\tIPPROTO_AH                        = 0x33\n\tIPPROTO_CARP                      = 0x70\n\tIPPROTO_DONE                      = 0x101\n\tIPPROTO_DSTOPTS                   = 0x3c\n\tIPPROTO_EGP                       = 0x8\n\tIPPROTO_ENCAP                     = 0x62\n\tIPPROTO_EON                       = 0x50\n\tIPPROTO_ESP                       = 0x32\n\tIPPROTO_ETHERIP                   = 0x61\n\tIPPROTO_FRAGMENT                  = 0x2c\n\tIPPROTO_GGP                       = 0x3\n\tIPPROTO_GRE                       = 0x2f\n\tIPPROTO_HOPOPTS                   = 0x0\n\tIPPROTO_ICMP                      = 0x1\n\tIPPROTO_ICMPV6                    = 0x3a\n\tIPPROTO_IDP                       = 0x16\n\tIPPROTO_IGMP                      = 0x2\n\tIPPROTO_IP                        = 0x0\n\tIPPROTO_IPCOMP                    = 0x6c\n\tIPPROTO_IPIP                      = 0x4\n\tIPPROTO_IPV4                      = 0x4\n\tIPPROTO_IPV6                      = 0x29\n\tIPPROTO_IPV6_ICMP                 = 0x3a\n\tIPPROTO_MAX                       = 0x100\n\tIPPROTO_MAXID                     = 0x34\n\tIPPROTO_MOBILE                    = 0x37\n\tIPPROTO_NONE                      = 0x3b\n\tIPPROTO_PFSYNC                    = 0xf0\n\tIPPROTO_PIM                       = 0x67\n\tIPPROTO_PUP                       = 0xc\n\tIPPROTO_RAW                       = 0xff\n\tIPPROTO_ROUTING                   = 0x2b\n\tIPPROTO_RSVP                      = 0x2e\n\tIPPROTO_TCP                       = 0x6\n\tIPPROTO_TP                        = 0x1d\n\tIPPROTO_UDP                       = 0x11\n\tIPPROTO_VRRP                      = 0x70\n\tIPV6_CHECKSUM                     = 0x1a\n\tIPV6_DEFAULT_MULTICAST_HOPS       = 0x1\n\tIPV6_DEFAULT_MULTICAST_LOOP       = 0x1\n\tIPV6_DEFHLIM                      = 0x40\n\tIPV6_DONTFRAG                     = 0x3e\n\tIPV6_DSTOPTS                      = 0x32\n\tIPV6_FAITH                        = 0x1d\n\tIPV6_FLOWINFO_MASK                = 0xffffff0f\n\tIPV6_FLOWLABEL_MASK               = 0xffff0f00\n\tIPV6_FRAGTTL                      = 0x78\n\tIPV6_HLIMDEC                      = 0x1\n\tIPV6_HOPLIMIT                     = 0x2f\n\tIPV6_HOPOPTS                      = 0x31\n\tIPV6_IPSEC_POLICY                 = 0x1c\n\tIPV6_JOIN_GROUP                   = 0xc\n\tIPV6_LEAVE_GROUP                  = 0xd\n\tIPV6_MAXHLIM                      = 0xff\n\tIPV6_MAXPACKET                    = 0xffff\n\tIPV6_MMTU                         = 0x500\n\tIPV6_MULTICAST_HOPS               = 0xa\n\tIPV6_MULTICAST_IF                 = 0x9\n\tIPV6_MULTICAST_LOOP               = 0xb\n\tIPV6_NEXTHOP                      = 0x30\n\tIPV6_PATHMTU                      = 0x2c\n\tIPV6_PKTINFO                      = 0x2e\n\tIPV6_PORTRANGE                    = 0xe\n\tIPV6_PORTRANGE_DEFAULT            = 0x0\n\tIPV6_PORTRANGE_HIGH               = 0x1\n\tIPV6_PORTRANGE_LOW                = 0x2\n\tIPV6_RECVDSTOPTS                  = 0x28\n\tIPV6_RECVHOPLIMIT                 = 0x25\n\tIPV6_RECVHOPOPTS                  = 0x27\n\tIPV6_RECVPATHMTU                  = 0x2b\n\tIPV6_RECVPKTINFO                  = 0x24\n\tIPV6_RECVRTHDR                    = 0x26\n\tIPV6_RECVTCLASS                   = 0x39\n\tIPV6_RTHDR                        = 0x33\n\tIPV6_RTHDRDSTOPTS                 = 0x23\n\tIPV6_RTHDR_LOOSE                  = 0x0\n\tIPV6_RTHDR_STRICT                 = 0x1\n\tIPV6_RTHDR_TYPE_0                 = 0x0\n\tIPV6_SOCKOPT_RESERVED1            = 0x3\n\tIPV6_TCLASS                       = 0x3d\n\tIPV6_UNICAST_HOPS                 = 0x4\n\tIPV6_USE_MIN_MTU                  = 0x2a\n\tIPV6_V6ONLY                       = 0x1b\n\tIPV6_VERSION                      = 0x60\n\tIPV6_VERSION_MASK                 = 0xf0\n\tIP_ADD_MEMBERSHIP                 = 0xc\n\tIP_DEFAULT_MULTICAST_LOOP         = 0x1\n\tIP_DEFAULT_MULTICAST_TTL          = 0x1\n\tIP_DF                             = 0x4000\n\tIP_DROP_MEMBERSHIP                = 0xd\n\tIP_EF                             = 0x8000\n\tIP_ERRORMTU                       = 0x15\n\tIP_HDRINCL                        = 0x2\n\tIP_IPSEC_POLICY                   = 0x16\n\tIP_MAXPACKET                      = 0xffff\n\tIP_MAX_MEMBERSHIPS                = 0x14\n\tIP_MF                             = 0x2000\n\tIP_MINFRAGSIZE                    = 0x45\n\tIP_MINTTL                         = 0x18\n\tIP_MSS                            = 0x240\n\tIP_MULTICAST_IF                   = 0x9\n\tIP_MULTICAST_LOOP                 = 0xb\n\tIP_MULTICAST_TTL                  = 0xa\n\tIP_OFFMASK                        = 0x1fff\n\tIP_OPTIONS                        = 0x1\n\tIP_PORTRANGE                      = 0x13\n\tIP_PORTRANGE_DEFAULT              = 0x0\n\tIP_PORTRANGE_HIGH                 = 0x1\n\tIP_PORTRANGE_LOW                  = 0x2\n\tIP_RECVDSTADDR                    = 0x7\n\tIP_RECVIF                         = 0x14\n\tIP_RECVOPTS                       = 0x5\n\tIP_RECVRETOPTS                    = 0x6\n\tIP_RECVTTL                        = 0x17\n\tIP_RETOPTS                        = 0x8\n\tIP_RF                             = 0x8000\n\tIP_TOS                            = 0x3\n\tIP_TTL                            = 0x4\n\tISIG                              = 0x80\n\tISTRIP                            = 0x20\n\tIXANY                             = 0x800\n\tIXOFF                             = 0x400\n\tIXON                              = 0x200\n\tKERN_HOSTNAME                     = 0xa\n\tKERN_OSRELEASE                    = 0x2\n\tKERN_OSTYPE                       = 0x1\n\tKERN_VERSION                      = 0x4\n\tLOCK_EX                           = 0x2\n\tLOCK_NB                           = 0x4\n\tLOCK_SH                           = 0x1\n\tLOCK_UN                           = 0x8\n\tMADV_DONTNEED                     = 0x4\n\tMADV_FREE                         = 0x6\n\tMADV_NORMAL                       = 0x0\n\tMADV_RANDOM                       = 0x1\n\tMADV_SEQUENTIAL                   = 0x2\n\tMADV_SPACEAVAIL                   = 0x5\n\tMADV_WILLNEED                     = 0x3\n\tMAP_ALIGNMENT_16MB                = 0x18000000\n\tMAP_ALIGNMENT_1TB                 = 0x28000000\n\tMAP_ALIGNMENT_256TB               = 0x30000000\n\tMAP_ALIGNMENT_4GB                 = 0x20000000\n\tMAP_ALIGNMENT_64KB                = 0x10000000\n\tMAP_ALIGNMENT_64PB                = 0x38000000\n\tMAP_ALIGNMENT_MASK                = -0x1000000\n\tMAP_ALIGNMENT_SHIFT               = 0x18\n\tMAP_ANON                          = 0x1000\n\tMAP_FILE                          = 0x0\n\tMAP_FIXED                         = 0x10\n\tMAP_HASSEMAPHORE                  = 0x200\n\tMAP_INHERIT                       = 0x80\n\tMAP_INHERIT_COPY                  = 0x1\n\tMAP_INHERIT_DEFAULT               = 0x1\n\tMAP_INHERIT_DONATE_COPY           = 0x3\n\tMAP_INHERIT_NONE                  = 0x2\n\tMAP_INHERIT_SHARE                 = 0x0\n\tMAP_NORESERVE                     = 0x40\n\tMAP_PRIVATE                       = 0x2\n\tMAP_RENAME                        = 0x20\n\tMAP_SHARED                        = 0x1\n\tMAP_STACK                         = 0x2000\n\tMAP_TRYFIXED                      = 0x400\n\tMAP_WIRED                         = 0x800\n\tMNT_ASYNC                         = 0x40\n\tMNT_BASIC_FLAGS                   = 0xe782807f\n\tMNT_DEFEXPORTED                   = 0x200\n\tMNT_DISCARD                       = 0x800000\n\tMNT_EXKERB                        = 0x800\n\tMNT_EXNORESPORT                   = 0x8000000\n\tMNT_EXPORTANON                    = 0x400\n\tMNT_EXPORTED                      = 0x100\n\tMNT_EXPUBLIC                      = 0x10000000\n\tMNT_EXRDONLY                      = 0x80\n\tMNT_EXTATTR                       = 0x1000000\n\tMNT_FORCE                         = 0x80000\n\tMNT_GETARGS                       = 0x400000\n\tMNT_IGNORE                        = 0x100000\n\tMNT_LAZY                          = 0x3\n\tMNT_LOCAL                         = 0x1000\n\tMNT_LOG                           = 0x2000000\n\tMNT_NOATIME                       = 0x4000000\n\tMNT_NOCOREDUMP                    = 0x8000\n\tMNT_NODEV                         = 0x10\n\tMNT_NODEVMTIME                    = 0x40000000\n\tMNT_NOEXEC                        = 0x4\n\tMNT_NOSUID                        = 0x8\n\tMNT_NOWAIT                        = 0x2\n\tMNT_OP_FLAGS                      = 0x4d0000\n\tMNT_QUOTA                         = 0x2000\n\tMNT_RDONLY                        = 0x1\n\tMNT_RELATIME                      = 0x20000\n\tMNT_RELOAD                        = 0x40000\n\tMNT_ROOTFS                        = 0x4000\n\tMNT_SOFTDEP                       = 0x80000000\n\tMNT_SYMPERM                       = 0x20000000\n\tMNT_SYNCHRONOUS                   = 0x2\n\tMNT_UNION                         = 0x20\n\tMNT_UPDATE                        = 0x10000\n\tMNT_VISFLAGMASK                   = 0xff90ffff\n\tMNT_WAIT                          = 0x1\n\tMSG_BCAST                         = 0x100\n\tMSG_CMSG_CLOEXEC                  = 0x800\n\tMSG_CONTROLMBUF                   = 0x2000000\n\tMSG_CTRUNC                        = 0x20\n\tMSG_DONTROUTE                     = 0x4\n\tMSG_DONTWAIT                      = 0x80\n\tMSG_EOR                           = 0x8\n\tMSG_IOVUSRSPACE                   = 0x4000000\n\tMSG_LENUSRSPACE                   = 0x8000000\n\tMSG_MCAST                         = 0x200\n\tMSG_NAMEMBUF                      = 0x1000000\n\tMSG_NBIO                          = 0x1000\n\tMSG_NOSIGNAL                      = 0x400\n\tMSG_OOB                           = 0x1\n\tMSG_PEEK                          = 0x2\n\tMSG_TRUNC                         = 0x10\n\tMSG_USERFLAGS                     = 0xffffff\n\tMSG_WAITALL                       = 0x40\n\tMS_ASYNC                          = 0x1\n\tMS_INVALIDATE                     = 0x2\n\tMS_SYNC                           = 0x4\n\tNAME_MAX                          = 0x1ff\n\tNET_RT_DUMP                       = 0x1\n\tNET_RT_FLAGS                      = 0x2\n\tNET_RT_IFLIST                     = 0x5\n\tNET_RT_MAXID                      = 0x6\n\tNET_RT_OIFLIST                    = 0x4\n\tNET_RT_OOIFLIST                   = 0x3\n\tNOFLSH                            = 0x80000000\n\tNOTE_ATTRIB                       = 0x8\n\tNOTE_CHILD                        = 0x4\n\tNOTE_DELETE                       = 0x1\n\tNOTE_EXEC                         = 0x20000000\n\tNOTE_EXIT                         = 0x80000000\n\tNOTE_EXTEND                       = 0x4\n\tNOTE_FORK                         = 0x40000000\n\tNOTE_LINK                         = 0x10\n\tNOTE_LOWAT                        = 0x1\n\tNOTE_PCTRLMASK                    = 0xf0000000\n\tNOTE_PDATAMASK                    = 0xfffff\n\tNOTE_RENAME                       = 0x20\n\tNOTE_REVOKE                       = 0x40\n\tNOTE_TRACK                        = 0x1\n\tNOTE_TRACKERR                     = 0x2\n\tNOTE_WRITE                        = 0x2\n\tOCRNL                             = 0x10\n\tOFIOGETBMAP                       = 0xc004667a\n\tONLCR                             = 0x2\n\tONLRET                            = 0x40\n\tONOCR                             = 0x20\n\tONOEOT                            = 0x8\n\tOPOST                             = 0x1\n\tO_ACCMODE                         = 0x3\n\tO_ALT_IO                          = 0x40000\n\tO_APPEND                          = 0x8\n\tO_ASYNC                           = 0x40\n\tO_CLOEXEC                         = 0x400000\n\tO_CREAT                           = 0x200\n\tO_DIRECT                          = 0x80000\n\tO_DIRECTORY                       = 0x200000\n\tO_DSYNC                           = 0x10000\n\tO_EXCL                            = 0x800\n\tO_EXLOCK                          = 0x20\n\tO_FSYNC                           = 0x80\n\tO_NDELAY                          = 0x4\n\tO_NOCTTY                          = 0x8000\n\tO_NOFOLLOW                        = 0x100\n\tO_NONBLOCK                        = 0x4\n\tO_NOSIGPIPE                       = 0x1000000\n\tO_RDONLY                          = 0x0\n\tO_RDWR                            = 0x2\n\tO_RSYNC                           = 0x20000\n\tO_SHLOCK                          = 0x10\n\tO_SYNC                            = 0x80\n\tO_TRUNC                           = 0x400\n\tO_WRONLY                          = 0x1\n\tPARENB                            = 0x1000\n\tPARMRK                            = 0x8\n\tPARODD                            = 0x2000\n\tPENDIN                            = 0x20000000\n\tPROT_EXEC                         = 0x4\n\tPROT_NONE                         = 0x0\n\tPROT_READ                         = 0x1\n\tPROT_WRITE                        = 0x2\n\tPRI_IOFLUSH                       = 0x7c\n\tPRIO_PGRP                         = 0x1\n\tPRIO_PROCESS                      = 0x0\n\tPRIO_USER                         = 0x2\n\tRLIMIT_AS                         = 0xa\n\tRLIMIT_CORE                       = 0x4\n\tRLIMIT_CPU                        = 0x0\n\tRLIMIT_DATA                       = 0x2\n\tRLIMIT_FSIZE                      = 0x1\n\tRLIMIT_MEMLOCK                    = 0x6\n\tRLIMIT_NOFILE                     = 0x8\n\tRLIMIT_NPROC                      = 0x7\n\tRLIMIT_RSS                        = 0x5\n\tRLIMIT_STACK                      = 0x3\n\tRLIM_INFINITY                     = 0x7fffffffffffffff\n\tRTAX_AUTHOR                       = 0x6\n\tRTAX_BRD                          = 0x7\n\tRTAX_DST                          = 0x0\n\tRTAX_GATEWAY                      = 0x1\n\tRTAX_GENMASK                      = 0x3\n\tRTAX_IFA                          = 0x5\n\tRTAX_IFP                          = 0x4\n\tRTAX_MAX                          = 0x9\n\tRTAX_NETMASK                      = 0x2\n\tRTAX_TAG                          = 0x8\n\tRTA_AUTHOR                        = 0x40\n\tRTA_BRD                           = 0x80\n\tRTA_DST                           = 0x1\n\tRTA_GATEWAY                       = 0x2\n\tRTA_GENMASK                       = 0x8\n\tRTA_IFA                           = 0x20\n\tRTA_IFP                           = 0x10\n\tRTA_NETMASK                       = 0x4\n\tRTA_TAG                           = 0x100\n\tRTF_ANNOUNCE                      = 0x20000\n\tRTF_BLACKHOLE                     = 0x1000\n\tRTF_CLONED                        = 0x2000\n\tRTF_CLONING                       = 0x100\n\tRTF_DONE                          = 0x40\n\tRTF_DYNAMIC                       = 0x10\n\tRTF_GATEWAY                       = 0x2\n\tRTF_HOST                          = 0x4\n\tRTF_LLINFO                        = 0x400\n\tRTF_MASK                          = 0x80\n\tRTF_MODIFIED                      = 0x20\n\tRTF_PROTO1                        = 0x8000\n\tRTF_PROTO2                        = 0x4000\n\tRTF_REJECT                        = 0x8\n\tRTF_SRC                           = 0x10000\n\tRTF_STATIC                        = 0x800\n\tRTF_UP                            = 0x1\n\tRTF_XRESOLVE                      = 0x200\n\tRTM_ADD                           = 0x1\n\tRTM_CHANGE                        = 0x3\n\tRTM_CHGADDR                       = 0x15\n\tRTM_DELADDR                       = 0xd\n\tRTM_DELETE                        = 0x2\n\tRTM_GET                           = 0x4\n\tRTM_IEEE80211                     = 0x11\n\tRTM_IFANNOUNCE                    = 0x10\n\tRTM_IFINFO                        = 0x14\n\tRTM_LLINFO_UPD                    = 0x13\n\tRTM_LOCK                          = 0x8\n\tRTM_LOSING                        = 0x5\n\tRTM_MISS                          = 0x7\n\tRTM_NEWADDR                       = 0xc\n\tRTM_OIFINFO                       = 0xf\n\tRTM_OLDADD                        = 0x9\n\tRTM_OLDDEL                        = 0xa\n\tRTM_OOIFINFO                      = 0xe\n\tRTM_REDIRECT                      = 0x6\n\tRTM_RESOLVE                       = 0xb\n\tRTM_RTTUNIT                       = 0xf4240\n\tRTM_SETGATE                       = 0x12\n\tRTM_VERSION                       = 0x4\n\tRTV_EXPIRE                        = 0x4\n\tRTV_HOPCOUNT                      = 0x2\n\tRTV_MTU                           = 0x1\n\tRTV_RPIPE                         = 0x8\n\tRTV_RTT                           = 0x40\n\tRTV_RTTVAR                        = 0x80\n\tRTV_SPIPE                         = 0x10\n\tRTV_SSTHRESH                      = 0x20\n\tRUSAGE_CHILDREN                   = -0x1\n\tRUSAGE_SELF                       = 0x0\n\tSCM_CREDS                         = 0x4\n\tSCM_RIGHTS                        = 0x1\n\tSCM_TIMESTAMP                     = 0x8\n\tSHUT_RD                           = 0x0\n\tSHUT_RDWR                         = 0x2\n\tSHUT_WR                           = 0x1\n\tSIOCADDMULTI                      = 0x80906931\n\tSIOCADDRT                         = 0x8030720a\n\tSIOCAIFADDR                       = 0x8040691a\n\tSIOCALIFADDR                      = 0x8118691c\n\tSIOCATMARK                        = 0x40047307\n\tSIOCDELMULTI                      = 0x80906932\n\tSIOCDELRT                         = 0x8030720b\n\tSIOCDIFADDR                       = 0x80906919\n\tSIOCDIFPHYADDR                    = 0x80906949\n\tSIOCDLIFADDR                      = 0x8118691e\n\tSIOCGDRVSPEC                      = 0xc01c697b\n\tSIOCGETPFSYNC                     = 0xc09069f8\n\tSIOCGETSGCNT                      = 0xc0147534\n\tSIOCGETVIFCNT                     = 0xc0147533\n\tSIOCGHIWAT                        = 0x40047301\n\tSIOCGIFADDR                       = 0xc0906921\n\tSIOCGIFADDRPREF                   = 0xc0946920\n\tSIOCGIFALIAS                      = 0xc040691b\n\tSIOCGIFBRDADDR                    = 0xc0906923\n\tSIOCGIFCAP                        = 0xc0206976\n\tSIOCGIFCONF                       = 0xc0086926\n\tSIOCGIFDATA                       = 0xc0946985\n\tSIOCGIFDLT                        = 0xc0906977\n\tSIOCGIFDSTADDR                    = 0xc0906922\n\tSIOCGIFFLAGS                      = 0xc0906911\n\tSIOCGIFGENERIC                    = 0xc090693a\n\tSIOCGIFMEDIA                      = 0xc0286936\n\tSIOCGIFMETRIC                     = 0xc0906917\n\tSIOCGIFMTU                        = 0xc090697e\n\tSIOCGIFNETMASK                    = 0xc0906925\n\tSIOCGIFPDSTADDR                   = 0xc0906948\n\tSIOCGIFPSRCADDR                   = 0xc0906947\n\tSIOCGLIFADDR                      = 0xc118691d\n\tSIOCGLIFPHYADDR                   = 0xc118694b\n\tSIOCGLINKSTR                      = 0xc01c6987\n\tSIOCGLOWAT                        = 0x40047303\n\tSIOCGPGRP                         = 0x40047309\n\tSIOCGVH                           = 0xc0906983\n\tSIOCIFCREATE                      = 0x8090697a\n\tSIOCIFDESTROY                     = 0x80906979\n\tSIOCIFGCLONERS                    = 0xc00c6978\n\tSIOCINITIFADDR                    = 0xc0446984\n\tSIOCSDRVSPEC                      = 0x801c697b\n\tSIOCSETPFSYNC                     = 0x809069f7\n\tSIOCSHIWAT                        = 0x80047300\n\tSIOCSIFADDR                       = 0x8090690c\n\tSIOCSIFADDRPREF                   = 0x8094691f\n\tSIOCSIFBRDADDR                    = 0x80906913\n\tSIOCSIFCAP                        = 0x80206975\n\tSIOCSIFDSTADDR                    = 0x8090690e\n\tSIOCSIFFLAGS                      = 0x80906910\n\tSIOCSIFGENERIC                    = 0x80906939\n\tSIOCSIFMEDIA                      = 0xc0906935\n\tSIOCSIFMETRIC                     = 0x80906918\n\tSIOCSIFMTU                        = 0x8090697f\n\tSIOCSIFNETMASK                    = 0x80906916\n\tSIOCSIFPHYADDR                    = 0x80406946\n\tSIOCSLIFPHYADDR                   = 0x8118694a\n\tSIOCSLINKSTR                      = 0x801c6988\n\tSIOCSLOWAT                        = 0x80047302\n\tSIOCSPGRP                         = 0x80047308\n\tSIOCSVH                           = 0xc0906982\n\tSIOCZIFDATA                       = 0xc0946986\n\tSOCK_CLOEXEC                      = 0x10000000\n\tSOCK_DGRAM                        = 0x2\n\tSOCK_FLAGS_MASK                   = 0xf0000000\n\tSOCK_NONBLOCK                     = 0x20000000\n\tSOCK_NOSIGPIPE                    = 0x40000000\n\tSOCK_RAW                          = 0x3\n\tSOCK_RDM                          = 0x4\n\tSOCK_SEQPACKET                    = 0x5\n\tSOCK_STREAM                       = 0x1\n\tSOL_SOCKET                        = 0xffff\n\tSOMAXCONN                         = 0x80\n\tSO_ACCEPTCONN                     = 0x2\n\tSO_ACCEPTFILTER                   = 0x1000\n\tSO_BROADCAST                      = 0x20\n\tSO_DEBUG                          = 0x1\n\tSO_DONTROUTE                      = 0x10\n\tSO_ERROR                          = 0x1007\n\tSO_KEEPALIVE                      = 0x8\n\tSO_LINGER                         = 0x80\n\tSO_NOHEADER                       = 0x100a\n\tSO_NOSIGPIPE                      = 0x800\n\tSO_OOBINLINE                      = 0x100\n\tSO_OVERFLOWED                     = 0x1009\n\tSO_RCVBUF                         = 0x1002\n\tSO_RCVLOWAT                       = 0x1004\n\tSO_RCVTIMEO                       = 0x100c\n\tSO_REUSEADDR                      = 0x4\n\tSO_REUSEPORT                      = 0x200\n\tSO_SNDBUF                         = 0x1001\n\tSO_SNDLOWAT                       = 0x1003\n\tSO_SNDTIMEO                       = 0x100b\n\tSO_TIMESTAMP                      = 0x2000\n\tSO_TYPE                           = 0x1008\n\tSO_USELOOPBACK                    = 0x40\n\tSYSCTL_VERSION                    = 0x1000000\n\tSYSCTL_VERS_0                     = 0x0\n\tSYSCTL_VERS_1                     = 0x1000000\n\tSYSCTL_VERS_MASK                  = 0xff000000\n\tS_ARCH1                           = 0x10000\n\tS_ARCH2                           = 0x20000\n\tS_BLKSIZE                         = 0x200\n\tS_IEXEC                           = 0x40\n\tS_IFBLK                           = 0x6000\n\tS_IFCHR                           = 0x2000\n\tS_IFDIR                           = 0x4000\n\tS_IFIFO                           = 0x1000\n\tS_IFLNK                           = 0xa000\n\tS_IFMT                            = 0xf000\n\tS_IFREG                           = 0x8000\n\tS_IFSOCK                          = 0xc000\n\tS_IFWHT                           = 0xe000\n\tS_IREAD                           = 0x100\n\tS_IRGRP                           = 0x20\n\tS_IROTH                           = 0x4\n\tS_IRUSR                           = 0x100\n\tS_IRWXG                           = 0x38\n\tS_IRWXO                           = 0x7\n\tS_IRWXU                           = 0x1c0\n\tS_ISGID                           = 0x400\n\tS_ISTXT                           = 0x200\n\tS_ISUID                           = 0x800\n\tS_ISVTX                           = 0x200\n\tS_IWGRP                           = 0x10\n\tS_IWOTH                           = 0x2\n\tS_IWRITE                          = 0x80\n\tS_IWUSR                           = 0x80\n\tS_IXGRP                           = 0x8\n\tS_IXOTH                           = 0x1\n\tS_IXUSR                           = 0x40\n\tTCIFLUSH                          = 0x1\n\tTCIOFLUSH                         = 0x3\n\tTCOFLUSH                          = 0x2\n\tTCP_CONGCTL                       = 0x20\n\tTCP_KEEPCNT                       = 0x6\n\tTCP_KEEPIDLE                      = 0x3\n\tTCP_KEEPINIT                      = 0x7\n\tTCP_KEEPINTVL                     = 0x5\n\tTCP_MAXBURST                      = 0x4\n\tTCP_MAXSEG                        = 0x2\n\tTCP_MAXWIN                        = 0xffff\n\tTCP_MAX_WINSHIFT                  = 0xe\n\tTCP_MD5SIG                        = 0x10\n\tTCP_MINMSS                        = 0xd8\n\tTCP_MSS                           = 0x218\n\tTCP_NODELAY                       = 0x1\n\tTCSAFLUSH                         = 0x2\n\tTIOCCBRK                          = 0x2000747a\n\tTIOCCDTR                          = 0x20007478\n\tTIOCCONS                          = 0x80047462\n\tTIOCDCDTIMESTAMP                  = 0x400c7458\n\tTIOCDRAIN                         = 0x2000745e\n\tTIOCEXCL                          = 0x2000740d\n\tTIOCEXT                           = 0x80047460\n\tTIOCFLAG_CDTRCTS                  = 0x10\n\tTIOCFLAG_CLOCAL                   = 0x2\n\tTIOCFLAG_CRTSCTS                  = 0x4\n\tTIOCFLAG_MDMBUF                   = 0x8\n\tTIOCFLAG_SOFTCAR                  = 0x1\n\tTIOCFLUSH                         = 0x80047410\n\tTIOCGETA                          = 0x402c7413\n\tTIOCGETD                          = 0x4004741a\n\tTIOCGFLAGS                        = 0x4004745d\n\tTIOCGLINED                        = 0x40207442\n\tTIOCGPGRP                         = 0x40047477\n\tTIOCGQSIZE                        = 0x40047481\n\tTIOCGRANTPT                       = 0x20007447\n\tTIOCGSID                          = 0x40047463\n\tTIOCGSIZE                         = 0x40087468\n\tTIOCGWINSZ                        = 0x40087468\n\tTIOCMBIC                          = 0x8004746b\n\tTIOCMBIS                          = 0x8004746c\n\tTIOCMGET                          = 0x4004746a\n\tTIOCMSET                          = 0x8004746d\n\tTIOCM_CAR                         = 0x40\n\tTIOCM_CD                          = 0x40\n\tTIOCM_CTS                         = 0x20\n\tTIOCM_DSR                         = 0x100\n\tTIOCM_DTR                         = 0x2\n\tTIOCM_LE                          = 0x1\n\tTIOCM_RI                          = 0x80\n\tTIOCM_RNG                         = 0x80\n\tTIOCM_RTS                         = 0x4\n\tTIOCM_SR                          = 0x10\n\tTIOCM_ST                          = 0x8\n\tTIOCNOTTY                         = 0x20007471\n\tTIOCNXCL                          = 0x2000740e\n\tTIOCOUTQ                          = 0x40047473\n\tTIOCPKT                           = 0x80047470\n\tTIOCPKT_DATA                      = 0x0\n\tTIOCPKT_DOSTOP                    = 0x20\n\tTIOCPKT_FLUSHREAD                 = 0x1\n\tTIOCPKT_FLUSHWRITE                = 0x2\n\tTIOCPKT_IOCTL                     = 0x40\n\tTIOCPKT_NOSTOP                    = 0x10\n\tTIOCPKT_START                     = 0x8\n\tTIOCPKT_STOP                      = 0x4\n\tTIOCPTMGET                        = 0x48087446\n\tTIOCPTSNAME                       = 0x48087448\n\tTIOCRCVFRAME                      = 0x80047445\n\tTIOCREMOTE                        = 0x80047469\n\tTIOCSBRK                          = 0x2000747b\n\tTIOCSCTTY                         = 0x20007461\n\tTIOCSDTR                          = 0x20007479\n\tTIOCSETA                          = 0x802c7414\n\tTIOCSETAF                         = 0x802c7416\n\tTIOCSETAW                         = 0x802c7415\n\tTIOCSETD                          = 0x8004741b\n\tTIOCSFLAGS                        = 0x8004745c\n\tTIOCSIG                           = 0x2000745f\n\tTIOCSLINED                        = 0x80207443\n\tTIOCSPGRP                         = 0x80047476\n\tTIOCSQSIZE                        = 0x80047480\n\tTIOCSSIZE                         = 0x80087467\n\tTIOCSTART                         = 0x2000746e\n\tTIOCSTAT                          = 0x80047465\n\tTIOCSTI                           = 0x80017472\n\tTIOCSTOP                          = 0x2000746f\n\tTIOCSWINSZ                        = 0x80087467\n\tTIOCUCNTL                         = 0x80047466\n\tTIOCXMTFRAME                      = 0x80047444\n\tTOSTOP                            = 0x400000\n\tVDISCARD                          = 0xf\n\tVDSUSP                            = 0xb\n\tVEOF                              = 0x0\n\tVEOL                              = 0x1\n\tVEOL2                             = 0x2\n\tVERASE                            = 0x3\n\tVINTR                             = 0x8\n\tVKILL                             = 0x5\n\tVLNEXT                            = 0xe\n\tVMIN                              = 0x10\n\tVQUIT                             = 0x9\n\tVREPRINT                          = 0x6\n\tVSTART                            = 0xc\n\tVSTATUS                           = 0x12\n\tVSTOP                             = 0xd\n\tVSUSP                             = 0xa\n\tVTIME                             = 0x11\n\tVWERASE                           = 0x4\n\tWALL                              = 0x8\n\tWALLSIG                           = 0x8\n\tWALTSIG                           = 0x4\n\tWCLONE                            = 0x4\n\tWCOREFLAG                         = 0x80\n\tWNOHANG                           = 0x1\n\tWNOWAIT                           = 0x10000\n\tWNOZOMBIE                         = 0x20000\n\tWOPTSCHECKED                      = 0x40000\n\tWSTOPPED                          = 0x7f\n\tWUNTRACED                         = 0x2\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x30)\n\tEADDRNOTAVAIL   = syscall.Errno(0x31)\n\tEAFNOSUPPORT    = syscall.Errno(0x2f)\n\tEAGAIN          = syscall.Errno(0x23)\n\tEALREADY        = syscall.Errno(0x25)\n\tEAUTH           = syscall.Errno(0x50)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADMSG         = syscall.Errno(0x58)\n\tEBADRPC         = syscall.Errno(0x48)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x57)\n\tECHILD          = syscall.Errno(0xa)\n\tECONNABORTED    = syscall.Errno(0x35)\n\tECONNREFUSED    = syscall.Errno(0x3d)\n\tECONNRESET      = syscall.Errno(0x36)\n\tEDEADLK         = syscall.Errno(0xb)\n\tEDESTADDRREQ    = syscall.Errno(0x27)\n\tEDOM            = syscall.Errno(0x21)\n\tEDQUOT          = syscall.Errno(0x45)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFTYPE          = syscall.Errno(0x4f)\n\tEHOSTDOWN       = syscall.Errno(0x40)\n\tEHOSTUNREACH    = syscall.Errno(0x41)\n\tEIDRM           = syscall.Errno(0x52)\n\tEILSEQ          = syscall.Errno(0x55)\n\tEINPROGRESS     = syscall.Errno(0x24)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEISCONN         = syscall.Errno(0x38)\n\tEISDIR          = syscall.Errno(0x15)\n\tELAST           = syscall.Errno(0x60)\n\tELOOP           = syscall.Errno(0x3e)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x28)\n\tEMULTIHOP       = syscall.Errno(0x5e)\n\tENAMETOOLONG    = syscall.Errno(0x3f)\n\tENEEDAUTH       = syscall.Errno(0x51)\n\tENETDOWN        = syscall.Errno(0x32)\n\tENETRESET       = syscall.Errno(0x34)\n\tENETUNREACH     = syscall.Errno(0x33)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x5d)\n\tENOBUFS         = syscall.Errno(0x37)\n\tENODATA         = syscall.Errno(0x59)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x4d)\n\tENOLINK         = syscall.Errno(0x5f)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x53)\n\tENOPROTOOPT     = syscall.Errno(0x2a)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSR           = syscall.Errno(0x5a)\n\tENOSTR          = syscall.Errno(0x5b)\n\tENOSYS          = syscall.Errno(0x4e)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x39)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x42)\n\tENOTSOCK        = syscall.Errno(0x26)\n\tENOTSUP         = syscall.Errno(0x56)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x2d)\n\tEOVERFLOW       = syscall.Errno(0x54)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x2e)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x43)\n\tEPROCUNAVAIL    = syscall.Errno(0x4c)\n\tEPROGMISMATCH   = syscall.Errno(0x4b)\n\tEPROGUNAVAIL    = syscall.Errno(0x4a)\n\tEPROTO          = syscall.Errno(0x60)\n\tEPROTONOSUPPORT = syscall.Errno(0x2b)\n\tEPROTOTYPE      = syscall.Errno(0x29)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x47)\n\tEROFS           = syscall.Errno(0x1e)\n\tERPCMISMATCH    = syscall.Errno(0x49)\n\tESHUTDOWN       = syscall.Errno(0x3a)\n\tESOCKTNOSUPPORT = syscall.Errno(0x2c)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x46)\n\tETIME           = syscall.Errno(0x5c)\n\tETIMEDOUT       = syscall.Errno(0x3c)\n\tETOOMANYREFS    = syscall.Errno(0x3b)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUSERS          = syscall.Errno(0x44)\n\tEWOULDBLOCK     = syscall.Errno(0x23)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x14)\n\tSIGCONT   = syscall.Signal(0x13)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINFO   = syscall.Signal(0x1d)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x17)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGPWR    = syscall.Signal(0x20)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTOP   = syscall.Signal(0x11)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x12)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x10)\n\tSIGUSR1   = syscall.Signal(0x1e)\n\tSIGUSR2   = syscall.Signal(0x1f)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"device not configured\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"operation not supported by device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large or too small\"},\n\t{35, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{36, \"EINPROGRESS\", \"operation now in progress\"},\n\t{37, \"EALREADY\", \"operation already in progress\"},\n\t{38, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{39, \"EDESTADDRREQ\", \"destination address required\"},\n\t{40, \"EMSGSIZE\", \"message too long\"},\n\t{41, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{42, \"ENOPROTOOPT\", \"protocol option not available\"},\n\t{43, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{44, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{45, \"EOPNOTSUPP\", \"operation not supported\"},\n\t{46, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{47, \"EAFNOSUPPORT\", \"address family not supported by protocol family\"},\n\t{48, \"EADDRINUSE\", \"address already in use\"},\n\t{49, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{50, \"ENETDOWN\", \"network is down\"},\n\t{51, \"ENETUNREACH\", \"network is unreachable\"},\n\t{52, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{53, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{54, \"ECONNRESET\", \"connection reset by peer\"},\n\t{55, \"ENOBUFS\", \"no buffer space available\"},\n\t{56, \"EISCONN\", \"socket is already connected\"},\n\t{57, \"ENOTCONN\", \"socket is not connected\"},\n\t{58, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{59, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{60, \"ETIMEDOUT\", \"connection timed out\"},\n\t{61, \"ECONNREFUSED\", \"connection refused\"},\n\t{62, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{63, \"ENAMETOOLONG\", \"file name too long\"},\n\t{64, \"EHOSTDOWN\", \"host is down\"},\n\t{65, \"EHOSTUNREACH\", \"no route to host\"},\n\t{66, \"ENOTEMPTY\", \"directory not empty\"},\n\t{67, \"EPROCLIM\", \"too many processes\"},\n\t{68, \"EUSERS\", \"too many users\"},\n\t{69, \"EDQUOT\", \"disc quota exceeded\"},\n\t{70, \"ESTALE\", \"stale NFS file handle\"},\n\t{71, \"EREMOTE\", \"too many levels of remote in path\"},\n\t{72, \"EBADRPC\", \"RPC struct is bad\"},\n\t{73, \"ERPCMISMATCH\", \"RPC version wrong\"},\n\t{74, \"EPROGUNAVAIL\", \"RPC prog. not avail\"},\n\t{75, \"EPROGMISMATCH\", \"program version wrong\"},\n\t{76, \"EPROCUNAVAIL\", \"bad procedure for program\"},\n\t{77, \"ENOLCK\", \"no locks available\"},\n\t{78, \"ENOSYS\", \"function not implemented\"},\n\t{79, \"EFTYPE\", \"inappropriate file type or format\"},\n\t{80, \"EAUTH\", \"authentication error\"},\n\t{81, \"ENEEDAUTH\", \"need authenticator\"},\n\t{82, \"EIDRM\", \"identifier removed\"},\n\t{83, \"ENOMSG\", \"no message of desired type\"},\n\t{84, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n\t{85, \"EILSEQ\", \"illegal byte sequence\"},\n\t{86, \"ENOTSUP\", \"not supported\"},\n\t{87, \"ECANCELED\", \"operation Canceled\"},\n\t{88, \"EBADMSG\", \"bad or Corrupt message\"},\n\t{89, \"ENODATA\", \"no message available\"},\n\t{90, \"ENOSR\", \"no STREAM resources\"},\n\t{91, \"ENOSTR\", \"not a STREAM\"},\n\t{92, \"ETIME\", \"STREAM ioctl timeout\"},\n\t{93, \"ENOATTR\", \"attribute not found\"},\n\t{94, \"EMULTIHOP\", \"multihop attempted\"},\n\t{95, \"ENOLINK\", \"link has been severed\"},\n\t{96, \"ELAST\", \"protocol error\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGIOT\", \"abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"stopped (signal)\"},\n\t{18, \"SIGTSTP\", \"stopped\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGINFO\", \"information request\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n\t{32, \"SIGPWR\", \"power fail/restart\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_netbsd_arm64.go",
    "content": "// mkerrors.sh -m64\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build arm64,netbsd\n\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs -- -m64 _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                      = 0x10\n\tAF_ARP                            = 0x1c\n\tAF_BLUETOOTH                      = 0x1f\n\tAF_CCITT                          = 0xa\n\tAF_CHAOS                          = 0x5\n\tAF_CNT                            = 0x15\n\tAF_COIP                           = 0x14\n\tAF_DATAKIT                        = 0x9\n\tAF_DECnet                         = 0xc\n\tAF_DLI                            = 0xd\n\tAF_E164                           = 0x1a\n\tAF_ECMA                           = 0x8\n\tAF_HYLINK                         = 0xf\n\tAF_IEEE80211                      = 0x20\n\tAF_IMPLINK                        = 0x3\n\tAF_INET                           = 0x2\n\tAF_INET6                          = 0x18\n\tAF_IPX                            = 0x17\n\tAF_ISDN                           = 0x1a\n\tAF_ISO                            = 0x7\n\tAF_LAT                            = 0xe\n\tAF_LINK                           = 0x12\n\tAF_LOCAL                          = 0x1\n\tAF_MAX                            = 0x23\n\tAF_MPLS                           = 0x21\n\tAF_NATM                           = 0x1b\n\tAF_NS                             = 0x6\n\tAF_OROUTE                         = 0x11\n\tAF_OSI                            = 0x7\n\tAF_PUP                            = 0x4\n\tAF_ROUTE                          = 0x22\n\tAF_SNA                            = 0xb\n\tAF_UNIX                           = 0x1\n\tAF_UNSPEC                         = 0x0\n\tARPHRD_ARCNET                     = 0x7\n\tARPHRD_ETHER                      = 0x1\n\tARPHRD_FRELAY                     = 0xf\n\tARPHRD_IEEE1394                   = 0x18\n\tARPHRD_IEEE802                    = 0x6\n\tARPHRD_STRIP                      = 0x17\n\tB0                                = 0x0\n\tB110                              = 0x6e\n\tB115200                           = 0x1c200\n\tB1200                             = 0x4b0\n\tB134                              = 0x86\n\tB14400                            = 0x3840\n\tB150                              = 0x96\n\tB1800                             = 0x708\n\tB19200                            = 0x4b00\n\tB200                              = 0xc8\n\tB230400                           = 0x38400\n\tB2400                             = 0x960\n\tB28800                            = 0x7080\n\tB300                              = 0x12c\n\tB38400                            = 0x9600\n\tB460800                           = 0x70800\n\tB4800                             = 0x12c0\n\tB50                               = 0x32\n\tB57600                            = 0xe100\n\tB600                              = 0x258\n\tB7200                             = 0x1c20\n\tB75                               = 0x4b\n\tB76800                            = 0x12c00\n\tB921600                           = 0xe1000\n\tB9600                             = 0x2580\n\tBIOCFEEDBACK                      = 0x8004427d\n\tBIOCFLUSH                         = 0x20004268\n\tBIOCGBLEN                         = 0x40044266\n\tBIOCGDLT                          = 0x4004426a\n\tBIOCGDLTLIST                      = 0xc0104277\n\tBIOCGETIF                         = 0x4090426b\n\tBIOCGFEEDBACK                     = 0x4004427c\n\tBIOCGHDRCMPLT                     = 0x40044274\n\tBIOCGRTIMEOUT                     = 0x4010427b\n\tBIOCGSEESENT                      = 0x40044278\n\tBIOCGSTATS                        = 0x4080426f\n\tBIOCGSTATSOLD                     = 0x4008426f\n\tBIOCIMMEDIATE                     = 0x80044270\n\tBIOCPROMISC                       = 0x20004269\n\tBIOCSBLEN                         = 0xc0044266\n\tBIOCSDLT                          = 0x80044276\n\tBIOCSETF                          = 0x80104267\n\tBIOCSETIF                         = 0x8090426c\n\tBIOCSFEEDBACK                     = 0x8004427d\n\tBIOCSHDRCMPLT                     = 0x80044275\n\tBIOCSRTIMEOUT                     = 0x8010427a\n\tBIOCSSEESENT                      = 0x80044279\n\tBIOCSTCPF                         = 0x80104272\n\tBIOCSUDPF                         = 0x80104273\n\tBIOCVERSION                       = 0x40044271\n\tBPF_A                             = 0x10\n\tBPF_ABS                           = 0x20\n\tBPF_ADD                           = 0x0\n\tBPF_ALIGNMENT                     = 0x8\n\tBPF_ALIGNMENT32                   = 0x4\n\tBPF_ALU                           = 0x4\n\tBPF_AND                           = 0x50\n\tBPF_B                             = 0x10\n\tBPF_DFLTBUFSIZE                   = 0x100000\n\tBPF_DIV                           = 0x30\n\tBPF_H                             = 0x8\n\tBPF_IMM                           = 0x0\n\tBPF_IND                           = 0x40\n\tBPF_JA                            = 0x0\n\tBPF_JEQ                           = 0x10\n\tBPF_JGE                           = 0x30\n\tBPF_JGT                           = 0x20\n\tBPF_JMP                           = 0x5\n\tBPF_JSET                          = 0x40\n\tBPF_K                             = 0x0\n\tBPF_LD                            = 0x0\n\tBPF_LDX                           = 0x1\n\tBPF_LEN                           = 0x80\n\tBPF_LSH                           = 0x60\n\tBPF_MAJOR_VERSION                 = 0x1\n\tBPF_MAXBUFSIZE                    = 0x1000000\n\tBPF_MAXINSNS                      = 0x200\n\tBPF_MEM                           = 0x60\n\tBPF_MEMWORDS                      = 0x10\n\tBPF_MINBUFSIZE                    = 0x20\n\tBPF_MINOR_VERSION                 = 0x1\n\tBPF_MISC                          = 0x7\n\tBPF_MSH                           = 0xa0\n\tBPF_MUL                           = 0x20\n\tBPF_NEG                           = 0x80\n\tBPF_OR                            = 0x40\n\tBPF_RELEASE                       = 0x30bb6\n\tBPF_RET                           = 0x6\n\tBPF_RSH                           = 0x70\n\tBPF_ST                            = 0x2\n\tBPF_STX                           = 0x3\n\tBPF_SUB                           = 0x10\n\tBPF_TAX                           = 0x0\n\tBPF_TXA                           = 0x80\n\tBPF_W                             = 0x0\n\tBPF_X                             = 0x8\n\tBRKINT                            = 0x2\n\tCFLUSH                            = 0xf\n\tCLOCAL                            = 0x8000\n\tCLONE_CSIGNAL                     = 0xff\n\tCLONE_FILES                       = 0x400\n\tCLONE_FS                          = 0x200\n\tCLONE_PID                         = 0x1000\n\tCLONE_PTRACE                      = 0x2000\n\tCLONE_SIGHAND                     = 0x800\n\tCLONE_VFORK                       = 0x4000\n\tCLONE_VM                          = 0x100\n\tCREAD                             = 0x800\n\tCRTSCTS                           = 0x10000\n\tCS5                               = 0x0\n\tCS6                               = 0x100\n\tCS7                               = 0x200\n\tCS8                               = 0x300\n\tCSIZE                             = 0x300\n\tCSTART                            = 0x11\n\tCSTATUS                           = 0x14\n\tCSTOP                             = 0x13\n\tCSTOPB                            = 0x400\n\tCSUSP                             = 0x1a\n\tCTL_HW                            = 0x6\n\tCTL_KERN                          = 0x1\n\tCTL_MAXNAME                       = 0xc\n\tCTL_NET                           = 0x4\n\tCTL_QUERY                         = -0x2\n\tDIOCBSFLUSH                       = 0x20006478\n\tDLT_A429                          = 0xb8\n\tDLT_A653_ICM                      = 0xb9\n\tDLT_AIRONET_HEADER                = 0x78\n\tDLT_AOS                           = 0xde\n\tDLT_APPLE_IP_OVER_IEEE1394        = 0x8a\n\tDLT_ARCNET                        = 0x7\n\tDLT_ARCNET_LINUX                  = 0x81\n\tDLT_ATM_CLIP                      = 0x13\n\tDLT_ATM_RFC1483                   = 0xb\n\tDLT_AURORA                        = 0x7e\n\tDLT_AX25                          = 0x3\n\tDLT_AX25_KISS                     = 0xca\n\tDLT_BACNET_MS_TP                  = 0xa5\n\tDLT_BLUETOOTH_HCI_H4              = 0xbb\n\tDLT_BLUETOOTH_HCI_H4_WITH_PHDR    = 0xc9\n\tDLT_CAN20B                        = 0xbe\n\tDLT_CAN_SOCKETCAN                 = 0xe3\n\tDLT_CHAOS                         = 0x5\n\tDLT_CISCO_IOS                     = 0x76\n\tDLT_C_HDLC                        = 0x68\n\tDLT_C_HDLC_WITH_DIR               = 0xcd\n\tDLT_DECT                          = 0xdd\n\tDLT_DOCSIS                        = 0x8f\n\tDLT_ECONET                        = 0x73\n\tDLT_EN10MB                        = 0x1\n\tDLT_EN3MB                         = 0x2\n\tDLT_ENC                           = 0x6d\n\tDLT_ERF                           = 0xc5\n\tDLT_ERF_ETH                       = 0xaf\n\tDLT_ERF_POS                       = 0xb0\n\tDLT_FC_2                          = 0xe0\n\tDLT_FC_2_WITH_FRAME_DELIMS        = 0xe1\n\tDLT_FDDI                          = 0xa\n\tDLT_FLEXRAY                       = 0xd2\n\tDLT_FRELAY                        = 0x6b\n\tDLT_FRELAY_WITH_DIR               = 0xce\n\tDLT_GCOM_SERIAL                   = 0xad\n\tDLT_GCOM_T1E1                     = 0xac\n\tDLT_GPF_F                         = 0xab\n\tDLT_GPF_T                         = 0xaa\n\tDLT_GPRS_LLC                      = 0xa9\n\tDLT_GSMTAP_ABIS                   = 0xda\n\tDLT_GSMTAP_UM                     = 0xd9\n\tDLT_HDLC                          = 0x10\n\tDLT_HHDLC                         = 0x79\n\tDLT_HIPPI                         = 0xf\n\tDLT_IBM_SN                        = 0x92\n\tDLT_IBM_SP                        = 0x91\n\tDLT_IEEE802                       = 0x6\n\tDLT_IEEE802_11                    = 0x69\n\tDLT_IEEE802_11_RADIO              = 0x7f\n\tDLT_IEEE802_11_RADIO_AVS          = 0xa3\n\tDLT_IEEE802_15_4                  = 0xc3\n\tDLT_IEEE802_15_4_LINUX            = 0xbf\n\tDLT_IEEE802_15_4_NONASK_PHY       = 0xd7\n\tDLT_IEEE802_16_MAC_CPS            = 0xbc\n\tDLT_IEEE802_16_MAC_CPS_RADIO      = 0xc1\n\tDLT_IPMB                          = 0xc7\n\tDLT_IPMB_LINUX                    = 0xd1\n\tDLT_IPNET                         = 0xe2\n\tDLT_IPV4                          = 0xe4\n\tDLT_IPV6                          = 0xe5\n\tDLT_IP_OVER_FC                    = 0x7a\n\tDLT_JUNIPER_ATM1                  = 0x89\n\tDLT_JUNIPER_ATM2                  = 0x87\n\tDLT_JUNIPER_CHDLC                 = 0xb5\n\tDLT_JUNIPER_ES                    = 0x84\n\tDLT_JUNIPER_ETHER                 = 0xb2\n\tDLT_JUNIPER_FRELAY                = 0xb4\n\tDLT_JUNIPER_GGSN                  = 0x85\n\tDLT_JUNIPER_ISM                   = 0xc2\n\tDLT_JUNIPER_MFR                   = 0x86\n\tDLT_JUNIPER_MLFR                  = 0x83\n\tDLT_JUNIPER_MLPPP                 = 0x82\n\tDLT_JUNIPER_MONITOR               = 0xa4\n\tDLT_JUNIPER_PIC_PEER              = 0xae\n\tDLT_JUNIPER_PPP                   = 0xb3\n\tDLT_JUNIPER_PPPOE                 = 0xa7\n\tDLT_JUNIPER_PPPOE_ATM             = 0xa8\n\tDLT_JUNIPER_SERVICES              = 0x88\n\tDLT_JUNIPER_ST                    = 0xc8\n\tDLT_JUNIPER_VP                    = 0xb7\n\tDLT_LAPB_WITH_DIR                 = 0xcf\n\tDLT_LAPD                          = 0xcb\n\tDLT_LIN                           = 0xd4\n\tDLT_LINUX_EVDEV                   = 0xd8\n\tDLT_LINUX_IRDA                    = 0x90\n\tDLT_LINUX_LAPD                    = 0xb1\n\tDLT_LINUX_SLL                     = 0x71\n\tDLT_LOOP                          = 0x6c\n\tDLT_LTALK                         = 0x72\n\tDLT_MFR                           = 0xb6\n\tDLT_MOST                          = 0xd3\n\tDLT_MPLS                          = 0xdb\n\tDLT_MTP2                          = 0x8c\n\tDLT_MTP2_WITH_PHDR                = 0x8b\n\tDLT_MTP3                          = 0x8d\n\tDLT_NULL                          = 0x0\n\tDLT_PCI_EXP                       = 0x7d\n\tDLT_PFLOG                         = 0x75\n\tDLT_PFSYNC                        = 0x12\n\tDLT_PPI                           = 0xc0\n\tDLT_PPP                           = 0x9\n\tDLT_PPP_BSDOS                     = 0xe\n\tDLT_PPP_ETHER                     = 0x33\n\tDLT_PPP_PPPD                      = 0xa6\n\tDLT_PPP_SERIAL                    = 0x32\n\tDLT_PPP_WITH_DIR                  = 0xcc\n\tDLT_PRISM_HEADER                  = 0x77\n\tDLT_PRONET                        = 0x4\n\tDLT_RAIF1                         = 0xc6\n\tDLT_RAW                           = 0xc\n\tDLT_RAWAF_MASK                    = 0x2240000\n\tDLT_RIO                           = 0x7c\n\tDLT_SCCP                          = 0x8e\n\tDLT_SITA                          = 0xc4\n\tDLT_SLIP                          = 0x8\n\tDLT_SLIP_BSDOS                    = 0xd\n\tDLT_SUNATM                        = 0x7b\n\tDLT_SYMANTEC_FIREWALL             = 0x63\n\tDLT_TZSP                          = 0x80\n\tDLT_USB                           = 0xba\n\tDLT_USB_LINUX                     = 0xbd\n\tDLT_USB_LINUX_MMAPPED             = 0xdc\n\tDLT_WIHART                        = 0xdf\n\tDLT_X2E_SERIAL                    = 0xd5\n\tDLT_X2E_XORAYA                    = 0xd6\n\tDT_BLK                            = 0x6\n\tDT_CHR                            = 0x2\n\tDT_DIR                            = 0x4\n\tDT_FIFO                           = 0x1\n\tDT_LNK                            = 0xa\n\tDT_REG                            = 0x8\n\tDT_SOCK                           = 0xc\n\tDT_UNKNOWN                        = 0x0\n\tDT_WHT                            = 0xe\n\tECHO                              = 0x8\n\tECHOCTL                           = 0x40\n\tECHOE                             = 0x2\n\tECHOK                             = 0x4\n\tECHOKE                            = 0x1\n\tECHONL                            = 0x10\n\tECHOPRT                           = 0x20\n\tEMUL_LINUX                        = 0x1\n\tEMUL_LINUX32                      = 0x5\n\tEMUL_MAXID                        = 0x6\n\tETHERCAP_JUMBO_MTU                = 0x4\n\tETHERCAP_VLAN_HWTAGGING           = 0x2\n\tETHERCAP_VLAN_MTU                 = 0x1\n\tETHERMIN                          = 0x2e\n\tETHERMTU                          = 0x5dc\n\tETHERMTU_JUMBO                    = 0x2328\n\tETHERTYPE_8023                    = 0x4\n\tETHERTYPE_AARP                    = 0x80f3\n\tETHERTYPE_ACCTON                  = 0x8390\n\tETHERTYPE_AEONIC                  = 0x8036\n\tETHERTYPE_ALPHA                   = 0x814a\n\tETHERTYPE_AMBER                   = 0x6008\n\tETHERTYPE_AMOEBA                  = 0x8145\n\tETHERTYPE_APOLLO                  = 0x80f7\n\tETHERTYPE_APOLLODOMAIN            = 0x8019\n\tETHERTYPE_APPLETALK               = 0x809b\n\tETHERTYPE_APPLITEK                = 0x80c7\n\tETHERTYPE_ARGONAUT                = 0x803a\n\tETHERTYPE_ARP                     = 0x806\n\tETHERTYPE_AT                      = 0x809b\n\tETHERTYPE_ATALK                   = 0x809b\n\tETHERTYPE_ATOMIC                  = 0x86df\n\tETHERTYPE_ATT                     = 0x8069\n\tETHERTYPE_ATTSTANFORD             = 0x8008\n\tETHERTYPE_AUTOPHON                = 0x806a\n\tETHERTYPE_AXIS                    = 0x8856\n\tETHERTYPE_BCLOOP                  = 0x9003\n\tETHERTYPE_BOFL                    = 0x8102\n\tETHERTYPE_CABLETRON               = 0x7034\n\tETHERTYPE_CHAOS                   = 0x804\n\tETHERTYPE_COMDESIGN               = 0x806c\n\tETHERTYPE_COMPUGRAPHIC            = 0x806d\n\tETHERTYPE_COUNTERPOINT            = 0x8062\n\tETHERTYPE_CRONUS                  = 0x8004\n\tETHERTYPE_CRONUSVLN               = 0x8003\n\tETHERTYPE_DCA                     = 0x1234\n\tETHERTYPE_DDE                     = 0x807b\n\tETHERTYPE_DEBNI                   = 0xaaaa\n\tETHERTYPE_DECAM                   = 0x8048\n\tETHERTYPE_DECCUST                 = 0x6006\n\tETHERTYPE_DECDIAG                 = 0x6005\n\tETHERTYPE_DECDNS                  = 0x803c\n\tETHERTYPE_DECDTS                  = 0x803e\n\tETHERTYPE_DECEXPER                = 0x6000\n\tETHERTYPE_DECLAST                 = 0x8041\n\tETHERTYPE_DECLTM                  = 0x803f\n\tETHERTYPE_DECMUMPS                = 0x6009\n\tETHERTYPE_DECNETBIOS              = 0x8040\n\tETHERTYPE_DELTACON                = 0x86de\n\tETHERTYPE_DIDDLE                  = 0x4321\n\tETHERTYPE_DLOG1                   = 0x660\n\tETHERTYPE_DLOG2                   = 0x661\n\tETHERTYPE_DN                      = 0x6003\n\tETHERTYPE_DOGFIGHT                = 0x1989\n\tETHERTYPE_DSMD                    = 0x8039\n\tETHERTYPE_ECMA                    = 0x803\n\tETHERTYPE_ENCRYPT                 = 0x803d\n\tETHERTYPE_ES                      = 0x805d\n\tETHERTYPE_EXCELAN                 = 0x8010\n\tETHERTYPE_EXPERDATA               = 0x8049\n\tETHERTYPE_FLIP                    = 0x8146\n\tETHERTYPE_FLOWCONTROL             = 0x8808\n\tETHERTYPE_FRARP                   = 0x808\n\tETHERTYPE_GENDYN                  = 0x8068\n\tETHERTYPE_HAYES                   = 0x8130\n\tETHERTYPE_HIPPI_FP                = 0x8180\n\tETHERTYPE_HITACHI                 = 0x8820\n\tETHERTYPE_HP                      = 0x8005\n\tETHERTYPE_IEEEPUP                 = 0xa00\n\tETHERTYPE_IEEEPUPAT               = 0xa01\n\tETHERTYPE_IMLBL                   = 0x4c42\n\tETHERTYPE_IMLBLDIAG               = 0x424c\n\tETHERTYPE_IP                      = 0x800\n\tETHERTYPE_IPAS                    = 0x876c\n\tETHERTYPE_IPV6                    = 0x86dd\n\tETHERTYPE_IPX                     = 0x8137\n\tETHERTYPE_IPXNEW                  = 0x8037\n\tETHERTYPE_KALPANA                 = 0x8582\n\tETHERTYPE_LANBRIDGE               = 0x8038\n\tETHERTYPE_LANPROBE                = 0x8888\n\tETHERTYPE_LAT                     = 0x6004\n\tETHERTYPE_LBACK                   = 0x9000\n\tETHERTYPE_LITTLE                  = 0x8060\n\tETHERTYPE_LOGICRAFT               = 0x8148\n\tETHERTYPE_LOOPBACK                = 0x9000\n\tETHERTYPE_MATRA                   = 0x807a\n\tETHERTYPE_MAX                     = 0xffff\n\tETHERTYPE_MERIT                   = 0x807c\n\tETHERTYPE_MICP                    = 0x873a\n\tETHERTYPE_MOPDL                   = 0x6001\n\tETHERTYPE_MOPRC                   = 0x6002\n\tETHERTYPE_MOTOROLA                = 0x818d\n\tETHERTYPE_MPLS                    = 0x8847\n\tETHERTYPE_MPLS_MCAST              = 0x8848\n\tETHERTYPE_MUMPS                   = 0x813f\n\tETHERTYPE_NBPCC                   = 0x3c04\n\tETHERTYPE_NBPCLAIM                = 0x3c09\n\tETHERTYPE_NBPCLREQ                = 0x3c05\n\tETHERTYPE_NBPCLRSP                = 0x3c06\n\tETHERTYPE_NBPCREQ                 = 0x3c02\n\tETHERTYPE_NBPCRSP                 = 0x3c03\n\tETHERTYPE_NBPDG                   = 0x3c07\n\tETHERTYPE_NBPDGB                  = 0x3c08\n\tETHERTYPE_NBPDLTE                 = 0x3c0a\n\tETHERTYPE_NBPRAR                  = 0x3c0c\n\tETHERTYPE_NBPRAS                  = 0x3c0b\n\tETHERTYPE_NBPRST                  = 0x3c0d\n\tETHERTYPE_NBPSCD                  = 0x3c01\n\tETHERTYPE_NBPVCD                  = 0x3c00\n\tETHERTYPE_NBS                     = 0x802\n\tETHERTYPE_NCD                     = 0x8149\n\tETHERTYPE_NESTAR                  = 0x8006\n\tETHERTYPE_NETBEUI                 = 0x8191\n\tETHERTYPE_NOVELL                  = 0x8138\n\tETHERTYPE_NS                      = 0x600\n\tETHERTYPE_NSAT                    = 0x601\n\tETHERTYPE_NSCOMPAT                = 0x807\n\tETHERTYPE_NTRAILER                = 0x10\n\tETHERTYPE_OS9                     = 0x7007\n\tETHERTYPE_OS9NET                  = 0x7009\n\tETHERTYPE_PACER                   = 0x80c6\n\tETHERTYPE_PAE                     = 0x888e\n\tETHERTYPE_PCS                     = 0x4242\n\tETHERTYPE_PLANNING                = 0x8044\n\tETHERTYPE_PPP                     = 0x880b\n\tETHERTYPE_PPPOE                   = 0x8864\n\tETHERTYPE_PPPOEDISC               = 0x8863\n\tETHERTYPE_PRIMENTS                = 0x7031\n\tETHERTYPE_PUP                     = 0x200\n\tETHERTYPE_PUPAT                   = 0x200\n\tETHERTYPE_RACAL                   = 0x7030\n\tETHERTYPE_RATIONAL                = 0x8150\n\tETHERTYPE_RAWFR                   = 0x6559\n\tETHERTYPE_RCL                     = 0x1995\n\tETHERTYPE_RDP                     = 0x8739\n\tETHERTYPE_RETIX                   = 0x80f2\n\tETHERTYPE_REVARP                  = 0x8035\n\tETHERTYPE_SCA                     = 0x6007\n\tETHERTYPE_SECTRA                  = 0x86db\n\tETHERTYPE_SECUREDATA              = 0x876d\n\tETHERTYPE_SGITW                   = 0x817e\n\tETHERTYPE_SG_BOUNCE               = 0x8016\n\tETHERTYPE_SG_DIAG                 = 0x8013\n\tETHERTYPE_SG_NETGAMES             = 0x8014\n\tETHERTYPE_SG_RESV                 = 0x8015\n\tETHERTYPE_SIMNET                  = 0x5208\n\tETHERTYPE_SLOWPROTOCOLS           = 0x8809\n\tETHERTYPE_SNA                     = 0x80d5\n\tETHERTYPE_SNMP                    = 0x814c\n\tETHERTYPE_SONIX                   = 0xfaf5\n\tETHERTYPE_SPIDER                  = 0x809f\n\tETHERTYPE_SPRITE                  = 0x500\n\tETHERTYPE_STP                     = 0x8181\n\tETHERTYPE_TALARIS                 = 0x812b\n\tETHERTYPE_TALARISMC               = 0x852b\n\tETHERTYPE_TCPCOMP                 = 0x876b\n\tETHERTYPE_TCPSM                   = 0x9002\n\tETHERTYPE_TEC                     = 0x814f\n\tETHERTYPE_TIGAN                   = 0x802f\n\tETHERTYPE_TRAIL                   = 0x1000\n\tETHERTYPE_TRANSETHER              = 0x6558\n\tETHERTYPE_TYMSHARE                = 0x802e\n\tETHERTYPE_UBBST                   = 0x7005\n\tETHERTYPE_UBDEBUG                 = 0x900\n\tETHERTYPE_UBDIAGLOOP              = 0x7002\n\tETHERTYPE_UBDL                    = 0x7000\n\tETHERTYPE_UBNIU                   = 0x7001\n\tETHERTYPE_UBNMC                   = 0x7003\n\tETHERTYPE_VALID                   = 0x1600\n\tETHERTYPE_VARIAN                  = 0x80dd\n\tETHERTYPE_VAXELN                  = 0x803b\n\tETHERTYPE_VEECO                   = 0x8067\n\tETHERTYPE_VEXP                    = 0x805b\n\tETHERTYPE_VGLAB                   = 0x8131\n\tETHERTYPE_VINES                   = 0xbad\n\tETHERTYPE_VINESECHO               = 0xbaf\n\tETHERTYPE_VINESLOOP               = 0xbae\n\tETHERTYPE_VITAL                   = 0xff00\n\tETHERTYPE_VLAN                    = 0x8100\n\tETHERTYPE_VLTLMAN                 = 0x8080\n\tETHERTYPE_VPROD                   = 0x805c\n\tETHERTYPE_VURESERVED              = 0x8147\n\tETHERTYPE_WATERLOO                = 0x8130\n\tETHERTYPE_WELLFLEET               = 0x8103\n\tETHERTYPE_X25                     = 0x805\n\tETHERTYPE_X75                     = 0x801\n\tETHERTYPE_XNSSM                   = 0x9001\n\tETHERTYPE_XTP                     = 0x817d\n\tETHER_ADDR_LEN                    = 0x6\n\tETHER_CRC_LEN                     = 0x4\n\tETHER_CRC_POLY_BE                 = 0x4c11db6\n\tETHER_CRC_POLY_LE                 = 0xedb88320\n\tETHER_HDR_LEN                     = 0xe\n\tETHER_MAX_LEN                     = 0x5ee\n\tETHER_MAX_LEN_JUMBO               = 0x233a\n\tETHER_MIN_LEN                     = 0x40\n\tETHER_PPPOE_ENCAP_LEN             = 0x8\n\tETHER_TYPE_LEN                    = 0x2\n\tETHER_VLAN_ENCAP_LEN              = 0x4\n\tEVFILT_AIO                        = 0x2\n\tEVFILT_PROC                       = 0x4\n\tEVFILT_READ                       = 0x0\n\tEVFILT_SIGNAL                     = 0x5\n\tEVFILT_SYSCOUNT                   = 0x7\n\tEVFILT_TIMER                      = 0x6\n\tEVFILT_VNODE                      = 0x3\n\tEVFILT_WRITE                      = 0x1\n\tEV_ADD                            = 0x1\n\tEV_CLEAR                          = 0x20\n\tEV_DELETE                         = 0x2\n\tEV_DISABLE                        = 0x8\n\tEV_ENABLE                         = 0x4\n\tEV_EOF                            = 0x8000\n\tEV_ERROR                          = 0x4000\n\tEV_FLAG1                          = 0x2000\n\tEV_ONESHOT                        = 0x10\n\tEV_SYSFLAGS                       = 0xf000\n\tEXTA                              = 0x4b00\n\tEXTATTR_CMD_START                 = 0x1\n\tEXTATTR_CMD_STOP                  = 0x2\n\tEXTATTR_NAMESPACE_SYSTEM          = 0x2\n\tEXTATTR_NAMESPACE_USER            = 0x1\n\tEXTB                              = 0x9600\n\tEXTPROC                           = 0x800\n\tFD_CLOEXEC                        = 0x1\n\tFD_SETSIZE                        = 0x100\n\tFLUSHO                            = 0x800000\n\tF_CLOSEM                          = 0xa\n\tF_DUPFD                           = 0x0\n\tF_DUPFD_CLOEXEC                   = 0xc\n\tF_FSCTL                           = -0x80000000\n\tF_FSDIRMASK                       = 0x70000000\n\tF_FSIN                            = 0x10000000\n\tF_FSINOUT                         = 0x30000000\n\tF_FSOUT                           = 0x20000000\n\tF_FSPRIV                          = 0x8000\n\tF_FSVOID                          = 0x40000000\n\tF_GETFD                           = 0x1\n\tF_GETFL                           = 0x3\n\tF_GETLK                           = 0x7\n\tF_GETNOSIGPIPE                    = 0xd\n\tF_GETOWN                          = 0x5\n\tF_MAXFD                           = 0xb\n\tF_OK                              = 0x0\n\tF_PARAM_MASK                      = 0xfff\n\tF_PARAM_MAX                       = 0xfff\n\tF_RDLCK                           = 0x1\n\tF_SETFD                           = 0x2\n\tF_SETFL                           = 0x4\n\tF_SETLK                           = 0x8\n\tF_SETLKW                          = 0x9\n\tF_SETNOSIGPIPE                    = 0xe\n\tF_SETOWN                          = 0x6\n\tF_UNLCK                           = 0x2\n\tF_WRLCK                           = 0x3\n\tHUPCL                             = 0x4000\n\tHW_MACHINE                        = 0x1\n\tICANON                            = 0x100\n\tICMP6_FILTER                      = 0x12\n\tICRNL                             = 0x100\n\tIEXTEN                            = 0x400\n\tIFAN_ARRIVAL                      = 0x0\n\tIFAN_DEPARTURE                    = 0x1\n\tIFA_ROUTE                         = 0x1\n\tIFF_ALLMULTI                      = 0x200\n\tIFF_BROADCAST                     = 0x2\n\tIFF_CANTCHANGE                    = 0x8f52\n\tIFF_DEBUG                         = 0x4\n\tIFF_LINK0                         = 0x1000\n\tIFF_LINK1                         = 0x2000\n\tIFF_LINK2                         = 0x4000\n\tIFF_LOOPBACK                      = 0x8\n\tIFF_MULTICAST                     = 0x8000\n\tIFF_NOARP                         = 0x80\n\tIFF_NOTRAILERS                    = 0x20\n\tIFF_OACTIVE                       = 0x400\n\tIFF_POINTOPOINT                   = 0x10\n\tIFF_PROMISC                       = 0x100\n\tIFF_RUNNING                       = 0x40\n\tIFF_SIMPLEX                       = 0x800\n\tIFF_UP                            = 0x1\n\tIFNAMSIZ                          = 0x10\n\tIFT_1822                          = 0x2\n\tIFT_A12MPPSWITCH                  = 0x82\n\tIFT_AAL2                          = 0xbb\n\tIFT_AAL5                          = 0x31\n\tIFT_ADSL                          = 0x5e\n\tIFT_AFLANE8023                    = 0x3b\n\tIFT_AFLANE8025                    = 0x3c\n\tIFT_ARAP                          = 0x58\n\tIFT_ARCNET                        = 0x23\n\tIFT_ARCNETPLUS                    = 0x24\n\tIFT_ASYNC                         = 0x54\n\tIFT_ATM                           = 0x25\n\tIFT_ATMDXI                        = 0x69\n\tIFT_ATMFUNI                       = 0x6a\n\tIFT_ATMIMA                        = 0x6b\n\tIFT_ATMLOGICAL                    = 0x50\n\tIFT_ATMRADIO                      = 0xbd\n\tIFT_ATMSUBINTERFACE               = 0x86\n\tIFT_ATMVCIENDPT                   = 0xc2\n\tIFT_ATMVIRTUAL                    = 0x95\n\tIFT_BGPPOLICYACCOUNTING           = 0xa2\n\tIFT_BRIDGE                        = 0xd1\n\tIFT_BSC                           = 0x53\n\tIFT_CARP                          = 0xf8\n\tIFT_CCTEMUL                       = 0x3d\n\tIFT_CEPT                          = 0x13\n\tIFT_CES                           = 0x85\n\tIFT_CHANNEL                       = 0x46\n\tIFT_CNR                           = 0x55\n\tIFT_COFFEE                        = 0x84\n\tIFT_COMPOSITELINK                 = 0x9b\n\tIFT_DCN                           = 0x8d\n\tIFT_DIGITALPOWERLINE              = 0x8a\n\tIFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba\n\tIFT_DLSW                          = 0x4a\n\tIFT_DOCSCABLEDOWNSTREAM           = 0x80\n\tIFT_DOCSCABLEMACLAYER             = 0x7f\n\tIFT_DOCSCABLEUPSTREAM             = 0x81\n\tIFT_DOCSCABLEUPSTREAMCHANNEL      = 0xcd\n\tIFT_DS0                           = 0x51\n\tIFT_DS0BUNDLE                     = 0x52\n\tIFT_DS1FDL                        = 0xaa\n\tIFT_DS3                           = 0x1e\n\tIFT_DTM                           = 0x8c\n\tIFT_DVBASILN                      = 0xac\n\tIFT_DVBASIOUT                     = 0xad\n\tIFT_DVBRCCDOWNSTREAM              = 0x93\n\tIFT_DVBRCCMACLAYER                = 0x92\n\tIFT_DVBRCCUPSTREAM                = 0x94\n\tIFT_ECONET                        = 0xce\n\tIFT_EON                           = 0x19\n\tIFT_EPLRS                         = 0x57\n\tIFT_ESCON                         = 0x49\n\tIFT_ETHER                         = 0x6\n\tIFT_FAITH                         = 0xf2\n\tIFT_FAST                          = 0x7d\n\tIFT_FASTETHER                     = 0x3e\n\tIFT_FASTETHERFX                   = 0x45\n\tIFT_FDDI                          = 0xf\n\tIFT_FIBRECHANNEL                  = 0x38\n\tIFT_FRAMERELAYINTERCONNECT        = 0x3a\n\tIFT_FRAMERELAYMPI                 = 0x5c\n\tIFT_FRDLCIENDPT                   = 0xc1\n\tIFT_FRELAY                        = 0x20\n\tIFT_FRELAYDCE                     = 0x2c\n\tIFT_FRF16MFRBUNDLE                = 0xa3\n\tIFT_FRFORWARD                     = 0x9e\n\tIFT_G703AT2MB                     = 0x43\n\tIFT_G703AT64K                     = 0x42\n\tIFT_GIF                           = 0xf0\n\tIFT_GIGABITETHERNET               = 0x75\n\tIFT_GR303IDT                      = 0xb2\n\tIFT_GR303RDT                      = 0xb1\n\tIFT_H323GATEKEEPER                = 0xa4\n\tIFT_H323PROXY                     = 0xa5\n\tIFT_HDH1822                       = 0x3\n\tIFT_HDLC                          = 0x76\n\tIFT_HDSL2                         = 0xa8\n\tIFT_HIPERLAN2                     = 0xb7\n\tIFT_HIPPI                         = 0x2f\n\tIFT_HIPPIINTERFACE                = 0x39\n\tIFT_HOSTPAD                       = 0x5a\n\tIFT_HSSI                          = 0x2e\n\tIFT_HY                            = 0xe\n\tIFT_IBM370PARCHAN                 = 0x48\n\tIFT_IDSL                          = 0x9a\n\tIFT_IEEE1394                      = 0x90\n\tIFT_IEEE80211                     = 0x47\n\tIFT_IEEE80212                     = 0x37\n\tIFT_IEEE8023ADLAG                 = 0xa1\n\tIFT_IFGSN                         = 0x91\n\tIFT_IMT                           = 0xbe\n\tIFT_INFINIBAND                    = 0xc7\n\tIFT_INTERLEAVE                    = 0x7c\n\tIFT_IP                            = 0x7e\n\tIFT_IPFORWARD                     = 0x8e\n\tIFT_IPOVERATM                     = 0x72\n\tIFT_IPOVERCDLC                    = 0x6d\n\tIFT_IPOVERCLAW                    = 0x6e\n\tIFT_IPSWITCH                      = 0x4e\n\tIFT_ISDN                          = 0x3f\n\tIFT_ISDNBASIC                     = 0x14\n\tIFT_ISDNPRIMARY                   = 0x15\n\tIFT_ISDNS                         = 0x4b\n\tIFT_ISDNU                         = 0x4c\n\tIFT_ISO88022LLC                   = 0x29\n\tIFT_ISO88023                      = 0x7\n\tIFT_ISO88024                      = 0x8\n\tIFT_ISO88025                      = 0x9\n\tIFT_ISO88025CRFPINT               = 0x62\n\tIFT_ISO88025DTR                   = 0x56\n\tIFT_ISO88025FIBER                 = 0x73\n\tIFT_ISO88026                      = 0xa\n\tIFT_ISUP                          = 0xb3\n\tIFT_L2VLAN                        = 0x87\n\tIFT_L3IPVLAN                      = 0x88\n\tIFT_L3IPXVLAN                     = 0x89\n\tIFT_LAPB                          = 0x10\n\tIFT_LAPD                          = 0x4d\n\tIFT_LAPF                          = 0x77\n\tIFT_LINEGROUP                     = 0xd2\n\tIFT_LOCALTALK                     = 0x2a\n\tIFT_LOOP                          = 0x18\n\tIFT_MEDIAMAILOVERIP               = 0x8b\n\tIFT_MFSIGLINK                     = 0xa7\n\tIFT_MIOX25                        = 0x26\n\tIFT_MODEM                         = 0x30\n\tIFT_MPC                           = 0x71\n\tIFT_MPLS                          = 0xa6\n\tIFT_MPLSTUNNEL                    = 0x96\n\tIFT_MSDSL                         = 0x8f\n\tIFT_MVL                           = 0xbf\n\tIFT_MYRINET                       = 0x63\n\tIFT_NFAS                          = 0xaf\n\tIFT_NSIP                          = 0x1b\n\tIFT_OPTICALCHANNEL                = 0xc3\n\tIFT_OPTICALTRANSPORT              = 0xc4\n\tIFT_OTHER                         = 0x1\n\tIFT_P10                           = 0xc\n\tIFT_P80                           = 0xd\n\tIFT_PARA                          = 0x22\n\tIFT_PFLOG                         = 0xf5\n\tIFT_PFSYNC                        = 0xf6\n\tIFT_PLC                           = 0xae\n\tIFT_PON155                        = 0xcf\n\tIFT_PON622                        = 0xd0\n\tIFT_POS                           = 0xab\n\tIFT_PPP                           = 0x17\n\tIFT_PPPMULTILINKBUNDLE            = 0x6c\n\tIFT_PROPATM                       = 0xc5\n\tIFT_PROPBWAP2MP                   = 0xb8\n\tIFT_PROPCNLS                      = 0x59\n\tIFT_PROPDOCSWIRELESSDOWNSTREAM    = 0xb5\n\tIFT_PROPDOCSWIRELESSMACLAYER      = 0xb4\n\tIFT_PROPDOCSWIRELESSUPSTREAM      = 0xb6\n\tIFT_PROPMUX                       = 0x36\n\tIFT_PROPVIRTUAL                   = 0x35\n\tIFT_PROPWIRELESSP2P               = 0x9d\n\tIFT_PTPSERIAL                     = 0x16\n\tIFT_PVC                           = 0xf1\n\tIFT_Q2931                         = 0xc9\n\tIFT_QLLC                          = 0x44\n\tIFT_RADIOMAC                      = 0xbc\n\tIFT_RADSL                         = 0x5f\n\tIFT_REACHDSL                      = 0xc0\n\tIFT_RFC1483                       = 0x9f\n\tIFT_RS232                         = 0x21\n\tIFT_RSRB                          = 0x4f\n\tIFT_SDLC                          = 0x11\n\tIFT_SDSL                          = 0x60\n\tIFT_SHDSL                         = 0xa9\n\tIFT_SIP                           = 0x1f\n\tIFT_SIPSIG                        = 0xcc\n\tIFT_SIPTG                         = 0xcb\n\tIFT_SLIP                          = 0x1c\n\tIFT_SMDSDXI                       = 0x2b\n\tIFT_SMDSICIP                      = 0x34\n\tIFT_SONET                         = 0x27\n\tIFT_SONETOVERHEADCHANNEL          = 0xb9\n\tIFT_SONETPATH                     = 0x32\n\tIFT_SONETVT                       = 0x33\n\tIFT_SRP                           = 0x97\n\tIFT_SS7SIGLINK                    = 0x9c\n\tIFT_STACKTOSTACK                  = 0x6f\n\tIFT_STARLAN                       = 0xb\n\tIFT_STF                           = 0xd7\n\tIFT_T1                            = 0x12\n\tIFT_TDLC                          = 0x74\n\tIFT_TELINK                        = 0xc8\n\tIFT_TERMPAD                       = 0x5b\n\tIFT_TR008                         = 0xb0\n\tIFT_TRANSPHDLC                    = 0x7b\n\tIFT_TUNNEL                        = 0x83\n\tIFT_ULTRA                         = 0x1d\n\tIFT_USB                           = 0xa0\n\tIFT_V11                           = 0x40\n\tIFT_V35                           = 0x2d\n\tIFT_V36                           = 0x41\n\tIFT_V37                           = 0x78\n\tIFT_VDSL                          = 0x61\n\tIFT_VIRTUALIPADDRESS              = 0x70\n\tIFT_VIRTUALTG                     = 0xca\n\tIFT_VOICEDID                      = 0xd5\n\tIFT_VOICEEM                       = 0x64\n\tIFT_VOICEEMFGD                    = 0xd3\n\tIFT_VOICEENCAP                    = 0x67\n\tIFT_VOICEFGDEANA                  = 0xd4\n\tIFT_VOICEFXO                      = 0x65\n\tIFT_VOICEFXS                      = 0x66\n\tIFT_VOICEOVERATM                  = 0x98\n\tIFT_VOICEOVERCABLE                = 0xc6\n\tIFT_VOICEOVERFRAMERELAY           = 0x99\n\tIFT_VOICEOVERIP                   = 0x68\n\tIFT_X213                          = 0x5d\n\tIFT_X25                           = 0x5\n\tIFT_X25DDN                        = 0x4\n\tIFT_X25HUNTGROUP                  = 0x7a\n\tIFT_X25MLP                        = 0x79\n\tIFT_X25PLE                        = 0x28\n\tIFT_XETHER                        = 0x1a\n\tIGNBRK                            = 0x1\n\tIGNCR                             = 0x80\n\tIGNPAR                            = 0x4\n\tIMAXBEL                           = 0x2000\n\tINLCR                             = 0x40\n\tINPCK                             = 0x10\n\tIN_CLASSA_HOST                    = 0xffffff\n\tIN_CLASSA_MAX                     = 0x80\n\tIN_CLASSA_NET                     = 0xff000000\n\tIN_CLASSA_NSHIFT                  = 0x18\n\tIN_CLASSB_HOST                    = 0xffff\n\tIN_CLASSB_MAX                     = 0x10000\n\tIN_CLASSB_NET                     = 0xffff0000\n\tIN_CLASSB_NSHIFT                  = 0x10\n\tIN_CLASSC_HOST                    = 0xff\n\tIN_CLASSC_NET                     = 0xffffff00\n\tIN_CLASSC_NSHIFT                  = 0x8\n\tIN_CLASSD_HOST                    = 0xfffffff\n\tIN_CLASSD_NET                     = 0xf0000000\n\tIN_CLASSD_NSHIFT                  = 0x1c\n\tIN_LOOPBACKNET                    = 0x7f\n\tIPPROTO_AH                        = 0x33\n\tIPPROTO_CARP                      = 0x70\n\tIPPROTO_DONE                      = 0x101\n\tIPPROTO_DSTOPTS                   = 0x3c\n\tIPPROTO_EGP                       = 0x8\n\tIPPROTO_ENCAP                     = 0x62\n\tIPPROTO_EON                       = 0x50\n\tIPPROTO_ESP                       = 0x32\n\tIPPROTO_ETHERIP                   = 0x61\n\tIPPROTO_FRAGMENT                  = 0x2c\n\tIPPROTO_GGP                       = 0x3\n\tIPPROTO_GRE                       = 0x2f\n\tIPPROTO_HOPOPTS                   = 0x0\n\tIPPROTO_ICMP                      = 0x1\n\tIPPROTO_ICMPV6                    = 0x3a\n\tIPPROTO_IDP                       = 0x16\n\tIPPROTO_IGMP                      = 0x2\n\tIPPROTO_IP                        = 0x0\n\tIPPROTO_IPCOMP                    = 0x6c\n\tIPPROTO_IPIP                      = 0x4\n\tIPPROTO_IPV4                      = 0x4\n\tIPPROTO_IPV6                      = 0x29\n\tIPPROTO_IPV6_ICMP                 = 0x3a\n\tIPPROTO_MAX                       = 0x100\n\tIPPROTO_MAXID                     = 0x34\n\tIPPROTO_MOBILE                    = 0x37\n\tIPPROTO_NONE                      = 0x3b\n\tIPPROTO_PFSYNC                    = 0xf0\n\tIPPROTO_PIM                       = 0x67\n\tIPPROTO_PUP                       = 0xc\n\tIPPROTO_RAW                       = 0xff\n\tIPPROTO_ROUTING                   = 0x2b\n\tIPPROTO_RSVP                      = 0x2e\n\tIPPROTO_TCP                       = 0x6\n\tIPPROTO_TP                        = 0x1d\n\tIPPROTO_UDP                       = 0x11\n\tIPPROTO_VRRP                      = 0x70\n\tIPV6_CHECKSUM                     = 0x1a\n\tIPV6_DEFAULT_MULTICAST_HOPS       = 0x1\n\tIPV6_DEFAULT_MULTICAST_LOOP       = 0x1\n\tIPV6_DEFHLIM                      = 0x40\n\tIPV6_DONTFRAG                     = 0x3e\n\tIPV6_DSTOPTS                      = 0x32\n\tIPV6_FAITH                        = 0x1d\n\tIPV6_FLOWINFO_MASK                = 0xffffff0f\n\tIPV6_FLOWLABEL_MASK               = 0xffff0f00\n\tIPV6_FRAGTTL                      = 0x78\n\tIPV6_HLIMDEC                      = 0x1\n\tIPV6_HOPLIMIT                     = 0x2f\n\tIPV6_HOPOPTS                      = 0x31\n\tIPV6_IPSEC_POLICY                 = 0x1c\n\tIPV6_JOIN_GROUP                   = 0xc\n\tIPV6_LEAVE_GROUP                  = 0xd\n\tIPV6_MAXHLIM                      = 0xff\n\tIPV6_MAXPACKET                    = 0xffff\n\tIPV6_MMTU                         = 0x500\n\tIPV6_MULTICAST_HOPS               = 0xa\n\tIPV6_MULTICAST_IF                 = 0x9\n\tIPV6_MULTICAST_LOOP               = 0xb\n\tIPV6_NEXTHOP                      = 0x30\n\tIPV6_PATHMTU                      = 0x2c\n\tIPV6_PKTINFO                      = 0x2e\n\tIPV6_PORTRANGE                    = 0xe\n\tIPV6_PORTRANGE_DEFAULT            = 0x0\n\tIPV6_PORTRANGE_HIGH               = 0x1\n\tIPV6_PORTRANGE_LOW                = 0x2\n\tIPV6_RECVDSTOPTS                  = 0x28\n\tIPV6_RECVHOPLIMIT                 = 0x25\n\tIPV6_RECVHOPOPTS                  = 0x27\n\tIPV6_RECVPATHMTU                  = 0x2b\n\tIPV6_RECVPKTINFO                  = 0x24\n\tIPV6_RECVRTHDR                    = 0x26\n\tIPV6_RECVTCLASS                   = 0x39\n\tIPV6_RTHDR                        = 0x33\n\tIPV6_RTHDRDSTOPTS                 = 0x23\n\tIPV6_RTHDR_LOOSE                  = 0x0\n\tIPV6_RTHDR_STRICT                 = 0x1\n\tIPV6_RTHDR_TYPE_0                 = 0x0\n\tIPV6_SOCKOPT_RESERVED1            = 0x3\n\tIPV6_TCLASS                       = 0x3d\n\tIPV6_UNICAST_HOPS                 = 0x4\n\tIPV6_USE_MIN_MTU                  = 0x2a\n\tIPV6_V6ONLY                       = 0x1b\n\tIPV6_VERSION                      = 0x60\n\tIPV6_VERSION_MASK                 = 0xf0\n\tIP_ADD_MEMBERSHIP                 = 0xc\n\tIP_DEFAULT_MULTICAST_LOOP         = 0x1\n\tIP_DEFAULT_MULTICAST_TTL          = 0x1\n\tIP_DF                             = 0x4000\n\tIP_DROP_MEMBERSHIP                = 0xd\n\tIP_EF                             = 0x8000\n\tIP_ERRORMTU                       = 0x15\n\tIP_HDRINCL                        = 0x2\n\tIP_IPSEC_POLICY                   = 0x16\n\tIP_MAXPACKET                      = 0xffff\n\tIP_MAX_MEMBERSHIPS                = 0x14\n\tIP_MF                             = 0x2000\n\tIP_MINFRAGSIZE                    = 0x45\n\tIP_MINTTL                         = 0x18\n\tIP_MSS                            = 0x240\n\tIP_MULTICAST_IF                   = 0x9\n\tIP_MULTICAST_LOOP                 = 0xb\n\tIP_MULTICAST_TTL                  = 0xa\n\tIP_OFFMASK                        = 0x1fff\n\tIP_OPTIONS                        = 0x1\n\tIP_PORTRANGE                      = 0x13\n\tIP_PORTRANGE_DEFAULT              = 0x0\n\tIP_PORTRANGE_HIGH                 = 0x1\n\tIP_PORTRANGE_LOW                  = 0x2\n\tIP_RECVDSTADDR                    = 0x7\n\tIP_RECVIF                         = 0x14\n\tIP_RECVOPTS                       = 0x5\n\tIP_RECVRETOPTS                    = 0x6\n\tIP_RECVTTL                        = 0x17\n\tIP_RETOPTS                        = 0x8\n\tIP_RF                             = 0x8000\n\tIP_TOS                            = 0x3\n\tIP_TTL                            = 0x4\n\tISIG                              = 0x80\n\tISTRIP                            = 0x20\n\tIXANY                             = 0x800\n\tIXOFF                             = 0x400\n\tIXON                              = 0x200\n\tKERN_HOSTNAME                     = 0xa\n\tKERN_OSRELEASE                    = 0x2\n\tKERN_OSTYPE                       = 0x1\n\tKERN_VERSION                      = 0x4\n\tLOCK_EX                           = 0x2\n\tLOCK_NB                           = 0x4\n\tLOCK_SH                           = 0x1\n\tLOCK_UN                           = 0x8\n\tMADV_DONTNEED                     = 0x4\n\tMADV_FREE                         = 0x6\n\tMADV_NORMAL                       = 0x0\n\tMADV_RANDOM                       = 0x1\n\tMADV_SEQUENTIAL                   = 0x2\n\tMADV_SPACEAVAIL                   = 0x5\n\tMADV_WILLNEED                     = 0x3\n\tMAP_ALIGNMENT_16MB                = 0x18000000\n\tMAP_ALIGNMENT_1TB                 = 0x28000000\n\tMAP_ALIGNMENT_256TB               = 0x30000000\n\tMAP_ALIGNMENT_4GB                 = 0x20000000\n\tMAP_ALIGNMENT_64KB                = 0x10000000\n\tMAP_ALIGNMENT_64PB                = 0x38000000\n\tMAP_ALIGNMENT_MASK                = -0x1000000\n\tMAP_ALIGNMENT_SHIFT               = 0x18\n\tMAP_ANON                          = 0x1000\n\tMAP_FILE                          = 0x0\n\tMAP_FIXED                         = 0x10\n\tMAP_HASSEMAPHORE                  = 0x200\n\tMAP_INHERIT                       = 0x80\n\tMAP_INHERIT_COPY                  = 0x1\n\tMAP_INHERIT_DEFAULT               = 0x1\n\tMAP_INHERIT_DONATE_COPY           = 0x3\n\tMAP_INHERIT_NONE                  = 0x2\n\tMAP_INHERIT_SHARE                 = 0x0\n\tMAP_NORESERVE                     = 0x40\n\tMAP_PRIVATE                       = 0x2\n\tMAP_RENAME                        = 0x20\n\tMAP_SHARED                        = 0x1\n\tMAP_STACK                         = 0x2000\n\tMAP_TRYFIXED                      = 0x400\n\tMAP_WIRED                         = 0x800\n\tMCL_CURRENT                       = 0x1\n\tMCL_FUTURE                        = 0x2\n\tMNT_ASYNC                         = 0x40\n\tMNT_BASIC_FLAGS                   = 0xe782807f\n\tMNT_DEFEXPORTED                   = 0x200\n\tMNT_DISCARD                       = 0x800000\n\tMNT_EXKERB                        = 0x800\n\tMNT_EXNORESPORT                   = 0x8000000\n\tMNT_EXPORTANON                    = 0x400\n\tMNT_EXPORTED                      = 0x100\n\tMNT_EXPUBLIC                      = 0x10000000\n\tMNT_EXRDONLY                      = 0x80\n\tMNT_EXTATTR                       = 0x1000000\n\tMNT_FORCE                         = 0x80000\n\tMNT_GETARGS                       = 0x400000\n\tMNT_IGNORE                        = 0x100000\n\tMNT_LAZY                          = 0x3\n\tMNT_LOCAL                         = 0x1000\n\tMNT_LOG                           = 0x2000000\n\tMNT_NOATIME                       = 0x4000000\n\tMNT_NOCOREDUMP                    = 0x8000\n\tMNT_NODEV                         = 0x10\n\tMNT_NODEVMTIME                    = 0x40000000\n\tMNT_NOEXEC                        = 0x4\n\tMNT_NOSUID                        = 0x8\n\tMNT_NOWAIT                        = 0x2\n\tMNT_OP_FLAGS                      = 0x4d0000\n\tMNT_QUOTA                         = 0x2000\n\tMNT_RDONLY                        = 0x1\n\tMNT_RELATIME                      = 0x20000\n\tMNT_RELOAD                        = 0x40000\n\tMNT_ROOTFS                        = 0x4000\n\tMNT_SOFTDEP                       = 0x80000000\n\tMNT_SYMPERM                       = 0x20000000\n\tMNT_SYNCHRONOUS                   = 0x2\n\tMNT_UNION                         = 0x20\n\tMNT_UPDATE                        = 0x10000\n\tMNT_VISFLAGMASK                   = 0xff90ffff\n\tMNT_WAIT                          = 0x1\n\tMSG_BCAST                         = 0x100\n\tMSG_CMSG_CLOEXEC                  = 0x800\n\tMSG_CONTROLMBUF                   = 0x2000000\n\tMSG_CTRUNC                        = 0x20\n\tMSG_DONTROUTE                     = 0x4\n\tMSG_DONTWAIT                      = 0x80\n\tMSG_EOR                           = 0x8\n\tMSG_IOVUSRSPACE                   = 0x4000000\n\tMSG_LENUSRSPACE                   = 0x8000000\n\tMSG_MCAST                         = 0x200\n\tMSG_NAMEMBUF                      = 0x1000000\n\tMSG_NBIO                          = 0x1000\n\tMSG_NOSIGNAL                      = 0x400\n\tMSG_OOB                           = 0x1\n\tMSG_PEEK                          = 0x2\n\tMSG_TRUNC                         = 0x10\n\tMSG_USERFLAGS                     = 0xffffff\n\tMSG_WAITALL                       = 0x40\n\tMS_ASYNC                          = 0x1\n\tMS_INVALIDATE                     = 0x2\n\tMS_SYNC                           = 0x4\n\tNAME_MAX                          = 0x1ff\n\tNET_RT_DUMP                       = 0x1\n\tNET_RT_FLAGS                      = 0x2\n\tNET_RT_IFLIST                     = 0x5\n\tNET_RT_MAXID                      = 0x6\n\tNET_RT_OIFLIST                    = 0x4\n\tNET_RT_OOIFLIST                   = 0x3\n\tNOFLSH                            = 0x80000000\n\tNOTE_ATTRIB                       = 0x8\n\tNOTE_CHILD                        = 0x4\n\tNOTE_DELETE                       = 0x1\n\tNOTE_EXEC                         = 0x20000000\n\tNOTE_EXIT                         = 0x80000000\n\tNOTE_EXTEND                       = 0x4\n\tNOTE_FORK                         = 0x40000000\n\tNOTE_LINK                         = 0x10\n\tNOTE_LOWAT                        = 0x1\n\tNOTE_PCTRLMASK                    = 0xf0000000\n\tNOTE_PDATAMASK                    = 0xfffff\n\tNOTE_RENAME                       = 0x20\n\tNOTE_REVOKE                       = 0x40\n\tNOTE_TRACK                        = 0x1\n\tNOTE_TRACKERR                     = 0x2\n\tNOTE_WRITE                        = 0x2\n\tOCRNL                             = 0x10\n\tOFIOGETBMAP                       = 0xc004667a\n\tONLCR                             = 0x2\n\tONLRET                            = 0x40\n\tONOCR                             = 0x20\n\tONOEOT                            = 0x8\n\tOPOST                             = 0x1\n\tO_ACCMODE                         = 0x3\n\tO_ALT_IO                          = 0x40000\n\tO_APPEND                          = 0x8\n\tO_ASYNC                           = 0x40\n\tO_CLOEXEC                         = 0x400000\n\tO_CREAT                           = 0x200\n\tO_DIRECT                          = 0x80000\n\tO_DIRECTORY                       = 0x200000\n\tO_DSYNC                           = 0x10000\n\tO_EXCL                            = 0x800\n\tO_EXLOCK                          = 0x20\n\tO_FSYNC                           = 0x80\n\tO_NDELAY                          = 0x4\n\tO_NOCTTY                          = 0x8000\n\tO_NOFOLLOW                        = 0x100\n\tO_NONBLOCK                        = 0x4\n\tO_NOSIGPIPE                       = 0x1000000\n\tO_RDONLY                          = 0x0\n\tO_RDWR                            = 0x2\n\tO_RSYNC                           = 0x20000\n\tO_SHLOCK                          = 0x10\n\tO_SYNC                            = 0x80\n\tO_TRUNC                           = 0x400\n\tO_WRONLY                          = 0x1\n\tPARENB                            = 0x1000\n\tPARMRK                            = 0x8\n\tPARODD                            = 0x2000\n\tPENDIN                            = 0x20000000\n\tPRIO_PGRP                         = 0x1\n\tPRIO_PROCESS                      = 0x0\n\tPRIO_USER                         = 0x2\n\tPRI_IOFLUSH                       = 0x7c\n\tPROT_EXEC                         = 0x4\n\tPROT_NONE                         = 0x0\n\tPROT_READ                         = 0x1\n\tPROT_WRITE                        = 0x2\n\tRLIMIT_AS                         = 0xa\n\tRLIMIT_CORE                       = 0x4\n\tRLIMIT_CPU                        = 0x0\n\tRLIMIT_DATA                       = 0x2\n\tRLIMIT_FSIZE                      = 0x1\n\tRLIMIT_MEMLOCK                    = 0x6\n\tRLIMIT_NOFILE                     = 0x8\n\tRLIMIT_NPROC                      = 0x7\n\tRLIMIT_RSS                        = 0x5\n\tRLIMIT_STACK                      = 0x3\n\tRLIM_INFINITY                     = 0x7fffffffffffffff\n\tRTAX_AUTHOR                       = 0x6\n\tRTAX_BRD                          = 0x7\n\tRTAX_DST                          = 0x0\n\tRTAX_GATEWAY                      = 0x1\n\tRTAX_GENMASK                      = 0x3\n\tRTAX_IFA                          = 0x5\n\tRTAX_IFP                          = 0x4\n\tRTAX_MAX                          = 0x9\n\tRTAX_NETMASK                      = 0x2\n\tRTAX_TAG                          = 0x8\n\tRTA_AUTHOR                        = 0x40\n\tRTA_BRD                           = 0x80\n\tRTA_DST                           = 0x1\n\tRTA_GATEWAY                       = 0x2\n\tRTA_GENMASK                       = 0x8\n\tRTA_IFA                           = 0x20\n\tRTA_IFP                           = 0x10\n\tRTA_NETMASK                       = 0x4\n\tRTA_TAG                           = 0x100\n\tRTF_ANNOUNCE                      = 0x20000\n\tRTF_BLACKHOLE                     = 0x1000\n\tRTF_CLONED                        = 0x2000\n\tRTF_CLONING                       = 0x100\n\tRTF_DONE                          = 0x40\n\tRTF_DYNAMIC                       = 0x10\n\tRTF_GATEWAY                       = 0x2\n\tRTF_HOST                          = 0x4\n\tRTF_LLINFO                        = 0x400\n\tRTF_MASK                          = 0x80\n\tRTF_MODIFIED                      = 0x20\n\tRTF_PROTO1                        = 0x8000\n\tRTF_PROTO2                        = 0x4000\n\tRTF_REJECT                        = 0x8\n\tRTF_SRC                           = 0x10000\n\tRTF_STATIC                        = 0x800\n\tRTF_UP                            = 0x1\n\tRTF_XRESOLVE                      = 0x200\n\tRTM_ADD                           = 0x1\n\tRTM_CHANGE                        = 0x3\n\tRTM_CHGADDR                       = 0x15\n\tRTM_DELADDR                       = 0xd\n\tRTM_DELETE                        = 0x2\n\tRTM_GET                           = 0x4\n\tRTM_IEEE80211                     = 0x11\n\tRTM_IFANNOUNCE                    = 0x10\n\tRTM_IFINFO                        = 0x14\n\tRTM_LLINFO_UPD                    = 0x13\n\tRTM_LOCK                          = 0x8\n\tRTM_LOSING                        = 0x5\n\tRTM_MISS                          = 0x7\n\tRTM_NEWADDR                       = 0xc\n\tRTM_OIFINFO                       = 0xf\n\tRTM_OLDADD                        = 0x9\n\tRTM_OLDDEL                        = 0xa\n\tRTM_OOIFINFO                      = 0xe\n\tRTM_REDIRECT                      = 0x6\n\tRTM_RESOLVE                       = 0xb\n\tRTM_RTTUNIT                       = 0xf4240\n\tRTM_SETGATE                       = 0x12\n\tRTM_VERSION                       = 0x4\n\tRTV_EXPIRE                        = 0x4\n\tRTV_HOPCOUNT                      = 0x2\n\tRTV_MTU                           = 0x1\n\tRTV_RPIPE                         = 0x8\n\tRTV_RTT                           = 0x40\n\tRTV_RTTVAR                        = 0x80\n\tRTV_SPIPE                         = 0x10\n\tRTV_SSTHRESH                      = 0x20\n\tRUSAGE_CHILDREN                   = -0x1\n\tRUSAGE_SELF                       = 0x0\n\tSCM_CREDS                         = 0x4\n\tSCM_RIGHTS                        = 0x1\n\tSCM_TIMESTAMP                     = 0x8\n\tSHUT_RD                           = 0x0\n\tSHUT_RDWR                         = 0x2\n\tSHUT_WR                           = 0x1\n\tSIOCADDMULTI                      = 0x80906931\n\tSIOCADDRT                         = 0x8038720a\n\tSIOCAIFADDR                       = 0x8040691a\n\tSIOCALIFADDR                      = 0x8118691c\n\tSIOCATMARK                        = 0x40047307\n\tSIOCDELMULTI                      = 0x80906932\n\tSIOCDELRT                         = 0x8038720b\n\tSIOCDIFADDR                       = 0x80906919\n\tSIOCDIFPHYADDR                    = 0x80906949\n\tSIOCDLIFADDR                      = 0x8118691e\n\tSIOCGDRVSPEC                      = 0xc028697b\n\tSIOCGETPFSYNC                     = 0xc09069f8\n\tSIOCGETSGCNT                      = 0xc0207534\n\tSIOCGETVIFCNT                     = 0xc0287533\n\tSIOCGHIWAT                        = 0x40047301\n\tSIOCGIFADDR                       = 0xc0906921\n\tSIOCGIFADDRPREF                   = 0xc0986920\n\tSIOCGIFALIAS                      = 0xc040691b\n\tSIOCGIFBRDADDR                    = 0xc0906923\n\tSIOCGIFCAP                        = 0xc0206976\n\tSIOCGIFCONF                       = 0xc0106926\n\tSIOCGIFDATA                       = 0xc0986985\n\tSIOCGIFDLT                        = 0xc0906977\n\tSIOCGIFDSTADDR                    = 0xc0906922\n\tSIOCGIFFLAGS                      = 0xc0906911\n\tSIOCGIFGENERIC                    = 0xc090693a\n\tSIOCGIFMEDIA                      = 0xc0306936\n\tSIOCGIFMETRIC                     = 0xc0906917\n\tSIOCGIFMTU                        = 0xc090697e\n\tSIOCGIFNETMASK                    = 0xc0906925\n\tSIOCGIFPDSTADDR                   = 0xc0906948\n\tSIOCGIFPSRCADDR                   = 0xc0906947\n\tSIOCGLIFADDR                      = 0xc118691d\n\tSIOCGLIFPHYADDR                   = 0xc118694b\n\tSIOCGLINKSTR                      = 0xc0286987\n\tSIOCGLOWAT                        = 0x40047303\n\tSIOCGPGRP                         = 0x40047309\n\tSIOCGVH                           = 0xc0906983\n\tSIOCIFCREATE                      = 0x8090697a\n\tSIOCIFDESTROY                     = 0x80906979\n\tSIOCIFGCLONERS                    = 0xc0106978\n\tSIOCINITIFADDR                    = 0xc0706984\n\tSIOCSDRVSPEC                      = 0x8028697b\n\tSIOCSETPFSYNC                     = 0x809069f7\n\tSIOCSHIWAT                        = 0x80047300\n\tSIOCSIFADDR                       = 0x8090690c\n\tSIOCSIFADDRPREF                   = 0x8098691f\n\tSIOCSIFBRDADDR                    = 0x80906913\n\tSIOCSIFCAP                        = 0x80206975\n\tSIOCSIFDSTADDR                    = 0x8090690e\n\tSIOCSIFFLAGS                      = 0x80906910\n\tSIOCSIFGENERIC                    = 0x80906939\n\tSIOCSIFMEDIA                      = 0xc0906935\n\tSIOCSIFMETRIC                     = 0x80906918\n\tSIOCSIFMTU                        = 0x8090697f\n\tSIOCSIFNETMASK                    = 0x80906916\n\tSIOCSIFPHYADDR                    = 0x80406946\n\tSIOCSLIFPHYADDR                   = 0x8118694a\n\tSIOCSLINKSTR                      = 0x80286988\n\tSIOCSLOWAT                        = 0x80047302\n\tSIOCSPGRP                         = 0x80047308\n\tSIOCSVH                           = 0xc0906982\n\tSIOCZIFDATA                       = 0xc0986986\n\tSOCK_CLOEXEC                      = 0x10000000\n\tSOCK_DGRAM                        = 0x2\n\tSOCK_FLAGS_MASK                   = 0xf0000000\n\tSOCK_NONBLOCK                     = 0x20000000\n\tSOCK_NOSIGPIPE                    = 0x40000000\n\tSOCK_RAW                          = 0x3\n\tSOCK_RDM                          = 0x4\n\tSOCK_SEQPACKET                    = 0x5\n\tSOCK_STREAM                       = 0x1\n\tSOL_SOCKET                        = 0xffff\n\tSOMAXCONN                         = 0x80\n\tSO_ACCEPTCONN                     = 0x2\n\tSO_ACCEPTFILTER                   = 0x1000\n\tSO_BROADCAST                      = 0x20\n\tSO_DEBUG                          = 0x1\n\tSO_DONTROUTE                      = 0x10\n\tSO_ERROR                          = 0x1007\n\tSO_KEEPALIVE                      = 0x8\n\tSO_LINGER                         = 0x80\n\tSO_NOHEADER                       = 0x100a\n\tSO_NOSIGPIPE                      = 0x800\n\tSO_OOBINLINE                      = 0x100\n\tSO_OVERFLOWED                     = 0x1009\n\tSO_RCVBUF                         = 0x1002\n\tSO_RCVLOWAT                       = 0x1004\n\tSO_RCVTIMEO                       = 0x100c\n\tSO_REUSEADDR                      = 0x4\n\tSO_REUSEPORT                      = 0x200\n\tSO_SNDBUF                         = 0x1001\n\tSO_SNDLOWAT                       = 0x1003\n\tSO_SNDTIMEO                       = 0x100b\n\tSO_TIMESTAMP                      = 0x2000\n\tSO_TYPE                           = 0x1008\n\tSO_USELOOPBACK                    = 0x40\n\tSYSCTL_VERSION                    = 0x1000000\n\tSYSCTL_VERS_0                     = 0x0\n\tSYSCTL_VERS_1                     = 0x1000000\n\tSYSCTL_VERS_MASK                  = 0xff000000\n\tS_ARCH1                           = 0x10000\n\tS_ARCH2                           = 0x20000\n\tS_BLKSIZE                         = 0x200\n\tS_IEXEC                           = 0x40\n\tS_IFBLK                           = 0x6000\n\tS_IFCHR                           = 0x2000\n\tS_IFDIR                           = 0x4000\n\tS_IFIFO                           = 0x1000\n\tS_IFLNK                           = 0xa000\n\tS_IFMT                            = 0xf000\n\tS_IFREG                           = 0x8000\n\tS_IFSOCK                          = 0xc000\n\tS_IFWHT                           = 0xe000\n\tS_IREAD                           = 0x100\n\tS_IRGRP                           = 0x20\n\tS_IROTH                           = 0x4\n\tS_IRUSR                           = 0x100\n\tS_IRWXG                           = 0x38\n\tS_IRWXO                           = 0x7\n\tS_IRWXU                           = 0x1c0\n\tS_ISGID                           = 0x400\n\tS_ISTXT                           = 0x200\n\tS_ISUID                           = 0x800\n\tS_ISVTX                           = 0x200\n\tS_IWGRP                           = 0x10\n\tS_IWOTH                           = 0x2\n\tS_IWRITE                          = 0x80\n\tS_IWUSR                           = 0x80\n\tS_IXGRP                           = 0x8\n\tS_IXOTH                           = 0x1\n\tS_IXUSR                           = 0x40\n\tS_LOGIN_SET                       = 0x1\n\tTCIFLUSH                          = 0x1\n\tTCIOFLUSH                         = 0x3\n\tTCOFLUSH                          = 0x2\n\tTCP_CONGCTL                       = 0x20\n\tTCP_KEEPCNT                       = 0x6\n\tTCP_KEEPIDLE                      = 0x3\n\tTCP_KEEPINIT                      = 0x7\n\tTCP_KEEPINTVL                     = 0x5\n\tTCP_MAXBURST                      = 0x4\n\tTCP_MAXSEG                        = 0x2\n\tTCP_MAXWIN                        = 0xffff\n\tTCP_MAX_WINSHIFT                  = 0xe\n\tTCP_MD5SIG                        = 0x10\n\tTCP_MINMSS                        = 0xd8\n\tTCP_MSS                           = 0x218\n\tTCP_NODELAY                       = 0x1\n\tTCSAFLUSH                         = 0x2\n\tTIOCCBRK                          = 0x2000747a\n\tTIOCCDTR                          = 0x20007478\n\tTIOCCONS                          = 0x80047462\n\tTIOCDCDTIMESTAMP                  = 0x40107458\n\tTIOCDRAIN                         = 0x2000745e\n\tTIOCEXCL                          = 0x2000740d\n\tTIOCEXT                           = 0x80047460\n\tTIOCFLAG_CDTRCTS                  = 0x10\n\tTIOCFLAG_CLOCAL                   = 0x2\n\tTIOCFLAG_CRTSCTS                  = 0x4\n\tTIOCFLAG_MDMBUF                   = 0x8\n\tTIOCFLAG_SOFTCAR                  = 0x1\n\tTIOCFLUSH                         = 0x80047410\n\tTIOCGETA                          = 0x402c7413\n\tTIOCGETD                          = 0x4004741a\n\tTIOCGFLAGS                        = 0x4004745d\n\tTIOCGLINED                        = 0x40207442\n\tTIOCGPGRP                         = 0x40047477\n\tTIOCGQSIZE                        = 0x40047481\n\tTIOCGRANTPT                       = 0x20007447\n\tTIOCGSID                          = 0x40047463\n\tTIOCGSIZE                         = 0x40087468\n\tTIOCGWINSZ                        = 0x40087468\n\tTIOCMBIC                          = 0x8004746b\n\tTIOCMBIS                          = 0x8004746c\n\tTIOCMGET                          = 0x4004746a\n\tTIOCMSET                          = 0x8004746d\n\tTIOCM_CAR                         = 0x40\n\tTIOCM_CD                          = 0x40\n\tTIOCM_CTS                         = 0x20\n\tTIOCM_DSR                         = 0x100\n\tTIOCM_DTR                         = 0x2\n\tTIOCM_LE                          = 0x1\n\tTIOCM_RI                          = 0x80\n\tTIOCM_RNG                         = 0x80\n\tTIOCM_RTS                         = 0x4\n\tTIOCM_SR                          = 0x10\n\tTIOCM_ST                          = 0x8\n\tTIOCNOTTY                         = 0x20007471\n\tTIOCNXCL                          = 0x2000740e\n\tTIOCOUTQ                          = 0x40047473\n\tTIOCPKT                           = 0x80047470\n\tTIOCPKT_DATA                      = 0x0\n\tTIOCPKT_DOSTOP                    = 0x20\n\tTIOCPKT_FLUSHREAD                 = 0x1\n\tTIOCPKT_FLUSHWRITE                = 0x2\n\tTIOCPKT_IOCTL                     = 0x40\n\tTIOCPKT_NOSTOP                    = 0x10\n\tTIOCPKT_START                     = 0x8\n\tTIOCPKT_STOP                      = 0x4\n\tTIOCPTMGET                        = 0x40287446\n\tTIOCPTSNAME                       = 0x40287448\n\tTIOCRCVFRAME                      = 0x80087445\n\tTIOCREMOTE                        = 0x80047469\n\tTIOCSBRK                          = 0x2000747b\n\tTIOCSCTTY                         = 0x20007461\n\tTIOCSDTR                          = 0x20007479\n\tTIOCSETA                          = 0x802c7414\n\tTIOCSETAF                         = 0x802c7416\n\tTIOCSETAW                         = 0x802c7415\n\tTIOCSETD                          = 0x8004741b\n\tTIOCSFLAGS                        = 0x8004745c\n\tTIOCSIG                           = 0x2000745f\n\tTIOCSLINED                        = 0x80207443\n\tTIOCSPGRP                         = 0x80047476\n\tTIOCSQSIZE                        = 0x80047480\n\tTIOCSSIZE                         = 0x80087467\n\tTIOCSTART                         = 0x2000746e\n\tTIOCSTAT                          = 0x80047465\n\tTIOCSTI                           = 0x80017472\n\tTIOCSTOP                          = 0x2000746f\n\tTIOCSWINSZ                        = 0x80087467\n\tTIOCUCNTL                         = 0x80047466\n\tTIOCXMTFRAME                      = 0x80087444\n\tTOSTOP                            = 0x400000\n\tVDISCARD                          = 0xf\n\tVDSUSP                            = 0xb\n\tVEOF                              = 0x0\n\tVEOL                              = 0x1\n\tVEOL2                             = 0x2\n\tVERASE                            = 0x3\n\tVINTR                             = 0x8\n\tVKILL                             = 0x5\n\tVLNEXT                            = 0xe\n\tVMIN                              = 0x10\n\tVQUIT                             = 0x9\n\tVREPRINT                          = 0x6\n\tVSTART                            = 0xc\n\tVSTATUS                           = 0x12\n\tVSTOP                             = 0xd\n\tVSUSP                             = 0xa\n\tVTIME                             = 0x11\n\tVWERASE                           = 0x4\n\tWALL                              = 0x8\n\tWALLSIG                           = 0x8\n\tWALTSIG                           = 0x4\n\tWCLONE                            = 0x4\n\tWCOREFLAG                         = 0x80\n\tWNOHANG                           = 0x1\n\tWNOWAIT                           = 0x10000\n\tWNOZOMBIE                         = 0x20000\n\tWOPTSCHECKED                      = 0x40000\n\tWSTOPPED                          = 0x7f\n\tWUNTRACED                         = 0x2\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x30)\n\tEADDRNOTAVAIL   = syscall.Errno(0x31)\n\tEAFNOSUPPORT    = syscall.Errno(0x2f)\n\tEAGAIN          = syscall.Errno(0x23)\n\tEALREADY        = syscall.Errno(0x25)\n\tEAUTH           = syscall.Errno(0x50)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADMSG         = syscall.Errno(0x58)\n\tEBADRPC         = syscall.Errno(0x48)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x57)\n\tECHILD          = syscall.Errno(0xa)\n\tECONNABORTED    = syscall.Errno(0x35)\n\tECONNREFUSED    = syscall.Errno(0x3d)\n\tECONNRESET      = syscall.Errno(0x36)\n\tEDEADLK         = syscall.Errno(0xb)\n\tEDESTADDRREQ    = syscall.Errno(0x27)\n\tEDOM            = syscall.Errno(0x21)\n\tEDQUOT          = syscall.Errno(0x45)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFTYPE          = syscall.Errno(0x4f)\n\tEHOSTDOWN       = syscall.Errno(0x40)\n\tEHOSTUNREACH    = syscall.Errno(0x41)\n\tEIDRM           = syscall.Errno(0x52)\n\tEILSEQ          = syscall.Errno(0x55)\n\tEINPROGRESS     = syscall.Errno(0x24)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEISCONN         = syscall.Errno(0x38)\n\tEISDIR          = syscall.Errno(0x15)\n\tELAST           = syscall.Errno(0x60)\n\tELOOP           = syscall.Errno(0x3e)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x28)\n\tEMULTIHOP       = syscall.Errno(0x5e)\n\tENAMETOOLONG    = syscall.Errno(0x3f)\n\tENEEDAUTH       = syscall.Errno(0x51)\n\tENETDOWN        = syscall.Errno(0x32)\n\tENETRESET       = syscall.Errno(0x34)\n\tENETUNREACH     = syscall.Errno(0x33)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x5d)\n\tENOBUFS         = syscall.Errno(0x37)\n\tENODATA         = syscall.Errno(0x59)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x4d)\n\tENOLINK         = syscall.Errno(0x5f)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x53)\n\tENOPROTOOPT     = syscall.Errno(0x2a)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSR           = syscall.Errno(0x5a)\n\tENOSTR          = syscall.Errno(0x5b)\n\tENOSYS          = syscall.Errno(0x4e)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x39)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x42)\n\tENOTSOCK        = syscall.Errno(0x26)\n\tENOTSUP         = syscall.Errno(0x56)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x2d)\n\tEOVERFLOW       = syscall.Errno(0x54)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x2e)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x43)\n\tEPROCUNAVAIL    = syscall.Errno(0x4c)\n\tEPROGMISMATCH   = syscall.Errno(0x4b)\n\tEPROGUNAVAIL    = syscall.Errno(0x4a)\n\tEPROTO          = syscall.Errno(0x60)\n\tEPROTONOSUPPORT = syscall.Errno(0x2b)\n\tEPROTOTYPE      = syscall.Errno(0x29)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x47)\n\tEROFS           = syscall.Errno(0x1e)\n\tERPCMISMATCH    = syscall.Errno(0x49)\n\tESHUTDOWN       = syscall.Errno(0x3a)\n\tESOCKTNOSUPPORT = syscall.Errno(0x2c)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x46)\n\tETIME           = syscall.Errno(0x5c)\n\tETIMEDOUT       = syscall.Errno(0x3c)\n\tETOOMANYREFS    = syscall.Errno(0x3b)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUSERS          = syscall.Errno(0x44)\n\tEWOULDBLOCK     = syscall.Errno(0x23)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x14)\n\tSIGCONT   = syscall.Signal(0x13)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINFO   = syscall.Signal(0x1d)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x17)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGPWR    = syscall.Signal(0x20)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTOP   = syscall.Signal(0x11)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x12)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x10)\n\tSIGUSR1   = syscall.Signal(0x1e)\n\tSIGUSR2   = syscall.Signal(0x1f)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"device not configured\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"operation not supported by device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large or too small\"},\n\t{35, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{36, \"EINPROGRESS\", \"operation now in progress\"},\n\t{37, \"EALREADY\", \"operation already in progress\"},\n\t{38, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{39, \"EDESTADDRREQ\", \"destination address required\"},\n\t{40, \"EMSGSIZE\", \"message too long\"},\n\t{41, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{42, \"ENOPROTOOPT\", \"protocol option not available\"},\n\t{43, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{44, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{45, \"EOPNOTSUPP\", \"operation not supported\"},\n\t{46, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{47, \"EAFNOSUPPORT\", \"address family not supported by protocol family\"},\n\t{48, \"EADDRINUSE\", \"address already in use\"},\n\t{49, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{50, \"ENETDOWN\", \"network is down\"},\n\t{51, \"ENETUNREACH\", \"network is unreachable\"},\n\t{52, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{53, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{54, \"ECONNRESET\", \"connection reset by peer\"},\n\t{55, \"ENOBUFS\", \"no buffer space available\"},\n\t{56, \"EISCONN\", \"socket is already connected\"},\n\t{57, \"ENOTCONN\", \"socket is not connected\"},\n\t{58, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{59, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{60, \"ETIMEDOUT\", \"connection timed out\"},\n\t{61, \"ECONNREFUSED\", \"connection refused\"},\n\t{62, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{63, \"ENAMETOOLONG\", \"file name too long\"},\n\t{64, \"EHOSTDOWN\", \"host is down\"},\n\t{65, \"EHOSTUNREACH\", \"no route to host\"},\n\t{66, \"ENOTEMPTY\", \"directory not empty\"},\n\t{67, \"EPROCLIM\", \"too many processes\"},\n\t{68, \"EUSERS\", \"too many users\"},\n\t{69, \"EDQUOT\", \"disc quota exceeded\"},\n\t{70, \"ESTALE\", \"stale NFS file handle\"},\n\t{71, \"EREMOTE\", \"too many levels of remote in path\"},\n\t{72, \"EBADRPC\", \"RPC struct is bad\"},\n\t{73, \"ERPCMISMATCH\", \"RPC version wrong\"},\n\t{74, \"EPROGUNAVAIL\", \"RPC prog. not avail\"},\n\t{75, \"EPROGMISMATCH\", \"program version wrong\"},\n\t{76, \"EPROCUNAVAIL\", \"bad procedure for program\"},\n\t{77, \"ENOLCK\", \"no locks available\"},\n\t{78, \"ENOSYS\", \"function not implemented\"},\n\t{79, \"EFTYPE\", \"inappropriate file type or format\"},\n\t{80, \"EAUTH\", \"authentication error\"},\n\t{81, \"ENEEDAUTH\", \"need authenticator\"},\n\t{82, \"EIDRM\", \"identifier removed\"},\n\t{83, \"ENOMSG\", \"no message of desired type\"},\n\t{84, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n\t{85, \"EILSEQ\", \"illegal byte sequence\"},\n\t{86, \"ENOTSUP\", \"not supported\"},\n\t{87, \"ECANCELED\", \"operation Canceled\"},\n\t{88, \"EBADMSG\", \"bad or Corrupt message\"},\n\t{89, \"ENODATA\", \"no message available\"},\n\t{90, \"ENOSR\", \"no STREAM resources\"},\n\t{91, \"ENOSTR\", \"not a STREAM\"},\n\t{92, \"ETIME\", \"STREAM ioctl timeout\"},\n\t{93, \"ENOATTR\", \"attribute not found\"},\n\t{94, \"EMULTIHOP\", \"multihop attempted\"},\n\t{95, \"ENOLINK\", \"link has been severed\"},\n\t{96, \"ELAST\", \"protocol error\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGIOT\", \"abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"stopped (signal)\"},\n\t{18, \"SIGTSTP\", \"stopped\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGINFO\", \"information request\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n\t{32, \"SIGPWR\", \"power fail/restart\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go",
    "content": "// mkerrors.sh -m32\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build 386,openbsd\n\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs -- -m32 _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                      = 0x10\n\tAF_BLUETOOTH                      = 0x20\n\tAF_CCITT                          = 0xa\n\tAF_CHAOS                          = 0x5\n\tAF_CNT                            = 0x15\n\tAF_COIP                           = 0x14\n\tAF_DATAKIT                        = 0x9\n\tAF_DECnet                         = 0xc\n\tAF_DLI                            = 0xd\n\tAF_E164                           = 0x1a\n\tAF_ECMA                           = 0x8\n\tAF_ENCAP                          = 0x1c\n\tAF_HYLINK                         = 0xf\n\tAF_IMPLINK                        = 0x3\n\tAF_INET                           = 0x2\n\tAF_INET6                          = 0x18\n\tAF_IPX                            = 0x17\n\tAF_ISDN                           = 0x1a\n\tAF_ISO                            = 0x7\n\tAF_KEY                            = 0x1e\n\tAF_LAT                            = 0xe\n\tAF_LINK                           = 0x12\n\tAF_LOCAL                          = 0x1\n\tAF_MAX                            = 0x24\n\tAF_MPLS                           = 0x21\n\tAF_NATM                           = 0x1b\n\tAF_NS                             = 0x6\n\tAF_OSI                            = 0x7\n\tAF_PUP                            = 0x4\n\tAF_ROUTE                          = 0x11\n\tAF_SIP                            = 0x1d\n\tAF_SNA                            = 0xb\n\tAF_UNIX                           = 0x1\n\tAF_UNSPEC                         = 0x0\n\tARPHRD_ETHER                      = 0x1\n\tARPHRD_FRELAY                     = 0xf\n\tARPHRD_IEEE1394                   = 0x18\n\tARPHRD_IEEE802                    = 0x6\n\tB0                                = 0x0\n\tB110                              = 0x6e\n\tB115200                           = 0x1c200\n\tB1200                             = 0x4b0\n\tB134                              = 0x86\n\tB14400                            = 0x3840\n\tB150                              = 0x96\n\tB1800                             = 0x708\n\tB19200                            = 0x4b00\n\tB200                              = 0xc8\n\tB230400                           = 0x38400\n\tB2400                             = 0x960\n\tB28800                            = 0x7080\n\tB300                              = 0x12c\n\tB38400                            = 0x9600\n\tB4800                             = 0x12c0\n\tB50                               = 0x32\n\tB57600                            = 0xe100\n\tB600                              = 0x258\n\tB7200                             = 0x1c20\n\tB75                               = 0x4b\n\tB76800                            = 0x12c00\n\tB9600                             = 0x2580\n\tBIOCFLUSH                         = 0x20004268\n\tBIOCGBLEN                         = 0x40044266\n\tBIOCGDIRFILT                      = 0x4004427c\n\tBIOCGDLT                          = 0x4004426a\n\tBIOCGDLTLIST                      = 0xc008427b\n\tBIOCGETIF                         = 0x4020426b\n\tBIOCGFILDROP                      = 0x40044278\n\tBIOCGHDRCMPLT                     = 0x40044274\n\tBIOCGRSIG                         = 0x40044273\n\tBIOCGRTIMEOUT                     = 0x400c426e\n\tBIOCGSTATS                        = 0x4008426f\n\tBIOCIMMEDIATE                     = 0x80044270\n\tBIOCLOCK                          = 0x20004276\n\tBIOCPROMISC                       = 0x20004269\n\tBIOCSBLEN                         = 0xc0044266\n\tBIOCSDIRFILT                      = 0x8004427d\n\tBIOCSDLT                          = 0x8004427a\n\tBIOCSETF                          = 0x80084267\n\tBIOCSETIF                         = 0x8020426c\n\tBIOCSETWF                         = 0x80084277\n\tBIOCSFILDROP                      = 0x80044279\n\tBIOCSHDRCMPLT                     = 0x80044275\n\tBIOCSRSIG                         = 0x80044272\n\tBIOCSRTIMEOUT                     = 0x800c426d\n\tBIOCVERSION                       = 0x40044271\n\tBPF_A                             = 0x10\n\tBPF_ABS                           = 0x20\n\tBPF_ADD                           = 0x0\n\tBPF_ALIGNMENT                     = 0x4\n\tBPF_ALU                           = 0x4\n\tBPF_AND                           = 0x50\n\tBPF_B                             = 0x10\n\tBPF_DIRECTION_IN                  = 0x1\n\tBPF_DIRECTION_OUT                 = 0x2\n\tBPF_DIV                           = 0x30\n\tBPF_H                             = 0x8\n\tBPF_IMM                           = 0x0\n\tBPF_IND                           = 0x40\n\tBPF_JA                            = 0x0\n\tBPF_JEQ                           = 0x10\n\tBPF_JGE                           = 0x30\n\tBPF_JGT                           = 0x20\n\tBPF_JMP                           = 0x5\n\tBPF_JSET                          = 0x40\n\tBPF_K                             = 0x0\n\tBPF_LD                            = 0x0\n\tBPF_LDX                           = 0x1\n\tBPF_LEN                           = 0x80\n\tBPF_LSH                           = 0x60\n\tBPF_MAJOR_VERSION                 = 0x1\n\tBPF_MAXBUFSIZE                    = 0x200000\n\tBPF_MAXINSNS                      = 0x200\n\tBPF_MEM                           = 0x60\n\tBPF_MEMWORDS                      = 0x10\n\tBPF_MINBUFSIZE                    = 0x20\n\tBPF_MINOR_VERSION                 = 0x1\n\tBPF_MISC                          = 0x7\n\tBPF_MSH                           = 0xa0\n\tBPF_MUL                           = 0x20\n\tBPF_NEG                           = 0x80\n\tBPF_OR                            = 0x40\n\tBPF_RELEASE                       = 0x30bb6\n\tBPF_RET                           = 0x6\n\tBPF_RSH                           = 0x70\n\tBPF_ST                            = 0x2\n\tBPF_STX                           = 0x3\n\tBPF_SUB                           = 0x10\n\tBPF_TAX                           = 0x0\n\tBPF_TXA                           = 0x80\n\tBPF_W                             = 0x0\n\tBPF_X                             = 0x8\n\tBRKINT                            = 0x2\n\tCFLUSH                            = 0xf\n\tCLOCAL                            = 0x8000\n\tCREAD                             = 0x800\n\tCRTSCTS                           = 0x10000\n\tCS5                               = 0x0\n\tCS6                               = 0x100\n\tCS7                               = 0x200\n\tCS8                               = 0x300\n\tCSIZE                             = 0x300\n\tCSTART                            = 0x11\n\tCSTATUS                           = 0xff\n\tCSTOP                             = 0x13\n\tCSTOPB                            = 0x400\n\tCSUSP                             = 0x1a\n\tCTL_HW                            = 0x6\n\tCTL_KERN                          = 0x1\n\tCTL_MAXNAME                       = 0xc\n\tCTL_NET                           = 0x4\n\tDIOCOSFPFLUSH                     = 0x2000444e\n\tDLT_ARCNET                        = 0x7\n\tDLT_ATM_RFC1483                   = 0xb\n\tDLT_AX25                          = 0x3\n\tDLT_CHAOS                         = 0x5\n\tDLT_C_HDLC                        = 0x68\n\tDLT_EN10MB                        = 0x1\n\tDLT_EN3MB                         = 0x2\n\tDLT_ENC                           = 0xd\n\tDLT_FDDI                          = 0xa\n\tDLT_IEEE802                       = 0x6\n\tDLT_IEEE802_11                    = 0x69\n\tDLT_IEEE802_11_RADIO              = 0x7f\n\tDLT_LOOP                          = 0xc\n\tDLT_MPLS                          = 0xdb\n\tDLT_NULL                          = 0x0\n\tDLT_PFLOG                         = 0x75\n\tDLT_PFSYNC                        = 0x12\n\tDLT_PPP                           = 0x9\n\tDLT_PPP_BSDOS                     = 0x10\n\tDLT_PPP_ETHER                     = 0x33\n\tDLT_PPP_SERIAL                    = 0x32\n\tDLT_PRONET                        = 0x4\n\tDLT_RAW                           = 0xe\n\tDLT_SLIP                          = 0x8\n\tDLT_SLIP_BSDOS                    = 0xf\n\tDT_BLK                            = 0x6\n\tDT_CHR                            = 0x2\n\tDT_DIR                            = 0x4\n\tDT_FIFO                           = 0x1\n\tDT_LNK                            = 0xa\n\tDT_REG                            = 0x8\n\tDT_SOCK                           = 0xc\n\tDT_UNKNOWN                        = 0x0\n\tECHO                              = 0x8\n\tECHOCTL                           = 0x40\n\tECHOE                             = 0x2\n\tECHOK                             = 0x4\n\tECHOKE                            = 0x1\n\tECHONL                            = 0x10\n\tECHOPRT                           = 0x20\n\tEMT_TAGOVF                        = 0x1\n\tEMUL_ENABLED                      = 0x1\n\tEMUL_NATIVE                       = 0x2\n\tENDRUNDISC                        = 0x9\n\tETHERMIN                          = 0x2e\n\tETHERMTU                          = 0x5dc\n\tETHERTYPE_8023                    = 0x4\n\tETHERTYPE_AARP                    = 0x80f3\n\tETHERTYPE_ACCTON                  = 0x8390\n\tETHERTYPE_AEONIC                  = 0x8036\n\tETHERTYPE_ALPHA                   = 0x814a\n\tETHERTYPE_AMBER                   = 0x6008\n\tETHERTYPE_AMOEBA                  = 0x8145\n\tETHERTYPE_AOE                     = 0x88a2\n\tETHERTYPE_APOLLO                  = 0x80f7\n\tETHERTYPE_APOLLODOMAIN            = 0x8019\n\tETHERTYPE_APPLETALK               = 0x809b\n\tETHERTYPE_APPLITEK                = 0x80c7\n\tETHERTYPE_ARGONAUT                = 0x803a\n\tETHERTYPE_ARP                     = 0x806\n\tETHERTYPE_AT                      = 0x809b\n\tETHERTYPE_ATALK                   = 0x809b\n\tETHERTYPE_ATOMIC                  = 0x86df\n\tETHERTYPE_ATT                     = 0x8069\n\tETHERTYPE_ATTSTANFORD             = 0x8008\n\tETHERTYPE_AUTOPHON                = 0x806a\n\tETHERTYPE_AXIS                    = 0x8856\n\tETHERTYPE_BCLOOP                  = 0x9003\n\tETHERTYPE_BOFL                    = 0x8102\n\tETHERTYPE_CABLETRON               = 0x7034\n\tETHERTYPE_CHAOS                   = 0x804\n\tETHERTYPE_COMDESIGN               = 0x806c\n\tETHERTYPE_COMPUGRAPHIC            = 0x806d\n\tETHERTYPE_COUNTERPOINT            = 0x8062\n\tETHERTYPE_CRONUS                  = 0x8004\n\tETHERTYPE_CRONUSVLN               = 0x8003\n\tETHERTYPE_DCA                     = 0x1234\n\tETHERTYPE_DDE                     = 0x807b\n\tETHERTYPE_DEBNI                   = 0xaaaa\n\tETHERTYPE_DECAM                   = 0x8048\n\tETHERTYPE_DECCUST                 = 0x6006\n\tETHERTYPE_DECDIAG                 = 0x6005\n\tETHERTYPE_DECDNS                  = 0x803c\n\tETHERTYPE_DECDTS                  = 0x803e\n\tETHERTYPE_DECEXPER                = 0x6000\n\tETHERTYPE_DECLAST                 = 0x8041\n\tETHERTYPE_DECLTM                  = 0x803f\n\tETHERTYPE_DECMUMPS                = 0x6009\n\tETHERTYPE_DECNETBIOS              = 0x8040\n\tETHERTYPE_DELTACON                = 0x86de\n\tETHERTYPE_DIDDLE                  = 0x4321\n\tETHERTYPE_DLOG1                   = 0x660\n\tETHERTYPE_DLOG2                   = 0x661\n\tETHERTYPE_DN                      = 0x6003\n\tETHERTYPE_DOGFIGHT                = 0x1989\n\tETHERTYPE_DSMD                    = 0x8039\n\tETHERTYPE_ECMA                    = 0x803\n\tETHERTYPE_ENCRYPT                 = 0x803d\n\tETHERTYPE_ES                      = 0x805d\n\tETHERTYPE_EXCELAN                 = 0x8010\n\tETHERTYPE_EXPERDATA               = 0x8049\n\tETHERTYPE_FLIP                    = 0x8146\n\tETHERTYPE_FLOWCONTROL             = 0x8808\n\tETHERTYPE_FRARP                   = 0x808\n\tETHERTYPE_GENDYN                  = 0x8068\n\tETHERTYPE_HAYES                   = 0x8130\n\tETHERTYPE_HIPPI_FP                = 0x8180\n\tETHERTYPE_HITACHI                 = 0x8820\n\tETHERTYPE_HP                      = 0x8005\n\tETHERTYPE_IEEEPUP                 = 0xa00\n\tETHERTYPE_IEEEPUPAT               = 0xa01\n\tETHERTYPE_IMLBL                   = 0x4c42\n\tETHERTYPE_IMLBLDIAG               = 0x424c\n\tETHERTYPE_IP                      = 0x800\n\tETHERTYPE_IPAS                    = 0x876c\n\tETHERTYPE_IPV6                    = 0x86dd\n\tETHERTYPE_IPX                     = 0x8137\n\tETHERTYPE_IPXNEW                  = 0x8037\n\tETHERTYPE_KALPANA                 = 0x8582\n\tETHERTYPE_LANBRIDGE               = 0x8038\n\tETHERTYPE_LANPROBE                = 0x8888\n\tETHERTYPE_LAT                     = 0x6004\n\tETHERTYPE_LBACK                   = 0x9000\n\tETHERTYPE_LITTLE                  = 0x8060\n\tETHERTYPE_LLDP                    = 0x88cc\n\tETHERTYPE_LOGICRAFT               = 0x8148\n\tETHERTYPE_LOOPBACK                = 0x9000\n\tETHERTYPE_MATRA                   = 0x807a\n\tETHERTYPE_MAX                     = 0xffff\n\tETHERTYPE_MERIT                   = 0x807c\n\tETHERTYPE_MICP                    = 0x873a\n\tETHERTYPE_MOPDL                   = 0x6001\n\tETHERTYPE_MOPRC                   = 0x6002\n\tETHERTYPE_MOTOROLA                = 0x818d\n\tETHERTYPE_MPLS                    = 0x8847\n\tETHERTYPE_MPLS_MCAST              = 0x8848\n\tETHERTYPE_MUMPS                   = 0x813f\n\tETHERTYPE_NBPCC                   = 0x3c04\n\tETHERTYPE_NBPCLAIM                = 0x3c09\n\tETHERTYPE_NBPCLREQ                = 0x3c05\n\tETHERTYPE_NBPCLRSP                = 0x3c06\n\tETHERTYPE_NBPCREQ                 = 0x3c02\n\tETHERTYPE_NBPCRSP                 = 0x3c03\n\tETHERTYPE_NBPDG                   = 0x3c07\n\tETHERTYPE_NBPDGB                  = 0x3c08\n\tETHERTYPE_NBPDLTE                 = 0x3c0a\n\tETHERTYPE_NBPRAR                  = 0x3c0c\n\tETHERTYPE_NBPRAS                  = 0x3c0b\n\tETHERTYPE_NBPRST                  = 0x3c0d\n\tETHERTYPE_NBPSCD                  = 0x3c01\n\tETHERTYPE_NBPVCD                  = 0x3c00\n\tETHERTYPE_NBS                     = 0x802\n\tETHERTYPE_NCD                     = 0x8149\n\tETHERTYPE_NESTAR                  = 0x8006\n\tETHERTYPE_NETBEUI                 = 0x8191\n\tETHERTYPE_NOVELL                  = 0x8138\n\tETHERTYPE_NS                      = 0x600\n\tETHERTYPE_NSAT                    = 0x601\n\tETHERTYPE_NSCOMPAT                = 0x807\n\tETHERTYPE_NTRAILER                = 0x10\n\tETHERTYPE_OS9                     = 0x7007\n\tETHERTYPE_OS9NET                  = 0x7009\n\tETHERTYPE_PACER                   = 0x80c6\n\tETHERTYPE_PAE                     = 0x888e\n\tETHERTYPE_PCS                     = 0x4242\n\tETHERTYPE_PLANNING                = 0x8044\n\tETHERTYPE_PPP                     = 0x880b\n\tETHERTYPE_PPPOE                   = 0x8864\n\tETHERTYPE_PPPOEDISC               = 0x8863\n\tETHERTYPE_PRIMENTS                = 0x7031\n\tETHERTYPE_PUP                     = 0x200\n\tETHERTYPE_PUPAT                   = 0x200\n\tETHERTYPE_QINQ                    = 0x88a8\n\tETHERTYPE_RACAL                   = 0x7030\n\tETHERTYPE_RATIONAL                = 0x8150\n\tETHERTYPE_RAWFR                   = 0x6559\n\tETHERTYPE_RCL                     = 0x1995\n\tETHERTYPE_RDP                     = 0x8739\n\tETHERTYPE_RETIX                   = 0x80f2\n\tETHERTYPE_REVARP                  = 0x8035\n\tETHERTYPE_SCA                     = 0x6007\n\tETHERTYPE_SECTRA                  = 0x86db\n\tETHERTYPE_SECUREDATA              = 0x876d\n\tETHERTYPE_SGITW                   = 0x817e\n\tETHERTYPE_SG_BOUNCE               = 0x8016\n\tETHERTYPE_SG_DIAG                 = 0x8013\n\tETHERTYPE_SG_NETGAMES             = 0x8014\n\tETHERTYPE_SG_RESV                 = 0x8015\n\tETHERTYPE_SIMNET                  = 0x5208\n\tETHERTYPE_SLOW                    = 0x8809\n\tETHERTYPE_SNA                     = 0x80d5\n\tETHERTYPE_SNMP                    = 0x814c\n\tETHERTYPE_SONIX                   = 0xfaf5\n\tETHERTYPE_SPIDER                  = 0x809f\n\tETHERTYPE_SPRITE                  = 0x500\n\tETHERTYPE_STP                     = 0x8181\n\tETHERTYPE_TALARIS                 = 0x812b\n\tETHERTYPE_TALARISMC               = 0x852b\n\tETHERTYPE_TCPCOMP                 = 0x876b\n\tETHERTYPE_TCPSM                   = 0x9002\n\tETHERTYPE_TEC                     = 0x814f\n\tETHERTYPE_TIGAN                   = 0x802f\n\tETHERTYPE_TRAIL                   = 0x1000\n\tETHERTYPE_TRANSETHER              = 0x6558\n\tETHERTYPE_TYMSHARE                = 0x802e\n\tETHERTYPE_UBBST                   = 0x7005\n\tETHERTYPE_UBDEBUG                 = 0x900\n\tETHERTYPE_UBDIAGLOOP              = 0x7002\n\tETHERTYPE_UBDL                    = 0x7000\n\tETHERTYPE_UBNIU                   = 0x7001\n\tETHERTYPE_UBNMC                   = 0x7003\n\tETHERTYPE_VALID                   = 0x1600\n\tETHERTYPE_VARIAN                  = 0x80dd\n\tETHERTYPE_VAXELN                  = 0x803b\n\tETHERTYPE_VEECO                   = 0x8067\n\tETHERTYPE_VEXP                    = 0x805b\n\tETHERTYPE_VGLAB                   = 0x8131\n\tETHERTYPE_VINES                   = 0xbad\n\tETHERTYPE_VINESECHO               = 0xbaf\n\tETHERTYPE_VINESLOOP               = 0xbae\n\tETHERTYPE_VITAL                   = 0xff00\n\tETHERTYPE_VLAN                    = 0x8100\n\tETHERTYPE_VLTLMAN                 = 0x8080\n\tETHERTYPE_VPROD                   = 0x805c\n\tETHERTYPE_VURESERVED              = 0x8147\n\tETHERTYPE_WATERLOO                = 0x8130\n\tETHERTYPE_WELLFLEET               = 0x8103\n\tETHERTYPE_X25                     = 0x805\n\tETHERTYPE_X75                     = 0x801\n\tETHERTYPE_XNSSM                   = 0x9001\n\tETHERTYPE_XTP                     = 0x817d\n\tETHER_ADDR_LEN                    = 0x6\n\tETHER_ALIGN                       = 0x2\n\tETHER_CRC_LEN                     = 0x4\n\tETHER_CRC_POLY_BE                 = 0x4c11db6\n\tETHER_CRC_POLY_LE                 = 0xedb88320\n\tETHER_HDR_LEN                     = 0xe\n\tETHER_MAX_DIX_LEN                 = 0x600\n\tETHER_MAX_LEN                     = 0x5ee\n\tETHER_MIN_LEN                     = 0x40\n\tETHER_TYPE_LEN                    = 0x2\n\tETHER_VLAN_ENCAP_LEN              = 0x4\n\tEVFILT_AIO                        = -0x3\n\tEVFILT_PROC                       = -0x5\n\tEVFILT_READ                       = -0x1\n\tEVFILT_SIGNAL                     = -0x6\n\tEVFILT_SYSCOUNT                   = 0x7\n\tEVFILT_TIMER                      = -0x7\n\tEVFILT_VNODE                      = -0x4\n\tEVFILT_WRITE                      = -0x2\n\tEV_ADD                            = 0x1\n\tEV_CLEAR                          = 0x20\n\tEV_DELETE                         = 0x2\n\tEV_DISABLE                        = 0x8\n\tEV_ENABLE                         = 0x4\n\tEV_EOF                            = 0x8000\n\tEV_ERROR                          = 0x4000\n\tEV_FLAG1                          = 0x2000\n\tEV_ONESHOT                        = 0x10\n\tEV_SYSFLAGS                       = 0xf000\n\tEXTA                              = 0x4b00\n\tEXTB                              = 0x9600\n\tEXTPROC                           = 0x800\n\tFD_CLOEXEC                        = 0x1\n\tFD_SETSIZE                        = 0x400\n\tFLUSHO                            = 0x800000\n\tF_DUPFD                           = 0x0\n\tF_DUPFD_CLOEXEC                   = 0xa\n\tF_GETFD                           = 0x1\n\tF_GETFL                           = 0x3\n\tF_GETLK                           = 0x7\n\tF_GETOWN                          = 0x5\n\tF_OK                              = 0x0\n\tF_RDLCK                           = 0x1\n\tF_SETFD                           = 0x2\n\tF_SETFL                           = 0x4\n\tF_SETLK                           = 0x8\n\tF_SETLKW                          = 0x9\n\tF_SETOWN                          = 0x6\n\tF_UNLCK                           = 0x2\n\tF_WRLCK                           = 0x3\n\tHUPCL                             = 0x4000\n\tHW_MACHINE                        = 0x1\n\tICANON                            = 0x100\n\tICMP6_FILTER                      = 0x12\n\tICRNL                             = 0x100\n\tIEXTEN                            = 0x400\n\tIFAN_ARRIVAL                      = 0x0\n\tIFAN_DEPARTURE                    = 0x1\n\tIFA_ROUTE                         = 0x1\n\tIFF_ALLMULTI                      = 0x200\n\tIFF_BROADCAST                     = 0x2\n\tIFF_CANTCHANGE                    = 0x8e52\n\tIFF_DEBUG                         = 0x4\n\tIFF_LINK0                         = 0x1000\n\tIFF_LINK1                         = 0x2000\n\tIFF_LINK2                         = 0x4000\n\tIFF_LOOPBACK                      = 0x8\n\tIFF_MULTICAST                     = 0x8000\n\tIFF_NOARP                         = 0x80\n\tIFF_NOTRAILERS                    = 0x20\n\tIFF_OACTIVE                       = 0x400\n\tIFF_POINTOPOINT                   = 0x10\n\tIFF_PROMISC                       = 0x100\n\tIFF_RUNNING                       = 0x40\n\tIFF_SIMPLEX                       = 0x800\n\tIFF_UP                            = 0x1\n\tIFNAMSIZ                          = 0x10\n\tIFT_1822                          = 0x2\n\tIFT_A12MPPSWITCH                  = 0x82\n\tIFT_AAL2                          = 0xbb\n\tIFT_AAL5                          = 0x31\n\tIFT_ADSL                          = 0x5e\n\tIFT_AFLANE8023                    = 0x3b\n\tIFT_AFLANE8025                    = 0x3c\n\tIFT_ARAP                          = 0x58\n\tIFT_ARCNET                        = 0x23\n\tIFT_ARCNETPLUS                    = 0x24\n\tIFT_ASYNC                         = 0x54\n\tIFT_ATM                           = 0x25\n\tIFT_ATMDXI                        = 0x69\n\tIFT_ATMFUNI                       = 0x6a\n\tIFT_ATMIMA                        = 0x6b\n\tIFT_ATMLOGICAL                    = 0x50\n\tIFT_ATMRADIO                      = 0xbd\n\tIFT_ATMSUBINTERFACE               = 0x86\n\tIFT_ATMVCIENDPT                   = 0xc2\n\tIFT_ATMVIRTUAL                    = 0x95\n\tIFT_BGPPOLICYACCOUNTING           = 0xa2\n\tIFT_BLUETOOTH                     = 0xf8\n\tIFT_BRIDGE                        = 0xd1\n\tIFT_BSC                           = 0x53\n\tIFT_CARP                          = 0xf7\n\tIFT_CCTEMUL                       = 0x3d\n\tIFT_CEPT                          = 0x13\n\tIFT_CES                           = 0x85\n\tIFT_CHANNEL                       = 0x46\n\tIFT_CNR                           = 0x55\n\tIFT_COFFEE                        = 0x84\n\tIFT_COMPOSITELINK                 = 0x9b\n\tIFT_DCN                           = 0x8d\n\tIFT_DIGITALPOWERLINE              = 0x8a\n\tIFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba\n\tIFT_DLSW                          = 0x4a\n\tIFT_DOCSCABLEDOWNSTREAM           = 0x80\n\tIFT_DOCSCABLEMACLAYER             = 0x7f\n\tIFT_DOCSCABLEUPSTREAM             = 0x81\n\tIFT_DOCSCABLEUPSTREAMCHANNEL      = 0xcd\n\tIFT_DS0                           = 0x51\n\tIFT_DS0BUNDLE                     = 0x52\n\tIFT_DS1FDL                        = 0xaa\n\tIFT_DS3                           = 0x1e\n\tIFT_DTM                           = 0x8c\n\tIFT_DUMMY                         = 0xf1\n\tIFT_DVBASILN                      = 0xac\n\tIFT_DVBASIOUT                     = 0xad\n\tIFT_DVBRCCDOWNSTREAM              = 0x93\n\tIFT_DVBRCCMACLAYER                = 0x92\n\tIFT_DVBRCCUPSTREAM                = 0x94\n\tIFT_ECONET                        = 0xce\n\tIFT_ENC                           = 0xf4\n\tIFT_EON                           = 0x19\n\tIFT_EPLRS                         = 0x57\n\tIFT_ESCON                         = 0x49\n\tIFT_ETHER                         = 0x6\n\tIFT_FAITH                         = 0xf3\n\tIFT_FAST                          = 0x7d\n\tIFT_FASTETHER                     = 0x3e\n\tIFT_FASTETHERFX                   = 0x45\n\tIFT_FDDI                          = 0xf\n\tIFT_FIBRECHANNEL                  = 0x38\n\tIFT_FRAMERELAYINTERCONNECT        = 0x3a\n\tIFT_FRAMERELAYMPI                 = 0x5c\n\tIFT_FRDLCIENDPT                   = 0xc1\n\tIFT_FRELAY                        = 0x20\n\tIFT_FRELAYDCE                     = 0x2c\n\tIFT_FRF16MFRBUNDLE                = 0xa3\n\tIFT_FRFORWARD                     = 0x9e\n\tIFT_G703AT2MB                     = 0x43\n\tIFT_G703AT64K                     = 0x42\n\tIFT_GIF                           = 0xf0\n\tIFT_GIGABITETHERNET               = 0x75\n\tIFT_GR303IDT                      = 0xb2\n\tIFT_GR303RDT                      = 0xb1\n\tIFT_H323GATEKEEPER                = 0xa4\n\tIFT_H323PROXY                     = 0xa5\n\tIFT_HDH1822                       = 0x3\n\tIFT_HDLC                          = 0x76\n\tIFT_HDSL2                         = 0xa8\n\tIFT_HIPERLAN2                     = 0xb7\n\tIFT_HIPPI                         = 0x2f\n\tIFT_HIPPIINTERFACE                = 0x39\n\tIFT_HOSTPAD                       = 0x5a\n\tIFT_HSSI                          = 0x2e\n\tIFT_HY                            = 0xe\n\tIFT_IBM370PARCHAN                 = 0x48\n\tIFT_IDSL                          = 0x9a\n\tIFT_IEEE1394                      = 0x90\n\tIFT_IEEE80211                     = 0x47\n\tIFT_IEEE80212                     = 0x37\n\tIFT_IEEE8023ADLAG                 = 0xa1\n\tIFT_IFGSN                         = 0x91\n\tIFT_IMT                           = 0xbe\n\tIFT_INFINIBAND                    = 0xc7\n\tIFT_INTERLEAVE                    = 0x7c\n\tIFT_IP                            = 0x7e\n\tIFT_IPFORWARD                     = 0x8e\n\tIFT_IPOVERATM                     = 0x72\n\tIFT_IPOVERCDLC                    = 0x6d\n\tIFT_IPOVERCLAW                    = 0x6e\n\tIFT_IPSWITCH                      = 0x4e\n\tIFT_ISDN                          = 0x3f\n\tIFT_ISDNBASIC                     = 0x14\n\tIFT_ISDNPRIMARY                   = 0x15\n\tIFT_ISDNS                         = 0x4b\n\tIFT_ISDNU                         = 0x4c\n\tIFT_ISO88022LLC                   = 0x29\n\tIFT_ISO88023                      = 0x7\n\tIFT_ISO88024                      = 0x8\n\tIFT_ISO88025                      = 0x9\n\tIFT_ISO88025CRFPINT               = 0x62\n\tIFT_ISO88025DTR                   = 0x56\n\tIFT_ISO88025FIBER                 = 0x73\n\tIFT_ISO88026                      = 0xa\n\tIFT_ISUP                          = 0xb3\n\tIFT_L2VLAN                        = 0x87\n\tIFT_L3IPVLAN                      = 0x88\n\tIFT_L3IPXVLAN                     = 0x89\n\tIFT_LAPB                          = 0x10\n\tIFT_LAPD                          = 0x4d\n\tIFT_LAPF                          = 0x77\n\tIFT_LINEGROUP                     = 0xd2\n\tIFT_LOCALTALK                     = 0x2a\n\tIFT_LOOP                          = 0x18\n\tIFT_MEDIAMAILOVERIP               = 0x8b\n\tIFT_MFSIGLINK                     = 0xa7\n\tIFT_MIOX25                        = 0x26\n\tIFT_MODEM                         = 0x30\n\tIFT_MPC                           = 0x71\n\tIFT_MPLS                          = 0xa6\n\tIFT_MPLSTUNNEL                    = 0x96\n\tIFT_MSDSL                         = 0x8f\n\tIFT_MVL                           = 0xbf\n\tIFT_MYRINET                       = 0x63\n\tIFT_NFAS                          = 0xaf\n\tIFT_NSIP                          = 0x1b\n\tIFT_OPTICALCHANNEL                = 0xc3\n\tIFT_OPTICALTRANSPORT              = 0xc4\n\tIFT_OTHER                         = 0x1\n\tIFT_P10                           = 0xc\n\tIFT_P80                           = 0xd\n\tIFT_PARA                          = 0x22\n\tIFT_PFLOG                         = 0xf5\n\tIFT_PFLOW                         = 0xf9\n\tIFT_PFSYNC                        = 0xf6\n\tIFT_PLC                           = 0xae\n\tIFT_PON155                        = 0xcf\n\tIFT_PON622                        = 0xd0\n\tIFT_POS                           = 0xab\n\tIFT_PPP                           = 0x17\n\tIFT_PPPMULTILINKBUNDLE            = 0x6c\n\tIFT_PROPATM                       = 0xc5\n\tIFT_PROPBWAP2MP                   = 0xb8\n\tIFT_PROPCNLS                      = 0x59\n\tIFT_PROPDOCSWIRELESSDOWNSTREAM    = 0xb5\n\tIFT_PROPDOCSWIRELESSMACLAYER      = 0xb4\n\tIFT_PROPDOCSWIRELESSUPSTREAM      = 0xb6\n\tIFT_PROPMUX                       = 0x36\n\tIFT_PROPVIRTUAL                   = 0x35\n\tIFT_PROPWIRELESSP2P               = 0x9d\n\tIFT_PTPSERIAL                     = 0x16\n\tIFT_PVC                           = 0xf2\n\tIFT_Q2931                         = 0xc9\n\tIFT_QLLC                          = 0x44\n\tIFT_RADIOMAC                      = 0xbc\n\tIFT_RADSL                         = 0x5f\n\tIFT_REACHDSL                      = 0xc0\n\tIFT_RFC1483                       = 0x9f\n\tIFT_RS232                         = 0x21\n\tIFT_RSRB                          = 0x4f\n\tIFT_SDLC                          = 0x11\n\tIFT_SDSL                          = 0x60\n\tIFT_SHDSL                         = 0xa9\n\tIFT_SIP                           = 0x1f\n\tIFT_SIPSIG                        = 0xcc\n\tIFT_SIPTG                         = 0xcb\n\tIFT_SLIP                          = 0x1c\n\tIFT_SMDSDXI                       = 0x2b\n\tIFT_SMDSICIP                      = 0x34\n\tIFT_SONET                         = 0x27\n\tIFT_SONETOVERHEADCHANNEL          = 0xb9\n\tIFT_SONETPATH                     = 0x32\n\tIFT_SONETVT                       = 0x33\n\tIFT_SRP                           = 0x97\n\tIFT_SS7SIGLINK                    = 0x9c\n\tIFT_STACKTOSTACK                  = 0x6f\n\tIFT_STARLAN                       = 0xb\n\tIFT_T1                            = 0x12\n\tIFT_TDLC                          = 0x74\n\tIFT_TELINK                        = 0xc8\n\tIFT_TERMPAD                       = 0x5b\n\tIFT_TR008                         = 0xb0\n\tIFT_TRANSPHDLC                    = 0x7b\n\tIFT_TUNNEL                        = 0x83\n\tIFT_ULTRA                         = 0x1d\n\tIFT_USB                           = 0xa0\n\tIFT_V11                           = 0x40\n\tIFT_V35                           = 0x2d\n\tIFT_V36                           = 0x41\n\tIFT_V37                           = 0x78\n\tIFT_VDSL                          = 0x61\n\tIFT_VIRTUALIPADDRESS              = 0x70\n\tIFT_VIRTUALTG                     = 0xca\n\tIFT_VOICEDID                      = 0xd5\n\tIFT_VOICEEM                       = 0x64\n\tIFT_VOICEEMFGD                    = 0xd3\n\tIFT_VOICEENCAP                    = 0x67\n\tIFT_VOICEFGDEANA                  = 0xd4\n\tIFT_VOICEFXO                      = 0x65\n\tIFT_VOICEFXS                      = 0x66\n\tIFT_VOICEOVERATM                  = 0x98\n\tIFT_VOICEOVERCABLE                = 0xc6\n\tIFT_VOICEOVERFRAMERELAY           = 0x99\n\tIFT_VOICEOVERIP                   = 0x68\n\tIFT_X213                          = 0x5d\n\tIFT_X25                           = 0x5\n\tIFT_X25DDN                        = 0x4\n\tIFT_X25HUNTGROUP                  = 0x7a\n\tIFT_X25MLP                        = 0x79\n\tIFT_X25PLE                        = 0x28\n\tIFT_XETHER                        = 0x1a\n\tIGNBRK                            = 0x1\n\tIGNCR                             = 0x80\n\tIGNPAR                            = 0x4\n\tIMAXBEL                           = 0x2000\n\tINLCR                             = 0x40\n\tINPCK                             = 0x10\n\tIN_CLASSA_HOST                    = 0xffffff\n\tIN_CLASSA_MAX                     = 0x80\n\tIN_CLASSA_NET                     = 0xff000000\n\tIN_CLASSA_NSHIFT                  = 0x18\n\tIN_CLASSB_HOST                    = 0xffff\n\tIN_CLASSB_MAX                     = 0x10000\n\tIN_CLASSB_NET                     = 0xffff0000\n\tIN_CLASSB_NSHIFT                  = 0x10\n\tIN_CLASSC_HOST                    = 0xff\n\tIN_CLASSC_NET                     = 0xffffff00\n\tIN_CLASSC_NSHIFT                  = 0x8\n\tIN_CLASSD_HOST                    = 0xfffffff\n\tIN_CLASSD_NET                     = 0xf0000000\n\tIN_CLASSD_NSHIFT                  = 0x1c\n\tIN_LOOPBACKNET                    = 0x7f\n\tIN_RFC3021_HOST                   = 0x1\n\tIN_RFC3021_NET                    = 0xfffffffe\n\tIN_RFC3021_NSHIFT                 = 0x1f\n\tIPPROTO_AH                        = 0x33\n\tIPPROTO_CARP                      = 0x70\n\tIPPROTO_DIVERT                    = 0x102\n\tIPPROTO_DIVERT_INIT               = 0x2\n\tIPPROTO_DIVERT_RESP               = 0x1\n\tIPPROTO_DONE                      = 0x101\n\tIPPROTO_DSTOPTS                   = 0x3c\n\tIPPROTO_EGP                       = 0x8\n\tIPPROTO_ENCAP                     = 0x62\n\tIPPROTO_EON                       = 0x50\n\tIPPROTO_ESP                       = 0x32\n\tIPPROTO_ETHERIP                   = 0x61\n\tIPPROTO_FRAGMENT                  = 0x2c\n\tIPPROTO_GGP                       = 0x3\n\tIPPROTO_GRE                       = 0x2f\n\tIPPROTO_HOPOPTS                   = 0x0\n\tIPPROTO_ICMP                      = 0x1\n\tIPPROTO_ICMPV6                    = 0x3a\n\tIPPROTO_IDP                       = 0x16\n\tIPPROTO_IGMP                      = 0x2\n\tIPPROTO_IP                        = 0x0\n\tIPPROTO_IPCOMP                    = 0x6c\n\tIPPROTO_IPIP                      = 0x4\n\tIPPROTO_IPV4                      = 0x4\n\tIPPROTO_IPV6                      = 0x29\n\tIPPROTO_MAX                       = 0x100\n\tIPPROTO_MAXID                     = 0x103\n\tIPPROTO_MOBILE                    = 0x37\n\tIPPROTO_MPLS                      = 0x89\n\tIPPROTO_NONE                      = 0x3b\n\tIPPROTO_PFSYNC                    = 0xf0\n\tIPPROTO_PIM                       = 0x67\n\tIPPROTO_PUP                       = 0xc\n\tIPPROTO_RAW                       = 0xff\n\tIPPROTO_ROUTING                   = 0x2b\n\tIPPROTO_RSVP                      = 0x2e\n\tIPPROTO_TCP                       = 0x6\n\tIPPROTO_TP                        = 0x1d\n\tIPPROTO_UDP                       = 0x11\n\tIPV6_AUTH_LEVEL                   = 0x35\n\tIPV6_AUTOFLOWLABEL                = 0x3b\n\tIPV6_CHECKSUM                     = 0x1a\n\tIPV6_DEFAULT_MULTICAST_HOPS       = 0x1\n\tIPV6_DEFAULT_MULTICAST_LOOP       = 0x1\n\tIPV6_DEFHLIM                      = 0x40\n\tIPV6_DONTFRAG                     = 0x3e\n\tIPV6_DSTOPTS                      = 0x32\n\tIPV6_ESP_NETWORK_LEVEL            = 0x37\n\tIPV6_ESP_TRANS_LEVEL              = 0x36\n\tIPV6_FAITH                        = 0x1d\n\tIPV6_FLOWINFO_MASK                = 0xffffff0f\n\tIPV6_FLOWLABEL_MASK               = 0xffff0f00\n\tIPV6_FRAGTTL                      = 0x78\n\tIPV6_HLIMDEC                      = 0x1\n\tIPV6_HOPLIMIT                     = 0x2f\n\tIPV6_HOPOPTS                      = 0x31\n\tIPV6_IPCOMP_LEVEL                 = 0x3c\n\tIPV6_JOIN_GROUP                   = 0xc\n\tIPV6_LEAVE_GROUP                  = 0xd\n\tIPV6_MAXHLIM                      = 0xff\n\tIPV6_MAXPACKET                    = 0xffff\n\tIPV6_MMTU                         = 0x500\n\tIPV6_MULTICAST_HOPS               = 0xa\n\tIPV6_MULTICAST_IF                 = 0x9\n\tIPV6_MULTICAST_LOOP               = 0xb\n\tIPV6_NEXTHOP                      = 0x30\n\tIPV6_OPTIONS                      = 0x1\n\tIPV6_PATHMTU                      = 0x2c\n\tIPV6_PIPEX                        = 0x3f\n\tIPV6_PKTINFO                      = 0x2e\n\tIPV6_PORTRANGE                    = 0xe\n\tIPV6_PORTRANGE_DEFAULT            = 0x0\n\tIPV6_PORTRANGE_HIGH               = 0x1\n\tIPV6_PORTRANGE_LOW                = 0x2\n\tIPV6_RECVDSTOPTS                  = 0x28\n\tIPV6_RECVDSTPORT                  = 0x40\n\tIPV6_RECVHOPLIMIT                 = 0x25\n\tIPV6_RECVHOPOPTS                  = 0x27\n\tIPV6_RECVPATHMTU                  = 0x2b\n\tIPV6_RECVPKTINFO                  = 0x24\n\tIPV6_RECVRTHDR                    = 0x26\n\tIPV6_RECVTCLASS                   = 0x39\n\tIPV6_RTABLE                       = 0x1021\n\tIPV6_RTHDR                        = 0x33\n\tIPV6_RTHDRDSTOPTS                 = 0x23\n\tIPV6_RTHDR_LOOSE                  = 0x0\n\tIPV6_RTHDR_STRICT                 = 0x1\n\tIPV6_RTHDR_TYPE_0                 = 0x0\n\tIPV6_SOCKOPT_RESERVED1            = 0x3\n\tIPV6_TCLASS                       = 0x3d\n\tIPV6_UNICAST_HOPS                 = 0x4\n\tIPV6_USE_MIN_MTU                  = 0x2a\n\tIPV6_V6ONLY                       = 0x1b\n\tIPV6_VERSION                      = 0x60\n\tIPV6_VERSION_MASK                 = 0xf0\n\tIP_ADD_MEMBERSHIP                 = 0xc\n\tIP_AUTH_LEVEL                     = 0x14\n\tIP_DEFAULT_MULTICAST_LOOP         = 0x1\n\tIP_DEFAULT_MULTICAST_TTL          = 0x1\n\tIP_DF                             = 0x4000\n\tIP_DIVERTFL                       = 0x1022\n\tIP_DROP_MEMBERSHIP                = 0xd\n\tIP_ESP_NETWORK_LEVEL              = 0x16\n\tIP_ESP_TRANS_LEVEL                = 0x15\n\tIP_HDRINCL                        = 0x2\n\tIP_IPCOMP_LEVEL                   = 0x1d\n\tIP_IPSECFLOWINFO                  = 0x24\n\tIP_IPSEC_LOCAL_AUTH               = 0x1b\n\tIP_IPSEC_LOCAL_CRED               = 0x19\n\tIP_IPSEC_LOCAL_ID                 = 0x17\n\tIP_IPSEC_REMOTE_AUTH              = 0x1c\n\tIP_IPSEC_REMOTE_CRED              = 0x1a\n\tIP_IPSEC_REMOTE_ID                = 0x18\n\tIP_MAXPACKET                      = 0xffff\n\tIP_MAX_MEMBERSHIPS                = 0xfff\n\tIP_MF                             = 0x2000\n\tIP_MINTTL                         = 0x20\n\tIP_MIN_MEMBERSHIPS                = 0xf\n\tIP_MSS                            = 0x240\n\tIP_MULTICAST_IF                   = 0x9\n\tIP_MULTICAST_LOOP                 = 0xb\n\tIP_MULTICAST_TTL                  = 0xa\n\tIP_OFFMASK                        = 0x1fff\n\tIP_OPTIONS                        = 0x1\n\tIP_PIPEX                          = 0x22\n\tIP_PORTRANGE                      = 0x13\n\tIP_PORTRANGE_DEFAULT              = 0x0\n\tIP_PORTRANGE_HIGH                 = 0x1\n\tIP_PORTRANGE_LOW                  = 0x2\n\tIP_RECVDSTADDR                    = 0x7\n\tIP_RECVDSTPORT                    = 0x21\n\tIP_RECVIF                         = 0x1e\n\tIP_RECVOPTS                       = 0x5\n\tIP_RECVRETOPTS                    = 0x6\n\tIP_RECVRTABLE                     = 0x23\n\tIP_RECVTTL                        = 0x1f\n\tIP_RETOPTS                        = 0x8\n\tIP_RF                             = 0x8000\n\tIP_RTABLE                         = 0x1021\n\tIP_TOS                            = 0x3\n\tIP_TTL                            = 0x4\n\tISIG                              = 0x80\n\tISTRIP                            = 0x20\n\tIXANY                             = 0x800\n\tIXOFF                             = 0x400\n\tIXON                              = 0x200\n\tKERN_HOSTNAME                     = 0xa\n\tKERN_OSRELEASE                    = 0x2\n\tKERN_OSTYPE                       = 0x1\n\tKERN_VERSION                      = 0x4\n\tLCNT_OVERLOAD_FLUSH               = 0x6\n\tLOCK_EX                           = 0x2\n\tLOCK_NB                           = 0x4\n\tLOCK_SH                           = 0x1\n\tLOCK_UN                           = 0x8\n\tMADV_DONTNEED                     = 0x4\n\tMADV_FREE                         = 0x6\n\tMADV_NORMAL                       = 0x0\n\tMADV_RANDOM                       = 0x1\n\tMADV_SEQUENTIAL                   = 0x2\n\tMADV_SPACEAVAIL                   = 0x5\n\tMADV_WILLNEED                     = 0x3\n\tMAP_ANON                          = 0x1000\n\tMAP_COPY                          = 0x4\n\tMAP_FILE                          = 0x0\n\tMAP_FIXED                         = 0x10\n\tMAP_FLAGMASK                      = 0x1ff7\n\tMAP_HASSEMAPHORE                  = 0x200\n\tMAP_INHERIT                       = 0x80\n\tMAP_INHERIT_COPY                  = 0x1\n\tMAP_INHERIT_DONATE_COPY           = 0x3\n\tMAP_INHERIT_NONE                  = 0x2\n\tMAP_INHERIT_SHARE                 = 0x0\n\tMAP_NOEXTEND                      = 0x100\n\tMAP_NORESERVE                     = 0x40\n\tMAP_PRIVATE                       = 0x2\n\tMAP_RENAME                        = 0x20\n\tMAP_SHARED                        = 0x1\n\tMAP_TRYFIXED                      = 0x400\n\tMCL_CURRENT                       = 0x1\n\tMCL_FUTURE                        = 0x2\n\tMNT_ASYNC                         = 0x40\n\tMNT_DEFEXPORTED                   = 0x200\n\tMNT_DELEXPORT                     = 0x20000\n\tMNT_DOOMED                        = 0x8000000\n\tMNT_EXPORTANON                    = 0x400\n\tMNT_EXPORTED                      = 0x100\n\tMNT_EXRDONLY                      = 0x80\n\tMNT_FORCE                         = 0x80000\n\tMNT_LAZY                          = 0x3\n\tMNT_LOCAL                         = 0x1000\n\tMNT_NOATIME                       = 0x8000\n\tMNT_NODEV                         = 0x10\n\tMNT_NOEXEC                        = 0x4\n\tMNT_NOSUID                        = 0x8\n\tMNT_NOWAIT                        = 0x2\n\tMNT_QUOTA                         = 0x2000\n\tMNT_RDONLY                        = 0x1\n\tMNT_RELOAD                        = 0x40000\n\tMNT_ROOTFS                        = 0x4000\n\tMNT_SOFTDEP                       = 0x4000000\n\tMNT_SYNCHRONOUS                   = 0x2\n\tMNT_UPDATE                        = 0x10000\n\tMNT_VISFLAGMASK                   = 0x400ffff\n\tMNT_WAIT                          = 0x1\n\tMNT_WANTRDWR                      = 0x2000000\n\tMNT_WXALLOWED                     = 0x800\n\tMSG_BCAST                         = 0x100\n\tMSG_CTRUNC                        = 0x20\n\tMSG_DONTROUTE                     = 0x4\n\tMSG_DONTWAIT                      = 0x80\n\tMSG_EOR                           = 0x8\n\tMSG_MCAST                         = 0x200\n\tMSG_NOSIGNAL                      = 0x400\n\tMSG_OOB                           = 0x1\n\tMSG_PEEK                          = 0x2\n\tMSG_TRUNC                         = 0x10\n\tMSG_WAITALL                       = 0x40\n\tMS_ASYNC                          = 0x1\n\tMS_INVALIDATE                     = 0x4\n\tMS_SYNC                           = 0x2\n\tNAME_MAX                          = 0xff\n\tNET_RT_DUMP                       = 0x1\n\tNET_RT_FLAGS                      = 0x2\n\tNET_RT_IFLIST                     = 0x3\n\tNET_RT_MAXID                      = 0x6\n\tNET_RT_STATS                      = 0x4\n\tNET_RT_TABLE                      = 0x5\n\tNOFLSH                            = 0x80000000\n\tNOTE_ATTRIB                       = 0x8\n\tNOTE_CHILD                        = 0x4\n\tNOTE_DELETE                       = 0x1\n\tNOTE_EOF                          = 0x2\n\tNOTE_EXEC                         = 0x20000000\n\tNOTE_EXIT                         = 0x80000000\n\tNOTE_EXTEND                       = 0x4\n\tNOTE_FORK                         = 0x40000000\n\tNOTE_LINK                         = 0x10\n\tNOTE_LOWAT                        = 0x1\n\tNOTE_PCTRLMASK                    = 0xf0000000\n\tNOTE_PDATAMASK                    = 0xfffff\n\tNOTE_RENAME                       = 0x20\n\tNOTE_REVOKE                       = 0x40\n\tNOTE_TRACK                        = 0x1\n\tNOTE_TRACKERR                     = 0x2\n\tNOTE_TRUNCATE                     = 0x80\n\tNOTE_WRITE                        = 0x2\n\tOCRNL                             = 0x10\n\tONLCR                             = 0x2\n\tONLRET                            = 0x80\n\tONOCR                             = 0x40\n\tONOEOT                            = 0x8\n\tOPOST                             = 0x1\n\tO_ACCMODE                         = 0x3\n\tO_APPEND                          = 0x8\n\tO_ASYNC                           = 0x40\n\tO_CLOEXEC                         = 0x10000\n\tO_CREAT                           = 0x200\n\tO_DIRECTORY                       = 0x20000\n\tO_DSYNC                           = 0x80\n\tO_EXCL                            = 0x800\n\tO_EXLOCK                          = 0x20\n\tO_FSYNC                           = 0x80\n\tO_NDELAY                          = 0x4\n\tO_NOCTTY                          = 0x8000\n\tO_NOFOLLOW                        = 0x100\n\tO_NONBLOCK                        = 0x4\n\tO_RDONLY                          = 0x0\n\tO_RDWR                            = 0x2\n\tO_RSYNC                           = 0x80\n\tO_SHLOCK                          = 0x10\n\tO_SYNC                            = 0x80\n\tO_TRUNC                           = 0x400\n\tO_WRONLY                          = 0x1\n\tPARENB                            = 0x1000\n\tPARMRK                            = 0x8\n\tPARODD                            = 0x2000\n\tPENDIN                            = 0x20000000\n\tPF_FLUSH                          = 0x1\n\tPRIO_PGRP                         = 0x1\n\tPRIO_PROCESS                      = 0x0\n\tPRIO_USER                         = 0x2\n\tPROT_EXEC                         = 0x4\n\tPROT_NONE                         = 0x0\n\tPROT_READ                         = 0x1\n\tPROT_WRITE                        = 0x2\n\tPT_MASK                           = 0x3ff000\n\tRLIMIT_CORE                       = 0x4\n\tRLIMIT_CPU                        = 0x0\n\tRLIMIT_DATA                       = 0x2\n\tRLIMIT_FSIZE                      = 0x1\n\tRLIMIT_NOFILE                     = 0x8\n\tRLIMIT_STACK                      = 0x3\n\tRLIM_INFINITY                     = 0x7fffffffffffffff\n\tRTAX_AUTHOR                       = 0x6\n\tRTAX_BRD                          = 0x7\n\tRTAX_DST                          = 0x0\n\tRTAX_GATEWAY                      = 0x1\n\tRTAX_GENMASK                      = 0x3\n\tRTAX_IFA                          = 0x5\n\tRTAX_IFP                          = 0x4\n\tRTAX_LABEL                        = 0xa\n\tRTAX_MAX                          = 0xb\n\tRTAX_NETMASK                      = 0x2\n\tRTAX_SRC                          = 0x8\n\tRTAX_SRCMASK                      = 0x9\n\tRTA_AUTHOR                        = 0x40\n\tRTA_BRD                           = 0x80\n\tRTA_DST                           = 0x1\n\tRTA_GATEWAY                       = 0x2\n\tRTA_GENMASK                       = 0x8\n\tRTA_IFA                           = 0x20\n\tRTA_IFP                           = 0x10\n\tRTA_LABEL                         = 0x400\n\tRTA_NETMASK                       = 0x4\n\tRTA_SRC                           = 0x100\n\tRTA_SRCMASK                       = 0x200\n\tRTF_ANNOUNCE                      = 0x4000\n\tRTF_BLACKHOLE                     = 0x1000\n\tRTF_CLONED                        = 0x10000\n\tRTF_CLONING                       = 0x100\n\tRTF_DONE                          = 0x40\n\tRTF_DYNAMIC                       = 0x10\n\tRTF_FMASK                         = 0x10f808\n\tRTF_GATEWAY                       = 0x2\n\tRTF_HOST                          = 0x4\n\tRTF_LLINFO                        = 0x400\n\tRTF_MASK                          = 0x80\n\tRTF_MODIFIED                      = 0x20\n\tRTF_MPATH                         = 0x40000\n\tRTF_MPLS                          = 0x100000\n\tRTF_PERMANENT_ARP                 = 0x2000\n\tRTF_PROTO1                        = 0x8000\n\tRTF_PROTO2                        = 0x4000\n\tRTF_PROTO3                        = 0x2000\n\tRTF_REJECT                        = 0x8\n\tRTF_SOURCE                        = 0x20000\n\tRTF_STATIC                        = 0x800\n\tRTF_TUNNEL                        = 0x100000\n\tRTF_UP                            = 0x1\n\tRTF_USETRAILERS                   = 0x8000\n\tRTF_XRESOLVE                      = 0x200\n\tRTM_ADD                           = 0x1\n\tRTM_CHANGE                        = 0x3\n\tRTM_DELADDR                       = 0xd\n\tRTM_DELETE                        = 0x2\n\tRTM_DESYNC                        = 0x10\n\tRTM_GET                           = 0x4\n\tRTM_IFANNOUNCE                    = 0xf\n\tRTM_IFINFO                        = 0xe\n\tRTM_LOCK                          = 0x8\n\tRTM_LOSING                        = 0x5\n\tRTM_MAXSIZE                       = 0x800\n\tRTM_MISS                          = 0x7\n\tRTM_NEWADDR                       = 0xc\n\tRTM_REDIRECT                      = 0x6\n\tRTM_RESOLVE                       = 0xb\n\tRTM_RTTUNIT                       = 0xf4240\n\tRTM_VERSION                       = 0x5\n\tRTV_EXPIRE                        = 0x4\n\tRTV_HOPCOUNT                      = 0x2\n\tRTV_MTU                           = 0x1\n\tRTV_RPIPE                         = 0x8\n\tRTV_RTT                           = 0x40\n\tRTV_RTTVAR                        = 0x80\n\tRTV_SPIPE                         = 0x10\n\tRTV_SSTHRESH                      = 0x20\n\tRT_TABLEID_MAX                    = 0xff\n\tRUSAGE_CHILDREN                   = -0x1\n\tRUSAGE_SELF                       = 0x0\n\tRUSAGE_THREAD                     = 0x1\n\tSCM_RIGHTS                        = 0x1\n\tSCM_TIMESTAMP                     = 0x4\n\tSHUT_RD                           = 0x0\n\tSHUT_RDWR                         = 0x2\n\tSHUT_WR                           = 0x1\n\tSIOCADDMULTI                      = 0x80206931\n\tSIOCAIFADDR                       = 0x8040691a\n\tSIOCAIFGROUP                      = 0x80246987\n\tSIOCALIFADDR                      = 0x8218691c\n\tSIOCATMARK                        = 0x40047307\n\tSIOCBRDGADD                       = 0x8054693c\n\tSIOCBRDGADDS                      = 0x80546941\n\tSIOCBRDGARL                       = 0x806e694d\n\tSIOCBRDGDADDR                     = 0x81286947\n\tSIOCBRDGDEL                       = 0x8054693d\n\tSIOCBRDGDELS                      = 0x80546942\n\tSIOCBRDGFLUSH                     = 0x80546948\n\tSIOCBRDGFRL                       = 0x806e694e\n\tSIOCBRDGGCACHE                    = 0xc0146941\n\tSIOCBRDGGFD                       = 0xc0146952\n\tSIOCBRDGGHT                       = 0xc0146951\n\tSIOCBRDGGIFFLGS                   = 0xc054693e\n\tSIOCBRDGGMA                       = 0xc0146953\n\tSIOCBRDGGPARAM                    = 0xc03c6958\n\tSIOCBRDGGPRI                      = 0xc0146950\n\tSIOCBRDGGRL                       = 0xc028694f\n\tSIOCBRDGGSIFS                     = 0xc054693c\n\tSIOCBRDGGTO                       = 0xc0146946\n\tSIOCBRDGIFS                       = 0xc0546942\n\tSIOCBRDGRTS                       = 0xc0186943\n\tSIOCBRDGSADDR                     = 0xc1286944\n\tSIOCBRDGSCACHE                    = 0x80146940\n\tSIOCBRDGSFD                       = 0x80146952\n\tSIOCBRDGSHT                       = 0x80146951\n\tSIOCBRDGSIFCOST                   = 0x80546955\n\tSIOCBRDGSIFFLGS                   = 0x8054693f\n\tSIOCBRDGSIFPRIO                   = 0x80546954\n\tSIOCBRDGSMA                       = 0x80146953\n\tSIOCBRDGSPRI                      = 0x80146950\n\tSIOCBRDGSPROTO                    = 0x8014695a\n\tSIOCBRDGSTO                       = 0x80146945\n\tSIOCBRDGSTXHC                     = 0x80146959\n\tSIOCDELMULTI                      = 0x80206932\n\tSIOCDIFADDR                       = 0x80206919\n\tSIOCDIFGROUP                      = 0x80246989\n\tSIOCDIFPHYADDR                    = 0x80206949\n\tSIOCDLIFADDR                      = 0x8218691e\n\tSIOCGETKALIVE                     = 0xc01869a4\n\tSIOCGETLABEL                      = 0x8020699a\n\tSIOCGETPFLOW                      = 0xc02069fe\n\tSIOCGETPFSYNC                     = 0xc02069f8\n\tSIOCGETSGCNT                      = 0xc0147534\n\tSIOCGETVIFCNT                     = 0xc0147533\n\tSIOCGETVLAN                       = 0xc0206990\n\tSIOCGHIWAT                        = 0x40047301\n\tSIOCGIFADDR                       = 0xc0206921\n\tSIOCGIFASYNCMAP                   = 0xc020697c\n\tSIOCGIFBRDADDR                    = 0xc0206923\n\tSIOCGIFCONF                       = 0xc0086924\n\tSIOCGIFDATA                       = 0xc020691b\n\tSIOCGIFDESCR                      = 0xc0206981\n\tSIOCGIFDSTADDR                    = 0xc0206922\n\tSIOCGIFFLAGS                      = 0xc0206911\n\tSIOCGIFGATTR                      = 0xc024698b\n\tSIOCGIFGENERIC                    = 0xc020693a\n\tSIOCGIFGMEMB                      = 0xc024698a\n\tSIOCGIFGROUP                      = 0xc0246988\n\tSIOCGIFHARDMTU                    = 0xc02069a5\n\tSIOCGIFMEDIA                      = 0xc0286936\n\tSIOCGIFMETRIC                     = 0xc0206917\n\tSIOCGIFMTU                        = 0xc020697e\n\tSIOCGIFNETMASK                    = 0xc0206925\n\tSIOCGIFPDSTADDR                   = 0xc0206948\n\tSIOCGIFPRIORITY                   = 0xc020699c\n\tSIOCGIFPSRCADDR                   = 0xc0206947\n\tSIOCGIFRDOMAIN                    = 0xc02069a0\n\tSIOCGIFRTLABEL                    = 0xc0206983\n\tSIOCGIFTIMESLOT                   = 0xc0206986\n\tSIOCGIFXFLAGS                     = 0xc020699e\n\tSIOCGLIFADDR                      = 0xc218691d\n\tSIOCGLIFPHYADDR                   = 0xc218694b\n\tSIOCGLIFPHYRTABLE                 = 0xc02069a2\n\tSIOCGLIFPHYTTL                    = 0xc02069a9\n\tSIOCGLOWAT                        = 0x40047303\n\tSIOCGPGRP                         = 0x40047309\n\tSIOCGSPPPPARAMS                   = 0xc0206994\n\tSIOCGVH                           = 0xc02069f6\n\tSIOCGVNETID                       = 0xc02069a7\n\tSIOCIFCREATE                      = 0x8020697a\n\tSIOCIFDESTROY                     = 0x80206979\n\tSIOCIFGCLONERS                    = 0xc00c6978\n\tSIOCSETKALIVE                     = 0x801869a3\n\tSIOCSETLABEL                      = 0x80206999\n\tSIOCSETPFLOW                      = 0x802069fd\n\tSIOCSETPFSYNC                     = 0x802069f7\n\tSIOCSETVLAN                       = 0x8020698f\n\tSIOCSHIWAT                        = 0x80047300\n\tSIOCSIFADDR                       = 0x8020690c\n\tSIOCSIFASYNCMAP                   = 0x8020697d\n\tSIOCSIFBRDADDR                    = 0x80206913\n\tSIOCSIFDESCR                      = 0x80206980\n\tSIOCSIFDSTADDR                    = 0x8020690e\n\tSIOCSIFFLAGS                      = 0x80206910\n\tSIOCSIFGATTR                      = 0x8024698c\n\tSIOCSIFGENERIC                    = 0x80206939\n\tSIOCSIFLLADDR                     = 0x8020691f\n\tSIOCSIFMEDIA                      = 0xc0206935\n\tSIOCSIFMETRIC                     = 0x80206918\n\tSIOCSIFMTU                        = 0x8020697f\n\tSIOCSIFNETMASK                    = 0x80206916\n\tSIOCSIFPHYADDR                    = 0x80406946\n\tSIOCSIFPRIORITY                   = 0x8020699b\n\tSIOCSIFRDOMAIN                    = 0x8020699f\n\tSIOCSIFRTLABEL                    = 0x80206982\n\tSIOCSIFTIMESLOT                   = 0x80206985\n\tSIOCSIFXFLAGS                     = 0x8020699d\n\tSIOCSLIFPHYADDR                   = 0x8218694a\n\tSIOCSLIFPHYRTABLE                 = 0x802069a1\n\tSIOCSLIFPHYTTL                    = 0x802069a8\n\tSIOCSLOWAT                        = 0x80047302\n\tSIOCSPGRP                         = 0x80047308\n\tSIOCSSPPPPARAMS                   = 0x80206993\n\tSIOCSVH                           = 0xc02069f5\n\tSIOCSVNETID                       = 0x802069a6\n\tSOCK_DGRAM                        = 0x2\n\tSOCK_RAW                          = 0x3\n\tSOCK_RDM                          = 0x4\n\tSOCK_SEQPACKET                    = 0x5\n\tSOCK_STREAM                       = 0x1\n\tSOL_SOCKET                        = 0xffff\n\tSOMAXCONN                         = 0x80\n\tSO_ACCEPTCONN                     = 0x2\n\tSO_BINDANY                        = 0x1000\n\tSO_BROADCAST                      = 0x20\n\tSO_DEBUG                          = 0x1\n\tSO_DONTROUTE                      = 0x10\n\tSO_ERROR                          = 0x1007\n\tSO_KEEPALIVE                      = 0x8\n\tSO_LINGER                         = 0x80\n\tSO_NETPROC                        = 0x1020\n\tSO_OOBINLINE                      = 0x100\n\tSO_PEERCRED                       = 0x1022\n\tSO_RCVBUF                         = 0x1002\n\tSO_RCVLOWAT                       = 0x1004\n\tSO_RCVTIMEO                       = 0x1006\n\tSO_REUSEADDR                      = 0x4\n\tSO_REUSEPORT                      = 0x200\n\tSO_RTABLE                         = 0x1021\n\tSO_SNDBUF                         = 0x1001\n\tSO_SNDLOWAT                       = 0x1003\n\tSO_SNDTIMEO                       = 0x1005\n\tSO_SPLICE                         = 0x1023\n\tSO_TIMESTAMP                      = 0x800\n\tSO_TYPE                           = 0x1008\n\tSO_USELOOPBACK                    = 0x40\n\tS_BLKSIZE                         = 0x200\n\tS_IEXEC                           = 0x40\n\tS_IFBLK                           = 0x6000\n\tS_IFCHR                           = 0x2000\n\tS_IFDIR                           = 0x4000\n\tS_IFIFO                           = 0x1000\n\tS_IFLNK                           = 0xa000\n\tS_IFMT                            = 0xf000\n\tS_IFREG                           = 0x8000\n\tS_IFSOCK                          = 0xc000\n\tS_IREAD                           = 0x100\n\tS_IRGRP                           = 0x20\n\tS_IROTH                           = 0x4\n\tS_IRUSR                           = 0x100\n\tS_IRWXG                           = 0x38\n\tS_IRWXO                           = 0x7\n\tS_IRWXU                           = 0x1c0\n\tS_ISGID                           = 0x400\n\tS_ISTXT                           = 0x200\n\tS_ISUID                           = 0x800\n\tS_ISVTX                           = 0x200\n\tS_IWGRP                           = 0x10\n\tS_IWOTH                           = 0x2\n\tS_IWRITE                          = 0x80\n\tS_IWUSR                           = 0x80\n\tS_IXGRP                           = 0x8\n\tS_IXOTH                           = 0x1\n\tS_IXUSR                           = 0x40\n\tTCIFLUSH                          = 0x1\n\tTCIOFLUSH                         = 0x3\n\tTCOFLUSH                          = 0x2\n\tTCP_MAXBURST                      = 0x4\n\tTCP_MAXSEG                        = 0x2\n\tTCP_MAXWIN                        = 0xffff\n\tTCP_MAX_SACK                      = 0x3\n\tTCP_MAX_WINSHIFT                  = 0xe\n\tTCP_MD5SIG                        = 0x4\n\tTCP_MSS                           = 0x200\n\tTCP_NODELAY                       = 0x1\n\tTCP_NOPUSH                        = 0x10\n\tTCP_NSTATES                       = 0xb\n\tTCP_SACK_ENABLE                   = 0x8\n\tTCSAFLUSH                         = 0x2\n\tTIOCCBRK                          = 0x2000747a\n\tTIOCCDTR                          = 0x20007478\n\tTIOCCONS                          = 0x80047462\n\tTIOCDRAIN                         = 0x2000745e\n\tTIOCEXCL                          = 0x2000740d\n\tTIOCEXT                           = 0x80047460\n\tTIOCFLAG_CLOCAL                   = 0x2\n\tTIOCFLAG_CRTSCTS                  = 0x4\n\tTIOCFLAG_MDMBUF                   = 0x8\n\tTIOCFLAG_PPS                      = 0x10\n\tTIOCFLAG_SOFTCAR                  = 0x1\n\tTIOCFLUSH                         = 0x80047410\n\tTIOCGETA                          = 0x402c7413\n\tTIOCGETD                          = 0x4004741a\n\tTIOCGFLAGS                        = 0x4004745d\n\tTIOCGPGRP                         = 0x40047477\n\tTIOCGSID                          = 0x40047463\n\tTIOCGTSTAMP                       = 0x400c745b\n\tTIOCGWINSZ                        = 0x40087468\n\tTIOCMBIC                          = 0x8004746b\n\tTIOCMBIS                          = 0x8004746c\n\tTIOCMGET                          = 0x4004746a\n\tTIOCMODG                          = 0x4004746a\n\tTIOCMODS                          = 0x8004746d\n\tTIOCMSET                          = 0x8004746d\n\tTIOCM_CAR                         = 0x40\n\tTIOCM_CD                          = 0x40\n\tTIOCM_CTS                         = 0x20\n\tTIOCM_DSR                         = 0x100\n\tTIOCM_DTR                         = 0x2\n\tTIOCM_LE                          = 0x1\n\tTIOCM_RI                          = 0x80\n\tTIOCM_RNG                         = 0x80\n\tTIOCM_RTS                         = 0x4\n\tTIOCM_SR                          = 0x10\n\tTIOCM_ST                          = 0x8\n\tTIOCNOTTY                         = 0x20007471\n\tTIOCNXCL                          = 0x2000740e\n\tTIOCOUTQ                          = 0x40047473\n\tTIOCPKT                           = 0x80047470\n\tTIOCPKT_DATA                      = 0x0\n\tTIOCPKT_DOSTOP                    = 0x20\n\tTIOCPKT_FLUSHREAD                 = 0x1\n\tTIOCPKT_FLUSHWRITE                = 0x2\n\tTIOCPKT_IOCTL                     = 0x40\n\tTIOCPKT_NOSTOP                    = 0x10\n\tTIOCPKT_START                     = 0x8\n\tTIOCPKT_STOP                      = 0x4\n\tTIOCREMOTE                        = 0x80047469\n\tTIOCSBRK                          = 0x2000747b\n\tTIOCSCTTY                         = 0x20007461\n\tTIOCSDTR                          = 0x20007479\n\tTIOCSETA                          = 0x802c7414\n\tTIOCSETAF                         = 0x802c7416\n\tTIOCSETAW                         = 0x802c7415\n\tTIOCSETD                          = 0x8004741b\n\tTIOCSFLAGS                        = 0x8004745c\n\tTIOCSIG                           = 0x8004745f\n\tTIOCSPGRP                         = 0x80047476\n\tTIOCSTART                         = 0x2000746e\n\tTIOCSTAT                          = 0x80047465\n\tTIOCSTI                           = 0x80017472\n\tTIOCSTOP                          = 0x2000746f\n\tTIOCSTSTAMP                       = 0x8008745a\n\tTIOCSWINSZ                        = 0x80087467\n\tTIOCUCNTL                         = 0x80047466\n\tTOSTOP                            = 0x400000\n\tVDISCARD                          = 0xf\n\tVDSUSP                            = 0xb\n\tVEOF                              = 0x0\n\tVEOL                              = 0x1\n\tVEOL2                             = 0x2\n\tVERASE                            = 0x3\n\tVINTR                             = 0x8\n\tVKILL                             = 0x5\n\tVLNEXT                            = 0xe\n\tVMIN                              = 0x10\n\tVQUIT                             = 0x9\n\tVREPRINT                          = 0x6\n\tVSTART                            = 0xc\n\tVSTATUS                           = 0x12\n\tVSTOP                             = 0xd\n\tVSUSP                             = 0xa\n\tVTIME                             = 0x11\n\tVWERASE                           = 0x4\n\tWALTSIG                           = 0x4\n\tWCONTINUED                        = 0x8\n\tWCOREFLAG                         = 0x80\n\tWNOHANG                           = 0x1\n\tWSTOPPED                          = 0x7f\n\tWUNTRACED                         = 0x2\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x30)\n\tEADDRNOTAVAIL   = syscall.Errno(0x31)\n\tEAFNOSUPPORT    = syscall.Errno(0x2f)\n\tEAGAIN          = syscall.Errno(0x23)\n\tEALREADY        = syscall.Errno(0x25)\n\tEAUTH           = syscall.Errno(0x50)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADRPC         = syscall.Errno(0x48)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x58)\n\tECHILD          = syscall.Errno(0xa)\n\tECONNABORTED    = syscall.Errno(0x35)\n\tECONNREFUSED    = syscall.Errno(0x3d)\n\tECONNRESET      = syscall.Errno(0x36)\n\tEDEADLK         = syscall.Errno(0xb)\n\tEDESTADDRREQ    = syscall.Errno(0x27)\n\tEDOM            = syscall.Errno(0x21)\n\tEDQUOT          = syscall.Errno(0x45)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFTYPE          = syscall.Errno(0x4f)\n\tEHOSTDOWN       = syscall.Errno(0x40)\n\tEHOSTUNREACH    = syscall.Errno(0x41)\n\tEIDRM           = syscall.Errno(0x59)\n\tEILSEQ          = syscall.Errno(0x54)\n\tEINPROGRESS     = syscall.Errno(0x24)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEIPSEC          = syscall.Errno(0x52)\n\tEISCONN         = syscall.Errno(0x38)\n\tEISDIR          = syscall.Errno(0x15)\n\tELAST           = syscall.Errno(0x5b)\n\tELOOP           = syscall.Errno(0x3e)\n\tEMEDIUMTYPE     = syscall.Errno(0x56)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x28)\n\tENAMETOOLONG    = syscall.Errno(0x3f)\n\tENEEDAUTH       = syscall.Errno(0x51)\n\tENETDOWN        = syscall.Errno(0x32)\n\tENETRESET       = syscall.Errno(0x34)\n\tENETUNREACH     = syscall.Errno(0x33)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x53)\n\tENOBUFS         = syscall.Errno(0x37)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x4d)\n\tENOMEDIUM       = syscall.Errno(0x55)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x5a)\n\tENOPROTOOPT     = syscall.Errno(0x2a)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSYS          = syscall.Errno(0x4e)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x39)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x42)\n\tENOTSOCK        = syscall.Errno(0x26)\n\tENOTSUP         = syscall.Errno(0x5b)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x2d)\n\tEOVERFLOW       = syscall.Errno(0x57)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x2e)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x43)\n\tEPROCUNAVAIL    = syscall.Errno(0x4c)\n\tEPROGMISMATCH   = syscall.Errno(0x4b)\n\tEPROGUNAVAIL    = syscall.Errno(0x4a)\n\tEPROTONOSUPPORT = syscall.Errno(0x2b)\n\tEPROTOTYPE      = syscall.Errno(0x29)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x47)\n\tEROFS           = syscall.Errno(0x1e)\n\tERPCMISMATCH    = syscall.Errno(0x49)\n\tESHUTDOWN       = syscall.Errno(0x3a)\n\tESOCKTNOSUPPORT = syscall.Errno(0x2c)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x46)\n\tETIMEDOUT       = syscall.Errno(0x3c)\n\tETOOMANYREFS    = syscall.Errno(0x3b)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUSERS          = syscall.Errno(0x44)\n\tEWOULDBLOCK     = syscall.Errno(0x23)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x14)\n\tSIGCONT   = syscall.Signal(0x13)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINFO   = syscall.Signal(0x1d)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x17)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTOP   = syscall.Signal(0x11)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTHR    = syscall.Signal(0x20)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x12)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x10)\n\tSIGUSR1   = syscall.Signal(0x1e)\n\tSIGUSR2   = syscall.Signal(0x1f)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"device not configured\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"operation not supported by device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large\"},\n\t{35, \"EWOULDBLOCK\", \"resource temporarily unavailable\"},\n\t{36, \"EINPROGRESS\", \"operation now in progress\"},\n\t{37, \"EALREADY\", \"operation already in progress\"},\n\t{38, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{39, \"EDESTADDRREQ\", \"destination address required\"},\n\t{40, \"EMSGSIZE\", \"message too long\"},\n\t{41, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{42, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{43, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{44, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{45, \"EOPNOTSUPP\", \"operation not supported\"},\n\t{46, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{47, \"EAFNOSUPPORT\", \"address family not supported by protocol family\"},\n\t{48, \"EADDRINUSE\", \"address already in use\"},\n\t{49, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{50, \"ENETDOWN\", \"network is down\"},\n\t{51, \"ENETUNREACH\", \"network is unreachable\"},\n\t{52, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{53, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{54, \"ECONNRESET\", \"connection reset by peer\"},\n\t{55, \"ENOBUFS\", \"no buffer space available\"},\n\t{56, \"EISCONN\", \"socket is already connected\"},\n\t{57, \"ENOTCONN\", \"socket is not connected\"},\n\t{58, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{59, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{60, \"ETIMEDOUT\", \"operation timed out\"},\n\t{61, \"ECONNREFUSED\", \"connection refused\"},\n\t{62, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{63, \"ENAMETOOLONG\", \"file name too long\"},\n\t{64, \"EHOSTDOWN\", \"host is down\"},\n\t{65, \"EHOSTUNREACH\", \"no route to host\"},\n\t{66, \"ENOTEMPTY\", \"directory not empty\"},\n\t{67, \"EPROCLIM\", \"too many processes\"},\n\t{68, \"EUSERS\", \"too many users\"},\n\t{69, \"EDQUOT\", \"disk quota exceeded\"},\n\t{70, \"ESTALE\", \"stale NFS file handle\"},\n\t{71, \"EREMOTE\", \"too many levels of remote in path\"},\n\t{72, \"EBADRPC\", \"RPC struct is bad\"},\n\t{73, \"ERPCMISMATCH\", \"RPC version wrong\"},\n\t{74, \"EPROGUNAVAIL\", \"RPC program not available\"},\n\t{75, \"EPROGMISMATCH\", \"program version wrong\"},\n\t{76, \"EPROCUNAVAIL\", \"bad procedure for program\"},\n\t{77, \"ENOLCK\", \"no locks available\"},\n\t{78, \"ENOSYS\", \"function not implemented\"},\n\t{79, \"EFTYPE\", \"inappropriate file type or format\"},\n\t{80, \"EAUTH\", \"authentication error\"},\n\t{81, \"ENEEDAUTH\", \"need authenticator\"},\n\t{82, \"EIPSEC\", \"IPsec processing failure\"},\n\t{83, \"ENOATTR\", \"attribute not found\"},\n\t{84, \"EILSEQ\", \"illegal byte sequence\"},\n\t{85, \"ENOMEDIUM\", \"no medium found\"},\n\t{86, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{87, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n\t{88, \"ECANCELED\", \"operation canceled\"},\n\t{89, \"EIDRM\", \"identifier removed\"},\n\t{90, \"ENOMSG\", \"no message of desired type\"},\n\t{91, \"ELAST\", \"not supported\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGABRT\", \"abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"suspended (signal)\"},\n\t{18, \"SIGTSTP\", \"suspended\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGINFO\", \"information request\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n\t{32, \"SIGTHR\", \"thread AST\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go",
    "content": "// mkerrors.sh -m64\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build amd64,openbsd\n\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs -- -m64 _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                      = 0x10\n\tAF_BLUETOOTH                      = 0x20\n\tAF_CCITT                          = 0xa\n\tAF_CHAOS                          = 0x5\n\tAF_CNT                            = 0x15\n\tAF_COIP                           = 0x14\n\tAF_DATAKIT                        = 0x9\n\tAF_DECnet                         = 0xc\n\tAF_DLI                            = 0xd\n\tAF_E164                           = 0x1a\n\tAF_ECMA                           = 0x8\n\tAF_ENCAP                          = 0x1c\n\tAF_HYLINK                         = 0xf\n\tAF_IMPLINK                        = 0x3\n\tAF_INET                           = 0x2\n\tAF_INET6                          = 0x18\n\tAF_IPX                            = 0x17\n\tAF_ISDN                           = 0x1a\n\tAF_ISO                            = 0x7\n\tAF_KEY                            = 0x1e\n\tAF_LAT                            = 0xe\n\tAF_LINK                           = 0x12\n\tAF_LOCAL                          = 0x1\n\tAF_MAX                            = 0x24\n\tAF_MPLS                           = 0x21\n\tAF_NATM                           = 0x1b\n\tAF_NS                             = 0x6\n\tAF_OSI                            = 0x7\n\tAF_PUP                            = 0x4\n\tAF_ROUTE                          = 0x11\n\tAF_SIP                            = 0x1d\n\tAF_SNA                            = 0xb\n\tAF_UNIX                           = 0x1\n\tAF_UNSPEC                         = 0x0\n\tALTWERASE                         = 0x200\n\tARPHRD_ETHER                      = 0x1\n\tARPHRD_FRELAY                     = 0xf\n\tARPHRD_IEEE1394                   = 0x18\n\tARPHRD_IEEE802                    = 0x6\n\tB0                                = 0x0\n\tB110                              = 0x6e\n\tB115200                           = 0x1c200\n\tB1200                             = 0x4b0\n\tB134                              = 0x86\n\tB14400                            = 0x3840\n\tB150                              = 0x96\n\tB1800                             = 0x708\n\tB19200                            = 0x4b00\n\tB200                              = 0xc8\n\tB230400                           = 0x38400\n\tB2400                             = 0x960\n\tB28800                            = 0x7080\n\tB300                              = 0x12c\n\tB38400                            = 0x9600\n\tB4800                             = 0x12c0\n\tB50                               = 0x32\n\tB57600                            = 0xe100\n\tB600                              = 0x258\n\tB7200                             = 0x1c20\n\tB75                               = 0x4b\n\tB76800                            = 0x12c00\n\tB9600                             = 0x2580\n\tBIOCFLUSH                         = 0x20004268\n\tBIOCGBLEN                         = 0x40044266\n\tBIOCGDIRFILT                      = 0x4004427c\n\tBIOCGDLT                          = 0x4004426a\n\tBIOCGDLTLIST                      = 0xc010427b\n\tBIOCGETIF                         = 0x4020426b\n\tBIOCGFILDROP                      = 0x40044278\n\tBIOCGHDRCMPLT                     = 0x40044274\n\tBIOCGRSIG                         = 0x40044273\n\tBIOCGRTIMEOUT                     = 0x4010426e\n\tBIOCGSTATS                        = 0x4008426f\n\tBIOCIMMEDIATE                     = 0x80044270\n\tBIOCLOCK                          = 0x20004276\n\tBIOCPROMISC                       = 0x20004269\n\tBIOCSBLEN                         = 0xc0044266\n\tBIOCSDIRFILT                      = 0x8004427d\n\tBIOCSDLT                          = 0x8004427a\n\tBIOCSETF                          = 0x80104267\n\tBIOCSETIF                         = 0x8020426c\n\tBIOCSETWF                         = 0x80104277\n\tBIOCSFILDROP                      = 0x80044279\n\tBIOCSHDRCMPLT                     = 0x80044275\n\tBIOCSRSIG                         = 0x80044272\n\tBIOCSRTIMEOUT                     = 0x8010426d\n\tBIOCVERSION                       = 0x40044271\n\tBPF_A                             = 0x10\n\tBPF_ABS                           = 0x20\n\tBPF_ADD                           = 0x0\n\tBPF_ALIGNMENT                     = 0x4\n\tBPF_ALU                           = 0x4\n\tBPF_AND                           = 0x50\n\tBPF_B                             = 0x10\n\tBPF_DIRECTION_IN                  = 0x1\n\tBPF_DIRECTION_OUT                 = 0x2\n\tBPF_DIV                           = 0x30\n\tBPF_H                             = 0x8\n\tBPF_IMM                           = 0x0\n\tBPF_IND                           = 0x40\n\tBPF_JA                            = 0x0\n\tBPF_JEQ                           = 0x10\n\tBPF_JGE                           = 0x30\n\tBPF_JGT                           = 0x20\n\tBPF_JMP                           = 0x5\n\tBPF_JSET                          = 0x40\n\tBPF_K                             = 0x0\n\tBPF_LD                            = 0x0\n\tBPF_LDX                           = 0x1\n\tBPF_LEN                           = 0x80\n\tBPF_LSH                           = 0x60\n\tBPF_MAJOR_VERSION                 = 0x1\n\tBPF_MAXBUFSIZE                    = 0x200000\n\tBPF_MAXINSNS                      = 0x200\n\tBPF_MEM                           = 0x60\n\tBPF_MEMWORDS                      = 0x10\n\tBPF_MINBUFSIZE                    = 0x20\n\tBPF_MINOR_VERSION                 = 0x1\n\tBPF_MISC                          = 0x7\n\tBPF_MSH                           = 0xa0\n\tBPF_MUL                           = 0x20\n\tBPF_NEG                           = 0x80\n\tBPF_OR                            = 0x40\n\tBPF_RELEASE                       = 0x30bb6\n\tBPF_RET                           = 0x6\n\tBPF_RSH                           = 0x70\n\tBPF_ST                            = 0x2\n\tBPF_STX                           = 0x3\n\tBPF_SUB                           = 0x10\n\tBPF_TAX                           = 0x0\n\tBPF_TXA                           = 0x80\n\tBPF_W                             = 0x0\n\tBPF_X                             = 0x8\n\tBRKINT                            = 0x2\n\tCFLUSH                            = 0xf\n\tCLOCAL                            = 0x8000\n\tCLOCK_BOOTTIME                    = 0x6\n\tCLOCK_MONOTONIC                   = 0x3\n\tCLOCK_PROCESS_CPUTIME_ID          = 0x2\n\tCLOCK_REALTIME                    = 0x0\n\tCLOCK_THREAD_CPUTIME_ID           = 0x4\n\tCLOCK_UPTIME                      = 0x5\n\tCREAD                             = 0x800\n\tCRTSCTS                           = 0x10000\n\tCS5                               = 0x0\n\tCS6                               = 0x100\n\tCS7                               = 0x200\n\tCS8                               = 0x300\n\tCSIZE                             = 0x300\n\tCSTART                            = 0x11\n\tCSTATUS                           = 0xff\n\tCSTOP                             = 0x13\n\tCSTOPB                            = 0x400\n\tCSUSP                             = 0x1a\n\tCTL_HW                            = 0x6\n\tCTL_KERN                          = 0x1\n\tCTL_MAXNAME                       = 0xc\n\tCTL_NET                           = 0x4\n\tDIOCOSFPFLUSH                     = 0x2000444e\n\tDLT_ARCNET                        = 0x7\n\tDLT_ATM_RFC1483                   = 0xb\n\tDLT_AX25                          = 0x3\n\tDLT_CHAOS                         = 0x5\n\tDLT_C_HDLC                        = 0x68\n\tDLT_EN10MB                        = 0x1\n\tDLT_EN3MB                         = 0x2\n\tDLT_ENC                           = 0xd\n\tDLT_FDDI                          = 0xa\n\tDLT_IEEE802                       = 0x6\n\tDLT_IEEE802_11                    = 0x69\n\tDLT_IEEE802_11_RADIO              = 0x7f\n\tDLT_LOOP                          = 0xc\n\tDLT_MPLS                          = 0xdb\n\tDLT_NULL                          = 0x0\n\tDLT_OPENFLOW                      = 0x10b\n\tDLT_PFLOG                         = 0x75\n\tDLT_PFSYNC                        = 0x12\n\tDLT_PPP                           = 0x9\n\tDLT_PPP_BSDOS                     = 0x10\n\tDLT_PPP_ETHER                     = 0x33\n\tDLT_PPP_SERIAL                    = 0x32\n\tDLT_PRONET                        = 0x4\n\tDLT_RAW                           = 0xe\n\tDLT_SLIP                          = 0x8\n\tDLT_SLIP_BSDOS                    = 0xf\n\tDLT_USBPCAP                       = 0xf9\n\tDLT_USER0                         = 0x93\n\tDLT_USER1                         = 0x94\n\tDLT_USER10                        = 0x9d\n\tDLT_USER11                        = 0x9e\n\tDLT_USER12                        = 0x9f\n\tDLT_USER13                        = 0xa0\n\tDLT_USER14                        = 0xa1\n\tDLT_USER15                        = 0xa2\n\tDLT_USER2                         = 0x95\n\tDLT_USER3                         = 0x96\n\tDLT_USER4                         = 0x97\n\tDLT_USER5                         = 0x98\n\tDLT_USER6                         = 0x99\n\tDLT_USER7                         = 0x9a\n\tDLT_USER8                         = 0x9b\n\tDLT_USER9                         = 0x9c\n\tDT_BLK                            = 0x6\n\tDT_CHR                            = 0x2\n\tDT_DIR                            = 0x4\n\tDT_FIFO                           = 0x1\n\tDT_LNK                            = 0xa\n\tDT_REG                            = 0x8\n\tDT_SOCK                           = 0xc\n\tDT_UNKNOWN                        = 0x0\n\tECHO                              = 0x8\n\tECHOCTL                           = 0x40\n\tECHOE                             = 0x2\n\tECHOK                             = 0x4\n\tECHOKE                            = 0x1\n\tECHONL                            = 0x10\n\tECHOPRT                           = 0x20\n\tEMT_TAGOVF                        = 0x1\n\tEMUL_ENABLED                      = 0x1\n\tEMUL_NATIVE                       = 0x2\n\tENDRUNDISC                        = 0x9\n\tETHERMIN                          = 0x2e\n\tETHERMTU                          = 0x5dc\n\tETHERTYPE_8023                    = 0x4\n\tETHERTYPE_AARP                    = 0x80f3\n\tETHERTYPE_ACCTON                  = 0x8390\n\tETHERTYPE_AEONIC                  = 0x8036\n\tETHERTYPE_ALPHA                   = 0x814a\n\tETHERTYPE_AMBER                   = 0x6008\n\tETHERTYPE_AMOEBA                  = 0x8145\n\tETHERTYPE_AOE                     = 0x88a2\n\tETHERTYPE_APOLLO                  = 0x80f7\n\tETHERTYPE_APOLLODOMAIN            = 0x8019\n\tETHERTYPE_APPLETALK               = 0x809b\n\tETHERTYPE_APPLITEK                = 0x80c7\n\tETHERTYPE_ARGONAUT                = 0x803a\n\tETHERTYPE_ARP                     = 0x806\n\tETHERTYPE_AT                      = 0x809b\n\tETHERTYPE_ATALK                   = 0x809b\n\tETHERTYPE_ATOMIC                  = 0x86df\n\tETHERTYPE_ATT                     = 0x8069\n\tETHERTYPE_ATTSTANFORD             = 0x8008\n\tETHERTYPE_AUTOPHON                = 0x806a\n\tETHERTYPE_AXIS                    = 0x8856\n\tETHERTYPE_BCLOOP                  = 0x9003\n\tETHERTYPE_BOFL                    = 0x8102\n\tETHERTYPE_CABLETRON               = 0x7034\n\tETHERTYPE_CHAOS                   = 0x804\n\tETHERTYPE_COMDESIGN               = 0x806c\n\tETHERTYPE_COMPUGRAPHIC            = 0x806d\n\tETHERTYPE_COUNTERPOINT            = 0x8062\n\tETHERTYPE_CRONUS                  = 0x8004\n\tETHERTYPE_CRONUSVLN               = 0x8003\n\tETHERTYPE_DCA                     = 0x1234\n\tETHERTYPE_DDE                     = 0x807b\n\tETHERTYPE_DEBNI                   = 0xaaaa\n\tETHERTYPE_DECAM                   = 0x8048\n\tETHERTYPE_DECCUST                 = 0x6006\n\tETHERTYPE_DECDIAG                 = 0x6005\n\tETHERTYPE_DECDNS                  = 0x803c\n\tETHERTYPE_DECDTS                  = 0x803e\n\tETHERTYPE_DECEXPER                = 0x6000\n\tETHERTYPE_DECLAST                 = 0x8041\n\tETHERTYPE_DECLTM                  = 0x803f\n\tETHERTYPE_DECMUMPS                = 0x6009\n\tETHERTYPE_DECNETBIOS              = 0x8040\n\tETHERTYPE_DELTACON                = 0x86de\n\tETHERTYPE_DIDDLE                  = 0x4321\n\tETHERTYPE_DLOG1                   = 0x660\n\tETHERTYPE_DLOG2                   = 0x661\n\tETHERTYPE_DN                      = 0x6003\n\tETHERTYPE_DOGFIGHT                = 0x1989\n\tETHERTYPE_DSMD                    = 0x8039\n\tETHERTYPE_ECMA                    = 0x803\n\tETHERTYPE_ENCRYPT                 = 0x803d\n\tETHERTYPE_ES                      = 0x805d\n\tETHERTYPE_EXCELAN                 = 0x8010\n\tETHERTYPE_EXPERDATA               = 0x8049\n\tETHERTYPE_FLIP                    = 0x8146\n\tETHERTYPE_FLOWCONTROL             = 0x8808\n\tETHERTYPE_FRARP                   = 0x808\n\tETHERTYPE_GENDYN                  = 0x8068\n\tETHERTYPE_HAYES                   = 0x8130\n\tETHERTYPE_HIPPI_FP                = 0x8180\n\tETHERTYPE_HITACHI                 = 0x8820\n\tETHERTYPE_HP                      = 0x8005\n\tETHERTYPE_IEEEPUP                 = 0xa00\n\tETHERTYPE_IEEEPUPAT               = 0xa01\n\tETHERTYPE_IMLBL                   = 0x4c42\n\tETHERTYPE_IMLBLDIAG               = 0x424c\n\tETHERTYPE_IP                      = 0x800\n\tETHERTYPE_IPAS                    = 0x876c\n\tETHERTYPE_IPV6                    = 0x86dd\n\tETHERTYPE_IPX                     = 0x8137\n\tETHERTYPE_IPXNEW                  = 0x8037\n\tETHERTYPE_KALPANA                 = 0x8582\n\tETHERTYPE_LANBRIDGE               = 0x8038\n\tETHERTYPE_LANPROBE                = 0x8888\n\tETHERTYPE_LAT                     = 0x6004\n\tETHERTYPE_LBACK                   = 0x9000\n\tETHERTYPE_LITTLE                  = 0x8060\n\tETHERTYPE_LLDP                    = 0x88cc\n\tETHERTYPE_LOGICRAFT               = 0x8148\n\tETHERTYPE_LOOPBACK                = 0x9000\n\tETHERTYPE_MATRA                   = 0x807a\n\tETHERTYPE_MAX                     = 0xffff\n\tETHERTYPE_MERIT                   = 0x807c\n\tETHERTYPE_MICP                    = 0x873a\n\tETHERTYPE_MOPDL                   = 0x6001\n\tETHERTYPE_MOPRC                   = 0x6002\n\tETHERTYPE_MOTOROLA                = 0x818d\n\tETHERTYPE_MPLS                    = 0x8847\n\tETHERTYPE_MPLS_MCAST              = 0x8848\n\tETHERTYPE_MUMPS                   = 0x813f\n\tETHERTYPE_NBPCC                   = 0x3c04\n\tETHERTYPE_NBPCLAIM                = 0x3c09\n\tETHERTYPE_NBPCLREQ                = 0x3c05\n\tETHERTYPE_NBPCLRSP                = 0x3c06\n\tETHERTYPE_NBPCREQ                 = 0x3c02\n\tETHERTYPE_NBPCRSP                 = 0x3c03\n\tETHERTYPE_NBPDG                   = 0x3c07\n\tETHERTYPE_NBPDGB                  = 0x3c08\n\tETHERTYPE_NBPDLTE                 = 0x3c0a\n\tETHERTYPE_NBPRAR                  = 0x3c0c\n\tETHERTYPE_NBPRAS                  = 0x3c0b\n\tETHERTYPE_NBPRST                  = 0x3c0d\n\tETHERTYPE_NBPSCD                  = 0x3c01\n\tETHERTYPE_NBPVCD                  = 0x3c00\n\tETHERTYPE_NBS                     = 0x802\n\tETHERTYPE_NCD                     = 0x8149\n\tETHERTYPE_NESTAR                  = 0x8006\n\tETHERTYPE_NETBEUI                 = 0x8191\n\tETHERTYPE_NOVELL                  = 0x8138\n\tETHERTYPE_NS                      = 0x600\n\tETHERTYPE_NSAT                    = 0x601\n\tETHERTYPE_NSCOMPAT                = 0x807\n\tETHERTYPE_NTRAILER                = 0x10\n\tETHERTYPE_OS9                     = 0x7007\n\tETHERTYPE_OS9NET                  = 0x7009\n\tETHERTYPE_PACER                   = 0x80c6\n\tETHERTYPE_PAE                     = 0x888e\n\tETHERTYPE_PCS                     = 0x4242\n\tETHERTYPE_PLANNING                = 0x8044\n\tETHERTYPE_PPP                     = 0x880b\n\tETHERTYPE_PPPOE                   = 0x8864\n\tETHERTYPE_PPPOEDISC               = 0x8863\n\tETHERTYPE_PRIMENTS                = 0x7031\n\tETHERTYPE_PUP                     = 0x200\n\tETHERTYPE_PUPAT                   = 0x200\n\tETHERTYPE_QINQ                    = 0x88a8\n\tETHERTYPE_RACAL                   = 0x7030\n\tETHERTYPE_RATIONAL                = 0x8150\n\tETHERTYPE_RAWFR                   = 0x6559\n\tETHERTYPE_RCL                     = 0x1995\n\tETHERTYPE_RDP                     = 0x8739\n\tETHERTYPE_RETIX                   = 0x80f2\n\tETHERTYPE_REVARP                  = 0x8035\n\tETHERTYPE_SCA                     = 0x6007\n\tETHERTYPE_SECTRA                  = 0x86db\n\tETHERTYPE_SECUREDATA              = 0x876d\n\tETHERTYPE_SGITW                   = 0x817e\n\tETHERTYPE_SG_BOUNCE               = 0x8016\n\tETHERTYPE_SG_DIAG                 = 0x8013\n\tETHERTYPE_SG_NETGAMES             = 0x8014\n\tETHERTYPE_SG_RESV                 = 0x8015\n\tETHERTYPE_SIMNET                  = 0x5208\n\tETHERTYPE_SLOW                    = 0x8809\n\tETHERTYPE_SNA                     = 0x80d5\n\tETHERTYPE_SNMP                    = 0x814c\n\tETHERTYPE_SONIX                   = 0xfaf5\n\tETHERTYPE_SPIDER                  = 0x809f\n\tETHERTYPE_SPRITE                  = 0x500\n\tETHERTYPE_STP                     = 0x8181\n\tETHERTYPE_TALARIS                 = 0x812b\n\tETHERTYPE_TALARISMC               = 0x852b\n\tETHERTYPE_TCPCOMP                 = 0x876b\n\tETHERTYPE_TCPSM                   = 0x9002\n\tETHERTYPE_TEC                     = 0x814f\n\tETHERTYPE_TIGAN                   = 0x802f\n\tETHERTYPE_TRAIL                   = 0x1000\n\tETHERTYPE_TRANSETHER              = 0x6558\n\tETHERTYPE_TYMSHARE                = 0x802e\n\tETHERTYPE_UBBST                   = 0x7005\n\tETHERTYPE_UBDEBUG                 = 0x900\n\tETHERTYPE_UBDIAGLOOP              = 0x7002\n\tETHERTYPE_UBDL                    = 0x7000\n\tETHERTYPE_UBNIU                   = 0x7001\n\tETHERTYPE_UBNMC                   = 0x7003\n\tETHERTYPE_VALID                   = 0x1600\n\tETHERTYPE_VARIAN                  = 0x80dd\n\tETHERTYPE_VAXELN                  = 0x803b\n\tETHERTYPE_VEECO                   = 0x8067\n\tETHERTYPE_VEXP                    = 0x805b\n\tETHERTYPE_VGLAB                   = 0x8131\n\tETHERTYPE_VINES                   = 0xbad\n\tETHERTYPE_VINESECHO               = 0xbaf\n\tETHERTYPE_VINESLOOP               = 0xbae\n\tETHERTYPE_VITAL                   = 0xff00\n\tETHERTYPE_VLAN                    = 0x8100\n\tETHERTYPE_VLTLMAN                 = 0x8080\n\tETHERTYPE_VPROD                   = 0x805c\n\tETHERTYPE_VURESERVED              = 0x8147\n\tETHERTYPE_WATERLOO                = 0x8130\n\tETHERTYPE_WELLFLEET               = 0x8103\n\tETHERTYPE_X25                     = 0x805\n\tETHERTYPE_X75                     = 0x801\n\tETHERTYPE_XNSSM                   = 0x9001\n\tETHERTYPE_XTP                     = 0x817d\n\tETHER_ADDR_LEN                    = 0x6\n\tETHER_ALIGN                       = 0x2\n\tETHER_CRC_LEN                     = 0x4\n\tETHER_CRC_POLY_BE                 = 0x4c11db6\n\tETHER_CRC_POLY_LE                 = 0xedb88320\n\tETHER_HDR_LEN                     = 0xe\n\tETHER_MAX_DIX_LEN                 = 0x600\n\tETHER_MAX_HARDMTU_LEN             = 0xff9b\n\tETHER_MAX_LEN                     = 0x5ee\n\tETHER_MIN_LEN                     = 0x40\n\tETHER_TYPE_LEN                    = 0x2\n\tETHER_VLAN_ENCAP_LEN              = 0x4\n\tEVFILT_AIO                        = -0x3\n\tEVFILT_DEVICE                     = -0x8\n\tEVFILT_PROC                       = -0x5\n\tEVFILT_READ                       = -0x1\n\tEVFILT_SIGNAL                     = -0x6\n\tEVFILT_SYSCOUNT                   = 0x8\n\tEVFILT_TIMER                      = -0x7\n\tEVFILT_VNODE                      = -0x4\n\tEVFILT_WRITE                      = -0x2\n\tEVL_ENCAPLEN                      = 0x4\n\tEVL_PRIO_BITS                     = 0xd\n\tEVL_PRIO_MAX                      = 0x7\n\tEVL_VLID_MASK                     = 0xfff\n\tEVL_VLID_MAX                      = 0xffe\n\tEVL_VLID_MIN                      = 0x1\n\tEVL_VLID_NULL                     = 0x0\n\tEV_ADD                            = 0x1\n\tEV_CLEAR                          = 0x20\n\tEV_DELETE                         = 0x2\n\tEV_DISABLE                        = 0x8\n\tEV_DISPATCH                       = 0x80\n\tEV_ENABLE                         = 0x4\n\tEV_EOF                            = 0x8000\n\tEV_ERROR                          = 0x4000\n\tEV_FLAG1                          = 0x2000\n\tEV_ONESHOT                        = 0x10\n\tEV_RECEIPT                        = 0x40\n\tEV_SYSFLAGS                       = 0xf000\n\tEXTA                              = 0x4b00\n\tEXTB                              = 0x9600\n\tEXTPROC                           = 0x800\n\tFD_CLOEXEC                        = 0x1\n\tFD_SETSIZE                        = 0x400\n\tFLUSHO                            = 0x800000\n\tF_DUPFD                           = 0x0\n\tF_DUPFD_CLOEXEC                   = 0xa\n\tF_GETFD                           = 0x1\n\tF_GETFL                           = 0x3\n\tF_GETLK                           = 0x7\n\tF_GETOWN                          = 0x5\n\tF_ISATTY                          = 0xb\n\tF_OK                              = 0x0\n\tF_RDLCK                           = 0x1\n\tF_SETFD                           = 0x2\n\tF_SETFL                           = 0x4\n\tF_SETLK                           = 0x8\n\tF_SETLKW                          = 0x9\n\tF_SETOWN                          = 0x6\n\tF_UNLCK                           = 0x2\n\tF_WRLCK                           = 0x3\n\tHUPCL                             = 0x4000\n\tHW_MACHINE                        = 0x1\n\tICANON                            = 0x100\n\tICMP6_FILTER                      = 0x12\n\tICRNL                             = 0x100\n\tIEXTEN                            = 0x400\n\tIFAN_ARRIVAL                      = 0x0\n\tIFAN_DEPARTURE                    = 0x1\n\tIFF_ALLMULTI                      = 0x200\n\tIFF_BROADCAST                     = 0x2\n\tIFF_CANTCHANGE                    = 0x8e52\n\tIFF_DEBUG                         = 0x4\n\tIFF_LINK0                         = 0x1000\n\tIFF_LINK1                         = 0x2000\n\tIFF_LINK2                         = 0x4000\n\tIFF_LOOPBACK                      = 0x8\n\tIFF_MULTICAST                     = 0x8000\n\tIFF_NOARP                         = 0x80\n\tIFF_OACTIVE                       = 0x400\n\tIFF_POINTOPOINT                   = 0x10\n\tIFF_PROMISC                       = 0x100\n\tIFF_RUNNING                       = 0x40\n\tIFF_SIMPLEX                       = 0x800\n\tIFF_STATICARP                     = 0x20\n\tIFF_UP                            = 0x1\n\tIFNAMSIZ                          = 0x10\n\tIFT_1822                          = 0x2\n\tIFT_A12MPPSWITCH                  = 0x82\n\tIFT_AAL2                          = 0xbb\n\tIFT_AAL5                          = 0x31\n\tIFT_ADSL                          = 0x5e\n\tIFT_AFLANE8023                    = 0x3b\n\tIFT_AFLANE8025                    = 0x3c\n\tIFT_ARAP                          = 0x58\n\tIFT_ARCNET                        = 0x23\n\tIFT_ARCNETPLUS                    = 0x24\n\tIFT_ASYNC                         = 0x54\n\tIFT_ATM                           = 0x25\n\tIFT_ATMDXI                        = 0x69\n\tIFT_ATMFUNI                       = 0x6a\n\tIFT_ATMIMA                        = 0x6b\n\tIFT_ATMLOGICAL                    = 0x50\n\tIFT_ATMRADIO                      = 0xbd\n\tIFT_ATMSUBINTERFACE               = 0x86\n\tIFT_ATMVCIENDPT                   = 0xc2\n\tIFT_ATMVIRTUAL                    = 0x95\n\tIFT_BGPPOLICYACCOUNTING           = 0xa2\n\tIFT_BLUETOOTH                     = 0xf8\n\tIFT_BRIDGE                        = 0xd1\n\tIFT_BSC                           = 0x53\n\tIFT_CARP                          = 0xf7\n\tIFT_CCTEMUL                       = 0x3d\n\tIFT_CEPT                          = 0x13\n\tIFT_CES                           = 0x85\n\tIFT_CHANNEL                       = 0x46\n\tIFT_CNR                           = 0x55\n\tIFT_COFFEE                        = 0x84\n\tIFT_COMPOSITELINK                 = 0x9b\n\tIFT_DCN                           = 0x8d\n\tIFT_DIGITALPOWERLINE              = 0x8a\n\tIFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba\n\tIFT_DLSW                          = 0x4a\n\tIFT_DOCSCABLEDOWNSTREAM           = 0x80\n\tIFT_DOCSCABLEMACLAYER             = 0x7f\n\tIFT_DOCSCABLEUPSTREAM             = 0x81\n\tIFT_DOCSCABLEUPSTREAMCHANNEL      = 0xcd\n\tIFT_DS0                           = 0x51\n\tIFT_DS0BUNDLE                     = 0x52\n\tIFT_DS1FDL                        = 0xaa\n\tIFT_DS3                           = 0x1e\n\tIFT_DTM                           = 0x8c\n\tIFT_DUMMY                         = 0xf1\n\tIFT_DVBASILN                      = 0xac\n\tIFT_DVBASIOUT                     = 0xad\n\tIFT_DVBRCCDOWNSTREAM              = 0x93\n\tIFT_DVBRCCMACLAYER                = 0x92\n\tIFT_DVBRCCUPSTREAM                = 0x94\n\tIFT_ECONET                        = 0xce\n\tIFT_ENC                           = 0xf4\n\tIFT_EON                           = 0x19\n\tIFT_EPLRS                         = 0x57\n\tIFT_ESCON                         = 0x49\n\tIFT_ETHER                         = 0x6\n\tIFT_FAITH                         = 0xf3\n\tIFT_FAST                          = 0x7d\n\tIFT_FASTETHER                     = 0x3e\n\tIFT_FASTETHERFX                   = 0x45\n\tIFT_FDDI                          = 0xf\n\tIFT_FIBRECHANNEL                  = 0x38\n\tIFT_FRAMERELAYINTERCONNECT        = 0x3a\n\tIFT_FRAMERELAYMPI                 = 0x5c\n\tIFT_FRDLCIENDPT                   = 0xc1\n\tIFT_FRELAY                        = 0x20\n\tIFT_FRELAYDCE                     = 0x2c\n\tIFT_FRF16MFRBUNDLE                = 0xa3\n\tIFT_FRFORWARD                     = 0x9e\n\tIFT_G703AT2MB                     = 0x43\n\tIFT_G703AT64K                     = 0x42\n\tIFT_GIF                           = 0xf0\n\tIFT_GIGABITETHERNET               = 0x75\n\tIFT_GR303IDT                      = 0xb2\n\tIFT_GR303RDT                      = 0xb1\n\tIFT_H323GATEKEEPER                = 0xa4\n\tIFT_H323PROXY                     = 0xa5\n\tIFT_HDH1822                       = 0x3\n\tIFT_HDLC                          = 0x76\n\tIFT_HDSL2                         = 0xa8\n\tIFT_HIPERLAN2                     = 0xb7\n\tIFT_HIPPI                         = 0x2f\n\tIFT_HIPPIINTERFACE                = 0x39\n\tIFT_HOSTPAD                       = 0x5a\n\tIFT_HSSI                          = 0x2e\n\tIFT_HY                            = 0xe\n\tIFT_IBM370PARCHAN                 = 0x48\n\tIFT_IDSL                          = 0x9a\n\tIFT_IEEE1394                      = 0x90\n\tIFT_IEEE80211                     = 0x47\n\tIFT_IEEE80212                     = 0x37\n\tIFT_IEEE8023ADLAG                 = 0xa1\n\tIFT_IFGSN                         = 0x91\n\tIFT_IMT                           = 0xbe\n\tIFT_INFINIBAND                    = 0xc7\n\tIFT_INTERLEAVE                    = 0x7c\n\tIFT_IP                            = 0x7e\n\tIFT_IPFORWARD                     = 0x8e\n\tIFT_IPOVERATM                     = 0x72\n\tIFT_IPOVERCDLC                    = 0x6d\n\tIFT_IPOVERCLAW                    = 0x6e\n\tIFT_IPSWITCH                      = 0x4e\n\tIFT_ISDN                          = 0x3f\n\tIFT_ISDNBASIC                     = 0x14\n\tIFT_ISDNPRIMARY                   = 0x15\n\tIFT_ISDNS                         = 0x4b\n\tIFT_ISDNU                         = 0x4c\n\tIFT_ISO88022LLC                   = 0x29\n\tIFT_ISO88023                      = 0x7\n\tIFT_ISO88024                      = 0x8\n\tIFT_ISO88025                      = 0x9\n\tIFT_ISO88025CRFPINT               = 0x62\n\tIFT_ISO88025DTR                   = 0x56\n\tIFT_ISO88025FIBER                 = 0x73\n\tIFT_ISO88026                      = 0xa\n\tIFT_ISUP                          = 0xb3\n\tIFT_L2VLAN                        = 0x87\n\tIFT_L3IPVLAN                      = 0x88\n\tIFT_L3IPXVLAN                     = 0x89\n\tIFT_LAPB                          = 0x10\n\tIFT_LAPD                          = 0x4d\n\tIFT_LAPF                          = 0x77\n\tIFT_LINEGROUP                     = 0xd2\n\tIFT_LOCALTALK                     = 0x2a\n\tIFT_LOOP                          = 0x18\n\tIFT_MBIM                          = 0xfa\n\tIFT_MEDIAMAILOVERIP               = 0x8b\n\tIFT_MFSIGLINK                     = 0xa7\n\tIFT_MIOX25                        = 0x26\n\tIFT_MODEM                         = 0x30\n\tIFT_MPC                           = 0x71\n\tIFT_MPLS                          = 0xa6\n\tIFT_MPLSTUNNEL                    = 0x96\n\tIFT_MSDSL                         = 0x8f\n\tIFT_MVL                           = 0xbf\n\tIFT_MYRINET                       = 0x63\n\tIFT_NFAS                          = 0xaf\n\tIFT_NSIP                          = 0x1b\n\tIFT_OPTICALCHANNEL                = 0xc3\n\tIFT_OPTICALTRANSPORT              = 0xc4\n\tIFT_OTHER                         = 0x1\n\tIFT_P10                           = 0xc\n\tIFT_P80                           = 0xd\n\tIFT_PARA                          = 0x22\n\tIFT_PFLOG                         = 0xf5\n\tIFT_PFLOW                         = 0xf9\n\tIFT_PFSYNC                        = 0xf6\n\tIFT_PLC                           = 0xae\n\tIFT_PON155                        = 0xcf\n\tIFT_PON622                        = 0xd0\n\tIFT_POS                           = 0xab\n\tIFT_PPP                           = 0x17\n\tIFT_PPPMULTILINKBUNDLE            = 0x6c\n\tIFT_PROPATM                       = 0xc5\n\tIFT_PROPBWAP2MP                   = 0xb8\n\tIFT_PROPCNLS                      = 0x59\n\tIFT_PROPDOCSWIRELESSDOWNSTREAM    = 0xb5\n\tIFT_PROPDOCSWIRELESSMACLAYER      = 0xb4\n\tIFT_PROPDOCSWIRELESSUPSTREAM      = 0xb6\n\tIFT_PROPMUX                       = 0x36\n\tIFT_PROPVIRTUAL                   = 0x35\n\tIFT_PROPWIRELESSP2P               = 0x9d\n\tIFT_PTPSERIAL                     = 0x16\n\tIFT_PVC                           = 0xf2\n\tIFT_Q2931                         = 0xc9\n\tIFT_QLLC                          = 0x44\n\tIFT_RADIOMAC                      = 0xbc\n\tIFT_RADSL                         = 0x5f\n\tIFT_REACHDSL                      = 0xc0\n\tIFT_RFC1483                       = 0x9f\n\tIFT_RS232                         = 0x21\n\tIFT_RSRB                          = 0x4f\n\tIFT_SDLC                          = 0x11\n\tIFT_SDSL                          = 0x60\n\tIFT_SHDSL                         = 0xa9\n\tIFT_SIP                           = 0x1f\n\tIFT_SIPSIG                        = 0xcc\n\tIFT_SIPTG                         = 0xcb\n\tIFT_SLIP                          = 0x1c\n\tIFT_SMDSDXI                       = 0x2b\n\tIFT_SMDSICIP                      = 0x34\n\tIFT_SONET                         = 0x27\n\tIFT_SONETOVERHEADCHANNEL          = 0xb9\n\tIFT_SONETPATH                     = 0x32\n\tIFT_SONETVT                       = 0x33\n\tIFT_SRP                           = 0x97\n\tIFT_SS7SIGLINK                    = 0x9c\n\tIFT_STACKTOSTACK                  = 0x6f\n\tIFT_STARLAN                       = 0xb\n\tIFT_T1                            = 0x12\n\tIFT_TDLC                          = 0x74\n\tIFT_TELINK                        = 0xc8\n\tIFT_TERMPAD                       = 0x5b\n\tIFT_TR008                         = 0xb0\n\tIFT_TRANSPHDLC                    = 0x7b\n\tIFT_TUNNEL                        = 0x83\n\tIFT_ULTRA                         = 0x1d\n\tIFT_USB                           = 0xa0\n\tIFT_V11                           = 0x40\n\tIFT_V35                           = 0x2d\n\tIFT_V36                           = 0x41\n\tIFT_V37                           = 0x78\n\tIFT_VDSL                          = 0x61\n\tIFT_VIRTUALIPADDRESS              = 0x70\n\tIFT_VIRTUALTG                     = 0xca\n\tIFT_VOICEDID                      = 0xd5\n\tIFT_VOICEEM                       = 0x64\n\tIFT_VOICEEMFGD                    = 0xd3\n\tIFT_VOICEENCAP                    = 0x67\n\tIFT_VOICEFGDEANA                  = 0xd4\n\tIFT_VOICEFXO                      = 0x65\n\tIFT_VOICEFXS                      = 0x66\n\tIFT_VOICEOVERATM                  = 0x98\n\tIFT_VOICEOVERCABLE                = 0xc6\n\tIFT_VOICEOVERFRAMERELAY           = 0x99\n\tIFT_VOICEOVERIP                   = 0x68\n\tIFT_X213                          = 0x5d\n\tIFT_X25                           = 0x5\n\tIFT_X25DDN                        = 0x4\n\tIFT_X25HUNTGROUP                  = 0x7a\n\tIFT_X25MLP                        = 0x79\n\tIFT_X25PLE                        = 0x28\n\tIFT_XETHER                        = 0x1a\n\tIGNBRK                            = 0x1\n\tIGNCR                             = 0x80\n\tIGNPAR                            = 0x4\n\tIMAXBEL                           = 0x2000\n\tINLCR                             = 0x40\n\tINPCK                             = 0x10\n\tIN_CLASSA_HOST                    = 0xffffff\n\tIN_CLASSA_MAX                     = 0x80\n\tIN_CLASSA_NET                     = 0xff000000\n\tIN_CLASSA_NSHIFT                  = 0x18\n\tIN_CLASSB_HOST                    = 0xffff\n\tIN_CLASSB_MAX                     = 0x10000\n\tIN_CLASSB_NET                     = 0xffff0000\n\tIN_CLASSB_NSHIFT                  = 0x10\n\tIN_CLASSC_HOST                    = 0xff\n\tIN_CLASSC_NET                     = 0xffffff00\n\tIN_CLASSC_NSHIFT                  = 0x8\n\tIN_CLASSD_HOST                    = 0xfffffff\n\tIN_CLASSD_NET                     = 0xf0000000\n\tIN_CLASSD_NSHIFT                  = 0x1c\n\tIN_LOOPBACKNET                    = 0x7f\n\tIN_RFC3021_HOST                   = 0x1\n\tIN_RFC3021_NET                    = 0xfffffffe\n\tIN_RFC3021_NSHIFT                 = 0x1f\n\tIPPROTO_AH                        = 0x33\n\tIPPROTO_CARP                      = 0x70\n\tIPPROTO_DIVERT                    = 0x102\n\tIPPROTO_DONE                      = 0x101\n\tIPPROTO_DSTOPTS                   = 0x3c\n\tIPPROTO_EGP                       = 0x8\n\tIPPROTO_ENCAP                     = 0x62\n\tIPPROTO_EON                       = 0x50\n\tIPPROTO_ESP                       = 0x32\n\tIPPROTO_ETHERIP                   = 0x61\n\tIPPROTO_FRAGMENT                  = 0x2c\n\tIPPROTO_GGP                       = 0x3\n\tIPPROTO_GRE                       = 0x2f\n\tIPPROTO_HOPOPTS                   = 0x0\n\tIPPROTO_ICMP                      = 0x1\n\tIPPROTO_ICMPV6                    = 0x3a\n\tIPPROTO_IDP                       = 0x16\n\tIPPROTO_IGMP                      = 0x2\n\tIPPROTO_IP                        = 0x0\n\tIPPROTO_IPCOMP                    = 0x6c\n\tIPPROTO_IPIP                      = 0x4\n\tIPPROTO_IPV4                      = 0x4\n\tIPPROTO_IPV6                      = 0x29\n\tIPPROTO_MAX                       = 0x100\n\tIPPROTO_MAXID                     = 0x103\n\tIPPROTO_MOBILE                    = 0x37\n\tIPPROTO_MPLS                      = 0x89\n\tIPPROTO_NONE                      = 0x3b\n\tIPPROTO_PFSYNC                    = 0xf0\n\tIPPROTO_PIM                       = 0x67\n\tIPPROTO_PUP                       = 0xc\n\tIPPROTO_RAW                       = 0xff\n\tIPPROTO_ROUTING                   = 0x2b\n\tIPPROTO_RSVP                      = 0x2e\n\tIPPROTO_TCP                       = 0x6\n\tIPPROTO_TP                        = 0x1d\n\tIPPROTO_UDP                       = 0x11\n\tIPV6_AUTH_LEVEL                   = 0x35\n\tIPV6_AUTOFLOWLABEL                = 0x3b\n\tIPV6_CHECKSUM                     = 0x1a\n\tIPV6_DEFAULT_MULTICAST_HOPS       = 0x1\n\tIPV6_DEFAULT_MULTICAST_LOOP       = 0x1\n\tIPV6_DEFHLIM                      = 0x40\n\tIPV6_DONTFRAG                     = 0x3e\n\tIPV6_DSTOPTS                      = 0x32\n\tIPV6_ESP_NETWORK_LEVEL            = 0x37\n\tIPV6_ESP_TRANS_LEVEL              = 0x36\n\tIPV6_FAITH                        = 0x1d\n\tIPV6_FLOWINFO_MASK                = 0xffffff0f\n\tIPV6_FLOWLABEL_MASK               = 0xffff0f00\n\tIPV6_FRAGTTL                      = 0x78\n\tIPV6_HLIMDEC                      = 0x1\n\tIPV6_HOPLIMIT                     = 0x2f\n\tIPV6_HOPOPTS                      = 0x31\n\tIPV6_IPCOMP_LEVEL                 = 0x3c\n\tIPV6_JOIN_GROUP                   = 0xc\n\tIPV6_LEAVE_GROUP                  = 0xd\n\tIPV6_MAXHLIM                      = 0xff\n\tIPV6_MAXPACKET                    = 0xffff\n\tIPV6_MINHOPCOUNT                  = 0x41\n\tIPV6_MMTU                         = 0x500\n\tIPV6_MULTICAST_HOPS               = 0xa\n\tIPV6_MULTICAST_IF                 = 0x9\n\tIPV6_MULTICAST_LOOP               = 0xb\n\tIPV6_NEXTHOP                      = 0x30\n\tIPV6_OPTIONS                      = 0x1\n\tIPV6_PATHMTU                      = 0x2c\n\tIPV6_PIPEX                        = 0x3f\n\tIPV6_PKTINFO                      = 0x2e\n\tIPV6_PORTRANGE                    = 0xe\n\tIPV6_PORTRANGE_DEFAULT            = 0x0\n\tIPV6_PORTRANGE_HIGH               = 0x1\n\tIPV6_PORTRANGE_LOW                = 0x2\n\tIPV6_RECVDSTOPTS                  = 0x28\n\tIPV6_RECVDSTPORT                  = 0x40\n\tIPV6_RECVHOPLIMIT                 = 0x25\n\tIPV6_RECVHOPOPTS                  = 0x27\n\tIPV6_RECVPATHMTU                  = 0x2b\n\tIPV6_RECVPKTINFO                  = 0x24\n\tIPV6_RECVRTHDR                    = 0x26\n\tIPV6_RECVTCLASS                   = 0x39\n\tIPV6_RTABLE                       = 0x1021\n\tIPV6_RTHDR                        = 0x33\n\tIPV6_RTHDRDSTOPTS                 = 0x23\n\tIPV6_RTHDR_LOOSE                  = 0x0\n\tIPV6_RTHDR_STRICT                 = 0x1\n\tIPV6_RTHDR_TYPE_0                 = 0x0\n\tIPV6_SOCKOPT_RESERVED1            = 0x3\n\tIPV6_TCLASS                       = 0x3d\n\tIPV6_UNICAST_HOPS                 = 0x4\n\tIPV6_USE_MIN_MTU                  = 0x2a\n\tIPV6_V6ONLY                       = 0x1b\n\tIPV6_VERSION                      = 0x60\n\tIPV6_VERSION_MASK                 = 0xf0\n\tIP_ADD_MEMBERSHIP                 = 0xc\n\tIP_AUTH_LEVEL                     = 0x14\n\tIP_DEFAULT_MULTICAST_LOOP         = 0x1\n\tIP_DEFAULT_MULTICAST_TTL          = 0x1\n\tIP_DF                             = 0x4000\n\tIP_DROP_MEMBERSHIP                = 0xd\n\tIP_ESP_NETWORK_LEVEL              = 0x16\n\tIP_ESP_TRANS_LEVEL                = 0x15\n\tIP_HDRINCL                        = 0x2\n\tIP_IPCOMP_LEVEL                   = 0x1d\n\tIP_IPDEFTTL                       = 0x25\n\tIP_IPSECFLOWINFO                  = 0x24\n\tIP_IPSEC_LOCAL_AUTH               = 0x1b\n\tIP_IPSEC_LOCAL_CRED               = 0x19\n\tIP_IPSEC_LOCAL_ID                 = 0x17\n\tIP_IPSEC_REMOTE_AUTH              = 0x1c\n\tIP_IPSEC_REMOTE_CRED              = 0x1a\n\tIP_IPSEC_REMOTE_ID                = 0x18\n\tIP_MAXPACKET                      = 0xffff\n\tIP_MAX_MEMBERSHIPS                = 0xfff\n\tIP_MF                             = 0x2000\n\tIP_MINTTL                         = 0x20\n\tIP_MIN_MEMBERSHIPS                = 0xf\n\tIP_MSS                            = 0x240\n\tIP_MULTICAST_IF                   = 0x9\n\tIP_MULTICAST_LOOP                 = 0xb\n\tIP_MULTICAST_TTL                  = 0xa\n\tIP_OFFMASK                        = 0x1fff\n\tIP_OPTIONS                        = 0x1\n\tIP_PIPEX                          = 0x22\n\tIP_PORTRANGE                      = 0x13\n\tIP_PORTRANGE_DEFAULT              = 0x0\n\tIP_PORTRANGE_HIGH                 = 0x1\n\tIP_PORTRANGE_LOW                  = 0x2\n\tIP_RECVDSTADDR                    = 0x7\n\tIP_RECVDSTPORT                    = 0x21\n\tIP_RECVIF                         = 0x1e\n\tIP_RECVOPTS                       = 0x5\n\tIP_RECVRETOPTS                    = 0x6\n\tIP_RECVRTABLE                     = 0x23\n\tIP_RECVTTL                        = 0x1f\n\tIP_RETOPTS                        = 0x8\n\tIP_RF                             = 0x8000\n\tIP_RTABLE                         = 0x1021\n\tIP_SENDSRCADDR                    = 0x7\n\tIP_TOS                            = 0x3\n\tIP_TTL                            = 0x4\n\tISIG                              = 0x80\n\tISTRIP                            = 0x20\n\tIUCLC                             = 0x1000\n\tIXANY                             = 0x800\n\tIXOFF                             = 0x400\n\tIXON                              = 0x200\n\tKERN_HOSTNAME                     = 0xa\n\tKERN_OSRELEASE                    = 0x2\n\tKERN_OSTYPE                       = 0x1\n\tKERN_VERSION                      = 0x4\n\tLCNT_OVERLOAD_FLUSH               = 0x6\n\tLOCK_EX                           = 0x2\n\tLOCK_NB                           = 0x4\n\tLOCK_SH                           = 0x1\n\tLOCK_UN                           = 0x8\n\tMADV_DONTNEED                     = 0x4\n\tMADV_FREE                         = 0x6\n\tMADV_NORMAL                       = 0x0\n\tMADV_RANDOM                       = 0x1\n\tMADV_SEQUENTIAL                   = 0x2\n\tMADV_SPACEAVAIL                   = 0x5\n\tMADV_WILLNEED                     = 0x3\n\tMAP_ANON                          = 0x1000\n\tMAP_ANONYMOUS                     = 0x1000\n\tMAP_COPY                          = 0x2\n\tMAP_FILE                          = 0x0\n\tMAP_FIXED                         = 0x10\n\tMAP_FLAGMASK                      = 0x7ff7\n\tMAP_HASSEMAPHORE                  = 0x0\n\tMAP_INHERIT                       = 0x0\n\tMAP_INHERIT_COPY                  = 0x1\n\tMAP_INHERIT_NONE                  = 0x2\n\tMAP_INHERIT_SHARE                 = 0x0\n\tMAP_INHERIT_ZERO                  = 0x3\n\tMAP_NOEXTEND                      = 0x0\n\tMAP_NORESERVE                     = 0x0\n\tMAP_PRIVATE                       = 0x2\n\tMAP_RENAME                        = 0x0\n\tMAP_SHARED                        = 0x1\n\tMAP_STACK                         = 0x4000\n\tMAP_TRYFIXED                      = 0x0\n\tMCL_CURRENT                       = 0x1\n\tMCL_FUTURE                        = 0x2\n\tMNT_ASYNC                         = 0x40\n\tMNT_DEFEXPORTED                   = 0x200\n\tMNT_DELEXPORT                     = 0x20000\n\tMNT_DOOMED                        = 0x8000000\n\tMNT_EXPORTANON                    = 0x400\n\tMNT_EXPORTED                      = 0x100\n\tMNT_EXRDONLY                      = 0x80\n\tMNT_FORCE                         = 0x80000\n\tMNT_LAZY                          = 0x3\n\tMNT_LOCAL                         = 0x1000\n\tMNT_NOATIME                       = 0x8000\n\tMNT_NODEV                         = 0x10\n\tMNT_NOEXEC                        = 0x4\n\tMNT_NOPERM                        = 0x20\n\tMNT_NOSUID                        = 0x8\n\tMNT_NOWAIT                        = 0x2\n\tMNT_QUOTA                         = 0x2000\n\tMNT_RDONLY                        = 0x1\n\tMNT_RELOAD                        = 0x40000\n\tMNT_ROOTFS                        = 0x4000\n\tMNT_SOFTDEP                       = 0x4000000\n\tMNT_STALLED                       = 0x100000\n\tMNT_SYNCHRONOUS                   = 0x2\n\tMNT_UPDATE                        = 0x10000\n\tMNT_VISFLAGMASK                   = 0x400ffff\n\tMNT_WAIT                          = 0x1\n\tMNT_WANTRDWR                      = 0x2000000\n\tMNT_WXALLOWED                     = 0x800\n\tMSG_BCAST                         = 0x100\n\tMSG_CMSG_CLOEXEC                  = 0x800\n\tMSG_CTRUNC                        = 0x20\n\tMSG_DONTROUTE                     = 0x4\n\tMSG_DONTWAIT                      = 0x80\n\tMSG_EOR                           = 0x8\n\tMSG_MCAST                         = 0x200\n\tMSG_NOSIGNAL                      = 0x400\n\tMSG_OOB                           = 0x1\n\tMSG_PEEK                          = 0x2\n\tMSG_TRUNC                         = 0x10\n\tMSG_WAITALL                       = 0x40\n\tMS_ASYNC                          = 0x1\n\tMS_INVALIDATE                     = 0x4\n\tMS_SYNC                           = 0x2\n\tNAME_MAX                          = 0xff\n\tNET_RT_DUMP                       = 0x1\n\tNET_RT_FLAGS                      = 0x2\n\tNET_RT_IFLIST                     = 0x3\n\tNET_RT_IFNAMES                    = 0x6\n\tNET_RT_MAXID                      = 0x7\n\tNET_RT_STATS                      = 0x4\n\tNET_RT_TABLE                      = 0x5\n\tNOFLSH                            = 0x80000000\n\tNOKERNINFO                        = 0x2000000\n\tNOTE_ATTRIB                       = 0x8\n\tNOTE_CHANGE                       = 0x1\n\tNOTE_CHILD                        = 0x4\n\tNOTE_DELETE                       = 0x1\n\tNOTE_EOF                          = 0x2\n\tNOTE_EXEC                         = 0x20000000\n\tNOTE_EXIT                         = 0x80000000\n\tNOTE_EXTEND                       = 0x4\n\tNOTE_FORK                         = 0x40000000\n\tNOTE_LINK                         = 0x10\n\tNOTE_LOWAT                        = 0x1\n\tNOTE_PCTRLMASK                    = 0xf0000000\n\tNOTE_PDATAMASK                    = 0xfffff\n\tNOTE_RENAME                       = 0x20\n\tNOTE_REVOKE                       = 0x40\n\tNOTE_TRACK                        = 0x1\n\tNOTE_TRACKERR                     = 0x2\n\tNOTE_TRUNCATE                     = 0x80\n\tNOTE_WRITE                        = 0x2\n\tOCRNL                             = 0x10\n\tOLCUC                             = 0x20\n\tONLCR                             = 0x2\n\tONLRET                            = 0x80\n\tONOCR                             = 0x40\n\tONOEOT                            = 0x8\n\tOPOST                             = 0x1\n\tOXTABS                            = 0x4\n\tO_ACCMODE                         = 0x3\n\tO_APPEND                          = 0x8\n\tO_ASYNC                           = 0x40\n\tO_CLOEXEC                         = 0x10000\n\tO_CREAT                           = 0x200\n\tO_DIRECTORY                       = 0x20000\n\tO_DSYNC                           = 0x80\n\tO_EXCL                            = 0x800\n\tO_EXLOCK                          = 0x20\n\tO_FSYNC                           = 0x80\n\tO_NDELAY                          = 0x4\n\tO_NOCTTY                          = 0x8000\n\tO_NOFOLLOW                        = 0x100\n\tO_NONBLOCK                        = 0x4\n\tO_RDONLY                          = 0x0\n\tO_RDWR                            = 0x2\n\tO_RSYNC                           = 0x80\n\tO_SHLOCK                          = 0x10\n\tO_SYNC                            = 0x80\n\tO_TRUNC                           = 0x400\n\tO_WRONLY                          = 0x1\n\tPARENB                            = 0x1000\n\tPARMRK                            = 0x8\n\tPARODD                            = 0x2000\n\tPENDIN                            = 0x20000000\n\tPF_FLUSH                          = 0x1\n\tPRIO_PGRP                         = 0x1\n\tPRIO_PROCESS                      = 0x0\n\tPRIO_USER                         = 0x2\n\tPROT_EXEC                         = 0x4\n\tPROT_NONE                         = 0x0\n\tPROT_READ                         = 0x1\n\tPROT_WRITE                        = 0x2\n\tRLIMIT_CORE                       = 0x4\n\tRLIMIT_CPU                        = 0x0\n\tRLIMIT_DATA                       = 0x2\n\tRLIMIT_FSIZE                      = 0x1\n\tRLIMIT_MEMLOCK                    = 0x6\n\tRLIMIT_NOFILE                     = 0x8\n\tRLIMIT_NPROC                      = 0x7\n\tRLIMIT_RSS                        = 0x5\n\tRLIMIT_STACK                      = 0x3\n\tRLIM_INFINITY                     = 0x7fffffffffffffff\n\tRTAX_AUTHOR                       = 0x6\n\tRTAX_BFD                          = 0xb\n\tRTAX_BRD                          = 0x7\n\tRTAX_DNS                          = 0xc\n\tRTAX_DST                          = 0x0\n\tRTAX_GATEWAY                      = 0x1\n\tRTAX_GENMASK                      = 0x3\n\tRTAX_IFA                          = 0x5\n\tRTAX_IFP                          = 0x4\n\tRTAX_LABEL                        = 0xa\n\tRTAX_MAX                          = 0xf\n\tRTAX_NETMASK                      = 0x2\n\tRTAX_SEARCH                       = 0xe\n\tRTAX_SRC                          = 0x8\n\tRTAX_SRCMASK                      = 0x9\n\tRTAX_STATIC                       = 0xd\n\tRTA_AUTHOR                        = 0x40\n\tRTA_BFD                           = 0x800\n\tRTA_BRD                           = 0x80\n\tRTA_DNS                           = 0x1000\n\tRTA_DST                           = 0x1\n\tRTA_GATEWAY                       = 0x2\n\tRTA_GENMASK                       = 0x8\n\tRTA_IFA                           = 0x20\n\tRTA_IFP                           = 0x10\n\tRTA_LABEL                         = 0x400\n\tRTA_NETMASK                       = 0x4\n\tRTA_SEARCH                        = 0x4000\n\tRTA_SRC                           = 0x100\n\tRTA_SRCMASK                       = 0x200\n\tRTA_STATIC                        = 0x2000\n\tRTF_ANNOUNCE                      = 0x4000\n\tRTF_BFD                           = 0x1000000\n\tRTF_BLACKHOLE                     = 0x1000\n\tRTF_BROADCAST                     = 0x400000\n\tRTF_CACHED                        = 0x20000\n\tRTF_CLONED                        = 0x10000\n\tRTF_CLONING                       = 0x100\n\tRTF_CONNECTED                     = 0x800000\n\tRTF_DONE                          = 0x40\n\tRTF_DYNAMIC                       = 0x10\n\tRTF_FMASK                         = 0x110fc08\n\tRTF_GATEWAY                       = 0x2\n\tRTF_HOST                          = 0x4\n\tRTF_LLINFO                        = 0x400\n\tRTF_LOCAL                         = 0x200000\n\tRTF_MODIFIED                      = 0x20\n\tRTF_MPATH                         = 0x40000\n\tRTF_MPLS                          = 0x100000\n\tRTF_MULTICAST                     = 0x200\n\tRTF_PERMANENT_ARP                 = 0x2000\n\tRTF_PROTO1                        = 0x8000\n\tRTF_PROTO2                        = 0x4000\n\tRTF_PROTO3                        = 0x2000\n\tRTF_REJECT                        = 0x8\n\tRTF_STATIC                        = 0x800\n\tRTF_UP                            = 0x1\n\tRTF_USETRAILERS                   = 0x8000\n\tRTM_ADD                           = 0x1\n\tRTM_BFD                           = 0x12\n\tRTM_CHANGE                        = 0x3\n\tRTM_DELADDR                       = 0xd\n\tRTM_DELETE                        = 0x2\n\tRTM_DESYNC                        = 0x10\n\tRTM_GET                           = 0x4\n\tRTM_IFANNOUNCE                    = 0xf\n\tRTM_IFINFO                        = 0xe\n\tRTM_INVALIDATE                    = 0x11\n\tRTM_LOCK                          = 0x8\n\tRTM_LOSING                        = 0x5\n\tRTM_MAXSIZE                       = 0x800\n\tRTM_MISS                          = 0x7\n\tRTM_NEWADDR                       = 0xc\n\tRTM_PROPOSAL                      = 0x13\n\tRTM_REDIRECT                      = 0x6\n\tRTM_RESOLVE                       = 0xb\n\tRTM_RTTUNIT                       = 0xf4240\n\tRTM_VERSION                       = 0x5\n\tRTV_EXPIRE                        = 0x4\n\tRTV_HOPCOUNT                      = 0x2\n\tRTV_MTU                           = 0x1\n\tRTV_RPIPE                         = 0x8\n\tRTV_RTT                           = 0x40\n\tRTV_RTTVAR                        = 0x80\n\tRTV_SPIPE                         = 0x10\n\tRTV_SSTHRESH                      = 0x20\n\tRT_TABLEID_BITS                   = 0x8\n\tRT_TABLEID_MASK                   = 0xff\n\tRT_TABLEID_MAX                    = 0xff\n\tRUSAGE_CHILDREN                   = -0x1\n\tRUSAGE_SELF                       = 0x0\n\tRUSAGE_THREAD                     = 0x1\n\tSCM_RIGHTS                        = 0x1\n\tSCM_TIMESTAMP                     = 0x4\n\tSHUT_RD                           = 0x0\n\tSHUT_RDWR                         = 0x2\n\tSHUT_WR                           = 0x1\n\tSIOCADDMULTI                      = 0x80206931\n\tSIOCAIFADDR                       = 0x8040691a\n\tSIOCAIFGROUP                      = 0x80286987\n\tSIOCATMARK                        = 0x40047307\n\tSIOCBRDGADD                       = 0x8060693c\n\tSIOCBRDGADDL                      = 0x80606949\n\tSIOCBRDGADDS                      = 0x80606941\n\tSIOCBRDGARL                       = 0x808c694d\n\tSIOCBRDGDADDR                     = 0x81286947\n\tSIOCBRDGDEL                       = 0x8060693d\n\tSIOCBRDGDELS                      = 0x80606942\n\tSIOCBRDGFLUSH                     = 0x80606948\n\tSIOCBRDGFRL                       = 0x808c694e\n\tSIOCBRDGGCACHE                    = 0xc0186941\n\tSIOCBRDGGFD                       = 0xc0186952\n\tSIOCBRDGGHT                       = 0xc0186951\n\tSIOCBRDGGIFFLGS                   = 0xc060693e\n\tSIOCBRDGGMA                       = 0xc0186953\n\tSIOCBRDGGPARAM                    = 0xc0406958\n\tSIOCBRDGGPRI                      = 0xc0186950\n\tSIOCBRDGGRL                       = 0xc030694f\n\tSIOCBRDGGTO                       = 0xc0186946\n\tSIOCBRDGIFS                       = 0xc0606942\n\tSIOCBRDGRTS                       = 0xc0206943\n\tSIOCBRDGSADDR                     = 0xc1286944\n\tSIOCBRDGSCACHE                    = 0x80186940\n\tSIOCBRDGSFD                       = 0x80186952\n\tSIOCBRDGSHT                       = 0x80186951\n\tSIOCBRDGSIFCOST                   = 0x80606955\n\tSIOCBRDGSIFFLGS                   = 0x8060693f\n\tSIOCBRDGSIFPRIO                   = 0x80606954\n\tSIOCBRDGSIFPROT                   = 0x8060694a\n\tSIOCBRDGSMA                       = 0x80186953\n\tSIOCBRDGSPRI                      = 0x80186950\n\tSIOCBRDGSPROTO                    = 0x8018695a\n\tSIOCBRDGSTO                       = 0x80186945\n\tSIOCBRDGSTXHC                     = 0x80186959\n\tSIOCDELMULTI                      = 0x80206932\n\tSIOCDIFADDR                       = 0x80206919\n\tSIOCDIFGROUP                      = 0x80286989\n\tSIOCDIFPARENT                     = 0x802069b4\n\tSIOCDIFPHYADDR                    = 0x80206949\n\tSIOCDVNETID                       = 0x802069af\n\tSIOCGETKALIVE                     = 0xc01869a4\n\tSIOCGETLABEL                      = 0x8020699a\n\tSIOCGETMPWCFG                     = 0xc02069ae\n\tSIOCGETPFLOW                      = 0xc02069fe\n\tSIOCGETPFSYNC                     = 0xc02069f8\n\tSIOCGETSGCNT                      = 0xc0207534\n\tSIOCGETVIFCNT                     = 0xc0287533\n\tSIOCGETVLAN                       = 0xc0206990\n\tSIOCGIFADDR                       = 0xc0206921\n\tSIOCGIFBRDADDR                    = 0xc0206923\n\tSIOCGIFCONF                       = 0xc0106924\n\tSIOCGIFDATA                       = 0xc020691b\n\tSIOCGIFDESCR                      = 0xc0206981\n\tSIOCGIFDSTADDR                    = 0xc0206922\n\tSIOCGIFFLAGS                      = 0xc0206911\n\tSIOCGIFGATTR                      = 0xc028698b\n\tSIOCGIFGENERIC                    = 0xc020693a\n\tSIOCGIFGMEMB                      = 0xc028698a\n\tSIOCGIFGROUP                      = 0xc0286988\n\tSIOCGIFHARDMTU                    = 0xc02069a5\n\tSIOCGIFLLPRIO                     = 0xc02069b6\n\tSIOCGIFMEDIA                      = 0xc0406938\n\tSIOCGIFMETRIC                     = 0xc0206917\n\tSIOCGIFMTU                        = 0xc020697e\n\tSIOCGIFNETMASK                    = 0xc0206925\n\tSIOCGIFPAIR                       = 0xc02069b1\n\tSIOCGIFPARENT                     = 0xc02069b3\n\tSIOCGIFPRIORITY                   = 0xc020699c\n\tSIOCGIFRDOMAIN                    = 0xc02069a0\n\tSIOCGIFRTLABEL                    = 0xc0206983\n\tSIOCGIFRXR                        = 0x802069aa\n\tSIOCGIFXFLAGS                     = 0xc020699e\n\tSIOCGLIFPHYADDR                   = 0xc218694b\n\tSIOCGLIFPHYDF                     = 0xc02069c2\n\tSIOCGLIFPHYRTABLE                 = 0xc02069a2\n\tSIOCGLIFPHYTTL                    = 0xc02069a9\n\tSIOCGPGRP                         = 0x40047309\n\tSIOCGSPPPPARAMS                   = 0xc0206994\n\tSIOCGUMBINFO                      = 0xc02069be\n\tSIOCGUMBPARAM                     = 0xc02069c0\n\tSIOCGVH                           = 0xc02069f6\n\tSIOCGVNETFLOWID                   = 0xc02069c4\n\tSIOCGVNETID                       = 0xc02069a7\n\tSIOCIFAFATTACH                    = 0x801169ab\n\tSIOCIFAFDETACH                    = 0x801169ac\n\tSIOCIFCREATE                      = 0x8020697a\n\tSIOCIFDESTROY                     = 0x80206979\n\tSIOCIFGCLONERS                    = 0xc0106978\n\tSIOCSETKALIVE                     = 0x801869a3\n\tSIOCSETLABEL                      = 0x80206999\n\tSIOCSETMPWCFG                     = 0x802069ad\n\tSIOCSETPFLOW                      = 0x802069fd\n\tSIOCSETPFSYNC                     = 0x802069f7\n\tSIOCSETVLAN                       = 0x8020698f\n\tSIOCSIFADDR                       = 0x8020690c\n\tSIOCSIFBRDADDR                    = 0x80206913\n\tSIOCSIFDESCR                      = 0x80206980\n\tSIOCSIFDSTADDR                    = 0x8020690e\n\tSIOCSIFFLAGS                      = 0x80206910\n\tSIOCSIFGATTR                      = 0x8028698c\n\tSIOCSIFGENERIC                    = 0x80206939\n\tSIOCSIFLLADDR                     = 0x8020691f\n\tSIOCSIFLLPRIO                     = 0x802069b5\n\tSIOCSIFMEDIA                      = 0xc0206937\n\tSIOCSIFMETRIC                     = 0x80206918\n\tSIOCSIFMTU                        = 0x8020697f\n\tSIOCSIFNETMASK                    = 0x80206916\n\tSIOCSIFPAIR                       = 0x802069b0\n\tSIOCSIFPARENT                     = 0x802069b2\n\tSIOCSIFPRIORITY                   = 0x8020699b\n\tSIOCSIFRDOMAIN                    = 0x8020699f\n\tSIOCSIFRTLABEL                    = 0x80206982\n\tSIOCSIFXFLAGS                     = 0x8020699d\n\tSIOCSLIFPHYADDR                   = 0x8218694a\n\tSIOCSLIFPHYDF                     = 0x802069c1\n\tSIOCSLIFPHYRTABLE                 = 0x802069a1\n\tSIOCSLIFPHYTTL                    = 0x802069a8\n\tSIOCSPGRP                         = 0x80047308\n\tSIOCSSPPPPARAMS                   = 0x80206993\n\tSIOCSUMBPARAM                     = 0x802069bf\n\tSIOCSVH                           = 0xc02069f5\n\tSIOCSVNETFLOWID                   = 0x802069c3\n\tSIOCSVNETID                       = 0x802069a6\n\tSIOCSWGDPID                       = 0xc018695b\n\tSIOCSWGMAXFLOW                    = 0xc0186960\n\tSIOCSWGMAXGROUP                   = 0xc018695d\n\tSIOCSWSDPID                       = 0x8018695c\n\tSIOCSWSPORTNO                     = 0xc060695f\n\tSOCK_CLOEXEC                      = 0x8000\n\tSOCK_DGRAM                        = 0x2\n\tSOCK_DNS                          = 0x1000\n\tSOCK_NONBLOCK                     = 0x4000\n\tSOCK_RAW                          = 0x3\n\tSOCK_RDM                          = 0x4\n\tSOCK_SEQPACKET                    = 0x5\n\tSOCK_STREAM                       = 0x1\n\tSOL_SOCKET                        = 0xffff\n\tSOMAXCONN                         = 0x80\n\tSO_ACCEPTCONN                     = 0x2\n\tSO_BINDANY                        = 0x1000\n\tSO_BROADCAST                      = 0x20\n\tSO_DEBUG                          = 0x1\n\tSO_DONTROUTE                      = 0x10\n\tSO_ERROR                          = 0x1007\n\tSO_KEEPALIVE                      = 0x8\n\tSO_LINGER                         = 0x80\n\tSO_NETPROC                        = 0x1020\n\tSO_OOBINLINE                      = 0x100\n\tSO_PEERCRED                       = 0x1022\n\tSO_RCVBUF                         = 0x1002\n\tSO_RCVLOWAT                       = 0x1004\n\tSO_RCVTIMEO                       = 0x1006\n\tSO_REUSEADDR                      = 0x4\n\tSO_REUSEPORT                      = 0x200\n\tSO_RTABLE                         = 0x1021\n\tSO_SNDBUF                         = 0x1001\n\tSO_SNDLOWAT                       = 0x1003\n\tSO_SNDTIMEO                       = 0x1005\n\tSO_SPLICE                         = 0x1023\n\tSO_TIMESTAMP                      = 0x800\n\tSO_TYPE                           = 0x1008\n\tSO_USELOOPBACK                    = 0x40\n\tSO_ZEROIZE                        = 0x2000\n\tS_BLKSIZE                         = 0x200\n\tS_IEXEC                           = 0x40\n\tS_IFBLK                           = 0x6000\n\tS_IFCHR                           = 0x2000\n\tS_IFDIR                           = 0x4000\n\tS_IFIFO                           = 0x1000\n\tS_IFLNK                           = 0xa000\n\tS_IFMT                            = 0xf000\n\tS_IFREG                           = 0x8000\n\tS_IFSOCK                          = 0xc000\n\tS_IREAD                           = 0x100\n\tS_IRGRP                           = 0x20\n\tS_IROTH                           = 0x4\n\tS_IRUSR                           = 0x100\n\tS_IRWXG                           = 0x38\n\tS_IRWXO                           = 0x7\n\tS_IRWXU                           = 0x1c0\n\tS_ISGID                           = 0x400\n\tS_ISTXT                           = 0x200\n\tS_ISUID                           = 0x800\n\tS_ISVTX                           = 0x200\n\tS_IWGRP                           = 0x10\n\tS_IWOTH                           = 0x2\n\tS_IWRITE                          = 0x80\n\tS_IWUSR                           = 0x80\n\tS_IXGRP                           = 0x8\n\tS_IXOTH                           = 0x1\n\tS_IXUSR                           = 0x40\n\tTCIFLUSH                          = 0x1\n\tTCIOFF                            = 0x3\n\tTCIOFLUSH                         = 0x3\n\tTCION                             = 0x4\n\tTCOFLUSH                          = 0x2\n\tTCOOFF                            = 0x1\n\tTCOON                             = 0x2\n\tTCP_MAXBURST                      = 0x4\n\tTCP_MAXSEG                        = 0x2\n\tTCP_MAXWIN                        = 0xffff\n\tTCP_MAX_SACK                      = 0x3\n\tTCP_MAX_WINSHIFT                  = 0xe\n\tTCP_MD5SIG                        = 0x4\n\tTCP_MSS                           = 0x200\n\tTCP_NODELAY                       = 0x1\n\tTCP_NOPUSH                        = 0x10\n\tTCP_SACK_ENABLE                   = 0x8\n\tTCSAFLUSH                         = 0x2\n\tTIOCCBRK                          = 0x2000747a\n\tTIOCCDTR                          = 0x20007478\n\tTIOCCHKVERAUTH                    = 0x2000741e\n\tTIOCCLRVERAUTH                    = 0x2000741d\n\tTIOCCONS                          = 0x80047462\n\tTIOCDRAIN                         = 0x2000745e\n\tTIOCEXCL                          = 0x2000740d\n\tTIOCEXT                           = 0x80047460\n\tTIOCFLAG_CLOCAL                   = 0x2\n\tTIOCFLAG_CRTSCTS                  = 0x4\n\tTIOCFLAG_MDMBUF                   = 0x8\n\tTIOCFLAG_PPS                      = 0x10\n\tTIOCFLAG_SOFTCAR                  = 0x1\n\tTIOCFLUSH                         = 0x80047410\n\tTIOCGETA                          = 0x402c7413\n\tTIOCGETD                          = 0x4004741a\n\tTIOCGFLAGS                        = 0x4004745d\n\tTIOCGPGRP                         = 0x40047477\n\tTIOCGSID                          = 0x40047463\n\tTIOCGTSTAMP                       = 0x4010745b\n\tTIOCGWINSZ                        = 0x40087468\n\tTIOCMBIC                          = 0x8004746b\n\tTIOCMBIS                          = 0x8004746c\n\tTIOCMGET                          = 0x4004746a\n\tTIOCMODG                          = 0x4004746a\n\tTIOCMODS                          = 0x8004746d\n\tTIOCMSET                          = 0x8004746d\n\tTIOCM_CAR                         = 0x40\n\tTIOCM_CD                          = 0x40\n\tTIOCM_CTS                         = 0x20\n\tTIOCM_DSR                         = 0x100\n\tTIOCM_DTR                         = 0x2\n\tTIOCM_LE                          = 0x1\n\tTIOCM_RI                          = 0x80\n\tTIOCM_RNG                         = 0x80\n\tTIOCM_RTS                         = 0x4\n\tTIOCM_SR                          = 0x10\n\tTIOCM_ST                          = 0x8\n\tTIOCNOTTY                         = 0x20007471\n\tTIOCNXCL                          = 0x2000740e\n\tTIOCOUTQ                          = 0x40047473\n\tTIOCPKT                           = 0x80047470\n\tTIOCPKT_DATA                      = 0x0\n\tTIOCPKT_DOSTOP                    = 0x20\n\tTIOCPKT_FLUSHREAD                 = 0x1\n\tTIOCPKT_FLUSHWRITE                = 0x2\n\tTIOCPKT_IOCTL                     = 0x40\n\tTIOCPKT_NOSTOP                    = 0x10\n\tTIOCPKT_START                     = 0x8\n\tTIOCPKT_STOP                      = 0x4\n\tTIOCREMOTE                        = 0x80047469\n\tTIOCSBRK                          = 0x2000747b\n\tTIOCSCTTY                         = 0x20007461\n\tTIOCSDTR                          = 0x20007479\n\tTIOCSETA                          = 0x802c7414\n\tTIOCSETAF                         = 0x802c7416\n\tTIOCSETAW                         = 0x802c7415\n\tTIOCSETD                          = 0x8004741b\n\tTIOCSETVERAUTH                    = 0x8004741c\n\tTIOCSFLAGS                        = 0x8004745c\n\tTIOCSIG                           = 0x8004745f\n\tTIOCSPGRP                         = 0x80047476\n\tTIOCSTART                         = 0x2000746e\n\tTIOCSTAT                          = 0x20007465\n\tTIOCSTI                           = 0x80017472\n\tTIOCSTOP                          = 0x2000746f\n\tTIOCSTSTAMP                       = 0x8008745a\n\tTIOCSWINSZ                        = 0x80087467\n\tTIOCUCNTL                         = 0x80047466\n\tTIOCUCNTL_CBRK                    = 0x7a\n\tTIOCUCNTL_SBRK                    = 0x7b\n\tTOSTOP                            = 0x400000\n\tUTIME_NOW                         = -0x2\n\tUTIME_OMIT                        = -0x1\n\tVDISCARD                          = 0xf\n\tVDSUSP                            = 0xb\n\tVEOF                              = 0x0\n\tVEOL                              = 0x1\n\tVEOL2                             = 0x2\n\tVERASE                            = 0x3\n\tVINTR                             = 0x8\n\tVKILL                             = 0x5\n\tVLNEXT                            = 0xe\n\tVMIN                              = 0x10\n\tVM_ANONMIN                        = 0x7\n\tVM_LOADAVG                        = 0x2\n\tVM_MAXID                          = 0xc\n\tVM_MAXSLP                         = 0xa\n\tVM_METER                          = 0x1\n\tVM_NKMEMPAGES                     = 0x6\n\tVM_PSSTRINGS                      = 0x3\n\tVM_SWAPENCRYPT                    = 0x5\n\tVM_USPACE                         = 0xb\n\tVM_UVMEXP                         = 0x4\n\tVM_VNODEMIN                       = 0x9\n\tVM_VTEXTMIN                       = 0x8\n\tVQUIT                             = 0x9\n\tVREPRINT                          = 0x6\n\tVSTART                            = 0xc\n\tVSTATUS                           = 0x12\n\tVSTOP                             = 0xd\n\tVSUSP                             = 0xa\n\tVTIME                             = 0x11\n\tVWERASE                           = 0x4\n\tWALTSIG                           = 0x4\n\tWCONTINUED                        = 0x8\n\tWCOREFLAG                         = 0x80\n\tWNOHANG                           = 0x1\n\tWUNTRACED                         = 0x2\n\tXCASE                             = 0x1000000\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x30)\n\tEADDRNOTAVAIL   = syscall.Errno(0x31)\n\tEAFNOSUPPORT    = syscall.Errno(0x2f)\n\tEAGAIN          = syscall.Errno(0x23)\n\tEALREADY        = syscall.Errno(0x25)\n\tEAUTH           = syscall.Errno(0x50)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADMSG         = syscall.Errno(0x5c)\n\tEBADRPC         = syscall.Errno(0x48)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x58)\n\tECHILD          = syscall.Errno(0xa)\n\tECONNABORTED    = syscall.Errno(0x35)\n\tECONNREFUSED    = syscall.Errno(0x3d)\n\tECONNRESET      = syscall.Errno(0x36)\n\tEDEADLK         = syscall.Errno(0xb)\n\tEDESTADDRREQ    = syscall.Errno(0x27)\n\tEDOM            = syscall.Errno(0x21)\n\tEDQUOT          = syscall.Errno(0x45)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFTYPE          = syscall.Errno(0x4f)\n\tEHOSTDOWN       = syscall.Errno(0x40)\n\tEHOSTUNREACH    = syscall.Errno(0x41)\n\tEIDRM           = syscall.Errno(0x59)\n\tEILSEQ          = syscall.Errno(0x54)\n\tEINPROGRESS     = syscall.Errno(0x24)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEIPSEC          = syscall.Errno(0x52)\n\tEISCONN         = syscall.Errno(0x38)\n\tEISDIR          = syscall.Errno(0x15)\n\tELAST           = syscall.Errno(0x5f)\n\tELOOP           = syscall.Errno(0x3e)\n\tEMEDIUMTYPE     = syscall.Errno(0x56)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x28)\n\tENAMETOOLONG    = syscall.Errno(0x3f)\n\tENEEDAUTH       = syscall.Errno(0x51)\n\tENETDOWN        = syscall.Errno(0x32)\n\tENETRESET       = syscall.Errno(0x34)\n\tENETUNREACH     = syscall.Errno(0x33)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x53)\n\tENOBUFS         = syscall.Errno(0x37)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x4d)\n\tENOMEDIUM       = syscall.Errno(0x55)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x5a)\n\tENOPROTOOPT     = syscall.Errno(0x2a)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSYS          = syscall.Errno(0x4e)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x39)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x42)\n\tENOTRECOVERABLE = syscall.Errno(0x5d)\n\tENOTSOCK        = syscall.Errno(0x26)\n\tENOTSUP         = syscall.Errno(0x5b)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x2d)\n\tEOVERFLOW       = syscall.Errno(0x57)\n\tEOWNERDEAD      = syscall.Errno(0x5e)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x2e)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x43)\n\tEPROCUNAVAIL    = syscall.Errno(0x4c)\n\tEPROGMISMATCH   = syscall.Errno(0x4b)\n\tEPROGUNAVAIL    = syscall.Errno(0x4a)\n\tEPROTO          = syscall.Errno(0x5f)\n\tEPROTONOSUPPORT = syscall.Errno(0x2b)\n\tEPROTOTYPE      = syscall.Errno(0x29)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x47)\n\tEROFS           = syscall.Errno(0x1e)\n\tERPCMISMATCH    = syscall.Errno(0x49)\n\tESHUTDOWN       = syscall.Errno(0x3a)\n\tESOCKTNOSUPPORT = syscall.Errno(0x2c)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x46)\n\tETIMEDOUT       = syscall.Errno(0x3c)\n\tETOOMANYREFS    = syscall.Errno(0x3b)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUSERS          = syscall.Errno(0x44)\n\tEWOULDBLOCK     = syscall.Errno(0x23)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x14)\n\tSIGCONT   = syscall.Signal(0x13)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINFO   = syscall.Signal(0x1d)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x17)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTOP   = syscall.Signal(0x11)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTHR    = syscall.Signal(0x20)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x12)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x10)\n\tSIGUSR1   = syscall.Signal(0x1e)\n\tSIGUSR2   = syscall.Signal(0x1f)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"device not configured\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"operation not supported by device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large\"},\n\t{35, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{36, \"EINPROGRESS\", \"operation now in progress\"},\n\t{37, \"EALREADY\", \"operation already in progress\"},\n\t{38, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{39, \"EDESTADDRREQ\", \"destination address required\"},\n\t{40, \"EMSGSIZE\", \"message too long\"},\n\t{41, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{42, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{43, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{44, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{45, \"EOPNOTSUPP\", \"operation not supported\"},\n\t{46, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{47, \"EAFNOSUPPORT\", \"address family not supported by protocol family\"},\n\t{48, \"EADDRINUSE\", \"address already in use\"},\n\t{49, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{50, \"ENETDOWN\", \"network is down\"},\n\t{51, \"ENETUNREACH\", \"network is unreachable\"},\n\t{52, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{53, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{54, \"ECONNRESET\", \"connection reset by peer\"},\n\t{55, \"ENOBUFS\", \"no buffer space available\"},\n\t{56, \"EISCONN\", \"socket is already connected\"},\n\t{57, \"ENOTCONN\", \"socket is not connected\"},\n\t{58, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{59, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{60, \"ETIMEDOUT\", \"operation timed out\"},\n\t{61, \"ECONNREFUSED\", \"connection refused\"},\n\t{62, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{63, \"ENAMETOOLONG\", \"file name too long\"},\n\t{64, \"EHOSTDOWN\", \"host is down\"},\n\t{65, \"EHOSTUNREACH\", \"no route to host\"},\n\t{66, \"ENOTEMPTY\", \"directory not empty\"},\n\t{67, \"EPROCLIM\", \"too many processes\"},\n\t{68, \"EUSERS\", \"too many users\"},\n\t{69, \"EDQUOT\", \"disk quota exceeded\"},\n\t{70, \"ESTALE\", \"stale NFS file handle\"},\n\t{71, \"EREMOTE\", \"too many levels of remote in path\"},\n\t{72, \"EBADRPC\", \"RPC struct is bad\"},\n\t{73, \"ERPCMISMATCH\", \"RPC version wrong\"},\n\t{74, \"EPROGUNAVAIL\", \"RPC program not available\"},\n\t{75, \"EPROGMISMATCH\", \"program version wrong\"},\n\t{76, \"EPROCUNAVAIL\", \"bad procedure for program\"},\n\t{77, \"ENOLCK\", \"no locks available\"},\n\t{78, \"ENOSYS\", \"function not implemented\"},\n\t{79, \"EFTYPE\", \"inappropriate file type or format\"},\n\t{80, \"EAUTH\", \"authentication error\"},\n\t{81, \"ENEEDAUTH\", \"need authenticator\"},\n\t{82, \"EIPSEC\", \"IPsec processing failure\"},\n\t{83, \"ENOATTR\", \"attribute not found\"},\n\t{84, \"EILSEQ\", \"illegal byte sequence\"},\n\t{85, \"ENOMEDIUM\", \"no medium found\"},\n\t{86, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{87, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n\t{88, \"ECANCELED\", \"operation canceled\"},\n\t{89, \"EIDRM\", \"identifier removed\"},\n\t{90, \"ENOMSG\", \"no message of desired type\"},\n\t{91, \"ENOTSUP\", \"not supported\"},\n\t{92, \"EBADMSG\", \"bad message\"},\n\t{93, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{94, \"EOWNERDEAD\", \"previous owner died\"},\n\t{95, \"ELAST\", \"protocol error\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGABRT\", \"abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"suspended (signal)\"},\n\t{18, \"SIGTSTP\", \"suspended\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGINFO\", \"information request\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n\t{32, \"SIGTHR\", \"thread AST\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_openbsd_arm.go",
    "content": "// mkerrors.sh\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs -- _const.go\n\n// +build arm,openbsd\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                      = 0x10\n\tAF_BLUETOOTH                      = 0x20\n\tAF_CCITT                          = 0xa\n\tAF_CHAOS                          = 0x5\n\tAF_CNT                            = 0x15\n\tAF_COIP                           = 0x14\n\tAF_DATAKIT                        = 0x9\n\tAF_DECnet                         = 0xc\n\tAF_DLI                            = 0xd\n\tAF_E164                           = 0x1a\n\tAF_ECMA                           = 0x8\n\tAF_ENCAP                          = 0x1c\n\tAF_HYLINK                         = 0xf\n\tAF_IMPLINK                        = 0x3\n\tAF_INET                           = 0x2\n\tAF_INET6                          = 0x18\n\tAF_IPX                            = 0x17\n\tAF_ISDN                           = 0x1a\n\tAF_ISO                            = 0x7\n\tAF_KEY                            = 0x1e\n\tAF_LAT                            = 0xe\n\tAF_LINK                           = 0x12\n\tAF_LOCAL                          = 0x1\n\tAF_MAX                            = 0x24\n\tAF_MPLS                           = 0x21\n\tAF_NATM                           = 0x1b\n\tAF_NS                             = 0x6\n\tAF_OSI                            = 0x7\n\tAF_PUP                            = 0x4\n\tAF_ROUTE                          = 0x11\n\tAF_SIP                            = 0x1d\n\tAF_SNA                            = 0xb\n\tAF_UNIX                           = 0x1\n\tAF_UNSPEC                         = 0x0\n\tARPHRD_ETHER                      = 0x1\n\tARPHRD_FRELAY                     = 0xf\n\tARPHRD_IEEE1394                   = 0x18\n\tARPHRD_IEEE802                    = 0x6\n\tB0                                = 0x0\n\tB110                              = 0x6e\n\tB115200                           = 0x1c200\n\tB1200                             = 0x4b0\n\tB134                              = 0x86\n\tB14400                            = 0x3840\n\tB150                              = 0x96\n\tB1800                             = 0x708\n\tB19200                            = 0x4b00\n\tB200                              = 0xc8\n\tB230400                           = 0x38400\n\tB2400                             = 0x960\n\tB28800                            = 0x7080\n\tB300                              = 0x12c\n\tB38400                            = 0x9600\n\tB4800                             = 0x12c0\n\tB50                               = 0x32\n\tB57600                            = 0xe100\n\tB600                              = 0x258\n\tB7200                             = 0x1c20\n\tB75                               = 0x4b\n\tB76800                            = 0x12c00\n\tB9600                             = 0x2580\n\tBIOCFLUSH                         = 0x20004268\n\tBIOCGBLEN                         = 0x40044266\n\tBIOCGDIRFILT                      = 0x4004427c\n\tBIOCGDLT                          = 0x4004426a\n\tBIOCGDLTLIST                      = 0xc008427b\n\tBIOCGETIF                         = 0x4020426b\n\tBIOCGFILDROP                      = 0x40044278\n\tBIOCGHDRCMPLT                     = 0x40044274\n\tBIOCGRSIG                         = 0x40044273\n\tBIOCGRTIMEOUT                     = 0x400c426e\n\tBIOCGSTATS                        = 0x4008426f\n\tBIOCIMMEDIATE                     = 0x80044270\n\tBIOCLOCK                          = 0x20004276\n\tBIOCPROMISC                       = 0x20004269\n\tBIOCSBLEN                         = 0xc0044266\n\tBIOCSDIRFILT                      = 0x8004427d\n\tBIOCSDLT                          = 0x8004427a\n\tBIOCSETF                          = 0x80084267\n\tBIOCSETIF                         = 0x8020426c\n\tBIOCSETWF                         = 0x80084277\n\tBIOCSFILDROP                      = 0x80044279\n\tBIOCSHDRCMPLT                     = 0x80044275\n\tBIOCSRSIG                         = 0x80044272\n\tBIOCSRTIMEOUT                     = 0x800c426d\n\tBIOCVERSION                       = 0x40044271\n\tBPF_A                             = 0x10\n\tBPF_ABS                           = 0x20\n\tBPF_ADD                           = 0x0\n\tBPF_ALIGNMENT                     = 0x4\n\tBPF_ALU                           = 0x4\n\tBPF_AND                           = 0x50\n\tBPF_B                             = 0x10\n\tBPF_DIRECTION_IN                  = 0x1\n\tBPF_DIRECTION_OUT                 = 0x2\n\tBPF_DIV                           = 0x30\n\tBPF_H                             = 0x8\n\tBPF_IMM                           = 0x0\n\tBPF_IND                           = 0x40\n\tBPF_JA                            = 0x0\n\tBPF_JEQ                           = 0x10\n\tBPF_JGE                           = 0x30\n\tBPF_JGT                           = 0x20\n\tBPF_JMP                           = 0x5\n\tBPF_JSET                          = 0x40\n\tBPF_K                             = 0x0\n\tBPF_LD                            = 0x0\n\tBPF_LDX                           = 0x1\n\tBPF_LEN                           = 0x80\n\tBPF_LSH                           = 0x60\n\tBPF_MAJOR_VERSION                 = 0x1\n\tBPF_MAXBUFSIZE                    = 0x200000\n\tBPF_MAXINSNS                      = 0x200\n\tBPF_MEM                           = 0x60\n\tBPF_MEMWORDS                      = 0x10\n\tBPF_MINBUFSIZE                    = 0x20\n\tBPF_MINOR_VERSION                 = 0x1\n\tBPF_MISC                          = 0x7\n\tBPF_MSH                           = 0xa0\n\tBPF_MUL                           = 0x20\n\tBPF_NEG                           = 0x80\n\tBPF_OR                            = 0x40\n\tBPF_RELEASE                       = 0x30bb6\n\tBPF_RET                           = 0x6\n\tBPF_RSH                           = 0x70\n\tBPF_ST                            = 0x2\n\tBPF_STX                           = 0x3\n\tBPF_SUB                           = 0x10\n\tBPF_TAX                           = 0x0\n\tBPF_TXA                           = 0x80\n\tBPF_W                             = 0x0\n\tBPF_X                             = 0x8\n\tBRKINT                            = 0x2\n\tCFLUSH                            = 0xf\n\tCLOCAL                            = 0x8000\n\tCREAD                             = 0x800\n\tCRTSCTS                           = 0x10000\n\tCS5                               = 0x0\n\tCS6                               = 0x100\n\tCS7                               = 0x200\n\tCS8                               = 0x300\n\tCSIZE                             = 0x300\n\tCSTART                            = 0x11\n\tCSTATUS                           = 0xff\n\tCSTOP                             = 0x13\n\tCSTOPB                            = 0x400\n\tCSUSP                             = 0x1a\n\tCTL_HW                            = 0x6\n\tCTL_KERN                          = 0x1\n\tCTL_MAXNAME                       = 0xc\n\tCTL_NET                           = 0x4\n\tDIOCOSFPFLUSH                     = 0x2000444e\n\tDLT_ARCNET                        = 0x7\n\tDLT_ATM_RFC1483                   = 0xb\n\tDLT_AX25                          = 0x3\n\tDLT_CHAOS                         = 0x5\n\tDLT_C_HDLC                        = 0x68\n\tDLT_EN10MB                        = 0x1\n\tDLT_EN3MB                         = 0x2\n\tDLT_ENC                           = 0xd\n\tDLT_FDDI                          = 0xa\n\tDLT_IEEE802                       = 0x6\n\tDLT_IEEE802_11                    = 0x69\n\tDLT_IEEE802_11_RADIO              = 0x7f\n\tDLT_LOOP                          = 0xc\n\tDLT_MPLS                          = 0xdb\n\tDLT_NULL                          = 0x0\n\tDLT_PFLOG                         = 0x75\n\tDLT_PFSYNC                        = 0x12\n\tDLT_PPP                           = 0x9\n\tDLT_PPP_BSDOS                     = 0x10\n\tDLT_PPP_ETHER                     = 0x33\n\tDLT_PPP_SERIAL                    = 0x32\n\tDLT_PRONET                        = 0x4\n\tDLT_RAW                           = 0xe\n\tDLT_SLIP                          = 0x8\n\tDLT_SLIP_BSDOS                    = 0xf\n\tDT_BLK                            = 0x6\n\tDT_CHR                            = 0x2\n\tDT_DIR                            = 0x4\n\tDT_FIFO                           = 0x1\n\tDT_LNK                            = 0xa\n\tDT_REG                            = 0x8\n\tDT_SOCK                           = 0xc\n\tDT_UNKNOWN                        = 0x0\n\tECHO                              = 0x8\n\tECHOCTL                           = 0x40\n\tECHOE                             = 0x2\n\tECHOK                             = 0x4\n\tECHOKE                            = 0x1\n\tECHONL                            = 0x10\n\tECHOPRT                           = 0x20\n\tEMT_TAGOVF                        = 0x1\n\tEMUL_ENABLED                      = 0x1\n\tEMUL_NATIVE                       = 0x2\n\tENDRUNDISC                        = 0x9\n\tETHERMIN                          = 0x2e\n\tETHERMTU                          = 0x5dc\n\tETHERTYPE_8023                    = 0x4\n\tETHERTYPE_AARP                    = 0x80f3\n\tETHERTYPE_ACCTON                  = 0x8390\n\tETHERTYPE_AEONIC                  = 0x8036\n\tETHERTYPE_ALPHA                   = 0x814a\n\tETHERTYPE_AMBER                   = 0x6008\n\tETHERTYPE_AMOEBA                  = 0x8145\n\tETHERTYPE_AOE                     = 0x88a2\n\tETHERTYPE_APOLLO                  = 0x80f7\n\tETHERTYPE_APOLLODOMAIN            = 0x8019\n\tETHERTYPE_APPLETALK               = 0x809b\n\tETHERTYPE_APPLITEK                = 0x80c7\n\tETHERTYPE_ARGONAUT                = 0x803a\n\tETHERTYPE_ARP                     = 0x806\n\tETHERTYPE_AT                      = 0x809b\n\tETHERTYPE_ATALK                   = 0x809b\n\tETHERTYPE_ATOMIC                  = 0x86df\n\tETHERTYPE_ATT                     = 0x8069\n\tETHERTYPE_ATTSTANFORD             = 0x8008\n\tETHERTYPE_AUTOPHON                = 0x806a\n\tETHERTYPE_AXIS                    = 0x8856\n\tETHERTYPE_BCLOOP                  = 0x9003\n\tETHERTYPE_BOFL                    = 0x8102\n\tETHERTYPE_CABLETRON               = 0x7034\n\tETHERTYPE_CHAOS                   = 0x804\n\tETHERTYPE_COMDESIGN               = 0x806c\n\tETHERTYPE_COMPUGRAPHIC            = 0x806d\n\tETHERTYPE_COUNTERPOINT            = 0x8062\n\tETHERTYPE_CRONUS                  = 0x8004\n\tETHERTYPE_CRONUSVLN               = 0x8003\n\tETHERTYPE_DCA                     = 0x1234\n\tETHERTYPE_DDE                     = 0x807b\n\tETHERTYPE_DEBNI                   = 0xaaaa\n\tETHERTYPE_DECAM                   = 0x8048\n\tETHERTYPE_DECCUST                 = 0x6006\n\tETHERTYPE_DECDIAG                 = 0x6005\n\tETHERTYPE_DECDNS                  = 0x803c\n\tETHERTYPE_DECDTS                  = 0x803e\n\tETHERTYPE_DECEXPER                = 0x6000\n\tETHERTYPE_DECLAST                 = 0x8041\n\tETHERTYPE_DECLTM                  = 0x803f\n\tETHERTYPE_DECMUMPS                = 0x6009\n\tETHERTYPE_DECNETBIOS              = 0x8040\n\tETHERTYPE_DELTACON                = 0x86de\n\tETHERTYPE_DIDDLE                  = 0x4321\n\tETHERTYPE_DLOG1                   = 0x660\n\tETHERTYPE_DLOG2                   = 0x661\n\tETHERTYPE_DN                      = 0x6003\n\tETHERTYPE_DOGFIGHT                = 0x1989\n\tETHERTYPE_DSMD                    = 0x8039\n\tETHERTYPE_ECMA                    = 0x803\n\tETHERTYPE_ENCRYPT                 = 0x803d\n\tETHERTYPE_ES                      = 0x805d\n\tETHERTYPE_EXCELAN                 = 0x8010\n\tETHERTYPE_EXPERDATA               = 0x8049\n\tETHERTYPE_FLIP                    = 0x8146\n\tETHERTYPE_FLOWCONTROL             = 0x8808\n\tETHERTYPE_FRARP                   = 0x808\n\tETHERTYPE_GENDYN                  = 0x8068\n\tETHERTYPE_HAYES                   = 0x8130\n\tETHERTYPE_HIPPI_FP                = 0x8180\n\tETHERTYPE_HITACHI                 = 0x8820\n\tETHERTYPE_HP                      = 0x8005\n\tETHERTYPE_IEEEPUP                 = 0xa00\n\tETHERTYPE_IEEEPUPAT               = 0xa01\n\tETHERTYPE_IMLBL                   = 0x4c42\n\tETHERTYPE_IMLBLDIAG               = 0x424c\n\tETHERTYPE_IP                      = 0x800\n\tETHERTYPE_IPAS                    = 0x876c\n\tETHERTYPE_IPV6                    = 0x86dd\n\tETHERTYPE_IPX                     = 0x8137\n\tETHERTYPE_IPXNEW                  = 0x8037\n\tETHERTYPE_KALPANA                 = 0x8582\n\tETHERTYPE_LANBRIDGE               = 0x8038\n\tETHERTYPE_LANPROBE                = 0x8888\n\tETHERTYPE_LAT                     = 0x6004\n\tETHERTYPE_LBACK                   = 0x9000\n\tETHERTYPE_LITTLE                  = 0x8060\n\tETHERTYPE_LLDP                    = 0x88cc\n\tETHERTYPE_LOGICRAFT               = 0x8148\n\tETHERTYPE_LOOPBACK                = 0x9000\n\tETHERTYPE_MATRA                   = 0x807a\n\tETHERTYPE_MAX                     = 0xffff\n\tETHERTYPE_MERIT                   = 0x807c\n\tETHERTYPE_MICP                    = 0x873a\n\tETHERTYPE_MOPDL                   = 0x6001\n\tETHERTYPE_MOPRC                   = 0x6002\n\tETHERTYPE_MOTOROLA                = 0x818d\n\tETHERTYPE_MPLS                    = 0x8847\n\tETHERTYPE_MPLS_MCAST              = 0x8848\n\tETHERTYPE_MUMPS                   = 0x813f\n\tETHERTYPE_NBPCC                   = 0x3c04\n\tETHERTYPE_NBPCLAIM                = 0x3c09\n\tETHERTYPE_NBPCLREQ                = 0x3c05\n\tETHERTYPE_NBPCLRSP                = 0x3c06\n\tETHERTYPE_NBPCREQ                 = 0x3c02\n\tETHERTYPE_NBPCRSP                 = 0x3c03\n\tETHERTYPE_NBPDG                   = 0x3c07\n\tETHERTYPE_NBPDGB                  = 0x3c08\n\tETHERTYPE_NBPDLTE                 = 0x3c0a\n\tETHERTYPE_NBPRAR                  = 0x3c0c\n\tETHERTYPE_NBPRAS                  = 0x3c0b\n\tETHERTYPE_NBPRST                  = 0x3c0d\n\tETHERTYPE_NBPSCD                  = 0x3c01\n\tETHERTYPE_NBPVCD                  = 0x3c00\n\tETHERTYPE_NBS                     = 0x802\n\tETHERTYPE_NCD                     = 0x8149\n\tETHERTYPE_NESTAR                  = 0x8006\n\tETHERTYPE_NETBEUI                 = 0x8191\n\tETHERTYPE_NOVELL                  = 0x8138\n\tETHERTYPE_NS                      = 0x600\n\tETHERTYPE_NSAT                    = 0x601\n\tETHERTYPE_NSCOMPAT                = 0x807\n\tETHERTYPE_NTRAILER                = 0x10\n\tETHERTYPE_OS9                     = 0x7007\n\tETHERTYPE_OS9NET                  = 0x7009\n\tETHERTYPE_PACER                   = 0x80c6\n\tETHERTYPE_PAE                     = 0x888e\n\tETHERTYPE_PCS                     = 0x4242\n\tETHERTYPE_PLANNING                = 0x8044\n\tETHERTYPE_PPP                     = 0x880b\n\tETHERTYPE_PPPOE                   = 0x8864\n\tETHERTYPE_PPPOEDISC               = 0x8863\n\tETHERTYPE_PRIMENTS                = 0x7031\n\tETHERTYPE_PUP                     = 0x200\n\tETHERTYPE_PUPAT                   = 0x200\n\tETHERTYPE_QINQ                    = 0x88a8\n\tETHERTYPE_RACAL                   = 0x7030\n\tETHERTYPE_RATIONAL                = 0x8150\n\tETHERTYPE_RAWFR                   = 0x6559\n\tETHERTYPE_RCL                     = 0x1995\n\tETHERTYPE_RDP                     = 0x8739\n\tETHERTYPE_RETIX                   = 0x80f2\n\tETHERTYPE_REVARP                  = 0x8035\n\tETHERTYPE_SCA                     = 0x6007\n\tETHERTYPE_SECTRA                  = 0x86db\n\tETHERTYPE_SECUREDATA              = 0x876d\n\tETHERTYPE_SGITW                   = 0x817e\n\tETHERTYPE_SG_BOUNCE               = 0x8016\n\tETHERTYPE_SG_DIAG                 = 0x8013\n\tETHERTYPE_SG_NETGAMES             = 0x8014\n\tETHERTYPE_SG_RESV                 = 0x8015\n\tETHERTYPE_SIMNET                  = 0x5208\n\tETHERTYPE_SLOW                    = 0x8809\n\tETHERTYPE_SNA                     = 0x80d5\n\tETHERTYPE_SNMP                    = 0x814c\n\tETHERTYPE_SONIX                   = 0xfaf5\n\tETHERTYPE_SPIDER                  = 0x809f\n\tETHERTYPE_SPRITE                  = 0x500\n\tETHERTYPE_STP                     = 0x8181\n\tETHERTYPE_TALARIS                 = 0x812b\n\tETHERTYPE_TALARISMC               = 0x852b\n\tETHERTYPE_TCPCOMP                 = 0x876b\n\tETHERTYPE_TCPSM                   = 0x9002\n\tETHERTYPE_TEC                     = 0x814f\n\tETHERTYPE_TIGAN                   = 0x802f\n\tETHERTYPE_TRAIL                   = 0x1000\n\tETHERTYPE_TRANSETHER              = 0x6558\n\tETHERTYPE_TYMSHARE                = 0x802e\n\tETHERTYPE_UBBST                   = 0x7005\n\tETHERTYPE_UBDEBUG                 = 0x900\n\tETHERTYPE_UBDIAGLOOP              = 0x7002\n\tETHERTYPE_UBDL                    = 0x7000\n\tETHERTYPE_UBNIU                   = 0x7001\n\tETHERTYPE_UBNMC                   = 0x7003\n\tETHERTYPE_VALID                   = 0x1600\n\tETHERTYPE_VARIAN                  = 0x80dd\n\tETHERTYPE_VAXELN                  = 0x803b\n\tETHERTYPE_VEECO                   = 0x8067\n\tETHERTYPE_VEXP                    = 0x805b\n\tETHERTYPE_VGLAB                   = 0x8131\n\tETHERTYPE_VINES                   = 0xbad\n\tETHERTYPE_VINESECHO               = 0xbaf\n\tETHERTYPE_VINESLOOP               = 0xbae\n\tETHERTYPE_VITAL                   = 0xff00\n\tETHERTYPE_VLAN                    = 0x8100\n\tETHERTYPE_VLTLMAN                 = 0x8080\n\tETHERTYPE_VPROD                   = 0x805c\n\tETHERTYPE_VURESERVED              = 0x8147\n\tETHERTYPE_WATERLOO                = 0x8130\n\tETHERTYPE_WELLFLEET               = 0x8103\n\tETHERTYPE_X25                     = 0x805\n\tETHERTYPE_X75                     = 0x801\n\tETHERTYPE_XNSSM                   = 0x9001\n\tETHERTYPE_XTP                     = 0x817d\n\tETHER_ADDR_LEN                    = 0x6\n\tETHER_ALIGN                       = 0x2\n\tETHER_CRC_LEN                     = 0x4\n\tETHER_CRC_POLY_BE                 = 0x4c11db6\n\tETHER_CRC_POLY_LE                 = 0xedb88320\n\tETHER_HDR_LEN                     = 0xe\n\tETHER_MAX_DIX_LEN                 = 0x600\n\tETHER_MAX_LEN                     = 0x5ee\n\tETHER_MIN_LEN                     = 0x40\n\tETHER_TYPE_LEN                    = 0x2\n\tETHER_VLAN_ENCAP_LEN              = 0x4\n\tEVFILT_AIO                        = -0x3\n\tEVFILT_PROC                       = -0x5\n\tEVFILT_READ                       = -0x1\n\tEVFILT_SIGNAL                     = -0x6\n\tEVFILT_SYSCOUNT                   = 0x7\n\tEVFILT_TIMER                      = -0x7\n\tEVFILT_VNODE                      = -0x4\n\tEVFILT_WRITE                      = -0x2\n\tEV_ADD                            = 0x1\n\tEV_CLEAR                          = 0x20\n\tEV_DELETE                         = 0x2\n\tEV_DISABLE                        = 0x8\n\tEV_ENABLE                         = 0x4\n\tEV_EOF                            = 0x8000\n\tEV_ERROR                          = 0x4000\n\tEV_FLAG1                          = 0x2000\n\tEV_ONESHOT                        = 0x10\n\tEV_SYSFLAGS                       = 0xf000\n\tEXTA                              = 0x4b00\n\tEXTB                              = 0x9600\n\tEXTPROC                           = 0x800\n\tFD_CLOEXEC                        = 0x1\n\tFD_SETSIZE                        = 0x400\n\tFLUSHO                            = 0x800000\n\tF_DUPFD                           = 0x0\n\tF_DUPFD_CLOEXEC                   = 0xa\n\tF_GETFD                           = 0x1\n\tF_GETFL                           = 0x3\n\tF_GETLK                           = 0x7\n\tF_GETOWN                          = 0x5\n\tF_RDLCK                           = 0x1\n\tF_SETFD                           = 0x2\n\tF_SETFL                           = 0x4\n\tF_SETLK                           = 0x8\n\tF_SETLKW                          = 0x9\n\tF_SETOWN                          = 0x6\n\tF_UNLCK                           = 0x2\n\tF_WRLCK                           = 0x3\n\tHUPCL                             = 0x4000\n\tHW_MACHINE                        = 0x1\n\tICANON                            = 0x100\n\tICMP6_FILTER                      = 0x12\n\tICRNL                             = 0x100\n\tIEXTEN                            = 0x400\n\tIFAN_ARRIVAL                      = 0x0\n\tIFAN_DEPARTURE                    = 0x1\n\tIFA_ROUTE                         = 0x1\n\tIFF_ALLMULTI                      = 0x200\n\tIFF_BROADCAST                     = 0x2\n\tIFF_CANTCHANGE                    = 0x8e52\n\tIFF_DEBUG                         = 0x4\n\tIFF_LINK0                         = 0x1000\n\tIFF_LINK1                         = 0x2000\n\tIFF_LINK2                         = 0x4000\n\tIFF_LOOPBACK                      = 0x8\n\tIFF_MULTICAST                     = 0x8000\n\tIFF_NOARP                         = 0x80\n\tIFF_NOTRAILERS                    = 0x20\n\tIFF_OACTIVE                       = 0x400\n\tIFF_POINTOPOINT                   = 0x10\n\tIFF_PROMISC                       = 0x100\n\tIFF_RUNNING                       = 0x40\n\tIFF_SIMPLEX                       = 0x800\n\tIFF_UP                            = 0x1\n\tIFNAMSIZ                          = 0x10\n\tIFT_1822                          = 0x2\n\tIFT_A12MPPSWITCH                  = 0x82\n\tIFT_AAL2                          = 0xbb\n\tIFT_AAL5                          = 0x31\n\tIFT_ADSL                          = 0x5e\n\tIFT_AFLANE8023                    = 0x3b\n\tIFT_AFLANE8025                    = 0x3c\n\tIFT_ARAP                          = 0x58\n\tIFT_ARCNET                        = 0x23\n\tIFT_ARCNETPLUS                    = 0x24\n\tIFT_ASYNC                         = 0x54\n\tIFT_ATM                           = 0x25\n\tIFT_ATMDXI                        = 0x69\n\tIFT_ATMFUNI                       = 0x6a\n\tIFT_ATMIMA                        = 0x6b\n\tIFT_ATMLOGICAL                    = 0x50\n\tIFT_ATMRADIO                      = 0xbd\n\tIFT_ATMSUBINTERFACE               = 0x86\n\tIFT_ATMVCIENDPT                   = 0xc2\n\tIFT_ATMVIRTUAL                    = 0x95\n\tIFT_BGPPOLICYACCOUNTING           = 0xa2\n\tIFT_BLUETOOTH                     = 0xf8\n\tIFT_BRIDGE                        = 0xd1\n\tIFT_BSC                           = 0x53\n\tIFT_CARP                          = 0xf7\n\tIFT_CCTEMUL                       = 0x3d\n\tIFT_CEPT                          = 0x13\n\tIFT_CES                           = 0x85\n\tIFT_CHANNEL                       = 0x46\n\tIFT_CNR                           = 0x55\n\tIFT_COFFEE                        = 0x84\n\tIFT_COMPOSITELINK                 = 0x9b\n\tIFT_DCN                           = 0x8d\n\tIFT_DIGITALPOWERLINE              = 0x8a\n\tIFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba\n\tIFT_DLSW                          = 0x4a\n\tIFT_DOCSCABLEDOWNSTREAM           = 0x80\n\tIFT_DOCSCABLEMACLAYER             = 0x7f\n\tIFT_DOCSCABLEUPSTREAM             = 0x81\n\tIFT_DOCSCABLEUPSTREAMCHANNEL      = 0xcd\n\tIFT_DS0                           = 0x51\n\tIFT_DS0BUNDLE                     = 0x52\n\tIFT_DS1FDL                        = 0xaa\n\tIFT_DS3                           = 0x1e\n\tIFT_DTM                           = 0x8c\n\tIFT_DUMMY                         = 0xf1\n\tIFT_DVBASILN                      = 0xac\n\tIFT_DVBASIOUT                     = 0xad\n\tIFT_DVBRCCDOWNSTREAM              = 0x93\n\tIFT_DVBRCCMACLAYER                = 0x92\n\tIFT_DVBRCCUPSTREAM                = 0x94\n\tIFT_ECONET                        = 0xce\n\tIFT_ENC                           = 0xf4\n\tIFT_EON                           = 0x19\n\tIFT_EPLRS                         = 0x57\n\tIFT_ESCON                         = 0x49\n\tIFT_ETHER                         = 0x6\n\tIFT_FAITH                         = 0xf3\n\tIFT_FAST                          = 0x7d\n\tIFT_FASTETHER                     = 0x3e\n\tIFT_FASTETHERFX                   = 0x45\n\tIFT_FDDI                          = 0xf\n\tIFT_FIBRECHANNEL                  = 0x38\n\tIFT_FRAMERELAYINTERCONNECT        = 0x3a\n\tIFT_FRAMERELAYMPI                 = 0x5c\n\tIFT_FRDLCIENDPT                   = 0xc1\n\tIFT_FRELAY                        = 0x20\n\tIFT_FRELAYDCE                     = 0x2c\n\tIFT_FRF16MFRBUNDLE                = 0xa3\n\tIFT_FRFORWARD                     = 0x9e\n\tIFT_G703AT2MB                     = 0x43\n\tIFT_G703AT64K                     = 0x42\n\tIFT_GIF                           = 0xf0\n\tIFT_GIGABITETHERNET               = 0x75\n\tIFT_GR303IDT                      = 0xb2\n\tIFT_GR303RDT                      = 0xb1\n\tIFT_H323GATEKEEPER                = 0xa4\n\tIFT_H323PROXY                     = 0xa5\n\tIFT_HDH1822                       = 0x3\n\tIFT_HDLC                          = 0x76\n\tIFT_HDSL2                         = 0xa8\n\tIFT_HIPERLAN2                     = 0xb7\n\tIFT_HIPPI                         = 0x2f\n\tIFT_HIPPIINTERFACE                = 0x39\n\tIFT_HOSTPAD                       = 0x5a\n\tIFT_HSSI                          = 0x2e\n\tIFT_HY                            = 0xe\n\tIFT_IBM370PARCHAN                 = 0x48\n\tIFT_IDSL                          = 0x9a\n\tIFT_IEEE1394                      = 0x90\n\tIFT_IEEE80211                     = 0x47\n\tIFT_IEEE80212                     = 0x37\n\tIFT_IEEE8023ADLAG                 = 0xa1\n\tIFT_IFGSN                         = 0x91\n\tIFT_IMT                           = 0xbe\n\tIFT_INFINIBAND                    = 0xc7\n\tIFT_INTERLEAVE                    = 0x7c\n\tIFT_IP                            = 0x7e\n\tIFT_IPFORWARD                     = 0x8e\n\tIFT_IPOVERATM                     = 0x72\n\tIFT_IPOVERCDLC                    = 0x6d\n\tIFT_IPOVERCLAW                    = 0x6e\n\tIFT_IPSWITCH                      = 0x4e\n\tIFT_ISDN                          = 0x3f\n\tIFT_ISDNBASIC                     = 0x14\n\tIFT_ISDNPRIMARY                   = 0x15\n\tIFT_ISDNS                         = 0x4b\n\tIFT_ISDNU                         = 0x4c\n\tIFT_ISO88022LLC                   = 0x29\n\tIFT_ISO88023                      = 0x7\n\tIFT_ISO88024                      = 0x8\n\tIFT_ISO88025                      = 0x9\n\tIFT_ISO88025CRFPINT               = 0x62\n\tIFT_ISO88025DTR                   = 0x56\n\tIFT_ISO88025FIBER                 = 0x73\n\tIFT_ISO88026                      = 0xa\n\tIFT_ISUP                          = 0xb3\n\tIFT_L2VLAN                        = 0x87\n\tIFT_L3IPVLAN                      = 0x88\n\tIFT_L3IPXVLAN                     = 0x89\n\tIFT_LAPB                          = 0x10\n\tIFT_LAPD                          = 0x4d\n\tIFT_LAPF                          = 0x77\n\tIFT_LINEGROUP                     = 0xd2\n\tIFT_LOCALTALK                     = 0x2a\n\tIFT_LOOP                          = 0x18\n\tIFT_MEDIAMAILOVERIP               = 0x8b\n\tIFT_MFSIGLINK                     = 0xa7\n\tIFT_MIOX25                        = 0x26\n\tIFT_MODEM                         = 0x30\n\tIFT_MPC                           = 0x71\n\tIFT_MPLS                          = 0xa6\n\tIFT_MPLSTUNNEL                    = 0x96\n\tIFT_MSDSL                         = 0x8f\n\tIFT_MVL                           = 0xbf\n\tIFT_MYRINET                       = 0x63\n\tIFT_NFAS                          = 0xaf\n\tIFT_NSIP                          = 0x1b\n\tIFT_OPTICALCHANNEL                = 0xc3\n\tIFT_OPTICALTRANSPORT              = 0xc4\n\tIFT_OTHER                         = 0x1\n\tIFT_P10                           = 0xc\n\tIFT_P80                           = 0xd\n\tIFT_PARA                          = 0x22\n\tIFT_PFLOG                         = 0xf5\n\tIFT_PFLOW                         = 0xf9\n\tIFT_PFSYNC                        = 0xf6\n\tIFT_PLC                           = 0xae\n\tIFT_PON155                        = 0xcf\n\tIFT_PON622                        = 0xd0\n\tIFT_POS                           = 0xab\n\tIFT_PPP                           = 0x17\n\tIFT_PPPMULTILINKBUNDLE            = 0x6c\n\tIFT_PROPATM                       = 0xc5\n\tIFT_PROPBWAP2MP                   = 0xb8\n\tIFT_PROPCNLS                      = 0x59\n\tIFT_PROPDOCSWIRELESSDOWNSTREAM    = 0xb5\n\tIFT_PROPDOCSWIRELESSMACLAYER      = 0xb4\n\tIFT_PROPDOCSWIRELESSUPSTREAM      = 0xb6\n\tIFT_PROPMUX                       = 0x36\n\tIFT_PROPVIRTUAL                   = 0x35\n\tIFT_PROPWIRELESSP2P               = 0x9d\n\tIFT_PTPSERIAL                     = 0x16\n\tIFT_PVC                           = 0xf2\n\tIFT_Q2931                         = 0xc9\n\tIFT_QLLC                          = 0x44\n\tIFT_RADIOMAC                      = 0xbc\n\tIFT_RADSL                         = 0x5f\n\tIFT_REACHDSL                      = 0xc0\n\tIFT_RFC1483                       = 0x9f\n\tIFT_RS232                         = 0x21\n\tIFT_RSRB                          = 0x4f\n\tIFT_SDLC                          = 0x11\n\tIFT_SDSL                          = 0x60\n\tIFT_SHDSL                         = 0xa9\n\tIFT_SIP                           = 0x1f\n\tIFT_SIPSIG                        = 0xcc\n\tIFT_SIPTG                         = 0xcb\n\tIFT_SLIP                          = 0x1c\n\tIFT_SMDSDXI                       = 0x2b\n\tIFT_SMDSICIP                      = 0x34\n\tIFT_SONET                         = 0x27\n\tIFT_SONETOVERHEADCHANNEL          = 0xb9\n\tIFT_SONETPATH                     = 0x32\n\tIFT_SONETVT                       = 0x33\n\tIFT_SRP                           = 0x97\n\tIFT_SS7SIGLINK                    = 0x9c\n\tIFT_STACKTOSTACK                  = 0x6f\n\tIFT_STARLAN                       = 0xb\n\tIFT_T1                            = 0x12\n\tIFT_TDLC                          = 0x74\n\tIFT_TELINK                        = 0xc8\n\tIFT_TERMPAD                       = 0x5b\n\tIFT_TR008                         = 0xb0\n\tIFT_TRANSPHDLC                    = 0x7b\n\tIFT_TUNNEL                        = 0x83\n\tIFT_ULTRA                         = 0x1d\n\tIFT_USB                           = 0xa0\n\tIFT_V11                           = 0x40\n\tIFT_V35                           = 0x2d\n\tIFT_V36                           = 0x41\n\tIFT_V37                           = 0x78\n\tIFT_VDSL                          = 0x61\n\tIFT_VIRTUALIPADDRESS              = 0x70\n\tIFT_VIRTUALTG                     = 0xca\n\tIFT_VOICEDID                      = 0xd5\n\tIFT_VOICEEM                       = 0x64\n\tIFT_VOICEEMFGD                    = 0xd3\n\tIFT_VOICEENCAP                    = 0x67\n\tIFT_VOICEFGDEANA                  = 0xd4\n\tIFT_VOICEFXO                      = 0x65\n\tIFT_VOICEFXS                      = 0x66\n\tIFT_VOICEOVERATM                  = 0x98\n\tIFT_VOICEOVERCABLE                = 0xc6\n\tIFT_VOICEOVERFRAMERELAY           = 0x99\n\tIFT_VOICEOVERIP                   = 0x68\n\tIFT_X213                          = 0x5d\n\tIFT_X25                           = 0x5\n\tIFT_X25DDN                        = 0x4\n\tIFT_X25HUNTGROUP                  = 0x7a\n\tIFT_X25MLP                        = 0x79\n\tIFT_X25PLE                        = 0x28\n\tIFT_XETHER                        = 0x1a\n\tIGNBRK                            = 0x1\n\tIGNCR                             = 0x80\n\tIGNPAR                            = 0x4\n\tIMAXBEL                           = 0x2000\n\tINLCR                             = 0x40\n\tINPCK                             = 0x10\n\tIN_CLASSA_HOST                    = 0xffffff\n\tIN_CLASSA_MAX                     = 0x80\n\tIN_CLASSA_NET                     = 0xff000000\n\tIN_CLASSA_NSHIFT                  = 0x18\n\tIN_CLASSB_HOST                    = 0xffff\n\tIN_CLASSB_MAX                     = 0x10000\n\tIN_CLASSB_NET                     = 0xffff0000\n\tIN_CLASSB_NSHIFT                  = 0x10\n\tIN_CLASSC_HOST                    = 0xff\n\tIN_CLASSC_NET                     = 0xffffff00\n\tIN_CLASSC_NSHIFT                  = 0x8\n\tIN_CLASSD_HOST                    = 0xfffffff\n\tIN_CLASSD_NET                     = 0xf0000000\n\tIN_CLASSD_NSHIFT                  = 0x1c\n\tIN_LOOPBACKNET                    = 0x7f\n\tIN_RFC3021_HOST                   = 0x1\n\tIN_RFC3021_NET                    = 0xfffffffe\n\tIN_RFC3021_NSHIFT                 = 0x1f\n\tIPPROTO_AH                        = 0x33\n\tIPPROTO_CARP                      = 0x70\n\tIPPROTO_DIVERT                    = 0x102\n\tIPPROTO_DIVERT_INIT               = 0x2\n\tIPPROTO_DIVERT_RESP               = 0x1\n\tIPPROTO_DONE                      = 0x101\n\tIPPROTO_DSTOPTS                   = 0x3c\n\tIPPROTO_EGP                       = 0x8\n\tIPPROTO_ENCAP                     = 0x62\n\tIPPROTO_EON                       = 0x50\n\tIPPROTO_ESP                       = 0x32\n\tIPPROTO_ETHERIP                   = 0x61\n\tIPPROTO_FRAGMENT                  = 0x2c\n\tIPPROTO_GGP                       = 0x3\n\tIPPROTO_GRE                       = 0x2f\n\tIPPROTO_HOPOPTS                   = 0x0\n\tIPPROTO_ICMP                      = 0x1\n\tIPPROTO_ICMPV6                    = 0x3a\n\tIPPROTO_IDP                       = 0x16\n\tIPPROTO_IGMP                      = 0x2\n\tIPPROTO_IP                        = 0x0\n\tIPPROTO_IPCOMP                    = 0x6c\n\tIPPROTO_IPIP                      = 0x4\n\tIPPROTO_IPV4                      = 0x4\n\tIPPROTO_IPV6                      = 0x29\n\tIPPROTO_MAX                       = 0x100\n\tIPPROTO_MAXID                     = 0x103\n\tIPPROTO_MOBILE                    = 0x37\n\tIPPROTO_MPLS                      = 0x89\n\tIPPROTO_NONE                      = 0x3b\n\tIPPROTO_PFSYNC                    = 0xf0\n\tIPPROTO_PIM                       = 0x67\n\tIPPROTO_PUP                       = 0xc\n\tIPPROTO_RAW                       = 0xff\n\tIPPROTO_ROUTING                   = 0x2b\n\tIPPROTO_RSVP                      = 0x2e\n\tIPPROTO_TCP                       = 0x6\n\tIPPROTO_TP                        = 0x1d\n\tIPPROTO_UDP                       = 0x11\n\tIPV6_AUTH_LEVEL                   = 0x35\n\tIPV6_AUTOFLOWLABEL                = 0x3b\n\tIPV6_CHECKSUM                     = 0x1a\n\tIPV6_DEFAULT_MULTICAST_HOPS       = 0x1\n\tIPV6_DEFAULT_MULTICAST_LOOP       = 0x1\n\tIPV6_DEFHLIM                      = 0x40\n\tIPV6_DONTFRAG                     = 0x3e\n\tIPV6_DSTOPTS                      = 0x32\n\tIPV6_ESP_NETWORK_LEVEL            = 0x37\n\tIPV6_ESP_TRANS_LEVEL              = 0x36\n\tIPV6_FAITH                        = 0x1d\n\tIPV6_FLOWINFO_MASK                = 0xffffff0f\n\tIPV6_FLOWLABEL_MASK               = 0xffff0f00\n\tIPV6_FRAGTTL                      = 0x78\n\tIPV6_HLIMDEC                      = 0x1\n\tIPV6_HOPLIMIT                     = 0x2f\n\tIPV6_HOPOPTS                      = 0x31\n\tIPV6_IPCOMP_LEVEL                 = 0x3c\n\tIPV6_JOIN_GROUP                   = 0xc\n\tIPV6_LEAVE_GROUP                  = 0xd\n\tIPV6_MAXHLIM                      = 0xff\n\tIPV6_MAXPACKET                    = 0xffff\n\tIPV6_MMTU                         = 0x500\n\tIPV6_MULTICAST_HOPS               = 0xa\n\tIPV6_MULTICAST_IF                 = 0x9\n\tIPV6_MULTICAST_LOOP               = 0xb\n\tIPV6_NEXTHOP                      = 0x30\n\tIPV6_OPTIONS                      = 0x1\n\tIPV6_PATHMTU                      = 0x2c\n\tIPV6_PIPEX                        = 0x3f\n\tIPV6_PKTINFO                      = 0x2e\n\tIPV6_PORTRANGE                    = 0xe\n\tIPV6_PORTRANGE_DEFAULT            = 0x0\n\tIPV6_PORTRANGE_HIGH               = 0x1\n\tIPV6_PORTRANGE_LOW                = 0x2\n\tIPV6_RECVDSTOPTS                  = 0x28\n\tIPV6_RECVDSTPORT                  = 0x40\n\tIPV6_RECVHOPLIMIT                 = 0x25\n\tIPV6_RECVHOPOPTS                  = 0x27\n\tIPV6_RECVPATHMTU                  = 0x2b\n\tIPV6_RECVPKTINFO                  = 0x24\n\tIPV6_RECVRTHDR                    = 0x26\n\tIPV6_RECVTCLASS                   = 0x39\n\tIPV6_RTABLE                       = 0x1021\n\tIPV6_RTHDR                        = 0x33\n\tIPV6_RTHDRDSTOPTS                 = 0x23\n\tIPV6_RTHDR_LOOSE                  = 0x0\n\tIPV6_RTHDR_STRICT                 = 0x1\n\tIPV6_RTHDR_TYPE_0                 = 0x0\n\tIPV6_SOCKOPT_RESERVED1            = 0x3\n\tIPV6_TCLASS                       = 0x3d\n\tIPV6_UNICAST_HOPS                 = 0x4\n\tIPV6_USE_MIN_MTU                  = 0x2a\n\tIPV6_V6ONLY                       = 0x1b\n\tIPV6_VERSION                      = 0x60\n\tIPV6_VERSION_MASK                 = 0xf0\n\tIP_ADD_MEMBERSHIP                 = 0xc\n\tIP_AUTH_LEVEL                     = 0x14\n\tIP_DEFAULT_MULTICAST_LOOP         = 0x1\n\tIP_DEFAULT_MULTICAST_TTL          = 0x1\n\tIP_DF                             = 0x4000\n\tIP_DIVERTFL                       = 0x1022\n\tIP_DROP_MEMBERSHIP                = 0xd\n\tIP_ESP_NETWORK_LEVEL              = 0x16\n\tIP_ESP_TRANS_LEVEL                = 0x15\n\tIP_HDRINCL                        = 0x2\n\tIP_IPCOMP_LEVEL                   = 0x1d\n\tIP_IPSECFLOWINFO                  = 0x24\n\tIP_IPSEC_LOCAL_AUTH               = 0x1b\n\tIP_IPSEC_LOCAL_CRED               = 0x19\n\tIP_IPSEC_LOCAL_ID                 = 0x17\n\tIP_IPSEC_REMOTE_AUTH              = 0x1c\n\tIP_IPSEC_REMOTE_CRED              = 0x1a\n\tIP_IPSEC_REMOTE_ID                = 0x18\n\tIP_MAXPACKET                      = 0xffff\n\tIP_MAX_MEMBERSHIPS                = 0xfff\n\tIP_MF                             = 0x2000\n\tIP_MINTTL                         = 0x20\n\tIP_MIN_MEMBERSHIPS                = 0xf\n\tIP_MSS                            = 0x240\n\tIP_MULTICAST_IF                   = 0x9\n\tIP_MULTICAST_LOOP                 = 0xb\n\tIP_MULTICAST_TTL                  = 0xa\n\tIP_OFFMASK                        = 0x1fff\n\tIP_OPTIONS                        = 0x1\n\tIP_PIPEX                          = 0x22\n\tIP_PORTRANGE                      = 0x13\n\tIP_PORTRANGE_DEFAULT              = 0x0\n\tIP_PORTRANGE_HIGH                 = 0x1\n\tIP_PORTRANGE_LOW                  = 0x2\n\tIP_RECVDSTADDR                    = 0x7\n\tIP_RECVDSTPORT                    = 0x21\n\tIP_RECVIF                         = 0x1e\n\tIP_RECVOPTS                       = 0x5\n\tIP_RECVRETOPTS                    = 0x6\n\tIP_RECVRTABLE                     = 0x23\n\tIP_RECVTTL                        = 0x1f\n\tIP_RETOPTS                        = 0x8\n\tIP_RF                             = 0x8000\n\tIP_RTABLE                         = 0x1021\n\tIP_TOS                            = 0x3\n\tIP_TTL                            = 0x4\n\tISIG                              = 0x80\n\tISTRIP                            = 0x20\n\tIXANY                             = 0x800\n\tIXOFF                             = 0x400\n\tIXON                              = 0x200\n\tKERN_HOSTNAME                     = 0xa\n\tKERN_OSRELEASE                    = 0x2\n\tKERN_OSTYPE                       = 0x1\n\tKERN_VERSION                      = 0x4\n\tLCNT_OVERLOAD_FLUSH               = 0x6\n\tLOCK_EX                           = 0x2\n\tLOCK_NB                           = 0x4\n\tLOCK_SH                           = 0x1\n\tLOCK_UN                           = 0x8\n\tMADV_DONTNEED                     = 0x4\n\tMADV_FREE                         = 0x6\n\tMADV_NORMAL                       = 0x0\n\tMADV_RANDOM                       = 0x1\n\tMADV_SEQUENTIAL                   = 0x2\n\tMADV_SPACEAVAIL                   = 0x5\n\tMADV_WILLNEED                     = 0x3\n\tMAP_ANON                          = 0x1000\n\tMAP_ANONYMOUS                     = 0x1000\n\tMAP_COPY                          = 0x2\n\tMAP_FILE                          = 0x0\n\tMAP_FIXED                         = 0x10\n\tMAP_FLAGMASK                      = 0x3ff7\n\tMAP_HASSEMAPHORE                  = 0x0\n\tMAP_INHERIT                       = 0x0\n\tMAP_INHERIT_COPY                  = 0x1\n\tMAP_INHERIT_NONE                  = 0x2\n\tMAP_INHERIT_SHARE                 = 0x0\n\tMAP_INHERIT_ZERO                  = 0x3\n\tMAP_NOEXTEND                      = 0x0\n\tMAP_NORESERVE                     = 0x0\n\tMAP_PRIVATE                       = 0x2\n\tMAP_RENAME                        = 0x0\n\tMAP_SHARED                        = 0x1\n\tMAP_TRYFIXED                      = 0x0\n\tMCL_CURRENT                       = 0x1\n\tMCL_FUTURE                        = 0x2\n\tMNT_ASYNC                         = 0x40\n\tMNT_DEFEXPORTED                   = 0x200\n\tMNT_DELEXPORT                     = 0x20000\n\tMNT_DOOMED                        = 0x8000000\n\tMNT_EXPORTANON                    = 0x400\n\tMNT_EXPORTED                      = 0x100\n\tMNT_EXRDONLY                      = 0x80\n\tMNT_FORCE                         = 0x80000\n\tMNT_LAZY                          = 0x3\n\tMNT_LOCAL                         = 0x1000\n\tMNT_NOATIME                       = 0x8000\n\tMNT_NODEV                         = 0x10\n\tMNT_NOEXEC                        = 0x4\n\tMNT_NOSUID                        = 0x8\n\tMNT_NOWAIT                        = 0x2\n\tMNT_QUOTA                         = 0x2000\n\tMNT_RDONLY                        = 0x1\n\tMNT_RELOAD                        = 0x40000\n\tMNT_ROOTFS                        = 0x4000\n\tMNT_SOFTDEP                       = 0x4000000\n\tMNT_SYNCHRONOUS                   = 0x2\n\tMNT_UPDATE                        = 0x10000\n\tMNT_VISFLAGMASK                   = 0x400ffff\n\tMNT_WAIT                          = 0x1\n\tMNT_WANTRDWR                      = 0x2000000\n\tMNT_WXALLOWED                     = 0x800\n\tMSG_BCAST                         = 0x100\n\tMSG_CMSG_CLOEXEC                  = 0x800\n\tMSG_CTRUNC                        = 0x20\n\tMSG_DONTROUTE                     = 0x4\n\tMSG_DONTWAIT                      = 0x80\n\tMSG_EOR                           = 0x8\n\tMSG_MCAST                         = 0x200\n\tMSG_NOSIGNAL                      = 0x400\n\tMSG_OOB                           = 0x1\n\tMSG_PEEK                          = 0x2\n\tMSG_TRUNC                         = 0x10\n\tMSG_WAITALL                       = 0x40\n\tMS_ASYNC                          = 0x1\n\tMS_INVALIDATE                     = 0x4\n\tMS_SYNC                           = 0x2\n\tNAME_MAX                          = 0xff\n\tNET_RT_DUMP                       = 0x1\n\tNET_RT_FLAGS                      = 0x2\n\tNET_RT_IFLIST                     = 0x3\n\tNET_RT_MAXID                      = 0x6\n\tNET_RT_STATS                      = 0x4\n\tNET_RT_TABLE                      = 0x5\n\tNOFLSH                            = 0x80000000\n\tNOTE_ATTRIB                       = 0x8\n\tNOTE_CHILD                        = 0x4\n\tNOTE_DELETE                       = 0x1\n\tNOTE_EOF                          = 0x2\n\tNOTE_EXEC                         = 0x20000000\n\tNOTE_EXIT                         = 0x80000000\n\tNOTE_EXTEND                       = 0x4\n\tNOTE_FORK                         = 0x40000000\n\tNOTE_LINK                         = 0x10\n\tNOTE_LOWAT                        = 0x1\n\tNOTE_PCTRLMASK                    = 0xf0000000\n\tNOTE_PDATAMASK                    = 0xfffff\n\tNOTE_RENAME                       = 0x20\n\tNOTE_REVOKE                       = 0x40\n\tNOTE_TRACK                        = 0x1\n\tNOTE_TRACKERR                     = 0x2\n\tNOTE_TRUNCATE                     = 0x80\n\tNOTE_WRITE                        = 0x2\n\tOCRNL                             = 0x10\n\tONLCR                             = 0x2\n\tONLRET                            = 0x80\n\tONOCR                             = 0x40\n\tONOEOT                            = 0x8\n\tOPOST                             = 0x1\n\tO_ACCMODE                         = 0x3\n\tO_APPEND                          = 0x8\n\tO_ASYNC                           = 0x40\n\tO_CLOEXEC                         = 0x10000\n\tO_CREAT                           = 0x200\n\tO_DIRECTORY                       = 0x20000\n\tO_DSYNC                           = 0x80\n\tO_EXCL                            = 0x800\n\tO_EXLOCK                          = 0x20\n\tO_FSYNC                           = 0x80\n\tO_NDELAY                          = 0x4\n\tO_NOCTTY                          = 0x8000\n\tO_NOFOLLOW                        = 0x100\n\tO_NONBLOCK                        = 0x4\n\tO_RDONLY                          = 0x0\n\tO_RDWR                            = 0x2\n\tO_RSYNC                           = 0x80\n\tO_SHLOCK                          = 0x10\n\tO_SYNC                            = 0x80\n\tO_TRUNC                           = 0x400\n\tO_WRONLY                          = 0x1\n\tPARENB                            = 0x1000\n\tPARMRK                            = 0x8\n\tPARODD                            = 0x2000\n\tPENDIN                            = 0x20000000\n\tPF_FLUSH                          = 0x1\n\tPRIO_PGRP                         = 0x1\n\tPRIO_PROCESS                      = 0x0\n\tPRIO_USER                         = 0x2\n\tPROT_EXEC                         = 0x4\n\tPROT_NONE                         = 0x0\n\tPROT_READ                         = 0x1\n\tPROT_WRITE                        = 0x2\n\tRLIMIT_CORE                       = 0x4\n\tRLIMIT_CPU                        = 0x0\n\tRLIMIT_DATA                       = 0x2\n\tRLIMIT_FSIZE                      = 0x1\n\tRLIMIT_NOFILE                     = 0x8\n\tRLIMIT_STACK                      = 0x3\n\tRLIM_INFINITY                     = 0x7fffffffffffffff\n\tRTAX_AUTHOR                       = 0x6\n\tRTAX_BRD                          = 0x7\n\tRTAX_DST                          = 0x0\n\tRTAX_GATEWAY                      = 0x1\n\tRTAX_GENMASK                      = 0x3\n\tRTAX_IFA                          = 0x5\n\tRTAX_IFP                          = 0x4\n\tRTAX_LABEL                        = 0xa\n\tRTAX_MAX                          = 0xb\n\tRTAX_NETMASK                      = 0x2\n\tRTAX_SRC                          = 0x8\n\tRTAX_SRCMASK                      = 0x9\n\tRTA_AUTHOR                        = 0x40\n\tRTA_BRD                           = 0x80\n\tRTA_DST                           = 0x1\n\tRTA_GATEWAY                       = 0x2\n\tRTA_GENMASK                       = 0x8\n\tRTA_IFA                           = 0x20\n\tRTA_IFP                           = 0x10\n\tRTA_LABEL                         = 0x400\n\tRTA_NETMASK                       = 0x4\n\tRTA_SRC                           = 0x100\n\tRTA_SRCMASK                       = 0x200\n\tRTF_ANNOUNCE                      = 0x4000\n\tRTF_BLACKHOLE                     = 0x1000\n\tRTF_BROADCAST                     = 0x400000\n\tRTF_CLONED                        = 0x10000\n\tRTF_CLONING                       = 0x100\n\tRTF_DONE                          = 0x40\n\tRTF_DYNAMIC                       = 0x10\n\tRTF_FMASK                         = 0x70f808\n\tRTF_GATEWAY                       = 0x2\n\tRTF_HOST                          = 0x4\n\tRTF_LLINFO                        = 0x400\n\tRTF_LOCAL                         = 0x200000\n\tRTF_MASK                          = 0x80\n\tRTF_MODIFIED                      = 0x20\n\tRTF_MPATH                         = 0x40000\n\tRTF_MPLS                          = 0x100000\n\tRTF_PERMANENT_ARP                 = 0x2000\n\tRTF_PROTO1                        = 0x8000\n\tRTF_PROTO2                        = 0x4000\n\tRTF_PROTO3                        = 0x2000\n\tRTF_REJECT                        = 0x8\n\tRTF_STATIC                        = 0x800\n\tRTF_UP                            = 0x1\n\tRTF_USETRAILERS                   = 0x8000\n\tRTF_XRESOLVE                      = 0x200\n\tRTM_ADD                           = 0x1\n\tRTM_CHANGE                        = 0x3\n\tRTM_DELADDR                       = 0xd\n\tRTM_DELETE                        = 0x2\n\tRTM_DESYNC                        = 0x10\n\tRTM_GET                           = 0x4\n\tRTM_IFANNOUNCE                    = 0xf\n\tRTM_IFINFO                        = 0xe\n\tRTM_LOCK                          = 0x8\n\tRTM_LOSING                        = 0x5\n\tRTM_MAXSIZE                       = 0x800\n\tRTM_MISS                          = 0x7\n\tRTM_NEWADDR                       = 0xc\n\tRTM_REDIRECT                      = 0x6\n\tRTM_RESOLVE                       = 0xb\n\tRTM_RTTUNIT                       = 0xf4240\n\tRTM_VERSION                       = 0x5\n\tRTV_EXPIRE                        = 0x4\n\tRTV_HOPCOUNT                      = 0x2\n\tRTV_MTU                           = 0x1\n\tRTV_RPIPE                         = 0x8\n\tRTV_RTT                           = 0x40\n\tRTV_RTTVAR                        = 0x80\n\tRTV_SPIPE                         = 0x10\n\tRTV_SSTHRESH                      = 0x20\n\tRT_TABLEID_MAX                    = 0xff\n\tRUSAGE_CHILDREN                   = -0x1\n\tRUSAGE_SELF                       = 0x0\n\tRUSAGE_THREAD                     = 0x1\n\tSCM_RIGHTS                        = 0x1\n\tSCM_TIMESTAMP                     = 0x4\n\tSHUT_RD                           = 0x0\n\tSHUT_RDWR                         = 0x2\n\tSHUT_WR                           = 0x1\n\tSIOCADDMULTI                      = 0x80206931\n\tSIOCAIFADDR                       = 0x8040691a\n\tSIOCAIFGROUP                      = 0x80246987\n\tSIOCALIFADDR                      = 0x8218691c\n\tSIOCATMARK                        = 0x40047307\n\tSIOCBRDGADD                       = 0x8054693c\n\tSIOCBRDGADDS                      = 0x80546941\n\tSIOCBRDGARL                       = 0x806e694d\n\tSIOCBRDGDADDR                     = 0x81286947\n\tSIOCBRDGDEL                       = 0x8054693d\n\tSIOCBRDGDELS                      = 0x80546942\n\tSIOCBRDGFLUSH                     = 0x80546948\n\tSIOCBRDGFRL                       = 0x806e694e\n\tSIOCBRDGGCACHE                    = 0xc0146941\n\tSIOCBRDGGFD                       = 0xc0146952\n\tSIOCBRDGGHT                       = 0xc0146951\n\tSIOCBRDGGIFFLGS                   = 0xc054693e\n\tSIOCBRDGGMA                       = 0xc0146953\n\tSIOCBRDGGPARAM                    = 0xc03c6958\n\tSIOCBRDGGPRI                      = 0xc0146950\n\tSIOCBRDGGRL                       = 0xc028694f\n\tSIOCBRDGGSIFS                     = 0xc054693c\n\tSIOCBRDGGTO                       = 0xc0146946\n\tSIOCBRDGIFS                       = 0xc0546942\n\tSIOCBRDGRTS                       = 0xc0186943\n\tSIOCBRDGSADDR                     = 0xc1286944\n\tSIOCBRDGSCACHE                    = 0x80146940\n\tSIOCBRDGSFD                       = 0x80146952\n\tSIOCBRDGSHT                       = 0x80146951\n\tSIOCBRDGSIFCOST                   = 0x80546955\n\tSIOCBRDGSIFFLGS                   = 0x8054693f\n\tSIOCBRDGSIFPRIO                   = 0x80546954\n\tSIOCBRDGSMA                       = 0x80146953\n\tSIOCBRDGSPRI                      = 0x80146950\n\tSIOCBRDGSPROTO                    = 0x8014695a\n\tSIOCBRDGSTO                       = 0x80146945\n\tSIOCBRDGSTXHC                     = 0x80146959\n\tSIOCDELMULTI                      = 0x80206932\n\tSIOCDIFADDR                       = 0x80206919\n\tSIOCDIFGROUP                      = 0x80246989\n\tSIOCDIFPHYADDR                    = 0x80206949\n\tSIOCDLIFADDR                      = 0x8218691e\n\tSIOCGETKALIVE                     = 0xc01869a4\n\tSIOCGETLABEL                      = 0x8020699a\n\tSIOCGETPFLOW                      = 0xc02069fe\n\tSIOCGETPFSYNC                     = 0xc02069f8\n\tSIOCGETSGCNT                      = 0xc0147534\n\tSIOCGETVIFCNT                     = 0xc0147533\n\tSIOCGETVLAN                       = 0xc0206990\n\tSIOCGHIWAT                        = 0x40047301\n\tSIOCGIFADDR                       = 0xc0206921\n\tSIOCGIFASYNCMAP                   = 0xc020697c\n\tSIOCGIFBRDADDR                    = 0xc0206923\n\tSIOCGIFCONF                       = 0xc0086924\n\tSIOCGIFDATA                       = 0xc020691b\n\tSIOCGIFDESCR                      = 0xc0206981\n\tSIOCGIFDSTADDR                    = 0xc0206922\n\tSIOCGIFFLAGS                      = 0xc0206911\n\tSIOCGIFGATTR                      = 0xc024698b\n\tSIOCGIFGENERIC                    = 0xc020693a\n\tSIOCGIFGMEMB                      = 0xc024698a\n\tSIOCGIFGROUP                      = 0xc0246988\n\tSIOCGIFHARDMTU                    = 0xc02069a5\n\tSIOCGIFMEDIA                      = 0xc0286936\n\tSIOCGIFMETRIC                     = 0xc0206917\n\tSIOCGIFMTU                        = 0xc020697e\n\tSIOCGIFNETMASK                    = 0xc0206925\n\tSIOCGIFPDSTADDR                   = 0xc0206948\n\tSIOCGIFPRIORITY                   = 0xc020699c\n\tSIOCGIFPSRCADDR                   = 0xc0206947\n\tSIOCGIFRDOMAIN                    = 0xc02069a0\n\tSIOCGIFRTLABEL                    = 0xc0206983\n\tSIOCGIFRXR                        = 0x802069aa\n\tSIOCGIFTIMESLOT                   = 0xc0206986\n\tSIOCGIFXFLAGS                     = 0xc020699e\n\tSIOCGLIFADDR                      = 0xc218691d\n\tSIOCGLIFPHYADDR                   = 0xc218694b\n\tSIOCGLIFPHYRTABLE                 = 0xc02069a2\n\tSIOCGLIFPHYTTL                    = 0xc02069a9\n\tSIOCGLOWAT                        = 0x40047303\n\tSIOCGPGRP                         = 0x40047309\n\tSIOCGSPPPPARAMS                   = 0xc0206994\n\tSIOCGVH                           = 0xc02069f6\n\tSIOCGVNETID                       = 0xc02069a7\n\tSIOCIFCREATE                      = 0x8020697a\n\tSIOCIFDESTROY                     = 0x80206979\n\tSIOCIFGCLONERS                    = 0xc00c6978\n\tSIOCSETKALIVE                     = 0x801869a3\n\tSIOCSETLABEL                      = 0x80206999\n\tSIOCSETPFLOW                      = 0x802069fd\n\tSIOCSETPFSYNC                     = 0x802069f7\n\tSIOCSETVLAN                       = 0x8020698f\n\tSIOCSHIWAT                        = 0x80047300\n\tSIOCSIFADDR                       = 0x8020690c\n\tSIOCSIFASYNCMAP                   = 0x8020697d\n\tSIOCSIFBRDADDR                    = 0x80206913\n\tSIOCSIFDESCR                      = 0x80206980\n\tSIOCSIFDSTADDR                    = 0x8020690e\n\tSIOCSIFFLAGS                      = 0x80206910\n\tSIOCSIFGATTR                      = 0x8024698c\n\tSIOCSIFGENERIC                    = 0x80206939\n\tSIOCSIFLLADDR                     = 0x8020691f\n\tSIOCSIFMEDIA                      = 0xc0206935\n\tSIOCSIFMETRIC                     = 0x80206918\n\tSIOCSIFMTU                        = 0x8020697f\n\tSIOCSIFNETMASK                    = 0x80206916\n\tSIOCSIFPHYADDR                    = 0x80406946\n\tSIOCSIFPRIORITY                   = 0x8020699b\n\tSIOCSIFRDOMAIN                    = 0x8020699f\n\tSIOCSIFRTLABEL                    = 0x80206982\n\tSIOCSIFTIMESLOT                   = 0x80206985\n\tSIOCSIFXFLAGS                     = 0x8020699d\n\tSIOCSLIFPHYADDR                   = 0x8218694a\n\tSIOCSLIFPHYRTABLE                 = 0x802069a1\n\tSIOCSLIFPHYTTL                    = 0x802069a8\n\tSIOCSLOWAT                        = 0x80047302\n\tSIOCSPGRP                         = 0x80047308\n\tSIOCSSPPPPARAMS                   = 0x80206993\n\tSIOCSVH                           = 0xc02069f5\n\tSIOCSVNETID                       = 0x802069a6\n\tSOCK_CLOEXEC                      = 0x8000\n\tSOCK_DGRAM                        = 0x2\n\tSOCK_NONBLOCK                     = 0x4000\n\tSOCK_RAW                          = 0x3\n\tSOCK_RDM                          = 0x4\n\tSOCK_SEQPACKET                    = 0x5\n\tSOCK_STREAM                       = 0x1\n\tSOL_SOCKET                        = 0xffff\n\tSOMAXCONN                         = 0x80\n\tSO_ACCEPTCONN                     = 0x2\n\tSO_BINDANY                        = 0x1000\n\tSO_BROADCAST                      = 0x20\n\tSO_DEBUG                          = 0x1\n\tSO_DONTROUTE                      = 0x10\n\tSO_ERROR                          = 0x1007\n\tSO_KEEPALIVE                      = 0x8\n\tSO_LINGER                         = 0x80\n\tSO_NETPROC                        = 0x1020\n\tSO_OOBINLINE                      = 0x100\n\tSO_PEERCRED                       = 0x1022\n\tSO_RCVBUF                         = 0x1002\n\tSO_RCVLOWAT                       = 0x1004\n\tSO_RCVTIMEO                       = 0x1006\n\tSO_REUSEADDR                      = 0x4\n\tSO_REUSEPORT                      = 0x200\n\tSO_RTABLE                         = 0x1021\n\tSO_SNDBUF                         = 0x1001\n\tSO_SNDLOWAT                       = 0x1003\n\tSO_SNDTIMEO                       = 0x1005\n\tSO_SPLICE                         = 0x1023\n\tSO_TIMESTAMP                      = 0x800\n\tSO_TYPE                           = 0x1008\n\tSO_USELOOPBACK                    = 0x40\n\tS_BLKSIZE                         = 0x200\n\tS_IEXEC                           = 0x40\n\tS_IFBLK                           = 0x6000\n\tS_IFCHR                           = 0x2000\n\tS_IFDIR                           = 0x4000\n\tS_IFIFO                           = 0x1000\n\tS_IFLNK                           = 0xa000\n\tS_IFMT                            = 0xf000\n\tS_IFREG                           = 0x8000\n\tS_IFSOCK                          = 0xc000\n\tS_IREAD                           = 0x100\n\tS_IRGRP                           = 0x20\n\tS_IROTH                           = 0x4\n\tS_IRUSR                           = 0x100\n\tS_IRWXG                           = 0x38\n\tS_IRWXO                           = 0x7\n\tS_IRWXU                           = 0x1c0\n\tS_ISGID                           = 0x400\n\tS_ISTXT                           = 0x200\n\tS_ISUID                           = 0x800\n\tS_ISVTX                           = 0x200\n\tS_IWGRP                           = 0x10\n\tS_IWOTH                           = 0x2\n\tS_IWRITE                          = 0x80\n\tS_IWUSR                           = 0x80\n\tS_IXGRP                           = 0x8\n\tS_IXOTH                           = 0x1\n\tS_IXUSR                           = 0x40\n\tTCIFLUSH                          = 0x1\n\tTCIOFLUSH                         = 0x3\n\tTCOFLUSH                          = 0x2\n\tTCP_MAXBURST                      = 0x4\n\tTCP_MAXSEG                        = 0x2\n\tTCP_MAXWIN                        = 0xffff\n\tTCP_MAX_SACK                      = 0x3\n\tTCP_MAX_WINSHIFT                  = 0xe\n\tTCP_MD5SIG                        = 0x4\n\tTCP_MSS                           = 0x200\n\tTCP_NODELAY                       = 0x1\n\tTCP_NOPUSH                        = 0x10\n\tTCP_NSTATES                       = 0xb\n\tTCP_SACK_ENABLE                   = 0x8\n\tTCSAFLUSH                         = 0x2\n\tTIOCCBRK                          = 0x2000747a\n\tTIOCCDTR                          = 0x20007478\n\tTIOCCONS                          = 0x80047462\n\tTIOCDRAIN                         = 0x2000745e\n\tTIOCEXCL                          = 0x2000740d\n\tTIOCEXT                           = 0x80047460\n\tTIOCFLAG_CLOCAL                   = 0x2\n\tTIOCFLAG_CRTSCTS                  = 0x4\n\tTIOCFLAG_MDMBUF                   = 0x8\n\tTIOCFLAG_PPS                      = 0x10\n\tTIOCFLAG_SOFTCAR                  = 0x1\n\tTIOCFLUSH                         = 0x80047410\n\tTIOCGETA                          = 0x402c7413\n\tTIOCGETD                          = 0x4004741a\n\tTIOCGFLAGS                        = 0x4004745d\n\tTIOCGPGRP                         = 0x40047477\n\tTIOCGSID                          = 0x40047463\n\tTIOCGTSTAMP                       = 0x400c745b\n\tTIOCGWINSZ                        = 0x40087468\n\tTIOCMBIC                          = 0x8004746b\n\tTIOCMBIS                          = 0x8004746c\n\tTIOCMGET                          = 0x4004746a\n\tTIOCMODG                          = 0x4004746a\n\tTIOCMODS                          = 0x8004746d\n\tTIOCMSET                          = 0x8004746d\n\tTIOCM_CAR                         = 0x40\n\tTIOCM_CD                          = 0x40\n\tTIOCM_CTS                         = 0x20\n\tTIOCM_DSR                         = 0x100\n\tTIOCM_DTR                         = 0x2\n\tTIOCM_LE                          = 0x1\n\tTIOCM_RI                          = 0x80\n\tTIOCM_RNG                         = 0x80\n\tTIOCM_RTS                         = 0x4\n\tTIOCM_SR                          = 0x10\n\tTIOCM_ST                          = 0x8\n\tTIOCNOTTY                         = 0x20007471\n\tTIOCNXCL                          = 0x2000740e\n\tTIOCOUTQ                          = 0x40047473\n\tTIOCPKT                           = 0x80047470\n\tTIOCPKT_DATA                      = 0x0\n\tTIOCPKT_DOSTOP                    = 0x20\n\tTIOCPKT_FLUSHREAD                 = 0x1\n\tTIOCPKT_FLUSHWRITE                = 0x2\n\tTIOCPKT_IOCTL                     = 0x40\n\tTIOCPKT_NOSTOP                    = 0x10\n\tTIOCPKT_START                     = 0x8\n\tTIOCPKT_STOP                      = 0x4\n\tTIOCREMOTE                        = 0x80047469\n\tTIOCSBRK                          = 0x2000747b\n\tTIOCSCTTY                         = 0x20007461\n\tTIOCSDTR                          = 0x20007479\n\tTIOCSETA                          = 0x802c7414\n\tTIOCSETAF                         = 0x802c7416\n\tTIOCSETAW                         = 0x802c7415\n\tTIOCSETD                          = 0x8004741b\n\tTIOCSFLAGS                        = 0x8004745c\n\tTIOCSIG                           = 0x8004745f\n\tTIOCSPGRP                         = 0x80047476\n\tTIOCSTART                         = 0x2000746e\n\tTIOCSTAT                          = 0x80047465\n\tTIOCSTI                           = 0x80017472\n\tTIOCSTOP                          = 0x2000746f\n\tTIOCSTSTAMP                       = 0x8008745a\n\tTIOCSWINSZ                        = 0x80087467\n\tTIOCUCNTL                         = 0x80047466\n\tTOSTOP                            = 0x400000\n\tVDISCARD                          = 0xf\n\tVDSUSP                            = 0xb\n\tVEOF                              = 0x0\n\tVEOL                              = 0x1\n\tVEOL2                             = 0x2\n\tVERASE                            = 0x3\n\tVINTR                             = 0x8\n\tVKILL                             = 0x5\n\tVLNEXT                            = 0xe\n\tVMIN                              = 0x10\n\tVQUIT                             = 0x9\n\tVREPRINT                          = 0x6\n\tVSTART                            = 0xc\n\tVSTATUS                           = 0x12\n\tVSTOP                             = 0xd\n\tVSUSP                             = 0xa\n\tVTIME                             = 0x11\n\tVWERASE                           = 0x4\n\tWALTSIG                           = 0x4\n\tWCONTINUED                        = 0x8\n\tWCOREFLAG                         = 0x80\n\tWNOHANG                           = 0x1\n\tWUNTRACED                         = 0x2\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x30)\n\tEADDRNOTAVAIL   = syscall.Errno(0x31)\n\tEAFNOSUPPORT    = syscall.Errno(0x2f)\n\tEAGAIN          = syscall.Errno(0x23)\n\tEALREADY        = syscall.Errno(0x25)\n\tEAUTH           = syscall.Errno(0x50)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADRPC         = syscall.Errno(0x48)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x58)\n\tECHILD          = syscall.Errno(0xa)\n\tECONNABORTED    = syscall.Errno(0x35)\n\tECONNREFUSED    = syscall.Errno(0x3d)\n\tECONNRESET      = syscall.Errno(0x36)\n\tEDEADLK         = syscall.Errno(0xb)\n\tEDESTADDRREQ    = syscall.Errno(0x27)\n\tEDOM            = syscall.Errno(0x21)\n\tEDQUOT          = syscall.Errno(0x45)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFTYPE          = syscall.Errno(0x4f)\n\tEHOSTDOWN       = syscall.Errno(0x40)\n\tEHOSTUNREACH    = syscall.Errno(0x41)\n\tEIDRM           = syscall.Errno(0x59)\n\tEILSEQ          = syscall.Errno(0x54)\n\tEINPROGRESS     = syscall.Errno(0x24)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEIPSEC          = syscall.Errno(0x52)\n\tEISCONN         = syscall.Errno(0x38)\n\tEISDIR          = syscall.Errno(0x15)\n\tELAST           = syscall.Errno(0x5b)\n\tELOOP           = syscall.Errno(0x3e)\n\tEMEDIUMTYPE     = syscall.Errno(0x56)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x28)\n\tENAMETOOLONG    = syscall.Errno(0x3f)\n\tENEEDAUTH       = syscall.Errno(0x51)\n\tENETDOWN        = syscall.Errno(0x32)\n\tENETRESET       = syscall.Errno(0x34)\n\tENETUNREACH     = syscall.Errno(0x33)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x53)\n\tENOBUFS         = syscall.Errno(0x37)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x4d)\n\tENOMEDIUM       = syscall.Errno(0x55)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x5a)\n\tENOPROTOOPT     = syscall.Errno(0x2a)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSYS          = syscall.Errno(0x4e)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x39)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x42)\n\tENOTSOCK        = syscall.Errno(0x26)\n\tENOTSUP         = syscall.Errno(0x5b)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x2d)\n\tEOVERFLOW       = syscall.Errno(0x57)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x2e)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x43)\n\tEPROCUNAVAIL    = syscall.Errno(0x4c)\n\tEPROGMISMATCH   = syscall.Errno(0x4b)\n\tEPROGUNAVAIL    = syscall.Errno(0x4a)\n\tEPROTONOSUPPORT = syscall.Errno(0x2b)\n\tEPROTOTYPE      = syscall.Errno(0x29)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x47)\n\tEROFS           = syscall.Errno(0x1e)\n\tERPCMISMATCH    = syscall.Errno(0x49)\n\tESHUTDOWN       = syscall.Errno(0x3a)\n\tESOCKTNOSUPPORT = syscall.Errno(0x2c)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x46)\n\tETIMEDOUT       = syscall.Errno(0x3c)\n\tETOOMANYREFS    = syscall.Errno(0x3b)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUSERS          = syscall.Errno(0x44)\n\tEWOULDBLOCK     = syscall.Errno(0x23)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x14)\n\tSIGCONT   = syscall.Signal(0x13)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINFO   = syscall.Signal(0x1d)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x17)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTOP   = syscall.Signal(0x11)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTHR    = syscall.Signal(0x20)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x12)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x10)\n\tSIGUSR1   = syscall.Signal(0x1e)\n\tSIGUSR2   = syscall.Signal(0x1f)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"device not configured\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"operation not supported by device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large\"},\n\t{35, \"EWOULDBLOCK\", \"resource temporarily unavailable\"},\n\t{36, \"EINPROGRESS\", \"operation now in progress\"},\n\t{37, \"EALREADY\", \"operation already in progress\"},\n\t{38, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{39, \"EDESTADDRREQ\", \"destination address required\"},\n\t{40, \"EMSGSIZE\", \"message too long\"},\n\t{41, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{42, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{43, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{44, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{45, \"EOPNOTSUPP\", \"operation not supported\"},\n\t{46, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{47, \"EAFNOSUPPORT\", \"address family not supported by protocol family\"},\n\t{48, \"EADDRINUSE\", \"address already in use\"},\n\t{49, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{50, \"ENETDOWN\", \"network is down\"},\n\t{51, \"ENETUNREACH\", \"network is unreachable\"},\n\t{52, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{53, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{54, \"ECONNRESET\", \"connection reset by peer\"},\n\t{55, \"ENOBUFS\", \"no buffer space available\"},\n\t{56, \"EISCONN\", \"socket is already connected\"},\n\t{57, \"ENOTCONN\", \"socket is not connected\"},\n\t{58, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{59, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{60, \"ETIMEDOUT\", \"operation timed out\"},\n\t{61, \"ECONNREFUSED\", \"connection refused\"},\n\t{62, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{63, \"ENAMETOOLONG\", \"file name too long\"},\n\t{64, \"EHOSTDOWN\", \"host is down\"},\n\t{65, \"EHOSTUNREACH\", \"no route to host\"},\n\t{66, \"ENOTEMPTY\", \"directory not empty\"},\n\t{67, \"EPROCLIM\", \"too many processes\"},\n\t{68, \"EUSERS\", \"too many users\"},\n\t{69, \"EDQUOT\", \"disk quota exceeded\"},\n\t{70, \"ESTALE\", \"stale NFS file handle\"},\n\t{71, \"EREMOTE\", \"too many levels of remote in path\"},\n\t{72, \"EBADRPC\", \"RPC struct is bad\"},\n\t{73, \"ERPCMISMATCH\", \"RPC version wrong\"},\n\t{74, \"EPROGUNAVAIL\", \"RPC program not available\"},\n\t{75, \"EPROGMISMATCH\", \"program version wrong\"},\n\t{76, \"EPROCUNAVAIL\", \"bad procedure for program\"},\n\t{77, \"ENOLCK\", \"no locks available\"},\n\t{78, \"ENOSYS\", \"function not implemented\"},\n\t{79, \"EFTYPE\", \"inappropriate file type or format\"},\n\t{80, \"EAUTH\", \"authentication error\"},\n\t{81, \"ENEEDAUTH\", \"need authenticator\"},\n\t{82, \"EIPSEC\", \"IPsec processing failure\"},\n\t{83, \"ENOATTR\", \"attribute not found\"},\n\t{84, \"EILSEQ\", \"illegal byte sequence\"},\n\t{85, \"ENOMEDIUM\", \"no medium found\"},\n\t{86, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{87, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n\t{88, \"ECANCELED\", \"operation canceled\"},\n\t{89, \"EIDRM\", \"identifier removed\"},\n\t{90, \"ENOMSG\", \"no message of desired type\"},\n\t{91, \"ELAST\", \"not supported\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGABRT\", \"abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"suspended (signal)\"},\n\t{18, \"SIGTSTP\", \"suspended\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGINFO\", \"information request\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n\t{32, \"SIGTHR\", \"thread AST\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_openbsd_arm64.go",
    "content": "// mkerrors.sh -m64\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build arm64,openbsd\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -m64 _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                      = 0x10\n\tAF_BLUETOOTH                      = 0x20\n\tAF_CCITT                          = 0xa\n\tAF_CHAOS                          = 0x5\n\tAF_CNT                            = 0x15\n\tAF_COIP                           = 0x14\n\tAF_DATAKIT                        = 0x9\n\tAF_DECnet                         = 0xc\n\tAF_DLI                            = 0xd\n\tAF_E164                           = 0x1a\n\tAF_ECMA                           = 0x8\n\tAF_ENCAP                          = 0x1c\n\tAF_HYLINK                         = 0xf\n\tAF_IMPLINK                        = 0x3\n\tAF_INET                           = 0x2\n\tAF_INET6                          = 0x18\n\tAF_IPX                            = 0x17\n\tAF_ISDN                           = 0x1a\n\tAF_ISO                            = 0x7\n\tAF_KEY                            = 0x1e\n\tAF_LAT                            = 0xe\n\tAF_LINK                           = 0x12\n\tAF_LOCAL                          = 0x1\n\tAF_MAX                            = 0x24\n\tAF_MPLS                           = 0x21\n\tAF_NATM                           = 0x1b\n\tAF_NS                             = 0x6\n\tAF_OSI                            = 0x7\n\tAF_PUP                            = 0x4\n\tAF_ROUTE                          = 0x11\n\tAF_SIP                            = 0x1d\n\tAF_SNA                            = 0xb\n\tAF_UNIX                           = 0x1\n\tAF_UNSPEC                         = 0x0\n\tALTWERASE                         = 0x200\n\tARPHRD_ETHER                      = 0x1\n\tARPHRD_FRELAY                     = 0xf\n\tARPHRD_IEEE1394                   = 0x18\n\tARPHRD_IEEE802                    = 0x6\n\tB0                                = 0x0\n\tB110                              = 0x6e\n\tB115200                           = 0x1c200\n\tB1200                             = 0x4b0\n\tB134                              = 0x86\n\tB14400                            = 0x3840\n\tB150                              = 0x96\n\tB1800                             = 0x708\n\tB19200                            = 0x4b00\n\tB200                              = 0xc8\n\tB230400                           = 0x38400\n\tB2400                             = 0x960\n\tB28800                            = 0x7080\n\tB300                              = 0x12c\n\tB38400                            = 0x9600\n\tB4800                             = 0x12c0\n\tB50                               = 0x32\n\tB57600                            = 0xe100\n\tB600                              = 0x258\n\tB7200                             = 0x1c20\n\tB75                               = 0x4b\n\tB76800                            = 0x12c00\n\tB9600                             = 0x2580\n\tBIOCFLUSH                         = 0x20004268\n\tBIOCGBLEN                         = 0x40044266\n\tBIOCGDIRFILT                      = 0x4004427c\n\tBIOCGDLT                          = 0x4004426a\n\tBIOCGDLTLIST                      = 0xc010427b\n\tBIOCGETIF                         = 0x4020426b\n\tBIOCGFILDROP                      = 0x40044278\n\tBIOCGHDRCMPLT                     = 0x40044274\n\tBIOCGRSIG                         = 0x40044273\n\tBIOCGRTIMEOUT                     = 0x4010426e\n\tBIOCGSTATS                        = 0x4008426f\n\tBIOCIMMEDIATE                     = 0x80044270\n\tBIOCLOCK                          = 0x20004276\n\tBIOCPROMISC                       = 0x20004269\n\tBIOCSBLEN                         = 0xc0044266\n\tBIOCSDIRFILT                      = 0x8004427d\n\tBIOCSDLT                          = 0x8004427a\n\tBIOCSETF                          = 0x80104267\n\tBIOCSETIF                         = 0x8020426c\n\tBIOCSETWF                         = 0x80104277\n\tBIOCSFILDROP                      = 0x80044279\n\tBIOCSHDRCMPLT                     = 0x80044275\n\tBIOCSRSIG                         = 0x80044272\n\tBIOCSRTIMEOUT                     = 0x8010426d\n\tBIOCVERSION                       = 0x40044271\n\tBPF_A                             = 0x10\n\tBPF_ABS                           = 0x20\n\tBPF_ADD                           = 0x0\n\tBPF_ALIGNMENT                     = 0x4\n\tBPF_ALU                           = 0x4\n\tBPF_AND                           = 0x50\n\tBPF_B                             = 0x10\n\tBPF_DIRECTION_IN                  = 0x1\n\tBPF_DIRECTION_OUT                 = 0x2\n\tBPF_DIV                           = 0x30\n\tBPF_FILDROP_CAPTURE               = 0x1\n\tBPF_FILDROP_DROP                  = 0x2\n\tBPF_FILDROP_PASS                  = 0x0\n\tBPF_H                             = 0x8\n\tBPF_IMM                           = 0x0\n\tBPF_IND                           = 0x40\n\tBPF_JA                            = 0x0\n\tBPF_JEQ                           = 0x10\n\tBPF_JGE                           = 0x30\n\tBPF_JGT                           = 0x20\n\tBPF_JMP                           = 0x5\n\tBPF_JSET                          = 0x40\n\tBPF_K                             = 0x0\n\tBPF_LD                            = 0x0\n\tBPF_LDX                           = 0x1\n\tBPF_LEN                           = 0x80\n\tBPF_LSH                           = 0x60\n\tBPF_MAJOR_VERSION                 = 0x1\n\tBPF_MAXBUFSIZE                    = 0x200000\n\tBPF_MAXINSNS                      = 0x200\n\tBPF_MEM                           = 0x60\n\tBPF_MEMWORDS                      = 0x10\n\tBPF_MINBUFSIZE                    = 0x20\n\tBPF_MINOR_VERSION                 = 0x1\n\tBPF_MISC                          = 0x7\n\tBPF_MSH                           = 0xa0\n\tBPF_MUL                           = 0x20\n\tBPF_NEG                           = 0x80\n\tBPF_OR                            = 0x40\n\tBPF_RELEASE                       = 0x30bb6\n\tBPF_RET                           = 0x6\n\tBPF_RSH                           = 0x70\n\tBPF_ST                            = 0x2\n\tBPF_STX                           = 0x3\n\tBPF_SUB                           = 0x10\n\tBPF_TAX                           = 0x0\n\tBPF_TXA                           = 0x80\n\tBPF_W                             = 0x0\n\tBPF_X                             = 0x8\n\tBRKINT                            = 0x2\n\tCFLUSH                            = 0xf\n\tCLOCAL                            = 0x8000\n\tCLOCK_BOOTTIME                    = 0x6\n\tCLOCK_MONOTONIC                   = 0x3\n\tCLOCK_PROCESS_CPUTIME_ID          = 0x2\n\tCLOCK_REALTIME                    = 0x0\n\tCLOCK_THREAD_CPUTIME_ID           = 0x4\n\tCLOCK_UPTIME                      = 0x5\n\tCREAD                             = 0x800\n\tCRTSCTS                           = 0x10000\n\tCS5                               = 0x0\n\tCS6                               = 0x100\n\tCS7                               = 0x200\n\tCS8                               = 0x300\n\tCSIZE                             = 0x300\n\tCSTART                            = 0x11\n\tCSTATUS                           = 0xff\n\tCSTOP                             = 0x13\n\tCSTOPB                            = 0x400\n\tCSUSP                             = 0x1a\n\tCTL_HW                            = 0x6\n\tCTL_KERN                          = 0x1\n\tCTL_MAXNAME                       = 0xc\n\tCTL_NET                           = 0x4\n\tDIOCOSFPFLUSH                     = 0x2000444e\n\tDLT_ARCNET                        = 0x7\n\tDLT_ATM_RFC1483                   = 0xb\n\tDLT_AX25                          = 0x3\n\tDLT_CHAOS                         = 0x5\n\tDLT_C_HDLC                        = 0x68\n\tDLT_EN10MB                        = 0x1\n\tDLT_EN3MB                         = 0x2\n\tDLT_ENC                           = 0xd\n\tDLT_FDDI                          = 0xa\n\tDLT_IEEE802                       = 0x6\n\tDLT_IEEE802_11                    = 0x69\n\tDLT_IEEE802_11_RADIO              = 0x7f\n\tDLT_LOOP                          = 0xc\n\tDLT_MPLS                          = 0xdb\n\tDLT_NULL                          = 0x0\n\tDLT_OPENFLOW                      = 0x10b\n\tDLT_PFLOG                         = 0x75\n\tDLT_PFSYNC                        = 0x12\n\tDLT_PPP                           = 0x9\n\tDLT_PPP_BSDOS                     = 0x10\n\tDLT_PPP_ETHER                     = 0x33\n\tDLT_PPP_SERIAL                    = 0x32\n\tDLT_PRONET                        = 0x4\n\tDLT_RAW                           = 0xe\n\tDLT_SLIP                          = 0x8\n\tDLT_SLIP_BSDOS                    = 0xf\n\tDLT_USBPCAP                       = 0xf9\n\tDLT_USER0                         = 0x93\n\tDLT_USER1                         = 0x94\n\tDLT_USER10                        = 0x9d\n\tDLT_USER11                        = 0x9e\n\tDLT_USER12                        = 0x9f\n\tDLT_USER13                        = 0xa0\n\tDLT_USER14                        = 0xa1\n\tDLT_USER15                        = 0xa2\n\tDLT_USER2                         = 0x95\n\tDLT_USER3                         = 0x96\n\tDLT_USER4                         = 0x97\n\tDLT_USER5                         = 0x98\n\tDLT_USER6                         = 0x99\n\tDLT_USER7                         = 0x9a\n\tDLT_USER8                         = 0x9b\n\tDLT_USER9                         = 0x9c\n\tDT_BLK                            = 0x6\n\tDT_CHR                            = 0x2\n\tDT_DIR                            = 0x4\n\tDT_FIFO                           = 0x1\n\tDT_LNK                            = 0xa\n\tDT_REG                            = 0x8\n\tDT_SOCK                           = 0xc\n\tDT_UNKNOWN                        = 0x0\n\tECHO                              = 0x8\n\tECHOCTL                           = 0x40\n\tECHOE                             = 0x2\n\tECHOK                             = 0x4\n\tECHOKE                            = 0x1\n\tECHONL                            = 0x10\n\tECHOPRT                           = 0x20\n\tEMT_TAGOVF                        = 0x1\n\tEMUL_ENABLED                      = 0x1\n\tEMUL_NATIVE                       = 0x2\n\tENDRUNDISC                        = 0x9\n\tETHERMIN                          = 0x2e\n\tETHERMTU                          = 0x5dc\n\tETHERTYPE_8023                    = 0x4\n\tETHERTYPE_AARP                    = 0x80f3\n\tETHERTYPE_ACCTON                  = 0x8390\n\tETHERTYPE_AEONIC                  = 0x8036\n\tETHERTYPE_ALPHA                   = 0x814a\n\tETHERTYPE_AMBER                   = 0x6008\n\tETHERTYPE_AMOEBA                  = 0x8145\n\tETHERTYPE_AOE                     = 0x88a2\n\tETHERTYPE_APOLLO                  = 0x80f7\n\tETHERTYPE_APOLLODOMAIN            = 0x8019\n\tETHERTYPE_APPLETALK               = 0x809b\n\tETHERTYPE_APPLITEK                = 0x80c7\n\tETHERTYPE_ARGONAUT                = 0x803a\n\tETHERTYPE_ARP                     = 0x806\n\tETHERTYPE_AT                      = 0x809b\n\tETHERTYPE_ATALK                   = 0x809b\n\tETHERTYPE_ATOMIC                  = 0x86df\n\tETHERTYPE_ATT                     = 0x8069\n\tETHERTYPE_ATTSTANFORD             = 0x8008\n\tETHERTYPE_AUTOPHON                = 0x806a\n\tETHERTYPE_AXIS                    = 0x8856\n\tETHERTYPE_BCLOOP                  = 0x9003\n\tETHERTYPE_BOFL                    = 0x8102\n\tETHERTYPE_CABLETRON               = 0x7034\n\tETHERTYPE_CHAOS                   = 0x804\n\tETHERTYPE_COMDESIGN               = 0x806c\n\tETHERTYPE_COMPUGRAPHIC            = 0x806d\n\tETHERTYPE_COUNTERPOINT            = 0x8062\n\tETHERTYPE_CRONUS                  = 0x8004\n\tETHERTYPE_CRONUSVLN               = 0x8003\n\tETHERTYPE_DCA                     = 0x1234\n\tETHERTYPE_DDE                     = 0x807b\n\tETHERTYPE_DEBNI                   = 0xaaaa\n\tETHERTYPE_DECAM                   = 0x8048\n\tETHERTYPE_DECCUST                 = 0x6006\n\tETHERTYPE_DECDIAG                 = 0x6005\n\tETHERTYPE_DECDNS                  = 0x803c\n\tETHERTYPE_DECDTS                  = 0x803e\n\tETHERTYPE_DECEXPER                = 0x6000\n\tETHERTYPE_DECLAST                 = 0x8041\n\tETHERTYPE_DECLTM                  = 0x803f\n\tETHERTYPE_DECMUMPS                = 0x6009\n\tETHERTYPE_DECNETBIOS              = 0x8040\n\tETHERTYPE_DELTACON                = 0x86de\n\tETHERTYPE_DIDDLE                  = 0x4321\n\tETHERTYPE_DLOG1                   = 0x660\n\tETHERTYPE_DLOG2                   = 0x661\n\tETHERTYPE_DN                      = 0x6003\n\tETHERTYPE_DOGFIGHT                = 0x1989\n\tETHERTYPE_DSMD                    = 0x8039\n\tETHERTYPE_ECMA                    = 0x803\n\tETHERTYPE_ENCRYPT                 = 0x803d\n\tETHERTYPE_ES                      = 0x805d\n\tETHERTYPE_EXCELAN                 = 0x8010\n\tETHERTYPE_EXPERDATA               = 0x8049\n\tETHERTYPE_FLIP                    = 0x8146\n\tETHERTYPE_FLOWCONTROL             = 0x8808\n\tETHERTYPE_FRARP                   = 0x808\n\tETHERTYPE_GENDYN                  = 0x8068\n\tETHERTYPE_HAYES                   = 0x8130\n\tETHERTYPE_HIPPI_FP                = 0x8180\n\tETHERTYPE_HITACHI                 = 0x8820\n\tETHERTYPE_HP                      = 0x8005\n\tETHERTYPE_IEEEPUP                 = 0xa00\n\tETHERTYPE_IEEEPUPAT               = 0xa01\n\tETHERTYPE_IMLBL                   = 0x4c42\n\tETHERTYPE_IMLBLDIAG               = 0x424c\n\tETHERTYPE_IP                      = 0x800\n\tETHERTYPE_IPAS                    = 0x876c\n\tETHERTYPE_IPV6                    = 0x86dd\n\tETHERTYPE_IPX                     = 0x8137\n\tETHERTYPE_IPXNEW                  = 0x8037\n\tETHERTYPE_KALPANA                 = 0x8582\n\tETHERTYPE_LANBRIDGE               = 0x8038\n\tETHERTYPE_LANPROBE                = 0x8888\n\tETHERTYPE_LAT                     = 0x6004\n\tETHERTYPE_LBACK                   = 0x9000\n\tETHERTYPE_LITTLE                  = 0x8060\n\tETHERTYPE_LLDP                    = 0x88cc\n\tETHERTYPE_LOGICRAFT               = 0x8148\n\tETHERTYPE_LOOPBACK                = 0x9000\n\tETHERTYPE_MATRA                   = 0x807a\n\tETHERTYPE_MAX                     = 0xffff\n\tETHERTYPE_MERIT                   = 0x807c\n\tETHERTYPE_MICP                    = 0x873a\n\tETHERTYPE_MOPDL                   = 0x6001\n\tETHERTYPE_MOPRC                   = 0x6002\n\tETHERTYPE_MOTOROLA                = 0x818d\n\tETHERTYPE_MPLS                    = 0x8847\n\tETHERTYPE_MPLS_MCAST              = 0x8848\n\tETHERTYPE_MUMPS                   = 0x813f\n\tETHERTYPE_NBPCC                   = 0x3c04\n\tETHERTYPE_NBPCLAIM                = 0x3c09\n\tETHERTYPE_NBPCLREQ                = 0x3c05\n\tETHERTYPE_NBPCLRSP                = 0x3c06\n\tETHERTYPE_NBPCREQ                 = 0x3c02\n\tETHERTYPE_NBPCRSP                 = 0x3c03\n\tETHERTYPE_NBPDG                   = 0x3c07\n\tETHERTYPE_NBPDGB                  = 0x3c08\n\tETHERTYPE_NBPDLTE                 = 0x3c0a\n\tETHERTYPE_NBPRAR                  = 0x3c0c\n\tETHERTYPE_NBPRAS                  = 0x3c0b\n\tETHERTYPE_NBPRST                  = 0x3c0d\n\tETHERTYPE_NBPSCD                  = 0x3c01\n\tETHERTYPE_NBPVCD                  = 0x3c00\n\tETHERTYPE_NBS                     = 0x802\n\tETHERTYPE_NCD                     = 0x8149\n\tETHERTYPE_NESTAR                  = 0x8006\n\tETHERTYPE_NETBEUI                 = 0x8191\n\tETHERTYPE_NOVELL                  = 0x8138\n\tETHERTYPE_NS                      = 0x600\n\tETHERTYPE_NSAT                    = 0x601\n\tETHERTYPE_NSCOMPAT                = 0x807\n\tETHERTYPE_NTRAILER                = 0x10\n\tETHERTYPE_OS9                     = 0x7007\n\tETHERTYPE_OS9NET                  = 0x7009\n\tETHERTYPE_PACER                   = 0x80c6\n\tETHERTYPE_PAE                     = 0x888e\n\tETHERTYPE_PBB                     = 0x88e7\n\tETHERTYPE_PCS                     = 0x4242\n\tETHERTYPE_PLANNING                = 0x8044\n\tETHERTYPE_PPP                     = 0x880b\n\tETHERTYPE_PPPOE                   = 0x8864\n\tETHERTYPE_PPPOEDISC               = 0x8863\n\tETHERTYPE_PRIMENTS                = 0x7031\n\tETHERTYPE_PUP                     = 0x200\n\tETHERTYPE_PUPAT                   = 0x200\n\tETHERTYPE_QINQ                    = 0x88a8\n\tETHERTYPE_RACAL                   = 0x7030\n\tETHERTYPE_RATIONAL                = 0x8150\n\tETHERTYPE_RAWFR                   = 0x6559\n\tETHERTYPE_RCL                     = 0x1995\n\tETHERTYPE_RDP                     = 0x8739\n\tETHERTYPE_RETIX                   = 0x80f2\n\tETHERTYPE_REVARP                  = 0x8035\n\tETHERTYPE_SCA                     = 0x6007\n\tETHERTYPE_SECTRA                  = 0x86db\n\tETHERTYPE_SECUREDATA              = 0x876d\n\tETHERTYPE_SGITW                   = 0x817e\n\tETHERTYPE_SG_BOUNCE               = 0x8016\n\tETHERTYPE_SG_DIAG                 = 0x8013\n\tETHERTYPE_SG_NETGAMES             = 0x8014\n\tETHERTYPE_SG_RESV                 = 0x8015\n\tETHERTYPE_SIMNET                  = 0x5208\n\tETHERTYPE_SLOW                    = 0x8809\n\tETHERTYPE_SNA                     = 0x80d5\n\tETHERTYPE_SNMP                    = 0x814c\n\tETHERTYPE_SONIX                   = 0xfaf5\n\tETHERTYPE_SPIDER                  = 0x809f\n\tETHERTYPE_SPRITE                  = 0x500\n\tETHERTYPE_STP                     = 0x8181\n\tETHERTYPE_TALARIS                 = 0x812b\n\tETHERTYPE_TALARISMC               = 0x852b\n\tETHERTYPE_TCPCOMP                 = 0x876b\n\tETHERTYPE_TCPSM                   = 0x9002\n\tETHERTYPE_TEC                     = 0x814f\n\tETHERTYPE_TIGAN                   = 0x802f\n\tETHERTYPE_TRAIL                   = 0x1000\n\tETHERTYPE_TRANSETHER              = 0x6558\n\tETHERTYPE_TYMSHARE                = 0x802e\n\tETHERTYPE_UBBST                   = 0x7005\n\tETHERTYPE_UBDEBUG                 = 0x900\n\tETHERTYPE_UBDIAGLOOP              = 0x7002\n\tETHERTYPE_UBDL                    = 0x7000\n\tETHERTYPE_UBNIU                   = 0x7001\n\tETHERTYPE_UBNMC                   = 0x7003\n\tETHERTYPE_VALID                   = 0x1600\n\tETHERTYPE_VARIAN                  = 0x80dd\n\tETHERTYPE_VAXELN                  = 0x803b\n\tETHERTYPE_VEECO                   = 0x8067\n\tETHERTYPE_VEXP                    = 0x805b\n\tETHERTYPE_VGLAB                   = 0x8131\n\tETHERTYPE_VINES                   = 0xbad\n\tETHERTYPE_VINESECHO               = 0xbaf\n\tETHERTYPE_VINESLOOP               = 0xbae\n\tETHERTYPE_VITAL                   = 0xff00\n\tETHERTYPE_VLAN                    = 0x8100\n\tETHERTYPE_VLTLMAN                 = 0x8080\n\tETHERTYPE_VPROD                   = 0x805c\n\tETHERTYPE_VURESERVED              = 0x8147\n\tETHERTYPE_WATERLOO                = 0x8130\n\tETHERTYPE_WELLFLEET               = 0x8103\n\tETHERTYPE_X25                     = 0x805\n\tETHERTYPE_X75                     = 0x801\n\tETHERTYPE_XNSSM                   = 0x9001\n\tETHERTYPE_XTP                     = 0x817d\n\tETHER_ADDR_LEN                    = 0x6\n\tETHER_ALIGN                       = 0x2\n\tETHER_CRC_LEN                     = 0x4\n\tETHER_CRC_POLY_BE                 = 0x4c11db6\n\tETHER_CRC_POLY_LE                 = 0xedb88320\n\tETHER_HDR_LEN                     = 0xe\n\tETHER_MAX_DIX_LEN                 = 0x600\n\tETHER_MAX_HARDMTU_LEN             = 0xff9b\n\tETHER_MAX_LEN                     = 0x5ee\n\tETHER_MIN_LEN                     = 0x40\n\tETHER_TYPE_LEN                    = 0x2\n\tETHER_VLAN_ENCAP_LEN              = 0x4\n\tEVFILT_AIO                        = -0x3\n\tEVFILT_DEVICE                     = -0x8\n\tEVFILT_PROC                       = -0x5\n\tEVFILT_READ                       = -0x1\n\tEVFILT_SIGNAL                     = -0x6\n\tEVFILT_SYSCOUNT                   = 0x8\n\tEVFILT_TIMER                      = -0x7\n\tEVFILT_VNODE                      = -0x4\n\tEVFILT_WRITE                      = -0x2\n\tEVL_ENCAPLEN                      = 0x4\n\tEVL_PRIO_BITS                     = 0xd\n\tEVL_PRIO_MAX                      = 0x7\n\tEVL_VLID_MASK                     = 0xfff\n\tEVL_VLID_MAX                      = 0xffe\n\tEVL_VLID_MIN                      = 0x1\n\tEVL_VLID_NULL                     = 0x0\n\tEV_ADD                            = 0x1\n\tEV_CLEAR                          = 0x20\n\tEV_DELETE                         = 0x2\n\tEV_DISABLE                        = 0x8\n\tEV_DISPATCH                       = 0x80\n\tEV_ENABLE                         = 0x4\n\tEV_EOF                            = 0x8000\n\tEV_ERROR                          = 0x4000\n\tEV_FLAG1                          = 0x2000\n\tEV_ONESHOT                        = 0x10\n\tEV_RECEIPT                        = 0x40\n\tEV_SYSFLAGS                       = 0xf000\n\tEXTA                              = 0x4b00\n\tEXTB                              = 0x9600\n\tEXTPROC                           = 0x800\n\tFD_CLOEXEC                        = 0x1\n\tFD_SETSIZE                        = 0x400\n\tFLUSHO                            = 0x800000\n\tF_DUPFD                           = 0x0\n\tF_DUPFD_CLOEXEC                   = 0xa\n\tF_GETFD                           = 0x1\n\tF_GETFL                           = 0x3\n\tF_GETLK                           = 0x7\n\tF_GETOWN                          = 0x5\n\tF_ISATTY                          = 0xb\n\tF_OK                              = 0x0\n\tF_RDLCK                           = 0x1\n\tF_SETFD                           = 0x2\n\tF_SETFL                           = 0x4\n\tF_SETLK                           = 0x8\n\tF_SETLKW                          = 0x9\n\tF_SETOWN                          = 0x6\n\tF_UNLCK                           = 0x2\n\tF_WRLCK                           = 0x3\n\tHUPCL                             = 0x4000\n\tHW_MACHINE                        = 0x1\n\tICANON                            = 0x100\n\tICMP6_FILTER                      = 0x12\n\tICRNL                             = 0x100\n\tIEXTEN                            = 0x400\n\tIFAN_ARRIVAL                      = 0x0\n\tIFAN_DEPARTURE                    = 0x1\n\tIFF_ALLMULTI                      = 0x200\n\tIFF_BROADCAST                     = 0x2\n\tIFF_CANTCHANGE                    = 0x8e52\n\tIFF_DEBUG                         = 0x4\n\tIFF_LINK0                         = 0x1000\n\tIFF_LINK1                         = 0x2000\n\tIFF_LINK2                         = 0x4000\n\tIFF_LOOPBACK                      = 0x8\n\tIFF_MULTICAST                     = 0x8000\n\tIFF_NOARP                         = 0x80\n\tIFF_OACTIVE                       = 0x400\n\tIFF_POINTOPOINT                   = 0x10\n\tIFF_PROMISC                       = 0x100\n\tIFF_RUNNING                       = 0x40\n\tIFF_SIMPLEX                       = 0x800\n\tIFF_STATICARP                     = 0x20\n\tIFF_UP                            = 0x1\n\tIFNAMSIZ                          = 0x10\n\tIFT_1822                          = 0x2\n\tIFT_A12MPPSWITCH                  = 0x82\n\tIFT_AAL2                          = 0xbb\n\tIFT_AAL5                          = 0x31\n\tIFT_ADSL                          = 0x5e\n\tIFT_AFLANE8023                    = 0x3b\n\tIFT_AFLANE8025                    = 0x3c\n\tIFT_ARAP                          = 0x58\n\tIFT_ARCNET                        = 0x23\n\tIFT_ARCNETPLUS                    = 0x24\n\tIFT_ASYNC                         = 0x54\n\tIFT_ATM                           = 0x25\n\tIFT_ATMDXI                        = 0x69\n\tIFT_ATMFUNI                       = 0x6a\n\tIFT_ATMIMA                        = 0x6b\n\tIFT_ATMLOGICAL                    = 0x50\n\tIFT_ATMRADIO                      = 0xbd\n\tIFT_ATMSUBINTERFACE               = 0x86\n\tIFT_ATMVCIENDPT                   = 0xc2\n\tIFT_ATMVIRTUAL                    = 0x95\n\tIFT_BGPPOLICYACCOUNTING           = 0xa2\n\tIFT_BLUETOOTH                     = 0xf8\n\tIFT_BRIDGE                        = 0xd1\n\tIFT_BSC                           = 0x53\n\tIFT_CARP                          = 0xf7\n\tIFT_CCTEMUL                       = 0x3d\n\tIFT_CEPT                          = 0x13\n\tIFT_CES                           = 0x85\n\tIFT_CHANNEL                       = 0x46\n\tIFT_CNR                           = 0x55\n\tIFT_COFFEE                        = 0x84\n\tIFT_COMPOSITELINK                 = 0x9b\n\tIFT_DCN                           = 0x8d\n\tIFT_DIGITALPOWERLINE              = 0x8a\n\tIFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba\n\tIFT_DLSW                          = 0x4a\n\tIFT_DOCSCABLEDOWNSTREAM           = 0x80\n\tIFT_DOCSCABLEMACLAYER             = 0x7f\n\tIFT_DOCSCABLEUPSTREAM             = 0x81\n\tIFT_DOCSCABLEUPSTREAMCHANNEL      = 0xcd\n\tIFT_DS0                           = 0x51\n\tIFT_DS0BUNDLE                     = 0x52\n\tIFT_DS1FDL                        = 0xaa\n\tIFT_DS3                           = 0x1e\n\tIFT_DTM                           = 0x8c\n\tIFT_DUMMY                         = 0xf1\n\tIFT_DVBASILN                      = 0xac\n\tIFT_DVBASIOUT                     = 0xad\n\tIFT_DVBRCCDOWNSTREAM              = 0x93\n\tIFT_DVBRCCMACLAYER                = 0x92\n\tIFT_DVBRCCUPSTREAM                = 0x94\n\tIFT_ECONET                        = 0xce\n\tIFT_ENC                           = 0xf4\n\tIFT_EON                           = 0x19\n\tIFT_EPLRS                         = 0x57\n\tIFT_ESCON                         = 0x49\n\tIFT_ETHER                         = 0x6\n\tIFT_FAITH                         = 0xf3\n\tIFT_FAST                          = 0x7d\n\tIFT_FASTETHER                     = 0x3e\n\tIFT_FASTETHERFX                   = 0x45\n\tIFT_FDDI                          = 0xf\n\tIFT_FIBRECHANNEL                  = 0x38\n\tIFT_FRAMERELAYINTERCONNECT        = 0x3a\n\tIFT_FRAMERELAYMPI                 = 0x5c\n\tIFT_FRDLCIENDPT                   = 0xc1\n\tIFT_FRELAY                        = 0x20\n\tIFT_FRELAYDCE                     = 0x2c\n\tIFT_FRF16MFRBUNDLE                = 0xa3\n\tIFT_FRFORWARD                     = 0x9e\n\tIFT_G703AT2MB                     = 0x43\n\tIFT_G703AT64K                     = 0x42\n\tIFT_GIF                           = 0xf0\n\tIFT_GIGABITETHERNET               = 0x75\n\tIFT_GR303IDT                      = 0xb2\n\tIFT_GR303RDT                      = 0xb1\n\tIFT_H323GATEKEEPER                = 0xa4\n\tIFT_H323PROXY                     = 0xa5\n\tIFT_HDH1822                       = 0x3\n\tIFT_HDLC                          = 0x76\n\tIFT_HDSL2                         = 0xa8\n\tIFT_HIPERLAN2                     = 0xb7\n\tIFT_HIPPI                         = 0x2f\n\tIFT_HIPPIINTERFACE                = 0x39\n\tIFT_HOSTPAD                       = 0x5a\n\tIFT_HSSI                          = 0x2e\n\tIFT_HY                            = 0xe\n\tIFT_IBM370PARCHAN                 = 0x48\n\tIFT_IDSL                          = 0x9a\n\tIFT_IEEE1394                      = 0x90\n\tIFT_IEEE80211                     = 0x47\n\tIFT_IEEE80212                     = 0x37\n\tIFT_IEEE8023ADLAG                 = 0xa1\n\tIFT_IFGSN                         = 0x91\n\tIFT_IMT                           = 0xbe\n\tIFT_INFINIBAND                    = 0xc7\n\tIFT_INTERLEAVE                    = 0x7c\n\tIFT_IP                            = 0x7e\n\tIFT_IPFORWARD                     = 0x8e\n\tIFT_IPOVERATM                     = 0x72\n\tIFT_IPOVERCDLC                    = 0x6d\n\tIFT_IPOVERCLAW                    = 0x6e\n\tIFT_IPSWITCH                      = 0x4e\n\tIFT_ISDN                          = 0x3f\n\tIFT_ISDNBASIC                     = 0x14\n\tIFT_ISDNPRIMARY                   = 0x15\n\tIFT_ISDNS                         = 0x4b\n\tIFT_ISDNU                         = 0x4c\n\tIFT_ISO88022LLC                   = 0x29\n\tIFT_ISO88023                      = 0x7\n\tIFT_ISO88024                      = 0x8\n\tIFT_ISO88025                      = 0x9\n\tIFT_ISO88025CRFPINT               = 0x62\n\tIFT_ISO88025DTR                   = 0x56\n\tIFT_ISO88025FIBER                 = 0x73\n\tIFT_ISO88026                      = 0xa\n\tIFT_ISUP                          = 0xb3\n\tIFT_L2VLAN                        = 0x87\n\tIFT_L3IPVLAN                      = 0x88\n\tIFT_L3IPXVLAN                     = 0x89\n\tIFT_LAPB                          = 0x10\n\tIFT_LAPD                          = 0x4d\n\tIFT_LAPF                          = 0x77\n\tIFT_LINEGROUP                     = 0xd2\n\tIFT_LOCALTALK                     = 0x2a\n\tIFT_LOOP                          = 0x18\n\tIFT_MBIM                          = 0xfa\n\tIFT_MEDIAMAILOVERIP               = 0x8b\n\tIFT_MFSIGLINK                     = 0xa7\n\tIFT_MIOX25                        = 0x26\n\tIFT_MODEM                         = 0x30\n\tIFT_MPC                           = 0x71\n\tIFT_MPLS                          = 0xa6\n\tIFT_MPLSTUNNEL                    = 0x96\n\tIFT_MSDSL                         = 0x8f\n\tIFT_MVL                           = 0xbf\n\tIFT_MYRINET                       = 0x63\n\tIFT_NFAS                          = 0xaf\n\tIFT_NSIP                          = 0x1b\n\tIFT_OPTICALCHANNEL                = 0xc3\n\tIFT_OPTICALTRANSPORT              = 0xc4\n\tIFT_OTHER                         = 0x1\n\tIFT_P10                           = 0xc\n\tIFT_P80                           = 0xd\n\tIFT_PARA                          = 0x22\n\tIFT_PFLOG                         = 0xf5\n\tIFT_PFLOW                         = 0xf9\n\tIFT_PFSYNC                        = 0xf6\n\tIFT_PLC                           = 0xae\n\tIFT_PON155                        = 0xcf\n\tIFT_PON622                        = 0xd0\n\tIFT_POS                           = 0xab\n\tIFT_PPP                           = 0x17\n\tIFT_PPPMULTILINKBUNDLE            = 0x6c\n\tIFT_PROPATM                       = 0xc5\n\tIFT_PROPBWAP2MP                   = 0xb8\n\tIFT_PROPCNLS                      = 0x59\n\tIFT_PROPDOCSWIRELESSDOWNSTREAM    = 0xb5\n\tIFT_PROPDOCSWIRELESSMACLAYER      = 0xb4\n\tIFT_PROPDOCSWIRELESSUPSTREAM      = 0xb6\n\tIFT_PROPMUX                       = 0x36\n\tIFT_PROPVIRTUAL                   = 0x35\n\tIFT_PROPWIRELESSP2P               = 0x9d\n\tIFT_PTPSERIAL                     = 0x16\n\tIFT_PVC                           = 0xf2\n\tIFT_Q2931                         = 0xc9\n\tIFT_QLLC                          = 0x44\n\tIFT_RADIOMAC                      = 0xbc\n\tIFT_RADSL                         = 0x5f\n\tIFT_REACHDSL                      = 0xc0\n\tIFT_RFC1483                       = 0x9f\n\tIFT_RS232                         = 0x21\n\tIFT_RSRB                          = 0x4f\n\tIFT_SDLC                          = 0x11\n\tIFT_SDSL                          = 0x60\n\tIFT_SHDSL                         = 0xa9\n\tIFT_SIP                           = 0x1f\n\tIFT_SIPSIG                        = 0xcc\n\tIFT_SIPTG                         = 0xcb\n\tIFT_SLIP                          = 0x1c\n\tIFT_SMDSDXI                       = 0x2b\n\tIFT_SMDSICIP                      = 0x34\n\tIFT_SONET                         = 0x27\n\tIFT_SONETOVERHEADCHANNEL          = 0xb9\n\tIFT_SONETPATH                     = 0x32\n\tIFT_SONETVT                       = 0x33\n\tIFT_SRP                           = 0x97\n\tIFT_SS7SIGLINK                    = 0x9c\n\tIFT_STACKTOSTACK                  = 0x6f\n\tIFT_STARLAN                       = 0xb\n\tIFT_T1                            = 0x12\n\tIFT_TDLC                          = 0x74\n\tIFT_TELINK                        = 0xc8\n\tIFT_TERMPAD                       = 0x5b\n\tIFT_TR008                         = 0xb0\n\tIFT_TRANSPHDLC                    = 0x7b\n\tIFT_TUNNEL                        = 0x83\n\tIFT_ULTRA                         = 0x1d\n\tIFT_USB                           = 0xa0\n\tIFT_V11                           = 0x40\n\tIFT_V35                           = 0x2d\n\tIFT_V36                           = 0x41\n\tIFT_V37                           = 0x78\n\tIFT_VDSL                          = 0x61\n\tIFT_VIRTUALIPADDRESS              = 0x70\n\tIFT_VIRTUALTG                     = 0xca\n\tIFT_VOICEDID                      = 0xd5\n\tIFT_VOICEEM                       = 0x64\n\tIFT_VOICEEMFGD                    = 0xd3\n\tIFT_VOICEENCAP                    = 0x67\n\tIFT_VOICEFGDEANA                  = 0xd4\n\tIFT_VOICEFXO                      = 0x65\n\tIFT_VOICEFXS                      = 0x66\n\tIFT_VOICEOVERATM                  = 0x98\n\tIFT_VOICEOVERCABLE                = 0xc6\n\tIFT_VOICEOVERFRAMERELAY           = 0x99\n\tIFT_VOICEOVERIP                   = 0x68\n\tIFT_X213                          = 0x5d\n\tIFT_X25                           = 0x5\n\tIFT_X25DDN                        = 0x4\n\tIFT_X25HUNTGROUP                  = 0x7a\n\tIFT_X25MLP                        = 0x79\n\tIFT_X25PLE                        = 0x28\n\tIFT_XETHER                        = 0x1a\n\tIGNBRK                            = 0x1\n\tIGNCR                             = 0x80\n\tIGNPAR                            = 0x4\n\tIMAXBEL                           = 0x2000\n\tINLCR                             = 0x40\n\tINPCK                             = 0x10\n\tIN_CLASSA_HOST                    = 0xffffff\n\tIN_CLASSA_MAX                     = 0x80\n\tIN_CLASSA_NET                     = 0xff000000\n\tIN_CLASSA_NSHIFT                  = 0x18\n\tIN_CLASSB_HOST                    = 0xffff\n\tIN_CLASSB_MAX                     = 0x10000\n\tIN_CLASSB_NET                     = 0xffff0000\n\tIN_CLASSB_NSHIFT                  = 0x10\n\tIN_CLASSC_HOST                    = 0xff\n\tIN_CLASSC_NET                     = 0xffffff00\n\tIN_CLASSC_NSHIFT                  = 0x8\n\tIN_CLASSD_HOST                    = 0xfffffff\n\tIN_CLASSD_NET                     = 0xf0000000\n\tIN_CLASSD_NSHIFT                  = 0x1c\n\tIN_LOOPBACKNET                    = 0x7f\n\tIN_RFC3021_HOST                   = 0x1\n\tIN_RFC3021_NET                    = 0xfffffffe\n\tIN_RFC3021_NSHIFT                 = 0x1f\n\tIPPROTO_AH                        = 0x33\n\tIPPROTO_CARP                      = 0x70\n\tIPPROTO_DIVERT                    = 0x102\n\tIPPROTO_DONE                      = 0x101\n\tIPPROTO_DSTOPTS                   = 0x3c\n\tIPPROTO_EGP                       = 0x8\n\tIPPROTO_ENCAP                     = 0x62\n\tIPPROTO_EON                       = 0x50\n\tIPPROTO_ESP                       = 0x32\n\tIPPROTO_ETHERIP                   = 0x61\n\tIPPROTO_FRAGMENT                  = 0x2c\n\tIPPROTO_GGP                       = 0x3\n\tIPPROTO_GRE                       = 0x2f\n\tIPPROTO_HOPOPTS                   = 0x0\n\tIPPROTO_ICMP                      = 0x1\n\tIPPROTO_ICMPV6                    = 0x3a\n\tIPPROTO_IDP                       = 0x16\n\tIPPROTO_IGMP                      = 0x2\n\tIPPROTO_IP                        = 0x0\n\tIPPROTO_IPCOMP                    = 0x6c\n\tIPPROTO_IPIP                      = 0x4\n\tIPPROTO_IPV4                      = 0x4\n\tIPPROTO_IPV6                      = 0x29\n\tIPPROTO_MAX                       = 0x100\n\tIPPROTO_MAXID                     = 0x103\n\tIPPROTO_MOBILE                    = 0x37\n\tIPPROTO_MPLS                      = 0x89\n\tIPPROTO_NONE                      = 0x3b\n\tIPPROTO_PFSYNC                    = 0xf0\n\tIPPROTO_PIM                       = 0x67\n\tIPPROTO_PUP                       = 0xc\n\tIPPROTO_RAW                       = 0xff\n\tIPPROTO_ROUTING                   = 0x2b\n\tIPPROTO_RSVP                      = 0x2e\n\tIPPROTO_TCP                       = 0x6\n\tIPPROTO_TP                        = 0x1d\n\tIPPROTO_UDP                       = 0x11\n\tIPV6_AUTH_LEVEL                   = 0x35\n\tIPV6_AUTOFLOWLABEL                = 0x3b\n\tIPV6_CHECKSUM                     = 0x1a\n\tIPV6_DEFAULT_MULTICAST_HOPS       = 0x1\n\tIPV6_DEFAULT_MULTICAST_LOOP       = 0x1\n\tIPV6_DEFHLIM                      = 0x40\n\tIPV6_DONTFRAG                     = 0x3e\n\tIPV6_DSTOPTS                      = 0x32\n\tIPV6_ESP_NETWORK_LEVEL            = 0x37\n\tIPV6_ESP_TRANS_LEVEL              = 0x36\n\tIPV6_FAITH                        = 0x1d\n\tIPV6_FLOWINFO_MASK                = 0xffffff0f\n\tIPV6_FLOWLABEL_MASK               = 0xffff0f00\n\tIPV6_FRAGTTL                      = 0x78\n\tIPV6_HLIMDEC                      = 0x1\n\tIPV6_HOPLIMIT                     = 0x2f\n\tIPV6_HOPOPTS                      = 0x31\n\tIPV6_IPCOMP_LEVEL                 = 0x3c\n\tIPV6_JOIN_GROUP                   = 0xc\n\tIPV6_LEAVE_GROUP                  = 0xd\n\tIPV6_MAXHLIM                      = 0xff\n\tIPV6_MAXPACKET                    = 0xffff\n\tIPV6_MINHOPCOUNT                  = 0x41\n\tIPV6_MMTU                         = 0x500\n\tIPV6_MULTICAST_HOPS               = 0xa\n\tIPV6_MULTICAST_IF                 = 0x9\n\tIPV6_MULTICAST_LOOP               = 0xb\n\tIPV6_NEXTHOP                      = 0x30\n\tIPV6_OPTIONS                      = 0x1\n\tIPV6_PATHMTU                      = 0x2c\n\tIPV6_PIPEX                        = 0x3f\n\tIPV6_PKTINFO                      = 0x2e\n\tIPV6_PORTRANGE                    = 0xe\n\tIPV6_PORTRANGE_DEFAULT            = 0x0\n\tIPV6_PORTRANGE_HIGH               = 0x1\n\tIPV6_PORTRANGE_LOW                = 0x2\n\tIPV6_RECVDSTOPTS                  = 0x28\n\tIPV6_RECVDSTPORT                  = 0x40\n\tIPV6_RECVHOPLIMIT                 = 0x25\n\tIPV6_RECVHOPOPTS                  = 0x27\n\tIPV6_RECVPATHMTU                  = 0x2b\n\tIPV6_RECVPKTINFO                  = 0x24\n\tIPV6_RECVRTHDR                    = 0x26\n\tIPV6_RECVTCLASS                   = 0x39\n\tIPV6_RTABLE                       = 0x1021\n\tIPV6_RTHDR                        = 0x33\n\tIPV6_RTHDRDSTOPTS                 = 0x23\n\tIPV6_RTHDR_LOOSE                  = 0x0\n\tIPV6_RTHDR_STRICT                 = 0x1\n\tIPV6_RTHDR_TYPE_0                 = 0x0\n\tIPV6_SOCKOPT_RESERVED1            = 0x3\n\tIPV6_TCLASS                       = 0x3d\n\tIPV6_UNICAST_HOPS                 = 0x4\n\tIPV6_USE_MIN_MTU                  = 0x2a\n\tIPV6_V6ONLY                       = 0x1b\n\tIPV6_VERSION                      = 0x60\n\tIPV6_VERSION_MASK                 = 0xf0\n\tIP_ADD_MEMBERSHIP                 = 0xc\n\tIP_AUTH_LEVEL                     = 0x14\n\tIP_DEFAULT_MULTICAST_LOOP         = 0x1\n\tIP_DEFAULT_MULTICAST_TTL          = 0x1\n\tIP_DF                             = 0x4000\n\tIP_DROP_MEMBERSHIP                = 0xd\n\tIP_ESP_NETWORK_LEVEL              = 0x16\n\tIP_ESP_TRANS_LEVEL                = 0x15\n\tIP_HDRINCL                        = 0x2\n\tIP_IPCOMP_LEVEL                   = 0x1d\n\tIP_IPDEFTTL                       = 0x25\n\tIP_IPSECFLOWINFO                  = 0x24\n\tIP_IPSEC_LOCAL_AUTH               = 0x1b\n\tIP_IPSEC_LOCAL_CRED               = 0x19\n\tIP_IPSEC_LOCAL_ID                 = 0x17\n\tIP_IPSEC_REMOTE_AUTH              = 0x1c\n\tIP_IPSEC_REMOTE_CRED              = 0x1a\n\tIP_IPSEC_REMOTE_ID                = 0x18\n\tIP_MAXPACKET                      = 0xffff\n\tIP_MAX_MEMBERSHIPS                = 0xfff\n\tIP_MF                             = 0x2000\n\tIP_MINTTL                         = 0x20\n\tIP_MIN_MEMBERSHIPS                = 0xf\n\tIP_MSS                            = 0x240\n\tIP_MULTICAST_IF                   = 0x9\n\tIP_MULTICAST_LOOP                 = 0xb\n\tIP_MULTICAST_TTL                  = 0xa\n\tIP_OFFMASK                        = 0x1fff\n\tIP_OPTIONS                        = 0x1\n\tIP_PIPEX                          = 0x22\n\tIP_PORTRANGE                      = 0x13\n\tIP_PORTRANGE_DEFAULT              = 0x0\n\tIP_PORTRANGE_HIGH                 = 0x1\n\tIP_PORTRANGE_LOW                  = 0x2\n\tIP_RECVDSTADDR                    = 0x7\n\tIP_RECVDSTPORT                    = 0x21\n\tIP_RECVIF                         = 0x1e\n\tIP_RECVOPTS                       = 0x5\n\tIP_RECVRETOPTS                    = 0x6\n\tIP_RECVRTABLE                     = 0x23\n\tIP_RECVTTL                        = 0x1f\n\tIP_RETOPTS                        = 0x8\n\tIP_RF                             = 0x8000\n\tIP_RTABLE                         = 0x1021\n\tIP_SENDSRCADDR                    = 0x7\n\tIP_TOS                            = 0x3\n\tIP_TTL                            = 0x4\n\tISIG                              = 0x80\n\tISTRIP                            = 0x20\n\tIUCLC                             = 0x1000\n\tIXANY                             = 0x800\n\tIXOFF                             = 0x400\n\tIXON                              = 0x200\n\tKERN_HOSTNAME                     = 0xa\n\tKERN_OSRELEASE                    = 0x2\n\tKERN_OSTYPE                       = 0x1\n\tKERN_VERSION                      = 0x4\n\tLCNT_OVERLOAD_FLUSH               = 0x6\n\tLOCK_EX                           = 0x2\n\tLOCK_NB                           = 0x4\n\tLOCK_SH                           = 0x1\n\tLOCK_UN                           = 0x8\n\tMADV_DONTNEED                     = 0x4\n\tMADV_FREE                         = 0x6\n\tMADV_NORMAL                       = 0x0\n\tMADV_RANDOM                       = 0x1\n\tMADV_SEQUENTIAL                   = 0x2\n\tMADV_SPACEAVAIL                   = 0x5\n\tMADV_WILLNEED                     = 0x3\n\tMAP_ANON                          = 0x1000\n\tMAP_ANONYMOUS                     = 0x1000\n\tMAP_CONCEAL                       = 0x8000\n\tMAP_COPY                          = 0x2\n\tMAP_FILE                          = 0x0\n\tMAP_FIXED                         = 0x10\n\tMAP_FLAGMASK                      = 0xfff7\n\tMAP_HASSEMAPHORE                  = 0x0\n\tMAP_INHERIT                       = 0x0\n\tMAP_INHERIT_COPY                  = 0x1\n\tMAP_INHERIT_NONE                  = 0x2\n\tMAP_INHERIT_SHARE                 = 0x0\n\tMAP_INHERIT_ZERO                  = 0x3\n\tMAP_NOEXTEND                      = 0x0\n\tMAP_NORESERVE                     = 0x0\n\tMAP_PRIVATE                       = 0x2\n\tMAP_RENAME                        = 0x0\n\tMAP_SHARED                        = 0x1\n\tMAP_STACK                         = 0x4000\n\tMAP_TRYFIXED                      = 0x0\n\tMCL_CURRENT                       = 0x1\n\tMCL_FUTURE                        = 0x2\n\tMNT_ASYNC                         = 0x40\n\tMNT_DEFEXPORTED                   = 0x200\n\tMNT_DELEXPORT                     = 0x20000\n\tMNT_DOOMED                        = 0x8000000\n\tMNT_EXPORTANON                    = 0x400\n\tMNT_EXPORTED                      = 0x100\n\tMNT_EXRDONLY                      = 0x80\n\tMNT_FORCE                         = 0x80000\n\tMNT_LAZY                          = 0x3\n\tMNT_LOCAL                         = 0x1000\n\tMNT_NOATIME                       = 0x8000\n\tMNT_NODEV                         = 0x10\n\tMNT_NOEXEC                        = 0x4\n\tMNT_NOPERM                        = 0x20\n\tMNT_NOSUID                        = 0x8\n\tMNT_NOWAIT                        = 0x2\n\tMNT_QUOTA                         = 0x2000\n\tMNT_RDONLY                        = 0x1\n\tMNT_RELOAD                        = 0x40000\n\tMNT_ROOTFS                        = 0x4000\n\tMNT_SOFTDEP                       = 0x4000000\n\tMNT_STALLED                       = 0x100000\n\tMNT_SWAPPABLE                     = 0x200000\n\tMNT_SYNCHRONOUS                   = 0x2\n\tMNT_UPDATE                        = 0x10000\n\tMNT_VISFLAGMASK                   = 0x400ffff\n\tMNT_WAIT                          = 0x1\n\tMNT_WANTRDWR                      = 0x2000000\n\tMNT_WXALLOWED                     = 0x800\n\tMSG_BCAST                         = 0x100\n\tMSG_CMSG_CLOEXEC                  = 0x800\n\tMSG_CTRUNC                        = 0x20\n\tMSG_DONTROUTE                     = 0x4\n\tMSG_DONTWAIT                      = 0x80\n\tMSG_EOR                           = 0x8\n\tMSG_MCAST                         = 0x200\n\tMSG_NOSIGNAL                      = 0x400\n\tMSG_OOB                           = 0x1\n\tMSG_PEEK                          = 0x2\n\tMSG_TRUNC                         = 0x10\n\tMSG_WAITALL                       = 0x40\n\tMS_ASYNC                          = 0x1\n\tMS_INVALIDATE                     = 0x4\n\tMS_SYNC                           = 0x2\n\tNAME_MAX                          = 0xff\n\tNET_RT_DUMP                       = 0x1\n\tNET_RT_FLAGS                      = 0x2\n\tNET_RT_IFLIST                     = 0x3\n\tNET_RT_IFNAMES                    = 0x6\n\tNET_RT_MAXID                      = 0x7\n\tNET_RT_STATS                      = 0x4\n\tNET_RT_TABLE                      = 0x5\n\tNOFLSH                            = 0x80000000\n\tNOKERNINFO                        = 0x2000000\n\tNOTE_ATTRIB                       = 0x8\n\tNOTE_CHANGE                       = 0x1\n\tNOTE_CHILD                        = 0x4\n\tNOTE_DELETE                       = 0x1\n\tNOTE_EOF                          = 0x2\n\tNOTE_EXEC                         = 0x20000000\n\tNOTE_EXIT                         = 0x80000000\n\tNOTE_EXTEND                       = 0x4\n\tNOTE_FORK                         = 0x40000000\n\tNOTE_LINK                         = 0x10\n\tNOTE_LOWAT                        = 0x1\n\tNOTE_PCTRLMASK                    = 0xf0000000\n\tNOTE_PDATAMASK                    = 0xfffff\n\tNOTE_RENAME                       = 0x20\n\tNOTE_REVOKE                       = 0x40\n\tNOTE_TRACK                        = 0x1\n\tNOTE_TRACKERR                     = 0x2\n\tNOTE_TRUNCATE                     = 0x80\n\tNOTE_WRITE                        = 0x2\n\tOCRNL                             = 0x10\n\tOLCUC                             = 0x20\n\tONLCR                             = 0x2\n\tONLRET                            = 0x80\n\tONOCR                             = 0x40\n\tONOEOT                            = 0x8\n\tOPOST                             = 0x1\n\tOXTABS                            = 0x4\n\tO_ACCMODE                         = 0x3\n\tO_APPEND                          = 0x8\n\tO_ASYNC                           = 0x40\n\tO_CLOEXEC                         = 0x10000\n\tO_CREAT                           = 0x200\n\tO_DIRECTORY                       = 0x20000\n\tO_DSYNC                           = 0x80\n\tO_EXCL                            = 0x800\n\tO_EXLOCK                          = 0x20\n\tO_FSYNC                           = 0x80\n\tO_NDELAY                          = 0x4\n\tO_NOCTTY                          = 0x8000\n\tO_NOFOLLOW                        = 0x100\n\tO_NONBLOCK                        = 0x4\n\tO_RDONLY                          = 0x0\n\tO_RDWR                            = 0x2\n\tO_RSYNC                           = 0x80\n\tO_SHLOCK                          = 0x10\n\tO_SYNC                            = 0x80\n\tO_TRUNC                           = 0x400\n\tO_WRONLY                          = 0x1\n\tPARENB                            = 0x1000\n\tPARMRK                            = 0x8\n\tPARODD                            = 0x2000\n\tPENDIN                            = 0x20000000\n\tPF_FLUSH                          = 0x1\n\tPRIO_PGRP                         = 0x1\n\tPRIO_PROCESS                      = 0x0\n\tPRIO_USER                         = 0x2\n\tPROT_EXEC                         = 0x4\n\tPROT_NONE                         = 0x0\n\tPROT_READ                         = 0x1\n\tPROT_WRITE                        = 0x2\n\tRLIMIT_CORE                       = 0x4\n\tRLIMIT_CPU                        = 0x0\n\tRLIMIT_DATA                       = 0x2\n\tRLIMIT_FSIZE                      = 0x1\n\tRLIMIT_MEMLOCK                    = 0x6\n\tRLIMIT_NOFILE                     = 0x8\n\tRLIMIT_NPROC                      = 0x7\n\tRLIMIT_RSS                        = 0x5\n\tRLIMIT_STACK                      = 0x3\n\tRLIM_INFINITY                     = 0x7fffffffffffffff\n\tRTAX_AUTHOR                       = 0x6\n\tRTAX_BFD                          = 0xb\n\tRTAX_BRD                          = 0x7\n\tRTAX_DNS                          = 0xc\n\tRTAX_DST                          = 0x0\n\tRTAX_GATEWAY                      = 0x1\n\tRTAX_GENMASK                      = 0x3\n\tRTAX_IFA                          = 0x5\n\tRTAX_IFP                          = 0x4\n\tRTAX_LABEL                        = 0xa\n\tRTAX_MAX                          = 0xf\n\tRTAX_NETMASK                      = 0x2\n\tRTAX_SEARCH                       = 0xe\n\tRTAX_SRC                          = 0x8\n\tRTAX_SRCMASK                      = 0x9\n\tRTAX_STATIC                       = 0xd\n\tRTA_AUTHOR                        = 0x40\n\tRTA_BFD                           = 0x800\n\tRTA_BRD                           = 0x80\n\tRTA_DNS                           = 0x1000\n\tRTA_DST                           = 0x1\n\tRTA_GATEWAY                       = 0x2\n\tRTA_GENMASK                       = 0x8\n\tRTA_IFA                           = 0x20\n\tRTA_IFP                           = 0x10\n\tRTA_LABEL                         = 0x400\n\tRTA_NETMASK                       = 0x4\n\tRTA_SEARCH                        = 0x4000\n\tRTA_SRC                           = 0x100\n\tRTA_SRCMASK                       = 0x200\n\tRTA_STATIC                        = 0x2000\n\tRTF_ANNOUNCE                      = 0x4000\n\tRTF_BFD                           = 0x1000000\n\tRTF_BLACKHOLE                     = 0x1000\n\tRTF_BROADCAST                     = 0x400000\n\tRTF_CACHED                        = 0x20000\n\tRTF_CLONED                        = 0x10000\n\tRTF_CLONING                       = 0x100\n\tRTF_CONNECTED                     = 0x800000\n\tRTF_DONE                          = 0x40\n\tRTF_DYNAMIC                       = 0x10\n\tRTF_FMASK                         = 0x110fc08\n\tRTF_GATEWAY                       = 0x2\n\tRTF_HOST                          = 0x4\n\tRTF_LLINFO                        = 0x400\n\tRTF_LOCAL                         = 0x200000\n\tRTF_MODIFIED                      = 0x20\n\tRTF_MPATH                         = 0x40000\n\tRTF_MPLS                          = 0x100000\n\tRTF_MULTICAST                     = 0x200\n\tRTF_PERMANENT_ARP                 = 0x2000\n\tRTF_PROTO1                        = 0x8000\n\tRTF_PROTO2                        = 0x4000\n\tRTF_PROTO3                        = 0x2000\n\tRTF_REJECT                        = 0x8\n\tRTF_STATIC                        = 0x800\n\tRTF_UP                            = 0x1\n\tRTF_USETRAILERS                   = 0x8000\n\tRTM_80211INFO                     = 0x15\n\tRTM_ADD                           = 0x1\n\tRTM_BFD                           = 0x12\n\tRTM_CHANGE                        = 0x3\n\tRTM_CHGADDRATTR                   = 0x14\n\tRTM_DELADDR                       = 0xd\n\tRTM_DELETE                        = 0x2\n\tRTM_DESYNC                        = 0x10\n\tRTM_GET                           = 0x4\n\tRTM_IFANNOUNCE                    = 0xf\n\tRTM_IFINFO                        = 0xe\n\tRTM_INVALIDATE                    = 0x11\n\tRTM_LOSING                        = 0x5\n\tRTM_MAXSIZE                       = 0x800\n\tRTM_MISS                          = 0x7\n\tRTM_NEWADDR                       = 0xc\n\tRTM_PROPOSAL                      = 0x13\n\tRTM_REDIRECT                      = 0x6\n\tRTM_RESOLVE                       = 0xb\n\tRTM_RTTUNIT                       = 0xf4240\n\tRTM_VERSION                       = 0x5\n\tRTV_EXPIRE                        = 0x4\n\tRTV_HOPCOUNT                      = 0x2\n\tRTV_MTU                           = 0x1\n\tRTV_RPIPE                         = 0x8\n\tRTV_RTT                           = 0x40\n\tRTV_RTTVAR                        = 0x80\n\tRTV_SPIPE                         = 0x10\n\tRTV_SSTHRESH                      = 0x20\n\tRT_TABLEID_BITS                   = 0x8\n\tRT_TABLEID_MASK                   = 0xff\n\tRT_TABLEID_MAX                    = 0xff\n\tRUSAGE_CHILDREN                   = -0x1\n\tRUSAGE_SELF                       = 0x0\n\tRUSAGE_THREAD                     = 0x1\n\tSCM_RIGHTS                        = 0x1\n\tSCM_TIMESTAMP                     = 0x4\n\tSHUT_RD                           = 0x0\n\tSHUT_RDWR                         = 0x2\n\tSHUT_WR                           = 0x1\n\tSIOCADDMULTI                      = 0x80206931\n\tSIOCAIFADDR                       = 0x8040691a\n\tSIOCAIFGROUP                      = 0x80286987\n\tSIOCATMARK                        = 0x40047307\n\tSIOCBRDGADD                       = 0x8060693c\n\tSIOCBRDGADDL                      = 0x80606949\n\tSIOCBRDGADDS                      = 0x80606941\n\tSIOCBRDGARL                       = 0x808c694d\n\tSIOCBRDGDADDR                     = 0x81286947\n\tSIOCBRDGDEL                       = 0x8060693d\n\tSIOCBRDGDELS                      = 0x80606942\n\tSIOCBRDGFLUSH                     = 0x80606948\n\tSIOCBRDGFRL                       = 0x808c694e\n\tSIOCBRDGGCACHE                    = 0xc0186941\n\tSIOCBRDGGFD                       = 0xc0186952\n\tSIOCBRDGGHT                       = 0xc0186951\n\tSIOCBRDGGIFFLGS                   = 0xc060693e\n\tSIOCBRDGGMA                       = 0xc0186953\n\tSIOCBRDGGPARAM                    = 0xc0406958\n\tSIOCBRDGGPRI                      = 0xc0186950\n\tSIOCBRDGGRL                       = 0xc030694f\n\tSIOCBRDGGTO                       = 0xc0186946\n\tSIOCBRDGIFS                       = 0xc0606942\n\tSIOCBRDGRTS                       = 0xc0206943\n\tSIOCBRDGSADDR                     = 0xc1286944\n\tSIOCBRDGSCACHE                    = 0x80186940\n\tSIOCBRDGSFD                       = 0x80186952\n\tSIOCBRDGSHT                       = 0x80186951\n\tSIOCBRDGSIFCOST                   = 0x80606955\n\tSIOCBRDGSIFFLGS                   = 0x8060693f\n\tSIOCBRDGSIFPRIO                   = 0x80606954\n\tSIOCBRDGSIFPROT                   = 0x8060694a\n\tSIOCBRDGSMA                       = 0x80186953\n\tSIOCBRDGSPRI                      = 0x80186950\n\tSIOCBRDGSPROTO                    = 0x8018695a\n\tSIOCBRDGSTO                       = 0x80186945\n\tSIOCBRDGSTXHC                     = 0x80186959\n\tSIOCDELLABEL                      = 0x80206997\n\tSIOCDELMULTI                      = 0x80206932\n\tSIOCDIFADDR                       = 0x80206919\n\tSIOCDIFGROUP                      = 0x80286989\n\tSIOCDIFPARENT                     = 0x802069b4\n\tSIOCDIFPHYADDR                    = 0x80206949\n\tSIOCDPWE3NEIGHBOR                 = 0x802069de\n\tSIOCDVNETID                       = 0x802069af\n\tSIOCGETKALIVE                     = 0xc01869a4\n\tSIOCGETLABEL                      = 0x8020699a\n\tSIOCGETMPWCFG                     = 0xc02069ae\n\tSIOCGETPFLOW                      = 0xc02069fe\n\tSIOCGETPFSYNC                     = 0xc02069f8\n\tSIOCGETSGCNT                      = 0xc0207534\n\tSIOCGETVIFCNT                     = 0xc0287533\n\tSIOCGETVLAN                       = 0xc0206990\n\tSIOCGIFADDR                       = 0xc0206921\n\tSIOCGIFBRDADDR                    = 0xc0206923\n\tSIOCGIFCONF                       = 0xc0106924\n\tSIOCGIFDATA                       = 0xc020691b\n\tSIOCGIFDESCR                      = 0xc0206981\n\tSIOCGIFDSTADDR                    = 0xc0206922\n\tSIOCGIFFLAGS                      = 0xc0206911\n\tSIOCGIFGATTR                      = 0xc028698b\n\tSIOCGIFGENERIC                    = 0xc020693a\n\tSIOCGIFGLIST                      = 0xc028698d\n\tSIOCGIFGMEMB                      = 0xc028698a\n\tSIOCGIFGROUP                      = 0xc0286988\n\tSIOCGIFHARDMTU                    = 0xc02069a5\n\tSIOCGIFLLPRIO                     = 0xc02069b6\n\tSIOCGIFMEDIA                      = 0xc0406938\n\tSIOCGIFMETRIC                     = 0xc0206917\n\tSIOCGIFMTU                        = 0xc020697e\n\tSIOCGIFNETMASK                    = 0xc0206925\n\tSIOCGIFPAIR                       = 0xc02069b1\n\tSIOCGIFPARENT                     = 0xc02069b3\n\tSIOCGIFPRIORITY                   = 0xc020699c\n\tSIOCGIFRDOMAIN                    = 0xc02069a0\n\tSIOCGIFRTLABEL                    = 0xc0206983\n\tSIOCGIFRXR                        = 0x802069aa\n\tSIOCGIFSFFPAGE                    = 0xc1126939\n\tSIOCGIFXFLAGS                     = 0xc020699e\n\tSIOCGLIFPHYADDR                   = 0xc218694b\n\tSIOCGLIFPHYDF                     = 0xc02069c2\n\tSIOCGLIFPHYECN                    = 0xc02069c8\n\tSIOCGLIFPHYRTABLE                 = 0xc02069a2\n\tSIOCGLIFPHYTTL                    = 0xc02069a9\n\tSIOCGPGRP                         = 0x40047309\n\tSIOCGPWE3                         = 0xc0206998\n\tSIOCGPWE3CTRLWORD                 = 0xc02069dc\n\tSIOCGPWE3FAT                      = 0xc02069dd\n\tSIOCGPWE3NEIGHBOR                 = 0xc21869de\n\tSIOCGSPPPPARAMS                   = 0xc0206994\n\tSIOCGTXHPRIO                      = 0xc02069c6\n\tSIOCGUMBINFO                      = 0xc02069be\n\tSIOCGUMBPARAM                     = 0xc02069c0\n\tSIOCGVH                           = 0xc02069f6\n\tSIOCGVNETFLOWID                   = 0xc02069c4\n\tSIOCGVNETID                       = 0xc02069a7\n\tSIOCIFAFATTACH                    = 0x801169ab\n\tSIOCIFAFDETACH                    = 0x801169ac\n\tSIOCIFCREATE                      = 0x8020697a\n\tSIOCIFDESTROY                     = 0x80206979\n\tSIOCIFGCLONERS                    = 0xc0106978\n\tSIOCSETKALIVE                     = 0x801869a3\n\tSIOCSETLABEL                      = 0x80206999\n\tSIOCSETMPWCFG                     = 0x802069ad\n\tSIOCSETPFLOW                      = 0x802069fd\n\tSIOCSETPFSYNC                     = 0x802069f7\n\tSIOCSETVLAN                       = 0x8020698f\n\tSIOCSIFADDR                       = 0x8020690c\n\tSIOCSIFBRDADDR                    = 0x80206913\n\tSIOCSIFDESCR                      = 0x80206980\n\tSIOCSIFDSTADDR                    = 0x8020690e\n\tSIOCSIFFLAGS                      = 0x80206910\n\tSIOCSIFGATTR                      = 0x8028698c\n\tSIOCSIFGENERIC                    = 0x80206939\n\tSIOCSIFLLADDR                     = 0x8020691f\n\tSIOCSIFLLPRIO                     = 0x802069b5\n\tSIOCSIFMEDIA                      = 0xc0206937\n\tSIOCSIFMETRIC                     = 0x80206918\n\tSIOCSIFMTU                        = 0x8020697f\n\tSIOCSIFNETMASK                    = 0x80206916\n\tSIOCSIFPAIR                       = 0x802069b0\n\tSIOCSIFPARENT                     = 0x802069b2\n\tSIOCSIFPRIORITY                   = 0x8020699b\n\tSIOCSIFRDOMAIN                    = 0x8020699f\n\tSIOCSIFRTLABEL                    = 0x80206982\n\tSIOCSIFXFLAGS                     = 0x8020699d\n\tSIOCSLIFPHYADDR                   = 0x8218694a\n\tSIOCSLIFPHYDF                     = 0x802069c1\n\tSIOCSLIFPHYECN                    = 0x802069c7\n\tSIOCSLIFPHYRTABLE                 = 0x802069a1\n\tSIOCSLIFPHYTTL                    = 0x802069a8\n\tSIOCSPGRP                         = 0x80047308\n\tSIOCSPWE3CTRLWORD                 = 0x802069dc\n\tSIOCSPWE3FAT                      = 0x802069dd\n\tSIOCSPWE3NEIGHBOR                 = 0x821869de\n\tSIOCSSPPPPARAMS                   = 0x80206993\n\tSIOCSTXHPRIO                      = 0x802069c5\n\tSIOCSUMBPARAM                     = 0x802069bf\n\tSIOCSVH                           = 0xc02069f5\n\tSIOCSVNETFLOWID                   = 0x802069c3\n\tSIOCSVNETID                       = 0x802069a6\n\tSIOCSWGDPID                       = 0xc018695b\n\tSIOCSWGMAXFLOW                    = 0xc0186960\n\tSIOCSWGMAXGROUP                   = 0xc018695d\n\tSIOCSWSDPID                       = 0x8018695c\n\tSIOCSWSPORTNO                     = 0xc060695f\n\tSOCK_CLOEXEC                      = 0x8000\n\tSOCK_DGRAM                        = 0x2\n\tSOCK_DNS                          = 0x1000\n\tSOCK_NONBLOCK                     = 0x4000\n\tSOCK_RAW                          = 0x3\n\tSOCK_RDM                          = 0x4\n\tSOCK_SEQPACKET                    = 0x5\n\tSOCK_STREAM                       = 0x1\n\tSOL_SOCKET                        = 0xffff\n\tSOMAXCONN                         = 0x80\n\tSO_ACCEPTCONN                     = 0x2\n\tSO_BINDANY                        = 0x1000\n\tSO_BROADCAST                      = 0x20\n\tSO_DEBUG                          = 0x1\n\tSO_DONTROUTE                      = 0x10\n\tSO_ERROR                          = 0x1007\n\tSO_KEEPALIVE                      = 0x8\n\tSO_LINGER                         = 0x80\n\tSO_NETPROC                        = 0x1020\n\tSO_OOBINLINE                      = 0x100\n\tSO_PEERCRED                       = 0x1022\n\tSO_RCVBUF                         = 0x1002\n\tSO_RCVLOWAT                       = 0x1004\n\tSO_RCVTIMEO                       = 0x1006\n\tSO_REUSEADDR                      = 0x4\n\tSO_REUSEPORT                      = 0x200\n\tSO_RTABLE                         = 0x1021\n\tSO_SNDBUF                         = 0x1001\n\tSO_SNDLOWAT                       = 0x1003\n\tSO_SNDTIMEO                       = 0x1005\n\tSO_SPLICE                         = 0x1023\n\tSO_TIMESTAMP                      = 0x800\n\tSO_TYPE                           = 0x1008\n\tSO_USELOOPBACK                    = 0x40\n\tSO_ZEROIZE                        = 0x2000\n\tS_BLKSIZE                         = 0x200\n\tS_IEXEC                           = 0x40\n\tS_IFBLK                           = 0x6000\n\tS_IFCHR                           = 0x2000\n\tS_IFDIR                           = 0x4000\n\tS_IFIFO                           = 0x1000\n\tS_IFLNK                           = 0xa000\n\tS_IFMT                            = 0xf000\n\tS_IFREG                           = 0x8000\n\tS_IFSOCK                          = 0xc000\n\tS_IREAD                           = 0x100\n\tS_IRGRP                           = 0x20\n\tS_IROTH                           = 0x4\n\tS_IRUSR                           = 0x100\n\tS_IRWXG                           = 0x38\n\tS_IRWXO                           = 0x7\n\tS_IRWXU                           = 0x1c0\n\tS_ISGID                           = 0x400\n\tS_ISTXT                           = 0x200\n\tS_ISUID                           = 0x800\n\tS_ISVTX                           = 0x200\n\tS_IWGRP                           = 0x10\n\tS_IWOTH                           = 0x2\n\tS_IWRITE                          = 0x80\n\tS_IWUSR                           = 0x80\n\tS_IXGRP                           = 0x8\n\tS_IXOTH                           = 0x1\n\tS_IXUSR                           = 0x40\n\tTCIFLUSH                          = 0x1\n\tTCIOFF                            = 0x3\n\tTCIOFLUSH                         = 0x3\n\tTCION                             = 0x4\n\tTCOFLUSH                          = 0x2\n\tTCOOFF                            = 0x1\n\tTCOON                             = 0x2\n\tTCP_MAXBURST                      = 0x4\n\tTCP_MAXSEG                        = 0x2\n\tTCP_MAXWIN                        = 0xffff\n\tTCP_MAX_SACK                      = 0x3\n\tTCP_MAX_WINSHIFT                  = 0xe\n\tTCP_MD5SIG                        = 0x4\n\tTCP_MSS                           = 0x200\n\tTCP_NODELAY                       = 0x1\n\tTCP_NOPUSH                        = 0x10\n\tTCP_SACK_ENABLE                   = 0x8\n\tTCSAFLUSH                         = 0x2\n\tTIMER_ABSTIME                     = 0x1\n\tTIMER_RELTIME                     = 0x0\n\tTIOCCBRK                          = 0x2000747a\n\tTIOCCDTR                          = 0x20007478\n\tTIOCCHKVERAUTH                    = 0x2000741e\n\tTIOCCLRVERAUTH                    = 0x2000741d\n\tTIOCCONS                          = 0x80047462\n\tTIOCDRAIN                         = 0x2000745e\n\tTIOCEXCL                          = 0x2000740d\n\tTIOCEXT                           = 0x80047460\n\tTIOCFLAG_CLOCAL                   = 0x2\n\tTIOCFLAG_CRTSCTS                  = 0x4\n\tTIOCFLAG_MDMBUF                   = 0x8\n\tTIOCFLAG_PPS                      = 0x10\n\tTIOCFLAG_SOFTCAR                  = 0x1\n\tTIOCFLUSH                         = 0x80047410\n\tTIOCGETA                          = 0x402c7413\n\tTIOCGETD                          = 0x4004741a\n\tTIOCGFLAGS                        = 0x4004745d\n\tTIOCGPGRP                         = 0x40047477\n\tTIOCGSID                          = 0x40047463\n\tTIOCGTSTAMP                       = 0x4010745b\n\tTIOCGWINSZ                        = 0x40087468\n\tTIOCMBIC                          = 0x8004746b\n\tTIOCMBIS                          = 0x8004746c\n\tTIOCMGET                          = 0x4004746a\n\tTIOCMODG                          = 0x4004746a\n\tTIOCMODS                          = 0x8004746d\n\tTIOCMSET                          = 0x8004746d\n\tTIOCM_CAR                         = 0x40\n\tTIOCM_CD                          = 0x40\n\tTIOCM_CTS                         = 0x20\n\tTIOCM_DSR                         = 0x100\n\tTIOCM_DTR                         = 0x2\n\tTIOCM_LE                          = 0x1\n\tTIOCM_RI                          = 0x80\n\tTIOCM_RNG                         = 0x80\n\tTIOCM_RTS                         = 0x4\n\tTIOCM_SR                          = 0x10\n\tTIOCM_ST                          = 0x8\n\tTIOCNOTTY                         = 0x20007471\n\tTIOCNXCL                          = 0x2000740e\n\tTIOCOUTQ                          = 0x40047473\n\tTIOCPKT                           = 0x80047470\n\tTIOCPKT_DATA                      = 0x0\n\tTIOCPKT_DOSTOP                    = 0x20\n\tTIOCPKT_FLUSHREAD                 = 0x1\n\tTIOCPKT_FLUSHWRITE                = 0x2\n\tTIOCPKT_IOCTL                     = 0x40\n\tTIOCPKT_NOSTOP                    = 0x10\n\tTIOCPKT_START                     = 0x8\n\tTIOCPKT_STOP                      = 0x4\n\tTIOCREMOTE                        = 0x80047469\n\tTIOCSBRK                          = 0x2000747b\n\tTIOCSCTTY                         = 0x20007461\n\tTIOCSDTR                          = 0x20007479\n\tTIOCSETA                          = 0x802c7414\n\tTIOCSETAF                         = 0x802c7416\n\tTIOCSETAW                         = 0x802c7415\n\tTIOCSETD                          = 0x8004741b\n\tTIOCSETVERAUTH                    = 0x8004741c\n\tTIOCSFLAGS                        = 0x8004745c\n\tTIOCSIG                           = 0x8004745f\n\tTIOCSPGRP                         = 0x80047476\n\tTIOCSTART                         = 0x2000746e\n\tTIOCSTAT                          = 0x20007465\n\tTIOCSTOP                          = 0x2000746f\n\tTIOCSTSTAMP                       = 0x8008745a\n\tTIOCSWINSZ                        = 0x80087467\n\tTIOCUCNTL                         = 0x80047466\n\tTIOCUCNTL_CBRK                    = 0x7a\n\tTIOCUCNTL_SBRK                    = 0x7b\n\tTOSTOP                            = 0x400000\n\tUTIME_NOW                         = -0x2\n\tUTIME_OMIT                        = -0x1\n\tVDISCARD                          = 0xf\n\tVDSUSP                            = 0xb\n\tVEOF                              = 0x0\n\tVEOL                              = 0x1\n\tVEOL2                             = 0x2\n\tVERASE                            = 0x3\n\tVINTR                             = 0x8\n\tVKILL                             = 0x5\n\tVLNEXT                            = 0xe\n\tVMIN                              = 0x10\n\tVM_ANONMIN                        = 0x7\n\tVM_LOADAVG                        = 0x2\n\tVM_MALLOC_CONF                    = 0xc\n\tVM_MAXID                          = 0xd\n\tVM_MAXSLP                         = 0xa\n\tVM_METER                          = 0x1\n\tVM_NKMEMPAGES                     = 0x6\n\tVM_PSSTRINGS                      = 0x3\n\tVM_SWAPENCRYPT                    = 0x5\n\tVM_USPACE                         = 0xb\n\tVM_UVMEXP                         = 0x4\n\tVM_VNODEMIN                       = 0x9\n\tVM_VTEXTMIN                       = 0x8\n\tVQUIT                             = 0x9\n\tVREPRINT                          = 0x6\n\tVSTART                            = 0xc\n\tVSTATUS                           = 0x12\n\tVSTOP                             = 0xd\n\tVSUSP                             = 0xa\n\tVTIME                             = 0x11\n\tVWERASE                           = 0x4\n\tWALTSIG                           = 0x4\n\tWCONTINUED                        = 0x8\n\tWCOREFLAG                         = 0x80\n\tWNOHANG                           = 0x1\n\tWUNTRACED                         = 0x2\n\tXCASE                             = 0x1000000\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x30)\n\tEADDRNOTAVAIL   = syscall.Errno(0x31)\n\tEAFNOSUPPORT    = syscall.Errno(0x2f)\n\tEAGAIN          = syscall.Errno(0x23)\n\tEALREADY        = syscall.Errno(0x25)\n\tEAUTH           = syscall.Errno(0x50)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADMSG         = syscall.Errno(0x5c)\n\tEBADRPC         = syscall.Errno(0x48)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x58)\n\tECHILD          = syscall.Errno(0xa)\n\tECONNABORTED    = syscall.Errno(0x35)\n\tECONNREFUSED    = syscall.Errno(0x3d)\n\tECONNRESET      = syscall.Errno(0x36)\n\tEDEADLK         = syscall.Errno(0xb)\n\tEDESTADDRREQ    = syscall.Errno(0x27)\n\tEDOM            = syscall.Errno(0x21)\n\tEDQUOT          = syscall.Errno(0x45)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFTYPE          = syscall.Errno(0x4f)\n\tEHOSTDOWN       = syscall.Errno(0x40)\n\tEHOSTUNREACH    = syscall.Errno(0x41)\n\tEIDRM           = syscall.Errno(0x59)\n\tEILSEQ          = syscall.Errno(0x54)\n\tEINPROGRESS     = syscall.Errno(0x24)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEIPSEC          = syscall.Errno(0x52)\n\tEISCONN         = syscall.Errno(0x38)\n\tEISDIR          = syscall.Errno(0x15)\n\tELAST           = syscall.Errno(0x5f)\n\tELOOP           = syscall.Errno(0x3e)\n\tEMEDIUMTYPE     = syscall.Errno(0x56)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x28)\n\tENAMETOOLONG    = syscall.Errno(0x3f)\n\tENEEDAUTH       = syscall.Errno(0x51)\n\tENETDOWN        = syscall.Errno(0x32)\n\tENETRESET       = syscall.Errno(0x34)\n\tENETUNREACH     = syscall.Errno(0x33)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x53)\n\tENOBUFS         = syscall.Errno(0x37)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x4d)\n\tENOMEDIUM       = syscall.Errno(0x55)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x5a)\n\tENOPROTOOPT     = syscall.Errno(0x2a)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSYS          = syscall.Errno(0x4e)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x39)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x42)\n\tENOTRECOVERABLE = syscall.Errno(0x5d)\n\tENOTSOCK        = syscall.Errno(0x26)\n\tENOTSUP         = syscall.Errno(0x5b)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x2d)\n\tEOVERFLOW       = syscall.Errno(0x57)\n\tEOWNERDEAD      = syscall.Errno(0x5e)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x2e)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x43)\n\tEPROCUNAVAIL    = syscall.Errno(0x4c)\n\tEPROGMISMATCH   = syscall.Errno(0x4b)\n\tEPROGUNAVAIL    = syscall.Errno(0x4a)\n\tEPROTO          = syscall.Errno(0x5f)\n\tEPROTONOSUPPORT = syscall.Errno(0x2b)\n\tEPROTOTYPE      = syscall.Errno(0x29)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x47)\n\tEROFS           = syscall.Errno(0x1e)\n\tERPCMISMATCH    = syscall.Errno(0x49)\n\tESHUTDOWN       = syscall.Errno(0x3a)\n\tESOCKTNOSUPPORT = syscall.Errno(0x2c)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x46)\n\tETIMEDOUT       = syscall.Errno(0x3c)\n\tETOOMANYREFS    = syscall.Errno(0x3b)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUSERS          = syscall.Errno(0x44)\n\tEWOULDBLOCK     = syscall.Errno(0x23)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x14)\n\tSIGCONT   = syscall.Signal(0x13)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINFO   = syscall.Signal(0x1d)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x17)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTOP   = syscall.Signal(0x11)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTHR    = syscall.Signal(0x20)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x12)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x10)\n\tSIGUSR1   = syscall.Signal(0x1e)\n\tSIGUSR2   = syscall.Signal(0x1f)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"device not configured\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"operation not supported by device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large\"},\n\t{35, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{36, \"EINPROGRESS\", \"operation now in progress\"},\n\t{37, \"EALREADY\", \"operation already in progress\"},\n\t{38, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{39, \"EDESTADDRREQ\", \"destination address required\"},\n\t{40, \"EMSGSIZE\", \"message too long\"},\n\t{41, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{42, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{43, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{44, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{45, \"EOPNOTSUPP\", \"operation not supported\"},\n\t{46, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{47, \"EAFNOSUPPORT\", \"address family not supported by protocol family\"},\n\t{48, \"EADDRINUSE\", \"address already in use\"},\n\t{49, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{50, \"ENETDOWN\", \"network is down\"},\n\t{51, \"ENETUNREACH\", \"network is unreachable\"},\n\t{52, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{53, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{54, \"ECONNRESET\", \"connection reset by peer\"},\n\t{55, \"ENOBUFS\", \"no buffer space available\"},\n\t{56, \"EISCONN\", \"socket is already connected\"},\n\t{57, \"ENOTCONN\", \"socket is not connected\"},\n\t{58, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{59, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{60, \"ETIMEDOUT\", \"operation timed out\"},\n\t{61, \"ECONNREFUSED\", \"connection refused\"},\n\t{62, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{63, \"ENAMETOOLONG\", \"file name too long\"},\n\t{64, \"EHOSTDOWN\", \"host is down\"},\n\t{65, \"EHOSTUNREACH\", \"no route to host\"},\n\t{66, \"ENOTEMPTY\", \"directory not empty\"},\n\t{67, \"EPROCLIM\", \"too many processes\"},\n\t{68, \"EUSERS\", \"too many users\"},\n\t{69, \"EDQUOT\", \"disk quota exceeded\"},\n\t{70, \"ESTALE\", \"stale NFS file handle\"},\n\t{71, \"EREMOTE\", \"too many levels of remote in path\"},\n\t{72, \"EBADRPC\", \"RPC struct is bad\"},\n\t{73, \"ERPCMISMATCH\", \"RPC version wrong\"},\n\t{74, \"EPROGUNAVAIL\", \"RPC program not available\"},\n\t{75, \"EPROGMISMATCH\", \"program version wrong\"},\n\t{76, \"EPROCUNAVAIL\", \"bad procedure for program\"},\n\t{77, \"ENOLCK\", \"no locks available\"},\n\t{78, \"ENOSYS\", \"function not implemented\"},\n\t{79, \"EFTYPE\", \"inappropriate file type or format\"},\n\t{80, \"EAUTH\", \"authentication error\"},\n\t{81, \"ENEEDAUTH\", \"need authenticator\"},\n\t{82, \"EIPSEC\", \"IPsec processing failure\"},\n\t{83, \"ENOATTR\", \"attribute not found\"},\n\t{84, \"EILSEQ\", \"illegal byte sequence\"},\n\t{85, \"ENOMEDIUM\", \"no medium found\"},\n\t{86, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{87, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n\t{88, \"ECANCELED\", \"operation canceled\"},\n\t{89, \"EIDRM\", \"identifier removed\"},\n\t{90, \"ENOMSG\", \"no message of desired type\"},\n\t{91, \"ENOTSUP\", \"not supported\"},\n\t{92, \"EBADMSG\", \"bad message\"},\n\t{93, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{94, \"EOWNERDEAD\", \"previous owner died\"},\n\t{95, \"ELAST\", \"protocol error\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGABRT\", \"abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"suspended (signal)\"},\n\t{18, \"SIGTSTP\", \"suspended\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGINFO\", \"information request\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n\t{32, \"SIGTHR\", \"thread AST\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go",
    "content": "// mkerrors.sh -m64\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build amd64,solaris\n\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs -- -m64 _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_802                        = 0x12\n\tAF_APPLETALK                  = 0x10\n\tAF_CCITT                      = 0xa\n\tAF_CHAOS                      = 0x5\n\tAF_DATAKIT                    = 0x9\n\tAF_DECnet                     = 0xc\n\tAF_DLI                        = 0xd\n\tAF_ECMA                       = 0x8\n\tAF_FILE                       = 0x1\n\tAF_GOSIP                      = 0x16\n\tAF_HYLINK                     = 0xf\n\tAF_IMPLINK                    = 0x3\n\tAF_INET                       = 0x2\n\tAF_INET6                      = 0x1a\n\tAF_INET_OFFLOAD               = 0x1e\n\tAF_IPX                        = 0x17\n\tAF_KEY                        = 0x1b\n\tAF_LAT                        = 0xe\n\tAF_LINK                       = 0x19\n\tAF_LOCAL                      = 0x1\n\tAF_MAX                        = 0x20\n\tAF_NBS                        = 0x7\n\tAF_NCA                        = 0x1c\n\tAF_NIT                        = 0x11\n\tAF_NS                         = 0x6\n\tAF_OSI                        = 0x13\n\tAF_OSINET                     = 0x15\n\tAF_PACKET                     = 0x20\n\tAF_POLICY                     = 0x1d\n\tAF_PUP                        = 0x4\n\tAF_ROUTE                      = 0x18\n\tAF_SNA                        = 0xb\n\tAF_TRILL                      = 0x1f\n\tAF_UNIX                       = 0x1\n\tAF_UNSPEC                     = 0x0\n\tAF_X25                        = 0x14\n\tARPHRD_ARCNET                 = 0x7\n\tARPHRD_ATM                    = 0x10\n\tARPHRD_AX25                   = 0x3\n\tARPHRD_CHAOS                  = 0x5\n\tARPHRD_EETHER                 = 0x2\n\tARPHRD_ETHER                  = 0x1\n\tARPHRD_FC                     = 0x12\n\tARPHRD_FRAME                  = 0xf\n\tARPHRD_HDLC                   = 0x11\n\tARPHRD_IB                     = 0x20\n\tARPHRD_IEEE802                = 0x6\n\tARPHRD_IPATM                  = 0x13\n\tARPHRD_METRICOM               = 0x17\n\tARPHRD_TUNNEL                 = 0x1f\n\tB0                            = 0x0\n\tB110                          = 0x3\n\tB115200                       = 0x12\n\tB1200                         = 0x9\n\tB134                          = 0x4\n\tB150                          = 0x5\n\tB153600                       = 0x13\n\tB1800                         = 0xa\n\tB19200                        = 0xe\n\tB200                          = 0x6\n\tB230400                       = 0x14\n\tB2400                         = 0xb\n\tB300                          = 0x7\n\tB307200                       = 0x15\n\tB38400                        = 0xf\n\tB460800                       = 0x16\n\tB4800                         = 0xc\n\tB50                           = 0x1\n\tB57600                        = 0x10\n\tB600                          = 0x8\n\tB75                           = 0x2\n\tB76800                        = 0x11\n\tB921600                       = 0x17\n\tB9600                         = 0xd\n\tBIOCFLUSH                     = 0x20004268\n\tBIOCGBLEN                     = 0x40044266\n\tBIOCGDLT                      = 0x4004426a\n\tBIOCGDLTLIST                  = -0x3fefbd89\n\tBIOCGDLTLIST32                = -0x3ff7bd89\n\tBIOCGETIF                     = 0x4020426b\n\tBIOCGETLIF                    = 0x4078426b\n\tBIOCGHDRCMPLT                 = 0x40044274\n\tBIOCGRTIMEOUT                 = 0x4010427b\n\tBIOCGRTIMEOUT32               = 0x4008427b\n\tBIOCGSEESENT                  = 0x40044278\n\tBIOCGSTATS                    = 0x4080426f\n\tBIOCGSTATSOLD                 = 0x4008426f\n\tBIOCIMMEDIATE                 = -0x7ffbbd90\n\tBIOCPROMISC                   = 0x20004269\n\tBIOCSBLEN                     = -0x3ffbbd9a\n\tBIOCSDLT                      = -0x7ffbbd8a\n\tBIOCSETF                      = -0x7fefbd99\n\tBIOCSETF32                    = -0x7ff7bd99\n\tBIOCSETIF                     = -0x7fdfbd94\n\tBIOCSETLIF                    = -0x7f87bd94\n\tBIOCSHDRCMPLT                 = -0x7ffbbd8b\n\tBIOCSRTIMEOUT                 = -0x7fefbd86\n\tBIOCSRTIMEOUT32               = -0x7ff7bd86\n\tBIOCSSEESENT                  = -0x7ffbbd87\n\tBIOCSTCPF                     = -0x7fefbd8e\n\tBIOCSUDPF                     = -0x7fefbd8d\n\tBIOCVERSION                   = 0x40044271\n\tBPF_A                         = 0x10\n\tBPF_ABS                       = 0x20\n\tBPF_ADD                       = 0x0\n\tBPF_ALIGNMENT                 = 0x4\n\tBPF_ALU                       = 0x4\n\tBPF_AND                       = 0x50\n\tBPF_B                         = 0x10\n\tBPF_DFLTBUFSIZE               = 0x100000\n\tBPF_DIV                       = 0x30\n\tBPF_H                         = 0x8\n\tBPF_IMM                       = 0x0\n\tBPF_IND                       = 0x40\n\tBPF_JA                        = 0x0\n\tBPF_JEQ                       = 0x10\n\tBPF_JGE                       = 0x30\n\tBPF_JGT                       = 0x20\n\tBPF_JMP                       = 0x5\n\tBPF_JSET                      = 0x40\n\tBPF_K                         = 0x0\n\tBPF_LD                        = 0x0\n\tBPF_LDX                       = 0x1\n\tBPF_LEN                       = 0x80\n\tBPF_LSH                       = 0x60\n\tBPF_MAJOR_VERSION             = 0x1\n\tBPF_MAXBUFSIZE                = 0x1000000\n\tBPF_MAXINSNS                  = 0x200\n\tBPF_MEM                       = 0x60\n\tBPF_MEMWORDS                  = 0x10\n\tBPF_MINBUFSIZE                = 0x20\n\tBPF_MINOR_VERSION             = 0x1\n\tBPF_MISC                      = 0x7\n\tBPF_MSH                       = 0xa0\n\tBPF_MUL                       = 0x20\n\tBPF_NEG                       = 0x80\n\tBPF_OR                        = 0x40\n\tBPF_RELEASE                   = 0x30bb6\n\tBPF_RET                       = 0x6\n\tBPF_RSH                       = 0x70\n\tBPF_ST                        = 0x2\n\tBPF_STX                       = 0x3\n\tBPF_SUB                       = 0x10\n\tBPF_TAX                       = 0x0\n\tBPF_TXA                       = 0x80\n\tBPF_W                         = 0x0\n\tBPF_X                         = 0x8\n\tBRKINT                        = 0x2\n\tBS0                           = 0x0\n\tBS1                           = 0x2000\n\tBSDLY                         = 0x2000\n\tCBAUD                         = 0xf\n\tCFLUSH                        = 0xf\n\tCIBAUD                        = 0xf0000\n\tCLOCAL                        = 0x800\n\tCLOCK_HIGHRES                 = 0x4\n\tCLOCK_LEVEL                   = 0xa\n\tCLOCK_MONOTONIC               = 0x4\n\tCLOCK_PROCESS_CPUTIME_ID      = 0x5\n\tCLOCK_PROF                    = 0x2\n\tCLOCK_REALTIME                = 0x3\n\tCLOCK_THREAD_CPUTIME_ID       = 0x2\n\tCLOCK_VIRTUAL                 = 0x1\n\tCR0                           = 0x0\n\tCR1                           = 0x200\n\tCR2                           = 0x400\n\tCR3                           = 0x600\n\tCRDLY                         = 0x600\n\tCREAD                         = 0x80\n\tCRTSCTS                       = 0x80000000\n\tCS5                           = 0x0\n\tCS6                           = 0x10\n\tCS7                           = 0x20\n\tCS8                           = 0x30\n\tCSIZE                         = 0x30\n\tCSTART                        = 0x11\n\tCSTATUS                       = 0x14\n\tCSTOP                         = 0x13\n\tCSTOPB                        = 0x40\n\tCSUSP                         = 0x1a\n\tCSWTCH                        = 0x1a\n\tDLT_AIRONET_HEADER            = 0x78\n\tDLT_APPLE_IP_OVER_IEEE1394    = 0x8a\n\tDLT_ARCNET                    = 0x7\n\tDLT_ARCNET_LINUX              = 0x81\n\tDLT_ATM_CLIP                  = 0x13\n\tDLT_ATM_RFC1483               = 0xb\n\tDLT_AURORA                    = 0x7e\n\tDLT_AX25                      = 0x3\n\tDLT_BACNET_MS_TP              = 0xa5\n\tDLT_CHAOS                     = 0x5\n\tDLT_CISCO_IOS                 = 0x76\n\tDLT_C_HDLC                    = 0x68\n\tDLT_DOCSIS                    = 0x8f\n\tDLT_ECONET                    = 0x73\n\tDLT_EN10MB                    = 0x1\n\tDLT_EN3MB                     = 0x2\n\tDLT_ENC                       = 0x6d\n\tDLT_ERF_ETH                   = 0xaf\n\tDLT_ERF_POS                   = 0xb0\n\tDLT_FDDI                      = 0xa\n\tDLT_FRELAY                    = 0x6b\n\tDLT_GCOM_SERIAL               = 0xad\n\tDLT_GCOM_T1E1                 = 0xac\n\tDLT_GPF_F                     = 0xab\n\tDLT_GPF_T                     = 0xaa\n\tDLT_GPRS_LLC                  = 0xa9\n\tDLT_HDLC                      = 0x10\n\tDLT_HHDLC                     = 0x79\n\tDLT_HIPPI                     = 0xf\n\tDLT_IBM_SN                    = 0x92\n\tDLT_IBM_SP                    = 0x91\n\tDLT_IEEE802                   = 0x6\n\tDLT_IEEE802_11                = 0x69\n\tDLT_IEEE802_11_RADIO          = 0x7f\n\tDLT_IEEE802_11_RADIO_AVS      = 0xa3\n\tDLT_IPNET                     = 0xe2\n\tDLT_IPOIB                     = 0xa2\n\tDLT_IP_OVER_FC                = 0x7a\n\tDLT_JUNIPER_ATM1              = 0x89\n\tDLT_JUNIPER_ATM2              = 0x87\n\tDLT_JUNIPER_CHDLC             = 0xb5\n\tDLT_JUNIPER_ES                = 0x84\n\tDLT_JUNIPER_ETHER             = 0xb2\n\tDLT_JUNIPER_FRELAY            = 0xb4\n\tDLT_JUNIPER_GGSN              = 0x85\n\tDLT_JUNIPER_MFR               = 0x86\n\tDLT_JUNIPER_MLFR              = 0x83\n\tDLT_JUNIPER_MLPPP             = 0x82\n\tDLT_JUNIPER_MONITOR           = 0xa4\n\tDLT_JUNIPER_PIC_PEER          = 0xae\n\tDLT_JUNIPER_PPP               = 0xb3\n\tDLT_JUNIPER_PPPOE             = 0xa7\n\tDLT_JUNIPER_PPPOE_ATM         = 0xa8\n\tDLT_JUNIPER_SERVICES          = 0x88\n\tDLT_LINUX_IRDA                = 0x90\n\tDLT_LINUX_LAPD                = 0xb1\n\tDLT_LINUX_SLL                 = 0x71\n\tDLT_LOOP                      = 0x6c\n\tDLT_LTALK                     = 0x72\n\tDLT_MTP2                      = 0x8c\n\tDLT_MTP2_WITH_PHDR            = 0x8b\n\tDLT_MTP3                      = 0x8d\n\tDLT_NULL                      = 0x0\n\tDLT_PCI_EXP                   = 0x7d\n\tDLT_PFLOG                     = 0x75\n\tDLT_PFSYNC                    = 0x12\n\tDLT_PPP                       = 0x9\n\tDLT_PPP_BSDOS                 = 0xe\n\tDLT_PPP_PPPD                  = 0xa6\n\tDLT_PRISM_HEADER              = 0x77\n\tDLT_PRONET                    = 0x4\n\tDLT_RAW                       = 0xc\n\tDLT_RAWAF_MASK                = 0x2240000\n\tDLT_RIO                       = 0x7c\n\tDLT_SCCP                      = 0x8e\n\tDLT_SLIP                      = 0x8\n\tDLT_SLIP_BSDOS                = 0xd\n\tDLT_SUNATM                    = 0x7b\n\tDLT_SYMANTEC_FIREWALL         = 0x63\n\tDLT_TZSP                      = 0x80\n\tECHO                          = 0x8\n\tECHOCTL                       = 0x200\n\tECHOE                         = 0x10\n\tECHOK                         = 0x20\n\tECHOKE                        = 0x800\n\tECHONL                        = 0x40\n\tECHOPRT                       = 0x400\n\tEMPTY_SET                     = 0x0\n\tEMT_CPCOVF                    = 0x1\n\tEQUALITY_CHECK                = 0x0\n\tEXTA                          = 0xe\n\tEXTB                          = 0xf\n\tFD_CLOEXEC                    = 0x1\n\tFD_NFDBITS                    = 0x40\n\tFD_SETSIZE                    = 0x10000\n\tFF0                           = 0x0\n\tFF1                           = 0x8000\n\tFFDLY                         = 0x8000\n\tFLUSHALL                      = 0x1\n\tFLUSHDATA                     = 0x0\n\tFLUSHO                        = 0x2000\n\tF_ALLOCSP                     = 0xa\n\tF_ALLOCSP64                   = 0xa\n\tF_BADFD                       = 0x2e\n\tF_BLKSIZE                     = 0x13\n\tF_BLOCKS                      = 0x12\n\tF_CHKFL                       = 0x8\n\tF_COMPAT                      = 0x8\n\tF_DUP2FD                      = 0x9\n\tF_DUP2FD_CLOEXEC              = 0x24\n\tF_DUPFD                       = 0x0\n\tF_DUPFD_CLOEXEC               = 0x25\n\tF_FLOCK                       = 0x35\n\tF_FLOCK64                     = 0x35\n\tF_FLOCKW                      = 0x36\n\tF_FLOCKW64                    = 0x36\n\tF_FREESP                      = 0xb\n\tF_FREESP64                    = 0xb\n\tF_GETFD                       = 0x1\n\tF_GETFL                       = 0x3\n\tF_GETLK                       = 0xe\n\tF_GETLK64                     = 0xe\n\tF_GETOWN                      = 0x17\n\tF_GETXFL                      = 0x2d\n\tF_HASREMOTELOCKS              = 0x1a\n\tF_ISSTREAM                    = 0xd\n\tF_MANDDNY                     = 0x10\n\tF_MDACC                       = 0x20\n\tF_NODNY                       = 0x0\n\tF_NPRIV                       = 0x10\n\tF_OFD_GETLK                   = 0x2f\n\tF_OFD_GETLK64                 = 0x2f\n\tF_OFD_SETLK                   = 0x30\n\tF_OFD_SETLK64                 = 0x30\n\tF_OFD_SETLKW                  = 0x31\n\tF_OFD_SETLKW64                = 0x31\n\tF_PRIV                        = 0xf\n\tF_QUOTACTL                    = 0x11\n\tF_RDACC                       = 0x1\n\tF_RDDNY                       = 0x1\n\tF_RDLCK                       = 0x1\n\tF_REVOKE                      = 0x19\n\tF_RMACC                       = 0x4\n\tF_RMDNY                       = 0x4\n\tF_RWACC                       = 0x3\n\tF_RWDNY                       = 0x3\n\tF_SETFD                       = 0x2\n\tF_SETFL                       = 0x4\n\tF_SETLK                       = 0x6\n\tF_SETLK64                     = 0x6\n\tF_SETLK64_NBMAND              = 0x2a\n\tF_SETLKW                      = 0x7\n\tF_SETLKW64                    = 0x7\n\tF_SETLK_NBMAND                = 0x2a\n\tF_SETOWN                      = 0x18\n\tF_SHARE                       = 0x28\n\tF_SHARE_NBMAND                = 0x2b\n\tF_UNLCK                       = 0x3\n\tF_UNLKSYS                     = 0x4\n\tF_UNSHARE                     = 0x29\n\tF_WRACC                       = 0x2\n\tF_WRDNY                       = 0x2\n\tF_WRLCK                       = 0x2\n\tHUPCL                         = 0x400\n\tIBSHIFT                       = 0x10\n\tICANON                        = 0x2\n\tICRNL                         = 0x100\n\tIEXTEN                        = 0x8000\n\tIFF_ADDRCONF                  = 0x80000\n\tIFF_ALLMULTI                  = 0x200\n\tIFF_ANYCAST                   = 0x400000\n\tIFF_BROADCAST                 = 0x2\n\tIFF_CANTCHANGE                = 0x7f203003b5a\n\tIFF_COS_ENABLED               = 0x200000000\n\tIFF_DEBUG                     = 0x4\n\tIFF_DEPRECATED                = 0x40000\n\tIFF_DHCPRUNNING               = 0x4000\n\tIFF_DUPLICATE                 = 0x4000000000\n\tIFF_FAILED                    = 0x10000000\n\tIFF_FIXEDMTU                  = 0x1000000000\n\tIFF_INACTIVE                  = 0x40000000\n\tIFF_INTELLIGENT               = 0x400\n\tIFF_IPMP                      = 0x8000000000\n\tIFF_IPMP_CANTCHANGE           = 0x10000000\n\tIFF_IPMP_INVALID              = 0x1ec200080\n\tIFF_IPV4                      = 0x1000000\n\tIFF_IPV6                      = 0x2000000\n\tIFF_L3PROTECT                 = 0x40000000000\n\tIFF_LOOPBACK                  = 0x8\n\tIFF_MULTICAST                 = 0x800\n\tIFF_MULTI_BCAST               = 0x1000\n\tIFF_NOACCEPT                  = 0x4000000\n\tIFF_NOARP                     = 0x80\n\tIFF_NOFAILOVER                = 0x8000000\n\tIFF_NOLINKLOCAL               = 0x20000000000\n\tIFF_NOLOCAL                   = 0x20000\n\tIFF_NONUD                     = 0x200000\n\tIFF_NORTEXCH                  = 0x800000\n\tIFF_NOTRAILERS                = 0x20\n\tIFF_NOXMIT                    = 0x10000\n\tIFF_OFFLINE                   = 0x80000000\n\tIFF_POINTOPOINT               = 0x10\n\tIFF_PREFERRED                 = 0x400000000\n\tIFF_PRIVATE                   = 0x8000\n\tIFF_PROMISC                   = 0x100\n\tIFF_ROUTER                    = 0x100000\n\tIFF_RUNNING                   = 0x40\n\tIFF_STANDBY                   = 0x20000000\n\tIFF_TEMPORARY                 = 0x800000000\n\tIFF_UNNUMBERED                = 0x2000\n\tIFF_UP                        = 0x1\n\tIFF_VIRTUAL                   = 0x2000000000\n\tIFF_VRRP                      = 0x10000000000\n\tIFF_XRESOLV                   = 0x100000000\n\tIFNAMSIZ                      = 0x10\n\tIFT_1822                      = 0x2\n\tIFT_6TO4                      = 0xca\n\tIFT_AAL5                      = 0x31\n\tIFT_ARCNET                    = 0x23\n\tIFT_ARCNETPLUS                = 0x24\n\tIFT_ATM                       = 0x25\n\tIFT_CEPT                      = 0x13\n\tIFT_DS3                       = 0x1e\n\tIFT_EON                       = 0x19\n\tIFT_ETHER                     = 0x6\n\tIFT_FDDI                      = 0xf\n\tIFT_FRELAY                    = 0x20\n\tIFT_FRELAYDCE                 = 0x2c\n\tIFT_HDH1822                   = 0x3\n\tIFT_HIPPI                     = 0x2f\n\tIFT_HSSI                      = 0x2e\n\tIFT_HY                        = 0xe\n\tIFT_IB                        = 0xc7\n\tIFT_IPV4                      = 0xc8\n\tIFT_IPV6                      = 0xc9\n\tIFT_ISDNBASIC                 = 0x14\n\tIFT_ISDNPRIMARY               = 0x15\n\tIFT_ISO88022LLC               = 0x29\n\tIFT_ISO88023                  = 0x7\n\tIFT_ISO88024                  = 0x8\n\tIFT_ISO88025                  = 0x9\n\tIFT_ISO88026                  = 0xa\n\tIFT_LAPB                      = 0x10\n\tIFT_LOCALTALK                 = 0x2a\n\tIFT_LOOP                      = 0x18\n\tIFT_MIOX25                    = 0x26\n\tIFT_MODEM                     = 0x30\n\tIFT_NSIP                      = 0x1b\n\tIFT_OTHER                     = 0x1\n\tIFT_P10                       = 0xc\n\tIFT_P80                       = 0xd\n\tIFT_PARA                      = 0x22\n\tIFT_PPP                       = 0x17\n\tIFT_PROPMUX                   = 0x36\n\tIFT_PROPVIRTUAL               = 0x35\n\tIFT_PTPSERIAL                 = 0x16\n\tIFT_RS232                     = 0x21\n\tIFT_SDLC                      = 0x11\n\tIFT_SIP                       = 0x1f\n\tIFT_SLIP                      = 0x1c\n\tIFT_SMDSDXI                   = 0x2b\n\tIFT_SMDSICIP                  = 0x34\n\tIFT_SONET                     = 0x27\n\tIFT_SONETPATH                 = 0x32\n\tIFT_SONETVT                   = 0x33\n\tIFT_STARLAN                   = 0xb\n\tIFT_T1                        = 0x12\n\tIFT_ULTRA                     = 0x1d\n\tIFT_V35                       = 0x2d\n\tIFT_X25                       = 0x5\n\tIFT_X25DDN                    = 0x4\n\tIFT_X25PLE                    = 0x28\n\tIFT_XETHER                    = 0x1a\n\tIGNBRK                        = 0x1\n\tIGNCR                         = 0x80\n\tIGNPAR                        = 0x4\n\tIMAXBEL                       = 0x2000\n\tINLCR                         = 0x40\n\tINPCK                         = 0x10\n\tIN_AUTOCONF_MASK              = 0xffff0000\n\tIN_AUTOCONF_NET               = 0xa9fe0000\n\tIN_CLASSA_HOST                = 0xffffff\n\tIN_CLASSA_MAX                 = 0x80\n\tIN_CLASSA_NET                 = 0xff000000\n\tIN_CLASSA_NSHIFT              = 0x18\n\tIN_CLASSB_HOST                = 0xffff\n\tIN_CLASSB_MAX                 = 0x10000\n\tIN_CLASSB_NET                 = 0xffff0000\n\tIN_CLASSB_NSHIFT              = 0x10\n\tIN_CLASSC_HOST                = 0xff\n\tIN_CLASSC_NET                 = 0xffffff00\n\tIN_CLASSC_NSHIFT              = 0x8\n\tIN_CLASSD_HOST                = 0xfffffff\n\tIN_CLASSD_NET                 = 0xf0000000\n\tIN_CLASSD_NSHIFT              = 0x1c\n\tIN_CLASSE_NET                 = 0xffffffff\n\tIN_LOOPBACKNET                = 0x7f\n\tIN_PRIVATE12_MASK             = 0xfff00000\n\tIN_PRIVATE12_NET              = 0xac100000\n\tIN_PRIVATE16_MASK             = 0xffff0000\n\tIN_PRIVATE16_NET              = 0xc0a80000\n\tIN_PRIVATE8_MASK              = 0xff000000\n\tIN_PRIVATE8_NET               = 0xa000000\n\tIPPROTO_AH                    = 0x33\n\tIPPROTO_DSTOPTS               = 0x3c\n\tIPPROTO_EGP                   = 0x8\n\tIPPROTO_ENCAP                 = 0x4\n\tIPPROTO_EON                   = 0x50\n\tIPPROTO_ESP                   = 0x32\n\tIPPROTO_FRAGMENT              = 0x2c\n\tIPPROTO_GGP                   = 0x3\n\tIPPROTO_HELLO                 = 0x3f\n\tIPPROTO_HOPOPTS               = 0x0\n\tIPPROTO_ICMP                  = 0x1\n\tIPPROTO_ICMPV6                = 0x3a\n\tIPPROTO_IDP                   = 0x16\n\tIPPROTO_IGMP                  = 0x2\n\tIPPROTO_IP                    = 0x0\n\tIPPROTO_IPV6                  = 0x29\n\tIPPROTO_MAX                   = 0x100\n\tIPPROTO_ND                    = 0x4d\n\tIPPROTO_NONE                  = 0x3b\n\tIPPROTO_OSPF                  = 0x59\n\tIPPROTO_PIM                   = 0x67\n\tIPPROTO_PUP                   = 0xc\n\tIPPROTO_RAW                   = 0xff\n\tIPPROTO_ROUTING               = 0x2b\n\tIPPROTO_RSVP                  = 0x2e\n\tIPPROTO_SCTP                  = 0x84\n\tIPPROTO_TCP                   = 0x6\n\tIPPROTO_UDP                   = 0x11\n\tIPV6_ADD_MEMBERSHIP           = 0x9\n\tIPV6_BOUND_IF                 = 0x41\n\tIPV6_CHECKSUM                 = 0x18\n\tIPV6_DONTFRAG                 = 0x21\n\tIPV6_DROP_MEMBERSHIP          = 0xa\n\tIPV6_DSTOPTS                  = 0xf\n\tIPV6_FLOWINFO_FLOWLABEL       = 0xffff0f00\n\tIPV6_FLOWINFO_TCLASS          = 0xf00f\n\tIPV6_HOPLIMIT                 = 0xc\n\tIPV6_HOPOPTS                  = 0xe\n\tIPV6_JOIN_GROUP               = 0x9\n\tIPV6_LEAVE_GROUP              = 0xa\n\tIPV6_MULTICAST_HOPS           = 0x7\n\tIPV6_MULTICAST_IF             = 0x6\n\tIPV6_MULTICAST_LOOP           = 0x8\n\tIPV6_NEXTHOP                  = 0xd\n\tIPV6_PAD1_OPT                 = 0x0\n\tIPV6_PATHMTU                  = 0x25\n\tIPV6_PKTINFO                  = 0xb\n\tIPV6_PREFER_SRC_CGA           = 0x20\n\tIPV6_PREFER_SRC_CGADEFAULT    = 0x10\n\tIPV6_PREFER_SRC_CGAMASK       = 0x30\n\tIPV6_PREFER_SRC_COA           = 0x2\n\tIPV6_PREFER_SRC_DEFAULT       = 0x15\n\tIPV6_PREFER_SRC_HOME          = 0x1\n\tIPV6_PREFER_SRC_MASK          = 0x3f\n\tIPV6_PREFER_SRC_MIPDEFAULT    = 0x1\n\tIPV6_PREFER_SRC_MIPMASK       = 0x3\n\tIPV6_PREFER_SRC_NONCGA        = 0x10\n\tIPV6_PREFER_SRC_PUBLIC        = 0x4\n\tIPV6_PREFER_SRC_TMP           = 0x8\n\tIPV6_PREFER_SRC_TMPDEFAULT    = 0x4\n\tIPV6_PREFER_SRC_TMPMASK       = 0xc\n\tIPV6_RECVDSTOPTS              = 0x28\n\tIPV6_RECVHOPLIMIT             = 0x13\n\tIPV6_RECVHOPOPTS              = 0x14\n\tIPV6_RECVPATHMTU              = 0x24\n\tIPV6_RECVPKTINFO              = 0x12\n\tIPV6_RECVRTHDR                = 0x16\n\tIPV6_RECVRTHDRDSTOPTS         = 0x17\n\tIPV6_RECVTCLASS               = 0x19\n\tIPV6_RTHDR                    = 0x10\n\tIPV6_RTHDRDSTOPTS             = 0x11\n\tIPV6_RTHDR_TYPE_0             = 0x0\n\tIPV6_SEC_OPT                  = 0x22\n\tIPV6_SRC_PREFERENCES          = 0x23\n\tIPV6_TCLASS                   = 0x26\n\tIPV6_UNICAST_HOPS             = 0x5\n\tIPV6_UNSPEC_SRC               = 0x42\n\tIPV6_USE_MIN_MTU              = 0x20\n\tIPV6_V6ONLY                   = 0x27\n\tIP_ADD_MEMBERSHIP             = 0x13\n\tIP_ADD_SOURCE_MEMBERSHIP      = 0x17\n\tIP_BLOCK_SOURCE               = 0x15\n\tIP_BOUND_IF                   = 0x41\n\tIP_BROADCAST                  = 0x106\n\tIP_BROADCAST_TTL              = 0x43\n\tIP_DEFAULT_MULTICAST_LOOP     = 0x1\n\tIP_DEFAULT_MULTICAST_TTL      = 0x1\n\tIP_DF                         = 0x4000\n\tIP_DHCPINIT_IF                = 0x45\n\tIP_DONTFRAG                   = 0x1b\n\tIP_DONTROUTE                  = 0x105\n\tIP_DROP_MEMBERSHIP            = 0x14\n\tIP_DROP_SOURCE_MEMBERSHIP     = 0x18\n\tIP_HDRINCL                    = 0x2\n\tIP_MAXPACKET                  = 0xffff\n\tIP_MF                         = 0x2000\n\tIP_MSS                        = 0x240\n\tIP_MULTICAST_IF               = 0x10\n\tIP_MULTICAST_LOOP             = 0x12\n\tIP_MULTICAST_TTL              = 0x11\n\tIP_NEXTHOP                    = 0x19\n\tIP_OPTIONS                    = 0x1\n\tIP_PKTINFO                    = 0x1a\n\tIP_RECVDSTADDR                = 0x7\n\tIP_RECVIF                     = 0x9\n\tIP_RECVOPTS                   = 0x5\n\tIP_RECVPKTINFO                = 0x1a\n\tIP_RECVRETOPTS                = 0x6\n\tIP_RECVSLLA                   = 0xa\n\tIP_RECVTTL                    = 0xb\n\tIP_RETOPTS                    = 0x8\n\tIP_REUSEADDR                  = 0x104\n\tIP_SEC_OPT                    = 0x22\n\tIP_TOS                        = 0x3\n\tIP_TTL                        = 0x4\n\tIP_UNBLOCK_SOURCE             = 0x16\n\tIP_UNSPEC_SRC                 = 0x42\n\tISIG                          = 0x1\n\tISTRIP                        = 0x20\n\tIUCLC                         = 0x200\n\tIXANY                         = 0x800\n\tIXOFF                         = 0x1000\n\tIXON                          = 0x400\n\tLOCK_EX                       = 0x2\n\tLOCK_NB                       = 0x4\n\tLOCK_SH                       = 0x1\n\tLOCK_UN                       = 0x8\n\tMADV_ACCESS_DEFAULT           = 0x6\n\tMADV_ACCESS_LWP               = 0x7\n\tMADV_ACCESS_MANY              = 0x8\n\tMADV_DONTNEED                 = 0x4\n\tMADV_FREE                     = 0x5\n\tMADV_NORMAL                   = 0x0\n\tMADV_PURGE                    = 0x9\n\tMADV_RANDOM                   = 0x1\n\tMADV_SEQUENTIAL               = 0x2\n\tMADV_WILLNEED                 = 0x3\n\tMAP_32BIT                     = 0x80\n\tMAP_ALIGN                     = 0x200\n\tMAP_ANON                      = 0x100\n\tMAP_ANONYMOUS                 = 0x100\n\tMAP_FILE                      = 0x0\n\tMAP_FIXED                     = 0x10\n\tMAP_INITDATA                  = 0x800\n\tMAP_NORESERVE                 = 0x40\n\tMAP_PRIVATE                   = 0x2\n\tMAP_RENAME                    = 0x20\n\tMAP_SHARED                    = 0x1\n\tMAP_TEXT                      = 0x400\n\tMAP_TYPE                      = 0xf\n\tMCL_CURRENT                   = 0x1\n\tMCL_FUTURE                    = 0x2\n\tMSG_CTRUNC                    = 0x10\n\tMSG_DONTROUTE                 = 0x4\n\tMSG_DONTWAIT                  = 0x80\n\tMSG_DUPCTRL                   = 0x800\n\tMSG_EOR                       = 0x8\n\tMSG_MAXIOVLEN                 = 0x10\n\tMSG_NOTIFICATION              = 0x100\n\tMSG_OOB                       = 0x1\n\tMSG_PEEK                      = 0x2\n\tMSG_TRUNC                     = 0x20\n\tMSG_WAITALL                   = 0x40\n\tMSG_XPG4_2                    = 0x8000\n\tMS_ASYNC                      = 0x1\n\tMS_INVALIDATE                 = 0x2\n\tMS_OLDSYNC                    = 0x0\n\tMS_SYNC                       = 0x4\n\tM_FLUSH                       = 0x86\n\tNAME_MAX                      = 0xff\n\tNEWDEV                        = 0x1\n\tNL0                           = 0x0\n\tNL1                           = 0x100\n\tNLDLY                         = 0x100\n\tNOFLSH                        = 0x80\n\tOCRNL                         = 0x8\n\tOFDEL                         = 0x80\n\tOFILL                         = 0x40\n\tOLCUC                         = 0x2\n\tOLDDEV                        = 0x0\n\tONBITSMAJOR                   = 0x7\n\tONBITSMINOR                   = 0x8\n\tONLCR                         = 0x4\n\tONLRET                        = 0x20\n\tONOCR                         = 0x10\n\tOPENFAIL                      = -0x1\n\tOPOST                         = 0x1\n\tO_ACCMODE                     = 0x600003\n\tO_APPEND                      = 0x8\n\tO_CLOEXEC                     = 0x800000\n\tO_CREAT                       = 0x100\n\tO_DSYNC                       = 0x40\n\tO_EXCL                        = 0x400\n\tO_EXEC                        = 0x400000\n\tO_LARGEFILE                   = 0x2000\n\tO_NDELAY                      = 0x4\n\tO_NOCTTY                      = 0x800\n\tO_NOFOLLOW                    = 0x20000\n\tO_NOLINKS                     = 0x40000\n\tO_NONBLOCK                    = 0x80\n\tO_RDONLY                      = 0x0\n\tO_RDWR                        = 0x2\n\tO_RSYNC                       = 0x8000\n\tO_SEARCH                      = 0x200000\n\tO_SIOCGIFCONF                 = -0x3ff796ec\n\tO_SIOCGLIFCONF                = -0x3fef9688\n\tO_SYNC                        = 0x10\n\tO_TRUNC                       = 0x200\n\tO_WRONLY                      = 0x1\n\tO_XATTR                       = 0x4000\n\tPARENB                        = 0x100\n\tPAREXT                        = 0x100000\n\tPARMRK                        = 0x8\n\tPARODD                        = 0x200\n\tPENDIN                        = 0x4000\n\tPRIO_PGRP                     = 0x1\n\tPRIO_PROCESS                  = 0x0\n\tPRIO_USER                     = 0x2\n\tPROT_EXEC                     = 0x4\n\tPROT_NONE                     = 0x0\n\tPROT_READ                     = 0x1\n\tPROT_WRITE                    = 0x2\n\tRLIMIT_AS                     = 0x6\n\tRLIMIT_CORE                   = 0x4\n\tRLIMIT_CPU                    = 0x0\n\tRLIMIT_DATA                   = 0x2\n\tRLIMIT_FSIZE                  = 0x1\n\tRLIMIT_NOFILE                 = 0x5\n\tRLIMIT_STACK                  = 0x3\n\tRLIM_INFINITY                 = -0x3\n\tRTAX_AUTHOR                   = 0x6\n\tRTAX_BRD                      = 0x7\n\tRTAX_DST                      = 0x0\n\tRTAX_GATEWAY                  = 0x1\n\tRTAX_GENMASK                  = 0x3\n\tRTAX_IFA                      = 0x5\n\tRTAX_IFP                      = 0x4\n\tRTAX_MAX                      = 0x9\n\tRTAX_NETMASK                  = 0x2\n\tRTAX_SRC                      = 0x8\n\tRTA_AUTHOR                    = 0x40\n\tRTA_BRD                       = 0x80\n\tRTA_DST                       = 0x1\n\tRTA_GATEWAY                   = 0x2\n\tRTA_GENMASK                   = 0x8\n\tRTA_IFA                       = 0x20\n\tRTA_IFP                       = 0x10\n\tRTA_NETMASK                   = 0x4\n\tRTA_NUMBITS                   = 0x9\n\tRTA_SRC                       = 0x100\n\tRTF_BLACKHOLE                 = 0x1000\n\tRTF_CLONING                   = 0x100\n\tRTF_DONE                      = 0x40\n\tRTF_DYNAMIC                   = 0x10\n\tRTF_GATEWAY                   = 0x2\n\tRTF_HOST                      = 0x4\n\tRTF_INDIRECT                  = 0x40000\n\tRTF_KERNEL                    = 0x80000\n\tRTF_LLINFO                    = 0x400\n\tRTF_MASK                      = 0x80\n\tRTF_MODIFIED                  = 0x20\n\tRTF_MULTIRT                   = 0x10000\n\tRTF_PRIVATE                   = 0x2000\n\tRTF_PROTO1                    = 0x8000\n\tRTF_PROTO2                    = 0x4000\n\tRTF_REJECT                    = 0x8\n\tRTF_SETSRC                    = 0x20000\n\tRTF_STATIC                    = 0x800\n\tRTF_UP                        = 0x1\n\tRTF_XRESOLVE                  = 0x200\n\tRTF_ZONE                      = 0x100000\n\tRTM_ADD                       = 0x1\n\tRTM_CHANGE                    = 0x3\n\tRTM_CHGADDR                   = 0xf\n\tRTM_DELADDR                   = 0xd\n\tRTM_DELETE                    = 0x2\n\tRTM_FREEADDR                  = 0x10\n\tRTM_GET                       = 0x4\n\tRTM_IFINFO                    = 0xe\n\tRTM_LOCK                      = 0x8\n\tRTM_LOSING                    = 0x5\n\tRTM_MISS                      = 0x7\n\tRTM_NEWADDR                   = 0xc\n\tRTM_OLDADD                    = 0x9\n\tRTM_OLDDEL                    = 0xa\n\tRTM_REDIRECT                  = 0x6\n\tRTM_RESOLVE                   = 0xb\n\tRTM_VERSION                   = 0x3\n\tRTV_EXPIRE                    = 0x4\n\tRTV_HOPCOUNT                  = 0x2\n\tRTV_MTU                       = 0x1\n\tRTV_RPIPE                     = 0x8\n\tRTV_RTT                       = 0x40\n\tRTV_RTTVAR                    = 0x80\n\tRTV_SPIPE                     = 0x10\n\tRTV_SSTHRESH                  = 0x20\n\tRT_AWARE                      = 0x1\n\tRUSAGE_CHILDREN               = -0x1\n\tRUSAGE_SELF                   = 0x0\n\tSCM_RIGHTS                    = 0x1010\n\tSCM_TIMESTAMP                 = 0x1013\n\tSCM_UCRED                     = 0x1012\n\tSHUT_RD                       = 0x0\n\tSHUT_RDWR                     = 0x2\n\tSHUT_WR                       = 0x1\n\tSIG2STR_MAX                   = 0x20\n\tSIOCADDMULTI                  = -0x7fdf96cf\n\tSIOCADDRT                     = -0x7fcf8df6\n\tSIOCATMARK                    = 0x40047307\n\tSIOCDARP                      = -0x7fdb96e0\n\tSIOCDELMULTI                  = -0x7fdf96ce\n\tSIOCDELRT                     = -0x7fcf8df5\n\tSIOCDXARP                     = -0x7fff9658\n\tSIOCGARP                      = -0x3fdb96e1\n\tSIOCGDSTINFO                  = -0x3fff965c\n\tSIOCGENADDR                   = -0x3fdf96ab\n\tSIOCGENPSTATS                 = -0x3fdf96c7\n\tSIOCGETLSGCNT                 = -0x3fef8deb\n\tSIOCGETNAME                   = 0x40107334\n\tSIOCGETPEER                   = 0x40107335\n\tSIOCGETPROP                   = -0x3fff8f44\n\tSIOCGETSGCNT                  = -0x3feb8deb\n\tSIOCGETSYNC                   = -0x3fdf96d3\n\tSIOCGETVIFCNT                 = -0x3feb8dec\n\tSIOCGHIWAT                    = 0x40047301\n\tSIOCGIFADDR                   = -0x3fdf96f3\n\tSIOCGIFBRDADDR                = -0x3fdf96e9\n\tSIOCGIFCONF                   = -0x3ff796a4\n\tSIOCGIFDSTADDR                = -0x3fdf96f1\n\tSIOCGIFFLAGS                  = -0x3fdf96ef\n\tSIOCGIFHWADDR                 = -0x3fdf9647\n\tSIOCGIFINDEX                  = -0x3fdf96a6\n\tSIOCGIFMEM                    = -0x3fdf96ed\n\tSIOCGIFMETRIC                 = -0x3fdf96e5\n\tSIOCGIFMTU                    = -0x3fdf96ea\n\tSIOCGIFMUXID                  = -0x3fdf96a8\n\tSIOCGIFNETMASK                = -0x3fdf96e7\n\tSIOCGIFNUM                    = 0x40046957\n\tSIOCGIP6ADDRPOLICY            = -0x3fff965e\n\tSIOCGIPMSFILTER               = -0x3ffb964c\n\tSIOCGLIFADDR                  = -0x3f87968f\n\tSIOCGLIFBINDING               = -0x3f879666\n\tSIOCGLIFBRDADDR               = -0x3f879685\n\tSIOCGLIFCONF                  = -0x3fef965b\n\tSIOCGLIFDADSTATE              = -0x3f879642\n\tSIOCGLIFDSTADDR               = -0x3f87968d\n\tSIOCGLIFFLAGS                 = -0x3f87968b\n\tSIOCGLIFGROUPINFO             = -0x3f4b9663\n\tSIOCGLIFGROUPNAME             = -0x3f879664\n\tSIOCGLIFHWADDR                = -0x3f879640\n\tSIOCGLIFINDEX                 = -0x3f87967b\n\tSIOCGLIFLNKINFO               = -0x3f879674\n\tSIOCGLIFMETRIC                = -0x3f879681\n\tSIOCGLIFMTU                   = -0x3f879686\n\tSIOCGLIFMUXID                 = -0x3f87967d\n\tSIOCGLIFNETMASK               = -0x3f879683\n\tSIOCGLIFNUM                   = -0x3ff3967e\n\tSIOCGLIFSRCOF                 = -0x3fef964f\n\tSIOCGLIFSUBNET                = -0x3f879676\n\tSIOCGLIFTOKEN                 = -0x3f879678\n\tSIOCGLIFUSESRC                = -0x3f879651\n\tSIOCGLIFZONE                  = -0x3f879656\n\tSIOCGLOWAT                    = 0x40047303\n\tSIOCGMSFILTER                 = -0x3ffb964e\n\tSIOCGPGRP                     = 0x40047309\n\tSIOCGSTAMP                    = -0x3fef9646\n\tSIOCGXARP                     = -0x3fff9659\n\tSIOCIFDETACH                  = -0x7fdf96c8\n\tSIOCILB                       = -0x3ffb9645\n\tSIOCLIFADDIF                  = -0x3f879691\n\tSIOCLIFDELND                  = -0x7f879673\n\tSIOCLIFGETND                  = -0x3f879672\n\tSIOCLIFREMOVEIF               = -0x7f879692\n\tSIOCLIFSETND                  = -0x7f879671\n\tSIOCLOWER                     = -0x7fdf96d7\n\tSIOCSARP                      = -0x7fdb96e2\n\tSIOCSCTPGOPT                  = -0x3fef9653\n\tSIOCSCTPPEELOFF               = -0x3ffb9652\n\tSIOCSCTPSOPT                  = -0x7fef9654\n\tSIOCSENABLESDP                = -0x3ffb9649\n\tSIOCSETPROP                   = -0x7ffb8f43\n\tSIOCSETSYNC                   = -0x7fdf96d4\n\tSIOCSHIWAT                    = -0x7ffb8d00\n\tSIOCSIFADDR                   = -0x7fdf96f4\n\tSIOCSIFBRDADDR                = -0x7fdf96e8\n\tSIOCSIFDSTADDR                = -0x7fdf96f2\n\tSIOCSIFFLAGS                  = -0x7fdf96f0\n\tSIOCSIFINDEX                  = -0x7fdf96a5\n\tSIOCSIFMEM                    = -0x7fdf96ee\n\tSIOCSIFMETRIC                 = -0x7fdf96e4\n\tSIOCSIFMTU                    = -0x7fdf96eb\n\tSIOCSIFMUXID                  = -0x7fdf96a7\n\tSIOCSIFNAME                   = -0x7fdf96b7\n\tSIOCSIFNETMASK                = -0x7fdf96e6\n\tSIOCSIP6ADDRPOLICY            = -0x7fff965d\n\tSIOCSIPMSFILTER               = -0x7ffb964b\n\tSIOCSLGETREQ                  = -0x3fdf96b9\n\tSIOCSLIFADDR                  = -0x7f879690\n\tSIOCSLIFBRDADDR               = -0x7f879684\n\tSIOCSLIFDSTADDR               = -0x7f87968e\n\tSIOCSLIFFLAGS                 = -0x7f87968c\n\tSIOCSLIFGROUPNAME             = -0x7f879665\n\tSIOCSLIFINDEX                 = -0x7f87967a\n\tSIOCSLIFLNKINFO               = -0x7f879675\n\tSIOCSLIFMETRIC                = -0x7f879680\n\tSIOCSLIFMTU                   = -0x7f879687\n\tSIOCSLIFMUXID                 = -0x7f87967c\n\tSIOCSLIFNAME                  = -0x3f87967f\n\tSIOCSLIFNETMASK               = -0x7f879682\n\tSIOCSLIFPREFIX                = -0x3f879641\n\tSIOCSLIFSUBNET                = -0x7f879677\n\tSIOCSLIFTOKEN                 = -0x7f879679\n\tSIOCSLIFUSESRC                = -0x7f879650\n\tSIOCSLIFZONE                  = -0x7f879655\n\tSIOCSLOWAT                    = -0x7ffb8cfe\n\tSIOCSLSTAT                    = -0x7fdf96b8\n\tSIOCSMSFILTER                 = -0x7ffb964d\n\tSIOCSPGRP                     = -0x7ffb8cf8\n\tSIOCSPROMISC                  = -0x7ffb96d0\n\tSIOCSQPTR                     = -0x3ffb9648\n\tSIOCSSDSTATS                  = -0x3fdf96d2\n\tSIOCSSESTATS                  = -0x3fdf96d1\n\tSIOCSXARP                     = -0x7fff965a\n\tSIOCTMYADDR                   = -0x3ff79670\n\tSIOCTMYSITE                   = -0x3ff7966e\n\tSIOCTONLINK                   = -0x3ff7966f\n\tSIOCUPPER                     = -0x7fdf96d8\n\tSIOCX25RCV                    = -0x3fdf96c4\n\tSIOCX25TBL                    = -0x3fdf96c3\n\tSIOCX25XMT                    = -0x3fdf96c5\n\tSIOCXPROTO                    = 0x20007337\n\tSOCK_CLOEXEC                  = 0x80000\n\tSOCK_DGRAM                    = 0x1\n\tSOCK_NDELAY                   = 0x200000\n\tSOCK_NONBLOCK                 = 0x100000\n\tSOCK_RAW                      = 0x4\n\tSOCK_RDM                      = 0x5\n\tSOCK_SEQPACKET                = 0x6\n\tSOCK_STREAM                   = 0x2\n\tSOCK_TYPE_MASK                = 0xffff\n\tSOL_FILTER                    = 0xfffc\n\tSOL_PACKET                    = 0xfffd\n\tSOL_ROUTE                     = 0xfffe\n\tSOL_SOCKET                    = 0xffff\n\tSOMAXCONN                     = 0x80\n\tSO_ACCEPTCONN                 = 0x2\n\tSO_ALL                        = 0x3f\n\tSO_ALLZONES                   = 0x1014\n\tSO_ANON_MLP                   = 0x100a\n\tSO_ATTACH_FILTER              = 0x40000001\n\tSO_BAND                       = 0x4000\n\tSO_BROADCAST                  = 0x20\n\tSO_COPYOPT                    = 0x80000\n\tSO_DEBUG                      = 0x1\n\tSO_DELIM                      = 0x8000\n\tSO_DETACH_FILTER              = 0x40000002\n\tSO_DGRAM_ERRIND               = 0x200\n\tSO_DOMAIN                     = 0x100c\n\tSO_DONTLINGER                 = -0x81\n\tSO_DONTROUTE                  = 0x10\n\tSO_ERROPT                     = 0x40000\n\tSO_ERROR                      = 0x1007\n\tSO_EXCLBIND                   = 0x1015\n\tSO_HIWAT                      = 0x10\n\tSO_ISNTTY                     = 0x800\n\tSO_ISTTY                      = 0x400\n\tSO_KEEPALIVE                  = 0x8\n\tSO_LINGER                     = 0x80\n\tSO_LOWAT                      = 0x20\n\tSO_MAC_EXEMPT                 = 0x100b\n\tSO_MAC_IMPLICIT               = 0x1016\n\tSO_MAXBLK                     = 0x100000\n\tSO_MAXPSZ                     = 0x8\n\tSO_MINPSZ                     = 0x4\n\tSO_MREADOFF                   = 0x80\n\tSO_MREADON                    = 0x40\n\tSO_NDELOFF                    = 0x200\n\tSO_NDELON                     = 0x100\n\tSO_NODELIM                    = 0x10000\n\tSO_OOBINLINE                  = 0x100\n\tSO_PROTOTYPE                  = 0x1009\n\tSO_RCVBUF                     = 0x1002\n\tSO_RCVLOWAT                   = 0x1004\n\tSO_RCVPSH                     = 0x100d\n\tSO_RCVTIMEO                   = 0x1006\n\tSO_READOPT                    = 0x1\n\tSO_RECVUCRED                  = 0x400\n\tSO_REUSEADDR                  = 0x4\n\tSO_SECATTR                    = 0x1011\n\tSO_SNDBUF                     = 0x1001\n\tSO_SNDLOWAT                   = 0x1003\n\tSO_SNDTIMEO                   = 0x1005\n\tSO_STRHOLD                    = 0x20000\n\tSO_TAIL                       = 0x200000\n\tSO_TIMESTAMP                  = 0x1013\n\tSO_TONSTOP                    = 0x2000\n\tSO_TOSTOP                     = 0x1000\n\tSO_TYPE                       = 0x1008\n\tSO_USELOOPBACK                = 0x40\n\tSO_VRRP                       = 0x1017\n\tSO_WROFF                      = 0x2\n\tS_ENFMT                       = 0x400\n\tS_IAMB                        = 0x1ff\n\tS_IEXEC                       = 0x40\n\tS_IFBLK                       = 0x6000\n\tS_IFCHR                       = 0x2000\n\tS_IFDIR                       = 0x4000\n\tS_IFDOOR                      = 0xd000\n\tS_IFIFO                       = 0x1000\n\tS_IFLNK                       = 0xa000\n\tS_IFMT                        = 0xf000\n\tS_IFNAM                       = 0x5000\n\tS_IFPORT                      = 0xe000\n\tS_IFREG                       = 0x8000\n\tS_IFSOCK                      = 0xc000\n\tS_INSEM                       = 0x1\n\tS_INSHD                       = 0x2\n\tS_IREAD                       = 0x100\n\tS_IRGRP                       = 0x20\n\tS_IROTH                       = 0x4\n\tS_IRUSR                       = 0x100\n\tS_IRWXG                       = 0x38\n\tS_IRWXO                       = 0x7\n\tS_IRWXU                       = 0x1c0\n\tS_ISGID                       = 0x400\n\tS_ISUID                       = 0x800\n\tS_ISVTX                       = 0x200\n\tS_IWGRP                       = 0x10\n\tS_IWOTH                       = 0x2\n\tS_IWRITE                      = 0x80\n\tS_IWUSR                       = 0x80\n\tS_IXGRP                       = 0x8\n\tS_IXOTH                       = 0x1\n\tS_IXUSR                       = 0x40\n\tTAB0                          = 0x0\n\tTAB1                          = 0x800\n\tTAB2                          = 0x1000\n\tTAB3                          = 0x1800\n\tTABDLY                        = 0x1800\n\tTCFLSH                        = 0x5407\n\tTCGETA                        = 0x5401\n\tTCGETS                        = 0x540d\n\tTCIFLUSH                      = 0x0\n\tTCIOFF                        = 0x2\n\tTCIOFLUSH                     = 0x2\n\tTCION                         = 0x3\n\tTCOFLUSH                      = 0x1\n\tTCOOFF                        = 0x0\n\tTCOON                         = 0x1\n\tTCP_ABORT_THRESHOLD           = 0x11\n\tTCP_ANONPRIVBIND              = 0x20\n\tTCP_CONN_ABORT_THRESHOLD      = 0x13\n\tTCP_CONN_NOTIFY_THRESHOLD     = 0x12\n\tTCP_CORK                      = 0x18\n\tTCP_EXCLBIND                  = 0x21\n\tTCP_INIT_CWND                 = 0x15\n\tTCP_KEEPALIVE                 = 0x8\n\tTCP_KEEPALIVE_ABORT_THRESHOLD = 0x17\n\tTCP_KEEPALIVE_THRESHOLD       = 0x16\n\tTCP_KEEPCNT                   = 0x23\n\tTCP_KEEPIDLE                  = 0x22\n\tTCP_KEEPINTVL                 = 0x24\n\tTCP_LINGER2                   = 0x1c\n\tTCP_MAXSEG                    = 0x2\n\tTCP_MSS                       = 0x218\n\tTCP_NODELAY                   = 0x1\n\tTCP_NOTIFY_THRESHOLD          = 0x10\n\tTCP_RECVDSTADDR               = 0x14\n\tTCP_RTO_INITIAL               = 0x19\n\tTCP_RTO_MAX                   = 0x1b\n\tTCP_RTO_MIN                   = 0x1a\n\tTCSAFLUSH                     = 0x5410\n\tTCSBRK                        = 0x5405\n\tTCSETA                        = 0x5402\n\tTCSETAF                       = 0x5404\n\tTCSETAW                       = 0x5403\n\tTCSETS                        = 0x540e\n\tTCSETSF                       = 0x5410\n\tTCSETSW                       = 0x540f\n\tTCXONC                        = 0x5406\n\tTIOC                          = 0x5400\n\tTIOCCBRK                      = 0x747a\n\tTIOCCDTR                      = 0x7478\n\tTIOCCILOOP                    = 0x746c\n\tTIOCEXCL                      = 0x740d\n\tTIOCFLUSH                     = 0x7410\n\tTIOCGETC                      = 0x7412\n\tTIOCGETD                      = 0x7400\n\tTIOCGETP                      = 0x7408\n\tTIOCGLTC                      = 0x7474\n\tTIOCGPGRP                     = 0x7414\n\tTIOCGPPS                      = 0x547d\n\tTIOCGPPSEV                    = 0x547f\n\tTIOCGSID                      = 0x7416\n\tTIOCGSOFTCAR                  = 0x5469\n\tTIOCGWINSZ                    = 0x5468\n\tTIOCHPCL                      = 0x7402\n\tTIOCKBOF                      = 0x5409\n\tTIOCKBON                      = 0x5408\n\tTIOCLBIC                      = 0x747e\n\tTIOCLBIS                      = 0x747f\n\tTIOCLGET                      = 0x747c\n\tTIOCLSET                      = 0x747d\n\tTIOCMBIC                      = 0x741c\n\tTIOCMBIS                      = 0x741b\n\tTIOCMGET                      = 0x741d\n\tTIOCMSET                      = 0x741a\n\tTIOCM_CAR                     = 0x40\n\tTIOCM_CD                      = 0x40\n\tTIOCM_CTS                     = 0x20\n\tTIOCM_DSR                     = 0x100\n\tTIOCM_DTR                     = 0x2\n\tTIOCM_LE                      = 0x1\n\tTIOCM_RI                      = 0x80\n\tTIOCM_RNG                     = 0x80\n\tTIOCM_RTS                     = 0x4\n\tTIOCM_SR                      = 0x10\n\tTIOCM_ST                      = 0x8\n\tTIOCNOTTY                     = 0x7471\n\tTIOCNXCL                      = 0x740e\n\tTIOCOUTQ                      = 0x7473\n\tTIOCREMOTE                    = 0x741e\n\tTIOCSBRK                      = 0x747b\n\tTIOCSCTTY                     = 0x7484\n\tTIOCSDTR                      = 0x7479\n\tTIOCSETC                      = 0x7411\n\tTIOCSETD                      = 0x7401\n\tTIOCSETN                      = 0x740a\n\tTIOCSETP                      = 0x7409\n\tTIOCSIGNAL                    = 0x741f\n\tTIOCSILOOP                    = 0x746d\n\tTIOCSLTC                      = 0x7475\n\tTIOCSPGRP                     = 0x7415\n\tTIOCSPPS                      = 0x547e\n\tTIOCSSOFTCAR                  = 0x546a\n\tTIOCSTART                     = 0x746e\n\tTIOCSTI                       = 0x7417\n\tTIOCSTOP                      = 0x746f\n\tTIOCSWINSZ                    = 0x5467\n\tTOSTOP                        = 0x100\n\tUTIME_NOW                     = -0x1\n\tUTIME_OMIT                    = -0x2\n\tVCEOF                         = 0x8\n\tVCEOL                         = 0x9\n\tVDISCARD                      = 0xd\n\tVDSUSP                        = 0xb\n\tVEOF                          = 0x4\n\tVEOL                          = 0x5\n\tVEOL2                         = 0x6\n\tVERASE                        = 0x2\n\tVERASE2                       = 0x11\n\tVINTR                         = 0x0\n\tVKILL                         = 0x3\n\tVLNEXT                        = 0xf\n\tVMIN                          = 0x4\n\tVQUIT                         = 0x1\n\tVREPRINT                      = 0xc\n\tVSTART                        = 0x8\n\tVSTATUS                       = 0x10\n\tVSTOP                         = 0x9\n\tVSUSP                         = 0xa\n\tVSWTCH                        = 0x7\n\tVT0                           = 0x0\n\tVT1                           = 0x4000\n\tVTDLY                         = 0x4000\n\tVTIME                         = 0x5\n\tVWERASE                       = 0xe\n\tWCONTFLG                      = 0xffff\n\tWCONTINUED                    = 0x8\n\tWCOREFLG                      = 0x80\n\tWEXITED                       = 0x1\n\tWNOHANG                       = 0x40\n\tWNOWAIT                       = 0x80\n\tWOPTMASK                      = 0xcf\n\tWRAP                          = 0x20000\n\tWSIGMASK                      = 0x7f\n\tWSTOPFLG                      = 0x7f\n\tWSTOPPED                      = 0x4\n\tWTRAPPED                      = 0x2\n\tWUNTRACED                     = 0x4\n\tXCASE                         = 0x4\n\tXTABS                         = 0x1800\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x7d)\n\tEADDRNOTAVAIL   = syscall.Errno(0x7e)\n\tEADV            = syscall.Errno(0x44)\n\tEAFNOSUPPORT    = syscall.Errno(0x7c)\n\tEAGAIN          = syscall.Errno(0xb)\n\tEALREADY        = syscall.Errno(0x95)\n\tEBADE           = syscall.Errno(0x32)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADFD          = syscall.Errno(0x51)\n\tEBADMSG         = syscall.Errno(0x4d)\n\tEBADR           = syscall.Errno(0x33)\n\tEBADRQC         = syscall.Errno(0x36)\n\tEBADSLT         = syscall.Errno(0x37)\n\tEBFONT          = syscall.Errno(0x39)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x2f)\n\tECHILD          = syscall.Errno(0xa)\n\tECHRNG          = syscall.Errno(0x25)\n\tECOMM           = syscall.Errno(0x46)\n\tECONNABORTED    = syscall.Errno(0x82)\n\tECONNREFUSED    = syscall.Errno(0x92)\n\tECONNRESET      = syscall.Errno(0x83)\n\tEDEADLK         = syscall.Errno(0x2d)\n\tEDEADLOCK       = syscall.Errno(0x38)\n\tEDESTADDRREQ    = syscall.Errno(0x60)\n\tEDOM            = syscall.Errno(0x21)\n\tEDQUOT          = syscall.Errno(0x31)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEHOSTDOWN       = syscall.Errno(0x93)\n\tEHOSTUNREACH    = syscall.Errno(0x94)\n\tEIDRM           = syscall.Errno(0x24)\n\tEILSEQ          = syscall.Errno(0x58)\n\tEINPROGRESS     = syscall.Errno(0x96)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEISCONN         = syscall.Errno(0x85)\n\tEISDIR          = syscall.Errno(0x15)\n\tEL2HLT          = syscall.Errno(0x2c)\n\tEL2NSYNC        = syscall.Errno(0x26)\n\tEL3HLT          = syscall.Errno(0x27)\n\tEL3RST          = syscall.Errno(0x28)\n\tELIBACC         = syscall.Errno(0x53)\n\tELIBBAD         = syscall.Errno(0x54)\n\tELIBEXEC        = syscall.Errno(0x57)\n\tELIBMAX         = syscall.Errno(0x56)\n\tELIBSCN         = syscall.Errno(0x55)\n\tELNRNG          = syscall.Errno(0x29)\n\tELOCKUNMAPPED   = syscall.Errno(0x48)\n\tELOOP           = syscall.Errno(0x5a)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x61)\n\tEMULTIHOP       = syscall.Errno(0x4a)\n\tENAMETOOLONG    = syscall.Errno(0x4e)\n\tENETDOWN        = syscall.Errno(0x7f)\n\tENETRESET       = syscall.Errno(0x81)\n\tENETUNREACH     = syscall.Errno(0x80)\n\tENFILE          = syscall.Errno(0x17)\n\tENOANO          = syscall.Errno(0x35)\n\tENOBUFS         = syscall.Errno(0x84)\n\tENOCSI          = syscall.Errno(0x2b)\n\tENODATA         = syscall.Errno(0x3d)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x2e)\n\tENOLINK         = syscall.Errno(0x43)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x23)\n\tENONET          = syscall.Errno(0x40)\n\tENOPKG          = syscall.Errno(0x41)\n\tENOPROTOOPT     = syscall.Errno(0x63)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSR           = syscall.Errno(0x3f)\n\tENOSTR          = syscall.Errno(0x3c)\n\tENOSYS          = syscall.Errno(0x59)\n\tENOTACTIVE      = syscall.Errno(0x49)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x86)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x5d)\n\tENOTRECOVERABLE = syscall.Errno(0x3b)\n\tENOTSOCK        = syscall.Errno(0x5f)\n\tENOTSUP         = syscall.Errno(0x30)\n\tENOTTY          = syscall.Errno(0x19)\n\tENOTUNIQ        = syscall.Errno(0x50)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x7a)\n\tEOVERFLOW       = syscall.Errno(0x4f)\n\tEOWNERDEAD      = syscall.Errno(0x3a)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x7b)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROTO          = syscall.Errno(0x47)\n\tEPROTONOSUPPORT = syscall.Errno(0x78)\n\tEPROTOTYPE      = syscall.Errno(0x62)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMCHG         = syscall.Errno(0x52)\n\tEREMOTE         = syscall.Errno(0x42)\n\tERESTART        = syscall.Errno(0x5b)\n\tEROFS           = syscall.Errno(0x1e)\n\tESHUTDOWN       = syscall.Errno(0x8f)\n\tESOCKTNOSUPPORT = syscall.Errno(0x79)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESRMNT          = syscall.Errno(0x45)\n\tESTALE          = syscall.Errno(0x97)\n\tESTRPIPE        = syscall.Errno(0x5c)\n\tETIME           = syscall.Errno(0x3e)\n\tETIMEDOUT       = syscall.Errno(0x91)\n\tETOOMANYREFS    = syscall.Errno(0x90)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUNATCH         = syscall.Errno(0x2a)\n\tEUSERS          = syscall.Errno(0x5e)\n\tEWOULDBLOCK     = syscall.Errno(0xb)\n\tEXDEV           = syscall.Errno(0x12)\n\tEXFULL          = syscall.Errno(0x34)\n)\n\n// Signals\nconst (\n\tSIGABRT    = syscall.Signal(0x6)\n\tSIGALRM    = syscall.Signal(0xe)\n\tSIGBUS     = syscall.Signal(0xa)\n\tSIGCANCEL  = syscall.Signal(0x24)\n\tSIGCHLD    = syscall.Signal(0x12)\n\tSIGCLD     = syscall.Signal(0x12)\n\tSIGCONT    = syscall.Signal(0x19)\n\tSIGEMT     = syscall.Signal(0x7)\n\tSIGFPE     = syscall.Signal(0x8)\n\tSIGFREEZE  = syscall.Signal(0x22)\n\tSIGHUP     = syscall.Signal(0x1)\n\tSIGILL     = syscall.Signal(0x4)\n\tSIGINFO    = syscall.Signal(0x29)\n\tSIGINT     = syscall.Signal(0x2)\n\tSIGIO      = syscall.Signal(0x16)\n\tSIGIOT     = syscall.Signal(0x6)\n\tSIGJVM1    = syscall.Signal(0x27)\n\tSIGJVM2    = syscall.Signal(0x28)\n\tSIGKILL    = syscall.Signal(0x9)\n\tSIGLOST    = syscall.Signal(0x25)\n\tSIGLWP     = syscall.Signal(0x21)\n\tSIGPIPE    = syscall.Signal(0xd)\n\tSIGPOLL    = syscall.Signal(0x16)\n\tSIGPROF    = syscall.Signal(0x1d)\n\tSIGPWR     = syscall.Signal(0x13)\n\tSIGQUIT    = syscall.Signal(0x3)\n\tSIGSEGV    = syscall.Signal(0xb)\n\tSIGSTOP    = syscall.Signal(0x17)\n\tSIGSYS     = syscall.Signal(0xc)\n\tSIGTERM    = syscall.Signal(0xf)\n\tSIGTHAW    = syscall.Signal(0x23)\n\tSIGTRAP    = syscall.Signal(0x5)\n\tSIGTSTP    = syscall.Signal(0x18)\n\tSIGTTIN    = syscall.Signal(0x1a)\n\tSIGTTOU    = syscall.Signal(0x1b)\n\tSIGURG     = syscall.Signal(0x15)\n\tSIGUSR1    = syscall.Signal(0x10)\n\tSIGUSR2    = syscall.Signal(0x11)\n\tSIGVTALRM  = syscall.Signal(0x1c)\n\tSIGWAITING = syscall.Signal(0x20)\n\tSIGWINCH   = syscall.Signal(0x14)\n\tSIGXCPU    = syscall.Signal(0x1e)\n\tSIGXFSZ    = syscall.Signal(0x1f)\n\tSIGXRES    = syscall.Signal(0x26)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"not owner\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"I/O error\"},\n\t{6, \"ENXIO\", \"no such device or address\"},\n\t{7, \"E2BIG\", \"arg list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file number\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{12, \"ENOMEM\", \"not enough space\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"no such device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"file table overflow\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large\"},\n\t{35, \"ENOMSG\", \"no message of desired type\"},\n\t{36, \"EIDRM\", \"identifier removed\"},\n\t{37, \"ECHRNG\", \"channel number out of range\"},\n\t{38, \"EL2NSYNC\", \"level 2 not synchronized\"},\n\t{39, \"EL3HLT\", \"level 3 halted\"},\n\t{40, \"EL3RST\", \"level 3 reset\"},\n\t{41, \"ELNRNG\", \"link number out of range\"},\n\t{42, \"EUNATCH\", \"protocol driver not attached\"},\n\t{43, \"ENOCSI\", \"no CSI structure available\"},\n\t{44, \"EL2HLT\", \"level 2 halted\"},\n\t{45, \"EDEADLK\", \"deadlock situation detected/avoided\"},\n\t{46, \"ENOLCK\", \"no record locks available\"},\n\t{47, \"ECANCELED\", \"operation canceled\"},\n\t{48, \"ENOTSUP\", \"operation not supported\"},\n\t{49, \"EDQUOT\", \"disc quota exceeded\"},\n\t{50, \"EBADE\", \"bad exchange descriptor\"},\n\t{51, \"EBADR\", \"bad request descriptor\"},\n\t{52, \"EXFULL\", \"message tables full\"},\n\t{53, \"ENOANO\", \"anode table overflow\"},\n\t{54, \"EBADRQC\", \"bad request code\"},\n\t{55, \"EBADSLT\", \"invalid slot\"},\n\t{56, \"EDEADLOCK\", \"file locking deadlock\"},\n\t{57, \"EBFONT\", \"bad font file format\"},\n\t{58, \"EOWNERDEAD\", \"owner of the lock died\"},\n\t{59, \"ENOTRECOVERABLE\", \"lock is not recoverable\"},\n\t{60, \"ENOSTR\", \"not a stream device\"},\n\t{61, \"ENODATA\", \"no data available\"},\n\t{62, \"ETIME\", \"timer expired\"},\n\t{63, \"ENOSR\", \"out of stream resources\"},\n\t{64, \"ENONET\", \"machine is not on the network\"},\n\t{65, \"ENOPKG\", \"package not installed\"},\n\t{66, \"EREMOTE\", \"object is remote\"},\n\t{67, \"ENOLINK\", \"link has been severed\"},\n\t{68, \"EADV\", \"advertise error\"},\n\t{69, \"ESRMNT\", \"srmount error\"},\n\t{70, \"ECOMM\", \"communication error on send\"},\n\t{71, \"EPROTO\", \"protocol error\"},\n\t{72, \"ELOCKUNMAPPED\", \"locked lock was unmapped \"},\n\t{73, \"ENOTACTIVE\", \"facility is not active\"},\n\t{74, \"EMULTIHOP\", \"multihop attempted\"},\n\t{77, \"EBADMSG\", \"not a data message\"},\n\t{78, \"ENAMETOOLONG\", \"file name too long\"},\n\t{79, \"EOVERFLOW\", \"value too large for defined data type\"},\n\t{80, \"ENOTUNIQ\", \"name not unique on network\"},\n\t{81, \"EBADFD\", \"file descriptor in bad state\"},\n\t{82, \"EREMCHG\", \"remote address changed\"},\n\t{83, \"ELIBACC\", \"can not access a needed shared library\"},\n\t{84, \"ELIBBAD\", \"accessing a corrupted shared library\"},\n\t{85, \"ELIBSCN\", \".lib section in a.out corrupted\"},\n\t{86, \"ELIBMAX\", \"attempting to link in more shared libraries than system limit\"},\n\t{87, \"ELIBEXEC\", \"can not exec a shared library directly\"},\n\t{88, \"EILSEQ\", \"illegal byte sequence\"},\n\t{89, \"ENOSYS\", \"operation not applicable\"},\n\t{90, \"ELOOP\", \"number of symbolic links encountered during path name traversal exceeds MAXSYMLINKS\"},\n\t{91, \"ERESTART\", \"error 91\"},\n\t{92, \"ESTRPIPE\", \"error 92\"},\n\t{93, \"ENOTEMPTY\", \"directory not empty\"},\n\t{94, \"EUSERS\", \"too many users\"},\n\t{95, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{96, \"EDESTADDRREQ\", \"destination address required\"},\n\t{97, \"EMSGSIZE\", \"message too long\"},\n\t{98, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{99, \"ENOPROTOOPT\", \"option not supported by protocol\"},\n\t{120, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{121, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{122, \"EOPNOTSUPP\", \"operation not supported on transport endpoint\"},\n\t{123, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{124, \"EAFNOSUPPORT\", \"address family not supported by protocol family\"},\n\t{125, \"EADDRINUSE\", \"address already in use\"},\n\t{126, \"EADDRNOTAVAIL\", \"cannot assign requested address\"},\n\t{127, \"ENETDOWN\", \"network is down\"},\n\t{128, \"ENETUNREACH\", \"network is unreachable\"},\n\t{129, \"ENETRESET\", \"network dropped connection because of reset\"},\n\t{130, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{131, \"ECONNRESET\", \"connection reset by peer\"},\n\t{132, \"ENOBUFS\", \"no buffer space available\"},\n\t{133, \"EISCONN\", \"transport endpoint is already connected\"},\n\t{134, \"ENOTCONN\", \"transport endpoint is not connected\"},\n\t{143, \"ESHUTDOWN\", \"cannot send after socket shutdown\"},\n\t{144, \"ETOOMANYREFS\", \"too many references: cannot splice\"},\n\t{145, \"ETIMEDOUT\", \"connection timed out\"},\n\t{146, \"ECONNREFUSED\", \"connection refused\"},\n\t{147, \"EHOSTDOWN\", \"host is down\"},\n\t{148, \"EHOSTUNREACH\", \"no route to host\"},\n\t{149, \"EALREADY\", \"operation already in progress\"},\n\t{150, \"EINPROGRESS\", \"operation now in progress\"},\n\t{151, \"ESTALE\", \"stale NFS file handle\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal Instruction\"},\n\t{5, \"SIGTRAP\", \"trace/Breakpoint Trap\"},\n\t{6, \"SIGABRT\", \"abort\"},\n\t{7, \"SIGEMT\", \"emulation Trap\"},\n\t{8, \"SIGFPE\", \"arithmetic Exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus Error\"},\n\t{11, \"SIGSEGV\", \"segmentation Fault\"},\n\t{12, \"SIGSYS\", \"bad System Call\"},\n\t{13, \"SIGPIPE\", \"broken Pipe\"},\n\t{14, \"SIGALRM\", \"alarm Clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGUSR1\", \"user Signal 1\"},\n\t{17, \"SIGUSR2\", \"user Signal 2\"},\n\t{18, \"SIGCHLD\", \"child Status Changed\"},\n\t{19, \"SIGPWR\", \"power-Fail/Restart\"},\n\t{20, \"SIGWINCH\", \"window Size Change\"},\n\t{21, \"SIGURG\", \"urgent Socket Condition\"},\n\t{22, \"SIGIO\", \"pollable Event\"},\n\t{23, \"SIGSTOP\", \"stopped (signal)\"},\n\t{24, \"SIGTSTP\", \"stopped (user)\"},\n\t{25, \"SIGCONT\", \"continued\"},\n\t{26, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{27, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{28, \"SIGVTALRM\", \"virtual Timer Expired\"},\n\t{29, \"SIGPROF\", \"profiling Timer Expired\"},\n\t{30, \"SIGXCPU\", \"cpu Limit Exceeded\"},\n\t{31, \"SIGXFSZ\", \"file Size Limit Exceeded\"},\n\t{32, \"SIGWAITING\", \"no runnable lwp\"},\n\t{33, \"SIGLWP\", \"inter-lwp signal\"},\n\t{34, \"SIGFREEZE\", \"checkpoint Freeze\"},\n\t{35, \"SIGTHAW\", \"checkpoint Thaw\"},\n\t{36, \"SIGCANCEL\", \"thread Cancellation\"},\n\t{37, \"SIGLOST\", \"resource Lost\"},\n\t{38, \"SIGXRES\", \"resource Control Exceeded\"},\n\t{39, \"SIGJVM1\", \"reserved for JVM 1\"},\n\t{40, \"SIGJVM2\", \"reserved for JVM 2\"},\n\t{41, \"SIGINFO\", \"information Request\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zptrace386_linux.go",
    "content": "// Code generated by linux/mkall.go generatePtracePair(386, amd64). DO NOT EDIT.\n\n// +build linux\n// +build 386 amd64\n\npackage unix\n\nimport \"unsafe\"\n\n// PtraceRegs386 is the registers used by 386 binaries.\ntype PtraceRegs386 struct {\n\tEbx      int32\n\tEcx      int32\n\tEdx      int32\n\tEsi      int32\n\tEdi      int32\n\tEbp      int32\n\tEax      int32\n\tXds      int32\n\tXes      int32\n\tXfs      int32\n\tXgs      int32\n\tOrig_eax int32\n\tEip      int32\n\tXcs      int32\n\tEflags   int32\n\tEsp      int32\n\tXss      int32\n}\n\n// PtraceGetRegs386 fetches the registers used by 386 binaries.\nfunc PtraceGetRegs386(pid int, regsout *PtraceRegs386) error {\n\treturn ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout)))\n}\n\n// PtraceSetRegs386 sets the registers used by 386 binaries.\nfunc PtraceSetRegs386(pid int, regs *PtraceRegs386) error {\n\treturn ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs)))\n}\n\n// PtraceRegsAmd64 is the registers used by amd64 binaries.\ntype PtraceRegsAmd64 struct {\n\tR15      uint64\n\tR14      uint64\n\tR13      uint64\n\tR12      uint64\n\tRbp      uint64\n\tRbx      uint64\n\tR11      uint64\n\tR10      uint64\n\tR9       uint64\n\tR8       uint64\n\tRax      uint64\n\tRcx      uint64\n\tRdx      uint64\n\tRsi      uint64\n\tRdi      uint64\n\tOrig_rax uint64\n\tRip      uint64\n\tCs       uint64\n\tEflags   uint64\n\tRsp      uint64\n\tSs       uint64\n\tFs_base  uint64\n\tGs_base  uint64\n\tDs       uint64\n\tEs       uint64\n\tFs       uint64\n\tGs       uint64\n}\n\n// PtraceGetRegsAmd64 fetches the registers used by amd64 binaries.\nfunc PtraceGetRegsAmd64(pid int, regsout *PtraceRegsAmd64) error {\n\treturn ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout)))\n}\n\n// PtraceSetRegsAmd64 sets the registers used by amd64 binaries.\nfunc PtraceSetRegsAmd64(pid int, regs *PtraceRegsAmd64) error {\n\treturn ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs)))\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zptracearm_linux.go",
    "content": "// Code generated by linux/mkall.go generatePtracePair(arm, arm64). DO NOT EDIT.\n\n// +build linux\n// +build arm arm64\n\npackage unix\n\nimport \"unsafe\"\n\n// PtraceRegsArm is the registers used by arm binaries.\ntype PtraceRegsArm struct {\n\tUregs [18]uint32\n}\n\n// PtraceGetRegsArm fetches the registers used by arm binaries.\nfunc PtraceGetRegsArm(pid int, regsout *PtraceRegsArm) error {\n\treturn ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout)))\n}\n\n// PtraceSetRegsArm sets the registers used by arm binaries.\nfunc PtraceSetRegsArm(pid int, regs *PtraceRegsArm) error {\n\treturn ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs)))\n}\n\n// PtraceRegsArm64 is the registers used by arm64 binaries.\ntype PtraceRegsArm64 struct {\n\tRegs   [31]uint64\n\tSp     uint64\n\tPc     uint64\n\tPstate uint64\n}\n\n// PtraceGetRegsArm64 fetches the registers used by arm64 binaries.\nfunc PtraceGetRegsArm64(pid int, regsout *PtraceRegsArm64) error {\n\treturn ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout)))\n}\n\n// PtraceSetRegsArm64 sets the registers used by arm64 binaries.\nfunc PtraceSetRegsArm64(pid int, regs *PtraceRegsArm64) error {\n\treturn ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs)))\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zptracemips_linux.go",
    "content": "// Code generated by linux/mkall.go generatePtracePair(mips, mips64). DO NOT EDIT.\n\n// +build linux\n// +build mips mips64\n\npackage unix\n\nimport \"unsafe\"\n\n// PtraceRegsMips is the registers used by mips binaries.\ntype PtraceRegsMips struct {\n\tRegs     [32]uint64\n\tLo       uint64\n\tHi       uint64\n\tEpc      uint64\n\tBadvaddr uint64\n\tStatus   uint64\n\tCause    uint64\n}\n\n// PtraceGetRegsMips fetches the registers used by mips binaries.\nfunc PtraceGetRegsMips(pid int, regsout *PtraceRegsMips) error {\n\treturn ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout)))\n}\n\n// PtraceSetRegsMips sets the registers used by mips binaries.\nfunc PtraceSetRegsMips(pid int, regs *PtraceRegsMips) error {\n\treturn ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs)))\n}\n\n// PtraceRegsMips64 is the registers used by mips64 binaries.\ntype PtraceRegsMips64 struct {\n\tRegs     [32]uint64\n\tLo       uint64\n\tHi       uint64\n\tEpc      uint64\n\tBadvaddr uint64\n\tStatus   uint64\n\tCause    uint64\n}\n\n// PtraceGetRegsMips64 fetches the registers used by mips64 binaries.\nfunc PtraceGetRegsMips64(pid int, regsout *PtraceRegsMips64) error {\n\treturn ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout)))\n}\n\n// PtraceSetRegsMips64 sets the registers used by mips64 binaries.\nfunc PtraceSetRegsMips64(pid int, regs *PtraceRegsMips64) error {\n\treturn ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs)))\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zptracemipsle_linux.go",
    "content": "// Code generated by linux/mkall.go generatePtracePair(mipsle, mips64le). DO NOT EDIT.\n\n// +build linux\n// +build mipsle mips64le\n\npackage unix\n\nimport \"unsafe\"\n\n// PtraceRegsMipsle is the registers used by mipsle binaries.\ntype PtraceRegsMipsle struct {\n\tRegs     [32]uint64\n\tLo       uint64\n\tHi       uint64\n\tEpc      uint64\n\tBadvaddr uint64\n\tStatus   uint64\n\tCause    uint64\n}\n\n// PtraceGetRegsMipsle fetches the registers used by mipsle binaries.\nfunc PtraceGetRegsMipsle(pid int, regsout *PtraceRegsMipsle) error {\n\treturn ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout)))\n}\n\n// PtraceSetRegsMipsle sets the registers used by mipsle binaries.\nfunc PtraceSetRegsMipsle(pid int, regs *PtraceRegsMipsle) error {\n\treturn ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs)))\n}\n\n// PtraceRegsMips64le is the registers used by mips64le binaries.\ntype PtraceRegsMips64le struct {\n\tRegs     [32]uint64\n\tLo       uint64\n\tHi       uint64\n\tEpc      uint64\n\tBadvaddr uint64\n\tStatus   uint64\n\tCause    uint64\n}\n\n// PtraceGetRegsMips64le fetches the registers used by mips64le binaries.\nfunc PtraceGetRegsMips64le(pid int, regsout *PtraceRegsMips64le) error {\n\treturn ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout)))\n}\n\n// PtraceSetRegsMips64le sets the registers used by mips64le binaries.\nfunc PtraceSetRegsMips64le(pid int, regs *PtraceRegsMips64le) error {\n\treturn ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs)))\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go",
    "content": "// go run mksyscall_aix_ppc.go -aix -tags aix,ppc syscall_aix.go syscall_aix_ppc.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build aix,ppc\n\npackage unix\n\n/*\n#include <stdint.h>\n#include <stddef.h>\nint utimes(uintptr_t, uintptr_t);\nint utimensat(int, uintptr_t, uintptr_t, int);\nint getcwd(uintptr_t, size_t);\nint accept(int, uintptr_t, uintptr_t);\nint getdirent(int, uintptr_t, size_t);\nint wait4(int, uintptr_t, int, uintptr_t);\nint ioctl(int, int, uintptr_t);\nint fcntl(uintptr_t, int, uintptr_t);\nint acct(uintptr_t);\nint chdir(uintptr_t);\nint chroot(uintptr_t);\nint close(int);\nint dup(int);\nvoid exit(int);\nint faccessat(int, uintptr_t, unsigned int, int);\nint fchdir(int);\nint fchmod(int, unsigned int);\nint fchmodat(int, uintptr_t, unsigned int, int);\nint fchownat(int, uintptr_t, int, int, int);\nint fdatasync(int);\nint fsync(int);\nint getpgid(int);\nint getpgrp();\nint getpid();\nint getppid();\nint getpriority(int, int);\nint getrusage(int, uintptr_t);\nint getsid(int);\nint kill(int, int);\nint syslog(int, uintptr_t, size_t);\nint mkdir(int, uintptr_t, unsigned int);\nint mkdirat(int, uintptr_t, unsigned int);\nint mkfifo(uintptr_t, unsigned int);\nint mknod(uintptr_t, unsigned int, int);\nint mknodat(int, uintptr_t, unsigned int, int);\nint nanosleep(uintptr_t, uintptr_t);\nint open64(uintptr_t, int, unsigned int);\nint openat(int, uintptr_t, int, unsigned int);\nint read(int, uintptr_t, size_t);\nint readlink(uintptr_t, uintptr_t, size_t);\nint renameat(int, uintptr_t, int, uintptr_t);\nint setdomainname(uintptr_t, size_t);\nint sethostname(uintptr_t, size_t);\nint setpgid(int, int);\nint setsid();\nint settimeofday(uintptr_t);\nint setuid(int);\nint setgid(int);\nint setpriority(int, int, int);\nint statx(int, uintptr_t, int, int, uintptr_t);\nint sync();\nuintptr_t times(uintptr_t);\nint umask(int);\nint uname(uintptr_t);\nint unlink(uintptr_t);\nint unlinkat(int, uintptr_t, int);\nint ustat(int, uintptr_t);\nint write(int, uintptr_t, size_t);\nint dup2(int, int);\nint posix_fadvise64(int, long long, long long, int);\nint fchown(int, int, int);\nint fstat(int, uintptr_t);\nint fstatat(int, uintptr_t, uintptr_t, int);\nint fstatfs(int, uintptr_t);\nint ftruncate(int, long long);\nint getegid();\nint geteuid();\nint getgid();\nint getuid();\nint lchown(uintptr_t, int, int);\nint listen(int, int);\nint lstat(uintptr_t, uintptr_t);\nint pause();\nint pread64(int, uintptr_t, size_t, long long);\nint pwrite64(int, uintptr_t, size_t, long long);\n#define c_select select\nint select(int, uintptr_t, uintptr_t, uintptr_t, uintptr_t);\nint pselect(int, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t);\nint setregid(int, int);\nint setreuid(int, int);\nint shutdown(int, int);\nlong long splice(int, uintptr_t, int, uintptr_t, int, int);\nint stat(uintptr_t, uintptr_t);\nint statfs(uintptr_t, uintptr_t);\nint truncate(uintptr_t, long long);\nint bind(int, uintptr_t, uintptr_t);\nint connect(int, uintptr_t, uintptr_t);\nint getgroups(int, uintptr_t);\nint setgroups(int, uintptr_t);\nint getsockopt(int, int, int, uintptr_t, uintptr_t);\nint setsockopt(int, int, int, uintptr_t, uintptr_t);\nint socket(int, int, int);\nint socketpair(int, int, int, uintptr_t);\nint getpeername(int, uintptr_t, uintptr_t);\nint getsockname(int, uintptr_t, uintptr_t);\nint recvfrom(int, uintptr_t, size_t, int, uintptr_t, uintptr_t);\nint sendto(int, uintptr_t, size_t, int, uintptr_t, uintptr_t);\nint nrecvmsg(int, uintptr_t, int);\nint nsendmsg(int, uintptr_t, int);\nint munmap(uintptr_t, uintptr_t);\nint madvise(uintptr_t, size_t, int);\nint mprotect(uintptr_t, size_t, int);\nint mlock(uintptr_t, size_t);\nint mlockall(int);\nint msync(uintptr_t, size_t, int);\nint munlock(uintptr_t, size_t);\nint munlockall();\nint pipe(uintptr_t);\nint poll(uintptr_t, int, int);\nint gettimeofday(uintptr_t, uintptr_t);\nint time(uintptr_t);\nint utime(uintptr_t, uintptr_t);\nunsigned long long getsystemcfg(int);\nint umount(uintptr_t);\nint getrlimit64(int, uintptr_t);\nint setrlimit64(int, uintptr_t);\nlong long lseek64(int, long long, int);\nuintptr_t mmap(uintptr_t, uintptr_t, int, int, int, long long);\n\n*/\nimport \"C\"\nimport (\n\t\"unsafe\"\n)\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, times *[2]Timeval) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.utimes(C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(times))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flag int) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.utimensat(C.int(dirfd), C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(times))), C.int(flag))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getcwd(buf []byte) (err error) {\n\tvar _p0 *byte\n\tif len(buf) > 0 {\n\t\t_p0 = &buf[0]\n\t}\n\tvar _p1 int\n\t_p1 = len(buf)\n\tr0, er := C.getcwd(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, er := C.accept(C.int(s), C.uintptr_t(uintptr(unsafe.Pointer(rsa))), C.uintptr_t(uintptr(unsafe.Pointer(addrlen))))\n\tfd = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getdirent(fd int, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\tif len(buf) > 0 {\n\t\t_p0 = &buf[0]\n\t}\n\tvar _p1 int\n\t_p1 = len(buf)\n\tr0, er := C.getdirent(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1))\n\tn = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid Pid_t, status *_C_int, options int, rusage *Rusage) (wpid Pid_t, err error) {\n\tr0, er := C.wait4(C.int(pid), C.uintptr_t(uintptr(unsafe.Pointer(status))), C.int(options), C.uintptr_t(uintptr(unsafe.Pointer(rusage))))\n\twpid = Pid_t(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\tr0, er := C.ioctl(C.int(fd), C.int(req), C.uintptr_t(arg))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc FcntlInt(fd uintptr, cmd int, arg int) (r int, err error) {\n\tr0, er := C.fcntl(C.uintptr_t(fd), C.int(cmd), C.uintptr_t(arg))\n\tr = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc FcntlFlock(fd uintptr, cmd int, lk *Flock_t) (err error) {\n\tr0, er := C.fcntl(C.uintptr_t(fd), C.int(cmd), C.uintptr_t(uintptr(unsafe.Pointer(lk))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (val int, err error) {\n\tr0, er := C.fcntl(C.uintptr_t(fd), C.int(cmd), C.uintptr_t(arg))\n\tval = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Acct(path string) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.acct(C.uintptr_t(_p0))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.chdir(C.uintptr_t(_p0))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.chroot(C.uintptr_t(_p0))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\tr0, er := C.close(C.int(fd))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(oldfd int) (fd int, err error) {\n\tr0, er := C.dup(C.int(oldfd))\n\tfd = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tC.exit(C.int(code))\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.faccessat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode), C.int(flags))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\tr0, er := C.fchdir(C.int(fd))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\tr0, er := C.fchmod(C.int(fd), C.uint(mode))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.fchmodat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode), C.int(flags))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.fchownat(C.int(dirfd), C.uintptr_t(_p0), C.int(uid), C.int(gid), C.int(flags))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fdatasync(fd int) (err error) {\n\tr0, er := C.fdatasync(C.int(fd))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\tr0, er := C.fsync(C.int(fd))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, er := C.getpgid(C.int(pid))\n\tpgid = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pid int) {\n\tr0, _ := C.getpgrp()\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _ := C.getpid()\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _ := C.getppid()\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, er := C.getpriority(C.int(which), C.int(who))\n\tprio = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\tr0, er := C.getrusage(C.int(who), C.uintptr_t(uintptr(unsafe.Pointer(rusage))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, er := C.getsid(C.int(pid))\n\tsid = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, sig Signal) (err error) {\n\tr0, er := C.kill(C.int(pid), C.int(sig))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Klogctl(typ int, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\tif len(buf) > 0 {\n\t\t_p0 = &buf[0]\n\t}\n\tvar _p1 int\n\t_p1 = len(buf)\n\tr0, er := C.syslog(C.int(typ), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1))\n\tn = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(dirfd int, path string, mode uint32) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.mkdir(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.mkdirat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.mkfifo(C.uintptr_t(_p0), C.uint(mode))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknod(path string, mode uint32, dev int) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.mknod(C.uintptr_t(_p0), C.uint(mode), C.int(dev))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.mknodat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode), C.int(dev))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\tr0, er := C.nanosleep(C.uintptr_t(uintptr(unsafe.Pointer(time))), C.uintptr_t(uintptr(unsafe.Pointer(leftover))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.open64(C.uintptr_t(_p0), C.int(mode), C.uint(perm))\n\tfd = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.openat(C.int(dirfd), C.uintptr_t(_p0), C.int(flags), C.uint(mode))\n\tfd = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 *byte\n\tif len(p) > 0 {\n\t\t_p0 = &p[0]\n\t}\n\tvar _p1 int\n\t_p1 = len(p)\n\tr0, er := C.read(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1))\n\tn = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tvar _p1 *byte\n\tif len(buf) > 0 {\n\t\t_p1 = &buf[0]\n\t}\n\tvar _p2 int\n\t_p2 = len(buf)\n\tr0, er := C.readlink(C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(_p1))), C.size_t(_p2))\n\tn = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(oldpath)))\n\t_p1 := uintptr(unsafe.Pointer(C.CString(newpath)))\n\tr0, er := C.renameat(C.int(olddirfd), C.uintptr_t(_p0), C.int(newdirfd), C.uintptr_t(_p1))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setdomainname(p []byte) (err error) {\n\tvar _p0 *byte\n\tif len(p) > 0 {\n\t\t_p0 = &p[0]\n\t}\n\tvar _p1 int\n\t_p1 = len(p)\n\tr0, er := C.setdomainname(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sethostname(p []byte) (err error) {\n\tvar _p0 *byte\n\tif len(p) > 0 {\n\t\t_p0 = &p[0]\n\t}\n\tvar _p1 int\n\t_p1 = len(p)\n\tr0, er := C.sethostname(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\tr0, er := C.setpgid(C.int(pid), C.int(pgid))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, er := C.setsid()\n\tpid = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tv *Timeval) (err error) {\n\tr0, er := C.settimeofday(C.uintptr_t(uintptr(unsafe.Pointer(tv))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\tr0, er := C.setuid(C.int(uid))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(uid int) (err error) {\n\tr0, er := C.setgid(C.int(uid))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\tr0, er := C.setpriority(C.int(which), C.int(who), C.int(prio))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.statx(C.int(dirfd), C.uintptr_t(_p0), C.int(flags), C.int(mask), C.uintptr_t(uintptr(unsafe.Pointer(stat))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() {\n\tC.sync()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Times(tms *Tms) (ticks uintptr, err error) {\n\tr0, er := C.times(C.uintptr_t(uintptr(unsafe.Pointer(tms))))\n\tticks = uintptr(r0)\n\tif uintptr(r0) == ^uintptr(0) && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(mask int) (oldmask int) {\n\tr0, _ := C.umask(C.int(mask))\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Uname(buf *Utsname) (err error) {\n\tr0, er := C.uname(C.uintptr_t(uintptr(unsafe.Pointer(buf))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.unlink(C.uintptr_t(_p0))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.unlinkat(C.int(dirfd), C.uintptr_t(_p0), C.int(flags))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ustat(dev int, ubuf *Ustat_t) (err error) {\n\tr0, er := C.ustat(C.int(dev), C.uintptr_t(uintptr(unsafe.Pointer(ubuf))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 *byte\n\tif len(p) > 0 {\n\t\t_p0 = &p[0]\n\t}\n\tvar _p1 int\n\t_p1 = len(p)\n\tr0, er := C.write(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1))\n\tn = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc readlen(fd int, p *byte, np int) (n int, err error) {\n\tr0, er := C.read(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(p))), C.size_t(np))\n\tn = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc writelen(fd int, p *byte, np int) (n int, err error) {\n\tr0, er := C.write(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(p))), C.size_t(np))\n\tn = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(oldfd int, newfd int) (err error) {\n\tr0, er := C.dup2(C.int(oldfd), C.int(newfd))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\tr0, er := C.posix_fadvise64(C.int(fd), C.longlong(offset), C.longlong(length), C.int(advice))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\tr0, er := C.fchown(C.int(fd), C.int(uid), C.int(gid))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fstat(fd int, stat *Stat_t) (err error) {\n\tr0, er := C.fstat(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(stat))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.fstatat(C.int(dirfd), C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(stat))), C.int(flags))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, buf *Statfs_t) (err error) {\n\tr0, er := C.fstatfs(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(buf))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\tr0, er := C.ftruncate(C.int(fd), C.longlong(length))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _ := C.getegid()\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (euid int) {\n\tr0, _ := C.geteuid()\n\teuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _ := C.getgid()\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _ := C.getuid()\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.lchown(C.uintptr_t(_p0), C.int(uid), C.int(gid))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, n int) (err error) {\n\tr0, er := C.listen(C.int(s), C.int(n))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc lstat(path string, stat *Stat_t) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.lstat(C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(stat))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pause() (err error) {\n\tr0, er := C.pause()\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 *byte\n\tif len(p) > 0 {\n\t\t_p0 = &p[0]\n\t}\n\tvar _p1 int\n\t_p1 = len(p)\n\tr0, er := C.pread64(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1), C.longlong(offset))\n\tn = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 *byte\n\tif len(p) > 0 {\n\t\t_p0 = &p[0]\n\t}\n\tvar _p1 int\n\t_p1 = len(p)\n\tr0, er := C.pwrite64(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1), C.longlong(offset))\n\tn = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, 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\tn = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n\tr0, 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\tn = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\tr0, er := C.setregid(C.int(rgid), C.int(egid))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\tr0, er := C.setreuid(C.int(ruid), C.int(euid))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(fd int, how int) (err error) {\n\tr0, er := C.shutdown(C.int(fd), C.int(how))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {\n\tr0, 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\tn = int64(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc stat(path string, statptr *Stat_t) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.stat(C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(statptr))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, buf *Statfs_t) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.statfs(C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(buf))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.truncate(C.uintptr_t(_p0), C.longlong(length))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\tr0, er := C.bind(C.int(s), C.uintptr_t(uintptr(addr)), C.uintptr_t(uintptr(addrlen)))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\tr0, er := C.connect(C.int(s), C.uintptr_t(uintptr(addr)), C.uintptr_t(uintptr(addrlen)))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(n int, list *_Gid_t) (nn int, err error) {\n\tr0, er := C.getgroups(C.int(n), C.uintptr_t(uintptr(unsafe.Pointer(list))))\n\tnn = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(n int, list *_Gid_t) (err error) {\n\tr0, er := C.setgroups(C.int(n), C.uintptr_t(uintptr(unsafe.Pointer(list))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\tr0, er := C.getsockopt(C.int(s), C.int(level), C.int(name), C.uintptr_t(uintptr(val)), C.uintptr_t(uintptr(unsafe.Pointer(vallen))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\tr0, er := C.setsockopt(C.int(s), C.int(level), C.int(name), C.uintptr_t(uintptr(val)), C.uintptr_t(vallen))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, er := C.socket(C.int(domain), C.int(typ), C.int(proto))\n\tfd = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\tr0, er := C.socketpair(C.int(domain), C.int(typ), C.int(proto), C.uintptr_t(uintptr(unsafe.Pointer(fd))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\tr0, er := C.getpeername(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(rsa))), C.uintptr_t(uintptr(unsafe.Pointer(addrlen))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\tr0, er := C.getsockname(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(rsa))), C.uintptr_t(uintptr(unsafe.Pointer(addrlen))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 *byte\n\tif len(p) > 0 {\n\t\t_p0 = &p[0]\n\t}\n\tvar _p1 int\n\t_p1 = len(p)\n\tr0, 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\tn = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 *byte\n\tif len(buf) > 0 {\n\t\t_p0 = &buf[0]\n\t}\n\tvar _p1 int\n\t_p1 = len(buf)\n\tr0, 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)))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, er := C.nrecvmsg(C.int(s), C.uintptr_t(uintptr(unsafe.Pointer(msg))), C.int(flags))\n\tn = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, er := C.nsendmsg(C.int(s), C.uintptr_t(uintptr(unsafe.Pointer(msg))), C.int(flags))\n\tn = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\tr0, er := C.munmap(C.uintptr_t(addr), C.uintptr_t(length))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, advice int) (err error) {\n\tvar _p0 *byte\n\tif len(b) > 0 {\n\t\t_p0 = &b[0]\n\t}\n\tvar _p1 int\n\t_p1 = len(b)\n\tr0, er := C.madvise(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1), C.int(advice))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 *byte\n\tif len(b) > 0 {\n\t\t_p0 = &b[0]\n\t}\n\tvar _p1 int\n\t_p1 = len(b)\n\tr0, er := C.mprotect(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1), C.int(prot))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 *byte\n\tif len(b) > 0 {\n\t\t_p0 = &b[0]\n\t}\n\tvar _p1 int\n\t_p1 = len(b)\n\tr0, er := C.mlock(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\tr0, er := C.mlockall(C.int(flags))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 *byte\n\tif len(b) > 0 {\n\t\t_p0 = &b[0]\n\t}\n\tvar _p1 int\n\t_p1 = len(b)\n\tr0, er := C.msync(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1), C.int(flags))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 *byte\n\tif len(b) > 0 {\n\t\t_p0 = &b[0]\n\t}\n\tvar _p1 int\n\t_p1 = len(b)\n\tr0, er := C.munlock(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\tr0, er := C.munlockall()\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe(p *[2]_C_int) (err error) {\n\tr0, er := C.pipe(C.uintptr_t(uintptr(unsafe.Pointer(p))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, er := C.poll(C.uintptr_t(uintptr(unsafe.Pointer(fds))), C.int(nfds), C.int(timeout))\n\tn = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc gettimeofday(tv *Timeval, tzp *Timezone) (err error) {\n\tr0, er := C.gettimeofday(C.uintptr_t(uintptr(unsafe.Pointer(tv))), C.uintptr_t(uintptr(unsafe.Pointer(tzp))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Time(t *Time_t) (tt Time_t, err error) {\n\tr0, er := C.time(C.uintptr_t(uintptr(unsafe.Pointer(t))))\n\ttt = Time_t(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Utime(path string, buf *Utimbuf) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.utime(C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(buf))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsystemcfg(label int) (n uint64) {\n\tr0, _ := C.getsystemcfg(C.int(label))\n\tn = uint64(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc umount(target string) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(target)))\n\tr0, er := C.umount(C.uintptr_t(_p0))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(resource int, rlim *Rlimit) (err error) {\n\tr0, er := C.getrlimit64(C.int(resource), C.uintptr_t(uintptr(unsafe.Pointer(rlim))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setrlimit(resource int, rlim *Rlimit) (err error) {\n\tr0, er := C.setrlimit64(C.int(resource), C.uintptr_t(uintptr(unsafe.Pointer(rlim))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (off int64, err error) {\n\tr0, er := C.lseek64(C.int(fd), C.longlong(offset), C.int(whence))\n\toff = int64(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {\n\tr0, er := C.mmap(C.uintptr_t(addr), C.uintptr_t(length), C.int(prot), C.int(flags), C.int(fd), C.longlong(offset))\n\txaddr = uintptr(r0)\n\tif uintptr(r0) == ^uintptr(0) && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go",
    "content": "// go run mksyscall_aix_ppc64.go -aix -tags aix,ppc64 syscall_aix.go syscall_aix_ppc64.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build aix,ppc64\n\npackage unix\n\nimport (\n\t\"unsafe\"\n)\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callutimes(uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flag int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callutimensat(dirfd, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), flag)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getcwd(buf []byte) (err error) {\n\tvar _p0 *byte\n\tif len(buf) > 0 {\n\t\t_p0 = &buf[0]\n\t}\n\t_, e1 := callgetcwd(uintptr(unsafe.Pointer(_p0)), len(buf))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, e1 := callaccept(s, uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getdirent(fd int, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\tif len(buf) > 0 {\n\t\t_p0 = &buf[0]\n\t}\n\tr0, e1 := callgetdirent(fd, uintptr(unsafe.Pointer(_p0)), len(buf))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid Pid_t, status *_C_int, options int, rusage *Rusage) (wpid Pid_t, err error) {\n\tr0, e1 := callwait4(int(pid), uintptr(unsafe.Pointer(status)), options, uintptr(unsafe.Pointer(rusage)))\n\twpid = Pid_t(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, e1 := callioctl(fd, int(req), arg)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc FcntlInt(fd uintptr, cmd int, arg int) (r int, err error) {\n\tr0, e1 := callfcntl(fd, cmd, uintptr(arg))\n\tr = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc FcntlFlock(fd uintptr, cmd int, lk *Flock_t) (err error) {\n\t_, e1 := callfcntl(fd, cmd, uintptr(unsafe.Pointer(lk)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (val int, err error) {\n\tr0, e1 := callfcntl(uintptr(fd), cmd, uintptr(arg))\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Acct(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callacct(uintptr(unsafe.Pointer(_p0)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callchdir(uintptr(unsafe.Pointer(_p0)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callchroot(uintptr(unsafe.Pointer(_p0)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, e1 := callclose(fd)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(oldfd int) (fd int, err error) {\n\tr0, e1 := calldup(oldfd)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tcallexit(code)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callfaccessat(dirfd, uintptr(unsafe.Pointer(_p0)), mode, flags)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, e1 := callfchdir(fd)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, e1 := callfchmod(fd, mode)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callfchmodat(dirfd, uintptr(unsafe.Pointer(_p0)), mode, flags)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callfchownat(dirfd, uintptr(unsafe.Pointer(_p0)), uid, gid, flags)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fdatasync(fd int) (err error) {\n\t_, e1 := callfdatasync(fd)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, e1 := callfsync(fd)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, e1 := callgetpgid(pid)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pid int) {\n\tr0, _ := callgetpgrp()\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _ := callgetpid()\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _ := callgetppid()\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, e1 := callgetpriority(which, who)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, e1 := callgetrusage(who, uintptr(unsafe.Pointer(rusage)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, e1 := callgetsid(pid)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, sig Signal) (err error) {\n\t_, e1 := callkill(pid, int(sig))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Klogctl(typ int, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\tif len(buf) > 0 {\n\t\t_p0 = &buf[0]\n\t}\n\tr0, e1 := callsyslog(typ, uintptr(unsafe.Pointer(_p0)), len(buf))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callmkdir(dirfd, uintptr(unsafe.Pointer(_p0)), mode)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callmkdirat(dirfd, uintptr(unsafe.Pointer(_p0)), mode)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callmkfifo(uintptr(unsafe.Pointer(_p0)), mode)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknod(path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callmknod(uintptr(unsafe.Pointer(_p0)), mode, dev)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callmknodat(dirfd, uintptr(unsafe.Pointer(_p0)), mode, dev)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, e1 := callnanosleep(uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, e1 := callopen64(uintptr(unsafe.Pointer(_p0)), mode, perm)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, e1 := callopenat(dirfd, uintptr(unsafe.Pointer(_p0)), flags, mode)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 *byte\n\tif len(p) > 0 {\n\t\t_p0 = &p[0]\n\t}\n\tr0, e1 := callread(fd, uintptr(unsafe.Pointer(_p0)), len(p))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\tif len(buf) > 0 {\n\t\t_p1 = &buf[0]\n\t}\n\tr0, e1 := callreadlink(uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), len(buf))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callrenameat(olddirfd, uintptr(unsafe.Pointer(_p0)), newdirfd, uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setdomainname(p []byte) (err error) {\n\tvar _p0 *byte\n\tif len(p) > 0 {\n\t\t_p0 = &p[0]\n\t}\n\t_, e1 := callsetdomainname(uintptr(unsafe.Pointer(_p0)), len(p))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sethostname(p []byte) (err error) {\n\tvar _p0 *byte\n\tif len(p) > 0 {\n\t\t_p0 = &p[0]\n\t}\n\t_, e1 := callsethostname(uintptr(unsafe.Pointer(_p0)), len(p))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, e1 := callsetpgid(pid, pgid)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, e1 := callsetsid()\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tv *Timeval) (err error) {\n\t_, e1 := callsettimeofday(uintptr(unsafe.Pointer(tv)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, e1 := callsetuid(uid)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(uid int) (err error) {\n\t_, e1 := callsetgid(uid)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, e1 := callsetpriority(which, who, prio)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callstatx(dirfd, uintptr(unsafe.Pointer(_p0)), flags, mask, uintptr(unsafe.Pointer(stat)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() {\n\tcallsync()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Times(tms *Tms) (ticks uintptr, err error) {\n\tr0, e1 := calltimes(uintptr(unsafe.Pointer(tms)))\n\tticks = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(mask int) (oldmask int) {\n\tr0, _ := callumask(mask)\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Uname(buf *Utsname) (err error) {\n\t_, e1 := calluname(uintptr(unsafe.Pointer(buf)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callunlink(uintptr(unsafe.Pointer(_p0)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callunlinkat(dirfd, uintptr(unsafe.Pointer(_p0)), flags)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ustat(dev int, ubuf *Ustat_t) (err error) {\n\t_, e1 := callustat(dev, uintptr(unsafe.Pointer(ubuf)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 *byte\n\tif len(p) > 0 {\n\t\t_p0 = &p[0]\n\t}\n\tr0, e1 := callwrite(fd, uintptr(unsafe.Pointer(_p0)), len(p))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc readlen(fd int, p *byte, np int) (n int, err error) {\n\tr0, e1 := callread(fd, uintptr(unsafe.Pointer(p)), np)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc writelen(fd int, p *byte, np int) (n int, err error) {\n\tr0, e1 := callwrite(fd, uintptr(unsafe.Pointer(p)), np)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(oldfd int, newfd int) (err error) {\n\t_, e1 := calldup2(oldfd, newfd)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, e1 := callposix_fadvise64(fd, offset, length, advice)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, e1 := callfchown(fd, uid, gid)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fstat(fd int, stat *Stat_t) (err error) {\n\t_, e1 := callfstat(fd, uintptr(unsafe.Pointer(stat)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callfstatat(dirfd, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), flags)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, buf *Statfs_t) (err error) {\n\t_, e1 := callfstatfs(fd, uintptr(unsafe.Pointer(buf)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, e1 := callftruncate(fd, length)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _ := callgetegid()\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (euid int) {\n\tr0, _ := callgeteuid()\n\teuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _ := callgetgid()\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _ := callgetuid()\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := calllchown(uintptr(unsafe.Pointer(_p0)), uid, gid)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, n int) (err error) {\n\t_, e1 := calllisten(s, n)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := calllstat(uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pause() (err error) {\n\t_, e1 := callpause()\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 *byte\n\tif len(p) > 0 {\n\t\t_p0 = &p[0]\n\t}\n\tr0, e1 := callpread64(fd, uintptr(unsafe.Pointer(_p0)), len(p), offset)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 *byte\n\tif len(p) > 0 {\n\t\t_p0 = &p[0]\n\t}\n\tr0, e1 := callpwrite64(fd, uintptr(unsafe.Pointer(_p0)), len(p), offset)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, e1 := callselect(nfd, uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n\tr0, e1 := callpselect(nfd, uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, e1 := callsetregid(rgid, egid)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, e1 := callsetreuid(ruid, euid)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(fd int, how int) (err error) {\n\t_, e1 := callshutdown(fd, how)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {\n\tr0, e1 := callsplice(rfd, uintptr(unsafe.Pointer(roff)), wfd, uintptr(unsafe.Pointer(woff)), len, flags)\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc stat(path string, statptr *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callstat(uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(statptr)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, buf *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callstatfs(uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := calltruncate(uintptr(unsafe.Pointer(_p0)), length)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, e1 := callbind(s, uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, e1 := callconnect(s, uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(n int, list *_Gid_t) (nn int, err error) {\n\tr0, e1 := callgetgroups(n, uintptr(unsafe.Pointer(list)))\n\tnn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(n int, list *_Gid_t) (err error) {\n\t_, e1 := callsetgroups(n, uintptr(unsafe.Pointer(list)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, e1 := callgetsockopt(s, level, name, uintptr(val), uintptr(unsafe.Pointer(vallen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, e1 := callsetsockopt(s, level, name, uintptr(val), vallen)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, e1 := callsocket(domain, typ, proto)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, e1 := callsocketpair(domain, typ, proto, uintptr(unsafe.Pointer(fd)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, e1 := callgetpeername(fd, uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, e1 := callgetsockname(fd, uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 *byte\n\tif len(p) > 0 {\n\t\t_p0 = &p[0]\n\t}\n\tr0, e1 := callrecvfrom(fd, uintptr(unsafe.Pointer(_p0)), len(p), flags, uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 *byte\n\tif len(buf) > 0 {\n\t\t_p0 = &buf[0]\n\t}\n\t_, e1 := callsendto(s, uintptr(unsafe.Pointer(_p0)), len(buf), flags, uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, e1 := callnrecvmsg(s, uintptr(unsafe.Pointer(msg)), flags)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, e1 := callnsendmsg(s, uintptr(unsafe.Pointer(msg)), flags)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, e1 := callmunmap(addr, length)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, advice int) (err error) {\n\tvar _p0 *byte\n\tif len(b) > 0 {\n\t\t_p0 = &b[0]\n\t}\n\t_, e1 := callmadvise(uintptr(unsafe.Pointer(_p0)), len(b), advice)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 *byte\n\tif len(b) > 0 {\n\t\t_p0 = &b[0]\n\t}\n\t_, e1 := callmprotect(uintptr(unsafe.Pointer(_p0)), len(b), prot)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 *byte\n\tif len(b) > 0 {\n\t\t_p0 = &b[0]\n\t}\n\t_, e1 := callmlock(uintptr(unsafe.Pointer(_p0)), len(b))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, e1 := callmlockall(flags)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 *byte\n\tif len(b) > 0 {\n\t\t_p0 = &b[0]\n\t}\n\t_, e1 := callmsync(uintptr(unsafe.Pointer(_p0)), len(b), flags)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 *byte\n\tif len(b) > 0 {\n\t\t_p0 = &b[0]\n\t}\n\t_, e1 := callmunlock(uintptr(unsafe.Pointer(_p0)), len(b))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, e1 := callmunlockall()\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe(p *[2]_C_int) (err error) {\n\t_, e1 := callpipe(uintptr(unsafe.Pointer(p)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, e1 := callpoll(uintptr(unsafe.Pointer(fds)), nfds, timeout)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc gettimeofday(tv *Timeval, tzp *Timezone) (err error) {\n\t_, e1 := callgettimeofday(uintptr(unsafe.Pointer(tv)), uintptr(unsafe.Pointer(tzp)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Time(t *Time_t) (tt Time_t, err error) {\n\tr0, e1 := calltime(uintptr(unsafe.Pointer(t)))\n\ttt = Time_t(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Utime(path string, buf *Utimbuf) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callutime(uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsystemcfg(label int) (n uint64) {\n\tr0, _ := callgetsystemcfg(label)\n\tn = uint64(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc umount(target string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(target)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callumount(uintptr(unsafe.Pointer(_p0)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(resource int, rlim *Rlimit) (err error) {\n\t_, e1 := callgetrlimit(resource, uintptr(unsafe.Pointer(rlim)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setrlimit(resource int, rlim *Rlimit) (err error) {\n\t_, e1 := callsetrlimit(resource, uintptr(unsafe.Pointer(rlim)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (off int64, err error) {\n\tr0, e1 := calllseek(fd, offset, whence)\n\toff = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {\n\tr0, e1 := callmmap64(addr, length, prot, flags, fd, offset)\n\txaddr = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gc.go",
    "content": "// go run mksyscall_aix_ppc64.go -aix -tags aix,ppc64 syscall_aix.go syscall_aix_ppc64.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build aix,ppc64\n// +build !gccgo\n\npackage unix\n\nimport (\n\t\"unsafe\"\n)\n\n//go:cgo_import_dynamic libc_utimes utimes \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_utimensat utimensat \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_getcwd getcwd \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_accept accept \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_getdirent getdirent \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_wait4 wait4 \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_ioctl ioctl \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_fcntl fcntl \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_acct acct \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_chdir chdir \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_chroot chroot \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_close close \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_dup dup \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_exit exit \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_faccessat faccessat \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_fchdir fchdir \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_fchmod fchmod \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_fchmodat fchmodat \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_fchownat fchownat \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_fdatasync fdatasync \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_fsync fsync \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_getpgid getpgid \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_getpgrp getpgrp \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_getpid getpid \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_getppid getppid \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_getpriority getpriority \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_getrusage getrusage \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_getsid getsid \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_kill kill \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_syslog syslog \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_mkdir mkdir \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_mkdirat mkdirat \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_mkfifo mkfifo \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_mknod mknod \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_mknodat mknodat \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_nanosleep nanosleep \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_open64 open64 \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_openat openat \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_read read \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_readlink readlink \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_renameat renameat \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_setdomainname setdomainname \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_sethostname sethostname \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_setpgid setpgid \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_setsid setsid \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_settimeofday settimeofday \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_setuid setuid \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_setgid setgid \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_setpriority setpriority \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_statx statx \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_sync sync \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_times times \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_umask umask \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_uname uname \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_unlink unlink \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_unlinkat unlinkat \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_ustat ustat \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_write write \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_dup2 dup2 \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_posix_fadvise64 posix_fadvise64 \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_fchown fchown \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_fstat fstat \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_fstatat fstatat \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_fstatfs fstatfs \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_ftruncate ftruncate \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_getegid getegid \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_geteuid geteuid \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_getgid getgid \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_getuid getuid \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_lchown lchown \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_listen listen \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_lstat lstat \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_pause pause \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_pread64 pread64 \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_pwrite64 pwrite64 \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_select select \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_pselect pselect \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_setregid setregid \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_setreuid setreuid \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_shutdown shutdown \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_splice splice \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_stat stat \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_statfs statfs \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_truncate truncate \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_bind bind \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_connect connect \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_getgroups getgroups \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_setgroups setgroups \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_getsockopt getsockopt \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_setsockopt setsockopt \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_socket socket \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_socketpair socketpair \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_getpeername getpeername \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_getsockname getsockname \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_recvfrom recvfrom \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_sendto sendto \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_nrecvmsg nrecvmsg \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_nsendmsg nsendmsg \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_munmap munmap \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_madvise madvise \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_mprotect mprotect \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_mlock mlock \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_mlockall mlockall \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_msync msync \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_munlock munlock \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_munlockall munlockall \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_pipe pipe \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_poll poll \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_gettimeofday gettimeofday \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_time time \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_utime utime \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_getsystemcfg getsystemcfg \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_umount umount \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_getrlimit getrlimit \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_setrlimit setrlimit \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_lseek lseek \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_mmap64 mmap64 \"libc.a/shr_64.o\"\n\n//go:linkname libc_utimes libc_utimes\n//go:linkname libc_utimensat libc_utimensat\n//go:linkname libc_getcwd libc_getcwd\n//go:linkname libc_accept libc_accept\n//go:linkname libc_getdirent libc_getdirent\n//go:linkname libc_wait4 libc_wait4\n//go:linkname libc_ioctl libc_ioctl\n//go:linkname libc_fcntl libc_fcntl\n//go:linkname libc_acct libc_acct\n//go:linkname libc_chdir libc_chdir\n//go:linkname libc_chroot libc_chroot\n//go:linkname libc_close libc_close\n//go:linkname libc_dup libc_dup\n//go:linkname libc_exit libc_exit\n//go:linkname libc_faccessat libc_faccessat\n//go:linkname libc_fchdir libc_fchdir\n//go:linkname libc_fchmod libc_fchmod\n//go:linkname libc_fchmodat libc_fchmodat\n//go:linkname libc_fchownat libc_fchownat\n//go:linkname libc_fdatasync libc_fdatasync\n//go:linkname libc_fsync libc_fsync\n//go:linkname libc_getpgid libc_getpgid\n//go:linkname libc_getpgrp libc_getpgrp\n//go:linkname libc_getpid libc_getpid\n//go:linkname libc_getppid libc_getppid\n//go:linkname libc_getpriority libc_getpriority\n//go:linkname libc_getrusage libc_getrusage\n//go:linkname libc_getsid libc_getsid\n//go:linkname libc_kill libc_kill\n//go:linkname libc_syslog libc_syslog\n//go:linkname libc_mkdir libc_mkdir\n//go:linkname libc_mkdirat libc_mkdirat\n//go:linkname libc_mkfifo libc_mkfifo\n//go:linkname libc_mknod libc_mknod\n//go:linkname libc_mknodat libc_mknodat\n//go:linkname libc_nanosleep libc_nanosleep\n//go:linkname libc_open64 libc_open64\n//go:linkname libc_openat libc_openat\n//go:linkname libc_read libc_read\n//go:linkname libc_readlink libc_readlink\n//go:linkname libc_renameat libc_renameat\n//go:linkname libc_setdomainname libc_setdomainname\n//go:linkname libc_sethostname libc_sethostname\n//go:linkname libc_setpgid libc_setpgid\n//go:linkname libc_setsid libc_setsid\n//go:linkname libc_settimeofday libc_settimeofday\n//go:linkname libc_setuid libc_setuid\n//go:linkname libc_setgid libc_setgid\n//go:linkname libc_setpriority libc_setpriority\n//go:linkname libc_statx libc_statx\n//go:linkname libc_sync libc_sync\n//go:linkname libc_times libc_times\n//go:linkname libc_umask libc_umask\n//go:linkname libc_uname libc_uname\n//go:linkname libc_unlink libc_unlink\n//go:linkname libc_unlinkat libc_unlinkat\n//go:linkname libc_ustat libc_ustat\n//go:linkname libc_write libc_write\n//go:linkname libc_dup2 libc_dup2\n//go:linkname libc_posix_fadvise64 libc_posix_fadvise64\n//go:linkname libc_fchown libc_fchown\n//go:linkname libc_fstat libc_fstat\n//go:linkname libc_fstatat libc_fstatat\n//go:linkname libc_fstatfs libc_fstatfs\n//go:linkname libc_ftruncate libc_ftruncate\n//go:linkname libc_getegid libc_getegid\n//go:linkname libc_geteuid libc_geteuid\n//go:linkname libc_getgid libc_getgid\n//go:linkname libc_getuid libc_getuid\n//go:linkname libc_lchown libc_lchown\n//go:linkname libc_listen libc_listen\n//go:linkname libc_lstat libc_lstat\n//go:linkname libc_pause libc_pause\n//go:linkname libc_pread64 libc_pread64\n//go:linkname libc_pwrite64 libc_pwrite64\n//go:linkname libc_select libc_select\n//go:linkname libc_pselect libc_pselect\n//go:linkname libc_setregid libc_setregid\n//go:linkname libc_setreuid libc_setreuid\n//go:linkname libc_shutdown libc_shutdown\n//go:linkname libc_splice libc_splice\n//go:linkname libc_stat libc_stat\n//go:linkname libc_statfs libc_statfs\n//go:linkname libc_truncate libc_truncate\n//go:linkname libc_bind libc_bind\n//go:linkname libc_connect libc_connect\n//go:linkname libc_getgroups libc_getgroups\n//go:linkname libc_setgroups libc_setgroups\n//go:linkname libc_getsockopt libc_getsockopt\n//go:linkname libc_setsockopt libc_setsockopt\n//go:linkname libc_socket libc_socket\n//go:linkname libc_socketpair libc_socketpair\n//go:linkname libc_getpeername libc_getpeername\n//go:linkname libc_getsockname libc_getsockname\n//go:linkname libc_recvfrom libc_recvfrom\n//go:linkname libc_sendto libc_sendto\n//go:linkname libc_nrecvmsg libc_nrecvmsg\n//go:linkname libc_nsendmsg libc_nsendmsg\n//go:linkname libc_munmap libc_munmap\n//go:linkname libc_madvise libc_madvise\n//go:linkname libc_mprotect libc_mprotect\n//go:linkname libc_mlock libc_mlock\n//go:linkname libc_mlockall libc_mlockall\n//go:linkname libc_msync libc_msync\n//go:linkname libc_munlock libc_munlock\n//go:linkname libc_munlockall libc_munlockall\n//go:linkname libc_pipe libc_pipe\n//go:linkname libc_poll libc_poll\n//go:linkname libc_gettimeofday libc_gettimeofday\n//go:linkname libc_time libc_time\n//go:linkname libc_utime libc_utime\n//go:linkname libc_getsystemcfg libc_getsystemcfg\n//go:linkname libc_umount libc_umount\n//go:linkname libc_getrlimit libc_getrlimit\n//go:linkname libc_setrlimit libc_setrlimit\n//go:linkname libc_lseek libc_lseek\n//go:linkname libc_mmap64 libc_mmap64\n\ntype syscallFunc uintptr\n\nvar (\n\tlibc_utimes,\n\tlibc_utimensat,\n\tlibc_getcwd,\n\tlibc_accept,\n\tlibc_getdirent,\n\tlibc_wait4,\n\tlibc_ioctl,\n\tlibc_fcntl,\n\tlibc_acct,\n\tlibc_chdir,\n\tlibc_chroot,\n\tlibc_close,\n\tlibc_dup,\n\tlibc_exit,\n\tlibc_faccessat,\n\tlibc_fchdir,\n\tlibc_fchmod,\n\tlibc_fchmodat,\n\tlibc_fchownat,\n\tlibc_fdatasync,\n\tlibc_fsync,\n\tlibc_getpgid,\n\tlibc_getpgrp,\n\tlibc_getpid,\n\tlibc_getppid,\n\tlibc_getpriority,\n\tlibc_getrusage,\n\tlibc_getsid,\n\tlibc_kill,\n\tlibc_syslog,\n\tlibc_mkdir,\n\tlibc_mkdirat,\n\tlibc_mkfifo,\n\tlibc_mknod,\n\tlibc_mknodat,\n\tlibc_nanosleep,\n\tlibc_open64,\n\tlibc_openat,\n\tlibc_read,\n\tlibc_readlink,\n\tlibc_renameat,\n\tlibc_setdomainname,\n\tlibc_sethostname,\n\tlibc_setpgid,\n\tlibc_setsid,\n\tlibc_settimeofday,\n\tlibc_setuid,\n\tlibc_setgid,\n\tlibc_setpriority,\n\tlibc_statx,\n\tlibc_sync,\n\tlibc_times,\n\tlibc_umask,\n\tlibc_uname,\n\tlibc_unlink,\n\tlibc_unlinkat,\n\tlibc_ustat,\n\tlibc_write,\n\tlibc_dup2,\n\tlibc_posix_fadvise64,\n\tlibc_fchown,\n\tlibc_fstat,\n\tlibc_fstatat,\n\tlibc_fstatfs,\n\tlibc_ftruncate,\n\tlibc_getegid,\n\tlibc_geteuid,\n\tlibc_getgid,\n\tlibc_getuid,\n\tlibc_lchown,\n\tlibc_listen,\n\tlibc_lstat,\n\tlibc_pause,\n\tlibc_pread64,\n\tlibc_pwrite64,\n\tlibc_select,\n\tlibc_pselect,\n\tlibc_setregid,\n\tlibc_setreuid,\n\tlibc_shutdown,\n\tlibc_splice,\n\tlibc_stat,\n\tlibc_statfs,\n\tlibc_truncate,\n\tlibc_bind,\n\tlibc_connect,\n\tlibc_getgroups,\n\tlibc_setgroups,\n\tlibc_getsockopt,\n\tlibc_setsockopt,\n\tlibc_socket,\n\tlibc_socketpair,\n\tlibc_getpeername,\n\tlibc_getsockname,\n\tlibc_recvfrom,\n\tlibc_sendto,\n\tlibc_nrecvmsg,\n\tlibc_nsendmsg,\n\tlibc_munmap,\n\tlibc_madvise,\n\tlibc_mprotect,\n\tlibc_mlock,\n\tlibc_mlockall,\n\tlibc_msync,\n\tlibc_munlock,\n\tlibc_munlockall,\n\tlibc_pipe,\n\tlibc_poll,\n\tlibc_gettimeofday,\n\tlibc_time,\n\tlibc_utime,\n\tlibc_getsystemcfg,\n\tlibc_umount,\n\tlibc_getrlimit,\n\tlibc_setrlimit,\n\tlibc_lseek,\n\tlibc_mmap64 syscallFunc\n)\n\n// Implemented in runtime/syscall_aix.go.\nfunc rawSyscall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)\nfunc syscall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callutimes(_p0 uintptr, times uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_utimes)), 2, _p0, times, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callutimensat(dirfd int, _p0 uintptr, times uintptr, flag int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_utimensat)), 4, uintptr(dirfd), _p0, times, uintptr(flag), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetcwd(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_getcwd)), 2, _p0, uintptr(_lenp0), 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callaccept(s int, rsa uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_accept)), 3, uintptr(s), rsa, addrlen, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetdirent(fd int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_getdirent)), 3, uintptr(fd), _p0, uintptr(_lenp0), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callwait4(pid int, status uintptr, options int, rusage uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_wait4)), 4, uintptr(pid), status, uintptr(options), rusage, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callioctl(fd int, req int, arg uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_ioctl)), 3, uintptr(fd), uintptr(req), arg, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfcntl(fd uintptr, cmd int, arg uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fcntl)), 3, fd, uintptr(cmd), arg, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callacct(_p0 uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_acct)), 1, _p0, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callchdir(_p0 uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_chdir)), 1, _p0, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callchroot(_p0 uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_chroot)), 1, _p0, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callclose(fd int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_close)), 1, uintptr(fd), 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc calldup(oldfd int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_dup)), 1, uintptr(oldfd), 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callexit(code int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_exit)), 1, uintptr(code), 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfaccessat(dirfd int, _p0 uintptr, mode uint32, flags int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_faccessat)), 4, uintptr(dirfd), _p0, uintptr(mode), uintptr(flags), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfchdir(fd int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fchdir)), 1, uintptr(fd), 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfchmod(fd int, mode uint32) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fchmod)), 2, uintptr(fd), uintptr(mode), 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfchmodat(dirfd int, _p0 uintptr, mode uint32, flags int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fchmodat)), 4, uintptr(dirfd), _p0, uintptr(mode), uintptr(flags), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfchownat(dirfd int, _p0 uintptr, uid int, gid int, flags int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fchownat)), 5, uintptr(dirfd), _p0, uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfdatasync(fd int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fdatasync)), 1, uintptr(fd), 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfsync(fd int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fsync)), 1, uintptr(fd), 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetpgid(pid int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getpgid)), 1, uintptr(pid), 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetpgrp() (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_getpgrp)), 0, 0, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetpid() (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getpid)), 0, 0, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetppid() (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getppid)), 0, 0, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetpriority(which int, who int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_getpriority)), 2, uintptr(which), uintptr(who), 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetrusage(who int, rusage uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getrusage)), 2, uintptr(who), rusage, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetsid(pid int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getsid)), 1, uintptr(pid), 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callkill(pid int, sig int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_kill)), 2, uintptr(pid), uintptr(sig), 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsyslog(typ int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_syslog)), 3, uintptr(typ), _p0, uintptr(_lenp0), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmkdir(dirfd int, _p0 uintptr, mode uint32) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mkdir)), 3, uintptr(dirfd), _p0, uintptr(mode), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmkdirat(dirfd int, _p0 uintptr, mode uint32) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mkdirat)), 3, uintptr(dirfd), _p0, uintptr(mode), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmkfifo(_p0 uintptr, mode uint32) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mkfifo)), 2, _p0, uintptr(mode), 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmknod(_p0 uintptr, mode uint32, dev int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mknod)), 3, _p0, uintptr(mode), uintptr(dev), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmknodat(dirfd int, _p0 uintptr, mode uint32, dev int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mknodat)), 4, uintptr(dirfd), _p0, uintptr(mode), uintptr(dev), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callnanosleep(time uintptr, leftover uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_nanosleep)), 2, time, leftover, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callopen64(_p0 uintptr, mode int, perm uint32) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_open64)), 3, _p0, uintptr(mode), uintptr(perm), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callopenat(dirfd int, _p0 uintptr, flags int, mode uint32) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_openat)), 4, uintptr(dirfd), _p0, uintptr(flags), uintptr(mode), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callread(fd int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_read)), 3, uintptr(fd), _p0, uintptr(_lenp0), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callreadlink(_p0 uintptr, _p1 uintptr, _lenp1 int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_readlink)), 3, _p0, _p1, uintptr(_lenp1), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callrenameat(olddirfd int, _p0 uintptr, newdirfd int, _p1 uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_renameat)), 4, uintptr(olddirfd), _p0, uintptr(newdirfd), _p1, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetdomainname(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_setdomainname)), 2, _p0, uintptr(_lenp0), 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsethostname(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_sethostname)), 2, _p0, uintptr(_lenp0), 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetpgid(pid int, pgid int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_setpgid)), 2, uintptr(pid), uintptr(pgid), 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetsid() (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_setsid)), 0, 0, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsettimeofday(tv uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_settimeofday)), 1, tv, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetuid(uid int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_setuid)), 1, uintptr(uid), 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetgid(uid int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_setgid)), 1, uintptr(uid), 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetpriority(which int, who int, prio int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_setpriority)), 3, uintptr(which), uintptr(who), uintptr(prio), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callstatx(dirfd int, _p0 uintptr, flags int, mask int, stat uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_statx)), 5, uintptr(dirfd), _p0, uintptr(flags), uintptr(mask), stat, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsync() (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_sync)), 0, 0, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc calltimes(tms uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_times)), 1, tms, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callumask(mask int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_umask)), 1, uintptr(mask), 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc calluname(buf uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_uname)), 1, buf, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callunlink(_p0 uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_unlink)), 1, _p0, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callunlinkat(dirfd int, _p0 uintptr, flags int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_unlinkat)), 3, uintptr(dirfd), _p0, uintptr(flags), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callustat(dev int, ubuf uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_ustat)), 2, uintptr(dev), ubuf, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callwrite(fd int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_write)), 3, uintptr(fd), _p0, uintptr(_lenp0), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc calldup2(oldfd int, newfd int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_dup2)), 2, uintptr(oldfd), uintptr(newfd), 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callposix_fadvise64(fd int, offset int64, length int64, advice int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_posix_fadvise64)), 4, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfchown(fd int, uid int, gid int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fchown)), 3, uintptr(fd), uintptr(uid), uintptr(gid), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfstat(fd int, stat uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fstat)), 2, uintptr(fd), stat, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfstatat(dirfd int, _p0 uintptr, stat uintptr, flags int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fstatat)), 4, uintptr(dirfd), _p0, stat, uintptr(flags), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfstatfs(fd int, buf uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fstatfs)), 2, uintptr(fd), buf, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callftruncate(fd int, length int64) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_ftruncate)), 2, uintptr(fd), uintptr(length), 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetegid() (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getegid)), 0, 0, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgeteuid() (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_geteuid)), 0, 0, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetgid() (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getgid)), 0, 0, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetuid() (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getuid)), 0, 0, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc calllchown(_p0 uintptr, uid int, gid int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_lchown)), 3, _p0, uintptr(uid), uintptr(gid), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc calllisten(s int, n int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_listen)), 2, uintptr(s), uintptr(n), 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc calllstat(_p0 uintptr, stat uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_lstat)), 2, _p0, stat, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callpause() (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_pause)), 0, 0, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callpread64(fd int, _p0 uintptr, _lenp0 int, offset int64) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_pread64)), 4, uintptr(fd), _p0, uintptr(_lenp0), uintptr(offset), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callpwrite64(fd int, _p0 uintptr, _lenp0 int, offset int64) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_pwrite64)), 4, uintptr(fd), _p0, uintptr(_lenp0), uintptr(offset), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callselect(nfd int, r uintptr, w uintptr, e uintptr, timeout uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_select)), 5, uintptr(nfd), r, w, e, timeout, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callpselect(nfd int, r uintptr, w uintptr, e uintptr, timeout uintptr, sigmask uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_pselect)), 6, uintptr(nfd), r, w, e, timeout, sigmask)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetregid(rgid int, egid int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_setregid)), 2, uintptr(rgid), uintptr(egid), 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetreuid(ruid int, euid int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_setreuid)), 2, uintptr(ruid), uintptr(euid), 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callshutdown(fd int, how int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_shutdown)), 2, uintptr(fd), uintptr(how), 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsplice(rfd int, roff uintptr, wfd int, woff uintptr, len int, flags int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_splice)), 6, uintptr(rfd), roff, uintptr(wfd), woff, uintptr(len), uintptr(flags))\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callstat(_p0 uintptr, statptr uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_stat)), 2, _p0, statptr, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callstatfs(_p0 uintptr, buf uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_statfs)), 2, _p0, buf, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc calltruncate(_p0 uintptr, length int64) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_truncate)), 2, _p0, uintptr(length), 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callbind(s int, addr uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_bind)), 3, uintptr(s), addr, addrlen, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callconnect(s int, addr uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_connect)), 3, uintptr(s), addr, addrlen, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetgroups(n int, list uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getgroups)), 2, uintptr(n), list, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetgroups(n int, list uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_setgroups)), 2, uintptr(n), list, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetsockopt(s int, level int, name int, val uintptr, vallen uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_getsockopt)), 5, uintptr(s), uintptr(level), uintptr(name), val, vallen, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetsockopt(s int, level int, name int, val uintptr, vallen uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_setsockopt)), 5, uintptr(s), uintptr(level), uintptr(name), val, vallen, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsocket(domain int, typ int, proto int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_socket)), 3, uintptr(domain), uintptr(typ), uintptr(proto), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsocketpair(domain int, typ int, proto int, fd uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_socketpair)), 4, uintptr(domain), uintptr(typ), uintptr(proto), fd, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetpeername(fd int, rsa uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getpeername)), 3, uintptr(fd), rsa, addrlen, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetsockname(fd int, rsa uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getsockname)), 3, uintptr(fd), rsa, addrlen, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callrecvfrom(fd int, _p0 uintptr, _lenp0 int, flags int, from uintptr, fromlen uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_recvfrom)), 6, uintptr(fd), _p0, uintptr(_lenp0), uintptr(flags), from, fromlen)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsendto(s int, _p0 uintptr, _lenp0 int, flags int, to uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_sendto)), 6, uintptr(s), _p0, uintptr(_lenp0), uintptr(flags), to, addrlen)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callnrecvmsg(s int, msg uintptr, flags int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_nrecvmsg)), 3, uintptr(s), msg, uintptr(flags), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callnsendmsg(s int, msg uintptr, flags int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_nsendmsg)), 3, uintptr(s), msg, uintptr(flags), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmunmap(addr uintptr, length uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_munmap)), 2, addr, length, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmadvise(_p0 uintptr, _lenp0 int, advice int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_madvise)), 3, _p0, uintptr(_lenp0), uintptr(advice), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmprotect(_p0 uintptr, _lenp0 int, prot int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mprotect)), 3, _p0, uintptr(_lenp0), uintptr(prot), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmlock(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mlock)), 2, _p0, uintptr(_lenp0), 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmlockall(flags int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mlockall)), 1, uintptr(flags), 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmsync(_p0 uintptr, _lenp0 int, flags int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_msync)), 3, _p0, uintptr(_lenp0), uintptr(flags), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmunlock(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_munlock)), 2, _p0, uintptr(_lenp0), 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmunlockall() (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_munlockall)), 0, 0, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callpipe(p uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_pipe)), 1, p, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callpoll(fds uintptr, nfds int, timeout int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_poll)), 3, fds, uintptr(nfds), uintptr(timeout), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgettimeofday(tv uintptr, tzp uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_gettimeofday)), 2, tv, tzp, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc calltime(t uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_time)), 1, t, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callutime(_p0 uintptr, buf uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_utime)), 2, _p0, buf, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetsystemcfg(label int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_getsystemcfg)), 1, uintptr(label), 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callumount(_p0 uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_umount)), 1, _p0, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetrlimit(resource int, rlim uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getrlimit)), 2, uintptr(resource), rlim, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetrlimit(resource int, rlim uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_setrlimit)), 2, uintptr(resource), rlim, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc calllseek(fd int, offset int64, whence int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_lseek)), 3, uintptr(fd), uintptr(offset), uintptr(whence), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmmap64(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mmap64)), 6, addr, length, uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset))\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gccgo.go",
    "content": "// go run mksyscall_aix_ppc64.go -aix -tags aix,ppc64 syscall_aix.go syscall_aix_ppc64.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build aix,ppc64\n// +build gccgo\n\npackage unix\n\n/*\n#include <stdint.h>\nint utimes(uintptr_t, uintptr_t);\nint utimensat(int, uintptr_t, uintptr_t, int);\nint getcwd(uintptr_t, size_t);\nint accept(int, uintptr_t, uintptr_t);\nint getdirent(int, uintptr_t, size_t);\nint wait4(int, uintptr_t, int, uintptr_t);\nint ioctl(int, int, uintptr_t);\nint fcntl(uintptr_t, int, uintptr_t);\nint acct(uintptr_t);\nint chdir(uintptr_t);\nint chroot(uintptr_t);\nint close(int);\nint dup(int);\nvoid exit(int);\nint faccessat(int, uintptr_t, unsigned int, int);\nint fchdir(int);\nint fchmod(int, unsigned int);\nint fchmodat(int, uintptr_t, unsigned int, int);\nint fchownat(int, uintptr_t, int, int, int);\nint fdatasync(int);\nint fsync(int);\nint getpgid(int);\nint getpgrp();\nint getpid();\nint getppid();\nint getpriority(int, int);\nint getrusage(int, uintptr_t);\nint getsid(int);\nint kill(int, int);\nint syslog(int, uintptr_t, size_t);\nint mkdir(int, uintptr_t, unsigned int);\nint mkdirat(int, uintptr_t, unsigned int);\nint mkfifo(uintptr_t, unsigned int);\nint mknod(uintptr_t, unsigned int, int);\nint mknodat(int, uintptr_t, unsigned int, int);\nint nanosleep(uintptr_t, uintptr_t);\nint open64(uintptr_t, int, unsigned int);\nint openat(int, uintptr_t, int, unsigned int);\nint read(int, uintptr_t, size_t);\nint readlink(uintptr_t, uintptr_t, size_t);\nint renameat(int, uintptr_t, int, uintptr_t);\nint setdomainname(uintptr_t, size_t);\nint sethostname(uintptr_t, size_t);\nint setpgid(int, int);\nint setsid();\nint settimeofday(uintptr_t);\nint setuid(int);\nint setgid(int);\nint setpriority(int, int, int);\nint statx(int, uintptr_t, int, int, uintptr_t);\nint sync();\nuintptr_t times(uintptr_t);\nint umask(int);\nint uname(uintptr_t);\nint unlink(uintptr_t);\nint unlinkat(int, uintptr_t, int);\nint ustat(int, uintptr_t);\nint write(int, uintptr_t, size_t);\nint dup2(int, int);\nint posix_fadvise64(int, long long, long long, int);\nint fchown(int, int, int);\nint fstat(int, uintptr_t);\nint fstatat(int, uintptr_t, uintptr_t, int);\nint fstatfs(int, uintptr_t);\nint ftruncate(int, long long);\nint getegid();\nint geteuid();\nint getgid();\nint getuid();\nint lchown(uintptr_t, int, int);\nint listen(int, int);\nint lstat(uintptr_t, uintptr_t);\nint pause();\nint pread64(int, uintptr_t, size_t, long long);\nint pwrite64(int, uintptr_t, size_t, long long);\n#define c_select select\nint select(int, uintptr_t, uintptr_t, uintptr_t, uintptr_t);\nint pselect(int, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t);\nint setregid(int, int);\nint setreuid(int, int);\nint shutdown(int, int);\nlong long splice(int, uintptr_t, int, uintptr_t, int, int);\nint stat(uintptr_t, uintptr_t);\nint statfs(uintptr_t, uintptr_t);\nint truncate(uintptr_t, long long);\nint bind(int, uintptr_t, uintptr_t);\nint connect(int, uintptr_t, uintptr_t);\nint getgroups(int, uintptr_t);\nint setgroups(int, uintptr_t);\nint getsockopt(int, int, int, uintptr_t, uintptr_t);\nint setsockopt(int, int, int, uintptr_t, uintptr_t);\nint socket(int, int, int);\nint socketpair(int, int, int, uintptr_t);\nint getpeername(int, uintptr_t, uintptr_t);\nint getsockname(int, uintptr_t, uintptr_t);\nint recvfrom(int, uintptr_t, size_t, int, uintptr_t, uintptr_t);\nint sendto(int, uintptr_t, size_t, int, uintptr_t, uintptr_t);\nint nrecvmsg(int, uintptr_t, int);\nint nsendmsg(int, uintptr_t, int);\nint munmap(uintptr_t, uintptr_t);\nint madvise(uintptr_t, size_t, int);\nint mprotect(uintptr_t, size_t, int);\nint mlock(uintptr_t, size_t);\nint mlockall(int);\nint msync(uintptr_t, size_t, int);\nint munlock(uintptr_t, size_t);\nint munlockall();\nint pipe(uintptr_t);\nint poll(uintptr_t, int, int);\nint gettimeofday(uintptr_t, uintptr_t);\nint time(uintptr_t);\nint utime(uintptr_t, uintptr_t);\nunsigned long long getsystemcfg(int);\nint umount(uintptr_t);\nint getrlimit(int, uintptr_t);\nint setrlimit(int, uintptr_t);\nlong long lseek(int, long long, int);\nuintptr_t mmap64(uintptr_t, uintptr_t, int, int, int, long long);\n\n*/\nimport \"C\"\nimport (\n\t\"syscall\"\n)\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callutimes(_p0 uintptr, times uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.utimes(C.uintptr_t(_p0), C.uintptr_t(times)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callutimensat(dirfd int, _p0 uintptr, times uintptr, flag int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.utimensat(C.int(dirfd), C.uintptr_t(_p0), C.uintptr_t(times), C.int(flag)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetcwd(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.getcwd(C.uintptr_t(_p0), C.size_t(_lenp0)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callaccept(s int, rsa uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.accept(C.int(s), C.uintptr_t(rsa), C.uintptr_t(addrlen)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetdirent(fd int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.getdirent(C.int(fd), C.uintptr_t(_p0), C.size_t(_lenp0)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callwait4(pid int, status uintptr, options int, rusage uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.wait4(C.int(pid), C.uintptr_t(status), C.int(options), C.uintptr_t(rusage)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callioctl(fd int, req int, arg uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.ioctl(C.int(fd), C.int(req), C.uintptr_t(arg)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfcntl(fd uintptr, cmd int, arg uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.fcntl(C.uintptr_t(fd), C.int(cmd), C.uintptr_t(arg)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callacct(_p0 uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.acct(C.uintptr_t(_p0)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callchdir(_p0 uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.chdir(C.uintptr_t(_p0)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callchroot(_p0 uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.chroot(C.uintptr_t(_p0)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callclose(fd int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.close(C.int(fd)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc calldup(oldfd int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.dup(C.int(oldfd)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callexit(code int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.exit(C.int(code)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfaccessat(dirfd int, _p0 uintptr, mode uint32, flags int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.faccessat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode), C.int(flags)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfchdir(fd int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.fchdir(C.int(fd)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfchmod(fd int, mode uint32) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.fchmod(C.int(fd), C.uint(mode)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfchmodat(dirfd int, _p0 uintptr, mode uint32, flags int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.fchmodat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode), C.int(flags)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfchownat(dirfd int, _p0 uintptr, uid int, gid int, flags int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.fchownat(C.int(dirfd), C.uintptr_t(_p0), C.int(uid), C.int(gid), C.int(flags)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfdatasync(fd int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.fdatasync(C.int(fd)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfsync(fd int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.fsync(C.int(fd)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetpgid(pid int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.getpgid(C.int(pid)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetpgrp() (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.getpgrp())\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetpid() (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.getpid())\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetppid() (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.getppid())\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetpriority(which int, who int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.getpriority(C.int(which), C.int(who)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetrusage(who int, rusage uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.getrusage(C.int(who), C.uintptr_t(rusage)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetsid(pid int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.getsid(C.int(pid)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callkill(pid int, sig int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.kill(C.int(pid), C.int(sig)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsyslog(typ int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.syslog(C.int(typ), C.uintptr_t(_p0), C.size_t(_lenp0)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmkdir(dirfd int, _p0 uintptr, mode uint32) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.mkdir(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmkdirat(dirfd int, _p0 uintptr, mode uint32) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.mkdirat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmkfifo(_p0 uintptr, mode uint32) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.mkfifo(C.uintptr_t(_p0), C.uint(mode)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmknod(_p0 uintptr, mode uint32, dev int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.mknod(C.uintptr_t(_p0), C.uint(mode), C.int(dev)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmknodat(dirfd int, _p0 uintptr, mode uint32, dev int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.mknodat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode), C.int(dev)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callnanosleep(time uintptr, leftover uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.nanosleep(C.uintptr_t(time), C.uintptr_t(leftover)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callopen64(_p0 uintptr, mode int, perm uint32) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.open64(C.uintptr_t(_p0), C.int(mode), C.uint(perm)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callopenat(dirfd int, _p0 uintptr, flags int, mode uint32) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.openat(C.int(dirfd), C.uintptr_t(_p0), C.int(flags), C.uint(mode)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callread(fd int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.read(C.int(fd), C.uintptr_t(_p0), C.size_t(_lenp0)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callreadlink(_p0 uintptr, _p1 uintptr, _lenp1 int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.readlink(C.uintptr_t(_p0), C.uintptr_t(_p1), C.size_t(_lenp1)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callrenameat(olddirfd int, _p0 uintptr, newdirfd int, _p1 uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.renameat(C.int(olddirfd), C.uintptr_t(_p0), C.int(newdirfd), C.uintptr_t(_p1)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetdomainname(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.setdomainname(C.uintptr_t(_p0), C.size_t(_lenp0)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsethostname(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.sethostname(C.uintptr_t(_p0), C.size_t(_lenp0)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetpgid(pid int, pgid int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.setpgid(C.int(pid), C.int(pgid)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetsid() (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.setsid())\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsettimeofday(tv uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.settimeofday(C.uintptr_t(tv)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetuid(uid int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.setuid(C.int(uid)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetgid(uid int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.setgid(C.int(uid)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetpriority(which int, who int, prio int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.setpriority(C.int(which), C.int(who), C.int(prio)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callstatx(dirfd int, _p0 uintptr, flags int, mask int, stat uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.statx(C.int(dirfd), C.uintptr_t(_p0), C.int(flags), C.int(mask), C.uintptr_t(stat)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsync() (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.sync())\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc calltimes(tms uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.times(C.uintptr_t(tms)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callumask(mask int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.umask(C.int(mask)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc calluname(buf uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.uname(C.uintptr_t(buf)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callunlink(_p0 uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.unlink(C.uintptr_t(_p0)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callunlinkat(dirfd int, _p0 uintptr, flags int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.unlinkat(C.int(dirfd), C.uintptr_t(_p0), C.int(flags)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callustat(dev int, ubuf uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.ustat(C.int(dev), C.uintptr_t(ubuf)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callwrite(fd int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.write(C.int(fd), C.uintptr_t(_p0), C.size_t(_lenp0)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc calldup2(oldfd int, newfd int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.dup2(C.int(oldfd), C.int(newfd)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callposix_fadvise64(fd int, offset int64, length int64, advice int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.posix_fadvise64(C.int(fd), C.longlong(offset), C.longlong(length), C.int(advice)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfchown(fd int, uid int, gid int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.fchown(C.int(fd), C.int(uid), C.int(gid)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfstat(fd int, stat uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.fstat(C.int(fd), C.uintptr_t(stat)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfstatat(dirfd int, _p0 uintptr, stat uintptr, flags int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.fstatat(C.int(dirfd), C.uintptr_t(_p0), C.uintptr_t(stat), C.int(flags)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfstatfs(fd int, buf uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.fstatfs(C.int(fd), C.uintptr_t(buf)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callftruncate(fd int, length int64) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.ftruncate(C.int(fd), C.longlong(length)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetegid() (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.getegid())\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgeteuid() (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.geteuid())\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetgid() (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.getgid())\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetuid() (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.getuid())\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc calllchown(_p0 uintptr, uid int, gid int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.lchown(C.uintptr_t(_p0), C.int(uid), C.int(gid)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc calllisten(s int, n int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.listen(C.int(s), C.int(n)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc calllstat(_p0 uintptr, stat uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.lstat(C.uintptr_t(_p0), C.uintptr_t(stat)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callpause() (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.pause())\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callpread64(fd int, _p0 uintptr, _lenp0 int, offset int64) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.pread64(C.int(fd), C.uintptr_t(_p0), C.size_t(_lenp0), C.longlong(offset)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callpwrite64(fd int, _p0 uintptr, _lenp0 int, offset int64) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.pwrite64(C.int(fd), C.uintptr_t(_p0), C.size_t(_lenp0), C.longlong(offset)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callselect(nfd int, r uintptr, w uintptr, e uintptr, timeout uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.c_select(C.int(nfd), C.uintptr_t(r), C.uintptr_t(w), C.uintptr_t(e), C.uintptr_t(timeout)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callpselect(nfd int, r uintptr, w uintptr, e uintptr, timeout uintptr, sigmask uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = 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)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetregid(rgid int, egid int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.setregid(C.int(rgid), C.int(egid)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetreuid(ruid int, euid int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.setreuid(C.int(ruid), C.int(euid)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callshutdown(fd int, how int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.shutdown(C.int(fd), C.int(how)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsplice(rfd int, roff uintptr, wfd int, woff uintptr, len int, flags int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.splice(C.int(rfd), C.uintptr_t(roff), C.int(wfd), C.uintptr_t(woff), C.int(len), C.int(flags)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callstat(_p0 uintptr, statptr uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.stat(C.uintptr_t(_p0), C.uintptr_t(statptr)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callstatfs(_p0 uintptr, buf uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.statfs(C.uintptr_t(_p0), C.uintptr_t(buf)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc calltruncate(_p0 uintptr, length int64) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.truncate(C.uintptr_t(_p0), C.longlong(length)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callbind(s int, addr uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.bind(C.int(s), C.uintptr_t(addr), C.uintptr_t(addrlen)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callconnect(s int, addr uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.connect(C.int(s), C.uintptr_t(addr), C.uintptr_t(addrlen)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetgroups(n int, list uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.getgroups(C.int(n), C.uintptr_t(list)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetgroups(n int, list uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.setgroups(C.int(n), C.uintptr_t(list)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetsockopt(s int, level int, name int, val uintptr, vallen uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.getsockopt(C.int(s), C.int(level), C.int(name), C.uintptr_t(val), C.uintptr_t(vallen)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetsockopt(s int, level int, name int, val uintptr, vallen uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.setsockopt(C.int(s), C.int(level), C.int(name), C.uintptr_t(val), C.uintptr_t(vallen)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsocket(domain int, typ int, proto int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.socket(C.int(domain), C.int(typ), C.int(proto)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsocketpair(domain int, typ int, proto int, fd uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.socketpair(C.int(domain), C.int(typ), C.int(proto), C.uintptr_t(fd)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetpeername(fd int, rsa uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.getpeername(C.int(fd), C.uintptr_t(rsa), C.uintptr_t(addrlen)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetsockname(fd int, rsa uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.getsockname(C.int(fd), C.uintptr_t(rsa), C.uintptr_t(addrlen)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callrecvfrom(fd int, _p0 uintptr, _lenp0 int, flags int, from uintptr, fromlen uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = 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)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsendto(s int, _p0 uintptr, _lenp0 int, flags int, to uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = 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)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callnrecvmsg(s int, msg uintptr, flags int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.nrecvmsg(C.int(s), C.uintptr_t(msg), C.int(flags)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callnsendmsg(s int, msg uintptr, flags int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.nsendmsg(C.int(s), C.uintptr_t(msg), C.int(flags)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmunmap(addr uintptr, length uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.munmap(C.uintptr_t(addr), C.uintptr_t(length)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmadvise(_p0 uintptr, _lenp0 int, advice int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.madvise(C.uintptr_t(_p0), C.size_t(_lenp0), C.int(advice)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmprotect(_p0 uintptr, _lenp0 int, prot int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.mprotect(C.uintptr_t(_p0), C.size_t(_lenp0), C.int(prot)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmlock(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.mlock(C.uintptr_t(_p0), C.size_t(_lenp0)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmlockall(flags int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.mlockall(C.int(flags)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmsync(_p0 uintptr, _lenp0 int, flags int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.msync(C.uintptr_t(_p0), C.size_t(_lenp0), C.int(flags)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmunlock(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.munlock(C.uintptr_t(_p0), C.size_t(_lenp0)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmunlockall() (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.munlockall())\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callpipe(p uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.pipe(C.uintptr_t(p)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callpoll(fds uintptr, nfds int, timeout int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.poll(C.uintptr_t(fds), C.int(nfds), C.int(timeout)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgettimeofday(tv uintptr, tzp uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.gettimeofday(C.uintptr_t(tv), C.uintptr_t(tzp)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc calltime(t uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.time(C.uintptr_t(t)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callutime(_p0 uintptr, buf uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.utime(C.uintptr_t(_p0), C.uintptr_t(buf)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetsystemcfg(label int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.getsystemcfg(C.int(label)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callumount(_p0 uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.umount(C.uintptr_t(_p0)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetrlimit(resource int, rlim uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.getrlimit(C.int(resource), C.uintptr_t(rlim)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetrlimit(resource int, rlim uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.setrlimit(C.int(resource), C.uintptr_t(rlim)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc calllseek(fd int, offset int64, whence int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.lseek(C.int(fd), C.longlong(offset), C.int(whence)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmmap64(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.mmap64(C.uintptr_t(addr), C.uintptr_t(length), C.int(prot), C.int(flags), C.int(fd), C.longlong(offset)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_darwin_386.1_11.go",
    "content": "// go run mksyscall.go -l32 -tags darwin,386,!go1.12 syscall_bsd.go syscall_darwin.go syscall_darwin_386.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build darwin,386,!go1.12\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(mib) > 0 {\n\t\t_p0 = unsafe.Pointer(&mib[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, timeval *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimes(fd int, timeval *[2]Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, behav int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETATTRLIST, uintptr(unsafe.Pointer(path)), uintptr(list), uintptr(buf), uintptr(size), uintptr(options), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe() (r int, w int, err error) {\n\tr0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0)\n\tr = int(r0)\n\tw = int(r1)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getxattr(path string, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fgetxattr(fd int, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setxattr(path string, attr string, data *byte, size int, position uint32, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fsetxattr(fd int, attr string, data *byte, size int, position uint32, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc removexattr(path string, attr string, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fremovexattr(fd int, attr string, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(options))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc listxattr(path string, dest *byte, size int, options int) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc flistxattr(fd int, dest *byte, size int, options int) (sz int, err error) {\n\tr0, _, e1 := Syscall6(SYS_FLISTXATTR, uintptr(fd), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETATTRLIST, uintptr(unsafe.Pointer(path)), uintptr(list), uintptr(buf), uintptr(size), uintptr(options), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kill(pid int, signum int, posix int) (err error) {\n\t_, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), uintptr(posix))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) {\n\t_, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(offset), uintptr(offset>>32), uintptr(unsafe.Pointer(len)), uintptr(hdtr), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chflags(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(from int, to int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exchangedata(path1 string, path2 string, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path1)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(path2)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXCHANGEDATA, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tSyscall(SYS_EXIT, uintptr(code), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchflags(fd int, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), uintptr(length>>32))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdtablesize() (size int) {\n\tr0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0)\n\tsize = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgrp int) {\n\tr0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)\n\tpgrp = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Issetugid() (tainted bool) {\n\tr0, _, _ := RawSyscall(SYS_ISSETUGID, 0, 0, 0)\n\ttainted = bool(r0 != 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kqueue() (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknod(path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(fromfd int, from string, tofd int, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Revoke(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(whence), 0, 0)\n\tnewoffset = int64(int64(r1)<<32 | int64(r0))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) {\n\t_, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETEGID, uintptr(egid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setlogin(name string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setprivexec(flag int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETPRIVEXEC, uintptr(flag), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), uintptr(length>>32))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(newmask int) (oldmask int) {\n\tr0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Undelete(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos), uintptr(pos>>32), 0, 0)\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc readlen(fd int, buf *byte, nbuf int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc writelen(fd int, buf *byte, nbuf int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc gettimeofday(tp *Timeval) (sec int32, usec int32, err error) {\n\tr0, r1, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tsec = int32(r0)\n\tusec = int32(r1)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, stat *Statfs_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATFS64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_GETDIRENTRIES64, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_GETFSSTAT64, uintptr(buf), uintptr(size), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, stat *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go",
    "content": "// go run mksyscall.go -l32 -tags darwin,386,go1.12 syscall_bsd.go syscall_darwin.go syscall_darwin_386.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build darwin,386,go1.12\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(funcPC(libc_getgroups_trampoline), uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_getgroups_trampoline()\n\n//go:linkname libc_getgroups libc_getgroups\n//go:cgo_import_dynamic libc_getgroups getgroups \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := syscall_rawSyscall(funcPC(libc_setgroups_trampoline), uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_setgroups_trampoline()\n\n//go:linkname libc_setgroups libc_setgroups\n//go:cgo_import_dynamic libc_setgroups setgroups \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := syscall_syscall6(funcPC(libc_wait4_trampoline), uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_wait4_trampoline()\n\n//go:linkname libc_wait4 libc_wait4\n//go:cgo_import_dynamic libc_wait4 wait4 \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := syscall_syscall(funcPC(libc_accept_trampoline), uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_accept_trampoline()\n\n//go:linkname libc_accept libc_accept\n//go:cgo_import_dynamic libc_accept accept \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_bind_trampoline), uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_bind_trampoline()\n\n//go:linkname libc_bind libc_bind\n//go:cgo_import_dynamic libc_bind bind \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_connect_trampoline), uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_connect_trampoline()\n\n//go:linkname libc_connect libc_connect\n//go:cgo_import_dynamic libc_connect connect \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(funcPC(libc_socket_trampoline), uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_socket_trampoline()\n\n//go:linkname libc_socket libc_socket\n//go:cgo_import_dynamic libc_socket socket \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := syscall_syscall6(funcPC(libc_getsockopt_trampoline), uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_getsockopt_trampoline()\n\n//go:linkname libc_getsockopt libc_getsockopt\n//go:cgo_import_dynamic libc_getsockopt getsockopt \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := syscall_syscall6(funcPC(libc_setsockopt_trampoline), uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_setsockopt_trampoline()\n\n//go:linkname libc_setsockopt libc_setsockopt\n//go:cgo_import_dynamic libc_setsockopt setsockopt \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := syscall_rawSyscall(funcPC(libc_getpeername_trampoline), uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_getpeername_trampoline()\n\n//go:linkname libc_getpeername libc_getpeername\n//go:cgo_import_dynamic libc_getpeername getpeername \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := syscall_rawSyscall(funcPC(libc_getsockname_trampoline), uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_getsockname_trampoline()\n\n//go:linkname libc_getsockname libc_getsockname\n//go:cgo_import_dynamic libc_getsockname getsockname \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_shutdown_trampoline), uintptr(s), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_shutdown_trampoline()\n\n//go:linkname libc_shutdown libc_shutdown\n//go:cgo_import_dynamic libc_shutdown shutdown \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := syscall_rawSyscall6(funcPC(libc_socketpair_trampoline), uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_socketpair_trampoline()\n\n//go:linkname libc_socketpair libc_socketpair\n//go:cgo_import_dynamic libc_socketpair socketpair \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(funcPC(libc_recvfrom_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_recvfrom_trampoline()\n\n//go:linkname libc_recvfrom libc_recvfrom\n//go:cgo_import_dynamic libc_recvfrom recvfrom \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall6(funcPC(libc_sendto_trampoline), uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_sendto_trampoline()\n\n//go:linkname libc_sendto libc_sendto\n//go:cgo_import_dynamic libc_sendto sendto \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(funcPC(libc_recvmsg_trampoline), uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_recvmsg_trampoline()\n\n//go:linkname libc_recvmsg libc_recvmsg\n//go:cgo_import_dynamic libc_recvmsg recvmsg \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(funcPC(libc_sendmsg_trampoline), uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_sendmsg_trampoline()\n\n//go:linkname libc_sendmsg libc_sendmsg\n//go:cgo_import_dynamic libc_sendmsg sendmsg \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := syscall_syscall6(funcPC(libc_kevent_trampoline), uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_kevent_trampoline()\n\n//go:linkname libc_kevent libc_kevent\n//go:cgo_import_dynamic libc_kevent kevent \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(mib) > 0 {\n\t\t_p0 = unsafe.Pointer(&mib[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall6(funcPC(libc___sysctl_trampoline), uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc___sysctl_trampoline()\n\n//go:linkname libc___sysctl libc___sysctl\n//go:cgo_import_dynamic libc___sysctl __sysctl \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, timeval *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_utimes_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_utimes_trampoline()\n\n//go:linkname libc_utimes libc_utimes\n//go:cgo_import_dynamic libc_utimes utimes \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimes(fd int, timeval *[2]Timeval) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_futimes_trampoline), uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_futimes_trampoline()\n\n//go:linkname libc_futimes libc_futimes\n//go:cgo_import_dynamic libc_futimes futimes \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (val int, err error) {\n\tr0, _, e1 := syscall_syscall(funcPC(libc_fcntl_trampoline), uintptr(fd), uintptr(cmd), uintptr(arg))\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_fcntl_trampoline()\n\n//go:linkname libc_fcntl libc_fcntl\n//go:cgo_import_dynamic libc_fcntl fcntl \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(funcPC(libc_poll_trampoline), uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_poll_trampoline()\n\n//go:linkname libc_poll libc_poll\n//go:cgo_import_dynamic libc_poll poll \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, behav int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_madvise_trampoline), uintptr(_p0), uintptr(len(b)), uintptr(behav))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_madvise_trampoline()\n\n//go:linkname libc_madvise libc_madvise\n//go:cgo_import_dynamic libc_madvise madvise \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_mlock_trampoline), uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_mlock_trampoline()\n\n//go:linkname libc_mlock libc_mlock\n//go:cgo_import_dynamic libc_mlock mlock \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_mlockall_trampoline), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_mlockall_trampoline()\n\n//go:linkname libc_mlockall libc_mlockall\n//go:cgo_import_dynamic libc_mlockall mlockall \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_mprotect_trampoline), uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_mprotect_trampoline()\n\n//go:linkname libc_mprotect libc_mprotect\n//go:cgo_import_dynamic libc_mprotect mprotect \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_msync_trampoline), uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_msync_trampoline()\n\n//go:linkname libc_msync libc_msync\n//go:cgo_import_dynamic libc_msync msync \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_munlock_trampoline), uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_munlock_trampoline()\n\n//go:linkname libc_munlock libc_munlock\n//go:cgo_import_dynamic libc_munlock munlock \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_munlockall_trampoline), 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_munlockall_trampoline()\n\n//go:linkname libc_munlockall libc_munlockall\n//go:cgo_import_dynamic libc_munlockall munlockall \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {\n\t_, _, e1 := syscall_syscall6(funcPC(libc_ptrace_trampoline), uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_ptrace_trampoline()\n\n//go:linkname libc_ptrace libc_ptrace\n//go:cgo_import_dynamic libc_ptrace ptrace \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) {\n\t_, _, e1 := syscall_syscall6(funcPC(libc_getattrlist_trampoline), uintptr(unsafe.Pointer(path)), uintptr(list), uintptr(buf), uintptr(size), uintptr(options), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_getattrlist_trampoline()\n\n//go:linkname libc_getattrlist libc_getattrlist\n//go:cgo_import_dynamic libc_getattrlist getattrlist \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe() (r int, w int, err error) {\n\tr0, r1, e1 := syscall_rawSyscall(funcPC(libc_pipe_trampoline), 0, 0, 0)\n\tr = int(r0)\n\tw = int(r1)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_pipe_trampoline()\n\n//go:linkname libc_pipe libc_pipe\n//go:cgo_import_dynamic libc_pipe pipe \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getxattr(path string, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall6(funcPC(libc_getxattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_getxattr_trampoline()\n\n//go:linkname libc_getxattr libc_getxattr\n//go:cgo_import_dynamic libc_getxattr getxattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fgetxattr(fd int, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall6(funcPC(libc_fgetxattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_fgetxattr_trampoline()\n\n//go:linkname libc_fgetxattr libc_fgetxattr\n//go:cgo_import_dynamic libc_fgetxattr fgetxattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setxattr(path string, attr string, data *byte, size int, position uint32, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(funcPC(libc_setxattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_setxattr_trampoline()\n\n//go:linkname libc_setxattr libc_setxattr\n//go:cgo_import_dynamic libc_setxattr setxattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fsetxattr(fd int, attr string, data *byte, size int, position uint32, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(funcPC(libc_fsetxattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_fsetxattr_trampoline()\n\n//go:linkname libc_fsetxattr libc_fsetxattr\n//go:cgo_import_dynamic libc_fsetxattr fsetxattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc removexattr(path string, attr string, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_removexattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_removexattr_trampoline()\n\n//go:linkname libc_removexattr libc_removexattr\n//go:cgo_import_dynamic libc_removexattr removexattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fremovexattr(fd int, attr string, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_fremovexattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(options))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_fremovexattr_trampoline()\n\n//go:linkname libc_fremovexattr libc_fremovexattr\n//go:cgo_import_dynamic libc_fremovexattr fremovexattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc listxattr(path string, dest *byte, size int, options int) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall6(funcPC(libc_listxattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_listxattr_trampoline()\n\n//go:linkname libc_listxattr libc_listxattr\n//go:cgo_import_dynamic libc_listxattr listxattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc flistxattr(fd int, dest *byte, size int, options int) (sz int, err error) {\n\tr0, _, e1 := syscall_syscall6(funcPC(libc_flistxattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_flistxattr_trampoline()\n\n//go:linkname libc_flistxattr libc_flistxattr\n//go:cgo_import_dynamic libc_flistxattr flistxattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) {\n\t_, _, e1 := syscall_syscall6(funcPC(libc_setattrlist_trampoline), uintptr(unsafe.Pointer(path)), uintptr(list), uintptr(buf), uintptr(size), uintptr(options), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_setattrlist_trampoline()\n\n//go:linkname libc_setattrlist libc_setattrlist\n//go:cgo_import_dynamic libc_setattrlist setattrlist \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kill(pid int, signum int, posix int) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_kill_trampoline), uintptr(pid), uintptr(signum), uintptr(posix))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_kill_trampoline()\n\n//go:linkname libc_kill libc_kill\n//go:cgo_import_dynamic libc_kill kill \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_ioctl_trampoline), uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_ioctl_trampoline()\n\n//go:linkname libc_ioctl libc_ioctl\n//go:cgo_import_dynamic libc_ioctl ioctl \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) {\n\t_, _, e1 := syscall_syscall9(funcPC(libc_sendfile_trampoline), uintptr(infd), uintptr(outfd), uintptr(offset), uintptr(offset>>32), uintptr(unsafe.Pointer(len)), uintptr(hdtr), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_sendfile_trampoline()\n\n//go:linkname libc_sendfile libc_sendfile\n//go:cgo_import_dynamic libc_sendfile sendfile \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_access_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_access_trampoline()\n\n//go:linkname libc_access libc_access\n//go:cgo_import_dynamic libc_access access \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_adjtime_trampoline), uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_adjtime_trampoline()\n\n//go:linkname libc_adjtime libc_adjtime\n//go:cgo_import_dynamic libc_adjtime adjtime \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_chdir_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_chdir_trampoline()\n\n//go:linkname libc_chdir libc_chdir\n//go:cgo_import_dynamic libc_chdir chdir \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chflags(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_chflags_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_chflags_trampoline()\n\n//go:linkname libc_chflags libc_chflags\n//go:cgo_import_dynamic libc_chflags chflags \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_chmod_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_chmod_trampoline()\n\n//go:linkname libc_chmod libc_chmod\n//go:cgo_import_dynamic libc_chmod chmod \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_chown_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_chown_trampoline()\n\n//go:linkname libc_chown libc_chown\n//go:cgo_import_dynamic libc_chown chown \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_chroot_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_chroot_trampoline()\n\n//go:linkname libc_chroot libc_chroot\n//go:cgo_import_dynamic libc_chroot chroot \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_close_trampoline), uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_close_trampoline()\n\n//go:linkname libc_close libc_close\n//go:cgo_import_dynamic libc_close close \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := syscall_syscall(funcPC(libc_dup_trampoline), uintptr(fd), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_dup_trampoline()\n\n//go:linkname libc_dup libc_dup\n//go:cgo_import_dynamic libc_dup dup \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(from int, to int) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_dup2_trampoline), uintptr(from), uintptr(to), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_dup2_trampoline()\n\n//go:linkname libc_dup2 libc_dup2\n//go:cgo_import_dynamic libc_dup2 dup2 \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exchangedata(path1 string, path2 string, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path1)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(path2)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_exchangedata_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_exchangedata_trampoline()\n\n//go:linkname libc_exchangedata libc_exchangedata\n//go:cgo_import_dynamic libc_exchangedata exchangedata \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tsyscall_syscall(funcPC(libc_exit_trampoline), uintptr(code), 0, 0)\n\treturn\n}\n\nfunc libc_exit_trampoline()\n\n//go:linkname libc_exit libc_exit\n//go:cgo_import_dynamic libc_exit exit \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(funcPC(libc_faccessat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_faccessat_trampoline()\n\n//go:linkname libc_faccessat libc_faccessat\n//go:cgo_import_dynamic libc_faccessat faccessat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_fchdir_trampoline), uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_fchdir_trampoline()\n\n//go:linkname libc_fchdir libc_fchdir\n//go:cgo_import_dynamic libc_fchdir fchdir \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchflags(fd int, flags int) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_fchflags_trampoline), uintptr(fd), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_fchflags_trampoline()\n\n//go:linkname libc_fchflags libc_fchflags\n//go:cgo_import_dynamic libc_fchflags fchflags \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_fchmod_trampoline), uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_fchmod_trampoline()\n\n//go:linkname libc_fchmod libc_fchmod\n//go:cgo_import_dynamic libc_fchmod fchmod \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(funcPC(libc_fchmodat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_fchmodat_trampoline()\n\n//go:linkname libc_fchmodat libc_fchmodat\n//go:cgo_import_dynamic libc_fchmodat fchmodat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_fchown_trampoline), uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_fchown_trampoline()\n\n//go:linkname libc_fchown libc_fchown\n//go:cgo_import_dynamic libc_fchown fchown \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(funcPC(libc_fchownat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_fchownat_trampoline()\n\n//go:linkname libc_fchownat libc_fchownat\n//go:cgo_import_dynamic libc_fchownat fchownat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_flock_trampoline), uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_flock_trampoline()\n\n//go:linkname libc_flock libc_flock\n//go:cgo_import_dynamic libc_flock flock \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := syscall_syscall(funcPC(libc_fpathconf_trampoline), uintptr(fd), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_fpathconf_trampoline()\n\n//go:linkname libc_fpathconf libc_fpathconf\n//go:cgo_import_dynamic libc_fpathconf fpathconf \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_fsync_trampoline), uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_fsync_trampoline()\n\n//go:linkname libc_fsync libc_fsync\n//go:cgo_import_dynamic libc_fsync fsync \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_ftruncate_trampoline), uintptr(fd), uintptr(length), uintptr(length>>32))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_ftruncate_trampoline()\n\n//go:linkname libc_ftruncate libc_ftruncate\n//go:cgo_import_dynamic libc_ftruncate ftruncate \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdtablesize() (size int) {\n\tr0, _, _ := syscall_syscall(funcPC(libc_getdtablesize_trampoline), 0, 0, 0)\n\tsize = int(r0)\n\treturn\n}\n\nfunc libc_getdtablesize_trampoline()\n\n//go:linkname libc_getdtablesize libc_getdtablesize\n//go:cgo_import_dynamic libc_getdtablesize getdtablesize \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := syscall_rawSyscall(funcPC(libc_getegid_trampoline), 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\nfunc libc_getegid_trampoline()\n\n//go:linkname libc_getegid libc_getegid\n//go:cgo_import_dynamic libc_getegid getegid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (uid int) {\n\tr0, _, _ := syscall_rawSyscall(funcPC(libc_geteuid_trampoline), 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\nfunc libc_geteuid_trampoline()\n\n//go:linkname libc_geteuid libc_geteuid\n//go:cgo_import_dynamic libc_geteuid geteuid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := syscall_rawSyscall(funcPC(libc_getgid_trampoline), 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\nfunc libc_getgid_trampoline()\n\n//go:linkname libc_getgid libc_getgid\n//go:cgo_import_dynamic libc_getgid getgid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(funcPC(libc_getpgid_trampoline), uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_getpgid_trampoline()\n\n//go:linkname libc_getpgid libc_getpgid\n//go:cgo_import_dynamic libc_getpgid getpgid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgrp int) {\n\tr0, _, _ := syscall_rawSyscall(funcPC(libc_getpgrp_trampoline), 0, 0, 0)\n\tpgrp = int(r0)\n\treturn\n}\n\nfunc libc_getpgrp_trampoline()\n\n//go:linkname libc_getpgrp libc_getpgrp\n//go:cgo_import_dynamic libc_getpgrp getpgrp \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := syscall_rawSyscall(funcPC(libc_getpid_trampoline), 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\nfunc libc_getpid_trampoline()\n\n//go:linkname libc_getpid libc_getpid\n//go:cgo_import_dynamic libc_getpid getpid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := syscall_rawSyscall(funcPC(libc_getppid_trampoline), 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\nfunc libc_getppid_trampoline()\n\n//go:linkname libc_getppid libc_getppid\n//go:cgo_import_dynamic libc_getppid getppid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := syscall_syscall(funcPC(libc_getpriority_trampoline), uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_getpriority_trampoline()\n\n//go:linkname libc_getpriority libc_getpriority\n//go:cgo_import_dynamic libc_getpriority getpriority \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := syscall_rawSyscall(funcPC(libc_getrlimit_trampoline), uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_getrlimit_trampoline()\n\n//go:linkname libc_getrlimit libc_getrlimit\n//go:cgo_import_dynamic libc_getrlimit getrlimit \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := syscall_rawSyscall(funcPC(libc_getrusage_trampoline), uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_getrusage_trampoline()\n\n//go:linkname libc_getrusage libc_getrusage\n//go:cgo_import_dynamic libc_getrusage getrusage \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(funcPC(libc_getsid_trampoline), uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_getsid_trampoline()\n\n//go:linkname libc_getsid libc_getsid\n//go:cgo_import_dynamic libc_getsid getsid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := syscall_rawSyscall(funcPC(libc_getuid_trampoline), 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\nfunc libc_getuid_trampoline()\n\n//go:linkname libc_getuid libc_getuid\n//go:cgo_import_dynamic libc_getuid getuid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Issetugid() (tainted bool) {\n\tr0, _, _ := syscall_rawSyscall(funcPC(libc_issetugid_trampoline), 0, 0, 0)\n\ttainted = bool(r0 != 0)\n\treturn\n}\n\nfunc libc_issetugid_trampoline()\n\n//go:linkname libc_issetugid libc_issetugid\n//go:cgo_import_dynamic libc_issetugid issetugid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kqueue() (fd int, err error) {\n\tr0, _, e1 := syscall_syscall(funcPC(libc_kqueue_trampoline), 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_kqueue_trampoline()\n\n//go:linkname libc_kqueue libc_kqueue\n//go:cgo_import_dynamic libc_kqueue kqueue \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_lchown_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_lchown_trampoline()\n\n//go:linkname libc_lchown libc_lchown\n//go:cgo_import_dynamic libc_lchown lchown \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_link_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_link_trampoline()\n\n//go:linkname libc_link libc_link\n//go:cgo_import_dynamic libc_link link \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(funcPC(libc_linkat_trampoline), uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_linkat_trampoline()\n\n//go:linkname libc_linkat libc_linkat\n//go:cgo_import_dynamic libc_linkat linkat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_listen_trampoline), uintptr(s), uintptr(backlog), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_listen_trampoline()\n\n//go:linkname libc_listen libc_listen\n//go:cgo_import_dynamic libc_listen listen \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_mkdir_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_mkdir_trampoline()\n\n//go:linkname libc_mkdir libc_mkdir\n//go:cgo_import_dynamic libc_mkdir mkdir \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_mkdirat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_mkdirat_trampoline()\n\n//go:linkname libc_mkdirat libc_mkdirat\n//go:cgo_import_dynamic libc_mkdirat mkdirat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_mkfifo_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_mkfifo_trampoline()\n\n//go:linkname libc_mkfifo libc_mkfifo\n//go:cgo_import_dynamic libc_mkfifo mkfifo \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknod(path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_mknod_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_mknod_trampoline()\n\n//go:linkname libc_mknod libc_mknod\n//go:cgo_import_dynamic libc_mknod mknod \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall(funcPC(libc_open_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_open_trampoline()\n\n//go:linkname libc_open libc_open\n//go:cgo_import_dynamic libc_open open \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall6(funcPC(libc_openat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_openat_trampoline()\n\n//go:linkname libc_openat libc_openat\n//go:cgo_import_dynamic libc_openat openat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall(funcPC(libc_pathconf_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_pathconf_trampoline()\n\n//go:linkname libc_pathconf libc_pathconf\n//go:cgo_import_dynamic libc_pathconf pathconf \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(funcPC(libc_pread_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_pread_trampoline()\n\n//go:linkname libc_pread libc_pread\n//go:cgo_import_dynamic libc_pread pread \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(funcPC(libc_pwrite_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_pwrite_trampoline()\n\n//go:linkname libc_pwrite libc_pwrite\n//go:cgo_import_dynamic libc_pwrite pwrite \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(funcPC(libc_read_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_read_trampoline()\n\n//go:linkname libc_read libc_read\n//go:cgo_import_dynamic libc_read read \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(funcPC(libc_readlink_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_readlink_trampoline()\n\n//go:linkname libc_readlink libc_readlink\n//go:cgo_import_dynamic libc_readlink readlink \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(funcPC(libc_readlinkat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_readlinkat_trampoline()\n\n//go:linkname libc_readlinkat libc_readlinkat\n//go:cgo_import_dynamic libc_readlinkat readlinkat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_rename_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_rename_trampoline()\n\n//go:linkname libc_rename libc_rename\n//go:cgo_import_dynamic libc_rename rename \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(fromfd int, from string, tofd int, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(funcPC(libc_renameat_trampoline), uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_renameat_trampoline()\n\n//go:linkname libc_renameat libc_renameat\n//go:cgo_import_dynamic libc_renameat renameat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Revoke(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_revoke_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_revoke_trampoline()\n\n//go:linkname libc_revoke libc_revoke\n//go:cgo_import_dynamic libc_revoke revoke \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_rmdir_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_rmdir_trampoline()\n\n//go:linkname libc_rmdir libc_rmdir\n//go:cgo_import_dynamic libc_rmdir rmdir \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, r1, e1 := syscall_syscall6(funcPC(libc_lseek_trampoline), uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(whence), 0, 0)\n\tnewoffset = int64(int64(r1)<<32 | int64(r0))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_lseek_trampoline()\n\n//go:linkname libc_lseek libc_lseek\n//go:cgo_import_dynamic libc_lseek lseek \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) {\n\t_, _, e1 := syscall_syscall6(funcPC(libc_select_trampoline), uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_select_trampoline()\n\n//go:linkname libc_select libc_select\n//go:cgo_import_dynamic libc_select select \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_setegid_trampoline), uintptr(egid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_setegid_trampoline()\n\n//go:linkname libc_setegid libc_setegid\n//go:cgo_import_dynamic libc_setegid setegid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(funcPC(libc_seteuid_trampoline), uintptr(euid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_seteuid_trampoline()\n\n//go:linkname libc_seteuid libc_seteuid\n//go:cgo_import_dynamic libc_seteuid seteuid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(funcPC(libc_setgid_trampoline), uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_setgid_trampoline()\n\n//go:linkname libc_setgid libc_setgid\n//go:cgo_import_dynamic libc_setgid setgid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setlogin(name string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_setlogin_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_setlogin_trampoline()\n\n//go:linkname libc_setlogin libc_setlogin\n//go:cgo_import_dynamic libc_setlogin setlogin \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(funcPC(libc_setpgid_trampoline), uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_setpgid_trampoline()\n\n//go:linkname libc_setpgid libc_setpgid\n//go:cgo_import_dynamic libc_setpgid setpgid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_setpriority_trampoline), uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_setpriority_trampoline()\n\n//go:linkname libc_setpriority libc_setpriority\n//go:cgo_import_dynamic libc_setpriority setpriority \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setprivexec(flag int) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_setprivexec_trampoline), uintptr(flag), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_setprivexec_trampoline()\n\n//go:linkname libc_setprivexec libc_setprivexec\n//go:cgo_import_dynamic libc_setprivexec setprivexec \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(funcPC(libc_setregid_trampoline), uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_setregid_trampoline()\n\n//go:linkname libc_setregid libc_setregid\n//go:cgo_import_dynamic libc_setregid setregid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(funcPC(libc_setreuid_trampoline), uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_setreuid_trampoline()\n\n//go:linkname libc_setreuid libc_setreuid\n//go:cgo_import_dynamic libc_setreuid setreuid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := syscall_rawSyscall(funcPC(libc_setrlimit_trampoline), uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_setrlimit_trampoline()\n\n//go:linkname libc_setrlimit libc_setrlimit\n//go:cgo_import_dynamic libc_setrlimit setrlimit \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(funcPC(libc_setsid_trampoline), 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_setsid_trampoline()\n\n//go:linkname libc_setsid libc_setsid\n//go:cgo_import_dynamic libc_setsid setsid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := syscall_rawSyscall(funcPC(libc_settimeofday_trampoline), uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_settimeofday_trampoline()\n\n//go:linkname libc_settimeofday libc_settimeofday\n//go:cgo_import_dynamic libc_settimeofday settimeofday \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(funcPC(libc_setuid_trampoline), uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_setuid_trampoline()\n\n//go:linkname libc_setuid libc_setuid\n//go:cgo_import_dynamic libc_setuid setuid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_symlink_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_symlink_trampoline()\n\n//go:linkname libc_symlink libc_symlink\n//go:cgo_import_dynamic libc_symlink symlink \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_symlinkat_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_symlinkat_trampoline()\n\n//go:linkname libc_symlinkat libc_symlinkat\n//go:cgo_import_dynamic libc_symlinkat symlinkat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_sync_trampoline), 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_sync_trampoline()\n\n//go:linkname libc_sync libc_sync\n//go:cgo_import_dynamic libc_sync sync \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_truncate_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(length), uintptr(length>>32))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_truncate_trampoline()\n\n//go:linkname libc_truncate libc_truncate\n//go:cgo_import_dynamic libc_truncate truncate \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(newmask int) (oldmask int) {\n\tr0, _, _ := syscall_syscall(funcPC(libc_umask_trampoline), uintptr(newmask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\nfunc libc_umask_trampoline()\n\n//go:linkname libc_umask libc_umask\n//go:cgo_import_dynamic libc_umask umask \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Undelete(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_undelete_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_undelete_trampoline()\n\n//go:linkname libc_undelete libc_undelete\n//go:cgo_import_dynamic libc_undelete undelete \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_unlink_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_unlink_trampoline()\n\n//go:linkname libc_unlink libc_unlink\n//go:cgo_import_dynamic libc_unlink unlink \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_unlinkat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_unlinkat_trampoline()\n\n//go:linkname libc_unlinkat libc_unlinkat\n//go:cgo_import_dynamic libc_unlinkat unlinkat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_unmount_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_unmount_trampoline()\n\n//go:linkname libc_unmount libc_unmount\n//go:cgo_import_dynamic libc_unmount unmount \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(funcPC(libc_write_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_write_trampoline()\n\n//go:linkname libc_write libc_write\n//go:cgo_import_dynamic libc_write write \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := syscall_syscall9(funcPC(libc_mmap_trampoline), uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos), uintptr(pos>>32), 0, 0)\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_mmap_trampoline()\n\n//go:linkname libc_mmap libc_mmap\n//go:cgo_import_dynamic libc_mmap mmap \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_munmap_trampoline), uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_munmap_trampoline()\n\n//go:linkname libc_munmap libc_munmap\n//go:cgo_import_dynamic libc_munmap munmap \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc readlen(fd int, buf *byte, nbuf int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(funcPC(libc_read_trampoline), uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc writelen(fd int, buf *byte, nbuf int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(funcPC(libc_write_trampoline), uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc gettimeofday(tp *Timeval) (sec int32, usec int32, err error) {\n\tr0, r1, e1 := syscall_rawSyscall(funcPC(libc_gettimeofday_trampoline), uintptr(unsafe.Pointer(tp)), 0, 0)\n\tsec = int32(r0)\n\tusec = int32(r1)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_gettimeofday_trampoline()\n\n//go:linkname libc_gettimeofday libc_gettimeofday\n//go:cgo_import_dynamic libc_gettimeofday gettimeofday \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_fstat64_trampoline), uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_fstat64_trampoline()\n\n//go:linkname libc_fstat64 libc_fstat64\n//go:cgo_import_dynamic libc_fstat64 fstat64 \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(funcPC(libc_fstatat64_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_fstatat64_trampoline()\n\n//go:linkname libc_fstatat64 libc_fstatat64\n//go:cgo_import_dynamic libc_fstatat64 fstatat64 \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, stat *Statfs_t) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_fstatfs64_trampoline), uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_fstatfs64_trampoline()\n\n//go:linkname libc_fstatfs64 libc_fstatfs64\n//go:cgo_import_dynamic libc_fstatfs64 fstatfs64 \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(funcPC(libc___getdirentries64_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc___getdirentries64_trampoline()\n\n//go:linkname libc___getdirentries64 libc___getdirentries64\n//go:cgo_import_dynamic libc___getdirentries64 __getdirentries64 \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(funcPC(libc_getfsstat64_trampoline), uintptr(buf), uintptr(size), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_getfsstat64_trampoline()\n\n//go:linkname libc_getfsstat64 libc_getfsstat64\n//go:cgo_import_dynamic libc_getfsstat64 getfsstat64 \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_lstat64_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_lstat64_trampoline()\n\n//go:linkname libc_lstat64 libc_lstat64\n//go:cgo_import_dynamic libc_lstat64 lstat64 \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_stat64_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_stat64_trampoline()\n\n//go:linkname libc_stat64 libc_stat64\n//go:cgo_import_dynamic libc_stat64 stat64 \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, stat *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_statfs64_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_statfs64_trampoline()\n\n//go:linkname libc_statfs64 libc_statfs64\n//go:cgo_import_dynamic libc_statfs64 statfs64 \"/usr/lib/libSystem.B.dylib\"\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_darwin_386.s",
    "content": "// go run mkasm_darwin.go 386\n// Code generated by the command above; DO NOT EDIT.\n\n// +build go1.12\n\n#include \"textflag.h\"\nTEXT ·libc_getgroups_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getgroups(SB)\nTEXT ·libc_setgroups_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setgroups(SB)\nTEXT ·libc_wait4_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_wait4(SB)\nTEXT ·libc_accept_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_accept(SB)\nTEXT ·libc_bind_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_bind(SB)\nTEXT ·libc_connect_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_connect(SB)\nTEXT ·libc_socket_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_socket(SB)\nTEXT ·libc_getsockopt_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getsockopt(SB)\nTEXT ·libc_setsockopt_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setsockopt(SB)\nTEXT ·libc_getpeername_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpeername(SB)\nTEXT ·libc_getsockname_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getsockname(SB)\nTEXT ·libc_shutdown_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_shutdown(SB)\nTEXT ·libc_socketpair_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_socketpair(SB)\nTEXT ·libc_recvfrom_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_recvfrom(SB)\nTEXT ·libc_sendto_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sendto(SB)\nTEXT ·libc_recvmsg_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_recvmsg(SB)\nTEXT ·libc_sendmsg_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sendmsg(SB)\nTEXT ·libc_kevent_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_kevent(SB)\nTEXT ·libc___sysctl_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc___sysctl(SB)\nTEXT ·libc_utimes_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_utimes(SB)\nTEXT ·libc_futimes_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_futimes(SB)\nTEXT ·libc_fcntl_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fcntl(SB)\nTEXT ·libc_poll_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_poll(SB)\nTEXT ·libc_madvise_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_madvise(SB)\nTEXT ·libc_mlock_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mlock(SB)\nTEXT ·libc_mlockall_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mlockall(SB)\nTEXT ·libc_mprotect_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mprotect(SB)\nTEXT ·libc_msync_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_msync(SB)\nTEXT ·libc_munlock_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_munlock(SB)\nTEXT ·libc_munlockall_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_munlockall(SB)\nTEXT ·libc_ptrace_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_ptrace(SB)\nTEXT ·libc_getattrlist_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getattrlist(SB)\nTEXT ·libc_pipe_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pipe(SB)\nTEXT ·libc_getxattr_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getxattr(SB)\nTEXT ·libc_fgetxattr_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fgetxattr(SB)\nTEXT ·libc_setxattr_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setxattr(SB)\nTEXT ·libc_fsetxattr_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fsetxattr(SB)\nTEXT ·libc_removexattr_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_removexattr(SB)\nTEXT ·libc_fremovexattr_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fremovexattr(SB)\nTEXT ·libc_listxattr_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_listxattr(SB)\nTEXT ·libc_flistxattr_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_flistxattr(SB)\nTEXT ·libc_setattrlist_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setattrlist(SB)\nTEXT ·libc_kill_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_kill(SB)\nTEXT ·libc_ioctl_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_ioctl(SB)\nTEXT ·libc_sendfile_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sendfile(SB)\nTEXT ·libc_access_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_access(SB)\nTEXT ·libc_adjtime_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_adjtime(SB)\nTEXT ·libc_chdir_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chdir(SB)\nTEXT ·libc_chflags_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chflags(SB)\nTEXT ·libc_chmod_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chmod(SB)\nTEXT ·libc_chown_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chown(SB)\nTEXT ·libc_chroot_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chroot(SB)\nTEXT ·libc_close_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_close(SB)\nTEXT ·libc_dup_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_dup(SB)\nTEXT ·libc_dup2_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_dup2(SB)\nTEXT ·libc_exchangedata_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_exchangedata(SB)\nTEXT ·libc_exit_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_exit(SB)\nTEXT ·libc_faccessat_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_faccessat(SB)\nTEXT ·libc_fchdir_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchdir(SB)\nTEXT ·libc_fchflags_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchflags(SB)\nTEXT ·libc_fchmod_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchmod(SB)\nTEXT ·libc_fchmodat_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchmodat(SB)\nTEXT ·libc_fchown_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchown(SB)\nTEXT ·libc_fchownat_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchownat(SB)\nTEXT ·libc_flock_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_flock(SB)\nTEXT ·libc_fpathconf_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fpathconf(SB)\nTEXT ·libc_fsync_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fsync(SB)\nTEXT ·libc_ftruncate_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_ftruncate(SB)\nTEXT ·libc_getdtablesize_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getdtablesize(SB)\nTEXT ·libc_getegid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getegid(SB)\nTEXT ·libc_geteuid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_geteuid(SB)\nTEXT ·libc_getgid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getgid(SB)\nTEXT ·libc_getpgid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpgid(SB)\nTEXT ·libc_getpgrp_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpgrp(SB)\nTEXT ·libc_getpid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpid(SB)\nTEXT ·libc_getppid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getppid(SB)\nTEXT ·libc_getpriority_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpriority(SB)\nTEXT ·libc_getrlimit_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getrlimit(SB)\nTEXT ·libc_getrusage_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getrusage(SB)\nTEXT ·libc_getsid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getsid(SB)\nTEXT ·libc_getuid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getuid(SB)\nTEXT ·libc_issetugid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_issetugid(SB)\nTEXT ·libc_kqueue_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_kqueue(SB)\nTEXT ·libc_lchown_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_lchown(SB)\nTEXT ·libc_link_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_link(SB)\nTEXT ·libc_linkat_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_linkat(SB)\nTEXT ·libc_listen_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_listen(SB)\nTEXT ·libc_mkdir_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkdir(SB)\nTEXT ·libc_mkdirat_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkdirat(SB)\nTEXT ·libc_mkfifo_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkfifo(SB)\nTEXT ·libc_mknod_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mknod(SB)\nTEXT ·libc_open_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_open(SB)\nTEXT ·libc_openat_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_openat(SB)\nTEXT ·libc_pathconf_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pathconf(SB)\nTEXT ·libc_pread_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pread(SB)\nTEXT ·libc_pwrite_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pwrite(SB)\nTEXT ·libc_read_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_read(SB)\nTEXT ·libc_readlink_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_readlink(SB)\nTEXT ·libc_readlinkat_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_readlinkat(SB)\nTEXT ·libc_rename_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_rename(SB)\nTEXT ·libc_renameat_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_renameat(SB)\nTEXT ·libc_revoke_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_revoke(SB)\nTEXT ·libc_rmdir_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_rmdir(SB)\nTEXT ·libc_lseek_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_lseek(SB)\nTEXT ·libc_select_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_select(SB)\nTEXT ·libc_setegid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setegid(SB)\nTEXT ·libc_seteuid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_seteuid(SB)\nTEXT ·libc_setgid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setgid(SB)\nTEXT ·libc_setlogin_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setlogin(SB)\nTEXT ·libc_setpgid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setpgid(SB)\nTEXT ·libc_setpriority_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setpriority(SB)\nTEXT ·libc_setprivexec_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setprivexec(SB)\nTEXT ·libc_setregid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setregid(SB)\nTEXT ·libc_setreuid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setreuid(SB)\nTEXT ·libc_setrlimit_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setrlimit(SB)\nTEXT ·libc_setsid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setsid(SB)\nTEXT ·libc_settimeofday_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_settimeofday(SB)\nTEXT ·libc_setuid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setuid(SB)\nTEXT ·libc_symlink_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_symlink(SB)\nTEXT ·libc_symlinkat_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_symlinkat(SB)\nTEXT ·libc_sync_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sync(SB)\nTEXT ·libc_truncate_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_truncate(SB)\nTEXT ·libc_umask_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_umask(SB)\nTEXT ·libc_undelete_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_undelete(SB)\nTEXT ·libc_unlink_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unlink(SB)\nTEXT ·libc_unlinkat_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unlinkat(SB)\nTEXT ·libc_unmount_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unmount(SB)\nTEXT ·libc_write_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_write(SB)\nTEXT ·libc_mmap_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mmap(SB)\nTEXT ·libc_munmap_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_munmap(SB)\nTEXT ·libc_gettimeofday_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_gettimeofday(SB)\nTEXT ·libc_fstat64_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fstat64(SB)\nTEXT ·libc_fstatat64_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fstatat64(SB)\nTEXT ·libc_fstatfs64_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fstatfs64(SB)\nTEXT ·libc___getdirentries64_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc___getdirentries64(SB)\nTEXT ·libc_getfsstat64_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getfsstat64(SB)\nTEXT ·libc_lstat64_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_lstat64(SB)\nTEXT ·libc_stat64_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_stat64(SB)\nTEXT ·libc_statfs64_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_statfs64(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_11.go",
    "content": "// go run mksyscall.go -tags darwin,amd64,!go1.12 syscall_bsd.go syscall_darwin.go syscall_darwin_amd64.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build darwin,amd64,!go1.12\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(mib) > 0 {\n\t\t_p0 = unsafe.Pointer(&mib[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, timeval *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimes(fd int, timeval *[2]Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, behav int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETATTRLIST, uintptr(unsafe.Pointer(path)), uintptr(list), uintptr(buf), uintptr(size), uintptr(options), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe() (r int, w int, err error) {\n\tr0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0)\n\tr = int(r0)\n\tw = int(r1)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getxattr(path string, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fgetxattr(fd int, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setxattr(path string, attr string, data *byte, size int, position uint32, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fsetxattr(fd int, attr string, data *byte, size int, position uint32, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc removexattr(path string, attr string, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fremovexattr(fd int, attr string, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(options))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc listxattr(path string, dest *byte, size int, options int) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc flistxattr(fd int, dest *byte, size int, options int) (sz int, err error) {\n\tr0, _, e1 := Syscall6(SYS_FLISTXATTR, uintptr(fd), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETATTRLIST, uintptr(unsafe.Pointer(path)), uintptr(list), uintptr(buf), uintptr(size), uintptr(options), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kill(pid int, signum int, posix int) (err error) {\n\t_, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), uintptr(posix))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) {\n\t_, _, e1 := Syscall6(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(offset), uintptr(unsafe.Pointer(len)), uintptr(hdtr), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chflags(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(from int, to int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exchangedata(path1 string, path2 string, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path1)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(path2)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXCHANGEDATA, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tSyscall(SYS_EXIT, uintptr(code), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchflags(fd int, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdtablesize() (size int) {\n\tr0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0)\n\tsize = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgrp int) {\n\tr0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)\n\tpgrp = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Issetugid() (tainted bool) {\n\tr0, _, _ := RawSyscall(SYS_ISSETUGID, 0, 0, 0)\n\ttainted = bool(r0 != 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kqueue() (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknod(path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(fromfd int, from string, tofd int, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Revoke(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))\n\tnewoffset = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) {\n\t_, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETEGID, uintptr(egid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setlogin(name string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setprivexec(flag int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETPRIVEXEC, uintptr(flag), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(newmask int) (oldmask int) {\n\tr0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Undelete(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos))\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc readlen(fd int, buf *byte, nbuf int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc writelen(fd int, buf *byte, nbuf int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc gettimeofday(tp *Timeval) (sec int64, usec int32, err error) {\n\tr0, r1, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tsec = int64(r0)\n\tusec = int32(r1)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, stat *Statfs_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATFS64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_GETDIRENTRIES64, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_GETFSSTAT64, uintptr(buf), uintptr(size), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, stat *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go",
    "content": "// go run mksyscall.go -tags darwin,amd64,go1.12 syscall_bsd.go syscall_darwin.go syscall_darwin_amd64.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build darwin,amd64,go1.12\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(funcPC(libc_getgroups_trampoline), uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_getgroups_trampoline()\n\n//go:linkname libc_getgroups libc_getgroups\n//go:cgo_import_dynamic libc_getgroups getgroups \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := syscall_rawSyscall(funcPC(libc_setgroups_trampoline), uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_setgroups_trampoline()\n\n//go:linkname libc_setgroups libc_setgroups\n//go:cgo_import_dynamic libc_setgroups setgroups \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := syscall_syscall6(funcPC(libc_wait4_trampoline), uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_wait4_trampoline()\n\n//go:linkname libc_wait4 libc_wait4\n//go:cgo_import_dynamic libc_wait4 wait4 \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := syscall_syscall(funcPC(libc_accept_trampoline), uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_accept_trampoline()\n\n//go:linkname libc_accept libc_accept\n//go:cgo_import_dynamic libc_accept accept \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_bind_trampoline), uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_bind_trampoline()\n\n//go:linkname libc_bind libc_bind\n//go:cgo_import_dynamic libc_bind bind \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_connect_trampoline), uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_connect_trampoline()\n\n//go:linkname libc_connect libc_connect\n//go:cgo_import_dynamic libc_connect connect \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(funcPC(libc_socket_trampoline), uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_socket_trampoline()\n\n//go:linkname libc_socket libc_socket\n//go:cgo_import_dynamic libc_socket socket \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := syscall_syscall6(funcPC(libc_getsockopt_trampoline), uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_getsockopt_trampoline()\n\n//go:linkname libc_getsockopt libc_getsockopt\n//go:cgo_import_dynamic libc_getsockopt getsockopt \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := syscall_syscall6(funcPC(libc_setsockopt_trampoline), uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_setsockopt_trampoline()\n\n//go:linkname libc_setsockopt libc_setsockopt\n//go:cgo_import_dynamic libc_setsockopt setsockopt \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := syscall_rawSyscall(funcPC(libc_getpeername_trampoline), uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_getpeername_trampoline()\n\n//go:linkname libc_getpeername libc_getpeername\n//go:cgo_import_dynamic libc_getpeername getpeername \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := syscall_rawSyscall(funcPC(libc_getsockname_trampoline), uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_getsockname_trampoline()\n\n//go:linkname libc_getsockname libc_getsockname\n//go:cgo_import_dynamic libc_getsockname getsockname \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_shutdown_trampoline), uintptr(s), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_shutdown_trampoline()\n\n//go:linkname libc_shutdown libc_shutdown\n//go:cgo_import_dynamic libc_shutdown shutdown \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := syscall_rawSyscall6(funcPC(libc_socketpair_trampoline), uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_socketpair_trampoline()\n\n//go:linkname libc_socketpair libc_socketpair\n//go:cgo_import_dynamic libc_socketpair socketpair \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(funcPC(libc_recvfrom_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_recvfrom_trampoline()\n\n//go:linkname libc_recvfrom libc_recvfrom\n//go:cgo_import_dynamic libc_recvfrom recvfrom \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall6(funcPC(libc_sendto_trampoline), uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_sendto_trampoline()\n\n//go:linkname libc_sendto libc_sendto\n//go:cgo_import_dynamic libc_sendto sendto \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(funcPC(libc_recvmsg_trampoline), uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_recvmsg_trampoline()\n\n//go:linkname libc_recvmsg libc_recvmsg\n//go:cgo_import_dynamic libc_recvmsg recvmsg \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(funcPC(libc_sendmsg_trampoline), uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_sendmsg_trampoline()\n\n//go:linkname libc_sendmsg libc_sendmsg\n//go:cgo_import_dynamic libc_sendmsg sendmsg \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := syscall_syscall6(funcPC(libc_kevent_trampoline), uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_kevent_trampoline()\n\n//go:linkname libc_kevent libc_kevent\n//go:cgo_import_dynamic libc_kevent kevent \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(mib) > 0 {\n\t\t_p0 = unsafe.Pointer(&mib[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall6(funcPC(libc___sysctl_trampoline), uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc___sysctl_trampoline()\n\n//go:linkname libc___sysctl libc___sysctl\n//go:cgo_import_dynamic libc___sysctl __sysctl \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, timeval *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_utimes_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_utimes_trampoline()\n\n//go:linkname libc_utimes libc_utimes\n//go:cgo_import_dynamic libc_utimes utimes \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimes(fd int, timeval *[2]Timeval) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_futimes_trampoline), uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_futimes_trampoline()\n\n//go:linkname libc_futimes libc_futimes\n//go:cgo_import_dynamic libc_futimes futimes \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (val int, err error) {\n\tr0, _, e1 := syscall_syscall(funcPC(libc_fcntl_trampoline), uintptr(fd), uintptr(cmd), uintptr(arg))\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_fcntl_trampoline()\n\n//go:linkname libc_fcntl libc_fcntl\n//go:cgo_import_dynamic libc_fcntl fcntl \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(funcPC(libc_poll_trampoline), uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_poll_trampoline()\n\n//go:linkname libc_poll libc_poll\n//go:cgo_import_dynamic libc_poll poll \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, behav int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_madvise_trampoline), uintptr(_p0), uintptr(len(b)), uintptr(behav))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_madvise_trampoline()\n\n//go:linkname libc_madvise libc_madvise\n//go:cgo_import_dynamic libc_madvise madvise \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_mlock_trampoline), uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_mlock_trampoline()\n\n//go:linkname libc_mlock libc_mlock\n//go:cgo_import_dynamic libc_mlock mlock \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_mlockall_trampoline), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_mlockall_trampoline()\n\n//go:linkname libc_mlockall libc_mlockall\n//go:cgo_import_dynamic libc_mlockall mlockall \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_mprotect_trampoline), uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_mprotect_trampoline()\n\n//go:linkname libc_mprotect libc_mprotect\n//go:cgo_import_dynamic libc_mprotect mprotect \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_msync_trampoline), uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_msync_trampoline()\n\n//go:linkname libc_msync libc_msync\n//go:cgo_import_dynamic libc_msync msync \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_munlock_trampoline), uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_munlock_trampoline()\n\n//go:linkname libc_munlock libc_munlock\n//go:cgo_import_dynamic libc_munlock munlock \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_munlockall_trampoline), 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_munlockall_trampoline()\n\n//go:linkname libc_munlockall libc_munlockall\n//go:cgo_import_dynamic libc_munlockall munlockall \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {\n\t_, _, e1 := syscall_syscall6(funcPC(libc_ptrace_trampoline), uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_ptrace_trampoline()\n\n//go:linkname libc_ptrace libc_ptrace\n//go:cgo_import_dynamic libc_ptrace ptrace \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) {\n\t_, _, e1 := syscall_syscall6(funcPC(libc_getattrlist_trampoline), uintptr(unsafe.Pointer(path)), uintptr(list), uintptr(buf), uintptr(size), uintptr(options), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_getattrlist_trampoline()\n\n//go:linkname libc_getattrlist libc_getattrlist\n//go:cgo_import_dynamic libc_getattrlist getattrlist \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe() (r int, w int, err error) {\n\tr0, r1, e1 := syscall_rawSyscall(funcPC(libc_pipe_trampoline), 0, 0, 0)\n\tr = int(r0)\n\tw = int(r1)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_pipe_trampoline()\n\n//go:linkname libc_pipe libc_pipe\n//go:cgo_import_dynamic libc_pipe pipe \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getxattr(path string, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall6(funcPC(libc_getxattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_getxattr_trampoline()\n\n//go:linkname libc_getxattr libc_getxattr\n//go:cgo_import_dynamic libc_getxattr getxattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fgetxattr(fd int, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall6(funcPC(libc_fgetxattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_fgetxattr_trampoline()\n\n//go:linkname libc_fgetxattr libc_fgetxattr\n//go:cgo_import_dynamic libc_fgetxattr fgetxattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setxattr(path string, attr string, data *byte, size int, position uint32, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(funcPC(libc_setxattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_setxattr_trampoline()\n\n//go:linkname libc_setxattr libc_setxattr\n//go:cgo_import_dynamic libc_setxattr setxattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fsetxattr(fd int, attr string, data *byte, size int, position uint32, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(funcPC(libc_fsetxattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_fsetxattr_trampoline()\n\n//go:linkname libc_fsetxattr libc_fsetxattr\n//go:cgo_import_dynamic libc_fsetxattr fsetxattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc removexattr(path string, attr string, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_removexattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_removexattr_trampoline()\n\n//go:linkname libc_removexattr libc_removexattr\n//go:cgo_import_dynamic libc_removexattr removexattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fremovexattr(fd int, attr string, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_fremovexattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(options))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_fremovexattr_trampoline()\n\n//go:linkname libc_fremovexattr libc_fremovexattr\n//go:cgo_import_dynamic libc_fremovexattr fremovexattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc listxattr(path string, dest *byte, size int, options int) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall6(funcPC(libc_listxattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_listxattr_trampoline()\n\n//go:linkname libc_listxattr libc_listxattr\n//go:cgo_import_dynamic libc_listxattr listxattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc flistxattr(fd int, dest *byte, size int, options int) (sz int, err error) {\n\tr0, _, e1 := syscall_syscall6(funcPC(libc_flistxattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_flistxattr_trampoline()\n\n//go:linkname libc_flistxattr libc_flistxattr\n//go:cgo_import_dynamic libc_flistxattr flistxattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) {\n\t_, _, e1 := syscall_syscall6(funcPC(libc_setattrlist_trampoline), uintptr(unsafe.Pointer(path)), uintptr(list), uintptr(buf), uintptr(size), uintptr(options), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_setattrlist_trampoline()\n\n//go:linkname libc_setattrlist libc_setattrlist\n//go:cgo_import_dynamic libc_setattrlist setattrlist \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kill(pid int, signum int, posix int) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_kill_trampoline), uintptr(pid), uintptr(signum), uintptr(posix))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_kill_trampoline()\n\n//go:linkname libc_kill libc_kill\n//go:cgo_import_dynamic libc_kill kill \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_ioctl_trampoline), uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_ioctl_trampoline()\n\n//go:linkname libc_ioctl libc_ioctl\n//go:cgo_import_dynamic libc_ioctl ioctl \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) {\n\t_, _, e1 := syscall_syscall6(funcPC(libc_sendfile_trampoline), uintptr(infd), uintptr(outfd), uintptr(offset), uintptr(unsafe.Pointer(len)), uintptr(hdtr), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_sendfile_trampoline()\n\n//go:linkname libc_sendfile libc_sendfile\n//go:cgo_import_dynamic libc_sendfile sendfile \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_access_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_access_trampoline()\n\n//go:linkname libc_access libc_access\n//go:cgo_import_dynamic libc_access access \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_adjtime_trampoline), uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_adjtime_trampoline()\n\n//go:linkname libc_adjtime libc_adjtime\n//go:cgo_import_dynamic libc_adjtime adjtime \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_chdir_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_chdir_trampoline()\n\n//go:linkname libc_chdir libc_chdir\n//go:cgo_import_dynamic libc_chdir chdir \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chflags(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_chflags_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_chflags_trampoline()\n\n//go:linkname libc_chflags libc_chflags\n//go:cgo_import_dynamic libc_chflags chflags \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_chmod_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_chmod_trampoline()\n\n//go:linkname libc_chmod libc_chmod\n//go:cgo_import_dynamic libc_chmod chmod \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_chown_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_chown_trampoline()\n\n//go:linkname libc_chown libc_chown\n//go:cgo_import_dynamic libc_chown chown \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_chroot_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_chroot_trampoline()\n\n//go:linkname libc_chroot libc_chroot\n//go:cgo_import_dynamic libc_chroot chroot \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGettime(clockid int32, time *Timespec) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_clock_gettime_trampoline), uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_clock_gettime_trampoline()\n\n//go:linkname libc_clock_gettime libc_clock_gettime\n//go:cgo_import_dynamic libc_clock_gettime clock_gettime \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_close_trampoline), uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_close_trampoline()\n\n//go:linkname libc_close libc_close\n//go:cgo_import_dynamic libc_close close \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := syscall_syscall(funcPC(libc_dup_trampoline), uintptr(fd), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_dup_trampoline()\n\n//go:linkname libc_dup libc_dup\n//go:cgo_import_dynamic libc_dup dup \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(from int, to int) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_dup2_trampoline), uintptr(from), uintptr(to), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_dup2_trampoline()\n\n//go:linkname libc_dup2 libc_dup2\n//go:cgo_import_dynamic libc_dup2 dup2 \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exchangedata(path1 string, path2 string, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path1)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(path2)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_exchangedata_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_exchangedata_trampoline()\n\n//go:linkname libc_exchangedata libc_exchangedata\n//go:cgo_import_dynamic libc_exchangedata exchangedata \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tsyscall_syscall(funcPC(libc_exit_trampoline), uintptr(code), 0, 0)\n\treturn\n}\n\nfunc libc_exit_trampoline()\n\n//go:linkname libc_exit libc_exit\n//go:cgo_import_dynamic libc_exit exit \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(funcPC(libc_faccessat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_faccessat_trampoline()\n\n//go:linkname libc_faccessat libc_faccessat\n//go:cgo_import_dynamic libc_faccessat faccessat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_fchdir_trampoline), uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_fchdir_trampoline()\n\n//go:linkname libc_fchdir libc_fchdir\n//go:cgo_import_dynamic libc_fchdir fchdir \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchflags(fd int, flags int) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_fchflags_trampoline), uintptr(fd), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_fchflags_trampoline()\n\n//go:linkname libc_fchflags libc_fchflags\n//go:cgo_import_dynamic libc_fchflags fchflags \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_fchmod_trampoline), uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_fchmod_trampoline()\n\n//go:linkname libc_fchmod libc_fchmod\n//go:cgo_import_dynamic libc_fchmod fchmod \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(funcPC(libc_fchmodat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_fchmodat_trampoline()\n\n//go:linkname libc_fchmodat libc_fchmodat\n//go:cgo_import_dynamic libc_fchmodat fchmodat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_fchown_trampoline), uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_fchown_trampoline()\n\n//go:linkname libc_fchown libc_fchown\n//go:cgo_import_dynamic libc_fchown fchown \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(funcPC(libc_fchownat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_fchownat_trampoline()\n\n//go:linkname libc_fchownat libc_fchownat\n//go:cgo_import_dynamic libc_fchownat fchownat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_flock_trampoline), uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_flock_trampoline()\n\n//go:linkname libc_flock libc_flock\n//go:cgo_import_dynamic libc_flock flock \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := syscall_syscall(funcPC(libc_fpathconf_trampoline), uintptr(fd), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_fpathconf_trampoline()\n\n//go:linkname libc_fpathconf libc_fpathconf\n//go:cgo_import_dynamic libc_fpathconf fpathconf \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_fsync_trampoline), uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_fsync_trampoline()\n\n//go:linkname libc_fsync libc_fsync\n//go:cgo_import_dynamic libc_fsync fsync \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_ftruncate_trampoline), uintptr(fd), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_ftruncate_trampoline()\n\n//go:linkname libc_ftruncate libc_ftruncate\n//go:cgo_import_dynamic libc_ftruncate ftruncate \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdtablesize() (size int) {\n\tr0, _, _ := syscall_syscall(funcPC(libc_getdtablesize_trampoline), 0, 0, 0)\n\tsize = int(r0)\n\treturn\n}\n\nfunc libc_getdtablesize_trampoline()\n\n//go:linkname libc_getdtablesize libc_getdtablesize\n//go:cgo_import_dynamic libc_getdtablesize getdtablesize \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := syscall_rawSyscall(funcPC(libc_getegid_trampoline), 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\nfunc libc_getegid_trampoline()\n\n//go:linkname libc_getegid libc_getegid\n//go:cgo_import_dynamic libc_getegid getegid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (uid int) {\n\tr0, _, _ := syscall_rawSyscall(funcPC(libc_geteuid_trampoline), 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\nfunc libc_geteuid_trampoline()\n\n//go:linkname libc_geteuid libc_geteuid\n//go:cgo_import_dynamic libc_geteuid geteuid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := syscall_rawSyscall(funcPC(libc_getgid_trampoline), 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\nfunc libc_getgid_trampoline()\n\n//go:linkname libc_getgid libc_getgid\n//go:cgo_import_dynamic libc_getgid getgid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(funcPC(libc_getpgid_trampoline), uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_getpgid_trampoline()\n\n//go:linkname libc_getpgid libc_getpgid\n//go:cgo_import_dynamic libc_getpgid getpgid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgrp int) {\n\tr0, _, _ := syscall_rawSyscall(funcPC(libc_getpgrp_trampoline), 0, 0, 0)\n\tpgrp = int(r0)\n\treturn\n}\n\nfunc libc_getpgrp_trampoline()\n\n//go:linkname libc_getpgrp libc_getpgrp\n//go:cgo_import_dynamic libc_getpgrp getpgrp \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := syscall_rawSyscall(funcPC(libc_getpid_trampoline), 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\nfunc libc_getpid_trampoline()\n\n//go:linkname libc_getpid libc_getpid\n//go:cgo_import_dynamic libc_getpid getpid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := syscall_rawSyscall(funcPC(libc_getppid_trampoline), 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\nfunc libc_getppid_trampoline()\n\n//go:linkname libc_getppid libc_getppid\n//go:cgo_import_dynamic libc_getppid getppid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := syscall_syscall(funcPC(libc_getpriority_trampoline), uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_getpriority_trampoline()\n\n//go:linkname libc_getpriority libc_getpriority\n//go:cgo_import_dynamic libc_getpriority getpriority \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := syscall_rawSyscall(funcPC(libc_getrlimit_trampoline), uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_getrlimit_trampoline()\n\n//go:linkname libc_getrlimit libc_getrlimit\n//go:cgo_import_dynamic libc_getrlimit getrlimit \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := syscall_rawSyscall(funcPC(libc_getrusage_trampoline), uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_getrusage_trampoline()\n\n//go:linkname libc_getrusage libc_getrusage\n//go:cgo_import_dynamic libc_getrusage getrusage \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(funcPC(libc_getsid_trampoline), uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_getsid_trampoline()\n\n//go:linkname libc_getsid libc_getsid\n//go:cgo_import_dynamic libc_getsid getsid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := syscall_rawSyscall(funcPC(libc_getuid_trampoline), 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\nfunc libc_getuid_trampoline()\n\n//go:linkname libc_getuid libc_getuid\n//go:cgo_import_dynamic libc_getuid getuid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Issetugid() (tainted bool) {\n\tr0, _, _ := syscall_rawSyscall(funcPC(libc_issetugid_trampoline), 0, 0, 0)\n\ttainted = bool(r0 != 0)\n\treturn\n}\n\nfunc libc_issetugid_trampoline()\n\n//go:linkname libc_issetugid libc_issetugid\n//go:cgo_import_dynamic libc_issetugid issetugid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kqueue() (fd int, err error) {\n\tr0, _, e1 := syscall_syscall(funcPC(libc_kqueue_trampoline), 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_kqueue_trampoline()\n\n//go:linkname libc_kqueue libc_kqueue\n//go:cgo_import_dynamic libc_kqueue kqueue \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_lchown_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_lchown_trampoline()\n\n//go:linkname libc_lchown libc_lchown\n//go:cgo_import_dynamic libc_lchown lchown \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_link_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_link_trampoline()\n\n//go:linkname libc_link libc_link\n//go:cgo_import_dynamic libc_link link \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(funcPC(libc_linkat_trampoline), uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_linkat_trampoline()\n\n//go:linkname libc_linkat libc_linkat\n//go:cgo_import_dynamic libc_linkat linkat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_listen_trampoline), uintptr(s), uintptr(backlog), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_listen_trampoline()\n\n//go:linkname libc_listen libc_listen\n//go:cgo_import_dynamic libc_listen listen \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_mkdir_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_mkdir_trampoline()\n\n//go:linkname libc_mkdir libc_mkdir\n//go:cgo_import_dynamic libc_mkdir mkdir \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_mkdirat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_mkdirat_trampoline()\n\n//go:linkname libc_mkdirat libc_mkdirat\n//go:cgo_import_dynamic libc_mkdirat mkdirat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_mkfifo_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_mkfifo_trampoline()\n\n//go:linkname libc_mkfifo libc_mkfifo\n//go:cgo_import_dynamic libc_mkfifo mkfifo \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknod(path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_mknod_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_mknod_trampoline()\n\n//go:linkname libc_mknod libc_mknod\n//go:cgo_import_dynamic libc_mknod mknod \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall(funcPC(libc_open_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_open_trampoline()\n\n//go:linkname libc_open libc_open\n//go:cgo_import_dynamic libc_open open \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall6(funcPC(libc_openat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_openat_trampoline()\n\n//go:linkname libc_openat libc_openat\n//go:cgo_import_dynamic libc_openat openat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall(funcPC(libc_pathconf_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_pathconf_trampoline()\n\n//go:linkname libc_pathconf libc_pathconf\n//go:cgo_import_dynamic libc_pathconf pathconf \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(funcPC(libc_pread_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_pread_trampoline()\n\n//go:linkname libc_pread libc_pread\n//go:cgo_import_dynamic libc_pread pread \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(funcPC(libc_pwrite_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_pwrite_trampoline()\n\n//go:linkname libc_pwrite libc_pwrite\n//go:cgo_import_dynamic libc_pwrite pwrite \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(funcPC(libc_read_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_read_trampoline()\n\n//go:linkname libc_read libc_read\n//go:cgo_import_dynamic libc_read read \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(funcPC(libc_readlink_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_readlink_trampoline()\n\n//go:linkname libc_readlink libc_readlink\n//go:cgo_import_dynamic libc_readlink readlink \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(funcPC(libc_readlinkat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_readlinkat_trampoline()\n\n//go:linkname libc_readlinkat libc_readlinkat\n//go:cgo_import_dynamic libc_readlinkat readlinkat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_rename_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_rename_trampoline()\n\n//go:linkname libc_rename libc_rename\n//go:cgo_import_dynamic libc_rename rename \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(fromfd int, from string, tofd int, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(funcPC(libc_renameat_trampoline), uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_renameat_trampoline()\n\n//go:linkname libc_renameat libc_renameat\n//go:cgo_import_dynamic libc_renameat renameat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Revoke(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_revoke_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_revoke_trampoline()\n\n//go:linkname libc_revoke libc_revoke\n//go:cgo_import_dynamic libc_revoke revoke \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_rmdir_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_rmdir_trampoline()\n\n//go:linkname libc_rmdir libc_rmdir\n//go:cgo_import_dynamic libc_rmdir rmdir \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, _, e1 := syscall_syscall(funcPC(libc_lseek_trampoline), uintptr(fd), uintptr(offset), uintptr(whence))\n\tnewoffset = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_lseek_trampoline()\n\n//go:linkname libc_lseek libc_lseek\n//go:cgo_import_dynamic libc_lseek lseek \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) {\n\t_, _, e1 := syscall_syscall6(funcPC(libc_select_trampoline), uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_select_trampoline()\n\n//go:linkname libc_select libc_select\n//go:cgo_import_dynamic libc_select select \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_setegid_trampoline), uintptr(egid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_setegid_trampoline()\n\n//go:linkname libc_setegid libc_setegid\n//go:cgo_import_dynamic libc_setegid setegid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(funcPC(libc_seteuid_trampoline), uintptr(euid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_seteuid_trampoline()\n\n//go:linkname libc_seteuid libc_seteuid\n//go:cgo_import_dynamic libc_seteuid seteuid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(funcPC(libc_setgid_trampoline), uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_setgid_trampoline()\n\n//go:linkname libc_setgid libc_setgid\n//go:cgo_import_dynamic libc_setgid setgid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setlogin(name string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_setlogin_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_setlogin_trampoline()\n\n//go:linkname libc_setlogin libc_setlogin\n//go:cgo_import_dynamic libc_setlogin setlogin \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(funcPC(libc_setpgid_trampoline), uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_setpgid_trampoline()\n\n//go:linkname libc_setpgid libc_setpgid\n//go:cgo_import_dynamic libc_setpgid setpgid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_setpriority_trampoline), uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_setpriority_trampoline()\n\n//go:linkname libc_setpriority libc_setpriority\n//go:cgo_import_dynamic libc_setpriority setpriority \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setprivexec(flag int) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_setprivexec_trampoline), uintptr(flag), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_setprivexec_trampoline()\n\n//go:linkname libc_setprivexec libc_setprivexec\n//go:cgo_import_dynamic libc_setprivexec setprivexec \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(funcPC(libc_setregid_trampoline), uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_setregid_trampoline()\n\n//go:linkname libc_setregid libc_setregid\n//go:cgo_import_dynamic libc_setregid setregid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(funcPC(libc_setreuid_trampoline), uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_setreuid_trampoline()\n\n//go:linkname libc_setreuid libc_setreuid\n//go:cgo_import_dynamic libc_setreuid setreuid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := syscall_rawSyscall(funcPC(libc_setrlimit_trampoline), uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_setrlimit_trampoline()\n\n//go:linkname libc_setrlimit libc_setrlimit\n//go:cgo_import_dynamic libc_setrlimit setrlimit \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(funcPC(libc_setsid_trampoline), 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_setsid_trampoline()\n\n//go:linkname libc_setsid libc_setsid\n//go:cgo_import_dynamic libc_setsid setsid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := syscall_rawSyscall(funcPC(libc_settimeofday_trampoline), uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_settimeofday_trampoline()\n\n//go:linkname libc_settimeofday libc_settimeofday\n//go:cgo_import_dynamic libc_settimeofday settimeofday \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(funcPC(libc_setuid_trampoline), uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_setuid_trampoline()\n\n//go:linkname libc_setuid libc_setuid\n//go:cgo_import_dynamic libc_setuid setuid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_symlink_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_symlink_trampoline()\n\n//go:linkname libc_symlink libc_symlink\n//go:cgo_import_dynamic libc_symlink symlink \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_symlinkat_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_symlinkat_trampoline()\n\n//go:linkname libc_symlinkat libc_symlinkat\n//go:cgo_import_dynamic libc_symlinkat symlinkat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_sync_trampoline), 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_sync_trampoline()\n\n//go:linkname libc_sync libc_sync\n//go:cgo_import_dynamic libc_sync sync \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_truncate_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_truncate_trampoline()\n\n//go:linkname libc_truncate libc_truncate\n//go:cgo_import_dynamic libc_truncate truncate \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(newmask int) (oldmask int) {\n\tr0, _, _ := syscall_syscall(funcPC(libc_umask_trampoline), uintptr(newmask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\nfunc libc_umask_trampoline()\n\n//go:linkname libc_umask libc_umask\n//go:cgo_import_dynamic libc_umask umask \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Undelete(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_undelete_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_undelete_trampoline()\n\n//go:linkname libc_undelete libc_undelete\n//go:cgo_import_dynamic libc_undelete undelete \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_unlink_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_unlink_trampoline()\n\n//go:linkname libc_unlink libc_unlink\n//go:cgo_import_dynamic libc_unlink unlink \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_unlinkat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_unlinkat_trampoline()\n\n//go:linkname libc_unlinkat libc_unlinkat\n//go:cgo_import_dynamic libc_unlinkat unlinkat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_unmount_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_unmount_trampoline()\n\n//go:linkname libc_unmount libc_unmount\n//go:cgo_import_dynamic libc_unmount unmount \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(funcPC(libc_write_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_write_trampoline()\n\n//go:linkname libc_write libc_write\n//go:cgo_import_dynamic libc_write write \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := syscall_syscall6(funcPC(libc_mmap_trampoline), uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos))\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_mmap_trampoline()\n\n//go:linkname libc_mmap libc_mmap\n//go:cgo_import_dynamic libc_mmap mmap \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_munmap_trampoline), uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_munmap_trampoline()\n\n//go:linkname libc_munmap libc_munmap\n//go:cgo_import_dynamic libc_munmap munmap \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc readlen(fd int, buf *byte, nbuf int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(funcPC(libc_read_trampoline), uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc writelen(fd int, buf *byte, nbuf int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(funcPC(libc_write_trampoline), uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc gettimeofday(tp *Timeval) (sec int64, usec int32, err error) {\n\tr0, r1, e1 := syscall_rawSyscall(funcPC(libc_gettimeofday_trampoline), uintptr(unsafe.Pointer(tp)), 0, 0)\n\tsec = int64(r0)\n\tusec = int32(r1)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_gettimeofday_trampoline()\n\n//go:linkname libc_gettimeofday libc_gettimeofday\n//go:cgo_import_dynamic libc_gettimeofday gettimeofday \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_fstat64_trampoline), uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_fstat64_trampoline()\n\n//go:linkname libc_fstat64 libc_fstat64\n//go:cgo_import_dynamic libc_fstat64 fstat64 \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(funcPC(libc_fstatat64_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_fstatat64_trampoline()\n\n//go:linkname libc_fstatat64 libc_fstatat64\n//go:cgo_import_dynamic libc_fstatat64 fstatat64 \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, stat *Statfs_t) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_fstatfs64_trampoline), uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_fstatfs64_trampoline()\n\n//go:linkname libc_fstatfs64 libc_fstatfs64\n//go:cgo_import_dynamic libc_fstatfs64 fstatfs64 \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(funcPC(libc___getdirentries64_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc___getdirentries64_trampoline()\n\n//go:linkname libc___getdirentries64 libc___getdirentries64\n//go:cgo_import_dynamic libc___getdirentries64 __getdirentries64 \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(funcPC(libc_getfsstat64_trampoline), uintptr(buf), uintptr(size), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_getfsstat64_trampoline()\n\n//go:linkname libc_getfsstat64 libc_getfsstat64\n//go:cgo_import_dynamic libc_getfsstat64 getfsstat64 \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_lstat64_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_lstat64_trampoline()\n\n//go:linkname libc_lstat64 libc_lstat64\n//go:cgo_import_dynamic libc_lstat64 lstat64 \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_stat64_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_stat64_trampoline()\n\n//go:linkname libc_stat64 libc_stat64\n//go:cgo_import_dynamic libc_stat64 stat64 \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, stat *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_statfs64_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_statfs64_trampoline()\n\n//go:linkname libc_statfs64 libc_statfs64\n//go:cgo_import_dynamic libc_statfs64 statfs64 \"/usr/lib/libSystem.B.dylib\"\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s",
    "content": "// go run mkasm_darwin.go amd64\n// Code generated by the command above; DO NOT EDIT.\n\n// +build go1.12\n\n#include \"textflag.h\"\nTEXT ·libc_getgroups_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getgroups(SB)\nTEXT ·libc_setgroups_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setgroups(SB)\nTEXT ·libc_wait4_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_wait4(SB)\nTEXT ·libc_accept_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_accept(SB)\nTEXT ·libc_bind_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_bind(SB)\nTEXT ·libc_connect_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_connect(SB)\nTEXT ·libc_socket_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_socket(SB)\nTEXT ·libc_getsockopt_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getsockopt(SB)\nTEXT ·libc_setsockopt_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setsockopt(SB)\nTEXT ·libc_getpeername_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpeername(SB)\nTEXT ·libc_getsockname_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getsockname(SB)\nTEXT ·libc_shutdown_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_shutdown(SB)\nTEXT ·libc_socketpair_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_socketpair(SB)\nTEXT ·libc_recvfrom_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_recvfrom(SB)\nTEXT ·libc_sendto_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sendto(SB)\nTEXT ·libc_recvmsg_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_recvmsg(SB)\nTEXT ·libc_sendmsg_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sendmsg(SB)\nTEXT ·libc_kevent_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_kevent(SB)\nTEXT ·libc___sysctl_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc___sysctl(SB)\nTEXT ·libc_utimes_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_utimes(SB)\nTEXT ·libc_futimes_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_futimes(SB)\nTEXT ·libc_fcntl_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fcntl(SB)\nTEXT ·libc_poll_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_poll(SB)\nTEXT ·libc_madvise_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_madvise(SB)\nTEXT ·libc_mlock_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mlock(SB)\nTEXT ·libc_mlockall_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mlockall(SB)\nTEXT ·libc_mprotect_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mprotect(SB)\nTEXT ·libc_msync_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_msync(SB)\nTEXT ·libc_munlock_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_munlock(SB)\nTEXT ·libc_munlockall_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_munlockall(SB)\nTEXT ·libc_ptrace_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_ptrace(SB)\nTEXT ·libc_getattrlist_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getattrlist(SB)\nTEXT ·libc_pipe_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pipe(SB)\nTEXT ·libc_getxattr_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getxattr(SB)\nTEXT ·libc_fgetxattr_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fgetxattr(SB)\nTEXT ·libc_setxattr_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setxattr(SB)\nTEXT ·libc_fsetxattr_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fsetxattr(SB)\nTEXT ·libc_removexattr_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_removexattr(SB)\nTEXT ·libc_fremovexattr_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fremovexattr(SB)\nTEXT ·libc_listxattr_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_listxattr(SB)\nTEXT ·libc_flistxattr_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_flistxattr(SB)\nTEXT ·libc_setattrlist_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setattrlist(SB)\nTEXT ·libc_kill_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_kill(SB)\nTEXT ·libc_ioctl_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_ioctl(SB)\nTEXT ·libc_sendfile_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sendfile(SB)\nTEXT ·libc_access_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_access(SB)\nTEXT ·libc_adjtime_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_adjtime(SB)\nTEXT ·libc_chdir_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chdir(SB)\nTEXT ·libc_chflags_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chflags(SB)\nTEXT ·libc_chmod_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chmod(SB)\nTEXT ·libc_chown_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chown(SB)\nTEXT ·libc_chroot_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chroot(SB)\nTEXT ·libc_clock_gettime_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_clock_gettime(SB)\nTEXT ·libc_close_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_close(SB)\nTEXT ·libc_dup_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_dup(SB)\nTEXT ·libc_dup2_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_dup2(SB)\nTEXT ·libc_exchangedata_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_exchangedata(SB)\nTEXT ·libc_exit_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_exit(SB)\nTEXT ·libc_faccessat_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_faccessat(SB)\nTEXT ·libc_fchdir_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchdir(SB)\nTEXT ·libc_fchflags_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchflags(SB)\nTEXT ·libc_fchmod_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchmod(SB)\nTEXT ·libc_fchmodat_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchmodat(SB)\nTEXT ·libc_fchown_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchown(SB)\nTEXT ·libc_fchownat_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchownat(SB)\nTEXT ·libc_flock_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_flock(SB)\nTEXT ·libc_fpathconf_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fpathconf(SB)\nTEXT ·libc_fsync_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fsync(SB)\nTEXT ·libc_ftruncate_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_ftruncate(SB)\nTEXT ·libc_getdtablesize_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getdtablesize(SB)\nTEXT ·libc_getegid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getegid(SB)\nTEXT ·libc_geteuid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_geteuid(SB)\nTEXT ·libc_getgid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getgid(SB)\nTEXT ·libc_getpgid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpgid(SB)\nTEXT ·libc_getpgrp_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpgrp(SB)\nTEXT ·libc_getpid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpid(SB)\nTEXT ·libc_getppid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getppid(SB)\nTEXT ·libc_getpriority_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpriority(SB)\nTEXT ·libc_getrlimit_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getrlimit(SB)\nTEXT ·libc_getrusage_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getrusage(SB)\nTEXT ·libc_getsid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getsid(SB)\nTEXT ·libc_getuid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getuid(SB)\nTEXT ·libc_issetugid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_issetugid(SB)\nTEXT ·libc_kqueue_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_kqueue(SB)\nTEXT ·libc_lchown_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_lchown(SB)\nTEXT ·libc_link_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_link(SB)\nTEXT ·libc_linkat_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_linkat(SB)\nTEXT ·libc_listen_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_listen(SB)\nTEXT ·libc_mkdir_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkdir(SB)\nTEXT ·libc_mkdirat_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkdirat(SB)\nTEXT ·libc_mkfifo_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkfifo(SB)\nTEXT ·libc_mknod_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mknod(SB)\nTEXT ·libc_open_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_open(SB)\nTEXT ·libc_openat_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_openat(SB)\nTEXT ·libc_pathconf_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pathconf(SB)\nTEXT ·libc_pread_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pread(SB)\nTEXT ·libc_pwrite_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pwrite(SB)\nTEXT ·libc_read_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_read(SB)\nTEXT ·libc_readlink_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_readlink(SB)\nTEXT ·libc_readlinkat_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_readlinkat(SB)\nTEXT ·libc_rename_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_rename(SB)\nTEXT ·libc_renameat_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_renameat(SB)\nTEXT ·libc_revoke_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_revoke(SB)\nTEXT ·libc_rmdir_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_rmdir(SB)\nTEXT ·libc_lseek_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_lseek(SB)\nTEXT ·libc_select_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_select(SB)\nTEXT ·libc_setegid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setegid(SB)\nTEXT ·libc_seteuid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_seteuid(SB)\nTEXT ·libc_setgid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setgid(SB)\nTEXT ·libc_setlogin_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setlogin(SB)\nTEXT ·libc_setpgid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setpgid(SB)\nTEXT ·libc_setpriority_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setpriority(SB)\nTEXT ·libc_setprivexec_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setprivexec(SB)\nTEXT ·libc_setregid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setregid(SB)\nTEXT ·libc_setreuid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setreuid(SB)\nTEXT ·libc_setrlimit_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setrlimit(SB)\nTEXT ·libc_setsid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setsid(SB)\nTEXT ·libc_settimeofday_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_settimeofday(SB)\nTEXT ·libc_setuid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setuid(SB)\nTEXT ·libc_symlink_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_symlink(SB)\nTEXT ·libc_symlinkat_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_symlinkat(SB)\nTEXT ·libc_sync_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sync(SB)\nTEXT ·libc_truncate_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_truncate(SB)\nTEXT ·libc_umask_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_umask(SB)\nTEXT ·libc_undelete_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_undelete(SB)\nTEXT ·libc_unlink_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unlink(SB)\nTEXT ·libc_unlinkat_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unlinkat(SB)\nTEXT ·libc_unmount_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unmount(SB)\nTEXT ·libc_write_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_write(SB)\nTEXT ·libc_mmap_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mmap(SB)\nTEXT ·libc_munmap_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_munmap(SB)\nTEXT ·libc_gettimeofday_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_gettimeofday(SB)\nTEXT ·libc_fstat64_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fstat64(SB)\nTEXT ·libc_fstatat64_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fstatat64(SB)\nTEXT ·libc_fstatfs64_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fstatfs64(SB)\nTEXT ·libc___getdirentries64_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc___getdirentries64(SB)\nTEXT ·libc_getfsstat64_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getfsstat64(SB)\nTEXT ·libc_lstat64_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_lstat64(SB)\nTEXT ·libc_stat64_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_stat64(SB)\nTEXT ·libc_statfs64_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_statfs64(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.1_11.go",
    "content": "// go run mksyscall.go -l32 -tags darwin,arm,!go1.12 syscall_bsd.go syscall_darwin.go syscall_darwin_arm.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build darwin,arm,!go1.12\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(mib) > 0 {\n\t\t_p0 = unsafe.Pointer(&mib[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, timeval *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimes(fd int, timeval *[2]Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, behav int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETATTRLIST, uintptr(unsafe.Pointer(path)), uintptr(list), uintptr(buf), uintptr(size), uintptr(options), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe() (r int, w int, err error) {\n\tr0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0)\n\tr = int(r0)\n\tw = int(r1)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getxattr(path string, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fgetxattr(fd int, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setxattr(path string, attr string, data *byte, size int, position uint32, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fsetxattr(fd int, attr string, data *byte, size int, position uint32, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc removexattr(path string, attr string, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fremovexattr(fd int, attr string, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(options))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc listxattr(path string, dest *byte, size int, options int) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc flistxattr(fd int, dest *byte, size int, options int) (sz int, err error) {\n\tr0, _, e1 := Syscall6(SYS_FLISTXATTR, uintptr(fd), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETATTRLIST, uintptr(unsafe.Pointer(path)), uintptr(list), uintptr(buf), uintptr(size), uintptr(options), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kill(pid int, signum int, posix int) (err error) {\n\t_, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), uintptr(posix))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) {\n\t_, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(offset), uintptr(offset>>32), uintptr(unsafe.Pointer(len)), uintptr(hdtr), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chflags(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(from int, to int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exchangedata(path1 string, path2 string, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path1)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(path2)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXCHANGEDATA, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tSyscall(SYS_EXIT, uintptr(code), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchflags(fd int, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), uintptr(length>>32))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdtablesize() (size int) {\n\tr0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0)\n\tsize = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgrp int) {\n\tr0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)\n\tpgrp = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Issetugid() (tainted bool) {\n\tr0, _, _ := RawSyscall(SYS_ISSETUGID, 0, 0, 0)\n\ttainted = bool(r0 != 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kqueue() (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknod(path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(fromfd int, from string, tofd int, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Revoke(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(whence), 0, 0)\n\tnewoffset = int64(int64(r1)<<32 | int64(r0))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) {\n\t_, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETEGID, uintptr(egid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setlogin(name string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setprivexec(flag int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETPRIVEXEC, uintptr(flag), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), uintptr(length>>32))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(newmask int) (oldmask int) {\n\tr0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Undelete(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos), uintptr(pos>>32), 0, 0)\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc readlen(fd int, buf *byte, nbuf int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc writelen(fd int, buf *byte, nbuf int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc gettimeofday(tp *Timeval) (sec int32, usec int32, err error) {\n\tr0, r1, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tsec = int32(r0)\n\tusec = int32(r1)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, stat *Statfs_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_GETFSSTAT, uintptr(buf), uintptr(size), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, stat *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go",
    "content": "// go run mksyscall.go -l32 -tags darwin,arm,go1.12 syscall_bsd.go syscall_darwin.go syscall_darwin_arm.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build darwin,arm,go1.12\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(funcPC(libc_getgroups_trampoline), uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_getgroups_trampoline()\n\n//go:linkname libc_getgroups libc_getgroups\n//go:cgo_import_dynamic libc_getgroups getgroups \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := syscall_rawSyscall(funcPC(libc_setgroups_trampoline), uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_setgroups_trampoline()\n\n//go:linkname libc_setgroups libc_setgroups\n//go:cgo_import_dynamic libc_setgroups setgroups \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := syscall_syscall6(funcPC(libc_wait4_trampoline), uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_wait4_trampoline()\n\n//go:linkname libc_wait4 libc_wait4\n//go:cgo_import_dynamic libc_wait4 wait4 \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := syscall_syscall(funcPC(libc_accept_trampoline), uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_accept_trampoline()\n\n//go:linkname libc_accept libc_accept\n//go:cgo_import_dynamic libc_accept accept \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_bind_trampoline), uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_bind_trampoline()\n\n//go:linkname libc_bind libc_bind\n//go:cgo_import_dynamic libc_bind bind \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_connect_trampoline), uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_connect_trampoline()\n\n//go:linkname libc_connect libc_connect\n//go:cgo_import_dynamic libc_connect connect \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(funcPC(libc_socket_trampoline), uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_socket_trampoline()\n\n//go:linkname libc_socket libc_socket\n//go:cgo_import_dynamic libc_socket socket \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := syscall_syscall6(funcPC(libc_getsockopt_trampoline), uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_getsockopt_trampoline()\n\n//go:linkname libc_getsockopt libc_getsockopt\n//go:cgo_import_dynamic libc_getsockopt getsockopt \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := syscall_syscall6(funcPC(libc_setsockopt_trampoline), uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_setsockopt_trampoline()\n\n//go:linkname libc_setsockopt libc_setsockopt\n//go:cgo_import_dynamic libc_setsockopt setsockopt \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := syscall_rawSyscall(funcPC(libc_getpeername_trampoline), uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_getpeername_trampoline()\n\n//go:linkname libc_getpeername libc_getpeername\n//go:cgo_import_dynamic libc_getpeername getpeername \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := syscall_rawSyscall(funcPC(libc_getsockname_trampoline), uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_getsockname_trampoline()\n\n//go:linkname libc_getsockname libc_getsockname\n//go:cgo_import_dynamic libc_getsockname getsockname \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_shutdown_trampoline), uintptr(s), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_shutdown_trampoline()\n\n//go:linkname libc_shutdown libc_shutdown\n//go:cgo_import_dynamic libc_shutdown shutdown \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := syscall_rawSyscall6(funcPC(libc_socketpair_trampoline), uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_socketpair_trampoline()\n\n//go:linkname libc_socketpair libc_socketpair\n//go:cgo_import_dynamic libc_socketpair socketpair \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(funcPC(libc_recvfrom_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_recvfrom_trampoline()\n\n//go:linkname libc_recvfrom libc_recvfrom\n//go:cgo_import_dynamic libc_recvfrom recvfrom \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall6(funcPC(libc_sendto_trampoline), uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_sendto_trampoline()\n\n//go:linkname libc_sendto libc_sendto\n//go:cgo_import_dynamic libc_sendto sendto \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(funcPC(libc_recvmsg_trampoline), uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_recvmsg_trampoline()\n\n//go:linkname libc_recvmsg libc_recvmsg\n//go:cgo_import_dynamic libc_recvmsg recvmsg \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(funcPC(libc_sendmsg_trampoline), uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_sendmsg_trampoline()\n\n//go:linkname libc_sendmsg libc_sendmsg\n//go:cgo_import_dynamic libc_sendmsg sendmsg \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := syscall_syscall6(funcPC(libc_kevent_trampoline), uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_kevent_trampoline()\n\n//go:linkname libc_kevent libc_kevent\n//go:cgo_import_dynamic libc_kevent kevent \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(mib) > 0 {\n\t\t_p0 = unsafe.Pointer(&mib[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall6(funcPC(libc___sysctl_trampoline), uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc___sysctl_trampoline()\n\n//go:linkname libc___sysctl libc___sysctl\n//go:cgo_import_dynamic libc___sysctl __sysctl \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, timeval *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_utimes_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_utimes_trampoline()\n\n//go:linkname libc_utimes libc_utimes\n//go:cgo_import_dynamic libc_utimes utimes \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimes(fd int, timeval *[2]Timeval) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_futimes_trampoline), uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_futimes_trampoline()\n\n//go:linkname libc_futimes libc_futimes\n//go:cgo_import_dynamic libc_futimes futimes \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (val int, err error) {\n\tr0, _, e1 := syscall_syscall(funcPC(libc_fcntl_trampoline), uintptr(fd), uintptr(cmd), uintptr(arg))\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_fcntl_trampoline()\n\n//go:linkname libc_fcntl libc_fcntl\n//go:cgo_import_dynamic libc_fcntl fcntl \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(funcPC(libc_poll_trampoline), uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_poll_trampoline()\n\n//go:linkname libc_poll libc_poll\n//go:cgo_import_dynamic libc_poll poll \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, behav int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_madvise_trampoline), uintptr(_p0), uintptr(len(b)), uintptr(behav))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_madvise_trampoline()\n\n//go:linkname libc_madvise libc_madvise\n//go:cgo_import_dynamic libc_madvise madvise \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_mlock_trampoline), uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_mlock_trampoline()\n\n//go:linkname libc_mlock libc_mlock\n//go:cgo_import_dynamic libc_mlock mlock \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_mlockall_trampoline), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_mlockall_trampoline()\n\n//go:linkname libc_mlockall libc_mlockall\n//go:cgo_import_dynamic libc_mlockall mlockall \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_mprotect_trampoline), uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_mprotect_trampoline()\n\n//go:linkname libc_mprotect libc_mprotect\n//go:cgo_import_dynamic libc_mprotect mprotect \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_msync_trampoline), uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_msync_trampoline()\n\n//go:linkname libc_msync libc_msync\n//go:cgo_import_dynamic libc_msync msync \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_munlock_trampoline), uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_munlock_trampoline()\n\n//go:linkname libc_munlock libc_munlock\n//go:cgo_import_dynamic libc_munlock munlock \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_munlockall_trampoline), 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_munlockall_trampoline()\n\n//go:linkname libc_munlockall libc_munlockall\n//go:cgo_import_dynamic libc_munlockall munlockall \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {\n\t_, _, e1 := syscall_syscall6(funcPC(libc_ptrace_trampoline), uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_ptrace_trampoline()\n\n//go:linkname libc_ptrace libc_ptrace\n//go:cgo_import_dynamic libc_ptrace ptrace \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) {\n\t_, _, e1 := syscall_syscall6(funcPC(libc_getattrlist_trampoline), uintptr(unsafe.Pointer(path)), uintptr(list), uintptr(buf), uintptr(size), uintptr(options), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_getattrlist_trampoline()\n\n//go:linkname libc_getattrlist libc_getattrlist\n//go:cgo_import_dynamic libc_getattrlist getattrlist \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe() (r int, w int, err error) {\n\tr0, r1, e1 := syscall_rawSyscall(funcPC(libc_pipe_trampoline), 0, 0, 0)\n\tr = int(r0)\n\tw = int(r1)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_pipe_trampoline()\n\n//go:linkname libc_pipe libc_pipe\n//go:cgo_import_dynamic libc_pipe pipe \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getxattr(path string, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall6(funcPC(libc_getxattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_getxattr_trampoline()\n\n//go:linkname libc_getxattr libc_getxattr\n//go:cgo_import_dynamic libc_getxattr getxattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fgetxattr(fd int, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall6(funcPC(libc_fgetxattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_fgetxattr_trampoline()\n\n//go:linkname libc_fgetxattr libc_fgetxattr\n//go:cgo_import_dynamic libc_fgetxattr fgetxattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setxattr(path string, attr string, data *byte, size int, position uint32, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(funcPC(libc_setxattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_setxattr_trampoline()\n\n//go:linkname libc_setxattr libc_setxattr\n//go:cgo_import_dynamic libc_setxattr setxattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fsetxattr(fd int, attr string, data *byte, size int, position uint32, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(funcPC(libc_fsetxattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_fsetxattr_trampoline()\n\n//go:linkname libc_fsetxattr libc_fsetxattr\n//go:cgo_import_dynamic libc_fsetxattr fsetxattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc removexattr(path string, attr string, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_removexattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_removexattr_trampoline()\n\n//go:linkname libc_removexattr libc_removexattr\n//go:cgo_import_dynamic libc_removexattr removexattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fremovexattr(fd int, attr string, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_fremovexattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(options))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_fremovexattr_trampoline()\n\n//go:linkname libc_fremovexattr libc_fremovexattr\n//go:cgo_import_dynamic libc_fremovexattr fremovexattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc listxattr(path string, dest *byte, size int, options int) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall6(funcPC(libc_listxattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_listxattr_trampoline()\n\n//go:linkname libc_listxattr libc_listxattr\n//go:cgo_import_dynamic libc_listxattr listxattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc flistxattr(fd int, dest *byte, size int, options int) (sz int, err error) {\n\tr0, _, e1 := syscall_syscall6(funcPC(libc_flistxattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_flistxattr_trampoline()\n\n//go:linkname libc_flistxattr libc_flistxattr\n//go:cgo_import_dynamic libc_flistxattr flistxattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) {\n\t_, _, e1 := syscall_syscall6(funcPC(libc_setattrlist_trampoline), uintptr(unsafe.Pointer(path)), uintptr(list), uintptr(buf), uintptr(size), uintptr(options), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_setattrlist_trampoline()\n\n//go:linkname libc_setattrlist libc_setattrlist\n//go:cgo_import_dynamic libc_setattrlist setattrlist \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kill(pid int, signum int, posix int) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_kill_trampoline), uintptr(pid), uintptr(signum), uintptr(posix))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_kill_trampoline()\n\n//go:linkname libc_kill libc_kill\n//go:cgo_import_dynamic libc_kill kill \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_ioctl_trampoline), uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_ioctl_trampoline()\n\n//go:linkname libc_ioctl libc_ioctl\n//go:cgo_import_dynamic libc_ioctl ioctl \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) {\n\t_, _, e1 := syscall_syscall9(funcPC(libc_sendfile_trampoline), uintptr(infd), uintptr(outfd), uintptr(offset), uintptr(offset>>32), uintptr(unsafe.Pointer(len)), uintptr(hdtr), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_sendfile_trampoline()\n\n//go:linkname libc_sendfile libc_sendfile\n//go:cgo_import_dynamic libc_sendfile sendfile \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_access_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_access_trampoline()\n\n//go:linkname libc_access libc_access\n//go:cgo_import_dynamic libc_access access \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_adjtime_trampoline), uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_adjtime_trampoline()\n\n//go:linkname libc_adjtime libc_adjtime\n//go:cgo_import_dynamic libc_adjtime adjtime \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_chdir_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_chdir_trampoline()\n\n//go:linkname libc_chdir libc_chdir\n//go:cgo_import_dynamic libc_chdir chdir \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chflags(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_chflags_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_chflags_trampoline()\n\n//go:linkname libc_chflags libc_chflags\n//go:cgo_import_dynamic libc_chflags chflags \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_chmod_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_chmod_trampoline()\n\n//go:linkname libc_chmod libc_chmod\n//go:cgo_import_dynamic libc_chmod chmod \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_chown_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_chown_trampoline()\n\n//go:linkname libc_chown libc_chown\n//go:cgo_import_dynamic libc_chown chown \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_chroot_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_chroot_trampoline()\n\n//go:linkname libc_chroot libc_chroot\n//go:cgo_import_dynamic libc_chroot chroot \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_close_trampoline), uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_close_trampoline()\n\n//go:linkname libc_close libc_close\n//go:cgo_import_dynamic libc_close close \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := syscall_syscall(funcPC(libc_dup_trampoline), uintptr(fd), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_dup_trampoline()\n\n//go:linkname libc_dup libc_dup\n//go:cgo_import_dynamic libc_dup dup \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(from int, to int) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_dup2_trampoline), uintptr(from), uintptr(to), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_dup2_trampoline()\n\n//go:linkname libc_dup2 libc_dup2\n//go:cgo_import_dynamic libc_dup2 dup2 \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exchangedata(path1 string, path2 string, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path1)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(path2)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_exchangedata_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_exchangedata_trampoline()\n\n//go:linkname libc_exchangedata libc_exchangedata\n//go:cgo_import_dynamic libc_exchangedata exchangedata \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tsyscall_syscall(funcPC(libc_exit_trampoline), uintptr(code), 0, 0)\n\treturn\n}\n\nfunc libc_exit_trampoline()\n\n//go:linkname libc_exit libc_exit\n//go:cgo_import_dynamic libc_exit exit \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(funcPC(libc_faccessat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_faccessat_trampoline()\n\n//go:linkname libc_faccessat libc_faccessat\n//go:cgo_import_dynamic libc_faccessat faccessat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_fchdir_trampoline), uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_fchdir_trampoline()\n\n//go:linkname libc_fchdir libc_fchdir\n//go:cgo_import_dynamic libc_fchdir fchdir \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchflags(fd int, flags int) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_fchflags_trampoline), uintptr(fd), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_fchflags_trampoline()\n\n//go:linkname libc_fchflags libc_fchflags\n//go:cgo_import_dynamic libc_fchflags fchflags \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_fchmod_trampoline), uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_fchmod_trampoline()\n\n//go:linkname libc_fchmod libc_fchmod\n//go:cgo_import_dynamic libc_fchmod fchmod \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(funcPC(libc_fchmodat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_fchmodat_trampoline()\n\n//go:linkname libc_fchmodat libc_fchmodat\n//go:cgo_import_dynamic libc_fchmodat fchmodat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_fchown_trampoline), uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_fchown_trampoline()\n\n//go:linkname libc_fchown libc_fchown\n//go:cgo_import_dynamic libc_fchown fchown \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(funcPC(libc_fchownat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_fchownat_trampoline()\n\n//go:linkname libc_fchownat libc_fchownat\n//go:cgo_import_dynamic libc_fchownat fchownat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_flock_trampoline), uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_flock_trampoline()\n\n//go:linkname libc_flock libc_flock\n//go:cgo_import_dynamic libc_flock flock \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := syscall_syscall(funcPC(libc_fpathconf_trampoline), uintptr(fd), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_fpathconf_trampoline()\n\n//go:linkname libc_fpathconf libc_fpathconf\n//go:cgo_import_dynamic libc_fpathconf fpathconf \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_fsync_trampoline), uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_fsync_trampoline()\n\n//go:linkname libc_fsync libc_fsync\n//go:cgo_import_dynamic libc_fsync fsync \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_ftruncate_trampoline), uintptr(fd), uintptr(length), uintptr(length>>32))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_ftruncate_trampoline()\n\n//go:linkname libc_ftruncate libc_ftruncate\n//go:cgo_import_dynamic libc_ftruncate ftruncate \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdtablesize() (size int) {\n\tr0, _, _ := syscall_syscall(funcPC(libc_getdtablesize_trampoline), 0, 0, 0)\n\tsize = int(r0)\n\treturn\n}\n\nfunc libc_getdtablesize_trampoline()\n\n//go:linkname libc_getdtablesize libc_getdtablesize\n//go:cgo_import_dynamic libc_getdtablesize getdtablesize \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := syscall_rawSyscall(funcPC(libc_getegid_trampoline), 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\nfunc libc_getegid_trampoline()\n\n//go:linkname libc_getegid libc_getegid\n//go:cgo_import_dynamic libc_getegid getegid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (uid int) {\n\tr0, _, _ := syscall_rawSyscall(funcPC(libc_geteuid_trampoline), 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\nfunc libc_geteuid_trampoline()\n\n//go:linkname libc_geteuid libc_geteuid\n//go:cgo_import_dynamic libc_geteuid geteuid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := syscall_rawSyscall(funcPC(libc_getgid_trampoline), 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\nfunc libc_getgid_trampoline()\n\n//go:linkname libc_getgid libc_getgid\n//go:cgo_import_dynamic libc_getgid getgid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(funcPC(libc_getpgid_trampoline), uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_getpgid_trampoline()\n\n//go:linkname libc_getpgid libc_getpgid\n//go:cgo_import_dynamic libc_getpgid getpgid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgrp int) {\n\tr0, _, _ := syscall_rawSyscall(funcPC(libc_getpgrp_trampoline), 0, 0, 0)\n\tpgrp = int(r0)\n\treturn\n}\n\nfunc libc_getpgrp_trampoline()\n\n//go:linkname libc_getpgrp libc_getpgrp\n//go:cgo_import_dynamic libc_getpgrp getpgrp \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := syscall_rawSyscall(funcPC(libc_getpid_trampoline), 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\nfunc libc_getpid_trampoline()\n\n//go:linkname libc_getpid libc_getpid\n//go:cgo_import_dynamic libc_getpid getpid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := syscall_rawSyscall(funcPC(libc_getppid_trampoline), 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\nfunc libc_getppid_trampoline()\n\n//go:linkname libc_getppid libc_getppid\n//go:cgo_import_dynamic libc_getppid getppid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := syscall_syscall(funcPC(libc_getpriority_trampoline), uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_getpriority_trampoline()\n\n//go:linkname libc_getpriority libc_getpriority\n//go:cgo_import_dynamic libc_getpriority getpriority \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := syscall_rawSyscall(funcPC(libc_getrlimit_trampoline), uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_getrlimit_trampoline()\n\n//go:linkname libc_getrlimit libc_getrlimit\n//go:cgo_import_dynamic libc_getrlimit getrlimit \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := syscall_rawSyscall(funcPC(libc_getrusage_trampoline), uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_getrusage_trampoline()\n\n//go:linkname libc_getrusage libc_getrusage\n//go:cgo_import_dynamic libc_getrusage getrusage \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(funcPC(libc_getsid_trampoline), uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_getsid_trampoline()\n\n//go:linkname libc_getsid libc_getsid\n//go:cgo_import_dynamic libc_getsid getsid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := syscall_rawSyscall(funcPC(libc_getuid_trampoline), 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\nfunc libc_getuid_trampoline()\n\n//go:linkname libc_getuid libc_getuid\n//go:cgo_import_dynamic libc_getuid getuid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Issetugid() (tainted bool) {\n\tr0, _, _ := syscall_rawSyscall(funcPC(libc_issetugid_trampoline), 0, 0, 0)\n\ttainted = bool(r0 != 0)\n\treturn\n}\n\nfunc libc_issetugid_trampoline()\n\n//go:linkname libc_issetugid libc_issetugid\n//go:cgo_import_dynamic libc_issetugid issetugid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kqueue() (fd int, err error) {\n\tr0, _, e1 := syscall_syscall(funcPC(libc_kqueue_trampoline), 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_kqueue_trampoline()\n\n//go:linkname libc_kqueue libc_kqueue\n//go:cgo_import_dynamic libc_kqueue kqueue \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_lchown_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_lchown_trampoline()\n\n//go:linkname libc_lchown libc_lchown\n//go:cgo_import_dynamic libc_lchown lchown \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_link_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_link_trampoline()\n\n//go:linkname libc_link libc_link\n//go:cgo_import_dynamic libc_link link \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(funcPC(libc_linkat_trampoline), uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_linkat_trampoline()\n\n//go:linkname libc_linkat libc_linkat\n//go:cgo_import_dynamic libc_linkat linkat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_listen_trampoline), uintptr(s), uintptr(backlog), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_listen_trampoline()\n\n//go:linkname libc_listen libc_listen\n//go:cgo_import_dynamic libc_listen listen \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_mkdir_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_mkdir_trampoline()\n\n//go:linkname libc_mkdir libc_mkdir\n//go:cgo_import_dynamic libc_mkdir mkdir \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_mkdirat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_mkdirat_trampoline()\n\n//go:linkname libc_mkdirat libc_mkdirat\n//go:cgo_import_dynamic libc_mkdirat mkdirat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_mkfifo_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_mkfifo_trampoline()\n\n//go:linkname libc_mkfifo libc_mkfifo\n//go:cgo_import_dynamic libc_mkfifo mkfifo \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknod(path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_mknod_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_mknod_trampoline()\n\n//go:linkname libc_mknod libc_mknod\n//go:cgo_import_dynamic libc_mknod mknod \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall(funcPC(libc_open_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_open_trampoline()\n\n//go:linkname libc_open libc_open\n//go:cgo_import_dynamic libc_open open \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall6(funcPC(libc_openat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_openat_trampoline()\n\n//go:linkname libc_openat libc_openat\n//go:cgo_import_dynamic libc_openat openat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall(funcPC(libc_pathconf_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_pathconf_trampoline()\n\n//go:linkname libc_pathconf libc_pathconf\n//go:cgo_import_dynamic libc_pathconf pathconf \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(funcPC(libc_pread_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_pread_trampoline()\n\n//go:linkname libc_pread libc_pread\n//go:cgo_import_dynamic libc_pread pread \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(funcPC(libc_pwrite_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_pwrite_trampoline()\n\n//go:linkname libc_pwrite libc_pwrite\n//go:cgo_import_dynamic libc_pwrite pwrite \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(funcPC(libc_read_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_read_trampoline()\n\n//go:linkname libc_read libc_read\n//go:cgo_import_dynamic libc_read read \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(funcPC(libc_readlink_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_readlink_trampoline()\n\n//go:linkname libc_readlink libc_readlink\n//go:cgo_import_dynamic libc_readlink readlink \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(funcPC(libc_readlinkat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_readlinkat_trampoline()\n\n//go:linkname libc_readlinkat libc_readlinkat\n//go:cgo_import_dynamic libc_readlinkat readlinkat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_rename_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_rename_trampoline()\n\n//go:linkname libc_rename libc_rename\n//go:cgo_import_dynamic libc_rename rename \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(fromfd int, from string, tofd int, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(funcPC(libc_renameat_trampoline), uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_renameat_trampoline()\n\n//go:linkname libc_renameat libc_renameat\n//go:cgo_import_dynamic libc_renameat renameat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Revoke(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_revoke_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_revoke_trampoline()\n\n//go:linkname libc_revoke libc_revoke\n//go:cgo_import_dynamic libc_revoke revoke \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_rmdir_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_rmdir_trampoline()\n\n//go:linkname libc_rmdir libc_rmdir\n//go:cgo_import_dynamic libc_rmdir rmdir \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, r1, e1 := syscall_syscall6(funcPC(libc_lseek_trampoline), uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(whence), 0, 0)\n\tnewoffset = int64(int64(r1)<<32 | int64(r0))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_lseek_trampoline()\n\n//go:linkname libc_lseek libc_lseek\n//go:cgo_import_dynamic libc_lseek lseek \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) {\n\t_, _, e1 := syscall_syscall6(funcPC(libc_select_trampoline), uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_select_trampoline()\n\n//go:linkname libc_select libc_select\n//go:cgo_import_dynamic libc_select select \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_setegid_trampoline), uintptr(egid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_setegid_trampoline()\n\n//go:linkname libc_setegid libc_setegid\n//go:cgo_import_dynamic libc_setegid setegid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(funcPC(libc_seteuid_trampoline), uintptr(euid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_seteuid_trampoline()\n\n//go:linkname libc_seteuid libc_seteuid\n//go:cgo_import_dynamic libc_seteuid seteuid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(funcPC(libc_setgid_trampoline), uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_setgid_trampoline()\n\n//go:linkname libc_setgid libc_setgid\n//go:cgo_import_dynamic libc_setgid setgid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setlogin(name string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_setlogin_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_setlogin_trampoline()\n\n//go:linkname libc_setlogin libc_setlogin\n//go:cgo_import_dynamic libc_setlogin setlogin \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(funcPC(libc_setpgid_trampoline), uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_setpgid_trampoline()\n\n//go:linkname libc_setpgid libc_setpgid\n//go:cgo_import_dynamic libc_setpgid setpgid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_setpriority_trampoline), uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_setpriority_trampoline()\n\n//go:linkname libc_setpriority libc_setpriority\n//go:cgo_import_dynamic libc_setpriority setpriority \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setprivexec(flag int) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_setprivexec_trampoline), uintptr(flag), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_setprivexec_trampoline()\n\n//go:linkname libc_setprivexec libc_setprivexec\n//go:cgo_import_dynamic libc_setprivexec setprivexec \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(funcPC(libc_setregid_trampoline), uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_setregid_trampoline()\n\n//go:linkname libc_setregid libc_setregid\n//go:cgo_import_dynamic libc_setregid setregid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(funcPC(libc_setreuid_trampoline), uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_setreuid_trampoline()\n\n//go:linkname libc_setreuid libc_setreuid\n//go:cgo_import_dynamic libc_setreuid setreuid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := syscall_rawSyscall(funcPC(libc_setrlimit_trampoline), uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_setrlimit_trampoline()\n\n//go:linkname libc_setrlimit libc_setrlimit\n//go:cgo_import_dynamic libc_setrlimit setrlimit \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(funcPC(libc_setsid_trampoline), 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_setsid_trampoline()\n\n//go:linkname libc_setsid libc_setsid\n//go:cgo_import_dynamic libc_setsid setsid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := syscall_rawSyscall(funcPC(libc_settimeofday_trampoline), uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_settimeofday_trampoline()\n\n//go:linkname libc_settimeofday libc_settimeofday\n//go:cgo_import_dynamic libc_settimeofday settimeofday \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(funcPC(libc_setuid_trampoline), uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_setuid_trampoline()\n\n//go:linkname libc_setuid libc_setuid\n//go:cgo_import_dynamic libc_setuid setuid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_symlink_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_symlink_trampoline()\n\n//go:linkname libc_symlink libc_symlink\n//go:cgo_import_dynamic libc_symlink symlink \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_symlinkat_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_symlinkat_trampoline()\n\n//go:linkname libc_symlinkat libc_symlinkat\n//go:cgo_import_dynamic libc_symlinkat symlinkat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_sync_trampoline), 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_sync_trampoline()\n\n//go:linkname libc_sync libc_sync\n//go:cgo_import_dynamic libc_sync sync \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_truncate_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(length), uintptr(length>>32))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_truncate_trampoline()\n\n//go:linkname libc_truncate libc_truncate\n//go:cgo_import_dynamic libc_truncate truncate \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(newmask int) (oldmask int) {\n\tr0, _, _ := syscall_syscall(funcPC(libc_umask_trampoline), uintptr(newmask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\nfunc libc_umask_trampoline()\n\n//go:linkname libc_umask libc_umask\n//go:cgo_import_dynamic libc_umask umask \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Undelete(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_undelete_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_undelete_trampoline()\n\n//go:linkname libc_undelete libc_undelete\n//go:cgo_import_dynamic libc_undelete undelete \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_unlink_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_unlink_trampoline()\n\n//go:linkname libc_unlink libc_unlink\n//go:cgo_import_dynamic libc_unlink unlink \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_unlinkat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_unlinkat_trampoline()\n\n//go:linkname libc_unlinkat libc_unlinkat\n//go:cgo_import_dynamic libc_unlinkat unlinkat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_unmount_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_unmount_trampoline()\n\n//go:linkname libc_unmount libc_unmount\n//go:cgo_import_dynamic libc_unmount unmount \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(funcPC(libc_write_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_write_trampoline()\n\n//go:linkname libc_write libc_write\n//go:cgo_import_dynamic libc_write write \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := syscall_syscall9(funcPC(libc_mmap_trampoline), uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos), uintptr(pos>>32), 0, 0)\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_mmap_trampoline()\n\n//go:linkname libc_mmap libc_mmap\n//go:cgo_import_dynamic libc_mmap mmap \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_munmap_trampoline), uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_munmap_trampoline()\n\n//go:linkname libc_munmap libc_munmap\n//go:cgo_import_dynamic libc_munmap munmap \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc readlen(fd int, buf *byte, nbuf int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(funcPC(libc_read_trampoline), uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc writelen(fd int, buf *byte, nbuf int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(funcPC(libc_write_trampoline), uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc gettimeofday(tp *Timeval) (sec int32, usec int32, err error) {\n\tr0, r1, e1 := syscall_rawSyscall(funcPC(libc_gettimeofday_trampoline), uintptr(unsafe.Pointer(tp)), 0, 0)\n\tsec = int32(r0)\n\tusec = int32(r1)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_gettimeofday_trampoline()\n\n//go:linkname libc_gettimeofday libc_gettimeofday\n//go:cgo_import_dynamic libc_gettimeofday gettimeofday \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_fstat_trampoline), uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_fstat_trampoline()\n\n//go:linkname libc_fstat libc_fstat\n//go:cgo_import_dynamic libc_fstat fstat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(funcPC(libc_fstatat_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_fstatat_trampoline()\n\n//go:linkname libc_fstatat libc_fstatat\n//go:cgo_import_dynamic libc_fstatat fstatat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, stat *Statfs_t) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_fstatfs_trampoline), uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_fstatfs_trampoline()\n\n//go:linkname libc_fstatfs libc_fstatfs\n//go:cgo_import_dynamic libc_fstatfs fstatfs \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(funcPC(libc_getfsstat_trampoline), uintptr(buf), uintptr(size), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_getfsstat_trampoline()\n\n//go:linkname libc_getfsstat libc_getfsstat\n//go:cgo_import_dynamic libc_getfsstat getfsstat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_lstat_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_lstat_trampoline()\n\n//go:linkname libc_lstat libc_lstat\n//go:cgo_import_dynamic libc_lstat lstat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_stat_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_stat_trampoline()\n\n//go:linkname libc_stat libc_stat\n//go:cgo_import_dynamic libc_stat stat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, stat *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_statfs_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_statfs_trampoline()\n\n//go:linkname libc_statfs libc_statfs\n//go:cgo_import_dynamic libc_statfs statfs \"/usr/lib/libSystem.B.dylib\"\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.s",
    "content": "// go run mkasm_darwin.go arm\n// Code generated by the command above; DO NOT EDIT.\n\n// +build go1.12\n\n#include \"textflag.h\"\nTEXT ·libc_getgroups_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getgroups(SB)\nTEXT ·libc_setgroups_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setgroups(SB)\nTEXT ·libc_wait4_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_wait4(SB)\nTEXT ·libc_accept_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_accept(SB)\nTEXT ·libc_bind_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_bind(SB)\nTEXT ·libc_connect_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_connect(SB)\nTEXT ·libc_socket_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_socket(SB)\nTEXT ·libc_getsockopt_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getsockopt(SB)\nTEXT ·libc_setsockopt_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setsockopt(SB)\nTEXT ·libc_getpeername_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpeername(SB)\nTEXT ·libc_getsockname_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getsockname(SB)\nTEXT ·libc_shutdown_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_shutdown(SB)\nTEXT ·libc_socketpair_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_socketpair(SB)\nTEXT ·libc_recvfrom_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_recvfrom(SB)\nTEXT ·libc_sendto_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sendto(SB)\nTEXT ·libc_recvmsg_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_recvmsg(SB)\nTEXT ·libc_sendmsg_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sendmsg(SB)\nTEXT ·libc_kevent_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_kevent(SB)\nTEXT ·libc___sysctl_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc___sysctl(SB)\nTEXT ·libc_utimes_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_utimes(SB)\nTEXT ·libc_futimes_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_futimes(SB)\nTEXT ·libc_fcntl_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fcntl(SB)\nTEXT ·libc_poll_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_poll(SB)\nTEXT ·libc_madvise_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_madvise(SB)\nTEXT ·libc_mlock_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mlock(SB)\nTEXT ·libc_mlockall_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mlockall(SB)\nTEXT ·libc_mprotect_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mprotect(SB)\nTEXT ·libc_msync_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_msync(SB)\nTEXT ·libc_munlock_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_munlock(SB)\nTEXT ·libc_munlockall_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_munlockall(SB)\nTEXT ·libc_ptrace_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_ptrace(SB)\nTEXT ·libc_getattrlist_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getattrlist(SB)\nTEXT ·libc_pipe_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pipe(SB)\nTEXT ·libc_getxattr_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getxattr(SB)\nTEXT ·libc_fgetxattr_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fgetxattr(SB)\nTEXT ·libc_setxattr_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setxattr(SB)\nTEXT ·libc_fsetxattr_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fsetxattr(SB)\nTEXT ·libc_removexattr_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_removexattr(SB)\nTEXT ·libc_fremovexattr_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fremovexattr(SB)\nTEXT ·libc_listxattr_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_listxattr(SB)\nTEXT ·libc_flistxattr_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_flistxattr(SB)\nTEXT ·libc_setattrlist_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setattrlist(SB)\nTEXT ·libc_kill_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_kill(SB)\nTEXT ·libc_ioctl_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_ioctl(SB)\nTEXT ·libc_sendfile_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sendfile(SB)\nTEXT ·libc_access_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_access(SB)\nTEXT ·libc_adjtime_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_adjtime(SB)\nTEXT ·libc_chdir_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chdir(SB)\nTEXT ·libc_chflags_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chflags(SB)\nTEXT ·libc_chmod_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chmod(SB)\nTEXT ·libc_chown_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chown(SB)\nTEXT ·libc_chroot_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chroot(SB)\nTEXT ·libc_close_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_close(SB)\nTEXT ·libc_dup_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_dup(SB)\nTEXT ·libc_dup2_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_dup2(SB)\nTEXT ·libc_exchangedata_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_exchangedata(SB)\nTEXT ·libc_exit_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_exit(SB)\nTEXT ·libc_faccessat_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_faccessat(SB)\nTEXT ·libc_fchdir_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchdir(SB)\nTEXT ·libc_fchflags_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchflags(SB)\nTEXT ·libc_fchmod_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchmod(SB)\nTEXT ·libc_fchmodat_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchmodat(SB)\nTEXT ·libc_fchown_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchown(SB)\nTEXT ·libc_fchownat_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchownat(SB)\nTEXT ·libc_flock_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_flock(SB)\nTEXT ·libc_fpathconf_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fpathconf(SB)\nTEXT ·libc_fsync_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fsync(SB)\nTEXT ·libc_ftruncate_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_ftruncate(SB)\nTEXT ·libc_getdtablesize_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getdtablesize(SB)\nTEXT ·libc_getegid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getegid(SB)\nTEXT ·libc_geteuid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_geteuid(SB)\nTEXT ·libc_getgid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getgid(SB)\nTEXT ·libc_getpgid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpgid(SB)\nTEXT ·libc_getpgrp_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpgrp(SB)\nTEXT ·libc_getpid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpid(SB)\nTEXT ·libc_getppid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getppid(SB)\nTEXT ·libc_getpriority_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpriority(SB)\nTEXT ·libc_getrlimit_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getrlimit(SB)\nTEXT ·libc_getrusage_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getrusage(SB)\nTEXT ·libc_getsid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getsid(SB)\nTEXT ·libc_getuid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getuid(SB)\nTEXT ·libc_issetugid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_issetugid(SB)\nTEXT ·libc_kqueue_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_kqueue(SB)\nTEXT ·libc_lchown_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_lchown(SB)\nTEXT ·libc_link_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_link(SB)\nTEXT ·libc_linkat_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_linkat(SB)\nTEXT ·libc_listen_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_listen(SB)\nTEXT ·libc_mkdir_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkdir(SB)\nTEXT ·libc_mkdirat_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkdirat(SB)\nTEXT ·libc_mkfifo_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkfifo(SB)\nTEXT ·libc_mknod_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mknod(SB)\nTEXT ·libc_open_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_open(SB)\nTEXT ·libc_openat_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_openat(SB)\nTEXT ·libc_pathconf_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pathconf(SB)\nTEXT ·libc_pread_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pread(SB)\nTEXT ·libc_pwrite_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pwrite(SB)\nTEXT ·libc_read_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_read(SB)\nTEXT ·libc_readlink_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_readlink(SB)\nTEXT ·libc_readlinkat_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_readlinkat(SB)\nTEXT ·libc_rename_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_rename(SB)\nTEXT ·libc_renameat_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_renameat(SB)\nTEXT ·libc_revoke_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_revoke(SB)\nTEXT ·libc_rmdir_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_rmdir(SB)\nTEXT ·libc_lseek_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_lseek(SB)\nTEXT ·libc_select_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_select(SB)\nTEXT ·libc_setegid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setegid(SB)\nTEXT ·libc_seteuid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_seteuid(SB)\nTEXT ·libc_setgid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setgid(SB)\nTEXT ·libc_setlogin_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setlogin(SB)\nTEXT ·libc_setpgid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setpgid(SB)\nTEXT ·libc_setpriority_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setpriority(SB)\nTEXT ·libc_setprivexec_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setprivexec(SB)\nTEXT ·libc_setregid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setregid(SB)\nTEXT ·libc_setreuid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setreuid(SB)\nTEXT ·libc_setrlimit_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setrlimit(SB)\nTEXT ·libc_setsid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setsid(SB)\nTEXT ·libc_settimeofday_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_settimeofday(SB)\nTEXT ·libc_setuid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setuid(SB)\nTEXT ·libc_symlink_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_symlink(SB)\nTEXT ·libc_symlinkat_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_symlinkat(SB)\nTEXT ·libc_sync_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sync(SB)\nTEXT ·libc_truncate_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_truncate(SB)\nTEXT ·libc_umask_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_umask(SB)\nTEXT ·libc_undelete_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_undelete(SB)\nTEXT ·libc_unlink_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unlink(SB)\nTEXT ·libc_unlinkat_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unlinkat(SB)\nTEXT ·libc_unmount_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unmount(SB)\nTEXT ·libc_write_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_write(SB)\nTEXT ·libc_mmap_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mmap(SB)\nTEXT ·libc_munmap_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_munmap(SB)\nTEXT ·libc_gettimeofday_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_gettimeofday(SB)\nTEXT ·libc_fstat_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fstat(SB)\nTEXT ·libc_fstatat_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fstatat(SB)\nTEXT ·libc_fstatfs_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fstatfs(SB)\nTEXT ·libc_getfsstat_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getfsstat(SB)\nTEXT ·libc_lstat_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_lstat(SB)\nTEXT ·libc_stat_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_stat(SB)\nTEXT ·libc_statfs_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_statfs(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_11.go",
    "content": "// go run mksyscall.go -tags darwin,arm64,!go1.12 syscall_bsd.go syscall_darwin.go syscall_darwin_arm64.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build darwin,arm64,!go1.12\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(mib) > 0 {\n\t\t_p0 = unsafe.Pointer(&mib[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, timeval *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimes(fd int, timeval *[2]Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, behav int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETATTRLIST, uintptr(unsafe.Pointer(path)), uintptr(list), uintptr(buf), uintptr(size), uintptr(options), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe() (r int, w int, err error) {\n\tr0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0)\n\tr = int(r0)\n\tw = int(r1)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getxattr(path string, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fgetxattr(fd int, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setxattr(path string, attr string, data *byte, size int, position uint32, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fsetxattr(fd int, attr string, data *byte, size int, position uint32, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc removexattr(path string, attr string, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fremovexattr(fd int, attr string, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(options))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc listxattr(path string, dest *byte, size int, options int) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc flistxattr(fd int, dest *byte, size int, options int) (sz int, err error) {\n\tr0, _, e1 := Syscall6(SYS_FLISTXATTR, uintptr(fd), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETATTRLIST, uintptr(unsafe.Pointer(path)), uintptr(list), uintptr(buf), uintptr(size), uintptr(options), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kill(pid int, signum int, posix int) (err error) {\n\t_, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), uintptr(posix))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) {\n\t_, _, e1 := Syscall6(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(offset), uintptr(unsafe.Pointer(len)), uintptr(hdtr), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chflags(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(from int, to int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exchangedata(path1 string, path2 string, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path1)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(path2)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXCHANGEDATA, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tSyscall(SYS_EXIT, uintptr(code), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchflags(fd int, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdtablesize() (size int) {\n\tr0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0)\n\tsize = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgrp int) {\n\tr0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)\n\tpgrp = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Issetugid() (tainted bool) {\n\tr0, _, _ := RawSyscall(SYS_ISSETUGID, 0, 0, 0)\n\ttainted = bool(r0 != 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kqueue() (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknod(path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(fromfd int, from string, tofd int, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Revoke(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))\n\tnewoffset = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) {\n\t_, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETEGID, uintptr(egid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setlogin(name string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setprivexec(flag int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETPRIVEXEC, uintptr(flag), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(newmask int) (oldmask int) {\n\tr0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Undelete(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos))\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc readlen(fd int, buf *byte, nbuf int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc writelen(fd int, buf *byte, nbuf int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc gettimeofday(tp *Timeval) (sec int64, usec int32, err error) {\n\tr0, r1, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tsec = int64(r0)\n\tusec = int32(r1)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, stat *Statfs_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_GETFSSTAT, uintptr(buf), uintptr(size), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, stat *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go",
    "content": "// go run mksyscall.go -tags darwin,arm64,go1.12 syscall_bsd.go syscall_darwin.go syscall_darwin_arm64.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build darwin,arm64,go1.12\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(funcPC(libc_getgroups_trampoline), uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_getgroups_trampoline()\n\n//go:linkname libc_getgroups libc_getgroups\n//go:cgo_import_dynamic libc_getgroups getgroups \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := syscall_rawSyscall(funcPC(libc_setgroups_trampoline), uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_setgroups_trampoline()\n\n//go:linkname libc_setgroups libc_setgroups\n//go:cgo_import_dynamic libc_setgroups setgroups \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := syscall_syscall6(funcPC(libc_wait4_trampoline), uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_wait4_trampoline()\n\n//go:linkname libc_wait4 libc_wait4\n//go:cgo_import_dynamic libc_wait4 wait4 \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := syscall_syscall(funcPC(libc_accept_trampoline), uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_accept_trampoline()\n\n//go:linkname libc_accept libc_accept\n//go:cgo_import_dynamic libc_accept accept \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_bind_trampoline), uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_bind_trampoline()\n\n//go:linkname libc_bind libc_bind\n//go:cgo_import_dynamic libc_bind bind \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_connect_trampoline), uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_connect_trampoline()\n\n//go:linkname libc_connect libc_connect\n//go:cgo_import_dynamic libc_connect connect \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(funcPC(libc_socket_trampoline), uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_socket_trampoline()\n\n//go:linkname libc_socket libc_socket\n//go:cgo_import_dynamic libc_socket socket \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := syscall_syscall6(funcPC(libc_getsockopt_trampoline), uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_getsockopt_trampoline()\n\n//go:linkname libc_getsockopt libc_getsockopt\n//go:cgo_import_dynamic libc_getsockopt getsockopt \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := syscall_syscall6(funcPC(libc_setsockopt_trampoline), uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_setsockopt_trampoline()\n\n//go:linkname libc_setsockopt libc_setsockopt\n//go:cgo_import_dynamic libc_setsockopt setsockopt \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := syscall_rawSyscall(funcPC(libc_getpeername_trampoline), uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_getpeername_trampoline()\n\n//go:linkname libc_getpeername libc_getpeername\n//go:cgo_import_dynamic libc_getpeername getpeername \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := syscall_rawSyscall(funcPC(libc_getsockname_trampoline), uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_getsockname_trampoline()\n\n//go:linkname libc_getsockname libc_getsockname\n//go:cgo_import_dynamic libc_getsockname getsockname \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_shutdown_trampoline), uintptr(s), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_shutdown_trampoline()\n\n//go:linkname libc_shutdown libc_shutdown\n//go:cgo_import_dynamic libc_shutdown shutdown \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := syscall_rawSyscall6(funcPC(libc_socketpair_trampoline), uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_socketpair_trampoline()\n\n//go:linkname libc_socketpair libc_socketpair\n//go:cgo_import_dynamic libc_socketpair socketpair \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(funcPC(libc_recvfrom_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_recvfrom_trampoline()\n\n//go:linkname libc_recvfrom libc_recvfrom\n//go:cgo_import_dynamic libc_recvfrom recvfrom \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall6(funcPC(libc_sendto_trampoline), uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_sendto_trampoline()\n\n//go:linkname libc_sendto libc_sendto\n//go:cgo_import_dynamic libc_sendto sendto \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(funcPC(libc_recvmsg_trampoline), uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_recvmsg_trampoline()\n\n//go:linkname libc_recvmsg libc_recvmsg\n//go:cgo_import_dynamic libc_recvmsg recvmsg \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(funcPC(libc_sendmsg_trampoline), uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_sendmsg_trampoline()\n\n//go:linkname libc_sendmsg libc_sendmsg\n//go:cgo_import_dynamic libc_sendmsg sendmsg \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := syscall_syscall6(funcPC(libc_kevent_trampoline), uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_kevent_trampoline()\n\n//go:linkname libc_kevent libc_kevent\n//go:cgo_import_dynamic libc_kevent kevent \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(mib) > 0 {\n\t\t_p0 = unsafe.Pointer(&mib[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall6(funcPC(libc___sysctl_trampoline), uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc___sysctl_trampoline()\n\n//go:linkname libc___sysctl libc___sysctl\n//go:cgo_import_dynamic libc___sysctl __sysctl \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, timeval *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_utimes_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_utimes_trampoline()\n\n//go:linkname libc_utimes libc_utimes\n//go:cgo_import_dynamic libc_utimes utimes \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimes(fd int, timeval *[2]Timeval) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_futimes_trampoline), uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_futimes_trampoline()\n\n//go:linkname libc_futimes libc_futimes\n//go:cgo_import_dynamic libc_futimes futimes \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (val int, err error) {\n\tr0, _, e1 := syscall_syscall(funcPC(libc_fcntl_trampoline), uintptr(fd), uintptr(cmd), uintptr(arg))\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_fcntl_trampoline()\n\n//go:linkname libc_fcntl libc_fcntl\n//go:cgo_import_dynamic libc_fcntl fcntl \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(funcPC(libc_poll_trampoline), uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_poll_trampoline()\n\n//go:linkname libc_poll libc_poll\n//go:cgo_import_dynamic libc_poll poll \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, behav int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_madvise_trampoline), uintptr(_p0), uintptr(len(b)), uintptr(behav))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_madvise_trampoline()\n\n//go:linkname libc_madvise libc_madvise\n//go:cgo_import_dynamic libc_madvise madvise \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_mlock_trampoline), uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_mlock_trampoline()\n\n//go:linkname libc_mlock libc_mlock\n//go:cgo_import_dynamic libc_mlock mlock \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_mlockall_trampoline), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_mlockall_trampoline()\n\n//go:linkname libc_mlockall libc_mlockall\n//go:cgo_import_dynamic libc_mlockall mlockall \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_mprotect_trampoline), uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_mprotect_trampoline()\n\n//go:linkname libc_mprotect libc_mprotect\n//go:cgo_import_dynamic libc_mprotect mprotect \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_msync_trampoline), uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_msync_trampoline()\n\n//go:linkname libc_msync libc_msync\n//go:cgo_import_dynamic libc_msync msync \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_munlock_trampoline), uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_munlock_trampoline()\n\n//go:linkname libc_munlock libc_munlock\n//go:cgo_import_dynamic libc_munlock munlock \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_munlockall_trampoline), 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_munlockall_trampoline()\n\n//go:linkname libc_munlockall libc_munlockall\n//go:cgo_import_dynamic libc_munlockall munlockall \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {\n\t_, _, e1 := syscall_syscall6(funcPC(libc_ptrace_trampoline), uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_ptrace_trampoline()\n\n//go:linkname libc_ptrace libc_ptrace\n//go:cgo_import_dynamic libc_ptrace ptrace \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) {\n\t_, _, e1 := syscall_syscall6(funcPC(libc_getattrlist_trampoline), uintptr(unsafe.Pointer(path)), uintptr(list), uintptr(buf), uintptr(size), uintptr(options), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_getattrlist_trampoline()\n\n//go:linkname libc_getattrlist libc_getattrlist\n//go:cgo_import_dynamic libc_getattrlist getattrlist \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe() (r int, w int, err error) {\n\tr0, r1, e1 := syscall_rawSyscall(funcPC(libc_pipe_trampoline), 0, 0, 0)\n\tr = int(r0)\n\tw = int(r1)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_pipe_trampoline()\n\n//go:linkname libc_pipe libc_pipe\n//go:cgo_import_dynamic libc_pipe pipe \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getxattr(path string, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall6(funcPC(libc_getxattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_getxattr_trampoline()\n\n//go:linkname libc_getxattr libc_getxattr\n//go:cgo_import_dynamic libc_getxattr getxattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fgetxattr(fd int, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall6(funcPC(libc_fgetxattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_fgetxattr_trampoline()\n\n//go:linkname libc_fgetxattr libc_fgetxattr\n//go:cgo_import_dynamic libc_fgetxattr fgetxattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setxattr(path string, attr string, data *byte, size int, position uint32, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(funcPC(libc_setxattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_setxattr_trampoline()\n\n//go:linkname libc_setxattr libc_setxattr\n//go:cgo_import_dynamic libc_setxattr setxattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fsetxattr(fd int, attr string, data *byte, size int, position uint32, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(funcPC(libc_fsetxattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_fsetxattr_trampoline()\n\n//go:linkname libc_fsetxattr libc_fsetxattr\n//go:cgo_import_dynamic libc_fsetxattr fsetxattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc removexattr(path string, attr string, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_removexattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_removexattr_trampoline()\n\n//go:linkname libc_removexattr libc_removexattr\n//go:cgo_import_dynamic libc_removexattr removexattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fremovexattr(fd int, attr string, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_fremovexattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(options))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_fremovexattr_trampoline()\n\n//go:linkname libc_fremovexattr libc_fremovexattr\n//go:cgo_import_dynamic libc_fremovexattr fremovexattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc listxattr(path string, dest *byte, size int, options int) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall6(funcPC(libc_listxattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_listxattr_trampoline()\n\n//go:linkname libc_listxattr libc_listxattr\n//go:cgo_import_dynamic libc_listxattr listxattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc flistxattr(fd int, dest *byte, size int, options int) (sz int, err error) {\n\tr0, _, e1 := syscall_syscall6(funcPC(libc_flistxattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_flistxattr_trampoline()\n\n//go:linkname libc_flistxattr libc_flistxattr\n//go:cgo_import_dynamic libc_flistxattr flistxattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) {\n\t_, _, e1 := syscall_syscall6(funcPC(libc_setattrlist_trampoline), uintptr(unsafe.Pointer(path)), uintptr(list), uintptr(buf), uintptr(size), uintptr(options), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_setattrlist_trampoline()\n\n//go:linkname libc_setattrlist libc_setattrlist\n//go:cgo_import_dynamic libc_setattrlist setattrlist \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kill(pid int, signum int, posix int) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_kill_trampoline), uintptr(pid), uintptr(signum), uintptr(posix))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_kill_trampoline()\n\n//go:linkname libc_kill libc_kill\n//go:cgo_import_dynamic libc_kill kill \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_ioctl_trampoline), uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_ioctl_trampoline()\n\n//go:linkname libc_ioctl libc_ioctl\n//go:cgo_import_dynamic libc_ioctl ioctl \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) {\n\t_, _, e1 := syscall_syscall6(funcPC(libc_sendfile_trampoline), uintptr(infd), uintptr(outfd), uintptr(offset), uintptr(unsafe.Pointer(len)), uintptr(hdtr), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_sendfile_trampoline()\n\n//go:linkname libc_sendfile libc_sendfile\n//go:cgo_import_dynamic libc_sendfile sendfile \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_access_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_access_trampoline()\n\n//go:linkname libc_access libc_access\n//go:cgo_import_dynamic libc_access access \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_adjtime_trampoline), uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_adjtime_trampoline()\n\n//go:linkname libc_adjtime libc_adjtime\n//go:cgo_import_dynamic libc_adjtime adjtime \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_chdir_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_chdir_trampoline()\n\n//go:linkname libc_chdir libc_chdir\n//go:cgo_import_dynamic libc_chdir chdir \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chflags(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_chflags_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_chflags_trampoline()\n\n//go:linkname libc_chflags libc_chflags\n//go:cgo_import_dynamic libc_chflags chflags \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_chmod_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_chmod_trampoline()\n\n//go:linkname libc_chmod libc_chmod\n//go:cgo_import_dynamic libc_chmod chmod \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_chown_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_chown_trampoline()\n\n//go:linkname libc_chown libc_chown\n//go:cgo_import_dynamic libc_chown chown \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_chroot_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_chroot_trampoline()\n\n//go:linkname libc_chroot libc_chroot\n//go:cgo_import_dynamic libc_chroot chroot \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_close_trampoline), uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_close_trampoline()\n\n//go:linkname libc_close libc_close\n//go:cgo_import_dynamic libc_close close \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := syscall_syscall(funcPC(libc_dup_trampoline), uintptr(fd), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_dup_trampoline()\n\n//go:linkname libc_dup libc_dup\n//go:cgo_import_dynamic libc_dup dup \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(from int, to int) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_dup2_trampoline), uintptr(from), uintptr(to), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_dup2_trampoline()\n\n//go:linkname libc_dup2 libc_dup2\n//go:cgo_import_dynamic libc_dup2 dup2 \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exchangedata(path1 string, path2 string, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path1)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(path2)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_exchangedata_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_exchangedata_trampoline()\n\n//go:linkname libc_exchangedata libc_exchangedata\n//go:cgo_import_dynamic libc_exchangedata exchangedata \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tsyscall_syscall(funcPC(libc_exit_trampoline), uintptr(code), 0, 0)\n\treturn\n}\n\nfunc libc_exit_trampoline()\n\n//go:linkname libc_exit libc_exit\n//go:cgo_import_dynamic libc_exit exit \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(funcPC(libc_faccessat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_faccessat_trampoline()\n\n//go:linkname libc_faccessat libc_faccessat\n//go:cgo_import_dynamic libc_faccessat faccessat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_fchdir_trampoline), uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_fchdir_trampoline()\n\n//go:linkname libc_fchdir libc_fchdir\n//go:cgo_import_dynamic libc_fchdir fchdir \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchflags(fd int, flags int) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_fchflags_trampoline), uintptr(fd), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_fchflags_trampoline()\n\n//go:linkname libc_fchflags libc_fchflags\n//go:cgo_import_dynamic libc_fchflags fchflags \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_fchmod_trampoline), uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_fchmod_trampoline()\n\n//go:linkname libc_fchmod libc_fchmod\n//go:cgo_import_dynamic libc_fchmod fchmod \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(funcPC(libc_fchmodat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_fchmodat_trampoline()\n\n//go:linkname libc_fchmodat libc_fchmodat\n//go:cgo_import_dynamic libc_fchmodat fchmodat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_fchown_trampoline), uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_fchown_trampoline()\n\n//go:linkname libc_fchown libc_fchown\n//go:cgo_import_dynamic libc_fchown fchown \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(funcPC(libc_fchownat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_fchownat_trampoline()\n\n//go:linkname libc_fchownat libc_fchownat\n//go:cgo_import_dynamic libc_fchownat fchownat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_flock_trampoline), uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_flock_trampoline()\n\n//go:linkname libc_flock libc_flock\n//go:cgo_import_dynamic libc_flock flock \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := syscall_syscall(funcPC(libc_fpathconf_trampoline), uintptr(fd), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_fpathconf_trampoline()\n\n//go:linkname libc_fpathconf libc_fpathconf\n//go:cgo_import_dynamic libc_fpathconf fpathconf \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_fsync_trampoline), uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_fsync_trampoline()\n\n//go:linkname libc_fsync libc_fsync\n//go:cgo_import_dynamic libc_fsync fsync \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_ftruncate_trampoline), uintptr(fd), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_ftruncate_trampoline()\n\n//go:linkname libc_ftruncate libc_ftruncate\n//go:cgo_import_dynamic libc_ftruncate ftruncate \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdtablesize() (size int) {\n\tr0, _, _ := syscall_syscall(funcPC(libc_getdtablesize_trampoline), 0, 0, 0)\n\tsize = int(r0)\n\treturn\n}\n\nfunc libc_getdtablesize_trampoline()\n\n//go:linkname libc_getdtablesize libc_getdtablesize\n//go:cgo_import_dynamic libc_getdtablesize getdtablesize \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := syscall_rawSyscall(funcPC(libc_getegid_trampoline), 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\nfunc libc_getegid_trampoline()\n\n//go:linkname libc_getegid libc_getegid\n//go:cgo_import_dynamic libc_getegid getegid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (uid int) {\n\tr0, _, _ := syscall_rawSyscall(funcPC(libc_geteuid_trampoline), 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\nfunc libc_geteuid_trampoline()\n\n//go:linkname libc_geteuid libc_geteuid\n//go:cgo_import_dynamic libc_geteuid geteuid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := syscall_rawSyscall(funcPC(libc_getgid_trampoline), 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\nfunc libc_getgid_trampoline()\n\n//go:linkname libc_getgid libc_getgid\n//go:cgo_import_dynamic libc_getgid getgid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(funcPC(libc_getpgid_trampoline), uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_getpgid_trampoline()\n\n//go:linkname libc_getpgid libc_getpgid\n//go:cgo_import_dynamic libc_getpgid getpgid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgrp int) {\n\tr0, _, _ := syscall_rawSyscall(funcPC(libc_getpgrp_trampoline), 0, 0, 0)\n\tpgrp = int(r0)\n\treturn\n}\n\nfunc libc_getpgrp_trampoline()\n\n//go:linkname libc_getpgrp libc_getpgrp\n//go:cgo_import_dynamic libc_getpgrp getpgrp \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := syscall_rawSyscall(funcPC(libc_getpid_trampoline), 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\nfunc libc_getpid_trampoline()\n\n//go:linkname libc_getpid libc_getpid\n//go:cgo_import_dynamic libc_getpid getpid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := syscall_rawSyscall(funcPC(libc_getppid_trampoline), 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\nfunc libc_getppid_trampoline()\n\n//go:linkname libc_getppid libc_getppid\n//go:cgo_import_dynamic libc_getppid getppid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := syscall_syscall(funcPC(libc_getpriority_trampoline), uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_getpriority_trampoline()\n\n//go:linkname libc_getpriority libc_getpriority\n//go:cgo_import_dynamic libc_getpriority getpriority \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := syscall_rawSyscall(funcPC(libc_getrlimit_trampoline), uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_getrlimit_trampoline()\n\n//go:linkname libc_getrlimit libc_getrlimit\n//go:cgo_import_dynamic libc_getrlimit getrlimit \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := syscall_rawSyscall(funcPC(libc_getrusage_trampoline), uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_getrusage_trampoline()\n\n//go:linkname libc_getrusage libc_getrusage\n//go:cgo_import_dynamic libc_getrusage getrusage \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(funcPC(libc_getsid_trampoline), uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_getsid_trampoline()\n\n//go:linkname libc_getsid libc_getsid\n//go:cgo_import_dynamic libc_getsid getsid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := syscall_rawSyscall(funcPC(libc_getuid_trampoline), 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\nfunc libc_getuid_trampoline()\n\n//go:linkname libc_getuid libc_getuid\n//go:cgo_import_dynamic libc_getuid getuid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Issetugid() (tainted bool) {\n\tr0, _, _ := syscall_rawSyscall(funcPC(libc_issetugid_trampoline), 0, 0, 0)\n\ttainted = bool(r0 != 0)\n\treturn\n}\n\nfunc libc_issetugid_trampoline()\n\n//go:linkname libc_issetugid libc_issetugid\n//go:cgo_import_dynamic libc_issetugid issetugid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kqueue() (fd int, err error) {\n\tr0, _, e1 := syscall_syscall(funcPC(libc_kqueue_trampoline), 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_kqueue_trampoline()\n\n//go:linkname libc_kqueue libc_kqueue\n//go:cgo_import_dynamic libc_kqueue kqueue \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_lchown_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_lchown_trampoline()\n\n//go:linkname libc_lchown libc_lchown\n//go:cgo_import_dynamic libc_lchown lchown \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_link_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_link_trampoline()\n\n//go:linkname libc_link libc_link\n//go:cgo_import_dynamic libc_link link \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(funcPC(libc_linkat_trampoline), uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_linkat_trampoline()\n\n//go:linkname libc_linkat libc_linkat\n//go:cgo_import_dynamic libc_linkat linkat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_listen_trampoline), uintptr(s), uintptr(backlog), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_listen_trampoline()\n\n//go:linkname libc_listen libc_listen\n//go:cgo_import_dynamic libc_listen listen \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_mkdir_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_mkdir_trampoline()\n\n//go:linkname libc_mkdir libc_mkdir\n//go:cgo_import_dynamic libc_mkdir mkdir \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_mkdirat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_mkdirat_trampoline()\n\n//go:linkname libc_mkdirat libc_mkdirat\n//go:cgo_import_dynamic libc_mkdirat mkdirat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_mkfifo_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_mkfifo_trampoline()\n\n//go:linkname libc_mkfifo libc_mkfifo\n//go:cgo_import_dynamic libc_mkfifo mkfifo \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknod(path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_mknod_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_mknod_trampoline()\n\n//go:linkname libc_mknod libc_mknod\n//go:cgo_import_dynamic libc_mknod mknod \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall(funcPC(libc_open_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_open_trampoline()\n\n//go:linkname libc_open libc_open\n//go:cgo_import_dynamic libc_open open \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall6(funcPC(libc_openat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_openat_trampoline()\n\n//go:linkname libc_openat libc_openat\n//go:cgo_import_dynamic libc_openat openat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall(funcPC(libc_pathconf_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_pathconf_trampoline()\n\n//go:linkname libc_pathconf libc_pathconf\n//go:cgo_import_dynamic libc_pathconf pathconf \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(funcPC(libc_pread_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_pread_trampoline()\n\n//go:linkname libc_pread libc_pread\n//go:cgo_import_dynamic libc_pread pread \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(funcPC(libc_pwrite_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_pwrite_trampoline()\n\n//go:linkname libc_pwrite libc_pwrite\n//go:cgo_import_dynamic libc_pwrite pwrite \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(funcPC(libc_read_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_read_trampoline()\n\n//go:linkname libc_read libc_read\n//go:cgo_import_dynamic libc_read read \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(funcPC(libc_readlink_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_readlink_trampoline()\n\n//go:linkname libc_readlink libc_readlink\n//go:cgo_import_dynamic libc_readlink readlink \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(funcPC(libc_readlinkat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_readlinkat_trampoline()\n\n//go:linkname libc_readlinkat libc_readlinkat\n//go:cgo_import_dynamic libc_readlinkat readlinkat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_rename_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_rename_trampoline()\n\n//go:linkname libc_rename libc_rename\n//go:cgo_import_dynamic libc_rename rename \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(fromfd int, from string, tofd int, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(funcPC(libc_renameat_trampoline), uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_renameat_trampoline()\n\n//go:linkname libc_renameat libc_renameat\n//go:cgo_import_dynamic libc_renameat renameat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Revoke(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_revoke_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_revoke_trampoline()\n\n//go:linkname libc_revoke libc_revoke\n//go:cgo_import_dynamic libc_revoke revoke \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_rmdir_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_rmdir_trampoline()\n\n//go:linkname libc_rmdir libc_rmdir\n//go:cgo_import_dynamic libc_rmdir rmdir \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, _, e1 := syscall_syscall(funcPC(libc_lseek_trampoline), uintptr(fd), uintptr(offset), uintptr(whence))\n\tnewoffset = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_lseek_trampoline()\n\n//go:linkname libc_lseek libc_lseek\n//go:cgo_import_dynamic libc_lseek lseek \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) {\n\t_, _, e1 := syscall_syscall6(funcPC(libc_select_trampoline), uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_select_trampoline()\n\n//go:linkname libc_select libc_select\n//go:cgo_import_dynamic libc_select select \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_setegid_trampoline), uintptr(egid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_setegid_trampoline()\n\n//go:linkname libc_setegid libc_setegid\n//go:cgo_import_dynamic libc_setegid setegid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(funcPC(libc_seteuid_trampoline), uintptr(euid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_seteuid_trampoline()\n\n//go:linkname libc_seteuid libc_seteuid\n//go:cgo_import_dynamic libc_seteuid seteuid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(funcPC(libc_setgid_trampoline), uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_setgid_trampoline()\n\n//go:linkname libc_setgid libc_setgid\n//go:cgo_import_dynamic libc_setgid setgid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setlogin(name string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_setlogin_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_setlogin_trampoline()\n\n//go:linkname libc_setlogin libc_setlogin\n//go:cgo_import_dynamic libc_setlogin setlogin \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(funcPC(libc_setpgid_trampoline), uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_setpgid_trampoline()\n\n//go:linkname libc_setpgid libc_setpgid\n//go:cgo_import_dynamic libc_setpgid setpgid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_setpriority_trampoline), uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_setpriority_trampoline()\n\n//go:linkname libc_setpriority libc_setpriority\n//go:cgo_import_dynamic libc_setpriority setpriority \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setprivexec(flag int) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_setprivexec_trampoline), uintptr(flag), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_setprivexec_trampoline()\n\n//go:linkname libc_setprivexec libc_setprivexec\n//go:cgo_import_dynamic libc_setprivexec setprivexec \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(funcPC(libc_setregid_trampoline), uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_setregid_trampoline()\n\n//go:linkname libc_setregid libc_setregid\n//go:cgo_import_dynamic libc_setregid setregid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(funcPC(libc_setreuid_trampoline), uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_setreuid_trampoline()\n\n//go:linkname libc_setreuid libc_setreuid\n//go:cgo_import_dynamic libc_setreuid setreuid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := syscall_rawSyscall(funcPC(libc_setrlimit_trampoline), uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_setrlimit_trampoline()\n\n//go:linkname libc_setrlimit libc_setrlimit\n//go:cgo_import_dynamic libc_setrlimit setrlimit \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(funcPC(libc_setsid_trampoline), 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_setsid_trampoline()\n\n//go:linkname libc_setsid libc_setsid\n//go:cgo_import_dynamic libc_setsid setsid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := syscall_rawSyscall(funcPC(libc_settimeofday_trampoline), uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_settimeofday_trampoline()\n\n//go:linkname libc_settimeofday libc_settimeofday\n//go:cgo_import_dynamic libc_settimeofday settimeofday \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(funcPC(libc_setuid_trampoline), uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_setuid_trampoline()\n\n//go:linkname libc_setuid libc_setuid\n//go:cgo_import_dynamic libc_setuid setuid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_symlink_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_symlink_trampoline()\n\n//go:linkname libc_symlink libc_symlink\n//go:cgo_import_dynamic libc_symlink symlink \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_symlinkat_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_symlinkat_trampoline()\n\n//go:linkname libc_symlinkat libc_symlinkat\n//go:cgo_import_dynamic libc_symlinkat symlinkat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_sync_trampoline), 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_sync_trampoline()\n\n//go:linkname libc_sync libc_sync\n//go:cgo_import_dynamic libc_sync sync \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_truncate_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_truncate_trampoline()\n\n//go:linkname libc_truncate libc_truncate\n//go:cgo_import_dynamic libc_truncate truncate \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(newmask int) (oldmask int) {\n\tr0, _, _ := syscall_syscall(funcPC(libc_umask_trampoline), uintptr(newmask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\nfunc libc_umask_trampoline()\n\n//go:linkname libc_umask libc_umask\n//go:cgo_import_dynamic libc_umask umask \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Undelete(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_undelete_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_undelete_trampoline()\n\n//go:linkname libc_undelete libc_undelete\n//go:cgo_import_dynamic libc_undelete undelete \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_unlink_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_unlink_trampoline()\n\n//go:linkname libc_unlink libc_unlink\n//go:cgo_import_dynamic libc_unlink unlink \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_unlinkat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_unlinkat_trampoline()\n\n//go:linkname libc_unlinkat libc_unlinkat\n//go:cgo_import_dynamic libc_unlinkat unlinkat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_unmount_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_unmount_trampoline()\n\n//go:linkname libc_unmount libc_unmount\n//go:cgo_import_dynamic libc_unmount unmount \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(funcPC(libc_write_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_write_trampoline()\n\n//go:linkname libc_write libc_write\n//go:cgo_import_dynamic libc_write write \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := syscall_syscall6(funcPC(libc_mmap_trampoline), uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos))\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_mmap_trampoline()\n\n//go:linkname libc_mmap libc_mmap\n//go:cgo_import_dynamic libc_mmap mmap \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_munmap_trampoline), uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_munmap_trampoline()\n\n//go:linkname libc_munmap libc_munmap\n//go:cgo_import_dynamic libc_munmap munmap \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc readlen(fd int, buf *byte, nbuf int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(funcPC(libc_read_trampoline), uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc writelen(fd int, buf *byte, nbuf int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(funcPC(libc_write_trampoline), uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc gettimeofday(tp *Timeval) (sec int64, usec int32, err error) {\n\tr0, r1, e1 := syscall_rawSyscall(funcPC(libc_gettimeofday_trampoline), uintptr(unsafe.Pointer(tp)), 0, 0)\n\tsec = int64(r0)\n\tusec = int32(r1)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_gettimeofday_trampoline()\n\n//go:linkname libc_gettimeofday libc_gettimeofday\n//go:cgo_import_dynamic libc_gettimeofday gettimeofday \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_fstat_trampoline), uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_fstat_trampoline()\n\n//go:linkname libc_fstat libc_fstat\n//go:cgo_import_dynamic libc_fstat fstat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(funcPC(libc_fstatat_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_fstatat_trampoline()\n\n//go:linkname libc_fstatat libc_fstatat\n//go:cgo_import_dynamic libc_fstatat fstatat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, stat *Statfs_t) (err error) {\n\t_, _, e1 := syscall_syscall(funcPC(libc_fstatfs_trampoline), uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_fstatfs_trampoline()\n\n//go:linkname libc_fstatfs libc_fstatfs\n//go:cgo_import_dynamic libc_fstatfs fstatfs \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(funcPC(libc_getfsstat_trampoline), uintptr(buf), uintptr(size), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_getfsstat_trampoline()\n\n//go:linkname libc_getfsstat libc_getfsstat\n//go:cgo_import_dynamic libc_getfsstat getfsstat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_lstat_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_lstat_trampoline()\n\n//go:linkname libc_lstat libc_lstat\n//go:cgo_import_dynamic libc_lstat lstat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_stat_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_stat_trampoline()\n\n//go:linkname libc_stat libc_stat\n//go:cgo_import_dynamic libc_stat stat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, stat *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(funcPC(libc_statfs_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc libc_statfs_trampoline()\n\n//go:linkname libc_statfs libc_statfs\n//go:cgo_import_dynamic libc_statfs statfs \"/usr/lib/libSystem.B.dylib\"\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s",
    "content": "// go run mkasm_darwin.go arm64\n// Code generated by the command above; DO NOT EDIT.\n\n// +build go1.12\n\n#include \"textflag.h\"\nTEXT ·libc_getgroups_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getgroups(SB)\nTEXT ·libc_setgroups_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setgroups(SB)\nTEXT ·libc_wait4_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_wait4(SB)\nTEXT ·libc_accept_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_accept(SB)\nTEXT ·libc_bind_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_bind(SB)\nTEXT ·libc_connect_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_connect(SB)\nTEXT ·libc_socket_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_socket(SB)\nTEXT ·libc_getsockopt_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getsockopt(SB)\nTEXT ·libc_setsockopt_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setsockopt(SB)\nTEXT ·libc_getpeername_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpeername(SB)\nTEXT ·libc_getsockname_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getsockname(SB)\nTEXT ·libc_shutdown_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_shutdown(SB)\nTEXT ·libc_socketpair_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_socketpair(SB)\nTEXT ·libc_recvfrom_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_recvfrom(SB)\nTEXT ·libc_sendto_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sendto(SB)\nTEXT ·libc_recvmsg_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_recvmsg(SB)\nTEXT ·libc_sendmsg_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sendmsg(SB)\nTEXT ·libc_kevent_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_kevent(SB)\nTEXT ·libc___sysctl_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc___sysctl(SB)\nTEXT ·libc_utimes_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_utimes(SB)\nTEXT ·libc_futimes_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_futimes(SB)\nTEXT ·libc_fcntl_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fcntl(SB)\nTEXT ·libc_poll_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_poll(SB)\nTEXT ·libc_madvise_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_madvise(SB)\nTEXT ·libc_mlock_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mlock(SB)\nTEXT ·libc_mlockall_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mlockall(SB)\nTEXT ·libc_mprotect_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mprotect(SB)\nTEXT ·libc_msync_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_msync(SB)\nTEXT ·libc_munlock_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_munlock(SB)\nTEXT ·libc_munlockall_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_munlockall(SB)\nTEXT ·libc_ptrace_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_ptrace(SB)\nTEXT ·libc_getattrlist_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getattrlist(SB)\nTEXT ·libc_pipe_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pipe(SB)\nTEXT ·libc_getxattr_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getxattr(SB)\nTEXT ·libc_fgetxattr_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fgetxattr(SB)\nTEXT ·libc_setxattr_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setxattr(SB)\nTEXT ·libc_fsetxattr_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fsetxattr(SB)\nTEXT ·libc_removexattr_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_removexattr(SB)\nTEXT ·libc_fremovexattr_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fremovexattr(SB)\nTEXT ·libc_listxattr_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_listxattr(SB)\nTEXT ·libc_flistxattr_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_flistxattr(SB)\nTEXT ·libc_setattrlist_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setattrlist(SB)\nTEXT ·libc_kill_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_kill(SB)\nTEXT ·libc_ioctl_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_ioctl(SB)\nTEXT ·libc_sendfile_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sendfile(SB)\nTEXT ·libc_access_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_access(SB)\nTEXT ·libc_adjtime_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_adjtime(SB)\nTEXT ·libc_chdir_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chdir(SB)\nTEXT ·libc_chflags_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chflags(SB)\nTEXT ·libc_chmod_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chmod(SB)\nTEXT ·libc_chown_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chown(SB)\nTEXT ·libc_chroot_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chroot(SB)\nTEXT ·libc_close_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_close(SB)\nTEXT ·libc_dup_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_dup(SB)\nTEXT ·libc_dup2_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_dup2(SB)\nTEXT ·libc_exchangedata_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_exchangedata(SB)\nTEXT ·libc_exit_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_exit(SB)\nTEXT ·libc_faccessat_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_faccessat(SB)\nTEXT ·libc_fchdir_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchdir(SB)\nTEXT ·libc_fchflags_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchflags(SB)\nTEXT ·libc_fchmod_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchmod(SB)\nTEXT ·libc_fchmodat_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchmodat(SB)\nTEXT ·libc_fchown_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchown(SB)\nTEXT ·libc_fchownat_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchownat(SB)\nTEXT ·libc_flock_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_flock(SB)\nTEXT ·libc_fpathconf_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fpathconf(SB)\nTEXT ·libc_fsync_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fsync(SB)\nTEXT ·libc_ftruncate_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_ftruncate(SB)\nTEXT ·libc_getdtablesize_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getdtablesize(SB)\nTEXT ·libc_getegid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getegid(SB)\nTEXT ·libc_geteuid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_geteuid(SB)\nTEXT ·libc_getgid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getgid(SB)\nTEXT ·libc_getpgid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpgid(SB)\nTEXT ·libc_getpgrp_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpgrp(SB)\nTEXT ·libc_getpid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpid(SB)\nTEXT ·libc_getppid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getppid(SB)\nTEXT ·libc_getpriority_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpriority(SB)\nTEXT ·libc_getrlimit_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getrlimit(SB)\nTEXT ·libc_getrusage_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getrusage(SB)\nTEXT ·libc_getsid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getsid(SB)\nTEXT ·libc_getuid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getuid(SB)\nTEXT ·libc_issetugid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_issetugid(SB)\nTEXT ·libc_kqueue_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_kqueue(SB)\nTEXT ·libc_lchown_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_lchown(SB)\nTEXT ·libc_link_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_link(SB)\nTEXT ·libc_linkat_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_linkat(SB)\nTEXT ·libc_listen_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_listen(SB)\nTEXT ·libc_mkdir_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkdir(SB)\nTEXT ·libc_mkdirat_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkdirat(SB)\nTEXT ·libc_mkfifo_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkfifo(SB)\nTEXT ·libc_mknod_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mknod(SB)\nTEXT ·libc_open_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_open(SB)\nTEXT ·libc_openat_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_openat(SB)\nTEXT ·libc_pathconf_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pathconf(SB)\nTEXT ·libc_pread_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pread(SB)\nTEXT ·libc_pwrite_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pwrite(SB)\nTEXT ·libc_read_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_read(SB)\nTEXT ·libc_readlink_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_readlink(SB)\nTEXT ·libc_readlinkat_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_readlinkat(SB)\nTEXT ·libc_rename_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_rename(SB)\nTEXT ·libc_renameat_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_renameat(SB)\nTEXT ·libc_revoke_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_revoke(SB)\nTEXT ·libc_rmdir_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_rmdir(SB)\nTEXT ·libc_lseek_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_lseek(SB)\nTEXT ·libc_select_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_select(SB)\nTEXT ·libc_setegid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setegid(SB)\nTEXT ·libc_seteuid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_seteuid(SB)\nTEXT ·libc_setgid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setgid(SB)\nTEXT ·libc_setlogin_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setlogin(SB)\nTEXT ·libc_setpgid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setpgid(SB)\nTEXT ·libc_setpriority_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setpriority(SB)\nTEXT ·libc_setprivexec_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setprivexec(SB)\nTEXT ·libc_setregid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setregid(SB)\nTEXT ·libc_setreuid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setreuid(SB)\nTEXT ·libc_setrlimit_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setrlimit(SB)\nTEXT ·libc_setsid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setsid(SB)\nTEXT ·libc_settimeofday_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_settimeofday(SB)\nTEXT ·libc_setuid_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setuid(SB)\nTEXT ·libc_symlink_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_symlink(SB)\nTEXT ·libc_symlinkat_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_symlinkat(SB)\nTEXT ·libc_sync_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sync(SB)\nTEXT ·libc_truncate_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_truncate(SB)\nTEXT ·libc_umask_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_umask(SB)\nTEXT ·libc_undelete_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_undelete(SB)\nTEXT ·libc_unlink_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unlink(SB)\nTEXT ·libc_unlinkat_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unlinkat(SB)\nTEXT ·libc_unmount_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unmount(SB)\nTEXT ·libc_write_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_write(SB)\nTEXT ·libc_mmap_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mmap(SB)\nTEXT ·libc_munmap_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_munmap(SB)\nTEXT ·libc_gettimeofday_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_gettimeofday(SB)\nTEXT ·libc_fstat_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fstat(SB)\nTEXT ·libc_fstatat_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fstatat(SB)\nTEXT ·libc_fstatfs_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fstatfs(SB)\nTEXT ·libc_getfsstat_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getfsstat(SB)\nTEXT ·libc_lstat_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_lstat(SB)\nTEXT ·libc_stat_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_stat(SB)\nTEXT ·libc_statfs_trampoline(SB),NOSPLIT,$0-0\n\tJMP\tlibc_statfs(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go",
    "content": "// go run mksyscall.go -dragonfly -tags dragonfly,amd64 syscall_bsd.go syscall_dragonfly.go syscall_dragonfly_amd64.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build dragonfly,amd64\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(mib) > 0 {\n\t\t_p0 = unsafe.Pointer(&mib[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, timeval *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimes(fd int, timeval *[2]Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, behav int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe() (r int, w int, err error) {\n\tr0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0)\n\tr = int(r0)\n\tw = int(r1)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc extpread(fd int, p []byte, flags int, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTPREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(offset), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc extpwrite(fd int, p []byte, flags int, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTPWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(offset), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chflags(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(from int, to int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tSyscall(SYS_EXIT, uintptr(code), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchflags(fd int, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, stat *Statfs_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_GETDIRENTRIES, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdtablesize() (size int) {\n\tr0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0)\n\tsize = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgrp int) {\n\tr0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)\n\tpgrp = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Issetugid() (tainted bool) {\n\tr0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0)\n\ttainted = bool(r0 != 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, signum syscall.Signal) (err error) {\n\t_, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kqueue() (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknod(path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(fd int, path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(fromfd int, from string, tofd int, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Revoke(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(whence), 0, 0)\n\tnewoffset = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) {\n\t_, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setlogin(name string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresgid(rgid int, egid int, sgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresuid(ruid int, euid int, suid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, stat *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(newmask int) (oldmask int) {\n\tr0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Undelete(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), 0, 0)\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc readlen(fd int, buf *byte, nbuf int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc writelen(fd int, buf *byte, nbuf int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go",
    "content": "// go run mksyscall.go -l32 -tags freebsd,386 syscall_bsd.go syscall_freebsd.go syscall_freebsd_386.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build freebsd,386\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(mib) > 0 {\n\t\t_p0 = unsafe.Pointer(&mib[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, timeval *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimes(fd int, timeval *[2]Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, behav int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe2(p *[2]_C_int, flags int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc CapEnter() (err error) {\n\t_, _, e1 := Syscall(SYS_CAP_ENTER, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc capRightsGet(version int, fd int, rightsp *CapRights) (err error) {\n\t_, _, e1 := Syscall(SYS___CAP_RIGHTS_GET, uintptr(version), uintptr(fd), uintptr(unsafe.Pointer(rightsp)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc capRightsLimit(fd int, rightsp *CapRights) (err error) {\n\t_, _, e1 := Syscall(SYS_CAP_RIGHTS_LIMIT, uintptr(fd), uintptr(unsafe.Pointer(rightsp)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chflags(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(from int, to int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tSyscall(SYS_EXIT, uintptr(code), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32), uintptr(advice))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchflags(fd int, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fstat(fd int, stat *stat_freebsd11_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fstat_freebsd12(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fstatat(fd int, path string, stat *stat_freebsd11_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fstatat_freebsd12(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fstatfs(fd int, stat *statfs_freebsd11_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fstatfs_freebsd12(fd int, stat *Statfs_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATFS_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), uintptr(length>>32))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_GETDIRENTRIES, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getdirentries_freebsd12(fd int, buf []byte, basep *uintptr) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_GETDIRENTRIES_FREEBSD12, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdtablesize() (size int) {\n\tr0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0)\n\tsize = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgrp int) {\n\tr0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)\n\tpgrp = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Issetugid() (tainted bool) {\n\tr0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0)\n\ttainted = bool(r0 != 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, signum syscall.Signal) (err error) {\n\t_, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kqueue() (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc lstat(path string, stat *stat_freebsd11_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mknod(path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mknodat(fd int, path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mknodat_freebsd12(fd int, path string, mode uint32, dev uint64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MKNODAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(fdat int, path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_OPENAT, uintptr(fdat), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(fromfd int, from string, tofd int, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Revoke(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(whence), 0, 0)\n\tnewoffset = int64(int64(r1)<<32 | int64(r0))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) {\n\t_, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setlogin(name string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresgid(rgid int, egid int, sgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresuid(ruid int, euid int, suid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc stat(path string, stat *stat_freebsd11_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc statfs(path string, stat *statfs_freebsd11_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc statfs_freebsd12(path string, stat *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATFS_FREEBSD12, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), uintptr(length>>32))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(newmask int) (oldmask int) {\n\tr0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Undelete(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos), uintptr(pos>>32), 0, 0)\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc readlen(fd int, buf *byte, nbuf int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc writelen(fd int, buf *byte, nbuf int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go",
    "content": "// go run mksyscall.go -tags freebsd,amd64 syscall_bsd.go syscall_freebsd.go syscall_freebsd_amd64.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build freebsd,amd64\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(mib) > 0 {\n\t\t_p0 = unsafe.Pointer(&mib[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, timeval *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimes(fd int, timeval *[2]Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, behav int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe2(p *[2]_C_int, flags int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc CapEnter() (err error) {\n\t_, _, e1 := Syscall(SYS_CAP_ENTER, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc capRightsGet(version int, fd int, rightsp *CapRights) (err error) {\n\t_, _, e1 := Syscall(SYS___CAP_RIGHTS_GET, uintptr(version), uintptr(fd), uintptr(unsafe.Pointer(rightsp)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc capRightsLimit(fd int, rightsp *CapRights) (err error) {\n\t_, _, e1 := Syscall(SYS_CAP_RIGHTS_LIMIT, uintptr(fd), uintptr(unsafe.Pointer(rightsp)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chflags(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(from int, to int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tSyscall(SYS_EXIT, uintptr(code), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchflags(fd int, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fstat(fd int, stat *stat_freebsd11_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fstat_freebsd12(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fstatat(fd int, path string, stat *stat_freebsd11_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fstatat_freebsd12(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fstatfs(fd int, stat *statfs_freebsd11_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fstatfs_freebsd12(fd int, stat *Statfs_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATFS_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_GETDIRENTRIES, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getdirentries_freebsd12(fd int, buf []byte, basep *uintptr) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_GETDIRENTRIES_FREEBSD12, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdtablesize() (size int) {\n\tr0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0)\n\tsize = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgrp int) {\n\tr0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)\n\tpgrp = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Issetugid() (tainted bool) {\n\tr0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0)\n\ttainted = bool(r0 != 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, signum syscall.Signal) (err error) {\n\t_, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kqueue() (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc lstat(path string, stat *stat_freebsd11_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mknod(path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mknodat(fd int, path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mknodat_freebsd12(fd int, path string, mode uint32, dev uint64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MKNODAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(fdat int, path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_OPENAT, uintptr(fdat), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(fromfd int, from string, tofd int, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Revoke(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))\n\tnewoffset = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) {\n\t_, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setlogin(name string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresgid(rgid int, egid int, sgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresuid(ruid int, euid int, suid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc stat(path string, stat *stat_freebsd11_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc statfs(path string, stat *statfs_freebsd11_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc statfs_freebsd12(path string, stat *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATFS_FREEBSD12, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(newmask int) (oldmask int) {\n\tr0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Undelete(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos))\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc readlen(fd int, buf *byte, nbuf int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc writelen(fd int, buf *byte, nbuf int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go",
    "content": "// go run mksyscall.go -l32 -arm -tags freebsd,arm syscall_bsd.go syscall_freebsd.go syscall_freebsd_arm.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build freebsd,arm\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(mib) > 0 {\n\t\t_p0 = unsafe.Pointer(&mib[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, timeval *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimes(fd int, timeval *[2]Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, behav int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe2(p *[2]_C_int, flags int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc CapEnter() (err error) {\n\t_, _, e1 := Syscall(SYS_CAP_ENTER, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc capRightsGet(version int, fd int, rightsp *CapRights) (err error) {\n\t_, _, e1 := Syscall(SYS___CAP_RIGHTS_GET, uintptr(version), uintptr(fd), uintptr(unsafe.Pointer(rightsp)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc capRightsLimit(fd int, rightsp *CapRights) (err error) {\n\t_, _, e1 := Syscall(SYS_CAP_RIGHTS_LIMIT, uintptr(fd), uintptr(unsafe.Pointer(rightsp)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chflags(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(from int, to int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tSyscall(SYS_EXIT, uintptr(code), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall9(SYS_POSIX_FADVISE, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32), uintptr(advice), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchflags(fd int, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fstat(fd int, stat *stat_freebsd11_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fstat_freebsd12(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fstatat(fd int, path string, stat *stat_freebsd11_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fstatat_freebsd12(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fstatfs(fd int, stat *statfs_freebsd11_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fstatfs_freebsd12(fd int, stat *Statfs_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATFS_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_GETDIRENTRIES, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getdirentries_freebsd12(fd int, buf []byte, basep *uintptr) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_GETDIRENTRIES_FREEBSD12, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdtablesize() (size int) {\n\tr0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0)\n\tsize = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgrp int) {\n\tr0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)\n\tpgrp = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Issetugid() (tainted bool) {\n\tr0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0)\n\ttainted = bool(r0 != 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, signum syscall.Signal) (err error) {\n\t_, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kqueue() (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc lstat(path string, stat *stat_freebsd11_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mknod(path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mknodat(fd int, path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mknodat_freebsd12(fd int, path string, mode uint32, dev uint64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MKNODAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(fdat int, path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_OPENAT, uintptr(fdat), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(fromfd int, from string, tofd int, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Revoke(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(whence), 0)\n\tnewoffset = int64(int64(r1)<<32 | int64(r0))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) {\n\t_, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setlogin(name string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresgid(rgid int, egid int, sgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresuid(ruid int, euid int, suid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc stat(path string, stat *stat_freebsd11_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc statfs(path string, stat *statfs_freebsd11_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc statfs_freebsd12(path string, stat *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATFS_FREEBSD12, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(newmask int) (oldmask int) {\n\tr0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Undelete(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), uintptr(pos>>32), 0)\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc readlen(fd int, buf *byte, nbuf int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc writelen(fd int, buf *byte, nbuf int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go",
    "content": "// go run mksyscall.go -tags freebsd,arm64 -- syscall_bsd.go syscall_freebsd.go syscall_freebsd_arm64.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build freebsd,arm64\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(mib) > 0 {\n\t\t_p0 = unsafe.Pointer(&mib[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, timeval *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimes(fd int, timeval *[2]Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, behav int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe2(p *[2]_C_int, flags int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc CapEnter() (err error) {\n\t_, _, e1 := Syscall(SYS_CAP_ENTER, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc capRightsGet(version int, fd int, rightsp *CapRights) (err error) {\n\t_, _, e1 := Syscall(SYS___CAP_RIGHTS_GET, uintptr(version), uintptr(fd), uintptr(unsafe.Pointer(rightsp)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc capRightsLimit(fd int, rightsp *CapRights) (err error) {\n\t_, _, e1 := Syscall(SYS_CAP_RIGHTS_LIMIT, uintptr(fd), uintptr(unsafe.Pointer(rightsp)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chflags(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(from int, to int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tSyscall(SYS_EXIT, uintptr(code), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchflags(fd int, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fstat(fd int, stat *stat_freebsd11_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fstat_freebsd12(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fstatat(fd int, path string, stat *stat_freebsd11_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fstatat_freebsd12(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fstatfs(fd int, stat *statfs_freebsd11_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fstatfs_freebsd12(fd int, stat *Statfs_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATFS_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_GETDIRENTRIES, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getdirentries_freebsd12(fd int, buf []byte, basep *uintptr) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_GETDIRENTRIES_FREEBSD12, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdtablesize() (size int) {\n\tr0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0)\n\tsize = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgrp int) {\n\tr0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)\n\tpgrp = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Issetugid() (tainted bool) {\n\tr0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0)\n\ttainted = bool(r0 != 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, signum syscall.Signal) (err error) {\n\t_, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kqueue() (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc lstat(path string, stat *stat_freebsd11_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mknod(path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mknodat(fd int, path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mknodat_freebsd12(fd int, path string, mode uint32, dev uint64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MKNODAT_FREEBSD12, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(fdat int, path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_OPENAT, uintptr(fdat), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(fromfd int, from string, tofd int, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Revoke(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))\n\tnewoffset = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) {\n\t_, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setlogin(name string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresgid(rgid int, egid int, sgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresuid(ruid int, euid int, suid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc stat(path string, stat *stat_freebsd11_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc statfs(path string, stat *statfs_freebsd11_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc statfs_freebsd12(path string, stat *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATFS_FREEBSD12, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(newmask int) (oldmask int) {\n\tr0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Undelete(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos))\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc readlen(fd int, buf *byte, nbuf int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc writelen(fd int, buf *byte, nbuf int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_linux_386.go",
    "content": "// go run mksyscall.go -l32 -tags linux,386 syscall_linux.go syscall_linux_386.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build linux,386\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc FanotifyInit(flags uint, event_f_flags uint) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_FANOTIFY_INIT, uintptr(flags), uintptr(event_f_flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {\n\t_, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(mask>>32), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fchmodat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) {\n\tr0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlJoin(cmd int, arg2 string) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(arg2)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(arg3)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(arg4)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(payload) > 0 {\n\t\t_p0 = unsafe.Pointer(&payload[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(arg)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(source)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(target)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 *byte\n\t_p2, err = BytePtrFromString(fstype)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Acct(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(keyType)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(description)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(payload) > 0 {\n\t\t_p2 = unsafe.Pointer(&payload[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0)\n\tid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtimex(buf *Timex) (state int, err error) {\n\tr0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0)\n\tstate = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGetres(clockid int32, res *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOCK_GETRES, uintptr(clockid), uintptr(unsafe.Pointer(res)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGettime(clockid int32, time *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockNanosleep(clockid int32, flags int, request *Timespec, remain *Timespec) (err error) {\n\t_, _, e1 := Syscall6(SYS_CLOCK_NANOSLEEP, uintptr(clockid), uintptr(flags), uintptr(unsafe.Pointer(request)), uintptr(unsafe.Pointer(remain)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc DeleteModule(name string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_DELETE_MODULE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(oldfd int) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup3(oldfd int, newfd int, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollCreate1(flag int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Eventfd(initval uint, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tSyscallNoError(SYS_EXIT_GROUP, uintptr(code), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fallocate(fd int, mode uint32, off int64, len int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(off>>32), uintptr(len), uintptr(len>>32))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fdatasync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc FinitModule(fd int, params string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(params)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FINIT_MODULE, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flistxattr(fd int, dest []byte) (sz int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p0 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_FLISTXATTR, uintptr(fd), uintptr(_p0), uintptr(len(dest)))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fremovexattr(fd int, attr string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdents(fd int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETPID, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETPPID, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrandom(buf []byte, flags int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettid() (tid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETTID, 0, 0, 0)\n\ttid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getxattr(path string, attr string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p2 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InitModule(moduleImage []byte, params string) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(moduleImage) > 0 {\n\t\t_p0 = unsafe.Pointer(&moduleImage[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(params)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_INIT_MODULE, uintptr(_p0), uintptr(len(moduleImage)), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(pathname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask))\n\twatchdesc = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InotifyInit1(flags int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0)\n\tsuccess = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, sig syscall.Signal) (err error) {\n\t_, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Klogctl(typ int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lgetxattr(path string, attr string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p2 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listxattr(path string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Llistxattr(path string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lremovexattr(path string, attr string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lsetxattr(path string, attr string, data []byte, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(data) > 0 {\n\t\t_p2 = unsafe.Pointer(&data[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc MemfdCreate(name string, flags int) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_MEMFD_CREATE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_PERF_EVENT_OPEN, uintptr(unsafe.Pointer(attr)), uintptr(pid), uintptr(cpu), uintptr(groupFd), uintptr(flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc PivotRoot(newroot string, putold string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(newroot)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(putold)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n\tr0, _, 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\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Removexattr(path string, attr string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT2, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(keyType)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(description)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 *byte\n\t_p2, err = BytePtrFromString(callback)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0)\n\tid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setdomainname(p []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sethostname(p []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setns(fd int, nstype int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setxattr(path string, attr string, data []byte, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(data) > 0 {\n\t\t_p2 = unsafe.Pointer(&data[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc signalfd(fd int, sigmask *Sigset_t, maskSize uintptr, flags int) (newfd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SIGNALFD4, uintptr(fd), uintptr(unsafe.Pointer(sigmask)), uintptr(maskSize), uintptr(flags), 0, 0)\n\tnewfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_STATX, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mask), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() {\n\tSyscallNoError(SYS_SYNC, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Syncfs(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sysinfo(info *Sysinfo_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {\n\tr0, r1, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)\n\tn = int64(int64(r1)<<32 | int64(r0))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tgkill(tgid int, tid int, sig syscall.Signal) (err error) {\n\t_, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Times(tms *Tms) (ticks uintptr, err error) {\n\tr0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0)\n\tticks = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(mask int) (oldmask int) {\n\tr0, _ := RawSyscallNoError(SYS_UMASK, uintptr(mask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Uname(buf *Utsname) (err error) {\n\t_, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(target string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(target)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unshare(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc exitThread(code int) (err error) {\n\t_, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc readlen(fd int, p *byte, np int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc writelen(fd int, p *byte, np int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, advice int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc faccessat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc nameToHandleAt(dirFD int, pathname string, fh *fileHandle, mountID *_C_int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(pathname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_NAME_TO_HANDLE_AT, uintptr(dirFD), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(fh)), uintptr(unsafe.Pointer(mountID)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc openByHandleAt(mountFD int, fh *fileHandle, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_OPEN_BY_HANDLE_AT, uintptr(mountFD), uintptr(unsafe.Pointer(fh)), uintptr(flags))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe(p *[2]_C_int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe2(p *[2]_C_int, flags int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(oldfd int, newfd int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollCreate(size int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(events) > 0 {\n\t\t_p0 = unsafe.Pointer(&events[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall6(SYS_FADVISE64_64, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32), uintptr(advice))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN32, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall(SYS_FTRUNCATE64, uintptr(fd), uintptr(length), uintptr(length>>32))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEGID32, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (euid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEUID32, 0, 0, 0)\n\teuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETGID32, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETUID32, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InotifyInit() (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ioperm(from int, num int, on int) (err error) {\n\t_, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Iopl(level int) (err error) {\n\t_, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN32, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SENDFILE64, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)\n\twritten = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setfsgid(gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETFSGID32, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setfsuid(uid int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETFSUID32, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREGID32, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresgid(rgid int, egid int, sgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESGID32, uintptr(rgid), uintptr(egid), uintptr(sgid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresuid(ruid int, euid int, suid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESUID32, uintptr(ruid), uintptr(euid), uintptr(suid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREUID32, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc SyncFileRange(fd int, off int64, n int64, flags int) (err error) {\n\t_, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(off>>32), uintptr(n), uintptr(n>>32), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_TRUNCATE64, uintptr(unsafe.Pointer(_p0)), uintptr(length), uintptr(length>>32))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ustat(dev int, ubuf *Ustat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(n int, list *_Gid_t) (nn int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS32, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tnn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(n int, list *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS32, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) {\n\tr0, _, e1 := Syscall6(SYS_MMAP2, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(pageOffset))\n\txaddr = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pause() (err error) {\n\t_, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getrlimit(resource int, rlim *rlimit32) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setrlimit(resource int, rlim *rlimit32) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimesat(dirfd int, path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Time(t *Time_t) (tt Time_t, err error) {\n\tr0, _, e1 := RawSyscall(SYS_TIME, uintptr(unsafe.Pointer(t)), 0, 0)\n\ttt = Time_t(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Utime(path string, buf *Utimbuf) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go",
    "content": "// go run mksyscall.go -tags linux,amd64 syscall_linux.go syscall_linux_amd64.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build linux,amd64\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc FanotifyInit(flags uint, event_f_flags uint) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_FANOTIFY_INIT, uintptr(flags), uintptr(event_f_flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {\n\t_, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fchmodat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) {\n\tr0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlJoin(cmd int, arg2 string) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(arg2)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(arg3)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(arg4)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(payload) > 0 {\n\t\t_p0 = unsafe.Pointer(&payload[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(arg)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(source)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(target)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 *byte\n\t_p2, err = BytePtrFromString(fstype)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Acct(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(keyType)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(description)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(payload) > 0 {\n\t\t_p2 = unsafe.Pointer(&payload[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0)\n\tid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtimex(buf *Timex) (state int, err error) {\n\tr0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0)\n\tstate = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGetres(clockid int32, res *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOCK_GETRES, uintptr(clockid), uintptr(unsafe.Pointer(res)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGettime(clockid int32, time *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockNanosleep(clockid int32, flags int, request *Timespec, remain *Timespec) (err error) {\n\t_, _, e1 := Syscall6(SYS_CLOCK_NANOSLEEP, uintptr(clockid), uintptr(flags), uintptr(unsafe.Pointer(request)), uintptr(unsafe.Pointer(remain)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc DeleteModule(name string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_DELETE_MODULE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(oldfd int) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup3(oldfd int, newfd int, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollCreate1(flag int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Eventfd(initval uint, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tSyscallNoError(SYS_EXIT_GROUP, uintptr(code), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fallocate(fd int, mode uint32, off int64, len int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fdatasync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc FinitModule(fd int, params string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(params)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FINIT_MODULE, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flistxattr(fd int, dest []byte) (sz int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p0 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_FLISTXATTR, uintptr(fd), uintptr(_p0), uintptr(len(dest)))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fremovexattr(fd int, attr string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdents(fd int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETPID, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETPPID, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrandom(buf []byte, flags int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettid() (tid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETTID, 0, 0, 0)\n\ttid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getxattr(path string, attr string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p2 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InitModule(moduleImage []byte, params string) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(moduleImage) > 0 {\n\t\t_p0 = unsafe.Pointer(&moduleImage[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(params)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_INIT_MODULE, uintptr(_p0), uintptr(len(moduleImage)), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(pathname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask))\n\twatchdesc = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InotifyInit1(flags int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0)\n\tsuccess = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, sig syscall.Signal) (err error) {\n\t_, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Klogctl(typ int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lgetxattr(path string, attr string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p2 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listxattr(path string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Llistxattr(path string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lremovexattr(path string, attr string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lsetxattr(path string, attr string, data []byte, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(data) > 0 {\n\t\t_p2 = unsafe.Pointer(&data[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc MemfdCreate(name string, flags int) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_MEMFD_CREATE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_PERF_EVENT_OPEN, uintptr(unsafe.Pointer(attr)), uintptr(pid), uintptr(cpu), uintptr(groupFd), uintptr(flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc PivotRoot(newroot string, putold string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(newroot)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(putold)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n\tr0, _, 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\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Removexattr(path string, attr string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT2, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(keyType)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(description)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 *byte\n\t_p2, err = BytePtrFromString(callback)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0)\n\tid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setdomainname(p []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sethostname(p []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setns(fd int, nstype int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setxattr(path string, attr string, data []byte, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(data) > 0 {\n\t\t_p2 = unsafe.Pointer(&data[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc signalfd(fd int, sigmask *Sigset_t, maskSize uintptr, flags int) (newfd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SIGNALFD4, uintptr(fd), uintptr(unsafe.Pointer(sigmask)), uintptr(maskSize), uintptr(flags), 0, 0)\n\tnewfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_STATX, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mask), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() {\n\tSyscallNoError(SYS_SYNC, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Syncfs(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sysinfo(info *Sysinfo_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tgkill(tgid int, tid int, sig syscall.Signal) (err error) {\n\t_, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Times(tms *Tms) (ticks uintptr, err error) {\n\tr0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0)\n\tticks = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(mask int) (oldmask int) {\n\tr0, _ := RawSyscallNoError(SYS_UMASK, uintptr(mask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Uname(buf *Utsname) (err error) {\n\t_, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(target string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(target)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unshare(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc exitThread(code int) (err error) {\n\t_, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc readlen(fd int, p *byte, np int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc writelen(fd int, p *byte, np int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, advice int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc faccessat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc nameToHandleAt(dirFD int, pathname string, fh *fileHandle, mountID *_C_int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(pathname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_NAME_TO_HANDLE_AT, uintptr(dirFD), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(fh)), uintptr(unsafe.Pointer(mountID)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc openByHandleAt(mountFD int, fh *fileHandle, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_OPEN_BY_HANDLE_AT, uintptr(mountFD), uintptr(unsafe.Pointer(fh)), uintptr(flags))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(oldfd int, newfd int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollCreate(size int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(events) > 0 {\n\t\t_p0 = unsafe.Pointer(&events[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_NEWFSTATAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, buf *Statfs_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (euid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)\n\teuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(resource int, rlim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc inotifyInit() (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ioperm(from int, num int, on int) (err error) {\n\t_, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Iopl(level int) (err error) {\n\t_, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, n int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pause() (err error) {\n\t_, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (off int64, err error) {\n\tr0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))\n\toff = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)\n\twritten = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setfsgid(gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setfsuid(uid int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresgid(rgid int, egid int, sgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresuid(ruid int, euid int, suid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setrlimit(resource int, rlim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, buf *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc SyncFileRange(fd int, off int64, n int64, flags int) (err error) {\n\t_, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ustat(dev int, ubuf *Ustat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(n int, list *_Gid_t) (nn int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tnn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(n int, list *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {\n\tr0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset))\n\txaddr = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimesat(dirfd int, path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Utime(path string, buf *Utimbuf) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe(p *[2]_C_int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe2(p *[2]_C_int, flags int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(cmdline)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go",
    "content": "// go run mksyscall.go -l32 -arm -tags linux,arm syscall_linux.go syscall_linux_arm.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build linux,arm\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc FanotifyInit(flags uint, event_f_flags uint) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_FANOTIFY_INIT, uintptr(flags), uintptr(event_f_flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {\n\t_, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(mask>>32), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fchmodat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) {\n\tr0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlJoin(cmd int, arg2 string) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(arg2)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(arg3)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(arg4)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(payload) > 0 {\n\t\t_p0 = unsafe.Pointer(&payload[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(arg)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(source)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(target)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 *byte\n\t_p2, err = BytePtrFromString(fstype)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Acct(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(keyType)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(description)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(payload) > 0 {\n\t\t_p2 = unsafe.Pointer(&payload[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0)\n\tid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtimex(buf *Timex) (state int, err error) {\n\tr0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0)\n\tstate = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGetres(clockid int32, res *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOCK_GETRES, uintptr(clockid), uintptr(unsafe.Pointer(res)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGettime(clockid int32, time *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockNanosleep(clockid int32, flags int, request *Timespec, remain *Timespec) (err error) {\n\t_, _, e1 := Syscall6(SYS_CLOCK_NANOSLEEP, uintptr(clockid), uintptr(flags), uintptr(unsafe.Pointer(request)), uintptr(unsafe.Pointer(remain)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc DeleteModule(name string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_DELETE_MODULE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(oldfd int) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup3(oldfd int, newfd int, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollCreate1(flag int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Eventfd(initval uint, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tSyscallNoError(SYS_EXIT_GROUP, uintptr(code), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fallocate(fd int, mode uint32, off int64, len int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(off>>32), uintptr(len), uintptr(len>>32))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fdatasync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc FinitModule(fd int, params string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(params)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FINIT_MODULE, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flistxattr(fd int, dest []byte) (sz int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p0 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_FLISTXATTR, uintptr(fd), uintptr(_p0), uintptr(len(dest)))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fremovexattr(fd int, attr string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdents(fd int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETPID, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETPPID, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrandom(buf []byte, flags int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettid() (tid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETTID, 0, 0, 0)\n\ttid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getxattr(path string, attr string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p2 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InitModule(moduleImage []byte, params string) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(moduleImage) > 0 {\n\t\t_p0 = unsafe.Pointer(&moduleImage[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(params)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_INIT_MODULE, uintptr(_p0), uintptr(len(moduleImage)), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(pathname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask))\n\twatchdesc = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InotifyInit1(flags int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0)\n\tsuccess = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, sig syscall.Signal) (err error) {\n\t_, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Klogctl(typ int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lgetxattr(path string, attr string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p2 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listxattr(path string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Llistxattr(path string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lremovexattr(path string, attr string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lsetxattr(path string, attr string, data []byte, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(data) > 0 {\n\t\t_p2 = unsafe.Pointer(&data[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc MemfdCreate(name string, flags int) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_MEMFD_CREATE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_PERF_EVENT_OPEN, uintptr(unsafe.Pointer(attr)), uintptr(pid), uintptr(cpu), uintptr(groupFd), uintptr(flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc PivotRoot(newroot string, putold string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(newroot)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(putold)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n\tr0, _, 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\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Removexattr(path string, attr string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT2, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(keyType)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(description)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 *byte\n\t_p2, err = BytePtrFromString(callback)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0)\n\tid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setdomainname(p []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sethostname(p []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setns(fd int, nstype int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setxattr(path string, attr string, data []byte, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(data) > 0 {\n\t\t_p2 = unsafe.Pointer(&data[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc signalfd(fd int, sigmask *Sigset_t, maskSize uintptr, flags int) (newfd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SIGNALFD4, uintptr(fd), uintptr(unsafe.Pointer(sigmask)), uintptr(maskSize), uintptr(flags), 0, 0)\n\tnewfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_STATX, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mask), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() {\n\tSyscallNoError(SYS_SYNC, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Syncfs(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sysinfo(info *Sysinfo_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {\n\tr0, r1, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)\n\tn = int64(int64(r1)<<32 | int64(r0))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tgkill(tgid int, tid int, sig syscall.Signal) (err error) {\n\t_, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Times(tms *Tms) (ticks uintptr, err error) {\n\tr0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0)\n\tticks = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(mask int) (oldmask int) {\n\tr0, _ := RawSyscallNoError(SYS_UMASK, uintptr(mask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Uname(buf *Utsname) (err error) {\n\t_, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(target string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(target)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unshare(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc exitThread(code int) (err error) {\n\t_, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc readlen(fd int, p *byte, np int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc writelen(fd int, p *byte, np int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, advice int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc faccessat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc nameToHandleAt(dirFD int, pathname string, fh *fileHandle, mountID *_C_int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(pathname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_NAME_TO_HANDLE_AT, uintptr(dirFD), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(fh)), uintptr(unsafe.Pointer(mountID)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc openByHandleAt(mountFD int, fh *fileHandle, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_OPEN_BY_HANDLE_AT, uintptr(mountFD), uintptr(unsafe.Pointer(fh)), uintptr(flags))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe(p *[2]_C_int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe2(p *[2]_C_int, flags int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(n int, list *_Gid_t) (nn int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS32, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tnn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(n int, list *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS32, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, flags int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(flags), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(oldfd int, newfd int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollCreate(size int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(events) > 0 {\n\t\t_p0 = unsafe.Pointer(&events[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN32, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEGID32, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (euid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEUID32, 0, 0, 0)\n\teuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETGID32, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETUID32, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InotifyInit() (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN32, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, n int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pause() (err error) {\n\t_, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SENDFILE64, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)\n\twritten = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setfsgid(gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETFSGID32, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setfsuid(uid int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETFSUID32, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREGID32, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresgid(rgid int, egid int, sgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESGID32, uintptr(rgid), uintptr(egid), uintptr(sgid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresuid(ruid int, euid int, suid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESUID32, uintptr(ruid), uintptr(euid), uintptr(suid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREUID32, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ustat(dev int, ubuf *Ustat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimesat(dirfd int, path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_TRUNCATE64, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FTRUNCATE64, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) {\n\tr0, _, e1 := Syscall6(SYS_MMAP2, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(pageOffset))\n\txaddr = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getrlimit(resource int, rlim *rlimit32) (err error) {\n\t_, _, e1 := RawSyscall(SYS_UGETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setrlimit(resource int, rlim *rlimit32) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc armSyncFileRange(fd int, flags int, off int64, n int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_ARM_SYNC_FILE_RANGE, uintptr(fd), uintptr(flags), uintptr(off), uintptr(off>>32), uintptr(n), uintptr(n>>32))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(cmdline)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go",
    "content": "// go run mksyscall.go -tags linux,arm64 syscall_linux.go syscall_linux_arm64.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build linux,arm64\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc FanotifyInit(flags uint, event_f_flags uint) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_FANOTIFY_INIT, uintptr(flags), uintptr(event_f_flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {\n\t_, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fchmodat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) {\n\tr0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlJoin(cmd int, arg2 string) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(arg2)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(arg3)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(arg4)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(payload) > 0 {\n\t\t_p0 = unsafe.Pointer(&payload[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(arg)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(source)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(target)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 *byte\n\t_p2, err = BytePtrFromString(fstype)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Acct(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(keyType)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(description)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(payload) > 0 {\n\t\t_p2 = unsafe.Pointer(&payload[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0)\n\tid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtimex(buf *Timex) (state int, err error) {\n\tr0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0)\n\tstate = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGetres(clockid int32, res *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOCK_GETRES, uintptr(clockid), uintptr(unsafe.Pointer(res)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGettime(clockid int32, time *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockNanosleep(clockid int32, flags int, request *Timespec, remain *Timespec) (err error) {\n\t_, _, e1 := Syscall6(SYS_CLOCK_NANOSLEEP, uintptr(clockid), uintptr(flags), uintptr(unsafe.Pointer(request)), uintptr(unsafe.Pointer(remain)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc DeleteModule(name string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_DELETE_MODULE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(oldfd int) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup3(oldfd int, newfd int, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollCreate1(flag int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Eventfd(initval uint, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tSyscallNoError(SYS_EXIT_GROUP, uintptr(code), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fallocate(fd int, mode uint32, off int64, len int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fdatasync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc FinitModule(fd int, params string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(params)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FINIT_MODULE, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flistxattr(fd int, dest []byte) (sz int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p0 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_FLISTXATTR, uintptr(fd), uintptr(_p0), uintptr(len(dest)))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fremovexattr(fd int, attr string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdents(fd int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETPID, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETPPID, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrandom(buf []byte, flags int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettid() (tid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETTID, 0, 0, 0)\n\ttid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getxattr(path string, attr string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p2 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InitModule(moduleImage []byte, params string) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(moduleImage) > 0 {\n\t\t_p0 = unsafe.Pointer(&moduleImage[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(params)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_INIT_MODULE, uintptr(_p0), uintptr(len(moduleImage)), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(pathname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask))\n\twatchdesc = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InotifyInit1(flags int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0)\n\tsuccess = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, sig syscall.Signal) (err error) {\n\t_, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Klogctl(typ int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lgetxattr(path string, attr string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p2 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listxattr(path string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Llistxattr(path string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lremovexattr(path string, attr string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lsetxattr(path string, attr string, data []byte, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(data) > 0 {\n\t\t_p2 = unsafe.Pointer(&data[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc MemfdCreate(name string, flags int) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_MEMFD_CREATE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_PERF_EVENT_OPEN, uintptr(unsafe.Pointer(attr)), uintptr(pid), uintptr(cpu), uintptr(groupFd), uintptr(flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc PivotRoot(newroot string, putold string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(newroot)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(putold)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n\tr0, _, 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\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Removexattr(path string, attr string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT2, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(keyType)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(description)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 *byte\n\t_p2, err = BytePtrFromString(callback)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0)\n\tid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setdomainname(p []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sethostname(p []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setns(fd int, nstype int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setxattr(path string, attr string, data []byte, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(data) > 0 {\n\t\t_p2 = unsafe.Pointer(&data[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc signalfd(fd int, sigmask *Sigset_t, maskSize uintptr, flags int) (newfd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SIGNALFD4, uintptr(fd), uintptr(unsafe.Pointer(sigmask)), uintptr(maskSize), uintptr(flags), 0, 0)\n\tnewfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_STATX, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mask), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() {\n\tSyscallNoError(SYS_SYNC, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Syncfs(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sysinfo(info *Sysinfo_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tgkill(tgid int, tid int, sig syscall.Signal) (err error) {\n\t_, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Times(tms *Tms) (ticks uintptr, err error) {\n\tr0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0)\n\tticks = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(mask int) (oldmask int) {\n\tr0, _ := RawSyscallNoError(SYS_UMASK, uintptr(mask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Uname(buf *Utsname) (err error) {\n\t_, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(target string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(target)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unshare(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc exitThread(code int) (err error) {\n\t_, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc readlen(fd int, p *byte, np int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc writelen(fd int, p *byte, np int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, advice int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc faccessat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc nameToHandleAt(dirFD int, pathname string, fh *fileHandle, mountID *_C_int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(pathname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_NAME_TO_HANDLE_AT, uintptr(dirFD), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(fh)), uintptr(unsafe.Pointer(mountID)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc openByHandleAt(mountFD int, fh *fileHandle, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_OPEN_BY_HANDLE_AT, uintptr(mountFD), uintptr(unsafe.Pointer(fh)), uintptr(flags))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(events) > 0 {\n\t\t_p0 = unsafe.Pointer(&events[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_EPOLL_PWAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, buf *Statfs_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (euid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)\n\teuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(resource int, rlim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, n int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (off int64, err error) {\n\tr0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))\n\toff = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)\n\twritten = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setfsgid(gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setfsuid(uid int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresgid(rgid int, egid int, sgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresuid(ruid int, euid int, suid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setrlimit(resource int, rlim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, buf *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc SyncFileRange(fd int, off int64, n int64, flags int) (err error) {\n\t_, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(n int, list *_Gid_t) (nn int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tnn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(n int, list *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {\n\tr0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset))\n\txaddr = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe2(p *[2]_C_int, flags int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(cmdline)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go",
    "content": "// go run mksyscall.go -b32 -arm -tags linux,mips syscall_linux.go syscall_linux_mipsx.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build linux,mips\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc FanotifyInit(flags uint, event_f_flags uint) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_FANOTIFY_INIT, uintptr(flags), uintptr(event_f_flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {\n\t_, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask>>32), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fchmodat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) {\n\tr0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlJoin(cmd int, arg2 string) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(arg2)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(arg3)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(arg4)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(payload) > 0 {\n\t\t_p0 = unsafe.Pointer(&payload[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(arg)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(source)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(target)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 *byte\n\t_p2, err = BytePtrFromString(fstype)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Acct(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(keyType)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(description)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(payload) > 0 {\n\t\t_p2 = unsafe.Pointer(&payload[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0)\n\tid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtimex(buf *Timex) (state int, err error) {\n\tr0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0)\n\tstate = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGetres(clockid int32, res *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOCK_GETRES, uintptr(clockid), uintptr(unsafe.Pointer(res)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGettime(clockid int32, time *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockNanosleep(clockid int32, flags int, request *Timespec, remain *Timespec) (err error) {\n\t_, _, e1 := Syscall6(SYS_CLOCK_NANOSLEEP, uintptr(clockid), uintptr(flags), uintptr(unsafe.Pointer(request)), uintptr(unsafe.Pointer(remain)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc DeleteModule(name string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_DELETE_MODULE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(oldfd int) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup3(oldfd int, newfd int, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollCreate1(flag int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Eventfd(initval uint, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tSyscallNoError(SYS_EXIT_GROUP, uintptr(code), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fallocate(fd int, mode uint32, off int64, len int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off>>32), uintptr(off), uintptr(len>>32), uintptr(len))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fdatasync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc FinitModule(fd int, params string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(params)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FINIT_MODULE, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flistxattr(fd int, dest []byte) (sz int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p0 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_FLISTXATTR, uintptr(fd), uintptr(_p0), uintptr(len(dest)))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fremovexattr(fd int, attr string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdents(fd int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETPID, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETPPID, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrandom(buf []byte, flags int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettid() (tid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETTID, 0, 0, 0)\n\ttid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getxattr(path string, attr string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p2 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InitModule(moduleImage []byte, params string) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(moduleImage) > 0 {\n\t\t_p0 = unsafe.Pointer(&moduleImage[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(params)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_INIT_MODULE, uintptr(_p0), uintptr(len(moduleImage)), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(pathname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask))\n\twatchdesc = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InotifyInit1(flags int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0)\n\tsuccess = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, sig syscall.Signal) (err error) {\n\t_, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Klogctl(typ int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lgetxattr(path string, attr string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p2 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listxattr(path string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Llistxattr(path string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lremovexattr(path string, attr string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lsetxattr(path string, attr string, data []byte, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(data) > 0 {\n\t\t_p2 = unsafe.Pointer(&data[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc MemfdCreate(name string, flags int) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_MEMFD_CREATE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_PERF_EVENT_OPEN, uintptr(unsafe.Pointer(attr)), uintptr(pid), uintptr(cpu), uintptr(groupFd), uintptr(flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc PivotRoot(newroot string, putold string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(newroot)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(putold)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n\tr0, _, 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\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Removexattr(path string, attr string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT2, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(keyType)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(description)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 *byte\n\t_p2, err = BytePtrFromString(callback)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0)\n\tid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setdomainname(p []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sethostname(p []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setns(fd int, nstype int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setxattr(path string, attr string, data []byte, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(data) > 0 {\n\t\t_p2 = unsafe.Pointer(&data[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc signalfd(fd int, sigmask *Sigset_t, maskSize uintptr, flags int) (newfd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SIGNALFD4, uintptr(fd), uintptr(unsafe.Pointer(sigmask)), uintptr(maskSize), uintptr(flags), 0, 0)\n\tnewfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_STATX, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mask), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() {\n\tSyscallNoError(SYS_SYNC, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Syncfs(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sysinfo(info *Sysinfo_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {\n\tr0, r1, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)\n\tn = int64(int64(r0)<<32 | int64(r1))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tgkill(tgid int, tid int, sig syscall.Signal) (err error) {\n\t_, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Times(tms *Tms) (ticks uintptr, err error) {\n\tr0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0)\n\tticks = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(mask int) (oldmask int) {\n\tr0, _ := RawSyscallNoError(SYS_UMASK, uintptr(mask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Uname(buf *Utsname) (err error) {\n\t_, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(target string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(target)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unshare(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc exitThread(code int) (err error) {\n\t_, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc readlen(fd int, p *byte, np int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc writelen(fd int, p *byte, np int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, advice int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc faccessat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc nameToHandleAt(dirFD int, pathname string, fh *fileHandle, mountID *_C_int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(pathname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_NAME_TO_HANDLE_AT, uintptr(dirFD), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(fh)), uintptr(unsafe.Pointer(mountID)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc openByHandleAt(mountFD int, fh *fileHandle, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_OPEN_BY_HANDLE_AT, uintptr(mountFD), uintptr(unsafe.Pointer(fh)), uintptr(flags))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(oldfd int, newfd int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollCreate(size int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(events) > 0 {\n\t\t_p0 = unsafe.Pointer(&events[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall9(SYS_FADVISE64, uintptr(fd), 0, uintptr(offset>>32), uintptr(offset), uintptr(length>>32), uintptr(length), uintptr(advice), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FTRUNCATE64, uintptr(fd), 0, uintptr(length>>32), uintptr(length), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (euid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)\n\teuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, n int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset>>32), uintptr(offset))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset>>32), uintptr(offset))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SENDFILE64, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)\n\twritten = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setfsgid(gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setfsuid(uid int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresgid(rgid int, egid int, sgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresuid(ruid int, euid int, suid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc SyncFileRange(fd int, off int64, n int64, flags int) (err error) {\n\t_, _, e1 := Syscall9(SYS_SYNC_FILE_RANGE, uintptr(fd), 0, uintptr(off>>32), uintptr(off), uintptr(n>>32), uintptr(n), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_TRUNCATE64, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length>>32), uintptr(length), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ustat(dev int, ubuf *Ustat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(n int, list *_Gid_t) (nn int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tnn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(n int, list *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InotifyInit() (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ioperm(from int, num int, on int) (err error) {\n\t_, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Iopl(level int) (err error) {\n\t_, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimesat(dirfd int, path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Time(t *Time_t) (tt Time_t, err error) {\n\tr0, _, e1 := RawSyscall(SYS_TIME, uintptr(unsafe.Pointer(t)), 0, 0)\n\ttt = Time_t(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Utime(path string, buf *Utimbuf) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pause() (err error) {\n\t_, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe2(p *[2]_C_int, flags int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe() (p1 int, p2 int, err error) {\n\tr0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0)\n\tp1 = int(r0)\n\tp2 = int(r1)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) {\n\tr0, _, e1 := Syscall6(SYS_MMAP2, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(pageOffset))\n\txaddr = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getrlimit(resource int, rlim *rlimit32) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setrlimit(resource int, rlim *rlimit32) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go",
    "content": "// go run mksyscall.go -tags linux,mips64 syscall_linux.go syscall_linux_mips64x.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build linux,mips64\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc FanotifyInit(flags uint, event_f_flags uint) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_FANOTIFY_INIT, uintptr(flags), uintptr(event_f_flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {\n\t_, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fchmodat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) {\n\tr0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlJoin(cmd int, arg2 string) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(arg2)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(arg3)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(arg4)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(payload) > 0 {\n\t\t_p0 = unsafe.Pointer(&payload[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(arg)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(source)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(target)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 *byte\n\t_p2, err = BytePtrFromString(fstype)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Acct(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(keyType)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(description)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(payload) > 0 {\n\t\t_p2 = unsafe.Pointer(&payload[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0)\n\tid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtimex(buf *Timex) (state int, err error) {\n\tr0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0)\n\tstate = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGetres(clockid int32, res *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOCK_GETRES, uintptr(clockid), uintptr(unsafe.Pointer(res)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGettime(clockid int32, time *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockNanosleep(clockid int32, flags int, request *Timespec, remain *Timespec) (err error) {\n\t_, _, e1 := Syscall6(SYS_CLOCK_NANOSLEEP, uintptr(clockid), uintptr(flags), uintptr(unsafe.Pointer(request)), uintptr(unsafe.Pointer(remain)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc DeleteModule(name string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_DELETE_MODULE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(oldfd int) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup3(oldfd int, newfd int, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollCreate1(flag int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Eventfd(initval uint, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tSyscallNoError(SYS_EXIT_GROUP, uintptr(code), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fallocate(fd int, mode uint32, off int64, len int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fdatasync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc FinitModule(fd int, params string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(params)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FINIT_MODULE, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flistxattr(fd int, dest []byte) (sz int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p0 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_FLISTXATTR, uintptr(fd), uintptr(_p0), uintptr(len(dest)))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fremovexattr(fd int, attr string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdents(fd int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETPID, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETPPID, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrandom(buf []byte, flags int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettid() (tid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETTID, 0, 0, 0)\n\ttid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getxattr(path string, attr string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p2 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InitModule(moduleImage []byte, params string) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(moduleImage) > 0 {\n\t\t_p0 = unsafe.Pointer(&moduleImage[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(params)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_INIT_MODULE, uintptr(_p0), uintptr(len(moduleImage)), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(pathname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask))\n\twatchdesc = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InotifyInit1(flags int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0)\n\tsuccess = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, sig syscall.Signal) (err error) {\n\t_, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Klogctl(typ int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lgetxattr(path string, attr string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p2 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listxattr(path string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Llistxattr(path string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lremovexattr(path string, attr string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lsetxattr(path string, attr string, data []byte, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(data) > 0 {\n\t\t_p2 = unsafe.Pointer(&data[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc MemfdCreate(name string, flags int) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_MEMFD_CREATE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_PERF_EVENT_OPEN, uintptr(unsafe.Pointer(attr)), uintptr(pid), uintptr(cpu), uintptr(groupFd), uintptr(flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc PivotRoot(newroot string, putold string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(newroot)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(putold)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n\tr0, _, 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\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Removexattr(path string, attr string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT2, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(keyType)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(description)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 *byte\n\t_p2, err = BytePtrFromString(callback)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0)\n\tid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setdomainname(p []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sethostname(p []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setns(fd int, nstype int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setxattr(path string, attr string, data []byte, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(data) > 0 {\n\t\t_p2 = unsafe.Pointer(&data[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc signalfd(fd int, sigmask *Sigset_t, maskSize uintptr, flags int) (newfd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SIGNALFD4, uintptr(fd), uintptr(unsafe.Pointer(sigmask)), uintptr(maskSize), uintptr(flags), 0, 0)\n\tnewfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_STATX, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mask), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() {\n\tSyscallNoError(SYS_SYNC, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Syncfs(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sysinfo(info *Sysinfo_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tgkill(tgid int, tid int, sig syscall.Signal) (err error) {\n\t_, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Times(tms *Tms) (ticks uintptr, err error) {\n\tr0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0)\n\tticks = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(mask int) (oldmask int) {\n\tr0, _ := RawSyscallNoError(SYS_UMASK, uintptr(mask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Uname(buf *Utsname) (err error) {\n\t_, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(target string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(target)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unshare(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc exitThread(code int) (err error) {\n\t_, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc readlen(fd int, p *byte, np int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc writelen(fd int, p *byte, np int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, advice int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc faccessat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc nameToHandleAt(dirFD int, pathname string, fh *fileHandle, mountID *_C_int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(pathname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_NAME_TO_HANDLE_AT, uintptr(dirFD), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(fh)), uintptr(unsafe.Pointer(mountID)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc openByHandleAt(mountFD int, fh *fileHandle, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_OPEN_BY_HANDLE_AT, uintptr(mountFD), uintptr(unsafe.Pointer(fh)), uintptr(flags))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(oldfd int, newfd int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollCreate(size int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(events) > 0 {\n\t\t_p0 = unsafe.Pointer(&events[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, buf *Statfs_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (euid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)\n\teuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(resource int, rlim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, n int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pause() (err error) {\n\t_, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (off int64, err error) {\n\tr0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))\n\toff = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)\n\twritten = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setfsgid(gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setfsuid(uid int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresgid(rgid int, egid int, sgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresuid(ruid int, euid int, suid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setrlimit(resource int, rlim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, buf *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc SyncFileRange(fd int, off int64, n int64, flags int) (err error) {\n\t_, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ustat(dev int, ubuf *Ustat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(n int, list *_Gid_t) (nn int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tnn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(n int, list *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {\n\tr0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset))\n\txaddr = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimesat(dirfd int, path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Utime(path string, buf *Utimbuf) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe2(p *[2]_C_int, flags int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fstat(fd int, st *stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(st)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fstatat(dirfd int, path string, st *stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_NEWFSTATAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(st)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc lstat(path string, st *stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(st)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc stat(path string, st *stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(st)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go",
    "content": "// go run mksyscall.go -tags linux,mips64le syscall_linux.go syscall_linux_mips64x.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build linux,mips64le\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc FanotifyInit(flags uint, event_f_flags uint) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_FANOTIFY_INIT, uintptr(flags), uintptr(event_f_flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {\n\t_, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fchmodat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) {\n\tr0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlJoin(cmd int, arg2 string) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(arg2)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(arg3)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(arg4)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(payload) > 0 {\n\t\t_p0 = unsafe.Pointer(&payload[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(arg)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(source)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(target)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 *byte\n\t_p2, err = BytePtrFromString(fstype)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Acct(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(keyType)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(description)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(payload) > 0 {\n\t\t_p2 = unsafe.Pointer(&payload[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0)\n\tid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtimex(buf *Timex) (state int, err error) {\n\tr0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0)\n\tstate = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGetres(clockid int32, res *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOCK_GETRES, uintptr(clockid), uintptr(unsafe.Pointer(res)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGettime(clockid int32, time *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockNanosleep(clockid int32, flags int, request *Timespec, remain *Timespec) (err error) {\n\t_, _, e1 := Syscall6(SYS_CLOCK_NANOSLEEP, uintptr(clockid), uintptr(flags), uintptr(unsafe.Pointer(request)), uintptr(unsafe.Pointer(remain)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc DeleteModule(name string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_DELETE_MODULE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(oldfd int) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup3(oldfd int, newfd int, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollCreate1(flag int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Eventfd(initval uint, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tSyscallNoError(SYS_EXIT_GROUP, uintptr(code), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fallocate(fd int, mode uint32, off int64, len int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fdatasync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc FinitModule(fd int, params string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(params)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FINIT_MODULE, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flistxattr(fd int, dest []byte) (sz int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p0 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_FLISTXATTR, uintptr(fd), uintptr(_p0), uintptr(len(dest)))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fremovexattr(fd int, attr string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdents(fd int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETPID, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETPPID, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrandom(buf []byte, flags int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettid() (tid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETTID, 0, 0, 0)\n\ttid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getxattr(path string, attr string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p2 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InitModule(moduleImage []byte, params string) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(moduleImage) > 0 {\n\t\t_p0 = unsafe.Pointer(&moduleImage[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(params)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_INIT_MODULE, uintptr(_p0), uintptr(len(moduleImage)), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(pathname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask))\n\twatchdesc = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InotifyInit1(flags int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0)\n\tsuccess = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, sig syscall.Signal) (err error) {\n\t_, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Klogctl(typ int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lgetxattr(path string, attr string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p2 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listxattr(path string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Llistxattr(path string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lremovexattr(path string, attr string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lsetxattr(path string, attr string, data []byte, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(data) > 0 {\n\t\t_p2 = unsafe.Pointer(&data[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc MemfdCreate(name string, flags int) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_MEMFD_CREATE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_PERF_EVENT_OPEN, uintptr(unsafe.Pointer(attr)), uintptr(pid), uintptr(cpu), uintptr(groupFd), uintptr(flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc PivotRoot(newroot string, putold string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(newroot)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(putold)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n\tr0, _, 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\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Removexattr(path string, attr string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT2, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(keyType)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(description)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 *byte\n\t_p2, err = BytePtrFromString(callback)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0)\n\tid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setdomainname(p []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sethostname(p []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setns(fd int, nstype int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setxattr(path string, attr string, data []byte, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(data) > 0 {\n\t\t_p2 = unsafe.Pointer(&data[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc signalfd(fd int, sigmask *Sigset_t, maskSize uintptr, flags int) (newfd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SIGNALFD4, uintptr(fd), uintptr(unsafe.Pointer(sigmask)), uintptr(maskSize), uintptr(flags), 0, 0)\n\tnewfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_STATX, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mask), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() {\n\tSyscallNoError(SYS_SYNC, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Syncfs(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sysinfo(info *Sysinfo_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tgkill(tgid int, tid int, sig syscall.Signal) (err error) {\n\t_, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Times(tms *Tms) (ticks uintptr, err error) {\n\tr0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0)\n\tticks = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(mask int) (oldmask int) {\n\tr0, _ := RawSyscallNoError(SYS_UMASK, uintptr(mask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Uname(buf *Utsname) (err error) {\n\t_, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(target string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(target)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unshare(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc exitThread(code int) (err error) {\n\t_, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc readlen(fd int, p *byte, np int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc writelen(fd int, p *byte, np int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, advice int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc faccessat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc nameToHandleAt(dirFD int, pathname string, fh *fileHandle, mountID *_C_int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(pathname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_NAME_TO_HANDLE_AT, uintptr(dirFD), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(fh)), uintptr(unsafe.Pointer(mountID)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc openByHandleAt(mountFD int, fh *fileHandle, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_OPEN_BY_HANDLE_AT, uintptr(mountFD), uintptr(unsafe.Pointer(fh)), uintptr(flags))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(oldfd int, newfd int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollCreate(size int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(events) > 0 {\n\t\t_p0 = unsafe.Pointer(&events[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, buf *Statfs_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (euid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)\n\teuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(resource int, rlim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, n int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pause() (err error) {\n\t_, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (off int64, err error) {\n\tr0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))\n\toff = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)\n\twritten = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setfsgid(gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setfsuid(uid int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresgid(rgid int, egid int, sgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresuid(ruid int, euid int, suid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setrlimit(resource int, rlim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, buf *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc SyncFileRange(fd int, off int64, n int64, flags int) (err error) {\n\t_, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ustat(dev int, ubuf *Ustat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(n int, list *_Gid_t) (nn int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tnn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(n int, list *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {\n\tr0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset))\n\txaddr = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimesat(dirfd int, path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Utime(path string, buf *Utimbuf) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe2(p *[2]_C_int, flags int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fstat(fd int, st *stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(st)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fstatat(dirfd int, path string, st *stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_NEWFSTATAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(st)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc lstat(path string, st *stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(st)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc stat(path string, st *stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(st)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go",
    "content": "// go run mksyscall.go -l32 -arm -tags linux,mipsle syscall_linux.go syscall_linux_mipsx.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build linux,mipsle\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc FanotifyInit(flags uint, event_f_flags uint) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_FANOTIFY_INIT, uintptr(flags), uintptr(event_f_flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {\n\t_, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(mask>>32), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fchmodat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) {\n\tr0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlJoin(cmd int, arg2 string) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(arg2)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(arg3)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(arg4)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(payload) > 0 {\n\t\t_p0 = unsafe.Pointer(&payload[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(arg)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(source)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(target)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 *byte\n\t_p2, err = BytePtrFromString(fstype)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Acct(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(keyType)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(description)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(payload) > 0 {\n\t\t_p2 = unsafe.Pointer(&payload[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0)\n\tid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtimex(buf *Timex) (state int, err error) {\n\tr0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0)\n\tstate = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGetres(clockid int32, res *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOCK_GETRES, uintptr(clockid), uintptr(unsafe.Pointer(res)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGettime(clockid int32, time *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockNanosleep(clockid int32, flags int, request *Timespec, remain *Timespec) (err error) {\n\t_, _, e1 := Syscall6(SYS_CLOCK_NANOSLEEP, uintptr(clockid), uintptr(flags), uintptr(unsafe.Pointer(request)), uintptr(unsafe.Pointer(remain)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc DeleteModule(name string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_DELETE_MODULE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(oldfd int) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup3(oldfd int, newfd int, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollCreate1(flag int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Eventfd(initval uint, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tSyscallNoError(SYS_EXIT_GROUP, uintptr(code), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fallocate(fd int, mode uint32, off int64, len int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(off>>32), uintptr(len), uintptr(len>>32))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fdatasync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc FinitModule(fd int, params string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(params)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FINIT_MODULE, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flistxattr(fd int, dest []byte) (sz int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p0 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_FLISTXATTR, uintptr(fd), uintptr(_p0), uintptr(len(dest)))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fremovexattr(fd int, attr string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdents(fd int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETPID, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETPPID, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrandom(buf []byte, flags int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettid() (tid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETTID, 0, 0, 0)\n\ttid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getxattr(path string, attr string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p2 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InitModule(moduleImage []byte, params string) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(moduleImage) > 0 {\n\t\t_p0 = unsafe.Pointer(&moduleImage[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(params)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_INIT_MODULE, uintptr(_p0), uintptr(len(moduleImage)), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(pathname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask))\n\twatchdesc = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InotifyInit1(flags int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0)\n\tsuccess = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, sig syscall.Signal) (err error) {\n\t_, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Klogctl(typ int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lgetxattr(path string, attr string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p2 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listxattr(path string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Llistxattr(path string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lremovexattr(path string, attr string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lsetxattr(path string, attr string, data []byte, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(data) > 0 {\n\t\t_p2 = unsafe.Pointer(&data[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc MemfdCreate(name string, flags int) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_MEMFD_CREATE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_PERF_EVENT_OPEN, uintptr(unsafe.Pointer(attr)), uintptr(pid), uintptr(cpu), uintptr(groupFd), uintptr(flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc PivotRoot(newroot string, putold string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(newroot)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(putold)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n\tr0, _, 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\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Removexattr(path string, attr string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT2, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(keyType)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(description)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 *byte\n\t_p2, err = BytePtrFromString(callback)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0)\n\tid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setdomainname(p []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sethostname(p []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setns(fd int, nstype int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setxattr(path string, attr string, data []byte, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(data) > 0 {\n\t\t_p2 = unsafe.Pointer(&data[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc signalfd(fd int, sigmask *Sigset_t, maskSize uintptr, flags int) (newfd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SIGNALFD4, uintptr(fd), uintptr(unsafe.Pointer(sigmask)), uintptr(maskSize), uintptr(flags), 0, 0)\n\tnewfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_STATX, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mask), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() {\n\tSyscallNoError(SYS_SYNC, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Syncfs(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sysinfo(info *Sysinfo_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {\n\tr0, r1, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)\n\tn = int64(int64(r1)<<32 | int64(r0))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tgkill(tgid int, tid int, sig syscall.Signal) (err error) {\n\t_, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Times(tms *Tms) (ticks uintptr, err error) {\n\tr0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0)\n\tticks = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(mask int) (oldmask int) {\n\tr0, _ := RawSyscallNoError(SYS_UMASK, uintptr(mask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Uname(buf *Utsname) (err error) {\n\t_, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(target string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(target)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unshare(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc exitThread(code int) (err error) {\n\t_, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc readlen(fd int, p *byte, np int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc writelen(fd int, p *byte, np int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, advice int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc faccessat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc nameToHandleAt(dirFD int, pathname string, fh *fileHandle, mountID *_C_int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(pathname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_NAME_TO_HANDLE_AT, uintptr(dirFD), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(fh)), uintptr(unsafe.Pointer(mountID)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc openByHandleAt(mountFD int, fh *fileHandle, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_OPEN_BY_HANDLE_AT, uintptr(mountFD), uintptr(unsafe.Pointer(fh)), uintptr(flags))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(oldfd int, newfd int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollCreate(size int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(events) > 0 {\n\t\t_p0 = unsafe.Pointer(&events[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall9(SYS_FADVISE64, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32), uintptr(advice), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FTRUNCATE64, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (euid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)\n\teuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, n int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SENDFILE64, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)\n\twritten = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setfsgid(gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setfsuid(uid int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresgid(rgid int, egid int, sgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresuid(ruid int, euid int, suid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc SyncFileRange(fd int, off int64, n int64, flags int) (err error) {\n\t_, _, e1 := Syscall9(SYS_SYNC_FILE_RANGE, uintptr(fd), 0, uintptr(off), uintptr(off>>32), uintptr(n), uintptr(n>>32), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_TRUNCATE64, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ustat(dev int, ubuf *Ustat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(n int, list *_Gid_t) (nn int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tnn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(n int, list *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InotifyInit() (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ioperm(from int, num int, on int) (err error) {\n\t_, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Iopl(level int) (err error) {\n\t_, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimesat(dirfd int, path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Time(t *Time_t) (tt Time_t, err error) {\n\tr0, _, e1 := RawSyscall(SYS_TIME, uintptr(unsafe.Pointer(t)), 0, 0)\n\ttt = Time_t(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Utime(path string, buf *Utimbuf) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pause() (err error) {\n\t_, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe2(p *[2]_C_int, flags int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe() (p1 int, p2 int, err error) {\n\tr0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0)\n\tp1 = int(r0)\n\tp2 = int(r1)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) {\n\tr0, _, e1 := Syscall6(SYS_MMAP2, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(pageOffset))\n\txaddr = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getrlimit(resource int, rlim *rlimit32) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setrlimit(resource int, rlim *rlimit32) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go",
    "content": "// go run mksyscall.go -tags linux,ppc64 syscall_linux.go syscall_linux_ppc64x.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build linux,ppc64\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc FanotifyInit(flags uint, event_f_flags uint) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_FANOTIFY_INIT, uintptr(flags), uintptr(event_f_flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {\n\t_, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fchmodat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) {\n\tr0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlJoin(cmd int, arg2 string) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(arg2)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(arg3)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(arg4)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(payload) > 0 {\n\t\t_p0 = unsafe.Pointer(&payload[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(arg)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(source)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(target)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 *byte\n\t_p2, err = BytePtrFromString(fstype)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Acct(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(keyType)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(description)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(payload) > 0 {\n\t\t_p2 = unsafe.Pointer(&payload[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0)\n\tid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtimex(buf *Timex) (state int, err error) {\n\tr0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0)\n\tstate = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGetres(clockid int32, res *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOCK_GETRES, uintptr(clockid), uintptr(unsafe.Pointer(res)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGettime(clockid int32, time *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockNanosleep(clockid int32, flags int, request *Timespec, remain *Timespec) (err error) {\n\t_, _, e1 := Syscall6(SYS_CLOCK_NANOSLEEP, uintptr(clockid), uintptr(flags), uintptr(unsafe.Pointer(request)), uintptr(unsafe.Pointer(remain)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc DeleteModule(name string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_DELETE_MODULE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(oldfd int) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup3(oldfd int, newfd int, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollCreate1(flag int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Eventfd(initval uint, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tSyscallNoError(SYS_EXIT_GROUP, uintptr(code), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fallocate(fd int, mode uint32, off int64, len int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fdatasync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc FinitModule(fd int, params string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(params)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FINIT_MODULE, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flistxattr(fd int, dest []byte) (sz int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p0 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_FLISTXATTR, uintptr(fd), uintptr(_p0), uintptr(len(dest)))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fremovexattr(fd int, attr string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdents(fd int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETPID, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETPPID, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrandom(buf []byte, flags int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettid() (tid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETTID, 0, 0, 0)\n\ttid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getxattr(path string, attr string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p2 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InitModule(moduleImage []byte, params string) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(moduleImage) > 0 {\n\t\t_p0 = unsafe.Pointer(&moduleImage[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(params)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_INIT_MODULE, uintptr(_p0), uintptr(len(moduleImage)), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(pathname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask))\n\twatchdesc = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InotifyInit1(flags int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0)\n\tsuccess = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, sig syscall.Signal) (err error) {\n\t_, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Klogctl(typ int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lgetxattr(path string, attr string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p2 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listxattr(path string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Llistxattr(path string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lremovexattr(path string, attr string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lsetxattr(path string, attr string, data []byte, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(data) > 0 {\n\t\t_p2 = unsafe.Pointer(&data[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc MemfdCreate(name string, flags int) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_MEMFD_CREATE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_PERF_EVENT_OPEN, uintptr(unsafe.Pointer(attr)), uintptr(pid), uintptr(cpu), uintptr(groupFd), uintptr(flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc PivotRoot(newroot string, putold string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(newroot)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(putold)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n\tr0, _, 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\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Removexattr(path string, attr string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT2, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(keyType)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(description)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 *byte\n\t_p2, err = BytePtrFromString(callback)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0)\n\tid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setdomainname(p []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sethostname(p []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setns(fd int, nstype int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setxattr(path string, attr string, data []byte, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(data) > 0 {\n\t\t_p2 = unsafe.Pointer(&data[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc signalfd(fd int, sigmask *Sigset_t, maskSize uintptr, flags int) (newfd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SIGNALFD4, uintptr(fd), uintptr(unsafe.Pointer(sigmask)), uintptr(maskSize), uintptr(flags), 0, 0)\n\tnewfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_STATX, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mask), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() {\n\tSyscallNoError(SYS_SYNC, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Syncfs(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sysinfo(info *Sysinfo_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tgkill(tgid int, tid int, sig syscall.Signal) (err error) {\n\t_, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Times(tms *Tms) (ticks uintptr, err error) {\n\tr0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0)\n\tticks = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(mask int) (oldmask int) {\n\tr0, _ := RawSyscallNoError(SYS_UMASK, uintptr(mask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Uname(buf *Utsname) (err error) {\n\t_, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(target string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(target)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unshare(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc exitThread(code int) (err error) {\n\t_, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc readlen(fd int, p *byte, np int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc writelen(fd int, p *byte, np int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, advice int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc faccessat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc nameToHandleAt(dirFD int, pathname string, fh *fileHandle, mountID *_C_int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(pathname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_NAME_TO_HANDLE_AT, uintptr(dirFD), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(fh)), uintptr(unsafe.Pointer(mountID)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc openByHandleAt(mountFD int, fh *fileHandle, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_OPEN_BY_HANDLE_AT, uintptr(mountFD), uintptr(unsafe.Pointer(fh)), uintptr(flags))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(oldfd int, newfd int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollCreate(size int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(events) > 0 {\n\t\t_p0 = unsafe.Pointer(&events[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_NEWFSTATAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, buf *Statfs_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (euid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)\n\teuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(resource int, rlim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_UGETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InotifyInit() (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ioperm(from int, num int, on int) (err error) {\n\t_, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Iopl(level int) (err error) {\n\t_, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, n int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pause() (err error) {\n\t_, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (off int64, err error) {\n\tr0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))\n\toff = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)\n\twritten = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setfsgid(gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setfsuid(uid int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresgid(rgid int, egid int, sgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresuid(ruid int, euid int, suid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setrlimit(resource int, rlim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, buf *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ustat(dev int, ubuf *Ustat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(n int, list *_Gid_t) (nn int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tnn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(n int, list *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {\n\tr0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset))\n\txaddr = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimesat(dirfd int, path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Time(t *Time_t) (tt Time_t, err error) {\n\tr0, _, e1 := RawSyscall(SYS_TIME, uintptr(unsafe.Pointer(t)), 0, 0)\n\ttt = Time_t(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Utime(path string, buf *Utimbuf) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe(p *[2]_C_int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe2(p *[2]_C_int, flags int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc syncFileRange2(fd int, flags int, off int64, n int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE2, uintptr(fd), uintptr(flags), uintptr(off), uintptr(n), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(cmdline)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go",
    "content": "// go run mksyscall.go -tags linux,ppc64le syscall_linux.go syscall_linux_ppc64x.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build linux,ppc64le\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc FanotifyInit(flags uint, event_f_flags uint) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_FANOTIFY_INIT, uintptr(flags), uintptr(event_f_flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {\n\t_, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fchmodat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) {\n\tr0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlJoin(cmd int, arg2 string) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(arg2)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(arg3)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(arg4)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(payload) > 0 {\n\t\t_p0 = unsafe.Pointer(&payload[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(arg)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(source)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(target)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 *byte\n\t_p2, err = BytePtrFromString(fstype)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Acct(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(keyType)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(description)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(payload) > 0 {\n\t\t_p2 = unsafe.Pointer(&payload[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0)\n\tid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtimex(buf *Timex) (state int, err error) {\n\tr0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0)\n\tstate = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGetres(clockid int32, res *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOCK_GETRES, uintptr(clockid), uintptr(unsafe.Pointer(res)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGettime(clockid int32, time *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockNanosleep(clockid int32, flags int, request *Timespec, remain *Timespec) (err error) {\n\t_, _, e1 := Syscall6(SYS_CLOCK_NANOSLEEP, uintptr(clockid), uintptr(flags), uintptr(unsafe.Pointer(request)), uintptr(unsafe.Pointer(remain)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc DeleteModule(name string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_DELETE_MODULE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(oldfd int) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup3(oldfd int, newfd int, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollCreate1(flag int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Eventfd(initval uint, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tSyscallNoError(SYS_EXIT_GROUP, uintptr(code), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fallocate(fd int, mode uint32, off int64, len int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fdatasync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc FinitModule(fd int, params string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(params)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FINIT_MODULE, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flistxattr(fd int, dest []byte) (sz int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p0 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_FLISTXATTR, uintptr(fd), uintptr(_p0), uintptr(len(dest)))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fremovexattr(fd int, attr string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdents(fd int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETPID, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETPPID, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrandom(buf []byte, flags int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettid() (tid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETTID, 0, 0, 0)\n\ttid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getxattr(path string, attr string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p2 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InitModule(moduleImage []byte, params string) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(moduleImage) > 0 {\n\t\t_p0 = unsafe.Pointer(&moduleImage[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(params)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_INIT_MODULE, uintptr(_p0), uintptr(len(moduleImage)), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(pathname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask))\n\twatchdesc = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InotifyInit1(flags int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0)\n\tsuccess = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, sig syscall.Signal) (err error) {\n\t_, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Klogctl(typ int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lgetxattr(path string, attr string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p2 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listxattr(path string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Llistxattr(path string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lremovexattr(path string, attr string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lsetxattr(path string, attr string, data []byte, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(data) > 0 {\n\t\t_p2 = unsafe.Pointer(&data[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc MemfdCreate(name string, flags int) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_MEMFD_CREATE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_PERF_EVENT_OPEN, uintptr(unsafe.Pointer(attr)), uintptr(pid), uintptr(cpu), uintptr(groupFd), uintptr(flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc PivotRoot(newroot string, putold string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(newroot)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(putold)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n\tr0, _, 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\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Removexattr(path string, attr string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT2, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(keyType)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(description)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 *byte\n\t_p2, err = BytePtrFromString(callback)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0)\n\tid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setdomainname(p []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sethostname(p []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setns(fd int, nstype int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setxattr(path string, attr string, data []byte, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(data) > 0 {\n\t\t_p2 = unsafe.Pointer(&data[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc signalfd(fd int, sigmask *Sigset_t, maskSize uintptr, flags int) (newfd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SIGNALFD4, uintptr(fd), uintptr(unsafe.Pointer(sigmask)), uintptr(maskSize), uintptr(flags), 0, 0)\n\tnewfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_STATX, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mask), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() {\n\tSyscallNoError(SYS_SYNC, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Syncfs(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sysinfo(info *Sysinfo_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tgkill(tgid int, tid int, sig syscall.Signal) (err error) {\n\t_, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Times(tms *Tms) (ticks uintptr, err error) {\n\tr0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0)\n\tticks = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(mask int) (oldmask int) {\n\tr0, _ := RawSyscallNoError(SYS_UMASK, uintptr(mask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Uname(buf *Utsname) (err error) {\n\t_, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(target string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(target)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unshare(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc exitThread(code int) (err error) {\n\t_, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc readlen(fd int, p *byte, np int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc writelen(fd int, p *byte, np int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, advice int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc faccessat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc nameToHandleAt(dirFD int, pathname string, fh *fileHandle, mountID *_C_int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(pathname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_NAME_TO_HANDLE_AT, uintptr(dirFD), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(fh)), uintptr(unsafe.Pointer(mountID)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc openByHandleAt(mountFD int, fh *fileHandle, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_OPEN_BY_HANDLE_AT, uintptr(mountFD), uintptr(unsafe.Pointer(fh)), uintptr(flags))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(oldfd int, newfd int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollCreate(size int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(events) > 0 {\n\t\t_p0 = unsafe.Pointer(&events[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_NEWFSTATAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, buf *Statfs_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (euid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)\n\teuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(resource int, rlim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_UGETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InotifyInit() (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ioperm(from int, num int, on int) (err error) {\n\t_, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Iopl(level int) (err error) {\n\t_, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, n int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pause() (err error) {\n\t_, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (off int64, err error) {\n\tr0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))\n\toff = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)\n\twritten = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setfsgid(gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setfsuid(uid int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresgid(rgid int, egid int, sgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresuid(ruid int, euid int, suid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setrlimit(resource int, rlim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, buf *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ustat(dev int, ubuf *Ustat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(n int, list *_Gid_t) (nn int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tnn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(n int, list *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {\n\tr0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset))\n\txaddr = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimesat(dirfd int, path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Time(t *Time_t) (tt Time_t, err error) {\n\tr0, _, e1 := RawSyscall(SYS_TIME, uintptr(unsafe.Pointer(t)), 0, 0)\n\ttt = Time_t(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Utime(path string, buf *Utimbuf) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe(p *[2]_C_int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe2(p *[2]_C_int, flags int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc syncFileRange2(fd int, flags int, off int64, n int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE2, uintptr(fd), uintptr(flags), uintptr(off), uintptr(n), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(cmdline)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go",
    "content": "// go run mksyscall.go -tags linux,riscv64 syscall_linux.go syscall_linux_riscv64.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build linux,riscv64\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc FanotifyInit(flags uint, event_f_flags uint) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_FANOTIFY_INIT, uintptr(flags), uintptr(event_f_flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {\n\t_, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fchmodat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) {\n\tr0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlJoin(cmd int, arg2 string) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(arg2)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(arg3)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(arg4)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(payload) > 0 {\n\t\t_p0 = unsafe.Pointer(&payload[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(arg)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(source)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(target)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 *byte\n\t_p2, err = BytePtrFromString(fstype)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Acct(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(keyType)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(description)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(payload) > 0 {\n\t\t_p2 = unsafe.Pointer(&payload[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0)\n\tid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtimex(buf *Timex) (state int, err error) {\n\tr0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0)\n\tstate = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGetres(clockid int32, res *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOCK_GETRES, uintptr(clockid), uintptr(unsafe.Pointer(res)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGettime(clockid int32, time *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockNanosleep(clockid int32, flags int, request *Timespec, remain *Timespec) (err error) {\n\t_, _, e1 := Syscall6(SYS_CLOCK_NANOSLEEP, uintptr(clockid), uintptr(flags), uintptr(unsafe.Pointer(request)), uintptr(unsafe.Pointer(remain)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc DeleteModule(name string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_DELETE_MODULE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(oldfd int) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup3(oldfd int, newfd int, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollCreate1(flag int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Eventfd(initval uint, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tSyscallNoError(SYS_EXIT_GROUP, uintptr(code), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fallocate(fd int, mode uint32, off int64, len int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fdatasync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc FinitModule(fd int, params string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(params)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FINIT_MODULE, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flistxattr(fd int, dest []byte) (sz int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p0 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_FLISTXATTR, uintptr(fd), uintptr(_p0), uintptr(len(dest)))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fremovexattr(fd int, attr string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdents(fd int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETPID, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETPPID, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrandom(buf []byte, flags int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettid() (tid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETTID, 0, 0, 0)\n\ttid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getxattr(path string, attr string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p2 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InitModule(moduleImage []byte, params string) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(moduleImage) > 0 {\n\t\t_p0 = unsafe.Pointer(&moduleImage[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(params)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_INIT_MODULE, uintptr(_p0), uintptr(len(moduleImage)), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(pathname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask))\n\twatchdesc = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InotifyInit1(flags int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0)\n\tsuccess = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, sig syscall.Signal) (err error) {\n\t_, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Klogctl(typ int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lgetxattr(path string, attr string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p2 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listxattr(path string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Llistxattr(path string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lremovexattr(path string, attr string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lsetxattr(path string, attr string, data []byte, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(data) > 0 {\n\t\t_p2 = unsafe.Pointer(&data[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc MemfdCreate(name string, flags int) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_MEMFD_CREATE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_PERF_EVENT_OPEN, uintptr(unsafe.Pointer(attr)), uintptr(pid), uintptr(cpu), uintptr(groupFd), uintptr(flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc PivotRoot(newroot string, putold string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(newroot)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(putold)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n\tr0, _, 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\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Removexattr(path string, attr string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT2, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(keyType)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(description)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 *byte\n\t_p2, err = BytePtrFromString(callback)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0)\n\tid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setdomainname(p []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sethostname(p []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setns(fd int, nstype int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setxattr(path string, attr string, data []byte, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(data) > 0 {\n\t\t_p2 = unsafe.Pointer(&data[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc signalfd(fd int, sigmask *Sigset_t, maskSize uintptr, flags int) (newfd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SIGNALFD4, uintptr(fd), uintptr(unsafe.Pointer(sigmask)), uintptr(maskSize), uintptr(flags), 0, 0)\n\tnewfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_STATX, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mask), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() {\n\tSyscallNoError(SYS_SYNC, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Syncfs(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sysinfo(info *Sysinfo_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tgkill(tgid int, tid int, sig syscall.Signal) (err error) {\n\t_, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Times(tms *Tms) (ticks uintptr, err error) {\n\tr0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0)\n\tticks = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(mask int) (oldmask int) {\n\tr0, _ := RawSyscallNoError(SYS_UMASK, uintptr(mask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Uname(buf *Utsname) (err error) {\n\t_, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(target string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(target)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unshare(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc exitThread(code int) (err error) {\n\t_, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc readlen(fd int, p *byte, np int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc writelen(fd int, p *byte, np int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, advice int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc faccessat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc nameToHandleAt(dirFD int, pathname string, fh *fileHandle, mountID *_C_int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(pathname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_NAME_TO_HANDLE_AT, uintptr(dirFD), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(fh)), uintptr(unsafe.Pointer(mountID)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc openByHandleAt(mountFD int, fh *fileHandle, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_OPEN_BY_HANDLE_AT, uintptr(mountFD), uintptr(unsafe.Pointer(fh)), uintptr(flags))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(events) > 0 {\n\t\t_p0 = unsafe.Pointer(&events[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_EPOLL_PWAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, buf *Statfs_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (euid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)\n\teuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(resource int, rlim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, n int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (off int64, err error) {\n\tr0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))\n\toff = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)\n\twritten = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setfsgid(gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setfsuid(uid int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresgid(rgid int, egid int, sgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresuid(ruid int, euid int, suid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setrlimit(resource int, rlim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, buf *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc SyncFileRange(fd int, off int64, n int64, flags int) (err error) {\n\t_, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(n int, list *_Gid_t) (nn int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tnn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(n int, list *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {\n\tr0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset))\n\txaddr = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe2(p *[2]_C_int, flags int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(cmdline)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go",
    "content": "// go run mksyscall.go -tags linux,s390x syscall_linux.go syscall_linux_s390x.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build linux,s390x\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc FanotifyInit(flags uint, event_f_flags uint) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_FANOTIFY_INIT, uintptr(flags), uintptr(event_f_flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {\n\t_, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fchmodat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) {\n\tr0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlJoin(cmd int, arg2 string) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(arg2)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(arg3)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(arg4)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(payload) > 0 {\n\t\t_p0 = unsafe.Pointer(&payload[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(arg)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(source)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(target)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 *byte\n\t_p2, err = BytePtrFromString(fstype)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Acct(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(keyType)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(description)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(payload) > 0 {\n\t\t_p2 = unsafe.Pointer(&payload[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0)\n\tid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtimex(buf *Timex) (state int, err error) {\n\tr0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0)\n\tstate = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGetres(clockid int32, res *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOCK_GETRES, uintptr(clockid), uintptr(unsafe.Pointer(res)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGettime(clockid int32, time *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockNanosleep(clockid int32, flags int, request *Timespec, remain *Timespec) (err error) {\n\t_, _, e1 := Syscall6(SYS_CLOCK_NANOSLEEP, uintptr(clockid), uintptr(flags), uintptr(unsafe.Pointer(request)), uintptr(unsafe.Pointer(remain)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc DeleteModule(name string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_DELETE_MODULE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(oldfd int) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup3(oldfd int, newfd int, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollCreate1(flag int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Eventfd(initval uint, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tSyscallNoError(SYS_EXIT_GROUP, uintptr(code), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fallocate(fd int, mode uint32, off int64, len int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fdatasync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc FinitModule(fd int, params string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(params)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FINIT_MODULE, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flistxattr(fd int, dest []byte) (sz int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p0 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_FLISTXATTR, uintptr(fd), uintptr(_p0), uintptr(len(dest)))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fremovexattr(fd int, attr string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdents(fd int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETPID, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETPPID, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrandom(buf []byte, flags int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettid() (tid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETTID, 0, 0, 0)\n\ttid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getxattr(path string, attr string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p2 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InitModule(moduleImage []byte, params string) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(moduleImage) > 0 {\n\t\t_p0 = unsafe.Pointer(&moduleImage[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(params)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_INIT_MODULE, uintptr(_p0), uintptr(len(moduleImage)), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(pathname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask))\n\twatchdesc = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InotifyInit1(flags int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0)\n\tsuccess = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, sig syscall.Signal) (err error) {\n\t_, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Klogctl(typ int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lgetxattr(path string, attr string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p2 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listxattr(path string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Llistxattr(path string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lremovexattr(path string, attr string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lsetxattr(path string, attr string, data []byte, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(data) > 0 {\n\t\t_p2 = unsafe.Pointer(&data[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc MemfdCreate(name string, flags int) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_MEMFD_CREATE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_PERF_EVENT_OPEN, uintptr(unsafe.Pointer(attr)), uintptr(pid), uintptr(cpu), uintptr(groupFd), uintptr(flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc PivotRoot(newroot string, putold string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(newroot)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(putold)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n\tr0, _, 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\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Removexattr(path string, attr string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT2, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(keyType)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(description)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 *byte\n\t_p2, err = BytePtrFromString(callback)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0)\n\tid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setdomainname(p []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sethostname(p []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setns(fd int, nstype int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setxattr(path string, attr string, data []byte, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(data) > 0 {\n\t\t_p2 = unsafe.Pointer(&data[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc signalfd(fd int, sigmask *Sigset_t, maskSize uintptr, flags int) (newfd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SIGNALFD4, uintptr(fd), uintptr(unsafe.Pointer(sigmask)), uintptr(maskSize), uintptr(flags), 0, 0)\n\tnewfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_STATX, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mask), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() {\n\tSyscallNoError(SYS_SYNC, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Syncfs(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sysinfo(info *Sysinfo_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tgkill(tgid int, tid int, sig syscall.Signal) (err error) {\n\t_, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Times(tms *Tms) (ticks uintptr, err error) {\n\tr0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0)\n\tticks = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(mask int) (oldmask int) {\n\tr0, _ := RawSyscallNoError(SYS_UMASK, uintptr(mask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Uname(buf *Utsname) (err error) {\n\t_, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(target string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(target)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unshare(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc exitThread(code int) (err error) {\n\t_, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc readlen(fd int, p *byte, np int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc writelen(fd int, p *byte, np int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, advice int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc faccessat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc nameToHandleAt(dirFD int, pathname string, fh *fileHandle, mountID *_C_int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(pathname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_NAME_TO_HANDLE_AT, uintptr(dirFD), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(fh)), uintptr(unsafe.Pointer(mountID)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc openByHandleAt(mountFD int, fh *fileHandle, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_OPEN_BY_HANDLE_AT, uintptr(mountFD), uintptr(unsafe.Pointer(fh)), uintptr(flags))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(oldfd int, newfd int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollCreate(size int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(events) > 0 {\n\t\t_p0 = unsafe.Pointer(&events[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_NEWFSTATAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, buf *Statfs_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (euid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)\n\teuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(resource int, rlim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InotifyInit() (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pause() (err error) {\n\t_, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (off int64, err error) {\n\tr0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))\n\toff = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)\n\twritten = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setfsgid(gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setfsuid(uid int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresgid(rgid int, egid int, sgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresuid(ruid int, euid int, suid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setrlimit(resource int, rlim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, buf *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc SyncFileRange(fd int, off int64, n int64, flags int) (err error) {\n\t_, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ustat(dev int, ubuf *Ustat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(n int, list *_Gid_t) (nn int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tnn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(n int, list *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimesat(dirfd int, path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Utime(path string, buf *Utimbuf) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe2(p *[2]_C_int, flags int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(cmdline)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go",
    "content": "// go run mksyscall.go -tags linux,sparc64 syscall_linux.go syscall_linux_sparc64.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build linux,sparc64\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc FanotifyInit(flags uint, event_f_flags uint) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_FANOTIFY_INIT, uintptr(flags), uintptr(event_f_flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {\n\t_, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fchmodat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) {\n\tr0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlJoin(cmd int, arg2 string) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(arg2)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(arg3)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(arg4)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(payload) > 0 {\n\t\t_p0 = unsafe.Pointer(&payload[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(arg)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(source)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(target)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 *byte\n\t_p2, err = BytePtrFromString(fstype)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Acct(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(keyType)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(description)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(payload) > 0 {\n\t\t_p2 = unsafe.Pointer(&payload[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0)\n\tid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtimex(buf *Timex) (state int, err error) {\n\tr0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0)\n\tstate = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGetres(clockid int32, res *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOCK_GETRES, uintptr(clockid), uintptr(unsafe.Pointer(res)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGettime(clockid int32, time *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockNanosleep(clockid int32, flags int, request *Timespec, remain *Timespec) (err error) {\n\t_, _, e1 := Syscall6(SYS_CLOCK_NANOSLEEP, uintptr(clockid), uintptr(flags), uintptr(unsafe.Pointer(request)), uintptr(unsafe.Pointer(remain)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc DeleteModule(name string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_DELETE_MODULE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(oldfd int) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup3(oldfd int, newfd int, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollCreate1(flag int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Eventfd(initval uint, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tSyscallNoError(SYS_EXIT_GROUP, uintptr(code), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fallocate(fd int, mode uint32, off int64, len int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fdatasync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc FinitModule(fd int, params string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(params)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FINIT_MODULE, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flistxattr(fd int, dest []byte) (sz int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p0 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_FLISTXATTR, uintptr(fd), uintptr(_p0), uintptr(len(dest)))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fremovexattr(fd int, attr string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdents(fd int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETPID, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETPPID, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrandom(buf []byte, flags int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettid() (tid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETTID, 0, 0, 0)\n\ttid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getxattr(path string, attr string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p2 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InitModule(moduleImage []byte, params string) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(moduleImage) > 0 {\n\t\t_p0 = unsafe.Pointer(&moduleImage[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(params)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_INIT_MODULE, uintptr(_p0), uintptr(len(moduleImage)), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(pathname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask))\n\twatchdesc = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InotifyInit1(flags int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0)\n\tsuccess = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, sig syscall.Signal) (err error) {\n\t_, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Klogctl(typ int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lgetxattr(path string, attr string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p2 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listxattr(path string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Llistxattr(path string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lremovexattr(path string, attr string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lsetxattr(path string, attr string, data []byte, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(data) > 0 {\n\t\t_p2 = unsafe.Pointer(&data[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc MemfdCreate(name string, flags int) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_MEMFD_CREATE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_PERF_EVENT_OPEN, uintptr(unsafe.Pointer(attr)), uintptr(pid), uintptr(cpu), uintptr(groupFd), uintptr(flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc PivotRoot(newroot string, putold string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(newroot)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(putold)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n\tr0, _, 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\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Removexattr(path string, attr string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT2, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(keyType)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(description)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 *byte\n\t_p2, err = BytePtrFromString(callback)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0)\n\tid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setdomainname(p []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sethostname(p []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setns(fd int, nstype int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setxattr(path string, attr string, data []byte, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(data) > 0 {\n\t\t_p2 = unsafe.Pointer(&data[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc signalfd(fd int, sigmask *Sigset_t, maskSize uintptr, flags int) (newfd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SIGNALFD4, uintptr(fd), uintptr(unsafe.Pointer(sigmask)), uintptr(maskSize), uintptr(flags), 0, 0)\n\tnewfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_STATX, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mask), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() {\n\tSyscallNoError(SYS_SYNC, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Syncfs(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sysinfo(info *Sysinfo_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tgkill(tgid int, tid int, sig syscall.Signal) (err error) {\n\t_, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Times(tms *Tms) (ticks uintptr, err error) {\n\tr0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0)\n\tticks = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(mask int) (oldmask int) {\n\tr0, _ := RawSyscallNoError(SYS_UMASK, uintptr(mask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Uname(buf *Utsname) (err error) {\n\t_, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(target string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(target)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unshare(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc exitThread(code int) (err error) {\n\t_, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc readlen(fd int, p *byte, np int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc writelen(fd int, p *byte, np int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, advice int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc faccessat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc nameToHandleAt(dirFD int, pathname string, fh *fileHandle, mountID *_C_int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(pathname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_NAME_TO_HANDLE_AT, uintptr(dirFD), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(fh)), uintptr(unsafe.Pointer(mountID)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc openByHandleAt(mountFD int, fh *fileHandle, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_OPEN_BY_HANDLE_AT, uintptr(mountFD), uintptr(unsafe.Pointer(fh)), uintptr(flags))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(events) > 0 {\n\t\t_p0 = unsafe.Pointer(&events[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(oldfd int, newfd int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, buf *Statfs_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (euid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)\n\teuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(resource int, rlim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InotifyInit() (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, n int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pause() (err error) {\n\t_, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (off int64, err error) {\n\tr0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))\n\toff = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)\n\twritten = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setfsgid(gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setfsuid(uid int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresgid(rgid int, egid int, sgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresuid(ruid int, euid int, suid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setrlimit(resource int, rlim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, buf *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc SyncFileRange(fd int, off int64, n int64, flags int) (err error) {\n\t_, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(n int, list *_Gid_t) (nn int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tnn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(n int, list *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {\n\tr0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset))\n\txaddr = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimesat(dirfd int, path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Utime(path string, buf *Utimbuf) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe(p *[2]_C_int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe2(p *[2]_C_int, flags int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go",
    "content": "// go run mksyscall.go -l32 -netbsd -tags netbsd,386 syscall_bsd.go syscall_netbsd.go syscall_netbsd_386.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build netbsd,386\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(mib) > 0 {\n\t\t_p0 = unsafe.Pointer(&mib[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, timeval *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimes(fd int, timeval *[2]Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, behav int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe() (fd1 int, fd2 int, err error) {\n\tr0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0)\n\tfd1 = int(r0)\n\tfd2 = int(r1)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getdents(fd int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chflags(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(from int, to int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tSyscall(SYS_EXIT, uintptr(code), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall9(SYS_POSIX_FADVISE, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), 0, uintptr(length), uintptr(length>>32), uintptr(advice), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchflags(fd int, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgrp int) {\n\tr0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)\n\tpgrp = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Issetugid() (tainted bool) {\n\tr0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0)\n\ttainted = bool(r0 != 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, signum syscall.Signal) (err error) {\n\t_, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kqueue() (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifoat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKFIFOAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknod(path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(fromfd int, from string, tofd int, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Revoke(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(whence), 0)\n\tnewoffset = int64(int64(r1)<<32 | int64(r0))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) {\n\t_, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(newmask int) (oldmask int) {\n\tr0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), uintptr(pos>>32), 0)\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc readlen(fd int, buf *byte, nbuf int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc writelen(fd int, buf *byte, nbuf int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go",
    "content": "// go run mksyscall.go -netbsd -tags netbsd,amd64 syscall_bsd.go syscall_netbsd.go syscall_netbsd_amd64.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build netbsd,amd64\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(mib) > 0 {\n\t\t_p0 = unsafe.Pointer(&mib[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, timeval *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimes(fd int, timeval *[2]Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, behav int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe() (fd1 int, fd2 int, err error) {\n\tr0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0)\n\tfd1 = int(r0)\n\tfd2 = int(r1)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getdents(fd int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chflags(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(from int, to int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tSyscall(SYS_EXIT, uintptr(code), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), 0, uintptr(offset), 0, uintptr(length), uintptr(advice))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchflags(fd int, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgrp int) {\n\tr0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)\n\tpgrp = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Issetugid() (tainted bool) {\n\tr0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0)\n\ttainted = bool(r0 != 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, signum syscall.Signal) (err error) {\n\t_, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kqueue() (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifoat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKFIFOAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknod(path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(fromfd int, from string, tofd int, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Revoke(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(whence), 0, 0)\n\tnewoffset = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) {\n\t_, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(newmask int) (oldmask int) {\n\tr0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), 0, 0)\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc readlen(fd int, buf *byte, nbuf int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc writelen(fd int, buf *byte, nbuf int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go",
    "content": "// go run mksyscall.go -l32 -netbsd -arm -tags netbsd,arm syscall_bsd.go syscall_netbsd.go syscall_netbsd_arm.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build netbsd,arm\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(mib) > 0 {\n\t\t_p0 = unsafe.Pointer(&mib[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, timeval *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimes(fd int, timeval *[2]Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, behav int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe() (fd1 int, fd2 int, err error) {\n\tr0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0)\n\tfd1 = int(r0)\n\tfd2 = int(r1)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getdents(fd int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chflags(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(from int, to int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tSyscall(SYS_EXIT, uintptr(code), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall9(SYS_POSIX_FADVISE, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), 0, uintptr(length), uintptr(length>>32), uintptr(advice), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchflags(fd int, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgrp int) {\n\tr0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)\n\tpgrp = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Issetugid() (tainted bool) {\n\tr0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0)\n\ttainted = bool(r0 != 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, signum syscall.Signal) (err error) {\n\t_, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kqueue() (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifoat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKFIFOAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknod(path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(fromfd int, from string, tofd int, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Revoke(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(whence), 0)\n\tnewoffset = int64(int64(r1)<<32 | int64(r0))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) {\n\t_, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(newmask int) (oldmask int) {\n\tr0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), uintptr(pos>>32), 0)\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc readlen(fd int, buf *byte, nbuf int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc writelen(fd int, buf *byte, nbuf int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go",
    "content": "// go run mksyscall.go -netbsd -tags netbsd,arm64 syscall_bsd.go syscall_netbsd.go syscall_netbsd_arm64.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build netbsd,arm64\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(mib) > 0 {\n\t\t_p0 = unsafe.Pointer(&mib[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, timeval *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimes(fd int, timeval *[2]Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, behav int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe() (fd1 int, fd2 int, err error) {\n\tr0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0)\n\tfd1 = int(r0)\n\tfd2 = int(r1)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getdents(fd int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chflags(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(from int, to int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tSyscall(SYS_EXIT, uintptr(code), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), 0, uintptr(offset), 0, uintptr(length), uintptr(advice))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchflags(fd int, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgrp int) {\n\tr0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)\n\tpgrp = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Issetugid() (tainted bool) {\n\tr0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0)\n\ttainted = bool(r0 != 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, signum syscall.Signal) (err error) {\n\t_, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kqueue() (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifoat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKFIFOAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknod(path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(fromfd int, from string, tofd int, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Revoke(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(whence), 0, 0)\n\tnewoffset = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) {\n\t_, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(newmask int) (oldmask int) {\n\tr0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), 0, 0)\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc readlen(fd int, buf *byte, nbuf int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc writelen(fd int, buf *byte, nbuf int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go",
    "content": "// go run mksyscall.go -l32 -openbsd -tags openbsd,386 syscall_bsd.go syscall_openbsd.go syscall_openbsd_386.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build openbsd,386\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(mib) > 0 {\n\t\t_p0 = unsafe.Pointer(&mib[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, timeval *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimes(fd int, timeval *[2]Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, behav int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe(p *[2]_C_int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getdents(fd int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chflags(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(from int, to int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tSyscall(SYS_EXIT, uintptr(code), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchflags(fd int, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, stat *Statfs_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgrp int) {\n\tr0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)\n\tpgrp = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrtable() (rtable int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETRTABLE, 0, 0, 0)\n\trtable = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Issetugid() (tainted bool) {\n\tr0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0)\n\ttainted = bool(r0 != 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, signum syscall.Signal) (err error) {\n\t_, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kqueue() (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifoat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKFIFOAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknod(path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(fromfd int, from string, tofd int, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Revoke(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(whence), 0)\n\tnewoffset = int64(int64(r1)<<32 | int64(r0))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) {\n\t_, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setlogin(name string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresgid(rgid int, egid int, sgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresuid(ruid int, euid int, suid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setrtable(rtable int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRTABLE, uintptr(rtable), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, stat *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(newmask int) (oldmask int) {\n\tr0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), uintptr(pos>>32), 0)\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc readlen(fd int, buf *byte, nbuf int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc writelen(fd int, buf *byte, nbuf int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go",
    "content": "// go run mksyscall.go -openbsd -tags openbsd,amd64 syscall_bsd.go syscall_openbsd.go syscall_openbsd_amd64.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build openbsd,amd64\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(mib) > 0 {\n\t\t_p0 = unsafe.Pointer(&mib[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, timeval *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimes(fd int, timeval *[2]Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, behav int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe(p *[2]_C_int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getdents(fd int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chflags(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(from int, to int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tSyscall(SYS_EXIT, uintptr(code), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchflags(fd int, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, stat *Statfs_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgrp int) {\n\tr0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)\n\tpgrp = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrtable() (rtable int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETRTABLE, 0, 0, 0)\n\trtable = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Issetugid() (tainted bool) {\n\tr0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0)\n\ttainted = bool(r0 != 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, signum syscall.Signal) (err error) {\n\t_, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kqueue() (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifoat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKFIFOAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknod(path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(fromfd int, from string, tofd int, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Revoke(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(whence), 0, 0)\n\tnewoffset = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) {\n\t_, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setlogin(name string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresgid(rgid int, egid int, sgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresuid(ruid int, euid int, suid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setrtable(rtable int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRTABLE, uintptr(rtable), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, stat *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(newmask int) (oldmask int) {\n\tr0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), 0, 0)\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc readlen(fd int, buf *byte, nbuf int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc writelen(fd int, buf *byte, nbuf int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go",
    "content": "// go run mksyscall.go -l32 -openbsd -arm -tags openbsd,arm syscall_bsd.go syscall_openbsd.go syscall_openbsd_arm.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build openbsd,arm\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(mib) > 0 {\n\t\t_p0 = unsafe.Pointer(&mib[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, timeval *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimes(fd int, timeval *[2]Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, behav int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe(p *[2]_C_int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getdents(fd int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chflags(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(from int, to int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tSyscall(SYS_EXIT, uintptr(code), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchflags(fd int, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, stat *Statfs_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgrp int) {\n\tr0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)\n\tpgrp = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrtable() (rtable int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETRTABLE, 0, 0, 0)\n\trtable = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Issetugid() (tainted bool) {\n\tr0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0)\n\ttainted = bool(r0 != 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, signum syscall.Signal) (err error) {\n\t_, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kqueue() (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifoat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKFIFOAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknod(path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(fromfd int, from string, tofd int, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Revoke(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(whence), 0)\n\tnewoffset = int64(int64(r1)<<32 | int64(r0))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) {\n\t_, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setlogin(name string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresgid(rgid int, egid int, sgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresuid(ruid int, euid int, suid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setrtable(rtable int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRTABLE, uintptr(rtable), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, stat *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(newmask int) (oldmask int) {\n\tr0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), uintptr(pos>>32), 0)\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc readlen(fd int, buf *byte, nbuf int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc writelen(fd int, buf *byte, nbuf int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go",
    "content": "// go run mksyscall.go -openbsd -tags openbsd,arm64 syscall_bsd.go syscall_openbsd.go syscall_openbsd_arm64.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build openbsd,arm64\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(mib) > 0 {\n\t\t_p0 = unsafe.Pointer(&mib[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, timeval *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimes(fd int, timeval *[2]Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, behav int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe(p *[2]_C_int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getdents(fd int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chflags(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(from int, to int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tSyscall(SYS_EXIT, uintptr(code), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchflags(fd int, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, stat *Statfs_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgrp int) {\n\tr0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)\n\tpgrp = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrtable() (rtable int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETRTABLE, 0, 0, 0)\n\trtable = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Issetugid() (tainted bool) {\n\tr0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0)\n\ttainted = bool(r0 != 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, signum syscall.Signal) (err error) {\n\t_, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kqueue() (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifoat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKFIFOAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknod(path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(fromfd int, from string, tofd int, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Revoke(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(whence), 0, 0)\n\tnewoffset = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) {\n\t_, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setlogin(name string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresgid(rgid int, egid int, sgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresuid(ruid int, euid int, suid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setrtable(rtable int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRTABLE, uintptr(rtable), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, stat *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(newmask int) (oldmask int) {\n\tr0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), 0, 0)\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc readlen(fd int, buf *byte, nbuf int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc writelen(fd int, buf *byte, nbuf int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go",
    "content": "// go run mksyscall_solaris.go -tags solaris,amd64 syscall_solaris.go syscall_solaris_amd64.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build solaris,amd64\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\n//go:cgo_import_dynamic libc_pipe pipe \"libc.so\"\n//go:cgo_import_dynamic libc_getsockname getsockname \"libsocket.so\"\n//go:cgo_import_dynamic libc_getcwd getcwd \"libc.so\"\n//go:cgo_import_dynamic libc_getgroups getgroups \"libc.so\"\n//go:cgo_import_dynamic libc_setgroups setgroups \"libc.so\"\n//go:cgo_import_dynamic libc_wait4 wait4 \"libc.so\"\n//go:cgo_import_dynamic libc_gethostname gethostname \"libc.so\"\n//go:cgo_import_dynamic libc_utimes utimes \"libc.so\"\n//go:cgo_import_dynamic libc_utimensat utimensat \"libc.so\"\n//go:cgo_import_dynamic libc_fcntl fcntl \"libc.so\"\n//go:cgo_import_dynamic libc_futimesat futimesat \"libc.so\"\n//go:cgo_import_dynamic libc_accept accept \"libsocket.so\"\n//go:cgo_import_dynamic libc___xnet_recvmsg __xnet_recvmsg \"libsocket.so\"\n//go:cgo_import_dynamic libc___xnet_sendmsg __xnet_sendmsg \"libsocket.so\"\n//go:cgo_import_dynamic libc_acct acct \"libc.so\"\n//go:cgo_import_dynamic libc___makedev __makedev \"libc.so\"\n//go:cgo_import_dynamic libc___major __major \"libc.so\"\n//go:cgo_import_dynamic libc___minor __minor \"libc.so\"\n//go:cgo_import_dynamic libc_ioctl ioctl \"libc.so\"\n//go:cgo_import_dynamic libc_poll poll \"libc.so\"\n//go:cgo_import_dynamic libc_access access \"libc.so\"\n//go:cgo_import_dynamic libc_adjtime adjtime \"libc.so\"\n//go:cgo_import_dynamic libc_chdir chdir \"libc.so\"\n//go:cgo_import_dynamic libc_chmod chmod \"libc.so\"\n//go:cgo_import_dynamic libc_chown chown \"libc.so\"\n//go:cgo_import_dynamic libc_chroot chroot \"libc.so\"\n//go:cgo_import_dynamic libc_close close \"libc.so\"\n//go:cgo_import_dynamic libc_creat creat \"libc.so\"\n//go:cgo_import_dynamic libc_dup dup \"libc.so\"\n//go:cgo_import_dynamic libc_dup2 dup2 \"libc.so\"\n//go:cgo_import_dynamic libc_exit exit \"libc.so\"\n//go:cgo_import_dynamic libc_faccessat faccessat \"libc.so\"\n//go:cgo_import_dynamic libc_fchdir fchdir \"libc.so\"\n//go:cgo_import_dynamic libc_fchmod fchmod \"libc.so\"\n//go:cgo_import_dynamic libc_fchmodat fchmodat \"libc.so\"\n//go:cgo_import_dynamic libc_fchown fchown \"libc.so\"\n//go:cgo_import_dynamic libc_fchownat fchownat \"libc.so\"\n//go:cgo_import_dynamic libc_fdatasync fdatasync \"libc.so\"\n//go:cgo_import_dynamic libc_flock flock \"libc.so\"\n//go:cgo_import_dynamic libc_fpathconf fpathconf \"libc.so\"\n//go:cgo_import_dynamic libc_fstat fstat \"libc.so\"\n//go:cgo_import_dynamic libc_fstatat fstatat \"libc.so\"\n//go:cgo_import_dynamic libc_fstatvfs fstatvfs \"libc.so\"\n//go:cgo_import_dynamic libc_getdents getdents \"libc.so\"\n//go:cgo_import_dynamic libc_getgid getgid \"libc.so\"\n//go:cgo_import_dynamic libc_getpid getpid \"libc.so\"\n//go:cgo_import_dynamic libc_getpgid getpgid \"libc.so\"\n//go:cgo_import_dynamic libc_getpgrp getpgrp \"libc.so\"\n//go:cgo_import_dynamic libc_geteuid geteuid \"libc.so\"\n//go:cgo_import_dynamic libc_getegid getegid \"libc.so\"\n//go:cgo_import_dynamic libc_getppid getppid \"libc.so\"\n//go:cgo_import_dynamic libc_getpriority getpriority \"libc.so\"\n//go:cgo_import_dynamic libc_getrlimit getrlimit \"libc.so\"\n//go:cgo_import_dynamic libc_getrusage getrusage \"libc.so\"\n//go:cgo_import_dynamic libc_gettimeofday gettimeofday \"libc.so\"\n//go:cgo_import_dynamic libc_getuid getuid \"libc.so\"\n//go:cgo_import_dynamic libc_kill kill \"libc.so\"\n//go:cgo_import_dynamic libc_lchown lchown \"libc.so\"\n//go:cgo_import_dynamic libc_link link \"libc.so\"\n//go:cgo_import_dynamic libc___xnet_llisten __xnet_llisten \"libsocket.so\"\n//go:cgo_import_dynamic libc_lstat lstat \"libc.so\"\n//go:cgo_import_dynamic libc_madvise madvise \"libc.so\"\n//go:cgo_import_dynamic libc_mkdir mkdir \"libc.so\"\n//go:cgo_import_dynamic libc_mkdirat mkdirat \"libc.so\"\n//go:cgo_import_dynamic libc_mkfifo mkfifo \"libc.so\"\n//go:cgo_import_dynamic libc_mkfifoat mkfifoat \"libc.so\"\n//go:cgo_import_dynamic libc_mknod mknod \"libc.so\"\n//go:cgo_import_dynamic libc_mknodat mknodat \"libc.so\"\n//go:cgo_import_dynamic libc_mlock mlock \"libc.so\"\n//go:cgo_import_dynamic libc_mlockall mlockall \"libc.so\"\n//go:cgo_import_dynamic libc_mprotect mprotect \"libc.so\"\n//go:cgo_import_dynamic libc_msync msync \"libc.so\"\n//go:cgo_import_dynamic libc_munlock munlock \"libc.so\"\n//go:cgo_import_dynamic libc_munlockall munlockall \"libc.so\"\n//go:cgo_import_dynamic libc_nanosleep nanosleep \"libc.so\"\n//go:cgo_import_dynamic libc_open open \"libc.so\"\n//go:cgo_import_dynamic libc_openat openat \"libc.so\"\n//go:cgo_import_dynamic libc_pathconf pathconf \"libc.so\"\n//go:cgo_import_dynamic libc_pause pause \"libc.so\"\n//go:cgo_import_dynamic libc_pread pread \"libc.so\"\n//go:cgo_import_dynamic libc_pwrite pwrite \"libc.so\"\n//go:cgo_import_dynamic libc_read read \"libc.so\"\n//go:cgo_import_dynamic libc_readlink readlink \"libc.so\"\n//go:cgo_import_dynamic libc_rename rename \"libc.so\"\n//go:cgo_import_dynamic libc_renameat renameat \"libc.so\"\n//go:cgo_import_dynamic libc_rmdir rmdir \"libc.so\"\n//go:cgo_import_dynamic libc_lseek lseek \"libc.so\"\n//go:cgo_import_dynamic libc_select select \"libc.so\"\n//go:cgo_import_dynamic libc_setegid setegid \"libc.so\"\n//go:cgo_import_dynamic libc_seteuid seteuid \"libc.so\"\n//go:cgo_import_dynamic libc_setgid setgid \"libc.so\"\n//go:cgo_import_dynamic libc_sethostname sethostname \"libc.so\"\n//go:cgo_import_dynamic libc_setpgid setpgid \"libc.so\"\n//go:cgo_import_dynamic libc_setpriority setpriority \"libc.so\"\n//go:cgo_import_dynamic libc_setregid setregid \"libc.so\"\n//go:cgo_import_dynamic libc_setreuid setreuid \"libc.so\"\n//go:cgo_import_dynamic libc_setrlimit setrlimit \"libc.so\"\n//go:cgo_import_dynamic libc_setsid setsid \"libc.so\"\n//go:cgo_import_dynamic libc_setuid setuid \"libc.so\"\n//go:cgo_import_dynamic libc_shutdown shutdown \"libsocket.so\"\n//go:cgo_import_dynamic libc_stat stat \"libc.so\"\n//go:cgo_import_dynamic libc_statvfs statvfs \"libc.so\"\n//go:cgo_import_dynamic libc_symlink symlink \"libc.so\"\n//go:cgo_import_dynamic libc_sync sync \"libc.so\"\n//go:cgo_import_dynamic libc_times times \"libc.so\"\n//go:cgo_import_dynamic libc_truncate truncate \"libc.so\"\n//go:cgo_import_dynamic libc_fsync fsync \"libc.so\"\n//go:cgo_import_dynamic libc_ftruncate ftruncate \"libc.so\"\n//go:cgo_import_dynamic libc_umask umask \"libc.so\"\n//go:cgo_import_dynamic libc_uname uname \"libc.so\"\n//go:cgo_import_dynamic libc_umount umount \"libc.so\"\n//go:cgo_import_dynamic libc_unlink unlink \"libc.so\"\n//go:cgo_import_dynamic libc_unlinkat unlinkat \"libc.so\"\n//go:cgo_import_dynamic libc_ustat ustat \"libc.so\"\n//go:cgo_import_dynamic libc_utime utime \"libc.so\"\n//go:cgo_import_dynamic libc___xnet_bind __xnet_bind \"libsocket.so\"\n//go:cgo_import_dynamic libc___xnet_connect __xnet_connect \"libsocket.so\"\n//go:cgo_import_dynamic libc_mmap mmap \"libc.so\"\n//go:cgo_import_dynamic libc_munmap munmap \"libc.so\"\n//go:cgo_import_dynamic libc_sendfile sendfile \"libsendfile.so\"\n//go:cgo_import_dynamic libc___xnet_sendto __xnet_sendto \"libsocket.so\"\n//go:cgo_import_dynamic libc___xnet_socket __xnet_socket \"libsocket.so\"\n//go:cgo_import_dynamic libc___xnet_socketpair __xnet_socketpair \"libsocket.so\"\n//go:cgo_import_dynamic libc_write write \"libc.so\"\n//go:cgo_import_dynamic libc___xnet_getsockopt __xnet_getsockopt \"libsocket.so\"\n//go:cgo_import_dynamic libc_getpeername getpeername \"libsocket.so\"\n//go:cgo_import_dynamic libc_setsockopt setsockopt \"libsocket.so\"\n//go:cgo_import_dynamic libc_recvfrom recvfrom \"libsocket.so\"\n\n//go:linkname procpipe libc_pipe\n//go:linkname procgetsockname libc_getsockname\n//go:linkname procGetcwd libc_getcwd\n//go:linkname procgetgroups libc_getgroups\n//go:linkname procsetgroups libc_setgroups\n//go:linkname procwait4 libc_wait4\n//go:linkname procgethostname libc_gethostname\n//go:linkname procutimes libc_utimes\n//go:linkname procutimensat libc_utimensat\n//go:linkname procfcntl libc_fcntl\n//go:linkname procfutimesat libc_futimesat\n//go:linkname procaccept libc_accept\n//go:linkname proc__xnet_recvmsg libc___xnet_recvmsg\n//go:linkname proc__xnet_sendmsg libc___xnet_sendmsg\n//go:linkname procacct libc_acct\n//go:linkname proc__makedev libc___makedev\n//go:linkname proc__major libc___major\n//go:linkname proc__minor libc___minor\n//go:linkname procioctl libc_ioctl\n//go:linkname procpoll libc_poll\n//go:linkname procAccess libc_access\n//go:linkname procAdjtime libc_adjtime\n//go:linkname procChdir libc_chdir\n//go:linkname procChmod libc_chmod\n//go:linkname procChown libc_chown\n//go:linkname procChroot libc_chroot\n//go:linkname procClose libc_close\n//go:linkname procCreat libc_creat\n//go:linkname procDup libc_dup\n//go:linkname procDup2 libc_dup2\n//go:linkname procExit libc_exit\n//go:linkname procFaccessat libc_faccessat\n//go:linkname procFchdir libc_fchdir\n//go:linkname procFchmod libc_fchmod\n//go:linkname procFchmodat libc_fchmodat\n//go:linkname procFchown libc_fchown\n//go:linkname procFchownat libc_fchownat\n//go:linkname procFdatasync libc_fdatasync\n//go:linkname procFlock libc_flock\n//go:linkname procFpathconf libc_fpathconf\n//go:linkname procFstat libc_fstat\n//go:linkname procFstatat libc_fstatat\n//go:linkname procFstatvfs libc_fstatvfs\n//go:linkname procGetdents libc_getdents\n//go:linkname procGetgid libc_getgid\n//go:linkname procGetpid libc_getpid\n//go:linkname procGetpgid libc_getpgid\n//go:linkname procGetpgrp libc_getpgrp\n//go:linkname procGeteuid libc_geteuid\n//go:linkname procGetegid libc_getegid\n//go:linkname procGetppid libc_getppid\n//go:linkname procGetpriority libc_getpriority\n//go:linkname procGetrlimit libc_getrlimit\n//go:linkname procGetrusage libc_getrusage\n//go:linkname procGettimeofday libc_gettimeofday\n//go:linkname procGetuid libc_getuid\n//go:linkname procKill libc_kill\n//go:linkname procLchown libc_lchown\n//go:linkname procLink libc_link\n//go:linkname proc__xnet_llisten libc___xnet_llisten\n//go:linkname procLstat libc_lstat\n//go:linkname procMadvise libc_madvise\n//go:linkname procMkdir libc_mkdir\n//go:linkname procMkdirat libc_mkdirat\n//go:linkname procMkfifo libc_mkfifo\n//go:linkname procMkfifoat libc_mkfifoat\n//go:linkname procMknod libc_mknod\n//go:linkname procMknodat libc_mknodat\n//go:linkname procMlock libc_mlock\n//go:linkname procMlockall libc_mlockall\n//go:linkname procMprotect libc_mprotect\n//go:linkname procMsync libc_msync\n//go:linkname procMunlock libc_munlock\n//go:linkname procMunlockall libc_munlockall\n//go:linkname procNanosleep libc_nanosleep\n//go:linkname procOpen libc_open\n//go:linkname procOpenat libc_openat\n//go:linkname procPathconf libc_pathconf\n//go:linkname procPause libc_pause\n//go:linkname procPread libc_pread\n//go:linkname procPwrite libc_pwrite\n//go:linkname procread libc_read\n//go:linkname procReadlink libc_readlink\n//go:linkname procRename libc_rename\n//go:linkname procRenameat libc_renameat\n//go:linkname procRmdir libc_rmdir\n//go:linkname proclseek libc_lseek\n//go:linkname procSelect libc_select\n//go:linkname procSetegid libc_setegid\n//go:linkname procSeteuid libc_seteuid\n//go:linkname procSetgid libc_setgid\n//go:linkname procSethostname libc_sethostname\n//go:linkname procSetpgid libc_setpgid\n//go:linkname procSetpriority libc_setpriority\n//go:linkname procSetregid libc_setregid\n//go:linkname procSetreuid libc_setreuid\n//go:linkname procSetrlimit libc_setrlimit\n//go:linkname procSetsid libc_setsid\n//go:linkname procSetuid libc_setuid\n//go:linkname procshutdown libc_shutdown\n//go:linkname procStat libc_stat\n//go:linkname procStatvfs libc_statvfs\n//go:linkname procSymlink libc_symlink\n//go:linkname procSync libc_sync\n//go:linkname procTimes libc_times\n//go:linkname procTruncate libc_truncate\n//go:linkname procFsync libc_fsync\n//go:linkname procFtruncate libc_ftruncate\n//go:linkname procUmask libc_umask\n//go:linkname procUname libc_uname\n//go:linkname procumount libc_umount\n//go:linkname procUnlink libc_unlink\n//go:linkname procUnlinkat libc_unlinkat\n//go:linkname procUstat libc_ustat\n//go:linkname procUtime libc_utime\n//go:linkname proc__xnet_bind libc___xnet_bind\n//go:linkname proc__xnet_connect libc___xnet_connect\n//go:linkname procmmap libc_mmap\n//go:linkname procmunmap libc_munmap\n//go:linkname procsendfile libc_sendfile\n//go:linkname proc__xnet_sendto libc___xnet_sendto\n//go:linkname proc__xnet_socket libc___xnet_socket\n//go:linkname proc__xnet_socketpair libc___xnet_socketpair\n//go:linkname procwrite libc_write\n//go:linkname proc__xnet_getsockopt libc___xnet_getsockopt\n//go:linkname procgetpeername libc_getpeername\n//go:linkname procsetsockopt libc_setsockopt\n//go:linkname procrecvfrom libc_recvfrom\n\nvar (\n\tprocpipe,\n\tprocgetsockname,\n\tprocGetcwd,\n\tprocgetgroups,\n\tprocsetgroups,\n\tprocwait4,\n\tprocgethostname,\n\tprocutimes,\n\tprocutimensat,\n\tprocfcntl,\n\tprocfutimesat,\n\tprocaccept,\n\tproc__xnet_recvmsg,\n\tproc__xnet_sendmsg,\n\tprocacct,\n\tproc__makedev,\n\tproc__major,\n\tproc__minor,\n\tprocioctl,\n\tprocpoll,\n\tprocAccess,\n\tprocAdjtime,\n\tprocChdir,\n\tprocChmod,\n\tprocChown,\n\tprocChroot,\n\tprocClose,\n\tprocCreat,\n\tprocDup,\n\tprocDup2,\n\tprocExit,\n\tprocFaccessat,\n\tprocFchdir,\n\tprocFchmod,\n\tprocFchmodat,\n\tprocFchown,\n\tprocFchownat,\n\tprocFdatasync,\n\tprocFlock,\n\tprocFpathconf,\n\tprocFstat,\n\tprocFstatat,\n\tprocFstatvfs,\n\tprocGetdents,\n\tprocGetgid,\n\tprocGetpid,\n\tprocGetpgid,\n\tprocGetpgrp,\n\tprocGeteuid,\n\tprocGetegid,\n\tprocGetppid,\n\tprocGetpriority,\n\tprocGetrlimit,\n\tprocGetrusage,\n\tprocGettimeofday,\n\tprocGetuid,\n\tprocKill,\n\tprocLchown,\n\tprocLink,\n\tproc__xnet_llisten,\n\tprocLstat,\n\tprocMadvise,\n\tprocMkdir,\n\tprocMkdirat,\n\tprocMkfifo,\n\tprocMkfifoat,\n\tprocMknod,\n\tprocMknodat,\n\tprocMlock,\n\tprocMlockall,\n\tprocMprotect,\n\tprocMsync,\n\tprocMunlock,\n\tprocMunlockall,\n\tprocNanosleep,\n\tprocOpen,\n\tprocOpenat,\n\tprocPathconf,\n\tprocPause,\n\tprocPread,\n\tprocPwrite,\n\tprocread,\n\tprocReadlink,\n\tprocRename,\n\tprocRenameat,\n\tprocRmdir,\n\tproclseek,\n\tprocSelect,\n\tprocSetegid,\n\tprocSeteuid,\n\tprocSetgid,\n\tprocSethostname,\n\tprocSetpgid,\n\tprocSetpriority,\n\tprocSetregid,\n\tprocSetreuid,\n\tprocSetrlimit,\n\tprocSetsid,\n\tprocSetuid,\n\tprocshutdown,\n\tprocStat,\n\tprocStatvfs,\n\tprocSymlink,\n\tprocSync,\n\tprocTimes,\n\tprocTruncate,\n\tprocFsync,\n\tprocFtruncate,\n\tprocUmask,\n\tprocUname,\n\tprocumount,\n\tprocUnlink,\n\tprocUnlinkat,\n\tprocUstat,\n\tprocUtime,\n\tproc__xnet_bind,\n\tproc__xnet_connect,\n\tprocmmap,\n\tprocmunmap,\n\tprocsendfile,\n\tproc__xnet_sendto,\n\tproc__xnet_socket,\n\tproc__xnet_socketpair,\n\tprocwrite,\n\tproc__xnet_getsockopt,\n\tprocgetpeername,\n\tprocsetsockopt,\n\tprocrecvfrom syscallFunc\n)\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe(p *[2]_C_int) (n int, err error) {\n\tr0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procpipe)), 1, uintptr(unsafe.Pointer(p)), 0, 0, 0, 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procgetsockname)), 3, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\tif len(buf) > 0 {\n\t\t_p0 = &buf[0]\n\t}\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procGetcwd)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), 0, 0, 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procgetgroups)), 2, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0, 0, 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procsetgroups)), 2, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int32, statusp *_C_int, options int, rusage *Rusage) (wpid int32, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procwait4)), 4, uintptr(pid), uintptr(unsafe.Pointer(statusp)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int32(r0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc gethostname(buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\tif len(buf) > 0 {\n\t\t_p0 = &buf[0]\n\t}\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procgethostname)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), 0, 0, 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procutimes)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(fd int, path string, times *[2]Timespec, flag int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procutimensat)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flag), 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (val int, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procfcntl)), 3, uintptr(fd), uintptr(cmd), uintptr(arg), 0, 0, 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimesat(fildes int, path *byte, times *[2]Timeval) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procfutimesat)), 3, uintptr(fildes), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times)), 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procaccept)), 3, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_recvmsg)), 3, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_sendmsg)), 3, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc acct(path *byte) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procacct)), 1, uintptr(unsafe.Pointer(path)), 0, 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc __makedev(version int, major uint, minor uint) (val uint64) {\n\tr0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&proc__makedev)), 3, uintptr(version), uintptr(major), uintptr(minor), 0, 0, 0)\n\tval = uint64(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc __major(version int, dev uint64) (val uint) {\n\tr0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&proc__major)), 2, uintptr(version), uintptr(dev), 0, 0, 0, 0)\n\tval = uint(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc __minor(version int, dev uint64) (val uint) {\n\tr0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&proc__minor)), 2, uintptr(version), uintptr(dev), 0, 0, 0, 0)\n\tval = uint(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procioctl)), 3, uintptr(fd), uintptr(req), uintptr(arg), 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procpoll)), 3, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout), 0, 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procAccess)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procAdjtime)), 2, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procChdir)), 1, uintptr(unsafe.Pointer(_p0)), 0, 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procChmod)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procChown)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procChroot)), 1, uintptr(unsafe.Pointer(_p0)), 0, 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procClose)), 1, uintptr(fd), 0, 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Creat(path string, mode uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procCreat)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procDup)), 1, uintptr(fd), 0, 0, 0, 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(oldfd int, newfd int) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procDup2)), 2, uintptr(oldfd), uintptr(newfd), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tsysvicall6(uintptr(unsafe.Pointer(&procExit)), 1, uintptr(code), 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFaccessat)), 4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchdir)), 1, uintptr(fd), 0, 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchmod)), 2, uintptr(fd), uintptr(mode), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchmodat)), 4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchown)), 3, uintptr(fd), uintptr(uid), uintptr(gid), 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchownat)), 5, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fdatasync(fd int) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFdatasync)), 1, uintptr(fd), 0, 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFlock)), 2, uintptr(fd), uintptr(how), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFpathconf)), 2, uintptr(fd), uintptr(name), 0, 0, 0, 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFstat)), 2, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFstatat)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatvfs(fd int, vfsstat *Statvfs_t) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFstatvfs)), 2, uintptr(fd), uintptr(unsafe.Pointer(vfsstat)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdents(fd int, buf []byte, basep *uintptr) (n int, err error) {\n\tvar _p0 *byte\n\tif len(buf) > 0 {\n\t\t_p0 = &buf[0]\n\t}\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procGetdents)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := rawSysvicall6(uintptr(unsafe.Pointer(&procGetgid)), 0, 0, 0, 0, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := rawSysvicall6(uintptr(unsafe.Pointer(&procGetpid)), 0, 0, 0, 0, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetpgid)), 1, uintptr(pid), 0, 0, 0, 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgid int, err error) {\n\tr0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetpgrp)), 0, 0, 0, 0, 0, 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (euid int) {\n\tr0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procGeteuid)), 0, 0, 0, 0, 0, 0, 0)\n\teuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procGetegid)), 0, 0, 0, 0, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procGetppid)), 0, 0, 0, 0, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (n int, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procGetpriority)), 2, uintptr(which), uintptr(who), 0, 0, 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetrlimit)), 2, uintptr(which), uintptr(unsafe.Pointer(lim)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetrusage)), 2, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGettimeofday)), 1, uintptr(unsafe.Pointer(tv)), 0, 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := rawSysvicall6(uintptr(unsafe.Pointer(&procGetuid)), 0, 0, 0, 0, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, signum syscall.Signal) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procKill)), 2, uintptr(pid), uintptr(signum), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procLchown)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procLink)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_llisten)), 2, uintptr(s), uintptr(backlog), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procLstat)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, advice int) (err error) {\n\tvar _p0 *byte\n\tif len(b) > 0 {\n\t\t_p0 = &b[0]\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMadvise)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), uintptr(advice), 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMkdir)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMkdirat)), 3, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMkfifo)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifoat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMkfifoat)), 3, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknod(path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMknod)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMknodat)), 4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 *byte\n\tif len(b) > 0 {\n\t\t_p0 = &b[0]\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMlock)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMlockall)), 1, uintptr(flags), 0, 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 *byte\n\tif len(b) > 0 {\n\t\t_p0 = &b[0]\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMprotect)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), uintptr(prot), 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 *byte\n\tif len(b) > 0 {\n\t\t_p0 = &b[0]\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMsync)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), uintptr(flags), 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 *byte\n\tif len(b) > 0 {\n\t\t_p0 = &b[0]\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMunlock)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMunlockall)), 0, 0, 0, 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procNanosleep)), 2, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procOpen)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procOpenat)), 4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procPathconf)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0, 0, 0, 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pause() (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procPause)), 0, 0, 0, 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 *byte\n\tif len(p) > 0 {\n\t\t_p0 = &p[0]\n\t}\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procPread)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 *byte\n\tif len(p) > 0 {\n\t\t_p0 = &p[0]\n\t}\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procPwrite)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 *byte\n\tif len(p) > 0 {\n\t\t_p0 = &p[0]\n\t}\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procread)), 3, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), 0, 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\tif len(buf) > 0 {\n\t\t_p1 = &buf[0]\n\t}\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procReadlink)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(len(buf)), 0, 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procRename)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procRenameat)), 4, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procRmdir)), 1, uintptr(unsafe.Pointer(_p0)), 0, 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proclseek)), 3, uintptr(fd), uintptr(offset), uintptr(whence), 0, 0, 0)\n\tnewoffset = int64(r0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSelect)), 5, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetegid)), 1, uintptr(egid), 0, 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSeteuid)), 1, uintptr(euid), 0, 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetgid)), 1, uintptr(gid), 0, 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sethostname(p []byte) (err error) {\n\tvar _p0 *byte\n\tif len(p) > 0 {\n\t\t_p0 = &p[0]\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSethostname)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetpgid)), 2, uintptr(pid), uintptr(pgid), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSetpriority)), 3, uintptr(which), uintptr(who), uintptr(prio), 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetregid)), 2, uintptr(rgid), uintptr(egid), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetreuid)), 2, uintptr(ruid), uintptr(euid), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetrlimit)), 2, uintptr(which), uintptr(unsafe.Pointer(lim)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetsid)), 0, 0, 0, 0, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetuid)), 1, uintptr(uid), 0, 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procshutdown)), 2, uintptr(s), uintptr(how), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procStat)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statvfs(path string, vfsstat *Statvfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procStatvfs)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(vfsstat)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSymlink)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSync)), 0, 0, 0, 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Times(tms *Tms) (ticks uintptr, err error) {\n\tr0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procTimes)), 1, uintptr(unsafe.Pointer(tms)), 0, 0, 0, 0, 0)\n\tticks = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procTruncate)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFsync)), 1, uintptr(fd), 0, 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFtruncate)), 2, uintptr(fd), uintptr(length), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(mask int) (oldmask int) {\n\tr0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procUmask)), 1, uintptr(mask), 0, 0, 0, 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Uname(buf *Utsname) (err error) {\n\t_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procUname)), 1, uintptr(unsafe.Pointer(buf)), 0, 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(target string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(target)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procumount)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUnlink)), 1, uintptr(unsafe.Pointer(_p0)), 0, 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUnlinkat)), 3, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ustat(dev int, ubuf *Ustat_t) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUstat)), 2, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Utime(path string, buf *Utimbuf) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUtime)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_bind)), 3, uintptr(s), uintptr(addr), uintptr(addrlen), 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_connect)), 3, uintptr(s), uintptr(addr), uintptr(addrlen), 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procmmap)), 6, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos))\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procmunmap)), 2, uintptr(addr), uintptr(length), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procsendfile)), 4, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)\n\twritten = int(r0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 *byte\n\tif len(buf) > 0 {\n\t\t_p0 = &buf[0]\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_sendto)), 6, uintptr(s), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_socket)), 3, uintptr(domain), uintptr(typ), uintptr(proto), 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&proc__xnet_socketpair)), 4, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 *byte\n\tif len(p) > 0 {\n\t\t_p0 = &p[0]\n\t}\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procwrite)), 3, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), 0, 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_getsockopt)), 5, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procgetpeername)), 3, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procsetsockopt)), 5, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 *byte\n\tif len(p) > 0 {\n\t\t_p0 = &p[0]\n\t}\n\tr0, _, 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\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysctl_openbsd_386.go",
    "content": "// mksysctl_openbsd.pl\n// Code generated by the command above; DO NOT EDIT.\n\n// +build 386,openbsd\n\npackage unix\n\ntype mibentry struct {\n\tctlname string\n\tctloid  []_C_int\n}\n\nvar sysctlMib = []mibentry{\n\t{\"ddb.console\", []_C_int{9, 6}},\n\t{\"ddb.log\", []_C_int{9, 7}},\n\t{\"ddb.max_line\", []_C_int{9, 3}},\n\t{\"ddb.max_width\", []_C_int{9, 2}},\n\t{\"ddb.panic\", []_C_int{9, 5}},\n\t{\"ddb.radix\", []_C_int{9, 1}},\n\t{\"ddb.tab_stop_width\", []_C_int{9, 4}},\n\t{\"ddb.trigger\", []_C_int{9, 8}},\n\t{\"fs.posix.setuid\", []_C_int{3, 1, 1}},\n\t{\"hw.allowpowerdown\", []_C_int{6, 22}},\n\t{\"hw.byteorder\", []_C_int{6, 4}},\n\t{\"hw.cpuspeed\", []_C_int{6, 12}},\n\t{\"hw.diskcount\", []_C_int{6, 10}},\n\t{\"hw.disknames\", []_C_int{6, 8}},\n\t{\"hw.diskstats\", []_C_int{6, 9}},\n\t{\"hw.machine\", []_C_int{6, 1}},\n\t{\"hw.model\", []_C_int{6, 2}},\n\t{\"hw.ncpu\", []_C_int{6, 3}},\n\t{\"hw.ncpufound\", []_C_int{6, 21}},\n\t{\"hw.pagesize\", []_C_int{6, 7}},\n\t{\"hw.physmem\", []_C_int{6, 19}},\n\t{\"hw.product\", []_C_int{6, 15}},\n\t{\"hw.serialno\", []_C_int{6, 17}},\n\t{\"hw.setperf\", []_C_int{6, 13}},\n\t{\"hw.usermem\", []_C_int{6, 20}},\n\t{\"hw.uuid\", []_C_int{6, 18}},\n\t{\"hw.vendor\", []_C_int{6, 14}},\n\t{\"hw.version\", []_C_int{6, 16}},\n\t{\"kern.arandom\", []_C_int{1, 37}},\n\t{\"kern.argmax\", []_C_int{1, 8}},\n\t{\"kern.boottime\", []_C_int{1, 21}},\n\t{\"kern.bufcachepercent\", []_C_int{1, 72}},\n\t{\"kern.ccpu\", []_C_int{1, 45}},\n\t{\"kern.clockrate\", []_C_int{1, 12}},\n\t{\"kern.consdev\", []_C_int{1, 75}},\n\t{\"kern.cp_time\", []_C_int{1, 40}},\n\t{\"kern.cp_time2\", []_C_int{1, 71}},\n\t{\"kern.cryptodevallowsoft\", []_C_int{1, 53}},\n\t{\"kern.domainname\", []_C_int{1, 22}},\n\t{\"kern.file\", []_C_int{1, 73}},\n\t{\"kern.forkstat\", []_C_int{1, 42}},\n\t{\"kern.fscale\", []_C_int{1, 46}},\n\t{\"kern.fsync\", []_C_int{1, 33}},\n\t{\"kern.hostid\", []_C_int{1, 11}},\n\t{\"kern.hostname\", []_C_int{1, 10}},\n\t{\"kern.intrcnt.nintrcnt\", []_C_int{1, 63, 1}},\n\t{\"kern.job_control\", []_C_int{1, 19}},\n\t{\"kern.malloc.buckets\", []_C_int{1, 39, 1}},\n\t{\"kern.malloc.kmemnames\", []_C_int{1, 39, 3}},\n\t{\"kern.maxclusters\", []_C_int{1, 67}},\n\t{\"kern.maxfiles\", []_C_int{1, 7}},\n\t{\"kern.maxlocksperuid\", []_C_int{1, 70}},\n\t{\"kern.maxpartitions\", []_C_int{1, 23}},\n\t{\"kern.maxproc\", []_C_int{1, 6}},\n\t{\"kern.maxthread\", []_C_int{1, 25}},\n\t{\"kern.maxvnodes\", []_C_int{1, 5}},\n\t{\"kern.mbstat\", []_C_int{1, 59}},\n\t{\"kern.msgbuf\", []_C_int{1, 48}},\n\t{\"kern.msgbufsize\", []_C_int{1, 38}},\n\t{\"kern.nchstats\", []_C_int{1, 41}},\n\t{\"kern.netlivelocks\", []_C_int{1, 76}},\n\t{\"kern.nfiles\", []_C_int{1, 56}},\n\t{\"kern.ngroups\", []_C_int{1, 18}},\n\t{\"kern.nosuidcoredump\", []_C_int{1, 32}},\n\t{\"kern.nprocs\", []_C_int{1, 47}},\n\t{\"kern.nselcoll\", []_C_int{1, 43}},\n\t{\"kern.nthreads\", []_C_int{1, 26}},\n\t{\"kern.numvnodes\", []_C_int{1, 58}},\n\t{\"kern.osrelease\", []_C_int{1, 2}},\n\t{\"kern.osrevision\", []_C_int{1, 3}},\n\t{\"kern.ostype\", []_C_int{1, 1}},\n\t{\"kern.osversion\", []_C_int{1, 27}},\n\t{\"kern.pool_debug\", []_C_int{1, 77}},\n\t{\"kern.posix1version\", []_C_int{1, 17}},\n\t{\"kern.proc\", []_C_int{1, 66}},\n\t{\"kern.random\", []_C_int{1, 31}},\n\t{\"kern.rawpartition\", []_C_int{1, 24}},\n\t{\"kern.saved_ids\", []_C_int{1, 20}},\n\t{\"kern.securelevel\", []_C_int{1, 9}},\n\t{\"kern.seminfo\", []_C_int{1, 61}},\n\t{\"kern.shminfo\", []_C_int{1, 62}},\n\t{\"kern.somaxconn\", []_C_int{1, 28}},\n\t{\"kern.sominconn\", []_C_int{1, 29}},\n\t{\"kern.splassert\", []_C_int{1, 54}},\n\t{\"kern.stackgap_random\", []_C_int{1, 50}},\n\t{\"kern.sysvipc_info\", []_C_int{1, 51}},\n\t{\"kern.sysvmsg\", []_C_int{1, 34}},\n\t{\"kern.sysvsem\", []_C_int{1, 35}},\n\t{\"kern.sysvshm\", []_C_int{1, 36}},\n\t{\"kern.timecounter.choice\", []_C_int{1, 69, 4}},\n\t{\"kern.timecounter.hardware\", []_C_int{1, 69, 3}},\n\t{\"kern.timecounter.tick\", []_C_int{1, 69, 1}},\n\t{\"kern.timecounter.timestepwarnings\", []_C_int{1, 69, 2}},\n\t{\"kern.tty.maxptys\", []_C_int{1, 44, 6}},\n\t{\"kern.tty.nptys\", []_C_int{1, 44, 7}},\n\t{\"kern.tty.tk_cancc\", []_C_int{1, 44, 4}},\n\t{\"kern.tty.tk_nin\", []_C_int{1, 44, 1}},\n\t{\"kern.tty.tk_nout\", []_C_int{1, 44, 2}},\n\t{\"kern.tty.tk_rawcc\", []_C_int{1, 44, 3}},\n\t{\"kern.tty.ttyinfo\", []_C_int{1, 44, 5}},\n\t{\"kern.ttycount\", []_C_int{1, 57}},\n\t{\"kern.userasymcrypto\", []_C_int{1, 60}},\n\t{\"kern.usercrypto\", []_C_int{1, 52}},\n\t{\"kern.usermount\", []_C_int{1, 30}},\n\t{\"kern.version\", []_C_int{1, 4}},\n\t{\"kern.vnode\", []_C_int{1, 13}},\n\t{\"kern.watchdog.auto\", []_C_int{1, 64, 2}},\n\t{\"kern.watchdog.period\", []_C_int{1, 64, 1}},\n\t{\"net.bpf.bufsize\", []_C_int{4, 31, 1}},\n\t{\"net.bpf.maxbufsize\", []_C_int{4, 31, 2}},\n\t{\"net.inet.ah.enable\", []_C_int{4, 2, 51, 1}},\n\t{\"net.inet.ah.stats\", []_C_int{4, 2, 51, 2}},\n\t{\"net.inet.carp.allow\", []_C_int{4, 2, 112, 1}},\n\t{\"net.inet.carp.log\", []_C_int{4, 2, 112, 3}},\n\t{\"net.inet.carp.preempt\", []_C_int{4, 2, 112, 2}},\n\t{\"net.inet.carp.stats\", []_C_int{4, 2, 112, 4}},\n\t{\"net.inet.divert.recvspace\", []_C_int{4, 2, 258, 1}},\n\t{\"net.inet.divert.sendspace\", []_C_int{4, 2, 258, 2}},\n\t{\"net.inet.divert.stats\", []_C_int{4, 2, 258, 3}},\n\t{\"net.inet.esp.enable\", []_C_int{4, 2, 50, 1}},\n\t{\"net.inet.esp.stats\", []_C_int{4, 2, 50, 4}},\n\t{\"net.inet.esp.udpencap\", []_C_int{4, 2, 50, 2}},\n\t{\"net.inet.esp.udpencap_port\", []_C_int{4, 2, 50, 3}},\n\t{\"net.inet.etherip.allow\", []_C_int{4, 2, 97, 1}},\n\t{\"net.inet.etherip.stats\", []_C_int{4, 2, 97, 2}},\n\t{\"net.inet.gre.allow\", []_C_int{4, 2, 47, 1}},\n\t{\"net.inet.gre.wccp\", []_C_int{4, 2, 47, 2}},\n\t{\"net.inet.icmp.bmcastecho\", []_C_int{4, 2, 1, 2}},\n\t{\"net.inet.icmp.errppslimit\", []_C_int{4, 2, 1, 3}},\n\t{\"net.inet.icmp.maskrepl\", []_C_int{4, 2, 1, 1}},\n\t{\"net.inet.icmp.rediraccept\", []_C_int{4, 2, 1, 4}},\n\t{\"net.inet.icmp.redirtimeout\", []_C_int{4, 2, 1, 5}},\n\t{\"net.inet.icmp.stats\", []_C_int{4, 2, 1, 7}},\n\t{\"net.inet.icmp.tstamprepl\", []_C_int{4, 2, 1, 6}},\n\t{\"net.inet.igmp.stats\", []_C_int{4, 2, 2, 1}},\n\t{\"net.inet.ip.arpqueued\", []_C_int{4, 2, 0, 36}},\n\t{\"net.inet.ip.encdebug\", []_C_int{4, 2, 0, 12}},\n\t{\"net.inet.ip.forwarding\", []_C_int{4, 2, 0, 1}},\n\t{\"net.inet.ip.ifq.congestion\", []_C_int{4, 2, 0, 30, 4}},\n\t{\"net.inet.ip.ifq.drops\", []_C_int{4, 2, 0, 30, 3}},\n\t{\"net.inet.ip.ifq.len\", []_C_int{4, 2, 0, 30, 1}},\n\t{\"net.inet.ip.ifq.maxlen\", []_C_int{4, 2, 0, 30, 2}},\n\t{\"net.inet.ip.maxqueue\", []_C_int{4, 2, 0, 11}},\n\t{\"net.inet.ip.mforwarding\", []_C_int{4, 2, 0, 31}},\n\t{\"net.inet.ip.mrtproto\", []_C_int{4, 2, 0, 34}},\n\t{\"net.inet.ip.mrtstats\", []_C_int{4, 2, 0, 35}},\n\t{\"net.inet.ip.mtu\", []_C_int{4, 2, 0, 4}},\n\t{\"net.inet.ip.mtudisc\", []_C_int{4, 2, 0, 27}},\n\t{\"net.inet.ip.mtudisctimeout\", []_C_int{4, 2, 0, 28}},\n\t{\"net.inet.ip.multipath\", []_C_int{4, 2, 0, 32}},\n\t{\"net.inet.ip.portfirst\", []_C_int{4, 2, 0, 7}},\n\t{\"net.inet.ip.porthifirst\", []_C_int{4, 2, 0, 9}},\n\t{\"net.inet.ip.porthilast\", []_C_int{4, 2, 0, 10}},\n\t{\"net.inet.ip.portlast\", []_C_int{4, 2, 0, 8}},\n\t{\"net.inet.ip.redirect\", []_C_int{4, 2, 0, 2}},\n\t{\"net.inet.ip.sourceroute\", []_C_int{4, 2, 0, 5}},\n\t{\"net.inet.ip.stats\", []_C_int{4, 2, 0, 33}},\n\t{\"net.inet.ip.ttl\", []_C_int{4, 2, 0, 3}},\n\t{\"net.inet.ipcomp.enable\", []_C_int{4, 2, 108, 1}},\n\t{\"net.inet.ipcomp.stats\", []_C_int{4, 2, 108, 2}},\n\t{\"net.inet.ipip.allow\", []_C_int{4, 2, 4, 1}},\n\t{\"net.inet.ipip.stats\", []_C_int{4, 2, 4, 2}},\n\t{\"net.inet.mobileip.allow\", []_C_int{4, 2, 55, 1}},\n\t{\"net.inet.pfsync.stats\", []_C_int{4, 2, 240, 1}},\n\t{\"net.inet.pim.stats\", []_C_int{4, 2, 103, 1}},\n\t{\"net.inet.tcp.ackonpush\", []_C_int{4, 2, 6, 13}},\n\t{\"net.inet.tcp.always_keepalive\", []_C_int{4, 2, 6, 22}},\n\t{\"net.inet.tcp.baddynamic\", []_C_int{4, 2, 6, 6}},\n\t{\"net.inet.tcp.drop\", []_C_int{4, 2, 6, 19}},\n\t{\"net.inet.tcp.ecn\", []_C_int{4, 2, 6, 14}},\n\t{\"net.inet.tcp.ident\", []_C_int{4, 2, 6, 9}},\n\t{\"net.inet.tcp.keepidle\", []_C_int{4, 2, 6, 3}},\n\t{\"net.inet.tcp.keepinittime\", []_C_int{4, 2, 6, 2}},\n\t{\"net.inet.tcp.keepintvl\", []_C_int{4, 2, 6, 4}},\n\t{\"net.inet.tcp.mssdflt\", []_C_int{4, 2, 6, 11}},\n\t{\"net.inet.tcp.reasslimit\", []_C_int{4, 2, 6, 18}},\n\t{\"net.inet.tcp.rfc1323\", []_C_int{4, 2, 6, 1}},\n\t{\"net.inet.tcp.rfc3390\", []_C_int{4, 2, 6, 17}},\n\t{\"net.inet.tcp.rstppslimit\", []_C_int{4, 2, 6, 12}},\n\t{\"net.inet.tcp.sack\", []_C_int{4, 2, 6, 10}},\n\t{\"net.inet.tcp.sackholelimit\", []_C_int{4, 2, 6, 20}},\n\t{\"net.inet.tcp.slowhz\", []_C_int{4, 2, 6, 5}},\n\t{\"net.inet.tcp.stats\", []_C_int{4, 2, 6, 21}},\n\t{\"net.inet.tcp.synbucketlimit\", []_C_int{4, 2, 6, 16}},\n\t{\"net.inet.tcp.syncachelimit\", []_C_int{4, 2, 6, 15}},\n\t{\"net.inet.udp.baddynamic\", []_C_int{4, 2, 17, 2}},\n\t{\"net.inet.udp.checksum\", []_C_int{4, 2, 17, 1}},\n\t{\"net.inet.udp.recvspace\", []_C_int{4, 2, 17, 3}},\n\t{\"net.inet.udp.sendspace\", []_C_int{4, 2, 17, 4}},\n\t{\"net.inet.udp.stats\", []_C_int{4, 2, 17, 5}},\n\t{\"net.inet6.divert.recvspace\", []_C_int{4, 24, 86, 1}},\n\t{\"net.inet6.divert.sendspace\", []_C_int{4, 24, 86, 2}},\n\t{\"net.inet6.divert.stats\", []_C_int{4, 24, 86, 3}},\n\t{\"net.inet6.icmp6.errppslimit\", []_C_int{4, 24, 30, 14}},\n\t{\"net.inet6.icmp6.mtudisc_hiwat\", []_C_int{4, 24, 30, 16}},\n\t{\"net.inet6.icmp6.mtudisc_lowat\", []_C_int{4, 24, 30, 17}},\n\t{\"net.inet6.icmp6.nd6_debug\", []_C_int{4, 24, 30, 18}},\n\t{\"net.inet6.icmp6.nd6_delay\", []_C_int{4, 24, 30, 8}},\n\t{\"net.inet6.icmp6.nd6_maxnudhint\", []_C_int{4, 24, 30, 15}},\n\t{\"net.inet6.icmp6.nd6_mmaxtries\", []_C_int{4, 24, 30, 10}},\n\t{\"net.inet6.icmp6.nd6_prune\", []_C_int{4, 24, 30, 6}},\n\t{\"net.inet6.icmp6.nd6_umaxtries\", []_C_int{4, 24, 30, 9}},\n\t{\"net.inet6.icmp6.nd6_useloopback\", []_C_int{4, 24, 30, 11}},\n\t{\"net.inet6.icmp6.nodeinfo\", []_C_int{4, 24, 30, 13}},\n\t{\"net.inet6.icmp6.rediraccept\", []_C_int{4, 24, 30, 2}},\n\t{\"net.inet6.icmp6.redirtimeout\", []_C_int{4, 24, 30, 3}},\n\t{\"net.inet6.ip6.accept_rtadv\", []_C_int{4, 24, 17, 12}},\n\t{\"net.inet6.ip6.auto_flowlabel\", []_C_int{4, 24, 17, 17}},\n\t{\"net.inet6.ip6.dad_count\", []_C_int{4, 24, 17, 16}},\n\t{\"net.inet6.ip6.dad_pending\", []_C_int{4, 24, 17, 49}},\n\t{\"net.inet6.ip6.defmcasthlim\", []_C_int{4, 24, 17, 18}},\n\t{\"net.inet6.ip6.forwarding\", []_C_int{4, 24, 17, 1}},\n\t{\"net.inet6.ip6.forwsrcrt\", []_C_int{4, 24, 17, 5}},\n\t{\"net.inet6.ip6.hdrnestlimit\", []_C_int{4, 24, 17, 15}},\n\t{\"net.inet6.ip6.hlim\", []_C_int{4, 24, 17, 3}},\n\t{\"net.inet6.ip6.log_interval\", []_C_int{4, 24, 17, 14}},\n\t{\"net.inet6.ip6.maxdynroutes\", []_C_int{4, 24, 17, 48}},\n\t{\"net.inet6.ip6.maxfragpackets\", []_C_int{4, 24, 17, 9}},\n\t{\"net.inet6.ip6.maxfrags\", []_C_int{4, 24, 17, 41}},\n\t{\"net.inet6.ip6.maxifdefrouters\", []_C_int{4, 24, 17, 47}},\n\t{\"net.inet6.ip6.maxifprefixes\", []_C_int{4, 24, 17, 46}},\n\t{\"net.inet6.ip6.mforwarding\", []_C_int{4, 24, 17, 42}},\n\t{\"net.inet6.ip6.mrtproto\", []_C_int{4, 24, 17, 8}},\n\t{\"net.inet6.ip6.mtudisctimeout\", []_C_int{4, 24, 17, 50}},\n\t{\"net.inet6.ip6.multicast_mtudisc\", []_C_int{4, 24, 17, 44}},\n\t{\"net.inet6.ip6.multipath\", []_C_int{4, 24, 17, 43}},\n\t{\"net.inet6.ip6.neighborgcthresh\", []_C_int{4, 24, 17, 45}},\n\t{\"net.inet6.ip6.redirect\", []_C_int{4, 24, 17, 2}},\n\t{\"net.inet6.ip6.rr_prune\", []_C_int{4, 24, 17, 22}},\n\t{\"net.inet6.ip6.sourcecheck\", []_C_int{4, 24, 17, 10}},\n\t{\"net.inet6.ip6.sourcecheck_logint\", []_C_int{4, 24, 17, 11}},\n\t{\"net.inet6.ip6.use_deprecated\", []_C_int{4, 24, 17, 21}},\n\t{\"net.inet6.ip6.v6only\", []_C_int{4, 24, 17, 24}},\n\t{\"net.key.sadb_dump\", []_C_int{4, 30, 1}},\n\t{\"net.key.spd_dump\", []_C_int{4, 30, 2}},\n\t{\"net.mpls.ifq.congestion\", []_C_int{4, 33, 3, 4}},\n\t{\"net.mpls.ifq.drops\", []_C_int{4, 33, 3, 3}},\n\t{\"net.mpls.ifq.len\", []_C_int{4, 33, 3, 1}},\n\t{\"net.mpls.ifq.maxlen\", []_C_int{4, 33, 3, 2}},\n\t{\"net.mpls.mapttl_ip\", []_C_int{4, 33, 5}},\n\t{\"net.mpls.mapttl_ip6\", []_C_int{4, 33, 6}},\n\t{\"net.mpls.maxloop_inkernel\", []_C_int{4, 33, 4}},\n\t{\"net.mpls.ttl\", []_C_int{4, 33, 2}},\n\t{\"net.pflow.stats\", []_C_int{4, 34, 1}},\n\t{\"net.pipex.enable\", []_C_int{4, 35, 1}},\n\t{\"vm.anonmin\", []_C_int{2, 7}},\n\t{\"vm.loadavg\", []_C_int{2, 2}},\n\t{\"vm.maxslp\", []_C_int{2, 10}},\n\t{\"vm.nkmempages\", []_C_int{2, 6}},\n\t{\"vm.psstrings\", []_C_int{2, 3}},\n\t{\"vm.swapencrypt.enable\", []_C_int{2, 5, 0}},\n\t{\"vm.swapencrypt.keyscreated\", []_C_int{2, 5, 1}},\n\t{\"vm.swapencrypt.keysdeleted\", []_C_int{2, 5, 2}},\n\t{\"vm.uspace\", []_C_int{2, 11}},\n\t{\"vm.uvmexp\", []_C_int{2, 4}},\n\t{\"vm.vmmeter\", []_C_int{2, 1}},\n\t{\"vm.vnodemin\", []_C_int{2, 9}},\n\t{\"vm.vtextmin\", []_C_int{2, 8}},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysctl_openbsd_amd64.go",
    "content": "// go run mksysctl_openbsd.go\n// Code generated by the command above; DO NOT EDIT.\n\n// +build amd64,openbsd\n\npackage unix\n\ntype mibentry struct {\n\tctlname string\n\tctloid  []_C_int\n}\n\nvar sysctlMib = []mibentry{\n\t{\"ddb.console\", []_C_int{9, 6}},\n\t{\"ddb.log\", []_C_int{9, 7}},\n\t{\"ddb.max_line\", []_C_int{9, 3}},\n\t{\"ddb.max_width\", []_C_int{9, 2}},\n\t{\"ddb.panic\", []_C_int{9, 5}},\n\t{\"ddb.profile\", []_C_int{9, 9}},\n\t{\"ddb.radix\", []_C_int{9, 1}},\n\t{\"ddb.tab_stop_width\", []_C_int{9, 4}},\n\t{\"ddb.trigger\", []_C_int{9, 8}},\n\t{\"fs.posix.setuid\", []_C_int{3, 1, 1}},\n\t{\"hw.allowpowerdown\", []_C_int{6, 22}},\n\t{\"hw.byteorder\", []_C_int{6, 4}},\n\t{\"hw.cpuspeed\", []_C_int{6, 12}},\n\t{\"hw.diskcount\", []_C_int{6, 10}},\n\t{\"hw.disknames\", []_C_int{6, 8}},\n\t{\"hw.diskstats\", []_C_int{6, 9}},\n\t{\"hw.machine\", []_C_int{6, 1}},\n\t{\"hw.model\", []_C_int{6, 2}},\n\t{\"hw.ncpu\", []_C_int{6, 3}},\n\t{\"hw.ncpufound\", []_C_int{6, 21}},\n\t{\"hw.pagesize\", []_C_int{6, 7}},\n\t{\"hw.perfpolicy\", []_C_int{6, 23}},\n\t{\"hw.physmem\", []_C_int{6, 19}},\n\t{\"hw.product\", []_C_int{6, 15}},\n\t{\"hw.serialno\", []_C_int{6, 17}},\n\t{\"hw.setperf\", []_C_int{6, 13}},\n\t{\"hw.usermem\", []_C_int{6, 20}},\n\t{\"hw.uuid\", []_C_int{6, 18}},\n\t{\"hw.vendor\", []_C_int{6, 14}},\n\t{\"hw.version\", []_C_int{6, 16}},\n\t{\"kern.allowkmem\", []_C_int{1, 52}},\n\t{\"kern.argmax\", []_C_int{1, 8}},\n\t{\"kern.boottime\", []_C_int{1, 21}},\n\t{\"kern.bufcachepercent\", []_C_int{1, 72}},\n\t{\"kern.ccpu\", []_C_int{1, 45}},\n\t{\"kern.clockrate\", []_C_int{1, 12}},\n\t{\"kern.consdev\", []_C_int{1, 75}},\n\t{\"kern.cp_time\", []_C_int{1, 40}},\n\t{\"kern.cp_time2\", []_C_int{1, 71}},\n\t{\"kern.dnsjackport\", []_C_int{1, 13}},\n\t{\"kern.domainname\", []_C_int{1, 22}},\n\t{\"kern.file\", []_C_int{1, 73}},\n\t{\"kern.forkstat\", []_C_int{1, 42}},\n\t{\"kern.fscale\", []_C_int{1, 46}},\n\t{\"kern.fsync\", []_C_int{1, 33}},\n\t{\"kern.global_ptrace\", []_C_int{1, 81}},\n\t{\"kern.hostid\", []_C_int{1, 11}},\n\t{\"kern.hostname\", []_C_int{1, 10}},\n\t{\"kern.intrcnt.nintrcnt\", []_C_int{1, 63, 1}},\n\t{\"kern.job_control\", []_C_int{1, 19}},\n\t{\"kern.malloc.buckets\", []_C_int{1, 39, 1}},\n\t{\"kern.malloc.kmemnames\", []_C_int{1, 39, 3}},\n\t{\"kern.maxclusters\", []_C_int{1, 67}},\n\t{\"kern.maxfiles\", []_C_int{1, 7}},\n\t{\"kern.maxlocksperuid\", []_C_int{1, 70}},\n\t{\"kern.maxpartitions\", []_C_int{1, 23}},\n\t{\"kern.maxproc\", []_C_int{1, 6}},\n\t{\"kern.maxthread\", []_C_int{1, 25}},\n\t{\"kern.maxvnodes\", []_C_int{1, 5}},\n\t{\"kern.mbstat\", []_C_int{1, 59}},\n\t{\"kern.msgbuf\", []_C_int{1, 48}},\n\t{\"kern.msgbufsize\", []_C_int{1, 38}},\n\t{\"kern.nchstats\", []_C_int{1, 41}},\n\t{\"kern.netlivelocks\", []_C_int{1, 76}},\n\t{\"kern.nfiles\", []_C_int{1, 56}},\n\t{\"kern.ngroups\", []_C_int{1, 18}},\n\t{\"kern.nosuidcoredump\", []_C_int{1, 32}},\n\t{\"kern.nprocs\", []_C_int{1, 47}},\n\t{\"kern.nselcoll\", []_C_int{1, 43}},\n\t{\"kern.nthreads\", []_C_int{1, 26}},\n\t{\"kern.numvnodes\", []_C_int{1, 58}},\n\t{\"kern.osrelease\", []_C_int{1, 2}},\n\t{\"kern.osrevision\", []_C_int{1, 3}},\n\t{\"kern.ostype\", []_C_int{1, 1}},\n\t{\"kern.osversion\", []_C_int{1, 27}},\n\t{\"kern.pool_debug\", []_C_int{1, 77}},\n\t{\"kern.posix1version\", []_C_int{1, 17}},\n\t{\"kern.proc\", []_C_int{1, 66}},\n\t{\"kern.rawpartition\", []_C_int{1, 24}},\n\t{\"kern.saved_ids\", []_C_int{1, 20}},\n\t{\"kern.securelevel\", []_C_int{1, 9}},\n\t{\"kern.seminfo\", []_C_int{1, 61}},\n\t{\"kern.shminfo\", []_C_int{1, 62}},\n\t{\"kern.somaxconn\", []_C_int{1, 28}},\n\t{\"kern.sominconn\", []_C_int{1, 29}},\n\t{\"kern.splassert\", []_C_int{1, 54}},\n\t{\"kern.stackgap_random\", []_C_int{1, 50}},\n\t{\"kern.sysvipc_info\", []_C_int{1, 51}},\n\t{\"kern.sysvmsg\", []_C_int{1, 34}},\n\t{\"kern.sysvsem\", []_C_int{1, 35}},\n\t{\"kern.sysvshm\", []_C_int{1, 36}},\n\t{\"kern.timecounter.choice\", []_C_int{1, 69, 4}},\n\t{\"kern.timecounter.hardware\", []_C_int{1, 69, 3}},\n\t{\"kern.timecounter.tick\", []_C_int{1, 69, 1}},\n\t{\"kern.timecounter.timestepwarnings\", []_C_int{1, 69, 2}},\n\t{\"kern.tty.tk_cancc\", []_C_int{1, 44, 4}},\n\t{\"kern.tty.tk_nin\", []_C_int{1, 44, 1}},\n\t{\"kern.tty.tk_nout\", []_C_int{1, 44, 2}},\n\t{\"kern.tty.tk_rawcc\", []_C_int{1, 44, 3}},\n\t{\"kern.tty.ttyinfo\", []_C_int{1, 44, 5}},\n\t{\"kern.ttycount\", []_C_int{1, 57}},\n\t{\"kern.version\", []_C_int{1, 4}},\n\t{\"kern.watchdog.auto\", []_C_int{1, 64, 2}},\n\t{\"kern.watchdog.period\", []_C_int{1, 64, 1}},\n\t{\"kern.wxabort\", []_C_int{1, 74}},\n\t{\"net.bpf.bufsize\", []_C_int{4, 31, 1}},\n\t{\"net.bpf.maxbufsize\", []_C_int{4, 31, 2}},\n\t{\"net.inet.ah.enable\", []_C_int{4, 2, 51, 1}},\n\t{\"net.inet.ah.stats\", []_C_int{4, 2, 51, 2}},\n\t{\"net.inet.carp.allow\", []_C_int{4, 2, 112, 1}},\n\t{\"net.inet.carp.log\", []_C_int{4, 2, 112, 3}},\n\t{\"net.inet.carp.preempt\", []_C_int{4, 2, 112, 2}},\n\t{\"net.inet.carp.stats\", []_C_int{4, 2, 112, 4}},\n\t{\"net.inet.divert.recvspace\", []_C_int{4, 2, 258, 1}},\n\t{\"net.inet.divert.sendspace\", []_C_int{4, 2, 258, 2}},\n\t{\"net.inet.divert.stats\", []_C_int{4, 2, 258, 3}},\n\t{\"net.inet.esp.enable\", []_C_int{4, 2, 50, 1}},\n\t{\"net.inet.esp.stats\", []_C_int{4, 2, 50, 4}},\n\t{\"net.inet.esp.udpencap\", []_C_int{4, 2, 50, 2}},\n\t{\"net.inet.esp.udpencap_port\", []_C_int{4, 2, 50, 3}},\n\t{\"net.inet.etherip.allow\", []_C_int{4, 2, 97, 1}},\n\t{\"net.inet.etherip.stats\", []_C_int{4, 2, 97, 2}},\n\t{\"net.inet.gre.allow\", []_C_int{4, 2, 47, 1}},\n\t{\"net.inet.gre.wccp\", []_C_int{4, 2, 47, 2}},\n\t{\"net.inet.icmp.bmcastecho\", []_C_int{4, 2, 1, 2}},\n\t{\"net.inet.icmp.errppslimit\", []_C_int{4, 2, 1, 3}},\n\t{\"net.inet.icmp.maskrepl\", []_C_int{4, 2, 1, 1}},\n\t{\"net.inet.icmp.rediraccept\", []_C_int{4, 2, 1, 4}},\n\t{\"net.inet.icmp.redirtimeout\", []_C_int{4, 2, 1, 5}},\n\t{\"net.inet.icmp.stats\", []_C_int{4, 2, 1, 7}},\n\t{\"net.inet.icmp.tstamprepl\", []_C_int{4, 2, 1, 6}},\n\t{\"net.inet.igmp.stats\", []_C_int{4, 2, 2, 1}},\n\t{\"net.inet.ip.arpdown\", []_C_int{4, 2, 0, 40}},\n\t{\"net.inet.ip.arpqueued\", []_C_int{4, 2, 0, 36}},\n\t{\"net.inet.ip.arptimeout\", []_C_int{4, 2, 0, 39}},\n\t{\"net.inet.ip.encdebug\", []_C_int{4, 2, 0, 12}},\n\t{\"net.inet.ip.forwarding\", []_C_int{4, 2, 0, 1}},\n\t{\"net.inet.ip.ifq.congestion\", []_C_int{4, 2, 0, 30, 4}},\n\t{\"net.inet.ip.ifq.drops\", []_C_int{4, 2, 0, 30, 3}},\n\t{\"net.inet.ip.ifq.len\", []_C_int{4, 2, 0, 30, 1}},\n\t{\"net.inet.ip.ifq.maxlen\", []_C_int{4, 2, 0, 30, 2}},\n\t{\"net.inet.ip.maxqueue\", []_C_int{4, 2, 0, 11}},\n\t{\"net.inet.ip.mforwarding\", []_C_int{4, 2, 0, 31}},\n\t{\"net.inet.ip.mrtmfc\", []_C_int{4, 2, 0, 37}},\n\t{\"net.inet.ip.mrtproto\", []_C_int{4, 2, 0, 34}},\n\t{\"net.inet.ip.mrtstats\", []_C_int{4, 2, 0, 35}},\n\t{\"net.inet.ip.mrtvif\", []_C_int{4, 2, 0, 38}},\n\t{\"net.inet.ip.mtu\", []_C_int{4, 2, 0, 4}},\n\t{\"net.inet.ip.mtudisc\", []_C_int{4, 2, 0, 27}},\n\t{\"net.inet.ip.mtudisctimeout\", []_C_int{4, 2, 0, 28}},\n\t{\"net.inet.ip.multipath\", []_C_int{4, 2, 0, 32}},\n\t{\"net.inet.ip.portfirst\", []_C_int{4, 2, 0, 7}},\n\t{\"net.inet.ip.porthifirst\", []_C_int{4, 2, 0, 9}},\n\t{\"net.inet.ip.porthilast\", []_C_int{4, 2, 0, 10}},\n\t{\"net.inet.ip.portlast\", []_C_int{4, 2, 0, 8}},\n\t{\"net.inet.ip.redirect\", []_C_int{4, 2, 0, 2}},\n\t{\"net.inet.ip.sourceroute\", []_C_int{4, 2, 0, 5}},\n\t{\"net.inet.ip.stats\", []_C_int{4, 2, 0, 33}},\n\t{\"net.inet.ip.ttl\", []_C_int{4, 2, 0, 3}},\n\t{\"net.inet.ipcomp.enable\", []_C_int{4, 2, 108, 1}},\n\t{\"net.inet.ipcomp.stats\", []_C_int{4, 2, 108, 2}},\n\t{\"net.inet.ipip.allow\", []_C_int{4, 2, 4, 1}},\n\t{\"net.inet.ipip.stats\", []_C_int{4, 2, 4, 2}},\n\t{\"net.inet.mobileip.allow\", []_C_int{4, 2, 55, 1}},\n\t{\"net.inet.pfsync.stats\", []_C_int{4, 2, 240, 1}},\n\t{\"net.inet.tcp.ackonpush\", []_C_int{4, 2, 6, 13}},\n\t{\"net.inet.tcp.always_keepalive\", []_C_int{4, 2, 6, 22}},\n\t{\"net.inet.tcp.baddynamic\", []_C_int{4, 2, 6, 6}},\n\t{\"net.inet.tcp.drop\", []_C_int{4, 2, 6, 19}},\n\t{\"net.inet.tcp.ecn\", []_C_int{4, 2, 6, 14}},\n\t{\"net.inet.tcp.ident\", []_C_int{4, 2, 6, 9}},\n\t{\"net.inet.tcp.keepidle\", []_C_int{4, 2, 6, 3}},\n\t{\"net.inet.tcp.keepinittime\", []_C_int{4, 2, 6, 2}},\n\t{\"net.inet.tcp.keepintvl\", []_C_int{4, 2, 6, 4}},\n\t{\"net.inet.tcp.mssdflt\", []_C_int{4, 2, 6, 11}},\n\t{\"net.inet.tcp.reasslimit\", []_C_int{4, 2, 6, 18}},\n\t{\"net.inet.tcp.rfc1323\", []_C_int{4, 2, 6, 1}},\n\t{\"net.inet.tcp.rfc3390\", []_C_int{4, 2, 6, 17}},\n\t{\"net.inet.tcp.rootonly\", []_C_int{4, 2, 6, 24}},\n\t{\"net.inet.tcp.rstppslimit\", []_C_int{4, 2, 6, 12}},\n\t{\"net.inet.tcp.sack\", []_C_int{4, 2, 6, 10}},\n\t{\"net.inet.tcp.sackholelimit\", []_C_int{4, 2, 6, 20}},\n\t{\"net.inet.tcp.slowhz\", []_C_int{4, 2, 6, 5}},\n\t{\"net.inet.tcp.stats\", []_C_int{4, 2, 6, 21}},\n\t{\"net.inet.tcp.synbucketlimit\", []_C_int{4, 2, 6, 16}},\n\t{\"net.inet.tcp.syncachelimit\", []_C_int{4, 2, 6, 15}},\n\t{\"net.inet.tcp.synhashsize\", []_C_int{4, 2, 6, 25}},\n\t{\"net.inet.tcp.synuselimit\", []_C_int{4, 2, 6, 23}},\n\t{\"net.inet.udp.baddynamic\", []_C_int{4, 2, 17, 2}},\n\t{\"net.inet.udp.checksum\", []_C_int{4, 2, 17, 1}},\n\t{\"net.inet.udp.recvspace\", []_C_int{4, 2, 17, 3}},\n\t{\"net.inet.udp.rootonly\", []_C_int{4, 2, 17, 6}},\n\t{\"net.inet.udp.sendspace\", []_C_int{4, 2, 17, 4}},\n\t{\"net.inet.udp.stats\", []_C_int{4, 2, 17, 5}},\n\t{\"net.inet6.divert.recvspace\", []_C_int{4, 24, 86, 1}},\n\t{\"net.inet6.divert.sendspace\", []_C_int{4, 24, 86, 2}},\n\t{\"net.inet6.divert.stats\", []_C_int{4, 24, 86, 3}},\n\t{\"net.inet6.icmp6.errppslimit\", []_C_int{4, 24, 30, 14}},\n\t{\"net.inet6.icmp6.mtudisc_hiwat\", []_C_int{4, 24, 30, 16}},\n\t{\"net.inet6.icmp6.mtudisc_lowat\", []_C_int{4, 24, 30, 17}},\n\t{\"net.inet6.icmp6.nd6_debug\", []_C_int{4, 24, 30, 18}},\n\t{\"net.inet6.icmp6.nd6_delay\", []_C_int{4, 24, 30, 8}},\n\t{\"net.inet6.icmp6.nd6_maxnudhint\", []_C_int{4, 24, 30, 15}},\n\t{\"net.inet6.icmp6.nd6_mmaxtries\", []_C_int{4, 24, 30, 10}},\n\t{\"net.inet6.icmp6.nd6_umaxtries\", []_C_int{4, 24, 30, 9}},\n\t{\"net.inet6.icmp6.redirtimeout\", []_C_int{4, 24, 30, 3}},\n\t{\"net.inet6.ip6.auto_flowlabel\", []_C_int{4, 24, 17, 17}},\n\t{\"net.inet6.ip6.dad_count\", []_C_int{4, 24, 17, 16}},\n\t{\"net.inet6.ip6.dad_pending\", []_C_int{4, 24, 17, 49}},\n\t{\"net.inet6.ip6.defmcasthlim\", []_C_int{4, 24, 17, 18}},\n\t{\"net.inet6.ip6.forwarding\", []_C_int{4, 24, 17, 1}},\n\t{\"net.inet6.ip6.forwsrcrt\", []_C_int{4, 24, 17, 5}},\n\t{\"net.inet6.ip6.hdrnestlimit\", []_C_int{4, 24, 17, 15}},\n\t{\"net.inet6.ip6.hlim\", []_C_int{4, 24, 17, 3}},\n\t{\"net.inet6.ip6.log_interval\", []_C_int{4, 24, 17, 14}},\n\t{\"net.inet6.ip6.maxdynroutes\", []_C_int{4, 24, 17, 48}},\n\t{\"net.inet6.ip6.maxfragpackets\", []_C_int{4, 24, 17, 9}},\n\t{\"net.inet6.ip6.maxfrags\", []_C_int{4, 24, 17, 41}},\n\t{\"net.inet6.ip6.mforwarding\", []_C_int{4, 24, 17, 42}},\n\t{\"net.inet6.ip6.mrtmfc\", []_C_int{4, 24, 17, 53}},\n\t{\"net.inet6.ip6.mrtmif\", []_C_int{4, 24, 17, 52}},\n\t{\"net.inet6.ip6.mrtproto\", []_C_int{4, 24, 17, 8}},\n\t{\"net.inet6.ip6.mtudisctimeout\", []_C_int{4, 24, 17, 50}},\n\t{\"net.inet6.ip6.multicast_mtudisc\", []_C_int{4, 24, 17, 44}},\n\t{\"net.inet6.ip6.multipath\", []_C_int{4, 24, 17, 43}},\n\t{\"net.inet6.ip6.neighborgcthresh\", []_C_int{4, 24, 17, 45}},\n\t{\"net.inet6.ip6.redirect\", []_C_int{4, 24, 17, 2}},\n\t{\"net.inet6.ip6.soiikey\", []_C_int{4, 24, 17, 54}},\n\t{\"net.inet6.ip6.sourcecheck\", []_C_int{4, 24, 17, 10}},\n\t{\"net.inet6.ip6.sourcecheck_logint\", []_C_int{4, 24, 17, 11}},\n\t{\"net.inet6.ip6.use_deprecated\", []_C_int{4, 24, 17, 21}},\n\t{\"net.key.sadb_dump\", []_C_int{4, 30, 1}},\n\t{\"net.key.spd_dump\", []_C_int{4, 30, 2}},\n\t{\"net.mpls.ifq.congestion\", []_C_int{4, 33, 3, 4}},\n\t{\"net.mpls.ifq.drops\", []_C_int{4, 33, 3, 3}},\n\t{\"net.mpls.ifq.len\", []_C_int{4, 33, 3, 1}},\n\t{\"net.mpls.ifq.maxlen\", []_C_int{4, 33, 3, 2}},\n\t{\"net.mpls.mapttl_ip\", []_C_int{4, 33, 5}},\n\t{\"net.mpls.mapttl_ip6\", []_C_int{4, 33, 6}},\n\t{\"net.mpls.maxloop_inkernel\", []_C_int{4, 33, 4}},\n\t{\"net.mpls.ttl\", []_C_int{4, 33, 2}},\n\t{\"net.pflow.stats\", []_C_int{4, 34, 1}},\n\t{\"net.pipex.enable\", []_C_int{4, 35, 1}},\n\t{\"vm.anonmin\", []_C_int{2, 7}},\n\t{\"vm.loadavg\", []_C_int{2, 2}},\n\t{\"vm.maxslp\", []_C_int{2, 10}},\n\t{\"vm.nkmempages\", []_C_int{2, 6}},\n\t{\"vm.psstrings\", []_C_int{2, 3}},\n\t{\"vm.swapencrypt.enable\", []_C_int{2, 5, 0}},\n\t{\"vm.swapencrypt.keyscreated\", []_C_int{2, 5, 1}},\n\t{\"vm.swapencrypt.keysdeleted\", []_C_int{2, 5, 2}},\n\t{\"vm.uspace\", []_C_int{2, 11}},\n\t{\"vm.uvmexp\", []_C_int{2, 4}},\n\t{\"vm.vmmeter\", []_C_int{2, 1}},\n\t{\"vm.vnodemin\", []_C_int{2, 9}},\n\t{\"vm.vtextmin\", []_C_int{2, 8}},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm.go",
    "content": "// go run mksysctl_openbsd.go\n// Code generated by the command above; DO NOT EDIT.\n\n// +build arm,openbsd\n\npackage unix\n\ntype mibentry struct {\n\tctlname string\n\tctloid  []_C_int\n}\n\nvar sysctlMib = []mibentry{\n\t{\"ddb.console\", []_C_int{9, 6}},\n\t{\"ddb.log\", []_C_int{9, 7}},\n\t{\"ddb.max_line\", []_C_int{9, 3}},\n\t{\"ddb.max_width\", []_C_int{9, 2}},\n\t{\"ddb.panic\", []_C_int{9, 5}},\n\t{\"ddb.radix\", []_C_int{9, 1}},\n\t{\"ddb.tab_stop_width\", []_C_int{9, 4}},\n\t{\"ddb.trigger\", []_C_int{9, 8}},\n\t{\"fs.posix.setuid\", []_C_int{3, 1, 1}},\n\t{\"hw.allowpowerdown\", []_C_int{6, 22}},\n\t{\"hw.byteorder\", []_C_int{6, 4}},\n\t{\"hw.cpuspeed\", []_C_int{6, 12}},\n\t{\"hw.diskcount\", []_C_int{6, 10}},\n\t{\"hw.disknames\", []_C_int{6, 8}},\n\t{\"hw.diskstats\", []_C_int{6, 9}},\n\t{\"hw.machine\", []_C_int{6, 1}},\n\t{\"hw.model\", []_C_int{6, 2}},\n\t{\"hw.ncpu\", []_C_int{6, 3}},\n\t{\"hw.ncpufound\", []_C_int{6, 21}},\n\t{\"hw.pagesize\", []_C_int{6, 7}},\n\t{\"hw.physmem\", []_C_int{6, 19}},\n\t{\"hw.product\", []_C_int{6, 15}},\n\t{\"hw.serialno\", []_C_int{6, 17}},\n\t{\"hw.setperf\", []_C_int{6, 13}},\n\t{\"hw.usermem\", []_C_int{6, 20}},\n\t{\"hw.uuid\", []_C_int{6, 18}},\n\t{\"hw.vendor\", []_C_int{6, 14}},\n\t{\"hw.version\", []_C_int{6, 16}},\n\t{\"kern.arandom\", []_C_int{1, 37}},\n\t{\"kern.argmax\", []_C_int{1, 8}},\n\t{\"kern.boottime\", []_C_int{1, 21}},\n\t{\"kern.bufcachepercent\", []_C_int{1, 72}},\n\t{\"kern.ccpu\", []_C_int{1, 45}},\n\t{\"kern.clockrate\", []_C_int{1, 12}},\n\t{\"kern.consdev\", []_C_int{1, 75}},\n\t{\"kern.cp_time\", []_C_int{1, 40}},\n\t{\"kern.cp_time2\", []_C_int{1, 71}},\n\t{\"kern.cryptodevallowsoft\", []_C_int{1, 53}},\n\t{\"kern.domainname\", []_C_int{1, 22}},\n\t{\"kern.file\", []_C_int{1, 73}},\n\t{\"kern.forkstat\", []_C_int{1, 42}},\n\t{\"kern.fscale\", []_C_int{1, 46}},\n\t{\"kern.fsync\", []_C_int{1, 33}},\n\t{\"kern.hostid\", []_C_int{1, 11}},\n\t{\"kern.hostname\", []_C_int{1, 10}},\n\t{\"kern.intrcnt.nintrcnt\", []_C_int{1, 63, 1}},\n\t{\"kern.job_control\", []_C_int{1, 19}},\n\t{\"kern.malloc.buckets\", []_C_int{1, 39, 1}},\n\t{\"kern.malloc.kmemnames\", []_C_int{1, 39, 3}},\n\t{\"kern.maxclusters\", []_C_int{1, 67}},\n\t{\"kern.maxfiles\", []_C_int{1, 7}},\n\t{\"kern.maxlocksperuid\", []_C_int{1, 70}},\n\t{\"kern.maxpartitions\", []_C_int{1, 23}},\n\t{\"kern.maxproc\", []_C_int{1, 6}},\n\t{\"kern.maxthread\", []_C_int{1, 25}},\n\t{\"kern.maxvnodes\", []_C_int{1, 5}},\n\t{\"kern.mbstat\", []_C_int{1, 59}},\n\t{\"kern.msgbuf\", []_C_int{1, 48}},\n\t{\"kern.msgbufsize\", []_C_int{1, 38}},\n\t{\"kern.nchstats\", []_C_int{1, 41}},\n\t{\"kern.netlivelocks\", []_C_int{1, 76}},\n\t{\"kern.nfiles\", []_C_int{1, 56}},\n\t{\"kern.ngroups\", []_C_int{1, 18}},\n\t{\"kern.nosuidcoredump\", []_C_int{1, 32}},\n\t{\"kern.nprocs\", []_C_int{1, 47}},\n\t{\"kern.nselcoll\", []_C_int{1, 43}},\n\t{\"kern.nthreads\", []_C_int{1, 26}},\n\t{\"kern.numvnodes\", []_C_int{1, 58}},\n\t{\"kern.osrelease\", []_C_int{1, 2}},\n\t{\"kern.osrevision\", []_C_int{1, 3}},\n\t{\"kern.ostype\", []_C_int{1, 1}},\n\t{\"kern.osversion\", []_C_int{1, 27}},\n\t{\"kern.pool_debug\", []_C_int{1, 77}},\n\t{\"kern.posix1version\", []_C_int{1, 17}},\n\t{\"kern.proc\", []_C_int{1, 66}},\n\t{\"kern.random\", []_C_int{1, 31}},\n\t{\"kern.rawpartition\", []_C_int{1, 24}},\n\t{\"kern.saved_ids\", []_C_int{1, 20}},\n\t{\"kern.securelevel\", []_C_int{1, 9}},\n\t{\"kern.seminfo\", []_C_int{1, 61}},\n\t{\"kern.shminfo\", []_C_int{1, 62}},\n\t{\"kern.somaxconn\", []_C_int{1, 28}},\n\t{\"kern.sominconn\", []_C_int{1, 29}},\n\t{\"kern.splassert\", []_C_int{1, 54}},\n\t{\"kern.stackgap_random\", []_C_int{1, 50}},\n\t{\"kern.sysvipc_info\", []_C_int{1, 51}},\n\t{\"kern.sysvmsg\", []_C_int{1, 34}},\n\t{\"kern.sysvsem\", []_C_int{1, 35}},\n\t{\"kern.sysvshm\", []_C_int{1, 36}},\n\t{\"kern.timecounter.choice\", []_C_int{1, 69, 4}},\n\t{\"kern.timecounter.hardware\", []_C_int{1, 69, 3}},\n\t{\"kern.timecounter.tick\", []_C_int{1, 69, 1}},\n\t{\"kern.timecounter.timestepwarnings\", []_C_int{1, 69, 2}},\n\t{\"kern.tty.maxptys\", []_C_int{1, 44, 6}},\n\t{\"kern.tty.nptys\", []_C_int{1, 44, 7}},\n\t{\"kern.tty.tk_cancc\", []_C_int{1, 44, 4}},\n\t{\"kern.tty.tk_nin\", []_C_int{1, 44, 1}},\n\t{\"kern.tty.tk_nout\", []_C_int{1, 44, 2}},\n\t{\"kern.tty.tk_rawcc\", []_C_int{1, 44, 3}},\n\t{\"kern.tty.ttyinfo\", []_C_int{1, 44, 5}},\n\t{\"kern.ttycount\", []_C_int{1, 57}},\n\t{\"kern.userasymcrypto\", []_C_int{1, 60}},\n\t{\"kern.usercrypto\", []_C_int{1, 52}},\n\t{\"kern.usermount\", []_C_int{1, 30}},\n\t{\"kern.version\", []_C_int{1, 4}},\n\t{\"kern.vnode\", []_C_int{1, 13}},\n\t{\"kern.watchdog.auto\", []_C_int{1, 64, 2}},\n\t{\"kern.watchdog.period\", []_C_int{1, 64, 1}},\n\t{\"net.bpf.bufsize\", []_C_int{4, 31, 1}},\n\t{\"net.bpf.maxbufsize\", []_C_int{4, 31, 2}},\n\t{\"net.inet.ah.enable\", []_C_int{4, 2, 51, 1}},\n\t{\"net.inet.ah.stats\", []_C_int{4, 2, 51, 2}},\n\t{\"net.inet.carp.allow\", []_C_int{4, 2, 112, 1}},\n\t{\"net.inet.carp.log\", []_C_int{4, 2, 112, 3}},\n\t{\"net.inet.carp.preempt\", []_C_int{4, 2, 112, 2}},\n\t{\"net.inet.carp.stats\", []_C_int{4, 2, 112, 4}},\n\t{\"net.inet.divert.recvspace\", []_C_int{4, 2, 258, 1}},\n\t{\"net.inet.divert.sendspace\", []_C_int{4, 2, 258, 2}},\n\t{\"net.inet.divert.stats\", []_C_int{4, 2, 258, 3}},\n\t{\"net.inet.esp.enable\", []_C_int{4, 2, 50, 1}},\n\t{\"net.inet.esp.stats\", []_C_int{4, 2, 50, 4}},\n\t{\"net.inet.esp.udpencap\", []_C_int{4, 2, 50, 2}},\n\t{\"net.inet.esp.udpencap_port\", []_C_int{4, 2, 50, 3}},\n\t{\"net.inet.etherip.allow\", []_C_int{4, 2, 97, 1}},\n\t{\"net.inet.etherip.stats\", []_C_int{4, 2, 97, 2}},\n\t{\"net.inet.gre.allow\", []_C_int{4, 2, 47, 1}},\n\t{\"net.inet.gre.wccp\", []_C_int{4, 2, 47, 2}},\n\t{\"net.inet.icmp.bmcastecho\", []_C_int{4, 2, 1, 2}},\n\t{\"net.inet.icmp.errppslimit\", []_C_int{4, 2, 1, 3}},\n\t{\"net.inet.icmp.maskrepl\", []_C_int{4, 2, 1, 1}},\n\t{\"net.inet.icmp.rediraccept\", []_C_int{4, 2, 1, 4}},\n\t{\"net.inet.icmp.redirtimeout\", []_C_int{4, 2, 1, 5}},\n\t{\"net.inet.icmp.stats\", []_C_int{4, 2, 1, 7}},\n\t{\"net.inet.icmp.tstamprepl\", []_C_int{4, 2, 1, 6}},\n\t{\"net.inet.igmp.stats\", []_C_int{4, 2, 2, 1}},\n\t{\"net.inet.ip.arpqueued\", []_C_int{4, 2, 0, 36}},\n\t{\"net.inet.ip.encdebug\", []_C_int{4, 2, 0, 12}},\n\t{\"net.inet.ip.forwarding\", []_C_int{4, 2, 0, 1}},\n\t{\"net.inet.ip.ifq.congestion\", []_C_int{4, 2, 0, 30, 4}},\n\t{\"net.inet.ip.ifq.drops\", []_C_int{4, 2, 0, 30, 3}},\n\t{\"net.inet.ip.ifq.len\", []_C_int{4, 2, 0, 30, 1}},\n\t{\"net.inet.ip.ifq.maxlen\", []_C_int{4, 2, 0, 30, 2}},\n\t{\"net.inet.ip.maxqueue\", []_C_int{4, 2, 0, 11}},\n\t{\"net.inet.ip.mforwarding\", []_C_int{4, 2, 0, 31}},\n\t{\"net.inet.ip.mrtproto\", []_C_int{4, 2, 0, 34}},\n\t{\"net.inet.ip.mrtstats\", []_C_int{4, 2, 0, 35}},\n\t{\"net.inet.ip.mtu\", []_C_int{4, 2, 0, 4}},\n\t{\"net.inet.ip.mtudisc\", []_C_int{4, 2, 0, 27}},\n\t{\"net.inet.ip.mtudisctimeout\", []_C_int{4, 2, 0, 28}},\n\t{\"net.inet.ip.multipath\", []_C_int{4, 2, 0, 32}},\n\t{\"net.inet.ip.portfirst\", []_C_int{4, 2, 0, 7}},\n\t{\"net.inet.ip.porthifirst\", []_C_int{4, 2, 0, 9}},\n\t{\"net.inet.ip.porthilast\", []_C_int{4, 2, 0, 10}},\n\t{\"net.inet.ip.portlast\", []_C_int{4, 2, 0, 8}},\n\t{\"net.inet.ip.redirect\", []_C_int{4, 2, 0, 2}},\n\t{\"net.inet.ip.sourceroute\", []_C_int{4, 2, 0, 5}},\n\t{\"net.inet.ip.stats\", []_C_int{4, 2, 0, 33}},\n\t{\"net.inet.ip.ttl\", []_C_int{4, 2, 0, 3}},\n\t{\"net.inet.ipcomp.enable\", []_C_int{4, 2, 108, 1}},\n\t{\"net.inet.ipcomp.stats\", []_C_int{4, 2, 108, 2}},\n\t{\"net.inet.ipip.allow\", []_C_int{4, 2, 4, 1}},\n\t{\"net.inet.ipip.stats\", []_C_int{4, 2, 4, 2}},\n\t{\"net.inet.mobileip.allow\", []_C_int{4, 2, 55, 1}},\n\t{\"net.inet.pfsync.stats\", []_C_int{4, 2, 240, 1}},\n\t{\"net.inet.pim.stats\", []_C_int{4, 2, 103, 1}},\n\t{\"net.inet.tcp.ackonpush\", []_C_int{4, 2, 6, 13}},\n\t{\"net.inet.tcp.always_keepalive\", []_C_int{4, 2, 6, 22}},\n\t{\"net.inet.tcp.baddynamic\", []_C_int{4, 2, 6, 6}},\n\t{\"net.inet.tcp.drop\", []_C_int{4, 2, 6, 19}},\n\t{\"net.inet.tcp.ecn\", []_C_int{4, 2, 6, 14}},\n\t{\"net.inet.tcp.ident\", []_C_int{4, 2, 6, 9}},\n\t{\"net.inet.tcp.keepidle\", []_C_int{4, 2, 6, 3}},\n\t{\"net.inet.tcp.keepinittime\", []_C_int{4, 2, 6, 2}},\n\t{\"net.inet.tcp.keepintvl\", []_C_int{4, 2, 6, 4}},\n\t{\"net.inet.tcp.mssdflt\", []_C_int{4, 2, 6, 11}},\n\t{\"net.inet.tcp.reasslimit\", []_C_int{4, 2, 6, 18}},\n\t{\"net.inet.tcp.rfc1323\", []_C_int{4, 2, 6, 1}},\n\t{\"net.inet.tcp.rfc3390\", []_C_int{4, 2, 6, 17}},\n\t{\"net.inet.tcp.rstppslimit\", []_C_int{4, 2, 6, 12}},\n\t{\"net.inet.tcp.sack\", []_C_int{4, 2, 6, 10}},\n\t{\"net.inet.tcp.sackholelimit\", []_C_int{4, 2, 6, 20}},\n\t{\"net.inet.tcp.slowhz\", []_C_int{4, 2, 6, 5}},\n\t{\"net.inet.tcp.stats\", []_C_int{4, 2, 6, 21}},\n\t{\"net.inet.tcp.synbucketlimit\", []_C_int{4, 2, 6, 16}},\n\t{\"net.inet.tcp.syncachelimit\", []_C_int{4, 2, 6, 15}},\n\t{\"net.inet.udp.baddynamic\", []_C_int{4, 2, 17, 2}},\n\t{\"net.inet.udp.checksum\", []_C_int{4, 2, 17, 1}},\n\t{\"net.inet.udp.recvspace\", []_C_int{4, 2, 17, 3}},\n\t{\"net.inet.udp.sendspace\", []_C_int{4, 2, 17, 4}},\n\t{\"net.inet.udp.stats\", []_C_int{4, 2, 17, 5}},\n\t{\"net.inet6.divert.recvspace\", []_C_int{4, 24, 86, 1}},\n\t{\"net.inet6.divert.sendspace\", []_C_int{4, 24, 86, 2}},\n\t{\"net.inet6.divert.stats\", []_C_int{4, 24, 86, 3}},\n\t{\"net.inet6.icmp6.errppslimit\", []_C_int{4, 24, 30, 14}},\n\t{\"net.inet6.icmp6.mtudisc_hiwat\", []_C_int{4, 24, 30, 16}},\n\t{\"net.inet6.icmp6.mtudisc_lowat\", []_C_int{4, 24, 30, 17}},\n\t{\"net.inet6.icmp6.nd6_debug\", []_C_int{4, 24, 30, 18}},\n\t{\"net.inet6.icmp6.nd6_delay\", []_C_int{4, 24, 30, 8}},\n\t{\"net.inet6.icmp6.nd6_maxnudhint\", []_C_int{4, 24, 30, 15}},\n\t{\"net.inet6.icmp6.nd6_mmaxtries\", []_C_int{4, 24, 30, 10}},\n\t{\"net.inet6.icmp6.nd6_prune\", []_C_int{4, 24, 30, 6}},\n\t{\"net.inet6.icmp6.nd6_umaxtries\", []_C_int{4, 24, 30, 9}},\n\t{\"net.inet6.icmp6.nd6_useloopback\", []_C_int{4, 24, 30, 11}},\n\t{\"net.inet6.icmp6.nodeinfo\", []_C_int{4, 24, 30, 13}},\n\t{\"net.inet6.icmp6.rediraccept\", []_C_int{4, 24, 30, 2}},\n\t{\"net.inet6.icmp6.redirtimeout\", []_C_int{4, 24, 30, 3}},\n\t{\"net.inet6.ip6.accept_rtadv\", []_C_int{4, 24, 17, 12}},\n\t{\"net.inet6.ip6.auto_flowlabel\", []_C_int{4, 24, 17, 17}},\n\t{\"net.inet6.ip6.dad_count\", []_C_int{4, 24, 17, 16}},\n\t{\"net.inet6.ip6.dad_pending\", []_C_int{4, 24, 17, 49}},\n\t{\"net.inet6.ip6.defmcasthlim\", []_C_int{4, 24, 17, 18}},\n\t{\"net.inet6.ip6.forwarding\", []_C_int{4, 24, 17, 1}},\n\t{\"net.inet6.ip6.forwsrcrt\", []_C_int{4, 24, 17, 5}},\n\t{\"net.inet6.ip6.hdrnestlimit\", []_C_int{4, 24, 17, 15}},\n\t{\"net.inet6.ip6.hlim\", []_C_int{4, 24, 17, 3}},\n\t{\"net.inet6.ip6.log_interval\", []_C_int{4, 24, 17, 14}},\n\t{\"net.inet6.ip6.maxdynroutes\", []_C_int{4, 24, 17, 48}},\n\t{\"net.inet6.ip6.maxfragpackets\", []_C_int{4, 24, 17, 9}},\n\t{\"net.inet6.ip6.maxfrags\", []_C_int{4, 24, 17, 41}},\n\t{\"net.inet6.ip6.maxifdefrouters\", []_C_int{4, 24, 17, 47}},\n\t{\"net.inet6.ip6.maxifprefixes\", []_C_int{4, 24, 17, 46}},\n\t{\"net.inet6.ip6.mforwarding\", []_C_int{4, 24, 17, 42}},\n\t{\"net.inet6.ip6.mrtproto\", []_C_int{4, 24, 17, 8}},\n\t{\"net.inet6.ip6.mtudisctimeout\", []_C_int{4, 24, 17, 50}},\n\t{\"net.inet6.ip6.multicast_mtudisc\", []_C_int{4, 24, 17, 44}},\n\t{\"net.inet6.ip6.multipath\", []_C_int{4, 24, 17, 43}},\n\t{\"net.inet6.ip6.neighborgcthresh\", []_C_int{4, 24, 17, 45}},\n\t{\"net.inet6.ip6.redirect\", []_C_int{4, 24, 17, 2}},\n\t{\"net.inet6.ip6.rr_prune\", []_C_int{4, 24, 17, 22}},\n\t{\"net.inet6.ip6.sourcecheck\", []_C_int{4, 24, 17, 10}},\n\t{\"net.inet6.ip6.sourcecheck_logint\", []_C_int{4, 24, 17, 11}},\n\t{\"net.inet6.ip6.use_deprecated\", []_C_int{4, 24, 17, 21}},\n\t{\"net.inet6.ip6.v6only\", []_C_int{4, 24, 17, 24}},\n\t{\"net.key.sadb_dump\", []_C_int{4, 30, 1}},\n\t{\"net.key.spd_dump\", []_C_int{4, 30, 2}},\n\t{\"net.mpls.ifq.congestion\", []_C_int{4, 33, 3, 4}},\n\t{\"net.mpls.ifq.drops\", []_C_int{4, 33, 3, 3}},\n\t{\"net.mpls.ifq.len\", []_C_int{4, 33, 3, 1}},\n\t{\"net.mpls.ifq.maxlen\", []_C_int{4, 33, 3, 2}},\n\t{\"net.mpls.mapttl_ip\", []_C_int{4, 33, 5}},\n\t{\"net.mpls.mapttl_ip6\", []_C_int{4, 33, 6}},\n\t{\"net.mpls.maxloop_inkernel\", []_C_int{4, 33, 4}},\n\t{\"net.mpls.ttl\", []_C_int{4, 33, 2}},\n\t{\"net.pflow.stats\", []_C_int{4, 34, 1}},\n\t{\"net.pipex.enable\", []_C_int{4, 35, 1}},\n\t{\"vm.anonmin\", []_C_int{2, 7}},\n\t{\"vm.loadavg\", []_C_int{2, 2}},\n\t{\"vm.maxslp\", []_C_int{2, 10}},\n\t{\"vm.nkmempages\", []_C_int{2, 6}},\n\t{\"vm.psstrings\", []_C_int{2, 3}},\n\t{\"vm.swapencrypt.enable\", []_C_int{2, 5, 0}},\n\t{\"vm.swapencrypt.keyscreated\", []_C_int{2, 5, 1}},\n\t{\"vm.swapencrypt.keysdeleted\", []_C_int{2, 5, 2}},\n\t{\"vm.uspace\", []_C_int{2, 11}},\n\t{\"vm.uvmexp\", []_C_int{2, 4}},\n\t{\"vm.vmmeter\", []_C_int{2, 1}},\n\t{\"vm.vnodemin\", []_C_int{2, 9}},\n\t{\"vm.vtextmin\", []_C_int{2, 8}},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm64.go",
    "content": "// go run mksysctl_openbsd.go\n// Code generated by the command above; DO NOT EDIT.\n\n// +build arm64,openbsd\n\npackage unix\n\ntype mibentry struct {\n\tctlname string\n\tctloid  []_C_int\n}\n\nvar sysctlMib = []mibentry{\n\t{\"ddb.console\", []_C_int{9, 6}},\n\t{\"ddb.log\", []_C_int{9, 7}},\n\t{\"ddb.max_line\", []_C_int{9, 3}},\n\t{\"ddb.max_width\", []_C_int{9, 2}},\n\t{\"ddb.panic\", []_C_int{9, 5}},\n\t{\"ddb.profile\", []_C_int{9, 9}},\n\t{\"ddb.radix\", []_C_int{9, 1}},\n\t{\"ddb.tab_stop_width\", []_C_int{9, 4}},\n\t{\"ddb.trigger\", []_C_int{9, 8}},\n\t{\"fs.posix.setuid\", []_C_int{3, 1, 1}},\n\t{\"hw.allowpowerdown\", []_C_int{6, 22}},\n\t{\"hw.byteorder\", []_C_int{6, 4}},\n\t{\"hw.cpuspeed\", []_C_int{6, 12}},\n\t{\"hw.diskcount\", []_C_int{6, 10}},\n\t{\"hw.disknames\", []_C_int{6, 8}},\n\t{\"hw.diskstats\", []_C_int{6, 9}},\n\t{\"hw.machine\", []_C_int{6, 1}},\n\t{\"hw.model\", []_C_int{6, 2}},\n\t{\"hw.ncpu\", []_C_int{6, 3}},\n\t{\"hw.ncpufound\", []_C_int{6, 21}},\n\t{\"hw.ncpuonline\", []_C_int{6, 25}},\n\t{\"hw.pagesize\", []_C_int{6, 7}},\n\t{\"hw.perfpolicy\", []_C_int{6, 23}},\n\t{\"hw.physmem\", []_C_int{6, 19}},\n\t{\"hw.product\", []_C_int{6, 15}},\n\t{\"hw.serialno\", []_C_int{6, 17}},\n\t{\"hw.setperf\", []_C_int{6, 13}},\n\t{\"hw.smt\", []_C_int{6, 24}},\n\t{\"hw.usermem\", []_C_int{6, 20}},\n\t{\"hw.uuid\", []_C_int{6, 18}},\n\t{\"hw.vendor\", []_C_int{6, 14}},\n\t{\"hw.version\", []_C_int{6, 16}},\n\t{\"kern.allowkmem\", []_C_int{1, 52}},\n\t{\"kern.argmax\", []_C_int{1, 8}},\n\t{\"kern.audio\", []_C_int{1, 84}},\n\t{\"kern.boottime\", []_C_int{1, 21}},\n\t{\"kern.bufcachepercent\", []_C_int{1, 72}},\n\t{\"kern.ccpu\", []_C_int{1, 45}},\n\t{\"kern.clockrate\", []_C_int{1, 12}},\n\t{\"kern.consdev\", []_C_int{1, 75}},\n\t{\"kern.cp_time\", []_C_int{1, 40}},\n\t{\"kern.cp_time2\", []_C_int{1, 71}},\n\t{\"kern.cpustats\", []_C_int{1, 85}},\n\t{\"kern.domainname\", []_C_int{1, 22}},\n\t{\"kern.file\", []_C_int{1, 73}},\n\t{\"kern.forkstat\", []_C_int{1, 42}},\n\t{\"kern.fscale\", []_C_int{1, 46}},\n\t{\"kern.fsync\", []_C_int{1, 33}},\n\t{\"kern.global_ptrace\", []_C_int{1, 81}},\n\t{\"kern.hostid\", []_C_int{1, 11}},\n\t{\"kern.hostname\", []_C_int{1, 10}},\n\t{\"kern.intrcnt.nintrcnt\", []_C_int{1, 63, 1}},\n\t{\"kern.job_control\", []_C_int{1, 19}},\n\t{\"kern.malloc.buckets\", []_C_int{1, 39, 1}},\n\t{\"kern.malloc.kmemnames\", []_C_int{1, 39, 3}},\n\t{\"kern.maxclusters\", []_C_int{1, 67}},\n\t{\"kern.maxfiles\", []_C_int{1, 7}},\n\t{\"kern.maxlocksperuid\", []_C_int{1, 70}},\n\t{\"kern.maxpartitions\", []_C_int{1, 23}},\n\t{\"kern.maxproc\", []_C_int{1, 6}},\n\t{\"kern.maxthread\", []_C_int{1, 25}},\n\t{\"kern.maxvnodes\", []_C_int{1, 5}},\n\t{\"kern.mbstat\", []_C_int{1, 59}},\n\t{\"kern.msgbuf\", []_C_int{1, 48}},\n\t{\"kern.msgbufsize\", []_C_int{1, 38}},\n\t{\"kern.nchstats\", []_C_int{1, 41}},\n\t{\"kern.netlivelocks\", []_C_int{1, 76}},\n\t{\"kern.nfiles\", []_C_int{1, 56}},\n\t{\"kern.ngroups\", []_C_int{1, 18}},\n\t{\"kern.nosuidcoredump\", []_C_int{1, 32}},\n\t{\"kern.nprocs\", []_C_int{1, 47}},\n\t{\"kern.nselcoll\", []_C_int{1, 43}},\n\t{\"kern.nthreads\", []_C_int{1, 26}},\n\t{\"kern.numvnodes\", []_C_int{1, 58}},\n\t{\"kern.osrelease\", []_C_int{1, 2}},\n\t{\"kern.osrevision\", []_C_int{1, 3}},\n\t{\"kern.ostype\", []_C_int{1, 1}},\n\t{\"kern.osversion\", []_C_int{1, 27}},\n\t{\"kern.pool_debug\", []_C_int{1, 77}},\n\t{\"kern.posix1version\", []_C_int{1, 17}},\n\t{\"kern.proc\", []_C_int{1, 66}},\n\t{\"kern.rawpartition\", []_C_int{1, 24}},\n\t{\"kern.saved_ids\", []_C_int{1, 20}},\n\t{\"kern.securelevel\", []_C_int{1, 9}},\n\t{\"kern.seminfo\", []_C_int{1, 61}},\n\t{\"kern.shminfo\", []_C_int{1, 62}},\n\t{\"kern.somaxconn\", []_C_int{1, 28}},\n\t{\"kern.sominconn\", []_C_int{1, 29}},\n\t{\"kern.splassert\", []_C_int{1, 54}},\n\t{\"kern.stackgap_random\", []_C_int{1, 50}},\n\t{\"kern.sysvipc_info\", []_C_int{1, 51}},\n\t{\"kern.sysvmsg\", []_C_int{1, 34}},\n\t{\"kern.sysvsem\", []_C_int{1, 35}},\n\t{\"kern.sysvshm\", []_C_int{1, 36}},\n\t{\"kern.timecounter.choice\", []_C_int{1, 69, 4}},\n\t{\"kern.timecounter.hardware\", []_C_int{1, 69, 3}},\n\t{\"kern.timecounter.tick\", []_C_int{1, 69, 1}},\n\t{\"kern.timecounter.timestepwarnings\", []_C_int{1, 69, 2}},\n\t{\"kern.tty.tk_cancc\", []_C_int{1, 44, 4}},\n\t{\"kern.tty.tk_nin\", []_C_int{1, 44, 1}},\n\t{\"kern.tty.tk_nout\", []_C_int{1, 44, 2}},\n\t{\"kern.tty.tk_rawcc\", []_C_int{1, 44, 3}},\n\t{\"kern.tty.ttyinfo\", []_C_int{1, 44, 5}},\n\t{\"kern.ttycount\", []_C_int{1, 57}},\n\t{\"kern.version\", []_C_int{1, 4}},\n\t{\"kern.watchdog.auto\", []_C_int{1, 64, 2}},\n\t{\"kern.watchdog.period\", []_C_int{1, 64, 1}},\n\t{\"kern.witnesswatch\", []_C_int{1, 53}},\n\t{\"kern.wxabort\", []_C_int{1, 74}},\n\t{\"net.bpf.bufsize\", []_C_int{4, 31, 1}},\n\t{\"net.bpf.maxbufsize\", []_C_int{4, 31, 2}},\n\t{\"net.inet.ah.enable\", []_C_int{4, 2, 51, 1}},\n\t{\"net.inet.ah.stats\", []_C_int{4, 2, 51, 2}},\n\t{\"net.inet.carp.allow\", []_C_int{4, 2, 112, 1}},\n\t{\"net.inet.carp.log\", []_C_int{4, 2, 112, 3}},\n\t{\"net.inet.carp.preempt\", []_C_int{4, 2, 112, 2}},\n\t{\"net.inet.carp.stats\", []_C_int{4, 2, 112, 4}},\n\t{\"net.inet.divert.recvspace\", []_C_int{4, 2, 258, 1}},\n\t{\"net.inet.divert.sendspace\", []_C_int{4, 2, 258, 2}},\n\t{\"net.inet.divert.stats\", []_C_int{4, 2, 258, 3}},\n\t{\"net.inet.esp.enable\", []_C_int{4, 2, 50, 1}},\n\t{\"net.inet.esp.stats\", []_C_int{4, 2, 50, 4}},\n\t{\"net.inet.esp.udpencap\", []_C_int{4, 2, 50, 2}},\n\t{\"net.inet.esp.udpencap_port\", []_C_int{4, 2, 50, 3}},\n\t{\"net.inet.etherip.allow\", []_C_int{4, 2, 97, 1}},\n\t{\"net.inet.etherip.stats\", []_C_int{4, 2, 97, 2}},\n\t{\"net.inet.gre.allow\", []_C_int{4, 2, 47, 1}},\n\t{\"net.inet.gre.wccp\", []_C_int{4, 2, 47, 2}},\n\t{\"net.inet.icmp.bmcastecho\", []_C_int{4, 2, 1, 2}},\n\t{\"net.inet.icmp.errppslimit\", []_C_int{4, 2, 1, 3}},\n\t{\"net.inet.icmp.maskrepl\", []_C_int{4, 2, 1, 1}},\n\t{\"net.inet.icmp.rediraccept\", []_C_int{4, 2, 1, 4}},\n\t{\"net.inet.icmp.redirtimeout\", []_C_int{4, 2, 1, 5}},\n\t{\"net.inet.icmp.stats\", []_C_int{4, 2, 1, 7}},\n\t{\"net.inet.icmp.tstamprepl\", []_C_int{4, 2, 1, 6}},\n\t{\"net.inet.igmp.stats\", []_C_int{4, 2, 2, 1}},\n\t{\"net.inet.ip.arpdown\", []_C_int{4, 2, 0, 40}},\n\t{\"net.inet.ip.arpqueued\", []_C_int{4, 2, 0, 36}},\n\t{\"net.inet.ip.arptimeout\", []_C_int{4, 2, 0, 39}},\n\t{\"net.inet.ip.encdebug\", []_C_int{4, 2, 0, 12}},\n\t{\"net.inet.ip.forwarding\", []_C_int{4, 2, 0, 1}},\n\t{\"net.inet.ip.ifq.congestion\", []_C_int{4, 2, 0, 30, 4}},\n\t{\"net.inet.ip.ifq.drops\", []_C_int{4, 2, 0, 30, 3}},\n\t{\"net.inet.ip.ifq.len\", []_C_int{4, 2, 0, 30, 1}},\n\t{\"net.inet.ip.ifq.maxlen\", []_C_int{4, 2, 0, 30, 2}},\n\t{\"net.inet.ip.maxqueue\", []_C_int{4, 2, 0, 11}},\n\t{\"net.inet.ip.mforwarding\", []_C_int{4, 2, 0, 31}},\n\t{\"net.inet.ip.mrtmfc\", []_C_int{4, 2, 0, 37}},\n\t{\"net.inet.ip.mrtproto\", []_C_int{4, 2, 0, 34}},\n\t{\"net.inet.ip.mrtstats\", []_C_int{4, 2, 0, 35}},\n\t{\"net.inet.ip.mrtvif\", []_C_int{4, 2, 0, 38}},\n\t{\"net.inet.ip.mtu\", []_C_int{4, 2, 0, 4}},\n\t{\"net.inet.ip.mtudisc\", []_C_int{4, 2, 0, 27}},\n\t{\"net.inet.ip.mtudisctimeout\", []_C_int{4, 2, 0, 28}},\n\t{\"net.inet.ip.multipath\", []_C_int{4, 2, 0, 32}},\n\t{\"net.inet.ip.portfirst\", []_C_int{4, 2, 0, 7}},\n\t{\"net.inet.ip.porthifirst\", []_C_int{4, 2, 0, 9}},\n\t{\"net.inet.ip.porthilast\", []_C_int{4, 2, 0, 10}},\n\t{\"net.inet.ip.portlast\", []_C_int{4, 2, 0, 8}},\n\t{\"net.inet.ip.redirect\", []_C_int{4, 2, 0, 2}},\n\t{\"net.inet.ip.sourceroute\", []_C_int{4, 2, 0, 5}},\n\t{\"net.inet.ip.stats\", []_C_int{4, 2, 0, 33}},\n\t{\"net.inet.ip.ttl\", []_C_int{4, 2, 0, 3}},\n\t{\"net.inet.ipcomp.enable\", []_C_int{4, 2, 108, 1}},\n\t{\"net.inet.ipcomp.stats\", []_C_int{4, 2, 108, 2}},\n\t{\"net.inet.ipip.allow\", []_C_int{4, 2, 4, 1}},\n\t{\"net.inet.ipip.stats\", []_C_int{4, 2, 4, 2}},\n\t{\"net.inet.mobileip.allow\", []_C_int{4, 2, 55, 1}},\n\t{\"net.inet.pfsync.stats\", []_C_int{4, 2, 240, 1}},\n\t{\"net.inet.tcp.ackonpush\", []_C_int{4, 2, 6, 13}},\n\t{\"net.inet.tcp.always_keepalive\", []_C_int{4, 2, 6, 22}},\n\t{\"net.inet.tcp.baddynamic\", []_C_int{4, 2, 6, 6}},\n\t{\"net.inet.tcp.drop\", []_C_int{4, 2, 6, 19}},\n\t{\"net.inet.tcp.ecn\", []_C_int{4, 2, 6, 14}},\n\t{\"net.inet.tcp.ident\", []_C_int{4, 2, 6, 9}},\n\t{\"net.inet.tcp.keepidle\", []_C_int{4, 2, 6, 3}},\n\t{\"net.inet.tcp.keepinittime\", []_C_int{4, 2, 6, 2}},\n\t{\"net.inet.tcp.keepintvl\", []_C_int{4, 2, 6, 4}},\n\t{\"net.inet.tcp.mssdflt\", []_C_int{4, 2, 6, 11}},\n\t{\"net.inet.tcp.reasslimit\", []_C_int{4, 2, 6, 18}},\n\t{\"net.inet.tcp.rfc1323\", []_C_int{4, 2, 6, 1}},\n\t{\"net.inet.tcp.rfc3390\", []_C_int{4, 2, 6, 17}},\n\t{\"net.inet.tcp.rootonly\", []_C_int{4, 2, 6, 24}},\n\t{\"net.inet.tcp.rstppslimit\", []_C_int{4, 2, 6, 12}},\n\t{\"net.inet.tcp.sack\", []_C_int{4, 2, 6, 10}},\n\t{\"net.inet.tcp.sackholelimit\", []_C_int{4, 2, 6, 20}},\n\t{\"net.inet.tcp.slowhz\", []_C_int{4, 2, 6, 5}},\n\t{\"net.inet.tcp.stats\", []_C_int{4, 2, 6, 21}},\n\t{\"net.inet.tcp.synbucketlimit\", []_C_int{4, 2, 6, 16}},\n\t{\"net.inet.tcp.syncachelimit\", []_C_int{4, 2, 6, 15}},\n\t{\"net.inet.tcp.synhashsize\", []_C_int{4, 2, 6, 25}},\n\t{\"net.inet.tcp.synuselimit\", []_C_int{4, 2, 6, 23}},\n\t{\"net.inet.udp.baddynamic\", []_C_int{4, 2, 17, 2}},\n\t{\"net.inet.udp.checksum\", []_C_int{4, 2, 17, 1}},\n\t{\"net.inet.udp.recvspace\", []_C_int{4, 2, 17, 3}},\n\t{\"net.inet.udp.rootonly\", []_C_int{4, 2, 17, 6}},\n\t{\"net.inet.udp.sendspace\", []_C_int{4, 2, 17, 4}},\n\t{\"net.inet.udp.stats\", []_C_int{4, 2, 17, 5}},\n\t{\"net.inet6.divert.recvspace\", []_C_int{4, 24, 86, 1}},\n\t{\"net.inet6.divert.sendspace\", []_C_int{4, 24, 86, 2}},\n\t{\"net.inet6.divert.stats\", []_C_int{4, 24, 86, 3}},\n\t{\"net.inet6.icmp6.errppslimit\", []_C_int{4, 24, 30, 14}},\n\t{\"net.inet6.icmp6.mtudisc_hiwat\", []_C_int{4, 24, 30, 16}},\n\t{\"net.inet6.icmp6.mtudisc_lowat\", []_C_int{4, 24, 30, 17}},\n\t{\"net.inet6.icmp6.nd6_debug\", []_C_int{4, 24, 30, 18}},\n\t{\"net.inet6.icmp6.nd6_delay\", []_C_int{4, 24, 30, 8}},\n\t{\"net.inet6.icmp6.nd6_maxnudhint\", []_C_int{4, 24, 30, 15}},\n\t{\"net.inet6.icmp6.nd6_mmaxtries\", []_C_int{4, 24, 30, 10}},\n\t{\"net.inet6.icmp6.nd6_umaxtries\", []_C_int{4, 24, 30, 9}},\n\t{\"net.inet6.icmp6.redirtimeout\", []_C_int{4, 24, 30, 3}},\n\t{\"net.inet6.ip6.auto_flowlabel\", []_C_int{4, 24, 17, 17}},\n\t{\"net.inet6.ip6.dad_count\", []_C_int{4, 24, 17, 16}},\n\t{\"net.inet6.ip6.dad_pending\", []_C_int{4, 24, 17, 49}},\n\t{\"net.inet6.ip6.defmcasthlim\", []_C_int{4, 24, 17, 18}},\n\t{\"net.inet6.ip6.forwarding\", []_C_int{4, 24, 17, 1}},\n\t{\"net.inet6.ip6.forwsrcrt\", []_C_int{4, 24, 17, 5}},\n\t{\"net.inet6.ip6.hdrnestlimit\", []_C_int{4, 24, 17, 15}},\n\t{\"net.inet6.ip6.hlim\", []_C_int{4, 24, 17, 3}},\n\t{\"net.inet6.ip6.log_interval\", []_C_int{4, 24, 17, 14}},\n\t{\"net.inet6.ip6.maxdynroutes\", []_C_int{4, 24, 17, 48}},\n\t{\"net.inet6.ip6.maxfragpackets\", []_C_int{4, 24, 17, 9}},\n\t{\"net.inet6.ip6.maxfrags\", []_C_int{4, 24, 17, 41}},\n\t{\"net.inet6.ip6.mforwarding\", []_C_int{4, 24, 17, 42}},\n\t{\"net.inet6.ip6.mrtmfc\", []_C_int{4, 24, 17, 53}},\n\t{\"net.inet6.ip6.mrtmif\", []_C_int{4, 24, 17, 52}},\n\t{\"net.inet6.ip6.mrtproto\", []_C_int{4, 24, 17, 8}},\n\t{\"net.inet6.ip6.mtudisctimeout\", []_C_int{4, 24, 17, 50}},\n\t{\"net.inet6.ip6.multicast_mtudisc\", []_C_int{4, 24, 17, 44}},\n\t{\"net.inet6.ip6.multipath\", []_C_int{4, 24, 17, 43}},\n\t{\"net.inet6.ip6.neighborgcthresh\", []_C_int{4, 24, 17, 45}},\n\t{\"net.inet6.ip6.redirect\", []_C_int{4, 24, 17, 2}},\n\t{\"net.inet6.ip6.soiikey\", []_C_int{4, 24, 17, 54}},\n\t{\"net.inet6.ip6.sourcecheck\", []_C_int{4, 24, 17, 10}},\n\t{\"net.inet6.ip6.sourcecheck_logint\", []_C_int{4, 24, 17, 11}},\n\t{\"net.inet6.ip6.use_deprecated\", []_C_int{4, 24, 17, 21}},\n\t{\"net.key.sadb_dump\", []_C_int{4, 30, 1}},\n\t{\"net.key.spd_dump\", []_C_int{4, 30, 2}},\n\t{\"net.mpls.ifq.congestion\", []_C_int{4, 33, 3, 4}},\n\t{\"net.mpls.ifq.drops\", []_C_int{4, 33, 3, 3}},\n\t{\"net.mpls.ifq.len\", []_C_int{4, 33, 3, 1}},\n\t{\"net.mpls.ifq.maxlen\", []_C_int{4, 33, 3, 2}},\n\t{\"net.mpls.mapttl_ip\", []_C_int{4, 33, 5}},\n\t{\"net.mpls.mapttl_ip6\", []_C_int{4, 33, 6}},\n\t{\"net.mpls.maxloop_inkernel\", []_C_int{4, 33, 4}},\n\t{\"net.mpls.ttl\", []_C_int{4, 33, 2}},\n\t{\"net.pflow.stats\", []_C_int{4, 34, 1}},\n\t{\"net.pipex.enable\", []_C_int{4, 35, 1}},\n\t{\"vm.anonmin\", []_C_int{2, 7}},\n\t{\"vm.loadavg\", []_C_int{2, 2}},\n\t{\"vm.malloc_conf\", []_C_int{2, 12}},\n\t{\"vm.maxslp\", []_C_int{2, 10}},\n\t{\"vm.nkmempages\", []_C_int{2, 6}},\n\t{\"vm.psstrings\", []_C_int{2, 3}},\n\t{\"vm.swapencrypt.enable\", []_C_int{2, 5, 0}},\n\t{\"vm.swapencrypt.keyscreated\", []_C_int{2, 5, 1}},\n\t{\"vm.swapencrypt.keysdeleted\", []_C_int{2, 5, 2}},\n\t{\"vm.uspace\", []_C_int{2, 11}},\n\t{\"vm.uvmexp\", []_C_int{2, 4}},\n\t{\"vm.vmmeter\", []_C_int{2, 1}},\n\t{\"vm.vnodemin\", []_C_int{2, 9}},\n\t{\"vm.vtextmin\", []_C_int{2, 8}},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_darwin_386.go",
    "content": "// go run mksysnum.go /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/usr/include/sys/syscall.h\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build 386,darwin\n\npackage unix\n\nconst (\n\tSYS_SYSCALL                        = 0\n\tSYS_EXIT                           = 1\n\tSYS_FORK                           = 2\n\tSYS_READ                           = 3\n\tSYS_WRITE                          = 4\n\tSYS_OPEN                           = 5\n\tSYS_CLOSE                          = 6\n\tSYS_WAIT4                          = 7\n\tSYS_LINK                           = 9\n\tSYS_UNLINK                         = 10\n\tSYS_CHDIR                          = 12\n\tSYS_FCHDIR                         = 13\n\tSYS_MKNOD                          = 14\n\tSYS_CHMOD                          = 15\n\tSYS_CHOWN                          = 16\n\tSYS_GETFSSTAT                      = 18\n\tSYS_GETPID                         = 20\n\tSYS_SETUID                         = 23\n\tSYS_GETUID                         = 24\n\tSYS_GETEUID                        = 25\n\tSYS_PTRACE                         = 26\n\tSYS_RECVMSG                        = 27\n\tSYS_SENDMSG                        = 28\n\tSYS_RECVFROM                       = 29\n\tSYS_ACCEPT                         = 30\n\tSYS_GETPEERNAME                    = 31\n\tSYS_GETSOCKNAME                    = 32\n\tSYS_ACCESS                         = 33\n\tSYS_CHFLAGS                        = 34\n\tSYS_FCHFLAGS                       = 35\n\tSYS_SYNC                           = 36\n\tSYS_KILL                           = 37\n\tSYS_GETPPID                        = 39\n\tSYS_DUP                            = 41\n\tSYS_PIPE                           = 42\n\tSYS_GETEGID                        = 43\n\tSYS_SIGACTION                      = 46\n\tSYS_GETGID                         = 47\n\tSYS_SIGPROCMASK                    = 48\n\tSYS_GETLOGIN                       = 49\n\tSYS_SETLOGIN                       = 50\n\tSYS_ACCT                           = 51\n\tSYS_SIGPENDING                     = 52\n\tSYS_SIGALTSTACK                    = 53\n\tSYS_IOCTL                          = 54\n\tSYS_REBOOT                         = 55\n\tSYS_REVOKE                         = 56\n\tSYS_SYMLINK                        = 57\n\tSYS_READLINK                       = 58\n\tSYS_EXECVE                         = 59\n\tSYS_UMASK                          = 60\n\tSYS_CHROOT                         = 61\n\tSYS_MSYNC                          = 65\n\tSYS_VFORK                          = 66\n\tSYS_MUNMAP                         = 73\n\tSYS_MPROTECT                       = 74\n\tSYS_MADVISE                        = 75\n\tSYS_MINCORE                        = 78\n\tSYS_GETGROUPS                      = 79\n\tSYS_SETGROUPS                      = 80\n\tSYS_GETPGRP                        = 81\n\tSYS_SETPGID                        = 82\n\tSYS_SETITIMER                      = 83\n\tSYS_SWAPON                         = 85\n\tSYS_GETITIMER                      = 86\n\tSYS_GETDTABLESIZE                  = 89\n\tSYS_DUP2                           = 90\n\tSYS_FCNTL                          = 92\n\tSYS_SELECT                         = 93\n\tSYS_FSYNC                          = 95\n\tSYS_SETPRIORITY                    = 96\n\tSYS_SOCKET                         = 97\n\tSYS_CONNECT                        = 98\n\tSYS_GETPRIORITY                    = 100\n\tSYS_BIND                           = 104\n\tSYS_SETSOCKOPT                     = 105\n\tSYS_LISTEN                         = 106\n\tSYS_SIGSUSPEND                     = 111\n\tSYS_GETTIMEOFDAY                   = 116\n\tSYS_GETRUSAGE                      = 117\n\tSYS_GETSOCKOPT                     = 118\n\tSYS_READV                          = 120\n\tSYS_WRITEV                         = 121\n\tSYS_SETTIMEOFDAY                   = 122\n\tSYS_FCHOWN                         = 123\n\tSYS_FCHMOD                         = 124\n\tSYS_SETREUID                       = 126\n\tSYS_SETREGID                       = 127\n\tSYS_RENAME                         = 128\n\tSYS_FLOCK                          = 131\n\tSYS_MKFIFO                         = 132\n\tSYS_SENDTO                         = 133\n\tSYS_SHUTDOWN                       = 134\n\tSYS_SOCKETPAIR                     = 135\n\tSYS_MKDIR                          = 136\n\tSYS_RMDIR                          = 137\n\tSYS_UTIMES                         = 138\n\tSYS_FUTIMES                        = 139\n\tSYS_ADJTIME                        = 140\n\tSYS_GETHOSTUUID                    = 142\n\tSYS_SETSID                         = 147\n\tSYS_GETPGID                        = 151\n\tSYS_SETPRIVEXEC                    = 152\n\tSYS_PREAD                          = 153\n\tSYS_PWRITE                         = 154\n\tSYS_NFSSVC                         = 155\n\tSYS_STATFS                         = 157\n\tSYS_FSTATFS                        = 158\n\tSYS_UNMOUNT                        = 159\n\tSYS_GETFH                          = 161\n\tSYS_QUOTACTL                       = 165\n\tSYS_MOUNT                          = 167\n\tSYS_CSOPS                          = 169\n\tSYS_CSOPS_AUDITTOKEN               = 170\n\tSYS_WAITID                         = 173\n\tSYS_KDEBUG_TYPEFILTER              = 177\n\tSYS_KDEBUG_TRACE_STRING            = 178\n\tSYS_KDEBUG_TRACE64                 = 179\n\tSYS_KDEBUG_TRACE                   = 180\n\tSYS_SETGID                         = 181\n\tSYS_SETEGID                        = 182\n\tSYS_SETEUID                        = 183\n\tSYS_SIGRETURN                      = 184\n\tSYS_THREAD_SELFCOUNTS              = 186\n\tSYS_FDATASYNC                      = 187\n\tSYS_STAT                           = 188\n\tSYS_FSTAT                          = 189\n\tSYS_LSTAT                          = 190\n\tSYS_PATHCONF                       = 191\n\tSYS_FPATHCONF                      = 192\n\tSYS_GETRLIMIT                      = 194\n\tSYS_SETRLIMIT                      = 195\n\tSYS_GETDIRENTRIES                  = 196\n\tSYS_MMAP                           = 197\n\tSYS_LSEEK                          = 199\n\tSYS_TRUNCATE                       = 200\n\tSYS_FTRUNCATE                      = 201\n\tSYS_SYSCTL                         = 202\n\tSYS_MLOCK                          = 203\n\tSYS_MUNLOCK                        = 204\n\tSYS_UNDELETE                       = 205\n\tSYS_OPEN_DPROTECTED_NP             = 216\n\tSYS_GETATTRLIST                    = 220\n\tSYS_SETATTRLIST                    = 221\n\tSYS_GETDIRENTRIESATTR              = 222\n\tSYS_EXCHANGEDATA                   = 223\n\tSYS_SEARCHFS                       = 225\n\tSYS_DELETE                         = 226\n\tSYS_COPYFILE                       = 227\n\tSYS_FGETATTRLIST                   = 228\n\tSYS_FSETATTRLIST                   = 229\n\tSYS_POLL                           = 230\n\tSYS_WATCHEVENT                     = 231\n\tSYS_WAITEVENT                      = 232\n\tSYS_MODWATCH                       = 233\n\tSYS_GETXATTR                       = 234\n\tSYS_FGETXATTR                      = 235\n\tSYS_SETXATTR                       = 236\n\tSYS_FSETXATTR                      = 237\n\tSYS_REMOVEXATTR                    = 238\n\tSYS_FREMOVEXATTR                   = 239\n\tSYS_LISTXATTR                      = 240\n\tSYS_FLISTXATTR                     = 241\n\tSYS_FSCTL                          = 242\n\tSYS_INITGROUPS                     = 243\n\tSYS_POSIX_SPAWN                    = 244\n\tSYS_FFSCTL                         = 245\n\tSYS_NFSCLNT                        = 247\n\tSYS_FHOPEN                         = 248\n\tSYS_MINHERIT                       = 250\n\tSYS_SEMSYS                         = 251\n\tSYS_MSGSYS                         = 252\n\tSYS_SHMSYS                         = 253\n\tSYS_SEMCTL                         = 254\n\tSYS_SEMGET                         = 255\n\tSYS_SEMOP                          = 256\n\tSYS_MSGCTL                         = 258\n\tSYS_MSGGET                         = 259\n\tSYS_MSGSND                         = 260\n\tSYS_MSGRCV                         = 261\n\tSYS_SHMAT                          = 262\n\tSYS_SHMCTL                         = 263\n\tSYS_SHMDT                          = 264\n\tSYS_SHMGET                         = 265\n\tSYS_SHM_OPEN                       = 266\n\tSYS_SHM_UNLINK                     = 267\n\tSYS_SEM_OPEN                       = 268\n\tSYS_SEM_CLOSE                      = 269\n\tSYS_SEM_UNLINK                     = 270\n\tSYS_SEM_WAIT                       = 271\n\tSYS_SEM_TRYWAIT                    = 272\n\tSYS_SEM_POST                       = 273\n\tSYS_SYSCTLBYNAME                   = 274\n\tSYS_OPEN_EXTENDED                  = 277\n\tSYS_UMASK_EXTENDED                 = 278\n\tSYS_STAT_EXTENDED                  = 279\n\tSYS_LSTAT_EXTENDED                 = 280\n\tSYS_FSTAT_EXTENDED                 = 281\n\tSYS_CHMOD_EXTENDED                 = 282\n\tSYS_FCHMOD_EXTENDED                = 283\n\tSYS_ACCESS_EXTENDED                = 284\n\tSYS_SETTID                         = 285\n\tSYS_GETTID                         = 286\n\tSYS_SETSGROUPS                     = 287\n\tSYS_GETSGROUPS                     = 288\n\tSYS_SETWGROUPS                     = 289\n\tSYS_GETWGROUPS                     = 290\n\tSYS_MKFIFO_EXTENDED                = 291\n\tSYS_MKDIR_EXTENDED                 = 292\n\tSYS_IDENTITYSVC                    = 293\n\tSYS_SHARED_REGION_CHECK_NP         = 294\n\tSYS_VM_PRESSURE_MONITOR            = 296\n\tSYS_PSYNCH_RW_LONGRDLOCK           = 297\n\tSYS_PSYNCH_RW_YIELDWRLOCK          = 298\n\tSYS_PSYNCH_RW_DOWNGRADE            = 299\n\tSYS_PSYNCH_RW_UPGRADE              = 300\n\tSYS_PSYNCH_MUTEXWAIT               = 301\n\tSYS_PSYNCH_MUTEXDROP               = 302\n\tSYS_PSYNCH_CVBROAD                 = 303\n\tSYS_PSYNCH_CVSIGNAL                = 304\n\tSYS_PSYNCH_CVWAIT                  = 305\n\tSYS_PSYNCH_RW_RDLOCK               = 306\n\tSYS_PSYNCH_RW_WRLOCK               = 307\n\tSYS_PSYNCH_RW_UNLOCK               = 308\n\tSYS_PSYNCH_RW_UNLOCK2              = 309\n\tSYS_GETSID                         = 310\n\tSYS_SETTID_WITH_PID                = 311\n\tSYS_PSYNCH_CVCLRPREPOST            = 312\n\tSYS_AIO_FSYNC                      = 313\n\tSYS_AIO_RETURN                     = 314\n\tSYS_AIO_SUSPEND                    = 315\n\tSYS_AIO_CANCEL                     = 316\n\tSYS_AIO_ERROR                      = 317\n\tSYS_AIO_READ                       = 318\n\tSYS_AIO_WRITE                      = 319\n\tSYS_LIO_LISTIO                     = 320\n\tSYS_IOPOLICYSYS                    = 322\n\tSYS_PROCESS_POLICY                 = 323\n\tSYS_MLOCKALL                       = 324\n\tSYS_MUNLOCKALL                     = 325\n\tSYS_ISSETUGID                      = 327\n\tSYS___PTHREAD_KILL                 = 328\n\tSYS___PTHREAD_SIGMASK              = 329\n\tSYS___SIGWAIT                      = 330\n\tSYS___DISABLE_THREADSIGNAL         = 331\n\tSYS___PTHREAD_MARKCANCEL           = 332\n\tSYS___PTHREAD_CANCELED             = 333\n\tSYS___SEMWAIT_SIGNAL               = 334\n\tSYS_PROC_INFO                      = 336\n\tSYS_SENDFILE                       = 337\n\tSYS_STAT64                         = 338\n\tSYS_FSTAT64                        = 339\n\tSYS_LSTAT64                        = 340\n\tSYS_STAT64_EXTENDED                = 341\n\tSYS_LSTAT64_EXTENDED               = 342\n\tSYS_FSTAT64_EXTENDED               = 343\n\tSYS_GETDIRENTRIES64                = 344\n\tSYS_STATFS64                       = 345\n\tSYS_FSTATFS64                      = 346\n\tSYS_GETFSSTAT64                    = 347\n\tSYS___PTHREAD_CHDIR                = 348\n\tSYS___PTHREAD_FCHDIR               = 349\n\tSYS_AUDIT                          = 350\n\tSYS_AUDITON                        = 351\n\tSYS_GETAUID                        = 353\n\tSYS_SETAUID                        = 354\n\tSYS_GETAUDIT_ADDR                  = 357\n\tSYS_SETAUDIT_ADDR                  = 358\n\tSYS_AUDITCTL                       = 359\n\tSYS_BSDTHREAD_CREATE               = 360\n\tSYS_BSDTHREAD_TERMINATE            = 361\n\tSYS_KQUEUE                         = 362\n\tSYS_KEVENT                         = 363\n\tSYS_LCHOWN                         = 364\n\tSYS_BSDTHREAD_REGISTER             = 366\n\tSYS_WORKQ_OPEN                     = 367\n\tSYS_WORKQ_KERNRETURN               = 368\n\tSYS_KEVENT64                       = 369\n\tSYS___OLD_SEMWAIT_SIGNAL           = 370\n\tSYS___OLD_SEMWAIT_SIGNAL_NOCANCEL  = 371\n\tSYS_THREAD_SELFID                  = 372\n\tSYS_LEDGER                         = 373\n\tSYS_KEVENT_QOS                     = 374\n\tSYS_KEVENT_ID                      = 375\n\tSYS___MAC_EXECVE                   = 380\n\tSYS___MAC_SYSCALL                  = 381\n\tSYS___MAC_GET_FILE                 = 382\n\tSYS___MAC_SET_FILE                 = 383\n\tSYS___MAC_GET_LINK                 = 384\n\tSYS___MAC_SET_LINK                 = 385\n\tSYS___MAC_GET_PROC                 = 386\n\tSYS___MAC_SET_PROC                 = 387\n\tSYS___MAC_GET_FD                   = 388\n\tSYS___MAC_SET_FD                   = 389\n\tSYS___MAC_GET_PID                  = 390\n\tSYS_PSELECT                        = 394\n\tSYS_PSELECT_NOCANCEL               = 395\n\tSYS_READ_NOCANCEL                  = 396\n\tSYS_WRITE_NOCANCEL                 = 397\n\tSYS_OPEN_NOCANCEL                  = 398\n\tSYS_CLOSE_NOCANCEL                 = 399\n\tSYS_WAIT4_NOCANCEL                 = 400\n\tSYS_RECVMSG_NOCANCEL               = 401\n\tSYS_SENDMSG_NOCANCEL               = 402\n\tSYS_RECVFROM_NOCANCEL              = 403\n\tSYS_ACCEPT_NOCANCEL                = 404\n\tSYS_MSYNC_NOCANCEL                 = 405\n\tSYS_FCNTL_NOCANCEL                 = 406\n\tSYS_SELECT_NOCANCEL                = 407\n\tSYS_FSYNC_NOCANCEL                 = 408\n\tSYS_CONNECT_NOCANCEL               = 409\n\tSYS_SIGSUSPEND_NOCANCEL            = 410\n\tSYS_READV_NOCANCEL                 = 411\n\tSYS_WRITEV_NOCANCEL                = 412\n\tSYS_SENDTO_NOCANCEL                = 413\n\tSYS_PREAD_NOCANCEL                 = 414\n\tSYS_PWRITE_NOCANCEL                = 415\n\tSYS_WAITID_NOCANCEL                = 416\n\tSYS_POLL_NOCANCEL                  = 417\n\tSYS_MSGSND_NOCANCEL                = 418\n\tSYS_MSGRCV_NOCANCEL                = 419\n\tSYS_SEM_WAIT_NOCANCEL              = 420\n\tSYS_AIO_SUSPEND_NOCANCEL           = 421\n\tSYS___SIGWAIT_NOCANCEL             = 422\n\tSYS___SEMWAIT_SIGNAL_NOCANCEL      = 423\n\tSYS___MAC_MOUNT                    = 424\n\tSYS___MAC_GET_MOUNT                = 425\n\tSYS___MAC_GETFSSTAT                = 426\n\tSYS_FSGETPATH                      = 427\n\tSYS_AUDIT_SESSION_SELF             = 428\n\tSYS_AUDIT_SESSION_JOIN             = 429\n\tSYS_FILEPORT_MAKEPORT              = 430\n\tSYS_FILEPORT_MAKEFD                = 431\n\tSYS_AUDIT_SESSION_PORT             = 432\n\tSYS_PID_SUSPEND                    = 433\n\tSYS_PID_RESUME                     = 434\n\tSYS_PID_HIBERNATE                  = 435\n\tSYS_PID_SHUTDOWN_SOCKETS           = 436\n\tSYS_SHARED_REGION_MAP_AND_SLIDE_NP = 438\n\tSYS_KAS_INFO                       = 439\n\tSYS_MEMORYSTATUS_CONTROL           = 440\n\tSYS_GUARDED_OPEN_NP                = 441\n\tSYS_GUARDED_CLOSE_NP               = 442\n\tSYS_GUARDED_KQUEUE_NP              = 443\n\tSYS_CHANGE_FDGUARD_NP              = 444\n\tSYS_USRCTL                         = 445\n\tSYS_PROC_RLIMIT_CONTROL            = 446\n\tSYS_CONNECTX                       = 447\n\tSYS_DISCONNECTX                    = 448\n\tSYS_PEELOFF                        = 449\n\tSYS_SOCKET_DELEGATE                = 450\n\tSYS_TELEMETRY                      = 451\n\tSYS_PROC_UUID_POLICY               = 452\n\tSYS_MEMORYSTATUS_GET_LEVEL         = 453\n\tSYS_SYSTEM_OVERRIDE                = 454\n\tSYS_VFS_PURGE                      = 455\n\tSYS_SFI_CTL                        = 456\n\tSYS_SFI_PIDCTL                     = 457\n\tSYS_COALITION                      = 458\n\tSYS_COALITION_INFO                 = 459\n\tSYS_NECP_MATCH_POLICY              = 460\n\tSYS_GETATTRLISTBULK                = 461\n\tSYS_CLONEFILEAT                    = 462\n\tSYS_OPENAT                         = 463\n\tSYS_OPENAT_NOCANCEL                = 464\n\tSYS_RENAMEAT                       = 465\n\tSYS_FACCESSAT                      = 466\n\tSYS_FCHMODAT                       = 467\n\tSYS_FCHOWNAT                       = 468\n\tSYS_FSTATAT                        = 469\n\tSYS_FSTATAT64                      = 470\n\tSYS_LINKAT                         = 471\n\tSYS_UNLINKAT                       = 472\n\tSYS_READLINKAT                     = 473\n\tSYS_SYMLINKAT                      = 474\n\tSYS_MKDIRAT                        = 475\n\tSYS_GETATTRLISTAT                  = 476\n\tSYS_PROC_TRACE_LOG                 = 477\n\tSYS_BSDTHREAD_CTL                  = 478\n\tSYS_OPENBYID_NP                    = 479\n\tSYS_RECVMSG_X                      = 480\n\tSYS_SENDMSG_X                      = 481\n\tSYS_THREAD_SELFUSAGE               = 482\n\tSYS_CSRCTL                         = 483\n\tSYS_GUARDED_OPEN_DPROTECTED_NP     = 484\n\tSYS_GUARDED_WRITE_NP               = 485\n\tSYS_GUARDED_PWRITE_NP              = 486\n\tSYS_GUARDED_WRITEV_NP              = 487\n\tSYS_RENAMEATX_NP                   = 488\n\tSYS_MREMAP_ENCRYPTED               = 489\n\tSYS_NETAGENT_TRIGGER               = 490\n\tSYS_STACK_SNAPSHOT_WITH_CONFIG     = 491\n\tSYS_MICROSTACKSHOT                 = 492\n\tSYS_GRAB_PGO_DATA                  = 493\n\tSYS_PERSONA                        = 494\n\tSYS_WORK_INTERVAL_CTL              = 499\n\tSYS_GETENTROPY                     = 500\n\tSYS_NECP_OPEN                      = 501\n\tSYS_NECP_CLIENT_ACTION             = 502\n\tSYS___NEXUS_OPEN                   = 503\n\tSYS___NEXUS_REGISTER               = 504\n\tSYS___NEXUS_DEREGISTER             = 505\n\tSYS___NEXUS_CREATE                 = 506\n\tSYS___NEXUS_DESTROY                = 507\n\tSYS___NEXUS_GET_OPT                = 508\n\tSYS___NEXUS_SET_OPT                = 509\n\tSYS___CHANNEL_OPEN                 = 510\n\tSYS___CHANNEL_GET_INFO             = 511\n\tSYS___CHANNEL_SYNC                 = 512\n\tSYS___CHANNEL_GET_OPT              = 513\n\tSYS___CHANNEL_SET_OPT              = 514\n\tSYS_ULOCK_WAIT                     = 515\n\tSYS_ULOCK_WAKE                     = 516\n\tSYS_FCLONEFILEAT                   = 517\n\tSYS_FS_SNAPSHOT                    = 518\n\tSYS_TERMINATE_WITH_PAYLOAD         = 520\n\tSYS_ABORT_WITH_PAYLOAD             = 521\n\tSYS_NECP_SESSION_OPEN              = 522\n\tSYS_NECP_SESSION_ACTION            = 523\n\tSYS_SETATTRLISTAT                  = 524\n\tSYS_NET_QOS_GUIDELINE              = 525\n\tSYS_FMOUNT                         = 526\n\tSYS_NTP_ADJTIME                    = 527\n\tSYS_NTP_GETTIME                    = 528\n\tSYS_OS_FAULT_WITH_PAYLOAD          = 529\n\tSYS_MAXSYSCALL                     = 530\n\tSYS_INVALID                        = 63\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_darwin_amd64.go",
    "content": "// go run mksysnum.go /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/usr/include/sys/syscall.h\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build amd64,darwin\n\npackage unix\n\nconst (\n\tSYS_SYSCALL                        = 0\n\tSYS_EXIT                           = 1\n\tSYS_FORK                           = 2\n\tSYS_READ                           = 3\n\tSYS_WRITE                          = 4\n\tSYS_OPEN                           = 5\n\tSYS_CLOSE                          = 6\n\tSYS_WAIT4                          = 7\n\tSYS_LINK                           = 9\n\tSYS_UNLINK                         = 10\n\tSYS_CHDIR                          = 12\n\tSYS_FCHDIR                         = 13\n\tSYS_MKNOD                          = 14\n\tSYS_CHMOD                          = 15\n\tSYS_CHOWN                          = 16\n\tSYS_GETFSSTAT                      = 18\n\tSYS_GETPID                         = 20\n\tSYS_SETUID                         = 23\n\tSYS_GETUID                         = 24\n\tSYS_GETEUID                        = 25\n\tSYS_PTRACE                         = 26\n\tSYS_RECVMSG                        = 27\n\tSYS_SENDMSG                        = 28\n\tSYS_RECVFROM                       = 29\n\tSYS_ACCEPT                         = 30\n\tSYS_GETPEERNAME                    = 31\n\tSYS_GETSOCKNAME                    = 32\n\tSYS_ACCESS                         = 33\n\tSYS_CHFLAGS                        = 34\n\tSYS_FCHFLAGS                       = 35\n\tSYS_SYNC                           = 36\n\tSYS_KILL                           = 37\n\tSYS_GETPPID                        = 39\n\tSYS_DUP                            = 41\n\tSYS_PIPE                           = 42\n\tSYS_GETEGID                        = 43\n\tSYS_SIGACTION                      = 46\n\tSYS_GETGID                         = 47\n\tSYS_SIGPROCMASK                    = 48\n\tSYS_GETLOGIN                       = 49\n\tSYS_SETLOGIN                       = 50\n\tSYS_ACCT                           = 51\n\tSYS_SIGPENDING                     = 52\n\tSYS_SIGALTSTACK                    = 53\n\tSYS_IOCTL                          = 54\n\tSYS_REBOOT                         = 55\n\tSYS_REVOKE                         = 56\n\tSYS_SYMLINK                        = 57\n\tSYS_READLINK                       = 58\n\tSYS_EXECVE                         = 59\n\tSYS_UMASK                          = 60\n\tSYS_CHROOT                         = 61\n\tSYS_MSYNC                          = 65\n\tSYS_VFORK                          = 66\n\tSYS_MUNMAP                         = 73\n\tSYS_MPROTECT                       = 74\n\tSYS_MADVISE                        = 75\n\tSYS_MINCORE                        = 78\n\tSYS_GETGROUPS                      = 79\n\tSYS_SETGROUPS                      = 80\n\tSYS_GETPGRP                        = 81\n\tSYS_SETPGID                        = 82\n\tSYS_SETITIMER                      = 83\n\tSYS_SWAPON                         = 85\n\tSYS_GETITIMER                      = 86\n\tSYS_GETDTABLESIZE                  = 89\n\tSYS_DUP2                           = 90\n\tSYS_FCNTL                          = 92\n\tSYS_SELECT                         = 93\n\tSYS_FSYNC                          = 95\n\tSYS_SETPRIORITY                    = 96\n\tSYS_SOCKET                         = 97\n\tSYS_CONNECT                        = 98\n\tSYS_GETPRIORITY                    = 100\n\tSYS_BIND                           = 104\n\tSYS_SETSOCKOPT                     = 105\n\tSYS_LISTEN                         = 106\n\tSYS_SIGSUSPEND                     = 111\n\tSYS_GETTIMEOFDAY                   = 116\n\tSYS_GETRUSAGE                      = 117\n\tSYS_GETSOCKOPT                     = 118\n\tSYS_READV                          = 120\n\tSYS_WRITEV                         = 121\n\tSYS_SETTIMEOFDAY                   = 122\n\tSYS_FCHOWN                         = 123\n\tSYS_FCHMOD                         = 124\n\tSYS_SETREUID                       = 126\n\tSYS_SETREGID                       = 127\n\tSYS_RENAME                         = 128\n\tSYS_FLOCK                          = 131\n\tSYS_MKFIFO                         = 132\n\tSYS_SENDTO                         = 133\n\tSYS_SHUTDOWN                       = 134\n\tSYS_SOCKETPAIR                     = 135\n\tSYS_MKDIR                          = 136\n\tSYS_RMDIR                          = 137\n\tSYS_UTIMES                         = 138\n\tSYS_FUTIMES                        = 139\n\tSYS_ADJTIME                        = 140\n\tSYS_GETHOSTUUID                    = 142\n\tSYS_SETSID                         = 147\n\tSYS_GETPGID                        = 151\n\tSYS_SETPRIVEXEC                    = 152\n\tSYS_PREAD                          = 153\n\tSYS_PWRITE                         = 154\n\tSYS_NFSSVC                         = 155\n\tSYS_STATFS                         = 157\n\tSYS_FSTATFS                        = 158\n\tSYS_UNMOUNT                        = 159\n\tSYS_GETFH                          = 161\n\tSYS_QUOTACTL                       = 165\n\tSYS_MOUNT                          = 167\n\tSYS_CSOPS                          = 169\n\tSYS_CSOPS_AUDITTOKEN               = 170\n\tSYS_WAITID                         = 173\n\tSYS_KDEBUG_TYPEFILTER              = 177\n\tSYS_KDEBUG_TRACE_STRING            = 178\n\tSYS_KDEBUG_TRACE64                 = 179\n\tSYS_KDEBUG_TRACE                   = 180\n\tSYS_SETGID                         = 181\n\tSYS_SETEGID                        = 182\n\tSYS_SETEUID                        = 183\n\tSYS_SIGRETURN                      = 184\n\tSYS_THREAD_SELFCOUNTS              = 186\n\tSYS_FDATASYNC                      = 187\n\tSYS_STAT                           = 188\n\tSYS_FSTAT                          = 189\n\tSYS_LSTAT                          = 190\n\tSYS_PATHCONF                       = 191\n\tSYS_FPATHCONF                      = 192\n\tSYS_GETRLIMIT                      = 194\n\tSYS_SETRLIMIT                      = 195\n\tSYS_GETDIRENTRIES                  = 196\n\tSYS_MMAP                           = 197\n\tSYS_LSEEK                          = 199\n\tSYS_TRUNCATE                       = 200\n\tSYS_FTRUNCATE                      = 201\n\tSYS_SYSCTL                         = 202\n\tSYS_MLOCK                          = 203\n\tSYS_MUNLOCK                        = 204\n\tSYS_UNDELETE                       = 205\n\tSYS_OPEN_DPROTECTED_NP             = 216\n\tSYS_GETATTRLIST                    = 220\n\tSYS_SETATTRLIST                    = 221\n\tSYS_GETDIRENTRIESATTR              = 222\n\tSYS_EXCHANGEDATA                   = 223\n\tSYS_SEARCHFS                       = 225\n\tSYS_DELETE                         = 226\n\tSYS_COPYFILE                       = 227\n\tSYS_FGETATTRLIST                   = 228\n\tSYS_FSETATTRLIST                   = 229\n\tSYS_POLL                           = 230\n\tSYS_WATCHEVENT                     = 231\n\tSYS_WAITEVENT                      = 232\n\tSYS_MODWATCH                       = 233\n\tSYS_GETXATTR                       = 234\n\tSYS_FGETXATTR                      = 235\n\tSYS_SETXATTR                       = 236\n\tSYS_FSETXATTR                      = 237\n\tSYS_REMOVEXATTR                    = 238\n\tSYS_FREMOVEXATTR                   = 239\n\tSYS_LISTXATTR                      = 240\n\tSYS_FLISTXATTR                     = 241\n\tSYS_FSCTL                          = 242\n\tSYS_INITGROUPS                     = 243\n\tSYS_POSIX_SPAWN                    = 244\n\tSYS_FFSCTL                         = 245\n\tSYS_NFSCLNT                        = 247\n\tSYS_FHOPEN                         = 248\n\tSYS_MINHERIT                       = 250\n\tSYS_SEMSYS                         = 251\n\tSYS_MSGSYS                         = 252\n\tSYS_SHMSYS                         = 253\n\tSYS_SEMCTL                         = 254\n\tSYS_SEMGET                         = 255\n\tSYS_SEMOP                          = 256\n\tSYS_MSGCTL                         = 258\n\tSYS_MSGGET                         = 259\n\tSYS_MSGSND                         = 260\n\tSYS_MSGRCV                         = 261\n\tSYS_SHMAT                          = 262\n\tSYS_SHMCTL                         = 263\n\tSYS_SHMDT                          = 264\n\tSYS_SHMGET                         = 265\n\tSYS_SHM_OPEN                       = 266\n\tSYS_SHM_UNLINK                     = 267\n\tSYS_SEM_OPEN                       = 268\n\tSYS_SEM_CLOSE                      = 269\n\tSYS_SEM_UNLINK                     = 270\n\tSYS_SEM_WAIT                       = 271\n\tSYS_SEM_TRYWAIT                    = 272\n\tSYS_SEM_POST                       = 273\n\tSYS_SYSCTLBYNAME                   = 274\n\tSYS_OPEN_EXTENDED                  = 277\n\tSYS_UMASK_EXTENDED                 = 278\n\tSYS_STAT_EXTENDED                  = 279\n\tSYS_LSTAT_EXTENDED                 = 280\n\tSYS_FSTAT_EXTENDED                 = 281\n\tSYS_CHMOD_EXTENDED                 = 282\n\tSYS_FCHMOD_EXTENDED                = 283\n\tSYS_ACCESS_EXTENDED                = 284\n\tSYS_SETTID                         = 285\n\tSYS_GETTID                         = 286\n\tSYS_SETSGROUPS                     = 287\n\tSYS_GETSGROUPS                     = 288\n\tSYS_SETWGROUPS                     = 289\n\tSYS_GETWGROUPS                     = 290\n\tSYS_MKFIFO_EXTENDED                = 291\n\tSYS_MKDIR_EXTENDED                 = 292\n\tSYS_IDENTITYSVC                    = 293\n\tSYS_SHARED_REGION_CHECK_NP         = 294\n\tSYS_VM_PRESSURE_MONITOR            = 296\n\tSYS_PSYNCH_RW_LONGRDLOCK           = 297\n\tSYS_PSYNCH_RW_YIELDWRLOCK          = 298\n\tSYS_PSYNCH_RW_DOWNGRADE            = 299\n\tSYS_PSYNCH_RW_UPGRADE              = 300\n\tSYS_PSYNCH_MUTEXWAIT               = 301\n\tSYS_PSYNCH_MUTEXDROP               = 302\n\tSYS_PSYNCH_CVBROAD                 = 303\n\tSYS_PSYNCH_CVSIGNAL                = 304\n\tSYS_PSYNCH_CVWAIT                  = 305\n\tSYS_PSYNCH_RW_RDLOCK               = 306\n\tSYS_PSYNCH_RW_WRLOCK               = 307\n\tSYS_PSYNCH_RW_UNLOCK               = 308\n\tSYS_PSYNCH_RW_UNLOCK2              = 309\n\tSYS_GETSID                         = 310\n\tSYS_SETTID_WITH_PID                = 311\n\tSYS_PSYNCH_CVCLRPREPOST            = 312\n\tSYS_AIO_FSYNC                      = 313\n\tSYS_AIO_RETURN                     = 314\n\tSYS_AIO_SUSPEND                    = 315\n\tSYS_AIO_CANCEL                     = 316\n\tSYS_AIO_ERROR                      = 317\n\tSYS_AIO_READ                       = 318\n\tSYS_AIO_WRITE                      = 319\n\tSYS_LIO_LISTIO                     = 320\n\tSYS_IOPOLICYSYS                    = 322\n\tSYS_PROCESS_POLICY                 = 323\n\tSYS_MLOCKALL                       = 324\n\tSYS_MUNLOCKALL                     = 325\n\tSYS_ISSETUGID                      = 327\n\tSYS___PTHREAD_KILL                 = 328\n\tSYS___PTHREAD_SIGMASK              = 329\n\tSYS___SIGWAIT                      = 330\n\tSYS___DISABLE_THREADSIGNAL         = 331\n\tSYS___PTHREAD_MARKCANCEL           = 332\n\tSYS___PTHREAD_CANCELED             = 333\n\tSYS___SEMWAIT_SIGNAL               = 334\n\tSYS_PROC_INFO                      = 336\n\tSYS_SENDFILE                       = 337\n\tSYS_STAT64                         = 338\n\tSYS_FSTAT64                        = 339\n\tSYS_LSTAT64                        = 340\n\tSYS_STAT64_EXTENDED                = 341\n\tSYS_LSTAT64_EXTENDED               = 342\n\tSYS_FSTAT64_EXTENDED               = 343\n\tSYS_GETDIRENTRIES64                = 344\n\tSYS_STATFS64                       = 345\n\tSYS_FSTATFS64                      = 346\n\tSYS_GETFSSTAT64                    = 347\n\tSYS___PTHREAD_CHDIR                = 348\n\tSYS___PTHREAD_FCHDIR               = 349\n\tSYS_AUDIT                          = 350\n\tSYS_AUDITON                        = 351\n\tSYS_GETAUID                        = 353\n\tSYS_SETAUID                        = 354\n\tSYS_GETAUDIT_ADDR                  = 357\n\tSYS_SETAUDIT_ADDR                  = 358\n\tSYS_AUDITCTL                       = 359\n\tSYS_BSDTHREAD_CREATE               = 360\n\tSYS_BSDTHREAD_TERMINATE            = 361\n\tSYS_KQUEUE                         = 362\n\tSYS_KEVENT                         = 363\n\tSYS_LCHOWN                         = 364\n\tSYS_BSDTHREAD_REGISTER             = 366\n\tSYS_WORKQ_OPEN                     = 367\n\tSYS_WORKQ_KERNRETURN               = 368\n\tSYS_KEVENT64                       = 369\n\tSYS___OLD_SEMWAIT_SIGNAL           = 370\n\tSYS___OLD_SEMWAIT_SIGNAL_NOCANCEL  = 371\n\tSYS_THREAD_SELFID                  = 372\n\tSYS_LEDGER                         = 373\n\tSYS_KEVENT_QOS                     = 374\n\tSYS_KEVENT_ID                      = 375\n\tSYS___MAC_EXECVE                   = 380\n\tSYS___MAC_SYSCALL                  = 381\n\tSYS___MAC_GET_FILE                 = 382\n\tSYS___MAC_SET_FILE                 = 383\n\tSYS___MAC_GET_LINK                 = 384\n\tSYS___MAC_SET_LINK                 = 385\n\tSYS___MAC_GET_PROC                 = 386\n\tSYS___MAC_SET_PROC                 = 387\n\tSYS___MAC_GET_FD                   = 388\n\tSYS___MAC_SET_FD                   = 389\n\tSYS___MAC_GET_PID                  = 390\n\tSYS_PSELECT                        = 394\n\tSYS_PSELECT_NOCANCEL               = 395\n\tSYS_READ_NOCANCEL                  = 396\n\tSYS_WRITE_NOCANCEL                 = 397\n\tSYS_OPEN_NOCANCEL                  = 398\n\tSYS_CLOSE_NOCANCEL                 = 399\n\tSYS_WAIT4_NOCANCEL                 = 400\n\tSYS_RECVMSG_NOCANCEL               = 401\n\tSYS_SENDMSG_NOCANCEL               = 402\n\tSYS_RECVFROM_NOCANCEL              = 403\n\tSYS_ACCEPT_NOCANCEL                = 404\n\tSYS_MSYNC_NOCANCEL                 = 405\n\tSYS_FCNTL_NOCANCEL                 = 406\n\tSYS_SELECT_NOCANCEL                = 407\n\tSYS_FSYNC_NOCANCEL                 = 408\n\tSYS_CONNECT_NOCANCEL               = 409\n\tSYS_SIGSUSPEND_NOCANCEL            = 410\n\tSYS_READV_NOCANCEL                 = 411\n\tSYS_WRITEV_NOCANCEL                = 412\n\tSYS_SENDTO_NOCANCEL                = 413\n\tSYS_PREAD_NOCANCEL                 = 414\n\tSYS_PWRITE_NOCANCEL                = 415\n\tSYS_WAITID_NOCANCEL                = 416\n\tSYS_POLL_NOCANCEL                  = 417\n\tSYS_MSGSND_NOCANCEL                = 418\n\tSYS_MSGRCV_NOCANCEL                = 419\n\tSYS_SEM_WAIT_NOCANCEL              = 420\n\tSYS_AIO_SUSPEND_NOCANCEL           = 421\n\tSYS___SIGWAIT_NOCANCEL             = 422\n\tSYS___SEMWAIT_SIGNAL_NOCANCEL      = 423\n\tSYS___MAC_MOUNT                    = 424\n\tSYS___MAC_GET_MOUNT                = 425\n\tSYS___MAC_GETFSSTAT                = 426\n\tSYS_FSGETPATH                      = 427\n\tSYS_AUDIT_SESSION_SELF             = 428\n\tSYS_AUDIT_SESSION_JOIN             = 429\n\tSYS_FILEPORT_MAKEPORT              = 430\n\tSYS_FILEPORT_MAKEFD                = 431\n\tSYS_AUDIT_SESSION_PORT             = 432\n\tSYS_PID_SUSPEND                    = 433\n\tSYS_PID_RESUME                     = 434\n\tSYS_PID_HIBERNATE                  = 435\n\tSYS_PID_SHUTDOWN_SOCKETS           = 436\n\tSYS_SHARED_REGION_MAP_AND_SLIDE_NP = 438\n\tSYS_KAS_INFO                       = 439\n\tSYS_MEMORYSTATUS_CONTROL           = 440\n\tSYS_GUARDED_OPEN_NP                = 441\n\tSYS_GUARDED_CLOSE_NP               = 442\n\tSYS_GUARDED_KQUEUE_NP              = 443\n\tSYS_CHANGE_FDGUARD_NP              = 444\n\tSYS_USRCTL                         = 445\n\tSYS_PROC_RLIMIT_CONTROL            = 446\n\tSYS_CONNECTX                       = 447\n\tSYS_DISCONNECTX                    = 448\n\tSYS_PEELOFF                        = 449\n\tSYS_SOCKET_DELEGATE                = 450\n\tSYS_TELEMETRY                      = 451\n\tSYS_PROC_UUID_POLICY               = 452\n\tSYS_MEMORYSTATUS_GET_LEVEL         = 453\n\tSYS_SYSTEM_OVERRIDE                = 454\n\tSYS_VFS_PURGE                      = 455\n\tSYS_SFI_CTL                        = 456\n\tSYS_SFI_PIDCTL                     = 457\n\tSYS_COALITION                      = 458\n\tSYS_COALITION_INFO                 = 459\n\tSYS_NECP_MATCH_POLICY              = 460\n\tSYS_GETATTRLISTBULK                = 461\n\tSYS_CLONEFILEAT                    = 462\n\tSYS_OPENAT                         = 463\n\tSYS_OPENAT_NOCANCEL                = 464\n\tSYS_RENAMEAT                       = 465\n\tSYS_FACCESSAT                      = 466\n\tSYS_FCHMODAT                       = 467\n\tSYS_FCHOWNAT                       = 468\n\tSYS_FSTATAT                        = 469\n\tSYS_FSTATAT64                      = 470\n\tSYS_LINKAT                         = 471\n\tSYS_UNLINKAT                       = 472\n\tSYS_READLINKAT                     = 473\n\tSYS_SYMLINKAT                      = 474\n\tSYS_MKDIRAT                        = 475\n\tSYS_GETATTRLISTAT                  = 476\n\tSYS_PROC_TRACE_LOG                 = 477\n\tSYS_BSDTHREAD_CTL                  = 478\n\tSYS_OPENBYID_NP                    = 479\n\tSYS_RECVMSG_X                      = 480\n\tSYS_SENDMSG_X                      = 481\n\tSYS_THREAD_SELFUSAGE               = 482\n\tSYS_CSRCTL                         = 483\n\tSYS_GUARDED_OPEN_DPROTECTED_NP     = 484\n\tSYS_GUARDED_WRITE_NP               = 485\n\tSYS_GUARDED_PWRITE_NP              = 486\n\tSYS_GUARDED_WRITEV_NP              = 487\n\tSYS_RENAMEATX_NP                   = 488\n\tSYS_MREMAP_ENCRYPTED               = 489\n\tSYS_NETAGENT_TRIGGER               = 490\n\tSYS_STACK_SNAPSHOT_WITH_CONFIG     = 491\n\tSYS_MICROSTACKSHOT                 = 492\n\tSYS_GRAB_PGO_DATA                  = 493\n\tSYS_PERSONA                        = 494\n\tSYS_WORK_INTERVAL_CTL              = 499\n\tSYS_GETENTROPY                     = 500\n\tSYS_NECP_OPEN                      = 501\n\tSYS_NECP_CLIENT_ACTION             = 502\n\tSYS___NEXUS_OPEN                   = 503\n\tSYS___NEXUS_REGISTER               = 504\n\tSYS___NEXUS_DEREGISTER             = 505\n\tSYS___NEXUS_CREATE                 = 506\n\tSYS___NEXUS_DESTROY                = 507\n\tSYS___NEXUS_GET_OPT                = 508\n\tSYS___NEXUS_SET_OPT                = 509\n\tSYS___CHANNEL_OPEN                 = 510\n\tSYS___CHANNEL_GET_INFO             = 511\n\tSYS___CHANNEL_SYNC                 = 512\n\tSYS___CHANNEL_GET_OPT              = 513\n\tSYS___CHANNEL_SET_OPT              = 514\n\tSYS_ULOCK_WAIT                     = 515\n\tSYS_ULOCK_WAKE                     = 516\n\tSYS_FCLONEFILEAT                   = 517\n\tSYS_FS_SNAPSHOT                    = 518\n\tSYS_TERMINATE_WITH_PAYLOAD         = 520\n\tSYS_ABORT_WITH_PAYLOAD             = 521\n\tSYS_NECP_SESSION_OPEN              = 522\n\tSYS_NECP_SESSION_ACTION            = 523\n\tSYS_SETATTRLISTAT                  = 524\n\tSYS_NET_QOS_GUIDELINE              = 525\n\tSYS_FMOUNT                         = 526\n\tSYS_NTP_ADJTIME                    = 527\n\tSYS_NTP_GETTIME                    = 528\n\tSYS_OS_FAULT_WITH_PAYLOAD          = 529\n\tSYS_KQUEUE_WORKLOOP_CTL            = 530\n\tSYS___MACH_BRIDGE_REMOTE_TIME      = 531\n\tSYS_MAXSYSCALL                     = 532\n\tSYS_INVALID                        = 63\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_darwin_arm.go",
    "content": "// go run mksysnum.go /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.1.sdk/usr/include/sys/syscall.h\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build arm,darwin\n\npackage unix\n\nconst (\n\tSYS_SYSCALL                        = 0\n\tSYS_EXIT                           = 1\n\tSYS_FORK                           = 2\n\tSYS_READ                           = 3\n\tSYS_WRITE                          = 4\n\tSYS_OPEN                           = 5\n\tSYS_CLOSE                          = 6\n\tSYS_WAIT4                          = 7\n\tSYS_LINK                           = 9\n\tSYS_UNLINK                         = 10\n\tSYS_CHDIR                          = 12\n\tSYS_FCHDIR                         = 13\n\tSYS_MKNOD                          = 14\n\tSYS_CHMOD                          = 15\n\tSYS_CHOWN                          = 16\n\tSYS_GETFSSTAT                      = 18\n\tSYS_GETPID                         = 20\n\tSYS_SETUID                         = 23\n\tSYS_GETUID                         = 24\n\tSYS_GETEUID                        = 25\n\tSYS_PTRACE                         = 26\n\tSYS_RECVMSG                        = 27\n\tSYS_SENDMSG                        = 28\n\tSYS_RECVFROM                       = 29\n\tSYS_ACCEPT                         = 30\n\tSYS_GETPEERNAME                    = 31\n\tSYS_GETSOCKNAME                    = 32\n\tSYS_ACCESS                         = 33\n\tSYS_CHFLAGS                        = 34\n\tSYS_FCHFLAGS                       = 35\n\tSYS_SYNC                           = 36\n\tSYS_KILL                           = 37\n\tSYS_GETPPID                        = 39\n\tSYS_DUP                            = 41\n\tSYS_PIPE                           = 42\n\tSYS_GETEGID                        = 43\n\tSYS_SIGACTION                      = 46\n\tSYS_GETGID                         = 47\n\tSYS_SIGPROCMASK                    = 48\n\tSYS_GETLOGIN                       = 49\n\tSYS_SETLOGIN                       = 50\n\tSYS_ACCT                           = 51\n\tSYS_SIGPENDING                     = 52\n\tSYS_SIGALTSTACK                    = 53\n\tSYS_IOCTL                          = 54\n\tSYS_REBOOT                         = 55\n\tSYS_REVOKE                         = 56\n\tSYS_SYMLINK                        = 57\n\tSYS_READLINK                       = 58\n\tSYS_EXECVE                         = 59\n\tSYS_UMASK                          = 60\n\tSYS_CHROOT                         = 61\n\tSYS_MSYNC                          = 65\n\tSYS_VFORK                          = 66\n\tSYS_MUNMAP                         = 73\n\tSYS_MPROTECT                       = 74\n\tSYS_MADVISE                        = 75\n\tSYS_MINCORE                        = 78\n\tSYS_GETGROUPS                      = 79\n\tSYS_SETGROUPS                      = 80\n\tSYS_GETPGRP                        = 81\n\tSYS_SETPGID                        = 82\n\tSYS_SETITIMER                      = 83\n\tSYS_SWAPON                         = 85\n\tSYS_GETITIMER                      = 86\n\tSYS_GETDTABLESIZE                  = 89\n\tSYS_DUP2                           = 90\n\tSYS_FCNTL                          = 92\n\tSYS_SELECT                         = 93\n\tSYS_FSYNC                          = 95\n\tSYS_SETPRIORITY                    = 96\n\tSYS_SOCKET                         = 97\n\tSYS_CONNECT                        = 98\n\tSYS_GETPRIORITY                    = 100\n\tSYS_BIND                           = 104\n\tSYS_SETSOCKOPT                     = 105\n\tSYS_LISTEN                         = 106\n\tSYS_SIGSUSPEND                     = 111\n\tSYS_GETTIMEOFDAY                   = 116\n\tSYS_GETRUSAGE                      = 117\n\tSYS_GETSOCKOPT                     = 118\n\tSYS_READV                          = 120\n\tSYS_WRITEV                         = 121\n\tSYS_SETTIMEOFDAY                   = 122\n\tSYS_FCHOWN                         = 123\n\tSYS_FCHMOD                         = 124\n\tSYS_SETREUID                       = 126\n\tSYS_SETREGID                       = 127\n\tSYS_RENAME                         = 128\n\tSYS_FLOCK                          = 131\n\tSYS_MKFIFO                         = 132\n\tSYS_SENDTO                         = 133\n\tSYS_SHUTDOWN                       = 134\n\tSYS_SOCKETPAIR                     = 135\n\tSYS_MKDIR                          = 136\n\tSYS_RMDIR                          = 137\n\tSYS_UTIMES                         = 138\n\tSYS_FUTIMES                        = 139\n\tSYS_ADJTIME                        = 140\n\tSYS_GETHOSTUUID                    = 142\n\tSYS_SETSID                         = 147\n\tSYS_GETPGID                        = 151\n\tSYS_SETPRIVEXEC                    = 152\n\tSYS_PREAD                          = 153\n\tSYS_PWRITE                         = 154\n\tSYS_NFSSVC                         = 155\n\tSYS_STATFS                         = 157\n\tSYS_FSTATFS                        = 158\n\tSYS_UNMOUNT                        = 159\n\tSYS_GETFH                          = 161\n\tSYS_QUOTACTL                       = 165\n\tSYS_MOUNT                          = 167\n\tSYS_CSOPS                          = 169\n\tSYS_CSOPS_AUDITTOKEN               = 170\n\tSYS_WAITID                         = 173\n\tSYS_KDEBUG_TYPEFILTER              = 177\n\tSYS_KDEBUG_TRACE_STRING            = 178\n\tSYS_KDEBUG_TRACE64                 = 179\n\tSYS_KDEBUG_TRACE                   = 180\n\tSYS_SETGID                         = 181\n\tSYS_SETEGID                        = 182\n\tSYS_SETEUID                        = 183\n\tSYS_SIGRETURN                      = 184\n\tSYS_THREAD_SELFCOUNTS              = 186\n\tSYS_FDATASYNC                      = 187\n\tSYS_STAT                           = 188\n\tSYS_FSTAT                          = 189\n\tSYS_LSTAT                          = 190\n\tSYS_PATHCONF                       = 191\n\tSYS_FPATHCONF                      = 192\n\tSYS_GETRLIMIT                      = 194\n\tSYS_SETRLIMIT                      = 195\n\tSYS_GETDIRENTRIES                  = 196\n\tSYS_MMAP                           = 197\n\tSYS_LSEEK                          = 199\n\tSYS_TRUNCATE                       = 200\n\tSYS_FTRUNCATE                      = 201\n\tSYS_SYSCTL                         = 202\n\tSYS_MLOCK                          = 203\n\tSYS_MUNLOCK                        = 204\n\tSYS_UNDELETE                       = 205\n\tSYS_OPEN_DPROTECTED_NP             = 216\n\tSYS_GETATTRLIST                    = 220\n\tSYS_SETATTRLIST                    = 221\n\tSYS_GETDIRENTRIESATTR              = 222\n\tSYS_EXCHANGEDATA                   = 223\n\tSYS_SEARCHFS                       = 225\n\tSYS_DELETE                         = 226\n\tSYS_COPYFILE                       = 227\n\tSYS_FGETATTRLIST                   = 228\n\tSYS_FSETATTRLIST                   = 229\n\tSYS_POLL                           = 230\n\tSYS_WATCHEVENT                     = 231\n\tSYS_WAITEVENT                      = 232\n\tSYS_MODWATCH                       = 233\n\tSYS_GETXATTR                       = 234\n\tSYS_FGETXATTR                      = 235\n\tSYS_SETXATTR                       = 236\n\tSYS_FSETXATTR                      = 237\n\tSYS_REMOVEXATTR                    = 238\n\tSYS_FREMOVEXATTR                   = 239\n\tSYS_LISTXATTR                      = 240\n\tSYS_FLISTXATTR                     = 241\n\tSYS_FSCTL                          = 242\n\tSYS_INITGROUPS                     = 243\n\tSYS_POSIX_SPAWN                    = 244\n\tSYS_FFSCTL                         = 245\n\tSYS_NFSCLNT                        = 247\n\tSYS_FHOPEN                         = 248\n\tSYS_MINHERIT                       = 250\n\tSYS_SEMSYS                         = 251\n\tSYS_MSGSYS                         = 252\n\tSYS_SHMSYS                         = 253\n\tSYS_SEMCTL                         = 254\n\tSYS_SEMGET                         = 255\n\tSYS_SEMOP                          = 256\n\tSYS_MSGCTL                         = 258\n\tSYS_MSGGET                         = 259\n\tSYS_MSGSND                         = 260\n\tSYS_MSGRCV                         = 261\n\tSYS_SHMAT                          = 262\n\tSYS_SHMCTL                         = 263\n\tSYS_SHMDT                          = 264\n\tSYS_SHMGET                         = 265\n\tSYS_SHM_OPEN                       = 266\n\tSYS_SHM_UNLINK                     = 267\n\tSYS_SEM_OPEN                       = 268\n\tSYS_SEM_CLOSE                      = 269\n\tSYS_SEM_UNLINK                     = 270\n\tSYS_SEM_WAIT                       = 271\n\tSYS_SEM_TRYWAIT                    = 272\n\tSYS_SEM_POST                       = 273\n\tSYS_SYSCTLBYNAME                   = 274\n\tSYS_OPEN_EXTENDED                  = 277\n\tSYS_UMASK_EXTENDED                 = 278\n\tSYS_STAT_EXTENDED                  = 279\n\tSYS_LSTAT_EXTENDED                 = 280\n\tSYS_FSTAT_EXTENDED                 = 281\n\tSYS_CHMOD_EXTENDED                 = 282\n\tSYS_FCHMOD_EXTENDED                = 283\n\tSYS_ACCESS_EXTENDED                = 284\n\tSYS_SETTID                         = 285\n\tSYS_GETTID                         = 286\n\tSYS_SETSGROUPS                     = 287\n\tSYS_GETSGROUPS                     = 288\n\tSYS_SETWGROUPS                     = 289\n\tSYS_GETWGROUPS                     = 290\n\tSYS_MKFIFO_EXTENDED                = 291\n\tSYS_MKDIR_EXTENDED                 = 292\n\tSYS_IDENTITYSVC                    = 293\n\tSYS_SHARED_REGION_CHECK_NP         = 294\n\tSYS_VM_PRESSURE_MONITOR            = 296\n\tSYS_PSYNCH_RW_LONGRDLOCK           = 297\n\tSYS_PSYNCH_RW_YIELDWRLOCK          = 298\n\tSYS_PSYNCH_RW_DOWNGRADE            = 299\n\tSYS_PSYNCH_RW_UPGRADE              = 300\n\tSYS_PSYNCH_MUTEXWAIT               = 301\n\tSYS_PSYNCH_MUTEXDROP               = 302\n\tSYS_PSYNCH_CVBROAD                 = 303\n\tSYS_PSYNCH_CVSIGNAL                = 304\n\tSYS_PSYNCH_CVWAIT                  = 305\n\tSYS_PSYNCH_RW_RDLOCK               = 306\n\tSYS_PSYNCH_RW_WRLOCK               = 307\n\tSYS_PSYNCH_RW_UNLOCK               = 308\n\tSYS_PSYNCH_RW_UNLOCK2              = 309\n\tSYS_GETSID                         = 310\n\tSYS_SETTID_WITH_PID                = 311\n\tSYS_PSYNCH_CVCLRPREPOST            = 312\n\tSYS_AIO_FSYNC                      = 313\n\tSYS_AIO_RETURN                     = 314\n\tSYS_AIO_SUSPEND                    = 315\n\tSYS_AIO_CANCEL                     = 316\n\tSYS_AIO_ERROR                      = 317\n\tSYS_AIO_READ                       = 318\n\tSYS_AIO_WRITE                      = 319\n\tSYS_LIO_LISTIO                     = 320\n\tSYS_IOPOLICYSYS                    = 322\n\tSYS_PROCESS_POLICY                 = 323\n\tSYS_MLOCKALL                       = 324\n\tSYS_MUNLOCKALL                     = 325\n\tSYS_ISSETUGID                      = 327\n\tSYS___PTHREAD_KILL                 = 328\n\tSYS___PTHREAD_SIGMASK              = 329\n\tSYS___SIGWAIT                      = 330\n\tSYS___DISABLE_THREADSIGNAL         = 331\n\tSYS___PTHREAD_MARKCANCEL           = 332\n\tSYS___PTHREAD_CANCELED             = 333\n\tSYS___SEMWAIT_SIGNAL               = 334\n\tSYS_PROC_INFO                      = 336\n\tSYS_SENDFILE                       = 337\n\tSYS_STAT64                         = 338\n\tSYS_FSTAT64                        = 339\n\tSYS_LSTAT64                        = 340\n\tSYS_STAT64_EXTENDED                = 341\n\tSYS_LSTAT64_EXTENDED               = 342\n\tSYS_FSTAT64_EXTENDED               = 343\n\tSYS_GETDIRENTRIES64                = 344\n\tSYS_STATFS64                       = 345\n\tSYS_FSTATFS64                      = 346\n\tSYS_GETFSSTAT64                    = 347\n\tSYS___PTHREAD_CHDIR                = 348\n\tSYS___PTHREAD_FCHDIR               = 349\n\tSYS_AUDIT                          = 350\n\tSYS_AUDITON                        = 351\n\tSYS_GETAUID                        = 353\n\tSYS_SETAUID                        = 354\n\tSYS_GETAUDIT_ADDR                  = 357\n\tSYS_SETAUDIT_ADDR                  = 358\n\tSYS_AUDITCTL                       = 359\n\tSYS_BSDTHREAD_CREATE               = 360\n\tSYS_BSDTHREAD_TERMINATE            = 361\n\tSYS_KQUEUE                         = 362\n\tSYS_KEVENT                         = 363\n\tSYS_LCHOWN                         = 364\n\tSYS_BSDTHREAD_REGISTER             = 366\n\tSYS_WORKQ_OPEN                     = 367\n\tSYS_WORKQ_KERNRETURN               = 368\n\tSYS_KEVENT64                       = 369\n\tSYS___OLD_SEMWAIT_SIGNAL           = 370\n\tSYS___OLD_SEMWAIT_SIGNAL_NOCANCEL  = 371\n\tSYS_THREAD_SELFID                  = 372\n\tSYS_LEDGER                         = 373\n\tSYS_KEVENT_QOS                     = 374\n\tSYS_KEVENT_ID                      = 375\n\tSYS___MAC_EXECVE                   = 380\n\tSYS___MAC_SYSCALL                  = 381\n\tSYS___MAC_GET_FILE                 = 382\n\tSYS___MAC_SET_FILE                 = 383\n\tSYS___MAC_GET_LINK                 = 384\n\tSYS___MAC_SET_LINK                 = 385\n\tSYS___MAC_GET_PROC                 = 386\n\tSYS___MAC_SET_PROC                 = 387\n\tSYS___MAC_GET_FD                   = 388\n\tSYS___MAC_SET_FD                   = 389\n\tSYS___MAC_GET_PID                  = 390\n\tSYS_PSELECT                        = 394\n\tSYS_PSELECT_NOCANCEL               = 395\n\tSYS_READ_NOCANCEL                  = 396\n\tSYS_WRITE_NOCANCEL                 = 397\n\tSYS_OPEN_NOCANCEL                  = 398\n\tSYS_CLOSE_NOCANCEL                 = 399\n\tSYS_WAIT4_NOCANCEL                 = 400\n\tSYS_RECVMSG_NOCANCEL               = 401\n\tSYS_SENDMSG_NOCANCEL               = 402\n\tSYS_RECVFROM_NOCANCEL              = 403\n\tSYS_ACCEPT_NOCANCEL                = 404\n\tSYS_MSYNC_NOCANCEL                 = 405\n\tSYS_FCNTL_NOCANCEL                 = 406\n\tSYS_SELECT_NOCANCEL                = 407\n\tSYS_FSYNC_NOCANCEL                 = 408\n\tSYS_CONNECT_NOCANCEL               = 409\n\tSYS_SIGSUSPEND_NOCANCEL            = 410\n\tSYS_READV_NOCANCEL                 = 411\n\tSYS_WRITEV_NOCANCEL                = 412\n\tSYS_SENDTO_NOCANCEL                = 413\n\tSYS_PREAD_NOCANCEL                 = 414\n\tSYS_PWRITE_NOCANCEL                = 415\n\tSYS_WAITID_NOCANCEL                = 416\n\tSYS_POLL_NOCANCEL                  = 417\n\tSYS_MSGSND_NOCANCEL                = 418\n\tSYS_MSGRCV_NOCANCEL                = 419\n\tSYS_SEM_WAIT_NOCANCEL              = 420\n\tSYS_AIO_SUSPEND_NOCANCEL           = 421\n\tSYS___SIGWAIT_NOCANCEL             = 422\n\tSYS___SEMWAIT_SIGNAL_NOCANCEL      = 423\n\tSYS___MAC_MOUNT                    = 424\n\tSYS___MAC_GET_MOUNT                = 425\n\tSYS___MAC_GETFSSTAT                = 426\n\tSYS_FSGETPATH                      = 427\n\tSYS_AUDIT_SESSION_SELF             = 428\n\tSYS_AUDIT_SESSION_JOIN             = 429\n\tSYS_FILEPORT_MAKEPORT              = 430\n\tSYS_FILEPORT_MAKEFD                = 431\n\tSYS_AUDIT_SESSION_PORT             = 432\n\tSYS_PID_SUSPEND                    = 433\n\tSYS_PID_RESUME                     = 434\n\tSYS_PID_HIBERNATE                  = 435\n\tSYS_PID_SHUTDOWN_SOCKETS           = 436\n\tSYS_SHARED_REGION_MAP_AND_SLIDE_NP = 438\n\tSYS_KAS_INFO                       = 439\n\tSYS_MEMORYSTATUS_CONTROL           = 440\n\tSYS_GUARDED_OPEN_NP                = 441\n\tSYS_GUARDED_CLOSE_NP               = 442\n\tSYS_GUARDED_KQUEUE_NP              = 443\n\tSYS_CHANGE_FDGUARD_NP              = 444\n\tSYS_USRCTL                         = 445\n\tSYS_PROC_RLIMIT_CONTROL            = 446\n\tSYS_CONNECTX                       = 447\n\tSYS_DISCONNECTX                    = 448\n\tSYS_PEELOFF                        = 449\n\tSYS_SOCKET_DELEGATE                = 450\n\tSYS_TELEMETRY                      = 451\n\tSYS_PROC_UUID_POLICY               = 452\n\tSYS_MEMORYSTATUS_GET_LEVEL         = 453\n\tSYS_SYSTEM_OVERRIDE                = 454\n\tSYS_VFS_PURGE                      = 455\n\tSYS_SFI_CTL                        = 456\n\tSYS_SFI_PIDCTL                     = 457\n\tSYS_COALITION                      = 458\n\tSYS_COALITION_INFO                 = 459\n\tSYS_NECP_MATCH_POLICY              = 460\n\tSYS_GETATTRLISTBULK                = 461\n\tSYS_CLONEFILEAT                    = 462\n\tSYS_OPENAT                         = 463\n\tSYS_OPENAT_NOCANCEL                = 464\n\tSYS_RENAMEAT                       = 465\n\tSYS_FACCESSAT                      = 466\n\tSYS_FCHMODAT                       = 467\n\tSYS_FCHOWNAT                       = 468\n\tSYS_FSTATAT                        = 469\n\tSYS_FSTATAT64                      = 470\n\tSYS_LINKAT                         = 471\n\tSYS_UNLINKAT                       = 472\n\tSYS_READLINKAT                     = 473\n\tSYS_SYMLINKAT                      = 474\n\tSYS_MKDIRAT                        = 475\n\tSYS_GETATTRLISTAT                  = 476\n\tSYS_PROC_TRACE_LOG                 = 477\n\tSYS_BSDTHREAD_CTL                  = 478\n\tSYS_OPENBYID_NP                    = 479\n\tSYS_RECVMSG_X                      = 480\n\tSYS_SENDMSG_X                      = 481\n\tSYS_THREAD_SELFUSAGE               = 482\n\tSYS_CSRCTL                         = 483\n\tSYS_GUARDED_OPEN_DPROTECTED_NP     = 484\n\tSYS_GUARDED_WRITE_NP               = 485\n\tSYS_GUARDED_PWRITE_NP              = 486\n\tSYS_GUARDED_WRITEV_NP              = 487\n\tSYS_RENAMEATX_NP                   = 488\n\tSYS_MREMAP_ENCRYPTED               = 489\n\tSYS_NETAGENT_TRIGGER               = 490\n\tSYS_STACK_SNAPSHOT_WITH_CONFIG     = 491\n\tSYS_MICROSTACKSHOT                 = 492\n\tSYS_GRAB_PGO_DATA                  = 493\n\tSYS_PERSONA                        = 494\n\tSYS_WORK_INTERVAL_CTL              = 499\n\tSYS_GETENTROPY                     = 500\n\tSYS_NECP_OPEN                      = 501\n\tSYS_NECP_CLIENT_ACTION             = 502\n\tSYS___NEXUS_OPEN                   = 503\n\tSYS___NEXUS_REGISTER               = 504\n\tSYS___NEXUS_DEREGISTER             = 505\n\tSYS___NEXUS_CREATE                 = 506\n\tSYS___NEXUS_DESTROY                = 507\n\tSYS___NEXUS_GET_OPT                = 508\n\tSYS___NEXUS_SET_OPT                = 509\n\tSYS___CHANNEL_OPEN                 = 510\n\tSYS___CHANNEL_GET_INFO             = 511\n\tSYS___CHANNEL_SYNC                 = 512\n\tSYS___CHANNEL_GET_OPT              = 513\n\tSYS___CHANNEL_SET_OPT              = 514\n\tSYS_ULOCK_WAIT                     = 515\n\tSYS_ULOCK_WAKE                     = 516\n\tSYS_FCLONEFILEAT                   = 517\n\tSYS_FS_SNAPSHOT                    = 518\n\tSYS_TERMINATE_WITH_PAYLOAD         = 520\n\tSYS_ABORT_WITH_PAYLOAD             = 521\n\tSYS_NECP_SESSION_OPEN              = 522\n\tSYS_NECP_SESSION_ACTION            = 523\n\tSYS_SETATTRLISTAT                  = 524\n\tSYS_NET_QOS_GUIDELINE              = 525\n\tSYS_FMOUNT                         = 526\n\tSYS_NTP_ADJTIME                    = 527\n\tSYS_NTP_GETTIME                    = 528\n\tSYS_OS_FAULT_WITH_PAYLOAD          = 529\n\tSYS_MAXSYSCALL                     = 530\n\tSYS_INVALID                        = 63\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_darwin_arm64.go",
    "content": "// go run mksysnum.go /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.1.sdk/usr/include/sys/syscall.h\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build arm64,darwin\n\npackage unix\n\nconst (\n\tSYS_SYSCALL                        = 0\n\tSYS_EXIT                           = 1\n\tSYS_FORK                           = 2\n\tSYS_READ                           = 3\n\tSYS_WRITE                          = 4\n\tSYS_OPEN                           = 5\n\tSYS_CLOSE                          = 6\n\tSYS_WAIT4                          = 7\n\tSYS_LINK                           = 9\n\tSYS_UNLINK                         = 10\n\tSYS_CHDIR                          = 12\n\tSYS_FCHDIR                         = 13\n\tSYS_MKNOD                          = 14\n\tSYS_CHMOD                          = 15\n\tSYS_CHOWN                          = 16\n\tSYS_GETFSSTAT                      = 18\n\tSYS_GETPID                         = 20\n\tSYS_SETUID                         = 23\n\tSYS_GETUID                         = 24\n\tSYS_GETEUID                        = 25\n\tSYS_PTRACE                         = 26\n\tSYS_RECVMSG                        = 27\n\tSYS_SENDMSG                        = 28\n\tSYS_RECVFROM                       = 29\n\tSYS_ACCEPT                         = 30\n\tSYS_GETPEERNAME                    = 31\n\tSYS_GETSOCKNAME                    = 32\n\tSYS_ACCESS                         = 33\n\tSYS_CHFLAGS                        = 34\n\tSYS_FCHFLAGS                       = 35\n\tSYS_SYNC                           = 36\n\tSYS_KILL                           = 37\n\tSYS_GETPPID                        = 39\n\tSYS_DUP                            = 41\n\tSYS_PIPE                           = 42\n\tSYS_GETEGID                        = 43\n\tSYS_SIGACTION                      = 46\n\tSYS_GETGID                         = 47\n\tSYS_SIGPROCMASK                    = 48\n\tSYS_GETLOGIN                       = 49\n\tSYS_SETLOGIN                       = 50\n\tSYS_ACCT                           = 51\n\tSYS_SIGPENDING                     = 52\n\tSYS_SIGALTSTACK                    = 53\n\tSYS_IOCTL                          = 54\n\tSYS_REBOOT                         = 55\n\tSYS_REVOKE                         = 56\n\tSYS_SYMLINK                        = 57\n\tSYS_READLINK                       = 58\n\tSYS_EXECVE                         = 59\n\tSYS_UMASK                          = 60\n\tSYS_CHROOT                         = 61\n\tSYS_MSYNC                          = 65\n\tSYS_VFORK                          = 66\n\tSYS_MUNMAP                         = 73\n\tSYS_MPROTECT                       = 74\n\tSYS_MADVISE                        = 75\n\tSYS_MINCORE                        = 78\n\tSYS_GETGROUPS                      = 79\n\tSYS_SETGROUPS                      = 80\n\tSYS_GETPGRP                        = 81\n\tSYS_SETPGID                        = 82\n\tSYS_SETITIMER                      = 83\n\tSYS_SWAPON                         = 85\n\tSYS_GETITIMER                      = 86\n\tSYS_GETDTABLESIZE                  = 89\n\tSYS_DUP2                           = 90\n\tSYS_FCNTL                          = 92\n\tSYS_SELECT                         = 93\n\tSYS_FSYNC                          = 95\n\tSYS_SETPRIORITY                    = 96\n\tSYS_SOCKET                         = 97\n\tSYS_CONNECT                        = 98\n\tSYS_GETPRIORITY                    = 100\n\tSYS_BIND                           = 104\n\tSYS_SETSOCKOPT                     = 105\n\tSYS_LISTEN                         = 106\n\tSYS_SIGSUSPEND                     = 111\n\tSYS_GETTIMEOFDAY                   = 116\n\tSYS_GETRUSAGE                      = 117\n\tSYS_GETSOCKOPT                     = 118\n\tSYS_READV                          = 120\n\tSYS_WRITEV                         = 121\n\tSYS_SETTIMEOFDAY                   = 122\n\tSYS_FCHOWN                         = 123\n\tSYS_FCHMOD                         = 124\n\tSYS_SETREUID                       = 126\n\tSYS_SETREGID                       = 127\n\tSYS_RENAME                         = 128\n\tSYS_FLOCK                          = 131\n\tSYS_MKFIFO                         = 132\n\tSYS_SENDTO                         = 133\n\tSYS_SHUTDOWN                       = 134\n\tSYS_SOCKETPAIR                     = 135\n\tSYS_MKDIR                          = 136\n\tSYS_RMDIR                          = 137\n\tSYS_UTIMES                         = 138\n\tSYS_FUTIMES                        = 139\n\tSYS_ADJTIME                        = 140\n\tSYS_GETHOSTUUID                    = 142\n\tSYS_SETSID                         = 147\n\tSYS_GETPGID                        = 151\n\tSYS_SETPRIVEXEC                    = 152\n\tSYS_PREAD                          = 153\n\tSYS_PWRITE                         = 154\n\tSYS_NFSSVC                         = 155\n\tSYS_STATFS                         = 157\n\tSYS_FSTATFS                        = 158\n\tSYS_UNMOUNT                        = 159\n\tSYS_GETFH                          = 161\n\tSYS_QUOTACTL                       = 165\n\tSYS_MOUNT                          = 167\n\tSYS_CSOPS                          = 169\n\tSYS_CSOPS_AUDITTOKEN               = 170\n\tSYS_WAITID                         = 173\n\tSYS_KDEBUG_TYPEFILTER              = 177\n\tSYS_KDEBUG_TRACE_STRING            = 178\n\tSYS_KDEBUG_TRACE64                 = 179\n\tSYS_KDEBUG_TRACE                   = 180\n\tSYS_SETGID                         = 181\n\tSYS_SETEGID                        = 182\n\tSYS_SETEUID                        = 183\n\tSYS_SIGRETURN                      = 184\n\tSYS_THREAD_SELFCOUNTS              = 186\n\tSYS_FDATASYNC                      = 187\n\tSYS_STAT                           = 188\n\tSYS_FSTAT                          = 189\n\tSYS_LSTAT                          = 190\n\tSYS_PATHCONF                       = 191\n\tSYS_FPATHCONF                      = 192\n\tSYS_GETRLIMIT                      = 194\n\tSYS_SETRLIMIT                      = 195\n\tSYS_GETDIRENTRIES                  = 196\n\tSYS_MMAP                           = 197\n\tSYS_LSEEK                          = 199\n\tSYS_TRUNCATE                       = 200\n\tSYS_FTRUNCATE                      = 201\n\tSYS_SYSCTL                         = 202\n\tSYS_MLOCK                          = 203\n\tSYS_MUNLOCK                        = 204\n\tSYS_UNDELETE                       = 205\n\tSYS_OPEN_DPROTECTED_NP             = 216\n\tSYS_GETATTRLIST                    = 220\n\tSYS_SETATTRLIST                    = 221\n\tSYS_GETDIRENTRIESATTR              = 222\n\tSYS_EXCHANGEDATA                   = 223\n\tSYS_SEARCHFS                       = 225\n\tSYS_DELETE                         = 226\n\tSYS_COPYFILE                       = 227\n\tSYS_FGETATTRLIST                   = 228\n\tSYS_FSETATTRLIST                   = 229\n\tSYS_POLL                           = 230\n\tSYS_WATCHEVENT                     = 231\n\tSYS_WAITEVENT                      = 232\n\tSYS_MODWATCH                       = 233\n\tSYS_GETXATTR                       = 234\n\tSYS_FGETXATTR                      = 235\n\tSYS_SETXATTR                       = 236\n\tSYS_FSETXATTR                      = 237\n\tSYS_REMOVEXATTR                    = 238\n\tSYS_FREMOVEXATTR                   = 239\n\tSYS_LISTXATTR                      = 240\n\tSYS_FLISTXATTR                     = 241\n\tSYS_FSCTL                          = 242\n\tSYS_INITGROUPS                     = 243\n\tSYS_POSIX_SPAWN                    = 244\n\tSYS_FFSCTL                         = 245\n\tSYS_NFSCLNT                        = 247\n\tSYS_FHOPEN                         = 248\n\tSYS_MINHERIT                       = 250\n\tSYS_SEMSYS                         = 251\n\tSYS_MSGSYS                         = 252\n\tSYS_SHMSYS                         = 253\n\tSYS_SEMCTL                         = 254\n\tSYS_SEMGET                         = 255\n\tSYS_SEMOP                          = 256\n\tSYS_MSGCTL                         = 258\n\tSYS_MSGGET                         = 259\n\tSYS_MSGSND                         = 260\n\tSYS_MSGRCV                         = 261\n\tSYS_SHMAT                          = 262\n\tSYS_SHMCTL                         = 263\n\tSYS_SHMDT                          = 264\n\tSYS_SHMGET                         = 265\n\tSYS_SHM_OPEN                       = 266\n\tSYS_SHM_UNLINK                     = 267\n\tSYS_SEM_OPEN                       = 268\n\tSYS_SEM_CLOSE                      = 269\n\tSYS_SEM_UNLINK                     = 270\n\tSYS_SEM_WAIT                       = 271\n\tSYS_SEM_TRYWAIT                    = 272\n\tSYS_SEM_POST                       = 273\n\tSYS_SYSCTLBYNAME                   = 274\n\tSYS_OPEN_EXTENDED                  = 277\n\tSYS_UMASK_EXTENDED                 = 278\n\tSYS_STAT_EXTENDED                  = 279\n\tSYS_LSTAT_EXTENDED                 = 280\n\tSYS_FSTAT_EXTENDED                 = 281\n\tSYS_CHMOD_EXTENDED                 = 282\n\tSYS_FCHMOD_EXTENDED                = 283\n\tSYS_ACCESS_EXTENDED                = 284\n\tSYS_SETTID                         = 285\n\tSYS_GETTID                         = 286\n\tSYS_SETSGROUPS                     = 287\n\tSYS_GETSGROUPS                     = 288\n\tSYS_SETWGROUPS                     = 289\n\tSYS_GETWGROUPS                     = 290\n\tSYS_MKFIFO_EXTENDED                = 291\n\tSYS_MKDIR_EXTENDED                 = 292\n\tSYS_IDENTITYSVC                    = 293\n\tSYS_SHARED_REGION_CHECK_NP         = 294\n\tSYS_VM_PRESSURE_MONITOR            = 296\n\tSYS_PSYNCH_RW_LONGRDLOCK           = 297\n\tSYS_PSYNCH_RW_YIELDWRLOCK          = 298\n\tSYS_PSYNCH_RW_DOWNGRADE            = 299\n\tSYS_PSYNCH_RW_UPGRADE              = 300\n\tSYS_PSYNCH_MUTEXWAIT               = 301\n\tSYS_PSYNCH_MUTEXDROP               = 302\n\tSYS_PSYNCH_CVBROAD                 = 303\n\tSYS_PSYNCH_CVSIGNAL                = 304\n\tSYS_PSYNCH_CVWAIT                  = 305\n\tSYS_PSYNCH_RW_RDLOCK               = 306\n\tSYS_PSYNCH_RW_WRLOCK               = 307\n\tSYS_PSYNCH_RW_UNLOCK               = 308\n\tSYS_PSYNCH_RW_UNLOCK2              = 309\n\tSYS_GETSID                         = 310\n\tSYS_SETTID_WITH_PID                = 311\n\tSYS_PSYNCH_CVCLRPREPOST            = 312\n\tSYS_AIO_FSYNC                      = 313\n\tSYS_AIO_RETURN                     = 314\n\tSYS_AIO_SUSPEND                    = 315\n\tSYS_AIO_CANCEL                     = 316\n\tSYS_AIO_ERROR                      = 317\n\tSYS_AIO_READ                       = 318\n\tSYS_AIO_WRITE                      = 319\n\tSYS_LIO_LISTIO                     = 320\n\tSYS_IOPOLICYSYS                    = 322\n\tSYS_PROCESS_POLICY                 = 323\n\tSYS_MLOCKALL                       = 324\n\tSYS_MUNLOCKALL                     = 325\n\tSYS_ISSETUGID                      = 327\n\tSYS___PTHREAD_KILL                 = 328\n\tSYS___PTHREAD_SIGMASK              = 329\n\tSYS___SIGWAIT                      = 330\n\tSYS___DISABLE_THREADSIGNAL         = 331\n\tSYS___PTHREAD_MARKCANCEL           = 332\n\tSYS___PTHREAD_CANCELED             = 333\n\tSYS___SEMWAIT_SIGNAL               = 334\n\tSYS_PROC_INFO                      = 336\n\tSYS_SENDFILE                       = 337\n\tSYS_STAT64                         = 338\n\tSYS_FSTAT64                        = 339\n\tSYS_LSTAT64                        = 340\n\tSYS_STAT64_EXTENDED                = 341\n\tSYS_LSTAT64_EXTENDED               = 342\n\tSYS_FSTAT64_EXTENDED               = 343\n\tSYS_GETDIRENTRIES64                = 344\n\tSYS_STATFS64                       = 345\n\tSYS_FSTATFS64                      = 346\n\tSYS_GETFSSTAT64                    = 347\n\tSYS___PTHREAD_CHDIR                = 348\n\tSYS___PTHREAD_FCHDIR               = 349\n\tSYS_AUDIT                          = 350\n\tSYS_AUDITON                        = 351\n\tSYS_GETAUID                        = 353\n\tSYS_SETAUID                        = 354\n\tSYS_GETAUDIT_ADDR                  = 357\n\tSYS_SETAUDIT_ADDR                  = 358\n\tSYS_AUDITCTL                       = 359\n\tSYS_BSDTHREAD_CREATE               = 360\n\tSYS_BSDTHREAD_TERMINATE            = 361\n\tSYS_KQUEUE                         = 362\n\tSYS_KEVENT                         = 363\n\tSYS_LCHOWN                         = 364\n\tSYS_BSDTHREAD_REGISTER             = 366\n\tSYS_WORKQ_OPEN                     = 367\n\tSYS_WORKQ_KERNRETURN               = 368\n\tSYS_KEVENT64                       = 369\n\tSYS___OLD_SEMWAIT_SIGNAL           = 370\n\tSYS___OLD_SEMWAIT_SIGNAL_NOCANCEL  = 371\n\tSYS_THREAD_SELFID                  = 372\n\tSYS_LEDGER                         = 373\n\tSYS_KEVENT_QOS                     = 374\n\tSYS_KEVENT_ID                      = 375\n\tSYS___MAC_EXECVE                   = 380\n\tSYS___MAC_SYSCALL                  = 381\n\tSYS___MAC_GET_FILE                 = 382\n\tSYS___MAC_SET_FILE                 = 383\n\tSYS___MAC_GET_LINK                 = 384\n\tSYS___MAC_SET_LINK                 = 385\n\tSYS___MAC_GET_PROC                 = 386\n\tSYS___MAC_SET_PROC                 = 387\n\tSYS___MAC_GET_FD                   = 388\n\tSYS___MAC_SET_FD                   = 389\n\tSYS___MAC_GET_PID                  = 390\n\tSYS_PSELECT                        = 394\n\tSYS_PSELECT_NOCANCEL               = 395\n\tSYS_READ_NOCANCEL                  = 396\n\tSYS_WRITE_NOCANCEL                 = 397\n\tSYS_OPEN_NOCANCEL                  = 398\n\tSYS_CLOSE_NOCANCEL                 = 399\n\tSYS_WAIT4_NOCANCEL                 = 400\n\tSYS_RECVMSG_NOCANCEL               = 401\n\tSYS_SENDMSG_NOCANCEL               = 402\n\tSYS_RECVFROM_NOCANCEL              = 403\n\tSYS_ACCEPT_NOCANCEL                = 404\n\tSYS_MSYNC_NOCANCEL                 = 405\n\tSYS_FCNTL_NOCANCEL                 = 406\n\tSYS_SELECT_NOCANCEL                = 407\n\tSYS_FSYNC_NOCANCEL                 = 408\n\tSYS_CONNECT_NOCANCEL               = 409\n\tSYS_SIGSUSPEND_NOCANCEL            = 410\n\tSYS_READV_NOCANCEL                 = 411\n\tSYS_WRITEV_NOCANCEL                = 412\n\tSYS_SENDTO_NOCANCEL                = 413\n\tSYS_PREAD_NOCANCEL                 = 414\n\tSYS_PWRITE_NOCANCEL                = 415\n\tSYS_WAITID_NOCANCEL                = 416\n\tSYS_POLL_NOCANCEL                  = 417\n\tSYS_MSGSND_NOCANCEL                = 418\n\tSYS_MSGRCV_NOCANCEL                = 419\n\tSYS_SEM_WAIT_NOCANCEL              = 420\n\tSYS_AIO_SUSPEND_NOCANCEL           = 421\n\tSYS___SIGWAIT_NOCANCEL             = 422\n\tSYS___SEMWAIT_SIGNAL_NOCANCEL      = 423\n\tSYS___MAC_MOUNT                    = 424\n\tSYS___MAC_GET_MOUNT                = 425\n\tSYS___MAC_GETFSSTAT                = 426\n\tSYS_FSGETPATH                      = 427\n\tSYS_AUDIT_SESSION_SELF             = 428\n\tSYS_AUDIT_SESSION_JOIN             = 429\n\tSYS_FILEPORT_MAKEPORT              = 430\n\tSYS_FILEPORT_MAKEFD                = 431\n\tSYS_AUDIT_SESSION_PORT             = 432\n\tSYS_PID_SUSPEND                    = 433\n\tSYS_PID_RESUME                     = 434\n\tSYS_PID_HIBERNATE                  = 435\n\tSYS_PID_SHUTDOWN_SOCKETS           = 436\n\tSYS_SHARED_REGION_MAP_AND_SLIDE_NP = 438\n\tSYS_KAS_INFO                       = 439\n\tSYS_MEMORYSTATUS_CONTROL           = 440\n\tSYS_GUARDED_OPEN_NP                = 441\n\tSYS_GUARDED_CLOSE_NP               = 442\n\tSYS_GUARDED_KQUEUE_NP              = 443\n\tSYS_CHANGE_FDGUARD_NP              = 444\n\tSYS_USRCTL                         = 445\n\tSYS_PROC_RLIMIT_CONTROL            = 446\n\tSYS_CONNECTX                       = 447\n\tSYS_DISCONNECTX                    = 448\n\tSYS_PEELOFF                        = 449\n\tSYS_SOCKET_DELEGATE                = 450\n\tSYS_TELEMETRY                      = 451\n\tSYS_PROC_UUID_POLICY               = 452\n\tSYS_MEMORYSTATUS_GET_LEVEL         = 453\n\tSYS_SYSTEM_OVERRIDE                = 454\n\tSYS_VFS_PURGE                      = 455\n\tSYS_SFI_CTL                        = 456\n\tSYS_SFI_PIDCTL                     = 457\n\tSYS_COALITION                      = 458\n\tSYS_COALITION_INFO                 = 459\n\tSYS_NECP_MATCH_POLICY              = 460\n\tSYS_GETATTRLISTBULK                = 461\n\tSYS_CLONEFILEAT                    = 462\n\tSYS_OPENAT                         = 463\n\tSYS_OPENAT_NOCANCEL                = 464\n\tSYS_RENAMEAT                       = 465\n\tSYS_FACCESSAT                      = 466\n\tSYS_FCHMODAT                       = 467\n\tSYS_FCHOWNAT                       = 468\n\tSYS_FSTATAT                        = 469\n\tSYS_FSTATAT64                      = 470\n\tSYS_LINKAT                         = 471\n\tSYS_UNLINKAT                       = 472\n\tSYS_READLINKAT                     = 473\n\tSYS_SYMLINKAT                      = 474\n\tSYS_MKDIRAT                        = 475\n\tSYS_GETATTRLISTAT                  = 476\n\tSYS_PROC_TRACE_LOG                 = 477\n\tSYS_BSDTHREAD_CTL                  = 478\n\tSYS_OPENBYID_NP                    = 479\n\tSYS_RECVMSG_X                      = 480\n\tSYS_SENDMSG_X                      = 481\n\tSYS_THREAD_SELFUSAGE               = 482\n\tSYS_CSRCTL                         = 483\n\tSYS_GUARDED_OPEN_DPROTECTED_NP     = 484\n\tSYS_GUARDED_WRITE_NP               = 485\n\tSYS_GUARDED_PWRITE_NP              = 486\n\tSYS_GUARDED_WRITEV_NP              = 487\n\tSYS_RENAMEATX_NP                   = 488\n\tSYS_MREMAP_ENCRYPTED               = 489\n\tSYS_NETAGENT_TRIGGER               = 490\n\tSYS_STACK_SNAPSHOT_WITH_CONFIG     = 491\n\tSYS_MICROSTACKSHOT                 = 492\n\tSYS_GRAB_PGO_DATA                  = 493\n\tSYS_PERSONA                        = 494\n\tSYS_WORK_INTERVAL_CTL              = 499\n\tSYS_GETENTROPY                     = 500\n\tSYS_NECP_OPEN                      = 501\n\tSYS_NECP_CLIENT_ACTION             = 502\n\tSYS___NEXUS_OPEN                   = 503\n\tSYS___NEXUS_REGISTER               = 504\n\tSYS___NEXUS_DEREGISTER             = 505\n\tSYS___NEXUS_CREATE                 = 506\n\tSYS___NEXUS_DESTROY                = 507\n\tSYS___NEXUS_GET_OPT                = 508\n\tSYS___NEXUS_SET_OPT                = 509\n\tSYS___CHANNEL_OPEN                 = 510\n\tSYS___CHANNEL_GET_INFO             = 511\n\tSYS___CHANNEL_SYNC                 = 512\n\tSYS___CHANNEL_GET_OPT              = 513\n\tSYS___CHANNEL_SET_OPT              = 514\n\tSYS_ULOCK_WAIT                     = 515\n\tSYS_ULOCK_WAKE                     = 516\n\tSYS_FCLONEFILEAT                   = 517\n\tSYS_FS_SNAPSHOT                    = 518\n\tSYS_TERMINATE_WITH_PAYLOAD         = 520\n\tSYS_ABORT_WITH_PAYLOAD             = 521\n\tSYS_NECP_SESSION_OPEN              = 522\n\tSYS_NECP_SESSION_ACTION            = 523\n\tSYS_SETATTRLISTAT                  = 524\n\tSYS_NET_QOS_GUIDELINE              = 525\n\tSYS_FMOUNT                         = 526\n\tSYS_NTP_ADJTIME                    = 527\n\tSYS_NTP_GETTIME                    = 528\n\tSYS_OS_FAULT_WITH_PAYLOAD          = 529\n\tSYS_MAXSYSCALL                     = 530\n\tSYS_INVALID                        = 63\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_dragonfly_amd64.go",
    "content": "// go run mksysnum.go https://gitweb.dragonflybsd.org/dragonfly.git/blob_plain/HEAD:/sys/kern/syscalls.master\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build amd64,dragonfly\n\npackage unix\n\nconst (\n\t// SYS_NOSYS = 0;  // { int nosys(void); } syscall nosys_args int\n\tSYS_EXIT          = 1   // { void exit(int rval); }\n\tSYS_FORK          = 2   // { int fork(void); }\n\tSYS_READ          = 3   // { ssize_t read(int fd, void *buf, size_t nbyte); }\n\tSYS_WRITE         = 4   // { ssize_t write(int fd, const void *buf, size_t nbyte); }\n\tSYS_OPEN          = 5   // { int open(char *path, int flags, int mode); }\n\tSYS_CLOSE         = 6   // { int close(int fd); }\n\tSYS_WAIT4         = 7   // { int wait4(int pid, int *status, int options, struct rusage *rusage); } wait4 wait_args int\n\tSYS_LINK          = 9   // { int link(char *path, char *link); }\n\tSYS_UNLINK        = 10  // { int unlink(char *path); }\n\tSYS_CHDIR         = 12  // { int chdir(char *path); }\n\tSYS_FCHDIR        = 13  // { int fchdir(int fd); }\n\tSYS_MKNOD         = 14  // { int mknod(char *path, int mode, int dev); }\n\tSYS_CHMOD         = 15  // { int chmod(char *path, int mode); }\n\tSYS_CHOWN         = 16  // { int chown(char *path, int uid, int gid); }\n\tSYS_OBREAK        = 17  // { int obreak(char *nsize); } break obreak_args int\n\tSYS_GETFSSTAT     = 18  // { int getfsstat(struct statfs *buf, long bufsize, int flags); }\n\tSYS_GETPID        = 20  // { pid_t getpid(void); }\n\tSYS_MOUNT         = 21  // { int mount(char *type, char *path, int flags, caddr_t data); }\n\tSYS_UNMOUNT       = 22  // { int unmount(char *path, int flags); }\n\tSYS_SETUID        = 23  // { int setuid(uid_t uid); }\n\tSYS_GETUID        = 24  // { uid_t getuid(void); }\n\tSYS_GETEUID       = 25  // { uid_t geteuid(void); }\n\tSYS_PTRACE        = 26  // { int ptrace(int req, pid_t pid, caddr_t addr, int data); }\n\tSYS_RECVMSG       = 27  // { int recvmsg(int s, struct msghdr *msg, int flags); }\n\tSYS_SENDMSG       = 28  // { int sendmsg(int s, caddr_t msg, int flags); }\n\tSYS_RECVFROM      = 29  // { int recvfrom(int s, caddr_t buf, size_t len, int flags, caddr_t from, int *fromlenaddr); }\n\tSYS_ACCEPT        = 30  // { int accept(int s, caddr_t name, int *anamelen); }\n\tSYS_GETPEERNAME   = 31  // { int getpeername(int fdes, caddr_t asa, int *alen); }\n\tSYS_GETSOCKNAME   = 32  // { int getsockname(int fdes, caddr_t asa, int *alen); }\n\tSYS_ACCESS        = 33  // { int access(char *path, int flags); }\n\tSYS_CHFLAGS       = 34  // { int chflags(char *path, int flags); }\n\tSYS_FCHFLAGS      = 35  // { int fchflags(int fd, int flags); }\n\tSYS_SYNC          = 36  // { int sync(void); }\n\tSYS_KILL          = 37  // { int kill(int pid, int signum); }\n\tSYS_GETPPID       = 39  // { pid_t getppid(void); }\n\tSYS_DUP           = 41  // { int dup(int fd); }\n\tSYS_PIPE          = 42  // { int pipe(void); }\n\tSYS_GETEGID       = 43  // { gid_t getegid(void); }\n\tSYS_PROFIL        = 44  // { int profil(caddr_t samples, size_t size, size_t offset, u_int scale); }\n\tSYS_KTRACE        = 45  // { int ktrace(const char *fname, int ops, int facs, int pid); }\n\tSYS_GETGID        = 47  // { gid_t getgid(void); }\n\tSYS_GETLOGIN      = 49  // { int getlogin(char *namebuf, u_int namelen); }\n\tSYS_SETLOGIN      = 50  // { int setlogin(char *namebuf); }\n\tSYS_ACCT          = 51  // { int acct(char *path); }\n\tSYS_SIGALTSTACK   = 53  // { int sigaltstack(stack_t *ss, stack_t *oss); }\n\tSYS_IOCTL         = 54  // { int ioctl(int fd, u_long com, caddr_t data); }\n\tSYS_REBOOT        = 55  // { int reboot(int opt); }\n\tSYS_REVOKE        = 56  // { int revoke(char *path); }\n\tSYS_SYMLINK       = 57  // { int symlink(char *path, char *link); }\n\tSYS_READLINK      = 58  // { int readlink(char *path, char *buf, int count); }\n\tSYS_EXECVE        = 59  // { int execve(char *fname, char **argv, char **envv); }\n\tSYS_UMASK         = 60  // { int umask(int newmask); } umask umask_args int\n\tSYS_CHROOT        = 61  // { int chroot(char *path); }\n\tSYS_MSYNC         = 65  // { int msync(void *addr, size_t len, int flags); }\n\tSYS_VFORK         = 66  // { pid_t vfork(void); }\n\tSYS_SBRK          = 69  // { int sbrk(int incr); }\n\tSYS_SSTK          = 70  // { int sstk(int incr); }\n\tSYS_MUNMAP        = 73  // { int munmap(void *addr, size_t len); }\n\tSYS_MPROTECT      = 74  // { int mprotect(void *addr, size_t len, int prot); }\n\tSYS_MADVISE       = 75  // { int madvise(void *addr, size_t len, int behav); }\n\tSYS_MINCORE       = 78  // { int mincore(const void *addr, size_t len, char *vec); }\n\tSYS_GETGROUPS     = 79  // { int getgroups(u_int gidsetsize, gid_t *gidset); }\n\tSYS_SETGROUPS     = 80  // { int setgroups(u_int gidsetsize, gid_t *gidset); }\n\tSYS_GETPGRP       = 81  // { int getpgrp(void); }\n\tSYS_SETPGID       = 82  // { int setpgid(int pid, int pgid); }\n\tSYS_SETITIMER     = 83  // { int setitimer(u_int which, struct itimerval *itv, struct itimerval *oitv); }\n\tSYS_SWAPON        = 85  // { int swapon(char *name); }\n\tSYS_GETITIMER     = 86  // { int getitimer(u_int which, struct itimerval *itv); }\n\tSYS_GETDTABLESIZE = 89  // { int getdtablesize(void); }\n\tSYS_DUP2          = 90  // { int dup2(int from, int to); }\n\tSYS_FCNTL         = 92  // { int fcntl(int fd, int cmd, long arg); }\n\tSYS_SELECT        = 93  // { int select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }\n\tSYS_FSYNC         = 95  // { int fsync(int fd); }\n\tSYS_SETPRIORITY   = 96  // { int setpriority(int which, int who, int prio); }\n\tSYS_SOCKET        = 97  // { int socket(int domain, int type, int protocol); }\n\tSYS_CONNECT       = 98  // { int connect(int s, caddr_t name, int namelen); }\n\tSYS_GETPRIORITY   = 100 // { int getpriority(int which, int who); }\n\tSYS_BIND          = 104 // { int bind(int s, caddr_t name, int namelen); }\n\tSYS_SETSOCKOPT    = 105 // { int setsockopt(int s, int level, int name, caddr_t val, int valsize); }\n\tSYS_LISTEN        = 106 // { int listen(int s, int backlog); }\n\tSYS_GETTIMEOFDAY  = 116 // { int gettimeofday(struct timeval *tp, struct timezone *tzp); }\n\tSYS_GETRUSAGE     = 117 // { int getrusage(int who, struct rusage *rusage); }\n\tSYS_GETSOCKOPT    = 118 // { int getsockopt(int s, int level, int name, caddr_t val, int *avalsize); }\n\tSYS_READV         = 120 // { int readv(int fd, struct iovec *iovp, u_int iovcnt); }\n\tSYS_WRITEV        = 121 // { int writev(int fd, struct iovec *iovp, u_int iovcnt); }\n\tSYS_SETTIMEOFDAY  = 122 // { int settimeofday(struct timeval *tv, struct timezone *tzp); }\n\tSYS_FCHOWN        = 123 // { int fchown(int fd, int uid, int gid); }\n\tSYS_FCHMOD        = 124 // { int fchmod(int fd, int mode); }\n\tSYS_SETREUID      = 126 // { int setreuid(int ruid, int euid); }\n\tSYS_SETREGID      = 127 // { int setregid(int rgid, int egid); }\n\tSYS_RENAME        = 128 // { int rename(char *from, char *to); }\n\tSYS_FLOCK         = 131 // { int flock(int fd, int how); }\n\tSYS_MKFIFO        = 132 // { int mkfifo(char *path, int mode); }\n\tSYS_SENDTO        = 133 // { int sendto(int s, caddr_t buf, size_t len, int flags, caddr_t to, int tolen); }\n\tSYS_SHUTDOWN      = 134 // { int shutdown(int s, int how); }\n\tSYS_SOCKETPAIR    = 135 // { int socketpair(int domain, int type, int protocol, int *rsv); }\n\tSYS_MKDIR         = 136 // { int mkdir(char *path, int mode); }\n\tSYS_RMDIR         = 137 // { int rmdir(char *path); }\n\tSYS_UTIMES        = 138 // { int utimes(char *path, struct timeval *tptr); }\n\tSYS_ADJTIME       = 140 // { int adjtime(struct timeval *delta, struct timeval *olddelta); }\n\tSYS_SETSID        = 147 // { int setsid(void); }\n\tSYS_QUOTACTL      = 148 // { int quotactl(char *path, int cmd, int uid, caddr_t arg); }\n\tSYS_STATFS        = 157 // { int statfs(char *path, struct statfs *buf); }\n\tSYS_FSTATFS       = 158 // { int fstatfs(int fd, struct statfs *buf); }\n\tSYS_GETFH         = 161 // { int getfh(char *fname, struct fhandle *fhp); }\n\tSYS_GETDOMAINNAME = 162 // { int getdomainname(char *domainname, int len); }\n\tSYS_SETDOMAINNAME = 163 // { int setdomainname(char *domainname, int len); }\n\tSYS_UNAME         = 164 // { int uname(struct utsname *name); }\n\tSYS_SYSARCH       = 165 // { int sysarch(int op, char *parms); }\n\tSYS_RTPRIO        = 166 // { int rtprio(int function, pid_t pid, struct rtprio *rtp); }\n\tSYS_EXTPREAD      = 173 // { ssize_t extpread(int fd, void *buf, size_t nbyte, int flags, off_t offset); }\n\tSYS_EXTPWRITE     = 174 // { ssize_t extpwrite(int fd, const void *buf, size_t nbyte, int flags, off_t offset); }\n\tSYS_NTP_ADJTIME   = 176 // { int ntp_adjtime(struct timex *tp); }\n\tSYS_SETGID        = 181 // { int setgid(gid_t gid); }\n\tSYS_SETEGID       = 182 // { int setegid(gid_t egid); }\n\tSYS_SETEUID       = 183 // { int seteuid(uid_t euid); }\n\tSYS_PATHCONF      = 191 // { int pathconf(char *path, int name); }\n\tSYS_FPATHCONF     = 192 // { int fpathconf(int fd, int name); }\n\tSYS_GETRLIMIT     = 194 // { int getrlimit(u_int which, struct rlimit *rlp); } getrlimit __getrlimit_args int\n\tSYS_SETRLIMIT     = 195 // { int setrlimit(u_int which, struct rlimit *rlp); } setrlimit __setrlimit_args int\n\tSYS_MMAP          = 197 // { caddr_t mmap(caddr_t addr, size_t len, int prot, int flags, int fd, int pad, off_t pos); }\n\t// SYS_NOSYS = 198;  // { int nosys(void); } __syscall __syscall_args int\n\tSYS_LSEEK                  = 199 // { off_t lseek(int fd, int pad, off_t offset, int whence); }\n\tSYS_TRUNCATE               = 200 // { int truncate(char *path, int pad, off_t length); }\n\tSYS_FTRUNCATE              = 201 // { int ftruncate(int fd, int pad, off_t length); }\n\tSYS___SYSCTL               = 202 // { int __sysctl(int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } __sysctl sysctl_args int\n\tSYS_MLOCK                  = 203 // { int mlock(const void *addr, size_t len); }\n\tSYS_MUNLOCK                = 204 // { int munlock(const void *addr, size_t len); }\n\tSYS_UNDELETE               = 205 // { int undelete(char *path); }\n\tSYS_FUTIMES                = 206 // { int futimes(int fd, struct timeval *tptr); }\n\tSYS_GETPGID                = 207 // { int getpgid(pid_t pid); }\n\tSYS_POLL                   = 209 // { int poll(struct pollfd *fds, u_int nfds, int timeout); }\n\tSYS___SEMCTL               = 220 // { int __semctl(int semid, int semnum, int cmd, union semun *arg); }\n\tSYS_SEMGET                 = 221 // { int semget(key_t key, int nsems, int semflg); }\n\tSYS_SEMOP                  = 222 // { int semop(int semid, struct sembuf *sops, u_int nsops); }\n\tSYS_MSGCTL                 = 224 // { int msgctl(int msqid, int cmd, struct msqid_ds *buf); }\n\tSYS_MSGGET                 = 225 // { int msgget(key_t key, int msgflg); }\n\tSYS_MSGSND                 = 226 // { int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }\n\tSYS_MSGRCV                 = 227 // { int msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }\n\tSYS_SHMAT                  = 228 // { caddr_t shmat(int shmid, const void *shmaddr, int shmflg); }\n\tSYS_SHMCTL                 = 229 // { int shmctl(int shmid, int cmd, struct shmid_ds *buf); }\n\tSYS_SHMDT                  = 230 // { int shmdt(const void *shmaddr); }\n\tSYS_SHMGET                 = 231 // { int shmget(key_t key, size_t size, int shmflg); }\n\tSYS_CLOCK_GETTIME          = 232 // { int clock_gettime(clockid_t clock_id, struct timespec *tp); }\n\tSYS_CLOCK_SETTIME          = 233 // { int clock_settime(clockid_t clock_id, const struct timespec *tp); }\n\tSYS_CLOCK_GETRES           = 234 // { int clock_getres(clockid_t clock_id, struct timespec *tp); }\n\tSYS_NANOSLEEP              = 240 // { int nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }\n\tSYS_MINHERIT               = 250 // { int minherit(void *addr, size_t len, int inherit); }\n\tSYS_RFORK                  = 251 // { int rfork(int flags); }\n\tSYS_OPENBSD_POLL           = 252 // { int openbsd_poll(struct pollfd *fds, u_int nfds, int timeout); }\n\tSYS_ISSETUGID              = 253 // { int issetugid(void); }\n\tSYS_LCHOWN                 = 254 // { int lchown(char *path, int uid, int gid); }\n\tSYS_LCHMOD                 = 274 // { int lchmod(char *path, mode_t mode); }\n\tSYS_LUTIMES                = 276 // { int lutimes(char *path, struct timeval *tptr); }\n\tSYS_EXTPREADV              = 289 // { ssize_t extpreadv(int fd, struct iovec *iovp, u_int iovcnt, int flags, off_t offset); }\n\tSYS_EXTPWRITEV             = 290 // { ssize_t extpwritev(int fd, struct iovec *iovp,u_int iovcnt, int flags, off_t offset); }\n\tSYS_FHSTATFS               = 297 // { int fhstatfs(const struct fhandle *u_fhp, struct statfs *buf); }\n\tSYS_FHOPEN                 = 298 // { int fhopen(const struct fhandle *u_fhp, int flags); }\n\tSYS_MODNEXT                = 300 // { int modnext(int modid); }\n\tSYS_MODSTAT                = 301 // { int modstat(int modid, struct module_stat* stat); }\n\tSYS_MODFNEXT               = 302 // { int modfnext(int modid); }\n\tSYS_MODFIND                = 303 // { int modfind(const char *name); }\n\tSYS_KLDLOAD                = 304 // { int kldload(const char *file); }\n\tSYS_KLDUNLOAD              = 305 // { int kldunload(int fileid); }\n\tSYS_KLDFIND                = 306 // { int kldfind(const char *file); }\n\tSYS_KLDNEXT                = 307 // { int kldnext(int fileid); }\n\tSYS_KLDSTAT                = 308 // { int kldstat(int fileid, struct kld_file_stat* stat); }\n\tSYS_KLDFIRSTMOD            = 309 // { int kldfirstmod(int fileid); }\n\tSYS_GETSID                 = 310 // { int getsid(pid_t pid); }\n\tSYS_SETRESUID              = 311 // { int setresuid(uid_t ruid, uid_t euid, uid_t suid); }\n\tSYS_SETRESGID              = 312 // { int setresgid(gid_t rgid, gid_t egid, gid_t sgid); }\n\tSYS_AIO_RETURN             = 314 // { int aio_return(struct aiocb *aiocbp); }\n\tSYS_AIO_SUSPEND            = 315 // { int aio_suspend(struct aiocb * const * aiocbp, int nent, const struct timespec *timeout); }\n\tSYS_AIO_CANCEL             = 316 // { int aio_cancel(int fd, struct aiocb *aiocbp); }\n\tSYS_AIO_ERROR              = 317 // { int aio_error(struct aiocb *aiocbp); }\n\tSYS_AIO_READ               = 318 // { int aio_read(struct aiocb *aiocbp); }\n\tSYS_AIO_WRITE              = 319 // { int aio_write(struct aiocb *aiocbp); }\n\tSYS_LIO_LISTIO             = 320 // { int lio_listio(int mode, struct aiocb * const *acb_list, int nent, struct sigevent *sig); }\n\tSYS_YIELD                  = 321 // { int yield(void); }\n\tSYS_MLOCKALL               = 324 // { int mlockall(int how); }\n\tSYS_MUNLOCKALL             = 325 // { int munlockall(void); }\n\tSYS___GETCWD               = 326 // { int __getcwd(u_char *buf, u_int buflen); }\n\tSYS_SCHED_SETPARAM         = 327 // { int sched_setparam (pid_t pid, const struct sched_param *param); }\n\tSYS_SCHED_GETPARAM         = 328 // { int sched_getparam (pid_t pid, struct sched_param *param); }\n\tSYS_SCHED_SETSCHEDULER     = 329 // { int sched_setscheduler (pid_t pid, int policy, const struct sched_param *param); }\n\tSYS_SCHED_GETSCHEDULER     = 330 // { int sched_getscheduler (pid_t pid); }\n\tSYS_SCHED_YIELD            = 331 // { int sched_yield (void); }\n\tSYS_SCHED_GET_PRIORITY_MAX = 332 // { int sched_get_priority_max (int policy); }\n\tSYS_SCHED_GET_PRIORITY_MIN = 333 // { int sched_get_priority_min (int policy); }\n\tSYS_SCHED_RR_GET_INTERVAL  = 334 // { int sched_rr_get_interval (pid_t pid, struct timespec *interval); }\n\tSYS_UTRACE                 = 335 // { int utrace(const void *addr, size_t len); }\n\tSYS_KLDSYM                 = 337 // { int kldsym(int fileid, int cmd, void *data); }\n\tSYS_JAIL                   = 338 // { int jail(struct jail *jail); }\n\tSYS_SIGPROCMASK            = 340 // { int sigprocmask(int how, const sigset_t *set, sigset_t *oset); }\n\tSYS_SIGSUSPEND             = 341 // { int sigsuspend(const sigset_t *sigmask); }\n\tSYS_SIGACTION              = 342 // { int sigaction(int sig, const struct sigaction *act, struct sigaction *oact); }\n\tSYS_SIGPENDING             = 343 // { int sigpending(sigset_t *set); }\n\tSYS_SIGRETURN              = 344 // { int sigreturn(ucontext_t *sigcntxp); }\n\tSYS_SIGTIMEDWAIT           = 345 // { int sigtimedwait(const sigset_t *set,siginfo_t *info, const struct timespec *timeout); }\n\tSYS_SIGWAITINFO            = 346 // { int sigwaitinfo(const sigset_t *set,siginfo_t *info); }\n\tSYS___ACL_GET_FILE         = 347 // { int __acl_get_file(const char *path, acl_type_t type, struct acl *aclp); }\n\tSYS___ACL_SET_FILE         = 348 // { int __acl_set_file(const char *path, acl_type_t type, struct acl *aclp); }\n\tSYS___ACL_GET_FD           = 349 // { int __acl_get_fd(int filedes, acl_type_t type, struct acl *aclp); }\n\tSYS___ACL_SET_FD           = 350 // { int __acl_set_fd(int filedes, acl_type_t type, struct acl *aclp); }\n\tSYS___ACL_DELETE_FILE      = 351 // { int __acl_delete_file(const char *path, acl_type_t type); }\n\tSYS___ACL_DELETE_FD        = 352 // { int __acl_delete_fd(int filedes, acl_type_t type); }\n\tSYS___ACL_ACLCHECK_FILE    = 353 // { int __acl_aclcheck_file(const char *path, acl_type_t type, struct acl *aclp); }\n\tSYS___ACL_ACLCHECK_FD      = 354 // { int __acl_aclcheck_fd(int filedes, acl_type_t type, struct acl *aclp); }\n\tSYS_EXTATTRCTL             = 355 // { int extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); }\n\tSYS_EXTATTR_SET_FILE       = 356 // { int extattr_set_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_GET_FILE       = 357 // { int extattr_get_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_DELETE_FILE    = 358 // { int extattr_delete_file(const char *path, int attrnamespace, const char *attrname); }\n\tSYS_AIO_WAITCOMPLETE       = 359 // { int aio_waitcomplete(struct aiocb **aiocbp, struct timespec *timeout); }\n\tSYS_GETRESUID              = 360 // { int getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); }\n\tSYS_GETRESGID              = 361 // { int getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); }\n\tSYS_KQUEUE                 = 362 // { int kqueue(void); }\n\tSYS_KEVENT                 = 363 // { int kevent(int fd, const struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); }\n\tSYS_KENV                   = 390 // { int kenv(int what, const char *name, char *value, int len); }\n\tSYS_LCHFLAGS               = 391 // { int lchflags(char *path, int flags); }\n\tSYS_UUIDGEN                = 392 // { int uuidgen(struct uuid *store, int count); }\n\tSYS_SENDFILE               = 393 // { int sendfile(int fd, int s, off_t offset, size_t nbytes, struct sf_hdtr *hdtr, off_t *sbytes, int flags); }\n\tSYS_VARSYM_SET             = 450 // { int varsym_set(int level, const char *name, const char *data); }\n\tSYS_VARSYM_GET             = 451 // { int varsym_get(int mask, const char *wild, char *buf, int bufsize); }\n\tSYS_VARSYM_LIST            = 452 // { int varsym_list(int level, char *buf, int maxsize, int *marker); }\n\tSYS_EXEC_SYS_REGISTER      = 465 // { int exec_sys_register(void *entry); }\n\tSYS_EXEC_SYS_UNREGISTER    = 466 // { int exec_sys_unregister(int id); }\n\tSYS_SYS_CHECKPOINT         = 467 // { int sys_checkpoint(int type, int fd, pid_t pid, int retval); }\n\tSYS_MOUNTCTL               = 468 // { int mountctl(const char *path, int op, int fd, const void *ctl, int ctllen, void *buf, int buflen); }\n\tSYS_UMTX_SLEEP             = 469 // { int umtx_sleep(volatile const int *ptr, int value, int timeout); }\n\tSYS_UMTX_WAKEUP            = 470 // { int umtx_wakeup(volatile const int *ptr, int count); }\n\tSYS_JAIL_ATTACH            = 471 // { int jail_attach(int jid); }\n\tSYS_SET_TLS_AREA           = 472 // { int set_tls_area(int which, struct tls_info *info, size_t infosize); }\n\tSYS_GET_TLS_AREA           = 473 // { int get_tls_area(int which, struct tls_info *info, size_t infosize); }\n\tSYS_CLOSEFROM              = 474 // { int closefrom(int fd); }\n\tSYS_STAT                   = 475 // { int stat(const char *path, struct stat *ub); }\n\tSYS_FSTAT                  = 476 // { int fstat(int fd, struct stat *sb); }\n\tSYS_LSTAT                  = 477 // { int lstat(const char *path, struct stat *ub); }\n\tSYS_FHSTAT                 = 478 // { int fhstat(const struct fhandle *u_fhp, struct stat *sb); }\n\tSYS_GETDIRENTRIES          = 479 // { int getdirentries(int fd, char *buf, u_int count, long *basep); }\n\tSYS_GETDENTS               = 480 // { int getdents(int fd, char *buf, size_t count); }\n\tSYS_USCHED_SET             = 481 // { int usched_set(pid_t pid, int cmd, void *data, int bytes); }\n\tSYS_EXTACCEPT              = 482 // { int extaccept(int s, int flags, caddr_t name, int *anamelen); }\n\tSYS_EXTCONNECT             = 483 // { int extconnect(int s, int flags, caddr_t name, int namelen); }\n\tSYS_MCONTROL               = 485 // { int mcontrol(void *addr, size_t len, int behav, off_t value); }\n\tSYS_VMSPACE_CREATE         = 486 // { int vmspace_create(void *id, int type, void *data); }\n\tSYS_VMSPACE_DESTROY        = 487 // { int vmspace_destroy(void *id); }\n\tSYS_VMSPACE_CTL            = 488 // { int vmspace_ctl(void *id, int cmd, \t\tstruct trapframe *tframe,\tstruct vextframe *vframe); }\n\tSYS_VMSPACE_MMAP           = 489 // { int vmspace_mmap(void *id, void *addr, size_t len, int prot, int flags, int fd, off_t offset); }\n\tSYS_VMSPACE_MUNMAP         = 490 // { int vmspace_munmap(void *id, void *addr,\tsize_t len); }\n\tSYS_VMSPACE_MCONTROL       = 491 // { int vmspace_mcontrol(void *id, void *addr, \tsize_t len, int behav, off_t value); }\n\tSYS_VMSPACE_PREAD          = 492 // { ssize_t vmspace_pread(void *id, void *buf, size_t nbyte, int flags, off_t offset); }\n\tSYS_VMSPACE_PWRITE         = 493 // { ssize_t vmspace_pwrite(void *id, const void *buf, size_t nbyte, int flags, off_t offset); }\n\tSYS_EXTEXIT                = 494 // { void extexit(int how, int status, void *addr); }\n\tSYS_LWP_CREATE             = 495 // { int lwp_create(struct lwp_params *params); }\n\tSYS_LWP_GETTID             = 496 // { lwpid_t lwp_gettid(void); }\n\tSYS_LWP_KILL               = 497 // { int lwp_kill(pid_t pid, lwpid_t tid, int signum); }\n\tSYS_LWP_RTPRIO             = 498 // { int lwp_rtprio(int function, pid_t pid, lwpid_t tid, struct rtprio *rtp); }\n\tSYS_PSELECT                = 499 // { int pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts,    const sigset_t *sigmask); }\n\tSYS_STATVFS                = 500 // { int statvfs(const char *path, struct statvfs *buf); }\n\tSYS_FSTATVFS               = 501 // { int fstatvfs(int fd, struct statvfs *buf); }\n\tSYS_FHSTATVFS              = 502 // { int fhstatvfs(const struct fhandle *u_fhp, struct statvfs *buf); }\n\tSYS_GETVFSSTAT             = 503 // { int getvfsstat(struct statfs *buf,          struct statvfs *vbuf, long vbufsize, int flags); }\n\tSYS_OPENAT                 = 504 // { int openat(int fd, char *path, int flags, int mode); }\n\tSYS_FSTATAT                = 505 // { int fstatat(int fd, char *path, \tstruct stat *sb, int flags); }\n\tSYS_FCHMODAT               = 506 // { int fchmodat(int fd, char *path, int mode, int flags); }\n\tSYS_FCHOWNAT               = 507 // { int fchownat(int fd, char *path, int uid, int gid, int flags); }\n\tSYS_UNLINKAT               = 508 // { int unlinkat(int fd, char *path, int flags); }\n\tSYS_FACCESSAT              = 509 // { int faccessat(int fd, char *path, int amode, int flags); }\n\tSYS_MQ_OPEN                = 510 // { mqd_t mq_open(const char * name, int oflag, mode_t mode, struct mq_attr *attr); }\n\tSYS_MQ_CLOSE               = 511 // { int mq_close(mqd_t mqdes); }\n\tSYS_MQ_UNLINK              = 512 // { int mq_unlink(const char *name); }\n\tSYS_MQ_GETATTR             = 513 // { int mq_getattr(mqd_t mqdes, struct mq_attr *mqstat); }\n\tSYS_MQ_SETATTR             = 514 // { int mq_setattr(mqd_t mqdes, const struct mq_attr *mqstat, struct mq_attr *omqstat); }\n\tSYS_MQ_NOTIFY              = 515 // { int mq_notify(mqd_t mqdes, const struct sigevent *notification); }\n\tSYS_MQ_SEND                = 516 // { int mq_send(mqd_t mqdes, const char *msg_ptr, size_t msg_len, unsigned msg_prio); }\n\tSYS_MQ_RECEIVE             = 517 // { ssize_t mq_receive(mqd_t mqdes, char *msg_ptr, size_t msg_len, unsigned *msg_prio); }\n\tSYS_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); }\n\tSYS_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); }\n\tSYS_IOPRIO_SET             = 520 // { int ioprio_set(int which, int who, int prio); }\n\tSYS_IOPRIO_GET             = 521 // { int ioprio_get(int which, int who); }\n\tSYS_CHROOT_KERNEL          = 522 // { int chroot_kernel(char *path); }\n\tSYS_RENAMEAT               = 523 // { int renameat(int oldfd, char *old, int newfd, char *new); }\n\tSYS_MKDIRAT                = 524 // { int mkdirat(int fd, char *path, mode_t mode); }\n\tSYS_MKFIFOAT               = 525 // { int mkfifoat(int fd, char *path, mode_t mode); }\n\tSYS_MKNODAT                = 526 // { int mknodat(int fd, char *path, mode_t mode, dev_t dev); }\n\tSYS_READLINKAT             = 527 // { int readlinkat(int fd, char *path, char *buf, size_t bufsize); }\n\tSYS_SYMLINKAT              = 528 // { int symlinkat(char *path1, int fd, char *path2); }\n\tSYS_SWAPOFF                = 529 // { int swapoff(char *name); }\n\tSYS_VQUOTACTL              = 530 // { int vquotactl(const char *path, struct plistref *pref); }\n\tSYS_LINKAT                 = 531 // { int linkat(int fd1, char *path1, int fd2, char *path2, int flags); }\n\tSYS_EACCESS                = 532 // { int eaccess(char *path, int flags); }\n\tSYS_LPATHCONF              = 533 // { int lpathconf(char *path, int name); }\n\tSYS_VMM_GUEST_CTL          = 534 // { int vmm_guest_ctl(int op, struct vmm_guest_options *options); }\n\tSYS_VMM_GUEST_SYNC_ADDR    = 535 // { int vmm_guest_sync_addr(long *dstaddr, long *srcaddr); }\n\tSYS_PROCCTL                = 536 // { int procctl(idtype_t idtype, id_t id, int cmd, void *data); }\n\tSYS_CHFLAGSAT              = 537 // { int chflagsat(int fd, const char *path, int flags, int atflags);}\n\tSYS_PIPE2                  = 538 // { int pipe2(int *fildes, int flags); }\n\tSYS_UTIMENSAT              = 539 // { int utimensat(int fd, const char *path, const struct timespec *ts, int flags); }\n\tSYS_FUTIMENS               = 540 // { int futimens(int fd, const struct timespec *ts); }\n\tSYS_ACCEPT4                = 541 // { int accept4(int s, caddr_t name, int *anamelen, int flags); }\n\tSYS_LWP_SETNAME            = 542 // { int lwp_setname(lwpid_t tid, const char *name); }\n\tSYS_PPOLL                  = 543 // { int ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *sigmask); }\n\tSYS_LWP_SETAFFINITY        = 544 // { int lwp_setaffinity(pid_t pid, lwpid_t tid, const cpumask_t *mask); }\n\tSYS_LWP_GETAFFINITY        = 545 // { int lwp_getaffinity(pid_t pid, lwpid_t tid, cpumask_t *mask); }\n\tSYS_LWP_CREATE2            = 546 // { int lwp_create2(struct lwp_params *params, const cpumask_t *mask); }\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go",
    "content": "// go run mksysnum.go https://svn.freebsd.org/base/stable/10/sys/kern/syscalls.master\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build 386,freebsd\n\npackage unix\n\nconst (\n\t// SYS_NOSYS = 0;  // { int nosys(void); } syscall nosys_args int\n\tSYS_EXIT                     = 1   // { void sys_exit(int rval); } exit sys_exit_args void\n\tSYS_FORK                     = 2   // { int fork(void); }\n\tSYS_READ                     = 3   // { ssize_t read(int fd, void *buf, size_t nbyte); }\n\tSYS_WRITE                    = 4   // { ssize_t write(int fd, const void *buf, size_t nbyte); }\n\tSYS_OPEN                     = 5   // { int open(char *path, int flags, int mode); }\n\tSYS_CLOSE                    = 6   // { int close(int fd); }\n\tSYS_WAIT4                    = 7   // { int wait4(int pid, int *status, int options, struct rusage *rusage); }\n\tSYS_LINK                     = 9   // { int link(char *path, char *link); }\n\tSYS_UNLINK                   = 10  // { int unlink(char *path); }\n\tSYS_CHDIR                    = 12  // { int chdir(char *path); }\n\tSYS_FCHDIR                   = 13  // { int fchdir(int fd); }\n\tSYS_MKNOD                    = 14  // { int mknod(char *path, int mode, int dev); }\n\tSYS_CHMOD                    = 15  // { int chmod(char *path, int mode); }\n\tSYS_CHOWN                    = 16  // { int chown(char *path, int uid, int gid); }\n\tSYS_OBREAK                   = 17  // { int obreak(char *nsize); } break obreak_args int\n\tSYS_GETPID                   = 20  // { pid_t getpid(void); }\n\tSYS_MOUNT                    = 21  // { int mount(char *type, char *path, int flags, caddr_t data); }\n\tSYS_UNMOUNT                  = 22  // { int unmount(char *path, int flags); }\n\tSYS_SETUID                   = 23  // { int setuid(uid_t uid); }\n\tSYS_GETUID                   = 24  // { uid_t getuid(void); }\n\tSYS_GETEUID                  = 25  // { uid_t geteuid(void); }\n\tSYS_PTRACE                   = 26  // { int ptrace(int req, pid_t pid, caddr_t addr, int data); }\n\tSYS_RECVMSG                  = 27  // { int recvmsg(int s, struct msghdr *msg, int flags); }\n\tSYS_SENDMSG                  = 28  // { int sendmsg(int s, struct msghdr *msg, int flags); }\n\tSYS_RECVFROM                 = 29  // { int recvfrom(int s, caddr_t buf, size_t len, int flags, struct sockaddr * __restrict from, __socklen_t * __restrict fromlenaddr); }\n\tSYS_ACCEPT                   = 30  // { int accept(int s, struct sockaddr * __restrict name, __socklen_t * __restrict anamelen); }\n\tSYS_GETPEERNAME              = 31  // { int getpeername(int fdes, struct sockaddr * __restrict asa, __socklen_t * __restrict alen); }\n\tSYS_GETSOCKNAME              = 32  // { int getsockname(int fdes, struct sockaddr * __restrict asa, __socklen_t * __restrict alen); }\n\tSYS_ACCESS                   = 33  // { int access(char *path, int amode); }\n\tSYS_CHFLAGS                  = 34  // { int chflags(const char *path, u_long flags); }\n\tSYS_FCHFLAGS                 = 35  // { int fchflags(int fd, u_long flags); }\n\tSYS_SYNC                     = 36  // { int sync(void); }\n\tSYS_KILL                     = 37  // { int kill(int pid, int signum); }\n\tSYS_GETPPID                  = 39  // { pid_t getppid(void); }\n\tSYS_DUP                      = 41  // { int dup(u_int fd); }\n\tSYS_PIPE                     = 42  // { int pipe(void); }\n\tSYS_GETEGID                  = 43  // { gid_t getegid(void); }\n\tSYS_PROFIL                   = 44  // { int profil(caddr_t samples, size_t size, size_t offset, u_int scale); }\n\tSYS_KTRACE                   = 45  // { int ktrace(const char *fname, int ops, int facs, int pid); }\n\tSYS_GETGID                   = 47  // { gid_t getgid(void); }\n\tSYS_GETLOGIN                 = 49  // { int getlogin(char *namebuf, u_int namelen); }\n\tSYS_SETLOGIN                 = 50  // { int setlogin(char *namebuf); }\n\tSYS_ACCT                     = 51  // { int acct(char *path); }\n\tSYS_SIGALTSTACK              = 53  // { int sigaltstack(stack_t *ss, stack_t *oss); }\n\tSYS_IOCTL                    = 54  // { int ioctl(int fd, u_long com, caddr_t data); }\n\tSYS_REBOOT                   = 55  // { int reboot(int opt); }\n\tSYS_REVOKE                   = 56  // { int revoke(char *path); }\n\tSYS_SYMLINK                  = 57  // { int symlink(char *path, char *link); }\n\tSYS_READLINK                 = 58  // { ssize_t readlink(char *path, char *buf, size_t count); }\n\tSYS_EXECVE                   = 59  // { int execve(char *fname, char **argv, char **envv); }\n\tSYS_UMASK                    = 60  // { int umask(int newmask); } umask umask_args int\n\tSYS_CHROOT                   = 61  // { int chroot(char *path); }\n\tSYS_MSYNC                    = 65  // { int msync(void *addr, size_t len, int flags); }\n\tSYS_VFORK                    = 66  // { int vfork(void); }\n\tSYS_SBRK                     = 69  // { int sbrk(int incr); }\n\tSYS_SSTK                     = 70  // { int sstk(int incr); }\n\tSYS_OVADVISE                 = 72  // { int ovadvise(int anom); } vadvise ovadvise_args int\n\tSYS_MUNMAP                   = 73  // { int munmap(void *addr, size_t len); }\n\tSYS_MPROTECT                 = 74  // { int mprotect(const void *addr, size_t len, int prot); }\n\tSYS_MADVISE                  = 75  // { int madvise(void *addr, size_t len, int behav); }\n\tSYS_MINCORE                  = 78  // { int mincore(const void *addr, size_t len, char *vec); }\n\tSYS_GETGROUPS                = 79  // { int getgroups(u_int gidsetsize, gid_t *gidset); }\n\tSYS_SETGROUPS                = 80  // { int setgroups(u_int gidsetsize, gid_t *gidset); }\n\tSYS_GETPGRP                  = 81  // { int getpgrp(void); }\n\tSYS_SETPGID                  = 82  // { int setpgid(int pid, int pgid); }\n\tSYS_SETITIMER                = 83  // { int setitimer(u_int which, struct itimerval *itv, struct itimerval *oitv); }\n\tSYS_SWAPON                   = 85  // { int swapon(char *name); }\n\tSYS_GETITIMER                = 86  // { int getitimer(u_int which, struct itimerval *itv); }\n\tSYS_GETDTABLESIZE            = 89  // { int getdtablesize(void); }\n\tSYS_DUP2                     = 90  // { int dup2(u_int from, u_int to); }\n\tSYS_FCNTL                    = 92  // { int fcntl(int fd, int cmd, long arg); }\n\tSYS_SELECT                   = 93  // { int select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }\n\tSYS_FSYNC                    = 95  // { int fsync(int fd); }\n\tSYS_SETPRIORITY              = 96  // { int setpriority(int which, int who, int prio); }\n\tSYS_SOCKET                   = 97  // { int socket(int domain, int type, int protocol); }\n\tSYS_CONNECT                  = 98  // { int connect(int s, caddr_t name, int namelen); }\n\tSYS_GETPRIORITY              = 100 // { int getpriority(int which, int who); }\n\tSYS_BIND                     = 104 // { int bind(int s, caddr_t name, int namelen); }\n\tSYS_SETSOCKOPT               = 105 // { int setsockopt(int s, int level, int name, caddr_t val, int valsize); }\n\tSYS_LISTEN                   = 106 // { int listen(int s, int backlog); }\n\tSYS_GETTIMEOFDAY             = 116 // { int gettimeofday(struct timeval *tp, struct timezone *tzp); }\n\tSYS_GETRUSAGE                = 117 // { int getrusage(int who, struct rusage *rusage); }\n\tSYS_GETSOCKOPT               = 118 // { int getsockopt(int s, int level, int name, caddr_t val, int *avalsize); }\n\tSYS_READV                    = 120 // { int readv(int fd, struct iovec *iovp, u_int iovcnt); }\n\tSYS_WRITEV                   = 121 // { int writev(int fd, struct iovec *iovp, u_int iovcnt); }\n\tSYS_SETTIMEOFDAY             = 122 // { int settimeofday(struct timeval *tv, struct timezone *tzp); }\n\tSYS_FCHOWN                   = 123 // { int fchown(int fd, int uid, int gid); }\n\tSYS_FCHMOD                   = 124 // { int fchmod(int fd, int mode); }\n\tSYS_SETREUID                 = 126 // { int setreuid(int ruid, int euid); }\n\tSYS_SETREGID                 = 127 // { int setregid(int rgid, int egid); }\n\tSYS_RENAME                   = 128 // { int rename(char *from, char *to); }\n\tSYS_FLOCK                    = 131 // { int flock(int fd, int how); }\n\tSYS_MKFIFO                   = 132 // { int mkfifo(char *path, int mode); }\n\tSYS_SENDTO                   = 133 // { int sendto(int s, caddr_t buf, size_t len, int flags, caddr_t to, int tolen); }\n\tSYS_SHUTDOWN                 = 134 // { int shutdown(int s, int how); }\n\tSYS_SOCKETPAIR               = 135 // { int socketpair(int domain, int type, int protocol, int *rsv); }\n\tSYS_MKDIR                    = 136 // { int mkdir(char *path, int mode); }\n\tSYS_RMDIR                    = 137 // { int rmdir(char *path); }\n\tSYS_UTIMES                   = 138 // { int utimes(char *path, struct timeval *tptr); }\n\tSYS_ADJTIME                  = 140 // { int adjtime(struct timeval *delta, struct timeval *olddelta); }\n\tSYS_SETSID                   = 147 // { int setsid(void); }\n\tSYS_QUOTACTL                 = 148 // { int quotactl(char *path, int cmd, int uid, caddr_t arg); }\n\tSYS_NLM_SYSCALL              = 154 // { int nlm_syscall(int debug_level, int grace_period, int addr_count, char **addrs); }\n\tSYS_NFSSVC                   = 155 // { int nfssvc(int flag, caddr_t argp); }\n\tSYS_LGETFH                   = 160 // { int lgetfh(char *fname, struct fhandle *fhp); }\n\tSYS_GETFH                    = 161 // { int getfh(char *fname, struct fhandle *fhp); }\n\tSYS_SYSARCH                  = 165 // { int sysarch(int op, char *parms); }\n\tSYS_RTPRIO                   = 166 // { int rtprio(int function, pid_t pid, struct rtprio *rtp); }\n\tSYS_SEMSYS                   = 169 // { int semsys(int which, int a2, int a3, int a4, int a5); }\n\tSYS_MSGSYS                   = 170 // { int msgsys(int which, int a2, int a3, int a4, int a5, int a6); }\n\tSYS_SHMSYS                   = 171 // { int shmsys(int which, int a2, int a3, int a4); }\n\tSYS_FREEBSD6_PREAD           = 173 // { ssize_t freebsd6_pread(int fd, void *buf, size_t nbyte, int pad, off_t offset); }\n\tSYS_FREEBSD6_PWRITE          = 174 // { ssize_t freebsd6_pwrite(int fd, const void *buf, size_t nbyte, int pad, off_t offset); }\n\tSYS_SETFIB                   = 175 // { int setfib(int fibnum); }\n\tSYS_NTP_ADJTIME              = 176 // { int ntp_adjtime(struct timex *tp); }\n\tSYS_SETGID                   = 181 // { int setgid(gid_t gid); }\n\tSYS_SETEGID                  = 182 // { int setegid(gid_t egid); }\n\tSYS_SETEUID                  = 183 // { int seteuid(uid_t euid); }\n\tSYS_STAT                     = 188 // { int stat(char *path, struct stat *ub); }\n\tSYS_FSTAT                    = 189 // { int fstat(int fd, struct stat *sb); }\n\tSYS_LSTAT                    = 190 // { int lstat(char *path, struct stat *ub); }\n\tSYS_PATHCONF                 = 191 // { int pathconf(char *path, int name); }\n\tSYS_FPATHCONF                = 192 // { int fpathconf(int fd, int name); }\n\tSYS_GETRLIMIT                = 194 // { int getrlimit(u_int which, struct rlimit *rlp); } getrlimit __getrlimit_args int\n\tSYS_SETRLIMIT                = 195 // { int setrlimit(u_int which, struct rlimit *rlp); } setrlimit __setrlimit_args int\n\tSYS_GETDIRENTRIES            = 196 // { int getdirentries(int fd, char *buf, u_int count, long *basep); }\n\tSYS_FREEBSD6_MMAP            = 197 // { caddr_t freebsd6_mmap(caddr_t addr, size_t len, int prot, int flags, int fd, int pad, off_t pos); }\n\tSYS_FREEBSD6_LSEEK           = 199 // { off_t freebsd6_lseek(int fd, int pad, off_t offset, int whence); }\n\tSYS_FREEBSD6_TRUNCATE        = 200 // { int freebsd6_truncate(char *path, int pad, off_t length); }\n\tSYS_FREEBSD6_FTRUNCATE       = 201 // { int freebsd6_ftruncate(int fd, int pad, off_t length); }\n\tSYS___SYSCTL                 = 202 // { int __sysctl(int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } __sysctl sysctl_args int\n\tSYS_MLOCK                    = 203 // { int mlock(const void *addr, size_t len); }\n\tSYS_MUNLOCK                  = 204 // { int munlock(const void *addr, size_t len); }\n\tSYS_UNDELETE                 = 205 // { int undelete(char *path); }\n\tSYS_FUTIMES                  = 206 // { int futimes(int fd, struct timeval *tptr); }\n\tSYS_GETPGID                  = 207 // { int getpgid(pid_t pid); }\n\tSYS_POLL                     = 209 // { int poll(struct pollfd *fds, u_int nfds, int timeout); }\n\tSYS_SEMGET                   = 221 // { int semget(key_t key, int nsems, int semflg); }\n\tSYS_SEMOP                    = 222 // { int semop(int semid, struct sembuf *sops, size_t nsops); }\n\tSYS_MSGGET                   = 225 // { int msgget(key_t key, int msgflg); }\n\tSYS_MSGSND                   = 226 // { int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }\n\tSYS_MSGRCV                   = 227 // { int msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }\n\tSYS_SHMAT                    = 228 // { int shmat(int shmid, const void *shmaddr, int shmflg); }\n\tSYS_SHMDT                    = 230 // { int shmdt(const void *shmaddr); }\n\tSYS_SHMGET                   = 231 // { int shmget(key_t key, size_t size, int shmflg); }\n\tSYS_CLOCK_GETTIME            = 232 // { int clock_gettime(clockid_t clock_id, struct timespec *tp); }\n\tSYS_CLOCK_SETTIME            = 233 // { int clock_settime( clockid_t clock_id, const struct timespec *tp); }\n\tSYS_CLOCK_GETRES             = 234 // { int clock_getres(clockid_t clock_id, struct timespec *tp); }\n\tSYS_KTIMER_CREATE            = 235 // { int ktimer_create(clockid_t clock_id, struct sigevent *evp, int *timerid); }\n\tSYS_KTIMER_DELETE            = 236 // { int ktimer_delete(int timerid); }\n\tSYS_KTIMER_SETTIME           = 237 // { int ktimer_settime(int timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); }\n\tSYS_KTIMER_GETTIME           = 238 // { int ktimer_gettime(int timerid, struct itimerspec *value); }\n\tSYS_KTIMER_GETOVERRUN        = 239 // { int ktimer_getoverrun(int timerid); }\n\tSYS_NANOSLEEP                = 240 // { int nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }\n\tSYS_FFCLOCK_GETCOUNTER       = 241 // { int ffclock_getcounter(ffcounter *ffcount); }\n\tSYS_FFCLOCK_SETESTIMATE      = 242 // { int ffclock_setestimate( struct ffclock_estimate *cest); }\n\tSYS_FFCLOCK_GETESTIMATE      = 243 // { int ffclock_getestimate( struct ffclock_estimate *cest); }\n\tSYS_CLOCK_GETCPUCLOCKID2     = 247 // { int clock_getcpuclockid2(id_t id,int which, clockid_t *clock_id); }\n\tSYS_NTP_GETTIME              = 248 // { int ntp_gettime(struct ntptimeval *ntvp); }\n\tSYS_MINHERIT                 = 250 // { int minherit(void *addr, size_t len, int inherit); }\n\tSYS_RFORK                    = 251 // { int rfork(int flags); }\n\tSYS_OPENBSD_POLL             = 252 // { int openbsd_poll(struct pollfd *fds, u_int nfds, int timeout); }\n\tSYS_ISSETUGID                = 253 // { int issetugid(void); }\n\tSYS_LCHOWN                   = 254 // { int lchown(char *path, int uid, int gid); }\n\tSYS_AIO_READ                 = 255 // { int aio_read(struct aiocb *aiocbp); }\n\tSYS_AIO_WRITE                = 256 // { int aio_write(struct aiocb *aiocbp); }\n\tSYS_LIO_LISTIO               = 257 // { int lio_listio(int mode, struct aiocb * const *acb_list, int nent, struct sigevent *sig); }\n\tSYS_GETDENTS                 = 272 // { int getdents(int fd, char *buf, size_t count); }\n\tSYS_LCHMOD                   = 274 // { int lchmod(char *path, mode_t mode); }\n\tSYS_LUTIMES                  = 276 // { int lutimes(char *path, struct timeval *tptr); }\n\tSYS_NSTAT                    = 278 // { int nstat(char *path, struct nstat *ub); }\n\tSYS_NFSTAT                   = 279 // { int nfstat(int fd, struct nstat *sb); }\n\tSYS_NLSTAT                   = 280 // { int nlstat(char *path, struct nstat *ub); }\n\tSYS_PREADV                   = 289 // { ssize_t preadv(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); }\n\tSYS_PWRITEV                  = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); }\n\tSYS_FHOPEN                   = 298 // { int fhopen(const struct fhandle *u_fhp, int flags); }\n\tSYS_FHSTAT                   = 299 // { int fhstat(const struct fhandle *u_fhp, struct stat *sb); }\n\tSYS_MODNEXT                  = 300 // { int modnext(int modid); }\n\tSYS_MODSTAT                  = 301 // { int modstat(int modid, struct module_stat *stat); }\n\tSYS_MODFNEXT                 = 302 // { int modfnext(int modid); }\n\tSYS_MODFIND                  = 303 // { int modfind(const char *name); }\n\tSYS_KLDLOAD                  = 304 // { int kldload(const char *file); }\n\tSYS_KLDUNLOAD                = 305 // { int kldunload(int fileid); }\n\tSYS_KLDFIND                  = 306 // { int kldfind(const char *file); }\n\tSYS_KLDNEXT                  = 307 // { int kldnext(int fileid); }\n\tSYS_KLDSTAT                  = 308 // { int kldstat(int fileid, struct kld_file_stat* stat); }\n\tSYS_KLDFIRSTMOD              = 309 // { int kldfirstmod(int fileid); }\n\tSYS_GETSID                   = 310 // { int getsid(pid_t pid); }\n\tSYS_SETRESUID                = 311 // { int setresuid(uid_t ruid, uid_t euid, uid_t suid); }\n\tSYS_SETRESGID                = 312 // { int setresgid(gid_t rgid, gid_t egid, gid_t sgid); }\n\tSYS_AIO_RETURN               = 314 // { int aio_return(struct aiocb *aiocbp); }\n\tSYS_AIO_SUSPEND              = 315 // { int aio_suspend( struct aiocb * const * aiocbp, int nent, const struct timespec *timeout); }\n\tSYS_AIO_CANCEL               = 316 // { int aio_cancel(int fd, struct aiocb *aiocbp); }\n\tSYS_AIO_ERROR                = 317 // { int aio_error(struct aiocb *aiocbp); }\n\tSYS_OAIO_READ                = 318 // { int oaio_read(struct oaiocb *aiocbp); }\n\tSYS_OAIO_WRITE               = 319 // { int oaio_write(struct oaiocb *aiocbp); }\n\tSYS_OLIO_LISTIO              = 320 // { int olio_listio(int mode, struct oaiocb * const *acb_list, int nent, struct osigevent *sig); }\n\tSYS_YIELD                    = 321 // { int yield(void); }\n\tSYS_MLOCKALL                 = 324 // { int mlockall(int how); }\n\tSYS_MUNLOCKALL               = 325 // { int munlockall(void); }\n\tSYS___GETCWD                 = 326 // { int __getcwd(char *buf, u_int buflen); }\n\tSYS_SCHED_SETPARAM           = 327 // { int sched_setparam (pid_t pid, const struct sched_param *param); }\n\tSYS_SCHED_GETPARAM           = 328 // { int sched_getparam (pid_t pid, struct sched_param *param); }\n\tSYS_SCHED_SETSCHEDULER       = 329 // { int sched_setscheduler (pid_t pid, int policy, const struct sched_param *param); }\n\tSYS_SCHED_GETSCHEDULER       = 330 // { int sched_getscheduler (pid_t pid); }\n\tSYS_SCHED_YIELD              = 331 // { int sched_yield (void); }\n\tSYS_SCHED_GET_PRIORITY_MAX   = 332 // { int sched_get_priority_max (int policy); }\n\tSYS_SCHED_GET_PRIORITY_MIN   = 333 // { int sched_get_priority_min (int policy); }\n\tSYS_SCHED_RR_GET_INTERVAL    = 334 // { int sched_rr_get_interval (pid_t pid, struct timespec *interval); }\n\tSYS_UTRACE                   = 335 // { int utrace(const void *addr, size_t len); }\n\tSYS_KLDSYM                   = 337 // { int kldsym(int fileid, int cmd, void *data); }\n\tSYS_JAIL                     = 338 // { int jail(struct jail *jail); }\n\tSYS_SIGPROCMASK              = 340 // { int sigprocmask(int how, const sigset_t *set, sigset_t *oset); }\n\tSYS_SIGSUSPEND               = 341 // { int sigsuspend(const sigset_t *sigmask); }\n\tSYS_SIGPENDING               = 343 // { int sigpending(sigset_t *set); }\n\tSYS_SIGTIMEDWAIT             = 345 // { int sigtimedwait(const sigset_t *set, siginfo_t *info, const struct timespec *timeout); }\n\tSYS_SIGWAITINFO              = 346 // { int sigwaitinfo(const sigset_t *set, siginfo_t *info); }\n\tSYS___ACL_GET_FILE           = 347 // { int __acl_get_file(const char *path, acl_type_t type, struct acl *aclp); }\n\tSYS___ACL_SET_FILE           = 348 // { int __acl_set_file(const char *path, acl_type_t type, struct acl *aclp); }\n\tSYS___ACL_GET_FD             = 349 // { int __acl_get_fd(int filedes, acl_type_t type, struct acl *aclp); }\n\tSYS___ACL_SET_FD             = 350 // { int __acl_set_fd(int filedes, acl_type_t type, struct acl *aclp); }\n\tSYS___ACL_DELETE_FILE        = 351 // { int __acl_delete_file(const char *path, acl_type_t type); }\n\tSYS___ACL_DELETE_FD          = 352 // { int __acl_delete_fd(int filedes, acl_type_t type); }\n\tSYS___ACL_ACLCHECK_FILE      = 353 // { int __acl_aclcheck_file(const char *path, acl_type_t type, struct acl *aclp); }\n\tSYS___ACL_ACLCHECK_FD        = 354 // { int __acl_aclcheck_fd(int filedes, acl_type_t type, struct acl *aclp); }\n\tSYS_EXTATTRCTL               = 355 // { int extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); }\n\tSYS_EXTATTR_SET_FILE         = 356 // { ssize_t extattr_set_file( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_GET_FILE         = 357 // { ssize_t extattr_get_file( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_DELETE_FILE      = 358 // { int extattr_delete_file(const char *path, int attrnamespace, const char *attrname); }\n\tSYS_AIO_WAITCOMPLETE         = 359 // { int aio_waitcomplete( struct aiocb **aiocbp, struct timespec *timeout); }\n\tSYS_GETRESUID                = 360 // { int getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); }\n\tSYS_GETRESGID                = 361 // { int getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); }\n\tSYS_KQUEUE                   = 362 // { int kqueue(void); }\n\tSYS_KEVENT                   = 363 // { int kevent(int fd, struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); }\n\tSYS_EXTATTR_SET_FD           = 371 // { ssize_t extattr_set_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_GET_FD           = 372 // { ssize_t extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_DELETE_FD        = 373 // { int extattr_delete_fd(int fd, int attrnamespace, const char *attrname); }\n\tSYS___SETUGID                = 374 // { int __setugid(int flag); }\n\tSYS_EACCESS                  = 376 // { int eaccess(char *path, int amode); }\n\tSYS_NMOUNT                   = 378 // { int nmount(struct iovec *iovp, unsigned int iovcnt, int flags); }\n\tSYS___MAC_GET_PROC           = 384 // { int __mac_get_proc(struct mac *mac_p); }\n\tSYS___MAC_SET_PROC           = 385 // { int __mac_set_proc(struct mac *mac_p); }\n\tSYS___MAC_GET_FD             = 386 // { int __mac_get_fd(int fd, struct mac *mac_p); }\n\tSYS___MAC_GET_FILE           = 387 // { int __mac_get_file(const char *path_p, struct mac *mac_p); }\n\tSYS___MAC_SET_FD             = 388 // { int __mac_set_fd(int fd, struct mac *mac_p); }\n\tSYS___MAC_SET_FILE           = 389 // { int __mac_set_file(const char *path_p, struct mac *mac_p); }\n\tSYS_KENV                     = 390 // { int kenv(int what, const char *name, char *value, int len); }\n\tSYS_LCHFLAGS                 = 391 // { int lchflags(const char *path, u_long flags); }\n\tSYS_UUIDGEN                  = 392 // { int uuidgen(struct uuid *store, int count); }\n\tSYS_SENDFILE                 = 393 // { int sendfile(int fd, int s, off_t offset, size_t nbytes, struct sf_hdtr *hdtr, off_t *sbytes, int flags); }\n\tSYS_MAC_SYSCALL              = 394 // { int mac_syscall(const char *policy, int call, void *arg); }\n\tSYS_GETFSSTAT                = 395 // { int getfsstat(struct statfs *buf, long bufsize, int flags); }\n\tSYS_STATFS                   = 396 // { int statfs(char *path, struct statfs *buf); }\n\tSYS_FSTATFS                  = 397 // { int fstatfs(int fd, struct statfs *buf); }\n\tSYS_FHSTATFS                 = 398 // { int fhstatfs(const struct fhandle *u_fhp, struct statfs *buf); }\n\tSYS_KSEM_CLOSE               = 400 // { int ksem_close(semid_t id); }\n\tSYS_KSEM_POST                = 401 // { int ksem_post(semid_t id); }\n\tSYS_KSEM_WAIT                = 402 // { int ksem_wait(semid_t id); }\n\tSYS_KSEM_TRYWAIT             = 403 // { int ksem_trywait(semid_t id); }\n\tSYS_KSEM_INIT                = 404 // { int ksem_init(semid_t *idp, unsigned int value); }\n\tSYS_KSEM_OPEN                = 405 // { int ksem_open(semid_t *idp, const char *name, int oflag, mode_t mode, unsigned int value); }\n\tSYS_KSEM_UNLINK              = 406 // { int ksem_unlink(const char *name); }\n\tSYS_KSEM_GETVALUE            = 407 // { int ksem_getvalue(semid_t id, int *val); }\n\tSYS_KSEM_DESTROY             = 408 // { int ksem_destroy(semid_t id); }\n\tSYS___MAC_GET_PID            = 409 // { int __mac_get_pid(pid_t pid, struct mac *mac_p); }\n\tSYS___MAC_GET_LINK           = 410 // { int __mac_get_link(const char *path_p, struct mac *mac_p); }\n\tSYS___MAC_SET_LINK           = 411 // { int __mac_set_link(const char *path_p, struct mac *mac_p); }\n\tSYS_EXTATTR_SET_LINK         = 412 // { ssize_t extattr_set_link( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_GET_LINK         = 413 // { ssize_t extattr_get_link( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_DELETE_LINK      = 414 // { int extattr_delete_link( const char *path, int attrnamespace, const char *attrname); }\n\tSYS___MAC_EXECVE             = 415 // { int __mac_execve(char *fname, char **argv, char **envv, struct mac *mac_p); }\n\tSYS_SIGACTION                = 416 // { int sigaction(int sig, const struct sigaction *act, struct sigaction *oact); }\n\tSYS_SIGRETURN                = 417 // { int sigreturn( const struct __ucontext *sigcntxp); }\n\tSYS_GETCONTEXT               = 421 // { int getcontext(struct __ucontext *ucp); }\n\tSYS_SETCONTEXT               = 422 // { int setcontext( const struct __ucontext *ucp); }\n\tSYS_SWAPCONTEXT              = 423 // { int swapcontext(struct __ucontext *oucp, const struct __ucontext *ucp); }\n\tSYS_SWAPOFF                  = 424 // { int swapoff(const char *name); }\n\tSYS___ACL_GET_LINK           = 425 // { int __acl_get_link(const char *path, acl_type_t type, struct acl *aclp); }\n\tSYS___ACL_SET_LINK           = 426 // { int __acl_set_link(const char *path, acl_type_t type, struct acl *aclp); }\n\tSYS___ACL_DELETE_LINK        = 427 // { int __acl_delete_link(const char *path, acl_type_t type); }\n\tSYS___ACL_ACLCHECK_LINK      = 428 // { int __acl_aclcheck_link(const char *path, acl_type_t type, struct acl *aclp); }\n\tSYS_SIGWAIT                  = 429 // { int sigwait(const sigset_t *set, int *sig); }\n\tSYS_THR_CREATE               = 430 // { int thr_create(ucontext_t *ctx, long *id, int flags); }\n\tSYS_THR_EXIT                 = 431 // { void thr_exit(long *state); }\n\tSYS_THR_SELF                 = 432 // { int thr_self(long *id); }\n\tSYS_THR_KILL                 = 433 // { int thr_kill(long id, int sig); }\n\tSYS__UMTX_LOCK               = 434 // { int _umtx_lock(struct umtx *umtx); }\n\tSYS__UMTX_UNLOCK             = 435 // { int _umtx_unlock(struct umtx *umtx); }\n\tSYS_JAIL_ATTACH              = 436 // { int jail_attach(int jid); }\n\tSYS_EXTATTR_LIST_FD          = 437 // { ssize_t extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); }\n\tSYS_EXTATTR_LIST_FILE        = 438 // { ssize_t extattr_list_file( const char *path, int attrnamespace, void *data, size_t nbytes); }\n\tSYS_EXTATTR_LIST_LINK        = 439 // { ssize_t extattr_list_link( const char *path, int attrnamespace, void *data, size_t nbytes); }\n\tSYS_KSEM_TIMEDWAIT           = 441 // { int ksem_timedwait(semid_t id, const struct timespec *abstime); }\n\tSYS_THR_SUSPEND              = 442 // { int thr_suspend( const struct timespec *timeout); }\n\tSYS_THR_WAKE                 = 443 // { int thr_wake(long id); }\n\tSYS_KLDUNLOADF               = 444 // { int kldunloadf(int fileid, int flags); }\n\tSYS_AUDIT                    = 445 // { int audit(const void *record, u_int length); }\n\tSYS_AUDITON                  = 446 // { int auditon(int cmd, void *data, u_int length); }\n\tSYS_GETAUID                  = 447 // { int getauid(uid_t *auid); }\n\tSYS_SETAUID                  = 448 // { int setauid(uid_t *auid); }\n\tSYS_GETAUDIT                 = 449 // { int getaudit(struct auditinfo *auditinfo); }\n\tSYS_SETAUDIT                 = 450 // { int setaudit(struct auditinfo *auditinfo); }\n\tSYS_GETAUDIT_ADDR            = 451 // { int getaudit_addr( struct auditinfo_addr *auditinfo_addr, u_int length); }\n\tSYS_SETAUDIT_ADDR            = 452 // { int setaudit_addr( struct auditinfo_addr *auditinfo_addr, u_int length); }\n\tSYS_AUDITCTL                 = 453 // { int auditctl(char *path); }\n\tSYS__UMTX_OP                 = 454 // { int _umtx_op(void *obj, int op, u_long val, void *uaddr1, void *uaddr2); }\n\tSYS_THR_NEW                  = 455 // { int thr_new(struct thr_param *param, int param_size); }\n\tSYS_SIGQUEUE                 = 456 // { int sigqueue(pid_t pid, int signum, void *value); }\n\tSYS_KMQ_OPEN                 = 457 // { int kmq_open(const char *path, int flags, mode_t mode, const struct mq_attr *attr); }\n\tSYS_KMQ_SETATTR              = 458 // { int kmq_setattr(int mqd,\t\tconst struct mq_attr *attr,\t\tstruct mq_attr *oattr); }\n\tSYS_KMQ_TIMEDRECEIVE         = 459 // { int kmq_timedreceive(int mqd,\tchar *msg_ptr, size_t msg_len,\tunsigned *msg_prio,\t\t\tconst struct timespec *abs_timeout); }\n\tSYS_KMQ_TIMEDSEND            = 460 // { int kmq_timedsend(int mqd,\t\tconst char *msg_ptr, size_t msg_len,unsigned msg_prio,\t\t\tconst struct timespec *abs_timeout);}\n\tSYS_KMQ_NOTIFY               = 461 // { int kmq_notify(int mqd,\t\tconst struct sigevent *sigev); }\n\tSYS_KMQ_UNLINK               = 462 // { int kmq_unlink(const char *path); }\n\tSYS_ABORT2                   = 463 // { int abort2(const char *why, int nargs, void **args); }\n\tSYS_THR_SET_NAME             = 464 // { int thr_set_name(long id, const char *name); }\n\tSYS_AIO_FSYNC                = 465 // { int aio_fsync(int op, struct aiocb *aiocbp); }\n\tSYS_RTPRIO_THREAD            = 466 // { int rtprio_thread(int function, lwpid_t lwpid, struct rtprio *rtp); }\n\tSYS_SCTP_PEELOFF             = 471 // { int sctp_peeloff(int sd, uint32_t name); }\n\tSYS_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); }\n\tSYS_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); }\n\tSYS_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); }\n\tSYS_PREAD                    = 475 // { ssize_t pread(int fd, void *buf, size_t nbyte, off_t offset); }\n\tSYS_PWRITE                   = 476 // { ssize_t pwrite(int fd, const void *buf, size_t nbyte, off_t offset); }\n\tSYS_MMAP                     = 477 // { caddr_t mmap(caddr_t addr, size_t len, int prot, int flags, int fd, off_t pos); }\n\tSYS_LSEEK                    = 478 // { off_t lseek(int fd, off_t offset, int whence); }\n\tSYS_TRUNCATE                 = 479 // { int truncate(char *path, off_t length); }\n\tSYS_FTRUNCATE                = 480 // { int ftruncate(int fd, off_t length); }\n\tSYS_THR_KILL2                = 481 // { int thr_kill2(pid_t pid, long id, int sig); }\n\tSYS_SHM_OPEN                 = 482 // { int shm_open(const char *path, int flags, mode_t mode); }\n\tSYS_SHM_UNLINK               = 483 // { int shm_unlink(const char *path); }\n\tSYS_CPUSET                   = 484 // { int cpuset(cpusetid_t *setid); }\n\tSYS_CPUSET_SETID             = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, cpusetid_t setid); }\n\tSYS_CPUSET_GETID             = 486 // { int cpuset_getid(cpulevel_t level, cpuwhich_t which, id_t id, cpusetid_t *setid); }\n\tSYS_CPUSET_GETAFFINITY       = 487 // { int cpuset_getaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t cpusetsize, cpuset_t *mask); }\n\tSYS_CPUSET_SETAFFINITY       = 488 // { int cpuset_setaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t cpusetsize, const cpuset_t *mask); }\n\tSYS_FACCESSAT                = 489 // { int faccessat(int fd, char *path, int amode, int flag); }\n\tSYS_FCHMODAT                 = 490 // { int fchmodat(int fd, char *path, mode_t mode, int flag); }\n\tSYS_FCHOWNAT                 = 491 // { int fchownat(int fd, char *path, uid_t uid, gid_t gid, int flag); }\n\tSYS_FEXECVE                  = 492 // { int fexecve(int fd, char **argv, char **envv); }\n\tSYS_FSTATAT                  = 493 // { int fstatat(int fd, char *path, struct stat *buf, int flag); }\n\tSYS_FUTIMESAT                = 494 // { int futimesat(int fd, char *path, struct timeval *times); }\n\tSYS_LINKAT                   = 495 // { int linkat(int fd1, char *path1, int fd2, char *path2, int flag); }\n\tSYS_MKDIRAT                  = 496 // { int mkdirat(int fd, char *path, mode_t mode); }\n\tSYS_MKFIFOAT                 = 497 // { int mkfifoat(int fd, char *path, mode_t mode); }\n\tSYS_MKNODAT                  = 498 // { int mknodat(int fd, char *path, mode_t mode, dev_t dev); }\n\tSYS_OPENAT                   = 499 // { int openat(int fd, char *path, int flag, mode_t mode); }\n\tSYS_READLINKAT               = 500 // { int readlinkat(int fd, char *path, char *buf, size_t bufsize); }\n\tSYS_RENAMEAT                 = 501 // { int renameat(int oldfd, char *old, int newfd, char *new); }\n\tSYS_SYMLINKAT                = 502 // { int symlinkat(char *path1, int fd, char *path2); }\n\tSYS_UNLINKAT                 = 503 // { int unlinkat(int fd, char *path, int flag); }\n\tSYS_POSIX_OPENPT             = 504 // { int posix_openpt(int flags); }\n\tSYS_GSSD_SYSCALL             = 505 // { int gssd_syscall(char *path); }\n\tSYS_JAIL_GET                 = 506 // { int jail_get(struct iovec *iovp, unsigned int iovcnt, int flags); }\n\tSYS_JAIL_SET                 = 507 // { int jail_set(struct iovec *iovp, unsigned int iovcnt, int flags); }\n\tSYS_JAIL_REMOVE              = 508 // { int jail_remove(int jid); }\n\tSYS_CLOSEFROM                = 509 // { int closefrom(int lowfd); }\n\tSYS___SEMCTL                 = 510 // { int __semctl(int semid, int semnum, int cmd, union semun *arg); }\n\tSYS_MSGCTL                   = 511 // { int msgctl(int msqid, int cmd, struct msqid_ds *buf); }\n\tSYS_SHMCTL                   = 512 // { int shmctl(int shmid, int cmd, struct shmid_ds *buf); }\n\tSYS_LPATHCONF                = 513 // { int lpathconf(char *path, int name); }\n\tSYS___CAP_RIGHTS_GET         = 515 // { int __cap_rights_get(int version, int fd, cap_rights_t *rightsp); }\n\tSYS_CAP_ENTER                = 516 // { int cap_enter(void); }\n\tSYS_CAP_GETMODE              = 517 // { int cap_getmode(u_int *modep); }\n\tSYS_PDFORK                   = 518 // { int pdfork(int *fdp, int flags); }\n\tSYS_PDKILL                   = 519 // { int pdkill(int fd, int signum); }\n\tSYS_PDGETPID                 = 520 // { int pdgetpid(int fd, pid_t *pidp); }\n\tSYS_PSELECT                  = 522 // { int pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *sm); }\n\tSYS_GETLOGINCLASS            = 523 // { int getloginclass(char *namebuf, size_t namelen); }\n\tSYS_SETLOGINCLASS            = 524 // { int setloginclass(const char *namebuf); }\n\tSYS_RCTL_GET_RACCT           = 525 // { int rctl_get_racct(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }\n\tSYS_RCTL_GET_RULES           = 526 // { int rctl_get_rules(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }\n\tSYS_RCTL_GET_LIMITS          = 527 // { int rctl_get_limits(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }\n\tSYS_RCTL_ADD_RULE            = 528 // { int rctl_add_rule(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }\n\tSYS_RCTL_REMOVE_RULE         = 529 // { int rctl_remove_rule(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }\n\tSYS_POSIX_FALLOCATE          = 530 // { int posix_fallocate(int fd, off_t offset, off_t len); }\n\tSYS_POSIX_FADVISE            = 531 // { int posix_fadvise(int fd, off_t offset, off_t len, int advice); }\n\tSYS_WAIT6                    = 532 // { int wait6(idtype_t idtype, id_t id, int *status, int options, struct __wrusage *wrusage, siginfo_t *info); }\n\tSYS_CAP_RIGHTS_LIMIT         = 533 // { int cap_rights_limit(int fd, cap_rights_t *rightsp); }\n\tSYS_CAP_IOCTLS_LIMIT         = 534 // { int cap_ioctls_limit(int fd, const u_long *cmds, size_t ncmds); }\n\tSYS_CAP_IOCTLS_GET           = 535 // { ssize_t cap_ioctls_get(int fd, u_long *cmds, size_t maxcmds); }\n\tSYS_CAP_FCNTLS_LIMIT         = 536 // { int cap_fcntls_limit(int fd, uint32_t fcntlrights); }\n\tSYS_CAP_FCNTLS_GET           = 537 // { int cap_fcntls_get(int fd, uint32_t *fcntlrightsp); }\n\tSYS_BINDAT                   = 538 // { int bindat(int fd, int s, caddr_t name, int namelen); }\n\tSYS_CONNECTAT                = 539 // { int connectat(int fd, int s, caddr_t name, int namelen); }\n\tSYS_CHFLAGSAT                = 540 // { int chflagsat(int fd, const char *path, u_long flags, int atflag); }\n\tSYS_ACCEPT4                  = 541 // { int accept4(int s, struct sockaddr * __restrict name, __socklen_t * __restrict anamelen, int flags); }\n\tSYS_PIPE2                    = 542 // { int pipe2(int *fildes, int flags); }\n\tSYS_AIO_MLOCK                = 543 // { int aio_mlock(struct aiocb *aiocbp); }\n\tSYS_PROCCTL                  = 544 // { int procctl(idtype_t idtype, id_t id, int com, void *data); }\n\tSYS_PPOLL                    = 545 // { int ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *set); }\n\tSYS_FUTIMENS                 = 546 // { int futimens(int fd, struct timespec *times); }\n\tSYS_UTIMENSAT                = 547 // { int utimensat(int fd, char *path, struct timespec *times, int flag); }\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go",
    "content": "// go run mksysnum.go https://svn.freebsd.org/base/stable/10/sys/kern/syscalls.master\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build amd64,freebsd\n\npackage unix\n\nconst (\n\t// SYS_NOSYS = 0;  // { int nosys(void); } syscall nosys_args int\n\tSYS_EXIT                     = 1   // { void sys_exit(int rval); } exit sys_exit_args void\n\tSYS_FORK                     = 2   // { int fork(void); }\n\tSYS_READ                     = 3   // { ssize_t read(int fd, void *buf, size_t nbyte); }\n\tSYS_WRITE                    = 4   // { ssize_t write(int fd, const void *buf, size_t nbyte); }\n\tSYS_OPEN                     = 5   // { int open(char *path, int flags, int mode); }\n\tSYS_CLOSE                    = 6   // { int close(int fd); }\n\tSYS_WAIT4                    = 7   // { int wait4(int pid, int *status, int options, struct rusage *rusage); }\n\tSYS_LINK                     = 9   // { int link(char *path, char *link); }\n\tSYS_UNLINK                   = 10  // { int unlink(char *path); }\n\tSYS_CHDIR                    = 12  // { int chdir(char *path); }\n\tSYS_FCHDIR                   = 13  // { int fchdir(int fd); }\n\tSYS_MKNOD                    = 14  // { int mknod(char *path, int mode, int dev); }\n\tSYS_CHMOD                    = 15  // { int chmod(char *path, int mode); }\n\tSYS_CHOWN                    = 16  // { int chown(char *path, int uid, int gid); }\n\tSYS_OBREAK                   = 17  // { int obreak(char *nsize); } break obreak_args int\n\tSYS_GETPID                   = 20  // { pid_t getpid(void); }\n\tSYS_MOUNT                    = 21  // { int mount(char *type, char *path, int flags, caddr_t data); }\n\tSYS_UNMOUNT                  = 22  // { int unmount(char *path, int flags); }\n\tSYS_SETUID                   = 23  // { int setuid(uid_t uid); }\n\tSYS_GETUID                   = 24  // { uid_t getuid(void); }\n\tSYS_GETEUID                  = 25  // { uid_t geteuid(void); }\n\tSYS_PTRACE                   = 26  // { int ptrace(int req, pid_t pid, caddr_t addr, int data); }\n\tSYS_RECVMSG                  = 27  // { int recvmsg(int s, struct msghdr *msg, int flags); }\n\tSYS_SENDMSG                  = 28  // { int sendmsg(int s, struct msghdr *msg, int flags); }\n\tSYS_RECVFROM                 = 29  // { int recvfrom(int s, caddr_t buf, size_t len, int flags, struct sockaddr * __restrict from, __socklen_t * __restrict fromlenaddr); }\n\tSYS_ACCEPT                   = 30  // { int accept(int s, struct sockaddr * __restrict name, __socklen_t * __restrict anamelen); }\n\tSYS_GETPEERNAME              = 31  // { int getpeername(int fdes, struct sockaddr * __restrict asa, __socklen_t * __restrict alen); }\n\tSYS_GETSOCKNAME              = 32  // { int getsockname(int fdes, struct sockaddr * __restrict asa, __socklen_t * __restrict alen); }\n\tSYS_ACCESS                   = 33  // { int access(char *path, int amode); }\n\tSYS_CHFLAGS                  = 34  // { int chflags(const char *path, u_long flags); }\n\tSYS_FCHFLAGS                 = 35  // { int fchflags(int fd, u_long flags); }\n\tSYS_SYNC                     = 36  // { int sync(void); }\n\tSYS_KILL                     = 37  // { int kill(int pid, int signum); }\n\tSYS_GETPPID                  = 39  // { pid_t getppid(void); }\n\tSYS_DUP                      = 41  // { int dup(u_int fd); }\n\tSYS_PIPE                     = 42  // { int pipe(void); }\n\tSYS_GETEGID                  = 43  // { gid_t getegid(void); }\n\tSYS_PROFIL                   = 44  // { int profil(caddr_t samples, size_t size, size_t offset, u_int scale); }\n\tSYS_KTRACE                   = 45  // { int ktrace(const char *fname, int ops, int facs, int pid); }\n\tSYS_GETGID                   = 47  // { gid_t getgid(void); }\n\tSYS_GETLOGIN                 = 49  // { int getlogin(char *namebuf, u_int namelen); }\n\tSYS_SETLOGIN                 = 50  // { int setlogin(char *namebuf); }\n\tSYS_ACCT                     = 51  // { int acct(char *path); }\n\tSYS_SIGALTSTACK              = 53  // { int sigaltstack(stack_t *ss, stack_t *oss); }\n\tSYS_IOCTL                    = 54  // { int ioctl(int fd, u_long com, caddr_t data); }\n\tSYS_REBOOT                   = 55  // { int reboot(int opt); }\n\tSYS_REVOKE                   = 56  // { int revoke(char *path); }\n\tSYS_SYMLINK                  = 57  // { int symlink(char *path, char *link); }\n\tSYS_READLINK                 = 58  // { ssize_t readlink(char *path, char *buf, size_t count); }\n\tSYS_EXECVE                   = 59  // { int execve(char *fname, char **argv, char **envv); }\n\tSYS_UMASK                    = 60  // { int umask(int newmask); } umask umask_args int\n\tSYS_CHROOT                   = 61  // { int chroot(char *path); }\n\tSYS_MSYNC                    = 65  // { int msync(void *addr, size_t len, int flags); }\n\tSYS_VFORK                    = 66  // { int vfork(void); }\n\tSYS_SBRK                     = 69  // { int sbrk(int incr); }\n\tSYS_SSTK                     = 70  // { int sstk(int incr); }\n\tSYS_OVADVISE                 = 72  // { int ovadvise(int anom); } vadvise ovadvise_args int\n\tSYS_MUNMAP                   = 73  // { int munmap(void *addr, size_t len); }\n\tSYS_MPROTECT                 = 74  // { int mprotect(const void *addr, size_t len, int prot); }\n\tSYS_MADVISE                  = 75  // { int madvise(void *addr, size_t len, int behav); }\n\tSYS_MINCORE                  = 78  // { int mincore(const void *addr, size_t len, char *vec); }\n\tSYS_GETGROUPS                = 79  // { int getgroups(u_int gidsetsize, gid_t *gidset); }\n\tSYS_SETGROUPS                = 80  // { int setgroups(u_int gidsetsize, gid_t *gidset); }\n\tSYS_GETPGRP                  = 81  // { int getpgrp(void); }\n\tSYS_SETPGID                  = 82  // { int setpgid(int pid, int pgid); }\n\tSYS_SETITIMER                = 83  // { int setitimer(u_int which, struct itimerval *itv, struct itimerval *oitv); }\n\tSYS_SWAPON                   = 85  // { int swapon(char *name); }\n\tSYS_GETITIMER                = 86  // { int getitimer(u_int which, struct itimerval *itv); }\n\tSYS_GETDTABLESIZE            = 89  // { int getdtablesize(void); }\n\tSYS_DUP2                     = 90  // { int dup2(u_int from, u_int to); }\n\tSYS_FCNTL                    = 92  // { int fcntl(int fd, int cmd, long arg); }\n\tSYS_SELECT                   = 93  // { int select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }\n\tSYS_FSYNC                    = 95  // { int fsync(int fd); }\n\tSYS_SETPRIORITY              = 96  // { int setpriority(int which, int who, int prio); }\n\tSYS_SOCKET                   = 97  // { int socket(int domain, int type, int protocol); }\n\tSYS_CONNECT                  = 98  // { int connect(int s, caddr_t name, int namelen); }\n\tSYS_GETPRIORITY              = 100 // { int getpriority(int which, int who); }\n\tSYS_BIND                     = 104 // { int bind(int s, caddr_t name, int namelen); }\n\tSYS_SETSOCKOPT               = 105 // { int setsockopt(int s, int level, int name, caddr_t val, int valsize); }\n\tSYS_LISTEN                   = 106 // { int listen(int s, int backlog); }\n\tSYS_GETTIMEOFDAY             = 116 // { int gettimeofday(struct timeval *tp, struct timezone *tzp); }\n\tSYS_GETRUSAGE                = 117 // { int getrusage(int who, struct rusage *rusage); }\n\tSYS_GETSOCKOPT               = 118 // { int getsockopt(int s, int level, int name, caddr_t val, int *avalsize); }\n\tSYS_READV                    = 120 // { int readv(int fd, struct iovec *iovp, u_int iovcnt); }\n\tSYS_WRITEV                   = 121 // { int writev(int fd, struct iovec *iovp, u_int iovcnt); }\n\tSYS_SETTIMEOFDAY             = 122 // { int settimeofday(struct timeval *tv, struct timezone *tzp); }\n\tSYS_FCHOWN                   = 123 // { int fchown(int fd, int uid, int gid); }\n\tSYS_FCHMOD                   = 124 // { int fchmod(int fd, int mode); }\n\tSYS_SETREUID                 = 126 // { int setreuid(int ruid, int euid); }\n\tSYS_SETREGID                 = 127 // { int setregid(int rgid, int egid); }\n\tSYS_RENAME                   = 128 // { int rename(char *from, char *to); }\n\tSYS_FLOCK                    = 131 // { int flock(int fd, int how); }\n\tSYS_MKFIFO                   = 132 // { int mkfifo(char *path, int mode); }\n\tSYS_SENDTO                   = 133 // { int sendto(int s, caddr_t buf, size_t len, int flags, caddr_t to, int tolen); }\n\tSYS_SHUTDOWN                 = 134 // { int shutdown(int s, int how); }\n\tSYS_SOCKETPAIR               = 135 // { int socketpair(int domain, int type, int protocol, int *rsv); }\n\tSYS_MKDIR                    = 136 // { int mkdir(char *path, int mode); }\n\tSYS_RMDIR                    = 137 // { int rmdir(char *path); }\n\tSYS_UTIMES                   = 138 // { int utimes(char *path, struct timeval *tptr); }\n\tSYS_ADJTIME                  = 140 // { int adjtime(struct timeval *delta, struct timeval *olddelta); }\n\tSYS_SETSID                   = 147 // { int setsid(void); }\n\tSYS_QUOTACTL                 = 148 // { int quotactl(char *path, int cmd, int uid, caddr_t arg); }\n\tSYS_NLM_SYSCALL              = 154 // { int nlm_syscall(int debug_level, int grace_period, int addr_count, char **addrs); }\n\tSYS_NFSSVC                   = 155 // { int nfssvc(int flag, caddr_t argp); }\n\tSYS_LGETFH                   = 160 // { int lgetfh(char *fname, struct fhandle *fhp); }\n\tSYS_GETFH                    = 161 // { int getfh(char *fname, struct fhandle *fhp); }\n\tSYS_SYSARCH                  = 165 // { int sysarch(int op, char *parms); }\n\tSYS_RTPRIO                   = 166 // { int rtprio(int function, pid_t pid, struct rtprio *rtp); }\n\tSYS_SEMSYS                   = 169 // { int semsys(int which, int a2, int a3, int a4, int a5); }\n\tSYS_MSGSYS                   = 170 // { int msgsys(int which, int a2, int a3, int a4, int a5, int a6); }\n\tSYS_SHMSYS                   = 171 // { int shmsys(int which, int a2, int a3, int a4); }\n\tSYS_FREEBSD6_PREAD           = 173 // { ssize_t freebsd6_pread(int fd, void *buf, size_t nbyte, int pad, off_t offset); }\n\tSYS_FREEBSD6_PWRITE          = 174 // { ssize_t freebsd6_pwrite(int fd, const void *buf, size_t nbyte, int pad, off_t offset); }\n\tSYS_SETFIB                   = 175 // { int setfib(int fibnum); }\n\tSYS_NTP_ADJTIME              = 176 // { int ntp_adjtime(struct timex *tp); }\n\tSYS_SETGID                   = 181 // { int setgid(gid_t gid); }\n\tSYS_SETEGID                  = 182 // { int setegid(gid_t egid); }\n\tSYS_SETEUID                  = 183 // { int seteuid(uid_t euid); }\n\tSYS_STAT                     = 188 // { int stat(char *path, struct stat *ub); }\n\tSYS_FSTAT                    = 189 // { int fstat(int fd, struct stat *sb); }\n\tSYS_LSTAT                    = 190 // { int lstat(char *path, struct stat *ub); }\n\tSYS_PATHCONF                 = 191 // { int pathconf(char *path, int name); }\n\tSYS_FPATHCONF                = 192 // { int fpathconf(int fd, int name); }\n\tSYS_GETRLIMIT                = 194 // { int getrlimit(u_int which, struct rlimit *rlp); } getrlimit __getrlimit_args int\n\tSYS_SETRLIMIT                = 195 // { int setrlimit(u_int which, struct rlimit *rlp); } setrlimit __setrlimit_args int\n\tSYS_GETDIRENTRIES            = 196 // { int getdirentries(int fd, char *buf, u_int count, long *basep); }\n\tSYS_FREEBSD6_MMAP            = 197 // { caddr_t freebsd6_mmap(caddr_t addr, size_t len, int prot, int flags, int fd, int pad, off_t pos); }\n\tSYS_FREEBSD6_LSEEK           = 199 // { off_t freebsd6_lseek(int fd, int pad, off_t offset, int whence); }\n\tSYS_FREEBSD6_TRUNCATE        = 200 // { int freebsd6_truncate(char *path, int pad, off_t length); }\n\tSYS_FREEBSD6_FTRUNCATE       = 201 // { int freebsd6_ftruncate(int fd, int pad, off_t length); }\n\tSYS___SYSCTL                 = 202 // { int __sysctl(int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } __sysctl sysctl_args int\n\tSYS_MLOCK                    = 203 // { int mlock(const void *addr, size_t len); }\n\tSYS_MUNLOCK                  = 204 // { int munlock(const void *addr, size_t len); }\n\tSYS_UNDELETE                 = 205 // { int undelete(char *path); }\n\tSYS_FUTIMES                  = 206 // { int futimes(int fd, struct timeval *tptr); }\n\tSYS_GETPGID                  = 207 // { int getpgid(pid_t pid); }\n\tSYS_POLL                     = 209 // { int poll(struct pollfd *fds, u_int nfds, int timeout); }\n\tSYS_SEMGET                   = 221 // { int semget(key_t key, int nsems, int semflg); }\n\tSYS_SEMOP                    = 222 // { int semop(int semid, struct sembuf *sops, size_t nsops); }\n\tSYS_MSGGET                   = 225 // { int msgget(key_t key, int msgflg); }\n\tSYS_MSGSND                   = 226 // { int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }\n\tSYS_MSGRCV                   = 227 // { int msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }\n\tSYS_SHMAT                    = 228 // { int shmat(int shmid, const void *shmaddr, int shmflg); }\n\tSYS_SHMDT                    = 230 // { int shmdt(const void *shmaddr); }\n\tSYS_SHMGET                   = 231 // { int shmget(key_t key, size_t size, int shmflg); }\n\tSYS_CLOCK_GETTIME            = 232 // { int clock_gettime(clockid_t clock_id, struct timespec *tp); }\n\tSYS_CLOCK_SETTIME            = 233 // { int clock_settime( clockid_t clock_id, const struct timespec *tp); }\n\tSYS_CLOCK_GETRES             = 234 // { int clock_getres(clockid_t clock_id, struct timespec *tp); }\n\tSYS_KTIMER_CREATE            = 235 // { int ktimer_create(clockid_t clock_id, struct sigevent *evp, int *timerid); }\n\tSYS_KTIMER_DELETE            = 236 // { int ktimer_delete(int timerid); }\n\tSYS_KTIMER_SETTIME           = 237 // { int ktimer_settime(int timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); }\n\tSYS_KTIMER_GETTIME           = 238 // { int ktimer_gettime(int timerid, struct itimerspec *value); }\n\tSYS_KTIMER_GETOVERRUN        = 239 // { int ktimer_getoverrun(int timerid); }\n\tSYS_NANOSLEEP                = 240 // { int nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }\n\tSYS_FFCLOCK_GETCOUNTER       = 241 // { int ffclock_getcounter(ffcounter *ffcount); }\n\tSYS_FFCLOCK_SETESTIMATE      = 242 // { int ffclock_setestimate( struct ffclock_estimate *cest); }\n\tSYS_FFCLOCK_GETESTIMATE      = 243 // { int ffclock_getestimate( struct ffclock_estimate *cest); }\n\tSYS_CLOCK_GETCPUCLOCKID2     = 247 // { int clock_getcpuclockid2(id_t id,int which, clockid_t *clock_id); }\n\tSYS_NTP_GETTIME              = 248 // { int ntp_gettime(struct ntptimeval *ntvp); }\n\tSYS_MINHERIT                 = 250 // { int minherit(void *addr, size_t len, int inherit); }\n\tSYS_RFORK                    = 251 // { int rfork(int flags); }\n\tSYS_OPENBSD_POLL             = 252 // { int openbsd_poll(struct pollfd *fds, u_int nfds, int timeout); }\n\tSYS_ISSETUGID                = 253 // { int issetugid(void); }\n\tSYS_LCHOWN                   = 254 // { int lchown(char *path, int uid, int gid); }\n\tSYS_AIO_READ                 = 255 // { int aio_read(struct aiocb *aiocbp); }\n\tSYS_AIO_WRITE                = 256 // { int aio_write(struct aiocb *aiocbp); }\n\tSYS_LIO_LISTIO               = 257 // { int lio_listio(int mode, struct aiocb * const *acb_list, int nent, struct sigevent *sig); }\n\tSYS_GETDENTS                 = 272 // { int getdents(int fd, char *buf, size_t count); }\n\tSYS_LCHMOD                   = 274 // { int lchmod(char *path, mode_t mode); }\n\tSYS_LUTIMES                  = 276 // { int lutimes(char *path, struct timeval *tptr); }\n\tSYS_NSTAT                    = 278 // { int nstat(char *path, struct nstat *ub); }\n\tSYS_NFSTAT                   = 279 // { int nfstat(int fd, struct nstat *sb); }\n\tSYS_NLSTAT                   = 280 // { int nlstat(char *path, struct nstat *ub); }\n\tSYS_PREADV                   = 289 // { ssize_t preadv(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); }\n\tSYS_PWRITEV                  = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); }\n\tSYS_FHOPEN                   = 298 // { int fhopen(const struct fhandle *u_fhp, int flags); }\n\tSYS_FHSTAT                   = 299 // { int fhstat(const struct fhandle *u_fhp, struct stat *sb); }\n\tSYS_MODNEXT                  = 300 // { int modnext(int modid); }\n\tSYS_MODSTAT                  = 301 // { int modstat(int modid, struct module_stat *stat); }\n\tSYS_MODFNEXT                 = 302 // { int modfnext(int modid); }\n\tSYS_MODFIND                  = 303 // { int modfind(const char *name); }\n\tSYS_KLDLOAD                  = 304 // { int kldload(const char *file); }\n\tSYS_KLDUNLOAD                = 305 // { int kldunload(int fileid); }\n\tSYS_KLDFIND                  = 306 // { int kldfind(const char *file); }\n\tSYS_KLDNEXT                  = 307 // { int kldnext(int fileid); }\n\tSYS_KLDSTAT                  = 308 // { int kldstat(int fileid, struct kld_file_stat* stat); }\n\tSYS_KLDFIRSTMOD              = 309 // { int kldfirstmod(int fileid); }\n\tSYS_GETSID                   = 310 // { int getsid(pid_t pid); }\n\tSYS_SETRESUID                = 311 // { int setresuid(uid_t ruid, uid_t euid, uid_t suid); }\n\tSYS_SETRESGID                = 312 // { int setresgid(gid_t rgid, gid_t egid, gid_t sgid); }\n\tSYS_AIO_RETURN               = 314 // { int aio_return(struct aiocb *aiocbp); }\n\tSYS_AIO_SUSPEND              = 315 // { int aio_suspend( struct aiocb * const * aiocbp, int nent, const struct timespec *timeout); }\n\tSYS_AIO_CANCEL               = 316 // { int aio_cancel(int fd, struct aiocb *aiocbp); }\n\tSYS_AIO_ERROR                = 317 // { int aio_error(struct aiocb *aiocbp); }\n\tSYS_OAIO_READ                = 318 // { int oaio_read(struct oaiocb *aiocbp); }\n\tSYS_OAIO_WRITE               = 319 // { int oaio_write(struct oaiocb *aiocbp); }\n\tSYS_OLIO_LISTIO              = 320 // { int olio_listio(int mode, struct oaiocb * const *acb_list, int nent, struct osigevent *sig); }\n\tSYS_YIELD                    = 321 // { int yield(void); }\n\tSYS_MLOCKALL                 = 324 // { int mlockall(int how); }\n\tSYS_MUNLOCKALL               = 325 // { int munlockall(void); }\n\tSYS___GETCWD                 = 326 // { int __getcwd(char *buf, u_int buflen); }\n\tSYS_SCHED_SETPARAM           = 327 // { int sched_setparam (pid_t pid, const struct sched_param *param); }\n\tSYS_SCHED_GETPARAM           = 328 // { int sched_getparam (pid_t pid, struct sched_param *param); }\n\tSYS_SCHED_SETSCHEDULER       = 329 // { int sched_setscheduler (pid_t pid, int policy, const struct sched_param *param); }\n\tSYS_SCHED_GETSCHEDULER       = 330 // { int sched_getscheduler (pid_t pid); }\n\tSYS_SCHED_YIELD              = 331 // { int sched_yield (void); }\n\tSYS_SCHED_GET_PRIORITY_MAX   = 332 // { int sched_get_priority_max (int policy); }\n\tSYS_SCHED_GET_PRIORITY_MIN   = 333 // { int sched_get_priority_min (int policy); }\n\tSYS_SCHED_RR_GET_INTERVAL    = 334 // { int sched_rr_get_interval (pid_t pid, struct timespec *interval); }\n\tSYS_UTRACE                   = 335 // { int utrace(const void *addr, size_t len); }\n\tSYS_KLDSYM                   = 337 // { int kldsym(int fileid, int cmd, void *data); }\n\tSYS_JAIL                     = 338 // { int jail(struct jail *jail); }\n\tSYS_SIGPROCMASK              = 340 // { int sigprocmask(int how, const sigset_t *set, sigset_t *oset); }\n\tSYS_SIGSUSPEND               = 341 // { int sigsuspend(const sigset_t *sigmask); }\n\tSYS_SIGPENDING               = 343 // { int sigpending(sigset_t *set); }\n\tSYS_SIGTIMEDWAIT             = 345 // { int sigtimedwait(const sigset_t *set, siginfo_t *info, const struct timespec *timeout); }\n\tSYS_SIGWAITINFO              = 346 // { int sigwaitinfo(const sigset_t *set, siginfo_t *info); }\n\tSYS___ACL_GET_FILE           = 347 // { int __acl_get_file(const char *path, acl_type_t type, struct acl *aclp); }\n\tSYS___ACL_SET_FILE           = 348 // { int __acl_set_file(const char *path, acl_type_t type, struct acl *aclp); }\n\tSYS___ACL_GET_FD             = 349 // { int __acl_get_fd(int filedes, acl_type_t type, struct acl *aclp); }\n\tSYS___ACL_SET_FD             = 350 // { int __acl_set_fd(int filedes, acl_type_t type, struct acl *aclp); }\n\tSYS___ACL_DELETE_FILE        = 351 // { int __acl_delete_file(const char *path, acl_type_t type); }\n\tSYS___ACL_DELETE_FD          = 352 // { int __acl_delete_fd(int filedes, acl_type_t type); }\n\tSYS___ACL_ACLCHECK_FILE      = 353 // { int __acl_aclcheck_file(const char *path, acl_type_t type, struct acl *aclp); }\n\tSYS___ACL_ACLCHECK_FD        = 354 // { int __acl_aclcheck_fd(int filedes, acl_type_t type, struct acl *aclp); }\n\tSYS_EXTATTRCTL               = 355 // { int extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); }\n\tSYS_EXTATTR_SET_FILE         = 356 // { ssize_t extattr_set_file( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_GET_FILE         = 357 // { ssize_t extattr_get_file( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_DELETE_FILE      = 358 // { int extattr_delete_file(const char *path, int attrnamespace, const char *attrname); }\n\tSYS_AIO_WAITCOMPLETE         = 359 // { int aio_waitcomplete( struct aiocb **aiocbp, struct timespec *timeout); }\n\tSYS_GETRESUID                = 360 // { int getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); }\n\tSYS_GETRESGID                = 361 // { int getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); }\n\tSYS_KQUEUE                   = 362 // { int kqueue(void); }\n\tSYS_KEVENT                   = 363 // { int kevent(int fd, struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); }\n\tSYS_EXTATTR_SET_FD           = 371 // { ssize_t extattr_set_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_GET_FD           = 372 // { ssize_t extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_DELETE_FD        = 373 // { int extattr_delete_fd(int fd, int attrnamespace, const char *attrname); }\n\tSYS___SETUGID                = 374 // { int __setugid(int flag); }\n\tSYS_EACCESS                  = 376 // { int eaccess(char *path, int amode); }\n\tSYS_NMOUNT                   = 378 // { int nmount(struct iovec *iovp, unsigned int iovcnt, int flags); }\n\tSYS___MAC_GET_PROC           = 384 // { int __mac_get_proc(struct mac *mac_p); }\n\tSYS___MAC_SET_PROC           = 385 // { int __mac_set_proc(struct mac *mac_p); }\n\tSYS___MAC_GET_FD             = 386 // { int __mac_get_fd(int fd, struct mac *mac_p); }\n\tSYS___MAC_GET_FILE           = 387 // { int __mac_get_file(const char *path_p, struct mac *mac_p); }\n\tSYS___MAC_SET_FD             = 388 // { int __mac_set_fd(int fd, struct mac *mac_p); }\n\tSYS___MAC_SET_FILE           = 389 // { int __mac_set_file(const char *path_p, struct mac *mac_p); }\n\tSYS_KENV                     = 390 // { int kenv(int what, const char *name, char *value, int len); }\n\tSYS_LCHFLAGS                 = 391 // { int lchflags(const char *path, u_long flags); }\n\tSYS_UUIDGEN                  = 392 // { int uuidgen(struct uuid *store, int count); }\n\tSYS_SENDFILE                 = 393 // { int sendfile(int fd, int s, off_t offset, size_t nbytes, struct sf_hdtr *hdtr, off_t *sbytes, int flags); }\n\tSYS_MAC_SYSCALL              = 394 // { int mac_syscall(const char *policy, int call, void *arg); }\n\tSYS_GETFSSTAT                = 395 // { int getfsstat(struct statfs *buf, long bufsize, int flags); }\n\tSYS_STATFS                   = 396 // { int statfs(char *path, struct statfs *buf); }\n\tSYS_FSTATFS                  = 397 // { int fstatfs(int fd, struct statfs *buf); }\n\tSYS_FHSTATFS                 = 398 // { int fhstatfs(const struct fhandle *u_fhp, struct statfs *buf); }\n\tSYS_KSEM_CLOSE               = 400 // { int ksem_close(semid_t id); }\n\tSYS_KSEM_POST                = 401 // { int ksem_post(semid_t id); }\n\tSYS_KSEM_WAIT                = 402 // { int ksem_wait(semid_t id); }\n\tSYS_KSEM_TRYWAIT             = 403 // { int ksem_trywait(semid_t id); }\n\tSYS_KSEM_INIT                = 404 // { int ksem_init(semid_t *idp, unsigned int value); }\n\tSYS_KSEM_OPEN                = 405 // { int ksem_open(semid_t *idp, const char *name, int oflag, mode_t mode, unsigned int value); }\n\tSYS_KSEM_UNLINK              = 406 // { int ksem_unlink(const char *name); }\n\tSYS_KSEM_GETVALUE            = 407 // { int ksem_getvalue(semid_t id, int *val); }\n\tSYS_KSEM_DESTROY             = 408 // { int ksem_destroy(semid_t id); }\n\tSYS___MAC_GET_PID            = 409 // { int __mac_get_pid(pid_t pid, struct mac *mac_p); }\n\tSYS___MAC_GET_LINK           = 410 // { int __mac_get_link(const char *path_p, struct mac *mac_p); }\n\tSYS___MAC_SET_LINK           = 411 // { int __mac_set_link(const char *path_p, struct mac *mac_p); }\n\tSYS_EXTATTR_SET_LINK         = 412 // { ssize_t extattr_set_link( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_GET_LINK         = 413 // { ssize_t extattr_get_link( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_DELETE_LINK      = 414 // { int extattr_delete_link( const char *path, int attrnamespace, const char *attrname); }\n\tSYS___MAC_EXECVE             = 415 // { int __mac_execve(char *fname, char **argv, char **envv, struct mac *mac_p); }\n\tSYS_SIGACTION                = 416 // { int sigaction(int sig, const struct sigaction *act, struct sigaction *oact); }\n\tSYS_SIGRETURN                = 417 // { int sigreturn( const struct __ucontext *sigcntxp); }\n\tSYS_GETCONTEXT               = 421 // { int getcontext(struct __ucontext *ucp); }\n\tSYS_SETCONTEXT               = 422 // { int setcontext( const struct __ucontext *ucp); }\n\tSYS_SWAPCONTEXT              = 423 // { int swapcontext(struct __ucontext *oucp, const struct __ucontext *ucp); }\n\tSYS_SWAPOFF                  = 424 // { int swapoff(const char *name); }\n\tSYS___ACL_GET_LINK           = 425 // { int __acl_get_link(const char *path, acl_type_t type, struct acl *aclp); }\n\tSYS___ACL_SET_LINK           = 426 // { int __acl_set_link(const char *path, acl_type_t type, struct acl *aclp); }\n\tSYS___ACL_DELETE_LINK        = 427 // { int __acl_delete_link(const char *path, acl_type_t type); }\n\tSYS___ACL_ACLCHECK_LINK      = 428 // { int __acl_aclcheck_link(const char *path, acl_type_t type, struct acl *aclp); }\n\tSYS_SIGWAIT                  = 429 // { int sigwait(const sigset_t *set, int *sig); }\n\tSYS_THR_CREATE               = 430 // { int thr_create(ucontext_t *ctx, long *id, int flags); }\n\tSYS_THR_EXIT                 = 431 // { void thr_exit(long *state); }\n\tSYS_THR_SELF                 = 432 // { int thr_self(long *id); }\n\tSYS_THR_KILL                 = 433 // { int thr_kill(long id, int sig); }\n\tSYS__UMTX_LOCK               = 434 // { int _umtx_lock(struct umtx *umtx); }\n\tSYS__UMTX_UNLOCK             = 435 // { int _umtx_unlock(struct umtx *umtx); }\n\tSYS_JAIL_ATTACH              = 436 // { int jail_attach(int jid); }\n\tSYS_EXTATTR_LIST_FD          = 437 // { ssize_t extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); }\n\tSYS_EXTATTR_LIST_FILE        = 438 // { ssize_t extattr_list_file( const char *path, int attrnamespace, void *data, size_t nbytes); }\n\tSYS_EXTATTR_LIST_LINK        = 439 // { ssize_t extattr_list_link( const char *path, int attrnamespace, void *data, size_t nbytes); }\n\tSYS_KSEM_TIMEDWAIT           = 441 // { int ksem_timedwait(semid_t id, const struct timespec *abstime); }\n\tSYS_THR_SUSPEND              = 442 // { int thr_suspend( const struct timespec *timeout); }\n\tSYS_THR_WAKE                 = 443 // { int thr_wake(long id); }\n\tSYS_KLDUNLOADF               = 444 // { int kldunloadf(int fileid, int flags); }\n\tSYS_AUDIT                    = 445 // { int audit(const void *record, u_int length); }\n\tSYS_AUDITON                  = 446 // { int auditon(int cmd, void *data, u_int length); }\n\tSYS_GETAUID                  = 447 // { int getauid(uid_t *auid); }\n\tSYS_SETAUID                  = 448 // { int setauid(uid_t *auid); }\n\tSYS_GETAUDIT                 = 449 // { int getaudit(struct auditinfo *auditinfo); }\n\tSYS_SETAUDIT                 = 450 // { int setaudit(struct auditinfo *auditinfo); }\n\tSYS_GETAUDIT_ADDR            = 451 // { int getaudit_addr( struct auditinfo_addr *auditinfo_addr, u_int length); }\n\tSYS_SETAUDIT_ADDR            = 452 // { int setaudit_addr( struct auditinfo_addr *auditinfo_addr, u_int length); }\n\tSYS_AUDITCTL                 = 453 // { int auditctl(char *path); }\n\tSYS__UMTX_OP                 = 454 // { int _umtx_op(void *obj, int op, u_long val, void *uaddr1, void *uaddr2); }\n\tSYS_THR_NEW                  = 455 // { int thr_new(struct thr_param *param, int param_size); }\n\tSYS_SIGQUEUE                 = 456 // { int sigqueue(pid_t pid, int signum, void *value); }\n\tSYS_KMQ_OPEN                 = 457 // { int kmq_open(const char *path, int flags, mode_t mode, const struct mq_attr *attr); }\n\tSYS_KMQ_SETATTR              = 458 // { int kmq_setattr(int mqd,\t\tconst struct mq_attr *attr,\t\tstruct mq_attr *oattr); }\n\tSYS_KMQ_TIMEDRECEIVE         = 459 // { int kmq_timedreceive(int mqd,\tchar *msg_ptr, size_t msg_len,\tunsigned *msg_prio,\t\t\tconst struct timespec *abs_timeout); }\n\tSYS_KMQ_TIMEDSEND            = 460 // { int kmq_timedsend(int mqd,\t\tconst char *msg_ptr, size_t msg_len,unsigned msg_prio,\t\t\tconst struct timespec *abs_timeout);}\n\tSYS_KMQ_NOTIFY               = 461 // { int kmq_notify(int mqd,\t\tconst struct sigevent *sigev); }\n\tSYS_KMQ_UNLINK               = 462 // { int kmq_unlink(const char *path); }\n\tSYS_ABORT2                   = 463 // { int abort2(const char *why, int nargs, void **args); }\n\tSYS_THR_SET_NAME             = 464 // { int thr_set_name(long id, const char *name); }\n\tSYS_AIO_FSYNC                = 465 // { int aio_fsync(int op, struct aiocb *aiocbp); }\n\tSYS_RTPRIO_THREAD            = 466 // { int rtprio_thread(int function, lwpid_t lwpid, struct rtprio *rtp); }\n\tSYS_SCTP_PEELOFF             = 471 // { int sctp_peeloff(int sd, uint32_t name); }\n\tSYS_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); }\n\tSYS_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); }\n\tSYS_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); }\n\tSYS_PREAD                    = 475 // { ssize_t pread(int fd, void *buf, size_t nbyte, off_t offset); }\n\tSYS_PWRITE                   = 476 // { ssize_t pwrite(int fd, const void *buf, size_t nbyte, off_t offset); }\n\tSYS_MMAP                     = 477 // { caddr_t mmap(caddr_t addr, size_t len, int prot, int flags, int fd, off_t pos); }\n\tSYS_LSEEK                    = 478 // { off_t lseek(int fd, off_t offset, int whence); }\n\tSYS_TRUNCATE                 = 479 // { int truncate(char *path, off_t length); }\n\tSYS_FTRUNCATE                = 480 // { int ftruncate(int fd, off_t length); }\n\tSYS_THR_KILL2                = 481 // { int thr_kill2(pid_t pid, long id, int sig); }\n\tSYS_SHM_OPEN                 = 482 // { int shm_open(const char *path, int flags, mode_t mode); }\n\tSYS_SHM_UNLINK               = 483 // { int shm_unlink(const char *path); }\n\tSYS_CPUSET                   = 484 // { int cpuset(cpusetid_t *setid); }\n\tSYS_CPUSET_SETID             = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, cpusetid_t setid); }\n\tSYS_CPUSET_GETID             = 486 // { int cpuset_getid(cpulevel_t level, cpuwhich_t which, id_t id, cpusetid_t *setid); }\n\tSYS_CPUSET_GETAFFINITY       = 487 // { int cpuset_getaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t cpusetsize, cpuset_t *mask); }\n\tSYS_CPUSET_SETAFFINITY       = 488 // { int cpuset_setaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t cpusetsize, const cpuset_t *mask); }\n\tSYS_FACCESSAT                = 489 // { int faccessat(int fd, char *path, int amode, int flag); }\n\tSYS_FCHMODAT                 = 490 // { int fchmodat(int fd, char *path, mode_t mode, int flag); }\n\tSYS_FCHOWNAT                 = 491 // { int fchownat(int fd, char *path, uid_t uid, gid_t gid, int flag); }\n\tSYS_FEXECVE                  = 492 // { int fexecve(int fd, char **argv, char **envv); }\n\tSYS_FSTATAT                  = 493 // { int fstatat(int fd, char *path, struct stat *buf, int flag); }\n\tSYS_FUTIMESAT                = 494 // { int futimesat(int fd, char *path, struct timeval *times); }\n\tSYS_LINKAT                   = 495 // { int linkat(int fd1, char *path1, int fd2, char *path2, int flag); }\n\tSYS_MKDIRAT                  = 496 // { int mkdirat(int fd, char *path, mode_t mode); }\n\tSYS_MKFIFOAT                 = 497 // { int mkfifoat(int fd, char *path, mode_t mode); }\n\tSYS_MKNODAT                  = 498 // { int mknodat(int fd, char *path, mode_t mode, dev_t dev); }\n\tSYS_OPENAT                   = 499 // { int openat(int fd, char *path, int flag, mode_t mode); }\n\tSYS_READLINKAT               = 500 // { int readlinkat(int fd, char *path, char *buf, size_t bufsize); }\n\tSYS_RENAMEAT                 = 501 // { int renameat(int oldfd, char *old, int newfd, char *new); }\n\tSYS_SYMLINKAT                = 502 // { int symlinkat(char *path1, int fd, char *path2); }\n\tSYS_UNLINKAT                 = 503 // { int unlinkat(int fd, char *path, int flag); }\n\tSYS_POSIX_OPENPT             = 504 // { int posix_openpt(int flags); }\n\tSYS_GSSD_SYSCALL             = 505 // { int gssd_syscall(char *path); }\n\tSYS_JAIL_GET                 = 506 // { int jail_get(struct iovec *iovp, unsigned int iovcnt, int flags); }\n\tSYS_JAIL_SET                 = 507 // { int jail_set(struct iovec *iovp, unsigned int iovcnt, int flags); }\n\tSYS_JAIL_REMOVE              = 508 // { int jail_remove(int jid); }\n\tSYS_CLOSEFROM                = 509 // { int closefrom(int lowfd); }\n\tSYS___SEMCTL                 = 510 // { int __semctl(int semid, int semnum, int cmd, union semun *arg); }\n\tSYS_MSGCTL                   = 511 // { int msgctl(int msqid, int cmd, struct msqid_ds *buf); }\n\tSYS_SHMCTL                   = 512 // { int shmctl(int shmid, int cmd, struct shmid_ds *buf); }\n\tSYS_LPATHCONF                = 513 // { int lpathconf(char *path, int name); }\n\tSYS___CAP_RIGHTS_GET         = 515 // { int __cap_rights_get(int version, int fd, cap_rights_t *rightsp); }\n\tSYS_CAP_ENTER                = 516 // { int cap_enter(void); }\n\tSYS_CAP_GETMODE              = 517 // { int cap_getmode(u_int *modep); }\n\tSYS_PDFORK                   = 518 // { int pdfork(int *fdp, int flags); }\n\tSYS_PDKILL                   = 519 // { int pdkill(int fd, int signum); }\n\tSYS_PDGETPID                 = 520 // { int pdgetpid(int fd, pid_t *pidp); }\n\tSYS_PSELECT                  = 522 // { int pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *sm); }\n\tSYS_GETLOGINCLASS            = 523 // { int getloginclass(char *namebuf, size_t namelen); }\n\tSYS_SETLOGINCLASS            = 524 // { int setloginclass(const char *namebuf); }\n\tSYS_RCTL_GET_RACCT           = 525 // { int rctl_get_racct(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }\n\tSYS_RCTL_GET_RULES           = 526 // { int rctl_get_rules(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }\n\tSYS_RCTL_GET_LIMITS          = 527 // { int rctl_get_limits(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }\n\tSYS_RCTL_ADD_RULE            = 528 // { int rctl_add_rule(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }\n\tSYS_RCTL_REMOVE_RULE         = 529 // { int rctl_remove_rule(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }\n\tSYS_POSIX_FALLOCATE          = 530 // { int posix_fallocate(int fd, off_t offset, off_t len); }\n\tSYS_POSIX_FADVISE            = 531 // { int posix_fadvise(int fd, off_t offset, off_t len, int advice); }\n\tSYS_WAIT6                    = 532 // { int wait6(idtype_t idtype, id_t id, int *status, int options, struct __wrusage *wrusage, siginfo_t *info); }\n\tSYS_CAP_RIGHTS_LIMIT         = 533 // { int cap_rights_limit(int fd, cap_rights_t *rightsp); }\n\tSYS_CAP_IOCTLS_LIMIT         = 534 // { int cap_ioctls_limit(int fd, const u_long *cmds, size_t ncmds); }\n\tSYS_CAP_IOCTLS_GET           = 535 // { ssize_t cap_ioctls_get(int fd, u_long *cmds, size_t maxcmds); }\n\tSYS_CAP_FCNTLS_LIMIT         = 536 // { int cap_fcntls_limit(int fd, uint32_t fcntlrights); }\n\tSYS_CAP_FCNTLS_GET           = 537 // { int cap_fcntls_get(int fd, uint32_t *fcntlrightsp); }\n\tSYS_BINDAT                   = 538 // { int bindat(int fd, int s, caddr_t name, int namelen); }\n\tSYS_CONNECTAT                = 539 // { int connectat(int fd, int s, caddr_t name, int namelen); }\n\tSYS_CHFLAGSAT                = 540 // { int chflagsat(int fd, const char *path, u_long flags, int atflag); }\n\tSYS_ACCEPT4                  = 541 // { int accept4(int s, struct sockaddr * __restrict name, __socklen_t * __restrict anamelen, int flags); }\n\tSYS_PIPE2                    = 542 // { int pipe2(int *fildes, int flags); }\n\tSYS_AIO_MLOCK                = 543 // { int aio_mlock(struct aiocb *aiocbp); }\n\tSYS_PROCCTL                  = 544 // { int procctl(idtype_t idtype, id_t id, int com, void *data); }\n\tSYS_PPOLL                    = 545 // { int ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *set); }\n\tSYS_FUTIMENS                 = 546 // { int futimens(int fd, struct timespec *times); }\n\tSYS_UTIMENSAT                = 547 // { int utimensat(int fd, char *path, struct timespec *times, int flag); }\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go",
    "content": "// go run mksysnum.go https://svn.freebsd.org/base/stable/10/sys/kern/syscalls.master\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build arm,freebsd\n\npackage unix\n\nconst (\n\t// SYS_NOSYS = 0;  // { int nosys(void); } syscall nosys_args int\n\tSYS_EXIT                     = 1   // { void sys_exit(int rval); } exit sys_exit_args void\n\tSYS_FORK                     = 2   // { int fork(void); }\n\tSYS_READ                     = 3   // { ssize_t read(int fd, void *buf, size_t nbyte); }\n\tSYS_WRITE                    = 4   // { ssize_t write(int fd, const void *buf, size_t nbyte); }\n\tSYS_OPEN                     = 5   // { int open(char *path, int flags, int mode); }\n\tSYS_CLOSE                    = 6   // { int close(int fd); }\n\tSYS_WAIT4                    = 7   // { int wait4(int pid, int *status, int options, struct rusage *rusage); }\n\tSYS_LINK                     = 9   // { int link(char *path, char *link); }\n\tSYS_UNLINK                   = 10  // { int unlink(char *path); }\n\tSYS_CHDIR                    = 12  // { int chdir(char *path); }\n\tSYS_FCHDIR                   = 13  // { int fchdir(int fd); }\n\tSYS_MKNOD                    = 14  // { int mknod(char *path, int mode, int dev); }\n\tSYS_CHMOD                    = 15  // { int chmod(char *path, int mode); }\n\tSYS_CHOWN                    = 16  // { int chown(char *path, int uid, int gid); }\n\tSYS_OBREAK                   = 17  // { int obreak(char *nsize); } break obreak_args int\n\tSYS_GETPID                   = 20  // { pid_t getpid(void); }\n\tSYS_MOUNT                    = 21  // { int mount(char *type, char *path, int flags, caddr_t data); }\n\tSYS_UNMOUNT                  = 22  // { int unmount(char *path, int flags); }\n\tSYS_SETUID                   = 23  // { int setuid(uid_t uid); }\n\tSYS_GETUID                   = 24  // { uid_t getuid(void); }\n\tSYS_GETEUID                  = 25  // { uid_t geteuid(void); }\n\tSYS_PTRACE                   = 26  // { int ptrace(int req, pid_t pid, caddr_t addr, int data); }\n\tSYS_RECVMSG                  = 27  // { int recvmsg(int s, struct msghdr *msg, int flags); }\n\tSYS_SENDMSG                  = 28  // { int sendmsg(int s, struct msghdr *msg, int flags); }\n\tSYS_RECVFROM                 = 29  // { int recvfrom(int s, caddr_t buf, size_t len, int flags, struct sockaddr * __restrict from, __socklen_t * __restrict fromlenaddr); }\n\tSYS_ACCEPT                   = 30  // { int accept(int s, struct sockaddr * __restrict name, __socklen_t * __restrict anamelen); }\n\tSYS_GETPEERNAME              = 31  // { int getpeername(int fdes, struct sockaddr * __restrict asa, __socklen_t * __restrict alen); }\n\tSYS_GETSOCKNAME              = 32  // { int getsockname(int fdes, struct sockaddr * __restrict asa, __socklen_t * __restrict alen); }\n\tSYS_ACCESS                   = 33  // { int access(char *path, int amode); }\n\tSYS_CHFLAGS                  = 34  // { int chflags(const char *path, u_long flags); }\n\tSYS_FCHFLAGS                 = 35  // { int fchflags(int fd, u_long flags); }\n\tSYS_SYNC                     = 36  // { int sync(void); }\n\tSYS_KILL                     = 37  // { int kill(int pid, int signum); }\n\tSYS_GETPPID                  = 39  // { pid_t getppid(void); }\n\tSYS_DUP                      = 41  // { int dup(u_int fd); }\n\tSYS_PIPE                     = 42  // { int pipe(void); }\n\tSYS_GETEGID                  = 43  // { gid_t getegid(void); }\n\tSYS_PROFIL                   = 44  // { int profil(caddr_t samples, size_t size, size_t offset, u_int scale); }\n\tSYS_KTRACE                   = 45  // { int ktrace(const char *fname, int ops, int facs, int pid); }\n\tSYS_GETGID                   = 47  // { gid_t getgid(void); }\n\tSYS_GETLOGIN                 = 49  // { int getlogin(char *namebuf, u_int namelen); }\n\tSYS_SETLOGIN                 = 50  // { int setlogin(char *namebuf); }\n\tSYS_ACCT                     = 51  // { int acct(char *path); }\n\tSYS_SIGALTSTACK              = 53  // { int sigaltstack(stack_t *ss, stack_t *oss); }\n\tSYS_IOCTL                    = 54  // { int ioctl(int fd, u_long com, caddr_t data); }\n\tSYS_REBOOT                   = 55  // { int reboot(int opt); }\n\tSYS_REVOKE                   = 56  // { int revoke(char *path); }\n\tSYS_SYMLINK                  = 57  // { int symlink(char *path, char *link); }\n\tSYS_READLINK                 = 58  // { ssize_t readlink(char *path, char *buf, size_t count); }\n\tSYS_EXECVE                   = 59  // { int execve(char *fname, char **argv, char **envv); }\n\tSYS_UMASK                    = 60  // { int umask(int newmask); } umask umask_args int\n\tSYS_CHROOT                   = 61  // { int chroot(char *path); }\n\tSYS_MSYNC                    = 65  // { int msync(void *addr, size_t len, int flags); }\n\tSYS_VFORK                    = 66  // { int vfork(void); }\n\tSYS_SBRK                     = 69  // { int sbrk(int incr); }\n\tSYS_SSTK                     = 70  // { int sstk(int incr); }\n\tSYS_OVADVISE                 = 72  // { int ovadvise(int anom); } vadvise ovadvise_args int\n\tSYS_MUNMAP                   = 73  // { int munmap(void *addr, size_t len); }\n\tSYS_MPROTECT                 = 74  // { int mprotect(const void *addr, size_t len, int prot); }\n\tSYS_MADVISE                  = 75  // { int madvise(void *addr, size_t len, int behav); }\n\tSYS_MINCORE                  = 78  // { int mincore(const void *addr, size_t len, char *vec); }\n\tSYS_GETGROUPS                = 79  // { int getgroups(u_int gidsetsize, gid_t *gidset); }\n\tSYS_SETGROUPS                = 80  // { int setgroups(u_int gidsetsize, gid_t *gidset); }\n\tSYS_GETPGRP                  = 81  // { int getpgrp(void); }\n\tSYS_SETPGID                  = 82  // { int setpgid(int pid, int pgid); }\n\tSYS_SETITIMER                = 83  // { int setitimer(u_int which, struct itimerval *itv, struct itimerval *oitv); }\n\tSYS_SWAPON                   = 85  // { int swapon(char *name); }\n\tSYS_GETITIMER                = 86  // { int getitimer(u_int which, struct itimerval *itv); }\n\tSYS_GETDTABLESIZE            = 89  // { int getdtablesize(void); }\n\tSYS_DUP2                     = 90  // { int dup2(u_int from, u_int to); }\n\tSYS_FCNTL                    = 92  // { int fcntl(int fd, int cmd, long arg); }\n\tSYS_SELECT                   = 93  // { int select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }\n\tSYS_FSYNC                    = 95  // { int fsync(int fd); }\n\tSYS_SETPRIORITY              = 96  // { int setpriority(int which, int who, int prio); }\n\tSYS_SOCKET                   = 97  // { int socket(int domain, int type, int protocol); }\n\tSYS_CONNECT                  = 98  // { int connect(int s, caddr_t name, int namelen); }\n\tSYS_GETPRIORITY              = 100 // { int getpriority(int which, int who); }\n\tSYS_BIND                     = 104 // { int bind(int s, caddr_t name, int namelen); }\n\tSYS_SETSOCKOPT               = 105 // { int setsockopt(int s, int level, int name, caddr_t val, int valsize); }\n\tSYS_LISTEN                   = 106 // { int listen(int s, int backlog); }\n\tSYS_GETTIMEOFDAY             = 116 // { int gettimeofday(struct timeval *tp, struct timezone *tzp); }\n\tSYS_GETRUSAGE                = 117 // { int getrusage(int who, struct rusage *rusage); }\n\tSYS_GETSOCKOPT               = 118 // { int getsockopt(int s, int level, int name, caddr_t val, int *avalsize); }\n\tSYS_READV                    = 120 // { int readv(int fd, struct iovec *iovp, u_int iovcnt); }\n\tSYS_WRITEV                   = 121 // { int writev(int fd, struct iovec *iovp, u_int iovcnt); }\n\tSYS_SETTIMEOFDAY             = 122 // { int settimeofday(struct timeval *tv, struct timezone *tzp); }\n\tSYS_FCHOWN                   = 123 // { int fchown(int fd, int uid, int gid); }\n\tSYS_FCHMOD                   = 124 // { int fchmod(int fd, int mode); }\n\tSYS_SETREUID                 = 126 // { int setreuid(int ruid, int euid); }\n\tSYS_SETREGID                 = 127 // { int setregid(int rgid, int egid); }\n\tSYS_RENAME                   = 128 // { int rename(char *from, char *to); }\n\tSYS_FLOCK                    = 131 // { int flock(int fd, int how); }\n\tSYS_MKFIFO                   = 132 // { int mkfifo(char *path, int mode); }\n\tSYS_SENDTO                   = 133 // { int sendto(int s, caddr_t buf, size_t len, int flags, caddr_t to, int tolen); }\n\tSYS_SHUTDOWN                 = 134 // { int shutdown(int s, int how); }\n\tSYS_SOCKETPAIR               = 135 // { int socketpair(int domain, int type, int protocol, int *rsv); }\n\tSYS_MKDIR                    = 136 // { int mkdir(char *path, int mode); }\n\tSYS_RMDIR                    = 137 // { int rmdir(char *path); }\n\tSYS_UTIMES                   = 138 // { int utimes(char *path, struct timeval *tptr); }\n\tSYS_ADJTIME                  = 140 // { int adjtime(struct timeval *delta, struct timeval *olddelta); }\n\tSYS_SETSID                   = 147 // { int setsid(void); }\n\tSYS_QUOTACTL                 = 148 // { int quotactl(char *path, int cmd, int uid, caddr_t arg); }\n\tSYS_NLM_SYSCALL              = 154 // { int nlm_syscall(int debug_level, int grace_period, int addr_count, char **addrs); }\n\tSYS_NFSSVC                   = 155 // { int nfssvc(int flag, caddr_t argp); }\n\tSYS_LGETFH                   = 160 // { int lgetfh(char *fname, struct fhandle *fhp); }\n\tSYS_GETFH                    = 161 // { int getfh(char *fname, struct fhandle *fhp); }\n\tSYS_SYSARCH                  = 165 // { int sysarch(int op, char *parms); }\n\tSYS_RTPRIO                   = 166 // { int rtprio(int function, pid_t pid, struct rtprio *rtp); }\n\tSYS_SEMSYS                   = 169 // { int semsys(int which, int a2, int a3, int a4, int a5); }\n\tSYS_MSGSYS                   = 170 // { int msgsys(int which, int a2, int a3, int a4, int a5, int a6); }\n\tSYS_SHMSYS                   = 171 // { int shmsys(int which, int a2, int a3, int a4); }\n\tSYS_FREEBSD6_PREAD           = 173 // { ssize_t freebsd6_pread(int fd, void *buf, size_t nbyte, int pad, off_t offset); }\n\tSYS_FREEBSD6_PWRITE          = 174 // { ssize_t freebsd6_pwrite(int fd, const void *buf, size_t nbyte, int pad, off_t offset); }\n\tSYS_SETFIB                   = 175 // { int setfib(int fibnum); }\n\tSYS_NTP_ADJTIME              = 176 // { int ntp_adjtime(struct timex *tp); }\n\tSYS_SETGID                   = 181 // { int setgid(gid_t gid); }\n\tSYS_SETEGID                  = 182 // { int setegid(gid_t egid); }\n\tSYS_SETEUID                  = 183 // { int seteuid(uid_t euid); }\n\tSYS_STAT                     = 188 // { int stat(char *path, struct stat *ub); }\n\tSYS_FSTAT                    = 189 // { int fstat(int fd, struct stat *sb); }\n\tSYS_LSTAT                    = 190 // { int lstat(char *path, struct stat *ub); }\n\tSYS_PATHCONF                 = 191 // { int pathconf(char *path, int name); }\n\tSYS_FPATHCONF                = 192 // { int fpathconf(int fd, int name); }\n\tSYS_GETRLIMIT                = 194 // { int getrlimit(u_int which, struct rlimit *rlp); } getrlimit __getrlimit_args int\n\tSYS_SETRLIMIT                = 195 // { int setrlimit(u_int which, struct rlimit *rlp); } setrlimit __setrlimit_args int\n\tSYS_GETDIRENTRIES            = 196 // { int getdirentries(int fd, char *buf, u_int count, long *basep); }\n\tSYS_FREEBSD6_MMAP            = 197 // { caddr_t freebsd6_mmap(caddr_t addr, size_t len, int prot, int flags, int fd, int pad, off_t pos); }\n\tSYS_FREEBSD6_LSEEK           = 199 // { off_t freebsd6_lseek(int fd, int pad, off_t offset, int whence); }\n\tSYS_FREEBSD6_TRUNCATE        = 200 // { int freebsd6_truncate(char *path, int pad, off_t length); }\n\tSYS_FREEBSD6_FTRUNCATE       = 201 // { int freebsd6_ftruncate(int fd, int pad, off_t length); }\n\tSYS___SYSCTL                 = 202 // { int __sysctl(int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } __sysctl sysctl_args int\n\tSYS_MLOCK                    = 203 // { int mlock(const void *addr, size_t len); }\n\tSYS_MUNLOCK                  = 204 // { int munlock(const void *addr, size_t len); }\n\tSYS_UNDELETE                 = 205 // { int undelete(char *path); }\n\tSYS_FUTIMES                  = 206 // { int futimes(int fd, struct timeval *tptr); }\n\tSYS_GETPGID                  = 207 // { int getpgid(pid_t pid); }\n\tSYS_POLL                     = 209 // { int poll(struct pollfd *fds, u_int nfds, int timeout); }\n\tSYS_SEMGET                   = 221 // { int semget(key_t key, int nsems, int semflg); }\n\tSYS_SEMOP                    = 222 // { int semop(int semid, struct sembuf *sops, size_t nsops); }\n\tSYS_MSGGET                   = 225 // { int msgget(key_t key, int msgflg); }\n\tSYS_MSGSND                   = 226 // { int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }\n\tSYS_MSGRCV                   = 227 // { int msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }\n\tSYS_SHMAT                    = 228 // { int shmat(int shmid, const void *shmaddr, int shmflg); }\n\tSYS_SHMDT                    = 230 // { int shmdt(const void *shmaddr); }\n\tSYS_SHMGET                   = 231 // { int shmget(key_t key, size_t size, int shmflg); }\n\tSYS_CLOCK_GETTIME            = 232 // { int clock_gettime(clockid_t clock_id, struct timespec *tp); }\n\tSYS_CLOCK_SETTIME            = 233 // { int clock_settime( clockid_t clock_id, const struct timespec *tp); }\n\tSYS_CLOCK_GETRES             = 234 // { int clock_getres(clockid_t clock_id, struct timespec *tp); }\n\tSYS_KTIMER_CREATE            = 235 // { int ktimer_create(clockid_t clock_id, struct sigevent *evp, int *timerid); }\n\tSYS_KTIMER_DELETE            = 236 // { int ktimer_delete(int timerid); }\n\tSYS_KTIMER_SETTIME           = 237 // { int ktimer_settime(int timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); }\n\tSYS_KTIMER_GETTIME           = 238 // { int ktimer_gettime(int timerid, struct itimerspec *value); }\n\tSYS_KTIMER_GETOVERRUN        = 239 // { int ktimer_getoverrun(int timerid); }\n\tSYS_NANOSLEEP                = 240 // { int nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }\n\tSYS_FFCLOCK_GETCOUNTER       = 241 // { int ffclock_getcounter(ffcounter *ffcount); }\n\tSYS_FFCLOCK_SETESTIMATE      = 242 // { int ffclock_setestimate( struct ffclock_estimate *cest); }\n\tSYS_FFCLOCK_GETESTIMATE      = 243 // { int ffclock_getestimate( struct ffclock_estimate *cest); }\n\tSYS_CLOCK_GETCPUCLOCKID2     = 247 // { int clock_getcpuclockid2(id_t id,int which, clockid_t *clock_id); }\n\tSYS_NTP_GETTIME              = 248 // { int ntp_gettime(struct ntptimeval *ntvp); }\n\tSYS_MINHERIT                 = 250 // { int minherit(void *addr, size_t len, int inherit); }\n\tSYS_RFORK                    = 251 // { int rfork(int flags); }\n\tSYS_OPENBSD_POLL             = 252 // { int openbsd_poll(struct pollfd *fds, u_int nfds, int timeout); }\n\tSYS_ISSETUGID                = 253 // { int issetugid(void); }\n\tSYS_LCHOWN                   = 254 // { int lchown(char *path, int uid, int gid); }\n\tSYS_AIO_READ                 = 255 // { int aio_read(struct aiocb *aiocbp); }\n\tSYS_AIO_WRITE                = 256 // { int aio_write(struct aiocb *aiocbp); }\n\tSYS_LIO_LISTIO               = 257 // { int lio_listio(int mode, struct aiocb * const *acb_list, int nent, struct sigevent *sig); }\n\tSYS_GETDENTS                 = 272 // { int getdents(int fd, char *buf, size_t count); }\n\tSYS_LCHMOD                   = 274 // { int lchmod(char *path, mode_t mode); }\n\tSYS_LUTIMES                  = 276 // { int lutimes(char *path, struct timeval *tptr); }\n\tSYS_NSTAT                    = 278 // { int nstat(char *path, struct nstat *ub); }\n\tSYS_NFSTAT                   = 279 // { int nfstat(int fd, struct nstat *sb); }\n\tSYS_NLSTAT                   = 280 // { int nlstat(char *path, struct nstat *ub); }\n\tSYS_PREADV                   = 289 // { ssize_t preadv(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); }\n\tSYS_PWRITEV                  = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); }\n\tSYS_FHOPEN                   = 298 // { int fhopen(const struct fhandle *u_fhp, int flags); }\n\tSYS_FHSTAT                   = 299 // { int fhstat(const struct fhandle *u_fhp, struct stat *sb); }\n\tSYS_MODNEXT                  = 300 // { int modnext(int modid); }\n\tSYS_MODSTAT                  = 301 // { int modstat(int modid, struct module_stat *stat); }\n\tSYS_MODFNEXT                 = 302 // { int modfnext(int modid); }\n\tSYS_MODFIND                  = 303 // { int modfind(const char *name); }\n\tSYS_KLDLOAD                  = 304 // { int kldload(const char *file); }\n\tSYS_KLDUNLOAD                = 305 // { int kldunload(int fileid); }\n\tSYS_KLDFIND                  = 306 // { int kldfind(const char *file); }\n\tSYS_KLDNEXT                  = 307 // { int kldnext(int fileid); }\n\tSYS_KLDSTAT                  = 308 // { int kldstat(int fileid, struct kld_file_stat* stat); }\n\tSYS_KLDFIRSTMOD              = 309 // { int kldfirstmod(int fileid); }\n\tSYS_GETSID                   = 310 // { int getsid(pid_t pid); }\n\tSYS_SETRESUID                = 311 // { int setresuid(uid_t ruid, uid_t euid, uid_t suid); }\n\tSYS_SETRESGID                = 312 // { int setresgid(gid_t rgid, gid_t egid, gid_t sgid); }\n\tSYS_AIO_RETURN               = 314 // { int aio_return(struct aiocb *aiocbp); }\n\tSYS_AIO_SUSPEND              = 315 // { int aio_suspend( struct aiocb * const * aiocbp, int nent, const struct timespec *timeout); }\n\tSYS_AIO_CANCEL               = 316 // { int aio_cancel(int fd, struct aiocb *aiocbp); }\n\tSYS_AIO_ERROR                = 317 // { int aio_error(struct aiocb *aiocbp); }\n\tSYS_OAIO_READ                = 318 // { int oaio_read(struct oaiocb *aiocbp); }\n\tSYS_OAIO_WRITE               = 319 // { int oaio_write(struct oaiocb *aiocbp); }\n\tSYS_OLIO_LISTIO              = 320 // { int olio_listio(int mode, struct oaiocb * const *acb_list, int nent, struct osigevent *sig); }\n\tSYS_YIELD                    = 321 // { int yield(void); }\n\tSYS_MLOCKALL                 = 324 // { int mlockall(int how); }\n\tSYS_MUNLOCKALL               = 325 // { int munlockall(void); }\n\tSYS___GETCWD                 = 326 // { int __getcwd(char *buf, u_int buflen); }\n\tSYS_SCHED_SETPARAM           = 327 // { int sched_setparam (pid_t pid, const struct sched_param *param); }\n\tSYS_SCHED_GETPARAM           = 328 // { int sched_getparam (pid_t pid, struct sched_param *param); }\n\tSYS_SCHED_SETSCHEDULER       = 329 // { int sched_setscheduler (pid_t pid, int policy, const struct sched_param *param); }\n\tSYS_SCHED_GETSCHEDULER       = 330 // { int sched_getscheduler (pid_t pid); }\n\tSYS_SCHED_YIELD              = 331 // { int sched_yield (void); }\n\tSYS_SCHED_GET_PRIORITY_MAX   = 332 // { int sched_get_priority_max (int policy); }\n\tSYS_SCHED_GET_PRIORITY_MIN   = 333 // { int sched_get_priority_min (int policy); }\n\tSYS_SCHED_RR_GET_INTERVAL    = 334 // { int sched_rr_get_interval (pid_t pid, struct timespec *interval); }\n\tSYS_UTRACE                   = 335 // { int utrace(const void *addr, size_t len); }\n\tSYS_KLDSYM                   = 337 // { int kldsym(int fileid, int cmd, void *data); }\n\tSYS_JAIL                     = 338 // { int jail(struct jail *jail); }\n\tSYS_SIGPROCMASK              = 340 // { int sigprocmask(int how, const sigset_t *set, sigset_t *oset); }\n\tSYS_SIGSUSPEND               = 341 // { int sigsuspend(const sigset_t *sigmask); }\n\tSYS_SIGPENDING               = 343 // { int sigpending(sigset_t *set); }\n\tSYS_SIGTIMEDWAIT             = 345 // { int sigtimedwait(const sigset_t *set, siginfo_t *info, const struct timespec *timeout); }\n\tSYS_SIGWAITINFO              = 346 // { int sigwaitinfo(const sigset_t *set, siginfo_t *info); }\n\tSYS___ACL_GET_FILE           = 347 // { int __acl_get_file(const char *path, acl_type_t type, struct acl *aclp); }\n\tSYS___ACL_SET_FILE           = 348 // { int __acl_set_file(const char *path, acl_type_t type, struct acl *aclp); }\n\tSYS___ACL_GET_FD             = 349 // { int __acl_get_fd(int filedes, acl_type_t type, struct acl *aclp); }\n\tSYS___ACL_SET_FD             = 350 // { int __acl_set_fd(int filedes, acl_type_t type, struct acl *aclp); }\n\tSYS___ACL_DELETE_FILE        = 351 // { int __acl_delete_file(const char *path, acl_type_t type); }\n\tSYS___ACL_DELETE_FD          = 352 // { int __acl_delete_fd(int filedes, acl_type_t type); }\n\tSYS___ACL_ACLCHECK_FILE      = 353 // { int __acl_aclcheck_file(const char *path, acl_type_t type, struct acl *aclp); }\n\tSYS___ACL_ACLCHECK_FD        = 354 // { int __acl_aclcheck_fd(int filedes, acl_type_t type, struct acl *aclp); }\n\tSYS_EXTATTRCTL               = 355 // { int extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); }\n\tSYS_EXTATTR_SET_FILE         = 356 // { ssize_t extattr_set_file( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_GET_FILE         = 357 // { ssize_t extattr_get_file( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_DELETE_FILE      = 358 // { int extattr_delete_file(const char *path, int attrnamespace, const char *attrname); }\n\tSYS_AIO_WAITCOMPLETE         = 359 // { int aio_waitcomplete( struct aiocb **aiocbp, struct timespec *timeout); }\n\tSYS_GETRESUID                = 360 // { int getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); }\n\tSYS_GETRESGID                = 361 // { int getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); }\n\tSYS_KQUEUE                   = 362 // { int kqueue(void); }\n\tSYS_KEVENT                   = 363 // { int kevent(int fd, struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); }\n\tSYS_EXTATTR_SET_FD           = 371 // { ssize_t extattr_set_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_GET_FD           = 372 // { ssize_t extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_DELETE_FD        = 373 // { int extattr_delete_fd(int fd, int attrnamespace, const char *attrname); }\n\tSYS___SETUGID                = 374 // { int __setugid(int flag); }\n\tSYS_EACCESS                  = 376 // { int eaccess(char *path, int amode); }\n\tSYS_NMOUNT                   = 378 // { int nmount(struct iovec *iovp, unsigned int iovcnt, int flags); }\n\tSYS___MAC_GET_PROC           = 384 // { int __mac_get_proc(struct mac *mac_p); }\n\tSYS___MAC_SET_PROC           = 385 // { int __mac_set_proc(struct mac *mac_p); }\n\tSYS___MAC_GET_FD             = 386 // { int __mac_get_fd(int fd, struct mac *mac_p); }\n\tSYS___MAC_GET_FILE           = 387 // { int __mac_get_file(const char *path_p, struct mac *mac_p); }\n\tSYS___MAC_SET_FD             = 388 // { int __mac_set_fd(int fd, struct mac *mac_p); }\n\tSYS___MAC_SET_FILE           = 389 // { int __mac_set_file(const char *path_p, struct mac *mac_p); }\n\tSYS_KENV                     = 390 // { int kenv(int what, const char *name, char *value, int len); }\n\tSYS_LCHFLAGS                 = 391 // { int lchflags(const char *path, u_long flags); }\n\tSYS_UUIDGEN                  = 392 // { int uuidgen(struct uuid *store, int count); }\n\tSYS_SENDFILE                 = 393 // { int sendfile(int fd, int s, off_t offset, size_t nbytes, struct sf_hdtr *hdtr, off_t *sbytes, int flags); }\n\tSYS_MAC_SYSCALL              = 394 // { int mac_syscall(const char *policy, int call, void *arg); }\n\tSYS_GETFSSTAT                = 395 // { int getfsstat(struct statfs *buf, long bufsize, int flags); }\n\tSYS_STATFS                   = 396 // { int statfs(char *path, struct statfs *buf); }\n\tSYS_FSTATFS                  = 397 // { int fstatfs(int fd, struct statfs *buf); }\n\tSYS_FHSTATFS                 = 398 // { int fhstatfs(const struct fhandle *u_fhp, struct statfs *buf); }\n\tSYS_KSEM_CLOSE               = 400 // { int ksem_close(semid_t id); }\n\tSYS_KSEM_POST                = 401 // { int ksem_post(semid_t id); }\n\tSYS_KSEM_WAIT                = 402 // { int ksem_wait(semid_t id); }\n\tSYS_KSEM_TRYWAIT             = 403 // { int ksem_trywait(semid_t id); }\n\tSYS_KSEM_INIT                = 404 // { int ksem_init(semid_t *idp, unsigned int value); }\n\tSYS_KSEM_OPEN                = 405 // { int ksem_open(semid_t *idp, const char *name, int oflag, mode_t mode, unsigned int value); }\n\tSYS_KSEM_UNLINK              = 406 // { int ksem_unlink(const char *name); }\n\tSYS_KSEM_GETVALUE            = 407 // { int ksem_getvalue(semid_t id, int *val); }\n\tSYS_KSEM_DESTROY             = 408 // { int ksem_destroy(semid_t id); }\n\tSYS___MAC_GET_PID            = 409 // { int __mac_get_pid(pid_t pid, struct mac *mac_p); }\n\tSYS___MAC_GET_LINK           = 410 // { int __mac_get_link(const char *path_p, struct mac *mac_p); }\n\tSYS___MAC_SET_LINK           = 411 // { int __mac_set_link(const char *path_p, struct mac *mac_p); }\n\tSYS_EXTATTR_SET_LINK         = 412 // { ssize_t extattr_set_link( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_GET_LINK         = 413 // { ssize_t extattr_get_link( const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_DELETE_LINK      = 414 // { int extattr_delete_link( const char *path, int attrnamespace, const char *attrname); }\n\tSYS___MAC_EXECVE             = 415 // { int __mac_execve(char *fname, char **argv, char **envv, struct mac *mac_p); }\n\tSYS_SIGACTION                = 416 // { int sigaction(int sig, const struct sigaction *act, struct sigaction *oact); }\n\tSYS_SIGRETURN                = 417 // { int sigreturn( const struct __ucontext *sigcntxp); }\n\tSYS_GETCONTEXT               = 421 // { int getcontext(struct __ucontext *ucp); }\n\tSYS_SETCONTEXT               = 422 // { int setcontext( const struct __ucontext *ucp); }\n\tSYS_SWAPCONTEXT              = 423 // { int swapcontext(struct __ucontext *oucp, const struct __ucontext *ucp); }\n\tSYS_SWAPOFF                  = 424 // { int swapoff(const char *name); }\n\tSYS___ACL_GET_LINK           = 425 // { int __acl_get_link(const char *path, acl_type_t type, struct acl *aclp); }\n\tSYS___ACL_SET_LINK           = 426 // { int __acl_set_link(const char *path, acl_type_t type, struct acl *aclp); }\n\tSYS___ACL_DELETE_LINK        = 427 // { int __acl_delete_link(const char *path, acl_type_t type); }\n\tSYS___ACL_ACLCHECK_LINK      = 428 // { int __acl_aclcheck_link(const char *path, acl_type_t type, struct acl *aclp); }\n\tSYS_SIGWAIT                  = 429 // { int sigwait(const sigset_t *set, int *sig); }\n\tSYS_THR_CREATE               = 430 // { int thr_create(ucontext_t *ctx, long *id, int flags); }\n\tSYS_THR_EXIT                 = 431 // { void thr_exit(long *state); }\n\tSYS_THR_SELF                 = 432 // { int thr_self(long *id); }\n\tSYS_THR_KILL                 = 433 // { int thr_kill(long id, int sig); }\n\tSYS__UMTX_LOCK               = 434 // { int _umtx_lock(struct umtx *umtx); }\n\tSYS__UMTX_UNLOCK             = 435 // { int _umtx_unlock(struct umtx *umtx); }\n\tSYS_JAIL_ATTACH              = 436 // { int jail_attach(int jid); }\n\tSYS_EXTATTR_LIST_FD          = 437 // { ssize_t extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); }\n\tSYS_EXTATTR_LIST_FILE        = 438 // { ssize_t extattr_list_file( const char *path, int attrnamespace, void *data, size_t nbytes); }\n\tSYS_EXTATTR_LIST_LINK        = 439 // { ssize_t extattr_list_link( const char *path, int attrnamespace, void *data, size_t nbytes); }\n\tSYS_KSEM_TIMEDWAIT           = 441 // { int ksem_timedwait(semid_t id, const struct timespec *abstime); }\n\tSYS_THR_SUSPEND              = 442 // { int thr_suspend( const struct timespec *timeout); }\n\tSYS_THR_WAKE                 = 443 // { int thr_wake(long id); }\n\tSYS_KLDUNLOADF               = 444 // { int kldunloadf(int fileid, int flags); }\n\tSYS_AUDIT                    = 445 // { int audit(const void *record, u_int length); }\n\tSYS_AUDITON                  = 446 // { int auditon(int cmd, void *data, u_int length); }\n\tSYS_GETAUID                  = 447 // { int getauid(uid_t *auid); }\n\tSYS_SETAUID                  = 448 // { int setauid(uid_t *auid); }\n\tSYS_GETAUDIT                 = 449 // { int getaudit(struct auditinfo *auditinfo); }\n\tSYS_SETAUDIT                 = 450 // { int setaudit(struct auditinfo *auditinfo); }\n\tSYS_GETAUDIT_ADDR            = 451 // { int getaudit_addr( struct auditinfo_addr *auditinfo_addr, u_int length); }\n\tSYS_SETAUDIT_ADDR            = 452 // { int setaudit_addr( struct auditinfo_addr *auditinfo_addr, u_int length); }\n\tSYS_AUDITCTL                 = 453 // { int auditctl(char *path); }\n\tSYS__UMTX_OP                 = 454 // { int _umtx_op(void *obj, int op, u_long val, void *uaddr1, void *uaddr2); }\n\tSYS_THR_NEW                  = 455 // { int thr_new(struct thr_param *param, int param_size); }\n\tSYS_SIGQUEUE                 = 456 // { int sigqueue(pid_t pid, int signum, void *value); }\n\tSYS_KMQ_OPEN                 = 457 // { int kmq_open(const char *path, int flags, mode_t mode, const struct mq_attr *attr); }\n\tSYS_KMQ_SETATTR              = 458 // { int kmq_setattr(int mqd,\t\tconst struct mq_attr *attr,\t\tstruct mq_attr *oattr); }\n\tSYS_KMQ_TIMEDRECEIVE         = 459 // { int kmq_timedreceive(int mqd,\tchar *msg_ptr, size_t msg_len,\tunsigned *msg_prio,\t\t\tconst struct timespec *abs_timeout); }\n\tSYS_KMQ_TIMEDSEND            = 460 // { int kmq_timedsend(int mqd,\t\tconst char *msg_ptr, size_t msg_len,unsigned msg_prio,\t\t\tconst struct timespec *abs_timeout);}\n\tSYS_KMQ_NOTIFY               = 461 // { int kmq_notify(int mqd,\t\tconst struct sigevent *sigev); }\n\tSYS_KMQ_UNLINK               = 462 // { int kmq_unlink(const char *path); }\n\tSYS_ABORT2                   = 463 // { int abort2(const char *why, int nargs, void **args); }\n\tSYS_THR_SET_NAME             = 464 // { int thr_set_name(long id, const char *name); }\n\tSYS_AIO_FSYNC                = 465 // { int aio_fsync(int op, struct aiocb *aiocbp); }\n\tSYS_RTPRIO_THREAD            = 466 // { int rtprio_thread(int function, lwpid_t lwpid, struct rtprio *rtp); }\n\tSYS_SCTP_PEELOFF             = 471 // { int sctp_peeloff(int sd, uint32_t name); }\n\tSYS_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); }\n\tSYS_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); }\n\tSYS_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); }\n\tSYS_PREAD                    = 475 // { ssize_t pread(int fd, void *buf, size_t nbyte, off_t offset); }\n\tSYS_PWRITE                   = 476 // { ssize_t pwrite(int fd, const void *buf, size_t nbyte, off_t offset); }\n\tSYS_MMAP                     = 477 // { caddr_t mmap(caddr_t addr, size_t len, int prot, int flags, int fd, off_t pos); }\n\tSYS_LSEEK                    = 478 // { off_t lseek(int fd, off_t offset, int whence); }\n\tSYS_TRUNCATE                 = 479 // { int truncate(char *path, off_t length); }\n\tSYS_FTRUNCATE                = 480 // { int ftruncate(int fd, off_t length); }\n\tSYS_THR_KILL2                = 481 // { int thr_kill2(pid_t pid, long id, int sig); }\n\tSYS_SHM_OPEN                 = 482 // { int shm_open(const char *path, int flags, mode_t mode); }\n\tSYS_SHM_UNLINK               = 483 // { int shm_unlink(const char *path); }\n\tSYS_CPUSET                   = 484 // { int cpuset(cpusetid_t *setid); }\n\tSYS_CPUSET_SETID             = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, cpusetid_t setid); }\n\tSYS_CPUSET_GETID             = 486 // { int cpuset_getid(cpulevel_t level, cpuwhich_t which, id_t id, cpusetid_t *setid); }\n\tSYS_CPUSET_GETAFFINITY       = 487 // { int cpuset_getaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t cpusetsize, cpuset_t *mask); }\n\tSYS_CPUSET_SETAFFINITY       = 488 // { int cpuset_setaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t cpusetsize, const cpuset_t *mask); }\n\tSYS_FACCESSAT                = 489 // { int faccessat(int fd, char *path, int amode, int flag); }\n\tSYS_FCHMODAT                 = 490 // { int fchmodat(int fd, char *path, mode_t mode, int flag); }\n\tSYS_FCHOWNAT                 = 491 // { int fchownat(int fd, char *path, uid_t uid, gid_t gid, int flag); }\n\tSYS_FEXECVE                  = 492 // { int fexecve(int fd, char **argv, char **envv); }\n\tSYS_FSTATAT                  = 493 // { int fstatat(int fd, char *path, struct stat *buf, int flag); }\n\tSYS_FUTIMESAT                = 494 // { int futimesat(int fd, char *path, struct timeval *times); }\n\tSYS_LINKAT                   = 495 // { int linkat(int fd1, char *path1, int fd2, char *path2, int flag); }\n\tSYS_MKDIRAT                  = 496 // { int mkdirat(int fd, char *path, mode_t mode); }\n\tSYS_MKFIFOAT                 = 497 // { int mkfifoat(int fd, char *path, mode_t mode); }\n\tSYS_MKNODAT                  = 498 // { int mknodat(int fd, char *path, mode_t mode, dev_t dev); }\n\tSYS_OPENAT                   = 499 // { int openat(int fd, char *path, int flag, mode_t mode); }\n\tSYS_READLINKAT               = 500 // { int readlinkat(int fd, char *path, char *buf, size_t bufsize); }\n\tSYS_RENAMEAT                 = 501 // { int renameat(int oldfd, char *old, int newfd, char *new); }\n\tSYS_SYMLINKAT                = 502 // { int symlinkat(char *path1, int fd, char *path2); }\n\tSYS_UNLINKAT                 = 503 // { int unlinkat(int fd, char *path, int flag); }\n\tSYS_POSIX_OPENPT             = 504 // { int posix_openpt(int flags); }\n\tSYS_GSSD_SYSCALL             = 505 // { int gssd_syscall(char *path); }\n\tSYS_JAIL_GET                 = 506 // { int jail_get(struct iovec *iovp, unsigned int iovcnt, int flags); }\n\tSYS_JAIL_SET                 = 507 // { int jail_set(struct iovec *iovp, unsigned int iovcnt, int flags); }\n\tSYS_JAIL_REMOVE              = 508 // { int jail_remove(int jid); }\n\tSYS_CLOSEFROM                = 509 // { int closefrom(int lowfd); }\n\tSYS___SEMCTL                 = 510 // { int __semctl(int semid, int semnum, int cmd, union semun *arg); }\n\tSYS_MSGCTL                   = 511 // { int msgctl(int msqid, int cmd, struct msqid_ds *buf); }\n\tSYS_SHMCTL                   = 512 // { int shmctl(int shmid, int cmd, struct shmid_ds *buf); }\n\tSYS_LPATHCONF                = 513 // { int lpathconf(char *path, int name); }\n\tSYS___CAP_RIGHTS_GET         = 515 // { int __cap_rights_get(int version, int fd, cap_rights_t *rightsp); }\n\tSYS_CAP_ENTER                = 516 // { int cap_enter(void); }\n\tSYS_CAP_GETMODE              = 517 // { int cap_getmode(u_int *modep); }\n\tSYS_PDFORK                   = 518 // { int pdfork(int *fdp, int flags); }\n\tSYS_PDKILL                   = 519 // { int pdkill(int fd, int signum); }\n\tSYS_PDGETPID                 = 520 // { int pdgetpid(int fd, pid_t *pidp); }\n\tSYS_PSELECT                  = 522 // { int pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *sm); }\n\tSYS_GETLOGINCLASS            = 523 // { int getloginclass(char *namebuf, size_t namelen); }\n\tSYS_SETLOGINCLASS            = 524 // { int setloginclass(const char *namebuf); }\n\tSYS_RCTL_GET_RACCT           = 525 // { int rctl_get_racct(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }\n\tSYS_RCTL_GET_RULES           = 526 // { int rctl_get_rules(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }\n\tSYS_RCTL_GET_LIMITS          = 527 // { int rctl_get_limits(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }\n\tSYS_RCTL_ADD_RULE            = 528 // { int rctl_add_rule(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }\n\tSYS_RCTL_REMOVE_RULE         = 529 // { int rctl_remove_rule(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }\n\tSYS_POSIX_FALLOCATE          = 530 // { int posix_fallocate(int fd, off_t offset, off_t len); }\n\tSYS_POSIX_FADVISE            = 531 // { int posix_fadvise(int fd, off_t offset, off_t len, int advice); }\n\tSYS_WAIT6                    = 532 // { int wait6(idtype_t idtype, id_t id, int *status, int options, struct __wrusage *wrusage, siginfo_t *info); }\n\tSYS_CAP_RIGHTS_LIMIT         = 533 // { int cap_rights_limit(int fd, cap_rights_t *rightsp); }\n\tSYS_CAP_IOCTLS_LIMIT         = 534 // { int cap_ioctls_limit(int fd, const u_long *cmds, size_t ncmds); }\n\tSYS_CAP_IOCTLS_GET           = 535 // { ssize_t cap_ioctls_get(int fd, u_long *cmds, size_t maxcmds); }\n\tSYS_CAP_FCNTLS_LIMIT         = 536 // { int cap_fcntls_limit(int fd, uint32_t fcntlrights); }\n\tSYS_CAP_FCNTLS_GET           = 537 // { int cap_fcntls_get(int fd, uint32_t *fcntlrightsp); }\n\tSYS_BINDAT                   = 538 // { int bindat(int fd, int s, caddr_t name, int namelen); }\n\tSYS_CONNECTAT                = 539 // { int connectat(int fd, int s, caddr_t name, int namelen); }\n\tSYS_CHFLAGSAT                = 540 // { int chflagsat(int fd, const char *path, u_long flags, int atflag); }\n\tSYS_ACCEPT4                  = 541 // { int accept4(int s, struct sockaddr * __restrict name, __socklen_t * __restrict anamelen, int flags); }\n\tSYS_PIPE2                    = 542 // { int pipe2(int *fildes, int flags); }\n\tSYS_AIO_MLOCK                = 543 // { int aio_mlock(struct aiocb *aiocbp); }\n\tSYS_PROCCTL                  = 544 // { int procctl(idtype_t idtype, id_t id, int com, void *data); }\n\tSYS_PPOLL                    = 545 // { int ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *set); }\n\tSYS_FUTIMENS                 = 546 // { int futimens(int fd, struct timespec *times); }\n\tSYS_UTIMENSAT                = 547 // { int utimensat(int fd, char *path, struct timespec *times, int flag); }\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm64.go",
    "content": "// go run mksysnum.go https://svn.freebsd.org/base/stable/10/sys/kern/syscalls.master\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build arm64,freebsd\n\npackage unix\n\nconst (\n\t// SYS_NOSYS = 0;  // { int nosys(void); } syscall nosys_args int\n\tSYS_EXIT                     = 1   // { void sys_exit(int rval); } exit \\\n\tSYS_FORK                     = 2   // { int fork(void); }\n\tSYS_READ                     = 3   // { ssize_t read(int fd, void *buf, \\\n\tSYS_WRITE                    = 4   // { ssize_t write(int fd, const void *buf, \\\n\tSYS_OPEN                     = 5   // { int open(char *path, int flags, int mode); }\n\tSYS_CLOSE                    = 6   // { int close(int fd); }\n\tSYS_WAIT4                    = 7   // { int wait4(int pid, int *status, \\\n\tSYS_LINK                     = 9   // { int link(char *path, char *link); }\n\tSYS_UNLINK                   = 10  // { int unlink(char *path); }\n\tSYS_CHDIR                    = 12  // { int chdir(char *path); }\n\tSYS_FCHDIR                   = 13  // { int fchdir(int fd); }\n\tSYS_MKNOD                    = 14  // { int mknod(char *path, int mode, int dev); }\n\tSYS_CHMOD                    = 15  // { int chmod(char *path, int mode); }\n\tSYS_CHOWN                    = 16  // { int chown(char *path, int uid, int gid); }\n\tSYS_OBREAK                   = 17  // { int obreak(char *nsize); } break \\\n\tSYS_GETPID                   = 20  // { pid_t getpid(void); }\n\tSYS_MOUNT                    = 21  // { int mount(char *type, char *path, \\\n\tSYS_UNMOUNT                  = 22  // { int unmount(char *path, int flags); }\n\tSYS_SETUID                   = 23  // { int setuid(uid_t uid); }\n\tSYS_GETUID                   = 24  // { uid_t getuid(void); }\n\tSYS_GETEUID                  = 25  // { uid_t geteuid(void); }\n\tSYS_PTRACE                   = 26  // { int ptrace(int req, pid_t pid, \\\n\tSYS_RECVMSG                  = 27  // { int recvmsg(int s, struct msghdr *msg, \\\n\tSYS_SENDMSG                  = 28  // { int sendmsg(int s, struct msghdr *msg, \\\n\tSYS_RECVFROM                 = 29  // { int recvfrom(int s, caddr_t buf, \\\n\tSYS_ACCEPT                   = 30  // { int accept(int s, \\\n\tSYS_GETPEERNAME              = 31  // { int getpeername(int fdes, \\\n\tSYS_GETSOCKNAME              = 32  // { int getsockname(int fdes, \\\n\tSYS_ACCESS                   = 33  // { int access(char *path, int amode); }\n\tSYS_CHFLAGS                  = 34  // { int chflags(const char *path, u_long flags); }\n\tSYS_FCHFLAGS                 = 35  // { int fchflags(int fd, u_long flags); }\n\tSYS_SYNC                     = 36  // { int sync(void); }\n\tSYS_KILL                     = 37  // { int kill(int pid, int signum); }\n\tSYS_GETPPID                  = 39  // { pid_t getppid(void); }\n\tSYS_DUP                      = 41  // { int dup(u_int fd); }\n\tSYS_GETEGID                  = 43  // { gid_t getegid(void); }\n\tSYS_PROFIL                   = 44  // { int profil(caddr_t samples, size_t size, \\\n\tSYS_KTRACE                   = 45  // { int ktrace(const char *fname, int ops, \\\n\tSYS_GETGID                   = 47  // { gid_t getgid(void); }\n\tSYS_GETLOGIN                 = 49  // { int getlogin(char *namebuf, u_int \\\n\tSYS_SETLOGIN                 = 50  // { int setlogin(char *namebuf); }\n\tSYS_ACCT                     = 51  // { int acct(char *path); }\n\tSYS_SIGALTSTACK              = 53  // { int sigaltstack(stack_t *ss, \\\n\tSYS_IOCTL                    = 54  // { int ioctl(int fd, u_long com, \\\n\tSYS_REBOOT                   = 55  // { int reboot(int opt); }\n\tSYS_REVOKE                   = 56  // { int revoke(char *path); }\n\tSYS_SYMLINK                  = 57  // { int symlink(char *path, char *link); }\n\tSYS_READLINK                 = 58  // { ssize_t readlink(char *path, char *buf, \\\n\tSYS_EXECVE                   = 59  // { int execve(char *fname, char **argv, \\\n\tSYS_UMASK                    = 60  // { int umask(int newmask); } umask umask_args \\\n\tSYS_CHROOT                   = 61  // { int chroot(char *path); }\n\tSYS_MSYNC                    = 65  // { int msync(void *addr, size_t len, \\\n\tSYS_VFORK                    = 66  // { int vfork(void); }\n\tSYS_SBRK                     = 69  // { int sbrk(int incr); }\n\tSYS_SSTK                     = 70  // { int sstk(int incr); }\n\tSYS_OVADVISE                 = 72  // { int ovadvise(int anom); } vadvise \\\n\tSYS_MUNMAP                   = 73  // { int munmap(void *addr, size_t len); }\n\tSYS_MPROTECT                 = 74  // { int mprotect(const void *addr, size_t len, \\\n\tSYS_MADVISE                  = 75  // { int madvise(void *addr, size_t len, \\\n\tSYS_MINCORE                  = 78  // { int mincore(const void *addr, size_t len, \\\n\tSYS_GETGROUPS                = 79  // { int getgroups(u_int gidsetsize, \\\n\tSYS_SETGROUPS                = 80  // { int setgroups(u_int gidsetsize, \\\n\tSYS_GETPGRP                  = 81  // { int getpgrp(void); }\n\tSYS_SETPGID                  = 82  // { int setpgid(int pid, int pgid); }\n\tSYS_SETITIMER                = 83  // { int setitimer(u_int which, struct \\\n\tSYS_SWAPON                   = 85  // { int swapon(char *name); }\n\tSYS_GETITIMER                = 86  // { int getitimer(u_int which, \\\n\tSYS_GETDTABLESIZE            = 89  // { int getdtablesize(void); }\n\tSYS_DUP2                     = 90  // { int dup2(u_int from, u_int to); }\n\tSYS_FCNTL                    = 92  // { int fcntl(int fd, int cmd, long arg); }\n\tSYS_SELECT                   = 93  // { int select(int nd, fd_set *in, fd_set *ou, \\\n\tSYS_FSYNC                    = 95  // { int fsync(int fd); }\n\tSYS_SETPRIORITY              = 96  // { int setpriority(int which, int who, \\\n\tSYS_SOCKET                   = 97  // { int socket(int domain, int type, \\\n\tSYS_CONNECT                  = 98  // { int connect(int s, caddr_t name, \\\n\tSYS_GETPRIORITY              = 100 // { int getpriority(int which, int who); }\n\tSYS_BIND                     = 104 // { int bind(int s, caddr_t name, \\\n\tSYS_SETSOCKOPT               = 105 // { int setsockopt(int s, int level, int name, \\\n\tSYS_LISTEN                   = 106 // { int listen(int s, int backlog); }\n\tSYS_GETTIMEOFDAY             = 116 // { int gettimeofday(struct timeval *tp, \\\n\tSYS_GETRUSAGE                = 117 // { int getrusage(int who, \\\n\tSYS_GETSOCKOPT               = 118 // { int getsockopt(int s, int level, int name, \\\n\tSYS_READV                    = 120 // { int readv(int fd, struct iovec *iovp, \\\n\tSYS_WRITEV                   = 121 // { int writev(int fd, struct iovec *iovp, \\\n\tSYS_SETTIMEOFDAY             = 122 // { int settimeofday(struct timeval *tv, \\\n\tSYS_FCHOWN                   = 123 // { int fchown(int fd, int uid, int gid); }\n\tSYS_FCHMOD                   = 124 // { int fchmod(int fd, int mode); }\n\tSYS_SETREUID                 = 126 // { int setreuid(int ruid, int euid); }\n\tSYS_SETREGID                 = 127 // { int setregid(int rgid, int egid); }\n\tSYS_RENAME                   = 128 // { int rename(char *from, char *to); }\n\tSYS_FLOCK                    = 131 // { int flock(int fd, int how); }\n\tSYS_MKFIFO                   = 132 // { int mkfifo(char *path, int mode); }\n\tSYS_SENDTO                   = 133 // { int sendto(int s, caddr_t buf, size_t len, \\\n\tSYS_SHUTDOWN                 = 134 // { int shutdown(int s, int how); }\n\tSYS_SOCKETPAIR               = 135 // { int socketpair(int domain, int type, \\\n\tSYS_MKDIR                    = 136 // { int mkdir(char *path, int mode); }\n\tSYS_RMDIR                    = 137 // { int rmdir(char *path); }\n\tSYS_UTIMES                   = 138 // { int utimes(char *path, \\\n\tSYS_ADJTIME                  = 140 // { int adjtime(struct timeval *delta, \\\n\tSYS_SETSID                   = 147 // { int setsid(void); }\n\tSYS_QUOTACTL                 = 148 // { int quotactl(char *path, int cmd, int uid, \\\n\tSYS_NLM_SYSCALL              = 154 // { int nlm_syscall(int debug_level, int grace_period, int addr_count, char **addrs); }\n\tSYS_NFSSVC                   = 155 // { int nfssvc(int flag, caddr_t argp); }\n\tSYS_LGETFH                   = 160 // { int lgetfh(char *fname, \\\n\tSYS_GETFH                    = 161 // { int getfh(char *fname, \\\n\tSYS_SYSARCH                  = 165 // { int sysarch(int op, char *parms); }\n\tSYS_RTPRIO                   = 166 // { int rtprio(int function, pid_t pid, \\\n\tSYS_SEMSYS                   = 169 // { int semsys(int which, int a2, int a3, \\\n\tSYS_MSGSYS                   = 170 // { int msgsys(int which, int a2, int a3, \\\n\tSYS_SHMSYS                   = 171 // { int shmsys(int which, int a2, int a3, \\\n\tSYS_SETFIB                   = 175 // { int setfib(int fibnum); }\n\tSYS_NTP_ADJTIME              = 176 // { int ntp_adjtime(struct timex *tp); }\n\tSYS_SETGID                   = 181 // { int setgid(gid_t gid); }\n\tSYS_SETEGID                  = 182 // { int setegid(gid_t egid); }\n\tSYS_SETEUID                  = 183 // { int seteuid(uid_t euid); }\n\tSYS_STAT                     = 188 // { int stat(char *path, struct stat *ub); }\n\tSYS_FSTAT                    = 189 // { int fstat(int fd, struct stat *sb); }\n\tSYS_LSTAT                    = 190 // { int lstat(char *path, struct stat *ub); }\n\tSYS_PATHCONF                 = 191 // { int pathconf(char *path, int name); }\n\tSYS_FPATHCONF                = 192 // { int fpathconf(int fd, int name); }\n\tSYS_GETRLIMIT                = 194 // { int getrlimit(u_int which, \\\n\tSYS_SETRLIMIT                = 195 // { int setrlimit(u_int which, \\\n\tSYS_GETDIRENTRIES            = 196 // { int getdirentries(int fd, char *buf, \\\n\tSYS___SYSCTL                 = 202 // { int __sysctl(int *name, u_int namelen, \\\n\tSYS_MLOCK                    = 203 // { int mlock(const void *addr, size_t len); }\n\tSYS_MUNLOCK                  = 204 // { int munlock(const void *addr, size_t len); }\n\tSYS_UNDELETE                 = 205 // { int undelete(char *path); }\n\tSYS_FUTIMES                  = 206 // { int futimes(int fd, struct timeval *tptr); }\n\tSYS_GETPGID                  = 207 // { int getpgid(pid_t pid); }\n\tSYS_POLL                     = 209 // { int poll(struct pollfd *fds, u_int nfds, \\\n\tSYS_SEMGET                   = 221 // { int semget(key_t key, int nsems, \\\n\tSYS_SEMOP                    = 222 // { int semop(int semid, struct sembuf *sops, \\\n\tSYS_MSGGET                   = 225 // { int msgget(key_t key, int msgflg); }\n\tSYS_MSGSND                   = 226 // { int msgsnd(int msqid, const void *msgp, \\\n\tSYS_MSGRCV                   = 227 // { int msgrcv(int msqid, void *msgp, \\\n\tSYS_SHMAT                    = 228 // { int shmat(int shmid, const void *shmaddr, \\\n\tSYS_SHMDT                    = 230 // { int shmdt(const void *shmaddr); }\n\tSYS_SHMGET                   = 231 // { int shmget(key_t key, size_t size, \\\n\tSYS_CLOCK_GETTIME            = 232 // { int clock_gettime(clockid_t clock_id, \\\n\tSYS_CLOCK_SETTIME            = 233 // { int clock_settime( \\\n\tSYS_CLOCK_GETRES             = 234 // { int clock_getres(clockid_t clock_id, \\\n\tSYS_KTIMER_CREATE            = 235 // { int ktimer_create(clockid_t clock_id, \\\n\tSYS_KTIMER_DELETE            = 236 // { int ktimer_delete(int timerid); }\n\tSYS_KTIMER_SETTIME           = 237 // { int ktimer_settime(int timerid, int flags, \\\n\tSYS_KTIMER_GETTIME           = 238 // { int ktimer_gettime(int timerid, struct \\\n\tSYS_KTIMER_GETOVERRUN        = 239 // { int ktimer_getoverrun(int timerid); }\n\tSYS_NANOSLEEP                = 240 // { int nanosleep(const struct timespec *rqtp, \\\n\tSYS_FFCLOCK_GETCOUNTER       = 241 // { int ffclock_getcounter(ffcounter *ffcount); }\n\tSYS_FFCLOCK_SETESTIMATE      = 242 // { int ffclock_setestimate( \\\n\tSYS_FFCLOCK_GETESTIMATE      = 243 // { int ffclock_getestimate( \\\n\tSYS_CLOCK_NANOSLEEP          = 244 // { int clock_nanosleep(clockid_t clock_id, \\\n\tSYS_CLOCK_GETCPUCLOCKID2     = 247 // { int clock_getcpuclockid2(id_t id,\\\n\tSYS_NTP_GETTIME              = 248 // { int ntp_gettime(struct ntptimeval *ntvp); }\n\tSYS_MINHERIT                 = 250 // { int minherit(void *addr, size_t len, \\\n\tSYS_RFORK                    = 251 // { int rfork(int flags); }\n\tSYS_OPENBSD_POLL             = 252 // { int openbsd_poll(struct pollfd *fds, \\\n\tSYS_ISSETUGID                = 253 // { int issetugid(void); }\n\tSYS_LCHOWN                   = 254 // { int lchown(char *path, int uid, int gid); }\n\tSYS_AIO_READ                 = 255 // { int aio_read(struct aiocb *aiocbp); }\n\tSYS_AIO_WRITE                = 256 // { int aio_write(struct aiocb *aiocbp); }\n\tSYS_LIO_LISTIO               = 257 // { int lio_listio(int mode, \\\n\tSYS_GETDENTS                 = 272 // { int getdents(int fd, char *buf, \\\n\tSYS_LCHMOD                   = 274 // { int lchmod(char *path, mode_t mode); }\n\tSYS_LUTIMES                  = 276 // { int lutimes(char *path, \\\n\tSYS_NSTAT                    = 278 // { int nstat(char *path, struct nstat *ub); }\n\tSYS_NFSTAT                   = 279 // { int nfstat(int fd, struct nstat *sb); }\n\tSYS_NLSTAT                   = 280 // { int nlstat(char *path, struct nstat *ub); }\n\tSYS_PREADV                   = 289 // { ssize_t preadv(int fd, struct iovec *iovp, \\\n\tSYS_PWRITEV                  = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, \\\n\tSYS_FHOPEN                   = 298 // { int fhopen(const struct fhandle *u_fhp, \\\n\tSYS_FHSTAT                   = 299 // { int fhstat(const struct fhandle *u_fhp, \\\n\tSYS_MODNEXT                  = 300 // { int modnext(int modid); }\n\tSYS_MODSTAT                  = 301 // { int modstat(int modid, \\\n\tSYS_MODFNEXT                 = 302 // { int modfnext(int modid); }\n\tSYS_MODFIND                  = 303 // { int modfind(const char *name); }\n\tSYS_KLDLOAD                  = 304 // { int kldload(const char *file); }\n\tSYS_KLDUNLOAD                = 305 // { int kldunload(int fileid); }\n\tSYS_KLDFIND                  = 306 // { int kldfind(const char *file); }\n\tSYS_KLDNEXT                  = 307 // { int kldnext(int fileid); }\n\tSYS_KLDSTAT                  = 308 // { int kldstat(int fileid, struct \\\n\tSYS_KLDFIRSTMOD              = 309 // { int kldfirstmod(int fileid); }\n\tSYS_GETSID                   = 310 // { int getsid(pid_t pid); }\n\tSYS_SETRESUID                = 311 // { int setresuid(uid_t ruid, uid_t euid, \\\n\tSYS_SETRESGID                = 312 // { int setresgid(gid_t rgid, gid_t egid, \\\n\tSYS_AIO_RETURN               = 314 // { ssize_t aio_return(struct aiocb *aiocbp); }\n\tSYS_AIO_SUSPEND              = 315 // { int aio_suspend( \\\n\tSYS_AIO_CANCEL               = 316 // { int aio_cancel(int fd, \\\n\tSYS_AIO_ERROR                = 317 // { int aio_error(struct aiocb *aiocbp); }\n\tSYS_YIELD                    = 321 // { int yield(void); }\n\tSYS_MLOCKALL                 = 324 // { int mlockall(int how); }\n\tSYS_MUNLOCKALL               = 325 // { int munlockall(void); }\n\tSYS___GETCWD                 = 326 // { int __getcwd(char *buf, u_int buflen); }\n\tSYS_SCHED_SETPARAM           = 327 // { int sched_setparam (pid_t pid, \\\n\tSYS_SCHED_GETPARAM           = 328 // { int sched_getparam (pid_t pid, struct \\\n\tSYS_SCHED_SETSCHEDULER       = 329 // { int sched_setscheduler (pid_t pid, int \\\n\tSYS_SCHED_GETSCHEDULER       = 330 // { int sched_getscheduler (pid_t pid); }\n\tSYS_SCHED_YIELD              = 331 // { int sched_yield (void); }\n\tSYS_SCHED_GET_PRIORITY_MAX   = 332 // { int sched_get_priority_max (int policy); }\n\tSYS_SCHED_GET_PRIORITY_MIN   = 333 // { int sched_get_priority_min (int policy); }\n\tSYS_SCHED_RR_GET_INTERVAL    = 334 // { int sched_rr_get_interval (pid_t pid, \\\n\tSYS_UTRACE                   = 335 // { int utrace(const void *addr, size_t len); }\n\tSYS_KLDSYM                   = 337 // { int kldsym(int fileid, int cmd, \\\n\tSYS_JAIL                     = 338 // { int jail(struct jail *jail); }\n\tSYS_SIGPROCMASK              = 340 // { int sigprocmask(int how, \\\n\tSYS_SIGSUSPEND               = 341 // { int sigsuspend(const sigset_t *sigmask); }\n\tSYS_SIGPENDING               = 343 // { int sigpending(sigset_t *set); }\n\tSYS_SIGTIMEDWAIT             = 345 // { int sigtimedwait(const sigset_t *set, \\\n\tSYS_SIGWAITINFO              = 346 // { int sigwaitinfo(const sigset_t *set, \\\n\tSYS___ACL_GET_FILE           = 347 // { int __acl_get_file(const char *path, \\\n\tSYS___ACL_SET_FILE           = 348 // { int __acl_set_file(const char *path, \\\n\tSYS___ACL_GET_FD             = 349 // { int __acl_get_fd(int filedes, \\\n\tSYS___ACL_SET_FD             = 350 // { int __acl_set_fd(int filedes, \\\n\tSYS___ACL_DELETE_FILE        = 351 // { int __acl_delete_file(const char *path, \\\n\tSYS___ACL_DELETE_FD          = 352 // { int __acl_delete_fd(int filedes, \\\n\tSYS___ACL_ACLCHECK_FILE      = 353 // { int __acl_aclcheck_file(const char *path, \\\n\tSYS___ACL_ACLCHECK_FD        = 354 // { int __acl_aclcheck_fd(int filedes, \\\n\tSYS_EXTATTRCTL               = 355 // { int extattrctl(const char *path, int cmd, \\\n\tSYS_EXTATTR_SET_FILE         = 356 // { ssize_t extattr_set_file( \\\n\tSYS_EXTATTR_GET_FILE         = 357 // { ssize_t extattr_get_file( \\\n\tSYS_EXTATTR_DELETE_FILE      = 358 // { int extattr_delete_file(const char *path, \\\n\tSYS_AIO_WAITCOMPLETE         = 359 // { ssize_t aio_waitcomplete( \\\n\tSYS_GETRESUID                = 360 // { int getresuid(uid_t *ruid, uid_t *euid, \\\n\tSYS_GETRESGID                = 361 // { int getresgid(gid_t *rgid, gid_t *egid, \\\n\tSYS_KQUEUE                   = 362 // { int kqueue(void); }\n\tSYS_KEVENT                   = 363 // { int kevent(int fd, \\\n\tSYS_EXTATTR_SET_FD           = 371 // { ssize_t extattr_set_fd(int fd, \\\n\tSYS_EXTATTR_GET_FD           = 372 // { ssize_t extattr_get_fd(int fd, \\\n\tSYS_EXTATTR_DELETE_FD        = 373 // { int extattr_delete_fd(int fd, \\\n\tSYS___SETUGID                = 374 // { int __setugid(int flag); }\n\tSYS_EACCESS                  = 376 // { int eaccess(char *path, int amode); }\n\tSYS_NMOUNT                   = 378 // { int nmount(struct iovec *iovp, \\\n\tSYS___MAC_GET_PROC           = 384 // { int __mac_get_proc(struct mac *mac_p); }\n\tSYS___MAC_SET_PROC           = 385 // { int __mac_set_proc(struct mac *mac_p); }\n\tSYS___MAC_GET_FD             = 386 // { int __mac_get_fd(int fd, \\\n\tSYS___MAC_GET_FILE           = 387 // { int __mac_get_file(const char *path_p, \\\n\tSYS___MAC_SET_FD             = 388 // { int __mac_set_fd(int fd, \\\n\tSYS___MAC_SET_FILE           = 389 // { int __mac_set_file(const char *path_p, \\\n\tSYS_KENV                     = 390 // { int kenv(int what, const char *name, \\\n\tSYS_LCHFLAGS                 = 391 // { int lchflags(const char *path, \\\n\tSYS_UUIDGEN                  = 392 // { int uuidgen(struct uuid *store, \\\n\tSYS_SENDFILE                 = 393 // { int sendfile(int fd, int s, off_t offset, \\\n\tSYS_MAC_SYSCALL              = 394 // { int mac_syscall(const char *policy, \\\n\tSYS_GETFSSTAT                = 395 // { int getfsstat(struct statfs *buf, \\\n\tSYS_STATFS                   = 396 // { int statfs(char *path, \\\n\tSYS_FSTATFS                  = 397 // { int fstatfs(int fd, struct statfs *buf); }\n\tSYS_FHSTATFS                 = 398 // { int fhstatfs(const struct fhandle *u_fhp, \\\n\tSYS_KSEM_CLOSE               = 400 // { int ksem_close(semid_t id); }\n\tSYS_KSEM_POST                = 401 // { int ksem_post(semid_t id); }\n\tSYS_KSEM_WAIT                = 402 // { int ksem_wait(semid_t id); }\n\tSYS_KSEM_TRYWAIT             = 403 // { int ksem_trywait(semid_t id); }\n\tSYS_KSEM_INIT                = 404 // { int ksem_init(semid_t *idp, \\\n\tSYS_KSEM_OPEN                = 405 // { int ksem_open(semid_t *idp, \\\n\tSYS_KSEM_UNLINK              = 406 // { int ksem_unlink(const char *name); }\n\tSYS_KSEM_GETVALUE            = 407 // { int ksem_getvalue(semid_t id, int *val); }\n\tSYS_KSEM_DESTROY             = 408 // { int ksem_destroy(semid_t id); }\n\tSYS___MAC_GET_PID            = 409 // { int __mac_get_pid(pid_t pid, \\\n\tSYS___MAC_GET_LINK           = 410 // { int __mac_get_link(const char *path_p, \\\n\tSYS___MAC_SET_LINK           = 411 // { int __mac_set_link(const char *path_p, \\\n\tSYS_EXTATTR_SET_LINK         = 412 // { ssize_t extattr_set_link( \\\n\tSYS_EXTATTR_GET_LINK         = 413 // { ssize_t extattr_get_link( \\\n\tSYS_EXTATTR_DELETE_LINK      = 414 // { int extattr_delete_link( \\\n\tSYS___MAC_EXECVE             = 415 // { int __mac_execve(char *fname, char **argv, \\\n\tSYS_SIGACTION                = 416 // { int sigaction(int sig, \\\n\tSYS_SIGRETURN                = 417 // { int sigreturn( \\\n\tSYS_GETCONTEXT               = 421 // { int getcontext(struct __ucontext *ucp); }\n\tSYS_SETCONTEXT               = 422 // { int setcontext( \\\n\tSYS_SWAPCONTEXT              = 423 // { int swapcontext(struct __ucontext *oucp, \\\n\tSYS_SWAPOFF                  = 424 // { int swapoff(const char *name); }\n\tSYS___ACL_GET_LINK           = 425 // { int __acl_get_link(const char *path, \\\n\tSYS___ACL_SET_LINK           = 426 // { int __acl_set_link(const char *path, \\\n\tSYS___ACL_DELETE_LINK        = 427 // { int __acl_delete_link(const char *path, \\\n\tSYS___ACL_ACLCHECK_LINK      = 428 // { int __acl_aclcheck_link(const char *path, \\\n\tSYS_SIGWAIT                  = 429 // { int sigwait(const sigset_t *set, \\\n\tSYS_THR_CREATE               = 430 // { int thr_create(ucontext_t *ctx, long *id, \\\n\tSYS_THR_EXIT                 = 431 // { void thr_exit(long *state); }\n\tSYS_THR_SELF                 = 432 // { int thr_self(long *id); }\n\tSYS_THR_KILL                 = 433 // { int thr_kill(long id, int sig); }\n\tSYS_JAIL_ATTACH              = 436 // { int jail_attach(int jid); }\n\tSYS_EXTATTR_LIST_FD          = 437 // { ssize_t extattr_list_fd(int fd, \\\n\tSYS_EXTATTR_LIST_FILE        = 438 // { ssize_t extattr_list_file( \\\n\tSYS_EXTATTR_LIST_LINK        = 439 // { ssize_t extattr_list_link( \\\n\tSYS_KSEM_TIMEDWAIT           = 441 // { int ksem_timedwait(semid_t id, \\\n\tSYS_THR_SUSPEND              = 442 // { int thr_suspend( \\\n\tSYS_THR_WAKE                 = 443 // { int thr_wake(long id); }\n\tSYS_KLDUNLOADF               = 444 // { int kldunloadf(int fileid, int flags); }\n\tSYS_AUDIT                    = 445 // { int audit(const void *record, \\\n\tSYS_AUDITON                  = 446 // { int auditon(int cmd, void *data, \\\n\tSYS_GETAUID                  = 447 // { int getauid(uid_t *auid); }\n\tSYS_SETAUID                  = 448 // { int setauid(uid_t *auid); }\n\tSYS_GETAUDIT                 = 449 // { int getaudit(struct auditinfo *auditinfo); }\n\tSYS_SETAUDIT                 = 450 // { int setaudit(struct auditinfo *auditinfo); }\n\tSYS_GETAUDIT_ADDR            = 451 // { int getaudit_addr( \\\n\tSYS_SETAUDIT_ADDR            = 452 // { int setaudit_addr( \\\n\tSYS_AUDITCTL                 = 453 // { int auditctl(char *path); }\n\tSYS__UMTX_OP                 = 454 // { int _umtx_op(void *obj, int op, \\\n\tSYS_THR_NEW                  = 455 // { int thr_new(struct thr_param *param, \\\n\tSYS_SIGQUEUE                 = 456 // { int sigqueue(pid_t pid, int signum, void *value); }\n\tSYS_KMQ_OPEN                 = 457 // { int kmq_open(const char *path, int flags, \\\n\tSYS_KMQ_SETATTR              = 458 // { int kmq_setattr(int mqd,\t\t\\\n\tSYS_KMQ_TIMEDRECEIVE         = 459 // { int kmq_timedreceive(int mqd,\t\\\n\tSYS_KMQ_TIMEDSEND            = 460 // { int kmq_timedsend(int mqd,\t\t\\\n\tSYS_KMQ_NOTIFY               = 461 // { int kmq_notify(int mqd,\t\t\\\n\tSYS_KMQ_UNLINK               = 462 // { int kmq_unlink(const char *path); }\n\tSYS_ABORT2                   = 463 // { int abort2(const char *why, int nargs, void **args); }\n\tSYS_THR_SET_NAME             = 464 // { int thr_set_name(long id, const char *name); }\n\tSYS_AIO_FSYNC                = 465 // { int aio_fsync(int op, struct aiocb *aiocbp); }\n\tSYS_RTPRIO_THREAD            = 466 // { int rtprio_thread(int function, \\\n\tSYS_SCTP_PEELOFF             = 471 // { int sctp_peeloff(int sd, uint32_t name); }\n\tSYS_SCTP_GENERIC_SENDMSG     = 472 // { int sctp_generic_sendmsg(int sd, caddr_t msg, int mlen, \\\n\tSYS_SCTP_GENERIC_SENDMSG_IOV = 473 // { int sctp_generic_sendmsg_iov(int sd, struct iovec *iov, int iovlen, \\\n\tSYS_SCTP_GENERIC_RECVMSG     = 474 // { int sctp_generic_recvmsg(int sd, struct iovec *iov, int iovlen, \\\n\tSYS_PREAD                    = 475 // { ssize_t pread(int fd, void *buf, \\\n\tSYS_PWRITE                   = 476 // { ssize_t pwrite(int fd, const void *buf, \\\n\tSYS_MMAP                     = 477 // { caddr_t mmap(caddr_t addr, size_t len, \\\n\tSYS_LSEEK                    = 478 // { off_t lseek(int fd, off_t offset, \\\n\tSYS_TRUNCATE                 = 479 // { int truncate(char *path, off_t length); }\n\tSYS_FTRUNCATE                = 480 // { int ftruncate(int fd, off_t length); }\n\tSYS_THR_KILL2                = 481 // { int thr_kill2(pid_t pid, long id, int sig); }\n\tSYS_SHM_OPEN                 = 482 // { int shm_open(const char *path, int flags, \\\n\tSYS_SHM_UNLINK               = 483 // { int shm_unlink(const char *path); }\n\tSYS_CPUSET                   = 484 // { int cpuset(cpusetid_t *setid); }\n\tSYS_CPUSET_SETID             = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, \\\n\tSYS_CPUSET_GETID             = 486 // { int cpuset_getid(cpulevel_t level, \\\n\tSYS_CPUSET_GETAFFINITY       = 487 // { int cpuset_getaffinity(cpulevel_t level, \\\n\tSYS_CPUSET_SETAFFINITY       = 488 // { int cpuset_setaffinity(cpulevel_t level, \\\n\tSYS_FACCESSAT                = 489 // { int faccessat(int fd, char *path, int amode, \\\n\tSYS_FCHMODAT                 = 490 // { int fchmodat(int fd, char *path, mode_t mode, \\\n\tSYS_FCHOWNAT                 = 491 // { int fchownat(int fd, char *path, uid_t uid, \\\n\tSYS_FEXECVE                  = 492 // { int fexecve(int fd, char **argv, \\\n\tSYS_FSTATAT                  = 493 // { int fstatat(int fd, char *path, \\\n\tSYS_FUTIMESAT                = 494 // { int futimesat(int fd, char *path, \\\n\tSYS_LINKAT                   = 495 // { int linkat(int fd1, char *path1, int fd2, \\\n\tSYS_MKDIRAT                  = 496 // { int mkdirat(int fd, char *path, mode_t mode); }\n\tSYS_MKFIFOAT                 = 497 // { int mkfifoat(int fd, char *path, mode_t mode); }\n\tSYS_MKNODAT                  = 498 // { int mknodat(int fd, char *path, mode_t mode, \\\n\tSYS_OPENAT                   = 499 // { int openat(int fd, char *path, int flag, \\\n\tSYS_READLINKAT               = 500 // { int readlinkat(int fd, char *path, char *buf, \\\n\tSYS_RENAMEAT                 = 501 // { int renameat(int oldfd, char *old, int newfd, \\\n\tSYS_SYMLINKAT                = 502 // { int symlinkat(char *path1, int fd, \\\n\tSYS_UNLINKAT                 = 503 // { int unlinkat(int fd, char *path, int flag); }\n\tSYS_POSIX_OPENPT             = 504 // { int posix_openpt(int flags); }\n\tSYS_GSSD_SYSCALL             = 505 // { int gssd_syscall(char *path); }\n\tSYS_JAIL_GET                 = 506 // { int jail_get(struct iovec *iovp, \\\n\tSYS_JAIL_SET                 = 507 // { int jail_set(struct iovec *iovp, \\\n\tSYS_JAIL_REMOVE              = 508 // { int jail_remove(int jid); }\n\tSYS_CLOSEFROM                = 509 // { int closefrom(int lowfd); }\n\tSYS___SEMCTL                 = 510 // { int __semctl(int semid, int semnum, \\\n\tSYS_MSGCTL                   = 511 // { int msgctl(int msqid, int cmd, \\\n\tSYS_SHMCTL                   = 512 // { int shmctl(int shmid, int cmd, \\\n\tSYS_LPATHCONF                = 513 // { int lpathconf(char *path, int name); }\n\tSYS___CAP_RIGHTS_GET         = 515 // { int __cap_rights_get(int version, \\\n\tSYS_CAP_ENTER                = 516 // { int cap_enter(void); }\n\tSYS_CAP_GETMODE              = 517 // { int cap_getmode(u_int *modep); }\n\tSYS_PDFORK                   = 518 // { int pdfork(int *fdp, int flags); }\n\tSYS_PDKILL                   = 519 // { int pdkill(int fd, int signum); }\n\tSYS_PDGETPID                 = 520 // { int pdgetpid(int fd, pid_t *pidp); }\n\tSYS_PSELECT                  = 522 // { int pselect(int nd, fd_set *in, \\\n\tSYS_GETLOGINCLASS            = 523 // { int getloginclass(char *namebuf, \\\n\tSYS_SETLOGINCLASS            = 524 // { int setloginclass(const char *namebuf); }\n\tSYS_RCTL_GET_RACCT           = 525 // { int rctl_get_racct(const void *inbufp, \\\n\tSYS_RCTL_GET_RULES           = 526 // { int rctl_get_rules(const void *inbufp, \\\n\tSYS_RCTL_GET_LIMITS          = 527 // { int rctl_get_limits(const void *inbufp, \\\n\tSYS_RCTL_ADD_RULE            = 528 // { int rctl_add_rule(const void *inbufp, \\\n\tSYS_RCTL_REMOVE_RULE         = 529 // { int rctl_remove_rule(const void *inbufp, \\\n\tSYS_POSIX_FALLOCATE          = 530 // { int posix_fallocate(int fd, \\\n\tSYS_POSIX_FADVISE            = 531 // { int posix_fadvise(int fd, off_t offset, \\\n\tSYS_WAIT6                    = 532 // { int wait6(idtype_t idtype, id_t id, \\\n\tSYS_CAP_RIGHTS_LIMIT         = 533 // { int cap_rights_limit(int fd, \\\n\tSYS_CAP_IOCTLS_LIMIT         = 534 // { int cap_ioctls_limit(int fd, \\\n\tSYS_CAP_IOCTLS_GET           = 535 // { ssize_t cap_ioctls_get(int fd, \\\n\tSYS_CAP_FCNTLS_LIMIT         = 536 // { int cap_fcntls_limit(int fd, \\\n\tSYS_CAP_FCNTLS_GET           = 537 // { int cap_fcntls_get(int fd, \\\n\tSYS_BINDAT                   = 538 // { int bindat(int fd, int s, caddr_t name, \\\n\tSYS_CONNECTAT                = 539 // { int connectat(int fd, int s, caddr_t name, \\\n\tSYS_CHFLAGSAT                = 540 // { int chflagsat(int fd, const char *path, \\\n\tSYS_ACCEPT4                  = 541 // { int accept4(int s, \\\n\tSYS_PIPE2                    = 542 // { int pipe2(int *fildes, int flags); }\n\tSYS_AIO_MLOCK                = 543 // { int aio_mlock(struct aiocb *aiocbp); }\n\tSYS_PROCCTL                  = 544 // { int procctl(idtype_t idtype, id_t id, \\\n\tSYS_PPOLL                    = 545 // { int ppoll(struct pollfd *fds, u_int nfds, \\\n\tSYS_FUTIMENS                 = 546 // { int futimens(int fd, \\\n\tSYS_UTIMENSAT                = 547 // { int utimensat(int fd, \\\n\tSYS_NUMA_GETAFFINITY         = 548 // { int numa_getaffinity(cpuwhich_t which, \\\n\tSYS_NUMA_SETAFFINITY         = 549 // { int numa_setaffinity(cpuwhich_t which, \\\n\tSYS_FDATASYNC                = 550 // { int fdatasync(int fd); }\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_linux_386.go",
    "content": "// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include -m32 /tmp/include/asm/unistd.h\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build 386,linux\n\npackage unix\n\nconst (\n\tSYS_RESTART_SYSCALL              = 0\n\tSYS_EXIT                         = 1\n\tSYS_FORK                         = 2\n\tSYS_READ                         = 3\n\tSYS_WRITE                        = 4\n\tSYS_OPEN                         = 5\n\tSYS_CLOSE                        = 6\n\tSYS_WAITPID                      = 7\n\tSYS_CREAT                        = 8\n\tSYS_LINK                         = 9\n\tSYS_UNLINK                       = 10\n\tSYS_EXECVE                       = 11\n\tSYS_CHDIR                        = 12\n\tSYS_TIME                         = 13\n\tSYS_MKNOD                        = 14\n\tSYS_CHMOD                        = 15\n\tSYS_LCHOWN                       = 16\n\tSYS_BREAK                        = 17\n\tSYS_OLDSTAT                      = 18\n\tSYS_LSEEK                        = 19\n\tSYS_GETPID                       = 20\n\tSYS_MOUNT                        = 21\n\tSYS_UMOUNT                       = 22\n\tSYS_SETUID                       = 23\n\tSYS_GETUID                       = 24\n\tSYS_STIME                        = 25\n\tSYS_PTRACE                       = 26\n\tSYS_ALARM                        = 27\n\tSYS_OLDFSTAT                     = 28\n\tSYS_PAUSE                        = 29\n\tSYS_UTIME                        = 30\n\tSYS_STTY                         = 31\n\tSYS_GTTY                         = 32\n\tSYS_ACCESS                       = 33\n\tSYS_NICE                         = 34\n\tSYS_FTIME                        = 35\n\tSYS_SYNC                         = 36\n\tSYS_KILL                         = 37\n\tSYS_RENAME                       = 38\n\tSYS_MKDIR                        = 39\n\tSYS_RMDIR                        = 40\n\tSYS_DUP                          = 41\n\tSYS_PIPE                         = 42\n\tSYS_TIMES                        = 43\n\tSYS_PROF                         = 44\n\tSYS_BRK                          = 45\n\tSYS_SETGID                       = 46\n\tSYS_GETGID                       = 47\n\tSYS_SIGNAL                       = 48\n\tSYS_GETEUID                      = 49\n\tSYS_GETEGID                      = 50\n\tSYS_ACCT                         = 51\n\tSYS_UMOUNT2                      = 52\n\tSYS_LOCK                         = 53\n\tSYS_IOCTL                        = 54\n\tSYS_FCNTL                        = 55\n\tSYS_MPX                          = 56\n\tSYS_SETPGID                      = 57\n\tSYS_ULIMIT                       = 58\n\tSYS_OLDOLDUNAME                  = 59\n\tSYS_UMASK                        = 60\n\tSYS_CHROOT                       = 61\n\tSYS_USTAT                        = 62\n\tSYS_DUP2                         = 63\n\tSYS_GETPPID                      = 64\n\tSYS_GETPGRP                      = 65\n\tSYS_SETSID                       = 66\n\tSYS_SIGACTION                    = 67\n\tSYS_SGETMASK                     = 68\n\tSYS_SSETMASK                     = 69\n\tSYS_SETREUID                     = 70\n\tSYS_SETREGID                     = 71\n\tSYS_SIGSUSPEND                   = 72\n\tSYS_SIGPENDING                   = 73\n\tSYS_SETHOSTNAME                  = 74\n\tSYS_SETRLIMIT                    = 75\n\tSYS_GETRLIMIT                    = 76\n\tSYS_GETRUSAGE                    = 77\n\tSYS_GETTIMEOFDAY                 = 78\n\tSYS_SETTIMEOFDAY                 = 79\n\tSYS_GETGROUPS                    = 80\n\tSYS_SETGROUPS                    = 81\n\tSYS_SELECT                       = 82\n\tSYS_SYMLINK                      = 83\n\tSYS_OLDLSTAT                     = 84\n\tSYS_READLINK                     = 85\n\tSYS_USELIB                       = 86\n\tSYS_SWAPON                       = 87\n\tSYS_REBOOT                       = 88\n\tSYS_READDIR                      = 89\n\tSYS_MMAP                         = 90\n\tSYS_MUNMAP                       = 91\n\tSYS_TRUNCATE                     = 92\n\tSYS_FTRUNCATE                    = 93\n\tSYS_FCHMOD                       = 94\n\tSYS_FCHOWN                       = 95\n\tSYS_GETPRIORITY                  = 96\n\tSYS_SETPRIORITY                  = 97\n\tSYS_PROFIL                       = 98\n\tSYS_STATFS                       = 99\n\tSYS_FSTATFS                      = 100\n\tSYS_IOPERM                       = 101\n\tSYS_SOCKETCALL                   = 102\n\tSYS_SYSLOG                       = 103\n\tSYS_SETITIMER                    = 104\n\tSYS_GETITIMER                    = 105\n\tSYS_STAT                         = 106\n\tSYS_LSTAT                        = 107\n\tSYS_FSTAT                        = 108\n\tSYS_OLDUNAME                     = 109\n\tSYS_IOPL                         = 110\n\tSYS_VHANGUP                      = 111\n\tSYS_IDLE                         = 112\n\tSYS_VM86OLD                      = 113\n\tSYS_WAIT4                        = 114\n\tSYS_SWAPOFF                      = 115\n\tSYS_SYSINFO                      = 116\n\tSYS_IPC                          = 117\n\tSYS_FSYNC                        = 118\n\tSYS_SIGRETURN                    = 119\n\tSYS_CLONE                        = 120\n\tSYS_SETDOMAINNAME                = 121\n\tSYS_UNAME                        = 122\n\tSYS_MODIFY_LDT                   = 123\n\tSYS_ADJTIMEX                     = 124\n\tSYS_MPROTECT                     = 125\n\tSYS_SIGPROCMASK                  = 126\n\tSYS_CREATE_MODULE                = 127\n\tSYS_INIT_MODULE                  = 128\n\tSYS_DELETE_MODULE                = 129\n\tSYS_GET_KERNEL_SYMS              = 130\n\tSYS_QUOTACTL                     = 131\n\tSYS_GETPGID                      = 132\n\tSYS_FCHDIR                       = 133\n\tSYS_BDFLUSH                      = 134\n\tSYS_SYSFS                        = 135\n\tSYS_PERSONALITY                  = 136\n\tSYS_AFS_SYSCALL                  = 137\n\tSYS_SETFSUID                     = 138\n\tSYS_SETFSGID                     = 139\n\tSYS__LLSEEK                      = 140\n\tSYS_GETDENTS                     = 141\n\tSYS__NEWSELECT                   = 142\n\tSYS_FLOCK                        = 143\n\tSYS_MSYNC                        = 144\n\tSYS_READV                        = 145\n\tSYS_WRITEV                       = 146\n\tSYS_GETSID                       = 147\n\tSYS_FDATASYNC                    = 148\n\tSYS__SYSCTL                      = 149\n\tSYS_MLOCK                        = 150\n\tSYS_MUNLOCK                      = 151\n\tSYS_MLOCKALL                     = 152\n\tSYS_MUNLOCKALL                   = 153\n\tSYS_SCHED_SETPARAM               = 154\n\tSYS_SCHED_GETPARAM               = 155\n\tSYS_SCHED_SETSCHEDULER           = 156\n\tSYS_SCHED_GETSCHEDULER           = 157\n\tSYS_SCHED_YIELD                  = 158\n\tSYS_SCHED_GET_PRIORITY_MAX       = 159\n\tSYS_SCHED_GET_PRIORITY_MIN       = 160\n\tSYS_SCHED_RR_GET_INTERVAL        = 161\n\tSYS_NANOSLEEP                    = 162\n\tSYS_MREMAP                       = 163\n\tSYS_SETRESUID                    = 164\n\tSYS_GETRESUID                    = 165\n\tSYS_VM86                         = 166\n\tSYS_QUERY_MODULE                 = 167\n\tSYS_POLL                         = 168\n\tSYS_NFSSERVCTL                   = 169\n\tSYS_SETRESGID                    = 170\n\tSYS_GETRESGID                    = 171\n\tSYS_PRCTL                        = 172\n\tSYS_RT_SIGRETURN                 = 173\n\tSYS_RT_SIGACTION                 = 174\n\tSYS_RT_SIGPROCMASK               = 175\n\tSYS_RT_SIGPENDING                = 176\n\tSYS_RT_SIGTIMEDWAIT              = 177\n\tSYS_RT_SIGQUEUEINFO              = 178\n\tSYS_RT_SIGSUSPEND                = 179\n\tSYS_PREAD64                      = 180\n\tSYS_PWRITE64                     = 181\n\tSYS_CHOWN                        = 182\n\tSYS_GETCWD                       = 183\n\tSYS_CAPGET                       = 184\n\tSYS_CAPSET                       = 185\n\tSYS_SIGALTSTACK                  = 186\n\tSYS_SENDFILE                     = 187\n\tSYS_GETPMSG                      = 188\n\tSYS_PUTPMSG                      = 189\n\tSYS_VFORK                        = 190\n\tSYS_UGETRLIMIT                   = 191\n\tSYS_MMAP2                        = 192\n\tSYS_TRUNCATE64                   = 193\n\tSYS_FTRUNCATE64                  = 194\n\tSYS_STAT64                       = 195\n\tSYS_LSTAT64                      = 196\n\tSYS_FSTAT64                      = 197\n\tSYS_LCHOWN32                     = 198\n\tSYS_GETUID32                     = 199\n\tSYS_GETGID32                     = 200\n\tSYS_GETEUID32                    = 201\n\tSYS_GETEGID32                    = 202\n\tSYS_SETREUID32                   = 203\n\tSYS_SETREGID32                   = 204\n\tSYS_GETGROUPS32                  = 205\n\tSYS_SETGROUPS32                  = 206\n\tSYS_FCHOWN32                     = 207\n\tSYS_SETRESUID32                  = 208\n\tSYS_GETRESUID32                  = 209\n\tSYS_SETRESGID32                  = 210\n\tSYS_GETRESGID32                  = 211\n\tSYS_CHOWN32                      = 212\n\tSYS_SETUID32                     = 213\n\tSYS_SETGID32                     = 214\n\tSYS_SETFSUID32                   = 215\n\tSYS_SETFSGID32                   = 216\n\tSYS_PIVOT_ROOT                   = 217\n\tSYS_MINCORE                      = 218\n\tSYS_MADVISE                      = 219\n\tSYS_GETDENTS64                   = 220\n\tSYS_FCNTL64                      = 221\n\tSYS_GETTID                       = 224\n\tSYS_READAHEAD                    = 225\n\tSYS_SETXATTR                     = 226\n\tSYS_LSETXATTR                    = 227\n\tSYS_FSETXATTR                    = 228\n\tSYS_GETXATTR                     = 229\n\tSYS_LGETXATTR                    = 230\n\tSYS_FGETXATTR                    = 231\n\tSYS_LISTXATTR                    = 232\n\tSYS_LLISTXATTR                   = 233\n\tSYS_FLISTXATTR                   = 234\n\tSYS_REMOVEXATTR                  = 235\n\tSYS_LREMOVEXATTR                 = 236\n\tSYS_FREMOVEXATTR                 = 237\n\tSYS_TKILL                        = 238\n\tSYS_SENDFILE64                   = 239\n\tSYS_FUTEX                        = 240\n\tSYS_SCHED_SETAFFINITY            = 241\n\tSYS_SCHED_GETAFFINITY            = 242\n\tSYS_SET_THREAD_AREA              = 243\n\tSYS_GET_THREAD_AREA              = 244\n\tSYS_IO_SETUP                     = 245\n\tSYS_IO_DESTROY                   = 246\n\tSYS_IO_GETEVENTS                 = 247\n\tSYS_IO_SUBMIT                    = 248\n\tSYS_IO_CANCEL                    = 249\n\tSYS_FADVISE64                    = 250\n\tSYS_EXIT_GROUP                   = 252\n\tSYS_LOOKUP_DCOOKIE               = 253\n\tSYS_EPOLL_CREATE                 = 254\n\tSYS_EPOLL_CTL                    = 255\n\tSYS_EPOLL_WAIT                   = 256\n\tSYS_REMAP_FILE_PAGES             = 257\n\tSYS_SET_TID_ADDRESS              = 258\n\tSYS_TIMER_CREATE                 = 259\n\tSYS_TIMER_SETTIME                = 260\n\tSYS_TIMER_GETTIME                = 261\n\tSYS_TIMER_GETOVERRUN             = 262\n\tSYS_TIMER_DELETE                 = 263\n\tSYS_CLOCK_SETTIME                = 264\n\tSYS_CLOCK_GETTIME                = 265\n\tSYS_CLOCK_GETRES                 = 266\n\tSYS_CLOCK_NANOSLEEP              = 267\n\tSYS_STATFS64                     = 268\n\tSYS_FSTATFS64                    = 269\n\tSYS_TGKILL                       = 270\n\tSYS_UTIMES                       = 271\n\tSYS_FADVISE64_64                 = 272\n\tSYS_VSERVER                      = 273\n\tSYS_MBIND                        = 274\n\tSYS_GET_MEMPOLICY                = 275\n\tSYS_SET_MEMPOLICY                = 276\n\tSYS_MQ_OPEN                      = 277\n\tSYS_MQ_UNLINK                    = 278\n\tSYS_MQ_TIMEDSEND                 = 279\n\tSYS_MQ_TIMEDRECEIVE              = 280\n\tSYS_MQ_NOTIFY                    = 281\n\tSYS_MQ_GETSETATTR                = 282\n\tSYS_KEXEC_LOAD                   = 283\n\tSYS_WAITID                       = 284\n\tSYS_ADD_KEY                      = 286\n\tSYS_REQUEST_KEY                  = 287\n\tSYS_KEYCTL                       = 288\n\tSYS_IOPRIO_SET                   = 289\n\tSYS_IOPRIO_GET                   = 290\n\tSYS_INOTIFY_INIT                 = 291\n\tSYS_INOTIFY_ADD_WATCH            = 292\n\tSYS_INOTIFY_RM_WATCH             = 293\n\tSYS_MIGRATE_PAGES                = 294\n\tSYS_OPENAT                       = 295\n\tSYS_MKDIRAT                      = 296\n\tSYS_MKNODAT                      = 297\n\tSYS_FCHOWNAT                     = 298\n\tSYS_FUTIMESAT                    = 299\n\tSYS_FSTATAT64                    = 300\n\tSYS_UNLINKAT                     = 301\n\tSYS_RENAMEAT                     = 302\n\tSYS_LINKAT                       = 303\n\tSYS_SYMLINKAT                    = 304\n\tSYS_READLINKAT                   = 305\n\tSYS_FCHMODAT                     = 306\n\tSYS_FACCESSAT                    = 307\n\tSYS_PSELECT6                     = 308\n\tSYS_PPOLL                        = 309\n\tSYS_UNSHARE                      = 310\n\tSYS_SET_ROBUST_LIST              = 311\n\tSYS_GET_ROBUST_LIST              = 312\n\tSYS_SPLICE                       = 313\n\tSYS_SYNC_FILE_RANGE              = 314\n\tSYS_TEE                          = 315\n\tSYS_VMSPLICE                     = 316\n\tSYS_MOVE_PAGES                   = 317\n\tSYS_GETCPU                       = 318\n\tSYS_EPOLL_PWAIT                  = 319\n\tSYS_UTIMENSAT                    = 320\n\tSYS_SIGNALFD                     = 321\n\tSYS_TIMERFD_CREATE               = 322\n\tSYS_EVENTFD                      = 323\n\tSYS_FALLOCATE                    = 324\n\tSYS_TIMERFD_SETTIME              = 325\n\tSYS_TIMERFD_GETTIME              = 326\n\tSYS_SIGNALFD4                    = 327\n\tSYS_EVENTFD2                     = 328\n\tSYS_EPOLL_CREATE1                = 329\n\tSYS_DUP3                         = 330\n\tSYS_PIPE2                        = 331\n\tSYS_INOTIFY_INIT1                = 332\n\tSYS_PREADV                       = 333\n\tSYS_PWRITEV                      = 334\n\tSYS_RT_TGSIGQUEUEINFO            = 335\n\tSYS_PERF_EVENT_OPEN              = 336\n\tSYS_RECVMMSG                     = 337\n\tSYS_FANOTIFY_INIT                = 338\n\tSYS_FANOTIFY_MARK                = 339\n\tSYS_PRLIMIT64                    = 340\n\tSYS_NAME_TO_HANDLE_AT            = 341\n\tSYS_OPEN_BY_HANDLE_AT            = 342\n\tSYS_CLOCK_ADJTIME                = 343\n\tSYS_SYNCFS                       = 344\n\tSYS_SENDMMSG                     = 345\n\tSYS_SETNS                        = 346\n\tSYS_PROCESS_VM_READV             = 347\n\tSYS_PROCESS_VM_WRITEV            = 348\n\tSYS_KCMP                         = 349\n\tSYS_FINIT_MODULE                 = 350\n\tSYS_SCHED_SETATTR                = 351\n\tSYS_SCHED_GETATTR                = 352\n\tSYS_RENAMEAT2                    = 353\n\tSYS_SECCOMP                      = 354\n\tSYS_GETRANDOM                    = 355\n\tSYS_MEMFD_CREATE                 = 356\n\tSYS_BPF                          = 357\n\tSYS_EXECVEAT                     = 358\n\tSYS_SOCKET                       = 359\n\tSYS_SOCKETPAIR                   = 360\n\tSYS_BIND                         = 361\n\tSYS_CONNECT                      = 362\n\tSYS_LISTEN                       = 363\n\tSYS_ACCEPT4                      = 364\n\tSYS_GETSOCKOPT                   = 365\n\tSYS_SETSOCKOPT                   = 366\n\tSYS_GETSOCKNAME                  = 367\n\tSYS_GETPEERNAME                  = 368\n\tSYS_SENDTO                       = 369\n\tSYS_SENDMSG                      = 370\n\tSYS_RECVFROM                     = 371\n\tSYS_RECVMSG                      = 372\n\tSYS_SHUTDOWN                     = 373\n\tSYS_USERFAULTFD                  = 374\n\tSYS_MEMBARRIER                   = 375\n\tSYS_MLOCK2                       = 376\n\tSYS_COPY_FILE_RANGE              = 377\n\tSYS_PREADV2                      = 378\n\tSYS_PWRITEV2                     = 379\n\tSYS_PKEY_MPROTECT                = 380\n\tSYS_PKEY_ALLOC                   = 381\n\tSYS_PKEY_FREE                    = 382\n\tSYS_STATX                        = 383\n\tSYS_ARCH_PRCTL                   = 384\n\tSYS_IO_PGETEVENTS                = 385\n\tSYS_RSEQ                         = 386\n\tSYS_SEMGET                       = 393\n\tSYS_SEMCTL                       = 394\n\tSYS_SHMGET                       = 395\n\tSYS_SHMCTL                       = 396\n\tSYS_SHMAT                        = 397\n\tSYS_SHMDT                        = 398\n\tSYS_MSGGET                       = 399\n\tSYS_MSGSND                       = 400\n\tSYS_MSGRCV                       = 401\n\tSYS_MSGCTL                       = 402\n\tSYS_CLOCK_GETTIME64              = 403\n\tSYS_CLOCK_SETTIME64              = 404\n\tSYS_CLOCK_ADJTIME64              = 405\n\tSYS_CLOCK_GETRES_TIME64          = 406\n\tSYS_CLOCK_NANOSLEEP_TIME64       = 407\n\tSYS_TIMER_GETTIME64              = 408\n\tSYS_TIMER_SETTIME64              = 409\n\tSYS_TIMERFD_GETTIME64            = 410\n\tSYS_TIMERFD_SETTIME64            = 411\n\tSYS_UTIMENSAT_TIME64             = 412\n\tSYS_PSELECT6_TIME64              = 413\n\tSYS_PPOLL_TIME64                 = 414\n\tSYS_IO_PGETEVENTS_TIME64         = 416\n\tSYS_RECVMMSG_TIME64              = 417\n\tSYS_MQ_TIMEDSEND_TIME64          = 418\n\tSYS_MQ_TIMEDRECEIVE_TIME64       = 419\n\tSYS_SEMTIMEDOP_TIME64            = 420\n\tSYS_RT_SIGTIMEDWAIT_TIME64       = 421\n\tSYS_FUTEX_TIME64                 = 422\n\tSYS_SCHED_RR_GET_INTERVAL_TIME64 = 423\n\tSYS_PIDFD_SEND_SIGNAL            = 424\n\tSYS_IO_URING_SETUP               = 425\n\tSYS_IO_URING_ENTER               = 426\n\tSYS_IO_URING_REGISTER            = 427\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go",
    "content": "// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include -m64 /tmp/include/asm/unistd.h\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build amd64,linux\n\npackage unix\n\nconst (\n\tSYS_READ                   = 0\n\tSYS_WRITE                  = 1\n\tSYS_OPEN                   = 2\n\tSYS_CLOSE                  = 3\n\tSYS_STAT                   = 4\n\tSYS_FSTAT                  = 5\n\tSYS_LSTAT                  = 6\n\tSYS_POLL                   = 7\n\tSYS_LSEEK                  = 8\n\tSYS_MMAP                   = 9\n\tSYS_MPROTECT               = 10\n\tSYS_MUNMAP                 = 11\n\tSYS_BRK                    = 12\n\tSYS_RT_SIGACTION           = 13\n\tSYS_RT_SIGPROCMASK         = 14\n\tSYS_RT_SIGRETURN           = 15\n\tSYS_IOCTL                  = 16\n\tSYS_PREAD64                = 17\n\tSYS_PWRITE64               = 18\n\tSYS_READV                  = 19\n\tSYS_WRITEV                 = 20\n\tSYS_ACCESS                 = 21\n\tSYS_PIPE                   = 22\n\tSYS_SELECT                 = 23\n\tSYS_SCHED_YIELD            = 24\n\tSYS_MREMAP                 = 25\n\tSYS_MSYNC                  = 26\n\tSYS_MINCORE                = 27\n\tSYS_MADVISE                = 28\n\tSYS_SHMGET                 = 29\n\tSYS_SHMAT                  = 30\n\tSYS_SHMCTL                 = 31\n\tSYS_DUP                    = 32\n\tSYS_DUP2                   = 33\n\tSYS_PAUSE                  = 34\n\tSYS_NANOSLEEP              = 35\n\tSYS_GETITIMER              = 36\n\tSYS_ALARM                  = 37\n\tSYS_SETITIMER              = 38\n\tSYS_GETPID                 = 39\n\tSYS_SENDFILE               = 40\n\tSYS_SOCKET                 = 41\n\tSYS_CONNECT                = 42\n\tSYS_ACCEPT                 = 43\n\tSYS_SENDTO                 = 44\n\tSYS_RECVFROM               = 45\n\tSYS_SENDMSG                = 46\n\tSYS_RECVMSG                = 47\n\tSYS_SHUTDOWN               = 48\n\tSYS_BIND                   = 49\n\tSYS_LISTEN                 = 50\n\tSYS_GETSOCKNAME            = 51\n\tSYS_GETPEERNAME            = 52\n\tSYS_SOCKETPAIR             = 53\n\tSYS_SETSOCKOPT             = 54\n\tSYS_GETSOCKOPT             = 55\n\tSYS_CLONE                  = 56\n\tSYS_FORK                   = 57\n\tSYS_VFORK                  = 58\n\tSYS_EXECVE                 = 59\n\tSYS_EXIT                   = 60\n\tSYS_WAIT4                  = 61\n\tSYS_KILL                   = 62\n\tSYS_UNAME                  = 63\n\tSYS_SEMGET                 = 64\n\tSYS_SEMOP                  = 65\n\tSYS_SEMCTL                 = 66\n\tSYS_SHMDT                  = 67\n\tSYS_MSGGET                 = 68\n\tSYS_MSGSND                 = 69\n\tSYS_MSGRCV                 = 70\n\tSYS_MSGCTL                 = 71\n\tSYS_FCNTL                  = 72\n\tSYS_FLOCK                  = 73\n\tSYS_FSYNC                  = 74\n\tSYS_FDATASYNC              = 75\n\tSYS_TRUNCATE               = 76\n\tSYS_FTRUNCATE              = 77\n\tSYS_GETDENTS               = 78\n\tSYS_GETCWD                 = 79\n\tSYS_CHDIR                  = 80\n\tSYS_FCHDIR                 = 81\n\tSYS_RENAME                 = 82\n\tSYS_MKDIR                  = 83\n\tSYS_RMDIR                  = 84\n\tSYS_CREAT                  = 85\n\tSYS_LINK                   = 86\n\tSYS_UNLINK                 = 87\n\tSYS_SYMLINK                = 88\n\tSYS_READLINK               = 89\n\tSYS_CHMOD                  = 90\n\tSYS_FCHMOD                 = 91\n\tSYS_CHOWN                  = 92\n\tSYS_FCHOWN                 = 93\n\tSYS_LCHOWN                 = 94\n\tSYS_UMASK                  = 95\n\tSYS_GETTIMEOFDAY           = 96\n\tSYS_GETRLIMIT              = 97\n\tSYS_GETRUSAGE              = 98\n\tSYS_SYSINFO                = 99\n\tSYS_TIMES                  = 100\n\tSYS_PTRACE                 = 101\n\tSYS_GETUID                 = 102\n\tSYS_SYSLOG                 = 103\n\tSYS_GETGID                 = 104\n\tSYS_SETUID                 = 105\n\tSYS_SETGID                 = 106\n\tSYS_GETEUID                = 107\n\tSYS_GETEGID                = 108\n\tSYS_SETPGID                = 109\n\tSYS_GETPPID                = 110\n\tSYS_GETPGRP                = 111\n\tSYS_SETSID                 = 112\n\tSYS_SETREUID               = 113\n\tSYS_SETREGID               = 114\n\tSYS_GETGROUPS              = 115\n\tSYS_SETGROUPS              = 116\n\tSYS_SETRESUID              = 117\n\tSYS_GETRESUID              = 118\n\tSYS_SETRESGID              = 119\n\tSYS_GETRESGID              = 120\n\tSYS_GETPGID                = 121\n\tSYS_SETFSUID               = 122\n\tSYS_SETFSGID               = 123\n\tSYS_GETSID                 = 124\n\tSYS_CAPGET                 = 125\n\tSYS_CAPSET                 = 126\n\tSYS_RT_SIGPENDING          = 127\n\tSYS_RT_SIGTIMEDWAIT        = 128\n\tSYS_RT_SIGQUEUEINFO        = 129\n\tSYS_RT_SIGSUSPEND          = 130\n\tSYS_SIGALTSTACK            = 131\n\tSYS_UTIME                  = 132\n\tSYS_MKNOD                  = 133\n\tSYS_USELIB                 = 134\n\tSYS_PERSONALITY            = 135\n\tSYS_USTAT                  = 136\n\tSYS_STATFS                 = 137\n\tSYS_FSTATFS                = 138\n\tSYS_SYSFS                  = 139\n\tSYS_GETPRIORITY            = 140\n\tSYS_SETPRIORITY            = 141\n\tSYS_SCHED_SETPARAM         = 142\n\tSYS_SCHED_GETPARAM         = 143\n\tSYS_SCHED_SETSCHEDULER     = 144\n\tSYS_SCHED_GETSCHEDULER     = 145\n\tSYS_SCHED_GET_PRIORITY_MAX = 146\n\tSYS_SCHED_GET_PRIORITY_MIN = 147\n\tSYS_SCHED_RR_GET_INTERVAL  = 148\n\tSYS_MLOCK                  = 149\n\tSYS_MUNLOCK                = 150\n\tSYS_MLOCKALL               = 151\n\tSYS_MUNLOCKALL             = 152\n\tSYS_VHANGUP                = 153\n\tSYS_MODIFY_LDT             = 154\n\tSYS_PIVOT_ROOT             = 155\n\tSYS__SYSCTL                = 156\n\tSYS_PRCTL                  = 157\n\tSYS_ARCH_PRCTL             = 158\n\tSYS_ADJTIMEX               = 159\n\tSYS_SETRLIMIT              = 160\n\tSYS_CHROOT                 = 161\n\tSYS_SYNC                   = 162\n\tSYS_ACCT                   = 163\n\tSYS_SETTIMEOFDAY           = 164\n\tSYS_MOUNT                  = 165\n\tSYS_UMOUNT2                = 166\n\tSYS_SWAPON                 = 167\n\tSYS_SWAPOFF                = 168\n\tSYS_REBOOT                 = 169\n\tSYS_SETHOSTNAME            = 170\n\tSYS_SETDOMAINNAME          = 171\n\tSYS_IOPL                   = 172\n\tSYS_IOPERM                 = 173\n\tSYS_CREATE_MODULE          = 174\n\tSYS_INIT_MODULE            = 175\n\tSYS_DELETE_MODULE          = 176\n\tSYS_GET_KERNEL_SYMS        = 177\n\tSYS_QUERY_MODULE           = 178\n\tSYS_QUOTACTL               = 179\n\tSYS_NFSSERVCTL             = 180\n\tSYS_GETPMSG                = 181\n\tSYS_PUTPMSG                = 182\n\tSYS_AFS_SYSCALL            = 183\n\tSYS_TUXCALL                = 184\n\tSYS_SECURITY               = 185\n\tSYS_GETTID                 = 186\n\tSYS_READAHEAD              = 187\n\tSYS_SETXATTR               = 188\n\tSYS_LSETXATTR              = 189\n\tSYS_FSETXATTR              = 190\n\tSYS_GETXATTR               = 191\n\tSYS_LGETXATTR              = 192\n\tSYS_FGETXATTR              = 193\n\tSYS_LISTXATTR              = 194\n\tSYS_LLISTXATTR             = 195\n\tSYS_FLISTXATTR             = 196\n\tSYS_REMOVEXATTR            = 197\n\tSYS_LREMOVEXATTR           = 198\n\tSYS_FREMOVEXATTR           = 199\n\tSYS_TKILL                  = 200\n\tSYS_TIME                   = 201\n\tSYS_FUTEX                  = 202\n\tSYS_SCHED_SETAFFINITY      = 203\n\tSYS_SCHED_GETAFFINITY      = 204\n\tSYS_SET_THREAD_AREA        = 205\n\tSYS_IO_SETUP               = 206\n\tSYS_IO_DESTROY             = 207\n\tSYS_IO_GETEVENTS           = 208\n\tSYS_IO_SUBMIT              = 209\n\tSYS_IO_CANCEL              = 210\n\tSYS_GET_THREAD_AREA        = 211\n\tSYS_LOOKUP_DCOOKIE         = 212\n\tSYS_EPOLL_CREATE           = 213\n\tSYS_EPOLL_CTL_OLD          = 214\n\tSYS_EPOLL_WAIT_OLD         = 215\n\tSYS_REMAP_FILE_PAGES       = 216\n\tSYS_GETDENTS64             = 217\n\tSYS_SET_TID_ADDRESS        = 218\n\tSYS_RESTART_SYSCALL        = 219\n\tSYS_SEMTIMEDOP             = 220\n\tSYS_FADVISE64              = 221\n\tSYS_TIMER_CREATE           = 222\n\tSYS_TIMER_SETTIME          = 223\n\tSYS_TIMER_GETTIME          = 224\n\tSYS_TIMER_GETOVERRUN       = 225\n\tSYS_TIMER_DELETE           = 226\n\tSYS_CLOCK_SETTIME          = 227\n\tSYS_CLOCK_GETTIME          = 228\n\tSYS_CLOCK_GETRES           = 229\n\tSYS_CLOCK_NANOSLEEP        = 230\n\tSYS_EXIT_GROUP             = 231\n\tSYS_EPOLL_WAIT             = 232\n\tSYS_EPOLL_CTL              = 233\n\tSYS_TGKILL                 = 234\n\tSYS_UTIMES                 = 235\n\tSYS_VSERVER                = 236\n\tSYS_MBIND                  = 237\n\tSYS_SET_MEMPOLICY          = 238\n\tSYS_GET_MEMPOLICY          = 239\n\tSYS_MQ_OPEN                = 240\n\tSYS_MQ_UNLINK              = 241\n\tSYS_MQ_TIMEDSEND           = 242\n\tSYS_MQ_TIMEDRECEIVE        = 243\n\tSYS_MQ_NOTIFY              = 244\n\tSYS_MQ_GETSETATTR          = 245\n\tSYS_KEXEC_LOAD             = 246\n\tSYS_WAITID                 = 247\n\tSYS_ADD_KEY                = 248\n\tSYS_REQUEST_KEY            = 249\n\tSYS_KEYCTL                 = 250\n\tSYS_IOPRIO_SET             = 251\n\tSYS_IOPRIO_GET             = 252\n\tSYS_INOTIFY_INIT           = 253\n\tSYS_INOTIFY_ADD_WATCH      = 254\n\tSYS_INOTIFY_RM_WATCH       = 255\n\tSYS_MIGRATE_PAGES          = 256\n\tSYS_OPENAT                 = 257\n\tSYS_MKDIRAT                = 258\n\tSYS_MKNODAT                = 259\n\tSYS_FCHOWNAT               = 260\n\tSYS_FUTIMESAT              = 261\n\tSYS_NEWFSTATAT             = 262\n\tSYS_UNLINKAT               = 263\n\tSYS_RENAMEAT               = 264\n\tSYS_LINKAT                 = 265\n\tSYS_SYMLINKAT              = 266\n\tSYS_READLINKAT             = 267\n\tSYS_FCHMODAT               = 268\n\tSYS_FACCESSAT              = 269\n\tSYS_PSELECT6               = 270\n\tSYS_PPOLL                  = 271\n\tSYS_UNSHARE                = 272\n\tSYS_SET_ROBUST_LIST        = 273\n\tSYS_GET_ROBUST_LIST        = 274\n\tSYS_SPLICE                 = 275\n\tSYS_TEE                    = 276\n\tSYS_SYNC_FILE_RANGE        = 277\n\tSYS_VMSPLICE               = 278\n\tSYS_MOVE_PAGES             = 279\n\tSYS_UTIMENSAT              = 280\n\tSYS_EPOLL_PWAIT            = 281\n\tSYS_SIGNALFD               = 282\n\tSYS_TIMERFD_CREATE         = 283\n\tSYS_EVENTFD                = 284\n\tSYS_FALLOCATE              = 285\n\tSYS_TIMERFD_SETTIME        = 286\n\tSYS_TIMERFD_GETTIME        = 287\n\tSYS_ACCEPT4                = 288\n\tSYS_SIGNALFD4              = 289\n\tSYS_EVENTFD2               = 290\n\tSYS_EPOLL_CREATE1          = 291\n\tSYS_DUP3                   = 292\n\tSYS_PIPE2                  = 293\n\tSYS_INOTIFY_INIT1          = 294\n\tSYS_PREADV                 = 295\n\tSYS_PWRITEV                = 296\n\tSYS_RT_TGSIGQUEUEINFO      = 297\n\tSYS_PERF_EVENT_OPEN        = 298\n\tSYS_RECVMMSG               = 299\n\tSYS_FANOTIFY_INIT          = 300\n\tSYS_FANOTIFY_MARK          = 301\n\tSYS_PRLIMIT64              = 302\n\tSYS_NAME_TO_HANDLE_AT      = 303\n\tSYS_OPEN_BY_HANDLE_AT      = 304\n\tSYS_CLOCK_ADJTIME          = 305\n\tSYS_SYNCFS                 = 306\n\tSYS_SENDMMSG               = 307\n\tSYS_SETNS                  = 308\n\tSYS_GETCPU                 = 309\n\tSYS_PROCESS_VM_READV       = 310\n\tSYS_PROCESS_VM_WRITEV      = 311\n\tSYS_KCMP                   = 312\n\tSYS_FINIT_MODULE           = 313\n\tSYS_SCHED_SETATTR          = 314\n\tSYS_SCHED_GETATTR          = 315\n\tSYS_RENAMEAT2              = 316\n\tSYS_SECCOMP                = 317\n\tSYS_GETRANDOM              = 318\n\tSYS_MEMFD_CREATE           = 319\n\tSYS_KEXEC_FILE_LOAD        = 320\n\tSYS_BPF                    = 321\n\tSYS_EXECVEAT               = 322\n\tSYS_USERFAULTFD            = 323\n\tSYS_MEMBARRIER             = 324\n\tSYS_MLOCK2                 = 325\n\tSYS_COPY_FILE_RANGE        = 326\n\tSYS_PREADV2                = 327\n\tSYS_PWRITEV2               = 328\n\tSYS_PKEY_MPROTECT          = 329\n\tSYS_PKEY_ALLOC             = 330\n\tSYS_PKEY_FREE              = 331\n\tSYS_STATX                  = 332\n\tSYS_IO_PGETEVENTS          = 333\n\tSYS_RSEQ                   = 334\n\tSYS_PIDFD_SEND_SIGNAL      = 424\n\tSYS_IO_URING_SETUP         = 425\n\tSYS_IO_URING_ENTER         = 426\n\tSYS_IO_URING_REGISTER      = 427\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go",
    "content": "// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build arm,linux\n\npackage unix\n\nconst (\n\tSYS_RESTART_SYSCALL              = 0\n\tSYS_EXIT                         = 1\n\tSYS_FORK                         = 2\n\tSYS_READ                         = 3\n\tSYS_WRITE                        = 4\n\tSYS_OPEN                         = 5\n\tSYS_CLOSE                        = 6\n\tSYS_CREAT                        = 8\n\tSYS_LINK                         = 9\n\tSYS_UNLINK                       = 10\n\tSYS_EXECVE                       = 11\n\tSYS_CHDIR                        = 12\n\tSYS_MKNOD                        = 14\n\tSYS_CHMOD                        = 15\n\tSYS_LCHOWN                       = 16\n\tSYS_LSEEK                        = 19\n\tSYS_GETPID                       = 20\n\tSYS_MOUNT                        = 21\n\tSYS_SETUID                       = 23\n\tSYS_GETUID                       = 24\n\tSYS_PTRACE                       = 26\n\tSYS_PAUSE                        = 29\n\tSYS_ACCESS                       = 33\n\tSYS_NICE                         = 34\n\tSYS_SYNC                         = 36\n\tSYS_KILL                         = 37\n\tSYS_RENAME                       = 38\n\tSYS_MKDIR                        = 39\n\tSYS_RMDIR                        = 40\n\tSYS_DUP                          = 41\n\tSYS_PIPE                         = 42\n\tSYS_TIMES                        = 43\n\tSYS_BRK                          = 45\n\tSYS_SETGID                       = 46\n\tSYS_GETGID                       = 47\n\tSYS_GETEUID                      = 49\n\tSYS_GETEGID                      = 50\n\tSYS_ACCT                         = 51\n\tSYS_UMOUNT2                      = 52\n\tSYS_IOCTL                        = 54\n\tSYS_FCNTL                        = 55\n\tSYS_SETPGID                      = 57\n\tSYS_UMASK                        = 60\n\tSYS_CHROOT                       = 61\n\tSYS_USTAT                        = 62\n\tSYS_DUP2                         = 63\n\tSYS_GETPPID                      = 64\n\tSYS_GETPGRP                      = 65\n\tSYS_SETSID                       = 66\n\tSYS_SIGACTION                    = 67\n\tSYS_SETREUID                     = 70\n\tSYS_SETREGID                     = 71\n\tSYS_SIGSUSPEND                   = 72\n\tSYS_SIGPENDING                   = 73\n\tSYS_SETHOSTNAME                  = 74\n\tSYS_SETRLIMIT                    = 75\n\tSYS_GETRUSAGE                    = 77\n\tSYS_GETTIMEOFDAY                 = 78\n\tSYS_SETTIMEOFDAY                 = 79\n\tSYS_GETGROUPS                    = 80\n\tSYS_SETGROUPS                    = 81\n\tSYS_SYMLINK                      = 83\n\tSYS_READLINK                     = 85\n\tSYS_USELIB                       = 86\n\tSYS_SWAPON                       = 87\n\tSYS_REBOOT                       = 88\n\tSYS_MUNMAP                       = 91\n\tSYS_TRUNCATE                     = 92\n\tSYS_FTRUNCATE                    = 93\n\tSYS_FCHMOD                       = 94\n\tSYS_FCHOWN                       = 95\n\tSYS_GETPRIORITY                  = 96\n\tSYS_SETPRIORITY                  = 97\n\tSYS_STATFS                       = 99\n\tSYS_FSTATFS                      = 100\n\tSYS_SYSLOG                       = 103\n\tSYS_SETITIMER                    = 104\n\tSYS_GETITIMER                    = 105\n\tSYS_STAT                         = 106\n\tSYS_LSTAT                        = 107\n\tSYS_FSTAT                        = 108\n\tSYS_VHANGUP                      = 111\n\tSYS_WAIT4                        = 114\n\tSYS_SWAPOFF                      = 115\n\tSYS_SYSINFO                      = 116\n\tSYS_FSYNC                        = 118\n\tSYS_SIGRETURN                    = 119\n\tSYS_CLONE                        = 120\n\tSYS_SETDOMAINNAME                = 121\n\tSYS_UNAME                        = 122\n\tSYS_ADJTIMEX                     = 124\n\tSYS_MPROTECT                     = 125\n\tSYS_SIGPROCMASK                  = 126\n\tSYS_INIT_MODULE                  = 128\n\tSYS_DELETE_MODULE                = 129\n\tSYS_QUOTACTL                     = 131\n\tSYS_GETPGID                      = 132\n\tSYS_FCHDIR                       = 133\n\tSYS_BDFLUSH                      = 134\n\tSYS_SYSFS                        = 135\n\tSYS_PERSONALITY                  = 136\n\tSYS_SETFSUID                     = 138\n\tSYS_SETFSGID                     = 139\n\tSYS__LLSEEK                      = 140\n\tSYS_GETDENTS                     = 141\n\tSYS__NEWSELECT                   = 142\n\tSYS_FLOCK                        = 143\n\tSYS_MSYNC                        = 144\n\tSYS_READV                        = 145\n\tSYS_WRITEV                       = 146\n\tSYS_GETSID                       = 147\n\tSYS_FDATASYNC                    = 148\n\tSYS__SYSCTL                      = 149\n\tSYS_MLOCK                        = 150\n\tSYS_MUNLOCK                      = 151\n\tSYS_MLOCKALL                     = 152\n\tSYS_MUNLOCKALL                   = 153\n\tSYS_SCHED_SETPARAM               = 154\n\tSYS_SCHED_GETPARAM               = 155\n\tSYS_SCHED_SETSCHEDULER           = 156\n\tSYS_SCHED_GETSCHEDULER           = 157\n\tSYS_SCHED_YIELD                  = 158\n\tSYS_SCHED_GET_PRIORITY_MAX       = 159\n\tSYS_SCHED_GET_PRIORITY_MIN       = 160\n\tSYS_SCHED_RR_GET_INTERVAL        = 161\n\tSYS_NANOSLEEP                    = 162\n\tSYS_MREMAP                       = 163\n\tSYS_SETRESUID                    = 164\n\tSYS_GETRESUID                    = 165\n\tSYS_POLL                         = 168\n\tSYS_NFSSERVCTL                   = 169\n\tSYS_SETRESGID                    = 170\n\tSYS_GETRESGID                    = 171\n\tSYS_PRCTL                        = 172\n\tSYS_RT_SIGRETURN                 = 173\n\tSYS_RT_SIGACTION                 = 174\n\tSYS_RT_SIGPROCMASK               = 175\n\tSYS_RT_SIGPENDING                = 176\n\tSYS_RT_SIGTIMEDWAIT              = 177\n\tSYS_RT_SIGQUEUEINFO              = 178\n\tSYS_RT_SIGSUSPEND                = 179\n\tSYS_PREAD64                      = 180\n\tSYS_PWRITE64                     = 181\n\tSYS_CHOWN                        = 182\n\tSYS_GETCWD                       = 183\n\tSYS_CAPGET                       = 184\n\tSYS_CAPSET                       = 185\n\tSYS_SIGALTSTACK                  = 186\n\tSYS_SENDFILE                     = 187\n\tSYS_VFORK                        = 190\n\tSYS_UGETRLIMIT                   = 191\n\tSYS_MMAP2                        = 192\n\tSYS_TRUNCATE64                   = 193\n\tSYS_FTRUNCATE64                  = 194\n\tSYS_STAT64                       = 195\n\tSYS_LSTAT64                      = 196\n\tSYS_FSTAT64                      = 197\n\tSYS_LCHOWN32                     = 198\n\tSYS_GETUID32                     = 199\n\tSYS_GETGID32                     = 200\n\tSYS_GETEUID32                    = 201\n\tSYS_GETEGID32                    = 202\n\tSYS_SETREUID32                   = 203\n\tSYS_SETREGID32                   = 204\n\tSYS_GETGROUPS32                  = 205\n\tSYS_SETGROUPS32                  = 206\n\tSYS_FCHOWN32                     = 207\n\tSYS_SETRESUID32                  = 208\n\tSYS_GETRESUID32                  = 209\n\tSYS_SETRESGID32                  = 210\n\tSYS_GETRESGID32                  = 211\n\tSYS_CHOWN32                      = 212\n\tSYS_SETUID32                     = 213\n\tSYS_SETGID32                     = 214\n\tSYS_SETFSUID32                   = 215\n\tSYS_SETFSGID32                   = 216\n\tSYS_GETDENTS64                   = 217\n\tSYS_PIVOT_ROOT                   = 218\n\tSYS_MINCORE                      = 219\n\tSYS_MADVISE                      = 220\n\tSYS_FCNTL64                      = 221\n\tSYS_GETTID                       = 224\n\tSYS_READAHEAD                    = 225\n\tSYS_SETXATTR                     = 226\n\tSYS_LSETXATTR                    = 227\n\tSYS_FSETXATTR                    = 228\n\tSYS_GETXATTR                     = 229\n\tSYS_LGETXATTR                    = 230\n\tSYS_FGETXATTR                    = 231\n\tSYS_LISTXATTR                    = 232\n\tSYS_LLISTXATTR                   = 233\n\tSYS_FLISTXATTR                   = 234\n\tSYS_REMOVEXATTR                  = 235\n\tSYS_LREMOVEXATTR                 = 236\n\tSYS_FREMOVEXATTR                 = 237\n\tSYS_TKILL                        = 238\n\tSYS_SENDFILE64                   = 239\n\tSYS_FUTEX                        = 240\n\tSYS_SCHED_SETAFFINITY            = 241\n\tSYS_SCHED_GETAFFINITY            = 242\n\tSYS_IO_SETUP                     = 243\n\tSYS_IO_DESTROY                   = 244\n\tSYS_IO_GETEVENTS                 = 245\n\tSYS_IO_SUBMIT                    = 246\n\tSYS_IO_CANCEL                    = 247\n\tSYS_EXIT_GROUP                   = 248\n\tSYS_LOOKUP_DCOOKIE               = 249\n\tSYS_EPOLL_CREATE                 = 250\n\tSYS_EPOLL_CTL                    = 251\n\tSYS_EPOLL_WAIT                   = 252\n\tSYS_REMAP_FILE_PAGES             = 253\n\tSYS_SET_TID_ADDRESS              = 256\n\tSYS_TIMER_CREATE                 = 257\n\tSYS_TIMER_SETTIME                = 258\n\tSYS_TIMER_GETTIME                = 259\n\tSYS_TIMER_GETOVERRUN             = 260\n\tSYS_TIMER_DELETE                 = 261\n\tSYS_CLOCK_SETTIME                = 262\n\tSYS_CLOCK_GETTIME                = 263\n\tSYS_CLOCK_GETRES                 = 264\n\tSYS_CLOCK_NANOSLEEP              = 265\n\tSYS_STATFS64                     = 266\n\tSYS_FSTATFS64                    = 267\n\tSYS_TGKILL                       = 268\n\tSYS_UTIMES                       = 269\n\tSYS_ARM_FADVISE64_64             = 270\n\tSYS_PCICONFIG_IOBASE             = 271\n\tSYS_PCICONFIG_READ               = 272\n\tSYS_PCICONFIG_WRITE              = 273\n\tSYS_MQ_OPEN                      = 274\n\tSYS_MQ_UNLINK                    = 275\n\tSYS_MQ_TIMEDSEND                 = 276\n\tSYS_MQ_TIMEDRECEIVE              = 277\n\tSYS_MQ_NOTIFY                    = 278\n\tSYS_MQ_GETSETATTR                = 279\n\tSYS_WAITID                       = 280\n\tSYS_SOCKET                       = 281\n\tSYS_BIND                         = 282\n\tSYS_CONNECT                      = 283\n\tSYS_LISTEN                       = 284\n\tSYS_ACCEPT                       = 285\n\tSYS_GETSOCKNAME                  = 286\n\tSYS_GETPEERNAME                  = 287\n\tSYS_SOCKETPAIR                   = 288\n\tSYS_SEND                         = 289\n\tSYS_SENDTO                       = 290\n\tSYS_RECV                         = 291\n\tSYS_RECVFROM                     = 292\n\tSYS_SHUTDOWN                     = 293\n\tSYS_SETSOCKOPT                   = 294\n\tSYS_GETSOCKOPT                   = 295\n\tSYS_SENDMSG                      = 296\n\tSYS_RECVMSG                      = 297\n\tSYS_SEMOP                        = 298\n\tSYS_SEMGET                       = 299\n\tSYS_SEMCTL                       = 300\n\tSYS_MSGSND                       = 301\n\tSYS_MSGRCV                       = 302\n\tSYS_MSGGET                       = 303\n\tSYS_MSGCTL                       = 304\n\tSYS_SHMAT                        = 305\n\tSYS_SHMDT                        = 306\n\tSYS_SHMGET                       = 307\n\tSYS_SHMCTL                       = 308\n\tSYS_ADD_KEY                      = 309\n\tSYS_REQUEST_KEY                  = 310\n\tSYS_KEYCTL                       = 311\n\tSYS_SEMTIMEDOP                   = 312\n\tSYS_VSERVER                      = 313\n\tSYS_IOPRIO_SET                   = 314\n\tSYS_IOPRIO_GET                   = 315\n\tSYS_INOTIFY_INIT                 = 316\n\tSYS_INOTIFY_ADD_WATCH            = 317\n\tSYS_INOTIFY_RM_WATCH             = 318\n\tSYS_MBIND                        = 319\n\tSYS_GET_MEMPOLICY                = 320\n\tSYS_SET_MEMPOLICY                = 321\n\tSYS_OPENAT                       = 322\n\tSYS_MKDIRAT                      = 323\n\tSYS_MKNODAT                      = 324\n\tSYS_FCHOWNAT                     = 325\n\tSYS_FUTIMESAT                    = 326\n\tSYS_FSTATAT64                    = 327\n\tSYS_UNLINKAT                     = 328\n\tSYS_RENAMEAT                     = 329\n\tSYS_LINKAT                       = 330\n\tSYS_SYMLINKAT                    = 331\n\tSYS_READLINKAT                   = 332\n\tSYS_FCHMODAT                     = 333\n\tSYS_FACCESSAT                    = 334\n\tSYS_PSELECT6                     = 335\n\tSYS_PPOLL                        = 336\n\tSYS_UNSHARE                      = 337\n\tSYS_SET_ROBUST_LIST              = 338\n\tSYS_GET_ROBUST_LIST              = 339\n\tSYS_SPLICE                       = 340\n\tSYS_ARM_SYNC_FILE_RANGE          = 341\n\tSYS_TEE                          = 342\n\tSYS_VMSPLICE                     = 343\n\tSYS_MOVE_PAGES                   = 344\n\tSYS_GETCPU                       = 345\n\tSYS_EPOLL_PWAIT                  = 346\n\tSYS_KEXEC_LOAD                   = 347\n\tSYS_UTIMENSAT                    = 348\n\tSYS_SIGNALFD                     = 349\n\tSYS_TIMERFD_CREATE               = 350\n\tSYS_EVENTFD                      = 351\n\tSYS_FALLOCATE                    = 352\n\tSYS_TIMERFD_SETTIME              = 353\n\tSYS_TIMERFD_GETTIME              = 354\n\tSYS_SIGNALFD4                    = 355\n\tSYS_EVENTFD2                     = 356\n\tSYS_EPOLL_CREATE1                = 357\n\tSYS_DUP3                         = 358\n\tSYS_PIPE2                        = 359\n\tSYS_INOTIFY_INIT1                = 360\n\tSYS_PREADV                       = 361\n\tSYS_PWRITEV                      = 362\n\tSYS_RT_TGSIGQUEUEINFO            = 363\n\tSYS_PERF_EVENT_OPEN              = 364\n\tSYS_RECVMMSG                     = 365\n\tSYS_ACCEPT4                      = 366\n\tSYS_FANOTIFY_INIT                = 367\n\tSYS_FANOTIFY_MARK                = 368\n\tSYS_PRLIMIT64                    = 369\n\tSYS_NAME_TO_HANDLE_AT            = 370\n\tSYS_OPEN_BY_HANDLE_AT            = 371\n\tSYS_CLOCK_ADJTIME                = 372\n\tSYS_SYNCFS                       = 373\n\tSYS_SENDMMSG                     = 374\n\tSYS_SETNS                        = 375\n\tSYS_PROCESS_VM_READV             = 376\n\tSYS_PROCESS_VM_WRITEV            = 377\n\tSYS_KCMP                         = 378\n\tSYS_FINIT_MODULE                 = 379\n\tSYS_SCHED_SETATTR                = 380\n\tSYS_SCHED_GETATTR                = 381\n\tSYS_RENAMEAT2                    = 382\n\tSYS_SECCOMP                      = 383\n\tSYS_GETRANDOM                    = 384\n\tSYS_MEMFD_CREATE                 = 385\n\tSYS_BPF                          = 386\n\tSYS_EXECVEAT                     = 387\n\tSYS_USERFAULTFD                  = 388\n\tSYS_MEMBARRIER                   = 389\n\tSYS_MLOCK2                       = 390\n\tSYS_COPY_FILE_RANGE              = 391\n\tSYS_PREADV2                      = 392\n\tSYS_PWRITEV2                     = 393\n\tSYS_PKEY_MPROTECT                = 394\n\tSYS_PKEY_ALLOC                   = 395\n\tSYS_PKEY_FREE                    = 396\n\tSYS_STATX                        = 397\n\tSYS_RSEQ                         = 398\n\tSYS_IO_PGETEVENTS                = 399\n\tSYS_MIGRATE_PAGES                = 400\n\tSYS_KEXEC_FILE_LOAD              = 401\n\tSYS_CLOCK_GETTIME64              = 403\n\tSYS_CLOCK_SETTIME64              = 404\n\tSYS_CLOCK_ADJTIME64              = 405\n\tSYS_CLOCK_GETRES_TIME64          = 406\n\tSYS_CLOCK_NANOSLEEP_TIME64       = 407\n\tSYS_TIMER_GETTIME64              = 408\n\tSYS_TIMER_SETTIME64              = 409\n\tSYS_TIMERFD_GETTIME64            = 410\n\tSYS_TIMERFD_SETTIME64            = 411\n\tSYS_UTIMENSAT_TIME64             = 412\n\tSYS_PSELECT6_TIME64              = 413\n\tSYS_PPOLL_TIME64                 = 414\n\tSYS_IO_PGETEVENTS_TIME64         = 416\n\tSYS_RECVMMSG_TIME64              = 417\n\tSYS_MQ_TIMEDSEND_TIME64          = 418\n\tSYS_MQ_TIMEDRECEIVE_TIME64       = 419\n\tSYS_SEMTIMEDOP_TIME64            = 420\n\tSYS_RT_SIGTIMEDWAIT_TIME64       = 421\n\tSYS_FUTEX_TIME64                 = 422\n\tSYS_SCHED_RR_GET_INTERVAL_TIME64 = 423\n\tSYS_PIDFD_SEND_SIGNAL            = 424\n\tSYS_IO_URING_SETUP               = 425\n\tSYS_IO_URING_ENTER               = 426\n\tSYS_IO_URING_REGISTER            = 427\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go",
    "content": "// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include -fsigned-char /tmp/include/asm/unistd.h\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build arm64,linux\n\npackage unix\n\nconst (\n\tSYS_IO_SETUP               = 0\n\tSYS_IO_DESTROY             = 1\n\tSYS_IO_SUBMIT              = 2\n\tSYS_IO_CANCEL              = 3\n\tSYS_IO_GETEVENTS           = 4\n\tSYS_SETXATTR               = 5\n\tSYS_LSETXATTR              = 6\n\tSYS_FSETXATTR              = 7\n\tSYS_GETXATTR               = 8\n\tSYS_LGETXATTR              = 9\n\tSYS_FGETXATTR              = 10\n\tSYS_LISTXATTR              = 11\n\tSYS_LLISTXATTR             = 12\n\tSYS_FLISTXATTR             = 13\n\tSYS_REMOVEXATTR            = 14\n\tSYS_LREMOVEXATTR           = 15\n\tSYS_FREMOVEXATTR           = 16\n\tSYS_GETCWD                 = 17\n\tSYS_LOOKUP_DCOOKIE         = 18\n\tSYS_EVENTFD2               = 19\n\tSYS_EPOLL_CREATE1          = 20\n\tSYS_EPOLL_CTL              = 21\n\tSYS_EPOLL_PWAIT            = 22\n\tSYS_DUP                    = 23\n\tSYS_DUP3                   = 24\n\tSYS_FCNTL                  = 25\n\tSYS_INOTIFY_INIT1          = 26\n\tSYS_INOTIFY_ADD_WATCH      = 27\n\tSYS_INOTIFY_RM_WATCH       = 28\n\tSYS_IOCTL                  = 29\n\tSYS_IOPRIO_SET             = 30\n\tSYS_IOPRIO_GET             = 31\n\tSYS_FLOCK                  = 32\n\tSYS_MKNODAT                = 33\n\tSYS_MKDIRAT                = 34\n\tSYS_UNLINKAT               = 35\n\tSYS_SYMLINKAT              = 36\n\tSYS_LINKAT                 = 37\n\tSYS_RENAMEAT               = 38\n\tSYS_UMOUNT2                = 39\n\tSYS_MOUNT                  = 40\n\tSYS_PIVOT_ROOT             = 41\n\tSYS_NFSSERVCTL             = 42\n\tSYS_STATFS                 = 43\n\tSYS_FSTATFS                = 44\n\tSYS_TRUNCATE               = 45\n\tSYS_FTRUNCATE              = 46\n\tSYS_FALLOCATE              = 47\n\tSYS_FACCESSAT              = 48\n\tSYS_CHDIR                  = 49\n\tSYS_FCHDIR                 = 50\n\tSYS_CHROOT                 = 51\n\tSYS_FCHMOD                 = 52\n\tSYS_FCHMODAT               = 53\n\tSYS_FCHOWNAT               = 54\n\tSYS_FCHOWN                 = 55\n\tSYS_OPENAT                 = 56\n\tSYS_CLOSE                  = 57\n\tSYS_VHANGUP                = 58\n\tSYS_PIPE2                  = 59\n\tSYS_QUOTACTL               = 60\n\tSYS_GETDENTS64             = 61\n\tSYS_LSEEK                  = 62\n\tSYS_READ                   = 63\n\tSYS_WRITE                  = 64\n\tSYS_READV                  = 65\n\tSYS_WRITEV                 = 66\n\tSYS_PREAD64                = 67\n\tSYS_PWRITE64               = 68\n\tSYS_PREADV                 = 69\n\tSYS_PWRITEV                = 70\n\tSYS_SENDFILE               = 71\n\tSYS_PSELECT6               = 72\n\tSYS_PPOLL                  = 73\n\tSYS_SIGNALFD4              = 74\n\tSYS_VMSPLICE               = 75\n\tSYS_SPLICE                 = 76\n\tSYS_TEE                    = 77\n\tSYS_READLINKAT             = 78\n\tSYS_FSTATAT                = 79\n\tSYS_FSTAT                  = 80\n\tSYS_SYNC                   = 81\n\tSYS_FSYNC                  = 82\n\tSYS_FDATASYNC              = 83\n\tSYS_SYNC_FILE_RANGE        = 84\n\tSYS_TIMERFD_CREATE         = 85\n\tSYS_TIMERFD_SETTIME        = 86\n\tSYS_TIMERFD_GETTIME        = 87\n\tSYS_UTIMENSAT              = 88\n\tSYS_ACCT                   = 89\n\tSYS_CAPGET                 = 90\n\tSYS_CAPSET                 = 91\n\tSYS_PERSONALITY            = 92\n\tSYS_EXIT                   = 93\n\tSYS_EXIT_GROUP             = 94\n\tSYS_WAITID                 = 95\n\tSYS_SET_TID_ADDRESS        = 96\n\tSYS_UNSHARE                = 97\n\tSYS_FUTEX                  = 98\n\tSYS_SET_ROBUST_LIST        = 99\n\tSYS_GET_ROBUST_LIST        = 100\n\tSYS_NANOSLEEP              = 101\n\tSYS_GETITIMER              = 102\n\tSYS_SETITIMER              = 103\n\tSYS_KEXEC_LOAD             = 104\n\tSYS_INIT_MODULE            = 105\n\tSYS_DELETE_MODULE          = 106\n\tSYS_TIMER_CREATE           = 107\n\tSYS_TIMER_GETTIME          = 108\n\tSYS_TIMER_GETOVERRUN       = 109\n\tSYS_TIMER_SETTIME          = 110\n\tSYS_TIMER_DELETE           = 111\n\tSYS_CLOCK_SETTIME          = 112\n\tSYS_CLOCK_GETTIME          = 113\n\tSYS_CLOCK_GETRES           = 114\n\tSYS_CLOCK_NANOSLEEP        = 115\n\tSYS_SYSLOG                 = 116\n\tSYS_PTRACE                 = 117\n\tSYS_SCHED_SETPARAM         = 118\n\tSYS_SCHED_SETSCHEDULER     = 119\n\tSYS_SCHED_GETSCHEDULER     = 120\n\tSYS_SCHED_GETPARAM         = 121\n\tSYS_SCHED_SETAFFINITY      = 122\n\tSYS_SCHED_GETAFFINITY      = 123\n\tSYS_SCHED_YIELD            = 124\n\tSYS_SCHED_GET_PRIORITY_MAX = 125\n\tSYS_SCHED_GET_PRIORITY_MIN = 126\n\tSYS_SCHED_RR_GET_INTERVAL  = 127\n\tSYS_RESTART_SYSCALL        = 128\n\tSYS_KILL                   = 129\n\tSYS_TKILL                  = 130\n\tSYS_TGKILL                 = 131\n\tSYS_SIGALTSTACK            = 132\n\tSYS_RT_SIGSUSPEND          = 133\n\tSYS_RT_SIGACTION           = 134\n\tSYS_RT_SIGPROCMASK         = 135\n\tSYS_RT_SIGPENDING          = 136\n\tSYS_RT_SIGTIMEDWAIT        = 137\n\tSYS_RT_SIGQUEUEINFO        = 138\n\tSYS_RT_SIGRETURN           = 139\n\tSYS_SETPRIORITY            = 140\n\tSYS_GETPRIORITY            = 141\n\tSYS_REBOOT                 = 142\n\tSYS_SETREGID               = 143\n\tSYS_SETGID                 = 144\n\tSYS_SETREUID               = 145\n\tSYS_SETUID                 = 146\n\tSYS_SETRESUID              = 147\n\tSYS_GETRESUID              = 148\n\tSYS_SETRESGID              = 149\n\tSYS_GETRESGID              = 150\n\tSYS_SETFSUID               = 151\n\tSYS_SETFSGID               = 152\n\tSYS_TIMES                  = 153\n\tSYS_SETPGID                = 154\n\tSYS_GETPGID                = 155\n\tSYS_GETSID                 = 156\n\tSYS_SETSID                 = 157\n\tSYS_GETGROUPS              = 158\n\tSYS_SETGROUPS              = 159\n\tSYS_UNAME                  = 160\n\tSYS_SETHOSTNAME            = 161\n\tSYS_SETDOMAINNAME          = 162\n\tSYS_GETRLIMIT              = 163\n\tSYS_SETRLIMIT              = 164\n\tSYS_GETRUSAGE              = 165\n\tSYS_UMASK                  = 166\n\tSYS_PRCTL                  = 167\n\tSYS_GETCPU                 = 168\n\tSYS_GETTIMEOFDAY           = 169\n\tSYS_SETTIMEOFDAY           = 170\n\tSYS_ADJTIMEX               = 171\n\tSYS_GETPID                 = 172\n\tSYS_GETPPID                = 173\n\tSYS_GETUID                 = 174\n\tSYS_GETEUID                = 175\n\tSYS_GETGID                 = 176\n\tSYS_GETEGID                = 177\n\tSYS_GETTID                 = 178\n\tSYS_SYSINFO                = 179\n\tSYS_MQ_OPEN                = 180\n\tSYS_MQ_UNLINK              = 181\n\tSYS_MQ_TIMEDSEND           = 182\n\tSYS_MQ_TIMEDRECEIVE        = 183\n\tSYS_MQ_NOTIFY              = 184\n\tSYS_MQ_GETSETATTR          = 185\n\tSYS_MSGGET                 = 186\n\tSYS_MSGCTL                 = 187\n\tSYS_MSGRCV                 = 188\n\tSYS_MSGSND                 = 189\n\tSYS_SEMGET                 = 190\n\tSYS_SEMCTL                 = 191\n\tSYS_SEMTIMEDOP             = 192\n\tSYS_SEMOP                  = 193\n\tSYS_SHMGET                 = 194\n\tSYS_SHMCTL                 = 195\n\tSYS_SHMAT                  = 196\n\tSYS_SHMDT                  = 197\n\tSYS_SOCKET                 = 198\n\tSYS_SOCKETPAIR             = 199\n\tSYS_BIND                   = 200\n\tSYS_LISTEN                 = 201\n\tSYS_ACCEPT                 = 202\n\tSYS_CONNECT                = 203\n\tSYS_GETSOCKNAME            = 204\n\tSYS_GETPEERNAME            = 205\n\tSYS_SENDTO                 = 206\n\tSYS_RECVFROM               = 207\n\tSYS_SETSOCKOPT             = 208\n\tSYS_GETSOCKOPT             = 209\n\tSYS_SHUTDOWN               = 210\n\tSYS_SENDMSG                = 211\n\tSYS_RECVMSG                = 212\n\tSYS_READAHEAD              = 213\n\tSYS_BRK                    = 214\n\tSYS_MUNMAP                 = 215\n\tSYS_MREMAP                 = 216\n\tSYS_ADD_KEY                = 217\n\tSYS_REQUEST_KEY            = 218\n\tSYS_KEYCTL                 = 219\n\tSYS_CLONE                  = 220\n\tSYS_EXECVE                 = 221\n\tSYS_MMAP                   = 222\n\tSYS_FADVISE64              = 223\n\tSYS_SWAPON                 = 224\n\tSYS_SWAPOFF                = 225\n\tSYS_MPROTECT               = 226\n\tSYS_MSYNC                  = 227\n\tSYS_MLOCK                  = 228\n\tSYS_MUNLOCK                = 229\n\tSYS_MLOCKALL               = 230\n\tSYS_MUNLOCKALL             = 231\n\tSYS_MINCORE                = 232\n\tSYS_MADVISE                = 233\n\tSYS_REMAP_FILE_PAGES       = 234\n\tSYS_MBIND                  = 235\n\tSYS_GET_MEMPOLICY          = 236\n\tSYS_SET_MEMPOLICY          = 237\n\tSYS_MIGRATE_PAGES          = 238\n\tSYS_MOVE_PAGES             = 239\n\tSYS_RT_TGSIGQUEUEINFO      = 240\n\tSYS_PERF_EVENT_OPEN        = 241\n\tSYS_ACCEPT4                = 242\n\tSYS_RECVMMSG               = 243\n\tSYS_ARCH_SPECIFIC_SYSCALL  = 244\n\tSYS_WAIT4                  = 260\n\tSYS_PRLIMIT64              = 261\n\tSYS_FANOTIFY_INIT          = 262\n\tSYS_FANOTIFY_MARK          = 263\n\tSYS_NAME_TO_HANDLE_AT      = 264\n\tSYS_OPEN_BY_HANDLE_AT      = 265\n\tSYS_CLOCK_ADJTIME          = 266\n\tSYS_SYNCFS                 = 267\n\tSYS_SETNS                  = 268\n\tSYS_SENDMMSG               = 269\n\tSYS_PROCESS_VM_READV       = 270\n\tSYS_PROCESS_VM_WRITEV      = 271\n\tSYS_KCMP                   = 272\n\tSYS_FINIT_MODULE           = 273\n\tSYS_SCHED_SETATTR          = 274\n\tSYS_SCHED_GETATTR          = 275\n\tSYS_RENAMEAT2              = 276\n\tSYS_SECCOMP                = 277\n\tSYS_GETRANDOM              = 278\n\tSYS_MEMFD_CREATE           = 279\n\tSYS_BPF                    = 280\n\tSYS_EXECVEAT               = 281\n\tSYS_USERFAULTFD            = 282\n\tSYS_MEMBARRIER             = 283\n\tSYS_MLOCK2                 = 284\n\tSYS_COPY_FILE_RANGE        = 285\n\tSYS_PREADV2                = 286\n\tSYS_PWRITEV2               = 287\n\tSYS_PKEY_MPROTECT          = 288\n\tSYS_PKEY_ALLOC             = 289\n\tSYS_PKEY_FREE              = 290\n\tSYS_STATX                  = 291\n\tSYS_IO_PGETEVENTS          = 292\n\tSYS_RSEQ                   = 293\n\tSYS_KEXEC_FILE_LOAD        = 294\n\tSYS_PIDFD_SEND_SIGNAL      = 424\n\tSYS_IO_URING_SETUP         = 425\n\tSYS_IO_URING_ENTER         = 426\n\tSYS_IO_URING_REGISTER      = 427\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go",
    "content": "// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build mips,linux\n\npackage unix\n\nconst (\n\tSYS_SYSCALL                      = 4000\n\tSYS_EXIT                         = 4001\n\tSYS_FORK                         = 4002\n\tSYS_READ                         = 4003\n\tSYS_WRITE                        = 4004\n\tSYS_OPEN                         = 4005\n\tSYS_CLOSE                        = 4006\n\tSYS_WAITPID                      = 4007\n\tSYS_CREAT                        = 4008\n\tSYS_LINK                         = 4009\n\tSYS_UNLINK                       = 4010\n\tSYS_EXECVE                       = 4011\n\tSYS_CHDIR                        = 4012\n\tSYS_TIME                         = 4013\n\tSYS_MKNOD                        = 4014\n\tSYS_CHMOD                        = 4015\n\tSYS_LCHOWN                       = 4016\n\tSYS_BREAK                        = 4017\n\tSYS_UNUSED18                     = 4018\n\tSYS_LSEEK                        = 4019\n\tSYS_GETPID                       = 4020\n\tSYS_MOUNT                        = 4021\n\tSYS_UMOUNT                       = 4022\n\tSYS_SETUID                       = 4023\n\tSYS_GETUID                       = 4024\n\tSYS_STIME                        = 4025\n\tSYS_PTRACE                       = 4026\n\tSYS_ALARM                        = 4027\n\tSYS_UNUSED28                     = 4028\n\tSYS_PAUSE                        = 4029\n\tSYS_UTIME                        = 4030\n\tSYS_STTY                         = 4031\n\tSYS_GTTY                         = 4032\n\tSYS_ACCESS                       = 4033\n\tSYS_NICE                         = 4034\n\tSYS_FTIME                        = 4035\n\tSYS_SYNC                         = 4036\n\tSYS_KILL                         = 4037\n\tSYS_RENAME                       = 4038\n\tSYS_MKDIR                        = 4039\n\tSYS_RMDIR                        = 4040\n\tSYS_DUP                          = 4041\n\tSYS_PIPE                         = 4042\n\tSYS_TIMES                        = 4043\n\tSYS_PROF                         = 4044\n\tSYS_BRK                          = 4045\n\tSYS_SETGID                       = 4046\n\tSYS_GETGID                       = 4047\n\tSYS_SIGNAL                       = 4048\n\tSYS_GETEUID                      = 4049\n\tSYS_GETEGID                      = 4050\n\tSYS_ACCT                         = 4051\n\tSYS_UMOUNT2                      = 4052\n\tSYS_LOCK                         = 4053\n\tSYS_IOCTL                        = 4054\n\tSYS_FCNTL                        = 4055\n\tSYS_MPX                          = 4056\n\tSYS_SETPGID                      = 4057\n\tSYS_ULIMIT                       = 4058\n\tSYS_UNUSED59                     = 4059\n\tSYS_UMASK                        = 4060\n\tSYS_CHROOT                       = 4061\n\tSYS_USTAT                        = 4062\n\tSYS_DUP2                         = 4063\n\tSYS_GETPPID                      = 4064\n\tSYS_GETPGRP                      = 4065\n\tSYS_SETSID                       = 4066\n\tSYS_SIGACTION                    = 4067\n\tSYS_SGETMASK                     = 4068\n\tSYS_SSETMASK                     = 4069\n\tSYS_SETREUID                     = 4070\n\tSYS_SETREGID                     = 4071\n\tSYS_SIGSUSPEND                   = 4072\n\tSYS_SIGPENDING                   = 4073\n\tSYS_SETHOSTNAME                  = 4074\n\tSYS_SETRLIMIT                    = 4075\n\tSYS_GETRLIMIT                    = 4076\n\tSYS_GETRUSAGE                    = 4077\n\tSYS_GETTIMEOFDAY                 = 4078\n\tSYS_SETTIMEOFDAY                 = 4079\n\tSYS_GETGROUPS                    = 4080\n\tSYS_SETGROUPS                    = 4081\n\tSYS_RESERVED82                   = 4082\n\tSYS_SYMLINK                      = 4083\n\tSYS_UNUSED84                     = 4084\n\tSYS_READLINK                     = 4085\n\tSYS_USELIB                       = 4086\n\tSYS_SWAPON                       = 4087\n\tSYS_REBOOT                       = 4088\n\tSYS_READDIR                      = 4089\n\tSYS_MMAP                         = 4090\n\tSYS_MUNMAP                       = 4091\n\tSYS_TRUNCATE                     = 4092\n\tSYS_FTRUNCATE                    = 4093\n\tSYS_FCHMOD                       = 4094\n\tSYS_FCHOWN                       = 4095\n\tSYS_GETPRIORITY                  = 4096\n\tSYS_SETPRIORITY                  = 4097\n\tSYS_PROFIL                       = 4098\n\tSYS_STATFS                       = 4099\n\tSYS_FSTATFS                      = 4100\n\tSYS_IOPERM                       = 4101\n\tSYS_SOCKETCALL                   = 4102\n\tSYS_SYSLOG                       = 4103\n\tSYS_SETITIMER                    = 4104\n\tSYS_GETITIMER                    = 4105\n\tSYS_STAT                         = 4106\n\tSYS_LSTAT                        = 4107\n\tSYS_FSTAT                        = 4108\n\tSYS_UNUSED109                    = 4109\n\tSYS_IOPL                         = 4110\n\tSYS_VHANGUP                      = 4111\n\tSYS_IDLE                         = 4112\n\tSYS_VM86                         = 4113\n\tSYS_WAIT4                        = 4114\n\tSYS_SWAPOFF                      = 4115\n\tSYS_SYSINFO                      = 4116\n\tSYS_IPC                          = 4117\n\tSYS_FSYNC                        = 4118\n\tSYS_SIGRETURN                    = 4119\n\tSYS_CLONE                        = 4120\n\tSYS_SETDOMAINNAME                = 4121\n\tSYS_UNAME                        = 4122\n\tSYS_MODIFY_LDT                   = 4123\n\tSYS_ADJTIMEX                     = 4124\n\tSYS_MPROTECT                     = 4125\n\tSYS_SIGPROCMASK                  = 4126\n\tSYS_CREATE_MODULE                = 4127\n\tSYS_INIT_MODULE                  = 4128\n\tSYS_DELETE_MODULE                = 4129\n\tSYS_GET_KERNEL_SYMS              = 4130\n\tSYS_QUOTACTL                     = 4131\n\tSYS_GETPGID                      = 4132\n\tSYS_FCHDIR                       = 4133\n\tSYS_BDFLUSH                      = 4134\n\tSYS_SYSFS                        = 4135\n\tSYS_PERSONALITY                  = 4136\n\tSYS_AFS_SYSCALL                  = 4137\n\tSYS_SETFSUID                     = 4138\n\tSYS_SETFSGID                     = 4139\n\tSYS__LLSEEK                      = 4140\n\tSYS_GETDENTS                     = 4141\n\tSYS__NEWSELECT                   = 4142\n\tSYS_FLOCK                        = 4143\n\tSYS_MSYNC                        = 4144\n\tSYS_READV                        = 4145\n\tSYS_WRITEV                       = 4146\n\tSYS_CACHEFLUSH                   = 4147\n\tSYS_CACHECTL                     = 4148\n\tSYS_SYSMIPS                      = 4149\n\tSYS_UNUSED150                    = 4150\n\tSYS_GETSID                       = 4151\n\tSYS_FDATASYNC                    = 4152\n\tSYS__SYSCTL                      = 4153\n\tSYS_MLOCK                        = 4154\n\tSYS_MUNLOCK                      = 4155\n\tSYS_MLOCKALL                     = 4156\n\tSYS_MUNLOCKALL                   = 4157\n\tSYS_SCHED_SETPARAM               = 4158\n\tSYS_SCHED_GETPARAM               = 4159\n\tSYS_SCHED_SETSCHEDULER           = 4160\n\tSYS_SCHED_GETSCHEDULER           = 4161\n\tSYS_SCHED_YIELD                  = 4162\n\tSYS_SCHED_GET_PRIORITY_MAX       = 4163\n\tSYS_SCHED_GET_PRIORITY_MIN       = 4164\n\tSYS_SCHED_RR_GET_INTERVAL        = 4165\n\tSYS_NANOSLEEP                    = 4166\n\tSYS_MREMAP                       = 4167\n\tSYS_ACCEPT                       = 4168\n\tSYS_BIND                         = 4169\n\tSYS_CONNECT                      = 4170\n\tSYS_GETPEERNAME                  = 4171\n\tSYS_GETSOCKNAME                  = 4172\n\tSYS_GETSOCKOPT                   = 4173\n\tSYS_LISTEN                       = 4174\n\tSYS_RECV                         = 4175\n\tSYS_RECVFROM                     = 4176\n\tSYS_RECVMSG                      = 4177\n\tSYS_SEND                         = 4178\n\tSYS_SENDMSG                      = 4179\n\tSYS_SENDTO                       = 4180\n\tSYS_SETSOCKOPT                   = 4181\n\tSYS_SHUTDOWN                     = 4182\n\tSYS_SOCKET                       = 4183\n\tSYS_SOCKETPAIR                   = 4184\n\tSYS_SETRESUID                    = 4185\n\tSYS_GETRESUID                    = 4186\n\tSYS_QUERY_MODULE                 = 4187\n\tSYS_POLL                         = 4188\n\tSYS_NFSSERVCTL                   = 4189\n\tSYS_SETRESGID                    = 4190\n\tSYS_GETRESGID                    = 4191\n\tSYS_PRCTL                        = 4192\n\tSYS_RT_SIGRETURN                 = 4193\n\tSYS_RT_SIGACTION                 = 4194\n\tSYS_RT_SIGPROCMASK               = 4195\n\tSYS_RT_SIGPENDING                = 4196\n\tSYS_RT_SIGTIMEDWAIT              = 4197\n\tSYS_RT_SIGQUEUEINFO              = 4198\n\tSYS_RT_SIGSUSPEND                = 4199\n\tSYS_PREAD64                      = 4200\n\tSYS_PWRITE64                     = 4201\n\tSYS_CHOWN                        = 4202\n\tSYS_GETCWD                       = 4203\n\tSYS_CAPGET                       = 4204\n\tSYS_CAPSET                       = 4205\n\tSYS_SIGALTSTACK                  = 4206\n\tSYS_SENDFILE                     = 4207\n\tSYS_GETPMSG                      = 4208\n\tSYS_PUTPMSG                      = 4209\n\tSYS_MMAP2                        = 4210\n\tSYS_TRUNCATE64                   = 4211\n\tSYS_FTRUNCATE64                  = 4212\n\tSYS_STAT64                       = 4213\n\tSYS_LSTAT64                      = 4214\n\tSYS_FSTAT64                      = 4215\n\tSYS_PIVOT_ROOT                   = 4216\n\tSYS_MINCORE                      = 4217\n\tSYS_MADVISE                      = 4218\n\tSYS_GETDENTS64                   = 4219\n\tSYS_FCNTL64                      = 4220\n\tSYS_RESERVED221                  = 4221\n\tSYS_GETTID                       = 4222\n\tSYS_READAHEAD                    = 4223\n\tSYS_SETXATTR                     = 4224\n\tSYS_LSETXATTR                    = 4225\n\tSYS_FSETXATTR                    = 4226\n\tSYS_GETXATTR                     = 4227\n\tSYS_LGETXATTR                    = 4228\n\tSYS_FGETXATTR                    = 4229\n\tSYS_LISTXATTR                    = 4230\n\tSYS_LLISTXATTR                   = 4231\n\tSYS_FLISTXATTR                   = 4232\n\tSYS_REMOVEXATTR                  = 4233\n\tSYS_LREMOVEXATTR                 = 4234\n\tSYS_FREMOVEXATTR                 = 4235\n\tSYS_TKILL                        = 4236\n\tSYS_SENDFILE64                   = 4237\n\tSYS_FUTEX                        = 4238\n\tSYS_SCHED_SETAFFINITY            = 4239\n\tSYS_SCHED_GETAFFINITY            = 4240\n\tSYS_IO_SETUP                     = 4241\n\tSYS_IO_DESTROY                   = 4242\n\tSYS_IO_GETEVENTS                 = 4243\n\tSYS_IO_SUBMIT                    = 4244\n\tSYS_IO_CANCEL                    = 4245\n\tSYS_EXIT_GROUP                   = 4246\n\tSYS_LOOKUP_DCOOKIE               = 4247\n\tSYS_EPOLL_CREATE                 = 4248\n\tSYS_EPOLL_CTL                    = 4249\n\tSYS_EPOLL_WAIT                   = 4250\n\tSYS_REMAP_FILE_PAGES             = 4251\n\tSYS_SET_TID_ADDRESS              = 4252\n\tSYS_RESTART_SYSCALL              = 4253\n\tSYS_FADVISE64                    = 4254\n\tSYS_STATFS64                     = 4255\n\tSYS_FSTATFS64                    = 4256\n\tSYS_TIMER_CREATE                 = 4257\n\tSYS_TIMER_SETTIME                = 4258\n\tSYS_TIMER_GETTIME                = 4259\n\tSYS_TIMER_GETOVERRUN             = 4260\n\tSYS_TIMER_DELETE                 = 4261\n\tSYS_CLOCK_SETTIME                = 4262\n\tSYS_CLOCK_GETTIME                = 4263\n\tSYS_CLOCK_GETRES                 = 4264\n\tSYS_CLOCK_NANOSLEEP              = 4265\n\tSYS_TGKILL                       = 4266\n\tSYS_UTIMES                       = 4267\n\tSYS_MBIND                        = 4268\n\tSYS_GET_MEMPOLICY                = 4269\n\tSYS_SET_MEMPOLICY                = 4270\n\tSYS_MQ_OPEN                      = 4271\n\tSYS_MQ_UNLINK                    = 4272\n\tSYS_MQ_TIMEDSEND                 = 4273\n\tSYS_MQ_TIMEDRECEIVE              = 4274\n\tSYS_MQ_NOTIFY                    = 4275\n\tSYS_MQ_GETSETATTR                = 4276\n\tSYS_VSERVER                      = 4277\n\tSYS_WAITID                       = 4278\n\tSYS_ADD_KEY                      = 4280\n\tSYS_REQUEST_KEY                  = 4281\n\tSYS_KEYCTL                       = 4282\n\tSYS_SET_THREAD_AREA              = 4283\n\tSYS_INOTIFY_INIT                 = 4284\n\tSYS_INOTIFY_ADD_WATCH            = 4285\n\tSYS_INOTIFY_RM_WATCH             = 4286\n\tSYS_MIGRATE_PAGES                = 4287\n\tSYS_OPENAT                       = 4288\n\tSYS_MKDIRAT                      = 4289\n\tSYS_MKNODAT                      = 4290\n\tSYS_FCHOWNAT                     = 4291\n\tSYS_FUTIMESAT                    = 4292\n\tSYS_FSTATAT64                    = 4293\n\tSYS_UNLINKAT                     = 4294\n\tSYS_RENAMEAT                     = 4295\n\tSYS_LINKAT                       = 4296\n\tSYS_SYMLINKAT                    = 4297\n\tSYS_READLINKAT                   = 4298\n\tSYS_FCHMODAT                     = 4299\n\tSYS_FACCESSAT                    = 4300\n\tSYS_PSELECT6                     = 4301\n\tSYS_PPOLL                        = 4302\n\tSYS_UNSHARE                      = 4303\n\tSYS_SPLICE                       = 4304\n\tSYS_SYNC_FILE_RANGE              = 4305\n\tSYS_TEE                          = 4306\n\tSYS_VMSPLICE                     = 4307\n\tSYS_MOVE_PAGES                   = 4308\n\tSYS_SET_ROBUST_LIST              = 4309\n\tSYS_GET_ROBUST_LIST              = 4310\n\tSYS_KEXEC_LOAD                   = 4311\n\tSYS_GETCPU                       = 4312\n\tSYS_EPOLL_PWAIT                  = 4313\n\tSYS_IOPRIO_SET                   = 4314\n\tSYS_IOPRIO_GET                   = 4315\n\tSYS_UTIMENSAT                    = 4316\n\tSYS_SIGNALFD                     = 4317\n\tSYS_TIMERFD                      = 4318\n\tSYS_EVENTFD                      = 4319\n\tSYS_FALLOCATE                    = 4320\n\tSYS_TIMERFD_CREATE               = 4321\n\tSYS_TIMERFD_GETTIME              = 4322\n\tSYS_TIMERFD_SETTIME              = 4323\n\tSYS_SIGNALFD4                    = 4324\n\tSYS_EVENTFD2                     = 4325\n\tSYS_EPOLL_CREATE1                = 4326\n\tSYS_DUP3                         = 4327\n\tSYS_PIPE2                        = 4328\n\tSYS_INOTIFY_INIT1                = 4329\n\tSYS_PREADV                       = 4330\n\tSYS_PWRITEV                      = 4331\n\tSYS_RT_TGSIGQUEUEINFO            = 4332\n\tSYS_PERF_EVENT_OPEN              = 4333\n\tSYS_ACCEPT4                      = 4334\n\tSYS_RECVMMSG                     = 4335\n\tSYS_FANOTIFY_INIT                = 4336\n\tSYS_FANOTIFY_MARK                = 4337\n\tSYS_PRLIMIT64                    = 4338\n\tSYS_NAME_TO_HANDLE_AT            = 4339\n\tSYS_OPEN_BY_HANDLE_AT            = 4340\n\tSYS_CLOCK_ADJTIME                = 4341\n\tSYS_SYNCFS                       = 4342\n\tSYS_SENDMMSG                     = 4343\n\tSYS_SETNS                        = 4344\n\tSYS_PROCESS_VM_READV             = 4345\n\tSYS_PROCESS_VM_WRITEV            = 4346\n\tSYS_KCMP                         = 4347\n\tSYS_FINIT_MODULE                 = 4348\n\tSYS_SCHED_SETATTR                = 4349\n\tSYS_SCHED_GETATTR                = 4350\n\tSYS_RENAMEAT2                    = 4351\n\tSYS_SECCOMP                      = 4352\n\tSYS_GETRANDOM                    = 4353\n\tSYS_MEMFD_CREATE                 = 4354\n\tSYS_BPF                          = 4355\n\tSYS_EXECVEAT                     = 4356\n\tSYS_USERFAULTFD                  = 4357\n\tSYS_MEMBARRIER                   = 4358\n\tSYS_MLOCK2                       = 4359\n\tSYS_COPY_FILE_RANGE              = 4360\n\tSYS_PREADV2                      = 4361\n\tSYS_PWRITEV2                     = 4362\n\tSYS_PKEY_MPROTECT                = 4363\n\tSYS_PKEY_ALLOC                   = 4364\n\tSYS_PKEY_FREE                    = 4365\n\tSYS_STATX                        = 4366\n\tSYS_RSEQ                         = 4367\n\tSYS_IO_PGETEVENTS                = 4368\n\tSYS_SEMGET                       = 4393\n\tSYS_SEMCTL                       = 4394\n\tSYS_SHMGET                       = 4395\n\tSYS_SHMCTL                       = 4396\n\tSYS_SHMAT                        = 4397\n\tSYS_SHMDT                        = 4398\n\tSYS_MSGGET                       = 4399\n\tSYS_MSGSND                       = 4400\n\tSYS_MSGRCV                       = 4401\n\tSYS_MSGCTL                       = 4402\n\tSYS_CLOCK_GETTIME64              = 4403\n\tSYS_CLOCK_SETTIME64              = 4404\n\tSYS_CLOCK_ADJTIME64              = 4405\n\tSYS_CLOCK_GETRES_TIME64          = 4406\n\tSYS_CLOCK_NANOSLEEP_TIME64       = 4407\n\tSYS_TIMER_GETTIME64              = 4408\n\tSYS_TIMER_SETTIME64              = 4409\n\tSYS_TIMERFD_GETTIME64            = 4410\n\tSYS_TIMERFD_SETTIME64            = 4411\n\tSYS_UTIMENSAT_TIME64             = 4412\n\tSYS_PSELECT6_TIME64              = 4413\n\tSYS_PPOLL_TIME64                 = 4414\n\tSYS_IO_PGETEVENTS_TIME64         = 4416\n\tSYS_RECVMMSG_TIME64              = 4417\n\tSYS_MQ_TIMEDSEND_TIME64          = 4418\n\tSYS_MQ_TIMEDRECEIVE_TIME64       = 4419\n\tSYS_SEMTIMEDOP_TIME64            = 4420\n\tSYS_RT_SIGTIMEDWAIT_TIME64       = 4421\n\tSYS_FUTEX_TIME64                 = 4422\n\tSYS_SCHED_RR_GET_INTERVAL_TIME64 = 4423\n\tSYS_PIDFD_SEND_SIGNAL            = 4424\n\tSYS_IO_URING_SETUP               = 4425\n\tSYS_IO_URING_ENTER               = 4426\n\tSYS_IO_URING_REGISTER            = 4427\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go",
    "content": "// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build mips64,linux\n\npackage unix\n\nconst (\n\tSYS_READ                   = 5000\n\tSYS_WRITE                  = 5001\n\tSYS_OPEN                   = 5002\n\tSYS_CLOSE                  = 5003\n\tSYS_STAT                   = 5004\n\tSYS_FSTAT                  = 5005\n\tSYS_LSTAT                  = 5006\n\tSYS_POLL                   = 5007\n\tSYS_LSEEK                  = 5008\n\tSYS_MMAP                   = 5009\n\tSYS_MPROTECT               = 5010\n\tSYS_MUNMAP                 = 5011\n\tSYS_BRK                    = 5012\n\tSYS_RT_SIGACTION           = 5013\n\tSYS_RT_SIGPROCMASK         = 5014\n\tSYS_IOCTL                  = 5015\n\tSYS_PREAD64                = 5016\n\tSYS_PWRITE64               = 5017\n\tSYS_READV                  = 5018\n\tSYS_WRITEV                 = 5019\n\tSYS_ACCESS                 = 5020\n\tSYS_PIPE                   = 5021\n\tSYS__NEWSELECT             = 5022\n\tSYS_SCHED_YIELD            = 5023\n\tSYS_MREMAP                 = 5024\n\tSYS_MSYNC                  = 5025\n\tSYS_MINCORE                = 5026\n\tSYS_MADVISE                = 5027\n\tSYS_SHMGET                 = 5028\n\tSYS_SHMAT                  = 5029\n\tSYS_SHMCTL                 = 5030\n\tSYS_DUP                    = 5031\n\tSYS_DUP2                   = 5032\n\tSYS_PAUSE                  = 5033\n\tSYS_NANOSLEEP              = 5034\n\tSYS_GETITIMER              = 5035\n\tSYS_SETITIMER              = 5036\n\tSYS_ALARM                  = 5037\n\tSYS_GETPID                 = 5038\n\tSYS_SENDFILE               = 5039\n\tSYS_SOCKET                 = 5040\n\tSYS_CONNECT                = 5041\n\tSYS_ACCEPT                 = 5042\n\tSYS_SENDTO                 = 5043\n\tSYS_RECVFROM               = 5044\n\tSYS_SENDMSG                = 5045\n\tSYS_RECVMSG                = 5046\n\tSYS_SHUTDOWN               = 5047\n\tSYS_BIND                   = 5048\n\tSYS_LISTEN                 = 5049\n\tSYS_GETSOCKNAME            = 5050\n\tSYS_GETPEERNAME            = 5051\n\tSYS_SOCKETPAIR             = 5052\n\tSYS_SETSOCKOPT             = 5053\n\tSYS_GETSOCKOPT             = 5054\n\tSYS_CLONE                  = 5055\n\tSYS_FORK                   = 5056\n\tSYS_EXECVE                 = 5057\n\tSYS_EXIT                   = 5058\n\tSYS_WAIT4                  = 5059\n\tSYS_KILL                   = 5060\n\tSYS_UNAME                  = 5061\n\tSYS_SEMGET                 = 5062\n\tSYS_SEMOP                  = 5063\n\tSYS_SEMCTL                 = 5064\n\tSYS_SHMDT                  = 5065\n\tSYS_MSGGET                 = 5066\n\tSYS_MSGSND                 = 5067\n\tSYS_MSGRCV                 = 5068\n\tSYS_MSGCTL                 = 5069\n\tSYS_FCNTL                  = 5070\n\tSYS_FLOCK                  = 5071\n\tSYS_FSYNC                  = 5072\n\tSYS_FDATASYNC              = 5073\n\tSYS_TRUNCATE               = 5074\n\tSYS_FTRUNCATE              = 5075\n\tSYS_GETDENTS               = 5076\n\tSYS_GETCWD                 = 5077\n\tSYS_CHDIR                  = 5078\n\tSYS_FCHDIR                 = 5079\n\tSYS_RENAME                 = 5080\n\tSYS_MKDIR                  = 5081\n\tSYS_RMDIR                  = 5082\n\tSYS_CREAT                  = 5083\n\tSYS_LINK                   = 5084\n\tSYS_UNLINK                 = 5085\n\tSYS_SYMLINK                = 5086\n\tSYS_READLINK               = 5087\n\tSYS_CHMOD                  = 5088\n\tSYS_FCHMOD                 = 5089\n\tSYS_CHOWN                  = 5090\n\tSYS_FCHOWN                 = 5091\n\tSYS_LCHOWN                 = 5092\n\tSYS_UMASK                  = 5093\n\tSYS_GETTIMEOFDAY           = 5094\n\tSYS_GETRLIMIT              = 5095\n\tSYS_GETRUSAGE              = 5096\n\tSYS_SYSINFO                = 5097\n\tSYS_TIMES                  = 5098\n\tSYS_PTRACE                 = 5099\n\tSYS_GETUID                 = 5100\n\tSYS_SYSLOG                 = 5101\n\tSYS_GETGID                 = 5102\n\tSYS_SETUID                 = 5103\n\tSYS_SETGID                 = 5104\n\tSYS_GETEUID                = 5105\n\tSYS_GETEGID                = 5106\n\tSYS_SETPGID                = 5107\n\tSYS_GETPPID                = 5108\n\tSYS_GETPGRP                = 5109\n\tSYS_SETSID                 = 5110\n\tSYS_SETREUID               = 5111\n\tSYS_SETREGID               = 5112\n\tSYS_GETGROUPS              = 5113\n\tSYS_SETGROUPS              = 5114\n\tSYS_SETRESUID              = 5115\n\tSYS_GETRESUID              = 5116\n\tSYS_SETRESGID              = 5117\n\tSYS_GETRESGID              = 5118\n\tSYS_GETPGID                = 5119\n\tSYS_SETFSUID               = 5120\n\tSYS_SETFSGID               = 5121\n\tSYS_GETSID                 = 5122\n\tSYS_CAPGET                 = 5123\n\tSYS_CAPSET                 = 5124\n\tSYS_RT_SIGPENDING          = 5125\n\tSYS_RT_SIGTIMEDWAIT        = 5126\n\tSYS_RT_SIGQUEUEINFO        = 5127\n\tSYS_RT_SIGSUSPEND          = 5128\n\tSYS_SIGALTSTACK            = 5129\n\tSYS_UTIME                  = 5130\n\tSYS_MKNOD                  = 5131\n\tSYS_PERSONALITY            = 5132\n\tSYS_USTAT                  = 5133\n\tSYS_STATFS                 = 5134\n\tSYS_FSTATFS                = 5135\n\tSYS_SYSFS                  = 5136\n\tSYS_GETPRIORITY            = 5137\n\tSYS_SETPRIORITY            = 5138\n\tSYS_SCHED_SETPARAM         = 5139\n\tSYS_SCHED_GETPARAM         = 5140\n\tSYS_SCHED_SETSCHEDULER     = 5141\n\tSYS_SCHED_GETSCHEDULER     = 5142\n\tSYS_SCHED_GET_PRIORITY_MAX = 5143\n\tSYS_SCHED_GET_PRIORITY_MIN = 5144\n\tSYS_SCHED_RR_GET_INTERVAL  = 5145\n\tSYS_MLOCK                  = 5146\n\tSYS_MUNLOCK                = 5147\n\tSYS_MLOCKALL               = 5148\n\tSYS_MUNLOCKALL             = 5149\n\tSYS_VHANGUP                = 5150\n\tSYS_PIVOT_ROOT             = 5151\n\tSYS__SYSCTL                = 5152\n\tSYS_PRCTL                  = 5153\n\tSYS_ADJTIMEX               = 5154\n\tSYS_SETRLIMIT              = 5155\n\tSYS_CHROOT                 = 5156\n\tSYS_SYNC                   = 5157\n\tSYS_ACCT                   = 5158\n\tSYS_SETTIMEOFDAY           = 5159\n\tSYS_MOUNT                  = 5160\n\tSYS_UMOUNT2                = 5161\n\tSYS_SWAPON                 = 5162\n\tSYS_SWAPOFF                = 5163\n\tSYS_REBOOT                 = 5164\n\tSYS_SETHOSTNAME            = 5165\n\tSYS_SETDOMAINNAME          = 5166\n\tSYS_CREATE_MODULE          = 5167\n\tSYS_INIT_MODULE            = 5168\n\tSYS_DELETE_MODULE          = 5169\n\tSYS_GET_KERNEL_SYMS        = 5170\n\tSYS_QUERY_MODULE           = 5171\n\tSYS_QUOTACTL               = 5172\n\tSYS_NFSSERVCTL             = 5173\n\tSYS_GETPMSG                = 5174\n\tSYS_PUTPMSG                = 5175\n\tSYS_AFS_SYSCALL            = 5176\n\tSYS_RESERVED177            = 5177\n\tSYS_GETTID                 = 5178\n\tSYS_READAHEAD              = 5179\n\tSYS_SETXATTR               = 5180\n\tSYS_LSETXATTR              = 5181\n\tSYS_FSETXATTR              = 5182\n\tSYS_GETXATTR               = 5183\n\tSYS_LGETXATTR              = 5184\n\tSYS_FGETXATTR              = 5185\n\tSYS_LISTXATTR              = 5186\n\tSYS_LLISTXATTR             = 5187\n\tSYS_FLISTXATTR             = 5188\n\tSYS_REMOVEXATTR            = 5189\n\tSYS_LREMOVEXATTR           = 5190\n\tSYS_FREMOVEXATTR           = 5191\n\tSYS_TKILL                  = 5192\n\tSYS_RESERVED193            = 5193\n\tSYS_FUTEX                  = 5194\n\tSYS_SCHED_SETAFFINITY      = 5195\n\tSYS_SCHED_GETAFFINITY      = 5196\n\tSYS_CACHEFLUSH             = 5197\n\tSYS_CACHECTL               = 5198\n\tSYS_SYSMIPS                = 5199\n\tSYS_IO_SETUP               = 5200\n\tSYS_IO_DESTROY             = 5201\n\tSYS_IO_GETEVENTS           = 5202\n\tSYS_IO_SUBMIT              = 5203\n\tSYS_IO_CANCEL              = 5204\n\tSYS_EXIT_GROUP             = 5205\n\tSYS_LOOKUP_DCOOKIE         = 5206\n\tSYS_EPOLL_CREATE           = 5207\n\tSYS_EPOLL_CTL              = 5208\n\tSYS_EPOLL_WAIT             = 5209\n\tSYS_REMAP_FILE_PAGES       = 5210\n\tSYS_RT_SIGRETURN           = 5211\n\tSYS_SET_TID_ADDRESS        = 5212\n\tSYS_RESTART_SYSCALL        = 5213\n\tSYS_SEMTIMEDOP             = 5214\n\tSYS_FADVISE64              = 5215\n\tSYS_TIMER_CREATE           = 5216\n\tSYS_TIMER_SETTIME          = 5217\n\tSYS_TIMER_GETTIME          = 5218\n\tSYS_TIMER_GETOVERRUN       = 5219\n\tSYS_TIMER_DELETE           = 5220\n\tSYS_CLOCK_SETTIME          = 5221\n\tSYS_CLOCK_GETTIME          = 5222\n\tSYS_CLOCK_GETRES           = 5223\n\tSYS_CLOCK_NANOSLEEP        = 5224\n\tSYS_TGKILL                 = 5225\n\tSYS_UTIMES                 = 5226\n\tSYS_MBIND                  = 5227\n\tSYS_GET_MEMPOLICY          = 5228\n\tSYS_SET_MEMPOLICY          = 5229\n\tSYS_MQ_OPEN                = 5230\n\tSYS_MQ_UNLINK              = 5231\n\tSYS_MQ_TIMEDSEND           = 5232\n\tSYS_MQ_TIMEDRECEIVE        = 5233\n\tSYS_MQ_NOTIFY              = 5234\n\tSYS_MQ_GETSETATTR          = 5235\n\tSYS_VSERVER                = 5236\n\tSYS_WAITID                 = 5237\n\tSYS_ADD_KEY                = 5239\n\tSYS_REQUEST_KEY            = 5240\n\tSYS_KEYCTL                 = 5241\n\tSYS_SET_THREAD_AREA        = 5242\n\tSYS_INOTIFY_INIT           = 5243\n\tSYS_INOTIFY_ADD_WATCH      = 5244\n\tSYS_INOTIFY_RM_WATCH       = 5245\n\tSYS_MIGRATE_PAGES          = 5246\n\tSYS_OPENAT                 = 5247\n\tSYS_MKDIRAT                = 5248\n\tSYS_MKNODAT                = 5249\n\tSYS_FCHOWNAT               = 5250\n\tSYS_FUTIMESAT              = 5251\n\tSYS_NEWFSTATAT             = 5252\n\tSYS_UNLINKAT               = 5253\n\tSYS_RENAMEAT               = 5254\n\tSYS_LINKAT                 = 5255\n\tSYS_SYMLINKAT              = 5256\n\tSYS_READLINKAT             = 5257\n\tSYS_FCHMODAT               = 5258\n\tSYS_FACCESSAT              = 5259\n\tSYS_PSELECT6               = 5260\n\tSYS_PPOLL                  = 5261\n\tSYS_UNSHARE                = 5262\n\tSYS_SPLICE                 = 5263\n\tSYS_SYNC_FILE_RANGE        = 5264\n\tSYS_TEE                    = 5265\n\tSYS_VMSPLICE               = 5266\n\tSYS_MOVE_PAGES             = 5267\n\tSYS_SET_ROBUST_LIST        = 5268\n\tSYS_GET_ROBUST_LIST        = 5269\n\tSYS_KEXEC_LOAD             = 5270\n\tSYS_GETCPU                 = 5271\n\tSYS_EPOLL_PWAIT            = 5272\n\tSYS_IOPRIO_SET             = 5273\n\tSYS_IOPRIO_GET             = 5274\n\tSYS_UTIMENSAT              = 5275\n\tSYS_SIGNALFD               = 5276\n\tSYS_TIMERFD                = 5277\n\tSYS_EVENTFD                = 5278\n\tSYS_FALLOCATE              = 5279\n\tSYS_TIMERFD_CREATE         = 5280\n\tSYS_TIMERFD_GETTIME        = 5281\n\tSYS_TIMERFD_SETTIME        = 5282\n\tSYS_SIGNALFD4              = 5283\n\tSYS_EVENTFD2               = 5284\n\tSYS_EPOLL_CREATE1          = 5285\n\tSYS_DUP3                   = 5286\n\tSYS_PIPE2                  = 5287\n\tSYS_INOTIFY_INIT1          = 5288\n\tSYS_PREADV                 = 5289\n\tSYS_PWRITEV                = 5290\n\tSYS_RT_TGSIGQUEUEINFO      = 5291\n\tSYS_PERF_EVENT_OPEN        = 5292\n\tSYS_ACCEPT4                = 5293\n\tSYS_RECVMMSG               = 5294\n\tSYS_FANOTIFY_INIT          = 5295\n\tSYS_FANOTIFY_MARK          = 5296\n\tSYS_PRLIMIT64              = 5297\n\tSYS_NAME_TO_HANDLE_AT      = 5298\n\tSYS_OPEN_BY_HANDLE_AT      = 5299\n\tSYS_CLOCK_ADJTIME          = 5300\n\tSYS_SYNCFS                 = 5301\n\tSYS_SENDMMSG               = 5302\n\tSYS_SETNS                  = 5303\n\tSYS_PROCESS_VM_READV       = 5304\n\tSYS_PROCESS_VM_WRITEV      = 5305\n\tSYS_KCMP                   = 5306\n\tSYS_FINIT_MODULE           = 5307\n\tSYS_GETDENTS64             = 5308\n\tSYS_SCHED_SETATTR          = 5309\n\tSYS_SCHED_GETATTR          = 5310\n\tSYS_RENAMEAT2              = 5311\n\tSYS_SECCOMP                = 5312\n\tSYS_GETRANDOM              = 5313\n\tSYS_MEMFD_CREATE           = 5314\n\tSYS_BPF                    = 5315\n\tSYS_EXECVEAT               = 5316\n\tSYS_USERFAULTFD            = 5317\n\tSYS_MEMBARRIER             = 5318\n\tSYS_MLOCK2                 = 5319\n\tSYS_COPY_FILE_RANGE        = 5320\n\tSYS_PREADV2                = 5321\n\tSYS_PWRITEV2               = 5322\n\tSYS_PKEY_MPROTECT          = 5323\n\tSYS_PKEY_ALLOC             = 5324\n\tSYS_PKEY_FREE              = 5325\n\tSYS_STATX                  = 5326\n\tSYS_RSEQ                   = 5327\n\tSYS_IO_PGETEVENTS          = 5328\n\tSYS_PIDFD_SEND_SIGNAL      = 5424\n\tSYS_IO_URING_SETUP         = 5425\n\tSYS_IO_URING_ENTER         = 5426\n\tSYS_IO_URING_REGISTER      = 5427\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go",
    "content": "// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build mips64le,linux\n\npackage unix\n\nconst (\n\tSYS_READ                   = 5000\n\tSYS_WRITE                  = 5001\n\tSYS_OPEN                   = 5002\n\tSYS_CLOSE                  = 5003\n\tSYS_STAT                   = 5004\n\tSYS_FSTAT                  = 5005\n\tSYS_LSTAT                  = 5006\n\tSYS_POLL                   = 5007\n\tSYS_LSEEK                  = 5008\n\tSYS_MMAP                   = 5009\n\tSYS_MPROTECT               = 5010\n\tSYS_MUNMAP                 = 5011\n\tSYS_BRK                    = 5012\n\tSYS_RT_SIGACTION           = 5013\n\tSYS_RT_SIGPROCMASK         = 5014\n\tSYS_IOCTL                  = 5015\n\tSYS_PREAD64                = 5016\n\tSYS_PWRITE64               = 5017\n\tSYS_READV                  = 5018\n\tSYS_WRITEV                 = 5019\n\tSYS_ACCESS                 = 5020\n\tSYS_PIPE                   = 5021\n\tSYS__NEWSELECT             = 5022\n\tSYS_SCHED_YIELD            = 5023\n\tSYS_MREMAP                 = 5024\n\tSYS_MSYNC                  = 5025\n\tSYS_MINCORE                = 5026\n\tSYS_MADVISE                = 5027\n\tSYS_SHMGET                 = 5028\n\tSYS_SHMAT                  = 5029\n\tSYS_SHMCTL                 = 5030\n\tSYS_DUP                    = 5031\n\tSYS_DUP2                   = 5032\n\tSYS_PAUSE                  = 5033\n\tSYS_NANOSLEEP              = 5034\n\tSYS_GETITIMER              = 5035\n\tSYS_SETITIMER              = 5036\n\tSYS_ALARM                  = 5037\n\tSYS_GETPID                 = 5038\n\tSYS_SENDFILE               = 5039\n\tSYS_SOCKET                 = 5040\n\tSYS_CONNECT                = 5041\n\tSYS_ACCEPT                 = 5042\n\tSYS_SENDTO                 = 5043\n\tSYS_RECVFROM               = 5044\n\tSYS_SENDMSG                = 5045\n\tSYS_RECVMSG                = 5046\n\tSYS_SHUTDOWN               = 5047\n\tSYS_BIND                   = 5048\n\tSYS_LISTEN                 = 5049\n\tSYS_GETSOCKNAME            = 5050\n\tSYS_GETPEERNAME            = 5051\n\tSYS_SOCKETPAIR             = 5052\n\tSYS_SETSOCKOPT             = 5053\n\tSYS_GETSOCKOPT             = 5054\n\tSYS_CLONE                  = 5055\n\tSYS_FORK                   = 5056\n\tSYS_EXECVE                 = 5057\n\tSYS_EXIT                   = 5058\n\tSYS_WAIT4                  = 5059\n\tSYS_KILL                   = 5060\n\tSYS_UNAME                  = 5061\n\tSYS_SEMGET                 = 5062\n\tSYS_SEMOP                  = 5063\n\tSYS_SEMCTL                 = 5064\n\tSYS_SHMDT                  = 5065\n\tSYS_MSGGET                 = 5066\n\tSYS_MSGSND                 = 5067\n\tSYS_MSGRCV                 = 5068\n\tSYS_MSGCTL                 = 5069\n\tSYS_FCNTL                  = 5070\n\tSYS_FLOCK                  = 5071\n\tSYS_FSYNC                  = 5072\n\tSYS_FDATASYNC              = 5073\n\tSYS_TRUNCATE               = 5074\n\tSYS_FTRUNCATE              = 5075\n\tSYS_GETDENTS               = 5076\n\tSYS_GETCWD                 = 5077\n\tSYS_CHDIR                  = 5078\n\tSYS_FCHDIR                 = 5079\n\tSYS_RENAME                 = 5080\n\tSYS_MKDIR                  = 5081\n\tSYS_RMDIR                  = 5082\n\tSYS_CREAT                  = 5083\n\tSYS_LINK                   = 5084\n\tSYS_UNLINK                 = 5085\n\tSYS_SYMLINK                = 5086\n\tSYS_READLINK               = 5087\n\tSYS_CHMOD                  = 5088\n\tSYS_FCHMOD                 = 5089\n\tSYS_CHOWN                  = 5090\n\tSYS_FCHOWN                 = 5091\n\tSYS_LCHOWN                 = 5092\n\tSYS_UMASK                  = 5093\n\tSYS_GETTIMEOFDAY           = 5094\n\tSYS_GETRLIMIT              = 5095\n\tSYS_GETRUSAGE              = 5096\n\tSYS_SYSINFO                = 5097\n\tSYS_TIMES                  = 5098\n\tSYS_PTRACE                 = 5099\n\tSYS_GETUID                 = 5100\n\tSYS_SYSLOG                 = 5101\n\tSYS_GETGID                 = 5102\n\tSYS_SETUID                 = 5103\n\tSYS_SETGID                 = 5104\n\tSYS_GETEUID                = 5105\n\tSYS_GETEGID                = 5106\n\tSYS_SETPGID                = 5107\n\tSYS_GETPPID                = 5108\n\tSYS_GETPGRP                = 5109\n\tSYS_SETSID                 = 5110\n\tSYS_SETREUID               = 5111\n\tSYS_SETREGID               = 5112\n\tSYS_GETGROUPS              = 5113\n\tSYS_SETGROUPS              = 5114\n\tSYS_SETRESUID              = 5115\n\tSYS_GETRESUID              = 5116\n\tSYS_SETRESGID              = 5117\n\tSYS_GETRESGID              = 5118\n\tSYS_GETPGID                = 5119\n\tSYS_SETFSUID               = 5120\n\tSYS_SETFSGID               = 5121\n\tSYS_GETSID                 = 5122\n\tSYS_CAPGET                 = 5123\n\tSYS_CAPSET                 = 5124\n\tSYS_RT_SIGPENDING          = 5125\n\tSYS_RT_SIGTIMEDWAIT        = 5126\n\tSYS_RT_SIGQUEUEINFO        = 5127\n\tSYS_RT_SIGSUSPEND          = 5128\n\tSYS_SIGALTSTACK            = 5129\n\tSYS_UTIME                  = 5130\n\tSYS_MKNOD                  = 5131\n\tSYS_PERSONALITY            = 5132\n\tSYS_USTAT                  = 5133\n\tSYS_STATFS                 = 5134\n\tSYS_FSTATFS                = 5135\n\tSYS_SYSFS                  = 5136\n\tSYS_GETPRIORITY            = 5137\n\tSYS_SETPRIORITY            = 5138\n\tSYS_SCHED_SETPARAM         = 5139\n\tSYS_SCHED_GETPARAM         = 5140\n\tSYS_SCHED_SETSCHEDULER     = 5141\n\tSYS_SCHED_GETSCHEDULER     = 5142\n\tSYS_SCHED_GET_PRIORITY_MAX = 5143\n\tSYS_SCHED_GET_PRIORITY_MIN = 5144\n\tSYS_SCHED_RR_GET_INTERVAL  = 5145\n\tSYS_MLOCK                  = 5146\n\tSYS_MUNLOCK                = 5147\n\tSYS_MLOCKALL               = 5148\n\tSYS_MUNLOCKALL             = 5149\n\tSYS_VHANGUP                = 5150\n\tSYS_PIVOT_ROOT             = 5151\n\tSYS__SYSCTL                = 5152\n\tSYS_PRCTL                  = 5153\n\tSYS_ADJTIMEX               = 5154\n\tSYS_SETRLIMIT              = 5155\n\tSYS_CHROOT                 = 5156\n\tSYS_SYNC                   = 5157\n\tSYS_ACCT                   = 5158\n\tSYS_SETTIMEOFDAY           = 5159\n\tSYS_MOUNT                  = 5160\n\tSYS_UMOUNT2                = 5161\n\tSYS_SWAPON                 = 5162\n\tSYS_SWAPOFF                = 5163\n\tSYS_REBOOT                 = 5164\n\tSYS_SETHOSTNAME            = 5165\n\tSYS_SETDOMAINNAME          = 5166\n\tSYS_CREATE_MODULE          = 5167\n\tSYS_INIT_MODULE            = 5168\n\tSYS_DELETE_MODULE          = 5169\n\tSYS_GET_KERNEL_SYMS        = 5170\n\tSYS_QUERY_MODULE           = 5171\n\tSYS_QUOTACTL               = 5172\n\tSYS_NFSSERVCTL             = 5173\n\tSYS_GETPMSG                = 5174\n\tSYS_PUTPMSG                = 5175\n\tSYS_AFS_SYSCALL            = 5176\n\tSYS_RESERVED177            = 5177\n\tSYS_GETTID                 = 5178\n\tSYS_READAHEAD              = 5179\n\tSYS_SETXATTR               = 5180\n\tSYS_LSETXATTR              = 5181\n\tSYS_FSETXATTR              = 5182\n\tSYS_GETXATTR               = 5183\n\tSYS_LGETXATTR              = 5184\n\tSYS_FGETXATTR              = 5185\n\tSYS_LISTXATTR              = 5186\n\tSYS_LLISTXATTR             = 5187\n\tSYS_FLISTXATTR             = 5188\n\tSYS_REMOVEXATTR            = 5189\n\tSYS_LREMOVEXATTR           = 5190\n\tSYS_FREMOVEXATTR           = 5191\n\tSYS_TKILL                  = 5192\n\tSYS_RESERVED193            = 5193\n\tSYS_FUTEX                  = 5194\n\tSYS_SCHED_SETAFFINITY      = 5195\n\tSYS_SCHED_GETAFFINITY      = 5196\n\tSYS_CACHEFLUSH             = 5197\n\tSYS_CACHECTL               = 5198\n\tSYS_SYSMIPS                = 5199\n\tSYS_IO_SETUP               = 5200\n\tSYS_IO_DESTROY             = 5201\n\tSYS_IO_GETEVENTS           = 5202\n\tSYS_IO_SUBMIT              = 5203\n\tSYS_IO_CANCEL              = 5204\n\tSYS_EXIT_GROUP             = 5205\n\tSYS_LOOKUP_DCOOKIE         = 5206\n\tSYS_EPOLL_CREATE           = 5207\n\tSYS_EPOLL_CTL              = 5208\n\tSYS_EPOLL_WAIT             = 5209\n\tSYS_REMAP_FILE_PAGES       = 5210\n\tSYS_RT_SIGRETURN           = 5211\n\tSYS_SET_TID_ADDRESS        = 5212\n\tSYS_RESTART_SYSCALL        = 5213\n\tSYS_SEMTIMEDOP             = 5214\n\tSYS_FADVISE64              = 5215\n\tSYS_TIMER_CREATE           = 5216\n\tSYS_TIMER_SETTIME          = 5217\n\tSYS_TIMER_GETTIME          = 5218\n\tSYS_TIMER_GETOVERRUN       = 5219\n\tSYS_TIMER_DELETE           = 5220\n\tSYS_CLOCK_SETTIME          = 5221\n\tSYS_CLOCK_GETTIME          = 5222\n\tSYS_CLOCK_GETRES           = 5223\n\tSYS_CLOCK_NANOSLEEP        = 5224\n\tSYS_TGKILL                 = 5225\n\tSYS_UTIMES                 = 5226\n\tSYS_MBIND                  = 5227\n\tSYS_GET_MEMPOLICY          = 5228\n\tSYS_SET_MEMPOLICY          = 5229\n\tSYS_MQ_OPEN                = 5230\n\tSYS_MQ_UNLINK              = 5231\n\tSYS_MQ_TIMEDSEND           = 5232\n\tSYS_MQ_TIMEDRECEIVE        = 5233\n\tSYS_MQ_NOTIFY              = 5234\n\tSYS_MQ_GETSETATTR          = 5235\n\tSYS_VSERVER                = 5236\n\tSYS_WAITID                 = 5237\n\tSYS_ADD_KEY                = 5239\n\tSYS_REQUEST_KEY            = 5240\n\tSYS_KEYCTL                 = 5241\n\tSYS_SET_THREAD_AREA        = 5242\n\tSYS_INOTIFY_INIT           = 5243\n\tSYS_INOTIFY_ADD_WATCH      = 5244\n\tSYS_INOTIFY_RM_WATCH       = 5245\n\tSYS_MIGRATE_PAGES          = 5246\n\tSYS_OPENAT                 = 5247\n\tSYS_MKDIRAT                = 5248\n\tSYS_MKNODAT                = 5249\n\tSYS_FCHOWNAT               = 5250\n\tSYS_FUTIMESAT              = 5251\n\tSYS_NEWFSTATAT             = 5252\n\tSYS_UNLINKAT               = 5253\n\tSYS_RENAMEAT               = 5254\n\tSYS_LINKAT                 = 5255\n\tSYS_SYMLINKAT              = 5256\n\tSYS_READLINKAT             = 5257\n\tSYS_FCHMODAT               = 5258\n\tSYS_FACCESSAT              = 5259\n\tSYS_PSELECT6               = 5260\n\tSYS_PPOLL                  = 5261\n\tSYS_UNSHARE                = 5262\n\tSYS_SPLICE                 = 5263\n\tSYS_SYNC_FILE_RANGE        = 5264\n\tSYS_TEE                    = 5265\n\tSYS_VMSPLICE               = 5266\n\tSYS_MOVE_PAGES             = 5267\n\tSYS_SET_ROBUST_LIST        = 5268\n\tSYS_GET_ROBUST_LIST        = 5269\n\tSYS_KEXEC_LOAD             = 5270\n\tSYS_GETCPU                 = 5271\n\tSYS_EPOLL_PWAIT            = 5272\n\tSYS_IOPRIO_SET             = 5273\n\tSYS_IOPRIO_GET             = 5274\n\tSYS_UTIMENSAT              = 5275\n\tSYS_SIGNALFD               = 5276\n\tSYS_TIMERFD                = 5277\n\tSYS_EVENTFD                = 5278\n\tSYS_FALLOCATE              = 5279\n\tSYS_TIMERFD_CREATE         = 5280\n\tSYS_TIMERFD_GETTIME        = 5281\n\tSYS_TIMERFD_SETTIME        = 5282\n\tSYS_SIGNALFD4              = 5283\n\tSYS_EVENTFD2               = 5284\n\tSYS_EPOLL_CREATE1          = 5285\n\tSYS_DUP3                   = 5286\n\tSYS_PIPE2                  = 5287\n\tSYS_INOTIFY_INIT1          = 5288\n\tSYS_PREADV                 = 5289\n\tSYS_PWRITEV                = 5290\n\tSYS_RT_TGSIGQUEUEINFO      = 5291\n\tSYS_PERF_EVENT_OPEN        = 5292\n\tSYS_ACCEPT4                = 5293\n\tSYS_RECVMMSG               = 5294\n\tSYS_FANOTIFY_INIT          = 5295\n\tSYS_FANOTIFY_MARK          = 5296\n\tSYS_PRLIMIT64              = 5297\n\tSYS_NAME_TO_HANDLE_AT      = 5298\n\tSYS_OPEN_BY_HANDLE_AT      = 5299\n\tSYS_CLOCK_ADJTIME          = 5300\n\tSYS_SYNCFS                 = 5301\n\tSYS_SENDMMSG               = 5302\n\tSYS_SETNS                  = 5303\n\tSYS_PROCESS_VM_READV       = 5304\n\tSYS_PROCESS_VM_WRITEV      = 5305\n\tSYS_KCMP                   = 5306\n\tSYS_FINIT_MODULE           = 5307\n\tSYS_GETDENTS64             = 5308\n\tSYS_SCHED_SETATTR          = 5309\n\tSYS_SCHED_GETATTR          = 5310\n\tSYS_RENAMEAT2              = 5311\n\tSYS_SECCOMP                = 5312\n\tSYS_GETRANDOM              = 5313\n\tSYS_MEMFD_CREATE           = 5314\n\tSYS_BPF                    = 5315\n\tSYS_EXECVEAT               = 5316\n\tSYS_USERFAULTFD            = 5317\n\tSYS_MEMBARRIER             = 5318\n\tSYS_MLOCK2                 = 5319\n\tSYS_COPY_FILE_RANGE        = 5320\n\tSYS_PREADV2                = 5321\n\tSYS_PWRITEV2               = 5322\n\tSYS_PKEY_MPROTECT          = 5323\n\tSYS_PKEY_ALLOC             = 5324\n\tSYS_PKEY_FREE              = 5325\n\tSYS_STATX                  = 5326\n\tSYS_RSEQ                   = 5327\n\tSYS_IO_PGETEVENTS          = 5328\n\tSYS_PIDFD_SEND_SIGNAL      = 5424\n\tSYS_IO_URING_SETUP         = 5425\n\tSYS_IO_URING_ENTER         = 5426\n\tSYS_IO_URING_REGISTER      = 5427\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go",
    "content": "// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build mipsle,linux\n\npackage unix\n\nconst (\n\tSYS_SYSCALL                      = 4000\n\tSYS_EXIT                         = 4001\n\tSYS_FORK                         = 4002\n\tSYS_READ                         = 4003\n\tSYS_WRITE                        = 4004\n\tSYS_OPEN                         = 4005\n\tSYS_CLOSE                        = 4006\n\tSYS_WAITPID                      = 4007\n\tSYS_CREAT                        = 4008\n\tSYS_LINK                         = 4009\n\tSYS_UNLINK                       = 4010\n\tSYS_EXECVE                       = 4011\n\tSYS_CHDIR                        = 4012\n\tSYS_TIME                         = 4013\n\tSYS_MKNOD                        = 4014\n\tSYS_CHMOD                        = 4015\n\tSYS_LCHOWN                       = 4016\n\tSYS_BREAK                        = 4017\n\tSYS_UNUSED18                     = 4018\n\tSYS_LSEEK                        = 4019\n\tSYS_GETPID                       = 4020\n\tSYS_MOUNT                        = 4021\n\tSYS_UMOUNT                       = 4022\n\tSYS_SETUID                       = 4023\n\tSYS_GETUID                       = 4024\n\tSYS_STIME                        = 4025\n\tSYS_PTRACE                       = 4026\n\tSYS_ALARM                        = 4027\n\tSYS_UNUSED28                     = 4028\n\tSYS_PAUSE                        = 4029\n\tSYS_UTIME                        = 4030\n\tSYS_STTY                         = 4031\n\tSYS_GTTY                         = 4032\n\tSYS_ACCESS                       = 4033\n\tSYS_NICE                         = 4034\n\tSYS_FTIME                        = 4035\n\tSYS_SYNC                         = 4036\n\tSYS_KILL                         = 4037\n\tSYS_RENAME                       = 4038\n\tSYS_MKDIR                        = 4039\n\tSYS_RMDIR                        = 4040\n\tSYS_DUP                          = 4041\n\tSYS_PIPE                         = 4042\n\tSYS_TIMES                        = 4043\n\tSYS_PROF                         = 4044\n\tSYS_BRK                          = 4045\n\tSYS_SETGID                       = 4046\n\tSYS_GETGID                       = 4047\n\tSYS_SIGNAL                       = 4048\n\tSYS_GETEUID                      = 4049\n\tSYS_GETEGID                      = 4050\n\tSYS_ACCT                         = 4051\n\tSYS_UMOUNT2                      = 4052\n\tSYS_LOCK                         = 4053\n\tSYS_IOCTL                        = 4054\n\tSYS_FCNTL                        = 4055\n\tSYS_MPX                          = 4056\n\tSYS_SETPGID                      = 4057\n\tSYS_ULIMIT                       = 4058\n\tSYS_UNUSED59                     = 4059\n\tSYS_UMASK                        = 4060\n\tSYS_CHROOT                       = 4061\n\tSYS_USTAT                        = 4062\n\tSYS_DUP2                         = 4063\n\tSYS_GETPPID                      = 4064\n\tSYS_GETPGRP                      = 4065\n\tSYS_SETSID                       = 4066\n\tSYS_SIGACTION                    = 4067\n\tSYS_SGETMASK                     = 4068\n\tSYS_SSETMASK                     = 4069\n\tSYS_SETREUID                     = 4070\n\tSYS_SETREGID                     = 4071\n\tSYS_SIGSUSPEND                   = 4072\n\tSYS_SIGPENDING                   = 4073\n\tSYS_SETHOSTNAME                  = 4074\n\tSYS_SETRLIMIT                    = 4075\n\tSYS_GETRLIMIT                    = 4076\n\tSYS_GETRUSAGE                    = 4077\n\tSYS_GETTIMEOFDAY                 = 4078\n\tSYS_SETTIMEOFDAY                 = 4079\n\tSYS_GETGROUPS                    = 4080\n\tSYS_SETGROUPS                    = 4081\n\tSYS_RESERVED82                   = 4082\n\tSYS_SYMLINK                      = 4083\n\tSYS_UNUSED84                     = 4084\n\tSYS_READLINK                     = 4085\n\tSYS_USELIB                       = 4086\n\tSYS_SWAPON                       = 4087\n\tSYS_REBOOT                       = 4088\n\tSYS_READDIR                      = 4089\n\tSYS_MMAP                         = 4090\n\tSYS_MUNMAP                       = 4091\n\tSYS_TRUNCATE                     = 4092\n\tSYS_FTRUNCATE                    = 4093\n\tSYS_FCHMOD                       = 4094\n\tSYS_FCHOWN                       = 4095\n\tSYS_GETPRIORITY                  = 4096\n\tSYS_SETPRIORITY                  = 4097\n\tSYS_PROFIL                       = 4098\n\tSYS_STATFS                       = 4099\n\tSYS_FSTATFS                      = 4100\n\tSYS_IOPERM                       = 4101\n\tSYS_SOCKETCALL                   = 4102\n\tSYS_SYSLOG                       = 4103\n\tSYS_SETITIMER                    = 4104\n\tSYS_GETITIMER                    = 4105\n\tSYS_STAT                         = 4106\n\tSYS_LSTAT                        = 4107\n\tSYS_FSTAT                        = 4108\n\tSYS_UNUSED109                    = 4109\n\tSYS_IOPL                         = 4110\n\tSYS_VHANGUP                      = 4111\n\tSYS_IDLE                         = 4112\n\tSYS_VM86                         = 4113\n\tSYS_WAIT4                        = 4114\n\tSYS_SWAPOFF                      = 4115\n\tSYS_SYSINFO                      = 4116\n\tSYS_IPC                          = 4117\n\tSYS_FSYNC                        = 4118\n\tSYS_SIGRETURN                    = 4119\n\tSYS_CLONE                        = 4120\n\tSYS_SETDOMAINNAME                = 4121\n\tSYS_UNAME                        = 4122\n\tSYS_MODIFY_LDT                   = 4123\n\tSYS_ADJTIMEX                     = 4124\n\tSYS_MPROTECT                     = 4125\n\tSYS_SIGPROCMASK                  = 4126\n\tSYS_CREATE_MODULE                = 4127\n\tSYS_INIT_MODULE                  = 4128\n\tSYS_DELETE_MODULE                = 4129\n\tSYS_GET_KERNEL_SYMS              = 4130\n\tSYS_QUOTACTL                     = 4131\n\tSYS_GETPGID                      = 4132\n\tSYS_FCHDIR                       = 4133\n\tSYS_BDFLUSH                      = 4134\n\tSYS_SYSFS                        = 4135\n\tSYS_PERSONALITY                  = 4136\n\tSYS_AFS_SYSCALL                  = 4137\n\tSYS_SETFSUID                     = 4138\n\tSYS_SETFSGID                     = 4139\n\tSYS__LLSEEK                      = 4140\n\tSYS_GETDENTS                     = 4141\n\tSYS__NEWSELECT                   = 4142\n\tSYS_FLOCK                        = 4143\n\tSYS_MSYNC                        = 4144\n\tSYS_READV                        = 4145\n\tSYS_WRITEV                       = 4146\n\tSYS_CACHEFLUSH                   = 4147\n\tSYS_CACHECTL                     = 4148\n\tSYS_SYSMIPS                      = 4149\n\tSYS_UNUSED150                    = 4150\n\tSYS_GETSID                       = 4151\n\tSYS_FDATASYNC                    = 4152\n\tSYS__SYSCTL                      = 4153\n\tSYS_MLOCK                        = 4154\n\tSYS_MUNLOCK                      = 4155\n\tSYS_MLOCKALL                     = 4156\n\tSYS_MUNLOCKALL                   = 4157\n\tSYS_SCHED_SETPARAM               = 4158\n\tSYS_SCHED_GETPARAM               = 4159\n\tSYS_SCHED_SETSCHEDULER           = 4160\n\tSYS_SCHED_GETSCHEDULER           = 4161\n\tSYS_SCHED_YIELD                  = 4162\n\tSYS_SCHED_GET_PRIORITY_MAX       = 4163\n\tSYS_SCHED_GET_PRIORITY_MIN       = 4164\n\tSYS_SCHED_RR_GET_INTERVAL        = 4165\n\tSYS_NANOSLEEP                    = 4166\n\tSYS_MREMAP                       = 4167\n\tSYS_ACCEPT                       = 4168\n\tSYS_BIND                         = 4169\n\tSYS_CONNECT                      = 4170\n\tSYS_GETPEERNAME                  = 4171\n\tSYS_GETSOCKNAME                  = 4172\n\tSYS_GETSOCKOPT                   = 4173\n\tSYS_LISTEN                       = 4174\n\tSYS_RECV                         = 4175\n\tSYS_RECVFROM                     = 4176\n\tSYS_RECVMSG                      = 4177\n\tSYS_SEND                         = 4178\n\tSYS_SENDMSG                      = 4179\n\tSYS_SENDTO                       = 4180\n\tSYS_SETSOCKOPT                   = 4181\n\tSYS_SHUTDOWN                     = 4182\n\tSYS_SOCKET                       = 4183\n\tSYS_SOCKETPAIR                   = 4184\n\tSYS_SETRESUID                    = 4185\n\tSYS_GETRESUID                    = 4186\n\tSYS_QUERY_MODULE                 = 4187\n\tSYS_POLL                         = 4188\n\tSYS_NFSSERVCTL                   = 4189\n\tSYS_SETRESGID                    = 4190\n\tSYS_GETRESGID                    = 4191\n\tSYS_PRCTL                        = 4192\n\tSYS_RT_SIGRETURN                 = 4193\n\tSYS_RT_SIGACTION                 = 4194\n\tSYS_RT_SIGPROCMASK               = 4195\n\tSYS_RT_SIGPENDING                = 4196\n\tSYS_RT_SIGTIMEDWAIT              = 4197\n\tSYS_RT_SIGQUEUEINFO              = 4198\n\tSYS_RT_SIGSUSPEND                = 4199\n\tSYS_PREAD64                      = 4200\n\tSYS_PWRITE64                     = 4201\n\tSYS_CHOWN                        = 4202\n\tSYS_GETCWD                       = 4203\n\tSYS_CAPGET                       = 4204\n\tSYS_CAPSET                       = 4205\n\tSYS_SIGALTSTACK                  = 4206\n\tSYS_SENDFILE                     = 4207\n\tSYS_GETPMSG                      = 4208\n\tSYS_PUTPMSG                      = 4209\n\tSYS_MMAP2                        = 4210\n\tSYS_TRUNCATE64                   = 4211\n\tSYS_FTRUNCATE64                  = 4212\n\tSYS_STAT64                       = 4213\n\tSYS_LSTAT64                      = 4214\n\tSYS_FSTAT64                      = 4215\n\tSYS_PIVOT_ROOT                   = 4216\n\tSYS_MINCORE                      = 4217\n\tSYS_MADVISE                      = 4218\n\tSYS_GETDENTS64                   = 4219\n\tSYS_FCNTL64                      = 4220\n\tSYS_RESERVED221                  = 4221\n\tSYS_GETTID                       = 4222\n\tSYS_READAHEAD                    = 4223\n\tSYS_SETXATTR                     = 4224\n\tSYS_LSETXATTR                    = 4225\n\tSYS_FSETXATTR                    = 4226\n\tSYS_GETXATTR                     = 4227\n\tSYS_LGETXATTR                    = 4228\n\tSYS_FGETXATTR                    = 4229\n\tSYS_LISTXATTR                    = 4230\n\tSYS_LLISTXATTR                   = 4231\n\tSYS_FLISTXATTR                   = 4232\n\tSYS_REMOVEXATTR                  = 4233\n\tSYS_LREMOVEXATTR                 = 4234\n\tSYS_FREMOVEXATTR                 = 4235\n\tSYS_TKILL                        = 4236\n\tSYS_SENDFILE64                   = 4237\n\tSYS_FUTEX                        = 4238\n\tSYS_SCHED_SETAFFINITY            = 4239\n\tSYS_SCHED_GETAFFINITY            = 4240\n\tSYS_IO_SETUP                     = 4241\n\tSYS_IO_DESTROY                   = 4242\n\tSYS_IO_GETEVENTS                 = 4243\n\tSYS_IO_SUBMIT                    = 4244\n\tSYS_IO_CANCEL                    = 4245\n\tSYS_EXIT_GROUP                   = 4246\n\tSYS_LOOKUP_DCOOKIE               = 4247\n\tSYS_EPOLL_CREATE                 = 4248\n\tSYS_EPOLL_CTL                    = 4249\n\tSYS_EPOLL_WAIT                   = 4250\n\tSYS_REMAP_FILE_PAGES             = 4251\n\tSYS_SET_TID_ADDRESS              = 4252\n\tSYS_RESTART_SYSCALL              = 4253\n\tSYS_FADVISE64                    = 4254\n\tSYS_STATFS64                     = 4255\n\tSYS_FSTATFS64                    = 4256\n\tSYS_TIMER_CREATE                 = 4257\n\tSYS_TIMER_SETTIME                = 4258\n\tSYS_TIMER_GETTIME                = 4259\n\tSYS_TIMER_GETOVERRUN             = 4260\n\tSYS_TIMER_DELETE                 = 4261\n\tSYS_CLOCK_SETTIME                = 4262\n\tSYS_CLOCK_GETTIME                = 4263\n\tSYS_CLOCK_GETRES                 = 4264\n\tSYS_CLOCK_NANOSLEEP              = 4265\n\tSYS_TGKILL                       = 4266\n\tSYS_UTIMES                       = 4267\n\tSYS_MBIND                        = 4268\n\tSYS_GET_MEMPOLICY                = 4269\n\tSYS_SET_MEMPOLICY                = 4270\n\tSYS_MQ_OPEN                      = 4271\n\tSYS_MQ_UNLINK                    = 4272\n\tSYS_MQ_TIMEDSEND                 = 4273\n\tSYS_MQ_TIMEDRECEIVE              = 4274\n\tSYS_MQ_NOTIFY                    = 4275\n\tSYS_MQ_GETSETATTR                = 4276\n\tSYS_VSERVER                      = 4277\n\tSYS_WAITID                       = 4278\n\tSYS_ADD_KEY                      = 4280\n\tSYS_REQUEST_KEY                  = 4281\n\tSYS_KEYCTL                       = 4282\n\tSYS_SET_THREAD_AREA              = 4283\n\tSYS_INOTIFY_INIT                 = 4284\n\tSYS_INOTIFY_ADD_WATCH            = 4285\n\tSYS_INOTIFY_RM_WATCH             = 4286\n\tSYS_MIGRATE_PAGES                = 4287\n\tSYS_OPENAT                       = 4288\n\tSYS_MKDIRAT                      = 4289\n\tSYS_MKNODAT                      = 4290\n\tSYS_FCHOWNAT                     = 4291\n\tSYS_FUTIMESAT                    = 4292\n\tSYS_FSTATAT64                    = 4293\n\tSYS_UNLINKAT                     = 4294\n\tSYS_RENAMEAT                     = 4295\n\tSYS_LINKAT                       = 4296\n\tSYS_SYMLINKAT                    = 4297\n\tSYS_READLINKAT                   = 4298\n\tSYS_FCHMODAT                     = 4299\n\tSYS_FACCESSAT                    = 4300\n\tSYS_PSELECT6                     = 4301\n\tSYS_PPOLL                        = 4302\n\tSYS_UNSHARE                      = 4303\n\tSYS_SPLICE                       = 4304\n\tSYS_SYNC_FILE_RANGE              = 4305\n\tSYS_TEE                          = 4306\n\tSYS_VMSPLICE                     = 4307\n\tSYS_MOVE_PAGES                   = 4308\n\tSYS_SET_ROBUST_LIST              = 4309\n\tSYS_GET_ROBUST_LIST              = 4310\n\tSYS_KEXEC_LOAD                   = 4311\n\tSYS_GETCPU                       = 4312\n\tSYS_EPOLL_PWAIT                  = 4313\n\tSYS_IOPRIO_SET                   = 4314\n\tSYS_IOPRIO_GET                   = 4315\n\tSYS_UTIMENSAT                    = 4316\n\tSYS_SIGNALFD                     = 4317\n\tSYS_TIMERFD                      = 4318\n\tSYS_EVENTFD                      = 4319\n\tSYS_FALLOCATE                    = 4320\n\tSYS_TIMERFD_CREATE               = 4321\n\tSYS_TIMERFD_GETTIME              = 4322\n\tSYS_TIMERFD_SETTIME              = 4323\n\tSYS_SIGNALFD4                    = 4324\n\tSYS_EVENTFD2                     = 4325\n\tSYS_EPOLL_CREATE1                = 4326\n\tSYS_DUP3                         = 4327\n\tSYS_PIPE2                        = 4328\n\tSYS_INOTIFY_INIT1                = 4329\n\tSYS_PREADV                       = 4330\n\tSYS_PWRITEV                      = 4331\n\tSYS_RT_TGSIGQUEUEINFO            = 4332\n\tSYS_PERF_EVENT_OPEN              = 4333\n\tSYS_ACCEPT4                      = 4334\n\tSYS_RECVMMSG                     = 4335\n\tSYS_FANOTIFY_INIT                = 4336\n\tSYS_FANOTIFY_MARK                = 4337\n\tSYS_PRLIMIT64                    = 4338\n\tSYS_NAME_TO_HANDLE_AT            = 4339\n\tSYS_OPEN_BY_HANDLE_AT            = 4340\n\tSYS_CLOCK_ADJTIME                = 4341\n\tSYS_SYNCFS                       = 4342\n\tSYS_SENDMMSG                     = 4343\n\tSYS_SETNS                        = 4344\n\tSYS_PROCESS_VM_READV             = 4345\n\tSYS_PROCESS_VM_WRITEV            = 4346\n\tSYS_KCMP                         = 4347\n\tSYS_FINIT_MODULE                 = 4348\n\tSYS_SCHED_SETATTR                = 4349\n\tSYS_SCHED_GETATTR                = 4350\n\tSYS_RENAMEAT2                    = 4351\n\tSYS_SECCOMP                      = 4352\n\tSYS_GETRANDOM                    = 4353\n\tSYS_MEMFD_CREATE                 = 4354\n\tSYS_BPF                          = 4355\n\tSYS_EXECVEAT                     = 4356\n\tSYS_USERFAULTFD                  = 4357\n\tSYS_MEMBARRIER                   = 4358\n\tSYS_MLOCK2                       = 4359\n\tSYS_COPY_FILE_RANGE              = 4360\n\tSYS_PREADV2                      = 4361\n\tSYS_PWRITEV2                     = 4362\n\tSYS_PKEY_MPROTECT                = 4363\n\tSYS_PKEY_ALLOC                   = 4364\n\tSYS_PKEY_FREE                    = 4365\n\tSYS_STATX                        = 4366\n\tSYS_RSEQ                         = 4367\n\tSYS_IO_PGETEVENTS                = 4368\n\tSYS_SEMGET                       = 4393\n\tSYS_SEMCTL                       = 4394\n\tSYS_SHMGET                       = 4395\n\tSYS_SHMCTL                       = 4396\n\tSYS_SHMAT                        = 4397\n\tSYS_SHMDT                        = 4398\n\tSYS_MSGGET                       = 4399\n\tSYS_MSGSND                       = 4400\n\tSYS_MSGRCV                       = 4401\n\tSYS_MSGCTL                       = 4402\n\tSYS_CLOCK_GETTIME64              = 4403\n\tSYS_CLOCK_SETTIME64              = 4404\n\tSYS_CLOCK_ADJTIME64              = 4405\n\tSYS_CLOCK_GETRES_TIME64          = 4406\n\tSYS_CLOCK_NANOSLEEP_TIME64       = 4407\n\tSYS_TIMER_GETTIME64              = 4408\n\tSYS_TIMER_SETTIME64              = 4409\n\tSYS_TIMERFD_GETTIME64            = 4410\n\tSYS_TIMERFD_SETTIME64            = 4411\n\tSYS_UTIMENSAT_TIME64             = 4412\n\tSYS_PSELECT6_TIME64              = 4413\n\tSYS_PPOLL_TIME64                 = 4414\n\tSYS_IO_PGETEVENTS_TIME64         = 4416\n\tSYS_RECVMMSG_TIME64              = 4417\n\tSYS_MQ_TIMEDSEND_TIME64          = 4418\n\tSYS_MQ_TIMEDRECEIVE_TIME64       = 4419\n\tSYS_SEMTIMEDOP_TIME64            = 4420\n\tSYS_RT_SIGTIMEDWAIT_TIME64       = 4421\n\tSYS_FUTEX_TIME64                 = 4422\n\tSYS_SCHED_RR_GET_INTERVAL_TIME64 = 4423\n\tSYS_PIDFD_SEND_SIGNAL            = 4424\n\tSYS_IO_URING_SETUP               = 4425\n\tSYS_IO_URING_ENTER               = 4426\n\tSYS_IO_URING_REGISTER            = 4427\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go",
    "content": "// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build ppc64,linux\n\npackage unix\n\nconst (\n\tSYS_RESTART_SYSCALL        = 0\n\tSYS_EXIT                   = 1\n\tSYS_FORK                   = 2\n\tSYS_READ                   = 3\n\tSYS_WRITE                  = 4\n\tSYS_OPEN                   = 5\n\tSYS_CLOSE                  = 6\n\tSYS_WAITPID                = 7\n\tSYS_CREAT                  = 8\n\tSYS_LINK                   = 9\n\tSYS_UNLINK                 = 10\n\tSYS_EXECVE                 = 11\n\tSYS_CHDIR                  = 12\n\tSYS_TIME                   = 13\n\tSYS_MKNOD                  = 14\n\tSYS_CHMOD                  = 15\n\tSYS_LCHOWN                 = 16\n\tSYS_BREAK                  = 17\n\tSYS_OLDSTAT                = 18\n\tSYS_LSEEK                  = 19\n\tSYS_GETPID                 = 20\n\tSYS_MOUNT                  = 21\n\tSYS_UMOUNT                 = 22\n\tSYS_SETUID                 = 23\n\tSYS_GETUID                 = 24\n\tSYS_STIME                  = 25\n\tSYS_PTRACE                 = 26\n\tSYS_ALARM                  = 27\n\tSYS_OLDFSTAT               = 28\n\tSYS_PAUSE                  = 29\n\tSYS_UTIME                  = 30\n\tSYS_STTY                   = 31\n\tSYS_GTTY                   = 32\n\tSYS_ACCESS                 = 33\n\tSYS_NICE                   = 34\n\tSYS_FTIME                  = 35\n\tSYS_SYNC                   = 36\n\tSYS_KILL                   = 37\n\tSYS_RENAME                 = 38\n\tSYS_MKDIR                  = 39\n\tSYS_RMDIR                  = 40\n\tSYS_DUP                    = 41\n\tSYS_PIPE                   = 42\n\tSYS_TIMES                  = 43\n\tSYS_PROF                   = 44\n\tSYS_BRK                    = 45\n\tSYS_SETGID                 = 46\n\tSYS_GETGID                 = 47\n\tSYS_SIGNAL                 = 48\n\tSYS_GETEUID                = 49\n\tSYS_GETEGID                = 50\n\tSYS_ACCT                   = 51\n\tSYS_UMOUNT2                = 52\n\tSYS_LOCK                   = 53\n\tSYS_IOCTL                  = 54\n\tSYS_FCNTL                  = 55\n\tSYS_MPX                    = 56\n\tSYS_SETPGID                = 57\n\tSYS_ULIMIT                 = 58\n\tSYS_OLDOLDUNAME            = 59\n\tSYS_UMASK                  = 60\n\tSYS_CHROOT                 = 61\n\tSYS_USTAT                  = 62\n\tSYS_DUP2                   = 63\n\tSYS_GETPPID                = 64\n\tSYS_GETPGRP                = 65\n\tSYS_SETSID                 = 66\n\tSYS_SIGACTION              = 67\n\tSYS_SGETMASK               = 68\n\tSYS_SSETMASK               = 69\n\tSYS_SETREUID               = 70\n\tSYS_SETREGID               = 71\n\tSYS_SIGSUSPEND             = 72\n\tSYS_SIGPENDING             = 73\n\tSYS_SETHOSTNAME            = 74\n\tSYS_SETRLIMIT              = 75\n\tSYS_GETRLIMIT              = 76\n\tSYS_GETRUSAGE              = 77\n\tSYS_GETTIMEOFDAY           = 78\n\tSYS_SETTIMEOFDAY           = 79\n\tSYS_GETGROUPS              = 80\n\tSYS_SETGROUPS              = 81\n\tSYS_SELECT                 = 82\n\tSYS_SYMLINK                = 83\n\tSYS_OLDLSTAT               = 84\n\tSYS_READLINK               = 85\n\tSYS_USELIB                 = 86\n\tSYS_SWAPON                 = 87\n\tSYS_REBOOT                 = 88\n\tSYS_READDIR                = 89\n\tSYS_MMAP                   = 90\n\tSYS_MUNMAP                 = 91\n\tSYS_TRUNCATE               = 92\n\tSYS_FTRUNCATE              = 93\n\tSYS_FCHMOD                 = 94\n\tSYS_FCHOWN                 = 95\n\tSYS_GETPRIORITY            = 96\n\tSYS_SETPRIORITY            = 97\n\tSYS_PROFIL                 = 98\n\tSYS_STATFS                 = 99\n\tSYS_FSTATFS                = 100\n\tSYS_IOPERM                 = 101\n\tSYS_SOCKETCALL             = 102\n\tSYS_SYSLOG                 = 103\n\tSYS_SETITIMER              = 104\n\tSYS_GETITIMER              = 105\n\tSYS_STAT                   = 106\n\tSYS_LSTAT                  = 107\n\tSYS_FSTAT                  = 108\n\tSYS_OLDUNAME               = 109\n\tSYS_IOPL                   = 110\n\tSYS_VHANGUP                = 111\n\tSYS_IDLE                   = 112\n\tSYS_VM86                   = 113\n\tSYS_WAIT4                  = 114\n\tSYS_SWAPOFF                = 115\n\tSYS_SYSINFO                = 116\n\tSYS_IPC                    = 117\n\tSYS_FSYNC                  = 118\n\tSYS_SIGRETURN              = 119\n\tSYS_CLONE                  = 120\n\tSYS_SETDOMAINNAME          = 121\n\tSYS_UNAME                  = 122\n\tSYS_MODIFY_LDT             = 123\n\tSYS_ADJTIMEX               = 124\n\tSYS_MPROTECT               = 125\n\tSYS_SIGPROCMASK            = 126\n\tSYS_CREATE_MODULE          = 127\n\tSYS_INIT_MODULE            = 128\n\tSYS_DELETE_MODULE          = 129\n\tSYS_GET_KERNEL_SYMS        = 130\n\tSYS_QUOTACTL               = 131\n\tSYS_GETPGID                = 132\n\tSYS_FCHDIR                 = 133\n\tSYS_BDFLUSH                = 134\n\tSYS_SYSFS                  = 135\n\tSYS_PERSONALITY            = 136\n\tSYS_AFS_SYSCALL            = 137\n\tSYS_SETFSUID               = 138\n\tSYS_SETFSGID               = 139\n\tSYS__LLSEEK                = 140\n\tSYS_GETDENTS               = 141\n\tSYS__NEWSELECT             = 142\n\tSYS_FLOCK                  = 143\n\tSYS_MSYNC                  = 144\n\tSYS_READV                  = 145\n\tSYS_WRITEV                 = 146\n\tSYS_GETSID                 = 147\n\tSYS_FDATASYNC              = 148\n\tSYS__SYSCTL                = 149\n\tSYS_MLOCK                  = 150\n\tSYS_MUNLOCK                = 151\n\tSYS_MLOCKALL               = 152\n\tSYS_MUNLOCKALL             = 153\n\tSYS_SCHED_SETPARAM         = 154\n\tSYS_SCHED_GETPARAM         = 155\n\tSYS_SCHED_SETSCHEDULER     = 156\n\tSYS_SCHED_GETSCHEDULER     = 157\n\tSYS_SCHED_YIELD            = 158\n\tSYS_SCHED_GET_PRIORITY_MAX = 159\n\tSYS_SCHED_GET_PRIORITY_MIN = 160\n\tSYS_SCHED_RR_GET_INTERVAL  = 161\n\tSYS_NANOSLEEP              = 162\n\tSYS_MREMAP                 = 163\n\tSYS_SETRESUID              = 164\n\tSYS_GETRESUID              = 165\n\tSYS_QUERY_MODULE           = 166\n\tSYS_POLL                   = 167\n\tSYS_NFSSERVCTL             = 168\n\tSYS_SETRESGID              = 169\n\tSYS_GETRESGID              = 170\n\tSYS_PRCTL                  = 171\n\tSYS_RT_SIGRETURN           = 172\n\tSYS_RT_SIGACTION           = 173\n\tSYS_RT_SIGPROCMASK         = 174\n\tSYS_RT_SIGPENDING          = 175\n\tSYS_RT_SIGTIMEDWAIT        = 176\n\tSYS_RT_SIGQUEUEINFO        = 177\n\tSYS_RT_SIGSUSPEND          = 178\n\tSYS_PREAD64                = 179\n\tSYS_PWRITE64               = 180\n\tSYS_CHOWN                  = 181\n\tSYS_GETCWD                 = 182\n\tSYS_CAPGET                 = 183\n\tSYS_CAPSET                 = 184\n\tSYS_SIGALTSTACK            = 185\n\tSYS_SENDFILE               = 186\n\tSYS_GETPMSG                = 187\n\tSYS_PUTPMSG                = 188\n\tSYS_VFORK                  = 189\n\tSYS_UGETRLIMIT             = 190\n\tSYS_READAHEAD              = 191\n\tSYS_PCICONFIG_READ         = 198\n\tSYS_PCICONFIG_WRITE        = 199\n\tSYS_PCICONFIG_IOBASE       = 200\n\tSYS_MULTIPLEXER            = 201\n\tSYS_GETDENTS64             = 202\n\tSYS_PIVOT_ROOT             = 203\n\tSYS_MADVISE                = 205\n\tSYS_MINCORE                = 206\n\tSYS_GETTID                 = 207\n\tSYS_TKILL                  = 208\n\tSYS_SETXATTR               = 209\n\tSYS_LSETXATTR              = 210\n\tSYS_FSETXATTR              = 211\n\tSYS_GETXATTR               = 212\n\tSYS_LGETXATTR              = 213\n\tSYS_FGETXATTR              = 214\n\tSYS_LISTXATTR              = 215\n\tSYS_LLISTXATTR             = 216\n\tSYS_FLISTXATTR             = 217\n\tSYS_REMOVEXATTR            = 218\n\tSYS_LREMOVEXATTR           = 219\n\tSYS_FREMOVEXATTR           = 220\n\tSYS_FUTEX                  = 221\n\tSYS_SCHED_SETAFFINITY      = 222\n\tSYS_SCHED_GETAFFINITY      = 223\n\tSYS_TUXCALL                = 225\n\tSYS_IO_SETUP               = 227\n\tSYS_IO_DESTROY             = 228\n\tSYS_IO_GETEVENTS           = 229\n\tSYS_IO_SUBMIT              = 230\n\tSYS_IO_CANCEL              = 231\n\tSYS_SET_TID_ADDRESS        = 232\n\tSYS_FADVISE64              = 233\n\tSYS_EXIT_GROUP             = 234\n\tSYS_LOOKUP_DCOOKIE         = 235\n\tSYS_EPOLL_CREATE           = 236\n\tSYS_EPOLL_CTL              = 237\n\tSYS_EPOLL_WAIT             = 238\n\tSYS_REMAP_FILE_PAGES       = 239\n\tSYS_TIMER_CREATE           = 240\n\tSYS_TIMER_SETTIME          = 241\n\tSYS_TIMER_GETTIME          = 242\n\tSYS_TIMER_GETOVERRUN       = 243\n\tSYS_TIMER_DELETE           = 244\n\tSYS_CLOCK_SETTIME          = 245\n\tSYS_CLOCK_GETTIME          = 246\n\tSYS_CLOCK_GETRES           = 247\n\tSYS_CLOCK_NANOSLEEP        = 248\n\tSYS_SWAPCONTEXT            = 249\n\tSYS_TGKILL                 = 250\n\tSYS_UTIMES                 = 251\n\tSYS_STATFS64               = 252\n\tSYS_FSTATFS64              = 253\n\tSYS_RTAS                   = 255\n\tSYS_SYS_DEBUG_SETCONTEXT   = 256\n\tSYS_MIGRATE_PAGES          = 258\n\tSYS_MBIND                  = 259\n\tSYS_GET_MEMPOLICY          = 260\n\tSYS_SET_MEMPOLICY          = 261\n\tSYS_MQ_OPEN                = 262\n\tSYS_MQ_UNLINK              = 263\n\tSYS_MQ_TIMEDSEND           = 264\n\tSYS_MQ_TIMEDRECEIVE        = 265\n\tSYS_MQ_NOTIFY              = 266\n\tSYS_MQ_GETSETATTR          = 267\n\tSYS_KEXEC_LOAD             = 268\n\tSYS_ADD_KEY                = 269\n\tSYS_REQUEST_KEY            = 270\n\tSYS_KEYCTL                 = 271\n\tSYS_WAITID                 = 272\n\tSYS_IOPRIO_SET             = 273\n\tSYS_IOPRIO_GET             = 274\n\tSYS_INOTIFY_INIT           = 275\n\tSYS_INOTIFY_ADD_WATCH      = 276\n\tSYS_INOTIFY_RM_WATCH       = 277\n\tSYS_SPU_RUN                = 278\n\tSYS_SPU_CREATE             = 279\n\tSYS_PSELECT6               = 280\n\tSYS_PPOLL                  = 281\n\tSYS_UNSHARE                = 282\n\tSYS_SPLICE                 = 283\n\tSYS_TEE                    = 284\n\tSYS_VMSPLICE               = 285\n\tSYS_OPENAT                 = 286\n\tSYS_MKDIRAT                = 287\n\tSYS_MKNODAT                = 288\n\tSYS_FCHOWNAT               = 289\n\tSYS_FUTIMESAT              = 290\n\tSYS_NEWFSTATAT             = 291\n\tSYS_UNLINKAT               = 292\n\tSYS_RENAMEAT               = 293\n\tSYS_LINKAT                 = 294\n\tSYS_SYMLINKAT              = 295\n\tSYS_READLINKAT             = 296\n\tSYS_FCHMODAT               = 297\n\tSYS_FACCESSAT              = 298\n\tSYS_GET_ROBUST_LIST        = 299\n\tSYS_SET_ROBUST_LIST        = 300\n\tSYS_MOVE_PAGES             = 301\n\tSYS_GETCPU                 = 302\n\tSYS_EPOLL_PWAIT            = 303\n\tSYS_UTIMENSAT              = 304\n\tSYS_SIGNALFD               = 305\n\tSYS_TIMERFD_CREATE         = 306\n\tSYS_EVENTFD                = 307\n\tSYS_SYNC_FILE_RANGE2       = 308\n\tSYS_FALLOCATE              = 309\n\tSYS_SUBPAGE_PROT           = 310\n\tSYS_TIMERFD_SETTIME        = 311\n\tSYS_TIMERFD_GETTIME        = 312\n\tSYS_SIGNALFD4              = 313\n\tSYS_EVENTFD2               = 314\n\tSYS_EPOLL_CREATE1          = 315\n\tSYS_DUP3                   = 316\n\tSYS_PIPE2                  = 317\n\tSYS_INOTIFY_INIT1          = 318\n\tSYS_PERF_EVENT_OPEN        = 319\n\tSYS_PREADV                 = 320\n\tSYS_PWRITEV                = 321\n\tSYS_RT_TGSIGQUEUEINFO      = 322\n\tSYS_FANOTIFY_INIT          = 323\n\tSYS_FANOTIFY_MARK          = 324\n\tSYS_PRLIMIT64              = 325\n\tSYS_SOCKET                 = 326\n\tSYS_BIND                   = 327\n\tSYS_CONNECT                = 328\n\tSYS_LISTEN                 = 329\n\tSYS_ACCEPT                 = 330\n\tSYS_GETSOCKNAME            = 331\n\tSYS_GETPEERNAME            = 332\n\tSYS_SOCKETPAIR             = 333\n\tSYS_SEND                   = 334\n\tSYS_SENDTO                 = 335\n\tSYS_RECV                   = 336\n\tSYS_RECVFROM               = 337\n\tSYS_SHUTDOWN               = 338\n\tSYS_SETSOCKOPT             = 339\n\tSYS_GETSOCKOPT             = 340\n\tSYS_SENDMSG                = 341\n\tSYS_RECVMSG                = 342\n\tSYS_RECVMMSG               = 343\n\tSYS_ACCEPT4                = 344\n\tSYS_NAME_TO_HANDLE_AT      = 345\n\tSYS_OPEN_BY_HANDLE_AT      = 346\n\tSYS_CLOCK_ADJTIME          = 347\n\tSYS_SYNCFS                 = 348\n\tSYS_SENDMMSG               = 349\n\tSYS_SETNS                  = 350\n\tSYS_PROCESS_VM_READV       = 351\n\tSYS_PROCESS_VM_WRITEV      = 352\n\tSYS_FINIT_MODULE           = 353\n\tSYS_KCMP                   = 354\n\tSYS_SCHED_SETATTR          = 355\n\tSYS_SCHED_GETATTR          = 356\n\tSYS_RENAMEAT2              = 357\n\tSYS_SECCOMP                = 358\n\tSYS_GETRANDOM              = 359\n\tSYS_MEMFD_CREATE           = 360\n\tSYS_BPF                    = 361\n\tSYS_EXECVEAT               = 362\n\tSYS_SWITCH_ENDIAN          = 363\n\tSYS_USERFAULTFD            = 364\n\tSYS_MEMBARRIER             = 365\n\tSYS_MLOCK2                 = 378\n\tSYS_COPY_FILE_RANGE        = 379\n\tSYS_PREADV2                = 380\n\tSYS_PWRITEV2               = 381\n\tSYS_KEXEC_FILE_LOAD        = 382\n\tSYS_STATX                  = 383\n\tSYS_PKEY_ALLOC             = 384\n\tSYS_PKEY_FREE              = 385\n\tSYS_PKEY_MPROTECT          = 386\n\tSYS_RSEQ                   = 387\n\tSYS_IO_PGETEVENTS          = 388\n\tSYS_SEMTIMEDOP             = 392\n\tSYS_SEMGET                 = 393\n\tSYS_SEMCTL                 = 394\n\tSYS_SHMGET                 = 395\n\tSYS_SHMCTL                 = 396\n\tSYS_SHMAT                  = 397\n\tSYS_SHMDT                  = 398\n\tSYS_MSGGET                 = 399\n\tSYS_MSGSND                 = 400\n\tSYS_MSGRCV                 = 401\n\tSYS_MSGCTL                 = 402\n\tSYS_PIDFD_SEND_SIGNAL      = 424\n\tSYS_IO_URING_SETUP         = 425\n\tSYS_IO_URING_ENTER         = 426\n\tSYS_IO_URING_REGISTER      = 427\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go",
    "content": "// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build ppc64le,linux\n\npackage unix\n\nconst (\n\tSYS_RESTART_SYSCALL        = 0\n\tSYS_EXIT                   = 1\n\tSYS_FORK                   = 2\n\tSYS_READ                   = 3\n\tSYS_WRITE                  = 4\n\tSYS_OPEN                   = 5\n\tSYS_CLOSE                  = 6\n\tSYS_WAITPID                = 7\n\tSYS_CREAT                  = 8\n\tSYS_LINK                   = 9\n\tSYS_UNLINK                 = 10\n\tSYS_EXECVE                 = 11\n\tSYS_CHDIR                  = 12\n\tSYS_TIME                   = 13\n\tSYS_MKNOD                  = 14\n\tSYS_CHMOD                  = 15\n\tSYS_LCHOWN                 = 16\n\tSYS_BREAK                  = 17\n\tSYS_OLDSTAT                = 18\n\tSYS_LSEEK                  = 19\n\tSYS_GETPID                 = 20\n\tSYS_MOUNT                  = 21\n\tSYS_UMOUNT                 = 22\n\tSYS_SETUID                 = 23\n\tSYS_GETUID                 = 24\n\tSYS_STIME                  = 25\n\tSYS_PTRACE                 = 26\n\tSYS_ALARM                  = 27\n\tSYS_OLDFSTAT               = 28\n\tSYS_PAUSE                  = 29\n\tSYS_UTIME                  = 30\n\tSYS_STTY                   = 31\n\tSYS_GTTY                   = 32\n\tSYS_ACCESS                 = 33\n\tSYS_NICE                   = 34\n\tSYS_FTIME                  = 35\n\tSYS_SYNC                   = 36\n\tSYS_KILL                   = 37\n\tSYS_RENAME                 = 38\n\tSYS_MKDIR                  = 39\n\tSYS_RMDIR                  = 40\n\tSYS_DUP                    = 41\n\tSYS_PIPE                   = 42\n\tSYS_TIMES                  = 43\n\tSYS_PROF                   = 44\n\tSYS_BRK                    = 45\n\tSYS_SETGID                 = 46\n\tSYS_GETGID                 = 47\n\tSYS_SIGNAL                 = 48\n\tSYS_GETEUID                = 49\n\tSYS_GETEGID                = 50\n\tSYS_ACCT                   = 51\n\tSYS_UMOUNT2                = 52\n\tSYS_LOCK                   = 53\n\tSYS_IOCTL                  = 54\n\tSYS_FCNTL                  = 55\n\tSYS_MPX                    = 56\n\tSYS_SETPGID                = 57\n\tSYS_ULIMIT                 = 58\n\tSYS_OLDOLDUNAME            = 59\n\tSYS_UMASK                  = 60\n\tSYS_CHROOT                 = 61\n\tSYS_USTAT                  = 62\n\tSYS_DUP2                   = 63\n\tSYS_GETPPID                = 64\n\tSYS_GETPGRP                = 65\n\tSYS_SETSID                 = 66\n\tSYS_SIGACTION              = 67\n\tSYS_SGETMASK               = 68\n\tSYS_SSETMASK               = 69\n\tSYS_SETREUID               = 70\n\tSYS_SETREGID               = 71\n\tSYS_SIGSUSPEND             = 72\n\tSYS_SIGPENDING             = 73\n\tSYS_SETHOSTNAME            = 74\n\tSYS_SETRLIMIT              = 75\n\tSYS_GETRLIMIT              = 76\n\tSYS_GETRUSAGE              = 77\n\tSYS_GETTIMEOFDAY           = 78\n\tSYS_SETTIMEOFDAY           = 79\n\tSYS_GETGROUPS              = 80\n\tSYS_SETGROUPS              = 81\n\tSYS_SELECT                 = 82\n\tSYS_SYMLINK                = 83\n\tSYS_OLDLSTAT               = 84\n\tSYS_READLINK               = 85\n\tSYS_USELIB                 = 86\n\tSYS_SWAPON                 = 87\n\tSYS_REBOOT                 = 88\n\tSYS_READDIR                = 89\n\tSYS_MMAP                   = 90\n\tSYS_MUNMAP                 = 91\n\tSYS_TRUNCATE               = 92\n\tSYS_FTRUNCATE              = 93\n\tSYS_FCHMOD                 = 94\n\tSYS_FCHOWN                 = 95\n\tSYS_GETPRIORITY            = 96\n\tSYS_SETPRIORITY            = 97\n\tSYS_PROFIL                 = 98\n\tSYS_STATFS                 = 99\n\tSYS_FSTATFS                = 100\n\tSYS_IOPERM                 = 101\n\tSYS_SOCKETCALL             = 102\n\tSYS_SYSLOG                 = 103\n\tSYS_SETITIMER              = 104\n\tSYS_GETITIMER              = 105\n\tSYS_STAT                   = 106\n\tSYS_LSTAT                  = 107\n\tSYS_FSTAT                  = 108\n\tSYS_OLDUNAME               = 109\n\tSYS_IOPL                   = 110\n\tSYS_VHANGUP                = 111\n\tSYS_IDLE                   = 112\n\tSYS_VM86                   = 113\n\tSYS_WAIT4                  = 114\n\tSYS_SWAPOFF                = 115\n\tSYS_SYSINFO                = 116\n\tSYS_IPC                    = 117\n\tSYS_FSYNC                  = 118\n\tSYS_SIGRETURN              = 119\n\tSYS_CLONE                  = 120\n\tSYS_SETDOMAINNAME          = 121\n\tSYS_UNAME                  = 122\n\tSYS_MODIFY_LDT             = 123\n\tSYS_ADJTIMEX               = 124\n\tSYS_MPROTECT               = 125\n\tSYS_SIGPROCMASK            = 126\n\tSYS_CREATE_MODULE          = 127\n\tSYS_INIT_MODULE            = 128\n\tSYS_DELETE_MODULE          = 129\n\tSYS_GET_KERNEL_SYMS        = 130\n\tSYS_QUOTACTL               = 131\n\tSYS_GETPGID                = 132\n\tSYS_FCHDIR                 = 133\n\tSYS_BDFLUSH                = 134\n\tSYS_SYSFS                  = 135\n\tSYS_PERSONALITY            = 136\n\tSYS_AFS_SYSCALL            = 137\n\tSYS_SETFSUID               = 138\n\tSYS_SETFSGID               = 139\n\tSYS__LLSEEK                = 140\n\tSYS_GETDENTS               = 141\n\tSYS__NEWSELECT             = 142\n\tSYS_FLOCK                  = 143\n\tSYS_MSYNC                  = 144\n\tSYS_READV                  = 145\n\tSYS_WRITEV                 = 146\n\tSYS_GETSID                 = 147\n\tSYS_FDATASYNC              = 148\n\tSYS__SYSCTL                = 149\n\tSYS_MLOCK                  = 150\n\tSYS_MUNLOCK                = 151\n\tSYS_MLOCKALL               = 152\n\tSYS_MUNLOCKALL             = 153\n\tSYS_SCHED_SETPARAM         = 154\n\tSYS_SCHED_GETPARAM         = 155\n\tSYS_SCHED_SETSCHEDULER     = 156\n\tSYS_SCHED_GETSCHEDULER     = 157\n\tSYS_SCHED_YIELD            = 158\n\tSYS_SCHED_GET_PRIORITY_MAX = 159\n\tSYS_SCHED_GET_PRIORITY_MIN = 160\n\tSYS_SCHED_RR_GET_INTERVAL  = 161\n\tSYS_NANOSLEEP              = 162\n\tSYS_MREMAP                 = 163\n\tSYS_SETRESUID              = 164\n\tSYS_GETRESUID              = 165\n\tSYS_QUERY_MODULE           = 166\n\tSYS_POLL                   = 167\n\tSYS_NFSSERVCTL             = 168\n\tSYS_SETRESGID              = 169\n\tSYS_GETRESGID              = 170\n\tSYS_PRCTL                  = 171\n\tSYS_RT_SIGRETURN           = 172\n\tSYS_RT_SIGACTION           = 173\n\tSYS_RT_SIGPROCMASK         = 174\n\tSYS_RT_SIGPENDING          = 175\n\tSYS_RT_SIGTIMEDWAIT        = 176\n\tSYS_RT_SIGQUEUEINFO        = 177\n\tSYS_RT_SIGSUSPEND          = 178\n\tSYS_PREAD64                = 179\n\tSYS_PWRITE64               = 180\n\tSYS_CHOWN                  = 181\n\tSYS_GETCWD                 = 182\n\tSYS_CAPGET                 = 183\n\tSYS_CAPSET                 = 184\n\tSYS_SIGALTSTACK            = 185\n\tSYS_SENDFILE               = 186\n\tSYS_GETPMSG                = 187\n\tSYS_PUTPMSG                = 188\n\tSYS_VFORK                  = 189\n\tSYS_UGETRLIMIT             = 190\n\tSYS_READAHEAD              = 191\n\tSYS_PCICONFIG_READ         = 198\n\tSYS_PCICONFIG_WRITE        = 199\n\tSYS_PCICONFIG_IOBASE       = 200\n\tSYS_MULTIPLEXER            = 201\n\tSYS_GETDENTS64             = 202\n\tSYS_PIVOT_ROOT             = 203\n\tSYS_MADVISE                = 205\n\tSYS_MINCORE                = 206\n\tSYS_GETTID                 = 207\n\tSYS_TKILL                  = 208\n\tSYS_SETXATTR               = 209\n\tSYS_LSETXATTR              = 210\n\tSYS_FSETXATTR              = 211\n\tSYS_GETXATTR               = 212\n\tSYS_LGETXATTR              = 213\n\tSYS_FGETXATTR              = 214\n\tSYS_LISTXATTR              = 215\n\tSYS_LLISTXATTR             = 216\n\tSYS_FLISTXATTR             = 217\n\tSYS_REMOVEXATTR            = 218\n\tSYS_LREMOVEXATTR           = 219\n\tSYS_FREMOVEXATTR           = 220\n\tSYS_FUTEX                  = 221\n\tSYS_SCHED_SETAFFINITY      = 222\n\tSYS_SCHED_GETAFFINITY      = 223\n\tSYS_TUXCALL                = 225\n\tSYS_IO_SETUP               = 227\n\tSYS_IO_DESTROY             = 228\n\tSYS_IO_GETEVENTS           = 229\n\tSYS_IO_SUBMIT              = 230\n\tSYS_IO_CANCEL              = 231\n\tSYS_SET_TID_ADDRESS        = 232\n\tSYS_FADVISE64              = 233\n\tSYS_EXIT_GROUP             = 234\n\tSYS_LOOKUP_DCOOKIE         = 235\n\tSYS_EPOLL_CREATE           = 236\n\tSYS_EPOLL_CTL              = 237\n\tSYS_EPOLL_WAIT             = 238\n\tSYS_REMAP_FILE_PAGES       = 239\n\tSYS_TIMER_CREATE           = 240\n\tSYS_TIMER_SETTIME          = 241\n\tSYS_TIMER_GETTIME          = 242\n\tSYS_TIMER_GETOVERRUN       = 243\n\tSYS_TIMER_DELETE           = 244\n\tSYS_CLOCK_SETTIME          = 245\n\tSYS_CLOCK_GETTIME          = 246\n\tSYS_CLOCK_GETRES           = 247\n\tSYS_CLOCK_NANOSLEEP        = 248\n\tSYS_SWAPCONTEXT            = 249\n\tSYS_TGKILL                 = 250\n\tSYS_UTIMES                 = 251\n\tSYS_STATFS64               = 252\n\tSYS_FSTATFS64              = 253\n\tSYS_RTAS                   = 255\n\tSYS_SYS_DEBUG_SETCONTEXT   = 256\n\tSYS_MIGRATE_PAGES          = 258\n\tSYS_MBIND                  = 259\n\tSYS_GET_MEMPOLICY          = 260\n\tSYS_SET_MEMPOLICY          = 261\n\tSYS_MQ_OPEN                = 262\n\tSYS_MQ_UNLINK              = 263\n\tSYS_MQ_TIMEDSEND           = 264\n\tSYS_MQ_TIMEDRECEIVE        = 265\n\tSYS_MQ_NOTIFY              = 266\n\tSYS_MQ_GETSETATTR          = 267\n\tSYS_KEXEC_LOAD             = 268\n\tSYS_ADD_KEY                = 269\n\tSYS_REQUEST_KEY            = 270\n\tSYS_KEYCTL                 = 271\n\tSYS_WAITID                 = 272\n\tSYS_IOPRIO_SET             = 273\n\tSYS_IOPRIO_GET             = 274\n\tSYS_INOTIFY_INIT           = 275\n\tSYS_INOTIFY_ADD_WATCH      = 276\n\tSYS_INOTIFY_RM_WATCH       = 277\n\tSYS_SPU_RUN                = 278\n\tSYS_SPU_CREATE             = 279\n\tSYS_PSELECT6               = 280\n\tSYS_PPOLL                  = 281\n\tSYS_UNSHARE                = 282\n\tSYS_SPLICE                 = 283\n\tSYS_TEE                    = 284\n\tSYS_VMSPLICE               = 285\n\tSYS_OPENAT                 = 286\n\tSYS_MKDIRAT                = 287\n\tSYS_MKNODAT                = 288\n\tSYS_FCHOWNAT               = 289\n\tSYS_FUTIMESAT              = 290\n\tSYS_NEWFSTATAT             = 291\n\tSYS_UNLINKAT               = 292\n\tSYS_RENAMEAT               = 293\n\tSYS_LINKAT                 = 294\n\tSYS_SYMLINKAT              = 295\n\tSYS_READLINKAT             = 296\n\tSYS_FCHMODAT               = 297\n\tSYS_FACCESSAT              = 298\n\tSYS_GET_ROBUST_LIST        = 299\n\tSYS_SET_ROBUST_LIST        = 300\n\tSYS_MOVE_PAGES             = 301\n\tSYS_GETCPU                 = 302\n\tSYS_EPOLL_PWAIT            = 303\n\tSYS_UTIMENSAT              = 304\n\tSYS_SIGNALFD               = 305\n\tSYS_TIMERFD_CREATE         = 306\n\tSYS_EVENTFD                = 307\n\tSYS_SYNC_FILE_RANGE2       = 308\n\tSYS_FALLOCATE              = 309\n\tSYS_SUBPAGE_PROT           = 310\n\tSYS_TIMERFD_SETTIME        = 311\n\tSYS_TIMERFD_GETTIME        = 312\n\tSYS_SIGNALFD4              = 313\n\tSYS_EVENTFD2               = 314\n\tSYS_EPOLL_CREATE1          = 315\n\tSYS_DUP3                   = 316\n\tSYS_PIPE2                  = 317\n\tSYS_INOTIFY_INIT1          = 318\n\tSYS_PERF_EVENT_OPEN        = 319\n\tSYS_PREADV                 = 320\n\tSYS_PWRITEV                = 321\n\tSYS_RT_TGSIGQUEUEINFO      = 322\n\tSYS_FANOTIFY_INIT          = 323\n\tSYS_FANOTIFY_MARK          = 324\n\tSYS_PRLIMIT64              = 325\n\tSYS_SOCKET                 = 326\n\tSYS_BIND                   = 327\n\tSYS_CONNECT                = 328\n\tSYS_LISTEN                 = 329\n\tSYS_ACCEPT                 = 330\n\tSYS_GETSOCKNAME            = 331\n\tSYS_GETPEERNAME            = 332\n\tSYS_SOCKETPAIR             = 333\n\tSYS_SEND                   = 334\n\tSYS_SENDTO                 = 335\n\tSYS_RECV                   = 336\n\tSYS_RECVFROM               = 337\n\tSYS_SHUTDOWN               = 338\n\tSYS_SETSOCKOPT             = 339\n\tSYS_GETSOCKOPT             = 340\n\tSYS_SENDMSG                = 341\n\tSYS_RECVMSG                = 342\n\tSYS_RECVMMSG               = 343\n\tSYS_ACCEPT4                = 344\n\tSYS_NAME_TO_HANDLE_AT      = 345\n\tSYS_OPEN_BY_HANDLE_AT      = 346\n\tSYS_CLOCK_ADJTIME          = 347\n\tSYS_SYNCFS                 = 348\n\tSYS_SENDMMSG               = 349\n\tSYS_SETNS                  = 350\n\tSYS_PROCESS_VM_READV       = 351\n\tSYS_PROCESS_VM_WRITEV      = 352\n\tSYS_FINIT_MODULE           = 353\n\tSYS_KCMP                   = 354\n\tSYS_SCHED_SETATTR          = 355\n\tSYS_SCHED_GETATTR          = 356\n\tSYS_RENAMEAT2              = 357\n\tSYS_SECCOMP                = 358\n\tSYS_GETRANDOM              = 359\n\tSYS_MEMFD_CREATE           = 360\n\tSYS_BPF                    = 361\n\tSYS_EXECVEAT               = 362\n\tSYS_SWITCH_ENDIAN          = 363\n\tSYS_USERFAULTFD            = 364\n\tSYS_MEMBARRIER             = 365\n\tSYS_MLOCK2                 = 378\n\tSYS_COPY_FILE_RANGE        = 379\n\tSYS_PREADV2                = 380\n\tSYS_PWRITEV2               = 381\n\tSYS_KEXEC_FILE_LOAD        = 382\n\tSYS_STATX                  = 383\n\tSYS_PKEY_ALLOC             = 384\n\tSYS_PKEY_FREE              = 385\n\tSYS_PKEY_MPROTECT          = 386\n\tSYS_RSEQ                   = 387\n\tSYS_IO_PGETEVENTS          = 388\n\tSYS_SEMTIMEDOP             = 392\n\tSYS_SEMGET                 = 393\n\tSYS_SEMCTL                 = 394\n\tSYS_SHMGET                 = 395\n\tSYS_SHMCTL                 = 396\n\tSYS_SHMAT                  = 397\n\tSYS_SHMDT                  = 398\n\tSYS_MSGGET                 = 399\n\tSYS_MSGSND                 = 400\n\tSYS_MSGRCV                 = 401\n\tSYS_MSGCTL                 = 402\n\tSYS_PIDFD_SEND_SIGNAL      = 424\n\tSYS_IO_URING_SETUP         = 425\n\tSYS_IO_URING_ENTER         = 426\n\tSYS_IO_URING_REGISTER      = 427\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go",
    "content": "// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build riscv64,linux\n\npackage unix\n\nconst (\n\tSYS_IO_SETUP               = 0\n\tSYS_IO_DESTROY             = 1\n\tSYS_IO_SUBMIT              = 2\n\tSYS_IO_CANCEL              = 3\n\tSYS_IO_GETEVENTS           = 4\n\tSYS_SETXATTR               = 5\n\tSYS_LSETXATTR              = 6\n\tSYS_FSETXATTR              = 7\n\tSYS_GETXATTR               = 8\n\tSYS_LGETXATTR              = 9\n\tSYS_FGETXATTR              = 10\n\tSYS_LISTXATTR              = 11\n\tSYS_LLISTXATTR             = 12\n\tSYS_FLISTXATTR             = 13\n\tSYS_REMOVEXATTR            = 14\n\tSYS_LREMOVEXATTR           = 15\n\tSYS_FREMOVEXATTR           = 16\n\tSYS_GETCWD                 = 17\n\tSYS_LOOKUP_DCOOKIE         = 18\n\tSYS_EVENTFD2               = 19\n\tSYS_EPOLL_CREATE1          = 20\n\tSYS_EPOLL_CTL              = 21\n\tSYS_EPOLL_PWAIT            = 22\n\tSYS_DUP                    = 23\n\tSYS_DUP3                   = 24\n\tSYS_FCNTL                  = 25\n\tSYS_INOTIFY_INIT1          = 26\n\tSYS_INOTIFY_ADD_WATCH      = 27\n\tSYS_INOTIFY_RM_WATCH       = 28\n\tSYS_IOCTL                  = 29\n\tSYS_IOPRIO_SET             = 30\n\tSYS_IOPRIO_GET             = 31\n\tSYS_FLOCK                  = 32\n\tSYS_MKNODAT                = 33\n\tSYS_MKDIRAT                = 34\n\tSYS_UNLINKAT               = 35\n\tSYS_SYMLINKAT              = 36\n\tSYS_LINKAT                 = 37\n\tSYS_UMOUNT2                = 39\n\tSYS_MOUNT                  = 40\n\tSYS_PIVOT_ROOT             = 41\n\tSYS_NFSSERVCTL             = 42\n\tSYS_STATFS                 = 43\n\tSYS_FSTATFS                = 44\n\tSYS_TRUNCATE               = 45\n\tSYS_FTRUNCATE              = 46\n\tSYS_FALLOCATE              = 47\n\tSYS_FACCESSAT              = 48\n\tSYS_CHDIR                  = 49\n\tSYS_FCHDIR                 = 50\n\tSYS_CHROOT                 = 51\n\tSYS_FCHMOD                 = 52\n\tSYS_FCHMODAT               = 53\n\tSYS_FCHOWNAT               = 54\n\tSYS_FCHOWN                 = 55\n\tSYS_OPENAT                 = 56\n\tSYS_CLOSE                  = 57\n\tSYS_VHANGUP                = 58\n\tSYS_PIPE2                  = 59\n\tSYS_QUOTACTL               = 60\n\tSYS_GETDENTS64             = 61\n\tSYS_LSEEK                  = 62\n\tSYS_READ                   = 63\n\tSYS_WRITE                  = 64\n\tSYS_READV                  = 65\n\tSYS_WRITEV                 = 66\n\tSYS_PREAD64                = 67\n\tSYS_PWRITE64               = 68\n\tSYS_PREADV                 = 69\n\tSYS_PWRITEV                = 70\n\tSYS_SENDFILE               = 71\n\tSYS_PSELECT6               = 72\n\tSYS_PPOLL                  = 73\n\tSYS_SIGNALFD4              = 74\n\tSYS_VMSPLICE               = 75\n\tSYS_SPLICE                 = 76\n\tSYS_TEE                    = 77\n\tSYS_READLINKAT             = 78\n\tSYS_FSTATAT                = 79\n\tSYS_FSTAT                  = 80\n\tSYS_SYNC                   = 81\n\tSYS_FSYNC                  = 82\n\tSYS_FDATASYNC              = 83\n\tSYS_SYNC_FILE_RANGE        = 84\n\tSYS_TIMERFD_CREATE         = 85\n\tSYS_TIMERFD_SETTIME        = 86\n\tSYS_TIMERFD_GETTIME        = 87\n\tSYS_UTIMENSAT              = 88\n\tSYS_ACCT                   = 89\n\tSYS_CAPGET                 = 90\n\tSYS_CAPSET                 = 91\n\tSYS_PERSONALITY            = 92\n\tSYS_EXIT                   = 93\n\tSYS_EXIT_GROUP             = 94\n\tSYS_WAITID                 = 95\n\tSYS_SET_TID_ADDRESS        = 96\n\tSYS_UNSHARE                = 97\n\tSYS_FUTEX                  = 98\n\tSYS_SET_ROBUST_LIST        = 99\n\tSYS_GET_ROBUST_LIST        = 100\n\tSYS_NANOSLEEP              = 101\n\tSYS_GETITIMER              = 102\n\tSYS_SETITIMER              = 103\n\tSYS_KEXEC_LOAD             = 104\n\tSYS_INIT_MODULE            = 105\n\tSYS_DELETE_MODULE          = 106\n\tSYS_TIMER_CREATE           = 107\n\tSYS_TIMER_GETTIME          = 108\n\tSYS_TIMER_GETOVERRUN       = 109\n\tSYS_TIMER_SETTIME          = 110\n\tSYS_TIMER_DELETE           = 111\n\tSYS_CLOCK_SETTIME          = 112\n\tSYS_CLOCK_GETTIME          = 113\n\tSYS_CLOCK_GETRES           = 114\n\tSYS_CLOCK_NANOSLEEP        = 115\n\tSYS_SYSLOG                 = 116\n\tSYS_PTRACE                 = 117\n\tSYS_SCHED_SETPARAM         = 118\n\tSYS_SCHED_SETSCHEDULER     = 119\n\tSYS_SCHED_GETSCHEDULER     = 120\n\tSYS_SCHED_GETPARAM         = 121\n\tSYS_SCHED_SETAFFINITY      = 122\n\tSYS_SCHED_GETAFFINITY      = 123\n\tSYS_SCHED_YIELD            = 124\n\tSYS_SCHED_GET_PRIORITY_MAX = 125\n\tSYS_SCHED_GET_PRIORITY_MIN = 126\n\tSYS_SCHED_RR_GET_INTERVAL  = 127\n\tSYS_RESTART_SYSCALL        = 128\n\tSYS_KILL                   = 129\n\tSYS_TKILL                  = 130\n\tSYS_TGKILL                 = 131\n\tSYS_SIGALTSTACK            = 132\n\tSYS_RT_SIGSUSPEND          = 133\n\tSYS_RT_SIGACTION           = 134\n\tSYS_RT_SIGPROCMASK         = 135\n\tSYS_RT_SIGPENDING          = 136\n\tSYS_RT_SIGTIMEDWAIT        = 137\n\tSYS_RT_SIGQUEUEINFO        = 138\n\tSYS_RT_SIGRETURN           = 139\n\tSYS_SETPRIORITY            = 140\n\tSYS_GETPRIORITY            = 141\n\tSYS_REBOOT                 = 142\n\tSYS_SETREGID               = 143\n\tSYS_SETGID                 = 144\n\tSYS_SETREUID               = 145\n\tSYS_SETUID                 = 146\n\tSYS_SETRESUID              = 147\n\tSYS_GETRESUID              = 148\n\tSYS_SETRESGID              = 149\n\tSYS_GETRESGID              = 150\n\tSYS_SETFSUID               = 151\n\tSYS_SETFSGID               = 152\n\tSYS_TIMES                  = 153\n\tSYS_SETPGID                = 154\n\tSYS_GETPGID                = 155\n\tSYS_GETSID                 = 156\n\tSYS_SETSID                 = 157\n\tSYS_GETGROUPS              = 158\n\tSYS_SETGROUPS              = 159\n\tSYS_UNAME                  = 160\n\tSYS_SETHOSTNAME            = 161\n\tSYS_SETDOMAINNAME          = 162\n\tSYS_GETRLIMIT              = 163\n\tSYS_SETRLIMIT              = 164\n\tSYS_GETRUSAGE              = 165\n\tSYS_UMASK                  = 166\n\tSYS_PRCTL                  = 167\n\tSYS_GETCPU                 = 168\n\tSYS_GETTIMEOFDAY           = 169\n\tSYS_SETTIMEOFDAY           = 170\n\tSYS_ADJTIMEX               = 171\n\tSYS_GETPID                 = 172\n\tSYS_GETPPID                = 173\n\tSYS_GETUID                 = 174\n\tSYS_GETEUID                = 175\n\tSYS_GETGID                 = 176\n\tSYS_GETEGID                = 177\n\tSYS_GETTID                 = 178\n\tSYS_SYSINFO                = 179\n\tSYS_MQ_OPEN                = 180\n\tSYS_MQ_UNLINK              = 181\n\tSYS_MQ_TIMEDSEND           = 182\n\tSYS_MQ_TIMEDRECEIVE        = 183\n\tSYS_MQ_NOTIFY              = 184\n\tSYS_MQ_GETSETATTR          = 185\n\tSYS_MSGGET                 = 186\n\tSYS_MSGCTL                 = 187\n\tSYS_MSGRCV                 = 188\n\tSYS_MSGSND                 = 189\n\tSYS_SEMGET                 = 190\n\tSYS_SEMCTL                 = 191\n\tSYS_SEMTIMEDOP             = 192\n\tSYS_SEMOP                  = 193\n\tSYS_SHMGET                 = 194\n\tSYS_SHMCTL                 = 195\n\tSYS_SHMAT                  = 196\n\tSYS_SHMDT                  = 197\n\tSYS_SOCKET                 = 198\n\tSYS_SOCKETPAIR             = 199\n\tSYS_BIND                   = 200\n\tSYS_LISTEN                 = 201\n\tSYS_ACCEPT                 = 202\n\tSYS_CONNECT                = 203\n\tSYS_GETSOCKNAME            = 204\n\tSYS_GETPEERNAME            = 205\n\tSYS_SENDTO                 = 206\n\tSYS_RECVFROM               = 207\n\tSYS_SETSOCKOPT             = 208\n\tSYS_GETSOCKOPT             = 209\n\tSYS_SHUTDOWN               = 210\n\tSYS_SENDMSG                = 211\n\tSYS_RECVMSG                = 212\n\tSYS_READAHEAD              = 213\n\tSYS_BRK                    = 214\n\tSYS_MUNMAP                 = 215\n\tSYS_MREMAP                 = 216\n\tSYS_ADD_KEY                = 217\n\tSYS_REQUEST_KEY            = 218\n\tSYS_KEYCTL                 = 219\n\tSYS_CLONE                  = 220\n\tSYS_EXECVE                 = 221\n\tSYS_MMAP                   = 222\n\tSYS_FADVISE64              = 223\n\tSYS_SWAPON                 = 224\n\tSYS_SWAPOFF                = 225\n\tSYS_MPROTECT               = 226\n\tSYS_MSYNC                  = 227\n\tSYS_MLOCK                  = 228\n\tSYS_MUNLOCK                = 229\n\tSYS_MLOCKALL               = 230\n\tSYS_MUNLOCKALL             = 231\n\tSYS_MINCORE                = 232\n\tSYS_MADVISE                = 233\n\tSYS_REMAP_FILE_PAGES       = 234\n\tSYS_MBIND                  = 235\n\tSYS_GET_MEMPOLICY          = 236\n\tSYS_SET_MEMPOLICY          = 237\n\tSYS_MIGRATE_PAGES          = 238\n\tSYS_MOVE_PAGES             = 239\n\tSYS_RT_TGSIGQUEUEINFO      = 240\n\tSYS_PERF_EVENT_OPEN        = 241\n\tSYS_ACCEPT4                = 242\n\tSYS_RECVMMSG               = 243\n\tSYS_ARCH_SPECIFIC_SYSCALL  = 244\n\tSYS_WAIT4                  = 260\n\tSYS_PRLIMIT64              = 261\n\tSYS_FANOTIFY_INIT          = 262\n\tSYS_FANOTIFY_MARK          = 263\n\tSYS_NAME_TO_HANDLE_AT      = 264\n\tSYS_OPEN_BY_HANDLE_AT      = 265\n\tSYS_CLOCK_ADJTIME          = 266\n\tSYS_SYNCFS                 = 267\n\tSYS_SETNS                  = 268\n\tSYS_SENDMMSG               = 269\n\tSYS_PROCESS_VM_READV       = 270\n\tSYS_PROCESS_VM_WRITEV      = 271\n\tSYS_KCMP                   = 272\n\tSYS_FINIT_MODULE           = 273\n\tSYS_SCHED_SETATTR          = 274\n\tSYS_SCHED_GETATTR          = 275\n\tSYS_RENAMEAT2              = 276\n\tSYS_SECCOMP                = 277\n\tSYS_GETRANDOM              = 278\n\tSYS_MEMFD_CREATE           = 279\n\tSYS_BPF                    = 280\n\tSYS_EXECVEAT               = 281\n\tSYS_USERFAULTFD            = 282\n\tSYS_MEMBARRIER             = 283\n\tSYS_MLOCK2                 = 284\n\tSYS_COPY_FILE_RANGE        = 285\n\tSYS_PREADV2                = 286\n\tSYS_PWRITEV2               = 287\n\tSYS_PKEY_MPROTECT          = 288\n\tSYS_PKEY_ALLOC             = 289\n\tSYS_PKEY_FREE              = 290\n\tSYS_STATX                  = 291\n\tSYS_IO_PGETEVENTS          = 292\n\tSYS_RSEQ                   = 293\n\tSYS_KEXEC_FILE_LOAD        = 294\n\tSYS_PIDFD_SEND_SIGNAL      = 424\n\tSYS_IO_URING_SETUP         = 425\n\tSYS_IO_URING_ENTER         = 426\n\tSYS_IO_URING_REGISTER      = 427\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go",
    "content": "// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include -fsigned-char /tmp/include/asm/unistd.h\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build s390x,linux\n\npackage unix\n\nconst (\n\tSYS_EXIT                   = 1\n\tSYS_FORK                   = 2\n\tSYS_READ                   = 3\n\tSYS_WRITE                  = 4\n\tSYS_OPEN                   = 5\n\tSYS_CLOSE                  = 6\n\tSYS_RESTART_SYSCALL        = 7\n\tSYS_CREAT                  = 8\n\tSYS_LINK                   = 9\n\tSYS_UNLINK                 = 10\n\tSYS_EXECVE                 = 11\n\tSYS_CHDIR                  = 12\n\tSYS_MKNOD                  = 14\n\tSYS_CHMOD                  = 15\n\tSYS_LSEEK                  = 19\n\tSYS_GETPID                 = 20\n\tSYS_MOUNT                  = 21\n\tSYS_UMOUNT                 = 22\n\tSYS_PTRACE                 = 26\n\tSYS_ALARM                  = 27\n\tSYS_PAUSE                  = 29\n\tSYS_UTIME                  = 30\n\tSYS_ACCESS                 = 33\n\tSYS_NICE                   = 34\n\tSYS_SYNC                   = 36\n\tSYS_KILL                   = 37\n\tSYS_RENAME                 = 38\n\tSYS_MKDIR                  = 39\n\tSYS_RMDIR                  = 40\n\tSYS_DUP                    = 41\n\tSYS_PIPE                   = 42\n\tSYS_TIMES                  = 43\n\tSYS_BRK                    = 45\n\tSYS_SIGNAL                 = 48\n\tSYS_ACCT                   = 51\n\tSYS_UMOUNT2                = 52\n\tSYS_IOCTL                  = 54\n\tSYS_FCNTL                  = 55\n\tSYS_SETPGID                = 57\n\tSYS_UMASK                  = 60\n\tSYS_CHROOT                 = 61\n\tSYS_USTAT                  = 62\n\tSYS_DUP2                   = 63\n\tSYS_GETPPID                = 64\n\tSYS_GETPGRP                = 65\n\tSYS_SETSID                 = 66\n\tSYS_SIGACTION              = 67\n\tSYS_SIGSUSPEND             = 72\n\tSYS_SIGPENDING             = 73\n\tSYS_SETHOSTNAME            = 74\n\tSYS_SETRLIMIT              = 75\n\tSYS_GETRUSAGE              = 77\n\tSYS_GETTIMEOFDAY           = 78\n\tSYS_SETTIMEOFDAY           = 79\n\tSYS_SYMLINK                = 83\n\tSYS_READLINK               = 85\n\tSYS_USELIB                 = 86\n\tSYS_SWAPON                 = 87\n\tSYS_REBOOT                 = 88\n\tSYS_READDIR                = 89\n\tSYS_MMAP                   = 90\n\tSYS_MUNMAP                 = 91\n\tSYS_TRUNCATE               = 92\n\tSYS_FTRUNCATE              = 93\n\tSYS_FCHMOD                 = 94\n\tSYS_GETPRIORITY            = 96\n\tSYS_SETPRIORITY            = 97\n\tSYS_STATFS                 = 99\n\tSYS_FSTATFS                = 100\n\tSYS_SOCKETCALL             = 102\n\tSYS_SYSLOG                 = 103\n\tSYS_SETITIMER              = 104\n\tSYS_GETITIMER              = 105\n\tSYS_STAT                   = 106\n\tSYS_LSTAT                  = 107\n\tSYS_FSTAT                  = 108\n\tSYS_LOOKUP_DCOOKIE         = 110\n\tSYS_VHANGUP                = 111\n\tSYS_IDLE                   = 112\n\tSYS_WAIT4                  = 114\n\tSYS_SWAPOFF                = 115\n\tSYS_SYSINFO                = 116\n\tSYS_IPC                    = 117\n\tSYS_FSYNC                  = 118\n\tSYS_SIGRETURN              = 119\n\tSYS_CLONE                  = 120\n\tSYS_SETDOMAINNAME          = 121\n\tSYS_UNAME                  = 122\n\tSYS_ADJTIMEX               = 124\n\tSYS_MPROTECT               = 125\n\tSYS_SIGPROCMASK            = 126\n\tSYS_CREATE_MODULE          = 127\n\tSYS_INIT_MODULE            = 128\n\tSYS_DELETE_MODULE          = 129\n\tSYS_GET_KERNEL_SYMS        = 130\n\tSYS_QUOTACTL               = 131\n\tSYS_GETPGID                = 132\n\tSYS_FCHDIR                 = 133\n\tSYS_BDFLUSH                = 134\n\tSYS_SYSFS                  = 135\n\tSYS_PERSONALITY            = 136\n\tSYS_AFS_SYSCALL            = 137\n\tSYS_GETDENTS               = 141\n\tSYS_SELECT                 = 142\n\tSYS_FLOCK                  = 143\n\tSYS_MSYNC                  = 144\n\tSYS_READV                  = 145\n\tSYS_WRITEV                 = 146\n\tSYS_GETSID                 = 147\n\tSYS_FDATASYNC              = 148\n\tSYS__SYSCTL                = 149\n\tSYS_MLOCK                  = 150\n\tSYS_MUNLOCK                = 151\n\tSYS_MLOCKALL               = 152\n\tSYS_MUNLOCKALL             = 153\n\tSYS_SCHED_SETPARAM         = 154\n\tSYS_SCHED_GETPARAM         = 155\n\tSYS_SCHED_SETSCHEDULER     = 156\n\tSYS_SCHED_GETSCHEDULER     = 157\n\tSYS_SCHED_YIELD            = 158\n\tSYS_SCHED_GET_PRIORITY_MAX = 159\n\tSYS_SCHED_GET_PRIORITY_MIN = 160\n\tSYS_SCHED_RR_GET_INTERVAL  = 161\n\tSYS_NANOSLEEP              = 162\n\tSYS_MREMAP                 = 163\n\tSYS_QUERY_MODULE           = 167\n\tSYS_POLL                   = 168\n\tSYS_NFSSERVCTL             = 169\n\tSYS_PRCTL                  = 172\n\tSYS_RT_SIGRETURN           = 173\n\tSYS_RT_SIGACTION           = 174\n\tSYS_RT_SIGPROCMASK         = 175\n\tSYS_RT_SIGPENDING          = 176\n\tSYS_RT_SIGTIMEDWAIT        = 177\n\tSYS_RT_SIGQUEUEINFO        = 178\n\tSYS_RT_SIGSUSPEND          = 179\n\tSYS_PREAD64                = 180\n\tSYS_PWRITE64               = 181\n\tSYS_GETCWD                 = 183\n\tSYS_CAPGET                 = 184\n\tSYS_CAPSET                 = 185\n\tSYS_SIGALTSTACK            = 186\n\tSYS_SENDFILE               = 187\n\tSYS_GETPMSG                = 188\n\tSYS_PUTPMSG                = 189\n\tSYS_VFORK                  = 190\n\tSYS_GETRLIMIT              = 191\n\tSYS_LCHOWN                 = 198\n\tSYS_GETUID                 = 199\n\tSYS_GETGID                 = 200\n\tSYS_GETEUID                = 201\n\tSYS_GETEGID                = 202\n\tSYS_SETREUID               = 203\n\tSYS_SETREGID               = 204\n\tSYS_GETGROUPS              = 205\n\tSYS_SETGROUPS              = 206\n\tSYS_FCHOWN                 = 207\n\tSYS_SETRESUID              = 208\n\tSYS_GETRESUID              = 209\n\tSYS_SETRESGID              = 210\n\tSYS_GETRESGID              = 211\n\tSYS_CHOWN                  = 212\n\tSYS_SETUID                 = 213\n\tSYS_SETGID                 = 214\n\tSYS_SETFSUID               = 215\n\tSYS_SETFSGID               = 216\n\tSYS_PIVOT_ROOT             = 217\n\tSYS_MINCORE                = 218\n\tSYS_MADVISE                = 219\n\tSYS_GETDENTS64             = 220\n\tSYS_READAHEAD              = 222\n\tSYS_SETXATTR               = 224\n\tSYS_LSETXATTR              = 225\n\tSYS_FSETXATTR              = 226\n\tSYS_GETXATTR               = 227\n\tSYS_LGETXATTR              = 228\n\tSYS_FGETXATTR              = 229\n\tSYS_LISTXATTR              = 230\n\tSYS_LLISTXATTR             = 231\n\tSYS_FLISTXATTR             = 232\n\tSYS_REMOVEXATTR            = 233\n\tSYS_LREMOVEXATTR           = 234\n\tSYS_FREMOVEXATTR           = 235\n\tSYS_GETTID                 = 236\n\tSYS_TKILL                  = 237\n\tSYS_FUTEX                  = 238\n\tSYS_SCHED_SETAFFINITY      = 239\n\tSYS_SCHED_GETAFFINITY      = 240\n\tSYS_TGKILL                 = 241\n\tSYS_IO_SETUP               = 243\n\tSYS_IO_DESTROY             = 244\n\tSYS_IO_GETEVENTS           = 245\n\tSYS_IO_SUBMIT              = 246\n\tSYS_IO_CANCEL              = 247\n\tSYS_EXIT_GROUP             = 248\n\tSYS_EPOLL_CREATE           = 249\n\tSYS_EPOLL_CTL              = 250\n\tSYS_EPOLL_WAIT             = 251\n\tSYS_SET_TID_ADDRESS        = 252\n\tSYS_FADVISE64              = 253\n\tSYS_TIMER_CREATE           = 254\n\tSYS_TIMER_SETTIME          = 255\n\tSYS_TIMER_GETTIME          = 256\n\tSYS_TIMER_GETOVERRUN       = 257\n\tSYS_TIMER_DELETE           = 258\n\tSYS_CLOCK_SETTIME          = 259\n\tSYS_CLOCK_GETTIME          = 260\n\tSYS_CLOCK_GETRES           = 261\n\tSYS_CLOCK_NANOSLEEP        = 262\n\tSYS_STATFS64               = 265\n\tSYS_FSTATFS64              = 266\n\tSYS_REMAP_FILE_PAGES       = 267\n\tSYS_MBIND                  = 268\n\tSYS_GET_MEMPOLICY          = 269\n\tSYS_SET_MEMPOLICY          = 270\n\tSYS_MQ_OPEN                = 271\n\tSYS_MQ_UNLINK              = 272\n\tSYS_MQ_TIMEDSEND           = 273\n\tSYS_MQ_TIMEDRECEIVE        = 274\n\tSYS_MQ_NOTIFY              = 275\n\tSYS_MQ_GETSETATTR          = 276\n\tSYS_KEXEC_LOAD             = 277\n\tSYS_ADD_KEY                = 278\n\tSYS_REQUEST_KEY            = 279\n\tSYS_KEYCTL                 = 280\n\tSYS_WAITID                 = 281\n\tSYS_IOPRIO_SET             = 282\n\tSYS_IOPRIO_GET             = 283\n\tSYS_INOTIFY_INIT           = 284\n\tSYS_INOTIFY_ADD_WATCH      = 285\n\tSYS_INOTIFY_RM_WATCH       = 286\n\tSYS_MIGRATE_PAGES          = 287\n\tSYS_OPENAT                 = 288\n\tSYS_MKDIRAT                = 289\n\tSYS_MKNODAT                = 290\n\tSYS_FCHOWNAT               = 291\n\tSYS_FUTIMESAT              = 292\n\tSYS_NEWFSTATAT             = 293\n\tSYS_UNLINKAT               = 294\n\tSYS_RENAMEAT               = 295\n\tSYS_LINKAT                 = 296\n\tSYS_SYMLINKAT              = 297\n\tSYS_READLINKAT             = 298\n\tSYS_FCHMODAT               = 299\n\tSYS_FACCESSAT              = 300\n\tSYS_PSELECT6               = 301\n\tSYS_PPOLL                  = 302\n\tSYS_UNSHARE                = 303\n\tSYS_SET_ROBUST_LIST        = 304\n\tSYS_GET_ROBUST_LIST        = 305\n\tSYS_SPLICE                 = 306\n\tSYS_SYNC_FILE_RANGE        = 307\n\tSYS_TEE                    = 308\n\tSYS_VMSPLICE               = 309\n\tSYS_MOVE_PAGES             = 310\n\tSYS_GETCPU                 = 311\n\tSYS_EPOLL_PWAIT            = 312\n\tSYS_UTIMES                 = 313\n\tSYS_FALLOCATE              = 314\n\tSYS_UTIMENSAT              = 315\n\tSYS_SIGNALFD               = 316\n\tSYS_TIMERFD                = 317\n\tSYS_EVENTFD                = 318\n\tSYS_TIMERFD_CREATE         = 319\n\tSYS_TIMERFD_SETTIME        = 320\n\tSYS_TIMERFD_GETTIME        = 321\n\tSYS_SIGNALFD4              = 322\n\tSYS_EVENTFD2               = 323\n\tSYS_INOTIFY_INIT1          = 324\n\tSYS_PIPE2                  = 325\n\tSYS_DUP3                   = 326\n\tSYS_EPOLL_CREATE1          = 327\n\tSYS_PREADV                 = 328\n\tSYS_PWRITEV                = 329\n\tSYS_RT_TGSIGQUEUEINFO      = 330\n\tSYS_PERF_EVENT_OPEN        = 331\n\tSYS_FANOTIFY_INIT          = 332\n\tSYS_FANOTIFY_MARK          = 333\n\tSYS_PRLIMIT64              = 334\n\tSYS_NAME_TO_HANDLE_AT      = 335\n\tSYS_OPEN_BY_HANDLE_AT      = 336\n\tSYS_CLOCK_ADJTIME          = 337\n\tSYS_SYNCFS                 = 338\n\tSYS_SETNS                  = 339\n\tSYS_PROCESS_VM_READV       = 340\n\tSYS_PROCESS_VM_WRITEV      = 341\n\tSYS_S390_RUNTIME_INSTR     = 342\n\tSYS_KCMP                   = 343\n\tSYS_FINIT_MODULE           = 344\n\tSYS_SCHED_SETATTR          = 345\n\tSYS_SCHED_GETATTR          = 346\n\tSYS_RENAMEAT2              = 347\n\tSYS_SECCOMP                = 348\n\tSYS_GETRANDOM              = 349\n\tSYS_MEMFD_CREATE           = 350\n\tSYS_BPF                    = 351\n\tSYS_S390_PCI_MMIO_WRITE    = 352\n\tSYS_S390_PCI_MMIO_READ     = 353\n\tSYS_EXECVEAT               = 354\n\tSYS_USERFAULTFD            = 355\n\tSYS_MEMBARRIER             = 356\n\tSYS_RECVMMSG               = 357\n\tSYS_SENDMMSG               = 358\n\tSYS_SOCKET                 = 359\n\tSYS_SOCKETPAIR             = 360\n\tSYS_BIND                   = 361\n\tSYS_CONNECT                = 362\n\tSYS_LISTEN                 = 363\n\tSYS_ACCEPT4                = 364\n\tSYS_GETSOCKOPT             = 365\n\tSYS_SETSOCKOPT             = 366\n\tSYS_GETSOCKNAME            = 367\n\tSYS_GETPEERNAME            = 368\n\tSYS_SENDTO                 = 369\n\tSYS_SENDMSG                = 370\n\tSYS_RECVFROM               = 371\n\tSYS_RECVMSG                = 372\n\tSYS_SHUTDOWN               = 373\n\tSYS_MLOCK2                 = 374\n\tSYS_COPY_FILE_RANGE        = 375\n\tSYS_PREADV2                = 376\n\tSYS_PWRITEV2               = 377\n\tSYS_S390_GUARDED_STORAGE   = 378\n\tSYS_STATX                  = 379\n\tSYS_S390_STHYI             = 380\n\tSYS_KEXEC_FILE_LOAD        = 381\n\tSYS_IO_PGETEVENTS          = 382\n\tSYS_RSEQ                   = 383\n\tSYS_PKEY_MPROTECT          = 384\n\tSYS_PKEY_ALLOC             = 385\n\tSYS_PKEY_FREE              = 386\n\tSYS_SEMTIMEDOP             = 392\n\tSYS_SEMGET                 = 393\n\tSYS_SEMCTL                 = 394\n\tSYS_SHMGET                 = 395\n\tSYS_SHMCTL                 = 396\n\tSYS_SHMAT                  = 397\n\tSYS_SHMDT                  = 398\n\tSYS_MSGGET                 = 399\n\tSYS_MSGSND                 = 400\n\tSYS_MSGRCV                 = 401\n\tSYS_MSGCTL                 = 402\n\tSYS_PIDFD_SEND_SIGNAL      = 424\n\tSYS_IO_URING_SETUP         = 425\n\tSYS_IO_URING_ENTER         = 426\n\tSYS_IO_URING_REGISTER      = 427\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go",
    "content": "// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build sparc64,linux\n\npackage unix\n\nconst (\n\tSYS_RESTART_SYSCALL        = 0\n\tSYS_EXIT                   = 1\n\tSYS_FORK                   = 2\n\tSYS_READ                   = 3\n\tSYS_WRITE                  = 4\n\tSYS_OPEN                   = 5\n\tSYS_CLOSE                  = 6\n\tSYS_WAIT4                  = 7\n\tSYS_CREAT                  = 8\n\tSYS_LINK                   = 9\n\tSYS_UNLINK                 = 10\n\tSYS_EXECV                  = 11\n\tSYS_CHDIR                  = 12\n\tSYS_CHOWN                  = 13\n\tSYS_MKNOD                  = 14\n\tSYS_CHMOD                  = 15\n\tSYS_LCHOWN                 = 16\n\tSYS_BRK                    = 17\n\tSYS_PERFCTR                = 18\n\tSYS_LSEEK                  = 19\n\tSYS_GETPID                 = 20\n\tSYS_CAPGET                 = 21\n\tSYS_CAPSET                 = 22\n\tSYS_SETUID                 = 23\n\tSYS_GETUID                 = 24\n\tSYS_VMSPLICE               = 25\n\tSYS_PTRACE                 = 26\n\tSYS_ALARM                  = 27\n\tSYS_SIGALTSTACK            = 28\n\tSYS_PAUSE                  = 29\n\tSYS_UTIME                  = 30\n\tSYS_ACCESS                 = 33\n\tSYS_NICE                   = 34\n\tSYS_SYNC                   = 36\n\tSYS_KILL                   = 37\n\tSYS_STAT                   = 38\n\tSYS_SENDFILE               = 39\n\tSYS_LSTAT                  = 40\n\tSYS_DUP                    = 41\n\tSYS_PIPE                   = 42\n\tSYS_TIMES                  = 43\n\tSYS_UMOUNT2                = 45\n\tSYS_SETGID                 = 46\n\tSYS_GETGID                 = 47\n\tSYS_SIGNAL                 = 48\n\tSYS_GETEUID                = 49\n\tSYS_GETEGID                = 50\n\tSYS_ACCT                   = 51\n\tSYS_MEMORY_ORDERING        = 52\n\tSYS_IOCTL                  = 54\n\tSYS_REBOOT                 = 55\n\tSYS_SYMLINK                = 57\n\tSYS_READLINK               = 58\n\tSYS_EXECVE                 = 59\n\tSYS_UMASK                  = 60\n\tSYS_CHROOT                 = 61\n\tSYS_FSTAT                  = 62\n\tSYS_FSTAT64                = 63\n\tSYS_GETPAGESIZE            = 64\n\tSYS_MSYNC                  = 65\n\tSYS_VFORK                  = 66\n\tSYS_PREAD64                = 67\n\tSYS_PWRITE64               = 68\n\tSYS_MMAP                   = 71\n\tSYS_MUNMAP                 = 73\n\tSYS_MPROTECT               = 74\n\tSYS_MADVISE                = 75\n\tSYS_VHANGUP                = 76\n\tSYS_MINCORE                = 78\n\tSYS_GETGROUPS              = 79\n\tSYS_SETGROUPS              = 80\n\tSYS_GETPGRP                = 81\n\tSYS_SETITIMER              = 83\n\tSYS_SWAPON                 = 85\n\tSYS_GETITIMER              = 86\n\tSYS_SETHOSTNAME            = 88\n\tSYS_DUP2                   = 90\n\tSYS_FCNTL                  = 92\n\tSYS_SELECT                 = 93\n\tSYS_FSYNC                  = 95\n\tSYS_SETPRIORITY            = 96\n\tSYS_SOCKET                 = 97\n\tSYS_CONNECT                = 98\n\tSYS_ACCEPT                 = 99\n\tSYS_GETPRIORITY            = 100\n\tSYS_RT_SIGRETURN           = 101\n\tSYS_RT_SIGACTION           = 102\n\tSYS_RT_SIGPROCMASK         = 103\n\tSYS_RT_SIGPENDING          = 104\n\tSYS_RT_SIGTIMEDWAIT        = 105\n\tSYS_RT_SIGQUEUEINFO        = 106\n\tSYS_RT_SIGSUSPEND          = 107\n\tSYS_SETRESUID              = 108\n\tSYS_GETRESUID              = 109\n\tSYS_SETRESGID              = 110\n\tSYS_GETRESGID              = 111\n\tSYS_RECVMSG                = 113\n\tSYS_SENDMSG                = 114\n\tSYS_GETTIMEOFDAY           = 116\n\tSYS_GETRUSAGE              = 117\n\tSYS_GETSOCKOPT             = 118\n\tSYS_GETCWD                 = 119\n\tSYS_READV                  = 120\n\tSYS_WRITEV                 = 121\n\tSYS_SETTIMEOFDAY           = 122\n\tSYS_FCHOWN                 = 123\n\tSYS_FCHMOD                 = 124\n\tSYS_RECVFROM               = 125\n\tSYS_SETREUID               = 126\n\tSYS_SETREGID               = 127\n\tSYS_RENAME                 = 128\n\tSYS_TRUNCATE               = 129\n\tSYS_FTRUNCATE              = 130\n\tSYS_FLOCK                  = 131\n\tSYS_LSTAT64                = 132\n\tSYS_SENDTO                 = 133\n\tSYS_SHUTDOWN               = 134\n\tSYS_SOCKETPAIR             = 135\n\tSYS_MKDIR                  = 136\n\tSYS_RMDIR                  = 137\n\tSYS_UTIMES                 = 138\n\tSYS_STAT64                 = 139\n\tSYS_SENDFILE64             = 140\n\tSYS_GETPEERNAME            = 141\n\tSYS_FUTEX                  = 142\n\tSYS_GETTID                 = 143\n\tSYS_GETRLIMIT              = 144\n\tSYS_SETRLIMIT              = 145\n\tSYS_PIVOT_ROOT             = 146\n\tSYS_PRCTL                  = 147\n\tSYS_PCICONFIG_READ         = 148\n\tSYS_PCICONFIG_WRITE        = 149\n\tSYS_GETSOCKNAME            = 150\n\tSYS_INOTIFY_INIT           = 151\n\tSYS_INOTIFY_ADD_WATCH      = 152\n\tSYS_POLL                   = 153\n\tSYS_GETDENTS64             = 154\n\tSYS_INOTIFY_RM_WATCH       = 156\n\tSYS_STATFS                 = 157\n\tSYS_FSTATFS                = 158\n\tSYS_UMOUNT                 = 159\n\tSYS_SCHED_SET_AFFINITY     = 160\n\tSYS_SCHED_GET_AFFINITY     = 161\n\tSYS_GETDOMAINNAME          = 162\n\tSYS_SETDOMAINNAME          = 163\n\tSYS_UTRAP_INSTALL          = 164\n\tSYS_QUOTACTL               = 165\n\tSYS_SET_TID_ADDRESS        = 166\n\tSYS_MOUNT                  = 167\n\tSYS_USTAT                  = 168\n\tSYS_SETXATTR               = 169\n\tSYS_LSETXATTR              = 170\n\tSYS_FSETXATTR              = 171\n\tSYS_GETXATTR               = 172\n\tSYS_LGETXATTR              = 173\n\tSYS_GETDENTS               = 174\n\tSYS_SETSID                 = 175\n\tSYS_FCHDIR                 = 176\n\tSYS_FGETXATTR              = 177\n\tSYS_LISTXATTR              = 178\n\tSYS_LLISTXATTR             = 179\n\tSYS_FLISTXATTR             = 180\n\tSYS_REMOVEXATTR            = 181\n\tSYS_LREMOVEXATTR           = 182\n\tSYS_SIGPENDING             = 183\n\tSYS_QUERY_MODULE           = 184\n\tSYS_SETPGID                = 185\n\tSYS_FREMOVEXATTR           = 186\n\tSYS_TKILL                  = 187\n\tSYS_EXIT_GROUP             = 188\n\tSYS_UNAME                  = 189\n\tSYS_INIT_MODULE            = 190\n\tSYS_PERSONALITY            = 191\n\tSYS_REMAP_FILE_PAGES       = 192\n\tSYS_EPOLL_CREATE           = 193\n\tSYS_EPOLL_CTL              = 194\n\tSYS_EPOLL_WAIT             = 195\n\tSYS_IOPRIO_SET             = 196\n\tSYS_GETPPID                = 197\n\tSYS_SIGACTION              = 198\n\tSYS_SGETMASK               = 199\n\tSYS_SSETMASK               = 200\n\tSYS_SIGSUSPEND             = 201\n\tSYS_OLDLSTAT               = 202\n\tSYS_USELIB                 = 203\n\tSYS_READDIR                = 204\n\tSYS_READAHEAD              = 205\n\tSYS_SOCKETCALL             = 206\n\tSYS_SYSLOG                 = 207\n\tSYS_LOOKUP_DCOOKIE         = 208\n\tSYS_FADVISE64              = 209\n\tSYS_FADVISE64_64           = 210\n\tSYS_TGKILL                 = 211\n\tSYS_WAITPID                = 212\n\tSYS_SWAPOFF                = 213\n\tSYS_SYSINFO                = 214\n\tSYS_IPC                    = 215\n\tSYS_SIGRETURN              = 216\n\tSYS_CLONE                  = 217\n\tSYS_IOPRIO_GET             = 218\n\tSYS_ADJTIMEX               = 219\n\tSYS_SIGPROCMASK            = 220\n\tSYS_CREATE_MODULE          = 221\n\tSYS_DELETE_MODULE          = 222\n\tSYS_GET_KERNEL_SYMS        = 223\n\tSYS_GETPGID                = 224\n\tSYS_BDFLUSH                = 225\n\tSYS_SYSFS                  = 226\n\tSYS_AFS_SYSCALL            = 227\n\tSYS_SETFSUID               = 228\n\tSYS_SETFSGID               = 229\n\tSYS__NEWSELECT             = 230\n\tSYS_SPLICE                 = 232\n\tSYS_STIME                  = 233\n\tSYS_STATFS64               = 234\n\tSYS_FSTATFS64              = 235\n\tSYS__LLSEEK                = 236\n\tSYS_MLOCK                  = 237\n\tSYS_MUNLOCK                = 238\n\tSYS_MLOCKALL               = 239\n\tSYS_MUNLOCKALL             = 240\n\tSYS_SCHED_SETPARAM         = 241\n\tSYS_SCHED_GETPARAM         = 242\n\tSYS_SCHED_SETSCHEDULER     = 243\n\tSYS_SCHED_GETSCHEDULER     = 244\n\tSYS_SCHED_YIELD            = 245\n\tSYS_SCHED_GET_PRIORITY_MAX = 246\n\tSYS_SCHED_GET_PRIORITY_MIN = 247\n\tSYS_SCHED_RR_GET_INTERVAL  = 248\n\tSYS_NANOSLEEP              = 249\n\tSYS_MREMAP                 = 250\n\tSYS__SYSCTL                = 251\n\tSYS_GETSID                 = 252\n\tSYS_FDATASYNC              = 253\n\tSYS_NFSSERVCTL             = 254\n\tSYS_SYNC_FILE_RANGE        = 255\n\tSYS_CLOCK_SETTIME          = 256\n\tSYS_CLOCK_GETTIME          = 257\n\tSYS_CLOCK_GETRES           = 258\n\tSYS_CLOCK_NANOSLEEP        = 259\n\tSYS_SCHED_GETAFFINITY      = 260\n\tSYS_SCHED_SETAFFINITY      = 261\n\tSYS_TIMER_SETTIME          = 262\n\tSYS_TIMER_GETTIME          = 263\n\tSYS_TIMER_GETOVERRUN       = 264\n\tSYS_TIMER_DELETE           = 265\n\tSYS_TIMER_CREATE           = 266\n\tSYS_VSERVER                = 267\n\tSYS_IO_SETUP               = 268\n\tSYS_IO_DESTROY             = 269\n\tSYS_IO_SUBMIT              = 270\n\tSYS_IO_CANCEL              = 271\n\tSYS_IO_GETEVENTS           = 272\n\tSYS_MQ_OPEN                = 273\n\tSYS_MQ_UNLINK              = 274\n\tSYS_MQ_TIMEDSEND           = 275\n\tSYS_MQ_TIMEDRECEIVE        = 276\n\tSYS_MQ_NOTIFY              = 277\n\tSYS_MQ_GETSETATTR          = 278\n\tSYS_WAITID                 = 279\n\tSYS_TEE                    = 280\n\tSYS_ADD_KEY                = 281\n\tSYS_REQUEST_KEY            = 282\n\tSYS_KEYCTL                 = 283\n\tSYS_OPENAT                 = 284\n\tSYS_MKDIRAT                = 285\n\tSYS_MKNODAT                = 286\n\tSYS_FCHOWNAT               = 287\n\tSYS_FUTIMESAT              = 288\n\tSYS_FSTATAT64              = 289\n\tSYS_UNLINKAT               = 290\n\tSYS_RENAMEAT               = 291\n\tSYS_LINKAT                 = 292\n\tSYS_SYMLINKAT              = 293\n\tSYS_READLINKAT             = 294\n\tSYS_FCHMODAT               = 295\n\tSYS_FACCESSAT              = 296\n\tSYS_PSELECT6               = 297\n\tSYS_PPOLL                  = 298\n\tSYS_UNSHARE                = 299\n\tSYS_SET_ROBUST_LIST        = 300\n\tSYS_GET_ROBUST_LIST        = 301\n\tSYS_MIGRATE_PAGES          = 302\n\tSYS_MBIND                  = 303\n\tSYS_GET_MEMPOLICY          = 304\n\tSYS_SET_MEMPOLICY          = 305\n\tSYS_KEXEC_LOAD             = 306\n\tSYS_MOVE_PAGES             = 307\n\tSYS_GETCPU                 = 308\n\tSYS_EPOLL_PWAIT            = 309\n\tSYS_UTIMENSAT              = 310\n\tSYS_SIGNALFD               = 311\n\tSYS_TIMERFD_CREATE         = 312\n\tSYS_EVENTFD                = 313\n\tSYS_FALLOCATE              = 314\n\tSYS_TIMERFD_SETTIME        = 315\n\tSYS_TIMERFD_GETTIME        = 316\n\tSYS_SIGNALFD4              = 317\n\tSYS_EVENTFD2               = 318\n\tSYS_EPOLL_CREATE1          = 319\n\tSYS_DUP3                   = 320\n\tSYS_PIPE2                  = 321\n\tSYS_INOTIFY_INIT1          = 322\n\tSYS_ACCEPT4                = 323\n\tSYS_PREADV                 = 324\n\tSYS_PWRITEV                = 325\n\tSYS_RT_TGSIGQUEUEINFO      = 326\n\tSYS_PERF_EVENT_OPEN        = 327\n\tSYS_RECVMMSG               = 328\n\tSYS_FANOTIFY_INIT          = 329\n\tSYS_FANOTIFY_MARK          = 330\n\tSYS_PRLIMIT64              = 331\n\tSYS_NAME_TO_HANDLE_AT      = 332\n\tSYS_OPEN_BY_HANDLE_AT      = 333\n\tSYS_CLOCK_ADJTIME          = 334\n\tSYS_SYNCFS                 = 335\n\tSYS_SENDMMSG               = 336\n\tSYS_SETNS                  = 337\n\tSYS_PROCESS_VM_READV       = 338\n\tSYS_PROCESS_VM_WRITEV      = 339\n\tSYS_KERN_FEATURES          = 340\n\tSYS_KCMP                   = 341\n\tSYS_FINIT_MODULE           = 342\n\tSYS_SCHED_SETATTR          = 343\n\tSYS_SCHED_GETATTR          = 344\n\tSYS_RENAMEAT2              = 345\n\tSYS_SECCOMP                = 346\n\tSYS_GETRANDOM              = 347\n\tSYS_MEMFD_CREATE           = 348\n\tSYS_BPF                    = 349\n\tSYS_EXECVEAT               = 350\n\tSYS_MEMBARRIER             = 351\n\tSYS_USERFAULTFD            = 352\n\tSYS_BIND                   = 353\n\tSYS_LISTEN                 = 354\n\tSYS_SETSOCKOPT             = 355\n\tSYS_MLOCK2                 = 356\n\tSYS_COPY_FILE_RANGE        = 357\n\tSYS_PREADV2                = 358\n\tSYS_PWRITEV2               = 359\n\tSYS_STATX                  = 360\n\tSYS_IO_PGETEVENTS          = 361\n\tSYS_PKEY_MPROTECT          = 362\n\tSYS_PKEY_ALLOC             = 363\n\tSYS_PKEY_FREE              = 364\n\tSYS_RSEQ                   = 365\n\tSYS_SEMTIMEDOP             = 392\n\tSYS_SEMGET                 = 393\n\tSYS_SEMCTL                 = 394\n\tSYS_SHMGET                 = 395\n\tSYS_SHMCTL                 = 396\n\tSYS_SHMAT                  = 397\n\tSYS_SHMDT                  = 398\n\tSYS_MSGGET                 = 399\n\tSYS_MSGSND                 = 400\n\tSYS_MSGRCV                 = 401\n\tSYS_MSGCTL                 = 402\n\tSYS_PIDFD_SEND_SIGNAL      = 424\n\tSYS_IO_URING_SETUP         = 425\n\tSYS_IO_URING_ENTER         = 426\n\tSYS_IO_URING_REGISTER      = 427\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go",
    "content": "// go run mksysnum.go http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build 386,netbsd\n\npackage unix\n\nconst (\n\tSYS_EXIT                 = 1   // { void|sys||exit(int rval); }\n\tSYS_FORK                 = 2   // { int|sys||fork(void); }\n\tSYS_READ                 = 3   // { ssize_t|sys||read(int fd, void *buf, size_t nbyte); }\n\tSYS_WRITE                = 4   // { ssize_t|sys||write(int fd, const void *buf, size_t nbyte); }\n\tSYS_OPEN                 = 5   // { int|sys||open(const char *path, int flags, ... mode_t mode); }\n\tSYS_CLOSE                = 6   // { int|sys||close(int fd); }\n\tSYS_LINK                 = 9   // { int|sys||link(const char *path, const char *link); }\n\tSYS_UNLINK               = 10  // { int|sys||unlink(const char *path); }\n\tSYS_CHDIR                = 12  // { int|sys||chdir(const char *path); }\n\tSYS_FCHDIR               = 13  // { int|sys||fchdir(int fd); }\n\tSYS_CHMOD                = 15  // { int|sys||chmod(const char *path, mode_t mode); }\n\tSYS_CHOWN                = 16  // { int|sys||chown(const char *path, uid_t uid, gid_t gid); }\n\tSYS_BREAK                = 17  // { int|sys||obreak(char *nsize); }\n\tSYS_GETPID               = 20  // { pid_t|sys||getpid_with_ppid(void); }\n\tSYS_UNMOUNT              = 22  // { int|sys||unmount(const char *path, int flags); }\n\tSYS_SETUID               = 23  // { int|sys||setuid(uid_t uid); }\n\tSYS_GETUID               = 24  // { uid_t|sys||getuid_with_euid(void); }\n\tSYS_GETEUID              = 25  // { uid_t|sys||geteuid(void); }\n\tSYS_PTRACE               = 26  // { int|sys||ptrace(int req, pid_t pid, void *addr, int data); }\n\tSYS_RECVMSG              = 27  // { ssize_t|sys||recvmsg(int s, struct msghdr *msg, int flags); }\n\tSYS_SENDMSG              = 28  // { ssize_t|sys||sendmsg(int s, const struct msghdr *msg, int flags); }\n\tSYS_RECVFROM             = 29  // { ssize_t|sys||recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); }\n\tSYS_ACCEPT               = 30  // { int|sys||accept(int s, struct sockaddr *name, socklen_t *anamelen); }\n\tSYS_GETPEERNAME          = 31  // { int|sys||getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); }\n\tSYS_GETSOCKNAME          = 32  // { int|sys||getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); }\n\tSYS_ACCESS               = 33  // { int|sys||access(const char *path, int flags); }\n\tSYS_CHFLAGS              = 34  // { int|sys||chflags(const char *path, u_long flags); }\n\tSYS_FCHFLAGS             = 35  // { int|sys||fchflags(int fd, u_long flags); }\n\tSYS_SYNC                 = 36  // { void|sys||sync(void); }\n\tSYS_KILL                 = 37  // { int|sys||kill(pid_t pid, int signum); }\n\tSYS_GETPPID              = 39  // { pid_t|sys||getppid(void); }\n\tSYS_DUP                  = 41  // { int|sys||dup(int fd); }\n\tSYS_PIPE                 = 42  // { int|sys||pipe(void); }\n\tSYS_GETEGID              = 43  // { gid_t|sys||getegid(void); }\n\tSYS_PROFIL               = 44  // { int|sys||profil(char *samples, size_t size, u_long offset, u_int scale); }\n\tSYS_KTRACE               = 45  // { int|sys||ktrace(const char *fname, int ops, int facs, pid_t pid); }\n\tSYS_GETGID               = 47  // { gid_t|sys||getgid_with_egid(void); }\n\tSYS___GETLOGIN           = 49  // { int|sys||__getlogin(char *namebuf, size_t namelen); }\n\tSYS___SETLOGIN           = 50  // { int|sys||__setlogin(const char *namebuf); }\n\tSYS_ACCT                 = 51  // { int|sys||acct(const char *path); }\n\tSYS_IOCTL                = 54  // { int|sys||ioctl(int fd, u_long com, ... void *data); }\n\tSYS_REVOKE               = 56  // { int|sys||revoke(const char *path); }\n\tSYS_SYMLINK              = 57  // { int|sys||symlink(const char *path, const char *link); }\n\tSYS_READLINK             = 58  // { ssize_t|sys||readlink(const char *path, char *buf, size_t count); }\n\tSYS_EXECVE               = 59  // { int|sys||execve(const char *path, char * const *argp, char * const *envp); }\n\tSYS_UMASK                = 60  // { mode_t|sys||umask(mode_t newmask); }\n\tSYS_CHROOT               = 61  // { int|sys||chroot(const char *path); }\n\tSYS_VFORK                = 66  // { int|sys||vfork(void); }\n\tSYS_SBRK                 = 69  // { int|sys||sbrk(intptr_t incr); }\n\tSYS_SSTK                 = 70  // { int|sys||sstk(int incr); }\n\tSYS_VADVISE              = 72  // { int|sys||ovadvise(int anom); }\n\tSYS_MUNMAP               = 73  // { int|sys||munmap(void *addr, size_t len); }\n\tSYS_MPROTECT             = 74  // { int|sys||mprotect(void *addr, size_t len, int prot); }\n\tSYS_MADVISE              = 75  // { int|sys||madvise(void *addr, size_t len, int behav); }\n\tSYS_MINCORE              = 78  // { int|sys||mincore(void *addr, size_t len, char *vec); }\n\tSYS_GETGROUPS            = 79  // { int|sys||getgroups(int gidsetsize, gid_t *gidset); }\n\tSYS_SETGROUPS            = 80  // { int|sys||setgroups(int gidsetsize, const gid_t *gidset); }\n\tSYS_GETPGRP              = 81  // { int|sys||getpgrp(void); }\n\tSYS_SETPGID              = 82  // { int|sys||setpgid(pid_t pid, pid_t pgid); }\n\tSYS_DUP2                 = 90  // { int|sys||dup2(int from, int to); }\n\tSYS_FCNTL                = 92  // { int|sys||fcntl(int fd, int cmd, ... void *arg); }\n\tSYS_FSYNC                = 95  // { int|sys||fsync(int fd); }\n\tSYS_SETPRIORITY          = 96  // { int|sys||setpriority(int which, id_t who, int prio); }\n\tSYS_CONNECT              = 98  // { int|sys||connect(int s, const struct sockaddr *name, socklen_t namelen); }\n\tSYS_GETPRIORITY          = 100 // { int|sys||getpriority(int which, id_t who); }\n\tSYS_BIND                 = 104 // { int|sys||bind(int s, const struct sockaddr *name, socklen_t namelen); }\n\tSYS_SETSOCKOPT           = 105 // { int|sys||setsockopt(int s, int level, int name, const void *val, socklen_t valsize); }\n\tSYS_LISTEN               = 106 // { int|sys||listen(int s, int backlog); }\n\tSYS_GETSOCKOPT           = 118 // { int|sys||getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); }\n\tSYS_READV                = 120 // { ssize_t|sys||readv(int fd, const struct iovec *iovp, int iovcnt); }\n\tSYS_WRITEV               = 121 // { ssize_t|sys||writev(int fd, const struct iovec *iovp, int iovcnt); }\n\tSYS_FCHOWN               = 123 // { int|sys||fchown(int fd, uid_t uid, gid_t gid); }\n\tSYS_FCHMOD               = 124 // { int|sys||fchmod(int fd, mode_t mode); }\n\tSYS_SETREUID             = 126 // { int|sys||setreuid(uid_t ruid, uid_t euid); }\n\tSYS_SETREGID             = 127 // { int|sys||setregid(gid_t rgid, gid_t egid); }\n\tSYS_RENAME               = 128 // { int|sys||rename(const char *from, const char *to); }\n\tSYS_FLOCK                = 131 // { int|sys||flock(int fd, int how); }\n\tSYS_MKFIFO               = 132 // { int|sys||mkfifo(const char *path, mode_t mode); }\n\tSYS_SENDTO               = 133 // { ssize_t|sys||sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); }\n\tSYS_SHUTDOWN             = 134 // { int|sys||shutdown(int s, int how); }\n\tSYS_SOCKETPAIR           = 135 // { int|sys||socketpair(int domain, int type, int protocol, int *rsv); }\n\tSYS_MKDIR                = 136 // { int|sys||mkdir(const char *path, mode_t mode); }\n\tSYS_RMDIR                = 137 // { int|sys||rmdir(const char *path); }\n\tSYS_SETSID               = 147 // { int|sys||setsid(void); }\n\tSYS_SYSARCH              = 165 // { int|sys||sysarch(int op, void *parms); }\n\tSYS_PREAD                = 173 // { ssize_t|sys||pread(int fd, void *buf, size_t nbyte, int PAD, off_t offset); }\n\tSYS_PWRITE               = 174 // { ssize_t|sys||pwrite(int fd, const void *buf, size_t nbyte, int PAD, off_t offset); }\n\tSYS_NTP_ADJTIME          = 176 // { int|sys||ntp_adjtime(struct timex *tp); }\n\tSYS_SETGID               = 181 // { int|sys||setgid(gid_t gid); }\n\tSYS_SETEGID              = 182 // { int|sys||setegid(gid_t egid); }\n\tSYS_SETEUID              = 183 // { int|sys||seteuid(uid_t euid); }\n\tSYS_PATHCONF             = 191 // { long|sys||pathconf(const char *path, int name); }\n\tSYS_FPATHCONF            = 192 // { long|sys||fpathconf(int fd, int name); }\n\tSYS_GETRLIMIT            = 194 // { int|sys||getrlimit(int which, struct rlimit *rlp); }\n\tSYS_SETRLIMIT            = 195 // { int|sys||setrlimit(int which, const struct rlimit *rlp); }\n\tSYS_MMAP                 = 197 // { void *|sys||mmap(void *addr, size_t len, int prot, int flags, int fd, long PAD, off_t pos); }\n\tSYS_LSEEK                = 199 // { off_t|sys||lseek(int fd, int PAD, off_t offset, int whence); }\n\tSYS_TRUNCATE             = 200 // { int|sys||truncate(const char *path, int PAD, off_t length); }\n\tSYS_FTRUNCATE            = 201 // { int|sys||ftruncate(int fd, int PAD, off_t length); }\n\tSYS___SYSCTL             = 202 // { int|sys||__sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, const void *new, size_t newlen); }\n\tSYS_MLOCK                = 203 // { int|sys||mlock(const void *addr, size_t len); }\n\tSYS_MUNLOCK              = 204 // { int|sys||munlock(const void *addr, size_t len); }\n\tSYS_UNDELETE             = 205 // { int|sys||undelete(const char *path); }\n\tSYS_GETPGID              = 207 // { pid_t|sys||getpgid(pid_t pid); }\n\tSYS_REBOOT               = 208 // { int|sys||reboot(int opt, char *bootstr); }\n\tSYS_POLL                 = 209 // { int|sys||poll(struct pollfd *fds, u_int nfds, int timeout); }\n\tSYS_SEMGET               = 221 // { int|sys||semget(key_t key, int nsems, int semflg); }\n\tSYS_SEMOP                = 222 // { int|sys||semop(int semid, struct sembuf *sops, size_t nsops); }\n\tSYS_SEMCONFIG            = 223 // { int|sys||semconfig(int flag); }\n\tSYS_MSGGET               = 225 // { int|sys||msgget(key_t key, int msgflg); }\n\tSYS_MSGSND               = 226 // { int|sys||msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }\n\tSYS_MSGRCV               = 227 // { ssize_t|sys||msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }\n\tSYS_SHMAT                = 228 // { void *|sys||shmat(int shmid, const void *shmaddr, int shmflg); }\n\tSYS_SHMDT                = 230 // { int|sys||shmdt(const void *shmaddr); }\n\tSYS_SHMGET               = 231 // { int|sys||shmget(key_t key, size_t size, int shmflg); }\n\tSYS_TIMER_CREATE         = 235 // { int|sys||timer_create(clockid_t clock_id, struct sigevent *evp, timer_t *timerid); }\n\tSYS_TIMER_DELETE         = 236 // { int|sys||timer_delete(timer_t timerid); }\n\tSYS_TIMER_GETOVERRUN     = 239 // { int|sys||timer_getoverrun(timer_t timerid); }\n\tSYS_FDATASYNC            = 241 // { int|sys||fdatasync(int fd); }\n\tSYS_MLOCKALL             = 242 // { int|sys||mlockall(int flags); }\n\tSYS_MUNLOCKALL           = 243 // { int|sys||munlockall(void); }\n\tSYS_SIGQUEUEINFO         = 245 // { int|sys||sigqueueinfo(pid_t pid, const siginfo_t *info); }\n\tSYS_MODCTL               = 246 // { int|sys||modctl(int cmd, void *arg); }\n\tSYS___POSIX_RENAME       = 270 // { int|sys||__posix_rename(const char *from, const char *to); }\n\tSYS_SWAPCTL              = 271 // { int|sys||swapctl(int cmd, void *arg, int misc); }\n\tSYS_MINHERIT             = 273 // { int|sys||minherit(void *addr, size_t len, int inherit); }\n\tSYS_LCHMOD               = 274 // { int|sys||lchmod(const char *path, mode_t mode); }\n\tSYS_LCHOWN               = 275 // { int|sys||lchown(const char *path, uid_t uid, gid_t gid); }\n\tSYS_MSYNC                = 277 // { int|sys|13|msync(void *addr, size_t len, int flags); }\n\tSYS___POSIX_CHOWN        = 283 // { int|sys||__posix_chown(const char *path, uid_t uid, gid_t gid); }\n\tSYS___POSIX_FCHOWN       = 284 // { int|sys||__posix_fchown(int fd, uid_t uid, gid_t gid); }\n\tSYS___POSIX_LCHOWN       = 285 // { int|sys||__posix_lchown(const char *path, uid_t uid, gid_t gid); }\n\tSYS_GETSID               = 286 // { pid_t|sys||getsid(pid_t pid); }\n\tSYS___CLONE              = 287 // { pid_t|sys||__clone(int flags, void *stack); }\n\tSYS_FKTRACE              = 288 // { int|sys||fktrace(int fd, int ops, int facs, pid_t pid); }\n\tSYS_PREADV               = 289 // { ssize_t|sys||preadv(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); }\n\tSYS_PWRITEV              = 290 // { ssize_t|sys||pwritev(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); }\n\tSYS___GETCWD             = 296 // { int|sys||__getcwd(char *bufp, size_t length); }\n\tSYS_FCHROOT              = 297 // { int|sys||fchroot(int fd); }\n\tSYS_LCHFLAGS             = 304 // { int|sys||lchflags(const char *path, u_long flags); }\n\tSYS_ISSETUGID            = 305 // { int|sys||issetugid(void); }\n\tSYS_UTRACE               = 306 // { int|sys||utrace(const char *label, void *addr, size_t len); }\n\tSYS_GETCONTEXT           = 307 // { int|sys||getcontext(struct __ucontext *ucp); }\n\tSYS_SETCONTEXT           = 308 // { int|sys||setcontext(const struct __ucontext *ucp); }\n\tSYS__LWP_CREATE          = 309 // { int|sys||_lwp_create(const struct __ucontext *ucp, u_long flags, lwpid_t *new_lwp); }\n\tSYS__LWP_EXIT            = 310 // { int|sys||_lwp_exit(void); }\n\tSYS__LWP_SELF            = 311 // { lwpid_t|sys||_lwp_self(void); }\n\tSYS__LWP_WAIT            = 312 // { int|sys||_lwp_wait(lwpid_t wait_for, lwpid_t *departed); }\n\tSYS__LWP_SUSPEND         = 313 // { int|sys||_lwp_suspend(lwpid_t target); }\n\tSYS__LWP_CONTINUE        = 314 // { int|sys||_lwp_continue(lwpid_t target); }\n\tSYS__LWP_WAKEUP          = 315 // { int|sys||_lwp_wakeup(lwpid_t target); }\n\tSYS__LWP_GETPRIVATE      = 316 // { void *|sys||_lwp_getprivate(void); }\n\tSYS__LWP_SETPRIVATE      = 317 // { void|sys||_lwp_setprivate(void *ptr); }\n\tSYS__LWP_KILL            = 318 // { int|sys||_lwp_kill(lwpid_t target, int signo); }\n\tSYS__LWP_DETACH          = 319 // { int|sys||_lwp_detach(lwpid_t target); }\n\tSYS__LWP_UNPARK          = 321 // { int|sys||_lwp_unpark(lwpid_t target, const void *hint); }\n\tSYS__LWP_UNPARK_ALL      = 322 // { ssize_t|sys||_lwp_unpark_all(const lwpid_t *targets, size_t ntargets, const void *hint); }\n\tSYS__LWP_SETNAME         = 323 // { int|sys||_lwp_setname(lwpid_t target, const char *name); }\n\tSYS__LWP_GETNAME         = 324 // { int|sys||_lwp_getname(lwpid_t target, char *name, size_t len); }\n\tSYS__LWP_CTL             = 325 // { int|sys||_lwp_ctl(int features, struct lwpctl **address); }\n\tSYS___SIGACTION_SIGTRAMP = 340 // { int|sys||__sigaction_sigtramp(int signum, const struct sigaction *nsa, struct sigaction *osa, const void *tramp, int vers); }\n\tSYS_PMC_GET_INFO         = 341 // { int|sys||pmc_get_info(int ctr, int op, void *args); }\n\tSYS_PMC_CONTROL          = 342 // { int|sys||pmc_control(int ctr, int op, void *args); }\n\tSYS_RASCTL               = 343 // { int|sys||rasctl(void *addr, size_t len, int op); }\n\tSYS_KQUEUE               = 344 // { int|sys||kqueue(void); }\n\tSYS__SCHED_SETPARAM      = 346 // { int|sys||_sched_setparam(pid_t pid, lwpid_t lid, int policy, const struct sched_param *params); }\n\tSYS__SCHED_GETPARAM      = 347 // { int|sys||_sched_getparam(pid_t pid, lwpid_t lid, int *policy, struct sched_param *params); }\n\tSYS__SCHED_SETAFFINITY   = 348 // { int|sys||_sched_setaffinity(pid_t pid, lwpid_t lid, size_t size, const cpuset_t *cpuset); }\n\tSYS__SCHED_GETAFFINITY   = 349 // { int|sys||_sched_getaffinity(pid_t pid, lwpid_t lid, size_t size, cpuset_t *cpuset); }\n\tSYS_SCHED_YIELD          = 350 // { int|sys||sched_yield(void); }\n\tSYS_FSYNC_RANGE          = 354 // { int|sys||fsync_range(int fd, int flags, off_t start, off_t length); }\n\tSYS_UUIDGEN              = 355 // { int|sys||uuidgen(struct uuid *store, int count); }\n\tSYS_GETVFSSTAT           = 356 // { int|sys||getvfsstat(struct statvfs *buf, size_t bufsize, int flags); }\n\tSYS_STATVFS1             = 357 // { int|sys||statvfs1(const char *path, struct statvfs *buf, int flags); }\n\tSYS_FSTATVFS1            = 358 // { int|sys||fstatvfs1(int fd, struct statvfs *buf, int flags); }\n\tSYS_EXTATTRCTL           = 360 // { int|sys||extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); }\n\tSYS_EXTATTR_SET_FILE     = 361 // { int|sys||extattr_set_file(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); }\n\tSYS_EXTATTR_GET_FILE     = 362 // { ssize_t|sys||extattr_get_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_DELETE_FILE  = 363 // { int|sys||extattr_delete_file(const char *path, int attrnamespace, const char *attrname); }\n\tSYS_EXTATTR_SET_FD       = 364 // { int|sys||extattr_set_fd(int fd, int attrnamespace, const char *attrname, const void *data, size_t nbytes); }\n\tSYS_EXTATTR_GET_FD       = 365 // { ssize_t|sys||extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_DELETE_FD    = 366 // { int|sys||extattr_delete_fd(int fd, int attrnamespace, const char *attrname); }\n\tSYS_EXTATTR_SET_LINK     = 367 // { int|sys||extattr_set_link(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); }\n\tSYS_EXTATTR_GET_LINK     = 368 // { ssize_t|sys||extattr_get_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_DELETE_LINK  = 369 // { int|sys||extattr_delete_link(const char *path, int attrnamespace, const char *attrname); }\n\tSYS_EXTATTR_LIST_FD      = 370 // { ssize_t|sys||extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); }\n\tSYS_EXTATTR_LIST_FILE    = 371 // { ssize_t|sys||extattr_list_file(const char *path, int attrnamespace, void *data, size_t nbytes); }\n\tSYS_EXTATTR_LIST_LINK    = 372 // { ssize_t|sys||extattr_list_link(const char *path, int attrnamespace, void *data, size_t nbytes); }\n\tSYS_SETXATTR             = 375 // { int|sys||setxattr(const char *path, const char *name, const void *value, size_t size, int flags); }\n\tSYS_LSETXATTR            = 376 // { int|sys||lsetxattr(const char *path, const char *name, const void *value, size_t size, int flags); }\n\tSYS_FSETXATTR            = 377 // { int|sys||fsetxattr(int fd, const char *name, const void *value, size_t size, int flags); }\n\tSYS_GETXATTR             = 378 // { int|sys||getxattr(const char *path, const char *name, void *value, size_t size); }\n\tSYS_LGETXATTR            = 379 // { int|sys||lgetxattr(const char *path, const char *name, void *value, size_t size); }\n\tSYS_FGETXATTR            = 380 // { int|sys||fgetxattr(int fd, const char *name, void *value, size_t size); }\n\tSYS_LISTXATTR            = 381 // { int|sys||listxattr(const char *path, char *list, size_t size); }\n\tSYS_LLISTXATTR           = 382 // { int|sys||llistxattr(const char *path, char *list, size_t size); }\n\tSYS_FLISTXATTR           = 383 // { int|sys||flistxattr(int fd, char *list, size_t size); }\n\tSYS_REMOVEXATTR          = 384 // { int|sys||removexattr(const char *path, const char *name); }\n\tSYS_LREMOVEXATTR         = 385 // { int|sys||lremovexattr(const char *path, const char *name); }\n\tSYS_FREMOVEXATTR         = 386 // { int|sys||fremovexattr(int fd, const char *name); }\n\tSYS_GETDENTS             = 390 // { int|sys|30|getdents(int fd, char *buf, size_t count); }\n\tSYS_SOCKET               = 394 // { int|sys|30|socket(int domain, int type, int protocol); }\n\tSYS_GETFH                = 395 // { int|sys|30|getfh(const char *fname, void *fhp, size_t *fh_size); }\n\tSYS_MOUNT                = 410 // { int|sys|50|mount(const char *type, const char *path, int flags, void *data, size_t data_len); }\n\tSYS_MREMAP               = 411 // { void *|sys||mremap(void *old_address, size_t old_size, void *new_address, size_t new_size, int flags); }\n\tSYS_PSET_CREATE          = 412 // { int|sys||pset_create(psetid_t *psid); }\n\tSYS_PSET_DESTROY         = 413 // { int|sys||pset_destroy(psetid_t psid); }\n\tSYS_PSET_ASSIGN          = 414 // { int|sys||pset_assign(psetid_t psid, cpuid_t cpuid, psetid_t *opsid); }\n\tSYS__PSET_BIND           = 415 // { int|sys||_pset_bind(idtype_t idtype, id_t first_id, id_t second_id, psetid_t psid, psetid_t *opsid); }\n\tSYS_POSIX_FADVISE        = 416 // { int|sys|50|posix_fadvise(int fd, int PAD, off_t offset, off_t len, int advice); }\n\tSYS_SELECT               = 417 // { int|sys|50|select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }\n\tSYS_GETTIMEOFDAY         = 418 // { int|sys|50|gettimeofday(struct timeval *tp, void *tzp); }\n\tSYS_SETTIMEOFDAY         = 419 // { int|sys|50|settimeofday(const struct timeval *tv, const void *tzp); }\n\tSYS_UTIMES               = 420 // { int|sys|50|utimes(const char *path, const struct timeval *tptr); }\n\tSYS_ADJTIME              = 421 // { int|sys|50|adjtime(const struct timeval *delta, struct timeval *olddelta); }\n\tSYS_FUTIMES              = 423 // { int|sys|50|futimes(int fd, const struct timeval *tptr); }\n\tSYS_LUTIMES              = 424 // { int|sys|50|lutimes(const char *path, const struct timeval *tptr); }\n\tSYS_SETITIMER            = 425 // { int|sys|50|setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); }\n\tSYS_GETITIMER            = 426 // { int|sys|50|getitimer(int which, struct itimerval *itv); }\n\tSYS_CLOCK_GETTIME        = 427 // { int|sys|50|clock_gettime(clockid_t clock_id, struct timespec *tp); }\n\tSYS_CLOCK_SETTIME        = 428 // { int|sys|50|clock_settime(clockid_t clock_id, const struct timespec *tp); }\n\tSYS_CLOCK_GETRES         = 429 // { int|sys|50|clock_getres(clockid_t clock_id, struct timespec *tp); }\n\tSYS_NANOSLEEP            = 430 // { int|sys|50|nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }\n\tSYS___SIGTIMEDWAIT       = 431 // { int|sys|50|__sigtimedwait(const sigset_t *set, siginfo_t *info, struct timespec *timeout); }\n\tSYS__LWP_PARK            = 434 // { int|sys|50|_lwp_park(const struct timespec *ts, lwpid_t unpark, const void *hint, const void *unparkhint); }\n\tSYS_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); }\n\tSYS_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); }\n\tSYS_POLLTS               = 437 // { int|sys|50|pollts(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); }\n\tSYS_STAT                 = 439 // { int|sys|50|stat(const char *path, struct stat *ub); }\n\tSYS_FSTAT                = 440 // { int|sys|50|fstat(int fd, struct stat *sb); }\n\tSYS_LSTAT                = 441 // { int|sys|50|lstat(const char *path, struct stat *ub); }\n\tSYS___SEMCTL             = 442 // { int|sys|50|__semctl(int semid, int semnum, int cmd, ... union __semun *arg); }\n\tSYS_SHMCTL               = 443 // { int|sys|50|shmctl(int shmid, int cmd, struct shmid_ds *buf); }\n\tSYS_MSGCTL               = 444 // { int|sys|50|msgctl(int msqid, int cmd, struct msqid_ds *buf); }\n\tSYS_GETRUSAGE            = 445 // { int|sys|50|getrusage(int who, struct rusage *rusage); }\n\tSYS_TIMER_SETTIME        = 446 // { int|sys|50|timer_settime(timer_t timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); }\n\tSYS_TIMER_GETTIME        = 447 // { int|sys|50|timer_gettime(timer_t timerid, struct itimerspec *value); }\n\tSYS_NTP_GETTIME          = 448 // { int|sys|50|ntp_gettime(struct ntptimeval *ntvp); }\n\tSYS_WAIT4                = 449 // { int|sys|50|wait4(pid_t pid, int *status, int options, struct rusage *rusage); }\n\tSYS_MKNOD                = 450 // { int|sys|50|mknod(const char *path, mode_t mode, dev_t dev); }\n\tSYS_FHSTAT               = 451 // { int|sys|50|fhstat(const void *fhp, size_t fh_size, struct stat *sb); }\n\tSYS_PIPE2                = 453 // { int|sys||pipe2(int *fildes, int flags); }\n\tSYS_DUP3                 = 454 // { int|sys||dup3(int from, int to, int flags); }\n\tSYS_KQUEUE1              = 455 // { int|sys||kqueue1(int flags); }\n\tSYS_PACCEPT              = 456 // { int|sys||paccept(int s, struct sockaddr *name, socklen_t *anamelen, const sigset_t *mask, int flags); }\n\tSYS_LINKAT               = 457 // { int|sys||linkat(int fd1, const char *name1, int fd2, const char *name2, int flags); }\n\tSYS_RENAMEAT             = 458 // { int|sys||renameat(int fromfd, const char *from, int tofd, const char *to); }\n\tSYS_MKFIFOAT             = 459 // { int|sys||mkfifoat(int fd, const char *path, mode_t mode); }\n\tSYS_MKNODAT              = 460 // { int|sys||mknodat(int fd, const char *path, mode_t mode, uint32_t dev); }\n\tSYS_MKDIRAT              = 461 // { int|sys||mkdirat(int fd, const char *path, mode_t mode); }\n\tSYS_FACCESSAT            = 462 // { int|sys||faccessat(int fd, const char *path, int amode, int flag); }\n\tSYS_FCHMODAT             = 463 // { int|sys||fchmodat(int fd, const char *path, mode_t mode, int flag); }\n\tSYS_FCHOWNAT             = 464 // { int|sys||fchownat(int fd, const char *path, uid_t owner, gid_t group, int flag); }\n\tSYS_FEXECVE              = 465 // { int|sys||fexecve(int fd, char * const *argp, char * const *envp); }\n\tSYS_FSTATAT              = 466 // { int|sys||fstatat(int fd, const char *path, struct stat *buf, int flag); }\n\tSYS_UTIMENSAT            = 467 // { int|sys||utimensat(int fd, const char *path, const struct timespec *tptr, int flag); }\n\tSYS_OPENAT               = 468 // { int|sys||openat(int fd, const char *path, int oflags, ... mode_t mode); }\n\tSYS_READLINKAT           = 469 // { int|sys||readlinkat(int fd, const char *path, char *buf, size_t bufsize); }\n\tSYS_SYMLINKAT            = 470 // { int|sys||symlinkat(const char *path1, int fd, const char *path2); }\n\tSYS_UNLINKAT             = 471 // { int|sys||unlinkat(int fd, const char *path, int flag); }\n\tSYS_FUTIMENS             = 472 // { int|sys||futimens(int fd, const struct timespec *tptr); }\n\tSYS___QUOTACTL           = 473 // { int|sys||__quotactl(const char *path, struct quotactl_args *args); }\n\tSYS_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); }\n\tSYS_RECVMMSG             = 475 // { int|sys||recvmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags, struct timespec *timeout); }\n\tSYS_SENDMMSG             = 476 // { int|sys||sendmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags); }\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_netbsd_amd64.go",
    "content": "// go run mksysnum.go http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build amd64,netbsd\n\npackage unix\n\nconst (\n\tSYS_EXIT                 = 1   // { void|sys||exit(int rval); }\n\tSYS_FORK                 = 2   // { int|sys||fork(void); }\n\tSYS_READ                 = 3   // { ssize_t|sys||read(int fd, void *buf, size_t nbyte); }\n\tSYS_WRITE                = 4   // { ssize_t|sys||write(int fd, const void *buf, size_t nbyte); }\n\tSYS_OPEN                 = 5   // { int|sys||open(const char *path, int flags, ... mode_t mode); }\n\tSYS_CLOSE                = 6   // { int|sys||close(int fd); }\n\tSYS_LINK                 = 9   // { int|sys||link(const char *path, const char *link); }\n\tSYS_UNLINK               = 10  // { int|sys||unlink(const char *path); }\n\tSYS_CHDIR                = 12  // { int|sys||chdir(const char *path); }\n\tSYS_FCHDIR               = 13  // { int|sys||fchdir(int fd); }\n\tSYS_CHMOD                = 15  // { int|sys||chmod(const char *path, mode_t mode); }\n\tSYS_CHOWN                = 16  // { int|sys||chown(const char *path, uid_t uid, gid_t gid); }\n\tSYS_BREAK                = 17  // { int|sys||obreak(char *nsize); }\n\tSYS_GETPID               = 20  // { pid_t|sys||getpid_with_ppid(void); }\n\tSYS_UNMOUNT              = 22  // { int|sys||unmount(const char *path, int flags); }\n\tSYS_SETUID               = 23  // { int|sys||setuid(uid_t uid); }\n\tSYS_GETUID               = 24  // { uid_t|sys||getuid_with_euid(void); }\n\tSYS_GETEUID              = 25  // { uid_t|sys||geteuid(void); }\n\tSYS_PTRACE               = 26  // { int|sys||ptrace(int req, pid_t pid, void *addr, int data); }\n\tSYS_RECVMSG              = 27  // { ssize_t|sys||recvmsg(int s, struct msghdr *msg, int flags); }\n\tSYS_SENDMSG              = 28  // { ssize_t|sys||sendmsg(int s, const struct msghdr *msg, int flags); }\n\tSYS_RECVFROM             = 29  // { ssize_t|sys||recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); }\n\tSYS_ACCEPT               = 30  // { int|sys||accept(int s, struct sockaddr *name, socklen_t *anamelen); }\n\tSYS_GETPEERNAME          = 31  // { int|sys||getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); }\n\tSYS_GETSOCKNAME          = 32  // { int|sys||getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); }\n\tSYS_ACCESS               = 33  // { int|sys||access(const char *path, int flags); }\n\tSYS_CHFLAGS              = 34  // { int|sys||chflags(const char *path, u_long flags); }\n\tSYS_FCHFLAGS             = 35  // { int|sys||fchflags(int fd, u_long flags); }\n\tSYS_SYNC                 = 36  // { void|sys||sync(void); }\n\tSYS_KILL                 = 37  // { int|sys||kill(pid_t pid, int signum); }\n\tSYS_GETPPID              = 39  // { pid_t|sys||getppid(void); }\n\tSYS_DUP                  = 41  // { int|sys||dup(int fd); }\n\tSYS_PIPE                 = 42  // { int|sys||pipe(void); }\n\tSYS_GETEGID              = 43  // { gid_t|sys||getegid(void); }\n\tSYS_PROFIL               = 44  // { int|sys||profil(char *samples, size_t size, u_long offset, u_int scale); }\n\tSYS_KTRACE               = 45  // { int|sys||ktrace(const char *fname, int ops, int facs, pid_t pid); }\n\tSYS_GETGID               = 47  // { gid_t|sys||getgid_with_egid(void); }\n\tSYS___GETLOGIN           = 49  // { int|sys||__getlogin(char *namebuf, size_t namelen); }\n\tSYS___SETLOGIN           = 50  // { int|sys||__setlogin(const char *namebuf); }\n\tSYS_ACCT                 = 51  // { int|sys||acct(const char *path); }\n\tSYS_IOCTL                = 54  // { int|sys||ioctl(int fd, u_long com, ... void *data); }\n\tSYS_REVOKE               = 56  // { int|sys||revoke(const char *path); }\n\tSYS_SYMLINK              = 57  // { int|sys||symlink(const char *path, const char *link); }\n\tSYS_READLINK             = 58  // { ssize_t|sys||readlink(const char *path, char *buf, size_t count); }\n\tSYS_EXECVE               = 59  // { int|sys||execve(const char *path, char * const *argp, char * const *envp); }\n\tSYS_UMASK                = 60  // { mode_t|sys||umask(mode_t newmask); }\n\tSYS_CHROOT               = 61  // { int|sys||chroot(const char *path); }\n\tSYS_VFORK                = 66  // { int|sys||vfork(void); }\n\tSYS_SBRK                 = 69  // { int|sys||sbrk(intptr_t incr); }\n\tSYS_SSTK                 = 70  // { int|sys||sstk(int incr); }\n\tSYS_VADVISE              = 72  // { int|sys||ovadvise(int anom); }\n\tSYS_MUNMAP               = 73  // { int|sys||munmap(void *addr, size_t len); }\n\tSYS_MPROTECT             = 74  // { int|sys||mprotect(void *addr, size_t len, int prot); }\n\tSYS_MADVISE              = 75  // { int|sys||madvise(void *addr, size_t len, int behav); }\n\tSYS_MINCORE              = 78  // { int|sys||mincore(void *addr, size_t len, char *vec); }\n\tSYS_GETGROUPS            = 79  // { int|sys||getgroups(int gidsetsize, gid_t *gidset); }\n\tSYS_SETGROUPS            = 80  // { int|sys||setgroups(int gidsetsize, const gid_t *gidset); }\n\tSYS_GETPGRP              = 81  // { int|sys||getpgrp(void); }\n\tSYS_SETPGID              = 82  // { int|sys||setpgid(pid_t pid, pid_t pgid); }\n\tSYS_DUP2                 = 90  // { int|sys||dup2(int from, int to); }\n\tSYS_FCNTL                = 92  // { int|sys||fcntl(int fd, int cmd, ... void *arg); }\n\tSYS_FSYNC                = 95  // { int|sys||fsync(int fd); }\n\tSYS_SETPRIORITY          = 96  // { int|sys||setpriority(int which, id_t who, int prio); }\n\tSYS_CONNECT              = 98  // { int|sys||connect(int s, const struct sockaddr *name, socklen_t namelen); }\n\tSYS_GETPRIORITY          = 100 // { int|sys||getpriority(int which, id_t who); }\n\tSYS_BIND                 = 104 // { int|sys||bind(int s, const struct sockaddr *name, socklen_t namelen); }\n\tSYS_SETSOCKOPT           = 105 // { int|sys||setsockopt(int s, int level, int name, const void *val, socklen_t valsize); }\n\tSYS_LISTEN               = 106 // { int|sys||listen(int s, int backlog); }\n\tSYS_GETSOCKOPT           = 118 // { int|sys||getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); }\n\tSYS_READV                = 120 // { ssize_t|sys||readv(int fd, const struct iovec *iovp, int iovcnt); }\n\tSYS_WRITEV               = 121 // { ssize_t|sys||writev(int fd, const struct iovec *iovp, int iovcnt); }\n\tSYS_FCHOWN               = 123 // { int|sys||fchown(int fd, uid_t uid, gid_t gid); }\n\tSYS_FCHMOD               = 124 // { int|sys||fchmod(int fd, mode_t mode); }\n\tSYS_SETREUID             = 126 // { int|sys||setreuid(uid_t ruid, uid_t euid); }\n\tSYS_SETREGID             = 127 // { int|sys||setregid(gid_t rgid, gid_t egid); }\n\tSYS_RENAME               = 128 // { int|sys||rename(const char *from, const char *to); }\n\tSYS_FLOCK                = 131 // { int|sys||flock(int fd, int how); }\n\tSYS_MKFIFO               = 132 // { int|sys||mkfifo(const char *path, mode_t mode); }\n\tSYS_SENDTO               = 133 // { ssize_t|sys||sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); }\n\tSYS_SHUTDOWN             = 134 // { int|sys||shutdown(int s, int how); }\n\tSYS_SOCKETPAIR           = 135 // { int|sys||socketpair(int domain, int type, int protocol, int *rsv); }\n\tSYS_MKDIR                = 136 // { int|sys||mkdir(const char *path, mode_t mode); }\n\tSYS_RMDIR                = 137 // { int|sys||rmdir(const char *path); }\n\tSYS_SETSID               = 147 // { int|sys||setsid(void); }\n\tSYS_SYSARCH              = 165 // { int|sys||sysarch(int op, void *parms); }\n\tSYS_PREAD                = 173 // { ssize_t|sys||pread(int fd, void *buf, size_t nbyte, int PAD, off_t offset); }\n\tSYS_PWRITE               = 174 // { ssize_t|sys||pwrite(int fd, const void *buf, size_t nbyte, int PAD, off_t offset); }\n\tSYS_NTP_ADJTIME          = 176 // { int|sys||ntp_adjtime(struct timex *tp); }\n\tSYS_SETGID               = 181 // { int|sys||setgid(gid_t gid); }\n\tSYS_SETEGID              = 182 // { int|sys||setegid(gid_t egid); }\n\tSYS_SETEUID              = 183 // { int|sys||seteuid(uid_t euid); }\n\tSYS_PATHCONF             = 191 // { long|sys||pathconf(const char *path, int name); }\n\tSYS_FPATHCONF            = 192 // { long|sys||fpathconf(int fd, int name); }\n\tSYS_GETRLIMIT            = 194 // { int|sys||getrlimit(int which, struct rlimit *rlp); }\n\tSYS_SETRLIMIT            = 195 // { int|sys||setrlimit(int which, const struct rlimit *rlp); }\n\tSYS_MMAP                 = 197 // { void *|sys||mmap(void *addr, size_t len, int prot, int flags, int fd, long PAD, off_t pos); }\n\tSYS_LSEEK                = 199 // { off_t|sys||lseek(int fd, int PAD, off_t offset, int whence); }\n\tSYS_TRUNCATE             = 200 // { int|sys||truncate(const char *path, int PAD, off_t length); }\n\tSYS_FTRUNCATE            = 201 // { int|sys||ftruncate(int fd, int PAD, off_t length); }\n\tSYS___SYSCTL             = 202 // { int|sys||__sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, const void *new, size_t newlen); }\n\tSYS_MLOCK                = 203 // { int|sys||mlock(const void *addr, size_t len); }\n\tSYS_MUNLOCK              = 204 // { int|sys||munlock(const void *addr, size_t len); }\n\tSYS_UNDELETE             = 205 // { int|sys||undelete(const char *path); }\n\tSYS_GETPGID              = 207 // { pid_t|sys||getpgid(pid_t pid); }\n\tSYS_REBOOT               = 208 // { int|sys||reboot(int opt, char *bootstr); }\n\tSYS_POLL                 = 209 // { int|sys||poll(struct pollfd *fds, u_int nfds, int timeout); }\n\tSYS_SEMGET               = 221 // { int|sys||semget(key_t key, int nsems, int semflg); }\n\tSYS_SEMOP                = 222 // { int|sys||semop(int semid, struct sembuf *sops, size_t nsops); }\n\tSYS_SEMCONFIG            = 223 // { int|sys||semconfig(int flag); }\n\tSYS_MSGGET               = 225 // { int|sys||msgget(key_t key, int msgflg); }\n\tSYS_MSGSND               = 226 // { int|sys||msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }\n\tSYS_MSGRCV               = 227 // { ssize_t|sys||msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }\n\tSYS_SHMAT                = 228 // { void *|sys||shmat(int shmid, const void *shmaddr, int shmflg); }\n\tSYS_SHMDT                = 230 // { int|sys||shmdt(const void *shmaddr); }\n\tSYS_SHMGET               = 231 // { int|sys||shmget(key_t key, size_t size, int shmflg); }\n\tSYS_TIMER_CREATE         = 235 // { int|sys||timer_create(clockid_t clock_id, struct sigevent *evp, timer_t *timerid); }\n\tSYS_TIMER_DELETE         = 236 // { int|sys||timer_delete(timer_t timerid); }\n\tSYS_TIMER_GETOVERRUN     = 239 // { int|sys||timer_getoverrun(timer_t timerid); }\n\tSYS_FDATASYNC            = 241 // { int|sys||fdatasync(int fd); }\n\tSYS_MLOCKALL             = 242 // { int|sys||mlockall(int flags); }\n\tSYS_MUNLOCKALL           = 243 // { int|sys||munlockall(void); }\n\tSYS_SIGQUEUEINFO         = 245 // { int|sys||sigqueueinfo(pid_t pid, const siginfo_t *info); }\n\tSYS_MODCTL               = 246 // { int|sys||modctl(int cmd, void *arg); }\n\tSYS___POSIX_RENAME       = 270 // { int|sys||__posix_rename(const char *from, const char *to); }\n\tSYS_SWAPCTL              = 271 // { int|sys||swapctl(int cmd, void *arg, int misc); }\n\tSYS_MINHERIT             = 273 // { int|sys||minherit(void *addr, size_t len, int inherit); }\n\tSYS_LCHMOD               = 274 // { int|sys||lchmod(const char *path, mode_t mode); }\n\tSYS_LCHOWN               = 275 // { int|sys||lchown(const char *path, uid_t uid, gid_t gid); }\n\tSYS_MSYNC                = 277 // { int|sys|13|msync(void *addr, size_t len, int flags); }\n\tSYS___POSIX_CHOWN        = 283 // { int|sys||__posix_chown(const char *path, uid_t uid, gid_t gid); }\n\tSYS___POSIX_FCHOWN       = 284 // { int|sys||__posix_fchown(int fd, uid_t uid, gid_t gid); }\n\tSYS___POSIX_LCHOWN       = 285 // { int|sys||__posix_lchown(const char *path, uid_t uid, gid_t gid); }\n\tSYS_GETSID               = 286 // { pid_t|sys||getsid(pid_t pid); }\n\tSYS___CLONE              = 287 // { pid_t|sys||__clone(int flags, void *stack); }\n\tSYS_FKTRACE              = 288 // { int|sys||fktrace(int fd, int ops, int facs, pid_t pid); }\n\tSYS_PREADV               = 289 // { ssize_t|sys||preadv(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); }\n\tSYS_PWRITEV              = 290 // { ssize_t|sys||pwritev(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); }\n\tSYS___GETCWD             = 296 // { int|sys||__getcwd(char *bufp, size_t length); }\n\tSYS_FCHROOT              = 297 // { int|sys||fchroot(int fd); }\n\tSYS_LCHFLAGS             = 304 // { int|sys||lchflags(const char *path, u_long flags); }\n\tSYS_ISSETUGID            = 305 // { int|sys||issetugid(void); }\n\tSYS_UTRACE               = 306 // { int|sys||utrace(const char *label, void *addr, size_t len); }\n\tSYS_GETCONTEXT           = 307 // { int|sys||getcontext(struct __ucontext *ucp); }\n\tSYS_SETCONTEXT           = 308 // { int|sys||setcontext(const struct __ucontext *ucp); }\n\tSYS__LWP_CREATE          = 309 // { int|sys||_lwp_create(const struct __ucontext *ucp, u_long flags, lwpid_t *new_lwp); }\n\tSYS__LWP_EXIT            = 310 // { int|sys||_lwp_exit(void); }\n\tSYS__LWP_SELF            = 311 // { lwpid_t|sys||_lwp_self(void); }\n\tSYS__LWP_WAIT            = 312 // { int|sys||_lwp_wait(lwpid_t wait_for, lwpid_t *departed); }\n\tSYS__LWP_SUSPEND         = 313 // { int|sys||_lwp_suspend(lwpid_t target); }\n\tSYS__LWP_CONTINUE        = 314 // { int|sys||_lwp_continue(lwpid_t target); }\n\tSYS__LWP_WAKEUP          = 315 // { int|sys||_lwp_wakeup(lwpid_t target); }\n\tSYS__LWP_GETPRIVATE      = 316 // { void *|sys||_lwp_getprivate(void); }\n\tSYS__LWP_SETPRIVATE      = 317 // { void|sys||_lwp_setprivate(void *ptr); }\n\tSYS__LWP_KILL            = 318 // { int|sys||_lwp_kill(lwpid_t target, int signo); }\n\tSYS__LWP_DETACH          = 319 // { int|sys||_lwp_detach(lwpid_t target); }\n\tSYS__LWP_UNPARK          = 321 // { int|sys||_lwp_unpark(lwpid_t target, const void *hint); }\n\tSYS__LWP_UNPARK_ALL      = 322 // { ssize_t|sys||_lwp_unpark_all(const lwpid_t *targets, size_t ntargets, const void *hint); }\n\tSYS__LWP_SETNAME         = 323 // { int|sys||_lwp_setname(lwpid_t target, const char *name); }\n\tSYS__LWP_GETNAME         = 324 // { int|sys||_lwp_getname(lwpid_t target, char *name, size_t len); }\n\tSYS__LWP_CTL             = 325 // { int|sys||_lwp_ctl(int features, struct lwpctl **address); }\n\tSYS___SIGACTION_SIGTRAMP = 340 // { int|sys||__sigaction_sigtramp(int signum, const struct sigaction *nsa, struct sigaction *osa, const void *tramp, int vers); }\n\tSYS_PMC_GET_INFO         = 341 // { int|sys||pmc_get_info(int ctr, int op, void *args); }\n\tSYS_PMC_CONTROL          = 342 // { int|sys||pmc_control(int ctr, int op, void *args); }\n\tSYS_RASCTL               = 343 // { int|sys||rasctl(void *addr, size_t len, int op); }\n\tSYS_KQUEUE               = 344 // { int|sys||kqueue(void); }\n\tSYS__SCHED_SETPARAM      = 346 // { int|sys||_sched_setparam(pid_t pid, lwpid_t lid, int policy, const struct sched_param *params); }\n\tSYS__SCHED_GETPARAM      = 347 // { int|sys||_sched_getparam(pid_t pid, lwpid_t lid, int *policy, struct sched_param *params); }\n\tSYS__SCHED_SETAFFINITY   = 348 // { int|sys||_sched_setaffinity(pid_t pid, lwpid_t lid, size_t size, const cpuset_t *cpuset); }\n\tSYS__SCHED_GETAFFINITY   = 349 // { int|sys||_sched_getaffinity(pid_t pid, lwpid_t lid, size_t size, cpuset_t *cpuset); }\n\tSYS_SCHED_YIELD          = 350 // { int|sys||sched_yield(void); }\n\tSYS_FSYNC_RANGE          = 354 // { int|sys||fsync_range(int fd, int flags, off_t start, off_t length); }\n\tSYS_UUIDGEN              = 355 // { int|sys||uuidgen(struct uuid *store, int count); }\n\tSYS_GETVFSSTAT           = 356 // { int|sys||getvfsstat(struct statvfs *buf, size_t bufsize, int flags); }\n\tSYS_STATVFS1             = 357 // { int|sys||statvfs1(const char *path, struct statvfs *buf, int flags); }\n\tSYS_FSTATVFS1            = 358 // { int|sys||fstatvfs1(int fd, struct statvfs *buf, int flags); }\n\tSYS_EXTATTRCTL           = 360 // { int|sys||extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); }\n\tSYS_EXTATTR_SET_FILE     = 361 // { int|sys||extattr_set_file(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); }\n\tSYS_EXTATTR_GET_FILE     = 362 // { ssize_t|sys||extattr_get_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_DELETE_FILE  = 363 // { int|sys||extattr_delete_file(const char *path, int attrnamespace, const char *attrname); }\n\tSYS_EXTATTR_SET_FD       = 364 // { int|sys||extattr_set_fd(int fd, int attrnamespace, const char *attrname, const void *data, size_t nbytes); }\n\tSYS_EXTATTR_GET_FD       = 365 // { ssize_t|sys||extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_DELETE_FD    = 366 // { int|sys||extattr_delete_fd(int fd, int attrnamespace, const char *attrname); }\n\tSYS_EXTATTR_SET_LINK     = 367 // { int|sys||extattr_set_link(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); }\n\tSYS_EXTATTR_GET_LINK     = 368 // { ssize_t|sys||extattr_get_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_DELETE_LINK  = 369 // { int|sys||extattr_delete_link(const char *path, int attrnamespace, const char *attrname); }\n\tSYS_EXTATTR_LIST_FD      = 370 // { ssize_t|sys||extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); }\n\tSYS_EXTATTR_LIST_FILE    = 371 // { ssize_t|sys||extattr_list_file(const char *path, int attrnamespace, void *data, size_t nbytes); }\n\tSYS_EXTATTR_LIST_LINK    = 372 // { ssize_t|sys||extattr_list_link(const char *path, int attrnamespace, void *data, size_t nbytes); }\n\tSYS_SETXATTR             = 375 // { int|sys||setxattr(const char *path, const char *name, const void *value, size_t size, int flags); }\n\tSYS_LSETXATTR            = 376 // { int|sys||lsetxattr(const char *path, const char *name, const void *value, size_t size, int flags); }\n\tSYS_FSETXATTR            = 377 // { int|sys||fsetxattr(int fd, const char *name, const void *value, size_t size, int flags); }\n\tSYS_GETXATTR             = 378 // { int|sys||getxattr(const char *path, const char *name, void *value, size_t size); }\n\tSYS_LGETXATTR            = 379 // { int|sys||lgetxattr(const char *path, const char *name, void *value, size_t size); }\n\tSYS_FGETXATTR            = 380 // { int|sys||fgetxattr(int fd, const char *name, void *value, size_t size); }\n\tSYS_LISTXATTR            = 381 // { int|sys||listxattr(const char *path, char *list, size_t size); }\n\tSYS_LLISTXATTR           = 382 // { int|sys||llistxattr(const char *path, char *list, size_t size); }\n\tSYS_FLISTXATTR           = 383 // { int|sys||flistxattr(int fd, char *list, size_t size); }\n\tSYS_REMOVEXATTR          = 384 // { int|sys||removexattr(const char *path, const char *name); }\n\tSYS_LREMOVEXATTR         = 385 // { int|sys||lremovexattr(const char *path, const char *name); }\n\tSYS_FREMOVEXATTR         = 386 // { int|sys||fremovexattr(int fd, const char *name); }\n\tSYS_GETDENTS             = 390 // { int|sys|30|getdents(int fd, char *buf, size_t count); }\n\tSYS_SOCKET               = 394 // { int|sys|30|socket(int domain, int type, int protocol); }\n\tSYS_GETFH                = 395 // { int|sys|30|getfh(const char *fname, void *fhp, size_t *fh_size); }\n\tSYS_MOUNT                = 410 // { int|sys|50|mount(const char *type, const char *path, int flags, void *data, size_t data_len); }\n\tSYS_MREMAP               = 411 // { void *|sys||mremap(void *old_address, size_t old_size, void *new_address, size_t new_size, int flags); }\n\tSYS_PSET_CREATE          = 412 // { int|sys||pset_create(psetid_t *psid); }\n\tSYS_PSET_DESTROY         = 413 // { int|sys||pset_destroy(psetid_t psid); }\n\tSYS_PSET_ASSIGN          = 414 // { int|sys||pset_assign(psetid_t psid, cpuid_t cpuid, psetid_t *opsid); }\n\tSYS__PSET_BIND           = 415 // { int|sys||_pset_bind(idtype_t idtype, id_t first_id, id_t second_id, psetid_t psid, psetid_t *opsid); }\n\tSYS_POSIX_FADVISE        = 416 // { int|sys|50|posix_fadvise(int fd, int PAD, off_t offset, off_t len, int advice); }\n\tSYS_SELECT               = 417 // { int|sys|50|select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }\n\tSYS_GETTIMEOFDAY         = 418 // { int|sys|50|gettimeofday(struct timeval *tp, void *tzp); }\n\tSYS_SETTIMEOFDAY         = 419 // { int|sys|50|settimeofday(const struct timeval *tv, const void *tzp); }\n\tSYS_UTIMES               = 420 // { int|sys|50|utimes(const char *path, const struct timeval *tptr); }\n\tSYS_ADJTIME              = 421 // { int|sys|50|adjtime(const struct timeval *delta, struct timeval *olddelta); }\n\tSYS_FUTIMES              = 423 // { int|sys|50|futimes(int fd, const struct timeval *tptr); }\n\tSYS_LUTIMES              = 424 // { int|sys|50|lutimes(const char *path, const struct timeval *tptr); }\n\tSYS_SETITIMER            = 425 // { int|sys|50|setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); }\n\tSYS_GETITIMER            = 426 // { int|sys|50|getitimer(int which, struct itimerval *itv); }\n\tSYS_CLOCK_GETTIME        = 427 // { int|sys|50|clock_gettime(clockid_t clock_id, struct timespec *tp); }\n\tSYS_CLOCK_SETTIME        = 428 // { int|sys|50|clock_settime(clockid_t clock_id, const struct timespec *tp); }\n\tSYS_CLOCK_GETRES         = 429 // { int|sys|50|clock_getres(clockid_t clock_id, struct timespec *tp); }\n\tSYS_NANOSLEEP            = 430 // { int|sys|50|nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }\n\tSYS___SIGTIMEDWAIT       = 431 // { int|sys|50|__sigtimedwait(const sigset_t *set, siginfo_t *info, struct timespec *timeout); }\n\tSYS__LWP_PARK            = 434 // { int|sys|50|_lwp_park(const struct timespec *ts, lwpid_t unpark, const void *hint, const void *unparkhint); }\n\tSYS_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); }\n\tSYS_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); }\n\tSYS_POLLTS               = 437 // { int|sys|50|pollts(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); }\n\tSYS_STAT                 = 439 // { int|sys|50|stat(const char *path, struct stat *ub); }\n\tSYS_FSTAT                = 440 // { int|sys|50|fstat(int fd, struct stat *sb); }\n\tSYS_LSTAT                = 441 // { int|sys|50|lstat(const char *path, struct stat *ub); }\n\tSYS___SEMCTL             = 442 // { int|sys|50|__semctl(int semid, int semnum, int cmd, ... union __semun *arg); }\n\tSYS_SHMCTL               = 443 // { int|sys|50|shmctl(int shmid, int cmd, struct shmid_ds *buf); }\n\tSYS_MSGCTL               = 444 // { int|sys|50|msgctl(int msqid, int cmd, struct msqid_ds *buf); }\n\tSYS_GETRUSAGE            = 445 // { int|sys|50|getrusage(int who, struct rusage *rusage); }\n\tSYS_TIMER_SETTIME        = 446 // { int|sys|50|timer_settime(timer_t timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); }\n\tSYS_TIMER_GETTIME        = 447 // { int|sys|50|timer_gettime(timer_t timerid, struct itimerspec *value); }\n\tSYS_NTP_GETTIME          = 448 // { int|sys|50|ntp_gettime(struct ntptimeval *ntvp); }\n\tSYS_WAIT4                = 449 // { int|sys|50|wait4(pid_t pid, int *status, int options, struct rusage *rusage); }\n\tSYS_MKNOD                = 450 // { int|sys|50|mknod(const char *path, mode_t mode, dev_t dev); }\n\tSYS_FHSTAT               = 451 // { int|sys|50|fhstat(const void *fhp, size_t fh_size, struct stat *sb); }\n\tSYS_PIPE2                = 453 // { int|sys||pipe2(int *fildes, int flags); }\n\tSYS_DUP3                 = 454 // { int|sys||dup3(int from, int to, int flags); }\n\tSYS_KQUEUE1              = 455 // { int|sys||kqueue1(int flags); }\n\tSYS_PACCEPT              = 456 // { int|sys||paccept(int s, struct sockaddr *name, socklen_t *anamelen, const sigset_t *mask, int flags); }\n\tSYS_LINKAT               = 457 // { int|sys||linkat(int fd1, const char *name1, int fd2, const char *name2, int flags); }\n\tSYS_RENAMEAT             = 458 // { int|sys||renameat(int fromfd, const char *from, int tofd, const char *to); }\n\tSYS_MKFIFOAT             = 459 // { int|sys||mkfifoat(int fd, const char *path, mode_t mode); }\n\tSYS_MKNODAT              = 460 // { int|sys||mknodat(int fd, const char *path, mode_t mode, uint32_t dev); }\n\tSYS_MKDIRAT              = 461 // { int|sys||mkdirat(int fd, const char *path, mode_t mode); }\n\tSYS_FACCESSAT            = 462 // { int|sys||faccessat(int fd, const char *path, int amode, int flag); }\n\tSYS_FCHMODAT             = 463 // { int|sys||fchmodat(int fd, const char *path, mode_t mode, int flag); }\n\tSYS_FCHOWNAT             = 464 // { int|sys||fchownat(int fd, const char *path, uid_t owner, gid_t group, int flag); }\n\tSYS_FEXECVE              = 465 // { int|sys||fexecve(int fd, char * const *argp, char * const *envp); }\n\tSYS_FSTATAT              = 466 // { int|sys||fstatat(int fd, const char *path, struct stat *buf, int flag); }\n\tSYS_UTIMENSAT            = 467 // { int|sys||utimensat(int fd, const char *path, const struct timespec *tptr, int flag); }\n\tSYS_OPENAT               = 468 // { int|sys||openat(int fd, const char *path, int oflags, ... mode_t mode); }\n\tSYS_READLINKAT           = 469 // { int|sys||readlinkat(int fd, const char *path, char *buf, size_t bufsize); }\n\tSYS_SYMLINKAT            = 470 // { int|sys||symlinkat(const char *path1, int fd, const char *path2); }\n\tSYS_UNLINKAT             = 471 // { int|sys||unlinkat(int fd, const char *path, int flag); }\n\tSYS_FUTIMENS             = 472 // { int|sys||futimens(int fd, const struct timespec *tptr); }\n\tSYS___QUOTACTL           = 473 // { int|sys||__quotactl(const char *path, struct quotactl_args *args); }\n\tSYS_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); }\n\tSYS_RECVMMSG             = 475 // { int|sys||recvmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags, struct timespec *timeout); }\n\tSYS_SENDMMSG             = 476 // { int|sys||sendmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags); }\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm.go",
    "content": "// go run mksysnum.go http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build arm,netbsd\n\npackage unix\n\nconst (\n\tSYS_EXIT                 = 1   // { void|sys||exit(int rval); }\n\tSYS_FORK                 = 2   // { int|sys||fork(void); }\n\tSYS_READ                 = 3   // { ssize_t|sys||read(int fd, void *buf, size_t nbyte); }\n\tSYS_WRITE                = 4   // { ssize_t|sys||write(int fd, const void *buf, size_t nbyte); }\n\tSYS_OPEN                 = 5   // { int|sys||open(const char *path, int flags, ... mode_t mode); }\n\tSYS_CLOSE                = 6   // { int|sys||close(int fd); }\n\tSYS_LINK                 = 9   // { int|sys||link(const char *path, const char *link); }\n\tSYS_UNLINK               = 10  // { int|sys||unlink(const char *path); }\n\tSYS_CHDIR                = 12  // { int|sys||chdir(const char *path); }\n\tSYS_FCHDIR               = 13  // { int|sys||fchdir(int fd); }\n\tSYS_CHMOD                = 15  // { int|sys||chmod(const char *path, mode_t mode); }\n\tSYS_CHOWN                = 16  // { int|sys||chown(const char *path, uid_t uid, gid_t gid); }\n\tSYS_BREAK                = 17  // { int|sys||obreak(char *nsize); }\n\tSYS_GETPID               = 20  // { pid_t|sys||getpid_with_ppid(void); }\n\tSYS_UNMOUNT              = 22  // { int|sys||unmount(const char *path, int flags); }\n\tSYS_SETUID               = 23  // { int|sys||setuid(uid_t uid); }\n\tSYS_GETUID               = 24  // { uid_t|sys||getuid_with_euid(void); }\n\tSYS_GETEUID              = 25  // { uid_t|sys||geteuid(void); }\n\tSYS_PTRACE               = 26  // { int|sys||ptrace(int req, pid_t pid, void *addr, int data); }\n\tSYS_RECVMSG              = 27  // { ssize_t|sys||recvmsg(int s, struct msghdr *msg, int flags); }\n\tSYS_SENDMSG              = 28  // { ssize_t|sys||sendmsg(int s, const struct msghdr *msg, int flags); }\n\tSYS_RECVFROM             = 29  // { ssize_t|sys||recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); }\n\tSYS_ACCEPT               = 30  // { int|sys||accept(int s, struct sockaddr *name, socklen_t *anamelen); }\n\tSYS_GETPEERNAME          = 31  // { int|sys||getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); }\n\tSYS_GETSOCKNAME          = 32  // { int|sys||getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); }\n\tSYS_ACCESS               = 33  // { int|sys||access(const char *path, int flags); }\n\tSYS_CHFLAGS              = 34  // { int|sys||chflags(const char *path, u_long flags); }\n\tSYS_FCHFLAGS             = 35  // { int|sys||fchflags(int fd, u_long flags); }\n\tSYS_SYNC                 = 36  // { void|sys||sync(void); }\n\tSYS_KILL                 = 37  // { int|sys||kill(pid_t pid, int signum); }\n\tSYS_GETPPID              = 39  // { pid_t|sys||getppid(void); }\n\tSYS_DUP                  = 41  // { int|sys||dup(int fd); }\n\tSYS_PIPE                 = 42  // { int|sys||pipe(void); }\n\tSYS_GETEGID              = 43  // { gid_t|sys||getegid(void); }\n\tSYS_PROFIL               = 44  // { int|sys||profil(char *samples, size_t size, u_long offset, u_int scale); }\n\tSYS_KTRACE               = 45  // { int|sys||ktrace(const char *fname, int ops, int facs, pid_t pid); }\n\tSYS_GETGID               = 47  // { gid_t|sys||getgid_with_egid(void); }\n\tSYS___GETLOGIN           = 49  // { int|sys||__getlogin(char *namebuf, size_t namelen); }\n\tSYS___SETLOGIN           = 50  // { int|sys||__setlogin(const char *namebuf); }\n\tSYS_ACCT                 = 51  // { int|sys||acct(const char *path); }\n\tSYS_IOCTL                = 54  // { int|sys||ioctl(int fd, u_long com, ... void *data); }\n\tSYS_REVOKE               = 56  // { int|sys||revoke(const char *path); }\n\tSYS_SYMLINK              = 57  // { int|sys||symlink(const char *path, const char *link); }\n\tSYS_READLINK             = 58  // { ssize_t|sys||readlink(const char *path, char *buf, size_t count); }\n\tSYS_EXECVE               = 59  // { int|sys||execve(const char *path, char * const *argp, char * const *envp); }\n\tSYS_UMASK                = 60  // { mode_t|sys||umask(mode_t newmask); }\n\tSYS_CHROOT               = 61  // { int|sys||chroot(const char *path); }\n\tSYS_VFORK                = 66  // { int|sys||vfork(void); }\n\tSYS_SBRK                 = 69  // { int|sys||sbrk(intptr_t incr); }\n\tSYS_SSTK                 = 70  // { int|sys||sstk(int incr); }\n\tSYS_VADVISE              = 72  // { int|sys||ovadvise(int anom); }\n\tSYS_MUNMAP               = 73  // { int|sys||munmap(void *addr, size_t len); }\n\tSYS_MPROTECT             = 74  // { int|sys||mprotect(void *addr, size_t len, int prot); }\n\tSYS_MADVISE              = 75  // { int|sys||madvise(void *addr, size_t len, int behav); }\n\tSYS_MINCORE              = 78  // { int|sys||mincore(void *addr, size_t len, char *vec); }\n\tSYS_GETGROUPS            = 79  // { int|sys||getgroups(int gidsetsize, gid_t *gidset); }\n\tSYS_SETGROUPS            = 80  // { int|sys||setgroups(int gidsetsize, const gid_t *gidset); }\n\tSYS_GETPGRP              = 81  // { int|sys||getpgrp(void); }\n\tSYS_SETPGID              = 82  // { int|sys||setpgid(pid_t pid, pid_t pgid); }\n\tSYS_DUP2                 = 90  // { int|sys||dup2(int from, int to); }\n\tSYS_FCNTL                = 92  // { int|sys||fcntl(int fd, int cmd, ... void *arg); }\n\tSYS_FSYNC                = 95  // { int|sys||fsync(int fd); }\n\tSYS_SETPRIORITY          = 96  // { int|sys||setpriority(int which, id_t who, int prio); }\n\tSYS_CONNECT              = 98  // { int|sys||connect(int s, const struct sockaddr *name, socklen_t namelen); }\n\tSYS_GETPRIORITY          = 100 // { int|sys||getpriority(int which, id_t who); }\n\tSYS_BIND                 = 104 // { int|sys||bind(int s, const struct sockaddr *name, socklen_t namelen); }\n\tSYS_SETSOCKOPT           = 105 // { int|sys||setsockopt(int s, int level, int name, const void *val, socklen_t valsize); }\n\tSYS_LISTEN               = 106 // { int|sys||listen(int s, int backlog); }\n\tSYS_GETSOCKOPT           = 118 // { int|sys||getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); }\n\tSYS_READV                = 120 // { ssize_t|sys||readv(int fd, const struct iovec *iovp, int iovcnt); }\n\tSYS_WRITEV               = 121 // { ssize_t|sys||writev(int fd, const struct iovec *iovp, int iovcnt); }\n\tSYS_FCHOWN               = 123 // { int|sys||fchown(int fd, uid_t uid, gid_t gid); }\n\tSYS_FCHMOD               = 124 // { int|sys||fchmod(int fd, mode_t mode); }\n\tSYS_SETREUID             = 126 // { int|sys||setreuid(uid_t ruid, uid_t euid); }\n\tSYS_SETREGID             = 127 // { int|sys||setregid(gid_t rgid, gid_t egid); }\n\tSYS_RENAME               = 128 // { int|sys||rename(const char *from, const char *to); }\n\tSYS_FLOCK                = 131 // { int|sys||flock(int fd, int how); }\n\tSYS_MKFIFO               = 132 // { int|sys||mkfifo(const char *path, mode_t mode); }\n\tSYS_SENDTO               = 133 // { ssize_t|sys||sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); }\n\tSYS_SHUTDOWN             = 134 // { int|sys||shutdown(int s, int how); }\n\tSYS_SOCKETPAIR           = 135 // { int|sys||socketpair(int domain, int type, int protocol, int *rsv); }\n\tSYS_MKDIR                = 136 // { int|sys||mkdir(const char *path, mode_t mode); }\n\tSYS_RMDIR                = 137 // { int|sys||rmdir(const char *path); }\n\tSYS_SETSID               = 147 // { int|sys||setsid(void); }\n\tSYS_SYSARCH              = 165 // { int|sys||sysarch(int op, void *parms); }\n\tSYS_PREAD                = 173 // { ssize_t|sys||pread(int fd, void *buf, size_t nbyte, int PAD, off_t offset); }\n\tSYS_PWRITE               = 174 // { ssize_t|sys||pwrite(int fd, const void *buf, size_t nbyte, int PAD, off_t offset); }\n\tSYS_NTP_ADJTIME          = 176 // { int|sys||ntp_adjtime(struct timex *tp); }\n\tSYS_SETGID               = 181 // { int|sys||setgid(gid_t gid); }\n\tSYS_SETEGID              = 182 // { int|sys||setegid(gid_t egid); }\n\tSYS_SETEUID              = 183 // { int|sys||seteuid(uid_t euid); }\n\tSYS_PATHCONF             = 191 // { long|sys||pathconf(const char *path, int name); }\n\tSYS_FPATHCONF            = 192 // { long|sys||fpathconf(int fd, int name); }\n\tSYS_GETRLIMIT            = 194 // { int|sys||getrlimit(int which, struct rlimit *rlp); }\n\tSYS_SETRLIMIT            = 195 // { int|sys||setrlimit(int which, const struct rlimit *rlp); }\n\tSYS_MMAP                 = 197 // { void *|sys||mmap(void *addr, size_t len, int prot, int flags, int fd, long PAD, off_t pos); }\n\tSYS_LSEEK                = 199 // { off_t|sys||lseek(int fd, int PAD, off_t offset, int whence); }\n\tSYS_TRUNCATE             = 200 // { int|sys||truncate(const char *path, int PAD, off_t length); }\n\tSYS_FTRUNCATE            = 201 // { int|sys||ftruncate(int fd, int PAD, off_t length); }\n\tSYS___SYSCTL             = 202 // { int|sys||__sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, const void *new, size_t newlen); }\n\tSYS_MLOCK                = 203 // { int|sys||mlock(const void *addr, size_t len); }\n\tSYS_MUNLOCK              = 204 // { int|sys||munlock(const void *addr, size_t len); }\n\tSYS_UNDELETE             = 205 // { int|sys||undelete(const char *path); }\n\tSYS_GETPGID              = 207 // { pid_t|sys||getpgid(pid_t pid); }\n\tSYS_REBOOT               = 208 // { int|sys||reboot(int opt, char *bootstr); }\n\tSYS_POLL                 = 209 // { int|sys||poll(struct pollfd *fds, u_int nfds, int timeout); }\n\tSYS_SEMGET               = 221 // { int|sys||semget(key_t key, int nsems, int semflg); }\n\tSYS_SEMOP                = 222 // { int|sys||semop(int semid, struct sembuf *sops, size_t nsops); }\n\tSYS_SEMCONFIG            = 223 // { int|sys||semconfig(int flag); }\n\tSYS_MSGGET               = 225 // { int|sys||msgget(key_t key, int msgflg); }\n\tSYS_MSGSND               = 226 // { int|sys||msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }\n\tSYS_MSGRCV               = 227 // { ssize_t|sys||msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }\n\tSYS_SHMAT                = 228 // { void *|sys||shmat(int shmid, const void *shmaddr, int shmflg); }\n\tSYS_SHMDT                = 230 // { int|sys||shmdt(const void *shmaddr); }\n\tSYS_SHMGET               = 231 // { int|sys||shmget(key_t key, size_t size, int shmflg); }\n\tSYS_TIMER_CREATE         = 235 // { int|sys||timer_create(clockid_t clock_id, struct sigevent *evp, timer_t *timerid); }\n\tSYS_TIMER_DELETE         = 236 // { int|sys||timer_delete(timer_t timerid); }\n\tSYS_TIMER_GETOVERRUN     = 239 // { int|sys||timer_getoverrun(timer_t timerid); }\n\tSYS_FDATASYNC            = 241 // { int|sys||fdatasync(int fd); }\n\tSYS_MLOCKALL             = 242 // { int|sys||mlockall(int flags); }\n\tSYS_MUNLOCKALL           = 243 // { int|sys||munlockall(void); }\n\tSYS_SIGQUEUEINFO         = 245 // { int|sys||sigqueueinfo(pid_t pid, const siginfo_t *info); }\n\tSYS_MODCTL               = 246 // { int|sys||modctl(int cmd, void *arg); }\n\tSYS___POSIX_RENAME       = 270 // { int|sys||__posix_rename(const char *from, const char *to); }\n\tSYS_SWAPCTL              = 271 // { int|sys||swapctl(int cmd, void *arg, int misc); }\n\tSYS_MINHERIT             = 273 // { int|sys||minherit(void *addr, size_t len, int inherit); }\n\tSYS_LCHMOD               = 274 // { int|sys||lchmod(const char *path, mode_t mode); }\n\tSYS_LCHOWN               = 275 // { int|sys||lchown(const char *path, uid_t uid, gid_t gid); }\n\tSYS_MSYNC                = 277 // { int|sys|13|msync(void *addr, size_t len, int flags); }\n\tSYS___POSIX_CHOWN        = 283 // { int|sys||__posix_chown(const char *path, uid_t uid, gid_t gid); }\n\tSYS___POSIX_FCHOWN       = 284 // { int|sys||__posix_fchown(int fd, uid_t uid, gid_t gid); }\n\tSYS___POSIX_LCHOWN       = 285 // { int|sys||__posix_lchown(const char *path, uid_t uid, gid_t gid); }\n\tSYS_GETSID               = 286 // { pid_t|sys||getsid(pid_t pid); }\n\tSYS___CLONE              = 287 // { pid_t|sys||__clone(int flags, void *stack); }\n\tSYS_FKTRACE              = 288 // { int|sys||fktrace(int fd, int ops, int facs, pid_t pid); }\n\tSYS_PREADV               = 289 // { ssize_t|sys||preadv(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); }\n\tSYS_PWRITEV              = 290 // { ssize_t|sys||pwritev(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); }\n\tSYS___GETCWD             = 296 // { int|sys||__getcwd(char *bufp, size_t length); }\n\tSYS_FCHROOT              = 297 // { int|sys||fchroot(int fd); }\n\tSYS_LCHFLAGS             = 304 // { int|sys||lchflags(const char *path, u_long flags); }\n\tSYS_ISSETUGID            = 305 // { int|sys||issetugid(void); }\n\tSYS_UTRACE               = 306 // { int|sys||utrace(const char *label, void *addr, size_t len); }\n\tSYS_GETCONTEXT           = 307 // { int|sys||getcontext(struct __ucontext *ucp); }\n\tSYS_SETCONTEXT           = 308 // { int|sys||setcontext(const struct __ucontext *ucp); }\n\tSYS__LWP_CREATE          = 309 // { int|sys||_lwp_create(const struct __ucontext *ucp, u_long flags, lwpid_t *new_lwp); }\n\tSYS__LWP_EXIT            = 310 // { int|sys||_lwp_exit(void); }\n\tSYS__LWP_SELF            = 311 // { lwpid_t|sys||_lwp_self(void); }\n\tSYS__LWP_WAIT            = 312 // { int|sys||_lwp_wait(lwpid_t wait_for, lwpid_t *departed); }\n\tSYS__LWP_SUSPEND         = 313 // { int|sys||_lwp_suspend(lwpid_t target); }\n\tSYS__LWP_CONTINUE        = 314 // { int|sys||_lwp_continue(lwpid_t target); }\n\tSYS__LWP_WAKEUP          = 315 // { int|sys||_lwp_wakeup(lwpid_t target); }\n\tSYS__LWP_GETPRIVATE      = 316 // { void *|sys||_lwp_getprivate(void); }\n\tSYS__LWP_SETPRIVATE      = 317 // { void|sys||_lwp_setprivate(void *ptr); }\n\tSYS__LWP_KILL            = 318 // { int|sys||_lwp_kill(lwpid_t target, int signo); }\n\tSYS__LWP_DETACH          = 319 // { int|sys||_lwp_detach(lwpid_t target); }\n\tSYS__LWP_UNPARK          = 321 // { int|sys||_lwp_unpark(lwpid_t target, const void *hint); }\n\tSYS__LWP_UNPARK_ALL      = 322 // { ssize_t|sys||_lwp_unpark_all(const lwpid_t *targets, size_t ntargets, const void *hint); }\n\tSYS__LWP_SETNAME         = 323 // { int|sys||_lwp_setname(lwpid_t target, const char *name); }\n\tSYS__LWP_GETNAME         = 324 // { int|sys||_lwp_getname(lwpid_t target, char *name, size_t len); }\n\tSYS__LWP_CTL             = 325 // { int|sys||_lwp_ctl(int features, struct lwpctl **address); }\n\tSYS___SIGACTION_SIGTRAMP = 340 // { int|sys||__sigaction_sigtramp(int signum, const struct sigaction *nsa, struct sigaction *osa, const void *tramp, int vers); }\n\tSYS_PMC_GET_INFO         = 341 // { int|sys||pmc_get_info(int ctr, int op, void *args); }\n\tSYS_PMC_CONTROL          = 342 // { int|sys||pmc_control(int ctr, int op, void *args); }\n\tSYS_RASCTL               = 343 // { int|sys||rasctl(void *addr, size_t len, int op); }\n\tSYS_KQUEUE               = 344 // { int|sys||kqueue(void); }\n\tSYS__SCHED_SETPARAM      = 346 // { int|sys||_sched_setparam(pid_t pid, lwpid_t lid, int policy, const struct sched_param *params); }\n\tSYS__SCHED_GETPARAM      = 347 // { int|sys||_sched_getparam(pid_t pid, lwpid_t lid, int *policy, struct sched_param *params); }\n\tSYS__SCHED_SETAFFINITY   = 348 // { int|sys||_sched_setaffinity(pid_t pid, lwpid_t lid, size_t size, const cpuset_t *cpuset); }\n\tSYS__SCHED_GETAFFINITY   = 349 // { int|sys||_sched_getaffinity(pid_t pid, lwpid_t lid, size_t size, cpuset_t *cpuset); }\n\tSYS_SCHED_YIELD          = 350 // { int|sys||sched_yield(void); }\n\tSYS_FSYNC_RANGE          = 354 // { int|sys||fsync_range(int fd, int flags, off_t start, off_t length); }\n\tSYS_UUIDGEN              = 355 // { int|sys||uuidgen(struct uuid *store, int count); }\n\tSYS_GETVFSSTAT           = 356 // { int|sys||getvfsstat(struct statvfs *buf, size_t bufsize, int flags); }\n\tSYS_STATVFS1             = 357 // { int|sys||statvfs1(const char *path, struct statvfs *buf, int flags); }\n\tSYS_FSTATVFS1            = 358 // { int|sys||fstatvfs1(int fd, struct statvfs *buf, int flags); }\n\tSYS_EXTATTRCTL           = 360 // { int|sys||extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); }\n\tSYS_EXTATTR_SET_FILE     = 361 // { int|sys||extattr_set_file(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); }\n\tSYS_EXTATTR_GET_FILE     = 362 // { ssize_t|sys||extattr_get_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_DELETE_FILE  = 363 // { int|sys||extattr_delete_file(const char *path, int attrnamespace, const char *attrname); }\n\tSYS_EXTATTR_SET_FD       = 364 // { int|sys||extattr_set_fd(int fd, int attrnamespace, const char *attrname, const void *data, size_t nbytes); }\n\tSYS_EXTATTR_GET_FD       = 365 // { ssize_t|sys||extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_DELETE_FD    = 366 // { int|sys||extattr_delete_fd(int fd, int attrnamespace, const char *attrname); }\n\tSYS_EXTATTR_SET_LINK     = 367 // { int|sys||extattr_set_link(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); }\n\tSYS_EXTATTR_GET_LINK     = 368 // { ssize_t|sys||extattr_get_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_DELETE_LINK  = 369 // { int|sys||extattr_delete_link(const char *path, int attrnamespace, const char *attrname); }\n\tSYS_EXTATTR_LIST_FD      = 370 // { ssize_t|sys||extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); }\n\tSYS_EXTATTR_LIST_FILE    = 371 // { ssize_t|sys||extattr_list_file(const char *path, int attrnamespace, void *data, size_t nbytes); }\n\tSYS_EXTATTR_LIST_LINK    = 372 // { ssize_t|sys||extattr_list_link(const char *path, int attrnamespace, void *data, size_t nbytes); }\n\tSYS_SETXATTR             = 375 // { int|sys||setxattr(const char *path, const char *name, const void *value, size_t size, int flags); }\n\tSYS_LSETXATTR            = 376 // { int|sys||lsetxattr(const char *path, const char *name, const void *value, size_t size, int flags); }\n\tSYS_FSETXATTR            = 377 // { int|sys||fsetxattr(int fd, const char *name, const void *value, size_t size, int flags); }\n\tSYS_GETXATTR             = 378 // { int|sys||getxattr(const char *path, const char *name, void *value, size_t size); }\n\tSYS_LGETXATTR            = 379 // { int|sys||lgetxattr(const char *path, const char *name, void *value, size_t size); }\n\tSYS_FGETXATTR            = 380 // { int|sys||fgetxattr(int fd, const char *name, void *value, size_t size); }\n\tSYS_LISTXATTR            = 381 // { int|sys||listxattr(const char *path, char *list, size_t size); }\n\tSYS_LLISTXATTR           = 382 // { int|sys||llistxattr(const char *path, char *list, size_t size); }\n\tSYS_FLISTXATTR           = 383 // { int|sys||flistxattr(int fd, char *list, size_t size); }\n\tSYS_REMOVEXATTR          = 384 // { int|sys||removexattr(const char *path, const char *name); }\n\tSYS_LREMOVEXATTR         = 385 // { int|sys||lremovexattr(const char *path, const char *name); }\n\tSYS_FREMOVEXATTR         = 386 // { int|sys||fremovexattr(int fd, const char *name); }\n\tSYS_GETDENTS             = 390 // { int|sys|30|getdents(int fd, char *buf, size_t count); }\n\tSYS_SOCKET               = 394 // { int|sys|30|socket(int domain, int type, int protocol); }\n\tSYS_GETFH                = 395 // { int|sys|30|getfh(const char *fname, void *fhp, size_t *fh_size); }\n\tSYS_MOUNT                = 410 // { int|sys|50|mount(const char *type, const char *path, int flags, void *data, size_t data_len); }\n\tSYS_MREMAP               = 411 // { void *|sys||mremap(void *old_address, size_t old_size, void *new_address, size_t new_size, int flags); }\n\tSYS_PSET_CREATE          = 412 // { int|sys||pset_create(psetid_t *psid); }\n\tSYS_PSET_DESTROY         = 413 // { int|sys||pset_destroy(psetid_t psid); }\n\tSYS_PSET_ASSIGN          = 414 // { int|sys||pset_assign(psetid_t psid, cpuid_t cpuid, psetid_t *opsid); }\n\tSYS__PSET_BIND           = 415 // { int|sys||_pset_bind(idtype_t idtype, id_t first_id, id_t second_id, psetid_t psid, psetid_t *opsid); }\n\tSYS_POSIX_FADVISE        = 416 // { int|sys|50|posix_fadvise(int fd, int PAD, off_t offset, off_t len, int advice); }\n\tSYS_SELECT               = 417 // { int|sys|50|select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }\n\tSYS_GETTIMEOFDAY         = 418 // { int|sys|50|gettimeofday(struct timeval *tp, void *tzp); }\n\tSYS_SETTIMEOFDAY         = 419 // { int|sys|50|settimeofday(const struct timeval *tv, const void *tzp); }\n\tSYS_UTIMES               = 420 // { int|sys|50|utimes(const char *path, const struct timeval *tptr); }\n\tSYS_ADJTIME              = 421 // { int|sys|50|adjtime(const struct timeval *delta, struct timeval *olddelta); }\n\tSYS_FUTIMES              = 423 // { int|sys|50|futimes(int fd, const struct timeval *tptr); }\n\tSYS_LUTIMES              = 424 // { int|sys|50|lutimes(const char *path, const struct timeval *tptr); }\n\tSYS_SETITIMER            = 425 // { int|sys|50|setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); }\n\tSYS_GETITIMER            = 426 // { int|sys|50|getitimer(int which, struct itimerval *itv); }\n\tSYS_CLOCK_GETTIME        = 427 // { int|sys|50|clock_gettime(clockid_t clock_id, struct timespec *tp); }\n\tSYS_CLOCK_SETTIME        = 428 // { int|sys|50|clock_settime(clockid_t clock_id, const struct timespec *tp); }\n\tSYS_CLOCK_GETRES         = 429 // { int|sys|50|clock_getres(clockid_t clock_id, struct timespec *tp); }\n\tSYS_NANOSLEEP            = 430 // { int|sys|50|nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }\n\tSYS___SIGTIMEDWAIT       = 431 // { int|sys|50|__sigtimedwait(const sigset_t *set, siginfo_t *info, struct timespec *timeout); }\n\tSYS__LWP_PARK            = 434 // { int|sys|50|_lwp_park(const struct timespec *ts, lwpid_t unpark, const void *hint, const void *unparkhint); }\n\tSYS_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); }\n\tSYS_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); }\n\tSYS_POLLTS               = 437 // { int|sys|50|pollts(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); }\n\tSYS_STAT                 = 439 // { int|sys|50|stat(const char *path, struct stat *ub); }\n\tSYS_FSTAT                = 440 // { int|sys|50|fstat(int fd, struct stat *sb); }\n\tSYS_LSTAT                = 441 // { int|sys|50|lstat(const char *path, struct stat *ub); }\n\tSYS___SEMCTL             = 442 // { int|sys|50|__semctl(int semid, int semnum, int cmd, ... union __semun *arg); }\n\tSYS_SHMCTL               = 443 // { int|sys|50|shmctl(int shmid, int cmd, struct shmid_ds *buf); }\n\tSYS_MSGCTL               = 444 // { int|sys|50|msgctl(int msqid, int cmd, struct msqid_ds *buf); }\n\tSYS_GETRUSAGE            = 445 // { int|sys|50|getrusage(int who, struct rusage *rusage); }\n\tSYS_TIMER_SETTIME        = 446 // { int|sys|50|timer_settime(timer_t timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); }\n\tSYS_TIMER_GETTIME        = 447 // { int|sys|50|timer_gettime(timer_t timerid, struct itimerspec *value); }\n\tSYS_NTP_GETTIME          = 448 // { int|sys|50|ntp_gettime(struct ntptimeval *ntvp); }\n\tSYS_WAIT4                = 449 // { int|sys|50|wait4(pid_t pid, int *status, int options, struct rusage *rusage); }\n\tSYS_MKNOD                = 450 // { int|sys|50|mknod(const char *path, mode_t mode, dev_t dev); }\n\tSYS_FHSTAT               = 451 // { int|sys|50|fhstat(const void *fhp, size_t fh_size, struct stat *sb); }\n\tSYS_PIPE2                = 453 // { int|sys||pipe2(int *fildes, int flags); }\n\tSYS_DUP3                 = 454 // { int|sys||dup3(int from, int to, int flags); }\n\tSYS_KQUEUE1              = 455 // { int|sys||kqueue1(int flags); }\n\tSYS_PACCEPT              = 456 // { int|sys||paccept(int s, struct sockaddr *name, socklen_t *anamelen, const sigset_t *mask, int flags); }\n\tSYS_LINKAT               = 457 // { int|sys||linkat(int fd1, const char *name1, int fd2, const char *name2, int flags); }\n\tSYS_RENAMEAT             = 458 // { int|sys||renameat(int fromfd, const char *from, int tofd, const char *to); }\n\tSYS_MKFIFOAT             = 459 // { int|sys||mkfifoat(int fd, const char *path, mode_t mode); }\n\tSYS_MKNODAT              = 460 // { int|sys||mknodat(int fd, const char *path, mode_t mode, uint32_t dev); }\n\tSYS_MKDIRAT              = 461 // { int|sys||mkdirat(int fd, const char *path, mode_t mode); }\n\tSYS_FACCESSAT            = 462 // { int|sys||faccessat(int fd, const char *path, int amode, int flag); }\n\tSYS_FCHMODAT             = 463 // { int|sys||fchmodat(int fd, const char *path, mode_t mode, int flag); }\n\tSYS_FCHOWNAT             = 464 // { int|sys||fchownat(int fd, const char *path, uid_t owner, gid_t group, int flag); }\n\tSYS_FEXECVE              = 465 // { int|sys||fexecve(int fd, char * const *argp, char * const *envp); }\n\tSYS_FSTATAT              = 466 // { int|sys||fstatat(int fd, const char *path, struct stat *buf, int flag); }\n\tSYS_UTIMENSAT            = 467 // { int|sys||utimensat(int fd, const char *path, const struct timespec *tptr, int flag); }\n\tSYS_OPENAT               = 468 // { int|sys||openat(int fd, const char *path, int oflags, ... mode_t mode); }\n\tSYS_READLINKAT           = 469 // { int|sys||readlinkat(int fd, const char *path, char *buf, size_t bufsize); }\n\tSYS_SYMLINKAT            = 470 // { int|sys||symlinkat(const char *path1, int fd, const char *path2); }\n\tSYS_UNLINKAT             = 471 // { int|sys||unlinkat(int fd, const char *path, int flag); }\n\tSYS_FUTIMENS             = 472 // { int|sys||futimens(int fd, const struct timespec *tptr); }\n\tSYS___QUOTACTL           = 473 // { int|sys||__quotactl(const char *path, struct quotactl_args *args); }\n\tSYS_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); }\n\tSYS_RECVMMSG             = 475 // { int|sys||recvmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags, struct timespec *timeout); }\n\tSYS_SENDMMSG             = 476 // { int|sys||sendmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags); }\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm64.go",
    "content": "// go run mksysnum.go http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master\n// Code generated by the command above; DO NOT EDIT.\n\n// +build arm64,netbsd\n\npackage unix\n\nconst (\n\tSYS_EXIT                 = 1   // { void|sys||exit(int rval); }\n\tSYS_FORK                 = 2   // { int|sys||fork(void); }\n\tSYS_READ                 = 3   // { ssize_t|sys||read(int fd, void *buf, size_t nbyte); }\n\tSYS_WRITE                = 4   // { ssize_t|sys||write(int fd, const void *buf, size_t nbyte); }\n\tSYS_OPEN                 = 5   // { int|sys||open(const char *path, int flags, ... mode_t mode); }\n\tSYS_CLOSE                = 6   // { int|sys||close(int fd); }\n\tSYS_LINK                 = 9   // { int|sys||link(const char *path, const char *link); }\n\tSYS_UNLINK               = 10  // { int|sys||unlink(const char *path); }\n\tSYS_CHDIR                = 12  // { int|sys||chdir(const char *path); }\n\tSYS_FCHDIR               = 13  // { int|sys||fchdir(int fd); }\n\tSYS_CHMOD                = 15  // { int|sys||chmod(const char *path, mode_t mode); }\n\tSYS_CHOWN                = 16  // { int|sys||chown(const char *path, uid_t uid, gid_t gid); }\n\tSYS_BREAK                = 17  // { int|sys||obreak(char *nsize); }\n\tSYS_GETPID               = 20  // { pid_t|sys||getpid_with_ppid(void); }\n\tSYS_UNMOUNT              = 22  // { int|sys||unmount(const char *path, int flags); }\n\tSYS_SETUID               = 23  // { int|sys||setuid(uid_t uid); }\n\tSYS_GETUID               = 24  // { uid_t|sys||getuid_with_euid(void); }\n\tSYS_GETEUID              = 25  // { uid_t|sys||geteuid(void); }\n\tSYS_PTRACE               = 26  // { int|sys||ptrace(int req, pid_t pid, void *addr, int data); }\n\tSYS_RECVMSG              = 27  // { ssize_t|sys||recvmsg(int s, struct msghdr *msg, int flags); }\n\tSYS_SENDMSG              = 28  // { ssize_t|sys||sendmsg(int s, const struct msghdr *msg, int flags); }\n\tSYS_RECVFROM             = 29  // { ssize_t|sys||recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); }\n\tSYS_ACCEPT               = 30  // { int|sys||accept(int s, struct sockaddr *name, socklen_t *anamelen); }\n\tSYS_GETPEERNAME          = 31  // { int|sys||getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); }\n\tSYS_GETSOCKNAME          = 32  // { int|sys||getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); }\n\tSYS_ACCESS               = 33  // { int|sys||access(const char *path, int flags); }\n\tSYS_CHFLAGS              = 34  // { int|sys||chflags(const char *path, u_long flags); }\n\tSYS_FCHFLAGS             = 35  // { int|sys||fchflags(int fd, u_long flags); }\n\tSYS_SYNC                 = 36  // { void|sys||sync(void); }\n\tSYS_KILL                 = 37  // { int|sys||kill(pid_t pid, int signum); }\n\tSYS_GETPPID              = 39  // { pid_t|sys||getppid(void); }\n\tSYS_DUP                  = 41  // { int|sys||dup(int fd); }\n\tSYS_PIPE                 = 42  // { int|sys||pipe(void); }\n\tSYS_GETEGID              = 43  // { gid_t|sys||getegid(void); }\n\tSYS_PROFIL               = 44  // { int|sys||profil(char *samples, size_t size, u_long offset, u_int scale); }\n\tSYS_KTRACE               = 45  // { int|sys||ktrace(const char *fname, int ops, int facs, pid_t pid); }\n\tSYS_GETGID               = 47  // { gid_t|sys||getgid_with_egid(void); }\n\tSYS___GETLOGIN           = 49  // { int|sys||__getlogin(char *namebuf, size_t namelen); }\n\tSYS___SETLOGIN           = 50  // { int|sys||__setlogin(const char *namebuf); }\n\tSYS_ACCT                 = 51  // { int|sys||acct(const char *path); }\n\tSYS_IOCTL                = 54  // { int|sys||ioctl(int fd, u_long com, ... void *data); }\n\tSYS_REVOKE               = 56  // { int|sys||revoke(const char *path); }\n\tSYS_SYMLINK              = 57  // { int|sys||symlink(const char *path, const char *link); }\n\tSYS_READLINK             = 58  // { ssize_t|sys||readlink(const char *path, char *buf, size_t count); }\n\tSYS_EXECVE               = 59  // { int|sys||execve(const char *path, char * const *argp, char * const *envp); }\n\tSYS_UMASK                = 60  // { mode_t|sys||umask(mode_t newmask); }\n\tSYS_CHROOT               = 61  // { int|sys||chroot(const char *path); }\n\tSYS_VFORK                = 66  // { int|sys||vfork(void); }\n\tSYS_SBRK                 = 69  // { int|sys||sbrk(intptr_t incr); }\n\tSYS_SSTK                 = 70  // { int|sys||sstk(int incr); }\n\tSYS_VADVISE              = 72  // { int|sys||ovadvise(int anom); }\n\tSYS_MUNMAP               = 73  // { int|sys||munmap(void *addr, size_t len); }\n\tSYS_MPROTECT             = 74  // { int|sys||mprotect(void *addr, size_t len, int prot); }\n\tSYS_MADVISE              = 75  // { int|sys||madvise(void *addr, size_t len, int behav); }\n\tSYS_MINCORE              = 78  // { int|sys||mincore(void *addr, size_t len, char *vec); }\n\tSYS_GETGROUPS            = 79  // { int|sys||getgroups(int gidsetsize, gid_t *gidset); }\n\tSYS_SETGROUPS            = 80  // { int|sys||setgroups(int gidsetsize, const gid_t *gidset); }\n\tSYS_GETPGRP              = 81  // { int|sys||getpgrp(void); }\n\tSYS_SETPGID              = 82  // { int|sys||setpgid(pid_t pid, pid_t pgid); }\n\tSYS_DUP2                 = 90  // { int|sys||dup2(int from, int to); }\n\tSYS_FCNTL                = 92  // { int|sys||fcntl(int fd, int cmd, ... void *arg); }\n\tSYS_FSYNC                = 95  // { int|sys||fsync(int fd); }\n\tSYS_SETPRIORITY          = 96  // { int|sys||setpriority(int which, id_t who, int prio); }\n\tSYS_CONNECT              = 98  // { int|sys||connect(int s, const struct sockaddr *name, socklen_t namelen); }\n\tSYS_GETPRIORITY          = 100 // { int|sys||getpriority(int which, id_t who); }\n\tSYS_BIND                 = 104 // { int|sys||bind(int s, const struct sockaddr *name, socklen_t namelen); }\n\tSYS_SETSOCKOPT           = 105 // { int|sys||setsockopt(int s, int level, int name, const void *val, socklen_t valsize); }\n\tSYS_LISTEN               = 106 // { int|sys||listen(int s, int backlog); }\n\tSYS_GETSOCKOPT           = 118 // { int|sys||getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); }\n\tSYS_READV                = 120 // { ssize_t|sys||readv(int fd, const struct iovec *iovp, int iovcnt); }\n\tSYS_WRITEV               = 121 // { ssize_t|sys||writev(int fd, const struct iovec *iovp, int iovcnt); }\n\tSYS_FCHOWN               = 123 // { int|sys||fchown(int fd, uid_t uid, gid_t gid); }\n\tSYS_FCHMOD               = 124 // { int|sys||fchmod(int fd, mode_t mode); }\n\tSYS_SETREUID             = 126 // { int|sys||setreuid(uid_t ruid, uid_t euid); }\n\tSYS_SETREGID             = 127 // { int|sys||setregid(gid_t rgid, gid_t egid); }\n\tSYS_RENAME               = 128 // { int|sys||rename(const char *from, const char *to); }\n\tSYS_FLOCK                = 131 // { int|sys||flock(int fd, int how); }\n\tSYS_MKFIFO               = 132 // { int|sys||mkfifo(const char *path, mode_t mode); }\n\tSYS_SENDTO               = 133 // { ssize_t|sys||sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); }\n\tSYS_SHUTDOWN             = 134 // { int|sys||shutdown(int s, int how); }\n\tSYS_SOCKETPAIR           = 135 // { int|sys||socketpair(int domain, int type, int protocol, int *rsv); }\n\tSYS_MKDIR                = 136 // { int|sys||mkdir(const char *path, mode_t mode); }\n\tSYS_RMDIR                = 137 // { int|sys||rmdir(const char *path); }\n\tSYS_SETSID               = 147 // { int|sys||setsid(void); }\n\tSYS_SYSARCH              = 165 // { int|sys||sysarch(int op, void *parms); }\n\tSYS_PREAD                = 173 // { ssize_t|sys||pread(int fd, void *buf, size_t nbyte, int PAD, off_t offset); }\n\tSYS_PWRITE               = 174 // { ssize_t|sys||pwrite(int fd, const void *buf, size_t nbyte, int PAD, off_t offset); }\n\tSYS_NTP_ADJTIME          = 176 // { int|sys||ntp_adjtime(struct timex *tp); }\n\tSYS_SETGID               = 181 // { int|sys||setgid(gid_t gid); }\n\tSYS_SETEGID              = 182 // { int|sys||setegid(gid_t egid); }\n\tSYS_SETEUID              = 183 // { int|sys||seteuid(uid_t euid); }\n\tSYS_PATHCONF             = 191 // { long|sys||pathconf(const char *path, int name); }\n\tSYS_FPATHCONF            = 192 // { long|sys||fpathconf(int fd, int name); }\n\tSYS_GETRLIMIT            = 194 // { int|sys||getrlimit(int which, struct rlimit *rlp); }\n\tSYS_SETRLIMIT            = 195 // { int|sys||setrlimit(int which, const struct rlimit *rlp); }\n\tSYS_MMAP                 = 197 // { void *|sys||mmap(void *addr, size_t len, int prot, int flags, int fd, long PAD, off_t pos); }\n\tSYS_LSEEK                = 199 // { off_t|sys||lseek(int fd, int PAD, off_t offset, int whence); }\n\tSYS_TRUNCATE             = 200 // { int|sys||truncate(const char *path, int PAD, off_t length); }\n\tSYS_FTRUNCATE            = 201 // { int|sys||ftruncate(int fd, int PAD, off_t length); }\n\tSYS___SYSCTL             = 202 // { int|sys||__sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, const void *new, size_t newlen); }\n\tSYS_MLOCK                = 203 // { int|sys||mlock(const void *addr, size_t len); }\n\tSYS_MUNLOCK              = 204 // { int|sys||munlock(const void *addr, size_t len); }\n\tSYS_UNDELETE             = 205 // { int|sys||undelete(const char *path); }\n\tSYS_GETPGID              = 207 // { pid_t|sys||getpgid(pid_t pid); }\n\tSYS_REBOOT               = 208 // { int|sys||reboot(int opt, char *bootstr); }\n\tSYS_POLL                 = 209 // { int|sys||poll(struct pollfd *fds, u_int nfds, int timeout); }\n\tSYS_SEMGET               = 221 // { int|sys||semget(key_t key, int nsems, int semflg); }\n\tSYS_SEMOP                = 222 // { int|sys||semop(int semid, struct sembuf *sops, size_t nsops); }\n\tSYS_SEMCONFIG            = 223 // { int|sys||semconfig(int flag); }\n\tSYS_MSGGET               = 225 // { int|sys||msgget(key_t key, int msgflg); }\n\tSYS_MSGSND               = 226 // { int|sys||msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }\n\tSYS_MSGRCV               = 227 // { ssize_t|sys||msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }\n\tSYS_SHMAT                = 228 // { void *|sys||shmat(int shmid, const void *shmaddr, int shmflg); }\n\tSYS_SHMDT                = 230 // { int|sys||shmdt(const void *shmaddr); }\n\tSYS_SHMGET               = 231 // { int|sys||shmget(key_t key, size_t size, int shmflg); }\n\tSYS_TIMER_CREATE         = 235 // { int|sys||timer_create(clockid_t clock_id, struct sigevent *evp, timer_t *timerid); }\n\tSYS_TIMER_DELETE         = 236 // { int|sys||timer_delete(timer_t timerid); }\n\tSYS_TIMER_GETOVERRUN     = 239 // { int|sys||timer_getoverrun(timer_t timerid); }\n\tSYS_FDATASYNC            = 241 // { int|sys||fdatasync(int fd); }\n\tSYS_MLOCKALL             = 242 // { int|sys||mlockall(int flags); }\n\tSYS_MUNLOCKALL           = 243 // { int|sys||munlockall(void); }\n\tSYS_SIGQUEUEINFO         = 245 // { int|sys||sigqueueinfo(pid_t pid, const siginfo_t *info); }\n\tSYS_MODCTL               = 246 // { int|sys||modctl(int cmd, void *arg); }\n\tSYS___POSIX_RENAME       = 270 // { int|sys||__posix_rename(const char *from, const char *to); }\n\tSYS_SWAPCTL              = 271 // { int|sys||swapctl(int cmd, void *arg, int misc); }\n\tSYS_MINHERIT             = 273 // { int|sys||minherit(void *addr, size_t len, int inherit); }\n\tSYS_LCHMOD               = 274 // { int|sys||lchmod(const char *path, mode_t mode); }\n\tSYS_LCHOWN               = 275 // { int|sys||lchown(const char *path, uid_t uid, gid_t gid); }\n\tSYS_MSYNC                = 277 // { int|sys|13|msync(void *addr, size_t len, int flags); }\n\tSYS___POSIX_CHOWN        = 283 // { int|sys||__posix_chown(const char *path, uid_t uid, gid_t gid); }\n\tSYS___POSIX_FCHOWN       = 284 // { int|sys||__posix_fchown(int fd, uid_t uid, gid_t gid); }\n\tSYS___POSIX_LCHOWN       = 285 // { int|sys||__posix_lchown(const char *path, uid_t uid, gid_t gid); }\n\tSYS_GETSID               = 286 // { pid_t|sys||getsid(pid_t pid); }\n\tSYS___CLONE              = 287 // { pid_t|sys||__clone(int flags, void *stack); }\n\tSYS_FKTRACE              = 288 // { int|sys||fktrace(int fd, int ops, int facs, pid_t pid); }\n\tSYS_PREADV               = 289 // { ssize_t|sys||preadv(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); }\n\tSYS_PWRITEV              = 290 // { ssize_t|sys||pwritev(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); }\n\tSYS___GETCWD             = 296 // { int|sys||__getcwd(char *bufp, size_t length); }\n\tSYS_FCHROOT              = 297 // { int|sys||fchroot(int fd); }\n\tSYS_LCHFLAGS             = 304 // { int|sys||lchflags(const char *path, u_long flags); }\n\tSYS_ISSETUGID            = 305 // { int|sys||issetugid(void); }\n\tSYS_UTRACE               = 306 // { int|sys||utrace(const char *label, void *addr, size_t len); }\n\tSYS_GETCONTEXT           = 307 // { int|sys||getcontext(struct __ucontext *ucp); }\n\tSYS_SETCONTEXT           = 308 // { int|sys||setcontext(const struct __ucontext *ucp); }\n\tSYS__LWP_CREATE          = 309 // { int|sys||_lwp_create(const struct __ucontext *ucp, u_long flags, lwpid_t *new_lwp); }\n\tSYS__LWP_EXIT            = 310 // { int|sys||_lwp_exit(void); }\n\tSYS__LWP_SELF            = 311 // { lwpid_t|sys||_lwp_self(void); }\n\tSYS__LWP_WAIT            = 312 // { int|sys||_lwp_wait(lwpid_t wait_for, lwpid_t *departed); }\n\tSYS__LWP_SUSPEND         = 313 // { int|sys||_lwp_suspend(lwpid_t target); }\n\tSYS__LWP_CONTINUE        = 314 // { int|sys||_lwp_continue(lwpid_t target); }\n\tSYS__LWP_WAKEUP          = 315 // { int|sys||_lwp_wakeup(lwpid_t target); }\n\tSYS__LWP_GETPRIVATE      = 316 // { void *|sys||_lwp_getprivate(void); }\n\tSYS__LWP_SETPRIVATE      = 317 // { void|sys||_lwp_setprivate(void *ptr); }\n\tSYS__LWP_KILL            = 318 // { int|sys||_lwp_kill(lwpid_t target, int signo); }\n\tSYS__LWP_DETACH          = 319 // { int|sys||_lwp_detach(lwpid_t target); }\n\tSYS__LWP_UNPARK          = 321 // { int|sys||_lwp_unpark(lwpid_t target, const void *hint); }\n\tSYS__LWP_UNPARK_ALL      = 322 // { ssize_t|sys||_lwp_unpark_all(const lwpid_t *targets, size_t ntargets, const void *hint); }\n\tSYS__LWP_SETNAME         = 323 // { int|sys||_lwp_setname(lwpid_t target, const char *name); }\n\tSYS__LWP_GETNAME         = 324 // { int|sys||_lwp_getname(lwpid_t target, char *name, size_t len); }\n\tSYS__LWP_CTL             = 325 // { int|sys||_lwp_ctl(int features, struct lwpctl **address); }\n\tSYS___SIGACTION_SIGTRAMP = 340 // { int|sys||__sigaction_sigtramp(int signum, const struct sigaction *nsa, struct sigaction *osa, const void *tramp, int vers); }\n\tSYS_PMC_GET_INFO         = 341 // { int|sys||pmc_get_info(int ctr, int op, void *args); }\n\tSYS_PMC_CONTROL          = 342 // { int|sys||pmc_control(int ctr, int op, void *args); }\n\tSYS_RASCTL               = 343 // { int|sys||rasctl(void *addr, size_t len, int op); }\n\tSYS_KQUEUE               = 344 // { int|sys||kqueue(void); }\n\tSYS__SCHED_SETPARAM      = 346 // { int|sys||_sched_setparam(pid_t pid, lwpid_t lid, int policy, const struct sched_param *params); }\n\tSYS__SCHED_GETPARAM      = 347 // { int|sys||_sched_getparam(pid_t pid, lwpid_t lid, int *policy, struct sched_param *params); }\n\tSYS__SCHED_SETAFFINITY   = 348 // { int|sys||_sched_setaffinity(pid_t pid, lwpid_t lid, size_t size, const cpuset_t *cpuset); }\n\tSYS__SCHED_GETAFFINITY   = 349 // { int|sys||_sched_getaffinity(pid_t pid, lwpid_t lid, size_t size, cpuset_t *cpuset); }\n\tSYS_SCHED_YIELD          = 350 // { int|sys||sched_yield(void); }\n\tSYS_FSYNC_RANGE          = 354 // { int|sys||fsync_range(int fd, int flags, off_t start, off_t length); }\n\tSYS_UUIDGEN              = 355 // { int|sys||uuidgen(struct uuid *store, int count); }\n\tSYS_GETVFSSTAT           = 356 // { int|sys||getvfsstat(struct statvfs *buf, size_t bufsize, int flags); }\n\tSYS_STATVFS1             = 357 // { int|sys||statvfs1(const char *path, struct statvfs *buf, int flags); }\n\tSYS_FSTATVFS1            = 358 // { int|sys||fstatvfs1(int fd, struct statvfs *buf, int flags); }\n\tSYS_EXTATTRCTL           = 360 // { int|sys||extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); }\n\tSYS_EXTATTR_SET_FILE     = 361 // { int|sys||extattr_set_file(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); }\n\tSYS_EXTATTR_GET_FILE     = 362 // { ssize_t|sys||extattr_get_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_DELETE_FILE  = 363 // { int|sys||extattr_delete_file(const char *path, int attrnamespace, const char *attrname); }\n\tSYS_EXTATTR_SET_FD       = 364 // { int|sys||extattr_set_fd(int fd, int attrnamespace, const char *attrname, const void *data, size_t nbytes); }\n\tSYS_EXTATTR_GET_FD       = 365 // { ssize_t|sys||extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_DELETE_FD    = 366 // { int|sys||extattr_delete_fd(int fd, int attrnamespace, const char *attrname); }\n\tSYS_EXTATTR_SET_LINK     = 367 // { int|sys||extattr_set_link(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); }\n\tSYS_EXTATTR_GET_LINK     = 368 // { ssize_t|sys||extattr_get_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_DELETE_LINK  = 369 // { int|sys||extattr_delete_link(const char *path, int attrnamespace, const char *attrname); }\n\tSYS_EXTATTR_LIST_FD      = 370 // { ssize_t|sys||extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); }\n\tSYS_EXTATTR_LIST_FILE    = 371 // { ssize_t|sys||extattr_list_file(const char *path, int attrnamespace, void *data, size_t nbytes); }\n\tSYS_EXTATTR_LIST_LINK    = 372 // { ssize_t|sys||extattr_list_link(const char *path, int attrnamespace, void *data, size_t nbytes); }\n\tSYS_SETXATTR             = 375 // { int|sys||setxattr(const char *path, const char *name, const void *value, size_t size, int flags); }\n\tSYS_LSETXATTR            = 376 // { int|sys||lsetxattr(const char *path, const char *name, const void *value, size_t size, int flags); }\n\tSYS_FSETXATTR            = 377 // { int|sys||fsetxattr(int fd, const char *name, const void *value, size_t size, int flags); }\n\tSYS_GETXATTR             = 378 // { int|sys||getxattr(const char *path, const char *name, void *value, size_t size); }\n\tSYS_LGETXATTR            = 379 // { int|sys||lgetxattr(const char *path, const char *name, void *value, size_t size); }\n\tSYS_FGETXATTR            = 380 // { int|sys||fgetxattr(int fd, const char *name, void *value, size_t size); }\n\tSYS_LISTXATTR            = 381 // { int|sys||listxattr(const char *path, char *list, size_t size); }\n\tSYS_LLISTXATTR           = 382 // { int|sys||llistxattr(const char *path, char *list, size_t size); }\n\tSYS_FLISTXATTR           = 383 // { int|sys||flistxattr(int fd, char *list, size_t size); }\n\tSYS_REMOVEXATTR          = 384 // { int|sys||removexattr(const char *path, const char *name); }\n\tSYS_LREMOVEXATTR         = 385 // { int|sys||lremovexattr(const char *path, const char *name); }\n\tSYS_FREMOVEXATTR         = 386 // { int|sys||fremovexattr(int fd, const char *name); }\n\tSYS_GETDENTS             = 390 // { int|sys|30|getdents(int fd, char *buf, size_t count); }\n\tSYS_SOCKET               = 394 // { int|sys|30|socket(int domain, int type, int protocol); }\n\tSYS_GETFH                = 395 // { int|sys|30|getfh(const char *fname, void *fhp, size_t *fh_size); }\n\tSYS_MOUNT                = 410 // { int|sys|50|mount(const char *type, const char *path, int flags, void *data, size_t data_len); }\n\tSYS_MREMAP               = 411 // { void *|sys||mremap(void *old_address, size_t old_size, void *new_address, size_t new_size, int flags); }\n\tSYS_PSET_CREATE          = 412 // { int|sys||pset_create(psetid_t *psid); }\n\tSYS_PSET_DESTROY         = 413 // { int|sys||pset_destroy(psetid_t psid); }\n\tSYS_PSET_ASSIGN          = 414 // { int|sys||pset_assign(psetid_t psid, cpuid_t cpuid, psetid_t *opsid); }\n\tSYS__PSET_BIND           = 415 // { int|sys||_pset_bind(idtype_t idtype, id_t first_id, id_t second_id, psetid_t psid, psetid_t *opsid); }\n\tSYS_POSIX_FADVISE        = 416 // { int|sys|50|posix_fadvise(int fd, int PAD, off_t offset, off_t len, int advice); }\n\tSYS_SELECT               = 417 // { int|sys|50|select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }\n\tSYS_GETTIMEOFDAY         = 418 // { int|sys|50|gettimeofday(struct timeval *tp, void *tzp); }\n\tSYS_SETTIMEOFDAY         = 419 // { int|sys|50|settimeofday(const struct timeval *tv, const void *tzp); }\n\tSYS_UTIMES               = 420 // { int|sys|50|utimes(const char *path, const struct timeval *tptr); }\n\tSYS_ADJTIME              = 421 // { int|sys|50|adjtime(const struct timeval *delta, struct timeval *olddelta); }\n\tSYS_FUTIMES              = 423 // { int|sys|50|futimes(int fd, const struct timeval *tptr); }\n\tSYS_LUTIMES              = 424 // { int|sys|50|lutimes(const char *path, const struct timeval *tptr); }\n\tSYS_SETITIMER            = 425 // { int|sys|50|setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); }\n\tSYS_GETITIMER            = 426 // { int|sys|50|getitimer(int which, struct itimerval *itv); }\n\tSYS_CLOCK_GETTIME        = 427 // { int|sys|50|clock_gettime(clockid_t clock_id, struct timespec *tp); }\n\tSYS_CLOCK_SETTIME        = 428 // { int|sys|50|clock_settime(clockid_t clock_id, const struct timespec *tp); }\n\tSYS_CLOCK_GETRES         = 429 // { int|sys|50|clock_getres(clockid_t clock_id, struct timespec *tp); }\n\tSYS_NANOSLEEP            = 430 // { int|sys|50|nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }\n\tSYS___SIGTIMEDWAIT       = 431 // { int|sys|50|__sigtimedwait(const sigset_t *set, siginfo_t *info, struct timespec *timeout); }\n\tSYS__LWP_PARK            = 434 // { int|sys|50|_lwp_park(const struct timespec *ts, lwpid_t unpark, const void *hint, const void *unparkhint); }\n\tSYS_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); }\n\tSYS_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); }\n\tSYS_POLLTS               = 437 // { int|sys|50|pollts(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); }\n\tSYS_STAT                 = 439 // { int|sys|50|stat(const char *path, struct stat *ub); }\n\tSYS_FSTAT                = 440 // { int|sys|50|fstat(int fd, struct stat *sb); }\n\tSYS_LSTAT                = 441 // { int|sys|50|lstat(const char *path, struct stat *ub); }\n\tSYS___SEMCTL             = 442 // { int|sys|50|__semctl(int semid, int semnum, int cmd, ... union __semun *arg); }\n\tSYS_SHMCTL               = 443 // { int|sys|50|shmctl(int shmid, int cmd, struct shmid_ds *buf); }\n\tSYS_MSGCTL               = 444 // { int|sys|50|msgctl(int msqid, int cmd, struct msqid_ds *buf); }\n\tSYS_GETRUSAGE            = 445 // { int|sys|50|getrusage(int who, struct rusage *rusage); }\n\tSYS_TIMER_SETTIME        = 446 // { int|sys|50|timer_settime(timer_t timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); }\n\tSYS_TIMER_GETTIME        = 447 // { int|sys|50|timer_gettime(timer_t timerid, struct itimerspec *value); }\n\tSYS_NTP_GETTIME          = 448 // { int|sys|50|ntp_gettime(struct ntptimeval *ntvp); }\n\tSYS_WAIT4                = 449 // { int|sys|50|wait4(pid_t pid, int *status, int options, struct rusage *rusage); }\n\tSYS_MKNOD                = 450 // { int|sys|50|mknod(const char *path, mode_t mode, dev_t dev); }\n\tSYS_FHSTAT               = 451 // { int|sys|50|fhstat(const void *fhp, size_t fh_size, struct stat *sb); }\n\tSYS_PIPE2                = 453 // { int|sys||pipe2(int *fildes, int flags); }\n\tSYS_DUP3                 = 454 // { int|sys||dup3(int from, int to, int flags); }\n\tSYS_KQUEUE1              = 455 // { int|sys||kqueue1(int flags); }\n\tSYS_PACCEPT              = 456 // { int|sys||paccept(int s, struct sockaddr *name, socklen_t *anamelen, const sigset_t *mask, int flags); }\n\tSYS_LINKAT               = 457 // { int|sys||linkat(int fd1, const char *name1, int fd2, const char *name2, int flags); }\n\tSYS_RENAMEAT             = 458 // { int|sys||renameat(int fromfd, const char *from, int tofd, const char *to); }\n\tSYS_MKFIFOAT             = 459 // { int|sys||mkfifoat(int fd, const char *path, mode_t mode); }\n\tSYS_MKNODAT              = 460 // { int|sys||mknodat(int fd, const char *path, mode_t mode, uint32_t dev); }\n\tSYS_MKDIRAT              = 461 // { int|sys||mkdirat(int fd, const char *path, mode_t mode); }\n\tSYS_FACCESSAT            = 462 // { int|sys||faccessat(int fd, const char *path, int amode, int flag); }\n\tSYS_FCHMODAT             = 463 // { int|sys||fchmodat(int fd, const char *path, mode_t mode, int flag); }\n\tSYS_FCHOWNAT             = 464 // { int|sys||fchownat(int fd, const char *path, uid_t owner, gid_t group, int flag); }\n\tSYS_FEXECVE              = 465 // { int|sys||fexecve(int fd, char * const *argp, char * const *envp); }\n\tSYS_FSTATAT              = 466 // { int|sys||fstatat(int fd, const char *path, struct stat *buf, int flag); }\n\tSYS_UTIMENSAT            = 467 // { int|sys||utimensat(int fd, const char *path, const struct timespec *tptr, int flag); }\n\tSYS_OPENAT               = 468 // { int|sys||openat(int fd, const char *path, int oflags, ... mode_t mode); }\n\tSYS_READLINKAT           = 469 // { int|sys||readlinkat(int fd, const char *path, char *buf, size_t bufsize); }\n\tSYS_SYMLINKAT            = 470 // { int|sys||symlinkat(const char *path1, int fd, const char *path2); }\n\tSYS_UNLINKAT             = 471 // { int|sys||unlinkat(int fd, const char *path, int flag); }\n\tSYS_FUTIMENS             = 472 // { int|sys||futimens(int fd, const struct timespec *tptr); }\n\tSYS___QUOTACTL           = 473 // { int|sys||__quotactl(const char *path, struct quotactl_args *args); }\n\tSYS_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); }\n\tSYS_RECVMMSG             = 475 // { int|sys||recvmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags, struct timespec *timeout); }\n\tSYS_SENDMMSG             = 476 // { int|sys||sendmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags); }\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_openbsd_386.go",
    "content": "// go run mksysnum.go https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build 386,openbsd\n\npackage unix\n\nconst (\n\tSYS_EXIT           = 1   // { void sys_exit(int rval); }\n\tSYS_FORK           = 2   // { int sys_fork(void); }\n\tSYS_READ           = 3   // { ssize_t sys_read(int fd, void *buf, size_t nbyte); }\n\tSYS_WRITE          = 4   // { ssize_t sys_write(int fd, const void *buf, size_t nbyte); }\n\tSYS_OPEN           = 5   // { int sys_open(const char *path, int flags, ... mode_t mode); }\n\tSYS_CLOSE          = 6   // { int sys_close(int fd); }\n\tSYS_GETENTROPY     = 7   // { int sys_getentropy(void *buf, size_t nbyte); }\n\tSYS___TFORK        = 8   // { int sys___tfork(const struct __tfork *param, size_t psize); }\n\tSYS_LINK           = 9   // { int sys_link(const char *path, const char *link); }\n\tSYS_UNLINK         = 10  // { int sys_unlink(const char *path); }\n\tSYS_WAIT4          = 11  // { pid_t sys_wait4(pid_t pid, int *status, int options, struct rusage *rusage); }\n\tSYS_CHDIR          = 12  // { int sys_chdir(const char *path); }\n\tSYS_FCHDIR         = 13  // { int sys_fchdir(int fd); }\n\tSYS_MKNOD          = 14  // { int sys_mknod(const char *path, mode_t mode, dev_t dev); }\n\tSYS_CHMOD          = 15  // { int sys_chmod(const char *path, mode_t mode); }\n\tSYS_CHOWN          = 16  // { int sys_chown(const char *path, uid_t uid, gid_t gid); }\n\tSYS_OBREAK         = 17  // { int sys_obreak(char *nsize); } break\n\tSYS_GETDTABLECOUNT = 18  // { int sys_getdtablecount(void); }\n\tSYS_GETRUSAGE      = 19  // { int sys_getrusage(int who, struct rusage *rusage); }\n\tSYS_GETPID         = 20  // { pid_t sys_getpid(void); }\n\tSYS_MOUNT          = 21  // { int sys_mount(const char *type, const char *path, int flags, void *data); }\n\tSYS_UNMOUNT        = 22  // { int sys_unmount(const char *path, int flags); }\n\tSYS_SETUID         = 23  // { int sys_setuid(uid_t uid); }\n\tSYS_GETUID         = 24  // { uid_t sys_getuid(void); }\n\tSYS_GETEUID        = 25  // { uid_t sys_geteuid(void); }\n\tSYS_PTRACE         = 26  // { int sys_ptrace(int req, pid_t pid, caddr_t addr, int data); }\n\tSYS_RECVMSG        = 27  // { ssize_t sys_recvmsg(int s, struct msghdr *msg, int flags); }\n\tSYS_SENDMSG        = 28  // { ssize_t sys_sendmsg(int s, const struct msghdr *msg, int flags); }\n\tSYS_RECVFROM       = 29  // { ssize_t sys_recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); }\n\tSYS_ACCEPT         = 30  // { int sys_accept(int s, struct sockaddr *name, socklen_t *anamelen); }\n\tSYS_GETPEERNAME    = 31  // { int sys_getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); }\n\tSYS_GETSOCKNAME    = 32  // { int sys_getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); }\n\tSYS_ACCESS         = 33  // { int sys_access(const char *path, int amode); }\n\tSYS_CHFLAGS        = 34  // { int sys_chflags(const char *path, u_int flags); }\n\tSYS_FCHFLAGS       = 35  // { int sys_fchflags(int fd, u_int flags); }\n\tSYS_SYNC           = 36  // { void sys_sync(void); }\n\tSYS_STAT           = 38  // { int sys_stat(const char *path, struct stat *ub); }\n\tSYS_GETPPID        = 39  // { pid_t sys_getppid(void); }\n\tSYS_LSTAT          = 40  // { int sys_lstat(const char *path, struct stat *ub); }\n\tSYS_DUP            = 41  // { int sys_dup(int fd); }\n\tSYS_FSTATAT        = 42  // { int sys_fstatat(int fd, const char *path, struct stat *buf, int flag); }\n\tSYS_GETEGID        = 43  // { gid_t sys_getegid(void); }\n\tSYS_PROFIL         = 44  // { int sys_profil(caddr_t samples, size_t size, u_long offset, u_int scale); }\n\tSYS_KTRACE         = 45  // { int sys_ktrace(const char *fname, int ops, int facs, pid_t pid); }\n\tSYS_SIGACTION      = 46  // { int sys_sigaction(int signum, const struct sigaction *nsa, struct sigaction *osa); }\n\tSYS_GETGID         = 47  // { gid_t sys_getgid(void); }\n\tSYS_SIGPROCMASK    = 48  // { int sys_sigprocmask(int how, sigset_t mask); }\n\tSYS_SETLOGIN       = 50  // { int sys_setlogin(const char *namebuf); }\n\tSYS_ACCT           = 51  // { int sys_acct(const char *path); }\n\tSYS_SIGPENDING     = 52  // { int sys_sigpending(void); }\n\tSYS_FSTAT          = 53  // { int sys_fstat(int fd, struct stat *sb); }\n\tSYS_IOCTL          = 54  // { int sys_ioctl(int fd, u_long com, ... void *data); }\n\tSYS_REBOOT         = 55  // { int sys_reboot(int opt); }\n\tSYS_REVOKE         = 56  // { int sys_revoke(const char *path); }\n\tSYS_SYMLINK        = 57  // { int sys_symlink(const char *path, const char *link); }\n\tSYS_READLINK       = 58  // { ssize_t sys_readlink(const char *path, char *buf, size_t count); }\n\tSYS_EXECVE         = 59  // { int sys_execve(const char *path, char * const *argp, char * const *envp); }\n\tSYS_UMASK          = 60  // { mode_t sys_umask(mode_t newmask); }\n\tSYS_CHROOT         = 61  // { int sys_chroot(const char *path); }\n\tSYS_GETFSSTAT      = 62  // { int sys_getfsstat(struct statfs *buf, size_t bufsize, int flags); }\n\tSYS_STATFS         = 63  // { int sys_statfs(const char *path, struct statfs *buf); }\n\tSYS_FSTATFS        = 64  // { int sys_fstatfs(int fd, struct statfs *buf); }\n\tSYS_FHSTATFS       = 65  // { int sys_fhstatfs(const fhandle_t *fhp, struct statfs *buf); }\n\tSYS_VFORK          = 66  // { int sys_vfork(void); }\n\tSYS_GETTIMEOFDAY   = 67  // { int sys_gettimeofday(struct timeval *tp, struct timezone *tzp); }\n\tSYS_SETTIMEOFDAY   = 68  // { int sys_settimeofday(const struct timeval *tv, const struct timezone *tzp); }\n\tSYS_SETITIMER      = 69  // { int sys_setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); }\n\tSYS_GETITIMER      = 70  // { int sys_getitimer(int which, struct itimerval *itv); }\n\tSYS_SELECT         = 71  // { int sys_select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }\n\tSYS_KEVENT         = 72  // { int sys_kevent(int fd, const struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); }\n\tSYS_MUNMAP         = 73  // { int sys_munmap(void *addr, size_t len); }\n\tSYS_MPROTECT       = 74  // { int sys_mprotect(void *addr, size_t len, int prot); }\n\tSYS_MADVISE        = 75  // { int sys_madvise(void *addr, size_t len, int behav); }\n\tSYS_UTIMES         = 76  // { int sys_utimes(const char *path, const struct timeval *tptr); }\n\tSYS_FUTIMES        = 77  // { int sys_futimes(int fd, const struct timeval *tptr); }\n\tSYS_MINCORE        = 78  // { int sys_mincore(void *addr, size_t len, char *vec); }\n\tSYS_GETGROUPS      = 79  // { int sys_getgroups(int gidsetsize, gid_t *gidset); }\n\tSYS_SETGROUPS      = 80  // { int sys_setgroups(int gidsetsize, const gid_t *gidset); }\n\tSYS_GETPGRP        = 81  // { int sys_getpgrp(void); }\n\tSYS_SETPGID        = 82  // { int sys_setpgid(pid_t pid, pid_t pgid); }\n\tSYS_FUTEX          = 83  // { int sys_futex(uint32_t *f, int op, int val, const struct timespec *timeout, uint32_t *g); }\n\tSYS_UTIMENSAT      = 84  // { int sys_utimensat(int fd, const char *path, const struct timespec *times, int flag); }\n\tSYS_FUTIMENS       = 85  // { int sys_futimens(int fd, const struct timespec *times); }\n\tSYS_KBIND          = 86  // { int sys_kbind(const struct __kbind *param, size_t psize, int64_t proc_cookie); }\n\tSYS_CLOCK_GETTIME  = 87  // { int sys_clock_gettime(clockid_t clock_id, struct timespec *tp); }\n\tSYS_CLOCK_SETTIME  = 88  // { int sys_clock_settime(clockid_t clock_id, const struct timespec *tp); }\n\tSYS_CLOCK_GETRES   = 89  // { int sys_clock_getres(clockid_t clock_id, struct timespec *tp); }\n\tSYS_DUP2           = 90  // { int sys_dup2(int from, int to); }\n\tSYS_NANOSLEEP      = 91  // { int sys_nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }\n\tSYS_FCNTL          = 92  // { int sys_fcntl(int fd, int cmd, ... void *arg); }\n\tSYS_ACCEPT4        = 93  // { int sys_accept4(int s, struct sockaddr *name, socklen_t *anamelen, int flags); }\n\tSYS___THRSLEEP     = 94  // { int sys___thrsleep(const volatile void *ident, clockid_t clock_id, const struct timespec *tp, void *lock, const int *abort); }\n\tSYS_FSYNC          = 95  // { int sys_fsync(int fd); }\n\tSYS_SETPRIORITY    = 96  // { int sys_setpriority(int which, id_t who, int prio); }\n\tSYS_SOCKET         = 97  // { int sys_socket(int domain, int type, int protocol); }\n\tSYS_CONNECT        = 98  // { int sys_connect(int s, const struct sockaddr *name, socklen_t namelen); }\n\tSYS_GETDENTS       = 99  // { int sys_getdents(int fd, void *buf, size_t buflen); }\n\tSYS_GETPRIORITY    = 100 // { int sys_getpriority(int which, id_t who); }\n\tSYS_PIPE2          = 101 // { int sys_pipe2(int *fdp, int flags); }\n\tSYS_DUP3           = 102 // { int sys_dup3(int from, int to, int flags); }\n\tSYS_SIGRETURN      = 103 // { int sys_sigreturn(struct sigcontext *sigcntxp); }\n\tSYS_BIND           = 104 // { int sys_bind(int s, const struct sockaddr *name, socklen_t namelen); }\n\tSYS_SETSOCKOPT     = 105 // { int sys_setsockopt(int s, int level, int name, const void *val, socklen_t valsize); }\n\tSYS_LISTEN         = 106 // { int sys_listen(int s, int backlog); }\n\tSYS_CHFLAGSAT      = 107 // { int sys_chflagsat(int fd, const char *path, u_int flags, int atflags); }\n\tSYS_PLEDGE         = 108 // { int sys_pledge(const char *promises, const char *execpromises); }\n\tSYS_PPOLL          = 109 // { int sys_ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); }\n\tSYS_PSELECT        = 110 // { int sys_pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); }\n\tSYS_SIGSUSPEND     = 111 // { int sys_sigsuspend(int mask); }\n\tSYS_SENDSYSLOG     = 112 // { int sys_sendsyslog(const char *buf, size_t nbyte, int flags); }\n\tSYS_UNVEIL         = 114 // { int sys_unveil(const char *path, const char *permissions); }\n\tSYS_GETSOCKOPT     = 118 // { int sys_getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); }\n\tSYS_THRKILL        = 119 // { int sys_thrkill(pid_t tid, int signum, void *tcb); }\n\tSYS_READV          = 120 // { ssize_t sys_readv(int fd, const struct iovec *iovp, int iovcnt); }\n\tSYS_WRITEV         = 121 // { ssize_t sys_writev(int fd, const struct iovec *iovp, int iovcnt); }\n\tSYS_KILL           = 122 // { int sys_kill(int pid, int signum); }\n\tSYS_FCHOWN         = 123 // { int sys_fchown(int fd, uid_t uid, gid_t gid); }\n\tSYS_FCHMOD         = 124 // { int sys_fchmod(int fd, mode_t mode); }\n\tSYS_SETREUID       = 126 // { int sys_setreuid(uid_t ruid, uid_t euid); }\n\tSYS_SETREGID       = 127 // { int sys_setregid(gid_t rgid, gid_t egid); }\n\tSYS_RENAME         = 128 // { int sys_rename(const char *from, const char *to); }\n\tSYS_FLOCK          = 131 // { int sys_flock(int fd, int how); }\n\tSYS_MKFIFO         = 132 // { int sys_mkfifo(const char *path, mode_t mode); }\n\tSYS_SENDTO         = 133 // { ssize_t sys_sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); }\n\tSYS_SHUTDOWN       = 134 // { int sys_shutdown(int s, int how); }\n\tSYS_SOCKETPAIR     = 135 // { int sys_socketpair(int domain, int type, int protocol, int *rsv); }\n\tSYS_MKDIR          = 136 // { int sys_mkdir(const char *path, mode_t mode); }\n\tSYS_RMDIR          = 137 // { int sys_rmdir(const char *path); }\n\tSYS_ADJTIME        = 140 // { int sys_adjtime(const struct timeval *delta, struct timeval *olddelta); }\n\tSYS_GETLOGIN_R     = 141 // { int sys_getlogin_r(char *namebuf, u_int namelen); }\n\tSYS_SETSID         = 147 // { int sys_setsid(void); }\n\tSYS_QUOTACTL       = 148 // { int sys_quotactl(const char *path, int cmd, int uid, char *arg); }\n\tSYS_NFSSVC         = 155 // { int sys_nfssvc(int flag, void *argp); }\n\tSYS_GETFH          = 161 // { int sys_getfh(const char *fname, fhandle_t *fhp); }\n\tSYS_SYSARCH        = 165 // { int sys_sysarch(int op, void *parms); }\n\tSYS_PREAD          = 173 // { ssize_t sys_pread(int fd, void *buf, size_t nbyte, int pad, off_t offset); }\n\tSYS_PWRITE         = 174 // { ssize_t sys_pwrite(int fd, const void *buf, size_t nbyte, int pad, off_t offset); }\n\tSYS_SETGID         = 181 // { int sys_setgid(gid_t gid); }\n\tSYS_SETEGID        = 182 // { int sys_setegid(gid_t egid); }\n\tSYS_SETEUID        = 183 // { int sys_seteuid(uid_t euid); }\n\tSYS_PATHCONF       = 191 // { long sys_pathconf(const char *path, int name); }\n\tSYS_FPATHCONF      = 192 // { long sys_fpathconf(int fd, int name); }\n\tSYS_SWAPCTL        = 193 // { int sys_swapctl(int cmd, const void *arg, int misc); }\n\tSYS_GETRLIMIT      = 194 // { int sys_getrlimit(int which, struct rlimit *rlp); }\n\tSYS_SETRLIMIT      = 195 // { int sys_setrlimit(int which, const struct rlimit *rlp); }\n\tSYS_MMAP           = 197 // { void *sys_mmap(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); }\n\tSYS_LSEEK          = 199 // { off_t sys_lseek(int fd, int pad, off_t offset, int whence); }\n\tSYS_TRUNCATE       = 200 // { int sys_truncate(const char *path, int pad, off_t length); }\n\tSYS_FTRUNCATE      = 201 // { int sys_ftruncate(int fd, int pad, off_t length); }\n\tSYS_SYSCTL         = 202 // { int sys_sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); }\n\tSYS_MLOCK          = 203 // { int sys_mlock(const void *addr, size_t len); }\n\tSYS_MUNLOCK        = 204 // { int sys_munlock(const void *addr, size_t len); }\n\tSYS_GETPGID        = 207 // { pid_t sys_getpgid(pid_t pid); }\n\tSYS_UTRACE         = 209 // { int sys_utrace(const char *label, const void *addr, size_t len); }\n\tSYS_SEMGET         = 221 // { int sys_semget(key_t key, int nsems, int semflg); }\n\tSYS_MSGGET         = 225 // { int sys_msgget(key_t key, int msgflg); }\n\tSYS_MSGSND         = 226 // { int sys_msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }\n\tSYS_MSGRCV         = 227 // { int sys_msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }\n\tSYS_SHMAT          = 228 // { void *sys_shmat(int shmid, const void *shmaddr, int shmflg); }\n\tSYS_SHMDT          = 230 // { int sys_shmdt(const void *shmaddr); }\n\tSYS_MINHERIT       = 250 // { int sys_minherit(void *addr, size_t len, int inherit); }\n\tSYS_POLL           = 252 // { int sys_poll(struct pollfd *fds, u_int nfds, int timeout); }\n\tSYS_ISSETUGID      = 253 // { int sys_issetugid(void); }\n\tSYS_LCHOWN         = 254 // { int sys_lchown(const char *path, uid_t uid, gid_t gid); }\n\tSYS_GETSID         = 255 // { pid_t sys_getsid(pid_t pid); }\n\tSYS_MSYNC          = 256 // { int sys_msync(void *addr, size_t len, int flags); }\n\tSYS_PIPE           = 263 // { int sys_pipe(int *fdp); }\n\tSYS_FHOPEN         = 264 // { int sys_fhopen(const fhandle_t *fhp, int flags); }\n\tSYS_PREADV         = 267 // { ssize_t sys_preadv(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); }\n\tSYS_PWRITEV        = 268 // { ssize_t sys_pwritev(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); }\n\tSYS_KQUEUE         = 269 // { int sys_kqueue(void); }\n\tSYS_MLOCKALL       = 271 // { int sys_mlockall(int flags); }\n\tSYS_MUNLOCKALL     = 272 // { int sys_munlockall(void); }\n\tSYS_GETRESUID      = 281 // { int sys_getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); }\n\tSYS_SETRESUID      = 282 // { int sys_setresuid(uid_t ruid, uid_t euid, uid_t suid); }\n\tSYS_GETRESGID      = 283 // { int sys_getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); }\n\tSYS_SETRESGID      = 284 // { int sys_setresgid(gid_t rgid, gid_t egid, gid_t sgid); }\n\tSYS_MQUERY         = 286 // { void *sys_mquery(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); }\n\tSYS_CLOSEFROM      = 287 // { int sys_closefrom(int fd); }\n\tSYS_SIGALTSTACK    = 288 // { int sys_sigaltstack(const struct sigaltstack *nss, struct sigaltstack *oss); }\n\tSYS_SHMGET         = 289 // { int sys_shmget(key_t key, size_t size, int shmflg); }\n\tSYS_SEMOP          = 290 // { int sys_semop(int semid, struct sembuf *sops, size_t nsops); }\n\tSYS_FHSTAT         = 294 // { int sys_fhstat(const fhandle_t *fhp, struct stat *sb); }\n\tSYS___SEMCTL       = 295 // { int sys___semctl(int semid, int semnum, int cmd, union semun *arg); }\n\tSYS_SHMCTL         = 296 // { int sys_shmctl(int shmid, int cmd, struct shmid_ds *buf); }\n\tSYS_MSGCTL         = 297 // { int sys_msgctl(int msqid, int cmd, struct msqid_ds *buf); }\n\tSYS_SCHED_YIELD    = 298 // { int sys_sched_yield(void); }\n\tSYS_GETTHRID       = 299 // { pid_t sys_getthrid(void); }\n\tSYS___THRWAKEUP    = 301 // { int sys___thrwakeup(const volatile void *ident, int n); }\n\tSYS___THREXIT      = 302 // { void sys___threxit(pid_t *notdead); }\n\tSYS___THRSIGDIVERT = 303 // { int sys___thrsigdivert(sigset_t sigmask, siginfo_t *info, const struct timespec *timeout); }\n\tSYS___GETCWD       = 304 // { int sys___getcwd(char *buf, size_t len); }\n\tSYS_ADJFREQ        = 305 // { int sys_adjfreq(const int64_t *freq, int64_t *oldfreq); }\n\tSYS_SETRTABLE      = 310 // { int sys_setrtable(int rtableid); }\n\tSYS_GETRTABLE      = 311 // { int sys_getrtable(void); }\n\tSYS_FACCESSAT      = 313 // { int sys_faccessat(int fd, const char *path, int amode, int flag); }\n\tSYS_FCHMODAT       = 314 // { int sys_fchmodat(int fd, const char *path, mode_t mode, int flag); }\n\tSYS_FCHOWNAT       = 315 // { int sys_fchownat(int fd, const char *path, uid_t uid, gid_t gid, int flag); }\n\tSYS_LINKAT         = 317 // { int sys_linkat(int fd1, const char *path1, int fd2, const char *path2, int flag); }\n\tSYS_MKDIRAT        = 318 // { int sys_mkdirat(int fd, const char *path, mode_t mode); }\n\tSYS_MKFIFOAT       = 319 // { int sys_mkfifoat(int fd, const char *path, mode_t mode); }\n\tSYS_MKNODAT        = 320 // { int sys_mknodat(int fd, const char *path, mode_t mode, dev_t dev); }\n\tSYS_OPENAT         = 321 // { int sys_openat(int fd, const char *path, int flags, ... mode_t mode); }\n\tSYS_READLINKAT     = 322 // { ssize_t sys_readlinkat(int fd, const char *path, char *buf, size_t count); }\n\tSYS_RENAMEAT       = 323 // { int sys_renameat(int fromfd, const char *from, int tofd, const char *to); }\n\tSYS_SYMLINKAT      = 324 // { int sys_symlinkat(const char *path, int fd, const char *link); }\n\tSYS_UNLINKAT       = 325 // { int sys_unlinkat(int fd, const char *path, int flag); }\n\tSYS___SET_TCB      = 329 // { void sys___set_tcb(void *tcb); }\n\tSYS___GET_TCB      = 330 // { void *sys___get_tcb(void); }\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go",
    "content": "// go run mksysnum.go https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build amd64,openbsd\n\npackage unix\n\nconst (\n\tSYS_EXIT           = 1   // { void sys_exit(int rval); }\n\tSYS_FORK           = 2   // { int sys_fork(void); }\n\tSYS_READ           = 3   // { ssize_t sys_read(int fd, void *buf, size_t nbyte); }\n\tSYS_WRITE          = 4   // { ssize_t sys_write(int fd, const void *buf, size_t nbyte); }\n\tSYS_OPEN           = 5   // { int sys_open(const char *path, int flags, ... mode_t mode); }\n\tSYS_CLOSE          = 6   // { int sys_close(int fd); }\n\tSYS_GETENTROPY     = 7   // { int sys_getentropy(void *buf, size_t nbyte); }\n\tSYS___TFORK        = 8   // { int sys___tfork(const struct __tfork *param, size_t psize); }\n\tSYS_LINK           = 9   // { int sys_link(const char *path, const char *link); }\n\tSYS_UNLINK         = 10  // { int sys_unlink(const char *path); }\n\tSYS_WAIT4          = 11  // { pid_t sys_wait4(pid_t pid, int *status, int options, struct rusage *rusage); }\n\tSYS_CHDIR          = 12  // { int sys_chdir(const char *path); }\n\tSYS_FCHDIR         = 13  // { int sys_fchdir(int fd); }\n\tSYS_MKNOD          = 14  // { int sys_mknod(const char *path, mode_t mode, dev_t dev); }\n\tSYS_CHMOD          = 15  // { int sys_chmod(const char *path, mode_t mode); }\n\tSYS_CHOWN          = 16  // { int sys_chown(const char *path, uid_t uid, gid_t gid); }\n\tSYS_OBREAK         = 17  // { int sys_obreak(char *nsize); } break\n\tSYS_GETDTABLECOUNT = 18  // { int sys_getdtablecount(void); }\n\tSYS_GETRUSAGE      = 19  // { int sys_getrusage(int who, struct rusage *rusage); }\n\tSYS_GETPID         = 20  // { pid_t sys_getpid(void); }\n\tSYS_MOUNT          = 21  // { int sys_mount(const char *type, const char *path, int flags, void *data); }\n\tSYS_UNMOUNT        = 22  // { int sys_unmount(const char *path, int flags); }\n\tSYS_SETUID         = 23  // { int sys_setuid(uid_t uid); }\n\tSYS_GETUID         = 24  // { uid_t sys_getuid(void); }\n\tSYS_GETEUID        = 25  // { uid_t sys_geteuid(void); }\n\tSYS_PTRACE         = 26  // { int sys_ptrace(int req, pid_t pid, caddr_t addr, int data); }\n\tSYS_RECVMSG        = 27  // { ssize_t sys_recvmsg(int s, struct msghdr *msg, int flags); }\n\tSYS_SENDMSG        = 28  // { ssize_t sys_sendmsg(int s, const struct msghdr *msg, int flags); }\n\tSYS_RECVFROM       = 29  // { ssize_t sys_recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); }\n\tSYS_ACCEPT         = 30  // { int sys_accept(int s, struct sockaddr *name, socklen_t *anamelen); }\n\tSYS_GETPEERNAME    = 31  // { int sys_getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); }\n\tSYS_GETSOCKNAME    = 32  // { int sys_getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); }\n\tSYS_ACCESS         = 33  // { int sys_access(const char *path, int amode); }\n\tSYS_CHFLAGS        = 34  // { int sys_chflags(const char *path, u_int flags); }\n\tSYS_FCHFLAGS       = 35  // { int sys_fchflags(int fd, u_int flags); }\n\tSYS_SYNC           = 36  // { void sys_sync(void); }\n\tSYS_STAT           = 38  // { int sys_stat(const char *path, struct stat *ub); }\n\tSYS_GETPPID        = 39  // { pid_t sys_getppid(void); }\n\tSYS_LSTAT          = 40  // { int sys_lstat(const char *path, struct stat *ub); }\n\tSYS_DUP            = 41  // { int sys_dup(int fd); }\n\tSYS_FSTATAT        = 42  // { int sys_fstatat(int fd, const char *path, struct stat *buf, int flag); }\n\tSYS_GETEGID        = 43  // { gid_t sys_getegid(void); }\n\tSYS_PROFIL         = 44  // { int sys_profil(caddr_t samples, size_t size, u_long offset, u_int scale); }\n\tSYS_KTRACE         = 45  // { int sys_ktrace(const char *fname, int ops, int facs, pid_t pid); }\n\tSYS_SIGACTION      = 46  // { int sys_sigaction(int signum, const struct sigaction *nsa, struct sigaction *osa); }\n\tSYS_GETGID         = 47  // { gid_t sys_getgid(void); }\n\tSYS_SIGPROCMASK    = 48  // { int sys_sigprocmask(int how, sigset_t mask); }\n\tSYS_SETLOGIN       = 50  // { int sys_setlogin(const char *namebuf); }\n\tSYS_ACCT           = 51  // { int sys_acct(const char *path); }\n\tSYS_SIGPENDING     = 52  // { int sys_sigpending(void); }\n\tSYS_FSTAT          = 53  // { int sys_fstat(int fd, struct stat *sb); }\n\tSYS_IOCTL          = 54  // { int sys_ioctl(int fd, u_long com, ... void *data); }\n\tSYS_REBOOT         = 55  // { int sys_reboot(int opt); }\n\tSYS_REVOKE         = 56  // { int sys_revoke(const char *path); }\n\tSYS_SYMLINK        = 57  // { int sys_symlink(const char *path, const char *link); }\n\tSYS_READLINK       = 58  // { ssize_t sys_readlink(const char *path, char *buf, size_t count); }\n\tSYS_EXECVE         = 59  // { int sys_execve(const char *path, char * const *argp, char * const *envp); }\n\tSYS_UMASK          = 60  // { mode_t sys_umask(mode_t newmask); }\n\tSYS_CHROOT         = 61  // { int sys_chroot(const char *path); }\n\tSYS_GETFSSTAT      = 62  // { int sys_getfsstat(struct statfs *buf, size_t bufsize, int flags); }\n\tSYS_STATFS         = 63  // { int sys_statfs(const char *path, struct statfs *buf); }\n\tSYS_FSTATFS        = 64  // { int sys_fstatfs(int fd, struct statfs *buf); }\n\tSYS_FHSTATFS       = 65  // { int sys_fhstatfs(const fhandle_t *fhp, struct statfs *buf); }\n\tSYS_VFORK          = 66  // { int sys_vfork(void); }\n\tSYS_GETTIMEOFDAY   = 67  // { int sys_gettimeofday(struct timeval *tp, struct timezone *tzp); }\n\tSYS_SETTIMEOFDAY   = 68  // { int sys_settimeofday(const struct timeval *tv, const struct timezone *tzp); }\n\tSYS_SETITIMER      = 69  // { int sys_setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); }\n\tSYS_GETITIMER      = 70  // { int sys_getitimer(int which, struct itimerval *itv); }\n\tSYS_SELECT         = 71  // { int sys_select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }\n\tSYS_KEVENT         = 72  // { int sys_kevent(int fd, const struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); }\n\tSYS_MUNMAP         = 73  // { int sys_munmap(void *addr, size_t len); }\n\tSYS_MPROTECT       = 74  // { int sys_mprotect(void *addr, size_t len, int prot); }\n\tSYS_MADVISE        = 75  // { int sys_madvise(void *addr, size_t len, int behav); }\n\tSYS_UTIMES         = 76  // { int sys_utimes(const char *path, const struct timeval *tptr); }\n\tSYS_FUTIMES        = 77  // { int sys_futimes(int fd, const struct timeval *tptr); }\n\tSYS_MINCORE        = 78  // { int sys_mincore(void *addr, size_t len, char *vec); }\n\tSYS_GETGROUPS      = 79  // { int sys_getgroups(int gidsetsize, gid_t *gidset); }\n\tSYS_SETGROUPS      = 80  // { int sys_setgroups(int gidsetsize, const gid_t *gidset); }\n\tSYS_GETPGRP        = 81  // { int sys_getpgrp(void); }\n\tSYS_SETPGID        = 82  // { int sys_setpgid(pid_t pid, pid_t pgid); }\n\tSYS_FUTEX          = 83  // { int sys_futex(uint32_t *f, int op, int val, const struct timespec *timeout, uint32_t *g); }\n\tSYS_UTIMENSAT      = 84  // { int sys_utimensat(int fd, const char *path, const struct timespec *times, int flag); }\n\tSYS_FUTIMENS       = 85  // { int sys_futimens(int fd, const struct timespec *times); }\n\tSYS_KBIND          = 86  // { int sys_kbind(const struct __kbind *param, size_t psize, int64_t proc_cookie); }\n\tSYS_CLOCK_GETTIME  = 87  // { int sys_clock_gettime(clockid_t clock_id, struct timespec *tp); }\n\tSYS_CLOCK_SETTIME  = 88  // { int sys_clock_settime(clockid_t clock_id, const struct timespec *tp); }\n\tSYS_CLOCK_GETRES   = 89  // { int sys_clock_getres(clockid_t clock_id, struct timespec *tp); }\n\tSYS_DUP2           = 90  // { int sys_dup2(int from, int to); }\n\tSYS_NANOSLEEP      = 91  // { int sys_nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }\n\tSYS_FCNTL          = 92  // { int sys_fcntl(int fd, int cmd, ... void *arg); }\n\tSYS_ACCEPT4        = 93  // { int sys_accept4(int s, struct sockaddr *name, socklen_t *anamelen, int flags); }\n\tSYS___THRSLEEP     = 94  // { int sys___thrsleep(const volatile void *ident, clockid_t clock_id, const struct timespec *tp, void *lock, const int *abort); }\n\tSYS_FSYNC          = 95  // { int sys_fsync(int fd); }\n\tSYS_SETPRIORITY    = 96  // { int sys_setpriority(int which, id_t who, int prio); }\n\tSYS_SOCKET         = 97  // { int sys_socket(int domain, int type, int protocol); }\n\tSYS_CONNECT        = 98  // { int sys_connect(int s, const struct sockaddr *name, socklen_t namelen); }\n\tSYS_GETDENTS       = 99  // { int sys_getdents(int fd, void *buf, size_t buflen); }\n\tSYS_GETPRIORITY    = 100 // { int sys_getpriority(int which, id_t who); }\n\tSYS_PIPE2          = 101 // { int sys_pipe2(int *fdp, int flags); }\n\tSYS_DUP3           = 102 // { int sys_dup3(int from, int to, int flags); }\n\tSYS_SIGRETURN      = 103 // { int sys_sigreturn(struct sigcontext *sigcntxp); }\n\tSYS_BIND           = 104 // { int sys_bind(int s, const struct sockaddr *name, socklen_t namelen); }\n\tSYS_SETSOCKOPT     = 105 // { int sys_setsockopt(int s, int level, int name, const void *val, socklen_t valsize); }\n\tSYS_LISTEN         = 106 // { int sys_listen(int s, int backlog); }\n\tSYS_CHFLAGSAT      = 107 // { int sys_chflagsat(int fd, const char *path, u_int flags, int atflags); }\n\tSYS_PLEDGE         = 108 // { int sys_pledge(const char *promises, const char *execpromises); }\n\tSYS_PPOLL          = 109 // { int sys_ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); }\n\tSYS_PSELECT        = 110 // { int sys_pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); }\n\tSYS_SIGSUSPEND     = 111 // { int sys_sigsuspend(int mask); }\n\tSYS_SENDSYSLOG     = 112 // { int sys_sendsyslog(const char *buf, size_t nbyte, int flags); }\n\tSYS_UNVEIL         = 114 // { int sys_unveil(const char *path, const char *permissions); }\n\tSYS_GETSOCKOPT     = 118 // { int sys_getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); }\n\tSYS_THRKILL        = 119 // { int sys_thrkill(pid_t tid, int signum, void *tcb); }\n\tSYS_READV          = 120 // { ssize_t sys_readv(int fd, const struct iovec *iovp, int iovcnt); }\n\tSYS_WRITEV         = 121 // { ssize_t sys_writev(int fd, const struct iovec *iovp, int iovcnt); }\n\tSYS_KILL           = 122 // { int sys_kill(int pid, int signum); }\n\tSYS_FCHOWN         = 123 // { int sys_fchown(int fd, uid_t uid, gid_t gid); }\n\tSYS_FCHMOD         = 124 // { int sys_fchmod(int fd, mode_t mode); }\n\tSYS_SETREUID       = 126 // { int sys_setreuid(uid_t ruid, uid_t euid); }\n\tSYS_SETREGID       = 127 // { int sys_setregid(gid_t rgid, gid_t egid); }\n\tSYS_RENAME         = 128 // { int sys_rename(const char *from, const char *to); }\n\tSYS_FLOCK          = 131 // { int sys_flock(int fd, int how); }\n\tSYS_MKFIFO         = 132 // { int sys_mkfifo(const char *path, mode_t mode); }\n\tSYS_SENDTO         = 133 // { ssize_t sys_sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); }\n\tSYS_SHUTDOWN       = 134 // { int sys_shutdown(int s, int how); }\n\tSYS_SOCKETPAIR     = 135 // { int sys_socketpair(int domain, int type, int protocol, int *rsv); }\n\tSYS_MKDIR          = 136 // { int sys_mkdir(const char *path, mode_t mode); }\n\tSYS_RMDIR          = 137 // { int sys_rmdir(const char *path); }\n\tSYS_ADJTIME        = 140 // { int sys_adjtime(const struct timeval *delta, struct timeval *olddelta); }\n\tSYS_GETLOGIN_R     = 141 // { int sys_getlogin_r(char *namebuf, u_int namelen); }\n\tSYS_SETSID         = 147 // { int sys_setsid(void); }\n\tSYS_QUOTACTL       = 148 // { int sys_quotactl(const char *path, int cmd, int uid, char *arg); }\n\tSYS_NFSSVC         = 155 // { int sys_nfssvc(int flag, void *argp); }\n\tSYS_GETFH          = 161 // { int sys_getfh(const char *fname, fhandle_t *fhp); }\n\tSYS_SYSARCH        = 165 // { int sys_sysarch(int op, void *parms); }\n\tSYS_PREAD          = 173 // { ssize_t sys_pread(int fd, void *buf, size_t nbyte, int pad, off_t offset); }\n\tSYS_PWRITE         = 174 // { ssize_t sys_pwrite(int fd, const void *buf, size_t nbyte, int pad, off_t offset); }\n\tSYS_SETGID         = 181 // { int sys_setgid(gid_t gid); }\n\tSYS_SETEGID        = 182 // { int sys_setegid(gid_t egid); }\n\tSYS_SETEUID        = 183 // { int sys_seteuid(uid_t euid); }\n\tSYS_PATHCONF       = 191 // { long sys_pathconf(const char *path, int name); }\n\tSYS_FPATHCONF      = 192 // { long sys_fpathconf(int fd, int name); }\n\tSYS_SWAPCTL        = 193 // { int sys_swapctl(int cmd, const void *arg, int misc); }\n\tSYS_GETRLIMIT      = 194 // { int sys_getrlimit(int which, struct rlimit *rlp); }\n\tSYS_SETRLIMIT      = 195 // { int sys_setrlimit(int which, const struct rlimit *rlp); }\n\tSYS_MMAP           = 197 // { void *sys_mmap(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); }\n\tSYS_LSEEK          = 199 // { off_t sys_lseek(int fd, int pad, off_t offset, int whence); }\n\tSYS_TRUNCATE       = 200 // { int sys_truncate(const char *path, int pad, off_t length); }\n\tSYS_FTRUNCATE      = 201 // { int sys_ftruncate(int fd, int pad, off_t length); }\n\tSYS_SYSCTL         = 202 // { int sys_sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); }\n\tSYS_MLOCK          = 203 // { int sys_mlock(const void *addr, size_t len); }\n\tSYS_MUNLOCK        = 204 // { int sys_munlock(const void *addr, size_t len); }\n\tSYS_GETPGID        = 207 // { pid_t sys_getpgid(pid_t pid); }\n\tSYS_UTRACE         = 209 // { int sys_utrace(const char *label, const void *addr, size_t len); }\n\tSYS_SEMGET         = 221 // { int sys_semget(key_t key, int nsems, int semflg); }\n\tSYS_MSGGET         = 225 // { int sys_msgget(key_t key, int msgflg); }\n\tSYS_MSGSND         = 226 // { int sys_msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }\n\tSYS_MSGRCV         = 227 // { int sys_msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }\n\tSYS_SHMAT          = 228 // { void *sys_shmat(int shmid, const void *shmaddr, int shmflg); }\n\tSYS_SHMDT          = 230 // { int sys_shmdt(const void *shmaddr); }\n\tSYS_MINHERIT       = 250 // { int sys_minherit(void *addr, size_t len, int inherit); }\n\tSYS_POLL           = 252 // { int sys_poll(struct pollfd *fds, u_int nfds, int timeout); }\n\tSYS_ISSETUGID      = 253 // { int sys_issetugid(void); }\n\tSYS_LCHOWN         = 254 // { int sys_lchown(const char *path, uid_t uid, gid_t gid); }\n\tSYS_GETSID         = 255 // { pid_t sys_getsid(pid_t pid); }\n\tSYS_MSYNC          = 256 // { int sys_msync(void *addr, size_t len, int flags); }\n\tSYS_PIPE           = 263 // { int sys_pipe(int *fdp); }\n\tSYS_FHOPEN         = 264 // { int sys_fhopen(const fhandle_t *fhp, int flags); }\n\tSYS_PREADV         = 267 // { ssize_t sys_preadv(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); }\n\tSYS_PWRITEV        = 268 // { ssize_t sys_pwritev(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); }\n\tSYS_KQUEUE         = 269 // { int sys_kqueue(void); }\n\tSYS_MLOCKALL       = 271 // { int sys_mlockall(int flags); }\n\tSYS_MUNLOCKALL     = 272 // { int sys_munlockall(void); }\n\tSYS_GETRESUID      = 281 // { int sys_getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); }\n\tSYS_SETRESUID      = 282 // { int sys_setresuid(uid_t ruid, uid_t euid, uid_t suid); }\n\tSYS_GETRESGID      = 283 // { int sys_getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); }\n\tSYS_SETRESGID      = 284 // { int sys_setresgid(gid_t rgid, gid_t egid, gid_t sgid); }\n\tSYS_MQUERY         = 286 // { void *sys_mquery(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); }\n\tSYS_CLOSEFROM      = 287 // { int sys_closefrom(int fd); }\n\tSYS_SIGALTSTACK    = 288 // { int sys_sigaltstack(const struct sigaltstack *nss, struct sigaltstack *oss); }\n\tSYS_SHMGET         = 289 // { int sys_shmget(key_t key, size_t size, int shmflg); }\n\tSYS_SEMOP          = 290 // { int sys_semop(int semid, struct sembuf *sops, size_t nsops); }\n\tSYS_FHSTAT         = 294 // { int sys_fhstat(const fhandle_t *fhp, struct stat *sb); }\n\tSYS___SEMCTL       = 295 // { int sys___semctl(int semid, int semnum, int cmd, union semun *arg); }\n\tSYS_SHMCTL         = 296 // { int sys_shmctl(int shmid, int cmd, struct shmid_ds *buf); }\n\tSYS_MSGCTL         = 297 // { int sys_msgctl(int msqid, int cmd, struct msqid_ds *buf); }\n\tSYS_SCHED_YIELD    = 298 // { int sys_sched_yield(void); }\n\tSYS_GETTHRID       = 299 // { pid_t sys_getthrid(void); }\n\tSYS___THRWAKEUP    = 301 // { int sys___thrwakeup(const volatile void *ident, int n); }\n\tSYS___THREXIT      = 302 // { void sys___threxit(pid_t *notdead); }\n\tSYS___THRSIGDIVERT = 303 // { int sys___thrsigdivert(sigset_t sigmask, siginfo_t *info, const struct timespec *timeout); }\n\tSYS___GETCWD       = 304 // { int sys___getcwd(char *buf, size_t len); }\n\tSYS_ADJFREQ        = 305 // { int sys_adjfreq(const int64_t *freq, int64_t *oldfreq); }\n\tSYS_SETRTABLE      = 310 // { int sys_setrtable(int rtableid); }\n\tSYS_GETRTABLE      = 311 // { int sys_getrtable(void); }\n\tSYS_FACCESSAT      = 313 // { int sys_faccessat(int fd, const char *path, int amode, int flag); }\n\tSYS_FCHMODAT       = 314 // { int sys_fchmodat(int fd, const char *path, mode_t mode, int flag); }\n\tSYS_FCHOWNAT       = 315 // { int sys_fchownat(int fd, const char *path, uid_t uid, gid_t gid, int flag); }\n\tSYS_LINKAT         = 317 // { int sys_linkat(int fd1, const char *path1, int fd2, const char *path2, int flag); }\n\tSYS_MKDIRAT        = 318 // { int sys_mkdirat(int fd, const char *path, mode_t mode); }\n\tSYS_MKFIFOAT       = 319 // { int sys_mkfifoat(int fd, const char *path, mode_t mode); }\n\tSYS_MKNODAT        = 320 // { int sys_mknodat(int fd, const char *path, mode_t mode, dev_t dev); }\n\tSYS_OPENAT         = 321 // { int sys_openat(int fd, const char *path, int flags, ... mode_t mode); }\n\tSYS_READLINKAT     = 322 // { ssize_t sys_readlinkat(int fd, const char *path, char *buf, size_t count); }\n\tSYS_RENAMEAT       = 323 // { int sys_renameat(int fromfd, const char *from, int tofd, const char *to); }\n\tSYS_SYMLINKAT      = 324 // { int sys_symlinkat(const char *path, int fd, const char *link); }\n\tSYS_UNLINKAT       = 325 // { int sys_unlinkat(int fd, const char *path, int flag); }\n\tSYS___SET_TCB      = 329 // { void sys___set_tcb(void *tcb); }\n\tSYS___GET_TCB      = 330 // { void *sys___get_tcb(void); }\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm.go",
    "content": "// go run mksysnum.go https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build arm,openbsd\n\npackage unix\n\nconst (\n\tSYS_EXIT           = 1   // { void sys_exit(int rval); }\n\tSYS_FORK           = 2   // { int sys_fork(void); }\n\tSYS_READ           = 3   // { ssize_t sys_read(int fd, void *buf, size_t nbyte); }\n\tSYS_WRITE          = 4   // { ssize_t sys_write(int fd, const void *buf, size_t nbyte); }\n\tSYS_OPEN           = 5   // { int sys_open(const char *path, int flags, ... mode_t mode); }\n\tSYS_CLOSE          = 6   // { int sys_close(int fd); }\n\tSYS_GETENTROPY     = 7   // { int sys_getentropy(void *buf, size_t nbyte); }\n\tSYS___TFORK        = 8   // { int sys___tfork(const struct __tfork *param, size_t psize); }\n\tSYS_LINK           = 9   // { int sys_link(const char *path, const char *link); }\n\tSYS_UNLINK         = 10  // { int sys_unlink(const char *path); }\n\tSYS_WAIT4          = 11  // { pid_t sys_wait4(pid_t pid, int *status, int options, struct rusage *rusage); }\n\tSYS_CHDIR          = 12  // { int sys_chdir(const char *path); }\n\tSYS_FCHDIR         = 13  // { int sys_fchdir(int fd); }\n\tSYS_MKNOD          = 14  // { int sys_mknod(const char *path, mode_t mode, dev_t dev); }\n\tSYS_CHMOD          = 15  // { int sys_chmod(const char *path, mode_t mode); }\n\tSYS_CHOWN          = 16  // { int sys_chown(const char *path, uid_t uid, gid_t gid); }\n\tSYS_OBREAK         = 17  // { int sys_obreak(char *nsize); } break\n\tSYS_GETDTABLECOUNT = 18  // { int sys_getdtablecount(void); }\n\tSYS_GETRUSAGE      = 19  // { int sys_getrusage(int who, struct rusage *rusage); }\n\tSYS_GETPID         = 20  // { pid_t sys_getpid(void); }\n\tSYS_MOUNT          = 21  // { int sys_mount(const char *type, const char *path, int flags, void *data); }\n\tSYS_UNMOUNT        = 22  // { int sys_unmount(const char *path, int flags); }\n\tSYS_SETUID         = 23  // { int sys_setuid(uid_t uid); }\n\tSYS_GETUID         = 24  // { uid_t sys_getuid(void); }\n\tSYS_GETEUID        = 25  // { uid_t sys_geteuid(void); }\n\tSYS_PTRACE         = 26  // { int sys_ptrace(int req, pid_t pid, caddr_t addr, int data); }\n\tSYS_RECVMSG        = 27  // { ssize_t sys_recvmsg(int s, struct msghdr *msg, int flags); }\n\tSYS_SENDMSG        = 28  // { ssize_t sys_sendmsg(int s, const struct msghdr *msg, int flags); }\n\tSYS_RECVFROM       = 29  // { ssize_t sys_recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); }\n\tSYS_ACCEPT         = 30  // { int sys_accept(int s, struct sockaddr *name, socklen_t *anamelen); }\n\tSYS_GETPEERNAME    = 31  // { int sys_getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); }\n\tSYS_GETSOCKNAME    = 32  // { int sys_getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); }\n\tSYS_ACCESS         = 33  // { int sys_access(const char *path, int amode); }\n\tSYS_CHFLAGS        = 34  // { int sys_chflags(const char *path, u_int flags); }\n\tSYS_FCHFLAGS       = 35  // { int sys_fchflags(int fd, u_int flags); }\n\tSYS_SYNC           = 36  // { void sys_sync(void); }\n\tSYS_STAT           = 38  // { int sys_stat(const char *path, struct stat *ub); }\n\tSYS_GETPPID        = 39  // { pid_t sys_getppid(void); }\n\tSYS_LSTAT          = 40  // { int sys_lstat(const char *path, struct stat *ub); }\n\tSYS_DUP            = 41  // { int sys_dup(int fd); }\n\tSYS_FSTATAT        = 42  // { int sys_fstatat(int fd, const char *path, struct stat *buf, int flag); }\n\tSYS_GETEGID        = 43  // { gid_t sys_getegid(void); }\n\tSYS_PROFIL         = 44  // { int sys_profil(caddr_t samples, size_t size, u_long offset, u_int scale); }\n\tSYS_KTRACE         = 45  // { int sys_ktrace(const char *fname, int ops, int facs, pid_t pid); }\n\tSYS_SIGACTION      = 46  // { int sys_sigaction(int signum, const struct sigaction *nsa, struct sigaction *osa); }\n\tSYS_GETGID         = 47  // { gid_t sys_getgid(void); }\n\tSYS_SIGPROCMASK    = 48  // { int sys_sigprocmask(int how, sigset_t mask); }\n\tSYS_SETLOGIN       = 50  // { int sys_setlogin(const char *namebuf); }\n\tSYS_ACCT           = 51  // { int sys_acct(const char *path); }\n\tSYS_SIGPENDING     = 52  // { int sys_sigpending(void); }\n\tSYS_FSTAT          = 53  // { int sys_fstat(int fd, struct stat *sb); }\n\tSYS_IOCTL          = 54  // { int sys_ioctl(int fd, u_long com, ... void *data); }\n\tSYS_REBOOT         = 55  // { int sys_reboot(int opt); }\n\tSYS_REVOKE         = 56  // { int sys_revoke(const char *path); }\n\tSYS_SYMLINK        = 57  // { int sys_symlink(const char *path, const char *link); }\n\tSYS_READLINK       = 58  // { ssize_t sys_readlink(const char *path, char *buf, size_t count); }\n\tSYS_EXECVE         = 59  // { int sys_execve(const char *path, char * const *argp, char * const *envp); }\n\tSYS_UMASK          = 60  // { mode_t sys_umask(mode_t newmask); }\n\tSYS_CHROOT         = 61  // { int sys_chroot(const char *path); }\n\tSYS_GETFSSTAT      = 62  // { int sys_getfsstat(struct statfs *buf, size_t bufsize, int flags); }\n\tSYS_STATFS         = 63  // { int sys_statfs(const char *path, struct statfs *buf); }\n\tSYS_FSTATFS        = 64  // { int sys_fstatfs(int fd, struct statfs *buf); }\n\tSYS_FHSTATFS       = 65  // { int sys_fhstatfs(const fhandle_t *fhp, struct statfs *buf); }\n\tSYS_VFORK          = 66  // { int sys_vfork(void); }\n\tSYS_GETTIMEOFDAY   = 67  // { int sys_gettimeofday(struct timeval *tp, struct timezone *tzp); }\n\tSYS_SETTIMEOFDAY   = 68  // { int sys_settimeofday(const struct timeval *tv, const struct timezone *tzp); }\n\tSYS_SETITIMER      = 69  // { int sys_setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); }\n\tSYS_GETITIMER      = 70  // { int sys_getitimer(int which, struct itimerval *itv); }\n\tSYS_SELECT         = 71  // { int sys_select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }\n\tSYS_KEVENT         = 72  // { int sys_kevent(int fd, const struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); }\n\tSYS_MUNMAP         = 73  // { int sys_munmap(void *addr, size_t len); }\n\tSYS_MPROTECT       = 74  // { int sys_mprotect(void *addr, size_t len, int prot); }\n\tSYS_MADVISE        = 75  // { int sys_madvise(void *addr, size_t len, int behav); }\n\tSYS_UTIMES         = 76  // { int sys_utimes(const char *path, const struct timeval *tptr); }\n\tSYS_FUTIMES        = 77  // { int sys_futimes(int fd, const struct timeval *tptr); }\n\tSYS_MINCORE        = 78  // { int sys_mincore(void *addr, size_t len, char *vec); }\n\tSYS_GETGROUPS      = 79  // { int sys_getgroups(int gidsetsize, gid_t *gidset); }\n\tSYS_SETGROUPS      = 80  // { int sys_setgroups(int gidsetsize, const gid_t *gidset); }\n\tSYS_GETPGRP        = 81  // { int sys_getpgrp(void); }\n\tSYS_SETPGID        = 82  // { int sys_setpgid(pid_t pid, pid_t pgid); }\n\tSYS_FUTEX          = 83  // { int sys_futex(uint32_t *f, int op, int val, const struct timespec *timeout, uint32_t *g); }\n\tSYS_UTIMENSAT      = 84  // { int sys_utimensat(int fd, const char *path, const struct timespec *times, int flag); }\n\tSYS_FUTIMENS       = 85  // { int sys_futimens(int fd, const struct timespec *times); }\n\tSYS_KBIND          = 86  // { int sys_kbind(const struct __kbind *param, size_t psize, int64_t proc_cookie); }\n\tSYS_CLOCK_GETTIME  = 87  // { int sys_clock_gettime(clockid_t clock_id, struct timespec *tp); }\n\tSYS_CLOCK_SETTIME  = 88  // { int sys_clock_settime(clockid_t clock_id, const struct timespec *tp); }\n\tSYS_CLOCK_GETRES   = 89  // { int sys_clock_getres(clockid_t clock_id, struct timespec *tp); }\n\tSYS_DUP2           = 90  // { int sys_dup2(int from, int to); }\n\tSYS_NANOSLEEP      = 91  // { int sys_nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }\n\tSYS_FCNTL          = 92  // { int sys_fcntl(int fd, int cmd, ... void *arg); }\n\tSYS_ACCEPT4        = 93  // { int sys_accept4(int s, struct sockaddr *name, socklen_t *anamelen, int flags); }\n\tSYS___THRSLEEP     = 94  // { int sys___thrsleep(const volatile void *ident, clockid_t clock_id, const struct timespec *tp, void *lock, const int *abort); }\n\tSYS_FSYNC          = 95  // { int sys_fsync(int fd); }\n\tSYS_SETPRIORITY    = 96  // { int sys_setpriority(int which, id_t who, int prio); }\n\tSYS_SOCKET         = 97  // { int sys_socket(int domain, int type, int protocol); }\n\tSYS_CONNECT        = 98  // { int sys_connect(int s, const struct sockaddr *name, socklen_t namelen); }\n\tSYS_GETDENTS       = 99  // { int sys_getdents(int fd, void *buf, size_t buflen); }\n\tSYS_GETPRIORITY    = 100 // { int sys_getpriority(int which, id_t who); }\n\tSYS_PIPE2          = 101 // { int sys_pipe2(int *fdp, int flags); }\n\tSYS_DUP3           = 102 // { int sys_dup3(int from, int to, int flags); }\n\tSYS_SIGRETURN      = 103 // { int sys_sigreturn(struct sigcontext *sigcntxp); }\n\tSYS_BIND           = 104 // { int sys_bind(int s, const struct sockaddr *name, socklen_t namelen); }\n\tSYS_SETSOCKOPT     = 105 // { int sys_setsockopt(int s, int level, int name, const void *val, socklen_t valsize); }\n\tSYS_LISTEN         = 106 // { int sys_listen(int s, int backlog); }\n\tSYS_CHFLAGSAT      = 107 // { int sys_chflagsat(int fd, const char *path, u_int flags, int atflags); }\n\tSYS_PLEDGE         = 108 // { int sys_pledge(const char *promises, const char *execpromises); }\n\tSYS_PPOLL          = 109 // { int sys_ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); }\n\tSYS_PSELECT        = 110 // { int sys_pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); }\n\tSYS_SIGSUSPEND     = 111 // { int sys_sigsuspend(int mask); }\n\tSYS_SENDSYSLOG     = 112 // { int sys_sendsyslog(const char *buf, size_t nbyte, int flags); }\n\tSYS_UNVEIL         = 114 // { int sys_unveil(const char *path, const char *permissions); }\n\tSYS_GETSOCKOPT     = 118 // { int sys_getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); }\n\tSYS_THRKILL        = 119 // { int sys_thrkill(pid_t tid, int signum, void *tcb); }\n\tSYS_READV          = 120 // { ssize_t sys_readv(int fd, const struct iovec *iovp, int iovcnt); }\n\tSYS_WRITEV         = 121 // { ssize_t sys_writev(int fd, const struct iovec *iovp, int iovcnt); }\n\tSYS_KILL           = 122 // { int sys_kill(int pid, int signum); }\n\tSYS_FCHOWN         = 123 // { int sys_fchown(int fd, uid_t uid, gid_t gid); }\n\tSYS_FCHMOD         = 124 // { int sys_fchmod(int fd, mode_t mode); }\n\tSYS_SETREUID       = 126 // { int sys_setreuid(uid_t ruid, uid_t euid); }\n\tSYS_SETREGID       = 127 // { int sys_setregid(gid_t rgid, gid_t egid); }\n\tSYS_RENAME         = 128 // { int sys_rename(const char *from, const char *to); }\n\tSYS_FLOCK          = 131 // { int sys_flock(int fd, int how); }\n\tSYS_MKFIFO         = 132 // { int sys_mkfifo(const char *path, mode_t mode); }\n\tSYS_SENDTO         = 133 // { ssize_t sys_sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); }\n\tSYS_SHUTDOWN       = 134 // { int sys_shutdown(int s, int how); }\n\tSYS_SOCKETPAIR     = 135 // { int sys_socketpair(int domain, int type, int protocol, int *rsv); }\n\tSYS_MKDIR          = 136 // { int sys_mkdir(const char *path, mode_t mode); }\n\tSYS_RMDIR          = 137 // { int sys_rmdir(const char *path); }\n\tSYS_ADJTIME        = 140 // { int sys_adjtime(const struct timeval *delta, struct timeval *olddelta); }\n\tSYS_GETLOGIN_R     = 141 // { int sys_getlogin_r(char *namebuf, u_int namelen); }\n\tSYS_SETSID         = 147 // { int sys_setsid(void); }\n\tSYS_QUOTACTL       = 148 // { int sys_quotactl(const char *path, int cmd, int uid, char *arg); }\n\tSYS_NFSSVC         = 155 // { int sys_nfssvc(int flag, void *argp); }\n\tSYS_GETFH          = 161 // { int sys_getfh(const char *fname, fhandle_t *fhp); }\n\tSYS_SYSARCH        = 165 // { int sys_sysarch(int op, void *parms); }\n\tSYS_PREAD          = 173 // { ssize_t sys_pread(int fd, void *buf, size_t nbyte, int pad, off_t offset); }\n\tSYS_PWRITE         = 174 // { ssize_t sys_pwrite(int fd, const void *buf, size_t nbyte, int pad, off_t offset); }\n\tSYS_SETGID         = 181 // { int sys_setgid(gid_t gid); }\n\tSYS_SETEGID        = 182 // { int sys_setegid(gid_t egid); }\n\tSYS_SETEUID        = 183 // { int sys_seteuid(uid_t euid); }\n\tSYS_PATHCONF       = 191 // { long sys_pathconf(const char *path, int name); }\n\tSYS_FPATHCONF      = 192 // { long sys_fpathconf(int fd, int name); }\n\tSYS_SWAPCTL        = 193 // { int sys_swapctl(int cmd, const void *arg, int misc); }\n\tSYS_GETRLIMIT      = 194 // { int sys_getrlimit(int which, struct rlimit *rlp); }\n\tSYS_SETRLIMIT      = 195 // { int sys_setrlimit(int which, const struct rlimit *rlp); }\n\tSYS_MMAP           = 197 // { void *sys_mmap(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); }\n\tSYS_LSEEK          = 199 // { off_t sys_lseek(int fd, int pad, off_t offset, int whence); }\n\tSYS_TRUNCATE       = 200 // { int sys_truncate(const char *path, int pad, off_t length); }\n\tSYS_FTRUNCATE      = 201 // { int sys_ftruncate(int fd, int pad, off_t length); }\n\tSYS_SYSCTL         = 202 // { int sys_sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); }\n\tSYS_MLOCK          = 203 // { int sys_mlock(const void *addr, size_t len); }\n\tSYS_MUNLOCK        = 204 // { int sys_munlock(const void *addr, size_t len); }\n\tSYS_GETPGID        = 207 // { pid_t sys_getpgid(pid_t pid); }\n\tSYS_UTRACE         = 209 // { int sys_utrace(const char *label, const void *addr, size_t len); }\n\tSYS_SEMGET         = 221 // { int sys_semget(key_t key, int nsems, int semflg); }\n\tSYS_MSGGET         = 225 // { int sys_msgget(key_t key, int msgflg); }\n\tSYS_MSGSND         = 226 // { int sys_msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }\n\tSYS_MSGRCV         = 227 // { int sys_msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }\n\tSYS_SHMAT          = 228 // { void *sys_shmat(int shmid, const void *shmaddr, int shmflg); }\n\tSYS_SHMDT          = 230 // { int sys_shmdt(const void *shmaddr); }\n\tSYS_MINHERIT       = 250 // { int sys_minherit(void *addr, size_t len, int inherit); }\n\tSYS_POLL           = 252 // { int sys_poll(struct pollfd *fds, u_int nfds, int timeout); }\n\tSYS_ISSETUGID      = 253 // { int sys_issetugid(void); }\n\tSYS_LCHOWN         = 254 // { int sys_lchown(const char *path, uid_t uid, gid_t gid); }\n\tSYS_GETSID         = 255 // { pid_t sys_getsid(pid_t pid); }\n\tSYS_MSYNC          = 256 // { int sys_msync(void *addr, size_t len, int flags); }\n\tSYS_PIPE           = 263 // { int sys_pipe(int *fdp); }\n\tSYS_FHOPEN         = 264 // { int sys_fhopen(const fhandle_t *fhp, int flags); }\n\tSYS_PREADV         = 267 // { ssize_t sys_preadv(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); }\n\tSYS_PWRITEV        = 268 // { ssize_t sys_pwritev(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); }\n\tSYS_KQUEUE         = 269 // { int sys_kqueue(void); }\n\tSYS_MLOCKALL       = 271 // { int sys_mlockall(int flags); }\n\tSYS_MUNLOCKALL     = 272 // { int sys_munlockall(void); }\n\tSYS_GETRESUID      = 281 // { int sys_getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); }\n\tSYS_SETRESUID      = 282 // { int sys_setresuid(uid_t ruid, uid_t euid, uid_t suid); }\n\tSYS_GETRESGID      = 283 // { int sys_getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); }\n\tSYS_SETRESGID      = 284 // { int sys_setresgid(gid_t rgid, gid_t egid, gid_t sgid); }\n\tSYS_MQUERY         = 286 // { void *sys_mquery(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); }\n\tSYS_CLOSEFROM      = 287 // { int sys_closefrom(int fd); }\n\tSYS_SIGALTSTACK    = 288 // { int sys_sigaltstack(const struct sigaltstack *nss, struct sigaltstack *oss); }\n\tSYS_SHMGET         = 289 // { int sys_shmget(key_t key, size_t size, int shmflg); }\n\tSYS_SEMOP          = 290 // { int sys_semop(int semid, struct sembuf *sops, size_t nsops); }\n\tSYS_FHSTAT         = 294 // { int sys_fhstat(const fhandle_t *fhp, struct stat *sb); }\n\tSYS___SEMCTL       = 295 // { int sys___semctl(int semid, int semnum, int cmd, union semun *arg); }\n\tSYS_SHMCTL         = 296 // { int sys_shmctl(int shmid, int cmd, struct shmid_ds *buf); }\n\tSYS_MSGCTL         = 297 // { int sys_msgctl(int msqid, int cmd, struct msqid_ds *buf); }\n\tSYS_SCHED_YIELD    = 298 // { int sys_sched_yield(void); }\n\tSYS_GETTHRID       = 299 // { pid_t sys_getthrid(void); }\n\tSYS___THRWAKEUP    = 301 // { int sys___thrwakeup(const volatile void *ident, int n); }\n\tSYS___THREXIT      = 302 // { void sys___threxit(pid_t *notdead); }\n\tSYS___THRSIGDIVERT = 303 // { int sys___thrsigdivert(sigset_t sigmask, siginfo_t *info, const struct timespec *timeout); }\n\tSYS___GETCWD       = 304 // { int sys___getcwd(char *buf, size_t len); }\n\tSYS_ADJFREQ        = 305 // { int sys_adjfreq(const int64_t *freq, int64_t *oldfreq); }\n\tSYS_SETRTABLE      = 310 // { int sys_setrtable(int rtableid); }\n\tSYS_GETRTABLE      = 311 // { int sys_getrtable(void); }\n\tSYS_FACCESSAT      = 313 // { int sys_faccessat(int fd, const char *path, int amode, int flag); }\n\tSYS_FCHMODAT       = 314 // { int sys_fchmodat(int fd, const char *path, mode_t mode, int flag); }\n\tSYS_FCHOWNAT       = 315 // { int sys_fchownat(int fd, const char *path, uid_t uid, gid_t gid, int flag); }\n\tSYS_LINKAT         = 317 // { int sys_linkat(int fd1, const char *path1, int fd2, const char *path2, int flag); }\n\tSYS_MKDIRAT        = 318 // { int sys_mkdirat(int fd, const char *path, mode_t mode); }\n\tSYS_MKFIFOAT       = 319 // { int sys_mkfifoat(int fd, const char *path, mode_t mode); }\n\tSYS_MKNODAT        = 320 // { int sys_mknodat(int fd, const char *path, mode_t mode, dev_t dev); }\n\tSYS_OPENAT         = 321 // { int sys_openat(int fd, const char *path, int flags, ... mode_t mode); }\n\tSYS_READLINKAT     = 322 // { ssize_t sys_readlinkat(int fd, const char *path, char *buf, size_t count); }\n\tSYS_RENAMEAT       = 323 // { int sys_renameat(int fromfd, const char *from, int tofd, const char *to); }\n\tSYS_SYMLINKAT      = 324 // { int sys_symlinkat(const char *path, int fd, const char *link); }\n\tSYS_UNLINKAT       = 325 // { int sys_unlinkat(int fd, const char *path, int flag); }\n\tSYS___SET_TCB      = 329 // { void sys___set_tcb(void *tcb); }\n\tSYS___GET_TCB      = 330 // { void *sys___get_tcb(void); }\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm64.go",
    "content": "// go run mksysnum.go https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build arm64,openbsd\n\npackage unix\n\nconst (\n\tSYS_EXIT           = 1   // { void sys_exit(int rval); }\n\tSYS_FORK           = 2   // { int sys_fork(void); }\n\tSYS_READ           = 3   // { ssize_t sys_read(int fd, void *buf, size_t nbyte); }\n\tSYS_WRITE          = 4   // { ssize_t sys_write(int fd, const void *buf, size_t nbyte); }\n\tSYS_OPEN           = 5   // { int sys_open(const char *path, int flags, ... mode_t mode); }\n\tSYS_CLOSE          = 6   // { int sys_close(int fd); }\n\tSYS_GETENTROPY     = 7   // { int sys_getentropy(void *buf, size_t nbyte); }\n\tSYS___TFORK        = 8   // { int sys___tfork(const struct __tfork *param, size_t psize); }\n\tSYS_LINK           = 9   // { int sys_link(const char *path, const char *link); }\n\tSYS_UNLINK         = 10  // { int sys_unlink(const char *path); }\n\tSYS_WAIT4          = 11  // { pid_t sys_wait4(pid_t pid, int *status, int options, struct rusage *rusage); }\n\tSYS_CHDIR          = 12  // { int sys_chdir(const char *path); }\n\tSYS_FCHDIR         = 13  // { int sys_fchdir(int fd); }\n\tSYS_MKNOD          = 14  // { int sys_mknod(const char *path, mode_t mode, dev_t dev); }\n\tSYS_CHMOD          = 15  // { int sys_chmod(const char *path, mode_t mode); }\n\tSYS_CHOWN          = 16  // { int sys_chown(const char *path, uid_t uid, gid_t gid); }\n\tSYS_OBREAK         = 17  // { int sys_obreak(char *nsize); } break\n\tSYS_GETDTABLECOUNT = 18  // { int sys_getdtablecount(void); }\n\tSYS_GETRUSAGE      = 19  // { int sys_getrusage(int who, struct rusage *rusage); }\n\tSYS_GETPID         = 20  // { pid_t sys_getpid(void); }\n\tSYS_MOUNT          = 21  // { int sys_mount(const char *type, const char *path, int flags, void *data); }\n\tSYS_UNMOUNT        = 22  // { int sys_unmount(const char *path, int flags); }\n\tSYS_SETUID         = 23  // { int sys_setuid(uid_t uid); }\n\tSYS_GETUID         = 24  // { uid_t sys_getuid(void); }\n\tSYS_GETEUID        = 25  // { uid_t sys_geteuid(void); }\n\tSYS_PTRACE         = 26  // { int sys_ptrace(int req, pid_t pid, caddr_t addr, int data); }\n\tSYS_RECVMSG        = 27  // { ssize_t sys_recvmsg(int s, struct msghdr *msg, int flags); }\n\tSYS_SENDMSG        = 28  // { ssize_t sys_sendmsg(int s, const struct msghdr *msg, int flags); }\n\tSYS_RECVFROM       = 29  // { ssize_t sys_recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); }\n\tSYS_ACCEPT         = 30  // { int sys_accept(int s, struct sockaddr *name, socklen_t *anamelen); }\n\tSYS_GETPEERNAME    = 31  // { int sys_getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); }\n\tSYS_GETSOCKNAME    = 32  // { int sys_getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); }\n\tSYS_ACCESS         = 33  // { int sys_access(const char *path, int amode); }\n\tSYS_CHFLAGS        = 34  // { int sys_chflags(const char *path, u_int flags); }\n\tSYS_FCHFLAGS       = 35  // { int sys_fchflags(int fd, u_int flags); }\n\tSYS_SYNC           = 36  // { void sys_sync(void); }\n\tSYS_STAT           = 38  // { int sys_stat(const char *path, struct stat *ub); }\n\tSYS_GETPPID        = 39  // { pid_t sys_getppid(void); }\n\tSYS_LSTAT          = 40  // { int sys_lstat(const char *path, struct stat *ub); }\n\tSYS_DUP            = 41  // { int sys_dup(int fd); }\n\tSYS_FSTATAT        = 42  // { int sys_fstatat(int fd, const char *path, struct stat *buf, int flag); }\n\tSYS_GETEGID        = 43  // { gid_t sys_getegid(void); }\n\tSYS_PROFIL         = 44  // { int sys_profil(caddr_t samples, size_t size, u_long offset, u_int scale); }\n\tSYS_KTRACE         = 45  // { int sys_ktrace(const char *fname, int ops, int facs, pid_t pid); }\n\tSYS_SIGACTION      = 46  // { int sys_sigaction(int signum, const struct sigaction *nsa, struct sigaction *osa); }\n\tSYS_GETGID         = 47  // { gid_t sys_getgid(void); }\n\tSYS_SIGPROCMASK    = 48  // { int sys_sigprocmask(int how, sigset_t mask); }\n\tSYS_SETLOGIN       = 50  // { int sys_setlogin(const char *namebuf); }\n\tSYS_ACCT           = 51  // { int sys_acct(const char *path); }\n\tSYS_SIGPENDING     = 52  // { int sys_sigpending(void); }\n\tSYS_FSTAT          = 53  // { int sys_fstat(int fd, struct stat *sb); }\n\tSYS_IOCTL          = 54  // { int sys_ioctl(int fd, u_long com, ... void *data); }\n\tSYS_REBOOT         = 55  // { int sys_reboot(int opt); }\n\tSYS_REVOKE         = 56  // { int sys_revoke(const char *path); }\n\tSYS_SYMLINK        = 57  // { int sys_symlink(const char *path, const char *link); }\n\tSYS_READLINK       = 58  // { ssize_t sys_readlink(const char *path, char *buf, size_t count); }\n\tSYS_EXECVE         = 59  // { int sys_execve(const char *path, char * const *argp, char * const *envp); }\n\tSYS_UMASK          = 60  // { mode_t sys_umask(mode_t newmask); }\n\tSYS_CHROOT         = 61  // { int sys_chroot(const char *path); }\n\tSYS_GETFSSTAT      = 62  // { int sys_getfsstat(struct statfs *buf, size_t bufsize, int flags); }\n\tSYS_STATFS         = 63  // { int sys_statfs(const char *path, struct statfs *buf); }\n\tSYS_FSTATFS        = 64  // { int sys_fstatfs(int fd, struct statfs *buf); }\n\tSYS_FHSTATFS       = 65  // { int sys_fhstatfs(const fhandle_t *fhp, struct statfs *buf); }\n\tSYS_VFORK          = 66  // { int sys_vfork(void); }\n\tSYS_GETTIMEOFDAY   = 67  // { int sys_gettimeofday(struct timeval *tp, struct timezone *tzp); }\n\tSYS_SETTIMEOFDAY   = 68  // { int sys_settimeofday(const struct timeval *tv, const struct timezone *tzp); }\n\tSYS_SETITIMER      = 69  // { int sys_setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); }\n\tSYS_GETITIMER      = 70  // { int sys_getitimer(int which, struct itimerval *itv); }\n\tSYS_SELECT         = 71  // { int sys_select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }\n\tSYS_KEVENT         = 72  // { int sys_kevent(int fd, const struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); }\n\tSYS_MUNMAP         = 73  // { int sys_munmap(void *addr, size_t len); }\n\tSYS_MPROTECT       = 74  // { int sys_mprotect(void *addr, size_t len, int prot); }\n\tSYS_MADVISE        = 75  // { int sys_madvise(void *addr, size_t len, int behav); }\n\tSYS_UTIMES         = 76  // { int sys_utimes(const char *path, const struct timeval *tptr); }\n\tSYS_FUTIMES        = 77  // { int sys_futimes(int fd, const struct timeval *tptr); }\n\tSYS_GETGROUPS      = 79  // { int sys_getgroups(int gidsetsize, gid_t *gidset); }\n\tSYS_SETGROUPS      = 80  // { int sys_setgroups(int gidsetsize, const gid_t *gidset); }\n\tSYS_GETPGRP        = 81  // { int sys_getpgrp(void); }\n\tSYS_SETPGID        = 82  // { int sys_setpgid(pid_t pid, pid_t pgid); }\n\tSYS_FUTEX          = 83  // { int sys_futex(uint32_t *f, int op, int val, const struct timespec *timeout, uint32_t *g); }\n\tSYS_UTIMENSAT      = 84  // { int sys_utimensat(int fd, const char *path, const struct timespec *times, int flag); }\n\tSYS_FUTIMENS       = 85  // { int sys_futimens(int fd, const struct timespec *times); }\n\tSYS_KBIND          = 86  // { int sys_kbind(const struct __kbind *param, size_t psize, int64_t proc_cookie); }\n\tSYS_CLOCK_GETTIME  = 87  // { int sys_clock_gettime(clockid_t clock_id, struct timespec *tp); }\n\tSYS_CLOCK_SETTIME  = 88  // { int sys_clock_settime(clockid_t clock_id, const struct timespec *tp); }\n\tSYS_CLOCK_GETRES   = 89  // { int sys_clock_getres(clockid_t clock_id, struct timespec *tp); }\n\tSYS_DUP2           = 90  // { int sys_dup2(int from, int to); }\n\tSYS_NANOSLEEP      = 91  // { int sys_nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }\n\tSYS_FCNTL          = 92  // { int sys_fcntl(int fd, int cmd, ... void *arg); }\n\tSYS_ACCEPT4        = 93  // { int sys_accept4(int s, struct sockaddr *name, socklen_t *anamelen, int flags); }\n\tSYS___THRSLEEP     = 94  // { int sys___thrsleep(const volatile void *ident, clockid_t clock_id, const struct timespec *tp, void *lock, const int *abort); }\n\tSYS_FSYNC          = 95  // { int sys_fsync(int fd); }\n\tSYS_SETPRIORITY    = 96  // { int sys_setpriority(int which, id_t who, int prio); }\n\tSYS_SOCKET         = 97  // { int sys_socket(int domain, int type, int protocol); }\n\tSYS_CONNECT        = 98  // { int sys_connect(int s, const struct sockaddr *name, socklen_t namelen); }\n\tSYS_GETDENTS       = 99  // { int sys_getdents(int fd, void *buf, size_t buflen); }\n\tSYS_GETPRIORITY    = 100 // { int sys_getpriority(int which, id_t who); }\n\tSYS_PIPE2          = 101 // { int sys_pipe2(int *fdp, int flags); }\n\tSYS_DUP3           = 102 // { int sys_dup3(int from, int to, int flags); }\n\tSYS_SIGRETURN      = 103 // { int sys_sigreturn(struct sigcontext *sigcntxp); }\n\tSYS_BIND           = 104 // { int sys_bind(int s, const struct sockaddr *name, socklen_t namelen); }\n\tSYS_SETSOCKOPT     = 105 // { int sys_setsockopt(int s, int level, int name, const void *val, socklen_t valsize); }\n\tSYS_LISTEN         = 106 // { int sys_listen(int s, int backlog); }\n\tSYS_CHFLAGSAT      = 107 // { int sys_chflagsat(int fd, const char *path, u_int flags, int atflags); }\n\tSYS_PLEDGE         = 108 // { int sys_pledge(const char *promises, const char *execpromises); }\n\tSYS_PPOLL          = 109 // { int sys_ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); }\n\tSYS_PSELECT        = 110 // { int sys_pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); }\n\tSYS_SIGSUSPEND     = 111 // { int sys_sigsuspend(int mask); }\n\tSYS_SENDSYSLOG     = 112 // { int sys_sendsyslog(const char *buf, size_t nbyte, int flags); }\n\tSYS_UNVEIL         = 114 // { int sys_unveil(const char *path, const char *permissions); }\n\tSYS_GETSOCKOPT     = 118 // { int sys_getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); }\n\tSYS_THRKILL        = 119 // { int sys_thrkill(pid_t tid, int signum, void *tcb); }\n\tSYS_READV          = 120 // { ssize_t sys_readv(int fd, const struct iovec *iovp, int iovcnt); }\n\tSYS_WRITEV         = 121 // { ssize_t sys_writev(int fd, const struct iovec *iovp, int iovcnt); }\n\tSYS_KILL           = 122 // { int sys_kill(int pid, int signum); }\n\tSYS_FCHOWN         = 123 // { int sys_fchown(int fd, uid_t uid, gid_t gid); }\n\tSYS_FCHMOD         = 124 // { int sys_fchmod(int fd, mode_t mode); }\n\tSYS_SETREUID       = 126 // { int sys_setreuid(uid_t ruid, uid_t euid); }\n\tSYS_SETREGID       = 127 // { int sys_setregid(gid_t rgid, gid_t egid); }\n\tSYS_RENAME         = 128 // { int sys_rename(const char *from, const char *to); }\n\tSYS_FLOCK          = 131 // { int sys_flock(int fd, int how); }\n\tSYS_MKFIFO         = 132 // { int sys_mkfifo(const char *path, mode_t mode); }\n\tSYS_SENDTO         = 133 // { ssize_t sys_sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); }\n\tSYS_SHUTDOWN       = 134 // { int sys_shutdown(int s, int how); }\n\tSYS_SOCKETPAIR     = 135 // { int sys_socketpair(int domain, int type, int protocol, int *rsv); }\n\tSYS_MKDIR          = 136 // { int sys_mkdir(const char *path, mode_t mode); }\n\tSYS_RMDIR          = 137 // { int sys_rmdir(const char *path); }\n\tSYS_ADJTIME        = 140 // { int sys_adjtime(const struct timeval *delta, struct timeval *olddelta); }\n\tSYS_GETLOGIN_R     = 141 // { int sys_getlogin_r(char *namebuf, u_int namelen); }\n\tSYS_SETSID         = 147 // { int sys_setsid(void); }\n\tSYS_QUOTACTL       = 148 // { int sys_quotactl(const char *path, int cmd, int uid, char *arg); }\n\tSYS_NFSSVC         = 155 // { int sys_nfssvc(int flag, void *argp); }\n\tSYS_GETFH          = 161 // { int sys_getfh(const char *fname, fhandle_t *fhp); }\n\tSYS_SYSARCH        = 165 // { int sys_sysarch(int op, void *parms); }\n\tSYS_PREAD          = 173 // { ssize_t sys_pread(int fd, void *buf, size_t nbyte, int pad, off_t offset); }\n\tSYS_PWRITE         = 174 // { ssize_t sys_pwrite(int fd, const void *buf, size_t nbyte, int pad, off_t offset); }\n\tSYS_SETGID         = 181 // { int sys_setgid(gid_t gid); }\n\tSYS_SETEGID        = 182 // { int sys_setegid(gid_t egid); }\n\tSYS_SETEUID        = 183 // { int sys_seteuid(uid_t euid); }\n\tSYS_PATHCONF       = 191 // { long sys_pathconf(const char *path, int name); }\n\tSYS_FPATHCONF      = 192 // { long sys_fpathconf(int fd, int name); }\n\tSYS_SWAPCTL        = 193 // { int sys_swapctl(int cmd, const void *arg, int misc); }\n\tSYS_GETRLIMIT      = 194 // { int sys_getrlimit(int which, struct rlimit *rlp); }\n\tSYS_SETRLIMIT      = 195 // { int sys_setrlimit(int which, const struct rlimit *rlp); }\n\tSYS_MMAP           = 197 // { void *sys_mmap(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); }\n\tSYS_LSEEK          = 199 // { off_t sys_lseek(int fd, int pad, off_t offset, int whence); }\n\tSYS_TRUNCATE       = 200 // { int sys_truncate(const char *path, int pad, off_t length); }\n\tSYS_FTRUNCATE      = 201 // { int sys_ftruncate(int fd, int pad, off_t length); }\n\tSYS_SYSCTL         = 202 // { int sys_sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); }\n\tSYS_MLOCK          = 203 // { int sys_mlock(const void *addr, size_t len); }\n\tSYS_MUNLOCK        = 204 // { int sys_munlock(const void *addr, size_t len); }\n\tSYS_GETPGID        = 207 // { pid_t sys_getpgid(pid_t pid); }\n\tSYS_UTRACE         = 209 // { int sys_utrace(const char *label, const void *addr, size_t len); }\n\tSYS_SEMGET         = 221 // { int sys_semget(key_t key, int nsems, int semflg); }\n\tSYS_MSGGET         = 225 // { int sys_msgget(key_t key, int msgflg); }\n\tSYS_MSGSND         = 226 // { int sys_msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }\n\tSYS_MSGRCV         = 227 // { int sys_msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }\n\tSYS_SHMAT          = 228 // { void *sys_shmat(int shmid, const void *shmaddr, int shmflg); }\n\tSYS_SHMDT          = 230 // { int sys_shmdt(const void *shmaddr); }\n\tSYS_MINHERIT       = 250 // { int sys_minherit(void *addr, size_t len, int inherit); }\n\tSYS_POLL           = 252 // { int sys_poll(struct pollfd *fds, u_int nfds, int timeout); }\n\tSYS_ISSETUGID      = 253 // { int sys_issetugid(void); }\n\tSYS_LCHOWN         = 254 // { int sys_lchown(const char *path, uid_t uid, gid_t gid); }\n\tSYS_GETSID         = 255 // { pid_t sys_getsid(pid_t pid); }\n\tSYS_MSYNC          = 256 // { int sys_msync(void *addr, size_t len, int flags); }\n\tSYS_PIPE           = 263 // { int sys_pipe(int *fdp); }\n\tSYS_FHOPEN         = 264 // { int sys_fhopen(const fhandle_t *fhp, int flags); }\n\tSYS_PREADV         = 267 // { ssize_t sys_preadv(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); }\n\tSYS_PWRITEV        = 268 // { ssize_t sys_pwritev(int fd, const struct iovec *iovp, int iovcnt, int pad, off_t offset); }\n\tSYS_KQUEUE         = 269 // { int sys_kqueue(void); }\n\tSYS_MLOCKALL       = 271 // { int sys_mlockall(int flags); }\n\tSYS_MUNLOCKALL     = 272 // { int sys_munlockall(void); }\n\tSYS_GETRESUID      = 281 // { int sys_getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); }\n\tSYS_SETRESUID      = 282 // { int sys_setresuid(uid_t ruid, uid_t euid, uid_t suid); }\n\tSYS_GETRESGID      = 283 // { int sys_getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); }\n\tSYS_SETRESGID      = 284 // { int sys_setresgid(gid_t rgid, gid_t egid, gid_t sgid); }\n\tSYS_MQUERY         = 286 // { void *sys_mquery(void *addr, size_t len, int prot, int flags, int fd, long pad, off_t pos); }\n\tSYS_CLOSEFROM      = 287 // { int sys_closefrom(int fd); }\n\tSYS_SIGALTSTACK    = 288 // { int sys_sigaltstack(const struct sigaltstack *nss, struct sigaltstack *oss); }\n\tSYS_SHMGET         = 289 // { int sys_shmget(key_t key, size_t size, int shmflg); }\n\tSYS_SEMOP          = 290 // { int sys_semop(int semid, struct sembuf *sops, size_t nsops); }\n\tSYS_FHSTAT         = 294 // { int sys_fhstat(const fhandle_t *fhp, struct stat *sb); }\n\tSYS___SEMCTL       = 295 // { int sys___semctl(int semid, int semnum, int cmd, union semun *arg); }\n\tSYS_SHMCTL         = 296 // { int sys_shmctl(int shmid, int cmd, struct shmid_ds *buf); }\n\tSYS_MSGCTL         = 297 // { int sys_msgctl(int msqid, int cmd, struct msqid_ds *buf); }\n\tSYS_SCHED_YIELD    = 298 // { int sys_sched_yield(void); }\n\tSYS_GETTHRID       = 299 // { pid_t sys_getthrid(void); }\n\tSYS___THRWAKEUP    = 301 // { int sys___thrwakeup(const volatile void *ident, int n); }\n\tSYS___THREXIT      = 302 // { void sys___threxit(pid_t *notdead); }\n\tSYS___THRSIGDIVERT = 303 // { int sys___thrsigdivert(sigset_t sigmask, siginfo_t *info, const struct timespec *timeout); }\n\tSYS___GETCWD       = 304 // { int sys___getcwd(char *buf, size_t len); }\n\tSYS_ADJFREQ        = 305 // { int sys_adjfreq(const int64_t *freq, int64_t *oldfreq); }\n\tSYS_SETRTABLE      = 310 // { int sys_setrtable(int rtableid); }\n\tSYS_GETRTABLE      = 311 // { int sys_getrtable(void); }\n\tSYS_FACCESSAT      = 313 // { int sys_faccessat(int fd, const char *path, int amode, int flag); }\n\tSYS_FCHMODAT       = 314 // { int sys_fchmodat(int fd, const char *path, mode_t mode, int flag); }\n\tSYS_FCHOWNAT       = 315 // { int sys_fchownat(int fd, const char *path, uid_t uid, gid_t gid, int flag); }\n\tSYS_LINKAT         = 317 // { int sys_linkat(int fd1, const char *path1, int fd2, const char *path2, int flag); }\n\tSYS_MKDIRAT        = 318 // { int sys_mkdirat(int fd, const char *path, mode_t mode); }\n\tSYS_MKFIFOAT       = 319 // { int sys_mkfifoat(int fd, const char *path, mode_t mode); }\n\tSYS_MKNODAT        = 320 // { int sys_mknodat(int fd, const char *path, mode_t mode, dev_t dev); }\n\tSYS_OPENAT         = 321 // { int sys_openat(int fd, const char *path, int flags, ... mode_t mode); }\n\tSYS_READLINKAT     = 322 // { ssize_t sys_readlinkat(int fd, const char *path, char *buf, size_t count); }\n\tSYS_RENAMEAT       = 323 // { int sys_renameat(int fromfd, const char *from, int tofd, const char *to); }\n\tSYS_SYMLINKAT      = 324 // { int sys_symlinkat(const char *path, int fd, const char *link); }\n\tSYS_UNLINKAT       = 325 // { int sys_unlinkat(int fd, const char *path, int flag); }\n\tSYS___SET_TCB      = 329 // { void sys___set_tcb(void *tcb); }\n\tSYS___GET_TCB      = 330 // { void *sys___get_tcb(void); }\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_aix_ppc.go",
    "content": "// cgo -godefs types_aix.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build ppc,aix\n\npackage unix\n\nconst (\n\tSizeofPtr      = 0x4\n\tSizeofShort    = 0x2\n\tSizeofInt      = 0x4\n\tSizeofLong     = 0x4\n\tSizeofLongLong = 0x8\n\tPathMax        = 0x3ff\n)\n\ntype (\n\t_C_short     int16\n\t_C_int       int32\n\t_C_long      int32\n\t_C_long_long int64\n)\n\ntype off64 int64\ntype off int32\ntype Mode_t uint32\n\ntype Timespec struct {\n\tSec  int32\n\tNsec int32\n}\n\ntype Timeval struct {\n\tSec  int32\n\tUsec int32\n}\n\ntype Timeval32 struct {\n\tSec  int32\n\tUsec int32\n}\n\ntype Timex struct{}\n\ntype Time_t int32\n\ntype Tms struct{}\n\ntype Utimbuf struct {\n\tActime  int32\n\tModtime int32\n}\n\ntype Timezone struct {\n\tMinuteswest int32\n\tDsttime     int32\n}\n\ntype Rusage struct {\n\tUtime    Timeval\n\tStime    Timeval\n\tMaxrss   int32\n\tIxrss    int32\n\tIdrss    int32\n\tIsrss    int32\n\tMinflt   int32\n\tMajflt   int32\n\tNswap    int32\n\tInblock  int32\n\tOublock  int32\n\tMsgsnd   int32\n\tMsgrcv   int32\n\tNsignals int32\n\tNvcsw    int32\n\tNivcsw   int32\n}\n\ntype Rlimit struct {\n\tCur uint64\n\tMax uint64\n}\n\ntype Pid_t int32\n\ntype _Gid_t uint32\n\ntype dev_t uint32\n\ntype Stat_t struct {\n\tDev      uint32\n\tIno      uint32\n\tMode     uint32\n\tNlink    int16\n\tFlag     uint16\n\tUid      uint32\n\tGid      uint32\n\tRdev     uint32\n\tSize     int32\n\tAtim     Timespec\n\tMtim     Timespec\n\tCtim     Timespec\n\tBlksize  int32\n\tBlocks   int32\n\tVfstype  int32\n\tVfs      uint32\n\tType     uint32\n\tGen      uint32\n\tReserved [9]uint32\n}\n\ntype StatxTimestamp struct{}\n\ntype Statx_t struct{}\n\ntype Dirent struct {\n\tOffset uint32\n\tIno    uint32\n\tReclen uint16\n\tNamlen uint16\n\tName   [256]uint8\n}\n\ntype RawSockaddrInet4 struct {\n\tLen    uint8\n\tFamily uint8\n\tPort   uint16\n\tAddr   [4]byte /* in_addr */\n\tZero   [8]uint8\n}\n\ntype RawSockaddrInet6 struct {\n\tLen      uint8\n\tFamily   uint8\n\tPort     uint16\n\tFlowinfo uint32\n\tAddr     [16]byte /* in6_addr */\n\tScope_id uint32\n}\n\ntype RawSockaddrUnix struct {\n\tLen    uint8\n\tFamily uint8\n\tPath   [1023]uint8\n}\n\ntype RawSockaddrDatalink struct {\n\tLen    uint8\n\tFamily uint8\n\tIndex  uint16\n\tType   uint8\n\tNlen   uint8\n\tAlen   uint8\n\tSlen   uint8\n\tData   [120]uint8\n}\n\ntype RawSockaddr struct {\n\tLen    uint8\n\tFamily uint8\n\tData   [14]uint8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [1012]uint8\n}\n\ntype _Socklen uint32\n\ntype Cmsghdr struct {\n\tLen   uint32\n\tLevel int32\n\tType  int32\n}\n\ntype ICMPv6Filter struct {\n\tFilt [8]uint32\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint32\n}\n\ntype IPMreq struct {\n\tMultiaddr [4]byte /* in_addr */\n\tInterface [4]byte /* in_addr */\n}\n\ntype IPv6Mreq struct {\n\tMultiaddr [16]byte /* in6_addr */\n\tInterface uint32\n}\n\ntype IPv6MTUInfo struct {\n\tAddr RawSockaddrInet6\n\tMtu  uint32\n}\n\ntype Linger struct {\n\tOnoff  int32\n\tLinger int32\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tIov        *Iovec\n\tIovlen     int32\n\tControl    *byte\n\tControllen uint32\n\tFlags      int32\n}\n\nconst (\n\tSizeofSockaddrInet4    = 0x10\n\tSizeofSockaddrInet6    = 0x1c\n\tSizeofSockaddrAny      = 0x404\n\tSizeofSockaddrUnix     = 0x401\n\tSizeofSockaddrDatalink = 0x80\n\tSizeofLinger           = 0x8\n\tSizeofIPMreq           = 0x8\n\tSizeofIPv6Mreq         = 0x14\n\tSizeofIPv6MTUInfo      = 0x20\n\tSizeofMsghdr           = 0x1c\n\tSizeofCmsghdr          = 0xc\n\tSizeofICMPv6Filter     = 0x20\n)\n\nconst (\n\tSizeofIfMsghdr = 0x10\n)\n\ntype IfMsgHdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\tAddrlen uint8\n\t_       [1]byte\n}\n\ntype FdSet struct {\n\tBits [2048]int32\n}\n\ntype Utsname struct {\n\tSysname  [32]byte\n\tNodename [32]byte\n\tRelease  [32]byte\n\tVersion  [32]byte\n\tMachine  [32]byte\n}\n\ntype Ustat_t struct{}\n\ntype Sigset_t struct {\n\tLosigs uint32\n\tHisigs uint32\n}\n\nconst (\n\tAT_FDCWD            = -0x2\n\tAT_REMOVEDIR        = 0x1\n\tAT_SYMLINK_NOFOLLOW = 0x1\n)\n\ntype Termios struct {\n\tIflag uint32\n\tOflag uint32\n\tCflag uint32\n\tLflag uint32\n\tCc    [16]uint8\n}\n\ntype Termio struct {\n\tIflag uint16\n\tOflag uint16\n\tCflag uint16\n\tLflag uint16\n\tLine  uint8\n\tCc    [8]uint8\n\t_     [1]byte\n}\n\ntype Winsize struct {\n\tRow    uint16\n\tCol    uint16\n\tXpixel uint16\n\tYpixel uint16\n}\n\ntype PollFd struct {\n\tFd      int32\n\tEvents  uint16\n\tRevents uint16\n}\n\nconst (\n\tPOLLERR    = 0x4000\n\tPOLLHUP    = 0x2000\n\tPOLLIN     = 0x1\n\tPOLLNVAL   = 0x8000\n\tPOLLOUT    = 0x2\n\tPOLLPRI    = 0x4\n\tPOLLRDBAND = 0x20\n\tPOLLRDNORM = 0x10\n\tPOLLWRBAND = 0x40\n\tPOLLWRNORM = 0x2\n)\n\ntype Flock_t struct {\n\tType   int16\n\tWhence int16\n\tSysid  uint32\n\tPid    int32\n\tVfs    int32\n\tStart  int64\n\tLen    int64\n}\n\ntype Fsid_t struct {\n\tVal [2]uint32\n}\ntype Fsid64_t struct {\n\tVal [2]uint64\n}\n\ntype Statfs_t struct {\n\tVersion   int32\n\tType      int32\n\tBsize     uint32\n\tBlocks    uint32\n\tBfree     uint32\n\tBavail    uint32\n\tFiles     uint32\n\tFfree     uint32\n\tFsid      Fsid_t\n\tVfstype   int32\n\tFsize     uint32\n\tVfsnumber int32\n\tVfsoff    int32\n\tVfslen    int32\n\tVfsvers   int32\n\tFname     [32]uint8\n\tFpack     [32]uint8\n\tName_max  int32\n}\n\nconst RNDGETENTCNT = 0x80045200\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_aix_ppc64.go",
    "content": "// cgo -godefs types_aix.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build ppc64,aix\n\npackage unix\n\nconst (\n\tSizeofPtr      = 0x8\n\tSizeofShort    = 0x2\n\tSizeofInt      = 0x4\n\tSizeofLong     = 0x8\n\tSizeofLongLong = 0x8\n\tPathMax        = 0x3ff\n)\n\ntype (\n\t_C_short     int16\n\t_C_int       int32\n\t_C_long      int64\n\t_C_long_long int64\n)\n\ntype off64 int64\ntype off int64\ntype Mode_t uint32\n\ntype Timespec struct {\n\tSec  int64\n\tNsec int64\n}\n\ntype Timeval struct {\n\tSec  int64\n\tUsec int32\n\t_    [4]byte\n}\n\ntype Timeval32 struct {\n\tSec  int32\n\tUsec int32\n}\n\ntype Timex struct{}\n\ntype Time_t int64\n\ntype Tms struct{}\n\ntype Utimbuf struct {\n\tActime  int64\n\tModtime int64\n}\n\ntype Timezone struct {\n\tMinuteswest int32\n\tDsttime     int32\n}\n\ntype Rusage struct {\n\tUtime    Timeval\n\tStime    Timeval\n\tMaxrss   int64\n\tIxrss    int64\n\tIdrss    int64\n\tIsrss    int64\n\tMinflt   int64\n\tMajflt   int64\n\tNswap    int64\n\tInblock  int64\n\tOublock  int64\n\tMsgsnd   int64\n\tMsgrcv   int64\n\tNsignals int64\n\tNvcsw    int64\n\tNivcsw   int64\n}\n\ntype Rlimit struct {\n\tCur uint64\n\tMax uint64\n}\n\ntype Pid_t int32\n\ntype _Gid_t uint32\n\ntype dev_t uint64\n\ntype Stat_t struct {\n\tDev      uint64\n\tIno      uint64\n\tMode     uint32\n\tNlink    int16\n\tFlag     uint16\n\tUid      uint32\n\tGid      uint32\n\tRdev     uint64\n\tSsize    int32\n\tAtim     Timespec\n\tMtim     Timespec\n\tCtim     Timespec\n\tBlksize  int64\n\tBlocks   int64\n\tVfstype  int32\n\tVfs      uint32\n\tType     uint32\n\tGen      uint32\n\tReserved [9]uint32\n\tPadto_ll uint32\n\tSize     int64\n}\n\ntype StatxTimestamp struct{}\n\ntype Statx_t struct{}\n\ntype Dirent struct {\n\tOffset uint64\n\tIno    uint64\n\tReclen uint16\n\tNamlen uint16\n\tName   [256]uint8\n\t_      [4]byte\n}\n\ntype RawSockaddrInet4 struct {\n\tLen    uint8\n\tFamily uint8\n\tPort   uint16\n\tAddr   [4]byte /* in_addr */\n\tZero   [8]uint8\n}\n\ntype RawSockaddrInet6 struct {\n\tLen      uint8\n\tFamily   uint8\n\tPort     uint16\n\tFlowinfo uint32\n\tAddr     [16]byte /* in6_addr */\n\tScope_id uint32\n}\n\ntype RawSockaddrUnix struct {\n\tLen    uint8\n\tFamily uint8\n\tPath   [1023]uint8\n}\n\ntype RawSockaddrDatalink struct {\n\tLen    uint8\n\tFamily uint8\n\tIndex  uint16\n\tType   uint8\n\tNlen   uint8\n\tAlen   uint8\n\tSlen   uint8\n\tData   [120]uint8\n}\n\ntype RawSockaddr struct {\n\tLen    uint8\n\tFamily uint8\n\tData   [14]uint8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [1012]uint8\n}\n\ntype _Socklen uint32\n\ntype Cmsghdr struct {\n\tLen   uint32\n\tLevel int32\n\tType  int32\n}\n\ntype ICMPv6Filter struct {\n\tFilt [8]uint32\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint64\n}\n\ntype IPMreq struct {\n\tMultiaddr [4]byte /* in_addr */\n\tInterface [4]byte /* in_addr */\n}\n\ntype IPv6Mreq struct {\n\tMultiaddr [16]byte /* in6_addr */\n\tInterface uint32\n}\n\ntype IPv6MTUInfo struct {\n\tAddr RawSockaddrInet6\n\tMtu  uint32\n}\n\ntype Linger struct {\n\tOnoff  int32\n\tLinger int32\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tIov        *Iovec\n\tIovlen     int32\n\tControl    *byte\n\tControllen uint32\n\tFlags      int32\n}\n\nconst (\n\tSizeofSockaddrInet4    = 0x10\n\tSizeofSockaddrInet6    = 0x1c\n\tSizeofSockaddrAny      = 0x404\n\tSizeofSockaddrUnix     = 0x401\n\tSizeofSockaddrDatalink = 0x80\n\tSizeofLinger           = 0x8\n\tSizeofIPMreq           = 0x8\n\tSizeofIPv6Mreq         = 0x14\n\tSizeofIPv6MTUInfo      = 0x20\n\tSizeofMsghdr           = 0x30\n\tSizeofCmsghdr          = 0xc\n\tSizeofICMPv6Filter     = 0x20\n)\n\nconst (\n\tSizeofIfMsghdr = 0x10\n)\n\ntype IfMsgHdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\tAddrlen uint8\n\t_       [1]byte\n}\n\ntype FdSet struct {\n\tBits [1024]int64\n}\n\ntype Utsname struct {\n\tSysname  [32]byte\n\tNodename [32]byte\n\tRelease  [32]byte\n\tVersion  [32]byte\n\tMachine  [32]byte\n}\n\ntype Ustat_t struct{}\n\ntype Sigset_t struct {\n\tSet [4]uint64\n}\n\nconst (\n\tAT_FDCWD            = -0x2\n\tAT_REMOVEDIR        = 0x1\n\tAT_SYMLINK_NOFOLLOW = 0x1\n)\n\ntype Termios struct {\n\tIflag uint32\n\tOflag uint32\n\tCflag uint32\n\tLflag uint32\n\tCc    [16]uint8\n}\n\ntype Termio struct {\n\tIflag uint16\n\tOflag uint16\n\tCflag uint16\n\tLflag uint16\n\tLine  uint8\n\tCc    [8]uint8\n\t_     [1]byte\n}\n\ntype Winsize struct {\n\tRow    uint16\n\tCol    uint16\n\tXpixel uint16\n\tYpixel uint16\n}\n\ntype PollFd struct {\n\tFd      int32\n\tEvents  uint16\n\tRevents uint16\n}\n\nconst (\n\tPOLLERR    = 0x4000\n\tPOLLHUP    = 0x2000\n\tPOLLIN     = 0x1\n\tPOLLNVAL   = 0x8000\n\tPOLLOUT    = 0x2\n\tPOLLPRI    = 0x4\n\tPOLLRDBAND = 0x20\n\tPOLLRDNORM = 0x10\n\tPOLLWRBAND = 0x40\n\tPOLLWRNORM = 0x2\n)\n\ntype Flock_t struct {\n\tType   int16\n\tWhence int16\n\tSysid  uint32\n\tPid    int32\n\tVfs    int32\n\tStart  int64\n\tLen    int64\n}\n\ntype Fsid_t struct {\n\tVal [2]uint32\n}\ntype Fsid64_t struct {\n\tVal [2]uint64\n}\n\ntype Statfs_t struct {\n\tVersion   int32\n\tType      int32\n\tBsize     uint64\n\tBlocks    uint64\n\tBfree     uint64\n\tBavail    uint64\n\tFiles     uint64\n\tFfree     uint64\n\tFsid      Fsid64_t\n\tVfstype   int32\n\tFsize     uint64\n\tVfsnumber int32\n\tVfsoff    int32\n\tVfslen    int32\n\tVfsvers   int32\n\tFname     [32]uint8\n\tFpack     [32]uint8\n\tName_max  int32\n\t_         [4]byte\n}\n\nconst RNDGETENTCNT = 0x80045200\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_darwin_386.go",
    "content": "// cgo -godefs types_darwin.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build 386,darwin\n\npackage unix\n\nconst (\n\tSizeofPtr      = 0x4\n\tSizeofShort    = 0x2\n\tSizeofInt      = 0x4\n\tSizeofLong     = 0x4\n\tSizeofLongLong = 0x8\n)\n\ntype (\n\t_C_short     int16\n\t_C_int       int32\n\t_C_long      int32\n\t_C_long_long int64\n)\n\ntype Timespec struct {\n\tSec  int32\n\tNsec int32\n}\n\ntype Timeval struct {\n\tSec  int32\n\tUsec int32\n}\n\ntype Timeval32 struct{}\n\ntype Rusage struct {\n\tUtime    Timeval\n\tStime    Timeval\n\tMaxrss   int32\n\tIxrss    int32\n\tIdrss    int32\n\tIsrss    int32\n\tMinflt   int32\n\tMajflt   int32\n\tNswap    int32\n\tInblock  int32\n\tOublock  int32\n\tMsgsnd   int32\n\tMsgrcv   int32\n\tNsignals int32\n\tNvcsw    int32\n\tNivcsw   int32\n}\n\ntype Rlimit struct {\n\tCur uint64\n\tMax uint64\n}\n\ntype _Gid_t uint32\n\ntype Stat_t struct {\n\tDev     int32\n\tMode    uint16\n\tNlink   uint16\n\tIno     uint64\n\tUid     uint32\n\tGid     uint32\n\tRdev    int32\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\tBtim    Timespec\n\tSize    int64\n\tBlocks  int64\n\tBlksize int32\n\tFlags   uint32\n\tGen     uint32\n\tLspare  int32\n\tQspare  [2]int64\n}\n\ntype Statfs_t struct {\n\tBsize       uint32\n\tIosize      int32\n\tBlocks      uint64\n\tBfree       uint64\n\tBavail      uint64\n\tFiles       uint64\n\tFfree       uint64\n\tFsid        Fsid\n\tOwner       uint32\n\tType        uint32\n\tFlags       uint32\n\tFssubtype   uint32\n\tFstypename  [16]int8\n\tMntonname   [1024]int8\n\tMntfromname [1024]int8\n\tReserved    [8]uint32\n}\n\ntype Flock_t struct {\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\tType   int16\n\tWhence int16\n}\n\ntype Fstore_t struct {\n\tFlags      uint32\n\tPosmode    int32\n\tOffset     int64\n\tLength     int64\n\tBytesalloc int64\n}\n\ntype Radvisory_t struct {\n\tOffset int64\n\tCount  int32\n}\n\ntype Fbootstraptransfer_t struct {\n\tOffset int64\n\tLength uint32\n\tBuffer *byte\n}\n\ntype Log2phys_t struct {\n\tFlags       uint32\n\tContigbytes int64\n\tDevoffset   int64\n}\n\ntype Fsid struct {\n\tVal [2]int32\n}\n\ntype Dirent struct {\n\tIno     uint64\n\tSeekoff uint64\n\tReclen  uint16\n\tNamlen  uint16\n\tType    uint8\n\tName    [1024]int8\n\t_       [3]byte\n}\n\ntype RawSockaddrInet4 struct {\n\tLen    uint8\n\tFamily uint8\n\tPort   uint16\n\tAddr   [4]byte /* in_addr */\n\tZero   [8]int8\n}\n\ntype RawSockaddrInet6 struct {\n\tLen      uint8\n\tFamily   uint8\n\tPort     uint16\n\tFlowinfo uint32\n\tAddr     [16]byte /* in6_addr */\n\tScope_id uint32\n}\n\ntype RawSockaddrUnix struct {\n\tLen    uint8\n\tFamily uint8\n\tPath   [104]int8\n}\n\ntype RawSockaddrDatalink struct {\n\tLen    uint8\n\tFamily uint8\n\tIndex  uint16\n\tType   uint8\n\tNlen   uint8\n\tAlen   uint8\n\tSlen   uint8\n\tData   [12]int8\n}\n\ntype RawSockaddr struct {\n\tLen    uint8\n\tFamily uint8\n\tData   [14]int8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [92]int8\n}\n\ntype _Socklen uint32\n\ntype Linger struct {\n\tOnoff  int32\n\tLinger int32\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint32\n}\n\ntype IPMreq struct {\n\tMultiaddr [4]byte /* in_addr */\n\tInterface [4]byte /* in_addr */\n}\n\ntype IPv6Mreq struct {\n\tMultiaddr [16]byte /* in6_addr */\n\tInterface uint32\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tIov        *Iovec\n\tIovlen     int32\n\tControl    *byte\n\tControllen uint32\n\tFlags      int32\n}\n\ntype Cmsghdr struct {\n\tLen   uint32\n\tLevel int32\n\tType  int32\n}\n\ntype Inet4Pktinfo struct {\n\tIfindex  uint32\n\tSpec_dst [4]byte /* in_addr */\n\tAddr     [4]byte /* in_addr */\n}\n\ntype Inet6Pktinfo struct {\n\tAddr    [16]byte /* in6_addr */\n\tIfindex uint32\n}\n\ntype IPv6MTUInfo struct {\n\tAddr RawSockaddrInet6\n\tMtu  uint32\n}\n\ntype ICMPv6Filter struct {\n\tFilt [8]uint32\n}\n\nconst (\n\tSizeofSockaddrInet4    = 0x10\n\tSizeofSockaddrInet6    = 0x1c\n\tSizeofSockaddrAny      = 0x6c\n\tSizeofSockaddrUnix     = 0x6a\n\tSizeofSockaddrDatalink = 0x14\n\tSizeofLinger           = 0x8\n\tSizeofIPMreq           = 0x8\n\tSizeofIPv6Mreq         = 0x14\n\tSizeofMsghdr           = 0x1c\n\tSizeofCmsghdr          = 0xc\n\tSizeofInet4Pktinfo     = 0xc\n\tSizeofInet6Pktinfo     = 0x14\n\tSizeofIPv6MTUInfo      = 0x20\n\tSizeofICMPv6Filter     = 0x20\n)\n\nconst (\n\tPTRACE_TRACEME = 0x0\n\tPTRACE_CONT    = 0x7\n\tPTRACE_KILL    = 0x8\n)\n\ntype Kevent_t struct {\n\tIdent  uint32\n\tFilter int16\n\tFlags  uint16\n\tFflags uint32\n\tData   int32\n\tUdata  *byte\n}\n\ntype FdSet struct {\n\tBits [32]int32\n}\n\nconst (\n\tSizeofIfMsghdr    = 0x70\n\tSizeofIfData      = 0x60\n\tSizeofIfaMsghdr   = 0x14\n\tSizeofIfmaMsghdr  = 0x10\n\tSizeofIfmaMsghdr2 = 0x14\n\tSizeofRtMsghdr    = 0x5c\n\tSizeofRtMetrics   = 0x38\n)\n\ntype IfMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\t_       [2]byte\n\tData    IfData\n}\n\ntype IfData struct {\n\tType       uint8\n\tTypelen    uint8\n\tPhysical   uint8\n\tAddrlen    uint8\n\tHdrlen     uint8\n\tRecvquota  uint8\n\tXmitquota  uint8\n\tUnused1    uint8\n\tMtu        uint32\n\tMetric     uint32\n\tBaudrate   uint32\n\tIpackets   uint32\n\tIerrors    uint32\n\tOpackets   uint32\n\tOerrors    uint32\n\tCollisions uint32\n\tIbytes     uint32\n\tObytes     uint32\n\tImcasts    uint32\n\tOmcasts    uint32\n\tIqdrops    uint32\n\tNoproto    uint32\n\tRecvtiming uint32\n\tXmittiming uint32\n\tLastchange Timeval\n\tUnused2    uint32\n\tHwassist   uint32\n\tReserved1  uint32\n\tReserved2  uint32\n}\n\ntype IfaMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\t_       [2]byte\n\tMetric  int32\n}\n\ntype IfmaMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\t_       [2]byte\n}\n\ntype IfmaMsghdr2 struct {\n\tMsglen   uint16\n\tVersion  uint8\n\tType     uint8\n\tAddrs    int32\n\tFlags    int32\n\tIndex    uint16\n\t_        [2]byte\n\tRefcount int32\n}\n\ntype RtMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tIndex   uint16\n\t_       [2]byte\n\tFlags   int32\n\tAddrs   int32\n\tPid     int32\n\tSeq     int32\n\tErrno   int32\n\tUse     int32\n\tInits   uint32\n\tRmx     RtMetrics\n}\n\ntype RtMetrics struct {\n\tLocks    uint32\n\tMtu      uint32\n\tHopcount uint32\n\tExpire   int32\n\tRecvpipe uint32\n\tSendpipe uint32\n\tSsthresh uint32\n\tRtt      uint32\n\tRttvar   uint32\n\tPksent   uint32\n\tFiller   [4]uint32\n}\n\nconst (\n\tSizeofBpfVersion = 0x4\n\tSizeofBpfStat    = 0x8\n\tSizeofBpfProgram = 0x8\n\tSizeofBpfInsn    = 0x8\n\tSizeofBpfHdr     = 0x14\n)\n\ntype BpfVersion struct {\n\tMajor uint16\n\tMinor uint16\n}\n\ntype BpfStat struct {\n\tRecv uint32\n\tDrop uint32\n}\n\ntype BpfProgram struct {\n\tLen   uint32\n\tInsns *BpfInsn\n}\n\ntype BpfInsn struct {\n\tCode uint16\n\tJt   uint8\n\tJf   uint8\n\tK    uint32\n}\n\ntype BpfHdr struct {\n\tTstamp  Timeval\n\tCaplen  uint32\n\tDatalen uint32\n\tHdrlen  uint16\n\t_       [2]byte\n}\n\ntype Termios struct {\n\tIflag  uint32\n\tOflag  uint32\n\tCflag  uint32\n\tLflag  uint32\n\tCc     [20]uint8\n\tIspeed uint32\n\tOspeed uint32\n}\n\ntype Winsize struct {\n\tRow    uint16\n\tCol    uint16\n\tXpixel uint16\n\tYpixel uint16\n}\n\nconst (\n\tAT_FDCWD            = -0x2\n\tAT_REMOVEDIR        = 0x80\n\tAT_SYMLINK_FOLLOW   = 0x40\n\tAT_SYMLINK_NOFOLLOW = 0x20\n)\n\ntype PollFd struct {\n\tFd      int32\n\tEvents  int16\n\tRevents int16\n}\n\nconst (\n\tPOLLERR    = 0x8\n\tPOLLHUP    = 0x10\n\tPOLLIN     = 0x1\n\tPOLLNVAL   = 0x20\n\tPOLLOUT    = 0x4\n\tPOLLPRI    = 0x2\n\tPOLLRDBAND = 0x80\n\tPOLLRDNORM = 0x40\n\tPOLLWRBAND = 0x100\n\tPOLLWRNORM = 0x4\n)\n\ntype Utsname struct {\n\tSysname  [256]byte\n\tNodename [256]byte\n\tRelease  [256]byte\n\tVersion  [256]byte\n\tMachine  [256]byte\n}\n\nconst SizeofClockinfo = 0x14\n\ntype Clockinfo struct {\n\tHz      int32\n\tTick    int32\n\tTickadj int32\n\tStathz  int32\n\tProfhz  int32\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go",
    "content": "// cgo -godefs types_darwin.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build amd64,darwin\n\npackage unix\n\nconst (\n\tSizeofPtr      = 0x8\n\tSizeofShort    = 0x2\n\tSizeofInt      = 0x4\n\tSizeofLong     = 0x8\n\tSizeofLongLong = 0x8\n)\n\ntype (\n\t_C_short     int16\n\t_C_int       int32\n\t_C_long      int64\n\t_C_long_long int64\n)\n\ntype Timespec struct {\n\tSec  int64\n\tNsec int64\n}\n\ntype Timeval struct {\n\tSec  int64\n\tUsec int32\n\t_    [4]byte\n}\n\ntype Timeval32 struct {\n\tSec  int32\n\tUsec int32\n}\n\ntype Rusage struct {\n\tUtime    Timeval\n\tStime    Timeval\n\tMaxrss   int64\n\tIxrss    int64\n\tIdrss    int64\n\tIsrss    int64\n\tMinflt   int64\n\tMajflt   int64\n\tNswap    int64\n\tInblock  int64\n\tOublock  int64\n\tMsgsnd   int64\n\tMsgrcv   int64\n\tNsignals int64\n\tNvcsw    int64\n\tNivcsw   int64\n}\n\ntype Rlimit struct {\n\tCur uint64\n\tMax uint64\n}\n\ntype _Gid_t uint32\n\ntype Stat_t struct {\n\tDev     int32\n\tMode    uint16\n\tNlink   uint16\n\tIno     uint64\n\tUid     uint32\n\tGid     uint32\n\tRdev    int32\n\t_       [4]byte\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\tBtim    Timespec\n\tSize    int64\n\tBlocks  int64\n\tBlksize int32\n\tFlags   uint32\n\tGen     uint32\n\tLspare  int32\n\tQspare  [2]int64\n}\n\ntype Statfs_t struct {\n\tBsize       uint32\n\tIosize      int32\n\tBlocks      uint64\n\tBfree       uint64\n\tBavail      uint64\n\tFiles       uint64\n\tFfree       uint64\n\tFsid        Fsid\n\tOwner       uint32\n\tType        uint32\n\tFlags       uint32\n\tFssubtype   uint32\n\tFstypename  [16]int8\n\tMntonname   [1024]int8\n\tMntfromname [1024]int8\n\tReserved    [8]uint32\n}\n\ntype Flock_t struct {\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\tType   int16\n\tWhence int16\n}\n\ntype Fstore_t struct {\n\tFlags      uint32\n\tPosmode    int32\n\tOffset     int64\n\tLength     int64\n\tBytesalloc int64\n}\n\ntype Radvisory_t struct {\n\tOffset int64\n\tCount  int32\n\t_      [4]byte\n}\n\ntype Fbootstraptransfer_t struct {\n\tOffset int64\n\tLength uint64\n\tBuffer *byte\n}\n\ntype Log2phys_t struct {\n\tFlags uint32\n\t_     [8]byte\n\t_     [8]byte\n}\n\ntype Fsid struct {\n\tVal [2]int32\n}\n\ntype Dirent struct {\n\tIno     uint64\n\tSeekoff uint64\n\tReclen  uint16\n\tNamlen  uint16\n\tType    uint8\n\tName    [1024]int8\n\t_       [3]byte\n}\n\ntype RawSockaddrInet4 struct {\n\tLen    uint8\n\tFamily uint8\n\tPort   uint16\n\tAddr   [4]byte /* in_addr */\n\tZero   [8]int8\n}\n\ntype RawSockaddrInet6 struct {\n\tLen      uint8\n\tFamily   uint8\n\tPort     uint16\n\tFlowinfo uint32\n\tAddr     [16]byte /* in6_addr */\n\tScope_id uint32\n}\n\ntype RawSockaddrUnix struct {\n\tLen    uint8\n\tFamily uint8\n\tPath   [104]int8\n}\n\ntype RawSockaddrDatalink struct {\n\tLen    uint8\n\tFamily uint8\n\tIndex  uint16\n\tType   uint8\n\tNlen   uint8\n\tAlen   uint8\n\tSlen   uint8\n\tData   [12]int8\n}\n\ntype RawSockaddr struct {\n\tLen    uint8\n\tFamily uint8\n\tData   [14]int8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [92]int8\n}\n\ntype _Socklen uint32\n\ntype Linger struct {\n\tOnoff  int32\n\tLinger int32\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint64\n}\n\ntype IPMreq struct {\n\tMultiaddr [4]byte /* in_addr */\n\tInterface [4]byte /* in_addr */\n}\n\ntype IPv6Mreq struct {\n\tMultiaddr [16]byte /* in6_addr */\n\tInterface uint32\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\t_          [4]byte\n\tIov        *Iovec\n\tIovlen     int32\n\t_          [4]byte\n\tControl    *byte\n\tControllen uint32\n\tFlags      int32\n}\n\ntype Cmsghdr struct {\n\tLen   uint32\n\tLevel int32\n\tType  int32\n}\n\ntype Inet4Pktinfo struct {\n\tIfindex  uint32\n\tSpec_dst [4]byte /* in_addr */\n\tAddr     [4]byte /* in_addr */\n}\n\ntype Inet6Pktinfo struct {\n\tAddr    [16]byte /* in6_addr */\n\tIfindex uint32\n}\n\ntype IPv6MTUInfo struct {\n\tAddr RawSockaddrInet6\n\tMtu  uint32\n}\n\ntype ICMPv6Filter struct {\n\tFilt [8]uint32\n}\n\nconst (\n\tSizeofSockaddrInet4    = 0x10\n\tSizeofSockaddrInet6    = 0x1c\n\tSizeofSockaddrAny      = 0x6c\n\tSizeofSockaddrUnix     = 0x6a\n\tSizeofSockaddrDatalink = 0x14\n\tSizeofLinger           = 0x8\n\tSizeofIPMreq           = 0x8\n\tSizeofIPv6Mreq         = 0x14\n\tSizeofMsghdr           = 0x30\n\tSizeofCmsghdr          = 0xc\n\tSizeofInet4Pktinfo     = 0xc\n\tSizeofInet6Pktinfo     = 0x14\n\tSizeofIPv6MTUInfo      = 0x20\n\tSizeofICMPv6Filter     = 0x20\n)\n\nconst (\n\tPTRACE_TRACEME = 0x0\n\tPTRACE_CONT    = 0x7\n\tPTRACE_KILL    = 0x8\n)\n\ntype Kevent_t struct {\n\tIdent  uint64\n\tFilter int16\n\tFlags  uint16\n\tFflags uint32\n\tData   int64\n\tUdata  *byte\n}\n\ntype FdSet struct {\n\tBits [32]int32\n}\n\nconst (\n\tSizeofIfMsghdr    = 0x70\n\tSizeofIfData      = 0x60\n\tSizeofIfaMsghdr   = 0x14\n\tSizeofIfmaMsghdr  = 0x10\n\tSizeofIfmaMsghdr2 = 0x14\n\tSizeofRtMsghdr    = 0x5c\n\tSizeofRtMetrics   = 0x38\n)\n\ntype IfMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\t_       [2]byte\n\tData    IfData\n}\n\ntype IfData struct {\n\tType       uint8\n\tTypelen    uint8\n\tPhysical   uint8\n\tAddrlen    uint8\n\tHdrlen     uint8\n\tRecvquota  uint8\n\tXmitquota  uint8\n\tUnused1    uint8\n\tMtu        uint32\n\tMetric     uint32\n\tBaudrate   uint32\n\tIpackets   uint32\n\tIerrors    uint32\n\tOpackets   uint32\n\tOerrors    uint32\n\tCollisions uint32\n\tIbytes     uint32\n\tObytes     uint32\n\tImcasts    uint32\n\tOmcasts    uint32\n\tIqdrops    uint32\n\tNoproto    uint32\n\tRecvtiming uint32\n\tXmittiming uint32\n\tLastchange Timeval32\n\tUnused2    uint32\n\tHwassist   uint32\n\tReserved1  uint32\n\tReserved2  uint32\n}\n\ntype IfaMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\t_       [2]byte\n\tMetric  int32\n}\n\ntype IfmaMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\t_       [2]byte\n}\n\ntype IfmaMsghdr2 struct {\n\tMsglen   uint16\n\tVersion  uint8\n\tType     uint8\n\tAddrs    int32\n\tFlags    int32\n\tIndex    uint16\n\t_        [2]byte\n\tRefcount int32\n}\n\ntype RtMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tIndex   uint16\n\t_       [2]byte\n\tFlags   int32\n\tAddrs   int32\n\tPid     int32\n\tSeq     int32\n\tErrno   int32\n\tUse     int32\n\tInits   uint32\n\tRmx     RtMetrics\n}\n\ntype RtMetrics struct {\n\tLocks    uint32\n\tMtu      uint32\n\tHopcount uint32\n\tExpire   int32\n\tRecvpipe uint32\n\tSendpipe uint32\n\tSsthresh uint32\n\tRtt      uint32\n\tRttvar   uint32\n\tPksent   uint32\n\tFiller   [4]uint32\n}\n\nconst (\n\tSizeofBpfVersion = 0x4\n\tSizeofBpfStat    = 0x8\n\tSizeofBpfProgram = 0x10\n\tSizeofBpfInsn    = 0x8\n\tSizeofBpfHdr     = 0x14\n)\n\ntype BpfVersion struct {\n\tMajor uint16\n\tMinor uint16\n}\n\ntype BpfStat struct {\n\tRecv uint32\n\tDrop uint32\n}\n\ntype BpfProgram struct {\n\tLen   uint32\n\t_     [4]byte\n\tInsns *BpfInsn\n}\n\ntype BpfInsn struct {\n\tCode uint16\n\tJt   uint8\n\tJf   uint8\n\tK    uint32\n}\n\ntype BpfHdr struct {\n\tTstamp  Timeval32\n\tCaplen  uint32\n\tDatalen uint32\n\tHdrlen  uint16\n\t_       [2]byte\n}\n\ntype Termios struct {\n\tIflag  uint64\n\tOflag  uint64\n\tCflag  uint64\n\tLflag  uint64\n\tCc     [20]uint8\n\t_      [4]byte\n\tIspeed uint64\n\tOspeed uint64\n}\n\ntype Winsize struct {\n\tRow    uint16\n\tCol    uint16\n\tXpixel uint16\n\tYpixel uint16\n}\n\nconst (\n\tAT_FDCWD            = -0x2\n\tAT_REMOVEDIR        = 0x80\n\tAT_SYMLINK_FOLLOW   = 0x40\n\tAT_SYMLINK_NOFOLLOW = 0x20\n)\n\ntype PollFd struct {\n\tFd      int32\n\tEvents  int16\n\tRevents int16\n}\n\nconst (\n\tPOLLERR    = 0x8\n\tPOLLHUP    = 0x10\n\tPOLLIN     = 0x1\n\tPOLLNVAL   = 0x20\n\tPOLLOUT    = 0x4\n\tPOLLPRI    = 0x2\n\tPOLLRDBAND = 0x80\n\tPOLLRDNORM = 0x40\n\tPOLLWRBAND = 0x100\n\tPOLLWRNORM = 0x4\n)\n\ntype Utsname struct {\n\tSysname  [256]byte\n\tNodename [256]byte\n\tRelease  [256]byte\n\tVersion  [256]byte\n\tMachine  [256]byte\n}\n\nconst SizeofClockinfo = 0x14\n\ntype Clockinfo struct {\n\tHz      int32\n\tTick    int32\n\tTickadj int32\n\tStathz  int32\n\tProfhz  int32\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_darwin_arm.go",
    "content": "// NOTE: cgo can't generate struct Stat_t and struct Statfs_t yet\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs types_darwin.go\n\n// +build arm,darwin\n\npackage unix\n\nconst (\n\tSizeofPtr      = 0x4\n\tSizeofShort    = 0x2\n\tSizeofInt      = 0x4\n\tSizeofLong     = 0x4\n\tSizeofLongLong = 0x8\n)\n\ntype (\n\t_C_short     int16\n\t_C_int       int32\n\t_C_long      int32\n\t_C_long_long int64\n)\n\ntype Timespec struct {\n\tSec  int32\n\tNsec int32\n}\n\ntype Timeval struct {\n\tSec  int32\n\tUsec int32\n}\n\ntype Timeval32 [0]byte\n\ntype Rusage struct {\n\tUtime    Timeval\n\tStime    Timeval\n\tMaxrss   int32\n\tIxrss    int32\n\tIdrss    int32\n\tIsrss    int32\n\tMinflt   int32\n\tMajflt   int32\n\tNswap    int32\n\tInblock  int32\n\tOublock  int32\n\tMsgsnd   int32\n\tMsgrcv   int32\n\tNsignals int32\n\tNvcsw    int32\n\tNivcsw   int32\n}\n\ntype Rlimit struct {\n\tCur uint64\n\tMax uint64\n}\n\ntype _Gid_t uint32\n\ntype Stat_t struct {\n\tDev     int32\n\tMode    uint16\n\tNlink   uint16\n\tIno     uint64\n\tUid     uint32\n\tGid     uint32\n\tRdev    int32\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\tBtim    Timespec\n\tSize    int64\n\tBlocks  int64\n\tBlksize int32\n\tFlags   uint32\n\tGen     uint32\n\tLspare  int32\n\tQspare  [2]int64\n}\n\ntype Statfs_t struct {\n\tBsize       uint32\n\tIosize      int32\n\tBlocks      uint64\n\tBfree       uint64\n\tBavail      uint64\n\tFiles       uint64\n\tFfree       uint64\n\tFsid        Fsid\n\tOwner       uint32\n\tType        uint32\n\tFlags       uint32\n\tFssubtype   uint32\n\tFstypename  [16]int8\n\tMntonname   [1024]int8\n\tMntfromname [1024]int8\n\tReserved    [8]uint32\n}\n\ntype Flock_t struct {\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\tType   int16\n\tWhence int16\n}\n\ntype Fstore_t struct {\n\tFlags      uint32\n\tPosmode    int32\n\tOffset     int64\n\tLength     int64\n\tBytesalloc int64\n}\n\ntype Radvisory_t struct {\n\tOffset int64\n\tCount  int32\n}\n\ntype Fbootstraptransfer_t struct {\n\tOffset int64\n\tLength uint32\n\tBuffer *byte\n}\n\ntype Log2phys_t struct {\n\tFlags       uint32\n\tContigbytes int64\n\tDevoffset   int64\n}\n\ntype Fsid struct {\n\tVal [2]int32\n}\n\ntype Dirent struct {\n\tIno     uint64\n\tSeekoff uint64\n\tReclen  uint16\n\tNamlen  uint16\n\tType    uint8\n\tName    [1024]int8\n\t_       [3]byte\n}\n\ntype RawSockaddrInet4 struct {\n\tLen    uint8\n\tFamily uint8\n\tPort   uint16\n\tAddr   [4]byte /* in_addr */\n\tZero   [8]int8\n}\n\ntype RawSockaddrInet6 struct {\n\tLen      uint8\n\tFamily   uint8\n\tPort     uint16\n\tFlowinfo uint32\n\tAddr     [16]byte /* in6_addr */\n\tScope_id uint32\n}\n\ntype RawSockaddrUnix struct {\n\tLen    uint8\n\tFamily uint8\n\tPath   [104]int8\n}\n\ntype RawSockaddrDatalink struct {\n\tLen    uint8\n\tFamily uint8\n\tIndex  uint16\n\tType   uint8\n\tNlen   uint8\n\tAlen   uint8\n\tSlen   uint8\n\tData   [12]int8\n}\n\ntype RawSockaddr struct {\n\tLen    uint8\n\tFamily uint8\n\tData   [14]int8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [92]int8\n}\n\ntype _Socklen uint32\n\ntype Linger struct {\n\tOnoff  int32\n\tLinger int32\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint32\n}\n\ntype IPMreq struct {\n\tMultiaddr [4]byte /* in_addr */\n\tInterface [4]byte /* in_addr */\n}\n\ntype IPv6Mreq struct {\n\tMultiaddr [16]byte /* in6_addr */\n\tInterface uint32\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tIov        *Iovec\n\tIovlen     int32\n\tControl    *byte\n\tControllen uint32\n\tFlags      int32\n}\n\ntype Cmsghdr struct {\n\tLen   uint32\n\tLevel int32\n\tType  int32\n}\n\ntype Inet4Pktinfo struct {\n\tIfindex  uint32\n\tSpec_dst [4]byte /* in_addr */\n\tAddr     [4]byte /* in_addr */\n}\n\ntype Inet6Pktinfo struct {\n\tAddr    [16]byte /* in6_addr */\n\tIfindex uint32\n}\n\ntype IPv6MTUInfo struct {\n\tAddr RawSockaddrInet6\n\tMtu  uint32\n}\n\ntype ICMPv6Filter struct {\n\tFilt [8]uint32\n}\n\nconst (\n\tSizeofSockaddrInet4    = 0x10\n\tSizeofSockaddrInet6    = 0x1c\n\tSizeofSockaddrAny      = 0x6c\n\tSizeofSockaddrUnix     = 0x6a\n\tSizeofSockaddrDatalink = 0x14\n\tSizeofLinger           = 0x8\n\tSizeofIPMreq           = 0x8\n\tSizeofIPv6Mreq         = 0x14\n\tSizeofMsghdr           = 0x1c\n\tSizeofCmsghdr          = 0xc\n\tSizeofInet4Pktinfo     = 0xc\n\tSizeofInet6Pktinfo     = 0x14\n\tSizeofIPv6MTUInfo      = 0x20\n\tSizeofICMPv6Filter     = 0x20\n)\n\nconst (\n\tPTRACE_TRACEME = 0x0\n\tPTRACE_CONT    = 0x7\n\tPTRACE_KILL    = 0x8\n)\n\ntype Kevent_t struct {\n\tIdent  uint32\n\tFilter int16\n\tFlags  uint16\n\tFflags uint32\n\tData   int32\n\tUdata  *byte\n}\n\ntype FdSet struct {\n\tBits [32]int32\n}\n\nconst (\n\tSizeofIfMsghdr    = 0x70\n\tSizeofIfData      = 0x60\n\tSizeofIfaMsghdr   = 0x14\n\tSizeofIfmaMsghdr  = 0x10\n\tSizeofIfmaMsghdr2 = 0x14\n\tSizeofRtMsghdr    = 0x5c\n\tSizeofRtMetrics   = 0x38\n)\n\ntype IfMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\t_       [2]byte\n\tData    IfData\n}\n\ntype IfData struct {\n\tType       uint8\n\tTypelen    uint8\n\tPhysical   uint8\n\tAddrlen    uint8\n\tHdrlen     uint8\n\tRecvquota  uint8\n\tXmitquota  uint8\n\tUnused1    uint8\n\tMtu        uint32\n\tMetric     uint32\n\tBaudrate   uint32\n\tIpackets   uint32\n\tIerrors    uint32\n\tOpackets   uint32\n\tOerrors    uint32\n\tCollisions uint32\n\tIbytes     uint32\n\tObytes     uint32\n\tImcasts    uint32\n\tOmcasts    uint32\n\tIqdrops    uint32\n\tNoproto    uint32\n\tRecvtiming uint32\n\tXmittiming uint32\n\tLastchange Timeval\n\tUnused2    uint32\n\tHwassist   uint32\n\tReserved1  uint32\n\tReserved2  uint32\n}\n\ntype IfaMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\t_       [2]byte\n\tMetric  int32\n}\n\ntype IfmaMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\t_       [2]byte\n}\n\ntype IfmaMsghdr2 struct {\n\tMsglen   uint16\n\tVersion  uint8\n\tType     uint8\n\tAddrs    int32\n\tFlags    int32\n\tIndex    uint16\n\t_        [2]byte\n\tRefcount int32\n}\n\ntype RtMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tIndex   uint16\n\t_       [2]byte\n\tFlags   int32\n\tAddrs   int32\n\tPid     int32\n\tSeq     int32\n\tErrno   int32\n\tUse     int32\n\tInits   uint32\n\tRmx     RtMetrics\n}\n\ntype RtMetrics struct {\n\tLocks    uint32\n\tMtu      uint32\n\tHopcount uint32\n\tExpire   int32\n\tRecvpipe uint32\n\tSendpipe uint32\n\tSsthresh uint32\n\tRtt      uint32\n\tRttvar   uint32\n\tPksent   uint32\n\tFiller   [4]uint32\n}\n\nconst (\n\tSizeofBpfVersion = 0x4\n\tSizeofBpfStat    = 0x8\n\tSizeofBpfProgram = 0x8\n\tSizeofBpfInsn    = 0x8\n\tSizeofBpfHdr     = 0x14\n)\n\ntype BpfVersion struct {\n\tMajor uint16\n\tMinor uint16\n}\n\ntype BpfStat struct {\n\tRecv uint32\n\tDrop uint32\n}\n\ntype BpfProgram struct {\n\tLen   uint32\n\tInsns *BpfInsn\n}\n\ntype BpfInsn struct {\n\tCode uint16\n\tJt   uint8\n\tJf   uint8\n\tK    uint32\n}\n\ntype BpfHdr struct {\n\tTstamp  Timeval\n\tCaplen  uint32\n\tDatalen uint32\n\tHdrlen  uint16\n\t_       [2]byte\n}\n\ntype Termios struct {\n\tIflag  uint32\n\tOflag  uint32\n\tCflag  uint32\n\tLflag  uint32\n\tCc     [20]uint8\n\tIspeed uint32\n\tOspeed uint32\n}\n\ntype Winsize struct {\n\tRow    uint16\n\tCol    uint16\n\tXpixel uint16\n\tYpixel uint16\n}\n\nconst (\n\tAT_FDCWD            = -0x2\n\tAT_REMOVEDIR        = 0x80\n\tAT_SYMLINK_FOLLOW   = 0x40\n\tAT_SYMLINK_NOFOLLOW = 0x20\n)\n\ntype PollFd struct {\n\tFd      int32\n\tEvents  int16\n\tRevents int16\n}\n\nconst (\n\tPOLLERR    = 0x8\n\tPOLLHUP    = 0x10\n\tPOLLIN     = 0x1\n\tPOLLNVAL   = 0x20\n\tPOLLOUT    = 0x4\n\tPOLLPRI    = 0x2\n\tPOLLRDBAND = 0x80\n\tPOLLRDNORM = 0x40\n\tPOLLWRBAND = 0x100\n\tPOLLWRNORM = 0x4\n)\n\ntype Utsname struct {\n\tSysname  [256]byte\n\tNodename [256]byte\n\tRelease  [256]byte\n\tVersion  [256]byte\n\tMachine  [256]byte\n}\n\nconst SizeofClockinfo = 0x14\n\ntype Clockinfo struct {\n\tHz      int32\n\tTick    int32\n\tTickadj int32\n\tStathz  int32\n\tProfhz  int32\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go",
    "content": "// cgo -godefs types_darwin.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build arm64,darwin\n\npackage unix\n\nconst (\n\tSizeofPtr      = 0x8\n\tSizeofShort    = 0x2\n\tSizeofInt      = 0x4\n\tSizeofLong     = 0x8\n\tSizeofLongLong = 0x8\n)\n\ntype (\n\t_C_short     int16\n\t_C_int       int32\n\t_C_long      int64\n\t_C_long_long int64\n)\n\ntype Timespec struct {\n\tSec  int64\n\tNsec int64\n}\n\ntype Timeval struct {\n\tSec  int64\n\tUsec int32\n\t_    [4]byte\n}\n\ntype Timeval32 struct {\n\tSec  int32\n\tUsec int32\n}\n\ntype Rusage struct {\n\tUtime    Timeval\n\tStime    Timeval\n\tMaxrss   int64\n\tIxrss    int64\n\tIdrss    int64\n\tIsrss    int64\n\tMinflt   int64\n\tMajflt   int64\n\tNswap    int64\n\tInblock  int64\n\tOublock  int64\n\tMsgsnd   int64\n\tMsgrcv   int64\n\tNsignals int64\n\tNvcsw    int64\n\tNivcsw   int64\n}\n\ntype Rlimit struct {\n\tCur uint64\n\tMax uint64\n}\n\ntype _Gid_t uint32\n\ntype Stat_t struct {\n\tDev     int32\n\tMode    uint16\n\tNlink   uint16\n\tIno     uint64\n\tUid     uint32\n\tGid     uint32\n\tRdev    int32\n\t_       [4]byte\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\tBtim    Timespec\n\tSize    int64\n\tBlocks  int64\n\tBlksize int32\n\tFlags   uint32\n\tGen     uint32\n\tLspare  int32\n\tQspare  [2]int64\n}\n\ntype Statfs_t struct {\n\tBsize       uint32\n\tIosize      int32\n\tBlocks      uint64\n\tBfree       uint64\n\tBavail      uint64\n\tFiles       uint64\n\tFfree       uint64\n\tFsid        Fsid\n\tOwner       uint32\n\tType        uint32\n\tFlags       uint32\n\tFssubtype   uint32\n\tFstypename  [16]int8\n\tMntonname   [1024]int8\n\tMntfromname [1024]int8\n\tReserved    [8]uint32\n}\n\ntype Flock_t struct {\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\tType   int16\n\tWhence int16\n}\n\ntype Fstore_t struct {\n\tFlags      uint32\n\tPosmode    int32\n\tOffset     int64\n\tLength     int64\n\tBytesalloc int64\n}\n\ntype Radvisory_t struct {\n\tOffset int64\n\tCount  int32\n\t_      [4]byte\n}\n\ntype Fbootstraptransfer_t struct {\n\tOffset int64\n\tLength uint64\n\tBuffer *byte\n}\n\ntype Log2phys_t struct {\n\tFlags uint32\n\t_     [8]byte\n\t_     [8]byte\n}\n\ntype Fsid struct {\n\tVal [2]int32\n}\n\ntype Dirent struct {\n\tIno     uint64\n\tSeekoff uint64\n\tReclen  uint16\n\tNamlen  uint16\n\tType    uint8\n\tName    [1024]int8\n\t_       [3]byte\n}\n\ntype RawSockaddrInet4 struct {\n\tLen    uint8\n\tFamily uint8\n\tPort   uint16\n\tAddr   [4]byte /* in_addr */\n\tZero   [8]int8\n}\n\ntype RawSockaddrInet6 struct {\n\tLen      uint8\n\tFamily   uint8\n\tPort     uint16\n\tFlowinfo uint32\n\tAddr     [16]byte /* in6_addr */\n\tScope_id uint32\n}\n\ntype RawSockaddrUnix struct {\n\tLen    uint8\n\tFamily uint8\n\tPath   [104]int8\n}\n\ntype RawSockaddrDatalink struct {\n\tLen    uint8\n\tFamily uint8\n\tIndex  uint16\n\tType   uint8\n\tNlen   uint8\n\tAlen   uint8\n\tSlen   uint8\n\tData   [12]int8\n}\n\ntype RawSockaddr struct {\n\tLen    uint8\n\tFamily uint8\n\tData   [14]int8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [92]int8\n}\n\ntype _Socklen uint32\n\ntype Linger struct {\n\tOnoff  int32\n\tLinger int32\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint64\n}\n\ntype IPMreq struct {\n\tMultiaddr [4]byte /* in_addr */\n\tInterface [4]byte /* in_addr */\n}\n\ntype IPv6Mreq struct {\n\tMultiaddr [16]byte /* in6_addr */\n\tInterface uint32\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\t_          [4]byte\n\tIov        *Iovec\n\tIovlen     int32\n\t_          [4]byte\n\tControl    *byte\n\tControllen uint32\n\tFlags      int32\n}\n\ntype Cmsghdr struct {\n\tLen   uint32\n\tLevel int32\n\tType  int32\n}\n\ntype Inet4Pktinfo struct {\n\tIfindex  uint32\n\tSpec_dst [4]byte /* in_addr */\n\tAddr     [4]byte /* in_addr */\n}\n\ntype Inet6Pktinfo struct {\n\tAddr    [16]byte /* in6_addr */\n\tIfindex uint32\n}\n\ntype IPv6MTUInfo struct {\n\tAddr RawSockaddrInet6\n\tMtu  uint32\n}\n\ntype ICMPv6Filter struct {\n\tFilt [8]uint32\n}\n\nconst (\n\tSizeofSockaddrInet4    = 0x10\n\tSizeofSockaddrInet6    = 0x1c\n\tSizeofSockaddrAny      = 0x6c\n\tSizeofSockaddrUnix     = 0x6a\n\tSizeofSockaddrDatalink = 0x14\n\tSizeofLinger           = 0x8\n\tSizeofIPMreq           = 0x8\n\tSizeofIPv6Mreq         = 0x14\n\tSizeofMsghdr           = 0x30\n\tSizeofCmsghdr          = 0xc\n\tSizeofInet4Pktinfo     = 0xc\n\tSizeofInet6Pktinfo     = 0x14\n\tSizeofIPv6MTUInfo      = 0x20\n\tSizeofICMPv6Filter     = 0x20\n)\n\nconst (\n\tPTRACE_TRACEME = 0x0\n\tPTRACE_CONT    = 0x7\n\tPTRACE_KILL    = 0x8\n)\n\ntype Kevent_t struct {\n\tIdent  uint64\n\tFilter int16\n\tFlags  uint16\n\tFflags uint32\n\tData   int64\n\tUdata  *byte\n}\n\ntype FdSet struct {\n\tBits [32]int32\n}\n\nconst (\n\tSizeofIfMsghdr    = 0x70\n\tSizeofIfData      = 0x60\n\tSizeofIfaMsghdr   = 0x14\n\tSizeofIfmaMsghdr  = 0x10\n\tSizeofIfmaMsghdr2 = 0x14\n\tSizeofRtMsghdr    = 0x5c\n\tSizeofRtMetrics   = 0x38\n)\n\ntype IfMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\t_       [2]byte\n\tData    IfData\n}\n\ntype IfData struct {\n\tType       uint8\n\tTypelen    uint8\n\tPhysical   uint8\n\tAddrlen    uint8\n\tHdrlen     uint8\n\tRecvquota  uint8\n\tXmitquota  uint8\n\tUnused1    uint8\n\tMtu        uint32\n\tMetric     uint32\n\tBaudrate   uint32\n\tIpackets   uint32\n\tIerrors    uint32\n\tOpackets   uint32\n\tOerrors    uint32\n\tCollisions uint32\n\tIbytes     uint32\n\tObytes     uint32\n\tImcasts    uint32\n\tOmcasts    uint32\n\tIqdrops    uint32\n\tNoproto    uint32\n\tRecvtiming uint32\n\tXmittiming uint32\n\tLastchange Timeval32\n\tUnused2    uint32\n\tHwassist   uint32\n\tReserved1  uint32\n\tReserved2  uint32\n}\n\ntype IfaMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\t_       [2]byte\n\tMetric  int32\n}\n\ntype IfmaMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\t_       [2]byte\n}\n\ntype IfmaMsghdr2 struct {\n\tMsglen   uint16\n\tVersion  uint8\n\tType     uint8\n\tAddrs    int32\n\tFlags    int32\n\tIndex    uint16\n\t_        [2]byte\n\tRefcount int32\n}\n\ntype RtMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tIndex   uint16\n\t_       [2]byte\n\tFlags   int32\n\tAddrs   int32\n\tPid     int32\n\tSeq     int32\n\tErrno   int32\n\tUse     int32\n\tInits   uint32\n\tRmx     RtMetrics\n}\n\ntype RtMetrics struct {\n\tLocks    uint32\n\tMtu      uint32\n\tHopcount uint32\n\tExpire   int32\n\tRecvpipe uint32\n\tSendpipe uint32\n\tSsthresh uint32\n\tRtt      uint32\n\tRttvar   uint32\n\tPksent   uint32\n\tFiller   [4]uint32\n}\n\nconst (\n\tSizeofBpfVersion = 0x4\n\tSizeofBpfStat    = 0x8\n\tSizeofBpfProgram = 0x10\n\tSizeofBpfInsn    = 0x8\n\tSizeofBpfHdr     = 0x14\n)\n\ntype BpfVersion struct {\n\tMajor uint16\n\tMinor uint16\n}\n\ntype BpfStat struct {\n\tRecv uint32\n\tDrop uint32\n}\n\ntype BpfProgram struct {\n\tLen   uint32\n\t_     [4]byte\n\tInsns *BpfInsn\n}\n\ntype BpfInsn struct {\n\tCode uint16\n\tJt   uint8\n\tJf   uint8\n\tK    uint32\n}\n\ntype BpfHdr struct {\n\tTstamp  Timeval32\n\tCaplen  uint32\n\tDatalen uint32\n\tHdrlen  uint16\n\t_       [2]byte\n}\n\ntype Termios struct {\n\tIflag  uint64\n\tOflag  uint64\n\tCflag  uint64\n\tLflag  uint64\n\tCc     [20]uint8\n\t_      [4]byte\n\tIspeed uint64\n\tOspeed uint64\n}\n\ntype Winsize struct {\n\tRow    uint16\n\tCol    uint16\n\tXpixel uint16\n\tYpixel uint16\n}\n\nconst (\n\tAT_FDCWD            = -0x2\n\tAT_REMOVEDIR        = 0x80\n\tAT_SYMLINK_FOLLOW   = 0x40\n\tAT_SYMLINK_NOFOLLOW = 0x20\n)\n\ntype PollFd struct {\n\tFd      int32\n\tEvents  int16\n\tRevents int16\n}\n\nconst (\n\tPOLLERR    = 0x8\n\tPOLLHUP    = 0x10\n\tPOLLIN     = 0x1\n\tPOLLNVAL   = 0x20\n\tPOLLOUT    = 0x4\n\tPOLLPRI    = 0x2\n\tPOLLRDBAND = 0x80\n\tPOLLRDNORM = 0x40\n\tPOLLWRBAND = 0x100\n\tPOLLWRNORM = 0x4\n)\n\ntype Utsname struct {\n\tSysname  [256]byte\n\tNodename [256]byte\n\tRelease  [256]byte\n\tVersion  [256]byte\n\tMachine  [256]byte\n}\n\nconst SizeofClockinfo = 0x14\n\ntype Clockinfo struct {\n\tHz      int32\n\tTick    int32\n\tTickadj int32\n\tStathz  int32\n\tProfhz  int32\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go",
    "content": "// cgo -godefs types_dragonfly.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build amd64,dragonfly\n\npackage unix\n\nconst (\n\tSizeofPtr      = 0x8\n\tSizeofShort    = 0x2\n\tSizeofInt      = 0x4\n\tSizeofLong     = 0x8\n\tSizeofLongLong = 0x8\n)\n\ntype (\n\t_C_short     int16\n\t_C_int       int32\n\t_C_long      int64\n\t_C_long_long int64\n)\n\ntype Timespec struct {\n\tSec  int64\n\tNsec int64\n}\n\ntype Timeval struct {\n\tSec  int64\n\tUsec int64\n}\n\ntype Rusage struct {\n\tUtime    Timeval\n\tStime    Timeval\n\tMaxrss   int64\n\tIxrss    int64\n\tIdrss    int64\n\tIsrss    int64\n\tMinflt   int64\n\tMajflt   int64\n\tNswap    int64\n\tInblock  int64\n\tOublock  int64\n\tMsgsnd   int64\n\tMsgrcv   int64\n\tNsignals int64\n\tNvcsw    int64\n\tNivcsw   int64\n}\n\ntype Rlimit struct {\n\tCur int64\n\tMax int64\n}\n\ntype _Gid_t uint32\n\ntype Stat_t struct {\n\tIno     uint64\n\tNlink   uint32\n\tDev     uint32\n\tMode    uint16\n\t_1      uint16\n\tUid     uint32\n\tGid     uint32\n\tRdev    uint32\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\tSize    int64\n\tBlocks  int64\n\tBlksize uint32\n\tFlags   uint32\n\tGen     uint32\n\tLspare  int32\n\tQspare1 int64\n\tQspare2 int64\n}\n\ntype Statfs_t struct {\n\tSpare2      int64\n\tBsize       int64\n\tIosize      int64\n\tBlocks      int64\n\tBfree       int64\n\tBavail      int64\n\tFiles       int64\n\tFfree       int64\n\tFsid        Fsid\n\tOwner       uint32\n\tType        int32\n\tFlags       int32\n\t_           [4]byte\n\tSyncwrites  int64\n\tAsyncwrites int64\n\tFstypename  [16]int8\n\tMntonname   [80]int8\n\tSyncreads   int64\n\tAsyncreads  int64\n\tSpares1     int16\n\tMntfromname [80]int8\n\tSpares2     int16\n\t_           [4]byte\n\tSpare       [2]int64\n}\n\ntype Flock_t struct {\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\tType   int16\n\tWhence int16\n}\n\ntype Dirent struct {\n\tFileno  uint64\n\tNamlen  uint16\n\tType    uint8\n\tUnused1 uint8\n\tUnused2 uint32\n\tName    [256]int8\n}\n\ntype Fsid struct {\n\tVal [2]int32\n}\n\nconst (\n\tPathMax = 0x400\n)\n\ntype RawSockaddrInet4 struct {\n\tLen    uint8\n\tFamily uint8\n\tPort   uint16\n\tAddr   [4]byte /* in_addr */\n\tZero   [8]int8\n}\n\ntype RawSockaddrInet6 struct {\n\tLen      uint8\n\tFamily   uint8\n\tPort     uint16\n\tFlowinfo uint32\n\tAddr     [16]byte /* in6_addr */\n\tScope_id uint32\n}\n\ntype RawSockaddrUnix struct {\n\tLen    uint8\n\tFamily uint8\n\tPath   [104]int8\n}\n\ntype RawSockaddrDatalink struct {\n\tLen    uint8\n\tFamily uint8\n\tIndex  uint16\n\tType   uint8\n\tNlen   uint8\n\tAlen   uint8\n\tSlen   uint8\n\tData   [12]int8\n\tRcf    uint16\n\tRoute  [16]uint16\n}\n\ntype RawSockaddr struct {\n\tLen    uint8\n\tFamily uint8\n\tData   [14]int8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [92]int8\n}\n\ntype _Socklen uint32\n\ntype Linger struct {\n\tOnoff  int32\n\tLinger int32\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint64\n}\n\ntype IPMreq struct {\n\tMultiaddr [4]byte /* in_addr */\n\tInterface [4]byte /* in_addr */\n}\n\ntype IPv6Mreq struct {\n\tMultiaddr [16]byte /* in6_addr */\n\tInterface uint32\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\t_          [4]byte\n\tIov        *Iovec\n\tIovlen     int32\n\t_          [4]byte\n\tControl    *byte\n\tControllen uint32\n\tFlags      int32\n}\n\ntype Cmsghdr struct {\n\tLen   uint32\n\tLevel int32\n\tType  int32\n}\n\ntype Inet6Pktinfo struct {\n\tAddr    [16]byte /* in6_addr */\n\tIfindex uint32\n}\n\ntype IPv6MTUInfo struct {\n\tAddr RawSockaddrInet6\n\tMtu  uint32\n}\n\ntype ICMPv6Filter struct {\n\tFilt [8]uint32\n}\n\nconst (\n\tSizeofSockaddrInet4    = 0x10\n\tSizeofSockaddrInet6    = 0x1c\n\tSizeofSockaddrAny      = 0x6c\n\tSizeofSockaddrUnix     = 0x6a\n\tSizeofSockaddrDatalink = 0x36\n\tSizeofLinger           = 0x8\n\tSizeofIPMreq           = 0x8\n\tSizeofIPv6Mreq         = 0x14\n\tSizeofMsghdr           = 0x30\n\tSizeofCmsghdr          = 0xc\n\tSizeofInet6Pktinfo     = 0x14\n\tSizeofIPv6MTUInfo      = 0x20\n\tSizeofICMPv6Filter     = 0x20\n)\n\nconst (\n\tPTRACE_TRACEME = 0x0\n\tPTRACE_CONT    = 0x7\n\tPTRACE_KILL    = 0x8\n)\n\ntype Kevent_t struct {\n\tIdent  uint64\n\tFilter int16\n\tFlags  uint16\n\tFflags uint32\n\tData   int64\n\tUdata  *byte\n}\n\ntype FdSet struct {\n\tBits [16]uint64\n}\n\nconst (\n\tSizeofIfMsghdr         = 0xb0\n\tSizeofIfData           = 0xa0\n\tSizeofIfaMsghdr        = 0x14\n\tSizeofIfmaMsghdr       = 0x10\n\tSizeofIfAnnounceMsghdr = 0x18\n\tSizeofRtMsghdr         = 0x98\n\tSizeofRtMetrics        = 0x70\n)\n\ntype IfMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\t_       [2]byte\n\tData    IfData\n}\n\ntype IfData struct {\n\tType       uint8\n\tPhysical   uint8\n\tAddrlen    uint8\n\tHdrlen     uint8\n\tRecvquota  uint8\n\tXmitquota  uint8\n\t_          [2]byte\n\tMtu        uint64\n\tMetric     uint64\n\tLink_state uint64\n\tBaudrate   uint64\n\tIpackets   uint64\n\tIerrors    uint64\n\tOpackets   uint64\n\tOerrors    uint64\n\tCollisions uint64\n\tIbytes     uint64\n\tObytes     uint64\n\tImcasts    uint64\n\tOmcasts    uint64\n\tIqdrops    uint64\n\tNoproto    uint64\n\tHwassist   uint64\n\tOqdrops    uint64\n\tLastchange Timeval\n}\n\ntype IfaMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\t_       [2]byte\n\tMetric  int32\n}\n\ntype IfmaMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\t_       [2]byte\n}\n\ntype IfAnnounceMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tIndex   uint16\n\tName    [16]int8\n\tWhat    uint16\n}\n\ntype RtMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tIndex   uint16\n\t_       [2]byte\n\tFlags   int32\n\tAddrs   int32\n\tPid     int32\n\tSeq     int32\n\tErrno   int32\n\tUse     int32\n\tInits   uint64\n\tRmx     RtMetrics\n}\n\ntype RtMetrics struct {\n\tLocks     uint64\n\tMtu       uint64\n\tPksent    uint64\n\tExpire    uint64\n\tSendpipe  uint64\n\tSsthresh  uint64\n\tRtt       uint64\n\tRttvar    uint64\n\tRecvpipe  uint64\n\tHopcount  uint64\n\tMssopt    uint16\n\tPad       uint16\n\t_         [4]byte\n\tMsl       uint64\n\tIwmaxsegs uint64\n\tIwcapsegs uint64\n}\n\nconst (\n\tSizeofBpfVersion = 0x4\n\tSizeofBpfStat    = 0x8\n\tSizeofBpfProgram = 0x10\n\tSizeofBpfInsn    = 0x8\n\tSizeofBpfHdr     = 0x20\n)\n\ntype BpfVersion struct {\n\tMajor uint16\n\tMinor uint16\n}\n\ntype BpfStat struct {\n\tRecv uint32\n\tDrop uint32\n}\n\ntype BpfProgram struct {\n\tLen   uint32\n\t_     [4]byte\n\tInsns *BpfInsn\n}\n\ntype BpfInsn struct {\n\tCode uint16\n\tJt   uint8\n\tJf   uint8\n\tK    uint32\n}\n\ntype BpfHdr struct {\n\tTstamp  Timeval\n\tCaplen  uint32\n\tDatalen uint32\n\tHdrlen  uint16\n\t_       [6]byte\n}\n\ntype Termios struct {\n\tIflag  uint32\n\tOflag  uint32\n\tCflag  uint32\n\tLflag  uint32\n\tCc     [20]uint8\n\tIspeed uint32\n\tOspeed uint32\n}\n\ntype Winsize struct {\n\tRow    uint16\n\tCol    uint16\n\tXpixel uint16\n\tYpixel uint16\n}\n\nconst (\n\tAT_FDCWD            = 0xfffafdcd\n\tAT_SYMLINK_NOFOLLOW = 0x1\n)\n\ntype PollFd struct {\n\tFd      int32\n\tEvents  int16\n\tRevents int16\n}\n\nconst (\n\tPOLLERR    = 0x8\n\tPOLLHUP    = 0x10\n\tPOLLIN     = 0x1\n\tPOLLNVAL   = 0x20\n\tPOLLOUT    = 0x4\n\tPOLLPRI    = 0x2\n\tPOLLRDBAND = 0x80\n\tPOLLRDNORM = 0x40\n\tPOLLWRBAND = 0x100\n\tPOLLWRNORM = 0x4\n)\n\ntype Utsname struct {\n\tSysname  [32]byte\n\tNodename [32]byte\n\tRelease  [32]byte\n\tVersion  [32]byte\n\tMachine  [32]byte\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go",
    "content": "// cgo -godefs types_freebsd.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build 386,freebsd\n\npackage unix\n\nconst (\n\tSizeofPtr      = 0x4\n\tSizeofShort    = 0x2\n\tSizeofInt      = 0x4\n\tSizeofLong     = 0x4\n\tSizeofLongLong = 0x8\n)\n\ntype (\n\t_C_short     int16\n\t_C_int       int32\n\t_C_long      int32\n\t_C_long_long int64\n)\n\ntype Timespec struct {\n\tSec  int32\n\tNsec int32\n}\n\ntype Timeval struct {\n\tSec  int32\n\tUsec int32\n}\n\ntype Rusage struct {\n\tUtime    Timeval\n\tStime    Timeval\n\tMaxrss   int32\n\tIxrss    int32\n\tIdrss    int32\n\tIsrss    int32\n\tMinflt   int32\n\tMajflt   int32\n\tNswap    int32\n\tInblock  int32\n\tOublock  int32\n\tMsgsnd   int32\n\tMsgrcv   int32\n\tNsignals int32\n\tNvcsw    int32\n\tNivcsw   int32\n}\n\ntype Rlimit struct {\n\tCur int64\n\tMax int64\n}\n\ntype _Gid_t uint32\n\nconst (\n\t_statfsVersion = 0x20140518\n\t_dirblksiz     = 0x400\n)\n\ntype Stat_t struct {\n\tDev     uint64\n\tIno     uint64\n\tNlink   uint64\n\tMode    uint16\n\t_0      int16\n\tUid     uint32\n\tGid     uint32\n\t_1      int32\n\tRdev    uint64\n\t_       int32\n\tAtim    Timespec\n\t_       int32\n\tMtim    Timespec\n\t_       int32\n\tCtim    Timespec\n\t_       int32\n\tBtim    Timespec\n\tSize    int64\n\tBlocks  int64\n\tBlksize int32\n\tFlags   uint32\n\tGen     uint64\n\tSpare   [10]uint64\n}\n\ntype stat_freebsd11_t struct {\n\tDev     uint32\n\tIno     uint32\n\tMode    uint16\n\tNlink   uint16\n\tUid     uint32\n\tGid     uint32\n\tRdev    uint32\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\tSize    int64\n\tBlocks  int64\n\tBlksize int32\n\tFlags   uint32\n\tGen     uint32\n\tLspare  int32\n\tBtim    Timespec\n\t_       [8]byte\n}\n\ntype Statfs_t struct {\n\tVersion     uint32\n\tType        uint32\n\tFlags       uint64\n\tBsize       uint64\n\tIosize      uint64\n\tBlocks      uint64\n\tBfree       uint64\n\tBavail      int64\n\tFiles       uint64\n\tFfree       int64\n\tSyncwrites  uint64\n\tAsyncwrites uint64\n\tSyncreads   uint64\n\tAsyncreads  uint64\n\tSpare       [10]uint64\n\tNamemax     uint32\n\tOwner       uint32\n\tFsid        Fsid\n\tCharspare   [80]int8\n\tFstypename  [16]int8\n\tMntfromname [1024]int8\n\tMntonname   [1024]int8\n}\n\ntype statfs_freebsd11_t struct {\n\tVersion     uint32\n\tType        uint32\n\tFlags       uint64\n\tBsize       uint64\n\tIosize      uint64\n\tBlocks      uint64\n\tBfree       uint64\n\tBavail      int64\n\tFiles       uint64\n\tFfree       int64\n\tSyncwrites  uint64\n\tAsyncwrites uint64\n\tSyncreads   uint64\n\tAsyncreads  uint64\n\tSpare       [10]uint64\n\tNamemax     uint32\n\tOwner       uint32\n\tFsid        Fsid\n\tCharspare   [80]int8\n\tFstypename  [16]int8\n\tMntfromname [88]int8\n\tMntonname   [88]int8\n}\n\ntype Flock_t struct {\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\tType   int16\n\tWhence int16\n\tSysid  int32\n}\n\ntype Dirent struct {\n\tFileno uint64\n\tOff    int64\n\tReclen uint16\n\tType   uint8\n\tPad0   uint8\n\tNamlen uint16\n\tPad1   uint16\n\tName   [256]int8\n}\n\ntype dirent_freebsd11 struct {\n\tFileno uint32\n\tReclen uint16\n\tType   uint8\n\tNamlen uint8\n\tName   [256]int8\n}\n\ntype Fsid struct {\n\tVal [2]int32\n}\n\nconst (\n\tPathMax = 0x400\n)\n\nconst (\n\tFADV_NORMAL     = 0x0\n\tFADV_RANDOM     = 0x1\n\tFADV_SEQUENTIAL = 0x2\n\tFADV_WILLNEED   = 0x3\n\tFADV_DONTNEED   = 0x4\n\tFADV_NOREUSE    = 0x5\n)\n\ntype RawSockaddrInet4 struct {\n\tLen    uint8\n\tFamily uint8\n\tPort   uint16\n\tAddr   [4]byte /* in_addr */\n\tZero   [8]int8\n}\n\ntype RawSockaddrInet6 struct {\n\tLen      uint8\n\tFamily   uint8\n\tPort     uint16\n\tFlowinfo uint32\n\tAddr     [16]byte /* in6_addr */\n\tScope_id uint32\n}\n\ntype RawSockaddrUnix struct {\n\tLen    uint8\n\tFamily uint8\n\tPath   [104]int8\n}\n\ntype RawSockaddrDatalink struct {\n\tLen    uint8\n\tFamily uint8\n\tIndex  uint16\n\tType   uint8\n\tNlen   uint8\n\tAlen   uint8\n\tSlen   uint8\n\tData   [46]int8\n}\n\ntype RawSockaddr struct {\n\tLen    uint8\n\tFamily uint8\n\tData   [14]int8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [92]int8\n}\n\ntype _Socklen uint32\n\ntype Linger struct {\n\tOnoff  int32\n\tLinger int32\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint32\n}\n\ntype IPMreq struct {\n\tMultiaddr [4]byte /* in_addr */\n\tInterface [4]byte /* in_addr */\n}\n\ntype IPMreqn struct {\n\tMultiaddr [4]byte /* in_addr */\n\tAddress   [4]byte /* in_addr */\n\tIfindex   int32\n}\n\ntype IPv6Mreq struct {\n\tMultiaddr [16]byte /* in6_addr */\n\tInterface uint32\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tIov        *Iovec\n\tIovlen     int32\n\tControl    *byte\n\tControllen uint32\n\tFlags      int32\n}\n\ntype Cmsghdr struct {\n\tLen   uint32\n\tLevel int32\n\tType  int32\n}\n\ntype Inet6Pktinfo struct {\n\tAddr    [16]byte /* in6_addr */\n\tIfindex uint32\n}\n\ntype IPv6MTUInfo struct {\n\tAddr RawSockaddrInet6\n\tMtu  uint32\n}\n\ntype ICMPv6Filter struct {\n\tFilt [8]uint32\n}\n\nconst (\n\tSizeofSockaddrInet4    = 0x10\n\tSizeofSockaddrInet6    = 0x1c\n\tSizeofSockaddrAny      = 0x6c\n\tSizeofSockaddrUnix     = 0x6a\n\tSizeofSockaddrDatalink = 0x36\n\tSizeofLinger           = 0x8\n\tSizeofIPMreq           = 0x8\n\tSizeofIPMreqn          = 0xc\n\tSizeofIPv6Mreq         = 0x14\n\tSizeofMsghdr           = 0x1c\n\tSizeofCmsghdr          = 0xc\n\tSizeofInet6Pktinfo     = 0x14\n\tSizeofIPv6MTUInfo      = 0x20\n\tSizeofICMPv6Filter     = 0x20\n)\n\nconst (\n\tPTRACE_TRACEME = 0x0\n\tPTRACE_CONT    = 0x7\n\tPTRACE_KILL    = 0x8\n)\n\ntype Kevent_t struct {\n\tIdent  uint32\n\tFilter int16\n\tFlags  uint16\n\tFflags uint32\n\tData   int32\n\tUdata  *byte\n}\n\ntype FdSet struct {\n\tBits [32]uint32\n}\n\nconst (\n\tsizeofIfMsghdr         = 0xa8\n\tSizeofIfMsghdr         = 0x60\n\tsizeofIfData           = 0x98\n\tSizeofIfData           = 0x50\n\tSizeofIfaMsghdr        = 0x14\n\tSizeofIfmaMsghdr       = 0x10\n\tSizeofIfAnnounceMsghdr = 0x18\n\tSizeofRtMsghdr         = 0x5c\n\tSizeofRtMetrics        = 0x38\n)\n\ntype ifMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\t_       [2]byte\n\tData    ifData\n}\n\ntype IfMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\t_       [2]byte\n\tData    IfData\n}\n\ntype ifData struct {\n\tType       uint8\n\tPhysical   uint8\n\tAddrlen    uint8\n\tHdrlen     uint8\n\tLink_state uint8\n\tVhid       uint8\n\tDatalen    uint16\n\tMtu        uint32\n\tMetric     uint32\n\tBaudrate   uint64\n\tIpackets   uint64\n\tIerrors    uint64\n\tOpackets   uint64\n\tOerrors    uint64\n\tCollisions uint64\n\tIbytes     uint64\n\tObytes     uint64\n\tImcasts    uint64\n\tOmcasts    uint64\n\tIqdrops    uint64\n\tOqdrops    uint64\n\tNoproto    uint64\n\tHwassist   uint64\n\t_          [8]byte\n\t_          [16]byte\n}\n\ntype IfData struct {\n\tType        uint8\n\tPhysical    uint8\n\tAddrlen     uint8\n\tHdrlen      uint8\n\tLink_state  uint8\n\tSpare_char1 uint8\n\tSpare_char2 uint8\n\tDatalen     uint8\n\tMtu         uint32\n\tMetric      uint32\n\tBaudrate    uint32\n\tIpackets    uint32\n\tIerrors     uint32\n\tOpackets    uint32\n\tOerrors     uint32\n\tCollisions  uint32\n\tIbytes      uint32\n\tObytes      uint32\n\tImcasts     uint32\n\tOmcasts     uint32\n\tIqdrops     uint32\n\tNoproto     uint32\n\tHwassist    uint32\n\tEpoch       int32\n\tLastchange  Timeval\n}\n\ntype IfaMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\t_       [2]byte\n\tMetric  int32\n}\n\ntype IfmaMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\t_       [2]byte\n}\n\ntype IfAnnounceMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tIndex   uint16\n\tName    [16]int8\n\tWhat    uint16\n}\n\ntype RtMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tIndex   uint16\n\t_       [2]byte\n\tFlags   int32\n\tAddrs   int32\n\tPid     int32\n\tSeq     int32\n\tErrno   int32\n\tFmask   int32\n\tInits   uint32\n\tRmx     RtMetrics\n}\n\ntype RtMetrics struct {\n\tLocks    uint32\n\tMtu      uint32\n\tHopcount uint32\n\tExpire   uint32\n\tRecvpipe uint32\n\tSendpipe uint32\n\tSsthresh uint32\n\tRtt      uint32\n\tRttvar   uint32\n\tPksent   uint32\n\tWeight   uint32\n\tFiller   [3]uint32\n}\n\nconst (\n\tSizeofBpfVersion    = 0x4\n\tSizeofBpfStat       = 0x8\n\tSizeofBpfZbuf       = 0xc\n\tSizeofBpfProgram    = 0x8\n\tSizeofBpfInsn       = 0x8\n\tSizeofBpfHdr        = 0x14\n\tSizeofBpfZbufHeader = 0x20\n)\n\ntype BpfVersion struct {\n\tMajor uint16\n\tMinor uint16\n}\n\ntype BpfStat struct {\n\tRecv uint32\n\tDrop uint32\n}\n\ntype BpfZbuf struct {\n\tBufa   *byte\n\tBufb   *byte\n\tBuflen uint32\n}\n\ntype BpfProgram struct {\n\tLen   uint32\n\tInsns *BpfInsn\n}\n\ntype BpfInsn struct {\n\tCode uint16\n\tJt   uint8\n\tJf   uint8\n\tK    uint32\n}\n\ntype BpfHdr struct {\n\tTstamp  Timeval\n\tCaplen  uint32\n\tDatalen uint32\n\tHdrlen  uint16\n\t_       [2]byte\n}\n\ntype BpfZbufHeader struct {\n\tKernel_gen uint32\n\tKernel_len uint32\n\tUser_gen   uint32\n\t_          [5]uint32\n}\n\ntype Termios struct {\n\tIflag  uint32\n\tOflag  uint32\n\tCflag  uint32\n\tLflag  uint32\n\tCc     [20]uint8\n\tIspeed uint32\n\tOspeed uint32\n}\n\ntype Winsize struct {\n\tRow    uint16\n\tCol    uint16\n\tXpixel uint16\n\tYpixel uint16\n}\n\nconst (\n\tAT_FDCWD            = -0x64\n\tAT_REMOVEDIR        = 0x800\n\tAT_SYMLINK_FOLLOW   = 0x400\n\tAT_SYMLINK_NOFOLLOW = 0x200\n)\n\ntype PollFd struct {\n\tFd      int32\n\tEvents  int16\n\tRevents int16\n}\n\nconst (\n\tPOLLERR      = 0x8\n\tPOLLHUP      = 0x10\n\tPOLLIN       = 0x1\n\tPOLLINIGNEOF = 0x2000\n\tPOLLNVAL     = 0x20\n\tPOLLOUT      = 0x4\n\tPOLLPRI      = 0x2\n\tPOLLRDBAND   = 0x80\n\tPOLLRDNORM   = 0x40\n\tPOLLWRBAND   = 0x100\n\tPOLLWRNORM   = 0x4\n)\n\ntype CapRights struct {\n\tRights [2]uint64\n}\n\ntype Utsname struct {\n\tSysname  [256]byte\n\tNodename [256]byte\n\tRelease  [256]byte\n\tVersion  [256]byte\n\tMachine  [256]byte\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go",
    "content": "// cgo -godefs types_freebsd.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build amd64,freebsd\n\npackage unix\n\nconst (\n\tSizeofPtr      = 0x8\n\tSizeofShort    = 0x2\n\tSizeofInt      = 0x4\n\tSizeofLong     = 0x8\n\tSizeofLongLong = 0x8\n)\n\ntype (\n\t_C_short     int16\n\t_C_int       int32\n\t_C_long      int64\n\t_C_long_long int64\n)\n\ntype Timespec struct {\n\tSec  int64\n\tNsec int64\n}\n\ntype Timeval struct {\n\tSec  int64\n\tUsec int64\n}\n\ntype Rusage struct {\n\tUtime    Timeval\n\tStime    Timeval\n\tMaxrss   int64\n\tIxrss    int64\n\tIdrss    int64\n\tIsrss    int64\n\tMinflt   int64\n\tMajflt   int64\n\tNswap    int64\n\tInblock  int64\n\tOublock  int64\n\tMsgsnd   int64\n\tMsgrcv   int64\n\tNsignals int64\n\tNvcsw    int64\n\tNivcsw   int64\n}\n\ntype Rlimit struct {\n\tCur int64\n\tMax int64\n}\n\ntype _Gid_t uint32\n\nconst (\n\t_statfsVersion = 0x20140518\n\t_dirblksiz     = 0x400\n)\n\ntype Stat_t struct {\n\tDev     uint64\n\tIno     uint64\n\tNlink   uint64\n\tMode    uint16\n\t_0      int16\n\tUid     uint32\n\tGid     uint32\n\t_1      int32\n\tRdev    uint64\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\tBtim    Timespec\n\tSize    int64\n\tBlocks  int64\n\tBlksize int32\n\tFlags   uint32\n\tGen     uint64\n\tSpare   [10]uint64\n}\n\ntype stat_freebsd11_t struct {\n\tDev     uint32\n\tIno     uint32\n\tMode    uint16\n\tNlink   uint16\n\tUid     uint32\n\tGid     uint32\n\tRdev    uint32\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\tSize    int64\n\tBlocks  int64\n\tBlksize int32\n\tFlags   uint32\n\tGen     uint32\n\tLspare  int32\n\tBtim    Timespec\n}\n\ntype Statfs_t struct {\n\tVersion     uint32\n\tType        uint32\n\tFlags       uint64\n\tBsize       uint64\n\tIosize      uint64\n\tBlocks      uint64\n\tBfree       uint64\n\tBavail      int64\n\tFiles       uint64\n\tFfree       int64\n\tSyncwrites  uint64\n\tAsyncwrites uint64\n\tSyncreads   uint64\n\tAsyncreads  uint64\n\tSpare       [10]uint64\n\tNamemax     uint32\n\tOwner       uint32\n\tFsid        Fsid\n\tCharspare   [80]int8\n\tFstypename  [16]int8\n\tMntfromname [1024]int8\n\tMntonname   [1024]int8\n}\n\ntype statfs_freebsd11_t struct {\n\tVersion     uint32\n\tType        uint32\n\tFlags       uint64\n\tBsize       uint64\n\tIosize      uint64\n\tBlocks      uint64\n\tBfree       uint64\n\tBavail      int64\n\tFiles       uint64\n\tFfree       int64\n\tSyncwrites  uint64\n\tAsyncwrites uint64\n\tSyncreads   uint64\n\tAsyncreads  uint64\n\tSpare       [10]uint64\n\tNamemax     uint32\n\tOwner       uint32\n\tFsid        Fsid\n\tCharspare   [80]int8\n\tFstypename  [16]int8\n\tMntfromname [88]int8\n\tMntonname   [88]int8\n}\n\ntype Flock_t struct {\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\tType   int16\n\tWhence int16\n\tSysid  int32\n\t_      [4]byte\n}\n\ntype Dirent struct {\n\tFileno uint64\n\tOff    int64\n\tReclen uint16\n\tType   uint8\n\tPad0   uint8\n\tNamlen uint16\n\tPad1   uint16\n\tName   [256]int8\n}\n\ntype dirent_freebsd11 struct {\n\tFileno uint32\n\tReclen uint16\n\tType   uint8\n\tNamlen uint8\n\tName   [256]int8\n}\n\ntype Fsid struct {\n\tVal [2]int32\n}\n\nconst (\n\tPathMax = 0x400\n)\n\nconst (\n\tFADV_NORMAL     = 0x0\n\tFADV_RANDOM     = 0x1\n\tFADV_SEQUENTIAL = 0x2\n\tFADV_WILLNEED   = 0x3\n\tFADV_DONTNEED   = 0x4\n\tFADV_NOREUSE    = 0x5\n)\n\ntype RawSockaddrInet4 struct {\n\tLen    uint8\n\tFamily uint8\n\tPort   uint16\n\tAddr   [4]byte /* in_addr */\n\tZero   [8]int8\n}\n\ntype RawSockaddrInet6 struct {\n\tLen      uint8\n\tFamily   uint8\n\tPort     uint16\n\tFlowinfo uint32\n\tAddr     [16]byte /* in6_addr */\n\tScope_id uint32\n}\n\ntype RawSockaddrUnix struct {\n\tLen    uint8\n\tFamily uint8\n\tPath   [104]int8\n}\n\ntype RawSockaddrDatalink struct {\n\tLen    uint8\n\tFamily uint8\n\tIndex  uint16\n\tType   uint8\n\tNlen   uint8\n\tAlen   uint8\n\tSlen   uint8\n\tData   [46]int8\n}\n\ntype RawSockaddr struct {\n\tLen    uint8\n\tFamily uint8\n\tData   [14]int8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [92]int8\n}\n\ntype _Socklen uint32\n\ntype Linger struct {\n\tOnoff  int32\n\tLinger int32\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint64\n}\n\ntype IPMreq struct {\n\tMultiaddr [4]byte /* in_addr */\n\tInterface [4]byte /* in_addr */\n}\n\ntype IPMreqn struct {\n\tMultiaddr [4]byte /* in_addr */\n\tAddress   [4]byte /* in_addr */\n\tIfindex   int32\n}\n\ntype IPv6Mreq struct {\n\tMultiaddr [16]byte /* in6_addr */\n\tInterface uint32\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\t_          [4]byte\n\tIov        *Iovec\n\tIovlen     int32\n\t_          [4]byte\n\tControl    *byte\n\tControllen uint32\n\tFlags      int32\n}\n\ntype Cmsghdr struct {\n\tLen   uint32\n\tLevel int32\n\tType  int32\n}\n\ntype Inet6Pktinfo struct {\n\tAddr    [16]byte /* in6_addr */\n\tIfindex uint32\n}\n\ntype IPv6MTUInfo struct {\n\tAddr RawSockaddrInet6\n\tMtu  uint32\n}\n\ntype ICMPv6Filter struct {\n\tFilt [8]uint32\n}\n\nconst (\n\tSizeofSockaddrInet4    = 0x10\n\tSizeofSockaddrInet6    = 0x1c\n\tSizeofSockaddrAny      = 0x6c\n\tSizeofSockaddrUnix     = 0x6a\n\tSizeofSockaddrDatalink = 0x36\n\tSizeofLinger           = 0x8\n\tSizeofIPMreq           = 0x8\n\tSizeofIPMreqn          = 0xc\n\tSizeofIPv6Mreq         = 0x14\n\tSizeofMsghdr           = 0x30\n\tSizeofCmsghdr          = 0xc\n\tSizeofInet6Pktinfo     = 0x14\n\tSizeofIPv6MTUInfo      = 0x20\n\tSizeofICMPv6Filter     = 0x20\n)\n\nconst (\n\tPTRACE_TRACEME = 0x0\n\tPTRACE_CONT    = 0x7\n\tPTRACE_KILL    = 0x8\n)\n\ntype Kevent_t struct {\n\tIdent  uint64\n\tFilter int16\n\tFlags  uint16\n\tFflags uint32\n\tData   int64\n\tUdata  *byte\n}\n\ntype FdSet struct {\n\tBits [16]uint64\n}\n\nconst (\n\tsizeofIfMsghdr         = 0xa8\n\tSizeofIfMsghdr         = 0xa8\n\tsizeofIfData           = 0x98\n\tSizeofIfData           = 0x98\n\tSizeofIfaMsghdr        = 0x14\n\tSizeofIfmaMsghdr       = 0x10\n\tSizeofIfAnnounceMsghdr = 0x18\n\tSizeofRtMsghdr         = 0x98\n\tSizeofRtMetrics        = 0x70\n)\n\ntype ifMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\t_       [2]byte\n\tData    ifData\n}\n\ntype IfMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\t_       [2]byte\n\tData    IfData\n}\n\ntype ifData struct {\n\tType       uint8\n\tPhysical   uint8\n\tAddrlen    uint8\n\tHdrlen     uint8\n\tLink_state uint8\n\tVhid       uint8\n\tDatalen    uint16\n\tMtu        uint32\n\tMetric     uint32\n\tBaudrate   uint64\n\tIpackets   uint64\n\tIerrors    uint64\n\tOpackets   uint64\n\tOerrors    uint64\n\tCollisions uint64\n\tIbytes     uint64\n\tObytes     uint64\n\tImcasts    uint64\n\tOmcasts    uint64\n\tIqdrops    uint64\n\tOqdrops    uint64\n\tNoproto    uint64\n\tHwassist   uint64\n\t_          [8]byte\n\t_          [16]byte\n}\n\ntype IfData struct {\n\tType        uint8\n\tPhysical    uint8\n\tAddrlen     uint8\n\tHdrlen      uint8\n\tLink_state  uint8\n\tSpare_char1 uint8\n\tSpare_char2 uint8\n\tDatalen     uint8\n\tMtu         uint64\n\tMetric      uint64\n\tBaudrate    uint64\n\tIpackets    uint64\n\tIerrors     uint64\n\tOpackets    uint64\n\tOerrors     uint64\n\tCollisions  uint64\n\tIbytes      uint64\n\tObytes      uint64\n\tImcasts     uint64\n\tOmcasts     uint64\n\tIqdrops     uint64\n\tNoproto     uint64\n\tHwassist    uint64\n\tEpoch       int64\n\tLastchange  Timeval\n}\n\ntype IfaMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\t_       [2]byte\n\tMetric  int32\n}\n\ntype IfmaMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\t_       [2]byte\n}\n\ntype IfAnnounceMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tIndex   uint16\n\tName    [16]int8\n\tWhat    uint16\n}\n\ntype RtMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tIndex   uint16\n\t_       [2]byte\n\tFlags   int32\n\tAddrs   int32\n\tPid     int32\n\tSeq     int32\n\tErrno   int32\n\tFmask   int32\n\tInits   uint64\n\tRmx     RtMetrics\n}\n\ntype RtMetrics struct {\n\tLocks    uint64\n\tMtu      uint64\n\tHopcount uint64\n\tExpire   uint64\n\tRecvpipe uint64\n\tSendpipe uint64\n\tSsthresh uint64\n\tRtt      uint64\n\tRttvar   uint64\n\tPksent   uint64\n\tWeight   uint64\n\tFiller   [3]uint64\n}\n\nconst (\n\tSizeofBpfVersion    = 0x4\n\tSizeofBpfStat       = 0x8\n\tSizeofBpfZbuf       = 0x18\n\tSizeofBpfProgram    = 0x10\n\tSizeofBpfInsn       = 0x8\n\tSizeofBpfHdr        = 0x20\n\tSizeofBpfZbufHeader = 0x20\n)\n\ntype BpfVersion struct {\n\tMajor uint16\n\tMinor uint16\n}\n\ntype BpfStat struct {\n\tRecv uint32\n\tDrop uint32\n}\n\ntype BpfZbuf struct {\n\tBufa   *byte\n\tBufb   *byte\n\tBuflen uint64\n}\n\ntype BpfProgram struct {\n\tLen   uint32\n\t_     [4]byte\n\tInsns *BpfInsn\n}\n\ntype BpfInsn struct {\n\tCode uint16\n\tJt   uint8\n\tJf   uint8\n\tK    uint32\n}\n\ntype BpfHdr struct {\n\tTstamp  Timeval\n\tCaplen  uint32\n\tDatalen uint32\n\tHdrlen  uint16\n\t_       [6]byte\n}\n\ntype BpfZbufHeader struct {\n\tKernel_gen uint32\n\tKernel_len uint32\n\tUser_gen   uint32\n\t_          [5]uint32\n}\n\ntype Termios struct {\n\tIflag  uint32\n\tOflag  uint32\n\tCflag  uint32\n\tLflag  uint32\n\tCc     [20]uint8\n\tIspeed uint32\n\tOspeed uint32\n}\n\ntype Winsize struct {\n\tRow    uint16\n\tCol    uint16\n\tXpixel uint16\n\tYpixel uint16\n}\n\nconst (\n\tAT_FDCWD            = -0x64\n\tAT_REMOVEDIR        = 0x800\n\tAT_SYMLINK_FOLLOW   = 0x400\n\tAT_SYMLINK_NOFOLLOW = 0x200\n)\n\ntype PollFd struct {\n\tFd      int32\n\tEvents  int16\n\tRevents int16\n}\n\nconst (\n\tPOLLERR      = 0x8\n\tPOLLHUP      = 0x10\n\tPOLLIN       = 0x1\n\tPOLLINIGNEOF = 0x2000\n\tPOLLNVAL     = 0x20\n\tPOLLOUT      = 0x4\n\tPOLLPRI      = 0x2\n\tPOLLRDBAND   = 0x80\n\tPOLLRDNORM   = 0x40\n\tPOLLWRBAND   = 0x100\n\tPOLLWRNORM   = 0x4\n)\n\ntype CapRights struct {\n\tRights [2]uint64\n}\n\ntype Utsname struct {\n\tSysname  [256]byte\n\tNodename [256]byte\n\tRelease  [256]byte\n\tVersion  [256]byte\n\tMachine  [256]byte\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go",
    "content": "// cgo -godefs -- -fsigned-char types_freebsd.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build arm,freebsd\n\npackage unix\n\nconst (\n\tSizeofPtr      = 0x4\n\tSizeofShort    = 0x2\n\tSizeofInt      = 0x4\n\tSizeofLong     = 0x4\n\tSizeofLongLong = 0x8\n)\n\ntype (\n\t_C_short     int16\n\t_C_int       int32\n\t_C_long      int32\n\t_C_long_long int64\n)\n\ntype Timespec struct {\n\tSec  int64\n\tNsec int32\n\t_    [4]byte\n}\n\ntype Timeval struct {\n\tSec  int64\n\tUsec int32\n\t_    [4]byte\n}\n\ntype Rusage struct {\n\tUtime    Timeval\n\tStime    Timeval\n\tMaxrss   int32\n\tIxrss    int32\n\tIdrss    int32\n\tIsrss    int32\n\tMinflt   int32\n\tMajflt   int32\n\tNswap    int32\n\tInblock  int32\n\tOublock  int32\n\tMsgsnd   int32\n\tMsgrcv   int32\n\tNsignals int32\n\tNvcsw    int32\n\tNivcsw   int32\n}\n\ntype Rlimit struct {\n\tCur int64\n\tMax int64\n}\n\ntype _Gid_t uint32\n\nconst (\n\t_statfsVersion = 0x20140518\n\t_dirblksiz     = 0x400\n)\n\ntype Stat_t struct {\n\tDev     uint64\n\tIno     uint64\n\tNlink   uint64\n\tMode    uint16\n\t_0      int16\n\tUid     uint32\n\tGid     uint32\n\t_1      int32\n\tRdev    uint64\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\tBtim    Timespec\n\tSize    int64\n\tBlocks  int64\n\tBlksize int32\n\tFlags   uint32\n\tGen     uint64\n\tSpare   [10]uint64\n}\n\ntype stat_freebsd11_t struct {\n\tDev     uint32\n\tIno     uint32\n\tMode    uint16\n\tNlink   uint16\n\tUid     uint32\n\tGid     uint32\n\tRdev    uint32\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\tSize    int64\n\tBlocks  int64\n\tBlksize int32\n\tFlags   uint32\n\tGen     uint32\n\tLspare  int32\n\tBtim    Timespec\n}\n\ntype Statfs_t struct {\n\tVersion     uint32\n\tType        uint32\n\tFlags       uint64\n\tBsize       uint64\n\tIosize      uint64\n\tBlocks      uint64\n\tBfree       uint64\n\tBavail      int64\n\tFiles       uint64\n\tFfree       int64\n\tSyncwrites  uint64\n\tAsyncwrites uint64\n\tSyncreads   uint64\n\tAsyncreads  uint64\n\tSpare       [10]uint64\n\tNamemax     uint32\n\tOwner       uint32\n\tFsid        Fsid\n\tCharspare   [80]int8\n\tFstypename  [16]int8\n\tMntfromname [1024]int8\n\tMntonname   [1024]int8\n}\n\ntype statfs_freebsd11_t struct {\n\tVersion     uint32\n\tType        uint32\n\tFlags       uint64\n\tBsize       uint64\n\tIosize      uint64\n\tBlocks      uint64\n\tBfree       uint64\n\tBavail      int64\n\tFiles       uint64\n\tFfree       int64\n\tSyncwrites  uint64\n\tAsyncwrites uint64\n\tSyncreads   uint64\n\tAsyncreads  uint64\n\tSpare       [10]uint64\n\tNamemax     uint32\n\tOwner       uint32\n\tFsid        Fsid\n\tCharspare   [80]int8\n\tFstypename  [16]int8\n\tMntfromname [88]int8\n\tMntonname   [88]int8\n}\n\ntype Flock_t struct {\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\tType   int16\n\tWhence int16\n\tSysid  int32\n\t_      [4]byte\n}\n\ntype Dirent struct {\n\tFileno uint64\n\tOff    int64\n\tReclen uint16\n\tType   uint8\n\tPad0   uint8\n\tNamlen uint16\n\tPad1   uint16\n\tName   [256]int8\n}\n\ntype dirent_freebsd11 struct {\n\tFileno uint32\n\tReclen uint16\n\tType   uint8\n\tNamlen uint8\n\tName   [256]int8\n}\n\ntype Fsid struct {\n\tVal [2]int32\n}\n\nconst (\n\tPathMax = 0x400\n)\n\nconst (\n\tFADV_NORMAL     = 0x0\n\tFADV_RANDOM     = 0x1\n\tFADV_SEQUENTIAL = 0x2\n\tFADV_WILLNEED   = 0x3\n\tFADV_DONTNEED   = 0x4\n\tFADV_NOREUSE    = 0x5\n)\n\ntype RawSockaddrInet4 struct {\n\tLen    uint8\n\tFamily uint8\n\tPort   uint16\n\tAddr   [4]byte /* in_addr */\n\tZero   [8]int8\n}\n\ntype RawSockaddrInet6 struct {\n\tLen      uint8\n\tFamily   uint8\n\tPort     uint16\n\tFlowinfo uint32\n\tAddr     [16]byte /* in6_addr */\n\tScope_id uint32\n}\n\ntype RawSockaddrUnix struct {\n\tLen    uint8\n\tFamily uint8\n\tPath   [104]int8\n}\n\ntype RawSockaddrDatalink struct {\n\tLen    uint8\n\tFamily uint8\n\tIndex  uint16\n\tType   uint8\n\tNlen   uint8\n\tAlen   uint8\n\tSlen   uint8\n\tData   [46]int8\n}\n\ntype RawSockaddr struct {\n\tLen    uint8\n\tFamily uint8\n\tData   [14]int8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [92]int8\n}\n\ntype _Socklen uint32\n\ntype Linger struct {\n\tOnoff  int32\n\tLinger int32\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint32\n}\n\ntype IPMreq struct {\n\tMultiaddr [4]byte /* in_addr */\n\tInterface [4]byte /* in_addr */\n}\n\ntype IPMreqn struct {\n\tMultiaddr [4]byte /* in_addr */\n\tAddress   [4]byte /* in_addr */\n\tIfindex   int32\n}\n\ntype IPv6Mreq struct {\n\tMultiaddr [16]byte /* in6_addr */\n\tInterface uint32\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tIov        *Iovec\n\tIovlen     int32\n\tControl    *byte\n\tControllen uint32\n\tFlags      int32\n}\n\ntype Cmsghdr struct {\n\tLen   uint32\n\tLevel int32\n\tType  int32\n}\n\ntype Inet6Pktinfo struct {\n\tAddr    [16]byte /* in6_addr */\n\tIfindex uint32\n}\n\ntype IPv6MTUInfo struct {\n\tAddr RawSockaddrInet6\n\tMtu  uint32\n}\n\ntype ICMPv6Filter struct {\n\tFilt [8]uint32\n}\n\nconst (\n\tSizeofSockaddrInet4    = 0x10\n\tSizeofSockaddrInet6    = 0x1c\n\tSizeofSockaddrAny      = 0x6c\n\tSizeofSockaddrUnix     = 0x6a\n\tSizeofSockaddrDatalink = 0x36\n\tSizeofLinger           = 0x8\n\tSizeofIPMreq           = 0x8\n\tSizeofIPMreqn          = 0xc\n\tSizeofIPv6Mreq         = 0x14\n\tSizeofMsghdr           = 0x1c\n\tSizeofCmsghdr          = 0xc\n\tSizeofInet6Pktinfo     = 0x14\n\tSizeofIPv6MTUInfo      = 0x20\n\tSizeofICMPv6Filter     = 0x20\n)\n\nconst (\n\tPTRACE_TRACEME = 0x0\n\tPTRACE_CONT    = 0x7\n\tPTRACE_KILL    = 0x8\n)\n\ntype Kevent_t struct {\n\tIdent  uint32\n\tFilter int16\n\tFlags  uint16\n\tFflags uint32\n\tData   int32\n\tUdata  *byte\n}\n\ntype FdSet struct {\n\tBits [32]uint32\n}\n\nconst (\n\tsizeofIfMsghdr         = 0xa8\n\tSizeofIfMsghdr         = 0x70\n\tsizeofIfData           = 0x98\n\tSizeofIfData           = 0x60\n\tSizeofIfaMsghdr        = 0x14\n\tSizeofIfmaMsghdr       = 0x10\n\tSizeofIfAnnounceMsghdr = 0x18\n\tSizeofRtMsghdr         = 0x5c\n\tSizeofRtMetrics        = 0x38\n)\n\ntype ifMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\t_       [2]byte\n\tData    ifData\n}\n\ntype IfMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\t_       [2]byte\n\tData    IfData\n}\n\ntype ifData struct {\n\tType       uint8\n\tPhysical   uint8\n\tAddrlen    uint8\n\tHdrlen     uint8\n\tLink_state uint8\n\tVhid       uint8\n\tDatalen    uint16\n\tMtu        uint32\n\tMetric     uint32\n\tBaudrate   uint64\n\tIpackets   uint64\n\tIerrors    uint64\n\tOpackets   uint64\n\tOerrors    uint64\n\tCollisions uint64\n\tIbytes     uint64\n\tObytes     uint64\n\tImcasts    uint64\n\tOmcasts    uint64\n\tIqdrops    uint64\n\tOqdrops    uint64\n\tNoproto    uint64\n\tHwassist   uint64\n\t_          [8]byte\n\t_          [16]byte\n}\n\ntype IfData struct {\n\tType        uint8\n\tPhysical    uint8\n\tAddrlen     uint8\n\tHdrlen      uint8\n\tLink_state  uint8\n\tSpare_char1 uint8\n\tSpare_char2 uint8\n\tDatalen     uint8\n\tMtu         uint32\n\tMetric      uint32\n\tBaudrate    uint32\n\tIpackets    uint32\n\tIerrors     uint32\n\tOpackets    uint32\n\tOerrors     uint32\n\tCollisions  uint32\n\tIbytes      uint32\n\tObytes      uint32\n\tImcasts     uint32\n\tOmcasts     uint32\n\tIqdrops     uint32\n\tNoproto     uint32\n\tHwassist    uint32\n\t_           [4]byte\n\tEpoch       int64\n\tLastchange  Timeval\n}\n\ntype IfaMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\t_       [2]byte\n\tMetric  int32\n}\n\ntype IfmaMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\t_       [2]byte\n}\n\ntype IfAnnounceMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tIndex   uint16\n\tName    [16]int8\n\tWhat    uint16\n}\n\ntype RtMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tIndex   uint16\n\t_       [2]byte\n\tFlags   int32\n\tAddrs   int32\n\tPid     int32\n\tSeq     int32\n\tErrno   int32\n\tFmask   int32\n\tInits   uint32\n\tRmx     RtMetrics\n}\n\ntype RtMetrics struct {\n\tLocks    uint32\n\tMtu      uint32\n\tHopcount uint32\n\tExpire   uint32\n\tRecvpipe uint32\n\tSendpipe uint32\n\tSsthresh uint32\n\tRtt      uint32\n\tRttvar   uint32\n\tPksent   uint32\n\tWeight   uint32\n\tFiller   [3]uint32\n}\n\nconst (\n\tSizeofBpfVersion    = 0x4\n\tSizeofBpfStat       = 0x8\n\tSizeofBpfZbuf       = 0xc\n\tSizeofBpfProgram    = 0x8\n\tSizeofBpfInsn       = 0x8\n\tSizeofBpfHdr        = 0x20\n\tSizeofBpfZbufHeader = 0x20\n)\n\ntype BpfVersion struct {\n\tMajor uint16\n\tMinor uint16\n}\n\ntype BpfStat struct {\n\tRecv uint32\n\tDrop uint32\n}\n\ntype BpfZbuf struct {\n\tBufa   *byte\n\tBufb   *byte\n\tBuflen uint32\n}\n\ntype BpfProgram struct {\n\tLen   uint32\n\tInsns *BpfInsn\n}\n\ntype BpfInsn struct {\n\tCode uint16\n\tJt   uint8\n\tJf   uint8\n\tK    uint32\n}\n\ntype BpfHdr struct {\n\tTstamp  Timeval\n\tCaplen  uint32\n\tDatalen uint32\n\tHdrlen  uint16\n\t_       [6]byte\n}\n\ntype BpfZbufHeader struct {\n\tKernel_gen uint32\n\tKernel_len uint32\n\tUser_gen   uint32\n\t_          [5]uint32\n}\n\ntype Termios struct {\n\tIflag  uint32\n\tOflag  uint32\n\tCflag  uint32\n\tLflag  uint32\n\tCc     [20]uint8\n\tIspeed uint32\n\tOspeed uint32\n}\n\ntype Winsize struct {\n\tRow    uint16\n\tCol    uint16\n\tXpixel uint16\n\tYpixel uint16\n}\n\nconst (\n\tAT_FDCWD            = -0x64\n\tAT_REMOVEDIR        = 0x800\n\tAT_SYMLINK_FOLLOW   = 0x400\n\tAT_SYMLINK_NOFOLLOW = 0x200\n)\n\ntype PollFd struct {\n\tFd      int32\n\tEvents  int16\n\tRevents int16\n}\n\nconst (\n\tPOLLERR      = 0x8\n\tPOLLHUP      = 0x10\n\tPOLLIN       = 0x1\n\tPOLLINIGNEOF = 0x2000\n\tPOLLNVAL     = 0x20\n\tPOLLOUT      = 0x4\n\tPOLLPRI      = 0x2\n\tPOLLRDBAND   = 0x80\n\tPOLLRDNORM   = 0x40\n\tPOLLWRBAND   = 0x100\n\tPOLLWRNORM   = 0x4\n)\n\ntype CapRights struct {\n\tRights [2]uint64\n}\n\ntype Utsname struct {\n\tSysname  [256]byte\n\tNodename [256]byte\n\tRelease  [256]byte\n\tVersion  [256]byte\n\tMachine  [256]byte\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go",
    "content": "// cgo -godefs types_freebsd.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build arm64,freebsd\n\npackage unix\n\nconst (\n\tSizeofPtr      = 0x8\n\tSizeofShort    = 0x2\n\tSizeofInt      = 0x4\n\tSizeofLong     = 0x8\n\tSizeofLongLong = 0x8\n)\n\ntype (\n\t_C_short     int16\n\t_C_int       int32\n\t_C_long      int64\n\t_C_long_long int64\n)\n\ntype Timespec struct {\n\tSec  int64\n\tNsec int64\n}\n\ntype Timeval struct {\n\tSec  int64\n\tUsec int64\n}\n\ntype Rusage struct {\n\tUtime    Timeval\n\tStime    Timeval\n\tMaxrss   int64\n\tIxrss    int64\n\tIdrss    int64\n\tIsrss    int64\n\tMinflt   int64\n\tMajflt   int64\n\tNswap    int64\n\tInblock  int64\n\tOublock  int64\n\tMsgsnd   int64\n\tMsgrcv   int64\n\tNsignals int64\n\tNvcsw    int64\n\tNivcsw   int64\n}\n\ntype Rlimit struct {\n\tCur int64\n\tMax int64\n}\n\ntype _Gid_t uint32\n\nconst (\n\t_statfsVersion = 0x20140518\n\t_dirblksiz     = 0x400\n)\n\ntype Stat_t struct {\n\tDev     uint64\n\tIno     uint64\n\tNlink   uint64\n\tMode    uint16\n\t_0      int16\n\tUid     uint32\n\tGid     uint32\n\t_1      int32\n\tRdev    uint64\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\tBtim    Timespec\n\tSize    int64\n\tBlocks  int64\n\tBlksize int32\n\tFlags   uint32\n\tGen     uint64\n\tSpare   [10]uint64\n}\n\ntype stat_freebsd11_t struct {\n\tDev     uint32\n\tIno     uint32\n\tMode    uint16\n\tNlink   uint16\n\tUid     uint32\n\tGid     uint32\n\tRdev    uint32\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\tSize    int64\n\tBlocks  int64\n\tBlksize int32\n\tFlags   uint32\n\tGen     uint32\n\tLspare  int32\n\tBtim    Timespec\n}\n\ntype Statfs_t struct {\n\tVersion     uint32\n\tType        uint32\n\tFlags       uint64\n\tBsize       uint64\n\tIosize      uint64\n\tBlocks      uint64\n\tBfree       uint64\n\tBavail      int64\n\tFiles       uint64\n\tFfree       int64\n\tSyncwrites  uint64\n\tAsyncwrites uint64\n\tSyncreads   uint64\n\tAsyncreads  uint64\n\tSpare       [10]uint64\n\tNamemax     uint32\n\tOwner       uint32\n\tFsid        Fsid\n\tCharspare   [80]int8\n\tFstypename  [16]int8\n\tMntfromname [1024]int8\n\tMntonname   [1024]int8\n}\n\ntype statfs_freebsd11_t struct {\n\tVersion     uint32\n\tType        uint32\n\tFlags       uint64\n\tBsize       uint64\n\tIosize      uint64\n\tBlocks      uint64\n\tBfree       uint64\n\tBavail      int64\n\tFiles       uint64\n\tFfree       int64\n\tSyncwrites  uint64\n\tAsyncwrites uint64\n\tSyncreads   uint64\n\tAsyncreads  uint64\n\tSpare       [10]uint64\n\tNamemax     uint32\n\tOwner       uint32\n\tFsid        Fsid\n\tCharspare   [80]int8\n\tFstypename  [16]int8\n\tMntfromname [88]int8\n\tMntonname   [88]int8\n}\n\ntype Flock_t struct {\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\tType   int16\n\tWhence int16\n\tSysid  int32\n\t_      [4]byte\n}\n\ntype Dirent struct {\n\tFileno uint64\n\tOff    int64\n\tReclen uint16\n\tType   uint8\n\tPad0   uint8\n\tNamlen uint16\n\tPad1   uint16\n\tName   [256]int8\n}\n\ntype dirent_freebsd11 struct {\n\tFileno uint32\n\tReclen uint16\n\tType   uint8\n\tNamlen uint8\n\tName   [256]int8\n}\n\ntype Fsid struct {\n\tVal [2]int32\n}\n\nconst (\n\tPathMax = 0x400\n)\n\nconst (\n\tFADV_NORMAL     = 0x0\n\tFADV_RANDOM     = 0x1\n\tFADV_SEQUENTIAL = 0x2\n\tFADV_WILLNEED   = 0x3\n\tFADV_DONTNEED   = 0x4\n\tFADV_NOREUSE    = 0x5\n)\n\ntype RawSockaddrInet4 struct {\n\tLen    uint8\n\tFamily uint8\n\tPort   uint16\n\tAddr   [4]byte /* in_addr */\n\tZero   [8]int8\n}\n\ntype RawSockaddrInet6 struct {\n\tLen      uint8\n\tFamily   uint8\n\tPort     uint16\n\tFlowinfo uint32\n\tAddr     [16]byte /* in6_addr */\n\tScope_id uint32\n}\n\ntype RawSockaddrUnix struct {\n\tLen    uint8\n\tFamily uint8\n\tPath   [104]int8\n}\n\ntype RawSockaddrDatalink struct {\n\tLen    uint8\n\tFamily uint8\n\tIndex  uint16\n\tType   uint8\n\tNlen   uint8\n\tAlen   uint8\n\tSlen   uint8\n\tData   [46]int8\n}\n\ntype RawSockaddr struct {\n\tLen    uint8\n\tFamily uint8\n\tData   [14]int8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [92]int8\n}\n\ntype _Socklen uint32\n\ntype Linger struct {\n\tOnoff  int32\n\tLinger int32\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint64\n}\n\ntype IPMreq struct {\n\tMultiaddr [4]byte /* in_addr */\n\tInterface [4]byte /* in_addr */\n}\n\ntype IPMreqn struct {\n\tMultiaddr [4]byte /* in_addr */\n\tAddress   [4]byte /* in_addr */\n\tIfindex   int32\n}\n\ntype IPv6Mreq struct {\n\tMultiaddr [16]byte /* in6_addr */\n\tInterface uint32\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\t_          [4]byte\n\tIov        *Iovec\n\tIovlen     int32\n\t_          [4]byte\n\tControl    *byte\n\tControllen uint32\n\tFlags      int32\n}\n\ntype Cmsghdr struct {\n\tLen   uint32\n\tLevel int32\n\tType  int32\n}\n\ntype Inet6Pktinfo struct {\n\tAddr    [16]byte /* in6_addr */\n\tIfindex uint32\n}\n\ntype IPv6MTUInfo struct {\n\tAddr RawSockaddrInet6\n\tMtu  uint32\n}\n\ntype ICMPv6Filter struct {\n\tFilt [8]uint32\n}\n\nconst (\n\tSizeofSockaddrInet4    = 0x10\n\tSizeofSockaddrInet6    = 0x1c\n\tSizeofSockaddrAny      = 0x6c\n\tSizeofSockaddrUnix     = 0x6a\n\tSizeofSockaddrDatalink = 0x36\n\tSizeofLinger           = 0x8\n\tSizeofIPMreq           = 0x8\n\tSizeofIPMreqn          = 0xc\n\tSizeofIPv6Mreq         = 0x14\n\tSizeofMsghdr           = 0x30\n\tSizeofCmsghdr          = 0xc\n\tSizeofInet6Pktinfo     = 0x14\n\tSizeofIPv6MTUInfo      = 0x20\n\tSizeofICMPv6Filter     = 0x20\n)\n\nconst (\n\tPTRACE_TRACEME = 0x0\n\tPTRACE_CONT    = 0x7\n\tPTRACE_KILL    = 0x8\n)\n\ntype Kevent_t struct {\n\tIdent  uint64\n\tFilter int16\n\tFlags  uint16\n\tFflags uint32\n\tData   int64\n\tUdata  *byte\n}\n\ntype FdSet struct {\n\tBits [16]uint64\n}\n\nconst (\n\tsizeofIfMsghdr         = 0xa8\n\tSizeofIfMsghdr         = 0xa8\n\tsizeofIfData           = 0x98\n\tSizeofIfData           = 0x98\n\tSizeofIfaMsghdr        = 0x14\n\tSizeofIfmaMsghdr       = 0x10\n\tSizeofIfAnnounceMsghdr = 0x18\n\tSizeofRtMsghdr         = 0x98\n\tSizeofRtMetrics        = 0x70\n)\n\ntype ifMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\t_       [2]byte\n\tData    ifData\n}\n\ntype IfMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\t_       [2]byte\n\tData    IfData\n}\n\ntype ifData struct {\n\tType       uint8\n\tPhysical   uint8\n\tAddrlen    uint8\n\tHdrlen     uint8\n\tLink_state uint8\n\tVhid       uint8\n\tDatalen    uint16\n\tMtu        uint32\n\tMetric     uint32\n\tBaudrate   uint64\n\tIpackets   uint64\n\tIerrors    uint64\n\tOpackets   uint64\n\tOerrors    uint64\n\tCollisions uint64\n\tIbytes     uint64\n\tObytes     uint64\n\tImcasts    uint64\n\tOmcasts    uint64\n\tIqdrops    uint64\n\tOqdrops    uint64\n\tNoproto    uint64\n\tHwassist   uint64\n\t_          [8]byte\n\t_          [16]byte\n}\n\ntype IfData struct {\n\tType        uint8\n\tPhysical    uint8\n\tAddrlen     uint8\n\tHdrlen      uint8\n\tLink_state  uint8\n\tSpare_char1 uint8\n\tSpare_char2 uint8\n\tDatalen     uint8\n\tMtu         uint64\n\tMetric      uint64\n\tBaudrate    uint64\n\tIpackets    uint64\n\tIerrors     uint64\n\tOpackets    uint64\n\tOerrors     uint64\n\tCollisions  uint64\n\tIbytes      uint64\n\tObytes      uint64\n\tImcasts     uint64\n\tOmcasts     uint64\n\tIqdrops     uint64\n\tNoproto     uint64\n\tHwassist    uint64\n\tEpoch       int64\n\tLastchange  Timeval\n}\n\ntype IfaMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\t_       [2]byte\n\tMetric  int32\n}\n\ntype IfmaMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\t_       [2]byte\n}\n\ntype IfAnnounceMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tIndex   uint16\n\tName    [16]int8\n\tWhat    uint16\n}\n\ntype RtMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tIndex   uint16\n\t_       [2]byte\n\tFlags   int32\n\tAddrs   int32\n\tPid     int32\n\tSeq     int32\n\tErrno   int32\n\tFmask   int32\n\tInits   uint64\n\tRmx     RtMetrics\n}\n\ntype RtMetrics struct {\n\tLocks    uint64\n\tMtu      uint64\n\tHopcount uint64\n\tExpire   uint64\n\tRecvpipe uint64\n\tSendpipe uint64\n\tSsthresh uint64\n\tRtt      uint64\n\tRttvar   uint64\n\tPksent   uint64\n\tWeight   uint64\n\tFiller   [3]uint64\n}\n\nconst (\n\tSizeofBpfVersion    = 0x4\n\tSizeofBpfStat       = 0x8\n\tSizeofBpfZbuf       = 0x18\n\tSizeofBpfProgram    = 0x10\n\tSizeofBpfInsn       = 0x8\n\tSizeofBpfHdr        = 0x20\n\tSizeofBpfZbufHeader = 0x20\n)\n\ntype BpfVersion struct {\n\tMajor uint16\n\tMinor uint16\n}\n\ntype BpfStat struct {\n\tRecv uint32\n\tDrop uint32\n}\n\ntype BpfZbuf struct {\n\tBufa   *byte\n\tBufb   *byte\n\tBuflen uint64\n}\n\ntype BpfProgram struct {\n\tLen   uint32\n\t_     [4]byte\n\tInsns *BpfInsn\n}\n\ntype BpfInsn struct {\n\tCode uint16\n\tJt   uint8\n\tJf   uint8\n\tK    uint32\n}\n\ntype BpfHdr struct {\n\tTstamp  Timeval\n\tCaplen  uint32\n\tDatalen uint32\n\tHdrlen  uint16\n\t_       [6]byte\n}\n\ntype BpfZbufHeader struct {\n\tKernel_gen uint32\n\tKernel_len uint32\n\tUser_gen   uint32\n\t_          [5]uint32\n}\n\ntype Termios struct {\n\tIflag  uint32\n\tOflag  uint32\n\tCflag  uint32\n\tLflag  uint32\n\tCc     [20]uint8\n\tIspeed uint32\n\tOspeed uint32\n}\n\ntype Winsize struct {\n\tRow    uint16\n\tCol    uint16\n\tXpixel uint16\n\tYpixel uint16\n}\n\nconst (\n\tAT_FDCWD            = -0x64\n\tAT_REMOVEDIR        = 0x800\n\tAT_SYMLINK_FOLLOW   = 0x400\n\tAT_SYMLINK_NOFOLLOW = 0x200\n)\n\ntype PollFd struct {\n\tFd      int32\n\tEvents  int16\n\tRevents int16\n}\n\nconst (\n\tPOLLERR      = 0x8\n\tPOLLHUP      = 0x10\n\tPOLLIN       = 0x1\n\tPOLLINIGNEOF = 0x2000\n\tPOLLNVAL     = 0x20\n\tPOLLOUT      = 0x4\n\tPOLLPRI      = 0x2\n\tPOLLRDBAND   = 0x80\n\tPOLLRDNORM   = 0x40\n\tPOLLWRBAND   = 0x100\n\tPOLLWRNORM   = 0x4\n)\n\ntype CapRights struct {\n\tRights [2]uint64\n}\n\ntype Utsname struct {\n\tSysname  [256]byte\n\tNodename [256]byte\n\tRelease  [256]byte\n\tVersion  [256]byte\n\tMachine  [256]byte\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_linux_386.go",
    "content": "// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m32 linux/types.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build 386,linux\n\npackage unix\n\nconst (\n\tSizeofPtr      = 0x4\n\tSizeofShort    = 0x2\n\tSizeofInt      = 0x4\n\tSizeofLong     = 0x4\n\tSizeofLongLong = 0x8\n\tPathMax        = 0x1000\n)\n\ntype (\n\t_C_short     int16\n\t_C_int       int32\n\t_C_long      int32\n\t_C_long_long int64\n)\n\ntype Timespec struct {\n\tSec  int32\n\tNsec int32\n}\n\ntype Timeval struct {\n\tSec  int32\n\tUsec int32\n}\n\ntype Timex struct {\n\tModes     uint32\n\tOffset    int32\n\tFreq      int32\n\tMaxerror  int32\n\tEsterror  int32\n\tStatus    int32\n\tConstant  int32\n\tPrecision int32\n\tTolerance int32\n\tTime      Timeval\n\tTick      int32\n\tPpsfreq   int32\n\tJitter    int32\n\tShift     int32\n\tStabil    int32\n\tJitcnt    int32\n\tCalcnt    int32\n\tErrcnt    int32\n\tStbcnt    int32\n\tTai       int32\n\t_         [44]byte\n}\n\ntype Time_t int32\n\ntype Tms struct {\n\tUtime  int32\n\tStime  int32\n\tCutime int32\n\tCstime int32\n}\n\ntype Utimbuf struct {\n\tActime  int32\n\tModtime int32\n}\n\ntype Rusage struct {\n\tUtime    Timeval\n\tStime    Timeval\n\tMaxrss   int32\n\tIxrss    int32\n\tIdrss    int32\n\tIsrss    int32\n\tMinflt   int32\n\tMajflt   int32\n\tNswap    int32\n\tInblock  int32\n\tOublock  int32\n\tMsgsnd   int32\n\tMsgrcv   int32\n\tNsignals int32\n\tNvcsw    int32\n\tNivcsw   int32\n}\n\ntype Rlimit struct {\n\tCur uint64\n\tMax uint64\n}\n\ntype _Gid_t uint32\n\ntype Stat_t struct {\n\tDev     uint64\n\t_       uint16\n\t_       uint32\n\tMode    uint32\n\tNlink   uint32\n\tUid     uint32\n\tGid     uint32\n\tRdev    uint64\n\t_       uint16\n\tSize    int64\n\tBlksize int32\n\tBlocks  int64\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\tIno     uint64\n}\n\ntype StatxTimestamp struct {\n\tSec  int64\n\tNsec uint32\n\t_    int32\n}\n\ntype Statx_t struct {\n\tMask            uint32\n\tBlksize         uint32\n\tAttributes      uint64\n\tNlink           uint32\n\tUid             uint32\n\tGid             uint32\n\tMode            uint16\n\t_               [1]uint16\n\tIno             uint64\n\tSize            uint64\n\tBlocks          uint64\n\tAttributes_mask uint64\n\tAtime           StatxTimestamp\n\tBtime           StatxTimestamp\n\tCtime           StatxTimestamp\n\tMtime           StatxTimestamp\n\tRdev_major      uint32\n\tRdev_minor      uint32\n\tDev_major       uint32\n\tDev_minor       uint32\n\t_               [14]uint64\n}\n\ntype Dirent struct {\n\tIno    uint64\n\tOff    int64\n\tReclen uint16\n\tType   uint8\n\tName   [256]int8\n\t_      [1]byte\n}\n\ntype Fsid struct {\n\tVal [2]int32\n}\n\ntype Flock_t struct {\n\tType   int16\n\tWhence int16\n\tStart  int64\n\tLen    int64\n\tPid    int32\n}\n\ntype FscryptPolicy struct {\n\tVersion                   uint8\n\tContents_encryption_mode  uint8\n\tFilenames_encryption_mode uint8\n\tFlags                     uint8\n\tMaster_key_descriptor     [8]uint8\n}\n\ntype FscryptKey struct {\n\tMode uint32\n\tRaw  [64]uint8\n\tSize uint32\n}\n\ntype KeyctlDHParams struct {\n\tPrivate int32\n\tPrime   int32\n\tBase    int32\n}\n\nconst (\n\tFADV_NORMAL     = 0x0\n\tFADV_RANDOM     = 0x1\n\tFADV_SEQUENTIAL = 0x2\n\tFADV_WILLNEED   = 0x3\n\tFADV_DONTNEED   = 0x4\n\tFADV_NOREUSE    = 0x5\n)\n\ntype RawSockaddrInet4 struct {\n\tFamily uint16\n\tPort   uint16\n\tAddr   [4]byte /* in_addr */\n\tZero   [8]uint8\n}\n\ntype RawSockaddrInet6 struct {\n\tFamily   uint16\n\tPort     uint16\n\tFlowinfo uint32\n\tAddr     [16]byte /* in6_addr */\n\tScope_id uint32\n}\n\ntype RawSockaddrUnix struct {\n\tFamily uint16\n\tPath   [108]int8\n}\n\ntype RawSockaddrLinklayer struct {\n\tFamily   uint16\n\tProtocol uint16\n\tIfindex  int32\n\tHatype   uint16\n\tPkttype  uint8\n\tHalen    uint8\n\tAddr     [8]uint8\n}\n\ntype RawSockaddrNetlink struct {\n\tFamily uint16\n\tPad    uint16\n\tPid    uint32\n\tGroups uint32\n}\n\ntype RawSockaddrHCI struct {\n\tFamily  uint16\n\tDev     uint16\n\tChannel uint16\n}\n\ntype RawSockaddrL2 struct {\n\tFamily      uint16\n\tPsm         uint16\n\tBdaddr      [6]uint8\n\tCid         uint16\n\tBdaddr_type uint8\n\t_           [1]byte\n}\n\ntype RawSockaddrRFCOMM struct {\n\tFamily  uint16\n\tBdaddr  [6]uint8\n\tChannel uint8\n\t_       [1]byte\n}\n\ntype RawSockaddrCAN struct {\n\tFamily  uint16\n\tIfindex int32\n\tAddr    [8]byte\n}\n\ntype RawSockaddrALG struct {\n\tFamily uint16\n\tType   [14]uint8\n\tFeat   uint32\n\tMask   uint32\n\tName   [64]uint8\n}\n\ntype RawSockaddrVM struct {\n\tFamily    uint16\n\tReserved1 uint16\n\tPort      uint32\n\tCid       uint32\n\tZero      [4]uint8\n}\n\ntype RawSockaddrXDP struct {\n\tFamily         uint16\n\tFlags          uint16\n\tIfindex        uint32\n\tQueue_id       uint32\n\tShared_umem_fd uint32\n}\n\ntype RawSockaddrPPPoX [0x1e]byte\n\ntype RawSockaddr struct {\n\tFamily uint16\n\tData   [14]int8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [96]int8\n}\n\ntype _Socklen uint32\n\ntype Linger struct {\n\tOnoff  int32\n\tLinger int32\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint32\n}\n\ntype IPMreq struct {\n\tMultiaddr [4]byte /* in_addr */\n\tInterface [4]byte /* in_addr */\n}\n\ntype IPMreqn struct {\n\tMultiaddr [4]byte /* in_addr */\n\tAddress   [4]byte /* in_addr */\n\tIfindex   int32\n}\n\ntype IPv6Mreq struct {\n\tMultiaddr [16]byte /* in6_addr */\n\tInterface uint32\n}\n\ntype PacketMreq struct {\n\tIfindex int32\n\tType    uint16\n\tAlen    uint16\n\tAddress [8]uint8\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tIov        *Iovec\n\tIovlen     uint32\n\tControl    *byte\n\tControllen uint32\n\tFlags      int32\n}\n\ntype Cmsghdr struct {\n\tLen   uint32\n\tLevel int32\n\tType  int32\n}\n\ntype Inet4Pktinfo struct {\n\tIfindex  int32\n\tSpec_dst [4]byte /* in_addr */\n\tAddr     [4]byte /* in_addr */\n}\n\ntype Inet6Pktinfo struct {\n\tAddr    [16]byte /* in6_addr */\n\tIfindex uint32\n}\n\ntype IPv6MTUInfo struct {\n\tAddr RawSockaddrInet6\n\tMtu  uint32\n}\n\ntype ICMPv6Filter struct {\n\tData [8]uint32\n}\n\ntype Ucred struct {\n\tPid int32\n\tUid uint32\n\tGid uint32\n}\n\ntype TCPInfo struct {\n\tState          uint8\n\tCa_state       uint8\n\tRetransmits    uint8\n\tProbes         uint8\n\tBackoff        uint8\n\tOptions        uint8\n\tRto            uint32\n\tAto            uint32\n\tSnd_mss        uint32\n\tRcv_mss        uint32\n\tUnacked        uint32\n\tSacked         uint32\n\tLost           uint32\n\tRetrans        uint32\n\tFackets        uint32\n\tLast_data_sent uint32\n\tLast_ack_sent  uint32\n\tLast_data_recv uint32\n\tLast_ack_recv  uint32\n\tPmtu           uint32\n\tRcv_ssthresh   uint32\n\tRtt            uint32\n\tRttvar         uint32\n\tSnd_ssthresh   uint32\n\tSnd_cwnd       uint32\n\tAdvmss         uint32\n\tReordering     uint32\n\tRcv_rtt        uint32\n\tRcv_space      uint32\n\tTotal_retrans  uint32\n}\n\ntype CanFilter struct {\n\tId   uint32\n\tMask uint32\n}\n\nconst (\n\tSizeofSockaddrInet4     = 0x10\n\tSizeofSockaddrInet6     = 0x1c\n\tSizeofSockaddrAny       = 0x70\n\tSizeofSockaddrUnix      = 0x6e\n\tSizeofSockaddrLinklayer = 0x14\n\tSizeofSockaddrNetlink   = 0xc\n\tSizeofSockaddrHCI       = 0x6\n\tSizeofSockaddrL2        = 0xe\n\tSizeofSockaddrRFCOMM    = 0xa\n\tSizeofSockaddrCAN       = 0x10\n\tSizeofSockaddrALG       = 0x58\n\tSizeofSockaddrVM        = 0x10\n\tSizeofSockaddrXDP       = 0x10\n\tSizeofSockaddrPPPoX     = 0x1e\n\tSizeofLinger            = 0x8\n\tSizeofIovec             = 0x8\n\tSizeofIPMreq            = 0x8\n\tSizeofIPMreqn           = 0xc\n\tSizeofIPv6Mreq          = 0x14\n\tSizeofPacketMreq        = 0x10\n\tSizeofMsghdr            = 0x1c\n\tSizeofCmsghdr           = 0xc\n\tSizeofInet4Pktinfo      = 0xc\n\tSizeofInet6Pktinfo      = 0x14\n\tSizeofIPv6MTUInfo       = 0x20\n\tSizeofICMPv6Filter      = 0x20\n\tSizeofUcred             = 0xc\n\tSizeofTCPInfo           = 0x68\n\tSizeofCanFilter         = 0x8\n)\n\nconst (\n\tNDA_UNSPEC              = 0x0\n\tNDA_DST                 = 0x1\n\tNDA_LLADDR              = 0x2\n\tNDA_CACHEINFO           = 0x3\n\tNDA_PROBES              = 0x4\n\tNDA_VLAN                = 0x5\n\tNDA_PORT                = 0x6\n\tNDA_VNI                 = 0x7\n\tNDA_IFINDEX             = 0x8\n\tNDA_MASTER              = 0x9\n\tNDA_LINK_NETNSID        = 0xa\n\tNDA_SRC_VNI             = 0xb\n\tNTF_USE                 = 0x1\n\tNTF_SELF                = 0x2\n\tNTF_MASTER              = 0x4\n\tNTF_PROXY               = 0x8\n\tNTF_EXT_LEARNED         = 0x10\n\tNTF_OFFLOADED           = 0x20\n\tNTF_ROUTER              = 0x80\n\tNUD_INCOMPLETE          = 0x1\n\tNUD_REACHABLE           = 0x2\n\tNUD_STALE               = 0x4\n\tNUD_DELAY               = 0x8\n\tNUD_PROBE               = 0x10\n\tNUD_FAILED              = 0x20\n\tNUD_NOARP               = 0x40\n\tNUD_PERMANENT           = 0x80\n\tNUD_NONE                = 0x0\n\tIFA_UNSPEC              = 0x0\n\tIFA_ADDRESS             = 0x1\n\tIFA_LOCAL               = 0x2\n\tIFA_LABEL               = 0x3\n\tIFA_BROADCAST           = 0x4\n\tIFA_ANYCAST             = 0x5\n\tIFA_CACHEINFO           = 0x6\n\tIFA_MULTICAST           = 0x7\n\tIFA_FLAGS               = 0x8\n\tIFA_RT_PRIORITY         = 0x9\n\tIFA_TARGET_NETNSID      = 0xa\n\tIFLA_UNSPEC             = 0x0\n\tIFLA_ADDRESS            = 0x1\n\tIFLA_BROADCAST          = 0x2\n\tIFLA_IFNAME             = 0x3\n\tIFLA_MTU                = 0x4\n\tIFLA_LINK               = 0x5\n\tIFLA_QDISC              = 0x6\n\tIFLA_STATS              = 0x7\n\tIFLA_COST               = 0x8\n\tIFLA_PRIORITY           = 0x9\n\tIFLA_MASTER             = 0xa\n\tIFLA_WIRELESS           = 0xb\n\tIFLA_PROTINFO           = 0xc\n\tIFLA_TXQLEN             = 0xd\n\tIFLA_MAP                = 0xe\n\tIFLA_WEIGHT             = 0xf\n\tIFLA_OPERSTATE          = 0x10\n\tIFLA_LINKMODE           = 0x11\n\tIFLA_LINKINFO           = 0x12\n\tIFLA_NET_NS_PID         = 0x13\n\tIFLA_IFALIAS            = 0x14\n\tIFLA_NUM_VF             = 0x15\n\tIFLA_VFINFO_LIST        = 0x16\n\tIFLA_STATS64            = 0x17\n\tIFLA_VF_PORTS           = 0x18\n\tIFLA_PORT_SELF          = 0x19\n\tIFLA_AF_SPEC            = 0x1a\n\tIFLA_GROUP              = 0x1b\n\tIFLA_NET_NS_FD          = 0x1c\n\tIFLA_EXT_MASK           = 0x1d\n\tIFLA_PROMISCUITY        = 0x1e\n\tIFLA_NUM_TX_QUEUES      = 0x1f\n\tIFLA_NUM_RX_QUEUES      = 0x20\n\tIFLA_CARRIER            = 0x21\n\tIFLA_PHYS_PORT_ID       = 0x22\n\tIFLA_CARRIER_CHANGES    = 0x23\n\tIFLA_PHYS_SWITCH_ID     = 0x24\n\tIFLA_LINK_NETNSID       = 0x25\n\tIFLA_PHYS_PORT_NAME     = 0x26\n\tIFLA_PROTO_DOWN         = 0x27\n\tIFLA_GSO_MAX_SEGS       = 0x28\n\tIFLA_GSO_MAX_SIZE       = 0x29\n\tIFLA_PAD                = 0x2a\n\tIFLA_XDP                = 0x2b\n\tIFLA_EVENT              = 0x2c\n\tIFLA_NEW_NETNSID        = 0x2d\n\tIFLA_IF_NETNSID         = 0x2e\n\tIFLA_TARGET_NETNSID     = 0x2e\n\tIFLA_CARRIER_UP_COUNT   = 0x2f\n\tIFLA_CARRIER_DOWN_COUNT = 0x30\n\tIFLA_NEW_IFINDEX        = 0x31\n\tIFLA_MIN_MTU            = 0x32\n\tIFLA_MAX_MTU            = 0x33\n\tIFLA_MAX                = 0x33\n\tIFLA_INFO_KIND          = 0x1\n\tIFLA_INFO_DATA          = 0x2\n\tIFLA_INFO_XSTATS        = 0x3\n\tIFLA_INFO_SLAVE_KIND    = 0x4\n\tIFLA_INFO_SLAVE_DATA    = 0x5\n\tRT_SCOPE_UNIVERSE       = 0x0\n\tRT_SCOPE_SITE           = 0xc8\n\tRT_SCOPE_LINK           = 0xfd\n\tRT_SCOPE_HOST           = 0xfe\n\tRT_SCOPE_NOWHERE        = 0xff\n\tRT_TABLE_UNSPEC         = 0x0\n\tRT_TABLE_COMPAT         = 0xfc\n\tRT_TABLE_DEFAULT        = 0xfd\n\tRT_TABLE_MAIN           = 0xfe\n\tRT_TABLE_LOCAL          = 0xff\n\tRT_TABLE_MAX            = 0xffffffff\n\tRTA_UNSPEC              = 0x0\n\tRTA_DST                 = 0x1\n\tRTA_SRC                 = 0x2\n\tRTA_IIF                 = 0x3\n\tRTA_OIF                 = 0x4\n\tRTA_GATEWAY             = 0x5\n\tRTA_PRIORITY            = 0x6\n\tRTA_PREFSRC             = 0x7\n\tRTA_METRICS             = 0x8\n\tRTA_MULTIPATH           = 0x9\n\tRTA_FLOW                = 0xb\n\tRTA_CACHEINFO           = 0xc\n\tRTA_TABLE               = 0xf\n\tRTA_MARK                = 0x10\n\tRTA_MFC_STATS           = 0x11\n\tRTA_VIA                 = 0x12\n\tRTA_NEWDST              = 0x13\n\tRTA_PREF                = 0x14\n\tRTA_ENCAP_TYPE          = 0x15\n\tRTA_ENCAP               = 0x16\n\tRTA_EXPIRES             = 0x17\n\tRTA_PAD                 = 0x18\n\tRTA_UID                 = 0x19\n\tRTA_TTL_PROPAGATE       = 0x1a\n\tRTA_IP_PROTO            = 0x1b\n\tRTA_SPORT               = 0x1c\n\tRTA_DPORT               = 0x1d\n\tRTN_UNSPEC              = 0x0\n\tRTN_UNICAST             = 0x1\n\tRTN_LOCAL               = 0x2\n\tRTN_BROADCAST           = 0x3\n\tRTN_ANYCAST             = 0x4\n\tRTN_MULTICAST           = 0x5\n\tRTN_BLACKHOLE           = 0x6\n\tRTN_UNREACHABLE         = 0x7\n\tRTN_PROHIBIT            = 0x8\n\tRTN_THROW               = 0x9\n\tRTN_NAT                 = 0xa\n\tRTN_XRESOLVE            = 0xb\n\tRTNLGRP_NONE            = 0x0\n\tRTNLGRP_LINK            = 0x1\n\tRTNLGRP_NOTIFY          = 0x2\n\tRTNLGRP_NEIGH           = 0x3\n\tRTNLGRP_TC              = 0x4\n\tRTNLGRP_IPV4_IFADDR     = 0x5\n\tRTNLGRP_IPV4_MROUTE     = 0x6\n\tRTNLGRP_IPV4_ROUTE      = 0x7\n\tRTNLGRP_IPV4_RULE       = 0x8\n\tRTNLGRP_IPV6_IFADDR     = 0x9\n\tRTNLGRP_IPV6_MROUTE     = 0xa\n\tRTNLGRP_IPV6_ROUTE      = 0xb\n\tRTNLGRP_IPV6_IFINFO     = 0xc\n\tRTNLGRP_IPV6_PREFIX     = 0x12\n\tRTNLGRP_IPV6_RULE       = 0x13\n\tRTNLGRP_ND_USEROPT      = 0x14\n\tSizeofNlMsghdr          = 0x10\n\tSizeofNlMsgerr          = 0x14\n\tSizeofRtGenmsg          = 0x1\n\tSizeofNlAttr            = 0x4\n\tSizeofRtAttr            = 0x4\n\tSizeofIfInfomsg         = 0x10\n\tSizeofIfAddrmsg         = 0x8\n\tSizeofRtMsg             = 0xc\n\tSizeofRtNexthop         = 0x8\n\tSizeofNdUseroptmsg      = 0x10\n\tSizeofNdMsg             = 0xc\n)\n\ntype NlMsghdr struct {\n\tLen   uint32\n\tType  uint16\n\tFlags uint16\n\tSeq   uint32\n\tPid   uint32\n}\n\ntype NlMsgerr struct {\n\tError int32\n\tMsg   NlMsghdr\n}\n\ntype RtGenmsg struct {\n\tFamily uint8\n}\n\ntype NlAttr struct {\n\tLen  uint16\n\tType uint16\n}\n\ntype RtAttr struct {\n\tLen  uint16\n\tType uint16\n}\n\ntype IfInfomsg struct {\n\tFamily uint8\n\t_      uint8\n\tType   uint16\n\tIndex  int32\n\tFlags  uint32\n\tChange uint32\n}\n\ntype IfAddrmsg struct {\n\tFamily    uint8\n\tPrefixlen uint8\n\tFlags     uint8\n\tScope     uint8\n\tIndex     uint32\n}\n\ntype RtMsg struct {\n\tFamily   uint8\n\tDst_len  uint8\n\tSrc_len  uint8\n\tTos      uint8\n\tTable    uint8\n\tProtocol uint8\n\tScope    uint8\n\tType     uint8\n\tFlags    uint32\n}\n\ntype RtNexthop struct {\n\tLen     uint16\n\tFlags   uint8\n\tHops    uint8\n\tIfindex int32\n}\n\ntype NdUseroptmsg struct {\n\tFamily    uint8\n\tPad1      uint8\n\tOpts_len  uint16\n\tIfindex   int32\n\tIcmp_type uint8\n\tIcmp_code uint8\n\tPad2      uint16\n\tPad3      uint32\n}\n\ntype NdMsg struct {\n\tFamily  uint8\n\tPad1    uint8\n\tPad2    uint16\n\tIfindex int32\n\tState   uint16\n\tFlags   uint8\n\tType    uint8\n}\n\nconst (\n\tSizeofSockFilter = 0x8\n\tSizeofSockFprog  = 0x8\n)\n\ntype SockFilter struct {\n\tCode uint16\n\tJt   uint8\n\tJf   uint8\n\tK    uint32\n}\n\ntype SockFprog struct {\n\tLen    uint16\n\tFilter *SockFilter\n}\n\ntype InotifyEvent struct {\n\tWd     int32\n\tMask   uint32\n\tCookie uint32\n\tLen    uint32\n}\n\nconst SizeofInotifyEvent = 0x10\n\ntype PtraceRegs struct {\n\tEbx      int32\n\tEcx      int32\n\tEdx      int32\n\tEsi      int32\n\tEdi      int32\n\tEbp      int32\n\tEax      int32\n\tXds      int32\n\tXes      int32\n\tXfs      int32\n\tXgs      int32\n\tOrig_eax int32\n\tEip      int32\n\tXcs      int32\n\tEflags   int32\n\tEsp      int32\n\tXss      int32\n}\n\ntype FdSet struct {\n\tBits [32]int32\n}\n\ntype Sysinfo_t struct {\n\tUptime    int32\n\tLoads     [3]uint32\n\tTotalram  uint32\n\tFreeram   uint32\n\tSharedram uint32\n\tBufferram uint32\n\tTotalswap uint32\n\tFreeswap  uint32\n\tProcs     uint16\n\tPad       uint16\n\tTotalhigh uint32\n\tFreehigh  uint32\n\tUnit      uint32\n\t_         [8]int8\n}\n\ntype Utsname struct {\n\tSysname    [65]byte\n\tNodename   [65]byte\n\tRelease    [65]byte\n\tVersion    [65]byte\n\tMachine    [65]byte\n\tDomainname [65]byte\n}\n\ntype Ustat_t struct {\n\tTfree  int32\n\tTinode uint32\n\tFname  [6]int8\n\tFpack  [6]int8\n}\n\ntype EpollEvent struct {\n\tEvents uint32\n\tFd     int32\n\tPad    int32\n}\n\nconst (\n\tAT_EMPTY_PATH   = 0x1000\n\tAT_FDCWD        = -0x64\n\tAT_NO_AUTOMOUNT = 0x800\n\tAT_REMOVEDIR    = 0x200\n\n\tAT_STATX_SYNC_AS_STAT = 0x0\n\tAT_STATX_FORCE_SYNC   = 0x2000\n\tAT_STATX_DONT_SYNC    = 0x4000\n\n\tAT_SYMLINK_FOLLOW   = 0x400\n\tAT_SYMLINK_NOFOLLOW = 0x100\n\n\tAT_EACCESS = 0x200\n)\n\ntype PollFd struct {\n\tFd      int32\n\tEvents  int16\n\tRevents int16\n}\n\nconst (\n\tPOLLIN    = 0x1\n\tPOLLPRI   = 0x2\n\tPOLLOUT   = 0x4\n\tPOLLRDHUP = 0x2000\n\tPOLLERR   = 0x8\n\tPOLLHUP   = 0x10\n\tPOLLNVAL  = 0x20\n)\n\ntype Sigset_t struct {\n\tVal [32]uint32\n}\n\nconst _C__NSIG = 0x41\n\ntype SignalfdSiginfo struct {\n\tSigno     uint32\n\tErrno     int32\n\tCode      int32\n\tPid       uint32\n\tUid       uint32\n\tFd        int32\n\tTid       uint32\n\tBand      uint32\n\tOverrun   uint32\n\tTrapno    uint32\n\tStatus    int32\n\tInt       int32\n\tPtr       uint64\n\tUtime     uint64\n\tStime     uint64\n\tAddr      uint64\n\tAddr_lsb  uint16\n\t_         uint16\n\tSyscall   int32\n\tCall_addr uint64\n\tArch      uint32\n\t_         [28]uint8\n}\n\nconst PERF_IOC_FLAG_GROUP = 0x1\n\ntype Termios struct {\n\tIflag  uint32\n\tOflag  uint32\n\tCflag  uint32\n\tLflag  uint32\n\tLine   uint8\n\tCc     [19]uint8\n\tIspeed uint32\n\tOspeed uint32\n}\n\ntype Winsize struct {\n\tRow    uint16\n\tCol    uint16\n\tXpixel uint16\n\tYpixel uint16\n}\n\ntype Taskstats struct {\n\tVersion                   uint16\n\tAc_exitcode               uint32\n\tAc_flag                   uint8\n\tAc_nice                   uint8\n\t_                         [4]byte\n\tCpu_count                 uint64\n\tCpu_delay_total           uint64\n\tBlkio_count               uint64\n\tBlkio_delay_total         uint64\n\tSwapin_count              uint64\n\tSwapin_delay_total        uint64\n\tCpu_run_real_total        uint64\n\tCpu_run_virtual_total     uint64\n\tAc_comm                   [32]int8\n\tAc_sched                  uint8\n\tAc_pad                    [3]uint8\n\t_                         [4]byte\n\tAc_uid                    uint32\n\tAc_gid                    uint32\n\tAc_pid                    uint32\n\tAc_ppid                   uint32\n\tAc_btime                  uint32\n\t_                         [4]byte\n\tAc_etime                  uint64\n\tAc_utime                  uint64\n\tAc_stime                  uint64\n\tAc_minflt                 uint64\n\tAc_majflt                 uint64\n\tCoremem                   uint64\n\tVirtmem                   uint64\n\tHiwater_rss               uint64\n\tHiwater_vm                uint64\n\tRead_char                 uint64\n\tWrite_char                uint64\n\tRead_syscalls             uint64\n\tWrite_syscalls            uint64\n\tRead_bytes                uint64\n\tWrite_bytes               uint64\n\tCancelled_write_bytes     uint64\n\tNvcsw                     uint64\n\tNivcsw                    uint64\n\tAc_utimescaled            uint64\n\tAc_stimescaled            uint64\n\tCpu_scaled_run_real_total uint64\n\tFreepages_count           uint64\n\tFreepages_delay_total     uint64\n\tThrashing_count           uint64\n\tThrashing_delay_total     uint64\n}\n\nconst (\n\tTASKSTATS_CMD_UNSPEC                  = 0x0\n\tTASKSTATS_CMD_GET                     = 0x1\n\tTASKSTATS_CMD_NEW                     = 0x2\n\tTASKSTATS_TYPE_UNSPEC                 = 0x0\n\tTASKSTATS_TYPE_PID                    = 0x1\n\tTASKSTATS_TYPE_TGID                   = 0x2\n\tTASKSTATS_TYPE_STATS                  = 0x3\n\tTASKSTATS_TYPE_AGGR_PID               = 0x4\n\tTASKSTATS_TYPE_AGGR_TGID              = 0x5\n\tTASKSTATS_TYPE_NULL                   = 0x6\n\tTASKSTATS_CMD_ATTR_UNSPEC             = 0x0\n\tTASKSTATS_CMD_ATTR_PID                = 0x1\n\tTASKSTATS_CMD_ATTR_TGID               = 0x2\n\tTASKSTATS_CMD_ATTR_REGISTER_CPUMASK   = 0x3\n\tTASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4\n)\n\ntype CGroupStats struct {\n\tSleeping        uint64\n\tRunning         uint64\n\tStopped         uint64\n\tUninterruptible uint64\n\tIo_wait         uint64\n}\n\nconst (\n\tCGROUPSTATS_CMD_UNSPEC        = 0x3\n\tCGROUPSTATS_CMD_GET           = 0x4\n\tCGROUPSTATS_CMD_NEW           = 0x5\n\tCGROUPSTATS_TYPE_UNSPEC       = 0x0\n\tCGROUPSTATS_TYPE_CGROUP_STATS = 0x1\n\tCGROUPSTATS_CMD_ATTR_UNSPEC   = 0x0\n\tCGROUPSTATS_CMD_ATTR_FD       = 0x1\n)\n\ntype Genlmsghdr struct {\n\tCmd      uint8\n\tVersion  uint8\n\tReserved uint16\n}\n\nconst (\n\tCTRL_CMD_UNSPEC            = 0x0\n\tCTRL_CMD_NEWFAMILY         = 0x1\n\tCTRL_CMD_DELFAMILY         = 0x2\n\tCTRL_CMD_GETFAMILY         = 0x3\n\tCTRL_CMD_NEWOPS            = 0x4\n\tCTRL_CMD_DELOPS            = 0x5\n\tCTRL_CMD_GETOPS            = 0x6\n\tCTRL_CMD_NEWMCAST_GRP      = 0x7\n\tCTRL_CMD_DELMCAST_GRP      = 0x8\n\tCTRL_CMD_GETMCAST_GRP      = 0x9\n\tCTRL_ATTR_UNSPEC           = 0x0\n\tCTRL_ATTR_FAMILY_ID        = 0x1\n\tCTRL_ATTR_FAMILY_NAME      = 0x2\n\tCTRL_ATTR_VERSION          = 0x3\n\tCTRL_ATTR_HDRSIZE          = 0x4\n\tCTRL_ATTR_MAXATTR          = 0x5\n\tCTRL_ATTR_OPS              = 0x6\n\tCTRL_ATTR_MCAST_GROUPS     = 0x7\n\tCTRL_ATTR_OP_UNSPEC        = 0x0\n\tCTRL_ATTR_OP_ID            = 0x1\n\tCTRL_ATTR_OP_FLAGS         = 0x2\n\tCTRL_ATTR_MCAST_GRP_UNSPEC = 0x0\n\tCTRL_ATTR_MCAST_GRP_NAME   = 0x1\n\tCTRL_ATTR_MCAST_GRP_ID     = 0x2\n)\n\ntype cpuMask uint32\n\nconst (\n\t_CPU_SETSIZE = 0x400\n\t_NCPUBITS    = 0x20\n)\n\nconst (\n\tBDADDR_BREDR     = 0x0\n\tBDADDR_LE_PUBLIC = 0x1\n\tBDADDR_LE_RANDOM = 0x2\n)\n\ntype PerfEventAttr struct {\n\tType               uint32\n\tSize               uint32\n\tConfig             uint64\n\tSample             uint64\n\tSample_type        uint64\n\tRead_format        uint64\n\tBits               uint64\n\tWakeup             uint32\n\tBp_type            uint32\n\tExt1               uint64\n\tExt2               uint64\n\tBranch_sample_type uint64\n\tSample_regs_user   uint64\n\tSample_stack_user  uint32\n\tClockid            int32\n\tSample_regs_intr   uint64\n\tAux_watermark      uint32\n\tSample_max_stack   uint16\n\t_                  uint16\n}\n\ntype PerfEventMmapPage struct {\n\tVersion        uint32\n\tCompat_version uint32\n\tLock           uint32\n\tIndex          uint32\n\tOffset         int64\n\tTime_enabled   uint64\n\tTime_running   uint64\n\tCapabilities   uint64\n\tPmc_width      uint16\n\tTime_shift     uint16\n\tTime_mult      uint32\n\tTime_offset    uint64\n\tTime_zero      uint64\n\tSize           uint32\n\t_              [948]uint8\n\tData_head      uint64\n\tData_tail      uint64\n\tData_offset    uint64\n\tData_size      uint64\n\tAux_head       uint64\n\tAux_tail       uint64\n\tAux_offset     uint64\n\tAux_size       uint64\n}\n\nconst (\n\tPerfBitDisabled               uint64 = CBitFieldMaskBit0\n\tPerfBitInherit                       = CBitFieldMaskBit1\n\tPerfBitPinned                        = CBitFieldMaskBit2\n\tPerfBitExclusive                     = CBitFieldMaskBit3\n\tPerfBitExcludeUser                   = CBitFieldMaskBit4\n\tPerfBitExcludeKernel                 = CBitFieldMaskBit5\n\tPerfBitExcludeHv                     = CBitFieldMaskBit6\n\tPerfBitExcludeIdle                   = CBitFieldMaskBit7\n\tPerfBitMmap                          = CBitFieldMaskBit8\n\tPerfBitComm                          = CBitFieldMaskBit9\n\tPerfBitFreq                          = CBitFieldMaskBit10\n\tPerfBitInheritStat                   = CBitFieldMaskBit11\n\tPerfBitEnableOnExec                  = CBitFieldMaskBit12\n\tPerfBitTask                          = CBitFieldMaskBit13\n\tPerfBitWatermark                     = CBitFieldMaskBit14\n\tPerfBitPreciseIPBit1                 = CBitFieldMaskBit15\n\tPerfBitPreciseIPBit2                 = CBitFieldMaskBit16\n\tPerfBitMmapData                      = CBitFieldMaskBit17\n\tPerfBitSampleIDAll                   = CBitFieldMaskBit18\n\tPerfBitExcludeHost                   = CBitFieldMaskBit19\n\tPerfBitExcludeGuest                  = CBitFieldMaskBit20\n\tPerfBitExcludeCallchainKernel        = CBitFieldMaskBit21\n\tPerfBitExcludeCallchainUser          = CBitFieldMaskBit22\n\tPerfBitMmap2                         = CBitFieldMaskBit23\n\tPerfBitCommExec                      = CBitFieldMaskBit24\n\tPerfBitUseClockID                    = CBitFieldMaskBit25\n\tPerfBitContextSwitch                 = CBitFieldMaskBit26\n)\n\nconst (\n\tPERF_TYPE_HARDWARE   = 0x0\n\tPERF_TYPE_SOFTWARE   = 0x1\n\tPERF_TYPE_TRACEPOINT = 0x2\n\tPERF_TYPE_HW_CACHE   = 0x3\n\tPERF_TYPE_RAW        = 0x4\n\tPERF_TYPE_BREAKPOINT = 0x5\n\n\tPERF_COUNT_HW_CPU_CYCLES              = 0x0\n\tPERF_COUNT_HW_INSTRUCTIONS            = 0x1\n\tPERF_COUNT_HW_CACHE_REFERENCES        = 0x2\n\tPERF_COUNT_HW_CACHE_MISSES            = 0x3\n\tPERF_COUNT_HW_BRANCH_INSTRUCTIONS     = 0x4\n\tPERF_COUNT_HW_BRANCH_MISSES           = 0x5\n\tPERF_COUNT_HW_BUS_CYCLES              = 0x6\n\tPERF_COUNT_HW_STALLED_CYCLES_FRONTEND = 0x7\n\tPERF_COUNT_HW_STALLED_CYCLES_BACKEND  = 0x8\n\tPERF_COUNT_HW_REF_CPU_CYCLES          = 0x9\n\n\tPERF_COUNT_HW_CACHE_L1D  = 0x0\n\tPERF_COUNT_HW_CACHE_L1I  = 0x1\n\tPERF_COUNT_HW_CACHE_LL   = 0x2\n\tPERF_COUNT_HW_CACHE_DTLB = 0x3\n\tPERF_COUNT_HW_CACHE_ITLB = 0x4\n\tPERF_COUNT_HW_CACHE_BPU  = 0x5\n\tPERF_COUNT_HW_CACHE_NODE = 0x6\n\n\tPERF_COUNT_HW_CACHE_OP_READ     = 0x0\n\tPERF_COUNT_HW_CACHE_OP_WRITE    = 0x1\n\tPERF_COUNT_HW_CACHE_OP_PREFETCH = 0x2\n\n\tPERF_COUNT_HW_CACHE_RESULT_ACCESS = 0x0\n\tPERF_COUNT_HW_CACHE_RESULT_MISS   = 0x1\n\n\tPERF_COUNT_SW_CPU_CLOCK        = 0x0\n\tPERF_COUNT_SW_TASK_CLOCK       = 0x1\n\tPERF_COUNT_SW_PAGE_FAULTS      = 0x2\n\tPERF_COUNT_SW_CONTEXT_SWITCHES = 0x3\n\tPERF_COUNT_SW_CPU_MIGRATIONS   = 0x4\n\tPERF_COUNT_SW_PAGE_FAULTS_MIN  = 0x5\n\tPERF_COUNT_SW_PAGE_FAULTS_MAJ  = 0x6\n\tPERF_COUNT_SW_ALIGNMENT_FAULTS = 0x7\n\tPERF_COUNT_SW_EMULATION_FAULTS = 0x8\n\tPERF_COUNT_SW_DUMMY            = 0x9\n\tPERF_COUNT_SW_BPF_OUTPUT       = 0xa\n\n\tPERF_SAMPLE_IP           = 0x1\n\tPERF_SAMPLE_TID          = 0x2\n\tPERF_SAMPLE_TIME         = 0x4\n\tPERF_SAMPLE_ADDR         = 0x8\n\tPERF_SAMPLE_READ         = 0x10\n\tPERF_SAMPLE_CALLCHAIN    = 0x20\n\tPERF_SAMPLE_ID           = 0x40\n\tPERF_SAMPLE_CPU          = 0x80\n\tPERF_SAMPLE_PERIOD       = 0x100\n\tPERF_SAMPLE_STREAM_ID    = 0x200\n\tPERF_SAMPLE_RAW          = 0x400\n\tPERF_SAMPLE_BRANCH_STACK = 0x800\n\n\tPERF_SAMPLE_BRANCH_USER       = 0x1\n\tPERF_SAMPLE_BRANCH_KERNEL     = 0x2\n\tPERF_SAMPLE_BRANCH_HV         = 0x4\n\tPERF_SAMPLE_BRANCH_ANY        = 0x8\n\tPERF_SAMPLE_BRANCH_ANY_CALL   = 0x10\n\tPERF_SAMPLE_BRANCH_ANY_RETURN = 0x20\n\tPERF_SAMPLE_BRANCH_IND_CALL   = 0x40\n\tPERF_SAMPLE_BRANCH_ABORT_TX   = 0x80\n\tPERF_SAMPLE_BRANCH_IN_TX      = 0x100\n\tPERF_SAMPLE_BRANCH_NO_TX      = 0x200\n\tPERF_SAMPLE_BRANCH_COND       = 0x400\n\tPERF_SAMPLE_BRANCH_CALL_STACK = 0x800\n\tPERF_SAMPLE_BRANCH_IND_JUMP   = 0x1000\n\tPERF_SAMPLE_BRANCH_CALL       = 0x2000\n\tPERF_SAMPLE_BRANCH_NO_FLAGS   = 0x4000\n\tPERF_SAMPLE_BRANCH_NO_CYCLES  = 0x8000\n\tPERF_SAMPLE_BRANCH_TYPE_SAVE  = 0x10000\n\n\tPERF_FORMAT_TOTAL_TIME_ENABLED = 0x1\n\tPERF_FORMAT_TOTAL_TIME_RUNNING = 0x2\n\tPERF_FORMAT_ID                 = 0x4\n\tPERF_FORMAT_GROUP              = 0x8\n\n\tPERF_RECORD_MMAP            = 0x1\n\tPERF_RECORD_LOST            = 0x2\n\tPERF_RECORD_COMM            = 0x3\n\tPERF_RECORD_EXIT            = 0x4\n\tPERF_RECORD_THROTTLE        = 0x5\n\tPERF_RECORD_UNTHROTTLE      = 0x6\n\tPERF_RECORD_FORK            = 0x7\n\tPERF_RECORD_READ            = 0x8\n\tPERF_RECORD_SAMPLE          = 0x9\n\tPERF_RECORD_MMAP2           = 0xa\n\tPERF_RECORD_AUX             = 0xb\n\tPERF_RECORD_ITRACE_START    = 0xc\n\tPERF_RECORD_LOST_SAMPLES    = 0xd\n\tPERF_RECORD_SWITCH          = 0xe\n\tPERF_RECORD_SWITCH_CPU_WIDE = 0xf\n\tPERF_RECORD_NAMESPACES      = 0x10\n\n\tPERF_CONTEXT_HV     = -0x20\n\tPERF_CONTEXT_KERNEL = -0x80\n\tPERF_CONTEXT_USER   = -0x200\n\n\tPERF_CONTEXT_GUEST        = -0x800\n\tPERF_CONTEXT_GUEST_KERNEL = -0x880\n\tPERF_CONTEXT_GUEST_USER   = -0xa00\n\n\tPERF_FLAG_FD_NO_GROUP = 0x1\n\tPERF_FLAG_FD_OUTPUT   = 0x2\n\tPERF_FLAG_PID_CGROUP  = 0x4\n\tPERF_FLAG_FD_CLOEXEC  = 0x8\n)\n\nconst (\n\tCBitFieldMaskBit0  = 0x1\n\tCBitFieldMaskBit1  = 0x2\n\tCBitFieldMaskBit2  = 0x4\n\tCBitFieldMaskBit3  = 0x8\n\tCBitFieldMaskBit4  = 0x10\n\tCBitFieldMaskBit5  = 0x20\n\tCBitFieldMaskBit6  = 0x40\n\tCBitFieldMaskBit7  = 0x80\n\tCBitFieldMaskBit8  = 0x100\n\tCBitFieldMaskBit9  = 0x200\n\tCBitFieldMaskBit10 = 0x400\n\tCBitFieldMaskBit11 = 0x800\n\tCBitFieldMaskBit12 = 0x1000\n\tCBitFieldMaskBit13 = 0x2000\n\tCBitFieldMaskBit14 = 0x4000\n\tCBitFieldMaskBit15 = 0x8000\n\tCBitFieldMaskBit16 = 0x10000\n\tCBitFieldMaskBit17 = 0x20000\n\tCBitFieldMaskBit18 = 0x40000\n\tCBitFieldMaskBit19 = 0x80000\n\tCBitFieldMaskBit20 = 0x100000\n\tCBitFieldMaskBit21 = 0x200000\n\tCBitFieldMaskBit22 = 0x400000\n\tCBitFieldMaskBit23 = 0x800000\n\tCBitFieldMaskBit24 = 0x1000000\n\tCBitFieldMaskBit25 = 0x2000000\n\tCBitFieldMaskBit26 = 0x4000000\n\tCBitFieldMaskBit27 = 0x8000000\n\tCBitFieldMaskBit28 = 0x10000000\n\tCBitFieldMaskBit29 = 0x20000000\n\tCBitFieldMaskBit30 = 0x40000000\n\tCBitFieldMaskBit31 = 0x80000000\n\tCBitFieldMaskBit32 = 0x100000000\n\tCBitFieldMaskBit33 = 0x200000000\n\tCBitFieldMaskBit34 = 0x400000000\n\tCBitFieldMaskBit35 = 0x800000000\n\tCBitFieldMaskBit36 = 0x1000000000\n\tCBitFieldMaskBit37 = 0x2000000000\n\tCBitFieldMaskBit38 = 0x4000000000\n\tCBitFieldMaskBit39 = 0x8000000000\n\tCBitFieldMaskBit40 = 0x10000000000\n\tCBitFieldMaskBit41 = 0x20000000000\n\tCBitFieldMaskBit42 = 0x40000000000\n\tCBitFieldMaskBit43 = 0x80000000000\n\tCBitFieldMaskBit44 = 0x100000000000\n\tCBitFieldMaskBit45 = 0x200000000000\n\tCBitFieldMaskBit46 = 0x400000000000\n\tCBitFieldMaskBit47 = 0x800000000000\n\tCBitFieldMaskBit48 = 0x1000000000000\n\tCBitFieldMaskBit49 = 0x2000000000000\n\tCBitFieldMaskBit50 = 0x4000000000000\n\tCBitFieldMaskBit51 = 0x8000000000000\n\tCBitFieldMaskBit52 = 0x10000000000000\n\tCBitFieldMaskBit53 = 0x20000000000000\n\tCBitFieldMaskBit54 = 0x40000000000000\n\tCBitFieldMaskBit55 = 0x80000000000000\n\tCBitFieldMaskBit56 = 0x100000000000000\n\tCBitFieldMaskBit57 = 0x200000000000000\n\tCBitFieldMaskBit58 = 0x400000000000000\n\tCBitFieldMaskBit59 = 0x800000000000000\n\tCBitFieldMaskBit60 = 0x1000000000000000\n\tCBitFieldMaskBit61 = 0x2000000000000000\n\tCBitFieldMaskBit62 = 0x4000000000000000\n\tCBitFieldMaskBit63 = 0x8000000000000000\n)\n\ntype SockaddrStorage struct {\n\tFamily uint16\n\t_      [122]int8\n\t_      uint32\n}\n\ntype TCPMD5Sig struct {\n\tAddr      SockaddrStorage\n\tFlags     uint8\n\tPrefixlen uint8\n\tKeylen    uint16\n\t_         uint32\n\tKey       [80]uint8\n}\n\ntype HDDriveCmdHdr struct {\n\tCommand uint8\n\tNumber  uint8\n\tFeature uint8\n\tCount   uint8\n}\n\ntype HDGeometry struct {\n\tHeads     uint8\n\tSectors   uint8\n\tCylinders uint16\n\tStart     uint32\n}\n\ntype HDDriveID struct {\n\tConfig         uint16\n\tCyls           uint16\n\tReserved2      uint16\n\tHeads          uint16\n\tTrack_bytes    uint16\n\tSector_bytes   uint16\n\tSectors        uint16\n\tVendor0        uint16\n\tVendor1        uint16\n\tVendor2        uint16\n\tSerial_no      [20]uint8\n\tBuf_type       uint16\n\tBuf_size       uint16\n\tEcc_bytes      uint16\n\tFw_rev         [8]uint8\n\tModel          [40]uint8\n\tMax_multsect   uint8\n\tVendor3        uint8\n\tDword_io       uint16\n\tVendor4        uint8\n\tCapability     uint8\n\tReserved50     uint16\n\tVendor5        uint8\n\tTPIO           uint8\n\tVendor6        uint8\n\tTDMA           uint8\n\tField_valid    uint16\n\tCur_cyls       uint16\n\tCur_heads      uint16\n\tCur_sectors    uint16\n\tCur_capacity0  uint16\n\tCur_capacity1  uint16\n\tMultsect       uint8\n\tMultsect_valid uint8\n\tLba_capacity   uint32\n\tDma_1word      uint16\n\tDma_mword      uint16\n\tEide_pio_modes uint16\n\tEide_dma_min   uint16\n\tEide_dma_time  uint16\n\tEide_pio       uint16\n\tEide_pio_iordy uint16\n\tWords69_70     [2]uint16\n\tWords71_74     [4]uint16\n\tQueue_depth    uint16\n\tWords76_79     [4]uint16\n\tMajor_rev_num  uint16\n\tMinor_rev_num  uint16\n\tCommand_set_1  uint16\n\tCommand_set_2  uint16\n\tCfsse          uint16\n\tCfs_enable_1   uint16\n\tCfs_enable_2   uint16\n\tCsf_default    uint16\n\tDma_ultra      uint16\n\tTrseuc         uint16\n\tTrsEuc         uint16\n\tCurAPMvalues   uint16\n\tMprc           uint16\n\tHw_config      uint16\n\tAcoustic       uint16\n\tMsrqs          uint16\n\tSxfert         uint16\n\tSal            uint16\n\tSpg            uint32\n\tLba_capacity_2 uint64\n\tWords104_125   [22]uint16\n\tLast_lun       uint16\n\tWord127        uint16\n\tDlf            uint16\n\tCsfo           uint16\n\tWords130_155   [26]uint16\n\tWord156        uint16\n\tWords157_159   [3]uint16\n\tCfa_power      uint16\n\tWords161_175   [15]uint16\n\tWords176_205   [30]uint16\n\tWords206_254   [49]uint16\n\tIntegrity_word uint16\n}\n\ntype Statfs_t struct {\n\tType    int32\n\tBsize   int32\n\tBlocks  uint64\n\tBfree   uint64\n\tBavail  uint64\n\tFiles   uint64\n\tFfree   uint64\n\tFsid    Fsid\n\tNamelen int32\n\tFrsize  int32\n\tFlags   int32\n\tSpare   [4]int32\n}\n\nconst (\n\tST_MANDLOCK    = 0x40\n\tST_NOATIME     = 0x400\n\tST_NODEV       = 0x4\n\tST_NODIRATIME  = 0x800\n\tST_NOEXEC      = 0x8\n\tST_NOSUID      = 0x2\n\tST_RDONLY      = 0x1\n\tST_RELATIME    = 0x1000\n\tST_SYNCHRONOUS = 0x10\n)\n\ntype TpacketHdr struct {\n\tStatus  uint32\n\tLen     uint32\n\tSnaplen uint32\n\tMac     uint16\n\tNet     uint16\n\tSec     uint32\n\tUsec    uint32\n}\n\ntype Tpacket2Hdr struct {\n\tStatus    uint32\n\tLen       uint32\n\tSnaplen   uint32\n\tMac       uint16\n\tNet       uint16\n\tSec       uint32\n\tNsec      uint32\n\tVlan_tci  uint16\n\tVlan_tpid uint16\n\t_         [4]uint8\n}\n\ntype Tpacket3Hdr struct {\n\tNext_offset uint32\n\tSec         uint32\n\tNsec        uint32\n\tSnaplen     uint32\n\tLen         uint32\n\tStatus      uint32\n\tMac         uint16\n\tNet         uint16\n\tHv1         TpacketHdrVariant1\n\t_           [8]uint8\n}\n\ntype TpacketHdrVariant1 struct {\n\tRxhash    uint32\n\tVlan_tci  uint32\n\tVlan_tpid uint16\n\t_         uint16\n}\n\ntype TpacketBlockDesc struct {\n\tVersion uint32\n\tTo_priv uint32\n\tHdr     [40]byte\n}\n\ntype TpacketBDTS struct {\n\tSec  uint32\n\tUsec uint32\n}\n\ntype TpacketHdrV1 struct {\n\tBlock_status        uint32\n\tNum_pkts            uint32\n\tOffset_to_first_pkt uint32\n\tBlk_len             uint32\n\tSeq_num             uint64\n\tTs_first_pkt        TpacketBDTS\n\tTs_last_pkt         TpacketBDTS\n}\n\ntype TpacketReq struct {\n\tBlock_size uint32\n\tBlock_nr   uint32\n\tFrame_size uint32\n\tFrame_nr   uint32\n}\n\ntype TpacketReq3 struct {\n\tBlock_size       uint32\n\tBlock_nr         uint32\n\tFrame_size       uint32\n\tFrame_nr         uint32\n\tRetire_blk_tov   uint32\n\tSizeof_priv      uint32\n\tFeature_req_word uint32\n}\n\ntype TpacketStats struct {\n\tPackets uint32\n\tDrops   uint32\n}\n\ntype TpacketStatsV3 struct {\n\tPackets      uint32\n\tDrops        uint32\n\tFreeze_q_cnt uint32\n}\n\ntype TpacketAuxdata struct {\n\tStatus    uint32\n\tLen       uint32\n\tSnaplen   uint32\n\tMac       uint16\n\tNet       uint16\n\tVlan_tci  uint16\n\tVlan_tpid uint16\n}\n\nconst (\n\tTPACKET_V1 = 0x0\n\tTPACKET_V2 = 0x1\n\tTPACKET_V3 = 0x2\n)\n\nconst (\n\tSizeofTpacketHdr  = 0x18\n\tSizeofTpacket2Hdr = 0x20\n\tSizeofTpacket3Hdr = 0x30\n\n\tSizeofTpacketStats   = 0x8\n\tSizeofTpacketStatsV3 = 0xc\n)\n\nconst (\n\tNF_INET_PRE_ROUTING  = 0x0\n\tNF_INET_LOCAL_IN     = 0x1\n\tNF_INET_FORWARD      = 0x2\n\tNF_INET_LOCAL_OUT    = 0x3\n\tNF_INET_POST_ROUTING = 0x4\n\tNF_INET_NUMHOOKS     = 0x5\n)\n\nconst (\n\tNF_NETDEV_INGRESS  = 0x0\n\tNF_NETDEV_NUMHOOKS = 0x1\n)\n\nconst (\n\tNFPROTO_UNSPEC   = 0x0\n\tNFPROTO_INET     = 0x1\n\tNFPROTO_IPV4     = 0x2\n\tNFPROTO_ARP      = 0x3\n\tNFPROTO_NETDEV   = 0x5\n\tNFPROTO_BRIDGE   = 0x7\n\tNFPROTO_IPV6     = 0xa\n\tNFPROTO_DECNET   = 0xc\n\tNFPROTO_NUMPROTO = 0xd\n)\n\ntype Nfgenmsg struct {\n\tNfgen_family uint8\n\tVersion      uint8\n\tRes_id       uint16\n}\n\nconst (\n\tNFNL_BATCH_UNSPEC = 0x0\n\tNFNL_BATCH_GENID  = 0x1\n)\n\nconst (\n\tNFT_REG_VERDICT                   = 0x0\n\tNFT_REG_1                         = 0x1\n\tNFT_REG_2                         = 0x2\n\tNFT_REG_3                         = 0x3\n\tNFT_REG_4                         = 0x4\n\tNFT_REG32_00                      = 0x8\n\tNFT_REG32_01                      = 0x9\n\tNFT_REG32_02                      = 0xa\n\tNFT_REG32_03                      = 0xb\n\tNFT_REG32_04                      = 0xc\n\tNFT_REG32_05                      = 0xd\n\tNFT_REG32_06                      = 0xe\n\tNFT_REG32_07                      = 0xf\n\tNFT_REG32_08                      = 0x10\n\tNFT_REG32_09                      = 0x11\n\tNFT_REG32_10                      = 0x12\n\tNFT_REG32_11                      = 0x13\n\tNFT_REG32_12                      = 0x14\n\tNFT_REG32_13                      = 0x15\n\tNFT_REG32_14                      = 0x16\n\tNFT_REG32_15                      = 0x17\n\tNFT_CONTINUE                      = -0x1\n\tNFT_BREAK                         = -0x2\n\tNFT_JUMP                          = -0x3\n\tNFT_GOTO                          = -0x4\n\tNFT_RETURN                        = -0x5\n\tNFT_MSG_NEWTABLE                  = 0x0\n\tNFT_MSG_GETTABLE                  = 0x1\n\tNFT_MSG_DELTABLE                  = 0x2\n\tNFT_MSG_NEWCHAIN                  = 0x3\n\tNFT_MSG_GETCHAIN                  = 0x4\n\tNFT_MSG_DELCHAIN                  = 0x5\n\tNFT_MSG_NEWRULE                   = 0x6\n\tNFT_MSG_GETRULE                   = 0x7\n\tNFT_MSG_DELRULE                   = 0x8\n\tNFT_MSG_NEWSET                    = 0x9\n\tNFT_MSG_GETSET                    = 0xa\n\tNFT_MSG_DELSET                    = 0xb\n\tNFT_MSG_NEWSETELEM                = 0xc\n\tNFT_MSG_GETSETELEM                = 0xd\n\tNFT_MSG_DELSETELEM                = 0xe\n\tNFT_MSG_NEWGEN                    = 0xf\n\tNFT_MSG_GETGEN                    = 0x10\n\tNFT_MSG_TRACE                     = 0x11\n\tNFT_MSG_NEWOBJ                    = 0x12\n\tNFT_MSG_GETOBJ                    = 0x13\n\tNFT_MSG_DELOBJ                    = 0x14\n\tNFT_MSG_GETOBJ_RESET              = 0x15\n\tNFT_MSG_MAX                       = 0x19\n\tNFTA_LIST_UNPEC                   = 0x0\n\tNFTA_LIST_ELEM                    = 0x1\n\tNFTA_HOOK_UNSPEC                  = 0x0\n\tNFTA_HOOK_HOOKNUM                 = 0x1\n\tNFTA_HOOK_PRIORITY                = 0x2\n\tNFTA_HOOK_DEV                     = 0x3\n\tNFT_TABLE_F_DORMANT               = 0x1\n\tNFTA_TABLE_UNSPEC                 = 0x0\n\tNFTA_TABLE_NAME                   = 0x1\n\tNFTA_TABLE_FLAGS                  = 0x2\n\tNFTA_TABLE_USE                    = 0x3\n\tNFTA_CHAIN_UNSPEC                 = 0x0\n\tNFTA_CHAIN_TABLE                  = 0x1\n\tNFTA_CHAIN_HANDLE                 = 0x2\n\tNFTA_CHAIN_NAME                   = 0x3\n\tNFTA_CHAIN_HOOK                   = 0x4\n\tNFTA_CHAIN_POLICY                 = 0x5\n\tNFTA_CHAIN_USE                    = 0x6\n\tNFTA_CHAIN_TYPE                   = 0x7\n\tNFTA_CHAIN_COUNTERS               = 0x8\n\tNFTA_CHAIN_PAD                    = 0x9\n\tNFTA_RULE_UNSPEC                  = 0x0\n\tNFTA_RULE_TABLE                   = 0x1\n\tNFTA_RULE_CHAIN                   = 0x2\n\tNFTA_RULE_HANDLE                  = 0x3\n\tNFTA_RULE_EXPRESSIONS             = 0x4\n\tNFTA_RULE_COMPAT                  = 0x5\n\tNFTA_RULE_POSITION                = 0x6\n\tNFTA_RULE_USERDATA                = 0x7\n\tNFTA_RULE_PAD                     = 0x8\n\tNFTA_RULE_ID                      = 0x9\n\tNFT_RULE_COMPAT_F_INV             = 0x2\n\tNFT_RULE_COMPAT_F_MASK            = 0x2\n\tNFTA_RULE_COMPAT_UNSPEC           = 0x0\n\tNFTA_RULE_COMPAT_PROTO            = 0x1\n\tNFTA_RULE_COMPAT_FLAGS            = 0x2\n\tNFT_SET_ANONYMOUS                 = 0x1\n\tNFT_SET_CONSTANT                  = 0x2\n\tNFT_SET_INTERVAL                  = 0x4\n\tNFT_SET_MAP                       = 0x8\n\tNFT_SET_TIMEOUT                   = 0x10\n\tNFT_SET_EVAL                      = 0x20\n\tNFT_SET_OBJECT                    = 0x40\n\tNFT_SET_POL_PERFORMANCE           = 0x0\n\tNFT_SET_POL_MEMORY                = 0x1\n\tNFTA_SET_DESC_UNSPEC              = 0x0\n\tNFTA_SET_DESC_SIZE                = 0x1\n\tNFTA_SET_UNSPEC                   = 0x0\n\tNFTA_SET_TABLE                    = 0x1\n\tNFTA_SET_NAME                     = 0x2\n\tNFTA_SET_FLAGS                    = 0x3\n\tNFTA_SET_KEY_TYPE                 = 0x4\n\tNFTA_SET_KEY_LEN                  = 0x5\n\tNFTA_SET_DATA_TYPE                = 0x6\n\tNFTA_SET_DATA_LEN                 = 0x7\n\tNFTA_SET_POLICY                   = 0x8\n\tNFTA_SET_DESC                     = 0x9\n\tNFTA_SET_ID                       = 0xa\n\tNFTA_SET_TIMEOUT                  = 0xb\n\tNFTA_SET_GC_INTERVAL              = 0xc\n\tNFTA_SET_USERDATA                 = 0xd\n\tNFTA_SET_PAD                      = 0xe\n\tNFTA_SET_OBJ_TYPE                 = 0xf\n\tNFT_SET_ELEM_INTERVAL_END         = 0x1\n\tNFTA_SET_ELEM_UNSPEC              = 0x0\n\tNFTA_SET_ELEM_KEY                 = 0x1\n\tNFTA_SET_ELEM_DATA                = 0x2\n\tNFTA_SET_ELEM_FLAGS               = 0x3\n\tNFTA_SET_ELEM_TIMEOUT             = 0x4\n\tNFTA_SET_ELEM_EXPIRATION          = 0x5\n\tNFTA_SET_ELEM_USERDATA            = 0x6\n\tNFTA_SET_ELEM_EXPR                = 0x7\n\tNFTA_SET_ELEM_PAD                 = 0x8\n\tNFTA_SET_ELEM_OBJREF              = 0x9\n\tNFTA_SET_ELEM_LIST_UNSPEC         = 0x0\n\tNFTA_SET_ELEM_LIST_TABLE          = 0x1\n\tNFTA_SET_ELEM_LIST_SET            = 0x2\n\tNFTA_SET_ELEM_LIST_ELEMENTS       = 0x3\n\tNFTA_SET_ELEM_LIST_SET_ID         = 0x4\n\tNFT_DATA_VALUE                    = 0x0\n\tNFT_DATA_VERDICT                  = 0xffffff00\n\tNFTA_DATA_UNSPEC                  = 0x0\n\tNFTA_DATA_VALUE                   = 0x1\n\tNFTA_DATA_VERDICT                 = 0x2\n\tNFTA_VERDICT_UNSPEC               = 0x0\n\tNFTA_VERDICT_CODE                 = 0x1\n\tNFTA_VERDICT_CHAIN                = 0x2\n\tNFTA_EXPR_UNSPEC                  = 0x0\n\tNFTA_EXPR_NAME                    = 0x1\n\tNFTA_EXPR_DATA                    = 0x2\n\tNFTA_IMMEDIATE_UNSPEC             = 0x0\n\tNFTA_IMMEDIATE_DREG               = 0x1\n\tNFTA_IMMEDIATE_DATA               = 0x2\n\tNFTA_BITWISE_UNSPEC               = 0x0\n\tNFTA_BITWISE_SREG                 = 0x1\n\tNFTA_BITWISE_DREG                 = 0x2\n\tNFTA_BITWISE_LEN                  = 0x3\n\tNFTA_BITWISE_MASK                 = 0x4\n\tNFTA_BITWISE_XOR                  = 0x5\n\tNFT_BYTEORDER_NTOH                = 0x0\n\tNFT_BYTEORDER_HTON                = 0x1\n\tNFTA_BYTEORDER_UNSPEC             = 0x0\n\tNFTA_BYTEORDER_SREG               = 0x1\n\tNFTA_BYTEORDER_DREG               = 0x2\n\tNFTA_BYTEORDER_OP                 = 0x3\n\tNFTA_BYTEORDER_LEN                = 0x4\n\tNFTA_BYTEORDER_SIZE               = 0x5\n\tNFT_CMP_EQ                        = 0x0\n\tNFT_CMP_NEQ                       = 0x1\n\tNFT_CMP_LT                        = 0x2\n\tNFT_CMP_LTE                       = 0x3\n\tNFT_CMP_GT                        = 0x4\n\tNFT_CMP_GTE                       = 0x5\n\tNFTA_CMP_UNSPEC                   = 0x0\n\tNFTA_CMP_SREG                     = 0x1\n\tNFTA_CMP_OP                       = 0x2\n\tNFTA_CMP_DATA                     = 0x3\n\tNFT_RANGE_EQ                      = 0x0\n\tNFT_RANGE_NEQ                     = 0x1\n\tNFTA_RANGE_UNSPEC                 = 0x0\n\tNFTA_RANGE_SREG                   = 0x1\n\tNFTA_RANGE_OP                     = 0x2\n\tNFTA_RANGE_FROM_DATA              = 0x3\n\tNFTA_RANGE_TO_DATA                = 0x4\n\tNFT_LOOKUP_F_INV                  = 0x1\n\tNFTA_LOOKUP_UNSPEC                = 0x0\n\tNFTA_LOOKUP_SET                   = 0x1\n\tNFTA_LOOKUP_SREG                  = 0x2\n\tNFTA_LOOKUP_DREG                  = 0x3\n\tNFTA_LOOKUP_SET_ID                = 0x4\n\tNFTA_LOOKUP_FLAGS                 = 0x5\n\tNFT_DYNSET_OP_ADD                 = 0x0\n\tNFT_DYNSET_OP_UPDATE              = 0x1\n\tNFT_DYNSET_F_INV                  = 0x1\n\tNFTA_DYNSET_UNSPEC                = 0x0\n\tNFTA_DYNSET_SET_NAME              = 0x1\n\tNFTA_DYNSET_SET_ID                = 0x2\n\tNFTA_DYNSET_OP                    = 0x3\n\tNFTA_DYNSET_SREG_KEY              = 0x4\n\tNFTA_DYNSET_SREG_DATA             = 0x5\n\tNFTA_DYNSET_TIMEOUT               = 0x6\n\tNFTA_DYNSET_EXPR                  = 0x7\n\tNFTA_DYNSET_PAD                   = 0x8\n\tNFTA_DYNSET_FLAGS                 = 0x9\n\tNFT_PAYLOAD_LL_HEADER             = 0x0\n\tNFT_PAYLOAD_NETWORK_HEADER        = 0x1\n\tNFT_PAYLOAD_TRANSPORT_HEADER      = 0x2\n\tNFT_PAYLOAD_CSUM_NONE             = 0x0\n\tNFT_PAYLOAD_CSUM_INET             = 0x1\n\tNFT_PAYLOAD_L4CSUM_PSEUDOHDR      = 0x1\n\tNFTA_PAYLOAD_UNSPEC               = 0x0\n\tNFTA_PAYLOAD_DREG                 = 0x1\n\tNFTA_PAYLOAD_BASE                 = 0x2\n\tNFTA_PAYLOAD_OFFSET               = 0x3\n\tNFTA_PAYLOAD_LEN                  = 0x4\n\tNFTA_PAYLOAD_SREG                 = 0x5\n\tNFTA_PAYLOAD_CSUM_TYPE            = 0x6\n\tNFTA_PAYLOAD_CSUM_OFFSET          = 0x7\n\tNFTA_PAYLOAD_CSUM_FLAGS           = 0x8\n\tNFT_EXTHDR_F_PRESENT              = 0x1\n\tNFT_EXTHDR_OP_IPV6                = 0x0\n\tNFT_EXTHDR_OP_TCPOPT              = 0x1\n\tNFTA_EXTHDR_UNSPEC                = 0x0\n\tNFTA_EXTHDR_DREG                  = 0x1\n\tNFTA_EXTHDR_TYPE                  = 0x2\n\tNFTA_EXTHDR_OFFSET                = 0x3\n\tNFTA_EXTHDR_LEN                   = 0x4\n\tNFTA_EXTHDR_FLAGS                 = 0x5\n\tNFTA_EXTHDR_OP                    = 0x6\n\tNFTA_EXTHDR_SREG                  = 0x7\n\tNFT_META_LEN                      = 0x0\n\tNFT_META_PROTOCOL                 = 0x1\n\tNFT_META_PRIORITY                 = 0x2\n\tNFT_META_MARK                     = 0x3\n\tNFT_META_IIF                      = 0x4\n\tNFT_META_OIF                      = 0x5\n\tNFT_META_IIFNAME                  = 0x6\n\tNFT_META_OIFNAME                  = 0x7\n\tNFT_META_IIFTYPE                  = 0x8\n\tNFT_META_OIFTYPE                  = 0x9\n\tNFT_META_SKUID                    = 0xa\n\tNFT_META_SKGID                    = 0xb\n\tNFT_META_NFTRACE                  = 0xc\n\tNFT_META_RTCLASSID                = 0xd\n\tNFT_META_SECMARK                  = 0xe\n\tNFT_META_NFPROTO                  = 0xf\n\tNFT_META_L4PROTO                  = 0x10\n\tNFT_META_BRI_IIFNAME              = 0x11\n\tNFT_META_BRI_OIFNAME              = 0x12\n\tNFT_META_PKTTYPE                  = 0x13\n\tNFT_META_CPU                      = 0x14\n\tNFT_META_IIFGROUP                 = 0x15\n\tNFT_META_OIFGROUP                 = 0x16\n\tNFT_META_CGROUP                   = 0x17\n\tNFT_META_PRANDOM                  = 0x18\n\tNFT_RT_CLASSID                    = 0x0\n\tNFT_RT_NEXTHOP4                   = 0x1\n\tNFT_RT_NEXTHOP6                   = 0x2\n\tNFT_RT_TCPMSS                     = 0x3\n\tNFT_HASH_JENKINS                  = 0x0\n\tNFT_HASH_SYM                      = 0x1\n\tNFTA_HASH_UNSPEC                  = 0x0\n\tNFTA_HASH_SREG                    = 0x1\n\tNFTA_HASH_DREG                    = 0x2\n\tNFTA_HASH_LEN                     = 0x3\n\tNFTA_HASH_MODULUS                 = 0x4\n\tNFTA_HASH_SEED                    = 0x5\n\tNFTA_HASH_OFFSET                  = 0x6\n\tNFTA_HASH_TYPE                    = 0x7\n\tNFTA_META_UNSPEC                  = 0x0\n\tNFTA_META_DREG                    = 0x1\n\tNFTA_META_KEY                     = 0x2\n\tNFTA_META_SREG                    = 0x3\n\tNFTA_RT_UNSPEC                    = 0x0\n\tNFTA_RT_DREG                      = 0x1\n\tNFTA_RT_KEY                       = 0x2\n\tNFT_CT_STATE                      = 0x0\n\tNFT_CT_DIRECTION                  = 0x1\n\tNFT_CT_STATUS                     = 0x2\n\tNFT_CT_MARK                       = 0x3\n\tNFT_CT_SECMARK                    = 0x4\n\tNFT_CT_EXPIRATION                 = 0x5\n\tNFT_CT_HELPER                     = 0x6\n\tNFT_CT_L3PROTOCOL                 = 0x7\n\tNFT_CT_SRC                        = 0x8\n\tNFT_CT_DST                        = 0x9\n\tNFT_CT_PROTOCOL                   = 0xa\n\tNFT_CT_PROTO_SRC                  = 0xb\n\tNFT_CT_PROTO_DST                  = 0xc\n\tNFT_CT_LABELS                     = 0xd\n\tNFT_CT_PKTS                       = 0xe\n\tNFT_CT_BYTES                      = 0xf\n\tNFT_CT_AVGPKT                     = 0x10\n\tNFT_CT_ZONE                       = 0x11\n\tNFT_CT_EVENTMASK                  = 0x12\n\tNFTA_CT_UNSPEC                    = 0x0\n\tNFTA_CT_DREG                      = 0x1\n\tNFTA_CT_KEY                       = 0x2\n\tNFTA_CT_DIRECTION                 = 0x3\n\tNFTA_CT_SREG                      = 0x4\n\tNFT_LIMIT_PKTS                    = 0x0\n\tNFT_LIMIT_PKT_BYTES               = 0x1\n\tNFT_LIMIT_F_INV                   = 0x1\n\tNFTA_LIMIT_UNSPEC                 = 0x0\n\tNFTA_LIMIT_RATE                   = 0x1\n\tNFTA_LIMIT_UNIT                   = 0x2\n\tNFTA_LIMIT_BURST                  = 0x3\n\tNFTA_LIMIT_TYPE                   = 0x4\n\tNFTA_LIMIT_FLAGS                  = 0x5\n\tNFTA_LIMIT_PAD                    = 0x6\n\tNFTA_COUNTER_UNSPEC               = 0x0\n\tNFTA_COUNTER_BYTES                = 0x1\n\tNFTA_COUNTER_PACKETS              = 0x2\n\tNFTA_COUNTER_PAD                  = 0x3\n\tNFTA_LOG_UNSPEC                   = 0x0\n\tNFTA_LOG_GROUP                    = 0x1\n\tNFTA_LOG_PREFIX                   = 0x2\n\tNFTA_LOG_SNAPLEN                  = 0x3\n\tNFTA_LOG_QTHRESHOLD               = 0x4\n\tNFTA_LOG_LEVEL                    = 0x5\n\tNFTA_LOG_FLAGS                    = 0x6\n\tNFTA_QUEUE_UNSPEC                 = 0x0\n\tNFTA_QUEUE_NUM                    = 0x1\n\tNFTA_QUEUE_TOTAL                  = 0x2\n\tNFTA_QUEUE_FLAGS                  = 0x3\n\tNFTA_QUEUE_SREG_QNUM              = 0x4\n\tNFT_QUOTA_F_INV                   = 0x1\n\tNFT_QUOTA_F_DEPLETED              = 0x2\n\tNFTA_QUOTA_UNSPEC                 = 0x0\n\tNFTA_QUOTA_BYTES                  = 0x1\n\tNFTA_QUOTA_FLAGS                  = 0x2\n\tNFTA_QUOTA_PAD                    = 0x3\n\tNFTA_QUOTA_CONSUMED               = 0x4\n\tNFT_REJECT_ICMP_UNREACH           = 0x0\n\tNFT_REJECT_TCP_RST                = 0x1\n\tNFT_REJECT_ICMPX_UNREACH          = 0x2\n\tNFT_REJECT_ICMPX_NO_ROUTE         = 0x0\n\tNFT_REJECT_ICMPX_PORT_UNREACH     = 0x1\n\tNFT_REJECT_ICMPX_HOST_UNREACH     = 0x2\n\tNFT_REJECT_ICMPX_ADMIN_PROHIBITED = 0x3\n\tNFTA_REJECT_UNSPEC                = 0x0\n\tNFTA_REJECT_TYPE                  = 0x1\n\tNFTA_REJECT_ICMP_CODE             = 0x2\n\tNFT_NAT_SNAT                      = 0x0\n\tNFT_NAT_DNAT                      = 0x1\n\tNFTA_NAT_UNSPEC                   = 0x0\n\tNFTA_NAT_TYPE                     = 0x1\n\tNFTA_NAT_FAMILY                   = 0x2\n\tNFTA_NAT_REG_ADDR_MIN             = 0x3\n\tNFTA_NAT_REG_ADDR_MAX             = 0x4\n\tNFTA_NAT_REG_PROTO_MIN            = 0x5\n\tNFTA_NAT_REG_PROTO_MAX            = 0x6\n\tNFTA_NAT_FLAGS                    = 0x7\n\tNFTA_MASQ_UNSPEC                  = 0x0\n\tNFTA_MASQ_FLAGS                   = 0x1\n\tNFTA_MASQ_REG_PROTO_MIN           = 0x2\n\tNFTA_MASQ_REG_PROTO_MAX           = 0x3\n\tNFTA_REDIR_UNSPEC                 = 0x0\n\tNFTA_REDIR_REG_PROTO_MIN          = 0x1\n\tNFTA_REDIR_REG_PROTO_MAX          = 0x2\n\tNFTA_REDIR_FLAGS                  = 0x3\n\tNFTA_DUP_UNSPEC                   = 0x0\n\tNFTA_DUP_SREG_ADDR                = 0x1\n\tNFTA_DUP_SREG_DEV                 = 0x2\n\tNFTA_FWD_UNSPEC                   = 0x0\n\tNFTA_FWD_SREG_DEV                 = 0x1\n\tNFTA_OBJREF_UNSPEC                = 0x0\n\tNFTA_OBJREF_IMM_TYPE              = 0x1\n\tNFTA_OBJREF_IMM_NAME              = 0x2\n\tNFTA_OBJREF_SET_SREG              = 0x3\n\tNFTA_OBJREF_SET_NAME              = 0x4\n\tNFTA_OBJREF_SET_ID                = 0x5\n\tNFTA_GEN_UNSPEC                   = 0x0\n\tNFTA_GEN_ID                       = 0x1\n\tNFTA_GEN_PROC_PID                 = 0x2\n\tNFTA_GEN_PROC_NAME                = 0x3\n\tNFTA_FIB_UNSPEC                   = 0x0\n\tNFTA_FIB_DREG                     = 0x1\n\tNFTA_FIB_RESULT                   = 0x2\n\tNFTA_FIB_FLAGS                    = 0x3\n\tNFT_FIB_RESULT_UNSPEC             = 0x0\n\tNFT_FIB_RESULT_OIF                = 0x1\n\tNFT_FIB_RESULT_OIFNAME            = 0x2\n\tNFT_FIB_RESULT_ADDRTYPE           = 0x3\n\tNFTA_FIB_F_SADDR                  = 0x1\n\tNFTA_FIB_F_DADDR                  = 0x2\n\tNFTA_FIB_F_MARK                   = 0x4\n\tNFTA_FIB_F_IIF                    = 0x8\n\tNFTA_FIB_F_OIF                    = 0x10\n\tNFTA_FIB_F_PRESENT                = 0x20\n\tNFTA_CT_HELPER_UNSPEC             = 0x0\n\tNFTA_CT_HELPER_NAME               = 0x1\n\tNFTA_CT_HELPER_L3PROTO            = 0x2\n\tNFTA_CT_HELPER_L4PROTO            = 0x3\n\tNFTA_OBJ_UNSPEC                   = 0x0\n\tNFTA_OBJ_TABLE                    = 0x1\n\tNFTA_OBJ_NAME                     = 0x2\n\tNFTA_OBJ_TYPE                     = 0x3\n\tNFTA_OBJ_DATA                     = 0x4\n\tNFTA_OBJ_USE                      = 0x5\n\tNFTA_TRACE_UNSPEC                 = 0x0\n\tNFTA_TRACE_TABLE                  = 0x1\n\tNFTA_TRACE_CHAIN                  = 0x2\n\tNFTA_TRACE_RULE_HANDLE            = 0x3\n\tNFTA_TRACE_TYPE                   = 0x4\n\tNFTA_TRACE_VERDICT                = 0x5\n\tNFTA_TRACE_ID                     = 0x6\n\tNFTA_TRACE_LL_HEADER              = 0x7\n\tNFTA_TRACE_NETWORK_HEADER         = 0x8\n\tNFTA_TRACE_TRANSPORT_HEADER       = 0x9\n\tNFTA_TRACE_IIF                    = 0xa\n\tNFTA_TRACE_IIFTYPE                = 0xb\n\tNFTA_TRACE_OIF                    = 0xc\n\tNFTA_TRACE_OIFTYPE                = 0xd\n\tNFTA_TRACE_MARK                   = 0xe\n\tNFTA_TRACE_NFPROTO                = 0xf\n\tNFTA_TRACE_POLICY                 = 0x10\n\tNFTA_TRACE_PAD                    = 0x11\n\tNFT_TRACETYPE_UNSPEC              = 0x0\n\tNFT_TRACETYPE_POLICY              = 0x1\n\tNFT_TRACETYPE_RETURN              = 0x2\n\tNFT_TRACETYPE_RULE                = 0x3\n\tNFTA_NG_UNSPEC                    = 0x0\n\tNFTA_NG_DREG                      = 0x1\n\tNFTA_NG_MODULUS                   = 0x2\n\tNFTA_NG_TYPE                      = 0x3\n\tNFTA_NG_OFFSET                    = 0x4\n\tNFT_NG_INCREMENTAL                = 0x0\n\tNFT_NG_RANDOM                     = 0x1\n)\n\ntype RTCTime struct {\n\tSec   int32\n\tMin   int32\n\tHour  int32\n\tMday  int32\n\tMon   int32\n\tYear  int32\n\tWday  int32\n\tYday  int32\n\tIsdst int32\n}\n\ntype RTCWkAlrm struct {\n\tEnabled uint8\n\tPending uint8\n\tTime    RTCTime\n}\n\ntype RTCPLLInfo struct {\n\tCtrl    int32\n\tValue   int32\n\tMax     int32\n\tMin     int32\n\tPosmult int32\n\tNegmult int32\n\tClock   int32\n}\n\ntype BlkpgIoctlArg struct {\n\tOp      int32\n\tFlags   int32\n\tDatalen int32\n\tData    *byte\n}\n\ntype BlkpgPartition struct {\n\tStart   int64\n\tLength  int64\n\tPno     int32\n\tDevname [64]uint8\n\tVolname [64]uint8\n}\n\nconst (\n\tBLKPG                  = 0x1269\n\tBLKPG_ADD_PARTITION    = 0x1\n\tBLKPG_DEL_PARTITION    = 0x2\n\tBLKPG_RESIZE_PARTITION = 0x3\n)\n\nconst (\n\tNETNSA_NONE = 0x0\n\tNETNSA_NSID = 0x1\n\tNETNSA_PID  = 0x2\n\tNETNSA_FD   = 0x3\n)\n\ntype XDPRingOffset struct {\n\tProducer uint64\n\tConsumer uint64\n\tDesc     uint64\n}\n\ntype XDPMmapOffsets struct {\n\tRx XDPRingOffset\n\tTx XDPRingOffset\n\tFr XDPRingOffset\n\tCr XDPRingOffset\n}\n\ntype XDPUmemReg struct {\n\tAddr     uint64\n\tLen      uint64\n\tSize     uint32\n\tHeadroom uint32\n}\n\ntype XDPStatistics struct {\n\tRx_dropped       uint64\n\tRx_invalid_descs uint64\n\tTx_invalid_descs uint64\n}\n\ntype XDPDesc struct {\n\tAddr    uint64\n\tLen     uint32\n\tOptions uint32\n}\n\nconst (\n\tNCSI_CMD_UNSPEC                 = 0x0\n\tNCSI_CMD_PKG_INFO               = 0x1\n\tNCSI_CMD_SET_INTERFACE          = 0x2\n\tNCSI_CMD_CLEAR_INTERFACE        = 0x3\n\tNCSI_ATTR_UNSPEC                = 0x0\n\tNCSI_ATTR_IFINDEX               = 0x1\n\tNCSI_ATTR_PACKAGE_LIST          = 0x2\n\tNCSI_ATTR_PACKAGE_ID            = 0x3\n\tNCSI_ATTR_CHANNEL_ID            = 0x4\n\tNCSI_PKG_ATTR_UNSPEC            = 0x0\n\tNCSI_PKG_ATTR                   = 0x1\n\tNCSI_PKG_ATTR_ID                = 0x2\n\tNCSI_PKG_ATTR_FORCED            = 0x3\n\tNCSI_PKG_ATTR_CHANNEL_LIST      = 0x4\n\tNCSI_CHANNEL_ATTR_UNSPEC        = 0x0\n\tNCSI_CHANNEL_ATTR               = 0x1\n\tNCSI_CHANNEL_ATTR_ID            = 0x2\n\tNCSI_CHANNEL_ATTR_VERSION_MAJOR = 0x3\n\tNCSI_CHANNEL_ATTR_VERSION_MINOR = 0x4\n\tNCSI_CHANNEL_ATTR_VERSION_STR   = 0x5\n\tNCSI_CHANNEL_ATTR_LINK_STATE    = 0x6\n\tNCSI_CHANNEL_ATTR_ACTIVE        = 0x7\n\tNCSI_CHANNEL_ATTR_FORCED        = 0x8\n\tNCSI_CHANNEL_ATTR_VLAN_LIST     = 0x9\n\tNCSI_CHANNEL_ATTR_VLAN_ID       = 0xa\n)\n\ntype ScmTimestamping struct {\n\tTs [3]Timespec\n}\n\nconst (\n\tSOF_TIMESTAMPING_TX_HARDWARE  = 0x1\n\tSOF_TIMESTAMPING_TX_SOFTWARE  = 0x2\n\tSOF_TIMESTAMPING_RX_HARDWARE  = 0x4\n\tSOF_TIMESTAMPING_RX_SOFTWARE  = 0x8\n\tSOF_TIMESTAMPING_SOFTWARE     = 0x10\n\tSOF_TIMESTAMPING_SYS_HARDWARE = 0x20\n\tSOF_TIMESTAMPING_RAW_HARDWARE = 0x40\n\tSOF_TIMESTAMPING_OPT_ID       = 0x80\n\tSOF_TIMESTAMPING_TX_SCHED     = 0x100\n\tSOF_TIMESTAMPING_TX_ACK       = 0x200\n\tSOF_TIMESTAMPING_OPT_CMSG     = 0x400\n\tSOF_TIMESTAMPING_OPT_TSONLY   = 0x800\n\tSOF_TIMESTAMPING_OPT_STATS    = 0x1000\n\tSOF_TIMESTAMPING_OPT_PKTINFO  = 0x2000\n\tSOF_TIMESTAMPING_OPT_TX_SWHW  = 0x4000\n\n\tSOF_TIMESTAMPING_LAST = 0x4000\n\tSOF_TIMESTAMPING_MASK = 0x7fff\n\n\tSCM_TSTAMP_SND   = 0x0\n\tSCM_TSTAMP_SCHED = 0x1\n\tSCM_TSTAMP_ACK   = 0x2\n)\n\ntype SockExtendedErr struct {\n\tErrno  uint32\n\tOrigin uint8\n\tType   uint8\n\tCode   uint8\n\tPad    uint8\n\tInfo   uint32\n\tData   uint32\n}\n\ntype FanotifyEventMetadata struct {\n\tEvent_len    uint32\n\tVers         uint8\n\tReserved     uint8\n\tMetadata_len uint16\n\tMask         uint64\n\tFd           int32\n\tPid          int32\n}\n\ntype FanotifyResponse struct {\n\tFd       int32\n\tResponse uint32\n}\n\nconst (\n\tCRYPTO_MSG_BASE      = 0x10\n\tCRYPTO_MSG_NEWALG    = 0x10\n\tCRYPTO_MSG_DELALG    = 0x11\n\tCRYPTO_MSG_UPDATEALG = 0x12\n\tCRYPTO_MSG_GETALG    = 0x13\n\tCRYPTO_MSG_DELRNG    = 0x14\n\tCRYPTO_MSG_GETSTAT   = 0x15\n)\n\nconst (\n\tCRYPTOCFGA_UNSPEC           = 0x0\n\tCRYPTOCFGA_PRIORITY_VAL     = 0x1\n\tCRYPTOCFGA_REPORT_LARVAL    = 0x2\n\tCRYPTOCFGA_REPORT_HASH      = 0x3\n\tCRYPTOCFGA_REPORT_BLKCIPHER = 0x4\n\tCRYPTOCFGA_REPORT_AEAD      = 0x5\n\tCRYPTOCFGA_REPORT_COMPRESS  = 0x6\n\tCRYPTOCFGA_REPORT_RNG       = 0x7\n\tCRYPTOCFGA_REPORT_CIPHER    = 0x8\n\tCRYPTOCFGA_REPORT_AKCIPHER  = 0x9\n\tCRYPTOCFGA_REPORT_KPP       = 0xa\n\tCRYPTOCFGA_REPORT_ACOMP     = 0xb\n\tCRYPTOCFGA_STAT_LARVAL      = 0xc\n\tCRYPTOCFGA_STAT_HASH        = 0xd\n\tCRYPTOCFGA_STAT_BLKCIPHER   = 0xe\n\tCRYPTOCFGA_STAT_AEAD        = 0xf\n\tCRYPTOCFGA_STAT_COMPRESS    = 0x10\n\tCRYPTOCFGA_STAT_RNG         = 0x11\n\tCRYPTOCFGA_STAT_CIPHER      = 0x12\n\tCRYPTOCFGA_STAT_AKCIPHER    = 0x13\n\tCRYPTOCFGA_STAT_KPP         = 0x14\n\tCRYPTOCFGA_STAT_ACOMP       = 0x15\n)\n\ntype CryptoUserAlg struct {\n\tName        [64]int8\n\tDriver_name [64]int8\n\tModule_name [64]int8\n\tType        uint32\n\tMask        uint32\n\tRefcnt      uint32\n\tFlags       uint32\n}\n\ntype CryptoStatAEAD struct {\n\tType         [64]int8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatAKCipher struct {\n\tType         [64]int8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tVerify_cnt   uint64\n\tSign_cnt     uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatCipher struct {\n\tType         [64]int8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatCompress struct {\n\tType            [64]int8\n\tCompress_cnt    uint64\n\tCompress_tlen   uint64\n\tDecompress_cnt  uint64\n\tDecompress_tlen uint64\n\tErr_cnt         uint64\n}\n\ntype CryptoStatHash struct {\n\tType      [64]int8\n\tHash_cnt  uint64\n\tHash_tlen uint64\n\tErr_cnt   uint64\n}\n\ntype CryptoStatKPP struct {\n\tType                      [64]int8\n\tSetsecret_cnt             uint64\n\tGenerate_public_key_cnt   uint64\n\tCompute_shared_secret_cnt uint64\n\tErr_cnt                   uint64\n}\n\ntype CryptoStatRNG struct {\n\tType          [64]int8\n\tGenerate_cnt  uint64\n\tGenerate_tlen uint64\n\tSeed_cnt      uint64\n\tErr_cnt       uint64\n}\n\ntype CryptoStatLarval struct {\n\tType [64]int8\n}\n\ntype CryptoReportLarval struct {\n\tType [64]int8\n}\n\ntype CryptoReportHash struct {\n\tType       [64]int8\n\tBlocksize  uint32\n\tDigestsize uint32\n}\n\ntype CryptoReportCipher struct {\n\tType        [64]int8\n\tBlocksize   uint32\n\tMin_keysize uint32\n\tMax_keysize uint32\n}\n\ntype CryptoReportBlkCipher struct {\n\tType        [64]int8\n\tGeniv       [64]int8\n\tBlocksize   uint32\n\tMin_keysize uint32\n\tMax_keysize uint32\n\tIvsize      uint32\n}\n\ntype CryptoReportAEAD struct {\n\tType        [64]int8\n\tGeniv       [64]int8\n\tBlocksize   uint32\n\tMaxauthsize uint32\n\tIvsize      uint32\n}\n\ntype CryptoReportComp struct {\n\tType [64]int8\n}\n\ntype CryptoReportRNG struct {\n\tType     [64]int8\n\tSeedsize uint32\n}\n\ntype CryptoReportAKCipher struct {\n\tType [64]int8\n}\n\ntype CryptoReportKPP struct {\n\tType [64]int8\n}\n\ntype CryptoReportAcomp struct {\n\tType [64]int8\n}\n\nconst (\n\tBPF_REG_0                           = 0x0\n\tBPF_REG_1                           = 0x1\n\tBPF_REG_2                           = 0x2\n\tBPF_REG_3                           = 0x3\n\tBPF_REG_4                           = 0x4\n\tBPF_REG_5                           = 0x5\n\tBPF_REG_6                           = 0x6\n\tBPF_REG_7                           = 0x7\n\tBPF_REG_8                           = 0x8\n\tBPF_REG_9                           = 0x9\n\tBPF_REG_10                          = 0xa\n\tBPF_MAP_CREATE                      = 0x0\n\tBPF_MAP_LOOKUP_ELEM                 = 0x1\n\tBPF_MAP_UPDATE_ELEM                 = 0x2\n\tBPF_MAP_DELETE_ELEM                 = 0x3\n\tBPF_MAP_GET_NEXT_KEY                = 0x4\n\tBPF_PROG_LOAD                       = 0x5\n\tBPF_OBJ_PIN                         = 0x6\n\tBPF_OBJ_GET                         = 0x7\n\tBPF_PROG_ATTACH                     = 0x8\n\tBPF_PROG_DETACH                     = 0x9\n\tBPF_PROG_TEST_RUN                   = 0xa\n\tBPF_PROG_GET_NEXT_ID                = 0xb\n\tBPF_MAP_GET_NEXT_ID                 = 0xc\n\tBPF_PROG_GET_FD_BY_ID               = 0xd\n\tBPF_MAP_GET_FD_BY_ID                = 0xe\n\tBPF_OBJ_GET_INFO_BY_FD              = 0xf\n\tBPF_PROG_QUERY                      = 0x10\n\tBPF_RAW_TRACEPOINT_OPEN             = 0x11\n\tBPF_BTF_LOAD                        = 0x12\n\tBPF_BTF_GET_FD_BY_ID                = 0x13\n\tBPF_TASK_FD_QUERY                   = 0x14\n\tBPF_MAP_LOOKUP_AND_DELETE_ELEM      = 0x15\n\tBPF_MAP_TYPE_UNSPEC                 = 0x0\n\tBPF_MAP_TYPE_HASH                   = 0x1\n\tBPF_MAP_TYPE_ARRAY                  = 0x2\n\tBPF_MAP_TYPE_PROG_ARRAY             = 0x3\n\tBPF_MAP_TYPE_PERF_EVENT_ARRAY       = 0x4\n\tBPF_MAP_TYPE_PERCPU_HASH            = 0x5\n\tBPF_MAP_TYPE_PERCPU_ARRAY           = 0x6\n\tBPF_MAP_TYPE_STACK_TRACE            = 0x7\n\tBPF_MAP_TYPE_CGROUP_ARRAY           = 0x8\n\tBPF_MAP_TYPE_LRU_HASH               = 0x9\n\tBPF_MAP_TYPE_LRU_PERCPU_HASH        = 0xa\n\tBPF_MAP_TYPE_LPM_TRIE               = 0xb\n\tBPF_MAP_TYPE_ARRAY_OF_MAPS          = 0xc\n\tBPF_MAP_TYPE_HASH_OF_MAPS           = 0xd\n\tBPF_MAP_TYPE_DEVMAP                 = 0xe\n\tBPF_MAP_TYPE_SOCKMAP                = 0xf\n\tBPF_MAP_TYPE_CPUMAP                 = 0x10\n\tBPF_MAP_TYPE_XSKMAP                 = 0x11\n\tBPF_MAP_TYPE_SOCKHASH               = 0x12\n\tBPF_MAP_TYPE_CGROUP_STORAGE         = 0x13\n\tBPF_MAP_TYPE_REUSEPORT_SOCKARRAY    = 0x14\n\tBPF_MAP_TYPE_PERCPU_CGROUP_STORAGE  = 0x15\n\tBPF_MAP_TYPE_QUEUE                  = 0x16\n\tBPF_MAP_TYPE_STACK                  = 0x17\n\tBPF_PROG_TYPE_UNSPEC                = 0x0\n\tBPF_PROG_TYPE_SOCKET_FILTER         = 0x1\n\tBPF_PROG_TYPE_KPROBE                = 0x2\n\tBPF_PROG_TYPE_SCHED_CLS             = 0x3\n\tBPF_PROG_TYPE_SCHED_ACT             = 0x4\n\tBPF_PROG_TYPE_TRACEPOINT            = 0x5\n\tBPF_PROG_TYPE_XDP                   = 0x6\n\tBPF_PROG_TYPE_PERF_EVENT            = 0x7\n\tBPF_PROG_TYPE_CGROUP_SKB            = 0x8\n\tBPF_PROG_TYPE_CGROUP_SOCK           = 0x9\n\tBPF_PROG_TYPE_LWT_IN                = 0xa\n\tBPF_PROG_TYPE_LWT_OUT               = 0xb\n\tBPF_PROG_TYPE_LWT_XMIT              = 0xc\n\tBPF_PROG_TYPE_SOCK_OPS              = 0xd\n\tBPF_PROG_TYPE_SK_SKB                = 0xe\n\tBPF_PROG_TYPE_CGROUP_DEVICE         = 0xf\n\tBPF_PROG_TYPE_SK_MSG                = 0x10\n\tBPF_PROG_TYPE_RAW_TRACEPOINT        = 0x11\n\tBPF_PROG_TYPE_CGROUP_SOCK_ADDR      = 0x12\n\tBPF_PROG_TYPE_LWT_SEG6LOCAL         = 0x13\n\tBPF_PROG_TYPE_LIRC_MODE2            = 0x14\n\tBPF_PROG_TYPE_SK_REUSEPORT          = 0x15\n\tBPF_PROG_TYPE_FLOW_DISSECTOR        = 0x16\n\tBPF_CGROUP_INET_INGRESS             = 0x0\n\tBPF_CGROUP_INET_EGRESS              = 0x1\n\tBPF_CGROUP_INET_SOCK_CREATE         = 0x2\n\tBPF_CGROUP_SOCK_OPS                 = 0x3\n\tBPF_SK_SKB_STREAM_PARSER            = 0x4\n\tBPF_SK_SKB_STREAM_VERDICT           = 0x5\n\tBPF_CGROUP_DEVICE                   = 0x6\n\tBPF_SK_MSG_VERDICT                  = 0x7\n\tBPF_CGROUP_INET4_BIND               = 0x8\n\tBPF_CGROUP_INET6_BIND               = 0x9\n\tBPF_CGROUP_INET4_CONNECT            = 0xa\n\tBPF_CGROUP_INET6_CONNECT            = 0xb\n\tBPF_CGROUP_INET4_POST_BIND          = 0xc\n\tBPF_CGROUP_INET6_POST_BIND          = 0xd\n\tBPF_CGROUP_UDP4_SENDMSG             = 0xe\n\tBPF_CGROUP_UDP6_SENDMSG             = 0xf\n\tBPF_LIRC_MODE2                      = 0x10\n\tBPF_FLOW_DISSECTOR                  = 0x11\n\tBPF_STACK_BUILD_ID_EMPTY            = 0x0\n\tBPF_STACK_BUILD_ID_VALID            = 0x1\n\tBPF_STACK_BUILD_ID_IP               = 0x2\n\tBPF_ADJ_ROOM_NET                    = 0x0\n\tBPF_HDR_START_MAC                   = 0x0\n\tBPF_HDR_START_NET                   = 0x1\n\tBPF_LWT_ENCAP_SEG6                  = 0x0\n\tBPF_LWT_ENCAP_SEG6_INLINE           = 0x1\n\tBPF_OK                              = 0x0\n\tBPF_DROP                            = 0x2\n\tBPF_REDIRECT                        = 0x7\n\tBPF_SOCK_OPS_VOID                   = 0x0\n\tBPF_SOCK_OPS_TIMEOUT_INIT           = 0x1\n\tBPF_SOCK_OPS_RWND_INIT              = 0x2\n\tBPF_SOCK_OPS_TCP_CONNECT_CB         = 0x3\n\tBPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB  = 0x4\n\tBPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB = 0x5\n\tBPF_SOCK_OPS_NEEDS_ECN              = 0x6\n\tBPF_SOCK_OPS_BASE_RTT               = 0x7\n\tBPF_SOCK_OPS_RTO_CB                 = 0x8\n\tBPF_SOCK_OPS_RETRANS_CB             = 0x9\n\tBPF_SOCK_OPS_STATE_CB               = 0xa\n\tBPF_SOCK_OPS_TCP_LISTEN_CB          = 0xb\n\tBPF_TCP_ESTABLISHED                 = 0x1\n\tBPF_TCP_SYN_SENT                    = 0x2\n\tBPF_TCP_SYN_RECV                    = 0x3\n\tBPF_TCP_FIN_WAIT1                   = 0x4\n\tBPF_TCP_FIN_WAIT2                   = 0x5\n\tBPF_TCP_TIME_WAIT                   = 0x6\n\tBPF_TCP_CLOSE                       = 0x7\n\tBPF_TCP_CLOSE_WAIT                  = 0x8\n\tBPF_TCP_LAST_ACK                    = 0x9\n\tBPF_TCP_LISTEN                      = 0xa\n\tBPF_TCP_CLOSING                     = 0xb\n\tBPF_TCP_NEW_SYN_RECV                = 0xc\n\tBPF_TCP_MAX_STATES                  = 0xd\n\tBPF_FIB_LKUP_RET_SUCCESS            = 0x0\n\tBPF_FIB_LKUP_RET_BLACKHOLE          = 0x1\n\tBPF_FIB_LKUP_RET_UNREACHABLE        = 0x2\n\tBPF_FIB_LKUP_RET_PROHIBIT           = 0x3\n\tBPF_FIB_LKUP_RET_NOT_FWDED          = 0x4\n\tBPF_FIB_LKUP_RET_FWD_DISABLED       = 0x5\n\tBPF_FIB_LKUP_RET_UNSUPP_LWT         = 0x6\n\tBPF_FIB_LKUP_RET_NO_NEIGH           = 0x7\n\tBPF_FIB_LKUP_RET_FRAG_NEEDED        = 0x8\n\tBPF_FD_TYPE_RAW_TRACEPOINT          = 0x0\n\tBPF_FD_TYPE_TRACEPOINT              = 0x1\n\tBPF_FD_TYPE_KPROBE                  = 0x2\n\tBPF_FD_TYPE_KRETPROBE               = 0x3\n\tBPF_FD_TYPE_UPROBE                  = 0x4\n\tBPF_FD_TYPE_URETPROBE               = 0x5\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go",
    "content": "// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m64 linux/types.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build amd64,linux\n\npackage unix\n\nconst (\n\tSizeofPtr      = 0x8\n\tSizeofShort    = 0x2\n\tSizeofInt      = 0x4\n\tSizeofLong     = 0x8\n\tSizeofLongLong = 0x8\n\tPathMax        = 0x1000\n)\n\ntype (\n\t_C_short     int16\n\t_C_int       int32\n\t_C_long      int64\n\t_C_long_long int64\n)\n\ntype Timespec struct {\n\tSec  int64\n\tNsec int64\n}\n\ntype Timeval struct {\n\tSec  int64\n\tUsec int64\n}\n\ntype Timex struct {\n\tModes     uint32\n\tOffset    int64\n\tFreq      int64\n\tMaxerror  int64\n\tEsterror  int64\n\tStatus    int32\n\tConstant  int64\n\tPrecision int64\n\tTolerance int64\n\tTime      Timeval\n\tTick      int64\n\tPpsfreq   int64\n\tJitter    int64\n\tShift     int32\n\tStabil    int64\n\tJitcnt    int64\n\tCalcnt    int64\n\tErrcnt    int64\n\tStbcnt    int64\n\tTai       int32\n\t_         [44]byte\n}\n\ntype Time_t int64\n\ntype Tms struct {\n\tUtime  int64\n\tStime  int64\n\tCutime int64\n\tCstime int64\n}\n\ntype Utimbuf struct {\n\tActime  int64\n\tModtime int64\n}\n\ntype Rusage struct {\n\tUtime    Timeval\n\tStime    Timeval\n\tMaxrss   int64\n\tIxrss    int64\n\tIdrss    int64\n\tIsrss    int64\n\tMinflt   int64\n\tMajflt   int64\n\tNswap    int64\n\tInblock  int64\n\tOublock  int64\n\tMsgsnd   int64\n\tMsgrcv   int64\n\tNsignals int64\n\tNvcsw    int64\n\tNivcsw   int64\n}\n\ntype Rlimit struct {\n\tCur uint64\n\tMax uint64\n}\n\ntype _Gid_t uint32\n\ntype Stat_t struct {\n\tDev     uint64\n\tIno     uint64\n\tNlink   uint64\n\tMode    uint32\n\tUid     uint32\n\tGid     uint32\n\t_       int32\n\tRdev    uint64\n\tSize    int64\n\tBlksize int64\n\tBlocks  int64\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\t_       [3]int64\n}\n\ntype StatxTimestamp struct {\n\tSec  int64\n\tNsec uint32\n\t_    int32\n}\n\ntype Statx_t struct {\n\tMask            uint32\n\tBlksize         uint32\n\tAttributes      uint64\n\tNlink           uint32\n\tUid             uint32\n\tGid             uint32\n\tMode            uint16\n\t_               [1]uint16\n\tIno             uint64\n\tSize            uint64\n\tBlocks          uint64\n\tAttributes_mask uint64\n\tAtime           StatxTimestamp\n\tBtime           StatxTimestamp\n\tCtime           StatxTimestamp\n\tMtime           StatxTimestamp\n\tRdev_major      uint32\n\tRdev_minor      uint32\n\tDev_major       uint32\n\tDev_minor       uint32\n\t_               [14]uint64\n}\n\ntype Dirent struct {\n\tIno    uint64\n\tOff    int64\n\tReclen uint16\n\tType   uint8\n\tName   [256]int8\n\t_      [5]byte\n}\n\ntype Fsid struct {\n\tVal [2]int32\n}\n\ntype Flock_t struct {\n\tType   int16\n\tWhence int16\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\t_      [4]byte\n}\n\ntype FscryptPolicy struct {\n\tVersion                   uint8\n\tContents_encryption_mode  uint8\n\tFilenames_encryption_mode uint8\n\tFlags                     uint8\n\tMaster_key_descriptor     [8]uint8\n}\n\ntype FscryptKey struct {\n\tMode uint32\n\tRaw  [64]uint8\n\tSize uint32\n}\n\ntype KeyctlDHParams struct {\n\tPrivate int32\n\tPrime   int32\n\tBase    int32\n}\n\nconst (\n\tFADV_NORMAL     = 0x0\n\tFADV_RANDOM     = 0x1\n\tFADV_SEQUENTIAL = 0x2\n\tFADV_WILLNEED   = 0x3\n\tFADV_DONTNEED   = 0x4\n\tFADV_NOREUSE    = 0x5\n)\n\ntype RawSockaddrInet4 struct {\n\tFamily uint16\n\tPort   uint16\n\tAddr   [4]byte /* in_addr */\n\tZero   [8]uint8\n}\n\ntype RawSockaddrInet6 struct {\n\tFamily   uint16\n\tPort     uint16\n\tFlowinfo uint32\n\tAddr     [16]byte /* in6_addr */\n\tScope_id uint32\n}\n\ntype RawSockaddrUnix struct {\n\tFamily uint16\n\tPath   [108]int8\n}\n\ntype RawSockaddrLinklayer struct {\n\tFamily   uint16\n\tProtocol uint16\n\tIfindex  int32\n\tHatype   uint16\n\tPkttype  uint8\n\tHalen    uint8\n\tAddr     [8]uint8\n}\n\ntype RawSockaddrNetlink struct {\n\tFamily uint16\n\tPad    uint16\n\tPid    uint32\n\tGroups uint32\n}\n\ntype RawSockaddrHCI struct {\n\tFamily  uint16\n\tDev     uint16\n\tChannel uint16\n}\n\ntype RawSockaddrL2 struct {\n\tFamily      uint16\n\tPsm         uint16\n\tBdaddr      [6]uint8\n\tCid         uint16\n\tBdaddr_type uint8\n\t_           [1]byte\n}\n\ntype RawSockaddrRFCOMM struct {\n\tFamily  uint16\n\tBdaddr  [6]uint8\n\tChannel uint8\n\t_       [1]byte\n}\n\ntype RawSockaddrCAN struct {\n\tFamily  uint16\n\tIfindex int32\n\tAddr    [8]byte\n}\n\ntype RawSockaddrALG struct {\n\tFamily uint16\n\tType   [14]uint8\n\tFeat   uint32\n\tMask   uint32\n\tName   [64]uint8\n}\n\ntype RawSockaddrVM struct {\n\tFamily    uint16\n\tReserved1 uint16\n\tPort      uint32\n\tCid       uint32\n\tZero      [4]uint8\n}\n\ntype RawSockaddrXDP struct {\n\tFamily         uint16\n\tFlags          uint16\n\tIfindex        uint32\n\tQueue_id       uint32\n\tShared_umem_fd uint32\n}\n\ntype RawSockaddrPPPoX [0x1e]byte\n\ntype RawSockaddr struct {\n\tFamily uint16\n\tData   [14]int8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [96]int8\n}\n\ntype _Socklen uint32\n\ntype Linger struct {\n\tOnoff  int32\n\tLinger int32\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint64\n}\n\ntype IPMreq struct {\n\tMultiaddr [4]byte /* in_addr */\n\tInterface [4]byte /* in_addr */\n}\n\ntype IPMreqn struct {\n\tMultiaddr [4]byte /* in_addr */\n\tAddress   [4]byte /* in_addr */\n\tIfindex   int32\n}\n\ntype IPv6Mreq struct {\n\tMultiaddr [16]byte /* in6_addr */\n\tInterface uint32\n}\n\ntype PacketMreq struct {\n\tIfindex int32\n\tType    uint16\n\tAlen    uint16\n\tAddress [8]uint8\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tIov        *Iovec\n\tIovlen     uint64\n\tControl    *byte\n\tControllen uint64\n\tFlags      int32\n\t_          [4]byte\n}\n\ntype Cmsghdr struct {\n\tLen   uint64\n\tLevel int32\n\tType  int32\n}\n\ntype Inet4Pktinfo struct {\n\tIfindex  int32\n\tSpec_dst [4]byte /* in_addr */\n\tAddr     [4]byte /* in_addr */\n}\n\ntype Inet6Pktinfo struct {\n\tAddr    [16]byte /* in6_addr */\n\tIfindex uint32\n}\n\ntype IPv6MTUInfo struct {\n\tAddr RawSockaddrInet6\n\tMtu  uint32\n}\n\ntype ICMPv6Filter struct {\n\tData [8]uint32\n}\n\ntype Ucred struct {\n\tPid int32\n\tUid uint32\n\tGid uint32\n}\n\ntype TCPInfo struct {\n\tState          uint8\n\tCa_state       uint8\n\tRetransmits    uint8\n\tProbes         uint8\n\tBackoff        uint8\n\tOptions        uint8\n\tRto            uint32\n\tAto            uint32\n\tSnd_mss        uint32\n\tRcv_mss        uint32\n\tUnacked        uint32\n\tSacked         uint32\n\tLost           uint32\n\tRetrans        uint32\n\tFackets        uint32\n\tLast_data_sent uint32\n\tLast_ack_sent  uint32\n\tLast_data_recv uint32\n\tLast_ack_recv  uint32\n\tPmtu           uint32\n\tRcv_ssthresh   uint32\n\tRtt            uint32\n\tRttvar         uint32\n\tSnd_ssthresh   uint32\n\tSnd_cwnd       uint32\n\tAdvmss         uint32\n\tReordering     uint32\n\tRcv_rtt        uint32\n\tRcv_space      uint32\n\tTotal_retrans  uint32\n}\n\ntype CanFilter struct {\n\tId   uint32\n\tMask uint32\n}\n\nconst (\n\tSizeofSockaddrInet4     = 0x10\n\tSizeofSockaddrInet6     = 0x1c\n\tSizeofSockaddrAny       = 0x70\n\tSizeofSockaddrUnix      = 0x6e\n\tSizeofSockaddrLinklayer = 0x14\n\tSizeofSockaddrNetlink   = 0xc\n\tSizeofSockaddrHCI       = 0x6\n\tSizeofSockaddrL2        = 0xe\n\tSizeofSockaddrRFCOMM    = 0xa\n\tSizeofSockaddrCAN       = 0x10\n\tSizeofSockaddrALG       = 0x58\n\tSizeofSockaddrVM        = 0x10\n\tSizeofSockaddrXDP       = 0x10\n\tSizeofSockaddrPPPoX     = 0x1e\n\tSizeofLinger            = 0x8\n\tSizeofIovec             = 0x10\n\tSizeofIPMreq            = 0x8\n\tSizeofIPMreqn           = 0xc\n\tSizeofIPv6Mreq          = 0x14\n\tSizeofPacketMreq        = 0x10\n\tSizeofMsghdr            = 0x38\n\tSizeofCmsghdr           = 0x10\n\tSizeofInet4Pktinfo      = 0xc\n\tSizeofInet6Pktinfo      = 0x14\n\tSizeofIPv6MTUInfo       = 0x20\n\tSizeofICMPv6Filter      = 0x20\n\tSizeofUcred             = 0xc\n\tSizeofTCPInfo           = 0x68\n\tSizeofCanFilter         = 0x8\n)\n\nconst (\n\tNDA_UNSPEC              = 0x0\n\tNDA_DST                 = 0x1\n\tNDA_LLADDR              = 0x2\n\tNDA_CACHEINFO           = 0x3\n\tNDA_PROBES              = 0x4\n\tNDA_VLAN                = 0x5\n\tNDA_PORT                = 0x6\n\tNDA_VNI                 = 0x7\n\tNDA_IFINDEX             = 0x8\n\tNDA_MASTER              = 0x9\n\tNDA_LINK_NETNSID        = 0xa\n\tNDA_SRC_VNI             = 0xb\n\tNTF_USE                 = 0x1\n\tNTF_SELF                = 0x2\n\tNTF_MASTER              = 0x4\n\tNTF_PROXY               = 0x8\n\tNTF_EXT_LEARNED         = 0x10\n\tNTF_OFFLOADED           = 0x20\n\tNTF_ROUTER              = 0x80\n\tNUD_INCOMPLETE          = 0x1\n\tNUD_REACHABLE           = 0x2\n\tNUD_STALE               = 0x4\n\tNUD_DELAY               = 0x8\n\tNUD_PROBE               = 0x10\n\tNUD_FAILED              = 0x20\n\tNUD_NOARP               = 0x40\n\tNUD_PERMANENT           = 0x80\n\tNUD_NONE                = 0x0\n\tIFA_UNSPEC              = 0x0\n\tIFA_ADDRESS             = 0x1\n\tIFA_LOCAL               = 0x2\n\tIFA_LABEL               = 0x3\n\tIFA_BROADCAST           = 0x4\n\tIFA_ANYCAST             = 0x5\n\tIFA_CACHEINFO           = 0x6\n\tIFA_MULTICAST           = 0x7\n\tIFA_FLAGS               = 0x8\n\tIFA_RT_PRIORITY         = 0x9\n\tIFA_TARGET_NETNSID      = 0xa\n\tIFLA_UNSPEC             = 0x0\n\tIFLA_ADDRESS            = 0x1\n\tIFLA_BROADCAST          = 0x2\n\tIFLA_IFNAME             = 0x3\n\tIFLA_MTU                = 0x4\n\tIFLA_LINK               = 0x5\n\tIFLA_QDISC              = 0x6\n\tIFLA_STATS              = 0x7\n\tIFLA_COST               = 0x8\n\tIFLA_PRIORITY           = 0x9\n\tIFLA_MASTER             = 0xa\n\tIFLA_WIRELESS           = 0xb\n\tIFLA_PROTINFO           = 0xc\n\tIFLA_TXQLEN             = 0xd\n\tIFLA_MAP                = 0xe\n\tIFLA_WEIGHT             = 0xf\n\tIFLA_OPERSTATE          = 0x10\n\tIFLA_LINKMODE           = 0x11\n\tIFLA_LINKINFO           = 0x12\n\tIFLA_NET_NS_PID         = 0x13\n\tIFLA_IFALIAS            = 0x14\n\tIFLA_NUM_VF             = 0x15\n\tIFLA_VFINFO_LIST        = 0x16\n\tIFLA_STATS64            = 0x17\n\tIFLA_VF_PORTS           = 0x18\n\tIFLA_PORT_SELF          = 0x19\n\tIFLA_AF_SPEC            = 0x1a\n\tIFLA_GROUP              = 0x1b\n\tIFLA_NET_NS_FD          = 0x1c\n\tIFLA_EXT_MASK           = 0x1d\n\tIFLA_PROMISCUITY        = 0x1e\n\tIFLA_NUM_TX_QUEUES      = 0x1f\n\tIFLA_NUM_RX_QUEUES      = 0x20\n\tIFLA_CARRIER            = 0x21\n\tIFLA_PHYS_PORT_ID       = 0x22\n\tIFLA_CARRIER_CHANGES    = 0x23\n\tIFLA_PHYS_SWITCH_ID     = 0x24\n\tIFLA_LINK_NETNSID       = 0x25\n\tIFLA_PHYS_PORT_NAME     = 0x26\n\tIFLA_PROTO_DOWN         = 0x27\n\tIFLA_GSO_MAX_SEGS       = 0x28\n\tIFLA_GSO_MAX_SIZE       = 0x29\n\tIFLA_PAD                = 0x2a\n\tIFLA_XDP                = 0x2b\n\tIFLA_EVENT              = 0x2c\n\tIFLA_NEW_NETNSID        = 0x2d\n\tIFLA_IF_NETNSID         = 0x2e\n\tIFLA_TARGET_NETNSID     = 0x2e\n\tIFLA_CARRIER_UP_COUNT   = 0x2f\n\tIFLA_CARRIER_DOWN_COUNT = 0x30\n\tIFLA_NEW_IFINDEX        = 0x31\n\tIFLA_MIN_MTU            = 0x32\n\tIFLA_MAX_MTU            = 0x33\n\tIFLA_MAX                = 0x33\n\tIFLA_INFO_KIND          = 0x1\n\tIFLA_INFO_DATA          = 0x2\n\tIFLA_INFO_XSTATS        = 0x3\n\tIFLA_INFO_SLAVE_KIND    = 0x4\n\tIFLA_INFO_SLAVE_DATA    = 0x5\n\tRT_SCOPE_UNIVERSE       = 0x0\n\tRT_SCOPE_SITE           = 0xc8\n\tRT_SCOPE_LINK           = 0xfd\n\tRT_SCOPE_HOST           = 0xfe\n\tRT_SCOPE_NOWHERE        = 0xff\n\tRT_TABLE_UNSPEC         = 0x0\n\tRT_TABLE_COMPAT         = 0xfc\n\tRT_TABLE_DEFAULT        = 0xfd\n\tRT_TABLE_MAIN           = 0xfe\n\tRT_TABLE_LOCAL          = 0xff\n\tRT_TABLE_MAX            = 0xffffffff\n\tRTA_UNSPEC              = 0x0\n\tRTA_DST                 = 0x1\n\tRTA_SRC                 = 0x2\n\tRTA_IIF                 = 0x3\n\tRTA_OIF                 = 0x4\n\tRTA_GATEWAY             = 0x5\n\tRTA_PRIORITY            = 0x6\n\tRTA_PREFSRC             = 0x7\n\tRTA_METRICS             = 0x8\n\tRTA_MULTIPATH           = 0x9\n\tRTA_FLOW                = 0xb\n\tRTA_CACHEINFO           = 0xc\n\tRTA_TABLE               = 0xf\n\tRTA_MARK                = 0x10\n\tRTA_MFC_STATS           = 0x11\n\tRTA_VIA                 = 0x12\n\tRTA_NEWDST              = 0x13\n\tRTA_PREF                = 0x14\n\tRTA_ENCAP_TYPE          = 0x15\n\tRTA_ENCAP               = 0x16\n\tRTA_EXPIRES             = 0x17\n\tRTA_PAD                 = 0x18\n\tRTA_UID                 = 0x19\n\tRTA_TTL_PROPAGATE       = 0x1a\n\tRTA_IP_PROTO            = 0x1b\n\tRTA_SPORT               = 0x1c\n\tRTA_DPORT               = 0x1d\n\tRTN_UNSPEC              = 0x0\n\tRTN_UNICAST             = 0x1\n\tRTN_LOCAL               = 0x2\n\tRTN_BROADCAST           = 0x3\n\tRTN_ANYCAST             = 0x4\n\tRTN_MULTICAST           = 0x5\n\tRTN_BLACKHOLE           = 0x6\n\tRTN_UNREACHABLE         = 0x7\n\tRTN_PROHIBIT            = 0x8\n\tRTN_THROW               = 0x9\n\tRTN_NAT                 = 0xa\n\tRTN_XRESOLVE            = 0xb\n\tRTNLGRP_NONE            = 0x0\n\tRTNLGRP_LINK            = 0x1\n\tRTNLGRP_NOTIFY          = 0x2\n\tRTNLGRP_NEIGH           = 0x3\n\tRTNLGRP_TC              = 0x4\n\tRTNLGRP_IPV4_IFADDR     = 0x5\n\tRTNLGRP_IPV4_MROUTE     = 0x6\n\tRTNLGRP_IPV4_ROUTE      = 0x7\n\tRTNLGRP_IPV4_RULE       = 0x8\n\tRTNLGRP_IPV6_IFADDR     = 0x9\n\tRTNLGRP_IPV6_MROUTE     = 0xa\n\tRTNLGRP_IPV6_ROUTE      = 0xb\n\tRTNLGRP_IPV6_IFINFO     = 0xc\n\tRTNLGRP_IPV6_PREFIX     = 0x12\n\tRTNLGRP_IPV6_RULE       = 0x13\n\tRTNLGRP_ND_USEROPT      = 0x14\n\tSizeofNlMsghdr          = 0x10\n\tSizeofNlMsgerr          = 0x14\n\tSizeofRtGenmsg          = 0x1\n\tSizeofNlAttr            = 0x4\n\tSizeofRtAttr            = 0x4\n\tSizeofIfInfomsg         = 0x10\n\tSizeofIfAddrmsg         = 0x8\n\tSizeofRtMsg             = 0xc\n\tSizeofRtNexthop         = 0x8\n\tSizeofNdUseroptmsg      = 0x10\n\tSizeofNdMsg             = 0xc\n)\n\ntype NlMsghdr struct {\n\tLen   uint32\n\tType  uint16\n\tFlags uint16\n\tSeq   uint32\n\tPid   uint32\n}\n\ntype NlMsgerr struct {\n\tError int32\n\tMsg   NlMsghdr\n}\n\ntype RtGenmsg struct {\n\tFamily uint8\n}\n\ntype NlAttr struct {\n\tLen  uint16\n\tType uint16\n}\n\ntype RtAttr struct {\n\tLen  uint16\n\tType uint16\n}\n\ntype IfInfomsg struct {\n\tFamily uint8\n\t_      uint8\n\tType   uint16\n\tIndex  int32\n\tFlags  uint32\n\tChange uint32\n}\n\ntype IfAddrmsg struct {\n\tFamily    uint8\n\tPrefixlen uint8\n\tFlags     uint8\n\tScope     uint8\n\tIndex     uint32\n}\n\ntype RtMsg struct {\n\tFamily   uint8\n\tDst_len  uint8\n\tSrc_len  uint8\n\tTos      uint8\n\tTable    uint8\n\tProtocol uint8\n\tScope    uint8\n\tType     uint8\n\tFlags    uint32\n}\n\ntype RtNexthop struct {\n\tLen     uint16\n\tFlags   uint8\n\tHops    uint8\n\tIfindex int32\n}\n\ntype NdUseroptmsg struct {\n\tFamily    uint8\n\tPad1      uint8\n\tOpts_len  uint16\n\tIfindex   int32\n\tIcmp_type uint8\n\tIcmp_code uint8\n\tPad2      uint16\n\tPad3      uint32\n}\n\ntype NdMsg struct {\n\tFamily  uint8\n\tPad1    uint8\n\tPad2    uint16\n\tIfindex int32\n\tState   uint16\n\tFlags   uint8\n\tType    uint8\n}\n\nconst (\n\tSizeofSockFilter = 0x8\n\tSizeofSockFprog  = 0x10\n)\n\ntype SockFilter struct {\n\tCode uint16\n\tJt   uint8\n\tJf   uint8\n\tK    uint32\n}\n\ntype SockFprog struct {\n\tLen    uint16\n\tFilter *SockFilter\n}\n\ntype InotifyEvent struct {\n\tWd     int32\n\tMask   uint32\n\tCookie uint32\n\tLen    uint32\n}\n\nconst SizeofInotifyEvent = 0x10\n\ntype PtraceRegs struct {\n\tR15      uint64\n\tR14      uint64\n\tR13      uint64\n\tR12      uint64\n\tRbp      uint64\n\tRbx      uint64\n\tR11      uint64\n\tR10      uint64\n\tR9       uint64\n\tR8       uint64\n\tRax      uint64\n\tRcx      uint64\n\tRdx      uint64\n\tRsi      uint64\n\tRdi      uint64\n\tOrig_rax uint64\n\tRip      uint64\n\tCs       uint64\n\tEflags   uint64\n\tRsp      uint64\n\tSs       uint64\n\tFs_base  uint64\n\tGs_base  uint64\n\tDs       uint64\n\tEs       uint64\n\tFs       uint64\n\tGs       uint64\n}\n\ntype FdSet struct {\n\tBits [16]int64\n}\n\ntype Sysinfo_t struct {\n\tUptime    int64\n\tLoads     [3]uint64\n\tTotalram  uint64\n\tFreeram   uint64\n\tSharedram uint64\n\tBufferram uint64\n\tTotalswap uint64\n\tFreeswap  uint64\n\tProcs     uint16\n\tPad       uint16\n\tTotalhigh uint64\n\tFreehigh  uint64\n\tUnit      uint32\n\t_         [0]int8\n\t_         [4]byte\n}\n\ntype Utsname struct {\n\tSysname    [65]byte\n\tNodename   [65]byte\n\tRelease    [65]byte\n\tVersion    [65]byte\n\tMachine    [65]byte\n\tDomainname [65]byte\n}\n\ntype Ustat_t struct {\n\tTfree  int32\n\tTinode uint64\n\tFname  [6]int8\n\tFpack  [6]int8\n\t_      [4]byte\n}\n\ntype EpollEvent struct {\n\tEvents uint32\n\tFd     int32\n\tPad    int32\n}\n\nconst (\n\tAT_EMPTY_PATH   = 0x1000\n\tAT_FDCWD        = -0x64\n\tAT_NO_AUTOMOUNT = 0x800\n\tAT_REMOVEDIR    = 0x200\n\n\tAT_STATX_SYNC_AS_STAT = 0x0\n\tAT_STATX_FORCE_SYNC   = 0x2000\n\tAT_STATX_DONT_SYNC    = 0x4000\n\n\tAT_SYMLINK_FOLLOW   = 0x400\n\tAT_SYMLINK_NOFOLLOW = 0x100\n\n\tAT_EACCESS = 0x200\n)\n\ntype PollFd struct {\n\tFd      int32\n\tEvents  int16\n\tRevents int16\n}\n\nconst (\n\tPOLLIN    = 0x1\n\tPOLLPRI   = 0x2\n\tPOLLOUT   = 0x4\n\tPOLLRDHUP = 0x2000\n\tPOLLERR   = 0x8\n\tPOLLHUP   = 0x10\n\tPOLLNVAL  = 0x20\n)\n\ntype Sigset_t struct {\n\tVal [16]uint64\n}\n\nconst _C__NSIG = 0x41\n\ntype SignalfdSiginfo struct {\n\tSigno     uint32\n\tErrno     int32\n\tCode      int32\n\tPid       uint32\n\tUid       uint32\n\tFd        int32\n\tTid       uint32\n\tBand      uint32\n\tOverrun   uint32\n\tTrapno    uint32\n\tStatus    int32\n\tInt       int32\n\tPtr       uint64\n\tUtime     uint64\n\tStime     uint64\n\tAddr      uint64\n\tAddr_lsb  uint16\n\t_         uint16\n\tSyscall   int32\n\tCall_addr uint64\n\tArch      uint32\n\t_         [28]uint8\n}\n\nconst PERF_IOC_FLAG_GROUP = 0x1\n\ntype Termios struct {\n\tIflag  uint32\n\tOflag  uint32\n\tCflag  uint32\n\tLflag  uint32\n\tLine   uint8\n\tCc     [19]uint8\n\tIspeed uint32\n\tOspeed uint32\n}\n\ntype Winsize struct {\n\tRow    uint16\n\tCol    uint16\n\tXpixel uint16\n\tYpixel uint16\n}\n\ntype Taskstats struct {\n\tVersion                   uint16\n\tAc_exitcode               uint32\n\tAc_flag                   uint8\n\tAc_nice                   uint8\n\tCpu_count                 uint64\n\tCpu_delay_total           uint64\n\tBlkio_count               uint64\n\tBlkio_delay_total         uint64\n\tSwapin_count              uint64\n\tSwapin_delay_total        uint64\n\tCpu_run_real_total        uint64\n\tCpu_run_virtual_total     uint64\n\tAc_comm                   [32]int8\n\tAc_sched                  uint8\n\tAc_pad                    [3]uint8\n\t_                         [4]byte\n\tAc_uid                    uint32\n\tAc_gid                    uint32\n\tAc_pid                    uint32\n\tAc_ppid                   uint32\n\tAc_btime                  uint32\n\tAc_etime                  uint64\n\tAc_utime                  uint64\n\tAc_stime                  uint64\n\tAc_minflt                 uint64\n\tAc_majflt                 uint64\n\tCoremem                   uint64\n\tVirtmem                   uint64\n\tHiwater_rss               uint64\n\tHiwater_vm                uint64\n\tRead_char                 uint64\n\tWrite_char                uint64\n\tRead_syscalls             uint64\n\tWrite_syscalls            uint64\n\tRead_bytes                uint64\n\tWrite_bytes               uint64\n\tCancelled_write_bytes     uint64\n\tNvcsw                     uint64\n\tNivcsw                    uint64\n\tAc_utimescaled            uint64\n\tAc_stimescaled            uint64\n\tCpu_scaled_run_real_total uint64\n\tFreepages_count           uint64\n\tFreepages_delay_total     uint64\n\tThrashing_count           uint64\n\tThrashing_delay_total     uint64\n}\n\nconst (\n\tTASKSTATS_CMD_UNSPEC                  = 0x0\n\tTASKSTATS_CMD_GET                     = 0x1\n\tTASKSTATS_CMD_NEW                     = 0x2\n\tTASKSTATS_TYPE_UNSPEC                 = 0x0\n\tTASKSTATS_TYPE_PID                    = 0x1\n\tTASKSTATS_TYPE_TGID                   = 0x2\n\tTASKSTATS_TYPE_STATS                  = 0x3\n\tTASKSTATS_TYPE_AGGR_PID               = 0x4\n\tTASKSTATS_TYPE_AGGR_TGID              = 0x5\n\tTASKSTATS_TYPE_NULL                   = 0x6\n\tTASKSTATS_CMD_ATTR_UNSPEC             = 0x0\n\tTASKSTATS_CMD_ATTR_PID                = 0x1\n\tTASKSTATS_CMD_ATTR_TGID               = 0x2\n\tTASKSTATS_CMD_ATTR_REGISTER_CPUMASK   = 0x3\n\tTASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4\n)\n\ntype CGroupStats struct {\n\tSleeping        uint64\n\tRunning         uint64\n\tStopped         uint64\n\tUninterruptible uint64\n\tIo_wait         uint64\n}\n\nconst (\n\tCGROUPSTATS_CMD_UNSPEC        = 0x3\n\tCGROUPSTATS_CMD_GET           = 0x4\n\tCGROUPSTATS_CMD_NEW           = 0x5\n\tCGROUPSTATS_TYPE_UNSPEC       = 0x0\n\tCGROUPSTATS_TYPE_CGROUP_STATS = 0x1\n\tCGROUPSTATS_CMD_ATTR_UNSPEC   = 0x0\n\tCGROUPSTATS_CMD_ATTR_FD       = 0x1\n)\n\ntype Genlmsghdr struct {\n\tCmd      uint8\n\tVersion  uint8\n\tReserved uint16\n}\n\nconst (\n\tCTRL_CMD_UNSPEC            = 0x0\n\tCTRL_CMD_NEWFAMILY         = 0x1\n\tCTRL_CMD_DELFAMILY         = 0x2\n\tCTRL_CMD_GETFAMILY         = 0x3\n\tCTRL_CMD_NEWOPS            = 0x4\n\tCTRL_CMD_DELOPS            = 0x5\n\tCTRL_CMD_GETOPS            = 0x6\n\tCTRL_CMD_NEWMCAST_GRP      = 0x7\n\tCTRL_CMD_DELMCAST_GRP      = 0x8\n\tCTRL_CMD_GETMCAST_GRP      = 0x9\n\tCTRL_ATTR_UNSPEC           = 0x0\n\tCTRL_ATTR_FAMILY_ID        = 0x1\n\tCTRL_ATTR_FAMILY_NAME      = 0x2\n\tCTRL_ATTR_VERSION          = 0x3\n\tCTRL_ATTR_HDRSIZE          = 0x4\n\tCTRL_ATTR_MAXATTR          = 0x5\n\tCTRL_ATTR_OPS              = 0x6\n\tCTRL_ATTR_MCAST_GROUPS     = 0x7\n\tCTRL_ATTR_OP_UNSPEC        = 0x0\n\tCTRL_ATTR_OP_ID            = 0x1\n\tCTRL_ATTR_OP_FLAGS         = 0x2\n\tCTRL_ATTR_MCAST_GRP_UNSPEC = 0x0\n\tCTRL_ATTR_MCAST_GRP_NAME   = 0x1\n\tCTRL_ATTR_MCAST_GRP_ID     = 0x2\n)\n\ntype cpuMask uint64\n\nconst (\n\t_CPU_SETSIZE = 0x400\n\t_NCPUBITS    = 0x40\n)\n\nconst (\n\tBDADDR_BREDR     = 0x0\n\tBDADDR_LE_PUBLIC = 0x1\n\tBDADDR_LE_RANDOM = 0x2\n)\n\ntype PerfEventAttr struct {\n\tType               uint32\n\tSize               uint32\n\tConfig             uint64\n\tSample             uint64\n\tSample_type        uint64\n\tRead_format        uint64\n\tBits               uint64\n\tWakeup             uint32\n\tBp_type            uint32\n\tExt1               uint64\n\tExt2               uint64\n\tBranch_sample_type uint64\n\tSample_regs_user   uint64\n\tSample_stack_user  uint32\n\tClockid            int32\n\tSample_regs_intr   uint64\n\tAux_watermark      uint32\n\tSample_max_stack   uint16\n\t_                  uint16\n}\n\ntype PerfEventMmapPage struct {\n\tVersion        uint32\n\tCompat_version uint32\n\tLock           uint32\n\tIndex          uint32\n\tOffset         int64\n\tTime_enabled   uint64\n\tTime_running   uint64\n\tCapabilities   uint64\n\tPmc_width      uint16\n\tTime_shift     uint16\n\tTime_mult      uint32\n\tTime_offset    uint64\n\tTime_zero      uint64\n\tSize           uint32\n\t_              [948]uint8\n\tData_head      uint64\n\tData_tail      uint64\n\tData_offset    uint64\n\tData_size      uint64\n\tAux_head       uint64\n\tAux_tail       uint64\n\tAux_offset     uint64\n\tAux_size       uint64\n}\n\nconst (\n\tPerfBitDisabled               uint64 = CBitFieldMaskBit0\n\tPerfBitInherit                       = CBitFieldMaskBit1\n\tPerfBitPinned                        = CBitFieldMaskBit2\n\tPerfBitExclusive                     = CBitFieldMaskBit3\n\tPerfBitExcludeUser                   = CBitFieldMaskBit4\n\tPerfBitExcludeKernel                 = CBitFieldMaskBit5\n\tPerfBitExcludeHv                     = CBitFieldMaskBit6\n\tPerfBitExcludeIdle                   = CBitFieldMaskBit7\n\tPerfBitMmap                          = CBitFieldMaskBit8\n\tPerfBitComm                          = CBitFieldMaskBit9\n\tPerfBitFreq                          = CBitFieldMaskBit10\n\tPerfBitInheritStat                   = CBitFieldMaskBit11\n\tPerfBitEnableOnExec                  = CBitFieldMaskBit12\n\tPerfBitTask                          = CBitFieldMaskBit13\n\tPerfBitWatermark                     = CBitFieldMaskBit14\n\tPerfBitPreciseIPBit1                 = CBitFieldMaskBit15\n\tPerfBitPreciseIPBit2                 = CBitFieldMaskBit16\n\tPerfBitMmapData                      = CBitFieldMaskBit17\n\tPerfBitSampleIDAll                   = CBitFieldMaskBit18\n\tPerfBitExcludeHost                   = CBitFieldMaskBit19\n\tPerfBitExcludeGuest                  = CBitFieldMaskBit20\n\tPerfBitExcludeCallchainKernel        = CBitFieldMaskBit21\n\tPerfBitExcludeCallchainUser          = CBitFieldMaskBit22\n\tPerfBitMmap2                         = CBitFieldMaskBit23\n\tPerfBitCommExec                      = CBitFieldMaskBit24\n\tPerfBitUseClockID                    = CBitFieldMaskBit25\n\tPerfBitContextSwitch                 = CBitFieldMaskBit26\n)\n\nconst (\n\tPERF_TYPE_HARDWARE   = 0x0\n\tPERF_TYPE_SOFTWARE   = 0x1\n\tPERF_TYPE_TRACEPOINT = 0x2\n\tPERF_TYPE_HW_CACHE   = 0x3\n\tPERF_TYPE_RAW        = 0x4\n\tPERF_TYPE_BREAKPOINT = 0x5\n\n\tPERF_COUNT_HW_CPU_CYCLES              = 0x0\n\tPERF_COUNT_HW_INSTRUCTIONS            = 0x1\n\tPERF_COUNT_HW_CACHE_REFERENCES        = 0x2\n\tPERF_COUNT_HW_CACHE_MISSES            = 0x3\n\tPERF_COUNT_HW_BRANCH_INSTRUCTIONS     = 0x4\n\tPERF_COUNT_HW_BRANCH_MISSES           = 0x5\n\tPERF_COUNT_HW_BUS_CYCLES              = 0x6\n\tPERF_COUNT_HW_STALLED_CYCLES_FRONTEND = 0x7\n\tPERF_COUNT_HW_STALLED_CYCLES_BACKEND  = 0x8\n\tPERF_COUNT_HW_REF_CPU_CYCLES          = 0x9\n\n\tPERF_COUNT_HW_CACHE_L1D  = 0x0\n\tPERF_COUNT_HW_CACHE_L1I  = 0x1\n\tPERF_COUNT_HW_CACHE_LL   = 0x2\n\tPERF_COUNT_HW_CACHE_DTLB = 0x3\n\tPERF_COUNT_HW_CACHE_ITLB = 0x4\n\tPERF_COUNT_HW_CACHE_BPU  = 0x5\n\tPERF_COUNT_HW_CACHE_NODE = 0x6\n\n\tPERF_COUNT_HW_CACHE_OP_READ     = 0x0\n\tPERF_COUNT_HW_CACHE_OP_WRITE    = 0x1\n\tPERF_COUNT_HW_CACHE_OP_PREFETCH = 0x2\n\n\tPERF_COUNT_HW_CACHE_RESULT_ACCESS = 0x0\n\tPERF_COUNT_HW_CACHE_RESULT_MISS   = 0x1\n\n\tPERF_COUNT_SW_CPU_CLOCK        = 0x0\n\tPERF_COUNT_SW_TASK_CLOCK       = 0x1\n\tPERF_COUNT_SW_PAGE_FAULTS      = 0x2\n\tPERF_COUNT_SW_CONTEXT_SWITCHES = 0x3\n\tPERF_COUNT_SW_CPU_MIGRATIONS   = 0x4\n\tPERF_COUNT_SW_PAGE_FAULTS_MIN  = 0x5\n\tPERF_COUNT_SW_PAGE_FAULTS_MAJ  = 0x6\n\tPERF_COUNT_SW_ALIGNMENT_FAULTS = 0x7\n\tPERF_COUNT_SW_EMULATION_FAULTS = 0x8\n\tPERF_COUNT_SW_DUMMY            = 0x9\n\tPERF_COUNT_SW_BPF_OUTPUT       = 0xa\n\n\tPERF_SAMPLE_IP           = 0x1\n\tPERF_SAMPLE_TID          = 0x2\n\tPERF_SAMPLE_TIME         = 0x4\n\tPERF_SAMPLE_ADDR         = 0x8\n\tPERF_SAMPLE_READ         = 0x10\n\tPERF_SAMPLE_CALLCHAIN    = 0x20\n\tPERF_SAMPLE_ID           = 0x40\n\tPERF_SAMPLE_CPU          = 0x80\n\tPERF_SAMPLE_PERIOD       = 0x100\n\tPERF_SAMPLE_STREAM_ID    = 0x200\n\tPERF_SAMPLE_RAW          = 0x400\n\tPERF_SAMPLE_BRANCH_STACK = 0x800\n\n\tPERF_SAMPLE_BRANCH_USER       = 0x1\n\tPERF_SAMPLE_BRANCH_KERNEL     = 0x2\n\tPERF_SAMPLE_BRANCH_HV         = 0x4\n\tPERF_SAMPLE_BRANCH_ANY        = 0x8\n\tPERF_SAMPLE_BRANCH_ANY_CALL   = 0x10\n\tPERF_SAMPLE_BRANCH_ANY_RETURN = 0x20\n\tPERF_SAMPLE_BRANCH_IND_CALL   = 0x40\n\tPERF_SAMPLE_BRANCH_ABORT_TX   = 0x80\n\tPERF_SAMPLE_BRANCH_IN_TX      = 0x100\n\tPERF_SAMPLE_BRANCH_NO_TX      = 0x200\n\tPERF_SAMPLE_BRANCH_COND       = 0x400\n\tPERF_SAMPLE_BRANCH_CALL_STACK = 0x800\n\tPERF_SAMPLE_BRANCH_IND_JUMP   = 0x1000\n\tPERF_SAMPLE_BRANCH_CALL       = 0x2000\n\tPERF_SAMPLE_BRANCH_NO_FLAGS   = 0x4000\n\tPERF_SAMPLE_BRANCH_NO_CYCLES  = 0x8000\n\tPERF_SAMPLE_BRANCH_TYPE_SAVE  = 0x10000\n\n\tPERF_FORMAT_TOTAL_TIME_ENABLED = 0x1\n\tPERF_FORMAT_TOTAL_TIME_RUNNING = 0x2\n\tPERF_FORMAT_ID                 = 0x4\n\tPERF_FORMAT_GROUP              = 0x8\n\n\tPERF_RECORD_MMAP            = 0x1\n\tPERF_RECORD_LOST            = 0x2\n\tPERF_RECORD_COMM            = 0x3\n\tPERF_RECORD_EXIT            = 0x4\n\tPERF_RECORD_THROTTLE        = 0x5\n\tPERF_RECORD_UNTHROTTLE      = 0x6\n\tPERF_RECORD_FORK            = 0x7\n\tPERF_RECORD_READ            = 0x8\n\tPERF_RECORD_SAMPLE          = 0x9\n\tPERF_RECORD_MMAP2           = 0xa\n\tPERF_RECORD_AUX             = 0xb\n\tPERF_RECORD_ITRACE_START    = 0xc\n\tPERF_RECORD_LOST_SAMPLES    = 0xd\n\tPERF_RECORD_SWITCH          = 0xe\n\tPERF_RECORD_SWITCH_CPU_WIDE = 0xf\n\tPERF_RECORD_NAMESPACES      = 0x10\n\n\tPERF_CONTEXT_HV     = -0x20\n\tPERF_CONTEXT_KERNEL = -0x80\n\tPERF_CONTEXT_USER   = -0x200\n\n\tPERF_CONTEXT_GUEST        = -0x800\n\tPERF_CONTEXT_GUEST_KERNEL = -0x880\n\tPERF_CONTEXT_GUEST_USER   = -0xa00\n\n\tPERF_FLAG_FD_NO_GROUP = 0x1\n\tPERF_FLAG_FD_OUTPUT   = 0x2\n\tPERF_FLAG_PID_CGROUP  = 0x4\n\tPERF_FLAG_FD_CLOEXEC  = 0x8\n)\n\nconst (\n\tCBitFieldMaskBit0  = 0x1\n\tCBitFieldMaskBit1  = 0x2\n\tCBitFieldMaskBit2  = 0x4\n\tCBitFieldMaskBit3  = 0x8\n\tCBitFieldMaskBit4  = 0x10\n\tCBitFieldMaskBit5  = 0x20\n\tCBitFieldMaskBit6  = 0x40\n\tCBitFieldMaskBit7  = 0x80\n\tCBitFieldMaskBit8  = 0x100\n\tCBitFieldMaskBit9  = 0x200\n\tCBitFieldMaskBit10 = 0x400\n\tCBitFieldMaskBit11 = 0x800\n\tCBitFieldMaskBit12 = 0x1000\n\tCBitFieldMaskBit13 = 0x2000\n\tCBitFieldMaskBit14 = 0x4000\n\tCBitFieldMaskBit15 = 0x8000\n\tCBitFieldMaskBit16 = 0x10000\n\tCBitFieldMaskBit17 = 0x20000\n\tCBitFieldMaskBit18 = 0x40000\n\tCBitFieldMaskBit19 = 0x80000\n\tCBitFieldMaskBit20 = 0x100000\n\tCBitFieldMaskBit21 = 0x200000\n\tCBitFieldMaskBit22 = 0x400000\n\tCBitFieldMaskBit23 = 0x800000\n\tCBitFieldMaskBit24 = 0x1000000\n\tCBitFieldMaskBit25 = 0x2000000\n\tCBitFieldMaskBit26 = 0x4000000\n\tCBitFieldMaskBit27 = 0x8000000\n\tCBitFieldMaskBit28 = 0x10000000\n\tCBitFieldMaskBit29 = 0x20000000\n\tCBitFieldMaskBit30 = 0x40000000\n\tCBitFieldMaskBit31 = 0x80000000\n\tCBitFieldMaskBit32 = 0x100000000\n\tCBitFieldMaskBit33 = 0x200000000\n\tCBitFieldMaskBit34 = 0x400000000\n\tCBitFieldMaskBit35 = 0x800000000\n\tCBitFieldMaskBit36 = 0x1000000000\n\tCBitFieldMaskBit37 = 0x2000000000\n\tCBitFieldMaskBit38 = 0x4000000000\n\tCBitFieldMaskBit39 = 0x8000000000\n\tCBitFieldMaskBit40 = 0x10000000000\n\tCBitFieldMaskBit41 = 0x20000000000\n\tCBitFieldMaskBit42 = 0x40000000000\n\tCBitFieldMaskBit43 = 0x80000000000\n\tCBitFieldMaskBit44 = 0x100000000000\n\tCBitFieldMaskBit45 = 0x200000000000\n\tCBitFieldMaskBit46 = 0x400000000000\n\tCBitFieldMaskBit47 = 0x800000000000\n\tCBitFieldMaskBit48 = 0x1000000000000\n\tCBitFieldMaskBit49 = 0x2000000000000\n\tCBitFieldMaskBit50 = 0x4000000000000\n\tCBitFieldMaskBit51 = 0x8000000000000\n\tCBitFieldMaskBit52 = 0x10000000000000\n\tCBitFieldMaskBit53 = 0x20000000000000\n\tCBitFieldMaskBit54 = 0x40000000000000\n\tCBitFieldMaskBit55 = 0x80000000000000\n\tCBitFieldMaskBit56 = 0x100000000000000\n\tCBitFieldMaskBit57 = 0x200000000000000\n\tCBitFieldMaskBit58 = 0x400000000000000\n\tCBitFieldMaskBit59 = 0x800000000000000\n\tCBitFieldMaskBit60 = 0x1000000000000000\n\tCBitFieldMaskBit61 = 0x2000000000000000\n\tCBitFieldMaskBit62 = 0x4000000000000000\n\tCBitFieldMaskBit63 = 0x8000000000000000\n)\n\ntype SockaddrStorage struct {\n\tFamily uint16\n\t_      [118]int8\n\t_      uint64\n}\n\ntype TCPMD5Sig struct {\n\tAddr      SockaddrStorage\n\tFlags     uint8\n\tPrefixlen uint8\n\tKeylen    uint16\n\t_         uint32\n\tKey       [80]uint8\n}\n\ntype HDDriveCmdHdr struct {\n\tCommand uint8\n\tNumber  uint8\n\tFeature uint8\n\tCount   uint8\n}\n\ntype HDGeometry struct {\n\tHeads     uint8\n\tSectors   uint8\n\tCylinders uint16\n\tStart     uint64\n}\n\ntype HDDriveID struct {\n\tConfig         uint16\n\tCyls           uint16\n\tReserved2      uint16\n\tHeads          uint16\n\tTrack_bytes    uint16\n\tSector_bytes   uint16\n\tSectors        uint16\n\tVendor0        uint16\n\tVendor1        uint16\n\tVendor2        uint16\n\tSerial_no      [20]uint8\n\tBuf_type       uint16\n\tBuf_size       uint16\n\tEcc_bytes      uint16\n\tFw_rev         [8]uint8\n\tModel          [40]uint8\n\tMax_multsect   uint8\n\tVendor3        uint8\n\tDword_io       uint16\n\tVendor4        uint8\n\tCapability     uint8\n\tReserved50     uint16\n\tVendor5        uint8\n\tTPIO           uint8\n\tVendor6        uint8\n\tTDMA           uint8\n\tField_valid    uint16\n\tCur_cyls       uint16\n\tCur_heads      uint16\n\tCur_sectors    uint16\n\tCur_capacity0  uint16\n\tCur_capacity1  uint16\n\tMultsect       uint8\n\tMultsect_valid uint8\n\tLba_capacity   uint32\n\tDma_1word      uint16\n\tDma_mword      uint16\n\tEide_pio_modes uint16\n\tEide_dma_min   uint16\n\tEide_dma_time  uint16\n\tEide_pio       uint16\n\tEide_pio_iordy uint16\n\tWords69_70     [2]uint16\n\tWords71_74     [4]uint16\n\tQueue_depth    uint16\n\tWords76_79     [4]uint16\n\tMajor_rev_num  uint16\n\tMinor_rev_num  uint16\n\tCommand_set_1  uint16\n\tCommand_set_2  uint16\n\tCfsse          uint16\n\tCfs_enable_1   uint16\n\tCfs_enable_2   uint16\n\tCsf_default    uint16\n\tDma_ultra      uint16\n\tTrseuc         uint16\n\tTrsEuc         uint16\n\tCurAPMvalues   uint16\n\tMprc           uint16\n\tHw_config      uint16\n\tAcoustic       uint16\n\tMsrqs          uint16\n\tSxfert         uint16\n\tSal            uint16\n\tSpg            uint32\n\tLba_capacity_2 uint64\n\tWords104_125   [22]uint16\n\tLast_lun       uint16\n\tWord127        uint16\n\tDlf            uint16\n\tCsfo           uint16\n\tWords130_155   [26]uint16\n\tWord156        uint16\n\tWords157_159   [3]uint16\n\tCfa_power      uint16\n\tWords161_175   [15]uint16\n\tWords176_205   [30]uint16\n\tWords206_254   [49]uint16\n\tIntegrity_word uint16\n}\n\ntype Statfs_t struct {\n\tType    int64\n\tBsize   int64\n\tBlocks  uint64\n\tBfree   uint64\n\tBavail  uint64\n\tFiles   uint64\n\tFfree   uint64\n\tFsid    Fsid\n\tNamelen int64\n\tFrsize  int64\n\tFlags   int64\n\tSpare   [4]int64\n}\n\nconst (\n\tST_MANDLOCK    = 0x40\n\tST_NOATIME     = 0x400\n\tST_NODEV       = 0x4\n\tST_NODIRATIME  = 0x800\n\tST_NOEXEC      = 0x8\n\tST_NOSUID      = 0x2\n\tST_RDONLY      = 0x1\n\tST_RELATIME    = 0x1000\n\tST_SYNCHRONOUS = 0x10\n)\n\ntype TpacketHdr struct {\n\tStatus  uint64\n\tLen     uint32\n\tSnaplen uint32\n\tMac     uint16\n\tNet     uint16\n\tSec     uint32\n\tUsec    uint32\n\t_       [4]byte\n}\n\ntype Tpacket2Hdr struct {\n\tStatus    uint32\n\tLen       uint32\n\tSnaplen   uint32\n\tMac       uint16\n\tNet       uint16\n\tSec       uint32\n\tNsec      uint32\n\tVlan_tci  uint16\n\tVlan_tpid uint16\n\t_         [4]uint8\n}\n\ntype Tpacket3Hdr struct {\n\tNext_offset uint32\n\tSec         uint32\n\tNsec        uint32\n\tSnaplen     uint32\n\tLen         uint32\n\tStatus      uint32\n\tMac         uint16\n\tNet         uint16\n\tHv1         TpacketHdrVariant1\n\t_           [8]uint8\n}\n\ntype TpacketHdrVariant1 struct {\n\tRxhash    uint32\n\tVlan_tci  uint32\n\tVlan_tpid uint16\n\t_         uint16\n}\n\ntype TpacketBlockDesc struct {\n\tVersion uint32\n\tTo_priv uint32\n\tHdr     [40]byte\n}\n\ntype TpacketBDTS struct {\n\tSec  uint32\n\tUsec uint32\n}\n\ntype TpacketHdrV1 struct {\n\tBlock_status        uint32\n\tNum_pkts            uint32\n\tOffset_to_first_pkt uint32\n\tBlk_len             uint32\n\tSeq_num             uint64\n\tTs_first_pkt        TpacketBDTS\n\tTs_last_pkt         TpacketBDTS\n}\n\ntype TpacketReq struct {\n\tBlock_size uint32\n\tBlock_nr   uint32\n\tFrame_size uint32\n\tFrame_nr   uint32\n}\n\ntype TpacketReq3 struct {\n\tBlock_size       uint32\n\tBlock_nr         uint32\n\tFrame_size       uint32\n\tFrame_nr         uint32\n\tRetire_blk_tov   uint32\n\tSizeof_priv      uint32\n\tFeature_req_word uint32\n}\n\ntype TpacketStats struct {\n\tPackets uint32\n\tDrops   uint32\n}\n\ntype TpacketStatsV3 struct {\n\tPackets      uint32\n\tDrops        uint32\n\tFreeze_q_cnt uint32\n}\n\ntype TpacketAuxdata struct {\n\tStatus    uint32\n\tLen       uint32\n\tSnaplen   uint32\n\tMac       uint16\n\tNet       uint16\n\tVlan_tci  uint16\n\tVlan_tpid uint16\n}\n\nconst (\n\tTPACKET_V1 = 0x0\n\tTPACKET_V2 = 0x1\n\tTPACKET_V3 = 0x2\n)\n\nconst (\n\tSizeofTpacketHdr  = 0x20\n\tSizeofTpacket2Hdr = 0x20\n\tSizeofTpacket3Hdr = 0x30\n\n\tSizeofTpacketStats   = 0x8\n\tSizeofTpacketStatsV3 = 0xc\n)\n\nconst (\n\tNF_INET_PRE_ROUTING  = 0x0\n\tNF_INET_LOCAL_IN     = 0x1\n\tNF_INET_FORWARD      = 0x2\n\tNF_INET_LOCAL_OUT    = 0x3\n\tNF_INET_POST_ROUTING = 0x4\n\tNF_INET_NUMHOOKS     = 0x5\n)\n\nconst (\n\tNF_NETDEV_INGRESS  = 0x0\n\tNF_NETDEV_NUMHOOKS = 0x1\n)\n\nconst (\n\tNFPROTO_UNSPEC   = 0x0\n\tNFPROTO_INET     = 0x1\n\tNFPROTO_IPV4     = 0x2\n\tNFPROTO_ARP      = 0x3\n\tNFPROTO_NETDEV   = 0x5\n\tNFPROTO_BRIDGE   = 0x7\n\tNFPROTO_IPV6     = 0xa\n\tNFPROTO_DECNET   = 0xc\n\tNFPROTO_NUMPROTO = 0xd\n)\n\ntype Nfgenmsg struct {\n\tNfgen_family uint8\n\tVersion      uint8\n\tRes_id       uint16\n}\n\nconst (\n\tNFNL_BATCH_UNSPEC = 0x0\n\tNFNL_BATCH_GENID  = 0x1\n)\n\nconst (\n\tNFT_REG_VERDICT                   = 0x0\n\tNFT_REG_1                         = 0x1\n\tNFT_REG_2                         = 0x2\n\tNFT_REG_3                         = 0x3\n\tNFT_REG_4                         = 0x4\n\tNFT_REG32_00                      = 0x8\n\tNFT_REG32_01                      = 0x9\n\tNFT_REG32_02                      = 0xa\n\tNFT_REG32_03                      = 0xb\n\tNFT_REG32_04                      = 0xc\n\tNFT_REG32_05                      = 0xd\n\tNFT_REG32_06                      = 0xe\n\tNFT_REG32_07                      = 0xf\n\tNFT_REG32_08                      = 0x10\n\tNFT_REG32_09                      = 0x11\n\tNFT_REG32_10                      = 0x12\n\tNFT_REG32_11                      = 0x13\n\tNFT_REG32_12                      = 0x14\n\tNFT_REG32_13                      = 0x15\n\tNFT_REG32_14                      = 0x16\n\tNFT_REG32_15                      = 0x17\n\tNFT_CONTINUE                      = -0x1\n\tNFT_BREAK                         = -0x2\n\tNFT_JUMP                          = -0x3\n\tNFT_GOTO                          = -0x4\n\tNFT_RETURN                        = -0x5\n\tNFT_MSG_NEWTABLE                  = 0x0\n\tNFT_MSG_GETTABLE                  = 0x1\n\tNFT_MSG_DELTABLE                  = 0x2\n\tNFT_MSG_NEWCHAIN                  = 0x3\n\tNFT_MSG_GETCHAIN                  = 0x4\n\tNFT_MSG_DELCHAIN                  = 0x5\n\tNFT_MSG_NEWRULE                   = 0x6\n\tNFT_MSG_GETRULE                   = 0x7\n\tNFT_MSG_DELRULE                   = 0x8\n\tNFT_MSG_NEWSET                    = 0x9\n\tNFT_MSG_GETSET                    = 0xa\n\tNFT_MSG_DELSET                    = 0xb\n\tNFT_MSG_NEWSETELEM                = 0xc\n\tNFT_MSG_GETSETELEM                = 0xd\n\tNFT_MSG_DELSETELEM                = 0xe\n\tNFT_MSG_NEWGEN                    = 0xf\n\tNFT_MSG_GETGEN                    = 0x10\n\tNFT_MSG_TRACE                     = 0x11\n\tNFT_MSG_NEWOBJ                    = 0x12\n\tNFT_MSG_GETOBJ                    = 0x13\n\tNFT_MSG_DELOBJ                    = 0x14\n\tNFT_MSG_GETOBJ_RESET              = 0x15\n\tNFT_MSG_MAX                       = 0x19\n\tNFTA_LIST_UNPEC                   = 0x0\n\tNFTA_LIST_ELEM                    = 0x1\n\tNFTA_HOOK_UNSPEC                  = 0x0\n\tNFTA_HOOK_HOOKNUM                 = 0x1\n\tNFTA_HOOK_PRIORITY                = 0x2\n\tNFTA_HOOK_DEV                     = 0x3\n\tNFT_TABLE_F_DORMANT               = 0x1\n\tNFTA_TABLE_UNSPEC                 = 0x0\n\tNFTA_TABLE_NAME                   = 0x1\n\tNFTA_TABLE_FLAGS                  = 0x2\n\tNFTA_TABLE_USE                    = 0x3\n\tNFTA_CHAIN_UNSPEC                 = 0x0\n\tNFTA_CHAIN_TABLE                  = 0x1\n\tNFTA_CHAIN_HANDLE                 = 0x2\n\tNFTA_CHAIN_NAME                   = 0x3\n\tNFTA_CHAIN_HOOK                   = 0x4\n\tNFTA_CHAIN_POLICY                 = 0x5\n\tNFTA_CHAIN_USE                    = 0x6\n\tNFTA_CHAIN_TYPE                   = 0x7\n\tNFTA_CHAIN_COUNTERS               = 0x8\n\tNFTA_CHAIN_PAD                    = 0x9\n\tNFTA_RULE_UNSPEC                  = 0x0\n\tNFTA_RULE_TABLE                   = 0x1\n\tNFTA_RULE_CHAIN                   = 0x2\n\tNFTA_RULE_HANDLE                  = 0x3\n\tNFTA_RULE_EXPRESSIONS             = 0x4\n\tNFTA_RULE_COMPAT                  = 0x5\n\tNFTA_RULE_POSITION                = 0x6\n\tNFTA_RULE_USERDATA                = 0x7\n\tNFTA_RULE_PAD                     = 0x8\n\tNFTA_RULE_ID                      = 0x9\n\tNFT_RULE_COMPAT_F_INV             = 0x2\n\tNFT_RULE_COMPAT_F_MASK            = 0x2\n\tNFTA_RULE_COMPAT_UNSPEC           = 0x0\n\tNFTA_RULE_COMPAT_PROTO            = 0x1\n\tNFTA_RULE_COMPAT_FLAGS            = 0x2\n\tNFT_SET_ANONYMOUS                 = 0x1\n\tNFT_SET_CONSTANT                  = 0x2\n\tNFT_SET_INTERVAL                  = 0x4\n\tNFT_SET_MAP                       = 0x8\n\tNFT_SET_TIMEOUT                   = 0x10\n\tNFT_SET_EVAL                      = 0x20\n\tNFT_SET_OBJECT                    = 0x40\n\tNFT_SET_POL_PERFORMANCE           = 0x0\n\tNFT_SET_POL_MEMORY                = 0x1\n\tNFTA_SET_DESC_UNSPEC              = 0x0\n\tNFTA_SET_DESC_SIZE                = 0x1\n\tNFTA_SET_UNSPEC                   = 0x0\n\tNFTA_SET_TABLE                    = 0x1\n\tNFTA_SET_NAME                     = 0x2\n\tNFTA_SET_FLAGS                    = 0x3\n\tNFTA_SET_KEY_TYPE                 = 0x4\n\tNFTA_SET_KEY_LEN                  = 0x5\n\tNFTA_SET_DATA_TYPE                = 0x6\n\tNFTA_SET_DATA_LEN                 = 0x7\n\tNFTA_SET_POLICY                   = 0x8\n\tNFTA_SET_DESC                     = 0x9\n\tNFTA_SET_ID                       = 0xa\n\tNFTA_SET_TIMEOUT                  = 0xb\n\tNFTA_SET_GC_INTERVAL              = 0xc\n\tNFTA_SET_USERDATA                 = 0xd\n\tNFTA_SET_PAD                      = 0xe\n\tNFTA_SET_OBJ_TYPE                 = 0xf\n\tNFT_SET_ELEM_INTERVAL_END         = 0x1\n\tNFTA_SET_ELEM_UNSPEC              = 0x0\n\tNFTA_SET_ELEM_KEY                 = 0x1\n\tNFTA_SET_ELEM_DATA                = 0x2\n\tNFTA_SET_ELEM_FLAGS               = 0x3\n\tNFTA_SET_ELEM_TIMEOUT             = 0x4\n\tNFTA_SET_ELEM_EXPIRATION          = 0x5\n\tNFTA_SET_ELEM_USERDATA            = 0x6\n\tNFTA_SET_ELEM_EXPR                = 0x7\n\tNFTA_SET_ELEM_PAD                 = 0x8\n\tNFTA_SET_ELEM_OBJREF              = 0x9\n\tNFTA_SET_ELEM_LIST_UNSPEC         = 0x0\n\tNFTA_SET_ELEM_LIST_TABLE          = 0x1\n\tNFTA_SET_ELEM_LIST_SET            = 0x2\n\tNFTA_SET_ELEM_LIST_ELEMENTS       = 0x3\n\tNFTA_SET_ELEM_LIST_SET_ID         = 0x4\n\tNFT_DATA_VALUE                    = 0x0\n\tNFT_DATA_VERDICT                  = 0xffffff00\n\tNFTA_DATA_UNSPEC                  = 0x0\n\tNFTA_DATA_VALUE                   = 0x1\n\tNFTA_DATA_VERDICT                 = 0x2\n\tNFTA_VERDICT_UNSPEC               = 0x0\n\tNFTA_VERDICT_CODE                 = 0x1\n\tNFTA_VERDICT_CHAIN                = 0x2\n\tNFTA_EXPR_UNSPEC                  = 0x0\n\tNFTA_EXPR_NAME                    = 0x1\n\tNFTA_EXPR_DATA                    = 0x2\n\tNFTA_IMMEDIATE_UNSPEC             = 0x0\n\tNFTA_IMMEDIATE_DREG               = 0x1\n\tNFTA_IMMEDIATE_DATA               = 0x2\n\tNFTA_BITWISE_UNSPEC               = 0x0\n\tNFTA_BITWISE_SREG                 = 0x1\n\tNFTA_BITWISE_DREG                 = 0x2\n\tNFTA_BITWISE_LEN                  = 0x3\n\tNFTA_BITWISE_MASK                 = 0x4\n\tNFTA_BITWISE_XOR                  = 0x5\n\tNFT_BYTEORDER_NTOH                = 0x0\n\tNFT_BYTEORDER_HTON                = 0x1\n\tNFTA_BYTEORDER_UNSPEC             = 0x0\n\tNFTA_BYTEORDER_SREG               = 0x1\n\tNFTA_BYTEORDER_DREG               = 0x2\n\tNFTA_BYTEORDER_OP                 = 0x3\n\tNFTA_BYTEORDER_LEN                = 0x4\n\tNFTA_BYTEORDER_SIZE               = 0x5\n\tNFT_CMP_EQ                        = 0x0\n\tNFT_CMP_NEQ                       = 0x1\n\tNFT_CMP_LT                        = 0x2\n\tNFT_CMP_LTE                       = 0x3\n\tNFT_CMP_GT                        = 0x4\n\tNFT_CMP_GTE                       = 0x5\n\tNFTA_CMP_UNSPEC                   = 0x0\n\tNFTA_CMP_SREG                     = 0x1\n\tNFTA_CMP_OP                       = 0x2\n\tNFTA_CMP_DATA                     = 0x3\n\tNFT_RANGE_EQ                      = 0x0\n\tNFT_RANGE_NEQ                     = 0x1\n\tNFTA_RANGE_UNSPEC                 = 0x0\n\tNFTA_RANGE_SREG                   = 0x1\n\tNFTA_RANGE_OP                     = 0x2\n\tNFTA_RANGE_FROM_DATA              = 0x3\n\tNFTA_RANGE_TO_DATA                = 0x4\n\tNFT_LOOKUP_F_INV                  = 0x1\n\tNFTA_LOOKUP_UNSPEC                = 0x0\n\tNFTA_LOOKUP_SET                   = 0x1\n\tNFTA_LOOKUP_SREG                  = 0x2\n\tNFTA_LOOKUP_DREG                  = 0x3\n\tNFTA_LOOKUP_SET_ID                = 0x4\n\tNFTA_LOOKUP_FLAGS                 = 0x5\n\tNFT_DYNSET_OP_ADD                 = 0x0\n\tNFT_DYNSET_OP_UPDATE              = 0x1\n\tNFT_DYNSET_F_INV                  = 0x1\n\tNFTA_DYNSET_UNSPEC                = 0x0\n\tNFTA_DYNSET_SET_NAME              = 0x1\n\tNFTA_DYNSET_SET_ID                = 0x2\n\tNFTA_DYNSET_OP                    = 0x3\n\tNFTA_DYNSET_SREG_KEY              = 0x4\n\tNFTA_DYNSET_SREG_DATA             = 0x5\n\tNFTA_DYNSET_TIMEOUT               = 0x6\n\tNFTA_DYNSET_EXPR                  = 0x7\n\tNFTA_DYNSET_PAD                   = 0x8\n\tNFTA_DYNSET_FLAGS                 = 0x9\n\tNFT_PAYLOAD_LL_HEADER             = 0x0\n\tNFT_PAYLOAD_NETWORK_HEADER        = 0x1\n\tNFT_PAYLOAD_TRANSPORT_HEADER      = 0x2\n\tNFT_PAYLOAD_CSUM_NONE             = 0x0\n\tNFT_PAYLOAD_CSUM_INET             = 0x1\n\tNFT_PAYLOAD_L4CSUM_PSEUDOHDR      = 0x1\n\tNFTA_PAYLOAD_UNSPEC               = 0x0\n\tNFTA_PAYLOAD_DREG                 = 0x1\n\tNFTA_PAYLOAD_BASE                 = 0x2\n\tNFTA_PAYLOAD_OFFSET               = 0x3\n\tNFTA_PAYLOAD_LEN                  = 0x4\n\tNFTA_PAYLOAD_SREG                 = 0x5\n\tNFTA_PAYLOAD_CSUM_TYPE            = 0x6\n\tNFTA_PAYLOAD_CSUM_OFFSET          = 0x7\n\tNFTA_PAYLOAD_CSUM_FLAGS           = 0x8\n\tNFT_EXTHDR_F_PRESENT              = 0x1\n\tNFT_EXTHDR_OP_IPV6                = 0x0\n\tNFT_EXTHDR_OP_TCPOPT              = 0x1\n\tNFTA_EXTHDR_UNSPEC                = 0x0\n\tNFTA_EXTHDR_DREG                  = 0x1\n\tNFTA_EXTHDR_TYPE                  = 0x2\n\tNFTA_EXTHDR_OFFSET                = 0x3\n\tNFTA_EXTHDR_LEN                   = 0x4\n\tNFTA_EXTHDR_FLAGS                 = 0x5\n\tNFTA_EXTHDR_OP                    = 0x6\n\tNFTA_EXTHDR_SREG                  = 0x7\n\tNFT_META_LEN                      = 0x0\n\tNFT_META_PROTOCOL                 = 0x1\n\tNFT_META_PRIORITY                 = 0x2\n\tNFT_META_MARK                     = 0x3\n\tNFT_META_IIF                      = 0x4\n\tNFT_META_OIF                      = 0x5\n\tNFT_META_IIFNAME                  = 0x6\n\tNFT_META_OIFNAME                  = 0x7\n\tNFT_META_IIFTYPE                  = 0x8\n\tNFT_META_OIFTYPE                  = 0x9\n\tNFT_META_SKUID                    = 0xa\n\tNFT_META_SKGID                    = 0xb\n\tNFT_META_NFTRACE                  = 0xc\n\tNFT_META_RTCLASSID                = 0xd\n\tNFT_META_SECMARK                  = 0xe\n\tNFT_META_NFPROTO                  = 0xf\n\tNFT_META_L4PROTO                  = 0x10\n\tNFT_META_BRI_IIFNAME              = 0x11\n\tNFT_META_BRI_OIFNAME              = 0x12\n\tNFT_META_PKTTYPE                  = 0x13\n\tNFT_META_CPU                      = 0x14\n\tNFT_META_IIFGROUP                 = 0x15\n\tNFT_META_OIFGROUP                 = 0x16\n\tNFT_META_CGROUP                   = 0x17\n\tNFT_META_PRANDOM                  = 0x18\n\tNFT_RT_CLASSID                    = 0x0\n\tNFT_RT_NEXTHOP4                   = 0x1\n\tNFT_RT_NEXTHOP6                   = 0x2\n\tNFT_RT_TCPMSS                     = 0x3\n\tNFT_HASH_JENKINS                  = 0x0\n\tNFT_HASH_SYM                      = 0x1\n\tNFTA_HASH_UNSPEC                  = 0x0\n\tNFTA_HASH_SREG                    = 0x1\n\tNFTA_HASH_DREG                    = 0x2\n\tNFTA_HASH_LEN                     = 0x3\n\tNFTA_HASH_MODULUS                 = 0x4\n\tNFTA_HASH_SEED                    = 0x5\n\tNFTA_HASH_OFFSET                  = 0x6\n\tNFTA_HASH_TYPE                    = 0x7\n\tNFTA_META_UNSPEC                  = 0x0\n\tNFTA_META_DREG                    = 0x1\n\tNFTA_META_KEY                     = 0x2\n\tNFTA_META_SREG                    = 0x3\n\tNFTA_RT_UNSPEC                    = 0x0\n\tNFTA_RT_DREG                      = 0x1\n\tNFTA_RT_KEY                       = 0x2\n\tNFT_CT_STATE                      = 0x0\n\tNFT_CT_DIRECTION                  = 0x1\n\tNFT_CT_STATUS                     = 0x2\n\tNFT_CT_MARK                       = 0x3\n\tNFT_CT_SECMARK                    = 0x4\n\tNFT_CT_EXPIRATION                 = 0x5\n\tNFT_CT_HELPER                     = 0x6\n\tNFT_CT_L3PROTOCOL                 = 0x7\n\tNFT_CT_SRC                        = 0x8\n\tNFT_CT_DST                        = 0x9\n\tNFT_CT_PROTOCOL                   = 0xa\n\tNFT_CT_PROTO_SRC                  = 0xb\n\tNFT_CT_PROTO_DST                  = 0xc\n\tNFT_CT_LABELS                     = 0xd\n\tNFT_CT_PKTS                       = 0xe\n\tNFT_CT_BYTES                      = 0xf\n\tNFT_CT_AVGPKT                     = 0x10\n\tNFT_CT_ZONE                       = 0x11\n\tNFT_CT_EVENTMASK                  = 0x12\n\tNFTA_CT_UNSPEC                    = 0x0\n\tNFTA_CT_DREG                      = 0x1\n\tNFTA_CT_KEY                       = 0x2\n\tNFTA_CT_DIRECTION                 = 0x3\n\tNFTA_CT_SREG                      = 0x4\n\tNFT_LIMIT_PKTS                    = 0x0\n\tNFT_LIMIT_PKT_BYTES               = 0x1\n\tNFT_LIMIT_F_INV                   = 0x1\n\tNFTA_LIMIT_UNSPEC                 = 0x0\n\tNFTA_LIMIT_RATE                   = 0x1\n\tNFTA_LIMIT_UNIT                   = 0x2\n\tNFTA_LIMIT_BURST                  = 0x3\n\tNFTA_LIMIT_TYPE                   = 0x4\n\tNFTA_LIMIT_FLAGS                  = 0x5\n\tNFTA_LIMIT_PAD                    = 0x6\n\tNFTA_COUNTER_UNSPEC               = 0x0\n\tNFTA_COUNTER_BYTES                = 0x1\n\tNFTA_COUNTER_PACKETS              = 0x2\n\tNFTA_COUNTER_PAD                  = 0x3\n\tNFTA_LOG_UNSPEC                   = 0x0\n\tNFTA_LOG_GROUP                    = 0x1\n\tNFTA_LOG_PREFIX                   = 0x2\n\tNFTA_LOG_SNAPLEN                  = 0x3\n\tNFTA_LOG_QTHRESHOLD               = 0x4\n\tNFTA_LOG_LEVEL                    = 0x5\n\tNFTA_LOG_FLAGS                    = 0x6\n\tNFTA_QUEUE_UNSPEC                 = 0x0\n\tNFTA_QUEUE_NUM                    = 0x1\n\tNFTA_QUEUE_TOTAL                  = 0x2\n\tNFTA_QUEUE_FLAGS                  = 0x3\n\tNFTA_QUEUE_SREG_QNUM              = 0x4\n\tNFT_QUOTA_F_INV                   = 0x1\n\tNFT_QUOTA_F_DEPLETED              = 0x2\n\tNFTA_QUOTA_UNSPEC                 = 0x0\n\tNFTA_QUOTA_BYTES                  = 0x1\n\tNFTA_QUOTA_FLAGS                  = 0x2\n\tNFTA_QUOTA_PAD                    = 0x3\n\tNFTA_QUOTA_CONSUMED               = 0x4\n\tNFT_REJECT_ICMP_UNREACH           = 0x0\n\tNFT_REJECT_TCP_RST                = 0x1\n\tNFT_REJECT_ICMPX_UNREACH          = 0x2\n\tNFT_REJECT_ICMPX_NO_ROUTE         = 0x0\n\tNFT_REJECT_ICMPX_PORT_UNREACH     = 0x1\n\tNFT_REJECT_ICMPX_HOST_UNREACH     = 0x2\n\tNFT_REJECT_ICMPX_ADMIN_PROHIBITED = 0x3\n\tNFTA_REJECT_UNSPEC                = 0x0\n\tNFTA_REJECT_TYPE                  = 0x1\n\tNFTA_REJECT_ICMP_CODE             = 0x2\n\tNFT_NAT_SNAT                      = 0x0\n\tNFT_NAT_DNAT                      = 0x1\n\tNFTA_NAT_UNSPEC                   = 0x0\n\tNFTA_NAT_TYPE                     = 0x1\n\tNFTA_NAT_FAMILY                   = 0x2\n\tNFTA_NAT_REG_ADDR_MIN             = 0x3\n\tNFTA_NAT_REG_ADDR_MAX             = 0x4\n\tNFTA_NAT_REG_PROTO_MIN            = 0x5\n\tNFTA_NAT_REG_PROTO_MAX            = 0x6\n\tNFTA_NAT_FLAGS                    = 0x7\n\tNFTA_MASQ_UNSPEC                  = 0x0\n\tNFTA_MASQ_FLAGS                   = 0x1\n\tNFTA_MASQ_REG_PROTO_MIN           = 0x2\n\tNFTA_MASQ_REG_PROTO_MAX           = 0x3\n\tNFTA_REDIR_UNSPEC                 = 0x0\n\tNFTA_REDIR_REG_PROTO_MIN          = 0x1\n\tNFTA_REDIR_REG_PROTO_MAX          = 0x2\n\tNFTA_REDIR_FLAGS                  = 0x3\n\tNFTA_DUP_UNSPEC                   = 0x0\n\tNFTA_DUP_SREG_ADDR                = 0x1\n\tNFTA_DUP_SREG_DEV                 = 0x2\n\tNFTA_FWD_UNSPEC                   = 0x0\n\tNFTA_FWD_SREG_DEV                 = 0x1\n\tNFTA_OBJREF_UNSPEC                = 0x0\n\tNFTA_OBJREF_IMM_TYPE              = 0x1\n\tNFTA_OBJREF_IMM_NAME              = 0x2\n\tNFTA_OBJREF_SET_SREG              = 0x3\n\tNFTA_OBJREF_SET_NAME              = 0x4\n\tNFTA_OBJREF_SET_ID                = 0x5\n\tNFTA_GEN_UNSPEC                   = 0x0\n\tNFTA_GEN_ID                       = 0x1\n\tNFTA_GEN_PROC_PID                 = 0x2\n\tNFTA_GEN_PROC_NAME                = 0x3\n\tNFTA_FIB_UNSPEC                   = 0x0\n\tNFTA_FIB_DREG                     = 0x1\n\tNFTA_FIB_RESULT                   = 0x2\n\tNFTA_FIB_FLAGS                    = 0x3\n\tNFT_FIB_RESULT_UNSPEC             = 0x0\n\tNFT_FIB_RESULT_OIF                = 0x1\n\tNFT_FIB_RESULT_OIFNAME            = 0x2\n\tNFT_FIB_RESULT_ADDRTYPE           = 0x3\n\tNFTA_FIB_F_SADDR                  = 0x1\n\tNFTA_FIB_F_DADDR                  = 0x2\n\tNFTA_FIB_F_MARK                   = 0x4\n\tNFTA_FIB_F_IIF                    = 0x8\n\tNFTA_FIB_F_OIF                    = 0x10\n\tNFTA_FIB_F_PRESENT                = 0x20\n\tNFTA_CT_HELPER_UNSPEC             = 0x0\n\tNFTA_CT_HELPER_NAME               = 0x1\n\tNFTA_CT_HELPER_L3PROTO            = 0x2\n\tNFTA_CT_HELPER_L4PROTO            = 0x3\n\tNFTA_OBJ_UNSPEC                   = 0x0\n\tNFTA_OBJ_TABLE                    = 0x1\n\tNFTA_OBJ_NAME                     = 0x2\n\tNFTA_OBJ_TYPE                     = 0x3\n\tNFTA_OBJ_DATA                     = 0x4\n\tNFTA_OBJ_USE                      = 0x5\n\tNFTA_TRACE_UNSPEC                 = 0x0\n\tNFTA_TRACE_TABLE                  = 0x1\n\tNFTA_TRACE_CHAIN                  = 0x2\n\tNFTA_TRACE_RULE_HANDLE            = 0x3\n\tNFTA_TRACE_TYPE                   = 0x4\n\tNFTA_TRACE_VERDICT                = 0x5\n\tNFTA_TRACE_ID                     = 0x6\n\tNFTA_TRACE_LL_HEADER              = 0x7\n\tNFTA_TRACE_NETWORK_HEADER         = 0x8\n\tNFTA_TRACE_TRANSPORT_HEADER       = 0x9\n\tNFTA_TRACE_IIF                    = 0xa\n\tNFTA_TRACE_IIFTYPE                = 0xb\n\tNFTA_TRACE_OIF                    = 0xc\n\tNFTA_TRACE_OIFTYPE                = 0xd\n\tNFTA_TRACE_MARK                   = 0xe\n\tNFTA_TRACE_NFPROTO                = 0xf\n\tNFTA_TRACE_POLICY                 = 0x10\n\tNFTA_TRACE_PAD                    = 0x11\n\tNFT_TRACETYPE_UNSPEC              = 0x0\n\tNFT_TRACETYPE_POLICY              = 0x1\n\tNFT_TRACETYPE_RETURN              = 0x2\n\tNFT_TRACETYPE_RULE                = 0x3\n\tNFTA_NG_UNSPEC                    = 0x0\n\tNFTA_NG_DREG                      = 0x1\n\tNFTA_NG_MODULUS                   = 0x2\n\tNFTA_NG_TYPE                      = 0x3\n\tNFTA_NG_OFFSET                    = 0x4\n\tNFT_NG_INCREMENTAL                = 0x0\n\tNFT_NG_RANDOM                     = 0x1\n)\n\ntype RTCTime struct {\n\tSec   int32\n\tMin   int32\n\tHour  int32\n\tMday  int32\n\tMon   int32\n\tYear  int32\n\tWday  int32\n\tYday  int32\n\tIsdst int32\n}\n\ntype RTCWkAlrm struct {\n\tEnabled uint8\n\tPending uint8\n\tTime    RTCTime\n}\n\ntype RTCPLLInfo struct {\n\tCtrl    int32\n\tValue   int32\n\tMax     int32\n\tMin     int32\n\tPosmult int32\n\tNegmult int32\n\tClock   int64\n}\n\ntype BlkpgIoctlArg struct {\n\tOp      int32\n\tFlags   int32\n\tDatalen int32\n\tData    *byte\n}\n\ntype BlkpgPartition struct {\n\tStart   int64\n\tLength  int64\n\tPno     int32\n\tDevname [64]uint8\n\tVolname [64]uint8\n\t_       [4]byte\n}\n\nconst (\n\tBLKPG                  = 0x1269\n\tBLKPG_ADD_PARTITION    = 0x1\n\tBLKPG_DEL_PARTITION    = 0x2\n\tBLKPG_RESIZE_PARTITION = 0x3\n)\n\nconst (\n\tNETNSA_NONE = 0x0\n\tNETNSA_NSID = 0x1\n\tNETNSA_PID  = 0x2\n\tNETNSA_FD   = 0x3\n)\n\ntype XDPRingOffset struct {\n\tProducer uint64\n\tConsumer uint64\n\tDesc     uint64\n}\n\ntype XDPMmapOffsets struct {\n\tRx XDPRingOffset\n\tTx XDPRingOffset\n\tFr XDPRingOffset\n\tCr XDPRingOffset\n}\n\ntype XDPUmemReg struct {\n\tAddr     uint64\n\tLen      uint64\n\tSize     uint32\n\tHeadroom uint32\n}\n\ntype XDPStatistics struct {\n\tRx_dropped       uint64\n\tRx_invalid_descs uint64\n\tTx_invalid_descs uint64\n}\n\ntype XDPDesc struct {\n\tAddr    uint64\n\tLen     uint32\n\tOptions uint32\n}\n\nconst (\n\tNCSI_CMD_UNSPEC                 = 0x0\n\tNCSI_CMD_PKG_INFO               = 0x1\n\tNCSI_CMD_SET_INTERFACE          = 0x2\n\tNCSI_CMD_CLEAR_INTERFACE        = 0x3\n\tNCSI_ATTR_UNSPEC                = 0x0\n\tNCSI_ATTR_IFINDEX               = 0x1\n\tNCSI_ATTR_PACKAGE_LIST          = 0x2\n\tNCSI_ATTR_PACKAGE_ID            = 0x3\n\tNCSI_ATTR_CHANNEL_ID            = 0x4\n\tNCSI_PKG_ATTR_UNSPEC            = 0x0\n\tNCSI_PKG_ATTR                   = 0x1\n\tNCSI_PKG_ATTR_ID                = 0x2\n\tNCSI_PKG_ATTR_FORCED            = 0x3\n\tNCSI_PKG_ATTR_CHANNEL_LIST      = 0x4\n\tNCSI_CHANNEL_ATTR_UNSPEC        = 0x0\n\tNCSI_CHANNEL_ATTR               = 0x1\n\tNCSI_CHANNEL_ATTR_ID            = 0x2\n\tNCSI_CHANNEL_ATTR_VERSION_MAJOR = 0x3\n\tNCSI_CHANNEL_ATTR_VERSION_MINOR = 0x4\n\tNCSI_CHANNEL_ATTR_VERSION_STR   = 0x5\n\tNCSI_CHANNEL_ATTR_LINK_STATE    = 0x6\n\tNCSI_CHANNEL_ATTR_ACTIVE        = 0x7\n\tNCSI_CHANNEL_ATTR_FORCED        = 0x8\n\tNCSI_CHANNEL_ATTR_VLAN_LIST     = 0x9\n\tNCSI_CHANNEL_ATTR_VLAN_ID       = 0xa\n)\n\ntype ScmTimestamping struct {\n\tTs [3]Timespec\n}\n\nconst (\n\tSOF_TIMESTAMPING_TX_HARDWARE  = 0x1\n\tSOF_TIMESTAMPING_TX_SOFTWARE  = 0x2\n\tSOF_TIMESTAMPING_RX_HARDWARE  = 0x4\n\tSOF_TIMESTAMPING_RX_SOFTWARE  = 0x8\n\tSOF_TIMESTAMPING_SOFTWARE     = 0x10\n\tSOF_TIMESTAMPING_SYS_HARDWARE = 0x20\n\tSOF_TIMESTAMPING_RAW_HARDWARE = 0x40\n\tSOF_TIMESTAMPING_OPT_ID       = 0x80\n\tSOF_TIMESTAMPING_TX_SCHED     = 0x100\n\tSOF_TIMESTAMPING_TX_ACK       = 0x200\n\tSOF_TIMESTAMPING_OPT_CMSG     = 0x400\n\tSOF_TIMESTAMPING_OPT_TSONLY   = 0x800\n\tSOF_TIMESTAMPING_OPT_STATS    = 0x1000\n\tSOF_TIMESTAMPING_OPT_PKTINFO  = 0x2000\n\tSOF_TIMESTAMPING_OPT_TX_SWHW  = 0x4000\n\n\tSOF_TIMESTAMPING_LAST = 0x4000\n\tSOF_TIMESTAMPING_MASK = 0x7fff\n\n\tSCM_TSTAMP_SND   = 0x0\n\tSCM_TSTAMP_SCHED = 0x1\n\tSCM_TSTAMP_ACK   = 0x2\n)\n\ntype SockExtendedErr struct {\n\tErrno  uint32\n\tOrigin uint8\n\tType   uint8\n\tCode   uint8\n\tPad    uint8\n\tInfo   uint32\n\tData   uint32\n}\n\ntype FanotifyEventMetadata struct {\n\tEvent_len    uint32\n\tVers         uint8\n\tReserved     uint8\n\tMetadata_len uint16\n\tMask         uint64\n\tFd           int32\n\tPid          int32\n}\n\ntype FanotifyResponse struct {\n\tFd       int32\n\tResponse uint32\n}\n\nconst (\n\tCRYPTO_MSG_BASE      = 0x10\n\tCRYPTO_MSG_NEWALG    = 0x10\n\tCRYPTO_MSG_DELALG    = 0x11\n\tCRYPTO_MSG_UPDATEALG = 0x12\n\tCRYPTO_MSG_GETALG    = 0x13\n\tCRYPTO_MSG_DELRNG    = 0x14\n\tCRYPTO_MSG_GETSTAT   = 0x15\n)\n\nconst (\n\tCRYPTOCFGA_UNSPEC           = 0x0\n\tCRYPTOCFGA_PRIORITY_VAL     = 0x1\n\tCRYPTOCFGA_REPORT_LARVAL    = 0x2\n\tCRYPTOCFGA_REPORT_HASH      = 0x3\n\tCRYPTOCFGA_REPORT_BLKCIPHER = 0x4\n\tCRYPTOCFGA_REPORT_AEAD      = 0x5\n\tCRYPTOCFGA_REPORT_COMPRESS  = 0x6\n\tCRYPTOCFGA_REPORT_RNG       = 0x7\n\tCRYPTOCFGA_REPORT_CIPHER    = 0x8\n\tCRYPTOCFGA_REPORT_AKCIPHER  = 0x9\n\tCRYPTOCFGA_REPORT_KPP       = 0xa\n\tCRYPTOCFGA_REPORT_ACOMP     = 0xb\n\tCRYPTOCFGA_STAT_LARVAL      = 0xc\n\tCRYPTOCFGA_STAT_HASH        = 0xd\n\tCRYPTOCFGA_STAT_BLKCIPHER   = 0xe\n\tCRYPTOCFGA_STAT_AEAD        = 0xf\n\tCRYPTOCFGA_STAT_COMPRESS    = 0x10\n\tCRYPTOCFGA_STAT_RNG         = 0x11\n\tCRYPTOCFGA_STAT_CIPHER      = 0x12\n\tCRYPTOCFGA_STAT_AKCIPHER    = 0x13\n\tCRYPTOCFGA_STAT_KPP         = 0x14\n\tCRYPTOCFGA_STAT_ACOMP       = 0x15\n)\n\ntype CryptoUserAlg struct {\n\tName        [64]int8\n\tDriver_name [64]int8\n\tModule_name [64]int8\n\tType        uint32\n\tMask        uint32\n\tRefcnt      uint32\n\tFlags       uint32\n}\n\ntype CryptoStatAEAD struct {\n\tType         [64]int8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatAKCipher struct {\n\tType         [64]int8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tVerify_cnt   uint64\n\tSign_cnt     uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatCipher struct {\n\tType         [64]int8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatCompress struct {\n\tType            [64]int8\n\tCompress_cnt    uint64\n\tCompress_tlen   uint64\n\tDecompress_cnt  uint64\n\tDecompress_tlen uint64\n\tErr_cnt         uint64\n}\n\ntype CryptoStatHash struct {\n\tType      [64]int8\n\tHash_cnt  uint64\n\tHash_tlen uint64\n\tErr_cnt   uint64\n}\n\ntype CryptoStatKPP struct {\n\tType                      [64]int8\n\tSetsecret_cnt             uint64\n\tGenerate_public_key_cnt   uint64\n\tCompute_shared_secret_cnt uint64\n\tErr_cnt                   uint64\n}\n\ntype CryptoStatRNG struct {\n\tType          [64]int8\n\tGenerate_cnt  uint64\n\tGenerate_tlen uint64\n\tSeed_cnt      uint64\n\tErr_cnt       uint64\n}\n\ntype CryptoStatLarval struct {\n\tType [64]int8\n}\n\ntype CryptoReportLarval struct {\n\tType [64]int8\n}\n\ntype CryptoReportHash struct {\n\tType       [64]int8\n\tBlocksize  uint32\n\tDigestsize uint32\n}\n\ntype CryptoReportCipher struct {\n\tType        [64]int8\n\tBlocksize   uint32\n\tMin_keysize uint32\n\tMax_keysize uint32\n}\n\ntype CryptoReportBlkCipher struct {\n\tType        [64]int8\n\tGeniv       [64]int8\n\tBlocksize   uint32\n\tMin_keysize uint32\n\tMax_keysize uint32\n\tIvsize      uint32\n}\n\ntype CryptoReportAEAD struct {\n\tType        [64]int8\n\tGeniv       [64]int8\n\tBlocksize   uint32\n\tMaxauthsize uint32\n\tIvsize      uint32\n}\n\ntype CryptoReportComp struct {\n\tType [64]int8\n}\n\ntype CryptoReportRNG struct {\n\tType     [64]int8\n\tSeedsize uint32\n}\n\ntype CryptoReportAKCipher struct {\n\tType [64]int8\n}\n\ntype CryptoReportKPP struct {\n\tType [64]int8\n}\n\ntype CryptoReportAcomp struct {\n\tType [64]int8\n}\n\nconst (\n\tBPF_REG_0                           = 0x0\n\tBPF_REG_1                           = 0x1\n\tBPF_REG_2                           = 0x2\n\tBPF_REG_3                           = 0x3\n\tBPF_REG_4                           = 0x4\n\tBPF_REG_5                           = 0x5\n\tBPF_REG_6                           = 0x6\n\tBPF_REG_7                           = 0x7\n\tBPF_REG_8                           = 0x8\n\tBPF_REG_9                           = 0x9\n\tBPF_REG_10                          = 0xa\n\tBPF_MAP_CREATE                      = 0x0\n\tBPF_MAP_LOOKUP_ELEM                 = 0x1\n\tBPF_MAP_UPDATE_ELEM                 = 0x2\n\tBPF_MAP_DELETE_ELEM                 = 0x3\n\tBPF_MAP_GET_NEXT_KEY                = 0x4\n\tBPF_PROG_LOAD                       = 0x5\n\tBPF_OBJ_PIN                         = 0x6\n\tBPF_OBJ_GET                         = 0x7\n\tBPF_PROG_ATTACH                     = 0x8\n\tBPF_PROG_DETACH                     = 0x9\n\tBPF_PROG_TEST_RUN                   = 0xa\n\tBPF_PROG_GET_NEXT_ID                = 0xb\n\tBPF_MAP_GET_NEXT_ID                 = 0xc\n\tBPF_PROG_GET_FD_BY_ID               = 0xd\n\tBPF_MAP_GET_FD_BY_ID                = 0xe\n\tBPF_OBJ_GET_INFO_BY_FD              = 0xf\n\tBPF_PROG_QUERY                      = 0x10\n\tBPF_RAW_TRACEPOINT_OPEN             = 0x11\n\tBPF_BTF_LOAD                        = 0x12\n\tBPF_BTF_GET_FD_BY_ID                = 0x13\n\tBPF_TASK_FD_QUERY                   = 0x14\n\tBPF_MAP_LOOKUP_AND_DELETE_ELEM      = 0x15\n\tBPF_MAP_TYPE_UNSPEC                 = 0x0\n\tBPF_MAP_TYPE_HASH                   = 0x1\n\tBPF_MAP_TYPE_ARRAY                  = 0x2\n\tBPF_MAP_TYPE_PROG_ARRAY             = 0x3\n\tBPF_MAP_TYPE_PERF_EVENT_ARRAY       = 0x4\n\tBPF_MAP_TYPE_PERCPU_HASH            = 0x5\n\tBPF_MAP_TYPE_PERCPU_ARRAY           = 0x6\n\tBPF_MAP_TYPE_STACK_TRACE            = 0x7\n\tBPF_MAP_TYPE_CGROUP_ARRAY           = 0x8\n\tBPF_MAP_TYPE_LRU_HASH               = 0x9\n\tBPF_MAP_TYPE_LRU_PERCPU_HASH        = 0xa\n\tBPF_MAP_TYPE_LPM_TRIE               = 0xb\n\tBPF_MAP_TYPE_ARRAY_OF_MAPS          = 0xc\n\tBPF_MAP_TYPE_HASH_OF_MAPS           = 0xd\n\tBPF_MAP_TYPE_DEVMAP                 = 0xe\n\tBPF_MAP_TYPE_SOCKMAP                = 0xf\n\tBPF_MAP_TYPE_CPUMAP                 = 0x10\n\tBPF_MAP_TYPE_XSKMAP                 = 0x11\n\tBPF_MAP_TYPE_SOCKHASH               = 0x12\n\tBPF_MAP_TYPE_CGROUP_STORAGE         = 0x13\n\tBPF_MAP_TYPE_REUSEPORT_SOCKARRAY    = 0x14\n\tBPF_MAP_TYPE_PERCPU_CGROUP_STORAGE  = 0x15\n\tBPF_MAP_TYPE_QUEUE                  = 0x16\n\tBPF_MAP_TYPE_STACK                  = 0x17\n\tBPF_PROG_TYPE_UNSPEC                = 0x0\n\tBPF_PROG_TYPE_SOCKET_FILTER         = 0x1\n\tBPF_PROG_TYPE_KPROBE                = 0x2\n\tBPF_PROG_TYPE_SCHED_CLS             = 0x3\n\tBPF_PROG_TYPE_SCHED_ACT             = 0x4\n\tBPF_PROG_TYPE_TRACEPOINT            = 0x5\n\tBPF_PROG_TYPE_XDP                   = 0x6\n\tBPF_PROG_TYPE_PERF_EVENT            = 0x7\n\tBPF_PROG_TYPE_CGROUP_SKB            = 0x8\n\tBPF_PROG_TYPE_CGROUP_SOCK           = 0x9\n\tBPF_PROG_TYPE_LWT_IN                = 0xa\n\tBPF_PROG_TYPE_LWT_OUT               = 0xb\n\tBPF_PROG_TYPE_LWT_XMIT              = 0xc\n\tBPF_PROG_TYPE_SOCK_OPS              = 0xd\n\tBPF_PROG_TYPE_SK_SKB                = 0xe\n\tBPF_PROG_TYPE_CGROUP_DEVICE         = 0xf\n\tBPF_PROG_TYPE_SK_MSG                = 0x10\n\tBPF_PROG_TYPE_RAW_TRACEPOINT        = 0x11\n\tBPF_PROG_TYPE_CGROUP_SOCK_ADDR      = 0x12\n\tBPF_PROG_TYPE_LWT_SEG6LOCAL         = 0x13\n\tBPF_PROG_TYPE_LIRC_MODE2            = 0x14\n\tBPF_PROG_TYPE_SK_REUSEPORT          = 0x15\n\tBPF_PROG_TYPE_FLOW_DISSECTOR        = 0x16\n\tBPF_CGROUP_INET_INGRESS             = 0x0\n\tBPF_CGROUP_INET_EGRESS              = 0x1\n\tBPF_CGROUP_INET_SOCK_CREATE         = 0x2\n\tBPF_CGROUP_SOCK_OPS                 = 0x3\n\tBPF_SK_SKB_STREAM_PARSER            = 0x4\n\tBPF_SK_SKB_STREAM_VERDICT           = 0x5\n\tBPF_CGROUP_DEVICE                   = 0x6\n\tBPF_SK_MSG_VERDICT                  = 0x7\n\tBPF_CGROUP_INET4_BIND               = 0x8\n\tBPF_CGROUP_INET6_BIND               = 0x9\n\tBPF_CGROUP_INET4_CONNECT            = 0xa\n\tBPF_CGROUP_INET6_CONNECT            = 0xb\n\tBPF_CGROUP_INET4_POST_BIND          = 0xc\n\tBPF_CGROUP_INET6_POST_BIND          = 0xd\n\tBPF_CGROUP_UDP4_SENDMSG             = 0xe\n\tBPF_CGROUP_UDP6_SENDMSG             = 0xf\n\tBPF_LIRC_MODE2                      = 0x10\n\tBPF_FLOW_DISSECTOR                  = 0x11\n\tBPF_STACK_BUILD_ID_EMPTY            = 0x0\n\tBPF_STACK_BUILD_ID_VALID            = 0x1\n\tBPF_STACK_BUILD_ID_IP               = 0x2\n\tBPF_ADJ_ROOM_NET                    = 0x0\n\tBPF_HDR_START_MAC                   = 0x0\n\tBPF_HDR_START_NET                   = 0x1\n\tBPF_LWT_ENCAP_SEG6                  = 0x0\n\tBPF_LWT_ENCAP_SEG6_INLINE           = 0x1\n\tBPF_OK                              = 0x0\n\tBPF_DROP                            = 0x2\n\tBPF_REDIRECT                        = 0x7\n\tBPF_SOCK_OPS_VOID                   = 0x0\n\tBPF_SOCK_OPS_TIMEOUT_INIT           = 0x1\n\tBPF_SOCK_OPS_RWND_INIT              = 0x2\n\tBPF_SOCK_OPS_TCP_CONNECT_CB         = 0x3\n\tBPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB  = 0x4\n\tBPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB = 0x5\n\tBPF_SOCK_OPS_NEEDS_ECN              = 0x6\n\tBPF_SOCK_OPS_BASE_RTT               = 0x7\n\tBPF_SOCK_OPS_RTO_CB                 = 0x8\n\tBPF_SOCK_OPS_RETRANS_CB             = 0x9\n\tBPF_SOCK_OPS_STATE_CB               = 0xa\n\tBPF_SOCK_OPS_TCP_LISTEN_CB          = 0xb\n\tBPF_TCP_ESTABLISHED                 = 0x1\n\tBPF_TCP_SYN_SENT                    = 0x2\n\tBPF_TCP_SYN_RECV                    = 0x3\n\tBPF_TCP_FIN_WAIT1                   = 0x4\n\tBPF_TCP_FIN_WAIT2                   = 0x5\n\tBPF_TCP_TIME_WAIT                   = 0x6\n\tBPF_TCP_CLOSE                       = 0x7\n\tBPF_TCP_CLOSE_WAIT                  = 0x8\n\tBPF_TCP_LAST_ACK                    = 0x9\n\tBPF_TCP_LISTEN                      = 0xa\n\tBPF_TCP_CLOSING                     = 0xb\n\tBPF_TCP_NEW_SYN_RECV                = 0xc\n\tBPF_TCP_MAX_STATES                  = 0xd\n\tBPF_FIB_LKUP_RET_SUCCESS            = 0x0\n\tBPF_FIB_LKUP_RET_BLACKHOLE          = 0x1\n\tBPF_FIB_LKUP_RET_UNREACHABLE        = 0x2\n\tBPF_FIB_LKUP_RET_PROHIBIT           = 0x3\n\tBPF_FIB_LKUP_RET_NOT_FWDED          = 0x4\n\tBPF_FIB_LKUP_RET_FWD_DISABLED       = 0x5\n\tBPF_FIB_LKUP_RET_UNSUPP_LWT         = 0x6\n\tBPF_FIB_LKUP_RET_NO_NEIGH           = 0x7\n\tBPF_FIB_LKUP_RET_FRAG_NEEDED        = 0x8\n\tBPF_FD_TYPE_RAW_TRACEPOINT          = 0x0\n\tBPF_FD_TYPE_TRACEPOINT              = 0x1\n\tBPF_FD_TYPE_KPROBE                  = 0x2\n\tBPF_FD_TYPE_KRETPROBE               = 0x3\n\tBPF_FD_TYPE_UPROBE                  = 0x4\n\tBPF_FD_TYPE_URETPROBE               = 0x5\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_linux_arm.go",
    "content": "// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build arm,linux\n\npackage unix\n\nconst (\n\tSizeofPtr      = 0x4\n\tSizeofShort    = 0x2\n\tSizeofInt      = 0x4\n\tSizeofLong     = 0x4\n\tSizeofLongLong = 0x8\n\tPathMax        = 0x1000\n)\n\ntype (\n\t_C_short     int16\n\t_C_int       int32\n\t_C_long      int32\n\t_C_long_long int64\n)\n\ntype Timespec struct {\n\tSec  int32\n\tNsec int32\n}\n\ntype Timeval struct {\n\tSec  int32\n\tUsec int32\n}\n\ntype Timex struct {\n\tModes     uint32\n\tOffset    int32\n\tFreq      int32\n\tMaxerror  int32\n\tEsterror  int32\n\tStatus    int32\n\tConstant  int32\n\tPrecision int32\n\tTolerance int32\n\tTime      Timeval\n\tTick      int32\n\tPpsfreq   int32\n\tJitter    int32\n\tShift     int32\n\tStabil    int32\n\tJitcnt    int32\n\tCalcnt    int32\n\tErrcnt    int32\n\tStbcnt    int32\n\tTai       int32\n\t_         [44]byte\n}\n\ntype Time_t int32\n\ntype Tms struct {\n\tUtime  int32\n\tStime  int32\n\tCutime int32\n\tCstime int32\n}\n\ntype Utimbuf struct {\n\tActime  int32\n\tModtime int32\n}\n\ntype Rusage struct {\n\tUtime    Timeval\n\tStime    Timeval\n\tMaxrss   int32\n\tIxrss    int32\n\tIdrss    int32\n\tIsrss    int32\n\tMinflt   int32\n\tMajflt   int32\n\tNswap    int32\n\tInblock  int32\n\tOublock  int32\n\tMsgsnd   int32\n\tMsgrcv   int32\n\tNsignals int32\n\tNvcsw    int32\n\tNivcsw   int32\n}\n\ntype Rlimit struct {\n\tCur uint64\n\tMax uint64\n}\n\ntype _Gid_t uint32\n\ntype Stat_t struct {\n\tDev     uint64\n\t_       uint16\n\t_       uint32\n\tMode    uint32\n\tNlink   uint32\n\tUid     uint32\n\tGid     uint32\n\tRdev    uint64\n\t_       uint16\n\t_       [4]byte\n\tSize    int64\n\tBlksize int32\n\t_       [4]byte\n\tBlocks  int64\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\tIno     uint64\n}\n\ntype StatxTimestamp struct {\n\tSec  int64\n\tNsec uint32\n\t_    int32\n}\n\ntype Statx_t struct {\n\tMask            uint32\n\tBlksize         uint32\n\tAttributes      uint64\n\tNlink           uint32\n\tUid             uint32\n\tGid             uint32\n\tMode            uint16\n\t_               [1]uint16\n\tIno             uint64\n\tSize            uint64\n\tBlocks          uint64\n\tAttributes_mask uint64\n\tAtime           StatxTimestamp\n\tBtime           StatxTimestamp\n\tCtime           StatxTimestamp\n\tMtime           StatxTimestamp\n\tRdev_major      uint32\n\tRdev_minor      uint32\n\tDev_major       uint32\n\tDev_minor       uint32\n\t_               [14]uint64\n}\n\ntype Dirent struct {\n\tIno    uint64\n\tOff    int64\n\tReclen uint16\n\tType   uint8\n\tName   [256]uint8\n\t_      [5]byte\n}\n\ntype Fsid struct {\n\tVal [2]int32\n}\n\ntype Flock_t struct {\n\tType   int16\n\tWhence int16\n\t_      [4]byte\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\t_      [4]byte\n}\n\ntype FscryptPolicy struct {\n\tVersion                   uint8\n\tContents_encryption_mode  uint8\n\tFilenames_encryption_mode uint8\n\tFlags                     uint8\n\tMaster_key_descriptor     [8]uint8\n}\n\ntype FscryptKey struct {\n\tMode uint32\n\tRaw  [64]uint8\n\tSize uint32\n}\n\ntype KeyctlDHParams struct {\n\tPrivate int32\n\tPrime   int32\n\tBase    int32\n}\n\nconst (\n\tFADV_NORMAL     = 0x0\n\tFADV_RANDOM     = 0x1\n\tFADV_SEQUENTIAL = 0x2\n\tFADV_WILLNEED   = 0x3\n\tFADV_DONTNEED   = 0x4\n\tFADV_NOREUSE    = 0x5\n)\n\ntype RawSockaddrInet4 struct {\n\tFamily uint16\n\tPort   uint16\n\tAddr   [4]byte /* in_addr */\n\tZero   [8]uint8\n}\n\ntype RawSockaddrInet6 struct {\n\tFamily   uint16\n\tPort     uint16\n\tFlowinfo uint32\n\tAddr     [16]byte /* in6_addr */\n\tScope_id uint32\n}\n\ntype RawSockaddrUnix struct {\n\tFamily uint16\n\tPath   [108]int8\n}\n\ntype RawSockaddrLinklayer struct {\n\tFamily   uint16\n\tProtocol uint16\n\tIfindex  int32\n\tHatype   uint16\n\tPkttype  uint8\n\tHalen    uint8\n\tAddr     [8]uint8\n}\n\ntype RawSockaddrNetlink struct {\n\tFamily uint16\n\tPad    uint16\n\tPid    uint32\n\tGroups uint32\n}\n\ntype RawSockaddrHCI struct {\n\tFamily  uint16\n\tDev     uint16\n\tChannel uint16\n}\n\ntype RawSockaddrL2 struct {\n\tFamily      uint16\n\tPsm         uint16\n\tBdaddr      [6]uint8\n\tCid         uint16\n\tBdaddr_type uint8\n\t_           [1]byte\n}\n\ntype RawSockaddrRFCOMM struct {\n\tFamily  uint16\n\tBdaddr  [6]uint8\n\tChannel uint8\n\t_       [1]byte\n}\n\ntype RawSockaddrCAN struct {\n\tFamily  uint16\n\tIfindex int32\n\tAddr    [8]byte\n}\n\ntype RawSockaddrALG struct {\n\tFamily uint16\n\tType   [14]uint8\n\tFeat   uint32\n\tMask   uint32\n\tName   [64]uint8\n}\n\ntype RawSockaddrVM struct {\n\tFamily    uint16\n\tReserved1 uint16\n\tPort      uint32\n\tCid       uint32\n\tZero      [4]uint8\n}\n\ntype RawSockaddrXDP struct {\n\tFamily         uint16\n\tFlags          uint16\n\tIfindex        uint32\n\tQueue_id       uint32\n\tShared_umem_fd uint32\n}\n\ntype RawSockaddrPPPoX [0x1e]byte\n\ntype RawSockaddr struct {\n\tFamily uint16\n\tData   [14]uint8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [96]uint8\n}\n\ntype _Socklen uint32\n\ntype Linger struct {\n\tOnoff  int32\n\tLinger int32\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint32\n}\n\ntype IPMreq struct {\n\tMultiaddr [4]byte /* in_addr */\n\tInterface [4]byte /* in_addr */\n}\n\ntype IPMreqn struct {\n\tMultiaddr [4]byte /* in_addr */\n\tAddress   [4]byte /* in_addr */\n\tIfindex   int32\n}\n\ntype IPv6Mreq struct {\n\tMultiaddr [16]byte /* in6_addr */\n\tInterface uint32\n}\n\ntype PacketMreq struct {\n\tIfindex int32\n\tType    uint16\n\tAlen    uint16\n\tAddress [8]uint8\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tIov        *Iovec\n\tIovlen     uint32\n\tControl    *byte\n\tControllen uint32\n\tFlags      int32\n}\n\ntype Cmsghdr struct {\n\tLen   uint32\n\tLevel int32\n\tType  int32\n}\n\ntype Inet4Pktinfo struct {\n\tIfindex  int32\n\tSpec_dst [4]byte /* in_addr */\n\tAddr     [4]byte /* in_addr */\n}\n\ntype Inet6Pktinfo struct {\n\tAddr    [16]byte /* in6_addr */\n\tIfindex uint32\n}\n\ntype IPv6MTUInfo struct {\n\tAddr RawSockaddrInet6\n\tMtu  uint32\n}\n\ntype ICMPv6Filter struct {\n\tData [8]uint32\n}\n\ntype Ucred struct {\n\tPid int32\n\tUid uint32\n\tGid uint32\n}\n\ntype TCPInfo struct {\n\tState          uint8\n\tCa_state       uint8\n\tRetransmits    uint8\n\tProbes         uint8\n\tBackoff        uint8\n\tOptions        uint8\n\tRto            uint32\n\tAto            uint32\n\tSnd_mss        uint32\n\tRcv_mss        uint32\n\tUnacked        uint32\n\tSacked         uint32\n\tLost           uint32\n\tRetrans        uint32\n\tFackets        uint32\n\tLast_data_sent uint32\n\tLast_ack_sent  uint32\n\tLast_data_recv uint32\n\tLast_ack_recv  uint32\n\tPmtu           uint32\n\tRcv_ssthresh   uint32\n\tRtt            uint32\n\tRttvar         uint32\n\tSnd_ssthresh   uint32\n\tSnd_cwnd       uint32\n\tAdvmss         uint32\n\tReordering     uint32\n\tRcv_rtt        uint32\n\tRcv_space      uint32\n\tTotal_retrans  uint32\n}\n\ntype CanFilter struct {\n\tId   uint32\n\tMask uint32\n}\n\nconst (\n\tSizeofSockaddrInet4     = 0x10\n\tSizeofSockaddrInet6     = 0x1c\n\tSizeofSockaddrAny       = 0x70\n\tSizeofSockaddrUnix      = 0x6e\n\tSizeofSockaddrLinklayer = 0x14\n\tSizeofSockaddrNetlink   = 0xc\n\tSizeofSockaddrHCI       = 0x6\n\tSizeofSockaddrL2        = 0xe\n\tSizeofSockaddrRFCOMM    = 0xa\n\tSizeofSockaddrCAN       = 0x10\n\tSizeofSockaddrALG       = 0x58\n\tSizeofSockaddrVM        = 0x10\n\tSizeofSockaddrXDP       = 0x10\n\tSizeofSockaddrPPPoX     = 0x1e\n\tSizeofLinger            = 0x8\n\tSizeofIovec             = 0x8\n\tSizeofIPMreq            = 0x8\n\tSizeofIPMreqn           = 0xc\n\tSizeofIPv6Mreq          = 0x14\n\tSizeofPacketMreq        = 0x10\n\tSizeofMsghdr            = 0x1c\n\tSizeofCmsghdr           = 0xc\n\tSizeofInet4Pktinfo      = 0xc\n\tSizeofInet6Pktinfo      = 0x14\n\tSizeofIPv6MTUInfo       = 0x20\n\tSizeofICMPv6Filter      = 0x20\n\tSizeofUcred             = 0xc\n\tSizeofTCPInfo           = 0x68\n\tSizeofCanFilter         = 0x8\n)\n\nconst (\n\tNDA_UNSPEC              = 0x0\n\tNDA_DST                 = 0x1\n\tNDA_LLADDR              = 0x2\n\tNDA_CACHEINFO           = 0x3\n\tNDA_PROBES              = 0x4\n\tNDA_VLAN                = 0x5\n\tNDA_PORT                = 0x6\n\tNDA_VNI                 = 0x7\n\tNDA_IFINDEX             = 0x8\n\tNDA_MASTER              = 0x9\n\tNDA_LINK_NETNSID        = 0xa\n\tNDA_SRC_VNI             = 0xb\n\tNTF_USE                 = 0x1\n\tNTF_SELF                = 0x2\n\tNTF_MASTER              = 0x4\n\tNTF_PROXY               = 0x8\n\tNTF_EXT_LEARNED         = 0x10\n\tNTF_OFFLOADED           = 0x20\n\tNTF_ROUTER              = 0x80\n\tNUD_INCOMPLETE          = 0x1\n\tNUD_REACHABLE           = 0x2\n\tNUD_STALE               = 0x4\n\tNUD_DELAY               = 0x8\n\tNUD_PROBE               = 0x10\n\tNUD_FAILED              = 0x20\n\tNUD_NOARP               = 0x40\n\tNUD_PERMANENT           = 0x80\n\tNUD_NONE                = 0x0\n\tIFA_UNSPEC              = 0x0\n\tIFA_ADDRESS             = 0x1\n\tIFA_LOCAL               = 0x2\n\tIFA_LABEL               = 0x3\n\tIFA_BROADCAST           = 0x4\n\tIFA_ANYCAST             = 0x5\n\tIFA_CACHEINFO           = 0x6\n\tIFA_MULTICAST           = 0x7\n\tIFA_FLAGS               = 0x8\n\tIFA_RT_PRIORITY         = 0x9\n\tIFA_TARGET_NETNSID      = 0xa\n\tIFLA_UNSPEC             = 0x0\n\tIFLA_ADDRESS            = 0x1\n\tIFLA_BROADCAST          = 0x2\n\tIFLA_IFNAME             = 0x3\n\tIFLA_MTU                = 0x4\n\tIFLA_LINK               = 0x5\n\tIFLA_QDISC              = 0x6\n\tIFLA_STATS              = 0x7\n\tIFLA_COST               = 0x8\n\tIFLA_PRIORITY           = 0x9\n\tIFLA_MASTER             = 0xa\n\tIFLA_WIRELESS           = 0xb\n\tIFLA_PROTINFO           = 0xc\n\tIFLA_TXQLEN             = 0xd\n\tIFLA_MAP                = 0xe\n\tIFLA_WEIGHT             = 0xf\n\tIFLA_OPERSTATE          = 0x10\n\tIFLA_LINKMODE           = 0x11\n\tIFLA_LINKINFO           = 0x12\n\tIFLA_NET_NS_PID         = 0x13\n\tIFLA_IFALIAS            = 0x14\n\tIFLA_NUM_VF             = 0x15\n\tIFLA_VFINFO_LIST        = 0x16\n\tIFLA_STATS64            = 0x17\n\tIFLA_VF_PORTS           = 0x18\n\tIFLA_PORT_SELF          = 0x19\n\tIFLA_AF_SPEC            = 0x1a\n\tIFLA_GROUP              = 0x1b\n\tIFLA_NET_NS_FD          = 0x1c\n\tIFLA_EXT_MASK           = 0x1d\n\tIFLA_PROMISCUITY        = 0x1e\n\tIFLA_NUM_TX_QUEUES      = 0x1f\n\tIFLA_NUM_RX_QUEUES      = 0x20\n\tIFLA_CARRIER            = 0x21\n\tIFLA_PHYS_PORT_ID       = 0x22\n\tIFLA_CARRIER_CHANGES    = 0x23\n\tIFLA_PHYS_SWITCH_ID     = 0x24\n\tIFLA_LINK_NETNSID       = 0x25\n\tIFLA_PHYS_PORT_NAME     = 0x26\n\tIFLA_PROTO_DOWN         = 0x27\n\tIFLA_GSO_MAX_SEGS       = 0x28\n\tIFLA_GSO_MAX_SIZE       = 0x29\n\tIFLA_PAD                = 0x2a\n\tIFLA_XDP                = 0x2b\n\tIFLA_EVENT              = 0x2c\n\tIFLA_NEW_NETNSID        = 0x2d\n\tIFLA_IF_NETNSID         = 0x2e\n\tIFLA_TARGET_NETNSID     = 0x2e\n\tIFLA_CARRIER_UP_COUNT   = 0x2f\n\tIFLA_CARRIER_DOWN_COUNT = 0x30\n\tIFLA_NEW_IFINDEX        = 0x31\n\tIFLA_MIN_MTU            = 0x32\n\tIFLA_MAX_MTU            = 0x33\n\tIFLA_MAX                = 0x33\n\tIFLA_INFO_KIND          = 0x1\n\tIFLA_INFO_DATA          = 0x2\n\tIFLA_INFO_XSTATS        = 0x3\n\tIFLA_INFO_SLAVE_KIND    = 0x4\n\tIFLA_INFO_SLAVE_DATA    = 0x5\n\tRT_SCOPE_UNIVERSE       = 0x0\n\tRT_SCOPE_SITE           = 0xc8\n\tRT_SCOPE_LINK           = 0xfd\n\tRT_SCOPE_HOST           = 0xfe\n\tRT_SCOPE_NOWHERE        = 0xff\n\tRT_TABLE_UNSPEC         = 0x0\n\tRT_TABLE_COMPAT         = 0xfc\n\tRT_TABLE_DEFAULT        = 0xfd\n\tRT_TABLE_MAIN           = 0xfe\n\tRT_TABLE_LOCAL          = 0xff\n\tRT_TABLE_MAX            = 0xffffffff\n\tRTA_UNSPEC              = 0x0\n\tRTA_DST                 = 0x1\n\tRTA_SRC                 = 0x2\n\tRTA_IIF                 = 0x3\n\tRTA_OIF                 = 0x4\n\tRTA_GATEWAY             = 0x5\n\tRTA_PRIORITY            = 0x6\n\tRTA_PREFSRC             = 0x7\n\tRTA_METRICS             = 0x8\n\tRTA_MULTIPATH           = 0x9\n\tRTA_FLOW                = 0xb\n\tRTA_CACHEINFO           = 0xc\n\tRTA_TABLE               = 0xf\n\tRTA_MARK                = 0x10\n\tRTA_MFC_STATS           = 0x11\n\tRTA_VIA                 = 0x12\n\tRTA_NEWDST              = 0x13\n\tRTA_PREF                = 0x14\n\tRTA_ENCAP_TYPE          = 0x15\n\tRTA_ENCAP               = 0x16\n\tRTA_EXPIRES             = 0x17\n\tRTA_PAD                 = 0x18\n\tRTA_UID                 = 0x19\n\tRTA_TTL_PROPAGATE       = 0x1a\n\tRTA_IP_PROTO            = 0x1b\n\tRTA_SPORT               = 0x1c\n\tRTA_DPORT               = 0x1d\n\tRTN_UNSPEC              = 0x0\n\tRTN_UNICAST             = 0x1\n\tRTN_LOCAL               = 0x2\n\tRTN_BROADCAST           = 0x3\n\tRTN_ANYCAST             = 0x4\n\tRTN_MULTICAST           = 0x5\n\tRTN_BLACKHOLE           = 0x6\n\tRTN_UNREACHABLE         = 0x7\n\tRTN_PROHIBIT            = 0x8\n\tRTN_THROW               = 0x9\n\tRTN_NAT                 = 0xa\n\tRTN_XRESOLVE            = 0xb\n\tRTNLGRP_NONE            = 0x0\n\tRTNLGRP_LINK            = 0x1\n\tRTNLGRP_NOTIFY          = 0x2\n\tRTNLGRP_NEIGH           = 0x3\n\tRTNLGRP_TC              = 0x4\n\tRTNLGRP_IPV4_IFADDR     = 0x5\n\tRTNLGRP_IPV4_MROUTE     = 0x6\n\tRTNLGRP_IPV4_ROUTE      = 0x7\n\tRTNLGRP_IPV4_RULE       = 0x8\n\tRTNLGRP_IPV6_IFADDR     = 0x9\n\tRTNLGRP_IPV6_MROUTE     = 0xa\n\tRTNLGRP_IPV6_ROUTE      = 0xb\n\tRTNLGRP_IPV6_IFINFO     = 0xc\n\tRTNLGRP_IPV6_PREFIX     = 0x12\n\tRTNLGRP_IPV6_RULE       = 0x13\n\tRTNLGRP_ND_USEROPT      = 0x14\n\tSizeofNlMsghdr          = 0x10\n\tSizeofNlMsgerr          = 0x14\n\tSizeofRtGenmsg          = 0x1\n\tSizeofNlAttr            = 0x4\n\tSizeofRtAttr            = 0x4\n\tSizeofIfInfomsg         = 0x10\n\tSizeofIfAddrmsg         = 0x8\n\tSizeofRtMsg             = 0xc\n\tSizeofRtNexthop         = 0x8\n\tSizeofNdUseroptmsg      = 0x10\n\tSizeofNdMsg             = 0xc\n)\n\ntype NlMsghdr struct {\n\tLen   uint32\n\tType  uint16\n\tFlags uint16\n\tSeq   uint32\n\tPid   uint32\n}\n\ntype NlMsgerr struct {\n\tError int32\n\tMsg   NlMsghdr\n}\n\ntype RtGenmsg struct {\n\tFamily uint8\n}\n\ntype NlAttr struct {\n\tLen  uint16\n\tType uint16\n}\n\ntype RtAttr struct {\n\tLen  uint16\n\tType uint16\n}\n\ntype IfInfomsg struct {\n\tFamily uint8\n\t_      uint8\n\tType   uint16\n\tIndex  int32\n\tFlags  uint32\n\tChange uint32\n}\n\ntype IfAddrmsg struct {\n\tFamily    uint8\n\tPrefixlen uint8\n\tFlags     uint8\n\tScope     uint8\n\tIndex     uint32\n}\n\ntype RtMsg struct {\n\tFamily   uint8\n\tDst_len  uint8\n\tSrc_len  uint8\n\tTos      uint8\n\tTable    uint8\n\tProtocol uint8\n\tScope    uint8\n\tType     uint8\n\tFlags    uint32\n}\n\ntype RtNexthop struct {\n\tLen     uint16\n\tFlags   uint8\n\tHops    uint8\n\tIfindex int32\n}\n\ntype NdUseroptmsg struct {\n\tFamily    uint8\n\tPad1      uint8\n\tOpts_len  uint16\n\tIfindex   int32\n\tIcmp_type uint8\n\tIcmp_code uint8\n\tPad2      uint16\n\tPad3      uint32\n}\n\ntype NdMsg struct {\n\tFamily  uint8\n\tPad1    uint8\n\tPad2    uint16\n\tIfindex int32\n\tState   uint16\n\tFlags   uint8\n\tType    uint8\n}\n\nconst (\n\tSizeofSockFilter = 0x8\n\tSizeofSockFprog  = 0x8\n)\n\ntype SockFilter struct {\n\tCode uint16\n\tJt   uint8\n\tJf   uint8\n\tK    uint32\n}\n\ntype SockFprog struct {\n\tLen    uint16\n\tFilter *SockFilter\n}\n\ntype InotifyEvent struct {\n\tWd     int32\n\tMask   uint32\n\tCookie uint32\n\tLen    uint32\n}\n\nconst SizeofInotifyEvent = 0x10\n\ntype PtraceRegs struct {\n\tUregs [18]uint32\n}\n\ntype FdSet struct {\n\tBits [32]int32\n}\n\ntype Sysinfo_t struct {\n\tUptime    int32\n\tLoads     [3]uint32\n\tTotalram  uint32\n\tFreeram   uint32\n\tSharedram uint32\n\tBufferram uint32\n\tTotalswap uint32\n\tFreeswap  uint32\n\tProcs     uint16\n\tPad       uint16\n\tTotalhigh uint32\n\tFreehigh  uint32\n\tUnit      uint32\n\t_         [8]uint8\n}\n\ntype Utsname struct {\n\tSysname    [65]byte\n\tNodename   [65]byte\n\tRelease    [65]byte\n\tVersion    [65]byte\n\tMachine    [65]byte\n\tDomainname [65]byte\n}\n\ntype Ustat_t struct {\n\tTfree  int32\n\tTinode uint32\n\tFname  [6]uint8\n\tFpack  [6]uint8\n}\n\ntype EpollEvent struct {\n\tEvents uint32\n\tPadFd  int32\n\tFd     int32\n\tPad    int32\n}\n\nconst (\n\tAT_EMPTY_PATH   = 0x1000\n\tAT_FDCWD        = -0x64\n\tAT_NO_AUTOMOUNT = 0x800\n\tAT_REMOVEDIR    = 0x200\n\n\tAT_STATX_SYNC_AS_STAT = 0x0\n\tAT_STATX_FORCE_SYNC   = 0x2000\n\tAT_STATX_DONT_SYNC    = 0x4000\n\n\tAT_SYMLINK_FOLLOW   = 0x400\n\tAT_SYMLINK_NOFOLLOW = 0x100\n\n\tAT_EACCESS = 0x200\n)\n\ntype PollFd struct {\n\tFd      int32\n\tEvents  int16\n\tRevents int16\n}\n\nconst (\n\tPOLLIN    = 0x1\n\tPOLLPRI   = 0x2\n\tPOLLOUT   = 0x4\n\tPOLLRDHUP = 0x2000\n\tPOLLERR   = 0x8\n\tPOLLHUP   = 0x10\n\tPOLLNVAL  = 0x20\n)\n\ntype Sigset_t struct {\n\tVal [32]uint32\n}\n\nconst _C__NSIG = 0x41\n\ntype SignalfdSiginfo struct {\n\tSigno     uint32\n\tErrno     int32\n\tCode      int32\n\tPid       uint32\n\tUid       uint32\n\tFd        int32\n\tTid       uint32\n\tBand      uint32\n\tOverrun   uint32\n\tTrapno    uint32\n\tStatus    int32\n\tInt       int32\n\tPtr       uint64\n\tUtime     uint64\n\tStime     uint64\n\tAddr      uint64\n\tAddr_lsb  uint16\n\t_         uint16\n\tSyscall   int32\n\tCall_addr uint64\n\tArch      uint32\n\t_         [28]uint8\n}\n\nconst PERF_IOC_FLAG_GROUP = 0x1\n\ntype Termios struct {\n\tIflag  uint32\n\tOflag  uint32\n\tCflag  uint32\n\tLflag  uint32\n\tLine   uint8\n\tCc     [19]uint8\n\tIspeed uint32\n\tOspeed uint32\n}\n\ntype Winsize struct {\n\tRow    uint16\n\tCol    uint16\n\tXpixel uint16\n\tYpixel uint16\n}\n\ntype Taskstats struct {\n\tVersion                   uint16\n\tAc_exitcode               uint32\n\tAc_flag                   uint8\n\tAc_nice                   uint8\n\t_                         [4]byte\n\tCpu_count                 uint64\n\tCpu_delay_total           uint64\n\tBlkio_count               uint64\n\tBlkio_delay_total         uint64\n\tSwapin_count              uint64\n\tSwapin_delay_total        uint64\n\tCpu_run_real_total        uint64\n\tCpu_run_virtual_total     uint64\n\tAc_comm                   [32]uint8\n\tAc_sched                  uint8\n\tAc_pad                    [3]uint8\n\t_                         [4]byte\n\tAc_uid                    uint32\n\tAc_gid                    uint32\n\tAc_pid                    uint32\n\tAc_ppid                   uint32\n\tAc_btime                  uint32\n\t_                         [4]byte\n\tAc_etime                  uint64\n\tAc_utime                  uint64\n\tAc_stime                  uint64\n\tAc_minflt                 uint64\n\tAc_majflt                 uint64\n\tCoremem                   uint64\n\tVirtmem                   uint64\n\tHiwater_rss               uint64\n\tHiwater_vm                uint64\n\tRead_char                 uint64\n\tWrite_char                uint64\n\tRead_syscalls             uint64\n\tWrite_syscalls            uint64\n\tRead_bytes                uint64\n\tWrite_bytes               uint64\n\tCancelled_write_bytes     uint64\n\tNvcsw                     uint64\n\tNivcsw                    uint64\n\tAc_utimescaled            uint64\n\tAc_stimescaled            uint64\n\tCpu_scaled_run_real_total uint64\n\tFreepages_count           uint64\n\tFreepages_delay_total     uint64\n\tThrashing_count           uint64\n\tThrashing_delay_total     uint64\n}\n\nconst (\n\tTASKSTATS_CMD_UNSPEC                  = 0x0\n\tTASKSTATS_CMD_GET                     = 0x1\n\tTASKSTATS_CMD_NEW                     = 0x2\n\tTASKSTATS_TYPE_UNSPEC                 = 0x0\n\tTASKSTATS_TYPE_PID                    = 0x1\n\tTASKSTATS_TYPE_TGID                   = 0x2\n\tTASKSTATS_TYPE_STATS                  = 0x3\n\tTASKSTATS_TYPE_AGGR_PID               = 0x4\n\tTASKSTATS_TYPE_AGGR_TGID              = 0x5\n\tTASKSTATS_TYPE_NULL                   = 0x6\n\tTASKSTATS_CMD_ATTR_UNSPEC             = 0x0\n\tTASKSTATS_CMD_ATTR_PID                = 0x1\n\tTASKSTATS_CMD_ATTR_TGID               = 0x2\n\tTASKSTATS_CMD_ATTR_REGISTER_CPUMASK   = 0x3\n\tTASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4\n)\n\ntype CGroupStats struct {\n\tSleeping        uint64\n\tRunning         uint64\n\tStopped         uint64\n\tUninterruptible uint64\n\tIo_wait         uint64\n}\n\nconst (\n\tCGROUPSTATS_CMD_UNSPEC        = 0x3\n\tCGROUPSTATS_CMD_GET           = 0x4\n\tCGROUPSTATS_CMD_NEW           = 0x5\n\tCGROUPSTATS_TYPE_UNSPEC       = 0x0\n\tCGROUPSTATS_TYPE_CGROUP_STATS = 0x1\n\tCGROUPSTATS_CMD_ATTR_UNSPEC   = 0x0\n\tCGROUPSTATS_CMD_ATTR_FD       = 0x1\n)\n\ntype Genlmsghdr struct {\n\tCmd      uint8\n\tVersion  uint8\n\tReserved uint16\n}\n\nconst (\n\tCTRL_CMD_UNSPEC            = 0x0\n\tCTRL_CMD_NEWFAMILY         = 0x1\n\tCTRL_CMD_DELFAMILY         = 0x2\n\tCTRL_CMD_GETFAMILY         = 0x3\n\tCTRL_CMD_NEWOPS            = 0x4\n\tCTRL_CMD_DELOPS            = 0x5\n\tCTRL_CMD_GETOPS            = 0x6\n\tCTRL_CMD_NEWMCAST_GRP      = 0x7\n\tCTRL_CMD_DELMCAST_GRP      = 0x8\n\tCTRL_CMD_GETMCAST_GRP      = 0x9\n\tCTRL_ATTR_UNSPEC           = 0x0\n\tCTRL_ATTR_FAMILY_ID        = 0x1\n\tCTRL_ATTR_FAMILY_NAME      = 0x2\n\tCTRL_ATTR_VERSION          = 0x3\n\tCTRL_ATTR_HDRSIZE          = 0x4\n\tCTRL_ATTR_MAXATTR          = 0x5\n\tCTRL_ATTR_OPS              = 0x6\n\tCTRL_ATTR_MCAST_GROUPS     = 0x7\n\tCTRL_ATTR_OP_UNSPEC        = 0x0\n\tCTRL_ATTR_OP_ID            = 0x1\n\tCTRL_ATTR_OP_FLAGS         = 0x2\n\tCTRL_ATTR_MCAST_GRP_UNSPEC = 0x0\n\tCTRL_ATTR_MCAST_GRP_NAME   = 0x1\n\tCTRL_ATTR_MCAST_GRP_ID     = 0x2\n)\n\ntype cpuMask uint32\n\nconst (\n\t_CPU_SETSIZE = 0x400\n\t_NCPUBITS    = 0x20\n)\n\nconst (\n\tBDADDR_BREDR     = 0x0\n\tBDADDR_LE_PUBLIC = 0x1\n\tBDADDR_LE_RANDOM = 0x2\n)\n\ntype PerfEventAttr struct {\n\tType               uint32\n\tSize               uint32\n\tConfig             uint64\n\tSample             uint64\n\tSample_type        uint64\n\tRead_format        uint64\n\tBits               uint64\n\tWakeup             uint32\n\tBp_type            uint32\n\tExt1               uint64\n\tExt2               uint64\n\tBranch_sample_type uint64\n\tSample_regs_user   uint64\n\tSample_stack_user  uint32\n\tClockid            int32\n\tSample_regs_intr   uint64\n\tAux_watermark      uint32\n\tSample_max_stack   uint16\n\t_                  uint16\n}\n\ntype PerfEventMmapPage struct {\n\tVersion        uint32\n\tCompat_version uint32\n\tLock           uint32\n\tIndex          uint32\n\tOffset         int64\n\tTime_enabled   uint64\n\tTime_running   uint64\n\tCapabilities   uint64\n\tPmc_width      uint16\n\tTime_shift     uint16\n\tTime_mult      uint32\n\tTime_offset    uint64\n\tTime_zero      uint64\n\tSize           uint32\n\t_              [948]uint8\n\tData_head      uint64\n\tData_tail      uint64\n\tData_offset    uint64\n\tData_size      uint64\n\tAux_head       uint64\n\tAux_tail       uint64\n\tAux_offset     uint64\n\tAux_size       uint64\n}\n\nconst (\n\tPerfBitDisabled               uint64 = CBitFieldMaskBit0\n\tPerfBitInherit                       = CBitFieldMaskBit1\n\tPerfBitPinned                        = CBitFieldMaskBit2\n\tPerfBitExclusive                     = CBitFieldMaskBit3\n\tPerfBitExcludeUser                   = CBitFieldMaskBit4\n\tPerfBitExcludeKernel                 = CBitFieldMaskBit5\n\tPerfBitExcludeHv                     = CBitFieldMaskBit6\n\tPerfBitExcludeIdle                   = CBitFieldMaskBit7\n\tPerfBitMmap                          = CBitFieldMaskBit8\n\tPerfBitComm                          = CBitFieldMaskBit9\n\tPerfBitFreq                          = CBitFieldMaskBit10\n\tPerfBitInheritStat                   = CBitFieldMaskBit11\n\tPerfBitEnableOnExec                  = CBitFieldMaskBit12\n\tPerfBitTask                          = CBitFieldMaskBit13\n\tPerfBitWatermark                     = CBitFieldMaskBit14\n\tPerfBitPreciseIPBit1                 = CBitFieldMaskBit15\n\tPerfBitPreciseIPBit2                 = CBitFieldMaskBit16\n\tPerfBitMmapData                      = CBitFieldMaskBit17\n\tPerfBitSampleIDAll                   = CBitFieldMaskBit18\n\tPerfBitExcludeHost                   = CBitFieldMaskBit19\n\tPerfBitExcludeGuest                  = CBitFieldMaskBit20\n\tPerfBitExcludeCallchainKernel        = CBitFieldMaskBit21\n\tPerfBitExcludeCallchainUser          = CBitFieldMaskBit22\n\tPerfBitMmap2                         = CBitFieldMaskBit23\n\tPerfBitCommExec                      = CBitFieldMaskBit24\n\tPerfBitUseClockID                    = CBitFieldMaskBit25\n\tPerfBitContextSwitch                 = CBitFieldMaskBit26\n)\n\nconst (\n\tPERF_TYPE_HARDWARE   = 0x0\n\tPERF_TYPE_SOFTWARE   = 0x1\n\tPERF_TYPE_TRACEPOINT = 0x2\n\tPERF_TYPE_HW_CACHE   = 0x3\n\tPERF_TYPE_RAW        = 0x4\n\tPERF_TYPE_BREAKPOINT = 0x5\n\n\tPERF_COUNT_HW_CPU_CYCLES              = 0x0\n\tPERF_COUNT_HW_INSTRUCTIONS            = 0x1\n\tPERF_COUNT_HW_CACHE_REFERENCES        = 0x2\n\tPERF_COUNT_HW_CACHE_MISSES            = 0x3\n\tPERF_COUNT_HW_BRANCH_INSTRUCTIONS     = 0x4\n\tPERF_COUNT_HW_BRANCH_MISSES           = 0x5\n\tPERF_COUNT_HW_BUS_CYCLES              = 0x6\n\tPERF_COUNT_HW_STALLED_CYCLES_FRONTEND = 0x7\n\tPERF_COUNT_HW_STALLED_CYCLES_BACKEND  = 0x8\n\tPERF_COUNT_HW_REF_CPU_CYCLES          = 0x9\n\n\tPERF_COUNT_HW_CACHE_L1D  = 0x0\n\tPERF_COUNT_HW_CACHE_L1I  = 0x1\n\tPERF_COUNT_HW_CACHE_LL   = 0x2\n\tPERF_COUNT_HW_CACHE_DTLB = 0x3\n\tPERF_COUNT_HW_CACHE_ITLB = 0x4\n\tPERF_COUNT_HW_CACHE_BPU  = 0x5\n\tPERF_COUNT_HW_CACHE_NODE = 0x6\n\n\tPERF_COUNT_HW_CACHE_OP_READ     = 0x0\n\tPERF_COUNT_HW_CACHE_OP_WRITE    = 0x1\n\tPERF_COUNT_HW_CACHE_OP_PREFETCH = 0x2\n\n\tPERF_COUNT_HW_CACHE_RESULT_ACCESS = 0x0\n\tPERF_COUNT_HW_CACHE_RESULT_MISS   = 0x1\n\n\tPERF_COUNT_SW_CPU_CLOCK        = 0x0\n\tPERF_COUNT_SW_TASK_CLOCK       = 0x1\n\tPERF_COUNT_SW_PAGE_FAULTS      = 0x2\n\tPERF_COUNT_SW_CONTEXT_SWITCHES = 0x3\n\tPERF_COUNT_SW_CPU_MIGRATIONS   = 0x4\n\tPERF_COUNT_SW_PAGE_FAULTS_MIN  = 0x5\n\tPERF_COUNT_SW_PAGE_FAULTS_MAJ  = 0x6\n\tPERF_COUNT_SW_ALIGNMENT_FAULTS = 0x7\n\tPERF_COUNT_SW_EMULATION_FAULTS = 0x8\n\tPERF_COUNT_SW_DUMMY            = 0x9\n\tPERF_COUNT_SW_BPF_OUTPUT       = 0xa\n\n\tPERF_SAMPLE_IP           = 0x1\n\tPERF_SAMPLE_TID          = 0x2\n\tPERF_SAMPLE_TIME         = 0x4\n\tPERF_SAMPLE_ADDR         = 0x8\n\tPERF_SAMPLE_READ         = 0x10\n\tPERF_SAMPLE_CALLCHAIN    = 0x20\n\tPERF_SAMPLE_ID           = 0x40\n\tPERF_SAMPLE_CPU          = 0x80\n\tPERF_SAMPLE_PERIOD       = 0x100\n\tPERF_SAMPLE_STREAM_ID    = 0x200\n\tPERF_SAMPLE_RAW          = 0x400\n\tPERF_SAMPLE_BRANCH_STACK = 0x800\n\n\tPERF_SAMPLE_BRANCH_USER       = 0x1\n\tPERF_SAMPLE_BRANCH_KERNEL     = 0x2\n\tPERF_SAMPLE_BRANCH_HV         = 0x4\n\tPERF_SAMPLE_BRANCH_ANY        = 0x8\n\tPERF_SAMPLE_BRANCH_ANY_CALL   = 0x10\n\tPERF_SAMPLE_BRANCH_ANY_RETURN = 0x20\n\tPERF_SAMPLE_BRANCH_IND_CALL   = 0x40\n\tPERF_SAMPLE_BRANCH_ABORT_TX   = 0x80\n\tPERF_SAMPLE_BRANCH_IN_TX      = 0x100\n\tPERF_SAMPLE_BRANCH_NO_TX      = 0x200\n\tPERF_SAMPLE_BRANCH_COND       = 0x400\n\tPERF_SAMPLE_BRANCH_CALL_STACK = 0x800\n\tPERF_SAMPLE_BRANCH_IND_JUMP   = 0x1000\n\tPERF_SAMPLE_BRANCH_CALL       = 0x2000\n\tPERF_SAMPLE_BRANCH_NO_FLAGS   = 0x4000\n\tPERF_SAMPLE_BRANCH_NO_CYCLES  = 0x8000\n\tPERF_SAMPLE_BRANCH_TYPE_SAVE  = 0x10000\n\n\tPERF_FORMAT_TOTAL_TIME_ENABLED = 0x1\n\tPERF_FORMAT_TOTAL_TIME_RUNNING = 0x2\n\tPERF_FORMAT_ID                 = 0x4\n\tPERF_FORMAT_GROUP              = 0x8\n\n\tPERF_RECORD_MMAP            = 0x1\n\tPERF_RECORD_LOST            = 0x2\n\tPERF_RECORD_COMM            = 0x3\n\tPERF_RECORD_EXIT            = 0x4\n\tPERF_RECORD_THROTTLE        = 0x5\n\tPERF_RECORD_UNTHROTTLE      = 0x6\n\tPERF_RECORD_FORK            = 0x7\n\tPERF_RECORD_READ            = 0x8\n\tPERF_RECORD_SAMPLE          = 0x9\n\tPERF_RECORD_MMAP2           = 0xa\n\tPERF_RECORD_AUX             = 0xb\n\tPERF_RECORD_ITRACE_START    = 0xc\n\tPERF_RECORD_LOST_SAMPLES    = 0xd\n\tPERF_RECORD_SWITCH          = 0xe\n\tPERF_RECORD_SWITCH_CPU_WIDE = 0xf\n\tPERF_RECORD_NAMESPACES      = 0x10\n\n\tPERF_CONTEXT_HV     = -0x20\n\tPERF_CONTEXT_KERNEL = -0x80\n\tPERF_CONTEXT_USER   = -0x200\n\n\tPERF_CONTEXT_GUEST        = -0x800\n\tPERF_CONTEXT_GUEST_KERNEL = -0x880\n\tPERF_CONTEXT_GUEST_USER   = -0xa00\n\n\tPERF_FLAG_FD_NO_GROUP = 0x1\n\tPERF_FLAG_FD_OUTPUT   = 0x2\n\tPERF_FLAG_PID_CGROUP  = 0x4\n\tPERF_FLAG_FD_CLOEXEC  = 0x8\n)\n\nconst (\n\tCBitFieldMaskBit0  = 0x1\n\tCBitFieldMaskBit1  = 0x2\n\tCBitFieldMaskBit2  = 0x4\n\tCBitFieldMaskBit3  = 0x8\n\tCBitFieldMaskBit4  = 0x10\n\tCBitFieldMaskBit5  = 0x20\n\tCBitFieldMaskBit6  = 0x40\n\tCBitFieldMaskBit7  = 0x80\n\tCBitFieldMaskBit8  = 0x100\n\tCBitFieldMaskBit9  = 0x200\n\tCBitFieldMaskBit10 = 0x400\n\tCBitFieldMaskBit11 = 0x800\n\tCBitFieldMaskBit12 = 0x1000\n\tCBitFieldMaskBit13 = 0x2000\n\tCBitFieldMaskBit14 = 0x4000\n\tCBitFieldMaskBit15 = 0x8000\n\tCBitFieldMaskBit16 = 0x10000\n\tCBitFieldMaskBit17 = 0x20000\n\tCBitFieldMaskBit18 = 0x40000\n\tCBitFieldMaskBit19 = 0x80000\n\tCBitFieldMaskBit20 = 0x100000\n\tCBitFieldMaskBit21 = 0x200000\n\tCBitFieldMaskBit22 = 0x400000\n\tCBitFieldMaskBit23 = 0x800000\n\tCBitFieldMaskBit24 = 0x1000000\n\tCBitFieldMaskBit25 = 0x2000000\n\tCBitFieldMaskBit26 = 0x4000000\n\tCBitFieldMaskBit27 = 0x8000000\n\tCBitFieldMaskBit28 = 0x10000000\n\tCBitFieldMaskBit29 = 0x20000000\n\tCBitFieldMaskBit30 = 0x40000000\n\tCBitFieldMaskBit31 = 0x80000000\n\tCBitFieldMaskBit32 = 0x100000000\n\tCBitFieldMaskBit33 = 0x200000000\n\tCBitFieldMaskBit34 = 0x400000000\n\tCBitFieldMaskBit35 = 0x800000000\n\tCBitFieldMaskBit36 = 0x1000000000\n\tCBitFieldMaskBit37 = 0x2000000000\n\tCBitFieldMaskBit38 = 0x4000000000\n\tCBitFieldMaskBit39 = 0x8000000000\n\tCBitFieldMaskBit40 = 0x10000000000\n\tCBitFieldMaskBit41 = 0x20000000000\n\tCBitFieldMaskBit42 = 0x40000000000\n\tCBitFieldMaskBit43 = 0x80000000000\n\tCBitFieldMaskBit44 = 0x100000000000\n\tCBitFieldMaskBit45 = 0x200000000000\n\tCBitFieldMaskBit46 = 0x400000000000\n\tCBitFieldMaskBit47 = 0x800000000000\n\tCBitFieldMaskBit48 = 0x1000000000000\n\tCBitFieldMaskBit49 = 0x2000000000000\n\tCBitFieldMaskBit50 = 0x4000000000000\n\tCBitFieldMaskBit51 = 0x8000000000000\n\tCBitFieldMaskBit52 = 0x10000000000000\n\tCBitFieldMaskBit53 = 0x20000000000000\n\tCBitFieldMaskBit54 = 0x40000000000000\n\tCBitFieldMaskBit55 = 0x80000000000000\n\tCBitFieldMaskBit56 = 0x100000000000000\n\tCBitFieldMaskBit57 = 0x200000000000000\n\tCBitFieldMaskBit58 = 0x400000000000000\n\tCBitFieldMaskBit59 = 0x800000000000000\n\tCBitFieldMaskBit60 = 0x1000000000000000\n\tCBitFieldMaskBit61 = 0x2000000000000000\n\tCBitFieldMaskBit62 = 0x4000000000000000\n\tCBitFieldMaskBit63 = 0x8000000000000000\n)\n\ntype SockaddrStorage struct {\n\tFamily uint16\n\t_      [122]uint8\n\t_      uint32\n}\n\ntype TCPMD5Sig struct {\n\tAddr      SockaddrStorage\n\tFlags     uint8\n\tPrefixlen uint8\n\tKeylen    uint16\n\t_         uint32\n\tKey       [80]uint8\n}\n\ntype HDDriveCmdHdr struct {\n\tCommand uint8\n\tNumber  uint8\n\tFeature uint8\n\tCount   uint8\n}\n\ntype HDGeometry struct {\n\tHeads     uint8\n\tSectors   uint8\n\tCylinders uint16\n\tStart     uint32\n}\n\ntype HDDriveID struct {\n\tConfig         uint16\n\tCyls           uint16\n\tReserved2      uint16\n\tHeads          uint16\n\tTrack_bytes    uint16\n\tSector_bytes   uint16\n\tSectors        uint16\n\tVendor0        uint16\n\tVendor1        uint16\n\tVendor2        uint16\n\tSerial_no      [20]uint8\n\tBuf_type       uint16\n\tBuf_size       uint16\n\tEcc_bytes      uint16\n\tFw_rev         [8]uint8\n\tModel          [40]uint8\n\tMax_multsect   uint8\n\tVendor3        uint8\n\tDword_io       uint16\n\tVendor4        uint8\n\tCapability     uint8\n\tReserved50     uint16\n\tVendor5        uint8\n\tTPIO           uint8\n\tVendor6        uint8\n\tTDMA           uint8\n\tField_valid    uint16\n\tCur_cyls       uint16\n\tCur_heads      uint16\n\tCur_sectors    uint16\n\tCur_capacity0  uint16\n\tCur_capacity1  uint16\n\tMultsect       uint8\n\tMultsect_valid uint8\n\tLba_capacity   uint32\n\tDma_1word      uint16\n\tDma_mword      uint16\n\tEide_pio_modes uint16\n\tEide_dma_min   uint16\n\tEide_dma_time  uint16\n\tEide_pio       uint16\n\tEide_pio_iordy uint16\n\tWords69_70     [2]uint16\n\tWords71_74     [4]uint16\n\tQueue_depth    uint16\n\tWords76_79     [4]uint16\n\tMajor_rev_num  uint16\n\tMinor_rev_num  uint16\n\tCommand_set_1  uint16\n\tCommand_set_2  uint16\n\tCfsse          uint16\n\tCfs_enable_1   uint16\n\tCfs_enable_2   uint16\n\tCsf_default    uint16\n\tDma_ultra      uint16\n\tTrseuc         uint16\n\tTrsEuc         uint16\n\tCurAPMvalues   uint16\n\tMprc           uint16\n\tHw_config      uint16\n\tAcoustic       uint16\n\tMsrqs          uint16\n\tSxfert         uint16\n\tSal            uint16\n\tSpg            uint32\n\tLba_capacity_2 uint64\n\tWords104_125   [22]uint16\n\tLast_lun       uint16\n\tWord127        uint16\n\tDlf            uint16\n\tCsfo           uint16\n\tWords130_155   [26]uint16\n\tWord156        uint16\n\tWords157_159   [3]uint16\n\tCfa_power      uint16\n\tWords161_175   [15]uint16\n\tWords176_205   [30]uint16\n\tWords206_254   [49]uint16\n\tIntegrity_word uint16\n}\n\ntype Statfs_t struct {\n\tType    int32\n\tBsize   int32\n\tBlocks  uint64\n\tBfree   uint64\n\tBavail  uint64\n\tFiles   uint64\n\tFfree   uint64\n\tFsid    Fsid\n\tNamelen int32\n\tFrsize  int32\n\tFlags   int32\n\tSpare   [4]int32\n\t_       [4]byte\n}\n\nconst (\n\tST_MANDLOCK    = 0x40\n\tST_NOATIME     = 0x400\n\tST_NODEV       = 0x4\n\tST_NODIRATIME  = 0x800\n\tST_NOEXEC      = 0x8\n\tST_NOSUID      = 0x2\n\tST_RDONLY      = 0x1\n\tST_RELATIME    = 0x1000\n\tST_SYNCHRONOUS = 0x10\n)\n\ntype TpacketHdr struct {\n\tStatus  uint32\n\tLen     uint32\n\tSnaplen uint32\n\tMac     uint16\n\tNet     uint16\n\tSec     uint32\n\tUsec    uint32\n}\n\ntype Tpacket2Hdr struct {\n\tStatus    uint32\n\tLen       uint32\n\tSnaplen   uint32\n\tMac       uint16\n\tNet       uint16\n\tSec       uint32\n\tNsec      uint32\n\tVlan_tci  uint16\n\tVlan_tpid uint16\n\t_         [4]uint8\n}\n\ntype Tpacket3Hdr struct {\n\tNext_offset uint32\n\tSec         uint32\n\tNsec        uint32\n\tSnaplen     uint32\n\tLen         uint32\n\tStatus      uint32\n\tMac         uint16\n\tNet         uint16\n\tHv1         TpacketHdrVariant1\n\t_           [8]uint8\n}\n\ntype TpacketHdrVariant1 struct {\n\tRxhash    uint32\n\tVlan_tci  uint32\n\tVlan_tpid uint16\n\t_         uint16\n}\n\ntype TpacketBlockDesc struct {\n\tVersion uint32\n\tTo_priv uint32\n\tHdr     [40]byte\n}\n\ntype TpacketBDTS struct {\n\tSec  uint32\n\tUsec uint32\n}\n\ntype TpacketHdrV1 struct {\n\tBlock_status        uint32\n\tNum_pkts            uint32\n\tOffset_to_first_pkt uint32\n\tBlk_len             uint32\n\tSeq_num             uint64\n\tTs_first_pkt        TpacketBDTS\n\tTs_last_pkt         TpacketBDTS\n}\n\ntype TpacketReq struct {\n\tBlock_size uint32\n\tBlock_nr   uint32\n\tFrame_size uint32\n\tFrame_nr   uint32\n}\n\ntype TpacketReq3 struct {\n\tBlock_size       uint32\n\tBlock_nr         uint32\n\tFrame_size       uint32\n\tFrame_nr         uint32\n\tRetire_blk_tov   uint32\n\tSizeof_priv      uint32\n\tFeature_req_word uint32\n}\n\ntype TpacketStats struct {\n\tPackets uint32\n\tDrops   uint32\n}\n\ntype TpacketStatsV3 struct {\n\tPackets      uint32\n\tDrops        uint32\n\tFreeze_q_cnt uint32\n}\n\ntype TpacketAuxdata struct {\n\tStatus    uint32\n\tLen       uint32\n\tSnaplen   uint32\n\tMac       uint16\n\tNet       uint16\n\tVlan_tci  uint16\n\tVlan_tpid uint16\n}\n\nconst (\n\tTPACKET_V1 = 0x0\n\tTPACKET_V2 = 0x1\n\tTPACKET_V3 = 0x2\n)\n\nconst (\n\tSizeofTpacketHdr  = 0x18\n\tSizeofTpacket2Hdr = 0x20\n\tSizeofTpacket3Hdr = 0x30\n\n\tSizeofTpacketStats   = 0x8\n\tSizeofTpacketStatsV3 = 0xc\n)\n\nconst (\n\tNF_INET_PRE_ROUTING  = 0x0\n\tNF_INET_LOCAL_IN     = 0x1\n\tNF_INET_FORWARD      = 0x2\n\tNF_INET_LOCAL_OUT    = 0x3\n\tNF_INET_POST_ROUTING = 0x4\n\tNF_INET_NUMHOOKS     = 0x5\n)\n\nconst (\n\tNF_NETDEV_INGRESS  = 0x0\n\tNF_NETDEV_NUMHOOKS = 0x1\n)\n\nconst (\n\tNFPROTO_UNSPEC   = 0x0\n\tNFPROTO_INET     = 0x1\n\tNFPROTO_IPV4     = 0x2\n\tNFPROTO_ARP      = 0x3\n\tNFPROTO_NETDEV   = 0x5\n\tNFPROTO_BRIDGE   = 0x7\n\tNFPROTO_IPV6     = 0xa\n\tNFPROTO_DECNET   = 0xc\n\tNFPROTO_NUMPROTO = 0xd\n)\n\ntype Nfgenmsg struct {\n\tNfgen_family uint8\n\tVersion      uint8\n\tRes_id       uint16\n}\n\nconst (\n\tNFNL_BATCH_UNSPEC = 0x0\n\tNFNL_BATCH_GENID  = 0x1\n)\n\nconst (\n\tNFT_REG_VERDICT                   = 0x0\n\tNFT_REG_1                         = 0x1\n\tNFT_REG_2                         = 0x2\n\tNFT_REG_3                         = 0x3\n\tNFT_REG_4                         = 0x4\n\tNFT_REG32_00                      = 0x8\n\tNFT_REG32_01                      = 0x9\n\tNFT_REG32_02                      = 0xa\n\tNFT_REG32_03                      = 0xb\n\tNFT_REG32_04                      = 0xc\n\tNFT_REG32_05                      = 0xd\n\tNFT_REG32_06                      = 0xe\n\tNFT_REG32_07                      = 0xf\n\tNFT_REG32_08                      = 0x10\n\tNFT_REG32_09                      = 0x11\n\tNFT_REG32_10                      = 0x12\n\tNFT_REG32_11                      = 0x13\n\tNFT_REG32_12                      = 0x14\n\tNFT_REG32_13                      = 0x15\n\tNFT_REG32_14                      = 0x16\n\tNFT_REG32_15                      = 0x17\n\tNFT_CONTINUE                      = -0x1\n\tNFT_BREAK                         = -0x2\n\tNFT_JUMP                          = -0x3\n\tNFT_GOTO                          = -0x4\n\tNFT_RETURN                        = -0x5\n\tNFT_MSG_NEWTABLE                  = 0x0\n\tNFT_MSG_GETTABLE                  = 0x1\n\tNFT_MSG_DELTABLE                  = 0x2\n\tNFT_MSG_NEWCHAIN                  = 0x3\n\tNFT_MSG_GETCHAIN                  = 0x4\n\tNFT_MSG_DELCHAIN                  = 0x5\n\tNFT_MSG_NEWRULE                   = 0x6\n\tNFT_MSG_GETRULE                   = 0x7\n\tNFT_MSG_DELRULE                   = 0x8\n\tNFT_MSG_NEWSET                    = 0x9\n\tNFT_MSG_GETSET                    = 0xa\n\tNFT_MSG_DELSET                    = 0xb\n\tNFT_MSG_NEWSETELEM                = 0xc\n\tNFT_MSG_GETSETELEM                = 0xd\n\tNFT_MSG_DELSETELEM                = 0xe\n\tNFT_MSG_NEWGEN                    = 0xf\n\tNFT_MSG_GETGEN                    = 0x10\n\tNFT_MSG_TRACE                     = 0x11\n\tNFT_MSG_NEWOBJ                    = 0x12\n\tNFT_MSG_GETOBJ                    = 0x13\n\tNFT_MSG_DELOBJ                    = 0x14\n\tNFT_MSG_GETOBJ_RESET              = 0x15\n\tNFT_MSG_MAX                       = 0x19\n\tNFTA_LIST_UNPEC                   = 0x0\n\tNFTA_LIST_ELEM                    = 0x1\n\tNFTA_HOOK_UNSPEC                  = 0x0\n\tNFTA_HOOK_HOOKNUM                 = 0x1\n\tNFTA_HOOK_PRIORITY                = 0x2\n\tNFTA_HOOK_DEV                     = 0x3\n\tNFT_TABLE_F_DORMANT               = 0x1\n\tNFTA_TABLE_UNSPEC                 = 0x0\n\tNFTA_TABLE_NAME                   = 0x1\n\tNFTA_TABLE_FLAGS                  = 0x2\n\tNFTA_TABLE_USE                    = 0x3\n\tNFTA_CHAIN_UNSPEC                 = 0x0\n\tNFTA_CHAIN_TABLE                  = 0x1\n\tNFTA_CHAIN_HANDLE                 = 0x2\n\tNFTA_CHAIN_NAME                   = 0x3\n\tNFTA_CHAIN_HOOK                   = 0x4\n\tNFTA_CHAIN_POLICY                 = 0x5\n\tNFTA_CHAIN_USE                    = 0x6\n\tNFTA_CHAIN_TYPE                   = 0x7\n\tNFTA_CHAIN_COUNTERS               = 0x8\n\tNFTA_CHAIN_PAD                    = 0x9\n\tNFTA_RULE_UNSPEC                  = 0x0\n\tNFTA_RULE_TABLE                   = 0x1\n\tNFTA_RULE_CHAIN                   = 0x2\n\tNFTA_RULE_HANDLE                  = 0x3\n\tNFTA_RULE_EXPRESSIONS             = 0x4\n\tNFTA_RULE_COMPAT                  = 0x5\n\tNFTA_RULE_POSITION                = 0x6\n\tNFTA_RULE_USERDATA                = 0x7\n\tNFTA_RULE_PAD                     = 0x8\n\tNFTA_RULE_ID                      = 0x9\n\tNFT_RULE_COMPAT_F_INV             = 0x2\n\tNFT_RULE_COMPAT_F_MASK            = 0x2\n\tNFTA_RULE_COMPAT_UNSPEC           = 0x0\n\tNFTA_RULE_COMPAT_PROTO            = 0x1\n\tNFTA_RULE_COMPAT_FLAGS            = 0x2\n\tNFT_SET_ANONYMOUS                 = 0x1\n\tNFT_SET_CONSTANT                  = 0x2\n\tNFT_SET_INTERVAL                  = 0x4\n\tNFT_SET_MAP                       = 0x8\n\tNFT_SET_TIMEOUT                   = 0x10\n\tNFT_SET_EVAL                      = 0x20\n\tNFT_SET_OBJECT                    = 0x40\n\tNFT_SET_POL_PERFORMANCE           = 0x0\n\tNFT_SET_POL_MEMORY                = 0x1\n\tNFTA_SET_DESC_UNSPEC              = 0x0\n\tNFTA_SET_DESC_SIZE                = 0x1\n\tNFTA_SET_UNSPEC                   = 0x0\n\tNFTA_SET_TABLE                    = 0x1\n\tNFTA_SET_NAME                     = 0x2\n\tNFTA_SET_FLAGS                    = 0x3\n\tNFTA_SET_KEY_TYPE                 = 0x4\n\tNFTA_SET_KEY_LEN                  = 0x5\n\tNFTA_SET_DATA_TYPE                = 0x6\n\tNFTA_SET_DATA_LEN                 = 0x7\n\tNFTA_SET_POLICY                   = 0x8\n\tNFTA_SET_DESC                     = 0x9\n\tNFTA_SET_ID                       = 0xa\n\tNFTA_SET_TIMEOUT                  = 0xb\n\tNFTA_SET_GC_INTERVAL              = 0xc\n\tNFTA_SET_USERDATA                 = 0xd\n\tNFTA_SET_PAD                      = 0xe\n\tNFTA_SET_OBJ_TYPE                 = 0xf\n\tNFT_SET_ELEM_INTERVAL_END         = 0x1\n\tNFTA_SET_ELEM_UNSPEC              = 0x0\n\tNFTA_SET_ELEM_KEY                 = 0x1\n\tNFTA_SET_ELEM_DATA                = 0x2\n\tNFTA_SET_ELEM_FLAGS               = 0x3\n\tNFTA_SET_ELEM_TIMEOUT             = 0x4\n\tNFTA_SET_ELEM_EXPIRATION          = 0x5\n\tNFTA_SET_ELEM_USERDATA            = 0x6\n\tNFTA_SET_ELEM_EXPR                = 0x7\n\tNFTA_SET_ELEM_PAD                 = 0x8\n\tNFTA_SET_ELEM_OBJREF              = 0x9\n\tNFTA_SET_ELEM_LIST_UNSPEC         = 0x0\n\tNFTA_SET_ELEM_LIST_TABLE          = 0x1\n\tNFTA_SET_ELEM_LIST_SET            = 0x2\n\tNFTA_SET_ELEM_LIST_ELEMENTS       = 0x3\n\tNFTA_SET_ELEM_LIST_SET_ID         = 0x4\n\tNFT_DATA_VALUE                    = 0x0\n\tNFT_DATA_VERDICT                  = 0xffffff00\n\tNFTA_DATA_UNSPEC                  = 0x0\n\tNFTA_DATA_VALUE                   = 0x1\n\tNFTA_DATA_VERDICT                 = 0x2\n\tNFTA_VERDICT_UNSPEC               = 0x0\n\tNFTA_VERDICT_CODE                 = 0x1\n\tNFTA_VERDICT_CHAIN                = 0x2\n\tNFTA_EXPR_UNSPEC                  = 0x0\n\tNFTA_EXPR_NAME                    = 0x1\n\tNFTA_EXPR_DATA                    = 0x2\n\tNFTA_IMMEDIATE_UNSPEC             = 0x0\n\tNFTA_IMMEDIATE_DREG               = 0x1\n\tNFTA_IMMEDIATE_DATA               = 0x2\n\tNFTA_BITWISE_UNSPEC               = 0x0\n\tNFTA_BITWISE_SREG                 = 0x1\n\tNFTA_BITWISE_DREG                 = 0x2\n\tNFTA_BITWISE_LEN                  = 0x3\n\tNFTA_BITWISE_MASK                 = 0x4\n\tNFTA_BITWISE_XOR                  = 0x5\n\tNFT_BYTEORDER_NTOH                = 0x0\n\tNFT_BYTEORDER_HTON                = 0x1\n\tNFTA_BYTEORDER_UNSPEC             = 0x0\n\tNFTA_BYTEORDER_SREG               = 0x1\n\tNFTA_BYTEORDER_DREG               = 0x2\n\tNFTA_BYTEORDER_OP                 = 0x3\n\tNFTA_BYTEORDER_LEN                = 0x4\n\tNFTA_BYTEORDER_SIZE               = 0x5\n\tNFT_CMP_EQ                        = 0x0\n\tNFT_CMP_NEQ                       = 0x1\n\tNFT_CMP_LT                        = 0x2\n\tNFT_CMP_LTE                       = 0x3\n\tNFT_CMP_GT                        = 0x4\n\tNFT_CMP_GTE                       = 0x5\n\tNFTA_CMP_UNSPEC                   = 0x0\n\tNFTA_CMP_SREG                     = 0x1\n\tNFTA_CMP_OP                       = 0x2\n\tNFTA_CMP_DATA                     = 0x3\n\tNFT_RANGE_EQ                      = 0x0\n\tNFT_RANGE_NEQ                     = 0x1\n\tNFTA_RANGE_UNSPEC                 = 0x0\n\tNFTA_RANGE_SREG                   = 0x1\n\tNFTA_RANGE_OP                     = 0x2\n\tNFTA_RANGE_FROM_DATA              = 0x3\n\tNFTA_RANGE_TO_DATA                = 0x4\n\tNFT_LOOKUP_F_INV                  = 0x1\n\tNFTA_LOOKUP_UNSPEC                = 0x0\n\tNFTA_LOOKUP_SET                   = 0x1\n\tNFTA_LOOKUP_SREG                  = 0x2\n\tNFTA_LOOKUP_DREG                  = 0x3\n\tNFTA_LOOKUP_SET_ID                = 0x4\n\tNFTA_LOOKUP_FLAGS                 = 0x5\n\tNFT_DYNSET_OP_ADD                 = 0x0\n\tNFT_DYNSET_OP_UPDATE              = 0x1\n\tNFT_DYNSET_F_INV                  = 0x1\n\tNFTA_DYNSET_UNSPEC                = 0x0\n\tNFTA_DYNSET_SET_NAME              = 0x1\n\tNFTA_DYNSET_SET_ID                = 0x2\n\tNFTA_DYNSET_OP                    = 0x3\n\tNFTA_DYNSET_SREG_KEY              = 0x4\n\tNFTA_DYNSET_SREG_DATA             = 0x5\n\tNFTA_DYNSET_TIMEOUT               = 0x6\n\tNFTA_DYNSET_EXPR                  = 0x7\n\tNFTA_DYNSET_PAD                   = 0x8\n\tNFTA_DYNSET_FLAGS                 = 0x9\n\tNFT_PAYLOAD_LL_HEADER             = 0x0\n\tNFT_PAYLOAD_NETWORK_HEADER        = 0x1\n\tNFT_PAYLOAD_TRANSPORT_HEADER      = 0x2\n\tNFT_PAYLOAD_CSUM_NONE             = 0x0\n\tNFT_PAYLOAD_CSUM_INET             = 0x1\n\tNFT_PAYLOAD_L4CSUM_PSEUDOHDR      = 0x1\n\tNFTA_PAYLOAD_UNSPEC               = 0x0\n\tNFTA_PAYLOAD_DREG                 = 0x1\n\tNFTA_PAYLOAD_BASE                 = 0x2\n\tNFTA_PAYLOAD_OFFSET               = 0x3\n\tNFTA_PAYLOAD_LEN                  = 0x4\n\tNFTA_PAYLOAD_SREG                 = 0x5\n\tNFTA_PAYLOAD_CSUM_TYPE            = 0x6\n\tNFTA_PAYLOAD_CSUM_OFFSET          = 0x7\n\tNFTA_PAYLOAD_CSUM_FLAGS           = 0x8\n\tNFT_EXTHDR_F_PRESENT              = 0x1\n\tNFT_EXTHDR_OP_IPV6                = 0x0\n\tNFT_EXTHDR_OP_TCPOPT              = 0x1\n\tNFTA_EXTHDR_UNSPEC                = 0x0\n\tNFTA_EXTHDR_DREG                  = 0x1\n\tNFTA_EXTHDR_TYPE                  = 0x2\n\tNFTA_EXTHDR_OFFSET                = 0x3\n\tNFTA_EXTHDR_LEN                   = 0x4\n\tNFTA_EXTHDR_FLAGS                 = 0x5\n\tNFTA_EXTHDR_OP                    = 0x6\n\tNFTA_EXTHDR_SREG                  = 0x7\n\tNFT_META_LEN                      = 0x0\n\tNFT_META_PROTOCOL                 = 0x1\n\tNFT_META_PRIORITY                 = 0x2\n\tNFT_META_MARK                     = 0x3\n\tNFT_META_IIF                      = 0x4\n\tNFT_META_OIF                      = 0x5\n\tNFT_META_IIFNAME                  = 0x6\n\tNFT_META_OIFNAME                  = 0x7\n\tNFT_META_IIFTYPE                  = 0x8\n\tNFT_META_OIFTYPE                  = 0x9\n\tNFT_META_SKUID                    = 0xa\n\tNFT_META_SKGID                    = 0xb\n\tNFT_META_NFTRACE                  = 0xc\n\tNFT_META_RTCLASSID                = 0xd\n\tNFT_META_SECMARK                  = 0xe\n\tNFT_META_NFPROTO                  = 0xf\n\tNFT_META_L4PROTO                  = 0x10\n\tNFT_META_BRI_IIFNAME              = 0x11\n\tNFT_META_BRI_OIFNAME              = 0x12\n\tNFT_META_PKTTYPE                  = 0x13\n\tNFT_META_CPU                      = 0x14\n\tNFT_META_IIFGROUP                 = 0x15\n\tNFT_META_OIFGROUP                 = 0x16\n\tNFT_META_CGROUP                   = 0x17\n\tNFT_META_PRANDOM                  = 0x18\n\tNFT_RT_CLASSID                    = 0x0\n\tNFT_RT_NEXTHOP4                   = 0x1\n\tNFT_RT_NEXTHOP6                   = 0x2\n\tNFT_RT_TCPMSS                     = 0x3\n\tNFT_HASH_JENKINS                  = 0x0\n\tNFT_HASH_SYM                      = 0x1\n\tNFTA_HASH_UNSPEC                  = 0x0\n\tNFTA_HASH_SREG                    = 0x1\n\tNFTA_HASH_DREG                    = 0x2\n\tNFTA_HASH_LEN                     = 0x3\n\tNFTA_HASH_MODULUS                 = 0x4\n\tNFTA_HASH_SEED                    = 0x5\n\tNFTA_HASH_OFFSET                  = 0x6\n\tNFTA_HASH_TYPE                    = 0x7\n\tNFTA_META_UNSPEC                  = 0x0\n\tNFTA_META_DREG                    = 0x1\n\tNFTA_META_KEY                     = 0x2\n\tNFTA_META_SREG                    = 0x3\n\tNFTA_RT_UNSPEC                    = 0x0\n\tNFTA_RT_DREG                      = 0x1\n\tNFTA_RT_KEY                       = 0x2\n\tNFT_CT_STATE                      = 0x0\n\tNFT_CT_DIRECTION                  = 0x1\n\tNFT_CT_STATUS                     = 0x2\n\tNFT_CT_MARK                       = 0x3\n\tNFT_CT_SECMARK                    = 0x4\n\tNFT_CT_EXPIRATION                 = 0x5\n\tNFT_CT_HELPER                     = 0x6\n\tNFT_CT_L3PROTOCOL                 = 0x7\n\tNFT_CT_SRC                        = 0x8\n\tNFT_CT_DST                        = 0x9\n\tNFT_CT_PROTOCOL                   = 0xa\n\tNFT_CT_PROTO_SRC                  = 0xb\n\tNFT_CT_PROTO_DST                  = 0xc\n\tNFT_CT_LABELS                     = 0xd\n\tNFT_CT_PKTS                       = 0xe\n\tNFT_CT_BYTES                      = 0xf\n\tNFT_CT_AVGPKT                     = 0x10\n\tNFT_CT_ZONE                       = 0x11\n\tNFT_CT_EVENTMASK                  = 0x12\n\tNFTA_CT_UNSPEC                    = 0x0\n\tNFTA_CT_DREG                      = 0x1\n\tNFTA_CT_KEY                       = 0x2\n\tNFTA_CT_DIRECTION                 = 0x3\n\tNFTA_CT_SREG                      = 0x4\n\tNFT_LIMIT_PKTS                    = 0x0\n\tNFT_LIMIT_PKT_BYTES               = 0x1\n\tNFT_LIMIT_F_INV                   = 0x1\n\tNFTA_LIMIT_UNSPEC                 = 0x0\n\tNFTA_LIMIT_RATE                   = 0x1\n\tNFTA_LIMIT_UNIT                   = 0x2\n\tNFTA_LIMIT_BURST                  = 0x3\n\tNFTA_LIMIT_TYPE                   = 0x4\n\tNFTA_LIMIT_FLAGS                  = 0x5\n\tNFTA_LIMIT_PAD                    = 0x6\n\tNFTA_COUNTER_UNSPEC               = 0x0\n\tNFTA_COUNTER_BYTES                = 0x1\n\tNFTA_COUNTER_PACKETS              = 0x2\n\tNFTA_COUNTER_PAD                  = 0x3\n\tNFTA_LOG_UNSPEC                   = 0x0\n\tNFTA_LOG_GROUP                    = 0x1\n\tNFTA_LOG_PREFIX                   = 0x2\n\tNFTA_LOG_SNAPLEN                  = 0x3\n\tNFTA_LOG_QTHRESHOLD               = 0x4\n\tNFTA_LOG_LEVEL                    = 0x5\n\tNFTA_LOG_FLAGS                    = 0x6\n\tNFTA_QUEUE_UNSPEC                 = 0x0\n\tNFTA_QUEUE_NUM                    = 0x1\n\tNFTA_QUEUE_TOTAL                  = 0x2\n\tNFTA_QUEUE_FLAGS                  = 0x3\n\tNFTA_QUEUE_SREG_QNUM              = 0x4\n\tNFT_QUOTA_F_INV                   = 0x1\n\tNFT_QUOTA_F_DEPLETED              = 0x2\n\tNFTA_QUOTA_UNSPEC                 = 0x0\n\tNFTA_QUOTA_BYTES                  = 0x1\n\tNFTA_QUOTA_FLAGS                  = 0x2\n\tNFTA_QUOTA_PAD                    = 0x3\n\tNFTA_QUOTA_CONSUMED               = 0x4\n\tNFT_REJECT_ICMP_UNREACH           = 0x0\n\tNFT_REJECT_TCP_RST                = 0x1\n\tNFT_REJECT_ICMPX_UNREACH          = 0x2\n\tNFT_REJECT_ICMPX_NO_ROUTE         = 0x0\n\tNFT_REJECT_ICMPX_PORT_UNREACH     = 0x1\n\tNFT_REJECT_ICMPX_HOST_UNREACH     = 0x2\n\tNFT_REJECT_ICMPX_ADMIN_PROHIBITED = 0x3\n\tNFTA_REJECT_UNSPEC                = 0x0\n\tNFTA_REJECT_TYPE                  = 0x1\n\tNFTA_REJECT_ICMP_CODE             = 0x2\n\tNFT_NAT_SNAT                      = 0x0\n\tNFT_NAT_DNAT                      = 0x1\n\tNFTA_NAT_UNSPEC                   = 0x0\n\tNFTA_NAT_TYPE                     = 0x1\n\tNFTA_NAT_FAMILY                   = 0x2\n\tNFTA_NAT_REG_ADDR_MIN             = 0x3\n\tNFTA_NAT_REG_ADDR_MAX             = 0x4\n\tNFTA_NAT_REG_PROTO_MIN            = 0x5\n\tNFTA_NAT_REG_PROTO_MAX            = 0x6\n\tNFTA_NAT_FLAGS                    = 0x7\n\tNFTA_MASQ_UNSPEC                  = 0x0\n\tNFTA_MASQ_FLAGS                   = 0x1\n\tNFTA_MASQ_REG_PROTO_MIN           = 0x2\n\tNFTA_MASQ_REG_PROTO_MAX           = 0x3\n\tNFTA_REDIR_UNSPEC                 = 0x0\n\tNFTA_REDIR_REG_PROTO_MIN          = 0x1\n\tNFTA_REDIR_REG_PROTO_MAX          = 0x2\n\tNFTA_REDIR_FLAGS                  = 0x3\n\tNFTA_DUP_UNSPEC                   = 0x0\n\tNFTA_DUP_SREG_ADDR                = 0x1\n\tNFTA_DUP_SREG_DEV                 = 0x2\n\tNFTA_FWD_UNSPEC                   = 0x0\n\tNFTA_FWD_SREG_DEV                 = 0x1\n\tNFTA_OBJREF_UNSPEC                = 0x0\n\tNFTA_OBJREF_IMM_TYPE              = 0x1\n\tNFTA_OBJREF_IMM_NAME              = 0x2\n\tNFTA_OBJREF_SET_SREG              = 0x3\n\tNFTA_OBJREF_SET_NAME              = 0x4\n\tNFTA_OBJREF_SET_ID                = 0x5\n\tNFTA_GEN_UNSPEC                   = 0x0\n\tNFTA_GEN_ID                       = 0x1\n\tNFTA_GEN_PROC_PID                 = 0x2\n\tNFTA_GEN_PROC_NAME                = 0x3\n\tNFTA_FIB_UNSPEC                   = 0x0\n\tNFTA_FIB_DREG                     = 0x1\n\tNFTA_FIB_RESULT                   = 0x2\n\tNFTA_FIB_FLAGS                    = 0x3\n\tNFT_FIB_RESULT_UNSPEC             = 0x0\n\tNFT_FIB_RESULT_OIF                = 0x1\n\tNFT_FIB_RESULT_OIFNAME            = 0x2\n\tNFT_FIB_RESULT_ADDRTYPE           = 0x3\n\tNFTA_FIB_F_SADDR                  = 0x1\n\tNFTA_FIB_F_DADDR                  = 0x2\n\tNFTA_FIB_F_MARK                   = 0x4\n\tNFTA_FIB_F_IIF                    = 0x8\n\tNFTA_FIB_F_OIF                    = 0x10\n\tNFTA_FIB_F_PRESENT                = 0x20\n\tNFTA_CT_HELPER_UNSPEC             = 0x0\n\tNFTA_CT_HELPER_NAME               = 0x1\n\tNFTA_CT_HELPER_L3PROTO            = 0x2\n\tNFTA_CT_HELPER_L4PROTO            = 0x3\n\tNFTA_OBJ_UNSPEC                   = 0x0\n\tNFTA_OBJ_TABLE                    = 0x1\n\tNFTA_OBJ_NAME                     = 0x2\n\tNFTA_OBJ_TYPE                     = 0x3\n\tNFTA_OBJ_DATA                     = 0x4\n\tNFTA_OBJ_USE                      = 0x5\n\tNFTA_TRACE_UNSPEC                 = 0x0\n\tNFTA_TRACE_TABLE                  = 0x1\n\tNFTA_TRACE_CHAIN                  = 0x2\n\tNFTA_TRACE_RULE_HANDLE            = 0x3\n\tNFTA_TRACE_TYPE                   = 0x4\n\tNFTA_TRACE_VERDICT                = 0x5\n\tNFTA_TRACE_ID                     = 0x6\n\tNFTA_TRACE_LL_HEADER              = 0x7\n\tNFTA_TRACE_NETWORK_HEADER         = 0x8\n\tNFTA_TRACE_TRANSPORT_HEADER       = 0x9\n\tNFTA_TRACE_IIF                    = 0xa\n\tNFTA_TRACE_IIFTYPE                = 0xb\n\tNFTA_TRACE_OIF                    = 0xc\n\tNFTA_TRACE_OIFTYPE                = 0xd\n\tNFTA_TRACE_MARK                   = 0xe\n\tNFTA_TRACE_NFPROTO                = 0xf\n\tNFTA_TRACE_POLICY                 = 0x10\n\tNFTA_TRACE_PAD                    = 0x11\n\tNFT_TRACETYPE_UNSPEC              = 0x0\n\tNFT_TRACETYPE_POLICY              = 0x1\n\tNFT_TRACETYPE_RETURN              = 0x2\n\tNFT_TRACETYPE_RULE                = 0x3\n\tNFTA_NG_UNSPEC                    = 0x0\n\tNFTA_NG_DREG                      = 0x1\n\tNFTA_NG_MODULUS                   = 0x2\n\tNFTA_NG_TYPE                      = 0x3\n\tNFTA_NG_OFFSET                    = 0x4\n\tNFT_NG_INCREMENTAL                = 0x0\n\tNFT_NG_RANDOM                     = 0x1\n)\n\ntype RTCTime struct {\n\tSec   int32\n\tMin   int32\n\tHour  int32\n\tMday  int32\n\tMon   int32\n\tYear  int32\n\tWday  int32\n\tYday  int32\n\tIsdst int32\n}\n\ntype RTCWkAlrm struct {\n\tEnabled uint8\n\tPending uint8\n\tTime    RTCTime\n}\n\ntype RTCPLLInfo struct {\n\tCtrl    int32\n\tValue   int32\n\tMax     int32\n\tMin     int32\n\tPosmult int32\n\tNegmult int32\n\tClock   int32\n}\n\ntype BlkpgIoctlArg struct {\n\tOp      int32\n\tFlags   int32\n\tDatalen int32\n\tData    *byte\n}\n\ntype BlkpgPartition struct {\n\tStart   int64\n\tLength  int64\n\tPno     int32\n\tDevname [64]uint8\n\tVolname [64]uint8\n\t_       [4]byte\n}\n\nconst (\n\tBLKPG                  = 0x1269\n\tBLKPG_ADD_PARTITION    = 0x1\n\tBLKPG_DEL_PARTITION    = 0x2\n\tBLKPG_RESIZE_PARTITION = 0x3\n)\n\nconst (\n\tNETNSA_NONE = 0x0\n\tNETNSA_NSID = 0x1\n\tNETNSA_PID  = 0x2\n\tNETNSA_FD   = 0x3\n)\n\ntype XDPRingOffset struct {\n\tProducer uint64\n\tConsumer uint64\n\tDesc     uint64\n}\n\ntype XDPMmapOffsets struct {\n\tRx XDPRingOffset\n\tTx XDPRingOffset\n\tFr XDPRingOffset\n\tCr XDPRingOffset\n}\n\ntype XDPUmemReg struct {\n\tAddr     uint64\n\tLen      uint64\n\tSize     uint32\n\tHeadroom uint32\n}\n\ntype XDPStatistics struct {\n\tRx_dropped       uint64\n\tRx_invalid_descs uint64\n\tTx_invalid_descs uint64\n}\n\ntype XDPDesc struct {\n\tAddr    uint64\n\tLen     uint32\n\tOptions uint32\n}\n\nconst (\n\tNCSI_CMD_UNSPEC                 = 0x0\n\tNCSI_CMD_PKG_INFO               = 0x1\n\tNCSI_CMD_SET_INTERFACE          = 0x2\n\tNCSI_CMD_CLEAR_INTERFACE        = 0x3\n\tNCSI_ATTR_UNSPEC                = 0x0\n\tNCSI_ATTR_IFINDEX               = 0x1\n\tNCSI_ATTR_PACKAGE_LIST          = 0x2\n\tNCSI_ATTR_PACKAGE_ID            = 0x3\n\tNCSI_ATTR_CHANNEL_ID            = 0x4\n\tNCSI_PKG_ATTR_UNSPEC            = 0x0\n\tNCSI_PKG_ATTR                   = 0x1\n\tNCSI_PKG_ATTR_ID                = 0x2\n\tNCSI_PKG_ATTR_FORCED            = 0x3\n\tNCSI_PKG_ATTR_CHANNEL_LIST      = 0x4\n\tNCSI_CHANNEL_ATTR_UNSPEC        = 0x0\n\tNCSI_CHANNEL_ATTR               = 0x1\n\tNCSI_CHANNEL_ATTR_ID            = 0x2\n\tNCSI_CHANNEL_ATTR_VERSION_MAJOR = 0x3\n\tNCSI_CHANNEL_ATTR_VERSION_MINOR = 0x4\n\tNCSI_CHANNEL_ATTR_VERSION_STR   = 0x5\n\tNCSI_CHANNEL_ATTR_LINK_STATE    = 0x6\n\tNCSI_CHANNEL_ATTR_ACTIVE        = 0x7\n\tNCSI_CHANNEL_ATTR_FORCED        = 0x8\n\tNCSI_CHANNEL_ATTR_VLAN_LIST     = 0x9\n\tNCSI_CHANNEL_ATTR_VLAN_ID       = 0xa\n)\n\ntype ScmTimestamping struct {\n\tTs [3]Timespec\n}\n\nconst (\n\tSOF_TIMESTAMPING_TX_HARDWARE  = 0x1\n\tSOF_TIMESTAMPING_TX_SOFTWARE  = 0x2\n\tSOF_TIMESTAMPING_RX_HARDWARE  = 0x4\n\tSOF_TIMESTAMPING_RX_SOFTWARE  = 0x8\n\tSOF_TIMESTAMPING_SOFTWARE     = 0x10\n\tSOF_TIMESTAMPING_SYS_HARDWARE = 0x20\n\tSOF_TIMESTAMPING_RAW_HARDWARE = 0x40\n\tSOF_TIMESTAMPING_OPT_ID       = 0x80\n\tSOF_TIMESTAMPING_TX_SCHED     = 0x100\n\tSOF_TIMESTAMPING_TX_ACK       = 0x200\n\tSOF_TIMESTAMPING_OPT_CMSG     = 0x400\n\tSOF_TIMESTAMPING_OPT_TSONLY   = 0x800\n\tSOF_TIMESTAMPING_OPT_STATS    = 0x1000\n\tSOF_TIMESTAMPING_OPT_PKTINFO  = 0x2000\n\tSOF_TIMESTAMPING_OPT_TX_SWHW  = 0x4000\n\n\tSOF_TIMESTAMPING_LAST = 0x4000\n\tSOF_TIMESTAMPING_MASK = 0x7fff\n\n\tSCM_TSTAMP_SND   = 0x0\n\tSCM_TSTAMP_SCHED = 0x1\n\tSCM_TSTAMP_ACK   = 0x2\n)\n\ntype SockExtendedErr struct {\n\tErrno  uint32\n\tOrigin uint8\n\tType   uint8\n\tCode   uint8\n\tPad    uint8\n\tInfo   uint32\n\tData   uint32\n}\n\ntype FanotifyEventMetadata struct {\n\tEvent_len    uint32\n\tVers         uint8\n\tReserved     uint8\n\tMetadata_len uint16\n\tMask         uint64\n\tFd           int32\n\tPid          int32\n}\n\ntype FanotifyResponse struct {\n\tFd       int32\n\tResponse uint32\n}\n\nconst (\n\tCRYPTO_MSG_BASE      = 0x10\n\tCRYPTO_MSG_NEWALG    = 0x10\n\tCRYPTO_MSG_DELALG    = 0x11\n\tCRYPTO_MSG_UPDATEALG = 0x12\n\tCRYPTO_MSG_GETALG    = 0x13\n\tCRYPTO_MSG_DELRNG    = 0x14\n\tCRYPTO_MSG_GETSTAT   = 0x15\n)\n\nconst (\n\tCRYPTOCFGA_UNSPEC           = 0x0\n\tCRYPTOCFGA_PRIORITY_VAL     = 0x1\n\tCRYPTOCFGA_REPORT_LARVAL    = 0x2\n\tCRYPTOCFGA_REPORT_HASH      = 0x3\n\tCRYPTOCFGA_REPORT_BLKCIPHER = 0x4\n\tCRYPTOCFGA_REPORT_AEAD      = 0x5\n\tCRYPTOCFGA_REPORT_COMPRESS  = 0x6\n\tCRYPTOCFGA_REPORT_RNG       = 0x7\n\tCRYPTOCFGA_REPORT_CIPHER    = 0x8\n\tCRYPTOCFGA_REPORT_AKCIPHER  = 0x9\n\tCRYPTOCFGA_REPORT_KPP       = 0xa\n\tCRYPTOCFGA_REPORT_ACOMP     = 0xb\n\tCRYPTOCFGA_STAT_LARVAL      = 0xc\n\tCRYPTOCFGA_STAT_HASH        = 0xd\n\tCRYPTOCFGA_STAT_BLKCIPHER   = 0xe\n\tCRYPTOCFGA_STAT_AEAD        = 0xf\n\tCRYPTOCFGA_STAT_COMPRESS    = 0x10\n\tCRYPTOCFGA_STAT_RNG         = 0x11\n\tCRYPTOCFGA_STAT_CIPHER      = 0x12\n\tCRYPTOCFGA_STAT_AKCIPHER    = 0x13\n\tCRYPTOCFGA_STAT_KPP         = 0x14\n\tCRYPTOCFGA_STAT_ACOMP       = 0x15\n)\n\ntype CryptoUserAlg struct {\n\tName        [64]uint8\n\tDriver_name [64]uint8\n\tModule_name [64]uint8\n\tType        uint32\n\tMask        uint32\n\tRefcnt      uint32\n\tFlags       uint32\n}\n\ntype CryptoStatAEAD struct {\n\tType         [64]uint8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatAKCipher struct {\n\tType         [64]uint8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tVerify_cnt   uint64\n\tSign_cnt     uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatCipher struct {\n\tType         [64]uint8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatCompress struct {\n\tType            [64]uint8\n\tCompress_cnt    uint64\n\tCompress_tlen   uint64\n\tDecompress_cnt  uint64\n\tDecompress_tlen uint64\n\tErr_cnt         uint64\n}\n\ntype CryptoStatHash struct {\n\tType      [64]uint8\n\tHash_cnt  uint64\n\tHash_tlen uint64\n\tErr_cnt   uint64\n}\n\ntype CryptoStatKPP struct {\n\tType                      [64]uint8\n\tSetsecret_cnt             uint64\n\tGenerate_public_key_cnt   uint64\n\tCompute_shared_secret_cnt uint64\n\tErr_cnt                   uint64\n}\n\ntype CryptoStatRNG struct {\n\tType          [64]uint8\n\tGenerate_cnt  uint64\n\tGenerate_tlen uint64\n\tSeed_cnt      uint64\n\tErr_cnt       uint64\n}\n\ntype CryptoStatLarval struct {\n\tType [64]uint8\n}\n\ntype CryptoReportLarval struct {\n\tType [64]uint8\n}\n\ntype CryptoReportHash struct {\n\tType       [64]uint8\n\tBlocksize  uint32\n\tDigestsize uint32\n}\n\ntype CryptoReportCipher struct {\n\tType        [64]uint8\n\tBlocksize   uint32\n\tMin_keysize uint32\n\tMax_keysize uint32\n}\n\ntype CryptoReportBlkCipher struct {\n\tType        [64]uint8\n\tGeniv       [64]uint8\n\tBlocksize   uint32\n\tMin_keysize uint32\n\tMax_keysize uint32\n\tIvsize      uint32\n}\n\ntype CryptoReportAEAD struct {\n\tType        [64]uint8\n\tGeniv       [64]uint8\n\tBlocksize   uint32\n\tMaxauthsize uint32\n\tIvsize      uint32\n}\n\ntype CryptoReportComp struct {\n\tType [64]uint8\n}\n\ntype CryptoReportRNG struct {\n\tType     [64]uint8\n\tSeedsize uint32\n}\n\ntype CryptoReportAKCipher struct {\n\tType [64]uint8\n}\n\ntype CryptoReportKPP struct {\n\tType [64]uint8\n}\n\ntype CryptoReportAcomp struct {\n\tType [64]uint8\n}\n\nconst (\n\tBPF_REG_0                           = 0x0\n\tBPF_REG_1                           = 0x1\n\tBPF_REG_2                           = 0x2\n\tBPF_REG_3                           = 0x3\n\tBPF_REG_4                           = 0x4\n\tBPF_REG_5                           = 0x5\n\tBPF_REG_6                           = 0x6\n\tBPF_REG_7                           = 0x7\n\tBPF_REG_8                           = 0x8\n\tBPF_REG_9                           = 0x9\n\tBPF_REG_10                          = 0xa\n\tBPF_MAP_CREATE                      = 0x0\n\tBPF_MAP_LOOKUP_ELEM                 = 0x1\n\tBPF_MAP_UPDATE_ELEM                 = 0x2\n\tBPF_MAP_DELETE_ELEM                 = 0x3\n\tBPF_MAP_GET_NEXT_KEY                = 0x4\n\tBPF_PROG_LOAD                       = 0x5\n\tBPF_OBJ_PIN                         = 0x6\n\tBPF_OBJ_GET                         = 0x7\n\tBPF_PROG_ATTACH                     = 0x8\n\tBPF_PROG_DETACH                     = 0x9\n\tBPF_PROG_TEST_RUN                   = 0xa\n\tBPF_PROG_GET_NEXT_ID                = 0xb\n\tBPF_MAP_GET_NEXT_ID                 = 0xc\n\tBPF_PROG_GET_FD_BY_ID               = 0xd\n\tBPF_MAP_GET_FD_BY_ID                = 0xe\n\tBPF_OBJ_GET_INFO_BY_FD              = 0xf\n\tBPF_PROG_QUERY                      = 0x10\n\tBPF_RAW_TRACEPOINT_OPEN             = 0x11\n\tBPF_BTF_LOAD                        = 0x12\n\tBPF_BTF_GET_FD_BY_ID                = 0x13\n\tBPF_TASK_FD_QUERY                   = 0x14\n\tBPF_MAP_LOOKUP_AND_DELETE_ELEM      = 0x15\n\tBPF_MAP_TYPE_UNSPEC                 = 0x0\n\tBPF_MAP_TYPE_HASH                   = 0x1\n\tBPF_MAP_TYPE_ARRAY                  = 0x2\n\tBPF_MAP_TYPE_PROG_ARRAY             = 0x3\n\tBPF_MAP_TYPE_PERF_EVENT_ARRAY       = 0x4\n\tBPF_MAP_TYPE_PERCPU_HASH            = 0x5\n\tBPF_MAP_TYPE_PERCPU_ARRAY           = 0x6\n\tBPF_MAP_TYPE_STACK_TRACE            = 0x7\n\tBPF_MAP_TYPE_CGROUP_ARRAY           = 0x8\n\tBPF_MAP_TYPE_LRU_HASH               = 0x9\n\tBPF_MAP_TYPE_LRU_PERCPU_HASH        = 0xa\n\tBPF_MAP_TYPE_LPM_TRIE               = 0xb\n\tBPF_MAP_TYPE_ARRAY_OF_MAPS          = 0xc\n\tBPF_MAP_TYPE_HASH_OF_MAPS           = 0xd\n\tBPF_MAP_TYPE_DEVMAP                 = 0xe\n\tBPF_MAP_TYPE_SOCKMAP                = 0xf\n\tBPF_MAP_TYPE_CPUMAP                 = 0x10\n\tBPF_MAP_TYPE_XSKMAP                 = 0x11\n\tBPF_MAP_TYPE_SOCKHASH               = 0x12\n\tBPF_MAP_TYPE_CGROUP_STORAGE         = 0x13\n\tBPF_MAP_TYPE_REUSEPORT_SOCKARRAY    = 0x14\n\tBPF_MAP_TYPE_PERCPU_CGROUP_STORAGE  = 0x15\n\tBPF_MAP_TYPE_QUEUE                  = 0x16\n\tBPF_MAP_TYPE_STACK                  = 0x17\n\tBPF_PROG_TYPE_UNSPEC                = 0x0\n\tBPF_PROG_TYPE_SOCKET_FILTER         = 0x1\n\tBPF_PROG_TYPE_KPROBE                = 0x2\n\tBPF_PROG_TYPE_SCHED_CLS             = 0x3\n\tBPF_PROG_TYPE_SCHED_ACT             = 0x4\n\tBPF_PROG_TYPE_TRACEPOINT            = 0x5\n\tBPF_PROG_TYPE_XDP                   = 0x6\n\tBPF_PROG_TYPE_PERF_EVENT            = 0x7\n\tBPF_PROG_TYPE_CGROUP_SKB            = 0x8\n\tBPF_PROG_TYPE_CGROUP_SOCK           = 0x9\n\tBPF_PROG_TYPE_LWT_IN                = 0xa\n\tBPF_PROG_TYPE_LWT_OUT               = 0xb\n\tBPF_PROG_TYPE_LWT_XMIT              = 0xc\n\tBPF_PROG_TYPE_SOCK_OPS              = 0xd\n\tBPF_PROG_TYPE_SK_SKB                = 0xe\n\tBPF_PROG_TYPE_CGROUP_DEVICE         = 0xf\n\tBPF_PROG_TYPE_SK_MSG                = 0x10\n\tBPF_PROG_TYPE_RAW_TRACEPOINT        = 0x11\n\tBPF_PROG_TYPE_CGROUP_SOCK_ADDR      = 0x12\n\tBPF_PROG_TYPE_LWT_SEG6LOCAL         = 0x13\n\tBPF_PROG_TYPE_LIRC_MODE2            = 0x14\n\tBPF_PROG_TYPE_SK_REUSEPORT          = 0x15\n\tBPF_PROG_TYPE_FLOW_DISSECTOR        = 0x16\n\tBPF_CGROUP_INET_INGRESS             = 0x0\n\tBPF_CGROUP_INET_EGRESS              = 0x1\n\tBPF_CGROUP_INET_SOCK_CREATE         = 0x2\n\tBPF_CGROUP_SOCK_OPS                 = 0x3\n\tBPF_SK_SKB_STREAM_PARSER            = 0x4\n\tBPF_SK_SKB_STREAM_VERDICT           = 0x5\n\tBPF_CGROUP_DEVICE                   = 0x6\n\tBPF_SK_MSG_VERDICT                  = 0x7\n\tBPF_CGROUP_INET4_BIND               = 0x8\n\tBPF_CGROUP_INET6_BIND               = 0x9\n\tBPF_CGROUP_INET4_CONNECT            = 0xa\n\tBPF_CGROUP_INET6_CONNECT            = 0xb\n\tBPF_CGROUP_INET4_POST_BIND          = 0xc\n\tBPF_CGROUP_INET6_POST_BIND          = 0xd\n\tBPF_CGROUP_UDP4_SENDMSG             = 0xe\n\tBPF_CGROUP_UDP6_SENDMSG             = 0xf\n\tBPF_LIRC_MODE2                      = 0x10\n\tBPF_FLOW_DISSECTOR                  = 0x11\n\tBPF_STACK_BUILD_ID_EMPTY            = 0x0\n\tBPF_STACK_BUILD_ID_VALID            = 0x1\n\tBPF_STACK_BUILD_ID_IP               = 0x2\n\tBPF_ADJ_ROOM_NET                    = 0x0\n\tBPF_HDR_START_MAC                   = 0x0\n\tBPF_HDR_START_NET                   = 0x1\n\tBPF_LWT_ENCAP_SEG6                  = 0x0\n\tBPF_LWT_ENCAP_SEG6_INLINE           = 0x1\n\tBPF_OK                              = 0x0\n\tBPF_DROP                            = 0x2\n\tBPF_REDIRECT                        = 0x7\n\tBPF_SOCK_OPS_VOID                   = 0x0\n\tBPF_SOCK_OPS_TIMEOUT_INIT           = 0x1\n\tBPF_SOCK_OPS_RWND_INIT              = 0x2\n\tBPF_SOCK_OPS_TCP_CONNECT_CB         = 0x3\n\tBPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB  = 0x4\n\tBPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB = 0x5\n\tBPF_SOCK_OPS_NEEDS_ECN              = 0x6\n\tBPF_SOCK_OPS_BASE_RTT               = 0x7\n\tBPF_SOCK_OPS_RTO_CB                 = 0x8\n\tBPF_SOCK_OPS_RETRANS_CB             = 0x9\n\tBPF_SOCK_OPS_STATE_CB               = 0xa\n\tBPF_SOCK_OPS_TCP_LISTEN_CB          = 0xb\n\tBPF_TCP_ESTABLISHED                 = 0x1\n\tBPF_TCP_SYN_SENT                    = 0x2\n\tBPF_TCP_SYN_RECV                    = 0x3\n\tBPF_TCP_FIN_WAIT1                   = 0x4\n\tBPF_TCP_FIN_WAIT2                   = 0x5\n\tBPF_TCP_TIME_WAIT                   = 0x6\n\tBPF_TCP_CLOSE                       = 0x7\n\tBPF_TCP_CLOSE_WAIT                  = 0x8\n\tBPF_TCP_LAST_ACK                    = 0x9\n\tBPF_TCP_LISTEN                      = 0xa\n\tBPF_TCP_CLOSING                     = 0xb\n\tBPF_TCP_NEW_SYN_RECV                = 0xc\n\tBPF_TCP_MAX_STATES                  = 0xd\n\tBPF_FIB_LKUP_RET_SUCCESS            = 0x0\n\tBPF_FIB_LKUP_RET_BLACKHOLE          = 0x1\n\tBPF_FIB_LKUP_RET_UNREACHABLE        = 0x2\n\tBPF_FIB_LKUP_RET_PROHIBIT           = 0x3\n\tBPF_FIB_LKUP_RET_NOT_FWDED          = 0x4\n\tBPF_FIB_LKUP_RET_FWD_DISABLED       = 0x5\n\tBPF_FIB_LKUP_RET_UNSUPP_LWT         = 0x6\n\tBPF_FIB_LKUP_RET_NO_NEIGH           = 0x7\n\tBPF_FIB_LKUP_RET_FRAG_NEEDED        = 0x8\n\tBPF_FD_TYPE_RAW_TRACEPOINT          = 0x0\n\tBPF_FD_TYPE_TRACEPOINT              = 0x1\n\tBPF_FD_TYPE_KPROBE                  = 0x2\n\tBPF_FD_TYPE_KRETPROBE               = 0x3\n\tBPF_FD_TYPE_UPROBE                  = 0x4\n\tBPF_FD_TYPE_URETPROBE               = 0x5\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go",
    "content": "// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char linux/types.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build arm64,linux\n\npackage unix\n\nconst (\n\tSizeofPtr      = 0x8\n\tSizeofShort    = 0x2\n\tSizeofInt      = 0x4\n\tSizeofLong     = 0x8\n\tSizeofLongLong = 0x8\n\tPathMax        = 0x1000\n)\n\ntype (\n\t_C_short     int16\n\t_C_int       int32\n\t_C_long      int64\n\t_C_long_long int64\n)\n\ntype Timespec struct {\n\tSec  int64\n\tNsec int64\n}\n\ntype Timeval struct {\n\tSec  int64\n\tUsec int64\n}\n\ntype Timex struct {\n\tModes     uint32\n\tOffset    int64\n\tFreq      int64\n\tMaxerror  int64\n\tEsterror  int64\n\tStatus    int32\n\tConstant  int64\n\tPrecision int64\n\tTolerance int64\n\tTime      Timeval\n\tTick      int64\n\tPpsfreq   int64\n\tJitter    int64\n\tShift     int32\n\tStabil    int64\n\tJitcnt    int64\n\tCalcnt    int64\n\tErrcnt    int64\n\tStbcnt    int64\n\tTai       int32\n\t_         [44]byte\n}\n\ntype Time_t int64\n\ntype Tms struct {\n\tUtime  int64\n\tStime  int64\n\tCutime int64\n\tCstime int64\n}\n\ntype Utimbuf struct {\n\tActime  int64\n\tModtime int64\n}\n\ntype Rusage struct {\n\tUtime    Timeval\n\tStime    Timeval\n\tMaxrss   int64\n\tIxrss    int64\n\tIdrss    int64\n\tIsrss    int64\n\tMinflt   int64\n\tMajflt   int64\n\tNswap    int64\n\tInblock  int64\n\tOublock  int64\n\tMsgsnd   int64\n\tMsgrcv   int64\n\tNsignals int64\n\tNvcsw    int64\n\tNivcsw   int64\n}\n\ntype Rlimit struct {\n\tCur uint64\n\tMax uint64\n}\n\ntype _Gid_t uint32\n\ntype Stat_t struct {\n\tDev     uint64\n\tIno     uint64\n\tMode    uint32\n\tNlink   uint32\n\tUid     uint32\n\tGid     uint32\n\tRdev    uint64\n\t_       uint64\n\tSize    int64\n\tBlksize int32\n\t_       int32\n\tBlocks  int64\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\t_       [2]int32\n}\n\ntype StatxTimestamp struct {\n\tSec  int64\n\tNsec uint32\n\t_    int32\n}\n\ntype Statx_t struct {\n\tMask            uint32\n\tBlksize         uint32\n\tAttributes      uint64\n\tNlink           uint32\n\tUid             uint32\n\tGid             uint32\n\tMode            uint16\n\t_               [1]uint16\n\tIno             uint64\n\tSize            uint64\n\tBlocks          uint64\n\tAttributes_mask uint64\n\tAtime           StatxTimestamp\n\tBtime           StatxTimestamp\n\tCtime           StatxTimestamp\n\tMtime           StatxTimestamp\n\tRdev_major      uint32\n\tRdev_minor      uint32\n\tDev_major       uint32\n\tDev_minor       uint32\n\t_               [14]uint64\n}\n\ntype Dirent struct {\n\tIno    uint64\n\tOff    int64\n\tReclen uint16\n\tType   uint8\n\tName   [256]int8\n\t_      [5]byte\n}\n\ntype Fsid struct {\n\tVal [2]int32\n}\n\ntype Flock_t struct {\n\tType   int16\n\tWhence int16\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\t_      [4]byte\n}\n\ntype FscryptPolicy struct {\n\tVersion                   uint8\n\tContents_encryption_mode  uint8\n\tFilenames_encryption_mode uint8\n\tFlags                     uint8\n\tMaster_key_descriptor     [8]uint8\n}\n\ntype FscryptKey struct {\n\tMode uint32\n\tRaw  [64]uint8\n\tSize uint32\n}\n\ntype KeyctlDHParams struct {\n\tPrivate int32\n\tPrime   int32\n\tBase    int32\n}\n\nconst (\n\tFADV_NORMAL     = 0x0\n\tFADV_RANDOM     = 0x1\n\tFADV_SEQUENTIAL = 0x2\n\tFADV_WILLNEED   = 0x3\n\tFADV_DONTNEED   = 0x4\n\tFADV_NOREUSE    = 0x5\n)\n\ntype RawSockaddrInet4 struct {\n\tFamily uint16\n\tPort   uint16\n\tAddr   [4]byte /* in_addr */\n\tZero   [8]uint8\n}\n\ntype RawSockaddrInet6 struct {\n\tFamily   uint16\n\tPort     uint16\n\tFlowinfo uint32\n\tAddr     [16]byte /* in6_addr */\n\tScope_id uint32\n}\n\ntype RawSockaddrUnix struct {\n\tFamily uint16\n\tPath   [108]int8\n}\n\ntype RawSockaddrLinklayer struct {\n\tFamily   uint16\n\tProtocol uint16\n\tIfindex  int32\n\tHatype   uint16\n\tPkttype  uint8\n\tHalen    uint8\n\tAddr     [8]uint8\n}\n\ntype RawSockaddrNetlink struct {\n\tFamily uint16\n\tPad    uint16\n\tPid    uint32\n\tGroups uint32\n}\n\ntype RawSockaddrHCI struct {\n\tFamily  uint16\n\tDev     uint16\n\tChannel uint16\n}\n\ntype RawSockaddrL2 struct {\n\tFamily      uint16\n\tPsm         uint16\n\tBdaddr      [6]uint8\n\tCid         uint16\n\tBdaddr_type uint8\n\t_           [1]byte\n}\n\ntype RawSockaddrRFCOMM struct {\n\tFamily  uint16\n\tBdaddr  [6]uint8\n\tChannel uint8\n\t_       [1]byte\n}\n\ntype RawSockaddrCAN struct {\n\tFamily  uint16\n\tIfindex int32\n\tAddr    [8]byte\n}\n\ntype RawSockaddrALG struct {\n\tFamily uint16\n\tType   [14]uint8\n\tFeat   uint32\n\tMask   uint32\n\tName   [64]uint8\n}\n\ntype RawSockaddrVM struct {\n\tFamily    uint16\n\tReserved1 uint16\n\tPort      uint32\n\tCid       uint32\n\tZero      [4]uint8\n}\n\ntype RawSockaddrXDP struct {\n\tFamily         uint16\n\tFlags          uint16\n\tIfindex        uint32\n\tQueue_id       uint32\n\tShared_umem_fd uint32\n}\n\ntype RawSockaddrPPPoX [0x1e]byte\n\ntype RawSockaddr struct {\n\tFamily uint16\n\tData   [14]int8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [96]int8\n}\n\ntype _Socklen uint32\n\ntype Linger struct {\n\tOnoff  int32\n\tLinger int32\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint64\n}\n\ntype IPMreq struct {\n\tMultiaddr [4]byte /* in_addr */\n\tInterface [4]byte /* in_addr */\n}\n\ntype IPMreqn struct {\n\tMultiaddr [4]byte /* in_addr */\n\tAddress   [4]byte /* in_addr */\n\tIfindex   int32\n}\n\ntype IPv6Mreq struct {\n\tMultiaddr [16]byte /* in6_addr */\n\tInterface uint32\n}\n\ntype PacketMreq struct {\n\tIfindex int32\n\tType    uint16\n\tAlen    uint16\n\tAddress [8]uint8\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tIov        *Iovec\n\tIovlen     uint64\n\tControl    *byte\n\tControllen uint64\n\tFlags      int32\n\t_          [4]byte\n}\n\ntype Cmsghdr struct {\n\tLen   uint64\n\tLevel int32\n\tType  int32\n}\n\ntype Inet4Pktinfo struct {\n\tIfindex  int32\n\tSpec_dst [4]byte /* in_addr */\n\tAddr     [4]byte /* in_addr */\n}\n\ntype Inet6Pktinfo struct {\n\tAddr    [16]byte /* in6_addr */\n\tIfindex uint32\n}\n\ntype IPv6MTUInfo struct {\n\tAddr RawSockaddrInet6\n\tMtu  uint32\n}\n\ntype ICMPv6Filter struct {\n\tData [8]uint32\n}\n\ntype Ucred struct {\n\tPid int32\n\tUid uint32\n\tGid uint32\n}\n\ntype TCPInfo struct {\n\tState          uint8\n\tCa_state       uint8\n\tRetransmits    uint8\n\tProbes         uint8\n\tBackoff        uint8\n\tOptions        uint8\n\tRto            uint32\n\tAto            uint32\n\tSnd_mss        uint32\n\tRcv_mss        uint32\n\tUnacked        uint32\n\tSacked         uint32\n\tLost           uint32\n\tRetrans        uint32\n\tFackets        uint32\n\tLast_data_sent uint32\n\tLast_ack_sent  uint32\n\tLast_data_recv uint32\n\tLast_ack_recv  uint32\n\tPmtu           uint32\n\tRcv_ssthresh   uint32\n\tRtt            uint32\n\tRttvar         uint32\n\tSnd_ssthresh   uint32\n\tSnd_cwnd       uint32\n\tAdvmss         uint32\n\tReordering     uint32\n\tRcv_rtt        uint32\n\tRcv_space      uint32\n\tTotal_retrans  uint32\n}\n\ntype CanFilter struct {\n\tId   uint32\n\tMask uint32\n}\n\nconst (\n\tSizeofSockaddrInet4     = 0x10\n\tSizeofSockaddrInet6     = 0x1c\n\tSizeofSockaddrAny       = 0x70\n\tSizeofSockaddrUnix      = 0x6e\n\tSizeofSockaddrLinklayer = 0x14\n\tSizeofSockaddrNetlink   = 0xc\n\tSizeofSockaddrHCI       = 0x6\n\tSizeofSockaddrL2        = 0xe\n\tSizeofSockaddrRFCOMM    = 0xa\n\tSizeofSockaddrCAN       = 0x10\n\tSizeofSockaddrALG       = 0x58\n\tSizeofSockaddrVM        = 0x10\n\tSizeofSockaddrXDP       = 0x10\n\tSizeofSockaddrPPPoX     = 0x1e\n\tSizeofLinger            = 0x8\n\tSizeofIovec             = 0x10\n\tSizeofIPMreq            = 0x8\n\tSizeofIPMreqn           = 0xc\n\tSizeofIPv6Mreq          = 0x14\n\tSizeofPacketMreq        = 0x10\n\tSizeofMsghdr            = 0x38\n\tSizeofCmsghdr           = 0x10\n\tSizeofInet4Pktinfo      = 0xc\n\tSizeofInet6Pktinfo      = 0x14\n\tSizeofIPv6MTUInfo       = 0x20\n\tSizeofICMPv6Filter      = 0x20\n\tSizeofUcred             = 0xc\n\tSizeofTCPInfo           = 0x68\n\tSizeofCanFilter         = 0x8\n)\n\nconst (\n\tNDA_UNSPEC              = 0x0\n\tNDA_DST                 = 0x1\n\tNDA_LLADDR              = 0x2\n\tNDA_CACHEINFO           = 0x3\n\tNDA_PROBES              = 0x4\n\tNDA_VLAN                = 0x5\n\tNDA_PORT                = 0x6\n\tNDA_VNI                 = 0x7\n\tNDA_IFINDEX             = 0x8\n\tNDA_MASTER              = 0x9\n\tNDA_LINK_NETNSID        = 0xa\n\tNDA_SRC_VNI             = 0xb\n\tNTF_USE                 = 0x1\n\tNTF_SELF                = 0x2\n\tNTF_MASTER              = 0x4\n\tNTF_PROXY               = 0x8\n\tNTF_EXT_LEARNED         = 0x10\n\tNTF_OFFLOADED           = 0x20\n\tNTF_ROUTER              = 0x80\n\tNUD_INCOMPLETE          = 0x1\n\tNUD_REACHABLE           = 0x2\n\tNUD_STALE               = 0x4\n\tNUD_DELAY               = 0x8\n\tNUD_PROBE               = 0x10\n\tNUD_FAILED              = 0x20\n\tNUD_NOARP               = 0x40\n\tNUD_PERMANENT           = 0x80\n\tNUD_NONE                = 0x0\n\tIFA_UNSPEC              = 0x0\n\tIFA_ADDRESS             = 0x1\n\tIFA_LOCAL               = 0x2\n\tIFA_LABEL               = 0x3\n\tIFA_BROADCAST           = 0x4\n\tIFA_ANYCAST             = 0x5\n\tIFA_CACHEINFO           = 0x6\n\tIFA_MULTICAST           = 0x7\n\tIFA_FLAGS               = 0x8\n\tIFA_RT_PRIORITY         = 0x9\n\tIFA_TARGET_NETNSID      = 0xa\n\tIFLA_UNSPEC             = 0x0\n\tIFLA_ADDRESS            = 0x1\n\tIFLA_BROADCAST          = 0x2\n\tIFLA_IFNAME             = 0x3\n\tIFLA_MTU                = 0x4\n\tIFLA_LINK               = 0x5\n\tIFLA_QDISC              = 0x6\n\tIFLA_STATS              = 0x7\n\tIFLA_COST               = 0x8\n\tIFLA_PRIORITY           = 0x9\n\tIFLA_MASTER             = 0xa\n\tIFLA_WIRELESS           = 0xb\n\tIFLA_PROTINFO           = 0xc\n\tIFLA_TXQLEN             = 0xd\n\tIFLA_MAP                = 0xe\n\tIFLA_WEIGHT             = 0xf\n\tIFLA_OPERSTATE          = 0x10\n\tIFLA_LINKMODE           = 0x11\n\tIFLA_LINKINFO           = 0x12\n\tIFLA_NET_NS_PID         = 0x13\n\tIFLA_IFALIAS            = 0x14\n\tIFLA_NUM_VF             = 0x15\n\tIFLA_VFINFO_LIST        = 0x16\n\tIFLA_STATS64            = 0x17\n\tIFLA_VF_PORTS           = 0x18\n\tIFLA_PORT_SELF          = 0x19\n\tIFLA_AF_SPEC            = 0x1a\n\tIFLA_GROUP              = 0x1b\n\tIFLA_NET_NS_FD          = 0x1c\n\tIFLA_EXT_MASK           = 0x1d\n\tIFLA_PROMISCUITY        = 0x1e\n\tIFLA_NUM_TX_QUEUES      = 0x1f\n\tIFLA_NUM_RX_QUEUES      = 0x20\n\tIFLA_CARRIER            = 0x21\n\tIFLA_PHYS_PORT_ID       = 0x22\n\tIFLA_CARRIER_CHANGES    = 0x23\n\tIFLA_PHYS_SWITCH_ID     = 0x24\n\tIFLA_LINK_NETNSID       = 0x25\n\tIFLA_PHYS_PORT_NAME     = 0x26\n\tIFLA_PROTO_DOWN         = 0x27\n\tIFLA_GSO_MAX_SEGS       = 0x28\n\tIFLA_GSO_MAX_SIZE       = 0x29\n\tIFLA_PAD                = 0x2a\n\tIFLA_XDP                = 0x2b\n\tIFLA_EVENT              = 0x2c\n\tIFLA_NEW_NETNSID        = 0x2d\n\tIFLA_IF_NETNSID         = 0x2e\n\tIFLA_TARGET_NETNSID     = 0x2e\n\tIFLA_CARRIER_UP_COUNT   = 0x2f\n\tIFLA_CARRIER_DOWN_COUNT = 0x30\n\tIFLA_NEW_IFINDEX        = 0x31\n\tIFLA_MIN_MTU            = 0x32\n\tIFLA_MAX_MTU            = 0x33\n\tIFLA_MAX                = 0x33\n\tIFLA_INFO_KIND          = 0x1\n\tIFLA_INFO_DATA          = 0x2\n\tIFLA_INFO_XSTATS        = 0x3\n\tIFLA_INFO_SLAVE_KIND    = 0x4\n\tIFLA_INFO_SLAVE_DATA    = 0x5\n\tRT_SCOPE_UNIVERSE       = 0x0\n\tRT_SCOPE_SITE           = 0xc8\n\tRT_SCOPE_LINK           = 0xfd\n\tRT_SCOPE_HOST           = 0xfe\n\tRT_SCOPE_NOWHERE        = 0xff\n\tRT_TABLE_UNSPEC         = 0x0\n\tRT_TABLE_COMPAT         = 0xfc\n\tRT_TABLE_DEFAULT        = 0xfd\n\tRT_TABLE_MAIN           = 0xfe\n\tRT_TABLE_LOCAL          = 0xff\n\tRT_TABLE_MAX            = 0xffffffff\n\tRTA_UNSPEC              = 0x0\n\tRTA_DST                 = 0x1\n\tRTA_SRC                 = 0x2\n\tRTA_IIF                 = 0x3\n\tRTA_OIF                 = 0x4\n\tRTA_GATEWAY             = 0x5\n\tRTA_PRIORITY            = 0x6\n\tRTA_PREFSRC             = 0x7\n\tRTA_METRICS             = 0x8\n\tRTA_MULTIPATH           = 0x9\n\tRTA_FLOW                = 0xb\n\tRTA_CACHEINFO           = 0xc\n\tRTA_TABLE               = 0xf\n\tRTA_MARK                = 0x10\n\tRTA_MFC_STATS           = 0x11\n\tRTA_VIA                 = 0x12\n\tRTA_NEWDST              = 0x13\n\tRTA_PREF                = 0x14\n\tRTA_ENCAP_TYPE          = 0x15\n\tRTA_ENCAP               = 0x16\n\tRTA_EXPIRES             = 0x17\n\tRTA_PAD                 = 0x18\n\tRTA_UID                 = 0x19\n\tRTA_TTL_PROPAGATE       = 0x1a\n\tRTA_IP_PROTO            = 0x1b\n\tRTA_SPORT               = 0x1c\n\tRTA_DPORT               = 0x1d\n\tRTN_UNSPEC              = 0x0\n\tRTN_UNICAST             = 0x1\n\tRTN_LOCAL               = 0x2\n\tRTN_BROADCAST           = 0x3\n\tRTN_ANYCAST             = 0x4\n\tRTN_MULTICAST           = 0x5\n\tRTN_BLACKHOLE           = 0x6\n\tRTN_UNREACHABLE         = 0x7\n\tRTN_PROHIBIT            = 0x8\n\tRTN_THROW               = 0x9\n\tRTN_NAT                 = 0xa\n\tRTN_XRESOLVE            = 0xb\n\tRTNLGRP_NONE            = 0x0\n\tRTNLGRP_LINK            = 0x1\n\tRTNLGRP_NOTIFY          = 0x2\n\tRTNLGRP_NEIGH           = 0x3\n\tRTNLGRP_TC              = 0x4\n\tRTNLGRP_IPV4_IFADDR     = 0x5\n\tRTNLGRP_IPV4_MROUTE     = 0x6\n\tRTNLGRP_IPV4_ROUTE      = 0x7\n\tRTNLGRP_IPV4_RULE       = 0x8\n\tRTNLGRP_IPV6_IFADDR     = 0x9\n\tRTNLGRP_IPV6_MROUTE     = 0xa\n\tRTNLGRP_IPV6_ROUTE      = 0xb\n\tRTNLGRP_IPV6_IFINFO     = 0xc\n\tRTNLGRP_IPV6_PREFIX     = 0x12\n\tRTNLGRP_IPV6_RULE       = 0x13\n\tRTNLGRP_ND_USEROPT      = 0x14\n\tSizeofNlMsghdr          = 0x10\n\tSizeofNlMsgerr          = 0x14\n\tSizeofRtGenmsg          = 0x1\n\tSizeofNlAttr            = 0x4\n\tSizeofRtAttr            = 0x4\n\tSizeofIfInfomsg         = 0x10\n\tSizeofIfAddrmsg         = 0x8\n\tSizeofRtMsg             = 0xc\n\tSizeofRtNexthop         = 0x8\n\tSizeofNdUseroptmsg      = 0x10\n\tSizeofNdMsg             = 0xc\n)\n\ntype NlMsghdr struct {\n\tLen   uint32\n\tType  uint16\n\tFlags uint16\n\tSeq   uint32\n\tPid   uint32\n}\n\ntype NlMsgerr struct {\n\tError int32\n\tMsg   NlMsghdr\n}\n\ntype RtGenmsg struct {\n\tFamily uint8\n}\n\ntype NlAttr struct {\n\tLen  uint16\n\tType uint16\n}\n\ntype RtAttr struct {\n\tLen  uint16\n\tType uint16\n}\n\ntype IfInfomsg struct {\n\tFamily uint8\n\t_      uint8\n\tType   uint16\n\tIndex  int32\n\tFlags  uint32\n\tChange uint32\n}\n\ntype IfAddrmsg struct {\n\tFamily    uint8\n\tPrefixlen uint8\n\tFlags     uint8\n\tScope     uint8\n\tIndex     uint32\n}\n\ntype RtMsg struct {\n\tFamily   uint8\n\tDst_len  uint8\n\tSrc_len  uint8\n\tTos      uint8\n\tTable    uint8\n\tProtocol uint8\n\tScope    uint8\n\tType     uint8\n\tFlags    uint32\n}\n\ntype RtNexthop struct {\n\tLen     uint16\n\tFlags   uint8\n\tHops    uint8\n\tIfindex int32\n}\n\ntype NdUseroptmsg struct {\n\tFamily    uint8\n\tPad1      uint8\n\tOpts_len  uint16\n\tIfindex   int32\n\tIcmp_type uint8\n\tIcmp_code uint8\n\tPad2      uint16\n\tPad3      uint32\n}\n\ntype NdMsg struct {\n\tFamily  uint8\n\tPad1    uint8\n\tPad2    uint16\n\tIfindex int32\n\tState   uint16\n\tFlags   uint8\n\tType    uint8\n}\n\nconst (\n\tSizeofSockFilter = 0x8\n\tSizeofSockFprog  = 0x10\n)\n\ntype SockFilter struct {\n\tCode uint16\n\tJt   uint8\n\tJf   uint8\n\tK    uint32\n}\n\ntype SockFprog struct {\n\tLen    uint16\n\tFilter *SockFilter\n}\n\ntype InotifyEvent struct {\n\tWd     int32\n\tMask   uint32\n\tCookie uint32\n\tLen    uint32\n}\n\nconst SizeofInotifyEvent = 0x10\n\ntype PtraceRegs struct {\n\tRegs   [31]uint64\n\tSp     uint64\n\tPc     uint64\n\tPstate uint64\n}\n\ntype FdSet struct {\n\tBits [16]int64\n}\n\ntype Sysinfo_t struct {\n\tUptime    int64\n\tLoads     [3]uint64\n\tTotalram  uint64\n\tFreeram   uint64\n\tSharedram uint64\n\tBufferram uint64\n\tTotalswap uint64\n\tFreeswap  uint64\n\tProcs     uint16\n\tPad       uint16\n\tTotalhigh uint64\n\tFreehigh  uint64\n\tUnit      uint32\n\t_         [0]int8\n\t_         [4]byte\n}\n\ntype Utsname struct {\n\tSysname    [65]byte\n\tNodename   [65]byte\n\tRelease    [65]byte\n\tVersion    [65]byte\n\tMachine    [65]byte\n\tDomainname [65]byte\n}\n\ntype Ustat_t struct {\n\tTfree  int32\n\tTinode uint64\n\tFname  [6]int8\n\tFpack  [6]int8\n\t_      [4]byte\n}\n\ntype EpollEvent struct {\n\tEvents uint32\n\tPadFd  int32\n\tFd     int32\n\tPad    int32\n}\n\nconst (\n\tAT_EMPTY_PATH   = 0x1000\n\tAT_FDCWD        = -0x64\n\tAT_NO_AUTOMOUNT = 0x800\n\tAT_REMOVEDIR    = 0x200\n\n\tAT_STATX_SYNC_AS_STAT = 0x0\n\tAT_STATX_FORCE_SYNC   = 0x2000\n\tAT_STATX_DONT_SYNC    = 0x4000\n\n\tAT_SYMLINK_FOLLOW   = 0x400\n\tAT_SYMLINK_NOFOLLOW = 0x100\n\n\tAT_EACCESS = 0x200\n)\n\ntype PollFd struct {\n\tFd      int32\n\tEvents  int16\n\tRevents int16\n}\n\nconst (\n\tPOLLIN    = 0x1\n\tPOLLPRI   = 0x2\n\tPOLLOUT   = 0x4\n\tPOLLRDHUP = 0x2000\n\tPOLLERR   = 0x8\n\tPOLLHUP   = 0x10\n\tPOLLNVAL  = 0x20\n)\n\ntype Sigset_t struct {\n\tVal [16]uint64\n}\n\nconst _C__NSIG = 0x41\n\ntype SignalfdSiginfo struct {\n\tSigno     uint32\n\tErrno     int32\n\tCode      int32\n\tPid       uint32\n\tUid       uint32\n\tFd        int32\n\tTid       uint32\n\tBand      uint32\n\tOverrun   uint32\n\tTrapno    uint32\n\tStatus    int32\n\tInt       int32\n\tPtr       uint64\n\tUtime     uint64\n\tStime     uint64\n\tAddr      uint64\n\tAddr_lsb  uint16\n\t_         uint16\n\tSyscall   int32\n\tCall_addr uint64\n\tArch      uint32\n\t_         [28]uint8\n}\n\nconst PERF_IOC_FLAG_GROUP = 0x1\n\ntype Termios struct {\n\tIflag  uint32\n\tOflag  uint32\n\tCflag  uint32\n\tLflag  uint32\n\tLine   uint8\n\tCc     [19]uint8\n\tIspeed uint32\n\tOspeed uint32\n}\n\ntype Winsize struct {\n\tRow    uint16\n\tCol    uint16\n\tXpixel uint16\n\tYpixel uint16\n}\n\ntype Taskstats struct {\n\tVersion                   uint16\n\tAc_exitcode               uint32\n\tAc_flag                   uint8\n\tAc_nice                   uint8\n\tCpu_count                 uint64\n\tCpu_delay_total           uint64\n\tBlkio_count               uint64\n\tBlkio_delay_total         uint64\n\tSwapin_count              uint64\n\tSwapin_delay_total        uint64\n\tCpu_run_real_total        uint64\n\tCpu_run_virtual_total     uint64\n\tAc_comm                   [32]int8\n\tAc_sched                  uint8\n\tAc_pad                    [3]uint8\n\t_                         [4]byte\n\tAc_uid                    uint32\n\tAc_gid                    uint32\n\tAc_pid                    uint32\n\tAc_ppid                   uint32\n\tAc_btime                  uint32\n\tAc_etime                  uint64\n\tAc_utime                  uint64\n\tAc_stime                  uint64\n\tAc_minflt                 uint64\n\tAc_majflt                 uint64\n\tCoremem                   uint64\n\tVirtmem                   uint64\n\tHiwater_rss               uint64\n\tHiwater_vm                uint64\n\tRead_char                 uint64\n\tWrite_char                uint64\n\tRead_syscalls             uint64\n\tWrite_syscalls            uint64\n\tRead_bytes                uint64\n\tWrite_bytes               uint64\n\tCancelled_write_bytes     uint64\n\tNvcsw                     uint64\n\tNivcsw                    uint64\n\tAc_utimescaled            uint64\n\tAc_stimescaled            uint64\n\tCpu_scaled_run_real_total uint64\n\tFreepages_count           uint64\n\tFreepages_delay_total     uint64\n\tThrashing_count           uint64\n\tThrashing_delay_total     uint64\n}\n\nconst (\n\tTASKSTATS_CMD_UNSPEC                  = 0x0\n\tTASKSTATS_CMD_GET                     = 0x1\n\tTASKSTATS_CMD_NEW                     = 0x2\n\tTASKSTATS_TYPE_UNSPEC                 = 0x0\n\tTASKSTATS_TYPE_PID                    = 0x1\n\tTASKSTATS_TYPE_TGID                   = 0x2\n\tTASKSTATS_TYPE_STATS                  = 0x3\n\tTASKSTATS_TYPE_AGGR_PID               = 0x4\n\tTASKSTATS_TYPE_AGGR_TGID              = 0x5\n\tTASKSTATS_TYPE_NULL                   = 0x6\n\tTASKSTATS_CMD_ATTR_UNSPEC             = 0x0\n\tTASKSTATS_CMD_ATTR_PID                = 0x1\n\tTASKSTATS_CMD_ATTR_TGID               = 0x2\n\tTASKSTATS_CMD_ATTR_REGISTER_CPUMASK   = 0x3\n\tTASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4\n)\n\ntype CGroupStats struct {\n\tSleeping        uint64\n\tRunning         uint64\n\tStopped         uint64\n\tUninterruptible uint64\n\tIo_wait         uint64\n}\n\nconst (\n\tCGROUPSTATS_CMD_UNSPEC        = 0x3\n\tCGROUPSTATS_CMD_GET           = 0x4\n\tCGROUPSTATS_CMD_NEW           = 0x5\n\tCGROUPSTATS_TYPE_UNSPEC       = 0x0\n\tCGROUPSTATS_TYPE_CGROUP_STATS = 0x1\n\tCGROUPSTATS_CMD_ATTR_UNSPEC   = 0x0\n\tCGROUPSTATS_CMD_ATTR_FD       = 0x1\n)\n\ntype Genlmsghdr struct {\n\tCmd      uint8\n\tVersion  uint8\n\tReserved uint16\n}\n\nconst (\n\tCTRL_CMD_UNSPEC            = 0x0\n\tCTRL_CMD_NEWFAMILY         = 0x1\n\tCTRL_CMD_DELFAMILY         = 0x2\n\tCTRL_CMD_GETFAMILY         = 0x3\n\tCTRL_CMD_NEWOPS            = 0x4\n\tCTRL_CMD_DELOPS            = 0x5\n\tCTRL_CMD_GETOPS            = 0x6\n\tCTRL_CMD_NEWMCAST_GRP      = 0x7\n\tCTRL_CMD_DELMCAST_GRP      = 0x8\n\tCTRL_CMD_GETMCAST_GRP      = 0x9\n\tCTRL_ATTR_UNSPEC           = 0x0\n\tCTRL_ATTR_FAMILY_ID        = 0x1\n\tCTRL_ATTR_FAMILY_NAME      = 0x2\n\tCTRL_ATTR_VERSION          = 0x3\n\tCTRL_ATTR_HDRSIZE          = 0x4\n\tCTRL_ATTR_MAXATTR          = 0x5\n\tCTRL_ATTR_OPS              = 0x6\n\tCTRL_ATTR_MCAST_GROUPS     = 0x7\n\tCTRL_ATTR_OP_UNSPEC        = 0x0\n\tCTRL_ATTR_OP_ID            = 0x1\n\tCTRL_ATTR_OP_FLAGS         = 0x2\n\tCTRL_ATTR_MCAST_GRP_UNSPEC = 0x0\n\tCTRL_ATTR_MCAST_GRP_NAME   = 0x1\n\tCTRL_ATTR_MCAST_GRP_ID     = 0x2\n)\n\ntype cpuMask uint64\n\nconst (\n\t_CPU_SETSIZE = 0x400\n\t_NCPUBITS    = 0x40\n)\n\nconst (\n\tBDADDR_BREDR     = 0x0\n\tBDADDR_LE_PUBLIC = 0x1\n\tBDADDR_LE_RANDOM = 0x2\n)\n\ntype PerfEventAttr struct {\n\tType               uint32\n\tSize               uint32\n\tConfig             uint64\n\tSample             uint64\n\tSample_type        uint64\n\tRead_format        uint64\n\tBits               uint64\n\tWakeup             uint32\n\tBp_type            uint32\n\tExt1               uint64\n\tExt2               uint64\n\tBranch_sample_type uint64\n\tSample_regs_user   uint64\n\tSample_stack_user  uint32\n\tClockid            int32\n\tSample_regs_intr   uint64\n\tAux_watermark      uint32\n\tSample_max_stack   uint16\n\t_                  uint16\n}\n\ntype PerfEventMmapPage struct {\n\tVersion        uint32\n\tCompat_version uint32\n\tLock           uint32\n\tIndex          uint32\n\tOffset         int64\n\tTime_enabled   uint64\n\tTime_running   uint64\n\tCapabilities   uint64\n\tPmc_width      uint16\n\tTime_shift     uint16\n\tTime_mult      uint32\n\tTime_offset    uint64\n\tTime_zero      uint64\n\tSize           uint32\n\t_              [948]uint8\n\tData_head      uint64\n\tData_tail      uint64\n\tData_offset    uint64\n\tData_size      uint64\n\tAux_head       uint64\n\tAux_tail       uint64\n\tAux_offset     uint64\n\tAux_size       uint64\n}\n\nconst (\n\tPerfBitDisabled               uint64 = CBitFieldMaskBit0\n\tPerfBitInherit                       = CBitFieldMaskBit1\n\tPerfBitPinned                        = CBitFieldMaskBit2\n\tPerfBitExclusive                     = CBitFieldMaskBit3\n\tPerfBitExcludeUser                   = CBitFieldMaskBit4\n\tPerfBitExcludeKernel                 = CBitFieldMaskBit5\n\tPerfBitExcludeHv                     = CBitFieldMaskBit6\n\tPerfBitExcludeIdle                   = CBitFieldMaskBit7\n\tPerfBitMmap                          = CBitFieldMaskBit8\n\tPerfBitComm                          = CBitFieldMaskBit9\n\tPerfBitFreq                          = CBitFieldMaskBit10\n\tPerfBitInheritStat                   = CBitFieldMaskBit11\n\tPerfBitEnableOnExec                  = CBitFieldMaskBit12\n\tPerfBitTask                          = CBitFieldMaskBit13\n\tPerfBitWatermark                     = CBitFieldMaskBit14\n\tPerfBitPreciseIPBit1                 = CBitFieldMaskBit15\n\tPerfBitPreciseIPBit2                 = CBitFieldMaskBit16\n\tPerfBitMmapData                      = CBitFieldMaskBit17\n\tPerfBitSampleIDAll                   = CBitFieldMaskBit18\n\tPerfBitExcludeHost                   = CBitFieldMaskBit19\n\tPerfBitExcludeGuest                  = CBitFieldMaskBit20\n\tPerfBitExcludeCallchainKernel        = CBitFieldMaskBit21\n\tPerfBitExcludeCallchainUser          = CBitFieldMaskBit22\n\tPerfBitMmap2                         = CBitFieldMaskBit23\n\tPerfBitCommExec                      = CBitFieldMaskBit24\n\tPerfBitUseClockID                    = CBitFieldMaskBit25\n\tPerfBitContextSwitch                 = CBitFieldMaskBit26\n)\n\nconst (\n\tPERF_TYPE_HARDWARE   = 0x0\n\tPERF_TYPE_SOFTWARE   = 0x1\n\tPERF_TYPE_TRACEPOINT = 0x2\n\tPERF_TYPE_HW_CACHE   = 0x3\n\tPERF_TYPE_RAW        = 0x4\n\tPERF_TYPE_BREAKPOINT = 0x5\n\n\tPERF_COUNT_HW_CPU_CYCLES              = 0x0\n\tPERF_COUNT_HW_INSTRUCTIONS            = 0x1\n\tPERF_COUNT_HW_CACHE_REFERENCES        = 0x2\n\tPERF_COUNT_HW_CACHE_MISSES            = 0x3\n\tPERF_COUNT_HW_BRANCH_INSTRUCTIONS     = 0x4\n\tPERF_COUNT_HW_BRANCH_MISSES           = 0x5\n\tPERF_COUNT_HW_BUS_CYCLES              = 0x6\n\tPERF_COUNT_HW_STALLED_CYCLES_FRONTEND = 0x7\n\tPERF_COUNT_HW_STALLED_CYCLES_BACKEND  = 0x8\n\tPERF_COUNT_HW_REF_CPU_CYCLES          = 0x9\n\n\tPERF_COUNT_HW_CACHE_L1D  = 0x0\n\tPERF_COUNT_HW_CACHE_L1I  = 0x1\n\tPERF_COUNT_HW_CACHE_LL   = 0x2\n\tPERF_COUNT_HW_CACHE_DTLB = 0x3\n\tPERF_COUNT_HW_CACHE_ITLB = 0x4\n\tPERF_COUNT_HW_CACHE_BPU  = 0x5\n\tPERF_COUNT_HW_CACHE_NODE = 0x6\n\n\tPERF_COUNT_HW_CACHE_OP_READ     = 0x0\n\tPERF_COUNT_HW_CACHE_OP_WRITE    = 0x1\n\tPERF_COUNT_HW_CACHE_OP_PREFETCH = 0x2\n\n\tPERF_COUNT_HW_CACHE_RESULT_ACCESS = 0x0\n\tPERF_COUNT_HW_CACHE_RESULT_MISS   = 0x1\n\n\tPERF_COUNT_SW_CPU_CLOCK        = 0x0\n\tPERF_COUNT_SW_TASK_CLOCK       = 0x1\n\tPERF_COUNT_SW_PAGE_FAULTS      = 0x2\n\tPERF_COUNT_SW_CONTEXT_SWITCHES = 0x3\n\tPERF_COUNT_SW_CPU_MIGRATIONS   = 0x4\n\tPERF_COUNT_SW_PAGE_FAULTS_MIN  = 0x5\n\tPERF_COUNT_SW_PAGE_FAULTS_MAJ  = 0x6\n\tPERF_COUNT_SW_ALIGNMENT_FAULTS = 0x7\n\tPERF_COUNT_SW_EMULATION_FAULTS = 0x8\n\tPERF_COUNT_SW_DUMMY            = 0x9\n\tPERF_COUNT_SW_BPF_OUTPUT       = 0xa\n\n\tPERF_SAMPLE_IP           = 0x1\n\tPERF_SAMPLE_TID          = 0x2\n\tPERF_SAMPLE_TIME         = 0x4\n\tPERF_SAMPLE_ADDR         = 0x8\n\tPERF_SAMPLE_READ         = 0x10\n\tPERF_SAMPLE_CALLCHAIN    = 0x20\n\tPERF_SAMPLE_ID           = 0x40\n\tPERF_SAMPLE_CPU          = 0x80\n\tPERF_SAMPLE_PERIOD       = 0x100\n\tPERF_SAMPLE_STREAM_ID    = 0x200\n\tPERF_SAMPLE_RAW          = 0x400\n\tPERF_SAMPLE_BRANCH_STACK = 0x800\n\n\tPERF_SAMPLE_BRANCH_USER       = 0x1\n\tPERF_SAMPLE_BRANCH_KERNEL     = 0x2\n\tPERF_SAMPLE_BRANCH_HV         = 0x4\n\tPERF_SAMPLE_BRANCH_ANY        = 0x8\n\tPERF_SAMPLE_BRANCH_ANY_CALL   = 0x10\n\tPERF_SAMPLE_BRANCH_ANY_RETURN = 0x20\n\tPERF_SAMPLE_BRANCH_IND_CALL   = 0x40\n\tPERF_SAMPLE_BRANCH_ABORT_TX   = 0x80\n\tPERF_SAMPLE_BRANCH_IN_TX      = 0x100\n\tPERF_SAMPLE_BRANCH_NO_TX      = 0x200\n\tPERF_SAMPLE_BRANCH_COND       = 0x400\n\tPERF_SAMPLE_BRANCH_CALL_STACK = 0x800\n\tPERF_SAMPLE_BRANCH_IND_JUMP   = 0x1000\n\tPERF_SAMPLE_BRANCH_CALL       = 0x2000\n\tPERF_SAMPLE_BRANCH_NO_FLAGS   = 0x4000\n\tPERF_SAMPLE_BRANCH_NO_CYCLES  = 0x8000\n\tPERF_SAMPLE_BRANCH_TYPE_SAVE  = 0x10000\n\n\tPERF_FORMAT_TOTAL_TIME_ENABLED = 0x1\n\tPERF_FORMAT_TOTAL_TIME_RUNNING = 0x2\n\tPERF_FORMAT_ID                 = 0x4\n\tPERF_FORMAT_GROUP              = 0x8\n\n\tPERF_RECORD_MMAP            = 0x1\n\tPERF_RECORD_LOST            = 0x2\n\tPERF_RECORD_COMM            = 0x3\n\tPERF_RECORD_EXIT            = 0x4\n\tPERF_RECORD_THROTTLE        = 0x5\n\tPERF_RECORD_UNTHROTTLE      = 0x6\n\tPERF_RECORD_FORK            = 0x7\n\tPERF_RECORD_READ            = 0x8\n\tPERF_RECORD_SAMPLE          = 0x9\n\tPERF_RECORD_MMAP2           = 0xa\n\tPERF_RECORD_AUX             = 0xb\n\tPERF_RECORD_ITRACE_START    = 0xc\n\tPERF_RECORD_LOST_SAMPLES    = 0xd\n\tPERF_RECORD_SWITCH          = 0xe\n\tPERF_RECORD_SWITCH_CPU_WIDE = 0xf\n\tPERF_RECORD_NAMESPACES      = 0x10\n\n\tPERF_CONTEXT_HV     = -0x20\n\tPERF_CONTEXT_KERNEL = -0x80\n\tPERF_CONTEXT_USER   = -0x200\n\n\tPERF_CONTEXT_GUEST        = -0x800\n\tPERF_CONTEXT_GUEST_KERNEL = -0x880\n\tPERF_CONTEXT_GUEST_USER   = -0xa00\n\n\tPERF_FLAG_FD_NO_GROUP = 0x1\n\tPERF_FLAG_FD_OUTPUT   = 0x2\n\tPERF_FLAG_PID_CGROUP  = 0x4\n\tPERF_FLAG_FD_CLOEXEC  = 0x8\n)\n\nconst (\n\tCBitFieldMaskBit0  = 0x1\n\tCBitFieldMaskBit1  = 0x2\n\tCBitFieldMaskBit2  = 0x4\n\tCBitFieldMaskBit3  = 0x8\n\tCBitFieldMaskBit4  = 0x10\n\tCBitFieldMaskBit5  = 0x20\n\tCBitFieldMaskBit6  = 0x40\n\tCBitFieldMaskBit7  = 0x80\n\tCBitFieldMaskBit8  = 0x100\n\tCBitFieldMaskBit9  = 0x200\n\tCBitFieldMaskBit10 = 0x400\n\tCBitFieldMaskBit11 = 0x800\n\tCBitFieldMaskBit12 = 0x1000\n\tCBitFieldMaskBit13 = 0x2000\n\tCBitFieldMaskBit14 = 0x4000\n\tCBitFieldMaskBit15 = 0x8000\n\tCBitFieldMaskBit16 = 0x10000\n\tCBitFieldMaskBit17 = 0x20000\n\tCBitFieldMaskBit18 = 0x40000\n\tCBitFieldMaskBit19 = 0x80000\n\tCBitFieldMaskBit20 = 0x100000\n\tCBitFieldMaskBit21 = 0x200000\n\tCBitFieldMaskBit22 = 0x400000\n\tCBitFieldMaskBit23 = 0x800000\n\tCBitFieldMaskBit24 = 0x1000000\n\tCBitFieldMaskBit25 = 0x2000000\n\tCBitFieldMaskBit26 = 0x4000000\n\tCBitFieldMaskBit27 = 0x8000000\n\tCBitFieldMaskBit28 = 0x10000000\n\tCBitFieldMaskBit29 = 0x20000000\n\tCBitFieldMaskBit30 = 0x40000000\n\tCBitFieldMaskBit31 = 0x80000000\n\tCBitFieldMaskBit32 = 0x100000000\n\tCBitFieldMaskBit33 = 0x200000000\n\tCBitFieldMaskBit34 = 0x400000000\n\tCBitFieldMaskBit35 = 0x800000000\n\tCBitFieldMaskBit36 = 0x1000000000\n\tCBitFieldMaskBit37 = 0x2000000000\n\tCBitFieldMaskBit38 = 0x4000000000\n\tCBitFieldMaskBit39 = 0x8000000000\n\tCBitFieldMaskBit40 = 0x10000000000\n\tCBitFieldMaskBit41 = 0x20000000000\n\tCBitFieldMaskBit42 = 0x40000000000\n\tCBitFieldMaskBit43 = 0x80000000000\n\tCBitFieldMaskBit44 = 0x100000000000\n\tCBitFieldMaskBit45 = 0x200000000000\n\tCBitFieldMaskBit46 = 0x400000000000\n\tCBitFieldMaskBit47 = 0x800000000000\n\tCBitFieldMaskBit48 = 0x1000000000000\n\tCBitFieldMaskBit49 = 0x2000000000000\n\tCBitFieldMaskBit50 = 0x4000000000000\n\tCBitFieldMaskBit51 = 0x8000000000000\n\tCBitFieldMaskBit52 = 0x10000000000000\n\tCBitFieldMaskBit53 = 0x20000000000000\n\tCBitFieldMaskBit54 = 0x40000000000000\n\tCBitFieldMaskBit55 = 0x80000000000000\n\tCBitFieldMaskBit56 = 0x100000000000000\n\tCBitFieldMaskBit57 = 0x200000000000000\n\tCBitFieldMaskBit58 = 0x400000000000000\n\tCBitFieldMaskBit59 = 0x800000000000000\n\tCBitFieldMaskBit60 = 0x1000000000000000\n\tCBitFieldMaskBit61 = 0x2000000000000000\n\tCBitFieldMaskBit62 = 0x4000000000000000\n\tCBitFieldMaskBit63 = 0x8000000000000000\n)\n\ntype SockaddrStorage struct {\n\tFamily uint16\n\t_      [118]int8\n\t_      uint64\n}\n\ntype TCPMD5Sig struct {\n\tAddr      SockaddrStorage\n\tFlags     uint8\n\tPrefixlen uint8\n\tKeylen    uint16\n\t_         uint32\n\tKey       [80]uint8\n}\n\ntype HDDriveCmdHdr struct {\n\tCommand uint8\n\tNumber  uint8\n\tFeature uint8\n\tCount   uint8\n}\n\ntype HDGeometry struct {\n\tHeads     uint8\n\tSectors   uint8\n\tCylinders uint16\n\tStart     uint64\n}\n\ntype HDDriveID struct {\n\tConfig         uint16\n\tCyls           uint16\n\tReserved2      uint16\n\tHeads          uint16\n\tTrack_bytes    uint16\n\tSector_bytes   uint16\n\tSectors        uint16\n\tVendor0        uint16\n\tVendor1        uint16\n\tVendor2        uint16\n\tSerial_no      [20]uint8\n\tBuf_type       uint16\n\tBuf_size       uint16\n\tEcc_bytes      uint16\n\tFw_rev         [8]uint8\n\tModel          [40]uint8\n\tMax_multsect   uint8\n\tVendor3        uint8\n\tDword_io       uint16\n\tVendor4        uint8\n\tCapability     uint8\n\tReserved50     uint16\n\tVendor5        uint8\n\tTPIO           uint8\n\tVendor6        uint8\n\tTDMA           uint8\n\tField_valid    uint16\n\tCur_cyls       uint16\n\tCur_heads      uint16\n\tCur_sectors    uint16\n\tCur_capacity0  uint16\n\tCur_capacity1  uint16\n\tMultsect       uint8\n\tMultsect_valid uint8\n\tLba_capacity   uint32\n\tDma_1word      uint16\n\tDma_mword      uint16\n\tEide_pio_modes uint16\n\tEide_dma_min   uint16\n\tEide_dma_time  uint16\n\tEide_pio       uint16\n\tEide_pio_iordy uint16\n\tWords69_70     [2]uint16\n\tWords71_74     [4]uint16\n\tQueue_depth    uint16\n\tWords76_79     [4]uint16\n\tMajor_rev_num  uint16\n\tMinor_rev_num  uint16\n\tCommand_set_1  uint16\n\tCommand_set_2  uint16\n\tCfsse          uint16\n\tCfs_enable_1   uint16\n\tCfs_enable_2   uint16\n\tCsf_default    uint16\n\tDma_ultra      uint16\n\tTrseuc         uint16\n\tTrsEuc         uint16\n\tCurAPMvalues   uint16\n\tMprc           uint16\n\tHw_config      uint16\n\tAcoustic       uint16\n\tMsrqs          uint16\n\tSxfert         uint16\n\tSal            uint16\n\tSpg            uint32\n\tLba_capacity_2 uint64\n\tWords104_125   [22]uint16\n\tLast_lun       uint16\n\tWord127        uint16\n\tDlf            uint16\n\tCsfo           uint16\n\tWords130_155   [26]uint16\n\tWord156        uint16\n\tWords157_159   [3]uint16\n\tCfa_power      uint16\n\tWords161_175   [15]uint16\n\tWords176_205   [30]uint16\n\tWords206_254   [49]uint16\n\tIntegrity_word uint16\n}\n\ntype Statfs_t struct {\n\tType    int64\n\tBsize   int64\n\tBlocks  uint64\n\tBfree   uint64\n\tBavail  uint64\n\tFiles   uint64\n\tFfree   uint64\n\tFsid    Fsid\n\tNamelen int64\n\tFrsize  int64\n\tFlags   int64\n\tSpare   [4]int64\n}\n\nconst (\n\tST_MANDLOCK    = 0x40\n\tST_NOATIME     = 0x400\n\tST_NODEV       = 0x4\n\tST_NODIRATIME  = 0x800\n\tST_NOEXEC      = 0x8\n\tST_NOSUID      = 0x2\n\tST_RDONLY      = 0x1\n\tST_RELATIME    = 0x1000\n\tST_SYNCHRONOUS = 0x10\n)\n\ntype TpacketHdr struct {\n\tStatus  uint64\n\tLen     uint32\n\tSnaplen uint32\n\tMac     uint16\n\tNet     uint16\n\tSec     uint32\n\tUsec    uint32\n\t_       [4]byte\n}\n\ntype Tpacket2Hdr struct {\n\tStatus    uint32\n\tLen       uint32\n\tSnaplen   uint32\n\tMac       uint16\n\tNet       uint16\n\tSec       uint32\n\tNsec      uint32\n\tVlan_tci  uint16\n\tVlan_tpid uint16\n\t_         [4]uint8\n}\n\ntype Tpacket3Hdr struct {\n\tNext_offset uint32\n\tSec         uint32\n\tNsec        uint32\n\tSnaplen     uint32\n\tLen         uint32\n\tStatus      uint32\n\tMac         uint16\n\tNet         uint16\n\tHv1         TpacketHdrVariant1\n\t_           [8]uint8\n}\n\ntype TpacketHdrVariant1 struct {\n\tRxhash    uint32\n\tVlan_tci  uint32\n\tVlan_tpid uint16\n\t_         uint16\n}\n\ntype TpacketBlockDesc struct {\n\tVersion uint32\n\tTo_priv uint32\n\tHdr     [40]byte\n}\n\ntype TpacketBDTS struct {\n\tSec  uint32\n\tUsec uint32\n}\n\ntype TpacketHdrV1 struct {\n\tBlock_status        uint32\n\tNum_pkts            uint32\n\tOffset_to_first_pkt uint32\n\tBlk_len             uint32\n\tSeq_num             uint64\n\tTs_first_pkt        TpacketBDTS\n\tTs_last_pkt         TpacketBDTS\n}\n\ntype TpacketReq struct {\n\tBlock_size uint32\n\tBlock_nr   uint32\n\tFrame_size uint32\n\tFrame_nr   uint32\n}\n\ntype TpacketReq3 struct {\n\tBlock_size       uint32\n\tBlock_nr         uint32\n\tFrame_size       uint32\n\tFrame_nr         uint32\n\tRetire_blk_tov   uint32\n\tSizeof_priv      uint32\n\tFeature_req_word uint32\n}\n\ntype TpacketStats struct {\n\tPackets uint32\n\tDrops   uint32\n}\n\ntype TpacketStatsV3 struct {\n\tPackets      uint32\n\tDrops        uint32\n\tFreeze_q_cnt uint32\n}\n\ntype TpacketAuxdata struct {\n\tStatus    uint32\n\tLen       uint32\n\tSnaplen   uint32\n\tMac       uint16\n\tNet       uint16\n\tVlan_tci  uint16\n\tVlan_tpid uint16\n}\n\nconst (\n\tTPACKET_V1 = 0x0\n\tTPACKET_V2 = 0x1\n\tTPACKET_V3 = 0x2\n)\n\nconst (\n\tSizeofTpacketHdr  = 0x20\n\tSizeofTpacket2Hdr = 0x20\n\tSizeofTpacket3Hdr = 0x30\n\n\tSizeofTpacketStats   = 0x8\n\tSizeofTpacketStatsV3 = 0xc\n)\n\nconst (\n\tNF_INET_PRE_ROUTING  = 0x0\n\tNF_INET_LOCAL_IN     = 0x1\n\tNF_INET_FORWARD      = 0x2\n\tNF_INET_LOCAL_OUT    = 0x3\n\tNF_INET_POST_ROUTING = 0x4\n\tNF_INET_NUMHOOKS     = 0x5\n)\n\nconst (\n\tNF_NETDEV_INGRESS  = 0x0\n\tNF_NETDEV_NUMHOOKS = 0x1\n)\n\nconst (\n\tNFPROTO_UNSPEC   = 0x0\n\tNFPROTO_INET     = 0x1\n\tNFPROTO_IPV4     = 0x2\n\tNFPROTO_ARP      = 0x3\n\tNFPROTO_NETDEV   = 0x5\n\tNFPROTO_BRIDGE   = 0x7\n\tNFPROTO_IPV6     = 0xa\n\tNFPROTO_DECNET   = 0xc\n\tNFPROTO_NUMPROTO = 0xd\n)\n\ntype Nfgenmsg struct {\n\tNfgen_family uint8\n\tVersion      uint8\n\tRes_id       uint16\n}\n\nconst (\n\tNFNL_BATCH_UNSPEC = 0x0\n\tNFNL_BATCH_GENID  = 0x1\n)\n\nconst (\n\tNFT_REG_VERDICT                   = 0x0\n\tNFT_REG_1                         = 0x1\n\tNFT_REG_2                         = 0x2\n\tNFT_REG_3                         = 0x3\n\tNFT_REG_4                         = 0x4\n\tNFT_REG32_00                      = 0x8\n\tNFT_REG32_01                      = 0x9\n\tNFT_REG32_02                      = 0xa\n\tNFT_REG32_03                      = 0xb\n\tNFT_REG32_04                      = 0xc\n\tNFT_REG32_05                      = 0xd\n\tNFT_REG32_06                      = 0xe\n\tNFT_REG32_07                      = 0xf\n\tNFT_REG32_08                      = 0x10\n\tNFT_REG32_09                      = 0x11\n\tNFT_REG32_10                      = 0x12\n\tNFT_REG32_11                      = 0x13\n\tNFT_REG32_12                      = 0x14\n\tNFT_REG32_13                      = 0x15\n\tNFT_REG32_14                      = 0x16\n\tNFT_REG32_15                      = 0x17\n\tNFT_CONTINUE                      = -0x1\n\tNFT_BREAK                         = -0x2\n\tNFT_JUMP                          = -0x3\n\tNFT_GOTO                          = -0x4\n\tNFT_RETURN                        = -0x5\n\tNFT_MSG_NEWTABLE                  = 0x0\n\tNFT_MSG_GETTABLE                  = 0x1\n\tNFT_MSG_DELTABLE                  = 0x2\n\tNFT_MSG_NEWCHAIN                  = 0x3\n\tNFT_MSG_GETCHAIN                  = 0x4\n\tNFT_MSG_DELCHAIN                  = 0x5\n\tNFT_MSG_NEWRULE                   = 0x6\n\tNFT_MSG_GETRULE                   = 0x7\n\tNFT_MSG_DELRULE                   = 0x8\n\tNFT_MSG_NEWSET                    = 0x9\n\tNFT_MSG_GETSET                    = 0xa\n\tNFT_MSG_DELSET                    = 0xb\n\tNFT_MSG_NEWSETELEM                = 0xc\n\tNFT_MSG_GETSETELEM                = 0xd\n\tNFT_MSG_DELSETELEM                = 0xe\n\tNFT_MSG_NEWGEN                    = 0xf\n\tNFT_MSG_GETGEN                    = 0x10\n\tNFT_MSG_TRACE                     = 0x11\n\tNFT_MSG_NEWOBJ                    = 0x12\n\tNFT_MSG_GETOBJ                    = 0x13\n\tNFT_MSG_DELOBJ                    = 0x14\n\tNFT_MSG_GETOBJ_RESET              = 0x15\n\tNFT_MSG_MAX                       = 0x19\n\tNFTA_LIST_UNPEC                   = 0x0\n\tNFTA_LIST_ELEM                    = 0x1\n\tNFTA_HOOK_UNSPEC                  = 0x0\n\tNFTA_HOOK_HOOKNUM                 = 0x1\n\tNFTA_HOOK_PRIORITY                = 0x2\n\tNFTA_HOOK_DEV                     = 0x3\n\tNFT_TABLE_F_DORMANT               = 0x1\n\tNFTA_TABLE_UNSPEC                 = 0x0\n\tNFTA_TABLE_NAME                   = 0x1\n\tNFTA_TABLE_FLAGS                  = 0x2\n\tNFTA_TABLE_USE                    = 0x3\n\tNFTA_CHAIN_UNSPEC                 = 0x0\n\tNFTA_CHAIN_TABLE                  = 0x1\n\tNFTA_CHAIN_HANDLE                 = 0x2\n\tNFTA_CHAIN_NAME                   = 0x3\n\tNFTA_CHAIN_HOOK                   = 0x4\n\tNFTA_CHAIN_POLICY                 = 0x5\n\tNFTA_CHAIN_USE                    = 0x6\n\tNFTA_CHAIN_TYPE                   = 0x7\n\tNFTA_CHAIN_COUNTERS               = 0x8\n\tNFTA_CHAIN_PAD                    = 0x9\n\tNFTA_RULE_UNSPEC                  = 0x0\n\tNFTA_RULE_TABLE                   = 0x1\n\tNFTA_RULE_CHAIN                   = 0x2\n\tNFTA_RULE_HANDLE                  = 0x3\n\tNFTA_RULE_EXPRESSIONS             = 0x4\n\tNFTA_RULE_COMPAT                  = 0x5\n\tNFTA_RULE_POSITION                = 0x6\n\tNFTA_RULE_USERDATA                = 0x7\n\tNFTA_RULE_PAD                     = 0x8\n\tNFTA_RULE_ID                      = 0x9\n\tNFT_RULE_COMPAT_F_INV             = 0x2\n\tNFT_RULE_COMPAT_F_MASK            = 0x2\n\tNFTA_RULE_COMPAT_UNSPEC           = 0x0\n\tNFTA_RULE_COMPAT_PROTO            = 0x1\n\tNFTA_RULE_COMPAT_FLAGS            = 0x2\n\tNFT_SET_ANONYMOUS                 = 0x1\n\tNFT_SET_CONSTANT                  = 0x2\n\tNFT_SET_INTERVAL                  = 0x4\n\tNFT_SET_MAP                       = 0x8\n\tNFT_SET_TIMEOUT                   = 0x10\n\tNFT_SET_EVAL                      = 0x20\n\tNFT_SET_OBJECT                    = 0x40\n\tNFT_SET_POL_PERFORMANCE           = 0x0\n\tNFT_SET_POL_MEMORY                = 0x1\n\tNFTA_SET_DESC_UNSPEC              = 0x0\n\tNFTA_SET_DESC_SIZE                = 0x1\n\tNFTA_SET_UNSPEC                   = 0x0\n\tNFTA_SET_TABLE                    = 0x1\n\tNFTA_SET_NAME                     = 0x2\n\tNFTA_SET_FLAGS                    = 0x3\n\tNFTA_SET_KEY_TYPE                 = 0x4\n\tNFTA_SET_KEY_LEN                  = 0x5\n\tNFTA_SET_DATA_TYPE                = 0x6\n\tNFTA_SET_DATA_LEN                 = 0x7\n\tNFTA_SET_POLICY                   = 0x8\n\tNFTA_SET_DESC                     = 0x9\n\tNFTA_SET_ID                       = 0xa\n\tNFTA_SET_TIMEOUT                  = 0xb\n\tNFTA_SET_GC_INTERVAL              = 0xc\n\tNFTA_SET_USERDATA                 = 0xd\n\tNFTA_SET_PAD                      = 0xe\n\tNFTA_SET_OBJ_TYPE                 = 0xf\n\tNFT_SET_ELEM_INTERVAL_END         = 0x1\n\tNFTA_SET_ELEM_UNSPEC              = 0x0\n\tNFTA_SET_ELEM_KEY                 = 0x1\n\tNFTA_SET_ELEM_DATA                = 0x2\n\tNFTA_SET_ELEM_FLAGS               = 0x3\n\tNFTA_SET_ELEM_TIMEOUT             = 0x4\n\tNFTA_SET_ELEM_EXPIRATION          = 0x5\n\tNFTA_SET_ELEM_USERDATA            = 0x6\n\tNFTA_SET_ELEM_EXPR                = 0x7\n\tNFTA_SET_ELEM_PAD                 = 0x8\n\tNFTA_SET_ELEM_OBJREF              = 0x9\n\tNFTA_SET_ELEM_LIST_UNSPEC         = 0x0\n\tNFTA_SET_ELEM_LIST_TABLE          = 0x1\n\tNFTA_SET_ELEM_LIST_SET            = 0x2\n\tNFTA_SET_ELEM_LIST_ELEMENTS       = 0x3\n\tNFTA_SET_ELEM_LIST_SET_ID         = 0x4\n\tNFT_DATA_VALUE                    = 0x0\n\tNFT_DATA_VERDICT                  = 0xffffff00\n\tNFTA_DATA_UNSPEC                  = 0x0\n\tNFTA_DATA_VALUE                   = 0x1\n\tNFTA_DATA_VERDICT                 = 0x2\n\tNFTA_VERDICT_UNSPEC               = 0x0\n\tNFTA_VERDICT_CODE                 = 0x1\n\tNFTA_VERDICT_CHAIN                = 0x2\n\tNFTA_EXPR_UNSPEC                  = 0x0\n\tNFTA_EXPR_NAME                    = 0x1\n\tNFTA_EXPR_DATA                    = 0x2\n\tNFTA_IMMEDIATE_UNSPEC             = 0x0\n\tNFTA_IMMEDIATE_DREG               = 0x1\n\tNFTA_IMMEDIATE_DATA               = 0x2\n\tNFTA_BITWISE_UNSPEC               = 0x0\n\tNFTA_BITWISE_SREG                 = 0x1\n\tNFTA_BITWISE_DREG                 = 0x2\n\tNFTA_BITWISE_LEN                  = 0x3\n\tNFTA_BITWISE_MASK                 = 0x4\n\tNFTA_BITWISE_XOR                  = 0x5\n\tNFT_BYTEORDER_NTOH                = 0x0\n\tNFT_BYTEORDER_HTON                = 0x1\n\tNFTA_BYTEORDER_UNSPEC             = 0x0\n\tNFTA_BYTEORDER_SREG               = 0x1\n\tNFTA_BYTEORDER_DREG               = 0x2\n\tNFTA_BYTEORDER_OP                 = 0x3\n\tNFTA_BYTEORDER_LEN                = 0x4\n\tNFTA_BYTEORDER_SIZE               = 0x5\n\tNFT_CMP_EQ                        = 0x0\n\tNFT_CMP_NEQ                       = 0x1\n\tNFT_CMP_LT                        = 0x2\n\tNFT_CMP_LTE                       = 0x3\n\tNFT_CMP_GT                        = 0x4\n\tNFT_CMP_GTE                       = 0x5\n\tNFTA_CMP_UNSPEC                   = 0x0\n\tNFTA_CMP_SREG                     = 0x1\n\tNFTA_CMP_OP                       = 0x2\n\tNFTA_CMP_DATA                     = 0x3\n\tNFT_RANGE_EQ                      = 0x0\n\tNFT_RANGE_NEQ                     = 0x1\n\tNFTA_RANGE_UNSPEC                 = 0x0\n\tNFTA_RANGE_SREG                   = 0x1\n\tNFTA_RANGE_OP                     = 0x2\n\tNFTA_RANGE_FROM_DATA              = 0x3\n\tNFTA_RANGE_TO_DATA                = 0x4\n\tNFT_LOOKUP_F_INV                  = 0x1\n\tNFTA_LOOKUP_UNSPEC                = 0x0\n\tNFTA_LOOKUP_SET                   = 0x1\n\tNFTA_LOOKUP_SREG                  = 0x2\n\tNFTA_LOOKUP_DREG                  = 0x3\n\tNFTA_LOOKUP_SET_ID                = 0x4\n\tNFTA_LOOKUP_FLAGS                 = 0x5\n\tNFT_DYNSET_OP_ADD                 = 0x0\n\tNFT_DYNSET_OP_UPDATE              = 0x1\n\tNFT_DYNSET_F_INV                  = 0x1\n\tNFTA_DYNSET_UNSPEC                = 0x0\n\tNFTA_DYNSET_SET_NAME              = 0x1\n\tNFTA_DYNSET_SET_ID                = 0x2\n\tNFTA_DYNSET_OP                    = 0x3\n\tNFTA_DYNSET_SREG_KEY              = 0x4\n\tNFTA_DYNSET_SREG_DATA             = 0x5\n\tNFTA_DYNSET_TIMEOUT               = 0x6\n\tNFTA_DYNSET_EXPR                  = 0x7\n\tNFTA_DYNSET_PAD                   = 0x8\n\tNFTA_DYNSET_FLAGS                 = 0x9\n\tNFT_PAYLOAD_LL_HEADER             = 0x0\n\tNFT_PAYLOAD_NETWORK_HEADER        = 0x1\n\tNFT_PAYLOAD_TRANSPORT_HEADER      = 0x2\n\tNFT_PAYLOAD_CSUM_NONE             = 0x0\n\tNFT_PAYLOAD_CSUM_INET             = 0x1\n\tNFT_PAYLOAD_L4CSUM_PSEUDOHDR      = 0x1\n\tNFTA_PAYLOAD_UNSPEC               = 0x0\n\tNFTA_PAYLOAD_DREG                 = 0x1\n\tNFTA_PAYLOAD_BASE                 = 0x2\n\tNFTA_PAYLOAD_OFFSET               = 0x3\n\tNFTA_PAYLOAD_LEN                  = 0x4\n\tNFTA_PAYLOAD_SREG                 = 0x5\n\tNFTA_PAYLOAD_CSUM_TYPE            = 0x6\n\tNFTA_PAYLOAD_CSUM_OFFSET          = 0x7\n\tNFTA_PAYLOAD_CSUM_FLAGS           = 0x8\n\tNFT_EXTHDR_F_PRESENT              = 0x1\n\tNFT_EXTHDR_OP_IPV6                = 0x0\n\tNFT_EXTHDR_OP_TCPOPT              = 0x1\n\tNFTA_EXTHDR_UNSPEC                = 0x0\n\tNFTA_EXTHDR_DREG                  = 0x1\n\tNFTA_EXTHDR_TYPE                  = 0x2\n\tNFTA_EXTHDR_OFFSET                = 0x3\n\tNFTA_EXTHDR_LEN                   = 0x4\n\tNFTA_EXTHDR_FLAGS                 = 0x5\n\tNFTA_EXTHDR_OP                    = 0x6\n\tNFTA_EXTHDR_SREG                  = 0x7\n\tNFT_META_LEN                      = 0x0\n\tNFT_META_PROTOCOL                 = 0x1\n\tNFT_META_PRIORITY                 = 0x2\n\tNFT_META_MARK                     = 0x3\n\tNFT_META_IIF                      = 0x4\n\tNFT_META_OIF                      = 0x5\n\tNFT_META_IIFNAME                  = 0x6\n\tNFT_META_OIFNAME                  = 0x7\n\tNFT_META_IIFTYPE                  = 0x8\n\tNFT_META_OIFTYPE                  = 0x9\n\tNFT_META_SKUID                    = 0xa\n\tNFT_META_SKGID                    = 0xb\n\tNFT_META_NFTRACE                  = 0xc\n\tNFT_META_RTCLASSID                = 0xd\n\tNFT_META_SECMARK                  = 0xe\n\tNFT_META_NFPROTO                  = 0xf\n\tNFT_META_L4PROTO                  = 0x10\n\tNFT_META_BRI_IIFNAME              = 0x11\n\tNFT_META_BRI_OIFNAME              = 0x12\n\tNFT_META_PKTTYPE                  = 0x13\n\tNFT_META_CPU                      = 0x14\n\tNFT_META_IIFGROUP                 = 0x15\n\tNFT_META_OIFGROUP                 = 0x16\n\tNFT_META_CGROUP                   = 0x17\n\tNFT_META_PRANDOM                  = 0x18\n\tNFT_RT_CLASSID                    = 0x0\n\tNFT_RT_NEXTHOP4                   = 0x1\n\tNFT_RT_NEXTHOP6                   = 0x2\n\tNFT_RT_TCPMSS                     = 0x3\n\tNFT_HASH_JENKINS                  = 0x0\n\tNFT_HASH_SYM                      = 0x1\n\tNFTA_HASH_UNSPEC                  = 0x0\n\tNFTA_HASH_SREG                    = 0x1\n\tNFTA_HASH_DREG                    = 0x2\n\tNFTA_HASH_LEN                     = 0x3\n\tNFTA_HASH_MODULUS                 = 0x4\n\tNFTA_HASH_SEED                    = 0x5\n\tNFTA_HASH_OFFSET                  = 0x6\n\tNFTA_HASH_TYPE                    = 0x7\n\tNFTA_META_UNSPEC                  = 0x0\n\tNFTA_META_DREG                    = 0x1\n\tNFTA_META_KEY                     = 0x2\n\tNFTA_META_SREG                    = 0x3\n\tNFTA_RT_UNSPEC                    = 0x0\n\tNFTA_RT_DREG                      = 0x1\n\tNFTA_RT_KEY                       = 0x2\n\tNFT_CT_STATE                      = 0x0\n\tNFT_CT_DIRECTION                  = 0x1\n\tNFT_CT_STATUS                     = 0x2\n\tNFT_CT_MARK                       = 0x3\n\tNFT_CT_SECMARK                    = 0x4\n\tNFT_CT_EXPIRATION                 = 0x5\n\tNFT_CT_HELPER                     = 0x6\n\tNFT_CT_L3PROTOCOL                 = 0x7\n\tNFT_CT_SRC                        = 0x8\n\tNFT_CT_DST                        = 0x9\n\tNFT_CT_PROTOCOL                   = 0xa\n\tNFT_CT_PROTO_SRC                  = 0xb\n\tNFT_CT_PROTO_DST                  = 0xc\n\tNFT_CT_LABELS                     = 0xd\n\tNFT_CT_PKTS                       = 0xe\n\tNFT_CT_BYTES                      = 0xf\n\tNFT_CT_AVGPKT                     = 0x10\n\tNFT_CT_ZONE                       = 0x11\n\tNFT_CT_EVENTMASK                  = 0x12\n\tNFTA_CT_UNSPEC                    = 0x0\n\tNFTA_CT_DREG                      = 0x1\n\tNFTA_CT_KEY                       = 0x2\n\tNFTA_CT_DIRECTION                 = 0x3\n\tNFTA_CT_SREG                      = 0x4\n\tNFT_LIMIT_PKTS                    = 0x0\n\tNFT_LIMIT_PKT_BYTES               = 0x1\n\tNFT_LIMIT_F_INV                   = 0x1\n\tNFTA_LIMIT_UNSPEC                 = 0x0\n\tNFTA_LIMIT_RATE                   = 0x1\n\tNFTA_LIMIT_UNIT                   = 0x2\n\tNFTA_LIMIT_BURST                  = 0x3\n\tNFTA_LIMIT_TYPE                   = 0x4\n\tNFTA_LIMIT_FLAGS                  = 0x5\n\tNFTA_LIMIT_PAD                    = 0x6\n\tNFTA_COUNTER_UNSPEC               = 0x0\n\tNFTA_COUNTER_BYTES                = 0x1\n\tNFTA_COUNTER_PACKETS              = 0x2\n\tNFTA_COUNTER_PAD                  = 0x3\n\tNFTA_LOG_UNSPEC                   = 0x0\n\tNFTA_LOG_GROUP                    = 0x1\n\tNFTA_LOG_PREFIX                   = 0x2\n\tNFTA_LOG_SNAPLEN                  = 0x3\n\tNFTA_LOG_QTHRESHOLD               = 0x4\n\tNFTA_LOG_LEVEL                    = 0x5\n\tNFTA_LOG_FLAGS                    = 0x6\n\tNFTA_QUEUE_UNSPEC                 = 0x0\n\tNFTA_QUEUE_NUM                    = 0x1\n\tNFTA_QUEUE_TOTAL                  = 0x2\n\tNFTA_QUEUE_FLAGS                  = 0x3\n\tNFTA_QUEUE_SREG_QNUM              = 0x4\n\tNFT_QUOTA_F_INV                   = 0x1\n\tNFT_QUOTA_F_DEPLETED              = 0x2\n\tNFTA_QUOTA_UNSPEC                 = 0x0\n\tNFTA_QUOTA_BYTES                  = 0x1\n\tNFTA_QUOTA_FLAGS                  = 0x2\n\tNFTA_QUOTA_PAD                    = 0x3\n\tNFTA_QUOTA_CONSUMED               = 0x4\n\tNFT_REJECT_ICMP_UNREACH           = 0x0\n\tNFT_REJECT_TCP_RST                = 0x1\n\tNFT_REJECT_ICMPX_UNREACH          = 0x2\n\tNFT_REJECT_ICMPX_NO_ROUTE         = 0x0\n\tNFT_REJECT_ICMPX_PORT_UNREACH     = 0x1\n\tNFT_REJECT_ICMPX_HOST_UNREACH     = 0x2\n\tNFT_REJECT_ICMPX_ADMIN_PROHIBITED = 0x3\n\tNFTA_REJECT_UNSPEC                = 0x0\n\tNFTA_REJECT_TYPE                  = 0x1\n\tNFTA_REJECT_ICMP_CODE             = 0x2\n\tNFT_NAT_SNAT                      = 0x0\n\tNFT_NAT_DNAT                      = 0x1\n\tNFTA_NAT_UNSPEC                   = 0x0\n\tNFTA_NAT_TYPE                     = 0x1\n\tNFTA_NAT_FAMILY                   = 0x2\n\tNFTA_NAT_REG_ADDR_MIN             = 0x3\n\tNFTA_NAT_REG_ADDR_MAX             = 0x4\n\tNFTA_NAT_REG_PROTO_MIN            = 0x5\n\tNFTA_NAT_REG_PROTO_MAX            = 0x6\n\tNFTA_NAT_FLAGS                    = 0x7\n\tNFTA_MASQ_UNSPEC                  = 0x0\n\tNFTA_MASQ_FLAGS                   = 0x1\n\tNFTA_MASQ_REG_PROTO_MIN           = 0x2\n\tNFTA_MASQ_REG_PROTO_MAX           = 0x3\n\tNFTA_REDIR_UNSPEC                 = 0x0\n\tNFTA_REDIR_REG_PROTO_MIN          = 0x1\n\tNFTA_REDIR_REG_PROTO_MAX          = 0x2\n\tNFTA_REDIR_FLAGS                  = 0x3\n\tNFTA_DUP_UNSPEC                   = 0x0\n\tNFTA_DUP_SREG_ADDR                = 0x1\n\tNFTA_DUP_SREG_DEV                 = 0x2\n\tNFTA_FWD_UNSPEC                   = 0x0\n\tNFTA_FWD_SREG_DEV                 = 0x1\n\tNFTA_OBJREF_UNSPEC                = 0x0\n\tNFTA_OBJREF_IMM_TYPE              = 0x1\n\tNFTA_OBJREF_IMM_NAME              = 0x2\n\tNFTA_OBJREF_SET_SREG              = 0x3\n\tNFTA_OBJREF_SET_NAME              = 0x4\n\tNFTA_OBJREF_SET_ID                = 0x5\n\tNFTA_GEN_UNSPEC                   = 0x0\n\tNFTA_GEN_ID                       = 0x1\n\tNFTA_GEN_PROC_PID                 = 0x2\n\tNFTA_GEN_PROC_NAME                = 0x3\n\tNFTA_FIB_UNSPEC                   = 0x0\n\tNFTA_FIB_DREG                     = 0x1\n\tNFTA_FIB_RESULT                   = 0x2\n\tNFTA_FIB_FLAGS                    = 0x3\n\tNFT_FIB_RESULT_UNSPEC             = 0x0\n\tNFT_FIB_RESULT_OIF                = 0x1\n\tNFT_FIB_RESULT_OIFNAME            = 0x2\n\tNFT_FIB_RESULT_ADDRTYPE           = 0x3\n\tNFTA_FIB_F_SADDR                  = 0x1\n\tNFTA_FIB_F_DADDR                  = 0x2\n\tNFTA_FIB_F_MARK                   = 0x4\n\tNFTA_FIB_F_IIF                    = 0x8\n\tNFTA_FIB_F_OIF                    = 0x10\n\tNFTA_FIB_F_PRESENT                = 0x20\n\tNFTA_CT_HELPER_UNSPEC             = 0x0\n\tNFTA_CT_HELPER_NAME               = 0x1\n\tNFTA_CT_HELPER_L3PROTO            = 0x2\n\tNFTA_CT_HELPER_L4PROTO            = 0x3\n\tNFTA_OBJ_UNSPEC                   = 0x0\n\tNFTA_OBJ_TABLE                    = 0x1\n\tNFTA_OBJ_NAME                     = 0x2\n\tNFTA_OBJ_TYPE                     = 0x3\n\tNFTA_OBJ_DATA                     = 0x4\n\tNFTA_OBJ_USE                      = 0x5\n\tNFTA_TRACE_UNSPEC                 = 0x0\n\tNFTA_TRACE_TABLE                  = 0x1\n\tNFTA_TRACE_CHAIN                  = 0x2\n\tNFTA_TRACE_RULE_HANDLE            = 0x3\n\tNFTA_TRACE_TYPE                   = 0x4\n\tNFTA_TRACE_VERDICT                = 0x5\n\tNFTA_TRACE_ID                     = 0x6\n\tNFTA_TRACE_LL_HEADER              = 0x7\n\tNFTA_TRACE_NETWORK_HEADER         = 0x8\n\tNFTA_TRACE_TRANSPORT_HEADER       = 0x9\n\tNFTA_TRACE_IIF                    = 0xa\n\tNFTA_TRACE_IIFTYPE                = 0xb\n\tNFTA_TRACE_OIF                    = 0xc\n\tNFTA_TRACE_OIFTYPE                = 0xd\n\tNFTA_TRACE_MARK                   = 0xe\n\tNFTA_TRACE_NFPROTO                = 0xf\n\tNFTA_TRACE_POLICY                 = 0x10\n\tNFTA_TRACE_PAD                    = 0x11\n\tNFT_TRACETYPE_UNSPEC              = 0x0\n\tNFT_TRACETYPE_POLICY              = 0x1\n\tNFT_TRACETYPE_RETURN              = 0x2\n\tNFT_TRACETYPE_RULE                = 0x3\n\tNFTA_NG_UNSPEC                    = 0x0\n\tNFTA_NG_DREG                      = 0x1\n\tNFTA_NG_MODULUS                   = 0x2\n\tNFTA_NG_TYPE                      = 0x3\n\tNFTA_NG_OFFSET                    = 0x4\n\tNFT_NG_INCREMENTAL                = 0x0\n\tNFT_NG_RANDOM                     = 0x1\n)\n\ntype RTCTime struct {\n\tSec   int32\n\tMin   int32\n\tHour  int32\n\tMday  int32\n\tMon   int32\n\tYear  int32\n\tWday  int32\n\tYday  int32\n\tIsdst int32\n}\n\ntype RTCWkAlrm struct {\n\tEnabled uint8\n\tPending uint8\n\tTime    RTCTime\n}\n\ntype RTCPLLInfo struct {\n\tCtrl    int32\n\tValue   int32\n\tMax     int32\n\tMin     int32\n\tPosmult int32\n\tNegmult int32\n\tClock   int64\n}\n\ntype BlkpgIoctlArg struct {\n\tOp      int32\n\tFlags   int32\n\tDatalen int32\n\tData    *byte\n}\n\ntype BlkpgPartition struct {\n\tStart   int64\n\tLength  int64\n\tPno     int32\n\tDevname [64]uint8\n\tVolname [64]uint8\n\t_       [4]byte\n}\n\nconst (\n\tBLKPG                  = 0x1269\n\tBLKPG_ADD_PARTITION    = 0x1\n\tBLKPG_DEL_PARTITION    = 0x2\n\tBLKPG_RESIZE_PARTITION = 0x3\n)\n\nconst (\n\tNETNSA_NONE = 0x0\n\tNETNSA_NSID = 0x1\n\tNETNSA_PID  = 0x2\n\tNETNSA_FD   = 0x3\n)\n\ntype XDPRingOffset struct {\n\tProducer uint64\n\tConsumer uint64\n\tDesc     uint64\n}\n\ntype XDPMmapOffsets struct {\n\tRx XDPRingOffset\n\tTx XDPRingOffset\n\tFr XDPRingOffset\n\tCr XDPRingOffset\n}\n\ntype XDPUmemReg struct {\n\tAddr     uint64\n\tLen      uint64\n\tSize     uint32\n\tHeadroom uint32\n}\n\ntype XDPStatistics struct {\n\tRx_dropped       uint64\n\tRx_invalid_descs uint64\n\tTx_invalid_descs uint64\n}\n\ntype XDPDesc struct {\n\tAddr    uint64\n\tLen     uint32\n\tOptions uint32\n}\n\nconst (\n\tNCSI_CMD_UNSPEC                 = 0x0\n\tNCSI_CMD_PKG_INFO               = 0x1\n\tNCSI_CMD_SET_INTERFACE          = 0x2\n\tNCSI_CMD_CLEAR_INTERFACE        = 0x3\n\tNCSI_ATTR_UNSPEC                = 0x0\n\tNCSI_ATTR_IFINDEX               = 0x1\n\tNCSI_ATTR_PACKAGE_LIST          = 0x2\n\tNCSI_ATTR_PACKAGE_ID            = 0x3\n\tNCSI_ATTR_CHANNEL_ID            = 0x4\n\tNCSI_PKG_ATTR_UNSPEC            = 0x0\n\tNCSI_PKG_ATTR                   = 0x1\n\tNCSI_PKG_ATTR_ID                = 0x2\n\tNCSI_PKG_ATTR_FORCED            = 0x3\n\tNCSI_PKG_ATTR_CHANNEL_LIST      = 0x4\n\tNCSI_CHANNEL_ATTR_UNSPEC        = 0x0\n\tNCSI_CHANNEL_ATTR               = 0x1\n\tNCSI_CHANNEL_ATTR_ID            = 0x2\n\tNCSI_CHANNEL_ATTR_VERSION_MAJOR = 0x3\n\tNCSI_CHANNEL_ATTR_VERSION_MINOR = 0x4\n\tNCSI_CHANNEL_ATTR_VERSION_STR   = 0x5\n\tNCSI_CHANNEL_ATTR_LINK_STATE    = 0x6\n\tNCSI_CHANNEL_ATTR_ACTIVE        = 0x7\n\tNCSI_CHANNEL_ATTR_FORCED        = 0x8\n\tNCSI_CHANNEL_ATTR_VLAN_LIST     = 0x9\n\tNCSI_CHANNEL_ATTR_VLAN_ID       = 0xa\n)\n\ntype ScmTimestamping struct {\n\tTs [3]Timespec\n}\n\nconst (\n\tSOF_TIMESTAMPING_TX_HARDWARE  = 0x1\n\tSOF_TIMESTAMPING_TX_SOFTWARE  = 0x2\n\tSOF_TIMESTAMPING_RX_HARDWARE  = 0x4\n\tSOF_TIMESTAMPING_RX_SOFTWARE  = 0x8\n\tSOF_TIMESTAMPING_SOFTWARE     = 0x10\n\tSOF_TIMESTAMPING_SYS_HARDWARE = 0x20\n\tSOF_TIMESTAMPING_RAW_HARDWARE = 0x40\n\tSOF_TIMESTAMPING_OPT_ID       = 0x80\n\tSOF_TIMESTAMPING_TX_SCHED     = 0x100\n\tSOF_TIMESTAMPING_TX_ACK       = 0x200\n\tSOF_TIMESTAMPING_OPT_CMSG     = 0x400\n\tSOF_TIMESTAMPING_OPT_TSONLY   = 0x800\n\tSOF_TIMESTAMPING_OPT_STATS    = 0x1000\n\tSOF_TIMESTAMPING_OPT_PKTINFO  = 0x2000\n\tSOF_TIMESTAMPING_OPT_TX_SWHW  = 0x4000\n\n\tSOF_TIMESTAMPING_LAST = 0x4000\n\tSOF_TIMESTAMPING_MASK = 0x7fff\n\n\tSCM_TSTAMP_SND   = 0x0\n\tSCM_TSTAMP_SCHED = 0x1\n\tSCM_TSTAMP_ACK   = 0x2\n)\n\ntype SockExtendedErr struct {\n\tErrno  uint32\n\tOrigin uint8\n\tType   uint8\n\tCode   uint8\n\tPad    uint8\n\tInfo   uint32\n\tData   uint32\n}\n\ntype FanotifyEventMetadata struct {\n\tEvent_len    uint32\n\tVers         uint8\n\tReserved     uint8\n\tMetadata_len uint16\n\tMask         uint64\n\tFd           int32\n\tPid          int32\n}\n\ntype FanotifyResponse struct {\n\tFd       int32\n\tResponse uint32\n}\n\nconst (\n\tCRYPTO_MSG_BASE      = 0x10\n\tCRYPTO_MSG_NEWALG    = 0x10\n\tCRYPTO_MSG_DELALG    = 0x11\n\tCRYPTO_MSG_UPDATEALG = 0x12\n\tCRYPTO_MSG_GETALG    = 0x13\n\tCRYPTO_MSG_DELRNG    = 0x14\n\tCRYPTO_MSG_GETSTAT   = 0x15\n)\n\nconst (\n\tCRYPTOCFGA_UNSPEC           = 0x0\n\tCRYPTOCFGA_PRIORITY_VAL     = 0x1\n\tCRYPTOCFGA_REPORT_LARVAL    = 0x2\n\tCRYPTOCFGA_REPORT_HASH      = 0x3\n\tCRYPTOCFGA_REPORT_BLKCIPHER = 0x4\n\tCRYPTOCFGA_REPORT_AEAD      = 0x5\n\tCRYPTOCFGA_REPORT_COMPRESS  = 0x6\n\tCRYPTOCFGA_REPORT_RNG       = 0x7\n\tCRYPTOCFGA_REPORT_CIPHER    = 0x8\n\tCRYPTOCFGA_REPORT_AKCIPHER  = 0x9\n\tCRYPTOCFGA_REPORT_KPP       = 0xa\n\tCRYPTOCFGA_REPORT_ACOMP     = 0xb\n\tCRYPTOCFGA_STAT_LARVAL      = 0xc\n\tCRYPTOCFGA_STAT_HASH        = 0xd\n\tCRYPTOCFGA_STAT_BLKCIPHER   = 0xe\n\tCRYPTOCFGA_STAT_AEAD        = 0xf\n\tCRYPTOCFGA_STAT_COMPRESS    = 0x10\n\tCRYPTOCFGA_STAT_RNG         = 0x11\n\tCRYPTOCFGA_STAT_CIPHER      = 0x12\n\tCRYPTOCFGA_STAT_AKCIPHER    = 0x13\n\tCRYPTOCFGA_STAT_KPP         = 0x14\n\tCRYPTOCFGA_STAT_ACOMP       = 0x15\n)\n\ntype CryptoUserAlg struct {\n\tName        [64]int8\n\tDriver_name [64]int8\n\tModule_name [64]int8\n\tType        uint32\n\tMask        uint32\n\tRefcnt      uint32\n\tFlags       uint32\n}\n\ntype CryptoStatAEAD struct {\n\tType         [64]int8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatAKCipher struct {\n\tType         [64]int8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tVerify_cnt   uint64\n\tSign_cnt     uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatCipher struct {\n\tType         [64]int8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatCompress struct {\n\tType            [64]int8\n\tCompress_cnt    uint64\n\tCompress_tlen   uint64\n\tDecompress_cnt  uint64\n\tDecompress_tlen uint64\n\tErr_cnt         uint64\n}\n\ntype CryptoStatHash struct {\n\tType      [64]int8\n\tHash_cnt  uint64\n\tHash_tlen uint64\n\tErr_cnt   uint64\n}\n\ntype CryptoStatKPP struct {\n\tType                      [64]int8\n\tSetsecret_cnt             uint64\n\tGenerate_public_key_cnt   uint64\n\tCompute_shared_secret_cnt uint64\n\tErr_cnt                   uint64\n}\n\ntype CryptoStatRNG struct {\n\tType          [64]int8\n\tGenerate_cnt  uint64\n\tGenerate_tlen uint64\n\tSeed_cnt      uint64\n\tErr_cnt       uint64\n}\n\ntype CryptoStatLarval struct {\n\tType [64]int8\n}\n\ntype CryptoReportLarval struct {\n\tType [64]int8\n}\n\ntype CryptoReportHash struct {\n\tType       [64]int8\n\tBlocksize  uint32\n\tDigestsize uint32\n}\n\ntype CryptoReportCipher struct {\n\tType        [64]int8\n\tBlocksize   uint32\n\tMin_keysize uint32\n\tMax_keysize uint32\n}\n\ntype CryptoReportBlkCipher struct {\n\tType        [64]int8\n\tGeniv       [64]int8\n\tBlocksize   uint32\n\tMin_keysize uint32\n\tMax_keysize uint32\n\tIvsize      uint32\n}\n\ntype CryptoReportAEAD struct {\n\tType        [64]int8\n\tGeniv       [64]int8\n\tBlocksize   uint32\n\tMaxauthsize uint32\n\tIvsize      uint32\n}\n\ntype CryptoReportComp struct {\n\tType [64]int8\n}\n\ntype CryptoReportRNG struct {\n\tType     [64]int8\n\tSeedsize uint32\n}\n\ntype CryptoReportAKCipher struct {\n\tType [64]int8\n}\n\ntype CryptoReportKPP struct {\n\tType [64]int8\n}\n\ntype CryptoReportAcomp struct {\n\tType [64]int8\n}\n\nconst (\n\tBPF_REG_0                           = 0x0\n\tBPF_REG_1                           = 0x1\n\tBPF_REG_2                           = 0x2\n\tBPF_REG_3                           = 0x3\n\tBPF_REG_4                           = 0x4\n\tBPF_REG_5                           = 0x5\n\tBPF_REG_6                           = 0x6\n\tBPF_REG_7                           = 0x7\n\tBPF_REG_8                           = 0x8\n\tBPF_REG_9                           = 0x9\n\tBPF_REG_10                          = 0xa\n\tBPF_MAP_CREATE                      = 0x0\n\tBPF_MAP_LOOKUP_ELEM                 = 0x1\n\tBPF_MAP_UPDATE_ELEM                 = 0x2\n\tBPF_MAP_DELETE_ELEM                 = 0x3\n\tBPF_MAP_GET_NEXT_KEY                = 0x4\n\tBPF_PROG_LOAD                       = 0x5\n\tBPF_OBJ_PIN                         = 0x6\n\tBPF_OBJ_GET                         = 0x7\n\tBPF_PROG_ATTACH                     = 0x8\n\tBPF_PROG_DETACH                     = 0x9\n\tBPF_PROG_TEST_RUN                   = 0xa\n\tBPF_PROG_GET_NEXT_ID                = 0xb\n\tBPF_MAP_GET_NEXT_ID                 = 0xc\n\tBPF_PROG_GET_FD_BY_ID               = 0xd\n\tBPF_MAP_GET_FD_BY_ID                = 0xe\n\tBPF_OBJ_GET_INFO_BY_FD              = 0xf\n\tBPF_PROG_QUERY                      = 0x10\n\tBPF_RAW_TRACEPOINT_OPEN             = 0x11\n\tBPF_BTF_LOAD                        = 0x12\n\tBPF_BTF_GET_FD_BY_ID                = 0x13\n\tBPF_TASK_FD_QUERY                   = 0x14\n\tBPF_MAP_LOOKUP_AND_DELETE_ELEM      = 0x15\n\tBPF_MAP_TYPE_UNSPEC                 = 0x0\n\tBPF_MAP_TYPE_HASH                   = 0x1\n\tBPF_MAP_TYPE_ARRAY                  = 0x2\n\tBPF_MAP_TYPE_PROG_ARRAY             = 0x3\n\tBPF_MAP_TYPE_PERF_EVENT_ARRAY       = 0x4\n\tBPF_MAP_TYPE_PERCPU_HASH            = 0x5\n\tBPF_MAP_TYPE_PERCPU_ARRAY           = 0x6\n\tBPF_MAP_TYPE_STACK_TRACE            = 0x7\n\tBPF_MAP_TYPE_CGROUP_ARRAY           = 0x8\n\tBPF_MAP_TYPE_LRU_HASH               = 0x9\n\tBPF_MAP_TYPE_LRU_PERCPU_HASH        = 0xa\n\tBPF_MAP_TYPE_LPM_TRIE               = 0xb\n\tBPF_MAP_TYPE_ARRAY_OF_MAPS          = 0xc\n\tBPF_MAP_TYPE_HASH_OF_MAPS           = 0xd\n\tBPF_MAP_TYPE_DEVMAP                 = 0xe\n\tBPF_MAP_TYPE_SOCKMAP                = 0xf\n\tBPF_MAP_TYPE_CPUMAP                 = 0x10\n\tBPF_MAP_TYPE_XSKMAP                 = 0x11\n\tBPF_MAP_TYPE_SOCKHASH               = 0x12\n\tBPF_MAP_TYPE_CGROUP_STORAGE         = 0x13\n\tBPF_MAP_TYPE_REUSEPORT_SOCKARRAY    = 0x14\n\tBPF_MAP_TYPE_PERCPU_CGROUP_STORAGE  = 0x15\n\tBPF_MAP_TYPE_QUEUE                  = 0x16\n\tBPF_MAP_TYPE_STACK                  = 0x17\n\tBPF_PROG_TYPE_UNSPEC                = 0x0\n\tBPF_PROG_TYPE_SOCKET_FILTER         = 0x1\n\tBPF_PROG_TYPE_KPROBE                = 0x2\n\tBPF_PROG_TYPE_SCHED_CLS             = 0x3\n\tBPF_PROG_TYPE_SCHED_ACT             = 0x4\n\tBPF_PROG_TYPE_TRACEPOINT            = 0x5\n\tBPF_PROG_TYPE_XDP                   = 0x6\n\tBPF_PROG_TYPE_PERF_EVENT            = 0x7\n\tBPF_PROG_TYPE_CGROUP_SKB            = 0x8\n\tBPF_PROG_TYPE_CGROUP_SOCK           = 0x9\n\tBPF_PROG_TYPE_LWT_IN                = 0xa\n\tBPF_PROG_TYPE_LWT_OUT               = 0xb\n\tBPF_PROG_TYPE_LWT_XMIT              = 0xc\n\tBPF_PROG_TYPE_SOCK_OPS              = 0xd\n\tBPF_PROG_TYPE_SK_SKB                = 0xe\n\tBPF_PROG_TYPE_CGROUP_DEVICE         = 0xf\n\tBPF_PROG_TYPE_SK_MSG                = 0x10\n\tBPF_PROG_TYPE_RAW_TRACEPOINT        = 0x11\n\tBPF_PROG_TYPE_CGROUP_SOCK_ADDR      = 0x12\n\tBPF_PROG_TYPE_LWT_SEG6LOCAL         = 0x13\n\tBPF_PROG_TYPE_LIRC_MODE2            = 0x14\n\tBPF_PROG_TYPE_SK_REUSEPORT          = 0x15\n\tBPF_PROG_TYPE_FLOW_DISSECTOR        = 0x16\n\tBPF_CGROUP_INET_INGRESS             = 0x0\n\tBPF_CGROUP_INET_EGRESS              = 0x1\n\tBPF_CGROUP_INET_SOCK_CREATE         = 0x2\n\tBPF_CGROUP_SOCK_OPS                 = 0x3\n\tBPF_SK_SKB_STREAM_PARSER            = 0x4\n\tBPF_SK_SKB_STREAM_VERDICT           = 0x5\n\tBPF_CGROUP_DEVICE                   = 0x6\n\tBPF_SK_MSG_VERDICT                  = 0x7\n\tBPF_CGROUP_INET4_BIND               = 0x8\n\tBPF_CGROUP_INET6_BIND               = 0x9\n\tBPF_CGROUP_INET4_CONNECT            = 0xa\n\tBPF_CGROUP_INET6_CONNECT            = 0xb\n\tBPF_CGROUP_INET4_POST_BIND          = 0xc\n\tBPF_CGROUP_INET6_POST_BIND          = 0xd\n\tBPF_CGROUP_UDP4_SENDMSG             = 0xe\n\tBPF_CGROUP_UDP6_SENDMSG             = 0xf\n\tBPF_LIRC_MODE2                      = 0x10\n\tBPF_FLOW_DISSECTOR                  = 0x11\n\tBPF_STACK_BUILD_ID_EMPTY            = 0x0\n\tBPF_STACK_BUILD_ID_VALID            = 0x1\n\tBPF_STACK_BUILD_ID_IP               = 0x2\n\tBPF_ADJ_ROOM_NET                    = 0x0\n\tBPF_HDR_START_MAC                   = 0x0\n\tBPF_HDR_START_NET                   = 0x1\n\tBPF_LWT_ENCAP_SEG6                  = 0x0\n\tBPF_LWT_ENCAP_SEG6_INLINE           = 0x1\n\tBPF_OK                              = 0x0\n\tBPF_DROP                            = 0x2\n\tBPF_REDIRECT                        = 0x7\n\tBPF_SOCK_OPS_VOID                   = 0x0\n\tBPF_SOCK_OPS_TIMEOUT_INIT           = 0x1\n\tBPF_SOCK_OPS_RWND_INIT              = 0x2\n\tBPF_SOCK_OPS_TCP_CONNECT_CB         = 0x3\n\tBPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB  = 0x4\n\tBPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB = 0x5\n\tBPF_SOCK_OPS_NEEDS_ECN              = 0x6\n\tBPF_SOCK_OPS_BASE_RTT               = 0x7\n\tBPF_SOCK_OPS_RTO_CB                 = 0x8\n\tBPF_SOCK_OPS_RETRANS_CB             = 0x9\n\tBPF_SOCK_OPS_STATE_CB               = 0xa\n\tBPF_SOCK_OPS_TCP_LISTEN_CB          = 0xb\n\tBPF_TCP_ESTABLISHED                 = 0x1\n\tBPF_TCP_SYN_SENT                    = 0x2\n\tBPF_TCP_SYN_RECV                    = 0x3\n\tBPF_TCP_FIN_WAIT1                   = 0x4\n\tBPF_TCP_FIN_WAIT2                   = 0x5\n\tBPF_TCP_TIME_WAIT                   = 0x6\n\tBPF_TCP_CLOSE                       = 0x7\n\tBPF_TCP_CLOSE_WAIT                  = 0x8\n\tBPF_TCP_LAST_ACK                    = 0x9\n\tBPF_TCP_LISTEN                      = 0xa\n\tBPF_TCP_CLOSING                     = 0xb\n\tBPF_TCP_NEW_SYN_RECV                = 0xc\n\tBPF_TCP_MAX_STATES                  = 0xd\n\tBPF_FIB_LKUP_RET_SUCCESS            = 0x0\n\tBPF_FIB_LKUP_RET_BLACKHOLE          = 0x1\n\tBPF_FIB_LKUP_RET_UNREACHABLE        = 0x2\n\tBPF_FIB_LKUP_RET_PROHIBIT           = 0x3\n\tBPF_FIB_LKUP_RET_NOT_FWDED          = 0x4\n\tBPF_FIB_LKUP_RET_FWD_DISABLED       = 0x5\n\tBPF_FIB_LKUP_RET_UNSUPP_LWT         = 0x6\n\tBPF_FIB_LKUP_RET_NO_NEIGH           = 0x7\n\tBPF_FIB_LKUP_RET_FRAG_NEEDED        = 0x8\n\tBPF_FD_TYPE_RAW_TRACEPOINT          = 0x0\n\tBPF_FD_TYPE_TRACEPOINT              = 0x1\n\tBPF_FD_TYPE_KPROBE                  = 0x2\n\tBPF_FD_TYPE_KRETPROBE               = 0x3\n\tBPF_FD_TYPE_UPROBE                  = 0x4\n\tBPF_FD_TYPE_URETPROBE               = 0x5\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_linux_mips.go",
    "content": "// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build mips,linux\n\npackage unix\n\nconst (\n\tSizeofPtr      = 0x4\n\tSizeofShort    = 0x2\n\tSizeofInt      = 0x4\n\tSizeofLong     = 0x4\n\tSizeofLongLong = 0x8\n\tPathMax        = 0x1000\n)\n\ntype (\n\t_C_short     int16\n\t_C_int       int32\n\t_C_long      int32\n\t_C_long_long int64\n)\n\ntype Timespec struct {\n\tSec  int32\n\tNsec int32\n}\n\ntype Timeval struct {\n\tSec  int32\n\tUsec int32\n}\n\ntype Timex struct {\n\tModes     uint32\n\tOffset    int32\n\tFreq      int32\n\tMaxerror  int32\n\tEsterror  int32\n\tStatus    int32\n\tConstant  int32\n\tPrecision int32\n\tTolerance int32\n\tTime      Timeval\n\tTick      int32\n\tPpsfreq   int32\n\tJitter    int32\n\tShift     int32\n\tStabil    int32\n\tJitcnt    int32\n\tCalcnt    int32\n\tErrcnt    int32\n\tStbcnt    int32\n\tTai       int32\n\t_         [44]byte\n}\n\ntype Time_t int32\n\ntype Tms struct {\n\tUtime  int32\n\tStime  int32\n\tCutime int32\n\tCstime int32\n}\n\ntype Utimbuf struct {\n\tActime  int32\n\tModtime int32\n}\n\ntype Rusage struct {\n\tUtime    Timeval\n\tStime    Timeval\n\tMaxrss   int32\n\tIxrss    int32\n\tIdrss    int32\n\tIsrss    int32\n\tMinflt   int32\n\tMajflt   int32\n\tNswap    int32\n\tInblock  int32\n\tOublock  int32\n\tMsgsnd   int32\n\tMsgrcv   int32\n\tNsignals int32\n\tNvcsw    int32\n\tNivcsw   int32\n}\n\ntype Rlimit struct {\n\tCur uint64\n\tMax uint64\n}\n\ntype _Gid_t uint32\n\ntype Stat_t struct {\n\tDev     uint32\n\tPad1    [3]int32\n\tIno     uint64\n\tMode    uint32\n\tNlink   uint32\n\tUid     uint32\n\tGid     uint32\n\tRdev    uint32\n\tPad2    [3]int32\n\tSize    int64\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\tBlksize int32\n\tPad4    int32\n\tBlocks  int64\n\tPad5    [14]int32\n}\n\ntype StatxTimestamp struct {\n\tSec  int64\n\tNsec uint32\n\t_    int32\n}\n\ntype Statx_t struct {\n\tMask            uint32\n\tBlksize         uint32\n\tAttributes      uint64\n\tNlink           uint32\n\tUid             uint32\n\tGid             uint32\n\tMode            uint16\n\t_               [1]uint16\n\tIno             uint64\n\tSize            uint64\n\tBlocks          uint64\n\tAttributes_mask uint64\n\tAtime           StatxTimestamp\n\tBtime           StatxTimestamp\n\tCtime           StatxTimestamp\n\tMtime           StatxTimestamp\n\tRdev_major      uint32\n\tRdev_minor      uint32\n\tDev_major       uint32\n\tDev_minor       uint32\n\t_               [14]uint64\n}\n\ntype Dirent struct {\n\tIno    uint64\n\tOff    int64\n\tReclen uint16\n\tType   uint8\n\tName   [256]int8\n\t_      [5]byte\n}\n\ntype Fsid struct {\n\tVal [2]int32\n}\n\ntype Flock_t struct {\n\tType   int16\n\tWhence int16\n\t_      [4]byte\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\t_      [4]byte\n}\n\ntype FscryptPolicy struct {\n\tVersion                   uint8\n\tContents_encryption_mode  uint8\n\tFilenames_encryption_mode uint8\n\tFlags                     uint8\n\tMaster_key_descriptor     [8]uint8\n}\n\ntype FscryptKey struct {\n\tMode uint32\n\tRaw  [64]uint8\n\tSize uint32\n}\n\ntype KeyctlDHParams struct {\n\tPrivate int32\n\tPrime   int32\n\tBase    int32\n}\n\nconst (\n\tFADV_NORMAL     = 0x0\n\tFADV_RANDOM     = 0x1\n\tFADV_SEQUENTIAL = 0x2\n\tFADV_WILLNEED   = 0x3\n\tFADV_DONTNEED   = 0x4\n\tFADV_NOREUSE    = 0x5\n)\n\ntype RawSockaddrInet4 struct {\n\tFamily uint16\n\tPort   uint16\n\tAddr   [4]byte /* in_addr */\n\tZero   [8]uint8\n}\n\ntype RawSockaddrInet6 struct {\n\tFamily   uint16\n\tPort     uint16\n\tFlowinfo uint32\n\tAddr     [16]byte /* in6_addr */\n\tScope_id uint32\n}\n\ntype RawSockaddrUnix struct {\n\tFamily uint16\n\tPath   [108]int8\n}\n\ntype RawSockaddrLinklayer struct {\n\tFamily   uint16\n\tProtocol uint16\n\tIfindex  int32\n\tHatype   uint16\n\tPkttype  uint8\n\tHalen    uint8\n\tAddr     [8]uint8\n}\n\ntype RawSockaddrNetlink struct {\n\tFamily uint16\n\tPad    uint16\n\tPid    uint32\n\tGroups uint32\n}\n\ntype RawSockaddrHCI struct {\n\tFamily  uint16\n\tDev     uint16\n\tChannel uint16\n}\n\ntype RawSockaddrL2 struct {\n\tFamily      uint16\n\tPsm         uint16\n\tBdaddr      [6]uint8\n\tCid         uint16\n\tBdaddr_type uint8\n\t_           [1]byte\n}\n\ntype RawSockaddrRFCOMM struct {\n\tFamily  uint16\n\tBdaddr  [6]uint8\n\tChannel uint8\n\t_       [1]byte\n}\n\ntype RawSockaddrCAN struct {\n\tFamily  uint16\n\tIfindex int32\n\tAddr    [8]byte\n}\n\ntype RawSockaddrALG struct {\n\tFamily uint16\n\tType   [14]uint8\n\tFeat   uint32\n\tMask   uint32\n\tName   [64]uint8\n}\n\ntype RawSockaddrVM struct {\n\tFamily    uint16\n\tReserved1 uint16\n\tPort      uint32\n\tCid       uint32\n\tZero      [4]uint8\n}\n\ntype RawSockaddrXDP struct {\n\tFamily         uint16\n\tFlags          uint16\n\tIfindex        uint32\n\tQueue_id       uint32\n\tShared_umem_fd uint32\n}\n\ntype RawSockaddrPPPoX [0x1e]byte\n\ntype RawSockaddr struct {\n\tFamily uint16\n\tData   [14]int8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [96]int8\n}\n\ntype _Socklen uint32\n\ntype Linger struct {\n\tOnoff  int32\n\tLinger int32\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint32\n}\n\ntype IPMreq struct {\n\tMultiaddr [4]byte /* in_addr */\n\tInterface [4]byte /* in_addr */\n}\n\ntype IPMreqn struct {\n\tMultiaddr [4]byte /* in_addr */\n\tAddress   [4]byte /* in_addr */\n\tIfindex   int32\n}\n\ntype IPv6Mreq struct {\n\tMultiaddr [16]byte /* in6_addr */\n\tInterface uint32\n}\n\ntype PacketMreq struct {\n\tIfindex int32\n\tType    uint16\n\tAlen    uint16\n\tAddress [8]uint8\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tIov        *Iovec\n\tIovlen     uint32\n\tControl    *byte\n\tControllen uint32\n\tFlags      int32\n}\n\ntype Cmsghdr struct {\n\tLen   uint32\n\tLevel int32\n\tType  int32\n}\n\ntype Inet4Pktinfo struct {\n\tIfindex  int32\n\tSpec_dst [4]byte /* in_addr */\n\tAddr     [4]byte /* in_addr */\n}\n\ntype Inet6Pktinfo struct {\n\tAddr    [16]byte /* in6_addr */\n\tIfindex uint32\n}\n\ntype IPv6MTUInfo struct {\n\tAddr RawSockaddrInet6\n\tMtu  uint32\n}\n\ntype ICMPv6Filter struct {\n\tData [8]uint32\n}\n\ntype Ucred struct {\n\tPid int32\n\tUid uint32\n\tGid uint32\n}\n\ntype TCPInfo struct {\n\tState          uint8\n\tCa_state       uint8\n\tRetransmits    uint8\n\tProbes         uint8\n\tBackoff        uint8\n\tOptions        uint8\n\tRto            uint32\n\tAto            uint32\n\tSnd_mss        uint32\n\tRcv_mss        uint32\n\tUnacked        uint32\n\tSacked         uint32\n\tLost           uint32\n\tRetrans        uint32\n\tFackets        uint32\n\tLast_data_sent uint32\n\tLast_ack_sent  uint32\n\tLast_data_recv uint32\n\tLast_ack_recv  uint32\n\tPmtu           uint32\n\tRcv_ssthresh   uint32\n\tRtt            uint32\n\tRttvar         uint32\n\tSnd_ssthresh   uint32\n\tSnd_cwnd       uint32\n\tAdvmss         uint32\n\tReordering     uint32\n\tRcv_rtt        uint32\n\tRcv_space      uint32\n\tTotal_retrans  uint32\n}\n\ntype CanFilter struct {\n\tId   uint32\n\tMask uint32\n}\n\nconst (\n\tSizeofSockaddrInet4     = 0x10\n\tSizeofSockaddrInet6     = 0x1c\n\tSizeofSockaddrAny       = 0x70\n\tSizeofSockaddrUnix      = 0x6e\n\tSizeofSockaddrLinklayer = 0x14\n\tSizeofSockaddrNetlink   = 0xc\n\tSizeofSockaddrHCI       = 0x6\n\tSizeofSockaddrL2        = 0xe\n\tSizeofSockaddrRFCOMM    = 0xa\n\tSizeofSockaddrCAN       = 0x10\n\tSizeofSockaddrALG       = 0x58\n\tSizeofSockaddrVM        = 0x10\n\tSizeofSockaddrXDP       = 0x10\n\tSizeofSockaddrPPPoX     = 0x1e\n\tSizeofLinger            = 0x8\n\tSizeofIovec             = 0x8\n\tSizeofIPMreq            = 0x8\n\tSizeofIPMreqn           = 0xc\n\tSizeofIPv6Mreq          = 0x14\n\tSizeofPacketMreq        = 0x10\n\tSizeofMsghdr            = 0x1c\n\tSizeofCmsghdr           = 0xc\n\tSizeofInet4Pktinfo      = 0xc\n\tSizeofInet6Pktinfo      = 0x14\n\tSizeofIPv6MTUInfo       = 0x20\n\tSizeofICMPv6Filter      = 0x20\n\tSizeofUcred             = 0xc\n\tSizeofTCPInfo           = 0x68\n\tSizeofCanFilter         = 0x8\n)\n\nconst (\n\tNDA_UNSPEC              = 0x0\n\tNDA_DST                 = 0x1\n\tNDA_LLADDR              = 0x2\n\tNDA_CACHEINFO           = 0x3\n\tNDA_PROBES              = 0x4\n\tNDA_VLAN                = 0x5\n\tNDA_PORT                = 0x6\n\tNDA_VNI                 = 0x7\n\tNDA_IFINDEX             = 0x8\n\tNDA_MASTER              = 0x9\n\tNDA_LINK_NETNSID        = 0xa\n\tNDA_SRC_VNI             = 0xb\n\tNTF_USE                 = 0x1\n\tNTF_SELF                = 0x2\n\tNTF_MASTER              = 0x4\n\tNTF_PROXY               = 0x8\n\tNTF_EXT_LEARNED         = 0x10\n\tNTF_OFFLOADED           = 0x20\n\tNTF_ROUTER              = 0x80\n\tNUD_INCOMPLETE          = 0x1\n\tNUD_REACHABLE           = 0x2\n\tNUD_STALE               = 0x4\n\tNUD_DELAY               = 0x8\n\tNUD_PROBE               = 0x10\n\tNUD_FAILED              = 0x20\n\tNUD_NOARP               = 0x40\n\tNUD_PERMANENT           = 0x80\n\tNUD_NONE                = 0x0\n\tIFA_UNSPEC              = 0x0\n\tIFA_ADDRESS             = 0x1\n\tIFA_LOCAL               = 0x2\n\tIFA_LABEL               = 0x3\n\tIFA_BROADCAST           = 0x4\n\tIFA_ANYCAST             = 0x5\n\tIFA_CACHEINFO           = 0x6\n\tIFA_MULTICAST           = 0x7\n\tIFA_FLAGS               = 0x8\n\tIFA_RT_PRIORITY         = 0x9\n\tIFA_TARGET_NETNSID      = 0xa\n\tIFLA_UNSPEC             = 0x0\n\tIFLA_ADDRESS            = 0x1\n\tIFLA_BROADCAST          = 0x2\n\tIFLA_IFNAME             = 0x3\n\tIFLA_MTU                = 0x4\n\tIFLA_LINK               = 0x5\n\tIFLA_QDISC              = 0x6\n\tIFLA_STATS              = 0x7\n\tIFLA_COST               = 0x8\n\tIFLA_PRIORITY           = 0x9\n\tIFLA_MASTER             = 0xa\n\tIFLA_WIRELESS           = 0xb\n\tIFLA_PROTINFO           = 0xc\n\tIFLA_TXQLEN             = 0xd\n\tIFLA_MAP                = 0xe\n\tIFLA_WEIGHT             = 0xf\n\tIFLA_OPERSTATE          = 0x10\n\tIFLA_LINKMODE           = 0x11\n\tIFLA_LINKINFO           = 0x12\n\tIFLA_NET_NS_PID         = 0x13\n\tIFLA_IFALIAS            = 0x14\n\tIFLA_NUM_VF             = 0x15\n\tIFLA_VFINFO_LIST        = 0x16\n\tIFLA_STATS64            = 0x17\n\tIFLA_VF_PORTS           = 0x18\n\tIFLA_PORT_SELF          = 0x19\n\tIFLA_AF_SPEC            = 0x1a\n\tIFLA_GROUP              = 0x1b\n\tIFLA_NET_NS_FD          = 0x1c\n\tIFLA_EXT_MASK           = 0x1d\n\tIFLA_PROMISCUITY        = 0x1e\n\tIFLA_NUM_TX_QUEUES      = 0x1f\n\tIFLA_NUM_RX_QUEUES      = 0x20\n\tIFLA_CARRIER            = 0x21\n\tIFLA_PHYS_PORT_ID       = 0x22\n\tIFLA_CARRIER_CHANGES    = 0x23\n\tIFLA_PHYS_SWITCH_ID     = 0x24\n\tIFLA_LINK_NETNSID       = 0x25\n\tIFLA_PHYS_PORT_NAME     = 0x26\n\tIFLA_PROTO_DOWN         = 0x27\n\tIFLA_GSO_MAX_SEGS       = 0x28\n\tIFLA_GSO_MAX_SIZE       = 0x29\n\tIFLA_PAD                = 0x2a\n\tIFLA_XDP                = 0x2b\n\tIFLA_EVENT              = 0x2c\n\tIFLA_NEW_NETNSID        = 0x2d\n\tIFLA_IF_NETNSID         = 0x2e\n\tIFLA_TARGET_NETNSID     = 0x2e\n\tIFLA_CARRIER_UP_COUNT   = 0x2f\n\tIFLA_CARRIER_DOWN_COUNT = 0x30\n\tIFLA_NEW_IFINDEX        = 0x31\n\tIFLA_MIN_MTU            = 0x32\n\tIFLA_MAX_MTU            = 0x33\n\tIFLA_MAX                = 0x33\n\tIFLA_INFO_KIND          = 0x1\n\tIFLA_INFO_DATA          = 0x2\n\tIFLA_INFO_XSTATS        = 0x3\n\tIFLA_INFO_SLAVE_KIND    = 0x4\n\tIFLA_INFO_SLAVE_DATA    = 0x5\n\tRT_SCOPE_UNIVERSE       = 0x0\n\tRT_SCOPE_SITE           = 0xc8\n\tRT_SCOPE_LINK           = 0xfd\n\tRT_SCOPE_HOST           = 0xfe\n\tRT_SCOPE_NOWHERE        = 0xff\n\tRT_TABLE_UNSPEC         = 0x0\n\tRT_TABLE_COMPAT         = 0xfc\n\tRT_TABLE_DEFAULT        = 0xfd\n\tRT_TABLE_MAIN           = 0xfe\n\tRT_TABLE_LOCAL          = 0xff\n\tRT_TABLE_MAX            = 0xffffffff\n\tRTA_UNSPEC              = 0x0\n\tRTA_DST                 = 0x1\n\tRTA_SRC                 = 0x2\n\tRTA_IIF                 = 0x3\n\tRTA_OIF                 = 0x4\n\tRTA_GATEWAY             = 0x5\n\tRTA_PRIORITY            = 0x6\n\tRTA_PREFSRC             = 0x7\n\tRTA_METRICS             = 0x8\n\tRTA_MULTIPATH           = 0x9\n\tRTA_FLOW                = 0xb\n\tRTA_CACHEINFO           = 0xc\n\tRTA_TABLE               = 0xf\n\tRTA_MARK                = 0x10\n\tRTA_MFC_STATS           = 0x11\n\tRTA_VIA                 = 0x12\n\tRTA_NEWDST              = 0x13\n\tRTA_PREF                = 0x14\n\tRTA_ENCAP_TYPE          = 0x15\n\tRTA_ENCAP               = 0x16\n\tRTA_EXPIRES             = 0x17\n\tRTA_PAD                 = 0x18\n\tRTA_UID                 = 0x19\n\tRTA_TTL_PROPAGATE       = 0x1a\n\tRTA_IP_PROTO            = 0x1b\n\tRTA_SPORT               = 0x1c\n\tRTA_DPORT               = 0x1d\n\tRTN_UNSPEC              = 0x0\n\tRTN_UNICAST             = 0x1\n\tRTN_LOCAL               = 0x2\n\tRTN_BROADCAST           = 0x3\n\tRTN_ANYCAST             = 0x4\n\tRTN_MULTICAST           = 0x5\n\tRTN_BLACKHOLE           = 0x6\n\tRTN_UNREACHABLE         = 0x7\n\tRTN_PROHIBIT            = 0x8\n\tRTN_THROW               = 0x9\n\tRTN_NAT                 = 0xa\n\tRTN_XRESOLVE            = 0xb\n\tRTNLGRP_NONE            = 0x0\n\tRTNLGRP_LINK            = 0x1\n\tRTNLGRP_NOTIFY          = 0x2\n\tRTNLGRP_NEIGH           = 0x3\n\tRTNLGRP_TC              = 0x4\n\tRTNLGRP_IPV4_IFADDR     = 0x5\n\tRTNLGRP_IPV4_MROUTE     = 0x6\n\tRTNLGRP_IPV4_ROUTE      = 0x7\n\tRTNLGRP_IPV4_RULE       = 0x8\n\tRTNLGRP_IPV6_IFADDR     = 0x9\n\tRTNLGRP_IPV6_MROUTE     = 0xa\n\tRTNLGRP_IPV6_ROUTE      = 0xb\n\tRTNLGRP_IPV6_IFINFO     = 0xc\n\tRTNLGRP_IPV6_PREFIX     = 0x12\n\tRTNLGRP_IPV6_RULE       = 0x13\n\tRTNLGRP_ND_USEROPT      = 0x14\n\tSizeofNlMsghdr          = 0x10\n\tSizeofNlMsgerr          = 0x14\n\tSizeofRtGenmsg          = 0x1\n\tSizeofNlAttr            = 0x4\n\tSizeofRtAttr            = 0x4\n\tSizeofIfInfomsg         = 0x10\n\tSizeofIfAddrmsg         = 0x8\n\tSizeofRtMsg             = 0xc\n\tSizeofRtNexthop         = 0x8\n\tSizeofNdUseroptmsg      = 0x10\n\tSizeofNdMsg             = 0xc\n)\n\ntype NlMsghdr struct {\n\tLen   uint32\n\tType  uint16\n\tFlags uint16\n\tSeq   uint32\n\tPid   uint32\n}\n\ntype NlMsgerr struct {\n\tError int32\n\tMsg   NlMsghdr\n}\n\ntype RtGenmsg struct {\n\tFamily uint8\n}\n\ntype NlAttr struct {\n\tLen  uint16\n\tType uint16\n}\n\ntype RtAttr struct {\n\tLen  uint16\n\tType uint16\n}\n\ntype IfInfomsg struct {\n\tFamily uint8\n\t_      uint8\n\tType   uint16\n\tIndex  int32\n\tFlags  uint32\n\tChange uint32\n}\n\ntype IfAddrmsg struct {\n\tFamily    uint8\n\tPrefixlen uint8\n\tFlags     uint8\n\tScope     uint8\n\tIndex     uint32\n}\n\ntype RtMsg struct {\n\tFamily   uint8\n\tDst_len  uint8\n\tSrc_len  uint8\n\tTos      uint8\n\tTable    uint8\n\tProtocol uint8\n\tScope    uint8\n\tType     uint8\n\tFlags    uint32\n}\n\ntype RtNexthop struct {\n\tLen     uint16\n\tFlags   uint8\n\tHops    uint8\n\tIfindex int32\n}\n\ntype NdUseroptmsg struct {\n\tFamily    uint8\n\tPad1      uint8\n\tOpts_len  uint16\n\tIfindex   int32\n\tIcmp_type uint8\n\tIcmp_code uint8\n\tPad2      uint16\n\tPad3      uint32\n}\n\ntype NdMsg struct {\n\tFamily  uint8\n\tPad1    uint8\n\tPad2    uint16\n\tIfindex int32\n\tState   uint16\n\tFlags   uint8\n\tType    uint8\n}\n\nconst (\n\tSizeofSockFilter = 0x8\n\tSizeofSockFprog  = 0x8\n)\n\ntype SockFilter struct {\n\tCode uint16\n\tJt   uint8\n\tJf   uint8\n\tK    uint32\n}\n\ntype SockFprog struct {\n\tLen    uint16\n\tFilter *SockFilter\n}\n\ntype InotifyEvent struct {\n\tWd     int32\n\tMask   uint32\n\tCookie uint32\n\tLen    uint32\n}\n\nconst SizeofInotifyEvent = 0x10\n\ntype PtraceRegs struct {\n\tRegs     [32]uint64\n\tLo       uint64\n\tHi       uint64\n\tEpc      uint64\n\tBadvaddr uint64\n\tStatus   uint64\n\tCause    uint64\n}\n\ntype FdSet struct {\n\tBits [32]int32\n}\n\ntype Sysinfo_t struct {\n\tUptime    int32\n\tLoads     [3]uint32\n\tTotalram  uint32\n\tFreeram   uint32\n\tSharedram uint32\n\tBufferram uint32\n\tTotalswap uint32\n\tFreeswap  uint32\n\tProcs     uint16\n\tPad       uint16\n\tTotalhigh uint32\n\tFreehigh  uint32\n\tUnit      uint32\n\t_         [8]int8\n}\n\ntype Utsname struct {\n\tSysname    [65]byte\n\tNodename   [65]byte\n\tRelease    [65]byte\n\tVersion    [65]byte\n\tMachine    [65]byte\n\tDomainname [65]byte\n}\n\ntype Ustat_t struct {\n\tTfree  int32\n\tTinode uint32\n\tFname  [6]int8\n\tFpack  [6]int8\n}\n\ntype EpollEvent struct {\n\tEvents uint32\n\tPadFd  int32\n\tFd     int32\n\tPad    int32\n}\n\nconst (\n\tAT_EMPTY_PATH   = 0x1000\n\tAT_FDCWD        = -0x64\n\tAT_NO_AUTOMOUNT = 0x800\n\tAT_REMOVEDIR    = 0x200\n\n\tAT_STATX_SYNC_AS_STAT = 0x0\n\tAT_STATX_FORCE_SYNC   = 0x2000\n\tAT_STATX_DONT_SYNC    = 0x4000\n\n\tAT_SYMLINK_FOLLOW   = 0x400\n\tAT_SYMLINK_NOFOLLOW = 0x100\n\n\tAT_EACCESS = 0x200\n)\n\ntype PollFd struct {\n\tFd      int32\n\tEvents  int16\n\tRevents int16\n}\n\nconst (\n\tPOLLIN    = 0x1\n\tPOLLPRI   = 0x2\n\tPOLLOUT   = 0x4\n\tPOLLRDHUP = 0x2000\n\tPOLLERR   = 0x8\n\tPOLLHUP   = 0x10\n\tPOLLNVAL  = 0x20\n)\n\ntype Sigset_t struct {\n\tVal [32]uint32\n}\n\nconst _C__NSIG = 0x80\n\ntype SignalfdSiginfo struct {\n\tSigno     uint32\n\tErrno     int32\n\tCode      int32\n\tPid       uint32\n\tUid       uint32\n\tFd        int32\n\tTid       uint32\n\tBand      uint32\n\tOverrun   uint32\n\tTrapno    uint32\n\tStatus    int32\n\tInt       int32\n\tPtr       uint64\n\tUtime     uint64\n\tStime     uint64\n\tAddr      uint64\n\tAddr_lsb  uint16\n\t_         uint16\n\tSyscall   int32\n\tCall_addr uint64\n\tArch      uint32\n\t_         [28]uint8\n}\n\nconst PERF_IOC_FLAG_GROUP = 0x1\n\ntype Termios struct {\n\tIflag  uint32\n\tOflag  uint32\n\tCflag  uint32\n\tLflag  uint32\n\tLine   uint8\n\tCc     [23]uint8\n\tIspeed uint32\n\tOspeed uint32\n}\n\ntype Winsize struct {\n\tRow    uint16\n\tCol    uint16\n\tXpixel uint16\n\tYpixel uint16\n}\n\ntype Taskstats struct {\n\tVersion                   uint16\n\tAc_exitcode               uint32\n\tAc_flag                   uint8\n\tAc_nice                   uint8\n\t_                         [4]byte\n\tCpu_count                 uint64\n\tCpu_delay_total           uint64\n\tBlkio_count               uint64\n\tBlkio_delay_total         uint64\n\tSwapin_count              uint64\n\tSwapin_delay_total        uint64\n\tCpu_run_real_total        uint64\n\tCpu_run_virtual_total     uint64\n\tAc_comm                   [32]int8\n\tAc_sched                  uint8\n\tAc_pad                    [3]uint8\n\t_                         [4]byte\n\tAc_uid                    uint32\n\tAc_gid                    uint32\n\tAc_pid                    uint32\n\tAc_ppid                   uint32\n\tAc_btime                  uint32\n\t_                         [4]byte\n\tAc_etime                  uint64\n\tAc_utime                  uint64\n\tAc_stime                  uint64\n\tAc_minflt                 uint64\n\tAc_majflt                 uint64\n\tCoremem                   uint64\n\tVirtmem                   uint64\n\tHiwater_rss               uint64\n\tHiwater_vm                uint64\n\tRead_char                 uint64\n\tWrite_char                uint64\n\tRead_syscalls             uint64\n\tWrite_syscalls            uint64\n\tRead_bytes                uint64\n\tWrite_bytes               uint64\n\tCancelled_write_bytes     uint64\n\tNvcsw                     uint64\n\tNivcsw                    uint64\n\tAc_utimescaled            uint64\n\tAc_stimescaled            uint64\n\tCpu_scaled_run_real_total uint64\n\tFreepages_count           uint64\n\tFreepages_delay_total     uint64\n\tThrashing_count           uint64\n\tThrashing_delay_total     uint64\n}\n\nconst (\n\tTASKSTATS_CMD_UNSPEC                  = 0x0\n\tTASKSTATS_CMD_GET                     = 0x1\n\tTASKSTATS_CMD_NEW                     = 0x2\n\tTASKSTATS_TYPE_UNSPEC                 = 0x0\n\tTASKSTATS_TYPE_PID                    = 0x1\n\tTASKSTATS_TYPE_TGID                   = 0x2\n\tTASKSTATS_TYPE_STATS                  = 0x3\n\tTASKSTATS_TYPE_AGGR_PID               = 0x4\n\tTASKSTATS_TYPE_AGGR_TGID              = 0x5\n\tTASKSTATS_TYPE_NULL                   = 0x6\n\tTASKSTATS_CMD_ATTR_UNSPEC             = 0x0\n\tTASKSTATS_CMD_ATTR_PID                = 0x1\n\tTASKSTATS_CMD_ATTR_TGID               = 0x2\n\tTASKSTATS_CMD_ATTR_REGISTER_CPUMASK   = 0x3\n\tTASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4\n)\n\ntype CGroupStats struct {\n\tSleeping        uint64\n\tRunning         uint64\n\tStopped         uint64\n\tUninterruptible uint64\n\tIo_wait         uint64\n}\n\nconst (\n\tCGROUPSTATS_CMD_UNSPEC        = 0x3\n\tCGROUPSTATS_CMD_GET           = 0x4\n\tCGROUPSTATS_CMD_NEW           = 0x5\n\tCGROUPSTATS_TYPE_UNSPEC       = 0x0\n\tCGROUPSTATS_TYPE_CGROUP_STATS = 0x1\n\tCGROUPSTATS_CMD_ATTR_UNSPEC   = 0x0\n\tCGROUPSTATS_CMD_ATTR_FD       = 0x1\n)\n\ntype Genlmsghdr struct {\n\tCmd      uint8\n\tVersion  uint8\n\tReserved uint16\n}\n\nconst (\n\tCTRL_CMD_UNSPEC            = 0x0\n\tCTRL_CMD_NEWFAMILY         = 0x1\n\tCTRL_CMD_DELFAMILY         = 0x2\n\tCTRL_CMD_GETFAMILY         = 0x3\n\tCTRL_CMD_NEWOPS            = 0x4\n\tCTRL_CMD_DELOPS            = 0x5\n\tCTRL_CMD_GETOPS            = 0x6\n\tCTRL_CMD_NEWMCAST_GRP      = 0x7\n\tCTRL_CMD_DELMCAST_GRP      = 0x8\n\tCTRL_CMD_GETMCAST_GRP      = 0x9\n\tCTRL_ATTR_UNSPEC           = 0x0\n\tCTRL_ATTR_FAMILY_ID        = 0x1\n\tCTRL_ATTR_FAMILY_NAME      = 0x2\n\tCTRL_ATTR_VERSION          = 0x3\n\tCTRL_ATTR_HDRSIZE          = 0x4\n\tCTRL_ATTR_MAXATTR          = 0x5\n\tCTRL_ATTR_OPS              = 0x6\n\tCTRL_ATTR_MCAST_GROUPS     = 0x7\n\tCTRL_ATTR_OP_UNSPEC        = 0x0\n\tCTRL_ATTR_OP_ID            = 0x1\n\tCTRL_ATTR_OP_FLAGS         = 0x2\n\tCTRL_ATTR_MCAST_GRP_UNSPEC = 0x0\n\tCTRL_ATTR_MCAST_GRP_NAME   = 0x1\n\tCTRL_ATTR_MCAST_GRP_ID     = 0x2\n)\n\ntype cpuMask uint32\n\nconst (\n\t_CPU_SETSIZE = 0x400\n\t_NCPUBITS    = 0x20\n)\n\nconst (\n\tBDADDR_BREDR     = 0x0\n\tBDADDR_LE_PUBLIC = 0x1\n\tBDADDR_LE_RANDOM = 0x2\n)\n\ntype PerfEventAttr struct {\n\tType               uint32\n\tSize               uint32\n\tConfig             uint64\n\tSample             uint64\n\tSample_type        uint64\n\tRead_format        uint64\n\tBits               uint64\n\tWakeup             uint32\n\tBp_type            uint32\n\tExt1               uint64\n\tExt2               uint64\n\tBranch_sample_type uint64\n\tSample_regs_user   uint64\n\tSample_stack_user  uint32\n\tClockid            int32\n\tSample_regs_intr   uint64\n\tAux_watermark      uint32\n\tSample_max_stack   uint16\n\t_                  uint16\n}\n\ntype PerfEventMmapPage struct {\n\tVersion        uint32\n\tCompat_version uint32\n\tLock           uint32\n\tIndex          uint32\n\tOffset         int64\n\tTime_enabled   uint64\n\tTime_running   uint64\n\tCapabilities   uint64\n\tPmc_width      uint16\n\tTime_shift     uint16\n\tTime_mult      uint32\n\tTime_offset    uint64\n\tTime_zero      uint64\n\tSize           uint32\n\t_              [948]uint8\n\tData_head      uint64\n\tData_tail      uint64\n\tData_offset    uint64\n\tData_size      uint64\n\tAux_head       uint64\n\tAux_tail       uint64\n\tAux_offset     uint64\n\tAux_size       uint64\n}\n\nconst (\n\tPerfBitDisabled               uint64 = CBitFieldMaskBit0\n\tPerfBitInherit                       = CBitFieldMaskBit1\n\tPerfBitPinned                        = CBitFieldMaskBit2\n\tPerfBitExclusive                     = CBitFieldMaskBit3\n\tPerfBitExcludeUser                   = CBitFieldMaskBit4\n\tPerfBitExcludeKernel                 = CBitFieldMaskBit5\n\tPerfBitExcludeHv                     = CBitFieldMaskBit6\n\tPerfBitExcludeIdle                   = CBitFieldMaskBit7\n\tPerfBitMmap                          = CBitFieldMaskBit8\n\tPerfBitComm                          = CBitFieldMaskBit9\n\tPerfBitFreq                          = CBitFieldMaskBit10\n\tPerfBitInheritStat                   = CBitFieldMaskBit11\n\tPerfBitEnableOnExec                  = CBitFieldMaskBit12\n\tPerfBitTask                          = CBitFieldMaskBit13\n\tPerfBitWatermark                     = CBitFieldMaskBit14\n\tPerfBitPreciseIPBit1                 = CBitFieldMaskBit15\n\tPerfBitPreciseIPBit2                 = CBitFieldMaskBit16\n\tPerfBitMmapData                      = CBitFieldMaskBit17\n\tPerfBitSampleIDAll                   = CBitFieldMaskBit18\n\tPerfBitExcludeHost                   = CBitFieldMaskBit19\n\tPerfBitExcludeGuest                  = CBitFieldMaskBit20\n\tPerfBitExcludeCallchainKernel        = CBitFieldMaskBit21\n\tPerfBitExcludeCallchainUser          = CBitFieldMaskBit22\n\tPerfBitMmap2                         = CBitFieldMaskBit23\n\tPerfBitCommExec                      = CBitFieldMaskBit24\n\tPerfBitUseClockID                    = CBitFieldMaskBit25\n\tPerfBitContextSwitch                 = CBitFieldMaskBit26\n)\n\nconst (\n\tPERF_TYPE_HARDWARE   = 0x0\n\tPERF_TYPE_SOFTWARE   = 0x1\n\tPERF_TYPE_TRACEPOINT = 0x2\n\tPERF_TYPE_HW_CACHE   = 0x3\n\tPERF_TYPE_RAW        = 0x4\n\tPERF_TYPE_BREAKPOINT = 0x5\n\n\tPERF_COUNT_HW_CPU_CYCLES              = 0x0\n\tPERF_COUNT_HW_INSTRUCTIONS            = 0x1\n\tPERF_COUNT_HW_CACHE_REFERENCES        = 0x2\n\tPERF_COUNT_HW_CACHE_MISSES            = 0x3\n\tPERF_COUNT_HW_BRANCH_INSTRUCTIONS     = 0x4\n\tPERF_COUNT_HW_BRANCH_MISSES           = 0x5\n\tPERF_COUNT_HW_BUS_CYCLES              = 0x6\n\tPERF_COUNT_HW_STALLED_CYCLES_FRONTEND = 0x7\n\tPERF_COUNT_HW_STALLED_CYCLES_BACKEND  = 0x8\n\tPERF_COUNT_HW_REF_CPU_CYCLES          = 0x9\n\n\tPERF_COUNT_HW_CACHE_L1D  = 0x0\n\tPERF_COUNT_HW_CACHE_L1I  = 0x1\n\tPERF_COUNT_HW_CACHE_LL   = 0x2\n\tPERF_COUNT_HW_CACHE_DTLB = 0x3\n\tPERF_COUNT_HW_CACHE_ITLB = 0x4\n\tPERF_COUNT_HW_CACHE_BPU  = 0x5\n\tPERF_COUNT_HW_CACHE_NODE = 0x6\n\n\tPERF_COUNT_HW_CACHE_OP_READ     = 0x0\n\tPERF_COUNT_HW_CACHE_OP_WRITE    = 0x1\n\tPERF_COUNT_HW_CACHE_OP_PREFETCH = 0x2\n\n\tPERF_COUNT_HW_CACHE_RESULT_ACCESS = 0x0\n\tPERF_COUNT_HW_CACHE_RESULT_MISS   = 0x1\n\n\tPERF_COUNT_SW_CPU_CLOCK        = 0x0\n\tPERF_COUNT_SW_TASK_CLOCK       = 0x1\n\tPERF_COUNT_SW_PAGE_FAULTS      = 0x2\n\tPERF_COUNT_SW_CONTEXT_SWITCHES = 0x3\n\tPERF_COUNT_SW_CPU_MIGRATIONS   = 0x4\n\tPERF_COUNT_SW_PAGE_FAULTS_MIN  = 0x5\n\tPERF_COUNT_SW_PAGE_FAULTS_MAJ  = 0x6\n\tPERF_COUNT_SW_ALIGNMENT_FAULTS = 0x7\n\tPERF_COUNT_SW_EMULATION_FAULTS = 0x8\n\tPERF_COUNT_SW_DUMMY            = 0x9\n\tPERF_COUNT_SW_BPF_OUTPUT       = 0xa\n\n\tPERF_SAMPLE_IP           = 0x1\n\tPERF_SAMPLE_TID          = 0x2\n\tPERF_SAMPLE_TIME         = 0x4\n\tPERF_SAMPLE_ADDR         = 0x8\n\tPERF_SAMPLE_READ         = 0x10\n\tPERF_SAMPLE_CALLCHAIN    = 0x20\n\tPERF_SAMPLE_ID           = 0x40\n\tPERF_SAMPLE_CPU          = 0x80\n\tPERF_SAMPLE_PERIOD       = 0x100\n\tPERF_SAMPLE_STREAM_ID    = 0x200\n\tPERF_SAMPLE_RAW          = 0x400\n\tPERF_SAMPLE_BRANCH_STACK = 0x800\n\n\tPERF_SAMPLE_BRANCH_USER       = 0x1\n\tPERF_SAMPLE_BRANCH_KERNEL     = 0x2\n\tPERF_SAMPLE_BRANCH_HV         = 0x4\n\tPERF_SAMPLE_BRANCH_ANY        = 0x8\n\tPERF_SAMPLE_BRANCH_ANY_CALL   = 0x10\n\tPERF_SAMPLE_BRANCH_ANY_RETURN = 0x20\n\tPERF_SAMPLE_BRANCH_IND_CALL   = 0x40\n\tPERF_SAMPLE_BRANCH_ABORT_TX   = 0x80\n\tPERF_SAMPLE_BRANCH_IN_TX      = 0x100\n\tPERF_SAMPLE_BRANCH_NO_TX      = 0x200\n\tPERF_SAMPLE_BRANCH_COND       = 0x400\n\tPERF_SAMPLE_BRANCH_CALL_STACK = 0x800\n\tPERF_SAMPLE_BRANCH_IND_JUMP   = 0x1000\n\tPERF_SAMPLE_BRANCH_CALL       = 0x2000\n\tPERF_SAMPLE_BRANCH_NO_FLAGS   = 0x4000\n\tPERF_SAMPLE_BRANCH_NO_CYCLES  = 0x8000\n\tPERF_SAMPLE_BRANCH_TYPE_SAVE  = 0x10000\n\n\tPERF_FORMAT_TOTAL_TIME_ENABLED = 0x1\n\tPERF_FORMAT_TOTAL_TIME_RUNNING = 0x2\n\tPERF_FORMAT_ID                 = 0x4\n\tPERF_FORMAT_GROUP              = 0x8\n\n\tPERF_RECORD_MMAP            = 0x1\n\tPERF_RECORD_LOST            = 0x2\n\tPERF_RECORD_COMM            = 0x3\n\tPERF_RECORD_EXIT            = 0x4\n\tPERF_RECORD_THROTTLE        = 0x5\n\tPERF_RECORD_UNTHROTTLE      = 0x6\n\tPERF_RECORD_FORK            = 0x7\n\tPERF_RECORD_READ            = 0x8\n\tPERF_RECORD_SAMPLE          = 0x9\n\tPERF_RECORD_MMAP2           = 0xa\n\tPERF_RECORD_AUX             = 0xb\n\tPERF_RECORD_ITRACE_START    = 0xc\n\tPERF_RECORD_LOST_SAMPLES    = 0xd\n\tPERF_RECORD_SWITCH          = 0xe\n\tPERF_RECORD_SWITCH_CPU_WIDE = 0xf\n\tPERF_RECORD_NAMESPACES      = 0x10\n\n\tPERF_CONTEXT_HV     = -0x20\n\tPERF_CONTEXT_KERNEL = -0x80\n\tPERF_CONTEXT_USER   = -0x200\n\n\tPERF_CONTEXT_GUEST        = -0x800\n\tPERF_CONTEXT_GUEST_KERNEL = -0x880\n\tPERF_CONTEXT_GUEST_USER   = -0xa00\n\n\tPERF_FLAG_FD_NO_GROUP = 0x1\n\tPERF_FLAG_FD_OUTPUT   = 0x2\n\tPERF_FLAG_PID_CGROUP  = 0x4\n\tPERF_FLAG_FD_CLOEXEC  = 0x8\n)\n\nconst (\n\tCBitFieldMaskBit0  = 0x8000000000000000\n\tCBitFieldMaskBit1  = 0x4000000000000000\n\tCBitFieldMaskBit2  = 0x2000000000000000\n\tCBitFieldMaskBit3  = 0x1000000000000000\n\tCBitFieldMaskBit4  = 0x800000000000000\n\tCBitFieldMaskBit5  = 0x400000000000000\n\tCBitFieldMaskBit6  = 0x200000000000000\n\tCBitFieldMaskBit7  = 0x100000000000000\n\tCBitFieldMaskBit8  = 0x80000000000000\n\tCBitFieldMaskBit9  = 0x40000000000000\n\tCBitFieldMaskBit10 = 0x20000000000000\n\tCBitFieldMaskBit11 = 0x10000000000000\n\tCBitFieldMaskBit12 = 0x8000000000000\n\tCBitFieldMaskBit13 = 0x4000000000000\n\tCBitFieldMaskBit14 = 0x2000000000000\n\tCBitFieldMaskBit15 = 0x1000000000000\n\tCBitFieldMaskBit16 = 0x800000000000\n\tCBitFieldMaskBit17 = 0x400000000000\n\tCBitFieldMaskBit18 = 0x200000000000\n\tCBitFieldMaskBit19 = 0x100000000000\n\tCBitFieldMaskBit20 = 0x80000000000\n\tCBitFieldMaskBit21 = 0x40000000000\n\tCBitFieldMaskBit22 = 0x20000000000\n\tCBitFieldMaskBit23 = 0x10000000000\n\tCBitFieldMaskBit24 = 0x8000000000\n\tCBitFieldMaskBit25 = 0x4000000000\n\tCBitFieldMaskBit26 = 0x2000000000\n\tCBitFieldMaskBit27 = 0x1000000000\n\tCBitFieldMaskBit28 = 0x800000000\n\tCBitFieldMaskBit29 = 0x400000000\n\tCBitFieldMaskBit30 = 0x200000000\n\tCBitFieldMaskBit31 = 0x100000000\n\tCBitFieldMaskBit32 = 0x80000000\n\tCBitFieldMaskBit33 = 0x40000000\n\tCBitFieldMaskBit34 = 0x20000000\n\tCBitFieldMaskBit35 = 0x10000000\n\tCBitFieldMaskBit36 = 0x8000000\n\tCBitFieldMaskBit37 = 0x4000000\n\tCBitFieldMaskBit38 = 0x2000000\n\tCBitFieldMaskBit39 = 0x1000000\n\tCBitFieldMaskBit40 = 0x800000\n\tCBitFieldMaskBit41 = 0x400000\n\tCBitFieldMaskBit42 = 0x200000\n\tCBitFieldMaskBit43 = 0x100000\n\tCBitFieldMaskBit44 = 0x80000\n\tCBitFieldMaskBit45 = 0x40000\n\tCBitFieldMaskBit46 = 0x20000\n\tCBitFieldMaskBit47 = 0x10000\n\tCBitFieldMaskBit48 = 0x8000\n\tCBitFieldMaskBit49 = 0x4000\n\tCBitFieldMaskBit50 = 0x2000\n\tCBitFieldMaskBit51 = 0x1000\n\tCBitFieldMaskBit52 = 0x800\n\tCBitFieldMaskBit53 = 0x400\n\tCBitFieldMaskBit54 = 0x200\n\tCBitFieldMaskBit55 = 0x100\n\tCBitFieldMaskBit56 = 0x80\n\tCBitFieldMaskBit57 = 0x40\n\tCBitFieldMaskBit58 = 0x20\n\tCBitFieldMaskBit59 = 0x10\n\tCBitFieldMaskBit60 = 0x8\n\tCBitFieldMaskBit61 = 0x4\n\tCBitFieldMaskBit62 = 0x2\n\tCBitFieldMaskBit63 = 0x1\n)\n\ntype SockaddrStorage struct {\n\tFamily uint16\n\t_      [122]int8\n\t_      uint32\n}\n\ntype TCPMD5Sig struct {\n\tAddr      SockaddrStorage\n\tFlags     uint8\n\tPrefixlen uint8\n\tKeylen    uint16\n\t_         uint32\n\tKey       [80]uint8\n}\n\ntype HDDriveCmdHdr struct {\n\tCommand uint8\n\tNumber  uint8\n\tFeature uint8\n\tCount   uint8\n}\n\ntype HDGeometry struct {\n\tHeads     uint8\n\tSectors   uint8\n\tCylinders uint16\n\tStart     uint32\n}\n\ntype HDDriveID struct {\n\tConfig         uint16\n\tCyls           uint16\n\tReserved2      uint16\n\tHeads          uint16\n\tTrack_bytes    uint16\n\tSector_bytes   uint16\n\tSectors        uint16\n\tVendor0        uint16\n\tVendor1        uint16\n\tVendor2        uint16\n\tSerial_no      [20]uint8\n\tBuf_type       uint16\n\tBuf_size       uint16\n\tEcc_bytes      uint16\n\tFw_rev         [8]uint8\n\tModel          [40]uint8\n\tMax_multsect   uint8\n\tVendor3        uint8\n\tDword_io       uint16\n\tVendor4        uint8\n\tCapability     uint8\n\tReserved50     uint16\n\tVendor5        uint8\n\tTPIO           uint8\n\tVendor6        uint8\n\tTDMA           uint8\n\tField_valid    uint16\n\tCur_cyls       uint16\n\tCur_heads      uint16\n\tCur_sectors    uint16\n\tCur_capacity0  uint16\n\tCur_capacity1  uint16\n\tMultsect       uint8\n\tMultsect_valid uint8\n\tLba_capacity   uint32\n\tDma_1word      uint16\n\tDma_mword      uint16\n\tEide_pio_modes uint16\n\tEide_dma_min   uint16\n\tEide_dma_time  uint16\n\tEide_pio       uint16\n\tEide_pio_iordy uint16\n\tWords69_70     [2]uint16\n\tWords71_74     [4]uint16\n\tQueue_depth    uint16\n\tWords76_79     [4]uint16\n\tMajor_rev_num  uint16\n\tMinor_rev_num  uint16\n\tCommand_set_1  uint16\n\tCommand_set_2  uint16\n\tCfsse          uint16\n\tCfs_enable_1   uint16\n\tCfs_enable_2   uint16\n\tCsf_default    uint16\n\tDma_ultra      uint16\n\tTrseuc         uint16\n\tTrsEuc         uint16\n\tCurAPMvalues   uint16\n\tMprc           uint16\n\tHw_config      uint16\n\tAcoustic       uint16\n\tMsrqs          uint16\n\tSxfert         uint16\n\tSal            uint16\n\tSpg            uint32\n\tLba_capacity_2 uint64\n\tWords104_125   [22]uint16\n\tLast_lun       uint16\n\tWord127        uint16\n\tDlf            uint16\n\tCsfo           uint16\n\tWords130_155   [26]uint16\n\tWord156        uint16\n\tWords157_159   [3]uint16\n\tCfa_power      uint16\n\tWords161_175   [15]uint16\n\tWords176_205   [30]uint16\n\tWords206_254   [49]uint16\n\tIntegrity_word uint16\n}\n\ntype Statfs_t struct {\n\tType    int32\n\tBsize   int32\n\tFrsize  int32\n\t_       [4]byte\n\tBlocks  uint64\n\tBfree   uint64\n\tFiles   uint64\n\tFfree   uint64\n\tBavail  uint64\n\tFsid    Fsid\n\tNamelen int32\n\tFlags   int32\n\tSpare   [5]int32\n\t_       [4]byte\n}\n\nconst (\n\tST_MANDLOCK    = 0x40\n\tST_NOATIME     = 0x400\n\tST_NODEV       = 0x4\n\tST_NODIRATIME  = 0x800\n\tST_NOEXEC      = 0x8\n\tST_NOSUID      = 0x2\n\tST_RDONLY      = 0x1\n\tST_RELATIME    = 0x1000\n\tST_SYNCHRONOUS = 0x10\n)\n\ntype TpacketHdr struct {\n\tStatus  uint32\n\tLen     uint32\n\tSnaplen uint32\n\tMac     uint16\n\tNet     uint16\n\tSec     uint32\n\tUsec    uint32\n}\n\ntype Tpacket2Hdr struct {\n\tStatus    uint32\n\tLen       uint32\n\tSnaplen   uint32\n\tMac       uint16\n\tNet       uint16\n\tSec       uint32\n\tNsec      uint32\n\tVlan_tci  uint16\n\tVlan_tpid uint16\n\t_         [4]uint8\n}\n\ntype Tpacket3Hdr struct {\n\tNext_offset uint32\n\tSec         uint32\n\tNsec        uint32\n\tSnaplen     uint32\n\tLen         uint32\n\tStatus      uint32\n\tMac         uint16\n\tNet         uint16\n\tHv1         TpacketHdrVariant1\n\t_           [8]uint8\n}\n\ntype TpacketHdrVariant1 struct {\n\tRxhash    uint32\n\tVlan_tci  uint32\n\tVlan_tpid uint16\n\t_         uint16\n}\n\ntype TpacketBlockDesc struct {\n\tVersion uint32\n\tTo_priv uint32\n\tHdr     [40]byte\n}\n\ntype TpacketBDTS struct {\n\tSec  uint32\n\tUsec uint32\n}\n\ntype TpacketHdrV1 struct {\n\tBlock_status        uint32\n\tNum_pkts            uint32\n\tOffset_to_first_pkt uint32\n\tBlk_len             uint32\n\tSeq_num             uint64\n\tTs_first_pkt        TpacketBDTS\n\tTs_last_pkt         TpacketBDTS\n}\n\ntype TpacketReq struct {\n\tBlock_size uint32\n\tBlock_nr   uint32\n\tFrame_size uint32\n\tFrame_nr   uint32\n}\n\ntype TpacketReq3 struct {\n\tBlock_size       uint32\n\tBlock_nr         uint32\n\tFrame_size       uint32\n\tFrame_nr         uint32\n\tRetire_blk_tov   uint32\n\tSizeof_priv      uint32\n\tFeature_req_word uint32\n}\n\ntype TpacketStats struct {\n\tPackets uint32\n\tDrops   uint32\n}\n\ntype TpacketStatsV3 struct {\n\tPackets      uint32\n\tDrops        uint32\n\tFreeze_q_cnt uint32\n}\n\ntype TpacketAuxdata struct {\n\tStatus    uint32\n\tLen       uint32\n\tSnaplen   uint32\n\tMac       uint16\n\tNet       uint16\n\tVlan_tci  uint16\n\tVlan_tpid uint16\n}\n\nconst (\n\tTPACKET_V1 = 0x0\n\tTPACKET_V2 = 0x1\n\tTPACKET_V3 = 0x2\n)\n\nconst (\n\tSizeofTpacketHdr  = 0x18\n\tSizeofTpacket2Hdr = 0x20\n\tSizeofTpacket3Hdr = 0x30\n\n\tSizeofTpacketStats   = 0x8\n\tSizeofTpacketStatsV3 = 0xc\n)\n\nconst (\n\tNF_INET_PRE_ROUTING  = 0x0\n\tNF_INET_LOCAL_IN     = 0x1\n\tNF_INET_FORWARD      = 0x2\n\tNF_INET_LOCAL_OUT    = 0x3\n\tNF_INET_POST_ROUTING = 0x4\n\tNF_INET_NUMHOOKS     = 0x5\n)\n\nconst (\n\tNF_NETDEV_INGRESS  = 0x0\n\tNF_NETDEV_NUMHOOKS = 0x1\n)\n\nconst (\n\tNFPROTO_UNSPEC   = 0x0\n\tNFPROTO_INET     = 0x1\n\tNFPROTO_IPV4     = 0x2\n\tNFPROTO_ARP      = 0x3\n\tNFPROTO_NETDEV   = 0x5\n\tNFPROTO_BRIDGE   = 0x7\n\tNFPROTO_IPV6     = 0xa\n\tNFPROTO_DECNET   = 0xc\n\tNFPROTO_NUMPROTO = 0xd\n)\n\ntype Nfgenmsg struct {\n\tNfgen_family uint8\n\tVersion      uint8\n\tRes_id       uint16\n}\n\nconst (\n\tNFNL_BATCH_UNSPEC = 0x0\n\tNFNL_BATCH_GENID  = 0x1\n)\n\nconst (\n\tNFT_REG_VERDICT                   = 0x0\n\tNFT_REG_1                         = 0x1\n\tNFT_REG_2                         = 0x2\n\tNFT_REG_3                         = 0x3\n\tNFT_REG_4                         = 0x4\n\tNFT_REG32_00                      = 0x8\n\tNFT_REG32_01                      = 0x9\n\tNFT_REG32_02                      = 0xa\n\tNFT_REG32_03                      = 0xb\n\tNFT_REG32_04                      = 0xc\n\tNFT_REG32_05                      = 0xd\n\tNFT_REG32_06                      = 0xe\n\tNFT_REG32_07                      = 0xf\n\tNFT_REG32_08                      = 0x10\n\tNFT_REG32_09                      = 0x11\n\tNFT_REG32_10                      = 0x12\n\tNFT_REG32_11                      = 0x13\n\tNFT_REG32_12                      = 0x14\n\tNFT_REG32_13                      = 0x15\n\tNFT_REG32_14                      = 0x16\n\tNFT_REG32_15                      = 0x17\n\tNFT_CONTINUE                      = -0x1\n\tNFT_BREAK                         = -0x2\n\tNFT_JUMP                          = -0x3\n\tNFT_GOTO                          = -0x4\n\tNFT_RETURN                        = -0x5\n\tNFT_MSG_NEWTABLE                  = 0x0\n\tNFT_MSG_GETTABLE                  = 0x1\n\tNFT_MSG_DELTABLE                  = 0x2\n\tNFT_MSG_NEWCHAIN                  = 0x3\n\tNFT_MSG_GETCHAIN                  = 0x4\n\tNFT_MSG_DELCHAIN                  = 0x5\n\tNFT_MSG_NEWRULE                   = 0x6\n\tNFT_MSG_GETRULE                   = 0x7\n\tNFT_MSG_DELRULE                   = 0x8\n\tNFT_MSG_NEWSET                    = 0x9\n\tNFT_MSG_GETSET                    = 0xa\n\tNFT_MSG_DELSET                    = 0xb\n\tNFT_MSG_NEWSETELEM                = 0xc\n\tNFT_MSG_GETSETELEM                = 0xd\n\tNFT_MSG_DELSETELEM                = 0xe\n\tNFT_MSG_NEWGEN                    = 0xf\n\tNFT_MSG_GETGEN                    = 0x10\n\tNFT_MSG_TRACE                     = 0x11\n\tNFT_MSG_NEWOBJ                    = 0x12\n\tNFT_MSG_GETOBJ                    = 0x13\n\tNFT_MSG_DELOBJ                    = 0x14\n\tNFT_MSG_GETOBJ_RESET              = 0x15\n\tNFT_MSG_MAX                       = 0x19\n\tNFTA_LIST_UNPEC                   = 0x0\n\tNFTA_LIST_ELEM                    = 0x1\n\tNFTA_HOOK_UNSPEC                  = 0x0\n\tNFTA_HOOK_HOOKNUM                 = 0x1\n\tNFTA_HOOK_PRIORITY                = 0x2\n\tNFTA_HOOK_DEV                     = 0x3\n\tNFT_TABLE_F_DORMANT               = 0x1\n\tNFTA_TABLE_UNSPEC                 = 0x0\n\tNFTA_TABLE_NAME                   = 0x1\n\tNFTA_TABLE_FLAGS                  = 0x2\n\tNFTA_TABLE_USE                    = 0x3\n\tNFTA_CHAIN_UNSPEC                 = 0x0\n\tNFTA_CHAIN_TABLE                  = 0x1\n\tNFTA_CHAIN_HANDLE                 = 0x2\n\tNFTA_CHAIN_NAME                   = 0x3\n\tNFTA_CHAIN_HOOK                   = 0x4\n\tNFTA_CHAIN_POLICY                 = 0x5\n\tNFTA_CHAIN_USE                    = 0x6\n\tNFTA_CHAIN_TYPE                   = 0x7\n\tNFTA_CHAIN_COUNTERS               = 0x8\n\tNFTA_CHAIN_PAD                    = 0x9\n\tNFTA_RULE_UNSPEC                  = 0x0\n\tNFTA_RULE_TABLE                   = 0x1\n\tNFTA_RULE_CHAIN                   = 0x2\n\tNFTA_RULE_HANDLE                  = 0x3\n\tNFTA_RULE_EXPRESSIONS             = 0x4\n\tNFTA_RULE_COMPAT                  = 0x5\n\tNFTA_RULE_POSITION                = 0x6\n\tNFTA_RULE_USERDATA                = 0x7\n\tNFTA_RULE_PAD                     = 0x8\n\tNFTA_RULE_ID                      = 0x9\n\tNFT_RULE_COMPAT_F_INV             = 0x2\n\tNFT_RULE_COMPAT_F_MASK            = 0x2\n\tNFTA_RULE_COMPAT_UNSPEC           = 0x0\n\tNFTA_RULE_COMPAT_PROTO            = 0x1\n\tNFTA_RULE_COMPAT_FLAGS            = 0x2\n\tNFT_SET_ANONYMOUS                 = 0x1\n\tNFT_SET_CONSTANT                  = 0x2\n\tNFT_SET_INTERVAL                  = 0x4\n\tNFT_SET_MAP                       = 0x8\n\tNFT_SET_TIMEOUT                   = 0x10\n\tNFT_SET_EVAL                      = 0x20\n\tNFT_SET_OBJECT                    = 0x40\n\tNFT_SET_POL_PERFORMANCE           = 0x0\n\tNFT_SET_POL_MEMORY                = 0x1\n\tNFTA_SET_DESC_UNSPEC              = 0x0\n\tNFTA_SET_DESC_SIZE                = 0x1\n\tNFTA_SET_UNSPEC                   = 0x0\n\tNFTA_SET_TABLE                    = 0x1\n\tNFTA_SET_NAME                     = 0x2\n\tNFTA_SET_FLAGS                    = 0x3\n\tNFTA_SET_KEY_TYPE                 = 0x4\n\tNFTA_SET_KEY_LEN                  = 0x5\n\tNFTA_SET_DATA_TYPE                = 0x6\n\tNFTA_SET_DATA_LEN                 = 0x7\n\tNFTA_SET_POLICY                   = 0x8\n\tNFTA_SET_DESC                     = 0x9\n\tNFTA_SET_ID                       = 0xa\n\tNFTA_SET_TIMEOUT                  = 0xb\n\tNFTA_SET_GC_INTERVAL              = 0xc\n\tNFTA_SET_USERDATA                 = 0xd\n\tNFTA_SET_PAD                      = 0xe\n\tNFTA_SET_OBJ_TYPE                 = 0xf\n\tNFT_SET_ELEM_INTERVAL_END         = 0x1\n\tNFTA_SET_ELEM_UNSPEC              = 0x0\n\tNFTA_SET_ELEM_KEY                 = 0x1\n\tNFTA_SET_ELEM_DATA                = 0x2\n\tNFTA_SET_ELEM_FLAGS               = 0x3\n\tNFTA_SET_ELEM_TIMEOUT             = 0x4\n\tNFTA_SET_ELEM_EXPIRATION          = 0x5\n\tNFTA_SET_ELEM_USERDATA            = 0x6\n\tNFTA_SET_ELEM_EXPR                = 0x7\n\tNFTA_SET_ELEM_PAD                 = 0x8\n\tNFTA_SET_ELEM_OBJREF              = 0x9\n\tNFTA_SET_ELEM_LIST_UNSPEC         = 0x0\n\tNFTA_SET_ELEM_LIST_TABLE          = 0x1\n\tNFTA_SET_ELEM_LIST_SET            = 0x2\n\tNFTA_SET_ELEM_LIST_ELEMENTS       = 0x3\n\tNFTA_SET_ELEM_LIST_SET_ID         = 0x4\n\tNFT_DATA_VALUE                    = 0x0\n\tNFT_DATA_VERDICT                  = 0xffffff00\n\tNFTA_DATA_UNSPEC                  = 0x0\n\tNFTA_DATA_VALUE                   = 0x1\n\tNFTA_DATA_VERDICT                 = 0x2\n\tNFTA_VERDICT_UNSPEC               = 0x0\n\tNFTA_VERDICT_CODE                 = 0x1\n\tNFTA_VERDICT_CHAIN                = 0x2\n\tNFTA_EXPR_UNSPEC                  = 0x0\n\tNFTA_EXPR_NAME                    = 0x1\n\tNFTA_EXPR_DATA                    = 0x2\n\tNFTA_IMMEDIATE_UNSPEC             = 0x0\n\tNFTA_IMMEDIATE_DREG               = 0x1\n\tNFTA_IMMEDIATE_DATA               = 0x2\n\tNFTA_BITWISE_UNSPEC               = 0x0\n\tNFTA_BITWISE_SREG                 = 0x1\n\tNFTA_BITWISE_DREG                 = 0x2\n\tNFTA_BITWISE_LEN                  = 0x3\n\tNFTA_BITWISE_MASK                 = 0x4\n\tNFTA_BITWISE_XOR                  = 0x5\n\tNFT_BYTEORDER_NTOH                = 0x0\n\tNFT_BYTEORDER_HTON                = 0x1\n\tNFTA_BYTEORDER_UNSPEC             = 0x0\n\tNFTA_BYTEORDER_SREG               = 0x1\n\tNFTA_BYTEORDER_DREG               = 0x2\n\tNFTA_BYTEORDER_OP                 = 0x3\n\tNFTA_BYTEORDER_LEN                = 0x4\n\tNFTA_BYTEORDER_SIZE               = 0x5\n\tNFT_CMP_EQ                        = 0x0\n\tNFT_CMP_NEQ                       = 0x1\n\tNFT_CMP_LT                        = 0x2\n\tNFT_CMP_LTE                       = 0x3\n\tNFT_CMP_GT                        = 0x4\n\tNFT_CMP_GTE                       = 0x5\n\tNFTA_CMP_UNSPEC                   = 0x0\n\tNFTA_CMP_SREG                     = 0x1\n\tNFTA_CMP_OP                       = 0x2\n\tNFTA_CMP_DATA                     = 0x3\n\tNFT_RANGE_EQ                      = 0x0\n\tNFT_RANGE_NEQ                     = 0x1\n\tNFTA_RANGE_UNSPEC                 = 0x0\n\tNFTA_RANGE_SREG                   = 0x1\n\tNFTA_RANGE_OP                     = 0x2\n\tNFTA_RANGE_FROM_DATA              = 0x3\n\tNFTA_RANGE_TO_DATA                = 0x4\n\tNFT_LOOKUP_F_INV                  = 0x1\n\tNFTA_LOOKUP_UNSPEC                = 0x0\n\tNFTA_LOOKUP_SET                   = 0x1\n\tNFTA_LOOKUP_SREG                  = 0x2\n\tNFTA_LOOKUP_DREG                  = 0x3\n\tNFTA_LOOKUP_SET_ID                = 0x4\n\tNFTA_LOOKUP_FLAGS                 = 0x5\n\tNFT_DYNSET_OP_ADD                 = 0x0\n\tNFT_DYNSET_OP_UPDATE              = 0x1\n\tNFT_DYNSET_F_INV                  = 0x1\n\tNFTA_DYNSET_UNSPEC                = 0x0\n\tNFTA_DYNSET_SET_NAME              = 0x1\n\tNFTA_DYNSET_SET_ID                = 0x2\n\tNFTA_DYNSET_OP                    = 0x3\n\tNFTA_DYNSET_SREG_KEY              = 0x4\n\tNFTA_DYNSET_SREG_DATA             = 0x5\n\tNFTA_DYNSET_TIMEOUT               = 0x6\n\tNFTA_DYNSET_EXPR                  = 0x7\n\tNFTA_DYNSET_PAD                   = 0x8\n\tNFTA_DYNSET_FLAGS                 = 0x9\n\tNFT_PAYLOAD_LL_HEADER             = 0x0\n\tNFT_PAYLOAD_NETWORK_HEADER        = 0x1\n\tNFT_PAYLOAD_TRANSPORT_HEADER      = 0x2\n\tNFT_PAYLOAD_CSUM_NONE             = 0x0\n\tNFT_PAYLOAD_CSUM_INET             = 0x1\n\tNFT_PAYLOAD_L4CSUM_PSEUDOHDR      = 0x1\n\tNFTA_PAYLOAD_UNSPEC               = 0x0\n\tNFTA_PAYLOAD_DREG                 = 0x1\n\tNFTA_PAYLOAD_BASE                 = 0x2\n\tNFTA_PAYLOAD_OFFSET               = 0x3\n\tNFTA_PAYLOAD_LEN                  = 0x4\n\tNFTA_PAYLOAD_SREG                 = 0x5\n\tNFTA_PAYLOAD_CSUM_TYPE            = 0x6\n\tNFTA_PAYLOAD_CSUM_OFFSET          = 0x7\n\tNFTA_PAYLOAD_CSUM_FLAGS           = 0x8\n\tNFT_EXTHDR_F_PRESENT              = 0x1\n\tNFT_EXTHDR_OP_IPV6                = 0x0\n\tNFT_EXTHDR_OP_TCPOPT              = 0x1\n\tNFTA_EXTHDR_UNSPEC                = 0x0\n\tNFTA_EXTHDR_DREG                  = 0x1\n\tNFTA_EXTHDR_TYPE                  = 0x2\n\tNFTA_EXTHDR_OFFSET                = 0x3\n\tNFTA_EXTHDR_LEN                   = 0x4\n\tNFTA_EXTHDR_FLAGS                 = 0x5\n\tNFTA_EXTHDR_OP                    = 0x6\n\tNFTA_EXTHDR_SREG                  = 0x7\n\tNFT_META_LEN                      = 0x0\n\tNFT_META_PROTOCOL                 = 0x1\n\tNFT_META_PRIORITY                 = 0x2\n\tNFT_META_MARK                     = 0x3\n\tNFT_META_IIF                      = 0x4\n\tNFT_META_OIF                      = 0x5\n\tNFT_META_IIFNAME                  = 0x6\n\tNFT_META_OIFNAME                  = 0x7\n\tNFT_META_IIFTYPE                  = 0x8\n\tNFT_META_OIFTYPE                  = 0x9\n\tNFT_META_SKUID                    = 0xa\n\tNFT_META_SKGID                    = 0xb\n\tNFT_META_NFTRACE                  = 0xc\n\tNFT_META_RTCLASSID                = 0xd\n\tNFT_META_SECMARK                  = 0xe\n\tNFT_META_NFPROTO                  = 0xf\n\tNFT_META_L4PROTO                  = 0x10\n\tNFT_META_BRI_IIFNAME              = 0x11\n\tNFT_META_BRI_OIFNAME              = 0x12\n\tNFT_META_PKTTYPE                  = 0x13\n\tNFT_META_CPU                      = 0x14\n\tNFT_META_IIFGROUP                 = 0x15\n\tNFT_META_OIFGROUP                 = 0x16\n\tNFT_META_CGROUP                   = 0x17\n\tNFT_META_PRANDOM                  = 0x18\n\tNFT_RT_CLASSID                    = 0x0\n\tNFT_RT_NEXTHOP4                   = 0x1\n\tNFT_RT_NEXTHOP6                   = 0x2\n\tNFT_RT_TCPMSS                     = 0x3\n\tNFT_HASH_JENKINS                  = 0x0\n\tNFT_HASH_SYM                      = 0x1\n\tNFTA_HASH_UNSPEC                  = 0x0\n\tNFTA_HASH_SREG                    = 0x1\n\tNFTA_HASH_DREG                    = 0x2\n\tNFTA_HASH_LEN                     = 0x3\n\tNFTA_HASH_MODULUS                 = 0x4\n\tNFTA_HASH_SEED                    = 0x5\n\tNFTA_HASH_OFFSET                  = 0x6\n\tNFTA_HASH_TYPE                    = 0x7\n\tNFTA_META_UNSPEC                  = 0x0\n\tNFTA_META_DREG                    = 0x1\n\tNFTA_META_KEY                     = 0x2\n\tNFTA_META_SREG                    = 0x3\n\tNFTA_RT_UNSPEC                    = 0x0\n\tNFTA_RT_DREG                      = 0x1\n\tNFTA_RT_KEY                       = 0x2\n\tNFT_CT_STATE                      = 0x0\n\tNFT_CT_DIRECTION                  = 0x1\n\tNFT_CT_STATUS                     = 0x2\n\tNFT_CT_MARK                       = 0x3\n\tNFT_CT_SECMARK                    = 0x4\n\tNFT_CT_EXPIRATION                 = 0x5\n\tNFT_CT_HELPER                     = 0x6\n\tNFT_CT_L3PROTOCOL                 = 0x7\n\tNFT_CT_SRC                        = 0x8\n\tNFT_CT_DST                        = 0x9\n\tNFT_CT_PROTOCOL                   = 0xa\n\tNFT_CT_PROTO_SRC                  = 0xb\n\tNFT_CT_PROTO_DST                  = 0xc\n\tNFT_CT_LABELS                     = 0xd\n\tNFT_CT_PKTS                       = 0xe\n\tNFT_CT_BYTES                      = 0xf\n\tNFT_CT_AVGPKT                     = 0x10\n\tNFT_CT_ZONE                       = 0x11\n\tNFT_CT_EVENTMASK                  = 0x12\n\tNFTA_CT_UNSPEC                    = 0x0\n\tNFTA_CT_DREG                      = 0x1\n\tNFTA_CT_KEY                       = 0x2\n\tNFTA_CT_DIRECTION                 = 0x3\n\tNFTA_CT_SREG                      = 0x4\n\tNFT_LIMIT_PKTS                    = 0x0\n\tNFT_LIMIT_PKT_BYTES               = 0x1\n\tNFT_LIMIT_F_INV                   = 0x1\n\tNFTA_LIMIT_UNSPEC                 = 0x0\n\tNFTA_LIMIT_RATE                   = 0x1\n\tNFTA_LIMIT_UNIT                   = 0x2\n\tNFTA_LIMIT_BURST                  = 0x3\n\tNFTA_LIMIT_TYPE                   = 0x4\n\tNFTA_LIMIT_FLAGS                  = 0x5\n\tNFTA_LIMIT_PAD                    = 0x6\n\tNFTA_COUNTER_UNSPEC               = 0x0\n\tNFTA_COUNTER_BYTES                = 0x1\n\tNFTA_COUNTER_PACKETS              = 0x2\n\tNFTA_COUNTER_PAD                  = 0x3\n\tNFTA_LOG_UNSPEC                   = 0x0\n\tNFTA_LOG_GROUP                    = 0x1\n\tNFTA_LOG_PREFIX                   = 0x2\n\tNFTA_LOG_SNAPLEN                  = 0x3\n\tNFTA_LOG_QTHRESHOLD               = 0x4\n\tNFTA_LOG_LEVEL                    = 0x5\n\tNFTA_LOG_FLAGS                    = 0x6\n\tNFTA_QUEUE_UNSPEC                 = 0x0\n\tNFTA_QUEUE_NUM                    = 0x1\n\tNFTA_QUEUE_TOTAL                  = 0x2\n\tNFTA_QUEUE_FLAGS                  = 0x3\n\tNFTA_QUEUE_SREG_QNUM              = 0x4\n\tNFT_QUOTA_F_INV                   = 0x1\n\tNFT_QUOTA_F_DEPLETED              = 0x2\n\tNFTA_QUOTA_UNSPEC                 = 0x0\n\tNFTA_QUOTA_BYTES                  = 0x1\n\tNFTA_QUOTA_FLAGS                  = 0x2\n\tNFTA_QUOTA_PAD                    = 0x3\n\tNFTA_QUOTA_CONSUMED               = 0x4\n\tNFT_REJECT_ICMP_UNREACH           = 0x0\n\tNFT_REJECT_TCP_RST                = 0x1\n\tNFT_REJECT_ICMPX_UNREACH          = 0x2\n\tNFT_REJECT_ICMPX_NO_ROUTE         = 0x0\n\tNFT_REJECT_ICMPX_PORT_UNREACH     = 0x1\n\tNFT_REJECT_ICMPX_HOST_UNREACH     = 0x2\n\tNFT_REJECT_ICMPX_ADMIN_PROHIBITED = 0x3\n\tNFTA_REJECT_UNSPEC                = 0x0\n\tNFTA_REJECT_TYPE                  = 0x1\n\tNFTA_REJECT_ICMP_CODE             = 0x2\n\tNFT_NAT_SNAT                      = 0x0\n\tNFT_NAT_DNAT                      = 0x1\n\tNFTA_NAT_UNSPEC                   = 0x0\n\tNFTA_NAT_TYPE                     = 0x1\n\tNFTA_NAT_FAMILY                   = 0x2\n\tNFTA_NAT_REG_ADDR_MIN             = 0x3\n\tNFTA_NAT_REG_ADDR_MAX             = 0x4\n\tNFTA_NAT_REG_PROTO_MIN            = 0x5\n\tNFTA_NAT_REG_PROTO_MAX            = 0x6\n\tNFTA_NAT_FLAGS                    = 0x7\n\tNFTA_MASQ_UNSPEC                  = 0x0\n\tNFTA_MASQ_FLAGS                   = 0x1\n\tNFTA_MASQ_REG_PROTO_MIN           = 0x2\n\tNFTA_MASQ_REG_PROTO_MAX           = 0x3\n\tNFTA_REDIR_UNSPEC                 = 0x0\n\tNFTA_REDIR_REG_PROTO_MIN          = 0x1\n\tNFTA_REDIR_REG_PROTO_MAX          = 0x2\n\tNFTA_REDIR_FLAGS                  = 0x3\n\tNFTA_DUP_UNSPEC                   = 0x0\n\tNFTA_DUP_SREG_ADDR                = 0x1\n\tNFTA_DUP_SREG_DEV                 = 0x2\n\tNFTA_FWD_UNSPEC                   = 0x0\n\tNFTA_FWD_SREG_DEV                 = 0x1\n\tNFTA_OBJREF_UNSPEC                = 0x0\n\tNFTA_OBJREF_IMM_TYPE              = 0x1\n\tNFTA_OBJREF_IMM_NAME              = 0x2\n\tNFTA_OBJREF_SET_SREG              = 0x3\n\tNFTA_OBJREF_SET_NAME              = 0x4\n\tNFTA_OBJREF_SET_ID                = 0x5\n\tNFTA_GEN_UNSPEC                   = 0x0\n\tNFTA_GEN_ID                       = 0x1\n\tNFTA_GEN_PROC_PID                 = 0x2\n\tNFTA_GEN_PROC_NAME                = 0x3\n\tNFTA_FIB_UNSPEC                   = 0x0\n\tNFTA_FIB_DREG                     = 0x1\n\tNFTA_FIB_RESULT                   = 0x2\n\tNFTA_FIB_FLAGS                    = 0x3\n\tNFT_FIB_RESULT_UNSPEC             = 0x0\n\tNFT_FIB_RESULT_OIF                = 0x1\n\tNFT_FIB_RESULT_OIFNAME            = 0x2\n\tNFT_FIB_RESULT_ADDRTYPE           = 0x3\n\tNFTA_FIB_F_SADDR                  = 0x1\n\tNFTA_FIB_F_DADDR                  = 0x2\n\tNFTA_FIB_F_MARK                   = 0x4\n\tNFTA_FIB_F_IIF                    = 0x8\n\tNFTA_FIB_F_OIF                    = 0x10\n\tNFTA_FIB_F_PRESENT                = 0x20\n\tNFTA_CT_HELPER_UNSPEC             = 0x0\n\tNFTA_CT_HELPER_NAME               = 0x1\n\tNFTA_CT_HELPER_L3PROTO            = 0x2\n\tNFTA_CT_HELPER_L4PROTO            = 0x3\n\tNFTA_OBJ_UNSPEC                   = 0x0\n\tNFTA_OBJ_TABLE                    = 0x1\n\tNFTA_OBJ_NAME                     = 0x2\n\tNFTA_OBJ_TYPE                     = 0x3\n\tNFTA_OBJ_DATA                     = 0x4\n\tNFTA_OBJ_USE                      = 0x5\n\tNFTA_TRACE_UNSPEC                 = 0x0\n\tNFTA_TRACE_TABLE                  = 0x1\n\tNFTA_TRACE_CHAIN                  = 0x2\n\tNFTA_TRACE_RULE_HANDLE            = 0x3\n\tNFTA_TRACE_TYPE                   = 0x4\n\tNFTA_TRACE_VERDICT                = 0x5\n\tNFTA_TRACE_ID                     = 0x6\n\tNFTA_TRACE_LL_HEADER              = 0x7\n\tNFTA_TRACE_NETWORK_HEADER         = 0x8\n\tNFTA_TRACE_TRANSPORT_HEADER       = 0x9\n\tNFTA_TRACE_IIF                    = 0xa\n\tNFTA_TRACE_IIFTYPE                = 0xb\n\tNFTA_TRACE_OIF                    = 0xc\n\tNFTA_TRACE_OIFTYPE                = 0xd\n\tNFTA_TRACE_MARK                   = 0xe\n\tNFTA_TRACE_NFPROTO                = 0xf\n\tNFTA_TRACE_POLICY                 = 0x10\n\tNFTA_TRACE_PAD                    = 0x11\n\tNFT_TRACETYPE_UNSPEC              = 0x0\n\tNFT_TRACETYPE_POLICY              = 0x1\n\tNFT_TRACETYPE_RETURN              = 0x2\n\tNFT_TRACETYPE_RULE                = 0x3\n\tNFTA_NG_UNSPEC                    = 0x0\n\tNFTA_NG_DREG                      = 0x1\n\tNFTA_NG_MODULUS                   = 0x2\n\tNFTA_NG_TYPE                      = 0x3\n\tNFTA_NG_OFFSET                    = 0x4\n\tNFT_NG_INCREMENTAL                = 0x0\n\tNFT_NG_RANDOM                     = 0x1\n)\n\ntype RTCTime struct {\n\tSec   int32\n\tMin   int32\n\tHour  int32\n\tMday  int32\n\tMon   int32\n\tYear  int32\n\tWday  int32\n\tYday  int32\n\tIsdst int32\n}\n\ntype RTCWkAlrm struct {\n\tEnabled uint8\n\tPending uint8\n\tTime    RTCTime\n}\n\ntype RTCPLLInfo struct {\n\tCtrl    int32\n\tValue   int32\n\tMax     int32\n\tMin     int32\n\tPosmult int32\n\tNegmult int32\n\tClock   int32\n}\n\ntype BlkpgIoctlArg struct {\n\tOp      int32\n\tFlags   int32\n\tDatalen int32\n\tData    *byte\n}\n\ntype BlkpgPartition struct {\n\tStart   int64\n\tLength  int64\n\tPno     int32\n\tDevname [64]uint8\n\tVolname [64]uint8\n\t_       [4]byte\n}\n\nconst (\n\tBLKPG                  = 0x20001269\n\tBLKPG_ADD_PARTITION    = 0x1\n\tBLKPG_DEL_PARTITION    = 0x2\n\tBLKPG_RESIZE_PARTITION = 0x3\n)\n\nconst (\n\tNETNSA_NONE = 0x0\n\tNETNSA_NSID = 0x1\n\tNETNSA_PID  = 0x2\n\tNETNSA_FD   = 0x3\n)\n\ntype XDPRingOffset struct {\n\tProducer uint64\n\tConsumer uint64\n\tDesc     uint64\n}\n\ntype XDPMmapOffsets struct {\n\tRx XDPRingOffset\n\tTx XDPRingOffset\n\tFr XDPRingOffset\n\tCr XDPRingOffset\n}\n\ntype XDPUmemReg struct {\n\tAddr     uint64\n\tLen      uint64\n\tSize     uint32\n\tHeadroom uint32\n}\n\ntype XDPStatistics struct {\n\tRx_dropped       uint64\n\tRx_invalid_descs uint64\n\tTx_invalid_descs uint64\n}\n\ntype XDPDesc struct {\n\tAddr    uint64\n\tLen     uint32\n\tOptions uint32\n}\n\nconst (\n\tNCSI_CMD_UNSPEC                 = 0x0\n\tNCSI_CMD_PKG_INFO               = 0x1\n\tNCSI_CMD_SET_INTERFACE          = 0x2\n\tNCSI_CMD_CLEAR_INTERFACE        = 0x3\n\tNCSI_ATTR_UNSPEC                = 0x0\n\tNCSI_ATTR_IFINDEX               = 0x1\n\tNCSI_ATTR_PACKAGE_LIST          = 0x2\n\tNCSI_ATTR_PACKAGE_ID            = 0x3\n\tNCSI_ATTR_CHANNEL_ID            = 0x4\n\tNCSI_PKG_ATTR_UNSPEC            = 0x0\n\tNCSI_PKG_ATTR                   = 0x1\n\tNCSI_PKG_ATTR_ID                = 0x2\n\tNCSI_PKG_ATTR_FORCED            = 0x3\n\tNCSI_PKG_ATTR_CHANNEL_LIST      = 0x4\n\tNCSI_CHANNEL_ATTR_UNSPEC        = 0x0\n\tNCSI_CHANNEL_ATTR               = 0x1\n\tNCSI_CHANNEL_ATTR_ID            = 0x2\n\tNCSI_CHANNEL_ATTR_VERSION_MAJOR = 0x3\n\tNCSI_CHANNEL_ATTR_VERSION_MINOR = 0x4\n\tNCSI_CHANNEL_ATTR_VERSION_STR   = 0x5\n\tNCSI_CHANNEL_ATTR_LINK_STATE    = 0x6\n\tNCSI_CHANNEL_ATTR_ACTIVE        = 0x7\n\tNCSI_CHANNEL_ATTR_FORCED        = 0x8\n\tNCSI_CHANNEL_ATTR_VLAN_LIST     = 0x9\n\tNCSI_CHANNEL_ATTR_VLAN_ID       = 0xa\n)\n\ntype ScmTimestamping struct {\n\tTs [3]Timespec\n}\n\nconst (\n\tSOF_TIMESTAMPING_TX_HARDWARE  = 0x1\n\tSOF_TIMESTAMPING_TX_SOFTWARE  = 0x2\n\tSOF_TIMESTAMPING_RX_HARDWARE  = 0x4\n\tSOF_TIMESTAMPING_RX_SOFTWARE  = 0x8\n\tSOF_TIMESTAMPING_SOFTWARE     = 0x10\n\tSOF_TIMESTAMPING_SYS_HARDWARE = 0x20\n\tSOF_TIMESTAMPING_RAW_HARDWARE = 0x40\n\tSOF_TIMESTAMPING_OPT_ID       = 0x80\n\tSOF_TIMESTAMPING_TX_SCHED     = 0x100\n\tSOF_TIMESTAMPING_TX_ACK       = 0x200\n\tSOF_TIMESTAMPING_OPT_CMSG     = 0x400\n\tSOF_TIMESTAMPING_OPT_TSONLY   = 0x800\n\tSOF_TIMESTAMPING_OPT_STATS    = 0x1000\n\tSOF_TIMESTAMPING_OPT_PKTINFO  = 0x2000\n\tSOF_TIMESTAMPING_OPT_TX_SWHW  = 0x4000\n\n\tSOF_TIMESTAMPING_LAST = 0x4000\n\tSOF_TIMESTAMPING_MASK = 0x7fff\n\n\tSCM_TSTAMP_SND   = 0x0\n\tSCM_TSTAMP_SCHED = 0x1\n\tSCM_TSTAMP_ACK   = 0x2\n)\n\ntype SockExtendedErr struct {\n\tErrno  uint32\n\tOrigin uint8\n\tType   uint8\n\tCode   uint8\n\tPad    uint8\n\tInfo   uint32\n\tData   uint32\n}\n\ntype FanotifyEventMetadata struct {\n\tEvent_len    uint32\n\tVers         uint8\n\tReserved     uint8\n\tMetadata_len uint16\n\tMask         uint64\n\tFd           int32\n\tPid          int32\n}\n\ntype FanotifyResponse struct {\n\tFd       int32\n\tResponse uint32\n}\n\nconst (\n\tCRYPTO_MSG_BASE      = 0x10\n\tCRYPTO_MSG_NEWALG    = 0x10\n\tCRYPTO_MSG_DELALG    = 0x11\n\tCRYPTO_MSG_UPDATEALG = 0x12\n\tCRYPTO_MSG_GETALG    = 0x13\n\tCRYPTO_MSG_DELRNG    = 0x14\n\tCRYPTO_MSG_GETSTAT   = 0x15\n)\n\nconst (\n\tCRYPTOCFGA_UNSPEC           = 0x0\n\tCRYPTOCFGA_PRIORITY_VAL     = 0x1\n\tCRYPTOCFGA_REPORT_LARVAL    = 0x2\n\tCRYPTOCFGA_REPORT_HASH      = 0x3\n\tCRYPTOCFGA_REPORT_BLKCIPHER = 0x4\n\tCRYPTOCFGA_REPORT_AEAD      = 0x5\n\tCRYPTOCFGA_REPORT_COMPRESS  = 0x6\n\tCRYPTOCFGA_REPORT_RNG       = 0x7\n\tCRYPTOCFGA_REPORT_CIPHER    = 0x8\n\tCRYPTOCFGA_REPORT_AKCIPHER  = 0x9\n\tCRYPTOCFGA_REPORT_KPP       = 0xa\n\tCRYPTOCFGA_REPORT_ACOMP     = 0xb\n\tCRYPTOCFGA_STAT_LARVAL      = 0xc\n\tCRYPTOCFGA_STAT_HASH        = 0xd\n\tCRYPTOCFGA_STAT_BLKCIPHER   = 0xe\n\tCRYPTOCFGA_STAT_AEAD        = 0xf\n\tCRYPTOCFGA_STAT_COMPRESS    = 0x10\n\tCRYPTOCFGA_STAT_RNG         = 0x11\n\tCRYPTOCFGA_STAT_CIPHER      = 0x12\n\tCRYPTOCFGA_STAT_AKCIPHER    = 0x13\n\tCRYPTOCFGA_STAT_KPP         = 0x14\n\tCRYPTOCFGA_STAT_ACOMP       = 0x15\n)\n\ntype CryptoUserAlg struct {\n\tName        [64]int8\n\tDriver_name [64]int8\n\tModule_name [64]int8\n\tType        uint32\n\tMask        uint32\n\tRefcnt      uint32\n\tFlags       uint32\n}\n\ntype CryptoStatAEAD struct {\n\tType         [64]int8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatAKCipher struct {\n\tType         [64]int8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tVerify_cnt   uint64\n\tSign_cnt     uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatCipher struct {\n\tType         [64]int8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatCompress struct {\n\tType            [64]int8\n\tCompress_cnt    uint64\n\tCompress_tlen   uint64\n\tDecompress_cnt  uint64\n\tDecompress_tlen uint64\n\tErr_cnt         uint64\n}\n\ntype CryptoStatHash struct {\n\tType      [64]int8\n\tHash_cnt  uint64\n\tHash_tlen uint64\n\tErr_cnt   uint64\n}\n\ntype CryptoStatKPP struct {\n\tType                      [64]int8\n\tSetsecret_cnt             uint64\n\tGenerate_public_key_cnt   uint64\n\tCompute_shared_secret_cnt uint64\n\tErr_cnt                   uint64\n}\n\ntype CryptoStatRNG struct {\n\tType          [64]int8\n\tGenerate_cnt  uint64\n\tGenerate_tlen uint64\n\tSeed_cnt      uint64\n\tErr_cnt       uint64\n}\n\ntype CryptoStatLarval struct {\n\tType [64]int8\n}\n\ntype CryptoReportLarval struct {\n\tType [64]int8\n}\n\ntype CryptoReportHash struct {\n\tType       [64]int8\n\tBlocksize  uint32\n\tDigestsize uint32\n}\n\ntype CryptoReportCipher struct {\n\tType        [64]int8\n\tBlocksize   uint32\n\tMin_keysize uint32\n\tMax_keysize uint32\n}\n\ntype CryptoReportBlkCipher struct {\n\tType        [64]int8\n\tGeniv       [64]int8\n\tBlocksize   uint32\n\tMin_keysize uint32\n\tMax_keysize uint32\n\tIvsize      uint32\n}\n\ntype CryptoReportAEAD struct {\n\tType        [64]int8\n\tGeniv       [64]int8\n\tBlocksize   uint32\n\tMaxauthsize uint32\n\tIvsize      uint32\n}\n\ntype CryptoReportComp struct {\n\tType [64]int8\n}\n\ntype CryptoReportRNG struct {\n\tType     [64]int8\n\tSeedsize uint32\n}\n\ntype CryptoReportAKCipher struct {\n\tType [64]int8\n}\n\ntype CryptoReportKPP struct {\n\tType [64]int8\n}\n\ntype CryptoReportAcomp struct {\n\tType [64]int8\n}\n\nconst (\n\tBPF_REG_0                           = 0x0\n\tBPF_REG_1                           = 0x1\n\tBPF_REG_2                           = 0x2\n\tBPF_REG_3                           = 0x3\n\tBPF_REG_4                           = 0x4\n\tBPF_REG_5                           = 0x5\n\tBPF_REG_6                           = 0x6\n\tBPF_REG_7                           = 0x7\n\tBPF_REG_8                           = 0x8\n\tBPF_REG_9                           = 0x9\n\tBPF_REG_10                          = 0xa\n\tBPF_MAP_CREATE                      = 0x0\n\tBPF_MAP_LOOKUP_ELEM                 = 0x1\n\tBPF_MAP_UPDATE_ELEM                 = 0x2\n\tBPF_MAP_DELETE_ELEM                 = 0x3\n\tBPF_MAP_GET_NEXT_KEY                = 0x4\n\tBPF_PROG_LOAD                       = 0x5\n\tBPF_OBJ_PIN                         = 0x6\n\tBPF_OBJ_GET                         = 0x7\n\tBPF_PROG_ATTACH                     = 0x8\n\tBPF_PROG_DETACH                     = 0x9\n\tBPF_PROG_TEST_RUN                   = 0xa\n\tBPF_PROG_GET_NEXT_ID                = 0xb\n\tBPF_MAP_GET_NEXT_ID                 = 0xc\n\tBPF_PROG_GET_FD_BY_ID               = 0xd\n\tBPF_MAP_GET_FD_BY_ID                = 0xe\n\tBPF_OBJ_GET_INFO_BY_FD              = 0xf\n\tBPF_PROG_QUERY                      = 0x10\n\tBPF_RAW_TRACEPOINT_OPEN             = 0x11\n\tBPF_BTF_LOAD                        = 0x12\n\tBPF_BTF_GET_FD_BY_ID                = 0x13\n\tBPF_TASK_FD_QUERY                   = 0x14\n\tBPF_MAP_LOOKUP_AND_DELETE_ELEM      = 0x15\n\tBPF_MAP_TYPE_UNSPEC                 = 0x0\n\tBPF_MAP_TYPE_HASH                   = 0x1\n\tBPF_MAP_TYPE_ARRAY                  = 0x2\n\tBPF_MAP_TYPE_PROG_ARRAY             = 0x3\n\tBPF_MAP_TYPE_PERF_EVENT_ARRAY       = 0x4\n\tBPF_MAP_TYPE_PERCPU_HASH            = 0x5\n\tBPF_MAP_TYPE_PERCPU_ARRAY           = 0x6\n\tBPF_MAP_TYPE_STACK_TRACE            = 0x7\n\tBPF_MAP_TYPE_CGROUP_ARRAY           = 0x8\n\tBPF_MAP_TYPE_LRU_HASH               = 0x9\n\tBPF_MAP_TYPE_LRU_PERCPU_HASH        = 0xa\n\tBPF_MAP_TYPE_LPM_TRIE               = 0xb\n\tBPF_MAP_TYPE_ARRAY_OF_MAPS          = 0xc\n\tBPF_MAP_TYPE_HASH_OF_MAPS           = 0xd\n\tBPF_MAP_TYPE_DEVMAP                 = 0xe\n\tBPF_MAP_TYPE_SOCKMAP                = 0xf\n\tBPF_MAP_TYPE_CPUMAP                 = 0x10\n\tBPF_MAP_TYPE_XSKMAP                 = 0x11\n\tBPF_MAP_TYPE_SOCKHASH               = 0x12\n\tBPF_MAP_TYPE_CGROUP_STORAGE         = 0x13\n\tBPF_MAP_TYPE_REUSEPORT_SOCKARRAY    = 0x14\n\tBPF_MAP_TYPE_PERCPU_CGROUP_STORAGE  = 0x15\n\tBPF_MAP_TYPE_QUEUE                  = 0x16\n\tBPF_MAP_TYPE_STACK                  = 0x17\n\tBPF_PROG_TYPE_UNSPEC                = 0x0\n\tBPF_PROG_TYPE_SOCKET_FILTER         = 0x1\n\tBPF_PROG_TYPE_KPROBE                = 0x2\n\tBPF_PROG_TYPE_SCHED_CLS             = 0x3\n\tBPF_PROG_TYPE_SCHED_ACT             = 0x4\n\tBPF_PROG_TYPE_TRACEPOINT            = 0x5\n\tBPF_PROG_TYPE_XDP                   = 0x6\n\tBPF_PROG_TYPE_PERF_EVENT            = 0x7\n\tBPF_PROG_TYPE_CGROUP_SKB            = 0x8\n\tBPF_PROG_TYPE_CGROUP_SOCK           = 0x9\n\tBPF_PROG_TYPE_LWT_IN                = 0xa\n\tBPF_PROG_TYPE_LWT_OUT               = 0xb\n\tBPF_PROG_TYPE_LWT_XMIT              = 0xc\n\tBPF_PROG_TYPE_SOCK_OPS              = 0xd\n\tBPF_PROG_TYPE_SK_SKB                = 0xe\n\tBPF_PROG_TYPE_CGROUP_DEVICE         = 0xf\n\tBPF_PROG_TYPE_SK_MSG                = 0x10\n\tBPF_PROG_TYPE_RAW_TRACEPOINT        = 0x11\n\tBPF_PROG_TYPE_CGROUP_SOCK_ADDR      = 0x12\n\tBPF_PROG_TYPE_LWT_SEG6LOCAL         = 0x13\n\tBPF_PROG_TYPE_LIRC_MODE2            = 0x14\n\tBPF_PROG_TYPE_SK_REUSEPORT          = 0x15\n\tBPF_PROG_TYPE_FLOW_DISSECTOR        = 0x16\n\tBPF_CGROUP_INET_INGRESS             = 0x0\n\tBPF_CGROUP_INET_EGRESS              = 0x1\n\tBPF_CGROUP_INET_SOCK_CREATE         = 0x2\n\tBPF_CGROUP_SOCK_OPS                 = 0x3\n\tBPF_SK_SKB_STREAM_PARSER            = 0x4\n\tBPF_SK_SKB_STREAM_VERDICT           = 0x5\n\tBPF_CGROUP_DEVICE                   = 0x6\n\tBPF_SK_MSG_VERDICT                  = 0x7\n\tBPF_CGROUP_INET4_BIND               = 0x8\n\tBPF_CGROUP_INET6_BIND               = 0x9\n\tBPF_CGROUP_INET4_CONNECT            = 0xa\n\tBPF_CGROUP_INET6_CONNECT            = 0xb\n\tBPF_CGROUP_INET4_POST_BIND          = 0xc\n\tBPF_CGROUP_INET6_POST_BIND          = 0xd\n\tBPF_CGROUP_UDP4_SENDMSG             = 0xe\n\tBPF_CGROUP_UDP6_SENDMSG             = 0xf\n\tBPF_LIRC_MODE2                      = 0x10\n\tBPF_FLOW_DISSECTOR                  = 0x11\n\tBPF_STACK_BUILD_ID_EMPTY            = 0x0\n\tBPF_STACK_BUILD_ID_VALID            = 0x1\n\tBPF_STACK_BUILD_ID_IP               = 0x2\n\tBPF_ADJ_ROOM_NET                    = 0x0\n\tBPF_HDR_START_MAC                   = 0x0\n\tBPF_HDR_START_NET                   = 0x1\n\tBPF_LWT_ENCAP_SEG6                  = 0x0\n\tBPF_LWT_ENCAP_SEG6_INLINE           = 0x1\n\tBPF_OK                              = 0x0\n\tBPF_DROP                            = 0x2\n\tBPF_REDIRECT                        = 0x7\n\tBPF_SOCK_OPS_VOID                   = 0x0\n\tBPF_SOCK_OPS_TIMEOUT_INIT           = 0x1\n\tBPF_SOCK_OPS_RWND_INIT              = 0x2\n\tBPF_SOCK_OPS_TCP_CONNECT_CB         = 0x3\n\tBPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB  = 0x4\n\tBPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB = 0x5\n\tBPF_SOCK_OPS_NEEDS_ECN              = 0x6\n\tBPF_SOCK_OPS_BASE_RTT               = 0x7\n\tBPF_SOCK_OPS_RTO_CB                 = 0x8\n\tBPF_SOCK_OPS_RETRANS_CB             = 0x9\n\tBPF_SOCK_OPS_STATE_CB               = 0xa\n\tBPF_SOCK_OPS_TCP_LISTEN_CB          = 0xb\n\tBPF_TCP_ESTABLISHED                 = 0x1\n\tBPF_TCP_SYN_SENT                    = 0x2\n\tBPF_TCP_SYN_RECV                    = 0x3\n\tBPF_TCP_FIN_WAIT1                   = 0x4\n\tBPF_TCP_FIN_WAIT2                   = 0x5\n\tBPF_TCP_TIME_WAIT                   = 0x6\n\tBPF_TCP_CLOSE                       = 0x7\n\tBPF_TCP_CLOSE_WAIT                  = 0x8\n\tBPF_TCP_LAST_ACK                    = 0x9\n\tBPF_TCP_LISTEN                      = 0xa\n\tBPF_TCP_CLOSING                     = 0xb\n\tBPF_TCP_NEW_SYN_RECV                = 0xc\n\tBPF_TCP_MAX_STATES                  = 0xd\n\tBPF_FIB_LKUP_RET_SUCCESS            = 0x0\n\tBPF_FIB_LKUP_RET_BLACKHOLE          = 0x1\n\tBPF_FIB_LKUP_RET_UNREACHABLE        = 0x2\n\tBPF_FIB_LKUP_RET_PROHIBIT           = 0x3\n\tBPF_FIB_LKUP_RET_NOT_FWDED          = 0x4\n\tBPF_FIB_LKUP_RET_FWD_DISABLED       = 0x5\n\tBPF_FIB_LKUP_RET_UNSUPP_LWT         = 0x6\n\tBPF_FIB_LKUP_RET_NO_NEIGH           = 0x7\n\tBPF_FIB_LKUP_RET_FRAG_NEEDED        = 0x8\n\tBPF_FD_TYPE_RAW_TRACEPOINT          = 0x0\n\tBPF_FD_TYPE_TRACEPOINT              = 0x1\n\tBPF_FD_TYPE_KPROBE                  = 0x2\n\tBPF_FD_TYPE_KRETPROBE               = 0x3\n\tBPF_FD_TYPE_UPROBE                  = 0x4\n\tBPF_FD_TYPE_URETPROBE               = 0x5\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go",
    "content": "// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build mips64,linux\n\npackage unix\n\nconst (\n\tSizeofPtr      = 0x8\n\tSizeofShort    = 0x2\n\tSizeofInt      = 0x4\n\tSizeofLong     = 0x8\n\tSizeofLongLong = 0x8\n\tPathMax        = 0x1000\n)\n\ntype (\n\t_C_short     int16\n\t_C_int       int32\n\t_C_long      int64\n\t_C_long_long int64\n)\n\ntype Timespec struct {\n\tSec  int64\n\tNsec int64\n}\n\ntype Timeval struct {\n\tSec  int64\n\tUsec int64\n}\n\ntype Timex struct {\n\tModes     uint32\n\tOffset    int64\n\tFreq      int64\n\tMaxerror  int64\n\tEsterror  int64\n\tStatus    int32\n\tConstant  int64\n\tPrecision int64\n\tTolerance int64\n\tTime      Timeval\n\tTick      int64\n\tPpsfreq   int64\n\tJitter    int64\n\tShift     int32\n\tStabil    int64\n\tJitcnt    int64\n\tCalcnt    int64\n\tErrcnt    int64\n\tStbcnt    int64\n\tTai       int32\n\t_         [44]byte\n}\n\ntype Time_t int64\n\ntype Tms struct {\n\tUtime  int64\n\tStime  int64\n\tCutime int64\n\tCstime int64\n}\n\ntype Utimbuf struct {\n\tActime  int64\n\tModtime int64\n}\n\ntype Rusage struct {\n\tUtime    Timeval\n\tStime    Timeval\n\tMaxrss   int64\n\tIxrss    int64\n\tIdrss    int64\n\tIsrss    int64\n\tMinflt   int64\n\tMajflt   int64\n\tNswap    int64\n\tInblock  int64\n\tOublock  int64\n\tMsgsnd   int64\n\tMsgrcv   int64\n\tNsignals int64\n\tNvcsw    int64\n\tNivcsw   int64\n}\n\ntype Rlimit struct {\n\tCur uint64\n\tMax uint64\n}\n\ntype _Gid_t uint32\n\ntype Stat_t struct {\n\tDev     uint32\n\tPad1    [3]uint32\n\tIno     uint64\n\tMode    uint32\n\tNlink   uint32\n\tUid     uint32\n\tGid     uint32\n\tRdev    uint32\n\tPad2    [3]uint32\n\tSize    int64\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\tBlksize uint32\n\tPad4    uint32\n\tBlocks  int64\n}\n\ntype StatxTimestamp struct {\n\tSec  int64\n\tNsec uint32\n\t_    int32\n}\n\ntype Statx_t struct {\n\tMask            uint32\n\tBlksize         uint32\n\tAttributes      uint64\n\tNlink           uint32\n\tUid             uint32\n\tGid             uint32\n\tMode            uint16\n\t_               [1]uint16\n\tIno             uint64\n\tSize            uint64\n\tBlocks          uint64\n\tAttributes_mask uint64\n\tAtime           StatxTimestamp\n\tBtime           StatxTimestamp\n\tCtime           StatxTimestamp\n\tMtime           StatxTimestamp\n\tRdev_major      uint32\n\tRdev_minor      uint32\n\tDev_major       uint32\n\tDev_minor       uint32\n\t_               [14]uint64\n}\n\ntype Dirent struct {\n\tIno    uint64\n\tOff    int64\n\tReclen uint16\n\tType   uint8\n\tName   [256]int8\n\t_      [5]byte\n}\n\ntype Fsid struct {\n\tVal [2]int32\n}\n\ntype Flock_t struct {\n\tType   int16\n\tWhence int16\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\t_      [4]byte\n}\n\ntype FscryptPolicy struct {\n\tVersion                   uint8\n\tContents_encryption_mode  uint8\n\tFilenames_encryption_mode uint8\n\tFlags                     uint8\n\tMaster_key_descriptor     [8]uint8\n}\n\ntype FscryptKey struct {\n\tMode uint32\n\tRaw  [64]uint8\n\tSize uint32\n}\n\ntype KeyctlDHParams struct {\n\tPrivate int32\n\tPrime   int32\n\tBase    int32\n}\n\nconst (\n\tFADV_NORMAL     = 0x0\n\tFADV_RANDOM     = 0x1\n\tFADV_SEQUENTIAL = 0x2\n\tFADV_WILLNEED   = 0x3\n\tFADV_DONTNEED   = 0x4\n\tFADV_NOREUSE    = 0x5\n)\n\ntype RawSockaddrInet4 struct {\n\tFamily uint16\n\tPort   uint16\n\tAddr   [4]byte /* in_addr */\n\tZero   [8]uint8\n}\n\ntype RawSockaddrInet6 struct {\n\tFamily   uint16\n\tPort     uint16\n\tFlowinfo uint32\n\tAddr     [16]byte /* in6_addr */\n\tScope_id uint32\n}\n\ntype RawSockaddrUnix struct {\n\tFamily uint16\n\tPath   [108]int8\n}\n\ntype RawSockaddrLinklayer struct {\n\tFamily   uint16\n\tProtocol uint16\n\tIfindex  int32\n\tHatype   uint16\n\tPkttype  uint8\n\tHalen    uint8\n\tAddr     [8]uint8\n}\n\ntype RawSockaddrNetlink struct {\n\tFamily uint16\n\tPad    uint16\n\tPid    uint32\n\tGroups uint32\n}\n\ntype RawSockaddrHCI struct {\n\tFamily  uint16\n\tDev     uint16\n\tChannel uint16\n}\n\ntype RawSockaddrL2 struct {\n\tFamily      uint16\n\tPsm         uint16\n\tBdaddr      [6]uint8\n\tCid         uint16\n\tBdaddr_type uint8\n\t_           [1]byte\n}\n\ntype RawSockaddrRFCOMM struct {\n\tFamily  uint16\n\tBdaddr  [6]uint8\n\tChannel uint8\n\t_       [1]byte\n}\n\ntype RawSockaddrCAN struct {\n\tFamily  uint16\n\tIfindex int32\n\tAddr    [8]byte\n}\n\ntype RawSockaddrALG struct {\n\tFamily uint16\n\tType   [14]uint8\n\tFeat   uint32\n\tMask   uint32\n\tName   [64]uint8\n}\n\ntype RawSockaddrVM struct {\n\tFamily    uint16\n\tReserved1 uint16\n\tPort      uint32\n\tCid       uint32\n\tZero      [4]uint8\n}\n\ntype RawSockaddrXDP struct {\n\tFamily         uint16\n\tFlags          uint16\n\tIfindex        uint32\n\tQueue_id       uint32\n\tShared_umem_fd uint32\n}\n\ntype RawSockaddrPPPoX [0x1e]byte\n\ntype RawSockaddr struct {\n\tFamily uint16\n\tData   [14]int8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [96]int8\n}\n\ntype _Socklen uint32\n\ntype Linger struct {\n\tOnoff  int32\n\tLinger int32\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint64\n}\n\ntype IPMreq struct {\n\tMultiaddr [4]byte /* in_addr */\n\tInterface [4]byte /* in_addr */\n}\n\ntype IPMreqn struct {\n\tMultiaddr [4]byte /* in_addr */\n\tAddress   [4]byte /* in_addr */\n\tIfindex   int32\n}\n\ntype IPv6Mreq struct {\n\tMultiaddr [16]byte /* in6_addr */\n\tInterface uint32\n}\n\ntype PacketMreq struct {\n\tIfindex int32\n\tType    uint16\n\tAlen    uint16\n\tAddress [8]uint8\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tIov        *Iovec\n\tIovlen     uint64\n\tControl    *byte\n\tControllen uint64\n\tFlags      int32\n\t_          [4]byte\n}\n\ntype Cmsghdr struct {\n\tLen   uint64\n\tLevel int32\n\tType  int32\n}\n\ntype Inet4Pktinfo struct {\n\tIfindex  int32\n\tSpec_dst [4]byte /* in_addr */\n\tAddr     [4]byte /* in_addr */\n}\n\ntype Inet6Pktinfo struct {\n\tAddr    [16]byte /* in6_addr */\n\tIfindex uint32\n}\n\ntype IPv6MTUInfo struct {\n\tAddr RawSockaddrInet6\n\tMtu  uint32\n}\n\ntype ICMPv6Filter struct {\n\tData [8]uint32\n}\n\ntype Ucred struct {\n\tPid int32\n\tUid uint32\n\tGid uint32\n}\n\ntype TCPInfo struct {\n\tState          uint8\n\tCa_state       uint8\n\tRetransmits    uint8\n\tProbes         uint8\n\tBackoff        uint8\n\tOptions        uint8\n\tRto            uint32\n\tAto            uint32\n\tSnd_mss        uint32\n\tRcv_mss        uint32\n\tUnacked        uint32\n\tSacked         uint32\n\tLost           uint32\n\tRetrans        uint32\n\tFackets        uint32\n\tLast_data_sent uint32\n\tLast_ack_sent  uint32\n\tLast_data_recv uint32\n\tLast_ack_recv  uint32\n\tPmtu           uint32\n\tRcv_ssthresh   uint32\n\tRtt            uint32\n\tRttvar         uint32\n\tSnd_ssthresh   uint32\n\tSnd_cwnd       uint32\n\tAdvmss         uint32\n\tReordering     uint32\n\tRcv_rtt        uint32\n\tRcv_space      uint32\n\tTotal_retrans  uint32\n}\n\ntype CanFilter struct {\n\tId   uint32\n\tMask uint32\n}\n\nconst (\n\tSizeofSockaddrInet4     = 0x10\n\tSizeofSockaddrInet6     = 0x1c\n\tSizeofSockaddrAny       = 0x70\n\tSizeofSockaddrUnix      = 0x6e\n\tSizeofSockaddrLinklayer = 0x14\n\tSizeofSockaddrNetlink   = 0xc\n\tSizeofSockaddrHCI       = 0x6\n\tSizeofSockaddrL2        = 0xe\n\tSizeofSockaddrRFCOMM    = 0xa\n\tSizeofSockaddrCAN       = 0x10\n\tSizeofSockaddrALG       = 0x58\n\tSizeofSockaddrVM        = 0x10\n\tSizeofSockaddrXDP       = 0x10\n\tSizeofSockaddrPPPoX     = 0x1e\n\tSizeofLinger            = 0x8\n\tSizeofIovec             = 0x10\n\tSizeofIPMreq            = 0x8\n\tSizeofIPMreqn           = 0xc\n\tSizeofIPv6Mreq          = 0x14\n\tSizeofPacketMreq        = 0x10\n\tSizeofMsghdr            = 0x38\n\tSizeofCmsghdr           = 0x10\n\tSizeofInet4Pktinfo      = 0xc\n\tSizeofInet6Pktinfo      = 0x14\n\tSizeofIPv6MTUInfo       = 0x20\n\tSizeofICMPv6Filter      = 0x20\n\tSizeofUcred             = 0xc\n\tSizeofTCPInfo           = 0x68\n\tSizeofCanFilter         = 0x8\n)\n\nconst (\n\tNDA_UNSPEC              = 0x0\n\tNDA_DST                 = 0x1\n\tNDA_LLADDR              = 0x2\n\tNDA_CACHEINFO           = 0x3\n\tNDA_PROBES              = 0x4\n\tNDA_VLAN                = 0x5\n\tNDA_PORT                = 0x6\n\tNDA_VNI                 = 0x7\n\tNDA_IFINDEX             = 0x8\n\tNDA_MASTER              = 0x9\n\tNDA_LINK_NETNSID        = 0xa\n\tNDA_SRC_VNI             = 0xb\n\tNTF_USE                 = 0x1\n\tNTF_SELF                = 0x2\n\tNTF_MASTER              = 0x4\n\tNTF_PROXY               = 0x8\n\tNTF_EXT_LEARNED         = 0x10\n\tNTF_OFFLOADED           = 0x20\n\tNTF_ROUTER              = 0x80\n\tNUD_INCOMPLETE          = 0x1\n\tNUD_REACHABLE           = 0x2\n\tNUD_STALE               = 0x4\n\tNUD_DELAY               = 0x8\n\tNUD_PROBE               = 0x10\n\tNUD_FAILED              = 0x20\n\tNUD_NOARP               = 0x40\n\tNUD_PERMANENT           = 0x80\n\tNUD_NONE                = 0x0\n\tIFA_UNSPEC              = 0x0\n\tIFA_ADDRESS             = 0x1\n\tIFA_LOCAL               = 0x2\n\tIFA_LABEL               = 0x3\n\tIFA_BROADCAST           = 0x4\n\tIFA_ANYCAST             = 0x5\n\tIFA_CACHEINFO           = 0x6\n\tIFA_MULTICAST           = 0x7\n\tIFA_FLAGS               = 0x8\n\tIFA_RT_PRIORITY         = 0x9\n\tIFA_TARGET_NETNSID      = 0xa\n\tIFLA_UNSPEC             = 0x0\n\tIFLA_ADDRESS            = 0x1\n\tIFLA_BROADCAST          = 0x2\n\tIFLA_IFNAME             = 0x3\n\tIFLA_MTU                = 0x4\n\tIFLA_LINK               = 0x5\n\tIFLA_QDISC              = 0x6\n\tIFLA_STATS              = 0x7\n\tIFLA_COST               = 0x8\n\tIFLA_PRIORITY           = 0x9\n\tIFLA_MASTER             = 0xa\n\tIFLA_WIRELESS           = 0xb\n\tIFLA_PROTINFO           = 0xc\n\tIFLA_TXQLEN             = 0xd\n\tIFLA_MAP                = 0xe\n\tIFLA_WEIGHT             = 0xf\n\tIFLA_OPERSTATE          = 0x10\n\tIFLA_LINKMODE           = 0x11\n\tIFLA_LINKINFO           = 0x12\n\tIFLA_NET_NS_PID         = 0x13\n\tIFLA_IFALIAS            = 0x14\n\tIFLA_NUM_VF             = 0x15\n\tIFLA_VFINFO_LIST        = 0x16\n\tIFLA_STATS64            = 0x17\n\tIFLA_VF_PORTS           = 0x18\n\tIFLA_PORT_SELF          = 0x19\n\tIFLA_AF_SPEC            = 0x1a\n\tIFLA_GROUP              = 0x1b\n\tIFLA_NET_NS_FD          = 0x1c\n\tIFLA_EXT_MASK           = 0x1d\n\tIFLA_PROMISCUITY        = 0x1e\n\tIFLA_NUM_TX_QUEUES      = 0x1f\n\tIFLA_NUM_RX_QUEUES      = 0x20\n\tIFLA_CARRIER            = 0x21\n\tIFLA_PHYS_PORT_ID       = 0x22\n\tIFLA_CARRIER_CHANGES    = 0x23\n\tIFLA_PHYS_SWITCH_ID     = 0x24\n\tIFLA_LINK_NETNSID       = 0x25\n\tIFLA_PHYS_PORT_NAME     = 0x26\n\tIFLA_PROTO_DOWN         = 0x27\n\tIFLA_GSO_MAX_SEGS       = 0x28\n\tIFLA_GSO_MAX_SIZE       = 0x29\n\tIFLA_PAD                = 0x2a\n\tIFLA_XDP                = 0x2b\n\tIFLA_EVENT              = 0x2c\n\tIFLA_NEW_NETNSID        = 0x2d\n\tIFLA_IF_NETNSID         = 0x2e\n\tIFLA_TARGET_NETNSID     = 0x2e\n\tIFLA_CARRIER_UP_COUNT   = 0x2f\n\tIFLA_CARRIER_DOWN_COUNT = 0x30\n\tIFLA_NEW_IFINDEX        = 0x31\n\tIFLA_MIN_MTU            = 0x32\n\tIFLA_MAX_MTU            = 0x33\n\tIFLA_MAX                = 0x33\n\tIFLA_INFO_KIND          = 0x1\n\tIFLA_INFO_DATA          = 0x2\n\tIFLA_INFO_XSTATS        = 0x3\n\tIFLA_INFO_SLAVE_KIND    = 0x4\n\tIFLA_INFO_SLAVE_DATA    = 0x5\n\tRT_SCOPE_UNIVERSE       = 0x0\n\tRT_SCOPE_SITE           = 0xc8\n\tRT_SCOPE_LINK           = 0xfd\n\tRT_SCOPE_HOST           = 0xfe\n\tRT_SCOPE_NOWHERE        = 0xff\n\tRT_TABLE_UNSPEC         = 0x0\n\tRT_TABLE_COMPAT         = 0xfc\n\tRT_TABLE_DEFAULT        = 0xfd\n\tRT_TABLE_MAIN           = 0xfe\n\tRT_TABLE_LOCAL          = 0xff\n\tRT_TABLE_MAX            = 0xffffffff\n\tRTA_UNSPEC              = 0x0\n\tRTA_DST                 = 0x1\n\tRTA_SRC                 = 0x2\n\tRTA_IIF                 = 0x3\n\tRTA_OIF                 = 0x4\n\tRTA_GATEWAY             = 0x5\n\tRTA_PRIORITY            = 0x6\n\tRTA_PREFSRC             = 0x7\n\tRTA_METRICS             = 0x8\n\tRTA_MULTIPATH           = 0x9\n\tRTA_FLOW                = 0xb\n\tRTA_CACHEINFO           = 0xc\n\tRTA_TABLE               = 0xf\n\tRTA_MARK                = 0x10\n\tRTA_MFC_STATS           = 0x11\n\tRTA_VIA                 = 0x12\n\tRTA_NEWDST              = 0x13\n\tRTA_PREF                = 0x14\n\tRTA_ENCAP_TYPE          = 0x15\n\tRTA_ENCAP               = 0x16\n\tRTA_EXPIRES             = 0x17\n\tRTA_PAD                 = 0x18\n\tRTA_UID                 = 0x19\n\tRTA_TTL_PROPAGATE       = 0x1a\n\tRTA_IP_PROTO            = 0x1b\n\tRTA_SPORT               = 0x1c\n\tRTA_DPORT               = 0x1d\n\tRTN_UNSPEC              = 0x0\n\tRTN_UNICAST             = 0x1\n\tRTN_LOCAL               = 0x2\n\tRTN_BROADCAST           = 0x3\n\tRTN_ANYCAST             = 0x4\n\tRTN_MULTICAST           = 0x5\n\tRTN_BLACKHOLE           = 0x6\n\tRTN_UNREACHABLE         = 0x7\n\tRTN_PROHIBIT            = 0x8\n\tRTN_THROW               = 0x9\n\tRTN_NAT                 = 0xa\n\tRTN_XRESOLVE            = 0xb\n\tRTNLGRP_NONE            = 0x0\n\tRTNLGRP_LINK            = 0x1\n\tRTNLGRP_NOTIFY          = 0x2\n\tRTNLGRP_NEIGH           = 0x3\n\tRTNLGRP_TC              = 0x4\n\tRTNLGRP_IPV4_IFADDR     = 0x5\n\tRTNLGRP_IPV4_MROUTE     = 0x6\n\tRTNLGRP_IPV4_ROUTE      = 0x7\n\tRTNLGRP_IPV4_RULE       = 0x8\n\tRTNLGRP_IPV6_IFADDR     = 0x9\n\tRTNLGRP_IPV6_MROUTE     = 0xa\n\tRTNLGRP_IPV6_ROUTE      = 0xb\n\tRTNLGRP_IPV6_IFINFO     = 0xc\n\tRTNLGRP_IPV6_PREFIX     = 0x12\n\tRTNLGRP_IPV6_RULE       = 0x13\n\tRTNLGRP_ND_USEROPT      = 0x14\n\tSizeofNlMsghdr          = 0x10\n\tSizeofNlMsgerr          = 0x14\n\tSizeofRtGenmsg          = 0x1\n\tSizeofNlAttr            = 0x4\n\tSizeofRtAttr            = 0x4\n\tSizeofIfInfomsg         = 0x10\n\tSizeofIfAddrmsg         = 0x8\n\tSizeofRtMsg             = 0xc\n\tSizeofRtNexthop         = 0x8\n\tSizeofNdUseroptmsg      = 0x10\n\tSizeofNdMsg             = 0xc\n)\n\ntype NlMsghdr struct {\n\tLen   uint32\n\tType  uint16\n\tFlags uint16\n\tSeq   uint32\n\tPid   uint32\n}\n\ntype NlMsgerr struct {\n\tError int32\n\tMsg   NlMsghdr\n}\n\ntype RtGenmsg struct {\n\tFamily uint8\n}\n\ntype NlAttr struct {\n\tLen  uint16\n\tType uint16\n}\n\ntype RtAttr struct {\n\tLen  uint16\n\tType uint16\n}\n\ntype IfInfomsg struct {\n\tFamily uint8\n\t_      uint8\n\tType   uint16\n\tIndex  int32\n\tFlags  uint32\n\tChange uint32\n}\n\ntype IfAddrmsg struct {\n\tFamily    uint8\n\tPrefixlen uint8\n\tFlags     uint8\n\tScope     uint8\n\tIndex     uint32\n}\n\ntype RtMsg struct {\n\tFamily   uint8\n\tDst_len  uint8\n\tSrc_len  uint8\n\tTos      uint8\n\tTable    uint8\n\tProtocol uint8\n\tScope    uint8\n\tType     uint8\n\tFlags    uint32\n}\n\ntype RtNexthop struct {\n\tLen     uint16\n\tFlags   uint8\n\tHops    uint8\n\tIfindex int32\n}\n\ntype NdUseroptmsg struct {\n\tFamily    uint8\n\tPad1      uint8\n\tOpts_len  uint16\n\tIfindex   int32\n\tIcmp_type uint8\n\tIcmp_code uint8\n\tPad2      uint16\n\tPad3      uint32\n}\n\ntype NdMsg struct {\n\tFamily  uint8\n\tPad1    uint8\n\tPad2    uint16\n\tIfindex int32\n\tState   uint16\n\tFlags   uint8\n\tType    uint8\n}\n\nconst (\n\tSizeofSockFilter = 0x8\n\tSizeofSockFprog  = 0x10\n)\n\ntype SockFilter struct {\n\tCode uint16\n\tJt   uint8\n\tJf   uint8\n\tK    uint32\n}\n\ntype SockFprog struct {\n\tLen    uint16\n\tFilter *SockFilter\n}\n\ntype InotifyEvent struct {\n\tWd     int32\n\tMask   uint32\n\tCookie uint32\n\tLen    uint32\n}\n\nconst SizeofInotifyEvent = 0x10\n\ntype PtraceRegs struct {\n\tRegs     [32]uint64\n\tLo       uint64\n\tHi       uint64\n\tEpc      uint64\n\tBadvaddr uint64\n\tStatus   uint64\n\tCause    uint64\n}\n\ntype FdSet struct {\n\tBits [16]int64\n}\n\ntype Sysinfo_t struct {\n\tUptime    int64\n\tLoads     [3]uint64\n\tTotalram  uint64\n\tFreeram   uint64\n\tSharedram uint64\n\tBufferram uint64\n\tTotalswap uint64\n\tFreeswap  uint64\n\tProcs     uint16\n\tPad       uint16\n\tTotalhigh uint64\n\tFreehigh  uint64\n\tUnit      uint32\n\t_         [0]int8\n\t_         [4]byte\n}\n\ntype Utsname struct {\n\tSysname    [65]byte\n\tNodename   [65]byte\n\tRelease    [65]byte\n\tVersion    [65]byte\n\tMachine    [65]byte\n\tDomainname [65]byte\n}\n\ntype Ustat_t struct {\n\tTfree  int32\n\tTinode uint64\n\tFname  [6]int8\n\tFpack  [6]int8\n\t_      [4]byte\n}\n\ntype EpollEvent struct {\n\tEvents uint32\n\tFd     int32\n\tPad    int32\n}\n\nconst (\n\tAT_EMPTY_PATH   = 0x1000\n\tAT_FDCWD        = -0x64\n\tAT_NO_AUTOMOUNT = 0x800\n\tAT_REMOVEDIR    = 0x200\n\n\tAT_STATX_SYNC_AS_STAT = 0x0\n\tAT_STATX_FORCE_SYNC   = 0x2000\n\tAT_STATX_DONT_SYNC    = 0x4000\n\n\tAT_SYMLINK_FOLLOW   = 0x400\n\tAT_SYMLINK_NOFOLLOW = 0x100\n\n\tAT_EACCESS = 0x200\n)\n\ntype PollFd struct {\n\tFd      int32\n\tEvents  int16\n\tRevents int16\n}\n\nconst (\n\tPOLLIN    = 0x1\n\tPOLLPRI   = 0x2\n\tPOLLOUT   = 0x4\n\tPOLLRDHUP = 0x2000\n\tPOLLERR   = 0x8\n\tPOLLHUP   = 0x10\n\tPOLLNVAL  = 0x20\n)\n\ntype Sigset_t struct {\n\tVal [16]uint64\n}\n\nconst _C__NSIG = 0x80\n\ntype SignalfdSiginfo struct {\n\tSigno     uint32\n\tErrno     int32\n\tCode      int32\n\tPid       uint32\n\tUid       uint32\n\tFd        int32\n\tTid       uint32\n\tBand      uint32\n\tOverrun   uint32\n\tTrapno    uint32\n\tStatus    int32\n\tInt       int32\n\tPtr       uint64\n\tUtime     uint64\n\tStime     uint64\n\tAddr      uint64\n\tAddr_lsb  uint16\n\t_         uint16\n\tSyscall   int32\n\tCall_addr uint64\n\tArch      uint32\n\t_         [28]uint8\n}\n\nconst PERF_IOC_FLAG_GROUP = 0x1\n\ntype Termios struct {\n\tIflag  uint32\n\tOflag  uint32\n\tCflag  uint32\n\tLflag  uint32\n\tLine   uint8\n\tCc     [23]uint8\n\tIspeed uint32\n\tOspeed uint32\n}\n\ntype Winsize struct {\n\tRow    uint16\n\tCol    uint16\n\tXpixel uint16\n\tYpixel uint16\n}\n\ntype Taskstats struct {\n\tVersion                   uint16\n\tAc_exitcode               uint32\n\tAc_flag                   uint8\n\tAc_nice                   uint8\n\tCpu_count                 uint64\n\tCpu_delay_total           uint64\n\tBlkio_count               uint64\n\tBlkio_delay_total         uint64\n\tSwapin_count              uint64\n\tSwapin_delay_total        uint64\n\tCpu_run_real_total        uint64\n\tCpu_run_virtual_total     uint64\n\tAc_comm                   [32]int8\n\tAc_sched                  uint8\n\tAc_pad                    [3]uint8\n\t_                         [4]byte\n\tAc_uid                    uint32\n\tAc_gid                    uint32\n\tAc_pid                    uint32\n\tAc_ppid                   uint32\n\tAc_btime                  uint32\n\tAc_etime                  uint64\n\tAc_utime                  uint64\n\tAc_stime                  uint64\n\tAc_minflt                 uint64\n\tAc_majflt                 uint64\n\tCoremem                   uint64\n\tVirtmem                   uint64\n\tHiwater_rss               uint64\n\tHiwater_vm                uint64\n\tRead_char                 uint64\n\tWrite_char                uint64\n\tRead_syscalls             uint64\n\tWrite_syscalls            uint64\n\tRead_bytes                uint64\n\tWrite_bytes               uint64\n\tCancelled_write_bytes     uint64\n\tNvcsw                     uint64\n\tNivcsw                    uint64\n\tAc_utimescaled            uint64\n\tAc_stimescaled            uint64\n\tCpu_scaled_run_real_total uint64\n\tFreepages_count           uint64\n\tFreepages_delay_total     uint64\n\tThrashing_count           uint64\n\tThrashing_delay_total     uint64\n}\n\nconst (\n\tTASKSTATS_CMD_UNSPEC                  = 0x0\n\tTASKSTATS_CMD_GET                     = 0x1\n\tTASKSTATS_CMD_NEW                     = 0x2\n\tTASKSTATS_TYPE_UNSPEC                 = 0x0\n\tTASKSTATS_TYPE_PID                    = 0x1\n\tTASKSTATS_TYPE_TGID                   = 0x2\n\tTASKSTATS_TYPE_STATS                  = 0x3\n\tTASKSTATS_TYPE_AGGR_PID               = 0x4\n\tTASKSTATS_TYPE_AGGR_TGID              = 0x5\n\tTASKSTATS_TYPE_NULL                   = 0x6\n\tTASKSTATS_CMD_ATTR_UNSPEC             = 0x0\n\tTASKSTATS_CMD_ATTR_PID                = 0x1\n\tTASKSTATS_CMD_ATTR_TGID               = 0x2\n\tTASKSTATS_CMD_ATTR_REGISTER_CPUMASK   = 0x3\n\tTASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4\n)\n\ntype CGroupStats struct {\n\tSleeping        uint64\n\tRunning         uint64\n\tStopped         uint64\n\tUninterruptible uint64\n\tIo_wait         uint64\n}\n\nconst (\n\tCGROUPSTATS_CMD_UNSPEC        = 0x3\n\tCGROUPSTATS_CMD_GET           = 0x4\n\tCGROUPSTATS_CMD_NEW           = 0x5\n\tCGROUPSTATS_TYPE_UNSPEC       = 0x0\n\tCGROUPSTATS_TYPE_CGROUP_STATS = 0x1\n\tCGROUPSTATS_CMD_ATTR_UNSPEC   = 0x0\n\tCGROUPSTATS_CMD_ATTR_FD       = 0x1\n)\n\ntype Genlmsghdr struct {\n\tCmd      uint8\n\tVersion  uint8\n\tReserved uint16\n}\n\nconst (\n\tCTRL_CMD_UNSPEC            = 0x0\n\tCTRL_CMD_NEWFAMILY         = 0x1\n\tCTRL_CMD_DELFAMILY         = 0x2\n\tCTRL_CMD_GETFAMILY         = 0x3\n\tCTRL_CMD_NEWOPS            = 0x4\n\tCTRL_CMD_DELOPS            = 0x5\n\tCTRL_CMD_GETOPS            = 0x6\n\tCTRL_CMD_NEWMCAST_GRP      = 0x7\n\tCTRL_CMD_DELMCAST_GRP      = 0x8\n\tCTRL_CMD_GETMCAST_GRP      = 0x9\n\tCTRL_ATTR_UNSPEC           = 0x0\n\tCTRL_ATTR_FAMILY_ID        = 0x1\n\tCTRL_ATTR_FAMILY_NAME      = 0x2\n\tCTRL_ATTR_VERSION          = 0x3\n\tCTRL_ATTR_HDRSIZE          = 0x4\n\tCTRL_ATTR_MAXATTR          = 0x5\n\tCTRL_ATTR_OPS              = 0x6\n\tCTRL_ATTR_MCAST_GROUPS     = 0x7\n\tCTRL_ATTR_OP_UNSPEC        = 0x0\n\tCTRL_ATTR_OP_ID            = 0x1\n\tCTRL_ATTR_OP_FLAGS         = 0x2\n\tCTRL_ATTR_MCAST_GRP_UNSPEC = 0x0\n\tCTRL_ATTR_MCAST_GRP_NAME   = 0x1\n\tCTRL_ATTR_MCAST_GRP_ID     = 0x2\n)\n\ntype cpuMask uint64\n\nconst (\n\t_CPU_SETSIZE = 0x400\n\t_NCPUBITS    = 0x40\n)\n\nconst (\n\tBDADDR_BREDR     = 0x0\n\tBDADDR_LE_PUBLIC = 0x1\n\tBDADDR_LE_RANDOM = 0x2\n)\n\ntype PerfEventAttr struct {\n\tType               uint32\n\tSize               uint32\n\tConfig             uint64\n\tSample             uint64\n\tSample_type        uint64\n\tRead_format        uint64\n\tBits               uint64\n\tWakeup             uint32\n\tBp_type            uint32\n\tExt1               uint64\n\tExt2               uint64\n\tBranch_sample_type uint64\n\tSample_regs_user   uint64\n\tSample_stack_user  uint32\n\tClockid            int32\n\tSample_regs_intr   uint64\n\tAux_watermark      uint32\n\tSample_max_stack   uint16\n\t_                  uint16\n}\n\ntype PerfEventMmapPage struct {\n\tVersion        uint32\n\tCompat_version uint32\n\tLock           uint32\n\tIndex          uint32\n\tOffset         int64\n\tTime_enabled   uint64\n\tTime_running   uint64\n\tCapabilities   uint64\n\tPmc_width      uint16\n\tTime_shift     uint16\n\tTime_mult      uint32\n\tTime_offset    uint64\n\tTime_zero      uint64\n\tSize           uint32\n\t_              [948]uint8\n\tData_head      uint64\n\tData_tail      uint64\n\tData_offset    uint64\n\tData_size      uint64\n\tAux_head       uint64\n\tAux_tail       uint64\n\tAux_offset     uint64\n\tAux_size       uint64\n}\n\nconst (\n\tPerfBitDisabled               uint64 = CBitFieldMaskBit0\n\tPerfBitInherit                       = CBitFieldMaskBit1\n\tPerfBitPinned                        = CBitFieldMaskBit2\n\tPerfBitExclusive                     = CBitFieldMaskBit3\n\tPerfBitExcludeUser                   = CBitFieldMaskBit4\n\tPerfBitExcludeKernel                 = CBitFieldMaskBit5\n\tPerfBitExcludeHv                     = CBitFieldMaskBit6\n\tPerfBitExcludeIdle                   = CBitFieldMaskBit7\n\tPerfBitMmap                          = CBitFieldMaskBit8\n\tPerfBitComm                          = CBitFieldMaskBit9\n\tPerfBitFreq                          = CBitFieldMaskBit10\n\tPerfBitInheritStat                   = CBitFieldMaskBit11\n\tPerfBitEnableOnExec                  = CBitFieldMaskBit12\n\tPerfBitTask                          = CBitFieldMaskBit13\n\tPerfBitWatermark                     = CBitFieldMaskBit14\n\tPerfBitPreciseIPBit1                 = CBitFieldMaskBit15\n\tPerfBitPreciseIPBit2                 = CBitFieldMaskBit16\n\tPerfBitMmapData                      = CBitFieldMaskBit17\n\tPerfBitSampleIDAll                   = CBitFieldMaskBit18\n\tPerfBitExcludeHost                   = CBitFieldMaskBit19\n\tPerfBitExcludeGuest                  = CBitFieldMaskBit20\n\tPerfBitExcludeCallchainKernel        = CBitFieldMaskBit21\n\tPerfBitExcludeCallchainUser          = CBitFieldMaskBit22\n\tPerfBitMmap2                         = CBitFieldMaskBit23\n\tPerfBitCommExec                      = CBitFieldMaskBit24\n\tPerfBitUseClockID                    = CBitFieldMaskBit25\n\tPerfBitContextSwitch                 = CBitFieldMaskBit26\n)\n\nconst (\n\tPERF_TYPE_HARDWARE   = 0x0\n\tPERF_TYPE_SOFTWARE   = 0x1\n\tPERF_TYPE_TRACEPOINT = 0x2\n\tPERF_TYPE_HW_CACHE   = 0x3\n\tPERF_TYPE_RAW        = 0x4\n\tPERF_TYPE_BREAKPOINT = 0x5\n\n\tPERF_COUNT_HW_CPU_CYCLES              = 0x0\n\tPERF_COUNT_HW_INSTRUCTIONS            = 0x1\n\tPERF_COUNT_HW_CACHE_REFERENCES        = 0x2\n\tPERF_COUNT_HW_CACHE_MISSES            = 0x3\n\tPERF_COUNT_HW_BRANCH_INSTRUCTIONS     = 0x4\n\tPERF_COUNT_HW_BRANCH_MISSES           = 0x5\n\tPERF_COUNT_HW_BUS_CYCLES              = 0x6\n\tPERF_COUNT_HW_STALLED_CYCLES_FRONTEND = 0x7\n\tPERF_COUNT_HW_STALLED_CYCLES_BACKEND  = 0x8\n\tPERF_COUNT_HW_REF_CPU_CYCLES          = 0x9\n\n\tPERF_COUNT_HW_CACHE_L1D  = 0x0\n\tPERF_COUNT_HW_CACHE_L1I  = 0x1\n\tPERF_COUNT_HW_CACHE_LL   = 0x2\n\tPERF_COUNT_HW_CACHE_DTLB = 0x3\n\tPERF_COUNT_HW_CACHE_ITLB = 0x4\n\tPERF_COUNT_HW_CACHE_BPU  = 0x5\n\tPERF_COUNT_HW_CACHE_NODE = 0x6\n\n\tPERF_COUNT_HW_CACHE_OP_READ     = 0x0\n\tPERF_COUNT_HW_CACHE_OP_WRITE    = 0x1\n\tPERF_COUNT_HW_CACHE_OP_PREFETCH = 0x2\n\n\tPERF_COUNT_HW_CACHE_RESULT_ACCESS = 0x0\n\tPERF_COUNT_HW_CACHE_RESULT_MISS   = 0x1\n\n\tPERF_COUNT_SW_CPU_CLOCK        = 0x0\n\tPERF_COUNT_SW_TASK_CLOCK       = 0x1\n\tPERF_COUNT_SW_PAGE_FAULTS      = 0x2\n\tPERF_COUNT_SW_CONTEXT_SWITCHES = 0x3\n\tPERF_COUNT_SW_CPU_MIGRATIONS   = 0x4\n\tPERF_COUNT_SW_PAGE_FAULTS_MIN  = 0x5\n\tPERF_COUNT_SW_PAGE_FAULTS_MAJ  = 0x6\n\tPERF_COUNT_SW_ALIGNMENT_FAULTS = 0x7\n\tPERF_COUNT_SW_EMULATION_FAULTS = 0x8\n\tPERF_COUNT_SW_DUMMY            = 0x9\n\tPERF_COUNT_SW_BPF_OUTPUT       = 0xa\n\n\tPERF_SAMPLE_IP           = 0x1\n\tPERF_SAMPLE_TID          = 0x2\n\tPERF_SAMPLE_TIME         = 0x4\n\tPERF_SAMPLE_ADDR         = 0x8\n\tPERF_SAMPLE_READ         = 0x10\n\tPERF_SAMPLE_CALLCHAIN    = 0x20\n\tPERF_SAMPLE_ID           = 0x40\n\tPERF_SAMPLE_CPU          = 0x80\n\tPERF_SAMPLE_PERIOD       = 0x100\n\tPERF_SAMPLE_STREAM_ID    = 0x200\n\tPERF_SAMPLE_RAW          = 0x400\n\tPERF_SAMPLE_BRANCH_STACK = 0x800\n\n\tPERF_SAMPLE_BRANCH_USER       = 0x1\n\tPERF_SAMPLE_BRANCH_KERNEL     = 0x2\n\tPERF_SAMPLE_BRANCH_HV         = 0x4\n\tPERF_SAMPLE_BRANCH_ANY        = 0x8\n\tPERF_SAMPLE_BRANCH_ANY_CALL   = 0x10\n\tPERF_SAMPLE_BRANCH_ANY_RETURN = 0x20\n\tPERF_SAMPLE_BRANCH_IND_CALL   = 0x40\n\tPERF_SAMPLE_BRANCH_ABORT_TX   = 0x80\n\tPERF_SAMPLE_BRANCH_IN_TX      = 0x100\n\tPERF_SAMPLE_BRANCH_NO_TX      = 0x200\n\tPERF_SAMPLE_BRANCH_COND       = 0x400\n\tPERF_SAMPLE_BRANCH_CALL_STACK = 0x800\n\tPERF_SAMPLE_BRANCH_IND_JUMP   = 0x1000\n\tPERF_SAMPLE_BRANCH_CALL       = 0x2000\n\tPERF_SAMPLE_BRANCH_NO_FLAGS   = 0x4000\n\tPERF_SAMPLE_BRANCH_NO_CYCLES  = 0x8000\n\tPERF_SAMPLE_BRANCH_TYPE_SAVE  = 0x10000\n\n\tPERF_FORMAT_TOTAL_TIME_ENABLED = 0x1\n\tPERF_FORMAT_TOTAL_TIME_RUNNING = 0x2\n\tPERF_FORMAT_ID                 = 0x4\n\tPERF_FORMAT_GROUP              = 0x8\n\n\tPERF_RECORD_MMAP            = 0x1\n\tPERF_RECORD_LOST            = 0x2\n\tPERF_RECORD_COMM            = 0x3\n\tPERF_RECORD_EXIT            = 0x4\n\tPERF_RECORD_THROTTLE        = 0x5\n\tPERF_RECORD_UNTHROTTLE      = 0x6\n\tPERF_RECORD_FORK            = 0x7\n\tPERF_RECORD_READ            = 0x8\n\tPERF_RECORD_SAMPLE          = 0x9\n\tPERF_RECORD_MMAP2           = 0xa\n\tPERF_RECORD_AUX             = 0xb\n\tPERF_RECORD_ITRACE_START    = 0xc\n\tPERF_RECORD_LOST_SAMPLES    = 0xd\n\tPERF_RECORD_SWITCH          = 0xe\n\tPERF_RECORD_SWITCH_CPU_WIDE = 0xf\n\tPERF_RECORD_NAMESPACES      = 0x10\n\n\tPERF_CONTEXT_HV     = -0x20\n\tPERF_CONTEXT_KERNEL = -0x80\n\tPERF_CONTEXT_USER   = -0x200\n\n\tPERF_CONTEXT_GUEST        = -0x800\n\tPERF_CONTEXT_GUEST_KERNEL = -0x880\n\tPERF_CONTEXT_GUEST_USER   = -0xa00\n\n\tPERF_FLAG_FD_NO_GROUP = 0x1\n\tPERF_FLAG_FD_OUTPUT   = 0x2\n\tPERF_FLAG_PID_CGROUP  = 0x4\n\tPERF_FLAG_FD_CLOEXEC  = 0x8\n)\n\nconst (\n\tCBitFieldMaskBit0  = 0x8000000000000000\n\tCBitFieldMaskBit1  = 0x4000000000000000\n\tCBitFieldMaskBit2  = 0x2000000000000000\n\tCBitFieldMaskBit3  = 0x1000000000000000\n\tCBitFieldMaskBit4  = 0x800000000000000\n\tCBitFieldMaskBit5  = 0x400000000000000\n\tCBitFieldMaskBit6  = 0x200000000000000\n\tCBitFieldMaskBit7  = 0x100000000000000\n\tCBitFieldMaskBit8  = 0x80000000000000\n\tCBitFieldMaskBit9  = 0x40000000000000\n\tCBitFieldMaskBit10 = 0x20000000000000\n\tCBitFieldMaskBit11 = 0x10000000000000\n\tCBitFieldMaskBit12 = 0x8000000000000\n\tCBitFieldMaskBit13 = 0x4000000000000\n\tCBitFieldMaskBit14 = 0x2000000000000\n\tCBitFieldMaskBit15 = 0x1000000000000\n\tCBitFieldMaskBit16 = 0x800000000000\n\tCBitFieldMaskBit17 = 0x400000000000\n\tCBitFieldMaskBit18 = 0x200000000000\n\tCBitFieldMaskBit19 = 0x100000000000\n\tCBitFieldMaskBit20 = 0x80000000000\n\tCBitFieldMaskBit21 = 0x40000000000\n\tCBitFieldMaskBit22 = 0x20000000000\n\tCBitFieldMaskBit23 = 0x10000000000\n\tCBitFieldMaskBit24 = 0x8000000000\n\tCBitFieldMaskBit25 = 0x4000000000\n\tCBitFieldMaskBit26 = 0x2000000000\n\tCBitFieldMaskBit27 = 0x1000000000\n\tCBitFieldMaskBit28 = 0x800000000\n\tCBitFieldMaskBit29 = 0x400000000\n\tCBitFieldMaskBit30 = 0x200000000\n\tCBitFieldMaskBit31 = 0x100000000\n\tCBitFieldMaskBit32 = 0x80000000\n\tCBitFieldMaskBit33 = 0x40000000\n\tCBitFieldMaskBit34 = 0x20000000\n\tCBitFieldMaskBit35 = 0x10000000\n\tCBitFieldMaskBit36 = 0x8000000\n\tCBitFieldMaskBit37 = 0x4000000\n\tCBitFieldMaskBit38 = 0x2000000\n\tCBitFieldMaskBit39 = 0x1000000\n\tCBitFieldMaskBit40 = 0x800000\n\tCBitFieldMaskBit41 = 0x400000\n\tCBitFieldMaskBit42 = 0x200000\n\tCBitFieldMaskBit43 = 0x100000\n\tCBitFieldMaskBit44 = 0x80000\n\tCBitFieldMaskBit45 = 0x40000\n\tCBitFieldMaskBit46 = 0x20000\n\tCBitFieldMaskBit47 = 0x10000\n\tCBitFieldMaskBit48 = 0x8000\n\tCBitFieldMaskBit49 = 0x4000\n\tCBitFieldMaskBit50 = 0x2000\n\tCBitFieldMaskBit51 = 0x1000\n\tCBitFieldMaskBit52 = 0x800\n\tCBitFieldMaskBit53 = 0x400\n\tCBitFieldMaskBit54 = 0x200\n\tCBitFieldMaskBit55 = 0x100\n\tCBitFieldMaskBit56 = 0x80\n\tCBitFieldMaskBit57 = 0x40\n\tCBitFieldMaskBit58 = 0x20\n\tCBitFieldMaskBit59 = 0x10\n\tCBitFieldMaskBit60 = 0x8\n\tCBitFieldMaskBit61 = 0x4\n\tCBitFieldMaskBit62 = 0x2\n\tCBitFieldMaskBit63 = 0x1\n)\n\ntype SockaddrStorage struct {\n\tFamily uint16\n\t_      [118]int8\n\t_      uint64\n}\n\ntype TCPMD5Sig struct {\n\tAddr      SockaddrStorage\n\tFlags     uint8\n\tPrefixlen uint8\n\tKeylen    uint16\n\t_         uint32\n\tKey       [80]uint8\n}\n\ntype HDDriveCmdHdr struct {\n\tCommand uint8\n\tNumber  uint8\n\tFeature uint8\n\tCount   uint8\n}\n\ntype HDGeometry struct {\n\tHeads     uint8\n\tSectors   uint8\n\tCylinders uint16\n\tStart     uint64\n}\n\ntype HDDriveID struct {\n\tConfig         uint16\n\tCyls           uint16\n\tReserved2      uint16\n\tHeads          uint16\n\tTrack_bytes    uint16\n\tSector_bytes   uint16\n\tSectors        uint16\n\tVendor0        uint16\n\tVendor1        uint16\n\tVendor2        uint16\n\tSerial_no      [20]uint8\n\tBuf_type       uint16\n\tBuf_size       uint16\n\tEcc_bytes      uint16\n\tFw_rev         [8]uint8\n\tModel          [40]uint8\n\tMax_multsect   uint8\n\tVendor3        uint8\n\tDword_io       uint16\n\tVendor4        uint8\n\tCapability     uint8\n\tReserved50     uint16\n\tVendor5        uint8\n\tTPIO           uint8\n\tVendor6        uint8\n\tTDMA           uint8\n\tField_valid    uint16\n\tCur_cyls       uint16\n\tCur_heads      uint16\n\tCur_sectors    uint16\n\tCur_capacity0  uint16\n\tCur_capacity1  uint16\n\tMultsect       uint8\n\tMultsect_valid uint8\n\tLba_capacity   uint32\n\tDma_1word      uint16\n\tDma_mword      uint16\n\tEide_pio_modes uint16\n\tEide_dma_min   uint16\n\tEide_dma_time  uint16\n\tEide_pio       uint16\n\tEide_pio_iordy uint16\n\tWords69_70     [2]uint16\n\tWords71_74     [4]uint16\n\tQueue_depth    uint16\n\tWords76_79     [4]uint16\n\tMajor_rev_num  uint16\n\tMinor_rev_num  uint16\n\tCommand_set_1  uint16\n\tCommand_set_2  uint16\n\tCfsse          uint16\n\tCfs_enable_1   uint16\n\tCfs_enable_2   uint16\n\tCsf_default    uint16\n\tDma_ultra      uint16\n\tTrseuc         uint16\n\tTrsEuc         uint16\n\tCurAPMvalues   uint16\n\tMprc           uint16\n\tHw_config      uint16\n\tAcoustic       uint16\n\tMsrqs          uint16\n\tSxfert         uint16\n\tSal            uint16\n\tSpg            uint32\n\tLba_capacity_2 uint64\n\tWords104_125   [22]uint16\n\tLast_lun       uint16\n\tWord127        uint16\n\tDlf            uint16\n\tCsfo           uint16\n\tWords130_155   [26]uint16\n\tWord156        uint16\n\tWords157_159   [3]uint16\n\tCfa_power      uint16\n\tWords161_175   [15]uint16\n\tWords176_205   [30]uint16\n\tWords206_254   [49]uint16\n\tIntegrity_word uint16\n}\n\ntype Statfs_t struct {\n\tType    int64\n\tBsize   int64\n\tFrsize  int64\n\tBlocks  uint64\n\tBfree   uint64\n\tFiles   uint64\n\tFfree   uint64\n\tBavail  uint64\n\tFsid    Fsid\n\tNamelen int64\n\tFlags   int64\n\tSpare   [5]int64\n}\n\nconst (\n\tST_MANDLOCK    = 0x40\n\tST_NOATIME     = 0x400\n\tST_NODEV       = 0x4\n\tST_NODIRATIME  = 0x800\n\tST_NOEXEC      = 0x8\n\tST_NOSUID      = 0x2\n\tST_RDONLY      = 0x1\n\tST_RELATIME    = 0x1000\n\tST_SYNCHRONOUS = 0x10\n)\n\ntype TpacketHdr struct {\n\tStatus  uint64\n\tLen     uint32\n\tSnaplen uint32\n\tMac     uint16\n\tNet     uint16\n\tSec     uint32\n\tUsec    uint32\n\t_       [4]byte\n}\n\ntype Tpacket2Hdr struct {\n\tStatus    uint32\n\tLen       uint32\n\tSnaplen   uint32\n\tMac       uint16\n\tNet       uint16\n\tSec       uint32\n\tNsec      uint32\n\tVlan_tci  uint16\n\tVlan_tpid uint16\n\t_         [4]uint8\n}\n\ntype Tpacket3Hdr struct {\n\tNext_offset uint32\n\tSec         uint32\n\tNsec        uint32\n\tSnaplen     uint32\n\tLen         uint32\n\tStatus      uint32\n\tMac         uint16\n\tNet         uint16\n\tHv1         TpacketHdrVariant1\n\t_           [8]uint8\n}\n\ntype TpacketHdrVariant1 struct {\n\tRxhash    uint32\n\tVlan_tci  uint32\n\tVlan_tpid uint16\n\t_         uint16\n}\n\ntype TpacketBlockDesc struct {\n\tVersion uint32\n\tTo_priv uint32\n\tHdr     [40]byte\n}\n\ntype TpacketBDTS struct {\n\tSec  uint32\n\tUsec uint32\n}\n\ntype TpacketHdrV1 struct {\n\tBlock_status        uint32\n\tNum_pkts            uint32\n\tOffset_to_first_pkt uint32\n\tBlk_len             uint32\n\tSeq_num             uint64\n\tTs_first_pkt        TpacketBDTS\n\tTs_last_pkt         TpacketBDTS\n}\n\ntype TpacketReq struct {\n\tBlock_size uint32\n\tBlock_nr   uint32\n\tFrame_size uint32\n\tFrame_nr   uint32\n}\n\ntype TpacketReq3 struct {\n\tBlock_size       uint32\n\tBlock_nr         uint32\n\tFrame_size       uint32\n\tFrame_nr         uint32\n\tRetire_blk_tov   uint32\n\tSizeof_priv      uint32\n\tFeature_req_word uint32\n}\n\ntype TpacketStats struct {\n\tPackets uint32\n\tDrops   uint32\n}\n\ntype TpacketStatsV3 struct {\n\tPackets      uint32\n\tDrops        uint32\n\tFreeze_q_cnt uint32\n}\n\ntype TpacketAuxdata struct {\n\tStatus    uint32\n\tLen       uint32\n\tSnaplen   uint32\n\tMac       uint16\n\tNet       uint16\n\tVlan_tci  uint16\n\tVlan_tpid uint16\n}\n\nconst (\n\tTPACKET_V1 = 0x0\n\tTPACKET_V2 = 0x1\n\tTPACKET_V3 = 0x2\n)\n\nconst (\n\tSizeofTpacketHdr  = 0x20\n\tSizeofTpacket2Hdr = 0x20\n\tSizeofTpacket3Hdr = 0x30\n\n\tSizeofTpacketStats   = 0x8\n\tSizeofTpacketStatsV3 = 0xc\n)\n\nconst (\n\tNF_INET_PRE_ROUTING  = 0x0\n\tNF_INET_LOCAL_IN     = 0x1\n\tNF_INET_FORWARD      = 0x2\n\tNF_INET_LOCAL_OUT    = 0x3\n\tNF_INET_POST_ROUTING = 0x4\n\tNF_INET_NUMHOOKS     = 0x5\n)\n\nconst (\n\tNF_NETDEV_INGRESS  = 0x0\n\tNF_NETDEV_NUMHOOKS = 0x1\n)\n\nconst (\n\tNFPROTO_UNSPEC   = 0x0\n\tNFPROTO_INET     = 0x1\n\tNFPROTO_IPV4     = 0x2\n\tNFPROTO_ARP      = 0x3\n\tNFPROTO_NETDEV   = 0x5\n\tNFPROTO_BRIDGE   = 0x7\n\tNFPROTO_IPV6     = 0xa\n\tNFPROTO_DECNET   = 0xc\n\tNFPROTO_NUMPROTO = 0xd\n)\n\ntype Nfgenmsg struct {\n\tNfgen_family uint8\n\tVersion      uint8\n\tRes_id       uint16\n}\n\nconst (\n\tNFNL_BATCH_UNSPEC = 0x0\n\tNFNL_BATCH_GENID  = 0x1\n)\n\nconst (\n\tNFT_REG_VERDICT                   = 0x0\n\tNFT_REG_1                         = 0x1\n\tNFT_REG_2                         = 0x2\n\tNFT_REG_3                         = 0x3\n\tNFT_REG_4                         = 0x4\n\tNFT_REG32_00                      = 0x8\n\tNFT_REG32_01                      = 0x9\n\tNFT_REG32_02                      = 0xa\n\tNFT_REG32_03                      = 0xb\n\tNFT_REG32_04                      = 0xc\n\tNFT_REG32_05                      = 0xd\n\tNFT_REG32_06                      = 0xe\n\tNFT_REG32_07                      = 0xf\n\tNFT_REG32_08                      = 0x10\n\tNFT_REG32_09                      = 0x11\n\tNFT_REG32_10                      = 0x12\n\tNFT_REG32_11                      = 0x13\n\tNFT_REG32_12                      = 0x14\n\tNFT_REG32_13                      = 0x15\n\tNFT_REG32_14                      = 0x16\n\tNFT_REG32_15                      = 0x17\n\tNFT_CONTINUE                      = -0x1\n\tNFT_BREAK                         = -0x2\n\tNFT_JUMP                          = -0x3\n\tNFT_GOTO                          = -0x4\n\tNFT_RETURN                        = -0x5\n\tNFT_MSG_NEWTABLE                  = 0x0\n\tNFT_MSG_GETTABLE                  = 0x1\n\tNFT_MSG_DELTABLE                  = 0x2\n\tNFT_MSG_NEWCHAIN                  = 0x3\n\tNFT_MSG_GETCHAIN                  = 0x4\n\tNFT_MSG_DELCHAIN                  = 0x5\n\tNFT_MSG_NEWRULE                   = 0x6\n\tNFT_MSG_GETRULE                   = 0x7\n\tNFT_MSG_DELRULE                   = 0x8\n\tNFT_MSG_NEWSET                    = 0x9\n\tNFT_MSG_GETSET                    = 0xa\n\tNFT_MSG_DELSET                    = 0xb\n\tNFT_MSG_NEWSETELEM                = 0xc\n\tNFT_MSG_GETSETELEM                = 0xd\n\tNFT_MSG_DELSETELEM                = 0xe\n\tNFT_MSG_NEWGEN                    = 0xf\n\tNFT_MSG_GETGEN                    = 0x10\n\tNFT_MSG_TRACE                     = 0x11\n\tNFT_MSG_NEWOBJ                    = 0x12\n\tNFT_MSG_GETOBJ                    = 0x13\n\tNFT_MSG_DELOBJ                    = 0x14\n\tNFT_MSG_GETOBJ_RESET              = 0x15\n\tNFT_MSG_MAX                       = 0x19\n\tNFTA_LIST_UNPEC                   = 0x0\n\tNFTA_LIST_ELEM                    = 0x1\n\tNFTA_HOOK_UNSPEC                  = 0x0\n\tNFTA_HOOK_HOOKNUM                 = 0x1\n\tNFTA_HOOK_PRIORITY                = 0x2\n\tNFTA_HOOK_DEV                     = 0x3\n\tNFT_TABLE_F_DORMANT               = 0x1\n\tNFTA_TABLE_UNSPEC                 = 0x0\n\tNFTA_TABLE_NAME                   = 0x1\n\tNFTA_TABLE_FLAGS                  = 0x2\n\tNFTA_TABLE_USE                    = 0x3\n\tNFTA_CHAIN_UNSPEC                 = 0x0\n\tNFTA_CHAIN_TABLE                  = 0x1\n\tNFTA_CHAIN_HANDLE                 = 0x2\n\tNFTA_CHAIN_NAME                   = 0x3\n\tNFTA_CHAIN_HOOK                   = 0x4\n\tNFTA_CHAIN_POLICY                 = 0x5\n\tNFTA_CHAIN_USE                    = 0x6\n\tNFTA_CHAIN_TYPE                   = 0x7\n\tNFTA_CHAIN_COUNTERS               = 0x8\n\tNFTA_CHAIN_PAD                    = 0x9\n\tNFTA_RULE_UNSPEC                  = 0x0\n\tNFTA_RULE_TABLE                   = 0x1\n\tNFTA_RULE_CHAIN                   = 0x2\n\tNFTA_RULE_HANDLE                  = 0x3\n\tNFTA_RULE_EXPRESSIONS             = 0x4\n\tNFTA_RULE_COMPAT                  = 0x5\n\tNFTA_RULE_POSITION                = 0x6\n\tNFTA_RULE_USERDATA                = 0x7\n\tNFTA_RULE_PAD                     = 0x8\n\tNFTA_RULE_ID                      = 0x9\n\tNFT_RULE_COMPAT_F_INV             = 0x2\n\tNFT_RULE_COMPAT_F_MASK            = 0x2\n\tNFTA_RULE_COMPAT_UNSPEC           = 0x0\n\tNFTA_RULE_COMPAT_PROTO            = 0x1\n\tNFTA_RULE_COMPAT_FLAGS            = 0x2\n\tNFT_SET_ANONYMOUS                 = 0x1\n\tNFT_SET_CONSTANT                  = 0x2\n\tNFT_SET_INTERVAL                  = 0x4\n\tNFT_SET_MAP                       = 0x8\n\tNFT_SET_TIMEOUT                   = 0x10\n\tNFT_SET_EVAL                      = 0x20\n\tNFT_SET_OBJECT                    = 0x40\n\tNFT_SET_POL_PERFORMANCE           = 0x0\n\tNFT_SET_POL_MEMORY                = 0x1\n\tNFTA_SET_DESC_UNSPEC              = 0x0\n\tNFTA_SET_DESC_SIZE                = 0x1\n\tNFTA_SET_UNSPEC                   = 0x0\n\tNFTA_SET_TABLE                    = 0x1\n\tNFTA_SET_NAME                     = 0x2\n\tNFTA_SET_FLAGS                    = 0x3\n\tNFTA_SET_KEY_TYPE                 = 0x4\n\tNFTA_SET_KEY_LEN                  = 0x5\n\tNFTA_SET_DATA_TYPE                = 0x6\n\tNFTA_SET_DATA_LEN                 = 0x7\n\tNFTA_SET_POLICY                   = 0x8\n\tNFTA_SET_DESC                     = 0x9\n\tNFTA_SET_ID                       = 0xa\n\tNFTA_SET_TIMEOUT                  = 0xb\n\tNFTA_SET_GC_INTERVAL              = 0xc\n\tNFTA_SET_USERDATA                 = 0xd\n\tNFTA_SET_PAD                      = 0xe\n\tNFTA_SET_OBJ_TYPE                 = 0xf\n\tNFT_SET_ELEM_INTERVAL_END         = 0x1\n\tNFTA_SET_ELEM_UNSPEC              = 0x0\n\tNFTA_SET_ELEM_KEY                 = 0x1\n\tNFTA_SET_ELEM_DATA                = 0x2\n\tNFTA_SET_ELEM_FLAGS               = 0x3\n\tNFTA_SET_ELEM_TIMEOUT             = 0x4\n\tNFTA_SET_ELEM_EXPIRATION          = 0x5\n\tNFTA_SET_ELEM_USERDATA            = 0x6\n\tNFTA_SET_ELEM_EXPR                = 0x7\n\tNFTA_SET_ELEM_PAD                 = 0x8\n\tNFTA_SET_ELEM_OBJREF              = 0x9\n\tNFTA_SET_ELEM_LIST_UNSPEC         = 0x0\n\tNFTA_SET_ELEM_LIST_TABLE          = 0x1\n\tNFTA_SET_ELEM_LIST_SET            = 0x2\n\tNFTA_SET_ELEM_LIST_ELEMENTS       = 0x3\n\tNFTA_SET_ELEM_LIST_SET_ID         = 0x4\n\tNFT_DATA_VALUE                    = 0x0\n\tNFT_DATA_VERDICT                  = 0xffffff00\n\tNFTA_DATA_UNSPEC                  = 0x0\n\tNFTA_DATA_VALUE                   = 0x1\n\tNFTA_DATA_VERDICT                 = 0x2\n\tNFTA_VERDICT_UNSPEC               = 0x0\n\tNFTA_VERDICT_CODE                 = 0x1\n\tNFTA_VERDICT_CHAIN                = 0x2\n\tNFTA_EXPR_UNSPEC                  = 0x0\n\tNFTA_EXPR_NAME                    = 0x1\n\tNFTA_EXPR_DATA                    = 0x2\n\tNFTA_IMMEDIATE_UNSPEC             = 0x0\n\tNFTA_IMMEDIATE_DREG               = 0x1\n\tNFTA_IMMEDIATE_DATA               = 0x2\n\tNFTA_BITWISE_UNSPEC               = 0x0\n\tNFTA_BITWISE_SREG                 = 0x1\n\tNFTA_BITWISE_DREG                 = 0x2\n\tNFTA_BITWISE_LEN                  = 0x3\n\tNFTA_BITWISE_MASK                 = 0x4\n\tNFTA_BITWISE_XOR                  = 0x5\n\tNFT_BYTEORDER_NTOH                = 0x0\n\tNFT_BYTEORDER_HTON                = 0x1\n\tNFTA_BYTEORDER_UNSPEC             = 0x0\n\tNFTA_BYTEORDER_SREG               = 0x1\n\tNFTA_BYTEORDER_DREG               = 0x2\n\tNFTA_BYTEORDER_OP                 = 0x3\n\tNFTA_BYTEORDER_LEN                = 0x4\n\tNFTA_BYTEORDER_SIZE               = 0x5\n\tNFT_CMP_EQ                        = 0x0\n\tNFT_CMP_NEQ                       = 0x1\n\tNFT_CMP_LT                        = 0x2\n\tNFT_CMP_LTE                       = 0x3\n\tNFT_CMP_GT                        = 0x4\n\tNFT_CMP_GTE                       = 0x5\n\tNFTA_CMP_UNSPEC                   = 0x0\n\tNFTA_CMP_SREG                     = 0x1\n\tNFTA_CMP_OP                       = 0x2\n\tNFTA_CMP_DATA                     = 0x3\n\tNFT_RANGE_EQ                      = 0x0\n\tNFT_RANGE_NEQ                     = 0x1\n\tNFTA_RANGE_UNSPEC                 = 0x0\n\tNFTA_RANGE_SREG                   = 0x1\n\tNFTA_RANGE_OP                     = 0x2\n\tNFTA_RANGE_FROM_DATA              = 0x3\n\tNFTA_RANGE_TO_DATA                = 0x4\n\tNFT_LOOKUP_F_INV                  = 0x1\n\tNFTA_LOOKUP_UNSPEC                = 0x0\n\tNFTA_LOOKUP_SET                   = 0x1\n\tNFTA_LOOKUP_SREG                  = 0x2\n\tNFTA_LOOKUP_DREG                  = 0x3\n\tNFTA_LOOKUP_SET_ID                = 0x4\n\tNFTA_LOOKUP_FLAGS                 = 0x5\n\tNFT_DYNSET_OP_ADD                 = 0x0\n\tNFT_DYNSET_OP_UPDATE              = 0x1\n\tNFT_DYNSET_F_INV                  = 0x1\n\tNFTA_DYNSET_UNSPEC                = 0x0\n\tNFTA_DYNSET_SET_NAME              = 0x1\n\tNFTA_DYNSET_SET_ID                = 0x2\n\tNFTA_DYNSET_OP                    = 0x3\n\tNFTA_DYNSET_SREG_KEY              = 0x4\n\tNFTA_DYNSET_SREG_DATA             = 0x5\n\tNFTA_DYNSET_TIMEOUT               = 0x6\n\tNFTA_DYNSET_EXPR                  = 0x7\n\tNFTA_DYNSET_PAD                   = 0x8\n\tNFTA_DYNSET_FLAGS                 = 0x9\n\tNFT_PAYLOAD_LL_HEADER             = 0x0\n\tNFT_PAYLOAD_NETWORK_HEADER        = 0x1\n\tNFT_PAYLOAD_TRANSPORT_HEADER      = 0x2\n\tNFT_PAYLOAD_CSUM_NONE             = 0x0\n\tNFT_PAYLOAD_CSUM_INET             = 0x1\n\tNFT_PAYLOAD_L4CSUM_PSEUDOHDR      = 0x1\n\tNFTA_PAYLOAD_UNSPEC               = 0x0\n\tNFTA_PAYLOAD_DREG                 = 0x1\n\tNFTA_PAYLOAD_BASE                 = 0x2\n\tNFTA_PAYLOAD_OFFSET               = 0x3\n\tNFTA_PAYLOAD_LEN                  = 0x4\n\tNFTA_PAYLOAD_SREG                 = 0x5\n\tNFTA_PAYLOAD_CSUM_TYPE            = 0x6\n\tNFTA_PAYLOAD_CSUM_OFFSET          = 0x7\n\tNFTA_PAYLOAD_CSUM_FLAGS           = 0x8\n\tNFT_EXTHDR_F_PRESENT              = 0x1\n\tNFT_EXTHDR_OP_IPV6                = 0x0\n\tNFT_EXTHDR_OP_TCPOPT              = 0x1\n\tNFTA_EXTHDR_UNSPEC                = 0x0\n\tNFTA_EXTHDR_DREG                  = 0x1\n\tNFTA_EXTHDR_TYPE                  = 0x2\n\tNFTA_EXTHDR_OFFSET                = 0x3\n\tNFTA_EXTHDR_LEN                   = 0x4\n\tNFTA_EXTHDR_FLAGS                 = 0x5\n\tNFTA_EXTHDR_OP                    = 0x6\n\tNFTA_EXTHDR_SREG                  = 0x7\n\tNFT_META_LEN                      = 0x0\n\tNFT_META_PROTOCOL                 = 0x1\n\tNFT_META_PRIORITY                 = 0x2\n\tNFT_META_MARK                     = 0x3\n\tNFT_META_IIF                      = 0x4\n\tNFT_META_OIF                      = 0x5\n\tNFT_META_IIFNAME                  = 0x6\n\tNFT_META_OIFNAME                  = 0x7\n\tNFT_META_IIFTYPE                  = 0x8\n\tNFT_META_OIFTYPE                  = 0x9\n\tNFT_META_SKUID                    = 0xa\n\tNFT_META_SKGID                    = 0xb\n\tNFT_META_NFTRACE                  = 0xc\n\tNFT_META_RTCLASSID                = 0xd\n\tNFT_META_SECMARK                  = 0xe\n\tNFT_META_NFPROTO                  = 0xf\n\tNFT_META_L4PROTO                  = 0x10\n\tNFT_META_BRI_IIFNAME              = 0x11\n\tNFT_META_BRI_OIFNAME              = 0x12\n\tNFT_META_PKTTYPE                  = 0x13\n\tNFT_META_CPU                      = 0x14\n\tNFT_META_IIFGROUP                 = 0x15\n\tNFT_META_OIFGROUP                 = 0x16\n\tNFT_META_CGROUP                   = 0x17\n\tNFT_META_PRANDOM                  = 0x18\n\tNFT_RT_CLASSID                    = 0x0\n\tNFT_RT_NEXTHOP4                   = 0x1\n\tNFT_RT_NEXTHOP6                   = 0x2\n\tNFT_RT_TCPMSS                     = 0x3\n\tNFT_HASH_JENKINS                  = 0x0\n\tNFT_HASH_SYM                      = 0x1\n\tNFTA_HASH_UNSPEC                  = 0x0\n\tNFTA_HASH_SREG                    = 0x1\n\tNFTA_HASH_DREG                    = 0x2\n\tNFTA_HASH_LEN                     = 0x3\n\tNFTA_HASH_MODULUS                 = 0x4\n\tNFTA_HASH_SEED                    = 0x5\n\tNFTA_HASH_OFFSET                  = 0x6\n\tNFTA_HASH_TYPE                    = 0x7\n\tNFTA_META_UNSPEC                  = 0x0\n\tNFTA_META_DREG                    = 0x1\n\tNFTA_META_KEY                     = 0x2\n\tNFTA_META_SREG                    = 0x3\n\tNFTA_RT_UNSPEC                    = 0x0\n\tNFTA_RT_DREG                      = 0x1\n\tNFTA_RT_KEY                       = 0x2\n\tNFT_CT_STATE                      = 0x0\n\tNFT_CT_DIRECTION                  = 0x1\n\tNFT_CT_STATUS                     = 0x2\n\tNFT_CT_MARK                       = 0x3\n\tNFT_CT_SECMARK                    = 0x4\n\tNFT_CT_EXPIRATION                 = 0x5\n\tNFT_CT_HELPER                     = 0x6\n\tNFT_CT_L3PROTOCOL                 = 0x7\n\tNFT_CT_SRC                        = 0x8\n\tNFT_CT_DST                        = 0x9\n\tNFT_CT_PROTOCOL                   = 0xa\n\tNFT_CT_PROTO_SRC                  = 0xb\n\tNFT_CT_PROTO_DST                  = 0xc\n\tNFT_CT_LABELS                     = 0xd\n\tNFT_CT_PKTS                       = 0xe\n\tNFT_CT_BYTES                      = 0xf\n\tNFT_CT_AVGPKT                     = 0x10\n\tNFT_CT_ZONE                       = 0x11\n\tNFT_CT_EVENTMASK                  = 0x12\n\tNFTA_CT_UNSPEC                    = 0x0\n\tNFTA_CT_DREG                      = 0x1\n\tNFTA_CT_KEY                       = 0x2\n\tNFTA_CT_DIRECTION                 = 0x3\n\tNFTA_CT_SREG                      = 0x4\n\tNFT_LIMIT_PKTS                    = 0x0\n\tNFT_LIMIT_PKT_BYTES               = 0x1\n\tNFT_LIMIT_F_INV                   = 0x1\n\tNFTA_LIMIT_UNSPEC                 = 0x0\n\tNFTA_LIMIT_RATE                   = 0x1\n\tNFTA_LIMIT_UNIT                   = 0x2\n\tNFTA_LIMIT_BURST                  = 0x3\n\tNFTA_LIMIT_TYPE                   = 0x4\n\tNFTA_LIMIT_FLAGS                  = 0x5\n\tNFTA_LIMIT_PAD                    = 0x6\n\tNFTA_COUNTER_UNSPEC               = 0x0\n\tNFTA_COUNTER_BYTES                = 0x1\n\tNFTA_COUNTER_PACKETS              = 0x2\n\tNFTA_COUNTER_PAD                  = 0x3\n\tNFTA_LOG_UNSPEC                   = 0x0\n\tNFTA_LOG_GROUP                    = 0x1\n\tNFTA_LOG_PREFIX                   = 0x2\n\tNFTA_LOG_SNAPLEN                  = 0x3\n\tNFTA_LOG_QTHRESHOLD               = 0x4\n\tNFTA_LOG_LEVEL                    = 0x5\n\tNFTA_LOG_FLAGS                    = 0x6\n\tNFTA_QUEUE_UNSPEC                 = 0x0\n\tNFTA_QUEUE_NUM                    = 0x1\n\tNFTA_QUEUE_TOTAL                  = 0x2\n\tNFTA_QUEUE_FLAGS                  = 0x3\n\tNFTA_QUEUE_SREG_QNUM              = 0x4\n\tNFT_QUOTA_F_INV                   = 0x1\n\tNFT_QUOTA_F_DEPLETED              = 0x2\n\tNFTA_QUOTA_UNSPEC                 = 0x0\n\tNFTA_QUOTA_BYTES                  = 0x1\n\tNFTA_QUOTA_FLAGS                  = 0x2\n\tNFTA_QUOTA_PAD                    = 0x3\n\tNFTA_QUOTA_CONSUMED               = 0x4\n\tNFT_REJECT_ICMP_UNREACH           = 0x0\n\tNFT_REJECT_TCP_RST                = 0x1\n\tNFT_REJECT_ICMPX_UNREACH          = 0x2\n\tNFT_REJECT_ICMPX_NO_ROUTE         = 0x0\n\tNFT_REJECT_ICMPX_PORT_UNREACH     = 0x1\n\tNFT_REJECT_ICMPX_HOST_UNREACH     = 0x2\n\tNFT_REJECT_ICMPX_ADMIN_PROHIBITED = 0x3\n\tNFTA_REJECT_UNSPEC                = 0x0\n\tNFTA_REJECT_TYPE                  = 0x1\n\tNFTA_REJECT_ICMP_CODE             = 0x2\n\tNFT_NAT_SNAT                      = 0x0\n\tNFT_NAT_DNAT                      = 0x1\n\tNFTA_NAT_UNSPEC                   = 0x0\n\tNFTA_NAT_TYPE                     = 0x1\n\tNFTA_NAT_FAMILY                   = 0x2\n\tNFTA_NAT_REG_ADDR_MIN             = 0x3\n\tNFTA_NAT_REG_ADDR_MAX             = 0x4\n\tNFTA_NAT_REG_PROTO_MIN            = 0x5\n\tNFTA_NAT_REG_PROTO_MAX            = 0x6\n\tNFTA_NAT_FLAGS                    = 0x7\n\tNFTA_MASQ_UNSPEC                  = 0x0\n\tNFTA_MASQ_FLAGS                   = 0x1\n\tNFTA_MASQ_REG_PROTO_MIN           = 0x2\n\tNFTA_MASQ_REG_PROTO_MAX           = 0x3\n\tNFTA_REDIR_UNSPEC                 = 0x0\n\tNFTA_REDIR_REG_PROTO_MIN          = 0x1\n\tNFTA_REDIR_REG_PROTO_MAX          = 0x2\n\tNFTA_REDIR_FLAGS                  = 0x3\n\tNFTA_DUP_UNSPEC                   = 0x0\n\tNFTA_DUP_SREG_ADDR                = 0x1\n\tNFTA_DUP_SREG_DEV                 = 0x2\n\tNFTA_FWD_UNSPEC                   = 0x0\n\tNFTA_FWD_SREG_DEV                 = 0x1\n\tNFTA_OBJREF_UNSPEC                = 0x0\n\tNFTA_OBJREF_IMM_TYPE              = 0x1\n\tNFTA_OBJREF_IMM_NAME              = 0x2\n\tNFTA_OBJREF_SET_SREG              = 0x3\n\tNFTA_OBJREF_SET_NAME              = 0x4\n\tNFTA_OBJREF_SET_ID                = 0x5\n\tNFTA_GEN_UNSPEC                   = 0x0\n\tNFTA_GEN_ID                       = 0x1\n\tNFTA_GEN_PROC_PID                 = 0x2\n\tNFTA_GEN_PROC_NAME                = 0x3\n\tNFTA_FIB_UNSPEC                   = 0x0\n\tNFTA_FIB_DREG                     = 0x1\n\tNFTA_FIB_RESULT                   = 0x2\n\tNFTA_FIB_FLAGS                    = 0x3\n\tNFT_FIB_RESULT_UNSPEC             = 0x0\n\tNFT_FIB_RESULT_OIF                = 0x1\n\tNFT_FIB_RESULT_OIFNAME            = 0x2\n\tNFT_FIB_RESULT_ADDRTYPE           = 0x3\n\tNFTA_FIB_F_SADDR                  = 0x1\n\tNFTA_FIB_F_DADDR                  = 0x2\n\tNFTA_FIB_F_MARK                   = 0x4\n\tNFTA_FIB_F_IIF                    = 0x8\n\tNFTA_FIB_F_OIF                    = 0x10\n\tNFTA_FIB_F_PRESENT                = 0x20\n\tNFTA_CT_HELPER_UNSPEC             = 0x0\n\tNFTA_CT_HELPER_NAME               = 0x1\n\tNFTA_CT_HELPER_L3PROTO            = 0x2\n\tNFTA_CT_HELPER_L4PROTO            = 0x3\n\tNFTA_OBJ_UNSPEC                   = 0x0\n\tNFTA_OBJ_TABLE                    = 0x1\n\tNFTA_OBJ_NAME                     = 0x2\n\tNFTA_OBJ_TYPE                     = 0x3\n\tNFTA_OBJ_DATA                     = 0x4\n\tNFTA_OBJ_USE                      = 0x5\n\tNFTA_TRACE_UNSPEC                 = 0x0\n\tNFTA_TRACE_TABLE                  = 0x1\n\tNFTA_TRACE_CHAIN                  = 0x2\n\tNFTA_TRACE_RULE_HANDLE            = 0x3\n\tNFTA_TRACE_TYPE                   = 0x4\n\tNFTA_TRACE_VERDICT                = 0x5\n\tNFTA_TRACE_ID                     = 0x6\n\tNFTA_TRACE_LL_HEADER              = 0x7\n\tNFTA_TRACE_NETWORK_HEADER         = 0x8\n\tNFTA_TRACE_TRANSPORT_HEADER       = 0x9\n\tNFTA_TRACE_IIF                    = 0xa\n\tNFTA_TRACE_IIFTYPE                = 0xb\n\tNFTA_TRACE_OIF                    = 0xc\n\tNFTA_TRACE_OIFTYPE                = 0xd\n\tNFTA_TRACE_MARK                   = 0xe\n\tNFTA_TRACE_NFPROTO                = 0xf\n\tNFTA_TRACE_POLICY                 = 0x10\n\tNFTA_TRACE_PAD                    = 0x11\n\tNFT_TRACETYPE_UNSPEC              = 0x0\n\tNFT_TRACETYPE_POLICY              = 0x1\n\tNFT_TRACETYPE_RETURN              = 0x2\n\tNFT_TRACETYPE_RULE                = 0x3\n\tNFTA_NG_UNSPEC                    = 0x0\n\tNFTA_NG_DREG                      = 0x1\n\tNFTA_NG_MODULUS                   = 0x2\n\tNFTA_NG_TYPE                      = 0x3\n\tNFTA_NG_OFFSET                    = 0x4\n\tNFT_NG_INCREMENTAL                = 0x0\n\tNFT_NG_RANDOM                     = 0x1\n)\n\ntype RTCTime struct {\n\tSec   int32\n\tMin   int32\n\tHour  int32\n\tMday  int32\n\tMon   int32\n\tYear  int32\n\tWday  int32\n\tYday  int32\n\tIsdst int32\n}\n\ntype RTCWkAlrm struct {\n\tEnabled uint8\n\tPending uint8\n\tTime    RTCTime\n}\n\ntype RTCPLLInfo struct {\n\tCtrl    int32\n\tValue   int32\n\tMax     int32\n\tMin     int32\n\tPosmult int32\n\tNegmult int32\n\tClock   int64\n}\n\ntype BlkpgIoctlArg struct {\n\tOp      int32\n\tFlags   int32\n\tDatalen int32\n\tData    *byte\n}\n\ntype BlkpgPartition struct {\n\tStart   int64\n\tLength  int64\n\tPno     int32\n\tDevname [64]uint8\n\tVolname [64]uint8\n\t_       [4]byte\n}\n\nconst (\n\tBLKPG                  = 0x20001269\n\tBLKPG_ADD_PARTITION    = 0x1\n\tBLKPG_DEL_PARTITION    = 0x2\n\tBLKPG_RESIZE_PARTITION = 0x3\n)\n\nconst (\n\tNETNSA_NONE = 0x0\n\tNETNSA_NSID = 0x1\n\tNETNSA_PID  = 0x2\n\tNETNSA_FD   = 0x3\n)\n\ntype XDPRingOffset struct {\n\tProducer uint64\n\tConsumer uint64\n\tDesc     uint64\n}\n\ntype XDPMmapOffsets struct {\n\tRx XDPRingOffset\n\tTx XDPRingOffset\n\tFr XDPRingOffset\n\tCr XDPRingOffset\n}\n\ntype XDPUmemReg struct {\n\tAddr     uint64\n\tLen      uint64\n\tSize     uint32\n\tHeadroom uint32\n}\n\ntype XDPStatistics struct {\n\tRx_dropped       uint64\n\tRx_invalid_descs uint64\n\tTx_invalid_descs uint64\n}\n\ntype XDPDesc struct {\n\tAddr    uint64\n\tLen     uint32\n\tOptions uint32\n}\n\nconst (\n\tNCSI_CMD_UNSPEC                 = 0x0\n\tNCSI_CMD_PKG_INFO               = 0x1\n\tNCSI_CMD_SET_INTERFACE          = 0x2\n\tNCSI_CMD_CLEAR_INTERFACE        = 0x3\n\tNCSI_ATTR_UNSPEC                = 0x0\n\tNCSI_ATTR_IFINDEX               = 0x1\n\tNCSI_ATTR_PACKAGE_LIST          = 0x2\n\tNCSI_ATTR_PACKAGE_ID            = 0x3\n\tNCSI_ATTR_CHANNEL_ID            = 0x4\n\tNCSI_PKG_ATTR_UNSPEC            = 0x0\n\tNCSI_PKG_ATTR                   = 0x1\n\tNCSI_PKG_ATTR_ID                = 0x2\n\tNCSI_PKG_ATTR_FORCED            = 0x3\n\tNCSI_PKG_ATTR_CHANNEL_LIST      = 0x4\n\tNCSI_CHANNEL_ATTR_UNSPEC        = 0x0\n\tNCSI_CHANNEL_ATTR               = 0x1\n\tNCSI_CHANNEL_ATTR_ID            = 0x2\n\tNCSI_CHANNEL_ATTR_VERSION_MAJOR = 0x3\n\tNCSI_CHANNEL_ATTR_VERSION_MINOR = 0x4\n\tNCSI_CHANNEL_ATTR_VERSION_STR   = 0x5\n\tNCSI_CHANNEL_ATTR_LINK_STATE    = 0x6\n\tNCSI_CHANNEL_ATTR_ACTIVE        = 0x7\n\tNCSI_CHANNEL_ATTR_FORCED        = 0x8\n\tNCSI_CHANNEL_ATTR_VLAN_LIST     = 0x9\n\tNCSI_CHANNEL_ATTR_VLAN_ID       = 0xa\n)\n\ntype ScmTimestamping struct {\n\tTs [3]Timespec\n}\n\nconst (\n\tSOF_TIMESTAMPING_TX_HARDWARE  = 0x1\n\tSOF_TIMESTAMPING_TX_SOFTWARE  = 0x2\n\tSOF_TIMESTAMPING_RX_HARDWARE  = 0x4\n\tSOF_TIMESTAMPING_RX_SOFTWARE  = 0x8\n\tSOF_TIMESTAMPING_SOFTWARE     = 0x10\n\tSOF_TIMESTAMPING_SYS_HARDWARE = 0x20\n\tSOF_TIMESTAMPING_RAW_HARDWARE = 0x40\n\tSOF_TIMESTAMPING_OPT_ID       = 0x80\n\tSOF_TIMESTAMPING_TX_SCHED     = 0x100\n\tSOF_TIMESTAMPING_TX_ACK       = 0x200\n\tSOF_TIMESTAMPING_OPT_CMSG     = 0x400\n\tSOF_TIMESTAMPING_OPT_TSONLY   = 0x800\n\tSOF_TIMESTAMPING_OPT_STATS    = 0x1000\n\tSOF_TIMESTAMPING_OPT_PKTINFO  = 0x2000\n\tSOF_TIMESTAMPING_OPT_TX_SWHW  = 0x4000\n\n\tSOF_TIMESTAMPING_LAST = 0x4000\n\tSOF_TIMESTAMPING_MASK = 0x7fff\n\n\tSCM_TSTAMP_SND   = 0x0\n\tSCM_TSTAMP_SCHED = 0x1\n\tSCM_TSTAMP_ACK   = 0x2\n)\n\ntype SockExtendedErr struct {\n\tErrno  uint32\n\tOrigin uint8\n\tType   uint8\n\tCode   uint8\n\tPad    uint8\n\tInfo   uint32\n\tData   uint32\n}\n\ntype FanotifyEventMetadata struct {\n\tEvent_len    uint32\n\tVers         uint8\n\tReserved     uint8\n\tMetadata_len uint16\n\tMask         uint64\n\tFd           int32\n\tPid          int32\n}\n\ntype FanotifyResponse struct {\n\tFd       int32\n\tResponse uint32\n}\n\nconst (\n\tCRYPTO_MSG_BASE      = 0x10\n\tCRYPTO_MSG_NEWALG    = 0x10\n\tCRYPTO_MSG_DELALG    = 0x11\n\tCRYPTO_MSG_UPDATEALG = 0x12\n\tCRYPTO_MSG_GETALG    = 0x13\n\tCRYPTO_MSG_DELRNG    = 0x14\n\tCRYPTO_MSG_GETSTAT   = 0x15\n)\n\nconst (\n\tCRYPTOCFGA_UNSPEC           = 0x0\n\tCRYPTOCFGA_PRIORITY_VAL     = 0x1\n\tCRYPTOCFGA_REPORT_LARVAL    = 0x2\n\tCRYPTOCFGA_REPORT_HASH      = 0x3\n\tCRYPTOCFGA_REPORT_BLKCIPHER = 0x4\n\tCRYPTOCFGA_REPORT_AEAD      = 0x5\n\tCRYPTOCFGA_REPORT_COMPRESS  = 0x6\n\tCRYPTOCFGA_REPORT_RNG       = 0x7\n\tCRYPTOCFGA_REPORT_CIPHER    = 0x8\n\tCRYPTOCFGA_REPORT_AKCIPHER  = 0x9\n\tCRYPTOCFGA_REPORT_KPP       = 0xa\n\tCRYPTOCFGA_REPORT_ACOMP     = 0xb\n\tCRYPTOCFGA_STAT_LARVAL      = 0xc\n\tCRYPTOCFGA_STAT_HASH        = 0xd\n\tCRYPTOCFGA_STAT_BLKCIPHER   = 0xe\n\tCRYPTOCFGA_STAT_AEAD        = 0xf\n\tCRYPTOCFGA_STAT_COMPRESS    = 0x10\n\tCRYPTOCFGA_STAT_RNG         = 0x11\n\tCRYPTOCFGA_STAT_CIPHER      = 0x12\n\tCRYPTOCFGA_STAT_AKCIPHER    = 0x13\n\tCRYPTOCFGA_STAT_KPP         = 0x14\n\tCRYPTOCFGA_STAT_ACOMP       = 0x15\n)\n\ntype CryptoUserAlg struct {\n\tName        [64]int8\n\tDriver_name [64]int8\n\tModule_name [64]int8\n\tType        uint32\n\tMask        uint32\n\tRefcnt      uint32\n\tFlags       uint32\n}\n\ntype CryptoStatAEAD struct {\n\tType         [64]int8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatAKCipher struct {\n\tType         [64]int8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tVerify_cnt   uint64\n\tSign_cnt     uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatCipher struct {\n\tType         [64]int8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatCompress struct {\n\tType            [64]int8\n\tCompress_cnt    uint64\n\tCompress_tlen   uint64\n\tDecompress_cnt  uint64\n\tDecompress_tlen uint64\n\tErr_cnt         uint64\n}\n\ntype CryptoStatHash struct {\n\tType      [64]int8\n\tHash_cnt  uint64\n\tHash_tlen uint64\n\tErr_cnt   uint64\n}\n\ntype CryptoStatKPP struct {\n\tType                      [64]int8\n\tSetsecret_cnt             uint64\n\tGenerate_public_key_cnt   uint64\n\tCompute_shared_secret_cnt uint64\n\tErr_cnt                   uint64\n}\n\ntype CryptoStatRNG struct {\n\tType          [64]int8\n\tGenerate_cnt  uint64\n\tGenerate_tlen uint64\n\tSeed_cnt      uint64\n\tErr_cnt       uint64\n}\n\ntype CryptoStatLarval struct {\n\tType [64]int8\n}\n\ntype CryptoReportLarval struct {\n\tType [64]int8\n}\n\ntype CryptoReportHash struct {\n\tType       [64]int8\n\tBlocksize  uint32\n\tDigestsize uint32\n}\n\ntype CryptoReportCipher struct {\n\tType        [64]int8\n\tBlocksize   uint32\n\tMin_keysize uint32\n\tMax_keysize uint32\n}\n\ntype CryptoReportBlkCipher struct {\n\tType        [64]int8\n\tGeniv       [64]int8\n\tBlocksize   uint32\n\tMin_keysize uint32\n\tMax_keysize uint32\n\tIvsize      uint32\n}\n\ntype CryptoReportAEAD struct {\n\tType        [64]int8\n\tGeniv       [64]int8\n\tBlocksize   uint32\n\tMaxauthsize uint32\n\tIvsize      uint32\n}\n\ntype CryptoReportComp struct {\n\tType [64]int8\n}\n\ntype CryptoReportRNG struct {\n\tType     [64]int8\n\tSeedsize uint32\n}\n\ntype CryptoReportAKCipher struct {\n\tType [64]int8\n}\n\ntype CryptoReportKPP struct {\n\tType [64]int8\n}\n\ntype CryptoReportAcomp struct {\n\tType [64]int8\n}\n\nconst (\n\tBPF_REG_0                           = 0x0\n\tBPF_REG_1                           = 0x1\n\tBPF_REG_2                           = 0x2\n\tBPF_REG_3                           = 0x3\n\tBPF_REG_4                           = 0x4\n\tBPF_REG_5                           = 0x5\n\tBPF_REG_6                           = 0x6\n\tBPF_REG_7                           = 0x7\n\tBPF_REG_8                           = 0x8\n\tBPF_REG_9                           = 0x9\n\tBPF_REG_10                          = 0xa\n\tBPF_MAP_CREATE                      = 0x0\n\tBPF_MAP_LOOKUP_ELEM                 = 0x1\n\tBPF_MAP_UPDATE_ELEM                 = 0x2\n\tBPF_MAP_DELETE_ELEM                 = 0x3\n\tBPF_MAP_GET_NEXT_KEY                = 0x4\n\tBPF_PROG_LOAD                       = 0x5\n\tBPF_OBJ_PIN                         = 0x6\n\tBPF_OBJ_GET                         = 0x7\n\tBPF_PROG_ATTACH                     = 0x8\n\tBPF_PROG_DETACH                     = 0x9\n\tBPF_PROG_TEST_RUN                   = 0xa\n\tBPF_PROG_GET_NEXT_ID                = 0xb\n\tBPF_MAP_GET_NEXT_ID                 = 0xc\n\tBPF_PROG_GET_FD_BY_ID               = 0xd\n\tBPF_MAP_GET_FD_BY_ID                = 0xe\n\tBPF_OBJ_GET_INFO_BY_FD              = 0xf\n\tBPF_PROG_QUERY                      = 0x10\n\tBPF_RAW_TRACEPOINT_OPEN             = 0x11\n\tBPF_BTF_LOAD                        = 0x12\n\tBPF_BTF_GET_FD_BY_ID                = 0x13\n\tBPF_TASK_FD_QUERY                   = 0x14\n\tBPF_MAP_LOOKUP_AND_DELETE_ELEM      = 0x15\n\tBPF_MAP_TYPE_UNSPEC                 = 0x0\n\tBPF_MAP_TYPE_HASH                   = 0x1\n\tBPF_MAP_TYPE_ARRAY                  = 0x2\n\tBPF_MAP_TYPE_PROG_ARRAY             = 0x3\n\tBPF_MAP_TYPE_PERF_EVENT_ARRAY       = 0x4\n\tBPF_MAP_TYPE_PERCPU_HASH            = 0x5\n\tBPF_MAP_TYPE_PERCPU_ARRAY           = 0x6\n\tBPF_MAP_TYPE_STACK_TRACE            = 0x7\n\tBPF_MAP_TYPE_CGROUP_ARRAY           = 0x8\n\tBPF_MAP_TYPE_LRU_HASH               = 0x9\n\tBPF_MAP_TYPE_LRU_PERCPU_HASH        = 0xa\n\tBPF_MAP_TYPE_LPM_TRIE               = 0xb\n\tBPF_MAP_TYPE_ARRAY_OF_MAPS          = 0xc\n\tBPF_MAP_TYPE_HASH_OF_MAPS           = 0xd\n\tBPF_MAP_TYPE_DEVMAP                 = 0xe\n\tBPF_MAP_TYPE_SOCKMAP                = 0xf\n\tBPF_MAP_TYPE_CPUMAP                 = 0x10\n\tBPF_MAP_TYPE_XSKMAP                 = 0x11\n\tBPF_MAP_TYPE_SOCKHASH               = 0x12\n\tBPF_MAP_TYPE_CGROUP_STORAGE         = 0x13\n\tBPF_MAP_TYPE_REUSEPORT_SOCKARRAY    = 0x14\n\tBPF_MAP_TYPE_PERCPU_CGROUP_STORAGE  = 0x15\n\tBPF_MAP_TYPE_QUEUE                  = 0x16\n\tBPF_MAP_TYPE_STACK                  = 0x17\n\tBPF_PROG_TYPE_UNSPEC                = 0x0\n\tBPF_PROG_TYPE_SOCKET_FILTER         = 0x1\n\tBPF_PROG_TYPE_KPROBE                = 0x2\n\tBPF_PROG_TYPE_SCHED_CLS             = 0x3\n\tBPF_PROG_TYPE_SCHED_ACT             = 0x4\n\tBPF_PROG_TYPE_TRACEPOINT            = 0x5\n\tBPF_PROG_TYPE_XDP                   = 0x6\n\tBPF_PROG_TYPE_PERF_EVENT            = 0x7\n\tBPF_PROG_TYPE_CGROUP_SKB            = 0x8\n\tBPF_PROG_TYPE_CGROUP_SOCK           = 0x9\n\tBPF_PROG_TYPE_LWT_IN                = 0xa\n\tBPF_PROG_TYPE_LWT_OUT               = 0xb\n\tBPF_PROG_TYPE_LWT_XMIT              = 0xc\n\tBPF_PROG_TYPE_SOCK_OPS              = 0xd\n\tBPF_PROG_TYPE_SK_SKB                = 0xe\n\tBPF_PROG_TYPE_CGROUP_DEVICE         = 0xf\n\tBPF_PROG_TYPE_SK_MSG                = 0x10\n\tBPF_PROG_TYPE_RAW_TRACEPOINT        = 0x11\n\tBPF_PROG_TYPE_CGROUP_SOCK_ADDR      = 0x12\n\tBPF_PROG_TYPE_LWT_SEG6LOCAL         = 0x13\n\tBPF_PROG_TYPE_LIRC_MODE2            = 0x14\n\tBPF_PROG_TYPE_SK_REUSEPORT          = 0x15\n\tBPF_PROG_TYPE_FLOW_DISSECTOR        = 0x16\n\tBPF_CGROUP_INET_INGRESS             = 0x0\n\tBPF_CGROUP_INET_EGRESS              = 0x1\n\tBPF_CGROUP_INET_SOCK_CREATE         = 0x2\n\tBPF_CGROUP_SOCK_OPS                 = 0x3\n\tBPF_SK_SKB_STREAM_PARSER            = 0x4\n\tBPF_SK_SKB_STREAM_VERDICT           = 0x5\n\tBPF_CGROUP_DEVICE                   = 0x6\n\tBPF_SK_MSG_VERDICT                  = 0x7\n\tBPF_CGROUP_INET4_BIND               = 0x8\n\tBPF_CGROUP_INET6_BIND               = 0x9\n\tBPF_CGROUP_INET4_CONNECT            = 0xa\n\tBPF_CGROUP_INET6_CONNECT            = 0xb\n\tBPF_CGROUP_INET4_POST_BIND          = 0xc\n\tBPF_CGROUP_INET6_POST_BIND          = 0xd\n\tBPF_CGROUP_UDP4_SENDMSG             = 0xe\n\tBPF_CGROUP_UDP6_SENDMSG             = 0xf\n\tBPF_LIRC_MODE2                      = 0x10\n\tBPF_FLOW_DISSECTOR                  = 0x11\n\tBPF_STACK_BUILD_ID_EMPTY            = 0x0\n\tBPF_STACK_BUILD_ID_VALID            = 0x1\n\tBPF_STACK_BUILD_ID_IP               = 0x2\n\tBPF_ADJ_ROOM_NET                    = 0x0\n\tBPF_HDR_START_MAC                   = 0x0\n\tBPF_HDR_START_NET                   = 0x1\n\tBPF_LWT_ENCAP_SEG6                  = 0x0\n\tBPF_LWT_ENCAP_SEG6_INLINE           = 0x1\n\tBPF_OK                              = 0x0\n\tBPF_DROP                            = 0x2\n\tBPF_REDIRECT                        = 0x7\n\tBPF_SOCK_OPS_VOID                   = 0x0\n\tBPF_SOCK_OPS_TIMEOUT_INIT           = 0x1\n\tBPF_SOCK_OPS_RWND_INIT              = 0x2\n\tBPF_SOCK_OPS_TCP_CONNECT_CB         = 0x3\n\tBPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB  = 0x4\n\tBPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB = 0x5\n\tBPF_SOCK_OPS_NEEDS_ECN              = 0x6\n\tBPF_SOCK_OPS_BASE_RTT               = 0x7\n\tBPF_SOCK_OPS_RTO_CB                 = 0x8\n\tBPF_SOCK_OPS_RETRANS_CB             = 0x9\n\tBPF_SOCK_OPS_STATE_CB               = 0xa\n\tBPF_SOCK_OPS_TCP_LISTEN_CB          = 0xb\n\tBPF_TCP_ESTABLISHED                 = 0x1\n\tBPF_TCP_SYN_SENT                    = 0x2\n\tBPF_TCP_SYN_RECV                    = 0x3\n\tBPF_TCP_FIN_WAIT1                   = 0x4\n\tBPF_TCP_FIN_WAIT2                   = 0x5\n\tBPF_TCP_TIME_WAIT                   = 0x6\n\tBPF_TCP_CLOSE                       = 0x7\n\tBPF_TCP_CLOSE_WAIT                  = 0x8\n\tBPF_TCP_LAST_ACK                    = 0x9\n\tBPF_TCP_LISTEN                      = 0xa\n\tBPF_TCP_CLOSING                     = 0xb\n\tBPF_TCP_NEW_SYN_RECV                = 0xc\n\tBPF_TCP_MAX_STATES                  = 0xd\n\tBPF_FIB_LKUP_RET_SUCCESS            = 0x0\n\tBPF_FIB_LKUP_RET_BLACKHOLE          = 0x1\n\tBPF_FIB_LKUP_RET_UNREACHABLE        = 0x2\n\tBPF_FIB_LKUP_RET_PROHIBIT           = 0x3\n\tBPF_FIB_LKUP_RET_NOT_FWDED          = 0x4\n\tBPF_FIB_LKUP_RET_FWD_DISABLED       = 0x5\n\tBPF_FIB_LKUP_RET_UNSUPP_LWT         = 0x6\n\tBPF_FIB_LKUP_RET_NO_NEIGH           = 0x7\n\tBPF_FIB_LKUP_RET_FRAG_NEEDED        = 0x8\n\tBPF_FD_TYPE_RAW_TRACEPOINT          = 0x0\n\tBPF_FD_TYPE_TRACEPOINT              = 0x1\n\tBPF_FD_TYPE_KPROBE                  = 0x2\n\tBPF_FD_TYPE_KRETPROBE               = 0x3\n\tBPF_FD_TYPE_UPROBE                  = 0x4\n\tBPF_FD_TYPE_URETPROBE               = 0x5\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go",
    "content": "// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build mips64le,linux\n\npackage unix\n\nconst (\n\tSizeofPtr      = 0x8\n\tSizeofShort    = 0x2\n\tSizeofInt      = 0x4\n\tSizeofLong     = 0x8\n\tSizeofLongLong = 0x8\n\tPathMax        = 0x1000\n)\n\ntype (\n\t_C_short     int16\n\t_C_int       int32\n\t_C_long      int64\n\t_C_long_long int64\n)\n\ntype Timespec struct {\n\tSec  int64\n\tNsec int64\n}\n\ntype Timeval struct {\n\tSec  int64\n\tUsec int64\n}\n\ntype Timex struct {\n\tModes     uint32\n\tOffset    int64\n\tFreq      int64\n\tMaxerror  int64\n\tEsterror  int64\n\tStatus    int32\n\tConstant  int64\n\tPrecision int64\n\tTolerance int64\n\tTime      Timeval\n\tTick      int64\n\tPpsfreq   int64\n\tJitter    int64\n\tShift     int32\n\tStabil    int64\n\tJitcnt    int64\n\tCalcnt    int64\n\tErrcnt    int64\n\tStbcnt    int64\n\tTai       int32\n\t_         [44]byte\n}\n\ntype Time_t int64\n\ntype Tms struct {\n\tUtime  int64\n\tStime  int64\n\tCutime int64\n\tCstime int64\n}\n\ntype Utimbuf struct {\n\tActime  int64\n\tModtime int64\n}\n\ntype Rusage struct {\n\tUtime    Timeval\n\tStime    Timeval\n\tMaxrss   int64\n\tIxrss    int64\n\tIdrss    int64\n\tIsrss    int64\n\tMinflt   int64\n\tMajflt   int64\n\tNswap    int64\n\tInblock  int64\n\tOublock  int64\n\tMsgsnd   int64\n\tMsgrcv   int64\n\tNsignals int64\n\tNvcsw    int64\n\tNivcsw   int64\n}\n\ntype Rlimit struct {\n\tCur uint64\n\tMax uint64\n}\n\ntype _Gid_t uint32\n\ntype Stat_t struct {\n\tDev     uint32\n\tPad1    [3]uint32\n\tIno     uint64\n\tMode    uint32\n\tNlink   uint32\n\tUid     uint32\n\tGid     uint32\n\tRdev    uint32\n\tPad2    [3]uint32\n\tSize    int64\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\tBlksize uint32\n\tPad4    uint32\n\tBlocks  int64\n}\n\ntype StatxTimestamp struct {\n\tSec  int64\n\tNsec uint32\n\t_    int32\n}\n\ntype Statx_t struct {\n\tMask            uint32\n\tBlksize         uint32\n\tAttributes      uint64\n\tNlink           uint32\n\tUid             uint32\n\tGid             uint32\n\tMode            uint16\n\t_               [1]uint16\n\tIno             uint64\n\tSize            uint64\n\tBlocks          uint64\n\tAttributes_mask uint64\n\tAtime           StatxTimestamp\n\tBtime           StatxTimestamp\n\tCtime           StatxTimestamp\n\tMtime           StatxTimestamp\n\tRdev_major      uint32\n\tRdev_minor      uint32\n\tDev_major       uint32\n\tDev_minor       uint32\n\t_               [14]uint64\n}\n\ntype Dirent struct {\n\tIno    uint64\n\tOff    int64\n\tReclen uint16\n\tType   uint8\n\tName   [256]int8\n\t_      [5]byte\n}\n\ntype Fsid struct {\n\tVal [2]int32\n}\n\ntype Flock_t struct {\n\tType   int16\n\tWhence int16\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\t_      [4]byte\n}\n\ntype FscryptPolicy struct {\n\tVersion                   uint8\n\tContents_encryption_mode  uint8\n\tFilenames_encryption_mode uint8\n\tFlags                     uint8\n\tMaster_key_descriptor     [8]uint8\n}\n\ntype FscryptKey struct {\n\tMode uint32\n\tRaw  [64]uint8\n\tSize uint32\n}\n\ntype KeyctlDHParams struct {\n\tPrivate int32\n\tPrime   int32\n\tBase    int32\n}\n\nconst (\n\tFADV_NORMAL     = 0x0\n\tFADV_RANDOM     = 0x1\n\tFADV_SEQUENTIAL = 0x2\n\tFADV_WILLNEED   = 0x3\n\tFADV_DONTNEED   = 0x4\n\tFADV_NOREUSE    = 0x5\n)\n\ntype RawSockaddrInet4 struct {\n\tFamily uint16\n\tPort   uint16\n\tAddr   [4]byte /* in_addr */\n\tZero   [8]uint8\n}\n\ntype RawSockaddrInet6 struct {\n\tFamily   uint16\n\tPort     uint16\n\tFlowinfo uint32\n\tAddr     [16]byte /* in6_addr */\n\tScope_id uint32\n}\n\ntype RawSockaddrUnix struct {\n\tFamily uint16\n\tPath   [108]int8\n}\n\ntype RawSockaddrLinklayer struct {\n\tFamily   uint16\n\tProtocol uint16\n\tIfindex  int32\n\tHatype   uint16\n\tPkttype  uint8\n\tHalen    uint8\n\tAddr     [8]uint8\n}\n\ntype RawSockaddrNetlink struct {\n\tFamily uint16\n\tPad    uint16\n\tPid    uint32\n\tGroups uint32\n}\n\ntype RawSockaddrHCI struct {\n\tFamily  uint16\n\tDev     uint16\n\tChannel uint16\n}\n\ntype RawSockaddrL2 struct {\n\tFamily      uint16\n\tPsm         uint16\n\tBdaddr      [6]uint8\n\tCid         uint16\n\tBdaddr_type uint8\n\t_           [1]byte\n}\n\ntype RawSockaddrRFCOMM struct {\n\tFamily  uint16\n\tBdaddr  [6]uint8\n\tChannel uint8\n\t_       [1]byte\n}\n\ntype RawSockaddrCAN struct {\n\tFamily  uint16\n\tIfindex int32\n\tAddr    [8]byte\n}\n\ntype RawSockaddrALG struct {\n\tFamily uint16\n\tType   [14]uint8\n\tFeat   uint32\n\tMask   uint32\n\tName   [64]uint8\n}\n\ntype RawSockaddrVM struct {\n\tFamily    uint16\n\tReserved1 uint16\n\tPort      uint32\n\tCid       uint32\n\tZero      [4]uint8\n}\n\ntype RawSockaddrXDP struct {\n\tFamily         uint16\n\tFlags          uint16\n\tIfindex        uint32\n\tQueue_id       uint32\n\tShared_umem_fd uint32\n}\n\ntype RawSockaddrPPPoX [0x1e]byte\n\ntype RawSockaddr struct {\n\tFamily uint16\n\tData   [14]int8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [96]int8\n}\n\ntype _Socklen uint32\n\ntype Linger struct {\n\tOnoff  int32\n\tLinger int32\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint64\n}\n\ntype IPMreq struct {\n\tMultiaddr [4]byte /* in_addr */\n\tInterface [4]byte /* in_addr */\n}\n\ntype IPMreqn struct {\n\tMultiaddr [4]byte /* in_addr */\n\tAddress   [4]byte /* in_addr */\n\tIfindex   int32\n}\n\ntype IPv6Mreq struct {\n\tMultiaddr [16]byte /* in6_addr */\n\tInterface uint32\n}\n\ntype PacketMreq struct {\n\tIfindex int32\n\tType    uint16\n\tAlen    uint16\n\tAddress [8]uint8\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tIov        *Iovec\n\tIovlen     uint64\n\tControl    *byte\n\tControllen uint64\n\tFlags      int32\n\t_          [4]byte\n}\n\ntype Cmsghdr struct {\n\tLen   uint64\n\tLevel int32\n\tType  int32\n}\n\ntype Inet4Pktinfo struct {\n\tIfindex  int32\n\tSpec_dst [4]byte /* in_addr */\n\tAddr     [4]byte /* in_addr */\n}\n\ntype Inet6Pktinfo struct {\n\tAddr    [16]byte /* in6_addr */\n\tIfindex uint32\n}\n\ntype IPv6MTUInfo struct {\n\tAddr RawSockaddrInet6\n\tMtu  uint32\n}\n\ntype ICMPv6Filter struct {\n\tData [8]uint32\n}\n\ntype Ucred struct {\n\tPid int32\n\tUid uint32\n\tGid uint32\n}\n\ntype TCPInfo struct {\n\tState          uint8\n\tCa_state       uint8\n\tRetransmits    uint8\n\tProbes         uint8\n\tBackoff        uint8\n\tOptions        uint8\n\tRto            uint32\n\tAto            uint32\n\tSnd_mss        uint32\n\tRcv_mss        uint32\n\tUnacked        uint32\n\tSacked         uint32\n\tLost           uint32\n\tRetrans        uint32\n\tFackets        uint32\n\tLast_data_sent uint32\n\tLast_ack_sent  uint32\n\tLast_data_recv uint32\n\tLast_ack_recv  uint32\n\tPmtu           uint32\n\tRcv_ssthresh   uint32\n\tRtt            uint32\n\tRttvar         uint32\n\tSnd_ssthresh   uint32\n\tSnd_cwnd       uint32\n\tAdvmss         uint32\n\tReordering     uint32\n\tRcv_rtt        uint32\n\tRcv_space      uint32\n\tTotal_retrans  uint32\n}\n\ntype CanFilter struct {\n\tId   uint32\n\tMask uint32\n}\n\nconst (\n\tSizeofSockaddrInet4     = 0x10\n\tSizeofSockaddrInet6     = 0x1c\n\tSizeofSockaddrAny       = 0x70\n\tSizeofSockaddrUnix      = 0x6e\n\tSizeofSockaddrLinklayer = 0x14\n\tSizeofSockaddrNetlink   = 0xc\n\tSizeofSockaddrHCI       = 0x6\n\tSizeofSockaddrL2        = 0xe\n\tSizeofSockaddrRFCOMM    = 0xa\n\tSizeofSockaddrCAN       = 0x10\n\tSizeofSockaddrALG       = 0x58\n\tSizeofSockaddrVM        = 0x10\n\tSizeofSockaddrXDP       = 0x10\n\tSizeofSockaddrPPPoX     = 0x1e\n\tSizeofLinger            = 0x8\n\tSizeofIovec             = 0x10\n\tSizeofIPMreq            = 0x8\n\tSizeofIPMreqn           = 0xc\n\tSizeofIPv6Mreq          = 0x14\n\tSizeofPacketMreq        = 0x10\n\tSizeofMsghdr            = 0x38\n\tSizeofCmsghdr           = 0x10\n\tSizeofInet4Pktinfo      = 0xc\n\tSizeofInet6Pktinfo      = 0x14\n\tSizeofIPv6MTUInfo       = 0x20\n\tSizeofICMPv6Filter      = 0x20\n\tSizeofUcred             = 0xc\n\tSizeofTCPInfo           = 0x68\n\tSizeofCanFilter         = 0x8\n)\n\nconst (\n\tNDA_UNSPEC              = 0x0\n\tNDA_DST                 = 0x1\n\tNDA_LLADDR              = 0x2\n\tNDA_CACHEINFO           = 0x3\n\tNDA_PROBES              = 0x4\n\tNDA_VLAN                = 0x5\n\tNDA_PORT                = 0x6\n\tNDA_VNI                 = 0x7\n\tNDA_IFINDEX             = 0x8\n\tNDA_MASTER              = 0x9\n\tNDA_LINK_NETNSID        = 0xa\n\tNDA_SRC_VNI             = 0xb\n\tNTF_USE                 = 0x1\n\tNTF_SELF                = 0x2\n\tNTF_MASTER              = 0x4\n\tNTF_PROXY               = 0x8\n\tNTF_EXT_LEARNED         = 0x10\n\tNTF_OFFLOADED           = 0x20\n\tNTF_ROUTER              = 0x80\n\tNUD_INCOMPLETE          = 0x1\n\tNUD_REACHABLE           = 0x2\n\tNUD_STALE               = 0x4\n\tNUD_DELAY               = 0x8\n\tNUD_PROBE               = 0x10\n\tNUD_FAILED              = 0x20\n\tNUD_NOARP               = 0x40\n\tNUD_PERMANENT           = 0x80\n\tNUD_NONE                = 0x0\n\tIFA_UNSPEC              = 0x0\n\tIFA_ADDRESS             = 0x1\n\tIFA_LOCAL               = 0x2\n\tIFA_LABEL               = 0x3\n\tIFA_BROADCAST           = 0x4\n\tIFA_ANYCAST             = 0x5\n\tIFA_CACHEINFO           = 0x6\n\tIFA_MULTICAST           = 0x7\n\tIFA_FLAGS               = 0x8\n\tIFA_RT_PRIORITY         = 0x9\n\tIFA_TARGET_NETNSID      = 0xa\n\tIFLA_UNSPEC             = 0x0\n\tIFLA_ADDRESS            = 0x1\n\tIFLA_BROADCAST          = 0x2\n\tIFLA_IFNAME             = 0x3\n\tIFLA_MTU                = 0x4\n\tIFLA_LINK               = 0x5\n\tIFLA_QDISC              = 0x6\n\tIFLA_STATS              = 0x7\n\tIFLA_COST               = 0x8\n\tIFLA_PRIORITY           = 0x9\n\tIFLA_MASTER             = 0xa\n\tIFLA_WIRELESS           = 0xb\n\tIFLA_PROTINFO           = 0xc\n\tIFLA_TXQLEN             = 0xd\n\tIFLA_MAP                = 0xe\n\tIFLA_WEIGHT             = 0xf\n\tIFLA_OPERSTATE          = 0x10\n\tIFLA_LINKMODE           = 0x11\n\tIFLA_LINKINFO           = 0x12\n\tIFLA_NET_NS_PID         = 0x13\n\tIFLA_IFALIAS            = 0x14\n\tIFLA_NUM_VF             = 0x15\n\tIFLA_VFINFO_LIST        = 0x16\n\tIFLA_STATS64            = 0x17\n\tIFLA_VF_PORTS           = 0x18\n\tIFLA_PORT_SELF          = 0x19\n\tIFLA_AF_SPEC            = 0x1a\n\tIFLA_GROUP              = 0x1b\n\tIFLA_NET_NS_FD          = 0x1c\n\tIFLA_EXT_MASK           = 0x1d\n\tIFLA_PROMISCUITY        = 0x1e\n\tIFLA_NUM_TX_QUEUES      = 0x1f\n\tIFLA_NUM_RX_QUEUES      = 0x20\n\tIFLA_CARRIER            = 0x21\n\tIFLA_PHYS_PORT_ID       = 0x22\n\tIFLA_CARRIER_CHANGES    = 0x23\n\tIFLA_PHYS_SWITCH_ID     = 0x24\n\tIFLA_LINK_NETNSID       = 0x25\n\tIFLA_PHYS_PORT_NAME     = 0x26\n\tIFLA_PROTO_DOWN         = 0x27\n\tIFLA_GSO_MAX_SEGS       = 0x28\n\tIFLA_GSO_MAX_SIZE       = 0x29\n\tIFLA_PAD                = 0x2a\n\tIFLA_XDP                = 0x2b\n\tIFLA_EVENT              = 0x2c\n\tIFLA_NEW_NETNSID        = 0x2d\n\tIFLA_IF_NETNSID         = 0x2e\n\tIFLA_TARGET_NETNSID     = 0x2e\n\tIFLA_CARRIER_UP_COUNT   = 0x2f\n\tIFLA_CARRIER_DOWN_COUNT = 0x30\n\tIFLA_NEW_IFINDEX        = 0x31\n\tIFLA_MIN_MTU            = 0x32\n\tIFLA_MAX_MTU            = 0x33\n\tIFLA_MAX                = 0x33\n\tIFLA_INFO_KIND          = 0x1\n\tIFLA_INFO_DATA          = 0x2\n\tIFLA_INFO_XSTATS        = 0x3\n\tIFLA_INFO_SLAVE_KIND    = 0x4\n\tIFLA_INFO_SLAVE_DATA    = 0x5\n\tRT_SCOPE_UNIVERSE       = 0x0\n\tRT_SCOPE_SITE           = 0xc8\n\tRT_SCOPE_LINK           = 0xfd\n\tRT_SCOPE_HOST           = 0xfe\n\tRT_SCOPE_NOWHERE        = 0xff\n\tRT_TABLE_UNSPEC         = 0x0\n\tRT_TABLE_COMPAT         = 0xfc\n\tRT_TABLE_DEFAULT        = 0xfd\n\tRT_TABLE_MAIN           = 0xfe\n\tRT_TABLE_LOCAL          = 0xff\n\tRT_TABLE_MAX            = 0xffffffff\n\tRTA_UNSPEC              = 0x0\n\tRTA_DST                 = 0x1\n\tRTA_SRC                 = 0x2\n\tRTA_IIF                 = 0x3\n\tRTA_OIF                 = 0x4\n\tRTA_GATEWAY             = 0x5\n\tRTA_PRIORITY            = 0x6\n\tRTA_PREFSRC             = 0x7\n\tRTA_METRICS             = 0x8\n\tRTA_MULTIPATH           = 0x9\n\tRTA_FLOW                = 0xb\n\tRTA_CACHEINFO           = 0xc\n\tRTA_TABLE               = 0xf\n\tRTA_MARK                = 0x10\n\tRTA_MFC_STATS           = 0x11\n\tRTA_VIA                 = 0x12\n\tRTA_NEWDST              = 0x13\n\tRTA_PREF                = 0x14\n\tRTA_ENCAP_TYPE          = 0x15\n\tRTA_ENCAP               = 0x16\n\tRTA_EXPIRES             = 0x17\n\tRTA_PAD                 = 0x18\n\tRTA_UID                 = 0x19\n\tRTA_TTL_PROPAGATE       = 0x1a\n\tRTA_IP_PROTO            = 0x1b\n\tRTA_SPORT               = 0x1c\n\tRTA_DPORT               = 0x1d\n\tRTN_UNSPEC              = 0x0\n\tRTN_UNICAST             = 0x1\n\tRTN_LOCAL               = 0x2\n\tRTN_BROADCAST           = 0x3\n\tRTN_ANYCAST             = 0x4\n\tRTN_MULTICAST           = 0x5\n\tRTN_BLACKHOLE           = 0x6\n\tRTN_UNREACHABLE         = 0x7\n\tRTN_PROHIBIT            = 0x8\n\tRTN_THROW               = 0x9\n\tRTN_NAT                 = 0xa\n\tRTN_XRESOLVE            = 0xb\n\tRTNLGRP_NONE            = 0x0\n\tRTNLGRP_LINK            = 0x1\n\tRTNLGRP_NOTIFY          = 0x2\n\tRTNLGRP_NEIGH           = 0x3\n\tRTNLGRP_TC              = 0x4\n\tRTNLGRP_IPV4_IFADDR     = 0x5\n\tRTNLGRP_IPV4_MROUTE     = 0x6\n\tRTNLGRP_IPV4_ROUTE      = 0x7\n\tRTNLGRP_IPV4_RULE       = 0x8\n\tRTNLGRP_IPV6_IFADDR     = 0x9\n\tRTNLGRP_IPV6_MROUTE     = 0xa\n\tRTNLGRP_IPV6_ROUTE      = 0xb\n\tRTNLGRP_IPV6_IFINFO     = 0xc\n\tRTNLGRP_IPV6_PREFIX     = 0x12\n\tRTNLGRP_IPV6_RULE       = 0x13\n\tRTNLGRP_ND_USEROPT      = 0x14\n\tSizeofNlMsghdr          = 0x10\n\tSizeofNlMsgerr          = 0x14\n\tSizeofRtGenmsg          = 0x1\n\tSizeofNlAttr            = 0x4\n\tSizeofRtAttr            = 0x4\n\tSizeofIfInfomsg         = 0x10\n\tSizeofIfAddrmsg         = 0x8\n\tSizeofRtMsg             = 0xc\n\tSizeofRtNexthop         = 0x8\n\tSizeofNdUseroptmsg      = 0x10\n\tSizeofNdMsg             = 0xc\n)\n\ntype NlMsghdr struct {\n\tLen   uint32\n\tType  uint16\n\tFlags uint16\n\tSeq   uint32\n\tPid   uint32\n}\n\ntype NlMsgerr struct {\n\tError int32\n\tMsg   NlMsghdr\n}\n\ntype RtGenmsg struct {\n\tFamily uint8\n}\n\ntype NlAttr struct {\n\tLen  uint16\n\tType uint16\n}\n\ntype RtAttr struct {\n\tLen  uint16\n\tType uint16\n}\n\ntype IfInfomsg struct {\n\tFamily uint8\n\t_      uint8\n\tType   uint16\n\tIndex  int32\n\tFlags  uint32\n\tChange uint32\n}\n\ntype IfAddrmsg struct {\n\tFamily    uint8\n\tPrefixlen uint8\n\tFlags     uint8\n\tScope     uint8\n\tIndex     uint32\n}\n\ntype RtMsg struct {\n\tFamily   uint8\n\tDst_len  uint8\n\tSrc_len  uint8\n\tTos      uint8\n\tTable    uint8\n\tProtocol uint8\n\tScope    uint8\n\tType     uint8\n\tFlags    uint32\n}\n\ntype RtNexthop struct {\n\tLen     uint16\n\tFlags   uint8\n\tHops    uint8\n\tIfindex int32\n}\n\ntype NdUseroptmsg struct {\n\tFamily    uint8\n\tPad1      uint8\n\tOpts_len  uint16\n\tIfindex   int32\n\tIcmp_type uint8\n\tIcmp_code uint8\n\tPad2      uint16\n\tPad3      uint32\n}\n\ntype NdMsg struct {\n\tFamily  uint8\n\tPad1    uint8\n\tPad2    uint16\n\tIfindex int32\n\tState   uint16\n\tFlags   uint8\n\tType    uint8\n}\n\nconst (\n\tSizeofSockFilter = 0x8\n\tSizeofSockFprog  = 0x10\n)\n\ntype SockFilter struct {\n\tCode uint16\n\tJt   uint8\n\tJf   uint8\n\tK    uint32\n}\n\ntype SockFprog struct {\n\tLen    uint16\n\tFilter *SockFilter\n}\n\ntype InotifyEvent struct {\n\tWd     int32\n\tMask   uint32\n\tCookie uint32\n\tLen    uint32\n}\n\nconst SizeofInotifyEvent = 0x10\n\ntype PtraceRegs struct {\n\tRegs     [32]uint64\n\tLo       uint64\n\tHi       uint64\n\tEpc      uint64\n\tBadvaddr uint64\n\tStatus   uint64\n\tCause    uint64\n}\n\ntype FdSet struct {\n\tBits [16]int64\n}\n\ntype Sysinfo_t struct {\n\tUptime    int64\n\tLoads     [3]uint64\n\tTotalram  uint64\n\tFreeram   uint64\n\tSharedram uint64\n\tBufferram uint64\n\tTotalswap uint64\n\tFreeswap  uint64\n\tProcs     uint16\n\tPad       uint16\n\tTotalhigh uint64\n\tFreehigh  uint64\n\tUnit      uint32\n\t_         [0]int8\n\t_         [4]byte\n}\n\ntype Utsname struct {\n\tSysname    [65]byte\n\tNodename   [65]byte\n\tRelease    [65]byte\n\tVersion    [65]byte\n\tMachine    [65]byte\n\tDomainname [65]byte\n}\n\ntype Ustat_t struct {\n\tTfree  int32\n\tTinode uint64\n\tFname  [6]int8\n\tFpack  [6]int8\n\t_      [4]byte\n}\n\ntype EpollEvent struct {\n\tEvents uint32\n\tFd     int32\n\tPad    int32\n}\n\nconst (\n\tAT_EMPTY_PATH   = 0x1000\n\tAT_FDCWD        = -0x64\n\tAT_NO_AUTOMOUNT = 0x800\n\tAT_REMOVEDIR    = 0x200\n\n\tAT_STATX_SYNC_AS_STAT = 0x0\n\tAT_STATX_FORCE_SYNC   = 0x2000\n\tAT_STATX_DONT_SYNC    = 0x4000\n\n\tAT_SYMLINK_FOLLOW   = 0x400\n\tAT_SYMLINK_NOFOLLOW = 0x100\n\n\tAT_EACCESS = 0x200\n)\n\ntype PollFd struct {\n\tFd      int32\n\tEvents  int16\n\tRevents int16\n}\n\nconst (\n\tPOLLIN    = 0x1\n\tPOLLPRI   = 0x2\n\tPOLLOUT   = 0x4\n\tPOLLRDHUP = 0x2000\n\tPOLLERR   = 0x8\n\tPOLLHUP   = 0x10\n\tPOLLNVAL  = 0x20\n)\n\ntype Sigset_t struct {\n\tVal [16]uint64\n}\n\nconst _C__NSIG = 0x80\n\ntype SignalfdSiginfo struct {\n\tSigno     uint32\n\tErrno     int32\n\tCode      int32\n\tPid       uint32\n\tUid       uint32\n\tFd        int32\n\tTid       uint32\n\tBand      uint32\n\tOverrun   uint32\n\tTrapno    uint32\n\tStatus    int32\n\tInt       int32\n\tPtr       uint64\n\tUtime     uint64\n\tStime     uint64\n\tAddr      uint64\n\tAddr_lsb  uint16\n\t_         uint16\n\tSyscall   int32\n\tCall_addr uint64\n\tArch      uint32\n\t_         [28]uint8\n}\n\nconst PERF_IOC_FLAG_GROUP = 0x1\n\ntype Termios struct {\n\tIflag  uint32\n\tOflag  uint32\n\tCflag  uint32\n\tLflag  uint32\n\tLine   uint8\n\tCc     [23]uint8\n\tIspeed uint32\n\tOspeed uint32\n}\n\ntype Winsize struct {\n\tRow    uint16\n\tCol    uint16\n\tXpixel uint16\n\tYpixel uint16\n}\n\ntype Taskstats struct {\n\tVersion                   uint16\n\tAc_exitcode               uint32\n\tAc_flag                   uint8\n\tAc_nice                   uint8\n\tCpu_count                 uint64\n\tCpu_delay_total           uint64\n\tBlkio_count               uint64\n\tBlkio_delay_total         uint64\n\tSwapin_count              uint64\n\tSwapin_delay_total        uint64\n\tCpu_run_real_total        uint64\n\tCpu_run_virtual_total     uint64\n\tAc_comm                   [32]int8\n\tAc_sched                  uint8\n\tAc_pad                    [3]uint8\n\t_                         [4]byte\n\tAc_uid                    uint32\n\tAc_gid                    uint32\n\tAc_pid                    uint32\n\tAc_ppid                   uint32\n\tAc_btime                  uint32\n\tAc_etime                  uint64\n\tAc_utime                  uint64\n\tAc_stime                  uint64\n\tAc_minflt                 uint64\n\tAc_majflt                 uint64\n\tCoremem                   uint64\n\tVirtmem                   uint64\n\tHiwater_rss               uint64\n\tHiwater_vm                uint64\n\tRead_char                 uint64\n\tWrite_char                uint64\n\tRead_syscalls             uint64\n\tWrite_syscalls            uint64\n\tRead_bytes                uint64\n\tWrite_bytes               uint64\n\tCancelled_write_bytes     uint64\n\tNvcsw                     uint64\n\tNivcsw                    uint64\n\tAc_utimescaled            uint64\n\tAc_stimescaled            uint64\n\tCpu_scaled_run_real_total uint64\n\tFreepages_count           uint64\n\tFreepages_delay_total     uint64\n\tThrashing_count           uint64\n\tThrashing_delay_total     uint64\n}\n\nconst (\n\tTASKSTATS_CMD_UNSPEC                  = 0x0\n\tTASKSTATS_CMD_GET                     = 0x1\n\tTASKSTATS_CMD_NEW                     = 0x2\n\tTASKSTATS_TYPE_UNSPEC                 = 0x0\n\tTASKSTATS_TYPE_PID                    = 0x1\n\tTASKSTATS_TYPE_TGID                   = 0x2\n\tTASKSTATS_TYPE_STATS                  = 0x3\n\tTASKSTATS_TYPE_AGGR_PID               = 0x4\n\tTASKSTATS_TYPE_AGGR_TGID              = 0x5\n\tTASKSTATS_TYPE_NULL                   = 0x6\n\tTASKSTATS_CMD_ATTR_UNSPEC             = 0x0\n\tTASKSTATS_CMD_ATTR_PID                = 0x1\n\tTASKSTATS_CMD_ATTR_TGID               = 0x2\n\tTASKSTATS_CMD_ATTR_REGISTER_CPUMASK   = 0x3\n\tTASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4\n)\n\ntype CGroupStats struct {\n\tSleeping        uint64\n\tRunning         uint64\n\tStopped         uint64\n\tUninterruptible uint64\n\tIo_wait         uint64\n}\n\nconst (\n\tCGROUPSTATS_CMD_UNSPEC        = 0x3\n\tCGROUPSTATS_CMD_GET           = 0x4\n\tCGROUPSTATS_CMD_NEW           = 0x5\n\tCGROUPSTATS_TYPE_UNSPEC       = 0x0\n\tCGROUPSTATS_TYPE_CGROUP_STATS = 0x1\n\tCGROUPSTATS_CMD_ATTR_UNSPEC   = 0x0\n\tCGROUPSTATS_CMD_ATTR_FD       = 0x1\n)\n\ntype Genlmsghdr struct {\n\tCmd      uint8\n\tVersion  uint8\n\tReserved uint16\n}\n\nconst (\n\tCTRL_CMD_UNSPEC            = 0x0\n\tCTRL_CMD_NEWFAMILY         = 0x1\n\tCTRL_CMD_DELFAMILY         = 0x2\n\tCTRL_CMD_GETFAMILY         = 0x3\n\tCTRL_CMD_NEWOPS            = 0x4\n\tCTRL_CMD_DELOPS            = 0x5\n\tCTRL_CMD_GETOPS            = 0x6\n\tCTRL_CMD_NEWMCAST_GRP      = 0x7\n\tCTRL_CMD_DELMCAST_GRP      = 0x8\n\tCTRL_CMD_GETMCAST_GRP      = 0x9\n\tCTRL_ATTR_UNSPEC           = 0x0\n\tCTRL_ATTR_FAMILY_ID        = 0x1\n\tCTRL_ATTR_FAMILY_NAME      = 0x2\n\tCTRL_ATTR_VERSION          = 0x3\n\tCTRL_ATTR_HDRSIZE          = 0x4\n\tCTRL_ATTR_MAXATTR          = 0x5\n\tCTRL_ATTR_OPS              = 0x6\n\tCTRL_ATTR_MCAST_GROUPS     = 0x7\n\tCTRL_ATTR_OP_UNSPEC        = 0x0\n\tCTRL_ATTR_OP_ID            = 0x1\n\tCTRL_ATTR_OP_FLAGS         = 0x2\n\tCTRL_ATTR_MCAST_GRP_UNSPEC = 0x0\n\tCTRL_ATTR_MCAST_GRP_NAME   = 0x1\n\tCTRL_ATTR_MCAST_GRP_ID     = 0x2\n)\n\ntype cpuMask uint64\n\nconst (\n\t_CPU_SETSIZE = 0x400\n\t_NCPUBITS    = 0x40\n)\n\nconst (\n\tBDADDR_BREDR     = 0x0\n\tBDADDR_LE_PUBLIC = 0x1\n\tBDADDR_LE_RANDOM = 0x2\n)\n\ntype PerfEventAttr struct {\n\tType               uint32\n\tSize               uint32\n\tConfig             uint64\n\tSample             uint64\n\tSample_type        uint64\n\tRead_format        uint64\n\tBits               uint64\n\tWakeup             uint32\n\tBp_type            uint32\n\tExt1               uint64\n\tExt2               uint64\n\tBranch_sample_type uint64\n\tSample_regs_user   uint64\n\tSample_stack_user  uint32\n\tClockid            int32\n\tSample_regs_intr   uint64\n\tAux_watermark      uint32\n\tSample_max_stack   uint16\n\t_                  uint16\n}\n\ntype PerfEventMmapPage struct {\n\tVersion        uint32\n\tCompat_version uint32\n\tLock           uint32\n\tIndex          uint32\n\tOffset         int64\n\tTime_enabled   uint64\n\tTime_running   uint64\n\tCapabilities   uint64\n\tPmc_width      uint16\n\tTime_shift     uint16\n\tTime_mult      uint32\n\tTime_offset    uint64\n\tTime_zero      uint64\n\tSize           uint32\n\t_              [948]uint8\n\tData_head      uint64\n\tData_tail      uint64\n\tData_offset    uint64\n\tData_size      uint64\n\tAux_head       uint64\n\tAux_tail       uint64\n\tAux_offset     uint64\n\tAux_size       uint64\n}\n\nconst (\n\tPerfBitDisabled               uint64 = CBitFieldMaskBit0\n\tPerfBitInherit                       = CBitFieldMaskBit1\n\tPerfBitPinned                        = CBitFieldMaskBit2\n\tPerfBitExclusive                     = CBitFieldMaskBit3\n\tPerfBitExcludeUser                   = CBitFieldMaskBit4\n\tPerfBitExcludeKernel                 = CBitFieldMaskBit5\n\tPerfBitExcludeHv                     = CBitFieldMaskBit6\n\tPerfBitExcludeIdle                   = CBitFieldMaskBit7\n\tPerfBitMmap                          = CBitFieldMaskBit8\n\tPerfBitComm                          = CBitFieldMaskBit9\n\tPerfBitFreq                          = CBitFieldMaskBit10\n\tPerfBitInheritStat                   = CBitFieldMaskBit11\n\tPerfBitEnableOnExec                  = CBitFieldMaskBit12\n\tPerfBitTask                          = CBitFieldMaskBit13\n\tPerfBitWatermark                     = CBitFieldMaskBit14\n\tPerfBitPreciseIPBit1                 = CBitFieldMaskBit15\n\tPerfBitPreciseIPBit2                 = CBitFieldMaskBit16\n\tPerfBitMmapData                      = CBitFieldMaskBit17\n\tPerfBitSampleIDAll                   = CBitFieldMaskBit18\n\tPerfBitExcludeHost                   = CBitFieldMaskBit19\n\tPerfBitExcludeGuest                  = CBitFieldMaskBit20\n\tPerfBitExcludeCallchainKernel        = CBitFieldMaskBit21\n\tPerfBitExcludeCallchainUser          = CBitFieldMaskBit22\n\tPerfBitMmap2                         = CBitFieldMaskBit23\n\tPerfBitCommExec                      = CBitFieldMaskBit24\n\tPerfBitUseClockID                    = CBitFieldMaskBit25\n\tPerfBitContextSwitch                 = CBitFieldMaskBit26\n)\n\nconst (\n\tPERF_TYPE_HARDWARE   = 0x0\n\tPERF_TYPE_SOFTWARE   = 0x1\n\tPERF_TYPE_TRACEPOINT = 0x2\n\tPERF_TYPE_HW_CACHE   = 0x3\n\tPERF_TYPE_RAW        = 0x4\n\tPERF_TYPE_BREAKPOINT = 0x5\n\n\tPERF_COUNT_HW_CPU_CYCLES              = 0x0\n\tPERF_COUNT_HW_INSTRUCTIONS            = 0x1\n\tPERF_COUNT_HW_CACHE_REFERENCES        = 0x2\n\tPERF_COUNT_HW_CACHE_MISSES            = 0x3\n\tPERF_COUNT_HW_BRANCH_INSTRUCTIONS     = 0x4\n\tPERF_COUNT_HW_BRANCH_MISSES           = 0x5\n\tPERF_COUNT_HW_BUS_CYCLES              = 0x6\n\tPERF_COUNT_HW_STALLED_CYCLES_FRONTEND = 0x7\n\tPERF_COUNT_HW_STALLED_CYCLES_BACKEND  = 0x8\n\tPERF_COUNT_HW_REF_CPU_CYCLES          = 0x9\n\n\tPERF_COUNT_HW_CACHE_L1D  = 0x0\n\tPERF_COUNT_HW_CACHE_L1I  = 0x1\n\tPERF_COUNT_HW_CACHE_LL   = 0x2\n\tPERF_COUNT_HW_CACHE_DTLB = 0x3\n\tPERF_COUNT_HW_CACHE_ITLB = 0x4\n\tPERF_COUNT_HW_CACHE_BPU  = 0x5\n\tPERF_COUNT_HW_CACHE_NODE = 0x6\n\n\tPERF_COUNT_HW_CACHE_OP_READ     = 0x0\n\tPERF_COUNT_HW_CACHE_OP_WRITE    = 0x1\n\tPERF_COUNT_HW_CACHE_OP_PREFETCH = 0x2\n\n\tPERF_COUNT_HW_CACHE_RESULT_ACCESS = 0x0\n\tPERF_COUNT_HW_CACHE_RESULT_MISS   = 0x1\n\n\tPERF_COUNT_SW_CPU_CLOCK        = 0x0\n\tPERF_COUNT_SW_TASK_CLOCK       = 0x1\n\tPERF_COUNT_SW_PAGE_FAULTS      = 0x2\n\tPERF_COUNT_SW_CONTEXT_SWITCHES = 0x3\n\tPERF_COUNT_SW_CPU_MIGRATIONS   = 0x4\n\tPERF_COUNT_SW_PAGE_FAULTS_MIN  = 0x5\n\tPERF_COUNT_SW_PAGE_FAULTS_MAJ  = 0x6\n\tPERF_COUNT_SW_ALIGNMENT_FAULTS = 0x7\n\tPERF_COUNT_SW_EMULATION_FAULTS = 0x8\n\tPERF_COUNT_SW_DUMMY            = 0x9\n\tPERF_COUNT_SW_BPF_OUTPUT       = 0xa\n\n\tPERF_SAMPLE_IP           = 0x1\n\tPERF_SAMPLE_TID          = 0x2\n\tPERF_SAMPLE_TIME         = 0x4\n\tPERF_SAMPLE_ADDR         = 0x8\n\tPERF_SAMPLE_READ         = 0x10\n\tPERF_SAMPLE_CALLCHAIN    = 0x20\n\tPERF_SAMPLE_ID           = 0x40\n\tPERF_SAMPLE_CPU          = 0x80\n\tPERF_SAMPLE_PERIOD       = 0x100\n\tPERF_SAMPLE_STREAM_ID    = 0x200\n\tPERF_SAMPLE_RAW          = 0x400\n\tPERF_SAMPLE_BRANCH_STACK = 0x800\n\n\tPERF_SAMPLE_BRANCH_USER       = 0x1\n\tPERF_SAMPLE_BRANCH_KERNEL     = 0x2\n\tPERF_SAMPLE_BRANCH_HV         = 0x4\n\tPERF_SAMPLE_BRANCH_ANY        = 0x8\n\tPERF_SAMPLE_BRANCH_ANY_CALL   = 0x10\n\tPERF_SAMPLE_BRANCH_ANY_RETURN = 0x20\n\tPERF_SAMPLE_BRANCH_IND_CALL   = 0x40\n\tPERF_SAMPLE_BRANCH_ABORT_TX   = 0x80\n\tPERF_SAMPLE_BRANCH_IN_TX      = 0x100\n\tPERF_SAMPLE_BRANCH_NO_TX      = 0x200\n\tPERF_SAMPLE_BRANCH_COND       = 0x400\n\tPERF_SAMPLE_BRANCH_CALL_STACK = 0x800\n\tPERF_SAMPLE_BRANCH_IND_JUMP   = 0x1000\n\tPERF_SAMPLE_BRANCH_CALL       = 0x2000\n\tPERF_SAMPLE_BRANCH_NO_FLAGS   = 0x4000\n\tPERF_SAMPLE_BRANCH_NO_CYCLES  = 0x8000\n\tPERF_SAMPLE_BRANCH_TYPE_SAVE  = 0x10000\n\n\tPERF_FORMAT_TOTAL_TIME_ENABLED = 0x1\n\tPERF_FORMAT_TOTAL_TIME_RUNNING = 0x2\n\tPERF_FORMAT_ID                 = 0x4\n\tPERF_FORMAT_GROUP              = 0x8\n\n\tPERF_RECORD_MMAP            = 0x1\n\tPERF_RECORD_LOST            = 0x2\n\tPERF_RECORD_COMM            = 0x3\n\tPERF_RECORD_EXIT            = 0x4\n\tPERF_RECORD_THROTTLE        = 0x5\n\tPERF_RECORD_UNTHROTTLE      = 0x6\n\tPERF_RECORD_FORK            = 0x7\n\tPERF_RECORD_READ            = 0x8\n\tPERF_RECORD_SAMPLE          = 0x9\n\tPERF_RECORD_MMAP2           = 0xa\n\tPERF_RECORD_AUX             = 0xb\n\tPERF_RECORD_ITRACE_START    = 0xc\n\tPERF_RECORD_LOST_SAMPLES    = 0xd\n\tPERF_RECORD_SWITCH          = 0xe\n\tPERF_RECORD_SWITCH_CPU_WIDE = 0xf\n\tPERF_RECORD_NAMESPACES      = 0x10\n\n\tPERF_CONTEXT_HV     = -0x20\n\tPERF_CONTEXT_KERNEL = -0x80\n\tPERF_CONTEXT_USER   = -0x200\n\n\tPERF_CONTEXT_GUEST        = -0x800\n\tPERF_CONTEXT_GUEST_KERNEL = -0x880\n\tPERF_CONTEXT_GUEST_USER   = -0xa00\n\n\tPERF_FLAG_FD_NO_GROUP = 0x1\n\tPERF_FLAG_FD_OUTPUT   = 0x2\n\tPERF_FLAG_PID_CGROUP  = 0x4\n\tPERF_FLAG_FD_CLOEXEC  = 0x8\n)\n\nconst (\n\tCBitFieldMaskBit0  = 0x1\n\tCBitFieldMaskBit1  = 0x2\n\tCBitFieldMaskBit2  = 0x4\n\tCBitFieldMaskBit3  = 0x8\n\tCBitFieldMaskBit4  = 0x10\n\tCBitFieldMaskBit5  = 0x20\n\tCBitFieldMaskBit6  = 0x40\n\tCBitFieldMaskBit7  = 0x80\n\tCBitFieldMaskBit8  = 0x100\n\tCBitFieldMaskBit9  = 0x200\n\tCBitFieldMaskBit10 = 0x400\n\tCBitFieldMaskBit11 = 0x800\n\tCBitFieldMaskBit12 = 0x1000\n\tCBitFieldMaskBit13 = 0x2000\n\tCBitFieldMaskBit14 = 0x4000\n\tCBitFieldMaskBit15 = 0x8000\n\tCBitFieldMaskBit16 = 0x10000\n\tCBitFieldMaskBit17 = 0x20000\n\tCBitFieldMaskBit18 = 0x40000\n\tCBitFieldMaskBit19 = 0x80000\n\tCBitFieldMaskBit20 = 0x100000\n\tCBitFieldMaskBit21 = 0x200000\n\tCBitFieldMaskBit22 = 0x400000\n\tCBitFieldMaskBit23 = 0x800000\n\tCBitFieldMaskBit24 = 0x1000000\n\tCBitFieldMaskBit25 = 0x2000000\n\tCBitFieldMaskBit26 = 0x4000000\n\tCBitFieldMaskBit27 = 0x8000000\n\tCBitFieldMaskBit28 = 0x10000000\n\tCBitFieldMaskBit29 = 0x20000000\n\tCBitFieldMaskBit30 = 0x40000000\n\tCBitFieldMaskBit31 = 0x80000000\n\tCBitFieldMaskBit32 = 0x100000000\n\tCBitFieldMaskBit33 = 0x200000000\n\tCBitFieldMaskBit34 = 0x400000000\n\tCBitFieldMaskBit35 = 0x800000000\n\tCBitFieldMaskBit36 = 0x1000000000\n\tCBitFieldMaskBit37 = 0x2000000000\n\tCBitFieldMaskBit38 = 0x4000000000\n\tCBitFieldMaskBit39 = 0x8000000000\n\tCBitFieldMaskBit40 = 0x10000000000\n\tCBitFieldMaskBit41 = 0x20000000000\n\tCBitFieldMaskBit42 = 0x40000000000\n\tCBitFieldMaskBit43 = 0x80000000000\n\tCBitFieldMaskBit44 = 0x100000000000\n\tCBitFieldMaskBit45 = 0x200000000000\n\tCBitFieldMaskBit46 = 0x400000000000\n\tCBitFieldMaskBit47 = 0x800000000000\n\tCBitFieldMaskBit48 = 0x1000000000000\n\tCBitFieldMaskBit49 = 0x2000000000000\n\tCBitFieldMaskBit50 = 0x4000000000000\n\tCBitFieldMaskBit51 = 0x8000000000000\n\tCBitFieldMaskBit52 = 0x10000000000000\n\tCBitFieldMaskBit53 = 0x20000000000000\n\tCBitFieldMaskBit54 = 0x40000000000000\n\tCBitFieldMaskBit55 = 0x80000000000000\n\tCBitFieldMaskBit56 = 0x100000000000000\n\tCBitFieldMaskBit57 = 0x200000000000000\n\tCBitFieldMaskBit58 = 0x400000000000000\n\tCBitFieldMaskBit59 = 0x800000000000000\n\tCBitFieldMaskBit60 = 0x1000000000000000\n\tCBitFieldMaskBit61 = 0x2000000000000000\n\tCBitFieldMaskBit62 = 0x4000000000000000\n\tCBitFieldMaskBit63 = 0x8000000000000000\n)\n\ntype SockaddrStorage struct {\n\tFamily uint16\n\t_      [118]int8\n\t_      uint64\n}\n\ntype TCPMD5Sig struct {\n\tAddr      SockaddrStorage\n\tFlags     uint8\n\tPrefixlen uint8\n\tKeylen    uint16\n\t_         uint32\n\tKey       [80]uint8\n}\n\ntype HDDriveCmdHdr struct {\n\tCommand uint8\n\tNumber  uint8\n\tFeature uint8\n\tCount   uint8\n}\n\ntype HDGeometry struct {\n\tHeads     uint8\n\tSectors   uint8\n\tCylinders uint16\n\tStart     uint64\n}\n\ntype HDDriveID struct {\n\tConfig         uint16\n\tCyls           uint16\n\tReserved2      uint16\n\tHeads          uint16\n\tTrack_bytes    uint16\n\tSector_bytes   uint16\n\tSectors        uint16\n\tVendor0        uint16\n\tVendor1        uint16\n\tVendor2        uint16\n\tSerial_no      [20]uint8\n\tBuf_type       uint16\n\tBuf_size       uint16\n\tEcc_bytes      uint16\n\tFw_rev         [8]uint8\n\tModel          [40]uint8\n\tMax_multsect   uint8\n\tVendor3        uint8\n\tDword_io       uint16\n\tVendor4        uint8\n\tCapability     uint8\n\tReserved50     uint16\n\tVendor5        uint8\n\tTPIO           uint8\n\tVendor6        uint8\n\tTDMA           uint8\n\tField_valid    uint16\n\tCur_cyls       uint16\n\tCur_heads      uint16\n\tCur_sectors    uint16\n\tCur_capacity0  uint16\n\tCur_capacity1  uint16\n\tMultsect       uint8\n\tMultsect_valid uint8\n\tLba_capacity   uint32\n\tDma_1word      uint16\n\tDma_mword      uint16\n\tEide_pio_modes uint16\n\tEide_dma_min   uint16\n\tEide_dma_time  uint16\n\tEide_pio       uint16\n\tEide_pio_iordy uint16\n\tWords69_70     [2]uint16\n\tWords71_74     [4]uint16\n\tQueue_depth    uint16\n\tWords76_79     [4]uint16\n\tMajor_rev_num  uint16\n\tMinor_rev_num  uint16\n\tCommand_set_1  uint16\n\tCommand_set_2  uint16\n\tCfsse          uint16\n\tCfs_enable_1   uint16\n\tCfs_enable_2   uint16\n\tCsf_default    uint16\n\tDma_ultra      uint16\n\tTrseuc         uint16\n\tTrsEuc         uint16\n\tCurAPMvalues   uint16\n\tMprc           uint16\n\tHw_config      uint16\n\tAcoustic       uint16\n\tMsrqs          uint16\n\tSxfert         uint16\n\tSal            uint16\n\tSpg            uint32\n\tLba_capacity_2 uint64\n\tWords104_125   [22]uint16\n\tLast_lun       uint16\n\tWord127        uint16\n\tDlf            uint16\n\tCsfo           uint16\n\tWords130_155   [26]uint16\n\tWord156        uint16\n\tWords157_159   [3]uint16\n\tCfa_power      uint16\n\tWords161_175   [15]uint16\n\tWords176_205   [30]uint16\n\tWords206_254   [49]uint16\n\tIntegrity_word uint16\n}\n\ntype Statfs_t struct {\n\tType    int64\n\tBsize   int64\n\tFrsize  int64\n\tBlocks  uint64\n\tBfree   uint64\n\tFiles   uint64\n\tFfree   uint64\n\tBavail  uint64\n\tFsid    Fsid\n\tNamelen int64\n\tFlags   int64\n\tSpare   [5]int64\n}\n\nconst (\n\tST_MANDLOCK    = 0x40\n\tST_NOATIME     = 0x400\n\tST_NODEV       = 0x4\n\tST_NODIRATIME  = 0x800\n\tST_NOEXEC      = 0x8\n\tST_NOSUID      = 0x2\n\tST_RDONLY      = 0x1\n\tST_RELATIME    = 0x1000\n\tST_SYNCHRONOUS = 0x10\n)\n\ntype TpacketHdr struct {\n\tStatus  uint64\n\tLen     uint32\n\tSnaplen uint32\n\tMac     uint16\n\tNet     uint16\n\tSec     uint32\n\tUsec    uint32\n\t_       [4]byte\n}\n\ntype Tpacket2Hdr struct {\n\tStatus    uint32\n\tLen       uint32\n\tSnaplen   uint32\n\tMac       uint16\n\tNet       uint16\n\tSec       uint32\n\tNsec      uint32\n\tVlan_tci  uint16\n\tVlan_tpid uint16\n\t_         [4]uint8\n}\n\ntype Tpacket3Hdr struct {\n\tNext_offset uint32\n\tSec         uint32\n\tNsec        uint32\n\tSnaplen     uint32\n\tLen         uint32\n\tStatus      uint32\n\tMac         uint16\n\tNet         uint16\n\tHv1         TpacketHdrVariant1\n\t_           [8]uint8\n}\n\ntype TpacketHdrVariant1 struct {\n\tRxhash    uint32\n\tVlan_tci  uint32\n\tVlan_tpid uint16\n\t_         uint16\n}\n\ntype TpacketBlockDesc struct {\n\tVersion uint32\n\tTo_priv uint32\n\tHdr     [40]byte\n}\n\ntype TpacketBDTS struct {\n\tSec  uint32\n\tUsec uint32\n}\n\ntype TpacketHdrV1 struct {\n\tBlock_status        uint32\n\tNum_pkts            uint32\n\tOffset_to_first_pkt uint32\n\tBlk_len             uint32\n\tSeq_num             uint64\n\tTs_first_pkt        TpacketBDTS\n\tTs_last_pkt         TpacketBDTS\n}\n\ntype TpacketReq struct {\n\tBlock_size uint32\n\tBlock_nr   uint32\n\tFrame_size uint32\n\tFrame_nr   uint32\n}\n\ntype TpacketReq3 struct {\n\tBlock_size       uint32\n\tBlock_nr         uint32\n\tFrame_size       uint32\n\tFrame_nr         uint32\n\tRetire_blk_tov   uint32\n\tSizeof_priv      uint32\n\tFeature_req_word uint32\n}\n\ntype TpacketStats struct {\n\tPackets uint32\n\tDrops   uint32\n}\n\ntype TpacketStatsV3 struct {\n\tPackets      uint32\n\tDrops        uint32\n\tFreeze_q_cnt uint32\n}\n\ntype TpacketAuxdata struct {\n\tStatus    uint32\n\tLen       uint32\n\tSnaplen   uint32\n\tMac       uint16\n\tNet       uint16\n\tVlan_tci  uint16\n\tVlan_tpid uint16\n}\n\nconst (\n\tTPACKET_V1 = 0x0\n\tTPACKET_V2 = 0x1\n\tTPACKET_V3 = 0x2\n)\n\nconst (\n\tSizeofTpacketHdr  = 0x20\n\tSizeofTpacket2Hdr = 0x20\n\tSizeofTpacket3Hdr = 0x30\n\n\tSizeofTpacketStats   = 0x8\n\tSizeofTpacketStatsV3 = 0xc\n)\n\nconst (\n\tNF_INET_PRE_ROUTING  = 0x0\n\tNF_INET_LOCAL_IN     = 0x1\n\tNF_INET_FORWARD      = 0x2\n\tNF_INET_LOCAL_OUT    = 0x3\n\tNF_INET_POST_ROUTING = 0x4\n\tNF_INET_NUMHOOKS     = 0x5\n)\n\nconst (\n\tNF_NETDEV_INGRESS  = 0x0\n\tNF_NETDEV_NUMHOOKS = 0x1\n)\n\nconst (\n\tNFPROTO_UNSPEC   = 0x0\n\tNFPROTO_INET     = 0x1\n\tNFPROTO_IPV4     = 0x2\n\tNFPROTO_ARP      = 0x3\n\tNFPROTO_NETDEV   = 0x5\n\tNFPROTO_BRIDGE   = 0x7\n\tNFPROTO_IPV6     = 0xa\n\tNFPROTO_DECNET   = 0xc\n\tNFPROTO_NUMPROTO = 0xd\n)\n\ntype Nfgenmsg struct {\n\tNfgen_family uint8\n\tVersion      uint8\n\tRes_id       uint16\n}\n\nconst (\n\tNFNL_BATCH_UNSPEC = 0x0\n\tNFNL_BATCH_GENID  = 0x1\n)\n\nconst (\n\tNFT_REG_VERDICT                   = 0x0\n\tNFT_REG_1                         = 0x1\n\tNFT_REG_2                         = 0x2\n\tNFT_REG_3                         = 0x3\n\tNFT_REG_4                         = 0x4\n\tNFT_REG32_00                      = 0x8\n\tNFT_REG32_01                      = 0x9\n\tNFT_REG32_02                      = 0xa\n\tNFT_REG32_03                      = 0xb\n\tNFT_REG32_04                      = 0xc\n\tNFT_REG32_05                      = 0xd\n\tNFT_REG32_06                      = 0xe\n\tNFT_REG32_07                      = 0xf\n\tNFT_REG32_08                      = 0x10\n\tNFT_REG32_09                      = 0x11\n\tNFT_REG32_10                      = 0x12\n\tNFT_REG32_11                      = 0x13\n\tNFT_REG32_12                      = 0x14\n\tNFT_REG32_13                      = 0x15\n\tNFT_REG32_14                      = 0x16\n\tNFT_REG32_15                      = 0x17\n\tNFT_CONTINUE                      = -0x1\n\tNFT_BREAK                         = -0x2\n\tNFT_JUMP                          = -0x3\n\tNFT_GOTO                          = -0x4\n\tNFT_RETURN                        = -0x5\n\tNFT_MSG_NEWTABLE                  = 0x0\n\tNFT_MSG_GETTABLE                  = 0x1\n\tNFT_MSG_DELTABLE                  = 0x2\n\tNFT_MSG_NEWCHAIN                  = 0x3\n\tNFT_MSG_GETCHAIN                  = 0x4\n\tNFT_MSG_DELCHAIN                  = 0x5\n\tNFT_MSG_NEWRULE                   = 0x6\n\tNFT_MSG_GETRULE                   = 0x7\n\tNFT_MSG_DELRULE                   = 0x8\n\tNFT_MSG_NEWSET                    = 0x9\n\tNFT_MSG_GETSET                    = 0xa\n\tNFT_MSG_DELSET                    = 0xb\n\tNFT_MSG_NEWSETELEM                = 0xc\n\tNFT_MSG_GETSETELEM                = 0xd\n\tNFT_MSG_DELSETELEM                = 0xe\n\tNFT_MSG_NEWGEN                    = 0xf\n\tNFT_MSG_GETGEN                    = 0x10\n\tNFT_MSG_TRACE                     = 0x11\n\tNFT_MSG_NEWOBJ                    = 0x12\n\tNFT_MSG_GETOBJ                    = 0x13\n\tNFT_MSG_DELOBJ                    = 0x14\n\tNFT_MSG_GETOBJ_RESET              = 0x15\n\tNFT_MSG_MAX                       = 0x19\n\tNFTA_LIST_UNPEC                   = 0x0\n\tNFTA_LIST_ELEM                    = 0x1\n\tNFTA_HOOK_UNSPEC                  = 0x0\n\tNFTA_HOOK_HOOKNUM                 = 0x1\n\tNFTA_HOOK_PRIORITY                = 0x2\n\tNFTA_HOOK_DEV                     = 0x3\n\tNFT_TABLE_F_DORMANT               = 0x1\n\tNFTA_TABLE_UNSPEC                 = 0x0\n\tNFTA_TABLE_NAME                   = 0x1\n\tNFTA_TABLE_FLAGS                  = 0x2\n\tNFTA_TABLE_USE                    = 0x3\n\tNFTA_CHAIN_UNSPEC                 = 0x0\n\tNFTA_CHAIN_TABLE                  = 0x1\n\tNFTA_CHAIN_HANDLE                 = 0x2\n\tNFTA_CHAIN_NAME                   = 0x3\n\tNFTA_CHAIN_HOOK                   = 0x4\n\tNFTA_CHAIN_POLICY                 = 0x5\n\tNFTA_CHAIN_USE                    = 0x6\n\tNFTA_CHAIN_TYPE                   = 0x7\n\tNFTA_CHAIN_COUNTERS               = 0x8\n\tNFTA_CHAIN_PAD                    = 0x9\n\tNFTA_RULE_UNSPEC                  = 0x0\n\tNFTA_RULE_TABLE                   = 0x1\n\tNFTA_RULE_CHAIN                   = 0x2\n\tNFTA_RULE_HANDLE                  = 0x3\n\tNFTA_RULE_EXPRESSIONS             = 0x4\n\tNFTA_RULE_COMPAT                  = 0x5\n\tNFTA_RULE_POSITION                = 0x6\n\tNFTA_RULE_USERDATA                = 0x7\n\tNFTA_RULE_PAD                     = 0x8\n\tNFTA_RULE_ID                      = 0x9\n\tNFT_RULE_COMPAT_F_INV             = 0x2\n\tNFT_RULE_COMPAT_F_MASK            = 0x2\n\tNFTA_RULE_COMPAT_UNSPEC           = 0x0\n\tNFTA_RULE_COMPAT_PROTO            = 0x1\n\tNFTA_RULE_COMPAT_FLAGS            = 0x2\n\tNFT_SET_ANONYMOUS                 = 0x1\n\tNFT_SET_CONSTANT                  = 0x2\n\tNFT_SET_INTERVAL                  = 0x4\n\tNFT_SET_MAP                       = 0x8\n\tNFT_SET_TIMEOUT                   = 0x10\n\tNFT_SET_EVAL                      = 0x20\n\tNFT_SET_OBJECT                    = 0x40\n\tNFT_SET_POL_PERFORMANCE           = 0x0\n\tNFT_SET_POL_MEMORY                = 0x1\n\tNFTA_SET_DESC_UNSPEC              = 0x0\n\tNFTA_SET_DESC_SIZE                = 0x1\n\tNFTA_SET_UNSPEC                   = 0x0\n\tNFTA_SET_TABLE                    = 0x1\n\tNFTA_SET_NAME                     = 0x2\n\tNFTA_SET_FLAGS                    = 0x3\n\tNFTA_SET_KEY_TYPE                 = 0x4\n\tNFTA_SET_KEY_LEN                  = 0x5\n\tNFTA_SET_DATA_TYPE                = 0x6\n\tNFTA_SET_DATA_LEN                 = 0x7\n\tNFTA_SET_POLICY                   = 0x8\n\tNFTA_SET_DESC                     = 0x9\n\tNFTA_SET_ID                       = 0xa\n\tNFTA_SET_TIMEOUT                  = 0xb\n\tNFTA_SET_GC_INTERVAL              = 0xc\n\tNFTA_SET_USERDATA                 = 0xd\n\tNFTA_SET_PAD                      = 0xe\n\tNFTA_SET_OBJ_TYPE                 = 0xf\n\tNFT_SET_ELEM_INTERVAL_END         = 0x1\n\tNFTA_SET_ELEM_UNSPEC              = 0x0\n\tNFTA_SET_ELEM_KEY                 = 0x1\n\tNFTA_SET_ELEM_DATA                = 0x2\n\tNFTA_SET_ELEM_FLAGS               = 0x3\n\tNFTA_SET_ELEM_TIMEOUT             = 0x4\n\tNFTA_SET_ELEM_EXPIRATION          = 0x5\n\tNFTA_SET_ELEM_USERDATA            = 0x6\n\tNFTA_SET_ELEM_EXPR                = 0x7\n\tNFTA_SET_ELEM_PAD                 = 0x8\n\tNFTA_SET_ELEM_OBJREF              = 0x9\n\tNFTA_SET_ELEM_LIST_UNSPEC         = 0x0\n\tNFTA_SET_ELEM_LIST_TABLE          = 0x1\n\tNFTA_SET_ELEM_LIST_SET            = 0x2\n\tNFTA_SET_ELEM_LIST_ELEMENTS       = 0x3\n\tNFTA_SET_ELEM_LIST_SET_ID         = 0x4\n\tNFT_DATA_VALUE                    = 0x0\n\tNFT_DATA_VERDICT                  = 0xffffff00\n\tNFTA_DATA_UNSPEC                  = 0x0\n\tNFTA_DATA_VALUE                   = 0x1\n\tNFTA_DATA_VERDICT                 = 0x2\n\tNFTA_VERDICT_UNSPEC               = 0x0\n\tNFTA_VERDICT_CODE                 = 0x1\n\tNFTA_VERDICT_CHAIN                = 0x2\n\tNFTA_EXPR_UNSPEC                  = 0x0\n\tNFTA_EXPR_NAME                    = 0x1\n\tNFTA_EXPR_DATA                    = 0x2\n\tNFTA_IMMEDIATE_UNSPEC             = 0x0\n\tNFTA_IMMEDIATE_DREG               = 0x1\n\tNFTA_IMMEDIATE_DATA               = 0x2\n\tNFTA_BITWISE_UNSPEC               = 0x0\n\tNFTA_BITWISE_SREG                 = 0x1\n\tNFTA_BITWISE_DREG                 = 0x2\n\tNFTA_BITWISE_LEN                  = 0x3\n\tNFTA_BITWISE_MASK                 = 0x4\n\tNFTA_BITWISE_XOR                  = 0x5\n\tNFT_BYTEORDER_NTOH                = 0x0\n\tNFT_BYTEORDER_HTON                = 0x1\n\tNFTA_BYTEORDER_UNSPEC             = 0x0\n\tNFTA_BYTEORDER_SREG               = 0x1\n\tNFTA_BYTEORDER_DREG               = 0x2\n\tNFTA_BYTEORDER_OP                 = 0x3\n\tNFTA_BYTEORDER_LEN                = 0x4\n\tNFTA_BYTEORDER_SIZE               = 0x5\n\tNFT_CMP_EQ                        = 0x0\n\tNFT_CMP_NEQ                       = 0x1\n\tNFT_CMP_LT                        = 0x2\n\tNFT_CMP_LTE                       = 0x3\n\tNFT_CMP_GT                        = 0x4\n\tNFT_CMP_GTE                       = 0x5\n\tNFTA_CMP_UNSPEC                   = 0x0\n\tNFTA_CMP_SREG                     = 0x1\n\tNFTA_CMP_OP                       = 0x2\n\tNFTA_CMP_DATA                     = 0x3\n\tNFT_RANGE_EQ                      = 0x0\n\tNFT_RANGE_NEQ                     = 0x1\n\tNFTA_RANGE_UNSPEC                 = 0x0\n\tNFTA_RANGE_SREG                   = 0x1\n\tNFTA_RANGE_OP                     = 0x2\n\tNFTA_RANGE_FROM_DATA              = 0x3\n\tNFTA_RANGE_TO_DATA                = 0x4\n\tNFT_LOOKUP_F_INV                  = 0x1\n\tNFTA_LOOKUP_UNSPEC                = 0x0\n\tNFTA_LOOKUP_SET                   = 0x1\n\tNFTA_LOOKUP_SREG                  = 0x2\n\tNFTA_LOOKUP_DREG                  = 0x3\n\tNFTA_LOOKUP_SET_ID                = 0x4\n\tNFTA_LOOKUP_FLAGS                 = 0x5\n\tNFT_DYNSET_OP_ADD                 = 0x0\n\tNFT_DYNSET_OP_UPDATE              = 0x1\n\tNFT_DYNSET_F_INV                  = 0x1\n\tNFTA_DYNSET_UNSPEC                = 0x0\n\tNFTA_DYNSET_SET_NAME              = 0x1\n\tNFTA_DYNSET_SET_ID                = 0x2\n\tNFTA_DYNSET_OP                    = 0x3\n\tNFTA_DYNSET_SREG_KEY              = 0x4\n\tNFTA_DYNSET_SREG_DATA             = 0x5\n\tNFTA_DYNSET_TIMEOUT               = 0x6\n\tNFTA_DYNSET_EXPR                  = 0x7\n\tNFTA_DYNSET_PAD                   = 0x8\n\tNFTA_DYNSET_FLAGS                 = 0x9\n\tNFT_PAYLOAD_LL_HEADER             = 0x0\n\tNFT_PAYLOAD_NETWORK_HEADER        = 0x1\n\tNFT_PAYLOAD_TRANSPORT_HEADER      = 0x2\n\tNFT_PAYLOAD_CSUM_NONE             = 0x0\n\tNFT_PAYLOAD_CSUM_INET             = 0x1\n\tNFT_PAYLOAD_L4CSUM_PSEUDOHDR      = 0x1\n\tNFTA_PAYLOAD_UNSPEC               = 0x0\n\tNFTA_PAYLOAD_DREG                 = 0x1\n\tNFTA_PAYLOAD_BASE                 = 0x2\n\tNFTA_PAYLOAD_OFFSET               = 0x3\n\tNFTA_PAYLOAD_LEN                  = 0x4\n\tNFTA_PAYLOAD_SREG                 = 0x5\n\tNFTA_PAYLOAD_CSUM_TYPE            = 0x6\n\tNFTA_PAYLOAD_CSUM_OFFSET          = 0x7\n\tNFTA_PAYLOAD_CSUM_FLAGS           = 0x8\n\tNFT_EXTHDR_F_PRESENT              = 0x1\n\tNFT_EXTHDR_OP_IPV6                = 0x0\n\tNFT_EXTHDR_OP_TCPOPT              = 0x1\n\tNFTA_EXTHDR_UNSPEC                = 0x0\n\tNFTA_EXTHDR_DREG                  = 0x1\n\tNFTA_EXTHDR_TYPE                  = 0x2\n\tNFTA_EXTHDR_OFFSET                = 0x3\n\tNFTA_EXTHDR_LEN                   = 0x4\n\tNFTA_EXTHDR_FLAGS                 = 0x5\n\tNFTA_EXTHDR_OP                    = 0x6\n\tNFTA_EXTHDR_SREG                  = 0x7\n\tNFT_META_LEN                      = 0x0\n\tNFT_META_PROTOCOL                 = 0x1\n\tNFT_META_PRIORITY                 = 0x2\n\tNFT_META_MARK                     = 0x3\n\tNFT_META_IIF                      = 0x4\n\tNFT_META_OIF                      = 0x5\n\tNFT_META_IIFNAME                  = 0x6\n\tNFT_META_OIFNAME                  = 0x7\n\tNFT_META_IIFTYPE                  = 0x8\n\tNFT_META_OIFTYPE                  = 0x9\n\tNFT_META_SKUID                    = 0xa\n\tNFT_META_SKGID                    = 0xb\n\tNFT_META_NFTRACE                  = 0xc\n\tNFT_META_RTCLASSID                = 0xd\n\tNFT_META_SECMARK                  = 0xe\n\tNFT_META_NFPROTO                  = 0xf\n\tNFT_META_L4PROTO                  = 0x10\n\tNFT_META_BRI_IIFNAME              = 0x11\n\tNFT_META_BRI_OIFNAME              = 0x12\n\tNFT_META_PKTTYPE                  = 0x13\n\tNFT_META_CPU                      = 0x14\n\tNFT_META_IIFGROUP                 = 0x15\n\tNFT_META_OIFGROUP                 = 0x16\n\tNFT_META_CGROUP                   = 0x17\n\tNFT_META_PRANDOM                  = 0x18\n\tNFT_RT_CLASSID                    = 0x0\n\tNFT_RT_NEXTHOP4                   = 0x1\n\tNFT_RT_NEXTHOP6                   = 0x2\n\tNFT_RT_TCPMSS                     = 0x3\n\tNFT_HASH_JENKINS                  = 0x0\n\tNFT_HASH_SYM                      = 0x1\n\tNFTA_HASH_UNSPEC                  = 0x0\n\tNFTA_HASH_SREG                    = 0x1\n\tNFTA_HASH_DREG                    = 0x2\n\tNFTA_HASH_LEN                     = 0x3\n\tNFTA_HASH_MODULUS                 = 0x4\n\tNFTA_HASH_SEED                    = 0x5\n\tNFTA_HASH_OFFSET                  = 0x6\n\tNFTA_HASH_TYPE                    = 0x7\n\tNFTA_META_UNSPEC                  = 0x0\n\tNFTA_META_DREG                    = 0x1\n\tNFTA_META_KEY                     = 0x2\n\tNFTA_META_SREG                    = 0x3\n\tNFTA_RT_UNSPEC                    = 0x0\n\tNFTA_RT_DREG                      = 0x1\n\tNFTA_RT_KEY                       = 0x2\n\tNFT_CT_STATE                      = 0x0\n\tNFT_CT_DIRECTION                  = 0x1\n\tNFT_CT_STATUS                     = 0x2\n\tNFT_CT_MARK                       = 0x3\n\tNFT_CT_SECMARK                    = 0x4\n\tNFT_CT_EXPIRATION                 = 0x5\n\tNFT_CT_HELPER                     = 0x6\n\tNFT_CT_L3PROTOCOL                 = 0x7\n\tNFT_CT_SRC                        = 0x8\n\tNFT_CT_DST                        = 0x9\n\tNFT_CT_PROTOCOL                   = 0xa\n\tNFT_CT_PROTO_SRC                  = 0xb\n\tNFT_CT_PROTO_DST                  = 0xc\n\tNFT_CT_LABELS                     = 0xd\n\tNFT_CT_PKTS                       = 0xe\n\tNFT_CT_BYTES                      = 0xf\n\tNFT_CT_AVGPKT                     = 0x10\n\tNFT_CT_ZONE                       = 0x11\n\tNFT_CT_EVENTMASK                  = 0x12\n\tNFTA_CT_UNSPEC                    = 0x0\n\tNFTA_CT_DREG                      = 0x1\n\tNFTA_CT_KEY                       = 0x2\n\tNFTA_CT_DIRECTION                 = 0x3\n\tNFTA_CT_SREG                      = 0x4\n\tNFT_LIMIT_PKTS                    = 0x0\n\tNFT_LIMIT_PKT_BYTES               = 0x1\n\tNFT_LIMIT_F_INV                   = 0x1\n\tNFTA_LIMIT_UNSPEC                 = 0x0\n\tNFTA_LIMIT_RATE                   = 0x1\n\tNFTA_LIMIT_UNIT                   = 0x2\n\tNFTA_LIMIT_BURST                  = 0x3\n\tNFTA_LIMIT_TYPE                   = 0x4\n\tNFTA_LIMIT_FLAGS                  = 0x5\n\tNFTA_LIMIT_PAD                    = 0x6\n\tNFTA_COUNTER_UNSPEC               = 0x0\n\tNFTA_COUNTER_BYTES                = 0x1\n\tNFTA_COUNTER_PACKETS              = 0x2\n\tNFTA_COUNTER_PAD                  = 0x3\n\tNFTA_LOG_UNSPEC                   = 0x0\n\tNFTA_LOG_GROUP                    = 0x1\n\tNFTA_LOG_PREFIX                   = 0x2\n\tNFTA_LOG_SNAPLEN                  = 0x3\n\tNFTA_LOG_QTHRESHOLD               = 0x4\n\tNFTA_LOG_LEVEL                    = 0x5\n\tNFTA_LOG_FLAGS                    = 0x6\n\tNFTA_QUEUE_UNSPEC                 = 0x0\n\tNFTA_QUEUE_NUM                    = 0x1\n\tNFTA_QUEUE_TOTAL                  = 0x2\n\tNFTA_QUEUE_FLAGS                  = 0x3\n\tNFTA_QUEUE_SREG_QNUM              = 0x4\n\tNFT_QUOTA_F_INV                   = 0x1\n\tNFT_QUOTA_F_DEPLETED              = 0x2\n\tNFTA_QUOTA_UNSPEC                 = 0x0\n\tNFTA_QUOTA_BYTES                  = 0x1\n\tNFTA_QUOTA_FLAGS                  = 0x2\n\tNFTA_QUOTA_PAD                    = 0x3\n\tNFTA_QUOTA_CONSUMED               = 0x4\n\tNFT_REJECT_ICMP_UNREACH           = 0x0\n\tNFT_REJECT_TCP_RST                = 0x1\n\tNFT_REJECT_ICMPX_UNREACH          = 0x2\n\tNFT_REJECT_ICMPX_NO_ROUTE         = 0x0\n\tNFT_REJECT_ICMPX_PORT_UNREACH     = 0x1\n\tNFT_REJECT_ICMPX_HOST_UNREACH     = 0x2\n\tNFT_REJECT_ICMPX_ADMIN_PROHIBITED = 0x3\n\tNFTA_REJECT_UNSPEC                = 0x0\n\tNFTA_REJECT_TYPE                  = 0x1\n\tNFTA_REJECT_ICMP_CODE             = 0x2\n\tNFT_NAT_SNAT                      = 0x0\n\tNFT_NAT_DNAT                      = 0x1\n\tNFTA_NAT_UNSPEC                   = 0x0\n\tNFTA_NAT_TYPE                     = 0x1\n\tNFTA_NAT_FAMILY                   = 0x2\n\tNFTA_NAT_REG_ADDR_MIN             = 0x3\n\tNFTA_NAT_REG_ADDR_MAX             = 0x4\n\tNFTA_NAT_REG_PROTO_MIN            = 0x5\n\tNFTA_NAT_REG_PROTO_MAX            = 0x6\n\tNFTA_NAT_FLAGS                    = 0x7\n\tNFTA_MASQ_UNSPEC                  = 0x0\n\tNFTA_MASQ_FLAGS                   = 0x1\n\tNFTA_MASQ_REG_PROTO_MIN           = 0x2\n\tNFTA_MASQ_REG_PROTO_MAX           = 0x3\n\tNFTA_REDIR_UNSPEC                 = 0x0\n\tNFTA_REDIR_REG_PROTO_MIN          = 0x1\n\tNFTA_REDIR_REG_PROTO_MAX          = 0x2\n\tNFTA_REDIR_FLAGS                  = 0x3\n\tNFTA_DUP_UNSPEC                   = 0x0\n\tNFTA_DUP_SREG_ADDR                = 0x1\n\tNFTA_DUP_SREG_DEV                 = 0x2\n\tNFTA_FWD_UNSPEC                   = 0x0\n\tNFTA_FWD_SREG_DEV                 = 0x1\n\tNFTA_OBJREF_UNSPEC                = 0x0\n\tNFTA_OBJREF_IMM_TYPE              = 0x1\n\tNFTA_OBJREF_IMM_NAME              = 0x2\n\tNFTA_OBJREF_SET_SREG              = 0x3\n\tNFTA_OBJREF_SET_NAME              = 0x4\n\tNFTA_OBJREF_SET_ID                = 0x5\n\tNFTA_GEN_UNSPEC                   = 0x0\n\tNFTA_GEN_ID                       = 0x1\n\tNFTA_GEN_PROC_PID                 = 0x2\n\tNFTA_GEN_PROC_NAME                = 0x3\n\tNFTA_FIB_UNSPEC                   = 0x0\n\tNFTA_FIB_DREG                     = 0x1\n\tNFTA_FIB_RESULT                   = 0x2\n\tNFTA_FIB_FLAGS                    = 0x3\n\tNFT_FIB_RESULT_UNSPEC             = 0x0\n\tNFT_FIB_RESULT_OIF                = 0x1\n\tNFT_FIB_RESULT_OIFNAME            = 0x2\n\tNFT_FIB_RESULT_ADDRTYPE           = 0x3\n\tNFTA_FIB_F_SADDR                  = 0x1\n\tNFTA_FIB_F_DADDR                  = 0x2\n\tNFTA_FIB_F_MARK                   = 0x4\n\tNFTA_FIB_F_IIF                    = 0x8\n\tNFTA_FIB_F_OIF                    = 0x10\n\tNFTA_FIB_F_PRESENT                = 0x20\n\tNFTA_CT_HELPER_UNSPEC             = 0x0\n\tNFTA_CT_HELPER_NAME               = 0x1\n\tNFTA_CT_HELPER_L3PROTO            = 0x2\n\tNFTA_CT_HELPER_L4PROTO            = 0x3\n\tNFTA_OBJ_UNSPEC                   = 0x0\n\tNFTA_OBJ_TABLE                    = 0x1\n\tNFTA_OBJ_NAME                     = 0x2\n\tNFTA_OBJ_TYPE                     = 0x3\n\tNFTA_OBJ_DATA                     = 0x4\n\tNFTA_OBJ_USE                      = 0x5\n\tNFTA_TRACE_UNSPEC                 = 0x0\n\tNFTA_TRACE_TABLE                  = 0x1\n\tNFTA_TRACE_CHAIN                  = 0x2\n\tNFTA_TRACE_RULE_HANDLE            = 0x3\n\tNFTA_TRACE_TYPE                   = 0x4\n\tNFTA_TRACE_VERDICT                = 0x5\n\tNFTA_TRACE_ID                     = 0x6\n\tNFTA_TRACE_LL_HEADER              = 0x7\n\tNFTA_TRACE_NETWORK_HEADER         = 0x8\n\tNFTA_TRACE_TRANSPORT_HEADER       = 0x9\n\tNFTA_TRACE_IIF                    = 0xa\n\tNFTA_TRACE_IIFTYPE                = 0xb\n\tNFTA_TRACE_OIF                    = 0xc\n\tNFTA_TRACE_OIFTYPE                = 0xd\n\tNFTA_TRACE_MARK                   = 0xe\n\tNFTA_TRACE_NFPROTO                = 0xf\n\tNFTA_TRACE_POLICY                 = 0x10\n\tNFTA_TRACE_PAD                    = 0x11\n\tNFT_TRACETYPE_UNSPEC              = 0x0\n\tNFT_TRACETYPE_POLICY              = 0x1\n\tNFT_TRACETYPE_RETURN              = 0x2\n\tNFT_TRACETYPE_RULE                = 0x3\n\tNFTA_NG_UNSPEC                    = 0x0\n\tNFTA_NG_DREG                      = 0x1\n\tNFTA_NG_MODULUS                   = 0x2\n\tNFTA_NG_TYPE                      = 0x3\n\tNFTA_NG_OFFSET                    = 0x4\n\tNFT_NG_INCREMENTAL                = 0x0\n\tNFT_NG_RANDOM                     = 0x1\n)\n\ntype RTCTime struct {\n\tSec   int32\n\tMin   int32\n\tHour  int32\n\tMday  int32\n\tMon   int32\n\tYear  int32\n\tWday  int32\n\tYday  int32\n\tIsdst int32\n}\n\ntype RTCWkAlrm struct {\n\tEnabled uint8\n\tPending uint8\n\tTime    RTCTime\n}\n\ntype RTCPLLInfo struct {\n\tCtrl    int32\n\tValue   int32\n\tMax     int32\n\tMin     int32\n\tPosmult int32\n\tNegmult int32\n\tClock   int64\n}\n\ntype BlkpgIoctlArg struct {\n\tOp      int32\n\tFlags   int32\n\tDatalen int32\n\tData    *byte\n}\n\ntype BlkpgPartition struct {\n\tStart   int64\n\tLength  int64\n\tPno     int32\n\tDevname [64]uint8\n\tVolname [64]uint8\n\t_       [4]byte\n}\n\nconst (\n\tBLKPG                  = 0x20001269\n\tBLKPG_ADD_PARTITION    = 0x1\n\tBLKPG_DEL_PARTITION    = 0x2\n\tBLKPG_RESIZE_PARTITION = 0x3\n)\n\nconst (\n\tNETNSA_NONE = 0x0\n\tNETNSA_NSID = 0x1\n\tNETNSA_PID  = 0x2\n\tNETNSA_FD   = 0x3\n)\n\ntype XDPRingOffset struct {\n\tProducer uint64\n\tConsumer uint64\n\tDesc     uint64\n}\n\ntype XDPMmapOffsets struct {\n\tRx XDPRingOffset\n\tTx XDPRingOffset\n\tFr XDPRingOffset\n\tCr XDPRingOffset\n}\n\ntype XDPUmemReg struct {\n\tAddr     uint64\n\tLen      uint64\n\tSize     uint32\n\tHeadroom uint32\n}\n\ntype XDPStatistics struct {\n\tRx_dropped       uint64\n\tRx_invalid_descs uint64\n\tTx_invalid_descs uint64\n}\n\ntype XDPDesc struct {\n\tAddr    uint64\n\tLen     uint32\n\tOptions uint32\n}\n\nconst (\n\tNCSI_CMD_UNSPEC                 = 0x0\n\tNCSI_CMD_PKG_INFO               = 0x1\n\tNCSI_CMD_SET_INTERFACE          = 0x2\n\tNCSI_CMD_CLEAR_INTERFACE        = 0x3\n\tNCSI_ATTR_UNSPEC                = 0x0\n\tNCSI_ATTR_IFINDEX               = 0x1\n\tNCSI_ATTR_PACKAGE_LIST          = 0x2\n\tNCSI_ATTR_PACKAGE_ID            = 0x3\n\tNCSI_ATTR_CHANNEL_ID            = 0x4\n\tNCSI_PKG_ATTR_UNSPEC            = 0x0\n\tNCSI_PKG_ATTR                   = 0x1\n\tNCSI_PKG_ATTR_ID                = 0x2\n\tNCSI_PKG_ATTR_FORCED            = 0x3\n\tNCSI_PKG_ATTR_CHANNEL_LIST      = 0x4\n\tNCSI_CHANNEL_ATTR_UNSPEC        = 0x0\n\tNCSI_CHANNEL_ATTR               = 0x1\n\tNCSI_CHANNEL_ATTR_ID            = 0x2\n\tNCSI_CHANNEL_ATTR_VERSION_MAJOR = 0x3\n\tNCSI_CHANNEL_ATTR_VERSION_MINOR = 0x4\n\tNCSI_CHANNEL_ATTR_VERSION_STR   = 0x5\n\tNCSI_CHANNEL_ATTR_LINK_STATE    = 0x6\n\tNCSI_CHANNEL_ATTR_ACTIVE        = 0x7\n\tNCSI_CHANNEL_ATTR_FORCED        = 0x8\n\tNCSI_CHANNEL_ATTR_VLAN_LIST     = 0x9\n\tNCSI_CHANNEL_ATTR_VLAN_ID       = 0xa\n)\n\ntype ScmTimestamping struct {\n\tTs [3]Timespec\n}\n\nconst (\n\tSOF_TIMESTAMPING_TX_HARDWARE  = 0x1\n\tSOF_TIMESTAMPING_TX_SOFTWARE  = 0x2\n\tSOF_TIMESTAMPING_RX_HARDWARE  = 0x4\n\tSOF_TIMESTAMPING_RX_SOFTWARE  = 0x8\n\tSOF_TIMESTAMPING_SOFTWARE     = 0x10\n\tSOF_TIMESTAMPING_SYS_HARDWARE = 0x20\n\tSOF_TIMESTAMPING_RAW_HARDWARE = 0x40\n\tSOF_TIMESTAMPING_OPT_ID       = 0x80\n\tSOF_TIMESTAMPING_TX_SCHED     = 0x100\n\tSOF_TIMESTAMPING_TX_ACK       = 0x200\n\tSOF_TIMESTAMPING_OPT_CMSG     = 0x400\n\tSOF_TIMESTAMPING_OPT_TSONLY   = 0x800\n\tSOF_TIMESTAMPING_OPT_STATS    = 0x1000\n\tSOF_TIMESTAMPING_OPT_PKTINFO  = 0x2000\n\tSOF_TIMESTAMPING_OPT_TX_SWHW  = 0x4000\n\n\tSOF_TIMESTAMPING_LAST = 0x4000\n\tSOF_TIMESTAMPING_MASK = 0x7fff\n\n\tSCM_TSTAMP_SND   = 0x0\n\tSCM_TSTAMP_SCHED = 0x1\n\tSCM_TSTAMP_ACK   = 0x2\n)\n\ntype SockExtendedErr struct {\n\tErrno  uint32\n\tOrigin uint8\n\tType   uint8\n\tCode   uint8\n\tPad    uint8\n\tInfo   uint32\n\tData   uint32\n}\n\ntype FanotifyEventMetadata struct {\n\tEvent_len    uint32\n\tVers         uint8\n\tReserved     uint8\n\tMetadata_len uint16\n\tMask         uint64\n\tFd           int32\n\tPid          int32\n}\n\ntype FanotifyResponse struct {\n\tFd       int32\n\tResponse uint32\n}\n\nconst (\n\tCRYPTO_MSG_BASE      = 0x10\n\tCRYPTO_MSG_NEWALG    = 0x10\n\tCRYPTO_MSG_DELALG    = 0x11\n\tCRYPTO_MSG_UPDATEALG = 0x12\n\tCRYPTO_MSG_GETALG    = 0x13\n\tCRYPTO_MSG_DELRNG    = 0x14\n\tCRYPTO_MSG_GETSTAT   = 0x15\n)\n\nconst (\n\tCRYPTOCFGA_UNSPEC           = 0x0\n\tCRYPTOCFGA_PRIORITY_VAL     = 0x1\n\tCRYPTOCFGA_REPORT_LARVAL    = 0x2\n\tCRYPTOCFGA_REPORT_HASH      = 0x3\n\tCRYPTOCFGA_REPORT_BLKCIPHER = 0x4\n\tCRYPTOCFGA_REPORT_AEAD      = 0x5\n\tCRYPTOCFGA_REPORT_COMPRESS  = 0x6\n\tCRYPTOCFGA_REPORT_RNG       = 0x7\n\tCRYPTOCFGA_REPORT_CIPHER    = 0x8\n\tCRYPTOCFGA_REPORT_AKCIPHER  = 0x9\n\tCRYPTOCFGA_REPORT_KPP       = 0xa\n\tCRYPTOCFGA_REPORT_ACOMP     = 0xb\n\tCRYPTOCFGA_STAT_LARVAL      = 0xc\n\tCRYPTOCFGA_STAT_HASH        = 0xd\n\tCRYPTOCFGA_STAT_BLKCIPHER   = 0xe\n\tCRYPTOCFGA_STAT_AEAD        = 0xf\n\tCRYPTOCFGA_STAT_COMPRESS    = 0x10\n\tCRYPTOCFGA_STAT_RNG         = 0x11\n\tCRYPTOCFGA_STAT_CIPHER      = 0x12\n\tCRYPTOCFGA_STAT_AKCIPHER    = 0x13\n\tCRYPTOCFGA_STAT_KPP         = 0x14\n\tCRYPTOCFGA_STAT_ACOMP       = 0x15\n)\n\ntype CryptoUserAlg struct {\n\tName        [64]int8\n\tDriver_name [64]int8\n\tModule_name [64]int8\n\tType        uint32\n\tMask        uint32\n\tRefcnt      uint32\n\tFlags       uint32\n}\n\ntype CryptoStatAEAD struct {\n\tType         [64]int8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatAKCipher struct {\n\tType         [64]int8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tVerify_cnt   uint64\n\tSign_cnt     uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatCipher struct {\n\tType         [64]int8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatCompress struct {\n\tType            [64]int8\n\tCompress_cnt    uint64\n\tCompress_tlen   uint64\n\tDecompress_cnt  uint64\n\tDecompress_tlen uint64\n\tErr_cnt         uint64\n}\n\ntype CryptoStatHash struct {\n\tType      [64]int8\n\tHash_cnt  uint64\n\tHash_tlen uint64\n\tErr_cnt   uint64\n}\n\ntype CryptoStatKPP struct {\n\tType                      [64]int8\n\tSetsecret_cnt             uint64\n\tGenerate_public_key_cnt   uint64\n\tCompute_shared_secret_cnt uint64\n\tErr_cnt                   uint64\n}\n\ntype CryptoStatRNG struct {\n\tType          [64]int8\n\tGenerate_cnt  uint64\n\tGenerate_tlen uint64\n\tSeed_cnt      uint64\n\tErr_cnt       uint64\n}\n\ntype CryptoStatLarval struct {\n\tType [64]int8\n}\n\ntype CryptoReportLarval struct {\n\tType [64]int8\n}\n\ntype CryptoReportHash struct {\n\tType       [64]int8\n\tBlocksize  uint32\n\tDigestsize uint32\n}\n\ntype CryptoReportCipher struct {\n\tType        [64]int8\n\tBlocksize   uint32\n\tMin_keysize uint32\n\tMax_keysize uint32\n}\n\ntype CryptoReportBlkCipher struct {\n\tType        [64]int8\n\tGeniv       [64]int8\n\tBlocksize   uint32\n\tMin_keysize uint32\n\tMax_keysize uint32\n\tIvsize      uint32\n}\n\ntype CryptoReportAEAD struct {\n\tType        [64]int8\n\tGeniv       [64]int8\n\tBlocksize   uint32\n\tMaxauthsize uint32\n\tIvsize      uint32\n}\n\ntype CryptoReportComp struct {\n\tType [64]int8\n}\n\ntype CryptoReportRNG struct {\n\tType     [64]int8\n\tSeedsize uint32\n}\n\ntype CryptoReportAKCipher struct {\n\tType [64]int8\n}\n\ntype CryptoReportKPP struct {\n\tType [64]int8\n}\n\ntype CryptoReportAcomp struct {\n\tType [64]int8\n}\n\nconst (\n\tBPF_REG_0                           = 0x0\n\tBPF_REG_1                           = 0x1\n\tBPF_REG_2                           = 0x2\n\tBPF_REG_3                           = 0x3\n\tBPF_REG_4                           = 0x4\n\tBPF_REG_5                           = 0x5\n\tBPF_REG_6                           = 0x6\n\tBPF_REG_7                           = 0x7\n\tBPF_REG_8                           = 0x8\n\tBPF_REG_9                           = 0x9\n\tBPF_REG_10                          = 0xa\n\tBPF_MAP_CREATE                      = 0x0\n\tBPF_MAP_LOOKUP_ELEM                 = 0x1\n\tBPF_MAP_UPDATE_ELEM                 = 0x2\n\tBPF_MAP_DELETE_ELEM                 = 0x3\n\tBPF_MAP_GET_NEXT_KEY                = 0x4\n\tBPF_PROG_LOAD                       = 0x5\n\tBPF_OBJ_PIN                         = 0x6\n\tBPF_OBJ_GET                         = 0x7\n\tBPF_PROG_ATTACH                     = 0x8\n\tBPF_PROG_DETACH                     = 0x9\n\tBPF_PROG_TEST_RUN                   = 0xa\n\tBPF_PROG_GET_NEXT_ID                = 0xb\n\tBPF_MAP_GET_NEXT_ID                 = 0xc\n\tBPF_PROG_GET_FD_BY_ID               = 0xd\n\tBPF_MAP_GET_FD_BY_ID                = 0xe\n\tBPF_OBJ_GET_INFO_BY_FD              = 0xf\n\tBPF_PROG_QUERY                      = 0x10\n\tBPF_RAW_TRACEPOINT_OPEN             = 0x11\n\tBPF_BTF_LOAD                        = 0x12\n\tBPF_BTF_GET_FD_BY_ID                = 0x13\n\tBPF_TASK_FD_QUERY                   = 0x14\n\tBPF_MAP_LOOKUP_AND_DELETE_ELEM      = 0x15\n\tBPF_MAP_TYPE_UNSPEC                 = 0x0\n\tBPF_MAP_TYPE_HASH                   = 0x1\n\tBPF_MAP_TYPE_ARRAY                  = 0x2\n\tBPF_MAP_TYPE_PROG_ARRAY             = 0x3\n\tBPF_MAP_TYPE_PERF_EVENT_ARRAY       = 0x4\n\tBPF_MAP_TYPE_PERCPU_HASH            = 0x5\n\tBPF_MAP_TYPE_PERCPU_ARRAY           = 0x6\n\tBPF_MAP_TYPE_STACK_TRACE            = 0x7\n\tBPF_MAP_TYPE_CGROUP_ARRAY           = 0x8\n\tBPF_MAP_TYPE_LRU_HASH               = 0x9\n\tBPF_MAP_TYPE_LRU_PERCPU_HASH        = 0xa\n\tBPF_MAP_TYPE_LPM_TRIE               = 0xb\n\tBPF_MAP_TYPE_ARRAY_OF_MAPS          = 0xc\n\tBPF_MAP_TYPE_HASH_OF_MAPS           = 0xd\n\tBPF_MAP_TYPE_DEVMAP                 = 0xe\n\tBPF_MAP_TYPE_SOCKMAP                = 0xf\n\tBPF_MAP_TYPE_CPUMAP                 = 0x10\n\tBPF_MAP_TYPE_XSKMAP                 = 0x11\n\tBPF_MAP_TYPE_SOCKHASH               = 0x12\n\tBPF_MAP_TYPE_CGROUP_STORAGE         = 0x13\n\tBPF_MAP_TYPE_REUSEPORT_SOCKARRAY    = 0x14\n\tBPF_MAP_TYPE_PERCPU_CGROUP_STORAGE  = 0x15\n\tBPF_MAP_TYPE_QUEUE                  = 0x16\n\tBPF_MAP_TYPE_STACK                  = 0x17\n\tBPF_PROG_TYPE_UNSPEC                = 0x0\n\tBPF_PROG_TYPE_SOCKET_FILTER         = 0x1\n\tBPF_PROG_TYPE_KPROBE                = 0x2\n\tBPF_PROG_TYPE_SCHED_CLS             = 0x3\n\tBPF_PROG_TYPE_SCHED_ACT             = 0x4\n\tBPF_PROG_TYPE_TRACEPOINT            = 0x5\n\tBPF_PROG_TYPE_XDP                   = 0x6\n\tBPF_PROG_TYPE_PERF_EVENT            = 0x7\n\tBPF_PROG_TYPE_CGROUP_SKB            = 0x8\n\tBPF_PROG_TYPE_CGROUP_SOCK           = 0x9\n\tBPF_PROG_TYPE_LWT_IN                = 0xa\n\tBPF_PROG_TYPE_LWT_OUT               = 0xb\n\tBPF_PROG_TYPE_LWT_XMIT              = 0xc\n\tBPF_PROG_TYPE_SOCK_OPS              = 0xd\n\tBPF_PROG_TYPE_SK_SKB                = 0xe\n\tBPF_PROG_TYPE_CGROUP_DEVICE         = 0xf\n\tBPF_PROG_TYPE_SK_MSG                = 0x10\n\tBPF_PROG_TYPE_RAW_TRACEPOINT        = 0x11\n\tBPF_PROG_TYPE_CGROUP_SOCK_ADDR      = 0x12\n\tBPF_PROG_TYPE_LWT_SEG6LOCAL         = 0x13\n\tBPF_PROG_TYPE_LIRC_MODE2            = 0x14\n\tBPF_PROG_TYPE_SK_REUSEPORT          = 0x15\n\tBPF_PROG_TYPE_FLOW_DISSECTOR        = 0x16\n\tBPF_CGROUP_INET_INGRESS             = 0x0\n\tBPF_CGROUP_INET_EGRESS              = 0x1\n\tBPF_CGROUP_INET_SOCK_CREATE         = 0x2\n\tBPF_CGROUP_SOCK_OPS                 = 0x3\n\tBPF_SK_SKB_STREAM_PARSER            = 0x4\n\tBPF_SK_SKB_STREAM_VERDICT           = 0x5\n\tBPF_CGROUP_DEVICE                   = 0x6\n\tBPF_SK_MSG_VERDICT                  = 0x7\n\tBPF_CGROUP_INET4_BIND               = 0x8\n\tBPF_CGROUP_INET6_BIND               = 0x9\n\tBPF_CGROUP_INET4_CONNECT            = 0xa\n\tBPF_CGROUP_INET6_CONNECT            = 0xb\n\tBPF_CGROUP_INET4_POST_BIND          = 0xc\n\tBPF_CGROUP_INET6_POST_BIND          = 0xd\n\tBPF_CGROUP_UDP4_SENDMSG             = 0xe\n\tBPF_CGROUP_UDP6_SENDMSG             = 0xf\n\tBPF_LIRC_MODE2                      = 0x10\n\tBPF_FLOW_DISSECTOR                  = 0x11\n\tBPF_STACK_BUILD_ID_EMPTY            = 0x0\n\tBPF_STACK_BUILD_ID_VALID            = 0x1\n\tBPF_STACK_BUILD_ID_IP               = 0x2\n\tBPF_ADJ_ROOM_NET                    = 0x0\n\tBPF_HDR_START_MAC                   = 0x0\n\tBPF_HDR_START_NET                   = 0x1\n\tBPF_LWT_ENCAP_SEG6                  = 0x0\n\tBPF_LWT_ENCAP_SEG6_INLINE           = 0x1\n\tBPF_OK                              = 0x0\n\tBPF_DROP                            = 0x2\n\tBPF_REDIRECT                        = 0x7\n\tBPF_SOCK_OPS_VOID                   = 0x0\n\tBPF_SOCK_OPS_TIMEOUT_INIT           = 0x1\n\tBPF_SOCK_OPS_RWND_INIT              = 0x2\n\tBPF_SOCK_OPS_TCP_CONNECT_CB         = 0x3\n\tBPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB  = 0x4\n\tBPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB = 0x5\n\tBPF_SOCK_OPS_NEEDS_ECN              = 0x6\n\tBPF_SOCK_OPS_BASE_RTT               = 0x7\n\tBPF_SOCK_OPS_RTO_CB                 = 0x8\n\tBPF_SOCK_OPS_RETRANS_CB             = 0x9\n\tBPF_SOCK_OPS_STATE_CB               = 0xa\n\tBPF_SOCK_OPS_TCP_LISTEN_CB          = 0xb\n\tBPF_TCP_ESTABLISHED                 = 0x1\n\tBPF_TCP_SYN_SENT                    = 0x2\n\tBPF_TCP_SYN_RECV                    = 0x3\n\tBPF_TCP_FIN_WAIT1                   = 0x4\n\tBPF_TCP_FIN_WAIT2                   = 0x5\n\tBPF_TCP_TIME_WAIT                   = 0x6\n\tBPF_TCP_CLOSE                       = 0x7\n\tBPF_TCP_CLOSE_WAIT                  = 0x8\n\tBPF_TCP_LAST_ACK                    = 0x9\n\tBPF_TCP_LISTEN                      = 0xa\n\tBPF_TCP_CLOSING                     = 0xb\n\tBPF_TCP_NEW_SYN_RECV                = 0xc\n\tBPF_TCP_MAX_STATES                  = 0xd\n\tBPF_FIB_LKUP_RET_SUCCESS            = 0x0\n\tBPF_FIB_LKUP_RET_BLACKHOLE          = 0x1\n\tBPF_FIB_LKUP_RET_UNREACHABLE        = 0x2\n\tBPF_FIB_LKUP_RET_PROHIBIT           = 0x3\n\tBPF_FIB_LKUP_RET_NOT_FWDED          = 0x4\n\tBPF_FIB_LKUP_RET_FWD_DISABLED       = 0x5\n\tBPF_FIB_LKUP_RET_UNSUPP_LWT         = 0x6\n\tBPF_FIB_LKUP_RET_NO_NEIGH           = 0x7\n\tBPF_FIB_LKUP_RET_FRAG_NEEDED        = 0x8\n\tBPF_FD_TYPE_RAW_TRACEPOINT          = 0x0\n\tBPF_FD_TYPE_TRACEPOINT              = 0x1\n\tBPF_FD_TYPE_KPROBE                  = 0x2\n\tBPF_FD_TYPE_KRETPROBE               = 0x3\n\tBPF_FD_TYPE_UPROBE                  = 0x4\n\tBPF_FD_TYPE_URETPROBE               = 0x5\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go",
    "content": "// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build mipsle,linux\n\npackage unix\n\nconst (\n\tSizeofPtr      = 0x4\n\tSizeofShort    = 0x2\n\tSizeofInt      = 0x4\n\tSizeofLong     = 0x4\n\tSizeofLongLong = 0x8\n\tPathMax        = 0x1000\n)\n\ntype (\n\t_C_short     int16\n\t_C_int       int32\n\t_C_long      int32\n\t_C_long_long int64\n)\n\ntype Timespec struct {\n\tSec  int32\n\tNsec int32\n}\n\ntype Timeval struct {\n\tSec  int32\n\tUsec int32\n}\n\ntype Timex struct {\n\tModes     uint32\n\tOffset    int32\n\tFreq      int32\n\tMaxerror  int32\n\tEsterror  int32\n\tStatus    int32\n\tConstant  int32\n\tPrecision int32\n\tTolerance int32\n\tTime      Timeval\n\tTick      int32\n\tPpsfreq   int32\n\tJitter    int32\n\tShift     int32\n\tStabil    int32\n\tJitcnt    int32\n\tCalcnt    int32\n\tErrcnt    int32\n\tStbcnt    int32\n\tTai       int32\n\t_         [44]byte\n}\n\ntype Time_t int32\n\ntype Tms struct {\n\tUtime  int32\n\tStime  int32\n\tCutime int32\n\tCstime int32\n}\n\ntype Utimbuf struct {\n\tActime  int32\n\tModtime int32\n}\n\ntype Rusage struct {\n\tUtime    Timeval\n\tStime    Timeval\n\tMaxrss   int32\n\tIxrss    int32\n\tIdrss    int32\n\tIsrss    int32\n\tMinflt   int32\n\tMajflt   int32\n\tNswap    int32\n\tInblock  int32\n\tOublock  int32\n\tMsgsnd   int32\n\tMsgrcv   int32\n\tNsignals int32\n\tNvcsw    int32\n\tNivcsw   int32\n}\n\ntype Rlimit struct {\n\tCur uint64\n\tMax uint64\n}\n\ntype _Gid_t uint32\n\ntype Stat_t struct {\n\tDev     uint32\n\tPad1    [3]int32\n\tIno     uint64\n\tMode    uint32\n\tNlink   uint32\n\tUid     uint32\n\tGid     uint32\n\tRdev    uint32\n\tPad2    [3]int32\n\tSize    int64\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\tBlksize int32\n\tPad4    int32\n\tBlocks  int64\n\tPad5    [14]int32\n}\n\ntype StatxTimestamp struct {\n\tSec  int64\n\tNsec uint32\n\t_    int32\n}\n\ntype Statx_t struct {\n\tMask            uint32\n\tBlksize         uint32\n\tAttributes      uint64\n\tNlink           uint32\n\tUid             uint32\n\tGid             uint32\n\tMode            uint16\n\t_               [1]uint16\n\tIno             uint64\n\tSize            uint64\n\tBlocks          uint64\n\tAttributes_mask uint64\n\tAtime           StatxTimestamp\n\tBtime           StatxTimestamp\n\tCtime           StatxTimestamp\n\tMtime           StatxTimestamp\n\tRdev_major      uint32\n\tRdev_minor      uint32\n\tDev_major       uint32\n\tDev_minor       uint32\n\t_               [14]uint64\n}\n\ntype Dirent struct {\n\tIno    uint64\n\tOff    int64\n\tReclen uint16\n\tType   uint8\n\tName   [256]int8\n\t_      [5]byte\n}\n\ntype Fsid struct {\n\tVal [2]int32\n}\n\ntype Flock_t struct {\n\tType   int16\n\tWhence int16\n\t_      [4]byte\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\t_      [4]byte\n}\n\ntype FscryptPolicy struct {\n\tVersion                   uint8\n\tContents_encryption_mode  uint8\n\tFilenames_encryption_mode uint8\n\tFlags                     uint8\n\tMaster_key_descriptor     [8]uint8\n}\n\ntype FscryptKey struct {\n\tMode uint32\n\tRaw  [64]uint8\n\tSize uint32\n}\n\ntype KeyctlDHParams struct {\n\tPrivate int32\n\tPrime   int32\n\tBase    int32\n}\n\nconst (\n\tFADV_NORMAL     = 0x0\n\tFADV_RANDOM     = 0x1\n\tFADV_SEQUENTIAL = 0x2\n\tFADV_WILLNEED   = 0x3\n\tFADV_DONTNEED   = 0x4\n\tFADV_NOREUSE    = 0x5\n)\n\ntype RawSockaddrInet4 struct {\n\tFamily uint16\n\tPort   uint16\n\tAddr   [4]byte /* in_addr */\n\tZero   [8]uint8\n}\n\ntype RawSockaddrInet6 struct {\n\tFamily   uint16\n\tPort     uint16\n\tFlowinfo uint32\n\tAddr     [16]byte /* in6_addr */\n\tScope_id uint32\n}\n\ntype RawSockaddrUnix struct {\n\tFamily uint16\n\tPath   [108]int8\n}\n\ntype RawSockaddrLinklayer struct {\n\tFamily   uint16\n\tProtocol uint16\n\tIfindex  int32\n\tHatype   uint16\n\tPkttype  uint8\n\tHalen    uint8\n\tAddr     [8]uint8\n}\n\ntype RawSockaddrNetlink struct {\n\tFamily uint16\n\tPad    uint16\n\tPid    uint32\n\tGroups uint32\n}\n\ntype RawSockaddrHCI struct {\n\tFamily  uint16\n\tDev     uint16\n\tChannel uint16\n}\n\ntype RawSockaddrL2 struct {\n\tFamily      uint16\n\tPsm         uint16\n\tBdaddr      [6]uint8\n\tCid         uint16\n\tBdaddr_type uint8\n\t_           [1]byte\n}\n\ntype RawSockaddrRFCOMM struct {\n\tFamily  uint16\n\tBdaddr  [6]uint8\n\tChannel uint8\n\t_       [1]byte\n}\n\ntype RawSockaddrCAN struct {\n\tFamily  uint16\n\tIfindex int32\n\tAddr    [8]byte\n}\n\ntype RawSockaddrALG struct {\n\tFamily uint16\n\tType   [14]uint8\n\tFeat   uint32\n\tMask   uint32\n\tName   [64]uint8\n}\n\ntype RawSockaddrVM struct {\n\tFamily    uint16\n\tReserved1 uint16\n\tPort      uint32\n\tCid       uint32\n\tZero      [4]uint8\n}\n\ntype RawSockaddrXDP struct {\n\tFamily         uint16\n\tFlags          uint16\n\tIfindex        uint32\n\tQueue_id       uint32\n\tShared_umem_fd uint32\n}\n\ntype RawSockaddrPPPoX [0x1e]byte\n\ntype RawSockaddr struct {\n\tFamily uint16\n\tData   [14]int8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [96]int8\n}\n\ntype _Socklen uint32\n\ntype Linger struct {\n\tOnoff  int32\n\tLinger int32\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint32\n}\n\ntype IPMreq struct {\n\tMultiaddr [4]byte /* in_addr */\n\tInterface [4]byte /* in_addr */\n}\n\ntype IPMreqn struct {\n\tMultiaddr [4]byte /* in_addr */\n\tAddress   [4]byte /* in_addr */\n\tIfindex   int32\n}\n\ntype IPv6Mreq struct {\n\tMultiaddr [16]byte /* in6_addr */\n\tInterface uint32\n}\n\ntype PacketMreq struct {\n\tIfindex int32\n\tType    uint16\n\tAlen    uint16\n\tAddress [8]uint8\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tIov        *Iovec\n\tIovlen     uint32\n\tControl    *byte\n\tControllen uint32\n\tFlags      int32\n}\n\ntype Cmsghdr struct {\n\tLen   uint32\n\tLevel int32\n\tType  int32\n}\n\ntype Inet4Pktinfo struct {\n\tIfindex  int32\n\tSpec_dst [4]byte /* in_addr */\n\tAddr     [4]byte /* in_addr */\n}\n\ntype Inet6Pktinfo struct {\n\tAddr    [16]byte /* in6_addr */\n\tIfindex uint32\n}\n\ntype IPv6MTUInfo struct {\n\tAddr RawSockaddrInet6\n\tMtu  uint32\n}\n\ntype ICMPv6Filter struct {\n\tData [8]uint32\n}\n\ntype Ucred struct {\n\tPid int32\n\tUid uint32\n\tGid uint32\n}\n\ntype TCPInfo struct {\n\tState          uint8\n\tCa_state       uint8\n\tRetransmits    uint8\n\tProbes         uint8\n\tBackoff        uint8\n\tOptions        uint8\n\tRto            uint32\n\tAto            uint32\n\tSnd_mss        uint32\n\tRcv_mss        uint32\n\tUnacked        uint32\n\tSacked         uint32\n\tLost           uint32\n\tRetrans        uint32\n\tFackets        uint32\n\tLast_data_sent uint32\n\tLast_ack_sent  uint32\n\tLast_data_recv uint32\n\tLast_ack_recv  uint32\n\tPmtu           uint32\n\tRcv_ssthresh   uint32\n\tRtt            uint32\n\tRttvar         uint32\n\tSnd_ssthresh   uint32\n\tSnd_cwnd       uint32\n\tAdvmss         uint32\n\tReordering     uint32\n\tRcv_rtt        uint32\n\tRcv_space      uint32\n\tTotal_retrans  uint32\n}\n\ntype CanFilter struct {\n\tId   uint32\n\tMask uint32\n}\n\nconst (\n\tSizeofSockaddrInet4     = 0x10\n\tSizeofSockaddrInet6     = 0x1c\n\tSizeofSockaddrAny       = 0x70\n\tSizeofSockaddrUnix      = 0x6e\n\tSizeofSockaddrLinklayer = 0x14\n\tSizeofSockaddrNetlink   = 0xc\n\tSizeofSockaddrHCI       = 0x6\n\tSizeofSockaddrL2        = 0xe\n\tSizeofSockaddrRFCOMM    = 0xa\n\tSizeofSockaddrCAN       = 0x10\n\tSizeofSockaddrALG       = 0x58\n\tSizeofSockaddrVM        = 0x10\n\tSizeofSockaddrXDP       = 0x10\n\tSizeofSockaddrPPPoX     = 0x1e\n\tSizeofLinger            = 0x8\n\tSizeofIovec             = 0x8\n\tSizeofIPMreq            = 0x8\n\tSizeofIPMreqn           = 0xc\n\tSizeofIPv6Mreq          = 0x14\n\tSizeofPacketMreq        = 0x10\n\tSizeofMsghdr            = 0x1c\n\tSizeofCmsghdr           = 0xc\n\tSizeofInet4Pktinfo      = 0xc\n\tSizeofInet6Pktinfo      = 0x14\n\tSizeofIPv6MTUInfo       = 0x20\n\tSizeofICMPv6Filter      = 0x20\n\tSizeofUcred             = 0xc\n\tSizeofTCPInfo           = 0x68\n\tSizeofCanFilter         = 0x8\n)\n\nconst (\n\tNDA_UNSPEC              = 0x0\n\tNDA_DST                 = 0x1\n\tNDA_LLADDR              = 0x2\n\tNDA_CACHEINFO           = 0x3\n\tNDA_PROBES              = 0x4\n\tNDA_VLAN                = 0x5\n\tNDA_PORT                = 0x6\n\tNDA_VNI                 = 0x7\n\tNDA_IFINDEX             = 0x8\n\tNDA_MASTER              = 0x9\n\tNDA_LINK_NETNSID        = 0xa\n\tNDA_SRC_VNI             = 0xb\n\tNTF_USE                 = 0x1\n\tNTF_SELF                = 0x2\n\tNTF_MASTER              = 0x4\n\tNTF_PROXY               = 0x8\n\tNTF_EXT_LEARNED         = 0x10\n\tNTF_OFFLOADED           = 0x20\n\tNTF_ROUTER              = 0x80\n\tNUD_INCOMPLETE          = 0x1\n\tNUD_REACHABLE           = 0x2\n\tNUD_STALE               = 0x4\n\tNUD_DELAY               = 0x8\n\tNUD_PROBE               = 0x10\n\tNUD_FAILED              = 0x20\n\tNUD_NOARP               = 0x40\n\tNUD_PERMANENT           = 0x80\n\tNUD_NONE                = 0x0\n\tIFA_UNSPEC              = 0x0\n\tIFA_ADDRESS             = 0x1\n\tIFA_LOCAL               = 0x2\n\tIFA_LABEL               = 0x3\n\tIFA_BROADCAST           = 0x4\n\tIFA_ANYCAST             = 0x5\n\tIFA_CACHEINFO           = 0x6\n\tIFA_MULTICAST           = 0x7\n\tIFA_FLAGS               = 0x8\n\tIFA_RT_PRIORITY         = 0x9\n\tIFA_TARGET_NETNSID      = 0xa\n\tIFLA_UNSPEC             = 0x0\n\tIFLA_ADDRESS            = 0x1\n\tIFLA_BROADCAST          = 0x2\n\tIFLA_IFNAME             = 0x3\n\tIFLA_MTU                = 0x4\n\tIFLA_LINK               = 0x5\n\tIFLA_QDISC              = 0x6\n\tIFLA_STATS              = 0x7\n\tIFLA_COST               = 0x8\n\tIFLA_PRIORITY           = 0x9\n\tIFLA_MASTER             = 0xa\n\tIFLA_WIRELESS           = 0xb\n\tIFLA_PROTINFO           = 0xc\n\tIFLA_TXQLEN             = 0xd\n\tIFLA_MAP                = 0xe\n\tIFLA_WEIGHT             = 0xf\n\tIFLA_OPERSTATE          = 0x10\n\tIFLA_LINKMODE           = 0x11\n\tIFLA_LINKINFO           = 0x12\n\tIFLA_NET_NS_PID         = 0x13\n\tIFLA_IFALIAS            = 0x14\n\tIFLA_NUM_VF             = 0x15\n\tIFLA_VFINFO_LIST        = 0x16\n\tIFLA_STATS64            = 0x17\n\tIFLA_VF_PORTS           = 0x18\n\tIFLA_PORT_SELF          = 0x19\n\tIFLA_AF_SPEC            = 0x1a\n\tIFLA_GROUP              = 0x1b\n\tIFLA_NET_NS_FD          = 0x1c\n\tIFLA_EXT_MASK           = 0x1d\n\tIFLA_PROMISCUITY        = 0x1e\n\tIFLA_NUM_TX_QUEUES      = 0x1f\n\tIFLA_NUM_RX_QUEUES      = 0x20\n\tIFLA_CARRIER            = 0x21\n\tIFLA_PHYS_PORT_ID       = 0x22\n\tIFLA_CARRIER_CHANGES    = 0x23\n\tIFLA_PHYS_SWITCH_ID     = 0x24\n\tIFLA_LINK_NETNSID       = 0x25\n\tIFLA_PHYS_PORT_NAME     = 0x26\n\tIFLA_PROTO_DOWN         = 0x27\n\tIFLA_GSO_MAX_SEGS       = 0x28\n\tIFLA_GSO_MAX_SIZE       = 0x29\n\tIFLA_PAD                = 0x2a\n\tIFLA_XDP                = 0x2b\n\tIFLA_EVENT              = 0x2c\n\tIFLA_NEW_NETNSID        = 0x2d\n\tIFLA_IF_NETNSID         = 0x2e\n\tIFLA_TARGET_NETNSID     = 0x2e\n\tIFLA_CARRIER_UP_COUNT   = 0x2f\n\tIFLA_CARRIER_DOWN_COUNT = 0x30\n\tIFLA_NEW_IFINDEX        = 0x31\n\tIFLA_MIN_MTU            = 0x32\n\tIFLA_MAX_MTU            = 0x33\n\tIFLA_MAX                = 0x33\n\tIFLA_INFO_KIND          = 0x1\n\tIFLA_INFO_DATA          = 0x2\n\tIFLA_INFO_XSTATS        = 0x3\n\tIFLA_INFO_SLAVE_KIND    = 0x4\n\tIFLA_INFO_SLAVE_DATA    = 0x5\n\tRT_SCOPE_UNIVERSE       = 0x0\n\tRT_SCOPE_SITE           = 0xc8\n\tRT_SCOPE_LINK           = 0xfd\n\tRT_SCOPE_HOST           = 0xfe\n\tRT_SCOPE_NOWHERE        = 0xff\n\tRT_TABLE_UNSPEC         = 0x0\n\tRT_TABLE_COMPAT         = 0xfc\n\tRT_TABLE_DEFAULT        = 0xfd\n\tRT_TABLE_MAIN           = 0xfe\n\tRT_TABLE_LOCAL          = 0xff\n\tRT_TABLE_MAX            = 0xffffffff\n\tRTA_UNSPEC              = 0x0\n\tRTA_DST                 = 0x1\n\tRTA_SRC                 = 0x2\n\tRTA_IIF                 = 0x3\n\tRTA_OIF                 = 0x4\n\tRTA_GATEWAY             = 0x5\n\tRTA_PRIORITY            = 0x6\n\tRTA_PREFSRC             = 0x7\n\tRTA_METRICS             = 0x8\n\tRTA_MULTIPATH           = 0x9\n\tRTA_FLOW                = 0xb\n\tRTA_CACHEINFO           = 0xc\n\tRTA_TABLE               = 0xf\n\tRTA_MARK                = 0x10\n\tRTA_MFC_STATS           = 0x11\n\tRTA_VIA                 = 0x12\n\tRTA_NEWDST              = 0x13\n\tRTA_PREF                = 0x14\n\tRTA_ENCAP_TYPE          = 0x15\n\tRTA_ENCAP               = 0x16\n\tRTA_EXPIRES             = 0x17\n\tRTA_PAD                 = 0x18\n\tRTA_UID                 = 0x19\n\tRTA_TTL_PROPAGATE       = 0x1a\n\tRTA_IP_PROTO            = 0x1b\n\tRTA_SPORT               = 0x1c\n\tRTA_DPORT               = 0x1d\n\tRTN_UNSPEC              = 0x0\n\tRTN_UNICAST             = 0x1\n\tRTN_LOCAL               = 0x2\n\tRTN_BROADCAST           = 0x3\n\tRTN_ANYCAST             = 0x4\n\tRTN_MULTICAST           = 0x5\n\tRTN_BLACKHOLE           = 0x6\n\tRTN_UNREACHABLE         = 0x7\n\tRTN_PROHIBIT            = 0x8\n\tRTN_THROW               = 0x9\n\tRTN_NAT                 = 0xa\n\tRTN_XRESOLVE            = 0xb\n\tRTNLGRP_NONE            = 0x0\n\tRTNLGRP_LINK            = 0x1\n\tRTNLGRP_NOTIFY          = 0x2\n\tRTNLGRP_NEIGH           = 0x3\n\tRTNLGRP_TC              = 0x4\n\tRTNLGRP_IPV4_IFADDR     = 0x5\n\tRTNLGRP_IPV4_MROUTE     = 0x6\n\tRTNLGRP_IPV4_ROUTE      = 0x7\n\tRTNLGRP_IPV4_RULE       = 0x8\n\tRTNLGRP_IPV6_IFADDR     = 0x9\n\tRTNLGRP_IPV6_MROUTE     = 0xa\n\tRTNLGRP_IPV6_ROUTE      = 0xb\n\tRTNLGRP_IPV6_IFINFO     = 0xc\n\tRTNLGRP_IPV6_PREFIX     = 0x12\n\tRTNLGRP_IPV6_RULE       = 0x13\n\tRTNLGRP_ND_USEROPT      = 0x14\n\tSizeofNlMsghdr          = 0x10\n\tSizeofNlMsgerr          = 0x14\n\tSizeofRtGenmsg          = 0x1\n\tSizeofNlAttr            = 0x4\n\tSizeofRtAttr            = 0x4\n\tSizeofIfInfomsg         = 0x10\n\tSizeofIfAddrmsg         = 0x8\n\tSizeofRtMsg             = 0xc\n\tSizeofRtNexthop         = 0x8\n\tSizeofNdUseroptmsg      = 0x10\n\tSizeofNdMsg             = 0xc\n)\n\ntype NlMsghdr struct {\n\tLen   uint32\n\tType  uint16\n\tFlags uint16\n\tSeq   uint32\n\tPid   uint32\n}\n\ntype NlMsgerr struct {\n\tError int32\n\tMsg   NlMsghdr\n}\n\ntype RtGenmsg struct {\n\tFamily uint8\n}\n\ntype NlAttr struct {\n\tLen  uint16\n\tType uint16\n}\n\ntype RtAttr struct {\n\tLen  uint16\n\tType uint16\n}\n\ntype IfInfomsg struct {\n\tFamily uint8\n\t_      uint8\n\tType   uint16\n\tIndex  int32\n\tFlags  uint32\n\tChange uint32\n}\n\ntype IfAddrmsg struct {\n\tFamily    uint8\n\tPrefixlen uint8\n\tFlags     uint8\n\tScope     uint8\n\tIndex     uint32\n}\n\ntype RtMsg struct {\n\tFamily   uint8\n\tDst_len  uint8\n\tSrc_len  uint8\n\tTos      uint8\n\tTable    uint8\n\tProtocol uint8\n\tScope    uint8\n\tType     uint8\n\tFlags    uint32\n}\n\ntype RtNexthop struct {\n\tLen     uint16\n\tFlags   uint8\n\tHops    uint8\n\tIfindex int32\n}\n\ntype NdUseroptmsg struct {\n\tFamily    uint8\n\tPad1      uint8\n\tOpts_len  uint16\n\tIfindex   int32\n\tIcmp_type uint8\n\tIcmp_code uint8\n\tPad2      uint16\n\tPad3      uint32\n}\n\ntype NdMsg struct {\n\tFamily  uint8\n\tPad1    uint8\n\tPad2    uint16\n\tIfindex int32\n\tState   uint16\n\tFlags   uint8\n\tType    uint8\n}\n\nconst (\n\tSizeofSockFilter = 0x8\n\tSizeofSockFprog  = 0x8\n)\n\ntype SockFilter struct {\n\tCode uint16\n\tJt   uint8\n\tJf   uint8\n\tK    uint32\n}\n\ntype SockFprog struct {\n\tLen    uint16\n\tFilter *SockFilter\n}\n\ntype InotifyEvent struct {\n\tWd     int32\n\tMask   uint32\n\tCookie uint32\n\tLen    uint32\n}\n\nconst SizeofInotifyEvent = 0x10\n\ntype PtraceRegs struct {\n\tRegs     [32]uint64\n\tLo       uint64\n\tHi       uint64\n\tEpc      uint64\n\tBadvaddr uint64\n\tStatus   uint64\n\tCause    uint64\n}\n\ntype FdSet struct {\n\tBits [32]int32\n}\n\ntype Sysinfo_t struct {\n\tUptime    int32\n\tLoads     [3]uint32\n\tTotalram  uint32\n\tFreeram   uint32\n\tSharedram uint32\n\tBufferram uint32\n\tTotalswap uint32\n\tFreeswap  uint32\n\tProcs     uint16\n\tPad       uint16\n\tTotalhigh uint32\n\tFreehigh  uint32\n\tUnit      uint32\n\t_         [8]int8\n}\n\ntype Utsname struct {\n\tSysname    [65]byte\n\tNodename   [65]byte\n\tRelease    [65]byte\n\tVersion    [65]byte\n\tMachine    [65]byte\n\tDomainname [65]byte\n}\n\ntype Ustat_t struct {\n\tTfree  int32\n\tTinode uint32\n\tFname  [6]int8\n\tFpack  [6]int8\n}\n\ntype EpollEvent struct {\n\tEvents uint32\n\tPadFd  int32\n\tFd     int32\n\tPad    int32\n}\n\nconst (\n\tAT_EMPTY_PATH   = 0x1000\n\tAT_FDCWD        = -0x64\n\tAT_NO_AUTOMOUNT = 0x800\n\tAT_REMOVEDIR    = 0x200\n\n\tAT_STATX_SYNC_AS_STAT = 0x0\n\tAT_STATX_FORCE_SYNC   = 0x2000\n\tAT_STATX_DONT_SYNC    = 0x4000\n\n\tAT_SYMLINK_FOLLOW   = 0x400\n\tAT_SYMLINK_NOFOLLOW = 0x100\n\n\tAT_EACCESS = 0x200\n)\n\ntype PollFd struct {\n\tFd      int32\n\tEvents  int16\n\tRevents int16\n}\n\nconst (\n\tPOLLIN    = 0x1\n\tPOLLPRI   = 0x2\n\tPOLLOUT   = 0x4\n\tPOLLRDHUP = 0x2000\n\tPOLLERR   = 0x8\n\tPOLLHUP   = 0x10\n\tPOLLNVAL  = 0x20\n)\n\ntype Sigset_t struct {\n\tVal [32]uint32\n}\n\nconst _C__NSIG = 0x80\n\ntype SignalfdSiginfo struct {\n\tSigno     uint32\n\tErrno     int32\n\tCode      int32\n\tPid       uint32\n\tUid       uint32\n\tFd        int32\n\tTid       uint32\n\tBand      uint32\n\tOverrun   uint32\n\tTrapno    uint32\n\tStatus    int32\n\tInt       int32\n\tPtr       uint64\n\tUtime     uint64\n\tStime     uint64\n\tAddr      uint64\n\tAddr_lsb  uint16\n\t_         uint16\n\tSyscall   int32\n\tCall_addr uint64\n\tArch      uint32\n\t_         [28]uint8\n}\n\nconst PERF_IOC_FLAG_GROUP = 0x1\n\ntype Termios struct {\n\tIflag  uint32\n\tOflag  uint32\n\tCflag  uint32\n\tLflag  uint32\n\tLine   uint8\n\tCc     [23]uint8\n\tIspeed uint32\n\tOspeed uint32\n}\n\ntype Winsize struct {\n\tRow    uint16\n\tCol    uint16\n\tXpixel uint16\n\tYpixel uint16\n}\n\ntype Taskstats struct {\n\tVersion                   uint16\n\tAc_exitcode               uint32\n\tAc_flag                   uint8\n\tAc_nice                   uint8\n\t_                         [4]byte\n\tCpu_count                 uint64\n\tCpu_delay_total           uint64\n\tBlkio_count               uint64\n\tBlkio_delay_total         uint64\n\tSwapin_count              uint64\n\tSwapin_delay_total        uint64\n\tCpu_run_real_total        uint64\n\tCpu_run_virtual_total     uint64\n\tAc_comm                   [32]int8\n\tAc_sched                  uint8\n\tAc_pad                    [3]uint8\n\t_                         [4]byte\n\tAc_uid                    uint32\n\tAc_gid                    uint32\n\tAc_pid                    uint32\n\tAc_ppid                   uint32\n\tAc_btime                  uint32\n\t_                         [4]byte\n\tAc_etime                  uint64\n\tAc_utime                  uint64\n\tAc_stime                  uint64\n\tAc_minflt                 uint64\n\tAc_majflt                 uint64\n\tCoremem                   uint64\n\tVirtmem                   uint64\n\tHiwater_rss               uint64\n\tHiwater_vm                uint64\n\tRead_char                 uint64\n\tWrite_char                uint64\n\tRead_syscalls             uint64\n\tWrite_syscalls            uint64\n\tRead_bytes                uint64\n\tWrite_bytes               uint64\n\tCancelled_write_bytes     uint64\n\tNvcsw                     uint64\n\tNivcsw                    uint64\n\tAc_utimescaled            uint64\n\tAc_stimescaled            uint64\n\tCpu_scaled_run_real_total uint64\n\tFreepages_count           uint64\n\tFreepages_delay_total     uint64\n\tThrashing_count           uint64\n\tThrashing_delay_total     uint64\n}\n\nconst (\n\tTASKSTATS_CMD_UNSPEC                  = 0x0\n\tTASKSTATS_CMD_GET                     = 0x1\n\tTASKSTATS_CMD_NEW                     = 0x2\n\tTASKSTATS_TYPE_UNSPEC                 = 0x0\n\tTASKSTATS_TYPE_PID                    = 0x1\n\tTASKSTATS_TYPE_TGID                   = 0x2\n\tTASKSTATS_TYPE_STATS                  = 0x3\n\tTASKSTATS_TYPE_AGGR_PID               = 0x4\n\tTASKSTATS_TYPE_AGGR_TGID              = 0x5\n\tTASKSTATS_TYPE_NULL                   = 0x6\n\tTASKSTATS_CMD_ATTR_UNSPEC             = 0x0\n\tTASKSTATS_CMD_ATTR_PID                = 0x1\n\tTASKSTATS_CMD_ATTR_TGID               = 0x2\n\tTASKSTATS_CMD_ATTR_REGISTER_CPUMASK   = 0x3\n\tTASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4\n)\n\ntype CGroupStats struct {\n\tSleeping        uint64\n\tRunning         uint64\n\tStopped         uint64\n\tUninterruptible uint64\n\tIo_wait         uint64\n}\n\nconst (\n\tCGROUPSTATS_CMD_UNSPEC        = 0x3\n\tCGROUPSTATS_CMD_GET           = 0x4\n\tCGROUPSTATS_CMD_NEW           = 0x5\n\tCGROUPSTATS_TYPE_UNSPEC       = 0x0\n\tCGROUPSTATS_TYPE_CGROUP_STATS = 0x1\n\tCGROUPSTATS_CMD_ATTR_UNSPEC   = 0x0\n\tCGROUPSTATS_CMD_ATTR_FD       = 0x1\n)\n\ntype Genlmsghdr struct {\n\tCmd      uint8\n\tVersion  uint8\n\tReserved uint16\n}\n\nconst (\n\tCTRL_CMD_UNSPEC            = 0x0\n\tCTRL_CMD_NEWFAMILY         = 0x1\n\tCTRL_CMD_DELFAMILY         = 0x2\n\tCTRL_CMD_GETFAMILY         = 0x3\n\tCTRL_CMD_NEWOPS            = 0x4\n\tCTRL_CMD_DELOPS            = 0x5\n\tCTRL_CMD_GETOPS            = 0x6\n\tCTRL_CMD_NEWMCAST_GRP      = 0x7\n\tCTRL_CMD_DELMCAST_GRP      = 0x8\n\tCTRL_CMD_GETMCAST_GRP      = 0x9\n\tCTRL_ATTR_UNSPEC           = 0x0\n\tCTRL_ATTR_FAMILY_ID        = 0x1\n\tCTRL_ATTR_FAMILY_NAME      = 0x2\n\tCTRL_ATTR_VERSION          = 0x3\n\tCTRL_ATTR_HDRSIZE          = 0x4\n\tCTRL_ATTR_MAXATTR          = 0x5\n\tCTRL_ATTR_OPS              = 0x6\n\tCTRL_ATTR_MCAST_GROUPS     = 0x7\n\tCTRL_ATTR_OP_UNSPEC        = 0x0\n\tCTRL_ATTR_OP_ID            = 0x1\n\tCTRL_ATTR_OP_FLAGS         = 0x2\n\tCTRL_ATTR_MCAST_GRP_UNSPEC = 0x0\n\tCTRL_ATTR_MCAST_GRP_NAME   = 0x1\n\tCTRL_ATTR_MCAST_GRP_ID     = 0x2\n)\n\ntype cpuMask uint32\n\nconst (\n\t_CPU_SETSIZE = 0x400\n\t_NCPUBITS    = 0x20\n)\n\nconst (\n\tBDADDR_BREDR     = 0x0\n\tBDADDR_LE_PUBLIC = 0x1\n\tBDADDR_LE_RANDOM = 0x2\n)\n\ntype PerfEventAttr struct {\n\tType               uint32\n\tSize               uint32\n\tConfig             uint64\n\tSample             uint64\n\tSample_type        uint64\n\tRead_format        uint64\n\tBits               uint64\n\tWakeup             uint32\n\tBp_type            uint32\n\tExt1               uint64\n\tExt2               uint64\n\tBranch_sample_type uint64\n\tSample_regs_user   uint64\n\tSample_stack_user  uint32\n\tClockid            int32\n\tSample_regs_intr   uint64\n\tAux_watermark      uint32\n\tSample_max_stack   uint16\n\t_                  uint16\n}\n\ntype PerfEventMmapPage struct {\n\tVersion        uint32\n\tCompat_version uint32\n\tLock           uint32\n\tIndex          uint32\n\tOffset         int64\n\tTime_enabled   uint64\n\tTime_running   uint64\n\tCapabilities   uint64\n\tPmc_width      uint16\n\tTime_shift     uint16\n\tTime_mult      uint32\n\tTime_offset    uint64\n\tTime_zero      uint64\n\tSize           uint32\n\t_              [948]uint8\n\tData_head      uint64\n\tData_tail      uint64\n\tData_offset    uint64\n\tData_size      uint64\n\tAux_head       uint64\n\tAux_tail       uint64\n\tAux_offset     uint64\n\tAux_size       uint64\n}\n\nconst (\n\tPerfBitDisabled               uint64 = CBitFieldMaskBit0\n\tPerfBitInherit                       = CBitFieldMaskBit1\n\tPerfBitPinned                        = CBitFieldMaskBit2\n\tPerfBitExclusive                     = CBitFieldMaskBit3\n\tPerfBitExcludeUser                   = CBitFieldMaskBit4\n\tPerfBitExcludeKernel                 = CBitFieldMaskBit5\n\tPerfBitExcludeHv                     = CBitFieldMaskBit6\n\tPerfBitExcludeIdle                   = CBitFieldMaskBit7\n\tPerfBitMmap                          = CBitFieldMaskBit8\n\tPerfBitComm                          = CBitFieldMaskBit9\n\tPerfBitFreq                          = CBitFieldMaskBit10\n\tPerfBitInheritStat                   = CBitFieldMaskBit11\n\tPerfBitEnableOnExec                  = CBitFieldMaskBit12\n\tPerfBitTask                          = CBitFieldMaskBit13\n\tPerfBitWatermark                     = CBitFieldMaskBit14\n\tPerfBitPreciseIPBit1                 = CBitFieldMaskBit15\n\tPerfBitPreciseIPBit2                 = CBitFieldMaskBit16\n\tPerfBitMmapData                      = CBitFieldMaskBit17\n\tPerfBitSampleIDAll                   = CBitFieldMaskBit18\n\tPerfBitExcludeHost                   = CBitFieldMaskBit19\n\tPerfBitExcludeGuest                  = CBitFieldMaskBit20\n\tPerfBitExcludeCallchainKernel        = CBitFieldMaskBit21\n\tPerfBitExcludeCallchainUser          = CBitFieldMaskBit22\n\tPerfBitMmap2                         = CBitFieldMaskBit23\n\tPerfBitCommExec                      = CBitFieldMaskBit24\n\tPerfBitUseClockID                    = CBitFieldMaskBit25\n\tPerfBitContextSwitch                 = CBitFieldMaskBit26\n)\n\nconst (\n\tPERF_TYPE_HARDWARE   = 0x0\n\tPERF_TYPE_SOFTWARE   = 0x1\n\tPERF_TYPE_TRACEPOINT = 0x2\n\tPERF_TYPE_HW_CACHE   = 0x3\n\tPERF_TYPE_RAW        = 0x4\n\tPERF_TYPE_BREAKPOINT = 0x5\n\n\tPERF_COUNT_HW_CPU_CYCLES              = 0x0\n\tPERF_COUNT_HW_INSTRUCTIONS            = 0x1\n\tPERF_COUNT_HW_CACHE_REFERENCES        = 0x2\n\tPERF_COUNT_HW_CACHE_MISSES            = 0x3\n\tPERF_COUNT_HW_BRANCH_INSTRUCTIONS     = 0x4\n\tPERF_COUNT_HW_BRANCH_MISSES           = 0x5\n\tPERF_COUNT_HW_BUS_CYCLES              = 0x6\n\tPERF_COUNT_HW_STALLED_CYCLES_FRONTEND = 0x7\n\tPERF_COUNT_HW_STALLED_CYCLES_BACKEND  = 0x8\n\tPERF_COUNT_HW_REF_CPU_CYCLES          = 0x9\n\n\tPERF_COUNT_HW_CACHE_L1D  = 0x0\n\tPERF_COUNT_HW_CACHE_L1I  = 0x1\n\tPERF_COUNT_HW_CACHE_LL   = 0x2\n\tPERF_COUNT_HW_CACHE_DTLB = 0x3\n\tPERF_COUNT_HW_CACHE_ITLB = 0x4\n\tPERF_COUNT_HW_CACHE_BPU  = 0x5\n\tPERF_COUNT_HW_CACHE_NODE = 0x6\n\n\tPERF_COUNT_HW_CACHE_OP_READ     = 0x0\n\tPERF_COUNT_HW_CACHE_OP_WRITE    = 0x1\n\tPERF_COUNT_HW_CACHE_OP_PREFETCH = 0x2\n\n\tPERF_COUNT_HW_CACHE_RESULT_ACCESS = 0x0\n\tPERF_COUNT_HW_CACHE_RESULT_MISS   = 0x1\n\n\tPERF_COUNT_SW_CPU_CLOCK        = 0x0\n\tPERF_COUNT_SW_TASK_CLOCK       = 0x1\n\tPERF_COUNT_SW_PAGE_FAULTS      = 0x2\n\tPERF_COUNT_SW_CONTEXT_SWITCHES = 0x3\n\tPERF_COUNT_SW_CPU_MIGRATIONS   = 0x4\n\tPERF_COUNT_SW_PAGE_FAULTS_MIN  = 0x5\n\tPERF_COUNT_SW_PAGE_FAULTS_MAJ  = 0x6\n\tPERF_COUNT_SW_ALIGNMENT_FAULTS = 0x7\n\tPERF_COUNT_SW_EMULATION_FAULTS = 0x8\n\tPERF_COUNT_SW_DUMMY            = 0x9\n\tPERF_COUNT_SW_BPF_OUTPUT       = 0xa\n\n\tPERF_SAMPLE_IP           = 0x1\n\tPERF_SAMPLE_TID          = 0x2\n\tPERF_SAMPLE_TIME         = 0x4\n\tPERF_SAMPLE_ADDR         = 0x8\n\tPERF_SAMPLE_READ         = 0x10\n\tPERF_SAMPLE_CALLCHAIN    = 0x20\n\tPERF_SAMPLE_ID           = 0x40\n\tPERF_SAMPLE_CPU          = 0x80\n\tPERF_SAMPLE_PERIOD       = 0x100\n\tPERF_SAMPLE_STREAM_ID    = 0x200\n\tPERF_SAMPLE_RAW          = 0x400\n\tPERF_SAMPLE_BRANCH_STACK = 0x800\n\n\tPERF_SAMPLE_BRANCH_USER       = 0x1\n\tPERF_SAMPLE_BRANCH_KERNEL     = 0x2\n\tPERF_SAMPLE_BRANCH_HV         = 0x4\n\tPERF_SAMPLE_BRANCH_ANY        = 0x8\n\tPERF_SAMPLE_BRANCH_ANY_CALL   = 0x10\n\tPERF_SAMPLE_BRANCH_ANY_RETURN = 0x20\n\tPERF_SAMPLE_BRANCH_IND_CALL   = 0x40\n\tPERF_SAMPLE_BRANCH_ABORT_TX   = 0x80\n\tPERF_SAMPLE_BRANCH_IN_TX      = 0x100\n\tPERF_SAMPLE_BRANCH_NO_TX      = 0x200\n\tPERF_SAMPLE_BRANCH_COND       = 0x400\n\tPERF_SAMPLE_BRANCH_CALL_STACK = 0x800\n\tPERF_SAMPLE_BRANCH_IND_JUMP   = 0x1000\n\tPERF_SAMPLE_BRANCH_CALL       = 0x2000\n\tPERF_SAMPLE_BRANCH_NO_FLAGS   = 0x4000\n\tPERF_SAMPLE_BRANCH_NO_CYCLES  = 0x8000\n\tPERF_SAMPLE_BRANCH_TYPE_SAVE  = 0x10000\n\n\tPERF_FORMAT_TOTAL_TIME_ENABLED = 0x1\n\tPERF_FORMAT_TOTAL_TIME_RUNNING = 0x2\n\tPERF_FORMAT_ID                 = 0x4\n\tPERF_FORMAT_GROUP              = 0x8\n\n\tPERF_RECORD_MMAP            = 0x1\n\tPERF_RECORD_LOST            = 0x2\n\tPERF_RECORD_COMM            = 0x3\n\tPERF_RECORD_EXIT            = 0x4\n\tPERF_RECORD_THROTTLE        = 0x5\n\tPERF_RECORD_UNTHROTTLE      = 0x6\n\tPERF_RECORD_FORK            = 0x7\n\tPERF_RECORD_READ            = 0x8\n\tPERF_RECORD_SAMPLE          = 0x9\n\tPERF_RECORD_MMAP2           = 0xa\n\tPERF_RECORD_AUX             = 0xb\n\tPERF_RECORD_ITRACE_START    = 0xc\n\tPERF_RECORD_LOST_SAMPLES    = 0xd\n\tPERF_RECORD_SWITCH          = 0xe\n\tPERF_RECORD_SWITCH_CPU_WIDE = 0xf\n\tPERF_RECORD_NAMESPACES      = 0x10\n\n\tPERF_CONTEXT_HV     = -0x20\n\tPERF_CONTEXT_KERNEL = -0x80\n\tPERF_CONTEXT_USER   = -0x200\n\n\tPERF_CONTEXT_GUEST        = -0x800\n\tPERF_CONTEXT_GUEST_KERNEL = -0x880\n\tPERF_CONTEXT_GUEST_USER   = -0xa00\n\n\tPERF_FLAG_FD_NO_GROUP = 0x1\n\tPERF_FLAG_FD_OUTPUT   = 0x2\n\tPERF_FLAG_PID_CGROUP  = 0x4\n\tPERF_FLAG_FD_CLOEXEC  = 0x8\n)\n\nconst (\n\tCBitFieldMaskBit0  = 0x1\n\tCBitFieldMaskBit1  = 0x2\n\tCBitFieldMaskBit2  = 0x4\n\tCBitFieldMaskBit3  = 0x8\n\tCBitFieldMaskBit4  = 0x10\n\tCBitFieldMaskBit5  = 0x20\n\tCBitFieldMaskBit6  = 0x40\n\tCBitFieldMaskBit7  = 0x80\n\tCBitFieldMaskBit8  = 0x100\n\tCBitFieldMaskBit9  = 0x200\n\tCBitFieldMaskBit10 = 0x400\n\tCBitFieldMaskBit11 = 0x800\n\tCBitFieldMaskBit12 = 0x1000\n\tCBitFieldMaskBit13 = 0x2000\n\tCBitFieldMaskBit14 = 0x4000\n\tCBitFieldMaskBit15 = 0x8000\n\tCBitFieldMaskBit16 = 0x10000\n\tCBitFieldMaskBit17 = 0x20000\n\tCBitFieldMaskBit18 = 0x40000\n\tCBitFieldMaskBit19 = 0x80000\n\tCBitFieldMaskBit20 = 0x100000\n\tCBitFieldMaskBit21 = 0x200000\n\tCBitFieldMaskBit22 = 0x400000\n\tCBitFieldMaskBit23 = 0x800000\n\tCBitFieldMaskBit24 = 0x1000000\n\tCBitFieldMaskBit25 = 0x2000000\n\tCBitFieldMaskBit26 = 0x4000000\n\tCBitFieldMaskBit27 = 0x8000000\n\tCBitFieldMaskBit28 = 0x10000000\n\tCBitFieldMaskBit29 = 0x20000000\n\tCBitFieldMaskBit30 = 0x40000000\n\tCBitFieldMaskBit31 = 0x80000000\n\tCBitFieldMaskBit32 = 0x100000000\n\tCBitFieldMaskBit33 = 0x200000000\n\tCBitFieldMaskBit34 = 0x400000000\n\tCBitFieldMaskBit35 = 0x800000000\n\tCBitFieldMaskBit36 = 0x1000000000\n\tCBitFieldMaskBit37 = 0x2000000000\n\tCBitFieldMaskBit38 = 0x4000000000\n\tCBitFieldMaskBit39 = 0x8000000000\n\tCBitFieldMaskBit40 = 0x10000000000\n\tCBitFieldMaskBit41 = 0x20000000000\n\tCBitFieldMaskBit42 = 0x40000000000\n\tCBitFieldMaskBit43 = 0x80000000000\n\tCBitFieldMaskBit44 = 0x100000000000\n\tCBitFieldMaskBit45 = 0x200000000000\n\tCBitFieldMaskBit46 = 0x400000000000\n\tCBitFieldMaskBit47 = 0x800000000000\n\tCBitFieldMaskBit48 = 0x1000000000000\n\tCBitFieldMaskBit49 = 0x2000000000000\n\tCBitFieldMaskBit50 = 0x4000000000000\n\tCBitFieldMaskBit51 = 0x8000000000000\n\tCBitFieldMaskBit52 = 0x10000000000000\n\tCBitFieldMaskBit53 = 0x20000000000000\n\tCBitFieldMaskBit54 = 0x40000000000000\n\tCBitFieldMaskBit55 = 0x80000000000000\n\tCBitFieldMaskBit56 = 0x100000000000000\n\tCBitFieldMaskBit57 = 0x200000000000000\n\tCBitFieldMaskBit58 = 0x400000000000000\n\tCBitFieldMaskBit59 = 0x800000000000000\n\tCBitFieldMaskBit60 = 0x1000000000000000\n\tCBitFieldMaskBit61 = 0x2000000000000000\n\tCBitFieldMaskBit62 = 0x4000000000000000\n\tCBitFieldMaskBit63 = 0x8000000000000000\n)\n\ntype SockaddrStorage struct {\n\tFamily uint16\n\t_      [122]int8\n\t_      uint32\n}\n\ntype TCPMD5Sig struct {\n\tAddr      SockaddrStorage\n\tFlags     uint8\n\tPrefixlen uint8\n\tKeylen    uint16\n\t_         uint32\n\tKey       [80]uint8\n}\n\ntype HDDriveCmdHdr struct {\n\tCommand uint8\n\tNumber  uint8\n\tFeature uint8\n\tCount   uint8\n}\n\ntype HDGeometry struct {\n\tHeads     uint8\n\tSectors   uint8\n\tCylinders uint16\n\tStart     uint32\n}\n\ntype HDDriveID struct {\n\tConfig         uint16\n\tCyls           uint16\n\tReserved2      uint16\n\tHeads          uint16\n\tTrack_bytes    uint16\n\tSector_bytes   uint16\n\tSectors        uint16\n\tVendor0        uint16\n\tVendor1        uint16\n\tVendor2        uint16\n\tSerial_no      [20]uint8\n\tBuf_type       uint16\n\tBuf_size       uint16\n\tEcc_bytes      uint16\n\tFw_rev         [8]uint8\n\tModel          [40]uint8\n\tMax_multsect   uint8\n\tVendor3        uint8\n\tDword_io       uint16\n\tVendor4        uint8\n\tCapability     uint8\n\tReserved50     uint16\n\tVendor5        uint8\n\tTPIO           uint8\n\tVendor6        uint8\n\tTDMA           uint8\n\tField_valid    uint16\n\tCur_cyls       uint16\n\tCur_heads      uint16\n\tCur_sectors    uint16\n\tCur_capacity0  uint16\n\tCur_capacity1  uint16\n\tMultsect       uint8\n\tMultsect_valid uint8\n\tLba_capacity   uint32\n\tDma_1word      uint16\n\tDma_mword      uint16\n\tEide_pio_modes uint16\n\tEide_dma_min   uint16\n\tEide_dma_time  uint16\n\tEide_pio       uint16\n\tEide_pio_iordy uint16\n\tWords69_70     [2]uint16\n\tWords71_74     [4]uint16\n\tQueue_depth    uint16\n\tWords76_79     [4]uint16\n\tMajor_rev_num  uint16\n\tMinor_rev_num  uint16\n\tCommand_set_1  uint16\n\tCommand_set_2  uint16\n\tCfsse          uint16\n\tCfs_enable_1   uint16\n\tCfs_enable_2   uint16\n\tCsf_default    uint16\n\tDma_ultra      uint16\n\tTrseuc         uint16\n\tTrsEuc         uint16\n\tCurAPMvalues   uint16\n\tMprc           uint16\n\tHw_config      uint16\n\tAcoustic       uint16\n\tMsrqs          uint16\n\tSxfert         uint16\n\tSal            uint16\n\tSpg            uint32\n\tLba_capacity_2 uint64\n\tWords104_125   [22]uint16\n\tLast_lun       uint16\n\tWord127        uint16\n\tDlf            uint16\n\tCsfo           uint16\n\tWords130_155   [26]uint16\n\tWord156        uint16\n\tWords157_159   [3]uint16\n\tCfa_power      uint16\n\tWords161_175   [15]uint16\n\tWords176_205   [30]uint16\n\tWords206_254   [49]uint16\n\tIntegrity_word uint16\n}\n\ntype Statfs_t struct {\n\tType    int32\n\tBsize   int32\n\tFrsize  int32\n\t_       [4]byte\n\tBlocks  uint64\n\tBfree   uint64\n\tFiles   uint64\n\tFfree   uint64\n\tBavail  uint64\n\tFsid    Fsid\n\tNamelen int32\n\tFlags   int32\n\tSpare   [5]int32\n\t_       [4]byte\n}\n\nconst (\n\tST_MANDLOCK    = 0x40\n\tST_NOATIME     = 0x400\n\tST_NODEV       = 0x4\n\tST_NODIRATIME  = 0x800\n\tST_NOEXEC      = 0x8\n\tST_NOSUID      = 0x2\n\tST_RDONLY      = 0x1\n\tST_RELATIME    = 0x1000\n\tST_SYNCHRONOUS = 0x10\n)\n\ntype TpacketHdr struct {\n\tStatus  uint32\n\tLen     uint32\n\tSnaplen uint32\n\tMac     uint16\n\tNet     uint16\n\tSec     uint32\n\tUsec    uint32\n}\n\ntype Tpacket2Hdr struct {\n\tStatus    uint32\n\tLen       uint32\n\tSnaplen   uint32\n\tMac       uint16\n\tNet       uint16\n\tSec       uint32\n\tNsec      uint32\n\tVlan_tci  uint16\n\tVlan_tpid uint16\n\t_         [4]uint8\n}\n\ntype Tpacket3Hdr struct {\n\tNext_offset uint32\n\tSec         uint32\n\tNsec        uint32\n\tSnaplen     uint32\n\tLen         uint32\n\tStatus      uint32\n\tMac         uint16\n\tNet         uint16\n\tHv1         TpacketHdrVariant1\n\t_           [8]uint8\n}\n\ntype TpacketHdrVariant1 struct {\n\tRxhash    uint32\n\tVlan_tci  uint32\n\tVlan_tpid uint16\n\t_         uint16\n}\n\ntype TpacketBlockDesc struct {\n\tVersion uint32\n\tTo_priv uint32\n\tHdr     [40]byte\n}\n\ntype TpacketBDTS struct {\n\tSec  uint32\n\tUsec uint32\n}\n\ntype TpacketHdrV1 struct {\n\tBlock_status        uint32\n\tNum_pkts            uint32\n\tOffset_to_first_pkt uint32\n\tBlk_len             uint32\n\tSeq_num             uint64\n\tTs_first_pkt        TpacketBDTS\n\tTs_last_pkt         TpacketBDTS\n}\n\ntype TpacketReq struct {\n\tBlock_size uint32\n\tBlock_nr   uint32\n\tFrame_size uint32\n\tFrame_nr   uint32\n}\n\ntype TpacketReq3 struct {\n\tBlock_size       uint32\n\tBlock_nr         uint32\n\tFrame_size       uint32\n\tFrame_nr         uint32\n\tRetire_blk_tov   uint32\n\tSizeof_priv      uint32\n\tFeature_req_word uint32\n}\n\ntype TpacketStats struct {\n\tPackets uint32\n\tDrops   uint32\n}\n\ntype TpacketStatsV3 struct {\n\tPackets      uint32\n\tDrops        uint32\n\tFreeze_q_cnt uint32\n}\n\ntype TpacketAuxdata struct {\n\tStatus    uint32\n\tLen       uint32\n\tSnaplen   uint32\n\tMac       uint16\n\tNet       uint16\n\tVlan_tci  uint16\n\tVlan_tpid uint16\n}\n\nconst (\n\tTPACKET_V1 = 0x0\n\tTPACKET_V2 = 0x1\n\tTPACKET_V3 = 0x2\n)\n\nconst (\n\tSizeofTpacketHdr  = 0x18\n\tSizeofTpacket2Hdr = 0x20\n\tSizeofTpacket3Hdr = 0x30\n\n\tSizeofTpacketStats   = 0x8\n\tSizeofTpacketStatsV3 = 0xc\n)\n\nconst (\n\tNF_INET_PRE_ROUTING  = 0x0\n\tNF_INET_LOCAL_IN     = 0x1\n\tNF_INET_FORWARD      = 0x2\n\tNF_INET_LOCAL_OUT    = 0x3\n\tNF_INET_POST_ROUTING = 0x4\n\tNF_INET_NUMHOOKS     = 0x5\n)\n\nconst (\n\tNF_NETDEV_INGRESS  = 0x0\n\tNF_NETDEV_NUMHOOKS = 0x1\n)\n\nconst (\n\tNFPROTO_UNSPEC   = 0x0\n\tNFPROTO_INET     = 0x1\n\tNFPROTO_IPV4     = 0x2\n\tNFPROTO_ARP      = 0x3\n\tNFPROTO_NETDEV   = 0x5\n\tNFPROTO_BRIDGE   = 0x7\n\tNFPROTO_IPV6     = 0xa\n\tNFPROTO_DECNET   = 0xc\n\tNFPROTO_NUMPROTO = 0xd\n)\n\ntype Nfgenmsg struct {\n\tNfgen_family uint8\n\tVersion      uint8\n\tRes_id       uint16\n}\n\nconst (\n\tNFNL_BATCH_UNSPEC = 0x0\n\tNFNL_BATCH_GENID  = 0x1\n)\n\nconst (\n\tNFT_REG_VERDICT                   = 0x0\n\tNFT_REG_1                         = 0x1\n\tNFT_REG_2                         = 0x2\n\tNFT_REG_3                         = 0x3\n\tNFT_REG_4                         = 0x4\n\tNFT_REG32_00                      = 0x8\n\tNFT_REG32_01                      = 0x9\n\tNFT_REG32_02                      = 0xa\n\tNFT_REG32_03                      = 0xb\n\tNFT_REG32_04                      = 0xc\n\tNFT_REG32_05                      = 0xd\n\tNFT_REG32_06                      = 0xe\n\tNFT_REG32_07                      = 0xf\n\tNFT_REG32_08                      = 0x10\n\tNFT_REG32_09                      = 0x11\n\tNFT_REG32_10                      = 0x12\n\tNFT_REG32_11                      = 0x13\n\tNFT_REG32_12                      = 0x14\n\tNFT_REG32_13                      = 0x15\n\tNFT_REG32_14                      = 0x16\n\tNFT_REG32_15                      = 0x17\n\tNFT_CONTINUE                      = -0x1\n\tNFT_BREAK                         = -0x2\n\tNFT_JUMP                          = -0x3\n\tNFT_GOTO                          = -0x4\n\tNFT_RETURN                        = -0x5\n\tNFT_MSG_NEWTABLE                  = 0x0\n\tNFT_MSG_GETTABLE                  = 0x1\n\tNFT_MSG_DELTABLE                  = 0x2\n\tNFT_MSG_NEWCHAIN                  = 0x3\n\tNFT_MSG_GETCHAIN                  = 0x4\n\tNFT_MSG_DELCHAIN                  = 0x5\n\tNFT_MSG_NEWRULE                   = 0x6\n\tNFT_MSG_GETRULE                   = 0x7\n\tNFT_MSG_DELRULE                   = 0x8\n\tNFT_MSG_NEWSET                    = 0x9\n\tNFT_MSG_GETSET                    = 0xa\n\tNFT_MSG_DELSET                    = 0xb\n\tNFT_MSG_NEWSETELEM                = 0xc\n\tNFT_MSG_GETSETELEM                = 0xd\n\tNFT_MSG_DELSETELEM                = 0xe\n\tNFT_MSG_NEWGEN                    = 0xf\n\tNFT_MSG_GETGEN                    = 0x10\n\tNFT_MSG_TRACE                     = 0x11\n\tNFT_MSG_NEWOBJ                    = 0x12\n\tNFT_MSG_GETOBJ                    = 0x13\n\tNFT_MSG_DELOBJ                    = 0x14\n\tNFT_MSG_GETOBJ_RESET              = 0x15\n\tNFT_MSG_MAX                       = 0x19\n\tNFTA_LIST_UNPEC                   = 0x0\n\tNFTA_LIST_ELEM                    = 0x1\n\tNFTA_HOOK_UNSPEC                  = 0x0\n\tNFTA_HOOK_HOOKNUM                 = 0x1\n\tNFTA_HOOK_PRIORITY                = 0x2\n\tNFTA_HOOK_DEV                     = 0x3\n\tNFT_TABLE_F_DORMANT               = 0x1\n\tNFTA_TABLE_UNSPEC                 = 0x0\n\tNFTA_TABLE_NAME                   = 0x1\n\tNFTA_TABLE_FLAGS                  = 0x2\n\tNFTA_TABLE_USE                    = 0x3\n\tNFTA_CHAIN_UNSPEC                 = 0x0\n\tNFTA_CHAIN_TABLE                  = 0x1\n\tNFTA_CHAIN_HANDLE                 = 0x2\n\tNFTA_CHAIN_NAME                   = 0x3\n\tNFTA_CHAIN_HOOK                   = 0x4\n\tNFTA_CHAIN_POLICY                 = 0x5\n\tNFTA_CHAIN_USE                    = 0x6\n\tNFTA_CHAIN_TYPE                   = 0x7\n\tNFTA_CHAIN_COUNTERS               = 0x8\n\tNFTA_CHAIN_PAD                    = 0x9\n\tNFTA_RULE_UNSPEC                  = 0x0\n\tNFTA_RULE_TABLE                   = 0x1\n\tNFTA_RULE_CHAIN                   = 0x2\n\tNFTA_RULE_HANDLE                  = 0x3\n\tNFTA_RULE_EXPRESSIONS             = 0x4\n\tNFTA_RULE_COMPAT                  = 0x5\n\tNFTA_RULE_POSITION                = 0x6\n\tNFTA_RULE_USERDATA                = 0x7\n\tNFTA_RULE_PAD                     = 0x8\n\tNFTA_RULE_ID                      = 0x9\n\tNFT_RULE_COMPAT_F_INV             = 0x2\n\tNFT_RULE_COMPAT_F_MASK            = 0x2\n\tNFTA_RULE_COMPAT_UNSPEC           = 0x0\n\tNFTA_RULE_COMPAT_PROTO            = 0x1\n\tNFTA_RULE_COMPAT_FLAGS            = 0x2\n\tNFT_SET_ANONYMOUS                 = 0x1\n\tNFT_SET_CONSTANT                  = 0x2\n\tNFT_SET_INTERVAL                  = 0x4\n\tNFT_SET_MAP                       = 0x8\n\tNFT_SET_TIMEOUT                   = 0x10\n\tNFT_SET_EVAL                      = 0x20\n\tNFT_SET_OBJECT                    = 0x40\n\tNFT_SET_POL_PERFORMANCE           = 0x0\n\tNFT_SET_POL_MEMORY                = 0x1\n\tNFTA_SET_DESC_UNSPEC              = 0x0\n\tNFTA_SET_DESC_SIZE                = 0x1\n\tNFTA_SET_UNSPEC                   = 0x0\n\tNFTA_SET_TABLE                    = 0x1\n\tNFTA_SET_NAME                     = 0x2\n\tNFTA_SET_FLAGS                    = 0x3\n\tNFTA_SET_KEY_TYPE                 = 0x4\n\tNFTA_SET_KEY_LEN                  = 0x5\n\tNFTA_SET_DATA_TYPE                = 0x6\n\tNFTA_SET_DATA_LEN                 = 0x7\n\tNFTA_SET_POLICY                   = 0x8\n\tNFTA_SET_DESC                     = 0x9\n\tNFTA_SET_ID                       = 0xa\n\tNFTA_SET_TIMEOUT                  = 0xb\n\tNFTA_SET_GC_INTERVAL              = 0xc\n\tNFTA_SET_USERDATA                 = 0xd\n\tNFTA_SET_PAD                      = 0xe\n\tNFTA_SET_OBJ_TYPE                 = 0xf\n\tNFT_SET_ELEM_INTERVAL_END         = 0x1\n\tNFTA_SET_ELEM_UNSPEC              = 0x0\n\tNFTA_SET_ELEM_KEY                 = 0x1\n\tNFTA_SET_ELEM_DATA                = 0x2\n\tNFTA_SET_ELEM_FLAGS               = 0x3\n\tNFTA_SET_ELEM_TIMEOUT             = 0x4\n\tNFTA_SET_ELEM_EXPIRATION          = 0x5\n\tNFTA_SET_ELEM_USERDATA            = 0x6\n\tNFTA_SET_ELEM_EXPR                = 0x7\n\tNFTA_SET_ELEM_PAD                 = 0x8\n\tNFTA_SET_ELEM_OBJREF              = 0x9\n\tNFTA_SET_ELEM_LIST_UNSPEC         = 0x0\n\tNFTA_SET_ELEM_LIST_TABLE          = 0x1\n\tNFTA_SET_ELEM_LIST_SET            = 0x2\n\tNFTA_SET_ELEM_LIST_ELEMENTS       = 0x3\n\tNFTA_SET_ELEM_LIST_SET_ID         = 0x4\n\tNFT_DATA_VALUE                    = 0x0\n\tNFT_DATA_VERDICT                  = 0xffffff00\n\tNFTA_DATA_UNSPEC                  = 0x0\n\tNFTA_DATA_VALUE                   = 0x1\n\tNFTA_DATA_VERDICT                 = 0x2\n\tNFTA_VERDICT_UNSPEC               = 0x0\n\tNFTA_VERDICT_CODE                 = 0x1\n\tNFTA_VERDICT_CHAIN                = 0x2\n\tNFTA_EXPR_UNSPEC                  = 0x0\n\tNFTA_EXPR_NAME                    = 0x1\n\tNFTA_EXPR_DATA                    = 0x2\n\tNFTA_IMMEDIATE_UNSPEC             = 0x0\n\tNFTA_IMMEDIATE_DREG               = 0x1\n\tNFTA_IMMEDIATE_DATA               = 0x2\n\tNFTA_BITWISE_UNSPEC               = 0x0\n\tNFTA_BITWISE_SREG                 = 0x1\n\tNFTA_BITWISE_DREG                 = 0x2\n\tNFTA_BITWISE_LEN                  = 0x3\n\tNFTA_BITWISE_MASK                 = 0x4\n\tNFTA_BITWISE_XOR                  = 0x5\n\tNFT_BYTEORDER_NTOH                = 0x0\n\tNFT_BYTEORDER_HTON                = 0x1\n\tNFTA_BYTEORDER_UNSPEC             = 0x0\n\tNFTA_BYTEORDER_SREG               = 0x1\n\tNFTA_BYTEORDER_DREG               = 0x2\n\tNFTA_BYTEORDER_OP                 = 0x3\n\tNFTA_BYTEORDER_LEN                = 0x4\n\tNFTA_BYTEORDER_SIZE               = 0x5\n\tNFT_CMP_EQ                        = 0x0\n\tNFT_CMP_NEQ                       = 0x1\n\tNFT_CMP_LT                        = 0x2\n\tNFT_CMP_LTE                       = 0x3\n\tNFT_CMP_GT                        = 0x4\n\tNFT_CMP_GTE                       = 0x5\n\tNFTA_CMP_UNSPEC                   = 0x0\n\tNFTA_CMP_SREG                     = 0x1\n\tNFTA_CMP_OP                       = 0x2\n\tNFTA_CMP_DATA                     = 0x3\n\tNFT_RANGE_EQ                      = 0x0\n\tNFT_RANGE_NEQ                     = 0x1\n\tNFTA_RANGE_UNSPEC                 = 0x0\n\tNFTA_RANGE_SREG                   = 0x1\n\tNFTA_RANGE_OP                     = 0x2\n\tNFTA_RANGE_FROM_DATA              = 0x3\n\tNFTA_RANGE_TO_DATA                = 0x4\n\tNFT_LOOKUP_F_INV                  = 0x1\n\tNFTA_LOOKUP_UNSPEC                = 0x0\n\tNFTA_LOOKUP_SET                   = 0x1\n\tNFTA_LOOKUP_SREG                  = 0x2\n\tNFTA_LOOKUP_DREG                  = 0x3\n\tNFTA_LOOKUP_SET_ID                = 0x4\n\tNFTA_LOOKUP_FLAGS                 = 0x5\n\tNFT_DYNSET_OP_ADD                 = 0x0\n\tNFT_DYNSET_OP_UPDATE              = 0x1\n\tNFT_DYNSET_F_INV                  = 0x1\n\tNFTA_DYNSET_UNSPEC                = 0x0\n\tNFTA_DYNSET_SET_NAME              = 0x1\n\tNFTA_DYNSET_SET_ID                = 0x2\n\tNFTA_DYNSET_OP                    = 0x3\n\tNFTA_DYNSET_SREG_KEY              = 0x4\n\tNFTA_DYNSET_SREG_DATA             = 0x5\n\tNFTA_DYNSET_TIMEOUT               = 0x6\n\tNFTA_DYNSET_EXPR                  = 0x7\n\tNFTA_DYNSET_PAD                   = 0x8\n\tNFTA_DYNSET_FLAGS                 = 0x9\n\tNFT_PAYLOAD_LL_HEADER             = 0x0\n\tNFT_PAYLOAD_NETWORK_HEADER        = 0x1\n\tNFT_PAYLOAD_TRANSPORT_HEADER      = 0x2\n\tNFT_PAYLOAD_CSUM_NONE             = 0x0\n\tNFT_PAYLOAD_CSUM_INET             = 0x1\n\tNFT_PAYLOAD_L4CSUM_PSEUDOHDR      = 0x1\n\tNFTA_PAYLOAD_UNSPEC               = 0x0\n\tNFTA_PAYLOAD_DREG                 = 0x1\n\tNFTA_PAYLOAD_BASE                 = 0x2\n\tNFTA_PAYLOAD_OFFSET               = 0x3\n\tNFTA_PAYLOAD_LEN                  = 0x4\n\tNFTA_PAYLOAD_SREG                 = 0x5\n\tNFTA_PAYLOAD_CSUM_TYPE            = 0x6\n\tNFTA_PAYLOAD_CSUM_OFFSET          = 0x7\n\tNFTA_PAYLOAD_CSUM_FLAGS           = 0x8\n\tNFT_EXTHDR_F_PRESENT              = 0x1\n\tNFT_EXTHDR_OP_IPV6                = 0x0\n\tNFT_EXTHDR_OP_TCPOPT              = 0x1\n\tNFTA_EXTHDR_UNSPEC                = 0x0\n\tNFTA_EXTHDR_DREG                  = 0x1\n\tNFTA_EXTHDR_TYPE                  = 0x2\n\tNFTA_EXTHDR_OFFSET                = 0x3\n\tNFTA_EXTHDR_LEN                   = 0x4\n\tNFTA_EXTHDR_FLAGS                 = 0x5\n\tNFTA_EXTHDR_OP                    = 0x6\n\tNFTA_EXTHDR_SREG                  = 0x7\n\tNFT_META_LEN                      = 0x0\n\tNFT_META_PROTOCOL                 = 0x1\n\tNFT_META_PRIORITY                 = 0x2\n\tNFT_META_MARK                     = 0x3\n\tNFT_META_IIF                      = 0x4\n\tNFT_META_OIF                      = 0x5\n\tNFT_META_IIFNAME                  = 0x6\n\tNFT_META_OIFNAME                  = 0x7\n\tNFT_META_IIFTYPE                  = 0x8\n\tNFT_META_OIFTYPE                  = 0x9\n\tNFT_META_SKUID                    = 0xa\n\tNFT_META_SKGID                    = 0xb\n\tNFT_META_NFTRACE                  = 0xc\n\tNFT_META_RTCLASSID                = 0xd\n\tNFT_META_SECMARK                  = 0xe\n\tNFT_META_NFPROTO                  = 0xf\n\tNFT_META_L4PROTO                  = 0x10\n\tNFT_META_BRI_IIFNAME              = 0x11\n\tNFT_META_BRI_OIFNAME              = 0x12\n\tNFT_META_PKTTYPE                  = 0x13\n\tNFT_META_CPU                      = 0x14\n\tNFT_META_IIFGROUP                 = 0x15\n\tNFT_META_OIFGROUP                 = 0x16\n\tNFT_META_CGROUP                   = 0x17\n\tNFT_META_PRANDOM                  = 0x18\n\tNFT_RT_CLASSID                    = 0x0\n\tNFT_RT_NEXTHOP4                   = 0x1\n\tNFT_RT_NEXTHOP6                   = 0x2\n\tNFT_RT_TCPMSS                     = 0x3\n\tNFT_HASH_JENKINS                  = 0x0\n\tNFT_HASH_SYM                      = 0x1\n\tNFTA_HASH_UNSPEC                  = 0x0\n\tNFTA_HASH_SREG                    = 0x1\n\tNFTA_HASH_DREG                    = 0x2\n\tNFTA_HASH_LEN                     = 0x3\n\tNFTA_HASH_MODULUS                 = 0x4\n\tNFTA_HASH_SEED                    = 0x5\n\tNFTA_HASH_OFFSET                  = 0x6\n\tNFTA_HASH_TYPE                    = 0x7\n\tNFTA_META_UNSPEC                  = 0x0\n\tNFTA_META_DREG                    = 0x1\n\tNFTA_META_KEY                     = 0x2\n\tNFTA_META_SREG                    = 0x3\n\tNFTA_RT_UNSPEC                    = 0x0\n\tNFTA_RT_DREG                      = 0x1\n\tNFTA_RT_KEY                       = 0x2\n\tNFT_CT_STATE                      = 0x0\n\tNFT_CT_DIRECTION                  = 0x1\n\tNFT_CT_STATUS                     = 0x2\n\tNFT_CT_MARK                       = 0x3\n\tNFT_CT_SECMARK                    = 0x4\n\tNFT_CT_EXPIRATION                 = 0x5\n\tNFT_CT_HELPER                     = 0x6\n\tNFT_CT_L3PROTOCOL                 = 0x7\n\tNFT_CT_SRC                        = 0x8\n\tNFT_CT_DST                        = 0x9\n\tNFT_CT_PROTOCOL                   = 0xa\n\tNFT_CT_PROTO_SRC                  = 0xb\n\tNFT_CT_PROTO_DST                  = 0xc\n\tNFT_CT_LABELS                     = 0xd\n\tNFT_CT_PKTS                       = 0xe\n\tNFT_CT_BYTES                      = 0xf\n\tNFT_CT_AVGPKT                     = 0x10\n\tNFT_CT_ZONE                       = 0x11\n\tNFT_CT_EVENTMASK                  = 0x12\n\tNFTA_CT_UNSPEC                    = 0x0\n\tNFTA_CT_DREG                      = 0x1\n\tNFTA_CT_KEY                       = 0x2\n\tNFTA_CT_DIRECTION                 = 0x3\n\tNFTA_CT_SREG                      = 0x4\n\tNFT_LIMIT_PKTS                    = 0x0\n\tNFT_LIMIT_PKT_BYTES               = 0x1\n\tNFT_LIMIT_F_INV                   = 0x1\n\tNFTA_LIMIT_UNSPEC                 = 0x0\n\tNFTA_LIMIT_RATE                   = 0x1\n\tNFTA_LIMIT_UNIT                   = 0x2\n\tNFTA_LIMIT_BURST                  = 0x3\n\tNFTA_LIMIT_TYPE                   = 0x4\n\tNFTA_LIMIT_FLAGS                  = 0x5\n\tNFTA_LIMIT_PAD                    = 0x6\n\tNFTA_COUNTER_UNSPEC               = 0x0\n\tNFTA_COUNTER_BYTES                = 0x1\n\tNFTA_COUNTER_PACKETS              = 0x2\n\tNFTA_COUNTER_PAD                  = 0x3\n\tNFTA_LOG_UNSPEC                   = 0x0\n\tNFTA_LOG_GROUP                    = 0x1\n\tNFTA_LOG_PREFIX                   = 0x2\n\tNFTA_LOG_SNAPLEN                  = 0x3\n\tNFTA_LOG_QTHRESHOLD               = 0x4\n\tNFTA_LOG_LEVEL                    = 0x5\n\tNFTA_LOG_FLAGS                    = 0x6\n\tNFTA_QUEUE_UNSPEC                 = 0x0\n\tNFTA_QUEUE_NUM                    = 0x1\n\tNFTA_QUEUE_TOTAL                  = 0x2\n\tNFTA_QUEUE_FLAGS                  = 0x3\n\tNFTA_QUEUE_SREG_QNUM              = 0x4\n\tNFT_QUOTA_F_INV                   = 0x1\n\tNFT_QUOTA_F_DEPLETED              = 0x2\n\tNFTA_QUOTA_UNSPEC                 = 0x0\n\tNFTA_QUOTA_BYTES                  = 0x1\n\tNFTA_QUOTA_FLAGS                  = 0x2\n\tNFTA_QUOTA_PAD                    = 0x3\n\tNFTA_QUOTA_CONSUMED               = 0x4\n\tNFT_REJECT_ICMP_UNREACH           = 0x0\n\tNFT_REJECT_TCP_RST                = 0x1\n\tNFT_REJECT_ICMPX_UNREACH          = 0x2\n\tNFT_REJECT_ICMPX_NO_ROUTE         = 0x0\n\tNFT_REJECT_ICMPX_PORT_UNREACH     = 0x1\n\tNFT_REJECT_ICMPX_HOST_UNREACH     = 0x2\n\tNFT_REJECT_ICMPX_ADMIN_PROHIBITED = 0x3\n\tNFTA_REJECT_UNSPEC                = 0x0\n\tNFTA_REJECT_TYPE                  = 0x1\n\tNFTA_REJECT_ICMP_CODE             = 0x2\n\tNFT_NAT_SNAT                      = 0x0\n\tNFT_NAT_DNAT                      = 0x1\n\tNFTA_NAT_UNSPEC                   = 0x0\n\tNFTA_NAT_TYPE                     = 0x1\n\tNFTA_NAT_FAMILY                   = 0x2\n\tNFTA_NAT_REG_ADDR_MIN             = 0x3\n\tNFTA_NAT_REG_ADDR_MAX             = 0x4\n\tNFTA_NAT_REG_PROTO_MIN            = 0x5\n\tNFTA_NAT_REG_PROTO_MAX            = 0x6\n\tNFTA_NAT_FLAGS                    = 0x7\n\tNFTA_MASQ_UNSPEC                  = 0x0\n\tNFTA_MASQ_FLAGS                   = 0x1\n\tNFTA_MASQ_REG_PROTO_MIN           = 0x2\n\tNFTA_MASQ_REG_PROTO_MAX           = 0x3\n\tNFTA_REDIR_UNSPEC                 = 0x0\n\tNFTA_REDIR_REG_PROTO_MIN          = 0x1\n\tNFTA_REDIR_REG_PROTO_MAX          = 0x2\n\tNFTA_REDIR_FLAGS                  = 0x3\n\tNFTA_DUP_UNSPEC                   = 0x0\n\tNFTA_DUP_SREG_ADDR                = 0x1\n\tNFTA_DUP_SREG_DEV                 = 0x2\n\tNFTA_FWD_UNSPEC                   = 0x0\n\tNFTA_FWD_SREG_DEV                 = 0x1\n\tNFTA_OBJREF_UNSPEC                = 0x0\n\tNFTA_OBJREF_IMM_TYPE              = 0x1\n\tNFTA_OBJREF_IMM_NAME              = 0x2\n\tNFTA_OBJREF_SET_SREG              = 0x3\n\tNFTA_OBJREF_SET_NAME              = 0x4\n\tNFTA_OBJREF_SET_ID                = 0x5\n\tNFTA_GEN_UNSPEC                   = 0x0\n\tNFTA_GEN_ID                       = 0x1\n\tNFTA_GEN_PROC_PID                 = 0x2\n\tNFTA_GEN_PROC_NAME                = 0x3\n\tNFTA_FIB_UNSPEC                   = 0x0\n\tNFTA_FIB_DREG                     = 0x1\n\tNFTA_FIB_RESULT                   = 0x2\n\tNFTA_FIB_FLAGS                    = 0x3\n\tNFT_FIB_RESULT_UNSPEC             = 0x0\n\tNFT_FIB_RESULT_OIF                = 0x1\n\tNFT_FIB_RESULT_OIFNAME            = 0x2\n\tNFT_FIB_RESULT_ADDRTYPE           = 0x3\n\tNFTA_FIB_F_SADDR                  = 0x1\n\tNFTA_FIB_F_DADDR                  = 0x2\n\tNFTA_FIB_F_MARK                   = 0x4\n\tNFTA_FIB_F_IIF                    = 0x8\n\tNFTA_FIB_F_OIF                    = 0x10\n\tNFTA_FIB_F_PRESENT                = 0x20\n\tNFTA_CT_HELPER_UNSPEC             = 0x0\n\tNFTA_CT_HELPER_NAME               = 0x1\n\tNFTA_CT_HELPER_L3PROTO            = 0x2\n\tNFTA_CT_HELPER_L4PROTO            = 0x3\n\tNFTA_OBJ_UNSPEC                   = 0x0\n\tNFTA_OBJ_TABLE                    = 0x1\n\tNFTA_OBJ_NAME                     = 0x2\n\tNFTA_OBJ_TYPE                     = 0x3\n\tNFTA_OBJ_DATA                     = 0x4\n\tNFTA_OBJ_USE                      = 0x5\n\tNFTA_TRACE_UNSPEC                 = 0x0\n\tNFTA_TRACE_TABLE                  = 0x1\n\tNFTA_TRACE_CHAIN                  = 0x2\n\tNFTA_TRACE_RULE_HANDLE            = 0x3\n\tNFTA_TRACE_TYPE                   = 0x4\n\tNFTA_TRACE_VERDICT                = 0x5\n\tNFTA_TRACE_ID                     = 0x6\n\tNFTA_TRACE_LL_HEADER              = 0x7\n\tNFTA_TRACE_NETWORK_HEADER         = 0x8\n\tNFTA_TRACE_TRANSPORT_HEADER       = 0x9\n\tNFTA_TRACE_IIF                    = 0xa\n\tNFTA_TRACE_IIFTYPE                = 0xb\n\tNFTA_TRACE_OIF                    = 0xc\n\tNFTA_TRACE_OIFTYPE                = 0xd\n\tNFTA_TRACE_MARK                   = 0xe\n\tNFTA_TRACE_NFPROTO                = 0xf\n\tNFTA_TRACE_POLICY                 = 0x10\n\tNFTA_TRACE_PAD                    = 0x11\n\tNFT_TRACETYPE_UNSPEC              = 0x0\n\tNFT_TRACETYPE_POLICY              = 0x1\n\tNFT_TRACETYPE_RETURN              = 0x2\n\tNFT_TRACETYPE_RULE                = 0x3\n\tNFTA_NG_UNSPEC                    = 0x0\n\tNFTA_NG_DREG                      = 0x1\n\tNFTA_NG_MODULUS                   = 0x2\n\tNFTA_NG_TYPE                      = 0x3\n\tNFTA_NG_OFFSET                    = 0x4\n\tNFT_NG_INCREMENTAL                = 0x0\n\tNFT_NG_RANDOM                     = 0x1\n)\n\ntype RTCTime struct {\n\tSec   int32\n\tMin   int32\n\tHour  int32\n\tMday  int32\n\tMon   int32\n\tYear  int32\n\tWday  int32\n\tYday  int32\n\tIsdst int32\n}\n\ntype RTCWkAlrm struct {\n\tEnabled uint8\n\tPending uint8\n\tTime    RTCTime\n}\n\ntype RTCPLLInfo struct {\n\tCtrl    int32\n\tValue   int32\n\tMax     int32\n\tMin     int32\n\tPosmult int32\n\tNegmult int32\n\tClock   int32\n}\n\ntype BlkpgIoctlArg struct {\n\tOp      int32\n\tFlags   int32\n\tDatalen int32\n\tData    *byte\n}\n\ntype BlkpgPartition struct {\n\tStart   int64\n\tLength  int64\n\tPno     int32\n\tDevname [64]uint8\n\tVolname [64]uint8\n\t_       [4]byte\n}\n\nconst (\n\tBLKPG                  = 0x20001269\n\tBLKPG_ADD_PARTITION    = 0x1\n\tBLKPG_DEL_PARTITION    = 0x2\n\tBLKPG_RESIZE_PARTITION = 0x3\n)\n\nconst (\n\tNETNSA_NONE = 0x0\n\tNETNSA_NSID = 0x1\n\tNETNSA_PID  = 0x2\n\tNETNSA_FD   = 0x3\n)\n\ntype XDPRingOffset struct {\n\tProducer uint64\n\tConsumer uint64\n\tDesc     uint64\n}\n\ntype XDPMmapOffsets struct {\n\tRx XDPRingOffset\n\tTx XDPRingOffset\n\tFr XDPRingOffset\n\tCr XDPRingOffset\n}\n\ntype XDPUmemReg struct {\n\tAddr     uint64\n\tLen      uint64\n\tSize     uint32\n\tHeadroom uint32\n}\n\ntype XDPStatistics struct {\n\tRx_dropped       uint64\n\tRx_invalid_descs uint64\n\tTx_invalid_descs uint64\n}\n\ntype XDPDesc struct {\n\tAddr    uint64\n\tLen     uint32\n\tOptions uint32\n}\n\nconst (\n\tNCSI_CMD_UNSPEC                 = 0x0\n\tNCSI_CMD_PKG_INFO               = 0x1\n\tNCSI_CMD_SET_INTERFACE          = 0x2\n\tNCSI_CMD_CLEAR_INTERFACE        = 0x3\n\tNCSI_ATTR_UNSPEC                = 0x0\n\tNCSI_ATTR_IFINDEX               = 0x1\n\tNCSI_ATTR_PACKAGE_LIST          = 0x2\n\tNCSI_ATTR_PACKAGE_ID            = 0x3\n\tNCSI_ATTR_CHANNEL_ID            = 0x4\n\tNCSI_PKG_ATTR_UNSPEC            = 0x0\n\tNCSI_PKG_ATTR                   = 0x1\n\tNCSI_PKG_ATTR_ID                = 0x2\n\tNCSI_PKG_ATTR_FORCED            = 0x3\n\tNCSI_PKG_ATTR_CHANNEL_LIST      = 0x4\n\tNCSI_CHANNEL_ATTR_UNSPEC        = 0x0\n\tNCSI_CHANNEL_ATTR               = 0x1\n\tNCSI_CHANNEL_ATTR_ID            = 0x2\n\tNCSI_CHANNEL_ATTR_VERSION_MAJOR = 0x3\n\tNCSI_CHANNEL_ATTR_VERSION_MINOR = 0x4\n\tNCSI_CHANNEL_ATTR_VERSION_STR   = 0x5\n\tNCSI_CHANNEL_ATTR_LINK_STATE    = 0x6\n\tNCSI_CHANNEL_ATTR_ACTIVE        = 0x7\n\tNCSI_CHANNEL_ATTR_FORCED        = 0x8\n\tNCSI_CHANNEL_ATTR_VLAN_LIST     = 0x9\n\tNCSI_CHANNEL_ATTR_VLAN_ID       = 0xa\n)\n\ntype ScmTimestamping struct {\n\tTs [3]Timespec\n}\n\nconst (\n\tSOF_TIMESTAMPING_TX_HARDWARE  = 0x1\n\tSOF_TIMESTAMPING_TX_SOFTWARE  = 0x2\n\tSOF_TIMESTAMPING_RX_HARDWARE  = 0x4\n\tSOF_TIMESTAMPING_RX_SOFTWARE  = 0x8\n\tSOF_TIMESTAMPING_SOFTWARE     = 0x10\n\tSOF_TIMESTAMPING_SYS_HARDWARE = 0x20\n\tSOF_TIMESTAMPING_RAW_HARDWARE = 0x40\n\tSOF_TIMESTAMPING_OPT_ID       = 0x80\n\tSOF_TIMESTAMPING_TX_SCHED     = 0x100\n\tSOF_TIMESTAMPING_TX_ACK       = 0x200\n\tSOF_TIMESTAMPING_OPT_CMSG     = 0x400\n\tSOF_TIMESTAMPING_OPT_TSONLY   = 0x800\n\tSOF_TIMESTAMPING_OPT_STATS    = 0x1000\n\tSOF_TIMESTAMPING_OPT_PKTINFO  = 0x2000\n\tSOF_TIMESTAMPING_OPT_TX_SWHW  = 0x4000\n\n\tSOF_TIMESTAMPING_LAST = 0x4000\n\tSOF_TIMESTAMPING_MASK = 0x7fff\n\n\tSCM_TSTAMP_SND   = 0x0\n\tSCM_TSTAMP_SCHED = 0x1\n\tSCM_TSTAMP_ACK   = 0x2\n)\n\ntype SockExtendedErr struct {\n\tErrno  uint32\n\tOrigin uint8\n\tType   uint8\n\tCode   uint8\n\tPad    uint8\n\tInfo   uint32\n\tData   uint32\n}\n\ntype FanotifyEventMetadata struct {\n\tEvent_len    uint32\n\tVers         uint8\n\tReserved     uint8\n\tMetadata_len uint16\n\tMask         uint64\n\tFd           int32\n\tPid          int32\n}\n\ntype FanotifyResponse struct {\n\tFd       int32\n\tResponse uint32\n}\n\nconst (\n\tCRYPTO_MSG_BASE      = 0x10\n\tCRYPTO_MSG_NEWALG    = 0x10\n\tCRYPTO_MSG_DELALG    = 0x11\n\tCRYPTO_MSG_UPDATEALG = 0x12\n\tCRYPTO_MSG_GETALG    = 0x13\n\tCRYPTO_MSG_DELRNG    = 0x14\n\tCRYPTO_MSG_GETSTAT   = 0x15\n)\n\nconst (\n\tCRYPTOCFGA_UNSPEC           = 0x0\n\tCRYPTOCFGA_PRIORITY_VAL     = 0x1\n\tCRYPTOCFGA_REPORT_LARVAL    = 0x2\n\tCRYPTOCFGA_REPORT_HASH      = 0x3\n\tCRYPTOCFGA_REPORT_BLKCIPHER = 0x4\n\tCRYPTOCFGA_REPORT_AEAD      = 0x5\n\tCRYPTOCFGA_REPORT_COMPRESS  = 0x6\n\tCRYPTOCFGA_REPORT_RNG       = 0x7\n\tCRYPTOCFGA_REPORT_CIPHER    = 0x8\n\tCRYPTOCFGA_REPORT_AKCIPHER  = 0x9\n\tCRYPTOCFGA_REPORT_KPP       = 0xa\n\tCRYPTOCFGA_REPORT_ACOMP     = 0xb\n\tCRYPTOCFGA_STAT_LARVAL      = 0xc\n\tCRYPTOCFGA_STAT_HASH        = 0xd\n\tCRYPTOCFGA_STAT_BLKCIPHER   = 0xe\n\tCRYPTOCFGA_STAT_AEAD        = 0xf\n\tCRYPTOCFGA_STAT_COMPRESS    = 0x10\n\tCRYPTOCFGA_STAT_RNG         = 0x11\n\tCRYPTOCFGA_STAT_CIPHER      = 0x12\n\tCRYPTOCFGA_STAT_AKCIPHER    = 0x13\n\tCRYPTOCFGA_STAT_KPP         = 0x14\n\tCRYPTOCFGA_STAT_ACOMP       = 0x15\n)\n\ntype CryptoUserAlg struct {\n\tName        [64]int8\n\tDriver_name [64]int8\n\tModule_name [64]int8\n\tType        uint32\n\tMask        uint32\n\tRefcnt      uint32\n\tFlags       uint32\n}\n\ntype CryptoStatAEAD struct {\n\tType         [64]int8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatAKCipher struct {\n\tType         [64]int8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tVerify_cnt   uint64\n\tSign_cnt     uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatCipher struct {\n\tType         [64]int8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatCompress struct {\n\tType            [64]int8\n\tCompress_cnt    uint64\n\tCompress_tlen   uint64\n\tDecompress_cnt  uint64\n\tDecompress_tlen uint64\n\tErr_cnt         uint64\n}\n\ntype CryptoStatHash struct {\n\tType      [64]int8\n\tHash_cnt  uint64\n\tHash_tlen uint64\n\tErr_cnt   uint64\n}\n\ntype CryptoStatKPP struct {\n\tType                      [64]int8\n\tSetsecret_cnt             uint64\n\tGenerate_public_key_cnt   uint64\n\tCompute_shared_secret_cnt uint64\n\tErr_cnt                   uint64\n}\n\ntype CryptoStatRNG struct {\n\tType          [64]int8\n\tGenerate_cnt  uint64\n\tGenerate_tlen uint64\n\tSeed_cnt      uint64\n\tErr_cnt       uint64\n}\n\ntype CryptoStatLarval struct {\n\tType [64]int8\n}\n\ntype CryptoReportLarval struct {\n\tType [64]int8\n}\n\ntype CryptoReportHash struct {\n\tType       [64]int8\n\tBlocksize  uint32\n\tDigestsize uint32\n}\n\ntype CryptoReportCipher struct {\n\tType        [64]int8\n\tBlocksize   uint32\n\tMin_keysize uint32\n\tMax_keysize uint32\n}\n\ntype CryptoReportBlkCipher struct {\n\tType        [64]int8\n\tGeniv       [64]int8\n\tBlocksize   uint32\n\tMin_keysize uint32\n\tMax_keysize uint32\n\tIvsize      uint32\n}\n\ntype CryptoReportAEAD struct {\n\tType        [64]int8\n\tGeniv       [64]int8\n\tBlocksize   uint32\n\tMaxauthsize uint32\n\tIvsize      uint32\n}\n\ntype CryptoReportComp struct {\n\tType [64]int8\n}\n\ntype CryptoReportRNG struct {\n\tType     [64]int8\n\tSeedsize uint32\n}\n\ntype CryptoReportAKCipher struct {\n\tType [64]int8\n}\n\ntype CryptoReportKPP struct {\n\tType [64]int8\n}\n\ntype CryptoReportAcomp struct {\n\tType [64]int8\n}\n\nconst (\n\tBPF_REG_0                           = 0x0\n\tBPF_REG_1                           = 0x1\n\tBPF_REG_2                           = 0x2\n\tBPF_REG_3                           = 0x3\n\tBPF_REG_4                           = 0x4\n\tBPF_REG_5                           = 0x5\n\tBPF_REG_6                           = 0x6\n\tBPF_REG_7                           = 0x7\n\tBPF_REG_8                           = 0x8\n\tBPF_REG_9                           = 0x9\n\tBPF_REG_10                          = 0xa\n\tBPF_MAP_CREATE                      = 0x0\n\tBPF_MAP_LOOKUP_ELEM                 = 0x1\n\tBPF_MAP_UPDATE_ELEM                 = 0x2\n\tBPF_MAP_DELETE_ELEM                 = 0x3\n\tBPF_MAP_GET_NEXT_KEY                = 0x4\n\tBPF_PROG_LOAD                       = 0x5\n\tBPF_OBJ_PIN                         = 0x6\n\tBPF_OBJ_GET                         = 0x7\n\tBPF_PROG_ATTACH                     = 0x8\n\tBPF_PROG_DETACH                     = 0x9\n\tBPF_PROG_TEST_RUN                   = 0xa\n\tBPF_PROG_GET_NEXT_ID                = 0xb\n\tBPF_MAP_GET_NEXT_ID                 = 0xc\n\tBPF_PROG_GET_FD_BY_ID               = 0xd\n\tBPF_MAP_GET_FD_BY_ID                = 0xe\n\tBPF_OBJ_GET_INFO_BY_FD              = 0xf\n\tBPF_PROG_QUERY                      = 0x10\n\tBPF_RAW_TRACEPOINT_OPEN             = 0x11\n\tBPF_BTF_LOAD                        = 0x12\n\tBPF_BTF_GET_FD_BY_ID                = 0x13\n\tBPF_TASK_FD_QUERY                   = 0x14\n\tBPF_MAP_LOOKUP_AND_DELETE_ELEM      = 0x15\n\tBPF_MAP_TYPE_UNSPEC                 = 0x0\n\tBPF_MAP_TYPE_HASH                   = 0x1\n\tBPF_MAP_TYPE_ARRAY                  = 0x2\n\tBPF_MAP_TYPE_PROG_ARRAY             = 0x3\n\tBPF_MAP_TYPE_PERF_EVENT_ARRAY       = 0x4\n\tBPF_MAP_TYPE_PERCPU_HASH            = 0x5\n\tBPF_MAP_TYPE_PERCPU_ARRAY           = 0x6\n\tBPF_MAP_TYPE_STACK_TRACE            = 0x7\n\tBPF_MAP_TYPE_CGROUP_ARRAY           = 0x8\n\tBPF_MAP_TYPE_LRU_HASH               = 0x9\n\tBPF_MAP_TYPE_LRU_PERCPU_HASH        = 0xa\n\tBPF_MAP_TYPE_LPM_TRIE               = 0xb\n\tBPF_MAP_TYPE_ARRAY_OF_MAPS          = 0xc\n\tBPF_MAP_TYPE_HASH_OF_MAPS           = 0xd\n\tBPF_MAP_TYPE_DEVMAP                 = 0xe\n\tBPF_MAP_TYPE_SOCKMAP                = 0xf\n\tBPF_MAP_TYPE_CPUMAP                 = 0x10\n\tBPF_MAP_TYPE_XSKMAP                 = 0x11\n\tBPF_MAP_TYPE_SOCKHASH               = 0x12\n\tBPF_MAP_TYPE_CGROUP_STORAGE         = 0x13\n\tBPF_MAP_TYPE_REUSEPORT_SOCKARRAY    = 0x14\n\tBPF_MAP_TYPE_PERCPU_CGROUP_STORAGE  = 0x15\n\tBPF_MAP_TYPE_QUEUE                  = 0x16\n\tBPF_MAP_TYPE_STACK                  = 0x17\n\tBPF_PROG_TYPE_UNSPEC                = 0x0\n\tBPF_PROG_TYPE_SOCKET_FILTER         = 0x1\n\tBPF_PROG_TYPE_KPROBE                = 0x2\n\tBPF_PROG_TYPE_SCHED_CLS             = 0x3\n\tBPF_PROG_TYPE_SCHED_ACT             = 0x4\n\tBPF_PROG_TYPE_TRACEPOINT            = 0x5\n\tBPF_PROG_TYPE_XDP                   = 0x6\n\tBPF_PROG_TYPE_PERF_EVENT            = 0x7\n\tBPF_PROG_TYPE_CGROUP_SKB            = 0x8\n\tBPF_PROG_TYPE_CGROUP_SOCK           = 0x9\n\tBPF_PROG_TYPE_LWT_IN                = 0xa\n\tBPF_PROG_TYPE_LWT_OUT               = 0xb\n\tBPF_PROG_TYPE_LWT_XMIT              = 0xc\n\tBPF_PROG_TYPE_SOCK_OPS              = 0xd\n\tBPF_PROG_TYPE_SK_SKB                = 0xe\n\tBPF_PROG_TYPE_CGROUP_DEVICE         = 0xf\n\tBPF_PROG_TYPE_SK_MSG                = 0x10\n\tBPF_PROG_TYPE_RAW_TRACEPOINT        = 0x11\n\tBPF_PROG_TYPE_CGROUP_SOCK_ADDR      = 0x12\n\tBPF_PROG_TYPE_LWT_SEG6LOCAL         = 0x13\n\tBPF_PROG_TYPE_LIRC_MODE2            = 0x14\n\tBPF_PROG_TYPE_SK_REUSEPORT          = 0x15\n\tBPF_PROG_TYPE_FLOW_DISSECTOR        = 0x16\n\tBPF_CGROUP_INET_INGRESS             = 0x0\n\tBPF_CGROUP_INET_EGRESS              = 0x1\n\tBPF_CGROUP_INET_SOCK_CREATE         = 0x2\n\tBPF_CGROUP_SOCK_OPS                 = 0x3\n\tBPF_SK_SKB_STREAM_PARSER            = 0x4\n\tBPF_SK_SKB_STREAM_VERDICT           = 0x5\n\tBPF_CGROUP_DEVICE                   = 0x6\n\tBPF_SK_MSG_VERDICT                  = 0x7\n\tBPF_CGROUP_INET4_BIND               = 0x8\n\tBPF_CGROUP_INET6_BIND               = 0x9\n\tBPF_CGROUP_INET4_CONNECT            = 0xa\n\tBPF_CGROUP_INET6_CONNECT            = 0xb\n\tBPF_CGROUP_INET4_POST_BIND          = 0xc\n\tBPF_CGROUP_INET6_POST_BIND          = 0xd\n\tBPF_CGROUP_UDP4_SENDMSG             = 0xe\n\tBPF_CGROUP_UDP6_SENDMSG             = 0xf\n\tBPF_LIRC_MODE2                      = 0x10\n\tBPF_FLOW_DISSECTOR                  = 0x11\n\tBPF_STACK_BUILD_ID_EMPTY            = 0x0\n\tBPF_STACK_BUILD_ID_VALID            = 0x1\n\tBPF_STACK_BUILD_ID_IP               = 0x2\n\tBPF_ADJ_ROOM_NET                    = 0x0\n\tBPF_HDR_START_MAC                   = 0x0\n\tBPF_HDR_START_NET                   = 0x1\n\tBPF_LWT_ENCAP_SEG6                  = 0x0\n\tBPF_LWT_ENCAP_SEG6_INLINE           = 0x1\n\tBPF_OK                              = 0x0\n\tBPF_DROP                            = 0x2\n\tBPF_REDIRECT                        = 0x7\n\tBPF_SOCK_OPS_VOID                   = 0x0\n\tBPF_SOCK_OPS_TIMEOUT_INIT           = 0x1\n\tBPF_SOCK_OPS_RWND_INIT              = 0x2\n\tBPF_SOCK_OPS_TCP_CONNECT_CB         = 0x3\n\tBPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB  = 0x4\n\tBPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB = 0x5\n\tBPF_SOCK_OPS_NEEDS_ECN              = 0x6\n\tBPF_SOCK_OPS_BASE_RTT               = 0x7\n\tBPF_SOCK_OPS_RTO_CB                 = 0x8\n\tBPF_SOCK_OPS_RETRANS_CB             = 0x9\n\tBPF_SOCK_OPS_STATE_CB               = 0xa\n\tBPF_SOCK_OPS_TCP_LISTEN_CB          = 0xb\n\tBPF_TCP_ESTABLISHED                 = 0x1\n\tBPF_TCP_SYN_SENT                    = 0x2\n\tBPF_TCP_SYN_RECV                    = 0x3\n\tBPF_TCP_FIN_WAIT1                   = 0x4\n\tBPF_TCP_FIN_WAIT2                   = 0x5\n\tBPF_TCP_TIME_WAIT                   = 0x6\n\tBPF_TCP_CLOSE                       = 0x7\n\tBPF_TCP_CLOSE_WAIT                  = 0x8\n\tBPF_TCP_LAST_ACK                    = 0x9\n\tBPF_TCP_LISTEN                      = 0xa\n\tBPF_TCP_CLOSING                     = 0xb\n\tBPF_TCP_NEW_SYN_RECV                = 0xc\n\tBPF_TCP_MAX_STATES                  = 0xd\n\tBPF_FIB_LKUP_RET_SUCCESS            = 0x0\n\tBPF_FIB_LKUP_RET_BLACKHOLE          = 0x1\n\tBPF_FIB_LKUP_RET_UNREACHABLE        = 0x2\n\tBPF_FIB_LKUP_RET_PROHIBIT           = 0x3\n\tBPF_FIB_LKUP_RET_NOT_FWDED          = 0x4\n\tBPF_FIB_LKUP_RET_FWD_DISABLED       = 0x5\n\tBPF_FIB_LKUP_RET_UNSUPP_LWT         = 0x6\n\tBPF_FIB_LKUP_RET_NO_NEIGH           = 0x7\n\tBPF_FIB_LKUP_RET_FRAG_NEEDED        = 0x8\n\tBPF_FD_TYPE_RAW_TRACEPOINT          = 0x0\n\tBPF_FD_TYPE_TRACEPOINT              = 0x1\n\tBPF_FD_TYPE_KPROBE                  = 0x2\n\tBPF_FD_TYPE_KRETPROBE               = 0x3\n\tBPF_FD_TYPE_UPROBE                  = 0x4\n\tBPF_FD_TYPE_URETPROBE               = 0x5\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go",
    "content": "// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build ppc64,linux\n\npackage unix\n\nconst (\n\tSizeofPtr      = 0x8\n\tSizeofShort    = 0x2\n\tSizeofInt      = 0x4\n\tSizeofLong     = 0x8\n\tSizeofLongLong = 0x8\n\tPathMax        = 0x1000\n)\n\ntype (\n\t_C_short     int16\n\t_C_int       int32\n\t_C_long      int64\n\t_C_long_long int64\n)\n\ntype Timespec struct {\n\tSec  int64\n\tNsec int64\n}\n\ntype Timeval struct {\n\tSec  int64\n\tUsec int64\n}\n\ntype Timex struct {\n\tModes     uint32\n\tOffset    int64\n\tFreq      int64\n\tMaxerror  int64\n\tEsterror  int64\n\tStatus    int32\n\tConstant  int64\n\tPrecision int64\n\tTolerance int64\n\tTime      Timeval\n\tTick      int64\n\tPpsfreq   int64\n\tJitter    int64\n\tShift     int32\n\tStabil    int64\n\tJitcnt    int64\n\tCalcnt    int64\n\tErrcnt    int64\n\tStbcnt    int64\n\tTai       int32\n\t_         [44]byte\n}\n\ntype Time_t int64\n\ntype Tms struct {\n\tUtime  int64\n\tStime  int64\n\tCutime int64\n\tCstime int64\n}\n\ntype Utimbuf struct {\n\tActime  int64\n\tModtime int64\n}\n\ntype Rusage struct {\n\tUtime    Timeval\n\tStime    Timeval\n\tMaxrss   int64\n\tIxrss    int64\n\tIdrss    int64\n\tIsrss    int64\n\tMinflt   int64\n\tMajflt   int64\n\tNswap    int64\n\tInblock  int64\n\tOublock  int64\n\tMsgsnd   int64\n\tMsgrcv   int64\n\tNsignals int64\n\tNvcsw    int64\n\tNivcsw   int64\n}\n\ntype Rlimit struct {\n\tCur uint64\n\tMax uint64\n}\n\ntype _Gid_t uint32\n\ntype Stat_t struct {\n\tDev     uint64\n\tIno     uint64\n\tNlink   uint64\n\tMode    uint32\n\tUid     uint32\n\tGid     uint32\n\t_       int32\n\tRdev    uint64\n\tSize    int64\n\tBlksize int64\n\tBlocks  int64\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\t_       uint64\n\t_       uint64\n\t_       uint64\n}\n\ntype StatxTimestamp struct {\n\tSec  int64\n\tNsec uint32\n\t_    int32\n}\n\ntype Statx_t struct {\n\tMask            uint32\n\tBlksize         uint32\n\tAttributes      uint64\n\tNlink           uint32\n\tUid             uint32\n\tGid             uint32\n\tMode            uint16\n\t_               [1]uint16\n\tIno             uint64\n\tSize            uint64\n\tBlocks          uint64\n\tAttributes_mask uint64\n\tAtime           StatxTimestamp\n\tBtime           StatxTimestamp\n\tCtime           StatxTimestamp\n\tMtime           StatxTimestamp\n\tRdev_major      uint32\n\tRdev_minor      uint32\n\tDev_major       uint32\n\tDev_minor       uint32\n\t_               [14]uint64\n}\n\ntype Dirent struct {\n\tIno    uint64\n\tOff    int64\n\tReclen uint16\n\tType   uint8\n\tName   [256]uint8\n\t_      [5]byte\n}\n\ntype Fsid struct {\n\tVal [2]int32\n}\n\ntype Flock_t struct {\n\tType   int16\n\tWhence int16\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\t_      [4]byte\n}\n\ntype FscryptPolicy struct {\n\tVersion                   uint8\n\tContents_encryption_mode  uint8\n\tFilenames_encryption_mode uint8\n\tFlags                     uint8\n\tMaster_key_descriptor     [8]uint8\n}\n\ntype FscryptKey struct {\n\tMode uint32\n\tRaw  [64]uint8\n\tSize uint32\n}\n\ntype KeyctlDHParams struct {\n\tPrivate int32\n\tPrime   int32\n\tBase    int32\n}\n\nconst (\n\tFADV_NORMAL     = 0x0\n\tFADV_RANDOM     = 0x1\n\tFADV_SEQUENTIAL = 0x2\n\tFADV_WILLNEED   = 0x3\n\tFADV_DONTNEED   = 0x4\n\tFADV_NOREUSE    = 0x5\n)\n\ntype RawSockaddrInet4 struct {\n\tFamily uint16\n\tPort   uint16\n\tAddr   [4]byte /* in_addr */\n\tZero   [8]uint8\n}\n\ntype RawSockaddrInet6 struct {\n\tFamily   uint16\n\tPort     uint16\n\tFlowinfo uint32\n\tAddr     [16]byte /* in6_addr */\n\tScope_id uint32\n}\n\ntype RawSockaddrUnix struct {\n\tFamily uint16\n\tPath   [108]int8\n}\n\ntype RawSockaddrLinklayer struct {\n\tFamily   uint16\n\tProtocol uint16\n\tIfindex  int32\n\tHatype   uint16\n\tPkttype  uint8\n\tHalen    uint8\n\tAddr     [8]uint8\n}\n\ntype RawSockaddrNetlink struct {\n\tFamily uint16\n\tPad    uint16\n\tPid    uint32\n\tGroups uint32\n}\n\ntype RawSockaddrHCI struct {\n\tFamily  uint16\n\tDev     uint16\n\tChannel uint16\n}\n\ntype RawSockaddrL2 struct {\n\tFamily      uint16\n\tPsm         uint16\n\tBdaddr      [6]uint8\n\tCid         uint16\n\tBdaddr_type uint8\n\t_           [1]byte\n}\n\ntype RawSockaddrRFCOMM struct {\n\tFamily  uint16\n\tBdaddr  [6]uint8\n\tChannel uint8\n\t_       [1]byte\n}\n\ntype RawSockaddrCAN struct {\n\tFamily  uint16\n\tIfindex int32\n\tAddr    [8]byte\n}\n\ntype RawSockaddrALG struct {\n\tFamily uint16\n\tType   [14]uint8\n\tFeat   uint32\n\tMask   uint32\n\tName   [64]uint8\n}\n\ntype RawSockaddrVM struct {\n\tFamily    uint16\n\tReserved1 uint16\n\tPort      uint32\n\tCid       uint32\n\tZero      [4]uint8\n}\n\ntype RawSockaddrXDP struct {\n\tFamily         uint16\n\tFlags          uint16\n\tIfindex        uint32\n\tQueue_id       uint32\n\tShared_umem_fd uint32\n}\n\ntype RawSockaddrPPPoX [0x1e]byte\n\ntype RawSockaddr struct {\n\tFamily uint16\n\tData   [14]uint8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [96]uint8\n}\n\ntype _Socklen uint32\n\ntype Linger struct {\n\tOnoff  int32\n\tLinger int32\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint64\n}\n\ntype IPMreq struct {\n\tMultiaddr [4]byte /* in_addr */\n\tInterface [4]byte /* in_addr */\n}\n\ntype IPMreqn struct {\n\tMultiaddr [4]byte /* in_addr */\n\tAddress   [4]byte /* in_addr */\n\tIfindex   int32\n}\n\ntype IPv6Mreq struct {\n\tMultiaddr [16]byte /* in6_addr */\n\tInterface uint32\n}\n\ntype PacketMreq struct {\n\tIfindex int32\n\tType    uint16\n\tAlen    uint16\n\tAddress [8]uint8\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tIov        *Iovec\n\tIovlen     uint64\n\tControl    *byte\n\tControllen uint64\n\tFlags      int32\n\t_          [4]byte\n}\n\ntype Cmsghdr struct {\n\tLen   uint64\n\tLevel int32\n\tType  int32\n}\n\ntype Inet4Pktinfo struct {\n\tIfindex  int32\n\tSpec_dst [4]byte /* in_addr */\n\tAddr     [4]byte /* in_addr */\n}\n\ntype Inet6Pktinfo struct {\n\tAddr    [16]byte /* in6_addr */\n\tIfindex uint32\n}\n\ntype IPv6MTUInfo struct {\n\tAddr RawSockaddrInet6\n\tMtu  uint32\n}\n\ntype ICMPv6Filter struct {\n\tData [8]uint32\n}\n\ntype Ucred struct {\n\tPid int32\n\tUid uint32\n\tGid uint32\n}\n\ntype TCPInfo struct {\n\tState          uint8\n\tCa_state       uint8\n\tRetransmits    uint8\n\tProbes         uint8\n\tBackoff        uint8\n\tOptions        uint8\n\tRto            uint32\n\tAto            uint32\n\tSnd_mss        uint32\n\tRcv_mss        uint32\n\tUnacked        uint32\n\tSacked         uint32\n\tLost           uint32\n\tRetrans        uint32\n\tFackets        uint32\n\tLast_data_sent uint32\n\tLast_ack_sent  uint32\n\tLast_data_recv uint32\n\tLast_ack_recv  uint32\n\tPmtu           uint32\n\tRcv_ssthresh   uint32\n\tRtt            uint32\n\tRttvar         uint32\n\tSnd_ssthresh   uint32\n\tSnd_cwnd       uint32\n\tAdvmss         uint32\n\tReordering     uint32\n\tRcv_rtt        uint32\n\tRcv_space      uint32\n\tTotal_retrans  uint32\n}\n\ntype CanFilter struct {\n\tId   uint32\n\tMask uint32\n}\n\nconst (\n\tSizeofSockaddrInet4     = 0x10\n\tSizeofSockaddrInet6     = 0x1c\n\tSizeofSockaddrAny       = 0x70\n\tSizeofSockaddrUnix      = 0x6e\n\tSizeofSockaddrLinklayer = 0x14\n\tSizeofSockaddrNetlink   = 0xc\n\tSizeofSockaddrHCI       = 0x6\n\tSizeofSockaddrL2        = 0xe\n\tSizeofSockaddrRFCOMM    = 0xa\n\tSizeofSockaddrCAN       = 0x10\n\tSizeofSockaddrALG       = 0x58\n\tSizeofSockaddrVM        = 0x10\n\tSizeofSockaddrXDP       = 0x10\n\tSizeofSockaddrPPPoX     = 0x1e\n\tSizeofLinger            = 0x8\n\tSizeofIovec             = 0x10\n\tSizeofIPMreq            = 0x8\n\tSizeofIPMreqn           = 0xc\n\tSizeofIPv6Mreq          = 0x14\n\tSizeofPacketMreq        = 0x10\n\tSizeofMsghdr            = 0x38\n\tSizeofCmsghdr           = 0x10\n\tSizeofInet4Pktinfo      = 0xc\n\tSizeofInet6Pktinfo      = 0x14\n\tSizeofIPv6MTUInfo       = 0x20\n\tSizeofICMPv6Filter      = 0x20\n\tSizeofUcred             = 0xc\n\tSizeofTCPInfo           = 0x68\n\tSizeofCanFilter         = 0x8\n)\n\nconst (\n\tNDA_UNSPEC              = 0x0\n\tNDA_DST                 = 0x1\n\tNDA_LLADDR              = 0x2\n\tNDA_CACHEINFO           = 0x3\n\tNDA_PROBES              = 0x4\n\tNDA_VLAN                = 0x5\n\tNDA_PORT                = 0x6\n\tNDA_VNI                 = 0x7\n\tNDA_IFINDEX             = 0x8\n\tNDA_MASTER              = 0x9\n\tNDA_LINK_NETNSID        = 0xa\n\tNDA_SRC_VNI             = 0xb\n\tNTF_USE                 = 0x1\n\tNTF_SELF                = 0x2\n\tNTF_MASTER              = 0x4\n\tNTF_PROXY               = 0x8\n\tNTF_EXT_LEARNED         = 0x10\n\tNTF_OFFLOADED           = 0x20\n\tNTF_ROUTER              = 0x80\n\tNUD_INCOMPLETE          = 0x1\n\tNUD_REACHABLE           = 0x2\n\tNUD_STALE               = 0x4\n\tNUD_DELAY               = 0x8\n\tNUD_PROBE               = 0x10\n\tNUD_FAILED              = 0x20\n\tNUD_NOARP               = 0x40\n\tNUD_PERMANENT           = 0x80\n\tNUD_NONE                = 0x0\n\tIFA_UNSPEC              = 0x0\n\tIFA_ADDRESS             = 0x1\n\tIFA_LOCAL               = 0x2\n\tIFA_LABEL               = 0x3\n\tIFA_BROADCAST           = 0x4\n\tIFA_ANYCAST             = 0x5\n\tIFA_CACHEINFO           = 0x6\n\tIFA_MULTICAST           = 0x7\n\tIFA_FLAGS               = 0x8\n\tIFA_RT_PRIORITY         = 0x9\n\tIFA_TARGET_NETNSID      = 0xa\n\tIFLA_UNSPEC             = 0x0\n\tIFLA_ADDRESS            = 0x1\n\tIFLA_BROADCAST          = 0x2\n\tIFLA_IFNAME             = 0x3\n\tIFLA_MTU                = 0x4\n\tIFLA_LINK               = 0x5\n\tIFLA_QDISC              = 0x6\n\tIFLA_STATS              = 0x7\n\tIFLA_COST               = 0x8\n\tIFLA_PRIORITY           = 0x9\n\tIFLA_MASTER             = 0xa\n\tIFLA_WIRELESS           = 0xb\n\tIFLA_PROTINFO           = 0xc\n\tIFLA_TXQLEN             = 0xd\n\tIFLA_MAP                = 0xe\n\tIFLA_WEIGHT             = 0xf\n\tIFLA_OPERSTATE          = 0x10\n\tIFLA_LINKMODE           = 0x11\n\tIFLA_LINKINFO           = 0x12\n\tIFLA_NET_NS_PID         = 0x13\n\tIFLA_IFALIAS            = 0x14\n\tIFLA_NUM_VF             = 0x15\n\tIFLA_VFINFO_LIST        = 0x16\n\tIFLA_STATS64            = 0x17\n\tIFLA_VF_PORTS           = 0x18\n\tIFLA_PORT_SELF          = 0x19\n\tIFLA_AF_SPEC            = 0x1a\n\tIFLA_GROUP              = 0x1b\n\tIFLA_NET_NS_FD          = 0x1c\n\tIFLA_EXT_MASK           = 0x1d\n\tIFLA_PROMISCUITY        = 0x1e\n\tIFLA_NUM_TX_QUEUES      = 0x1f\n\tIFLA_NUM_RX_QUEUES      = 0x20\n\tIFLA_CARRIER            = 0x21\n\tIFLA_PHYS_PORT_ID       = 0x22\n\tIFLA_CARRIER_CHANGES    = 0x23\n\tIFLA_PHYS_SWITCH_ID     = 0x24\n\tIFLA_LINK_NETNSID       = 0x25\n\tIFLA_PHYS_PORT_NAME     = 0x26\n\tIFLA_PROTO_DOWN         = 0x27\n\tIFLA_GSO_MAX_SEGS       = 0x28\n\tIFLA_GSO_MAX_SIZE       = 0x29\n\tIFLA_PAD                = 0x2a\n\tIFLA_XDP                = 0x2b\n\tIFLA_EVENT              = 0x2c\n\tIFLA_NEW_NETNSID        = 0x2d\n\tIFLA_IF_NETNSID         = 0x2e\n\tIFLA_TARGET_NETNSID     = 0x2e\n\tIFLA_CARRIER_UP_COUNT   = 0x2f\n\tIFLA_CARRIER_DOWN_COUNT = 0x30\n\tIFLA_NEW_IFINDEX        = 0x31\n\tIFLA_MIN_MTU            = 0x32\n\tIFLA_MAX_MTU            = 0x33\n\tIFLA_MAX                = 0x33\n\tIFLA_INFO_KIND          = 0x1\n\tIFLA_INFO_DATA          = 0x2\n\tIFLA_INFO_XSTATS        = 0x3\n\tIFLA_INFO_SLAVE_KIND    = 0x4\n\tIFLA_INFO_SLAVE_DATA    = 0x5\n\tRT_SCOPE_UNIVERSE       = 0x0\n\tRT_SCOPE_SITE           = 0xc8\n\tRT_SCOPE_LINK           = 0xfd\n\tRT_SCOPE_HOST           = 0xfe\n\tRT_SCOPE_NOWHERE        = 0xff\n\tRT_TABLE_UNSPEC         = 0x0\n\tRT_TABLE_COMPAT         = 0xfc\n\tRT_TABLE_DEFAULT        = 0xfd\n\tRT_TABLE_MAIN           = 0xfe\n\tRT_TABLE_LOCAL          = 0xff\n\tRT_TABLE_MAX            = 0xffffffff\n\tRTA_UNSPEC              = 0x0\n\tRTA_DST                 = 0x1\n\tRTA_SRC                 = 0x2\n\tRTA_IIF                 = 0x3\n\tRTA_OIF                 = 0x4\n\tRTA_GATEWAY             = 0x5\n\tRTA_PRIORITY            = 0x6\n\tRTA_PREFSRC             = 0x7\n\tRTA_METRICS             = 0x8\n\tRTA_MULTIPATH           = 0x9\n\tRTA_FLOW                = 0xb\n\tRTA_CACHEINFO           = 0xc\n\tRTA_TABLE               = 0xf\n\tRTA_MARK                = 0x10\n\tRTA_MFC_STATS           = 0x11\n\tRTA_VIA                 = 0x12\n\tRTA_NEWDST              = 0x13\n\tRTA_PREF                = 0x14\n\tRTA_ENCAP_TYPE          = 0x15\n\tRTA_ENCAP               = 0x16\n\tRTA_EXPIRES             = 0x17\n\tRTA_PAD                 = 0x18\n\tRTA_UID                 = 0x19\n\tRTA_TTL_PROPAGATE       = 0x1a\n\tRTA_IP_PROTO            = 0x1b\n\tRTA_SPORT               = 0x1c\n\tRTA_DPORT               = 0x1d\n\tRTN_UNSPEC              = 0x0\n\tRTN_UNICAST             = 0x1\n\tRTN_LOCAL               = 0x2\n\tRTN_BROADCAST           = 0x3\n\tRTN_ANYCAST             = 0x4\n\tRTN_MULTICAST           = 0x5\n\tRTN_BLACKHOLE           = 0x6\n\tRTN_UNREACHABLE         = 0x7\n\tRTN_PROHIBIT            = 0x8\n\tRTN_THROW               = 0x9\n\tRTN_NAT                 = 0xa\n\tRTN_XRESOLVE            = 0xb\n\tRTNLGRP_NONE            = 0x0\n\tRTNLGRP_LINK            = 0x1\n\tRTNLGRP_NOTIFY          = 0x2\n\tRTNLGRP_NEIGH           = 0x3\n\tRTNLGRP_TC              = 0x4\n\tRTNLGRP_IPV4_IFADDR     = 0x5\n\tRTNLGRP_IPV4_MROUTE     = 0x6\n\tRTNLGRP_IPV4_ROUTE      = 0x7\n\tRTNLGRP_IPV4_RULE       = 0x8\n\tRTNLGRP_IPV6_IFADDR     = 0x9\n\tRTNLGRP_IPV6_MROUTE     = 0xa\n\tRTNLGRP_IPV6_ROUTE      = 0xb\n\tRTNLGRP_IPV6_IFINFO     = 0xc\n\tRTNLGRP_IPV6_PREFIX     = 0x12\n\tRTNLGRP_IPV6_RULE       = 0x13\n\tRTNLGRP_ND_USEROPT      = 0x14\n\tSizeofNlMsghdr          = 0x10\n\tSizeofNlMsgerr          = 0x14\n\tSizeofRtGenmsg          = 0x1\n\tSizeofNlAttr            = 0x4\n\tSizeofRtAttr            = 0x4\n\tSizeofIfInfomsg         = 0x10\n\tSizeofIfAddrmsg         = 0x8\n\tSizeofRtMsg             = 0xc\n\tSizeofRtNexthop         = 0x8\n\tSizeofNdUseroptmsg      = 0x10\n\tSizeofNdMsg             = 0xc\n)\n\ntype NlMsghdr struct {\n\tLen   uint32\n\tType  uint16\n\tFlags uint16\n\tSeq   uint32\n\tPid   uint32\n}\n\ntype NlMsgerr struct {\n\tError int32\n\tMsg   NlMsghdr\n}\n\ntype RtGenmsg struct {\n\tFamily uint8\n}\n\ntype NlAttr struct {\n\tLen  uint16\n\tType uint16\n}\n\ntype RtAttr struct {\n\tLen  uint16\n\tType uint16\n}\n\ntype IfInfomsg struct {\n\tFamily uint8\n\t_      uint8\n\tType   uint16\n\tIndex  int32\n\tFlags  uint32\n\tChange uint32\n}\n\ntype IfAddrmsg struct {\n\tFamily    uint8\n\tPrefixlen uint8\n\tFlags     uint8\n\tScope     uint8\n\tIndex     uint32\n}\n\ntype RtMsg struct {\n\tFamily   uint8\n\tDst_len  uint8\n\tSrc_len  uint8\n\tTos      uint8\n\tTable    uint8\n\tProtocol uint8\n\tScope    uint8\n\tType     uint8\n\tFlags    uint32\n}\n\ntype RtNexthop struct {\n\tLen     uint16\n\tFlags   uint8\n\tHops    uint8\n\tIfindex int32\n}\n\ntype NdUseroptmsg struct {\n\tFamily    uint8\n\tPad1      uint8\n\tOpts_len  uint16\n\tIfindex   int32\n\tIcmp_type uint8\n\tIcmp_code uint8\n\tPad2      uint16\n\tPad3      uint32\n}\n\ntype NdMsg struct {\n\tFamily  uint8\n\tPad1    uint8\n\tPad2    uint16\n\tIfindex int32\n\tState   uint16\n\tFlags   uint8\n\tType    uint8\n}\n\nconst (\n\tSizeofSockFilter = 0x8\n\tSizeofSockFprog  = 0x10\n)\n\ntype SockFilter struct {\n\tCode uint16\n\tJt   uint8\n\tJf   uint8\n\tK    uint32\n}\n\ntype SockFprog struct {\n\tLen    uint16\n\tFilter *SockFilter\n}\n\ntype InotifyEvent struct {\n\tWd     int32\n\tMask   uint32\n\tCookie uint32\n\tLen    uint32\n}\n\nconst SizeofInotifyEvent = 0x10\n\ntype PtraceRegs struct {\n\tGpr       [32]uint64\n\tNip       uint64\n\tMsr       uint64\n\tOrig_gpr3 uint64\n\tCtr       uint64\n\tLink      uint64\n\tXer       uint64\n\tCcr       uint64\n\tSofte     uint64\n\tTrap      uint64\n\tDar       uint64\n\tDsisr     uint64\n\tResult    uint64\n}\n\ntype FdSet struct {\n\tBits [16]int64\n}\n\ntype Sysinfo_t struct {\n\tUptime    int64\n\tLoads     [3]uint64\n\tTotalram  uint64\n\tFreeram   uint64\n\tSharedram uint64\n\tBufferram uint64\n\tTotalswap uint64\n\tFreeswap  uint64\n\tProcs     uint16\n\tPad       uint16\n\tTotalhigh uint64\n\tFreehigh  uint64\n\tUnit      uint32\n\t_         [0]uint8\n\t_         [4]byte\n}\n\ntype Utsname struct {\n\tSysname    [65]byte\n\tNodename   [65]byte\n\tRelease    [65]byte\n\tVersion    [65]byte\n\tMachine    [65]byte\n\tDomainname [65]byte\n}\n\ntype Ustat_t struct {\n\tTfree  int32\n\tTinode uint64\n\tFname  [6]uint8\n\tFpack  [6]uint8\n\t_      [4]byte\n}\n\ntype EpollEvent struct {\n\tEvents uint32\n\t_      int32\n\tFd     int32\n\tPad    int32\n}\n\nconst (\n\tAT_EMPTY_PATH   = 0x1000\n\tAT_FDCWD        = -0x64\n\tAT_NO_AUTOMOUNT = 0x800\n\tAT_REMOVEDIR    = 0x200\n\n\tAT_STATX_SYNC_AS_STAT = 0x0\n\tAT_STATX_FORCE_SYNC   = 0x2000\n\tAT_STATX_DONT_SYNC    = 0x4000\n\n\tAT_SYMLINK_FOLLOW   = 0x400\n\tAT_SYMLINK_NOFOLLOW = 0x100\n\n\tAT_EACCESS = 0x200\n)\n\ntype PollFd struct {\n\tFd      int32\n\tEvents  int16\n\tRevents int16\n}\n\nconst (\n\tPOLLIN    = 0x1\n\tPOLLPRI   = 0x2\n\tPOLLOUT   = 0x4\n\tPOLLRDHUP = 0x2000\n\tPOLLERR   = 0x8\n\tPOLLHUP   = 0x10\n\tPOLLNVAL  = 0x20\n)\n\ntype Sigset_t struct {\n\tVal [16]uint64\n}\n\nconst _C__NSIG = 0x41\n\ntype SignalfdSiginfo struct {\n\tSigno     uint32\n\tErrno     int32\n\tCode      int32\n\tPid       uint32\n\tUid       uint32\n\tFd        int32\n\tTid       uint32\n\tBand      uint32\n\tOverrun   uint32\n\tTrapno    uint32\n\tStatus    int32\n\tInt       int32\n\tPtr       uint64\n\tUtime     uint64\n\tStime     uint64\n\tAddr      uint64\n\tAddr_lsb  uint16\n\t_         uint16\n\tSyscall   int32\n\tCall_addr uint64\n\tArch      uint32\n\t_         [28]uint8\n}\n\nconst PERF_IOC_FLAG_GROUP = 0x1\n\ntype Termios struct {\n\tIflag  uint32\n\tOflag  uint32\n\tCflag  uint32\n\tLflag  uint32\n\tCc     [19]uint8\n\tLine   uint8\n\tIspeed uint32\n\tOspeed uint32\n}\n\ntype Winsize struct {\n\tRow    uint16\n\tCol    uint16\n\tXpixel uint16\n\tYpixel uint16\n}\n\ntype Taskstats struct {\n\tVersion                   uint16\n\tAc_exitcode               uint32\n\tAc_flag                   uint8\n\tAc_nice                   uint8\n\tCpu_count                 uint64\n\tCpu_delay_total           uint64\n\tBlkio_count               uint64\n\tBlkio_delay_total         uint64\n\tSwapin_count              uint64\n\tSwapin_delay_total        uint64\n\tCpu_run_real_total        uint64\n\tCpu_run_virtual_total     uint64\n\tAc_comm                   [32]uint8\n\tAc_sched                  uint8\n\tAc_pad                    [3]uint8\n\t_                         [4]byte\n\tAc_uid                    uint32\n\tAc_gid                    uint32\n\tAc_pid                    uint32\n\tAc_ppid                   uint32\n\tAc_btime                  uint32\n\tAc_etime                  uint64\n\tAc_utime                  uint64\n\tAc_stime                  uint64\n\tAc_minflt                 uint64\n\tAc_majflt                 uint64\n\tCoremem                   uint64\n\tVirtmem                   uint64\n\tHiwater_rss               uint64\n\tHiwater_vm                uint64\n\tRead_char                 uint64\n\tWrite_char                uint64\n\tRead_syscalls             uint64\n\tWrite_syscalls            uint64\n\tRead_bytes                uint64\n\tWrite_bytes               uint64\n\tCancelled_write_bytes     uint64\n\tNvcsw                     uint64\n\tNivcsw                    uint64\n\tAc_utimescaled            uint64\n\tAc_stimescaled            uint64\n\tCpu_scaled_run_real_total uint64\n\tFreepages_count           uint64\n\tFreepages_delay_total     uint64\n\tThrashing_count           uint64\n\tThrashing_delay_total     uint64\n}\n\nconst (\n\tTASKSTATS_CMD_UNSPEC                  = 0x0\n\tTASKSTATS_CMD_GET                     = 0x1\n\tTASKSTATS_CMD_NEW                     = 0x2\n\tTASKSTATS_TYPE_UNSPEC                 = 0x0\n\tTASKSTATS_TYPE_PID                    = 0x1\n\tTASKSTATS_TYPE_TGID                   = 0x2\n\tTASKSTATS_TYPE_STATS                  = 0x3\n\tTASKSTATS_TYPE_AGGR_PID               = 0x4\n\tTASKSTATS_TYPE_AGGR_TGID              = 0x5\n\tTASKSTATS_TYPE_NULL                   = 0x6\n\tTASKSTATS_CMD_ATTR_UNSPEC             = 0x0\n\tTASKSTATS_CMD_ATTR_PID                = 0x1\n\tTASKSTATS_CMD_ATTR_TGID               = 0x2\n\tTASKSTATS_CMD_ATTR_REGISTER_CPUMASK   = 0x3\n\tTASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4\n)\n\ntype CGroupStats struct {\n\tSleeping        uint64\n\tRunning         uint64\n\tStopped         uint64\n\tUninterruptible uint64\n\tIo_wait         uint64\n}\n\nconst (\n\tCGROUPSTATS_CMD_UNSPEC        = 0x3\n\tCGROUPSTATS_CMD_GET           = 0x4\n\tCGROUPSTATS_CMD_NEW           = 0x5\n\tCGROUPSTATS_TYPE_UNSPEC       = 0x0\n\tCGROUPSTATS_TYPE_CGROUP_STATS = 0x1\n\tCGROUPSTATS_CMD_ATTR_UNSPEC   = 0x0\n\tCGROUPSTATS_CMD_ATTR_FD       = 0x1\n)\n\ntype Genlmsghdr struct {\n\tCmd      uint8\n\tVersion  uint8\n\tReserved uint16\n}\n\nconst (\n\tCTRL_CMD_UNSPEC            = 0x0\n\tCTRL_CMD_NEWFAMILY         = 0x1\n\tCTRL_CMD_DELFAMILY         = 0x2\n\tCTRL_CMD_GETFAMILY         = 0x3\n\tCTRL_CMD_NEWOPS            = 0x4\n\tCTRL_CMD_DELOPS            = 0x5\n\tCTRL_CMD_GETOPS            = 0x6\n\tCTRL_CMD_NEWMCAST_GRP      = 0x7\n\tCTRL_CMD_DELMCAST_GRP      = 0x8\n\tCTRL_CMD_GETMCAST_GRP      = 0x9\n\tCTRL_ATTR_UNSPEC           = 0x0\n\tCTRL_ATTR_FAMILY_ID        = 0x1\n\tCTRL_ATTR_FAMILY_NAME      = 0x2\n\tCTRL_ATTR_VERSION          = 0x3\n\tCTRL_ATTR_HDRSIZE          = 0x4\n\tCTRL_ATTR_MAXATTR          = 0x5\n\tCTRL_ATTR_OPS              = 0x6\n\tCTRL_ATTR_MCAST_GROUPS     = 0x7\n\tCTRL_ATTR_OP_UNSPEC        = 0x0\n\tCTRL_ATTR_OP_ID            = 0x1\n\tCTRL_ATTR_OP_FLAGS         = 0x2\n\tCTRL_ATTR_MCAST_GRP_UNSPEC = 0x0\n\tCTRL_ATTR_MCAST_GRP_NAME   = 0x1\n\tCTRL_ATTR_MCAST_GRP_ID     = 0x2\n)\n\ntype cpuMask uint64\n\nconst (\n\t_CPU_SETSIZE = 0x400\n\t_NCPUBITS    = 0x40\n)\n\nconst (\n\tBDADDR_BREDR     = 0x0\n\tBDADDR_LE_PUBLIC = 0x1\n\tBDADDR_LE_RANDOM = 0x2\n)\n\ntype PerfEventAttr struct {\n\tType               uint32\n\tSize               uint32\n\tConfig             uint64\n\tSample             uint64\n\tSample_type        uint64\n\tRead_format        uint64\n\tBits               uint64\n\tWakeup             uint32\n\tBp_type            uint32\n\tExt1               uint64\n\tExt2               uint64\n\tBranch_sample_type uint64\n\tSample_regs_user   uint64\n\tSample_stack_user  uint32\n\tClockid            int32\n\tSample_regs_intr   uint64\n\tAux_watermark      uint32\n\tSample_max_stack   uint16\n\t_                  uint16\n}\n\ntype PerfEventMmapPage struct {\n\tVersion        uint32\n\tCompat_version uint32\n\tLock           uint32\n\tIndex          uint32\n\tOffset         int64\n\tTime_enabled   uint64\n\tTime_running   uint64\n\tCapabilities   uint64\n\tPmc_width      uint16\n\tTime_shift     uint16\n\tTime_mult      uint32\n\tTime_offset    uint64\n\tTime_zero      uint64\n\tSize           uint32\n\t_              [948]uint8\n\tData_head      uint64\n\tData_tail      uint64\n\tData_offset    uint64\n\tData_size      uint64\n\tAux_head       uint64\n\tAux_tail       uint64\n\tAux_offset     uint64\n\tAux_size       uint64\n}\n\nconst (\n\tPerfBitDisabled               uint64 = CBitFieldMaskBit0\n\tPerfBitInherit                       = CBitFieldMaskBit1\n\tPerfBitPinned                        = CBitFieldMaskBit2\n\tPerfBitExclusive                     = CBitFieldMaskBit3\n\tPerfBitExcludeUser                   = CBitFieldMaskBit4\n\tPerfBitExcludeKernel                 = CBitFieldMaskBit5\n\tPerfBitExcludeHv                     = CBitFieldMaskBit6\n\tPerfBitExcludeIdle                   = CBitFieldMaskBit7\n\tPerfBitMmap                          = CBitFieldMaskBit8\n\tPerfBitComm                          = CBitFieldMaskBit9\n\tPerfBitFreq                          = CBitFieldMaskBit10\n\tPerfBitInheritStat                   = CBitFieldMaskBit11\n\tPerfBitEnableOnExec                  = CBitFieldMaskBit12\n\tPerfBitTask                          = CBitFieldMaskBit13\n\tPerfBitWatermark                     = CBitFieldMaskBit14\n\tPerfBitPreciseIPBit1                 = CBitFieldMaskBit15\n\tPerfBitPreciseIPBit2                 = CBitFieldMaskBit16\n\tPerfBitMmapData                      = CBitFieldMaskBit17\n\tPerfBitSampleIDAll                   = CBitFieldMaskBit18\n\tPerfBitExcludeHost                   = CBitFieldMaskBit19\n\tPerfBitExcludeGuest                  = CBitFieldMaskBit20\n\tPerfBitExcludeCallchainKernel        = CBitFieldMaskBit21\n\tPerfBitExcludeCallchainUser          = CBitFieldMaskBit22\n\tPerfBitMmap2                         = CBitFieldMaskBit23\n\tPerfBitCommExec                      = CBitFieldMaskBit24\n\tPerfBitUseClockID                    = CBitFieldMaskBit25\n\tPerfBitContextSwitch                 = CBitFieldMaskBit26\n)\n\nconst (\n\tPERF_TYPE_HARDWARE   = 0x0\n\tPERF_TYPE_SOFTWARE   = 0x1\n\tPERF_TYPE_TRACEPOINT = 0x2\n\tPERF_TYPE_HW_CACHE   = 0x3\n\tPERF_TYPE_RAW        = 0x4\n\tPERF_TYPE_BREAKPOINT = 0x5\n\n\tPERF_COUNT_HW_CPU_CYCLES              = 0x0\n\tPERF_COUNT_HW_INSTRUCTIONS            = 0x1\n\tPERF_COUNT_HW_CACHE_REFERENCES        = 0x2\n\tPERF_COUNT_HW_CACHE_MISSES            = 0x3\n\tPERF_COUNT_HW_BRANCH_INSTRUCTIONS     = 0x4\n\tPERF_COUNT_HW_BRANCH_MISSES           = 0x5\n\tPERF_COUNT_HW_BUS_CYCLES              = 0x6\n\tPERF_COUNT_HW_STALLED_CYCLES_FRONTEND = 0x7\n\tPERF_COUNT_HW_STALLED_CYCLES_BACKEND  = 0x8\n\tPERF_COUNT_HW_REF_CPU_CYCLES          = 0x9\n\n\tPERF_COUNT_HW_CACHE_L1D  = 0x0\n\tPERF_COUNT_HW_CACHE_L1I  = 0x1\n\tPERF_COUNT_HW_CACHE_LL   = 0x2\n\tPERF_COUNT_HW_CACHE_DTLB = 0x3\n\tPERF_COUNT_HW_CACHE_ITLB = 0x4\n\tPERF_COUNT_HW_CACHE_BPU  = 0x5\n\tPERF_COUNT_HW_CACHE_NODE = 0x6\n\n\tPERF_COUNT_HW_CACHE_OP_READ     = 0x0\n\tPERF_COUNT_HW_CACHE_OP_WRITE    = 0x1\n\tPERF_COUNT_HW_CACHE_OP_PREFETCH = 0x2\n\n\tPERF_COUNT_HW_CACHE_RESULT_ACCESS = 0x0\n\tPERF_COUNT_HW_CACHE_RESULT_MISS   = 0x1\n\n\tPERF_COUNT_SW_CPU_CLOCK        = 0x0\n\tPERF_COUNT_SW_TASK_CLOCK       = 0x1\n\tPERF_COUNT_SW_PAGE_FAULTS      = 0x2\n\tPERF_COUNT_SW_CONTEXT_SWITCHES = 0x3\n\tPERF_COUNT_SW_CPU_MIGRATIONS   = 0x4\n\tPERF_COUNT_SW_PAGE_FAULTS_MIN  = 0x5\n\tPERF_COUNT_SW_PAGE_FAULTS_MAJ  = 0x6\n\tPERF_COUNT_SW_ALIGNMENT_FAULTS = 0x7\n\tPERF_COUNT_SW_EMULATION_FAULTS = 0x8\n\tPERF_COUNT_SW_DUMMY            = 0x9\n\tPERF_COUNT_SW_BPF_OUTPUT       = 0xa\n\n\tPERF_SAMPLE_IP           = 0x1\n\tPERF_SAMPLE_TID          = 0x2\n\tPERF_SAMPLE_TIME         = 0x4\n\tPERF_SAMPLE_ADDR         = 0x8\n\tPERF_SAMPLE_READ         = 0x10\n\tPERF_SAMPLE_CALLCHAIN    = 0x20\n\tPERF_SAMPLE_ID           = 0x40\n\tPERF_SAMPLE_CPU          = 0x80\n\tPERF_SAMPLE_PERIOD       = 0x100\n\tPERF_SAMPLE_STREAM_ID    = 0x200\n\tPERF_SAMPLE_RAW          = 0x400\n\tPERF_SAMPLE_BRANCH_STACK = 0x800\n\n\tPERF_SAMPLE_BRANCH_USER       = 0x1\n\tPERF_SAMPLE_BRANCH_KERNEL     = 0x2\n\tPERF_SAMPLE_BRANCH_HV         = 0x4\n\tPERF_SAMPLE_BRANCH_ANY        = 0x8\n\tPERF_SAMPLE_BRANCH_ANY_CALL   = 0x10\n\tPERF_SAMPLE_BRANCH_ANY_RETURN = 0x20\n\tPERF_SAMPLE_BRANCH_IND_CALL   = 0x40\n\tPERF_SAMPLE_BRANCH_ABORT_TX   = 0x80\n\tPERF_SAMPLE_BRANCH_IN_TX      = 0x100\n\tPERF_SAMPLE_BRANCH_NO_TX      = 0x200\n\tPERF_SAMPLE_BRANCH_COND       = 0x400\n\tPERF_SAMPLE_BRANCH_CALL_STACK = 0x800\n\tPERF_SAMPLE_BRANCH_IND_JUMP   = 0x1000\n\tPERF_SAMPLE_BRANCH_CALL       = 0x2000\n\tPERF_SAMPLE_BRANCH_NO_FLAGS   = 0x4000\n\tPERF_SAMPLE_BRANCH_NO_CYCLES  = 0x8000\n\tPERF_SAMPLE_BRANCH_TYPE_SAVE  = 0x10000\n\n\tPERF_FORMAT_TOTAL_TIME_ENABLED = 0x1\n\tPERF_FORMAT_TOTAL_TIME_RUNNING = 0x2\n\tPERF_FORMAT_ID                 = 0x4\n\tPERF_FORMAT_GROUP              = 0x8\n\n\tPERF_RECORD_MMAP            = 0x1\n\tPERF_RECORD_LOST            = 0x2\n\tPERF_RECORD_COMM            = 0x3\n\tPERF_RECORD_EXIT            = 0x4\n\tPERF_RECORD_THROTTLE        = 0x5\n\tPERF_RECORD_UNTHROTTLE      = 0x6\n\tPERF_RECORD_FORK            = 0x7\n\tPERF_RECORD_READ            = 0x8\n\tPERF_RECORD_SAMPLE          = 0x9\n\tPERF_RECORD_MMAP2           = 0xa\n\tPERF_RECORD_AUX             = 0xb\n\tPERF_RECORD_ITRACE_START    = 0xc\n\tPERF_RECORD_LOST_SAMPLES    = 0xd\n\tPERF_RECORD_SWITCH          = 0xe\n\tPERF_RECORD_SWITCH_CPU_WIDE = 0xf\n\tPERF_RECORD_NAMESPACES      = 0x10\n\n\tPERF_CONTEXT_HV     = -0x20\n\tPERF_CONTEXT_KERNEL = -0x80\n\tPERF_CONTEXT_USER   = -0x200\n\n\tPERF_CONTEXT_GUEST        = -0x800\n\tPERF_CONTEXT_GUEST_KERNEL = -0x880\n\tPERF_CONTEXT_GUEST_USER   = -0xa00\n\n\tPERF_FLAG_FD_NO_GROUP = 0x1\n\tPERF_FLAG_FD_OUTPUT   = 0x2\n\tPERF_FLAG_PID_CGROUP  = 0x4\n\tPERF_FLAG_FD_CLOEXEC  = 0x8\n)\n\nconst (\n\tCBitFieldMaskBit0  = 0x8000000000000000\n\tCBitFieldMaskBit1  = 0x4000000000000000\n\tCBitFieldMaskBit2  = 0x2000000000000000\n\tCBitFieldMaskBit3  = 0x1000000000000000\n\tCBitFieldMaskBit4  = 0x800000000000000\n\tCBitFieldMaskBit5  = 0x400000000000000\n\tCBitFieldMaskBit6  = 0x200000000000000\n\tCBitFieldMaskBit7  = 0x100000000000000\n\tCBitFieldMaskBit8  = 0x80000000000000\n\tCBitFieldMaskBit9  = 0x40000000000000\n\tCBitFieldMaskBit10 = 0x20000000000000\n\tCBitFieldMaskBit11 = 0x10000000000000\n\tCBitFieldMaskBit12 = 0x8000000000000\n\tCBitFieldMaskBit13 = 0x4000000000000\n\tCBitFieldMaskBit14 = 0x2000000000000\n\tCBitFieldMaskBit15 = 0x1000000000000\n\tCBitFieldMaskBit16 = 0x800000000000\n\tCBitFieldMaskBit17 = 0x400000000000\n\tCBitFieldMaskBit18 = 0x200000000000\n\tCBitFieldMaskBit19 = 0x100000000000\n\tCBitFieldMaskBit20 = 0x80000000000\n\tCBitFieldMaskBit21 = 0x40000000000\n\tCBitFieldMaskBit22 = 0x20000000000\n\tCBitFieldMaskBit23 = 0x10000000000\n\tCBitFieldMaskBit24 = 0x8000000000\n\tCBitFieldMaskBit25 = 0x4000000000\n\tCBitFieldMaskBit26 = 0x2000000000\n\tCBitFieldMaskBit27 = 0x1000000000\n\tCBitFieldMaskBit28 = 0x800000000\n\tCBitFieldMaskBit29 = 0x400000000\n\tCBitFieldMaskBit30 = 0x200000000\n\tCBitFieldMaskBit31 = 0x100000000\n\tCBitFieldMaskBit32 = 0x80000000\n\tCBitFieldMaskBit33 = 0x40000000\n\tCBitFieldMaskBit34 = 0x20000000\n\tCBitFieldMaskBit35 = 0x10000000\n\tCBitFieldMaskBit36 = 0x8000000\n\tCBitFieldMaskBit37 = 0x4000000\n\tCBitFieldMaskBit38 = 0x2000000\n\tCBitFieldMaskBit39 = 0x1000000\n\tCBitFieldMaskBit40 = 0x800000\n\tCBitFieldMaskBit41 = 0x400000\n\tCBitFieldMaskBit42 = 0x200000\n\tCBitFieldMaskBit43 = 0x100000\n\tCBitFieldMaskBit44 = 0x80000\n\tCBitFieldMaskBit45 = 0x40000\n\tCBitFieldMaskBit46 = 0x20000\n\tCBitFieldMaskBit47 = 0x10000\n\tCBitFieldMaskBit48 = 0x8000\n\tCBitFieldMaskBit49 = 0x4000\n\tCBitFieldMaskBit50 = 0x2000\n\tCBitFieldMaskBit51 = 0x1000\n\tCBitFieldMaskBit52 = 0x800\n\tCBitFieldMaskBit53 = 0x400\n\tCBitFieldMaskBit54 = 0x200\n\tCBitFieldMaskBit55 = 0x100\n\tCBitFieldMaskBit56 = 0x80\n\tCBitFieldMaskBit57 = 0x40\n\tCBitFieldMaskBit58 = 0x20\n\tCBitFieldMaskBit59 = 0x10\n\tCBitFieldMaskBit60 = 0x8\n\tCBitFieldMaskBit61 = 0x4\n\tCBitFieldMaskBit62 = 0x2\n\tCBitFieldMaskBit63 = 0x1\n)\n\ntype SockaddrStorage struct {\n\tFamily uint16\n\t_      [118]uint8\n\t_      uint64\n}\n\ntype TCPMD5Sig struct {\n\tAddr      SockaddrStorage\n\tFlags     uint8\n\tPrefixlen uint8\n\tKeylen    uint16\n\t_         uint32\n\tKey       [80]uint8\n}\n\ntype HDDriveCmdHdr struct {\n\tCommand uint8\n\tNumber  uint8\n\tFeature uint8\n\tCount   uint8\n}\n\ntype HDGeometry struct {\n\tHeads     uint8\n\tSectors   uint8\n\tCylinders uint16\n\tStart     uint64\n}\n\ntype HDDriveID struct {\n\tConfig         uint16\n\tCyls           uint16\n\tReserved2      uint16\n\tHeads          uint16\n\tTrack_bytes    uint16\n\tSector_bytes   uint16\n\tSectors        uint16\n\tVendor0        uint16\n\tVendor1        uint16\n\tVendor2        uint16\n\tSerial_no      [20]uint8\n\tBuf_type       uint16\n\tBuf_size       uint16\n\tEcc_bytes      uint16\n\tFw_rev         [8]uint8\n\tModel          [40]uint8\n\tMax_multsect   uint8\n\tVendor3        uint8\n\tDword_io       uint16\n\tVendor4        uint8\n\tCapability     uint8\n\tReserved50     uint16\n\tVendor5        uint8\n\tTPIO           uint8\n\tVendor6        uint8\n\tTDMA           uint8\n\tField_valid    uint16\n\tCur_cyls       uint16\n\tCur_heads      uint16\n\tCur_sectors    uint16\n\tCur_capacity0  uint16\n\tCur_capacity1  uint16\n\tMultsect       uint8\n\tMultsect_valid uint8\n\tLba_capacity   uint32\n\tDma_1word      uint16\n\tDma_mword      uint16\n\tEide_pio_modes uint16\n\tEide_dma_min   uint16\n\tEide_dma_time  uint16\n\tEide_pio       uint16\n\tEide_pio_iordy uint16\n\tWords69_70     [2]uint16\n\tWords71_74     [4]uint16\n\tQueue_depth    uint16\n\tWords76_79     [4]uint16\n\tMajor_rev_num  uint16\n\tMinor_rev_num  uint16\n\tCommand_set_1  uint16\n\tCommand_set_2  uint16\n\tCfsse          uint16\n\tCfs_enable_1   uint16\n\tCfs_enable_2   uint16\n\tCsf_default    uint16\n\tDma_ultra      uint16\n\tTrseuc         uint16\n\tTrsEuc         uint16\n\tCurAPMvalues   uint16\n\tMprc           uint16\n\tHw_config      uint16\n\tAcoustic       uint16\n\tMsrqs          uint16\n\tSxfert         uint16\n\tSal            uint16\n\tSpg            uint32\n\tLba_capacity_2 uint64\n\tWords104_125   [22]uint16\n\tLast_lun       uint16\n\tWord127        uint16\n\tDlf            uint16\n\tCsfo           uint16\n\tWords130_155   [26]uint16\n\tWord156        uint16\n\tWords157_159   [3]uint16\n\tCfa_power      uint16\n\tWords161_175   [15]uint16\n\tWords176_205   [30]uint16\n\tWords206_254   [49]uint16\n\tIntegrity_word uint16\n}\n\ntype Statfs_t struct {\n\tType    int64\n\tBsize   int64\n\tBlocks  uint64\n\tBfree   uint64\n\tBavail  uint64\n\tFiles   uint64\n\tFfree   uint64\n\tFsid    Fsid\n\tNamelen int64\n\tFrsize  int64\n\tFlags   int64\n\tSpare   [4]int64\n}\n\nconst (\n\tST_MANDLOCK    = 0x40\n\tST_NOATIME     = 0x400\n\tST_NODEV       = 0x4\n\tST_NODIRATIME  = 0x800\n\tST_NOEXEC      = 0x8\n\tST_NOSUID      = 0x2\n\tST_RDONLY      = 0x1\n\tST_RELATIME    = 0x1000\n\tST_SYNCHRONOUS = 0x10\n)\n\ntype TpacketHdr struct {\n\tStatus  uint64\n\tLen     uint32\n\tSnaplen uint32\n\tMac     uint16\n\tNet     uint16\n\tSec     uint32\n\tUsec    uint32\n\t_       [4]byte\n}\n\ntype Tpacket2Hdr struct {\n\tStatus    uint32\n\tLen       uint32\n\tSnaplen   uint32\n\tMac       uint16\n\tNet       uint16\n\tSec       uint32\n\tNsec      uint32\n\tVlan_tci  uint16\n\tVlan_tpid uint16\n\t_         [4]uint8\n}\n\ntype Tpacket3Hdr struct {\n\tNext_offset uint32\n\tSec         uint32\n\tNsec        uint32\n\tSnaplen     uint32\n\tLen         uint32\n\tStatus      uint32\n\tMac         uint16\n\tNet         uint16\n\tHv1         TpacketHdrVariant1\n\t_           [8]uint8\n}\n\ntype TpacketHdrVariant1 struct {\n\tRxhash    uint32\n\tVlan_tci  uint32\n\tVlan_tpid uint16\n\t_         uint16\n}\n\ntype TpacketBlockDesc struct {\n\tVersion uint32\n\tTo_priv uint32\n\tHdr     [40]byte\n}\n\ntype TpacketBDTS struct {\n\tSec  uint32\n\tUsec uint32\n}\n\ntype TpacketHdrV1 struct {\n\tBlock_status        uint32\n\tNum_pkts            uint32\n\tOffset_to_first_pkt uint32\n\tBlk_len             uint32\n\tSeq_num             uint64\n\tTs_first_pkt        TpacketBDTS\n\tTs_last_pkt         TpacketBDTS\n}\n\ntype TpacketReq struct {\n\tBlock_size uint32\n\tBlock_nr   uint32\n\tFrame_size uint32\n\tFrame_nr   uint32\n}\n\ntype TpacketReq3 struct {\n\tBlock_size       uint32\n\tBlock_nr         uint32\n\tFrame_size       uint32\n\tFrame_nr         uint32\n\tRetire_blk_tov   uint32\n\tSizeof_priv      uint32\n\tFeature_req_word uint32\n}\n\ntype TpacketStats struct {\n\tPackets uint32\n\tDrops   uint32\n}\n\ntype TpacketStatsV3 struct {\n\tPackets      uint32\n\tDrops        uint32\n\tFreeze_q_cnt uint32\n}\n\ntype TpacketAuxdata struct {\n\tStatus    uint32\n\tLen       uint32\n\tSnaplen   uint32\n\tMac       uint16\n\tNet       uint16\n\tVlan_tci  uint16\n\tVlan_tpid uint16\n}\n\nconst (\n\tTPACKET_V1 = 0x0\n\tTPACKET_V2 = 0x1\n\tTPACKET_V3 = 0x2\n)\n\nconst (\n\tSizeofTpacketHdr  = 0x20\n\tSizeofTpacket2Hdr = 0x20\n\tSizeofTpacket3Hdr = 0x30\n\n\tSizeofTpacketStats   = 0x8\n\tSizeofTpacketStatsV3 = 0xc\n)\n\nconst (\n\tNF_INET_PRE_ROUTING  = 0x0\n\tNF_INET_LOCAL_IN     = 0x1\n\tNF_INET_FORWARD      = 0x2\n\tNF_INET_LOCAL_OUT    = 0x3\n\tNF_INET_POST_ROUTING = 0x4\n\tNF_INET_NUMHOOKS     = 0x5\n)\n\nconst (\n\tNF_NETDEV_INGRESS  = 0x0\n\tNF_NETDEV_NUMHOOKS = 0x1\n)\n\nconst (\n\tNFPROTO_UNSPEC   = 0x0\n\tNFPROTO_INET     = 0x1\n\tNFPROTO_IPV4     = 0x2\n\tNFPROTO_ARP      = 0x3\n\tNFPROTO_NETDEV   = 0x5\n\tNFPROTO_BRIDGE   = 0x7\n\tNFPROTO_IPV6     = 0xa\n\tNFPROTO_DECNET   = 0xc\n\tNFPROTO_NUMPROTO = 0xd\n)\n\ntype Nfgenmsg struct {\n\tNfgen_family uint8\n\tVersion      uint8\n\tRes_id       uint16\n}\n\nconst (\n\tNFNL_BATCH_UNSPEC = 0x0\n\tNFNL_BATCH_GENID  = 0x1\n)\n\nconst (\n\tNFT_REG_VERDICT                   = 0x0\n\tNFT_REG_1                         = 0x1\n\tNFT_REG_2                         = 0x2\n\tNFT_REG_3                         = 0x3\n\tNFT_REG_4                         = 0x4\n\tNFT_REG32_00                      = 0x8\n\tNFT_REG32_01                      = 0x9\n\tNFT_REG32_02                      = 0xa\n\tNFT_REG32_03                      = 0xb\n\tNFT_REG32_04                      = 0xc\n\tNFT_REG32_05                      = 0xd\n\tNFT_REG32_06                      = 0xe\n\tNFT_REG32_07                      = 0xf\n\tNFT_REG32_08                      = 0x10\n\tNFT_REG32_09                      = 0x11\n\tNFT_REG32_10                      = 0x12\n\tNFT_REG32_11                      = 0x13\n\tNFT_REG32_12                      = 0x14\n\tNFT_REG32_13                      = 0x15\n\tNFT_REG32_14                      = 0x16\n\tNFT_REG32_15                      = 0x17\n\tNFT_CONTINUE                      = -0x1\n\tNFT_BREAK                         = -0x2\n\tNFT_JUMP                          = -0x3\n\tNFT_GOTO                          = -0x4\n\tNFT_RETURN                        = -0x5\n\tNFT_MSG_NEWTABLE                  = 0x0\n\tNFT_MSG_GETTABLE                  = 0x1\n\tNFT_MSG_DELTABLE                  = 0x2\n\tNFT_MSG_NEWCHAIN                  = 0x3\n\tNFT_MSG_GETCHAIN                  = 0x4\n\tNFT_MSG_DELCHAIN                  = 0x5\n\tNFT_MSG_NEWRULE                   = 0x6\n\tNFT_MSG_GETRULE                   = 0x7\n\tNFT_MSG_DELRULE                   = 0x8\n\tNFT_MSG_NEWSET                    = 0x9\n\tNFT_MSG_GETSET                    = 0xa\n\tNFT_MSG_DELSET                    = 0xb\n\tNFT_MSG_NEWSETELEM                = 0xc\n\tNFT_MSG_GETSETELEM                = 0xd\n\tNFT_MSG_DELSETELEM                = 0xe\n\tNFT_MSG_NEWGEN                    = 0xf\n\tNFT_MSG_GETGEN                    = 0x10\n\tNFT_MSG_TRACE                     = 0x11\n\tNFT_MSG_NEWOBJ                    = 0x12\n\tNFT_MSG_GETOBJ                    = 0x13\n\tNFT_MSG_DELOBJ                    = 0x14\n\tNFT_MSG_GETOBJ_RESET              = 0x15\n\tNFT_MSG_MAX                       = 0x19\n\tNFTA_LIST_UNPEC                   = 0x0\n\tNFTA_LIST_ELEM                    = 0x1\n\tNFTA_HOOK_UNSPEC                  = 0x0\n\tNFTA_HOOK_HOOKNUM                 = 0x1\n\tNFTA_HOOK_PRIORITY                = 0x2\n\tNFTA_HOOK_DEV                     = 0x3\n\tNFT_TABLE_F_DORMANT               = 0x1\n\tNFTA_TABLE_UNSPEC                 = 0x0\n\tNFTA_TABLE_NAME                   = 0x1\n\tNFTA_TABLE_FLAGS                  = 0x2\n\tNFTA_TABLE_USE                    = 0x3\n\tNFTA_CHAIN_UNSPEC                 = 0x0\n\tNFTA_CHAIN_TABLE                  = 0x1\n\tNFTA_CHAIN_HANDLE                 = 0x2\n\tNFTA_CHAIN_NAME                   = 0x3\n\tNFTA_CHAIN_HOOK                   = 0x4\n\tNFTA_CHAIN_POLICY                 = 0x5\n\tNFTA_CHAIN_USE                    = 0x6\n\tNFTA_CHAIN_TYPE                   = 0x7\n\tNFTA_CHAIN_COUNTERS               = 0x8\n\tNFTA_CHAIN_PAD                    = 0x9\n\tNFTA_RULE_UNSPEC                  = 0x0\n\tNFTA_RULE_TABLE                   = 0x1\n\tNFTA_RULE_CHAIN                   = 0x2\n\tNFTA_RULE_HANDLE                  = 0x3\n\tNFTA_RULE_EXPRESSIONS             = 0x4\n\tNFTA_RULE_COMPAT                  = 0x5\n\tNFTA_RULE_POSITION                = 0x6\n\tNFTA_RULE_USERDATA                = 0x7\n\tNFTA_RULE_PAD                     = 0x8\n\tNFTA_RULE_ID                      = 0x9\n\tNFT_RULE_COMPAT_F_INV             = 0x2\n\tNFT_RULE_COMPAT_F_MASK            = 0x2\n\tNFTA_RULE_COMPAT_UNSPEC           = 0x0\n\tNFTA_RULE_COMPAT_PROTO            = 0x1\n\tNFTA_RULE_COMPAT_FLAGS            = 0x2\n\tNFT_SET_ANONYMOUS                 = 0x1\n\tNFT_SET_CONSTANT                  = 0x2\n\tNFT_SET_INTERVAL                  = 0x4\n\tNFT_SET_MAP                       = 0x8\n\tNFT_SET_TIMEOUT                   = 0x10\n\tNFT_SET_EVAL                      = 0x20\n\tNFT_SET_OBJECT                    = 0x40\n\tNFT_SET_POL_PERFORMANCE           = 0x0\n\tNFT_SET_POL_MEMORY                = 0x1\n\tNFTA_SET_DESC_UNSPEC              = 0x0\n\tNFTA_SET_DESC_SIZE                = 0x1\n\tNFTA_SET_UNSPEC                   = 0x0\n\tNFTA_SET_TABLE                    = 0x1\n\tNFTA_SET_NAME                     = 0x2\n\tNFTA_SET_FLAGS                    = 0x3\n\tNFTA_SET_KEY_TYPE                 = 0x4\n\tNFTA_SET_KEY_LEN                  = 0x5\n\tNFTA_SET_DATA_TYPE                = 0x6\n\tNFTA_SET_DATA_LEN                 = 0x7\n\tNFTA_SET_POLICY                   = 0x8\n\tNFTA_SET_DESC                     = 0x9\n\tNFTA_SET_ID                       = 0xa\n\tNFTA_SET_TIMEOUT                  = 0xb\n\tNFTA_SET_GC_INTERVAL              = 0xc\n\tNFTA_SET_USERDATA                 = 0xd\n\tNFTA_SET_PAD                      = 0xe\n\tNFTA_SET_OBJ_TYPE                 = 0xf\n\tNFT_SET_ELEM_INTERVAL_END         = 0x1\n\tNFTA_SET_ELEM_UNSPEC              = 0x0\n\tNFTA_SET_ELEM_KEY                 = 0x1\n\tNFTA_SET_ELEM_DATA                = 0x2\n\tNFTA_SET_ELEM_FLAGS               = 0x3\n\tNFTA_SET_ELEM_TIMEOUT             = 0x4\n\tNFTA_SET_ELEM_EXPIRATION          = 0x5\n\tNFTA_SET_ELEM_USERDATA            = 0x6\n\tNFTA_SET_ELEM_EXPR                = 0x7\n\tNFTA_SET_ELEM_PAD                 = 0x8\n\tNFTA_SET_ELEM_OBJREF              = 0x9\n\tNFTA_SET_ELEM_LIST_UNSPEC         = 0x0\n\tNFTA_SET_ELEM_LIST_TABLE          = 0x1\n\tNFTA_SET_ELEM_LIST_SET            = 0x2\n\tNFTA_SET_ELEM_LIST_ELEMENTS       = 0x3\n\tNFTA_SET_ELEM_LIST_SET_ID         = 0x4\n\tNFT_DATA_VALUE                    = 0x0\n\tNFT_DATA_VERDICT                  = 0xffffff00\n\tNFTA_DATA_UNSPEC                  = 0x0\n\tNFTA_DATA_VALUE                   = 0x1\n\tNFTA_DATA_VERDICT                 = 0x2\n\tNFTA_VERDICT_UNSPEC               = 0x0\n\tNFTA_VERDICT_CODE                 = 0x1\n\tNFTA_VERDICT_CHAIN                = 0x2\n\tNFTA_EXPR_UNSPEC                  = 0x0\n\tNFTA_EXPR_NAME                    = 0x1\n\tNFTA_EXPR_DATA                    = 0x2\n\tNFTA_IMMEDIATE_UNSPEC             = 0x0\n\tNFTA_IMMEDIATE_DREG               = 0x1\n\tNFTA_IMMEDIATE_DATA               = 0x2\n\tNFTA_BITWISE_UNSPEC               = 0x0\n\tNFTA_BITWISE_SREG                 = 0x1\n\tNFTA_BITWISE_DREG                 = 0x2\n\tNFTA_BITWISE_LEN                  = 0x3\n\tNFTA_BITWISE_MASK                 = 0x4\n\tNFTA_BITWISE_XOR                  = 0x5\n\tNFT_BYTEORDER_NTOH                = 0x0\n\tNFT_BYTEORDER_HTON                = 0x1\n\tNFTA_BYTEORDER_UNSPEC             = 0x0\n\tNFTA_BYTEORDER_SREG               = 0x1\n\tNFTA_BYTEORDER_DREG               = 0x2\n\tNFTA_BYTEORDER_OP                 = 0x3\n\tNFTA_BYTEORDER_LEN                = 0x4\n\tNFTA_BYTEORDER_SIZE               = 0x5\n\tNFT_CMP_EQ                        = 0x0\n\tNFT_CMP_NEQ                       = 0x1\n\tNFT_CMP_LT                        = 0x2\n\tNFT_CMP_LTE                       = 0x3\n\tNFT_CMP_GT                        = 0x4\n\tNFT_CMP_GTE                       = 0x5\n\tNFTA_CMP_UNSPEC                   = 0x0\n\tNFTA_CMP_SREG                     = 0x1\n\tNFTA_CMP_OP                       = 0x2\n\tNFTA_CMP_DATA                     = 0x3\n\tNFT_RANGE_EQ                      = 0x0\n\tNFT_RANGE_NEQ                     = 0x1\n\tNFTA_RANGE_UNSPEC                 = 0x0\n\tNFTA_RANGE_SREG                   = 0x1\n\tNFTA_RANGE_OP                     = 0x2\n\tNFTA_RANGE_FROM_DATA              = 0x3\n\tNFTA_RANGE_TO_DATA                = 0x4\n\tNFT_LOOKUP_F_INV                  = 0x1\n\tNFTA_LOOKUP_UNSPEC                = 0x0\n\tNFTA_LOOKUP_SET                   = 0x1\n\tNFTA_LOOKUP_SREG                  = 0x2\n\tNFTA_LOOKUP_DREG                  = 0x3\n\tNFTA_LOOKUP_SET_ID                = 0x4\n\tNFTA_LOOKUP_FLAGS                 = 0x5\n\tNFT_DYNSET_OP_ADD                 = 0x0\n\tNFT_DYNSET_OP_UPDATE              = 0x1\n\tNFT_DYNSET_F_INV                  = 0x1\n\tNFTA_DYNSET_UNSPEC                = 0x0\n\tNFTA_DYNSET_SET_NAME              = 0x1\n\tNFTA_DYNSET_SET_ID                = 0x2\n\tNFTA_DYNSET_OP                    = 0x3\n\tNFTA_DYNSET_SREG_KEY              = 0x4\n\tNFTA_DYNSET_SREG_DATA             = 0x5\n\tNFTA_DYNSET_TIMEOUT               = 0x6\n\tNFTA_DYNSET_EXPR                  = 0x7\n\tNFTA_DYNSET_PAD                   = 0x8\n\tNFTA_DYNSET_FLAGS                 = 0x9\n\tNFT_PAYLOAD_LL_HEADER             = 0x0\n\tNFT_PAYLOAD_NETWORK_HEADER        = 0x1\n\tNFT_PAYLOAD_TRANSPORT_HEADER      = 0x2\n\tNFT_PAYLOAD_CSUM_NONE             = 0x0\n\tNFT_PAYLOAD_CSUM_INET             = 0x1\n\tNFT_PAYLOAD_L4CSUM_PSEUDOHDR      = 0x1\n\tNFTA_PAYLOAD_UNSPEC               = 0x0\n\tNFTA_PAYLOAD_DREG                 = 0x1\n\tNFTA_PAYLOAD_BASE                 = 0x2\n\tNFTA_PAYLOAD_OFFSET               = 0x3\n\tNFTA_PAYLOAD_LEN                  = 0x4\n\tNFTA_PAYLOAD_SREG                 = 0x5\n\tNFTA_PAYLOAD_CSUM_TYPE            = 0x6\n\tNFTA_PAYLOAD_CSUM_OFFSET          = 0x7\n\tNFTA_PAYLOAD_CSUM_FLAGS           = 0x8\n\tNFT_EXTHDR_F_PRESENT              = 0x1\n\tNFT_EXTHDR_OP_IPV6                = 0x0\n\tNFT_EXTHDR_OP_TCPOPT              = 0x1\n\tNFTA_EXTHDR_UNSPEC                = 0x0\n\tNFTA_EXTHDR_DREG                  = 0x1\n\tNFTA_EXTHDR_TYPE                  = 0x2\n\tNFTA_EXTHDR_OFFSET                = 0x3\n\tNFTA_EXTHDR_LEN                   = 0x4\n\tNFTA_EXTHDR_FLAGS                 = 0x5\n\tNFTA_EXTHDR_OP                    = 0x6\n\tNFTA_EXTHDR_SREG                  = 0x7\n\tNFT_META_LEN                      = 0x0\n\tNFT_META_PROTOCOL                 = 0x1\n\tNFT_META_PRIORITY                 = 0x2\n\tNFT_META_MARK                     = 0x3\n\tNFT_META_IIF                      = 0x4\n\tNFT_META_OIF                      = 0x5\n\tNFT_META_IIFNAME                  = 0x6\n\tNFT_META_OIFNAME                  = 0x7\n\tNFT_META_IIFTYPE                  = 0x8\n\tNFT_META_OIFTYPE                  = 0x9\n\tNFT_META_SKUID                    = 0xa\n\tNFT_META_SKGID                    = 0xb\n\tNFT_META_NFTRACE                  = 0xc\n\tNFT_META_RTCLASSID                = 0xd\n\tNFT_META_SECMARK                  = 0xe\n\tNFT_META_NFPROTO                  = 0xf\n\tNFT_META_L4PROTO                  = 0x10\n\tNFT_META_BRI_IIFNAME              = 0x11\n\tNFT_META_BRI_OIFNAME              = 0x12\n\tNFT_META_PKTTYPE                  = 0x13\n\tNFT_META_CPU                      = 0x14\n\tNFT_META_IIFGROUP                 = 0x15\n\tNFT_META_OIFGROUP                 = 0x16\n\tNFT_META_CGROUP                   = 0x17\n\tNFT_META_PRANDOM                  = 0x18\n\tNFT_RT_CLASSID                    = 0x0\n\tNFT_RT_NEXTHOP4                   = 0x1\n\tNFT_RT_NEXTHOP6                   = 0x2\n\tNFT_RT_TCPMSS                     = 0x3\n\tNFT_HASH_JENKINS                  = 0x0\n\tNFT_HASH_SYM                      = 0x1\n\tNFTA_HASH_UNSPEC                  = 0x0\n\tNFTA_HASH_SREG                    = 0x1\n\tNFTA_HASH_DREG                    = 0x2\n\tNFTA_HASH_LEN                     = 0x3\n\tNFTA_HASH_MODULUS                 = 0x4\n\tNFTA_HASH_SEED                    = 0x5\n\tNFTA_HASH_OFFSET                  = 0x6\n\tNFTA_HASH_TYPE                    = 0x7\n\tNFTA_META_UNSPEC                  = 0x0\n\tNFTA_META_DREG                    = 0x1\n\tNFTA_META_KEY                     = 0x2\n\tNFTA_META_SREG                    = 0x3\n\tNFTA_RT_UNSPEC                    = 0x0\n\tNFTA_RT_DREG                      = 0x1\n\tNFTA_RT_KEY                       = 0x2\n\tNFT_CT_STATE                      = 0x0\n\tNFT_CT_DIRECTION                  = 0x1\n\tNFT_CT_STATUS                     = 0x2\n\tNFT_CT_MARK                       = 0x3\n\tNFT_CT_SECMARK                    = 0x4\n\tNFT_CT_EXPIRATION                 = 0x5\n\tNFT_CT_HELPER                     = 0x6\n\tNFT_CT_L3PROTOCOL                 = 0x7\n\tNFT_CT_SRC                        = 0x8\n\tNFT_CT_DST                        = 0x9\n\tNFT_CT_PROTOCOL                   = 0xa\n\tNFT_CT_PROTO_SRC                  = 0xb\n\tNFT_CT_PROTO_DST                  = 0xc\n\tNFT_CT_LABELS                     = 0xd\n\tNFT_CT_PKTS                       = 0xe\n\tNFT_CT_BYTES                      = 0xf\n\tNFT_CT_AVGPKT                     = 0x10\n\tNFT_CT_ZONE                       = 0x11\n\tNFT_CT_EVENTMASK                  = 0x12\n\tNFTA_CT_UNSPEC                    = 0x0\n\tNFTA_CT_DREG                      = 0x1\n\tNFTA_CT_KEY                       = 0x2\n\tNFTA_CT_DIRECTION                 = 0x3\n\tNFTA_CT_SREG                      = 0x4\n\tNFT_LIMIT_PKTS                    = 0x0\n\tNFT_LIMIT_PKT_BYTES               = 0x1\n\tNFT_LIMIT_F_INV                   = 0x1\n\tNFTA_LIMIT_UNSPEC                 = 0x0\n\tNFTA_LIMIT_RATE                   = 0x1\n\tNFTA_LIMIT_UNIT                   = 0x2\n\tNFTA_LIMIT_BURST                  = 0x3\n\tNFTA_LIMIT_TYPE                   = 0x4\n\tNFTA_LIMIT_FLAGS                  = 0x5\n\tNFTA_LIMIT_PAD                    = 0x6\n\tNFTA_COUNTER_UNSPEC               = 0x0\n\tNFTA_COUNTER_BYTES                = 0x1\n\tNFTA_COUNTER_PACKETS              = 0x2\n\tNFTA_COUNTER_PAD                  = 0x3\n\tNFTA_LOG_UNSPEC                   = 0x0\n\tNFTA_LOG_GROUP                    = 0x1\n\tNFTA_LOG_PREFIX                   = 0x2\n\tNFTA_LOG_SNAPLEN                  = 0x3\n\tNFTA_LOG_QTHRESHOLD               = 0x4\n\tNFTA_LOG_LEVEL                    = 0x5\n\tNFTA_LOG_FLAGS                    = 0x6\n\tNFTA_QUEUE_UNSPEC                 = 0x0\n\tNFTA_QUEUE_NUM                    = 0x1\n\tNFTA_QUEUE_TOTAL                  = 0x2\n\tNFTA_QUEUE_FLAGS                  = 0x3\n\tNFTA_QUEUE_SREG_QNUM              = 0x4\n\tNFT_QUOTA_F_INV                   = 0x1\n\tNFT_QUOTA_F_DEPLETED              = 0x2\n\tNFTA_QUOTA_UNSPEC                 = 0x0\n\tNFTA_QUOTA_BYTES                  = 0x1\n\tNFTA_QUOTA_FLAGS                  = 0x2\n\tNFTA_QUOTA_PAD                    = 0x3\n\tNFTA_QUOTA_CONSUMED               = 0x4\n\tNFT_REJECT_ICMP_UNREACH           = 0x0\n\tNFT_REJECT_TCP_RST                = 0x1\n\tNFT_REJECT_ICMPX_UNREACH          = 0x2\n\tNFT_REJECT_ICMPX_NO_ROUTE         = 0x0\n\tNFT_REJECT_ICMPX_PORT_UNREACH     = 0x1\n\tNFT_REJECT_ICMPX_HOST_UNREACH     = 0x2\n\tNFT_REJECT_ICMPX_ADMIN_PROHIBITED = 0x3\n\tNFTA_REJECT_UNSPEC                = 0x0\n\tNFTA_REJECT_TYPE                  = 0x1\n\tNFTA_REJECT_ICMP_CODE             = 0x2\n\tNFT_NAT_SNAT                      = 0x0\n\tNFT_NAT_DNAT                      = 0x1\n\tNFTA_NAT_UNSPEC                   = 0x0\n\tNFTA_NAT_TYPE                     = 0x1\n\tNFTA_NAT_FAMILY                   = 0x2\n\tNFTA_NAT_REG_ADDR_MIN             = 0x3\n\tNFTA_NAT_REG_ADDR_MAX             = 0x4\n\tNFTA_NAT_REG_PROTO_MIN            = 0x5\n\tNFTA_NAT_REG_PROTO_MAX            = 0x6\n\tNFTA_NAT_FLAGS                    = 0x7\n\tNFTA_MASQ_UNSPEC                  = 0x0\n\tNFTA_MASQ_FLAGS                   = 0x1\n\tNFTA_MASQ_REG_PROTO_MIN           = 0x2\n\tNFTA_MASQ_REG_PROTO_MAX           = 0x3\n\tNFTA_REDIR_UNSPEC                 = 0x0\n\tNFTA_REDIR_REG_PROTO_MIN          = 0x1\n\tNFTA_REDIR_REG_PROTO_MAX          = 0x2\n\tNFTA_REDIR_FLAGS                  = 0x3\n\tNFTA_DUP_UNSPEC                   = 0x0\n\tNFTA_DUP_SREG_ADDR                = 0x1\n\tNFTA_DUP_SREG_DEV                 = 0x2\n\tNFTA_FWD_UNSPEC                   = 0x0\n\tNFTA_FWD_SREG_DEV                 = 0x1\n\tNFTA_OBJREF_UNSPEC                = 0x0\n\tNFTA_OBJREF_IMM_TYPE              = 0x1\n\tNFTA_OBJREF_IMM_NAME              = 0x2\n\tNFTA_OBJREF_SET_SREG              = 0x3\n\tNFTA_OBJREF_SET_NAME              = 0x4\n\tNFTA_OBJREF_SET_ID                = 0x5\n\tNFTA_GEN_UNSPEC                   = 0x0\n\tNFTA_GEN_ID                       = 0x1\n\tNFTA_GEN_PROC_PID                 = 0x2\n\tNFTA_GEN_PROC_NAME                = 0x3\n\tNFTA_FIB_UNSPEC                   = 0x0\n\tNFTA_FIB_DREG                     = 0x1\n\tNFTA_FIB_RESULT                   = 0x2\n\tNFTA_FIB_FLAGS                    = 0x3\n\tNFT_FIB_RESULT_UNSPEC             = 0x0\n\tNFT_FIB_RESULT_OIF                = 0x1\n\tNFT_FIB_RESULT_OIFNAME            = 0x2\n\tNFT_FIB_RESULT_ADDRTYPE           = 0x3\n\tNFTA_FIB_F_SADDR                  = 0x1\n\tNFTA_FIB_F_DADDR                  = 0x2\n\tNFTA_FIB_F_MARK                   = 0x4\n\tNFTA_FIB_F_IIF                    = 0x8\n\tNFTA_FIB_F_OIF                    = 0x10\n\tNFTA_FIB_F_PRESENT                = 0x20\n\tNFTA_CT_HELPER_UNSPEC             = 0x0\n\tNFTA_CT_HELPER_NAME               = 0x1\n\tNFTA_CT_HELPER_L3PROTO            = 0x2\n\tNFTA_CT_HELPER_L4PROTO            = 0x3\n\tNFTA_OBJ_UNSPEC                   = 0x0\n\tNFTA_OBJ_TABLE                    = 0x1\n\tNFTA_OBJ_NAME                     = 0x2\n\tNFTA_OBJ_TYPE                     = 0x3\n\tNFTA_OBJ_DATA                     = 0x4\n\tNFTA_OBJ_USE                      = 0x5\n\tNFTA_TRACE_UNSPEC                 = 0x0\n\tNFTA_TRACE_TABLE                  = 0x1\n\tNFTA_TRACE_CHAIN                  = 0x2\n\tNFTA_TRACE_RULE_HANDLE            = 0x3\n\tNFTA_TRACE_TYPE                   = 0x4\n\tNFTA_TRACE_VERDICT                = 0x5\n\tNFTA_TRACE_ID                     = 0x6\n\tNFTA_TRACE_LL_HEADER              = 0x7\n\tNFTA_TRACE_NETWORK_HEADER         = 0x8\n\tNFTA_TRACE_TRANSPORT_HEADER       = 0x9\n\tNFTA_TRACE_IIF                    = 0xa\n\tNFTA_TRACE_IIFTYPE                = 0xb\n\tNFTA_TRACE_OIF                    = 0xc\n\tNFTA_TRACE_OIFTYPE                = 0xd\n\tNFTA_TRACE_MARK                   = 0xe\n\tNFTA_TRACE_NFPROTO                = 0xf\n\tNFTA_TRACE_POLICY                 = 0x10\n\tNFTA_TRACE_PAD                    = 0x11\n\tNFT_TRACETYPE_UNSPEC              = 0x0\n\tNFT_TRACETYPE_POLICY              = 0x1\n\tNFT_TRACETYPE_RETURN              = 0x2\n\tNFT_TRACETYPE_RULE                = 0x3\n\tNFTA_NG_UNSPEC                    = 0x0\n\tNFTA_NG_DREG                      = 0x1\n\tNFTA_NG_MODULUS                   = 0x2\n\tNFTA_NG_TYPE                      = 0x3\n\tNFTA_NG_OFFSET                    = 0x4\n\tNFT_NG_INCREMENTAL                = 0x0\n\tNFT_NG_RANDOM                     = 0x1\n)\n\ntype RTCTime struct {\n\tSec   int32\n\tMin   int32\n\tHour  int32\n\tMday  int32\n\tMon   int32\n\tYear  int32\n\tWday  int32\n\tYday  int32\n\tIsdst int32\n}\n\ntype RTCWkAlrm struct {\n\tEnabled uint8\n\tPending uint8\n\tTime    RTCTime\n}\n\ntype RTCPLLInfo struct {\n\tCtrl    int32\n\tValue   int32\n\tMax     int32\n\tMin     int32\n\tPosmult int32\n\tNegmult int32\n\tClock   int64\n}\n\ntype BlkpgIoctlArg struct {\n\tOp      int32\n\tFlags   int32\n\tDatalen int32\n\tData    *byte\n}\n\ntype BlkpgPartition struct {\n\tStart   int64\n\tLength  int64\n\tPno     int32\n\tDevname [64]uint8\n\tVolname [64]uint8\n\t_       [4]byte\n}\n\nconst (\n\tBLKPG                  = 0x20001269\n\tBLKPG_ADD_PARTITION    = 0x1\n\tBLKPG_DEL_PARTITION    = 0x2\n\tBLKPG_RESIZE_PARTITION = 0x3\n)\n\nconst (\n\tNETNSA_NONE = 0x0\n\tNETNSA_NSID = 0x1\n\tNETNSA_PID  = 0x2\n\tNETNSA_FD   = 0x3\n)\n\ntype XDPRingOffset struct {\n\tProducer uint64\n\tConsumer uint64\n\tDesc     uint64\n}\n\ntype XDPMmapOffsets struct {\n\tRx XDPRingOffset\n\tTx XDPRingOffset\n\tFr XDPRingOffset\n\tCr XDPRingOffset\n}\n\ntype XDPUmemReg struct {\n\tAddr     uint64\n\tLen      uint64\n\tSize     uint32\n\tHeadroom uint32\n}\n\ntype XDPStatistics struct {\n\tRx_dropped       uint64\n\tRx_invalid_descs uint64\n\tTx_invalid_descs uint64\n}\n\ntype XDPDesc struct {\n\tAddr    uint64\n\tLen     uint32\n\tOptions uint32\n}\n\nconst (\n\tNCSI_CMD_UNSPEC                 = 0x0\n\tNCSI_CMD_PKG_INFO               = 0x1\n\tNCSI_CMD_SET_INTERFACE          = 0x2\n\tNCSI_CMD_CLEAR_INTERFACE        = 0x3\n\tNCSI_ATTR_UNSPEC                = 0x0\n\tNCSI_ATTR_IFINDEX               = 0x1\n\tNCSI_ATTR_PACKAGE_LIST          = 0x2\n\tNCSI_ATTR_PACKAGE_ID            = 0x3\n\tNCSI_ATTR_CHANNEL_ID            = 0x4\n\tNCSI_PKG_ATTR_UNSPEC            = 0x0\n\tNCSI_PKG_ATTR                   = 0x1\n\tNCSI_PKG_ATTR_ID                = 0x2\n\tNCSI_PKG_ATTR_FORCED            = 0x3\n\tNCSI_PKG_ATTR_CHANNEL_LIST      = 0x4\n\tNCSI_CHANNEL_ATTR_UNSPEC        = 0x0\n\tNCSI_CHANNEL_ATTR               = 0x1\n\tNCSI_CHANNEL_ATTR_ID            = 0x2\n\tNCSI_CHANNEL_ATTR_VERSION_MAJOR = 0x3\n\tNCSI_CHANNEL_ATTR_VERSION_MINOR = 0x4\n\tNCSI_CHANNEL_ATTR_VERSION_STR   = 0x5\n\tNCSI_CHANNEL_ATTR_LINK_STATE    = 0x6\n\tNCSI_CHANNEL_ATTR_ACTIVE        = 0x7\n\tNCSI_CHANNEL_ATTR_FORCED        = 0x8\n\tNCSI_CHANNEL_ATTR_VLAN_LIST     = 0x9\n\tNCSI_CHANNEL_ATTR_VLAN_ID       = 0xa\n)\n\ntype ScmTimestamping struct {\n\tTs [3]Timespec\n}\n\nconst (\n\tSOF_TIMESTAMPING_TX_HARDWARE  = 0x1\n\tSOF_TIMESTAMPING_TX_SOFTWARE  = 0x2\n\tSOF_TIMESTAMPING_RX_HARDWARE  = 0x4\n\tSOF_TIMESTAMPING_RX_SOFTWARE  = 0x8\n\tSOF_TIMESTAMPING_SOFTWARE     = 0x10\n\tSOF_TIMESTAMPING_SYS_HARDWARE = 0x20\n\tSOF_TIMESTAMPING_RAW_HARDWARE = 0x40\n\tSOF_TIMESTAMPING_OPT_ID       = 0x80\n\tSOF_TIMESTAMPING_TX_SCHED     = 0x100\n\tSOF_TIMESTAMPING_TX_ACK       = 0x200\n\tSOF_TIMESTAMPING_OPT_CMSG     = 0x400\n\tSOF_TIMESTAMPING_OPT_TSONLY   = 0x800\n\tSOF_TIMESTAMPING_OPT_STATS    = 0x1000\n\tSOF_TIMESTAMPING_OPT_PKTINFO  = 0x2000\n\tSOF_TIMESTAMPING_OPT_TX_SWHW  = 0x4000\n\n\tSOF_TIMESTAMPING_LAST = 0x4000\n\tSOF_TIMESTAMPING_MASK = 0x7fff\n\n\tSCM_TSTAMP_SND   = 0x0\n\tSCM_TSTAMP_SCHED = 0x1\n\tSCM_TSTAMP_ACK   = 0x2\n)\n\ntype SockExtendedErr struct {\n\tErrno  uint32\n\tOrigin uint8\n\tType   uint8\n\tCode   uint8\n\tPad    uint8\n\tInfo   uint32\n\tData   uint32\n}\n\ntype FanotifyEventMetadata struct {\n\tEvent_len    uint32\n\tVers         uint8\n\tReserved     uint8\n\tMetadata_len uint16\n\tMask         uint64\n\tFd           int32\n\tPid          int32\n}\n\ntype FanotifyResponse struct {\n\tFd       int32\n\tResponse uint32\n}\n\nconst (\n\tCRYPTO_MSG_BASE      = 0x10\n\tCRYPTO_MSG_NEWALG    = 0x10\n\tCRYPTO_MSG_DELALG    = 0x11\n\tCRYPTO_MSG_UPDATEALG = 0x12\n\tCRYPTO_MSG_GETALG    = 0x13\n\tCRYPTO_MSG_DELRNG    = 0x14\n\tCRYPTO_MSG_GETSTAT   = 0x15\n)\n\nconst (\n\tCRYPTOCFGA_UNSPEC           = 0x0\n\tCRYPTOCFGA_PRIORITY_VAL     = 0x1\n\tCRYPTOCFGA_REPORT_LARVAL    = 0x2\n\tCRYPTOCFGA_REPORT_HASH      = 0x3\n\tCRYPTOCFGA_REPORT_BLKCIPHER = 0x4\n\tCRYPTOCFGA_REPORT_AEAD      = 0x5\n\tCRYPTOCFGA_REPORT_COMPRESS  = 0x6\n\tCRYPTOCFGA_REPORT_RNG       = 0x7\n\tCRYPTOCFGA_REPORT_CIPHER    = 0x8\n\tCRYPTOCFGA_REPORT_AKCIPHER  = 0x9\n\tCRYPTOCFGA_REPORT_KPP       = 0xa\n\tCRYPTOCFGA_REPORT_ACOMP     = 0xb\n\tCRYPTOCFGA_STAT_LARVAL      = 0xc\n\tCRYPTOCFGA_STAT_HASH        = 0xd\n\tCRYPTOCFGA_STAT_BLKCIPHER   = 0xe\n\tCRYPTOCFGA_STAT_AEAD        = 0xf\n\tCRYPTOCFGA_STAT_COMPRESS    = 0x10\n\tCRYPTOCFGA_STAT_RNG         = 0x11\n\tCRYPTOCFGA_STAT_CIPHER      = 0x12\n\tCRYPTOCFGA_STAT_AKCIPHER    = 0x13\n\tCRYPTOCFGA_STAT_KPP         = 0x14\n\tCRYPTOCFGA_STAT_ACOMP       = 0x15\n)\n\ntype CryptoUserAlg struct {\n\tName        [64]uint8\n\tDriver_name [64]uint8\n\tModule_name [64]uint8\n\tType        uint32\n\tMask        uint32\n\tRefcnt      uint32\n\tFlags       uint32\n}\n\ntype CryptoStatAEAD struct {\n\tType         [64]uint8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatAKCipher struct {\n\tType         [64]uint8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tVerify_cnt   uint64\n\tSign_cnt     uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatCipher struct {\n\tType         [64]uint8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatCompress struct {\n\tType            [64]uint8\n\tCompress_cnt    uint64\n\tCompress_tlen   uint64\n\tDecompress_cnt  uint64\n\tDecompress_tlen uint64\n\tErr_cnt         uint64\n}\n\ntype CryptoStatHash struct {\n\tType      [64]uint8\n\tHash_cnt  uint64\n\tHash_tlen uint64\n\tErr_cnt   uint64\n}\n\ntype CryptoStatKPP struct {\n\tType                      [64]uint8\n\tSetsecret_cnt             uint64\n\tGenerate_public_key_cnt   uint64\n\tCompute_shared_secret_cnt uint64\n\tErr_cnt                   uint64\n}\n\ntype CryptoStatRNG struct {\n\tType          [64]uint8\n\tGenerate_cnt  uint64\n\tGenerate_tlen uint64\n\tSeed_cnt      uint64\n\tErr_cnt       uint64\n}\n\ntype CryptoStatLarval struct {\n\tType [64]uint8\n}\n\ntype CryptoReportLarval struct {\n\tType [64]uint8\n}\n\ntype CryptoReportHash struct {\n\tType       [64]uint8\n\tBlocksize  uint32\n\tDigestsize uint32\n}\n\ntype CryptoReportCipher struct {\n\tType        [64]uint8\n\tBlocksize   uint32\n\tMin_keysize uint32\n\tMax_keysize uint32\n}\n\ntype CryptoReportBlkCipher struct {\n\tType        [64]uint8\n\tGeniv       [64]uint8\n\tBlocksize   uint32\n\tMin_keysize uint32\n\tMax_keysize uint32\n\tIvsize      uint32\n}\n\ntype CryptoReportAEAD struct {\n\tType        [64]uint8\n\tGeniv       [64]uint8\n\tBlocksize   uint32\n\tMaxauthsize uint32\n\tIvsize      uint32\n}\n\ntype CryptoReportComp struct {\n\tType [64]uint8\n}\n\ntype CryptoReportRNG struct {\n\tType     [64]uint8\n\tSeedsize uint32\n}\n\ntype CryptoReportAKCipher struct {\n\tType [64]uint8\n}\n\ntype CryptoReportKPP struct {\n\tType [64]uint8\n}\n\ntype CryptoReportAcomp struct {\n\tType [64]uint8\n}\n\nconst (\n\tBPF_REG_0                           = 0x0\n\tBPF_REG_1                           = 0x1\n\tBPF_REG_2                           = 0x2\n\tBPF_REG_3                           = 0x3\n\tBPF_REG_4                           = 0x4\n\tBPF_REG_5                           = 0x5\n\tBPF_REG_6                           = 0x6\n\tBPF_REG_7                           = 0x7\n\tBPF_REG_8                           = 0x8\n\tBPF_REG_9                           = 0x9\n\tBPF_REG_10                          = 0xa\n\tBPF_MAP_CREATE                      = 0x0\n\tBPF_MAP_LOOKUP_ELEM                 = 0x1\n\tBPF_MAP_UPDATE_ELEM                 = 0x2\n\tBPF_MAP_DELETE_ELEM                 = 0x3\n\tBPF_MAP_GET_NEXT_KEY                = 0x4\n\tBPF_PROG_LOAD                       = 0x5\n\tBPF_OBJ_PIN                         = 0x6\n\tBPF_OBJ_GET                         = 0x7\n\tBPF_PROG_ATTACH                     = 0x8\n\tBPF_PROG_DETACH                     = 0x9\n\tBPF_PROG_TEST_RUN                   = 0xa\n\tBPF_PROG_GET_NEXT_ID                = 0xb\n\tBPF_MAP_GET_NEXT_ID                 = 0xc\n\tBPF_PROG_GET_FD_BY_ID               = 0xd\n\tBPF_MAP_GET_FD_BY_ID                = 0xe\n\tBPF_OBJ_GET_INFO_BY_FD              = 0xf\n\tBPF_PROG_QUERY                      = 0x10\n\tBPF_RAW_TRACEPOINT_OPEN             = 0x11\n\tBPF_BTF_LOAD                        = 0x12\n\tBPF_BTF_GET_FD_BY_ID                = 0x13\n\tBPF_TASK_FD_QUERY                   = 0x14\n\tBPF_MAP_LOOKUP_AND_DELETE_ELEM      = 0x15\n\tBPF_MAP_TYPE_UNSPEC                 = 0x0\n\tBPF_MAP_TYPE_HASH                   = 0x1\n\tBPF_MAP_TYPE_ARRAY                  = 0x2\n\tBPF_MAP_TYPE_PROG_ARRAY             = 0x3\n\tBPF_MAP_TYPE_PERF_EVENT_ARRAY       = 0x4\n\tBPF_MAP_TYPE_PERCPU_HASH            = 0x5\n\tBPF_MAP_TYPE_PERCPU_ARRAY           = 0x6\n\tBPF_MAP_TYPE_STACK_TRACE            = 0x7\n\tBPF_MAP_TYPE_CGROUP_ARRAY           = 0x8\n\tBPF_MAP_TYPE_LRU_HASH               = 0x9\n\tBPF_MAP_TYPE_LRU_PERCPU_HASH        = 0xa\n\tBPF_MAP_TYPE_LPM_TRIE               = 0xb\n\tBPF_MAP_TYPE_ARRAY_OF_MAPS          = 0xc\n\tBPF_MAP_TYPE_HASH_OF_MAPS           = 0xd\n\tBPF_MAP_TYPE_DEVMAP                 = 0xe\n\tBPF_MAP_TYPE_SOCKMAP                = 0xf\n\tBPF_MAP_TYPE_CPUMAP                 = 0x10\n\tBPF_MAP_TYPE_XSKMAP                 = 0x11\n\tBPF_MAP_TYPE_SOCKHASH               = 0x12\n\tBPF_MAP_TYPE_CGROUP_STORAGE         = 0x13\n\tBPF_MAP_TYPE_REUSEPORT_SOCKARRAY    = 0x14\n\tBPF_MAP_TYPE_PERCPU_CGROUP_STORAGE  = 0x15\n\tBPF_MAP_TYPE_QUEUE                  = 0x16\n\tBPF_MAP_TYPE_STACK                  = 0x17\n\tBPF_PROG_TYPE_UNSPEC                = 0x0\n\tBPF_PROG_TYPE_SOCKET_FILTER         = 0x1\n\tBPF_PROG_TYPE_KPROBE                = 0x2\n\tBPF_PROG_TYPE_SCHED_CLS             = 0x3\n\tBPF_PROG_TYPE_SCHED_ACT             = 0x4\n\tBPF_PROG_TYPE_TRACEPOINT            = 0x5\n\tBPF_PROG_TYPE_XDP                   = 0x6\n\tBPF_PROG_TYPE_PERF_EVENT            = 0x7\n\tBPF_PROG_TYPE_CGROUP_SKB            = 0x8\n\tBPF_PROG_TYPE_CGROUP_SOCK           = 0x9\n\tBPF_PROG_TYPE_LWT_IN                = 0xa\n\tBPF_PROG_TYPE_LWT_OUT               = 0xb\n\tBPF_PROG_TYPE_LWT_XMIT              = 0xc\n\tBPF_PROG_TYPE_SOCK_OPS              = 0xd\n\tBPF_PROG_TYPE_SK_SKB                = 0xe\n\tBPF_PROG_TYPE_CGROUP_DEVICE         = 0xf\n\tBPF_PROG_TYPE_SK_MSG                = 0x10\n\tBPF_PROG_TYPE_RAW_TRACEPOINT        = 0x11\n\tBPF_PROG_TYPE_CGROUP_SOCK_ADDR      = 0x12\n\tBPF_PROG_TYPE_LWT_SEG6LOCAL         = 0x13\n\tBPF_PROG_TYPE_LIRC_MODE2            = 0x14\n\tBPF_PROG_TYPE_SK_REUSEPORT          = 0x15\n\tBPF_PROG_TYPE_FLOW_DISSECTOR        = 0x16\n\tBPF_CGROUP_INET_INGRESS             = 0x0\n\tBPF_CGROUP_INET_EGRESS              = 0x1\n\tBPF_CGROUP_INET_SOCK_CREATE         = 0x2\n\tBPF_CGROUP_SOCK_OPS                 = 0x3\n\tBPF_SK_SKB_STREAM_PARSER            = 0x4\n\tBPF_SK_SKB_STREAM_VERDICT           = 0x5\n\tBPF_CGROUP_DEVICE                   = 0x6\n\tBPF_SK_MSG_VERDICT                  = 0x7\n\tBPF_CGROUP_INET4_BIND               = 0x8\n\tBPF_CGROUP_INET6_BIND               = 0x9\n\tBPF_CGROUP_INET4_CONNECT            = 0xa\n\tBPF_CGROUP_INET6_CONNECT            = 0xb\n\tBPF_CGROUP_INET4_POST_BIND          = 0xc\n\tBPF_CGROUP_INET6_POST_BIND          = 0xd\n\tBPF_CGROUP_UDP4_SENDMSG             = 0xe\n\tBPF_CGROUP_UDP6_SENDMSG             = 0xf\n\tBPF_LIRC_MODE2                      = 0x10\n\tBPF_FLOW_DISSECTOR                  = 0x11\n\tBPF_STACK_BUILD_ID_EMPTY            = 0x0\n\tBPF_STACK_BUILD_ID_VALID            = 0x1\n\tBPF_STACK_BUILD_ID_IP               = 0x2\n\tBPF_ADJ_ROOM_NET                    = 0x0\n\tBPF_HDR_START_MAC                   = 0x0\n\tBPF_HDR_START_NET                   = 0x1\n\tBPF_LWT_ENCAP_SEG6                  = 0x0\n\tBPF_LWT_ENCAP_SEG6_INLINE           = 0x1\n\tBPF_OK                              = 0x0\n\tBPF_DROP                            = 0x2\n\tBPF_REDIRECT                        = 0x7\n\tBPF_SOCK_OPS_VOID                   = 0x0\n\tBPF_SOCK_OPS_TIMEOUT_INIT           = 0x1\n\tBPF_SOCK_OPS_RWND_INIT              = 0x2\n\tBPF_SOCK_OPS_TCP_CONNECT_CB         = 0x3\n\tBPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB  = 0x4\n\tBPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB = 0x5\n\tBPF_SOCK_OPS_NEEDS_ECN              = 0x6\n\tBPF_SOCK_OPS_BASE_RTT               = 0x7\n\tBPF_SOCK_OPS_RTO_CB                 = 0x8\n\tBPF_SOCK_OPS_RETRANS_CB             = 0x9\n\tBPF_SOCK_OPS_STATE_CB               = 0xa\n\tBPF_SOCK_OPS_TCP_LISTEN_CB          = 0xb\n\tBPF_TCP_ESTABLISHED                 = 0x1\n\tBPF_TCP_SYN_SENT                    = 0x2\n\tBPF_TCP_SYN_RECV                    = 0x3\n\tBPF_TCP_FIN_WAIT1                   = 0x4\n\tBPF_TCP_FIN_WAIT2                   = 0x5\n\tBPF_TCP_TIME_WAIT                   = 0x6\n\tBPF_TCP_CLOSE                       = 0x7\n\tBPF_TCP_CLOSE_WAIT                  = 0x8\n\tBPF_TCP_LAST_ACK                    = 0x9\n\tBPF_TCP_LISTEN                      = 0xa\n\tBPF_TCP_CLOSING                     = 0xb\n\tBPF_TCP_NEW_SYN_RECV                = 0xc\n\tBPF_TCP_MAX_STATES                  = 0xd\n\tBPF_FIB_LKUP_RET_SUCCESS            = 0x0\n\tBPF_FIB_LKUP_RET_BLACKHOLE          = 0x1\n\tBPF_FIB_LKUP_RET_UNREACHABLE        = 0x2\n\tBPF_FIB_LKUP_RET_PROHIBIT           = 0x3\n\tBPF_FIB_LKUP_RET_NOT_FWDED          = 0x4\n\tBPF_FIB_LKUP_RET_FWD_DISABLED       = 0x5\n\tBPF_FIB_LKUP_RET_UNSUPP_LWT         = 0x6\n\tBPF_FIB_LKUP_RET_NO_NEIGH           = 0x7\n\tBPF_FIB_LKUP_RET_FRAG_NEEDED        = 0x8\n\tBPF_FD_TYPE_RAW_TRACEPOINT          = 0x0\n\tBPF_FD_TYPE_TRACEPOINT              = 0x1\n\tBPF_FD_TYPE_KPROBE                  = 0x2\n\tBPF_FD_TYPE_KRETPROBE               = 0x3\n\tBPF_FD_TYPE_UPROBE                  = 0x4\n\tBPF_FD_TYPE_URETPROBE               = 0x5\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go",
    "content": "// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build ppc64le,linux\n\npackage unix\n\nconst (\n\tSizeofPtr      = 0x8\n\tSizeofShort    = 0x2\n\tSizeofInt      = 0x4\n\tSizeofLong     = 0x8\n\tSizeofLongLong = 0x8\n\tPathMax        = 0x1000\n)\n\ntype (\n\t_C_short     int16\n\t_C_int       int32\n\t_C_long      int64\n\t_C_long_long int64\n)\n\ntype Timespec struct {\n\tSec  int64\n\tNsec int64\n}\n\ntype Timeval struct {\n\tSec  int64\n\tUsec int64\n}\n\ntype Timex struct {\n\tModes     uint32\n\tOffset    int64\n\tFreq      int64\n\tMaxerror  int64\n\tEsterror  int64\n\tStatus    int32\n\tConstant  int64\n\tPrecision int64\n\tTolerance int64\n\tTime      Timeval\n\tTick      int64\n\tPpsfreq   int64\n\tJitter    int64\n\tShift     int32\n\tStabil    int64\n\tJitcnt    int64\n\tCalcnt    int64\n\tErrcnt    int64\n\tStbcnt    int64\n\tTai       int32\n\t_         [44]byte\n}\n\ntype Time_t int64\n\ntype Tms struct {\n\tUtime  int64\n\tStime  int64\n\tCutime int64\n\tCstime int64\n}\n\ntype Utimbuf struct {\n\tActime  int64\n\tModtime int64\n}\n\ntype Rusage struct {\n\tUtime    Timeval\n\tStime    Timeval\n\tMaxrss   int64\n\tIxrss    int64\n\tIdrss    int64\n\tIsrss    int64\n\tMinflt   int64\n\tMajflt   int64\n\tNswap    int64\n\tInblock  int64\n\tOublock  int64\n\tMsgsnd   int64\n\tMsgrcv   int64\n\tNsignals int64\n\tNvcsw    int64\n\tNivcsw   int64\n}\n\ntype Rlimit struct {\n\tCur uint64\n\tMax uint64\n}\n\ntype _Gid_t uint32\n\ntype Stat_t struct {\n\tDev     uint64\n\tIno     uint64\n\tNlink   uint64\n\tMode    uint32\n\tUid     uint32\n\tGid     uint32\n\t_       int32\n\tRdev    uint64\n\tSize    int64\n\tBlksize int64\n\tBlocks  int64\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\t_       uint64\n\t_       uint64\n\t_       uint64\n}\n\ntype StatxTimestamp struct {\n\tSec  int64\n\tNsec uint32\n\t_    int32\n}\n\ntype Statx_t struct {\n\tMask            uint32\n\tBlksize         uint32\n\tAttributes      uint64\n\tNlink           uint32\n\tUid             uint32\n\tGid             uint32\n\tMode            uint16\n\t_               [1]uint16\n\tIno             uint64\n\tSize            uint64\n\tBlocks          uint64\n\tAttributes_mask uint64\n\tAtime           StatxTimestamp\n\tBtime           StatxTimestamp\n\tCtime           StatxTimestamp\n\tMtime           StatxTimestamp\n\tRdev_major      uint32\n\tRdev_minor      uint32\n\tDev_major       uint32\n\tDev_minor       uint32\n\t_               [14]uint64\n}\n\ntype Dirent struct {\n\tIno    uint64\n\tOff    int64\n\tReclen uint16\n\tType   uint8\n\tName   [256]uint8\n\t_      [5]byte\n}\n\ntype Fsid struct {\n\tVal [2]int32\n}\n\ntype Flock_t struct {\n\tType   int16\n\tWhence int16\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\t_      [4]byte\n}\n\ntype FscryptPolicy struct {\n\tVersion                   uint8\n\tContents_encryption_mode  uint8\n\tFilenames_encryption_mode uint8\n\tFlags                     uint8\n\tMaster_key_descriptor     [8]uint8\n}\n\ntype FscryptKey struct {\n\tMode uint32\n\tRaw  [64]uint8\n\tSize uint32\n}\n\ntype KeyctlDHParams struct {\n\tPrivate int32\n\tPrime   int32\n\tBase    int32\n}\n\nconst (\n\tFADV_NORMAL     = 0x0\n\tFADV_RANDOM     = 0x1\n\tFADV_SEQUENTIAL = 0x2\n\tFADV_WILLNEED   = 0x3\n\tFADV_DONTNEED   = 0x4\n\tFADV_NOREUSE    = 0x5\n)\n\ntype RawSockaddrInet4 struct {\n\tFamily uint16\n\tPort   uint16\n\tAddr   [4]byte /* in_addr */\n\tZero   [8]uint8\n}\n\ntype RawSockaddrInet6 struct {\n\tFamily   uint16\n\tPort     uint16\n\tFlowinfo uint32\n\tAddr     [16]byte /* in6_addr */\n\tScope_id uint32\n}\n\ntype RawSockaddrUnix struct {\n\tFamily uint16\n\tPath   [108]int8\n}\n\ntype RawSockaddrLinklayer struct {\n\tFamily   uint16\n\tProtocol uint16\n\tIfindex  int32\n\tHatype   uint16\n\tPkttype  uint8\n\tHalen    uint8\n\tAddr     [8]uint8\n}\n\ntype RawSockaddrNetlink struct {\n\tFamily uint16\n\tPad    uint16\n\tPid    uint32\n\tGroups uint32\n}\n\ntype RawSockaddrHCI struct {\n\tFamily  uint16\n\tDev     uint16\n\tChannel uint16\n}\n\ntype RawSockaddrL2 struct {\n\tFamily      uint16\n\tPsm         uint16\n\tBdaddr      [6]uint8\n\tCid         uint16\n\tBdaddr_type uint8\n\t_           [1]byte\n}\n\ntype RawSockaddrRFCOMM struct {\n\tFamily  uint16\n\tBdaddr  [6]uint8\n\tChannel uint8\n\t_       [1]byte\n}\n\ntype RawSockaddrCAN struct {\n\tFamily  uint16\n\tIfindex int32\n\tAddr    [8]byte\n}\n\ntype RawSockaddrALG struct {\n\tFamily uint16\n\tType   [14]uint8\n\tFeat   uint32\n\tMask   uint32\n\tName   [64]uint8\n}\n\ntype RawSockaddrVM struct {\n\tFamily    uint16\n\tReserved1 uint16\n\tPort      uint32\n\tCid       uint32\n\tZero      [4]uint8\n}\n\ntype RawSockaddrXDP struct {\n\tFamily         uint16\n\tFlags          uint16\n\tIfindex        uint32\n\tQueue_id       uint32\n\tShared_umem_fd uint32\n}\n\ntype RawSockaddrPPPoX [0x1e]byte\n\ntype RawSockaddr struct {\n\tFamily uint16\n\tData   [14]uint8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [96]uint8\n}\n\ntype _Socklen uint32\n\ntype Linger struct {\n\tOnoff  int32\n\tLinger int32\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint64\n}\n\ntype IPMreq struct {\n\tMultiaddr [4]byte /* in_addr */\n\tInterface [4]byte /* in_addr */\n}\n\ntype IPMreqn struct {\n\tMultiaddr [4]byte /* in_addr */\n\tAddress   [4]byte /* in_addr */\n\tIfindex   int32\n}\n\ntype IPv6Mreq struct {\n\tMultiaddr [16]byte /* in6_addr */\n\tInterface uint32\n}\n\ntype PacketMreq struct {\n\tIfindex int32\n\tType    uint16\n\tAlen    uint16\n\tAddress [8]uint8\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tIov        *Iovec\n\tIovlen     uint64\n\tControl    *byte\n\tControllen uint64\n\tFlags      int32\n\t_          [4]byte\n}\n\ntype Cmsghdr struct {\n\tLen   uint64\n\tLevel int32\n\tType  int32\n}\n\ntype Inet4Pktinfo struct {\n\tIfindex  int32\n\tSpec_dst [4]byte /* in_addr */\n\tAddr     [4]byte /* in_addr */\n}\n\ntype Inet6Pktinfo struct {\n\tAddr    [16]byte /* in6_addr */\n\tIfindex uint32\n}\n\ntype IPv6MTUInfo struct {\n\tAddr RawSockaddrInet6\n\tMtu  uint32\n}\n\ntype ICMPv6Filter struct {\n\tData [8]uint32\n}\n\ntype Ucred struct {\n\tPid int32\n\tUid uint32\n\tGid uint32\n}\n\ntype TCPInfo struct {\n\tState          uint8\n\tCa_state       uint8\n\tRetransmits    uint8\n\tProbes         uint8\n\tBackoff        uint8\n\tOptions        uint8\n\tRto            uint32\n\tAto            uint32\n\tSnd_mss        uint32\n\tRcv_mss        uint32\n\tUnacked        uint32\n\tSacked         uint32\n\tLost           uint32\n\tRetrans        uint32\n\tFackets        uint32\n\tLast_data_sent uint32\n\tLast_ack_sent  uint32\n\tLast_data_recv uint32\n\tLast_ack_recv  uint32\n\tPmtu           uint32\n\tRcv_ssthresh   uint32\n\tRtt            uint32\n\tRttvar         uint32\n\tSnd_ssthresh   uint32\n\tSnd_cwnd       uint32\n\tAdvmss         uint32\n\tReordering     uint32\n\tRcv_rtt        uint32\n\tRcv_space      uint32\n\tTotal_retrans  uint32\n}\n\ntype CanFilter struct {\n\tId   uint32\n\tMask uint32\n}\n\nconst (\n\tSizeofSockaddrInet4     = 0x10\n\tSizeofSockaddrInet6     = 0x1c\n\tSizeofSockaddrAny       = 0x70\n\tSizeofSockaddrUnix      = 0x6e\n\tSizeofSockaddrLinklayer = 0x14\n\tSizeofSockaddrNetlink   = 0xc\n\tSizeofSockaddrHCI       = 0x6\n\tSizeofSockaddrL2        = 0xe\n\tSizeofSockaddrRFCOMM    = 0xa\n\tSizeofSockaddrCAN       = 0x10\n\tSizeofSockaddrALG       = 0x58\n\tSizeofSockaddrVM        = 0x10\n\tSizeofSockaddrXDP       = 0x10\n\tSizeofSockaddrPPPoX     = 0x1e\n\tSizeofLinger            = 0x8\n\tSizeofIovec             = 0x10\n\tSizeofIPMreq            = 0x8\n\tSizeofIPMreqn           = 0xc\n\tSizeofIPv6Mreq          = 0x14\n\tSizeofPacketMreq        = 0x10\n\tSizeofMsghdr            = 0x38\n\tSizeofCmsghdr           = 0x10\n\tSizeofInet4Pktinfo      = 0xc\n\tSizeofInet6Pktinfo      = 0x14\n\tSizeofIPv6MTUInfo       = 0x20\n\tSizeofICMPv6Filter      = 0x20\n\tSizeofUcred             = 0xc\n\tSizeofTCPInfo           = 0x68\n\tSizeofCanFilter         = 0x8\n)\n\nconst (\n\tNDA_UNSPEC              = 0x0\n\tNDA_DST                 = 0x1\n\tNDA_LLADDR              = 0x2\n\tNDA_CACHEINFO           = 0x3\n\tNDA_PROBES              = 0x4\n\tNDA_VLAN                = 0x5\n\tNDA_PORT                = 0x6\n\tNDA_VNI                 = 0x7\n\tNDA_IFINDEX             = 0x8\n\tNDA_MASTER              = 0x9\n\tNDA_LINK_NETNSID        = 0xa\n\tNDA_SRC_VNI             = 0xb\n\tNTF_USE                 = 0x1\n\tNTF_SELF                = 0x2\n\tNTF_MASTER              = 0x4\n\tNTF_PROXY               = 0x8\n\tNTF_EXT_LEARNED         = 0x10\n\tNTF_OFFLOADED           = 0x20\n\tNTF_ROUTER              = 0x80\n\tNUD_INCOMPLETE          = 0x1\n\tNUD_REACHABLE           = 0x2\n\tNUD_STALE               = 0x4\n\tNUD_DELAY               = 0x8\n\tNUD_PROBE               = 0x10\n\tNUD_FAILED              = 0x20\n\tNUD_NOARP               = 0x40\n\tNUD_PERMANENT           = 0x80\n\tNUD_NONE                = 0x0\n\tIFA_UNSPEC              = 0x0\n\tIFA_ADDRESS             = 0x1\n\tIFA_LOCAL               = 0x2\n\tIFA_LABEL               = 0x3\n\tIFA_BROADCAST           = 0x4\n\tIFA_ANYCAST             = 0x5\n\tIFA_CACHEINFO           = 0x6\n\tIFA_MULTICAST           = 0x7\n\tIFA_FLAGS               = 0x8\n\tIFA_RT_PRIORITY         = 0x9\n\tIFA_TARGET_NETNSID      = 0xa\n\tIFLA_UNSPEC             = 0x0\n\tIFLA_ADDRESS            = 0x1\n\tIFLA_BROADCAST          = 0x2\n\tIFLA_IFNAME             = 0x3\n\tIFLA_MTU                = 0x4\n\tIFLA_LINK               = 0x5\n\tIFLA_QDISC              = 0x6\n\tIFLA_STATS              = 0x7\n\tIFLA_COST               = 0x8\n\tIFLA_PRIORITY           = 0x9\n\tIFLA_MASTER             = 0xa\n\tIFLA_WIRELESS           = 0xb\n\tIFLA_PROTINFO           = 0xc\n\tIFLA_TXQLEN             = 0xd\n\tIFLA_MAP                = 0xe\n\tIFLA_WEIGHT             = 0xf\n\tIFLA_OPERSTATE          = 0x10\n\tIFLA_LINKMODE           = 0x11\n\tIFLA_LINKINFO           = 0x12\n\tIFLA_NET_NS_PID         = 0x13\n\tIFLA_IFALIAS            = 0x14\n\tIFLA_NUM_VF             = 0x15\n\tIFLA_VFINFO_LIST        = 0x16\n\tIFLA_STATS64            = 0x17\n\tIFLA_VF_PORTS           = 0x18\n\tIFLA_PORT_SELF          = 0x19\n\tIFLA_AF_SPEC            = 0x1a\n\tIFLA_GROUP              = 0x1b\n\tIFLA_NET_NS_FD          = 0x1c\n\tIFLA_EXT_MASK           = 0x1d\n\tIFLA_PROMISCUITY        = 0x1e\n\tIFLA_NUM_TX_QUEUES      = 0x1f\n\tIFLA_NUM_RX_QUEUES      = 0x20\n\tIFLA_CARRIER            = 0x21\n\tIFLA_PHYS_PORT_ID       = 0x22\n\tIFLA_CARRIER_CHANGES    = 0x23\n\tIFLA_PHYS_SWITCH_ID     = 0x24\n\tIFLA_LINK_NETNSID       = 0x25\n\tIFLA_PHYS_PORT_NAME     = 0x26\n\tIFLA_PROTO_DOWN         = 0x27\n\tIFLA_GSO_MAX_SEGS       = 0x28\n\tIFLA_GSO_MAX_SIZE       = 0x29\n\tIFLA_PAD                = 0x2a\n\tIFLA_XDP                = 0x2b\n\tIFLA_EVENT              = 0x2c\n\tIFLA_NEW_NETNSID        = 0x2d\n\tIFLA_IF_NETNSID         = 0x2e\n\tIFLA_TARGET_NETNSID     = 0x2e\n\tIFLA_CARRIER_UP_COUNT   = 0x2f\n\tIFLA_CARRIER_DOWN_COUNT = 0x30\n\tIFLA_NEW_IFINDEX        = 0x31\n\tIFLA_MIN_MTU            = 0x32\n\tIFLA_MAX_MTU            = 0x33\n\tIFLA_MAX                = 0x33\n\tIFLA_INFO_KIND          = 0x1\n\tIFLA_INFO_DATA          = 0x2\n\tIFLA_INFO_XSTATS        = 0x3\n\tIFLA_INFO_SLAVE_KIND    = 0x4\n\tIFLA_INFO_SLAVE_DATA    = 0x5\n\tRT_SCOPE_UNIVERSE       = 0x0\n\tRT_SCOPE_SITE           = 0xc8\n\tRT_SCOPE_LINK           = 0xfd\n\tRT_SCOPE_HOST           = 0xfe\n\tRT_SCOPE_NOWHERE        = 0xff\n\tRT_TABLE_UNSPEC         = 0x0\n\tRT_TABLE_COMPAT         = 0xfc\n\tRT_TABLE_DEFAULT        = 0xfd\n\tRT_TABLE_MAIN           = 0xfe\n\tRT_TABLE_LOCAL          = 0xff\n\tRT_TABLE_MAX            = 0xffffffff\n\tRTA_UNSPEC              = 0x0\n\tRTA_DST                 = 0x1\n\tRTA_SRC                 = 0x2\n\tRTA_IIF                 = 0x3\n\tRTA_OIF                 = 0x4\n\tRTA_GATEWAY             = 0x5\n\tRTA_PRIORITY            = 0x6\n\tRTA_PREFSRC             = 0x7\n\tRTA_METRICS             = 0x8\n\tRTA_MULTIPATH           = 0x9\n\tRTA_FLOW                = 0xb\n\tRTA_CACHEINFO           = 0xc\n\tRTA_TABLE               = 0xf\n\tRTA_MARK                = 0x10\n\tRTA_MFC_STATS           = 0x11\n\tRTA_VIA                 = 0x12\n\tRTA_NEWDST              = 0x13\n\tRTA_PREF                = 0x14\n\tRTA_ENCAP_TYPE          = 0x15\n\tRTA_ENCAP               = 0x16\n\tRTA_EXPIRES             = 0x17\n\tRTA_PAD                 = 0x18\n\tRTA_UID                 = 0x19\n\tRTA_TTL_PROPAGATE       = 0x1a\n\tRTA_IP_PROTO            = 0x1b\n\tRTA_SPORT               = 0x1c\n\tRTA_DPORT               = 0x1d\n\tRTN_UNSPEC              = 0x0\n\tRTN_UNICAST             = 0x1\n\tRTN_LOCAL               = 0x2\n\tRTN_BROADCAST           = 0x3\n\tRTN_ANYCAST             = 0x4\n\tRTN_MULTICAST           = 0x5\n\tRTN_BLACKHOLE           = 0x6\n\tRTN_UNREACHABLE         = 0x7\n\tRTN_PROHIBIT            = 0x8\n\tRTN_THROW               = 0x9\n\tRTN_NAT                 = 0xa\n\tRTN_XRESOLVE            = 0xb\n\tRTNLGRP_NONE            = 0x0\n\tRTNLGRP_LINK            = 0x1\n\tRTNLGRP_NOTIFY          = 0x2\n\tRTNLGRP_NEIGH           = 0x3\n\tRTNLGRP_TC              = 0x4\n\tRTNLGRP_IPV4_IFADDR     = 0x5\n\tRTNLGRP_IPV4_MROUTE     = 0x6\n\tRTNLGRP_IPV4_ROUTE      = 0x7\n\tRTNLGRP_IPV4_RULE       = 0x8\n\tRTNLGRP_IPV6_IFADDR     = 0x9\n\tRTNLGRP_IPV6_MROUTE     = 0xa\n\tRTNLGRP_IPV6_ROUTE      = 0xb\n\tRTNLGRP_IPV6_IFINFO     = 0xc\n\tRTNLGRP_IPV6_PREFIX     = 0x12\n\tRTNLGRP_IPV6_RULE       = 0x13\n\tRTNLGRP_ND_USEROPT      = 0x14\n\tSizeofNlMsghdr          = 0x10\n\tSizeofNlMsgerr          = 0x14\n\tSizeofRtGenmsg          = 0x1\n\tSizeofNlAttr            = 0x4\n\tSizeofRtAttr            = 0x4\n\tSizeofIfInfomsg         = 0x10\n\tSizeofIfAddrmsg         = 0x8\n\tSizeofRtMsg             = 0xc\n\tSizeofRtNexthop         = 0x8\n\tSizeofNdUseroptmsg      = 0x10\n\tSizeofNdMsg             = 0xc\n)\n\ntype NlMsghdr struct {\n\tLen   uint32\n\tType  uint16\n\tFlags uint16\n\tSeq   uint32\n\tPid   uint32\n}\n\ntype NlMsgerr struct {\n\tError int32\n\tMsg   NlMsghdr\n}\n\ntype RtGenmsg struct {\n\tFamily uint8\n}\n\ntype NlAttr struct {\n\tLen  uint16\n\tType uint16\n}\n\ntype RtAttr struct {\n\tLen  uint16\n\tType uint16\n}\n\ntype IfInfomsg struct {\n\tFamily uint8\n\t_      uint8\n\tType   uint16\n\tIndex  int32\n\tFlags  uint32\n\tChange uint32\n}\n\ntype IfAddrmsg struct {\n\tFamily    uint8\n\tPrefixlen uint8\n\tFlags     uint8\n\tScope     uint8\n\tIndex     uint32\n}\n\ntype RtMsg struct {\n\tFamily   uint8\n\tDst_len  uint8\n\tSrc_len  uint8\n\tTos      uint8\n\tTable    uint8\n\tProtocol uint8\n\tScope    uint8\n\tType     uint8\n\tFlags    uint32\n}\n\ntype RtNexthop struct {\n\tLen     uint16\n\tFlags   uint8\n\tHops    uint8\n\tIfindex int32\n}\n\ntype NdUseroptmsg struct {\n\tFamily    uint8\n\tPad1      uint8\n\tOpts_len  uint16\n\tIfindex   int32\n\tIcmp_type uint8\n\tIcmp_code uint8\n\tPad2      uint16\n\tPad3      uint32\n}\n\ntype NdMsg struct {\n\tFamily  uint8\n\tPad1    uint8\n\tPad2    uint16\n\tIfindex int32\n\tState   uint16\n\tFlags   uint8\n\tType    uint8\n}\n\nconst (\n\tSizeofSockFilter = 0x8\n\tSizeofSockFprog  = 0x10\n)\n\ntype SockFilter struct {\n\tCode uint16\n\tJt   uint8\n\tJf   uint8\n\tK    uint32\n}\n\ntype SockFprog struct {\n\tLen    uint16\n\tFilter *SockFilter\n}\n\ntype InotifyEvent struct {\n\tWd     int32\n\tMask   uint32\n\tCookie uint32\n\tLen    uint32\n}\n\nconst SizeofInotifyEvent = 0x10\n\ntype PtraceRegs struct {\n\tGpr       [32]uint64\n\tNip       uint64\n\tMsr       uint64\n\tOrig_gpr3 uint64\n\tCtr       uint64\n\tLink      uint64\n\tXer       uint64\n\tCcr       uint64\n\tSofte     uint64\n\tTrap      uint64\n\tDar       uint64\n\tDsisr     uint64\n\tResult    uint64\n}\n\ntype FdSet struct {\n\tBits [16]int64\n}\n\ntype Sysinfo_t struct {\n\tUptime    int64\n\tLoads     [3]uint64\n\tTotalram  uint64\n\tFreeram   uint64\n\tSharedram uint64\n\tBufferram uint64\n\tTotalswap uint64\n\tFreeswap  uint64\n\tProcs     uint16\n\tPad       uint16\n\tTotalhigh uint64\n\tFreehigh  uint64\n\tUnit      uint32\n\t_         [0]uint8\n\t_         [4]byte\n}\n\ntype Utsname struct {\n\tSysname    [65]byte\n\tNodename   [65]byte\n\tRelease    [65]byte\n\tVersion    [65]byte\n\tMachine    [65]byte\n\tDomainname [65]byte\n}\n\ntype Ustat_t struct {\n\tTfree  int32\n\tTinode uint64\n\tFname  [6]uint8\n\tFpack  [6]uint8\n\t_      [4]byte\n}\n\ntype EpollEvent struct {\n\tEvents uint32\n\t_      int32\n\tFd     int32\n\tPad    int32\n}\n\nconst (\n\tAT_EMPTY_PATH   = 0x1000\n\tAT_FDCWD        = -0x64\n\tAT_NO_AUTOMOUNT = 0x800\n\tAT_REMOVEDIR    = 0x200\n\n\tAT_STATX_SYNC_AS_STAT = 0x0\n\tAT_STATX_FORCE_SYNC   = 0x2000\n\tAT_STATX_DONT_SYNC    = 0x4000\n\n\tAT_SYMLINK_FOLLOW   = 0x400\n\tAT_SYMLINK_NOFOLLOW = 0x100\n\n\tAT_EACCESS = 0x200\n)\n\ntype PollFd struct {\n\tFd      int32\n\tEvents  int16\n\tRevents int16\n}\n\nconst (\n\tPOLLIN    = 0x1\n\tPOLLPRI   = 0x2\n\tPOLLOUT   = 0x4\n\tPOLLRDHUP = 0x2000\n\tPOLLERR   = 0x8\n\tPOLLHUP   = 0x10\n\tPOLLNVAL  = 0x20\n)\n\ntype Sigset_t struct {\n\tVal [16]uint64\n}\n\nconst _C__NSIG = 0x41\n\ntype SignalfdSiginfo struct {\n\tSigno     uint32\n\tErrno     int32\n\tCode      int32\n\tPid       uint32\n\tUid       uint32\n\tFd        int32\n\tTid       uint32\n\tBand      uint32\n\tOverrun   uint32\n\tTrapno    uint32\n\tStatus    int32\n\tInt       int32\n\tPtr       uint64\n\tUtime     uint64\n\tStime     uint64\n\tAddr      uint64\n\tAddr_lsb  uint16\n\t_         uint16\n\tSyscall   int32\n\tCall_addr uint64\n\tArch      uint32\n\t_         [28]uint8\n}\n\nconst PERF_IOC_FLAG_GROUP = 0x1\n\ntype Termios struct {\n\tIflag  uint32\n\tOflag  uint32\n\tCflag  uint32\n\tLflag  uint32\n\tCc     [19]uint8\n\tLine   uint8\n\tIspeed uint32\n\tOspeed uint32\n}\n\ntype Winsize struct {\n\tRow    uint16\n\tCol    uint16\n\tXpixel uint16\n\tYpixel uint16\n}\n\ntype Taskstats struct {\n\tVersion                   uint16\n\tAc_exitcode               uint32\n\tAc_flag                   uint8\n\tAc_nice                   uint8\n\tCpu_count                 uint64\n\tCpu_delay_total           uint64\n\tBlkio_count               uint64\n\tBlkio_delay_total         uint64\n\tSwapin_count              uint64\n\tSwapin_delay_total        uint64\n\tCpu_run_real_total        uint64\n\tCpu_run_virtual_total     uint64\n\tAc_comm                   [32]uint8\n\tAc_sched                  uint8\n\tAc_pad                    [3]uint8\n\t_                         [4]byte\n\tAc_uid                    uint32\n\tAc_gid                    uint32\n\tAc_pid                    uint32\n\tAc_ppid                   uint32\n\tAc_btime                  uint32\n\tAc_etime                  uint64\n\tAc_utime                  uint64\n\tAc_stime                  uint64\n\tAc_minflt                 uint64\n\tAc_majflt                 uint64\n\tCoremem                   uint64\n\tVirtmem                   uint64\n\tHiwater_rss               uint64\n\tHiwater_vm                uint64\n\tRead_char                 uint64\n\tWrite_char                uint64\n\tRead_syscalls             uint64\n\tWrite_syscalls            uint64\n\tRead_bytes                uint64\n\tWrite_bytes               uint64\n\tCancelled_write_bytes     uint64\n\tNvcsw                     uint64\n\tNivcsw                    uint64\n\tAc_utimescaled            uint64\n\tAc_stimescaled            uint64\n\tCpu_scaled_run_real_total uint64\n\tFreepages_count           uint64\n\tFreepages_delay_total     uint64\n\tThrashing_count           uint64\n\tThrashing_delay_total     uint64\n}\n\nconst (\n\tTASKSTATS_CMD_UNSPEC                  = 0x0\n\tTASKSTATS_CMD_GET                     = 0x1\n\tTASKSTATS_CMD_NEW                     = 0x2\n\tTASKSTATS_TYPE_UNSPEC                 = 0x0\n\tTASKSTATS_TYPE_PID                    = 0x1\n\tTASKSTATS_TYPE_TGID                   = 0x2\n\tTASKSTATS_TYPE_STATS                  = 0x3\n\tTASKSTATS_TYPE_AGGR_PID               = 0x4\n\tTASKSTATS_TYPE_AGGR_TGID              = 0x5\n\tTASKSTATS_TYPE_NULL                   = 0x6\n\tTASKSTATS_CMD_ATTR_UNSPEC             = 0x0\n\tTASKSTATS_CMD_ATTR_PID                = 0x1\n\tTASKSTATS_CMD_ATTR_TGID               = 0x2\n\tTASKSTATS_CMD_ATTR_REGISTER_CPUMASK   = 0x3\n\tTASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4\n)\n\ntype CGroupStats struct {\n\tSleeping        uint64\n\tRunning         uint64\n\tStopped         uint64\n\tUninterruptible uint64\n\tIo_wait         uint64\n}\n\nconst (\n\tCGROUPSTATS_CMD_UNSPEC        = 0x3\n\tCGROUPSTATS_CMD_GET           = 0x4\n\tCGROUPSTATS_CMD_NEW           = 0x5\n\tCGROUPSTATS_TYPE_UNSPEC       = 0x0\n\tCGROUPSTATS_TYPE_CGROUP_STATS = 0x1\n\tCGROUPSTATS_CMD_ATTR_UNSPEC   = 0x0\n\tCGROUPSTATS_CMD_ATTR_FD       = 0x1\n)\n\ntype Genlmsghdr struct {\n\tCmd      uint8\n\tVersion  uint8\n\tReserved uint16\n}\n\nconst (\n\tCTRL_CMD_UNSPEC            = 0x0\n\tCTRL_CMD_NEWFAMILY         = 0x1\n\tCTRL_CMD_DELFAMILY         = 0x2\n\tCTRL_CMD_GETFAMILY         = 0x3\n\tCTRL_CMD_NEWOPS            = 0x4\n\tCTRL_CMD_DELOPS            = 0x5\n\tCTRL_CMD_GETOPS            = 0x6\n\tCTRL_CMD_NEWMCAST_GRP      = 0x7\n\tCTRL_CMD_DELMCAST_GRP      = 0x8\n\tCTRL_CMD_GETMCAST_GRP      = 0x9\n\tCTRL_ATTR_UNSPEC           = 0x0\n\tCTRL_ATTR_FAMILY_ID        = 0x1\n\tCTRL_ATTR_FAMILY_NAME      = 0x2\n\tCTRL_ATTR_VERSION          = 0x3\n\tCTRL_ATTR_HDRSIZE          = 0x4\n\tCTRL_ATTR_MAXATTR          = 0x5\n\tCTRL_ATTR_OPS              = 0x6\n\tCTRL_ATTR_MCAST_GROUPS     = 0x7\n\tCTRL_ATTR_OP_UNSPEC        = 0x0\n\tCTRL_ATTR_OP_ID            = 0x1\n\tCTRL_ATTR_OP_FLAGS         = 0x2\n\tCTRL_ATTR_MCAST_GRP_UNSPEC = 0x0\n\tCTRL_ATTR_MCAST_GRP_NAME   = 0x1\n\tCTRL_ATTR_MCAST_GRP_ID     = 0x2\n)\n\ntype cpuMask uint64\n\nconst (\n\t_CPU_SETSIZE = 0x400\n\t_NCPUBITS    = 0x40\n)\n\nconst (\n\tBDADDR_BREDR     = 0x0\n\tBDADDR_LE_PUBLIC = 0x1\n\tBDADDR_LE_RANDOM = 0x2\n)\n\ntype PerfEventAttr struct {\n\tType               uint32\n\tSize               uint32\n\tConfig             uint64\n\tSample             uint64\n\tSample_type        uint64\n\tRead_format        uint64\n\tBits               uint64\n\tWakeup             uint32\n\tBp_type            uint32\n\tExt1               uint64\n\tExt2               uint64\n\tBranch_sample_type uint64\n\tSample_regs_user   uint64\n\tSample_stack_user  uint32\n\tClockid            int32\n\tSample_regs_intr   uint64\n\tAux_watermark      uint32\n\tSample_max_stack   uint16\n\t_                  uint16\n}\n\ntype PerfEventMmapPage struct {\n\tVersion        uint32\n\tCompat_version uint32\n\tLock           uint32\n\tIndex          uint32\n\tOffset         int64\n\tTime_enabled   uint64\n\tTime_running   uint64\n\tCapabilities   uint64\n\tPmc_width      uint16\n\tTime_shift     uint16\n\tTime_mult      uint32\n\tTime_offset    uint64\n\tTime_zero      uint64\n\tSize           uint32\n\t_              [948]uint8\n\tData_head      uint64\n\tData_tail      uint64\n\tData_offset    uint64\n\tData_size      uint64\n\tAux_head       uint64\n\tAux_tail       uint64\n\tAux_offset     uint64\n\tAux_size       uint64\n}\n\nconst (\n\tPerfBitDisabled               uint64 = CBitFieldMaskBit0\n\tPerfBitInherit                       = CBitFieldMaskBit1\n\tPerfBitPinned                        = CBitFieldMaskBit2\n\tPerfBitExclusive                     = CBitFieldMaskBit3\n\tPerfBitExcludeUser                   = CBitFieldMaskBit4\n\tPerfBitExcludeKernel                 = CBitFieldMaskBit5\n\tPerfBitExcludeHv                     = CBitFieldMaskBit6\n\tPerfBitExcludeIdle                   = CBitFieldMaskBit7\n\tPerfBitMmap                          = CBitFieldMaskBit8\n\tPerfBitComm                          = CBitFieldMaskBit9\n\tPerfBitFreq                          = CBitFieldMaskBit10\n\tPerfBitInheritStat                   = CBitFieldMaskBit11\n\tPerfBitEnableOnExec                  = CBitFieldMaskBit12\n\tPerfBitTask                          = CBitFieldMaskBit13\n\tPerfBitWatermark                     = CBitFieldMaskBit14\n\tPerfBitPreciseIPBit1                 = CBitFieldMaskBit15\n\tPerfBitPreciseIPBit2                 = CBitFieldMaskBit16\n\tPerfBitMmapData                      = CBitFieldMaskBit17\n\tPerfBitSampleIDAll                   = CBitFieldMaskBit18\n\tPerfBitExcludeHost                   = CBitFieldMaskBit19\n\tPerfBitExcludeGuest                  = CBitFieldMaskBit20\n\tPerfBitExcludeCallchainKernel        = CBitFieldMaskBit21\n\tPerfBitExcludeCallchainUser          = CBitFieldMaskBit22\n\tPerfBitMmap2                         = CBitFieldMaskBit23\n\tPerfBitCommExec                      = CBitFieldMaskBit24\n\tPerfBitUseClockID                    = CBitFieldMaskBit25\n\tPerfBitContextSwitch                 = CBitFieldMaskBit26\n)\n\nconst (\n\tPERF_TYPE_HARDWARE   = 0x0\n\tPERF_TYPE_SOFTWARE   = 0x1\n\tPERF_TYPE_TRACEPOINT = 0x2\n\tPERF_TYPE_HW_CACHE   = 0x3\n\tPERF_TYPE_RAW        = 0x4\n\tPERF_TYPE_BREAKPOINT = 0x5\n\n\tPERF_COUNT_HW_CPU_CYCLES              = 0x0\n\tPERF_COUNT_HW_INSTRUCTIONS            = 0x1\n\tPERF_COUNT_HW_CACHE_REFERENCES        = 0x2\n\tPERF_COUNT_HW_CACHE_MISSES            = 0x3\n\tPERF_COUNT_HW_BRANCH_INSTRUCTIONS     = 0x4\n\tPERF_COUNT_HW_BRANCH_MISSES           = 0x5\n\tPERF_COUNT_HW_BUS_CYCLES              = 0x6\n\tPERF_COUNT_HW_STALLED_CYCLES_FRONTEND = 0x7\n\tPERF_COUNT_HW_STALLED_CYCLES_BACKEND  = 0x8\n\tPERF_COUNT_HW_REF_CPU_CYCLES          = 0x9\n\n\tPERF_COUNT_HW_CACHE_L1D  = 0x0\n\tPERF_COUNT_HW_CACHE_L1I  = 0x1\n\tPERF_COUNT_HW_CACHE_LL   = 0x2\n\tPERF_COUNT_HW_CACHE_DTLB = 0x3\n\tPERF_COUNT_HW_CACHE_ITLB = 0x4\n\tPERF_COUNT_HW_CACHE_BPU  = 0x5\n\tPERF_COUNT_HW_CACHE_NODE = 0x6\n\n\tPERF_COUNT_HW_CACHE_OP_READ     = 0x0\n\tPERF_COUNT_HW_CACHE_OP_WRITE    = 0x1\n\tPERF_COUNT_HW_CACHE_OP_PREFETCH = 0x2\n\n\tPERF_COUNT_HW_CACHE_RESULT_ACCESS = 0x0\n\tPERF_COUNT_HW_CACHE_RESULT_MISS   = 0x1\n\n\tPERF_COUNT_SW_CPU_CLOCK        = 0x0\n\tPERF_COUNT_SW_TASK_CLOCK       = 0x1\n\tPERF_COUNT_SW_PAGE_FAULTS      = 0x2\n\tPERF_COUNT_SW_CONTEXT_SWITCHES = 0x3\n\tPERF_COUNT_SW_CPU_MIGRATIONS   = 0x4\n\tPERF_COUNT_SW_PAGE_FAULTS_MIN  = 0x5\n\tPERF_COUNT_SW_PAGE_FAULTS_MAJ  = 0x6\n\tPERF_COUNT_SW_ALIGNMENT_FAULTS = 0x7\n\tPERF_COUNT_SW_EMULATION_FAULTS = 0x8\n\tPERF_COUNT_SW_DUMMY            = 0x9\n\tPERF_COUNT_SW_BPF_OUTPUT       = 0xa\n\n\tPERF_SAMPLE_IP           = 0x1\n\tPERF_SAMPLE_TID          = 0x2\n\tPERF_SAMPLE_TIME         = 0x4\n\tPERF_SAMPLE_ADDR         = 0x8\n\tPERF_SAMPLE_READ         = 0x10\n\tPERF_SAMPLE_CALLCHAIN    = 0x20\n\tPERF_SAMPLE_ID           = 0x40\n\tPERF_SAMPLE_CPU          = 0x80\n\tPERF_SAMPLE_PERIOD       = 0x100\n\tPERF_SAMPLE_STREAM_ID    = 0x200\n\tPERF_SAMPLE_RAW          = 0x400\n\tPERF_SAMPLE_BRANCH_STACK = 0x800\n\n\tPERF_SAMPLE_BRANCH_USER       = 0x1\n\tPERF_SAMPLE_BRANCH_KERNEL     = 0x2\n\tPERF_SAMPLE_BRANCH_HV         = 0x4\n\tPERF_SAMPLE_BRANCH_ANY        = 0x8\n\tPERF_SAMPLE_BRANCH_ANY_CALL   = 0x10\n\tPERF_SAMPLE_BRANCH_ANY_RETURN = 0x20\n\tPERF_SAMPLE_BRANCH_IND_CALL   = 0x40\n\tPERF_SAMPLE_BRANCH_ABORT_TX   = 0x80\n\tPERF_SAMPLE_BRANCH_IN_TX      = 0x100\n\tPERF_SAMPLE_BRANCH_NO_TX      = 0x200\n\tPERF_SAMPLE_BRANCH_COND       = 0x400\n\tPERF_SAMPLE_BRANCH_CALL_STACK = 0x800\n\tPERF_SAMPLE_BRANCH_IND_JUMP   = 0x1000\n\tPERF_SAMPLE_BRANCH_CALL       = 0x2000\n\tPERF_SAMPLE_BRANCH_NO_FLAGS   = 0x4000\n\tPERF_SAMPLE_BRANCH_NO_CYCLES  = 0x8000\n\tPERF_SAMPLE_BRANCH_TYPE_SAVE  = 0x10000\n\n\tPERF_FORMAT_TOTAL_TIME_ENABLED = 0x1\n\tPERF_FORMAT_TOTAL_TIME_RUNNING = 0x2\n\tPERF_FORMAT_ID                 = 0x4\n\tPERF_FORMAT_GROUP              = 0x8\n\n\tPERF_RECORD_MMAP            = 0x1\n\tPERF_RECORD_LOST            = 0x2\n\tPERF_RECORD_COMM            = 0x3\n\tPERF_RECORD_EXIT            = 0x4\n\tPERF_RECORD_THROTTLE        = 0x5\n\tPERF_RECORD_UNTHROTTLE      = 0x6\n\tPERF_RECORD_FORK            = 0x7\n\tPERF_RECORD_READ            = 0x8\n\tPERF_RECORD_SAMPLE          = 0x9\n\tPERF_RECORD_MMAP2           = 0xa\n\tPERF_RECORD_AUX             = 0xb\n\tPERF_RECORD_ITRACE_START    = 0xc\n\tPERF_RECORD_LOST_SAMPLES    = 0xd\n\tPERF_RECORD_SWITCH          = 0xe\n\tPERF_RECORD_SWITCH_CPU_WIDE = 0xf\n\tPERF_RECORD_NAMESPACES      = 0x10\n\n\tPERF_CONTEXT_HV     = -0x20\n\tPERF_CONTEXT_KERNEL = -0x80\n\tPERF_CONTEXT_USER   = -0x200\n\n\tPERF_CONTEXT_GUEST        = -0x800\n\tPERF_CONTEXT_GUEST_KERNEL = -0x880\n\tPERF_CONTEXT_GUEST_USER   = -0xa00\n\n\tPERF_FLAG_FD_NO_GROUP = 0x1\n\tPERF_FLAG_FD_OUTPUT   = 0x2\n\tPERF_FLAG_PID_CGROUP  = 0x4\n\tPERF_FLAG_FD_CLOEXEC  = 0x8\n)\n\nconst (\n\tCBitFieldMaskBit0  = 0x1\n\tCBitFieldMaskBit1  = 0x2\n\tCBitFieldMaskBit2  = 0x4\n\tCBitFieldMaskBit3  = 0x8\n\tCBitFieldMaskBit4  = 0x10\n\tCBitFieldMaskBit5  = 0x20\n\tCBitFieldMaskBit6  = 0x40\n\tCBitFieldMaskBit7  = 0x80\n\tCBitFieldMaskBit8  = 0x100\n\tCBitFieldMaskBit9  = 0x200\n\tCBitFieldMaskBit10 = 0x400\n\tCBitFieldMaskBit11 = 0x800\n\tCBitFieldMaskBit12 = 0x1000\n\tCBitFieldMaskBit13 = 0x2000\n\tCBitFieldMaskBit14 = 0x4000\n\tCBitFieldMaskBit15 = 0x8000\n\tCBitFieldMaskBit16 = 0x10000\n\tCBitFieldMaskBit17 = 0x20000\n\tCBitFieldMaskBit18 = 0x40000\n\tCBitFieldMaskBit19 = 0x80000\n\tCBitFieldMaskBit20 = 0x100000\n\tCBitFieldMaskBit21 = 0x200000\n\tCBitFieldMaskBit22 = 0x400000\n\tCBitFieldMaskBit23 = 0x800000\n\tCBitFieldMaskBit24 = 0x1000000\n\tCBitFieldMaskBit25 = 0x2000000\n\tCBitFieldMaskBit26 = 0x4000000\n\tCBitFieldMaskBit27 = 0x8000000\n\tCBitFieldMaskBit28 = 0x10000000\n\tCBitFieldMaskBit29 = 0x20000000\n\tCBitFieldMaskBit30 = 0x40000000\n\tCBitFieldMaskBit31 = 0x80000000\n\tCBitFieldMaskBit32 = 0x100000000\n\tCBitFieldMaskBit33 = 0x200000000\n\tCBitFieldMaskBit34 = 0x400000000\n\tCBitFieldMaskBit35 = 0x800000000\n\tCBitFieldMaskBit36 = 0x1000000000\n\tCBitFieldMaskBit37 = 0x2000000000\n\tCBitFieldMaskBit38 = 0x4000000000\n\tCBitFieldMaskBit39 = 0x8000000000\n\tCBitFieldMaskBit40 = 0x10000000000\n\tCBitFieldMaskBit41 = 0x20000000000\n\tCBitFieldMaskBit42 = 0x40000000000\n\tCBitFieldMaskBit43 = 0x80000000000\n\tCBitFieldMaskBit44 = 0x100000000000\n\tCBitFieldMaskBit45 = 0x200000000000\n\tCBitFieldMaskBit46 = 0x400000000000\n\tCBitFieldMaskBit47 = 0x800000000000\n\tCBitFieldMaskBit48 = 0x1000000000000\n\tCBitFieldMaskBit49 = 0x2000000000000\n\tCBitFieldMaskBit50 = 0x4000000000000\n\tCBitFieldMaskBit51 = 0x8000000000000\n\tCBitFieldMaskBit52 = 0x10000000000000\n\tCBitFieldMaskBit53 = 0x20000000000000\n\tCBitFieldMaskBit54 = 0x40000000000000\n\tCBitFieldMaskBit55 = 0x80000000000000\n\tCBitFieldMaskBit56 = 0x100000000000000\n\tCBitFieldMaskBit57 = 0x200000000000000\n\tCBitFieldMaskBit58 = 0x400000000000000\n\tCBitFieldMaskBit59 = 0x800000000000000\n\tCBitFieldMaskBit60 = 0x1000000000000000\n\tCBitFieldMaskBit61 = 0x2000000000000000\n\tCBitFieldMaskBit62 = 0x4000000000000000\n\tCBitFieldMaskBit63 = 0x8000000000000000\n)\n\ntype SockaddrStorage struct {\n\tFamily uint16\n\t_      [118]uint8\n\t_      uint64\n}\n\ntype TCPMD5Sig struct {\n\tAddr      SockaddrStorage\n\tFlags     uint8\n\tPrefixlen uint8\n\tKeylen    uint16\n\t_         uint32\n\tKey       [80]uint8\n}\n\ntype HDDriveCmdHdr struct {\n\tCommand uint8\n\tNumber  uint8\n\tFeature uint8\n\tCount   uint8\n}\n\ntype HDGeometry struct {\n\tHeads     uint8\n\tSectors   uint8\n\tCylinders uint16\n\tStart     uint64\n}\n\ntype HDDriveID struct {\n\tConfig         uint16\n\tCyls           uint16\n\tReserved2      uint16\n\tHeads          uint16\n\tTrack_bytes    uint16\n\tSector_bytes   uint16\n\tSectors        uint16\n\tVendor0        uint16\n\tVendor1        uint16\n\tVendor2        uint16\n\tSerial_no      [20]uint8\n\tBuf_type       uint16\n\tBuf_size       uint16\n\tEcc_bytes      uint16\n\tFw_rev         [8]uint8\n\tModel          [40]uint8\n\tMax_multsect   uint8\n\tVendor3        uint8\n\tDword_io       uint16\n\tVendor4        uint8\n\tCapability     uint8\n\tReserved50     uint16\n\tVendor5        uint8\n\tTPIO           uint8\n\tVendor6        uint8\n\tTDMA           uint8\n\tField_valid    uint16\n\tCur_cyls       uint16\n\tCur_heads      uint16\n\tCur_sectors    uint16\n\tCur_capacity0  uint16\n\tCur_capacity1  uint16\n\tMultsect       uint8\n\tMultsect_valid uint8\n\tLba_capacity   uint32\n\tDma_1word      uint16\n\tDma_mword      uint16\n\tEide_pio_modes uint16\n\tEide_dma_min   uint16\n\tEide_dma_time  uint16\n\tEide_pio       uint16\n\tEide_pio_iordy uint16\n\tWords69_70     [2]uint16\n\tWords71_74     [4]uint16\n\tQueue_depth    uint16\n\tWords76_79     [4]uint16\n\tMajor_rev_num  uint16\n\tMinor_rev_num  uint16\n\tCommand_set_1  uint16\n\tCommand_set_2  uint16\n\tCfsse          uint16\n\tCfs_enable_1   uint16\n\tCfs_enable_2   uint16\n\tCsf_default    uint16\n\tDma_ultra      uint16\n\tTrseuc         uint16\n\tTrsEuc         uint16\n\tCurAPMvalues   uint16\n\tMprc           uint16\n\tHw_config      uint16\n\tAcoustic       uint16\n\tMsrqs          uint16\n\tSxfert         uint16\n\tSal            uint16\n\tSpg            uint32\n\tLba_capacity_2 uint64\n\tWords104_125   [22]uint16\n\tLast_lun       uint16\n\tWord127        uint16\n\tDlf            uint16\n\tCsfo           uint16\n\tWords130_155   [26]uint16\n\tWord156        uint16\n\tWords157_159   [3]uint16\n\tCfa_power      uint16\n\tWords161_175   [15]uint16\n\tWords176_205   [30]uint16\n\tWords206_254   [49]uint16\n\tIntegrity_word uint16\n}\n\ntype Statfs_t struct {\n\tType    int64\n\tBsize   int64\n\tBlocks  uint64\n\tBfree   uint64\n\tBavail  uint64\n\tFiles   uint64\n\tFfree   uint64\n\tFsid    Fsid\n\tNamelen int64\n\tFrsize  int64\n\tFlags   int64\n\tSpare   [4]int64\n}\n\nconst (\n\tST_MANDLOCK    = 0x40\n\tST_NOATIME     = 0x400\n\tST_NODEV       = 0x4\n\tST_NODIRATIME  = 0x800\n\tST_NOEXEC      = 0x8\n\tST_NOSUID      = 0x2\n\tST_RDONLY      = 0x1\n\tST_RELATIME    = 0x1000\n\tST_SYNCHRONOUS = 0x10\n)\n\ntype TpacketHdr struct {\n\tStatus  uint64\n\tLen     uint32\n\tSnaplen uint32\n\tMac     uint16\n\tNet     uint16\n\tSec     uint32\n\tUsec    uint32\n\t_       [4]byte\n}\n\ntype Tpacket2Hdr struct {\n\tStatus    uint32\n\tLen       uint32\n\tSnaplen   uint32\n\tMac       uint16\n\tNet       uint16\n\tSec       uint32\n\tNsec      uint32\n\tVlan_tci  uint16\n\tVlan_tpid uint16\n\t_         [4]uint8\n}\n\ntype Tpacket3Hdr struct {\n\tNext_offset uint32\n\tSec         uint32\n\tNsec        uint32\n\tSnaplen     uint32\n\tLen         uint32\n\tStatus      uint32\n\tMac         uint16\n\tNet         uint16\n\tHv1         TpacketHdrVariant1\n\t_           [8]uint8\n}\n\ntype TpacketHdrVariant1 struct {\n\tRxhash    uint32\n\tVlan_tci  uint32\n\tVlan_tpid uint16\n\t_         uint16\n}\n\ntype TpacketBlockDesc struct {\n\tVersion uint32\n\tTo_priv uint32\n\tHdr     [40]byte\n}\n\ntype TpacketBDTS struct {\n\tSec  uint32\n\tUsec uint32\n}\n\ntype TpacketHdrV1 struct {\n\tBlock_status        uint32\n\tNum_pkts            uint32\n\tOffset_to_first_pkt uint32\n\tBlk_len             uint32\n\tSeq_num             uint64\n\tTs_first_pkt        TpacketBDTS\n\tTs_last_pkt         TpacketBDTS\n}\n\ntype TpacketReq struct {\n\tBlock_size uint32\n\tBlock_nr   uint32\n\tFrame_size uint32\n\tFrame_nr   uint32\n}\n\ntype TpacketReq3 struct {\n\tBlock_size       uint32\n\tBlock_nr         uint32\n\tFrame_size       uint32\n\tFrame_nr         uint32\n\tRetire_blk_tov   uint32\n\tSizeof_priv      uint32\n\tFeature_req_word uint32\n}\n\ntype TpacketStats struct {\n\tPackets uint32\n\tDrops   uint32\n}\n\ntype TpacketStatsV3 struct {\n\tPackets      uint32\n\tDrops        uint32\n\tFreeze_q_cnt uint32\n}\n\ntype TpacketAuxdata struct {\n\tStatus    uint32\n\tLen       uint32\n\tSnaplen   uint32\n\tMac       uint16\n\tNet       uint16\n\tVlan_tci  uint16\n\tVlan_tpid uint16\n}\n\nconst (\n\tTPACKET_V1 = 0x0\n\tTPACKET_V2 = 0x1\n\tTPACKET_V3 = 0x2\n)\n\nconst (\n\tSizeofTpacketHdr  = 0x20\n\tSizeofTpacket2Hdr = 0x20\n\tSizeofTpacket3Hdr = 0x30\n\n\tSizeofTpacketStats   = 0x8\n\tSizeofTpacketStatsV3 = 0xc\n)\n\nconst (\n\tNF_INET_PRE_ROUTING  = 0x0\n\tNF_INET_LOCAL_IN     = 0x1\n\tNF_INET_FORWARD      = 0x2\n\tNF_INET_LOCAL_OUT    = 0x3\n\tNF_INET_POST_ROUTING = 0x4\n\tNF_INET_NUMHOOKS     = 0x5\n)\n\nconst (\n\tNF_NETDEV_INGRESS  = 0x0\n\tNF_NETDEV_NUMHOOKS = 0x1\n)\n\nconst (\n\tNFPROTO_UNSPEC   = 0x0\n\tNFPROTO_INET     = 0x1\n\tNFPROTO_IPV4     = 0x2\n\tNFPROTO_ARP      = 0x3\n\tNFPROTO_NETDEV   = 0x5\n\tNFPROTO_BRIDGE   = 0x7\n\tNFPROTO_IPV6     = 0xa\n\tNFPROTO_DECNET   = 0xc\n\tNFPROTO_NUMPROTO = 0xd\n)\n\ntype Nfgenmsg struct {\n\tNfgen_family uint8\n\tVersion      uint8\n\tRes_id       uint16\n}\n\nconst (\n\tNFNL_BATCH_UNSPEC = 0x0\n\tNFNL_BATCH_GENID  = 0x1\n)\n\nconst (\n\tNFT_REG_VERDICT                   = 0x0\n\tNFT_REG_1                         = 0x1\n\tNFT_REG_2                         = 0x2\n\tNFT_REG_3                         = 0x3\n\tNFT_REG_4                         = 0x4\n\tNFT_REG32_00                      = 0x8\n\tNFT_REG32_01                      = 0x9\n\tNFT_REG32_02                      = 0xa\n\tNFT_REG32_03                      = 0xb\n\tNFT_REG32_04                      = 0xc\n\tNFT_REG32_05                      = 0xd\n\tNFT_REG32_06                      = 0xe\n\tNFT_REG32_07                      = 0xf\n\tNFT_REG32_08                      = 0x10\n\tNFT_REG32_09                      = 0x11\n\tNFT_REG32_10                      = 0x12\n\tNFT_REG32_11                      = 0x13\n\tNFT_REG32_12                      = 0x14\n\tNFT_REG32_13                      = 0x15\n\tNFT_REG32_14                      = 0x16\n\tNFT_REG32_15                      = 0x17\n\tNFT_CONTINUE                      = -0x1\n\tNFT_BREAK                         = -0x2\n\tNFT_JUMP                          = -0x3\n\tNFT_GOTO                          = -0x4\n\tNFT_RETURN                        = -0x5\n\tNFT_MSG_NEWTABLE                  = 0x0\n\tNFT_MSG_GETTABLE                  = 0x1\n\tNFT_MSG_DELTABLE                  = 0x2\n\tNFT_MSG_NEWCHAIN                  = 0x3\n\tNFT_MSG_GETCHAIN                  = 0x4\n\tNFT_MSG_DELCHAIN                  = 0x5\n\tNFT_MSG_NEWRULE                   = 0x6\n\tNFT_MSG_GETRULE                   = 0x7\n\tNFT_MSG_DELRULE                   = 0x8\n\tNFT_MSG_NEWSET                    = 0x9\n\tNFT_MSG_GETSET                    = 0xa\n\tNFT_MSG_DELSET                    = 0xb\n\tNFT_MSG_NEWSETELEM                = 0xc\n\tNFT_MSG_GETSETELEM                = 0xd\n\tNFT_MSG_DELSETELEM                = 0xe\n\tNFT_MSG_NEWGEN                    = 0xf\n\tNFT_MSG_GETGEN                    = 0x10\n\tNFT_MSG_TRACE                     = 0x11\n\tNFT_MSG_NEWOBJ                    = 0x12\n\tNFT_MSG_GETOBJ                    = 0x13\n\tNFT_MSG_DELOBJ                    = 0x14\n\tNFT_MSG_GETOBJ_RESET              = 0x15\n\tNFT_MSG_MAX                       = 0x19\n\tNFTA_LIST_UNPEC                   = 0x0\n\tNFTA_LIST_ELEM                    = 0x1\n\tNFTA_HOOK_UNSPEC                  = 0x0\n\tNFTA_HOOK_HOOKNUM                 = 0x1\n\tNFTA_HOOK_PRIORITY                = 0x2\n\tNFTA_HOOK_DEV                     = 0x3\n\tNFT_TABLE_F_DORMANT               = 0x1\n\tNFTA_TABLE_UNSPEC                 = 0x0\n\tNFTA_TABLE_NAME                   = 0x1\n\tNFTA_TABLE_FLAGS                  = 0x2\n\tNFTA_TABLE_USE                    = 0x3\n\tNFTA_CHAIN_UNSPEC                 = 0x0\n\tNFTA_CHAIN_TABLE                  = 0x1\n\tNFTA_CHAIN_HANDLE                 = 0x2\n\tNFTA_CHAIN_NAME                   = 0x3\n\tNFTA_CHAIN_HOOK                   = 0x4\n\tNFTA_CHAIN_POLICY                 = 0x5\n\tNFTA_CHAIN_USE                    = 0x6\n\tNFTA_CHAIN_TYPE                   = 0x7\n\tNFTA_CHAIN_COUNTERS               = 0x8\n\tNFTA_CHAIN_PAD                    = 0x9\n\tNFTA_RULE_UNSPEC                  = 0x0\n\tNFTA_RULE_TABLE                   = 0x1\n\tNFTA_RULE_CHAIN                   = 0x2\n\tNFTA_RULE_HANDLE                  = 0x3\n\tNFTA_RULE_EXPRESSIONS             = 0x4\n\tNFTA_RULE_COMPAT                  = 0x5\n\tNFTA_RULE_POSITION                = 0x6\n\tNFTA_RULE_USERDATA                = 0x7\n\tNFTA_RULE_PAD                     = 0x8\n\tNFTA_RULE_ID                      = 0x9\n\tNFT_RULE_COMPAT_F_INV             = 0x2\n\tNFT_RULE_COMPAT_F_MASK            = 0x2\n\tNFTA_RULE_COMPAT_UNSPEC           = 0x0\n\tNFTA_RULE_COMPAT_PROTO            = 0x1\n\tNFTA_RULE_COMPAT_FLAGS            = 0x2\n\tNFT_SET_ANONYMOUS                 = 0x1\n\tNFT_SET_CONSTANT                  = 0x2\n\tNFT_SET_INTERVAL                  = 0x4\n\tNFT_SET_MAP                       = 0x8\n\tNFT_SET_TIMEOUT                   = 0x10\n\tNFT_SET_EVAL                      = 0x20\n\tNFT_SET_OBJECT                    = 0x40\n\tNFT_SET_POL_PERFORMANCE           = 0x0\n\tNFT_SET_POL_MEMORY                = 0x1\n\tNFTA_SET_DESC_UNSPEC              = 0x0\n\tNFTA_SET_DESC_SIZE                = 0x1\n\tNFTA_SET_UNSPEC                   = 0x0\n\tNFTA_SET_TABLE                    = 0x1\n\tNFTA_SET_NAME                     = 0x2\n\tNFTA_SET_FLAGS                    = 0x3\n\tNFTA_SET_KEY_TYPE                 = 0x4\n\tNFTA_SET_KEY_LEN                  = 0x5\n\tNFTA_SET_DATA_TYPE                = 0x6\n\tNFTA_SET_DATA_LEN                 = 0x7\n\tNFTA_SET_POLICY                   = 0x8\n\tNFTA_SET_DESC                     = 0x9\n\tNFTA_SET_ID                       = 0xa\n\tNFTA_SET_TIMEOUT                  = 0xb\n\tNFTA_SET_GC_INTERVAL              = 0xc\n\tNFTA_SET_USERDATA                 = 0xd\n\tNFTA_SET_PAD                      = 0xe\n\tNFTA_SET_OBJ_TYPE                 = 0xf\n\tNFT_SET_ELEM_INTERVAL_END         = 0x1\n\tNFTA_SET_ELEM_UNSPEC              = 0x0\n\tNFTA_SET_ELEM_KEY                 = 0x1\n\tNFTA_SET_ELEM_DATA                = 0x2\n\tNFTA_SET_ELEM_FLAGS               = 0x3\n\tNFTA_SET_ELEM_TIMEOUT             = 0x4\n\tNFTA_SET_ELEM_EXPIRATION          = 0x5\n\tNFTA_SET_ELEM_USERDATA            = 0x6\n\tNFTA_SET_ELEM_EXPR                = 0x7\n\tNFTA_SET_ELEM_PAD                 = 0x8\n\tNFTA_SET_ELEM_OBJREF              = 0x9\n\tNFTA_SET_ELEM_LIST_UNSPEC         = 0x0\n\tNFTA_SET_ELEM_LIST_TABLE          = 0x1\n\tNFTA_SET_ELEM_LIST_SET            = 0x2\n\tNFTA_SET_ELEM_LIST_ELEMENTS       = 0x3\n\tNFTA_SET_ELEM_LIST_SET_ID         = 0x4\n\tNFT_DATA_VALUE                    = 0x0\n\tNFT_DATA_VERDICT                  = 0xffffff00\n\tNFTA_DATA_UNSPEC                  = 0x0\n\tNFTA_DATA_VALUE                   = 0x1\n\tNFTA_DATA_VERDICT                 = 0x2\n\tNFTA_VERDICT_UNSPEC               = 0x0\n\tNFTA_VERDICT_CODE                 = 0x1\n\tNFTA_VERDICT_CHAIN                = 0x2\n\tNFTA_EXPR_UNSPEC                  = 0x0\n\tNFTA_EXPR_NAME                    = 0x1\n\tNFTA_EXPR_DATA                    = 0x2\n\tNFTA_IMMEDIATE_UNSPEC             = 0x0\n\tNFTA_IMMEDIATE_DREG               = 0x1\n\tNFTA_IMMEDIATE_DATA               = 0x2\n\tNFTA_BITWISE_UNSPEC               = 0x0\n\tNFTA_BITWISE_SREG                 = 0x1\n\tNFTA_BITWISE_DREG                 = 0x2\n\tNFTA_BITWISE_LEN                  = 0x3\n\tNFTA_BITWISE_MASK                 = 0x4\n\tNFTA_BITWISE_XOR                  = 0x5\n\tNFT_BYTEORDER_NTOH                = 0x0\n\tNFT_BYTEORDER_HTON                = 0x1\n\tNFTA_BYTEORDER_UNSPEC             = 0x0\n\tNFTA_BYTEORDER_SREG               = 0x1\n\tNFTA_BYTEORDER_DREG               = 0x2\n\tNFTA_BYTEORDER_OP                 = 0x3\n\tNFTA_BYTEORDER_LEN                = 0x4\n\tNFTA_BYTEORDER_SIZE               = 0x5\n\tNFT_CMP_EQ                        = 0x0\n\tNFT_CMP_NEQ                       = 0x1\n\tNFT_CMP_LT                        = 0x2\n\tNFT_CMP_LTE                       = 0x3\n\tNFT_CMP_GT                        = 0x4\n\tNFT_CMP_GTE                       = 0x5\n\tNFTA_CMP_UNSPEC                   = 0x0\n\tNFTA_CMP_SREG                     = 0x1\n\tNFTA_CMP_OP                       = 0x2\n\tNFTA_CMP_DATA                     = 0x3\n\tNFT_RANGE_EQ                      = 0x0\n\tNFT_RANGE_NEQ                     = 0x1\n\tNFTA_RANGE_UNSPEC                 = 0x0\n\tNFTA_RANGE_SREG                   = 0x1\n\tNFTA_RANGE_OP                     = 0x2\n\tNFTA_RANGE_FROM_DATA              = 0x3\n\tNFTA_RANGE_TO_DATA                = 0x4\n\tNFT_LOOKUP_F_INV                  = 0x1\n\tNFTA_LOOKUP_UNSPEC                = 0x0\n\tNFTA_LOOKUP_SET                   = 0x1\n\tNFTA_LOOKUP_SREG                  = 0x2\n\tNFTA_LOOKUP_DREG                  = 0x3\n\tNFTA_LOOKUP_SET_ID                = 0x4\n\tNFTA_LOOKUP_FLAGS                 = 0x5\n\tNFT_DYNSET_OP_ADD                 = 0x0\n\tNFT_DYNSET_OP_UPDATE              = 0x1\n\tNFT_DYNSET_F_INV                  = 0x1\n\tNFTA_DYNSET_UNSPEC                = 0x0\n\tNFTA_DYNSET_SET_NAME              = 0x1\n\tNFTA_DYNSET_SET_ID                = 0x2\n\tNFTA_DYNSET_OP                    = 0x3\n\tNFTA_DYNSET_SREG_KEY              = 0x4\n\tNFTA_DYNSET_SREG_DATA             = 0x5\n\tNFTA_DYNSET_TIMEOUT               = 0x6\n\tNFTA_DYNSET_EXPR                  = 0x7\n\tNFTA_DYNSET_PAD                   = 0x8\n\tNFTA_DYNSET_FLAGS                 = 0x9\n\tNFT_PAYLOAD_LL_HEADER             = 0x0\n\tNFT_PAYLOAD_NETWORK_HEADER        = 0x1\n\tNFT_PAYLOAD_TRANSPORT_HEADER      = 0x2\n\tNFT_PAYLOAD_CSUM_NONE             = 0x0\n\tNFT_PAYLOAD_CSUM_INET             = 0x1\n\tNFT_PAYLOAD_L4CSUM_PSEUDOHDR      = 0x1\n\tNFTA_PAYLOAD_UNSPEC               = 0x0\n\tNFTA_PAYLOAD_DREG                 = 0x1\n\tNFTA_PAYLOAD_BASE                 = 0x2\n\tNFTA_PAYLOAD_OFFSET               = 0x3\n\tNFTA_PAYLOAD_LEN                  = 0x4\n\tNFTA_PAYLOAD_SREG                 = 0x5\n\tNFTA_PAYLOAD_CSUM_TYPE            = 0x6\n\tNFTA_PAYLOAD_CSUM_OFFSET          = 0x7\n\tNFTA_PAYLOAD_CSUM_FLAGS           = 0x8\n\tNFT_EXTHDR_F_PRESENT              = 0x1\n\tNFT_EXTHDR_OP_IPV6                = 0x0\n\tNFT_EXTHDR_OP_TCPOPT              = 0x1\n\tNFTA_EXTHDR_UNSPEC                = 0x0\n\tNFTA_EXTHDR_DREG                  = 0x1\n\tNFTA_EXTHDR_TYPE                  = 0x2\n\tNFTA_EXTHDR_OFFSET                = 0x3\n\tNFTA_EXTHDR_LEN                   = 0x4\n\tNFTA_EXTHDR_FLAGS                 = 0x5\n\tNFTA_EXTHDR_OP                    = 0x6\n\tNFTA_EXTHDR_SREG                  = 0x7\n\tNFT_META_LEN                      = 0x0\n\tNFT_META_PROTOCOL                 = 0x1\n\tNFT_META_PRIORITY                 = 0x2\n\tNFT_META_MARK                     = 0x3\n\tNFT_META_IIF                      = 0x4\n\tNFT_META_OIF                      = 0x5\n\tNFT_META_IIFNAME                  = 0x6\n\tNFT_META_OIFNAME                  = 0x7\n\tNFT_META_IIFTYPE                  = 0x8\n\tNFT_META_OIFTYPE                  = 0x9\n\tNFT_META_SKUID                    = 0xa\n\tNFT_META_SKGID                    = 0xb\n\tNFT_META_NFTRACE                  = 0xc\n\tNFT_META_RTCLASSID                = 0xd\n\tNFT_META_SECMARK                  = 0xe\n\tNFT_META_NFPROTO                  = 0xf\n\tNFT_META_L4PROTO                  = 0x10\n\tNFT_META_BRI_IIFNAME              = 0x11\n\tNFT_META_BRI_OIFNAME              = 0x12\n\tNFT_META_PKTTYPE                  = 0x13\n\tNFT_META_CPU                      = 0x14\n\tNFT_META_IIFGROUP                 = 0x15\n\tNFT_META_OIFGROUP                 = 0x16\n\tNFT_META_CGROUP                   = 0x17\n\tNFT_META_PRANDOM                  = 0x18\n\tNFT_RT_CLASSID                    = 0x0\n\tNFT_RT_NEXTHOP4                   = 0x1\n\tNFT_RT_NEXTHOP6                   = 0x2\n\tNFT_RT_TCPMSS                     = 0x3\n\tNFT_HASH_JENKINS                  = 0x0\n\tNFT_HASH_SYM                      = 0x1\n\tNFTA_HASH_UNSPEC                  = 0x0\n\tNFTA_HASH_SREG                    = 0x1\n\tNFTA_HASH_DREG                    = 0x2\n\tNFTA_HASH_LEN                     = 0x3\n\tNFTA_HASH_MODULUS                 = 0x4\n\tNFTA_HASH_SEED                    = 0x5\n\tNFTA_HASH_OFFSET                  = 0x6\n\tNFTA_HASH_TYPE                    = 0x7\n\tNFTA_META_UNSPEC                  = 0x0\n\tNFTA_META_DREG                    = 0x1\n\tNFTA_META_KEY                     = 0x2\n\tNFTA_META_SREG                    = 0x3\n\tNFTA_RT_UNSPEC                    = 0x0\n\tNFTA_RT_DREG                      = 0x1\n\tNFTA_RT_KEY                       = 0x2\n\tNFT_CT_STATE                      = 0x0\n\tNFT_CT_DIRECTION                  = 0x1\n\tNFT_CT_STATUS                     = 0x2\n\tNFT_CT_MARK                       = 0x3\n\tNFT_CT_SECMARK                    = 0x4\n\tNFT_CT_EXPIRATION                 = 0x5\n\tNFT_CT_HELPER                     = 0x6\n\tNFT_CT_L3PROTOCOL                 = 0x7\n\tNFT_CT_SRC                        = 0x8\n\tNFT_CT_DST                        = 0x9\n\tNFT_CT_PROTOCOL                   = 0xa\n\tNFT_CT_PROTO_SRC                  = 0xb\n\tNFT_CT_PROTO_DST                  = 0xc\n\tNFT_CT_LABELS                     = 0xd\n\tNFT_CT_PKTS                       = 0xe\n\tNFT_CT_BYTES                      = 0xf\n\tNFT_CT_AVGPKT                     = 0x10\n\tNFT_CT_ZONE                       = 0x11\n\tNFT_CT_EVENTMASK                  = 0x12\n\tNFTA_CT_UNSPEC                    = 0x0\n\tNFTA_CT_DREG                      = 0x1\n\tNFTA_CT_KEY                       = 0x2\n\tNFTA_CT_DIRECTION                 = 0x3\n\tNFTA_CT_SREG                      = 0x4\n\tNFT_LIMIT_PKTS                    = 0x0\n\tNFT_LIMIT_PKT_BYTES               = 0x1\n\tNFT_LIMIT_F_INV                   = 0x1\n\tNFTA_LIMIT_UNSPEC                 = 0x0\n\tNFTA_LIMIT_RATE                   = 0x1\n\tNFTA_LIMIT_UNIT                   = 0x2\n\tNFTA_LIMIT_BURST                  = 0x3\n\tNFTA_LIMIT_TYPE                   = 0x4\n\tNFTA_LIMIT_FLAGS                  = 0x5\n\tNFTA_LIMIT_PAD                    = 0x6\n\tNFTA_COUNTER_UNSPEC               = 0x0\n\tNFTA_COUNTER_BYTES                = 0x1\n\tNFTA_COUNTER_PACKETS              = 0x2\n\tNFTA_COUNTER_PAD                  = 0x3\n\tNFTA_LOG_UNSPEC                   = 0x0\n\tNFTA_LOG_GROUP                    = 0x1\n\tNFTA_LOG_PREFIX                   = 0x2\n\tNFTA_LOG_SNAPLEN                  = 0x3\n\tNFTA_LOG_QTHRESHOLD               = 0x4\n\tNFTA_LOG_LEVEL                    = 0x5\n\tNFTA_LOG_FLAGS                    = 0x6\n\tNFTA_QUEUE_UNSPEC                 = 0x0\n\tNFTA_QUEUE_NUM                    = 0x1\n\tNFTA_QUEUE_TOTAL                  = 0x2\n\tNFTA_QUEUE_FLAGS                  = 0x3\n\tNFTA_QUEUE_SREG_QNUM              = 0x4\n\tNFT_QUOTA_F_INV                   = 0x1\n\tNFT_QUOTA_F_DEPLETED              = 0x2\n\tNFTA_QUOTA_UNSPEC                 = 0x0\n\tNFTA_QUOTA_BYTES                  = 0x1\n\tNFTA_QUOTA_FLAGS                  = 0x2\n\tNFTA_QUOTA_PAD                    = 0x3\n\tNFTA_QUOTA_CONSUMED               = 0x4\n\tNFT_REJECT_ICMP_UNREACH           = 0x0\n\tNFT_REJECT_TCP_RST                = 0x1\n\tNFT_REJECT_ICMPX_UNREACH          = 0x2\n\tNFT_REJECT_ICMPX_NO_ROUTE         = 0x0\n\tNFT_REJECT_ICMPX_PORT_UNREACH     = 0x1\n\tNFT_REJECT_ICMPX_HOST_UNREACH     = 0x2\n\tNFT_REJECT_ICMPX_ADMIN_PROHIBITED = 0x3\n\tNFTA_REJECT_UNSPEC                = 0x0\n\tNFTA_REJECT_TYPE                  = 0x1\n\tNFTA_REJECT_ICMP_CODE             = 0x2\n\tNFT_NAT_SNAT                      = 0x0\n\tNFT_NAT_DNAT                      = 0x1\n\tNFTA_NAT_UNSPEC                   = 0x0\n\tNFTA_NAT_TYPE                     = 0x1\n\tNFTA_NAT_FAMILY                   = 0x2\n\tNFTA_NAT_REG_ADDR_MIN             = 0x3\n\tNFTA_NAT_REG_ADDR_MAX             = 0x4\n\tNFTA_NAT_REG_PROTO_MIN            = 0x5\n\tNFTA_NAT_REG_PROTO_MAX            = 0x6\n\tNFTA_NAT_FLAGS                    = 0x7\n\tNFTA_MASQ_UNSPEC                  = 0x0\n\tNFTA_MASQ_FLAGS                   = 0x1\n\tNFTA_MASQ_REG_PROTO_MIN           = 0x2\n\tNFTA_MASQ_REG_PROTO_MAX           = 0x3\n\tNFTA_REDIR_UNSPEC                 = 0x0\n\tNFTA_REDIR_REG_PROTO_MIN          = 0x1\n\tNFTA_REDIR_REG_PROTO_MAX          = 0x2\n\tNFTA_REDIR_FLAGS                  = 0x3\n\tNFTA_DUP_UNSPEC                   = 0x0\n\tNFTA_DUP_SREG_ADDR                = 0x1\n\tNFTA_DUP_SREG_DEV                 = 0x2\n\tNFTA_FWD_UNSPEC                   = 0x0\n\tNFTA_FWD_SREG_DEV                 = 0x1\n\tNFTA_OBJREF_UNSPEC                = 0x0\n\tNFTA_OBJREF_IMM_TYPE              = 0x1\n\tNFTA_OBJREF_IMM_NAME              = 0x2\n\tNFTA_OBJREF_SET_SREG              = 0x3\n\tNFTA_OBJREF_SET_NAME              = 0x4\n\tNFTA_OBJREF_SET_ID                = 0x5\n\tNFTA_GEN_UNSPEC                   = 0x0\n\tNFTA_GEN_ID                       = 0x1\n\tNFTA_GEN_PROC_PID                 = 0x2\n\tNFTA_GEN_PROC_NAME                = 0x3\n\tNFTA_FIB_UNSPEC                   = 0x0\n\tNFTA_FIB_DREG                     = 0x1\n\tNFTA_FIB_RESULT                   = 0x2\n\tNFTA_FIB_FLAGS                    = 0x3\n\tNFT_FIB_RESULT_UNSPEC             = 0x0\n\tNFT_FIB_RESULT_OIF                = 0x1\n\tNFT_FIB_RESULT_OIFNAME            = 0x2\n\tNFT_FIB_RESULT_ADDRTYPE           = 0x3\n\tNFTA_FIB_F_SADDR                  = 0x1\n\tNFTA_FIB_F_DADDR                  = 0x2\n\tNFTA_FIB_F_MARK                   = 0x4\n\tNFTA_FIB_F_IIF                    = 0x8\n\tNFTA_FIB_F_OIF                    = 0x10\n\tNFTA_FIB_F_PRESENT                = 0x20\n\tNFTA_CT_HELPER_UNSPEC             = 0x0\n\tNFTA_CT_HELPER_NAME               = 0x1\n\tNFTA_CT_HELPER_L3PROTO            = 0x2\n\tNFTA_CT_HELPER_L4PROTO            = 0x3\n\tNFTA_OBJ_UNSPEC                   = 0x0\n\tNFTA_OBJ_TABLE                    = 0x1\n\tNFTA_OBJ_NAME                     = 0x2\n\tNFTA_OBJ_TYPE                     = 0x3\n\tNFTA_OBJ_DATA                     = 0x4\n\tNFTA_OBJ_USE                      = 0x5\n\tNFTA_TRACE_UNSPEC                 = 0x0\n\tNFTA_TRACE_TABLE                  = 0x1\n\tNFTA_TRACE_CHAIN                  = 0x2\n\tNFTA_TRACE_RULE_HANDLE            = 0x3\n\tNFTA_TRACE_TYPE                   = 0x4\n\tNFTA_TRACE_VERDICT                = 0x5\n\tNFTA_TRACE_ID                     = 0x6\n\tNFTA_TRACE_LL_HEADER              = 0x7\n\tNFTA_TRACE_NETWORK_HEADER         = 0x8\n\tNFTA_TRACE_TRANSPORT_HEADER       = 0x9\n\tNFTA_TRACE_IIF                    = 0xa\n\tNFTA_TRACE_IIFTYPE                = 0xb\n\tNFTA_TRACE_OIF                    = 0xc\n\tNFTA_TRACE_OIFTYPE                = 0xd\n\tNFTA_TRACE_MARK                   = 0xe\n\tNFTA_TRACE_NFPROTO                = 0xf\n\tNFTA_TRACE_POLICY                 = 0x10\n\tNFTA_TRACE_PAD                    = 0x11\n\tNFT_TRACETYPE_UNSPEC              = 0x0\n\tNFT_TRACETYPE_POLICY              = 0x1\n\tNFT_TRACETYPE_RETURN              = 0x2\n\tNFT_TRACETYPE_RULE                = 0x3\n\tNFTA_NG_UNSPEC                    = 0x0\n\tNFTA_NG_DREG                      = 0x1\n\tNFTA_NG_MODULUS                   = 0x2\n\tNFTA_NG_TYPE                      = 0x3\n\tNFTA_NG_OFFSET                    = 0x4\n\tNFT_NG_INCREMENTAL                = 0x0\n\tNFT_NG_RANDOM                     = 0x1\n)\n\ntype RTCTime struct {\n\tSec   int32\n\tMin   int32\n\tHour  int32\n\tMday  int32\n\tMon   int32\n\tYear  int32\n\tWday  int32\n\tYday  int32\n\tIsdst int32\n}\n\ntype RTCWkAlrm struct {\n\tEnabled uint8\n\tPending uint8\n\tTime    RTCTime\n}\n\ntype RTCPLLInfo struct {\n\tCtrl    int32\n\tValue   int32\n\tMax     int32\n\tMin     int32\n\tPosmult int32\n\tNegmult int32\n\tClock   int64\n}\n\ntype BlkpgIoctlArg struct {\n\tOp      int32\n\tFlags   int32\n\tDatalen int32\n\tData    *byte\n}\n\ntype BlkpgPartition struct {\n\tStart   int64\n\tLength  int64\n\tPno     int32\n\tDevname [64]uint8\n\tVolname [64]uint8\n\t_       [4]byte\n}\n\nconst (\n\tBLKPG                  = 0x20001269\n\tBLKPG_ADD_PARTITION    = 0x1\n\tBLKPG_DEL_PARTITION    = 0x2\n\tBLKPG_RESIZE_PARTITION = 0x3\n)\n\nconst (\n\tNETNSA_NONE = 0x0\n\tNETNSA_NSID = 0x1\n\tNETNSA_PID  = 0x2\n\tNETNSA_FD   = 0x3\n)\n\ntype XDPRingOffset struct {\n\tProducer uint64\n\tConsumer uint64\n\tDesc     uint64\n}\n\ntype XDPMmapOffsets struct {\n\tRx XDPRingOffset\n\tTx XDPRingOffset\n\tFr XDPRingOffset\n\tCr XDPRingOffset\n}\n\ntype XDPUmemReg struct {\n\tAddr     uint64\n\tLen      uint64\n\tSize     uint32\n\tHeadroom uint32\n}\n\ntype XDPStatistics struct {\n\tRx_dropped       uint64\n\tRx_invalid_descs uint64\n\tTx_invalid_descs uint64\n}\n\ntype XDPDesc struct {\n\tAddr    uint64\n\tLen     uint32\n\tOptions uint32\n}\n\nconst (\n\tNCSI_CMD_UNSPEC                 = 0x0\n\tNCSI_CMD_PKG_INFO               = 0x1\n\tNCSI_CMD_SET_INTERFACE          = 0x2\n\tNCSI_CMD_CLEAR_INTERFACE        = 0x3\n\tNCSI_ATTR_UNSPEC                = 0x0\n\tNCSI_ATTR_IFINDEX               = 0x1\n\tNCSI_ATTR_PACKAGE_LIST          = 0x2\n\tNCSI_ATTR_PACKAGE_ID            = 0x3\n\tNCSI_ATTR_CHANNEL_ID            = 0x4\n\tNCSI_PKG_ATTR_UNSPEC            = 0x0\n\tNCSI_PKG_ATTR                   = 0x1\n\tNCSI_PKG_ATTR_ID                = 0x2\n\tNCSI_PKG_ATTR_FORCED            = 0x3\n\tNCSI_PKG_ATTR_CHANNEL_LIST      = 0x4\n\tNCSI_CHANNEL_ATTR_UNSPEC        = 0x0\n\tNCSI_CHANNEL_ATTR               = 0x1\n\tNCSI_CHANNEL_ATTR_ID            = 0x2\n\tNCSI_CHANNEL_ATTR_VERSION_MAJOR = 0x3\n\tNCSI_CHANNEL_ATTR_VERSION_MINOR = 0x4\n\tNCSI_CHANNEL_ATTR_VERSION_STR   = 0x5\n\tNCSI_CHANNEL_ATTR_LINK_STATE    = 0x6\n\tNCSI_CHANNEL_ATTR_ACTIVE        = 0x7\n\tNCSI_CHANNEL_ATTR_FORCED        = 0x8\n\tNCSI_CHANNEL_ATTR_VLAN_LIST     = 0x9\n\tNCSI_CHANNEL_ATTR_VLAN_ID       = 0xa\n)\n\ntype ScmTimestamping struct {\n\tTs [3]Timespec\n}\n\nconst (\n\tSOF_TIMESTAMPING_TX_HARDWARE  = 0x1\n\tSOF_TIMESTAMPING_TX_SOFTWARE  = 0x2\n\tSOF_TIMESTAMPING_RX_HARDWARE  = 0x4\n\tSOF_TIMESTAMPING_RX_SOFTWARE  = 0x8\n\tSOF_TIMESTAMPING_SOFTWARE     = 0x10\n\tSOF_TIMESTAMPING_SYS_HARDWARE = 0x20\n\tSOF_TIMESTAMPING_RAW_HARDWARE = 0x40\n\tSOF_TIMESTAMPING_OPT_ID       = 0x80\n\tSOF_TIMESTAMPING_TX_SCHED     = 0x100\n\tSOF_TIMESTAMPING_TX_ACK       = 0x200\n\tSOF_TIMESTAMPING_OPT_CMSG     = 0x400\n\tSOF_TIMESTAMPING_OPT_TSONLY   = 0x800\n\tSOF_TIMESTAMPING_OPT_STATS    = 0x1000\n\tSOF_TIMESTAMPING_OPT_PKTINFO  = 0x2000\n\tSOF_TIMESTAMPING_OPT_TX_SWHW  = 0x4000\n\n\tSOF_TIMESTAMPING_LAST = 0x4000\n\tSOF_TIMESTAMPING_MASK = 0x7fff\n\n\tSCM_TSTAMP_SND   = 0x0\n\tSCM_TSTAMP_SCHED = 0x1\n\tSCM_TSTAMP_ACK   = 0x2\n)\n\ntype SockExtendedErr struct {\n\tErrno  uint32\n\tOrigin uint8\n\tType   uint8\n\tCode   uint8\n\tPad    uint8\n\tInfo   uint32\n\tData   uint32\n}\n\ntype FanotifyEventMetadata struct {\n\tEvent_len    uint32\n\tVers         uint8\n\tReserved     uint8\n\tMetadata_len uint16\n\tMask         uint64\n\tFd           int32\n\tPid          int32\n}\n\ntype FanotifyResponse struct {\n\tFd       int32\n\tResponse uint32\n}\n\nconst (\n\tCRYPTO_MSG_BASE      = 0x10\n\tCRYPTO_MSG_NEWALG    = 0x10\n\tCRYPTO_MSG_DELALG    = 0x11\n\tCRYPTO_MSG_UPDATEALG = 0x12\n\tCRYPTO_MSG_GETALG    = 0x13\n\tCRYPTO_MSG_DELRNG    = 0x14\n\tCRYPTO_MSG_GETSTAT   = 0x15\n)\n\nconst (\n\tCRYPTOCFGA_UNSPEC           = 0x0\n\tCRYPTOCFGA_PRIORITY_VAL     = 0x1\n\tCRYPTOCFGA_REPORT_LARVAL    = 0x2\n\tCRYPTOCFGA_REPORT_HASH      = 0x3\n\tCRYPTOCFGA_REPORT_BLKCIPHER = 0x4\n\tCRYPTOCFGA_REPORT_AEAD      = 0x5\n\tCRYPTOCFGA_REPORT_COMPRESS  = 0x6\n\tCRYPTOCFGA_REPORT_RNG       = 0x7\n\tCRYPTOCFGA_REPORT_CIPHER    = 0x8\n\tCRYPTOCFGA_REPORT_AKCIPHER  = 0x9\n\tCRYPTOCFGA_REPORT_KPP       = 0xa\n\tCRYPTOCFGA_REPORT_ACOMP     = 0xb\n\tCRYPTOCFGA_STAT_LARVAL      = 0xc\n\tCRYPTOCFGA_STAT_HASH        = 0xd\n\tCRYPTOCFGA_STAT_BLKCIPHER   = 0xe\n\tCRYPTOCFGA_STAT_AEAD        = 0xf\n\tCRYPTOCFGA_STAT_COMPRESS    = 0x10\n\tCRYPTOCFGA_STAT_RNG         = 0x11\n\tCRYPTOCFGA_STAT_CIPHER      = 0x12\n\tCRYPTOCFGA_STAT_AKCIPHER    = 0x13\n\tCRYPTOCFGA_STAT_KPP         = 0x14\n\tCRYPTOCFGA_STAT_ACOMP       = 0x15\n)\n\ntype CryptoUserAlg struct {\n\tName        [64]uint8\n\tDriver_name [64]uint8\n\tModule_name [64]uint8\n\tType        uint32\n\tMask        uint32\n\tRefcnt      uint32\n\tFlags       uint32\n}\n\ntype CryptoStatAEAD struct {\n\tType         [64]uint8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatAKCipher struct {\n\tType         [64]uint8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tVerify_cnt   uint64\n\tSign_cnt     uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatCipher struct {\n\tType         [64]uint8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatCompress struct {\n\tType            [64]uint8\n\tCompress_cnt    uint64\n\tCompress_tlen   uint64\n\tDecompress_cnt  uint64\n\tDecompress_tlen uint64\n\tErr_cnt         uint64\n}\n\ntype CryptoStatHash struct {\n\tType      [64]uint8\n\tHash_cnt  uint64\n\tHash_tlen uint64\n\tErr_cnt   uint64\n}\n\ntype CryptoStatKPP struct {\n\tType                      [64]uint8\n\tSetsecret_cnt             uint64\n\tGenerate_public_key_cnt   uint64\n\tCompute_shared_secret_cnt uint64\n\tErr_cnt                   uint64\n}\n\ntype CryptoStatRNG struct {\n\tType          [64]uint8\n\tGenerate_cnt  uint64\n\tGenerate_tlen uint64\n\tSeed_cnt      uint64\n\tErr_cnt       uint64\n}\n\ntype CryptoStatLarval struct {\n\tType [64]uint8\n}\n\ntype CryptoReportLarval struct {\n\tType [64]uint8\n}\n\ntype CryptoReportHash struct {\n\tType       [64]uint8\n\tBlocksize  uint32\n\tDigestsize uint32\n}\n\ntype CryptoReportCipher struct {\n\tType        [64]uint8\n\tBlocksize   uint32\n\tMin_keysize uint32\n\tMax_keysize uint32\n}\n\ntype CryptoReportBlkCipher struct {\n\tType        [64]uint8\n\tGeniv       [64]uint8\n\tBlocksize   uint32\n\tMin_keysize uint32\n\tMax_keysize uint32\n\tIvsize      uint32\n}\n\ntype CryptoReportAEAD struct {\n\tType        [64]uint8\n\tGeniv       [64]uint8\n\tBlocksize   uint32\n\tMaxauthsize uint32\n\tIvsize      uint32\n}\n\ntype CryptoReportComp struct {\n\tType [64]uint8\n}\n\ntype CryptoReportRNG struct {\n\tType     [64]uint8\n\tSeedsize uint32\n}\n\ntype CryptoReportAKCipher struct {\n\tType [64]uint8\n}\n\ntype CryptoReportKPP struct {\n\tType [64]uint8\n}\n\ntype CryptoReportAcomp struct {\n\tType [64]uint8\n}\n\nconst (\n\tBPF_REG_0                           = 0x0\n\tBPF_REG_1                           = 0x1\n\tBPF_REG_2                           = 0x2\n\tBPF_REG_3                           = 0x3\n\tBPF_REG_4                           = 0x4\n\tBPF_REG_5                           = 0x5\n\tBPF_REG_6                           = 0x6\n\tBPF_REG_7                           = 0x7\n\tBPF_REG_8                           = 0x8\n\tBPF_REG_9                           = 0x9\n\tBPF_REG_10                          = 0xa\n\tBPF_MAP_CREATE                      = 0x0\n\tBPF_MAP_LOOKUP_ELEM                 = 0x1\n\tBPF_MAP_UPDATE_ELEM                 = 0x2\n\tBPF_MAP_DELETE_ELEM                 = 0x3\n\tBPF_MAP_GET_NEXT_KEY                = 0x4\n\tBPF_PROG_LOAD                       = 0x5\n\tBPF_OBJ_PIN                         = 0x6\n\tBPF_OBJ_GET                         = 0x7\n\tBPF_PROG_ATTACH                     = 0x8\n\tBPF_PROG_DETACH                     = 0x9\n\tBPF_PROG_TEST_RUN                   = 0xa\n\tBPF_PROG_GET_NEXT_ID                = 0xb\n\tBPF_MAP_GET_NEXT_ID                 = 0xc\n\tBPF_PROG_GET_FD_BY_ID               = 0xd\n\tBPF_MAP_GET_FD_BY_ID                = 0xe\n\tBPF_OBJ_GET_INFO_BY_FD              = 0xf\n\tBPF_PROG_QUERY                      = 0x10\n\tBPF_RAW_TRACEPOINT_OPEN             = 0x11\n\tBPF_BTF_LOAD                        = 0x12\n\tBPF_BTF_GET_FD_BY_ID                = 0x13\n\tBPF_TASK_FD_QUERY                   = 0x14\n\tBPF_MAP_LOOKUP_AND_DELETE_ELEM      = 0x15\n\tBPF_MAP_TYPE_UNSPEC                 = 0x0\n\tBPF_MAP_TYPE_HASH                   = 0x1\n\tBPF_MAP_TYPE_ARRAY                  = 0x2\n\tBPF_MAP_TYPE_PROG_ARRAY             = 0x3\n\tBPF_MAP_TYPE_PERF_EVENT_ARRAY       = 0x4\n\tBPF_MAP_TYPE_PERCPU_HASH            = 0x5\n\tBPF_MAP_TYPE_PERCPU_ARRAY           = 0x6\n\tBPF_MAP_TYPE_STACK_TRACE            = 0x7\n\tBPF_MAP_TYPE_CGROUP_ARRAY           = 0x8\n\tBPF_MAP_TYPE_LRU_HASH               = 0x9\n\tBPF_MAP_TYPE_LRU_PERCPU_HASH        = 0xa\n\tBPF_MAP_TYPE_LPM_TRIE               = 0xb\n\tBPF_MAP_TYPE_ARRAY_OF_MAPS          = 0xc\n\tBPF_MAP_TYPE_HASH_OF_MAPS           = 0xd\n\tBPF_MAP_TYPE_DEVMAP                 = 0xe\n\tBPF_MAP_TYPE_SOCKMAP                = 0xf\n\tBPF_MAP_TYPE_CPUMAP                 = 0x10\n\tBPF_MAP_TYPE_XSKMAP                 = 0x11\n\tBPF_MAP_TYPE_SOCKHASH               = 0x12\n\tBPF_MAP_TYPE_CGROUP_STORAGE         = 0x13\n\tBPF_MAP_TYPE_REUSEPORT_SOCKARRAY    = 0x14\n\tBPF_MAP_TYPE_PERCPU_CGROUP_STORAGE  = 0x15\n\tBPF_MAP_TYPE_QUEUE                  = 0x16\n\tBPF_MAP_TYPE_STACK                  = 0x17\n\tBPF_PROG_TYPE_UNSPEC                = 0x0\n\tBPF_PROG_TYPE_SOCKET_FILTER         = 0x1\n\tBPF_PROG_TYPE_KPROBE                = 0x2\n\tBPF_PROG_TYPE_SCHED_CLS             = 0x3\n\tBPF_PROG_TYPE_SCHED_ACT             = 0x4\n\tBPF_PROG_TYPE_TRACEPOINT            = 0x5\n\tBPF_PROG_TYPE_XDP                   = 0x6\n\tBPF_PROG_TYPE_PERF_EVENT            = 0x7\n\tBPF_PROG_TYPE_CGROUP_SKB            = 0x8\n\tBPF_PROG_TYPE_CGROUP_SOCK           = 0x9\n\tBPF_PROG_TYPE_LWT_IN                = 0xa\n\tBPF_PROG_TYPE_LWT_OUT               = 0xb\n\tBPF_PROG_TYPE_LWT_XMIT              = 0xc\n\tBPF_PROG_TYPE_SOCK_OPS              = 0xd\n\tBPF_PROG_TYPE_SK_SKB                = 0xe\n\tBPF_PROG_TYPE_CGROUP_DEVICE         = 0xf\n\tBPF_PROG_TYPE_SK_MSG                = 0x10\n\tBPF_PROG_TYPE_RAW_TRACEPOINT        = 0x11\n\tBPF_PROG_TYPE_CGROUP_SOCK_ADDR      = 0x12\n\tBPF_PROG_TYPE_LWT_SEG6LOCAL         = 0x13\n\tBPF_PROG_TYPE_LIRC_MODE2            = 0x14\n\tBPF_PROG_TYPE_SK_REUSEPORT          = 0x15\n\tBPF_PROG_TYPE_FLOW_DISSECTOR        = 0x16\n\tBPF_CGROUP_INET_INGRESS             = 0x0\n\tBPF_CGROUP_INET_EGRESS              = 0x1\n\tBPF_CGROUP_INET_SOCK_CREATE         = 0x2\n\tBPF_CGROUP_SOCK_OPS                 = 0x3\n\tBPF_SK_SKB_STREAM_PARSER            = 0x4\n\tBPF_SK_SKB_STREAM_VERDICT           = 0x5\n\tBPF_CGROUP_DEVICE                   = 0x6\n\tBPF_SK_MSG_VERDICT                  = 0x7\n\tBPF_CGROUP_INET4_BIND               = 0x8\n\tBPF_CGROUP_INET6_BIND               = 0x9\n\tBPF_CGROUP_INET4_CONNECT            = 0xa\n\tBPF_CGROUP_INET6_CONNECT            = 0xb\n\tBPF_CGROUP_INET4_POST_BIND          = 0xc\n\tBPF_CGROUP_INET6_POST_BIND          = 0xd\n\tBPF_CGROUP_UDP4_SENDMSG             = 0xe\n\tBPF_CGROUP_UDP6_SENDMSG             = 0xf\n\tBPF_LIRC_MODE2                      = 0x10\n\tBPF_FLOW_DISSECTOR                  = 0x11\n\tBPF_STACK_BUILD_ID_EMPTY            = 0x0\n\tBPF_STACK_BUILD_ID_VALID            = 0x1\n\tBPF_STACK_BUILD_ID_IP               = 0x2\n\tBPF_ADJ_ROOM_NET                    = 0x0\n\tBPF_HDR_START_MAC                   = 0x0\n\tBPF_HDR_START_NET                   = 0x1\n\tBPF_LWT_ENCAP_SEG6                  = 0x0\n\tBPF_LWT_ENCAP_SEG6_INLINE           = 0x1\n\tBPF_OK                              = 0x0\n\tBPF_DROP                            = 0x2\n\tBPF_REDIRECT                        = 0x7\n\tBPF_SOCK_OPS_VOID                   = 0x0\n\tBPF_SOCK_OPS_TIMEOUT_INIT           = 0x1\n\tBPF_SOCK_OPS_RWND_INIT              = 0x2\n\tBPF_SOCK_OPS_TCP_CONNECT_CB         = 0x3\n\tBPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB  = 0x4\n\tBPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB = 0x5\n\tBPF_SOCK_OPS_NEEDS_ECN              = 0x6\n\tBPF_SOCK_OPS_BASE_RTT               = 0x7\n\tBPF_SOCK_OPS_RTO_CB                 = 0x8\n\tBPF_SOCK_OPS_RETRANS_CB             = 0x9\n\tBPF_SOCK_OPS_STATE_CB               = 0xa\n\tBPF_SOCK_OPS_TCP_LISTEN_CB          = 0xb\n\tBPF_TCP_ESTABLISHED                 = 0x1\n\tBPF_TCP_SYN_SENT                    = 0x2\n\tBPF_TCP_SYN_RECV                    = 0x3\n\tBPF_TCP_FIN_WAIT1                   = 0x4\n\tBPF_TCP_FIN_WAIT2                   = 0x5\n\tBPF_TCP_TIME_WAIT                   = 0x6\n\tBPF_TCP_CLOSE                       = 0x7\n\tBPF_TCP_CLOSE_WAIT                  = 0x8\n\tBPF_TCP_LAST_ACK                    = 0x9\n\tBPF_TCP_LISTEN                      = 0xa\n\tBPF_TCP_CLOSING                     = 0xb\n\tBPF_TCP_NEW_SYN_RECV                = 0xc\n\tBPF_TCP_MAX_STATES                  = 0xd\n\tBPF_FIB_LKUP_RET_SUCCESS            = 0x0\n\tBPF_FIB_LKUP_RET_BLACKHOLE          = 0x1\n\tBPF_FIB_LKUP_RET_UNREACHABLE        = 0x2\n\tBPF_FIB_LKUP_RET_PROHIBIT           = 0x3\n\tBPF_FIB_LKUP_RET_NOT_FWDED          = 0x4\n\tBPF_FIB_LKUP_RET_FWD_DISABLED       = 0x5\n\tBPF_FIB_LKUP_RET_UNSUPP_LWT         = 0x6\n\tBPF_FIB_LKUP_RET_NO_NEIGH           = 0x7\n\tBPF_FIB_LKUP_RET_FRAG_NEEDED        = 0x8\n\tBPF_FD_TYPE_RAW_TRACEPOINT          = 0x0\n\tBPF_FD_TYPE_TRACEPOINT              = 0x1\n\tBPF_FD_TYPE_KPROBE                  = 0x2\n\tBPF_FD_TYPE_KRETPROBE               = 0x3\n\tBPF_FD_TYPE_UPROBE                  = 0x4\n\tBPF_FD_TYPE_URETPROBE               = 0x5\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go",
    "content": "// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build riscv64,linux\n\npackage unix\n\nconst (\n\tSizeofPtr      = 0x8\n\tSizeofShort    = 0x2\n\tSizeofInt      = 0x4\n\tSizeofLong     = 0x8\n\tSizeofLongLong = 0x8\n\tPathMax        = 0x1000\n)\n\ntype (\n\t_C_short     int16\n\t_C_int       int32\n\t_C_long      int64\n\t_C_long_long int64\n)\n\ntype Timespec struct {\n\tSec  int64\n\tNsec int64\n}\n\ntype Timeval struct {\n\tSec  int64\n\tUsec int64\n}\n\ntype Timex struct {\n\tModes     uint32\n\tOffset    int64\n\tFreq      int64\n\tMaxerror  int64\n\tEsterror  int64\n\tStatus    int32\n\tConstant  int64\n\tPrecision int64\n\tTolerance int64\n\tTime      Timeval\n\tTick      int64\n\tPpsfreq   int64\n\tJitter    int64\n\tShift     int32\n\tStabil    int64\n\tJitcnt    int64\n\tCalcnt    int64\n\tErrcnt    int64\n\tStbcnt    int64\n\tTai       int32\n\t_         [44]byte\n}\n\ntype Time_t int64\n\ntype Tms struct {\n\tUtime  int64\n\tStime  int64\n\tCutime int64\n\tCstime int64\n}\n\ntype Utimbuf struct {\n\tActime  int64\n\tModtime int64\n}\n\ntype Rusage struct {\n\tUtime    Timeval\n\tStime    Timeval\n\tMaxrss   int64\n\tIxrss    int64\n\tIdrss    int64\n\tIsrss    int64\n\tMinflt   int64\n\tMajflt   int64\n\tNswap    int64\n\tInblock  int64\n\tOublock  int64\n\tMsgsnd   int64\n\tMsgrcv   int64\n\tNsignals int64\n\tNvcsw    int64\n\tNivcsw   int64\n}\n\ntype Rlimit struct {\n\tCur uint64\n\tMax uint64\n}\n\ntype _Gid_t uint32\n\ntype Stat_t struct {\n\tDev     uint64\n\tIno     uint64\n\tMode    uint32\n\tNlink   uint32\n\tUid     uint32\n\tGid     uint32\n\tRdev    uint64\n\t_       uint64\n\tSize    int64\n\tBlksize int32\n\t_       int32\n\tBlocks  int64\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\t_       [2]int32\n}\n\ntype StatxTimestamp struct {\n\tSec  int64\n\tNsec uint32\n\t_    int32\n}\n\ntype Statx_t struct {\n\tMask            uint32\n\tBlksize         uint32\n\tAttributes      uint64\n\tNlink           uint32\n\tUid             uint32\n\tGid             uint32\n\tMode            uint16\n\t_               [1]uint16\n\tIno             uint64\n\tSize            uint64\n\tBlocks          uint64\n\tAttributes_mask uint64\n\tAtime           StatxTimestamp\n\tBtime           StatxTimestamp\n\tCtime           StatxTimestamp\n\tMtime           StatxTimestamp\n\tRdev_major      uint32\n\tRdev_minor      uint32\n\tDev_major       uint32\n\tDev_minor       uint32\n\t_               [14]uint64\n}\n\ntype Dirent struct {\n\tIno    uint64\n\tOff    int64\n\tReclen uint16\n\tType   uint8\n\tName   [256]uint8\n\t_      [5]byte\n}\n\ntype Fsid struct {\n\tVal [2]int32\n}\n\ntype Flock_t struct {\n\tType   int16\n\tWhence int16\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\t_      [4]byte\n}\n\ntype FscryptPolicy struct {\n\tVersion                   uint8\n\tContents_encryption_mode  uint8\n\tFilenames_encryption_mode uint8\n\tFlags                     uint8\n\tMaster_key_descriptor     [8]uint8\n}\n\ntype FscryptKey struct {\n\tMode uint32\n\tRaw  [64]uint8\n\tSize uint32\n}\n\ntype KeyctlDHParams struct {\n\tPrivate int32\n\tPrime   int32\n\tBase    int32\n}\n\nconst (\n\tFADV_NORMAL     = 0x0\n\tFADV_RANDOM     = 0x1\n\tFADV_SEQUENTIAL = 0x2\n\tFADV_WILLNEED   = 0x3\n\tFADV_DONTNEED   = 0x4\n\tFADV_NOREUSE    = 0x5\n)\n\ntype RawSockaddrInet4 struct {\n\tFamily uint16\n\tPort   uint16\n\tAddr   [4]byte /* in_addr */\n\tZero   [8]uint8\n}\n\ntype RawSockaddrInet6 struct {\n\tFamily   uint16\n\tPort     uint16\n\tFlowinfo uint32\n\tAddr     [16]byte /* in6_addr */\n\tScope_id uint32\n}\n\ntype RawSockaddrUnix struct {\n\tFamily uint16\n\tPath   [108]int8\n}\n\ntype RawSockaddrLinklayer struct {\n\tFamily   uint16\n\tProtocol uint16\n\tIfindex  int32\n\tHatype   uint16\n\tPkttype  uint8\n\tHalen    uint8\n\tAddr     [8]uint8\n}\n\ntype RawSockaddrNetlink struct {\n\tFamily uint16\n\tPad    uint16\n\tPid    uint32\n\tGroups uint32\n}\n\ntype RawSockaddrHCI struct {\n\tFamily  uint16\n\tDev     uint16\n\tChannel uint16\n}\n\ntype RawSockaddrL2 struct {\n\tFamily      uint16\n\tPsm         uint16\n\tBdaddr      [6]uint8\n\tCid         uint16\n\tBdaddr_type uint8\n\t_           [1]byte\n}\n\ntype RawSockaddrRFCOMM struct {\n\tFamily  uint16\n\tBdaddr  [6]uint8\n\tChannel uint8\n\t_       [1]byte\n}\n\ntype RawSockaddrCAN struct {\n\tFamily  uint16\n\tIfindex int32\n\tAddr    [8]byte\n}\n\ntype RawSockaddrALG struct {\n\tFamily uint16\n\tType   [14]uint8\n\tFeat   uint32\n\tMask   uint32\n\tName   [64]uint8\n}\n\ntype RawSockaddrVM struct {\n\tFamily    uint16\n\tReserved1 uint16\n\tPort      uint32\n\tCid       uint32\n\tZero      [4]uint8\n}\n\ntype RawSockaddrXDP struct {\n\tFamily         uint16\n\tFlags          uint16\n\tIfindex        uint32\n\tQueue_id       uint32\n\tShared_umem_fd uint32\n}\n\ntype RawSockaddrPPPoX [0x1e]byte\n\ntype RawSockaddr struct {\n\tFamily uint16\n\tData   [14]uint8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [96]uint8\n}\n\ntype _Socklen uint32\n\ntype Linger struct {\n\tOnoff  int32\n\tLinger int32\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint64\n}\n\ntype IPMreq struct {\n\tMultiaddr [4]byte /* in_addr */\n\tInterface [4]byte /* in_addr */\n}\n\ntype IPMreqn struct {\n\tMultiaddr [4]byte /* in_addr */\n\tAddress   [4]byte /* in_addr */\n\tIfindex   int32\n}\n\ntype IPv6Mreq struct {\n\tMultiaddr [16]byte /* in6_addr */\n\tInterface uint32\n}\n\ntype PacketMreq struct {\n\tIfindex int32\n\tType    uint16\n\tAlen    uint16\n\tAddress [8]uint8\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tIov        *Iovec\n\tIovlen     uint64\n\tControl    *byte\n\tControllen uint64\n\tFlags      int32\n\t_          [4]byte\n}\n\ntype Cmsghdr struct {\n\tLen   uint64\n\tLevel int32\n\tType  int32\n}\n\ntype Inet4Pktinfo struct {\n\tIfindex  int32\n\tSpec_dst [4]byte /* in_addr */\n\tAddr     [4]byte /* in_addr */\n}\n\ntype Inet6Pktinfo struct {\n\tAddr    [16]byte /* in6_addr */\n\tIfindex uint32\n}\n\ntype IPv6MTUInfo struct {\n\tAddr RawSockaddrInet6\n\tMtu  uint32\n}\n\ntype ICMPv6Filter struct {\n\tData [8]uint32\n}\n\ntype Ucred struct {\n\tPid int32\n\tUid uint32\n\tGid uint32\n}\n\ntype TCPInfo struct {\n\tState          uint8\n\tCa_state       uint8\n\tRetransmits    uint8\n\tProbes         uint8\n\tBackoff        uint8\n\tOptions        uint8\n\tRto            uint32\n\tAto            uint32\n\tSnd_mss        uint32\n\tRcv_mss        uint32\n\tUnacked        uint32\n\tSacked         uint32\n\tLost           uint32\n\tRetrans        uint32\n\tFackets        uint32\n\tLast_data_sent uint32\n\tLast_ack_sent  uint32\n\tLast_data_recv uint32\n\tLast_ack_recv  uint32\n\tPmtu           uint32\n\tRcv_ssthresh   uint32\n\tRtt            uint32\n\tRttvar         uint32\n\tSnd_ssthresh   uint32\n\tSnd_cwnd       uint32\n\tAdvmss         uint32\n\tReordering     uint32\n\tRcv_rtt        uint32\n\tRcv_space      uint32\n\tTotal_retrans  uint32\n}\n\ntype CanFilter struct {\n\tId   uint32\n\tMask uint32\n}\n\nconst (\n\tSizeofSockaddrInet4     = 0x10\n\tSizeofSockaddrInet6     = 0x1c\n\tSizeofSockaddrAny       = 0x70\n\tSizeofSockaddrUnix      = 0x6e\n\tSizeofSockaddrLinklayer = 0x14\n\tSizeofSockaddrNetlink   = 0xc\n\tSizeofSockaddrHCI       = 0x6\n\tSizeofSockaddrL2        = 0xe\n\tSizeofSockaddrRFCOMM    = 0xa\n\tSizeofSockaddrCAN       = 0x10\n\tSizeofSockaddrALG       = 0x58\n\tSizeofSockaddrVM        = 0x10\n\tSizeofSockaddrXDP       = 0x10\n\tSizeofSockaddrPPPoX     = 0x1e\n\tSizeofLinger            = 0x8\n\tSizeofIovec             = 0x10\n\tSizeofIPMreq            = 0x8\n\tSizeofIPMreqn           = 0xc\n\tSizeofIPv6Mreq          = 0x14\n\tSizeofPacketMreq        = 0x10\n\tSizeofMsghdr            = 0x38\n\tSizeofCmsghdr           = 0x10\n\tSizeofInet4Pktinfo      = 0xc\n\tSizeofInet6Pktinfo      = 0x14\n\tSizeofIPv6MTUInfo       = 0x20\n\tSizeofICMPv6Filter      = 0x20\n\tSizeofUcred             = 0xc\n\tSizeofTCPInfo           = 0x68\n\tSizeofCanFilter         = 0x8\n)\n\nconst (\n\tNDA_UNSPEC              = 0x0\n\tNDA_DST                 = 0x1\n\tNDA_LLADDR              = 0x2\n\tNDA_CACHEINFO           = 0x3\n\tNDA_PROBES              = 0x4\n\tNDA_VLAN                = 0x5\n\tNDA_PORT                = 0x6\n\tNDA_VNI                 = 0x7\n\tNDA_IFINDEX             = 0x8\n\tNDA_MASTER              = 0x9\n\tNDA_LINK_NETNSID        = 0xa\n\tNDA_SRC_VNI             = 0xb\n\tNTF_USE                 = 0x1\n\tNTF_SELF                = 0x2\n\tNTF_MASTER              = 0x4\n\tNTF_PROXY               = 0x8\n\tNTF_EXT_LEARNED         = 0x10\n\tNTF_OFFLOADED           = 0x20\n\tNTF_ROUTER              = 0x80\n\tNUD_INCOMPLETE          = 0x1\n\tNUD_REACHABLE           = 0x2\n\tNUD_STALE               = 0x4\n\tNUD_DELAY               = 0x8\n\tNUD_PROBE               = 0x10\n\tNUD_FAILED              = 0x20\n\tNUD_NOARP               = 0x40\n\tNUD_PERMANENT           = 0x80\n\tNUD_NONE                = 0x0\n\tIFA_UNSPEC              = 0x0\n\tIFA_ADDRESS             = 0x1\n\tIFA_LOCAL               = 0x2\n\tIFA_LABEL               = 0x3\n\tIFA_BROADCAST           = 0x4\n\tIFA_ANYCAST             = 0x5\n\tIFA_CACHEINFO           = 0x6\n\tIFA_MULTICAST           = 0x7\n\tIFA_FLAGS               = 0x8\n\tIFA_RT_PRIORITY         = 0x9\n\tIFA_TARGET_NETNSID      = 0xa\n\tIFLA_UNSPEC             = 0x0\n\tIFLA_ADDRESS            = 0x1\n\tIFLA_BROADCAST          = 0x2\n\tIFLA_IFNAME             = 0x3\n\tIFLA_MTU                = 0x4\n\tIFLA_LINK               = 0x5\n\tIFLA_QDISC              = 0x6\n\tIFLA_STATS              = 0x7\n\tIFLA_COST               = 0x8\n\tIFLA_PRIORITY           = 0x9\n\tIFLA_MASTER             = 0xa\n\tIFLA_WIRELESS           = 0xb\n\tIFLA_PROTINFO           = 0xc\n\tIFLA_TXQLEN             = 0xd\n\tIFLA_MAP                = 0xe\n\tIFLA_WEIGHT             = 0xf\n\tIFLA_OPERSTATE          = 0x10\n\tIFLA_LINKMODE           = 0x11\n\tIFLA_LINKINFO           = 0x12\n\tIFLA_NET_NS_PID         = 0x13\n\tIFLA_IFALIAS            = 0x14\n\tIFLA_NUM_VF             = 0x15\n\tIFLA_VFINFO_LIST        = 0x16\n\tIFLA_STATS64            = 0x17\n\tIFLA_VF_PORTS           = 0x18\n\tIFLA_PORT_SELF          = 0x19\n\tIFLA_AF_SPEC            = 0x1a\n\tIFLA_GROUP              = 0x1b\n\tIFLA_NET_NS_FD          = 0x1c\n\tIFLA_EXT_MASK           = 0x1d\n\tIFLA_PROMISCUITY        = 0x1e\n\tIFLA_NUM_TX_QUEUES      = 0x1f\n\tIFLA_NUM_RX_QUEUES      = 0x20\n\tIFLA_CARRIER            = 0x21\n\tIFLA_PHYS_PORT_ID       = 0x22\n\tIFLA_CARRIER_CHANGES    = 0x23\n\tIFLA_PHYS_SWITCH_ID     = 0x24\n\tIFLA_LINK_NETNSID       = 0x25\n\tIFLA_PHYS_PORT_NAME     = 0x26\n\tIFLA_PROTO_DOWN         = 0x27\n\tIFLA_GSO_MAX_SEGS       = 0x28\n\tIFLA_GSO_MAX_SIZE       = 0x29\n\tIFLA_PAD                = 0x2a\n\tIFLA_XDP                = 0x2b\n\tIFLA_EVENT              = 0x2c\n\tIFLA_NEW_NETNSID        = 0x2d\n\tIFLA_IF_NETNSID         = 0x2e\n\tIFLA_TARGET_NETNSID     = 0x2e\n\tIFLA_CARRIER_UP_COUNT   = 0x2f\n\tIFLA_CARRIER_DOWN_COUNT = 0x30\n\tIFLA_NEW_IFINDEX        = 0x31\n\tIFLA_MIN_MTU            = 0x32\n\tIFLA_MAX_MTU            = 0x33\n\tIFLA_MAX                = 0x33\n\tIFLA_INFO_KIND          = 0x1\n\tIFLA_INFO_DATA          = 0x2\n\tIFLA_INFO_XSTATS        = 0x3\n\tIFLA_INFO_SLAVE_KIND    = 0x4\n\tIFLA_INFO_SLAVE_DATA    = 0x5\n\tRT_SCOPE_UNIVERSE       = 0x0\n\tRT_SCOPE_SITE           = 0xc8\n\tRT_SCOPE_LINK           = 0xfd\n\tRT_SCOPE_HOST           = 0xfe\n\tRT_SCOPE_NOWHERE        = 0xff\n\tRT_TABLE_UNSPEC         = 0x0\n\tRT_TABLE_COMPAT         = 0xfc\n\tRT_TABLE_DEFAULT        = 0xfd\n\tRT_TABLE_MAIN           = 0xfe\n\tRT_TABLE_LOCAL          = 0xff\n\tRT_TABLE_MAX            = 0xffffffff\n\tRTA_UNSPEC              = 0x0\n\tRTA_DST                 = 0x1\n\tRTA_SRC                 = 0x2\n\tRTA_IIF                 = 0x3\n\tRTA_OIF                 = 0x4\n\tRTA_GATEWAY             = 0x5\n\tRTA_PRIORITY            = 0x6\n\tRTA_PREFSRC             = 0x7\n\tRTA_METRICS             = 0x8\n\tRTA_MULTIPATH           = 0x9\n\tRTA_FLOW                = 0xb\n\tRTA_CACHEINFO           = 0xc\n\tRTA_TABLE               = 0xf\n\tRTA_MARK                = 0x10\n\tRTA_MFC_STATS           = 0x11\n\tRTA_VIA                 = 0x12\n\tRTA_NEWDST              = 0x13\n\tRTA_PREF                = 0x14\n\tRTA_ENCAP_TYPE          = 0x15\n\tRTA_ENCAP               = 0x16\n\tRTA_EXPIRES             = 0x17\n\tRTA_PAD                 = 0x18\n\tRTA_UID                 = 0x19\n\tRTA_TTL_PROPAGATE       = 0x1a\n\tRTA_IP_PROTO            = 0x1b\n\tRTA_SPORT               = 0x1c\n\tRTA_DPORT               = 0x1d\n\tRTN_UNSPEC              = 0x0\n\tRTN_UNICAST             = 0x1\n\tRTN_LOCAL               = 0x2\n\tRTN_BROADCAST           = 0x3\n\tRTN_ANYCAST             = 0x4\n\tRTN_MULTICAST           = 0x5\n\tRTN_BLACKHOLE           = 0x6\n\tRTN_UNREACHABLE         = 0x7\n\tRTN_PROHIBIT            = 0x8\n\tRTN_THROW               = 0x9\n\tRTN_NAT                 = 0xa\n\tRTN_XRESOLVE            = 0xb\n\tRTNLGRP_NONE            = 0x0\n\tRTNLGRP_LINK            = 0x1\n\tRTNLGRP_NOTIFY          = 0x2\n\tRTNLGRP_NEIGH           = 0x3\n\tRTNLGRP_TC              = 0x4\n\tRTNLGRP_IPV4_IFADDR     = 0x5\n\tRTNLGRP_IPV4_MROUTE     = 0x6\n\tRTNLGRP_IPV4_ROUTE      = 0x7\n\tRTNLGRP_IPV4_RULE       = 0x8\n\tRTNLGRP_IPV6_IFADDR     = 0x9\n\tRTNLGRP_IPV6_MROUTE     = 0xa\n\tRTNLGRP_IPV6_ROUTE      = 0xb\n\tRTNLGRP_IPV6_IFINFO     = 0xc\n\tRTNLGRP_IPV6_PREFIX     = 0x12\n\tRTNLGRP_IPV6_RULE       = 0x13\n\tRTNLGRP_ND_USEROPT      = 0x14\n\tSizeofNlMsghdr          = 0x10\n\tSizeofNlMsgerr          = 0x14\n\tSizeofRtGenmsg          = 0x1\n\tSizeofNlAttr            = 0x4\n\tSizeofRtAttr            = 0x4\n\tSizeofIfInfomsg         = 0x10\n\tSizeofIfAddrmsg         = 0x8\n\tSizeofRtMsg             = 0xc\n\tSizeofRtNexthop         = 0x8\n\tSizeofNdUseroptmsg      = 0x10\n\tSizeofNdMsg             = 0xc\n)\n\ntype NlMsghdr struct {\n\tLen   uint32\n\tType  uint16\n\tFlags uint16\n\tSeq   uint32\n\tPid   uint32\n}\n\ntype NlMsgerr struct {\n\tError int32\n\tMsg   NlMsghdr\n}\n\ntype RtGenmsg struct {\n\tFamily uint8\n}\n\ntype NlAttr struct {\n\tLen  uint16\n\tType uint16\n}\n\ntype RtAttr struct {\n\tLen  uint16\n\tType uint16\n}\n\ntype IfInfomsg struct {\n\tFamily uint8\n\t_      uint8\n\tType   uint16\n\tIndex  int32\n\tFlags  uint32\n\tChange uint32\n}\n\ntype IfAddrmsg struct {\n\tFamily    uint8\n\tPrefixlen uint8\n\tFlags     uint8\n\tScope     uint8\n\tIndex     uint32\n}\n\ntype RtMsg struct {\n\tFamily   uint8\n\tDst_len  uint8\n\tSrc_len  uint8\n\tTos      uint8\n\tTable    uint8\n\tProtocol uint8\n\tScope    uint8\n\tType     uint8\n\tFlags    uint32\n}\n\ntype RtNexthop struct {\n\tLen     uint16\n\tFlags   uint8\n\tHops    uint8\n\tIfindex int32\n}\n\ntype NdUseroptmsg struct {\n\tFamily    uint8\n\tPad1      uint8\n\tOpts_len  uint16\n\tIfindex   int32\n\tIcmp_type uint8\n\tIcmp_code uint8\n\tPad2      uint16\n\tPad3      uint32\n}\n\ntype NdMsg struct {\n\tFamily  uint8\n\tPad1    uint8\n\tPad2    uint16\n\tIfindex int32\n\tState   uint16\n\tFlags   uint8\n\tType    uint8\n}\n\nconst (\n\tSizeofSockFilter = 0x8\n\tSizeofSockFprog  = 0x10\n)\n\ntype SockFilter struct {\n\tCode uint16\n\tJt   uint8\n\tJf   uint8\n\tK    uint32\n}\n\ntype SockFprog struct {\n\tLen    uint16\n\tFilter *SockFilter\n}\n\ntype InotifyEvent struct {\n\tWd     int32\n\tMask   uint32\n\tCookie uint32\n\tLen    uint32\n}\n\nconst SizeofInotifyEvent = 0x10\n\ntype PtraceRegs struct {\n\tPc  uint64\n\tRa  uint64\n\tSp  uint64\n\tGp  uint64\n\tTp  uint64\n\tT0  uint64\n\tT1  uint64\n\tT2  uint64\n\tS0  uint64\n\tS1  uint64\n\tA0  uint64\n\tA1  uint64\n\tA2  uint64\n\tA3  uint64\n\tA4  uint64\n\tA5  uint64\n\tA6  uint64\n\tA7  uint64\n\tS2  uint64\n\tS3  uint64\n\tS4  uint64\n\tS5  uint64\n\tS6  uint64\n\tS7  uint64\n\tS8  uint64\n\tS9  uint64\n\tS10 uint64\n\tS11 uint64\n\tT3  uint64\n\tT4  uint64\n\tT5  uint64\n\tT6  uint64\n}\n\ntype FdSet struct {\n\tBits [16]int64\n}\n\ntype Sysinfo_t struct {\n\tUptime    int64\n\tLoads     [3]uint64\n\tTotalram  uint64\n\tFreeram   uint64\n\tSharedram uint64\n\tBufferram uint64\n\tTotalswap uint64\n\tFreeswap  uint64\n\tProcs     uint16\n\tPad       uint16\n\tTotalhigh uint64\n\tFreehigh  uint64\n\tUnit      uint32\n\t_         [0]uint8\n\t_         [4]byte\n}\n\ntype Utsname struct {\n\tSysname    [65]byte\n\tNodename   [65]byte\n\tRelease    [65]byte\n\tVersion    [65]byte\n\tMachine    [65]byte\n\tDomainname [65]byte\n}\n\ntype Ustat_t struct {\n\tTfree  int32\n\tTinode uint64\n\tFname  [6]uint8\n\tFpack  [6]uint8\n\t_      [4]byte\n}\n\ntype EpollEvent struct {\n\tEvents uint32\n\tFd     int32\n\tPad    int32\n}\n\nconst (\n\tAT_EMPTY_PATH   = 0x1000\n\tAT_FDCWD        = -0x64\n\tAT_NO_AUTOMOUNT = 0x800\n\tAT_REMOVEDIR    = 0x200\n\n\tAT_STATX_SYNC_AS_STAT = 0x0\n\tAT_STATX_FORCE_SYNC   = 0x2000\n\tAT_STATX_DONT_SYNC    = 0x4000\n\n\tAT_SYMLINK_FOLLOW   = 0x400\n\tAT_SYMLINK_NOFOLLOW = 0x100\n\n\tAT_EACCESS = 0x200\n)\n\ntype PollFd struct {\n\tFd      int32\n\tEvents  int16\n\tRevents int16\n}\n\nconst (\n\tPOLLIN    = 0x1\n\tPOLLPRI   = 0x2\n\tPOLLOUT   = 0x4\n\tPOLLRDHUP = 0x2000\n\tPOLLERR   = 0x8\n\tPOLLHUP   = 0x10\n\tPOLLNVAL  = 0x20\n)\n\ntype Sigset_t struct {\n\tVal [16]uint64\n}\n\nconst _C__NSIG = 0x41\n\ntype SignalfdSiginfo struct {\n\tSigno     uint32\n\tErrno     int32\n\tCode      int32\n\tPid       uint32\n\tUid       uint32\n\tFd        int32\n\tTid       uint32\n\tBand      uint32\n\tOverrun   uint32\n\tTrapno    uint32\n\tStatus    int32\n\tInt       int32\n\tPtr       uint64\n\tUtime     uint64\n\tStime     uint64\n\tAddr      uint64\n\tAddr_lsb  uint16\n\t_         uint16\n\tSyscall   int32\n\tCall_addr uint64\n\tArch      uint32\n\t_         [28]uint8\n}\n\nconst PERF_IOC_FLAG_GROUP = 0x1\n\ntype Termios struct {\n\tIflag  uint32\n\tOflag  uint32\n\tCflag  uint32\n\tLflag  uint32\n\tLine   uint8\n\tCc     [19]uint8\n\tIspeed uint32\n\tOspeed uint32\n}\n\ntype Winsize struct {\n\tRow    uint16\n\tCol    uint16\n\tXpixel uint16\n\tYpixel uint16\n}\n\ntype Taskstats struct {\n\tVersion                   uint16\n\tAc_exitcode               uint32\n\tAc_flag                   uint8\n\tAc_nice                   uint8\n\tCpu_count                 uint64\n\tCpu_delay_total           uint64\n\tBlkio_count               uint64\n\tBlkio_delay_total         uint64\n\tSwapin_count              uint64\n\tSwapin_delay_total        uint64\n\tCpu_run_real_total        uint64\n\tCpu_run_virtual_total     uint64\n\tAc_comm                   [32]uint8\n\tAc_sched                  uint8\n\tAc_pad                    [3]uint8\n\t_                         [4]byte\n\tAc_uid                    uint32\n\tAc_gid                    uint32\n\tAc_pid                    uint32\n\tAc_ppid                   uint32\n\tAc_btime                  uint32\n\tAc_etime                  uint64\n\tAc_utime                  uint64\n\tAc_stime                  uint64\n\tAc_minflt                 uint64\n\tAc_majflt                 uint64\n\tCoremem                   uint64\n\tVirtmem                   uint64\n\tHiwater_rss               uint64\n\tHiwater_vm                uint64\n\tRead_char                 uint64\n\tWrite_char                uint64\n\tRead_syscalls             uint64\n\tWrite_syscalls            uint64\n\tRead_bytes                uint64\n\tWrite_bytes               uint64\n\tCancelled_write_bytes     uint64\n\tNvcsw                     uint64\n\tNivcsw                    uint64\n\tAc_utimescaled            uint64\n\tAc_stimescaled            uint64\n\tCpu_scaled_run_real_total uint64\n\tFreepages_count           uint64\n\tFreepages_delay_total     uint64\n\tThrashing_count           uint64\n\tThrashing_delay_total     uint64\n}\n\nconst (\n\tTASKSTATS_CMD_UNSPEC                  = 0x0\n\tTASKSTATS_CMD_GET                     = 0x1\n\tTASKSTATS_CMD_NEW                     = 0x2\n\tTASKSTATS_TYPE_UNSPEC                 = 0x0\n\tTASKSTATS_TYPE_PID                    = 0x1\n\tTASKSTATS_TYPE_TGID                   = 0x2\n\tTASKSTATS_TYPE_STATS                  = 0x3\n\tTASKSTATS_TYPE_AGGR_PID               = 0x4\n\tTASKSTATS_TYPE_AGGR_TGID              = 0x5\n\tTASKSTATS_TYPE_NULL                   = 0x6\n\tTASKSTATS_CMD_ATTR_UNSPEC             = 0x0\n\tTASKSTATS_CMD_ATTR_PID                = 0x1\n\tTASKSTATS_CMD_ATTR_TGID               = 0x2\n\tTASKSTATS_CMD_ATTR_REGISTER_CPUMASK   = 0x3\n\tTASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4\n)\n\ntype CGroupStats struct {\n\tSleeping        uint64\n\tRunning         uint64\n\tStopped         uint64\n\tUninterruptible uint64\n\tIo_wait         uint64\n}\n\nconst (\n\tCGROUPSTATS_CMD_UNSPEC        = 0x3\n\tCGROUPSTATS_CMD_GET           = 0x4\n\tCGROUPSTATS_CMD_NEW           = 0x5\n\tCGROUPSTATS_TYPE_UNSPEC       = 0x0\n\tCGROUPSTATS_TYPE_CGROUP_STATS = 0x1\n\tCGROUPSTATS_CMD_ATTR_UNSPEC   = 0x0\n\tCGROUPSTATS_CMD_ATTR_FD       = 0x1\n)\n\ntype Genlmsghdr struct {\n\tCmd      uint8\n\tVersion  uint8\n\tReserved uint16\n}\n\nconst (\n\tCTRL_CMD_UNSPEC            = 0x0\n\tCTRL_CMD_NEWFAMILY         = 0x1\n\tCTRL_CMD_DELFAMILY         = 0x2\n\tCTRL_CMD_GETFAMILY         = 0x3\n\tCTRL_CMD_NEWOPS            = 0x4\n\tCTRL_CMD_DELOPS            = 0x5\n\tCTRL_CMD_GETOPS            = 0x6\n\tCTRL_CMD_NEWMCAST_GRP      = 0x7\n\tCTRL_CMD_DELMCAST_GRP      = 0x8\n\tCTRL_CMD_GETMCAST_GRP      = 0x9\n\tCTRL_ATTR_UNSPEC           = 0x0\n\tCTRL_ATTR_FAMILY_ID        = 0x1\n\tCTRL_ATTR_FAMILY_NAME      = 0x2\n\tCTRL_ATTR_VERSION          = 0x3\n\tCTRL_ATTR_HDRSIZE          = 0x4\n\tCTRL_ATTR_MAXATTR          = 0x5\n\tCTRL_ATTR_OPS              = 0x6\n\tCTRL_ATTR_MCAST_GROUPS     = 0x7\n\tCTRL_ATTR_OP_UNSPEC        = 0x0\n\tCTRL_ATTR_OP_ID            = 0x1\n\tCTRL_ATTR_OP_FLAGS         = 0x2\n\tCTRL_ATTR_MCAST_GRP_UNSPEC = 0x0\n\tCTRL_ATTR_MCAST_GRP_NAME   = 0x1\n\tCTRL_ATTR_MCAST_GRP_ID     = 0x2\n)\n\ntype cpuMask uint64\n\nconst (\n\t_CPU_SETSIZE = 0x400\n\t_NCPUBITS    = 0x40\n)\n\nconst (\n\tBDADDR_BREDR     = 0x0\n\tBDADDR_LE_PUBLIC = 0x1\n\tBDADDR_LE_RANDOM = 0x2\n)\n\ntype PerfEventAttr struct {\n\tType               uint32\n\tSize               uint32\n\tConfig             uint64\n\tSample             uint64\n\tSample_type        uint64\n\tRead_format        uint64\n\tBits               uint64\n\tWakeup             uint32\n\tBp_type            uint32\n\tExt1               uint64\n\tExt2               uint64\n\tBranch_sample_type uint64\n\tSample_regs_user   uint64\n\tSample_stack_user  uint32\n\tClockid            int32\n\tSample_regs_intr   uint64\n\tAux_watermark      uint32\n\tSample_max_stack   uint16\n\t_                  uint16\n}\n\ntype PerfEventMmapPage struct {\n\tVersion        uint32\n\tCompat_version uint32\n\tLock           uint32\n\tIndex          uint32\n\tOffset         int64\n\tTime_enabled   uint64\n\tTime_running   uint64\n\tCapabilities   uint64\n\tPmc_width      uint16\n\tTime_shift     uint16\n\tTime_mult      uint32\n\tTime_offset    uint64\n\tTime_zero      uint64\n\tSize           uint32\n\t_              [948]uint8\n\tData_head      uint64\n\tData_tail      uint64\n\tData_offset    uint64\n\tData_size      uint64\n\tAux_head       uint64\n\tAux_tail       uint64\n\tAux_offset     uint64\n\tAux_size       uint64\n}\n\nconst (\n\tPerfBitDisabled               uint64 = CBitFieldMaskBit0\n\tPerfBitInherit                       = CBitFieldMaskBit1\n\tPerfBitPinned                        = CBitFieldMaskBit2\n\tPerfBitExclusive                     = CBitFieldMaskBit3\n\tPerfBitExcludeUser                   = CBitFieldMaskBit4\n\tPerfBitExcludeKernel                 = CBitFieldMaskBit5\n\tPerfBitExcludeHv                     = CBitFieldMaskBit6\n\tPerfBitExcludeIdle                   = CBitFieldMaskBit7\n\tPerfBitMmap                          = CBitFieldMaskBit8\n\tPerfBitComm                          = CBitFieldMaskBit9\n\tPerfBitFreq                          = CBitFieldMaskBit10\n\tPerfBitInheritStat                   = CBitFieldMaskBit11\n\tPerfBitEnableOnExec                  = CBitFieldMaskBit12\n\tPerfBitTask                          = CBitFieldMaskBit13\n\tPerfBitWatermark                     = CBitFieldMaskBit14\n\tPerfBitPreciseIPBit1                 = CBitFieldMaskBit15\n\tPerfBitPreciseIPBit2                 = CBitFieldMaskBit16\n\tPerfBitMmapData                      = CBitFieldMaskBit17\n\tPerfBitSampleIDAll                   = CBitFieldMaskBit18\n\tPerfBitExcludeHost                   = CBitFieldMaskBit19\n\tPerfBitExcludeGuest                  = CBitFieldMaskBit20\n\tPerfBitExcludeCallchainKernel        = CBitFieldMaskBit21\n\tPerfBitExcludeCallchainUser          = CBitFieldMaskBit22\n\tPerfBitMmap2                         = CBitFieldMaskBit23\n\tPerfBitCommExec                      = CBitFieldMaskBit24\n\tPerfBitUseClockID                    = CBitFieldMaskBit25\n\tPerfBitContextSwitch                 = CBitFieldMaskBit26\n)\n\nconst (\n\tPERF_TYPE_HARDWARE   = 0x0\n\tPERF_TYPE_SOFTWARE   = 0x1\n\tPERF_TYPE_TRACEPOINT = 0x2\n\tPERF_TYPE_HW_CACHE   = 0x3\n\tPERF_TYPE_RAW        = 0x4\n\tPERF_TYPE_BREAKPOINT = 0x5\n\n\tPERF_COUNT_HW_CPU_CYCLES              = 0x0\n\tPERF_COUNT_HW_INSTRUCTIONS            = 0x1\n\tPERF_COUNT_HW_CACHE_REFERENCES        = 0x2\n\tPERF_COUNT_HW_CACHE_MISSES            = 0x3\n\tPERF_COUNT_HW_BRANCH_INSTRUCTIONS     = 0x4\n\tPERF_COUNT_HW_BRANCH_MISSES           = 0x5\n\tPERF_COUNT_HW_BUS_CYCLES              = 0x6\n\tPERF_COUNT_HW_STALLED_CYCLES_FRONTEND = 0x7\n\tPERF_COUNT_HW_STALLED_CYCLES_BACKEND  = 0x8\n\tPERF_COUNT_HW_REF_CPU_CYCLES          = 0x9\n\n\tPERF_COUNT_HW_CACHE_L1D  = 0x0\n\tPERF_COUNT_HW_CACHE_L1I  = 0x1\n\tPERF_COUNT_HW_CACHE_LL   = 0x2\n\tPERF_COUNT_HW_CACHE_DTLB = 0x3\n\tPERF_COUNT_HW_CACHE_ITLB = 0x4\n\tPERF_COUNT_HW_CACHE_BPU  = 0x5\n\tPERF_COUNT_HW_CACHE_NODE = 0x6\n\n\tPERF_COUNT_HW_CACHE_OP_READ     = 0x0\n\tPERF_COUNT_HW_CACHE_OP_WRITE    = 0x1\n\tPERF_COUNT_HW_CACHE_OP_PREFETCH = 0x2\n\n\tPERF_COUNT_HW_CACHE_RESULT_ACCESS = 0x0\n\tPERF_COUNT_HW_CACHE_RESULT_MISS   = 0x1\n\n\tPERF_COUNT_SW_CPU_CLOCK        = 0x0\n\tPERF_COUNT_SW_TASK_CLOCK       = 0x1\n\tPERF_COUNT_SW_PAGE_FAULTS      = 0x2\n\tPERF_COUNT_SW_CONTEXT_SWITCHES = 0x3\n\tPERF_COUNT_SW_CPU_MIGRATIONS   = 0x4\n\tPERF_COUNT_SW_PAGE_FAULTS_MIN  = 0x5\n\tPERF_COUNT_SW_PAGE_FAULTS_MAJ  = 0x6\n\tPERF_COUNT_SW_ALIGNMENT_FAULTS = 0x7\n\tPERF_COUNT_SW_EMULATION_FAULTS = 0x8\n\tPERF_COUNT_SW_DUMMY            = 0x9\n\tPERF_COUNT_SW_BPF_OUTPUT       = 0xa\n\n\tPERF_SAMPLE_IP           = 0x1\n\tPERF_SAMPLE_TID          = 0x2\n\tPERF_SAMPLE_TIME         = 0x4\n\tPERF_SAMPLE_ADDR         = 0x8\n\tPERF_SAMPLE_READ         = 0x10\n\tPERF_SAMPLE_CALLCHAIN    = 0x20\n\tPERF_SAMPLE_ID           = 0x40\n\tPERF_SAMPLE_CPU          = 0x80\n\tPERF_SAMPLE_PERIOD       = 0x100\n\tPERF_SAMPLE_STREAM_ID    = 0x200\n\tPERF_SAMPLE_RAW          = 0x400\n\tPERF_SAMPLE_BRANCH_STACK = 0x800\n\n\tPERF_SAMPLE_BRANCH_USER       = 0x1\n\tPERF_SAMPLE_BRANCH_KERNEL     = 0x2\n\tPERF_SAMPLE_BRANCH_HV         = 0x4\n\tPERF_SAMPLE_BRANCH_ANY        = 0x8\n\tPERF_SAMPLE_BRANCH_ANY_CALL   = 0x10\n\tPERF_SAMPLE_BRANCH_ANY_RETURN = 0x20\n\tPERF_SAMPLE_BRANCH_IND_CALL   = 0x40\n\tPERF_SAMPLE_BRANCH_ABORT_TX   = 0x80\n\tPERF_SAMPLE_BRANCH_IN_TX      = 0x100\n\tPERF_SAMPLE_BRANCH_NO_TX      = 0x200\n\tPERF_SAMPLE_BRANCH_COND       = 0x400\n\tPERF_SAMPLE_BRANCH_CALL_STACK = 0x800\n\tPERF_SAMPLE_BRANCH_IND_JUMP   = 0x1000\n\tPERF_SAMPLE_BRANCH_CALL       = 0x2000\n\tPERF_SAMPLE_BRANCH_NO_FLAGS   = 0x4000\n\tPERF_SAMPLE_BRANCH_NO_CYCLES  = 0x8000\n\tPERF_SAMPLE_BRANCH_TYPE_SAVE  = 0x10000\n\n\tPERF_FORMAT_TOTAL_TIME_ENABLED = 0x1\n\tPERF_FORMAT_TOTAL_TIME_RUNNING = 0x2\n\tPERF_FORMAT_ID                 = 0x4\n\tPERF_FORMAT_GROUP              = 0x8\n\n\tPERF_RECORD_MMAP            = 0x1\n\tPERF_RECORD_LOST            = 0x2\n\tPERF_RECORD_COMM            = 0x3\n\tPERF_RECORD_EXIT            = 0x4\n\tPERF_RECORD_THROTTLE        = 0x5\n\tPERF_RECORD_UNTHROTTLE      = 0x6\n\tPERF_RECORD_FORK            = 0x7\n\tPERF_RECORD_READ            = 0x8\n\tPERF_RECORD_SAMPLE          = 0x9\n\tPERF_RECORD_MMAP2           = 0xa\n\tPERF_RECORD_AUX             = 0xb\n\tPERF_RECORD_ITRACE_START    = 0xc\n\tPERF_RECORD_LOST_SAMPLES    = 0xd\n\tPERF_RECORD_SWITCH          = 0xe\n\tPERF_RECORD_SWITCH_CPU_WIDE = 0xf\n\tPERF_RECORD_NAMESPACES      = 0x10\n\n\tPERF_CONTEXT_HV     = -0x20\n\tPERF_CONTEXT_KERNEL = -0x80\n\tPERF_CONTEXT_USER   = -0x200\n\n\tPERF_CONTEXT_GUEST        = -0x800\n\tPERF_CONTEXT_GUEST_KERNEL = -0x880\n\tPERF_CONTEXT_GUEST_USER   = -0xa00\n\n\tPERF_FLAG_FD_NO_GROUP = 0x1\n\tPERF_FLAG_FD_OUTPUT   = 0x2\n\tPERF_FLAG_PID_CGROUP  = 0x4\n\tPERF_FLAG_FD_CLOEXEC  = 0x8\n)\n\nconst (\n\tCBitFieldMaskBit0  = 0x1\n\tCBitFieldMaskBit1  = 0x2\n\tCBitFieldMaskBit2  = 0x4\n\tCBitFieldMaskBit3  = 0x8\n\tCBitFieldMaskBit4  = 0x10\n\tCBitFieldMaskBit5  = 0x20\n\tCBitFieldMaskBit6  = 0x40\n\tCBitFieldMaskBit7  = 0x80\n\tCBitFieldMaskBit8  = 0x100\n\tCBitFieldMaskBit9  = 0x200\n\tCBitFieldMaskBit10 = 0x400\n\tCBitFieldMaskBit11 = 0x800\n\tCBitFieldMaskBit12 = 0x1000\n\tCBitFieldMaskBit13 = 0x2000\n\tCBitFieldMaskBit14 = 0x4000\n\tCBitFieldMaskBit15 = 0x8000\n\tCBitFieldMaskBit16 = 0x10000\n\tCBitFieldMaskBit17 = 0x20000\n\tCBitFieldMaskBit18 = 0x40000\n\tCBitFieldMaskBit19 = 0x80000\n\tCBitFieldMaskBit20 = 0x100000\n\tCBitFieldMaskBit21 = 0x200000\n\tCBitFieldMaskBit22 = 0x400000\n\tCBitFieldMaskBit23 = 0x800000\n\tCBitFieldMaskBit24 = 0x1000000\n\tCBitFieldMaskBit25 = 0x2000000\n\tCBitFieldMaskBit26 = 0x4000000\n\tCBitFieldMaskBit27 = 0x8000000\n\tCBitFieldMaskBit28 = 0x10000000\n\tCBitFieldMaskBit29 = 0x20000000\n\tCBitFieldMaskBit30 = 0x40000000\n\tCBitFieldMaskBit31 = 0x80000000\n\tCBitFieldMaskBit32 = 0x100000000\n\tCBitFieldMaskBit33 = 0x200000000\n\tCBitFieldMaskBit34 = 0x400000000\n\tCBitFieldMaskBit35 = 0x800000000\n\tCBitFieldMaskBit36 = 0x1000000000\n\tCBitFieldMaskBit37 = 0x2000000000\n\tCBitFieldMaskBit38 = 0x4000000000\n\tCBitFieldMaskBit39 = 0x8000000000\n\tCBitFieldMaskBit40 = 0x10000000000\n\tCBitFieldMaskBit41 = 0x20000000000\n\tCBitFieldMaskBit42 = 0x40000000000\n\tCBitFieldMaskBit43 = 0x80000000000\n\tCBitFieldMaskBit44 = 0x100000000000\n\tCBitFieldMaskBit45 = 0x200000000000\n\tCBitFieldMaskBit46 = 0x400000000000\n\tCBitFieldMaskBit47 = 0x800000000000\n\tCBitFieldMaskBit48 = 0x1000000000000\n\tCBitFieldMaskBit49 = 0x2000000000000\n\tCBitFieldMaskBit50 = 0x4000000000000\n\tCBitFieldMaskBit51 = 0x8000000000000\n\tCBitFieldMaskBit52 = 0x10000000000000\n\tCBitFieldMaskBit53 = 0x20000000000000\n\tCBitFieldMaskBit54 = 0x40000000000000\n\tCBitFieldMaskBit55 = 0x80000000000000\n\tCBitFieldMaskBit56 = 0x100000000000000\n\tCBitFieldMaskBit57 = 0x200000000000000\n\tCBitFieldMaskBit58 = 0x400000000000000\n\tCBitFieldMaskBit59 = 0x800000000000000\n\tCBitFieldMaskBit60 = 0x1000000000000000\n\tCBitFieldMaskBit61 = 0x2000000000000000\n\tCBitFieldMaskBit62 = 0x4000000000000000\n\tCBitFieldMaskBit63 = 0x8000000000000000\n)\n\ntype SockaddrStorage struct {\n\tFamily uint16\n\t_      [118]uint8\n\t_      uint64\n}\n\ntype TCPMD5Sig struct {\n\tAddr      SockaddrStorage\n\tFlags     uint8\n\tPrefixlen uint8\n\tKeylen    uint16\n\t_         uint32\n\tKey       [80]uint8\n}\n\ntype HDDriveCmdHdr struct {\n\tCommand uint8\n\tNumber  uint8\n\tFeature uint8\n\tCount   uint8\n}\n\ntype HDGeometry struct {\n\tHeads     uint8\n\tSectors   uint8\n\tCylinders uint16\n\tStart     uint64\n}\n\ntype HDDriveID struct {\n\tConfig         uint16\n\tCyls           uint16\n\tReserved2      uint16\n\tHeads          uint16\n\tTrack_bytes    uint16\n\tSector_bytes   uint16\n\tSectors        uint16\n\tVendor0        uint16\n\tVendor1        uint16\n\tVendor2        uint16\n\tSerial_no      [20]uint8\n\tBuf_type       uint16\n\tBuf_size       uint16\n\tEcc_bytes      uint16\n\tFw_rev         [8]uint8\n\tModel          [40]uint8\n\tMax_multsect   uint8\n\tVendor3        uint8\n\tDword_io       uint16\n\tVendor4        uint8\n\tCapability     uint8\n\tReserved50     uint16\n\tVendor5        uint8\n\tTPIO           uint8\n\tVendor6        uint8\n\tTDMA           uint8\n\tField_valid    uint16\n\tCur_cyls       uint16\n\tCur_heads      uint16\n\tCur_sectors    uint16\n\tCur_capacity0  uint16\n\tCur_capacity1  uint16\n\tMultsect       uint8\n\tMultsect_valid uint8\n\tLba_capacity   uint32\n\tDma_1word      uint16\n\tDma_mword      uint16\n\tEide_pio_modes uint16\n\tEide_dma_min   uint16\n\tEide_dma_time  uint16\n\tEide_pio       uint16\n\tEide_pio_iordy uint16\n\tWords69_70     [2]uint16\n\tWords71_74     [4]uint16\n\tQueue_depth    uint16\n\tWords76_79     [4]uint16\n\tMajor_rev_num  uint16\n\tMinor_rev_num  uint16\n\tCommand_set_1  uint16\n\tCommand_set_2  uint16\n\tCfsse          uint16\n\tCfs_enable_1   uint16\n\tCfs_enable_2   uint16\n\tCsf_default    uint16\n\tDma_ultra      uint16\n\tTrseuc         uint16\n\tTrsEuc         uint16\n\tCurAPMvalues   uint16\n\tMprc           uint16\n\tHw_config      uint16\n\tAcoustic       uint16\n\tMsrqs          uint16\n\tSxfert         uint16\n\tSal            uint16\n\tSpg            uint32\n\tLba_capacity_2 uint64\n\tWords104_125   [22]uint16\n\tLast_lun       uint16\n\tWord127        uint16\n\tDlf            uint16\n\tCsfo           uint16\n\tWords130_155   [26]uint16\n\tWord156        uint16\n\tWords157_159   [3]uint16\n\tCfa_power      uint16\n\tWords161_175   [15]uint16\n\tWords176_205   [30]uint16\n\tWords206_254   [49]uint16\n\tIntegrity_word uint16\n}\n\ntype Statfs_t struct {\n\tType    int64\n\tBsize   int64\n\tBlocks  uint64\n\tBfree   uint64\n\tBavail  uint64\n\tFiles   uint64\n\tFfree   uint64\n\tFsid    Fsid\n\tNamelen int64\n\tFrsize  int64\n\tFlags   int64\n\tSpare   [4]int64\n}\n\nconst (\n\tST_MANDLOCK    = 0x40\n\tST_NOATIME     = 0x400\n\tST_NODEV       = 0x4\n\tST_NODIRATIME  = 0x800\n\tST_NOEXEC      = 0x8\n\tST_NOSUID      = 0x2\n\tST_RDONLY      = 0x1\n\tST_RELATIME    = 0x1000\n\tST_SYNCHRONOUS = 0x10\n)\n\ntype TpacketHdr struct {\n\tStatus  uint64\n\tLen     uint32\n\tSnaplen uint32\n\tMac     uint16\n\tNet     uint16\n\tSec     uint32\n\tUsec    uint32\n\t_       [4]byte\n}\n\ntype Tpacket2Hdr struct {\n\tStatus    uint32\n\tLen       uint32\n\tSnaplen   uint32\n\tMac       uint16\n\tNet       uint16\n\tSec       uint32\n\tNsec      uint32\n\tVlan_tci  uint16\n\tVlan_tpid uint16\n\t_         [4]uint8\n}\n\ntype Tpacket3Hdr struct {\n\tNext_offset uint32\n\tSec         uint32\n\tNsec        uint32\n\tSnaplen     uint32\n\tLen         uint32\n\tStatus      uint32\n\tMac         uint16\n\tNet         uint16\n\tHv1         TpacketHdrVariant1\n\t_           [8]uint8\n}\n\ntype TpacketHdrVariant1 struct {\n\tRxhash    uint32\n\tVlan_tci  uint32\n\tVlan_tpid uint16\n\t_         uint16\n}\n\ntype TpacketBlockDesc struct {\n\tVersion uint32\n\tTo_priv uint32\n\tHdr     [40]byte\n}\n\ntype TpacketBDTS struct {\n\tSec  uint32\n\tUsec uint32\n}\n\ntype TpacketHdrV1 struct {\n\tBlock_status        uint32\n\tNum_pkts            uint32\n\tOffset_to_first_pkt uint32\n\tBlk_len             uint32\n\tSeq_num             uint64\n\tTs_first_pkt        TpacketBDTS\n\tTs_last_pkt         TpacketBDTS\n}\n\ntype TpacketReq struct {\n\tBlock_size uint32\n\tBlock_nr   uint32\n\tFrame_size uint32\n\tFrame_nr   uint32\n}\n\ntype TpacketReq3 struct {\n\tBlock_size       uint32\n\tBlock_nr         uint32\n\tFrame_size       uint32\n\tFrame_nr         uint32\n\tRetire_blk_tov   uint32\n\tSizeof_priv      uint32\n\tFeature_req_word uint32\n}\n\ntype TpacketStats struct {\n\tPackets uint32\n\tDrops   uint32\n}\n\ntype TpacketStatsV3 struct {\n\tPackets      uint32\n\tDrops        uint32\n\tFreeze_q_cnt uint32\n}\n\ntype TpacketAuxdata struct {\n\tStatus    uint32\n\tLen       uint32\n\tSnaplen   uint32\n\tMac       uint16\n\tNet       uint16\n\tVlan_tci  uint16\n\tVlan_tpid uint16\n}\n\nconst (\n\tTPACKET_V1 = 0x0\n\tTPACKET_V2 = 0x1\n\tTPACKET_V3 = 0x2\n)\n\nconst (\n\tSizeofTpacketHdr  = 0x20\n\tSizeofTpacket2Hdr = 0x20\n\tSizeofTpacket3Hdr = 0x30\n\n\tSizeofTpacketStats   = 0x8\n\tSizeofTpacketStatsV3 = 0xc\n)\n\nconst (\n\tNF_INET_PRE_ROUTING  = 0x0\n\tNF_INET_LOCAL_IN     = 0x1\n\tNF_INET_FORWARD      = 0x2\n\tNF_INET_LOCAL_OUT    = 0x3\n\tNF_INET_POST_ROUTING = 0x4\n\tNF_INET_NUMHOOKS     = 0x5\n)\n\nconst (\n\tNF_NETDEV_INGRESS  = 0x0\n\tNF_NETDEV_NUMHOOKS = 0x1\n)\n\nconst (\n\tNFPROTO_UNSPEC   = 0x0\n\tNFPROTO_INET     = 0x1\n\tNFPROTO_IPV4     = 0x2\n\tNFPROTO_ARP      = 0x3\n\tNFPROTO_NETDEV   = 0x5\n\tNFPROTO_BRIDGE   = 0x7\n\tNFPROTO_IPV6     = 0xa\n\tNFPROTO_DECNET   = 0xc\n\tNFPROTO_NUMPROTO = 0xd\n)\n\ntype Nfgenmsg struct {\n\tNfgen_family uint8\n\tVersion      uint8\n\tRes_id       uint16\n}\n\nconst (\n\tNFNL_BATCH_UNSPEC = 0x0\n\tNFNL_BATCH_GENID  = 0x1\n)\n\nconst (\n\tNFT_REG_VERDICT                   = 0x0\n\tNFT_REG_1                         = 0x1\n\tNFT_REG_2                         = 0x2\n\tNFT_REG_3                         = 0x3\n\tNFT_REG_4                         = 0x4\n\tNFT_REG32_00                      = 0x8\n\tNFT_REG32_01                      = 0x9\n\tNFT_REG32_02                      = 0xa\n\tNFT_REG32_03                      = 0xb\n\tNFT_REG32_04                      = 0xc\n\tNFT_REG32_05                      = 0xd\n\tNFT_REG32_06                      = 0xe\n\tNFT_REG32_07                      = 0xf\n\tNFT_REG32_08                      = 0x10\n\tNFT_REG32_09                      = 0x11\n\tNFT_REG32_10                      = 0x12\n\tNFT_REG32_11                      = 0x13\n\tNFT_REG32_12                      = 0x14\n\tNFT_REG32_13                      = 0x15\n\tNFT_REG32_14                      = 0x16\n\tNFT_REG32_15                      = 0x17\n\tNFT_CONTINUE                      = -0x1\n\tNFT_BREAK                         = -0x2\n\tNFT_JUMP                          = -0x3\n\tNFT_GOTO                          = -0x4\n\tNFT_RETURN                        = -0x5\n\tNFT_MSG_NEWTABLE                  = 0x0\n\tNFT_MSG_GETTABLE                  = 0x1\n\tNFT_MSG_DELTABLE                  = 0x2\n\tNFT_MSG_NEWCHAIN                  = 0x3\n\tNFT_MSG_GETCHAIN                  = 0x4\n\tNFT_MSG_DELCHAIN                  = 0x5\n\tNFT_MSG_NEWRULE                   = 0x6\n\tNFT_MSG_GETRULE                   = 0x7\n\tNFT_MSG_DELRULE                   = 0x8\n\tNFT_MSG_NEWSET                    = 0x9\n\tNFT_MSG_GETSET                    = 0xa\n\tNFT_MSG_DELSET                    = 0xb\n\tNFT_MSG_NEWSETELEM                = 0xc\n\tNFT_MSG_GETSETELEM                = 0xd\n\tNFT_MSG_DELSETELEM                = 0xe\n\tNFT_MSG_NEWGEN                    = 0xf\n\tNFT_MSG_GETGEN                    = 0x10\n\tNFT_MSG_TRACE                     = 0x11\n\tNFT_MSG_NEWOBJ                    = 0x12\n\tNFT_MSG_GETOBJ                    = 0x13\n\tNFT_MSG_DELOBJ                    = 0x14\n\tNFT_MSG_GETOBJ_RESET              = 0x15\n\tNFT_MSG_MAX                       = 0x19\n\tNFTA_LIST_UNPEC                   = 0x0\n\tNFTA_LIST_ELEM                    = 0x1\n\tNFTA_HOOK_UNSPEC                  = 0x0\n\tNFTA_HOOK_HOOKNUM                 = 0x1\n\tNFTA_HOOK_PRIORITY                = 0x2\n\tNFTA_HOOK_DEV                     = 0x3\n\tNFT_TABLE_F_DORMANT               = 0x1\n\tNFTA_TABLE_UNSPEC                 = 0x0\n\tNFTA_TABLE_NAME                   = 0x1\n\tNFTA_TABLE_FLAGS                  = 0x2\n\tNFTA_TABLE_USE                    = 0x3\n\tNFTA_CHAIN_UNSPEC                 = 0x0\n\tNFTA_CHAIN_TABLE                  = 0x1\n\tNFTA_CHAIN_HANDLE                 = 0x2\n\tNFTA_CHAIN_NAME                   = 0x3\n\tNFTA_CHAIN_HOOK                   = 0x4\n\tNFTA_CHAIN_POLICY                 = 0x5\n\tNFTA_CHAIN_USE                    = 0x6\n\tNFTA_CHAIN_TYPE                   = 0x7\n\tNFTA_CHAIN_COUNTERS               = 0x8\n\tNFTA_CHAIN_PAD                    = 0x9\n\tNFTA_RULE_UNSPEC                  = 0x0\n\tNFTA_RULE_TABLE                   = 0x1\n\tNFTA_RULE_CHAIN                   = 0x2\n\tNFTA_RULE_HANDLE                  = 0x3\n\tNFTA_RULE_EXPRESSIONS             = 0x4\n\tNFTA_RULE_COMPAT                  = 0x5\n\tNFTA_RULE_POSITION                = 0x6\n\tNFTA_RULE_USERDATA                = 0x7\n\tNFTA_RULE_PAD                     = 0x8\n\tNFTA_RULE_ID                      = 0x9\n\tNFT_RULE_COMPAT_F_INV             = 0x2\n\tNFT_RULE_COMPAT_F_MASK            = 0x2\n\tNFTA_RULE_COMPAT_UNSPEC           = 0x0\n\tNFTA_RULE_COMPAT_PROTO            = 0x1\n\tNFTA_RULE_COMPAT_FLAGS            = 0x2\n\tNFT_SET_ANONYMOUS                 = 0x1\n\tNFT_SET_CONSTANT                  = 0x2\n\tNFT_SET_INTERVAL                  = 0x4\n\tNFT_SET_MAP                       = 0x8\n\tNFT_SET_TIMEOUT                   = 0x10\n\tNFT_SET_EVAL                      = 0x20\n\tNFT_SET_OBJECT                    = 0x40\n\tNFT_SET_POL_PERFORMANCE           = 0x0\n\tNFT_SET_POL_MEMORY                = 0x1\n\tNFTA_SET_DESC_UNSPEC              = 0x0\n\tNFTA_SET_DESC_SIZE                = 0x1\n\tNFTA_SET_UNSPEC                   = 0x0\n\tNFTA_SET_TABLE                    = 0x1\n\tNFTA_SET_NAME                     = 0x2\n\tNFTA_SET_FLAGS                    = 0x3\n\tNFTA_SET_KEY_TYPE                 = 0x4\n\tNFTA_SET_KEY_LEN                  = 0x5\n\tNFTA_SET_DATA_TYPE                = 0x6\n\tNFTA_SET_DATA_LEN                 = 0x7\n\tNFTA_SET_POLICY                   = 0x8\n\tNFTA_SET_DESC                     = 0x9\n\tNFTA_SET_ID                       = 0xa\n\tNFTA_SET_TIMEOUT                  = 0xb\n\tNFTA_SET_GC_INTERVAL              = 0xc\n\tNFTA_SET_USERDATA                 = 0xd\n\tNFTA_SET_PAD                      = 0xe\n\tNFTA_SET_OBJ_TYPE                 = 0xf\n\tNFT_SET_ELEM_INTERVAL_END         = 0x1\n\tNFTA_SET_ELEM_UNSPEC              = 0x0\n\tNFTA_SET_ELEM_KEY                 = 0x1\n\tNFTA_SET_ELEM_DATA                = 0x2\n\tNFTA_SET_ELEM_FLAGS               = 0x3\n\tNFTA_SET_ELEM_TIMEOUT             = 0x4\n\tNFTA_SET_ELEM_EXPIRATION          = 0x5\n\tNFTA_SET_ELEM_USERDATA            = 0x6\n\tNFTA_SET_ELEM_EXPR                = 0x7\n\tNFTA_SET_ELEM_PAD                 = 0x8\n\tNFTA_SET_ELEM_OBJREF              = 0x9\n\tNFTA_SET_ELEM_LIST_UNSPEC         = 0x0\n\tNFTA_SET_ELEM_LIST_TABLE          = 0x1\n\tNFTA_SET_ELEM_LIST_SET            = 0x2\n\tNFTA_SET_ELEM_LIST_ELEMENTS       = 0x3\n\tNFTA_SET_ELEM_LIST_SET_ID         = 0x4\n\tNFT_DATA_VALUE                    = 0x0\n\tNFT_DATA_VERDICT                  = 0xffffff00\n\tNFTA_DATA_UNSPEC                  = 0x0\n\tNFTA_DATA_VALUE                   = 0x1\n\tNFTA_DATA_VERDICT                 = 0x2\n\tNFTA_VERDICT_UNSPEC               = 0x0\n\tNFTA_VERDICT_CODE                 = 0x1\n\tNFTA_VERDICT_CHAIN                = 0x2\n\tNFTA_EXPR_UNSPEC                  = 0x0\n\tNFTA_EXPR_NAME                    = 0x1\n\tNFTA_EXPR_DATA                    = 0x2\n\tNFTA_IMMEDIATE_UNSPEC             = 0x0\n\tNFTA_IMMEDIATE_DREG               = 0x1\n\tNFTA_IMMEDIATE_DATA               = 0x2\n\tNFTA_BITWISE_UNSPEC               = 0x0\n\tNFTA_BITWISE_SREG                 = 0x1\n\tNFTA_BITWISE_DREG                 = 0x2\n\tNFTA_BITWISE_LEN                  = 0x3\n\tNFTA_BITWISE_MASK                 = 0x4\n\tNFTA_BITWISE_XOR                  = 0x5\n\tNFT_BYTEORDER_NTOH                = 0x0\n\tNFT_BYTEORDER_HTON                = 0x1\n\tNFTA_BYTEORDER_UNSPEC             = 0x0\n\tNFTA_BYTEORDER_SREG               = 0x1\n\tNFTA_BYTEORDER_DREG               = 0x2\n\tNFTA_BYTEORDER_OP                 = 0x3\n\tNFTA_BYTEORDER_LEN                = 0x4\n\tNFTA_BYTEORDER_SIZE               = 0x5\n\tNFT_CMP_EQ                        = 0x0\n\tNFT_CMP_NEQ                       = 0x1\n\tNFT_CMP_LT                        = 0x2\n\tNFT_CMP_LTE                       = 0x3\n\tNFT_CMP_GT                        = 0x4\n\tNFT_CMP_GTE                       = 0x5\n\tNFTA_CMP_UNSPEC                   = 0x0\n\tNFTA_CMP_SREG                     = 0x1\n\tNFTA_CMP_OP                       = 0x2\n\tNFTA_CMP_DATA                     = 0x3\n\tNFT_RANGE_EQ                      = 0x0\n\tNFT_RANGE_NEQ                     = 0x1\n\tNFTA_RANGE_UNSPEC                 = 0x0\n\tNFTA_RANGE_SREG                   = 0x1\n\tNFTA_RANGE_OP                     = 0x2\n\tNFTA_RANGE_FROM_DATA              = 0x3\n\tNFTA_RANGE_TO_DATA                = 0x4\n\tNFT_LOOKUP_F_INV                  = 0x1\n\tNFTA_LOOKUP_UNSPEC                = 0x0\n\tNFTA_LOOKUP_SET                   = 0x1\n\tNFTA_LOOKUP_SREG                  = 0x2\n\tNFTA_LOOKUP_DREG                  = 0x3\n\tNFTA_LOOKUP_SET_ID                = 0x4\n\tNFTA_LOOKUP_FLAGS                 = 0x5\n\tNFT_DYNSET_OP_ADD                 = 0x0\n\tNFT_DYNSET_OP_UPDATE              = 0x1\n\tNFT_DYNSET_F_INV                  = 0x1\n\tNFTA_DYNSET_UNSPEC                = 0x0\n\tNFTA_DYNSET_SET_NAME              = 0x1\n\tNFTA_DYNSET_SET_ID                = 0x2\n\tNFTA_DYNSET_OP                    = 0x3\n\tNFTA_DYNSET_SREG_KEY              = 0x4\n\tNFTA_DYNSET_SREG_DATA             = 0x5\n\tNFTA_DYNSET_TIMEOUT               = 0x6\n\tNFTA_DYNSET_EXPR                  = 0x7\n\tNFTA_DYNSET_PAD                   = 0x8\n\tNFTA_DYNSET_FLAGS                 = 0x9\n\tNFT_PAYLOAD_LL_HEADER             = 0x0\n\tNFT_PAYLOAD_NETWORK_HEADER        = 0x1\n\tNFT_PAYLOAD_TRANSPORT_HEADER      = 0x2\n\tNFT_PAYLOAD_CSUM_NONE             = 0x0\n\tNFT_PAYLOAD_CSUM_INET             = 0x1\n\tNFT_PAYLOAD_L4CSUM_PSEUDOHDR      = 0x1\n\tNFTA_PAYLOAD_UNSPEC               = 0x0\n\tNFTA_PAYLOAD_DREG                 = 0x1\n\tNFTA_PAYLOAD_BASE                 = 0x2\n\tNFTA_PAYLOAD_OFFSET               = 0x3\n\tNFTA_PAYLOAD_LEN                  = 0x4\n\tNFTA_PAYLOAD_SREG                 = 0x5\n\tNFTA_PAYLOAD_CSUM_TYPE            = 0x6\n\tNFTA_PAYLOAD_CSUM_OFFSET          = 0x7\n\tNFTA_PAYLOAD_CSUM_FLAGS           = 0x8\n\tNFT_EXTHDR_F_PRESENT              = 0x1\n\tNFT_EXTHDR_OP_IPV6                = 0x0\n\tNFT_EXTHDR_OP_TCPOPT              = 0x1\n\tNFTA_EXTHDR_UNSPEC                = 0x0\n\tNFTA_EXTHDR_DREG                  = 0x1\n\tNFTA_EXTHDR_TYPE                  = 0x2\n\tNFTA_EXTHDR_OFFSET                = 0x3\n\tNFTA_EXTHDR_LEN                   = 0x4\n\tNFTA_EXTHDR_FLAGS                 = 0x5\n\tNFTA_EXTHDR_OP                    = 0x6\n\tNFTA_EXTHDR_SREG                  = 0x7\n\tNFT_META_LEN                      = 0x0\n\tNFT_META_PROTOCOL                 = 0x1\n\tNFT_META_PRIORITY                 = 0x2\n\tNFT_META_MARK                     = 0x3\n\tNFT_META_IIF                      = 0x4\n\tNFT_META_OIF                      = 0x5\n\tNFT_META_IIFNAME                  = 0x6\n\tNFT_META_OIFNAME                  = 0x7\n\tNFT_META_IIFTYPE                  = 0x8\n\tNFT_META_OIFTYPE                  = 0x9\n\tNFT_META_SKUID                    = 0xa\n\tNFT_META_SKGID                    = 0xb\n\tNFT_META_NFTRACE                  = 0xc\n\tNFT_META_RTCLASSID                = 0xd\n\tNFT_META_SECMARK                  = 0xe\n\tNFT_META_NFPROTO                  = 0xf\n\tNFT_META_L4PROTO                  = 0x10\n\tNFT_META_BRI_IIFNAME              = 0x11\n\tNFT_META_BRI_OIFNAME              = 0x12\n\tNFT_META_PKTTYPE                  = 0x13\n\tNFT_META_CPU                      = 0x14\n\tNFT_META_IIFGROUP                 = 0x15\n\tNFT_META_OIFGROUP                 = 0x16\n\tNFT_META_CGROUP                   = 0x17\n\tNFT_META_PRANDOM                  = 0x18\n\tNFT_RT_CLASSID                    = 0x0\n\tNFT_RT_NEXTHOP4                   = 0x1\n\tNFT_RT_NEXTHOP6                   = 0x2\n\tNFT_RT_TCPMSS                     = 0x3\n\tNFT_HASH_JENKINS                  = 0x0\n\tNFT_HASH_SYM                      = 0x1\n\tNFTA_HASH_UNSPEC                  = 0x0\n\tNFTA_HASH_SREG                    = 0x1\n\tNFTA_HASH_DREG                    = 0x2\n\tNFTA_HASH_LEN                     = 0x3\n\tNFTA_HASH_MODULUS                 = 0x4\n\tNFTA_HASH_SEED                    = 0x5\n\tNFTA_HASH_OFFSET                  = 0x6\n\tNFTA_HASH_TYPE                    = 0x7\n\tNFTA_META_UNSPEC                  = 0x0\n\tNFTA_META_DREG                    = 0x1\n\tNFTA_META_KEY                     = 0x2\n\tNFTA_META_SREG                    = 0x3\n\tNFTA_RT_UNSPEC                    = 0x0\n\tNFTA_RT_DREG                      = 0x1\n\tNFTA_RT_KEY                       = 0x2\n\tNFT_CT_STATE                      = 0x0\n\tNFT_CT_DIRECTION                  = 0x1\n\tNFT_CT_STATUS                     = 0x2\n\tNFT_CT_MARK                       = 0x3\n\tNFT_CT_SECMARK                    = 0x4\n\tNFT_CT_EXPIRATION                 = 0x5\n\tNFT_CT_HELPER                     = 0x6\n\tNFT_CT_L3PROTOCOL                 = 0x7\n\tNFT_CT_SRC                        = 0x8\n\tNFT_CT_DST                        = 0x9\n\tNFT_CT_PROTOCOL                   = 0xa\n\tNFT_CT_PROTO_SRC                  = 0xb\n\tNFT_CT_PROTO_DST                  = 0xc\n\tNFT_CT_LABELS                     = 0xd\n\tNFT_CT_PKTS                       = 0xe\n\tNFT_CT_BYTES                      = 0xf\n\tNFT_CT_AVGPKT                     = 0x10\n\tNFT_CT_ZONE                       = 0x11\n\tNFT_CT_EVENTMASK                  = 0x12\n\tNFTA_CT_UNSPEC                    = 0x0\n\tNFTA_CT_DREG                      = 0x1\n\tNFTA_CT_KEY                       = 0x2\n\tNFTA_CT_DIRECTION                 = 0x3\n\tNFTA_CT_SREG                      = 0x4\n\tNFT_LIMIT_PKTS                    = 0x0\n\tNFT_LIMIT_PKT_BYTES               = 0x1\n\tNFT_LIMIT_F_INV                   = 0x1\n\tNFTA_LIMIT_UNSPEC                 = 0x0\n\tNFTA_LIMIT_RATE                   = 0x1\n\tNFTA_LIMIT_UNIT                   = 0x2\n\tNFTA_LIMIT_BURST                  = 0x3\n\tNFTA_LIMIT_TYPE                   = 0x4\n\tNFTA_LIMIT_FLAGS                  = 0x5\n\tNFTA_LIMIT_PAD                    = 0x6\n\tNFTA_COUNTER_UNSPEC               = 0x0\n\tNFTA_COUNTER_BYTES                = 0x1\n\tNFTA_COUNTER_PACKETS              = 0x2\n\tNFTA_COUNTER_PAD                  = 0x3\n\tNFTA_LOG_UNSPEC                   = 0x0\n\tNFTA_LOG_GROUP                    = 0x1\n\tNFTA_LOG_PREFIX                   = 0x2\n\tNFTA_LOG_SNAPLEN                  = 0x3\n\tNFTA_LOG_QTHRESHOLD               = 0x4\n\tNFTA_LOG_LEVEL                    = 0x5\n\tNFTA_LOG_FLAGS                    = 0x6\n\tNFTA_QUEUE_UNSPEC                 = 0x0\n\tNFTA_QUEUE_NUM                    = 0x1\n\tNFTA_QUEUE_TOTAL                  = 0x2\n\tNFTA_QUEUE_FLAGS                  = 0x3\n\tNFTA_QUEUE_SREG_QNUM              = 0x4\n\tNFT_QUOTA_F_INV                   = 0x1\n\tNFT_QUOTA_F_DEPLETED              = 0x2\n\tNFTA_QUOTA_UNSPEC                 = 0x0\n\tNFTA_QUOTA_BYTES                  = 0x1\n\tNFTA_QUOTA_FLAGS                  = 0x2\n\tNFTA_QUOTA_PAD                    = 0x3\n\tNFTA_QUOTA_CONSUMED               = 0x4\n\tNFT_REJECT_ICMP_UNREACH           = 0x0\n\tNFT_REJECT_TCP_RST                = 0x1\n\tNFT_REJECT_ICMPX_UNREACH          = 0x2\n\tNFT_REJECT_ICMPX_NO_ROUTE         = 0x0\n\tNFT_REJECT_ICMPX_PORT_UNREACH     = 0x1\n\tNFT_REJECT_ICMPX_HOST_UNREACH     = 0x2\n\tNFT_REJECT_ICMPX_ADMIN_PROHIBITED = 0x3\n\tNFTA_REJECT_UNSPEC                = 0x0\n\tNFTA_REJECT_TYPE                  = 0x1\n\tNFTA_REJECT_ICMP_CODE             = 0x2\n\tNFT_NAT_SNAT                      = 0x0\n\tNFT_NAT_DNAT                      = 0x1\n\tNFTA_NAT_UNSPEC                   = 0x0\n\tNFTA_NAT_TYPE                     = 0x1\n\tNFTA_NAT_FAMILY                   = 0x2\n\tNFTA_NAT_REG_ADDR_MIN             = 0x3\n\tNFTA_NAT_REG_ADDR_MAX             = 0x4\n\tNFTA_NAT_REG_PROTO_MIN            = 0x5\n\tNFTA_NAT_REG_PROTO_MAX            = 0x6\n\tNFTA_NAT_FLAGS                    = 0x7\n\tNFTA_MASQ_UNSPEC                  = 0x0\n\tNFTA_MASQ_FLAGS                   = 0x1\n\tNFTA_MASQ_REG_PROTO_MIN           = 0x2\n\tNFTA_MASQ_REG_PROTO_MAX           = 0x3\n\tNFTA_REDIR_UNSPEC                 = 0x0\n\tNFTA_REDIR_REG_PROTO_MIN          = 0x1\n\tNFTA_REDIR_REG_PROTO_MAX          = 0x2\n\tNFTA_REDIR_FLAGS                  = 0x3\n\tNFTA_DUP_UNSPEC                   = 0x0\n\tNFTA_DUP_SREG_ADDR                = 0x1\n\tNFTA_DUP_SREG_DEV                 = 0x2\n\tNFTA_FWD_UNSPEC                   = 0x0\n\tNFTA_FWD_SREG_DEV                 = 0x1\n\tNFTA_OBJREF_UNSPEC                = 0x0\n\tNFTA_OBJREF_IMM_TYPE              = 0x1\n\tNFTA_OBJREF_IMM_NAME              = 0x2\n\tNFTA_OBJREF_SET_SREG              = 0x3\n\tNFTA_OBJREF_SET_NAME              = 0x4\n\tNFTA_OBJREF_SET_ID                = 0x5\n\tNFTA_GEN_UNSPEC                   = 0x0\n\tNFTA_GEN_ID                       = 0x1\n\tNFTA_GEN_PROC_PID                 = 0x2\n\tNFTA_GEN_PROC_NAME                = 0x3\n\tNFTA_FIB_UNSPEC                   = 0x0\n\tNFTA_FIB_DREG                     = 0x1\n\tNFTA_FIB_RESULT                   = 0x2\n\tNFTA_FIB_FLAGS                    = 0x3\n\tNFT_FIB_RESULT_UNSPEC             = 0x0\n\tNFT_FIB_RESULT_OIF                = 0x1\n\tNFT_FIB_RESULT_OIFNAME            = 0x2\n\tNFT_FIB_RESULT_ADDRTYPE           = 0x3\n\tNFTA_FIB_F_SADDR                  = 0x1\n\tNFTA_FIB_F_DADDR                  = 0x2\n\tNFTA_FIB_F_MARK                   = 0x4\n\tNFTA_FIB_F_IIF                    = 0x8\n\tNFTA_FIB_F_OIF                    = 0x10\n\tNFTA_FIB_F_PRESENT                = 0x20\n\tNFTA_CT_HELPER_UNSPEC             = 0x0\n\tNFTA_CT_HELPER_NAME               = 0x1\n\tNFTA_CT_HELPER_L3PROTO            = 0x2\n\tNFTA_CT_HELPER_L4PROTO            = 0x3\n\tNFTA_OBJ_UNSPEC                   = 0x0\n\tNFTA_OBJ_TABLE                    = 0x1\n\tNFTA_OBJ_NAME                     = 0x2\n\tNFTA_OBJ_TYPE                     = 0x3\n\tNFTA_OBJ_DATA                     = 0x4\n\tNFTA_OBJ_USE                      = 0x5\n\tNFTA_TRACE_UNSPEC                 = 0x0\n\tNFTA_TRACE_TABLE                  = 0x1\n\tNFTA_TRACE_CHAIN                  = 0x2\n\tNFTA_TRACE_RULE_HANDLE            = 0x3\n\tNFTA_TRACE_TYPE                   = 0x4\n\tNFTA_TRACE_VERDICT                = 0x5\n\tNFTA_TRACE_ID                     = 0x6\n\tNFTA_TRACE_LL_HEADER              = 0x7\n\tNFTA_TRACE_NETWORK_HEADER         = 0x8\n\tNFTA_TRACE_TRANSPORT_HEADER       = 0x9\n\tNFTA_TRACE_IIF                    = 0xa\n\tNFTA_TRACE_IIFTYPE                = 0xb\n\tNFTA_TRACE_OIF                    = 0xc\n\tNFTA_TRACE_OIFTYPE                = 0xd\n\tNFTA_TRACE_MARK                   = 0xe\n\tNFTA_TRACE_NFPROTO                = 0xf\n\tNFTA_TRACE_POLICY                 = 0x10\n\tNFTA_TRACE_PAD                    = 0x11\n\tNFT_TRACETYPE_UNSPEC              = 0x0\n\tNFT_TRACETYPE_POLICY              = 0x1\n\tNFT_TRACETYPE_RETURN              = 0x2\n\tNFT_TRACETYPE_RULE                = 0x3\n\tNFTA_NG_UNSPEC                    = 0x0\n\tNFTA_NG_DREG                      = 0x1\n\tNFTA_NG_MODULUS                   = 0x2\n\tNFTA_NG_TYPE                      = 0x3\n\tNFTA_NG_OFFSET                    = 0x4\n\tNFT_NG_INCREMENTAL                = 0x0\n\tNFT_NG_RANDOM                     = 0x1\n)\n\ntype RTCTime struct {\n\tSec   int32\n\tMin   int32\n\tHour  int32\n\tMday  int32\n\tMon   int32\n\tYear  int32\n\tWday  int32\n\tYday  int32\n\tIsdst int32\n}\n\ntype RTCWkAlrm struct {\n\tEnabled uint8\n\tPending uint8\n\tTime    RTCTime\n}\n\ntype RTCPLLInfo struct {\n\tCtrl    int32\n\tValue   int32\n\tMax     int32\n\tMin     int32\n\tPosmult int32\n\tNegmult int32\n\tClock   int64\n}\n\ntype BlkpgIoctlArg struct {\n\tOp      int32\n\tFlags   int32\n\tDatalen int32\n\tData    *byte\n}\n\ntype BlkpgPartition struct {\n\tStart   int64\n\tLength  int64\n\tPno     int32\n\tDevname [64]uint8\n\tVolname [64]uint8\n\t_       [4]byte\n}\n\nconst (\n\tBLKPG                  = 0x1269\n\tBLKPG_ADD_PARTITION    = 0x1\n\tBLKPG_DEL_PARTITION    = 0x2\n\tBLKPG_RESIZE_PARTITION = 0x3\n)\n\nconst (\n\tNETNSA_NONE = 0x0\n\tNETNSA_NSID = 0x1\n\tNETNSA_PID  = 0x2\n\tNETNSA_FD   = 0x3\n)\n\ntype XDPRingOffset struct {\n\tProducer uint64\n\tConsumer uint64\n\tDesc     uint64\n}\n\ntype XDPMmapOffsets struct {\n\tRx XDPRingOffset\n\tTx XDPRingOffset\n\tFr XDPRingOffset\n\tCr XDPRingOffset\n}\n\ntype XDPUmemReg struct {\n\tAddr     uint64\n\tLen      uint64\n\tSize     uint32\n\tHeadroom uint32\n}\n\ntype XDPStatistics struct {\n\tRx_dropped       uint64\n\tRx_invalid_descs uint64\n\tTx_invalid_descs uint64\n}\n\ntype XDPDesc struct {\n\tAddr    uint64\n\tLen     uint32\n\tOptions uint32\n}\n\nconst (\n\tNCSI_CMD_UNSPEC                 = 0x0\n\tNCSI_CMD_PKG_INFO               = 0x1\n\tNCSI_CMD_SET_INTERFACE          = 0x2\n\tNCSI_CMD_CLEAR_INTERFACE        = 0x3\n\tNCSI_ATTR_UNSPEC                = 0x0\n\tNCSI_ATTR_IFINDEX               = 0x1\n\tNCSI_ATTR_PACKAGE_LIST          = 0x2\n\tNCSI_ATTR_PACKAGE_ID            = 0x3\n\tNCSI_ATTR_CHANNEL_ID            = 0x4\n\tNCSI_PKG_ATTR_UNSPEC            = 0x0\n\tNCSI_PKG_ATTR                   = 0x1\n\tNCSI_PKG_ATTR_ID                = 0x2\n\tNCSI_PKG_ATTR_FORCED            = 0x3\n\tNCSI_PKG_ATTR_CHANNEL_LIST      = 0x4\n\tNCSI_CHANNEL_ATTR_UNSPEC        = 0x0\n\tNCSI_CHANNEL_ATTR               = 0x1\n\tNCSI_CHANNEL_ATTR_ID            = 0x2\n\tNCSI_CHANNEL_ATTR_VERSION_MAJOR = 0x3\n\tNCSI_CHANNEL_ATTR_VERSION_MINOR = 0x4\n\tNCSI_CHANNEL_ATTR_VERSION_STR   = 0x5\n\tNCSI_CHANNEL_ATTR_LINK_STATE    = 0x6\n\tNCSI_CHANNEL_ATTR_ACTIVE        = 0x7\n\tNCSI_CHANNEL_ATTR_FORCED        = 0x8\n\tNCSI_CHANNEL_ATTR_VLAN_LIST     = 0x9\n\tNCSI_CHANNEL_ATTR_VLAN_ID       = 0xa\n)\n\ntype ScmTimestamping struct {\n\tTs [3]Timespec\n}\n\nconst (\n\tSOF_TIMESTAMPING_TX_HARDWARE  = 0x1\n\tSOF_TIMESTAMPING_TX_SOFTWARE  = 0x2\n\tSOF_TIMESTAMPING_RX_HARDWARE  = 0x4\n\tSOF_TIMESTAMPING_RX_SOFTWARE  = 0x8\n\tSOF_TIMESTAMPING_SOFTWARE     = 0x10\n\tSOF_TIMESTAMPING_SYS_HARDWARE = 0x20\n\tSOF_TIMESTAMPING_RAW_HARDWARE = 0x40\n\tSOF_TIMESTAMPING_OPT_ID       = 0x80\n\tSOF_TIMESTAMPING_TX_SCHED     = 0x100\n\tSOF_TIMESTAMPING_TX_ACK       = 0x200\n\tSOF_TIMESTAMPING_OPT_CMSG     = 0x400\n\tSOF_TIMESTAMPING_OPT_TSONLY   = 0x800\n\tSOF_TIMESTAMPING_OPT_STATS    = 0x1000\n\tSOF_TIMESTAMPING_OPT_PKTINFO  = 0x2000\n\tSOF_TIMESTAMPING_OPT_TX_SWHW  = 0x4000\n\n\tSOF_TIMESTAMPING_LAST = 0x4000\n\tSOF_TIMESTAMPING_MASK = 0x7fff\n\n\tSCM_TSTAMP_SND   = 0x0\n\tSCM_TSTAMP_SCHED = 0x1\n\tSCM_TSTAMP_ACK   = 0x2\n)\n\ntype SockExtendedErr struct {\n\tErrno  uint32\n\tOrigin uint8\n\tType   uint8\n\tCode   uint8\n\tPad    uint8\n\tInfo   uint32\n\tData   uint32\n}\n\ntype FanotifyEventMetadata struct {\n\tEvent_len    uint32\n\tVers         uint8\n\tReserved     uint8\n\tMetadata_len uint16\n\tMask         uint64\n\tFd           int32\n\tPid          int32\n}\n\ntype FanotifyResponse struct {\n\tFd       int32\n\tResponse uint32\n}\n\nconst (\n\tCRYPTO_MSG_BASE      = 0x10\n\tCRYPTO_MSG_NEWALG    = 0x10\n\tCRYPTO_MSG_DELALG    = 0x11\n\tCRYPTO_MSG_UPDATEALG = 0x12\n\tCRYPTO_MSG_GETALG    = 0x13\n\tCRYPTO_MSG_DELRNG    = 0x14\n\tCRYPTO_MSG_GETSTAT   = 0x15\n)\n\nconst (\n\tCRYPTOCFGA_UNSPEC           = 0x0\n\tCRYPTOCFGA_PRIORITY_VAL     = 0x1\n\tCRYPTOCFGA_REPORT_LARVAL    = 0x2\n\tCRYPTOCFGA_REPORT_HASH      = 0x3\n\tCRYPTOCFGA_REPORT_BLKCIPHER = 0x4\n\tCRYPTOCFGA_REPORT_AEAD      = 0x5\n\tCRYPTOCFGA_REPORT_COMPRESS  = 0x6\n\tCRYPTOCFGA_REPORT_RNG       = 0x7\n\tCRYPTOCFGA_REPORT_CIPHER    = 0x8\n\tCRYPTOCFGA_REPORT_AKCIPHER  = 0x9\n\tCRYPTOCFGA_REPORT_KPP       = 0xa\n\tCRYPTOCFGA_REPORT_ACOMP     = 0xb\n\tCRYPTOCFGA_STAT_LARVAL      = 0xc\n\tCRYPTOCFGA_STAT_HASH        = 0xd\n\tCRYPTOCFGA_STAT_BLKCIPHER   = 0xe\n\tCRYPTOCFGA_STAT_AEAD        = 0xf\n\tCRYPTOCFGA_STAT_COMPRESS    = 0x10\n\tCRYPTOCFGA_STAT_RNG         = 0x11\n\tCRYPTOCFGA_STAT_CIPHER      = 0x12\n\tCRYPTOCFGA_STAT_AKCIPHER    = 0x13\n\tCRYPTOCFGA_STAT_KPP         = 0x14\n\tCRYPTOCFGA_STAT_ACOMP       = 0x15\n)\n\ntype CryptoUserAlg struct {\n\tName        [64]uint8\n\tDriver_name [64]uint8\n\tModule_name [64]uint8\n\tType        uint32\n\tMask        uint32\n\tRefcnt      uint32\n\tFlags       uint32\n}\n\ntype CryptoStatAEAD struct {\n\tType         [64]uint8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatAKCipher struct {\n\tType         [64]uint8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tVerify_cnt   uint64\n\tSign_cnt     uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatCipher struct {\n\tType         [64]uint8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatCompress struct {\n\tType            [64]uint8\n\tCompress_cnt    uint64\n\tCompress_tlen   uint64\n\tDecompress_cnt  uint64\n\tDecompress_tlen uint64\n\tErr_cnt         uint64\n}\n\ntype CryptoStatHash struct {\n\tType      [64]uint8\n\tHash_cnt  uint64\n\tHash_tlen uint64\n\tErr_cnt   uint64\n}\n\ntype CryptoStatKPP struct {\n\tType                      [64]uint8\n\tSetsecret_cnt             uint64\n\tGenerate_public_key_cnt   uint64\n\tCompute_shared_secret_cnt uint64\n\tErr_cnt                   uint64\n}\n\ntype CryptoStatRNG struct {\n\tType          [64]uint8\n\tGenerate_cnt  uint64\n\tGenerate_tlen uint64\n\tSeed_cnt      uint64\n\tErr_cnt       uint64\n}\n\ntype CryptoStatLarval struct {\n\tType [64]uint8\n}\n\ntype CryptoReportLarval struct {\n\tType [64]uint8\n}\n\ntype CryptoReportHash struct {\n\tType       [64]uint8\n\tBlocksize  uint32\n\tDigestsize uint32\n}\n\ntype CryptoReportCipher struct {\n\tType        [64]uint8\n\tBlocksize   uint32\n\tMin_keysize uint32\n\tMax_keysize uint32\n}\n\ntype CryptoReportBlkCipher struct {\n\tType        [64]uint8\n\tGeniv       [64]uint8\n\tBlocksize   uint32\n\tMin_keysize uint32\n\tMax_keysize uint32\n\tIvsize      uint32\n}\n\ntype CryptoReportAEAD struct {\n\tType        [64]uint8\n\tGeniv       [64]uint8\n\tBlocksize   uint32\n\tMaxauthsize uint32\n\tIvsize      uint32\n}\n\ntype CryptoReportComp struct {\n\tType [64]uint8\n}\n\ntype CryptoReportRNG struct {\n\tType     [64]uint8\n\tSeedsize uint32\n}\n\ntype CryptoReportAKCipher struct {\n\tType [64]uint8\n}\n\ntype CryptoReportKPP struct {\n\tType [64]uint8\n}\n\ntype CryptoReportAcomp struct {\n\tType [64]uint8\n}\n\nconst (\n\tBPF_REG_0                           = 0x0\n\tBPF_REG_1                           = 0x1\n\tBPF_REG_2                           = 0x2\n\tBPF_REG_3                           = 0x3\n\tBPF_REG_4                           = 0x4\n\tBPF_REG_5                           = 0x5\n\tBPF_REG_6                           = 0x6\n\tBPF_REG_7                           = 0x7\n\tBPF_REG_8                           = 0x8\n\tBPF_REG_9                           = 0x9\n\tBPF_REG_10                          = 0xa\n\tBPF_MAP_CREATE                      = 0x0\n\tBPF_MAP_LOOKUP_ELEM                 = 0x1\n\tBPF_MAP_UPDATE_ELEM                 = 0x2\n\tBPF_MAP_DELETE_ELEM                 = 0x3\n\tBPF_MAP_GET_NEXT_KEY                = 0x4\n\tBPF_PROG_LOAD                       = 0x5\n\tBPF_OBJ_PIN                         = 0x6\n\tBPF_OBJ_GET                         = 0x7\n\tBPF_PROG_ATTACH                     = 0x8\n\tBPF_PROG_DETACH                     = 0x9\n\tBPF_PROG_TEST_RUN                   = 0xa\n\tBPF_PROG_GET_NEXT_ID                = 0xb\n\tBPF_MAP_GET_NEXT_ID                 = 0xc\n\tBPF_PROG_GET_FD_BY_ID               = 0xd\n\tBPF_MAP_GET_FD_BY_ID                = 0xe\n\tBPF_OBJ_GET_INFO_BY_FD              = 0xf\n\tBPF_PROG_QUERY                      = 0x10\n\tBPF_RAW_TRACEPOINT_OPEN             = 0x11\n\tBPF_BTF_LOAD                        = 0x12\n\tBPF_BTF_GET_FD_BY_ID                = 0x13\n\tBPF_TASK_FD_QUERY                   = 0x14\n\tBPF_MAP_LOOKUP_AND_DELETE_ELEM      = 0x15\n\tBPF_MAP_TYPE_UNSPEC                 = 0x0\n\tBPF_MAP_TYPE_HASH                   = 0x1\n\tBPF_MAP_TYPE_ARRAY                  = 0x2\n\tBPF_MAP_TYPE_PROG_ARRAY             = 0x3\n\tBPF_MAP_TYPE_PERF_EVENT_ARRAY       = 0x4\n\tBPF_MAP_TYPE_PERCPU_HASH            = 0x5\n\tBPF_MAP_TYPE_PERCPU_ARRAY           = 0x6\n\tBPF_MAP_TYPE_STACK_TRACE            = 0x7\n\tBPF_MAP_TYPE_CGROUP_ARRAY           = 0x8\n\tBPF_MAP_TYPE_LRU_HASH               = 0x9\n\tBPF_MAP_TYPE_LRU_PERCPU_HASH        = 0xa\n\tBPF_MAP_TYPE_LPM_TRIE               = 0xb\n\tBPF_MAP_TYPE_ARRAY_OF_MAPS          = 0xc\n\tBPF_MAP_TYPE_HASH_OF_MAPS           = 0xd\n\tBPF_MAP_TYPE_DEVMAP                 = 0xe\n\tBPF_MAP_TYPE_SOCKMAP                = 0xf\n\tBPF_MAP_TYPE_CPUMAP                 = 0x10\n\tBPF_MAP_TYPE_XSKMAP                 = 0x11\n\tBPF_MAP_TYPE_SOCKHASH               = 0x12\n\tBPF_MAP_TYPE_CGROUP_STORAGE         = 0x13\n\tBPF_MAP_TYPE_REUSEPORT_SOCKARRAY    = 0x14\n\tBPF_MAP_TYPE_PERCPU_CGROUP_STORAGE  = 0x15\n\tBPF_MAP_TYPE_QUEUE                  = 0x16\n\tBPF_MAP_TYPE_STACK                  = 0x17\n\tBPF_PROG_TYPE_UNSPEC                = 0x0\n\tBPF_PROG_TYPE_SOCKET_FILTER         = 0x1\n\tBPF_PROG_TYPE_KPROBE                = 0x2\n\tBPF_PROG_TYPE_SCHED_CLS             = 0x3\n\tBPF_PROG_TYPE_SCHED_ACT             = 0x4\n\tBPF_PROG_TYPE_TRACEPOINT            = 0x5\n\tBPF_PROG_TYPE_XDP                   = 0x6\n\tBPF_PROG_TYPE_PERF_EVENT            = 0x7\n\tBPF_PROG_TYPE_CGROUP_SKB            = 0x8\n\tBPF_PROG_TYPE_CGROUP_SOCK           = 0x9\n\tBPF_PROG_TYPE_LWT_IN                = 0xa\n\tBPF_PROG_TYPE_LWT_OUT               = 0xb\n\tBPF_PROG_TYPE_LWT_XMIT              = 0xc\n\tBPF_PROG_TYPE_SOCK_OPS              = 0xd\n\tBPF_PROG_TYPE_SK_SKB                = 0xe\n\tBPF_PROG_TYPE_CGROUP_DEVICE         = 0xf\n\tBPF_PROG_TYPE_SK_MSG                = 0x10\n\tBPF_PROG_TYPE_RAW_TRACEPOINT        = 0x11\n\tBPF_PROG_TYPE_CGROUP_SOCK_ADDR      = 0x12\n\tBPF_PROG_TYPE_LWT_SEG6LOCAL         = 0x13\n\tBPF_PROG_TYPE_LIRC_MODE2            = 0x14\n\tBPF_PROG_TYPE_SK_REUSEPORT          = 0x15\n\tBPF_PROG_TYPE_FLOW_DISSECTOR        = 0x16\n\tBPF_CGROUP_INET_INGRESS             = 0x0\n\tBPF_CGROUP_INET_EGRESS              = 0x1\n\tBPF_CGROUP_INET_SOCK_CREATE         = 0x2\n\tBPF_CGROUP_SOCK_OPS                 = 0x3\n\tBPF_SK_SKB_STREAM_PARSER            = 0x4\n\tBPF_SK_SKB_STREAM_VERDICT           = 0x5\n\tBPF_CGROUP_DEVICE                   = 0x6\n\tBPF_SK_MSG_VERDICT                  = 0x7\n\tBPF_CGROUP_INET4_BIND               = 0x8\n\tBPF_CGROUP_INET6_BIND               = 0x9\n\tBPF_CGROUP_INET4_CONNECT            = 0xa\n\tBPF_CGROUP_INET6_CONNECT            = 0xb\n\tBPF_CGROUP_INET4_POST_BIND          = 0xc\n\tBPF_CGROUP_INET6_POST_BIND          = 0xd\n\tBPF_CGROUP_UDP4_SENDMSG             = 0xe\n\tBPF_CGROUP_UDP6_SENDMSG             = 0xf\n\tBPF_LIRC_MODE2                      = 0x10\n\tBPF_FLOW_DISSECTOR                  = 0x11\n\tBPF_STACK_BUILD_ID_EMPTY            = 0x0\n\tBPF_STACK_BUILD_ID_VALID            = 0x1\n\tBPF_STACK_BUILD_ID_IP               = 0x2\n\tBPF_ADJ_ROOM_NET                    = 0x0\n\tBPF_HDR_START_MAC                   = 0x0\n\tBPF_HDR_START_NET                   = 0x1\n\tBPF_LWT_ENCAP_SEG6                  = 0x0\n\tBPF_LWT_ENCAP_SEG6_INLINE           = 0x1\n\tBPF_OK                              = 0x0\n\tBPF_DROP                            = 0x2\n\tBPF_REDIRECT                        = 0x7\n\tBPF_SOCK_OPS_VOID                   = 0x0\n\tBPF_SOCK_OPS_TIMEOUT_INIT           = 0x1\n\tBPF_SOCK_OPS_RWND_INIT              = 0x2\n\tBPF_SOCK_OPS_TCP_CONNECT_CB         = 0x3\n\tBPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB  = 0x4\n\tBPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB = 0x5\n\tBPF_SOCK_OPS_NEEDS_ECN              = 0x6\n\tBPF_SOCK_OPS_BASE_RTT               = 0x7\n\tBPF_SOCK_OPS_RTO_CB                 = 0x8\n\tBPF_SOCK_OPS_RETRANS_CB             = 0x9\n\tBPF_SOCK_OPS_STATE_CB               = 0xa\n\tBPF_SOCK_OPS_TCP_LISTEN_CB          = 0xb\n\tBPF_TCP_ESTABLISHED                 = 0x1\n\tBPF_TCP_SYN_SENT                    = 0x2\n\tBPF_TCP_SYN_RECV                    = 0x3\n\tBPF_TCP_FIN_WAIT1                   = 0x4\n\tBPF_TCP_FIN_WAIT2                   = 0x5\n\tBPF_TCP_TIME_WAIT                   = 0x6\n\tBPF_TCP_CLOSE                       = 0x7\n\tBPF_TCP_CLOSE_WAIT                  = 0x8\n\tBPF_TCP_LAST_ACK                    = 0x9\n\tBPF_TCP_LISTEN                      = 0xa\n\tBPF_TCP_CLOSING                     = 0xb\n\tBPF_TCP_NEW_SYN_RECV                = 0xc\n\tBPF_TCP_MAX_STATES                  = 0xd\n\tBPF_FIB_LKUP_RET_SUCCESS            = 0x0\n\tBPF_FIB_LKUP_RET_BLACKHOLE          = 0x1\n\tBPF_FIB_LKUP_RET_UNREACHABLE        = 0x2\n\tBPF_FIB_LKUP_RET_PROHIBIT           = 0x3\n\tBPF_FIB_LKUP_RET_NOT_FWDED          = 0x4\n\tBPF_FIB_LKUP_RET_FWD_DISABLED       = 0x5\n\tBPF_FIB_LKUP_RET_UNSUPP_LWT         = 0x6\n\tBPF_FIB_LKUP_RET_NO_NEIGH           = 0x7\n\tBPF_FIB_LKUP_RET_FRAG_NEEDED        = 0x8\n\tBPF_FD_TYPE_RAW_TRACEPOINT          = 0x0\n\tBPF_FD_TYPE_TRACEPOINT              = 0x1\n\tBPF_FD_TYPE_KPROBE                  = 0x2\n\tBPF_FD_TYPE_KRETPROBE               = 0x3\n\tBPF_FD_TYPE_UPROBE                  = 0x4\n\tBPF_FD_TYPE_URETPROBE               = 0x5\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go",
    "content": "// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char linux/types.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build s390x,linux\n\npackage unix\n\nconst (\n\tSizeofPtr      = 0x8\n\tSizeofShort    = 0x2\n\tSizeofInt      = 0x4\n\tSizeofLong     = 0x8\n\tSizeofLongLong = 0x8\n\tPathMax        = 0x1000\n)\n\ntype (\n\t_C_short     int16\n\t_C_int       int32\n\t_C_long      int64\n\t_C_long_long int64\n)\n\ntype Timespec struct {\n\tSec  int64\n\tNsec int64\n}\n\ntype Timeval struct {\n\tSec  int64\n\tUsec int64\n}\n\ntype Timex struct {\n\tModes     uint32\n\tOffset    int64\n\tFreq      int64\n\tMaxerror  int64\n\tEsterror  int64\n\tStatus    int32\n\tConstant  int64\n\tPrecision int64\n\tTolerance int64\n\tTime      Timeval\n\tTick      int64\n\tPpsfreq   int64\n\tJitter    int64\n\tShift     int32\n\tStabil    int64\n\tJitcnt    int64\n\tCalcnt    int64\n\tErrcnt    int64\n\tStbcnt    int64\n\tTai       int32\n\t_         [44]byte\n}\n\ntype Time_t int64\n\ntype Tms struct {\n\tUtime  int64\n\tStime  int64\n\tCutime int64\n\tCstime int64\n}\n\ntype Utimbuf struct {\n\tActime  int64\n\tModtime int64\n}\n\ntype Rusage struct {\n\tUtime    Timeval\n\tStime    Timeval\n\tMaxrss   int64\n\tIxrss    int64\n\tIdrss    int64\n\tIsrss    int64\n\tMinflt   int64\n\tMajflt   int64\n\tNswap    int64\n\tInblock  int64\n\tOublock  int64\n\tMsgsnd   int64\n\tMsgrcv   int64\n\tNsignals int64\n\tNvcsw    int64\n\tNivcsw   int64\n}\n\ntype Rlimit struct {\n\tCur uint64\n\tMax uint64\n}\n\ntype _Gid_t uint32\n\ntype Stat_t struct {\n\tDev     uint64\n\tIno     uint64\n\tNlink   uint64\n\tMode    uint32\n\tUid     uint32\n\tGid     uint32\n\t_       int32\n\tRdev    uint64\n\tSize    int64\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\tBlksize int64\n\tBlocks  int64\n\t_       [3]int64\n}\n\ntype StatxTimestamp struct {\n\tSec  int64\n\tNsec uint32\n\t_    int32\n}\n\ntype Statx_t struct {\n\tMask            uint32\n\tBlksize         uint32\n\tAttributes      uint64\n\tNlink           uint32\n\tUid             uint32\n\tGid             uint32\n\tMode            uint16\n\t_               [1]uint16\n\tIno             uint64\n\tSize            uint64\n\tBlocks          uint64\n\tAttributes_mask uint64\n\tAtime           StatxTimestamp\n\tBtime           StatxTimestamp\n\tCtime           StatxTimestamp\n\tMtime           StatxTimestamp\n\tRdev_major      uint32\n\tRdev_minor      uint32\n\tDev_major       uint32\n\tDev_minor       uint32\n\t_               [14]uint64\n}\n\ntype Dirent struct {\n\tIno    uint64\n\tOff    int64\n\tReclen uint16\n\tType   uint8\n\tName   [256]int8\n\t_      [5]byte\n}\n\ntype Fsid struct {\n\tVal [2]int32\n}\n\ntype Flock_t struct {\n\tType   int16\n\tWhence int16\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\t_      [4]byte\n}\n\ntype FscryptPolicy struct {\n\tVersion                   uint8\n\tContents_encryption_mode  uint8\n\tFilenames_encryption_mode uint8\n\tFlags                     uint8\n\tMaster_key_descriptor     [8]uint8\n}\n\ntype FscryptKey struct {\n\tMode uint32\n\tRaw  [64]uint8\n\tSize uint32\n}\n\ntype KeyctlDHParams struct {\n\tPrivate int32\n\tPrime   int32\n\tBase    int32\n}\n\nconst (\n\tFADV_NORMAL     = 0x0\n\tFADV_RANDOM     = 0x1\n\tFADV_SEQUENTIAL = 0x2\n\tFADV_WILLNEED   = 0x3\n\tFADV_DONTNEED   = 0x6\n\tFADV_NOREUSE    = 0x7\n)\n\ntype RawSockaddrInet4 struct {\n\tFamily uint16\n\tPort   uint16\n\tAddr   [4]byte /* in_addr */\n\tZero   [8]uint8\n}\n\ntype RawSockaddrInet6 struct {\n\tFamily   uint16\n\tPort     uint16\n\tFlowinfo uint32\n\tAddr     [16]byte /* in6_addr */\n\tScope_id uint32\n}\n\ntype RawSockaddrUnix struct {\n\tFamily uint16\n\tPath   [108]int8\n}\n\ntype RawSockaddrLinklayer struct {\n\tFamily   uint16\n\tProtocol uint16\n\tIfindex  int32\n\tHatype   uint16\n\tPkttype  uint8\n\tHalen    uint8\n\tAddr     [8]uint8\n}\n\ntype RawSockaddrNetlink struct {\n\tFamily uint16\n\tPad    uint16\n\tPid    uint32\n\tGroups uint32\n}\n\ntype RawSockaddrHCI struct {\n\tFamily  uint16\n\tDev     uint16\n\tChannel uint16\n}\n\ntype RawSockaddrL2 struct {\n\tFamily      uint16\n\tPsm         uint16\n\tBdaddr      [6]uint8\n\tCid         uint16\n\tBdaddr_type uint8\n\t_           [1]byte\n}\n\ntype RawSockaddrRFCOMM struct {\n\tFamily  uint16\n\tBdaddr  [6]uint8\n\tChannel uint8\n\t_       [1]byte\n}\n\ntype RawSockaddrCAN struct {\n\tFamily  uint16\n\tIfindex int32\n\tAddr    [8]byte\n}\n\ntype RawSockaddrALG struct {\n\tFamily uint16\n\tType   [14]uint8\n\tFeat   uint32\n\tMask   uint32\n\tName   [64]uint8\n}\n\ntype RawSockaddrVM struct {\n\tFamily    uint16\n\tReserved1 uint16\n\tPort      uint32\n\tCid       uint32\n\tZero      [4]uint8\n}\n\ntype RawSockaddrXDP struct {\n\tFamily         uint16\n\tFlags          uint16\n\tIfindex        uint32\n\tQueue_id       uint32\n\tShared_umem_fd uint32\n}\n\ntype RawSockaddrPPPoX [0x1e]byte\n\ntype RawSockaddr struct {\n\tFamily uint16\n\tData   [14]int8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [96]int8\n}\n\ntype _Socklen uint32\n\ntype Linger struct {\n\tOnoff  int32\n\tLinger int32\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint64\n}\n\ntype IPMreq struct {\n\tMultiaddr [4]byte /* in_addr */\n\tInterface [4]byte /* in_addr */\n}\n\ntype IPMreqn struct {\n\tMultiaddr [4]byte /* in_addr */\n\tAddress   [4]byte /* in_addr */\n\tIfindex   int32\n}\n\ntype IPv6Mreq struct {\n\tMultiaddr [16]byte /* in6_addr */\n\tInterface uint32\n}\n\ntype PacketMreq struct {\n\tIfindex int32\n\tType    uint16\n\tAlen    uint16\n\tAddress [8]uint8\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tIov        *Iovec\n\tIovlen     uint64\n\tControl    *byte\n\tControllen uint64\n\tFlags      int32\n\t_          [4]byte\n}\n\ntype Cmsghdr struct {\n\tLen   uint64\n\tLevel int32\n\tType  int32\n}\n\ntype Inet4Pktinfo struct {\n\tIfindex  int32\n\tSpec_dst [4]byte /* in_addr */\n\tAddr     [4]byte /* in_addr */\n}\n\ntype Inet6Pktinfo struct {\n\tAddr    [16]byte /* in6_addr */\n\tIfindex uint32\n}\n\ntype IPv6MTUInfo struct {\n\tAddr RawSockaddrInet6\n\tMtu  uint32\n}\n\ntype ICMPv6Filter struct {\n\tData [8]uint32\n}\n\ntype Ucred struct {\n\tPid int32\n\tUid uint32\n\tGid uint32\n}\n\ntype TCPInfo struct {\n\tState          uint8\n\tCa_state       uint8\n\tRetransmits    uint8\n\tProbes         uint8\n\tBackoff        uint8\n\tOptions        uint8\n\tRto            uint32\n\tAto            uint32\n\tSnd_mss        uint32\n\tRcv_mss        uint32\n\tUnacked        uint32\n\tSacked         uint32\n\tLost           uint32\n\tRetrans        uint32\n\tFackets        uint32\n\tLast_data_sent uint32\n\tLast_ack_sent  uint32\n\tLast_data_recv uint32\n\tLast_ack_recv  uint32\n\tPmtu           uint32\n\tRcv_ssthresh   uint32\n\tRtt            uint32\n\tRttvar         uint32\n\tSnd_ssthresh   uint32\n\tSnd_cwnd       uint32\n\tAdvmss         uint32\n\tReordering     uint32\n\tRcv_rtt        uint32\n\tRcv_space      uint32\n\tTotal_retrans  uint32\n}\n\ntype CanFilter struct {\n\tId   uint32\n\tMask uint32\n}\n\nconst (\n\tSizeofSockaddrInet4     = 0x10\n\tSizeofSockaddrInet6     = 0x1c\n\tSizeofSockaddrAny       = 0x70\n\tSizeofSockaddrUnix      = 0x6e\n\tSizeofSockaddrLinklayer = 0x14\n\tSizeofSockaddrNetlink   = 0xc\n\tSizeofSockaddrHCI       = 0x6\n\tSizeofSockaddrL2        = 0xe\n\tSizeofSockaddrRFCOMM    = 0xa\n\tSizeofSockaddrCAN       = 0x10\n\tSizeofSockaddrALG       = 0x58\n\tSizeofSockaddrVM        = 0x10\n\tSizeofSockaddrXDP       = 0x10\n\tSizeofSockaddrPPPoX     = 0x1e\n\tSizeofLinger            = 0x8\n\tSizeofIovec             = 0x10\n\tSizeofIPMreq            = 0x8\n\tSizeofIPMreqn           = 0xc\n\tSizeofIPv6Mreq          = 0x14\n\tSizeofPacketMreq        = 0x10\n\tSizeofMsghdr            = 0x38\n\tSizeofCmsghdr           = 0x10\n\tSizeofInet4Pktinfo      = 0xc\n\tSizeofInet6Pktinfo      = 0x14\n\tSizeofIPv6MTUInfo       = 0x20\n\tSizeofICMPv6Filter      = 0x20\n\tSizeofUcred             = 0xc\n\tSizeofTCPInfo           = 0x68\n\tSizeofCanFilter         = 0x8\n)\n\nconst (\n\tNDA_UNSPEC              = 0x0\n\tNDA_DST                 = 0x1\n\tNDA_LLADDR              = 0x2\n\tNDA_CACHEINFO           = 0x3\n\tNDA_PROBES              = 0x4\n\tNDA_VLAN                = 0x5\n\tNDA_PORT                = 0x6\n\tNDA_VNI                 = 0x7\n\tNDA_IFINDEX             = 0x8\n\tNDA_MASTER              = 0x9\n\tNDA_LINK_NETNSID        = 0xa\n\tNDA_SRC_VNI             = 0xb\n\tNTF_USE                 = 0x1\n\tNTF_SELF                = 0x2\n\tNTF_MASTER              = 0x4\n\tNTF_PROXY               = 0x8\n\tNTF_EXT_LEARNED         = 0x10\n\tNTF_OFFLOADED           = 0x20\n\tNTF_ROUTER              = 0x80\n\tNUD_INCOMPLETE          = 0x1\n\tNUD_REACHABLE           = 0x2\n\tNUD_STALE               = 0x4\n\tNUD_DELAY               = 0x8\n\tNUD_PROBE               = 0x10\n\tNUD_FAILED              = 0x20\n\tNUD_NOARP               = 0x40\n\tNUD_PERMANENT           = 0x80\n\tNUD_NONE                = 0x0\n\tIFA_UNSPEC              = 0x0\n\tIFA_ADDRESS             = 0x1\n\tIFA_LOCAL               = 0x2\n\tIFA_LABEL               = 0x3\n\tIFA_BROADCAST           = 0x4\n\tIFA_ANYCAST             = 0x5\n\tIFA_CACHEINFO           = 0x6\n\tIFA_MULTICAST           = 0x7\n\tIFA_FLAGS               = 0x8\n\tIFA_RT_PRIORITY         = 0x9\n\tIFA_TARGET_NETNSID      = 0xa\n\tIFLA_UNSPEC             = 0x0\n\tIFLA_ADDRESS            = 0x1\n\tIFLA_BROADCAST          = 0x2\n\tIFLA_IFNAME             = 0x3\n\tIFLA_MTU                = 0x4\n\tIFLA_LINK               = 0x5\n\tIFLA_QDISC              = 0x6\n\tIFLA_STATS              = 0x7\n\tIFLA_COST               = 0x8\n\tIFLA_PRIORITY           = 0x9\n\tIFLA_MASTER             = 0xa\n\tIFLA_WIRELESS           = 0xb\n\tIFLA_PROTINFO           = 0xc\n\tIFLA_TXQLEN             = 0xd\n\tIFLA_MAP                = 0xe\n\tIFLA_WEIGHT             = 0xf\n\tIFLA_OPERSTATE          = 0x10\n\tIFLA_LINKMODE           = 0x11\n\tIFLA_LINKINFO           = 0x12\n\tIFLA_NET_NS_PID         = 0x13\n\tIFLA_IFALIAS            = 0x14\n\tIFLA_NUM_VF             = 0x15\n\tIFLA_VFINFO_LIST        = 0x16\n\tIFLA_STATS64            = 0x17\n\tIFLA_VF_PORTS           = 0x18\n\tIFLA_PORT_SELF          = 0x19\n\tIFLA_AF_SPEC            = 0x1a\n\tIFLA_GROUP              = 0x1b\n\tIFLA_NET_NS_FD          = 0x1c\n\tIFLA_EXT_MASK           = 0x1d\n\tIFLA_PROMISCUITY        = 0x1e\n\tIFLA_NUM_TX_QUEUES      = 0x1f\n\tIFLA_NUM_RX_QUEUES      = 0x20\n\tIFLA_CARRIER            = 0x21\n\tIFLA_PHYS_PORT_ID       = 0x22\n\tIFLA_CARRIER_CHANGES    = 0x23\n\tIFLA_PHYS_SWITCH_ID     = 0x24\n\tIFLA_LINK_NETNSID       = 0x25\n\tIFLA_PHYS_PORT_NAME     = 0x26\n\tIFLA_PROTO_DOWN         = 0x27\n\tIFLA_GSO_MAX_SEGS       = 0x28\n\tIFLA_GSO_MAX_SIZE       = 0x29\n\tIFLA_PAD                = 0x2a\n\tIFLA_XDP                = 0x2b\n\tIFLA_EVENT              = 0x2c\n\tIFLA_NEW_NETNSID        = 0x2d\n\tIFLA_IF_NETNSID         = 0x2e\n\tIFLA_TARGET_NETNSID     = 0x2e\n\tIFLA_CARRIER_UP_COUNT   = 0x2f\n\tIFLA_CARRIER_DOWN_COUNT = 0x30\n\tIFLA_NEW_IFINDEX        = 0x31\n\tIFLA_MIN_MTU            = 0x32\n\tIFLA_MAX_MTU            = 0x33\n\tIFLA_MAX                = 0x33\n\tIFLA_INFO_KIND          = 0x1\n\tIFLA_INFO_DATA          = 0x2\n\tIFLA_INFO_XSTATS        = 0x3\n\tIFLA_INFO_SLAVE_KIND    = 0x4\n\tIFLA_INFO_SLAVE_DATA    = 0x5\n\tRT_SCOPE_UNIVERSE       = 0x0\n\tRT_SCOPE_SITE           = 0xc8\n\tRT_SCOPE_LINK           = 0xfd\n\tRT_SCOPE_HOST           = 0xfe\n\tRT_SCOPE_NOWHERE        = 0xff\n\tRT_TABLE_UNSPEC         = 0x0\n\tRT_TABLE_COMPAT         = 0xfc\n\tRT_TABLE_DEFAULT        = 0xfd\n\tRT_TABLE_MAIN           = 0xfe\n\tRT_TABLE_LOCAL          = 0xff\n\tRT_TABLE_MAX            = 0xffffffff\n\tRTA_UNSPEC              = 0x0\n\tRTA_DST                 = 0x1\n\tRTA_SRC                 = 0x2\n\tRTA_IIF                 = 0x3\n\tRTA_OIF                 = 0x4\n\tRTA_GATEWAY             = 0x5\n\tRTA_PRIORITY            = 0x6\n\tRTA_PREFSRC             = 0x7\n\tRTA_METRICS             = 0x8\n\tRTA_MULTIPATH           = 0x9\n\tRTA_FLOW                = 0xb\n\tRTA_CACHEINFO           = 0xc\n\tRTA_TABLE               = 0xf\n\tRTA_MARK                = 0x10\n\tRTA_MFC_STATS           = 0x11\n\tRTA_VIA                 = 0x12\n\tRTA_NEWDST              = 0x13\n\tRTA_PREF                = 0x14\n\tRTA_ENCAP_TYPE          = 0x15\n\tRTA_ENCAP               = 0x16\n\tRTA_EXPIRES             = 0x17\n\tRTA_PAD                 = 0x18\n\tRTA_UID                 = 0x19\n\tRTA_TTL_PROPAGATE       = 0x1a\n\tRTA_IP_PROTO            = 0x1b\n\tRTA_SPORT               = 0x1c\n\tRTA_DPORT               = 0x1d\n\tRTN_UNSPEC              = 0x0\n\tRTN_UNICAST             = 0x1\n\tRTN_LOCAL               = 0x2\n\tRTN_BROADCAST           = 0x3\n\tRTN_ANYCAST             = 0x4\n\tRTN_MULTICAST           = 0x5\n\tRTN_BLACKHOLE           = 0x6\n\tRTN_UNREACHABLE         = 0x7\n\tRTN_PROHIBIT            = 0x8\n\tRTN_THROW               = 0x9\n\tRTN_NAT                 = 0xa\n\tRTN_XRESOLVE            = 0xb\n\tRTNLGRP_NONE            = 0x0\n\tRTNLGRP_LINK            = 0x1\n\tRTNLGRP_NOTIFY          = 0x2\n\tRTNLGRP_NEIGH           = 0x3\n\tRTNLGRP_TC              = 0x4\n\tRTNLGRP_IPV4_IFADDR     = 0x5\n\tRTNLGRP_IPV4_MROUTE     = 0x6\n\tRTNLGRP_IPV4_ROUTE      = 0x7\n\tRTNLGRP_IPV4_RULE       = 0x8\n\tRTNLGRP_IPV6_IFADDR     = 0x9\n\tRTNLGRP_IPV6_MROUTE     = 0xa\n\tRTNLGRP_IPV6_ROUTE      = 0xb\n\tRTNLGRP_IPV6_IFINFO     = 0xc\n\tRTNLGRP_IPV6_PREFIX     = 0x12\n\tRTNLGRP_IPV6_RULE       = 0x13\n\tRTNLGRP_ND_USEROPT      = 0x14\n\tSizeofNlMsghdr          = 0x10\n\tSizeofNlMsgerr          = 0x14\n\tSizeofRtGenmsg          = 0x1\n\tSizeofNlAttr            = 0x4\n\tSizeofRtAttr            = 0x4\n\tSizeofIfInfomsg         = 0x10\n\tSizeofIfAddrmsg         = 0x8\n\tSizeofRtMsg             = 0xc\n\tSizeofRtNexthop         = 0x8\n\tSizeofNdUseroptmsg      = 0x10\n\tSizeofNdMsg             = 0xc\n)\n\ntype NlMsghdr struct {\n\tLen   uint32\n\tType  uint16\n\tFlags uint16\n\tSeq   uint32\n\tPid   uint32\n}\n\ntype NlMsgerr struct {\n\tError int32\n\tMsg   NlMsghdr\n}\n\ntype RtGenmsg struct {\n\tFamily uint8\n}\n\ntype NlAttr struct {\n\tLen  uint16\n\tType uint16\n}\n\ntype RtAttr struct {\n\tLen  uint16\n\tType uint16\n}\n\ntype IfInfomsg struct {\n\tFamily uint8\n\t_      uint8\n\tType   uint16\n\tIndex  int32\n\tFlags  uint32\n\tChange uint32\n}\n\ntype IfAddrmsg struct {\n\tFamily    uint8\n\tPrefixlen uint8\n\tFlags     uint8\n\tScope     uint8\n\tIndex     uint32\n}\n\ntype RtMsg struct {\n\tFamily   uint8\n\tDst_len  uint8\n\tSrc_len  uint8\n\tTos      uint8\n\tTable    uint8\n\tProtocol uint8\n\tScope    uint8\n\tType     uint8\n\tFlags    uint32\n}\n\ntype RtNexthop struct {\n\tLen     uint16\n\tFlags   uint8\n\tHops    uint8\n\tIfindex int32\n}\n\ntype NdUseroptmsg struct {\n\tFamily    uint8\n\tPad1      uint8\n\tOpts_len  uint16\n\tIfindex   int32\n\tIcmp_type uint8\n\tIcmp_code uint8\n\tPad2      uint16\n\tPad3      uint32\n}\n\ntype NdMsg struct {\n\tFamily  uint8\n\tPad1    uint8\n\tPad2    uint16\n\tIfindex int32\n\tState   uint16\n\tFlags   uint8\n\tType    uint8\n}\n\nconst (\n\tSizeofSockFilter = 0x8\n\tSizeofSockFprog  = 0x10\n)\n\ntype SockFilter struct {\n\tCode uint16\n\tJt   uint8\n\tJf   uint8\n\tK    uint32\n}\n\ntype SockFprog struct {\n\tLen    uint16\n\tFilter *SockFilter\n}\n\ntype InotifyEvent struct {\n\tWd     int32\n\tMask   uint32\n\tCookie uint32\n\tLen    uint32\n}\n\nconst SizeofInotifyEvent = 0x10\n\ntype PtraceRegs struct {\n\tPsw                      PtracePsw\n\tGprs                     [16]uint64\n\tAcrs                     [16]uint32\n\tOrig_gpr2                uint64\n\tFp_regs                  PtraceFpregs\n\tPer_info                 PtracePer\n\tIeee_instruction_pointer uint64\n}\n\ntype PtracePsw struct {\n\tMask uint64\n\tAddr uint64\n}\n\ntype PtraceFpregs struct {\n\tFpc  uint32\n\tFprs [16]float64\n}\n\ntype PtracePer struct {\n\t_             [0]uint64\n\t_             [32]byte\n\tStarting_addr uint64\n\tEnding_addr   uint64\n\tPerc_atmid    uint16\n\tAddress       uint64\n\tAccess_id     uint8\n\t_             [7]byte\n}\n\ntype FdSet struct {\n\tBits [16]int64\n}\n\ntype Sysinfo_t struct {\n\tUptime    int64\n\tLoads     [3]uint64\n\tTotalram  uint64\n\tFreeram   uint64\n\tSharedram uint64\n\tBufferram uint64\n\tTotalswap uint64\n\tFreeswap  uint64\n\tProcs     uint16\n\tPad       uint16\n\tTotalhigh uint64\n\tFreehigh  uint64\n\tUnit      uint32\n\t_         [0]int8\n\t_         [4]byte\n}\n\ntype Utsname struct {\n\tSysname    [65]byte\n\tNodename   [65]byte\n\tRelease    [65]byte\n\tVersion    [65]byte\n\tMachine    [65]byte\n\tDomainname [65]byte\n}\n\ntype Ustat_t struct {\n\tTfree  int32\n\tTinode uint64\n\tFname  [6]int8\n\tFpack  [6]int8\n\t_      [4]byte\n}\n\ntype EpollEvent struct {\n\tEvents uint32\n\t_      int32\n\tFd     int32\n\tPad    int32\n}\n\nconst (\n\tAT_EMPTY_PATH   = 0x1000\n\tAT_FDCWD        = -0x64\n\tAT_NO_AUTOMOUNT = 0x800\n\tAT_REMOVEDIR    = 0x200\n\n\tAT_STATX_SYNC_AS_STAT = 0x0\n\tAT_STATX_FORCE_SYNC   = 0x2000\n\tAT_STATX_DONT_SYNC    = 0x4000\n\n\tAT_SYMLINK_FOLLOW   = 0x400\n\tAT_SYMLINK_NOFOLLOW = 0x100\n\n\tAT_EACCESS = 0x200\n)\n\ntype PollFd struct {\n\tFd      int32\n\tEvents  int16\n\tRevents int16\n}\n\nconst (\n\tPOLLIN    = 0x1\n\tPOLLPRI   = 0x2\n\tPOLLOUT   = 0x4\n\tPOLLRDHUP = 0x2000\n\tPOLLERR   = 0x8\n\tPOLLHUP   = 0x10\n\tPOLLNVAL  = 0x20\n)\n\ntype Sigset_t struct {\n\tVal [16]uint64\n}\n\nconst _C__NSIG = 0x41\n\ntype SignalfdSiginfo struct {\n\tSigno     uint32\n\tErrno     int32\n\tCode      int32\n\tPid       uint32\n\tUid       uint32\n\tFd        int32\n\tTid       uint32\n\tBand      uint32\n\tOverrun   uint32\n\tTrapno    uint32\n\tStatus    int32\n\tInt       int32\n\tPtr       uint64\n\tUtime     uint64\n\tStime     uint64\n\tAddr      uint64\n\tAddr_lsb  uint16\n\t_         uint16\n\tSyscall   int32\n\tCall_addr uint64\n\tArch      uint32\n\t_         [28]uint8\n}\n\nconst PERF_IOC_FLAG_GROUP = 0x1\n\ntype Termios struct {\n\tIflag  uint32\n\tOflag  uint32\n\tCflag  uint32\n\tLflag  uint32\n\tLine   uint8\n\tCc     [19]uint8\n\tIspeed uint32\n\tOspeed uint32\n}\n\ntype Winsize struct {\n\tRow    uint16\n\tCol    uint16\n\tXpixel uint16\n\tYpixel uint16\n}\n\ntype Taskstats struct {\n\tVersion                   uint16\n\tAc_exitcode               uint32\n\tAc_flag                   uint8\n\tAc_nice                   uint8\n\tCpu_count                 uint64\n\tCpu_delay_total           uint64\n\tBlkio_count               uint64\n\tBlkio_delay_total         uint64\n\tSwapin_count              uint64\n\tSwapin_delay_total        uint64\n\tCpu_run_real_total        uint64\n\tCpu_run_virtual_total     uint64\n\tAc_comm                   [32]int8\n\tAc_sched                  uint8\n\tAc_pad                    [3]uint8\n\t_                         [4]byte\n\tAc_uid                    uint32\n\tAc_gid                    uint32\n\tAc_pid                    uint32\n\tAc_ppid                   uint32\n\tAc_btime                  uint32\n\tAc_etime                  uint64\n\tAc_utime                  uint64\n\tAc_stime                  uint64\n\tAc_minflt                 uint64\n\tAc_majflt                 uint64\n\tCoremem                   uint64\n\tVirtmem                   uint64\n\tHiwater_rss               uint64\n\tHiwater_vm                uint64\n\tRead_char                 uint64\n\tWrite_char                uint64\n\tRead_syscalls             uint64\n\tWrite_syscalls            uint64\n\tRead_bytes                uint64\n\tWrite_bytes               uint64\n\tCancelled_write_bytes     uint64\n\tNvcsw                     uint64\n\tNivcsw                    uint64\n\tAc_utimescaled            uint64\n\tAc_stimescaled            uint64\n\tCpu_scaled_run_real_total uint64\n\tFreepages_count           uint64\n\tFreepages_delay_total     uint64\n\tThrashing_count           uint64\n\tThrashing_delay_total     uint64\n}\n\nconst (\n\tTASKSTATS_CMD_UNSPEC                  = 0x0\n\tTASKSTATS_CMD_GET                     = 0x1\n\tTASKSTATS_CMD_NEW                     = 0x2\n\tTASKSTATS_TYPE_UNSPEC                 = 0x0\n\tTASKSTATS_TYPE_PID                    = 0x1\n\tTASKSTATS_TYPE_TGID                   = 0x2\n\tTASKSTATS_TYPE_STATS                  = 0x3\n\tTASKSTATS_TYPE_AGGR_PID               = 0x4\n\tTASKSTATS_TYPE_AGGR_TGID              = 0x5\n\tTASKSTATS_TYPE_NULL                   = 0x6\n\tTASKSTATS_CMD_ATTR_UNSPEC             = 0x0\n\tTASKSTATS_CMD_ATTR_PID                = 0x1\n\tTASKSTATS_CMD_ATTR_TGID               = 0x2\n\tTASKSTATS_CMD_ATTR_REGISTER_CPUMASK   = 0x3\n\tTASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4\n)\n\ntype CGroupStats struct {\n\tSleeping        uint64\n\tRunning         uint64\n\tStopped         uint64\n\tUninterruptible uint64\n\tIo_wait         uint64\n}\n\nconst (\n\tCGROUPSTATS_CMD_UNSPEC        = 0x3\n\tCGROUPSTATS_CMD_GET           = 0x4\n\tCGROUPSTATS_CMD_NEW           = 0x5\n\tCGROUPSTATS_TYPE_UNSPEC       = 0x0\n\tCGROUPSTATS_TYPE_CGROUP_STATS = 0x1\n\tCGROUPSTATS_CMD_ATTR_UNSPEC   = 0x0\n\tCGROUPSTATS_CMD_ATTR_FD       = 0x1\n)\n\ntype Genlmsghdr struct {\n\tCmd      uint8\n\tVersion  uint8\n\tReserved uint16\n}\n\nconst (\n\tCTRL_CMD_UNSPEC            = 0x0\n\tCTRL_CMD_NEWFAMILY         = 0x1\n\tCTRL_CMD_DELFAMILY         = 0x2\n\tCTRL_CMD_GETFAMILY         = 0x3\n\tCTRL_CMD_NEWOPS            = 0x4\n\tCTRL_CMD_DELOPS            = 0x5\n\tCTRL_CMD_GETOPS            = 0x6\n\tCTRL_CMD_NEWMCAST_GRP      = 0x7\n\tCTRL_CMD_DELMCAST_GRP      = 0x8\n\tCTRL_CMD_GETMCAST_GRP      = 0x9\n\tCTRL_ATTR_UNSPEC           = 0x0\n\tCTRL_ATTR_FAMILY_ID        = 0x1\n\tCTRL_ATTR_FAMILY_NAME      = 0x2\n\tCTRL_ATTR_VERSION          = 0x3\n\tCTRL_ATTR_HDRSIZE          = 0x4\n\tCTRL_ATTR_MAXATTR          = 0x5\n\tCTRL_ATTR_OPS              = 0x6\n\tCTRL_ATTR_MCAST_GROUPS     = 0x7\n\tCTRL_ATTR_OP_UNSPEC        = 0x0\n\tCTRL_ATTR_OP_ID            = 0x1\n\tCTRL_ATTR_OP_FLAGS         = 0x2\n\tCTRL_ATTR_MCAST_GRP_UNSPEC = 0x0\n\tCTRL_ATTR_MCAST_GRP_NAME   = 0x1\n\tCTRL_ATTR_MCAST_GRP_ID     = 0x2\n)\n\ntype cpuMask uint64\n\nconst (\n\t_CPU_SETSIZE = 0x400\n\t_NCPUBITS    = 0x40\n)\n\nconst (\n\tBDADDR_BREDR     = 0x0\n\tBDADDR_LE_PUBLIC = 0x1\n\tBDADDR_LE_RANDOM = 0x2\n)\n\ntype PerfEventAttr struct {\n\tType               uint32\n\tSize               uint32\n\tConfig             uint64\n\tSample             uint64\n\tSample_type        uint64\n\tRead_format        uint64\n\tBits               uint64\n\tWakeup             uint32\n\tBp_type            uint32\n\tExt1               uint64\n\tExt2               uint64\n\tBranch_sample_type uint64\n\tSample_regs_user   uint64\n\tSample_stack_user  uint32\n\tClockid            int32\n\tSample_regs_intr   uint64\n\tAux_watermark      uint32\n\tSample_max_stack   uint16\n\t_                  uint16\n}\n\ntype PerfEventMmapPage struct {\n\tVersion        uint32\n\tCompat_version uint32\n\tLock           uint32\n\tIndex          uint32\n\tOffset         int64\n\tTime_enabled   uint64\n\tTime_running   uint64\n\tCapabilities   uint64\n\tPmc_width      uint16\n\tTime_shift     uint16\n\tTime_mult      uint32\n\tTime_offset    uint64\n\tTime_zero      uint64\n\tSize           uint32\n\t_              [948]uint8\n\tData_head      uint64\n\tData_tail      uint64\n\tData_offset    uint64\n\tData_size      uint64\n\tAux_head       uint64\n\tAux_tail       uint64\n\tAux_offset     uint64\n\tAux_size       uint64\n}\n\nconst (\n\tPerfBitDisabled               uint64 = CBitFieldMaskBit0\n\tPerfBitInherit                       = CBitFieldMaskBit1\n\tPerfBitPinned                        = CBitFieldMaskBit2\n\tPerfBitExclusive                     = CBitFieldMaskBit3\n\tPerfBitExcludeUser                   = CBitFieldMaskBit4\n\tPerfBitExcludeKernel                 = CBitFieldMaskBit5\n\tPerfBitExcludeHv                     = CBitFieldMaskBit6\n\tPerfBitExcludeIdle                   = CBitFieldMaskBit7\n\tPerfBitMmap                          = CBitFieldMaskBit8\n\tPerfBitComm                          = CBitFieldMaskBit9\n\tPerfBitFreq                          = CBitFieldMaskBit10\n\tPerfBitInheritStat                   = CBitFieldMaskBit11\n\tPerfBitEnableOnExec                  = CBitFieldMaskBit12\n\tPerfBitTask                          = CBitFieldMaskBit13\n\tPerfBitWatermark                     = CBitFieldMaskBit14\n\tPerfBitPreciseIPBit1                 = CBitFieldMaskBit15\n\tPerfBitPreciseIPBit2                 = CBitFieldMaskBit16\n\tPerfBitMmapData                      = CBitFieldMaskBit17\n\tPerfBitSampleIDAll                   = CBitFieldMaskBit18\n\tPerfBitExcludeHost                   = CBitFieldMaskBit19\n\tPerfBitExcludeGuest                  = CBitFieldMaskBit20\n\tPerfBitExcludeCallchainKernel        = CBitFieldMaskBit21\n\tPerfBitExcludeCallchainUser          = CBitFieldMaskBit22\n\tPerfBitMmap2                         = CBitFieldMaskBit23\n\tPerfBitCommExec                      = CBitFieldMaskBit24\n\tPerfBitUseClockID                    = CBitFieldMaskBit25\n\tPerfBitContextSwitch                 = CBitFieldMaskBit26\n)\n\nconst (\n\tPERF_TYPE_HARDWARE   = 0x0\n\tPERF_TYPE_SOFTWARE   = 0x1\n\tPERF_TYPE_TRACEPOINT = 0x2\n\tPERF_TYPE_HW_CACHE   = 0x3\n\tPERF_TYPE_RAW        = 0x4\n\tPERF_TYPE_BREAKPOINT = 0x5\n\n\tPERF_COUNT_HW_CPU_CYCLES              = 0x0\n\tPERF_COUNT_HW_INSTRUCTIONS            = 0x1\n\tPERF_COUNT_HW_CACHE_REFERENCES        = 0x2\n\tPERF_COUNT_HW_CACHE_MISSES            = 0x3\n\tPERF_COUNT_HW_BRANCH_INSTRUCTIONS     = 0x4\n\tPERF_COUNT_HW_BRANCH_MISSES           = 0x5\n\tPERF_COUNT_HW_BUS_CYCLES              = 0x6\n\tPERF_COUNT_HW_STALLED_CYCLES_FRONTEND = 0x7\n\tPERF_COUNT_HW_STALLED_CYCLES_BACKEND  = 0x8\n\tPERF_COUNT_HW_REF_CPU_CYCLES          = 0x9\n\n\tPERF_COUNT_HW_CACHE_L1D  = 0x0\n\tPERF_COUNT_HW_CACHE_L1I  = 0x1\n\tPERF_COUNT_HW_CACHE_LL   = 0x2\n\tPERF_COUNT_HW_CACHE_DTLB = 0x3\n\tPERF_COUNT_HW_CACHE_ITLB = 0x4\n\tPERF_COUNT_HW_CACHE_BPU  = 0x5\n\tPERF_COUNT_HW_CACHE_NODE = 0x6\n\n\tPERF_COUNT_HW_CACHE_OP_READ     = 0x0\n\tPERF_COUNT_HW_CACHE_OP_WRITE    = 0x1\n\tPERF_COUNT_HW_CACHE_OP_PREFETCH = 0x2\n\n\tPERF_COUNT_HW_CACHE_RESULT_ACCESS = 0x0\n\tPERF_COUNT_HW_CACHE_RESULT_MISS   = 0x1\n\n\tPERF_COUNT_SW_CPU_CLOCK        = 0x0\n\tPERF_COUNT_SW_TASK_CLOCK       = 0x1\n\tPERF_COUNT_SW_PAGE_FAULTS      = 0x2\n\tPERF_COUNT_SW_CONTEXT_SWITCHES = 0x3\n\tPERF_COUNT_SW_CPU_MIGRATIONS   = 0x4\n\tPERF_COUNT_SW_PAGE_FAULTS_MIN  = 0x5\n\tPERF_COUNT_SW_PAGE_FAULTS_MAJ  = 0x6\n\tPERF_COUNT_SW_ALIGNMENT_FAULTS = 0x7\n\tPERF_COUNT_SW_EMULATION_FAULTS = 0x8\n\tPERF_COUNT_SW_DUMMY            = 0x9\n\tPERF_COUNT_SW_BPF_OUTPUT       = 0xa\n\n\tPERF_SAMPLE_IP           = 0x1\n\tPERF_SAMPLE_TID          = 0x2\n\tPERF_SAMPLE_TIME         = 0x4\n\tPERF_SAMPLE_ADDR         = 0x8\n\tPERF_SAMPLE_READ         = 0x10\n\tPERF_SAMPLE_CALLCHAIN    = 0x20\n\tPERF_SAMPLE_ID           = 0x40\n\tPERF_SAMPLE_CPU          = 0x80\n\tPERF_SAMPLE_PERIOD       = 0x100\n\tPERF_SAMPLE_STREAM_ID    = 0x200\n\tPERF_SAMPLE_RAW          = 0x400\n\tPERF_SAMPLE_BRANCH_STACK = 0x800\n\n\tPERF_SAMPLE_BRANCH_USER       = 0x1\n\tPERF_SAMPLE_BRANCH_KERNEL     = 0x2\n\tPERF_SAMPLE_BRANCH_HV         = 0x4\n\tPERF_SAMPLE_BRANCH_ANY        = 0x8\n\tPERF_SAMPLE_BRANCH_ANY_CALL   = 0x10\n\tPERF_SAMPLE_BRANCH_ANY_RETURN = 0x20\n\tPERF_SAMPLE_BRANCH_IND_CALL   = 0x40\n\tPERF_SAMPLE_BRANCH_ABORT_TX   = 0x80\n\tPERF_SAMPLE_BRANCH_IN_TX      = 0x100\n\tPERF_SAMPLE_BRANCH_NO_TX      = 0x200\n\tPERF_SAMPLE_BRANCH_COND       = 0x400\n\tPERF_SAMPLE_BRANCH_CALL_STACK = 0x800\n\tPERF_SAMPLE_BRANCH_IND_JUMP   = 0x1000\n\tPERF_SAMPLE_BRANCH_CALL       = 0x2000\n\tPERF_SAMPLE_BRANCH_NO_FLAGS   = 0x4000\n\tPERF_SAMPLE_BRANCH_NO_CYCLES  = 0x8000\n\tPERF_SAMPLE_BRANCH_TYPE_SAVE  = 0x10000\n\n\tPERF_FORMAT_TOTAL_TIME_ENABLED = 0x1\n\tPERF_FORMAT_TOTAL_TIME_RUNNING = 0x2\n\tPERF_FORMAT_ID                 = 0x4\n\tPERF_FORMAT_GROUP              = 0x8\n\n\tPERF_RECORD_MMAP            = 0x1\n\tPERF_RECORD_LOST            = 0x2\n\tPERF_RECORD_COMM            = 0x3\n\tPERF_RECORD_EXIT            = 0x4\n\tPERF_RECORD_THROTTLE        = 0x5\n\tPERF_RECORD_UNTHROTTLE      = 0x6\n\tPERF_RECORD_FORK            = 0x7\n\tPERF_RECORD_READ            = 0x8\n\tPERF_RECORD_SAMPLE          = 0x9\n\tPERF_RECORD_MMAP2           = 0xa\n\tPERF_RECORD_AUX             = 0xb\n\tPERF_RECORD_ITRACE_START    = 0xc\n\tPERF_RECORD_LOST_SAMPLES    = 0xd\n\tPERF_RECORD_SWITCH          = 0xe\n\tPERF_RECORD_SWITCH_CPU_WIDE = 0xf\n\tPERF_RECORD_NAMESPACES      = 0x10\n\n\tPERF_CONTEXT_HV     = -0x20\n\tPERF_CONTEXT_KERNEL = -0x80\n\tPERF_CONTEXT_USER   = -0x200\n\n\tPERF_CONTEXT_GUEST        = -0x800\n\tPERF_CONTEXT_GUEST_KERNEL = -0x880\n\tPERF_CONTEXT_GUEST_USER   = -0xa00\n\n\tPERF_FLAG_FD_NO_GROUP = 0x1\n\tPERF_FLAG_FD_OUTPUT   = 0x2\n\tPERF_FLAG_PID_CGROUP  = 0x4\n\tPERF_FLAG_FD_CLOEXEC  = 0x8\n)\n\nconst (\n\tCBitFieldMaskBit0  = 0x8000000000000000\n\tCBitFieldMaskBit1  = 0x4000000000000000\n\tCBitFieldMaskBit2  = 0x2000000000000000\n\tCBitFieldMaskBit3  = 0x1000000000000000\n\tCBitFieldMaskBit4  = 0x800000000000000\n\tCBitFieldMaskBit5  = 0x400000000000000\n\tCBitFieldMaskBit6  = 0x200000000000000\n\tCBitFieldMaskBit7  = 0x100000000000000\n\tCBitFieldMaskBit8  = 0x80000000000000\n\tCBitFieldMaskBit9  = 0x40000000000000\n\tCBitFieldMaskBit10 = 0x20000000000000\n\tCBitFieldMaskBit11 = 0x10000000000000\n\tCBitFieldMaskBit12 = 0x8000000000000\n\tCBitFieldMaskBit13 = 0x4000000000000\n\tCBitFieldMaskBit14 = 0x2000000000000\n\tCBitFieldMaskBit15 = 0x1000000000000\n\tCBitFieldMaskBit16 = 0x800000000000\n\tCBitFieldMaskBit17 = 0x400000000000\n\tCBitFieldMaskBit18 = 0x200000000000\n\tCBitFieldMaskBit19 = 0x100000000000\n\tCBitFieldMaskBit20 = 0x80000000000\n\tCBitFieldMaskBit21 = 0x40000000000\n\tCBitFieldMaskBit22 = 0x20000000000\n\tCBitFieldMaskBit23 = 0x10000000000\n\tCBitFieldMaskBit24 = 0x8000000000\n\tCBitFieldMaskBit25 = 0x4000000000\n\tCBitFieldMaskBit26 = 0x2000000000\n\tCBitFieldMaskBit27 = 0x1000000000\n\tCBitFieldMaskBit28 = 0x800000000\n\tCBitFieldMaskBit29 = 0x400000000\n\tCBitFieldMaskBit30 = 0x200000000\n\tCBitFieldMaskBit31 = 0x100000000\n\tCBitFieldMaskBit32 = 0x80000000\n\tCBitFieldMaskBit33 = 0x40000000\n\tCBitFieldMaskBit34 = 0x20000000\n\tCBitFieldMaskBit35 = 0x10000000\n\tCBitFieldMaskBit36 = 0x8000000\n\tCBitFieldMaskBit37 = 0x4000000\n\tCBitFieldMaskBit38 = 0x2000000\n\tCBitFieldMaskBit39 = 0x1000000\n\tCBitFieldMaskBit40 = 0x800000\n\tCBitFieldMaskBit41 = 0x400000\n\tCBitFieldMaskBit42 = 0x200000\n\tCBitFieldMaskBit43 = 0x100000\n\tCBitFieldMaskBit44 = 0x80000\n\tCBitFieldMaskBit45 = 0x40000\n\tCBitFieldMaskBit46 = 0x20000\n\tCBitFieldMaskBit47 = 0x10000\n\tCBitFieldMaskBit48 = 0x8000\n\tCBitFieldMaskBit49 = 0x4000\n\tCBitFieldMaskBit50 = 0x2000\n\tCBitFieldMaskBit51 = 0x1000\n\tCBitFieldMaskBit52 = 0x800\n\tCBitFieldMaskBit53 = 0x400\n\tCBitFieldMaskBit54 = 0x200\n\tCBitFieldMaskBit55 = 0x100\n\tCBitFieldMaskBit56 = 0x80\n\tCBitFieldMaskBit57 = 0x40\n\tCBitFieldMaskBit58 = 0x20\n\tCBitFieldMaskBit59 = 0x10\n\tCBitFieldMaskBit60 = 0x8\n\tCBitFieldMaskBit61 = 0x4\n\tCBitFieldMaskBit62 = 0x2\n\tCBitFieldMaskBit63 = 0x1\n)\n\ntype SockaddrStorage struct {\n\tFamily uint16\n\t_      [118]int8\n\t_      uint64\n}\n\ntype TCPMD5Sig struct {\n\tAddr      SockaddrStorage\n\tFlags     uint8\n\tPrefixlen uint8\n\tKeylen    uint16\n\t_         uint32\n\tKey       [80]uint8\n}\n\ntype HDDriveCmdHdr struct {\n\tCommand uint8\n\tNumber  uint8\n\tFeature uint8\n\tCount   uint8\n}\n\ntype HDGeometry struct {\n\tHeads     uint8\n\tSectors   uint8\n\tCylinders uint16\n\tStart     uint64\n}\n\ntype HDDriveID struct {\n\tConfig         uint16\n\tCyls           uint16\n\tReserved2      uint16\n\tHeads          uint16\n\tTrack_bytes    uint16\n\tSector_bytes   uint16\n\tSectors        uint16\n\tVendor0        uint16\n\tVendor1        uint16\n\tVendor2        uint16\n\tSerial_no      [20]uint8\n\tBuf_type       uint16\n\tBuf_size       uint16\n\tEcc_bytes      uint16\n\tFw_rev         [8]uint8\n\tModel          [40]uint8\n\tMax_multsect   uint8\n\tVendor3        uint8\n\tDword_io       uint16\n\tVendor4        uint8\n\tCapability     uint8\n\tReserved50     uint16\n\tVendor5        uint8\n\tTPIO           uint8\n\tVendor6        uint8\n\tTDMA           uint8\n\tField_valid    uint16\n\tCur_cyls       uint16\n\tCur_heads      uint16\n\tCur_sectors    uint16\n\tCur_capacity0  uint16\n\tCur_capacity1  uint16\n\tMultsect       uint8\n\tMultsect_valid uint8\n\tLba_capacity   uint32\n\tDma_1word      uint16\n\tDma_mword      uint16\n\tEide_pio_modes uint16\n\tEide_dma_min   uint16\n\tEide_dma_time  uint16\n\tEide_pio       uint16\n\tEide_pio_iordy uint16\n\tWords69_70     [2]uint16\n\tWords71_74     [4]uint16\n\tQueue_depth    uint16\n\tWords76_79     [4]uint16\n\tMajor_rev_num  uint16\n\tMinor_rev_num  uint16\n\tCommand_set_1  uint16\n\tCommand_set_2  uint16\n\tCfsse          uint16\n\tCfs_enable_1   uint16\n\tCfs_enable_2   uint16\n\tCsf_default    uint16\n\tDma_ultra      uint16\n\tTrseuc         uint16\n\tTrsEuc         uint16\n\tCurAPMvalues   uint16\n\tMprc           uint16\n\tHw_config      uint16\n\tAcoustic       uint16\n\tMsrqs          uint16\n\tSxfert         uint16\n\tSal            uint16\n\tSpg            uint32\n\tLba_capacity_2 uint64\n\tWords104_125   [22]uint16\n\tLast_lun       uint16\n\tWord127        uint16\n\tDlf            uint16\n\tCsfo           uint16\n\tWords130_155   [26]uint16\n\tWord156        uint16\n\tWords157_159   [3]uint16\n\tCfa_power      uint16\n\tWords161_175   [15]uint16\n\tWords176_205   [30]uint16\n\tWords206_254   [49]uint16\n\tIntegrity_word uint16\n}\n\ntype Statfs_t struct {\n\tType    uint32\n\tBsize   uint32\n\tBlocks  uint64\n\tBfree   uint64\n\tBavail  uint64\n\tFiles   uint64\n\tFfree   uint64\n\tFsid    Fsid\n\tNamelen uint32\n\tFrsize  uint32\n\tFlags   uint32\n\tSpare   [4]uint32\n\t_       [4]byte\n}\n\nconst (\n\tST_MANDLOCK    = 0x40\n\tST_NOATIME     = 0x400\n\tST_NODEV       = 0x4\n\tST_NODIRATIME  = 0x800\n\tST_NOEXEC      = 0x8\n\tST_NOSUID      = 0x2\n\tST_RDONLY      = 0x1\n\tST_RELATIME    = 0x1000\n\tST_SYNCHRONOUS = 0x10\n)\n\ntype TpacketHdr struct {\n\tStatus  uint64\n\tLen     uint32\n\tSnaplen uint32\n\tMac     uint16\n\tNet     uint16\n\tSec     uint32\n\tUsec    uint32\n\t_       [4]byte\n}\n\ntype Tpacket2Hdr struct {\n\tStatus    uint32\n\tLen       uint32\n\tSnaplen   uint32\n\tMac       uint16\n\tNet       uint16\n\tSec       uint32\n\tNsec      uint32\n\tVlan_tci  uint16\n\tVlan_tpid uint16\n\t_         [4]uint8\n}\n\ntype Tpacket3Hdr struct {\n\tNext_offset uint32\n\tSec         uint32\n\tNsec        uint32\n\tSnaplen     uint32\n\tLen         uint32\n\tStatus      uint32\n\tMac         uint16\n\tNet         uint16\n\tHv1         TpacketHdrVariant1\n\t_           [8]uint8\n}\n\ntype TpacketHdrVariant1 struct {\n\tRxhash    uint32\n\tVlan_tci  uint32\n\tVlan_tpid uint16\n\t_         uint16\n}\n\ntype TpacketBlockDesc struct {\n\tVersion uint32\n\tTo_priv uint32\n\tHdr     [40]byte\n}\n\ntype TpacketBDTS struct {\n\tSec  uint32\n\tUsec uint32\n}\n\ntype TpacketHdrV1 struct {\n\tBlock_status        uint32\n\tNum_pkts            uint32\n\tOffset_to_first_pkt uint32\n\tBlk_len             uint32\n\tSeq_num             uint64\n\tTs_first_pkt        TpacketBDTS\n\tTs_last_pkt         TpacketBDTS\n}\n\ntype TpacketReq struct {\n\tBlock_size uint32\n\tBlock_nr   uint32\n\tFrame_size uint32\n\tFrame_nr   uint32\n}\n\ntype TpacketReq3 struct {\n\tBlock_size       uint32\n\tBlock_nr         uint32\n\tFrame_size       uint32\n\tFrame_nr         uint32\n\tRetire_blk_tov   uint32\n\tSizeof_priv      uint32\n\tFeature_req_word uint32\n}\n\ntype TpacketStats struct {\n\tPackets uint32\n\tDrops   uint32\n}\n\ntype TpacketStatsV3 struct {\n\tPackets      uint32\n\tDrops        uint32\n\tFreeze_q_cnt uint32\n}\n\ntype TpacketAuxdata struct {\n\tStatus    uint32\n\tLen       uint32\n\tSnaplen   uint32\n\tMac       uint16\n\tNet       uint16\n\tVlan_tci  uint16\n\tVlan_tpid uint16\n}\n\nconst (\n\tTPACKET_V1 = 0x0\n\tTPACKET_V2 = 0x1\n\tTPACKET_V3 = 0x2\n)\n\nconst (\n\tSizeofTpacketHdr  = 0x20\n\tSizeofTpacket2Hdr = 0x20\n\tSizeofTpacket3Hdr = 0x30\n\n\tSizeofTpacketStats   = 0x8\n\tSizeofTpacketStatsV3 = 0xc\n)\n\nconst (\n\tNF_INET_PRE_ROUTING  = 0x0\n\tNF_INET_LOCAL_IN     = 0x1\n\tNF_INET_FORWARD      = 0x2\n\tNF_INET_LOCAL_OUT    = 0x3\n\tNF_INET_POST_ROUTING = 0x4\n\tNF_INET_NUMHOOKS     = 0x5\n)\n\nconst (\n\tNF_NETDEV_INGRESS  = 0x0\n\tNF_NETDEV_NUMHOOKS = 0x1\n)\n\nconst (\n\tNFPROTO_UNSPEC   = 0x0\n\tNFPROTO_INET     = 0x1\n\tNFPROTO_IPV4     = 0x2\n\tNFPROTO_ARP      = 0x3\n\tNFPROTO_NETDEV   = 0x5\n\tNFPROTO_BRIDGE   = 0x7\n\tNFPROTO_IPV6     = 0xa\n\tNFPROTO_DECNET   = 0xc\n\tNFPROTO_NUMPROTO = 0xd\n)\n\ntype Nfgenmsg struct {\n\tNfgen_family uint8\n\tVersion      uint8\n\tRes_id       uint16\n}\n\nconst (\n\tNFNL_BATCH_UNSPEC = 0x0\n\tNFNL_BATCH_GENID  = 0x1\n)\n\nconst (\n\tNFT_REG_VERDICT                   = 0x0\n\tNFT_REG_1                         = 0x1\n\tNFT_REG_2                         = 0x2\n\tNFT_REG_3                         = 0x3\n\tNFT_REG_4                         = 0x4\n\tNFT_REG32_00                      = 0x8\n\tNFT_REG32_01                      = 0x9\n\tNFT_REG32_02                      = 0xa\n\tNFT_REG32_03                      = 0xb\n\tNFT_REG32_04                      = 0xc\n\tNFT_REG32_05                      = 0xd\n\tNFT_REG32_06                      = 0xe\n\tNFT_REG32_07                      = 0xf\n\tNFT_REG32_08                      = 0x10\n\tNFT_REG32_09                      = 0x11\n\tNFT_REG32_10                      = 0x12\n\tNFT_REG32_11                      = 0x13\n\tNFT_REG32_12                      = 0x14\n\tNFT_REG32_13                      = 0x15\n\tNFT_REG32_14                      = 0x16\n\tNFT_REG32_15                      = 0x17\n\tNFT_CONTINUE                      = -0x1\n\tNFT_BREAK                         = -0x2\n\tNFT_JUMP                          = -0x3\n\tNFT_GOTO                          = -0x4\n\tNFT_RETURN                        = -0x5\n\tNFT_MSG_NEWTABLE                  = 0x0\n\tNFT_MSG_GETTABLE                  = 0x1\n\tNFT_MSG_DELTABLE                  = 0x2\n\tNFT_MSG_NEWCHAIN                  = 0x3\n\tNFT_MSG_GETCHAIN                  = 0x4\n\tNFT_MSG_DELCHAIN                  = 0x5\n\tNFT_MSG_NEWRULE                   = 0x6\n\tNFT_MSG_GETRULE                   = 0x7\n\tNFT_MSG_DELRULE                   = 0x8\n\tNFT_MSG_NEWSET                    = 0x9\n\tNFT_MSG_GETSET                    = 0xa\n\tNFT_MSG_DELSET                    = 0xb\n\tNFT_MSG_NEWSETELEM                = 0xc\n\tNFT_MSG_GETSETELEM                = 0xd\n\tNFT_MSG_DELSETELEM                = 0xe\n\tNFT_MSG_NEWGEN                    = 0xf\n\tNFT_MSG_GETGEN                    = 0x10\n\tNFT_MSG_TRACE                     = 0x11\n\tNFT_MSG_NEWOBJ                    = 0x12\n\tNFT_MSG_GETOBJ                    = 0x13\n\tNFT_MSG_DELOBJ                    = 0x14\n\tNFT_MSG_GETOBJ_RESET              = 0x15\n\tNFT_MSG_MAX                       = 0x19\n\tNFTA_LIST_UNPEC                   = 0x0\n\tNFTA_LIST_ELEM                    = 0x1\n\tNFTA_HOOK_UNSPEC                  = 0x0\n\tNFTA_HOOK_HOOKNUM                 = 0x1\n\tNFTA_HOOK_PRIORITY                = 0x2\n\tNFTA_HOOK_DEV                     = 0x3\n\tNFT_TABLE_F_DORMANT               = 0x1\n\tNFTA_TABLE_UNSPEC                 = 0x0\n\tNFTA_TABLE_NAME                   = 0x1\n\tNFTA_TABLE_FLAGS                  = 0x2\n\tNFTA_TABLE_USE                    = 0x3\n\tNFTA_CHAIN_UNSPEC                 = 0x0\n\tNFTA_CHAIN_TABLE                  = 0x1\n\tNFTA_CHAIN_HANDLE                 = 0x2\n\tNFTA_CHAIN_NAME                   = 0x3\n\tNFTA_CHAIN_HOOK                   = 0x4\n\tNFTA_CHAIN_POLICY                 = 0x5\n\tNFTA_CHAIN_USE                    = 0x6\n\tNFTA_CHAIN_TYPE                   = 0x7\n\tNFTA_CHAIN_COUNTERS               = 0x8\n\tNFTA_CHAIN_PAD                    = 0x9\n\tNFTA_RULE_UNSPEC                  = 0x0\n\tNFTA_RULE_TABLE                   = 0x1\n\tNFTA_RULE_CHAIN                   = 0x2\n\tNFTA_RULE_HANDLE                  = 0x3\n\tNFTA_RULE_EXPRESSIONS             = 0x4\n\tNFTA_RULE_COMPAT                  = 0x5\n\tNFTA_RULE_POSITION                = 0x6\n\tNFTA_RULE_USERDATA                = 0x7\n\tNFTA_RULE_PAD                     = 0x8\n\tNFTA_RULE_ID                      = 0x9\n\tNFT_RULE_COMPAT_F_INV             = 0x2\n\tNFT_RULE_COMPAT_F_MASK            = 0x2\n\tNFTA_RULE_COMPAT_UNSPEC           = 0x0\n\tNFTA_RULE_COMPAT_PROTO            = 0x1\n\tNFTA_RULE_COMPAT_FLAGS            = 0x2\n\tNFT_SET_ANONYMOUS                 = 0x1\n\tNFT_SET_CONSTANT                  = 0x2\n\tNFT_SET_INTERVAL                  = 0x4\n\tNFT_SET_MAP                       = 0x8\n\tNFT_SET_TIMEOUT                   = 0x10\n\tNFT_SET_EVAL                      = 0x20\n\tNFT_SET_OBJECT                    = 0x40\n\tNFT_SET_POL_PERFORMANCE           = 0x0\n\tNFT_SET_POL_MEMORY                = 0x1\n\tNFTA_SET_DESC_UNSPEC              = 0x0\n\tNFTA_SET_DESC_SIZE                = 0x1\n\tNFTA_SET_UNSPEC                   = 0x0\n\tNFTA_SET_TABLE                    = 0x1\n\tNFTA_SET_NAME                     = 0x2\n\tNFTA_SET_FLAGS                    = 0x3\n\tNFTA_SET_KEY_TYPE                 = 0x4\n\tNFTA_SET_KEY_LEN                  = 0x5\n\tNFTA_SET_DATA_TYPE                = 0x6\n\tNFTA_SET_DATA_LEN                 = 0x7\n\tNFTA_SET_POLICY                   = 0x8\n\tNFTA_SET_DESC                     = 0x9\n\tNFTA_SET_ID                       = 0xa\n\tNFTA_SET_TIMEOUT                  = 0xb\n\tNFTA_SET_GC_INTERVAL              = 0xc\n\tNFTA_SET_USERDATA                 = 0xd\n\tNFTA_SET_PAD                      = 0xe\n\tNFTA_SET_OBJ_TYPE                 = 0xf\n\tNFT_SET_ELEM_INTERVAL_END         = 0x1\n\tNFTA_SET_ELEM_UNSPEC              = 0x0\n\tNFTA_SET_ELEM_KEY                 = 0x1\n\tNFTA_SET_ELEM_DATA                = 0x2\n\tNFTA_SET_ELEM_FLAGS               = 0x3\n\tNFTA_SET_ELEM_TIMEOUT             = 0x4\n\tNFTA_SET_ELEM_EXPIRATION          = 0x5\n\tNFTA_SET_ELEM_USERDATA            = 0x6\n\tNFTA_SET_ELEM_EXPR                = 0x7\n\tNFTA_SET_ELEM_PAD                 = 0x8\n\tNFTA_SET_ELEM_OBJREF              = 0x9\n\tNFTA_SET_ELEM_LIST_UNSPEC         = 0x0\n\tNFTA_SET_ELEM_LIST_TABLE          = 0x1\n\tNFTA_SET_ELEM_LIST_SET            = 0x2\n\tNFTA_SET_ELEM_LIST_ELEMENTS       = 0x3\n\tNFTA_SET_ELEM_LIST_SET_ID         = 0x4\n\tNFT_DATA_VALUE                    = 0x0\n\tNFT_DATA_VERDICT                  = 0xffffff00\n\tNFTA_DATA_UNSPEC                  = 0x0\n\tNFTA_DATA_VALUE                   = 0x1\n\tNFTA_DATA_VERDICT                 = 0x2\n\tNFTA_VERDICT_UNSPEC               = 0x0\n\tNFTA_VERDICT_CODE                 = 0x1\n\tNFTA_VERDICT_CHAIN                = 0x2\n\tNFTA_EXPR_UNSPEC                  = 0x0\n\tNFTA_EXPR_NAME                    = 0x1\n\tNFTA_EXPR_DATA                    = 0x2\n\tNFTA_IMMEDIATE_UNSPEC             = 0x0\n\tNFTA_IMMEDIATE_DREG               = 0x1\n\tNFTA_IMMEDIATE_DATA               = 0x2\n\tNFTA_BITWISE_UNSPEC               = 0x0\n\tNFTA_BITWISE_SREG                 = 0x1\n\tNFTA_BITWISE_DREG                 = 0x2\n\tNFTA_BITWISE_LEN                  = 0x3\n\tNFTA_BITWISE_MASK                 = 0x4\n\tNFTA_BITWISE_XOR                  = 0x5\n\tNFT_BYTEORDER_NTOH                = 0x0\n\tNFT_BYTEORDER_HTON                = 0x1\n\tNFTA_BYTEORDER_UNSPEC             = 0x0\n\tNFTA_BYTEORDER_SREG               = 0x1\n\tNFTA_BYTEORDER_DREG               = 0x2\n\tNFTA_BYTEORDER_OP                 = 0x3\n\tNFTA_BYTEORDER_LEN                = 0x4\n\tNFTA_BYTEORDER_SIZE               = 0x5\n\tNFT_CMP_EQ                        = 0x0\n\tNFT_CMP_NEQ                       = 0x1\n\tNFT_CMP_LT                        = 0x2\n\tNFT_CMP_LTE                       = 0x3\n\tNFT_CMP_GT                        = 0x4\n\tNFT_CMP_GTE                       = 0x5\n\tNFTA_CMP_UNSPEC                   = 0x0\n\tNFTA_CMP_SREG                     = 0x1\n\tNFTA_CMP_OP                       = 0x2\n\tNFTA_CMP_DATA                     = 0x3\n\tNFT_RANGE_EQ                      = 0x0\n\tNFT_RANGE_NEQ                     = 0x1\n\tNFTA_RANGE_UNSPEC                 = 0x0\n\tNFTA_RANGE_SREG                   = 0x1\n\tNFTA_RANGE_OP                     = 0x2\n\tNFTA_RANGE_FROM_DATA              = 0x3\n\tNFTA_RANGE_TO_DATA                = 0x4\n\tNFT_LOOKUP_F_INV                  = 0x1\n\tNFTA_LOOKUP_UNSPEC                = 0x0\n\tNFTA_LOOKUP_SET                   = 0x1\n\tNFTA_LOOKUP_SREG                  = 0x2\n\tNFTA_LOOKUP_DREG                  = 0x3\n\tNFTA_LOOKUP_SET_ID                = 0x4\n\tNFTA_LOOKUP_FLAGS                 = 0x5\n\tNFT_DYNSET_OP_ADD                 = 0x0\n\tNFT_DYNSET_OP_UPDATE              = 0x1\n\tNFT_DYNSET_F_INV                  = 0x1\n\tNFTA_DYNSET_UNSPEC                = 0x0\n\tNFTA_DYNSET_SET_NAME              = 0x1\n\tNFTA_DYNSET_SET_ID                = 0x2\n\tNFTA_DYNSET_OP                    = 0x3\n\tNFTA_DYNSET_SREG_KEY              = 0x4\n\tNFTA_DYNSET_SREG_DATA             = 0x5\n\tNFTA_DYNSET_TIMEOUT               = 0x6\n\tNFTA_DYNSET_EXPR                  = 0x7\n\tNFTA_DYNSET_PAD                   = 0x8\n\tNFTA_DYNSET_FLAGS                 = 0x9\n\tNFT_PAYLOAD_LL_HEADER             = 0x0\n\tNFT_PAYLOAD_NETWORK_HEADER        = 0x1\n\tNFT_PAYLOAD_TRANSPORT_HEADER      = 0x2\n\tNFT_PAYLOAD_CSUM_NONE             = 0x0\n\tNFT_PAYLOAD_CSUM_INET             = 0x1\n\tNFT_PAYLOAD_L4CSUM_PSEUDOHDR      = 0x1\n\tNFTA_PAYLOAD_UNSPEC               = 0x0\n\tNFTA_PAYLOAD_DREG                 = 0x1\n\tNFTA_PAYLOAD_BASE                 = 0x2\n\tNFTA_PAYLOAD_OFFSET               = 0x3\n\tNFTA_PAYLOAD_LEN                  = 0x4\n\tNFTA_PAYLOAD_SREG                 = 0x5\n\tNFTA_PAYLOAD_CSUM_TYPE            = 0x6\n\tNFTA_PAYLOAD_CSUM_OFFSET          = 0x7\n\tNFTA_PAYLOAD_CSUM_FLAGS           = 0x8\n\tNFT_EXTHDR_F_PRESENT              = 0x1\n\tNFT_EXTHDR_OP_IPV6                = 0x0\n\tNFT_EXTHDR_OP_TCPOPT              = 0x1\n\tNFTA_EXTHDR_UNSPEC                = 0x0\n\tNFTA_EXTHDR_DREG                  = 0x1\n\tNFTA_EXTHDR_TYPE                  = 0x2\n\tNFTA_EXTHDR_OFFSET                = 0x3\n\tNFTA_EXTHDR_LEN                   = 0x4\n\tNFTA_EXTHDR_FLAGS                 = 0x5\n\tNFTA_EXTHDR_OP                    = 0x6\n\tNFTA_EXTHDR_SREG                  = 0x7\n\tNFT_META_LEN                      = 0x0\n\tNFT_META_PROTOCOL                 = 0x1\n\tNFT_META_PRIORITY                 = 0x2\n\tNFT_META_MARK                     = 0x3\n\tNFT_META_IIF                      = 0x4\n\tNFT_META_OIF                      = 0x5\n\tNFT_META_IIFNAME                  = 0x6\n\tNFT_META_OIFNAME                  = 0x7\n\tNFT_META_IIFTYPE                  = 0x8\n\tNFT_META_OIFTYPE                  = 0x9\n\tNFT_META_SKUID                    = 0xa\n\tNFT_META_SKGID                    = 0xb\n\tNFT_META_NFTRACE                  = 0xc\n\tNFT_META_RTCLASSID                = 0xd\n\tNFT_META_SECMARK                  = 0xe\n\tNFT_META_NFPROTO                  = 0xf\n\tNFT_META_L4PROTO                  = 0x10\n\tNFT_META_BRI_IIFNAME              = 0x11\n\tNFT_META_BRI_OIFNAME              = 0x12\n\tNFT_META_PKTTYPE                  = 0x13\n\tNFT_META_CPU                      = 0x14\n\tNFT_META_IIFGROUP                 = 0x15\n\tNFT_META_OIFGROUP                 = 0x16\n\tNFT_META_CGROUP                   = 0x17\n\tNFT_META_PRANDOM                  = 0x18\n\tNFT_RT_CLASSID                    = 0x0\n\tNFT_RT_NEXTHOP4                   = 0x1\n\tNFT_RT_NEXTHOP6                   = 0x2\n\tNFT_RT_TCPMSS                     = 0x3\n\tNFT_HASH_JENKINS                  = 0x0\n\tNFT_HASH_SYM                      = 0x1\n\tNFTA_HASH_UNSPEC                  = 0x0\n\tNFTA_HASH_SREG                    = 0x1\n\tNFTA_HASH_DREG                    = 0x2\n\tNFTA_HASH_LEN                     = 0x3\n\tNFTA_HASH_MODULUS                 = 0x4\n\tNFTA_HASH_SEED                    = 0x5\n\tNFTA_HASH_OFFSET                  = 0x6\n\tNFTA_HASH_TYPE                    = 0x7\n\tNFTA_META_UNSPEC                  = 0x0\n\tNFTA_META_DREG                    = 0x1\n\tNFTA_META_KEY                     = 0x2\n\tNFTA_META_SREG                    = 0x3\n\tNFTA_RT_UNSPEC                    = 0x0\n\tNFTA_RT_DREG                      = 0x1\n\tNFTA_RT_KEY                       = 0x2\n\tNFT_CT_STATE                      = 0x0\n\tNFT_CT_DIRECTION                  = 0x1\n\tNFT_CT_STATUS                     = 0x2\n\tNFT_CT_MARK                       = 0x3\n\tNFT_CT_SECMARK                    = 0x4\n\tNFT_CT_EXPIRATION                 = 0x5\n\tNFT_CT_HELPER                     = 0x6\n\tNFT_CT_L3PROTOCOL                 = 0x7\n\tNFT_CT_SRC                        = 0x8\n\tNFT_CT_DST                        = 0x9\n\tNFT_CT_PROTOCOL                   = 0xa\n\tNFT_CT_PROTO_SRC                  = 0xb\n\tNFT_CT_PROTO_DST                  = 0xc\n\tNFT_CT_LABELS                     = 0xd\n\tNFT_CT_PKTS                       = 0xe\n\tNFT_CT_BYTES                      = 0xf\n\tNFT_CT_AVGPKT                     = 0x10\n\tNFT_CT_ZONE                       = 0x11\n\tNFT_CT_EVENTMASK                  = 0x12\n\tNFTA_CT_UNSPEC                    = 0x0\n\tNFTA_CT_DREG                      = 0x1\n\tNFTA_CT_KEY                       = 0x2\n\tNFTA_CT_DIRECTION                 = 0x3\n\tNFTA_CT_SREG                      = 0x4\n\tNFT_LIMIT_PKTS                    = 0x0\n\tNFT_LIMIT_PKT_BYTES               = 0x1\n\tNFT_LIMIT_F_INV                   = 0x1\n\tNFTA_LIMIT_UNSPEC                 = 0x0\n\tNFTA_LIMIT_RATE                   = 0x1\n\tNFTA_LIMIT_UNIT                   = 0x2\n\tNFTA_LIMIT_BURST                  = 0x3\n\tNFTA_LIMIT_TYPE                   = 0x4\n\tNFTA_LIMIT_FLAGS                  = 0x5\n\tNFTA_LIMIT_PAD                    = 0x6\n\tNFTA_COUNTER_UNSPEC               = 0x0\n\tNFTA_COUNTER_BYTES                = 0x1\n\tNFTA_COUNTER_PACKETS              = 0x2\n\tNFTA_COUNTER_PAD                  = 0x3\n\tNFTA_LOG_UNSPEC                   = 0x0\n\tNFTA_LOG_GROUP                    = 0x1\n\tNFTA_LOG_PREFIX                   = 0x2\n\tNFTA_LOG_SNAPLEN                  = 0x3\n\tNFTA_LOG_QTHRESHOLD               = 0x4\n\tNFTA_LOG_LEVEL                    = 0x5\n\tNFTA_LOG_FLAGS                    = 0x6\n\tNFTA_QUEUE_UNSPEC                 = 0x0\n\tNFTA_QUEUE_NUM                    = 0x1\n\tNFTA_QUEUE_TOTAL                  = 0x2\n\tNFTA_QUEUE_FLAGS                  = 0x3\n\tNFTA_QUEUE_SREG_QNUM              = 0x4\n\tNFT_QUOTA_F_INV                   = 0x1\n\tNFT_QUOTA_F_DEPLETED              = 0x2\n\tNFTA_QUOTA_UNSPEC                 = 0x0\n\tNFTA_QUOTA_BYTES                  = 0x1\n\tNFTA_QUOTA_FLAGS                  = 0x2\n\tNFTA_QUOTA_PAD                    = 0x3\n\tNFTA_QUOTA_CONSUMED               = 0x4\n\tNFT_REJECT_ICMP_UNREACH           = 0x0\n\tNFT_REJECT_TCP_RST                = 0x1\n\tNFT_REJECT_ICMPX_UNREACH          = 0x2\n\tNFT_REJECT_ICMPX_NO_ROUTE         = 0x0\n\tNFT_REJECT_ICMPX_PORT_UNREACH     = 0x1\n\tNFT_REJECT_ICMPX_HOST_UNREACH     = 0x2\n\tNFT_REJECT_ICMPX_ADMIN_PROHIBITED = 0x3\n\tNFTA_REJECT_UNSPEC                = 0x0\n\tNFTA_REJECT_TYPE                  = 0x1\n\tNFTA_REJECT_ICMP_CODE             = 0x2\n\tNFT_NAT_SNAT                      = 0x0\n\tNFT_NAT_DNAT                      = 0x1\n\tNFTA_NAT_UNSPEC                   = 0x0\n\tNFTA_NAT_TYPE                     = 0x1\n\tNFTA_NAT_FAMILY                   = 0x2\n\tNFTA_NAT_REG_ADDR_MIN             = 0x3\n\tNFTA_NAT_REG_ADDR_MAX             = 0x4\n\tNFTA_NAT_REG_PROTO_MIN            = 0x5\n\tNFTA_NAT_REG_PROTO_MAX            = 0x6\n\tNFTA_NAT_FLAGS                    = 0x7\n\tNFTA_MASQ_UNSPEC                  = 0x0\n\tNFTA_MASQ_FLAGS                   = 0x1\n\tNFTA_MASQ_REG_PROTO_MIN           = 0x2\n\tNFTA_MASQ_REG_PROTO_MAX           = 0x3\n\tNFTA_REDIR_UNSPEC                 = 0x0\n\tNFTA_REDIR_REG_PROTO_MIN          = 0x1\n\tNFTA_REDIR_REG_PROTO_MAX          = 0x2\n\tNFTA_REDIR_FLAGS                  = 0x3\n\tNFTA_DUP_UNSPEC                   = 0x0\n\tNFTA_DUP_SREG_ADDR                = 0x1\n\tNFTA_DUP_SREG_DEV                 = 0x2\n\tNFTA_FWD_UNSPEC                   = 0x0\n\tNFTA_FWD_SREG_DEV                 = 0x1\n\tNFTA_OBJREF_UNSPEC                = 0x0\n\tNFTA_OBJREF_IMM_TYPE              = 0x1\n\tNFTA_OBJREF_IMM_NAME              = 0x2\n\tNFTA_OBJREF_SET_SREG              = 0x3\n\tNFTA_OBJREF_SET_NAME              = 0x4\n\tNFTA_OBJREF_SET_ID                = 0x5\n\tNFTA_GEN_UNSPEC                   = 0x0\n\tNFTA_GEN_ID                       = 0x1\n\tNFTA_GEN_PROC_PID                 = 0x2\n\tNFTA_GEN_PROC_NAME                = 0x3\n\tNFTA_FIB_UNSPEC                   = 0x0\n\tNFTA_FIB_DREG                     = 0x1\n\tNFTA_FIB_RESULT                   = 0x2\n\tNFTA_FIB_FLAGS                    = 0x3\n\tNFT_FIB_RESULT_UNSPEC             = 0x0\n\tNFT_FIB_RESULT_OIF                = 0x1\n\tNFT_FIB_RESULT_OIFNAME            = 0x2\n\tNFT_FIB_RESULT_ADDRTYPE           = 0x3\n\tNFTA_FIB_F_SADDR                  = 0x1\n\tNFTA_FIB_F_DADDR                  = 0x2\n\tNFTA_FIB_F_MARK                   = 0x4\n\tNFTA_FIB_F_IIF                    = 0x8\n\tNFTA_FIB_F_OIF                    = 0x10\n\tNFTA_FIB_F_PRESENT                = 0x20\n\tNFTA_CT_HELPER_UNSPEC             = 0x0\n\tNFTA_CT_HELPER_NAME               = 0x1\n\tNFTA_CT_HELPER_L3PROTO            = 0x2\n\tNFTA_CT_HELPER_L4PROTO            = 0x3\n\tNFTA_OBJ_UNSPEC                   = 0x0\n\tNFTA_OBJ_TABLE                    = 0x1\n\tNFTA_OBJ_NAME                     = 0x2\n\tNFTA_OBJ_TYPE                     = 0x3\n\tNFTA_OBJ_DATA                     = 0x4\n\tNFTA_OBJ_USE                      = 0x5\n\tNFTA_TRACE_UNSPEC                 = 0x0\n\tNFTA_TRACE_TABLE                  = 0x1\n\tNFTA_TRACE_CHAIN                  = 0x2\n\tNFTA_TRACE_RULE_HANDLE            = 0x3\n\tNFTA_TRACE_TYPE                   = 0x4\n\tNFTA_TRACE_VERDICT                = 0x5\n\tNFTA_TRACE_ID                     = 0x6\n\tNFTA_TRACE_LL_HEADER              = 0x7\n\tNFTA_TRACE_NETWORK_HEADER         = 0x8\n\tNFTA_TRACE_TRANSPORT_HEADER       = 0x9\n\tNFTA_TRACE_IIF                    = 0xa\n\tNFTA_TRACE_IIFTYPE                = 0xb\n\tNFTA_TRACE_OIF                    = 0xc\n\tNFTA_TRACE_OIFTYPE                = 0xd\n\tNFTA_TRACE_MARK                   = 0xe\n\tNFTA_TRACE_NFPROTO                = 0xf\n\tNFTA_TRACE_POLICY                 = 0x10\n\tNFTA_TRACE_PAD                    = 0x11\n\tNFT_TRACETYPE_UNSPEC              = 0x0\n\tNFT_TRACETYPE_POLICY              = 0x1\n\tNFT_TRACETYPE_RETURN              = 0x2\n\tNFT_TRACETYPE_RULE                = 0x3\n\tNFTA_NG_UNSPEC                    = 0x0\n\tNFTA_NG_DREG                      = 0x1\n\tNFTA_NG_MODULUS                   = 0x2\n\tNFTA_NG_TYPE                      = 0x3\n\tNFTA_NG_OFFSET                    = 0x4\n\tNFT_NG_INCREMENTAL                = 0x0\n\tNFT_NG_RANDOM                     = 0x1\n)\n\ntype RTCTime struct {\n\tSec   int32\n\tMin   int32\n\tHour  int32\n\tMday  int32\n\tMon   int32\n\tYear  int32\n\tWday  int32\n\tYday  int32\n\tIsdst int32\n}\n\ntype RTCWkAlrm struct {\n\tEnabled uint8\n\tPending uint8\n\tTime    RTCTime\n}\n\ntype RTCPLLInfo struct {\n\tCtrl    int32\n\tValue   int32\n\tMax     int32\n\tMin     int32\n\tPosmult int32\n\tNegmult int32\n\tClock   int64\n}\n\ntype BlkpgIoctlArg struct {\n\tOp      int32\n\tFlags   int32\n\tDatalen int32\n\tData    *byte\n}\n\ntype BlkpgPartition struct {\n\tStart   int64\n\tLength  int64\n\tPno     int32\n\tDevname [64]uint8\n\tVolname [64]uint8\n\t_       [4]byte\n}\n\nconst (\n\tBLKPG                  = 0x1269\n\tBLKPG_ADD_PARTITION    = 0x1\n\tBLKPG_DEL_PARTITION    = 0x2\n\tBLKPG_RESIZE_PARTITION = 0x3\n)\n\nconst (\n\tNETNSA_NONE = 0x0\n\tNETNSA_NSID = 0x1\n\tNETNSA_PID  = 0x2\n\tNETNSA_FD   = 0x3\n)\n\ntype XDPRingOffset struct {\n\tProducer uint64\n\tConsumer uint64\n\tDesc     uint64\n}\n\ntype XDPMmapOffsets struct {\n\tRx XDPRingOffset\n\tTx XDPRingOffset\n\tFr XDPRingOffset\n\tCr XDPRingOffset\n}\n\ntype XDPUmemReg struct {\n\tAddr     uint64\n\tLen      uint64\n\tSize     uint32\n\tHeadroom uint32\n}\n\ntype XDPStatistics struct {\n\tRx_dropped       uint64\n\tRx_invalid_descs uint64\n\tTx_invalid_descs uint64\n}\n\ntype XDPDesc struct {\n\tAddr    uint64\n\tLen     uint32\n\tOptions uint32\n}\n\nconst (\n\tNCSI_CMD_UNSPEC                 = 0x0\n\tNCSI_CMD_PKG_INFO               = 0x1\n\tNCSI_CMD_SET_INTERFACE          = 0x2\n\tNCSI_CMD_CLEAR_INTERFACE        = 0x3\n\tNCSI_ATTR_UNSPEC                = 0x0\n\tNCSI_ATTR_IFINDEX               = 0x1\n\tNCSI_ATTR_PACKAGE_LIST          = 0x2\n\tNCSI_ATTR_PACKAGE_ID            = 0x3\n\tNCSI_ATTR_CHANNEL_ID            = 0x4\n\tNCSI_PKG_ATTR_UNSPEC            = 0x0\n\tNCSI_PKG_ATTR                   = 0x1\n\tNCSI_PKG_ATTR_ID                = 0x2\n\tNCSI_PKG_ATTR_FORCED            = 0x3\n\tNCSI_PKG_ATTR_CHANNEL_LIST      = 0x4\n\tNCSI_CHANNEL_ATTR_UNSPEC        = 0x0\n\tNCSI_CHANNEL_ATTR               = 0x1\n\tNCSI_CHANNEL_ATTR_ID            = 0x2\n\tNCSI_CHANNEL_ATTR_VERSION_MAJOR = 0x3\n\tNCSI_CHANNEL_ATTR_VERSION_MINOR = 0x4\n\tNCSI_CHANNEL_ATTR_VERSION_STR   = 0x5\n\tNCSI_CHANNEL_ATTR_LINK_STATE    = 0x6\n\tNCSI_CHANNEL_ATTR_ACTIVE        = 0x7\n\tNCSI_CHANNEL_ATTR_FORCED        = 0x8\n\tNCSI_CHANNEL_ATTR_VLAN_LIST     = 0x9\n\tNCSI_CHANNEL_ATTR_VLAN_ID       = 0xa\n)\n\ntype ScmTimestamping struct {\n\tTs [3]Timespec\n}\n\nconst (\n\tSOF_TIMESTAMPING_TX_HARDWARE  = 0x1\n\tSOF_TIMESTAMPING_TX_SOFTWARE  = 0x2\n\tSOF_TIMESTAMPING_RX_HARDWARE  = 0x4\n\tSOF_TIMESTAMPING_RX_SOFTWARE  = 0x8\n\tSOF_TIMESTAMPING_SOFTWARE     = 0x10\n\tSOF_TIMESTAMPING_SYS_HARDWARE = 0x20\n\tSOF_TIMESTAMPING_RAW_HARDWARE = 0x40\n\tSOF_TIMESTAMPING_OPT_ID       = 0x80\n\tSOF_TIMESTAMPING_TX_SCHED     = 0x100\n\tSOF_TIMESTAMPING_TX_ACK       = 0x200\n\tSOF_TIMESTAMPING_OPT_CMSG     = 0x400\n\tSOF_TIMESTAMPING_OPT_TSONLY   = 0x800\n\tSOF_TIMESTAMPING_OPT_STATS    = 0x1000\n\tSOF_TIMESTAMPING_OPT_PKTINFO  = 0x2000\n\tSOF_TIMESTAMPING_OPT_TX_SWHW  = 0x4000\n\n\tSOF_TIMESTAMPING_LAST = 0x4000\n\tSOF_TIMESTAMPING_MASK = 0x7fff\n\n\tSCM_TSTAMP_SND   = 0x0\n\tSCM_TSTAMP_SCHED = 0x1\n\tSCM_TSTAMP_ACK   = 0x2\n)\n\ntype SockExtendedErr struct {\n\tErrno  uint32\n\tOrigin uint8\n\tType   uint8\n\tCode   uint8\n\tPad    uint8\n\tInfo   uint32\n\tData   uint32\n}\n\ntype FanotifyEventMetadata struct {\n\tEvent_len    uint32\n\tVers         uint8\n\tReserved     uint8\n\tMetadata_len uint16\n\tMask         uint64\n\tFd           int32\n\tPid          int32\n}\n\ntype FanotifyResponse struct {\n\tFd       int32\n\tResponse uint32\n}\n\nconst (\n\tCRYPTO_MSG_BASE      = 0x10\n\tCRYPTO_MSG_NEWALG    = 0x10\n\tCRYPTO_MSG_DELALG    = 0x11\n\tCRYPTO_MSG_UPDATEALG = 0x12\n\tCRYPTO_MSG_GETALG    = 0x13\n\tCRYPTO_MSG_DELRNG    = 0x14\n\tCRYPTO_MSG_GETSTAT   = 0x15\n)\n\nconst (\n\tCRYPTOCFGA_UNSPEC           = 0x0\n\tCRYPTOCFGA_PRIORITY_VAL     = 0x1\n\tCRYPTOCFGA_REPORT_LARVAL    = 0x2\n\tCRYPTOCFGA_REPORT_HASH      = 0x3\n\tCRYPTOCFGA_REPORT_BLKCIPHER = 0x4\n\tCRYPTOCFGA_REPORT_AEAD      = 0x5\n\tCRYPTOCFGA_REPORT_COMPRESS  = 0x6\n\tCRYPTOCFGA_REPORT_RNG       = 0x7\n\tCRYPTOCFGA_REPORT_CIPHER    = 0x8\n\tCRYPTOCFGA_REPORT_AKCIPHER  = 0x9\n\tCRYPTOCFGA_REPORT_KPP       = 0xa\n\tCRYPTOCFGA_REPORT_ACOMP     = 0xb\n\tCRYPTOCFGA_STAT_LARVAL      = 0xc\n\tCRYPTOCFGA_STAT_HASH        = 0xd\n\tCRYPTOCFGA_STAT_BLKCIPHER   = 0xe\n\tCRYPTOCFGA_STAT_AEAD        = 0xf\n\tCRYPTOCFGA_STAT_COMPRESS    = 0x10\n\tCRYPTOCFGA_STAT_RNG         = 0x11\n\tCRYPTOCFGA_STAT_CIPHER      = 0x12\n\tCRYPTOCFGA_STAT_AKCIPHER    = 0x13\n\tCRYPTOCFGA_STAT_KPP         = 0x14\n\tCRYPTOCFGA_STAT_ACOMP       = 0x15\n)\n\ntype CryptoUserAlg struct {\n\tName        [64]int8\n\tDriver_name [64]int8\n\tModule_name [64]int8\n\tType        uint32\n\tMask        uint32\n\tRefcnt      uint32\n\tFlags       uint32\n}\n\ntype CryptoStatAEAD struct {\n\tType         [64]int8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatAKCipher struct {\n\tType         [64]int8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tVerify_cnt   uint64\n\tSign_cnt     uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatCipher struct {\n\tType         [64]int8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatCompress struct {\n\tType            [64]int8\n\tCompress_cnt    uint64\n\tCompress_tlen   uint64\n\tDecompress_cnt  uint64\n\tDecompress_tlen uint64\n\tErr_cnt         uint64\n}\n\ntype CryptoStatHash struct {\n\tType      [64]int8\n\tHash_cnt  uint64\n\tHash_tlen uint64\n\tErr_cnt   uint64\n}\n\ntype CryptoStatKPP struct {\n\tType                      [64]int8\n\tSetsecret_cnt             uint64\n\tGenerate_public_key_cnt   uint64\n\tCompute_shared_secret_cnt uint64\n\tErr_cnt                   uint64\n}\n\ntype CryptoStatRNG struct {\n\tType          [64]int8\n\tGenerate_cnt  uint64\n\tGenerate_tlen uint64\n\tSeed_cnt      uint64\n\tErr_cnt       uint64\n}\n\ntype CryptoStatLarval struct {\n\tType [64]int8\n}\n\ntype CryptoReportLarval struct {\n\tType [64]int8\n}\n\ntype CryptoReportHash struct {\n\tType       [64]int8\n\tBlocksize  uint32\n\tDigestsize uint32\n}\n\ntype CryptoReportCipher struct {\n\tType        [64]int8\n\tBlocksize   uint32\n\tMin_keysize uint32\n\tMax_keysize uint32\n}\n\ntype CryptoReportBlkCipher struct {\n\tType        [64]int8\n\tGeniv       [64]int8\n\tBlocksize   uint32\n\tMin_keysize uint32\n\tMax_keysize uint32\n\tIvsize      uint32\n}\n\ntype CryptoReportAEAD struct {\n\tType        [64]int8\n\tGeniv       [64]int8\n\tBlocksize   uint32\n\tMaxauthsize uint32\n\tIvsize      uint32\n}\n\ntype CryptoReportComp struct {\n\tType [64]int8\n}\n\ntype CryptoReportRNG struct {\n\tType     [64]int8\n\tSeedsize uint32\n}\n\ntype CryptoReportAKCipher struct {\n\tType [64]int8\n}\n\ntype CryptoReportKPP struct {\n\tType [64]int8\n}\n\ntype CryptoReportAcomp struct {\n\tType [64]int8\n}\n\nconst (\n\tBPF_REG_0                           = 0x0\n\tBPF_REG_1                           = 0x1\n\tBPF_REG_2                           = 0x2\n\tBPF_REG_3                           = 0x3\n\tBPF_REG_4                           = 0x4\n\tBPF_REG_5                           = 0x5\n\tBPF_REG_6                           = 0x6\n\tBPF_REG_7                           = 0x7\n\tBPF_REG_8                           = 0x8\n\tBPF_REG_9                           = 0x9\n\tBPF_REG_10                          = 0xa\n\tBPF_MAP_CREATE                      = 0x0\n\tBPF_MAP_LOOKUP_ELEM                 = 0x1\n\tBPF_MAP_UPDATE_ELEM                 = 0x2\n\tBPF_MAP_DELETE_ELEM                 = 0x3\n\tBPF_MAP_GET_NEXT_KEY                = 0x4\n\tBPF_PROG_LOAD                       = 0x5\n\tBPF_OBJ_PIN                         = 0x6\n\tBPF_OBJ_GET                         = 0x7\n\tBPF_PROG_ATTACH                     = 0x8\n\tBPF_PROG_DETACH                     = 0x9\n\tBPF_PROG_TEST_RUN                   = 0xa\n\tBPF_PROG_GET_NEXT_ID                = 0xb\n\tBPF_MAP_GET_NEXT_ID                 = 0xc\n\tBPF_PROG_GET_FD_BY_ID               = 0xd\n\tBPF_MAP_GET_FD_BY_ID                = 0xe\n\tBPF_OBJ_GET_INFO_BY_FD              = 0xf\n\tBPF_PROG_QUERY                      = 0x10\n\tBPF_RAW_TRACEPOINT_OPEN             = 0x11\n\tBPF_BTF_LOAD                        = 0x12\n\tBPF_BTF_GET_FD_BY_ID                = 0x13\n\tBPF_TASK_FD_QUERY                   = 0x14\n\tBPF_MAP_LOOKUP_AND_DELETE_ELEM      = 0x15\n\tBPF_MAP_TYPE_UNSPEC                 = 0x0\n\tBPF_MAP_TYPE_HASH                   = 0x1\n\tBPF_MAP_TYPE_ARRAY                  = 0x2\n\tBPF_MAP_TYPE_PROG_ARRAY             = 0x3\n\tBPF_MAP_TYPE_PERF_EVENT_ARRAY       = 0x4\n\tBPF_MAP_TYPE_PERCPU_HASH            = 0x5\n\tBPF_MAP_TYPE_PERCPU_ARRAY           = 0x6\n\tBPF_MAP_TYPE_STACK_TRACE            = 0x7\n\tBPF_MAP_TYPE_CGROUP_ARRAY           = 0x8\n\tBPF_MAP_TYPE_LRU_HASH               = 0x9\n\tBPF_MAP_TYPE_LRU_PERCPU_HASH        = 0xa\n\tBPF_MAP_TYPE_LPM_TRIE               = 0xb\n\tBPF_MAP_TYPE_ARRAY_OF_MAPS          = 0xc\n\tBPF_MAP_TYPE_HASH_OF_MAPS           = 0xd\n\tBPF_MAP_TYPE_DEVMAP                 = 0xe\n\tBPF_MAP_TYPE_SOCKMAP                = 0xf\n\tBPF_MAP_TYPE_CPUMAP                 = 0x10\n\tBPF_MAP_TYPE_XSKMAP                 = 0x11\n\tBPF_MAP_TYPE_SOCKHASH               = 0x12\n\tBPF_MAP_TYPE_CGROUP_STORAGE         = 0x13\n\tBPF_MAP_TYPE_REUSEPORT_SOCKARRAY    = 0x14\n\tBPF_MAP_TYPE_PERCPU_CGROUP_STORAGE  = 0x15\n\tBPF_MAP_TYPE_QUEUE                  = 0x16\n\tBPF_MAP_TYPE_STACK                  = 0x17\n\tBPF_PROG_TYPE_UNSPEC                = 0x0\n\tBPF_PROG_TYPE_SOCKET_FILTER         = 0x1\n\tBPF_PROG_TYPE_KPROBE                = 0x2\n\tBPF_PROG_TYPE_SCHED_CLS             = 0x3\n\tBPF_PROG_TYPE_SCHED_ACT             = 0x4\n\tBPF_PROG_TYPE_TRACEPOINT            = 0x5\n\tBPF_PROG_TYPE_XDP                   = 0x6\n\tBPF_PROG_TYPE_PERF_EVENT            = 0x7\n\tBPF_PROG_TYPE_CGROUP_SKB            = 0x8\n\tBPF_PROG_TYPE_CGROUP_SOCK           = 0x9\n\tBPF_PROG_TYPE_LWT_IN                = 0xa\n\tBPF_PROG_TYPE_LWT_OUT               = 0xb\n\tBPF_PROG_TYPE_LWT_XMIT              = 0xc\n\tBPF_PROG_TYPE_SOCK_OPS              = 0xd\n\tBPF_PROG_TYPE_SK_SKB                = 0xe\n\tBPF_PROG_TYPE_CGROUP_DEVICE         = 0xf\n\tBPF_PROG_TYPE_SK_MSG                = 0x10\n\tBPF_PROG_TYPE_RAW_TRACEPOINT        = 0x11\n\tBPF_PROG_TYPE_CGROUP_SOCK_ADDR      = 0x12\n\tBPF_PROG_TYPE_LWT_SEG6LOCAL         = 0x13\n\tBPF_PROG_TYPE_LIRC_MODE2            = 0x14\n\tBPF_PROG_TYPE_SK_REUSEPORT          = 0x15\n\tBPF_PROG_TYPE_FLOW_DISSECTOR        = 0x16\n\tBPF_CGROUP_INET_INGRESS             = 0x0\n\tBPF_CGROUP_INET_EGRESS              = 0x1\n\tBPF_CGROUP_INET_SOCK_CREATE         = 0x2\n\tBPF_CGROUP_SOCK_OPS                 = 0x3\n\tBPF_SK_SKB_STREAM_PARSER            = 0x4\n\tBPF_SK_SKB_STREAM_VERDICT           = 0x5\n\tBPF_CGROUP_DEVICE                   = 0x6\n\tBPF_SK_MSG_VERDICT                  = 0x7\n\tBPF_CGROUP_INET4_BIND               = 0x8\n\tBPF_CGROUP_INET6_BIND               = 0x9\n\tBPF_CGROUP_INET4_CONNECT            = 0xa\n\tBPF_CGROUP_INET6_CONNECT            = 0xb\n\tBPF_CGROUP_INET4_POST_BIND          = 0xc\n\tBPF_CGROUP_INET6_POST_BIND          = 0xd\n\tBPF_CGROUP_UDP4_SENDMSG             = 0xe\n\tBPF_CGROUP_UDP6_SENDMSG             = 0xf\n\tBPF_LIRC_MODE2                      = 0x10\n\tBPF_FLOW_DISSECTOR                  = 0x11\n\tBPF_STACK_BUILD_ID_EMPTY            = 0x0\n\tBPF_STACK_BUILD_ID_VALID            = 0x1\n\tBPF_STACK_BUILD_ID_IP               = 0x2\n\tBPF_ADJ_ROOM_NET                    = 0x0\n\tBPF_HDR_START_MAC                   = 0x0\n\tBPF_HDR_START_NET                   = 0x1\n\tBPF_LWT_ENCAP_SEG6                  = 0x0\n\tBPF_LWT_ENCAP_SEG6_INLINE           = 0x1\n\tBPF_OK                              = 0x0\n\tBPF_DROP                            = 0x2\n\tBPF_REDIRECT                        = 0x7\n\tBPF_SOCK_OPS_VOID                   = 0x0\n\tBPF_SOCK_OPS_TIMEOUT_INIT           = 0x1\n\tBPF_SOCK_OPS_RWND_INIT              = 0x2\n\tBPF_SOCK_OPS_TCP_CONNECT_CB         = 0x3\n\tBPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB  = 0x4\n\tBPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB = 0x5\n\tBPF_SOCK_OPS_NEEDS_ECN              = 0x6\n\tBPF_SOCK_OPS_BASE_RTT               = 0x7\n\tBPF_SOCK_OPS_RTO_CB                 = 0x8\n\tBPF_SOCK_OPS_RETRANS_CB             = 0x9\n\tBPF_SOCK_OPS_STATE_CB               = 0xa\n\tBPF_SOCK_OPS_TCP_LISTEN_CB          = 0xb\n\tBPF_TCP_ESTABLISHED                 = 0x1\n\tBPF_TCP_SYN_SENT                    = 0x2\n\tBPF_TCP_SYN_RECV                    = 0x3\n\tBPF_TCP_FIN_WAIT1                   = 0x4\n\tBPF_TCP_FIN_WAIT2                   = 0x5\n\tBPF_TCP_TIME_WAIT                   = 0x6\n\tBPF_TCP_CLOSE                       = 0x7\n\tBPF_TCP_CLOSE_WAIT                  = 0x8\n\tBPF_TCP_LAST_ACK                    = 0x9\n\tBPF_TCP_LISTEN                      = 0xa\n\tBPF_TCP_CLOSING                     = 0xb\n\tBPF_TCP_NEW_SYN_RECV                = 0xc\n\tBPF_TCP_MAX_STATES                  = 0xd\n\tBPF_FIB_LKUP_RET_SUCCESS            = 0x0\n\tBPF_FIB_LKUP_RET_BLACKHOLE          = 0x1\n\tBPF_FIB_LKUP_RET_UNREACHABLE        = 0x2\n\tBPF_FIB_LKUP_RET_PROHIBIT           = 0x3\n\tBPF_FIB_LKUP_RET_NOT_FWDED          = 0x4\n\tBPF_FIB_LKUP_RET_FWD_DISABLED       = 0x5\n\tBPF_FIB_LKUP_RET_UNSUPP_LWT         = 0x6\n\tBPF_FIB_LKUP_RET_NO_NEIGH           = 0x7\n\tBPF_FIB_LKUP_RET_FRAG_NEEDED        = 0x8\n\tBPF_FD_TYPE_RAW_TRACEPOINT          = 0x0\n\tBPF_FD_TYPE_TRACEPOINT              = 0x1\n\tBPF_FD_TYPE_KPROBE                  = 0x2\n\tBPF_FD_TYPE_KRETPROBE               = 0x3\n\tBPF_FD_TYPE_UPROBE                  = 0x4\n\tBPF_FD_TYPE_URETPROBE               = 0x5\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go",
    "content": "// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build sparc64,linux\n\npackage unix\n\nconst (\n\tSizeofPtr      = 0x8\n\tSizeofShort    = 0x2\n\tSizeofInt      = 0x4\n\tSizeofLong     = 0x8\n\tSizeofLongLong = 0x8\n\tPathMax        = 0x1000\n)\n\ntype (\n\t_C_short     int16\n\t_C_int       int32\n\t_C_long      int64\n\t_C_long_long int64\n)\n\ntype Timespec struct {\n\tSec  int64\n\tNsec int64\n}\n\ntype Timeval struct {\n\tSec  int64\n\tUsec int32\n\t_    [4]byte\n}\n\ntype Timex struct {\n\tModes     uint32\n\tOffset    int64\n\tFreq      int64\n\tMaxerror  int64\n\tEsterror  int64\n\tStatus    int32\n\tConstant  int64\n\tPrecision int64\n\tTolerance int64\n\tTime      Timeval\n\tTick      int64\n\tPpsfreq   int64\n\tJitter    int64\n\tShift     int32\n\tStabil    int64\n\tJitcnt    int64\n\tCalcnt    int64\n\tErrcnt    int64\n\tStbcnt    int64\n\tTai       int32\n\t_         [44]byte\n}\n\ntype Time_t int64\n\ntype Tms struct {\n\tUtime  int64\n\tStime  int64\n\tCutime int64\n\tCstime int64\n}\n\ntype Utimbuf struct {\n\tActime  int64\n\tModtime int64\n}\n\ntype Rusage struct {\n\tUtime    Timeval\n\tStime    Timeval\n\tMaxrss   int64\n\tIxrss    int64\n\tIdrss    int64\n\tIsrss    int64\n\tMinflt   int64\n\tMajflt   int64\n\tNswap    int64\n\tInblock  int64\n\tOublock  int64\n\tMsgsnd   int64\n\tMsgrcv   int64\n\tNsignals int64\n\tNvcsw    int64\n\tNivcsw   int64\n}\n\ntype Rlimit struct {\n\tCur uint64\n\tMax uint64\n}\n\ntype _Gid_t uint32\n\ntype Stat_t struct {\n\tDev     uint64\n\t_       uint16\n\tIno     uint64\n\tMode    uint32\n\tNlink   uint32\n\tUid     uint32\n\tGid     uint32\n\tRdev    uint64\n\t_       uint16\n\tSize    int64\n\tBlksize int64\n\tBlocks  int64\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\t_       uint64\n\t_       uint64\n}\n\ntype StatxTimestamp struct {\n\tSec  int64\n\tNsec uint32\n\t_    int32\n}\n\ntype Statx_t struct {\n\tMask            uint32\n\tBlksize         uint32\n\tAttributes      uint64\n\tNlink           uint32\n\tUid             uint32\n\tGid             uint32\n\tMode            uint16\n\t_               [1]uint16\n\tIno             uint64\n\tSize            uint64\n\tBlocks          uint64\n\tAttributes_mask uint64\n\tAtime           StatxTimestamp\n\tBtime           StatxTimestamp\n\tCtime           StatxTimestamp\n\tMtime           StatxTimestamp\n\tRdev_major      uint32\n\tRdev_minor      uint32\n\tDev_major       uint32\n\tDev_minor       uint32\n\t_               [14]uint64\n}\n\ntype Dirent struct {\n\tIno    uint64\n\tOff    int64\n\tReclen uint16\n\tType   uint8\n\tName   [256]int8\n\t_      [5]byte\n}\n\ntype Fsid struct {\n\tVal [2]int32\n}\n\ntype Flock_t struct {\n\tType   int16\n\tWhence int16\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\t_      int16\n\t_      [2]byte\n}\n\ntype FscryptPolicy struct {\n\tVersion                   uint8\n\tContents_encryption_mode  uint8\n\tFilenames_encryption_mode uint8\n\tFlags                     uint8\n\tMaster_key_descriptor     [8]uint8\n}\n\ntype FscryptKey struct {\n\tMode uint32\n\tRaw  [64]uint8\n\tSize uint32\n}\n\ntype KeyctlDHParams struct {\n\tPrivate int32\n\tPrime   int32\n\tBase    int32\n}\n\nconst (\n\tFADV_NORMAL     = 0x0\n\tFADV_RANDOM     = 0x1\n\tFADV_SEQUENTIAL = 0x2\n\tFADV_WILLNEED   = 0x3\n\tFADV_DONTNEED   = 0x4\n\tFADV_NOREUSE    = 0x5\n)\n\ntype RawSockaddrInet4 struct {\n\tFamily uint16\n\tPort   uint16\n\tAddr   [4]byte /* in_addr */\n\tZero   [8]uint8\n}\n\ntype RawSockaddrInet6 struct {\n\tFamily   uint16\n\tPort     uint16\n\tFlowinfo uint32\n\tAddr     [16]byte /* in6_addr */\n\tScope_id uint32\n}\n\ntype RawSockaddrUnix struct {\n\tFamily uint16\n\tPath   [108]int8\n}\n\ntype RawSockaddrLinklayer struct {\n\tFamily   uint16\n\tProtocol uint16\n\tIfindex  int32\n\tHatype   uint16\n\tPkttype  uint8\n\tHalen    uint8\n\tAddr     [8]uint8\n}\n\ntype RawSockaddrNetlink struct {\n\tFamily uint16\n\tPad    uint16\n\tPid    uint32\n\tGroups uint32\n}\n\ntype RawSockaddrHCI struct {\n\tFamily  uint16\n\tDev     uint16\n\tChannel uint16\n}\n\ntype RawSockaddrL2 struct {\n\tFamily      uint16\n\tPsm         uint16\n\tBdaddr      [6]uint8\n\tCid         uint16\n\tBdaddr_type uint8\n\t_           [1]byte\n}\n\ntype RawSockaddrRFCOMM struct {\n\tFamily  uint16\n\tBdaddr  [6]uint8\n\tChannel uint8\n\t_       [1]byte\n}\n\ntype RawSockaddrCAN struct {\n\tFamily  uint16\n\tIfindex int32\n\tAddr    [8]byte\n}\n\ntype RawSockaddrALG struct {\n\tFamily uint16\n\tType   [14]uint8\n\tFeat   uint32\n\tMask   uint32\n\tName   [64]uint8\n}\n\ntype RawSockaddrVM struct {\n\tFamily    uint16\n\tReserved1 uint16\n\tPort      uint32\n\tCid       uint32\n\tZero      [4]uint8\n}\n\ntype RawSockaddrXDP struct {\n\tFamily         uint16\n\tFlags          uint16\n\tIfindex        uint32\n\tQueue_id       uint32\n\tShared_umem_fd uint32\n}\n\ntype RawSockaddrPPPoX [0x1e]byte\n\ntype RawSockaddr struct {\n\tFamily uint16\n\tData   [14]int8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [96]int8\n}\n\ntype _Socklen uint32\n\ntype Linger struct {\n\tOnoff  int32\n\tLinger int32\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint64\n}\n\ntype IPMreq struct {\n\tMultiaddr [4]byte /* in_addr */\n\tInterface [4]byte /* in_addr */\n}\n\ntype IPMreqn struct {\n\tMultiaddr [4]byte /* in_addr */\n\tAddress   [4]byte /* in_addr */\n\tIfindex   int32\n}\n\ntype IPv6Mreq struct {\n\tMultiaddr [16]byte /* in6_addr */\n\tInterface uint32\n}\n\ntype PacketMreq struct {\n\tIfindex int32\n\tType    uint16\n\tAlen    uint16\n\tAddress [8]uint8\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tIov        *Iovec\n\tIovlen     uint64\n\tControl    *byte\n\tControllen uint64\n\tFlags      int32\n\t_          [4]byte\n}\n\ntype Cmsghdr struct {\n\tLen   uint64\n\tLevel int32\n\tType  int32\n}\n\ntype Inet4Pktinfo struct {\n\tIfindex  int32\n\tSpec_dst [4]byte /* in_addr */\n\tAddr     [4]byte /* in_addr */\n}\n\ntype Inet6Pktinfo struct {\n\tAddr    [16]byte /* in6_addr */\n\tIfindex uint32\n}\n\ntype IPv6MTUInfo struct {\n\tAddr RawSockaddrInet6\n\tMtu  uint32\n}\n\ntype ICMPv6Filter struct {\n\tData [8]uint32\n}\n\ntype Ucred struct {\n\tPid int32\n\tUid uint32\n\tGid uint32\n}\n\ntype TCPInfo struct {\n\tState          uint8\n\tCa_state       uint8\n\tRetransmits    uint8\n\tProbes         uint8\n\tBackoff        uint8\n\tOptions        uint8\n\tRto            uint32\n\tAto            uint32\n\tSnd_mss        uint32\n\tRcv_mss        uint32\n\tUnacked        uint32\n\tSacked         uint32\n\tLost           uint32\n\tRetrans        uint32\n\tFackets        uint32\n\tLast_data_sent uint32\n\tLast_ack_sent  uint32\n\tLast_data_recv uint32\n\tLast_ack_recv  uint32\n\tPmtu           uint32\n\tRcv_ssthresh   uint32\n\tRtt            uint32\n\tRttvar         uint32\n\tSnd_ssthresh   uint32\n\tSnd_cwnd       uint32\n\tAdvmss         uint32\n\tReordering     uint32\n\tRcv_rtt        uint32\n\tRcv_space      uint32\n\tTotal_retrans  uint32\n}\n\ntype CanFilter struct {\n\tId   uint32\n\tMask uint32\n}\n\nconst (\n\tSizeofSockaddrInet4     = 0x10\n\tSizeofSockaddrInet6     = 0x1c\n\tSizeofSockaddrAny       = 0x70\n\tSizeofSockaddrUnix      = 0x6e\n\tSizeofSockaddrLinklayer = 0x14\n\tSizeofSockaddrNetlink   = 0xc\n\tSizeofSockaddrHCI       = 0x6\n\tSizeofSockaddrL2        = 0xe\n\tSizeofSockaddrRFCOMM    = 0xa\n\tSizeofSockaddrCAN       = 0x10\n\tSizeofSockaddrALG       = 0x58\n\tSizeofSockaddrVM        = 0x10\n\tSizeofSockaddrXDP       = 0x10\n\tSizeofSockaddrPPPoX     = 0x1e\n\tSizeofLinger            = 0x8\n\tSizeofIovec             = 0x10\n\tSizeofIPMreq            = 0x8\n\tSizeofIPMreqn           = 0xc\n\tSizeofIPv6Mreq          = 0x14\n\tSizeofPacketMreq        = 0x10\n\tSizeofMsghdr            = 0x38\n\tSizeofCmsghdr           = 0x10\n\tSizeofInet4Pktinfo      = 0xc\n\tSizeofInet6Pktinfo      = 0x14\n\tSizeofIPv6MTUInfo       = 0x20\n\tSizeofICMPv6Filter      = 0x20\n\tSizeofUcred             = 0xc\n\tSizeofTCPInfo           = 0x68\n\tSizeofCanFilter         = 0x8\n)\n\nconst (\n\tNDA_UNSPEC              = 0x0\n\tNDA_DST                 = 0x1\n\tNDA_LLADDR              = 0x2\n\tNDA_CACHEINFO           = 0x3\n\tNDA_PROBES              = 0x4\n\tNDA_VLAN                = 0x5\n\tNDA_PORT                = 0x6\n\tNDA_VNI                 = 0x7\n\tNDA_IFINDEX             = 0x8\n\tNDA_MASTER              = 0x9\n\tNDA_LINK_NETNSID        = 0xa\n\tNDA_SRC_VNI             = 0xb\n\tNTF_USE                 = 0x1\n\tNTF_SELF                = 0x2\n\tNTF_MASTER              = 0x4\n\tNTF_PROXY               = 0x8\n\tNTF_EXT_LEARNED         = 0x10\n\tNTF_OFFLOADED           = 0x20\n\tNTF_ROUTER              = 0x80\n\tNUD_INCOMPLETE          = 0x1\n\tNUD_REACHABLE           = 0x2\n\tNUD_STALE               = 0x4\n\tNUD_DELAY               = 0x8\n\tNUD_PROBE               = 0x10\n\tNUD_FAILED              = 0x20\n\tNUD_NOARP               = 0x40\n\tNUD_PERMANENT           = 0x80\n\tNUD_NONE                = 0x0\n\tIFA_UNSPEC              = 0x0\n\tIFA_ADDRESS             = 0x1\n\tIFA_LOCAL               = 0x2\n\tIFA_LABEL               = 0x3\n\tIFA_BROADCAST           = 0x4\n\tIFA_ANYCAST             = 0x5\n\tIFA_CACHEINFO           = 0x6\n\tIFA_MULTICAST           = 0x7\n\tIFA_FLAGS               = 0x8\n\tIFA_RT_PRIORITY         = 0x9\n\tIFA_TARGET_NETNSID      = 0xa\n\tIFLA_UNSPEC             = 0x0\n\tIFLA_ADDRESS            = 0x1\n\tIFLA_BROADCAST          = 0x2\n\tIFLA_IFNAME             = 0x3\n\tIFLA_MTU                = 0x4\n\tIFLA_LINK               = 0x5\n\tIFLA_QDISC              = 0x6\n\tIFLA_STATS              = 0x7\n\tIFLA_COST               = 0x8\n\tIFLA_PRIORITY           = 0x9\n\tIFLA_MASTER             = 0xa\n\tIFLA_WIRELESS           = 0xb\n\tIFLA_PROTINFO           = 0xc\n\tIFLA_TXQLEN             = 0xd\n\tIFLA_MAP                = 0xe\n\tIFLA_WEIGHT             = 0xf\n\tIFLA_OPERSTATE          = 0x10\n\tIFLA_LINKMODE           = 0x11\n\tIFLA_LINKINFO           = 0x12\n\tIFLA_NET_NS_PID         = 0x13\n\tIFLA_IFALIAS            = 0x14\n\tIFLA_NUM_VF             = 0x15\n\tIFLA_VFINFO_LIST        = 0x16\n\tIFLA_STATS64            = 0x17\n\tIFLA_VF_PORTS           = 0x18\n\tIFLA_PORT_SELF          = 0x19\n\tIFLA_AF_SPEC            = 0x1a\n\tIFLA_GROUP              = 0x1b\n\tIFLA_NET_NS_FD          = 0x1c\n\tIFLA_EXT_MASK           = 0x1d\n\tIFLA_PROMISCUITY        = 0x1e\n\tIFLA_NUM_TX_QUEUES      = 0x1f\n\tIFLA_NUM_RX_QUEUES      = 0x20\n\tIFLA_CARRIER            = 0x21\n\tIFLA_PHYS_PORT_ID       = 0x22\n\tIFLA_CARRIER_CHANGES    = 0x23\n\tIFLA_PHYS_SWITCH_ID     = 0x24\n\tIFLA_LINK_NETNSID       = 0x25\n\tIFLA_PHYS_PORT_NAME     = 0x26\n\tIFLA_PROTO_DOWN         = 0x27\n\tIFLA_GSO_MAX_SEGS       = 0x28\n\tIFLA_GSO_MAX_SIZE       = 0x29\n\tIFLA_PAD                = 0x2a\n\tIFLA_XDP                = 0x2b\n\tIFLA_EVENT              = 0x2c\n\tIFLA_NEW_NETNSID        = 0x2d\n\tIFLA_IF_NETNSID         = 0x2e\n\tIFLA_TARGET_NETNSID     = 0x2e\n\tIFLA_CARRIER_UP_COUNT   = 0x2f\n\tIFLA_CARRIER_DOWN_COUNT = 0x30\n\tIFLA_NEW_IFINDEX        = 0x31\n\tIFLA_MIN_MTU            = 0x32\n\tIFLA_MAX_MTU            = 0x33\n\tIFLA_MAX                = 0x33\n\tIFLA_INFO_KIND          = 0x1\n\tIFLA_INFO_DATA          = 0x2\n\tIFLA_INFO_XSTATS        = 0x3\n\tIFLA_INFO_SLAVE_KIND    = 0x4\n\tIFLA_INFO_SLAVE_DATA    = 0x5\n\tRT_SCOPE_UNIVERSE       = 0x0\n\tRT_SCOPE_SITE           = 0xc8\n\tRT_SCOPE_LINK           = 0xfd\n\tRT_SCOPE_HOST           = 0xfe\n\tRT_SCOPE_NOWHERE        = 0xff\n\tRT_TABLE_UNSPEC         = 0x0\n\tRT_TABLE_COMPAT         = 0xfc\n\tRT_TABLE_DEFAULT        = 0xfd\n\tRT_TABLE_MAIN           = 0xfe\n\tRT_TABLE_LOCAL          = 0xff\n\tRT_TABLE_MAX            = 0xffffffff\n\tRTA_UNSPEC              = 0x0\n\tRTA_DST                 = 0x1\n\tRTA_SRC                 = 0x2\n\tRTA_IIF                 = 0x3\n\tRTA_OIF                 = 0x4\n\tRTA_GATEWAY             = 0x5\n\tRTA_PRIORITY            = 0x6\n\tRTA_PREFSRC             = 0x7\n\tRTA_METRICS             = 0x8\n\tRTA_MULTIPATH           = 0x9\n\tRTA_FLOW                = 0xb\n\tRTA_CACHEINFO           = 0xc\n\tRTA_TABLE               = 0xf\n\tRTA_MARK                = 0x10\n\tRTA_MFC_STATS           = 0x11\n\tRTA_VIA                 = 0x12\n\tRTA_NEWDST              = 0x13\n\tRTA_PREF                = 0x14\n\tRTA_ENCAP_TYPE          = 0x15\n\tRTA_ENCAP               = 0x16\n\tRTA_EXPIRES             = 0x17\n\tRTA_PAD                 = 0x18\n\tRTA_UID                 = 0x19\n\tRTA_TTL_PROPAGATE       = 0x1a\n\tRTA_IP_PROTO            = 0x1b\n\tRTA_SPORT               = 0x1c\n\tRTA_DPORT               = 0x1d\n\tRTN_UNSPEC              = 0x0\n\tRTN_UNICAST             = 0x1\n\tRTN_LOCAL               = 0x2\n\tRTN_BROADCAST           = 0x3\n\tRTN_ANYCAST             = 0x4\n\tRTN_MULTICAST           = 0x5\n\tRTN_BLACKHOLE           = 0x6\n\tRTN_UNREACHABLE         = 0x7\n\tRTN_PROHIBIT            = 0x8\n\tRTN_THROW               = 0x9\n\tRTN_NAT                 = 0xa\n\tRTN_XRESOLVE            = 0xb\n\tRTNLGRP_NONE            = 0x0\n\tRTNLGRP_LINK            = 0x1\n\tRTNLGRP_NOTIFY          = 0x2\n\tRTNLGRP_NEIGH           = 0x3\n\tRTNLGRP_TC              = 0x4\n\tRTNLGRP_IPV4_IFADDR     = 0x5\n\tRTNLGRP_IPV4_MROUTE     = 0x6\n\tRTNLGRP_IPV4_ROUTE      = 0x7\n\tRTNLGRP_IPV4_RULE       = 0x8\n\tRTNLGRP_IPV6_IFADDR     = 0x9\n\tRTNLGRP_IPV6_MROUTE     = 0xa\n\tRTNLGRP_IPV6_ROUTE      = 0xb\n\tRTNLGRP_IPV6_IFINFO     = 0xc\n\tRTNLGRP_IPV6_PREFIX     = 0x12\n\tRTNLGRP_IPV6_RULE       = 0x13\n\tRTNLGRP_ND_USEROPT      = 0x14\n\tSizeofNlMsghdr          = 0x10\n\tSizeofNlMsgerr          = 0x14\n\tSizeofRtGenmsg          = 0x1\n\tSizeofNlAttr            = 0x4\n\tSizeofRtAttr            = 0x4\n\tSizeofIfInfomsg         = 0x10\n\tSizeofIfAddrmsg         = 0x8\n\tSizeofRtMsg             = 0xc\n\tSizeofRtNexthop         = 0x8\n\tSizeofNdUseroptmsg      = 0x10\n\tSizeofNdMsg             = 0xc\n)\n\ntype NlMsghdr struct {\n\tLen   uint32\n\tType  uint16\n\tFlags uint16\n\tSeq   uint32\n\tPid   uint32\n}\n\ntype NlMsgerr struct {\n\tError int32\n\tMsg   NlMsghdr\n}\n\ntype RtGenmsg struct {\n\tFamily uint8\n}\n\ntype NlAttr struct {\n\tLen  uint16\n\tType uint16\n}\n\ntype RtAttr struct {\n\tLen  uint16\n\tType uint16\n}\n\ntype IfInfomsg struct {\n\tFamily uint8\n\t_      uint8\n\tType   uint16\n\tIndex  int32\n\tFlags  uint32\n\tChange uint32\n}\n\ntype IfAddrmsg struct {\n\tFamily    uint8\n\tPrefixlen uint8\n\tFlags     uint8\n\tScope     uint8\n\tIndex     uint32\n}\n\ntype RtMsg struct {\n\tFamily   uint8\n\tDst_len  uint8\n\tSrc_len  uint8\n\tTos      uint8\n\tTable    uint8\n\tProtocol uint8\n\tScope    uint8\n\tType     uint8\n\tFlags    uint32\n}\n\ntype RtNexthop struct {\n\tLen     uint16\n\tFlags   uint8\n\tHops    uint8\n\tIfindex int32\n}\n\ntype NdUseroptmsg struct {\n\tFamily    uint8\n\tPad1      uint8\n\tOpts_len  uint16\n\tIfindex   int32\n\tIcmp_type uint8\n\tIcmp_code uint8\n\tPad2      uint16\n\tPad3      uint32\n}\n\ntype NdMsg struct {\n\tFamily  uint8\n\tPad1    uint8\n\tPad2    uint16\n\tIfindex int32\n\tState   uint16\n\tFlags   uint8\n\tType    uint8\n}\n\nconst (\n\tSizeofSockFilter = 0x8\n\tSizeofSockFprog  = 0x10\n)\n\ntype SockFilter struct {\n\tCode uint16\n\tJt   uint8\n\tJf   uint8\n\tK    uint32\n}\n\ntype SockFprog struct {\n\tLen    uint16\n\tFilter *SockFilter\n}\n\ntype InotifyEvent struct {\n\tWd     int32\n\tMask   uint32\n\tCookie uint32\n\tLen    uint32\n}\n\nconst SizeofInotifyEvent = 0x10\n\ntype PtraceRegs struct {\n\tRegs   [16]uint64\n\tTstate uint64\n\tTpc    uint64\n\tTnpc   uint64\n\tY      uint32\n\tMagic  uint32\n}\n\ntype FdSet struct {\n\tBits [16]int64\n}\n\ntype Sysinfo_t struct {\n\tUptime    int64\n\tLoads     [3]uint64\n\tTotalram  uint64\n\tFreeram   uint64\n\tSharedram uint64\n\tBufferram uint64\n\tTotalswap uint64\n\tFreeswap  uint64\n\tProcs     uint16\n\tPad       uint16\n\tTotalhigh uint64\n\tFreehigh  uint64\n\tUnit      uint32\n\t_         [0]int8\n\t_         [4]byte\n}\n\ntype Utsname struct {\n\tSysname    [65]byte\n\tNodename   [65]byte\n\tRelease    [65]byte\n\tVersion    [65]byte\n\tMachine    [65]byte\n\tDomainname [65]byte\n}\n\ntype Ustat_t struct {\n\tTfree  int32\n\tTinode uint64\n\tFname  [6]int8\n\tFpack  [6]int8\n\t_      [4]byte\n}\n\ntype EpollEvent struct {\n\tEvents uint32\n\t_      int32\n\tFd     int32\n\tPad    int32\n}\n\nconst (\n\tAT_EMPTY_PATH   = 0x1000\n\tAT_FDCWD        = -0x64\n\tAT_NO_AUTOMOUNT = 0x800\n\tAT_REMOVEDIR    = 0x200\n\n\tAT_STATX_SYNC_AS_STAT = 0x0\n\tAT_STATX_FORCE_SYNC   = 0x2000\n\tAT_STATX_DONT_SYNC    = 0x4000\n\n\tAT_SYMLINK_FOLLOW   = 0x400\n\tAT_SYMLINK_NOFOLLOW = 0x100\n\n\tAT_EACCESS = 0x200\n)\n\ntype PollFd struct {\n\tFd      int32\n\tEvents  int16\n\tRevents int16\n}\n\nconst (\n\tPOLLIN    = 0x1\n\tPOLLPRI   = 0x2\n\tPOLLOUT   = 0x4\n\tPOLLRDHUP = 0x800\n\tPOLLERR   = 0x8\n\tPOLLHUP   = 0x10\n\tPOLLNVAL  = 0x20\n)\n\ntype Sigset_t struct {\n\tVal [16]uint64\n}\n\nconst _C__NSIG = 0x41\n\ntype SignalfdSiginfo struct {\n\tSigno     uint32\n\tErrno     int32\n\tCode      int32\n\tPid       uint32\n\tUid       uint32\n\tFd        int32\n\tTid       uint32\n\tBand      uint32\n\tOverrun   uint32\n\tTrapno    uint32\n\tStatus    int32\n\tInt       int32\n\tPtr       uint64\n\tUtime     uint64\n\tStime     uint64\n\tAddr      uint64\n\tAddr_lsb  uint16\n\t_         uint16\n\tSyscall   int32\n\tCall_addr uint64\n\tArch      uint32\n\t_         [28]uint8\n}\n\nconst PERF_IOC_FLAG_GROUP = 0x1\n\ntype Termios struct {\n\tIflag  uint32\n\tOflag  uint32\n\tCflag  uint32\n\tLflag  uint32\n\tLine   uint8\n\tCc     [19]uint8\n\tIspeed uint32\n\tOspeed uint32\n}\n\ntype Winsize struct {\n\tRow    uint16\n\tCol    uint16\n\tXpixel uint16\n\tYpixel uint16\n}\n\ntype Taskstats struct {\n\tVersion                   uint16\n\tAc_exitcode               uint32\n\tAc_flag                   uint8\n\tAc_nice                   uint8\n\tCpu_count                 uint64\n\tCpu_delay_total           uint64\n\tBlkio_count               uint64\n\tBlkio_delay_total         uint64\n\tSwapin_count              uint64\n\tSwapin_delay_total        uint64\n\tCpu_run_real_total        uint64\n\tCpu_run_virtual_total     uint64\n\tAc_comm                   [32]int8\n\tAc_sched                  uint8\n\tAc_pad                    [3]uint8\n\t_                         [4]byte\n\tAc_uid                    uint32\n\tAc_gid                    uint32\n\tAc_pid                    uint32\n\tAc_ppid                   uint32\n\tAc_btime                  uint32\n\tAc_etime                  uint64\n\tAc_utime                  uint64\n\tAc_stime                  uint64\n\tAc_minflt                 uint64\n\tAc_majflt                 uint64\n\tCoremem                   uint64\n\tVirtmem                   uint64\n\tHiwater_rss               uint64\n\tHiwater_vm                uint64\n\tRead_char                 uint64\n\tWrite_char                uint64\n\tRead_syscalls             uint64\n\tWrite_syscalls            uint64\n\tRead_bytes                uint64\n\tWrite_bytes               uint64\n\tCancelled_write_bytes     uint64\n\tNvcsw                     uint64\n\tNivcsw                    uint64\n\tAc_utimescaled            uint64\n\tAc_stimescaled            uint64\n\tCpu_scaled_run_real_total uint64\n\tFreepages_count           uint64\n\tFreepages_delay_total     uint64\n\tThrashing_count           uint64\n\tThrashing_delay_total     uint64\n}\n\nconst (\n\tTASKSTATS_CMD_UNSPEC                  = 0x0\n\tTASKSTATS_CMD_GET                     = 0x1\n\tTASKSTATS_CMD_NEW                     = 0x2\n\tTASKSTATS_TYPE_UNSPEC                 = 0x0\n\tTASKSTATS_TYPE_PID                    = 0x1\n\tTASKSTATS_TYPE_TGID                   = 0x2\n\tTASKSTATS_TYPE_STATS                  = 0x3\n\tTASKSTATS_TYPE_AGGR_PID               = 0x4\n\tTASKSTATS_TYPE_AGGR_TGID              = 0x5\n\tTASKSTATS_TYPE_NULL                   = 0x6\n\tTASKSTATS_CMD_ATTR_UNSPEC             = 0x0\n\tTASKSTATS_CMD_ATTR_PID                = 0x1\n\tTASKSTATS_CMD_ATTR_TGID               = 0x2\n\tTASKSTATS_CMD_ATTR_REGISTER_CPUMASK   = 0x3\n\tTASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4\n)\n\ntype CGroupStats struct {\n\tSleeping        uint64\n\tRunning         uint64\n\tStopped         uint64\n\tUninterruptible uint64\n\tIo_wait         uint64\n}\n\nconst (\n\tCGROUPSTATS_CMD_UNSPEC        = 0x3\n\tCGROUPSTATS_CMD_GET           = 0x4\n\tCGROUPSTATS_CMD_NEW           = 0x5\n\tCGROUPSTATS_TYPE_UNSPEC       = 0x0\n\tCGROUPSTATS_TYPE_CGROUP_STATS = 0x1\n\tCGROUPSTATS_CMD_ATTR_UNSPEC   = 0x0\n\tCGROUPSTATS_CMD_ATTR_FD       = 0x1\n)\n\ntype Genlmsghdr struct {\n\tCmd      uint8\n\tVersion  uint8\n\tReserved uint16\n}\n\nconst (\n\tCTRL_CMD_UNSPEC            = 0x0\n\tCTRL_CMD_NEWFAMILY         = 0x1\n\tCTRL_CMD_DELFAMILY         = 0x2\n\tCTRL_CMD_GETFAMILY         = 0x3\n\tCTRL_CMD_NEWOPS            = 0x4\n\tCTRL_CMD_DELOPS            = 0x5\n\tCTRL_CMD_GETOPS            = 0x6\n\tCTRL_CMD_NEWMCAST_GRP      = 0x7\n\tCTRL_CMD_DELMCAST_GRP      = 0x8\n\tCTRL_CMD_GETMCAST_GRP      = 0x9\n\tCTRL_ATTR_UNSPEC           = 0x0\n\tCTRL_ATTR_FAMILY_ID        = 0x1\n\tCTRL_ATTR_FAMILY_NAME      = 0x2\n\tCTRL_ATTR_VERSION          = 0x3\n\tCTRL_ATTR_HDRSIZE          = 0x4\n\tCTRL_ATTR_MAXATTR          = 0x5\n\tCTRL_ATTR_OPS              = 0x6\n\tCTRL_ATTR_MCAST_GROUPS     = 0x7\n\tCTRL_ATTR_OP_UNSPEC        = 0x0\n\tCTRL_ATTR_OP_ID            = 0x1\n\tCTRL_ATTR_OP_FLAGS         = 0x2\n\tCTRL_ATTR_MCAST_GRP_UNSPEC = 0x0\n\tCTRL_ATTR_MCAST_GRP_NAME   = 0x1\n\tCTRL_ATTR_MCAST_GRP_ID     = 0x2\n)\n\ntype cpuMask uint64\n\nconst (\n\t_CPU_SETSIZE = 0x400\n\t_NCPUBITS    = 0x40\n)\n\nconst (\n\tBDADDR_BREDR     = 0x0\n\tBDADDR_LE_PUBLIC = 0x1\n\tBDADDR_LE_RANDOM = 0x2\n)\n\ntype PerfEventAttr struct {\n\tType               uint32\n\tSize               uint32\n\tConfig             uint64\n\tSample             uint64\n\tSample_type        uint64\n\tRead_format        uint64\n\tBits               uint64\n\tWakeup             uint32\n\tBp_type            uint32\n\tExt1               uint64\n\tExt2               uint64\n\tBranch_sample_type uint64\n\tSample_regs_user   uint64\n\tSample_stack_user  uint32\n\tClockid            int32\n\tSample_regs_intr   uint64\n\tAux_watermark      uint32\n\tSample_max_stack   uint16\n\t_                  uint16\n}\n\ntype PerfEventMmapPage struct {\n\tVersion        uint32\n\tCompat_version uint32\n\tLock           uint32\n\tIndex          uint32\n\tOffset         int64\n\tTime_enabled   uint64\n\tTime_running   uint64\n\tCapabilities   uint64\n\tPmc_width      uint16\n\tTime_shift     uint16\n\tTime_mult      uint32\n\tTime_offset    uint64\n\tTime_zero      uint64\n\tSize           uint32\n\t_              [948]uint8\n\tData_head      uint64\n\tData_tail      uint64\n\tData_offset    uint64\n\tData_size      uint64\n\tAux_head       uint64\n\tAux_tail       uint64\n\tAux_offset     uint64\n\tAux_size       uint64\n}\n\nconst (\n\tPerfBitDisabled               uint64 = CBitFieldMaskBit0\n\tPerfBitInherit                       = CBitFieldMaskBit1\n\tPerfBitPinned                        = CBitFieldMaskBit2\n\tPerfBitExclusive                     = CBitFieldMaskBit3\n\tPerfBitExcludeUser                   = CBitFieldMaskBit4\n\tPerfBitExcludeKernel                 = CBitFieldMaskBit5\n\tPerfBitExcludeHv                     = CBitFieldMaskBit6\n\tPerfBitExcludeIdle                   = CBitFieldMaskBit7\n\tPerfBitMmap                          = CBitFieldMaskBit8\n\tPerfBitComm                          = CBitFieldMaskBit9\n\tPerfBitFreq                          = CBitFieldMaskBit10\n\tPerfBitInheritStat                   = CBitFieldMaskBit11\n\tPerfBitEnableOnExec                  = CBitFieldMaskBit12\n\tPerfBitTask                          = CBitFieldMaskBit13\n\tPerfBitWatermark                     = CBitFieldMaskBit14\n\tPerfBitPreciseIPBit1                 = CBitFieldMaskBit15\n\tPerfBitPreciseIPBit2                 = CBitFieldMaskBit16\n\tPerfBitMmapData                      = CBitFieldMaskBit17\n\tPerfBitSampleIDAll                   = CBitFieldMaskBit18\n\tPerfBitExcludeHost                   = CBitFieldMaskBit19\n\tPerfBitExcludeGuest                  = CBitFieldMaskBit20\n\tPerfBitExcludeCallchainKernel        = CBitFieldMaskBit21\n\tPerfBitExcludeCallchainUser          = CBitFieldMaskBit22\n\tPerfBitMmap2                         = CBitFieldMaskBit23\n\tPerfBitCommExec                      = CBitFieldMaskBit24\n\tPerfBitUseClockID                    = CBitFieldMaskBit25\n\tPerfBitContextSwitch                 = CBitFieldMaskBit26\n)\n\nconst (\n\tPERF_TYPE_HARDWARE   = 0x0\n\tPERF_TYPE_SOFTWARE   = 0x1\n\tPERF_TYPE_TRACEPOINT = 0x2\n\tPERF_TYPE_HW_CACHE   = 0x3\n\tPERF_TYPE_RAW        = 0x4\n\tPERF_TYPE_BREAKPOINT = 0x5\n\n\tPERF_COUNT_HW_CPU_CYCLES              = 0x0\n\tPERF_COUNT_HW_INSTRUCTIONS            = 0x1\n\tPERF_COUNT_HW_CACHE_REFERENCES        = 0x2\n\tPERF_COUNT_HW_CACHE_MISSES            = 0x3\n\tPERF_COUNT_HW_BRANCH_INSTRUCTIONS     = 0x4\n\tPERF_COUNT_HW_BRANCH_MISSES           = 0x5\n\tPERF_COUNT_HW_BUS_CYCLES              = 0x6\n\tPERF_COUNT_HW_STALLED_CYCLES_FRONTEND = 0x7\n\tPERF_COUNT_HW_STALLED_CYCLES_BACKEND  = 0x8\n\tPERF_COUNT_HW_REF_CPU_CYCLES          = 0x9\n\n\tPERF_COUNT_HW_CACHE_L1D  = 0x0\n\tPERF_COUNT_HW_CACHE_L1I  = 0x1\n\tPERF_COUNT_HW_CACHE_LL   = 0x2\n\tPERF_COUNT_HW_CACHE_DTLB = 0x3\n\tPERF_COUNT_HW_CACHE_ITLB = 0x4\n\tPERF_COUNT_HW_CACHE_BPU  = 0x5\n\tPERF_COUNT_HW_CACHE_NODE = 0x6\n\n\tPERF_COUNT_HW_CACHE_OP_READ     = 0x0\n\tPERF_COUNT_HW_CACHE_OP_WRITE    = 0x1\n\tPERF_COUNT_HW_CACHE_OP_PREFETCH = 0x2\n\n\tPERF_COUNT_HW_CACHE_RESULT_ACCESS = 0x0\n\tPERF_COUNT_HW_CACHE_RESULT_MISS   = 0x1\n\n\tPERF_COUNT_SW_CPU_CLOCK        = 0x0\n\tPERF_COUNT_SW_TASK_CLOCK       = 0x1\n\tPERF_COUNT_SW_PAGE_FAULTS      = 0x2\n\tPERF_COUNT_SW_CONTEXT_SWITCHES = 0x3\n\tPERF_COUNT_SW_CPU_MIGRATIONS   = 0x4\n\tPERF_COUNT_SW_PAGE_FAULTS_MIN  = 0x5\n\tPERF_COUNT_SW_PAGE_FAULTS_MAJ  = 0x6\n\tPERF_COUNT_SW_ALIGNMENT_FAULTS = 0x7\n\tPERF_COUNT_SW_EMULATION_FAULTS = 0x8\n\tPERF_COUNT_SW_DUMMY            = 0x9\n\tPERF_COUNT_SW_BPF_OUTPUT       = 0xa\n\n\tPERF_SAMPLE_IP           = 0x1\n\tPERF_SAMPLE_TID          = 0x2\n\tPERF_SAMPLE_TIME         = 0x4\n\tPERF_SAMPLE_ADDR         = 0x8\n\tPERF_SAMPLE_READ         = 0x10\n\tPERF_SAMPLE_CALLCHAIN    = 0x20\n\tPERF_SAMPLE_ID           = 0x40\n\tPERF_SAMPLE_CPU          = 0x80\n\tPERF_SAMPLE_PERIOD       = 0x100\n\tPERF_SAMPLE_STREAM_ID    = 0x200\n\tPERF_SAMPLE_RAW          = 0x400\n\tPERF_SAMPLE_BRANCH_STACK = 0x800\n\n\tPERF_SAMPLE_BRANCH_USER       = 0x1\n\tPERF_SAMPLE_BRANCH_KERNEL     = 0x2\n\tPERF_SAMPLE_BRANCH_HV         = 0x4\n\tPERF_SAMPLE_BRANCH_ANY        = 0x8\n\tPERF_SAMPLE_BRANCH_ANY_CALL   = 0x10\n\tPERF_SAMPLE_BRANCH_ANY_RETURN = 0x20\n\tPERF_SAMPLE_BRANCH_IND_CALL   = 0x40\n\tPERF_SAMPLE_BRANCH_ABORT_TX   = 0x80\n\tPERF_SAMPLE_BRANCH_IN_TX      = 0x100\n\tPERF_SAMPLE_BRANCH_NO_TX      = 0x200\n\tPERF_SAMPLE_BRANCH_COND       = 0x400\n\tPERF_SAMPLE_BRANCH_CALL_STACK = 0x800\n\tPERF_SAMPLE_BRANCH_IND_JUMP   = 0x1000\n\tPERF_SAMPLE_BRANCH_CALL       = 0x2000\n\tPERF_SAMPLE_BRANCH_NO_FLAGS   = 0x4000\n\tPERF_SAMPLE_BRANCH_NO_CYCLES  = 0x8000\n\tPERF_SAMPLE_BRANCH_TYPE_SAVE  = 0x10000\n\n\tPERF_FORMAT_TOTAL_TIME_ENABLED = 0x1\n\tPERF_FORMAT_TOTAL_TIME_RUNNING = 0x2\n\tPERF_FORMAT_ID                 = 0x4\n\tPERF_FORMAT_GROUP              = 0x8\n\n\tPERF_RECORD_MMAP            = 0x1\n\tPERF_RECORD_LOST            = 0x2\n\tPERF_RECORD_COMM            = 0x3\n\tPERF_RECORD_EXIT            = 0x4\n\tPERF_RECORD_THROTTLE        = 0x5\n\tPERF_RECORD_UNTHROTTLE      = 0x6\n\tPERF_RECORD_FORK            = 0x7\n\tPERF_RECORD_READ            = 0x8\n\tPERF_RECORD_SAMPLE          = 0x9\n\tPERF_RECORD_MMAP2           = 0xa\n\tPERF_RECORD_AUX             = 0xb\n\tPERF_RECORD_ITRACE_START    = 0xc\n\tPERF_RECORD_LOST_SAMPLES    = 0xd\n\tPERF_RECORD_SWITCH          = 0xe\n\tPERF_RECORD_SWITCH_CPU_WIDE = 0xf\n\tPERF_RECORD_NAMESPACES      = 0x10\n\n\tPERF_CONTEXT_HV     = -0x20\n\tPERF_CONTEXT_KERNEL = -0x80\n\tPERF_CONTEXT_USER   = -0x200\n\n\tPERF_CONTEXT_GUEST        = -0x800\n\tPERF_CONTEXT_GUEST_KERNEL = -0x880\n\tPERF_CONTEXT_GUEST_USER   = -0xa00\n\n\tPERF_FLAG_FD_NO_GROUP = 0x1\n\tPERF_FLAG_FD_OUTPUT   = 0x2\n\tPERF_FLAG_PID_CGROUP  = 0x4\n\tPERF_FLAG_FD_CLOEXEC  = 0x8\n)\n\nconst (\n\tCBitFieldMaskBit0  = 0x8000000000000000\n\tCBitFieldMaskBit1  = 0x4000000000000000\n\tCBitFieldMaskBit2  = 0x2000000000000000\n\tCBitFieldMaskBit3  = 0x1000000000000000\n\tCBitFieldMaskBit4  = 0x800000000000000\n\tCBitFieldMaskBit5  = 0x400000000000000\n\tCBitFieldMaskBit6  = 0x200000000000000\n\tCBitFieldMaskBit7  = 0x100000000000000\n\tCBitFieldMaskBit8  = 0x80000000000000\n\tCBitFieldMaskBit9  = 0x40000000000000\n\tCBitFieldMaskBit10 = 0x20000000000000\n\tCBitFieldMaskBit11 = 0x10000000000000\n\tCBitFieldMaskBit12 = 0x8000000000000\n\tCBitFieldMaskBit13 = 0x4000000000000\n\tCBitFieldMaskBit14 = 0x2000000000000\n\tCBitFieldMaskBit15 = 0x1000000000000\n\tCBitFieldMaskBit16 = 0x800000000000\n\tCBitFieldMaskBit17 = 0x400000000000\n\tCBitFieldMaskBit18 = 0x200000000000\n\tCBitFieldMaskBit19 = 0x100000000000\n\tCBitFieldMaskBit20 = 0x80000000000\n\tCBitFieldMaskBit21 = 0x40000000000\n\tCBitFieldMaskBit22 = 0x20000000000\n\tCBitFieldMaskBit23 = 0x10000000000\n\tCBitFieldMaskBit24 = 0x8000000000\n\tCBitFieldMaskBit25 = 0x4000000000\n\tCBitFieldMaskBit26 = 0x2000000000\n\tCBitFieldMaskBit27 = 0x1000000000\n\tCBitFieldMaskBit28 = 0x800000000\n\tCBitFieldMaskBit29 = 0x400000000\n\tCBitFieldMaskBit30 = 0x200000000\n\tCBitFieldMaskBit31 = 0x100000000\n\tCBitFieldMaskBit32 = 0x80000000\n\tCBitFieldMaskBit33 = 0x40000000\n\tCBitFieldMaskBit34 = 0x20000000\n\tCBitFieldMaskBit35 = 0x10000000\n\tCBitFieldMaskBit36 = 0x8000000\n\tCBitFieldMaskBit37 = 0x4000000\n\tCBitFieldMaskBit38 = 0x2000000\n\tCBitFieldMaskBit39 = 0x1000000\n\tCBitFieldMaskBit40 = 0x800000\n\tCBitFieldMaskBit41 = 0x400000\n\tCBitFieldMaskBit42 = 0x200000\n\tCBitFieldMaskBit43 = 0x100000\n\tCBitFieldMaskBit44 = 0x80000\n\tCBitFieldMaskBit45 = 0x40000\n\tCBitFieldMaskBit46 = 0x20000\n\tCBitFieldMaskBit47 = 0x10000\n\tCBitFieldMaskBit48 = 0x8000\n\tCBitFieldMaskBit49 = 0x4000\n\tCBitFieldMaskBit50 = 0x2000\n\tCBitFieldMaskBit51 = 0x1000\n\tCBitFieldMaskBit52 = 0x800\n\tCBitFieldMaskBit53 = 0x400\n\tCBitFieldMaskBit54 = 0x200\n\tCBitFieldMaskBit55 = 0x100\n\tCBitFieldMaskBit56 = 0x80\n\tCBitFieldMaskBit57 = 0x40\n\tCBitFieldMaskBit58 = 0x20\n\tCBitFieldMaskBit59 = 0x10\n\tCBitFieldMaskBit60 = 0x8\n\tCBitFieldMaskBit61 = 0x4\n\tCBitFieldMaskBit62 = 0x2\n\tCBitFieldMaskBit63 = 0x1\n)\n\ntype SockaddrStorage struct {\n\tFamily uint16\n\t_      [118]int8\n\t_      uint64\n}\n\ntype TCPMD5Sig struct {\n\tAddr      SockaddrStorage\n\tFlags     uint8\n\tPrefixlen uint8\n\tKeylen    uint16\n\t_         uint32\n\tKey       [80]uint8\n}\n\ntype HDDriveCmdHdr struct {\n\tCommand uint8\n\tNumber  uint8\n\tFeature uint8\n\tCount   uint8\n}\n\ntype HDGeometry struct {\n\tHeads     uint8\n\tSectors   uint8\n\tCylinders uint16\n\tStart     uint64\n}\n\ntype HDDriveID struct {\n\tConfig         uint16\n\tCyls           uint16\n\tReserved2      uint16\n\tHeads          uint16\n\tTrack_bytes    uint16\n\tSector_bytes   uint16\n\tSectors        uint16\n\tVendor0        uint16\n\tVendor1        uint16\n\tVendor2        uint16\n\tSerial_no      [20]uint8\n\tBuf_type       uint16\n\tBuf_size       uint16\n\tEcc_bytes      uint16\n\tFw_rev         [8]uint8\n\tModel          [40]uint8\n\tMax_multsect   uint8\n\tVendor3        uint8\n\tDword_io       uint16\n\tVendor4        uint8\n\tCapability     uint8\n\tReserved50     uint16\n\tVendor5        uint8\n\tTPIO           uint8\n\tVendor6        uint8\n\tTDMA           uint8\n\tField_valid    uint16\n\tCur_cyls       uint16\n\tCur_heads      uint16\n\tCur_sectors    uint16\n\tCur_capacity0  uint16\n\tCur_capacity1  uint16\n\tMultsect       uint8\n\tMultsect_valid uint8\n\tLba_capacity   uint32\n\tDma_1word      uint16\n\tDma_mword      uint16\n\tEide_pio_modes uint16\n\tEide_dma_min   uint16\n\tEide_dma_time  uint16\n\tEide_pio       uint16\n\tEide_pio_iordy uint16\n\tWords69_70     [2]uint16\n\tWords71_74     [4]uint16\n\tQueue_depth    uint16\n\tWords76_79     [4]uint16\n\tMajor_rev_num  uint16\n\tMinor_rev_num  uint16\n\tCommand_set_1  uint16\n\tCommand_set_2  uint16\n\tCfsse          uint16\n\tCfs_enable_1   uint16\n\tCfs_enable_2   uint16\n\tCsf_default    uint16\n\tDma_ultra      uint16\n\tTrseuc         uint16\n\tTrsEuc         uint16\n\tCurAPMvalues   uint16\n\tMprc           uint16\n\tHw_config      uint16\n\tAcoustic       uint16\n\tMsrqs          uint16\n\tSxfert         uint16\n\tSal            uint16\n\tSpg            uint32\n\tLba_capacity_2 uint64\n\tWords104_125   [22]uint16\n\tLast_lun       uint16\n\tWord127        uint16\n\tDlf            uint16\n\tCsfo           uint16\n\tWords130_155   [26]uint16\n\tWord156        uint16\n\tWords157_159   [3]uint16\n\tCfa_power      uint16\n\tWords161_175   [15]uint16\n\tWords176_205   [30]uint16\n\tWords206_254   [49]uint16\n\tIntegrity_word uint16\n}\n\ntype Statfs_t struct {\n\tType    int64\n\tBsize   int64\n\tBlocks  uint64\n\tBfree   uint64\n\tBavail  uint64\n\tFiles   uint64\n\tFfree   uint64\n\tFsid    Fsid\n\tNamelen int64\n\tFrsize  int64\n\tFlags   int64\n\tSpare   [4]int64\n}\n\nconst (\n\tST_MANDLOCK    = 0x40\n\tST_NOATIME     = 0x400\n\tST_NODEV       = 0x4\n\tST_NODIRATIME  = 0x800\n\tST_NOEXEC      = 0x8\n\tST_NOSUID      = 0x2\n\tST_RDONLY      = 0x1\n\tST_RELATIME    = 0x1000\n\tST_SYNCHRONOUS = 0x10\n)\n\ntype TpacketHdr struct {\n\tStatus  uint64\n\tLen     uint32\n\tSnaplen uint32\n\tMac     uint16\n\tNet     uint16\n\tSec     uint32\n\tUsec    uint32\n\t_       [4]byte\n}\n\ntype Tpacket2Hdr struct {\n\tStatus    uint32\n\tLen       uint32\n\tSnaplen   uint32\n\tMac       uint16\n\tNet       uint16\n\tSec       uint32\n\tNsec      uint32\n\tVlan_tci  uint16\n\tVlan_tpid uint16\n\t_         [4]uint8\n}\n\ntype Tpacket3Hdr struct {\n\tNext_offset uint32\n\tSec         uint32\n\tNsec        uint32\n\tSnaplen     uint32\n\tLen         uint32\n\tStatus      uint32\n\tMac         uint16\n\tNet         uint16\n\tHv1         TpacketHdrVariant1\n\t_           [8]uint8\n}\n\ntype TpacketHdrVariant1 struct {\n\tRxhash    uint32\n\tVlan_tci  uint32\n\tVlan_tpid uint16\n\t_         uint16\n}\n\ntype TpacketBlockDesc struct {\n\tVersion uint32\n\tTo_priv uint32\n\tHdr     [40]byte\n}\n\ntype TpacketBDTS struct {\n\tSec  uint32\n\tUsec uint32\n}\n\ntype TpacketHdrV1 struct {\n\tBlock_status        uint32\n\tNum_pkts            uint32\n\tOffset_to_first_pkt uint32\n\tBlk_len             uint32\n\tSeq_num             uint64\n\tTs_first_pkt        TpacketBDTS\n\tTs_last_pkt         TpacketBDTS\n}\n\ntype TpacketReq struct {\n\tBlock_size uint32\n\tBlock_nr   uint32\n\tFrame_size uint32\n\tFrame_nr   uint32\n}\n\ntype TpacketReq3 struct {\n\tBlock_size       uint32\n\tBlock_nr         uint32\n\tFrame_size       uint32\n\tFrame_nr         uint32\n\tRetire_blk_tov   uint32\n\tSizeof_priv      uint32\n\tFeature_req_word uint32\n}\n\ntype TpacketStats struct {\n\tPackets uint32\n\tDrops   uint32\n}\n\ntype TpacketStatsV3 struct {\n\tPackets      uint32\n\tDrops        uint32\n\tFreeze_q_cnt uint32\n}\n\ntype TpacketAuxdata struct {\n\tStatus    uint32\n\tLen       uint32\n\tSnaplen   uint32\n\tMac       uint16\n\tNet       uint16\n\tVlan_tci  uint16\n\tVlan_tpid uint16\n}\n\nconst (\n\tTPACKET_V1 = 0x0\n\tTPACKET_V2 = 0x1\n\tTPACKET_V3 = 0x2\n)\n\nconst (\n\tSizeofTpacketHdr  = 0x20\n\tSizeofTpacket2Hdr = 0x20\n\tSizeofTpacket3Hdr = 0x30\n\n\tSizeofTpacketStats   = 0x8\n\tSizeofTpacketStatsV3 = 0xc\n)\n\nconst (\n\tNF_INET_PRE_ROUTING  = 0x0\n\tNF_INET_LOCAL_IN     = 0x1\n\tNF_INET_FORWARD      = 0x2\n\tNF_INET_LOCAL_OUT    = 0x3\n\tNF_INET_POST_ROUTING = 0x4\n\tNF_INET_NUMHOOKS     = 0x5\n)\n\nconst (\n\tNF_NETDEV_INGRESS  = 0x0\n\tNF_NETDEV_NUMHOOKS = 0x1\n)\n\nconst (\n\tNFPROTO_UNSPEC   = 0x0\n\tNFPROTO_INET     = 0x1\n\tNFPROTO_IPV4     = 0x2\n\tNFPROTO_ARP      = 0x3\n\tNFPROTO_NETDEV   = 0x5\n\tNFPROTO_BRIDGE   = 0x7\n\tNFPROTO_IPV6     = 0xa\n\tNFPROTO_DECNET   = 0xc\n\tNFPROTO_NUMPROTO = 0xd\n)\n\ntype Nfgenmsg struct {\n\tNfgen_family uint8\n\tVersion      uint8\n\tRes_id       uint16\n}\n\nconst (\n\tNFNL_BATCH_UNSPEC = 0x0\n\tNFNL_BATCH_GENID  = 0x1\n)\n\nconst (\n\tNFT_REG_VERDICT                   = 0x0\n\tNFT_REG_1                         = 0x1\n\tNFT_REG_2                         = 0x2\n\tNFT_REG_3                         = 0x3\n\tNFT_REG_4                         = 0x4\n\tNFT_REG32_00                      = 0x8\n\tNFT_REG32_01                      = 0x9\n\tNFT_REG32_02                      = 0xa\n\tNFT_REG32_03                      = 0xb\n\tNFT_REG32_04                      = 0xc\n\tNFT_REG32_05                      = 0xd\n\tNFT_REG32_06                      = 0xe\n\tNFT_REG32_07                      = 0xf\n\tNFT_REG32_08                      = 0x10\n\tNFT_REG32_09                      = 0x11\n\tNFT_REG32_10                      = 0x12\n\tNFT_REG32_11                      = 0x13\n\tNFT_REG32_12                      = 0x14\n\tNFT_REG32_13                      = 0x15\n\tNFT_REG32_14                      = 0x16\n\tNFT_REG32_15                      = 0x17\n\tNFT_CONTINUE                      = -0x1\n\tNFT_BREAK                         = -0x2\n\tNFT_JUMP                          = -0x3\n\tNFT_GOTO                          = -0x4\n\tNFT_RETURN                        = -0x5\n\tNFT_MSG_NEWTABLE                  = 0x0\n\tNFT_MSG_GETTABLE                  = 0x1\n\tNFT_MSG_DELTABLE                  = 0x2\n\tNFT_MSG_NEWCHAIN                  = 0x3\n\tNFT_MSG_GETCHAIN                  = 0x4\n\tNFT_MSG_DELCHAIN                  = 0x5\n\tNFT_MSG_NEWRULE                   = 0x6\n\tNFT_MSG_GETRULE                   = 0x7\n\tNFT_MSG_DELRULE                   = 0x8\n\tNFT_MSG_NEWSET                    = 0x9\n\tNFT_MSG_GETSET                    = 0xa\n\tNFT_MSG_DELSET                    = 0xb\n\tNFT_MSG_NEWSETELEM                = 0xc\n\tNFT_MSG_GETSETELEM                = 0xd\n\tNFT_MSG_DELSETELEM                = 0xe\n\tNFT_MSG_NEWGEN                    = 0xf\n\tNFT_MSG_GETGEN                    = 0x10\n\tNFT_MSG_TRACE                     = 0x11\n\tNFT_MSG_NEWOBJ                    = 0x12\n\tNFT_MSG_GETOBJ                    = 0x13\n\tNFT_MSG_DELOBJ                    = 0x14\n\tNFT_MSG_GETOBJ_RESET              = 0x15\n\tNFT_MSG_MAX                       = 0x19\n\tNFTA_LIST_UNPEC                   = 0x0\n\tNFTA_LIST_ELEM                    = 0x1\n\tNFTA_HOOK_UNSPEC                  = 0x0\n\tNFTA_HOOK_HOOKNUM                 = 0x1\n\tNFTA_HOOK_PRIORITY                = 0x2\n\tNFTA_HOOK_DEV                     = 0x3\n\tNFT_TABLE_F_DORMANT               = 0x1\n\tNFTA_TABLE_UNSPEC                 = 0x0\n\tNFTA_TABLE_NAME                   = 0x1\n\tNFTA_TABLE_FLAGS                  = 0x2\n\tNFTA_TABLE_USE                    = 0x3\n\tNFTA_CHAIN_UNSPEC                 = 0x0\n\tNFTA_CHAIN_TABLE                  = 0x1\n\tNFTA_CHAIN_HANDLE                 = 0x2\n\tNFTA_CHAIN_NAME                   = 0x3\n\tNFTA_CHAIN_HOOK                   = 0x4\n\tNFTA_CHAIN_POLICY                 = 0x5\n\tNFTA_CHAIN_USE                    = 0x6\n\tNFTA_CHAIN_TYPE                   = 0x7\n\tNFTA_CHAIN_COUNTERS               = 0x8\n\tNFTA_CHAIN_PAD                    = 0x9\n\tNFTA_RULE_UNSPEC                  = 0x0\n\tNFTA_RULE_TABLE                   = 0x1\n\tNFTA_RULE_CHAIN                   = 0x2\n\tNFTA_RULE_HANDLE                  = 0x3\n\tNFTA_RULE_EXPRESSIONS             = 0x4\n\tNFTA_RULE_COMPAT                  = 0x5\n\tNFTA_RULE_POSITION                = 0x6\n\tNFTA_RULE_USERDATA                = 0x7\n\tNFTA_RULE_PAD                     = 0x8\n\tNFTA_RULE_ID                      = 0x9\n\tNFT_RULE_COMPAT_F_INV             = 0x2\n\tNFT_RULE_COMPAT_F_MASK            = 0x2\n\tNFTA_RULE_COMPAT_UNSPEC           = 0x0\n\tNFTA_RULE_COMPAT_PROTO            = 0x1\n\tNFTA_RULE_COMPAT_FLAGS            = 0x2\n\tNFT_SET_ANONYMOUS                 = 0x1\n\tNFT_SET_CONSTANT                  = 0x2\n\tNFT_SET_INTERVAL                  = 0x4\n\tNFT_SET_MAP                       = 0x8\n\tNFT_SET_TIMEOUT                   = 0x10\n\tNFT_SET_EVAL                      = 0x20\n\tNFT_SET_OBJECT                    = 0x40\n\tNFT_SET_POL_PERFORMANCE           = 0x0\n\tNFT_SET_POL_MEMORY                = 0x1\n\tNFTA_SET_DESC_UNSPEC              = 0x0\n\tNFTA_SET_DESC_SIZE                = 0x1\n\tNFTA_SET_UNSPEC                   = 0x0\n\tNFTA_SET_TABLE                    = 0x1\n\tNFTA_SET_NAME                     = 0x2\n\tNFTA_SET_FLAGS                    = 0x3\n\tNFTA_SET_KEY_TYPE                 = 0x4\n\tNFTA_SET_KEY_LEN                  = 0x5\n\tNFTA_SET_DATA_TYPE                = 0x6\n\tNFTA_SET_DATA_LEN                 = 0x7\n\tNFTA_SET_POLICY                   = 0x8\n\tNFTA_SET_DESC                     = 0x9\n\tNFTA_SET_ID                       = 0xa\n\tNFTA_SET_TIMEOUT                  = 0xb\n\tNFTA_SET_GC_INTERVAL              = 0xc\n\tNFTA_SET_USERDATA                 = 0xd\n\tNFTA_SET_PAD                      = 0xe\n\tNFTA_SET_OBJ_TYPE                 = 0xf\n\tNFT_SET_ELEM_INTERVAL_END         = 0x1\n\tNFTA_SET_ELEM_UNSPEC              = 0x0\n\tNFTA_SET_ELEM_KEY                 = 0x1\n\tNFTA_SET_ELEM_DATA                = 0x2\n\tNFTA_SET_ELEM_FLAGS               = 0x3\n\tNFTA_SET_ELEM_TIMEOUT             = 0x4\n\tNFTA_SET_ELEM_EXPIRATION          = 0x5\n\tNFTA_SET_ELEM_USERDATA            = 0x6\n\tNFTA_SET_ELEM_EXPR                = 0x7\n\tNFTA_SET_ELEM_PAD                 = 0x8\n\tNFTA_SET_ELEM_OBJREF              = 0x9\n\tNFTA_SET_ELEM_LIST_UNSPEC         = 0x0\n\tNFTA_SET_ELEM_LIST_TABLE          = 0x1\n\tNFTA_SET_ELEM_LIST_SET            = 0x2\n\tNFTA_SET_ELEM_LIST_ELEMENTS       = 0x3\n\tNFTA_SET_ELEM_LIST_SET_ID         = 0x4\n\tNFT_DATA_VALUE                    = 0x0\n\tNFT_DATA_VERDICT                  = 0xffffff00\n\tNFTA_DATA_UNSPEC                  = 0x0\n\tNFTA_DATA_VALUE                   = 0x1\n\tNFTA_DATA_VERDICT                 = 0x2\n\tNFTA_VERDICT_UNSPEC               = 0x0\n\tNFTA_VERDICT_CODE                 = 0x1\n\tNFTA_VERDICT_CHAIN                = 0x2\n\tNFTA_EXPR_UNSPEC                  = 0x0\n\tNFTA_EXPR_NAME                    = 0x1\n\tNFTA_EXPR_DATA                    = 0x2\n\tNFTA_IMMEDIATE_UNSPEC             = 0x0\n\tNFTA_IMMEDIATE_DREG               = 0x1\n\tNFTA_IMMEDIATE_DATA               = 0x2\n\tNFTA_BITWISE_UNSPEC               = 0x0\n\tNFTA_BITWISE_SREG                 = 0x1\n\tNFTA_BITWISE_DREG                 = 0x2\n\tNFTA_BITWISE_LEN                  = 0x3\n\tNFTA_BITWISE_MASK                 = 0x4\n\tNFTA_BITWISE_XOR                  = 0x5\n\tNFT_BYTEORDER_NTOH                = 0x0\n\tNFT_BYTEORDER_HTON                = 0x1\n\tNFTA_BYTEORDER_UNSPEC             = 0x0\n\tNFTA_BYTEORDER_SREG               = 0x1\n\tNFTA_BYTEORDER_DREG               = 0x2\n\tNFTA_BYTEORDER_OP                 = 0x3\n\tNFTA_BYTEORDER_LEN                = 0x4\n\tNFTA_BYTEORDER_SIZE               = 0x5\n\tNFT_CMP_EQ                        = 0x0\n\tNFT_CMP_NEQ                       = 0x1\n\tNFT_CMP_LT                        = 0x2\n\tNFT_CMP_LTE                       = 0x3\n\tNFT_CMP_GT                        = 0x4\n\tNFT_CMP_GTE                       = 0x5\n\tNFTA_CMP_UNSPEC                   = 0x0\n\tNFTA_CMP_SREG                     = 0x1\n\tNFTA_CMP_OP                       = 0x2\n\tNFTA_CMP_DATA                     = 0x3\n\tNFT_RANGE_EQ                      = 0x0\n\tNFT_RANGE_NEQ                     = 0x1\n\tNFTA_RANGE_UNSPEC                 = 0x0\n\tNFTA_RANGE_SREG                   = 0x1\n\tNFTA_RANGE_OP                     = 0x2\n\tNFTA_RANGE_FROM_DATA              = 0x3\n\tNFTA_RANGE_TO_DATA                = 0x4\n\tNFT_LOOKUP_F_INV                  = 0x1\n\tNFTA_LOOKUP_UNSPEC                = 0x0\n\tNFTA_LOOKUP_SET                   = 0x1\n\tNFTA_LOOKUP_SREG                  = 0x2\n\tNFTA_LOOKUP_DREG                  = 0x3\n\tNFTA_LOOKUP_SET_ID                = 0x4\n\tNFTA_LOOKUP_FLAGS                 = 0x5\n\tNFT_DYNSET_OP_ADD                 = 0x0\n\tNFT_DYNSET_OP_UPDATE              = 0x1\n\tNFT_DYNSET_F_INV                  = 0x1\n\tNFTA_DYNSET_UNSPEC                = 0x0\n\tNFTA_DYNSET_SET_NAME              = 0x1\n\tNFTA_DYNSET_SET_ID                = 0x2\n\tNFTA_DYNSET_OP                    = 0x3\n\tNFTA_DYNSET_SREG_KEY              = 0x4\n\tNFTA_DYNSET_SREG_DATA             = 0x5\n\tNFTA_DYNSET_TIMEOUT               = 0x6\n\tNFTA_DYNSET_EXPR                  = 0x7\n\tNFTA_DYNSET_PAD                   = 0x8\n\tNFTA_DYNSET_FLAGS                 = 0x9\n\tNFT_PAYLOAD_LL_HEADER             = 0x0\n\tNFT_PAYLOAD_NETWORK_HEADER        = 0x1\n\tNFT_PAYLOAD_TRANSPORT_HEADER      = 0x2\n\tNFT_PAYLOAD_CSUM_NONE             = 0x0\n\tNFT_PAYLOAD_CSUM_INET             = 0x1\n\tNFT_PAYLOAD_L4CSUM_PSEUDOHDR      = 0x1\n\tNFTA_PAYLOAD_UNSPEC               = 0x0\n\tNFTA_PAYLOAD_DREG                 = 0x1\n\tNFTA_PAYLOAD_BASE                 = 0x2\n\tNFTA_PAYLOAD_OFFSET               = 0x3\n\tNFTA_PAYLOAD_LEN                  = 0x4\n\tNFTA_PAYLOAD_SREG                 = 0x5\n\tNFTA_PAYLOAD_CSUM_TYPE            = 0x6\n\tNFTA_PAYLOAD_CSUM_OFFSET          = 0x7\n\tNFTA_PAYLOAD_CSUM_FLAGS           = 0x8\n\tNFT_EXTHDR_F_PRESENT              = 0x1\n\tNFT_EXTHDR_OP_IPV6                = 0x0\n\tNFT_EXTHDR_OP_TCPOPT              = 0x1\n\tNFTA_EXTHDR_UNSPEC                = 0x0\n\tNFTA_EXTHDR_DREG                  = 0x1\n\tNFTA_EXTHDR_TYPE                  = 0x2\n\tNFTA_EXTHDR_OFFSET                = 0x3\n\tNFTA_EXTHDR_LEN                   = 0x4\n\tNFTA_EXTHDR_FLAGS                 = 0x5\n\tNFTA_EXTHDR_OP                    = 0x6\n\tNFTA_EXTHDR_SREG                  = 0x7\n\tNFT_META_LEN                      = 0x0\n\tNFT_META_PROTOCOL                 = 0x1\n\tNFT_META_PRIORITY                 = 0x2\n\tNFT_META_MARK                     = 0x3\n\tNFT_META_IIF                      = 0x4\n\tNFT_META_OIF                      = 0x5\n\tNFT_META_IIFNAME                  = 0x6\n\tNFT_META_OIFNAME                  = 0x7\n\tNFT_META_IIFTYPE                  = 0x8\n\tNFT_META_OIFTYPE                  = 0x9\n\tNFT_META_SKUID                    = 0xa\n\tNFT_META_SKGID                    = 0xb\n\tNFT_META_NFTRACE                  = 0xc\n\tNFT_META_RTCLASSID                = 0xd\n\tNFT_META_SECMARK                  = 0xe\n\tNFT_META_NFPROTO                  = 0xf\n\tNFT_META_L4PROTO                  = 0x10\n\tNFT_META_BRI_IIFNAME              = 0x11\n\tNFT_META_BRI_OIFNAME              = 0x12\n\tNFT_META_PKTTYPE                  = 0x13\n\tNFT_META_CPU                      = 0x14\n\tNFT_META_IIFGROUP                 = 0x15\n\tNFT_META_OIFGROUP                 = 0x16\n\tNFT_META_CGROUP                   = 0x17\n\tNFT_META_PRANDOM                  = 0x18\n\tNFT_RT_CLASSID                    = 0x0\n\tNFT_RT_NEXTHOP4                   = 0x1\n\tNFT_RT_NEXTHOP6                   = 0x2\n\tNFT_RT_TCPMSS                     = 0x3\n\tNFT_HASH_JENKINS                  = 0x0\n\tNFT_HASH_SYM                      = 0x1\n\tNFTA_HASH_UNSPEC                  = 0x0\n\tNFTA_HASH_SREG                    = 0x1\n\tNFTA_HASH_DREG                    = 0x2\n\tNFTA_HASH_LEN                     = 0x3\n\tNFTA_HASH_MODULUS                 = 0x4\n\tNFTA_HASH_SEED                    = 0x5\n\tNFTA_HASH_OFFSET                  = 0x6\n\tNFTA_HASH_TYPE                    = 0x7\n\tNFTA_META_UNSPEC                  = 0x0\n\tNFTA_META_DREG                    = 0x1\n\tNFTA_META_KEY                     = 0x2\n\tNFTA_META_SREG                    = 0x3\n\tNFTA_RT_UNSPEC                    = 0x0\n\tNFTA_RT_DREG                      = 0x1\n\tNFTA_RT_KEY                       = 0x2\n\tNFT_CT_STATE                      = 0x0\n\tNFT_CT_DIRECTION                  = 0x1\n\tNFT_CT_STATUS                     = 0x2\n\tNFT_CT_MARK                       = 0x3\n\tNFT_CT_SECMARK                    = 0x4\n\tNFT_CT_EXPIRATION                 = 0x5\n\tNFT_CT_HELPER                     = 0x6\n\tNFT_CT_L3PROTOCOL                 = 0x7\n\tNFT_CT_SRC                        = 0x8\n\tNFT_CT_DST                        = 0x9\n\tNFT_CT_PROTOCOL                   = 0xa\n\tNFT_CT_PROTO_SRC                  = 0xb\n\tNFT_CT_PROTO_DST                  = 0xc\n\tNFT_CT_LABELS                     = 0xd\n\tNFT_CT_PKTS                       = 0xe\n\tNFT_CT_BYTES                      = 0xf\n\tNFT_CT_AVGPKT                     = 0x10\n\tNFT_CT_ZONE                       = 0x11\n\tNFT_CT_EVENTMASK                  = 0x12\n\tNFTA_CT_UNSPEC                    = 0x0\n\tNFTA_CT_DREG                      = 0x1\n\tNFTA_CT_KEY                       = 0x2\n\tNFTA_CT_DIRECTION                 = 0x3\n\tNFTA_CT_SREG                      = 0x4\n\tNFT_LIMIT_PKTS                    = 0x0\n\tNFT_LIMIT_PKT_BYTES               = 0x1\n\tNFT_LIMIT_F_INV                   = 0x1\n\tNFTA_LIMIT_UNSPEC                 = 0x0\n\tNFTA_LIMIT_RATE                   = 0x1\n\tNFTA_LIMIT_UNIT                   = 0x2\n\tNFTA_LIMIT_BURST                  = 0x3\n\tNFTA_LIMIT_TYPE                   = 0x4\n\tNFTA_LIMIT_FLAGS                  = 0x5\n\tNFTA_LIMIT_PAD                    = 0x6\n\tNFTA_COUNTER_UNSPEC               = 0x0\n\tNFTA_COUNTER_BYTES                = 0x1\n\tNFTA_COUNTER_PACKETS              = 0x2\n\tNFTA_COUNTER_PAD                  = 0x3\n\tNFTA_LOG_UNSPEC                   = 0x0\n\tNFTA_LOG_GROUP                    = 0x1\n\tNFTA_LOG_PREFIX                   = 0x2\n\tNFTA_LOG_SNAPLEN                  = 0x3\n\tNFTA_LOG_QTHRESHOLD               = 0x4\n\tNFTA_LOG_LEVEL                    = 0x5\n\tNFTA_LOG_FLAGS                    = 0x6\n\tNFTA_QUEUE_UNSPEC                 = 0x0\n\tNFTA_QUEUE_NUM                    = 0x1\n\tNFTA_QUEUE_TOTAL                  = 0x2\n\tNFTA_QUEUE_FLAGS                  = 0x3\n\tNFTA_QUEUE_SREG_QNUM              = 0x4\n\tNFT_QUOTA_F_INV                   = 0x1\n\tNFT_QUOTA_F_DEPLETED              = 0x2\n\tNFTA_QUOTA_UNSPEC                 = 0x0\n\tNFTA_QUOTA_BYTES                  = 0x1\n\tNFTA_QUOTA_FLAGS                  = 0x2\n\tNFTA_QUOTA_PAD                    = 0x3\n\tNFTA_QUOTA_CONSUMED               = 0x4\n\tNFT_REJECT_ICMP_UNREACH           = 0x0\n\tNFT_REJECT_TCP_RST                = 0x1\n\tNFT_REJECT_ICMPX_UNREACH          = 0x2\n\tNFT_REJECT_ICMPX_NO_ROUTE         = 0x0\n\tNFT_REJECT_ICMPX_PORT_UNREACH     = 0x1\n\tNFT_REJECT_ICMPX_HOST_UNREACH     = 0x2\n\tNFT_REJECT_ICMPX_ADMIN_PROHIBITED = 0x3\n\tNFTA_REJECT_UNSPEC                = 0x0\n\tNFTA_REJECT_TYPE                  = 0x1\n\tNFTA_REJECT_ICMP_CODE             = 0x2\n\tNFT_NAT_SNAT                      = 0x0\n\tNFT_NAT_DNAT                      = 0x1\n\tNFTA_NAT_UNSPEC                   = 0x0\n\tNFTA_NAT_TYPE                     = 0x1\n\tNFTA_NAT_FAMILY                   = 0x2\n\tNFTA_NAT_REG_ADDR_MIN             = 0x3\n\tNFTA_NAT_REG_ADDR_MAX             = 0x4\n\tNFTA_NAT_REG_PROTO_MIN            = 0x5\n\tNFTA_NAT_REG_PROTO_MAX            = 0x6\n\tNFTA_NAT_FLAGS                    = 0x7\n\tNFTA_MASQ_UNSPEC                  = 0x0\n\tNFTA_MASQ_FLAGS                   = 0x1\n\tNFTA_MASQ_REG_PROTO_MIN           = 0x2\n\tNFTA_MASQ_REG_PROTO_MAX           = 0x3\n\tNFTA_REDIR_UNSPEC                 = 0x0\n\tNFTA_REDIR_REG_PROTO_MIN          = 0x1\n\tNFTA_REDIR_REG_PROTO_MAX          = 0x2\n\tNFTA_REDIR_FLAGS                  = 0x3\n\tNFTA_DUP_UNSPEC                   = 0x0\n\tNFTA_DUP_SREG_ADDR                = 0x1\n\tNFTA_DUP_SREG_DEV                 = 0x2\n\tNFTA_FWD_UNSPEC                   = 0x0\n\tNFTA_FWD_SREG_DEV                 = 0x1\n\tNFTA_OBJREF_UNSPEC                = 0x0\n\tNFTA_OBJREF_IMM_TYPE              = 0x1\n\tNFTA_OBJREF_IMM_NAME              = 0x2\n\tNFTA_OBJREF_SET_SREG              = 0x3\n\tNFTA_OBJREF_SET_NAME              = 0x4\n\tNFTA_OBJREF_SET_ID                = 0x5\n\tNFTA_GEN_UNSPEC                   = 0x0\n\tNFTA_GEN_ID                       = 0x1\n\tNFTA_GEN_PROC_PID                 = 0x2\n\tNFTA_GEN_PROC_NAME                = 0x3\n\tNFTA_FIB_UNSPEC                   = 0x0\n\tNFTA_FIB_DREG                     = 0x1\n\tNFTA_FIB_RESULT                   = 0x2\n\tNFTA_FIB_FLAGS                    = 0x3\n\tNFT_FIB_RESULT_UNSPEC             = 0x0\n\tNFT_FIB_RESULT_OIF                = 0x1\n\tNFT_FIB_RESULT_OIFNAME            = 0x2\n\tNFT_FIB_RESULT_ADDRTYPE           = 0x3\n\tNFTA_FIB_F_SADDR                  = 0x1\n\tNFTA_FIB_F_DADDR                  = 0x2\n\tNFTA_FIB_F_MARK                   = 0x4\n\tNFTA_FIB_F_IIF                    = 0x8\n\tNFTA_FIB_F_OIF                    = 0x10\n\tNFTA_FIB_F_PRESENT                = 0x20\n\tNFTA_CT_HELPER_UNSPEC             = 0x0\n\tNFTA_CT_HELPER_NAME               = 0x1\n\tNFTA_CT_HELPER_L3PROTO            = 0x2\n\tNFTA_CT_HELPER_L4PROTO            = 0x3\n\tNFTA_OBJ_UNSPEC                   = 0x0\n\tNFTA_OBJ_TABLE                    = 0x1\n\tNFTA_OBJ_NAME                     = 0x2\n\tNFTA_OBJ_TYPE                     = 0x3\n\tNFTA_OBJ_DATA                     = 0x4\n\tNFTA_OBJ_USE                      = 0x5\n\tNFTA_TRACE_UNSPEC                 = 0x0\n\tNFTA_TRACE_TABLE                  = 0x1\n\tNFTA_TRACE_CHAIN                  = 0x2\n\tNFTA_TRACE_RULE_HANDLE            = 0x3\n\tNFTA_TRACE_TYPE                   = 0x4\n\tNFTA_TRACE_VERDICT                = 0x5\n\tNFTA_TRACE_ID                     = 0x6\n\tNFTA_TRACE_LL_HEADER              = 0x7\n\tNFTA_TRACE_NETWORK_HEADER         = 0x8\n\tNFTA_TRACE_TRANSPORT_HEADER       = 0x9\n\tNFTA_TRACE_IIF                    = 0xa\n\tNFTA_TRACE_IIFTYPE                = 0xb\n\tNFTA_TRACE_OIF                    = 0xc\n\tNFTA_TRACE_OIFTYPE                = 0xd\n\tNFTA_TRACE_MARK                   = 0xe\n\tNFTA_TRACE_NFPROTO                = 0xf\n\tNFTA_TRACE_POLICY                 = 0x10\n\tNFTA_TRACE_PAD                    = 0x11\n\tNFT_TRACETYPE_UNSPEC              = 0x0\n\tNFT_TRACETYPE_POLICY              = 0x1\n\tNFT_TRACETYPE_RETURN              = 0x2\n\tNFT_TRACETYPE_RULE                = 0x3\n\tNFTA_NG_UNSPEC                    = 0x0\n\tNFTA_NG_DREG                      = 0x1\n\tNFTA_NG_MODULUS                   = 0x2\n\tNFTA_NG_TYPE                      = 0x3\n\tNFTA_NG_OFFSET                    = 0x4\n\tNFT_NG_INCREMENTAL                = 0x0\n\tNFT_NG_RANDOM                     = 0x1\n)\n\ntype RTCTime struct {\n\tSec   int32\n\tMin   int32\n\tHour  int32\n\tMday  int32\n\tMon   int32\n\tYear  int32\n\tWday  int32\n\tYday  int32\n\tIsdst int32\n}\n\ntype RTCWkAlrm struct {\n\tEnabled uint8\n\tPending uint8\n\tTime    RTCTime\n}\n\ntype RTCPLLInfo struct {\n\tCtrl    int32\n\tValue   int32\n\tMax     int32\n\tMin     int32\n\tPosmult int32\n\tNegmult int32\n\tClock   int64\n}\n\ntype BlkpgIoctlArg struct {\n\tOp      int32\n\tFlags   int32\n\tDatalen int32\n\tData    *byte\n}\n\ntype BlkpgPartition struct {\n\tStart   int64\n\tLength  int64\n\tPno     int32\n\tDevname [64]uint8\n\tVolname [64]uint8\n\t_       [4]byte\n}\n\nconst (\n\tBLKPG                  = 0x20001269\n\tBLKPG_ADD_PARTITION    = 0x1\n\tBLKPG_DEL_PARTITION    = 0x2\n\tBLKPG_RESIZE_PARTITION = 0x3\n)\n\nconst (\n\tNETNSA_NONE = 0x0\n\tNETNSA_NSID = 0x1\n\tNETNSA_PID  = 0x2\n\tNETNSA_FD   = 0x3\n)\n\ntype XDPRingOffset struct {\n\tProducer uint64\n\tConsumer uint64\n\tDesc     uint64\n}\n\ntype XDPMmapOffsets struct {\n\tRx XDPRingOffset\n\tTx XDPRingOffset\n\tFr XDPRingOffset\n\tCr XDPRingOffset\n}\n\ntype XDPUmemReg struct {\n\tAddr     uint64\n\tLen      uint64\n\tSize     uint32\n\tHeadroom uint32\n}\n\ntype XDPStatistics struct {\n\tRx_dropped       uint64\n\tRx_invalid_descs uint64\n\tTx_invalid_descs uint64\n}\n\ntype XDPDesc struct {\n\tAddr    uint64\n\tLen     uint32\n\tOptions uint32\n}\n\nconst (\n\tNCSI_CMD_UNSPEC                 = 0x0\n\tNCSI_CMD_PKG_INFO               = 0x1\n\tNCSI_CMD_SET_INTERFACE          = 0x2\n\tNCSI_CMD_CLEAR_INTERFACE        = 0x3\n\tNCSI_ATTR_UNSPEC                = 0x0\n\tNCSI_ATTR_IFINDEX               = 0x1\n\tNCSI_ATTR_PACKAGE_LIST          = 0x2\n\tNCSI_ATTR_PACKAGE_ID            = 0x3\n\tNCSI_ATTR_CHANNEL_ID            = 0x4\n\tNCSI_PKG_ATTR_UNSPEC            = 0x0\n\tNCSI_PKG_ATTR                   = 0x1\n\tNCSI_PKG_ATTR_ID                = 0x2\n\tNCSI_PKG_ATTR_FORCED            = 0x3\n\tNCSI_PKG_ATTR_CHANNEL_LIST      = 0x4\n\tNCSI_CHANNEL_ATTR_UNSPEC        = 0x0\n\tNCSI_CHANNEL_ATTR               = 0x1\n\tNCSI_CHANNEL_ATTR_ID            = 0x2\n\tNCSI_CHANNEL_ATTR_VERSION_MAJOR = 0x3\n\tNCSI_CHANNEL_ATTR_VERSION_MINOR = 0x4\n\tNCSI_CHANNEL_ATTR_VERSION_STR   = 0x5\n\tNCSI_CHANNEL_ATTR_LINK_STATE    = 0x6\n\tNCSI_CHANNEL_ATTR_ACTIVE        = 0x7\n\tNCSI_CHANNEL_ATTR_FORCED        = 0x8\n\tNCSI_CHANNEL_ATTR_VLAN_LIST     = 0x9\n\tNCSI_CHANNEL_ATTR_VLAN_ID       = 0xa\n)\n\ntype ScmTimestamping struct {\n\tTs [3]Timespec\n}\n\nconst (\n\tSOF_TIMESTAMPING_TX_HARDWARE  = 0x1\n\tSOF_TIMESTAMPING_TX_SOFTWARE  = 0x2\n\tSOF_TIMESTAMPING_RX_HARDWARE  = 0x4\n\tSOF_TIMESTAMPING_RX_SOFTWARE  = 0x8\n\tSOF_TIMESTAMPING_SOFTWARE     = 0x10\n\tSOF_TIMESTAMPING_SYS_HARDWARE = 0x20\n\tSOF_TIMESTAMPING_RAW_HARDWARE = 0x40\n\tSOF_TIMESTAMPING_OPT_ID       = 0x80\n\tSOF_TIMESTAMPING_TX_SCHED     = 0x100\n\tSOF_TIMESTAMPING_TX_ACK       = 0x200\n\tSOF_TIMESTAMPING_OPT_CMSG     = 0x400\n\tSOF_TIMESTAMPING_OPT_TSONLY   = 0x800\n\tSOF_TIMESTAMPING_OPT_STATS    = 0x1000\n\tSOF_TIMESTAMPING_OPT_PKTINFO  = 0x2000\n\tSOF_TIMESTAMPING_OPT_TX_SWHW  = 0x4000\n\n\tSOF_TIMESTAMPING_LAST = 0x4000\n\tSOF_TIMESTAMPING_MASK = 0x7fff\n\n\tSCM_TSTAMP_SND   = 0x0\n\tSCM_TSTAMP_SCHED = 0x1\n\tSCM_TSTAMP_ACK   = 0x2\n)\n\ntype SockExtendedErr struct {\n\tErrno  uint32\n\tOrigin uint8\n\tType   uint8\n\tCode   uint8\n\tPad    uint8\n\tInfo   uint32\n\tData   uint32\n}\n\ntype FanotifyEventMetadata struct {\n\tEvent_len    uint32\n\tVers         uint8\n\tReserved     uint8\n\tMetadata_len uint16\n\tMask         uint64\n\tFd           int32\n\tPid          int32\n}\n\ntype FanotifyResponse struct {\n\tFd       int32\n\tResponse uint32\n}\n\nconst (\n\tCRYPTO_MSG_BASE      = 0x10\n\tCRYPTO_MSG_NEWALG    = 0x10\n\tCRYPTO_MSG_DELALG    = 0x11\n\tCRYPTO_MSG_UPDATEALG = 0x12\n\tCRYPTO_MSG_GETALG    = 0x13\n\tCRYPTO_MSG_DELRNG    = 0x14\n\tCRYPTO_MSG_GETSTAT   = 0x15\n)\n\nconst (\n\tCRYPTOCFGA_UNSPEC           = 0x0\n\tCRYPTOCFGA_PRIORITY_VAL     = 0x1\n\tCRYPTOCFGA_REPORT_LARVAL    = 0x2\n\tCRYPTOCFGA_REPORT_HASH      = 0x3\n\tCRYPTOCFGA_REPORT_BLKCIPHER = 0x4\n\tCRYPTOCFGA_REPORT_AEAD      = 0x5\n\tCRYPTOCFGA_REPORT_COMPRESS  = 0x6\n\tCRYPTOCFGA_REPORT_RNG       = 0x7\n\tCRYPTOCFGA_REPORT_CIPHER    = 0x8\n\tCRYPTOCFGA_REPORT_AKCIPHER  = 0x9\n\tCRYPTOCFGA_REPORT_KPP       = 0xa\n\tCRYPTOCFGA_REPORT_ACOMP     = 0xb\n\tCRYPTOCFGA_STAT_LARVAL      = 0xc\n\tCRYPTOCFGA_STAT_HASH        = 0xd\n\tCRYPTOCFGA_STAT_BLKCIPHER   = 0xe\n\tCRYPTOCFGA_STAT_AEAD        = 0xf\n\tCRYPTOCFGA_STAT_COMPRESS    = 0x10\n\tCRYPTOCFGA_STAT_RNG         = 0x11\n\tCRYPTOCFGA_STAT_CIPHER      = 0x12\n\tCRYPTOCFGA_STAT_AKCIPHER    = 0x13\n\tCRYPTOCFGA_STAT_KPP         = 0x14\n\tCRYPTOCFGA_STAT_ACOMP       = 0x15\n)\n\ntype CryptoUserAlg struct {\n\tName        [64]int8\n\tDriver_name [64]int8\n\tModule_name [64]int8\n\tType        uint32\n\tMask        uint32\n\tRefcnt      uint32\n\tFlags       uint32\n}\n\ntype CryptoStatAEAD struct {\n\tType         [64]int8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatAKCipher struct {\n\tType         [64]int8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tVerify_cnt   uint64\n\tSign_cnt     uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatCipher struct {\n\tType         [64]int8\n\tEncrypt_cnt  uint64\n\tEncrypt_tlen uint64\n\tDecrypt_cnt  uint64\n\tDecrypt_tlen uint64\n\tErr_cnt      uint64\n}\n\ntype CryptoStatCompress struct {\n\tType            [64]int8\n\tCompress_cnt    uint64\n\tCompress_tlen   uint64\n\tDecompress_cnt  uint64\n\tDecompress_tlen uint64\n\tErr_cnt         uint64\n}\n\ntype CryptoStatHash struct {\n\tType      [64]int8\n\tHash_cnt  uint64\n\tHash_tlen uint64\n\tErr_cnt   uint64\n}\n\ntype CryptoStatKPP struct {\n\tType                      [64]int8\n\tSetsecret_cnt             uint64\n\tGenerate_public_key_cnt   uint64\n\tCompute_shared_secret_cnt uint64\n\tErr_cnt                   uint64\n}\n\ntype CryptoStatRNG struct {\n\tType          [64]int8\n\tGenerate_cnt  uint64\n\tGenerate_tlen uint64\n\tSeed_cnt      uint64\n\tErr_cnt       uint64\n}\n\ntype CryptoStatLarval struct {\n\tType [64]int8\n}\n\ntype CryptoReportLarval struct {\n\tType [64]int8\n}\n\ntype CryptoReportHash struct {\n\tType       [64]int8\n\tBlocksize  uint32\n\tDigestsize uint32\n}\n\ntype CryptoReportCipher struct {\n\tType        [64]int8\n\tBlocksize   uint32\n\tMin_keysize uint32\n\tMax_keysize uint32\n}\n\ntype CryptoReportBlkCipher struct {\n\tType        [64]int8\n\tGeniv       [64]int8\n\tBlocksize   uint32\n\tMin_keysize uint32\n\tMax_keysize uint32\n\tIvsize      uint32\n}\n\ntype CryptoReportAEAD struct {\n\tType        [64]int8\n\tGeniv       [64]int8\n\tBlocksize   uint32\n\tMaxauthsize uint32\n\tIvsize      uint32\n}\n\ntype CryptoReportComp struct {\n\tType [64]int8\n}\n\ntype CryptoReportRNG struct {\n\tType     [64]int8\n\tSeedsize uint32\n}\n\ntype CryptoReportAKCipher struct {\n\tType [64]int8\n}\n\ntype CryptoReportKPP struct {\n\tType [64]int8\n}\n\ntype CryptoReportAcomp struct {\n\tType [64]int8\n}\n\nconst (\n\tBPF_REG_0                           = 0x0\n\tBPF_REG_1                           = 0x1\n\tBPF_REG_2                           = 0x2\n\tBPF_REG_3                           = 0x3\n\tBPF_REG_4                           = 0x4\n\tBPF_REG_5                           = 0x5\n\tBPF_REG_6                           = 0x6\n\tBPF_REG_7                           = 0x7\n\tBPF_REG_8                           = 0x8\n\tBPF_REG_9                           = 0x9\n\tBPF_REG_10                          = 0xa\n\tBPF_MAP_CREATE                      = 0x0\n\tBPF_MAP_LOOKUP_ELEM                 = 0x1\n\tBPF_MAP_UPDATE_ELEM                 = 0x2\n\tBPF_MAP_DELETE_ELEM                 = 0x3\n\tBPF_MAP_GET_NEXT_KEY                = 0x4\n\tBPF_PROG_LOAD                       = 0x5\n\tBPF_OBJ_PIN                         = 0x6\n\tBPF_OBJ_GET                         = 0x7\n\tBPF_PROG_ATTACH                     = 0x8\n\tBPF_PROG_DETACH                     = 0x9\n\tBPF_PROG_TEST_RUN                   = 0xa\n\tBPF_PROG_GET_NEXT_ID                = 0xb\n\tBPF_MAP_GET_NEXT_ID                 = 0xc\n\tBPF_PROG_GET_FD_BY_ID               = 0xd\n\tBPF_MAP_GET_FD_BY_ID                = 0xe\n\tBPF_OBJ_GET_INFO_BY_FD              = 0xf\n\tBPF_PROG_QUERY                      = 0x10\n\tBPF_RAW_TRACEPOINT_OPEN             = 0x11\n\tBPF_BTF_LOAD                        = 0x12\n\tBPF_BTF_GET_FD_BY_ID                = 0x13\n\tBPF_TASK_FD_QUERY                   = 0x14\n\tBPF_MAP_LOOKUP_AND_DELETE_ELEM      = 0x15\n\tBPF_MAP_TYPE_UNSPEC                 = 0x0\n\tBPF_MAP_TYPE_HASH                   = 0x1\n\tBPF_MAP_TYPE_ARRAY                  = 0x2\n\tBPF_MAP_TYPE_PROG_ARRAY             = 0x3\n\tBPF_MAP_TYPE_PERF_EVENT_ARRAY       = 0x4\n\tBPF_MAP_TYPE_PERCPU_HASH            = 0x5\n\tBPF_MAP_TYPE_PERCPU_ARRAY           = 0x6\n\tBPF_MAP_TYPE_STACK_TRACE            = 0x7\n\tBPF_MAP_TYPE_CGROUP_ARRAY           = 0x8\n\tBPF_MAP_TYPE_LRU_HASH               = 0x9\n\tBPF_MAP_TYPE_LRU_PERCPU_HASH        = 0xa\n\tBPF_MAP_TYPE_LPM_TRIE               = 0xb\n\tBPF_MAP_TYPE_ARRAY_OF_MAPS          = 0xc\n\tBPF_MAP_TYPE_HASH_OF_MAPS           = 0xd\n\tBPF_MAP_TYPE_DEVMAP                 = 0xe\n\tBPF_MAP_TYPE_SOCKMAP                = 0xf\n\tBPF_MAP_TYPE_CPUMAP                 = 0x10\n\tBPF_MAP_TYPE_XSKMAP                 = 0x11\n\tBPF_MAP_TYPE_SOCKHASH               = 0x12\n\tBPF_MAP_TYPE_CGROUP_STORAGE         = 0x13\n\tBPF_MAP_TYPE_REUSEPORT_SOCKARRAY    = 0x14\n\tBPF_MAP_TYPE_PERCPU_CGROUP_STORAGE  = 0x15\n\tBPF_MAP_TYPE_QUEUE                  = 0x16\n\tBPF_MAP_TYPE_STACK                  = 0x17\n\tBPF_PROG_TYPE_UNSPEC                = 0x0\n\tBPF_PROG_TYPE_SOCKET_FILTER         = 0x1\n\tBPF_PROG_TYPE_KPROBE                = 0x2\n\tBPF_PROG_TYPE_SCHED_CLS             = 0x3\n\tBPF_PROG_TYPE_SCHED_ACT             = 0x4\n\tBPF_PROG_TYPE_TRACEPOINT            = 0x5\n\tBPF_PROG_TYPE_XDP                   = 0x6\n\tBPF_PROG_TYPE_PERF_EVENT            = 0x7\n\tBPF_PROG_TYPE_CGROUP_SKB            = 0x8\n\tBPF_PROG_TYPE_CGROUP_SOCK           = 0x9\n\tBPF_PROG_TYPE_LWT_IN                = 0xa\n\tBPF_PROG_TYPE_LWT_OUT               = 0xb\n\tBPF_PROG_TYPE_LWT_XMIT              = 0xc\n\tBPF_PROG_TYPE_SOCK_OPS              = 0xd\n\tBPF_PROG_TYPE_SK_SKB                = 0xe\n\tBPF_PROG_TYPE_CGROUP_DEVICE         = 0xf\n\tBPF_PROG_TYPE_SK_MSG                = 0x10\n\tBPF_PROG_TYPE_RAW_TRACEPOINT        = 0x11\n\tBPF_PROG_TYPE_CGROUP_SOCK_ADDR      = 0x12\n\tBPF_PROG_TYPE_LWT_SEG6LOCAL         = 0x13\n\tBPF_PROG_TYPE_LIRC_MODE2            = 0x14\n\tBPF_PROG_TYPE_SK_REUSEPORT          = 0x15\n\tBPF_PROG_TYPE_FLOW_DISSECTOR        = 0x16\n\tBPF_CGROUP_INET_INGRESS             = 0x0\n\tBPF_CGROUP_INET_EGRESS              = 0x1\n\tBPF_CGROUP_INET_SOCK_CREATE         = 0x2\n\tBPF_CGROUP_SOCK_OPS                 = 0x3\n\tBPF_SK_SKB_STREAM_PARSER            = 0x4\n\tBPF_SK_SKB_STREAM_VERDICT           = 0x5\n\tBPF_CGROUP_DEVICE                   = 0x6\n\tBPF_SK_MSG_VERDICT                  = 0x7\n\tBPF_CGROUP_INET4_BIND               = 0x8\n\tBPF_CGROUP_INET6_BIND               = 0x9\n\tBPF_CGROUP_INET4_CONNECT            = 0xa\n\tBPF_CGROUP_INET6_CONNECT            = 0xb\n\tBPF_CGROUP_INET4_POST_BIND          = 0xc\n\tBPF_CGROUP_INET6_POST_BIND          = 0xd\n\tBPF_CGROUP_UDP4_SENDMSG             = 0xe\n\tBPF_CGROUP_UDP6_SENDMSG             = 0xf\n\tBPF_LIRC_MODE2                      = 0x10\n\tBPF_FLOW_DISSECTOR                  = 0x11\n\tBPF_STACK_BUILD_ID_EMPTY            = 0x0\n\tBPF_STACK_BUILD_ID_VALID            = 0x1\n\tBPF_STACK_BUILD_ID_IP               = 0x2\n\tBPF_ADJ_ROOM_NET                    = 0x0\n\tBPF_HDR_START_MAC                   = 0x0\n\tBPF_HDR_START_NET                   = 0x1\n\tBPF_LWT_ENCAP_SEG6                  = 0x0\n\tBPF_LWT_ENCAP_SEG6_INLINE           = 0x1\n\tBPF_OK                              = 0x0\n\tBPF_DROP                            = 0x2\n\tBPF_REDIRECT                        = 0x7\n\tBPF_SOCK_OPS_VOID                   = 0x0\n\tBPF_SOCK_OPS_TIMEOUT_INIT           = 0x1\n\tBPF_SOCK_OPS_RWND_INIT              = 0x2\n\tBPF_SOCK_OPS_TCP_CONNECT_CB         = 0x3\n\tBPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB  = 0x4\n\tBPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB = 0x5\n\tBPF_SOCK_OPS_NEEDS_ECN              = 0x6\n\tBPF_SOCK_OPS_BASE_RTT               = 0x7\n\tBPF_SOCK_OPS_RTO_CB                 = 0x8\n\tBPF_SOCK_OPS_RETRANS_CB             = 0x9\n\tBPF_SOCK_OPS_STATE_CB               = 0xa\n\tBPF_SOCK_OPS_TCP_LISTEN_CB          = 0xb\n\tBPF_TCP_ESTABLISHED                 = 0x1\n\tBPF_TCP_SYN_SENT                    = 0x2\n\tBPF_TCP_SYN_RECV                    = 0x3\n\tBPF_TCP_FIN_WAIT1                   = 0x4\n\tBPF_TCP_FIN_WAIT2                   = 0x5\n\tBPF_TCP_TIME_WAIT                   = 0x6\n\tBPF_TCP_CLOSE                       = 0x7\n\tBPF_TCP_CLOSE_WAIT                  = 0x8\n\tBPF_TCP_LAST_ACK                    = 0x9\n\tBPF_TCP_LISTEN                      = 0xa\n\tBPF_TCP_CLOSING                     = 0xb\n\tBPF_TCP_NEW_SYN_RECV                = 0xc\n\tBPF_TCP_MAX_STATES                  = 0xd\n\tBPF_FIB_LKUP_RET_SUCCESS            = 0x0\n\tBPF_FIB_LKUP_RET_BLACKHOLE          = 0x1\n\tBPF_FIB_LKUP_RET_UNREACHABLE        = 0x2\n\tBPF_FIB_LKUP_RET_PROHIBIT           = 0x3\n\tBPF_FIB_LKUP_RET_NOT_FWDED          = 0x4\n\tBPF_FIB_LKUP_RET_FWD_DISABLED       = 0x5\n\tBPF_FIB_LKUP_RET_UNSUPP_LWT         = 0x6\n\tBPF_FIB_LKUP_RET_NO_NEIGH           = 0x7\n\tBPF_FIB_LKUP_RET_FRAG_NEEDED        = 0x8\n\tBPF_FD_TYPE_RAW_TRACEPOINT          = 0x0\n\tBPF_FD_TYPE_TRACEPOINT              = 0x1\n\tBPF_FD_TYPE_KPROBE                  = 0x2\n\tBPF_FD_TYPE_KRETPROBE               = 0x3\n\tBPF_FD_TYPE_UPROBE                  = 0x4\n\tBPF_FD_TYPE_URETPROBE               = 0x5\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go",
    "content": "// cgo -godefs types_netbsd.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build 386,netbsd\n\npackage unix\n\nconst (\n\tSizeofPtr      = 0x4\n\tSizeofShort    = 0x2\n\tSizeofInt      = 0x4\n\tSizeofLong     = 0x4\n\tSizeofLongLong = 0x8\n)\n\ntype (\n\t_C_short     int16\n\t_C_int       int32\n\t_C_long      int32\n\t_C_long_long int64\n)\n\ntype Timespec struct {\n\tSec  int64\n\tNsec int32\n}\n\ntype Timeval struct {\n\tSec  int64\n\tUsec int32\n}\n\ntype Rusage struct {\n\tUtime    Timeval\n\tStime    Timeval\n\tMaxrss   int32\n\tIxrss    int32\n\tIdrss    int32\n\tIsrss    int32\n\tMinflt   int32\n\tMajflt   int32\n\tNswap    int32\n\tInblock  int32\n\tOublock  int32\n\tMsgsnd   int32\n\tMsgrcv   int32\n\tNsignals int32\n\tNvcsw    int32\n\tNivcsw   int32\n}\n\ntype Rlimit struct {\n\tCur uint64\n\tMax uint64\n}\n\ntype _Gid_t uint32\n\ntype Stat_t struct {\n\tDev     uint64\n\tMode    uint32\n\tIno     uint64\n\tNlink   uint32\n\tUid     uint32\n\tGid     uint32\n\tRdev    uint64\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\tBtim    Timespec\n\tSize    int64\n\tBlocks  int64\n\tBlksize uint32\n\tFlags   uint32\n\tGen     uint32\n\tSpare   [2]uint32\n}\n\ntype Statfs_t [0]byte\n\ntype Flock_t struct {\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\tType   int16\n\tWhence int16\n}\n\ntype Dirent struct {\n\tFileno    uint64\n\tReclen    uint16\n\tNamlen    uint16\n\tType      uint8\n\tName      [512]int8\n\tPad_cgo_0 [3]byte\n}\n\ntype Fsid struct {\n\tX__fsid_val [2]int32\n}\n\nconst (\n\tPathMax = 0x400\n)\n\nconst (\n\tFADV_NORMAL     = 0x0\n\tFADV_RANDOM     = 0x1\n\tFADV_SEQUENTIAL = 0x2\n\tFADV_WILLNEED   = 0x3\n\tFADV_DONTNEED   = 0x4\n\tFADV_NOREUSE    = 0x5\n)\n\ntype RawSockaddrInet4 struct {\n\tLen    uint8\n\tFamily uint8\n\tPort   uint16\n\tAddr   [4]byte /* in_addr */\n\tZero   [8]int8\n}\n\ntype RawSockaddrInet6 struct {\n\tLen      uint8\n\tFamily   uint8\n\tPort     uint16\n\tFlowinfo uint32\n\tAddr     [16]byte /* in6_addr */\n\tScope_id uint32\n}\n\ntype RawSockaddrUnix struct {\n\tLen    uint8\n\tFamily uint8\n\tPath   [104]int8\n}\n\ntype RawSockaddrDatalink struct {\n\tLen    uint8\n\tFamily uint8\n\tIndex  uint16\n\tType   uint8\n\tNlen   uint8\n\tAlen   uint8\n\tSlen   uint8\n\tData   [12]int8\n}\n\ntype RawSockaddr struct {\n\tLen    uint8\n\tFamily uint8\n\tData   [14]int8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [92]int8\n}\n\ntype _Socklen uint32\n\ntype Linger struct {\n\tOnoff  int32\n\tLinger int32\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint32\n}\n\ntype IPMreq struct {\n\tMultiaddr [4]byte /* in_addr */\n\tInterface [4]byte /* in_addr */\n}\n\ntype IPv6Mreq struct {\n\tMultiaddr [16]byte /* in6_addr */\n\tInterface uint32\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tIov        *Iovec\n\tIovlen     int32\n\tControl    *byte\n\tControllen uint32\n\tFlags      int32\n}\n\ntype Cmsghdr struct {\n\tLen   uint32\n\tLevel int32\n\tType  int32\n}\n\ntype Inet6Pktinfo struct {\n\tAddr    [16]byte /* in6_addr */\n\tIfindex uint32\n}\n\ntype IPv6MTUInfo struct {\n\tAddr RawSockaddrInet6\n\tMtu  uint32\n}\n\ntype ICMPv6Filter struct {\n\tFilt [8]uint32\n}\n\nconst (\n\tSizeofSockaddrInet4    = 0x10\n\tSizeofSockaddrInet6    = 0x1c\n\tSizeofSockaddrAny      = 0x6c\n\tSizeofSockaddrUnix     = 0x6a\n\tSizeofSockaddrDatalink = 0x14\n\tSizeofLinger           = 0x8\n\tSizeofIPMreq           = 0x8\n\tSizeofIPv6Mreq         = 0x14\n\tSizeofMsghdr           = 0x1c\n\tSizeofCmsghdr          = 0xc\n\tSizeofInet6Pktinfo     = 0x14\n\tSizeofIPv6MTUInfo      = 0x20\n\tSizeofICMPv6Filter     = 0x20\n)\n\nconst (\n\tPTRACE_TRACEME = 0x0\n\tPTRACE_CONT    = 0x7\n\tPTRACE_KILL    = 0x8\n)\n\ntype Kevent_t struct {\n\tIdent  uint32\n\tFilter uint32\n\tFlags  uint32\n\tFflags uint32\n\tData   int64\n\tUdata  int32\n}\n\ntype FdSet struct {\n\tBits [8]uint32\n}\n\nconst (\n\tSizeofIfMsghdr         = 0x98\n\tSizeofIfData           = 0x84\n\tSizeofIfaMsghdr        = 0x18\n\tSizeofIfAnnounceMsghdr = 0x18\n\tSizeofRtMsghdr         = 0x78\n\tSizeofRtMetrics        = 0x50\n)\n\ntype IfMsghdr struct {\n\tMsglen    uint16\n\tVersion   uint8\n\tType      uint8\n\tAddrs     int32\n\tFlags     int32\n\tIndex     uint16\n\tPad_cgo_0 [2]byte\n\tData      IfData\n\tPad_cgo_1 [4]byte\n}\n\ntype IfData struct {\n\tType       uint8\n\tAddrlen    uint8\n\tHdrlen     uint8\n\tPad_cgo_0  [1]byte\n\tLink_state int32\n\tMtu        uint64\n\tMetric     uint64\n\tBaudrate   uint64\n\tIpackets   uint64\n\tIerrors    uint64\n\tOpackets   uint64\n\tOerrors    uint64\n\tCollisions uint64\n\tIbytes     uint64\n\tObytes     uint64\n\tImcasts    uint64\n\tOmcasts    uint64\n\tIqdrops    uint64\n\tNoproto    uint64\n\tLastchange Timespec\n}\n\ntype IfaMsghdr struct {\n\tMsglen    uint16\n\tVersion   uint8\n\tType      uint8\n\tAddrs     int32\n\tFlags     int32\n\tMetric    int32\n\tIndex     uint16\n\tPad_cgo_0 [6]byte\n}\n\ntype IfAnnounceMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tIndex   uint16\n\tName    [16]int8\n\tWhat    uint16\n}\n\ntype RtMsghdr struct {\n\tMsglen    uint16\n\tVersion   uint8\n\tType      uint8\n\tIndex     uint16\n\tPad_cgo_0 [2]byte\n\tFlags     int32\n\tAddrs     int32\n\tPid       int32\n\tSeq       int32\n\tErrno     int32\n\tUse       int32\n\tInits     int32\n\tPad_cgo_1 [4]byte\n\tRmx       RtMetrics\n}\n\ntype RtMetrics struct {\n\tLocks    uint64\n\tMtu      uint64\n\tHopcount uint64\n\tRecvpipe uint64\n\tSendpipe uint64\n\tSsthresh uint64\n\tRtt      uint64\n\tRttvar   uint64\n\tExpire   int64\n\tPksent   int64\n}\n\ntype Mclpool [0]byte\n\nconst (\n\tSizeofBpfVersion = 0x4\n\tSizeofBpfStat    = 0x80\n\tSizeofBpfProgram = 0x8\n\tSizeofBpfInsn    = 0x8\n\tSizeofBpfHdr     = 0x14\n)\n\ntype BpfVersion struct {\n\tMajor uint16\n\tMinor uint16\n}\n\ntype BpfStat struct {\n\tRecv    uint64\n\tDrop    uint64\n\tCapt    uint64\n\tPadding [13]uint64\n}\n\ntype BpfProgram struct {\n\tLen   uint32\n\tInsns *BpfInsn\n}\n\ntype BpfInsn struct {\n\tCode uint16\n\tJt   uint8\n\tJf   uint8\n\tK    uint32\n}\n\ntype BpfHdr struct {\n\tTstamp    BpfTimeval\n\tCaplen    uint32\n\tDatalen   uint32\n\tHdrlen    uint16\n\tPad_cgo_0 [2]byte\n}\n\ntype BpfTimeval struct {\n\tSec  int32\n\tUsec int32\n}\n\ntype Termios struct {\n\tIflag  uint32\n\tOflag  uint32\n\tCflag  uint32\n\tLflag  uint32\n\tCc     [20]uint8\n\tIspeed int32\n\tOspeed int32\n}\n\ntype Winsize struct {\n\tRow    uint16\n\tCol    uint16\n\tXpixel uint16\n\tYpixel uint16\n}\n\ntype Ptmget struct {\n\tCfd int32\n\tSfd int32\n\tCn  [1024]byte\n\tSn  [1024]byte\n}\n\nconst (\n\tAT_FDCWD            = -0x64\n\tAT_SYMLINK_NOFOLLOW = 0x200\n)\n\ntype PollFd struct {\n\tFd      int32\n\tEvents  int16\n\tRevents int16\n}\n\nconst (\n\tPOLLERR    = 0x8\n\tPOLLHUP    = 0x10\n\tPOLLIN     = 0x1\n\tPOLLNVAL   = 0x20\n\tPOLLOUT    = 0x4\n\tPOLLPRI    = 0x2\n\tPOLLRDBAND = 0x80\n\tPOLLRDNORM = 0x40\n\tPOLLWRBAND = 0x100\n\tPOLLWRNORM = 0x4\n)\n\ntype Sysctlnode struct {\n\tFlags           uint32\n\tNum             int32\n\tName            [32]int8\n\tVer             uint32\n\tX__rsvd         uint32\n\tUn              [16]byte\n\tX_sysctl_size   [8]byte\n\tX_sysctl_func   [8]byte\n\tX_sysctl_parent [8]byte\n\tX_sysctl_desc   [8]byte\n}\n\ntype Utsname struct {\n\tSysname  [256]byte\n\tNodename [256]byte\n\tRelease  [256]byte\n\tVersion  [256]byte\n\tMachine  [256]byte\n}\n\nconst SizeofClockinfo = 0x14\n\ntype Clockinfo struct {\n\tHz      int32\n\tTick    int32\n\tTickadj int32\n\tStathz  int32\n\tProfhz  int32\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go",
    "content": "// cgo -godefs types_netbsd.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build amd64,netbsd\n\npackage unix\n\nconst (\n\tSizeofPtr      = 0x8\n\tSizeofShort    = 0x2\n\tSizeofInt      = 0x4\n\tSizeofLong     = 0x8\n\tSizeofLongLong = 0x8\n)\n\ntype (\n\t_C_short     int16\n\t_C_int       int32\n\t_C_long      int64\n\t_C_long_long int64\n)\n\ntype Timespec struct {\n\tSec  int64\n\tNsec int64\n}\n\ntype Timeval struct {\n\tSec       int64\n\tUsec      int32\n\tPad_cgo_0 [4]byte\n}\n\ntype Rusage struct {\n\tUtime    Timeval\n\tStime    Timeval\n\tMaxrss   int64\n\tIxrss    int64\n\tIdrss    int64\n\tIsrss    int64\n\tMinflt   int64\n\tMajflt   int64\n\tNswap    int64\n\tInblock  int64\n\tOublock  int64\n\tMsgsnd   int64\n\tMsgrcv   int64\n\tNsignals int64\n\tNvcsw    int64\n\tNivcsw   int64\n}\n\ntype Rlimit struct {\n\tCur uint64\n\tMax uint64\n}\n\ntype _Gid_t uint32\n\ntype Stat_t struct {\n\tDev     uint64\n\tMode    uint32\n\t_       [4]byte\n\tIno     uint64\n\tNlink   uint32\n\tUid     uint32\n\tGid     uint32\n\t_       [4]byte\n\tRdev    uint64\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\tBtim    Timespec\n\tSize    int64\n\tBlocks  int64\n\tBlksize uint32\n\tFlags   uint32\n\tGen     uint32\n\tSpare   [2]uint32\n\t_       [4]byte\n}\n\ntype Statfs_t [0]byte\n\ntype Flock_t struct {\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\tType   int16\n\tWhence int16\n}\n\ntype Dirent struct {\n\tFileno    uint64\n\tReclen    uint16\n\tNamlen    uint16\n\tType      uint8\n\tName      [512]int8\n\tPad_cgo_0 [3]byte\n}\n\ntype Fsid struct {\n\tX__fsid_val [2]int32\n}\n\nconst (\n\tPathMax = 0x400\n)\n\nconst (\n\tFADV_NORMAL     = 0x0\n\tFADV_RANDOM     = 0x1\n\tFADV_SEQUENTIAL = 0x2\n\tFADV_WILLNEED   = 0x3\n\tFADV_DONTNEED   = 0x4\n\tFADV_NOREUSE    = 0x5\n)\n\ntype RawSockaddrInet4 struct {\n\tLen    uint8\n\tFamily uint8\n\tPort   uint16\n\tAddr   [4]byte /* in_addr */\n\tZero   [8]int8\n}\n\ntype RawSockaddrInet6 struct {\n\tLen      uint8\n\tFamily   uint8\n\tPort     uint16\n\tFlowinfo uint32\n\tAddr     [16]byte /* in6_addr */\n\tScope_id uint32\n}\n\ntype RawSockaddrUnix struct {\n\tLen    uint8\n\tFamily uint8\n\tPath   [104]int8\n}\n\ntype RawSockaddrDatalink struct {\n\tLen    uint8\n\tFamily uint8\n\tIndex  uint16\n\tType   uint8\n\tNlen   uint8\n\tAlen   uint8\n\tSlen   uint8\n\tData   [12]int8\n}\n\ntype RawSockaddr struct {\n\tLen    uint8\n\tFamily uint8\n\tData   [14]int8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [92]int8\n}\n\ntype _Socklen uint32\n\ntype Linger struct {\n\tOnoff  int32\n\tLinger int32\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint64\n}\n\ntype IPMreq struct {\n\tMultiaddr [4]byte /* in_addr */\n\tInterface [4]byte /* in_addr */\n}\n\ntype IPv6Mreq struct {\n\tMultiaddr [16]byte /* in6_addr */\n\tInterface uint32\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tPad_cgo_0  [4]byte\n\tIov        *Iovec\n\tIovlen     int32\n\tPad_cgo_1  [4]byte\n\tControl    *byte\n\tControllen uint32\n\tFlags      int32\n}\n\ntype Cmsghdr struct {\n\tLen   uint32\n\tLevel int32\n\tType  int32\n}\n\ntype Inet6Pktinfo struct {\n\tAddr    [16]byte /* in6_addr */\n\tIfindex uint32\n}\n\ntype IPv6MTUInfo struct {\n\tAddr RawSockaddrInet6\n\tMtu  uint32\n}\n\ntype ICMPv6Filter struct {\n\tFilt [8]uint32\n}\n\nconst (\n\tSizeofSockaddrInet4    = 0x10\n\tSizeofSockaddrInet6    = 0x1c\n\tSizeofSockaddrAny      = 0x6c\n\tSizeofSockaddrUnix     = 0x6a\n\tSizeofSockaddrDatalink = 0x14\n\tSizeofLinger           = 0x8\n\tSizeofIPMreq           = 0x8\n\tSizeofIPv6Mreq         = 0x14\n\tSizeofMsghdr           = 0x30\n\tSizeofCmsghdr          = 0xc\n\tSizeofInet6Pktinfo     = 0x14\n\tSizeofIPv6MTUInfo      = 0x20\n\tSizeofICMPv6Filter     = 0x20\n)\n\nconst (\n\tPTRACE_TRACEME = 0x0\n\tPTRACE_CONT    = 0x7\n\tPTRACE_KILL    = 0x8\n)\n\ntype Kevent_t struct {\n\tIdent     uint64\n\tFilter    uint32\n\tFlags     uint32\n\tFflags    uint32\n\tPad_cgo_0 [4]byte\n\tData      int64\n\tUdata     int64\n}\n\ntype FdSet struct {\n\tBits [8]uint32\n}\n\nconst (\n\tSizeofIfMsghdr         = 0x98\n\tSizeofIfData           = 0x88\n\tSizeofIfaMsghdr        = 0x18\n\tSizeofIfAnnounceMsghdr = 0x18\n\tSizeofRtMsghdr         = 0x78\n\tSizeofRtMetrics        = 0x50\n)\n\ntype IfMsghdr struct {\n\tMsglen    uint16\n\tVersion   uint8\n\tType      uint8\n\tAddrs     int32\n\tFlags     int32\n\tIndex     uint16\n\tPad_cgo_0 [2]byte\n\tData      IfData\n}\n\ntype IfData struct {\n\tType       uint8\n\tAddrlen    uint8\n\tHdrlen     uint8\n\tPad_cgo_0  [1]byte\n\tLink_state int32\n\tMtu        uint64\n\tMetric     uint64\n\tBaudrate   uint64\n\tIpackets   uint64\n\tIerrors    uint64\n\tOpackets   uint64\n\tOerrors    uint64\n\tCollisions uint64\n\tIbytes     uint64\n\tObytes     uint64\n\tImcasts    uint64\n\tOmcasts    uint64\n\tIqdrops    uint64\n\tNoproto    uint64\n\tLastchange Timespec\n}\n\ntype IfaMsghdr struct {\n\tMsglen    uint16\n\tVersion   uint8\n\tType      uint8\n\tAddrs     int32\n\tFlags     int32\n\tMetric    int32\n\tIndex     uint16\n\tPad_cgo_0 [6]byte\n}\n\ntype IfAnnounceMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tIndex   uint16\n\tName    [16]int8\n\tWhat    uint16\n}\n\ntype RtMsghdr struct {\n\tMsglen    uint16\n\tVersion   uint8\n\tType      uint8\n\tIndex     uint16\n\tPad_cgo_0 [2]byte\n\tFlags     int32\n\tAddrs     int32\n\tPid       int32\n\tSeq       int32\n\tErrno     int32\n\tUse       int32\n\tInits     int32\n\tPad_cgo_1 [4]byte\n\tRmx       RtMetrics\n}\n\ntype RtMetrics struct {\n\tLocks    uint64\n\tMtu      uint64\n\tHopcount uint64\n\tRecvpipe uint64\n\tSendpipe uint64\n\tSsthresh uint64\n\tRtt      uint64\n\tRttvar   uint64\n\tExpire   int64\n\tPksent   int64\n}\n\ntype Mclpool [0]byte\n\nconst (\n\tSizeofBpfVersion = 0x4\n\tSizeofBpfStat    = 0x80\n\tSizeofBpfProgram = 0x10\n\tSizeofBpfInsn    = 0x8\n\tSizeofBpfHdr     = 0x20\n)\n\ntype BpfVersion struct {\n\tMajor uint16\n\tMinor uint16\n}\n\ntype BpfStat struct {\n\tRecv    uint64\n\tDrop    uint64\n\tCapt    uint64\n\tPadding [13]uint64\n}\n\ntype BpfProgram struct {\n\tLen       uint32\n\tPad_cgo_0 [4]byte\n\tInsns     *BpfInsn\n}\n\ntype BpfInsn struct {\n\tCode uint16\n\tJt   uint8\n\tJf   uint8\n\tK    uint32\n}\n\ntype BpfHdr struct {\n\tTstamp    BpfTimeval\n\tCaplen    uint32\n\tDatalen   uint32\n\tHdrlen    uint16\n\tPad_cgo_0 [6]byte\n}\n\ntype BpfTimeval struct {\n\tSec  int64\n\tUsec int64\n}\n\ntype Termios struct {\n\tIflag  uint32\n\tOflag  uint32\n\tCflag  uint32\n\tLflag  uint32\n\tCc     [20]uint8\n\tIspeed int32\n\tOspeed int32\n}\n\ntype Winsize struct {\n\tRow    uint16\n\tCol    uint16\n\tXpixel uint16\n\tYpixel uint16\n}\n\ntype Ptmget struct {\n\tCfd int32\n\tSfd int32\n\tCn  [1024]byte\n\tSn  [1024]byte\n}\n\nconst (\n\tAT_FDCWD            = -0x64\n\tAT_SYMLINK_NOFOLLOW = 0x200\n)\n\ntype PollFd struct {\n\tFd      int32\n\tEvents  int16\n\tRevents int16\n}\n\nconst (\n\tPOLLERR    = 0x8\n\tPOLLHUP    = 0x10\n\tPOLLIN     = 0x1\n\tPOLLNVAL   = 0x20\n\tPOLLOUT    = 0x4\n\tPOLLPRI    = 0x2\n\tPOLLRDBAND = 0x80\n\tPOLLRDNORM = 0x40\n\tPOLLWRBAND = 0x100\n\tPOLLWRNORM = 0x4\n)\n\ntype Sysctlnode struct {\n\tFlags           uint32\n\tNum             int32\n\tName            [32]int8\n\tVer             uint32\n\tX__rsvd         uint32\n\tUn              [16]byte\n\tX_sysctl_size   [8]byte\n\tX_sysctl_func   [8]byte\n\tX_sysctl_parent [8]byte\n\tX_sysctl_desc   [8]byte\n}\n\ntype Utsname struct {\n\tSysname  [256]byte\n\tNodename [256]byte\n\tRelease  [256]byte\n\tVersion  [256]byte\n\tMachine  [256]byte\n}\n\nconst SizeofClockinfo = 0x14\n\ntype Clockinfo struct {\n\tHz      int32\n\tTick    int32\n\tTickadj int32\n\tStathz  int32\n\tProfhz  int32\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go",
    "content": "// cgo -godefs types_netbsd.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build arm,netbsd\n\npackage unix\n\nconst (\n\tSizeofPtr      = 0x4\n\tSizeofShort    = 0x2\n\tSizeofInt      = 0x4\n\tSizeofLong     = 0x4\n\tSizeofLongLong = 0x8\n)\n\ntype (\n\t_C_short     int16\n\t_C_int       int32\n\t_C_long      int32\n\t_C_long_long int64\n)\n\ntype Timespec struct {\n\tSec       int64\n\tNsec      int32\n\tPad_cgo_0 [4]byte\n}\n\ntype Timeval struct {\n\tSec       int64\n\tUsec      int32\n\tPad_cgo_0 [4]byte\n}\n\ntype Rusage struct {\n\tUtime    Timeval\n\tStime    Timeval\n\tMaxrss   int32\n\tIxrss    int32\n\tIdrss    int32\n\tIsrss    int32\n\tMinflt   int32\n\tMajflt   int32\n\tNswap    int32\n\tInblock  int32\n\tOublock  int32\n\tMsgsnd   int32\n\tMsgrcv   int32\n\tNsignals int32\n\tNvcsw    int32\n\tNivcsw   int32\n}\n\ntype Rlimit struct {\n\tCur uint64\n\tMax uint64\n}\n\ntype _Gid_t uint32\n\ntype Stat_t struct {\n\tDev     uint64\n\tMode    uint32\n\t_       [4]byte\n\tIno     uint64\n\tNlink   uint32\n\tUid     uint32\n\tGid     uint32\n\t_       [4]byte\n\tRdev    uint64\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\tBtim    Timespec\n\tSize    int64\n\tBlocks  int64\n\tBlksize uint32\n\tFlags   uint32\n\tGen     uint32\n\tSpare   [2]uint32\n\t_       [4]byte\n}\n\ntype Statfs_t [0]byte\n\ntype Flock_t struct {\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\tType   int16\n\tWhence int16\n}\n\ntype Dirent struct {\n\tFileno    uint64\n\tReclen    uint16\n\tNamlen    uint16\n\tType      uint8\n\tName      [512]int8\n\tPad_cgo_0 [3]byte\n}\n\ntype Fsid struct {\n\tX__fsid_val [2]int32\n}\n\nconst (\n\tPathMax = 0x400\n)\n\nconst (\n\tFADV_NORMAL     = 0x0\n\tFADV_RANDOM     = 0x1\n\tFADV_SEQUENTIAL = 0x2\n\tFADV_WILLNEED   = 0x3\n\tFADV_DONTNEED   = 0x4\n\tFADV_NOREUSE    = 0x5\n)\n\ntype RawSockaddrInet4 struct {\n\tLen    uint8\n\tFamily uint8\n\tPort   uint16\n\tAddr   [4]byte /* in_addr */\n\tZero   [8]int8\n}\n\ntype RawSockaddrInet6 struct {\n\tLen      uint8\n\tFamily   uint8\n\tPort     uint16\n\tFlowinfo uint32\n\tAddr     [16]byte /* in6_addr */\n\tScope_id uint32\n}\n\ntype RawSockaddrUnix struct {\n\tLen    uint8\n\tFamily uint8\n\tPath   [104]int8\n}\n\ntype RawSockaddrDatalink struct {\n\tLen    uint8\n\tFamily uint8\n\tIndex  uint16\n\tType   uint8\n\tNlen   uint8\n\tAlen   uint8\n\tSlen   uint8\n\tData   [12]int8\n}\n\ntype RawSockaddr struct {\n\tLen    uint8\n\tFamily uint8\n\tData   [14]int8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [92]int8\n}\n\ntype _Socklen uint32\n\ntype Linger struct {\n\tOnoff  int32\n\tLinger int32\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint32\n}\n\ntype IPMreq struct {\n\tMultiaddr [4]byte /* in_addr */\n\tInterface [4]byte /* in_addr */\n}\n\ntype IPv6Mreq struct {\n\tMultiaddr [16]byte /* in6_addr */\n\tInterface uint32\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tIov        *Iovec\n\tIovlen     int32\n\tControl    *byte\n\tControllen uint32\n\tFlags      int32\n}\n\ntype Cmsghdr struct {\n\tLen   uint32\n\tLevel int32\n\tType  int32\n}\n\ntype Inet6Pktinfo struct {\n\tAddr    [16]byte /* in6_addr */\n\tIfindex uint32\n}\n\ntype IPv6MTUInfo struct {\n\tAddr RawSockaddrInet6\n\tMtu  uint32\n}\n\ntype ICMPv6Filter struct {\n\tFilt [8]uint32\n}\n\nconst (\n\tSizeofSockaddrInet4    = 0x10\n\tSizeofSockaddrInet6    = 0x1c\n\tSizeofSockaddrAny      = 0x6c\n\tSizeofSockaddrUnix     = 0x6a\n\tSizeofSockaddrDatalink = 0x14\n\tSizeofLinger           = 0x8\n\tSizeofIPMreq           = 0x8\n\tSizeofIPv6Mreq         = 0x14\n\tSizeofMsghdr           = 0x1c\n\tSizeofCmsghdr          = 0xc\n\tSizeofInet6Pktinfo     = 0x14\n\tSizeofIPv6MTUInfo      = 0x20\n\tSizeofICMPv6Filter     = 0x20\n)\n\nconst (\n\tPTRACE_TRACEME = 0x0\n\tPTRACE_CONT    = 0x7\n\tPTRACE_KILL    = 0x8\n)\n\ntype Kevent_t struct {\n\tIdent     uint32\n\tFilter    uint32\n\tFlags     uint32\n\tFflags    uint32\n\tData      int64\n\tUdata     int32\n\tPad_cgo_0 [4]byte\n}\n\ntype FdSet struct {\n\tBits [8]uint32\n}\n\nconst (\n\tSizeofIfMsghdr         = 0x98\n\tSizeofIfData           = 0x88\n\tSizeofIfaMsghdr        = 0x18\n\tSizeofIfAnnounceMsghdr = 0x18\n\tSizeofRtMsghdr         = 0x78\n\tSizeofRtMetrics        = 0x50\n)\n\ntype IfMsghdr struct {\n\tMsglen    uint16\n\tVersion   uint8\n\tType      uint8\n\tAddrs     int32\n\tFlags     int32\n\tIndex     uint16\n\tPad_cgo_0 [2]byte\n\tData      IfData\n}\n\ntype IfData struct {\n\tType       uint8\n\tAddrlen    uint8\n\tHdrlen     uint8\n\tPad_cgo_0  [1]byte\n\tLink_state int32\n\tMtu        uint64\n\tMetric     uint64\n\tBaudrate   uint64\n\tIpackets   uint64\n\tIerrors    uint64\n\tOpackets   uint64\n\tOerrors    uint64\n\tCollisions uint64\n\tIbytes     uint64\n\tObytes     uint64\n\tImcasts    uint64\n\tOmcasts    uint64\n\tIqdrops    uint64\n\tNoproto    uint64\n\tLastchange Timespec\n}\n\ntype IfaMsghdr struct {\n\tMsglen    uint16\n\tVersion   uint8\n\tType      uint8\n\tAddrs     int32\n\tFlags     int32\n\tMetric    int32\n\tIndex     uint16\n\tPad_cgo_0 [6]byte\n}\n\ntype IfAnnounceMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tIndex   uint16\n\tName    [16]int8\n\tWhat    uint16\n}\n\ntype RtMsghdr struct {\n\tMsglen    uint16\n\tVersion   uint8\n\tType      uint8\n\tIndex     uint16\n\tPad_cgo_0 [2]byte\n\tFlags     int32\n\tAddrs     int32\n\tPid       int32\n\tSeq       int32\n\tErrno     int32\n\tUse       int32\n\tInits     int32\n\tPad_cgo_1 [4]byte\n\tRmx       RtMetrics\n}\n\ntype RtMetrics struct {\n\tLocks    uint64\n\tMtu      uint64\n\tHopcount uint64\n\tRecvpipe uint64\n\tSendpipe uint64\n\tSsthresh uint64\n\tRtt      uint64\n\tRttvar   uint64\n\tExpire   int64\n\tPksent   int64\n}\n\ntype Mclpool [0]byte\n\nconst (\n\tSizeofBpfVersion = 0x4\n\tSizeofBpfStat    = 0x80\n\tSizeofBpfProgram = 0x8\n\tSizeofBpfInsn    = 0x8\n\tSizeofBpfHdr     = 0x14\n)\n\ntype BpfVersion struct {\n\tMajor uint16\n\tMinor uint16\n}\n\ntype BpfStat struct {\n\tRecv    uint64\n\tDrop    uint64\n\tCapt    uint64\n\tPadding [13]uint64\n}\n\ntype BpfProgram struct {\n\tLen   uint32\n\tInsns *BpfInsn\n}\n\ntype BpfInsn struct {\n\tCode uint16\n\tJt   uint8\n\tJf   uint8\n\tK    uint32\n}\n\ntype BpfHdr struct {\n\tTstamp    BpfTimeval\n\tCaplen    uint32\n\tDatalen   uint32\n\tHdrlen    uint16\n\tPad_cgo_0 [2]byte\n}\n\ntype BpfTimeval struct {\n\tSec  int32\n\tUsec int32\n}\n\ntype Termios struct {\n\tIflag  uint32\n\tOflag  uint32\n\tCflag  uint32\n\tLflag  uint32\n\tCc     [20]uint8\n\tIspeed int32\n\tOspeed int32\n}\n\ntype Winsize struct {\n\tRow    uint16\n\tCol    uint16\n\tXpixel uint16\n\tYpixel uint16\n}\n\ntype Ptmget struct {\n\tCfd int32\n\tSfd int32\n\tCn  [1024]byte\n\tSn  [1024]byte\n}\n\nconst (\n\tAT_FDCWD            = -0x64\n\tAT_SYMLINK_NOFOLLOW = 0x200\n)\n\ntype PollFd struct {\n\tFd      int32\n\tEvents  int16\n\tRevents int16\n}\n\nconst (\n\tPOLLERR    = 0x8\n\tPOLLHUP    = 0x10\n\tPOLLIN     = 0x1\n\tPOLLNVAL   = 0x20\n\tPOLLOUT    = 0x4\n\tPOLLPRI    = 0x2\n\tPOLLRDBAND = 0x80\n\tPOLLRDNORM = 0x40\n\tPOLLWRBAND = 0x100\n\tPOLLWRNORM = 0x4\n)\n\ntype Sysctlnode struct {\n\tFlags           uint32\n\tNum             int32\n\tName            [32]int8\n\tVer             uint32\n\tX__rsvd         uint32\n\tUn              [16]byte\n\tX_sysctl_size   [8]byte\n\tX_sysctl_func   [8]byte\n\tX_sysctl_parent [8]byte\n\tX_sysctl_desc   [8]byte\n}\n\ntype Utsname struct {\n\tSysname  [256]byte\n\tNodename [256]byte\n\tRelease  [256]byte\n\tVersion  [256]byte\n\tMachine  [256]byte\n}\n\nconst SizeofClockinfo = 0x14\n\ntype Clockinfo struct {\n\tHz      int32\n\tTick    int32\n\tTickadj int32\n\tStathz  int32\n\tProfhz  int32\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_netbsd_arm64.go",
    "content": "// cgo -godefs types_netbsd.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build arm64,netbsd\n\npackage unix\n\nconst (\n\tSizeofPtr      = 0x8\n\tSizeofShort    = 0x2\n\tSizeofInt      = 0x4\n\tSizeofLong     = 0x8\n\tSizeofLongLong = 0x8\n)\n\ntype (\n\t_C_short     int16\n\t_C_int       int32\n\t_C_long      int64\n\t_C_long_long int64\n)\n\ntype Timespec struct {\n\tSec  int64\n\tNsec int64\n}\n\ntype Timeval struct {\n\tSec       int64\n\tUsec      int32\n\tPad_cgo_0 [4]byte\n}\n\ntype Rusage struct {\n\tUtime    Timeval\n\tStime    Timeval\n\tMaxrss   int64\n\tIxrss    int64\n\tIdrss    int64\n\tIsrss    int64\n\tMinflt   int64\n\tMajflt   int64\n\tNswap    int64\n\tInblock  int64\n\tOublock  int64\n\tMsgsnd   int64\n\tMsgrcv   int64\n\tNsignals int64\n\tNvcsw    int64\n\tNivcsw   int64\n}\n\ntype Rlimit struct {\n\tCur uint64\n\tMax uint64\n}\n\ntype _Gid_t uint32\n\ntype Stat_t struct {\n\tDev     uint64\n\tMode    uint32\n\t_       [4]byte\n\tIno     uint64\n\tNlink   uint32\n\tUid     uint32\n\tGid     uint32\n\t_       [4]byte\n\tRdev    uint64\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\tBtim    Timespec\n\tSize    int64\n\tBlocks  int64\n\tBlksize uint32\n\tFlags   uint32\n\tGen     uint32\n\tSpare   [2]uint32\n\t_       [4]byte\n}\n\ntype Statfs_t [0]byte\n\ntype Flock_t struct {\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\tType   int16\n\tWhence int16\n}\n\ntype Dirent struct {\n\tFileno    uint64\n\tReclen    uint16\n\tNamlen    uint16\n\tType      uint8\n\tName      [512]int8\n\tPad_cgo_0 [3]byte\n}\n\ntype Fsid struct {\n\tX__fsid_val [2]int32\n}\n\nconst (\n\tPathMax = 0x400\n)\n\nconst (\n\tFADV_NORMAL     = 0x0\n\tFADV_RANDOM     = 0x1\n\tFADV_SEQUENTIAL = 0x2\n\tFADV_WILLNEED   = 0x3\n\tFADV_DONTNEED   = 0x4\n\tFADV_NOREUSE    = 0x5\n)\n\ntype RawSockaddrInet4 struct {\n\tLen    uint8\n\tFamily uint8\n\tPort   uint16\n\tAddr   [4]byte /* in_addr */\n\tZero   [8]int8\n}\n\ntype RawSockaddrInet6 struct {\n\tLen      uint8\n\tFamily   uint8\n\tPort     uint16\n\tFlowinfo uint32\n\tAddr     [16]byte /* in6_addr */\n\tScope_id uint32\n}\n\ntype RawSockaddrUnix struct {\n\tLen    uint8\n\tFamily uint8\n\tPath   [104]int8\n}\n\ntype RawSockaddrDatalink struct {\n\tLen    uint8\n\tFamily uint8\n\tIndex  uint16\n\tType   uint8\n\tNlen   uint8\n\tAlen   uint8\n\tSlen   uint8\n\tData   [12]int8\n}\n\ntype RawSockaddr struct {\n\tLen    uint8\n\tFamily uint8\n\tData   [14]int8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [92]int8\n}\n\ntype _Socklen uint32\n\ntype Linger struct {\n\tOnoff  int32\n\tLinger int32\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint64\n}\n\ntype IPMreq struct {\n\tMultiaddr [4]byte /* in_addr */\n\tInterface [4]byte /* in_addr */\n}\n\ntype IPv6Mreq struct {\n\tMultiaddr [16]byte /* in6_addr */\n\tInterface uint32\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tPad_cgo_0  [4]byte\n\tIov        *Iovec\n\tIovlen     int32\n\tPad_cgo_1  [4]byte\n\tControl    *byte\n\tControllen uint32\n\tFlags      int32\n}\n\ntype Cmsghdr struct {\n\tLen   uint32\n\tLevel int32\n\tType  int32\n}\n\ntype Inet6Pktinfo struct {\n\tAddr    [16]byte /* in6_addr */\n\tIfindex uint32\n}\n\ntype IPv6MTUInfo struct {\n\tAddr RawSockaddrInet6\n\tMtu  uint32\n}\n\ntype ICMPv6Filter struct {\n\tFilt [8]uint32\n}\n\nconst (\n\tSizeofSockaddrInet4    = 0x10\n\tSizeofSockaddrInet6    = 0x1c\n\tSizeofSockaddrAny      = 0x6c\n\tSizeofSockaddrUnix     = 0x6a\n\tSizeofSockaddrDatalink = 0x14\n\tSizeofLinger           = 0x8\n\tSizeofIPMreq           = 0x8\n\tSizeofIPv6Mreq         = 0x14\n\tSizeofMsghdr           = 0x30\n\tSizeofCmsghdr          = 0xc\n\tSizeofInet6Pktinfo     = 0x14\n\tSizeofIPv6MTUInfo      = 0x20\n\tSizeofICMPv6Filter     = 0x20\n)\n\nconst (\n\tPTRACE_TRACEME = 0x0\n\tPTRACE_CONT    = 0x7\n\tPTRACE_KILL    = 0x8\n)\n\ntype Kevent_t struct {\n\tIdent     uint64\n\tFilter    uint32\n\tFlags     uint32\n\tFflags    uint32\n\tPad_cgo_0 [4]byte\n\tData      int64\n\tUdata     int64\n}\n\ntype FdSet struct {\n\tBits [8]uint32\n}\n\nconst (\n\tSizeofIfMsghdr         = 0x98\n\tSizeofIfData           = 0x88\n\tSizeofIfaMsghdr        = 0x18\n\tSizeofIfAnnounceMsghdr = 0x18\n\tSizeofRtMsghdr         = 0x78\n\tSizeofRtMetrics        = 0x50\n)\n\ntype IfMsghdr struct {\n\tMsglen    uint16\n\tVersion   uint8\n\tType      uint8\n\tAddrs     int32\n\tFlags     int32\n\tIndex     uint16\n\tPad_cgo_0 [2]byte\n\tData      IfData\n}\n\ntype IfData struct {\n\tType       uint8\n\tAddrlen    uint8\n\tHdrlen     uint8\n\tPad_cgo_0  [1]byte\n\tLink_state int32\n\tMtu        uint64\n\tMetric     uint64\n\tBaudrate   uint64\n\tIpackets   uint64\n\tIerrors    uint64\n\tOpackets   uint64\n\tOerrors    uint64\n\tCollisions uint64\n\tIbytes     uint64\n\tObytes     uint64\n\tImcasts    uint64\n\tOmcasts    uint64\n\tIqdrops    uint64\n\tNoproto    uint64\n\tLastchange Timespec\n}\n\ntype IfaMsghdr struct {\n\tMsglen    uint16\n\tVersion   uint8\n\tType      uint8\n\tAddrs     int32\n\tFlags     int32\n\tMetric    int32\n\tIndex     uint16\n\tPad_cgo_0 [6]byte\n}\n\ntype IfAnnounceMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tIndex   uint16\n\tName    [16]int8\n\tWhat    uint16\n}\n\ntype RtMsghdr struct {\n\tMsglen    uint16\n\tVersion   uint8\n\tType      uint8\n\tIndex     uint16\n\tPad_cgo_0 [2]byte\n\tFlags     int32\n\tAddrs     int32\n\tPid       int32\n\tSeq       int32\n\tErrno     int32\n\tUse       int32\n\tInits     int32\n\tPad_cgo_1 [4]byte\n\tRmx       RtMetrics\n}\n\ntype RtMetrics struct {\n\tLocks    uint64\n\tMtu      uint64\n\tHopcount uint64\n\tRecvpipe uint64\n\tSendpipe uint64\n\tSsthresh uint64\n\tRtt      uint64\n\tRttvar   uint64\n\tExpire   int64\n\tPksent   int64\n}\n\ntype Mclpool [0]byte\n\nconst (\n\tSizeofBpfVersion = 0x4\n\tSizeofBpfStat    = 0x80\n\tSizeofBpfProgram = 0x10\n\tSizeofBpfInsn    = 0x8\n\tSizeofBpfHdr     = 0x20\n)\n\ntype BpfVersion struct {\n\tMajor uint16\n\tMinor uint16\n}\n\ntype BpfStat struct {\n\tRecv    uint64\n\tDrop    uint64\n\tCapt    uint64\n\tPadding [13]uint64\n}\n\ntype BpfProgram struct {\n\tLen       uint32\n\tPad_cgo_0 [4]byte\n\tInsns     *BpfInsn\n}\n\ntype BpfInsn struct {\n\tCode uint16\n\tJt   uint8\n\tJf   uint8\n\tK    uint32\n}\n\ntype BpfHdr struct {\n\tTstamp    BpfTimeval\n\tCaplen    uint32\n\tDatalen   uint32\n\tHdrlen    uint16\n\tPad_cgo_0 [6]byte\n}\n\ntype BpfTimeval struct {\n\tSec  int64\n\tUsec int64\n}\n\ntype Termios struct {\n\tIflag  uint32\n\tOflag  uint32\n\tCflag  uint32\n\tLflag  uint32\n\tCc     [20]uint8\n\tIspeed int32\n\tOspeed int32\n}\n\ntype Winsize struct {\n\tRow    uint16\n\tCol    uint16\n\tXpixel uint16\n\tYpixel uint16\n}\n\ntype Ptmget struct {\n\tCfd int32\n\tSfd int32\n\tCn  [1024]byte\n\tSn  [1024]byte\n}\n\nconst (\n\tAT_FDCWD            = -0x64\n\tAT_SYMLINK_NOFOLLOW = 0x200\n)\n\ntype PollFd struct {\n\tFd      int32\n\tEvents  int16\n\tRevents int16\n}\n\nconst (\n\tPOLLERR    = 0x8\n\tPOLLHUP    = 0x10\n\tPOLLIN     = 0x1\n\tPOLLNVAL   = 0x20\n\tPOLLOUT    = 0x4\n\tPOLLPRI    = 0x2\n\tPOLLRDBAND = 0x80\n\tPOLLRDNORM = 0x40\n\tPOLLWRBAND = 0x100\n\tPOLLWRNORM = 0x4\n)\n\ntype Sysctlnode struct {\n\tFlags           uint32\n\tNum             int32\n\tName            [32]int8\n\tVer             uint32\n\tX__rsvd         uint32\n\tUn              [16]byte\n\tX_sysctl_size   [8]byte\n\tX_sysctl_func   [8]byte\n\tX_sysctl_parent [8]byte\n\tX_sysctl_desc   [8]byte\n}\n\ntype Utsname struct {\n\tSysname  [256]byte\n\tNodename [256]byte\n\tRelease  [256]byte\n\tVersion  [256]byte\n\tMachine  [256]byte\n}\n\nconst SizeofClockinfo = 0x14\n\ntype Clockinfo struct {\n\tHz      int32\n\tTick    int32\n\tTickadj int32\n\tStathz  int32\n\tProfhz  int32\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go",
    "content": "// cgo -godefs types_openbsd.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build 386,openbsd\n\npackage unix\n\nconst (\n\tSizeofPtr      = 0x4\n\tSizeofShort    = 0x2\n\tSizeofInt      = 0x4\n\tSizeofLong     = 0x4\n\tSizeofLongLong = 0x8\n)\n\ntype (\n\t_C_short     int16\n\t_C_int       int32\n\t_C_long      int32\n\t_C_long_long int64\n)\n\ntype Timespec struct {\n\tSec  int64\n\tNsec int32\n}\n\ntype Timeval struct {\n\tSec  int64\n\tUsec int32\n}\n\ntype Rusage struct {\n\tUtime    Timeval\n\tStime    Timeval\n\tMaxrss   int32\n\tIxrss    int32\n\tIdrss    int32\n\tIsrss    int32\n\tMinflt   int32\n\tMajflt   int32\n\tNswap    int32\n\tInblock  int32\n\tOublock  int32\n\tMsgsnd   int32\n\tMsgrcv   int32\n\tNsignals int32\n\tNvcsw    int32\n\tNivcsw   int32\n}\n\ntype Rlimit struct {\n\tCur uint64\n\tMax uint64\n}\n\ntype _Gid_t uint32\n\ntype Stat_t struct {\n\tMode           uint32\n\tDev            int32\n\tIno            uint64\n\tNlink          uint32\n\tUid            uint32\n\tGid            uint32\n\tRdev           int32\n\tAtim           Timespec\n\tMtim           Timespec\n\tCtim           Timespec\n\tSize           int64\n\tBlocks         int64\n\tBlksize        uint32\n\tFlags          uint32\n\tGen            uint32\n\tX__st_birthtim Timespec\n}\n\ntype Statfs_t struct {\n\tF_flags       uint32\n\tF_bsize       uint32\n\tF_iosize      uint32\n\tF_blocks      uint64\n\tF_bfree       uint64\n\tF_bavail      int64\n\tF_files       uint64\n\tF_ffree       uint64\n\tF_favail      int64\n\tF_syncwrites  uint64\n\tF_syncreads   uint64\n\tF_asyncwrites uint64\n\tF_asyncreads  uint64\n\tF_fsid        Fsid\n\tF_namemax     uint32\n\tF_owner       uint32\n\tF_ctime       uint64\n\tF_fstypename  [16]int8\n\tF_mntonname   [90]int8\n\tF_mntfromname [90]int8\n\tF_mntfromspec [90]int8\n\tPad_cgo_0     [2]byte\n\tMount_info    [160]byte\n}\n\ntype Flock_t struct {\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\tType   int16\n\tWhence int16\n}\n\ntype Dirent struct {\n\tFileno       uint64\n\tOff          int64\n\tReclen       uint16\n\tType         uint8\n\tNamlen       uint8\n\tX__d_padding [4]uint8\n\tName         [256]int8\n}\n\ntype Fsid struct {\n\tVal [2]int32\n}\n\nconst (\n\tPathMax = 0x400\n)\n\ntype RawSockaddrInet4 struct {\n\tLen    uint8\n\tFamily uint8\n\tPort   uint16\n\tAddr   [4]byte /* in_addr */\n\tZero   [8]int8\n}\n\ntype RawSockaddrInet6 struct {\n\tLen      uint8\n\tFamily   uint8\n\tPort     uint16\n\tFlowinfo uint32\n\tAddr     [16]byte /* in6_addr */\n\tScope_id uint32\n}\n\ntype RawSockaddrUnix struct {\n\tLen    uint8\n\tFamily uint8\n\tPath   [104]int8\n}\n\ntype RawSockaddrDatalink struct {\n\tLen    uint8\n\tFamily uint8\n\tIndex  uint16\n\tType   uint8\n\tNlen   uint8\n\tAlen   uint8\n\tSlen   uint8\n\tData   [24]int8\n}\n\ntype RawSockaddr struct {\n\tLen    uint8\n\tFamily uint8\n\tData   [14]int8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [92]int8\n}\n\ntype _Socklen uint32\n\ntype Linger struct {\n\tOnoff  int32\n\tLinger int32\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint32\n}\n\ntype IPMreq struct {\n\tMultiaddr [4]byte /* in_addr */\n\tInterface [4]byte /* in_addr */\n}\n\ntype IPv6Mreq struct {\n\tMultiaddr [16]byte /* in6_addr */\n\tInterface uint32\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tIov        *Iovec\n\tIovlen     uint32\n\tControl    *byte\n\tControllen uint32\n\tFlags      int32\n}\n\ntype Cmsghdr struct {\n\tLen   uint32\n\tLevel int32\n\tType  int32\n}\n\ntype Inet6Pktinfo struct {\n\tAddr    [16]byte /* in6_addr */\n\tIfindex uint32\n}\n\ntype IPv6MTUInfo struct {\n\tAddr RawSockaddrInet6\n\tMtu  uint32\n}\n\ntype ICMPv6Filter struct {\n\tFilt [8]uint32\n}\n\nconst (\n\tSizeofSockaddrInet4    = 0x10\n\tSizeofSockaddrInet6    = 0x1c\n\tSizeofSockaddrAny      = 0x6c\n\tSizeofSockaddrUnix     = 0x6a\n\tSizeofSockaddrDatalink = 0x20\n\tSizeofLinger           = 0x8\n\tSizeofIPMreq           = 0x8\n\tSizeofIPv6Mreq         = 0x14\n\tSizeofMsghdr           = 0x1c\n\tSizeofCmsghdr          = 0xc\n\tSizeofInet6Pktinfo     = 0x14\n\tSizeofIPv6MTUInfo      = 0x20\n\tSizeofICMPv6Filter     = 0x20\n)\n\nconst (\n\tPTRACE_TRACEME = 0x0\n\tPTRACE_CONT    = 0x7\n\tPTRACE_KILL    = 0x8\n)\n\ntype Kevent_t struct {\n\tIdent  uint32\n\tFilter int16\n\tFlags  uint16\n\tFflags uint32\n\tData   int64\n\tUdata  *byte\n}\n\ntype FdSet struct {\n\tBits [32]uint32\n}\n\nconst (\n\tSizeofIfMsghdr         = 0xec\n\tSizeofIfData           = 0xd4\n\tSizeofIfaMsghdr        = 0x18\n\tSizeofIfAnnounceMsghdr = 0x1a\n\tSizeofRtMsghdr         = 0x60\n\tSizeofRtMetrics        = 0x38\n)\n\ntype IfMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tHdrlen  uint16\n\tIndex   uint16\n\tTableid uint16\n\tPad1    uint8\n\tPad2    uint8\n\tAddrs   int32\n\tFlags   int32\n\tXflags  int32\n\tData    IfData\n}\n\ntype IfData struct {\n\tType         uint8\n\tAddrlen      uint8\n\tHdrlen       uint8\n\tLink_state   uint8\n\tMtu          uint32\n\tMetric       uint32\n\tPad          uint32\n\tBaudrate     uint64\n\tIpackets     uint64\n\tIerrors      uint64\n\tOpackets     uint64\n\tOerrors      uint64\n\tCollisions   uint64\n\tIbytes       uint64\n\tObytes       uint64\n\tImcasts      uint64\n\tOmcasts      uint64\n\tIqdrops      uint64\n\tNoproto      uint64\n\tCapabilities uint32\n\tLastchange   Timeval\n\tMclpool      [7]Mclpool\n}\n\ntype IfaMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tHdrlen  uint16\n\tIndex   uint16\n\tTableid uint16\n\tPad1    uint8\n\tPad2    uint8\n\tAddrs   int32\n\tFlags   int32\n\tMetric  int32\n}\n\ntype IfAnnounceMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tHdrlen  uint16\n\tIndex   uint16\n\tWhat    uint16\n\tName    [16]int8\n}\n\ntype RtMsghdr struct {\n\tMsglen   uint16\n\tVersion  uint8\n\tType     uint8\n\tHdrlen   uint16\n\tIndex    uint16\n\tTableid  uint16\n\tPriority uint8\n\tMpls     uint8\n\tAddrs    int32\n\tFlags    int32\n\tFmask    int32\n\tPid      int32\n\tSeq      int32\n\tErrno    int32\n\tInits    uint32\n\tRmx      RtMetrics\n}\n\ntype RtMetrics struct {\n\tPksent   uint64\n\tExpire   int64\n\tLocks    uint32\n\tMtu      uint32\n\tRefcnt   uint32\n\tHopcount uint32\n\tRecvpipe uint32\n\tSendpipe uint32\n\tSsthresh uint32\n\tRtt      uint32\n\tRttvar   uint32\n\tPad      uint32\n}\n\ntype Mclpool struct {\n\tGrown int32\n\tAlive uint16\n\tHwm   uint16\n\tCwm   uint16\n\tLwm   uint16\n}\n\nconst (\n\tSizeofBpfVersion = 0x4\n\tSizeofBpfStat    = 0x8\n\tSizeofBpfProgram = 0x8\n\tSizeofBpfInsn    = 0x8\n\tSizeofBpfHdr     = 0x14\n)\n\ntype BpfVersion struct {\n\tMajor uint16\n\tMinor uint16\n}\n\ntype BpfStat struct {\n\tRecv uint32\n\tDrop uint32\n}\n\ntype BpfProgram struct {\n\tLen   uint32\n\tInsns *BpfInsn\n}\n\ntype BpfInsn struct {\n\tCode uint16\n\tJt   uint8\n\tJf   uint8\n\tK    uint32\n}\n\ntype BpfHdr struct {\n\tTstamp    BpfTimeval\n\tCaplen    uint32\n\tDatalen   uint32\n\tHdrlen    uint16\n\tPad_cgo_0 [2]byte\n}\n\ntype BpfTimeval struct {\n\tSec  uint32\n\tUsec uint32\n}\n\ntype Termios struct {\n\tIflag  uint32\n\tOflag  uint32\n\tCflag  uint32\n\tLflag  uint32\n\tCc     [20]uint8\n\tIspeed int32\n\tOspeed int32\n}\n\ntype Winsize struct {\n\tRow    uint16\n\tCol    uint16\n\tXpixel uint16\n\tYpixel uint16\n}\n\nconst (\n\tAT_FDCWD            = -0x64\n\tAT_SYMLINK_NOFOLLOW = 0x2\n)\n\ntype PollFd struct {\n\tFd      int32\n\tEvents  int16\n\tRevents int16\n}\n\nconst (\n\tPOLLERR    = 0x8\n\tPOLLHUP    = 0x10\n\tPOLLIN     = 0x1\n\tPOLLNVAL   = 0x20\n\tPOLLOUT    = 0x4\n\tPOLLPRI    = 0x2\n\tPOLLRDBAND = 0x80\n\tPOLLRDNORM = 0x40\n\tPOLLWRBAND = 0x100\n\tPOLLWRNORM = 0x4\n)\n\ntype Sigset_t uint32\n\ntype Utsname struct {\n\tSysname  [256]byte\n\tNodename [256]byte\n\tRelease  [256]byte\n\tVersion  [256]byte\n\tMachine  [256]byte\n}\n\nconst SizeofUvmexp = 0x158\n\ntype Uvmexp struct {\n\tPagesize           int32\n\tPagemask           int32\n\tPageshift          int32\n\tNpages             int32\n\tFree               int32\n\tActive             int32\n\tInactive           int32\n\tPaging             int32\n\tWired              int32\n\tZeropages          int32\n\tReserve_pagedaemon int32\n\tReserve_kernel     int32\n\tAnonpages          int32\n\tVnodepages         int32\n\tVtextpages         int32\n\tFreemin            int32\n\tFreetarg           int32\n\tInactarg           int32\n\tWiredmax           int32\n\tAnonmin            int32\n\tVtextmin           int32\n\tVnodemin           int32\n\tAnonminpct         int32\n\tVtextminpct        int32\n\tVnodeminpct        int32\n\tNswapdev           int32\n\tSwpages            int32\n\tSwpginuse          int32\n\tSwpgonly           int32\n\tNswget             int32\n\tNanon              int32\n\tNanonneeded        int32\n\tNfreeanon          int32\n\tFaults             int32\n\tTraps              int32\n\tIntrs              int32\n\tSwtch              int32\n\tSofts              int32\n\tSyscalls           int32\n\tPageins            int32\n\tObsolete_swapins   int32\n\tObsolete_swapouts  int32\n\tPgswapin           int32\n\tPgswapout          int32\n\tForks              int32\n\tForks_ppwait       int32\n\tForks_sharevm      int32\n\tPga_zerohit        int32\n\tPga_zeromiss       int32\n\tZeroaborts         int32\n\tFltnoram           int32\n\tFltnoanon          int32\n\tFltnoamap          int32\n\tFltpgwait          int32\n\tFltpgrele          int32\n\tFltrelck           int32\n\tFltrelckok         int32\n\tFltanget           int32\n\tFltanretry         int32\n\tFltamcopy          int32\n\tFltnamap           int32\n\tFltnomap           int32\n\tFltlget            int32\n\tFltget             int32\n\tFlt_anon           int32\n\tFlt_acow           int32\n\tFlt_obj            int32\n\tFlt_prcopy         int32\n\tFlt_przero         int32\n\tPdwoke             int32\n\tPdrevs             int32\n\tPdswout            int32\n\tPdfreed            int32\n\tPdscans            int32\n\tPdanscan           int32\n\tPdobscan           int32\n\tPdreact            int32\n\tPdbusy             int32\n\tPdpageouts         int32\n\tPdpending          int32\n\tPddeact            int32\n\tPdreanon           int32\n\tPdrevnode          int32\n\tPdrevtext          int32\n\tFpswtch            int32\n\tKmapent            int32\n}\n\nconst SizeofClockinfo = 0x14\n\ntype Clockinfo struct {\n\tHz      int32\n\tTick    int32\n\tTickadj int32\n\tStathz  int32\n\tProfhz  int32\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go",
    "content": "// cgo -godefs types_openbsd.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build amd64,openbsd\n\npackage unix\n\nconst (\n\tSizeofPtr      = 0x8\n\tSizeofShort    = 0x2\n\tSizeofInt      = 0x4\n\tSizeofLong     = 0x8\n\tSizeofLongLong = 0x8\n)\n\ntype (\n\t_C_short     int16\n\t_C_int       int32\n\t_C_long      int64\n\t_C_long_long int64\n)\n\ntype Timespec struct {\n\tSec  int64\n\tNsec int64\n}\n\ntype Timeval struct {\n\tSec  int64\n\tUsec int64\n}\n\ntype Rusage struct {\n\tUtime    Timeval\n\tStime    Timeval\n\tMaxrss   int64\n\tIxrss    int64\n\tIdrss    int64\n\tIsrss    int64\n\tMinflt   int64\n\tMajflt   int64\n\tNswap    int64\n\tInblock  int64\n\tOublock  int64\n\tMsgsnd   int64\n\tMsgrcv   int64\n\tNsignals int64\n\tNvcsw    int64\n\tNivcsw   int64\n}\n\ntype Rlimit struct {\n\tCur uint64\n\tMax uint64\n}\n\ntype _Gid_t uint32\n\ntype Stat_t struct {\n\tMode    uint32\n\tDev     int32\n\tIno     uint64\n\tNlink   uint32\n\tUid     uint32\n\tGid     uint32\n\tRdev    int32\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\tSize    int64\n\tBlocks  int64\n\tBlksize int32\n\tFlags   uint32\n\tGen     uint32\n\t_       [4]byte\n\t_       Timespec\n}\n\ntype Statfs_t struct {\n\tF_flags       uint32\n\tF_bsize       uint32\n\tF_iosize      uint32\n\t_             [4]byte\n\tF_blocks      uint64\n\tF_bfree       uint64\n\tF_bavail      int64\n\tF_files       uint64\n\tF_ffree       uint64\n\tF_favail      int64\n\tF_syncwrites  uint64\n\tF_syncreads   uint64\n\tF_asyncwrites uint64\n\tF_asyncreads  uint64\n\tF_fsid        Fsid\n\tF_namemax     uint32\n\tF_owner       uint32\n\tF_ctime       uint64\n\tF_fstypename  [16]int8\n\tF_mntonname   [90]int8\n\tF_mntfromname [90]int8\n\tF_mntfromspec [90]int8\n\t_             [2]byte\n\tMount_info    [160]byte\n}\n\ntype Flock_t struct {\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\tType   int16\n\tWhence int16\n}\n\ntype Dirent struct {\n\tFileno uint64\n\tOff    int64\n\tReclen uint16\n\tType   uint8\n\tNamlen uint8\n\t_      [4]uint8\n\tName   [256]int8\n}\n\ntype Fsid struct {\n\tVal [2]int32\n}\n\nconst (\n\tPathMax = 0x400\n)\n\ntype RawSockaddrInet4 struct {\n\tLen    uint8\n\tFamily uint8\n\tPort   uint16\n\tAddr   [4]byte /* in_addr */\n\tZero   [8]int8\n}\n\ntype RawSockaddrInet6 struct {\n\tLen      uint8\n\tFamily   uint8\n\tPort     uint16\n\tFlowinfo uint32\n\tAddr     [16]byte /* in6_addr */\n\tScope_id uint32\n}\n\ntype RawSockaddrUnix struct {\n\tLen    uint8\n\tFamily uint8\n\tPath   [104]int8\n}\n\ntype RawSockaddrDatalink struct {\n\tLen    uint8\n\tFamily uint8\n\tIndex  uint16\n\tType   uint8\n\tNlen   uint8\n\tAlen   uint8\n\tSlen   uint8\n\tData   [24]int8\n}\n\ntype RawSockaddr struct {\n\tLen    uint8\n\tFamily uint8\n\tData   [14]int8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [92]int8\n}\n\ntype _Socklen uint32\n\ntype Linger struct {\n\tOnoff  int32\n\tLinger int32\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint64\n}\n\ntype IPMreq struct {\n\tMultiaddr [4]byte /* in_addr */\n\tInterface [4]byte /* in_addr */\n}\n\ntype IPv6Mreq struct {\n\tMultiaddr [16]byte /* in6_addr */\n\tInterface uint32\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\t_          [4]byte\n\tIov        *Iovec\n\tIovlen     uint32\n\t_          [4]byte\n\tControl    *byte\n\tControllen uint32\n\tFlags      int32\n}\n\ntype Cmsghdr struct {\n\tLen   uint32\n\tLevel int32\n\tType  int32\n}\n\ntype Inet6Pktinfo struct {\n\tAddr    [16]byte /* in6_addr */\n\tIfindex uint32\n}\n\ntype IPv6MTUInfo struct {\n\tAddr RawSockaddrInet6\n\tMtu  uint32\n}\n\ntype ICMPv6Filter struct {\n\tFilt [8]uint32\n}\n\nconst (\n\tSizeofSockaddrInet4    = 0x10\n\tSizeofSockaddrInet6    = 0x1c\n\tSizeofSockaddrAny      = 0x6c\n\tSizeofSockaddrUnix     = 0x6a\n\tSizeofSockaddrDatalink = 0x20\n\tSizeofLinger           = 0x8\n\tSizeofIPMreq           = 0x8\n\tSizeofIPv6Mreq         = 0x14\n\tSizeofMsghdr           = 0x30\n\tSizeofCmsghdr          = 0xc\n\tSizeofInet6Pktinfo     = 0x14\n\tSizeofIPv6MTUInfo      = 0x20\n\tSizeofICMPv6Filter     = 0x20\n)\n\nconst (\n\tPTRACE_TRACEME = 0x0\n\tPTRACE_CONT    = 0x7\n\tPTRACE_KILL    = 0x8\n)\n\ntype Kevent_t struct {\n\tIdent  uint64\n\tFilter int16\n\tFlags  uint16\n\tFflags uint32\n\tData   int64\n\tUdata  *byte\n}\n\ntype FdSet struct {\n\tBits [32]uint32\n}\n\nconst (\n\tSizeofIfMsghdr         = 0xa8\n\tSizeofIfData           = 0x90\n\tSizeofIfaMsghdr        = 0x18\n\tSizeofIfAnnounceMsghdr = 0x1a\n\tSizeofRtMsghdr         = 0x60\n\tSizeofRtMetrics        = 0x38\n)\n\ntype IfMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tHdrlen  uint16\n\tIndex   uint16\n\tTableid uint16\n\tPad1    uint8\n\tPad2    uint8\n\tAddrs   int32\n\tFlags   int32\n\tXflags  int32\n\tData    IfData\n}\n\ntype IfData struct {\n\tType         uint8\n\tAddrlen      uint8\n\tHdrlen       uint8\n\tLink_state   uint8\n\tMtu          uint32\n\tMetric       uint32\n\tRdomain      uint32\n\tBaudrate     uint64\n\tIpackets     uint64\n\tIerrors      uint64\n\tOpackets     uint64\n\tOerrors      uint64\n\tCollisions   uint64\n\tIbytes       uint64\n\tObytes       uint64\n\tImcasts      uint64\n\tOmcasts      uint64\n\tIqdrops      uint64\n\tOqdrops      uint64\n\tNoproto      uint64\n\tCapabilities uint32\n\t_            [4]byte\n\tLastchange   Timeval\n}\n\ntype IfaMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tHdrlen  uint16\n\tIndex   uint16\n\tTableid uint16\n\tPad1    uint8\n\tPad2    uint8\n\tAddrs   int32\n\tFlags   int32\n\tMetric  int32\n}\n\ntype IfAnnounceMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tHdrlen  uint16\n\tIndex   uint16\n\tWhat    uint16\n\tName    [16]int8\n}\n\ntype RtMsghdr struct {\n\tMsglen   uint16\n\tVersion  uint8\n\tType     uint8\n\tHdrlen   uint16\n\tIndex    uint16\n\tTableid  uint16\n\tPriority uint8\n\tMpls     uint8\n\tAddrs    int32\n\tFlags    int32\n\tFmask    int32\n\tPid      int32\n\tSeq      int32\n\tErrno    int32\n\tInits    uint32\n\tRmx      RtMetrics\n}\n\ntype RtMetrics struct {\n\tPksent   uint64\n\tExpire   int64\n\tLocks    uint32\n\tMtu      uint32\n\tRefcnt   uint32\n\tHopcount uint32\n\tRecvpipe uint32\n\tSendpipe uint32\n\tSsthresh uint32\n\tRtt      uint32\n\tRttvar   uint32\n\tPad      uint32\n}\n\ntype Mclpool struct{}\n\nconst (\n\tSizeofBpfVersion = 0x4\n\tSizeofBpfStat    = 0x8\n\tSizeofBpfProgram = 0x10\n\tSizeofBpfInsn    = 0x8\n\tSizeofBpfHdr     = 0x14\n)\n\ntype BpfVersion struct {\n\tMajor uint16\n\tMinor uint16\n}\n\ntype BpfStat struct {\n\tRecv uint32\n\tDrop uint32\n}\n\ntype BpfProgram struct {\n\tLen   uint32\n\t_     [4]byte\n\tInsns *BpfInsn\n}\n\ntype BpfInsn struct {\n\tCode uint16\n\tJt   uint8\n\tJf   uint8\n\tK    uint32\n}\n\ntype BpfHdr struct {\n\tTstamp  BpfTimeval\n\tCaplen  uint32\n\tDatalen uint32\n\tHdrlen  uint16\n\t_       [2]byte\n}\n\ntype BpfTimeval struct {\n\tSec  uint32\n\tUsec uint32\n}\n\ntype Termios struct {\n\tIflag  uint32\n\tOflag  uint32\n\tCflag  uint32\n\tLflag  uint32\n\tCc     [20]uint8\n\tIspeed int32\n\tOspeed int32\n}\n\ntype Winsize struct {\n\tRow    uint16\n\tCol    uint16\n\tXpixel uint16\n\tYpixel uint16\n}\n\nconst (\n\tAT_FDCWD            = -0x64\n\tAT_SYMLINK_NOFOLLOW = 0x2\n)\n\ntype PollFd struct {\n\tFd      int32\n\tEvents  int16\n\tRevents int16\n}\n\nconst (\n\tPOLLERR    = 0x8\n\tPOLLHUP    = 0x10\n\tPOLLIN     = 0x1\n\tPOLLNVAL   = 0x20\n\tPOLLOUT    = 0x4\n\tPOLLPRI    = 0x2\n\tPOLLRDBAND = 0x80\n\tPOLLRDNORM = 0x40\n\tPOLLWRBAND = 0x100\n\tPOLLWRNORM = 0x4\n)\n\ntype Sigset_t uint32\n\ntype Utsname struct {\n\tSysname  [256]byte\n\tNodename [256]byte\n\tRelease  [256]byte\n\tVersion  [256]byte\n\tMachine  [256]byte\n}\n\nconst SizeofUvmexp = 0x158\n\ntype Uvmexp struct {\n\tPagesize           int32\n\tPagemask           int32\n\tPageshift          int32\n\tNpages             int32\n\tFree               int32\n\tActive             int32\n\tInactive           int32\n\tPaging             int32\n\tWired              int32\n\tZeropages          int32\n\tReserve_pagedaemon int32\n\tReserve_kernel     int32\n\tAnonpages          int32\n\tVnodepages         int32\n\tVtextpages         int32\n\tFreemin            int32\n\tFreetarg           int32\n\tInactarg           int32\n\tWiredmax           int32\n\tAnonmin            int32\n\tVtextmin           int32\n\tVnodemin           int32\n\tAnonminpct         int32\n\tVtextminpct        int32\n\tVnodeminpct        int32\n\tNswapdev           int32\n\tSwpages            int32\n\tSwpginuse          int32\n\tSwpgonly           int32\n\tNswget             int32\n\tNanon              int32\n\tNanonneeded        int32\n\tNfreeanon          int32\n\tFaults             int32\n\tTraps              int32\n\tIntrs              int32\n\tSwtch              int32\n\tSofts              int32\n\tSyscalls           int32\n\tPageins            int32\n\tObsolete_swapins   int32\n\tObsolete_swapouts  int32\n\tPgswapin           int32\n\tPgswapout          int32\n\tForks              int32\n\tForks_ppwait       int32\n\tForks_sharevm      int32\n\tPga_zerohit        int32\n\tPga_zeromiss       int32\n\tZeroaborts         int32\n\tFltnoram           int32\n\tFltnoanon          int32\n\tFltnoamap          int32\n\tFltpgwait          int32\n\tFltpgrele          int32\n\tFltrelck           int32\n\tFltrelckok         int32\n\tFltanget           int32\n\tFltanretry         int32\n\tFltamcopy          int32\n\tFltnamap           int32\n\tFltnomap           int32\n\tFltlget            int32\n\tFltget             int32\n\tFlt_anon           int32\n\tFlt_acow           int32\n\tFlt_obj            int32\n\tFlt_prcopy         int32\n\tFlt_przero         int32\n\tPdwoke             int32\n\tPdrevs             int32\n\tPdswout            int32\n\tPdfreed            int32\n\tPdscans            int32\n\tPdanscan           int32\n\tPdobscan           int32\n\tPdreact            int32\n\tPdbusy             int32\n\tPdpageouts         int32\n\tPdpending          int32\n\tPddeact            int32\n\tPdreanon           int32\n\tPdrevnode          int32\n\tPdrevtext          int32\n\tFpswtch            int32\n\tKmapent            int32\n}\n\nconst SizeofClockinfo = 0x14\n\ntype Clockinfo struct {\n\tHz      int32\n\tTick    int32\n\tTickadj int32\n\tStathz  int32\n\tProfhz  int32\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go",
    "content": "// cgo -godefs -- -fsigned-char types_openbsd.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build arm,openbsd\n\npackage unix\n\nconst (\n\tSizeofPtr      = 0x4\n\tSizeofShort    = 0x2\n\tSizeofInt      = 0x4\n\tSizeofLong     = 0x4\n\tSizeofLongLong = 0x8\n)\n\ntype (\n\t_C_short     int16\n\t_C_int       int32\n\t_C_long      int32\n\t_C_long_long int64\n)\n\ntype Timespec struct {\n\tSec  int64\n\tNsec int32\n\t_    [4]byte\n}\n\ntype Timeval struct {\n\tSec  int64\n\tUsec int32\n\t_    [4]byte\n}\n\ntype Rusage struct {\n\tUtime    Timeval\n\tStime    Timeval\n\tMaxrss   int32\n\tIxrss    int32\n\tIdrss    int32\n\tIsrss    int32\n\tMinflt   int32\n\tMajflt   int32\n\tNswap    int32\n\tInblock  int32\n\tOublock  int32\n\tMsgsnd   int32\n\tMsgrcv   int32\n\tNsignals int32\n\tNvcsw    int32\n\tNivcsw   int32\n}\n\ntype Rlimit struct {\n\tCur uint64\n\tMax uint64\n}\n\ntype _Gid_t uint32\n\ntype Stat_t struct {\n\tMode    uint32\n\tDev     int32\n\tIno     uint64\n\tNlink   uint32\n\tUid     uint32\n\tGid     uint32\n\tRdev    int32\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\tSize    int64\n\tBlocks  int64\n\tBlksize int32\n\tFlags   uint32\n\tGen     uint32\n\t_       [4]byte\n\t_       Timespec\n}\n\ntype Statfs_t struct {\n\tF_flags       uint32\n\tF_bsize       uint32\n\tF_iosize      uint32\n\t_             [4]byte\n\tF_blocks      uint64\n\tF_bfree       uint64\n\tF_bavail      int64\n\tF_files       uint64\n\tF_ffree       uint64\n\tF_favail      int64\n\tF_syncwrites  uint64\n\tF_syncreads   uint64\n\tF_asyncwrites uint64\n\tF_asyncreads  uint64\n\tF_fsid        Fsid\n\tF_namemax     uint32\n\tF_owner       uint32\n\tF_ctime       uint64\n\tF_fstypename  [16]int8\n\tF_mntonname   [90]int8\n\tF_mntfromname [90]int8\n\tF_mntfromspec [90]int8\n\t_             [2]byte\n\tMount_info    [160]byte\n}\n\ntype Flock_t struct {\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\tType   int16\n\tWhence int16\n}\n\ntype Dirent struct {\n\tFileno uint64\n\tOff    int64\n\tReclen uint16\n\tType   uint8\n\tNamlen uint8\n\t_      [4]uint8\n\tName   [256]int8\n}\n\ntype Fsid struct {\n\tVal [2]int32\n}\n\nconst (\n\tPathMax = 0x400\n)\n\ntype RawSockaddrInet4 struct {\n\tLen    uint8\n\tFamily uint8\n\tPort   uint16\n\tAddr   [4]byte /* in_addr */\n\tZero   [8]int8\n}\n\ntype RawSockaddrInet6 struct {\n\tLen      uint8\n\tFamily   uint8\n\tPort     uint16\n\tFlowinfo uint32\n\tAddr     [16]byte /* in6_addr */\n\tScope_id uint32\n}\n\ntype RawSockaddrUnix struct {\n\tLen    uint8\n\tFamily uint8\n\tPath   [104]int8\n}\n\ntype RawSockaddrDatalink struct {\n\tLen    uint8\n\tFamily uint8\n\tIndex  uint16\n\tType   uint8\n\tNlen   uint8\n\tAlen   uint8\n\tSlen   uint8\n\tData   [24]int8\n}\n\ntype RawSockaddr struct {\n\tLen    uint8\n\tFamily uint8\n\tData   [14]int8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [92]int8\n}\n\ntype _Socklen uint32\n\ntype Linger struct {\n\tOnoff  int32\n\tLinger int32\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint32\n}\n\ntype IPMreq struct {\n\tMultiaddr [4]byte /* in_addr */\n\tInterface [4]byte /* in_addr */\n}\n\ntype IPv6Mreq struct {\n\tMultiaddr [16]byte /* in6_addr */\n\tInterface uint32\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tIov        *Iovec\n\tIovlen     uint32\n\tControl    *byte\n\tControllen uint32\n\tFlags      int32\n}\n\ntype Cmsghdr struct {\n\tLen   uint32\n\tLevel int32\n\tType  int32\n}\n\ntype Inet6Pktinfo struct {\n\tAddr    [16]byte /* in6_addr */\n\tIfindex uint32\n}\n\ntype IPv6MTUInfo struct {\n\tAddr RawSockaddrInet6\n\tMtu  uint32\n}\n\ntype ICMPv6Filter struct {\n\tFilt [8]uint32\n}\n\nconst (\n\tSizeofSockaddrInet4    = 0x10\n\tSizeofSockaddrInet6    = 0x1c\n\tSizeofSockaddrAny      = 0x6c\n\tSizeofSockaddrUnix     = 0x6a\n\tSizeofSockaddrDatalink = 0x20\n\tSizeofLinger           = 0x8\n\tSizeofIPMreq           = 0x8\n\tSizeofIPv6Mreq         = 0x14\n\tSizeofMsghdr           = 0x1c\n\tSizeofCmsghdr          = 0xc\n\tSizeofInet6Pktinfo     = 0x14\n\tSizeofIPv6MTUInfo      = 0x20\n\tSizeofICMPv6Filter     = 0x20\n)\n\nconst (\n\tPTRACE_TRACEME = 0x0\n\tPTRACE_CONT    = 0x7\n\tPTRACE_KILL    = 0x8\n)\n\ntype Kevent_t struct {\n\tIdent  uint32\n\tFilter int16\n\tFlags  uint16\n\tFflags uint32\n\t_      [4]byte\n\tData   int64\n\tUdata  *byte\n\t_      [4]byte\n}\n\ntype FdSet struct {\n\tBits [32]uint32\n}\n\nconst (\n\tSizeofIfMsghdr         = 0xa8\n\tSizeofIfData           = 0x90\n\tSizeofIfaMsghdr        = 0x18\n\tSizeofIfAnnounceMsghdr = 0x1a\n\tSizeofRtMsghdr         = 0x60\n\tSizeofRtMetrics        = 0x38\n)\n\ntype IfMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tHdrlen  uint16\n\tIndex   uint16\n\tTableid uint16\n\tPad1    uint8\n\tPad2    uint8\n\tAddrs   int32\n\tFlags   int32\n\tXflags  int32\n\tData    IfData\n}\n\ntype IfData struct {\n\tType         uint8\n\tAddrlen      uint8\n\tHdrlen       uint8\n\tLink_state   uint8\n\tMtu          uint32\n\tMetric       uint32\n\tRdomain      uint32\n\tBaudrate     uint64\n\tIpackets     uint64\n\tIerrors      uint64\n\tOpackets     uint64\n\tOerrors      uint64\n\tCollisions   uint64\n\tIbytes       uint64\n\tObytes       uint64\n\tImcasts      uint64\n\tOmcasts      uint64\n\tIqdrops      uint64\n\tOqdrops      uint64\n\tNoproto      uint64\n\tCapabilities uint32\n\t_            [4]byte\n\tLastchange   Timeval\n}\n\ntype IfaMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tHdrlen  uint16\n\tIndex   uint16\n\tTableid uint16\n\tPad1    uint8\n\tPad2    uint8\n\tAddrs   int32\n\tFlags   int32\n\tMetric  int32\n}\n\ntype IfAnnounceMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tHdrlen  uint16\n\tIndex   uint16\n\tWhat    uint16\n\tName    [16]int8\n}\n\ntype RtMsghdr struct {\n\tMsglen   uint16\n\tVersion  uint8\n\tType     uint8\n\tHdrlen   uint16\n\tIndex    uint16\n\tTableid  uint16\n\tPriority uint8\n\tMpls     uint8\n\tAddrs    int32\n\tFlags    int32\n\tFmask    int32\n\tPid      int32\n\tSeq      int32\n\tErrno    int32\n\tInits    uint32\n\tRmx      RtMetrics\n}\n\ntype RtMetrics struct {\n\tPksent   uint64\n\tExpire   int64\n\tLocks    uint32\n\tMtu      uint32\n\tRefcnt   uint32\n\tHopcount uint32\n\tRecvpipe uint32\n\tSendpipe uint32\n\tSsthresh uint32\n\tRtt      uint32\n\tRttvar   uint32\n\tPad      uint32\n}\n\ntype Mclpool struct{}\n\nconst (\n\tSizeofBpfVersion = 0x4\n\tSizeofBpfStat    = 0x8\n\tSizeofBpfProgram = 0x8\n\tSizeofBpfInsn    = 0x8\n\tSizeofBpfHdr     = 0x14\n)\n\ntype BpfVersion struct {\n\tMajor uint16\n\tMinor uint16\n}\n\ntype BpfStat struct {\n\tRecv uint32\n\tDrop uint32\n}\n\ntype BpfProgram struct {\n\tLen   uint32\n\tInsns *BpfInsn\n}\n\ntype BpfInsn struct {\n\tCode uint16\n\tJt   uint8\n\tJf   uint8\n\tK    uint32\n}\n\ntype BpfHdr struct {\n\tTstamp  BpfTimeval\n\tCaplen  uint32\n\tDatalen uint32\n\tHdrlen  uint16\n\t_       [2]byte\n}\n\ntype BpfTimeval struct {\n\tSec  uint32\n\tUsec uint32\n}\n\ntype Termios struct {\n\tIflag  uint32\n\tOflag  uint32\n\tCflag  uint32\n\tLflag  uint32\n\tCc     [20]uint8\n\tIspeed int32\n\tOspeed int32\n}\n\ntype Winsize struct {\n\tRow    uint16\n\tCol    uint16\n\tXpixel uint16\n\tYpixel uint16\n}\n\nconst (\n\tAT_FDCWD            = -0x64\n\tAT_SYMLINK_NOFOLLOW = 0x2\n)\n\ntype PollFd struct {\n\tFd      int32\n\tEvents  int16\n\tRevents int16\n}\n\nconst (\n\tPOLLERR    = 0x8\n\tPOLLHUP    = 0x10\n\tPOLLIN     = 0x1\n\tPOLLNVAL   = 0x20\n\tPOLLOUT    = 0x4\n\tPOLLPRI    = 0x2\n\tPOLLRDBAND = 0x80\n\tPOLLRDNORM = 0x40\n\tPOLLWRBAND = 0x100\n\tPOLLWRNORM = 0x4\n)\n\ntype Sigset_t uint32\n\ntype Utsname struct {\n\tSysname  [256]byte\n\tNodename [256]byte\n\tRelease  [256]byte\n\tVersion  [256]byte\n\tMachine  [256]byte\n}\n\nconst SizeofUvmexp = 0x158\n\ntype Uvmexp struct {\n\tPagesize           int32\n\tPagemask           int32\n\tPageshift          int32\n\tNpages             int32\n\tFree               int32\n\tActive             int32\n\tInactive           int32\n\tPaging             int32\n\tWired              int32\n\tZeropages          int32\n\tReserve_pagedaemon int32\n\tReserve_kernel     int32\n\tUnused01           int32\n\tVnodepages         int32\n\tVtextpages         int32\n\tFreemin            int32\n\tFreetarg           int32\n\tInactarg           int32\n\tWiredmax           int32\n\tAnonmin            int32\n\tVtextmin           int32\n\tVnodemin           int32\n\tAnonminpct         int32\n\tVtextminpct        int32\n\tVnodeminpct        int32\n\tNswapdev           int32\n\tSwpages            int32\n\tSwpginuse          int32\n\tSwpgonly           int32\n\tNswget             int32\n\tNanon              int32\n\tUnused05           int32\n\tUnused06           int32\n\tFaults             int32\n\tTraps              int32\n\tIntrs              int32\n\tSwtch              int32\n\tSofts              int32\n\tSyscalls           int32\n\tPageins            int32\n\tUnused07           int32\n\tUnused08           int32\n\tPgswapin           int32\n\tPgswapout          int32\n\tForks              int32\n\tForks_ppwait       int32\n\tForks_sharevm      int32\n\tPga_zerohit        int32\n\tPga_zeromiss       int32\n\tUnused09           int32\n\tFltnoram           int32\n\tFltnoanon          int32\n\tFltnoamap          int32\n\tFltpgwait          int32\n\tFltpgrele          int32\n\tFltrelck           int32\n\tFltrelckok         int32\n\tFltanget           int32\n\tFltanretry         int32\n\tFltamcopy          int32\n\tFltnamap           int32\n\tFltnomap           int32\n\tFltlget            int32\n\tFltget             int32\n\tFlt_anon           int32\n\tFlt_acow           int32\n\tFlt_obj            int32\n\tFlt_prcopy         int32\n\tFlt_przero         int32\n\tPdwoke             int32\n\tPdrevs             int32\n\tPdswout            int32\n\tPdfreed            int32\n\tPdscans            int32\n\tPdanscan           int32\n\tPdobscan           int32\n\tPdreact            int32\n\tPdbusy             int32\n\tPdpageouts         int32\n\tPdpending          int32\n\tPddeact            int32\n\tUnused11           int32\n\tUnused12           int32\n\tUnused13           int32\n\tFpswtch            int32\n\tKmapent            int32\n}\n\nconst SizeofClockinfo = 0x14\n\ntype Clockinfo struct {\n\tHz      int32\n\tTick    int32\n\tTickadj int32\n\tStathz  int32\n\tProfhz  int32\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_openbsd_arm64.go",
    "content": "// cgo -godefs -- -fsigned-char types_openbsd.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build arm64,openbsd\n\npackage unix\n\nconst (\n\tSizeofPtr      = 0x8\n\tSizeofShort    = 0x2\n\tSizeofInt      = 0x4\n\tSizeofLong     = 0x8\n\tSizeofLongLong = 0x8\n)\n\ntype (\n\t_C_short     int16\n\t_C_int       int32\n\t_C_long      int64\n\t_C_long_long int64\n)\n\ntype Timespec struct {\n\tSec  int64\n\tNsec int64\n}\n\ntype Timeval struct {\n\tSec  int64\n\tUsec int64\n}\n\ntype Rusage struct {\n\tUtime    Timeval\n\tStime    Timeval\n\tMaxrss   int64\n\tIxrss    int64\n\tIdrss    int64\n\tIsrss    int64\n\tMinflt   int64\n\tMajflt   int64\n\tNswap    int64\n\tInblock  int64\n\tOublock  int64\n\tMsgsnd   int64\n\tMsgrcv   int64\n\tNsignals int64\n\tNvcsw    int64\n\tNivcsw   int64\n}\n\ntype Rlimit struct {\n\tCur uint64\n\tMax uint64\n}\n\ntype _Gid_t uint32\n\ntype Stat_t struct {\n\tMode    uint32\n\tDev     int32\n\tIno     uint64\n\tNlink   uint32\n\tUid     uint32\n\tGid     uint32\n\tRdev    int32\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\tSize    int64\n\tBlocks  int64\n\tBlksize int32\n\tFlags   uint32\n\tGen     uint32\n\t_       Timespec\n}\n\ntype Statfs_t struct {\n\tF_flags       uint32\n\tF_bsize       uint32\n\tF_iosize      uint32\n\tF_blocks      uint64\n\tF_bfree       uint64\n\tF_bavail      int64\n\tF_files       uint64\n\tF_ffree       uint64\n\tF_favail      int64\n\tF_syncwrites  uint64\n\tF_syncreads   uint64\n\tF_asyncwrites uint64\n\tF_asyncreads  uint64\n\tF_fsid        Fsid\n\tF_namemax     uint32\n\tF_owner       uint32\n\tF_ctime       uint64\n\tF_fstypename  [16]int8\n\tF_mntonname   [90]int8\n\tF_mntfromname [90]int8\n\tF_mntfromspec [90]int8\n\t_             [2]byte\n\tMount_info    [160]byte\n}\n\ntype Flock_t struct {\n\tStart  int64\n\tLen    int64\n\tPid    int32\n\tType   int16\n\tWhence int16\n}\n\ntype Dirent struct {\n\tFileno uint64\n\tOff    int64\n\tReclen uint16\n\tType   uint8\n\tNamlen uint8\n\t_      [4]uint8\n\tName   [256]int8\n}\n\ntype Fsid struct {\n\tVal [2]int32\n}\n\nconst (\n\tPathMax = 0x400\n)\n\ntype RawSockaddrInet4 struct {\n\tLen    uint8\n\tFamily uint8\n\tPort   uint16\n\tAddr   [4]byte /* in_addr */\n\tZero   [8]int8\n}\n\ntype RawSockaddrInet6 struct {\n\tLen      uint8\n\tFamily   uint8\n\tPort     uint16\n\tFlowinfo uint32\n\tAddr     [16]byte /* in6_addr */\n\tScope_id uint32\n}\n\ntype RawSockaddrUnix struct {\n\tLen    uint8\n\tFamily uint8\n\tPath   [104]int8\n}\n\ntype RawSockaddrDatalink struct {\n\tLen    uint8\n\tFamily uint8\n\tIndex  uint16\n\tType   uint8\n\tNlen   uint8\n\tAlen   uint8\n\tSlen   uint8\n\tData   [24]int8\n}\n\ntype RawSockaddr struct {\n\tLen    uint8\n\tFamily uint8\n\tData   [14]int8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [92]int8\n}\n\ntype _Socklen uint32\n\ntype Linger struct {\n\tOnoff  int32\n\tLinger int32\n}\n\ntype Iovec struct {\n\tBase *byte\n\tLen  uint64\n}\n\ntype IPMreq struct {\n\tMultiaddr [4]byte /* in_addr */\n\tInterface [4]byte /* in_addr */\n}\n\ntype IPv6Mreq struct {\n\tMultiaddr [16]byte /* in6_addr */\n\tInterface uint32\n}\n\ntype Msghdr struct {\n\tName       *byte\n\tNamelen    uint32\n\tIov        *Iovec\n\tIovlen     uint32\n\tControl    *byte\n\tControllen uint32\n\tFlags      int32\n}\n\ntype Cmsghdr struct {\n\tLen   uint32\n\tLevel int32\n\tType  int32\n}\n\ntype Inet6Pktinfo struct {\n\tAddr    [16]byte /* in6_addr */\n\tIfindex uint32\n}\n\ntype IPv6MTUInfo struct {\n\tAddr RawSockaddrInet6\n\tMtu  uint32\n}\n\ntype ICMPv6Filter struct {\n\tFilt [8]uint32\n}\n\nconst (\n\tSizeofSockaddrInet4    = 0x10\n\tSizeofSockaddrInet6    = 0x1c\n\tSizeofSockaddrAny      = 0x6c\n\tSizeofSockaddrUnix     = 0x6a\n\tSizeofSockaddrDatalink = 0x20\n\tSizeofLinger           = 0x8\n\tSizeofIPMreq           = 0x8\n\tSizeofIPv6Mreq         = 0x14\n\tSizeofMsghdr           = 0x30\n\tSizeofCmsghdr          = 0xc\n\tSizeofInet6Pktinfo     = 0x14\n\tSizeofIPv6MTUInfo      = 0x20\n\tSizeofICMPv6Filter     = 0x20\n)\n\nconst (\n\tPTRACE_TRACEME = 0x0\n\tPTRACE_CONT    = 0x7\n\tPTRACE_KILL    = 0x8\n)\n\ntype Kevent_t struct {\n\tIdent  uint64\n\tFilter int16\n\tFlags  uint16\n\tFflags uint32\n\tData   int64\n\tUdata  *byte\n}\n\ntype FdSet struct {\n\tBits [32]uint32\n}\n\nconst (\n\tSizeofIfMsghdr         = 0xa8\n\tSizeofIfData           = 0x90\n\tSizeofIfaMsghdr        = 0x18\n\tSizeofIfAnnounceMsghdr = 0x1a\n\tSizeofRtMsghdr         = 0x60\n\tSizeofRtMetrics        = 0x38\n)\n\ntype IfMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tHdrlen  uint16\n\tIndex   uint16\n\tTableid uint16\n\tPad1    uint8\n\tPad2    uint8\n\tAddrs   int32\n\tFlags   int32\n\tXflags  int32\n\tData    IfData\n}\n\ntype IfData struct {\n\tType         uint8\n\tAddrlen      uint8\n\tHdrlen       uint8\n\tLink_state   uint8\n\tMtu          uint32\n\tMetric       uint32\n\tRdomain      uint32\n\tBaudrate     uint64\n\tIpackets     uint64\n\tIerrors      uint64\n\tOpackets     uint64\n\tOerrors      uint64\n\tCollisions   uint64\n\tIbytes       uint64\n\tObytes       uint64\n\tImcasts      uint64\n\tOmcasts      uint64\n\tIqdrops      uint64\n\tOqdrops      uint64\n\tNoproto      uint64\n\tCapabilities uint32\n\tLastchange   Timeval\n}\n\ntype IfaMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tHdrlen  uint16\n\tIndex   uint16\n\tTableid uint16\n\tPad1    uint8\n\tPad2    uint8\n\tAddrs   int32\n\tFlags   int32\n\tMetric  int32\n}\n\ntype IfAnnounceMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tHdrlen  uint16\n\tIndex   uint16\n\tWhat    uint16\n\tName    [16]int8\n}\n\ntype RtMsghdr struct {\n\tMsglen   uint16\n\tVersion  uint8\n\tType     uint8\n\tHdrlen   uint16\n\tIndex    uint16\n\tTableid  uint16\n\tPriority uint8\n\tMpls     uint8\n\tAddrs    int32\n\tFlags    int32\n\tFmask    int32\n\tPid      int32\n\tSeq      int32\n\tErrno    int32\n\tInits    uint32\n\tRmx      RtMetrics\n}\n\ntype RtMetrics struct {\n\tPksent   uint64\n\tExpire   int64\n\tLocks    uint32\n\tMtu      uint32\n\tRefcnt   uint32\n\tHopcount uint32\n\tRecvpipe uint32\n\tSendpipe uint32\n\tSsthresh uint32\n\tRtt      uint32\n\tRttvar   uint32\n\tPad      uint32\n}\n\ntype Mclpool struct{}\n\nconst (\n\tSizeofBpfVersion = 0x4\n\tSizeofBpfStat    = 0x8\n\tSizeofBpfProgram = 0x10\n\tSizeofBpfInsn    = 0x8\n\tSizeofBpfHdr     = 0x14\n)\n\ntype BpfVersion struct {\n\tMajor uint16\n\tMinor uint16\n}\n\ntype BpfStat struct {\n\tRecv uint32\n\tDrop uint32\n}\n\ntype BpfProgram struct {\n\tLen   uint32\n\tInsns *BpfInsn\n}\n\ntype BpfInsn struct {\n\tCode uint16\n\tJt   uint8\n\tJf   uint8\n\tK    uint32\n}\n\ntype BpfHdr struct {\n\tTstamp  BpfTimeval\n\tCaplen  uint32\n\tDatalen uint32\n\tHdrlen  uint16\n\t_       [2]byte\n}\n\ntype BpfTimeval struct {\n\tSec  uint32\n\tUsec uint32\n}\n\ntype Termios struct {\n\tIflag  uint32\n\tOflag  uint32\n\tCflag  uint32\n\tLflag  uint32\n\tCc     [20]uint8\n\tIspeed int32\n\tOspeed int32\n}\n\ntype Winsize struct {\n\tRow    uint16\n\tCol    uint16\n\tXpixel uint16\n\tYpixel uint16\n}\n\nconst (\n\tAT_FDCWD            = -0x64\n\tAT_SYMLINK_NOFOLLOW = 0x2\n)\n\ntype PollFd struct {\n\tFd      int32\n\tEvents  int16\n\tRevents int16\n}\n\nconst (\n\tPOLLERR    = 0x8\n\tPOLLHUP    = 0x10\n\tPOLLIN     = 0x1\n\tPOLLNVAL   = 0x20\n\tPOLLOUT    = 0x4\n\tPOLLPRI    = 0x2\n\tPOLLRDBAND = 0x80\n\tPOLLRDNORM = 0x40\n\tPOLLWRBAND = 0x100\n\tPOLLWRNORM = 0x4\n)\n\ntype Sigset_t uint32\n\ntype Utsname struct {\n\tSysname  [256]byte\n\tNodename [256]byte\n\tRelease  [256]byte\n\tVersion  [256]byte\n\tMachine  [256]byte\n}\n\nconst SizeofUvmexp = 0x158\n\ntype Uvmexp struct {\n\tPagesize           int32\n\tPagemask           int32\n\tPageshift          int32\n\tNpages             int32\n\tFree               int32\n\tActive             int32\n\tInactive           int32\n\tPaging             int32\n\tWired              int32\n\tZeropages          int32\n\tReserve_pagedaemon int32\n\tReserve_kernel     int32\n\tUnused01           int32\n\tVnodepages         int32\n\tVtextpages         int32\n\tFreemin            int32\n\tFreetarg           int32\n\tInactarg           int32\n\tWiredmax           int32\n\tAnonmin            int32\n\tVtextmin           int32\n\tVnodemin           int32\n\tAnonminpct         int32\n\tVtextminpct        int32\n\tVnodeminpct        int32\n\tNswapdev           int32\n\tSwpages            int32\n\tSwpginuse          int32\n\tSwpgonly           int32\n\tNswget             int32\n\tNanon              int32\n\tUnused05           int32\n\tUnused06           int32\n\tFaults             int32\n\tTraps              int32\n\tIntrs              int32\n\tSwtch              int32\n\tSofts              int32\n\tSyscalls           int32\n\tPageins            int32\n\tUnused07           int32\n\tUnused08           int32\n\tPgswapin           int32\n\tPgswapout          int32\n\tForks              int32\n\tForks_ppwait       int32\n\tForks_sharevm      int32\n\tPga_zerohit        int32\n\tPga_zeromiss       int32\n\tUnused09           int32\n\tFltnoram           int32\n\tFltnoanon          int32\n\tFltnoamap          int32\n\tFltpgwait          int32\n\tFltpgrele          int32\n\tFltrelck           int32\n\tFltrelckok         int32\n\tFltanget           int32\n\tFltanretry         int32\n\tFltamcopy          int32\n\tFltnamap           int32\n\tFltnomap           int32\n\tFltlget            int32\n\tFltget             int32\n\tFlt_anon           int32\n\tFlt_acow           int32\n\tFlt_obj            int32\n\tFlt_prcopy         int32\n\tFlt_przero         int32\n\tPdwoke             int32\n\tPdrevs             int32\n\tPdswout            int32\n\tPdfreed            int32\n\tPdscans            int32\n\tPdanscan           int32\n\tPdobscan           int32\n\tPdreact            int32\n\tPdbusy             int32\n\tPdpageouts         int32\n\tPdpending          int32\n\tPddeact            int32\n\tUnused11           int32\n\tUnused12           int32\n\tUnused13           int32\n\tFpswtch            int32\n\tKmapent            int32\n}\n\nconst SizeofClockinfo = 0x14\n\ntype Clockinfo struct {\n\tHz      int32\n\tTick    int32\n\tTickadj int32\n\tStathz  int32\n\tProfhz  int32\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go",
    "content": "// cgo -godefs types_solaris.go | go run mkpost.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n// +build amd64,solaris\n\npackage unix\n\nconst (\n\tSizeofPtr      = 0x8\n\tSizeofShort    = 0x2\n\tSizeofInt      = 0x4\n\tSizeofLong     = 0x8\n\tSizeofLongLong = 0x8\n\tPathMax        = 0x400\n\tMaxHostNameLen = 0x100\n)\n\ntype (\n\t_C_short     int16\n\t_C_int       int32\n\t_C_long      int64\n\t_C_long_long int64\n)\n\ntype Timespec struct {\n\tSec  int64\n\tNsec int64\n}\n\ntype Timeval struct {\n\tSec  int64\n\tUsec int64\n}\n\ntype Timeval32 struct {\n\tSec  int32\n\tUsec int32\n}\n\ntype Tms struct {\n\tUtime  int64\n\tStime  int64\n\tCutime int64\n\tCstime int64\n}\n\ntype Utimbuf struct {\n\tActime  int64\n\tModtime int64\n}\n\ntype Rusage struct {\n\tUtime    Timeval\n\tStime    Timeval\n\tMaxrss   int64\n\tIxrss    int64\n\tIdrss    int64\n\tIsrss    int64\n\tMinflt   int64\n\tMajflt   int64\n\tNswap    int64\n\tInblock  int64\n\tOublock  int64\n\tMsgsnd   int64\n\tMsgrcv   int64\n\tNsignals int64\n\tNvcsw    int64\n\tNivcsw   int64\n}\n\ntype Rlimit struct {\n\tCur uint64\n\tMax uint64\n}\n\ntype _Gid_t uint32\n\ntype Stat_t struct {\n\tDev     uint64\n\tIno     uint64\n\tMode    uint32\n\tNlink   uint32\n\tUid     uint32\n\tGid     uint32\n\tRdev    uint64\n\tSize    int64\n\tAtim    Timespec\n\tMtim    Timespec\n\tCtim    Timespec\n\tBlksize int32\n\t_       [4]byte\n\tBlocks  int64\n\tFstype  [16]int8\n}\n\ntype Flock_t struct {\n\tType   int16\n\tWhence int16\n\t_      [4]byte\n\tStart  int64\n\tLen    int64\n\tSysid  int32\n\tPid    int32\n\tPad    [4]int64\n}\n\ntype Dirent struct {\n\tIno    uint64\n\tOff    int64\n\tReclen uint16\n\tName   [1]int8\n\t_      [5]byte\n}\n\ntype _Fsblkcnt_t uint64\n\ntype Statvfs_t struct {\n\tBsize    uint64\n\tFrsize   uint64\n\tBlocks   uint64\n\tBfree    uint64\n\tBavail   uint64\n\tFiles    uint64\n\tFfree    uint64\n\tFavail   uint64\n\tFsid     uint64\n\tBasetype [16]int8\n\tFlag     uint64\n\tNamemax  uint64\n\tFstr     [32]int8\n}\n\ntype RawSockaddrInet4 struct {\n\tFamily uint16\n\tPort   uint16\n\tAddr   [4]byte /* in_addr */\n\tZero   [8]int8\n}\n\ntype RawSockaddrInet6 struct {\n\tFamily         uint16\n\tPort           uint16\n\tFlowinfo       uint32\n\tAddr           [16]byte /* in6_addr */\n\tScope_id       uint32\n\tX__sin6_src_id uint32\n}\n\ntype RawSockaddrUnix struct {\n\tFamily uint16\n\tPath   [108]int8\n}\n\ntype RawSockaddrDatalink struct {\n\tFamily uint16\n\tIndex  uint16\n\tType   uint8\n\tNlen   uint8\n\tAlen   uint8\n\tSlen   uint8\n\tData   [244]int8\n}\n\ntype RawSockaddr struct {\n\tFamily uint16\n\tData   [14]int8\n}\n\ntype RawSockaddrAny struct {\n\tAddr RawSockaddr\n\tPad  [236]int8\n}\n\ntype _Socklen uint32\n\ntype Linger struct {\n\tOnoff  int32\n\tLinger int32\n}\n\ntype Iovec struct {\n\tBase *int8\n\tLen  uint64\n}\n\ntype IPMreq struct {\n\tMultiaddr [4]byte /* in_addr */\n\tInterface [4]byte /* in_addr */\n}\n\ntype IPv6Mreq struct {\n\tMultiaddr [16]byte /* in6_addr */\n\tInterface uint32\n}\n\ntype Msghdr struct {\n\tName         *byte\n\tNamelen      uint32\n\t_            [4]byte\n\tIov          *Iovec\n\tIovlen       int32\n\t_            [4]byte\n\tAccrights    *int8\n\tAccrightslen int32\n\t_            [4]byte\n}\n\ntype Cmsghdr struct {\n\tLen   uint32\n\tLevel int32\n\tType  int32\n}\n\ntype Inet6Pktinfo struct {\n\tAddr    [16]byte /* in6_addr */\n\tIfindex uint32\n}\n\ntype IPv6MTUInfo struct {\n\tAddr RawSockaddrInet6\n\tMtu  uint32\n}\n\ntype ICMPv6Filter struct {\n\tX__icmp6_filt [8]uint32\n}\n\nconst (\n\tSizeofSockaddrInet4    = 0x10\n\tSizeofSockaddrInet6    = 0x20\n\tSizeofSockaddrAny      = 0xfc\n\tSizeofSockaddrUnix     = 0x6e\n\tSizeofSockaddrDatalink = 0xfc\n\tSizeofLinger           = 0x8\n\tSizeofIPMreq           = 0x8\n\tSizeofIPv6Mreq         = 0x14\n\tSizeofMsghdr           = 0x30\n\tSizeofCmsghdr          = 0xc\n\tSizeofInet6Pktinfo     = 0x14\n\tSizeofIPv6MTUInfo      = 0x24\n\tSizeofICMPv6Filter     = 0x20\n)\n\ntype FdSet struct {\n\tBits [1024]int64\n}\n\ntype Utsname struct {\n\tSysname  [257]byte\n\tNodename [257]byte\n\tRelease  [257]byte\n\tVersion  [257]byte\n\tMachine  [257]byte\n}\n\ntype Ustat_t struct {\n\tTfree  int64\n\tTinode uint64\n\tFname  [6]int8\n\tFpack  [6]int8\n\t_      [4]byte\n}\n\nconst (\n\tAT_FDCWD            = 0xffd19553\n\tAT_SYMLINK_NOFOLLOW = 0x1000\n\tAT_SYMLINK_FOLLOW   = 0x2000\n\tAT_REMOVEDIR        = 0x1\n\tAT_EACCESS          = 0x4\n)\n\nconst (\n\tSizeofIfMsghdr  = 0x54\n\tSizeofIfData    = 0x44\n\tSizeofIfaMsghdr = 0x14\n\tSizeofRtMsghdr  = 0x4c\n\tSizeofRtMetrics = 0x28\n)\n\ntype IfMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\t_       [2]byte\n\tData    IfData\n}\n\ntype IfData struct {\n\tType       uint8\n\tAddrlen    uint8\n\tHdrlen     uint8\n\t_          [1]byte\n\tMtu        uint32\n\tMetric     uint32\n\tBaudrate   uint32\n\tIpackets   uint32\n\tIerrors    uint32\n\tOpackets   uint32\n\tOerrors    uint32\n\tCollisions uint32\n\tIbytes     uint32\n\tObytes     uint32\n\tImcasts    uint32\n\tOmcasts    uint32\n\tIqdrops    uint32\n\tNoproto    uint32\n\tLastchange Timeval32\n}\n\ntype IfaMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tAddrs   int32\n\tFlags   int32\n\tIndex   uint16\n\t_       [2]byte\n\tMetric  int32\n}\n\ntype RtMsghdr struct {\n\tMsglen  uint16\n\tVersion uint8\n\tType    uint8\n\tIndex   uint16\n\t_       [2]byte\n\tFlags   int32\n\tAddrs   int32\n\tPid     int32\n\tSeq     int32\n\tErrno   int32\n\tUse     int32\n\tInits   uint32\n\tRmx     RtMetrics\n}\n\ntype RtMetrics struct {\n\tLocks    uint32\n\tMtu      uint32\n\tHopcount uint32\n\tExpire   uint32\n\tRecvpipe uint32\n\tSendpipe uint32\n\tSsthresh uint32\n\tRtt      uint32\n\tRttvar   uint32\n\tPksent   uint32\n}\n\nconst (\n\tSizeofBpfVersion = 0x4\n\tSizeofBpfStat    = 0x80\n\tSizeofBpfProgram = 0x10\n\tSizeofBpfInsn    = 0x8\n\tSizeofBpfHdr     = 0x14\n)\n\ntype BpfVersion struct {\n\tMajor uint16\n\tMinor uint16\n}\n\ntype BpfStat struct {\n\tRecv    uint64\n\tDrop    uint64\n\tCapt    uint64\n\tPadding [13]uint64\n}\n\ntype BpfProgram struct {\n\tLen   uint32\n\t_     [4]byte\n\tInsns *BpfInsn\n}\n\ntype BpfInsn struct {\n\tCode uint16\n\tJt   uint8\n\tJf   uint8\n\tK    uint32\n}\n\ntype BpfTimeval struct {\n\tSec  int32\n\tUsec int32\n}\n\ntype BpfHdr struct {\n\tTstamp  BpfTimeval\n\tCaplen  uint32\n\tDatalen uint32\n\tHdrlen  uint16\n\t_       [2]byte\n}\n\ntype Termios struct {\n\tIflag uint32\n\tOflag uint32\n\tCflag uint32\n\tLflag uint32\n\tCc    [19]uint8\n\t_     [1]byte\n}\n\ntype Termio struct {\n\tIflag uint16\n\tOflag uint16\n\tCflag uint16\n\tLflag uint16\n\tLine  int8\n\tCc    [8]uint8\n\t_     [1]byte\n}\n\ntype Winsize struct {\n\tRow    uint16\n\tCol    uint16\n\tXpixel uint16\n\tYpixel uint16\n}\n\ntype PollFd struct {\n\tFd      int32\n\tEvents  int16\n\tRevents int16\n}\n\nconst (\n\tPOLLERR    = 0x8\n\tPOLLHUP    = 0x10\n\tPOLLIN     = 0x1\n\tPOLLNVAL   = 0x20\n\tPOLLOUT    = 0x4\n\tPOLLPRI    = 0x2\n\tPOLLRDBAND = 0x80\n\tPOLLRDNORM = 0x40\n\tPOLLWRBAND = 0x100\n\tPOLLWRNORM = 0x4\n)\n"
  },
  {
    "path": "vendor/golang.org/x/text/LICENSE",
    "content": "Copyright (c) 2009 The Go Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "vendor/golang.org/x/text/PATENTS",
    "content": "Additional IP Rights Grant (Patents)\n\n\"This implementation\" means the copyrightable works distributed by\nGoogle as part of the Go project.\n\nGoogle hereby grants to You a perpetual, worldwide, non-exclusive,\nno-charge, royalty-free, irrevocable (except as stated in this section)\npatent license to make, have made, use, offer to sell, sell, import,\ntransfer and otherwise run, modify and propagate the contents of this\nimplementation of Go, where such license applies only to those patent\nclaims, both currently owned or controlled by Google and acquired in\nthe future, licensable by Google that are necessarily infringed by this\nimplementation of Go.  This grant does not include claims that would be\ninfringed only as a consequence of further modification of this\nimplementation.  If you or your agent or exclusive licensee institute or\norder or agree to the institution of patent litigation against any\nentity (including a cross-claim or counterclaim in a lawsuit) alleging\nthat this implementation of Go or any code incorporated within this\nimplementation of Go constitutes direct or contributory patent\ninfringement, or inducement of patent infringement, then any patent\nrights granted to you under this License for this implementation of Go\nshall terminate as of the date such litigation is filed.\n"
  },
  {
    "path": "vendor/golang.org/x/text/secure/bidirule/bidirule.go",
    "content": "// Copyright 2016 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package bidirule implements the Bidi Rule defined by RFC 5893.\n//\n// This package is under development. The API may change without notice and\n// without preserving backward compatibility.\npackage bidirule\n\nimport (\n\t\"errors\"\n\t\"unicode/utf8\"\n\n\t\"golang.org/x/text/transform\"\n\t\"golang.org/x/text/unicode/bidi\"\n)\n\n// This file contains an implementation of RFC 5893: Right-to-Left Scripts for\n// Internationalized Domain Names for Applications (IDNA)\n//\n// A label is an individual component of a domain name.  Labels are usually\n// shown separated by dots; for example, the domain name \"www.example.com\" is\n// composed of three labels: \"www\", \"example\", and \"com\".\n//\n// An RTL label is a label that contains at least one character of class R, AL,\n// or AN. An LTR label is any label that is not an RTL label.\n//\n// A \"Bidi domain name\" is a domain name that contains at least one RTL label.\n//\n//  The following guarantees can be made based on the above:\n//\n//  o  In a domain name consisting of only labels that satisfy the rule,\n//     the requirements of Section 3 are satisfied.  Note that even LTR\n//     labels and pure ASCII labels have to be tested.\n//\n//  o  In a domain name consisting of only LDH labels (as defined in the\n//     Definitions document [RFC5890]) and labels that satisfy the rule,\n//     the requirements of Section 3 are satisfied as long as a label\n//     that starts with an ASCII digit does not come after a\n//     right-to-left label.\n//\n//  No guarantee is given for other combinations.\n\n// ErrInvalid indicates a label is invalid according to the Bidi Rule.\nvar ErrInvalid = errors.New(\"bidirule: failed Bidi Rule\")\n\ntype ruleState uint8\n\nconst (\n\truleInitial ruleState = iota\n\truleLTR\n\truleLTRFinal\n\truleRTL\n\truleRTLFinal\n\truleInvalid\n)\n\ntype ruleTransition struct {\n\tnext ruleState\n\tmask uint16\n}\n\nvar transitions = [...][2]ruleTransition{\n\t// [2.1] The first character must be a character with Bidi property L, R, or\n\t// AL. If it has the R or AL property, it is an RTL label; if it has the L\n\t// property, it is an LTR label.\n\truleInitial: {\n\t\t{ruleLTRFinal, 1 << bidi.L},\n\t\t{ruleRTLFinal, 1<<bidi.R | 1<<bidi.AL},\n\t},\n\truleRTL: {\n\t\t// [2.3] In an RTL label, the end of the label must be a character with\n\t\t// Bidi property R, AL, EN, or AN, followed by zero or more characters\n\t\t// with Bidi property NSM.\n\t\t{ruleRTLFinal, 1<<bidi.R | 1<<bidi.AL | 1<<bidi.EN | 1<<bidi.AN},\n\n\t\t// [2.2] In an RTL label, only characters with the Bidi properties R,\n\t\t// AL, AN, EN, ES, CS, ET, ON, BN, or NSM are allowed.\n\t\t// We exclude the entries from [2.3]\n\t\t{ruleRTL, 1<<bidi.ES | 1<<bidi.CS | 1<<bidi.ET | 1<<bidi.ON | 1<<bidi.BN | 1<<bidi.NSM},\n\t},\n\truleRTLFinal: {\n\t\t// [2.3] In an RTL label, the end of the label must be a character with\n\t\t// Bidi property R, AL, EN, or AN, followed by zero or more characters\n\t\t// with Bidi property NSM.\n\t\t{ruleRTLFinal, 1<<bidi.R | 1<<bidi.AL | 1<<bidi.EN | 1<<bidi.AN | 1<<bidi.NSM},\n\n\t\t// [2.2] In an RTL label, only characters with the Bidi properties R,\n\t\t// AL, AN, EN, ES, CS, ET, ON, BN, or NSM are allowed.\n\t\t// We exclude the entries from [2.3] and NSM.\n\t\t{ruleRTL, 1<<bidi.ES | 1<<bidi.CS | 1<<bidi.ET | 1<<bidi.ON | 1<<bidi.BN},\n\t},\n\truleLTR: {\n\t\t// [2.6] In an LTR label, the end of the label must be a character with\n\t\t// Bidi property L or EN, followed by zero or more characters with Bidi\n\t\t// property NSM.\n\t\t{ruleLTRFinal, 1<<bidi.L | 1<<bidi.EN},\n\n\t\t// [2.5] In an LTR label, only characters with the Bidi properties L,\n\t\t// EN, ES, CS, ET, ON, BN, or NSM are allowed.\n\t\t// We exclude the entries from [2.6].\n\t\t{ruleLTR, 1<<bidi.ES | 1<<bidi.CS | 1<<bidi.ET | 1<<bidi.ON | 1<<bidi.BN | 1<<bidi.NSM},\n\t},\n\truleLTRFinal: {\n\t\t// [2.6] In an LTR label, the end of the label must be a character with\n\t\t// Bidi property L or EN, followed by zero or more characters with Bidi\n\t\t// property NSM.\n\t\t{ruleLTRFinal, 1<<bidi.L | 1<<bidi.EN | 1<<bidi.NSM},\n\n\t\t// [2.5] In an LTR label, only characters with the Bidi properties L,\n\t\t// EN, ES, CS, ET, ON, BN, or NSM are allowed.\n\t\t// We exclude the entries from [2.6].\n\t\t{ruleLTR, 1<<bidi.ES | 1<<bidi.CS | 1<<bidi.ET | 1<<bidi.ON | 1<<bidi.BN},\n\t},\n\truleInvalid: {\n\t\t{ruleInvalid, 0},\n\t\t{ruleInvalid, 0},\n\t},\n}\n\n// [2.4] In an RTL label, if an EN is present, no AN may be present, and\n// vice versa.\nconst exclusiveRTL = uint16(1<<bidi.EN | 1<<bidi.AN)\n\n// From RFC 5893\n// An RTL label is a label that contains at least one character of type\n// R, AL, or AN.\n//\n// An LTR label is any label that is not an RTL label.\n\n// Direction reports the direction of the given label as defined by RFC 5893.\n// The Bidi Rule does not have to be applied to labels of the category\n// LeftToRight.\nfunc Direction(b []byte) bidi.Direction {\n\tfor i := 0; i < len(b); {\n\t\te, sz := bidi.Lookup(b[i:])\n\t\tif sz == 0 {\n\t\t\ti++\n\t\t}\n\t\tc := e.Class()\n\t\tif c == bidi.R || c == bidi.AL || c == bidi.AN {\n\t\t\treturn bidi.RightToLeft\n\t\t}\n\t\ti += sz\n\t}\n\treturn bidi.LeftToRight\n}\n\n// DirectionString reports the direction of the given label as defined by RFC\n// 5893. The Bidi Rule does not have to be applied to labels of the category\n// LeftToRight.\nfunc DirectionString(s string) bidi.Direction {\n\tfor i := 0; i < len(s); {\n\t\te, sz := bidi.LookupString(s[i:])\n\t\tif sz == 0 {\n\t\t\ti++\n\t\t\tcontinue\n\t\t}\n\t\tc := e.Class()\n\t\tif c == bidi.R || c == bidi.AL || c == bidi.AN {\n\t\t\treturn bidi.RightToLeft\n\t\t}\n\t\ti += sz\n\t}\n\treturn bidi.LeftToRight\n}\n\n// Valid reports whether b conforms to the BiDi rule.\nfunc Valid(b []byte) bool {\n\tvar t Transformer\n\tif n, ok := t.advance(b); !ok || n < len(b) {\n\t\treturn false\n\t}\n\treturn t.isFinal()\n}\n\n// ValidString reports whether s conforms to the BiDi rule.\nfunc ValidString(s string) bool {\n\tvar t Transformer\n\tif n, ok := t.advanceString(s); !ok || n < len(s) {\n\t\treturn false\n\t}\n\treturn t.isFinal()\n}\n\n// New returns a Transformer that verifies that input adheres to the Bidi Rule.\nfunc New() *Transformer {\n\treturn &Transformer{}\n}\n\n// Transformer implements transform.Transform.\ntype Transformer struct {\n\tstate  ruleState\n\thasRTL bool\n\tseen   uint16\n}\n\n// A rule can only be violated for \"Bidi Domain names\", meaning if one of the\n// following categories has been observed.\nfunc (t *Transformer) isRTL() bool {\n\tconst isRTL = 1<<bidi.R | 1<<bidi.AL | 1<<bidi.AN\n\treturn t.seen&isRTL != 0\n}\n\n// Reset implements transform.Transformer.\nfunc (t *Transformer) Reset() { *t = Transformer{} }\n\n// Transform implements transform.Transformer. This Transformer has state and\n// needs to be reset between uses.\nfunc (t *Transformer) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {\n\tif len(dst) < len(src) {\n\t\tsrc = src[:len(dst)]\n\t\tatEOF = false\n\t\terr = transform.ErrShortDst\n\t}\n\tn, err1 := t.Span(src, atEOF)\n\tcopy(dst, src[:n])\n\tif err == nil || err1 != nil && err1 != transform.ErrShortSrc {\n\t\terr = err1\n\t}\n\treturn n, n, err\n}\n\n// Span returns the first n bytes of src that conform to the Bidi rule.\nfunc (t *Transformer) Span(src []byte, atEOF bool) (n int, err error) {\n\tif t.state == ruleInvalid && t.isRTL() {\n\t\treturn 0, ErrInvalid\n\t}\n\tn, ok := t.advance(src)\n\tswitch {\n\tcase !ok:\n\t\terr = ErrInvalid\n\tcase n < len(src):\n\t\tif !atEOF {\n\t\t\terr = transform.ErrShortSrc\n\t\t\tbreak\n\t\t}\n\t\terr = ErrInvalid\n\tcase !t.isFinal():\n\t\terr = ErrInvalid\n\t}\n\treturn n, err\n}\n\n// Precomputing the ASCII values decreases running time for the ASCII fast path\n// by about 30%.\nvar asciiTable [128]bidi.Properties\n\nfunc init() {\n\tfor i := range asciiTable {\n\t\tp, _ := bidi.LookupRune(rune(i))\n\t\tasciiTable[i] = p\n\t}\n}\n\nfunc (t *Transformer) advance(s []byte) (n int, ok bool) {\n\tvar e bidi.Properties\n\tvar sz int\n\tfor n < len(s) {\n\t\tif s[n] < utf8.RuneSelf {\n\t\t\te, sz = asciiTable[s[n]], 1\n\t\t} else {\n\t\t\te, sz = bidi.Lookup(s[n:])\n\t\t\tif sz <= 1 {\n\t\t\t\tif sz == 1 {\n\t\t\t\t\t// We always consider invalid UTF-8 to be invalid, even if\n\t\t\t\t\t// the string has not yet been determined to be RTL.\n\t\t\t\t\t// TODO: is this correct?\n\t\t\t\t\treturn n, false\n\t\t\t\t}\n\t\t\t\treturn n, true // incomplete UTF-8 encoding\n\t\t\t}\n\t\t}\n\t\t// TODO: using CompactClass would result in noticeable speedup.\n\t\t// See unicode/bidi/prop.go:Properties.CompactClass.\n\t\tc := uint16(1 << e.Class())\n\t\tt.seen |= c\n\t\tif t.seen&exclusiveRTL == exclusiveRTL {\n\t\t\tt.state = ruleInvalid\n\t\t\treturn n, false\n\t\t}\n\t\tswitch tr := transitions[t.state]; {\n\t\tcase tr[0].mask&c != 0:\n\t\t\tt.state = tr[0].next\n\t\tcase tr[1].mask&c != 0:\n\t\t\tt.state = tr[1].next\n\t\tdefault:\n\t\t\tt.state = ruleInvalid\n\t\t\tif t.isRTL() {\n\t\t\t\treturn n, false\n\t\t\t}\n\t\t}\n\t\tn += sz\n\t}\n\treturn n, true\n}\n\nfunc (t *Transformer) advanceString(s string) (n int, ok bool) {\n\tvar e bidi.Properties\n\tvar sz int\n\tfor n < len(s) {\n\t\tif s[n] < utf8.RuneSelf {\n\t\t\te, sz = asciiTable[s[n]], 1\n\t\t} else {\n\t\t\te, sz = bidi.LookupString(s[n:])\n\t\t\tif sz <= 1 {\n\t\t\t\tif sz == 1 {\n\t\t\t\t\treturn n, false // invalid UTF-8\n\t\t\t\t}\n\t\t\t\treturn n, true // incomplete UTF-8 encoding\n\t\t\t}\n\t\t}\n\t\t// TODO: using CompactClass results in noticeable speedup.\n\t\t// See unicode/bidi/prop.go:Properties.CompactClass.\n\t\tc := uint16(1 << e.Class())\n\t\tt.seen |= c\n\t\tif t.seen&exclusiveRTL == exclusiveRTL {\n\t\t\tt.state = ruleInvalid\n\t\t\treturn n, false\n\t\t}\n\t\tswitch tr := transitions[t.state]; {\n\t\tcase tr[0].mask&c != 0:\n\t\t\tt.state = tr[0].next\n\t\tcase tr[1].mask&c != 0:\n\t\t\tt.state = tr[1].next\n\t\tdefault:\n\t\t\tt.state = ruleInvalid\n\t\t\tif t.isRTL() {\n\t\t\t\treturn n, false\n\t\t\t}\n\t\t}\n\t\tn += sz\n\t}\n\treturn n, true\n}\n"
  },
  {
    "path": "vendor/golang.org/x/text/secure/bidirule/bidirule10.0.0.go",
    "content": "// Copyright 2016 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build go1.10\n\npackage bidirule\n\nfunc (t *Transformer) isFinal() bool {\n\treturn t.state == ruleLTRFinal || t.state == ruleRTLFinal || t.state == ruleInitial\n}\n"
  },
  {
    "path": "vendor/golang.org/x/text/secure/bidirule/bidirule9.0.0.go",
    "content": "// Copyright 2016 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build !go1.10\n\npackage bidirule\n\nfunc (t *Transformer) isFinal() bool {\n\tif !t.isRTL() {\n\t\treturn true\n\t}\n\treturn t.state == ruleLTRFinal || t.state == ruleRTLFinal || t.state == ruleInitial\n}\n"
  },
  {
    "path": "vendor/golang.org/x/text/transform/transform.go",
    "content": "// Copyright 2013 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package transform provides reader and writer wrappers that transform the\n// bytes passing through as well as various transformations. Example\n// transformations provided by other packages include normalization and\n// conversion between character sets.\npackage transform // import \"golang.org/x/text/transform\"\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"io\"\n\t\"unicode/utf8\"\n)\n\nvar (\n\t// ErrShortDst means that the destination buffer was too short to\n\t// receive all of the transformed bytes.\n\tErrShortDst = errors.New(\"transform: short destination buffer\")\n\n\t// ErrShortSrc means that the source buffer has insufficient data to\n\t// complete the transformation.\n\tErrShortSrc = errors.New(\"transform: short source buffer\")\n\n\t// ErrEndOfSpan means that the input and output (the transformed input)\n\t// are not identical.\n\tErrEndOfSpan = errors.New(\"transform: input and output are not identical\")\n\n\t// errInconsistentByteCount means that Transform returned success (nil\n\t// error) but also returned nSrc inconsistent with the src argument.\n\terrInconsistentByteCount = errors.New(\"transform: inconsistent byte count returned\")\n\n\t// errShortInternal means that an internal buffer is not large enough\n\t// to make progress and the Transform operation must be aborted.\n\terrShortInternal = errors.New(\"transform: short internal buffer\")\n)\n\n// Transformer transforms bytes.\ntype Transformer interface {\n\t// Transform writes to dst the transformed bytes read from src, and\n\t// returns the number of dst bytes written and src bytes read. The\n\t// atEOF argument tells whether src represents the last bytes of the\n\t// input.\n\t//\n\t// Callers should always process the nDst bytes produced and account\n\t// for the nSrc bytes consumed before considering the error err.\n\t//\n\t// A nil error means that all of the transformed bytes (whether freshly\n\t// transformed from src or left over from previous Transform calls)\n\t// were written to dst. A nil error can be returned regardless of\n\t// whether atEOF is true. If err is nil then nSrc must equal len(src);\n\t// the converse is not necessarily true.\n\t//\n\t// ErrShortDst means that dst was too short to receive all of the\n\t// transformed bytes. ErrShortSrc means that src had insufficient data\n\t// to complete the transformation. If both conditions apply, then\n\t// either error may be returned. Other than the error conditions listed\n\t// here, implementations are free to report other errors that arise.\n\tTransform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error)\n\n\t// Reset resets the state and allows a Transformer to be reused.\n\tReset()\n}\n\n// SpanningTransformer extends the Transformer interface with a Span method\n// that determines how much of the input already conforms to the Transformer.\ntype SpanningTransformer interface {\n\tTransformer\n\n\t// Span returns a position in src such that transforming src[:n] results in\n\t// identical output src[:n] for these bytes. It does not necessarily return\n\t// the largest such n. The atEOF argument tells whether src represents the\n\t// last bytes of the input.\n\t//\n\t// Callers should always account for the n bytes consumed before\n\t// considering the error err.\n\t//\n\t// A nil error means that all input bytes are known to be identical to the\n\t// output produced by the Transformer. A nil error can be returned\n\t// regardless of whether atEOF is true. If err is nil, then n must\n\t// equal len(src); the converse is not necessarily true.\n\t//\n\t// ErrEndOfSpan means that the Transformer output may differ from the\n\t// input after n bytes. Note that n may be len(src), meaning that the output\n\t// would contain additional bytes after otherwise identical output.\n\t// ErrShortSrc means that src had insufficient data to determine whether the\n\t// remaining bytes would change. Other than the error conditions listed\n\t// here, implementations are free to report other errors that arise.\n\t//\n\t// Calling Span can modify the Transformer state as a side effect. In\n\t// effect, it does the transformation just as calling Transform would, only\n\t// without copying to a destination buffer and only up to a point it can\n\t// determine the input and output bytes are the same. This is obviously more\n\t// limited than calling Transform, but can be more efficient in terms of\n\t// copying and allocating buffers. Calls to Span and Transform may be\n\t// interleaved.\n\tSpan(src []byte, atEOF bool) (n int, err error)\n}\n\n// NopResetter can be embedded by implementations of Transformer to add a nop\n// Reset method.\ntype NopResetter struct{}\n\n// Reset implements the Reset method of the Transformer interface.\nfunc (NopResetter) Reset() {}\n\n// Reader wraps another io.Reader by transforming the bytes read.\ntype Reader struct {\n\tr   io.Reader\n\tt   Transformer\n\terr error\n\n\t// dst[dst0:dst1] contains bytes that have been transformed by t but\n\t// not yet copied out via Read.\n\tdst        []byte\n\tdst0, dst1 int\n\n\t// src[src0:src1] contains bytes that have been read from r but not\n\t// yet transformed through t.\n\tsrc        []byte\n\tsrc0, src1 int\n\n\t// transformComplete is whether the transformation is complete,\n\t// regardless of whether or not it was successful.\n\ttransformComplete bool\n}\n\nconst defaultBufSize = 4096\n\n// NewReader returns a new Reader that wraps r by transforming the bytes read\n// via t. It calls Reset on t.\nfunc NewReader(r io.Reader, t Transformer) *Reader {\n\tt.Reset()\n\treturn &Reader{\n\t\tr:   r,\n\t\tt:   t,\n\t\tdst: make([]byte, defaultBufSize),\n\t\tsrc: make([]byte, defaultBufSize),\n\t}\n}\n\n// Read implements the io.Reader interface.\nfunc (r *Reader) Read(p []byte) (int, error) {\n\tn, err := 0, error(nil)\n\tfor {\n\t\t// Copy out any transformed bytes and return the final error if we are done.\n\t\tif r.dst0 != r.dst1 {\n\t\t\tn = copy(p, r.dst[r.dst0:r.dst1])\n\t\t\tr.dst0 += n\n\t\t\tif r.dst0 == r.dst1 && r.transformComplete {\n\t\t\t\treturn n, r.err\n\t\t\t}\n\t\t\treturn n, nil\n\t\t} else if r.transformComplete {\n\t\t\treturn 0, r.err\n\t\t}\n\n\t\t// Try to transform some source bytes, or to flush the transformer if we\n\t\t// are out of source bytes. We do this even if r.r.Read returned an error.\n\t\t// As the io.Reader documentation says, \"process the n > 0 bytes returned\n\t\t// before considering the error\".\n\t\tif r.src0 != r.src1 || r.err != nil {\n\t\t\tr.dst0 = 0\n\t\t\tr.dst1, n, err = r.t.Transform(r.dst, r.src[r.src0:r.src1], r.err == io.EOF)\n\t\t\tr.src0 += n\n\n\t\t\tswitch {\n\t\t\tcase err == nil:\n\t\t\t\tif r.src0 != r.src1 {\n\t\t\t\t\tr.err = errInconsistentByteCount\n\t\t\t\t}\n\t\t\t\t// The Transform call was successful; we are complete if we\n\t\t\t\t// cannot read more bytes into src.\n\t\t\t\tr.transformComplete = r.err != nil\n\t\t\t\tcontinue\n\t\t\tcase err == ErrShortDst && (r.dst1 != 0 || n != 0):\n\t\t\t\t// Make room in dst by copying out, and try again.\n\t\t\t\tcontinue\n\t\t\tcase err == ErrShortSrc && r.src1-r.src0 != len(r.src) && r.err == nil:\n\t\t\t\t// Read more bytes into src via the code below, and try again.\n\t\t\tdefault:\n\t\t\t\tr.transformComplete = true\n\t\t\t\t// The reader error (r.err) takes precedence over the\n\t\t\t\t// transformer error (err) unless r.err is nil or io.EOF.\n\t\t\t\tif r.err == nil || r.err == io.EOF {\n\t\t\t\t\tr.err = err\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\t// Move any untransformed source bytes to the start of the buffer\n\t\t// and read more bytes.\n\t\tif r.src0 != 0 {\n\t\t\tr.src0, r.src1 = 0, copy(r.src, r.src[r.src0:r.src1])\n\t\t}\n\t\tn, r.err = r.r.Read(r.src[r.src1:])\n\t\tr.src1 += n\n\t}\n}\n\n// TODO: implement ReadByte (and ReadRune??).\n\n// Writer wraps another io.Writer by transforming the bytes read.\n// The user needs to call Close to flush unwritten bytes that may\n// be buffered.\ntype Writer struct {\n\tw   io.Writer\n\tt   Transformer\n\tdst []byte\n\n\t// src[:n] contains bytes that have not yet passed through t.\n\tsrc []byte\n\tn   int\n}\n\n// NewWriter returns a new Writer that wraps w by transforming the bytes written\n// via t. It calls Reset on t.\nfunc NewWriter(w io.Writer, t Transformer) *Writer {\n\tt.Reset()\n\treturn &Writer{\n\t\tw:   w,\n\t\tt:   t,\n\t\tdst: make([]byte, defaultBufSize),\n\t\tsrc: make([]byte, defaultBufSize),\n\t}\n}\n\n// Write implements the io.Writer interface. If there are not enough\n// bytes available to complete a Transform, the bytes will be buffered\n// for the next write. Call Close to convert the remaining bytes.\nfunc (w *Writer) Write(data []byte) (n int, err error) {\n\tsrc := data\n\tif w.n > 0 {\n\t\t// Append bytes from data to the last remainder.\n\t\t// TODO: limit the amount copied on first try.\n\t\tn = copy(w.src[w.n:], data)\n\t\tw.n += n\n\t\tsrc = w.src[:w.n]\n\t}\n\tfor {\n\t\tnDst, nSrc, err := w.t.Transform(w.dst, src, false)\n\t\tif _, werr := w.w.Write(w.dst[:nDst]); werr != nil {\n\t\t\treturn n, werr\n\t\t}\n\t\tsrc = src[nSrc:]\n\t\tif w.n == 0 {\n\t\t\tn += nSrc\n\t\t} else if len(src) <= n {\n\t\t\t// Enough bytes from w.src have been consumed. We make src point\n\t\t\t// to data instead to reduce the copying.\n\t\t\tw.n = 0\n\t\t\tn -= len(src)\n\t\t\tsrc = data[n:]\n\t\t\tif n < len(data) && (err == nil || err == ErrShortSrc) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\t\tswitch err {\n\t\tcase ErrShortDst:\n\t\t\t// This error is okay as long as we are making progress.\n\t\t\tif nDst > 0 || nSrc > 0 {\n\t\t\t\tcontinue\n\t\t\t}\n\t\tcase ErrShortSrc:\n\t\t\tif len(src) < len(w.src) {\n\t\t\t\tm := copy(w.src, src)\n\t\t\t\t// If w.n > 0, bytes from data were already copied to w.src and n\n\t\t\t\t// was already set to the number of bytes consumed.\n\t\t\t\tif w.n == 0 {\n\t\t\t\t\tn += m\n\t\t\t\t}\n\t\t\t\tw.n = m\n\t\t\t\terr = nil\n\t\t\t} else if nDst > 0 || nSrc > 0 {\n\t\t\t\t// Not enough buffer to store the remainder. Keep processing as\n\t\t\t\t// long as there is progress. Without this case, transforms that\n\t\t\t\t// require a lookahead larger than the buffer may result in an\n\t\t\t\t// error. This is not something one may expect to be common in\n\t\t\t\t// practice, but it may occur when buffers are set to small\n\t\t\t\t// sizes during testing.\n\t\t\t\tcontinue\n\t\t\t}\n\t\tcase nil:\n\t\t\tif w.n > 0 {\n\t\t\t\terr = errInconsistentByteCount\n\t\t\t}\n\t\t}\n\t\treturn n, err\n\t}\n}\n\n// Close implements the io.Closer interface.\nfunc (w *Writer) Close() error {\n\tsrc := w.src[:w.n]\n\tfor {\n\t\tnDst, nSrc, err := w.t.Transform(w.dst, src, true)\n\t\tif _, werr := w.w.Write(w.dst[:nDst]); werr != nil {\n\t\t\treturn werr\n\t\t}\n\t\tif err != ErrShortDst {\n\t\t\treturn err\n\t\t}\n\t\tsrc = src[nSrc:]\n\t}\n}\n\ntype nop struct{ NopResetter }\n\nfunc (nop) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {\n\tn := copy(dst, src)\n\tif n < len(src) {\n\t\terr = ErrShortDst\n\t}\n\treturn n, n, err\n}\n\nfunc (nop) Span(src []byte, atEOF bool) (n int, err error) {\n\treturn len(src), nil\n}\n\ntype discard struct{ NopResetter }\n\nfunc (discard) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {\n\treturn 0, len(src), nil\n}\n\nvar (\n\t// Discard is a Transformer for which all Transform calls succeed\n\t// by consuming all bytes and writing nothing.\n\tDiscard Transformer = discard{}\n\n\t// Nop is a SpanningTransformer that copies src to dst.\n\tNop SpanningTransformer = nop{}\n)\n\n// chain is a sequence of links. A chain with N Transformers has N+1 links and\n// N+1 buffers. Of those N+1 buffers, the first and last are the src and dst\n// buffers given to chain.Transform and the middle N-1 buffers are intermediate\n// buffers owned by the chain. The i'th link transforms bytes from the i'th\n// buffer chain.link[i].b at read offset chain.link[i].p to the i+1'th buffer\n// chain.link[i+1].b at write offset chain.link[i+1].n, for i in [0, N).\ntype chain struct {\n\tlink []link\n\terr  error\n\t// errStart is the index at which the error occurred plus 1. Processing\n\t// errStart at this level at the next call to Transform. As long as\n\t// errStart > 0, chain will not consume any more source bytes.\n\terrStart int\n}\n\nfunc (c *chain) fatalError(errIndex int, err error) {\n\tif i := errIndex + 1; i > c.errStart {\n\t\tc.errStart = i\n\t\tc.err = err\n\t}\n}\n\ntype link struct {\n\tt Transformer\n\t// b[p:n] holds the bytes to be transformed by t.\n\tb []byte\n\tp int\n\tn int\n}\n\nfunc (l *link) src() []byte {\n\treturn l.b[l.p:l.n]\n}\n\nfunc (l *link) dst() []byte {\n\treturn l.b[l.n:]\n}\n\n// Chain returns a Transformer that applies t in sequence.\nfunc Chain(t ...Transformer) Transformer {\n\tif len(t) == 0 {\n\t\treturn nop{}\n\t}\n\tc := &chain{link: make([]link, len(t)+1)}\n\tfor i, tt := range t {\n\t\tc.link[i].t = tt\n\t}\n\t// Allocate intermediate buffers.\n\tb := make([][defaultBufSize]byte, len(t)-1)\n\tfor i := range b {\n\t\tc.link[i+1].b = b[i][:]\n\t}\n\treturn c\n}\n\n// Reset resets the state of Chain. It calls Reset on all the Transformers.\nfunc (c *chain) Reset() {\n\tfor i, l := range c.link {\n\t\tif l.t != nil {\n\t\t\tl.t.Reset()\n\t\t}\n\t\tc.link[i].p, c.link[i].n = 0, 0\n\t}\n}\n\n// TODO: make chain use Span (is going to be fun to implement!)\n\n// Transform applies the transformers of c in sequence.\nfunc (c *chain) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {\n\t// Set up src and dst in the chain.\n\tsrcL := &c.link[0]\n\tdstL := &c.link[len(c.link)-1]\n\tsrcL.b, srcL.p, srcL.n = src, 0, len(src)\n\tdstL.b, dstL.n = dst, 0\n\tvar lastFull, needProgress bool // for detecting progress\n\n\t// i is the index of the next Transformer to apply, for i in [low, high].\n\t// low is the lowest index for which c.link[low] may still produce bytes.\n\t// high is the highest index for which c.link[high] has a Transformer.\n\t// The error returned by Transform determines whether to increase or\n\t// decrease i. We try to completely fill a buffer before converting it.\n\tfor low, i, high := c.errStart, c.errStart, len(c.link)-2; low <= i && i <= high; {\n\t\tin, out := &c.link[i], &c.link[i+1]\n\t\tnDst, nSrc, err0 := in.t.Transform(out.dst(), in.src(), atEOF && low == i)\n\t\tout.n += nDst\n\t\tin.p += nSrc\n\t\tif i > 0 && in.p == in.n {\n\t\t\tin.p, in.n = 0, 0\n\t\t}\n\t\tneedProgress, lastFull = lastFull, false\n\t\tswitch err0 {\n\t\tcase ErrShortDst:\n\t\t\t// Process the destination buffer next. Return if we are already\n\t\t\t// at the high index.\n\t\t\tif i == high {\n\t\t\t\treturn dstL.n, srcL.p, ErrShortDst\n\t\t\t}\n\t\t\tif out.n != 0 {\n\t\t\t\ti++\n\t\t\t\t// If the Transformer at the next index is not able to process any\n\t\t\t\t// source bytes there is nothing that can be done to make progress\n\t\t\t\t// and the bytes will remain unprocessed. lastFull is used to\n\t\t\t\t// detect this and break out of the loop with a fatal error.\n\t\t\t\tlastFull = true\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\t// The destination buffer was too small, but is completely empty.\n\t\t\t// Return a fatal error as this transformation can never complete.\n\t\t\tc.fatalError(i, errShortInternal)\n\t\tcase ErrShortSrc:\n\t\t\tif i == 0 {\n\t\t\t\t// Save ErrShortSrc in err. All other errors take precedence.\n\t\t\t\terr = ErrShortSrc\n\t\t\t\tbreak\n\t\t\t}\n\t\t\t// Source bytes were depleted before filling up the destination buffer.\n\t\t\t// Verify we made some progress, move the remaining bytes to the errStart\n\t\t\t// and try to get more source bytes.\n\t\t\tif needProgress && nSrc == 0 || in.n-in.p == len(in.b) {\n\t\t\t\t// There were not enough source bytes to proceed while the source\n\t\t\t\t// buffer cannot hold any more bytes. Return a fatal error as this\n\t\t\t\t// transformation can never complete.\n\t\t\t\tc.fatalError(i, errShortInternal)\n\t\t\t\tbreak\n\t\t\t}\n\t\t\t// in.b is an internal buffer and we can make progress.\n\t\t\tin.p, in.n = 0, copy(in.b, in.src())\n\t\t\tfallthrough\n\t\tcase nil:\n\t\t\t// if i == low, we have depleted the bytes at index i or any lower levels.\n\t\t\t// In that case we increase low and i. In all other cases we decrease i to\n\t\t\t// fetch more bytes before proceeding to the next index.\n\t\t\tif i > low {\n\t\t\t\ti--\n\t\t\t\tcontinue\n\t\t\t}\n\t\tdefault:\n\t\t\tc.fatalError(i, err0)\n\t\t}\n\t\t// Exhausted level low or fatal error: increase low and continue\n\t\t// to process the bytes accepted so far.\n\t\ti++\n\t\tlow = i\n\t}\n\n\t// If c.errStart > 0, this means we found a fatal error.  We will clear\n\t// all upstream buffers. At this point, no more progress can be made\n\t// downstream, as Transform would have bailed while handling ErrShortDst.\n\tif c.errStart > 0 {\n\t\tfor i := 1; i < c.errStart; i++ {\n\t\t\tc.link[i].p, c.link[i].n = 0, 0\n\t\t}\n\t\terr, c.errStart, c.err = c.err, 0, nil\n\t}\n\treturn dstL.n, srcL.p, err\n}\n\n// Deprecated: Use runes.Remove instead.\nfunc RemoveFunc(f func(r rune) bool) Transformer {\n\treturn removeF(f)\n}\n\ntype removeF func(r rune) bool\n\nfunc (removeF) Reset() {}\n\n// Transform implements the Transformer interface.\nfunc (t removeF) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {\n\tfor r, sz := rune(0), 0; len(src) > 0; src = src[sz:] {\n\n\t\tif r = rune(src[0]); r < utf8.RuneSelf {\n\t\t\tsz = 1\n\t\t} else {\n\t\t\tr, sz = utf8.DecodeRune(src)\n\n\t\t\tif sz == 1 {\n\t\t\t\t// Invalid rune.\n\t\t\t\tif !atEOF && !utf8.FullRune(src) {\n\t\t\t\t\terr = ErrShortSrc\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\t// We replace illegal bytes with RuneError. Not doing so might\n\t\t\t\t// otherwise turn a sequence of invalid UTF-8 into valid UTF-8.\n\t\t\t\t// The resulting byte sequence may subsequently contain runes\n\t\t\t\t// for which t(r) is true that were passed unnoticed.\n\t\t\t\tif !t(r) {\n\t\t\t\t\tif nDst+3 > len(dst) {\n\t\t\t\t\t\terr = ErrShortDst\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\tnDst += copy(dst[nDst:], \"\\uFFFD\")\n\t\t\t\t}\n\t\t\t\tnSrc++\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\tif !t(r) {\n\t\t\tif nDst+sz > len(dst) {\n\t\t\t\terr = ErrShortDst\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tnDst += copy(dst[nDst:], src[:sz])\n\t\t}\n\t\tnSrc += sz\n\t}\n\treturn\n}\n\n// grow returns a new []byte that is longer than b, and copies the first n bytes\n// of b to the start of the new slice.\nfunc grow(b []byte, n int) []byte {\n\tm := len(b)\n\tif m <= 32 {\n\t\tm = 64\n\t} else if m <= 256 {\n\t\tm *= 2\n\t} else {\n\t\tm += m >> 1\n\t}\n\tbuf := make([]byte, m)\n\tcopy(buf, b[:n])\n\treturn buf\n}\n\nconst initialBufSize = 128\n\n// String returns a string with the result of converting s[:n] using t, where\n// n <= len(s). If err == nil, n will be len(s). It calls Reset on t.\nfunc String(t Transformer, s string) (result string, n int, err error) {\n\tt.Reset()\n\tif s == \"\" {\n\t\t// Fast path for the common case for empty input. Results in about a\n\t\t// 86% reduction of running time for BenchmarkStringLowerEmpty.\n\t\tif _, _, err := t.Transform(nil, nil, true); err == nil {\n\t\t\treturn \"\", 0, nil\n\t\t}\n\t}\n\n\t// Allocate only once. Note that both dst and src escape when passed to\n\t// Transform.\n\tbuf := [2 * initialBufSize]byte{}\n\tdst := buf[:initialBufSize:initialBufSize]\n\tsrc := buf[initialBufSize : 2*initialBufSize]\n\n\t// The input string s is transformed in multiple chunks (starting with a\n\t// chunk size of initialBufSize). nDst and nSrc are per-chunk (or\n\t// per-Transform-call) indexes, pDst and pSrc are overall indexes.\n\tnDst, nSrc := 0, 0\n\tpDst, pSrc := 0, 0\n\n\t// pPrefix is the length of a common prefix: the first pPrefix bytes of the\n\t// result will equal the first pPrefix bytes of s. It is not guaranteed to\n\t// be the largest such value, but if pPrefix, len(result) and len(s) are\n\t// all equal after the final transform (i.e. calling Transform with atEOF\n\t// being true returned nil error) then we don't need to allocate a new\n\t// result string.\n\tpPrefix := 0\n\tfor {\n\t\t// Invariant: pDst == pPrefix && pSrc == pPrefix.\n\n\t\tn := copy(src, s[pSrc:])\n\t\tnDst, nSrc, err = t.Transform(dst, src[:n], pSrc+n == len(s))\n\t\tpDst += nDst\n\t\tpSrc += nSrc\n\n\t\t// TODO:  let transformers implement an optional Spanner interface, akin\n\t\t// to norm's QuickSpan. This would even allow us to avoid any allocation.\n\t\tif !bytes.Equal(dst[:nDst], src[:nSrc]) {\n\t\t\tbreak\n\t\t}\n\t\tpPrefix = pSrc\n\t\tif err == ErrShortDst {\n\t\t\t// A buffer can only be short if a transformer modifies its input.\n\t\t\tbreak\n\t\t} else if err == ErrShortSrc {\n\t\t\tif nSrc == 0 {\n\t\t\t\t// No progress was made.\n\t\t\t\tbreak\n\t\t\t}\n\t\t\t// Equal so far and !atEOF, so continue checking.\n\t\t} else if err != nil || pPrefix == len(s) {\n\t\t\treturn string(s[:pPrefix]), pPrefix, err\n\t\t}\n\t}\n\t// Post-condition: pDst == pPrefix + nDst && pSrc == pPrefix + nSrc.\n\n\t// We have transformed the first pSrc bytes of the input s to become pDst\n\t// transformed bytes. Those transformed bytes are discontiguous: the first\n\t// pPrefix of them equal s[:pPrefix] and the last nDst of them equal\n\t// dst[:nDst]. We copy them around, into a new dst buffer if necessary, so\n\t// that they become one contiguous slice: dst[:pDst].\n\tif pPrefix != 0 {\n\t\tnewDst := dst\n\t\tif pDst > len(newDst) {\n\t\t\tnewDst = make([]byte, len(s)+nDst-nSrc)\n\t\t}\n\t\tcopy(newDst[pPrefix:pDst], dst[:nDst])\n\t\tcopy(newDst[:pPrefix], s[:pPrefix])\n\t\tdst = newDst\n\t}\n\n\t// Prevent duplicate Transform calls with atEOF being true at the end of\n\t// the input. Also return if we have an unrecoverable error.\n\tif (err == nil && pSrc == len(s)) ||\n\t\t(err != nil && err != ErrShortDst && err != ErrShortSrc) {\n\t\treturn string(dst[:pDst]), pSrc, err\n\t}\n\n\t// Transform the remaining input, growing dst and src buffers as necessary.\n\tfor {\n\t\tn := copy(src, s[pSrc:])\n\t\tnDst, nSrc, err := t.Transform(dst[pDst:], src[:n], pSrc+n == len(s))\n\t\tpDst += nDst\n\t\tpSrc += nSrc\n\n\t\t// If we got ErrShortDst or ErrShortSrc, do not grow as long as we can\n\t\t// make progress. This may avoid excessive allocations.\n\t\tif err == ErrShortDst {\n\t\t\tif nDst == 0 {\n\t\t\t\tdst = grow(dst, pDst)\n\t\t\t}\n\t\t} else if err == ErrShortSrc {\n\t\t\tif nSrc == 0 {\n\t\t\t\tsrc = grow(src, 0)\n\t\t\t}\n\t\t} else if err != nil || pSrc == len(s) {\n\t\t\treturn string(dst[:pDst]), pSrc, err\n\t\t}\n\t}\n}\n\n// Bytes returns a new byte slice with the result of converting b[:n] using t,\n// where n <= len(b). If err == nil, n will be len(b). It calls Reset on t.\nfunc Bytes(t Transformer, b []byte) (result []byte, n int, err error) {\n\treturn doAppend(t, 0, make([]byte, len(b)), b)\n}\n\n// Append appends the result of converting src[:n] using t to dst, where\n// n <= len(src), If err == nil, n will be len(src). It calls Reset on t.\nfunc Append(t Transformer, dst, src []byte) (result []byte, n int, err error) {\n\tif len(dst) == cap(dst) {\n\t\tn := len(src) + len(dst) // It is okay for this to be 0.\n\t\tb := make([]byte, n)\n\t\tdst = b[:copy(b, dst)]\n\t}\n\treturn doAppend(t, len(dst), dst[:cap(dst)], src)\n}\n\nfunc doAppend(t Transformer, pDst int, dst, src []byte) (result []byte, n int, err error) {\n\tt.Reset()\n\tpSrc := 0\n\tfor {\n\t\tnDst, nSrc, err := t.Transform(dst[pDst:], src[pSrc:], true)\n\t\tpDst += nDst\n\t\tpSrc += nSrc\n\t\tif err != ErrShortDst {\n\t\t\treturn dst[:pDst], pSrc, err\n\t\t}\n\n\t\t// Grow the destination buffer, but do not grow as long as we can make\n\t\t// progress. This may avoid excessive allocations.\n\t\tif nDst == 0 {\n\t\t\tdst = grow(dst, pDst)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "vendor/golang.org/x/text/unicode/bidi/bidi.go",
    "content": "// Copyright 2015 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:generate go run gen.go gen_trieval.go gen_ranges.go\n\n// Package bidi contains functionality for bidirectional text support.\n//\n// See https://www.unicode.org/reports/tr9.\n//\n// NOTE: UNDER CONSTRUCTION. This API may change in backwards incompatible ways\n// and without notice.\npackage bidi // import \"golang.org/x/text/unicode/bidi\"\n\n// TODO:\n// The following functionality would not be hard to implement, but hinges on\n// the definition of a Segmenter interface. For now this is up to the user.\n// - Iterate over paragraphs\n// - Segmenter to iterate over runs directly from a given text.\n// Also:\n// - Transformer for reordering?\n// - Transformer (validator, really) for Bidi Rule.\n\n// This API tries to avoid dealing with embedding levels for now. Under the hood\n// these will be computed, but the question is to which extent the user should\n// know they exist. We should at some point allow the user to specify an\n// embedding hierarchy, though.\n\n// A Direction indicates the overall flow of text.\ntype Direction int\n\nconst (\n\t// LeftToRight indicates the text contains no right-to-left characters and\n\t// that either there are some left-to-right characters or the option\n\t// DefaultDirection(LeftToRight) was passed.\n\tLeftToRight Direction = iota\n\n\t// RightToLeft indicates the text contains no left-to-right characters and\n\t// that either there are some right-to-left characters or the option\n\t// DefaultDirection(RightToLeft) was passed.\n\tRightToLeft\n\n\t// Mixed indicates text contains both left-to-right and right-to-left\n\t// characters.\n\tMixed\n\n\t// Neutral means that text contains no left-to-right and right-to-left\n\t// characters and that no default direction has been set.\n\tNeutral\n)\n\ntype options struct{}\n\n// An Option is an option for Bidi processing.\ntype Option func(*options)\n\n// ICU allows the user to define embedding levels. This may be used, for example,\n// to use hierarchical structure of markup languages to define embeddings.\n// The following option may be a way to expose this functionality in this API.\n// // LevelFunc sets a function that associates nesting levels with the given text.\n// // The levels function will be called with monotonically increasing values for p.\n// func LevelFunc(levels func(p int) int) Option {\n// \tpanic(\"unimplemented\")\n// }\n\n// DefaultDirection sets the default direction for a Paragraph. The direction is\n// overridden if the text contains directional characters.\nfunc DefaultDirection(d Direction) Option {\n\tpanic(\"unimplemented\")\n}\n\n// A Paragraph holds a single Paragraph for Bidi processing.\ntype Paragraph struct {\n\t// buffers\n}\n\n// SetBytes configures p for the given paragraph text. It replaces text\n// previously set by SetBytes or SetString. If b contains a paragraph separator\n// it will only process the first paragraph and report the number of bytes\n// consumed from b including this separator. Error may be non-nil if options are\n// given.\nfunc (p *Paragraph) SetBytes(b []byte, opts ...Option) (n int, err error) {\n\tpanic(\"unimplemented\")\n}\n\n// SetString configures p for the given paragraph text. It replaces text\n// previously set by SetBytes or SetString. If b contains a paragraph separator\n// it will only process the first paragraph and report the number of bytes\n// consumed from b including this separator. Error may be non-nil if options are\n// given.\nfunc (p *Paragraph) SetString(s string, opts ...Option) (n int, err error) {\n\tpanic(\"unimplemented\")\n}\n\n// IsLeftToRight reports whether the principle direction of rendering for this\n// paragraphs is left-to-right. If this returns false, the principle direction\n// of rendering is right-to-left.\nfunc (p *Paragraph) IsLeftToRight() bool {\n\tpanic(\"unimplemented\")\n}\n\n// Direction returns the direction of the text of this paragraph.\n//\n// The direction may be LeftToRight, RightToLeft, Mixed, or Neutral.\nfunc (p *Paragraph) Direction() Direction {\n\tpanic(\"unimplemented\")\n}\n\n// RunAt reports the Run at the given position of the input text.\n//\n// This method can be used for computing line breaks on paragraphs.\nfunc (p *Paragraph) RunAt(pos int) Run {\n\tpanic(\"unimplemented\")\n}\n\n// Order computes the visual ordering of all the runs in a Paragraph.\nfunc (p *Paragraph) Order() (Ordering, error) {\n\tpanic(\"unimplemented\")\n}\n\n// Line computes the visual ordering of runs for a single line starting and\n// ending at the given positions in the original text.\nfunc (p *Paragraph) Line(start, end int) (Ordering, error) {\n\tpanic(\"unimplemented\")\n}\n\n// An Ordering holds the computed visual order of runs of a Paragraph. Calling\n// SetBytes or SetString on the originating Paragraph invalidates an Ordering.\n// The methods of an Ordering should only be called by one goroutine at a time.\ntype Ordering struct{}\n\n// Direction reports the directionality of the runs.\n//\n// The direction may be LeftToRight, RightToLeft, Mixed, or Neutral.\nfunc (o *Ordering) Direction() Direction {\n\tpanic(\"unimplemented\")\n}\n\n// NumRuns returns the number of runs.\nfunc (o *Ordering) NumRuns() int {\n\tpanic(\"unimplemented\")\n}\n\n// Run returns the ith run within the ordering.\nfunc (o *Ordering) Run(i int) Run {\n\tpanic(\"unimplemented\")\n}\n\n// TODO: perhaps with options.\n// // Reorder creates a reader that reads the runes in visual order per character.\n// // Modifiers remain after the runes they modify.\n// func (l *Runs) Reorder() io.Reader {\n// \tpanic(\"unimplemented\")\n// }\n\n// A Run is a continuous sequence of characters of a single direction.\ntype Run struct {\n}\n\n// String returns the text of the run in its original order.\nfunc (r *Run) String() string {\n\tpanic(\"unimplemented\")\n}\n\n// Bytes returns the text of the run in its original order.\nfunc (r *Run) Bytes() []byte {\n\tpanic(\"unimplemented\")\n}\n\n// TODO: methods for\n// - Display order\n// - headers and footers\n// - bracket replacement.\n\n// Direction reports the direction of the run.\nfunc (r *Run) Direction() Direction {\n\tpanic(\"unimplemented\")\n}\n\n// Position of the Run within the text passed to SetBytes or SetString of the\n// originating Paragraph value.\nfunc (r *Run) Pos() (start, end int) {\n\tpanic(\"unimplemented\")\n}\n\n// AppendReverse reverses the order of characters of in, appends them to out,\n// and returns the result. Modifiers will still follow the runes they modify.\n// Brackets are replaced with their counterparts.\nfunc AppendReverse(out, in []byte) []byte {\n\tpanic(\"unimplemented\")\n}\n\n// ReverseString reverses the order of characters in s and returns a new string.\n// Modifiers will still follow the runes they modify. Brackets are replaced with\n// their counterparts.\nfunc ReverseString(s string) string {\n\tpanic(\"unimplemented\")\n}\n"
  },
  {
    "path": "vendor/golang.org/x/text/unicode/bidi/bracket.go",
    "content": "// Copyright 2015 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage bidi\n\nimport (\n\t\"container/list\"\n\t\"fmt\"\n\t\"sort\"\n)\n\n// This file contains a port of the reference implementation of the\n// Bidi Parentheses Algorithm:\n// https://www.unicode.org/Public/PROGRAMS/BidiReferenceJava/BidiPBAReference.java\n//\n// The implementation in this file covers definitions BD14-BD16 and rule N0\n// of UAX#9.\n//\n// Some preprocessing is done for each rune before data is passed to this\n// algorithm:\n//  - opening and closing brackets are identified\n//  - a bracket pair type, like '(' and ')' is assigned a unique identifier that\n//    is identical for the opening and closing bracket. It is left to do these\n//    mappings.\n//  - The BPA algorithm requires that bracket characters that are canonical\n//    equivalents of each other be able to be substituted for each other.\n//    It is the responsibility of the caller to do this canonicalization.\n//\n// In implementing BD16, this implementation departs slightly from the \"logical\"\n// algorithm defined in UAX#9. In particular, the stack referenced there\n// supports operations that go beyond a \"basic\" stack. An equivalent\n// implementation based on a linked list is used here.\n\n// Bidi_Paired_Bracket_Type\n// BD14. An opening paired bracket is a character whose\n// Bidi_Paired_Bracket_Type property value is Open.\n//\n// BD15. A closing paired bracket is a character whose\n// Bidi_Paired_Bracket_Type property value is Close.\ntype bracketType byte\n\nconst (\n\tbpNone bracketType = iota\n\tbpOpen\n\tbpClose\n)\n\n// bracketPair holds a pair of index values for opening and closing bracket\n// location of a bracket pair.\ntype bracketPair struct {\n\topener int\n\tcloser int\n}\n\nfunc (b *bracketPair) String() string {\n\treturn fmt.Sprintf(\"(%v, %v)\", b.opener, b.closer)\n}\n\n// bracketPairs is a slice of bracketPairs with a sort.Interface implementation.\ntype bracketPairs []bracketPair\n\nfunc (b bracketPairs) Len() int           { return len(b) }\nfunc (b bracketPairs) Swap(i, j int)      { b[i], b[j] = b[j], b[i] }\nfunc (b bracketPairs) Less(i, j int) bool { return b[i].opener < b[j].opener }\n\n// resolvePairedBrackets runs the paired bracket part of the UBA algorithm.\n//\n// For each rune, it takes the indexes into the original string, the class the\n// bracket type (in pairTypes) and the bracket identifier (pairValues). It also\n// takes the direction type for the start-of-sentence and the embedding level.\n//\n// The identifiers for bracket types are the rune of the canonicalized opening\n// bracket for brackets (open or close) or 0 for runes that are not brackets.\nfunc resolvePairedBrackets(s *isolatingRunSequence) {\n\tp := bracketPairer{\n\t\tsos:              s.sos,\n\t\topeners:          list.New(),\n\t\tcodesIsolatedRun: s.types,\n\t\tindexes:          s.indexes,\n\t}\n\tdirEmbed := L\n\tif s.level&1 != 0 {\n\t\tdirEmbed = R\n\t}\n\tp.locateBrackets(s.p.pairTypes, s.p.pairValues)\n\tp.resolveBrackets(dirEmbed, s.p.initialTypes)\n}\n\ntype bracketPairer struct {\n\tsos Class // direction corresponding to start of sequence\n\n\t// The following is a restatement of BD 16 using non-algorithmic language.\n\t//\n\t// A bracket pair is a pair of characters consisting of an opening\n\t// paired bracket and a closing paired bracket such that the\n\t// Bidi_Paired_Bracket property value of the former equals the latter,\n\t// subject to the following constraints.\n\t// - both characters of a pair occur in the same isolating run sequence\n\t// - the closing character of a pair follows the opening character\n\t// - any bracket character can belong at most to one pair, the earliest possible one\n\t// - any bracket character not part of a pair is treated like an ordinary character\n\t// - pairs may nest properly, but their spans may not overlap otherwise\n\n\t// Bracket characters with canonical decompositions are supposed to be\n\t// treated as if they had been normalized, to allow normalized and non-\n\t// normalized text to give the same result. In this implementation that step\n\t// is pushed out to the caller. The caller has to ensure that the pairValue\n\t// slices contain the rune of the opening bracket after normalization for\n\t// any opening or closing bracket.\n\n\topeners *list.List // list of positions for opening brackets\n\n\t// bracket pair positions sorted by location of opening bracket\n\tpairPositions bracketPairs\n\n\tcodesIsolatedRun []Class // directional bidi codes for an isolated run\n\tindexes          []int   // array of index values into the original string\n\n}\n\n// matchOpener reports whether characters at given positions form a matching\n// bracket pair.\nfunc (p *bracketPairer) matchOpener(pairValues []rune, opener, closer int) bool {\n\treturn pairValues[p.indexes[opener]] == pairValues[p.indexes[closer]]\n}\n\nconst maxPairingDepth = 63\n\n// locateBrackets locates matching bracket pairs according to BD16.\n//\n// This implementation uses a linked list instead of a stack, because, while\n// elements are added at the front (like a push) they are not generally removed\n// in atomic 'pop' operations, reducing the benefit of the stack archetype.\nfunc (p *bracketPairer) locateBrackets(pairTypes []bracketType, pairValues []rune) {\n\t// traverse the run\n\t// do that explicitly (not in a for-each) so we can record position\n\tfor i, index := range p.indexes {\n\n\t\t// look at the bracket type for each character\n\t\tif pairTypes[index] == bpNone || p.codesIsolatedRun[i] != ON {\n\t\t\t// continue scanning\n\t\t\tcontinue\n\t\t}\n\t\tswitch pairTypes[index] {\n\t\tcase bpOpen:\n\t\t\t// check if maximum pairing depth reached\n\t\t\tif p.openers.Len() == maxPairingDepth {\n\t\t\t\tp.openers.Init()\n\t\t\t\treturn\n\t\t\t}\n\t\t\t// remember opener location, most recent first\n\t\t\tp.openers.PushFront(i)\n\n\t\tcase bpClose:\n\t\t\t// see if there is a match\n\t\t\tcount := 0\n\t\t\tfor elem := p.openers.Front(); elem != nil; elem = elem.Next() {\n\t\t\t\tcount++\n\t\t\t\topener := elem.Value.(int)\n\t\t\t\tif p.matchOpener(pairValues, opener, i) {\n\t\t\t\t\t// if the opener matches, add nested pair to the ordered list\n\t\t\t\t\tp.pairPositions = append(p.pairPositions, bracketPair{opener, i})\n\t\t\t\t\t// remove up to and including matched opener\n\t\t\t\t\tfor ; count > 0; count-- {\n\t\t\t\t\t\tp.openers.Remove(p.openers.Front())\n\t\t\t\t\t}\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tsort.Sort(p.pairPositions)\n\t\t\t// if we get here, the closing bracket matched no openers\n\t\t\t// and gets ignored\n\t\t}\n\t}\n}\n\n// Bracket pairs within an isolating run sequence are processed as units so\n// that both the opening and the closing paired bracket in a pair resolve to\n// the same direction.\n//\n// N0. Process bracket pairs in an isolating run sequence sequentially in\n// the logical order of the text positions of the opening paired brackets\n// using the logic given below. Within this scope, bidirectional types EN\n// and AN are treated as R.\n//\n// Identify the bracket pairs in the current isolating run sequence\n// according to BD16. For each bracket-pair element in the list of pairs of\n// text positions:\n//\n// a Inspect the bidirectional types of the characters enclosed within the\n// bracket pair.\n//\n// b If any strong type (either L or R) matching the embedding direction is\n// found, set the type for both brackets in the pair to match the embedding\n// direction.\n//\n// o [ e ] o -> o e e e o\n//\n// o [ o e ] -> o e o e e\n//\n// o [ NI e ] -> o e NI e e\n//\n// c Otherwise, if a strong type (opposite the embedding direction) is\n// found, test for adjacent strong types as follows: 1 First, check\n// backwards before the opening paired bracket until the first strong type\n// (L, R, or sos) is found. If that first preceding strong type is opposite\n// the embedding direction, then set the type for both brackets in the pair\n// to that type. 2 Otherwise, set the type for both brackets in the pair to\n// the embedding direction.\n//\n// o [ o ] e -> o o o o e\n//\n// o [ o NI ] o -> o o o NI o o\n//\n// e [ o ] o -> e e o e o\n//\n// e [ o ] e -> e e o e e\n//\n// e ( o [ o ] NI ) e -> e e o o o o NI e e\n//\n// d Otherwise, do not set the type for the current bracket pair. Note that\n// if the enclosed text contains no strong types the paired brackets will\n// both resolve to the same level when resolved individually using rules N1\n// and N2.\n//\n// e ( NI ) o -> e ( NI ) o\n\n// getStrongTypeN0 maps character's directional code to strong type as required\n// by rule N0.\n//\n// TODO: have separate type for \"strong\" directionality.\nfunc (p *bracketPairer) getStrongTypeN0(index int) Class {\n\tswitch p.codesIsolatedRun[index] {\n\t// in the scope of N0, number types are treated as R\n\tcase EN, AN, AL, R:\n\t\treturn R\n\tcase L:\n\t\treturn L\n\tdefault:\n\t\treturn ON\n\t}\n}\n\n// classifyPairContent reports the strong types contained inside a Bracket Pair,\n// assuming the given embedding direction.\n//\n// It returns ON if no strong type is found. If a single strong type is found,\n// it returns this type. Otherwise it returns the embedding direction.\n//\n// TODO: use separate type for \"strong\" directionality.\nfunc (p *bracketPairer) classifyPairContent(loc bracketPair, dirEmbed Class) Class {\n\tdirOpposite := ON\n\tfor i := loc.opener + 1; i < loc.closer; i++ {\n\t\tdir := p.getStrongTypeN0(i)\n\t\tif dir == ON {\n\t\t\tcontinue\n\t\t}\n\t\tif dir == dirEmbed {\n\t\t\treturn dir // type matching embedding direction found\n\t\t}\n\t\tdirOpposite = dir\n\t}\n\t// return ON if no strong type found, or class opposite to dirEmbed\n\treturn dirOpposite\n}\n\n// classBeforePair determines which strong types are present before a Bracket\n// Pair. Return R or L if strong type found, otherwise ON.\nfunc (p *bracketPairer) classBeforePair(loc bracketPair) Class {\n\tfor i := loc.opener - 1; i >= 0; i-- {\n\t\tif dir := p.getStrongTypeN0(i); dir != ON {\n\t\t\treturn dir\n\t\t}\n\t}\n\t// no strong types found, return sos\n\treturn p.sos\n}\n\n// assignBracketType implements rule N0 for a single bracket pair.\nfunc (p *bracketPairer) assignBracketType(loc bracketPair, dirEmbed Class, initialTypes []Class) {\n\t// rule \"N0, a\", inspect contents of pair\n\tdirPair := p.classifyPairContent(loc, dirEmbed)\n\n\t// dirPair is now L, R, or N (no strong type found)\n\n\t// the following logical tests are performed out of order compared to\n\t// the statement of the rules but yield the same results\n\tif dirPair == ON {\n\t\treturn // case \"d\" - nothing to do\n\t}\n\n\tif dirPair != dirEmbed {\n\t\t// case \"c\": strong type found, opposite - check before (c.1)\n\t\tdirPair = p.classBeforePair(loc)\n\t\tif dirPair == dirEmbed || dirPair == ON {\n\t\t\t// no strong opposite type found before - use embedding (c.2)\n\t\t\tdirPair = dirEmbed\n\t\t}\n\t}\n\t// else: case \"b\", strong type found matching embedding,\n\t// no explicit action needed, as dirPair is already set to embedding\n\t// direction\n\n\t// set the bracket types to the type found\n\tp.setBracketsToType(loc, dirPair, initialTypes)\n}\n\nfunc (p *bracketPairer) setBracketsToType(loc bracketPair, dirPair Class, initialTypes []Class) {\n\tp.codesIsolatedRun[loc.opener] = dirPair\n\tp.codesIsolatedRun[loc.closer] = dirPair\n\n\tfor i := loc.opener + 1; i < loc.closer; i++ {\n\t\tindex := p.indexes[i]\n\t\tif initialTypes[index] != NSM {\n\t\t\tbreak\n\t\t}\n\t\tp.codesIsolatedRun[i] = dirPair\n\t}\n\n\tfor i := loc.closer + 1; i < len(p.indexes); i++ {\n\t\tindex := p.indexes[i]\n\t\tif initialTypes[index] != NSM {\n\t\t\tbreak\n\t\t}\n\t\tp.codesIsolatedRun[i] = dirPair\n\t}\n}\n\n// resolveBrackets implements rule N0 for a list of pairs.\nfunc (p *bracketPairer) resolveBrackets(dirEmbed Class, initialTypes []Class) {\n\tfor _, loc := range p.pairPositions {\n\t\tp.assignBracketType(loc, dirEmbed, initialTypes)\n\t}\n}\n"
  },
  {
    "path": "vendor/golang.org/x/text/unicode/bidi/core.go",
    "content": "// Copyright 2015 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage bidi\n\nimport \"log\"\n\n// This implementation is a port based on the reference implementation found at:\n// https://www.unicode.org/Public/PROGRAMS/BidiReferenceJava/\n//\n// described in Unicode Bidirectional Algorithm (UAX #9).\n//\n// Input:\n// There are two levels of input to the algorithm, since clients may prefer to\n// supply some information from out-of-band sources rather than relying on the\n// default behavior.\n//\n// - Bidi class array\n// - Bidi class array, with externally supplied base line direction\n//\n// Output:\n// Output is separated into several stages:\n//\n//  - levels array over entire paragraph\n//  - reordering array over entire paragraph\n//  - levels array over line\n//  - reordering array over line\n//\n// Note that for conformance to the Unicode Bidirectional Algorithm,\n// implementations are only required to generate correct reordering and\n// character directionality (odd or even levels) over a line. Generating\n// identical level arrays over a line is not required. Bidi explicit format\n// codes (LRE, RLE, LRO, RLO, PDF) and BN can be assigned arbitrary levels and\n// positions as long as the rest of the input is properly reordered.\n//\n// As the algorithm is defined to operate on a single paragraph at a time, this\n// implementation is written to handle single paragraphs. Thus rule P1 is\n// presumed by this implementation-- the data provided to the implementation is\n// assumed to be a single paragraph, and either contains no 'B' codes, or a\n// single 'B' code at the end of the input. 'B' is allowed as input to\n// illustrate how the algorithm assigns it a level.\n//\n// Also note that rules L3 and L4 depend on the rendering engine that uses the\n// result of the bidi algorithm. This implementation assumes that the rendering\n// engine expects combining marks in visual order (e.g. to the left of their\n// base character in RTL runs) and that it adjusts the glyphs used to render\n// mirrored characters that are in RTL runs so that they render appropriately.\n\n// level is the embedding level of a character. Even embedding levels indicate\n// left-to-right order and odd levels indicate right-to-left order. The special\n// level of -1 is reserved for undefined order.\ntype level int8\n\nconst implicitLevel level = -1\n\n// in returns if x is equal to any of the values in set.\nfunc (c Class) in(set ...Class) bool {\n\tfor _, s := range set {\n\t\tif c == s {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// A paragraph contains the state of a paragraph.\ntype paragraph struct {\n\tinitialTypes []Class\n\n\t// Arrays of properties needed for paired bracket evaluation in N0\n\tpairTypes  []bracketType // paired Bracket types for paragraph\n\tpairValues []rune        // rune for opening bracket or pbOpen and pbClose; 0 for pbNone\n\n\tembeddingLevel level // default: = implicitLevel;\n\n\t// at the paragraph levels\n\tresultTypes  []Class\n\tresultLevels []level\n\n\t// Index of matching PDI for isolate initiator characters. For other\n\t// characters, the value of matchingPDI will be set to -1. For isolate\n\t// initiators with no matching PDI, matchingPDI will be set to the length of\n\t// the input string.\n\tmatchingPDI []int\n\n\t// Index of matching isolate initiator for PDI characters. For other\n\t// characters, and for PDIs with no matching isolate initiator, the value of\n\t// matchingIsolateInitiator will be set to -1.\n\tmatchingIsolateInitiator []int\n}\n\n// newParagraph initializes a paragraph. The user needs to supply a few arrays\n// corresponding to the preprocessed text input. The types correspond to the\n// Unicode BiDi classes for each rune. pairTypes indicates the bracket type for\n// each rune. pairValues provides a unique bracket class identifier for each\n// rune (suggested is the rune of the open bracket for opening and matching\n// close brackets, after normalization). The embedding levels are optional, but\n// may be supplied to encode embedding levels of styled text.\n//\n// TODO: return an error.\nfunc newParagraph(types []Class, pairTypes []bracketType, pairValues []rune, levels level) *paragraph {\n\tvalidateTypes(types)\n\tvalidatePbTypes(pairTypes)\n\tvalidatePbValues(pairValues, pairTypes)\n\tvalidateParagraphEmbeddingLevel(levels)\n\n\tp := &paragraph{\n\t\tinitialTypes:   append([]Class(nil), types...),\n\t\tembeddingLevel: levels,\n\n\t\tpairTypes:  pairTypes,\n\t\tpairValues: pairValues,\n\n\t\tresultTypes: append([]Class(nil), types...),\n\t}\n\tp.run()\n\treturn p\n}\n\nfunc (p *paragraph) Len() int { return len(p.initialTypes) }\n\n// The algorithm. Does not include line-based processing (Rules L1, L2).\n// These are applied later in the line-based phase of the algorithm.\nfunc (p *paragraph) run() {\n\tp.determineMatchingIsolates()\n\n\t// 1) determining the paragraph level\n\t// Rule P1 is the requirement for entering this algorithm.\n\t// Rules P2, P3.\n\t// If no externally supplied paragraph embedding level, use default.\n\tif p.embeddingLevel == implicitLevel {\n\t\tp.embeddingLevel = p.determineParagraphEmbeddingLevel(0, p.Len())\n\t}\n\n\t// Initialize result levels to paragraph embedding level.\n\tp.resultLevels = make([]level, p.Len())\n\tsetLevels(p.resultLevels, p.embeddingLevel)\n\n\t// 2) Explicit levels and directions\n\t// Rules X1-X8.\n\tp.determineExplicitEmbeddingLevels()\n\n\t// Rule X9.\n\t// We do not remove the embeddings, the overrides, the PDFs, and the BNs\n\t// from the string explicitly. But they are not copied into isolating run\n\t// sequences when they are created, so they are removed for all\n\t// practical purposes.\n\n\t// Rule X10.\n\t// Run remainder of algorithm one isolating run sequence at a time\n\tfor _, seq := range p.determineIsolatingRunSequences() {\n\t\t// 3) resolving weak types\n\t\t// Rules W1-W7.\n\t\tseq.resolveWeakTypes()\n\n\t\t// 4a) resolving paired brackets\n\t\t// Rule N0\n\t\tresolvePairedBrackets(seq)\n\n\t\t// 4b) resolving neutral types\n\t\t// Rules N1-N3.\n\t\tseq.resolveNeutralTypes()\n\n\t\t// 5) resolving implicit embedding levels\n\t\t// Rules I1, I2.\n\t\tseq.resolveImplicitLevels()\n\n\t\t// Apply the computed levels and types\n\t\tseq.applyLevelsAndTypes()\n\t}\n\n\t// Assign appropriate levels to 'hide' LREs, RLEs, LROs, RLOs, PDFs, and\n\t// BNs. This is for convenience, so the resulting level array will have\n\t// a value for every character.\n\tp.assignLevelsToCharactersRemovedByX9()\n}\n\n// determineMatchingIsolates determines the matching PDI for each isolate\n// initiator and vice versa.\n//\n// Definition BD9.\n//\n// At the end of this function:\n//\n//  - The member variable matchingPDI is set to point to the index of the\n//    matching PDI character for each isolate initiator character. If there is\n//    no matching PDI, it is set to the length of the input text. For other\n//    characters, it is set to -1.\n//  - The member variable matchingIsolateInitiator is set to point to the\n//    index of the matching isolate initiator character for each PDI character.\n//    If there is no matching isolate initiator, or the character is not a PDI,\n//    it is set to -1.\nfunc (p *paragraph) determineMatchingIsolates() {\n\tp.matchingPDI = make([]int, p.Len())\n\tp.matchingIsolateInitiator = make([]int, p.Len())\n\n\tfor i := range p.matchingIsolateInitiator {\n\t\tp.matchingIsolateInitiator[i] = -1\n\t}\n\n\tfor i := range p.matchingPDI {\n\t\tp.matchingPDI[i] = -1\n\n\t\tif t := p.resultTypes[i]; t.in(LRI, RLI, FSI) {\n\t\t\tdepthCounter := 1\n\t\t\tfor j := i + 1; j < p.Len(); j++ {\n\t\t\t\tif u := p.resultTypes[j]; u.in(LRI, RLI, FSI) {\n\t\t\t\t\tdepthCounter++\n\t\t\t\t} else if u == PDI {\n\t\t\t\t\tif depthCounter--; depthCounter == 0 {\n\t\t\t\t\t\tp.matchingPDI[i] = j\n\t\t\t\t\t\tp.matchingIsolateInitiator[j] = i\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif p.matchingPDI[i] == -1 {\n\t\t\t\tp.matchingPDI[i] = p.Len()\n\t\t\t}\n\t\t}\n\t}\n}\n\n// determineParagraphEmbeddingLevel reports the resolved paragraph direction of\n// the substring limited by the given range [start, end).\n//\n// Determines the paragraph level based on rules P2, P3. This is also used\n// in rule X5c to find if an FSI should resolve to LRI or RLI.\nfunc (p *paragraph) determineParagraphEmbeddingLevel(start, end int) level {\n\tvar strongType Class = unknownClass\n\n\t// Rule P2.\n\tfor i := start; i < end; i++ {\n\t\tif t := p.resultTypes[i]; t.in(L, AL, R) {\n\t\t\tstrongType = t\n\t\t\tbreak\n\t\t} else if t.in(FSI, LRI, RLI) {\n\t\t\ti = p.matchingPDI[i] // skip over to the matching PDI\n\t\t\tif i > end {\n\t\t\t\tlog.Panic(\"assert (i <= end)\")\n\t\t\t}\n\t\t}\n\t}\n\t// Rule P3.\n\tswitch strongType {\n\tcase unknownClass: // none found\n\t\t// default embedding level when no strong types found is 0.\n\t\treturn 0\n\tcase L:\n\t\treturn 0\n\tdefault: // AL, R\n\t\treturn 1\n\t}\n}\n\nconst maxDepth = 125\n\n// This stack will store the embedding levels and override and isolated\n// statuses\ntype directionalStatusStack struct {\n\tstackCounter        int\n\tembeddingLevelStack [maxDepth + 1]level\n\toverrideStatusStack [maxDepth + 1]Class\n\tisolateStatusStack  [maxDepth + 1]bool\n}\n\nfunc (s *directionalStatusStack) empty()     { s.stackCounter = 0 }\nfunc (s *directionalStatusStack) pop()       { s.stackCounter-- }\nfunc (s *directionalStatusStack) depth() int { return s.stackCounter }\n\nfunc (s *directionalStatusStack) push(level level, overrideStatus Class, isolateStatus bool) {\n\ts.embeddingLevelStack[s.stackCounter] = level\n\ts.overrideStatusStack[s.stackCounter] = overrideStatus\n\ts.isolateStatusStack[s.stackCounter] = isolateStatus\n\ts.stackCounter++\n}\n\nfunc (s *directionalStatusStack) lastEmbeddingLevel() level {\n\treturn s.embeddingLevelStack[s.stackCounter-1]\n}\n\nfunc (s *directionalStatusStack) lastDirectionalOverrideStatus() Class {\n\treturn s.overrideStatusStack[s.stackCounter-1]\n}\n\nfunc (s *directionalStatusStack) lastDirectionalIsolateStatus() bool {\n\treturn s.isolateStatusStack[s.stackCounter-1]\n}\n\n// Determine explicit levels using rules X1 - X8\nfunc (p *paragraph) determineExplicitEmbeddingLevels() {\n\tvar stack directionalStatusStack\n\tvar overflowIsolateCount, overflowEmbeddingCount, validIsolateCount int\n\n\t// Rule X1.\n\tstack.push(p.embeddingLevel, ON, false)\n\n\tfor i, t := range p.resultTypes {\n\t\t// Rules X2, X3, X4, X5, X5a, X5b, X5c\n\t\tswitch t {\n\t\tcase RLE, LRE, RLO, LRO, RLI, LRI, FSI:\n\t\t\tisIsolate := t.in(RLI, LRI, FSI)\n\t\t\tisRTL := t.in(RLE, RLO, RLI)\n\n\t\t\t// override if this is an FSI that resolves to RLI\n\t\t\tif t == FSI {\n\t\t\t\tisRTL = (p.determineParagraphEmbeddingLevel(i+1, p.matchingPDI[i]) == 1)\n\t\t\t}\n\t\t\tif isIsolate {\n\t\t\t\tp.resultLevels[i] = stack.lastEmbeddingLevel()\n\t\t\t\tif stack.lastDirectionalOverrideStatus() != ON {\n\t\t\t\t\tp.resultTypes[i] = stack.lastDirectionalOverrideStatus()\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar newLevel level\n\t\t\tif isRTL {\n\t\t\t\t// least greater odd\n\t\t\t\tnewLevel = (stack.lastEmbeddingLevel() + 1) | 1\n\t\t\t} else {\n\t\t\t\t// least greater even\n\t\t\t\tnewLevel = (stack.lastEmbeddingLevel() + 2) &^ 1\n\t\t\t}\n\n\t\t\tif newLevel <= maxDepth && overflowIsolateCount == 0 && overflowEmbeddingCount == 0 {\n\t\t\t\tif isIsolate {\n\t\t\t\t\tvalidIsolateCount++\n\t\t\t\t}\n\t\t\t\t// Push new embedding level, override status, and isolated\n\t\t\t\t// status.\n\t\t\t\t// No check for valid stack counter, since the level check\n\t\t\t\t// suffices.\n\t\t\t\tswitch t {\n\t\t\t\tcase LRO:\n\t\t\t\t\tstack.push(newLevel, L, isIsolate)\n\t\t\t\tcase RLO:\n\t\t\t\t\tstack.push(newLevel, R, isIsolate)\n\t\t\t\tdefault:\n\t\t\t\t\tstack.push(newLevel, ON, isIsolate)\n\t\t\t\t}\n\t\t\t\t// Not really part of the spec\n\t\t\t\tif !isIsolate {\n\t\t\t\t\tp.resultLevels[i] = newLevel\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// This is an invalid explicit formatting character,\n\t\t\t\t// so apply the \"Otherwise\" part of rules X2-X5b.\n\t\t\t\tif isIsolate {\n\t\t\t\t\toverflowIsolateCount++\n\t\t\t\t} else { // !isIsolate\n\t\t\t\t\tif overflowIsolateCount == 0 {\n\t\t\t\t\t\toverflowEmbeddingCount++\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Rule X6a\n\t\tcase PDI:\n\t\t\tif overflowIsolateCount > 0 {\n\t\t\t\toverflowIsolateCount--\n\t\t\t} else if validIsolateCount == 0 {\n\t\t\t\t// do nothing\n\t\t\t} else {\n\t\t\t\toverflowEmbeddingCount = 0\n\t\t\t\tfor !stack.lastDirectionalIsolateStatus() {\n\t\t\t\t\tstack.pop()\n\t\t\t\t}\n\t\t\t\tstack.pop()\n\t\t\t\tvalidIsolateCount--\n\t\t\t}\n\t\t\tp.resultLevels[i] = stack.lastEmbeddingLevel()\n\n\t\t// Rule X7\n\t\tcase PDF:\n\t\t\t// Not really part of the spec\n\t\t\tp.resultLevels[i] = stack.lastEmbeddingLevel()\n\n\t\t\tif overflowIsolateCount > 0 {\n\t\t\t\t// do nothing\n\t\t\t} else if overflowEmbeddingCount > 0 {\n\t\t\t\toverflowEmbeddingCount--\n\t\t\t} else if !stack.lastDirectionalIsolateStatus() && stack.depth() >= 2 {\n\t\t\t\tstack.pop()\n\t\t\t}\n\n\t\tcase B: // paragraph separator.\n\t\t\t// Rule X8.\n\n\t\t\t// These values are reset for clarity, in this implementation B\n\t\t\t// can only occur as the last code in the array.\n\t\t\tstack.empty()\n\t\t\toverflowIsolateCount = 0\n\t\t\toverflowEmbeddingCount = 0\n\t\t\tvalidIsolateCount = 0\n\t\t\tp.resultLevels[i] = p.embeddingLevel\n\n\t\tdefault:\n\t\t\tp.resultLevels[i] = stack.lastEmbeddingLevel()\n\t\t\tif stack.lastDirectionalOverrideStatus() != ON {\n\t\t\t\tp.resultTypes[i] = stack.lastDirectionalOverrideStatus()\n\t\t\t}\n\t\t}\n\t}\n}\n\ntype isolatingRunSequence struct {\n\tp *paragraph\n\n\tindexes []int // indexes to the original string\n\n\ttypes          []Class // type of each character using the index\n\tresolvedLevels []level // resolved levels after application of rules\n\tlevel          level\n\tsos, eos       Class\n}\n\nfunc (i *isolatingRunSequence) Len() int { return len(i.indexes) }\n\nfunc maxLevel(a, b level) level {\n\tif a > b {\n\t\treturn a\n\t}\n\treturn b\n}\n\n// Rule X10, second bullet: Determine the start-of-sequence (sos) and end-of-sequence (eos) types,\n// \t\t\t either L or R, for each isolating run sequence.\nfunc (p *paragraph) isolatingRunSequence(indexes []int) *isolatingRunSequence {\n\tlength := len(indexes)\n\ttypes := make([]Class, length)\n\tfor i, x := range indexes {\n\t\ttypes[i] = p.resultTypes[x]\n\t}\n\n\t// assign level, sos and eos\n\tprevChar := indexes[0] - 1\n\tfor prevChar >= 0 && isRemovedByX9(p.initialTypes[prevChar]) {\n\t\tprevChar--\n\t}\n\tprevLevel := p.embeddingLevel\n\tif prevChar >= 0 {\n\t\tprevLevel = p.resultLevels[prevChar]\n\t}\n\n\tvar succLevel level\n\tlastType := types[length-1]\n\tif lastType.in(LRI, RLI, FSI) {\n\t\tsuccLevel = p.embeddingLevel\n\t} else {\n\t\t// the first character after the end of run sequence\n\t\tlimit := indexes[length-1] + 1\n\t\tfor ; limit < p.Len() && isRemovedByX9(p.initialTypes[limit]); limit++ {\n\n\t\t}\n\t\tsuccLevel = p.embeddingLevel\n\t\tif limit < p.Len() {\n\t\t\tsuccLevel = p.resultLevels[limit]\n\t\t}\n\t}\n\tlevel := p.resultLevels[indexes[0]]\n\treturn &isolatingRunSequence{\n\t\tp:       p,\n\t\tindexes: indexes,\n\t\ttypes:   types,\n\t\tlevel:   level,\n\t\tsos:     typeForLevel(maxLevel(prevLevel, level)),\n\t\teos:     typeForLevel(maxLevel(succLevel, level)),\n\t}\n}\n\n// Resolving weak types Rules W1-W7.\n//\n// Note that some weak types (EN, AN) remain after this processing is\n// complete.\nfunc (s *isolatingRunSequence) resolveWeakTypes() {\n\n\t// on entry, only these types remain\n\ts.assertOnly(L, R, AL, EN, ES, ET, AN, CS, B, S, WS, ON, NSM, LRI, RLI, FSI, PDI)\n\n\t// Rule W1.\n\t// Changes all NSMs.\n\tpreceedingCharacterType := s.sos\n\tfor i, t := range s.types {\n\t\tif t == NSM {\n\t\t\ts.types[i] = preceedingCharacterType\n\t\t} else {\n\t\t\tif t.in(LRI, RLI, FSI, PDI) {\n\t\t\t\tpreceedingCharacterType = ON\n\t\t\t}\n\t\t\tpreceedingCharacterType = t\n\t\t}\n\t}\n\n\t// Rule W2.\n\t// EN does not change at the start of the run, because sos != AL.\n\tfor i, t := range s.types {\n\t\tif t == EN {\n\t\t\tfor j := i - 1; j >= 0; j-- {\n\t\t\t\tif t := s.types[j]; t.in(L, R, AL) {\n\t\t\t\t\tif t == AL {\n\t\t\t\t\t\ts.types[i] = AN\n\t\t\t\t\t}\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Rule W3.\n\tfor i, t := range s.types {\n\t\tif t == AL {\n\t\t\ts.types[i] = R\n\t\t}\n\t}\n\n\t// Rule W4.\n\t// Since there must be values on both sides for this rule to have an\n\t// effect, the scan skips the first and last value.\n\t//\n\t// Although the scan proceeds left to right, and changes the type\n\t// values in a way that would appear to affect the computations\n\t// later in the scan, there is actually no problem. A change in the\n\t// current value can only affect the value to its immediate right,\n\t// and only affect it if it is ES or CS. But the current value can\n\t// only change if the value to its right is not ES or CS. Thus\n\t// either the current value will not change, or its change will have\n\t// no effect on the remainder of the analysis.\n\n\tfor i := 1; i < s.Len()-1; i++ {\n\t\tt := s.types[i]\n\t\tif t == ES || t == CS {\n\t\t\tprevSepType := s.types[i-1]\n\t\t\tsuccSepType := s.types[i+1]\n\t\t\tif prevSepType == EN && succSepType == EN {\n\t\t\t\ts.types[i] = EN\n\t\t\t} else if s.types[i] == CS && prevSepType == AN && succSepType == AN {\n\t\t\t\ts.types[i] = AN\n\t\t\t}\n\t\t}\n\t}\n\n\t// Rule W5.\n\tfor i, t := range s.types {\n\t\tif t == ET {\n\t\t\t// locate end of sequence\n\t\t\trunStart := i\n\t\t\trunEnd := s.findRunLimit(runStart, ET)\n\n\t\t\t// check values at ends of sequence\n\t\t\tt := s.sos\n\t\t\tif runStart > 0 {\n\t\t\t\tt = s.types[runStart-1]\n\t\t\t}\n\t\t\tif t != EN {\n\t\t\t\tt = s.eos\n\t\t\t\tif runEnd < len(s.types) {\n\t\t\t\t\tt = s.types[runEnd]\n\t\t\t\t}\n\t\t\t}\n\t\t\tif t == EN {\n\t\t\t\tsetTypes(s.types[runStart:runEnd], EN)\n\t\t\t}\n\t\t\t// continue at end of sequence\n\t\t\ti = runEnd\n\t\t}\n\t}\n\n\t// Rule W6.\n\tfor i, t := range s.types {\n\t\tif t.in(ES, ET, CS) {\n\t\t\ts.types[i] = ON\n\t\t}\n\t}\n\n\t// Rule W7.\n\tfor i, t := range s.types {\n\t\tif t == EN {\n\t\t\t// set default if we reach start of run\n\t\t\tprevStrongType := s.sos\n\t\t\tfor j := i - 1; j >= 0; j-- {\n\t\t\t\tt = s.types[j]\n\t\t\t\tif t == L || t == R { // AL's have been changed to R\n\t\t\t\t\tprevStrongType = t\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif prevStrongType == L {\n\t\t\t\ts.types[i] = L\n\t\t\t}\n\t\t}\n\t}\n}\n\n// 6) resolving neutral types Rules N1-N2.\nfunc (s *isolatingRunSequence) resolveNeutralTypes() {\n\n\t// on entry, only these types can be in resultTypes\n\ts.assertOnly(L, R, EN, AN, B, S, WS, ON, RLI, LRI, FSI, PDI)\n\n\tfor i, t := range s.types {\n\t\tswitch t {\n\t\tcase WS, ON, B, S, RLI, LRI, FSI, PDI:\n\t\t\t// find bounds of run of neutrals\n\t\t\trunStart := i\n\t\t\trunEnd := s.findRunLimit(runStart, B, S, WS, ON, RLI, LRI, FSI, PDI)\n\n\t\t\t// determine effective types at ends of run\n\t\t\tvar leadType, trailType Class\n\n\t\t\t// Note that the character found can only be L, R, AN, or\n\t\t\t// EN.\n\t\t\tif runStart == 0 {\n\t\t\t\tleadType = s.sos\n\t\t\t} else {\n\t\t\t\tleadType = s.types[runStart-1]\n\t\t\t\tif leadType.in(AN, EN) {\n\t\t\t\t\tleadType = R\n\t\t\t\t}\n\t\t\t}\n\t\t\tif runEnd == len(s.types) {\n\t\t\t\ttrailType = s.eos\n\t\t\t} else {\n\t\t\t\ttrailType = s.types[runEnd]\n\t\t\t\tif trailType.in(AN, EN) {\n\t\t\t\t\ttrailType = R\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar resolvedType Class\n\t\t\tif leadType == trailType {\n\t\t\t\t// Rule N1.\n\t\t\t\tresolvedType = leadType\n\t\t\t} else {\n\t\t\t\t// Rule N2.\n\t\t\t\t// Notice the embedding level of the run is used, not\n\t\t\t\t// the paragraph embedding level.\n\t\t\t\tresolvedType = typeForLevel(s.level)\n\t\t\t}\n\n\t\t\tsetTypes(s.types[runStart:runEnd], resolvedType)\n\n\t\t\t// skip over run of (former) neutrals\n\t\t\ti = runEnd\n\t\t}\n\t}\n}\n\nfunc setLevels(levels []level, newLevel level) {\n\tfor i := range levels {\n\t\tlevels[i] = newLevel\n\t}\n}\n\nfunc setTypes(types []Class, newType Class) {\n\tfor i := range types {\n\t\ttypes[i] = newType\n\t}\n}\n\n// 7) resolving implicit embedding levels Rules I1, I2.\nfunc (s *isolatingRunSequence) resolveImplicitLevels() {\n\n\t// on entry, only these types can be in resultTypes\n\ts.assertOnly(L, R, EN, AN)\n\n\ts.resolvedLevels = make([]level, len(s.types))\n\tsetLevels(s.resolvedLevels, s.level)\n\n\tif (s.level & 1) == 0 { // even level\n\t\tfor i, t := range s.types {\n\t\t\t// Rule I1.\n\t\t\tif t == L {\n\t\t\t\t// no change\n\t\t\t} else if t == R {\n\t\t\t\ts.resolvedLevels[i] += 1\n\t\t\t} else { // t == AN || t == EN\n\t\t\t\ts.resolvedLevels[i] += 2\n\t\t\t}\n\t\t}\n\t} else { // odd level\n\t\tfor i, t := range s.types {\n\t\t\t// Rule I2.\n\t\t\tif t == R {\n\t\t\t\t// no change\n\t\t\t} else { // t == L || t == AN || t == EN\n\t\t\t\ts.resolvedLevels[i] += 1\n\t\t\t}\n\t\t}\n\t}\n}\n\n// Applies the levels and types resolved in rules W1-I2 to the\n// resultLevels array.\nfunc (s *isolatingRunSequence) applyLevelsAndTypes() {\n\tfor i, x := range s.indexes {\n\t\ts.p.resultTypes[x] = s.types[i]\n\t\ts.p.resultLevels[x] = s.resolvedLevels[i]\n\t}\n}\n\n// Return the limit of the run consisting only of the types in validSet\n// starting at index. This checks the value at index, and will return\n// index if that value is not in validSet.\nfunc (s *isolatingRunSequence) findRunLimit(index int, validSet ...Class) int {\nloop:\n\tfor ; index < len(s.types); index++ {\n\t\tt := s.types[index]\n\t\tfor _, valid := range validSet {\n\t\t\tif t == valid {\n\t\t\t\tcontinue loop\n\t\t\t}\n\t\t}\n\t\treturn index // didn't find a match in validSet\n\t}\n\treturn len(s.types)\n}\n\n// Algorithm validation. Assert that all values in types are in the\n// provided set.\nfunc (s *isolatingRunSequence) assertOnly(codes ...Class) {\nloop:\n\tfor i, t := range s.types {\n\t\tfor _, c := range codes {\n\t\t\tif t == c {\n\t\t\t\tcontinue loop\n\t\t\t}\n\t\t}\n\t\tlog.Panicf(\"invalid bidi code %v present in assertOnly at position %d\", t, s.indexes[i])\n\t}\n}\n\n// determineLevelRuns returns an array of level runs. Each level run is\n// described as an array of indexes into the input string.\n//\n// Determines the level runs. Rule X9 will be applied in determining the\n// runs, in the way that makes sure the characters that are supposed to be\n// removed are not included in the runs.\nfunc (p *paragraph) determineLevelRuns() [][]int {\n\trun := []int{}\n\tallRuns := [][]int{}\n\tcurrentLevel := implicitLevel\n\n\tfor i := range p.initialTypes {\n\t\tif !isRemovedByX9(p.initialTypes[i]) {\n\t\t\tif p.resultLevels[i] != currentLevel {\n\t\t\t\t// we just encountered a new run; wrap up last run\n\t\t\t\tif currentLevel >= 0 { // only wrap it up if there was a run\n\t\t\t\t\tallRuns = append(allRuns, run)\n\t\t\t\t\trun = nil\n\t\t\t\t}\n\t\t\t\t// Start new run\n\t\t\t\tcurrentLevel = p.resultLevels[i]\n\t\t\t}\n\t\t\trun = append(run, i)\n\t\t}\n\t}\n\t// Wrap up the final run, if any\n\tif len(run) > 0 {\n\t\tallRuns = append(allRuns, run)\n\t}\n\treturn allRuns\n}\n\n// Definition BD13. Determine isolating run sequences.\nfunc (p *paragraph) determineIsolatingRunSequences() []*isolatingRunSequence {\n\tlevelRuns := p.determineLevelRuns()\n\n\t// Compute the run that each character belongs to\n\trunForCharacter := make([]int, p.Len())\n\tfor i, run := range levelRuns {\n\t\tfor _, index := range run {\n\t\t\trunForCharacter[index] = i\n\t\t}\n\t}\n\n\tsequences := []*isolatingRunSequence{}\n\n\tvar currentRunSequence []int\n\n\tfor _, run := range levelRuns {\n\t\tfirst := run[0]\n\t\tif p.initialTypes[first] != PDI || p.matchingIsolateInitiator[first] == -1 {\n\t\t\tcurrentRunSequence = nil\n\t\t\t// int run = i;\n\t\t\tfor {\n\t\t\t\t// Copy this level run into currentRunSequence\n\t\t\t\tcurrentRunSequence = append(currentRunSequence, run...)\n\n\t\t\t\tlast := currentRunSequence[len(currentRunSequence)-1]\n\t\t\t\tlastT := p.initialTypes[last]\n\t\t\t\tif lastT.in(LRI, RLI, FSI) && p.matchingPDI[last] != p.Len() {\n\t\t\t\t\trun = levelRuns[runForCharacter[p.matchingPDI[last]]]\n\t\t\t\t} else {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tsequences = append(sequences, p.isolatingRunSequence(currentRunSequence))\n\t\t}\n\t}\n\treturn sequences\n}\n\n// Assign level information to characters removed by rule X9. This is for\n// ease of relating the level information to the original input data. Note\n// that the levels assigned to these codes are arbitrary, they're chosen so\n// as to avoid breaking level runs.\nfunc (p *paragraph) assignLevelsToCharactersRemovedByX9() {\n\tfor i, t := range p.initialTypes {\n\t\tif t.in(LRE, RLE, LRO, RLO, PDF, BN) {\n\t\t\tp.resultTypes[i] = t\n\t\t\tp.resultLevels[i] = -1\n\t\t}\n\t}\n\t// now propagate forward the levels information (could have\n\t// propagated backward, the main thing is not to introduce a level\n\t// break where one doesn't already exist).\n\n\tif p.resultLevels[0] == -1 {\n\t\tp.resultLevels[0] = p.embeddingLevel\n\t}\n\tfor i := 1; i < len(p.initialTypes); i++ {\n\t\tif p.resultLevels[i] == -1 {\n\t\t\tp.resultLevels[i] = p.resultLevels[i-1]\n\t\t}\n\t}\n\t// Embedding information is for informational purposes only so need not be\n\t// adjusted.\n}\n\n//\n// Output\n//\n\n// getLevels computes levels array breaking lines at offsets in linebreaks.\n// Rule L1.\n//\n// The linebreaks array must include at least one value. The values must be\n// in strictly increasing order (no duplicates) between 1 and the length of\n// the text, inclusive. The last value must be the length of the text.\nfunc (p *paragraph) getLevels(linebreaks []int) []level {\n\t// Note that since the previous processing has removed all\n\t// P, S, and WS values from resultTypes, the values referred to\n\t// in these rules are the initial types, before any processing\n\t// has been applied (including processing of overrides).\n\t//\n\t// This example implementation has reinserted explicit format codes\n\t// and BN, in order that the levels array correspond to the\n\t// initial text. Their final placement is not normative.\n\t// These codes are treated like WS in this implementation,\n\t// so they don't interrupt sequences of WS.\n\n\tvalidateLineBreaks(linebreaks, p.Len())\n\n\tresult := append([]level(nil), p.resultLevels...)\n\n\t// don't worry about linebreaks since if there is a break within\n\t// a series of WS values preceding S, the linebreak itself\n\t// causes the reset.\n\tfor i, t := range p.initialTypes {\n\t\tif t.in(B, S) {\n\t\t\t// Rule L1, clauses one and two.\n\t\t\tresult[i] = p.embeddingLevel\n\n\t\t\t// Rule L1, clause three.\n\t\t\tfor j := i - 1; j >= 0; j-- {\n\t\t\t\tif isWhitespace(p.initialTypes[j]) { // including format codes\n\t\t\t\t\tresult[j] = p.embeddingLevel\n\t\t\t\t} else {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Rule L1, clause four.\n\tstart := 0\n\tfor _, limit := range linebreaks {\n\t\tfor j := limit - 1; j >= start; j-- {\n\t\t\tif isWhitespace(p.initialTypes[j]) { // including format codes\n\t\t\t\tresult[j] = p.embeddingLevel\n\t\t\t} else {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tstart = limit\n\t}\n\n\treturn result\n}\n\n// getReordering returns the reordering of lines from a visual index to a\n// logical index for line breaks at the given offsets.\n//\n// Lines are concatenated from left to right. So for example, the fifth\n// character from the left on the third line is\n//\n// \t\tgetReordering(linebreaks)[linebreaks[1] + 4]\n//\n// (linebreaks[1] is the position after the last character of the second\n// line, which is also the index of the first character on the third line,\n// and adding four gets the fifth character from the left).\n//\n// The linebreaks array must include at least one value. The values must be\n// in strictly increasing order (no duplicates) between 1 and the length of\n// the text, inclusive. The last value must be the length of the text.\nfunc (p *paragraph) getReordering(linebreaks []int) []int {\n\tvalidateLineBreaks(linebreaks, p.Len())\n\n\treturn computeMultilineReordering(p.getLevels(linebreaks), linebreaks)\n}\n\n// Return multiline reordering array for a given level array. Reordering\n// does not occur across a line break.\nfunc computeMultilineReordering(levels []level, linebreaks []int) []int {\n\tresult := make([]int, len(levels))\n\n\tstart := 0\n\tfor _, limit := range linebreaks {\n\t\ttempLevels := make([]level, limit-start)\n\t\tcopy(tempLevels, levels[start:])\n\n\t\tfor j, order := range computeReordering(tempLevels) {\n\t\t\tresult[start+j] = order + start\n\t\t}\n\t\tstart = limit\n\t}\n\treturn result\n}\n\n// Return reordering array for a given level array. This reorders a single\n// line. The reordering is a visual to logical map. For example, the\n// leftmost char is string.charAt(order[0]). Rule L2.\nfunc computeReordering(levels []level) []int {\n\tresult := make([]int, len(levels))\n\t// initialize order\n\tfor i := range result {\n\t\tresult[i] = i\n\t}\n\n\t// locate highest level found on line.\n\t// Note the rules say text, but no reordering across line bounds is\n\t// performed, so this is sufficient.\n\thighestLevel := level(0)\n\tlowestOddLevel := level(maxDepth + 2)\n\tfor _, level := range levels {\n\t\tif level > highestLevel {\n\t\t\thighestLevel = level\n\t\t}\n\t\tif level&1 != 0 && level < lowestOddLevel {\n\t\t\tlowestOddLevel = level\n\t\t}\n\t}\n\n\tfor level := highestLevel; level >= lowestOddLevel; level-- {\n\t\tfor i := 0; i < len(levels); i++ {\n\t\t\tif levels[i] >= level {\n\t\t\t\t// find range of text at or above this level\n\t\t\t\tstart := i\n\t\t\t\tlimit := i + 1\n\t\t\t\tfor limit < len(levels) && levels[limit] >= level {\n\t\t\t\t\tlimit++\n\t\t\t\t}\n\n\t\t\t\tfor j, k := start, limit-1; j < k; j, k = j+1, k-1 {\n\t\t\t\t\tresult[j], result[k] = result[k], result[j]\n\t\t\t\t}\n\t\t\t\t// skip to end of level run\n\t\t\t\ti = limit\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result\n}\n\n// isWhitespace reports whether the type is considered a whitespace type for the\n// line break rules.\nfunc isWhitespace(c Class) bool {\n\tswitch c {\n\tcase LRE, RLE, LRO, RLO, PDF, LRI, RLI, FSI, PDI, BN, WS:\n\t\treturn true\n\t}\n\treturn false\n}\n\n// isRemovedByX9 reports whether the type is one of the types removed in X9.\nfunc isRemovedByX9(c Class) bool {\n\tswitch c {\n\tcase LRE, RLE, LRO, RLO, PDF, BN:\n\t\treturn true\n\t}\n\treturn false\n}\n\n// typeForLevel reports the strong type (L or R) corresponding to the level.\nfunc typeForLevel(level level) Class {\n\tif (level & 0x1) == 0 {\n\t\treturn L\n\t}\n\treturn R\n}\n\n// TODO: change validation to not panic\n\nfunc validateTypes(types []Class) {\n\tif len(types) == 0 {\n\t\tlog.Panic(\"types is null\")\n\t}\n\tfor i, t := range types[:len(types)-1] {\n\t\tif t == B {\n\t\t\tlog.Panicf(\"B type before end of paragraph at index: %d\", i)\n\t\t}\n\t}\n}\n\nfunc validateParagraphEmbeddingLevel(embeddingLevel level) {\n\tif embeddingLevel != implicitLevel &&\n\t\tembeddingLevel != 0 &&\n\t\tembeddingLevel != 1 {\n\t\tlog.Panicf(\"illegal paragraph embedding level: %d\", embeddingLevel)\n\t}\n}\n\nfunc validateLineBreaks(linebreaks []int, textLength int) {\n\tprev := 0\n\tfor i, next := range linebreaks {\n\t\tif next <= prev {\n\t\t\tlog.Panicf(\"bad linebreak: %d at index: %d\", next, i)\n\t\t}\n\t\tprev = next\n\t}\n\tif prev != textLength {\n\t\tlog.Panicf(\"last linebreak was %d, want %d\", prev, textLength)\n\t}\n}\n\nfunc validatePbTypes(pairTypes []bracketType) {\n\tif len(pairTypes) == 0 {\n\t\tlog.Panic(\"pairTypes is null\")\n\t}\n\tfor i, pt := range pairTypes {\n\t\tswitch pt {\n\t\tcase bpNone, bpOpen, bpClose:\n\t\tdefault:\n\t\t\tlog.Panicf(\"illegal pairType value at %d: %v\", i, pairTypes[i])\n\t\t}\n\t}\n}\n\nfunc validatePbValues(pairValues []rune, pairTypes []bracketType) {\n\tif pairValues == nil {\n\t\tlog.Panic(\"pairValues is null\")\n\t}\n\tif len(pairTypes) != len(pairValues) {\n\t\tlog.Panic(\"pairTypes is different length from pairValues\")\n\t}\n}\n"
  },
  {
    "path": "vendor/golang.org/x/text/unicode/bidi/gen.go",
    "content": "// Copyright 2015 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build ignore\n\npackage main\n\nimport (\n\t\"flag\"\n\t\"log\"\n\n\t\"golang.org/x/text/internal/gen\"\n\t\"golang.org/x/text/internal/triegen\"\n\t\"golang.org/x/text/internal/ucd\"\n)\n\nvar outputFile = flag.String(\"out\", \"tables.go\", \"output file\")\n\nfunc main() {\n\tgen.Init()\n\tgen.Repackage(\"gen_trieval.go\", \"trieval.go\", \"bidi\")\n\tgen.Repackage(\"gen_ranges.go\", \"ranges_test.go\", \"bidi\")\n\n\tgenTables()\n}\n\n// bidiClass names and codes taken from class \"bc\" in\n// https://www.unicode.org/Public/8.0.0/ucd/PropertyValueAliases.txt\nvar bidiClass = map[string]Class{\n\t\"AL\":  AL,  // ArabicLetter\n\t\"AN\":  AN,  // ArabicNumber\n\t\"B\":   B,   // ParagraphSeparator\n\t\"BN\":  BN,  // BoundaryNeutral\n\t\"CS\":  CS,  // CommonSeparator\n\t\"EN\":  EN,  // EuropeanNumber\n\t\"ES\":  ES,  // EuropeanSeparator\n\t\"ET\":  ET,  // EuropeanTerminator\n\t\"L\":   L,   // LeftToRight\n\t\"NSM\": NSM, // NonspacingMark\n\t\"ON\":  ON,  // OtherNeutral\n\t\"R\":   R,   // RightToLeft\n\t\"S\":   S,   // SegmentSeparator\n\t\"WS\":  WS,  // WhiteSpace\n\n\t\"FSI\": Control,\n\t\"PDF\": Control,\n\t\"PDI\": Control,\n\t\"LRE\": Control,\n\t\"LRI\": Control,\n\t\"LRO\": Control,\n\t\"RLE\": Control,\n\t\"RLI\": Control,\n\t\"RLO\": Control,\n}\n\nfunc genTables() {\n\tif numClass > 0x0F {\n\t\tlog.Fatalf(\"Too many Class constants (%#x > 0x0F).\", numClass)\n\t}\n\tw := gen.NewCodeWriter()\n\tdefer w.WriteVersionedGoFile(*outputFile, \"bidi\")\n\n\tgen.WriteUnicodeVersion(w)\n\n\tt := triegen.NewTrie(\"bidi\")\n\n\t// Build data about bracket mapping. These bits need to be or-ed with\n\t// any other bits.\n\torMask := map[rune]uint64{}\n\n\txorMap := map[rune]int{}\n\txorMasks := []rune{0} // First value is no-op.\n\n\tucd.Parse(gen.OpenUCDFile(\"BidiBrackets.txt\"), func(p *ucd.Parser) {\n\t\tr1 := p.Rune(0)\n\t\tr2 := p.Rune(1)\n\t\txor := r1 ^ r2\n\t\tif _, ok := xorMap[xor]; !ok {\n\t\t\txorMap[xor] = len(xorMasks)\n\t\t\txorMasks = append(xorMasks, xor)\n\t\t}\n\t\tentry := uint64(xorMap[xor]) << xorMaskShift\n\t\tswitch p.String(2) {\n\t\tcase \"o\":\n\t\t\tentry |= openMask\n\t\tcase \"c\", \"n\":\n\t\tdefault:\n\t\t\tlog.Fatalf(\"Unknown bracket class %q.\", p.String(2))\n\t\t}\n\t\torMask[r1] = entry\n\t})\n\n\tw.WriteComment(`\n\txorMasks contains masks to be xor-ed with brackets to get the reverse\n\tversion.`)\n\tw.WriteVar(\"xorMasks\", xorMasks)\n\n\tdone := map[rune]bool{}\n\n\tinsert := func(r rune, c Class) {\n\t\tif !done[r] {\n\t\t\tt.Insert(r, orMask[r]|uint64(c))\n\t\t\tdone[r] = true\n\t\t}\n\t}\n\n\t// Insert the derived BiDi properties.\n\tucd.Parse(gen.OpenUCDFile(\"extracted/DerivedBidiClass.txt\"), func(p *ucd.Parser) {\n\t\tr := p.Rune(0)\n\t\tclass, ok := bidiClass[p.String(1)]\n\t\tif !ok {\n\t\t\tlog.Fatalf(\"%U: Unknown BiDi class %q\", r, p.String(1))\n\t\t}\n\t\tinsert(r, class)\n\t})\n\tvisitDefaults(insert)\n\n\t// TODO: use sparse blocks. This would reduce table size considerably\n\t// from the looks of it.\n\n\tsz, err := t.Gen(w)\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\tw.Size += sz\n}\n\n// dummy values to make methods in gen_common compile. The real versions\n// will be generated by this file to tables.go.\nvar (\n\txorMasks []rune\n)\n"
  },
  {
    "path": "vendor/golang.org/x/text/unicode/bidi/gen_ranges.go",
    "content": "// Copyright 2015 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build ignore\n\npackage main\n\nimport (\n\t\"unicode\"\n\n\t\"golang.org/x/text/internal/gen\"\n\t\"golang.org/x/text/internal/ucd\"\n\t\"golang.org/x/text/unicode/rangetable\"\n)\n\n// These tables are hand-extracted from:\n// https://www.unicode.org/Public/8.0.0/ucd/extracted/DerivedBidiClass.txt\nfunc visitDefaults(fn func(r rune, c Class)) {\n\t// first write default values for ranges listed above.\n\tvisitRunes(fn, AL, []rune{\n\t\t0x0600, 0x07BF, // Arabic\n\t\t0x08A0, 0x08FF, // Arabic Extended-A\n\t\t0xFB50, 0xFDCF, // Arabic Presentation Forms\n\t\t0xFDF0, 0xFDFF,\n\t\t0xFE70, 0xFEFF,\n\t\t0x0001EE00, 0x0001EEFF, // Arabic Mathematical Alpha Symbols\n\t})\n\tvisitRunes(fn, R, []rune{\n\t\t0x0590, 0x05FF, // Hebrew\n\t\t0x07C0, 0x089F, // Nko et al.\n\t\t0xFB1D, 0xFB4F,\n\t\t0x00010800, 0x00010FFF, // Cypriot Syllabary et. al.\n\t\t0x0001E800, 0x0001EDFF,\n\t\t0x0001EF00, 0x0001EFFF,\n\t})\n\tvisitRunes(fn, ET, []rune{ // European Terminator\n\t\t0x20A0, 0x20Cf, // Currency symbols\n\t})\n\trangetable.Visit(unicode.Noncharacter_Code_Point, func(r rune) {\n\t\tfn(r, BN) // Boundary Neutral\n\t})\n\tucd.Parse(gen.OpenUCDFile(\"DerivedCoreProperties.txt\"), func(p *ucd.Parser) {\n\t\tif p.String(1) == \"Default_Ignorable_Code_Point\" {\n\t\t\tfn(p.Rune(0), BN) // Boundary Neutral\n\t\t}\n\t})\n}\n\nfunc visitRunes(fn func(r rune, c Class), c Class, runes []rune) {\n\tfor i := 0; i < len(runes); i += 2 {\n\t\tlo, hi := runes[i], runes[i+1]\n\t\tfor j := lo; j <= hi; j++ {\n\t\t\tfn(j, c)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "vendor/golang.org/x/text/unicode/bidi/gen_trieval.go",
    "content": "// Copyright 2015 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build ignore\n\npackage main\n\n// Class is the Unicode BiDi class. Each rune has a single class.\ntype Class uint\n\nconst (\n\tL       Class = iota // LeftToRight\n\tR                    // RightToLeft\n\tEN                   // EuropeanNumber\n\tES                   // EuropeanSeparator\n\tET                   // EuropeanTerminator\n\tAN                   // ArabicNumber\n\tCS                   // CommonSeparator\n\tB                    // ParagraphSeparator\n\tS                    // SegmentSeparator\n\tWS                   // WhiteSpace\n\tON                   // OtherNeutral\n\tBN                   // BoundaryNeutral\n\tNSM                  // NonspacingMark\n\tAL                   // ArabicLetter\n\tControl              // Control LRO - PDI\n\n\tnumClass\n\n\tLRO // LeftToRightOverride\n\tRLO // RightToLeftOverride\n\tLRE // LeftToRightEmbedding\n\tRLE // RightToLeftEmbedding\n\tPDF // PopDirectionalFormat\n\tLRI // LeftToRightIsolate\n\tRLI // RightToLeftIsolate\n\tFSI // FirstStrongIsolate\n\tPDI // PopDirectionalIsolate\n\n\tunknownClass = ^Class(0)\n)\n\nvar controlToClass = map[rune]Class{\n\t0x202D: LRO, // LeftToRightOverride,\n\t0x202E: RLO, // RightToLeftOverride,\n\t0x202A: LRE, // LeftToRightEmbedding,\n\t0x202B: RLE, // RightToLeftEmbedding,\n\t0x202C: PDF, // PopDirectionalFormat,\n\t0x2066: LRI, // LeftToRightIsolate,\n\t0x2067: RLI, // RightToLeftIsolate,\n\t0x2068: FSI, // FirstStrongIsolate,\n\t0x2069: PDI, // PopDirectionalIsolate,\n}\n\n// A trie entry has the following bits:\n// 7..5  XOR mask for brackets\n// 4     1: Bracket open, 0: Bracket close\n// 3..0  Class type\n\nconst (\n\topenMask     = 0x10\n\txorMaskShift = 5\n)\n"
  },
  {
    "path": "vendor/golang.org/x/text/unicode/bidi/prop.go",
    "content": "// Copyright 2016 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage bidi\n\nimport \"unicode/utf8\"\n\n// Properties provides access to BiDi properties of runes.\ntype Properties struct {\n\tentry uint8\n\tlast  uint8\n}\n\nvar trie = newBidiTrie(0)\n\n// TODO: using this for bidirule reduces the running time by about 5%. Consider\n// if this is worth exposing or if we can find a way to speed up the Class\n// method.\n//\n// // CompactClass is like Class, but maps all of the BiDi control classes\n// // (LRO, RLO, LRE, RLE, PDF, LRI, RLI, FSI, PDI) to the class Control.\n// func (p Properties) CompactClass() Class {\n// \treturn Class(p.entry & 0x0F)\n// }\n\n// Class returns the Bidi class for p.\nfunc (p Properties) Class() Class {\n\tc := Class(p.entry & 0x0F)\n\tif c == Control {\n\t\tc = controlByteToClass[p.last&0xF]\n\t}\n\treturn c\n}\n\n// IsBracket reports whether the rune is a bracket.\nfunc (p Properties) IsBracket() bool { return p.entry&0xF0 != 0 }\n\n// IsOpeningBracket reports whether the rune is an opening bracket.\n// IsBracket must return true.\nfunc (p Properties) IsOpeningBracket() bool { return p.entry&openMask != 0 }\n\n// TODO: find a better API and expose.\nfunc (p Properties) reverseBracket(r rune) rune {\n\treturn xorMasks[p.entry>>xorMaskShift] ^ r\n}\n\nvar controlByteToClass = [16]Class{\n\t0xD: LRO, // U+202D LeftToRightOverride,\n\t0xE: RLO, // U+202E RightToLeftOverride,\n\t0xA: LRE, // U+202A LeftToRightEmbedding,\n\t0xB: RLE, // U+202B RightToLeftEmbedding,\n\t0xC: PDF, // U+202C PopDirectionalFormat,\n\t0x6: LRI, // U+2066 LeftToRightIsolate,\n\t0x7: RLI, // U+2067 RightToLeftIsolate,\n\t0x8: FSI, // U+2068 FirstStrongIsolate,\n\t0x9: PDI, // U+2069 PopDirectionalIsolate,\n}\n\n// LookupRune returns properties for r.\nfunc LookupRune(r rune) (p Properties, size int) {\n\tvar buf [4]byte\n\tn := utf8.EncodeRune(buf[:], r)\n\treturn Lookup(buf[:n])\n}\n\n// TODO: these lookup methods are based on the generated trie code. The returned\n// sizes have slightly different semantics from the generated code, in that it\n// always returns size==1 for an illegal UTF-8 byte (instead of the length\n// of the maximum invalid subsequence). Most Transformers, like unicode/norm,\n// leave invalid UTF-8 untouched, in which case it has performance benefits to\n// do so (without changing the semantics). Bidi requires the semantics used here\n// for the bidirule implementation to be compatible with the Go semantics.\n//  They ultimately should perhaps be adopted by all trie implementations, for\n// convenience sake.\n// This unrolled code also boosts performance of the secure/bidirule package by\n// about 30%.\n// So, to remove this code:\n//   - add option to trie generator to define return type.\n//   - always return 1 byte size for ill-formed UTF-8 runes.\n\n// Lookup returns properties for the first rune in s and the width in bytes of\n// its encoding. The size will be 0 if s does not hold enough bytes to complete\n// the encoding.\nfunc Lookup(s []byte) (p Properties, sz int) {\n\tc0 := s[0]\n\tswitch {\n\tcase c0 < 0x80: // is ASCII\n\t\treturn Properties{entry: bidiValues[c0]}, 1\n\tcase c0 < 0xC2:\n\t\treturn Properties{}, 1\n\tcase c0 < 0xE0: // 2-byte UTF-8\n\t\tif len(s) < 2 {\n\t\t\treturn Properties{}, 0\n\t\t}\n\t\ti := bidiIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn Properties{}, 1\n\t\t}\n\t\treturn Properties{entry: trie.lookupValue(uint32(i), c1)}, 2\n\tcase c0 < 0xF0: // 3-byte UTF-8\n\t\tif len(s) < 3 {\n\t\t\treturn Properties{}, 0\n\t\t}\n\t\ti := bidiIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn Properties{}, 1\n\t\t}\n\t\to := uint32(i)<<6 + uint32(c1)\n\t\ti = bidiIndex[o]\n\t\tc2 := s[2]\n\t\tif c2 < 0x80 || 0xC0 <= c2 {\n\t\t\treturn Properties{}, 1\n\t\t}\n\t\treturn Properties{entry: trie.lookupValue(uint32(i), c2), last: c2}, 3\n\tcase c0 < 0xF8: // 4-byte UTF-8\n\t\tif len(s) < 4 {\n\t\t\treturn Properties{}, 0\n\t\t}\n\t\ti := bidiIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn Properties{}, 1\n\t\t}\n\t\to := uint32(i)<<6 + uint32(c1)\n\t\ti = bidiIndex[o]\n\t\tc2 := s[2]\n\t\tif c2 < 0x80 || 0xC0 <= c2 {\n\t\t\treturn Properties{}, 1\n\t\t}\n\t\to = uint32(i)<<6 + uint32(c2)\n\t\ti = bidiIndex[o]\n\t\tc3 := s[3]\n\t\tif c3 < 0x80 || 0xC0 <= c3 {\n\t\t\treturn Properties{}, 1\n\t\t}\n\t\treturn Properties{entry: trie.lookupValue(uint32(i), c3)}, 4\n\t}\n\t// Illegal rune\n\treturn Properties{}, 1\n}\n\n// LookupString returns properties for the first rune in s and the width in\n// bytes of its encoding. The size will be 0 if s does not hold enough bytes to\n// complete the encoding.\nfunc LookupString(s string) (p Properties, sz int) {\n\tc0 := s[0]\n\tswitch {\n\tcase c0 < 0x80: // is ASCII\n\t\treturn Properties{entry: bidiValues[c0]}, 1\n\tcase c0 < 0xC2:\n\t\treturn Properties{}, 1\n\tcase c0 < 0xE0: // 2-byte UTF-8\n\t\tif len(s) < 2 {\n\t\t\treturn Properties{}, 0\n\t\t}\n\t\ti := bidiIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn Properties{}, 1\n\t\t}\n\t\treturn Properties{entry: trie.lookupValue(uint32(i), c1)}, 2\n\tcase c0 < 0xF0: // 3-byte UTF-8\n\t\tif len(s) < 3 {\n\t\t\treturn Properties{}, 0\n\t\t}\n\t\ti := bidiIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn Properties{}, 1\n\t\t}\n\t\to := uint32(i)<<6 + uint32(c1)\n\t\ti = bidiIndex[o]\n\t\tc2 := s[2]\n\t\tif c2 < 0x80 || 0xC0 <= c2 {\n\t\t\treturn Properties{}, 1\n\t\t}\n\t\treturn Properties{entry: trie.lookupValue(uint32(i), c2), last: c2}, 3\n\tcase c0 < 0xF8: // 4-byte UTF-8\n\t\tif len(s) < 4 {\n\t\t\treturn Properties{}, 0\n\t\t}\n\t\ti := bidiIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn Properties{}, 1\n\t\t}\n\t\to := uint32(i)<<6 + uint32(c1)\n\t\ti = bidiIndex[o]\n\t\tc2 := s[2]\n\t\tif c2 < 0x80 || 0xC0 <= c2 {\n\t\t\treturn Properties{}, 1\n\t\t}\n\t\to = uint32(i)<<6 + uint32(c2)\n\t\ti = bidiIndex[o]\n\t\tc3 := s[3]\n\t\tif c3 < 0x80 || 0xC0 <= c3 {\n\t\t\treturn Properties{}, 1\n\t\t}\n\t\treturn Properties{entry: trie.lookupValue(uint32(i), c3)}, 4\n\t}\n\t// Illegal rune\n\treturn Properties{}, 1\n}\n"
  },
  {
    "path": "vendor/golang.org/x/text/unicode/bidi/tables10.0.0.go",
    "content": "// Code generated by running \"go generate\" in golang.org/x/text. DO NOT EDIT.\n\n// +build go1.10,!go1.13\n\npackage bidi\n\n// UnicodeVersion is the Unicode version from which the tables in this package are derived.\nconst UnicodeVersion = \"10.0.0\"\n\n// xorMasks contains masks to be xor-ed with brackets to get the reverse\n// version.\nvar xorMasks = []int32{ // 8 elements\n\t0, 1, 6, 7, 3, 15, 29, 63,\n} // Size: 56 bytes\n\n// lookup returns the trie value for the first UTF-8 encoding in s and\n// the width in bytes of this encoding. The size will be 0 if s does not\n// hold enough bytes to complete the encoding. len(s) must be greater than 0.\nfunc (t *bidiTrie) lookup(s []byte) (v uint8, sz int) {\n\tc0 := s[0]\n\tswitch {\n\tcase c0 < 0x80: // is ASCII\n\t\treturn bidiValues[c0], 1\n\tcase c0 < 0xC2:\n\t\treturn 0, 1 // Illegal UTF-8: not a starter, not ASCII.\n\tcase c0 < 0xE0: // 2-byte UTF-8\n\t\tif len(s) < 2 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := bidiIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c1), 2\n\tcase c0 < 0xF0: // 3-byte UTF-8\n\t\tif len(s) < 3 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := bidiIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to := uint32(i)<<6 + uint32(c1)\n\t\ti = bidiIndex[o]\n\t\tc2 := s[2]\n\t\tif c2 < 0x80 || 0xC0 <= c2 {\n\t\t\treturn 0, 2 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c2), 3\n\tcase c0 < 0xF8: // 4-byte UTF-8\n\t\tif len(s) < 4 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := bidiIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to := uint32(i)<<6 + uint32(c1)\n\t\ti = bidiIndex[o]\n\t\tc2 := s[2]\n\t\tif c2 < 0x80 || 0xC0 <= c2 {\n\t\t\treturn 0, 2 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to = uint32(i)<<6 + uint32(c2)\n\t\ti = bidiIndex[o]\n\t\tc3 := s[3]\n\t\tif c3 < 0x80 || 0xC0 <= c3 {\n\t\t\treturn 0, 3 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c3), 4\n\t}\n\t// Illegal rune\n\treturn 0, 1\n}\n\n// lookupUnsafe returns the trie value for the first UTF-8 encoding in s.\n// s must start with a full and valid UTF-8 encoded rune.\nfunc (t *bidiTrie) lookupUnsafe(s []byte) uint8 {\n\tc0 := s[0]\n\tif c0 < 0x80 { // is ASCII\n\t\treturn bidiValues[c0]\n\t}\n\ti := bidiIndex[c0]\n\tif c0 < 0xE0 { // 2-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[1])\n\t}\n\ti = bidiIndex[uint32(i)<<6+uint32(s[1])]\n\tif c0 < 0xF0 { // 3-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[2])\n\t}\n\ti = bidiIndex[uint32(i)<<6+uint32(s[2])]\n\tif c0 < 0xF8 { // 4-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[3])\n\t}\n\treturn 0\n}\n\n// lookupString returns the trie value for the first UTF-8 encoding in s and\n// the width in bytes of this encoding. The size will be 0 if s does not\n// hold enough bytes to complete the encoding. len(s) must be greater than 0.\nfunc (t *bidiTrie) lookupString(s string) (v uint8, sz int) {\n\tc0 := s[0]\n\tswitch {\n\tcase c0 < 0x80: // is ASCII\n\t\treturn bidiValues[c0], 1\n\tcase c0 < 0xC2:\n\t\treturn 0, 1 // Illegal UTF-8: not a starter, not ASCII.\n\tcase c0 < 0xE0: // 2-byte UTF-8\n\t\tif len(s) < 2 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := bidiIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c1), 2\n\tcase c0 < 0xF0: // 3-byte UTF-8\n\t\tif len(s) < 3 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := bidiIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to := uint32(i)<<6 + uint32(c1)\n\t\ti = bidiIndex[o]\n\t\tc2 := s[2]\n\t\tif c2 < 0x80 || 0xC0 <= c2 {\n\t\t\treturn 0, 2 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c2), 3\n\tcase c0 < 0xF8: // 4-byte UTF-8\n\t\tif len(s) < 4 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := bidiIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to := uint32(i)<<6 + uint32(c1)\n\t\ti = bidiIndex[o]\n\t\tc2 := s[2]\n\t\tif c2 < 0x80 || 0xC0 <= c2 {\n\t\t\treturn 0, 2 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to = uint32(i)<<6 + uint32(c2)\n\t\ti = bidiIndex[o]\n\t\tc3 := s[3]\n\t\tif c3 < 0x80 || 0xC0 <= c3 {\n\t\t\treturn 0, 3 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c3), 4\n\t}\n\t// Illegal rune\n\treturn 0, 1\n}\n\n// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s.\n// s must start with a full and valid UTF-8 encoded rune.\nfunc (t *bidiTrie) lookupStringUnsafe(s string) uint8 {\n\tc0 := s[0]\n\tif c0 < 0x80 { // is ASCII\n\t\treturn bidiValues[c0]\n\t}\n\ti := bidiIndex[c0]\n\tif c0 < 0xE0 { // 2-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[1])\n\t}\n\ti = bidiIndex[uint32(i)<<6+uint32(s[1])]\n\tif c0 < 0xF0 { // 3-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[2])\n\t}\n\ti = bidiIndex[uint32(i)<<6+uint32(s[2])]\n\tif c0 < 0xF8 { // 4-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[3])\n\t}\n\treturn 0\n}\n\n// bidiTrie. Total size: 16128 bytes (15.75 KiB). Checksum: 8122d83e461996f.\ntype bidiTrie struct{}\n\nfunc newBidiTrie(i int) *bidiTrie {\n\treturn &bidiTrie{}\n}\n\n// lookupValue determines the type of block n and looks up the value for b.\nfunc (t *bidiTrie) lookupValue(n uint32, b byte) uint8 {\n\tswitch {\n\tdefault:\n\t\treturn uint8(bidiValues[n<<6+uint32(b)])\n\t}\n}\n\n// bidiValues: 228 blocks, 14592 entries, 14592 bytes\n// The third block is the zero block.\nvar bidiValues = [14592]uint8{\n\t// Block 0x0, offset 0x0\n\t0x00: 0x000b, 0x01: 0x000b, 0x02: 0x000b, 0x03: 0x000b, 0x04: 0x000b, 0x05: 0x000b,\n\t0x06: 0x000b, 0x07: 0x000b, 0x08: 0x000b, 0x09: 0x0008, 0x0a: 0x0007, 0x0b: 0x0008,\n\t0x0c: 0x0009, 0x0d: 0x0007, 0x0e: 0x000b, 0x0f: 0x000b, 0x10: 0x000b, 0x11: 0x000b,\n\t0x12: 0x000b, 0x13: 0x000b, 0x14: 0x000b, 0x15: 0x000b, 0x16: 0x000b, 0x17: 0x000b,\n\t0x18: 0x000b, 0x19: 0x000b, 0x1a: 0x000b, 0x1b: 0x000b, 0x1c: 0x0007, 0x1d: 0x0007,\n\t0x1e: 0x0007, 0x1f: 0x0008, 0x20: 0x0009, 0x21: 0x000a, 0x22: 0x000a, 0x23: 0x0004,\n\t0x24: 0x0004, 0x25: 0x0004, 0x26: 0x000a, 0x27: 0x000a, 0x28: 0x003a, 0x29: 0x002a,\n\t0x2a: 0x000a, 0x2b: 0x0003, 0x2c: 0x0006, 0x2d: 0x0003, 0x2e: 0x0006, 0x2f: 0x0006,\n\t0x30: 0x0002, 0x31: 0x0002, 0x32: 0x0002, 0x33: 0x0002, 0x34: 0x0002, 0x35: 0x0002,\n\t0x36: 0x0002, 0x37: 0x0002, 0x38: 0x0002, 0x39: 0x0002, 0x3a: 0x0006, 0x3b: 0x000a,\n\t0x3c: 0x000a, 0x3d: 0x000a, 0x3e: 0x000a, 0x3f: 0x000a,\n\t// Block 0x1, offset 0x40\n\t0x40: 0x000a,\n\t0x5b: 0x005a, 0x5c: 0x000a, 0x5d: 0x004a,\n\t0x5e: 0x000a, 0x5f: 0x000a, 0x60: 0x000a,\n\t0x7b: 0x005a,\n\t0x7c: 0x000a, 0x7d: 0x004a, 0x7e: 0x000a, 0x7f: 0x000b,\n\t// Block 0x2, offset 0x80\n\t// Block 0x3, offset 0xc0\n\t0xc0: 0x000b, 0xc1: 0x000b, 0xc2: 0x000b, 0xc3: 0x000b, 0xc4: 0x000b, 0xc5: 0x0007,\n\t0xc6: 0x000b, 0xc7: 0x000b, 0xc8: 0x000b, 0xc9: 0x000b, 0xca: 0x000b, 0xcb: 0x000b,\n\t0xcc: 0x000b, 0xcd: 0x000b, 0xce: 0x000b, 0xcf: 0x000b, 0xd0: 0x000b, 0xd1: 0x000b,\n\t0xd2: 0x000b, 0xd3: 0x000b, 0xd4: 0x000b, 0xd5: 0x000b, 0xd6: 0x000b, 0xd7: 0x000b,\n\t0xd8: 0x000b, 0xd9: 0x000b, 0xda: 0x000b, 0xdb: 0x000b, 0xdc: 0x000b, 0xdd: 0x000b,\n\t0xde: 0x000b, 0xdf: 0x000b, 0xe0: 0x0006, 0xe1: 0x000a, 0xe2: 0x0004, 0xe3: 0x0004,\n\t0xe4: 0x0004, 0xe5: 0x0004, 0xe6: 0x000a, 0xe7: 0x000a, 0xe8: 0x000a, 0xe9: 0x000a,\n\t0xeb: 0x000a, 0xec: 0x000a, 0xed: 0x000b, 0xee: 0x000a, 0xef: 0x000a,\n\t0xf0: 0x0004, 0xf1: 0x0004, 0xf2: 0x0002, 0xf3: 0x0002, 0xf4: 0x000a,\n\t0xf6: 0x000a, 0xf7: 0x000a, 0xf8: 0x000a, 0xf9: 0x0002, 0xfb: 0x000a,\n\t0xfc: 0x000a, 0xfd: 0x000a, 0xfe: 0x000a, 0xff: 0x000a,\n\t// Block 0x4, offset 0x100\n\t0x117: 0x000a,\n\t0x137: 0x000a,\n\t// Block 0x5, offset 0x140\n\t0x179: 0x000a, 0x17a: 0x000a,\n\t// Block 0x6, offset 0x180\n\t0x182: 0x000a, 0x183: 0x000a, 0x184: 0x000a, 0x185: 0x000a,\n\t0x186: 0x000a, 0x187: 0x000a, 0x188: 0x000a, 0x189: 0x000a, 0x18a: 0x000a, 0x18b: 0x000a,\n\t0x18c: 0x000a, 0x18d: 0x000a, 0x18e: 0x000a, 0x18f: 0x000a,\n\t0x192: 0x000a, 0x193: 0x000a, 0x194: 0x000a, 0x195: 0x000a, 0x196: 0x000a, 0x197: 0x000a,\n\t0x198: 0x000a, 0x199: 0x000a, 0x19a: 0x000a, 0x19b: 0x000a, 0x19c: 0x000a, 0x19d: 0x000a,\n\t0x19e: 0x000a, 0x19f: 0x000a,\n\t0x1a5: 0x000a, 0x1a6: 0x000a, 0x1a7: 0x000a, 0x1a8: 0x000a, 0x1a9: 0x000a,\n\t0x1aa: 0x000a, 0x1ab: 0x000a, 0x1ac: 0x000a, 0x1ad: 0x000a, 0x1af: 0x000a,\n\t0x1b0: 0x000a, 0x1b1: 0x000a, 0x1b2: 0x000a, 0x1b3: 0x000a, 0x1b4: 0x000a, 0x1b5: 0x000a,\n\t0x1b6: 0x000a, 0x1b7: 0x000a, 0x1b8: 0x000a, 0x1b9: 0x000a, 0x1ba: 0x000a, 0x1bb: 0x000a,\n\t0x1bc: 0x000a, 0x1bd: 0x000a, 0x1be: 0x000a, 0x1bf: 0x000a,\n\t// Block 0x7, offset 0x1c0\n\t0x1c0: 0x000c, 0x1c1: 0x000c, 0x1c2: 0x000c, 0x1c3: 0x000c, 0x1c4: 0x000c, 0x1c5: 0x000c,\n\t0x1c6: 0x000c, 0x1c7: 0x000c, 0x1c8: 0x000c, 0x1c9: 0x000c, 0x1ca: 0x000c, 0x1cb: 0x000c,\n\t0x1cc: 0x000c, 0x1cd: 0x000c, 0x1ce: 0x000c, 0x1cf: 0x000c, 0x1d0: 0x000c, 0x1d1: 0x000c,\n\t0x1d2: 0x000c, 0x1d3: 0x000c, 0x1d4: 0x000c, 0x1d5: 0x000c, 0x1d6: 0x000c, 0x1d7: 0x000c,\n\t0x1d8: 0x000c, 0x1d9: 0x000c, 0x1da: 0x000c, 0x1db: 0x000c, 0x1dc: 0x000c, 0x1dd: 0x000c,\n\t0x1de: 0x000c, 0x1df: 0x000c, 0x1e0: 0x000c, 0x1e1: 0x000c, 0x1e2: 0x000c, 0x1e3: 0x000c,\n\t0x1e4: 0x000c, 0x1e5: 0x000c, 0x1e6: 0x000c, 0x1e7: 0x000c, 0x1e8: 0x000c, 0x1e9: 0x000c,\n\t0x1ea: 0x000c, 0x1eb: 0x000c, 0x1ec: 0x000c, 0x1ed: 0x000c, 0x1ee: 0x000c, 0x1ef: 0x000c,\n\t0x1f0: 0x000c, 0x1f1: 0x000c, 0x1f2: 0x000c, 0x1f3: 0x000c, 0x1f4: 0x000c, 0x1f5: 0x000c,\n\t0x1f6: 0x000c, 0x1f7: 0x000c, 0x1f8: 0x000c, 0x1f9: 0x000c, 0x1fa: 0x000c, 0x1fb: 0x000c,\n\t0x1fc: 0x000c, 0x1fd: 0x000c, 0x1fe: 0x000c, 0x1ff: 0x000c,\n\t// Block 0x8, offset 0x200\n\t0x200: 0x000c, 0x201: 0x000c, 0x202: 0x000c, 0x203: 0x000c, 0x204: 0x000c, 0x205: 0x000c,\n\t0x206: 0x000c, 0x207: 0x000c, 0x208: 0x000c, 0x209: 0x000c, 0x20a: 0x000c, 0x20b: 0x000c,\n\t0x20c: 0x000c, 0x20d: 0x000c, 0x20e: 0x000c, 0x20f: 0x000c, 0x210: 0x000c, 0x211: 0x000c,\n\t0x212: 0x000c, 0x213: 0x000c, 0x214: 0x000c, 0x215: 0x000c, 0x216: 0x000c, 0x217: 0x000c,\n\t0x218: 0x000c, 0x219: 0x000c, 0x21a: 0x000c, 0x21b: 0x000c, 0x21c: 0x000c, 0x21d: 0x000c,\n\t0x21e: 0x000c, 0x21f: 0x000c, 0x220: 0x000c, 0x221: 0x000c, 0x222: 0x000c, 0x223: 0x000c,\n\t0x224: 0x000c, 0x225: 0x000c, 0x226: 0x000c, 0x227: 0x000c, 0x228: 0x000c, 0x229: 0x000c,\n\t0x22a: 0x000c, 0x22b: 0x000c, 0x22c: 0x000c, 0x22d: 0x000c, 0x22e: 0x000c, 0x22f: 0x000c,\n\t0x234: 0x000a, 0x235: 0x000a,\n\t0x23e: 0x000a,\n\t// Block 0x9, offset 0x240\n\t0x244: 0x000a, 0x245: 0x000a,\n\t0x247: 0x000a,\n\t// Block 0xa, offset 0x280\n\t0x2b6: 0x000a,\n\t// Block 0xb, offset 0x2c0\n\t0x2c3: 0x000c, 0x2c4: 0x000c, 0x2c5: 0x000c,\n\t0x2c6: 0x000c, 0x2c7: 0x000c, 0x2c8: 0x000c, 0x2c9: 0x000c,\n\t// Block 0xc, offset 0x300\n\t0x30a: 0x000a,\n\t0x30d: 0x000a, 0x30e: 0x000a, 0x30f: 0x0004, 0x310: 0x0001, 0x311: 0x000c,\n\t0x312: 0x000c, 0x313: 0x000c, 0x314: 0x000c, 0x315: 0x000c, 0x316: 0x000c, 0x317: 0x000c,\n\t0x318: 0x000c, 0x319: 0x000c, 0x31a: 0x000c, 0x31b: 0x000c, 0x31c: 0x000c, 0x31d: 0x000c,\n\t0x31e: 0x000c, 0x31f: 0x000c, 0x320: 0x000c, 0x321: 0x000c, 0x322: 0x000c, 0x323: 0x000c,\n\t0x324: 0x000c, 0x325: 0x000c, 0x326: 0x000c, 0x327: 0x000c, 0x328: 0x000c, 0x329: 0x000c,\n\t0x32a: 0x000c, 0x32b: 0x000c, 0x32c: 0x000c, 0x32d: 0x000c, 0x32e: 0x000c, 0x32f: 0x000c,\n\t0x330: 0x000c, 0x331: 0x000c, 0x332: 0x000c, 0x333: 0x000c, 0x334: 0x000c, 0x335: 0x000c,\n\t0x336: 0x000c, 0x337: 0x000c, 0x338: 0x000c, 0x339: 0x000c, 0x33a: 0x000c, 0x33b: 0x000c,\n\t0x33c: 0x000c, 0x33d: 0x000c, 0x33e: 0x0001, 0x33f: 0x000c,\n\t// Block 0xd, offset 0x340\n\t0x340: 0x0001, 0x341: 0x000c, 0x342: 0x000c, 0x343: 0x0001, 0x344: 0x000c, 0x345: 0x000c,\n\t0x346: 0x0001, 0x347: 0x000c, 0x348: 0x0001, 0x349: 0x0001, 0x34a: 0x0001, 0x34b: 0x0001,\n\t0x34c: 0x0001, 0x34d: 0x0001, 0x34e: 0x0001, 0x34f: 0x0001, 0x350: 0x0001, 0x351: 0x0001,\n\t0x352: 0x0001, 0x353: 0x0001, 0x354: 0x0001, 0x355: 0x0001, 0x356: 0x0001, 0x357: 0x0001,\n\t0x358: 0x0001, 0x359: 0x0001, 0x35a: 0x0001, 0x35b: 0x0001, 0x35c: 0x0001, 0x35d: 0x0001,\n\t0x35e: 0x0001, 0x35f: 0x0001, 0x360: 0x0001, 0x361: 0x0001, 0x362: 0x0001, 0x363: 0x0001,\n\t0x364: 0x0001, 0x365: 0x0001, 0x366: 0x0001, 0x367: 0x0001, 0x368: 0x0001, 0x369: 0x0001,\n\t0x36a: 0x0001, 0x36b: 0x0001, 0x36c: 0x0001, 0x36d: 0x0001, 0x36e: 0x0001, 0x36f: 0x0001,\n\t0x370: 0x0001, 0x371: 0x0001, 0x372: 0x0001, 0x373: 0x0001, 0x374: 0x0001, 0x375: 0x0001,\n\t0x376: 0x0001, 0x377: 0x0001, 0x378: 0x0001, 0x379: 0x0001, 0x37a: 0x0001, 0x37b: 0x0001,\n\t0x37c: 0x0001, 0x37d: 0x0001, 0x37e: 0x0001, 0x37f: 0x0001,\n\t// Block 0xe, offset 0x380\n\t0x380: 0x0005, 0x381: 0x0005, 0x382: 0x0005, 0x383: 0x0005, 0x384: 0x0005, 0x385: 0x0005,\n\t0x386: 0x000a, 0x387: 0x000a, 0x388: 0x000d, 0x389: 0x0004, 0x38a: 0x0004, 0x38b: 0x000d,\n\t0x38c: 0x0006, 0x38d: 0x000d, 0x38e: 0x000a, 0x38f: 0x000a, 0x390: 0x000c, 0x391: 0x000c,\n\t0x392: 0x000c, 0x393: 0x000c, 0x394: 0x000c, 0x395: 0x000c, 0x396: 0x000c, 0x397: 0x000c,\n\t0x398: 0x000c, 0x399: 0x000c, 0x39a: 0x000c, 0x39b: 0x000d, 0x39c: 0x000d, 0x39d: 0x000d,\n\t0x39e: 0x000d, 0x39f: 0x000d, 0x3a0: 0x000d, 0x3a1: 0x000d, 0x3a2: 0x000d, 0x3a3: 0x000d,\n\t0x3a4: 0x000d, 0x3a5: 0x000d, 0x3a6: 0x000d, 0x3a7: 0x000d, 0x3a8: 0x000d, 0x3a9: 0x000d,\n\t0x3aa: 0x000d, 0x3ab: 0x000d, 0x3ac: 0x000d, 0x3ad: 0x000d, 0x3ae: 0x000d, 0x3af: 0x000d,\n\t0x3b0: 0x000d, 0x3b1: 0x000d, 0x3b2: 0x000d, 0x3b3: 0x000d, 0x3b4: 0x000d, 0x3b5: 0x000d,\n\t0x3b6: 0x000d, 0x3b7: 0x000d, 0x3b8: 0x000d, 0x3b9: 0x000d, 0x3ba: 0x000d, 0x3bb: 0x000d,\n\t0x3bc: 0x000d, 0x3bd: 0x000d, 0x3be: 0x000d, 0x3bf: 0x000d,\n\t// Block 0xf, offset 0x3c0\n\t0x3c0: 0x000d, 0x3c1: 0x000d, 0x3c2: 0x000d, 0x3c3: 0x000d, 0x3c4: 0x000d, 0x3c5: 0x000d,\n\t0x3c6: 0x000d, 0x3c7: 0x000d, 0x3c8: 0x000d, 0x3c9: 0x000d, 0x3ca: 0x000d, 0x3cb: 0x000c,\n\t0x3cc: 0x000c, 0x3cd: 0x000c, 0x3ce: 0x000c, 0x3cf: 0x000c, 0x3d0: 0x000c, 0x3d1: 0x000c,\n\t0x3d2: 0x000c, 0x3d3: 0x000c, 0x3d4: 0x000c, 0x3d5: 0x000c, 0x3d6: 0x000c, 0x3d7: 0x000c,\n\t0x3d8: 0x000c, 0x3d9: 0x000c, 0x3da: 0x000c, 0x3db: 0x000c, 0x3dc: 0x000c, 0x3dd: 0x000c,\n\t0x3de: 0x000c, 0x3df: 0x000c, 0x3e0: 0x0005, 0x3e1: 0x0005, 0x3e2: 0x0005, 0x3e3: 0x0005,\n\t0x3e4: 0x0005, 0x3e5: 0x0005, 0x3e6: 0x0005, 0x3e7: 0x0005, 0x3e8: 0x0005, 0x3e9: 0x0005,\n\t0x3ea: 0x0004, 0x3eb: 0x0005, 0x3ec: 0x0005, 0x3ed: 0x000d, 0x3ee: 0x000d, 0x3ef: 0x000d,\n\t0x3f0: 0x000c, 0x3f1: 0x000d, 0x3f2: 0x000d, 0x3f3: 0x000d, 0x3f4: 0x000d, 0x3f5: 0x000d,\n\t0x3f6: 0x000d, 0x3f7: 0x000d, 0x3f8: 0x000d, 0x3f9: 0x000d, 0x3fa: 0x000d, 0x3fb: 0x000d,\n\t0x3fc: 0x000d, 0x3fd: 0x000d, 0x3fe: 0x000d, 0x3ff: 0x000d,\n\t// Block 0x10, offset 0x400\n\t0x400: 0x000d, 0x401: 0x000d, 0x402: 0x000d, 0x403: 0x000d, 0x404: 0x000d, 0x405: 0x000d,\n\t0x406: 0x000d, 0x407: 0x000d, 0x408: 0x000d, 0x409: 0x000d, 0x40a: 0x000d, 0x40b: 0x000d,\n\t0x40c: 0x000d, 0x40d: 0x000d, 0x40e: 0x000d, 0x40f: 0x000d, 0x410: 0x000d, 0x411: 0x000d,\n\t0x412: 0x000d, 0x413: 0x000d, 0x414: 0x000d, 0x415: 0x000d, 0x416: 0x000d, 0x417: 0x000d,\n\t0x418: 0x000d, 0x419: 0x000d, 0x41a: 0x000d, 0x41b: 0x000d, 0x41c: 0x000d, 0x41d: 0x000d,\n\t0x41e: 0x000d, 0x41f: 0x000d, 0x420: 0x000d, 0x421: 0x000d, 0x422: 0x000d, 0x423: 0x000d,\n\t0x424: 0x000d, 0x425: 0x000d, 0x426: 0x000d, 0x427: 0x000d, 0x428: 0x000d, 0x429: 0x000d,\n\t0x42a: 0x000d, 0x42b: 0x000d, 0x42c: 0x000d, 0x42d: 0x000d, 0x42e: 0x000d, 0x42f: 0x000d,\n\t0x430: 0x000d, 0x431: 0x000d, 0x432: 0x000d, 0x433: 0x000d, 0x434: 0x000d, 0x435: 0x000d,\n\t0x436: 0x000d, 0x437: 0x000d, 0x438: 0x000d, 0x439: 0x000d, 0x43a: 0x000d, 0x43b: 0x000d,\n\t0x43c: 0x000d, 0x43d: 0x000d, 0x43e: 0x000d, 0x43f: 0x000d,\n\t// Block 0x11, offset 0x440\n\t0x440: 0x000d, 0x441: 0x000d, 0x442: 0x000d, 0x443: 0x000d, 0x444: 0x000d, 0x445: 0x000d,\n\t0x446: 0x000d, 0x447: 0x000d, 0x448: 0x000d, 0x449: 0x000d, 0x44a: 0x000d, 0x44b: 0x000d,\n\t0x44c: 0x000d, 0x44d: 0x000d, 0x44e: 0x000d, 0x44f: 0x000d, 0x450: 0x000d, 0x451: 0x000d,\n\t0x452: 0x000d, 0x453: 0x000d, 0x454: 0x000d, 0x455: 0x000d, 0x456: 0x000c, 0x457: 0x000c,\n\t0x458: 0x000c, 0x459: 0x000c, 0x45a: 0x000c, 0x45b: 0x000c, 0x45c: 0x000c, 0x45d: 0x0005,\n\t0x45e: 0x000a, 0x45f: 0x000c, 0x460: 0x000c, 0x461: 0x000c, 0x462: 0x000c, 0x463: 0x000c,\n\t0x464: 0x000c, 0x465: 0x000d, 0x466: 0x000d, 0x467: 0x000c, 0x468: 0x000c, 0x469: 0x000a,\n\t0x46a: 0x000c, 0x46b: 0x000c, 0x46c: 0x000c, 0x46d: 0x000c, 0x46e: 0x000d, 0x46f: 0x000d,\n\t0x470: 0x0002, 0x471: 0x0002, 0x472: 0x0002, 0x473: 0x0002, 0x474: 0x0002, 0x475: 0x0002,\n\t0x476: 0x0002, 0x477: 0x0002, 0x478: 0x0002, 0x479: 0x0002, 0x47a: 0x000d, 0x47b: 0x000d,\n\t0x47c: 0x000d, 0x47d: 0x000d, 0x47e: 0x000d, 0x47f: 0x000d,\n\t// Block 0x12, offset 0x480\n\t0x480: 0x000d, 0x481: 0x000d, 0x482: 0x000d, 0x483: 0x000d, 0x484: 0x000d, 0x485: 0x000d,\n\t0x486: 0x000d, 0x487: 0x000d, 0x488: 0x000d, 0x489: 0x000d, 0x48a: 0x000d, 0x48b: 0x000d,\n\t0x48c: 0x000d, 0x48d: 0x000d, 0x48e: 0x000d, 0x48f: 0x000d, 0x490: 0x000d, 0x491: 0x000c,\n\t0x492: 0x000d, 0x493: 0x000d, 0x494: 0x000d, 0x495: 0x000d, 0x496: 0x000d, 0x497: 0x000d,\n\t0x498: 0x000d, 0x499: 0x000d, 0x49a: 0x000d, 0x49b: 0x000d, 0x49c: 0x000d, 0x49d: 0x000d,\n\t0x49e: 0x000d, 0x49f: 0x000d, 0x4a0: 0x000d, 0x4a1: 0x000d, 0x4a2: 0x000d, 0x4a3: 0x000d,\n\t0x4a4: 0x000d, 0x4a5: 0x000d, 0x4a6: 0x000d, 0x4a7: 0x000d, 0x4a8: 0x000d, 0x4a9: 0x000d,\n\t0x4aa: 0x000d, 0x4ab: 0x000d, 0x4ac: 0x000d, 0x4ad: 0x000d, 0x4ae: 0x000d, 0x4af: 0x000d,\n\t0x4b0: 0x000c, 0x4b1: 0x000c, 0x4b2: 0x000c, 0x4b3: 0x000c, 0x4b4: 0x000c, 0x4b5: 0x000c,\n\t0x4b6: 0x000c, 0x4b7: 0x000c, 0x4b8: 0x000c, 0x4b9: 0x000c, 0x4ba: 0x000c, 0x4bb: 0x000c,\n\t0x4bc: 0x000c, 0x4bd: 0x000c, 0x4be: 0x000c, 0x4bf: 0x000c,\n\t// Block 0x13, offset 0x4c0\n\t0x4c0: 0x000c, 0x4c1: 0x000c, 0x4c2: 0x000c, 0x4c3: 0x000c, 0x4c4: 0x000c, 0x4c5: 0x000c,\n\t0x4c6: 0x000c, 0x4c7: 0x000c, 0x4c8: 0x000c, 0x4c9: 0x000c, 0x4ca: 0x000c, 0x4cb: 0x000d,\n\t0x4cc: 0x000d, 0x4cd: 0x000d, 0x4ce: 0x000d, 0x4cf: 0x000d, 0x4d0: 0x000d, 0x4d1: 0x000d,\n\t0x4d2: 0x000d, 0x4d3: 0x000d, 0x4d4: 0x000d, 0x4d5: 0x000d, 0x4d6: 0x000d, 0x4d7: 0x000d,\n\t0x4d8: 0x000d, 0x4d9: 0x000d, 0x4da: 0x000d, 0x4db: 0x000d, 0x4dc: 0x000d, 0x4dd: 0x000d,\n\t0x4de: 0x000d, 0x4df: 0x000d, 0x4e0: 0x000d, 0x4e1: 0x000d, 0x4e2: 0x000d, 0x4e3: 0x000d,\n\t0x4e4: 0x000d, 0x4e5: 0x000d, 0x4e6: 0x000d, 0x4e7: 0x000d, 0x4e8: 0x000d, 0x4e9: 0x000d,\n\t0x4ea: 0x000d, 0x4eb: 0x000d, 0x4ec: 0x000d, 0x4ed: 0x000d, 0x4ee: 0x000d, 0x4ef: 0x000d,\n\t0x4f0: 0x000d, 0x4f1: 0x000d, 0x4f2: 0x000d, 0x4f3: 0x000d, 0x4f4: 0x000d, 0x4f5: 0x000d,\n\t0x4f6: 0x000d, 0x4f7: 0x000d, 0x4f8: 0x000d, 0x4f9: 0x000d, 0x4fa: 0x000d, 0x4fb: 0x000d,\n\t0x4fc: 0x000d, 0x4fd: 0x000d, 0x4fe: 0x000d, 0x4ff: 0x000d,\n\t// Block 0x14, offset 0x500\n\t0x500: 0x000d, 0x501: 0x000d, 0x502: 0x000d, 0x503: 0x000d, 0x504: 0x000d, 0x505: 0x000d,\n\t0x506: 0x000d, 0x507: 0x000d, 0x508: 0x000d, 0x509: 0x000d, 0x50a: 0x000d, 0x50b: 0x000d,\n\t0x50c: 0x000d, 0x50d: 0x000d, 0x50e: 0x000d, 0x50f: 0x000d, 0x510: 0x000d, 0x511: 0x000d,\n\t0x512: 0x000d, 0x513: 0x000d, 0x514: 0x000d, 0x515: 0x000d, 0x516: 0x000d, 0x517: 0x000d,\n\t0x518: 0x000d, 0x519: 0x000d, 0x51a: 0x000d, 0x51b: 0x000d, 0x51c: 0x000d, 0x51d: 0x000d,\n\t0x51e: 0x000d, 0x51f: 0x000d, 0x520: 0x000d, 0x521: 0x000d, 0x522: 0x000d, 0x523: 0x000d,\n\t0x524: 0x000d, 0x525: 0x000d, 0x526: 0x000c, 0x527: 0x000c, 0x528: 0x000c, 0x529: 0x000c,\n\t0x52a: 0x000c, 0x52b: 0x000c, 0x52c: 0x000c, 0x52d: 0x000c, 0x52e: 0x000c, 0x52f: 0x000c,\n\t0x530: 0x000c, 0x531: 0x000d, 0x532: 0x000d, 0x533: 0x000d, 0x534: 0x000d, 0x535: 0x000d,\n\t0x536: 0x000d, 0x537: 0x000d, 0x538: 0x000d, 0x539: 0x000d, 0x53a: 0x000d, 0x53b: 0x000d,\n\t0x53c: 0x000d, 0x53d: 0x000d, 0x53e: 0x000d, 0x53f: 0x000d,\n\t// Block 0x15, offset 0x540\n\t0x540: 0x0001, 0x541: 0x0001, 0x542: 0x0001, 0x543: 0x0001, 0x544: 0x0001, 0x545: 0x0001,\n\t0x546: 0x0001, 0x547: 0x0001, 0x548: 0x0001, 0x549: 0x0001, 0x54a: 0x0001, 0x54b: 0x0001,\n\t0x54c: 0x0001, 0x54d: 0x0001, 0x54e: 0x0001, 0x54f: 0x0001, 0x550: 0x0001, 0x551: 0x0001,\n\t0x552: 0x0001, 0x553: 0x0001, 0x554: 0x0001, 0x555: 0x0001, 0x556: 0x0001, 0x557: 0x0001,\n\t0x558: 0x0001, 0x559: 0x0001, 0x55a: 0x0001, 0x55b: 0x0001, 0x55c: 0x0001, 0x55d: 0x0001,\n\t0x55e: 0x0001, 0x55f: 0x0001, 0x560: 0x0001, 0x561: 0x0001, 0x562: 0x0001, 0x563: 0x0001,\n\t0x564: 0x0001, 0x565: 0x0001, 0x566: 0x0001, 0x567: 0x0001, 0x568: 0x0001, 0x569: 0x0001,\n\t0x56a: 0x0001, 0x56b: 0x000c, 0x56c: 0x000c, 0x56d: 0x000c, 0x56e: 0x000c, 0x56f: 0x000c,\n\t0x570: 0x000c, 0x571: 0x000c, 0x572: 0x000c, 0x573: 0x000c, 0x574: 0x0001, 0x575: 0x0001,\n\t0x576: 0x000a, 0x577: 0x000a, 0x578: 0x000a, 0x579: 0x000a, 0x57a: 0x0001, 0x57b: 0x0001,\n\t0x57c: 0x0001, 0x57d: 0x0001, 0x57e: 0x0001, 0x57f: 0x0001,\n\t// Block 0x16, offset 0x580\n\t0x580: 0x0001, 0x581: 0x0001, 0x582: 0x0001, 0x583: 0x0001, 0x584: 0x0001, 0x585: 0x0001,\n\t0x586: 0x0001, 0x587: 0x0001, 0x588: 0x0001, 0x589: 0x0001, 0x58a: 0x0001, 0x58b: 0x0001,\n\t0x58c: 0x0001, 0x58d: 0x0001, 0x58e: 0x0001, 0x58f: 0x0001, 0x590: 0x0001, 0x591: 0x0001,\n\t0x592: 0x0001, 0x593: 0x0001, 0x594: 0x0001, 0x595: 0x0001, 0x596: 0x000c, 0x597: 0x000c,\n\t0x598: 0x000c, 0x599: 0x000c, 0x59a: 0x0001, 0x59b: 0x000c, 0x59c: 0x000c, 0x59d: 0x000c,\n\t0x59e: 0x000c, 0x59f: 0x000c, 0x5a0: 0x000c, 0x5a1: 0x000c, 0x5a2: 0x000c, 0x5a3: 0x000c,\n\t0x5a4: 0x0001, 0x5a5: 0x000c, 0x5a6: 0x000c, 0x5a7: 0x000c, 0x5a8: 0x0001, 0x5a9: 0x000c,\n\t0x5aa: 0x000c, 0x5ab: 0x000c, 0x5ac: 0x000c, 0x5ad: 0x000c, 0x5ae: 0x0001, 0x5af: 0x0001,\n\t0x5b0: 0x0001, 0x5b1: 0x0001, 0x5b2: 0x0001, 0x5b3: 0x0001, 0x5b4: 0x0001, 0x5b5: 0x0001,\n\t0x5b6: 0x0001, 0x5b7: 0x0001, 0x5b8: 0x0001, 0x5b9: 0x0001, 0x5ba: 0x0001, 0x5bb: 0x0001,\n\t0x5bc: 0x0001, 0x5bd: 0x0001, 0x5be: 0x0001, 0x5bf: 0x0001,\n\t// Block 0x17, offset 0x5c0\n\t0x5c0: 0x0001, 0x5c1: 0x0001, 0x5c2: 0x0001, 0x5c3: 0x0001, 0x5c4: 0x0001, 0x5c5: 0x0001,\n\t0x5c6: 0x0001, 0x5c7: 0x0001, 0x5c8: 0x0001, 0x5c9: 0x0001, 0x5ca: 0x0001, 0x5cb: 0x0001,\n\t0x5cc: 0x0001, 0x5cd: 0x0001, 0x5ce: 0x0001, 0x5cf: 0x0001, 0x5d0: 0x0001, 0x5d1: 0x0001,\n\t0x5d2: 0x0001, 0x5d3: 0x0001, 0x5d4: 0x0001, 0x5d5: 0x0001, 0x5d6: 0x0001, 0x5d7: 0x0001,\n\t0x5d8: 0x0001, 0x5d9: 0x000c, 0x5da: 0x000c, 0x5db: 0x000c, 0x5dc: 0x0001, 0x5dd: 0x0001,\n\t0x5de: 0x0001, 0x5df: 0x0001, 0x5e0: 0x000d, 0x5e1: 0x000d, 0x5e2: 0x000d, 0x5e3: 0x000d,\n\t0x5e4: 0x000d, 0x5e5: 0x000d, 0x5e6: 0x000d, 0x5e7: 0x000d, 0x5e8: 0x000d, 0x5e9: 0x000d,\n\t0x5ea: 0x000d, 0x5eb: 0x000d, 0x5ec: 0x000d, 0x5ed: 0x000d, 0x5ee: 0x000d, 0x5ef: 0x000d,\n\t0x5f0: 0x0001, 0x5f1: 0x0001, 0x5f2: 0x0001, 0x5f3: 0x0001, 0x5f4: 0x0001, 0x5f5: 0x0001,\n\t0x5f6: 0x0001, 0x5f7: 0x0001, 0x5f8: 0x0001, 0x5f9: 0x0001, 0x5fa: 0x0001, 0x5fb: 0x0001,\n\t0x5fc: 0x0001, 0x5fd: 0x0001, 0x5fe: 0x0001, 0x5ff: 0x0001,\n\t// Block 0x18, offset 0x600\n\t0x600: 0x0001, 0x601: 0x0001, 0x602: 0x0001, 0x603: 0x0001, 0x604: 0x0001, 0x605: 0x0001,\n\t0x606: 0x0001, 0x607: 0x0001, 0x608: 0x0001, 0x609: 0x0001, 0x60a: 0x0001, 0x60b: 0x0001,\n\t0x60c: 0x0001, 0x60d: 0x0001, 0x60e: 0x0001, 0x60f: 0x0001, 0x610: 0x0001, 0x611: 0x0001,\n\t0x612: 0x0001, 0x613: 0x0001, 0x614: 0x0001, 0x615: 0x0001, 0x616: 0x0001, 0x617: 0x0001,\n\t0x618: 0x0001, 0x619: 0x0001, 0x61a: 0x0001, 0x61b: 0x0001, 0x61c: 0x0001, 0x61d: 0x0001,\n\t0x61e: 0x0001, 0x61f: 0x0001, 0x620: 0x000d, 0x621: 0x000d, 0x622: 0x000d, 0x623: 0x000d,\n\t0x624: 0x000d, 0x625: 0x000d, 0x626: 0x000d, 0x627: 0x000d, 0x628: 0x000d, 0x629: 0x000d,\n\t0x62a: 0x000d, 0x62b: 0x000d, 0x62c: 0x000d, 0x62d: 0x000d, 0x62e: 0x000d, 0x62f: 0x000d,\n\t0x630: 0x000d, 0x631: 0x000d, 0x632: 0x000d, 0x633: 0x000d, 0x634: 0x000d, 0x635: 0x000d,\n\t0x636: 0x000d, 0x637: 0x000d, 0x638: 0x000d, 0x639: 0x000d, 0x63a: 0x000d, 0x63b: 0x000d,\n\t0x63c: 0x000d, 0x63d: 0x000d, 0x63e: 0x000d, 0x63f: 0x000d,\n\t// Block 0x19, offset 0x640\n\t0x640: 0x000d, 0x641: 0x000d, 0x642: 0x000d, 0x643: 0x000d, 0x644: 0x000d, 0x645: 0x000d,\n\t0x646: 0x000d, 0x647: 0x000d, 0x648: 0x000d, 0x649: 0x000d, 0x64a: 0x000d, 0x64b: 0x000d,\n\t0x64c: 0x000d, 0x64d: 0x000d, 0x64e: 0x000d, 0x64f: 0x000d, 0x650: 0x000d, 0x651: 0x000d,\n\t0x652: 0x000d, 0x653: 0x000d, 0x654: 0x000c, 0x655: 0x000c, 0x656: 0x000c, 0x657: 0x000c,\n\t0x658: 0x000c, 0x659: 0x000c, 0x65a: 0x000c, 0x65b: 0x000c, 0x65c: 0x000c, 0x65d: 0x000c,\n\t0x65e: 0x000c, 0x65f: 0x000c, 0x660: 0x000c, 0x661: 0x000c, 0x662: 0x0005, 0x663: 0x000c,\n\t0x664: 0x000c, 0x665: 0x000c, 0x666: 0x000c, 0x667: 0x000c, 0x668: 0x000c, 0x669: 0x000c,\n\t0x66a: 0x000c, 0x66b: 0x000c, 0x66c: 0x000c, 0x66d: 0x000c, 0x66e: 0x000c, 0x66f: 0x000c,\n\t0x670: 0x000c, 0x671: 0x000c, 0x672: 0x000c, 0x673: 0x000c, 0x674: 0x000c, 0x675: 0x000c,\n\t0x676: 0x000c, 0x677: 0x000c, 0x678: 0x000c, 0x679: 0x000c, 0x67a: 0x000c, 0x67b: 0x000c,\n\t0x67c: 0x000c, 0x67d: 0x000c, 0x67e: 0x000c, 0x67f: 0x000c,\n\t// Block 0x1a, offset 0x680\n\t0x680: 0x000c, 0x681: 0x000c, 0x682: 0x000c,\n\t0x6ba: 0x000c,\n\t0x6bc: 0x000c,\n\t// Block 0x1b, offset 0x6c0\n\t0x6c1: 0x000c, 0x6c2: 0x000c, 0x6c3: 0x000c, 0x6c4: 0x000c, 0x6c5: 0x000c,\n\t0x6c6: 0x000c, 0x6c7: 0x000c, 0x6c8: 0x000c,\n\t0x6cd: 0x000c, 0x6d1: 0x000c,\n\t0x6d2: 0x000c, 0x6d3: 0x000c, 0x6d4: 0x000c, 0x6d5: 0x000c, 0x6d6: 0x000c, 0x6d7: 0x000c,\n\t0x6e2: 0x000c, 0x6e3: 0x000c,\n\t// Block 0x1c, offset 0x700\n\t0x701: 0x000c,\n\t0x73c: 0x000c,\n\t// Block 0x1d, offset 0x740\n\t0x741: 0x000c, 0x742: 0x000c, 0x743: 0x000c, 0x744: 0x000c,\n\t0x74d: 0x000c,\n\t0x762: 0x000c, 0x763: 0x000c,\n\t0x772: 0x0004, 0x773: 0x0004,\n\t0x77b: 0x0004,\n\t// Block 0x1e, offset 0x780\n\t0x781: 0x000c, 0x782: 0x000c,\n\t0x7bc: 0x000c,\n\t// Block 0x1f, offset 0x7c0\n\t0x7c1: 0x000c, 0x7c2: 0x000c,\n\t0x7c7: 0x000c, 0x7c8: 0x000c, 0x7cb: 0x000c,\n\t0x7cc: 0x000c, 0x7cd: 0x000c, 0x7d1: 0x000c,\n\t0x7f0: 0x000c, 0x7f1: 0x000c, 0x7f5: 0x000c,\n\t// Block 0x20, offset 0x800\n\t0x801: 0x000c, 0x802: 0x000c, 0x803: 0x000c, 0x804: 0x000c, 0x805: 0x000c,\n\t0x807: 0x000c, 0x808: 0x000c,\n\t0x80d: 0x000c,\n\t0x822: 0x000c, 0x823: 0x000c,\n\t0x831: 0x0004,\n\t0x83a: 0x000c, 0x83b: 0x000c,\n\t0x83c: 0x000c, 0x83d: 0x000c, 0x83e: 0x000c, 0x83f: 0x000c,\n\t// Block 0x21, offset 0x840\n\t0x841: 0x000c,\n\t0x87c: 0x000c, 0x87f: 0x000c,\n\t// Block 0x22, offset 0x880\n\t0x881: 0x000c, 0x882: 0x000c, 0x883: 0x000c, 0x884: 0x000c,\n\t0x88d: 0x000c,\n\t0x896: 0x000c,\n\t0x8a2: 0x000c, 0x8a3: 0x000c,\n\t// Block 0x23, offset 0x8c0\n\t0x8c2: 0x000c,\n\t// Block 0x24, offset 0x900\n\t0x900: 0x000c,\n\t0x90d: 0x000c,\n\t0x933: 0x000a, 0x934: 0x000a, 0x935: 0x000a,\n\t0x936: 0x000a, 0x937: 0x000a, 0x938: 0x000a, 0x939: 0x0004, 0x93a: 0x000a,\n\t// Block 0x25, offset 0x940\n\t0x940: 0x000c,\n\t0x97e: 0x000c, 0x97f: 0x000c,\n\t// Block 0x26, offset 0x980\n\t0x980: 0x000c,\n\t0x986: 0x000c, 0x987: 0x000c, 0x988: 0x000c, 0x98a: 0x000c, 0x98b: 0x000c,\n\t0x98c: 0x000c, 0x98d: 0x000c,\n\t0x995: 0x000c, 0x996: 0x000c,\n\t0x9a2: 0x000c, 0x9a3: 0x000c,\n\t0x9b8: 0x000a, 0x9b9: 0x000a, 0x9ba: 0x000a, 0x9bb: 0x000a,\n\t0x9bc: 0x000a, 0x9bd: 0x000a, 0x9be: 0x000a,\n\t// Block 0x27, offset 0x9c0\n\t0x9cc: 0x000c, 0x9cd: 0x000c,\n\t0x9e2: 0x000c, 0x9e3: 0x000c,\n\t// Block 0x28, offset 0xa00\n\t0xa00: 0x000c, 0xa01: 0x000c,\n\t0xa3b: 0x000c,\n\t0xa3c: 0x000c,\n\t// Block 0x29, offset 0xa40\n\t0xa41: 0x000c, 0xa42: 0x000c, 0xa43: 0x000c, 0xa44: 0x000c,\n\t0xa4d: 0x000c,\n\t0xa62: 0x000c, 0xa63: 0x000c,\n\t// Block 0x2a, offset 0xa80\n\t0xa8a: 0x000c,\n\t0xa92: 0x000c, 0xa93: 0x000c, 0xa94: 0x000c, 0xa96: 0x000c,\n\t// Block 0x2b, offset 0xac0\n\t0xaf1: 0x000c, 0xaf4: 0x000c, 0xaf5: 0x000c,\n\t0xaf6: 0x000c, 0xaf7: 0x000c, 0xaf8: 0x000c, 0xaf9: 0x000c, 0xafa: 0x000c,\n\t0xaff: 0x0004,\n\t// Block 0x2c, offset 0xb00\n\t0xb07: 0x000c, 0xb08: 0x000c, 0xb09: 0x000c, 0xb0a: 0x000c, 0xb0b: 0x000c,\n\t0xb0c: 0x000c, 0xb0d: 0x000c, 0xb0e: 0x000c,\n\t// Block 0x2d, offset 0xb40\n\t0xb71: 0x000c, 0xb74: 0x000c, 0xb75: 0x000c,\n\t0xb76: 0x000c, 0xb77: 0x000c, 0xb78: 0x000c, 0xb79: 0x000c, 0xb7b: 0x000c,\n\t0xb7c: 0x000c,\n\t// Block 0x2e, offset 0xb80\n\t0xb88: 0x000c, 0xb89: 0x000c, 0xb8a: 0x000c, 0xb8b: 0x000c,\n\t0xb8c: 0x000c, 0xb8d: 0x000c,\n\t// Block 0x2f, offset 0xbc0\n\t0xbd8: 0x000c, 0xbd9: 0x000c,\n\t0xbf5: 0x000c,\n\t0xbf7: 0x000c, 0xbf9: 0x000c, 0xbfa: 0x003a, 0xbfb: 0x002a,\n\t0xbfc: 0x003a, 0xbfd: 0x002a,\n\t// Block 0x30, offset 0xc00\n\t0xc31: 0x000c, 0xc32: 0x000c, 0xc33: 0x000c, 0xc34: 0x000c, 0xc35: 0x000c,\n\t0xc36: 0x000c, 0xc37: 0x000c, 0xc38: 0x000c, 0xc39: 0x000c, 0xc3a: 0x000c, 0xc3b: 0x000c,\n\t0xc3c: 0x000c, 0xc3d: 0x000c, 0xc3e: 0x000c,\n\t// Block 0x31, offset 0xc40\n\t0xc40: 0x000c, 0xc41: 0x000c, 0xc42: 0x000c, 0xc43: 0x000c, 0xc44: 0x000c,\n\t0xc46: 0x000c, 0xc47: 0x000c,\n\t0xc4d: 0x000c, 0xc4e: 0x000c, 0xc4f: 0x000c, 0xc50: 0x000c, 0xc51: 0x000c,\n\t0xc52: 0x000c, 0xc53: 0x000c, 0xc54: 0x000c, 0xc55: 0x000c, 0xc56: 0x000c, 0xc57: 0x000c,\n\t0xc59: 0x000c, 0xc5a: 0x000c, 0xc5b: 0x000c, 0xc5c: 0x000c, 0xc5d: 0x000c,\n\t0xc5e: 0x000c, 0xc5f: 0x000c, 0xc60: 0x000c, 0xc61: 0x000c, 0xc62: 0x000c, 0xc63: 0x000c,\n\t0xc64: 0x000c, 0xc65: 0x000c, 0xc66: 0x000c, 0xc67: 0x000c, 0xc68: 0x000c, 0xc69: 0x000c,\n\t0xc6a: 0x000c, 0xc6b: 0x000c, 0xc6c: 0x000c, 0xc6d: 0x000c, 0xc6e: 0x000c, 0xc6f: 0x000c,\n\t0xc70: 0x000c, 0xc71: 0x000c, 0xc72: 0x000c, 0xc73: 0x000c, 0xc74: 0x000c, 0xc75: 0x000c,\n\t0xc76: 0x000c, 0xc77: 0x000c, 0xc78: 0x000c, 0xc79: 0x000c, 0xc7a: 0x000c, 0xc7b: 0x000c,\n\t0xc7c: 0x000c,\n\t// Block 0x32, offset 0xc80\n\t0xc86: 0x000c,\n\t// Block 0x33, offset 0xcc0\n\t0xced: 0x000c, 0xcee: 0x000c, 0xcef: 0x000c,\n\t0xcf0: 0x000c, 0xcf2: 0x000c, 0xcf3: 0x000c, 0xcf4: 0x000c, 0xcf5: 0x000c,\n\t0xcf6: 0x000c, 0xcf7: 0x000c, 0xcf9: 0x000c, 0xcfa: 0x000c,\n\t0xcfd: 0x000c, 0xcfe: 0x000c,\n\t// Block 0x34, offset 0xd00\n\t0xd18: 0x000c, 0xd19: 0x000c,\n\t0xd1e: 0x000c, 0xd1f: 0x000c, 0xd20: 0x000c,\n\t0xd31: 0x000c, 0xd32: 0x000c, 0xd33: 0x000c, 0xd34: 0x000c,\n\t// Block 0x35, offset 0xd40\n\t0xd42: 0x000c, 0xd45: 0x000c,\n\t0xd46: 0x000c,\n\t0xd4d: 0x000c,\n\t0xd5d: 0x000c,\n\t// Block 0x36, offset 0xd80\n\t0xd9d: 0x000c,\n\t0xd9e: 0x000c, 0xd9f: 0x000c,\n\t// Block 0x37, offset 0xdc0\n\t0xdd0: 0x000a, 0xdd1: 0x000a,\n\t0xdd2: 0x000a, 0xdd3: 0x000a, 0xdd4: 0x000a, 0xdd5: 0x000a, 0xdd6: 0x000a, 0xdd7: 0x000a,\n\t0xdd8: 0x000a, 0xdd9: 0x000a,\n\t// Block 0x38, offset 0xe00\n\t0xe00: 0x000a,\n\t// Block 0x39, offset 0xe40\n\t0xe40: 0x0009,\n\t0xe5b: 0x007a, 0xe5c: 0x006a,\n\t// Block 0x3a, offset 0xe80\n\t0xe92: 0x000c, 0xe93: 0x000c, 0xe94: 0x000c,\n\t0xeb2: 0x000c, 0xeb3: 0x000c, 0xeb4: 0x000c,\n\t// Block 0x3b, offset 0xec0\n\t0xed2: 0x000c, 0xed3: 0x000c,\n\t0xef2: 0x000c, 0xef3: 0x000c,\n\t// Block 0x3c, offset 0xf00\n\t0xf34: 0x000c, 0xf35: 0x000c,\n\t0xf37: 0x000c, 0xf38: 0x000c, 0xf39: 0x000c, 0xf3a: 0x000c, 0xf3b: 0x000c,\n\t0xf3c: 0x000c, 0xf3d: 0x000c,\n\t// Block 0x3d, offset 0xf40\n\t0xf46: 0x000c, 0xf49: 0x000c, 0xf4a: 0x000c, 0xf4b: 0x000c,\n\t0xf4c: 0x000c, 0xf4d: 0x000c, 0xf4e: 0x000c, 0xf4f: 0x000c, 0xf50: 0x000c, 0xf51: 0x000c,\n\t0xf52: 0x000c, 0xf53: 0x000c,\n\t0xf5b: 0x0004, 0xf5d: 0x000c,\n\t0xf70: 0x000a, 0xf71: 0x000a, 0xf72: 0x000a, 0xf73: 0x000a, 0xf74: 0x000a, 0xf75: 0x000a,\n\t0xf76: 0x000a, 0xf77: 0x000a, 0xf78: 0x000a, 0xf79: 0x000a,\n\t// Block 0x3e, offset 0xf80\n\t0xf80: 0x000a, 0xf81: 0x000a, 0xf82: 0x000a, 0xf83: 0x000a, 0xf84: 0x000a, 0xf85: 0x000a,\n\t0xf86: 0x000a, 0xf87: 0x000a, 0xf88: 0x000a, 0xf89: 0x000a, 0xf8a: 0x000a, 0xf8b: 0x000c,\n\t0xf8c: 0x000c, 0xf8d: 0x000c, 0xf8e: 0x000b,\n\t// Block 0x3f, offset 0xfc0\n\t0xfc5: 0x000c,\n\t0xfc6: 0x000c,\n\t0xfe9: 0x000c,\n\t// Block 0x40, offset 0x1000\n\t0x1020: 0x000c, 0x1021: 0x000c, 0x1022: 0x000c,\n\t0x1027: 0x000c, 0x1028: 0x000c,\n\t0x1032: 0x000c,\n\t0x1039: 0x000c, 0x103a: 0x000c, 0x103b: 0x000c,\n\t// Block 0x41, offset 0x1040\n\t0x1040: 0x000a, 0x1044: 0x000a, 0x1045: 0x000a,\n\t// Block 0x42, offset 0x1080\n\t0x109e: 0x000a, 0x109f: 0x000a, 0x10a0: 0x000a, 0x10a1: 0x000a, 0x10a2: 0x000a, 0x10a3: 0x000a,\n\t0x10a4: 0x000a, 0x10a5: 0x000a, 0x10a6: 0x000a, 0x10a7: 0x000a, 0x10a8: 0x000a, 0x10a9: 0x000a,\n\t0x10aa: 0x000a, 0x10ab: 0x000a, 0x10ac: 0x000a, 0x10ad: 0x000a, 0x10ae: 0x000a, 0x10af: 0x000a,\n\t0x10b0: 0x000a, 0x10b1: 0x000a, 0x10b2: 0x000a, 0x10b3: 0x000a, 0x10b4: 0x000a, 0x10b5: 0x000a,\n\t0x10b6: 0x000a, 0x10b7: 0x000a, 0x10b8: 0x000a, 0x10b9: 0x000a, 0x10ba: 0x000a, 0x10bb: 0x000a,\n\t0x10bc: 0x000a, 0x10bd: 0x000a, 0x10be: 0x000a, 0x10bf: 0x000a,\n\t// Block 0x43, offset 0x10c0\n\t0x10d7: 0x000c,\n\t0x10d8: 0x000c, 0x10db: 0x000c,\n\t// Block 0x44, offset 0x1100\n\t0x1116: 0x000c,\n\t0x1118: 0x000c, 0x1119: 0x000c, 0x111a: 0x000c, 0x111b: 0x000c, 0x111c: 0x000c, 0x111d: 0x000c,\n\t0x111e: 0x000c, 0x1120: 0x000c, 0x1122: 0x000c,\n\t0x1125: 0x000c, 0x1126: 0x000c, 0x1127: 0x000c, 0x1128: 0x000c, 0x1129: 0x000c,\n\t0x112a: 0x000c, 0x112b: 0x000c, 0x112c: 0x000c,\n\t0x1133: 0x000c, 0x1134: 0x000c, 0x1135: 0x000c,\n\t0x1136: 0x000c, 0x1137: 0x000c, 0x1138: 0x000c, 0x1139: 0x000c, 0x113a: 0x000c, 0x113b: 0x000c,\n\t0x113c: 0x000c, 0x113f: 0x000c,\n\t// Block 0x45, offset 0x1140\n\t0x1170: 0x000c, 0x1171: 0x000c, 0x1172: 0x000c, 0x1173: 0x000c, 0x1174: 0x000c, 0x1175: 0x000c,\n\t0x1176: 0x000c, 0x1177: 0x000c, 0x1178: 0x000c, 0x1179: 0x000c, 0x117a: 0x000c, 0x117b: 0x000c,\n\t0x117c: 0x000c, 0x117d: 0x000c, 0x117e: 0x000c,\n\t// Block 0x46, offset 0x1180\n\t0x1180: 0x000c, 0x1181: 0x000c, 0x1182: 0x000c, 0x1183: 0x000c,\n\t0x11b4: 0x000c,\n\t0x11b6: 0x000c, 0x11b7: 0x000c, 0x11b8: 0x000c, 0x11b9: 0x000c, 0x11ba: 0x000c,\n\t0x11bc: 0x000c,\n\t// Block 0x47, offset 0x11c0\n\t0x11c2: 0x000c,\n\t0x11eb: 0x000c, 0x11ec: 0x000c, 0x11ed: 0x000c, 0x11ee: 0x000c, 0x11ef: 0x000c,\n\t0x11f0: 0x000c, 0x11f1: 0x000c, 0x11f2: 0x000c, 0x11f3: 0x000c,\n\t// Block 0x48, offset 0x1200\n\t0x1200: 0x000c, 0x1201: 0x000c,\n\t0x1222: 0x000c, 0x1223: 0x000c,\n\t0x1224: 0x000c, 0x1225: 0x000c, 0x1228: 0x000c, 0x1229: 0x000c,\n\t0x122b: 0x000c, 0x122c: 0x000c, 0x122d: 0x000c,\n\t// Block 0x49, offset 0x1240\n\t0x1266: 0x000c, 0x1268: 0x000c, 0x1269: 0x000c,\n\t0x126d: 0x000c, 0x126f: 0x000c,\n\t0x1270: 0x000c, 0x1271: 0x000c,\n\t// Block 0x4a, offset 0x1280\n\t0x12ac: 0x000c, 0x12ad: 0x000c, 0x12ae: 0x000c, 0x12af: 0x000c,\n\t0x12b0: 0x000c, 0x12b1: 0x000c, 0x12b2: 0x000c, 0x12b3: 0x000c,\n\t0x12b6: 0x000c, 0x12b7: 0x000c,\n\t// Block 0x4b, offset 0x12c0\n\t0x12d0: 0x000c, 0x12d1: 0x000c,\n\t0x12d2: 0x000c, 0x12d4: 0x000c, 0x12d5: 0x000c, 0x12d6: 0x000c, 0x12d7: 0x000c,\n\t0x12d8: 0x000c, 0x12d9: 0x000c, 0x12da: 0x000c, 0x12db: 0x000c, 0x12dc: 0x000c, 0x12dd: 0x000c,\n\t0x12de: 0x000c, 0x12df: 0x000c, 0x12e0: 0x000c, 0x12e2: 0x000c, 0x12e3: 0x000c,\n\t0x12e4: 0x000c, 0x12e5: 0x000c, 0x12e6: 0x000c, 0x12e7: 0x000c, 0x12e8: 0x000c,\n\t0x12ed: 0x000c,\n\t0x12f4: 0x000c,\n\t0x12f8: 0x000c, 0x12f9: 0x000c,\n\t// Block 0x4c, offset 0x1300\n\t0x1300: 0x000c, 0x1301: 0x000c, 0x1302: 0x000c, 0x1303: 0x000c, 0x1304: 0x000c, 0x1305: 0x000c,\n\t0x1306: 0x000c, 0x1307: 0x000c, 0x1308: 0x000c, 0x1309: 0x000c, 0x130a: 0x000c, 0x130b: 0x000c,\n\t0x130c: 0x000c, 0x130d: 0x000c, 0x130e: 0x000c, 0x130f: 0x000c, 0x1310: 0x000c, 0x1311: 0x000c,\n\t0x1312: 0x000c, 0x1313: 0x000c, 0x1314: 0x000c, 0x1315: 0x000c, 0x1316: 0x000c, 0x1317: 0x000c,\n\t0x1318: 0x000c, 0x1319: 0x000c, 0x131a: 0x000c, 0x131b: 0x000c, 0x131c: 0x000c, 0x131d: 0x000c,\n\t0x131e: 0x000c, 0x131f: 0x000c, 0x1320: 0x000c, 0x1321: 0x000c, 0x1322: 0x000c, 0x1323: 0x000c,\n\t0x1324: 0x000c, 0x1325: 0x000c, 0x1326: 0x000c, 0x1327: 0x000c, 0x1328: 0x000c, 0x1329: 0x000c,\n\t0x132a: 0x000c, 0x132b: 0x000c, 0x132c: 0x000c, 0x132d: 0x000c, 0x132e: 0x000c, 0x132f: 0x000c,\n\t0x1330: 0x000c, 0x1331: 0x000c, 0x1332: 0x000c, 0x1333: 0x000c, 0x1334: 0x000c, 0x1335: 0x000c,\n\t0x1336: 0x000c, 0x1337: 0x000c, 0x1338: 0x000c, 0x1339: 0x000c, 0x133b: 0x000c,\n\t0x133c: 0x000c, 0x133d: 0x000c, 0x133e: 0x000c, 0x133f: 0x000c,\n\t// Block 0x4d, offset 0x1340\n\t0x137d: 0x000a, 0x137f: 0x000a,\n\t// Block 0x4e, offset 0x1380\n\t0x1380: 0x000a, 0x1381: 0x000a,\n\t0x138d: 0x000a, 0x138e: 0x000a, 0x138f: 0x000a,\n\t0x139d: 0x000a,\n\t0x139e: 0x000a, 0x139f: 0x000a,\n\t0x13ad: 0x000a, 0x13ae: 0x000a, 0x13af: 0x000a,\n\t0x13bd: 0x000a, 0x13be: 0x000a,\n\t// Block 0x4f, offset 0x13c0\n\t0x13c0: 0x0009, 0x13c1: 0x0009, 0x13c2: 0x0009, 0x13c3: 0x0009, 0x13c4: 0x0009, 0x13c5: 0x0009,\n\t0x13c6: 0x0009, 0x13c7: 0x0009, 0x13c8: 0x0009, 0x13c9: 0x0009, 0x13ca: 0x0009, 0x13cb: 0x000b,\n\t0x13cc: 0x000b, 0x13cd: 0x000b, 0x13cf: 0x0001, 0x13d0: 0x000a, 0x13d1: 0x000a,\n\t0x13d2: 0x000a, 0x13d3: 0x000a, 0x13d4: 0x000a, 0x13d5: 0x000a, 0x13d6: 0x000a, 0x13d7: 0x000a,\n\t0x13d8: 0x000a, 0x13d9: 0x000a, 0x13da: 0x000a, 0x13db: 0x000a, 0x13dc: 0x000a, 0x13dd: 0x000a,\n\t0x13de: 0x000a, 0x13df: 0x000a, 0x13e0: 0x000a, 0x13e1: 0x000a, 0x13e2: 0x000a, 0x13e3: 0x000a,\n\t0x13e4: 0x000a, 0x13e5: 0x000a, 0x13e6: 0x000a, 0x13e7: 0x000a, 0x13e8: 0x0009, 0x13e9: 0x0007,\n\t0x13ea: 0x000e, 0x13eb: 0x000e, 0x13ec: 0x000e, 0x13ed: 0x000e, 0x13ee: 0x000e, 0x13ef: 0x0006,\n\t0x13f0: 0x0004, 0x13f1: 0x0004, 0x13f2: 0x0004, 0x13f3: 0x0004, 0x13f4: 0x0004, 0x13f5: 0x000a,\n\t0x13f6: 0x000a, 0x13f7: 0x000a, 0x13f8: 0x000a, 0x13f9: 0x000a, 0x13fa: 0x000a, 0x13fb: 0x000a,\n\t0x13fc: 0x000a, 0x13fd: 0x000a, 0x13fe: 0x000a, 0x13ff: 0x000a,\n\t// Block 0x50, offset 0x1400\n\t0x1400: 0x000a, 0x1401: 0x000a, 0x1402: 0x000a, 0x1403: 0x000a, 0x1404: 0x0006, 0x1405: 0x009a,\n\t0x1406: 0x008a, 0x1407: 0x000a, 0x1408: 0x000a, 0x1409: 0x000a, 0x140a: 0x000a, 0x140b: 0x000a,\n\t0x140c: 0x000a, 0x140d: 0x000a, 0x140e: 0x000a, 0x140f: 0x000a, 0x1410: 0x000a, 0x1411: 0x000a,\n\t0x1412: 0x000a, 0x1413: 0x000a, 0x1414: 0x000a, 0x1415: 0x000a, 0x1416: 0x000a, 0x1417: 0x000a,\n\t0x1418: 0x000a, 0x1419: 0x000a, 0x141a: 0x000a, 0x141b: 0x000a, 0x141c: 0x000a, 0x141d: 0x000a,\n\t0x141e: 0x000a, 0x141f: 0x0009, 0x1420: 0x000b, 0x1421: 0x000b, 0x1422: 0x000b, 0x1423: 0x000b,\n\t0x1424: 0x000b, 0x1425: 0x000b, 0x1426: 0x000e, 0x1427: 0x000e, 0x1428: 0x000e, 0x1429: 0x000e,\n\t0x142a: 0x000b, 0x142b: 0x000b, 0x142c: 0x000b, 0x142d: 0x000b, 0x142e: 0x000b, 0x142f: 0x000b,\n\t0x1430: 0x0002, 0x1434: 0x0002, 0x1435: 0x0002,\n\t0x1436: 0x0002, 0x1437: 0x0002, 0x1438: 0x0002, 0x1439: 0x0002, 0x143a: 0x0003, 0x143b: 0x0003,\n\t0x143c: 0x000a, 0x143d: 0x009a, 0x143e: 0x008a,\n\t// Block 0x51, offset 0x1440\n\t0x1440: 0x0002, 0x1441: 0x0002, 0x1442: 0x0002, 0x1443: 0x0002, 0x1444: 0x0002, 0x1445: 0x0002,\n\t0x1446: 0x0002, 0x1447: 0x0002, 0x1448: 0x0002, 0x1449: 0x0002, 0x144a: 0x0003, 0x144b: 0x0003,\n\t0x144c: 0x000a, 0x144d: 0x009a, 0x144e: 0x008a,\n\t0x1460: 0x0004, 0x1461: 0x0004, 0x1462: 0x0004, 0x1463: 0x0004,\n\t0x1464: 0x0004, 0x1465: 0x0004, 0x1466: 0x0004, 0x1467: 0x0004, 0x1468: 0x0004, 0x1469: 0x0004,\n\t0x146a: 0x0004, 0x146b: 0x0004, 0x146c: 0x0004, 0x146d: 0x0004, 0x146e: 0x0004, 0x146f: 0x0004,\n\t0x1470: 0x0004, 0x1471: 0x0004, 0x1472: 0x0004, 0x1473: 0x0004, 0x1474: 0x0004, 0x1475: 0x0004,\n\t0x1476: 0x0004, 0x1477: 0x0004, 0x1478: 0x0004, 0x1479: 0x0004, 0x147a: 0x0004, 0x147b: 0x0004,\n\t0x147c: 0x0004, 0x147d: 0x0004, 0x147e: 0x0004, 0x147f: 0x0004,\n\t// Block 0x52, offset 0x1480\n\t0x1480: 0x0004, 0x1481: 0x0004, 0x1482: 0x0004, 0x1483: 0x0004, 0x1484: 0x0004, 0x1485: 0x0004,\n\t0x1486: 0x0004, 0x1487: 0x0004, 0x1488: 0x0004, 0x1489: 0x0004, 0x148a: 0x0004, 0x148b: 0x0004,\n\t0x148c: 0x0004, 0x148d: 0x0004, 0x148e: 0x0004, 0x148f: 0x0004, 0x1490: 0x000c, 0x1491: 0x000c,\n\t0x1492: 0x000c, 0x1493: 0x000c, 0x1494: 0x000c, 0x1495: 0x000c, 0x1496: 0x000c, 0x1497: 0x000c,\n\t0x1498: 0x000c, 0x1499: 0x000c, 0x149a: 0x000c, 0x149b: 0x000c, 0x149c: 0x000c, 0x149d: 0x000c,\n\t0x149e: 0x000c, 0x149f: 0x000c, 0x14a0: 0x000c, 0x14a1: 0x000c, 0x14a2: 0x000c, 0x14a3: 0x000c,\n\t0x14a4: 0x000c, 0x14a5: 0x000c, 0x14a6: 0x000c, 0x14a7: 0x000c, 0x14a8: 0x000c, 0x14a9: 0x000c,\n\t0x14aa: 0x000c, 0x14ab: 0x000c, 0x14ac: 0x000c, 0x14ad: 0x000c, 0x14ae: 0x000c, 0x14af: 0x000c,\n\t0x14b0: 0x000c,\n\t// Block 0x53, offset 0x14c0\n\t0x14c0: 0x000a, 0x14c1: 0x000a, 0x14c3: 0x000a, 0x14c4: 0x000a, 0x14c5: 0x000a,\n\t0x14c6: 0x000a, 0x14c8: 0x000a, 0x14c9: 0x000a,\n\t0x14d4: 0x000a, 0x14d6: 0x000a, 0x14d7: 0x000a,\n\t0x14d8: 0x000a,\n\t0x14de: 0x000a, 0x14df: 0x000a, 0x14e0: 0x000a, 0x14e1: 0x000a, 0x14e2: 0x000a, 0x14e3: 0x000a,\n\t0x14e5: 0x000a, 0x14e7: 0x000a, 0x14e9: 0x000a,\n\t0x14ee: 0x0004,\n\t0x14fa: 0x000a, 0x14fb: 0x000a,\n\t// Block 0x54, offset 0x1500\n\t0x1500: 0x000a, 0x1501: 0x000a, 0x1502: 0x000a, 0x1503: 0x000a, 0x1504: 0x000a,\n\t0x150a: 0x000a, 0x150b: 0x000a,\n\t0x150c: 0x000a, 0x150d: 0x000a, 0x1510: 0x000a, 0x1511: 0x000a,\n\t0x1512: 0x000a, 0x1513: 0x000a, 0x1514: 0x000a, 0x1515: 0x000a, 0x1516: 0x000a, 0x1517: 0x000a,\n\t0x1518: 0x000a, 0x1519: 0x000a, 0x151a: 0x000a, 0x151b: 0x000a, 0x151c: 0x000a, 0x151d: 0x000a,\n\t0x151e: 0x000a, 0x151f: 0x000a,\n\t// Block 0x55, offset 0x1540\n\t0x1549: 0x000a, 0x154a: 0x000a, 0x154b: 0x000a,\n\t0x1550: 0x000a, 0x1551: 0x000a,\n\t0x1552: 0x000a, 0x1553: 0x000a, 0x1554: 0x000a, 0x1555: 0x000a, 0x1556: 0x000a, 0x1557: 0x000a,\n\t0x1558: 0x000a, 0x1559: 0x000a, 0x155a: 0x000a, 0x155b: 0x000a, 0x155c: 0x000a, 0x155d: 0x000a,\n\t0x155e: 0x000a, 0x155f: 0x000a, 0x1560: 0x000a, 0x1561: 0x000a, 0x1562: 0x000a, 0x1563: 0x000a,\n\t0x1564: 0x000a, 0x1565: 0x000a, 0x1566: 0x000a, 0x1567: 0x000a, 0x1568: 0x000a, 0x1569: 0x000a,\n\t0x156a: 0x000a, 0x156b: 0x000a, 0x156c: 0x000a, 0x156d: 0x000a, 0x156e: 0x000a, 0x156f: 0x000a,\n\t0x1570: 0x000a, 0x1571: 0x000a, 0x1572: 0x000a, 0x1573: 0x000a, 0x1574: 0x000a, 0x1575: 0x000a,\n\t0x1576: 0x000a, 0x1577: 0x000a, 0x1578: 0x000a, 0x1579: 0x000a, 0x157a: 0x000a, 0x157b: 0x000a,\n\t0x157c: 0x000a, 0x157d: 0x000a, 0x157e: 0x000a, 0x157f: 0x000a,\n\t// Block 0x56, offset 0x1580\n\t0x1580: 0x000a, 0x1581: 0x000a, 0x1582: 0x000a, 0x1583: 0x000a, 0x1584: 0x000a, 0x1585: 0x000a,\n\t0x1586: 0x000a, 0x1587: 0x000a, 0x1588: 0x000a, 0x1589: 0x000a, 0x158a: 0x000a, 0x158b: 0x000a,\n\t0x158c: 0x000a, 0x158d: 0x000a, 0x158e: 0x000a, 0x158f: 0x000a, 0x1590: 0x000a, 0x1591: 0x000a,\n\t0x1592: 0x000a, 0x1593: 0x000a, 0x1594: 0x000a, 0x1595: 0x000a, 0x1596: 0x000a, 0x1597: 0x000a,\n\t0x1598: 0x000a, 0x1599: 0x000a, 0x159a: 0x000a, 0x159b: 0x000a, 0x159c: 0x000a, 0x159d: 0x000a,\n\t0x159e: 0x000a, 0x159f: 0x000a, 0x15a0: 0x000a, 0x15a1: 0x000a, 0x15a2: 0x000a, 0x15a3: 0x000a,\n\t0x15a4: 0x000a, 0x15a5: 0x000a, 0x15a6: 0x000a, 0x15a7: 0x000a, 0x15a8: 0x000a, 0x15a9: 0x000a,\n\t0x15aa: 0x000a, 0x15ab: 0x000a, 0x15ac: 0x000a, 0x15ad: 0x000a, 0x15ae: 0x000a, 0x15af: 0x000a,\n\t0x15b0: 0x000a, 0x15b1: 0x000a, 0x15b2: 0x000a, 0x15b3: 0x000a, 0x15b4: 0x000a, 0x15b5: 0x000a,\n\t0x15b6: 0x000a, 0x15b7: 0x000a, 0x15b8: 0x000a, 0x15b9: 0x000a, 0x15ba: 0x000a, 0x15bb: 0x000a,\n\t0x15bc: 0x000a, 0x15bd: 0x000a, 0x15be: 0x000a, 0x15bf: 0x000a,\n\t// Block 0x57, offset 0x15c0\n\t0x15c0: 0x000a, 0x15c1: 0x000a, 0x15c2: 0x000a, 0x15c3: 0x000a, 0x15c4: 0x000a, 0x15c5: 0x000a,\n\t0x15c6: 0x000a, 0x15c7: 0x000a, 0x15c8: 0x000a, 0x15c9: 0x000a, 0x15ca: 0x000a, 0x15cb: 0x000a,\n\t0x15cc: 0x000a, 0x15cd: 0x000a, 0x15ce: 0x000a, 0x15cf: 0x000a, 0x15d0: 0x000a, 0x15d1: 0x000a,\n\t0x15d2: 0x0003, 0x15d3: 0x0004, 0x15d4: 0x000a, 0x15d5: 0x000a, 0x15d6: 0x000a, 0x15d7: 0x000a,\n\t0x15d8: 0x000a, 0x15d9: 0x000a, 0x15da: 0x000a, 0x15db: 0x000a, 0x15dc: 0x000a, 0x15dd: 0x000a,\n\t0x15de: 0x000a, 0x15df: 0x000a, 0x15e0: 0x000a, 0x15e1: 0x000a, 0x15e2: 0x000a, 0x15e3: 0x000a,\n\t0x15e4: 0x000a, 0x15e5: 0x000a, 0x15e6: 0x000a, 0x15e7: 0x000a, 0x15e8: 0x000a, 0x15e9: 0x000a,\n\t0x15ea: 0x000a, 0x15eb: 0x000a, 0x15ec: 0x000a, 0x15ed: 0x000a, 0x15ee: 0x000a, 0x15ef: 0x000a,\n\t0x15f0: 0x000a, 0x15f1: 0x000a, 0x15f2: 0x000a, 0x15f3: 0x000a, 0x15f4: 0x000a, 0x15f5: 0x000a,\n\t0x15f6: 0x000a, 0x15f7: 0x000a, 0x15f8: 0x000a, 0x15f9: 0x000a, 0x15fa: 0x000a, 0x15fb: 0x000a,\n\t0x15fc: 0x000a, 0x15fd: 0x000a, 0x15fe: 0x000a, 0x15ff: 0x000a,\n\t// Block 0x58, offset 0x1600\n\t0x1600: 0x000a, 0x1601: 0x000a, 0x1602: 0x000a, 0x1603: 0x000a, 0x1604: 0x000a, 0x1605: 0x000a,\n\t0x1606: 0x000a, 0x1607: 0x000a, 0x1608: 0x003a, 0x1609: 0x002a, 0x160a: 0x003a, 0x160b: 0x002a,\n\t0x160c: 0x000a, 0x160d: 0x000a, 0x160e: 0x000a, 0x160f: 0x000a, 0x1610: 0x000a, 0x1611: 0x000a,\n\t0x1612: 0x000a, 0x1613: 0x000a, 0x1614: 0x000a, 0x1615: 0x000a, 0x1616: 0x000a, 0x1617: 0x000a,\n\t0x1618: 0x000a, 0x1619: 0x000a, 0x161a: 0x000a, 0x161b: 0x000a, 0x161c: 0x000a, 0x161d: 0x000a,\n\t0x161e: 0x000a, 0x161f: 0x000a, 0x1620: 0x000a, 0x1621: 0x000a, 0x1622: 0x000a, 0x1623: 0x000a,\n\t0x1624: 0x000a, 0x1625: 0x000a, 0x1626: 0x000a, 0x1627: 0x000a, 0x1628: 0x000a, 0x1629: 0x009a,\n\t0x162a: 0x008a, 0x162b: 0x000a, 0x162c: 0x000a, 0x162d: 0x000a, 0x162e: 0x000a, 0x162f: 0x000a,\n\t0x1630: 0x000a, 0x1631: 0x000a, 0x1632: 0x000a, 0x1633: 0x000a, 0x1634: 0x000a, 0x1635: 0x000a,\n\t// Block 0x59, offset 0x1640\n\t0x167b: 0x000a,\n\t0x167c: 0x000a, 0x167d: 0x000a, 0x167e: 0x000a, 0x167f: 0x000a,\n\t// Block 0x5a, offset 0x1680\n\t0x1680: 0x000a, 0x1681: 0x000a, 0x1682: 0x000a, 0x1683: 0x000a, 0x1684: 0x000a, 0x1685: 0x000a,\n\t0x1686: 0x000a, 0x1687: 0x000a, 0x1688: 0x000a, 0x1689: 0x000a, 0x168a: 0x000a, 0x168b: 0x000a,\n\t0x168c: 0x000a, 0x168d: 0x000a, 0x168e: 0x000a, 0x168f: 0x000a, 0x1690: 0x000a, 0x1691: 0x000a,\n\t0x1692: 0x000a, 0x1693: 0x000a, 0x1694: 0x000a, 0x1696: 0x000a, 0x1697: 0x000a,\n\t0x1698: 0x000a, 0x1699: 0x000a, 0x169a: 0x000a, 0x169b: 0x000a, 0x169c: 0x000a, 0x169d: 0x000a,\n\t0x169e: 0x000a, 0x169f: 0x000a, 0x16a0: 0x000a, 0x16a1: 0x000a, 0x16a2: 0x000a, 0x16a3: 0x000a,\n\t0x16a4: 0x000a, 0x16a5: 0x000a, 0x16a6: 0x000a, 0x16a7: 0x000a, 0x16a8: 0x000a, 0x16a9: 0x000a,\n\t0x16aa: 0x000a, 0x16ab: 0x000a, 0x16ac: 0x000a, 0x16ad: 0x000a, 0x16ae: 0x000a, 0x16af: 0x000a,\n\t0x16b0: 0x000a, 0x16b1: 0x000a, 0x16b2: 0x000a, 0x16b3: 0x000a, 0x16b4: 0x000a, 0x16b5: 0x000a,\n\t0x16b6: 0x000a, 0x16b7: 0x000a, 0x16b8: 0x000a, 0x16b9: 0x000a, 0x16ba: 0x000a, 0x16bb: 0x000a,\n\t0x16bc: 0x000a, 0x16bd: 0x000a, 0x16be: 0x000a, 0x16bf: 0x000a,\n\t// Block 0x5b, offset 0x16c0\n\t0x16c0: 0x000a, 0x16c1: 0x000a, 0x16c2: 0x000a, 0x16c3: 0x000a, 0x16c4: 0x000a, 0x16c5: 0x000a,\n\t0x16c6: 0x000a, 0x16c7: 0x000a, 0x16c8: 0x000a, 0x16c9: 0x000a, 0x16ca: 0x000a, 0x16cb: 0x000a,\n\t0x16cc: 0x000a, 0x16cd: 0x000a, 0x16ce: 0x000a, 0x16cf: 0x000a, 0x16d0: 0x000a, 0x16d1: 0x000a,\n\t0x16d2: 0x000a, 0x16d3: 0x000a, 0x16d4: 0x000a, 0x16d5: 0x000a, 0x16d6: 0x000a, 0x16d7: 0x000a,\n\t0x16d8: 0x000a, 0x16d9: 0x000a, 0x16da: 0x000a, 0x16db: 0x000a, 0x16dc: 0x000a, 0x16dd: 0x000a,\n\t0x16de: 0x000a, 0x16df: 0x000a, 0x16e0: 0x000a, 0x16e1: 0x000a, 0x16e2: 0x000a, 0x16e3: 0x000a,\n\t0x16e4: 0x000a, 0x16e5: 0x000a, 0x16e6: 0x000a,\n\t// Block 0x5c, offset 0x1700\n\t0x1700: 0x000a, 0x1701: 0x000a, 0x1702: 0x000a, 0x1703: 0x000a, 0x1704: 0x000a, 0x1705: 0x000a,\n\t0x1706: 0x000a, 0x1707: 0x000a, 0x1708: 0x000a, 0x1709: 0x000a, 0x170a: 0x000a,\n\t0x1720: 0x000a, 0x1721: 0x000a, 0x1722: 0x000a, 0x1723: 0x000a,\n\t0x1724: 0x000a, 0x1725: 0x000a, 0x1726: 0x000a, 0x1727: 0x000a, 0x1728: 0x000a, 0x1729: 0x000a,\n\t0x172a: 0x000a, 0x172b: 0x000a, 0x172c: 0x000a, 0x172d: 0x000a, 0x172e: 0x000a, 0x172f: 0x000a,\n\t0x1730: 0x000a, 0x1731: 0x000a, 0x1732: 0x000a, 0x1733: 0x000a, 0x1734: 0x000a, 0x1735: 0x000a,\n\t0x1736: 0x000a, 0x1737: 0x000a, 0x1738: 0x000a, 0x1739: 0x000a, 0x173a: 0x000a, 0x173b: 0x000a,\n\t0x173c: 0x000a, 0x173d: 0x000a, 0x173e: 0x000a, 0x173f: 0x000a,\n\t// Block 0x5d, offset 0x1740\n\t0x1740: 0x000a, 0x1741: 0x000a, 0x1742: 0x000a, 0x1743: 0x000a, 0x1744: 0x000a, 0x1745: 0x000a,\n\t0x1746: 0x000a, 0x1747: 0x000a, 0x1748: 0x0002, 0x1749: 0x0002, 0x174a: 0x0002, 0x174b: 0x0002,\n\t0x174c: 0x0002, 0x174d: 0x0002, 0x174e: 0x0002, 0x174f: 0x0002, 0x1750: 0x0002, 0x1751: 0x0002,\n\t0x1752: 0x0002, 0x1753: 0x0002, 0x1754: 0x0002, 0x1755: 0x0002, 0x1756: 0x0002, 0x1757: 0x0002,\n\t0x1758: 0x0002, 0x1759: 0x0002, 0x175a: 0x0002, 0x175b: 0x0002,\n\t// Block 0x5e, offset 0x1780\n\t0x17aa: 0x000a, 0x17ab: 0x000a, 0x17ac: 0x000a, 0x17ad: 0x000a, 0x17ae: 0x000a, 0x17af: 0x000a,\n\t0x17b0: 0x000a, 0x17b1: 0x000a, 0x17b2: 0x000a, 0x17b3: 0x000a, 0x17b4: 0x000a, 0x17b5: 0x000a,\n\t0x17b6: 0x000a, 0x17b7: 0x000a, 0x17b8: 0x000a, 0x17b9: 0x000a, 0x17ba: 0x000a, 0x17bb: 0x000a,\n\t0x17bc: 0x000a, 0x17bd: 0x000a, 0x17be: 0x000a, 0x17bf: 0x000a,\n\t// Block 0x5f, offset 0x17c0\n\t0x17c0: 0x000a, 0x17c1: 0x000a, 0x17c2: 0x000a, 0x17c3: 0x000a, 0x17c4: 0x000a, 0x17c5: 0x000a,\n\t0x17c6: 0x000a, 0x17c7: 0x000a, 0x17c8: 0x000a, 0x17c9: 0x000a, 0x17ca: 0x000a, 0x17cb: 0x000a,\n\t0x17cc: 0x000a, 0x17cd: 0x000a, 0x17ce: 0x000a, 0x17cf: 0x000a, 0x17d0: 0x000a, 0x17d1: 0x000a,\n\t0x17d2: 0x000a, 0x17d3: 0x000a, 0x17d4: 0x000a, 0x17d5: 0x000a, 0x17d6: 0x000a, 0x17d7: 0x000a,\n\t0x17d8: 0x000a, 0x17d9: 0x000a, 0x17da: 0x000a, 0x17db: 0x000a, 0x17dc: 0x000a, 0x17dd: 0x000a,\n\t0x17de: 0x000a, 0x17df: 0x000a, 0x17e0: 0x000a, 0x17e1: 0x000a, 0x17e2: 0x000a, 0x17e3: 0x000a,\n\t0x17e4: 0x000a, 0x17e5: 0x000a, 0x17e6: 0x000a, 0x17e7: 0x000a, 0x17e8: 0x000a, 0x17e9: 0x000a,\n\t0x17ea: 0x000a, 0x17eb: 0x000a, 0x17ed: 0x000a, 0x17ee: 0x000a, 0x17ef: 0x000a,\n\t0x17f0: 0x000a, 0x17f1: 0x000a, 0x17f2: 0x000a, 0x17f3: 0x000a, 0x17f4: 0x000a, 0x17f5: 0x000a,\n\t0x17f6: 0x000a, 0x17f7: 0x000a, 0x17f8: 0x000a, 0x17f9: 0x000a, 0x17fa: 0x000a, 0x17fb: 0x000a,\n\t0x17fc: 0x000a, 0x17fd: 0x000a, 0x17fe: 0x000a, 0x17ff: 0x000a,\n\t// Block 0x60, offset 0x1800\n\t0x1800: 0x000a, 0x1801: 0x000a, 0x1802: 0x000a, 0x1803: 0x000a, 0x1804: 0x000a, 0x1805: 0x000a,\n\t0x1806: 0x000a, 0x1807: 0x000a, 0x1808: 0x000a, 0x1809: 0x000a, 0x180a: 0x000a, 0x180b: 0x000a,\n\t0x180c: 0x000a, 0x180d: 0x000a, 0x180e: 0x000a, 0x180f: 0x000a, 0x1810: 0x000a, 0x1811: 0x000a,\n\t0x1812: 0x000a, 0x1813: 0x000a, 0x1814: 0x000a, 0x1815: 0x000a, 0x1816: 0x000a, 0x1817: 0x000a,\n\t0x1818: 0x000a, 0x1819: 0x000a, 0x181a: 0x000a, 0x181b: 0x000a, 0x181c: 0x000a, 0x181d: 0x000a,\n\t0x181e: 0x000a, 0x181f: 0x000a, 0x1820: 0x000a, 0x1821: 0x000a, 0x1822: 0x000a, 0x1823: 0x000a,\n\t0x1824: 0x000a, 0x1825: 0x000a, 0x1826: 0x000a, 0x1827: 0x000a, 0x1828: 0x003a, 0x1829: 0x002a,\n\t0x182a: 0x003a, 0x182b: 0x002a, 0x182c: 0x003a, 0x182d: 0x002a, 0x182e: 0x003a, 0x182f: 0x002a,\n\t0x1830: 0x003a, 0x1831: 0x002a, 0x1832: 0x003a, 0x1833: 0x002a, 0x1834: 0x003a, 0x1835: 0x002a,\n\t0x1836: 0x000a, 0x1837: 0x000a, 0x1838: 0x000a, 0x1839: 0x000a, 0x183a: 0x000a, 0x183b: 0x000a,\n\t0x183c: 0x000a, 0x183d: 0x000a, 0x183e: 0x000a, 0x183f: 0x000a,\n\t// Block 0x61, offset 0x1840\n\t0x1840: 0x000a, 0x1841: 0x000a, 0x1842: 0x000a, 0x1843: 0x000a, 0x1844: 0x000a, 0x1845: 0x009a,\n\t0x1846: 0x008a, 0x1847: 0x000a, 0x1848: 0x000a, 0x1849: 0x000a, 0x184a: 0x000a, 0x184b: 0x000a,\n\t0x184c: 0x000a, 0x184d: 0x000a, 0x184e: 0x000a, 0x184f: 0x000a, 0x1850: 0x000a, 0x1851: 0x000a,\n\t0x1852: 0x000a, 0x1853: 0x000a, 0x1854: 0x000a, 0x1855: 0x000a, 0x1856: 0x000a, 0x1857: 0x000a,\n\t0x1858: 0x000a, 0x1859: 0x000a, 0x185a: 0x000a, 0x185b: 0x000a, 0x185c: 0x000a, 0x185d: 0x000a,\n\t0x185e: 0x000a, 0x185f: 0x000a, 0x1860: 0x000a, 0x1861: 0x000a, 0x1862: 0x000a, 0x1863: 0x000a,\n\t0x1864: 0x000a, 0x1865: 0x000a, 0x1866: 0x003a, 0x1867: 0x002a, 0x1868: 0x003a, 0x1869: 0x002a,\n\t0x186a: 0x003a, 0x186b: 0x002a, 0x186c: 0x003a, 0x186d: 0x002a, 0x186e: 0x003a, 0x186f: 0x002a,\n\t0x1870: 0x000a, 0x1871: 0x000a, 0x1872: 0x000a, 0x1873: 0x000a, 0x1874: 0x000a, 0x1875: 0x000a,\n\t0x1876: 0x000a, 0x1877: 0x000a, 0x1878: 0x000a, 0x1879: 0x000a, 0x187a: 0x000a, 0x187b: 0x000a,\n\t0x187c: 0x000a, 0x187d: 0x000a, 0x187e: 0x000a, 0x187f: 0x000a,\n\t// Block 0x62, offset 0x1880\n\t0x1880: 0x000a, 0x1881: 0x000a, 0x1882: 0x000a, 0x1883: 0x007a, 0x1884: 0x006a, 0x1885: 0x009a,\n\t0x1886: 0x008a, 0x1887: 0x00ba, 0x1888: 0x00aa, 0x1889: 0x009a, 0x188a: 0x008a, 0x188b: 0x007a,\n\t0x188c: 0x006a, 0x188d: 0x00da, 0x188e: 0x002a, 0x188f: 0x003a, 0x1890: 0x00ca, 0x1891: 0x009a,\n\t0x1892: 0x008a, 0x1893: 0x007a, 0x1894: 0x006a, 0x1895: 0x009a, 0x1896: 0x008a, 0x1897: 0x00ba,\n\t0x1898: 0x00aa, 0x1899: 0x000a, 0x189a: 0x000a, 0x189b: 0x000a, 0x189c: 0x000a, 0x189d: 0x000a,\n\t0x189e: 0x000a, 0x189f: 0x000a, 0x18a0: 0x000a, 0x18a1: 0x000a, 0x18a2: 0x000a, 0x18a3: 0x000a,\n\t0x18a4: 0x000a, 0x18a5: 0x000a, 0x18a6: 0x000a, 0x18a7: 0x000a, 0x18a8: 0x000a, 0x18a9: 0x000a,\n\t0x18aa: 0x000a, 0x18ab: 0x000a, 0x18ac: 0x000a, 0x18ad: 0x000a, 0x18ae: 0x000a, 0x18af: 0x000a,\n\t0x18b0: 0x000a, 0x18b1: 0x000a, 0x18b2: 0x000a, 0x18b3: 0x000a, 0x18b4: 0x000a, 0x18b5: 0x000a,\n\t0x18b6: 0x000a, 0x18b7: 0x000a, 0x18b8: 0x000a, 0x18b9: 0x000a, 0x18ba: 0x000a, 0x18bb: 0x000a,\n\t0x18bc: 0x000a, 0x18bd: 0x000a, 0x18be: 0x000a, 0x18bf: 0x000a,\n\t// Block 0x63, offset 0x18c0\n\t0x18c0: 0x000a, 0x18c1: 0x000a, 0x18c2: 0x000a, 0x18c3: 0x000a, 0x18c4: 0x000a, 0x18c5: 0x000a,\n\t0x18c6: 0x000a, 0x18c7: 0x000a, 0x18c8: 0x000a, 0x18c9: 0x000a, 0x18ca: 0x000a, 0x18cb: 0x000a,\n\t0x18cc: 0x000a, 0x18cd: 0x000a, 0x18ce: 0x000a, 0x18cf: 0x000a, 0x18d0: 0x000a, 0x18d1: 0x000a,\n\t0x18d2: 0x000a, 0x18d3: 0x000a, 0x18d4: 0x000a, 0x18d5: 0x000a, 0x18d6: 0x000a, 0x18d7: 0x000a,\n\t0x18d8: 0x003a, 0x18d9: 0x002a, 0x18da: 0x003a, 0x18db: 0x002a, 0x18dc: 0x000a, 0x18dd: 0x000a,\n\t0x18de: 0x000a, 0x18df: 0x000a, 0x18e0: 0x000a, 0x18e1: 0x000a, 0x18e2: 0x000a, 0x18e3: 0x000a,\n\t0x18e4: 0x000a, 0x18e5: 0x000a, 0x18e6: 0x000a, 0x18e7: 0x000a, 0x18e8: 0x000a, 0x18e9: 0x000a,\n\t0x18ea: 0x000a, 0x18eb: 0x000a, 0x18ec: 0x000a, 0x18ed: 0x000a, 0x18ee: 0x000a, 0x18ef: 0x000a,\n\t0x18f0: 0x000a, 0x18f1: 0x000a, 0x18f2: 0x000a, 0x18f3: 0x000a, 0x18f4: 0x000a, 0x18f5: 0x000a,\n\t0x18f6: 0x000a, 0x18f7: 0x000a, 0x18f8: 0x000a, 0x18f9: 0x000a, 0x18fa: 0x000a, 0x18fb: 0x000a,\n\t0x18fc: 0x003a, 0x18fd: 0x002a, 0x18fe: 0x000a, 0x18ff: 0x000a,\n\t// Block 0x64, offset 0x1900\n\t0x1900: 0x000a, 0x1901: 0x000a, 0x1902: 0x000a, 0x1903: 0x000a, 0x1904: 0x000a, 0x1905: 0x000a,\n\t0x1906: 0x000a, 0x1907: 0x000a, 0x1908: 0x000a, 0x1909: 0x000a, 0x190a: 0x000a, 0x190b: 0x000a,\n\t0x190c: 0x000a, 0x190d: 0x000a, 0x190e: 0x000a, 0x190f: 0x000a, 0x1910: 0x000a, 0x1911: 0x000a,\n\t0x1912: 0x000a, 0x1913: 0x000a, 0x1914: 0x000a, 0x1915: 0x000a, 0x1916: 0x000a, 0x1917: 0x000a,\n\t0x1918: 0x000a, 0x1919: 0x000a, 0x191a: 0x000a, 0x191b: 0x000a, 0x191c: 0x000a, 0x191d: 0x000a,\n\t0x191e: 0x000a, 0x191f: 0x000a, 0x1920: 0x000a, 0x1921: 0x000a, 0x1922: 0x000a, 0x1923: 0x000a,\n\t0x1924: 0x000a, 0x1925: 0x000a, 0x1926: 0x000a, 0x1927: 0x000a, 0x1928: 0x000a, 0x1929: 0x000a,\n\t0x192a: 0x000a, 0x192b: 0x000a, 0x192c: 0x000a, 0x192d: 0x000a, 0x192e: 0x000a, 0x192f: 0x000a,\n\t0x1930: 0x000a, 0x1931: 0x000a, 0x1932: 0x000a, 0x1933: 0x000a,\n\t0x1936: 0x000a, 0x1937: 0x000a, 0x1938: 0x000a, 0x1939: 0x000a, 0x193a: 0x000a, 0x193b: 0x000a,\n\t0x193c: 0x000a, 0x193d: 0x000a, 0x193e: 0x000a, 0x193f: 0x000a,\n\t// Block 0x65, offset 0x1940\n\t0x1940: 0x000a, 0x1941: 0x000a, 0x1942: 0x000a, 0x1943: 0x000a, 0x1944: 0x000a, 0x1945: 0x000a,\n\t0x1946: 0x000a, 0x1947: 0x000a, 0x1948: 0x000a, 0x1949: 0x000a, 0x194a: 0x000a, 0x194b: 0x000a,\n\t0x194c: 0x000a, 0x194d: 0x000a, 0x194e: 0x000a, 0x194f: 0x000a, 0x1950: 0x000a, 0x1951: 0x000a,\n\t0x1952: 0x000a, 0x1953: 0x000a, 0x1954: 0x000a, 0x1955: 0x000a,\n\t0x1958: 0x000a, 0x1959: 0x000a, 0x195a: 0x000a, 0x195b: 0x000a, 0x195c: 0x000a, 0x195d: 0x000a,\n\t0x195e: 0x000a, 0x195f: 0x000a, 0x1960: 0x000a, 0x1961: 0x000a, 0x1962: 0x000a, 0x1963: 0x000a,\n\t0x1964: 0x000a, 0x1965: 0x000a, 0x1966: 0x000a, 0x1967: 0x000a, 0x1968: 0x000a, 0x1969: 0x000a,\n\t0x196a: 0x000a, 0x196b: 0x000a, 0x196c: 0x000a, 0x196d: 0x000a, 0x196e: 0x000a, 0x196f: 0x000a,\n\t0x1970: 0x000a, 0x1971: 0x000a, 0x1972: 0x000a, 0x1973: 0x000a, 0x1974: 0x000a, 0x1975: 0x000a,\n\t0x1976: 0x000a, 0x1977: 0x000a, 0x1978: 0x000a, 0x1979: 0x000a,\n\t0x197d: 0x000a, 0x197e: 0x000a, 0x197f: 0x000a,\n\t// Block 0x66, offset 0x1980\n\t0x1980: 0x000a, 0x1981: 0x000a, 0x1982: 0x000a, 0x1983: 0x000a, 0x1984: 0x000a, 0x1985: 0x000a,\n\t0x1986: 0x000a, 0x1987: 0x000a, 0x1988: 0x000a, 0x198a: 0x000a, 0x198b: 0x000a,\n\t0x198c: 0x000a, 0x198d: 0x000a, 0x198e: 0x000a, 0x198f: 0x000a, 0x1990: 0x000a, 0x1991: 0x000a,\n\t0x1992: 0x000a,\n\t0x19ac: 0x000a, 0x19ad: 0x000a, 0x19ae: 0x000a, 0x19af: 0x000a,\n\t// Block 0x67, offset 0x19c0\n\t0x19e5: 0x000a, 0x19e6: 0x000a, 0x19e7: 0x000a, 0x19e8: 0x000a, 0x19e9: 0x000a,\n\t0x19ea: 0x000a, 0x19ef: 0x000c,\n\t0x19f0: 0x000c, 0x19f1: 0x000c,\n\t0x19f9: 0x000a, 0x19fa: 0x000a, 0x19fb: 0x000a,\n\t0x19fc: 0x000a, 0x19fd: 0x000a, 0x19fe: 0x000a, 0x19ff: 0x000a,\n\t// Block 0x68, offset 0x1a00\n\t0x1a3f: 0x000c,\n\t// Block 0x69, offset 0x1a40\n\t0x1a60: 0x000c, 0x1a61: 0x000c, 0x1a62: 0x000c, 0x1a63: 0x000c,\n\t0x1a64: 0x000c, 0x1a65: 0x000c, 0x1a66: 0x000c, 0x1a67: 0x000c, 0x1a68: 0x000c, 0x1a69: 0x000c,\n\t0x1a6a: 0x000c, 0x1a6b: 0x000c, 0x1a6c: 0x000c, 0x1a6d: 0x000c, 0x1a6e: 0x000c, 0x1a6f: 0x000c,\n\t0x1a70: 0x000c, 0x1a71: 0x000c, 0x1a72: 0x000c, 0x1a73: 0x000c, 0x1a74: 0x000c, 0x1a75: 0x000c,\n\t0x1a76: 0x000c, 0x1a77: 0x000c, 0x1a78: 0x000c, 0x1a79: 0x000c, 0x1a7a: 0x000c, 0x1a7b: 0x000c,\n\t0x1a7c: 0x000c, 0x1a7d: 0x000c, 0x1a7e: 0x000c, 0x1a7f: 0x000c,\n\t// Block 0x6a, offset 0x1a80\n\t0x1a80: 0x000a, 0x1a81: 0x000a, 0x1a82: 0x000a, 0x1a83: 0x000a, 0x1a84: 0x000a, 0x1a85: 0x000a,\n\t0x1a86: 0x000a, 0x1a87: 0x000a, 0x1a88: 0x000a, 0x1a89: 0x000a, 0x1a8a: 0x000a, 0x1a8b: 0x000a,\n\t0x1a8c: 0x000a, 0x1a8d: 0x000a, 0x1a8e: 0x000a, 0x1a8f: 0x000a, 0x1a90: 0x000a, 0x1a91: 0x000a,\n\t0x1a92: 0x000a, 0x1a93: 0x000a, 0x1a94: 0x000a, 0x1a95: 0x000a, 0x1a96: 0x000a, 0x1a97: 0x000a,\n\t0x1a98: 0x000a, 0x1a99: 0x000a, 0x1a9a: 0x000a, 0x1a9b: 0x000a, 0x1a9c: 0x000a, 0x1a9d: 0x000a,\n\t0x1a9e: 0x000a, 0x1a9f: 0x000a, 0x1aa0: 0x000a, 0x1aa1: 0x000a, 0x1aa2: 0x003a, 0x1aa3: 0x002a,\n\t0x1aa4: 0x003a, 0x1aa5: 0x002a, 0x1aa6: 0x003a, 0x1aa7: 0x002a, 0x1aa8: 0x003a, 0x1aa9: 0x002a,\n\t0x1aaa: 0x000a, 0x1aab: 0x000a, 0x1aac: 0x000a, 0x1aad: 0x000a, 0x1aae: 0x000a, 0x1aaf: 0x000a,\n\t0x1ab0: 0x000a, 0x1ab1: 0x000a, 0x1ab2: 0x000a, 0x1ab3: 0x000a, 0x1ab4: 0x000a, 0x1ab5: 0x000a,\n\t0x1ab6: 0x000a, 0x1ab7: 0x000a, 0x1ab8: 0x000a, 0x1ab9: 0x000a, 0x1aba: 0x000a, 0x1abb: 0x000a,\n\t0x1abc: 0x000a, 0x1abd: 0x000a, 0x1abe: 0x000a, 0x1abf: 0x000a,\n\t// Block 0x6b, offset 0x1ac0\n\t0x1ac0: 0x000a, 0x1ac1: 0x000a, 0x1ac2: 0x000a, 0x1ac3: 0x000a, 0x1ac4: 0x000a, 0x1ac5: 0x000a,\n\t0x1ac6: 0x000a, 0x1ac7: 0x000a, 0x1ac8: 0x000a, 0x1ac9: 0x000a,\n\t// Block 0x6c, offset 0x1b00\n\t0x1b00: 0x000a, 0x1b01: 0x000a, 0x1b02: 0x000a, 0x1b03: 0x000a, 0x1b04: 0x000a, 0x1b05: 0x000a,\n\t0x1b06: 0x000a, 0x1b07: 0x000a, 0x1b08: 0x000a, 0x1b09: 0x000a, 0x1b0a: 0x000a, 0x1b0b: 0x000a,\n\t0x1b0c: 0x000a, 0x1b0d: 0x000a, 0x1b0e: 0x000a, 0x1b0f: 0x000a, 0x1b10: 0x000a, 0x1b11: 0x000a,\n\t0x1b12: 0x000a, 0x1b13: 0x000a, 0x1b14: 0x000a, 0x1b15: 0x000a, 0x1b16: 0x000a, 0x1b17: 0x000a,\n\t0x1b18: 0x000a, 0x1b19: 0x000a, 0x1b1b: 0x000a, 0x1b1c: 0x000a, 0x1b1d: 0x000a,\n\t0x1b1e: 0x000a, 0x1b1f: 0x000a, 0x1b20: 0x000a, 0x1b21: 0x000a, 0x1b22: 0x000a, 0x1b23: 0x000a,\n\t0x1b24: 0x000a, 0x1b25: 0x000a, 0x1b26: 0x000a, 0x1b27: 0x000a, 0x1b28: 0x000a, 0x1b29: 0x000a,\n\t0x1b2a: 0x000a, 0x1b2b: 0x000a, 0x1b2c: 0x000a, 0x1b2d: 0x000a, 0x1b2e: 0x000a, 0x1b2f: 0x000a,\n\t0x1b30: 0x000a, 0x1b31: 0x000a, 0x1b32: 0x000a, 0x1b33: 0x000a, 0x1b34: 0x000a, 0x1b35: 0x000a,\n\t0x1b36: 0x000a, 0x1b37: 0x000a, 0x1b38: 0x000a, 0x1b39: 0x000a, 0x1b3a: 0x000a, 0x1b3b: 0x000a,\n\t0x1b3c: 0x000a, 0x1b3d: 0x000a, 0x1b3e: 0x000a, 0x1b3f: 0x000a,\n\t// Block 0x6d, offset 0x1b40\n\t0x1b40: 0x000a, 0x1b41: 0x000a, 0x1b42: 0x000a, 0x1b43: 0x000a, 0x1b44: 0x000a, 0x1b45: 0x000a,\n\t0x1b46: 0x000a, 0x1b47: 0x000a, 0x1b48: 0x000a, 0x1b49: 0x000a, 0x1b4a: 0x000a, 0x1b4b: 0x000a,\n\t0x1b4c: 0x000a, 0x1b4d: 0x000a, 0x1b4e: 0x000a, 0x1b4f: 0x000a, 0x1b50: 0x000a, 0x1b51: 0x000a,\n\t0x1b52: 0x000a, 0x1b53: 0x000a, 0x1b54: 0x000a, 0x1b55: 0x000a, 0x1b56: 0x000a, 0x1b57: 0x000a,\n\t0x1b58: 0x000a, 0x1b59: 0x000a, 0x1b5a: 0x000a, 0x1b5b: 0x000a, 0x1b5c: 0x000a, 0x1b5d: 0x000a,\n\t0x1b5e: 0x000a, 0x1b5f: 0x000a, 0x1b60: 0x000a, 0x1b61: 0x000a, 0x1b62: 0x000a, 0x1b63: 0x000a,\n\t0x1b64: 0x000a, 0x1b65: 0x000a, 0x1b66: 0x000a, 0x1b67: 0x000a, 0x1b68: 0x000a, 0x1b69: 0x000a,\n\t0x1b6a: 0x000a, 0x1b6b: 0x000a, 0x1b6c: 0x000a, 0x1b6d: 0x000a, 0x1b6e: 0x000a, 0x1b6f: 0x000a,\n\t0x1b70: 0x000a, 0x1b71: 0x000a, 0x1b72: 0x000a, 0x1b73: 0x000a,\n\t// Block 0x6e, offset 0x1b80\n\t0x1b80: 0x000a, 0x1b81: 0x000a, 0x1b82: 0x000a, 0x1b83: 0x000a, 0x1b84: 0x000a, 0x1b85: 0x000a,\n\t0x1b86: 0x000a, 0x1b87: 0x000a, 0x1b88: 0x000a, 0x1b89: 0x000a, 0x1b8a: 0x000a, 0x1b8b: 0x000a,\n\t0x1b8c: 0x000a, 0x1b8d: 0x000a, 0x1b8e: 0x000a, 0x1b8f: 0x000a, 0x1b90: 0x000a, 0x1b91: 0x000a,\n\t0x1b92: 0x000a, 0x1b93: 0x000a, 0x1b94: 0x000a, 0x1b95: 0x000a,\n\t0x1bb0: 0x000a, 0x1bb1: 0x000a, 0x1bb2: 0x000a, 0x1bb3: 0x000a, 0x1bb4: 0x000a, 0x1bb5: 0x000a,\n\t0x1bb6: 0x000a, 0x1bb7: 0x000a, 0x1bb8: 0x000a, 0x1bb9: 0x000a, 0x1bba: 0x000a, 0x1bbb: 0x000a,\n\t// Block 0x6f, offset 0x1bc0\n\t0x1bc0: 0x0009, 0x1bc1: 0x000a, 0x1bc2: 0x000a, 0x1bc3: 0x000a, 0x1bc4: 0x000a,\n\t0x1bc8: 0x003a, 0x1bc9: 0x002a, 0x1bca: 0x003a, 0x1bcb: 0x002a,\n\t0x1bcc: 0x003a, 0x1bcd: 0x002a, 0x1bce: 0x003a, 0x1bcf: 0x002a, 0x1bd0: 0x003a, 0x1bd1: 0x002a,\n\t0x1bd2: 0x000a, 0x1bd3: 0x000a, 0x1bd4: 0x003a, 0x1bd5: 0x002a, 0x1bd6: 0x003a, 0x1bd7: 0x002a,\n\t0x1bd8: 0x003a, 0x1bd9: 0x002a, 0x1bda: 0x003a, 0x1bdb: 0x002a, 0x1bdc: 0x000a, 0x1bdd: 0x000a,\n\t0x1bde: 0x000a, 0x1bdf: 0x000a, 0x1be0: 0x000a,\n\t0x1bea: 0x000c, 0x1beb: 0x000c, 0x1bec: 0x000c, 0x1bed: 0x000c,\n\t0x1bf0: 0x000a,\n\t0x1bf6: 0x000a, 0x1bf7: 0x000a,\n\t0x1bfd: 0x000a, 0x1bfe: 0x000a, 0x1bff: 0x000a,\n\t// Block 0x70, offset 0x1c00\n\t0x1c19: 0x000c, 0x1c1a: 0x000c, 0x1c1b: 0x000a, 0x1c1c: 0x000a,\n\t0x1c20: 0x000a,\n\t// Block 0x71, offset 0x1c40\n\t0x1c7b: 0x000a,\n\t// Block 0x72, offset 0x1c80\n\t0x1c80: 0x000a, 0x1c81: 0x000a, 0x1c82: 0x000a, 0x1c83: 0x000a, 0x1c84: 0x000a, 0x1c85: 0x000a,\n\t0x1c86: 0x000a, 0x1c87: 0x000a, 0x1c88: 0x000a, 0x1c89: 0x000a, 0x1c8a: 0x000a, 0x1c8b: 0x000a,\n\t0x1c8c: 0x000a, 0x1c8d: 0x000a, 0x1c8e: 0x000a, 0x1c8f: 0x000a, 0x1c90: 0x000a, 0x1c91: 0x000a,\n\t0x1c92: 0x000a, 0x1c93: 0x000a, 0x1c94: 0x000a, 0x1c95: 0x000a, 0x1c96: 0x000a, 0x1c97: 0x000a,\n\t0x1c98: 0x000a, 0x1c99: 0x000a, 0x1c9a: 0x000a, 0x1c9b: 0x000a, 0x1c9c: 0x000a, 0x1c9d: 0x000a,\n\t0x1c9e: 0x000a, 0x1c9f: 0x000a, 0x1ca0: 0x000a, 0x1ca1: 0x000a, 0x1ca2: 0x000a, 0x1ca3: 0x000a,\n\t// Block 0x73, offset 0x1cc0\n\t0x1cdd: 0x000a,\n\t0x1cde: 0x000a,\n\t// Block 0x74, offset 0x1d00\n\t0x1d10: 0x000a, 0x1d11: 0x000a,\n\t0x1d12: 0x000a, 0x1d13: 0x000a, 0x1d14: 0x000a, 0x1d15: 0x000a, 0x1d16: 0x000a, 0x1d17: 0x000a,\n\t0x1d18: 0x000a, 0x1d19: 0x000a, 0x1d1a: 0x000a, 0x1d1b: 0x000a, 0x1d1c: 0x000a, 0x1d1d: 0x000a,\n\t0x1d1e: 0x000a, 0x1d1f: 0x000a,\n\t0x1d3c: 0x000a, 0x1d3d: 0x000a, 0x1d3e: 0x000a,\n\t// Block 0x75, offset 0x1d40\n\t0x1d71: 0x000a, 0x1d72: 0x000a, 0x1d73: 0x000a, 0x1d74: 0x000a, 0x1d75: 0x000a,\n\t0x1d76: 0x000a, 0x1d77: 0x000a, 0x1d78: 0x000a, 0x1d79: 0x000a, 0x1d7a: 0x000a, 0x1d7b: 0x000a,\n\t0x1d7c: 0x000a, 0x1d7d: 0x000a, 0x1d7e: 0x000a, 0x1d7f: 0x000a,\n\t// Block 0x76, offset 0x1d80\n\t0x1d8c: 0x000a, 0x1d8d: 0x000a, 0x1d8e: 0x000a, 0x1d8f: 0x000a,\n\t// Block 0x77, offset 0x1dc0\n\t0x1df7: 0x000a, 0x1df8: 0x000a, 0x1df9: 0x000a, 0x1dfa: 0x000a,\n\t// Block 0x78, offset 0x1e00\n\t0x1e1e: 0x000a, 0x1e1f: 0x000a,\n\t0x1e3f: 0x000a,\n\t// Block 0x79, offset 0x1e40\n\t0x1e50: 0x000a, 0x1e51: 0x000a,\n\t0x1e52: 0x000a, 0x1e53: 0x000a, 0x1e54: 0x000a, 0x1e55: 0x000a, 0x1e56: 0x000a, 0x1e57: 0x000a,\n\t0x1e58: 0x000a, 0x1e59: 0x000a, 0x1e5a: 0x000a, 0x1e5b: 0x000a, 0x1e5c: 0x000a, 0x1e5d: 0x000a,\n\t0x1e5e: 0x000a, 0x1e5f: 0x000a, 0x1e60: 0x000a, 0x1e61: 0x000a, 0x1e62: 0x000a, 0x1e63: 0x000a,\n\t0x1e64: 0x000a, 0x1e65: 0x000a, 0x1e66: 0x000a, 0x1e67: 0x000a, 0x1e68: 0x000a, 0x1e69: 0x000a,\n\t0x1e6a: 0x000a, 0x1e6b: 0x000a, 0x1e6c: 0x000a, 0x1e6d: 0x000a, 0x1e6e: 0x000a, 0x1e6f: 0x000a,\n\t0x1e70: 0x000a, 0x1e71: 0x000a, 0x1e72: 0x000a, 0x1e73: 0x000a, 0x1e74: 0x000a, 0x1e75: 0x000a,\n\t0x1e76: 0x000a, 0x1e77: 0x000a, 0x1e78: 0x000a, 0x1e79: 0x000a, 0x1e7a: 0x000a, 0x1e7b: 0x000a,\n\t0x1e7c: 0x000a, 0x1e7d: 0x000a, 0x1e7e: 0x000a, 0x1e7f: 0x000a,\n\t// Block 0x7a, offset 0x1e80\n\t0x1e80: 0x000a, 0x1e81: 0x000a, 0x1e82: 0x000a, 0x1e83: 0x000a, 0x1e84: 0x000a, 0x1e85: 0x000a,\n\t0x1e86: 0x000a,\n\t// Block 0x7b, offset 0x1ec0\n\t0x1ecd: 0x000a, 0x1ece: 0x000a, 0x1ecf: 0x000a,\n\t// Block 0x7c, offset 0x1f00\n\t0x1f2f: 0x000c,\n\t0x1f30: 0x000c, 0x1f31: 0x000c, 0x1f32: 0x000c, 0x1f33: 0x000a, 0x1f34: 0x000c, 0x1f35: 0x000c,\n\t0x1f36: 0x000c, 0x1f37: 0x000c, 0x1f38: 0x000c, 0x1f39: 0x000c, 0x1f3a: 0x000c, 0x1f3b: 0x000c,\n\t0x1f3c: 0x000c, 0x1f3d: 0x000c, 0x1f3e: 0x000a, 0x1f3f: 0x000a,\n\t// Block 0x7d, offset 0x1f40\n\t0x1f5e: 0x000c, 0x1f5f: 0x000c,\n\t// Block 0x7e, offset 0x1f80\n\t0x1fb0: 0x000c, 0x1fb1: 0x000c,\n\t// Block 0x7f, offset 0x1fc0\n\t0x1fc0: 0x000a, 0x1fc1: 0x000a, 0x1fc2: 0x000a, 0x1fc3: 0x000a, 0x1fc4: 0x000a, 0x1fc5: 0x000a,\n\t0x1fc6: 0x000a, 0x1fc7: 0x000a, 0x1fc8: 0x000a, 0x1fc9: 0x000a, 0x1fca: 0x000a, 0x1fcb: 0x000a,\n\t0x1fcc: 0x000a, 0x1fcd: 0x000a, 0x1fce: 0x000a, 0x1fcf: 0x000a, 0x1fd0: 0x000a, 0x1fd1: 0x000a,\n\t0x1fd2: 0x000a, 0x1fd3: 0x000a, 0x1fd4: 0x000a, 0x1fd5: 0x000a, 0x1fd6: 0x000a, 0x1fd7: 0x000a,\n\t0x1fd8: 0x000a, 0x1fd9: 0x000a, 0x1fda: 0x000a, 0x1fdb: 0x000a, 0x1fdc: 0x000a, 0x1fdd: 0x000a,\n\t0x1fde: 0x000a, 0x1fdf: 0x000a, 0x1fe0: 0x000a, 0x1fe1: 0x000a,\n\t// Block 0x80, offset 0x2000\n\t0x2008: 0x000a,\n\t// Block 0x81, offset 0x2040\n\t0x2042: 0x000c,\n\t0x2046: 0x000c, 0x204b: 0x000c,\n\t0x2065: 0x000c, 0x2066: 0x000c, 0x2068: 0x000a, 0x2069: 0x000a,\n\t0x206a: 0x000a, 0x206b: 0x000a,\n\t0x2078: 0x0004, 0x2079: 0x0004,\n\t// Block 0x82, offset 0x2080\n\t0x20b4: 0x000a, 0x20b5: 0x000a,\n\t0x20b6: 0x000a, 0x20b7: 0x000a,\n\t// Block 0x83, offset 0x20c0\n\t0x20c4: 0x000c, 0x20c5: 0x000c,\n\t0x20e0: 0x000c, 0x20e1: 0x000c, 0x20e2: 0x000c, 0x20e3: 0x000c,\n\t0x20e4: 0x000c, 0x20e5: 0x000c, 0x20e6: 0x000c, 0x20e7: 0x000c, 0x20e8: 0x000c, 0x20e9: 0x000c,\n\t0x20ea: 0x000c, 0x20eb: 0x000c, 0x20ec: 0x000c, 0x20ed: 0x000c, 0x20ee: 0x000c, 0x20ef: 0x000c,\n\t0x20f0: 0x000c, 0x20f1: 0x000c,\n\t// Block 0x84, offset 0x2100\n\t0x2126: 0x000c, 0x2127: 0x000c, 0x2128: 0x000c, 0x2129: 0x000c,\n\t0x212a: 0x000c, 0x212b: 0x000c, 0x212c: 0x000c, 0x212d: 0x000c,\n\t// Block 0x85, offset 0x2140\n\t0x2147: 0x000c, 0x2148: 0x000c, 0x2149: 0x000c, 0x214a: 0x000c, 0x214b: 0x000c,\n\t0x214c: 0x000c, 0x214d: 0x000c, 0x214e: 0x000c, 0x214f: 0x000c, 0x2150: 0x000c, 0x2151: 0x000c,\n\t// Block 0x86, offset 0x2180\n\t0x2180: 0x000c, 0x2181: 0x000c, 0x2182: 0x000c,\n\t0x21b3: 0x000c,\n\t0x21b6: 0x000c, 0x21b7: 0x000c, 0x21b8: 0x000c, 0x21b9: 0x000c,\n\t0x21bc: 0x000c,\n\t// Block 0x87, offset 0x21c0\n\t0x21e5: 0x000c,\n\t// Block 0x88, offset 0x2200\n\t0x2229: 0x000c,\n\t0x222a: 0x000c, 0x222b: 0x000c, 0x222c: 0x000c, 0x222d: 0x000c, 0x222e: 0x000c,\n\t0x2231: 0x000c, 0x2232: 0x000c, 0x2235: 0x000c,\n\t0x2236: 0x000c,\n\t// Block 0x89, offset 0x2240\n\t0x2243: 0x000c,\n\t0x224c: 0x000c,\n\t0x227c: 0x000c,\n\t// Block 0x8a, offset 0x2280\n\t0x22b0: 0x000c, 0x22b2: 0x000c, 0x22b3: 0x000c, 0x22b4: 0x000c,\n\t0x22b7: 0x000c, 0x22b8: 0x000c,\n\t0x22be: 0x000c, 0x22bf: 0x000c,\n\t// Block 0x8b, offset 0x22c0\n\t0x22c1: 0x000c,\n\t0x22ec: 0x000c, 0x22ed: 0x000c,\n\t0x22f6: 0x000c,\n\t// Block 0x8c, offset 0x2300\n\t0x2325: 0x000c, 0x2328: 0x000c,\n\t0x232d: 0x000c,\n\t// Block 0x8d, offset 0x2340\n\t0x235d: 0x0001,\n\t0x235e: 0x000c, 0x235f: 0x0001, 0x2360: 0x0001, 0x2361: 0x0001, 0x2362: 0x0001, 0x2363: 0x0001,\n\t0x2364: 0x0001, 0x2365: 0x0001, 0x2366: 0x0001, 0x2367: 0x0001, 0x2368: 0x0001, 0x2369: 0x0003,\n\t0x236a: 0x0001, 0x236b: 0x0001, 0x236c: 0x0001, 0x236d: 0x0001, 0x236e: 0x0001, 0x236f: 0x0001,\n\t0x2370: 0x0001, 0x2371: 0x0001, 0x2372: 0x0001, 0x2373: 0x0001, 0x2374: 0x0001, 0x2375: 0x0001,\n\t0x2376: 0x0001, 0x2377: 0x0001, 0x2378: 0x0001, 0x2379: 0x0001, 0x237a: 0x0001, 0x237b: 0x0001,\n\t0x237c: 0x0001, 0x237d: 0x0001, 0x237e: 0x0001, 0x237f: 0x0001,\n\t// Block 0x8e, offset 0x2380\n\t0x2380: 0x0001, 0x2381: 0x0001, 0x2382: 0x0001, 0x2383: 0x0001, 0x2384: 0x0001, 0x2385: 0x0001,\n\t0x2386: 0x0001, 0x2387: 0x0001, 0x2388: 0x0001, 0x2389: 0x0001, 0x238a: 0x0001, 0x238b: 0x0001,\n\t0x238c: 0x0001, 0x238d: 0x0001, 0x238e: 0x0001, 0x238f: 0x0001, 0x2390: 0x000d, 0x2391: 0x000d,\n\t0x2392: 0x000d, 0x2393: 0x000d, 0x2394: 0x000d, 0x2395: 0x000d, 0x2396: 0x000d, 0x2397: 0x000d,\n\t0x2398: 0x000d, 0x2399: 0x000d, 0x239a: 0x000d, 0x239b: 0x000d, 0x239c: 0x000d, 0x239d: 0x000d,\n\t0x239e: 0x000d, 0x239f: 0x000d, 0x23a0: 0x000d, 0x23a1: 0x000d, 0x23a2: 0x000d, 0x23a3: 0x000d,\n\t0x23a4: 0x000d, 0x23a5: 0x000d, 0x23a6: 0x000d, 0x23a7: 0x000d, 0x23a8: 0x000d, 0x23a9: 0x000d,\n\t0x23aa: 0x000d, 0x23ab: 0x000d, 0x23ac: 0x000d, 0x23ad: 0x000d, 0x23ae: 0x000d, 0x23af: 0x000d,\n\t0x23b0: 0x000d, 0x23b1: 0x000d, 0x23b2: 0x000d, 0x23b3: 0x000d, 0x23b4: 0x000d, 0x23b5: 0x000d,\n\t0x23b6: 0x000d, 0x23b7: 0x000d, 0x23b8: 0x000d, 0x23b9: 0x000d, 0x23ba: 0x000d, 0x23bb: 0x000d,\n\t0x23bc: 0x000d, 0x23bd: 0x000d, 0x23be: 0x000d, 0x23bf: 0x000d,\n\t// Block 0x8f, offset 0x23c0\n\t0x23c0: 0x000d, 0x23c1: 0x000d, 0x23c2: 0x000d, 0x23c3: 0x000d, 0x23c4: 0x000d, 0x23c5: 0x000d,\n\t0x23c6: 0x000d, 0x23c7: 0x000d, 0x23c8: 0x000d, 0x23c9: 0x000d, 0x23ca: 0x000d, 0x23cb: 0x000d,\n\t0x23cc: 0x000d, 0x23cd: 0x000d, 0x23ce: 0x000d, 0x23cf: 0x000d, 0x23d0: 0x000d, 0x23d1: 0x000d,\n\t0x23d2: 0x000d, 0x23d3: 0x000d, 0x23d4: 0x000d, 0x23d5: 0x000d, 0x23d6: 0x000d, 0x23d7: 0x000d,\n\t0x23d8: 0x000d, 0x23d9: 0x000d, 0x23da: 0x000d, 0x23db: 0x000d, 0x23dc: 0x000d, 0x23dd: 0x000d,\n\t0x23de: 0x000d, 0x23df: 0x000d, 0x23e0: 0x000d, 0x23e1: 0x000d, 0x23e2: 0x000d, 0x23e3: 0x000d,\n\t0x23e4: 0x000d, 0x23e5: 0x000d, 0x23e6: 0x000d, 0x23e7: 0x000d, 0x23e8: 0x000d, 0x23e9: 0x000d,\n\t0x23ea: 0x000d, 0x23eb: 0x000d, 0x23ec: 0x000d, 0x23ed: 0x000d, 0x23ee: 0x000d, 0x23ef: 0x000d,\n\t0x23f0: 0x000d, 0x23f1: 0x000d, 0x23f2: 0x000d, 0x23f3: 0x000d, 0x23f4: 0x000d, 0x23f5: 0x000d,\n\t0x23f6: 0x000d, 0x23f7: 0x000d, 0x23f8: 0x000d, 0x23f9: 0x000d, 0x23fa: 0x000d, 0x23fb: 0x000d,\n\t0x23fc: 0x000d, 0x23fd: 0x000d, 0x23fe: 0x000a, 0x23ff: 0x000a,\n\t// Block 0x90, offset 0x2400\n\t0x2400: 0x000d, 0x2401: 0x000d, 0x2402: 0x000d, 0x2403: 0x000d, 0x2404: 0x000d, 0x2405: 0x000d,\n\t0x2406: 0x000d, 0x2407: 0x000d, 0x2408: 0x000d, 0x2409: 0x000d, 0x240a: 0x000d, 0x240b: 0x000d,\n\t0x240c: 0x000d, 0x240d: 0x000d, 0x240e: 0x000d, 0x240f: 0x000d, 0x2410: 0x000b, 0x2411: 0x000b,\n\t0x2412: 0x000b, 0x2413: 0x000b, 0x2414: 0x000b, 0x2415: 0x000b, 0x2416: 0x000b, 0x2417: 0x000b,\n\t0x2418: 0x000b, 0x2419: 0x000b, 0x241a: 0x000b, 0x241b: 0x000b, 0x241c: 0x000b, 0x241d: 0x000b,\n\t0x241e: 0x000b, 0x241f: 0x000b, 0x2420: 0x000b, 0x2421: 0x000b, 0x2422: 0x000b, 0x2423: 0x000b,\n\t0x2424: 0x000b, 0x2425: 0x000b, 0x2426: 0x000b, 0x2427: 0x000b, 0x2428: 0x000b, 0x2429: 0x000b,\n\t0x242a: 0x000b, 0x242b: 0x000b, 0x242c: 0x000b, 0x242d: 0x000b, 0x242e: 0x000b, 0x242f: 0x000b,\n\t0x2430: 0x000d, 0x2431: 0x000d, 0x2432: 0x000d, 0x2433: 0x000d, 0x2434: 0x000d, 0x2435: 0x000d,\n\t0x2436: 0x000d, 0x2437: 0x000d, 0x2438: 0x000d, 0x2439: 0x000d, 0x243a: 0x000d, 0x243b: 0x000d,\n\t0x243c: 0x000d, 0x243d: 0x000a, 0x243e: 0x000d, 0x243f: 0x000d,\n\t// Block 0x91, offset 0x2440\n\t0x2440: 0x000c, 0x2441: 0x000c, 0x2442: 0x000c, 0x2443: 0x000c, 0x2444: 0x000c, 0x2445: 0x000c,\n\t0x2446: 0x000c, 0x2447: 0x000c, 0x2448: 0x000c, 0x2449: 0x000c, 0x244a: 0x000c, 0x244b: 0x000c,\n\t0x244c: 0x000c, 0x244d: 0x000c, 0x244e: 0x000c, 0x244f: 0x000c, 0x2450: 0x000a, 0x2451: 0x000a,\n\t0x2452: 0x000a, 0x2453: 0x000a, 0x2454: 0x000a, 0x2455: 0x000a, 0x2456: 0x000a, 0x2457: 0x000a,\n\t0x2458: 0x000a, 0x2459: 0x000a,\n\t0x2460: 0x000c, 0x2461: 0x000c, 0x2462: 0x000c, 0x2463: 0x000c,\n\t0x2464: 0x000c, 0x2465: 0x000c, 0x2466: 0x000c, 0x2467: 0x000c, 0x2468: 0x000c, 0x2469: 0x000c,\n\t0x246a: 0x000c, 0x246b: 0x000c, 0x246c: 0x000c, 0x246d: 0x000c, 0x246e: 0x000c, 0x246f: 0x000c,\n\t0x2470: 0x000a, 0x2471: 0x000a, 0x2472: 0x000a, 0x2473: 0x000a, 0x2474: 0x000a, 0x2475: 0x000a,\n\t0x2476: 0x000a, 0x2477: 0x000a, 0x2478: 0x000a, 0x2479: 0x000a, 0x247a: 0x000a, 0x247b: 0x000a,\n\t0x247c: 0x000a, 0x247d: 0x000a, 0x247e: 0x000a, 0x247f: 0x000a,\n\t// Block 0x92, offset 0x2480\n\t0x2480: 0x000a, 0x2481: 0x000a, 0x2482: 0x000a, 0x2483: 0x000a, 0x2484: 0x000a, 0x2485: 0x000a,\n\t0x2486: 0x000a, 0x2487: 0x000a, 0x2488: 0x000a, 0x2489: 0x000a, 0x248a: 0x000a, 0x248b: 0x000a,\n\t0x248c: 0x000a, 0x248d: 0x000a, 0x248e: 0x000a, 0x248f: 0x000a, 0x2490: 0x0006, 0x2491: 0x000a,\n\t0x2492: 0x0006, 0x2494: 0x000a, 0x2495: 0x0006, 0x2496: 0x000a, 0x2497: 0x000a,\n\t0x2498: 0x000a, 0x2499: 0x009a, 0x249a: 0x008a, 0x249b: 0x007a, 0x249c: 0x006a, 0x249d: 0x009a,\n\t0x249e: 0x008a, 0x249f: 0x0004, 0x24a0: 0x000a, 0x24a1: 0x000a, 0x24a2: 0x0003, 0x24a3: 0x0003,\n\t0x24a4: 0x000a, 0x24a5: 0x000a, 0x24a6: 0x000a, 0x24a8: 0x000a, 0x24a9: 0x0004,\n\t0x24aa: 0x0004, 0x24ab: 0x000a,\n\t0x24b0: 0x000d, 0x24b1: 0x000d, 0x24b2: 0x000d, 0x24b3: 0x000d, 0x24b4: 0x000d, 0x24b5: 0x000d,\n\t0x24b6: 0x000d, 0x24b7: 0x000d, 0x24b8: 0x000d, 0x24b9: 0x000d, 0x24ba: 0x000d, 0x24bb: 0x000d,\n\t0x24bc: 0x000d, 0x24bd: 0x000d, 0x24be: 0x000d, 0x24bf: 0x000d,\n\t// Block 0x93, offset 0x24c0\n\t0x24c0: 0x000d, 0x24c1: 0x000d, 0x24c2: 0x000d, 0x24c3: 0x000d, 0x24c4: 0x000d, 0x24c5: 0x000d,\n\t0x24c6: 0x000d, 0x24c7: 0x000d, 0x24c8: 0x000d, 0x24c9: 0x000d, 0x24ca: 0x000d, 0x24cb: 0x000d,\n\t0x24cc: 0x000d, 0x24cd: 0x000d, 0x24ce: 0x000d, 0x24cf: 0x000d, 0x24d0: 0x000d, 0x24d1: 0x000d,\n\t0x24d2: 0x000d, 0x24d3: 0x000d, 0x24d4: 0x000d, 0x24d5: 0x000d, 0x24d6: 0x000d, 0x24d7: 0x000d,\n\t0x24d8: 0x000d, 0x24d9: 0x000d, 0x24da: 0x000d, 0x24db: 0x000d, 0x24dc: 0x000d, 0x24dd: 0x000d,\n\t0x24de: 0x000d, 0x24df: 0x000d, 0x24e0: 0x000d, 0x24e1: 0x000d, 0x24e2: 0x000d, 0x24e3: 0x000d,\n\t0x24e4: 0x000d, 0x24e5: 0x000d, 0x24e6: 0x000d, 0x24e7: 0x000d, 0x24e8: 0x000d, 0x24e9: 0x000d,\n\t0x24ea: 0x000d, 0x24eb: 0x000d, 0x24ec: 0x000d, 0x24ed: 0x000d, 0x24ee: 0x000d, 0x24ef: 0x000d,\n\t0x24f0: 0x000d, 0x24f1: 0x000d, 0x24f2: 0x000d, 0x24f3: 0x000d, 0x24f4: 0x000d, 0x24f5: 0x000d,\n\t0x24f6: 0x000d, 0x24f7: 0x000d, 0x24f8: 0x000d, 0x24f9: 0x000d, 0x24fa: 0x000d, 0x24fb: 0x000d,\n\t0x24fc: 0x000d, 0x24fd: 0x000d, 0x24fe: 0x000d, 0x24ff: 0x000b,\n\t// Block 0x94, offset 0x2500\n\t0x2501: 0x000a, 0x2502: 0x000a, 0x2503: 0x0004, 0x2504: 0x0004, 0x2505: 0x0004,\n\t0x2506: 0x000a, 0x2507: 0x000a, 0x2508: 0x003a, 0x2509: 0x002a, 0x250a: 0x000a, 0x250b: 0x0003,\n\t0x250c: 0x0006, 0x250d: 0x0003, 0x250e: 0x0006, 0x250f: 0x0006, 0x2510: 0x0002, 0x2511: 0x0002,\n\t0x2512: 0x0002, 0x2513: 0x0002, 0x2514: 0x0002, 0x2515: 0x0002, 0x2516: 0x0002, 0x2517: 0x0002,\n\t0x2518: 0x0002, 0x2519: 0x0002, 0x251a: 0x0006, 0x251b: 0x000a, 0x251c: 0x000a, 0x251d: 0x000a,\n\t0x251e: 0x000a, 0x251f: 0x000a, 0x2520: 0x000a,\n\t0x253b: 0x005a,\n\t0x253c: 0x000a, 0x253d: 0x004a, 0x253e: 0x000a, 0x253f: 0x000a,\n\t// Block 0x95, offset 0x2540\n\t0x2540: 0x000a,\n\t0x255b: 0x005a, 0x255c: 0x000a, 0x255d: 0x004a,\n\t0x255e: 0x000a, 0x255f: 0x00fa, 0x2560: 0x00ea, 0x2561: 0x000a, 0x2562: 0x003a, 0x2563: 0x002a,\n\t0x2564: 0x000a, 0x2565: 0x000a,\n\t// Block 0x96, offset 0x2580\n\t0x25a0: 0x0004, 0x25a1: 0x0004, 0x25a2: 0x000a, 0x25a3: 0x000a,\n\t0x25a4: 0x000a, 0x25a5: 0x0004, 0x25a6: 0x0004, 0x25a8: 0x000a, 0x25a9: 0x000a,\n\t0x25aa: 0x000a, 0x25ab: 0x000a, 0x25ac: 0x000a, 0x25ad: 0x000a, 0x25ae: 0x000a,\n\t0x25b0: 0x000b, 0x25b1: 0x000b, 0x25b2: 0x000b, 0x25b3: 0x000b, 0x25b4: 0x000b, 0x25b5: 0x000b,\n\t0x25b6: 0x000b, 0x25b7: 0x000b, 0x25b8: 0x000b, 0x25b9: 0x000a, 0x25ba: 0x000a, 0x25bb: 0x000a,\n\t0x25bc: 0x000a, 0x25bd: 0x000a, 0x25be: 0x000b, 0x25bf: 0x000b,\n\t// Block 0x97, offset 0x25c0\n\t0x25c1: 0x000a,\n\t// Block 0x98, offset 0x2600\n\t0x2600: 0x000a, 0x2601: 0x000a, 0x2602: 0x000a, 0x2603: 0x000a, 0x2604: 0x000a, 0x2605: 0x000a,\n\t0x2606: 0x000a, 0x2607: 0x000a, 0x2608: 0x000a, 0x2609: 0x000a, 0x260a: 0x000a, 0x260b: 0x000a,\n\t0x260c: 0x000a, 0x2610: 0x000a, 0x2611: 0x000a,\n\t0x2612: 0x000a, 0x2613: 0x000a, 0x2614: 0x000a, 0x2615: 0x000a, 0x2616: 0x000a, 0x2617: 0x000a,\n\t0x2618: 0x000a, 0x2619: 0x000a, 0x261a: 0x000a, 0x261b: 0x000a,\n\t0x2620: 0x000a,\n\t// Block 0x99, offset 0x2640\n\t0x267d: 0x000c,\n\t// Block 0x9a, offset 0x2680\n\t0x26a0: 0x000c, 0x26a1: 0x0002, 0x26a2: 0x0002, 0x26a3: 0x0002,\n\t0x26a4: 0x0002, 0x26a5: 0x0002, 0x26a6: 0x0002, 0x26a7: 0x0002, 0x26a8: 0x0002, 0x26a9: 0x0002,\n\t0x26aa: 0x0002, 0x26ab: 0x0002, 0x26ac: 0x0002, 0x26ad: 0x0002, 0x26ae: 0x0002, 0x26af: 0x0002,\n\t0x26b0: 0x0002, 0x26b1: 0x0002, 0x26b2: 0x0002, 0x26b3: 0x0002, 0x26b4: 0x0002, 0x26b5: 0x0002,\n\t0x26b6: 0x0002, 0x26b7: 0x0002, 0x26b8: 0x0002, 0x26b9: 0x0002, 0x26ba: 0x0002, 0x26bb: 0x0002,\n\t// Block 0x9b, offset 0x26c0\n\t0x26f6: 0x000c, 0x26f7: 0x000c, 0x26f8: 0x000c, 0x26f9: 0x000c, 0x26fa: 0x000c,\n\t// Block 0x9c, offset 0x2700\n\t0x2700: 0x0001, 0x2701: 0x0001, 0x2702: 0x0001, 0x2703: 0x0001, 0x2704: 0x0001, 0x2705: 0x0001,\n\t0x2706: 0x0001, 0x2707: 0x0001, 0x2708: 0x0001, 0x2709: 0x0001, 0x270a: 0x0001, 0x270b: 0x0001,\n\t0x270c: 0x0001, 0x270d: 0x0001, 0x270e: 0x0001, 0x270f: 0x0001, 0x2710: 0x0001, 0x2711: 0x0001,\n\t0x2712: 0x0001, 0x2713: 0x0001, 0x2714: 0x0001, 0x2715: 0x0001, 0x2716: 0x0001, 0x2717: 0x0001,\n\t0x2718: 0x0001, 0x2719: 0x0001, 0x271a: 0x0001, 0x271b: 0x0001, 0x271c: 0x0001, 0x271d: 0x0001,\n\t0x271e: 0x0001, 0x271f: 0x0001, 0x2720: 0x0001, 0x2721: 0x0001, 0x2722: 0x0001, 0x2723: 0x0001,\n\t0x2724: 0x0001, 0x2725: 0x0001, 0x2726: 0x0001, 0x2727: 0x0001, 0x2728: 0x0001, 0x2729: 0x0001,\n\t0x272a: 0x0001, 0x272b: 0x0001, 0x272c: 0x0001, 0x272d: 0x0001, 0x272e: 0x0001, 0x272f: 0x0001,\n\t0x2730: 0x0001, 0x2731: 0x0001, 0x2732: 0x0001, 0x2733: 0x0001, 0x2734: 0x0001, 0x2735: 0x0001,\n\t0x2736: 0x0001, 0x2737: 0x0001, 0x2738: 0x0001, 0x2739: 0x0001, 0x273a: 0x0001, 0x273b: 0x0001,\n\t0x273c: 0x0001, 0x273d: 0x0001, 0x273e: 0x0001, 0x273f: 0x0001,\n\t// Block 0x9d, offset 0x2740\n\t0x2740: 0x0001, 0x2741: 0x0001, 0x2742: 0x0001, 0x2743: 0x0001, 0x2744: 0x0001, 0x2745: 0x0001,\n\t0x2746: 0x0001, 0x2747: 0x0001, 0x2748: 0x0001, 0x2749: 0x0001, 0x274a: 0x0001, 0x274b: 0x0001,\n\t0x274c: 0x0001, 0x274d: 0x0001, 0x274e: 0x0001, 0x274f: 0x0001, 0x2750: 0x0001, 0x2751: 0x0001,\n\t0x2752: 0x0001, 0x2753: 0x0001, 0x2754: 0x0001, 0x2755: 0x0001, 0x2756: 0x0001, 0x2757: 0x0001,\n\t0x2758: 0x0001, 0x2759: 0x0001, 0x275a: 0x0001, 0x275b: 0x0001, 0x275c: 0x0001, 0x275d: 0x0001,\n\t0x275e: 0x0001, 0x275f: 0x000a, 0x2760: 0x0001, 0x2761: 0x0001, 0x2762: 0x0001, 0x2763: 0x0001,\n\t0x2764: 0x0001, 0x2765: 0x0001, 0x2766: 0x0001, 0x2767: 0x0001, 0x2768: 0x0001, 0x2769: 0x0001,\n\t0x276a: 0x0001, 0x276b: 0x0001, 0x276c: 0x0001, 0x276d: 0x0001, 0x276e: 0x0001, 0x276f: 0x0001,\n\t0x2770: 0x0001, 0x2771: 0x0001, 0x2772: 0x0001, 0x2773: 0x0001, 0x2774: 0x0001, 0x2775: 0x0001,\n\t0x2776: 0x0001, 0x2777: 0x0001, 0x2778: 0x0001, 0x2779: 0x0001, 0x277a: 0x0001, 0x277b: 0x0001,\n\t0x277c: 0x0001, 0x277d: 0x0001, 0x277e: 0x0001, 0x277f: 0x0001,\n\t// Block 0x9e, offset 0x2780\n\t0x2780: 0x0001, 0x2781: 0x000c, 0x2782: 0x000c, 0x2783: 0x000c, 0x2784: 0x0001, 0x2785: 0x000c,\n\t0x2786: 0x000c, 0x2787: 0x0001, 0x2788: 0x0001, 0x2789: 0x0001, 0x278a: 0x0001, 0x278b: 0x0001,\n\t0x278c: 0x000c, 0x278d: 0x000c, 0x278e: 0x000c, 0x278f: 0x000c, 0x2790: 0x0001, 0x2791: 0x0001,\n\t0x2792: 0x0001, 0x2793: 0x0001, 0x2794: 0x0001, 0x2795: 0x0001, 0x2796: 0x0001, 0x2797: 0x0001,\n\t0x2798: 0x0001, 0x2799: 0x0001, 0x279a: 0x0001, 0x279b: 0x0001, 0x279c: 0x0001, 0x279d: 0x0001,\n\t0x279e: 0x0001, 0x279f: 0x0001, 0x27a0: 0x0001, 0x27a1: 0x0001, 0x27a2: 0x0001, 0x27a3: 0x0001,\n\t0x27a4: 0x0001, 0x27a5: 0x0001, 0x27a6: 0x0001, 0x27a7: 0x0001, 0x27a8: 0x0001, 0x27a9: 0x0001,\n\t0x27aa: 0x0001, 0x27ab: 0x0001, 0x27ac: 0x0001, 0x27ad: 0x0001, 0x27ae: 0x0001, 0x27af: 0x0001,\n\t0x27b0: 0x0001, 0x27b1: 0x0001, 0x27b2: 0x0001, 0x27b3: 0x0001, 0x27b4: 0x0001, 0x27b5: 0x0001,\n\t0x27b6: 0x0001, 0x27b7: 0x0001, 0x27b8: 0x000c, 0x27b9: 0x000c, 0x27ba: 0x000c, 0x27bb: 0x0001,\n\t0x27bc: 0x0001, 0x27bd: 0x0001, 0x27be: 0x0001, 0x27bf: 0x000c,\n\t// Block 0x9f, offset 0x27c0\n\t0x27c0: 0x0001, 0x27c1: 0x0001, 0x27c2: 0x0001, 0x27c3: 0x0001, 0x27c4: 0x0001, 0x27c5: 0x0001,\n\t0x27c6: 0x0001, 0x27c7: 0x0001, 0x27c8: 0x0001, 0x27c9: 0x0001, 0x27ca: 0x0001, 0x27cb: 0x0001,\n\t0x27cc: 0x0001, 0x27cd: 0x0001, 0x27ce: 0x0001, 0x27cf: 0x0001, 0x27d0: 0x0001, 0x27d1: 0x0001,\n\t0x27d2: 0x0001, 0x27d3: 0x0001, 0x27d4: 0x0001, 0x27d5: 0x0001, 0x27d6: 0x0001, 0x27d7: 0x0001,\n\t0x27d8: 0x0001, 0x27d9: 0x0001, 0x27da: 0x0001, 0x27db: 0x0001, 0x27dc: 0x0001, 0x27dd: 0x0001,\n\t0x27de: 0x0001, 0x27df: 0x0001, 0x27e0: 0x0001, 0x27e1: 0x0001, 0x27e2: 0x0001, 0x27e3: 0x0001,\n\t0x27e4: 0x0001, 0x27e5: 0x000c, 0x27e6: 0x000c, 0x27e7: 0x0001, 0x27e8: 0x0001, 0x27e9: 0x0001,\n\t0x27ea: 0x0001, 0x27eb: 0x0001, 0x27ec: 0x0001, 0x27ed: 0x0001, 0x27ee: 0x0001, 0x27ef: 0x0001,\n\t0x27f0: 0x0001, 0x27f1: 0x0001, 0x27f2: 0x0001, 0x27f3: 0x0001, 0x27f4: 0x0001, 0x27f5: 0x0001,\n\t0x27f6: 0x0001, 0x27f7: 0x0001, 0x27f8: 0x0001, 0x27f9: 0x0001, 0x27fa: 0x0001, 0x27fb: 0x0001,\n\t0x27fc: 0x0001, 0x27fd: 0x0001, 0x27fe: 0x0001, 0x27ff: 0x0001,\n\t// Block 0xa0, offset 0x2800\n\t0x2800: 0x0001, 0x2801: 0x0001, 0x2802: 0x0001, 0x2803: 0x0001, 0x2804: 0x0001, 0x2805: 0x0001,\n\t0x2806: 0x0001, 0x2807: 0x0001, 0x2808: 0x0001, 0x2809: 0x0001, 0x280a: 0x0001, 0x280b: 0x0001,\n\t0x280c: 0x0001, 0x280d: 0x0001, 0x280e: 0x0001, 0x280f: 0x0001, 0x2810: 0x0001, 0x2811: 0x0001,\n\t0x2812: 0x0001, 0x2813: 0x0001, 0x2814: 0x0001, 0x2815: 0x0001, 0x2816: 0x0001, 0x2817: 0x0001,\n\t0x2818: 0x0001, 0x2819: 0x0001, 0x281a: 0x0001, 0x281b: 0x0001, 0x281c: 0x0001, 0x281d: 0x0001,\n\t0x281e: 0x0001, 0x281f: 0x0001, 0x2820: 0x0001, 0x2821: 0x0001, 0x2822: 0x0001, 0x2823: 0x0001,\n\t0x2824: 0x0001, 0x2825: 0x0001, 0x2826: 0x0001, 0x2827: 0x0001, 0x2828: 0x0001, 0x2829: 0x0001,\n\t0x282a: 0x0001, 0x282b: 0x0001, 0x282c: 0x0001, 0x282d: 0x0001, 0x282e: 0x0001, 0x282f: 0x0001,\n\t0x2830: 0x0001, 0x2831: 0x0001, 0x2832: 0x0001, 0x2833: 0x0001, 0x2834: 0x0001, 0x2835: 0x0001,\n\t0x2836: 0x0001, 0x2837: 0x0001, 0x2838: 0x0001, 0x2839: 0x000a, 0x283a: 0x000a, 0x283b: 0x000a,\n\t0x283c: 0x000a, 0x283d: 0x000a, 0x283e: 0x000a, 0x283f: 0x000a,\n\t// Block 0xa1, offset 0x2840\n\t0x2840: 0x0001, 0x2841: 0x0001, 0x2842: 0x0001, 0x2843: 0x0001, 0x2844: 0x0001, 0x2845: 0x0001,\n\t0x2846: 0x0001, 0x2847: 0x0001, 0x2848: 0x0001, 0x2849: 0x0001, 0x284a: 0x0001, 0x284b: 0x0001,\n\t0x284c: 0x0001, 0x284d: 0x0001, 0x284e: 0x0001, 0x284f: 0x0001, 0x2850: 0x0001, 0x2851: 0x0001,\n\t0x2852: 0x0001, 0x2853: 0x0001, 0x2854: 0x0001, 0x2855: 0x0001, 0x2856: 0x0001, 0x2857: 0x0001,\n\t0x2858: 0x0001, 0x2859: 0x0001, 0x285a: 0x0001, 0x285b: 0x0001, 0x285c: 0x0001, 0x285d: 0x0001,\n\t0x285e: 0x0001, 0x285f: 0x0001, 0x2860: 0x0005, 0x2861: 0x0005, 0x2862: 0x0005, 0x2863: 0x0005,\n\t0x2864: 0x0005, 0x2865: 0x0005, 0x2866: 0x0005, 0x2867: 0x0005, 0x2868: 0x0005, 0x2869: 0x0005,\n\t0x286a: 0x0005, 0x286b: 0x0005, 0x286c: 0x0005, 0x286d: 0x0005, 0x286e: 0x0005, 0x286f: 0x0005,\n\t0x2870: 0x0005, 0x2871: 0x0005, 0x2872: 0x0005, 0x2873: 0x0005, 0x2874: 0x0005, 0x2875: 0x0005,\n\t0x2876: 0x0005, 0x2877: 0x0005, 0x2878: 0x0005, 0x2879: 0x0005, 0x287a: 0x0005, 0x287b: 0x0005,\n\t0x287c: 0x0005, 0x287d: 0x0005, 0x287e: 0x0005, 0x287f: 0x0001,\n\t// Block 0xa2, offset 0x2880\n\t0x2881: 0x000c,\n\t0x28b8: 0x000c, 0x28b9: 0x000c, 0x28ba: 0x000c, 0x28bb: 0x000c,\n\t0x28bc: 0x000c, 0x28bd: 0x000c, 0x28be: 0x000c, 0x28bf: 0x000c,\n\t// Block 0xa3, offset 0x28c0\n\t0x28c0: 0x000c, 0x28c1: 0x000c, 0x28c2: 0x000c, 0x28c3: 0x000c, 0x28c4: 0x000c, 0x28c5: 0x000c,\n\t0x28c6: 0x000c,\n\t0x28d2: 0x000a, 0x28d3: 0x000a, 0x28d4: 0x000a, 0x28d5: 0x000a, 0x28d6: 0x000a, 0x28d7: 0x000a,\n\t0x28d8: 0x000a, 0x28d9: 0x000a, 0x28da: 0x000a, 0x28db: 0x000a, 0x28dc: 0x000a, 0x28dd: 0x000a,\n\t0x28de: 0x000a, 0x28df: 0x000a, 0x28e0: 0x000a, 0x28e1: 0x000a, 0x28e2: 0x000a, 0x28e3: 0x000a,\n\t0x28e4: 0x000a, 0x28e5: 0x000a,\n\t0x28ff: 0x000c,\n\t// Block 0xa4, offset 0x2900\n\t0x2900: 0x000c, 0x2901: 0x000c,\n\t0x2933: 0x000c, 0x2934: 0x000c, 0x2935: 0x000c,\n\t0x2936: 0x000c, 0x2939: 0x000c, 0x293a: 0x000c,\n\t// Block 0xa5, offset 0x2940\n\t0x2940: 0x000c, 0x2941: 0x000c, 0x2942: 0x000c,\n\t0x2967: 0x000c, 0x2968: 0x000c, 0x2969: 0x000c,\n\t0x296a: 0x000c, 0x296b: 0x000c, 0x296d: 0x000c, 0x296e: 0x000c, 0x296f: 0x000c,\n\t0x2970: 0x000c, 0x2971: 0x000c, 0x2972: 0x000c, 0x2973: 0x000c, 0x2974: 0x000c,\n\t// Block 0xa6, offset 0x2980\n\t0x29b3: 0x000c,\n\t// Block 0xa7, offset 0x29c0\n\t0x29c0: 0x000c, 0x29c1: 0x000c,\n\t0x29f6: 0x000c, 0x29f7: 0x000c, 0x29f8: 0x000c, 0x29f9: 0x000c, 0x29fa: 0x000c, 0x29fb: 0x000c,\n\t0x29fc: 0x000c, 0x29fd: 0x000c, 0x29fe: 0x000c,\n\t// Block 0xa8, offset 0x2a00\n\t0x2a0a: 0x000c, 0x2a0b: 0x000c,\n\t0x2a0c: 0x000c,\n\t// Block 0xa9, offset 0x2a40\n\t0x2a6f: 0x000c,\n\t0x2a70: 0x000c, 0x2a71: 0x000c, 0x2a74: 0x000c,\n\t0x2a76: 0x000c, 0x2a77: 0x000c,\n\t0x2a7e: 0x000c,\n\t// Block 0xaa, offset 0x2a80\n\t0x2a9f: 0x000c, 0x2aa3: 0x000c,\n\t0x2aa4: 0x000c, 0x2aa5: 0x000c, 0x2aa6: 0x000c, 0x2aa7: 0x000c, 0x2aa8: 0x000c, 0x2aa9: 0x000c,\n\t0x2aaa: 0x000c,\n\t// Block 0xab, offset 0x2ac0\n\t0x2ac0: 0x000c, 0x2ac1: 0x000c,\n\t0x2afc: 0x000c,\n\t// Block 0xac, offset 0x2b00\n\t0x2b00: 0x000c,\n\t0x2b26: 0x000c, 0x2b27: 0x000c, 0x2b28: 0x000c, 0x2b29: 0x000c,\n\t0x2b2a: 0x000c, 0x2b2b: 0x000c, 0x2b2c: 0x000c,\n\t0x2b30: 0x000c, 0x2b31: 0x000c, 0x2b32: 0x000c, 0x2b33: 0x000c, 0x2b34: 0x000c,\n\t// Block 0xad, offset 0x2b40\n\t0x2b78: 0x000c, 0x2b79: 0x000c, 0x2b7a: 0x000c, 0x2b7b: 0x000c,\n\t0x2b7c: 0x000c, 0x2b7d: 0x000c, 0x2b7e: 0x000c, 0x2b7f: 0x000c,\n\t// Block 0xae, offset 0x2b80\n\t0x2b82: 0x000c, 0x2b83: 0x000c, 0x2b84: 0x000c,\n\t0x2b86: 0x000c,\n\t// Block 0xaf, offset 0x2bc0\n\t0x2bf3: 0x000c, 0x2bf4: 0x000c, 0x2bf5: 0x000c,\n\t0x2bf6: 0x000c, 0x2bf7: 0x000c, 0x2bf8: 0x000c, 0x2bfa: 0x000c,\n\t0x2bff: 0x000c,\n\t// Block 0xb0, offset 0x2c00\n\t0x2c00: 0x000c, 0x2c02: 0x000c, 0x2c03: 0x000c,\n\t// Block 0xb1, offset 0x2c40\n\t0x2c72: 0x000c, 0x2c73: 0x000c, 0x2c74: 0x000c, 0x2c75: 0x000c,\n\t0x2c7c: 0x000c, 0x2c7d: 0x000c, 0x2c7f: 0x000c,\n\t// Block 0xb2, offset 0x2c80\n\t0x2c80: 0x000c,\n\t0x2c9c: 0x000c, 0x2c9d: 0x000c,\n\t// Block 0xb3, offset 0x2cc0\n\t0x2cf3: 0x000c, 0x2cf4: 0x000c, 0x2cf5: 0x000c,\n\t0x2cf6: 0x000c, 0x2cf7: 0x000c, 0x2cf8: 0x000c, 0x2cf9: 0x000c, 0x2cfa: 0x000c,\n\t0x2cfd: 0x000c, 0x2cff: 0x000c,\n\t// Block 0xb4, offset 0x2d00\n\t0x2d00: 0x000c,\n\t0x2d20: 0x000a, 0x2d21: 0x000a, 0x2d22: 0x000a, 0x2d23: 0x000a,\n\t0x2d24: 0x000a, 0x2d25: 0x000a, 0x2d26: 0x000a, 0x2d27: 0x000a, 0x2d28: 0x000a, 0x2d29: 0x000a,\n\t0x2d2a: 0x000a, 0x2d2b: 0x000a, 0x2d2c: 0x000a,\n\t// Block 0xb5, offset 0x2d40\n\t0x2d6b: 0x000c, 0x2d6d: 0x000c,\n\t0x2d70: 0x000c, 0x2d71: 0x000c, 0x2d72: 0x000c, 0x2d73: 0x000c, 0x2d74: 0x000c, 0x2d75: 0x000c,\n\t0x2d77: 0x000c,\n\t// Block 0xb6, offset 0x2d80\n\t0x2d9d: 0x000c,\n\t0x2d9e: 0x000c, 0x2d9f: 0x000c, 0x2da2: 0x000c, 0x2da3: 0x000c,\n\t0x2da4: 0x000c, 0x2da5: 0x000c, 0x2da7: 0x000c, 0x2da8: 0x000c, 0x2da9: 0x000c,\n\t0x2daa: 0x000c, 0x2dab: 0x000c,\n\t// Block 0xb7, offset 0x2dc0\n\t0x2dc1: 0x000c, 0x2dc2: 0x000c, 0x2dc3: 0x000c, 0x2dc4: 0x000c, 0x2dc5: 0x000c,\n\t0x2dc6: 0x000c, 0x2dc9: 0x000c, 0x2dca: 0x000c,\n\t0x2df3: 0x000c, 0x2df4: 0x000c, 0x2df5: 0x000c,\n\t0x2df6: 0x000c, 0x2df7: 0x000c, 0x2df8: 0x000c, 0x2dfb: 0x000c,\n\t0x2dfc: 0x000c, 0x2dfd: 0x000c, 0x2dfe: 0x000c,\n\t// Block 0xb8, offset 0x2e00\n\t0x2e07: 0x000c,\n\t0x2e11: 0x000c,\n\t0x2e12: 0x000c, 0x2e13: 0x000c, 0x2e14: 0x000c, 0x2e15: 0x000c, 0x2e16: 0x000c,\n\t0x2e19: 0x000c, 0x2e1a: 0x000c, 0x2e1b: 0x000c,\n\t// Block 0xb9, offset 0x2e40\n\t0x2e4a: 0x000c, 0x2e4b: 0x000c,\n\t0x2e4c: 0x000c, 0x2e4d: 0x000c, 0x2e4e: 0x000c, 0x2e4f: 0x000c, 0x2e50: 0x000c, 0x2e51: 0x000c,\n\t0x2e52: 0x000c, 0x2e53: 0x000c, 0x2e54: 0x000c, 0x2e55: 0x000c, 0x2e56: 0x000c,\n\t0x2e58: 0x000c, 0x2e59: 0x000c,\n\t// Block 0xba, offset 0x2e80\n\t0x2eb0: 0x000c, 0x2eb1: 0x000c, 0x2eb2: 0x000c, 0x2eb3: 0x000c, 0x2eb4: 0x000c, 0x2eb5: 0x000c,\n\t0x2eb6: 0x000c, 0x2eb8: 0x000c, 0x2eb9: 0x000c, 0x2eba: 0x000c, 0x2ebb: 0x000c,\n\t0x2ebc: 0x000c, 0x2ebd: 0x000c,\n\t// Block 0xbb, offset 0x2ec0\n\t0x2ed2: 0x000c, 0x2ed3: 0x000c, 0x2ed4: 0x000c, 0x2ed5: 0x000c, 0x2ed6: 0x000c, 0x2ed7: 0x000c,\n\t0x2ed8: 0x000c, 0x2ed9: 0x000c, 0x2eda: 0x000c, 0x2edb: 0x000c, 0x2edc: 0x000c, 0x2edd: 0x000c,\n\t0x2ede: 0x000c, 0x2edf: 0x000c, 0x2ee0: 0x000c, 0x2ee1: 0x000c, 0x2ee2: 0x000c, 0x2ee3: 0x000c,\n\t0x2ee4: 0x000c, 0x2ee5: 0x000c, 0x2ee6: 0x000c, 0x2ee7: 0x000c,\n\t0x2eea: 0x000c, 0x2eeb: 0x000c, 0x2eec: 0x000c, 0x2eed: 0x000c, 0x2eee: 0x000c, 0x2eef: 0x000c,\n\t0x2ef0: 0x000c, 0x2ef2: 0x000c, 0x2ef3: 0x000c, 0x2ef5: 0x000c,\n\t0x2ef6: 0x000c,\n\t// Block 0xbc, offset 0x2f00\n\t0x2f31: 0x000c, 0x2f32: 0x000c, 0x2f33: 0x000c, 0x2f34: 0x000c, 0x2f35: 0x000c,\n\t0x2f36: 0x000c, 0x2f3a: 0x000c,\n\t0x2f3c: 0x000c, 0x2f3d: 0x000c, 0x2f3f: 0x000c,\n\t// Block 0xbd, offset 0x2f40\n\t0x2f40: 0x000c, 0x2f41: 0x000c, 0x2f42: 0x000c, 0x2f43: 0x000c, 0x2f44: 0x000c, 0x2f45: 0x000c,\n\t0x2f47: 0x000c,\n\t// Block 0xbe, offset 0x2f80\n\t0x2fb0: 0x000c, 0x2fb1: 0x000c, 0x2fb2: 0x000c, 0x2fb3: 0x000c, 0x2fb4: 0x000c,\n\t// Block 0xbf, offset 0x2fc0\n\t0x2ff0: 0x000c, 0x2ff1: 0x000c, 0x2ff2: 0x000c, 0x2ff3: 0x000c, 0x2ff4: 0x000c, 0x2ff5: 0x000c,\n\t0x2ff6: 0x000c,\n\t// Block 0xc0, offset 0x3000\n\t0x300f: 0x000c, 0x3010: 0x000c, 0x3011: 0x000c,\n\t0x3012: 0x000c,\n\t// Block 0xc1, offset 0x3040\n\t0x305d: 0x000c,\n\t0x305e: 0x000c, 0x3060: 0x000b, 0x3061: 0x000b, 0x3062: 0x000b, 0x3063: 0x000b,\n\t// Block 0xc2, offset 0x3080\n\t0x30a7: 0x000c, 0x30a8: 0x000c, 0x30a9: 0x000c,\n\t0x30b3: 0x000b, 0x30b4: 0x000b, 0x30b5: 0x000b,\n\t0x30b6: 0x000b, 0x30b7: 0x000b, 0x30b8: 0x000b, 0x30b9: 0x000b, 0x30ba: 0x000b, 0x30bb: 0x000c,\n\t0x30bc: 0x000c, 0x30bd: 0x000c, 0x30be: 0x000c, 0x30bf: 0x000c,\n\t// Block 0xc3, offset 0x30c0\n\t0x30c0: 0x000c, 0x30c1: 0x000c, 0x30c2: 0x000c, 0x30c5: 0x000c,\n\t0x30c6: 0x000c, 0x30c7: 0x000c, 0x30c8: 0x000c, 0x30c9: 0x000c, 0x30ca: 0x000c, 0x30cb: 0x000c,\n\t0x30ea: 0x000c, 0x30eb: 0x000c, 0x30ec: 0x000c, 0x30ed: 0x000c,\n\t// Block 0xc4, offset 0x3100\n\t0x3100: 0x000a, 0x3101: 0x000a, 0x3102: 0x000c, 0x3103: 0x000c, 0x3104: 0x000c, 0x3105: 0x000a,\n\t// Block 0xc5, offset 0x3140\n\t0x3140: 0x000a, 0x3141: 0x000a, 0x3142: 0x000a, 0x3143: 0x000a, 0x3144: 0x000a, 0x3145: 0x000a,\n\t0x3146: 0x000a, 0x3147: 0x000a, 0x3148: 0x000a, 0x3149: 0x000a, 0x314a: 0x000a, 0x314b: 0x000a,\n\t0x314c: 0x000a, 0x314d: 0x000a, 0x314e: 0x000a, 0x314f: 0x000a, 0x3150: 0x000a, 0x3151: 0x000a,\n\t0x3152: 0x000a, 0x3153: 0x000a, 0x3154: 0x000a, 0x3155: 0x000a, 0x3156: 0x000a,\n\t// Block 0xc6, offset 0x3180\n\t0x319b: 0x000a,\n\t// Block 0xc7, offset 0x31c0\n\t0x31d5: 0x000a,\n\t// Block 0xc8, offset 0x3200\n\t0x320f: 0x000a,\n\t// Block 0xc9, offset 0x3240\n\t0x3249: 0x000a,\n\t// Block 0xca, offset 0x3280\n\t0x3283: 0x000a,\n\t0x328e: 0x0002, 0x328f: 0x0002, 0x3290: 0x0002, 0x3291: 0x0002,\n\t0x3292: 0x0002, 0x3293: 0x0002, 0x3294: 0x0002, 0x3295: 0x0002, 0x3296: 0x0002, 0x3297: 0x0002,\n\t0x3298: 0x0002, 0x3299: 0x0002, 0x329a: 0x0002, 0x329b: 0x0002, 0x329c: 0x0002, 0x329d: 0x0002,\n\t0x329e: 0x0002, 0x329f: 0x0002, 0x32a0: 0x0002, 0x32a1: 0x0002, 0x32a2: 0x0002, 0x32a3: 0x0002,\n\t0x32a4: 0x0002, 0x32a5: 0x0002, 0x32a6: 0x0002, 0x32a7: 0x0002, 0x32a8: 0x0002, 0x32a9: 0x0002,\n\t0x32aa: 0x0002, 0x32ab: 0x0002, 0x32ac: 0x0002, 0x32ad: 0x0002, 0x32ae: 0x0002, 0x32af: 0x0002,\n\t0x32b0: 0x0002, 0x32b1: 0x0002, 0x32b2: 0x0002, 0x32b3: 0x0002, 0x32b4: 0x0002, 0x32b5: 0x0002,\n\t0x32b6: 0x0002, 0x32b7: 0x0002, 0x32b8: 0x0002, 0x32b9: 0x0002, 0x32ba: 0x0002, 0x32bb: 0x0002,\n\t0x32bc: 0x0002, 0x32bd: 0x0002, 0x32be: 0x0002, 0x32bf: 0x0002,\n\t// Block 0xcb, offset 0x32c0\n\t0x32c0: 0x000c, 0x32c1: 0x000c, 0x32c2: 0x000c, 0x32c3: 0x000c, 0x32c4: 0x000c, 0x32c5: 0x000c,\n\t0x32c6: 0x000c, 0x32c7: 0x000c, 0x32c8: 0x000c, 0x32c9: 0x000c, 0x32ca: 0x000c, 0x32cb: 0x000c,\n\t0x32cc: 0x000c, 0x32cd: 0x000c, 0x32ce: 0x000c, 0x32cf: 0x000c, 0x32d0: 0x000c, 0x32d1: 0x000c,\n\t0x32d2: 0x000c, 0x32d3: 0x000c, 0x32d4: 0x000c, 0x32d5: 0x000c, 0x32d6: 0x000c, 0x32d7: 0x000c,\n\t0x32d8: 0x000c, 0x32d9: 0x000c, 0x32da: 0x000c, 0x32db: 0x000c, 0x32dc: 0x000c, 0x32dd: 0x000c,\n\t0x32de: 0x000c, 0x32df: 0x000c, 0x32e0: 0x000c, 0x32e1: 0x000c, 0x32e2: 0x000c, 0x32e3: 0x000c,\n\t0x32e4: 0x000c, 0x32e5: 0x000c, 0x32e6: 0x000c, 0x32e7: 0x000c, 0x32e8: 0x000c, 0x32e9: 0x000c,\n\t0x32ea: 0x000c, 0x32eb: 0x000c, 0x32ec: 0x000c, 0x32ed: 0x000c, 0x32ee: 0x000c, 0x32ef: 0x000c,\n\t0x32f0: 0x000c, 0x32f1: 0x000c, 0x32f2: 0x000c, 0x32f3: 0x000c, 0x32f4: 0x000c, 0x32f5: 0x000c,\n\t0x32f6: 0x000c, 0x32fb: 0x000c,\n\t0x32fc: 0x000c, 0x32fd: 0x000c, 0x32fe: 0x000c, 0x32ff: 0x000c,\n\t// Block 0xcc, offset 0x3300\n\t0x3300: 0x000c, 0x3301: 0x000c, 0x3302: 0x000c, 0x3303: 0x000c, 0x3304: 0x000c, 0x3305: 0x000c,\n\t0x3306: 0x000c, 0x3307: 0x000c, 0x3308: 0x000c, 0x3309: 0x000c, 0x330a: 0x000c, 0x330b: 0x000c,\n\t0x330c: 0x000c, 0x330d: 0x000c, 0x330e: 0x000c, 0x330f: 0x000c, 0x3310: 0x000c, 0x3311: 0x000c,\n\t0x3312: 0x000c, 0x3313: 0x000c, 0x3314: 0x000c, 0x3315: 0x000c, 0x3316: 0x000c, 0x3317: 0x000c,\n\t0x3318: 0x000c, 0x3319: 0x000c, 0x331a: 0x000c, 0x331b: 0x000c, 0x331c: 0x000c, 0x331d: 0x000c,\n\t0x331e: 0x000c, 0x331f: 0x000c, 0x3320: 0x000c, 0x3321: 0x000c, 0x3322: 0x000c, 0x3323: 0x000c,\n\t0x3324: 0x000c, 0x3325: 0x000c, 0x3326: 0x000c, 0x3327: 0x000c, 0x3328: 0x000c, 0x3329: 0x000c,\n\t0x332a: 0x000c, 0x332b: 0x000c, 0x332c: 0x000c,\n\t0x3335: 0x000c,\n\t// Block 0xcd, offset 0x3340\n\t0x3344: 0x000c,\n\t0x335b: 0x000c, 0x335c: 0x000c, 0x335d: 0x000c,\n\t0x335e: 0x000c, 0x335f: 0x000c, 0x3361: 0x000c, 0x3362: 0x000c, 0x3363: 0x000c,\n\t0x3364: 0x000c, 0x3365: 0x000c, 0x3366: 0x000c, 0x3367: 0x000c, 0x3368: 0x000c, 0x3369: 0x000c,\n\t0x336a: 0x000c, 0x336b: 0x000c, 0x336c: 0x000c, 0x336d: 0x000c, 0x336e: 0x000c, 0x336f: 0x000c,\n\t// Block 0xce, offset 0x3380\n\t0x3380: 0x000c, 0x3381: 0x000c, 0x3382: 0x000c, 0x3383: 0x000c, 0x3384: 0x000c, 0x3385: 0x000c,\n\t0x3386: 0x000c, 0x3388: 0x000c, 0x3389: 0x000c, 0x338a: 0x000c, 0x338b: 0x000c,\n\t0x338c: 0x000c, 0x338d: 0x000c, 0x338e: 0x000c, 0x338f: 0x000c, 0x3390: 0x000c, 0x3391: 0x000c,\n\t0x3392: 0x000c, 0x3393: 0x000c, 0x3394: 0x000c, 0x3395: 0x000c, 0x3396: 0x000c, 0x3397: 0x000c,\n\t0x3398: 0x000c, 0x339b: 0x000c, 0x339c: 0x000c, 0x339d: 0x000c,\n\t0x339e: 0x000c, 0x339f: 0x000c, 0x33a0: 0x000c, 0x33a1: 0x000c, 0x33a3: 0x000c,\n\t0x33a4: 0x000c, 0x33a6: 0x000c, 0x33a7: 0x000c, 0x33a8: 0x000c, 0x33a9: 0x000c,\n\t0x33aa: 0x000c,\n\t// Block 0xcf, offset 0x33c0\n\t0x33c0: 0x0001, 0x33c1: 0x0001, 0x33c2: 0x0001, 0x33c3: 0x0001, 0x33c4: 0x0001, 0x33c5: 0x0001,\n\t0x33c6: 0x0001, 0x33c7: 0x0001, 0x33c8: 0x0001, 0x33c9: 0x0001, 0x33ca: 0x0001, 0x33cb: 0x0001,\n\t0x33cc: 0x0001, 0x33cd: 0x0001, 0x33ce: 0x0001, 0x33cf: 0x0001, 0x33d0: 0x000c, 0x33d1: 0x000c,\n\t0x33d2: 0x000c, 0x33d3: 0x000c, 0x33d4: 0x000c, 0x33d5: 0x000c, 0x33d6: 0x000c, 0x33d7: 0x0001,\n\t0x33d8: 0x0001, 0x33d9: 0x0001, 0x33da: 0x0001, 0x33db: 0x0001, 0x33dc: 0x0001, 0x33dd: 0x0001,\n\t0x33de: 0x0001, 0x33df: 0x0001, 0x33e0: 0x0001, 0x33e1: 0x0001, 0x33e2: 0x0001, 0x33e3: 0x0001,\n\t0x33e4: 0x0001, 0x33e5: 0x0001, 0x33e6: 0x0001, 0x33e7: 0x0001, 0x33e8: 0x0001, 0x33e9: 0x0001,\n\t0x33ea: 0x0001, 0x33eb: 0x0001, 0x33ec: 0x0001, 0x33ed: 0x0001, 0x33ee: 0x0001, 0x33ef: 0x0001,\n\t0x33f0: 0x0001, 0x33f1: 0x0001, 0x33f2: 0x0001, 0x33f3: 0x0001, 0x33f4: 0x0001, 0x33f5: 0x0001,\n\t0x33f6: 0x0001, 0x33f7: 0x0001, 0x33f8: 0x0001, 0x33f9: 0x0001, 0x33fa: 0x0001, 0x33fb: 0x0001,\n\t0x33fc: 0x0001, 0x33fd: 0x0001, 0x33fe: 0x0001, 0x33ff: 0x0001,\n\t// Block 0xd0, offset 0x3400\n\t0x3400: 0x0001, 0x3401: 0x0001, 0x3402: 0x0001, 0x3403: 0x0001, 0x3404: 0x000c, 0x3405: 0x000c,\n\t0x3406: 0x000c, 0x3407: 0x000c, 0x3408: 0x000c, 0x3409: 0x000c, 0x340a: 0x000c, 0x340b: 0x0001,\n\t0x340c: 0x0001, 0x340d: 0x0001, 0x340e: 0x0001, 0x340f: 0x0001, 0x3410: 0x0001, 0x3411: 0x0001,\n\t0x3412: 0x0001, 0x3413: 0x0001, 0x3414: 0x0001, 0x3415: 0x0001, 0x3416: 0x0001, 0x3417: 0x0001,\n\t0x3418: 0x0001, 0x3419: 0x0001, 0x341a: 0x0001, 0x341b: 0x0001, 0x341c: 0x0001, 0x341d: 0x0001,\n\t0x341e: 0x0001, 0x341f: 0x0001, 0x3420: 0x0001, 0x3421: 0x0001, 0x3422: 0x0001, 0x3423: 0x0001,\n\t0x3424: 0x0001, 0x3425: 0x0001, 0x3426: 0x0001, 0x3427: 0x0001, 0x3428: 0x0001, 0x3429: 0x0001,\n\t0x342a: 0x0001, 0x342b: 0x0001, 0x342c: 0x0001, 0x342d: 0x0001, 0x342e: 0x0001, 0x342f: 0x0001,\n\t0x3430: 0x0001, 0x3431: 0x0001, 0x3432: 0x0001, 0x3433: 0x0001, 0x3434: 0x0001, 0x3435: 0x0001,\n\t0x3436: 0x0001, 0x3437: 0x0001, 0x3438: 0x0001, 0x3439: 0x0001, 0x343a: 0x0001, 0x343b: 0x0001,\n\t0x343c: 0x0001, 0x343d: 0x0001, 0x343e: 0x0001, 0x343f: 0x0001,\n\t// Block 0xd1, offset 0x3440\n\t0x3440: 0x000d, 0x3441: 0x000d, 0x3442: 0x000d, 0x3443: 0x000d, 0x3444: 0x000d, 0x3445: 0x000d,\n\t0x3446: 0x000d, 0x3447: 0x000d, 0x3448: 0x000d, 0x3449: 0x000d, 0x344a: 0x000d, 0x344b: 0x000d,\n\t0x344c: 0x000d, 0x344d: 0x000d, 0x344e: 0x000d, 0x344f: 0x000d, 0x3450: 0x000d, 0x3451: 0x000d,\n\t0x3452: 0x000d, 0x3453: 0x000d, 0x3454: 0x000d, 0x3455: 0x000d, 0x3456: 0x000d, 0x3457: 0x000d,\n\t0x3458: 0x000d, 0x3459: 0x000d, 0x345a: 0x000d, 0x345b: 0x000d, 0x345c: 0x000d, 0x345d: 0x000d,\n\t0x345e: 0x000d, 0x345f: 0x000d, 0x3460: 0x000d, 0x3461: 0x000d, 0x3462: 0x000d, 0x3463: 0x000d,\n\t0x3464: 0x000d, 0x3465: 0x000d, 0x3466: 0x000d, 0x3467: 0x000d, 0x3468: 0x000d, 0x3469: 0x000d,\n\t0x346a: 0x000d, 0x346b: 0x000d, 0x346c: 0x000d, 0x346d: 0x000d, 0x346e: 0x000d, 0x346f: 0x000d,\n\t0x3470: 0x000a, 0x3471: 0x000a, 0x3472: 0x000d, 0x3473: 0x000d, 0x3474: 0x000d, 0x3475: 0x000d,\n\t0x3476: 0x000d, 0x3477: 0x000d, 0x3478: 0x000d, 0x3479: 0x000d, 0x347a: 0x000d, 0x347b: 0x000d,\n\t0x347c: 0x000d, 0x347d: 0x000d, 0x347e: 0x000d, 0x347f: 0x000d,\n\t// Block 0xd2, offset 0x3480\n\t0x3480: 0x000a, 0x3481: 0x000a, 0x3482: 0x000a, 0x3483: 0x000a, 0x3484: 0x000a, 0x3485: 0x000a,\n\t0x3486: 0x000a, 0x3487: 0x000a, 0x3488: 0x000a, 0x3489: 0x000a, 0x348a: 0x000a, 0x348b: 0x000a,\n\t0x348c: 0x000a, 0x348d: 0x000a, 0x348e: 0x000a, 0x348f: 0x000a, 0x3490: 0x000a, 0x3491: 0x000a,\n\t0x3492: 0x000a, 0x3493: 0x000a, 0x3494: 0x000a, 0x3495: 0x000a, 0x3496: 0x000a, 0x3497: 0x000a,\n\t0x3498: 0x000a, 0x3499: 0x000a, 0x349a: 0x000a, 0x349b: 0x000a, 0x349c: 0x000a, 0x349d: 0x000a,\n\t0x349e: 0x000a, 0x349f: 0x000a, 0x34a0: 0x000a, 0x34a1: 0x000a, 0x34a2: 0x000a, 0x34a3: 0x000a,\n\t0x34a4: 0x000a, 0x34a5: 0x000a, 0x34a6: 0x000a, 0x34a7: 0x000a, 0x34a8: 0x000a, 0x34a9: 0x000a,\n\t0x34aa: 0x000a, 0x34ab: 0x000a,\n\t0x34b0: 0x000a, 0x34b1: 0x000a, 0x34b2: 0x000a, 0x34b3: 0x000a, 0x34b4: 0x000a, 0x34b5: 0x000a,\n\t0x34b6: 0x000a, 0x34b7: 0x000a, 0x34b8: 0x000a, 0x34b9: 0x000a, 0x34ba: 0x000a, 0x34bb: 0x000a,\n\t0x34bc: 0x000a, 0x34bd: 0x000a, 0x34be: 0x000a, 0x34bf: 0x000a,\n\t// Block 0xd3, offset 0x34c0\n\t0x34c0: 0x000a, 0x34c1: 0x000a, 0x34c2: 0x000a, 0x34c3: 0x000a, 0x34c4: 0x000a, 0x34c5: 0x000a,\n\t0x34c6: 0x000a, 0x34c7: 0x000a, 0x34c8: 0x000a, 0x34c9: 0x000a, 0x34ca: 0x000a, 0x34cb: 0x000a,\n\t0x34cc: 0x000a, 0x34cd: 0x000a, 0x34ce: 0x000a, 0x34cf: 0x000a, 0x34d0: 0x000a, 0x34d1: 0x000a,\n\t0x34d2: 0x000a, 0x34d3: 0x000a,\n\t0x34e0: 0x000a, 0x34e1: 0x000a, 0x34e2: 0x000a, 0x34e3: 0x000a,\n\t0x34e4: 0x000a, 0x34e5: 0x000a, 0x34e6: 0x000a, 0x34e7: 0x000a, 0x34e8: 0x000a, 0x34e9: 0x000a,\n\t0x34ea: 0x000a, 0x34eb: 0x000a, 0x34ec: 0x000a, 0x34ed: 0x000a, 0x34ee: 0x000a,\n\t0x34f1: 0x000a, 0x34f2: 0x000a, 0x34f3: 0x000a, 0x34f4: 0x000a, 0x34f5: 0x000a,\n\t0x34f6: 0x000a, 0x34f7: 0x000a, 0x34f8: 0x000a, 0x34f9: 0x000a, 0x34fa: 0x000a, 0x34fb: 0x000a,\n\t0x34fc: 0x000a, 0x34fd: 0x000a, 0x34fe: 0x000a, 0x34ff: 0x000a,\n\t// Block 0xd4, offset 0x3500\n\t0x3501: 0x000a, 0x3502: 0x000a, 0x3503: 0x000a, 0x3504: 0x000a, 0x3505: 0x000a,\n\t0x3506: 0x000a, 0x3507: 0x000a, 0x3508: 0x000a, 0x3509: 0x000a, 0x350a: 0x000a, 0x350b: 0x000a,\n\t0x350c: 0x000a, 0x350d: 0x000a, 0x350e: 0x000a, 0x350f: 0x000a, 0x3511: 0x000a,\n\t0x3512: 0x000a, 0x3513: 0x000a, 0x3514: 0x000a, 0x3515: 0x000a, 0x3516: 0x000a, 0x3517: 0x000a,\n\t0x3518: 0x000a, 0x3519: 0x000a, 0x351a: 0x000a, 0x351b: 0x000a, 0x351c: 0x000a, 0x351d: 0x000a,\n\t0x351e: 0x000a, 0x351f: 0x000a, 0x3520: 0x000a, 0x3521: 0x000a, 0x3522: 0x000a, 0x3523: 0x000a,\n\t0x3524: 0x000a, 0x3525: 0x000a, 0x3526: 0x000a, 0x3527: 0x000a, 0x3528: 0x000a, 0x3529: 0x000a,\n\t0x352a: 0x000a, 0x352b: 0x000a, 0x352c: 0x000a, 0x352d: 0x000a, 0x352e: 0x000a, 0x352f: 0x000a,\n\t0x3530: 0x000a, 0x3531: 0x000a, 0x3532: 0x000a, 0x3533: 0x000a, 0x3534: 0x000a, 0x3535: 0x000a,\n\t// Block 0xd5, offset 0x3540\n\t0x3540: 0x0002, 0x3541: 0x0002, 0x3542: 0x0002, 0x3543: 0x0002, 0x3544: 0x0002, 0x3545: 0x0002,\n\t0x3546: 0x0002, 0x3547: 0x0002, 0x3548: 0x0002, 0x3549: 0x0002, 0x354a: 0x0002, 0x354b: 0x000a,\n\t0x354c: 0x000a,\n\t// Block 0xd6, offset 0x3580\n\t0x35aa: 0x000a, 0x35ab: 0x000a,\n\t// Block 0xd7, offset 0x35c0\n\t0x35e0: 0x000a, 0x35e1: 0x000a, 0x35e2: 0x000a, 0x35e3: 0x000a,\n\t0x35e4: 0x000a, 0x35e5: 0x000a,\n\t// Block 0xd8, offset 0x3600\n\t0x3600: 0x000a, 0x3601: 0x000a, 0x3602: 0x000a, 0x3603: 0x000a, 0x3604: 0x000a, 0x3605: 0x000a,\n\t0x3606: 0x000a, 0x3607: 0x000a, 0x3608: 0x000a, 0x3609: 0x000a, 0x360a: 0x000a, 0x360b: 0x000a,\n\t0x360c: 0x000a, 0x360d: 0x000a, 0x360e: 0x000a, 0x360f: 0x000a, 0x3610: 0x000a, 0x3611: 0x000a,\n\t0x3612: 0x000a, 0x3613: 0x000a, 0x3614: 0x000a,\n\t0x3620: 0x000a, 0x3621: 0x000a, 0x3622: 0x000a, 0x3623: 0x000a,\n\t0x3624: 0x000a, 0x3625: 0x000a, 0x3626: 0x000a, 0x3627: 0x000a, 0x3628: 0x000a, 0x3629: 0x000a,\n\t0x362a: 0x000a, 0x362b: 0x000a, 0x362c: 0x000a,\n\t0x3630: 0x000a, 0x3631: 0x000a, 0x3632: 0x000a, 0x3633: 0x000a, 0x3634: 0x000a, 0x3635: 0x000a,\n\t0x3636: 0x000a, 0x3637: 0x000a, 0x3638: 0x000a,\n\t// Block 0xd9, offset 0x3640\n\t0x3640: 0x000a, 0x3641: 0x000a, 0x3642: 0x000a, 0x3643: 0x000a, 0x3644: 0x000a, 0x3645: 0x000a,\n\t0x3646: 0x000a, 0x3647: 0x000a, 0x3648: 0x000a, 0x3649: 0x000a, 0x364a: 0x000a, 0x364b: 0x000a,\n\t0x364c: 0x000a, 0x364d: 0x000a, 0x364e: 0x000a, 0x364f: 0x000a, 0x3650: 0x000a, 0x3651: 0x000a,\n\t0x3652: 0x000a, 0x3653: 0x000a, 0x3654: 0x000a,\n\t// Block 0xda, offset 0x3680\n\t0x3680: 0x000a, 0x3681: 0x000a, 0x3682: 0x000a, 0x3683: 0x000a, 0x3684: 0x000a, 0x3685: 0x000a,\n\t0x3686: 0x000a, 0x3687: 0x000a, 0x3688: 0x000a, 0x3689: 0x000a, 0x368a: 0x000a, 0x368b: 0x000a,\n\t0x3690: 0x000a, 0x3691: 0x000a,\n\t0x3692: 0x000a, 0x3693: 0x000a, 0x3694: 0x000a, 0x3695: 0x000a, 0x3696: 0x000a, 0x3697: 0x000a,\n\t0x3698: 0x000a, 0x3699: 0x000a, 0x369a: 0x000a, 0x369b: 0x000a, 0x369c: 0x000a, 0x369d: 0x000a,\n\t0x369e: 0x000a, 0x369f: 0x000a, 0x36a0: 0x000a, 0x36a1: 0x000a, 0x36a2: 0x000a, 0x36a3: 0x000a,\n\t0x36a4: 0x000a, 0x36a5: 0x000a, 0x36a6: 0x000a, 0x36a7: 0x000a, 0x36a8: 0x000a, 0x36a9: 0x000a,\n\t0x36aa: 0x000a, 0x36ab: 0x000a, 0x36ac: 0x000a, 0x36ad: 0x000a, 0x36ae: 0x000a, 0x36af: 0x000a,\n\t0x36b0: 0x000a, 0x36b1: 0x000a, 0x36b2: 0x000a, 0x36b3: 0x000a, 0x36b4: 0x000a, 0x36b5: 0x000a,\n\t0x36b6: 0x000a, 0x36b7: 0x000a, 0x36b8: 0x000a, 0x36b9: 0x000a, 0x36ba: 0x000a, 0x36bb: 0x000a,\n\t0x36bc: 0x000a, 0x36bd: 0x000a, 0x36be: 0x000a, 0x36bf: 0x000a,\n\t// Block 0xdb, offset 0x36c0\n\t0x36c0: 0x000a, 0x36c1: 0x000a, 0x36c2: 0x000a, 0x36c3: 0x000a, 0x36c4: 0x000a, 0x36c5: 0x000a,\n\t0x36c6: 0x000a, 0x36c7: 0x000a,\n\t0x36d0: 0x000a, 0x36d1: 0x000a,\n\t0x36d2: 0x000a, 0x36d3: 0x000a, 0x36d4: 0x000a, 0x36d5: 0x000a, 0x36d6: 0x000a, 0x36d7: 0x000a,\n\t0x36d8: 0x000a, 0x36d9: 0x000a,\n\t0x36e0: 0x000a, 0x36e1: 0x000a, 0x36e2: 0x000a, 0x36e3: 0x000a,\n\t0x36e4: 0x000a, 0x36e5: 0x000a, 0x36e6: 0x000a, 0x36e7: 0x000a, 0x36e8: 0x000a, 0x36e9: 0x000a,\n\t0x36ea: 0x000a, 0x36eb: 0x000a, 0x36ec: 0x000a, 0x36ed: 0x000a, 0x36ee: 0x000a, 0x36ef: 0x000a,\n\t0x36f0: 0x000a, 0x36f1: 0x000a, 0x36f2: 0x000a, 0x36f3: 0x000a, 0x36f4: 0x000a, 0x36f5: 0x000a,\n\t0x36f6: 0x000a, 0x36f7: 0x000a, 0x36f8: 0x000a, 0x36f9: 0x000a, 0x36fa: 0x000a, 0x36fb: 0x000a,\n\t0x36fc: 0x000a, 0x36fd: 0x000a, 0x36fe: 0x000a, 0x36ff: 0x000a,\n\t// Block 0xdc, offset 0x3700\n\t0x3700: 0x000a, 0x3701: 0x000a, 0x3702: 0x000a, 0x3703: 0x000a, 0x3704: 0x000a, 0x3705: 0x000a,\n\t0x3706: 0x000a, 0x3707: 0x000a,\n\t0x3710: 0x000a, 0x3711: 0x000a,\n\t0x3712: 0x000a, 0x3713: 0x000a, 0x3714: 0x000a, 0x3715: 0x000a, 0x3716: 0x000a, 0x3717: 0x000a,\n\t0x3718: 0x000a, 0x3719: 0x000a, 0x371a: 0x000a, 0x371b: 0x000a, 0x371c: 0x000a, 0x371d: 0x000a,\n\t0x371e: 0x000a, 0x371f: 0x000a, 0x3720: 0x000a, 0x3721: 0x000a, 0x3722: 0x000a, 0x3723: 0x000a,\n\t0x3724: 0x000a, 0x3725: 0x000a, 0x3726: 0x000a, 0x3727: 0x000a, 0x3728: 0x000a, 0x3729: 0x000a,\n\t0x372a: 0x000a, 0x372b: 0x000a, 0x372c: 0x000a, 0x372d: 0x000a,\n\t// Block 0xdd, offset 0x3740\n\t0x3740: 0x000a, 0x3741: 0x000a, 0x3742: 0x000a, 0x3743: 0x000a, 0x3744: 0x000a, 0x3745: 0x000a,\n\t0x3746: 0x000a, 0x3747: 0x000a, 0x3748: 0x000a, 0x3749: 0x000a, 0x374a: 0x000a, 0x374b: 0x000a,\n\t0x3750: 0x000a, 0x3751: 0x000a,\n\t0x3752: 0x000a, 0x3753: 0x000a, 0x3754: 0x000a, 0x3755: 0x000a, 0x3756: 0x000a, 0x3757: 0x000a,\n\t0x3758: 0x000a, 0x3759: 0x000a, 0x375a: 0x000a, 0x375b: 0x000a, 0x375c: 0x000a, 0x375d: 0x000a,\n\t0x375e: 0x000a, 0x375f: 0x000a, 0x3760: 0x000a, 0x3761: 0x000a, 0x3762: 0x000a, 0x3763: 0x000a,\n\t0x3764: 0x000a, 0x3765: 0x000a, 0x3766: 0x000a, 0x3767: 0x000a, 0x3768: 0x000a, 0x3769: 0x000a,\n\t0x376a: 0x000a, 0x376b: 0x000a, 0x376c: 0x000a, 0x376d: 0x000a, 0x376e: 0x000a, 0x376f: 0x000a,\n\t0x3770: 0x000a, 0x3771: 0x000a, 0x3772: 0x000a, 0x3773: 0x000a, 0x3774: 0x000a, 0x3775: 0x000a,\n\t0x3776: 0x000a, 0x3777: 0x000a, 0x3778: 0x000a, 0x3779: 0x000a, 0x377a: 0x000a, 0x377b: 0x000a,\n\t0x377c: 0x000a, 0x377d: 0x000a, 0x377e: 0x000a,\n\t// Block 0xde, offset 0x3780\n\t0x3780: 0x000a, 0x3781: 0x000a, 0x3782: 0x000a, 0x3783: 0x000a, 0x3784: 0x000a, 0x3785: 0x000a,\n\t0x3786: 0x000a, 0x3787: 0x000a, 0x3788: 0x000a, 0x3789: 0x000a, 0x378a: 0x000a, 0x378b: 0x000a,\n\t0x378c: 0x000a, 0x3790: 0x000a, 0x3791: 0x000a,\n\t0x3792: 0x000a, 0x3793: 0x000a, 0x3794: 0x000a, 0x3795: 0x000a, 0x3796: 0x000a, 0x3797: 0x000a,\n\t0x3798: 0x000a, 0x3799: 0x000a, 0x379a: 0x000a, 0x379b: 0x000a, 0x379c: 0x000a, 0x379d: 0x000a,\n\t0x379e: 0x000a, 0x379f: 0x000a, 0x37a0: 0x000a, 0x37a1: 0x000a, 0x37a2: 0x000a, 0x37a3: 0x000a,\n\t0x37a4: 0x000a, 0x37a5: 0x000a, 0x37a6: 0x000a, 0x37a7: 0x000a, 0x37a8: 0x000a, 0x37a9: 0x000a,\n\t0x37aa: 0x000a, 0x37ab: 0x000a,\n\t// Block 0xdf, offset 0x37c0\n\t0x37c0: 0x000a, 0x37c1: 0x000a, 0x37c2: 0x000a, 0x37c3: 0x000a, 0x37c4: 0x000a, 0x37c5: 0x000a,\n\t0x37c6: 0x000a, 0x37c7: 0x000a, 0x37c8: 0x000a, 0x37c9: 0x000a, 0x37ca: 0x000a, 0x37cb: 0x000a,\n\t0x37cc: 0x000a, 0x37cd: 0x000a, 0x37ce: 0x000a, 0x37cf: 0x000a, 0x37d0: 0x000a, 0x37d1: 0x000a,\n\t0x37d2: 0x000a, 0x37d3: 0x000a, 0x37d4: 0x000a, 0x37d5: 0x000a, 0x37d6: 0x000a, 0x37d7: 0x000a,\n\t// Block 0xe0, offset 0x3800\n\t0x3800: 0x000a,\n\t0x3810: 0x000a, 0x3811: 0x000a,\n\t0x3812: 0x000a, 0x3813: 0x000a, 0x3814: 0x000a, 0x3815: 0x000a, 0x3816: 0x000a, 0x3817: 0x000a,\n\t0x3818: 0x000a, 0x3819: 0x000a, 0x381a: 0x000a, 0x381b: 0x000a, 0x381c: 0x000a, 0x381d: 0x000a,\n\t0x381e: 0x000a, 0x381f: 0x000a, 0x3820: 0x000a, 0x3821: 0x000a, 0x3822: 0x000a, 0x3823: 0x000a,\n\t0x3824: 0x000a, 0x3825: 0x000a, 0x3826: 0x000a,\n\t// Block 0xe1, offset 0x3840\n\t0x387e: 0x000b, 0x387f: 0x000b,\n\t// Block 0xe2, offset 0x3880\n\t0x3880: 0x000b, 0x3881: 0x000b, 0x3882: 0x000b, 0x3883: 0x000b, 0x3884: 0x000b, 0x3885: 0x000b,\n\t0x3886: 0x000b, 0x3887: 0x000b, 0x3888: 0x000b, 0x3889: 0x000b, 0x388a: 0x000b, 0x388b: 0x000b,\n\t0x388c: 0x000b, 0x388d: 0x000b, 0x388e: 0x000b, 0x388f: 0x000b, 0x3890: 0x000b, 0x3891: 0x000b,\n\t0x3892: 0x000b, 0x3893: 0x000b, 0x3894: 0x000b, 0x3895: 0x000b, 0x3896: 0x000b, 0x3897: 0x000b,\n\t0x3898: 0x000b, 0x3899: 0x000b, 0x389a: 0x000b, 0x389b: 0x000b, 0x389c: 0x000b, 0x389d: 0x000b,\n\t0x389e: 0x000b, 0x389f: 0x000b, 0x38a0: 0x000b, 0x38a1: 0x000b, 0x38a2: 0x000b, 0x38a3: 0x000b,\n\t0x38a4: 0x000b, 0x38a5: 0x000b, 0x38a6: 0x000b, 0x38a7: 0x000b, 0x38a8: 0x000b, 0x38a9: 0x000b,\n\t0x38aa: 0x000b, 0x38ab: 0x000b, 0x38ac: 0x000b, 0x38ad: 0x000b, 0x38ae: 0x000b, 0x38af: 0x000b,\n\t0x38b0: 0x000b, 0x38b1: 0x000b, 0x38b2: 0x000b, 0x38b3: 0x000b, 0x38b4: 0x000b, 0x38b5: 0x000b,\n\t0x38b6: 0x000b, 0x38b7: 0x000b, 0x38b8: 0x000b, 0x38b9: 0x000b, 0x38ba: 0x000b, 0x38bb: 0x000b,\n\t0x38bc: 0x000b, 0x38bd: 0x000b, 0x38be: 0x000b, 0x38bf: 0x000b,\n\t// Block 0xe3, offset 0x38c0\n\t0x38c0: 0x000c, 0x38c1: 0x000c, 0x38c2: 0x000c, 0x38c3: 0x000c, 0x38c4: 0x000c, 0x38c5: 0x000c,\n\t0x38c6: 0x000c, 0x38c7: 0x000c, 0x38c8: 0x000c, 0x38c9: 0x000c, 0x38ca: 0x000c, 0x38cb: 0x000c,\n\t0x38cc: 0x000c, 0x38cd: 0x000c, 0x38ce: 0x000c, 0x38cf: 0x000c, 0x38d0: 0x000c, 0x38d1: 0x000c,\n\t0x38d2: 0x000c, 0x38d3: 0x000c, 0x38d4: 0x000c, 0x38d5: 0x000c, 0x38d6: 0x000c, 0x38d7: 0x000c,\n\t0x38d8: 0x000c, 0x38d9: 0x000c, 0x38da: 0x000c, 0x38db: 0x000c, 0x38dc: 0x000c, 0x38dd: 0x000c,\n\t0x38de: 0x000c, 0x38df: 0x000c, 0x38e0: 0x000c, 0x38e1: 0x000c, 0x38e2: 0x000c, 0x38e3: 0x000c,\n\t0x38e4: 0x000c, 0x38e5: 0x000c, 0x38e6: 0x000c, 0x38e7: 0x000c, 0x38e8: 0x000c, 0x38e9: 0x000c,\n\t0x38ea: 0x000c, 0x38eb: 0x000c, 0x38ec: 0x000c, 0x38ed: 0x000c, 0x38ee: 0x000c, 0x38ef: 0x000c,\n\t0x38f0: 0x000b, 0x38f1: 0x000b, 0x38f2: 0x000b, 0x38f3: 0x000b, 0x38f4: 0x000b, 0x38f5: 0x000b,\n\t0x38f6: 0x000b, 0x38f7: 0x000b, 0x38f8: 0x000b, 0x38f9: 0x000b, 0x38fa: 0x000b, 0x38fb: 0x000b,\n\t0x38fc: 0x000b, 0x38fd: 0x000b, 0x38fe: 0x000b, 0x38ff: 0x000b,\n}\n\n// bidiIndex: 24 blocks, 1536 entries, 1536 bytes\n// Block 0 is the zero block.\nvar bidiIndex = [1536]uint8{\n\t// Block 0x0, offset 0x0\n\t// Block 0x1, offset 0x40\n\t// Block 0x2, offset 0x80\n\t// Block 0x3, offset 0xc0\n\t0xc2: 0x01, 0xc3: 0x02,\n\t0xca: 0x03, 0xcb: 0x04, 0xcc: 0x05, 0xcd: 0x06, 0xce: 0x07, 0xcf: 0x08,\n\t0xd2: 0x09, 0xd6: 0x0a, 0xd7: 0x0b,\n\t0xd8: 0x0c, 0xd9: 0x0d, 0xda: 0x0e, 0xdb: 0x0f, 0xdc: 0x10, 0xdd: 0x11, 0xde: 0x12, 0xdf: 0x13,\n\t0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, 0xe4: 0x06,\n\t0xea: 0x07, 0xef: 0x08,\n\t0xf0: 0x11, 0xf1: 0x12, 0xf2: 0x12, 0xf3: 0x14, 0xf4: 0x15,\n\t// Block 0x4, offset 0x100\n\t0x120: 0x14, 0x121: 0x15, 0x122: 0x16, 0x123: 0x17, 0x124: 0x18, 0x125: 0x19, 0x126: 0x1a, 0x127: 0x1b,\n\t0x128: 0x1c, 0x129: 0x1d, 0x12a: 0x1c, 0x12b: 0x1e, 0x12c: 0x1f, 0x12d: 0x20, 0x12e: 0x21, 0x12f: 0x22,\n\t0x130: 0x23, 0x131: 0x24, 0x132: 0x1a, 0x133: 0x25, 0x134: 0x26, 0x135: 0x27, 0x137: 0x28,\n\t0x138: 0x29, 0x139: 0x2a, 0x13a: 0x2b, 0x13b: 0x2c, 0x13c: 0x2d, 0x13d: 0x2e, 0x13e: 0x2f, 0x13f: 0x30,\n\t// Block 0x5, offset 0x140\n\t0x140: 0x31, 0x141: 0x32, 0x142: 0x33,\n\t0x14d: 0x34, 0x14e: 0x35,\n\t0x150: 0x36,\n\t0x15a: 0x37, 0x15c: 0x38, 0x15d: 0x39, 0x15e: 0x3a, 0x15f: 0x3b,\n\t0x160: 0x3c, 0x162: 0x3d, 0x164: 0x3e, 0x165: 0x3f, 0x167: 0x40,\n\t0x168: 0x41, 0x169: 0x42, 0x16a: 0x43, 0x16c: 0x44, 0x16d: 0x45, 0x16e: 0x46, 0x16f: 0x47,\n\t0x170: 0x48, 0x173: 0x49, 0x177: 0x4a,\n\t0x17e: 0x4b, 0x17f: 0x4c,\n\t// Block 0x6, offset 0x180\n\t0x180: 0x4d, 0x181: 0x4e, 0x182: 0x4f, 0x183: 0x50, 0x184: 0x51, 0x185: 0x52, 0x186: 0x53, 0x187: 0x54,\n\t0x188: 0x55, 0x189: 0x54, 0x18a: 0x54, 0x18b: 0x54, 0x18c: 0x56, 0x18d: 0x57, 0x18e: 0x58, 0x18f: 0x54,\n\t0x190: 0x59, 0x191: 0x5a, 0x192: 0x5b, 0x193: 0x5c, 0x194: 0x54, 0x195: 0x54, 0x196: 0x54, 0x197: 0x54,\n\t0x198: 0x54, 0x199: 0x54, 0x19a: 0x5d, 0x19b: 0x54, 0x19c: 0x54, 0x19d: 0x5e, 0x19e: 0x54, 0x19f: 0x5f,\n\t0x1a4: 0x54, 0x1a5: 0x54, 0x1a6: 0x60, 0x1a7: 0x61,\n\t0x1a8: 0x54, 0x1a9: 0x54, 0x1aa: 0x54, 0x1ab: 0x54, 0x1ac: 0x54, 0x1ad: 0x62, 0x1ae: 0x63, 0x1af: 0x64,\n\t0x1b3: 0x65, 0x1b5: 0x66, 0x1b7: 0x67,\n\t0x1b8: 0x68, 0x1b9: 0x69, 0x1ba: 0x6a, 0x1bb: 0x6b, 0x1bc: 0x54, 0x1bd: 0x54, 0x1be: 0x54, 0x1bf: 0x6c,\n\t// Block 0x7, offset 0x1c0\n\t0x1c0: 0x6d, 0x1c2: 0x6e, 0x1c3: 0x6f, 0x1c7: 0x70,\n\t0x1c8: 0x71, 0x1c9: 0x72, 0x1ca: 0x73, 0x1cb: 0x74, 0x1cd: 0x75, 0x1cf: 0x76,\n\t// Block 0x8, offset 0x200\n\t0x237: 0x54,\n\t// Block 0x9, offset 0x240\n\t0x252: 0x77, 0x253: 0x78,\n\t0x258: 0x79, 0x259: 0x7a, 0x25a: 0x7b, 0x25b: 0x7c, 0x25c: 0x7d, 0x25e: 0x7e,\n\t0x260: 0x7f, 0x261: 0x80, 0x263: 0x81, 0x264: 0x82, 0x265: 0x83, 0x266: 0x84, 0x267: 0x85,\n\t0x268: 0x86, 0x269: 0x87, 0x26a: 0x88, 0x26b: 0x89, 0x26f: 0x8a,\n\t// Block 0xa, offset 0x280\n\t0x2ac: 0x8b, 0x2ad: 0x8c, 0x2ae: 0x0e, 0x2af: 0x0e,\n\t0x2b0: 0x0e, 0x2b1: 0x0e, 0x2b2: 0x0e, 0x2b3: 0x0e, 0x2b4: 0x8d, 0x2b5: 0x0e, 0x2b6: 0x0e, 0x2b7: 0x8e,\n\t0x2b8: 0x8f, 0x2b9: 0x90, 0x2ba: 0x0e, 0x2bb: 0x91, 0x2bc: 0x92, 0x2bd: 0x93, 0x2bf: 0x94,\n\t// Block 0xb, offset 0x2c0\n\t0x2c4: 0x95, 0x2c5: 0x54, 0x2c6: 0x96, 0x2c7: 0x97,\n\t0x2cb: 0x98, 0x2cd: 0x99,\n\t0x2e0: 0x9a, 0x2e1: 0x9a, 0x2e2: 0x9a, 0x2e3: 0x9a, 0x2e4: 0x9b, 0x2e5: 0x9a, 0x2e6: 0x9a, 0x2e7: 0x9a,\n\t0x2e8: 0x9c, 0x2e9: 0x9a, 0x2ea: 0x9a, 0x2eb: 0x9d, 0x2ec: 0x9e, 0x2ed: 0x9a, 0x2ee: 0x9a, 0x2ef: 0x9a,\n\t0x2f0: 0x9a, 0x2f1: 0x9a, 0x2f2: 0x9a, 0x2f3: 0x9a, 0x2f4: 0x9a, 0x2f5: 0x9a, 0x2f6: 0x9a, 0x2f7: 0x9a,\n\t0x2f8: 0x9a, 0x2f9: 0x9f, 0x2fa: 0x9a, 0x2fb: 0x9a, 0x2fc: 0x9a, 0x2fd: 0x9a, 0x2fe: 0x9a, 0x2ff: 0x9a,\n\t// Block 0xc, offset 0x300\n\t0x300: 0xa0, 0x301: 0xa1, 0x302: 0xa2, 0x304: 0xa3, 0x305: 0xa4, 0x306: 0xa5, 0x307: 0xa6,\n\t0x308: 0xa7, 0x30b: 0xa8, 0x30c: 0xa9, 0x30d: 0xaa,\n\t0x310: 0xab, 0x311: 0xac, 0x312: 0xad, 0x313: 0xae, 0x316: 0xaf, 0x317: 0xb0,\n\t0x318: 0xb1, 0x319: 0xb2, 0x31a: 0xb3, 0x31c: 0xb4,\n\t0x328: 0xb5, 0x329: 0xb6, 0x32a: 0xb7,\n\t0x330: 0xb8, 0x332: 0xb9, 0x334: 0xba, 0x335: 0xbb,\n\t// Block 0xd, offset 0x340\n\t0x36b: 0xbc, 0x36c: 0xbd,\n\t0x37e: 0xbe,\n\t// Block 0xe, offset 0x380\n\t0x3b2: 0xbf,\n\t// Block 0xf, offset 0x3c0\n\t0x3c5: 0xc0, 0x3c6: 0xc1,\n\t0x3c8: 0x54, 0x3c9: 0xc2, 0x3cc: 0x54, 0x3cd: 0xc3,\n\t0x3db: 0xc4, 0x3dc: 0xc5, 0x3dd: 0xc6, 0x3de: 0xc7, 0x3df: 0xc8,\n\t0x3e8: 0xc9, 0x3e9: 0xca, 0x3ea: 0xcb,\n\t// Block 0x10, offset 0x400\n\t0x400: 0xcc,\n\t0x420: 0x9a, 0x421: 0x9a, 0x422: 0x9a, 0x423: 0xcd, 0x424: 0x9a, 0x425: 0xce, 0x426: 0x9a, 0x427: 0x9a,\n\t0x428: 0x9a, 0x429: 0x9a, 0x42a: 0x9a, 0x42b: 0x9a, 0x42c: 0x9a, 0x42d: 0x9a, 0x42e: 0x9a, 0x42f: 0x9a,\n\t0x430: 0x9a, 0x431: 0x9a, 0x432: 0x9a, 0x433: 0x9a, 0x434: 0x9a, 0x435: 0x9a, 0x436: 0x9a, 0x437: 0x9a,\n\t0x438: 0x0e, 0x439: 0x0e, 0x43a: 0x0e, 0x43b: 0xcf, 0x43c: 0x9a, 0x43d: 0x9a, 0x43e: 0x9a, 0x43f: 0x9a,\n\t// Block 0x11, offset 0x440\n\t0x440: 0xd0, 0x441: 0x54, 0x442: 0xd1, 0x443: 0xd2, 0x444: 0xd3, 0x445: 0xd4,\n\t0x449: 0xd5, 0x44c: 0x54, 0x44d: 0x54, 0x44e: 0x54, 0x44f: 0x54,\n\t0x450: 0x54, 0x451: 0x54, 0x452: 0x54, 0x453: 0x54, 0x454: 0x54, 0x455: 0x54, 0x456: 0x54, 0x457: 0x54,\n\t0x458: 0x54, 0x459: 0x54, 0x45a: 0x54, 0x45b: 0xd6, 0x45c: 0x54, 0x45d: 0x6b, 0x45e: 0x54, 0x45f: 0xd7,\n\t0x460: 0xd8, 0x461: 0xd9, 0x462: 0xda, 0x464: 0xdb, 0x465: 0xdc, 0x466: 0xdd, 0x467: 0xde,\n\t0x47f: 0xdf,\n\t// Block 0x12, offset 0x480\n\t0x4bf: 0xdf,\n\t// Block 0x13, offset 0x4c0\n\t0x4d0: 0x09, 0x4d1: 0x0a, 0x4d6: 0x0b,\n\t0x4db: 0x0c, 0x4dd: 0x0d, 0x4de: 0x0e, 0x4df: 0x0f,\n\t0x4ef: 0x10,\n\t0x4ff: 0x10,\n\t// Block 0x14, offset 0x500\n\t0x50f: 0x10,\n\t0x51f: 0x10,\n\t0x52f: 0x10,\n\t0x53f: 0x10,\n\t// Block 0x15, offset 0x540\n\t0x540: 0xe0, 0x541: 0xe0, 0x542: 0xe0, 0x543: 0xe0, 0x544: 0x05, 0x545: 0x05, 0x546: 0x05, 0x547: 0xe1,\n\t0x548: 0xe0, 0x549: 0xe0, 0x54a: 0xe0, 0x54b: 0xe0, 0x54c: 0xe0, 0x54d: 0xe0, 0x54e: 0xe0, 0x54f: 0xe0,\n\t0x550: 0xe0, 0x551: 0xe0, 0x552: 0xe0, 0x553: 0xe0, 0x554: 0xe0, 0x555: 0xe0, 0x556: 0xe0, 0x557: 0xe0,\n\t0x558: 0xe0, 0x559: 0xe0, 0x55a: 0xe0, 0x55b: 0xe0, 0x55c: 0xe0, 0x55d: 0xe0, 0x55e: 0xe0, 0x55f: 0xe0,\n\t0x560: 0xe0, 0x561: 0xe0, 0x562: 0xe0, 0x563: 0xe0, 0x564: 0xe0, 0x565: 0xe0, 0x566: 0xe0, 0x567: 0xe0,\n\t0x568: 0xe0, 0x569: 0xe0, 0x56a: 0xe0, 0x56b: 0xe0, 0x56c: 0xe0, 0x56d: 0xe0, 0x56e: 0xe0, 0x56f: 0xe0,\n\t0x570: 0xe0, 0x571: 0xe0, 0x572: 0xe0, 0x573: 0xe0, 0x574: 0xe0, 0x575: 0xe0, 0x576: 0xe0, 0x577: 0xe0,\n\t0x578: 0xe0, 0x579: 0xe0, 0x57a: 0xe0, 0x57b: 0xe0, 0x57c: 0xe0, 0x57d: 0xe0, 0x57e: 0xe0, 0x57f: 0xe0,\n\t// Block 0x16, offset 0x580\n\t0x58f: 0x10,\n\t0x59f: 0x10,\n\t0x5a0: 0x13,\n\t0x5af: 0x10,\n\t0x5bf: 0x10,\n\t// Block 0x17, offset 0x5c0\n\t0x5cf: 0x10,\n}\n\n// Total table size 16184 bytes (15KiB); checksum: F50EF68C\n"
  },
  {
    "path": "vendor/golang.org/x/text/unicode/bidi/tables11.0.0.go",
    "content": "// Code generated by running \"go generate\" in golang.org/x/text. DO NOT EDIT.\n\n// +build go1.13\n\npackage bidi\n\n// UnicodeVersion is the Unicode version from which the tables in this package are derived.\nconst UnicodeVersion = \"11.0.0\"\n\n// xorMasks contains masks to be xor-ed with brackets to get the reverse\n// version.\nvar xorMasks = []int32{ // 8 elements\n\t0, 1, 6, 7, 3, 15, 29, 63,\n} // Size: 56 bytes\n\n// lookup returns the trie value for the first UTF-8 encoding in s and\n// the width in bytes of this encoding. The size will be 0 if s does not\n// hold enough bytes to complete the encoding. len(s) must be greater than 0.\nfunc (t *bidiTrie) lookup(s []byte) (v uint8, sz int) {\n\tc0 := s[0]\n\tswitch {\n\tcase c0 < 0x80: // is ASCII\n\t\treturn bidiValues[c0], 1\n\tcase c0 < 0xC2:\n\t\treturn 0, 1 // Illegal UTF-8: not a starter, not ASCII.\n\tcase c0 < 0xE0: // 2-byte UTF-8\n\t\tif len(s) < 2 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := bidiIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c1), 2\n\tcase c0 < 0xF0: // 3-byte UTF-8\n\t\tif len(s) < 3 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := bidiIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to := uint32(i)<<6 + uint32(c1)\n\t\ti = bidiIndex[o]\n\t\tc2 := s[2]\n\t\tif c2 < 0x80 || 0xC0 <= c2 {\n\t\t\treturn 0, 2 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c2), 3\n\tcase c0 < 0xF8: // 4-byte UTF-8\n\t\tif len(s) < 4 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := bidiIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to := uint32(i)<<6 + uint32(c1)\n\t\ti = bidiIndex[o]\n\t\tc2 := s[2]\n\t\tif c2 < 0x80 || 0xC0 <= c2 {\n\t\t\treturn 0, 2 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to = uint32(i)<<6 + uint32(c2)\n\t\ti = bidiIndex[o]\n\t\tc3 := s[3]\n\t\tif c3 < 0x80 || 0xC0 <= c3 {\n\t\t\treturn 0, 3 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c3), 4\n\t}\n\t// Illegal rune\n\treturn 0, 1\n}\n\n// lookupUnsafe returns the trie value for the first UTF-8 encoding in s.\n// s must start with a full and valid UTF-8 encoded rune.\nfunc (t *bidiTrie) lookupUnsafe(s []byte) uint8 {\n\tc0 := s[0]\n\tif c0 < 0x80 { // is ASCII\n\t\treturn bidiValues[c0]\n\t}\n\ti := bidiIndex[c0]\n\tif c0 < 0xE0 { // 2-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[1])\n\t}\n\ti = bidiIndex[uint32(i)<<6+uint32(s[1])]\n\tif c0 < 0xF0 { // 3-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[2])\n\t}\n\ti = bidiIndex[uint32(i)<<6+uint32(s[2])]\n\tif c0 < 0xF8 { // 4-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[3])\n\t}\n\treturn 0\n}\n\n// lookupString returns the trie value for the first UTF-8 encoding in s and\n// the width in bytes of this encoding. The size will be 0 if s does not\n// hold enough bytes to complete the encoding. len(s) must be greater than 0.\nfunc (t *bidiTrie) lookupString(s string) (v uint8, sz int) {\n\tc0 := s[0]\n\tswitch {\n\tcase c0 < 0x80: // is ASCII\n\t\treturn bidiValues[c0], 1\n\tcase c0 < 0xC2:\n\t\treturn 0, 1 // Illegal UTF-8: not a starter, not ASCII.\n\tcase c0 < 0xE0: // 2-byte UTF-8\n\t\tif len(s) < 2 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := bidiIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c1), 2\n\tcase c0 < 0xF0: // 3-byte UTF-8\n\t\tif len(s) < 3 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := bidiIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to := uint32(i)<<6 + uint32(c1)\n\t\ti = bidiIndex[o]\n\t\tc2 := s[2]\n\t\tif c2 < 0x80 || 0xC0 <= c2 {\n\t\t\treturn 0, 2 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c2), 3\n\tcase c0 < 0xF8: // 4-byte UTF-8\n\t\tif len(s) < 4 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := bidiIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to := uint32(i)<<6 + uint32(c1)\n\t\ti = bidiIndex[o]\n\t\tc2 := s[2]\n\t\tif c2 < 0x80 || 0xC0 <= c2 {\n\t\t\treturn 0, 2 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to = uint32(i)<<6 + uint32(c2)\n\t\ti = bidiIndex[o]\n\t\tc3 := s[3]\n\t\tif c3 < 0x80 || 0xC0 <= c3 {\n\t\t\treturn 0, 3 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c3), 4\n\t}\n\t// Illegal rune\n\treturn 0, 1\n}\n\n// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s.\n// s must start with a full and valid UTF-8 encoded rune.\nfunc (t *bidiTrie) lookupStringUnsafe(s string) uint8 {\n\tc0 := s[0]\n\tif c0 < 0x80 { // is ASCII\n\t\treturn bidiValues[c0]\n\t}\n\ti := bidiIndex[c0]\n\tif c0 < 0xE0 { // 2-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[1])\n\t}\n\ti = bidiIndex[uint32(i)<<6+uint32(s[1])]\n\tif c0 < 0xF0 { // 3-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[2])\n\t}\n\ti = bidiIndex[uint32(i)<<6+uint32(s[2])]\n\tif c0 < 0xF8 { // 4-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[3])\n\t}\n\treturn 0\n}\n\n// bidiTrie. Total size: 16512 bytes (16.12 KiB). Checksum: 2a9cf1317f2ffaa.\ntype bidiTrie struct{}\n\nfunc newBidiTrie(i int) *bidiTrie {\n\treturn &bidiTrie{}\n}\n\n// lookupValue determines the type of block n and looks up the value for b.\nfunc (t *bidiTrie) lookupValue(n uint32, b byte) uint8 {\n\tswitch {\n\tdefault:\n\t\treturn uint8(bidiValues[n<<6+uint32(b)])\n\t}\n}\n\n// bidiValues: 234 blocks, 14976 entries, 14976 bytes\n// The third block is the zero block.\nvar bidiValues = [14976]uint8{\n\t// Block 0x0, offset 0x0\n\t0x00: 0x000b, 0x01: 0x000b, 0x02: 0x000b, 0x03: 0x000b, 0x04: 0x000b, 0x05: 0x000b,\n\t0x06: 0x000b, 0x07: 0x000b, 0x08: 0x000b, 0x09: 0x0008, 0x0a: 0x0007, 0x0b: 0x0008,\n\t0x0c: 0x0009, 0x0d: 0x0007, 0x0e: 0x000b, 0x0f: 0x000b, 0x10: 0x000b, 0x11: 0x000b,\n\t0x12: 0x000b, 0x13: 0x000b, 0x14: 0x000b, 0x15: 0x000b, 0x16: 0x000b, 0x17: 0x000b,\n\t0x18: 0x000b, 0x19: 0x000b, 0x1a: 0x000b, 0x1b: 0x000b, 0x1c: 0x0007, 0x1d: 0x0007,\n\t0x1e: 0x0007, 0x1f: 0x0008, 0x20: 0x0009, 0x21: 0x000a, 0x22: 0x000a, 0x23: 0x0004,\n\t0x24: 0x0004, 0x25: 0x0004, 0x26: 0x000a, 0x27: 0x000a, 0x28: 0x003a, 0x29: 0x002a,\n\t0x2a: 0x000a, 0x2b: 0x0003, 0x2c: 0x0006, 0x2d: 0x0003, 0x2e: 0x0006, 0x2f: 0x0006,\n\t0x30: 0x0002, 0x31: 0x0002, 0x32: 0x0002, 0x33: 0x0002, 0x34: 0x0002, 0x35: 0x0002,\n\t0x36: 0x0002, 0x37: 0x0002, 0x38: 0x0002, 0x39: 0x0002, 0x3a: 0x0006, 0x3b: 0x000a,\n\t0x3c: 0x000a, 0x3d: 0x000a, 0x3e: 0x000a, 0x3f: 0x000a,\n\t// Block 0x1, offset 0x40\n\t0x40: 0x000a,\n\t0x5b: 0x005a, 0x5c: 0x000a, 0x5d: 0x004a,\n\t0x5e: 0x000a, 0x5f: 0x000a, 0x60: 0x000a,\n\t0x7b: 0x005a,\n\t0x7c: 0x000a, 0x7d: 0x004a, 0x7e: 0x000a, 0x7f: 0x000b,\n\t// Block 0x2, offset 0x80\n\t// Block 0x3, offset 0xc0\n\t0xc0: 0x000b, 0xc1: 0x000b, 0xc2: 0x000b, 0xc3: 0x000b, 0xc4: 0x000b, 0xc5: 0x0007,\n\t0xc6: 0x000b, 0xc7: 0x000b, 0xc8: 0x000b, 0xc9: 0x000b, 0xca: 0x000b, 0xcb: 0x000b,\n\t0xcc: 0x000b, 0xcd: 0x000b, 0xce: 0x000b, 0xcf: 0x000b, 0xd0: 0x000b, 0xd1: 0x000b,\n\t0xd2: 0x000b, 0xd3: 0x000b, 0xd4: 0x000b, 0xd5: 0x000b, 0xd6: 0x000b, 0xd7: 0x000b,\n\t0xd8: 0x000b, 0xd9: 0x000b, 0xda: 0x000b, 0xdb: 0x000b, 0xdc: 0x000b, 0xdd: 0x000b,\n\t0xde: 0x000b, 0xdf: 0x000b, 0xe0: 0x0006, 0xe1: 0x000a, 0xe2: 0x0004, 0xe3: 0x0004,\n\t0xe4: 0x0004, 0xe5: 0x0004, 0xe6: 0x000a, 0xe7: 0x000a, 0xe8: 0x000a, 0xe9: 0x000a,\n\t0xeb: 0x000a, 0xec: 0x000a, 0xed: 0x000b, 0xee: 0x000a, 0xef: 0x000a,\n\t0xf0: 0x0004, 0xf1: 0x0004, 0xf2: 0x0002, 0xf3: 0x0002, 0xf4: 0x000a,\n\t0xf6: 0x000a, 0xf7: 0x000a, 0xf8: 0x000a, 0xf9: 0x0002, 0xfb: 0x000a,\n\t0xfc: 0x000a, 0xfd: 0x000a, 0xfe: 0x000a, 0xff: 0x000a,\n\t// Block 0x4, offset 0x100\n\t0x117: 0x000a,\n\t0x137: 0x000a,\n\t// Block 0x5, offset 0x140\n\t0x179: 0x000a, 0x17a: 0x000a,\n\t// Block 0x6, offset 0x180\n\t0x182: 0x000a, 0x183: 0x000a, 0x184: 0x000a, 0x185: 0x000a,\n\t0x186: 0x000a, 0x187: 0x000a, 0x188: 0x000a, 0x189: 0x000a, 0x18a: 0x000a, 0x18b: 0x000a,\n\t0x18c: 0x000a, 0x18d: 0x000a, 0x18e: 0x000a, 0x18f: 0x000a,\n\t0x192: 0x000a, 0x193: 0x000a, 0x194: 0x000a, 0x195: 0x000a, 0x196: 0x000a, 0x197: 0x000a,\n\t0x198: 0x000a, 0x199: 0x000a, 0x19a: 0x000a, 0x19b: 0x000a, 0x19c: 0x000a, 0x19d: 0x000a,\n\t0x19e: 0x000a, 0x19f: 0x000a,\n\t0x1a5: 0x000a, 0x1a6: 0x000a, 0x1a7: 0x000a, 0x1a8: 0x000a, 0x1a9: 0x000a,\n\t0x1aa: 0x000a, 0x1ab: 0x000a, 0x1ac: 0x000a, 0x1ad: 0x000a, 0x1af: 0x000a,\n\t0x1b0: 0x000a, 0x1b1: 0x000a, 0x1b2: 0x000a, 0x1b3: 0x000a, 0x1b4: 0x000a, 0x1b5: 0x000a,\n\t0x1b6: 0x000a, 0x1b7: 0x000a, 0x1b8: 0x000a, 0x1b9: 0x000a, 0x1ba: 0x000a, 0x1bb: 0x000a,\n\t0x1bc: 0x000a, 0x1bd: 0x000a, 0x1be: 0x000a, 0x1bf: 0x000a,\n\t// Block 0x7, offset 0x1c0\n\t0x1c0: 0x000c, 0x1c1: 0x000c, 0x1c2: 0x000c, 0x1c3: 0x000c, 0x1c4: 0x000c, 0x1c5: 0x000c,\n\t0x1c6: 0x000c, 0x1c7: 0x000c, 0x1c8: 0x000c, 0x1c9: 0x000c, 0x1ca: 0x000c, 0x1cb: 0x000c,\n\t0x1cc: 0x000c, 0x1cd: 0x000c, 0x1ce: 0x000c, 0x1cf: 0x000c, 0x1d0: 0x000c, 0x1d1: 0x000c,\n\t0x1d2: 0x000c, 0x1d3: 0x000c, 0x1d4: 0x000c, 0x1d5: 0x000c, 0x1d6: 0x000c, 0x1d7: 0x000c,\n\t0x1d8: 0x000c, 0x1d9: 0x000c, 0x1da: 0x000c, 0x1db: 0x000c, 0x1dc: 0x000c, 0x1dd: 0x000c,\n\t0x1de: 0x000c, 0x1df: 0x000c, 0x1e0: 0x000c, 0x1e1: 0x000c, 0x1e2: 0x000c, 0x1e3: 0x000c,\n\t0x1e4: 0x000c, 0x1e5: 0x000c, 0x1e6: 0x000c, 0x1e7: 0x000c, 0x1e8: 0x000c, 0x1e9: 0x000c,\n\t0x1ea: 0x000c, 0x1eb: 0x000c, 0x1ec: 0x000c, 0x1ed: 0x000c, 0x1ee: 0x000c, 0x1ef: 0x000c,\n\t0x1f0: 0x000c, 0x1f1: 0x000c, 0x1f2: 0x000c, 0x1f3: 0x000c, 0x1f4: 0x000c, 0x1f5: 0x000c,\n\t0x1f6: 0x000c, 0x1f7: 0x000c, 0x1f8: 0x000c, 0x1f9: 0x000c, 0x1fa: 0x000c, 0x1fb: 0x000c,\n\t0x1fc: 0x000c, 0x1fd: 0x000c, 0x1fe: 0x000c, 0x1ff: 0x000c,\n\t// Block 0x8, offset 0x200\n\t0x200: 0x000c, 0x201: 0x000c, 0x202: 0x000c, 0x203: 0x000c, 0x204: 0x000c, 0x205: 0x000c,\n\t0x206: 0x000c, 0x207: 0x000c, 0x208: 0x000c, 0x209: 0x000c, 0x20a: 0x000c, 0x20b: 0x000c,\n\t0x20c: 0x000c, 0x20d: 0x000c, 0x20e: 0x000c, 0x20f: 0x000c, 0x210: 0x000c, 0x211: 0x000c,\n\t0x212: 0x000c, 0x213: 0x000c, 0x214: 0x000c, 0x215: 0x000c, 0x216: 0x000c, 0x217: 0x000c,\n\t0x218: 0x000c, 0x219: 0x000c, 0x21a: 0x000c, 0x21b: 0x000c, 0x21c: 0x000c, 0x21d: 0x000c,\n\t0x21e: 0x000c, 0x21f: 0x000c, 0x220: 0x000c, 0x221: 0x000c, 0x222: 0x000c, 0x223: 0x000c,\n\t0x224: 0x000c, 0x225: 0x000c, 0x226: 0x000c, 0x227: 0x000c, 0x228: 0x000c, 0x229: 0x000c,\n\t0x22a: 0x000c, 0x22b: 0x000c, 0x22c: 0x000c, 0x22d: 0x000c, 0x22e: 0x000c, 0x22f: 0x000c,\n\t0x234: 0x000a, 0x235: 0x000a,\n\t0x23e: 0x000a,\n\t// Block 0x9, offset 0x240\n\t0x244: 0x000a, 0x245: 0x000a,\n\t0x247: 0x000a,\n\t// Block 0xa, offset 0x280\n\t0x2b6: 0x000a,\n\t// Block 0xb, offset 0x2c0\n\t0x2c3: 0x000c, 0x2c4: 0x000c, 0x2c5: 0x000c,\n\t0x2c6: 0x000c, 0x2c7: 0x000c, 0x2c8: 0x000c, 0x2c9: 0x000c,\n\t// Block 0xc, offset 0x300\n\t0x30a: 0x000a,\n\t0x30d: 0x000a, 0x30e: 0x000a, 0x30f: 0x0004, 0x310: 0x0001, 0x311: 0x000c,\n\t0x312: 0x000c, 0x313: 0x000c, 0x314: 0x000c, 0x315: 0x000c, 0x316: 0x000c, 0x317: 0x000c,\n\t0x318: 0x000c, 0x319: 0x000c, 0x31a: 0x000c, 0x31b: 0x000c, 0x31c: 0x000c, 0x31d: 0x000c,\n\t0x31e: 0x000c, 0x31f: 0x000c, 0x320: 0x000c, 0x321: 0x000c, 0x322: 0x000c, 0x323: 0x000c,\n\t0x324: 0x000c, 0x325: 0x000c, 0x326: 0x000c, 0x327: 0x000c, 0x328: 0x000c, 0x329: 0x000c,\n\t0x32a: 0x000c, 0x32b: 0x000c, 0x32c: 0x000c, 0x32d: 0x000c, 0x32e: 0x000c, 0x32f: 0x000c,\n\t0x330: 0x000c, 0x331: 0x000c, 0x332: 0x000c, 0x333: 0x000c, 0x334: 0x000c, 0x335: 0x000c,\n\t0x336: 0x000c, 0x337: 0x000c, 0x338: 0x000c, 0x339: 0x000c, 0x33a: 0x000c, 0x33b: 0x000c,\n\t0x33c: 0x000c, 0x33d: 0x000c, 0x33e: 0x0001, 0x33f: 0x000c,\n\t// Block 0xd, offset 0x340\n\t0x340: 0x0001, 0x341: 0x000c, 0x342: 0x000c, 0x343: 0x0001, 0x344: 0x000c, 0x345: 0x000c,\n\t0x346: 0x0001, 0x347: 0x000c, 0x348: 0x0001, 0x349: 0x0001, 0x34a: 0x0001, 0x34b: 0x0001,\n\t0x34c: 0x0001, 0x34d: 0x0001, 0x34e: 0x0001, 0x34f: 0x0001, 0x350: 0x0001, 0x351: 0x0001,\n\t0x352: 0x0001, 0x353: 0x0001, 0x354: 0x0001, 0x355: 0x0001, 0x356: 0x0001, 0x357: 0x0001,\n\t0x358: 0x0001, 0x359: 0x0001, 0x35a: 0x0001, 0x35b: 0x0001, 0x35c: 0x0001, 0x35d: 0x0001,\n\t0x35e: 0x0001, 0x35f: 0x0001, 0x360: 0x0001, 0x361: 0x0001, 0x362: 0x0001, 0x363: 0x0001,\n\t0x364: 0x0001, 0x365: 0x0001, 0x366: 0x0001, 0x367: 0x0001, 0x368: 0x0001, 0x369: 0x0001,\n\t0x36a: 0x0001, 0x36b: 0x0001, 0x36c: 0x0001, 0x36d: 0x0001, 0x36e: 0x0001, 0x36f: 0x0001,\n\t0x370: 0x0001, 0x371: 0x0001, 0x372: 0x0001, 0x373: 0x0001, 0x374: 0x0001, 0x375: 0x0001,\n\t0x376: 0x0001, 0x377: 0x0001, 0x378: 0x0001, 0x379: 0x0001, 0x37a: 0x0001, 0x37b: 0x0001,\n\t0x37c: 0x0001, 0x37d: 0x0001, 0x37e: 0x0001, 0x37f: 0x0001,\n\t// Block 0xe, offset 0x380\n\t0x380: 0x0005, 0x381: 0x0005, 0x382: 0x0005, 0x383: 0x0005, 0x384: 0x0005, 0x385: 0x0005,\n\t0x386: 0x000a, 0x387: 0x000a, 0x388: 0x000d, 0x389: 0x0004, 0x38a: 0x0004, 0x38b: 0x000d,\n\t0x38c: 0x0006, 0x38d: 0x000d, 0x38e: 0x000a, 0x38f: 0x000a, 0x390: 0x000c, 0x391: 0x000c,\n\t0x392: 0x000c, 0x393: 0x000c, 0x394: 0x000c, 0x395: 0x000c, 0x396: 0x000c, 0x397: 0x000c,\n\t0x398: 0x000c, 0x399: 0x000c, 0x39a: 0x000c, 0x39b: 0x000d, 0x39c: 0x000d, 0x39d: 0x000d,\n\t0x39e: 0x000d, 0x39f: 0x000d, 0x3a0: 0x000d, 0x3a1: 0x000d, 0x3a2: 0x000d, 0x3a3: 0x000d,\n\t0x3a4: 0x000d, 0x3a5: 0x000d, 0x3a6: 0x000d, 0x3a7: 0x000d, 0x3a8: 0x000d, 0x3a9: 0x000d,\n\t0x3aa: 0x000d, 0x3ab: 0x000d, 0x3ac: 0x000d, 0x3ad: 0x000d, 0x3ae: 0x000d, 0x3af: 0x000d,\n\t0x3b0: 0x000d, 0x3b1: 0x000d, 0x3b2: 0x000d, 0x3b3: 0x000d, 0x3b4: 0x000d, 0x3b5: 0x000d,\n\t0x3b6: 0x000d, 0x3b7: 0x000d, 0x3b8: 0x000d, 0x3b9: 0x000d, 0x3ba: 0x000d, 0x3bb: 0x000d,\n\t0x3bc: 0x000d, 0x3bd: 0x000d, 0x3be: 0x000d, 0x3bf: 0x000d,\n\t// Block 0xf, offset 0x3c0\n\t0x3c0: 0x000d, 0x3c1: 0x000d, 0x3c2: 0x000d, 0x3c3: 0x000d, 0x3c4: 0x000d, 0x3c5: 0x000d,\n\t0x3c6: 0x000d, 0x3c7: 0x000d, 0x3c8: 0x000d, 0x3c9: 0x000d, 0x3ca: 0x000d, 0x3cb: 0x000c,\n\t0x3cc: 0x000c, 0x3cd: 0x000c, 0x3ce: 0x000c, 0x3cf: 0x000c, 0x3d0: 0x000c, 0x3d1: 0x000c,\n\t0x3d2: 0x000c, 0x3d3: 0x000c, 0x3d4: 0x000c, 0x3d5: 0x000c, 0x3d6: 0x000c, 0x3d7: 0x000c,\n\t0x3d8: 0x000c, 0x3d9: 0x000c, 0x3da: 0x000c, 0x3db: 0x000c, 0x3dc: 0x000c, 0x3dd: 0x000c,\n\t0x3de: 0x000c, 0x3df: 0x000c, 0x3e0: 0x0005, 0x3e1: 0x0005, 0x3e2: 0x0005, 0x3e3: 0x0005,\n\t0x3e4: 0x0005, 0x3e5: 0x0005, 0x3e6: 0x0005, 0x3e7: 0x0005, 0x3e8: 0x0005, 0x3e9: 0x0005,\n\t0x3ea: 0x0004, 0x3eb: 0x0005, 0x3ec: 0x0005, 0x3ed: 0x000d, 0x3ee: 0x000d, 0x3ef: 0x000d,\n\t0x3f0: 0x000c, 0x3f1: 0x000d, 0x3f2: 0x000d, 0x3f3: 0x000d, 0x3f4: 0x000d, 0x3f5: 0x000d,\n\t0x3f6: 0x000d, 0x3f7: 0x000d, 0x3f8: 0x000d, 0x3f9: 0x000d, 0x3fa: 0x000d, 0x3fb: 0x000d,\n\t0x3fc: 0x000d, 0x3fd: 0x000d, 0x3fe: 0x000d, 0x3ff: 0x000d,\n\t// Block 0x10, offset 0x400\n\t0x400: 0x000d, 0x401: 0x000d, 0x402: 0x000d, 0x403: 0x000d, 0x404: 0x000d, 0x405: 0x000d,\n\t0x406: 0x000d, 0x407: 0x000d, 0x408: 0x000d, 0x409: 0x000d, 0x40a: 0x000d, 0x40b: 0x000d,\n\t0x40c: 0x000d, 0x40d: 0x000d, 0x40e: 0x000d, 0x40f: 0x000d, 0x410: 0x000d, 0x411: 0x000d,\n\t0x412: 0x000d, 0x413: 0x000d, 0x414: 0x000d, 0x415: 0x000d, 0x416: 0x000d, 0x417: 0x000d,\n\t0x418: 0x000d, 0x419: 0x000d, 0x41a: 0x000d, 0x41b: 0x000d, 0x41c: 0x000d, 0x41d: 0x000d,\n\t0x41e: 0x000d, 0x41f: 0x000d, 0x420: 0x000d, 0x421: 0x000d, 0x422: 0x000d, 0x423: 0x000d,\n\t0x424: 0x000d, 0x425: 0x000d, 0x426: 0x000d, 0x427: 0x000d, 0x428: 0x000d, 0x429: 0x000d,\n\t0x42a: 0x000d, 0x42b: 0x000d, 0x42c: 0x000d, 0x42d: 0x000d, 0x42e: 0x000d, 0x42f: 0x000d,\n\t0x430: 0x000d, 0x431: 0x000d, 0x432: 0x000d, 0x433: 0x000d, 0x434: 0x000d, 0x435: 0x000d,\n\t0x436: 0x000d, 0x437: 0x000d, 0x438: 0x000d, 0x439: 0x000d, 0x43a: 0x000d, 0x43b: 0x000d,\n\t0x43c: 0x000d, 0x43d: 0x000d, 0x43e: 0x000d, 0x43f: 0x000d,\n\t// Block 0x11, offset 0x440\n\t0x440: 0x000d, 0x441: 0x000d, 0x442: 0x000d, 0x443: 0x000d, 0x444: 0x000d, 0x445: 0x000d,\n\t0x446: 0x000d, 0x447: 0x000d, 0x448: 0x000d, 0x449: 0x000d, 0x44a: 0x000d, 0x44b: 0x000d,\n\t0x44c: 0x000d, 0x44d: 0x000d, 0x44e: 0x000d, 0x44f: 0x000d, 0x450: 0x000d, 0x451: 0x000d,\n\t0x452: 0x000d, 0x453: 0x000d, 0x454: 0x000d, 0x455: 0x000d, 0x456: 0x000c, 0x457: 0x000c,\n\t0x458: 0x000c, 0x459: 0x000c, 0x45a: 0x000c, 0x45b: 0x000c, 0x45c: 0x000c, 0x45d: 0x0005,\n\t0x45e: 0x000a, 0x45f: 0x000c, 0x460: 0x000c, 0x461: 0x000c, 0x462: 0x000c, 0x463: 0x000c,\n\t0x464: 0x000c, 0x465: 0x000d, 0x466: 0x000d, 0x467: 0x000c, 0x468: 0x000c, 0x469: 0x000a,\n\t0x46a: 0x000c, 0x46b: 0x000c, 0x46c: 0x000c, 0x46d: 0x000c, 0x46e: 0x000d, 0x46f: 0x000d,\n\t0x470: 0x0002, 0x471: 0x0002, 0x472: 0x0002, 0x473: 0x0002, 0x474: 0x0002, 0x475: 0x0002,\n\t0x476: 0x0002, 0x477: 0x0002, 0x478: 0x0002, 0x479: 0x0002, 0x47a: 0x000d, 0x47b: 0x000d,\n\t0x47c: 0x000d, 0x47d: 0x000d, 0x47e: 0x000d, 0x47f: 0x000d,\n\t// Block 0x12, offset 0x480\n\t0x480: 0x000d, 0x481: 0x000d, 0x482: 0x000d, 0x483: 0x000d, 0x484: 0x000d, 0x485: 0x000d,\n\t0x486: 0x000d, 0x487: 0x000d, 0x488: 0x000d, 0x489: 0x000d, 0x48a: 0x000d, 0x48b: 0x000d,\n\t0x48c: 0x000d, 0x48d: 0x000d, 0x48e: 0x000d, 0x48f: 0x000d, 0x490: 0x000d, 0x491: 0x000c,\n\t0x492: 0x000d, 0x493: 0x000d, 0x494: 0x000d, 0x495: 0x000d, 0x496: 0x000d, 0x497: 0x000d,\n\t0x498: 0x000d, 0x499: 0x000d, 0x49a: 0x000d, 0x49b: 0x000d, 0x49c: 0x000d, 0x49d: 0x000d,\n\t0x49e: 0x000d, 0x49f: 0x000d, 0x4a0: 0x000d, 0x4a1: 0x000d, 0x4a2: 0x000d, 0x4a3: 0x000d,\n\t0x4a4: 0x000d, 0x4a5: 0x000d, 0x4a6: 0x000d, 0x4a7: 0x000d, 0x4a8: 0x000d, 0x4a9: 0x000d,\n\t0x4aa: 0x000d, 0x4ab: 0x000d, 0x4ac: 0x000d, 0x4ad: 0x000d, 0x4ae: 0x000d, 0x4af: 0x000d,\n\t0x4b0: 0x000c, 0x4b1: 0x000c, 0x4b2: 0x000c, 0x4b3: 0x000c, 0x4b4: 0x000c, 0x4b5: 0x000c,\n\t0x4b6: 0x000c, 0x4b7: 0x000c, 0x4b8: 0x000c, 0x4b9: 0x000c, 0x4ba: 0x000c, 0x4bb: 0x000c,\n\t0x4bc: 0x000c, 0x4bd: 0x000c, 0x4be: 0x000c, 0x4bf: 0x000c,\n\t// Block 0x13, offset 0x4c0\n\t0x4c0: 0x000c, 0x4c1: 0x000c, 0x4c2: 0x000c, 0x4c3: 0x000c, 0x4c4: 0x000c, 0x4c5: 0x000c,\n\t0x4c6: 0x000c, 0x4c7: 0x000c, 0x4c8: 0x000c, 0x4c9: 0x000c, 0x4ca: 0x000c, 0x4cb: 0x000d,\n\t0x4cc: 0x000d, 0x4cd: 0x000d, 0x4ce: 0x000d, 0x4cf: 0x000d, 0x4d0: 0x000d, 0x4d1: 0x000d,\n\t0x4d2: 0x000d, 0x4d3: 0x000d, 0x4d4: 0x000d, 0x4d5: 0x000d, 0x4d6: 0x000d, 0x4d7: 0x000d,\n\t0x4d8: 0x000d, 0x4d9: 0x000d, 0x4da: 0x000d, 0x4db: 0x000d, 0x4dc: 0x000d, 0x4dd: 0x000d,\n\t0x4de: 0x000d, 0x4df: 0x000d, 0x4e0: 0x000d, 0x4e1: 0x000d, 0x4e2: 0x000d, 0x4e3: 0x000d,\n\t0x4e4: 0x000d, 0x4e5: 0x000d, 0x4e6: 0x000d, 0x4e7: 0x000d, 0x4e8: 0x000d, 0x4e9: 0x000d,\n\t0x4ea: 0x000d, 0x4eb: 0x000d, 0x4ec: 0x000d, 0x4ed: 0x000d, 0x4ee: 0x000d, 0x4ef: 0x000d,\n\t0x4f0: 0x000d, 0x4f1: 0x000d, 0x4f2: 0x000d, 0x4f3: 0x000d, 0x4f4: 0x000d, 0x4f5: 0x000d,\n\t0x4f6: 0x000d, 0x4f7: 0x000d, 0x4f8: 0x000d, 0x4f9: 0x000d, 0x4fa: 0x000d, 0x4fb: 0x000d,\n\t0x4fc: 0x000d, 0x4fd: 0x000d, 0x4fe: 0x000d, 0x4ff: 0x000d,\n\t// Block 0x14, offset 0x500\n\t0x500: 0x000d, 0x501: 0x000d, 0x502: 0x000d, 0x503: 0x000d, 0x504: 0x000d, 0x505: 0x000d,\n\t0x506: 0x000d, 0x507: 0x000d, 0x508: 0x000d, 0x509: 0x000d, 0x50a: 0x000d, 0x50b: 0x000d,\n\t0x50c: 0x000d, 0x50d: 0x000d, 0x50e: 0x000d, 0x50f: 0x000d, 0x510: 0x000d, 0x511: 0x000d,\n\t0x512: 0x000d, 0x513: 0x000d, 0x514: 0x000d, 0x515: 0x000d, 0x516: 0x000d, 0x517: 0x000d,\n\t0x518: 0x000d, 0x519: 0x000d, 0x51a: 0x000d, 0x51b: 0x000d, 0x51c: 0x000d, 0x51d: 0x000d,\n\t0x51e: 0x000d, 0x51f: 0x000d, 0x520: 0x000d, 0x521: 0x000d, 0x522: 0x000d, 0x523: 0x000d,\n\t0x524: 0x000d, 0x525: 0x000d, 0x526: 0x000c, 0x527: 0x000c, 0x528: 0x000c, 0x529: 0x000c,\n\t0x52a: 0x000c, 0x52b: 0x000c, 0x52c: 0x000c, 0x52d: 0x000c, 0x52e: 0x000c, 0x52f: 0x000c,\n\t0x530: 0x000c, 0x531: 0x000d, 0x532: 0x000d, 0x533: 0x000d, 0x534: 0x000d, 0x535: 0x000d,\n\t0x536: 0x000d, 0x537: 0x000d, 0x538: 0x000d, 0x539: 0x000d, 0x53a: 0x000d, 0x53b: 0x000d,\n\t0x53c: 0x000d, 0x53d: 0x000d, 0x53e: 0x000d, 0x53f: 0x000d,\n\t// Block 0x15, offset 0x540\n\t0x540: 0x0001, 0x541: 0x0001, 0x542: 0x0001, 0x543: 0x0001, 0x544: 0x0001, 0x545: 0x0001,\n\t0x546: 0x0001, 0x547: 0x0001, 0x548: 0x0001, 0x549: 0x0001, 0x54a: 0x0001, 0x54b: 0x0001,\n\t0x54c: 0x0001, 0x54d: 0x0001, 0x54e: 0x0001, 0x54f: 0x0001, 0x550: 0x0001, 0x551: 0x0001,\n\t0x552: 0x0001, 0x553: 0x0001, 0x554: 0x0001, 0x555: 0x0001, 0x556: 0x0001, 0x557: 0x0001,\n\t0x558: 0x0001, 0x559: 0x0001, 0x55a: 0x0001, 0x55b: 0x0001, 0x55c: 0x0001, 0x55d: 0x0001,\n\t0x55e: 0x0001, 0x55f: 0x0001, 0x560: 0x0001, 0x561: 0x0001, 0x562: 0x0001, 0x563: 0x0001,\n\t0x564: 0x0001, 0x565: 0x0001, 0x566: 0x0001, 0x567: 0x0001, 0x568: 0x0001, 0x569: 0x0001,\n\t0x56a: 0x0001, 0x56b: 0x000c, 0x56c: 0x000c, 0x56d: 0x000c, 0x56e: 0x000c, 0x56f: 0x000c,\n\t0x570: 0x000c, 0x571: 0x000c, 0x572: 0x000c, 0x573: 0x000c, 0x574: 0x0001, 0x575: 0x0001,\n\t0x576: 0x000a, 0x577: 0x000a, 0x578: 0x000a, 0x579: 0x000a, 0x57a: 0x0001, 0x57b: 0x0001,\n\t0x57c: 0x0001, 0x57d: 0x000c, 0x57e: 0x0001, 0x57f: 0x0001,\n\t// Block 0x16, offset 0x580\n\t0x580: 0x0001, 0x581: 0x0001, 0x582: 0x0001, 0x583: 0x0001, 0x584: 0x0001, 0x585: 0x0001,\n\t0x586: 0x0001, 0x587: 0x0001, 0x588: 0x0001, 0x589: 0x0001, 0x58a: 0x0001, 0x58b: 0x0001,\n\t0x58c: 0x0001, 0x58d: 0x0001, 0x58e: 0x0001, 0x58f: 0x0001, 0x590: 0x0001, 0x591: 0x0001,\n\t0x592: 0x0001, 0x593: 0x0001, 0x594: 0x0001, 0x595: 0x0001, 0x596: 0x000c, 0x597: 0x000c,\n\t0x598: 0x000c, 0x599: 0x000c, 0x59a: 0x0001, 0x59b: 0x000c, 0x59c: 0x000c, 0x59d: 0x000c,\n\t0x59e: 0x000c, 0x59f: 0x000c, 0x5a0: 0x000c, 0x5a1: 0x000c, 0x5a2: 0x000c, 0x5a3: 0x000c,\n\t0x5a4: 0x0001, 0x5a5: 0x000c, 0x5a6: 0x000c, 0x5a7: 0x000c, 0x5a8: 0x0001, 0x5a9: 0x000c,\n\t0x5aa: 0x000c, 0x5ab: 0x000c, 0x5ac: 0x000c, 0x5ad: 0x000c, 0x5ae: 0x0001, 0x5af: 0x0001,\n\t0x5b0: 0x0001, 0x5b1: 0x0001, 0x5b2: 0x0001, 0x5b3: 0x0001, 0x5b4: 0x0001, 0x5b5: 0x0001,\n\t0x5b6: 0x0001, 0x5b7: 0x0001, 0x5b8: 0x0001, 0x5b9: 0x0001, 0x5ba: 0x0001, 0x5bb: 0x0001,\n\t0x5bc: 0x0001, 0x5bd: 0x0001, 0x5be: 0x0001, 0x5bf: 0x0001,\n\t// Block 0x17, offset 0x5c0\n\t0x5c0: 0x0001, 0x5c1: 0x0001, 0x5c2: 0x0001, 0x5c3: 0x0001, 0x5c4: 0x0001, 0x5c5: 0x0001,\n\t0x5c6: 0x0001, 0x5c7: 0x0001, 0x5c8: 0x0001, 0x5c9: 0x0001, 0x5ca: 0x0001, 0x5cb: 0x0001,\n\t0x5cc: 0x0001, 0x5cd: 0x0001, 0x5ce: 0x0001, 0x5cf: 0x0001, 0x5d0: 0x0001, 0x5d1: 0x0001,\n\t0x5d2: 0x0001, 0x5d3: 0x0001, 0x5d4: 0x0001, 0x5d5: 0x0001, 0x5d6: 0x0001, 0x5d7: 0x0001,\n\t0x5d8: 0x0001, 0x5d9: 0x000c, 0x5da: 0x000c, 0x5db: 0x000c, 0x5dc: 0x0001, 0x5dd: 0x0001,\n\t0x5de: 0x0001, 0x5df: 0x0001, 0x5e0: 0x000d, 0x5e1: 0x000d, 0x5e2: 0x000d, 0x5e3: 0x000d,\n\t0x5e4: 0x000d, 0x5e5: 0x000d, 0x5e6: 0x000d, 0x5e7: 0x000d, 0x5e8: 0x000d, 0x5e9: 0x000d,\n\t0x5ea: 0x000d, 0x5eb: 0x000d, 0x5ec: 0x000d, 0x5ed: 0x000d, 0x5ee: 0x000d, 0x5ef: 0x000d,\n\t0x5f0: 0x0001, 0x5f1: 0x0001, 0x5f2: 0x0001, 0x5f3: 0x0001, 0x5f4: 0x0001, 0x5f5: 0x0001,\n\t0x5f6: 0x0001, 0x5f7: 0x0001, 0x5f8: 0x0001, 0x5f9: 0x0001, 0x5fa: 0x0001, 0x5fb: 0x0001,\n\t0x5fc: 0x0001, 0x5fd: 0x0001, 0x5fe: 0x0001, 0x5ff: 0x0001,\n\t// Block 0x18, offset 0x600\n\t0x600: 0x0001, 0x601: 0x0001, 0x602: 0x0001, 0x603: 0x0001, 0x604: 0x0001, 0x605: 0x0001,\n\t0x606: 0x0001, 0x607: 0x0001, 0x608: 0x0001, 0x609: 0x0001, 0x60a: 0x0001, 0x60b: 0x0001,\n\t0x60c: 0x0001, 0x60d: 0x0001, 0x60e: 0x0001, 0x60f: 0x0001, 0x610: 0x0001, 0x611: 0x0001,\n\t0x612: 0x0001, 0x613: 0x0001, 0x614: 0x0001, 0x615: 0x0001, 0x616: 0x0001, 0x617: 0x0001,\n\t0x618: 0x0001, 0x619: 0x0001, 0x61a: 0x0001, 0x61b: 0x0001, 0x61c: 0x0001, 0x61d: 0x0001,\n\t0x61e: 0x0001, 0x61f: 0x0001, 0x620: 0x000d, 0x621: 0x000d, 0x622: 0x000d, 0x623: 0x000d,\n\t0x624: 0x000d, 0x625: 0x000d, 0x626: 0x000d, 0x627: 0x000d, 0x628: 0x000d, 0x629: 0x000d,\n\t0x62a: 0x000d, 0x62b: 0x000d, 0x62c: 0x000d, 0x62d: 0x000d, 0x62e: 0x000d, 0x62f: 0x000d,\n\t0x630: 0x000d, 0x631: 0x000d, 0x632: 0x000d, 0x633: 0x000d, 0x634: 0x000d, 0x635: 0x000d,\n\t0x636: 0x000d, 0x637: 0x000d, 0x638: 0x000d, 0x639: 0x000d, 0x63a: 0x000d, 0x63b: 0x000d,\n\t0x63c: 0x000d, 0x63d: 0x000d, 0x63e: 0x000d, 0x63f: 0x000d,\n\t// Block 0x19, offset 0x640\n\t0x640: 0x000d, 0x641: 0x000d, 0x642: 0x000d, 0x643: 0x000d, 0x644: 0x000d, 0x645: 0x000d,\n\t0x646: 0x000d, 0x647: 0x000d, 0x648: 0x000d, 0x649: 0x000d, 0x64a: 0x000d, 0x64b: 0x000d,\n\t0x64c: 0x000d, 0x64d: 0x000d, 0x64e: 0x000d, 0x64f: 0x000d, 0x650: 0x000d, 0x651: 0x000d,\n\t0x652: 0x000d, 0x653: 0x000c, 0x654: 0x000c, 0x655: 0x000c, 0x656: 0x000c, 0x657: 0x000c,\n\t0x658: 0x000c, 0x659: 0x000c, 0x65a: 0x000c, 0x65b: 0x000c, 0x65c: 0x000c, 0x65d: 0x000c,\n\t0x65e: 0x000c, 0x65f: 0x000c, 0x660: 0x000c, 0x661: 0x000c, 0x662: 0x0005, 0x663: 0x000c,\n\t0x664: 0x000c, 0x665: 0x000c, 0x666: 0x000c, 0x667: 0x000c, 0x668: 0x000c, 0x669: 0x000c,\n\t0x66a: 0x000c, 0x66b: 0x000c, 0x66c: 0x000c, 0x66d: 0x000c, 0x66e: 0x000c, 0x66f: 0x000c,\n\t0x670: 0x000c, 0x671: 0x000c, 0x672: 0x000c, 0x673: 0x000c, 0x674: 0x000c, 0x675: 0x000c,\n\t0x676: 0x000c, 0x677: 0x000c, 0x678: 0x000c, 0x679: 0x000c, 0x67a: 0x000c, 0x67b: 0x000c,\n\t0x67c: 0x000c, 0x67d: 0x000c, 0x67e: 0x000c, 0x67f: 0x000c,\n\t// Block 0x1a, offset 0x680\n\t0x680: 0x000c, 0x681: 0x000c, 0x682: 0x000c,\n\t0x6ba: 0x000c,\n\t0x6bc: 0x000c,\n\t// Block 0x1b, offset 0x6c0\n\t0x6c1: 0x000c, 0x6c2: 0x000c, 0x6c3: 0x000c, 0x6c4: 0x000c, 0x6c5: 0x000c,\n\t0x6c6: 0x000c, 0x6c7: 0x000c, 0x6c8: 0x000c,\n\t0x6cd: 0x000c, 0x6d1: 0x000c,\n\t0x6d2: 0x000c, 0x6d3: 0x000c, 0x6d4: 0x000c, 0x6d5: 0x000c, 0x6d6: 0x000c, 0x6d7: 0x000c,\n\t0x6e2: 0x000c, 0x6e3: 0x000c,\n\t// Block 0x1c, offset 0x700\n\t0x701: 0x000c,\n\t0x73c: 0x000c,\n\t// Block 0x1d, offset 0x740\n\t0x741: 0x000c, 0x742: 0x000c, 0x743: 0x000c, 0x744: 0x000c,\n\t0x74d: 0x000c,\n\t0x762: 0x000c, 0x763: 0x000c,\n\t0x772: 0x0004, 0x773: 0x0004,\n\t0x77b: 0x0004,\n\t0x77e: 0x000c,\n\t// Block 0x1e, offset 0x780\n\t0x781: 0x000c, 0x782: 0x000c,\n\t0x7bc: 0x000c,\n\t// Block 0x1f, offset 0x7c0\n\t0x7c1: 0x000c, 0x7c2: 0x000c,\n\t0x7c7: 0x000c, 0x7c8: 0x000c, 0x7cb: 0x000c,\n\t0x7cc: 0x000c, 0x7cd: 0x000c, 0x7d1: 0x000c,\n\t0x7f0: 0x000c, 0x7f1: 0x000c, 0x7f5: 0x000c,\n\t// Block 0x20, offset 0x800\n\t0x801: 0x000c, 0x802: 0x000c, 0x803: 0x000c, 0x804: 0x000c, 0x805: 0x000c,\n\t0x807: 0x000c, 0x808: 0x000c,\n\t0x80d: 0x000c,\n\t0x822: 0x000c, 0x823: 0x000c,\n\t0x831: 0x0004,\n\t0x83a: 0x000c, 0x83b: 0x000c,\n\t0x83c: 0x000c, 0x83d: 0x000c, 0x83e: 0x000c, 0x83f: 0x000c,\n\t// Block 0x21, offset 0x840\n\t0x841: 0x000c,\n\t0x87c: 0x000c, 0x87f: 0x000c,\n\t// Block 0x22, offset 0x880\n\t0x881: 0x000c, 0x882: 0x000c, 0x883: 0x000c, 0x884: 0x000c,\n\t0x88d: 0x000c,\n\t0x896: 0x000c,\n\t0x8a2: 0x000c, 0x8a3: 0x000c,\n\t// Block 0x23, offset 0x8c0\n\t0x8c2: 0x000c,\n\t// Block 0x24, offset 0x900\n\t0x900: 0x000c,\n\t0x90d: 0x000c,\n\t0x933: 0x000a, 0x934: 0x000a, 0x935: 0x000a,\n\t0x936: 0x000a, 0x937: 0x000a, 0x938: 0x000a, 0x939: 0x0004, 0x93a: 0x000a,\n\t// Block 0x25, offset 0x940\n\t0x940: 0x000c, 0x944: 0x000c,\n\t0x97e: 0x000c, 0x97f: 0x000c,\n\t// Block 0x26, offset 0x980\n\t0x980: 0x000c,\n\t0x986: 0x000c, 0x987: 0x000c, 0x988: 0x000c, 0x98a: 0x000c, 0x98b: 0x000c,\n\t0x98c: 0x000c, 0x98d: 0x000c,\n\t0x995: 0x000c, 0x996: 0x000c,\n\t0x9a2: 0x000c, 0x9a3: 0x000c,\n\t0x9b8: 0x000a, 0x9b9: 0x000a, 0x9ba: 0x000a, 0x9bb: 0x000a,\n\t0x9bc: 0x000a, 0x9bd: 0x000a, 0x9be: 0x000a,\n\t// Block 0x27, offset 0x9c0\n\t0x9cc: 0x000c, 0x9cd: 0x000c,\n\t0x9e2: 0x000c, 0x9e3: 0x000c,\n\t// Block 0x28, offset 0xa00\n\t0xa00: 0x000c, 0xa01: 0x000c,\n\t0xa3b: 0x000c,\n\t0xa3c: 0x000c,\n\t// Block 0x29, offset 0xa40\n\t0xa41: 0x000c, 0xa42: 0x000c, 0xa43: 0x000c, 0xa44: 0x000c,\n\t0xa4d: 0x000c,\n\t0xa62: 0x000c, 0xa63: 0x000c,\n\t// Block 0x2a, offset 0xa80\n\t0xa8a: 0x000c,\n\t0xa92: 0x000c, 0xa93: 0x000c, 0xa94: 0x000c, 0xa96: 0x000c,\n\t// Block 0x2b, offset 0xac0\n\t0xaf1: 0x000c, 0xaf4: 0x000c, 0xaf5: 0x000c,\n\t0xaf6: 0x000c, 0xaf7: 0x000c, 0xaf8: 0x000c, 0xaf9: 0x000c, 0xafa: 0x000c,\n\t0xaff: 0x0004,\n\t// Block 0x2c, offset 0xb00\n\t0xb07: 0x000c, 0xb08: 0x000c, 0xb09: 0x000c, 0xb0a: 0x000c, 0xb0b: 0x000c,\n\t0xb0c: 0x000c, 0xb0d: 0x000c, 0xb0e: 0x000c,\n\t// Block 0x2d, offset 0xb40\n\t0xb71: 0x000c, 0xb74: 0x000c, 0xb75: 0x000c,\n\t0xb76: 0x000c, 0xb77: 0x000c, 0xb78: 0x000c, 0xb79: 0x000c, 0xb7b: 0x000c,\n\t0xb7c: 0x000c,\n\t// Block 0x2e, offset 0xb80\n\t0xb88: 0x000c, 0xb89: 0x000c, 0xb8a: 0x000c, 0xb8b: 0x000c,\n\t0xb8c: 0x000c, 0xb8d: 0x000c,\n\t// Block 0x2f, offset 0xbc0\n\t0xbd8: 0x000c, 0xbd9: 0x000c,\n\t0xbf5: 0x000c,\n\t0xbf7: 0x000c, 0xbf9: 0x000c, 0xbfa: 0x003a, 0xbfb: 0x002a,\n\t0xbfc: 0x003a, 0xbfd: 0x002a,\n\t// Block 0x30, offset 0xc00\n\t0xc31: 0x000c, 0xc32: 0x000c, 0xc33: 0x000c, 0xc34: 0x000c, 0xc35: 0x000c,\n\t0xc36: 0x000c, 0xc37: 0x000c, 0xc38: 0x000c, 0xc39: 0x000c, 0xc3a: 0x000c, 0xc3b: 0x000c,\n\t0xc3c: 0x000c, 0xc3d: 0x000c, 0xc3e: 0x000c,\n\t// Block 0x31, offset 0xc40\n\t0xc40: 0x000c, 0xc41: 0x000c, 0xc42: 0x000c, 0xc43: 0x000c, 0xc44: 0x000c,\n\t0xc46: 0x000c, 0xc47: 0x000c,\n\t0xc4d: 0x000c, 0xc4e: 0x000c, 0xc4f: 0x000c, 0xc50: 0x000c, 0xc51: 0x000c,\n\t0xc52: 0x000c, 0xc53: 0x000c, 0xc54: 0x000c, 0xc55: 0x000c, 0xc56: 0x000c, 0xc57: 0x000c,\n\t0xc59: 0x000c, 0xc5a: 0x000c, 0xc5b: 0x000c, 0xc5c: 0x000c, 0xc5d: 0x000c,\n\t0xc5e: 0x000c, 0xc5f: 0x000c, 0xc60: 0x000c, 0xc61: 0x000c, 0xc62: 0x000c, 0xc63: 0x000c,\n\t0xc64: 0x000c, 0xc65: 0x000c, 0xc66: 0x000c, 0xc67: 0x000c, 0xc68: 0x000c, 0xc69: 0x000c,\n\t0xc6a: 0x000c, 0xc6b: 0x000c, 0xc6c: 0x000c, 0xc6d: 0x000c, 0xc6e: 0x000c, 0xc6f: 0x000c,\n\t0xc70: 0x000c, 0xc71: 0x000c, 0xc72: 0x000c, 0xc73: 0x000c, 0xc74: 0x000c, 0xc75: 0x000c,\n\t0xc76: 0x000c, 0xc77: 0x000c, 0xc78: 0x000c, 0xc79: 0x000c, 0xc7a: 0x000c, 0xc7b: 0x000c,\n\t0xc7c: 0x000c,\n\t// Block 0x32, offset 0xc80\n\t0xc86: 0x000c,\n\t// Block 0x33, offset 0xcc0\n\t0xced: 0x000c, 0xcee: 0x000c, 0xcef: 0x000c,\n\t0xcf0: 0x000c, 0xcf2: 0x000c, 0xcf3: 0x000c, 0xcf4: 0x000c, 0xcf5: 0x000c,\n\t0xcf6: 0x000c, 0xcf7: 0x000c, 0xcf9: 0x000c, 0xcfa: 0x000c,\n\t0xcfd: 0x000c, 0xcfe: 0x000c,\n\t// Block 0x34, offset 0xd00\n\t0xd18: 0x000c, 0xd19: 0x000c,\n\t0xd1e: 0x000c, 0xd1f: 0x000c, 0xd20: 0x000c,\n\t0xd31: 0x000c, 0xd32: 0x000c, 0xd33: 0x000c, 0xd34: 0x000c,\n\t// Block 0x35, offset 0xd40\n\t0xd42: 0x000c, 0xd45: 0x000c,\n\t0xd46: 0x000c,\n\t0xd4d: 0x000c,\n\t0xd5d: 0x000c,\n\t// Block 0x36, offset 0xd80\n\t0xd9d: 0x000c,\n\t0xd9e: 0x000c, 0xd9f: 0x000c,\n\t// Block 0x37, offset 0xdc0\n\t0xdd0: 0x000a, 0xdd1: 0x000a,\n\t0xdd2: 0x000a, 0xdd3: 0x000a, 0xdd4: 0x000a, 0xdd5: 0x000a, 0xdd6: 0x000a, 0xdd7: 0x000a,\n\t0xdd8: 0x000a, 0xdd9: 0x000a,\n\t// Block 0x38, offset 0xe00\n\t0xe00: 0x000a,\n\t// Block 0x39, offset 0xe40\n\t0xe40: 0x0009,\n\t0xe5b: 0x007a, 0xe5c: 0x006a,\n\t// Block 0x3a, offset 0xe80\n\t0xe92: 0x000c, 0xe93: 0x000c, 0xe94: 0x000c,\n\t0xeb2: 0x000c, 0xeb3: 0x000c, 0xeb4: 0x000c,\n\t// Block 0x3b, offset 0xec0\n\t0xed2: 0x000c, 0xed3: 0x000c,\n\t0xef2: 0x000c, 0xef3: 0x000c,\n\t// Block 0x3c, offset 0xf00\n\t0xf34: 0x000c, 0xf35: 0x000c,\n\t0xf37: 0x000c, 0xf38: 0x000c, 0xf39: 0x000c, 0xf3a: 0x000c, 0xf3b: 0x000c,\n\t0xf3c: 0x000c, 0xf3d: 0x000c,\n\t// Block 0x3d, offset 0xf40\n\t0xf46: 0x000c, 0xf49: 0x000c, 0xf4a: 0x000c, 0xf4b: 0x000c,\n\t0xf4c: 0x000c, 0xf4d: 0x000c, 0xf4e: 0x000c, 0xf4f: 0x000c, 0xf50: 0x000c, 0xf51: 0x000c,\n\t0xf52: 0x000c, 0xf53: 0x000c,\n\t0xf5b: 0x0004, 0xf5d: 0x000c,\n\t0xf70: 0x000a, 0xf71: 0x000a, 0xf72: 0x000a, 0xf73: 0x000a, 0xf74: 0x000a, 0xf75: 0x000a,\n\t0xf76: 0x000a, 0xf77: 0x000a, 0xf78: 0x000a, 0xf79: 0x000a,\n\t// Block 0x3e, offset 0xf80\n\t0xf80: 0x000a, 0xf81: 0x000a, 0xf82: 0x000a, 0xf83: 0x000a, 0xf84: 0x000a, 0xf85: 0x000a,\n\t0xf86: 0x000a, 0xf87: 0x000a, 0xf88: 0x000a, 0xf89: 0x000a, 0xf8a: 0x000a, 0xf8b: 0x000c,\n\t0xf8c: 0x000c, 0xf8d: 0x000c, 0xf8e: 0x000b,\n\t// Block 0x3f, offset 0xfc0\n\t0xfc5: 0x000c,\n\t0xfc6: 0x000c,\n\t0xfe9: 0x000c,\n\t// Block 0x40, offset 0x1000\n\t0x1020: 0x000c, 0x1021: 0x000c, 0x1022: 0x000c,\n\t0x1027: 0x000c, 0x1028: 0x000c,\n\t0x1032: 0x000c,\n\t0x1039: 0x000c, 0x103a: 0x000c, 0x103b: 0x000c,\n\t// Block 0x41, offset 0x1040\n\t0x1040: 0x000a, 0x1044: 0x000a, 0x1045: 0x000a,\n\t// Block 0x42, offset 0x1080\n\t0x109e: 0x000a, 0x109f: 0x000a, 0x10a0: 0x000a, 0x10a1: 0x000a, 0x10a2: 0x000a, 0x10a3: 0x000a,\n\t0x10a4: 0x000a, 0x10a5: 0x000a, 0x10a6: 0x000a, 0x10a7: 0x000a, 0x10a8: 0x000a, 0x10a9: 0x000a,\n\t0x10aa: 0x000a, 0x10ab: 0x000a, 0x10ac: 0x000a, 0x10ad: 0x000a, 0x10ae: 0x000a, 0x10af: 0x000a,\n\t0x10b0: 0x000a, 0x10b1: 0x000a, 0x10b2: 0x000a, 0x10b3: 0x000a, 0x10b4: 0x000a, 0x10b5: 0x000a,\n\t0x10b6: 0x000a, 0x10b7: 0x000a, 0x10b8: 0x000a, 0x10b9: 0x000a, 0x10ba: 0x000a, 0x10bb: 0x000a,\n\t0x10bc: 0x000a, 0x10bd: 0x000a, 0x10be: 0x000a, 0x10bf: 0x000a,\n\t// Block 0x43, offset 0x10c0\n\t0x10d7: 0x000c,\n\t0x10d8: 0x000c, 0x10db: 0x000c,\n\t// Block 0x44, offset 0x1100\n\t0x1116: 0x000c,\n\t0x1118: 0x000c, 0x1119: 0x000c, 0x111a: 0x000c, 0x111b: 0x000c, 0x111c: 0x000c, 0x111d: 0x000c,\n\t0x111e: 0x000c, 0x1120: 0x000c, 0x1122: 0x000c,\n\t0x1125: 0x000c, 0x1126: 0x000c, 0x1127: 0x000c, 0x1128: 0x000c, 0x1129: 0x000c,\n\t0x112a: 0x000c, 0x112b: 0x000c, 0x112c: 0x000c,\n\t0x1133: 0x000c, 0x1134: 0x000c, 0x1135: 0x000c,\n\t0x1136: 0x000c, 0x1137: 0x000c, 0x1138: 0x000c, 0x1139: 0x000c, 0x113a: 0x000c, 0x113b: 0x000c,\n\t0x113c: 0x000c, 0x113f: 0x000c,\n\t// Block 0x45, offset 0x1140\n\t0x1170: 0x000c, 0x1171: 0x000c, 0x1172: 0x000c, 0x1173: 0x000c, 0x1174: 0x000c, 0x1175: 0x000c,\n\t0x1176: 0x000c, 0x1177: 0x000c, 0x1178: 0x000c, 0x1179: 0x000c, 0x117a: 0x000c, 0x117b: 0x000c,\n\t0x117c: 0x000c, 0x117d: 0x000c, 0x117e: 0x000c,\n\t// Block 0x46, offset 0x1180\n\t0x1180: 0x000c, 0x1181: 0x000c, 0x1182: 0x000c, 0x1183: 0x000c,\n\t0x11b4: 0x000c,\n\t0x11b6: 0x000c, 0x11b7: 0x000c, 0x11b8: 0x000c, 0x11b9: 0x000c, 0x11ba: 0x000c,\n\t0x11bc: 0x000c,\n\t// Block 0x47, offset 0x11c0\n\t0x11c2: 0x000c,\n\t0x11eb: 0x000c, 0x11ec: 0x000c, 0x11ed: 0x000c, 0x11ee: 0x000c, 0x11ef: 0x000c,\n\t0x11f0: 0x000c, 0x11f1: 0x000c, 0x11f2: 0x000c, 0x11f3: 0x000c,\n\t// Block 0x48, offset 0x1200\n\t0x1200: 0x000c, 0x1201: 0x000c,\n\t0x1222: 0x000c, 0x1223: 0x000c,\n\t0x1224: 0x000c, 0x1225: 0x000c, 0x1228: 0x000c, 0x1229: 0x000c,\n\t0x122b: 0x000c, 0x122c: 0x000c, 0x122d: 0x000c,\n\t// Block 0x49, offset 0x1240\n\t0x1266: 0x000c, 0x1268: 0x000c, 0x1269: 0x000c,\n\t0x126d: 0x000c, 0x126f: 0x000c,\n\t0x1270: 0x000c, 0x1271: 0x000c,\n\t// Block 0x4a, offset 0x1280\n\t0x12ac: 0x000c, 0x12ad: 0x000c, 0x12ae: 0x000c, 0x12af: 0x000c,\n\t0x12b0: 0x000c, 0x12b1: 0x000c, 0x12b2: 0x000c, 0x12b3: 0x000c,\n\t0x12b6: 0x000c, 0x12b7: 0x000c,\n\t// Block 0x4b, offset 0x12c0\n\t0x12d0: 0x000c, 0x12d1: 0x000c,\n\t0x12d2: 0x000c, 0x12d4: 0x000c, 0x12d5: 0x000c, 0x12d6: 0x000c, 0x12d7: 0x000c,\n\t0x12d8: 0x000c, 0x12d9: 0x000c, 0x12da: 0x000c, 0x12db: 0x000c, 0x12dc: 0x000c, 0x12dd: 0x000c,\n\t0x12de: 0x000c, 0x12df: 0x000c, 0x12e0: 0x000c, 0x12e2: 0x000c, 0x12e3: 0x000c,\n\t0x12e4: 0x000c, 0x12e5: 0x000c, 0x12e6: 0x000c, 0x12e7: 0x000c, 0x12e8: 0x000c,\n\t0x12ed: 0x000c,\n\t0x12f4: 0x000c,\n\t0x12f8: 0x000c, 0x12f9: 0x000c,\n\t// Block 0x4c, offset 0x1300\n\t0x1300: 0x000c, 0x1301: 0x000c, 0x1302: 0x000c, 0x1303: 0x000c, 0x1304: 0x000c, 0x1305: 0x000c,\n\t0x1306: 0x000c, 0x1307: 0x000c, 0x1308: 0x000c, 0x1309: 0x000c, 0x130a: 0x000c, 0x130b: 0x000c,\n\t0x130c: 0x000c, 0x130d: 0x000c, 0x130e: 0x000c, 0x130f: 0x000c, 0x1310: 0x000c, 0x1311: 0x000c,\n\t0x1312: 0x000c, 0x1313: 0x000c, 0x1314: 0x000c, 0x1315: 0x000c, 0x1316: 0x000c, 0x1317: 0x000c,\n\t0x1318: 0x000c, 0x1319: 0x000c, 0x131a: 0x000c, 0x131b: 0x000c, 0x131c: 0x000c, 0x131d: 0x000c,\n\t0x131e: 0x000c, 0x131f: 0x000c, 0x1320: 0x000c, 0x1321: 0x000c, 0x1322: 0x000c, 0x1323: 0x000c,\n\t0x1324: 0x000c, 0x1325: 0x000c, 0x1326: 0x000c, 0x1327: 0x000c, 0x1328: 0x000c, 0x1329: 0x000c,\n\t0x132a: 0x000c, 0x132b: 0x000c, 0x132c: 0x000c, 0x132d: 0x000c, 0x132e: 0x000c, 0x132f: 0x000c,\n\t0x1330: 0x000c, 0x1331: 0x000c, 0x1332: 0x000c, 0x1333: 0x000c, 0x1334: 0x000c, 0x1335: 0x000c,\n\t0x1336: 0x000c, 0x1337: 0x000c, 0x1338: 0x000c, 0x1339: 0x000c, 0x133b: 0x000c,\n\t0x133c: 0x000c, 0x133d: 0x000c, 0x133e: 0x000c, 0x133f: 0x000c,\n\t// Block 0x4d, offset 0x1340\n\t0x137d: 0x000a, 0x137f: 0x000a,\n\t// Block 0x4e, offset 0x1380\n\t0x1380: 0x000a, 0x1381: 0x000a,\n\t0x138d: 0x000a, 0x138e: 0x000a, 0x138f: 0x000a,\n\t0x139d: 0x000a,\n\t0x139e: 0x000a, 0x139f: 0x000a,\n\t0x13ad: 0x000a, 0x13ae: 0x000a, 0x13af: 0x000a,\n\t0x13bd: 0x000a, 0x13be: 0x000a,\n\t// Block 0x4f, offset 0x13c0\n\t0x13c0: 0x0009, 0x13c1: 0x0009, 0x13c2: 0x0009, 0x13c3: 0x0009, 0x13c4: 0x0009, 0x13c5: 0x0009,\n\t0x13c6: 0x0009, 0x13c7: 0x0009, 0x13c8: 0x0009, 0x13c9: 0x0009, 0x13ca: 0x0009, 0x13cb: 0x000b,\n\t0x13cc: 0x000b, 0x13cd: 0x000b, 0x13cf: 0x0001, 0x13d0: 0x000a, 0x13d1: 0x000a,\n\t0x13d2: 0x000a, 0x13d3: 0x000a, 0x13d4: 0x000a, 0x13d5: 0x000a, 0x13d6: 0x000a, 0x13d7: 0x000a,\n\t0x13d8: 0x000a, 0x13d9: 0x000a, 0x13da: 0x000a, 0x13db: 0x000a, 0x13dc: 0x000a, 0x13dd: 0x000a,\n\t0x13de: 0x000a, 0x13df: 0x000a, 0x13e0: 0x000a, 0x13e1: 0x000a, 0x13e2: 0x000a, 0x13e3: 0x000a,\n\t0x13e4: 0x000a, 0x13e5: 0x000a, 0x13e6: 0x000a, 0x13e7: 0x000a, 0x13e8: 0x0009, 0x13e9: 0x0007,\n\t0x13ea: 0x000e, 0x13eb: 0x000e, 0x13ec: 0x000e, 0x13ed: 0x000e, 0x13ee: 0x000e, 0x13ef: 0x0006,\n\t0x13f0: 0x0004, 0x13f1: 0x0004, 0x13f2: 0x0004, 0x13f3: 0x0004, 0x13f4: 0x0004, 0x13f5: 0x000a,\n\t0x13f6: 0x000a, 0x13f7: 0x000a, 0x13f8: 0x000a, 0x13f9: 0x000a, 0x13fa: 0x000a, 0x13fb: 0x000a,\n\t0x13fc: 0x000a, 0x13fd: 0x000a, 0x13fe: 0x000a, 0x13ff: 0x000a,\n\t// Block 0x50, offset 0x1400\n\t0x1400: 0x000a, 0x1401: 0x000a, 0x1402: 0x000a, 0x1403: 0x000a, 0x1404: 0x0006, 0x1405: 0x009a,\n\t0x1406: 0x008a, 0x1407: 0x000a, 0x1408: 0x000a, 0x1409: 0x000a, 0x140a: 0x000a, 0x140b: 0x000a,\n\t0x140c: 0x000a, 0x140d: 0x000a, 0x140e: 0x000a, 0x140f: 0x000a, 0x1410: 0x000a, 0x1411: 0x000a,\n\t0x1412: 0x000a, 0x1413: 0x000a, 0x1414: 0x000a, 0x1415: 0x000a, 0x1416: 0x000a, 0x1417: 0x000a,\n\t0x1418: 0x000a, 0x1419: 0x000a, 0x141a: 0x000a, 0x141b: 0x000a, 0x141c: 0x000a, 0x141d: 0x000a,\n\t0x141e: 0x000a, 0x141f: 0x0009, 0x1420: 0x000b, 0x1421: 0x000b, 0x1422: 0x000b, 0x1423: 0x000b,\n\t0x1424: 0x000b, 0x1425: 0x000b, 0x1426: 0x000e, 0x1427: 0x000e, 0x1428: 0x000e, 0x1429: 0x000e,\n\t0x142a: 0x000b, 0x142b: 0x000b, 0x142c: 0x000b, 0x142d: 0x000b, 0x142e: 0x000b, 0x142f: 0x000b,\n\t0x1430: 0x0002, 0x1434: 0x0002, 0x1435: 0x0002,\n\t0x1436: 0x0002, 0x1437: 0x0002, 0x1438: 0x0002, 0x1439: 0x0002, 0x143a: 0x0003, 0x143b: 0x0003,\n\t0x143c: 0x000a, 0x143d: 0x009a, 0x143e: 0x008a,\n\t// Block 0x51, offset 0x1440\n\t0x1440: 0x0002, 0x1441: 0x0002, 0x1442: 0x0002, 0x1443: 0x0002, 0x1444: 0x0002, 0x1445: 0x0002,\n\t0x1446: 0x0002, 0x1447: 0x0002, 0x1448: 0x0002, 0x1449: 0x0002, 0x144a: 0x0003, 0x144b: 0x0003,\n\t0x144c: 0x000a, 0x144d: 0x009a, 0x144e: 0x008a,\n\t0x1460: 0x0004, 0x1461: 0x0004, 0x1462: 0x0004, 0x1463: 0x0004,\n\t0x1464: 0x0004, 0x1465: 0x0004, 0x1466: 0x0004, 0x1467: 0x0004, 0x1468: 0x0004, 0x1469: 0x0004,\n\t0x146a: 0x0004, 0x146b: 0x0004, 0x146c: 0x0004, 0x146d: 0x0004, 0x146e: 0x0004, 0x146f: 0x0004,\n\t0x1470: 0x0004, 0x1471: 0x0004, 0x1472: 0x0004, 0x1473: 0x0004, 0x1474: 0x0004, 0x1475: 0x0004,\n\t0x1476: 0x0004, 0x1477: 0x0004, 0x1478: 0x0004, 0x1479: 0x0004, 0x147a: 0x0004, 0x147b: 0x0004,\n\t0x147c: 0x0004, 0x147d: 0x0004, 0x147e: 0x0004, 0x147f: 0x0004,\n\t// Block 0x52, offset 0x1480\n\t0x1480: 0x0004, 0x1481: 0x0004, 0x1482: 0x0004, 0x1483: 0x0004, 0x1484: 0x0004, 0x1485: 0x0004,\n\t0x1486: 0x0004, 0x1487: 0x0004, 0x1488: 0x0004, 0x1489: 0x0004, 0x148a: 0x0004, 0x148b: 0x0004,\n\t0x148c: 0x0004, 0x148d: 0x0004, 0x148e: 0x0004, 0x148f: 0x0004, 0x1490: 0x000c, 0x1491: 0x000c,\n\t0x1492: 0x000c, 0x1493: 0x000c, 0x1494: 0x000c, 0x1495: 0x000c, 0x1496: 0x000c, 0x1497: 0x000c,\n\t0x1498: 0x000c, 0x1499: 0x000c, 0x149a: 0x000c, 0x149b: 0x000c, 0x149c: 0x000c, 0x149d: 0x000c,\n\t0x149e: 0x000c, 0x149f: 0x000c, 0x14a0: 0x000c, 0x14a1: 0x000c, 0x14a2: 0x000c, 0x14a3: 0x000c,\n\t0x14a4: 0x000c, 0x14a5: 0x000c, 0x14a6: 0x000c, 0x14a7: 0x000c, 0x14a8: 0x000c, 0x14a9: 0x000c,\n\t0x14aa: 0x000c, 0x14ab: 0x000c, 0x14ac: 0x000c, 0x14ad: 0x000c, 0x14ae: 0x000c, 0x14af: 0x000c,\n\t0x14b0: 0x000c,\n\t// Block 0x53, offset 0x14c0\n\t0x14c0: 0x000a, 0x14c1: 0x000a, 0x14c3: 0x000a, 0x14c4: 0x000a, 0x14c5: 0x000a,\n\t0x14c6: 0x000a, 0x14c8: 0x000a, 0x14c9: 0x000a,\n\t0x14d4: 0x000a, 0x14d6: 0x000a, 0x14d7: 0x000a,\n\t0x14d8: 0x000a,\n\t0x14de: 0x000a, 0x14df: 0x000a, 0x14e0: 0x000a, 0x14e1: 0x000a, 0x14e2: 0x000a, 0x14e3: 0x000a,\n\t0x14e5: 0x000a, 0x14e7: 0x000a, 0x14e9: 0x000a,\n\t0x14ee: 0x0004,\n\t0x14fa: 0x000a, 0x14fb: 0x000a,\n\t// Block 0x54, offset 0x1500\n\t0x1500: 0x000a, 0x1501: 0x000a, 0x1502: 0x000a, 0x1503: 0x000a, 0x1504: 0x000a,\n\t0x150a: 0x000a, 0x150b: 0x000a,\n\t0x150c: 0x000a, 0x150d: 0x000a, 0x1510: 0x000a, 0x1511: 0x000a,\n\t0x1512: 0x000a, 0x1513: 0x000a, 0x1514: 0x000a, 0x1515: 0x000a, 0x1516: 0x000a, 0x1517: 0x000a,\n\t0x1518: 0x000a, 0x1519: 0x000a, 0x151a: 0x000a, 0x151b: 0x000a, 0x151c: 0x000a, 0x151d: 0x000a,\n\t0x151e: 0x000a, 0x151f: 0x000a,\n\t// Block 0x55, offset 0x1540\n\t0x1549: 0x000a, 0x154a: 0x000a, 0x154b: 0x000a,\n\t0x1550: 0x000a, 0x1551: 0x000a,\n\t0x1552: 0x000a, 0x1553: 0x000a, 0x1554: 0x000a, 0x1555: 0x000a, 0x1556: 0x000a, 0x1557: 0x000a,\n\t0x1558: 0x000a, 0x1559: 0x000a, 0x155a: 0x000a, 0x155b: 0x000a, 0x155c: 0x000a, 0x155d: 0x000a,\n\t0x155e: 0x000a, 0x155f: 0x000a, 0x1560: 0x000a, 0x1561: 0x000a, 0x1562: 0x000a, 0x1563: 0x000a,\n\t0x1564: 0x000a, 0x1565: 0x000a, 0x1566: 0x000a, 0x1567: 0x000a, 0x1568: 0x000a, 0x1569: 0x000a,\n\t0x156a: 0x000a, 0x156b: 0x000a, 0x156c: 0x000a, 0x156d: 0x000a, 0x156e: 0x000a, 0x156f: 0x000a,\n\t0x1570: 0x000a, 0x1571: 0x000a, 0x1572: 0x000a, 0x1573: 0x000a, 0x1574: 0x000a, 0x1575: 0x000a,\n\t0x1576: 0x000a, 0x1577: 0x000a, 0x1578: 0x000a, 0x1579: 0x000a, 0x157a: 0x000a, 0x157b: 0x000a,\n\t0x157c: 0x000a, 0x157d: 0x000a, 0x157e: 0x000a, 0x157f: 0x000a,\n\t// Block 0x56, offset 0x1580\n\t0x1580: 0x000a, 0x1581: 0x000a, 0x1582: 0x000a, 0x1583: 0x000a, 0x1584: 0x000a, 0x1585: 0x000a,\n\t0x1586: 0x000a, 0x1587: 0x000a, 0x1588: 0x000a, 0x1589: 0x000a, 0x158a: 0x000a, 0x158b: 0x000a,\n\t0x158c: 0x000a, 0x158d: 0x000a, 0x158e: 0x000a, 0x158f: 0x000a, 0x1590: 0x000a, 0x1591: 0x000a,\n\t0x1592: 0x000a, 0x1593: 0x000a, 0x1594: 0x000a, 0x1595: 0x000a, 0x1596: 0x000a, 0x1597: 0x000a,\n\t0x1598: 0x000a, 0x1599: 0x000a, 0x159a: 0x000a, 0x159b: 0x000a, 0x159c: 0x000a, 0x159d: 0x000a,\n\t0x159e: 0x000a, 0x159f: 0x000a, 0x15a0: 0x000a, 0x15a1: 0x000a, 0x15a2: 0x000a, 0x15a3: 0x000a,\n\t0x15a4: 0x000a, 0x15a5: 0x000a, 0x15a6: 0x000a, 0x15a7: 0x000a, 0x15a8: 0x000a, 0x15a9: 0x000a,\n\t0x15aa: 0x000a, 0x15ab: 0x000a, 0x15ac: 0x000a, 0x15ad: 0x000a, 0x15ae: 0x000a, 0x15af: 0x000a,\n\t0x15b0: 0x000a, 0x15b1: 0x000a, 0x15b2: 0x000a, 0x15b3: 0x000a, 0x15b4: 0x000a, 0x15b5: 0x000a,\n\t0x15b6: 0x000a, 0x15b7: 0x000a, 0x15b8: 0x000a, 0x15b9: 0x000a, 0x15ba: 0x000a, 0x15bb: 0x000a,\n\t0x15bc: 0x000a, 0x15bd: 0x000a, 0x15be: 0x000a, 0x15bf: 0x000a,\n\t// Block 0x57, offset 0x15c0\n\t0x15c0: 0x000a, 0x15c1: 0x000a, 0x15c2: 0x000a, 0x15c3: 0x000a, 0x15c4: 0x000a, 0x15c5: 0x000a,\n\t0x15c6: 0x000a, 0x15c7: 0x000a, 0x15c8: 0x000a, 0x15c9: 0x000a, 0x15ca: 0x000a, 0x15cb: 0x000a,\n\t0x15cc: 0x000a, 0x15cd: 0x000a, 0x15ce: 0x000a, 0x15cf: 0x000a, 0x15d0: 0x000a, 0x15d1: 0x000a,\n\t0x15d2: 0x0003, 0x15d3: 0x0004, 0x15d4: 0x000a, 0x15d5: 0x000a, 0x15d6: 0x000a, 0x15d7: 0x000a,\n\t0x15d8: 0x000a, 0x15d9: 0x000a, 0x15da: 0x000a, 0x15db: 0x000a, 0x15dc: 0x000a, 0x15dd: 0x000a,\n\t0x15de: 0x000a, 0x15df: 0x000a, 0x15e0: 0x000a, 0x15e1: 0x000a, 0x15e2: 0x000a, 0x15e3: 0x000a,\n\t0x15e4: 0x000a, 0x15e5: 0x000a, 0x15e6: 0x000a, 0x15e7: 0x000a, 0x15e8: 0x000a, 0x15e9: 0x000a,\n\t0x15ea: 0x000a, 0x15eb: 0x000a, 0x15ec: 0x000a, 0x15ed: 0x000a, 0x15ee: 0x000a, 0x15ef: 0x000a,\n\t0x15f0: 0x000a, 0x15f1: 0x000a, 0x15f2: 0x000a, 0x15f3: 0x000a, 0x15f4: 0x000a, 0x15f5: 0x000a,\n\t0x15f6: 0x000a, 0x15f7: 0x000a, 0x15f8: 0x000a, 0x15f9: 0x000a, 0x15fa: 0x000a, 0x15fb: 0x000a,\n\t0x15fc: 0x000a, 0x15fd: 0x000a, 0x15fe: 0x000a, 0x15ff: 0x000a,\n\t// Block 0x58, offset 0x1600\n\t0x1600: 0x000a, 0x1601: 0x000a, 0x1602: 0x000a, 0x1603: 0x000a, 0x1604: 0x000a, 0x1605: 0x000a,\n\t0x1606: 0x000a, 0x1607: 0x000a, 0x1608: 0x003a, 0x1609: 0x002a, 0x160a: 0x003a, 0x160b: 0x002a,\n\t0x160c: 0x000a, 0x160d: 0x000a, 0x160e: 0x000a, 0x160f: 0x000a, 0x1610: 0x000a, 0x1611: 0x000a,\n\t0x1612: 0x000a, 0x1613: 0x000a, 0x1614: 0x000a, 0x1615: 0x000a, 0x1616: 0x000a, 0x1617: 0x000a,\n\t0x1618: 0x000a, 0x1619: 0x000a, 0x161a: 0x000a, 0x161b: 0x000a, 0x161c: 0x000a, 0x161d: 0x000a,\n\t0x161e: 0x000a, 0x161f: 0x000a, 0x1620: 0x000a, 0x1621: 0x000a, 0x1622: 0x000a, 0x1623: 0x000a,\n\t0x1624: 0x000a, 0x1625: 0x000a, 0x1626: 0x000a, 0x1627: 0x000a, 0x1628: 0x000a, 0x1629: 0x009a,\n\t0x162a: 0x008a, 0x162b: 0x000a, 0x162c: 0x000a, 0x162d: 0x000a, 0x162e: 0x000a, 0x162f: 0x000a,\n\t0x1630: 0x000a, 0x1631: 0x000a, 0x1632: 0x000a, 0x1633: 0x000a, 0x1634: 0x000a, 0x1635: 0x000a,\n\t// Block 0x59, offset 0x1640\n\t0x167b: 0x000a,\n\t0x167c: 0x000a, 0x167d: 0x000a, 0x167e: 0x000a, 0x167f: 0x000a,\n\t// Block 0x5a, offset 0x1680\n\t0x1680: 0x000a, 0x1681: 0x000a, 0x1682: 0x000a, 0x1683: 0x000a, 0x1684: 0x000a, 0x1685: 0x000a,\n\t0x1686: 0x000a, 0x1687: 0x000a, 0x1688: 0x000a, 0x1689: 0x000a, 0x168a: 0x000a, 0x168b: 0x000a,\n\t0x168c: 0x000a, 0x168d: 0x000a, 0x168e: 0x000a, 0x168f: 0x000a, 0x1690: 0x000a, 0x1691: 0x000a,\n\t0x1692: 0x000a, 0x1693: 0x000a, 0x1694: 0x000a, 0x1696: 0x000a, 0x1697: 0x000a,\n\t0x1698: 0x000a, 0x1699: 0x000a, 0x169a: 0x000a, 0x169b: 0x000a, 0x169c: 0x000a, 0x169d: 0x000a,\n\t0x169e: 0x000a, 0x169f: 0x000a, 0x16a0: 0x000a, 0x16a1: 0x000a, 0x16a2: 0x000a, 0x16a3: 0x000a,\n\t0x16a4: 0x000a, 0x16a5: 0x000a, 0x16a6: 0x000a, 0x16a7: 0x000a, 0x16a8: 0x000a, 0x16a9: 0x000a,\n\t0x16aa: 0x000a, 0x16ab: 0x000a, 0x16ac: 0x000a, 0x16ad: 0x000a, 0x16ae: 0x000a, 0x16af: 0x000a,\n\t0x16b0: 0x000a, 0x16b1: 0x000a, 0x16b2: 0x000a, 0x16b3: 0x000a, 0x16b4: 0x000a, 0x16b5: 0x000a,\n\t0x16b6: 0x000a, 0x16b7: 0x000a, 0x16b8: 0x000a, 0x16b9: 0x000a, 0x16ba: 0x000a, 0x16bb: 0x000a,\n\t0x16bc: 0x000a, 0x16bd: 0x000a, 0x16be: 0x000a, 0x16bf: 0x000a,\n\t// Block 0x5b, offset 0x16c0\n\t0x16c0: 0x000a, 0x16c1: 0x000a, 0x16c2: 0x000a, 0x16c3: 0x000a, 0x16c4: 0x000a, 0x16c5: 0x000a,\n\t0x16c6: 0x000a, 0x16c7: 0x000a, 0x16c8: 0x000a, 0x16c9: 0x000a, 0x16ca: 0x000a, 0x16cb: 0x000a,\n\t0x16cc: 0x000a, 0x16cd: 0x000a, 0x16ce: 0x000a, 0x16cf: 0x000a, 0x16d0: 0x000a, 0x16d1: 0x000a,\n\t0x16d2: 0x000a, 0x16d3: 0x000a, 0x16d4: 0x000a, 0x16d5: 0x000a, 0x16d6: 0x000a, 0x16d7: 0x000a,\n\t0x16d8: 0x000a, 0x16d9: 0x000a, 0x16da: 0x000a, 0x16db: 0x000a, 0x16dc: 0x000a, 0x16dd: 0x000a,\n\t0x16de: 0x000a, 0x16df: 0x000a, 0x16e0: 0x000a, 0x16e1: 0x000a, 0x16e2: 0x000a, 0x16e3: 0x000a,\n\t0x16e4: 0x000a, 0x16e5: 0x000a, 0x16e6: 0x000a,\n\t// Block 0x5c, offset 0x1700\n\t0x1700: 0x000a, 0x1701: 0x000a, 0x1702: 0x000a, 0x1703: 0x000a, 0x1704: 0x000a, 0x1705: 0x000a,\n\t0x1706: 0x000a, 0x1707: 0x000a, 0x1708: 0x000a, 0x1709: 0x000a, 0x170a: 0x000a,\n\t0x1720: 0x000a, 0x1721: 0x000a, 0x1722: 0x000a, 0x1723: 0x000a,\n\t0x1724: 0x000a, 0x1725: 0x000a, 0x1726: 0x000a, 0x1727: 0x000a, 0x1728: 0x000a, 0x1729: 0x000a,\n\t0x172a: 0x000a, 0x172b: 0x000a, 0x172c: 0x000a, 0x172d: 0x000a, 0x172e: 0x000a, 0x172f: 0x000a,\n\t0x1730: 0x000a, 0x1731: 0x000a, 0x1732: 0x000a, 0x1733: 0x000a, 0x1734: 0x000a, 0x1735: 0x000a,\n\t0x1736: 0x000a, 0x1737: 0x000a, 0x1738: 0x000a, 0x1739: 0x000a, 0x173a: 0x000a, 0x173b: 0x000a,\n\t0x173c: 0x000a, 0x173d: 0x000a, 0x173e: 0x000a, 0x173f: 0x000a,\n\t// Block 0x5d, offset 0x1740\n\t0x1740: 0x000a, 0x1741: 0x000a, 0x1742: 0x000a, 0x1743: 0x000a, 0x1744: 0x000a, 0x1745: 0x000a,\n\t0x1746: 0x000a, 0x1747: 0x000a, 0x1748: 0x0002, 0x1749: 0x0002, 0x174a: 0x0002, 0x174b: 0x0002,\n\t0x174c: 0x0002, 0x174d: 0x0002, 0x174e: 0x0002, 0x174f: 0x0002, 0x1750: 0x0002, 0x1751: 0x0002,\n\t0x1752: 0x0002, 0x1753: 0x0002, 0x1754: 0x0002, 0x1755: 0x0002, 0x1756: 0x0002, 0x1757: 0x0002,\n\t0x1758: 0x0002, 0x1759: 0x0002, 0x175a: 0x0002, 0x175b: 0x0002,\n\t// Block 0x5e, offset 0x1780\n\t0x17aa: 0x000a, 0x17ab: 0x000a, 0x17ac: 0x000a, 0x17ad: 0x000a, 0x17ae: 0x000a, 0x17af: 0x000a,\n\t0x17b0: 0x000a, 0x17b1: 0x000a, 0x17b2: 0x000a, 0x17b3: 0x000a, 0x17b4: 0x000a, 0x17b5: 0x000a,\n\t0x17b6: 0x000a, 0x17b7: 0x000a, 0x17b8: 0x000a, 0x17b9: 0x000a, 0x17ba: 0x000a, 0x17bb: 0x000a,\n\t0x17bc: 0x000a, 0x17bd: 0x000a, 0x17be: 0x000a, 0x17bf: 0x000a,\n\t// Block 0x5f, offset 0x17c0\n\t0x17c0: 0x000a, 0x17c1: 0x000a, 0x17c2: 0x000a, 0x17c3: 0x000a, 0x17c4: 0x000a, 0x17c5: 0x000a,\n\t0x17c6: 0x000a, 0x17c7: 0x000a, 0x17c8: 0x000a, 0x17c9: 0x000a, 0x17ca: 0x000a, 0x17cb: 0x000a,\n\t0x17cc: 0x000a, 0x17cd: 0x000a, 0x17ce: 0x000a, 0x17cf: 0x000a, 0x17d0: 0x000a, 0x17d1: 0x000a,\n\t0x17d2: 0x000a, 0x17d3: 0x000a, 0x17d4: 0x000a, 0x17d5: 0x000a, 0x17d6: 0x000a, 0x17d7: 0x000a,\n\t0x17d8: 0x000a, 0x17d9: 0x000a, 0x17da: 0x000a, 0x17db: 0x000a, 0x17dc: 0x000a, 0x17dd: 0x000a,\n\t0x17de: 0x000a, 0x17df: 0x000a, 0x17e0: 0x000a, 0x17e1: 0x000a, 0x17e2: 0x000a, 0x17e3: 0x000a,\n\t0x17e4: 0x000a, 0x17e5: 0x000a, 0x17e6: 0x000a, 0x17e7: 0x000a, 0x17e8: 0x000a, 0x17e9: 0x000a,\n\t0x17ea: 0x000a, 0x17eb: 0x000a, 0x17ed: 0x000a, 0x17ee: 0x000a, 0x17ef: 0x000a,\n\t0x17f0: 0x000a, 0x17f1: 0x000a, 0x17f2: 0x000a, 0x17f3: 0x000a, 0x17f4: 0x000a, 0x17f5: 0x000a,\n\t0x17f6: 0x000a, 0x17f7: 0x000a, 0x17f8: 0x000a, 0x17f9: 0x000a, 0x17fa: 0x000a, 0x17fb: 0x000a,\n\t0x17fc: 0x000a, 0x17fd: 0x000a, 0x17fe: 0x000a, 0x17ff: 0x000a,\n\t// Block 0x60, offset 0x1800\n\t0x1800: 0x000a, 0x1801: 0x000a, 0x1802: 0x000a, 0x1803: 0x000a, 0x1804: 0x000a, 0x1805: 0x000a,\n\t0x1806: 0x000a, 0x1807: 0x000a, 0x1808: 0x000a, 0x1809: 0x000a, 0x180a: 0x000a, 0x180b: 0x000a,\n\t0x180c: 0x000a, 0x180d: 0x000a, 0x180e: 0x000a, 0x180f: 0x000a, 0x1810: 0x000a, 0x1811: 0x000a,\n\t0x1812: 0x000a, 0x1813: 0x000a, 0x1814: 0x000a, 0x1815: 0x000a, 0x1816: 0x000a, 0x1817: 0x000a,\n\t0x1818: 0x000a, 0x1819: 0x000a, 0x181a: 0x000a, 0x181b: 0x000a, 0x181c: 0x000a, 0x181d: 0x000a,\n\t0x181e: 0x000a, 0x181f: 0x000a, 0x1820: 0x000a, 0x1821: 0x000a, 0x1822: 0x000a, 0x1823: 0x000a,\n\t0x1824: 0x000a, 0x1825: 0x000a, 0x1826: 0x000a, 0x1827: 0x000a, 0x1828: 0x003a, 0x1829: 0x002a,\n\t0x182a: 0x003a, 0x182b: 0x002a, 0x182c: 0x003a, 0x182d: 0x002a, 0x182e: 0x003a, 0x182f: 0x002a,\n\t0x1830: 0x003a, 0x1831: 0x002a, 0x1832: 0x003a, 0x1833: 0x002a, 0x1834: 0x003a, 0x1835: 0x002a,\n\t0x1836: 0x000a, 0x1837: 0x000a, 0x1838: 0x000a, 0x1839: 0x000a, 0x183a: 0x000a, 0x183b: 0x000a,\n\t0x183c: 0x000a, 0x183d: 0x000a, 0x183e: 0x000a, 0x183f: 0x000a,\n\t// Block 0x61, offset 0x1840\n\t0x1840: 0x000a, 0x1841: 0x000a, 0x1842: 0x000a, 0x1843: 0x000a, 0x1844: 0x000a, 0x1845: 0x009a,\n\t0x1846: 0x008a, 0x1847: 0x000a, 0x1848: 0x000a, 0x1849: 0x000a, 0x184a: 0x000a, 0x184b: 0x000a,\n\t0x184c: 0x000a, 0x184d: 0x000a, 0x184e: 0x000a, 0x184f: 0x000a, 0x1850: 0x000a, 0x1851: 0x000a,\n\t0x1852: 0x000a, 0x1853: 0x000a, 0x1854: 0x000a, 0x1855: 0x000a, 0x1856: 0x000a, 0x1857: 0x000a,\n\t0x1858: 0x000a, 0x1859: 0x000a, 0x185a: 0x000a, 0x185b: 0x000a, 0x185c: 0x000a, 0x185d: 0x000a,\n\t0x185e: 0x000a, 0x185f: 0x000a, 0x1860: 0x000a, 0x1861: 0x000a, 0x1862: 0x000a, 0x1863: 0x000a,\n\t0x1864: 0x000a, 0x1865: 0x000a, 0x1866: 0x003a, 0x1867: 0x002a, 0x1868: 0x003a, 0x1869: 0x002a,\n\t0x186a: 0x003a, 0x186b: 0x002a, 0x186c: 0x003a, 0x186d: 0x002a, 0x186e: 0x003a, 0x186f: 0x002a,\n\t0x1870: 0x000a, 0x1871: 0x000a, 0x1872: 0x000a, 0x1873: 0x000a, 0x1874: 0x000a, 0x1875: 0x000a,\n\t0x1876: 0x000a, 0x1877: 0x000a, 0x1878: 0x000a, 0x1879: 0x000a, 0x187a: 0x000a, 0x187b: 0x000a,\n\t0x187c: 0x000a, 0x187d: 0x000a, 0x187e: 0x000a, 0x187f: 0x000a,\n\t// Block 0x62, offset 0x1880\n\t0x1880: 0x000a, 0x1881: 0x000a, 0x1882: 0x000a, 0x1883: 0x007a, 0x1884: 0x006a, 0x1885: 0x009a,\n\t0x1886: 0x008a, 0x1887: 0x00ba, 0x1888: 0x00aa, 0x1889: 0x009a, 0x188a: 0x008a, 0x188b: 0x007a,\n\t0x188c: 0x006a, 0x188d: 0x00da, 0x188e: 0x002a, 0x188f: 0x003a, 0x1890: 0x00ca, 0x1891: 0x009a,\n\t0x1892: 0x008a, 0x1893: 0x007a, 0x1894: 0x006a, 0x1895: 0x009a, 0x1896: 0x008a, 0x1897: 0x00ba,\n\t0x1898: 0x00aa, 0x1899: 0x000a, 0x189a: 0x000a, 0x189b: 0x000a, 0x189c: 0x000a, 0x189d: 0x000a,\n\t0x189e: 0x000a, 0x189f: 0x000a, 0x18a0: 0x000a, 0x18a1: 0x000a, 0x18a2: 0x000a, 0x18a3: 0x000a,\n\t0x18a4: 0x000a, 0x18a5: 0x000a, 0x18a6: 0x000a, 0x18a7: 0x000a, 0x18a8: 0x000a, 0x18a9: 0x000a,\n\t0x18aa: 0x000a, 0x18ab: 0x000a, 0x18ac: 0x000a, 0x18ad: 0x000a, 0x18ae: 0x000a, 0x18af: 0x000a,\n\t0x18b0: 0x000a, 0x18b1: 0x000a, 0x18b2: 0x000a, 0x18b3: 0x000a, 0x18b4: 0x000a, 0x18b5: 0x000a,\n\t0x18b6: 0x000a, 0x18b7: 0x000a, 0x18b8: 0x000a, 0x18b9: 0x000a, 0x18ba: 0x000a, 0x18bb: 0x000a,\n\t0x18bc: 0x000a, 0x18bd: 0x000a, 0x18be: 0x000a, 0x18bf: 0x000a,\n\t// Block 0x63, offset 0x18c0\n\t0x18c0: 0x000a, 0x18c1: 0x000a, 0x18c2: 0x000a, 0x18c3: 0x000a, 0x18c4: 0x000a, 0x18c5: 0x000a,\n\t0x18c6: 0x000a, 0x18c7: 0x000a, 0x18c8: 0x000a, 0x18c9: 0x000a, 0x18ca: 0x000a, 0x18cb: 0x000a,\n\t0x18cc: 0x000a, 0x18cd: 0x000a, 0x18ce: 0x000a, 0x18cf: 0x000a, 0x18d0: 0x000a, 0x18d1: 0x000a,\n\t0x18d2: 0x000a, 0x18d3: 0x000a, 0x18d4: 0x000a, 0x18d5: 0x000a, 0x18d6: 0x000a, 0x18d7: 0x000a,\n\t0x18d8: 0x003a, 0x18d9: 0x002a, 0x18da: 0x003a, 0x18db: 0x002a, 0x18dc: 0x000a, 0x18dd: 0x000a,\n\t0x18de: 0x000a, 0x18df: 0x000a, 0x18e0: 0x000a, 0x18e1: 0x000a, 0x18e2: 0x000a, 0x18e3: 0x000a,\n\t0x18e4: 0x000a, 0x18e5: 0x000a, 0x18e6: 0x000a, 0x18e7: 0x000a, 0x18e8: 0x000a, 0x18e9: 0x000a,\n\t0x18ea: 0x000a, 0x18eb: 0x000a, 0x18ec: 0x000a, 0x18ed: 0x000a, 0x18ee: 0x000a, 0x18ef: 0x000a,\n\t0x18f0: 0x000a, 0x18f1: 0x000a, 0x18f2: 0x000a, 0x18f3: 0x000a, 0x18f4: 0x000a, 0x18f5: 0x000a,\n\t0x18f6: 0x000a, 0x18f7: 0x000a, 0x18f8: 0x000a, 0x18f9: 0x000a, 0x18fa: 0x000a, 0x18fb: 0x000a,\n\t0x18fc: 0x003a, 0x18fd: 0x002a, 0x18fe: 0x000a, 0x18ff: 0x000a,\n\t// Block 0x64, offset 0x1900\n\t0x1900: 0x000a, 0x1901: 0x000a, 0x1902: 0x000a, 0x1903: 0x000a, 0x1904: 0x000a, 0x1905: 0x000a,\n\t0x1906: 0x000a, 0x1907: 0x000a, 0x1908: 0x000a, 0x1909: 0x000a, 0x190a: 0x000a, 0x190b: 0x000a,\n\t0x190c: 0x000a, 0x190d: 0x000a, 0x190e: 0x000a, 0x190f: 0x000a, 0x1910: 0x000a, 0x1911: 0x000a,\n\t0x1912: 0x000a, 0x1913: 0x000a, 0x1914: 0x000a, 0x1915: 0x000a, 0x1916: 0x000a, 0x1917: 0x000a,\n\t0x1918: 0x000a, 0x1919: 0x000a, 0x191a: 0x000a, 0x191b: 0x000a, 0x191c: 0x000a, 0x191d: 0x000a,\n\t0x191e: 0x000a, 0x191f: 0x000a, 0x1920: 0x000a, 0x1921: 0x000a, 0x1922: 0x000a, 0x1923: 0x000a,\n\t0x1924: 0x000a, 0x1925: 0x000a, 0x1926: 0x000a, 0x1927: 0x000a, 0x1928: 0x000a, 0x1929: 0x000a,\n\t0x192a: 0x000a, 0x192b: 0x000a, 0x192c: 0x000a, 0x192d: 0x000a, 0x192e: 0x000a, 0x192f: 0x000a,\n\t0x1930: 0x000a, 0x1931: 0x000a, 0x1932: 0x000a, 0x1933: 0x000a,\n\t0x1936: 0x000a, 0x1937: 0x000a, 0x1938: 0x000a, 0x1939: 0x000a, 0x193a: 0x000a, 0x193b: 0x000a,\n\t0x193c: 0x000a, 0x193d: 0x000a, 0x193e: 0x000a, 0x193f: 0x000a,\n\t// Block 0x65, offset 0x1940\n\t0x1940: 0x000a, 0x1941: 0x000a, 0x1942: 0x000a, 0x1943: 0x000a, 0x1944: 0x000a, 0x1945: 0x000a,\n\t0x1946: 0x000a, 0x1947: 0x000a, 0x1948: 0x000a, 0x1949: 0x000a, 0x194a: 0x000a, 0x194b: 0x000a,\n\t0x194c: 0x000a, 0x194d: 0x000a, 0x194e: 0x000a, 0x194f: 0x000a, 0x1950: 0x000a, 0x1951: 0x000a,\n\t0x1952: 0x000a, 0x1953: 0x000a, 0x1954: 0x000a, 0x1955: 0x000a,\n\t0x1958: 0x000a, 0x1959: 0x000a, 0x195a: 0x000a, 0x195b: 0x000a, 0x195c: 0x000a, 0x195d: 0x000a,\n\t0x195e: 0x000a, 0x195f: 0x000a, 0x1960: 0x000a, 0x1961: 0x000a, 0x1962: 0x000a, 0x1963: 0x000a,\n\t0x1964: 0x000a, 0x1965: 0x000a, 0x1966: 0x000a, 0x1967: 0x000a, 0x1968: 0x000a, 0x1969: 0x000a,\n\t0x196a: 0x000a, 0x196b: 0x000a, 0x196c: 0x000a, 0x196d: 0x000a, 0x196e: 0x000a, 0x196f: 0x000a,\n\t0x1970: 0x000a, 0x1971: 0x000a, 0x1972: 0x000a, 0x1973: 0x000a, 0x1974: 0x000a, 0x1975: 0x000a,\n\t0x1976: 0x000a, 0x1977: 0x000a, 0x1978: 0x000a, 0x1979: 0x000a, 0x197a: 0x000a, 0x197b: 0x000a,\n\t0x197c: 0x000a, 0x197d: 0x000a, 0x197e: 0x000a, 0x197f: 0x000a,\n\t// Block 0x66, offset 0x1980\n\t0x1980: 0x000a, 0x1981: 0x000a, 0x1982: 0x000a, 0x1983: 0x000a, 0x1984: 0x000a, 0x1985: 0x000a,\n\t0x1986: 0x000a, 0x1987: 0x000a, 0x1988: 0x000a, 0x198a: 0x000a, 0x198b: 0x000a,\n\t0x198c: 0x000a, 0x198d: 0x000a, 0x198e: 0x000a, 0x198f: 0x000a, 0x1990: 0x000a, 0x1991: 0x000a,\n\t0x1992: 0x000a, 0x1993: 0x000a, 0x1994: 0x000a, 0x1995: 0x000a, 0x1996: 0x000a, 0x1997: 0x000a,\n\t0x1998: 0x000a, 0x1999: 0x000a, 0x199a: 0x000a, 0x199b: 0x000a, 0x199c: 0x000a, 0x199d: 0x000a,\n\t0x199e: 0x000a, 0x199f: 0x000a, 0x19a0: 0x000a, 0x19a1: 0x000a, 0x19a2: 0x000a, 0x19a3: 0x000a,\n\t0x19a4: 0x000a, 0x19a5: 0x000a, 0x19a6: 0x000a, 0x19a7: 0x000a, 0x19a8: 0x000a, 0x19a9: 0x000a,\n\t0x19aa: 0x000a, 0x19ab: 0x000a, 0x19ac: 0x000a, 0x19ad: 0x000a, 0x19ae: 0x000a, 0x19af: 0x000a,\n\t0x19b0: 0x000a, 0x19b1: 0x000a, 0x19b2: 0x000a, 0x19b3: 0x000a, 0x19b4: 0x000a, 0x19b5: 0x000a,\n\t0x19b6: 0x000a, 0x19b7: 0x000a, 0x19b8: 0x000a, 0x19b9: 0x000a, 0x19ba: 0x000a, 0x19bb: 0x000a,\n\t0x19bc: 0x000a, 0x19bd: 0x000a, 0x19be: 0x000a,\n\t// Block 0x67, offset 0x19c0\n\t0x19e5: 0x000a, 0x19e6: 0x000a, 0x19e7: 0x000a, 0x19e8: 0x000a, 0x19e9: 0x000a,\n\t0x19ea: 0x000a, 0x19ef: 0x000c,\n\t0x19f0: 0x000c, 0x19f1: 0x000c,\n\t0x19f9: 0x000a, 0x19fa: 0x000a, 0x19fb: 0x000a,\n\t0x19fc: 0x000a, 0x19fd: 0x000a, 0x19fe: 0x000a, 0x19ff: 0x000a,\n\t// Block 0x68, offset 0x1a00\n\t0x1a3f: 0x000c,\n\t// Block 0x69, offset 0x1a40\n\t0x1a60: 0x000c, 0x1a61: 0x000c, 0x1a62: 0x000c, 0x1a63: 0x000c,\n\t0x1a64: 0x000c, 0x1a65: 0x000c, 0x1a66: 0x000c, 0x1a67: 0x000c, 0x1a68: 0x000c, 0x1a69: 0x000c,\n\t0x1a6a: 0x000c, 0x1a6b: 0x000c, 0x1a6c: 0x000c, 0x1a6d: 0x000c, 0x1a6e: 0x000c, 0x1a6f: 0x000c,\n\t0x1a70: 0x000c, 0x1a71: 0x000c, 0x1a72: 0x000c, 0x1a73: 0x000c, 0x1a74: 0x000c, 0x1a75: 0x000c,\n\t0x1a76: 0x000c, 0x1a77: 0x000c, 0x1a78: 0x000c, 0x1a79: 0x000c, 0x1a7a: 0x000c, 0x1a7b: 0x000c,\n\t0x1a7c: 0x000c, 0x1a7d: 0x000c, 0x1a7e: 0x000c, 0x1a7f: 0x000c,\n\t// Block 0x6a, offset 0x1a80\n\t0x1a80: 0x000a, 0x1a81: 0x000a, 0x1a82: 0x000a, 0x1a83: 0x000a, 0x1a84: 0x000a, 0x1a85: 0x000a,\n\t0x1a86: 0x000a, 0x1a87: 0x000a, 0x1a88: 0x000a, 0x1a89: 0x000a, 0x1a8a: 0x000a, 0x1a8b: 0x000a,\n\t0x1a8c: 0x000a, 0x1a8d: 0x000a, 0x1a8e: 0x000a, 0x1a8f: 0x000a, 0x1a90: 0x000a, 0x1a91: 0x000a,\n\t0x1a92: 0x000a, 0x1a93: 0x000a, 0x1a94: 0x000a, 0x1a95: 0x000a, 0x1a96: 0x000a, 0x1a97: 0x000a,\n\t0x1a98: 0x000a, 0x1a99: 0x000a, 0x1a9a: 0x000a, 0x1a9b: 0x000a, 0x1a9c: 0x000a, 0x1a9d: 0x000a,\n\t0x1a9e: 0x000a, 0x1a9f: 0x000a, 0x1aa0: 0x000a, 0x1aa1: 0x000a, 0x1aa2: 0x003a, 0x1aa3: 0x002a,\n\t0x1aa4: 0x003a, 0x1aa5: 0x002a, 0x1aa6: 0x003a, 0x1aa7: 0x002a, 0x1aa8: 0x003a, 0x1aa9: 0x002a,\n\t0x1aaa: 0x000a, 0x1aab: 0x000a, 0x1aac: 0x000a, 0x1aad: 0x000a, 0x1aae: 0x000a, 0x1aaf: 0x000a,\n\t0x1ab0: 0x000a, 0x1ab1: 0x000a, 0x1ab2: 0x000a, 0x1ab3: 0x000a, 0x1ab4: 0x000a, 0x1ab5: 0x000a,\n\t0x1ab6: 0x000a, 0x1ab7: 0x000a, 0x1ab8: 0x000a, 0x1ab9: 0x000a, 0x1aba: 0x000a, 0x1abb: 0x000a,\n\t0x1abc: 0x000a, 0x1abd: 0x000a, 0x1abe: 0x000a, 0x1abf: 0x000a,\n\t// Block 0x6b, offset 0x1ac0\n\t0x1ac0: 0x000a, 0x1ac1: 0x000a, 0x1ac2: 0x000a, 0x1ac3: 0x000a, 0x1ac4: 0x000a, 0x1ac5: 0x000a,\n\t0x1ac6: 0x000a, 0x1ac7: 0x000a, 0x1ac8: 0x000a, 0x1ac9: 0x000a, 0x1aca: 0x000a, 0x1acb: 0x000a,\n\t0x1acc: 0x000a, 0x1acd: 0x000a, 0x1ace: 0x000a,\n\t// Block 0x6c, offset 0x1b00\n\t0x1b00: 0x000a, 0x1b01: 0x000a, 0x1b02: 0x000a, 0x1b03: 0x000a, 0x1b04: 0x000a, 0x1b05: 0x000a,\n\t0x1b06: 0x000a, 0x1b07: 0x000a, 0x1b08: 0x000a, 0x1b09: 0x000a, 0x1b0a: 0x000a, 0x1b0b: 0x000a,\n\t0x1b0c: 0x000a, 0x1b0d: 0x000a, 0x1b0e: 0x000a, 0x1b0f: 0x000a, 0x1b10: 0x000a, 0x1b11: 0x000a,\n\t0x1b12: 0x000a, 0x1b13: 0x000a, 0x1b14: 0x000a, 0x1b15: 0x000a, 0x1b16: 0x000a, 0x1b17: 0x000a,\n\t0x1b18: 0x000a, 0x1b19: 0x000a, 0x1b1b: 0x000a, 0x1b1c: 0x000a, 0x1b1d: 0x000a,\n\t0x1b1e: 0x000a, 0x1b1f: 0x000a, 0x1b20: 0x000a, 0x1b21: 0x000a, 0x1b22: 0x000a, 0x1b23: 0x000a,\n\t0x1b24: 0x000a, 0x1b25: 0x000a, 0x1b26: 0x000a, 0x1b27: 0x000a, 0x1b28: 0x000a, 0x1b29: 0x000a,\n\t0x1b2a: 0x000a, 0x1b2b: 0x000a, 0x1b2c: 0x000a, 0x1b2d: 0x000a, 0x1b2e: 0x000a, 0x1b2f: 0x000a,\n\t0x1b30: 0x000a, 0x1b31: 0x000a, 0x1b32: 0x000a, 0x1b33: 0x000a, 0x1b34: 0x000a, 0x1b35: 0x000a,\n\t0x1b36: 0x000a, 0x1b37: 0x000a, 0x1b38: 0x000a, 0x1b39: 0x000a, 0x1b3a: 0x000a, 0x1b3b: 0x000a,\n\t0x1b3c: 0x000a, 0x1b3d: 0x000a, 0x1b3e: 0x000a, 0x1b3f: 0x000a,\n\t// Block 0x6d, offset 0x1b40\n\t0x1b40: 0x000a, 0x1b41: 0x000a, 0x1b42: 0x000a, 0x1b43: 0x000a, 0x1b44: 0x000a, 0x1b45: 0x000a,\n\t0x1b46: 0x000a, 0x1b47: 0x000a, 0x1b48: 0x000a, 0x1b49: 0x000a, 0x1b4a: 0x000a, 0x1b4b: 0x000a,\n\t0x1b4c: 0x000a, 0x1b4d: 0x000a, 0x1b4e: 0x000a, 0x1b4f: 0x000a, 0x1b50: 0x000a, 0x1b51: 0x000a,\n\t0x1b52: 0x000a, 0x1b53: 0x000a, 0x1b54: 0x000a, 0x1b55: 0x000a, 0x1b56: 0x000a, 0x1b57: 0x000a,\n\t0x1b58: 0x000a, 0x1b59: 0x000a, 0x1b5a: 0x000a, 0x1b5b: 0x000a, 0x1b5c: 0x000a, 0x1b5d: 0x000a,\n\t0x1b5e: 0x000a, 0x1b5f: 0x000a, 0x1b60: 0x000a, 0x1b61: 0x000a, 0x1b62: 0x000a, 0x1b63: 0x000a,\n\t0x1b64: 0x000a, 0x1b65: 0x000a, 0x1b66: 0x000a, 0x1b67: 0x000a, 0x1b68: 0x000a, 0x1b69: 0x000a,\n\t0x1b6a: 0x000a, 0x1b6b: 0x000a, 0x1b6c: 0x000a, 0x1b6d: 0x000a, 0x1b6e: 0x000a, 0x1b6f: 0x000a,\n\t0x1b70: 0x000a, 0x1b71: 0x000a, 0x1b72: 0x000a, 0x1b73: 0x000a,\n\t// Block 0x6e, offset 0x1b80\n\t0x1b80: 0x000a, 0x1b81: 0x000a, 0x1b82: 0x000a, 0x1b83: 0x000a, 0x1b84: 0x000a, 0x1b85: 0x000a,\n\t0x1b86: 0x000a, 0x1b87: 0x000a, 0x1b88: 0x000a, 0x1b89: 0x000a, 0x1b8a: 0x000a, 0x1b8b: 0x000a,\n\t0x1b8c: 0x000a, 0x1b8d: 0x000a, 0x1b8e: 0x000a, 0x1b8f: 0x000a, 0x1b90: 0x000a, 0x1b91: 0x000a,\n\t0x1b92: 0x000a, 0x1b93: 0x000a, 0x1b94: 0x000a, 0x1b95: 0x000a,\n\t0x1bb0: 0x000a, 0x1bb1: 0x000a, 0x1bb2: 0x000a, 0x1bb3: 0x000a, 0x1bb4: 0x000a, 0x1bb5: 0x000a,\n\t0x1bb6: 0x000a, 0x1bb7: 0x000a, 0x1bb8: 0x000a, 0x1bb9: 0x000a, 0x1bba: 0x000a, 0x1bbb: 0x000a,\n\t// Block 0x6f, offset 0x1bc0\n\t0x1bc0: 0x0009, 0x1bc1: 0x000a, 0x1bc2: 0x000a, 0x1bc3: 0x000a, 0x1bc4: 0x000a,\n\t0x1bc8: 0x003a, 0x1bc9: 0x002a, 0x1bca: 0x003a, 0x1bcb: 0x002a,\n\t0x1bcc: 0x003a, 0x1bcd: 0x002a, 0x1bce: 0x003a, 0x1bcf: 0x002a, 0x1bd0: 0x003a, 0x1bd1: 0x002a,\n\t0x1bd2: 0x000a, 0x1bd3: 0x000a, 0x1bd4: 0x003a, 0x1bd5: 0x002a, 0x1bd6: 0x003a, 0x1bd7: 0x002a,\n\t0x1bd8: 0x003a, 0x1bd9: 0x002a, 0x1bda: 0x003a, 0x1bdb: 0x002a, 0x1bdc: 0x000a, 0x1bdd: 0x000a,\n\t0x1bde: 0x000a, 0x1bdf: 0x000a, 0x1be0: 0x000a,\n\t0x1bea: 0x000c, 0x1beb: 0x000c, 0x1bec: 0x000c, 0x1bed: 0x000c,\n\t0x1bf0: 0x000a,\n\t0x1bf6: 0x000a, 0x1bf7: 0x000a,\n\t0x1bfd: 0x000a, 0x1bfe: 0x000a, 0x1bff: 0x000a,\n\t// Block 0x70, offset 0x1c00\n\t0x1c19: 0x000c, 0x1c1a: 0x000c, 0x1c1b: 0x000a, 0x1c1c: 0x000a,\n\t0x1c20: 0x000a,\n\t// Block 0x71, offset 0x1c40\n\t0x1c7b: 0x000a,\n\t// Block 0x72, offset 0x1c80\n\t0x1c80: 0x000a, 0x1c81: 0x000a, 0x1c82: 0x000a, 0x1c83: 0x000a, 0x1c84: 0x000a, 0x1c85: 0x000a,\n\t0x1c86: 0x000a, 0x1c87: 0x000a, 0x1c88: 0x000a, 0x1c89: 0x000a, 0x1c8a: 0x000a, 0x1c8b: 0x000a,\n\t0x1c8c: 0x000a, 0x1c8d: 0x000a, 0x1c8e: 0x000a, 0x1c8f: 0x000a, 0x1c90: 0x000a, 0x1c91: 0x000a,\n\t0x1c92: 0x000a, 0x1c93: 0x000a, 0x1c94: 0x000a, 0x1c95: 0x000a, 0x1c96: 0x000a, 0x1c97: 0x000a,\n\t0x1c98: 0x000a, 0x1c99: 0x000a, 0x1c9a: 0x000a, 0x1c9b: 0x000a, 0x1c9c: 0x000a, 0x1c9d: 0x000a,\n\t0x1c9e: 0x000a, 0x1c9f: 0x000a, 0x1ca0: 0x000a, 0x1ca1: 0x000a, 0x1ca2: 0x000a, 0x1ca3: 0x000a,\n\t// Block 0x73, offset 0x1cc0\n\t0x1cdd: 0x000a,\n\t0x1cde: 0x000a,\n\t// Block 0x74, offset 0x1d00\n\t0x1d10: 0x000a, 0x1d11: 0x000a,\n\t0x1d12: 0x000a, 0x1d13: 0x000a, 0x1d14: 0x000a, 0x1d15: 0x000a, 0x1d16: 0x000a, 0x1d17: 0x000a,\n\t0x1d18: 0x000a, 0x1d19: 0x000a, 0x1d1a: 0x000a, 0x1d1b: 0x000a, 0x1d1c: 0x000a, 0x1d1d: 0x000a,\n\t0x1d1e: 0x000a, 0x1d1f: 0x000a,\n\t0x1d3c: 0x000a, 0x1d3d: 0x000a, 0x1d3e: 0x000a,\n\t// Block 0x75, offset 0x1d40\n\t0x1d71: 0x000a, 0x1d72: 0x000a, 0x1d73: 0x000a, 0x1d74: 0x000a, 0x1d75: 0x000a,\n\t0x1d76: 0x000a, 0x1d77: 0x000a, 0x1d78: 0x000a, 0x1d79: 0x000a, 0x1d7a: 0x000a, 0x1d7b: 0x000a,\n\t0x1d7c: 0x000a, 0x1d7d: 0x000a, 0x1d7e: 0x000a, 0x1d7f: 0x000a,\n\t// Block 0x76, offset 0x1d80\n\t0x1d8c: 0x000a, 0x1d8d: 0x000a, 0x1d8e: 0x000a, 0x1d8f: 0x000a,\n\t// Block 0x77, offset 0x1dc0\n\t0x1df7: 0x000a, 0x1df8: 0x000a, 0x1df9: 0x000a, 0x1dfa: 0x000a,\n\t// Block 0x78, offset 0x1e00\n\t0x1e1e: 0x000a, 0x1e1f: 0x000a,\n\t0x1e3f: 0x000a,\n\t// Block 0x79, offset 0x1e40\n\t0x1e50: 0x000a, 0x1e51: 0x000a,\n\t0x1e52: 0x000a, 0x1e53: 0x000a, 0x1e54: 0x000a, 0x1e55: 0x000a, 0x1e56: 0x000a, 0x1e57: 0x000a,\n\t0x1e58: 0x000a, 0x1e59: 0x000a, 0x1e5a: 0x000a, 0x1e5b: 0x000a, 0x1e5c: 0x000a, 0x1e5d: 0x000a,\n\t0x1e5e: 0x000a, 0x1e5f: 0x000a, 0x1e60: 0x000a, 0x1e61: 0x000a, 0x1e62: 0x000a, 0x1e63: 0x000a,\n\t0x1e64: 0x000a, 0x1e65: 0x000a, 0x1e66: 0x000a, 0x1e67: 0x000a, 0x1e68: 0x000a, 0x1e69: 0x000a,\n\t0x1e6a: 0x000a, 0x1e6b: 0x000a, 0x1e6c: 0x000a, 0x1e6d: 0x000a, 0x1e6e: 0x000a, 0x1e6f: 0x000a,\n\t0x1e70: 0x000a, 0x1e71: 0x000a, 0x1e72: 0x000a, 0x1e73: 0x000a, 0x1e74: 0x000a, 0x1e75: 0x000a,\n\t0x1e76: 0x000a, 0x1e77: 0x000a, 0x1e78: 0x000a, 0x1e79: 0x000a, 0x1e7a: 0x000a, 0x1e7b: 0x000a,\n\t0x1e7c: 0x000a, 0x1e7d: 0x000a, 0x1e7e: 0x000a, 0x1e7f: 0x000a,\n\t// Block 0x7a, offset 0x1e80\n\t0x1e80: 0x000a, 0x1e81: 0x000a, 0x1e82: 0x000a, 0x1e83: 0x000a, 0x1e84: 0x000a, 0x1e85: 0x000a,\n\t0x1e86: 0x000a,\n\t// Block 0x7b, offset 0x1ec0\n\t0x1ecd: 0x000a, 0x1ece: 0x000a, 0x1ecf: 0x000a,\n\t// Block 0x7c, offset 0x1f00\n\t0x1f2f: 0x000c,\n\t0x1f30: 0x000c, 0x1f31: 0x000c, 0x1f32: 0x000c, 0x1f33: 0x000a, 0x1f34: 0x000c, 0x1f35: 0x000c,\n\t0x1f36: 0x000c, 0x1f37: 0x000c, 0x1f38: 0x000c, 0x1f39: 0x000c, 0x1f3a: 0x000c, 0x1f3b: 0x000c,\n\t0x1f3c: 0x000c, 0x1f3d: 0x000c, 0x1f3e: 0x000a, 0x1f3f: 0x000a,\n\t// Block 0x7d, offset 0x1f40\n\t0x1f5e: 0x000c, 0x1f5f: 0x000c,\n\t// Block 0x7e, offset 0x1f80\n\t0x1fb0: 0x000c, 0x1fb1: 0x000c,\n\t// Block 0x7f, offset 0x1fc0\n\t0x1fc0: 0x000a, 0x1fc1: 0x000a, 0x1fc2: 0x000a, 0x1fc3: 0x000a, 0x1fc4: 0x000a, 0x1fc5: 0x000a,\n\t0x1fc6: 0x000a, 0x1fc7: 0x000a, 0x1fc8: 0x000a, 0x1fc9: 0x000a, 0x1fca: 0x000a, 0x1fcb: 0x000a,\n\t0x1fcc: 0x000a, 0x1fcd: 0x000a, 0x1fce: 0x000a, 0x1fcf: 0x000a, 0x1fd0: 0x000a, 0x1fd1: 0x000a,\n\t0x1fd2: 0x000a, 0x1fd3: 0x000a, 0x1fd4: 0x000a, 0x1fd5: 0x000a, 0x1fd6: 0x000a, 0x1fd7: 0x000a,\n\t0x1fd8: 0x000a, 0x1fd9: 0x000a, 0x1fda: 0x000a, 0x1fdb: 0x000a, 0x1fdc: 0x000a, 0x1fdd: 0x000a,\n\t0x1fde: 0x000a, 0x1fdf: 0x000a, 0x1fe0: 0x000a, 0x1fe1: 0x000a,\n\t// Block 0x80, offset 0x2000\n\t0x2008: 0x000a,\n\t// Block 0x81, offset 0x2040\n\t0x2042: 0x000c,\n\t0x2046: 0x000c, 0x204b: 0x000c,\n\t0x2065: 0x000c, 0x2066: 0x000c, 0x2068: 0x000a, 0x2069: 0x000a,\n\t0x206a: 0x000a, 0x206b: 0x000a,\n\t0x2078: 0x0004, 0x2079: 0x0004,\n\t// Block 0x82, offset 0x2080\n\t0x20b4: 0x000a, 0x20b5: 0x000a,\n\t0x20b6: 0x000a, 0x20b7: 0x000a,\n\t// Block 0x83, offset 0x20c0\n\t0x20c4: 0x000c, 0x20c5: 0x000c,\n\t0x20e0: 0x000c, 0x20e1: 0x000c, 0x20e2: 0x000c, 0x20e3: 0x000c,\n\t0x20e4: 0x000c, 0x20e5: 0x000c, 0x20e6: 0x000c, 0x20e7: 0x000c, 0x20e8: 0x000c, 0x20e9: 0x000c,\n\t0x20ea: 0x000c, 0x20eb: 0x000c, 0x20ec: 0x000c, 0x20ed: 0x000c, 0x20ee: 0x000c, 0x20ef: 0x000c,\n\t0x20f0: 0x000c, 0x20f1: 0x000c,\n\t0x20ff: 0x000c,\n\t// Block 0x84, offset 0x2100\n\t0x2126: 0x000c, 0x2127: 0x000c, 0x2128: 0x000c, 0x2129: 0x000c,\n\t0x212a: 0x000c, 0x212b: 0x000c, 0x212c: 0x000c, 0x212d: 0x000c,\n\t// Block 0x85, offset 0x2140\n\t0x2147: 0x000c, 0x2148: 0x000c, 0x2149: 0x000c, 0x214a: 0x000c, 0x214b: 0x000c,\n\t0x214c: 0x000c, 0x214d: 0x000c, 0x214e: 0x000c, 0x214f: 0x000c, 0x2150: 0x000c, 0x2151: 0x000c,\n\t// Block 0x86, offset 0x2180\n\t0x2180: 0x000c, 0x2181: 0x000c, 0x2182: 0x000c,\n\t0x21b3: 0x000c,\n\t0x21b6: 0x000c, 0x21b7: 0x000c, 0x21b8: 0x000c, 0x21b9: 0x000c,\n\t0x21bc: 0x000c,\n\t// Block 0x87, offset 0x21c0\n\t0x21e5: 0x000c,\n\t// Block 0x88, offset 0x2200\n\t0x2229: 0x000c,\n\t0x222a: 0x000c, 0x222b: 0x000c, 0x222c: 0x000c, 0x222d: 0x000c, 0x222e: 0x000c,\n\t0x2231: 0x000c, 0x2232: 0x000c, 0x2235: 0x000c,\n\t0x2236: 0x000c,\n\t// Block 0x89, offset 0x2240\n\t0x2243: 0x000c,\n\t0x224c: 0x000c,\n\t0x227c: 0x000c,\n\t// Block 0x8a, offset 0x2280\n\t0x22b0: 0x000c, 0x22b2: 0x000c, 0x22b3: 0x000c, 0x22b4: 0x000c,\n\t0x22b7: 0x000c, 0x22b8: 0x000c,\n\t0x22be: 0x000c, 0x22bf: 0x000c,\n\t// Block 0x8b, offset 0x22c0\n\t0x22c1: 0x000c,\n\t0x22ec: 0x000c, 0x22ed: 0x000c,\n\t0x22f6: 0x000c,\n\t// Block 0x8c, offset 0x2300\n\t0x2325: 0x000c, 0x2328: 0x000c,\n\t0x232d: 0x000c,\n\t// Block 0x8d, offset 0x2340\n\t0x235d: 0x0001,\n\t0x235e: 0x000c, 0x235f: 0x0001, 0x2360: 0x0001, 0x2361: 0x0001, 0x2362: 0x0001, 0x2363: 0x0001,\n\t0x2364: 0x0001, 0x2365: 0x0001, 0x2366: 0x0001, 0x2367: 0x0001, 0x2368: 0x0001, 0x2369: 0x0003,\n\t0x236a: 0x0001, 0x236b: 0x0001, 0x236c: 0x0001, 0x236d: 0x0001, 0x236e: 0x0001, 0x236f: 0x0001,\n\t0x2370: 0x0001, 0x2371: 0x0001, 0x2372: 0x0001, 0x2373: 0x0001, 0x2374: 0x0001, 0x2375: 0x0001,\n\t0x2376: 0x0001, 0x2377: 0x0001, 0x2378: 0x0001, 0x2379: 0x0001, 0x237a: 0x0001, 0x237b: 0x0001,\n\t0x237c: 0x0001, 0x237d: 0x0001, 0x237e: 0x0001, 0x237f: 0x0001,\n\t// Block 0x8e, offset 0x2380\n\t0x2380: 0x0001, 0x2381: 0x0001, 0x2382: 0x0001, 0x2383: 0x0001, 0x2384: 0x0001, 0x2385: 0x0001,\n\t0x2386: 0x0001, 0x2387: 0x0001, 0x2388: 0x0001, 0x2389: 0x0001, 0x238a: 0x0001, 0x238b: 0x0001,\n\t0x238c: 0x0001, 0x238d: 0x0001, 0x238e: 0x0001, 0x238f: 0x0001, 0x2390: 0x000d, 0x2391: 0x000d,\n\t0x2392: 0x000d, 0x2393: 0x000d, 0x2394: 0x000d, 0x2395: 0x000d, 0x2396: 0x000d, 0x2397: 0x000d,\n\t0x2398: 0x000d, 0x2399: 0x000d, 0x239a: 0x000d, 0x239b: 0x000d, 0x239c: 0x000d, 0x239d: 0x000d,\n\t0x239e: 0x000d, 0x239f: 0x000d, 0x23a0: 0x000d, 0x23a1: 0x000d, 0x23a2: 0x000d, 0x23a3: 0x000d,\n\t0x23a4: 0x000d, 0x23a5: 0x000d, 0x23a6: 0x000d, 0x23a7: 0x000d, 0x23a8: 0x000d, 0x23a9: 0x000d,\n\t0x23aa: 0x000d, 0x23ab: 0x000d, 0x23ac: 0x000d, 0x23ad: 0x000d, 0x23ae: 0x000d, 0x23af: 0x000d,\n\t0x23b0: 0x000d, 0x23b1: 0x000d, 0x23b2: 0x000d, 0x23b3: 0x000d, 0x23b4: 0x000d, 0x23b5: 0x000d,\n\t0x23b6: 0x000d, 0x23b7: 0x000d, 0x23b8: 0x000d, 0x23b9: 0x000d, 0x23ba: 0x000d, 0x23bb: 0x000d,\n\t0x23bc: 0x000d, 0x23bd: 0x000d, 0x23be: 0x000d, 0x23bf: 0x000d,\n\t// Block 0x8f, offset 0x23c0\n\t0x23c0: 0x000d, 0x23c1: 0x000d, 0x23c2: 0x000d, 0x23c3: 0x000d, 0x23c4: 0x000d, 0x23c5: 0x000d,\n\t0x23c6: 0x000d, 0x23c7: 0x000d, 0x23c8: 0x000d, 0x23c9: 0x000d, 0x23ca: 0x000d, 0x23cb: 0x000d,\n\t0x23cc: 0x000d, 0x23cd: 0x000d, 0x23ce: 0x000d, 0x23cf: 0x000d, 0x23d0: 0x000d, 0x23d1: 0x000d,\n\t0x23d2: 0x000d, 0x23d3: 0x000d, 0x23d4: 0x000d, 0x23d5: 0x000d, 0x23d6: 0x000d, 0x23d7: 0x000d,\n\t0x23d8: 0x000d, 0x23d9: 0x000d, 0x23da: 0x000d, 0x23db: 0x000d, 0x23dc: 0x000d, 0x23dd: 0x000d,\n\t0x23de: 0x000d, 0x23df: 0x000d, 0x23e0: 0x000d, 0x23e1: 0x000d, 0x23e2: 0x000d, 0x23e3: 0x000d,\n\t0x23e4: 0x000d, 0x23e5: 0x000d, 0x23e6: 0x000d, 0x23e7: 0x000d, 0x23e8: 0x000d, 0x23e9: 0x000d,\n\t0x23ea: 0x000d, 0x23eb: 0x000d, 0x23ec: 0x000d, 0x23ed: 0x000d, 0x23ee: 0x000d, 0x23ef: 0x000d,\n\t0x23f0: 0x000d, 0x23f1: 0x000d, 0x23f2: 0x000d, 0x23f3: 0x000d, 0x23f4: 0x000d, 0x23f5: 0x000d,\n\t0x23f6: 0x000d, 0x23f7: 0x000d, 0x23f8: 0x000d, 0x23f9: 0x000d, 0x23fa: 0x000d, 0x23fb: 0x000d,\n\t0x23fc: 0x000d, 0x23fd: 0x000d, 0x23fe: 0x000a, 0x23ff: 0x000a,\n\t// Block 0x90, offset 0x2400\n\t0x2400: 0x000d, 0x2401: 0x000d, 0x2402: 0x000d, 0x2403: 0x000d, 0x2404: 0x000d, 0x2405: 0x000d,\n\t0x2406: 0x000d, 0x2407: 0x000d, 0x2408: 0x000d, 0x2409: 0x000d, 0x240a: 0x000d, 0x240b: 0x000d,\n\t0x240c: 0x000d, 0x240d: 0x000d, 0x240e: 0x000d, 0x240f: 0x000d, 0x2410: 0x000b, 0x2411: 0x000b,\n\t0x2412: 0x000b, 0x2413: 0x000b, 0x2414: 0x000b, 0x2415: 0x000b, 0x2416: 0x000b, 0x2417: 0x000b,\n\t0x2418: 0x000b, 0x2419: 0x000b, 0x241a: 0x000b, 0x241b: 0x000b, 0x241c: 0x000b, 0x241d: 0x000b,\n\t0x241e: 0x000b, 0x241f: 0x000b, 0x2420: 0x000b, 0x2421: 0x000b, 0x2422: 0x000b, 0x2423: 0x000b,\n\t0x2424: 0x000b, 0x2425: 0x000b, 0x2426: 0x000b, 0x2427: 0x000b, 0x2428: 0x000b, 0x2429: 0x000b,\n\t0x242a: 0x000b, 0x242b: 0x000b, 0x242c: 0x000b, 0x242d: 0x000b, 0x242e: 0x000b, 0x242f: 0x000b,\n\t0x2430: 0x000d, 0x2431: 0x000d, 0x2432: 0x000d, 0x2433: 0x000d, 0x2434: 0x000d, 0x2435: 0x000d,\n\t0x2436: 0x000d, 0x2437: 0x000d, 0x2438: 0x000d, 0x2439: 0x000d, 0x243a: 0x000d, 0x243b: 0x000d,\n\t0x243c: 0x000d, 0x243d: 0x000a, 0x243e: 0x000d, 0x243f: 0x000d,\n\t// Block 0x91, offset 0x2440\n\t0x2440: 0x000c, 0x2441: 0x000c, 0x2442: 0x000c, 0x2443: 0x000c, 0x2444: 0x000c, 0x2445: 0x000c,\n\t0x2446: 0x000c, 0x2447: 0x000c, 0x2448: 0x000c, 0x2449: 0x000c, 0x244a: 0x000c, 0x244b: 0x000c,\n\t0x244c: 0x000c, 0x244d: 0x000c, 0x244e: 0x000c, 0x244f: 0x000c, 0x2450: 0x000a, 0x2451: 0x000a,\n\t0x2452: 0x000a, 0x2453: 0x000a, 0x2454: 0x000a, 0x2455: 0x000a, 0x2456: 0x000a, 0x2457: 0x000a,\n\t0x2458: 0x000a, 0x2459: 0x000a,\n\t0x2460: 0x000c, 0x2461: 0x000c, 0x2462: 0x000c, 0x2463: 0x000c,\n\t0x2464: 0x000c, 0x2465: 0x000c, 0x2466: 0x000c, 0x2467: 0x000c, 0x2468: 0x000c, 0x2469: 0x000c,\n\t0x246a: 0x000c, 0x246b: 0x000c, 0x246c: 0x000c, 0x246d: 0x000c, 0x246e: 0x000c, 0x246f: 0x000c,\n\t0x2470: 0x000a, 0x2471: 0x000a, 0x2472: 0x000a, 0x2473: 0x000a, 0x2474: 0x000a, 0x2475: 0x000a,\n\t0x2476: 0x000a, 0x2477: 0x000a, 0x2478: 0x000a, 0x2479: 0x000a, 0x247a: 0x000a, 0x247b: 0x000a,\n\t0x247c: 0x000a, 0x247d: 0x000a, 0x247e: 0x000a, 0x247f: 0x000a,\n\t// Block 0x92, offset 0x2480\n\t0x2480: 0x000a, 0x2481: 0x000a, 0x2482: 0x000a, 0x2483: 0x000a, 0x2484: 0x000a, 0x2485: 0x000a,\n\t0x2486: 0x000a, 0x2487: 0x000a, 0x2488: 0x000a, 0x2489: 0x000a, 0x248a: 0x000a, 0x248b: 0x000a,\n\t0x248c: 0x000a, 0x248d: 0x000a, 0x248e: 0x000a, 0x248f: 0x000a, 0x2490: 0x0006, 0x2491: 0x000a,\n\t0x2492: 0x0006, 0x2494: 0x000a, 0x2495: 0x0006, 0x2496: 0x000a, 0x2497: 0x000a,\n\t0x2498: 0x000a, 0x2499: 0x009a, 0x249a: 0x008a, 0x249b: 0x007a, 0x249c: 0x006a, 0x249d: 0x009a,\n\t0x249e: 0x008a, 0x249f: 0x0004, 0x24a0: 0x000a, 0x24a1: 0x000a, 0x24a2: 0x0003, 0x24a3: 0x0003,\n\t0x24a4: 0x000a, 0x24a5: 0x000a, 0x24a6: 0x000a, 0x24a8: 0x000a, 0x24a9: 0x0004,\n\t0x24aa: 0x0004, 0x24ab: 0x000a,\n\t0x24b0: 0x000d, 0x24b1: 0x000d, 0x24b2: 0x000d, 0x24b3: 0x000d, 0x24b4: 0x000d, 0x24b5: 0x000d,\n\t0x24b6: 0x000d, 0x24b7: 0x000d, 0x24b8: 0x000d, 0x24b9: 0x000d, 0x24ba: 0x000d, 0x24bb: 0x000d,\n\t0x24bc: 0x000d, 0x24bd: 0x000d, 0x24be: 0x000d, 0x24bf: 0x000d,\n\t// Block 0x93, offset 0x24c0\n\t0x24c0: 0x000d, 0x24c1: 0x000d, 0x24c2: 0x000d, 0x24c3: 0x000d, 0x24c4: 0x000d, 0x24c5: 0x000d,\n\t0x24c6: 0x000d, 0x24c7: 0x000d, 0x24c8: 0x000d, 0x24c9: 0x000d, 0x24ca: 0x000d, 0x24cb: 0x000d,\n\t0x24cc: 0x000d, 0x24cd: 0x000d, 0x24ce: 0x000d, 0x24cf: 0x000d, 0x24d0: 0x000d, 0x24d1: 0x000d,\n\t0x24d2: 0x000d, 0x24d3: 0x000d, 0x24d4: 0x000d, 0x24d5: 0x000d, 0x24d6: 0x000d, 0x24d7: 0x000d,\n\t0x24d8: 0x000d, 0x24d9: 0x000d, 0x24da: 0x000d, 0x24db: 0x000d, 0x24dc: 0x000d, 0x24dd: 0x000d,\n\t0x24de: 0x000d, 0x24df: 0x000d, 0x24e0: 0x000d, 0x24e1: 0x000d, 0x24e2: 0x000d, 0x24e3: 0x000d,\n\t0x24e4: 0x000d, 0x24e5: 0x000d, 0x24e6: 0x000d, 0x24e7: 0x000d, 0x24e8: 0x000d, 0x24e9: 0x000d,\n\t0x24ea: 0x000d, 0x24eb: 0x000d, 0x24ec: 0x000d, 0x24ed: 0x000d, 0x24ee: 0x000d, 0x24ef: 0x000d,\n\t0x24f0: 0x000d, 0x24f1: 0x000d, 0x24f2: 0x000d, 0x24f3: 0x000d, 0x24f4: 0x000d, 0x24f5: 0x000d,\n\t0x24f6: 0x000d, 0x24f7: 0x000d, 0x24f8: 0x000d, 0x24f9: 0x000d, 0x24fa: 0x000d, 0x24fb: 0x000d,\n\t0x24fc: 0x000d, 0x24fd: 0x000d, 0x24fe: 0x000d, 0x24ff: 0x000b,\n\t// Block 0x94, offset 0x2500\n\t0x2501: 0x000a, 0x2502: 0x000a, 0x2503: 0x0004, 0x2504: 0x0004, 0x2505: 0x0004,\n\t0x2506: 0x000a, 0x2507: 0x000a, 0x2508: 0x003a, 0x2509: 0x002a, 0x250a: 0x000a, 0x250b: 0x0003,\n\t0x250c: 0x0006, 0x250d: 0x0003, 0x250e: 0x0006, 0x250f: 0x0006, 0x2510: 0x0002, 0x2511: 0x0002,\n\t0x2512: 0x0002, 0x2513: 0x0002, 0x2514: 0x0002, 0x2515: 0x0002, 0x2516: 0x0002, 0x2517: 0x0002,\n\t0x2518: 0x0002, 0x2519: 0x0002, 0x251a: 0x0006, 0x251b: 0x000a, 0x251c: 0x000a, 0x251d: 0x000a,\n\t0x251e: 0x000a, 0x251f: 0x000a, 0x2520: 0x000a,\n\t0x253b: 0x005a,\n\t0x253c: 0x000a, 0x253d: 0x004a, 0x253e: 0x000a, 0x253f: 0x000a,\n\t// Block 0x95, offset 0x2540\n\t0x2540: 0x000a,\n\t0x255b: 0x005a, 0x255c: 0x000a, 0x255d: 0x004a,\n\t0x255e: 0x000a, 0x255f: 0x00fa, 0x2560: 0x00ea, 0x2561: 0x000a, 0x2562: 0x003a, 0x2563: 0x002a,\n\t0x2564: 0x000a, 0x2565: 0x000a,\n\t// Block 0x96, offset 0x2580\n\t0x25a0: 0x0004, 0x25a1: 0x0004, 0x25a2: 0x000a, 0x25a3: 0x000a,\n\t0x25a4: 0x000a, 0x25a5: 0x0004, 0x25a6: 0x0004, 0x25a8: 0x000a, 0x25a9: 0x000a,\n\t0x25aa: 0x000a, 0x25ab: 0x000a, 0x25ac: 0x000a, 0x25ad: 0x000a, 0x25ae: 0x000a,\n\t0x25b0: 0x000b, 0x25b1: 0x000b, 0x25b2: 0x000b, 0x25b3: 0x000b, 0x25b4: 0x000b, 0x25b5: 0x000b,\n\t0x25b6: 0x000b, 0x25b7: 0x000b, 0x25b8: 0x000b, 0x25b9: 0x000a, 0x25ba: 0x000a, 0x25bb: 0x000a,\n\t0x25bc: 0x000a, 0x25bd: 0x000a, 0x25be: 0x000b, 0x25bf: 0x000b,\n\t// Block 0x97, offset 0x25c0\n\t0x25c1: 0x000a,\n\t// Block 0x98, offset 0x2600\n\t0x2600: 0x000a, 0x2601: 0x000a, 0x2602: 0x000a, 0x2603: 0x000a, 0x2604: 0x000a, 0x2605: 0x000a,\n\t0x2606: 0x000a, 0x2607: 0x000a, 0x2608: 0x000a, 0x2609: 0x000a, 0x260a: 0x000a, 0x260b: 0x000a,\n\t0x260c: 0x000a, 0x2610: 0x000a, 0x2611: 0x000a,\n\t0x2612: 0x000a, 0x2613: 0x000a, 0x2614: 0x000a, 0x2615: 0x000a, 0x2616: 0x000a, 0x2617: 0x000a,\n\t0x2618: 0x000a, 0x2619: 0x000a, 0x261a: 0x000a, 0x261b: 0x000a,\n\t0x2620: 0x000a,\n\t// Block 0x99, offset 0x2640\n\t0x267d: 0x000c,\n\t// Block 0x9a, offset 0x2680\n\t0x26a0: 0x000c, 0x26a1: 0x0002, 0x26a2: 0x0002, 0x26a3: 0x0002,\n\t0x26a4: 0x0002, 0x26a5: 0x0002, 0x26a6: 0x0002, 0x26a7: 0x0002, 0x26a8: 0x0002, 0x26a9: 0x0002,\n\t0x26aa: 0x0002, 0x26ab: 0x0002, 0x26ac: 0x0002, 0x26ad: 0x0002, 0x26ae: 0x0002, 0x26af: 0x0002,\n\t0x26b0: 0x0002, 0x26b1: 0x0002, 0x26b2: 0x0002, 0x26b3: 0x0002, 0x26b4: 0x0002, 0x26b5: 0x0002,\n\t0x26b6: 0x0002, 0x26b7: 0x0002, 0x26b8: 0x0002, 0x26b9: 0x0002, 0x26ba: 0x0002, 0x26bb: 0x0002,\n\t// Block 0x9b, offset 0x26c0\n\t0x26f6: 0x000c, 0x26f7: 0x000c, 0x26f8: 0x000c, 0x26f9: 0x000c, 0x26fa: 0x000c,\n\t// Block 0x9c, offset 0x2700\n\t0x2700: 0x0001, 0x2701: 0x0001, 0x2702: 0x0001, 0x2703: 0x0001, 0x2704: 0x0001, 0x2705: 0x0001,\n\t0x2706: 0x0001, 0x2707: 0x0001, 0x2708: 0x0001, 0x2709: 0x0001, 0x270a: 0x0001, 0x270b: 0x0001,\n\t0x270c: 0x0001, 0x270d: 0x0001, 0x270e: 0x0001, 0x270f: 0x0001, 0x2710: 0x0001, 0x2711: 0x0001,\n\t0x2712: 0x0001, 0x2713: 0x0001, 0x2714: 0x0001, 0x2715: 0x0001, 0x2716: 0x0001, 0x2717: 0x0001,\n\t0x2718: 0x0001, 0x2719: 0x0001, 0x271a: 0x0001, 0x271b: 0x0001, 0x271c: 0x0001, 0x271d: 0x0001,\n\t0x271e: 0x0001, 0x271f: 0x0001, 0x2720: 0x0001, 0x2721: 0x0001, 0x2722: 0x0001, 0x2723: 0x0001,\n\t0x2724: 0x0001, 0x2725: 0x0001, 0x2726: 0x0001, 0x2727: 0x0001, 0x2728: 0x0001, 0x2729: 0x0001,\n\t0x272a: 0x0001, 0x272b: 0x0001, 0x272c: 0x0001, 0x272d: 0x0001, 0x272e: 0x0001, 0x272f: 0x0001,\n\t0x2730: 0x0001, 0x2731: 0x0001, 0x2732: 0x0001, 0x2733: 0x0001, 0x2734: 0x0001, 0x2735: 0x0001,\n\t0x2736: 0x0001, 0x2737: 0x0001, 0x2738: 0x0001, 0x2739: 0x0001, 0x273a: 0x0001, 0x273b: 0x0001,\n\t0x273c: 0x0001, 0x273d: 0x0001, 0x273e: 0x0001, 0x273f: 0x0001,\n\t// Block 0x9d, offset 0x2740\n\t0x2740: 0x0001, 0x2741: 0x0001, 0x2742: 0x0001, 0x2743: 0x0001, 0x2744: 0x0001, 0x2745: 0x0001,\n\t0x2746: 0x0001, 0x2747: 0x0001, 0x2748: 0x0001, 0x2749: 0x0001, 0x274a: 0x0001, 0x274b: 0x0001,\n\t0x274c: 0x0001, 0x274d: 0x0001, 0x274e: 0x0001, 0x274f: 0x0001, 0x2750: 0x0001, 0x2751: 0x0001,\n\t0x2752: 0x0001, 0x2753: 0x0001, 0x2754: 0x0001, 0x2755: 0x0001, 0x2756: 0x0001, 0x2757: 0x0001,\n\t0x2758: 0x0001, 0x2759: 0x0001, 0x275a: 0x0001, 0x275b: 0x0001, 0x275c: 0x0001, 0x275d: 0x0001,\n\t0x275e: 0x0001, 0x275f: 0x000a, 0x2760: 0x0001, 0x2761: 0x0001, 0x2762: 0x0001, 0x2763: 0x0001,\n\t0x2764: 0x0001, 0x2765: 0x0001, 0x2766: 0x0001, 0x2767: 0x0001, 0x2768: 0x0001, 0x2769: 0x0001,\n\t0x276a: 0x0001, 0x276b: 0x0001, 0x276c: 0x0001, 0x276d: 0x0001, 0x276e: 0x0001, 0x276f: 0x0001,\n\t0x2770: 0x0001, 0x2771: 0x0001, 0x2772: 0x0001, 0x2773: 0x0001, 0x2774: 0x0001, 0x2775: 0x0001,\n\t0x2776: 0x0001, 0x2777: 0x0001, 0x2778: 0x0001, 0x2779: 0x0001, 0x277a: 0x0001, 0x277b: 0x0001,\n\t0x277c: 0x0001, 0x277d: 0x0001, 0x277e: 0x0001, 0x277f: 0x0001,\n\t// Block 0x9e, offset 0x2780\n\t0x2780: 0x0001, 0x2781: 0x000c, 0x2782: 0x000c, 0x2783: 0x000c, 0x2784: 0x0001, 0x2785: 0x000c,\n\t0x2786: 0x000c, 0x2787: 0x0001, 0x2788: 0x0001, 0x2789: 0x0001, 0x278a: 0x0001, 0x278b: 0x0001,\n\t0x278c: 0x000c, 0x278d: 0x000c, 0x278e: 0x000c, 0x278f: 0x000c, 0x2790: 0x0001, 0x2791: 0x0001,\n\t0x2792: 0x0001, 0x2793: 0x0001, 0x2794: 0x0001, 0x2795: 0x0001, 0x2796: 0x0001, 0x2797: 0x0001,\n\t0x2798: 0x0001, 0x2799: 0x0001, 0x279a: 0x0001, 0x279b: 0x0001, 0x279c: 0x0001, 0x279d: 0x0001,\n\t0x279e: 0x0001, 0x279f: 0x0001, 0x27a0: 0x0001, 0x27a1: 0x0001, 0x27a2: 0x0001, 0x27a3: 0x0001,\n\t0x27a4: 0x0001, 0x27a5: 0x0001, 0x27a6: 0x0001, 0x27a7: 0x0001, 0x27a8: 0x0001, 0x27a9: 0x0001,\n\t0x27aa: 0x0001, 0x27ab: 0x0001, 0x27ac: 0x0001, 0x27ad: 0x0001, 0x27ae: 0x0001, 0x27af: 0x0001,\n\t0x27b0: 0x0001, 0x27b1: 0x0001, 0x27b2: 0x0001, 0x27b3: 0x0001, 0x27b4: 0x0001, 0x27b5: 0x0001,\n\t0x27b6: 0x0001, 0x27b7: 0x0001, 0x27b8: 0x000c, 0x27b9: 0x000c, 0x27ba: 0x000c, 0x27bb: 0x0001,\n\t0x27bc: 0x0001, 0x27bd: 0x0001, 0x27be: 0x0001, 0x27bf: 0x000c,\n\t// Block 0x9f, offset 0x27c0\n\t0x27c0: 0x0001, 0x27c1: 0x0001, 0x27c2: 0x0001, 0x27c3: 0x0001, 0x27c4: 0x0001, 0x27c5: 0x0001,\n\t0x27c6: 0x0001, 0x27c7: 0x0001, 0x27c8: 0x0001, 0x27c9: 0x0001, 0x27ca: 0x0001, 0x27cb: 0x0001,\n\t0x27cc: 0x0001, 0x27cd: 0x0001, 0x27ce: 0x0001, 0x27cf: 0x0001, 0x27d0: 0x0001, 0x27d1: 0x0001,\n\t0x27d2: 0x0001, 0x27d3: 0x0001, 0x27d4: 0x0001, 0x27d5: 0x0001, 0x27d6: 0x0001, 0x27d7: 0x0001,\n\t0x27d8: 0x0001, 0x27d9: 0x0001, 0x27da: 0x0001, 0x27db: 0x0001, 0x27dc: 0x0001, 0x27dd: 0x0001,\n\t0x27de: 0x0001, 0x27df: 0x0001, 0x27e0: 0x0001, 0x27e1: 0x0001, 0x27e2: 0x0001, 0x27e3: 0x0001,\n\t0x27e4: 0x0001, 0x27e5: 0x000c, 0x27e6: 0x000c, 0x27e7: 0x0001, 0x27e8: 0x0001, 0x27e9: 0x0001,\n\t0x27ea: 0x0001, 0x27eb: 0x0001, 0x27ec: 0x0001, 0x27ed: 0x0001, 0x27ee: 0x0001, 0x27ef: 0x0001,\n\t0x27f0: 0x0001, 0x27f1: 0x0001, 0x27f2: 0x0001, 0x27f3: 0x0001, 0x27f4: 0x0001, 0x27f5: 0x0001,\n\t0x27f6: 0x0001, 0x27f7: 0x0001, 0x27f8: 0x0001, 0x27f9: 0x0001, 0x27fa: 0x0001, 0x27fb: 0x0001,\n\t0x27fc: 0x0001, 0x27fd: 0x0001, 0x27fe: 0x0001, 0x27ff: 0x0001,\n\t// Block 0xa0, offset 0x2800\n\t0x2800: 0x0001, 0x2801: 0x0001, 0x2802: 0x0001, 0x2803: 0x0001, 0x2804: 0x0001, 0x2805: 0x0001,\n\t0x2806: 0x0001, 0x2807: 0x0001, 0x2808: 0x0001, 0x2809: 0x0001, 0x280a: 0x0001, 0x280b: 0x0001,\n\t0x280c: 0x0001, 0x280d: 0x0001, 0x280e: 0x0001, 0x280f: 0x0001, 0x2810: 0x0001, 0x2811: 0x0001,\n\t0x2812: 0x0001, 0x2813: 0x0001, 0x2814: 0x0001, 0x2815: 0x0001, 0x2816: 0x0001, 0x2817: 0x0001,\n\t0x2818: 0x0001, 0x2819: 0x0001, 0x281a: 0x0001, 0x281b: 0x0001, 0x281c: 0x0001, 0x281d: 0x0001,\n\t0x281e: 0x0001, 0x281f: 0x0001, 0x2820: 0x0001, 0x2821: 0x0001, 0x2822: 0x0001, 0x2823: 0x0001,\n\t0x2824: 0x0001, 0x2825: 0x0001, 0x2826: 0x0001, 0x2827: 0x0001, 0x2828: 0x0001, 0x2829: 0x0001,\n\t0x282a: 0x0001, 0x282b: 0x0001, 0x282c: 0x0001, 0x282d: 0x0001, 0x282e: 0x0001, 0x282f: 0x0001,\n\t0x2830: 0x0001, 0x2831: 0x0001, 0x2832: 0x0001, 0x2833: 0x0001, 0x2834: 0x0001, 0x2835: 0x0001,\n\t0x2836: 0x0001, 0x2837: 0x0001, 0x2838: 0x0001, 0x2839: 0x000a, 0x283a: 0x000a, 0x283b: 0x000a,\n\t0x283c: 0x000a, 0x283d: 0x000a, 0x283e: 0x000a, 0x283f: 0x000a,\n\t// Block 0xa1, offset 0x2840\n\t0x2840: 0x000d, 0x2841: 0x000d, 0x2842: 0x000d, 0x2843: 0x000d, 0x2844: 0x000d, 0x2845: 0x000d,\n\t0x2846: 0x000d, 0x2847: 0x000d, 0x2848: 0x000d, 0x2849: 0x000d, 0x284a: 0x000d, 0x284b: 0x000d,\n\t0x284c: 0x000d, 0x284d: 0x000d, 0x284e: 0x000d, 0x284f: 0x000d, 0x2850: 0x000d, 0x2851: 0x000d,\n\t0x2852: 0x000d, 0x2853: 0x000d, 0x2854: 0x000d, 0x2855: 0x000d, 0x2856: 0x000d, 0x2857: 0x000d,\n\t0x2858: 0x000d, 0x2859: 0x000d, 0x285a: 0x000d, 0x285b: 0x000d, 0x285c: 0x000d, 0x285d: 0x000d,\n\t0x285e: 0x000d, 0x285f: 0x000d, 0x2860: 0x000d, 0x2861: 0x000d, 0x2862: 0x000d, 0x2863: 0x000d,\n\t0x2864: 0x000c, 0x2865: 0x000c, 0x2866: 0x000c, 0x2867: 0x000c, 0x2868: 0x000d, 0x2869: 0x000d,\n\t0x286a: 0x000d, 0x286b: 0x000d, 0x286c: 0x000d, 0x286d: 0x000d, 0x286e: 0x000d, 0x286f: 0x000d,\n\t0x2870: 0x0005, 0x2871: 0x0005, 0x2872: 0x0005, 0x2873: 0x0005, 0x2874: 0x0005, 0x2875: 0x0005,\n\t0x2876: 0x0005, 0x2877: 0x0005, 0x2878: 0x0005, 0x2879: 0x0005, 0x287a: 0x000d, 0x287b: 0x000d,\n\t0x287c: 0x000d, 0x287d: 0x000d, 0x287e: 0x000d, 0x287f: 0x000d,\n\t// Block 0xa2, offset 0x2880\n\t0x2880: 0x0001, 0x2881: 0x0001, 0x2882: 0x0001, 0x2883: 0x0001, 0x2884: 0x0001, 0x2885: 0x0001,\n\t0x2886: 0x0001, 0x2887: 0x0001, 0x2888: 0x0001, 0x2889: 0x0001, 0x288a: 0x0001, 0x288b: 0x0001,\n\t0x288c: 0x0001, 0x288d: 0x0001, 0x288e: 0x0001, 0x288f: 0x0001, 0x2890: 0x0001, 0x2891: 0x0001,\n\t0x2892: 0x0001, 0x2893: 0x0001, 0x2894: 0x0001, 0x2895: 0x0001, 0x2896: 0x0001, 0x2897: 0x0001,\n\t0x2898: 0x0001, 0x2899: 0x0001, 0x289a: 0x0001, 0x289b: 0x0001, 0x289c: 0x0001, 0x289d: 0x0001,\n\t0x289e: 0x0001, 0x289f: 0x0001, 0x28a0: 0x0005, 0x28a1: 0x0005, 0x28a2: 0x0005, 0x28a3: 0x0005,\n\t0x28a4: 0x0005, 0x28a5: 0x0005, 0x28a6: 0x0005, 0x28a7: 0x0005, 0x28a8: 0x0005, 0x28a9: 0x0005,\n\t0x28aa: 0x0005, 0x28ab: 0x0005, 0x28ac: 0x0005, 0x28ad: 0x0005, 0x28ae: 0x0005, 0x28af: 0x0005,\n\t0x28b0: 0x0005, 0x28b1: 0x0005, 0x28b2: 0x0005, 0x28b3: 0x0005, 0x28b4: 0x0005, 0x28b5: 0x0005,\n\t0x28b6: 0x0005, 0x28b7: 0x0005, 0x28b8: 0x0005, 0x28b9: 0x0005, 0x28ba: 0x0005, 0x28bb: 0x0005,\n\t0x28bc: 0x0005, 0x28bd: 0x0005, 0x28be: 0x0005, 0x28bf: 0x0001,\n\t// Block 0xa3, offset 0x28c0\n\t0x28c0: 0x0001, 0x28c1: 0x0001, 0x28c2: 0x0001, 0x28c3: 0x0001, 0x28c4: 0x0001, 0x28c5: 0x0001,\n\t0x28c6: 0x0001, 0x28c7: 0x0001, 0x28c8: 0x0001, 0x28c9: 0x0001, 0x28ca: 0x0001, 0x28cb: 0x0001,\n\t0x28cc: 0x0001, 0x28cd: 0x0001, 0x28ce: 0x0001, 0x28cf: 0x0001, 0x28d0: 0x0001, 0x28d1: 0x0001,\n\t0x28d2: 0x0001, 0x28d3: 0x0001, 0x28d4: 0x0001, 0x28d5: 0x0001, 0x28d6: 0x0001, 0x28d7: 0x0001,\n\t0x28d8: 0x0001, 0x28d9: 0x0001, 0x28da: 0x0001, 0x28db: 0x0001, 0x28dc: 0x0001, 0x28dd: 0x0001,\n\t0x28de: 0x0001, 0x28df: 0x0001, 0x28e0: 0x0001, 0x28e1: 0x0001, 0x28e2: 0x0001, 0x28e3: 0x0001,\n\t0x28e4: 0x0001, 0x28e5: 0x0001, 0x28e6: 0x0001, 0x28e7: 0x0001, 0x28e8: 0x0001, 0x28e9: 0x0001,\n\t0x28ea: 0x0001, 0x28eb: 0x0001, 0x28ec: 0x0001, 0x28ed: 0x0001, 0x28ee: 0x0001, 0x28ef: 0x0001,\n\t0x28f0: 0x000d, 0x28f1: 0x000d, 0x28f2: 0x000d, 0x28f3: 0x000d, 0x28f4: 0x000d, 0x28f5: 0x000d,\n\t0x28f6: 0x000d, 0x28f7: 0x000d, 0x28f8: 0x000d, 0x28f9: 0x000d, 0x28fa: 0x000d, 0x28fb: 0x000d,\n\t0x28fc: 0x000d, 0x28fd: 0x000d, 0x28fe: 0x000d, 0x28ff: 0x000d,\n\t// Block 0xa4, offset 0x2900\n\t0x2900: 0x000d, 0x2901: 0x000d, 0x2902: 0x000d, 0x2903: 0x000d, 0x2904: 0x000d, 0x2905: 0x000d,\n\t0x2906: 0x000c, 0x2907: 0x000c, 0x2908: 0x000c, 0x2909: 0x000c, 0x290a: 0x000c, 0x290b: 0x000c,\n\t0x290c: 0x000c, 0x290d: 0x000c, 0x290e: 0x000c, 0x290f: 0x000c, 0x2910: 0x000c, 0x2911: 0x000d,\n\t0x2912: 0x000d, 0x2913: 0x000d, 0x2914: 0x000d, 0x2915: 0x000d, 0x2916: 0x000d, 0x2917: 0x000d,\n\t0x2918: 0x000d, 0x2919: 0x000d, 0x291a: 0x000d, 0x291b: 0x000d, 0x291c: 0x000d, 0x291d: 0x000d,\n\t0x291e: 0x000d, 0x291f: 0x000d, 0x2920: 0x000d, 0x2921: 0x000d, 0x2922: 0x000d, 0x2923: 0x000d,\n\t0x2924: 0x000d, 0x2925: 0x000d, 0x2926: 0x000d, 0x2927: 0x000d, 0x2928: 0x000d, 0x2929: 0x000d,\n\t0x292a: 0x000d, 0x292b: 0x000d, 0x292c: 0x000d, 0x292d: 0x000d, 0x292e: 0x000d, 0x292f: 0x000d,\n\t0x2930: 0x0001, 0x2931: 0x0001, 0x2932: 0x0001, 0x2933: 0x0001, 0x2934: 0x0001, 0x2935: 0x0001,\n\t0x2936: 0x0001, 0x2937: 0x0001, 0x2938: 0x0001, 0x2939: 0x0001, 0x293a: 0x0001, 0x293b: 0x0001,\n\t0x293c: 0x0001, 0x293d: 0x0001, 0x293e: 0x0001, 0x293f: 0x0001,\n\t// Block 0xa5, offset 0x2940\n\t0x2941: 0x000c,\n\t0x2978: 0x000c, 0x2979: 0x000c, 0x297a: 0x000c, 0x297b: 0x000c,\n\t0x297c: 0x000c, 0x297d: 0x000c, 0x297e: 0x000c, 0x297f: 0x000c,\n\t// Block 0xa6, offset 0x2980\n\t0x2980: 0x000c, 0x2981: 0x000c, 0x2982: 0x000c, 0x2983: 0x000c, 0x2984: 0x000c, 0x2985: 0x000c,\n\t0x2986: 0x000c,\n\t0x2992: 0x000a, 0x2993: 0x000a, 0x2994: 0x000a, 0x2995: 0x000a, 0x2996: 0x000a, 0x2997: 0x000a,\n\t0x2998: 0x000a, 0x2999: 0x000a, 0x299a: 0x000a, 0x299b: 0x000a, 0x299c: 0x000a, 0x299d: 0x000a,\n\t0x299e: 0x000a, 0x299f: 0x000a, 0x29a0: 0x000a, 0x29a1: 0x000a, 0x29a2: 0x000a, 0x29a3: 0x000a,\n\t0x29a4: 0x000a, 0x29a5: 0x000a,\n\t0x29bf: 0x000c,\n\t// Block 0xa7, offset 0x29c0\n\t0x29c0: 0x000c, 0x29c1: 0x000c,\n\t0x29f3: 0x000c, 0x29f4: 0x000c, 0x29f5: 0x000c,\n\t0x29f6: 0x000c, 0x29f9: 0x000c, 0x29fa: 0x000c,\n\t// Block 0xa8, offset 0x2a00\n\t0x2a00: 0x000c, 0x2a01: 0x000c, 0x2a02: 0x000c,\n\t0x2a27: 0x000c, 0x2a28: 0x000c, 0x2a29: 0x000c,\n\t0x2a2a: 0x000c, 0x2a2b: 0x000c, 0x2a2d: 0x000c, 0x2a2e: 0x000c, 0x2a2f: 0x000c,\n\t0x2a30: 0x000c, 0x2a31: 0x000c, 0x2a32: 0x000c, 0x2a33: 0x000c, 0x2a34: 0x000c,\n\t// Block 0xa9, offset 0x2a40\n\t0x2a73: 0x000c,\n\t// Block 0xaa, offset 0x2a80\n\t0x2a80: 0x000c, 0x2a81: 0x000c,\n\t0x2ab6: 0x000c, 0x2ab7: 0x000c, 0x2ab8: 0x000c, 0x2ab9: 0x000c, 0x2aba: 0x000c, 0x2abb: 0x000c,\n\t0x2abc: 0x000c, 0x2abd: 0x000c, 0x2abe: 0x000c,\n\t// Block 0xab, offset 0x2ac0\n\t0x2ac9: 0x000c, 0x2aca: 0x000c, 0x2acb: 0x000c,\n\t0x2acc: 0x000c,\n\t// Block 0xac, offset 0x2b00\n\t0x2b2f: 0x000c,\n\t0x2b30: 0x000c, 0x2b31: 0x000c, 0x2b34: 0x000c,\n\t0x2b36: 0x000c, 0x2b37: 0x000c,\n\t0x2b3e: 0x000c,\n\t// Block 0xad, offset 0x2b40\n\t0x2b5f: 0x000c, 0x2b63: 0x000c,\n\t0x2b64: 0x000c, 0x2b65: 0x000c, 0x2b66: 0x000c, 0x2b67: 0x000c, 0x2b68: 0x000c, 0x2b69: 0x000c,\n\t0x2b6a: 0x000c,\n\t// Block 0xae, offset 0x2b80\n\t0x2b80: 0x000c,\n\t0x2ba6: 0x000c, 0x2ba7: 0x000c, 0x2ba8: 0x000c, 0x2ba9: 0x000c,\n\t0x2baa: 0x000c, 0x2bab: 0x000c, 0x2bac: 0x000c,\n\t0x2bb0: 0x000c, 0x2bb1: 0x000c, 0x2bb2: 0x000c, 0x2bb3: 0x000c, 0x2bb4: 0x000c,\n\t// Block 0xaf, offset 0x2bc0\n\t0x2bf8: 0x000c, 0x2bf9: 0x000c, 0x2bfa: 0x000c, 0x2bfb: 0x000c,\n\t0x2bfc: 0x000c, 0x2bfd: 0x000c, 0x2bfe: 0x000c, 0x2bff: 0x000c,\n\t// Block 0xb0, offset 0x2c00\n\t0x2c02: 0x000c, 0x2c03: 0x000c, 0x2c04: 0x000c,\n\t0x2c06: 0x000c,\n\t0x2c1e: 0x000c,\n\t// Block 0xb1, offset 0x2c40\n\t0x2c73: 0x000c, 0x2c74: 0x000c, 0x2c75: 0x000c,\n\t0x2c76: 0x000c, 0x2c77: 0x000c, 0x2c78: 0x000c, 0x2c7a: 0x000c,\n\t0x2c7f: 0x000c,\n\t// Block 0xb2, offset 0x2c80\n\t0x2c80: 0x000c, 0x2c82: 0x000c, 0x2c83: 0x000c,\n\t// Block 0xb3, offset 0x2cc0\n\t0x2cf2: 0x000c, 0x2cf3: 0x000c, 0x2cf4: 0x000c, 0x2cf5: 0x000c,\n\t0x2cfc: 0x000c, 0x2cfd: 0x000c, 0x2cff: 0x000c,\n\t// Block 0xb4, offset 0x2d00\n\t0x2d00: 0x000c,\n\t0x2d1c: 0x000c, 0x2d1d: 0x000c,\n\t// Block 0xb5, offset 0x2d40\n\t0x2d73: 0x000c, 0x2d74: 0x000c, 0x2d75: 0x000c,\n\t0x2d76: 0x000c, 0x2d77: 0x000c, 0x2d78: 0x000c, 0x2d79: 0x000c, 0x2d7a: 0x000c,\n\t0x2d7d: 0x000c, 0x2d7f: 0x000c,\n\t// Block 0xb6, offset 0x2d80\n\t0x2d80: 0x000c,\n\t0x2da0: 0x000a, 0x2da1: 0x000a, 0x2da2: 0x000a, 0x2da3: 0x000a,\n\t0x2da4: 0x000a, 0x2da5: 0x000a, 0x2da6: 0x000a, 0x2da7: 0x000a, 0x2da8: 0x000a, 0x2da9: 0x000a,\n\t0x2daa: 0x000a, 0x2dab: 0x000a, 0x2dac: 0x000a,\n\t// Block 0xb7, offset 0x2dc0\n\t0x2deb: 0x000c, 0x2ded: 0x000c,\n\t0x2df0: 0x000c, 0x2df1: 0x000c, 0x2df2: 0x000c, 0x2df3: 0x000c, 0x2df4: 0x000c, 0x2df5: 0x000c,\n\t0x2df7: 0x000c,\n\t// Block 0xb8, offset 0x2e00\n\t0x2e1d: 0x000c,\n\t0x2e1e: 0x000c, 0x2e1f: 0x000c, 0x2e22: 0x000c, 0x2e23: 0x000c,\n\t0x2e24: 0x000c, 0x2e25: 0x000c, 0x2e27: 0x000c, 0x2e28: 0x000c, 0x2e29: 0x000c,\n\t0x2e2a: 0x000c, 0x2e2b: 0x000c,\n\t// Block 0xb9, offset 0x2e40\n\t0x2e6f: 0x000c,\n\t0x2e70: 0x000c, 0x2e71: 0x000c, 0x2e72: 0x000c, 0x2e73: 0x000c, 0x2e74: 0x000c, 0x2e75: 0x000c,\n\t0x2e76: 0x000c, 0x2e77: 0x000c, 0x2e79: 0x000c, 0x2e7a: 0x000c,\n\t// Block 0xba, offset 0x2e80\n\t0x2e81: 0x000c, 0x2e82: 0x000c, 0x2e83: 0x000c, 0x2e84: 0x000c, 0x2e85: 0x000c,\n\t0x2e86: 0x000c, 0x2e89: 0x000c, 0x2e8a: 0x000c,\n\t0x2eb3: 0x000c, 0x2eb4: 0x000c, 0x2eb5: 0x000c,\n\t0x2eb6: 0x000c, 0x2eb7: 0x000c, 0x2eb8: 0x000c, 0x2ebb: 0x000c,\n\t0x2ebc: 0x000c, 0x2ebd: 0x000c, 0x2ebe: 0x000c,\n\t// Block 0xbb, offset 0x2ec0\n\t0x2ec7: 0x000c,\n\t0x2ed1: 0x000c,\n\t0x2ed2: 0x000c, 0x2ed3: 0x000c, 0x2ed4: 0x000c, 0x2ed5: 0x000c, 0x2ed6: 0x000c,\n\t0x2ed9: 0x000c, 0x2eda: 0x000c, 0x2edb: 0x000c,\n\t// Block 0xbc, offset 0x2f00\n\t0x2f0a: 0x000c, 0x2f0b: 0x000c,\n\t0x2f0c: 0x000c, 0x2f0d: 0x000c, 0x2f0e: 0x000c, 0x2f0f: 0x000c, 0x2f10: 0x000c, 0x2f11: 0x000c,\n\t0x2f12: 0x000c, 0x2f13: 0x000c, 0x2f14: 0x000c, 0x2f15: 0x000c, 0x2f16: 0x000c,\n\t0x2f18: 0x000c, 0x2f19: 0x000c,\n\t// Block 0xbd, offset 0x2f40\n\t0x2f70: 0x000c, 0x2f71: 0x000c, 0x2f72: 0x000c, 0x2f73: 0x000c, 0x2f74: 0x000c, 0x2f75: 0x000c,\n\t0x2f76: 0x000c, 0x2f78: 0x000c, 0x2f79: 0x000c, 0x2f7a: 0x000c, 0x2f7b: 0x000c,\n\t0x2f7c: 0x000c, 0x2f7d: 0x000c,\n\t// Block 0xbe, offset 0x2f80\n\t0x2f92: 0x000c, 0x2f93: 0x000c, 0x2f94: 0x000c, 0x2f95: 0x000c, 0x2f96: 0x000c, 0x2f97: 0x000c,\n\t0x2f98: 0x000c, 0x2f99: 0x000c, 0x2f9a: 0x000c, 0x2f9b: 0x000c, 0x2f9c: 0x000c, 0x2f9d: 0x000c,\n\t0x2f9e: 0x000c, 0x2f9f: 0x000c, 0x2fa0: 0x000c, 0x2fa1: 0x000c, 0x2fa2: 0x000c, 0x2fa3: 0x000c,\n\t0x2fa4: 0x000c, 0x2fa5: 0x000c, 0x2fa6: 0x000c, 0x2fa7: 0x000c,\n\t0x2faa: 0x000c, 0x2fab: 0x000c, 0x2fac: 0x000c, 0x2fad: 0x000c, 0x2fae: 0x000c, 0x2faf: 0x000c,\n\t0x2fb0: 0x000c, 0x2fb2: 0x000c, 0x2fb3: 0x000c, 0x2fb5: 0x000c,\n\t0x2fb6: 0x000c,\n\t// Block 0xbf, offset 0x2fc0\n\t0x2ff1: 0x000c, 0x2ff2: 0x000c, 0x2ff3: 0x000c, 0x2ff4: 0x000c, 0x2ff5: 0x000c,\n\t0x2ff6: 0x000c, 0x2ffa: 0x000c,\n\t0x2ffc: 0x000c, 0x2ffd: 0x000c, 0x2fff: 0x000c,\n\t// Block 0xc0, offset 0x3000\n\t0x3000: 0x000c, 0x3001: 0x000c, 0x3002: 0x000c, 0x3003: 0x000c, 0x3004: 0x000c, 0x3005: 0x000c,\n\t0x3007: 0x000c,\n\t// Block 0xc1, offset 0x3040\n\t0x3050: 0x000c, 0x3051: 0x000c,\n\t0x3055: 0x000c, 0x3057: 0x000c,\n\t// Block 0xc2, offset 0x3080\n\t0x30b3: 0x000c, 0x30b4: 0x000c,\n\t// Block 0xc3, offset 0x30c0\n\t0x30f0: 0x000c, 0x30f1: 0x000c, 0x30f2: 0x000c, 0x30f3: 0x000c, 0x30f4: 0x000c,\n\t// Block 0xc4, offset 0x3100\n\t0x3130: 0x000c, 0x3131: 0x000c, 0x3132: 0x000c, 0x3133: 0x000c, 0x3134: 0x000c, 0x3135: 0x000c,\n\t0x3136: 0x000c,\n\t// Block 0xc5, offset 0x3140\n\t0x314f: 0x000c, 0x3150: 0x000c, 0x3151: 0x000c,\n\t0x3152: 0x000c,\n\t// Block 0xc6, offset 0x3180\n\t0x319d: 0x000c,\n\t0x319e: 0x000c, 0x31a0: 0x000b, 0x31a1: 0x000b, 0x31a2: 0x000b, 0x31a3: 0x000b,\n\t// Block 0xc7, offset 0x31c0\n\t0x31e7: 0x000c, 0x31e8: 0x000c, 0x31e9: 0x000c,\n\t0x31f3: 0x000b, 0x31f4: 0x000b, 0x31f5: 0x000b,\n\t0x31f6: 0x000b, 0x31f7: 0x000b, 0x31f8: 0x000b, 0x31f9: 0x000b, 0x31fa: 0x000b, 0x31fb: 0x000c,\n\t0x31fc: 0x000c, 0x31fd: 0x000c, 0x31fe: 0x000c, 0x31ff: 0x000c,\n\t// Block 0xc8, offset 0x3200\n\t0x3200: 0x000c, 0x3201: 0x000c, 0x3202: 0x000c, 0x3205: 0x000c,\n\t0x3206: 0x000c, 0x3207: 0x000c, 0x3208: 0x000c, 0x3209: 0x000c, 0x320a: 0x000c, 0x320b: 0x000c,\n\t0x322a: 0x000c, 0x322b: 0x000c, 0x322c: 0x000c, 0x322d: 0x000c,\n\t// Block 0xc9, offset 0x3240\n\t0x3240: 0x000a, 0x3241: 0x000a, 0x3242: 0x000c, 0x3243: 0x000c, 0x3244: 0x000c, 0x3245: 0x000a,\n\t// Block 0xca, offset 0x3280\n\t0x3280: 0x000a, 0x3281: 0x000a, 0x3282: 0x000a, 0x3283: 0x000a, 0x3284: 0x000a, 0x3285: 0x000a,\n\t0x3286: 0x000a, 0x3287: 0x000a, 0x3288: 0x000a, 0x3289: 0x000a, 0x328a: 0x000a, 0x328b: 0x000a,\n\t0x328c: 0x000a, 0x328d: 0x000a, 0x328e: 0x000a, 0x328f: 0x000a, 0x3290: 0x000a, 0x3291: 0x000a,\n\t0x3292: 0x000a, 0x3293: 0x000a, 0x3294: 0x000a, 0x3295: 0x000a, 0x3296: 0x000a,\n\t// Block 0xcb, offset 0x32c0\n\t0x32db: 0x000a,\n\t// Block 0xcc, offset 0x3300\n\t0x3315: 0x000a,\n\t// Block 0xcd, offset 0x3340\n\t0x334f: 0x000a,\n\t// Block 0xce, offset 0x3380\n\t0x3389: 0x000a,\n\t// Block 0xcf, offset 0x33c0\n\t0x33c3: 0x000a,\n\t0x33ce: 0x0002, 0x33cf: 0x0002, 0x33d0: 0x0002, 0x33d1: 0x0002,\n\t0x33d2: 0x0002, 0x33d3: 0x0002, 0x33d4: 0x0002, 0x33d5: 0x0002, 0x33d6: 0x0002, 0x33d7: 0x0002,\n\t0x33d8: 0x0002, 0x33d9: 0x0002, 0x33da: 0x0002, 0x33db: 0x0002, 0x33dc: 0x0002, 0x33dd: 0x0002,\n\t0x33de: 0x0002, 0x33df: 0x0002, 0x33e0: 0x0002, 0x33e1: 0x0002, 0x33e2: 0x0002, 0x33e3: 0x0002,\n\t0x33e4: 0x0002, 0x33e5: 0x0002, 0x33e6: 0x0002, 0x33e7: 0x0002, 0x33e8: 0x0002, 0x33e9: 0x0002,\n\t0x33ea: 0x0002, 0x33eb: 0x0002, 0x33ec: 0x0002, 0x33ed: 0x0002, 0x33ee: 0x0002, 0x33ef: 0x0002,\n\t0x33f0: 0x0002, 0x33f1: 0x0002, 0x33f2: 0x0002, 0x33f3: 0x0002, 0x33f4: 0x0002, 0x33f5: 0x0002,\n\t0x33f6: 0x0002, 0x33f7: 0x0002, 0x33f8: 0x0002, 0x33f9: 0x0002, 0x33fa: 0x0002, 0x33fb: 0x0002,\n\t0x33fc: 0x0002, 0x33fd: 0x0002, 0x33fe: 0x0002, 0x33ff: 0x0002,\n\t// Block 0xd0, offset 0x3400\n\t0x3400: 0x000c, 0x3401: 0x000c, 0x3402: 0x000c, 0x3403: 0x000c, 0x3404: 0x000c, 0x3405: 0x000c,\n\t0x3406: 0x000c, 0x3407: 0x000c, 0x3408: 0x000c, 0x3409: 0x000c, 0x340a: 0x000c, 0x340b: 0x000c,\n\t0x340c: 0x000c, 0x340d: 0x000c, 0x340e: 0x000c, 0x340f: 0x000c, 0x3410: 0x000c, 0x3411: 0x000c,\n\t0x3412: 0x000c, 0x3413: 0x000c, 0x3414: 0x000c, 0x3415: 0x000c, 0x3416: 0x000c, 0x3417: 0x000c,\n\t0x3418: 0x000c, 0x3419: 0x000c, 0x341a: 0x000c, 0x341b: 0x000c, 0x341c: 0x000c, 0x341d: 0x000c,\n\t0x341e: 0x000c, 0x341f: 0x000c, 0x3420: 0x000c, 0x3421: 0x000c, 0x3422: 0x000c, 0x3423: 0x000c,\n\t0x3424: 0x000c, 0x3425: 0x000c, 0x3426: 0x000c, 0x3427: 0x000c, 0x3428: 0x000c, 0x3429: 0x000c,\n\t0x342a: 0x000c, 0x342b: 0x000c, 0x342c: 0x000c, 0x342d: 0x000c, 0x342e: 0x000c, 0x342f: 0x000c,\n\t0x3430: 0x000c, 0x3431: 0x000c, 0x3432: 0x000c, 0x3433: 0x000c, 0x3434: 0x000c, 0x3435: 0x000c,\n\t0x3436: 0x000c, 0x343b: 0x000c,\n\t0x343c: 0x000c, 0x343d: 0x000c, 0x343e: 0x000c, 0x343f: 0x000c,\n\t// Block 0xd1, offset 0x3440\n\t0x3440: 0x000c, 0x3441: 0x000c, 0x3442: 0x000c, 0x3443: 0x000c, 0x3444: 0x000c, 0x3445: 0x000c,\n\t0x3446: 0x000c, 0x3447: 0x000c, 0x3448: 0x000c, 0x3449: 0x000c, 0x344a: 0x000c, 0x344b: 0x000c,\n\t0x344c: 0x000c, 0x344d: 0x000c, 0x344e: 0x000c, 0x344f: 0x000c, 0x3450: 0x000c, 0x3451: 0x000c,\n\t0x3452: 0x000c, 0x3453: 0x000c, 0x3454: 0x000c, 0x3455: 0x000c, 0x3456: 0x000c, 0x3457: 0x000c,\n\t0x3458: 0x000c, 0x3459: 0x000c, 0x345a: 0x000c, 0x345b: 0x000c, 0x345c: 0x000c, 0x345d: 0x000c,\n\t0x345e: 0x000c, 0x345f: 0x000c, 0x3460: 0x000c, 0x3461: 0x000c, 0x3462: 0x000c, 0x3463: 0x000c,\n\t0x3464: 0x000c, 0x3465: 0x000c, 0x3466: 0x000c, 0x3467: 0x000c, 0x3468: 0x000c, 0x3469: 0x000c,\n\t0x346a: 0x000c, 0x346b: 0x000c, 0x346c: 0x000c,\n\t0x3475: 0x000c,\n\t// Block 0xd2, offset 0x3480\n\t0x3484: 0x000c,\n\t0x349b: 0x000c, 0x349c: 0x000c, 0x349d: 0x000c,\n\t0x349e: 0x000c, 0x349f: 0x000c, 0x34a1: 0x000c, 0x34a2: 0x000c, 0x34a3: 0x000c,\n\t0x34a4: 0x000c, 0x34a5: 0x000c, 0x34a6: 0x000c, 0x34a7: 0x000c, 0x34a8: 0x000c, 0x34a9: 0x000c,\n\t0x34aa: 0x000c, 0x34ab: 0x000c, 0x34ac: 0x000c, 0x34ad: 0x000c, 0x34ae: 0x000c, 0x34af: 0x000c,\n\t// Block 0xd3, offset 0x34c0\n\t0x34c0: 0x000c, 0x34c1: 0x000c, 0x34c2: 0x000c, 0x34c3: 0x000c, 0x34c4: 0x000c, 0x34c5: 0x000c,\n\t0x34c6: 0x000c, 0x34c8: 0x000c, 0x34c9: 0x000c, 0x34ca: 0x000c, 0x34cb: 0x000c,\n\t0x34cc: 0x000c, 0x34cd: 0x000c, 0x34ce: 0x000c, 0x34cf: 0x000c, 0x34d0: 0x000c, 0x34d1: 0x000c,\n\t0x34d2: 0x000c, 0x34d3: 0x000c, 0x34d4: 0x000c, 0x34d5: 0x000c, 0x34d6: 0x000c, 0x34d7: 0x000c,\n\t0x34d8: 0x000c, 0x34db: 0x000c, 0x34dc: 0x000c, 0x34dd: 0x000c,\n\t0x34de: 0x000c, 0x34df: 0x000c, 0x34e0: 0x000c, 0x34e1: 0x000c, 0x34e3: 0x000c,\n\t0x34e4: 0x000c, 0x34e6: 0x000c, 0x34e7: 0x000c, 0x34e8: 0x000c, 0x34e9: 0x000c,\n\t0x34ea: 0x000c,\n\t// Block 0xd4, offset 0x3500\n\t0x3500: 0x0001, 0x3501: 0x0001, 0x3502: 0x0001, 0x3503: 0x0001, 0x3504: 0x0001, 0x3505: 0x0001,\n\t0x3506: 0x0001, 0x3507: 0x0001, 0x3508: 0x0001, 0x3509: 0x0001, 0x350a: 0x0001, 0x350b: 0x0001,\n\t0x350c: 0x0001, 0x350d: 0x0001, 0x350e: 0x0001, 0x350f: 0x0001, 0x3510: 0x000c, 0x3511: 0x000c,\n\t0x3512: 0x000c, 0x3513: 0x000c, 0x3514: 0x000c, 0x3515: 0x000c, 0x3516: 0x000c, 0x3517: 0x0001,\n\t0x3518: 0x0001, 0x3519: 0x0001, 0x351a: 0x0001, 0x351b: 0x0001, 0x351c: 0x0001, 0x351d: 0x0001,\n\t0x351e: 0x0001, 0x351f: 0x0001, 0x3520: 0x0001, 0x3521: 0x0001, 0x3522: 0x0001, 0x3523: 0x0001,\n\t0x3524: 0x0001, 0x3525: 0x0001, 0x3526: 0x0001, 0x3527: 0x0001, 0x3528: 0x0001, 0x3529: 0x0001,\n\t0x352a: 0x0001, 0x352b: 0x0001, 0x352c: 0x0001, 0x352d: 0x0001, 0x352e: 0x0001, 0x352f: 0x0001,\n\t0x3530: 0x0001, 0x3531: 0x0001, 0x3532: 0x0001, 0x3533: 0x0001, 0x3534: 0x0001, 0x3535: 0x0001,\n\t0x3536: 0x0001, 0x3537: 0x0001, 0x3538: 0x0001, 0x3539: 0x0001, 0x353a: 0x0001, 0x353b: 0x0001,\n\t0x353c: 0x0001, 0x353d: 0x0001, 0x353e: 0x0001, 0x353f: 0x0001,\n\t// Block 0xd5, offset 0x3540\n\t0x3540: 0x0001, 0x3541: 0x0001, 0x3542: 0x0001, 0x3543: 0x0001, 0x3544: 0x000c, 0x3545: 0x000c,\n\t0x3546: 0x000c, 0x3547: 0x000c, 0x3548: 0x000c, 0x3549: 0x000c, 0x354a: 0x000c, 0x354b: 0x0001,\n\t0x354c: 0x0001, 0x354d: 0x0001, 0x354e: 0x0001, 0x354f: 0x0001, 0x3550: 0x0001, 0x3551: 0x0001,\n\t0x3552: 0x0001, 0x3553: 0x0001, 0x3554: 0x0001, 0x3555: 0x0001, 0x3556: 0x0001, 0x3557: 0x0001,\n\t0x3558: 0x0001, 0x3559: 0x0001, 0x355a: 0x0001, 0x355b: 0x0001, 0x355c: 0x0001, 0x355d: 0x0001,\n\t0x355e: 0x0001, 0x355f: 0x0001, 0x3560: 0x0001, 0x3561: 0x0001, 0x3562: 0x0001, 0x3563: 0x0001,\n\t0x3564: 0x0001, 0x3565: 0x0001, 0x3566: 0x0001, 0x3567: 0x0001, 0x3568: 0x0001, 0x3569: 0x0001,\n\t0x356a: 0x0001, 0x356b: 0x0001, 0x356c: 0x0001, 0x356d: 0x0001, 0x356e: 0x0001, 0x356f: 0x0001,\n\t0x3570: 0x0001, 0x3571: 0x0001, 0x3572: 0x0001, 0x3573: 0x0001, 0x3574: 0x0001, 0x3575: 0x0001,\n\t0x3576: 0x0001, 0x3577: 0x0001, 0x3578: 0x0001, 0x3579: 0x0001, 0x357a: 0x0001, 0x357b: 0x0001,\n\t0x357c: 0x0001, 0x357d: 0x0001, 0x357e: 0x0001, 0x357f: 0x0001,\n\t// Block 0xd6, offset 0x3580\n\t0x3580: 0x000d, 0x3581: 0x000d, 0x3582: 0x000d, 0x3583: 0x000d, 0x3584: 0x000d, 0x3585: 0x000d,\n\t0x3586: 0x000d, 0x3587: 0x000d, 0x3588: 0x000d, 0x3589: 0x000d, 0x358a: 0x000d, 0x358b: 0x000d,\n\t0x358c: 0x000d, 0x358d: 0x000d, 0x358e: 0x000d, 0x358f: 0x000d, 0x3590: 0x000d, 0x3591: 0x000d,\n\t0x3592: 0x000d, 0x3593: 0x000d, 0x3594: 0x000d, 0x3595: 0x000d, 0x3596: 0x000d, 0x3597: 0x000d,\n\t0x3598: 0x000d, 0x3599: 0x000d, 0x359a: 0x000d, 0x359b: 0x000d, 0x359c: 0x000d, 0x359d: 0x000d,\n\t0x359e: 0x000d, 0x359f: 0x000d, 0x35a0: 0x000d, 0x35a1: 0x000d, 0x35a2: 0x000d, 0x35a3: 0x000d,\n\t0x35a4: 0x000d, 0x35a5: 0x000d, 0x35a6: 0x000d, 0x35a7: 0x000d, 0x35a8: 0x000d, 0x35a9: 0x000d,\n\t0x35aa: 0x000d, 0x35ab: 0x000d, 0x35ac: 0x000d, 0x35ad: 0x000d, 0x35ae: 0x000d, 0x35af: 0x000d,\n\t0x35b0: 0x000a, 0x35b1: 0x000a, 0x35b2: 0x000d, 0x35b3: 0x000d, 0x35b4: 0x000d, 0x35b5: 0x000d,\n\t0x35b6: 0x000d, 0x35b7: 0x000d, 0x35b8: 0x000d, 0x35b9: 0x000d, 0x35ba: 0x000d, 0x35bb: 0x000d,\n\t0x35bc: 0x000d, 0x35bd: 0x000d, 0x35be: 0x000d, 0x35bf: 0x000d,\n\t// Block 0xd7, offset 0x35c0\n\t0x35c0: 0x000a, 0x35c1: 0x000a, 0x35c2: 0x000a, 0x35c3: 0x000a, 0x35c4: 0x000a, 0x35c5: 0x000a,\n\t0x35c6: 0x000a, 0x35c7: 0x000a, 0x35c8: 0x000a, 0x35c9: 0x000a, 0x35ca: 0x000a, 0x35cb: 0x000a,\n\t0x35cc: 0x000a, 0x35cd: 0x000a, 0x35ce: 0x000a, 0x35cf: 0x000a, 0x35d0: 0x000a, 0x35d1: 0x000a,\n\t0x35d2: 0x000a, 0x35d3: 0x000a, 0x35d4: 0x000a, 0x35d5: 0x000a, 0x35d6: 0x000a, 0x35d7: 0x000a,\n\t0x35d8: 0x000a, 0x35d9: 0x000a, 0x35da: 0x000a, 0x35db: 0x000a, 0x35dc: 0x000a, 0x35dd: 0x000a,\n\t0x35de: 0x000a, 0x35df: 0x000a, 0x35e0: 0x000a, 0x35e1: 0x000a, 0x35e2: 0x000a, 0x35e3: 0x000a,\n\t0x35e4: 0x000a, 0x35e5: 0x000a, 0x35e6: 0x000a, 0x35e7: 0x000a, 0x35e8: 0x000a, 0x35e9: 0x000a,\n\t0x35ea: 0x000a, 0x35eb: 0x000a,\n\t0x35f0: 0x000a, 0x35f1: 0x000a, 0x35f2: 0x000a, 0x35f3: 0x000a, 0x35f4: 0x000a, 0x35f5: 0x000a,\n\t0x35f6: 0x000a, 0x35f7: 0x000a, 0x35f8: 0x000a, 0x35f9: 0x000a, 0x35fa: 0x000a, 0x35fb: 0x000a,\n\t0x35fc: 0x000a, 0x35fd: 0x000a, 0x35fe: 0x000a, 0x35ff: 0x000a,\n\t// Block 0xd8, offset 0x3600\n\t0x3600: 0x000a, 0x3601: 0x000a, 0x3602: 0x000a, 0x3603: 0x000a, 0x3604: 0x000a, 0x3605: 0x000a,\n\t0x3606: 0x000a, 0x3607: 0x000a, 0x3608: 0x000a, 0x3609: 0x000a, 0x360a: 0x000a, 0x360b: 0x000a,\n\t0x360c: 0x000a, 0x360d: 0x000a, 0x360e: 0x000a, 0x360f: 0x000a, 0x3610: 0x000a, 0x3611: 0x000a,\n\t0x3612: 0x000a, 0x3613: 0x000a,\n\t0x3620: 0x000a, 0x3621: 0x000a, 0x3622: 0x000a, 0x3623: 0x000a,\n\t0x3624: 0x000a, 0x3625: 0x000a, 0x3626: 0x000a, 0x3627: 0x000a, 0x3628: 0x000a, 0x3629: 0x000a,\n\t0x362a: 0x000a, 0x362b: 0x000a, 0x362c: 0x000a, 0x362d: 0x000a, 0x362e: 0x000a,\n\t0x3631: 0x000a, 0x3632: 0x000a, 0x3633: 0x000a, 0x3634: 0x000a, 0x3635: 0x000a,\n\t0x3636: 0x000a, 0x3637: 0x000a, 0x3638: 0x000a, 0x3639: 0x000a, 0x363a: 0x000a, 0x363b: 0x000a,\n\t0x363c: 0x000a, 0x363d: 0x000a, 0x363e: 0x000a, 0x363f: 0x000a,\n\t// Block 0xd9, offset 0x3640\n\t0x3641: 0x000a, 0x3642: 0x000a, 0x3643: 0x000a, 0x3644: 0x000a, 0x3645: 0x000a,\n\t0x3646: 0x000a, 0x3647: 0x000a, 0x3648: 0x000a, 0x3649: 0x000a, 0x364a: 0x000a, 0x364b: 0x000a,\n\t0x364c: 0x000a, 0x364d: 0x000a, 0x364e: 0x000a, 0x364f: 0x000a, 0x3651: 0x000a,\n\t0x3652: 0x000a, 0x3653: 0x000a, 0x3654: 0x000a, 0x3655: 0x000a, 0x3656: 0x000a, 0x3657: 0x000a,\n\t0x3658: 0x000a, 0x3659: 0x000a, 0x365a: 0x000a, 0x365b: 0x000a, 0x365c: 0x000a, 0x365d: 0x000a,\n\t0x365e: 0x000a, 0x365f: 0x000a, 0x3660: 0x000a, 0x3661: 0x000a, 0x3662: 0x000a, 0x3663: 0x000a,\n\t0x3664: 0x000a, 0x3665: 0x000a, 0x3666: 0x000a, 0x3667: 0x000a, 0x3668: 0x000a, 0x3669: 0x000a,\n\t0x366a: 0x000a, 0x366b: 0x000a, 0x366c: 0x000a, 0x366d: 0x000a, 0x366e: 0x000a, 0x366f: 0x000a,\n\t0x3670: 0x000a, 0x3671: 0x000a, 0x3672: 0x000a, 0x3673: 0x000a, 0x3674: 0x000a, 0x3675: 0x000a,\n\t// Block 0xda, offset 0x3680\n\t0x3680: 0x0002, 0x3681: 0x0002, 0x3682: 0x0002, 0x3683: 0x0002, 0x3684: 0x0002, 0x3685: 0x0002,\n\t0x3686: 0x0002, 0x3687: 0x0002, 0x3688: 0x0002, 0x3689: 0x0002, 0x368a: 0x0002, 0x368b: 0x000a,\n\t0x368c: 0x000a,\n\t0x36af: 0x000a,\n\t// Block 0xdb, offset 0x36c0\n\t0x36ea: 0x000a, 0x36eb: 0x000a,\n\t// Block 0xdc, offset 0x3700\n\t0x3720: 0x000a, 0x3721: 0x000a, 0x3722: 0x000a, 0x3723: 0x000a,\n\t0x3724: 0x000a, 0x3725: 0x000a,\n\t// Block 0xdd, offset 0x3740\n\t0x3740: 0x000a, 0x3741: 0x000a, 0x3742: 0x000a, 0x3743: 0x000a, 0x3744: 0x000a, 0x3745: 0x000a,\n\t0x3746: 0x000a, 0x3747: 0x000a, 0x3748: 0x000a, 0x3749: 0x000a, 0x374a: 0x000a, 0x374b: 0x000a,\n\t0x374c: 0x000a, 0x374d: 0x000a, 0x374e: 0x000a, 0x374f: 0x000a, 0x3750: 0x000a, 0x3751: 0x000a,\n\t0x3752: 0x000a, 0x3753: 0x000a, 0x3754: 0x000a,\n\t0x3760: 0x000a, 0x3761: 0x000a, 0x3762: 0x000a, 0x3763: 0x000a,\n\t0x3764: 0x000a, 0x3765: 0x000a, 0x3766: 0x000a, 0x3767: 0x000a, 0x3768: 0x000a, 0x3769: 0x000a,\n\t0x376a: 0x000a, 0x376b: 0x000a, 0x376c: 0x000a,\n\t0x3770: 0x000a, 0x3771: 0x000a, 0x3772: 0x000a, 0x3773: 0x000a, 0x3774: 0x000a, 0x3775: 0x000a,\n\t0x3776: 0x000a, 0x3777: 0x000a, 0x3778: 0x000a, 0x3779: 0x000a,\n\t// Block 0xde, offset 0x3780\n\t0x3780: 0x000a, 0x3781: 0x000a, 0x3782: 0x000a, 0x3783: 0x000a, 0x3784: 0x000a, 0x3785: 0x000a,\n\t0x3786: 0x000a, 0x3787: 0x000a, 0x3788: 0x000a, 0x3789: 0x000a, 0x378a: 0x000a, 0x378b: 0x000a,\n\t0x378c: 0x000a, 0x378d: 0x000a, 0x378e: 0x000a, 0x378f: 0x000a, 0x3790: 0x000a, 0x3791: 0x000a,\n\t0x3792: 0x000a, 0x3793: 0x000a, 0x3794: 0x000a, 0x3795: 0x000a, 0x3796: 0x000a, 0x3797: 0x000a,\n\t0x3798: 0x000a,\n\t// Block 0xdf, offset 0x37c0\n\t0x37c0: 0x000a, 0x37c1: 0x000a, 0x37c2: 0x000a, 0x37c3: 0x000a, 0x37c4: 0x000a, 0x37c5: 0x000a,\n\t0x37c6: 0x000a, 0x37c7: 0x000a, 0x37c8: 0x000a, 0x37c9: 0x000a, 0x37ca: 0x000a, 0x37cb: 0x000a,\n\t0x37d0: 0x000a, 0x37d1: 0x000a,\n\t0x37d2: 0x000a, 0x37d3: 0x000a, 0x37d4: 0x000a, 0x37d5: 0x000a, 0x37d6: 0x000a, 0x37d7: 0x000a,\n\t0x37d8: 0x000a, 0x37d9: 0x000a, 0x37da: 0x000a, 0x37db: 0x000a, 0x37dc: 0x000a, 0x37dd: 0x000a,\n\t0x37de: 0x000a, 0x37df: 0x000a, 0x37e0: 0x000a, 0x37e1: 0x000a, 0x37e2: 0x000a, 0x37e3: 0x000a,\n\t0x37e4: 0x000a, 0x37e5: 0x000a, 0x37e6: 0x000a, 0x37e7: 0x000a, 0x37e8: 0x000a, 0x37e9: 0x000a,\n\t0x37ea: 0x000a, 0x37eb: 0x000a, 0x37ec: 0x000a, 0x37ed: 0x000a, 0x37ee: 0x000a, 0x37ef: 0x000a,\n\t0x37f0: 0x000a, 0x37f1: 0x000a, 0x37f2: 0x000a, 0x37f3: 0x000a, 0x37f4: 0x000a, 0x37f5: 0x000a,\n\t0x37f6: 0x000a, 0x37f7: 0x000a, 0x37f8: 0x000a, 0x37f9: 0x000a, 0x37fa: 0x000a, 0x37fb: 0x000a,\n\t0x37fc: 0x000a, 0x37fd: 0x000a, 0x37fe: 0x000a, 0x37ff: 0x000a,\n\t// Block 0xe0, offset 0x3800\n\t0x3800: 0x000a, 0x3801: 0x000a, 0x3802: 0x000a, 0x3803: 0x000a, 0x3804: 0x000a, 0x3805: 0x000a,\n\t0x3806: 0x000a, 0x3807: 0x000a,\n\t0x3810: 0x000a, 0x3811: 0x000a,\n\t0x3812: 0x000a, 0x3813: 0x000a, 0x3814: 0x000a, 0x3815: 0x000a, 0x3816: 0x000a, 0x3817: 0x000a,\n\t0x3818: 0x000a, 0x3819: 0x000a,\n\t0x3820: 0x000a, 0x3821: 0x000a, 0x3822: 0x000a, 0x3823: 0x000a,\n\t0x3824: 0x000a, 0x3825: 0x000a, 0x3826: 0x000a, 0x3827: 0x000a, 0x3828: 0x000a, 0x3829: 0x000a,\n\t0x382a: 0x000a, 0x382b: 0x000a, 0x382c: 0x000a, 0x382d: 0x000a, 0x382e: 0x000a, 0x382f: 0x000a,\n\t0x3830: 0x000a, 0x3831: 0x000a, 0x3832: 0x000a, 0x3833: 0x000a, 0x3834: 0x000a, 0x3835: 0x000a,\n\t0x3836: 0x000a, 0x3837: 0x000a, 0x3838: 0x000a, 0x3839: 0x000a, 0x383a: 0x000a, 0x383b: 0x000a,\n\t0x383c: 0x000a, 0x383d: 0x000a, 0x383e: 0x000a, 0x383f: 0x000a,\n\t// Block 0xe1, offset 0x3840\n\t0x3840: 0x000a, 0x3841: 0x000a, 0x3842: 0x000a, 0x3843: 0x000a, 0x3844: 0x000a, 0x3845: 0x000a,\n\t0x3846: 0x000a, 0x3847: 0x000a,\n\t0x3850: 0x000a, 0x3851: 0x000a,\n\t0x3852: 0x000a, 0x3853: 0x000a, 0x3854: 0x000a, 0x3855: 0x000a, 0x3856: 0x000a, 0x3857: 0x000a,\n\t0x3858: 0x000a, 0x3859: 0x000a, 0x385a: 0x000a, 0x385b: 0x000a, 0x385c: 0x000a, 0x385d: 0x000a,\n\t0x385e: 0x000a, 0x385f: 0x000a, 0x3860: 0x000a, 0x3861: 0x000a, 0x3862: 0x000a, 0x3863: 0x000a,\n\t0x3864: 0x000a, 0x3865: 0x000a, 0x3866: 0x000a, 0x3867: 0x000a, 0x3868: 0x000a, 0x3869: 0x000a,\n\t0x386a: 0x000a, 0x386b: 0x000a, 0x386c: 0x000a, 0x386d: 0x000a,\n\t// Block 0xe2, offset 0x3880\n\t0x3880: 0x000a, 0x3881: 0x000a, 0x3882: 0x000a, 0x3883: 0x000a, 0x3884: 0x000a, 0x3885: 0x000a,\n\t0x3886: 0x000a, 0x3887: 0x000a, 0x3888: 0x000a, 0x3889: 0x000a, 0x388a: 0x000a, 0x388b: 0x000a,\n\t0x3890: 0x000a, 0x3891: 0x000a,\n\t0x3892: 0x000a, 0x3893: 0x000a, 0x3894: 0x000a, 0x3895: 0x000a, 0x3896: 0x000a, 0x3897: 0x000a,\n\t0x3898: 0x000a, 0x3899: 0x000a, 0x389a: 0x000a, 0x389b: 0x000a, 0x389c: 0x000a, 0x389d: 0x000a,\n\t0x389e: 0x000a, 0x389f: 0x000a, 0x38a0: 0x000a, 0x38a1: 0x000a, 0x38a2: 0x000a, 0x38a3: 0x000a,\n\t0x38a4: 0x000a, 0x38a5: 0x000a, 0x38a6: 0x000a, 0x38a7: 0x000a, 0x38a8: 0x000a, 0x38a9: 0x000a,\n\t0x38aa: 0x000a, 0x38ab: 0x000a, 0x38ac: 0x000a, 0x38ad: 0x000a, 0x38ae: 0x000a, 0x38af: 0x000a,\n\t0x38b0: 0x000a, 0x38b1: 0x000a, 0x38b2: 0x000a, 0x38b3: 0x000a, 0x38b4: 0x000a, 0x38b5: 0x000a,\n\t0x38b6: 0x000a, 0x38b7: 0x000a, 0x38b8: 0x000a, 0x38b9: 0x000a, 0x38ba: 0x000a, 0x38bb: 0x000a,\n\t0x38bc: 0x000a, 0x38bd: 0x000a, 0x38be: 0x000a,\n\t// Block 0xe3, offset 0x38c0\n\t0x38c0: 0x000a, 0x38c1: 0x000a, 0x38c2: 0x000a, 0x38c3: 0x000a, 0x38c4: 0x000a, 0x38c5: 0x000a,\n\t0x38c6: 0x000a, 0x38c7: 0x000a, 0x38c8: 0x000a, 0x38c9: 0x000a, 0x38ca: 0x000a, 0x38cb: 0x000a,\n\t0x38cc: 0x000a, 0x38cd: 0x000a, 0x38ce: 0x000a, 0x38cf: 0x000a, 0x38d0: 0x000a, 0x38d1: 0x000a,\n\t0x38d2: 0x000a, 0x38d3: 0x000a, 0x38d4: 0x000a, 0x38d5: 0x000a, 0x38d6: 0x000a, 0x38d7: 0x000a,\n\t0x38d8: 0x000a, 0x38d9: 0x000a, 0x38da: 0x000a, 0x38db: 0x000a, 0x38dc: 0x000a, 0x38dd: 0x000a,\n\t0x38de: 0x000a, 0x38df: 0x000a, 0x38e0: 0x000a, 0x38e1: 0x000a, 0x38e2: 0x000a, 0x38e3: 0x000a,\n\t0x38e4: 0x000a, 0x38e5: 0x000a, 0x38e6: 0x000a, 0x38e7: 0x000a, 0x38e8: 0x000a, 0x38e9: 0x000a,\n\t0x38ea: 0x000a, 0x38eb: 0x000a, 0x38ec: 0x000a, 0x38ed: 0x000a, 0x38ee: 0x000a, 0x38ef: 0x000a,\n\t0x38f0: 0x000a, 0x38f3: 0x000a, 0x38f4: 0x000a, 0x38f5: 0x000a,\n\t0x38f6: 0x000a, 0x38fa: 0x000a,\n\t0x38fc: 0x000a, 0x38fd: 0x000a, 0x38fe: 0x000a, 0x38ff: 0x000a,\n\t// Block 0xe4, offset 0x3900\n\t0x3900: 0x000a, 0x3901: 0x000a, 0x3902: 0x000a, 0x3903: 0x000a, 0x3904: 0x000a, 0x3905: 0x000a,\n\t0x3906: 0x000a, 0x3907: 0x000a, 0x3908: 0x000a, 0x3909: 0x000a, 0x390a: 0x000a, 0x390b: 0x000a,\n\t0x390c: 0x000a, 0x390d: 0x000a, 0x390e: 0x000a, 0x390f: 0x000a, 0x3910: 0x000a, 0x3911: 0x000a,\n\t0x3912: 0x000a, 0x3913: 0x000a, 0x3914: 0x000a, 0x3915: 0x000a, 0x3916: 0x000a, 0x3917: 0x000a,\n\t0x3918: 0x000a, 0x3919: 0x000a, 0x391a: 0x000a, 0x391b: 0x000a, 0x391c: 0x000a, 0x391d: 0x000a,\n\t0x391e: 0x000a, 0x391f: 0x000a, 0x3920: 0x000a, 0x3921: 0x000a, 0x3922: 0x000a,\n\t0x3930: 0x000a, 0x3931: 0x000a, 0x3932: 0x000a, 0x3933: 0x000a, 0x3934: 0x000a, 0x3935: 0x000a,\n\t0x3936: 0x000a, 0x3937: 0x000a, 0x3938: 0x000a, 0x3939: 0x000a,\n\t// Block 0xe5, offset 0x3940\n\t0x3940: 0x000a, 0x3941: 0x000a, 0x3942: 0x000a,\n\t0x3950: 0x000a, 0x3951: 0x000a,\n\t0x3952: 0x000a, 0x3953: 0x000a, 0x3954: 0x000a, 0x3955: 0x000a, 0x3956: 0x000a, 0x3957: 0x000a,\n\t0x3958: 0x000a, 0x3959: 0x000a, 0x395a: 0x000a, 0x395b: 0x000a, 0x395c: 0x000a, 0x395d: 0x000a,\n\t0x395e: 0x000a, 0x395f: 0x000a, 0x3960: 0x000a, 0x3961: 0x000a, 0x3962: 0x000a, 0x3963: 0x000a,\n\t0x3964: 0x000a, 0x3965: 0x000a, 0x3966: 0x000a, 0x3967: 0x000a, 0x3968: 0x000a, 0x3969: 0x000a,\n\t0x396a: 0x000a, 0x396b: 0x000a, 0x396c: 0x000a, 0x396d: 0x000a, 0x396e: 0x000a, 0x396f: 0x000a,\n\t0x3970: 0x000a, 0x3971: 0x000a, 0x3972: 0x000a, 0x3973: 0x000a, 0x3974: 0x000a, 0x3975: 0x000a,\n\t0x3976: 0x000a, 0x3977: 0x000a, 0x3978: 0x000a, 0x3979: 0x000a, 0x397a: 0x000a, 0x397b: 0x000a,\n\t0x397c: 0x000a, 0x397d: 0x000a, 0x397e: 0x000a, 0x397f: 0x000a,\n\t// Block 0xe6, offset 0x3980\n\t0x39a0: 0x000a, 0x39a1: 0x000a, 0x39a2: 0x000a, 0x39a3: 0x000a,\n\t0x39a4: 0x000a, 0x39a5: 0x000a, 0x39a6: 0x000a, 0x39a7: 0x000a, 0x39a8: 0x000a, 0x39a9: 0x000a,\n\t0x39aa: 0x000a, 0x39ab: 0x000a, 0x39ac: 0x000a, 0x39ad: 0x000a,\n\t// Block 0xe7, offset 0x39c0\n\t0x39fe: 0x000b, 0x39ff: 0x000b,\n\t// Block 0xe8, offset 0x3a00\n\t0x3a00: 0x000b, 0x3a01: 0x000b, 0x3a02: 0x000b, 0x3a03: 0x000b, 0x3a04: 0x000b, 0x3a05: 0x000b,\n\t0x3a06: 0x000b, 0x3a07: 0x000b, 0x3a08: 0x000b, 0x3a09: 0x000b, 0x3a0a: 0x000b, 0x3a0b: 0x000b,\n\t0x3a0c: 0x000b, 0x3a0d: 0x000b, 0x3a0e: 0x000b, 0x3a0f: 0x000b, 0x3a10: 0x000b, 0x3a11: 0x000b,\n\t0x3a12: 0x000b, 0x3a13: 0x000b, 0x3a14: 0x000b, 0x3a15: 0x000b, 0x3a16: 0x000b, 0x3a17: 0x000b,\n\t0x3a18: 0x000b, 0x3a19: 0x000b, 0x3a1a: 0x000b, 0x3a1b: 0x000b, 0x3a1c: 0x000b, 0x3a1d: 0x000b,\n\t0x3a1e: 0x000b, 0x3a1f: 0x000b, 0x3a20: 0x000b, 0x3a21: 0x000b, 0x3a22: 0x000b, 0x3a23: 0x000b,\n\t0x3a24: 0x000b, 0x3a25: 0x000b, 0x3a26: 0x000b, 0x3a27: 0x000b, 0x3a28: 0x000b, 0x3a29: 0x000b,\n\t0x3a2a: 0x000b, 0x3a2b: 0x000b, 0x3a2c: 0x000b, 0x3a2d: 0x000b, 0x3a2e: 0x000b, 0x3a2f: 0x000b,\n\t0x3a30: 0x000b, 0x3a31: 0x000b, 0x3a32: 0x000b, 0x3a33: 0x000b, 0x3a34: 0x000b, 0x3a35: 0x000b,\n\t0x3a36: 0x000b, 0x3a37: 0x000b, 0x3a38: 0x000b, 0x3a39: 0x000b, 0x3a3a: 0x000b, 0x3a3b: 0x000b,\n\t0x3a3c: 0x000b, 0x3a3d: 0x000b, 0x3a3e: 0x000b, 0x3a3f: 0x000b,\n\t// Block 0xe9, offset 0x3a40\n\t0x3a40: 0x000c, 0x3a41: 0x000c, 0x3a42: 0x000c, 0x3a43: 0x000c, 0x3a44: 0x000c, 0x3a45: 0x000c,\n\t0x3a46: 0x000c, 0x3a47: 0x000c, 0x3a48: 0x000c, 0x3a49: 0x000c, 0x3a4a: 0x000c, 0x3a4b: 0x000c,\n\t0x3a4c: 0x000c, 0x3a4d: 0x000c, 0x3a4e: 0x000c, 0x3a4f: 0x000c, 0x3a50: 0x000c, 0x3a51: 0x000c,\n\t0x3a52: 0x000c, 0x3a53: 0x000c, 0x3a54: 0x000c, 0x3a55: 0x000c, 0x3a56: 0x000c, 0x3a57: 0x000c,\n\t0x3a58: 0x000c, 0x3a59: 0x000c, 0x3a5a: 0x000c, 0x3a5b: 0x000c, 0x3a5c: 0x000c, 0x3a5d: 0x000c,\n\t0x3a5e: 0x000c, 0x3a5f: 0x000c, 0x3a60: 0x000c, 0x3a61: 0x000c, 0x3a62: 0x000c, 0x3a63: 0x000c,\n\t0x3a64: 0x000c, 0x3a65: 0x000c, 0x3a66: 0x000c, 0x3a67: 0x000c, 0x3a68: 0x000c, 0x3a69: 0x000c,\n\t0x3a6a: 0x000c, 0x3a6b: 0x000c, 0x3a6c: 0x000c, 0x3a6d: 0x000c, 0x3a6e: 0x000c, 0x3a6f: 0x000c,\n\t0x3a70: 0x000b, 0x3a71: 0x000b, 0x3a72: 0x000b, 0x3a73: 0x000b, 0x3a74: 0x000b, 0x3a75: 0x000b,\n\t0x3a76: 0x000b, 0x3a77: 0x000b, 0x3a78: 0x000b, 0x3a79: 0x000b, 0x3a7a: 0x000b, 0x3a7b: 0x000b,\n\t0x3a7c: 0x000b, 0x3a7d: 0x000b, 0x3a7e: 0x000b, 0x3a7f: 0x000b,\n}\n\n// bidiIndex: 24 blocks, 1536 entries, 1536 bytes\n// Block 0 is the zero block.\nvar bidiIndex = [1536]uint8{\n\t// Block 0x0, offset 0x0\n\t// Block 0x1, offset 0x40\n\t// Block 0x2, offset 0x80\n\t// Block 0x3, offset 0xc0\n\t0xc2: 0x01, 0xc3: 0x02,\n\t0xca: 0x03, 0xcb: 0x04, 0xcc: 0x05, 0xcd: 0x06, 0xce: 0x07, 0xcf: 0x08,\n\t0xd2: 0x09, 0xd6: 0x0a, 0xd7: 0x0b,\n\t0xd8: 0x0c, 0xd9: 0x0d, 0xda: 0x0e, 0xdb: 0x0f, 0xdc: 0x10, 0xdd: 0x11, 0xde: 0x12, 0xdf: 0x13,\n\t0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, 0xe4: 0x06,\n\t0xea: 0x07, 0xef: 0x08,\n\t0xf0: 0x11, 0xf1: 0x12, 0xf2: 0x12, 0xf3: 0x14, 0xf4: 0x15,\n\t// Block 0x4, offset 0x100\n\t0x120: 0x14, 0x121: 0x15, 0x122: 0x16, 0x123: 0x17, 0x124: 0x18, 0x125: 0x19, 0x126: 0x1a, 0x127: 0x1b,\n\t0x128: 0x1c, 0x129: 0x1d, 0x12a: 0x1c, 0x12b: 0x1e, 0x12c: 0x1f, 0x12d: 0x20, 0x12e: 0x21, 0x12f: 0x22,\n\t0x130: 0x23, 0x131: 0x24, 0x132: 0x1a, 0x133: 0x25, 0x134: 0x26, 0x135: 0x27, 0x137: 0x28,\n\t0x138: 0x29, 0x139: 0x2a, 0x13a: 0x2b, 0x13b: 0x2c, 0x13c: 0x2d, 0x13d: 0x2e, 0x13e: 0x2f, 0x13f: 0x30,\n\t// Block 0x5, offset 0x140\n\t0x140: 0x31, 0x141: 0x32, 0x142: 0x33,\n\t0x14d: 0x34, 0x14e: 0x35,\n\t0x150: 0x36,\n\t0x15a: 0x37, 0x15c: 0x38, 0x15d: 0x39, 0x15e: 0x3a, 0x15f: 0x3b,\n\t0x160: 0x3c, 0x162: 0x3d, 0x164: 0x3e, 0x165: 0x3f, 0x167: 0x40,\n\t0x168: 0x41, 0x169: 0x42, 0x16a: 0x43, 0x16c: 0x44, 0x16d: 0x45, 0x16e: 0x46, 0x16f: 0x47,\n\t0x170: 0x48, 0x173: 0x49, 0x177: 0x4a,\n\t0x17e: 0x4b, 0x17f: 0x4c,\n\t// Block 0x6, offset 0x180\n\t0x180: 0x4d, 0x181: 0x4e, 0x182: 0x4f, 0x183: 0x50, 0x184: 0x51, 0x185: 0x52, 0x186: 0x53, 0x187: 0x54,\n\t0x188: 0x55, 0x189: 0x54, 0x18a: 0x54, 0x18b: 0x54, 0x18c: 0x56, 0x18d: 0x57, 0x18e: 0x58, 0x18f: 0x54,\n\t0x190: 0x59, 0x191: 0x5a, 0x192: 0x5b, 0x193: 0x5c, 0x194: 0x54, 0x195: 0x54, 0x196: 0x54, 0x197: 0x54,\n\t0x198: 0x54, 0x199: 0x54, 0x19a: 0x5d, 0x19b: 0x54, 0x19c: 0x54, 0x19d: 0x5e, 0x19e: 0x54, 0x19f: 0x5f,\n\t0x1a4: 0x54, 0x1a5: 0x54, 0x1a6: 0x60, 0x1a7: 0x61,\n\t0x1a8: 0x54, 0x1a9: 0x54, 0x1aa: 0x54, 0x1ab: 0x54, 0x1ac: 0x54, 0x1ad: 0x62, 0x1ae: 0x63, 0x1af: 0x64,\n\t0x1b3: 0x65, 0x1b5: 0x66, 0x1b7: 0x67,\n\t0x1b8: 0x68, 0x1b9: 0x69, 0x1ba: 0x6a, 0x1bb: 0x6b, 0x1bc: 0x54, 0x1bd: 0x54, 0x1be: 0x54, 0x1bf: 0x6c,\n\t// Block 0x7, offset 0x1c0\n\t0x1c0: 0x6d, 0x1c2: 0x6e, 0x1c3: 0x6f, 0x1c7: 0x70,\n\t0x1c8: 0x71, 0x1c9: 0x72, 0x1ca: 0x73, 0x1cb: 0x74, 0x1cd: 0x75, 0x1cf: 0x76,\n\t// Block 0x8, offset 0x200\n\t0x237: 0x54,\n\t// Block 0x9, offset 0x240\n\t0x252: 0x77, 0x253: 0x78,\n\t0x258: 0x79, 0x259: 0x7a, 0x25a: 0x7b, 0x25b: 0x7c, 0x25c: 0x7d, 0x25e: 0x7e,\n\t0x260: 0x7f, 0x261: 0x80, 0x263: 0x81, 0x264: 0x82, 0x265: 0x83, 0x266: 0x84, 0x267: 0x85,\n\t0x268: 0x86, 0x269: 0x87, 0x26a: 0x88, 0x26b: 0x89, 0x26f: 0x8a,\n\t// Block 0xa, offset 0x280\n\t0x2ac: 0x8b, 0x2ad: 0x8c, 0x2ae: 0x0e, 0x2af: 0x0e,\n\t0x2b0: 0x0e, 0x2b1: 0x0e, 0x2b2: 0x0e, 0x2b3: 0x0e, 0x2b4: 0x8d, 0x2b5: 0x0e, 0x2b6: 0x0e, 0x2b7: 0x8e,\n\t0x2b8: 0x8f, 0x2b9: 0x90, 0x2ba: 0x0e, 0x2bb: 0x91, 0x2bc: 0x92, 0x2bd: 0x93, 0x2bf: 0x94,\n\t// Block 0xb, offset 0x2c0\n\t0x2c4: 0x95, 0x2c5: 0x54, 0x2c6: 0x96, 0x2c7: 0x97,\n\t0x2cb: 0x98, 0x2cd: 0x99,\n\t0x2e0: 0x9a, 0x2e1: 0x9a, 0x2e2: 0x9a, 0x2e3: 0x9a, 0x2e4: 0x9b, 0x2e5: 0x9a, 0x2e6: 0x9a, 0x2e7: 0x9a,\n\t0x2e8: 0x9c, 0x2e9: 0x9a, 0x2ea: 0x9a, 0x2eb: 0x9d, 0x2ec: 0x9e, 0x2ed: 0x9a, 0x2ee: 0x9a, 0x2ef: 0x9a,\n\t0x2f0: 0x9a, 0x2f1: 0x9a, 0x2f2: 0x9a, 0x2f3: 0x9a, 0x2f4: 0x9f, 0x2f5: 0x9a, 0x2f6: 0x9a, 0x2f7: 0x9a,\n\t0x2f8: 0x9a, 0x2f9: 0xa0, 0x2fa: 0x9a, 0x2fb: 0x9a, 0x2fc: 0xa1, 0x2fd: 0xa2, 0x2fe: 0x9a, 0x2ff: 0x9a,\n\t// Block 0xc, offset 0x300\n\t0x300: 0xa3, 0x301: 0xa4, 0x302: 0xa5, 0x304: 0xa6, 0x305: 0xa7, 0x306: 0xa8, 0x307: 0xa9,\n\t0x308: 0xaa, 0x30b: 0xab, 0x30c: 0x26, 0x30d: 0xac,\n\t0x310: 0xad, 0x311: 0xae, 0x312: 0xaf, 0x313: 0xb0, 0x316: 0xb1, 0x317: 0xb2,\n\t0x318: 0xb3, 0x319: 0xb4, 0x31a: 0xb5, 0x31c: 0xb6,\n\t0x320: 0xb7,\n\t0x328: 0xb8, 0x329: 0xb9, 0x32a: 0xba,\n\t0x330: 0xbb, 0x332: 0xbc, 0x334: 0xbd, 0x335: 0xbe, 0x336: 0xbf,\n\t0x33b: 0xc0,\n\t// Block 0xd, offset 0x340\n\t0x36b: 0xc1, 0x36c: 0xc2,\n\t0x37e: 0xc3,\n\t// Block 0xe, offset 0x380\n\t0x3b2: 0xc4,\n\t// Block 0xf, offset 0x3c0\n\t0x3c5: 0xc5, 0x3c6: 0xc6,\n\t0x3c8: 0x54, 0x3c9: 0xc7, 0x3cc: 0x54, 0x3cd: 0xc8,\n\t0x3db: 0xc9, 0x3dc: 0xca, 0x3dd: 0xcb, 0x3de: 0xcc, 0x3df: 0xcd,\n\t0x3e8: 0xce, 0x3e9: 0xcf, 0x3ea: 0xd0,\n\t// Block 0x10, offset 0x400\n\t0x400: 0xd1,\n\t0x420: 0x9a, 0x421: 0x9a, 0x422: 0x9a, 0x423: 0xd2, 0x424: 0x9a, 0x425: 0xd3, 0x426: 0x9a, 0x427: 0x9a,\n\t0x428: 0x9a, 0x429: 0x9a, 0x42a: 0x9a, 0x42b: 0x9a, 0x42c: 0x9a, 0x42d: 0x9a, 0x42e: 0x9a, 0x42f: 0x9a,\n\t0x430: 0x9a, 0x431: 0xa1, 0x432: 0x0e, 0x433: 0x9a, 0x434: 0x9a, 0x435: 0x9a, 0x436: 0x9a, 0x437: 0x9a,\n\t0x438: 0x0e, 0x439: 0x0e, 0x43a: 0x0e, 0x43b: 0xd4, 0x43c: 0x9a, 0x43d: 0x9a, 0x43e: 0x9a, 0x43f: 0x9a,\n\t// Block 0x11, offset 0x440\n\t0x440: 0xd5, 0x441: 0x54, 0x442: 0xd6, 0x443: 0xd7, 0x444: 0xd8, 0x445: 0xd9,\n\t0x449: 0xda, 0x44c: 0x54, 0x44d: 0x54, 0x44e: 0x54, 0x44f: 0x54,\n\t0x450: 0x54, 0x451: 0x54, 0x452: 0x54, 0x453: 0x54, 0x454: 0x54, 0x455: 0x54, 0x456: 0x54, 0x457: 0x54,\n\t0x458: 0x54, 0x459: 0x54, 0x45a: 0x54, 0x45b: 0xdb, 0x45c: 0x54, 0x45d: 0x6b, 0x45e: 0x54, 0x45f: 0xdc,\n\t0x460: 0xdd, 0x461: 0xde, 0x462: 0xdf, 0x464: 0xe0, 0x465: 0xe1, 0x466: 0xe2, 0x467: 0xe3,\n\t0x469: 0xe4,\n\t0x47f: 0xe5,\n\t// Block 0x12, offset 0x480\n\t0x4bf: 0xe5,\n\t// Block 0x13, offset 0x4c0\n\t0x4d0: 0x09, 0x4d1: 0x0a, 0x4d6: 0x0b,\n\t0x4db: 0x0c, 0x4dd: 0x0d, 0x4de: 0x0e, 0x4df: 0x0f,\n\t0x4ef: 0x10,\n\t0x4ff: 0x10,\n\t// Block 0x14, offset 0x500\n\t0x50f: 0x10,\n\t0x51f: 0x10,\n\t0x52f: 0x10,\n\t0x53f: 0x10,\n\t// Block 0x15, offset 0x540\n\t0x540: 0xe6, 0x541: 0xe6, 0x542: 0xe6, 0x543: 0xe6, 0x544: 0x05, 0x545: 0x05, 0x546: 0x05, 0x547: 0xe7,\n\t0x548: 0xe6, 0x549: 0xe6, 0x54a: 0xe6, 0x54b: 0xe6, 0x54c: 0xe6, 0x54d: 0xe6, 0x54e: 0xe6, 0x54f: 0xe6,\n\t0x550: 0xe6, 0x551: 0xe6, 0x552: 0xe6, 0x553: 0xe6, 0x554: 0xe6, 0x555: 0xe6, 0x556: 0xe6, 0x557: 0xe6,\n\t0x558: 0xe6, 0x559: 0xe6, 0x55a: 0xe6, 0x55b: 0xe6, 0x55c: 0xe6, 0x55d: 0xe6, 0x55e: 0xe6, 0x55f: 0xe6,\n\t0x560: 0xe6, 0x561: 0xe6, 0x562: 0xe6, 0x563: 0xe6, 0x564: 0xe6, 0x565: 0xe6, 0x566: 0xe6, 0x567: 0xe6,\n\t0x568: 0xe6, 0x569: 0xe6, 0x56a: 0xe6, 0x56b: 0xe6, 0x56c: 0xe6, 0x56d: 0xe6, 0x56e: 0xe6, 0x56f: 0xe6,\n\t0x570: 0xe6, 0x571: 0xe6, 0x572: 0xe6, 0x573: 0xe6, 0x574: 0xe6, 0x575: 0xe6, 0x576: 0xe6, 0x577: 0xe6,\n\t0x578: 0xe6, 0x579: 0xe6, 0x57a: 0xe6, 0x57b: 0xe6, 0x57c: 0xe6, 0x57d: 0xe6, 0x57e: 0xe6, 0x57f: 0xe6,\n\t// Block 0x16, offset 0x580\n\t0x58f: 0x10,\n\t0x59f: 0x10,\n\t0x5a0: 0x13,\n\t0x5af: 0x10,\n\t0x5bf: 0x10,\n\t// Block 0x17, offset 0x5c0\n\t0x5cf: 0x10,\n}\n\n// Total table size 16568 bytes (16KiB); checksum: F50EF68C\n"
  },
  {
    "path": "vendor/golang.org/x/text/unicode/bidi/tables9.0.0.go",
    "content": "// Code generated by running \"go generate\" in golang.org/x/text. DO NOT EDIT.\n\n// +build !go1.10\n\npackage bidi\n\n// UnicodeVersion is the Unicode version from which the tables in this package are derived.\nconst UnicodeVersion = \"9.0.0\"\n\n// xorMasks contains masks to be xor-ed with brackets to get the reverse\n// version.\nvar xorMasks = []int32{ // 8 elements\n\t0, 1, 6, 7, 3, 15, 29, 63,\n} // Size: 56 bytes\n\n// lookup returns the trie value for the first UTF-8 encoding in s and\n// the width in bytes of this encoding. The size will be 0 if s does not\n// hold enough bytes to complete the encoding. len(s) must be greater than 0.\nfunc (t *bidiTrie) lookup(s []byte) (v uint8, sz int) {\n\tc0 := s[0]\n\tswitch {\n\tcase c0 < 0x80: // is ASCII\n\t\treturn bidiValues[c0], 1\n\tcase c0 < 0xC2:\n\t\treturn 0, 1 // Illegal UTF-8: not a starter, not ASCII.\n\tcase c0 < 0xE0: // 2-byte UTF-8\n\t\tif len(s) < 2 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := bidiIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c1), 2\n\tcase c0 < 0xF0: // 3-byte UTF-8\n\t\tif len(s) < 3 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := bidiIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to := uint32(i)<<6 + uint32(c1)\n\t\ti = bidiIndex[o]\n\t\tc2 := s[2]\n\t\tif c2 < 0x80 || 0xC0 <= c2 {\n\t\t\treturn 0, 2 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c2), 3\n\tcase c0 < 0xF8: // 4-byte UTF-8\n\t\tif len(s) < 4 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := bidiIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to := uint32(i)<<6 + uint32(c1)\n\t\ti = bidiIndex[o]\n\t\tc2 := s[2]\n\t\tif c2 < 0x80 || 0xC0 <= c2 {\n\t\t\treturn 0, 2 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to = uint32(i)<<6 + uint32(c2)\n\t\ti = bidiIndex[o]\n\t\tc3 := s[3]\n\t\tif c3 < 0x80 || 0xC0 <= c3 {\n\t\t\treturn 0, 3 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c3), 4\n\t}\n\t// Illegal rune\n\treturn 0, 1\n}\n\n// lookupUnsafe returns the trie value for the first UTF-8 encoding in s.\n// s must start with a full and valid UTF-8 encoded rune.\nfunc (t *bidiTrie) lookupUnsafe(s []byte) uint8 {\n\tc0 := s[0]\n\tif c0 < 0x80 { // is ASCII\n\t\treturn bidiValues[c0]\n\t}\n\ti := bidiIndex[c0]\n\tif c0 < 0xE0 { // 2-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[1])\n\t}\n\ti = bidiIndex[uint32(i)<<6+uint32(s[1])]\n\tif c0 < 0xF0 { // 3-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[2])\n\t}\n\ti = bidiIndex[uint32(i)<<6+uint32(s[2])]\n\tif c0 < 0xF8 { // 4-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[3])\n\t}\n\treturn 0\n}\n\n// lookupString returns the trie value for the first UTF-8 encoding in s and\n// the width in bytes of this encoding. The size will be 0 if s does not\n// hold enough bytes to complete the encoding. len(s) must be greater than 0.\nfunc (t *bidiTrie) lookupString(s string) (v uint8, sz int) {\n\tc0 := s[0]\n\tswitch {\n\tcase c0 < 0x80: // is ASCII\n\t\treturn bidiValues[c0], 1\n\tcase c0 < 0xC2:\n\t\treturn 0, 1 // Illegal UTF-8: not a starter, not ASCII.\n\tcase c0 < 0xE0: // 2-byte UTF-8\n\t\tif len(s) < 2 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := bidiIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c1), 2\n\tcase c0 < 0xF0: // 3-byte UTF-8\n\t\tif len(s) < 3 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := bidiIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to := uint32(i)<<6 + uint32(c1)\n\t\ti = bidiIndex[o]\n\t\tc2 := s[2]\n\t\tif c2 < 0x80 || 0xC0 <= c2 {\n\t\t\treturn 0, 2 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c2), 3\n\tcase c0 < 0xF8: // 4-byte UTF-8\n\t\tif len(s) < 4 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := bidiIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to := uint32(i)<<6 + uint32(c1)\n\t\ti = bidiIndex[o]\n\t\tc2 := s[2]\n\t\tif c2 < 0x80 || 0xC0 <= c2 {\n\t\t\treturn 0, 2 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to = uint32(i)<<6 + uint32(c2)\n\t\ti = bidiIndex[o]\n\t\tc3 := s[3]\n\t\tif c3 < 0x80 || 0xC0 <= c3 {\n\t\t\treturn 0, 3 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c3), 4\n\t}\n\t// Illegal rune\n\treturn 0, 1\n}\n\n// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s.\n// s must start with a full and valid UTF-8 encoded rune.\nfunc (t *bidiTrie) lookupStringUnsafe(s string) uint8 {\n\tc0 := s[0]\n\tif c0 < 0x80 { // is ASCII\n\t\treturn bidiValues[c0]\n\t}\n\ti := bidiIndex[c0]\n\tif c0 < 0xE0 { // 2-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[1])\n\t}\n\ti = bidiIndex[uint32(i)<<6+uint32(s[1])]\n\tif c0 < 0xF0 { // 3-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[2])\n\t}\n\ti = bidiIndex[uint32(i)<<6+uint32(s[2])]\n\tif c0 < 0xF8 { // 4-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[3])\n\t}\n\treturn 0\n}\n\n// bidiTrie. Total size: 15744 bytes (15.38 KiB). Checksum: b4c3b70954803b86.\ntype bidiTrie struct{}\n\nfunc newBidiTrie(i int) *bidiTrie {\n\treturn &bidiTrie{}\n}\n\n// lookupValue determines the type of block n and looks up the value for b.\nfunc (t *bidiTrie) lookupValue(n uint32, b byte) uint8 {\n\tswitch {\n\tdefault:\n\t\treturn uint8(bidiValues[n<<6+uint32(b)])\n\t}\n}\n\n// bidiValues: 222 blocks, 14208 entries, 14208 bytes\n// The third block is the zero block.\nvar bidiValues = [14208]uint8{\n\t// Block 0x0, offset 0x0\n\t0x00: 0x000b, 0x01: 0x000b, 0x02: 0x000b, 0x03: 0x000b, 0x04: 0x000b, 0x05: 0x000b,\n\t0x06: 0x000b, 0x07: 0x000b, 0x08: 0x000b, 0x09: 0x0008, 0x0a: 0x0007, 0x0b: 0x0008,\n\t0x0c: 0x0009, 0x0d: 0x0007, 0x0e: 0x000b, 0x0f: 0x000b, 0x10: 0x000b, 0x11: 0x000b,\n\t0x12: 0x000b, 0x13: 0x000b, 0x14: 0x000b, 0x15: 0x000b, 0x16: 0x000b, 0x17: 0x000b,\n\t0x18: 0x000b, 0x19: 0x000b, 0x1a: 0x000b, 0x1b: 0x000b, 0x1c: 0x0007, 0x1d: 0x0007,\n\t0x1e: 0x0007, 0x1f: 0x0008, 0x20: 0x0009, 0x21: 0x000a, 0x22: 0x000a, 0x23: 0x0004,\n\t0x24: 0x0004, 0x25: 0x0004, 0x26: 0x000a, 0x27: 0x000a, 0x28: 0x003a, 0x29: 0x002a,\n\t0x2a: 0x000a, 0x2b: 0x0003, 0x2c: 0x0006, 0x2d: 0x0003, 0x2e: 0x0006, 0x2f: 0x0006,\n\t0x30: 0x0002, 0x31: 0x0002, 0x32: 0x0002, 0x33: 0x0002, 0x34: 0x0002, 0x35: 0x0002,\n\t0x36: 0x0002, 0x37: 0x0002, 0x38: 0x0002, 0x39: 0x0002, 0x3a: 0x0006, 0x3b: 0x000a,\n\t0x3c: 0x000a, 0x3d: 0x000a, 0x3e: 0x000a, 0x3f: 0x000a,\n\t// Block 0x1, offset 0x40\n\t0x40: 0x000a,\n\t0x5b: 0x005a, 0x5c: 0x000a, 0x5d: 0x004a,\n\t0x5e: 0x000a, 0x5f: 0x000a, 0x60: 0x000a,\n\t0x7b: 0x005a,\n\t0x7c: 0x000a, 0x7d: 0x004a, 0x7e: 0x000a, 0x7f: 0x000b,\n\t// Block 0x2, offset 0x80\n\t// Block 0x3, offset 0xc0\n\t0xc0: 0x000b, 0xc1: 0x000b, 0xc2: 0x000b, 0xc3: 0x000b, 0xc4: 0x000b, 0xc5: 0x0007,\n\t0xc6: 0x000b, 0xc7: 0x000b, 0xc8: 0x000b, 0xc9: 0x000b, 0xca: 0x000b, 0xcb: 0x000b,\n\t0xcc: 0x000b, 0xcd: 0x000b, 0xce: 0x000b, 0xcf: 0x000b, 0xd0: 0x000b, 0xd1: 0x000b,\n\t0xd2: 0x000b, 0xd3: 0x000b, 0xd4: 0x000b, 0xd5: 0x000b, 0xd6: 0x000b, 0xd7: 0x000b,\n\t0xd8: 0x000b, 0xd9: 0x000b, 0xda: 0x000b, 0xdb: 0x000b, 0xdc: 0x000b, 0xdd: 0x000b,\n\t0xde: 0x000b, 0xdf: 0x000b, 0xe0: 0x0006, 0xe1: 0x000a, 0xe2: 0x0004, 0xe3: 0x0004,\n\t0xe4: 0x0004, 0xe5: 0x0004, 0xe6: 0x000a, 0xe7: 0x000a, 0xe8: 0x000a, 0xe9: 0x000a,\n\t0xeb: 0x000a, 0xec: 0x000a, 0xed: 0x000b, 0xee: 0x000a, 0xef: 0x000a,\n\t0xf0: 0x0004, 0xf1: 0x0004, 0xf2: 0x0002, 0xf3: 0x0002, 0xf4: 0x000a,\n\t0xf6: 0x000a, 0xf7: 0x000a, 0xf8: 0x000a, 0xf9: 0x0002, 0xfb: 0x000a,\n\t0xfc: 0x000a, 0xfd: 0x000a, 0xfe: 0x000a, 0xff: 0x000a,\n\t// Block 0x4, offset 0x100\n\t0x117: 0x000a,\n\t0x137: 0x000a,\n\t// Block 0x5, offset 0x140\n\t0x179: 0x000a, 0x17a: 0x000a,\n\t// Block 0x6, offset 0x180\n\t0x182: 0x000a, 0x183: 0x000a, 0x184: 0x000a, 0x185: 0x000a,\n\t0x186: 0x000a, 0x187: 0x000a, 0x188: 0x000a, 0x189: 0x000a, 0x18a: 0x000a, 0x18b: 0x000a,\n\t0x18c: 0x000a, 0x18d: 0x000a, 0x18e: 0x000a, 0x18f: 0x000a,\n\t0x192: 0x000a, 0x193: 0x000a, 0x194: 0x000a, 0x195: 0x000a, 0x196: 0x000a, 0x197: 0x000a,\n\t0x198: 0x000a, 0x199: 0x000a, 0x19a: 0x000a, 0x19b: 0x000a, 0x19c: 0x000a, 0x19d: 0x000a,\n\t0x19e: 0x000a, 0x19f: 0x000a,\n\t0x1a5: 0x000a, 0x1a6: 0x000a, 0x1a7: 0x000a, 0x1a8: 0x000a, 0x1a9: 0x000a,\n\t0x1aa: 0x000a, 0x1ab: 0x000a, 0x1ac: 0x000a, 0x1ad: 0x000a, 0x1af: 0x000a,\n\t0x1b0: 0x000a, 0x1b1: 0x000a, 0x1b2: 0x000a, 0x1b3: 0x000a, 0x1b4: 0x000a, 0x1b5: 0x000a,\n\t0x1b6: 0x000a, 0x1b7: 0x000a, 0x1b8: 0x000a, 0x1b9: 0x000a, 0x1ba: 0x000a, 0x1bb: 0x000a,\n\t0x1bc: 0x000a, 0x1bd: 0x000a, 0x1be: 0x000a, 0x1bf: 0x000a,\n\t// Block 0x7, offset 0x1c0\n\t0x1c0: 0x000c, 0x1c1: 0x000c, 0x1c2: 0x000c, 0x1c3: 0x000c, 0x1c4: 0x000c, 0x1c5: 0x000c,\n\t0x1c6: 0x000c, 0x1c7: 0x000c, 0x1c8: 0x000c, 0x1c9: 0x000c, 0x1ca: 0x000c, 0x1cb: 0x000c,\n\t0x1cc: 0x000c, 0x1cd: 0x000c, 0x1ce: 0x000c, 0x1cf: 0x000c, 0x1d0: 0x000c, 0x1d1: 0x000c,\n\t0x1d2: 0x000c, 0x1d3: 0x000c, 0x1d4: 0x000c, 0x1d5: 0x000c, 0x1d6: 0x000c, 0x1d7: 0x000c,\n\t0x1d8: 0x000c, 0x1d9: 0x000c, 0x1da: 0x000c, 0x1db: 0x000c, 0x1dc: 0x000c, 0x1dd: 0x000c,\n\t0x1de: 0x000c, 0x1df: 0x000c, 0x1e0: 0x000c, 0x1e1: 0x000c, 0x1e2: 0x000c, 0x1e3: 0x000c,\n\t0x1e4: 0x000c, 0x1e5: 0x000c, 0x1e6: 0x000c, 0x1e7: 0x000c, 0x1e8: 0x000c, 0x1e9: 0x000c,\n\t0x1ea: 0x000c, 0x1eb: 0x000c, 0x1ec: 0x000c, 0x1ed: 0x000c, 0x1ee: 0x000c, 0x1ef: 0x000c,\n\t0x1f0: 0x000c, 0x1f1: 0x000c, 0x1f2: 0x000c, 0x1f3: 0x000c, 0x1f4: 0x000c, 0x1f5: 0x000c,\n\t0x1f6: 0x000c, 0x1f7: 0x000c, 0x1f8: 0x000c, 0x1f9: 0x000c, 0x1fa: 0x000c, 0x1fb: 0x000c,\n\t0x1fc: 0x000c, 0x1fd: 0x000c, 0x1fe: 0x000c, 0x1ff: 0x000c,\n\t// Block 0x8, offset 0x200\n\t0x200: 0x000c, 0x201: 0x000c, 0x202: 0x000c, 0x203: 0x000c, 0x204: 0x000c, 0x205: 0x000c,\n\t0x206: 0x000c, 0x207: 0x000c, 0x208: 0x000c, 0x209: 0x000c, 0x20a: 0x000c, 0x20b: 0x000c,\n\t0x20c: 0x000c, 0x20d: 0x000c, 0x20e: 0x000c, 0x20f: 0x000c, 0x210: 0x000c, 0x211: 0x000c,\n\t0x212: 0x000c, 0x213: 0x000c, 0x214: 0x000c, 0x215: 0x000c, 0x216: 0x000c, 0x217: 0x000c,\n\t0x218: 0x000c, 0x219: 0x000c, 0x21a: 0x000c, 0x21b: 0x000c, 0x21c: 0x000c, 0x21d: 0x000c,\n\t0x21e: 0x000c, 0x21f: 0x000c, 0x220: 0x000c, 0x221: 0x000c, 0x222: 0x000c, 0x223: 0x000c,\n\t0x224: 0x000c, 0x225: 0x000c, 0x226: 0x000c, 0x227: 0x000c, 0x228: 0x000c, 0x229: 0x000c,\n\t0x22a: 0x000c, 0x22b: 0x000c, 0x22c: 0x000c, 0x22d: 0x000c, 0x22e: 0x000c, 0x22f: 0x000c,\n\t0x234: 0x000a, 0x235: 0x000a,\n\t0x23e: 0x000a,\n\t// Block 0x9, offset 0x240\n\t0x244: 0x000a, 0x245: 0x000a,\n\t0x247: 0x000a,\n\t// Block 0xa, offset 0x280\n\t0x2b6: 0x000a,\n\t// Block 0xb, offset 0x2c0\n\t0x2c3: 0x000c, 0x2c4: 0x000c, 0x2c5: 0x000c,\n\t0x2c6: 0x000c, 0x2c7: 0x000c, 0x2c8: 0x000c, 0x2c9: 0x000c,\n\t// Block 0xc, offset 0x300\n\t0x30a: 0x000a,\n\t0x30d: 0x000a, 0x30e: 0x000a, 0x30f: 0x0004, 0x310: 0x0001, 0x311: 0x000c,\n\t0x312: 0x000c, 0x313: 0x000c, 0x314: 0x000c, 0x315: 0x000c, 0x316: 0x000c, 0x317: 0x000c,\n\t0x318: 0x000c, 0x319: 0x000c, 0x31a: 0x000c, 0x31b: 0x000c, 0x31c: 0x000c, 0x31d: 0x000c,\n\t0x31e: 0x000c, 0x31f: 0x000c, 0x320: 0x000c, 0x321: 0x000c, 0x322: 0x000c, 0x323: 0x000c,\n\t0x324: 0x000c, 0x325: 0x000c, 0x326: 0x000c, 0x327: 0x000c, 0x328: 0x000c, 0x329: 0x000c,\n\t0x32a: 0x000c, 0x32b: 0x000c, 0x32c: 0x000c, 0x32d: 0x000c, 0x32e: 0x000c, 0x32f: 0x000c,\n\t0x330: 0x000c, 0x331: 0x000c, 0x332: 0x000c, 0x333: 0x000c, 0x334: 0x000c, 0x335: 0x000c,\n\t0x336: 0x000c, 0x337: 0x000c, 0x338: 0x000c, 0x339: 0x000c, 0x33a: 0x000c, 0x33b: 0x000c,\n\t0x33c: 0x000c, 0x33d: 0x000c, 0x33e: 0x0001, 0x33f: 0x000c,\n\t// Block 0xd, offset 0x340\n\t0x340: 0x0001, 0x341: 0x000c, 0x342: 0x000c, 0x343: 0x0001, 0x344: 0x000c, 0x345: 0x000c,\n\t0x346: 0x0001, 0x347: 0x000c, 0x348: 0x0001, 0x349: 0x0001, 0x34a: 0x0001, 0x34b: 0x0001,\n\t0x34c: 0x0001, 0x34d: 0x0001, 0x34e: 0x0001, 0x34f: 0x0001, 0x350: 0x0001, 0x351: 0x0001,\n\t0x352: 0x0001, 0x353: 0x0001, 0x354: 0x0001, 0x355: 0x0001, 0x356: 0x0001, 0x357: 0x0001,\n\t0x358: 0x0001, 0x359: 0x0001, 0x35a: 0x0001, 0x35b: 0x0001, 0x35c: 0x0001, 0x35d: 0x0001,\n\t0x35e: 0x0001, 0x35f: 0x0001, 0x360: 0x0001, 0x361: 0x0001, 0x362: 0x0001, 0x363: 0x0001,\n\t0x364: 0x0001, 0x365: 0x0001, 0x366: 0x0001, 0x367: 0x0001, 0x368: 0x0001, 0x369: 0x0001,\n\t0x36a: 0x0001, 0x36b: 0x0001, 0x36c: 0x0001, 0x36d: 0x0001, 0x36e: 0x0001, 0x36f: 0x0001,\n\t0x370: 0x0001, 0x371: 0x0001, 0x372: 0x0001, 0x373: 0x0001, 0x374: 0x0001, 0x375: 0x0001,\n\t0x376: 0x0001, 0x377: 0x0001, 0x378: 0x0001, 0x379: 0x0001, 0x37a: 0x0001, 0x37b: 0x0001,\n\t0x37c: 0x0001, 0x37d: 0x0001, 0x37e: 0x0001, 0x37f: 0x0001,\n\t// Block 0xe, offset 0x380\n\t0x380: 0x0005, 0x381: 0x0005, 0x382: 0x0005, 0x383: 0x0005, 0x384: 0x0005, 0x385: 0x0005,\n\t0x386: 0x000a, 0x387: 0x000a, 0x388: 0x000d, 0x389: 0x0004, 0x38a: 0x0004, 0x38b: 0x000d,\n\t0x38c: 0x0006, 0x38d: 0x000d, 0x38e: 0x000a, 0x38f: 0x000a, 0x390: 0x000c, 0x391: 0x000c,\n\t0x392: 0x000c, 0x393: 0x000c, 0x394: 0x000c, 0x395: 0x000c, 0x396: 0x000c, 0x397: 0x000c,\n\t0x398: 0x000c, 0x399: 0x000c, 0x39a: 0x000c, 0x39b: 0x000d, 0x39c: 0x000d, 0x39d: 0x000d,\n\t0x39e: 0x000d, 0x39f: 0x000d, 0x3a0: 0x000d, 0x3a1: 0x000d, 0x3a2: 0x000d, 0x3a3: 0x000d,\n\t0x3a4: 0x000d, 0x3a5: 0x000d, 0x3a6: 0x000d, 0x3a7: 0x000d, 0x3a8: 0x000d, 0x3a9: 0x000d,\n\t0x3aa: 0x000d, 0x3ab: 0x000d, 0x3ac: 0x000d, 0x3ad: 0x000d, 0x3ae: 0x000d, 0x3af: 0x000d,\n\t0x3b0: 0x000d, 0x3b1: 0x000d, 0x3b2: 0x000d, 0x3b3: 0x000d, 0x3b4: 0x000d, 0x3b5: 0x000d,\n\t0x3b6: 0x000d, 0x3b7: 0x000d, 0x3b8: 0x000d, 0x3b9: 0x000d, 0x3ba: 0x000d, 0x3bb: 0x000d,\n\t0x3bc: 0x000d, 0x3bd: 0x000d, 0x3be: 0x000d, 0x3bf: 0x000d,\n\t// Block 0xf, offset 0x3c0\n\t0x3c0: 0x000d, 0x3c1: 0x000d, 0x3c2: 0x000d, 0x3c3: 0x000d, 0x3c4: 0x000d, 0x3c5: 0x000d,\n\t0x3c6: 0x000d, 0x3c7: 0x000d, 0x3c8: 0x000d, 0x3c9: 0x000d, 0x3ca: 0x000d, 0x3cb: 0x000c,\n\t0x3cc: 0x000c, 0x3cd: 0x000c, 0x3ce: 0x000c, 0x3cf: 0x000c, 0x3d0: 0x000c, 0x3d1: 0x000c,\n\t0x3d2: 0x000c, 0x3d3: 0x000c, 0x3d4: 0x000c, 0x3d5: 0x000c, 0x3d6: 0x000c, 0x3d7: 0x000c,\n\t0x3d8: 0x000c, 0x3d9: 0x000c, 0x3da: 0x000c, 0x3db: 0x000c, 0x3dc: 0x000c, 0x3dd: 0x000c,\n\t0x3de: 0x000c, 0x3df: 0x000c, 0x3e0: 0x0005, 0x3e1: 0x0005, 0x3e2: 0x0005, 0x3e3: 0x0005,\n\t0x3e4: 0x0005, 0x3e5: 0x0005, 0x3e6: 0x0005, 0x3e7: 0x0005, 0x3e8: 0x0005, 0x3e9: 0x0005,\n\t0x3ea: 0x0004, 0x3eb: 0x0005, 0x3ec: 0x0005, 0x3ed: 0x000d, 0x3ee: 0x000d, 0x3ef: 0x000d,\n\t0x3f0: 0x000c, 0x3f1: 0x000d, 0x3f2: 0x000d, 0x3f3: 0x000d, 0x3f4: 0x000d, 0x3f5: 0x000d,\n\t0x3f6: 0x000d, 0x3f7: 0x000d, 0x3f8: 0x000d, 0x3f9: 0x000d, 0x3fa: 0x000d, 0x3fb: 0x000d,\n\t0x3fc: 0x000d, 0x3fd: 0x000d, 0x3fe: 0x000d, 0x3ff: 0x000d,\n\t// Block 0x10, offset 0x400\n\t0x400: 0x000d, 0x401: 0x000d, 0x402: 0x000d, 0x403: 0x000d, 0x404: 0x000d, 0x405: 0x000d,\n\t0x406: 0x000d, 0x407: 0x000d, 0x408: 0x000d, 0x409: 0x000d, 0x40a: 0x000d, 0x40b: 0x000d,\n\t0x40c: 0x000d, 0x40d: 0x000d, 0x40e: 0x000d, 0x40f: 0x000d, 0x410: 0x000d, 0x411: 0x000d,\n\t0x412: 0x000d, 0x413: 0x000d, 0x414: 0x000d, 0x415: 0x000d, 0x416: 0x000d, 0x417: 0x000d,\n\t0x418: 0x000d, 0x419: 0x000d, 0x41a: 0x000d, 0x41b: 0x000d, 0x41c: 0x000d, 0x41d: 0x000d,\n\t0x41e: 0x000d, 0x41f: 0x000d, 0x420: 0x000d, 0x421: 0x000d, 0x422: 0x000d, 0x423: 0x000d,\n\t0x424: 0x000d, 0x425: 0x000d, 0x426: 0x000d, 0x427: 0x000d, 0x428: 0x000d, 0x429: 0x000d,\n\t0x42a: 0x000d, 0x42b: 0x000d, 0x42c: 0x000d, 0x42d: 0x000d, 0x42e: 0x000d, 0x42f: 0x000d,\n\t0x430: 0x000d, 0x431: 0x000d, 0x432: 0x000d, 0x433: 0x000d, 0x434: 0x000d, 0x435: 0x000d,\n\t0x436: 0x000d, 0x437: 0x000d, 0x438: 0x000d, 0x439: 0x000d, 0x43a: 0x000d, 0x43b: 0x000d,\n\t0x43c: 0x000d, 0x43d: 0x000d, 0x43e: 0x000d, 0x43f: 0x000d,\n\t// Block 0x11, offset 0x440\n\t0x440: 0x000d, 0x441: 0x000d, 0x442: 0x000d, 0x443: 0x000d, 0x444: 0x000d, 0x445: 0x000d,\n\t0x446: 0x000d, 0x447: 0x000d, 0x448: 0x000d, 0x449: 0x000d, 0x44a: 0x000d, 0x44b: 0x000d,\n\t0x44c: 0x000d, 0x44d: 0x000d, 0x44e: 0x000d, 0x44f: 0x000d, 0x450: 0x000d, 0x451: 0x000d,\n\t0x452: 0x000d, 0x453: 0x000d, 0x454: 0x000d, 0x455: 0x000d, 0x456: 0x000c, 0x457: 0x000c,\n\t0x458: 0x000c, 0x459: 0x000c, 0x45a: 0x000c, 0x45b: 0x000c, 0x45c: 0x000c, 0x45d: 0x0005,\n\t0x45e: 0x000a, 0x45f: 0x000c, 0x460: 0x000c, 0x461: 0x000c, 0x462: 0x000c, 0x463: 0x000c,\n\t0x464: 0x000c, 0x465: 0x000d, 0x466: 0x000d, 0x467: 0x000c, 0x468: 0x000c, 0x469: 0x000a,\n\t0x46a: 0x000c, 0x46b: 0x000c, 0x46c: 0x000c, 0x46d: 0x000c, 0x46e: 0x000d, 0x46f: 0x000d,\n\t0x470: 0x0002, 0x471: 0x0002, 0x472: 0x0002, 0x473: 0x0002, 0x474: 0x0002, 0x475: 0x0002,\n\t0x476: 0x0002, 0x477: 0x0002, 0x478: 0x0002, 0x479: 0x0002, 0x47a: 0x000d, 0x47b: 0x000d,\n\t0x47c: 0x000d, 0x47d: 0x000d, 0x47e: 0x000d, 0x47f: 0x000d,\n\t// Block 0x12, offset 0x480\n\t0x480: 0x000d, 0x481: 0x000d, 0x482: 0x000d, 0x483: 0x000d, 0x484: 0x000d, 0x485: 0x000d,\n\t0x486: 0x000d, 0x487: 0x000d, 0x488: 0x000d, 0x489: 0x000d, 0x48a: 0x000d, 0x48b: 0x000d,\n\t0x48c: 0x000d, 0x48d: 0x000d, 0x48e: 0x000d, 0x48f: 0x000d, 0x490: 0x000d, 0x491: 0x000c,\n\t0x492: 0x000d, 0x493: 0x000d, 0x494: 0x000d, 0x495: 0x000d, 0x496: 0x000d, 0x497: 0x000d,\n\t0x498: 0x000d, 0x499: 0x000d, 0x49a: 0x000d, 0x49b: 0x000d, 0x49c: 0x000d, 0x49d: 0x000d,\n\t0x49e: 0x000d, 0x49f: 0x000d, 0x4a0: 0x000d, 0x4a1: 0x000d, 0x4a2: 0x000d, 0x4a3: 0x000d,\n\t0x4a4: 0x000d, 0x4a5: 0x000d, 0x4a6: 0x000d, 0x4a7: 0x000d, 0x4a8: 0x000d, 0x4a9: 0x000d,\n\t0x4aa: 0x000d, 0x4ab: 0x000d, 0x4ac: 0x000d, 0x4ad: 0x000d, 0x4ae: 0x000d, 0x4af: 0x000d,\n\t0x4b0: 0x000c, 0x4b1: 0x000c, 0x4b2: 0x000c, 0x4b3: 0x000c, 0x4b4: 0x000c, 0x4b5: 0x000c,\n\t0x4b6: 0x000c, 0x4b7: 0x000c, 0x4b8: 0x000c, 0x4b9: 0x000c, 0x4ba: 0x000c, 0x4bb: 0x000c,\n\t0x4bc: 0x000c, 0x4bd: 0x000c, 0x4be: 0x000c, 0x4bf: 0x000c,\n\t// Block 0x13, offset 0x4c0\n\t0x4c0: 0x000c, 0x4c1: 0x000c, 0x4c2: 0x000c, 0x4c3: 0x000c, 0x4c4: 0x000c, 0x4c5: 0x000c,\n\t0x4c6: 0x000c, 0x4c7: 0x000c, 0x4c8: 0x000c, 0x4c9: 0x000c, 0x4ca: 0x000c, 0x4cb: 0x000d,\n\t0x4cc: 0x000d, 0x4cd: 0x000d, 0x4ce: 0x000d, 0x4cf: 0x000d, 0x4d0: 0x000d, 0x4d1: 0x000d,\n\t0x4d2: 0x000d, 0x4d3: 0x000d, 0x4d4: 0x000d, 0x4d5: 0x000d, 0x4d6: 0x000d, 0x4d7: 0x000d,\n\t0x4d8: 0x000d, 0x4d9: 0x000d, 0x4da: 0x000d, 0x4db: 0x000d, 0x4dc: 0x000d, 0x4dd: 0x000d,\n\t0x4de: 0x000d, 0x4df: 0x000d, 0x4e0: 0x000d, 0x4e1: 0x000d, 0x4e2: 0x000d, 0x4e3: 0x000d,\n\t0x4e4: 0x000d, 0x4e5: 0x000d, 0x4e6: 0x000d, 0x4e7: 0x000d, 0x4e8: 0x000d, 0x4e9: 0x000d,\n\t0x4ea: 0x000d, 0x4eb: 0x000d, 0x4ec: 0x000d, 0x4ed: 0x000d, 0x4ee: 0x000d, 0x4ef: 0x000d,\n\t0x4f0: 0x000d, 0x4f1: 0x000d, 0x4f2: 0x000d, 0x4f3: 0x000d, 0x4f4: 0x000d, 0x4f5: 0x000d,\n\t0x4f6: 0x000d, 0x4f7: 0x000d, 0x4f8: 0x000d, 0x4f9: 0x000d, 0x4fa: 0x000d, 0x4fb: 0x000d,\n\t0x4fc: 0x000d, 0x4fd: 0x000d, 0x4fe: 0x000d, 0x4ff: 0x000d,\n\t// Block 0x14, offset 0x500\n\t0x500: 0x000d, 0x501: 0x000d, 0x502: 0x000d, 0x503: 0x000d, 0x504: 0x000d, 0x505: 0x000d,\n\t0x506: 0x000d, 0x507: 0x000d, 0x508: 0x000d, 0x509: 0x000d, 0x50a: 0x000d, 0x50b: 0x000d,\n\t0x50c: 0x000d, 0x50d: 0x000d, 0x50e: 0x000d, 0x50f: 0x000d, 0x510: 0x000d, 0x511: 0x000d,\n\t0x512: 0x000d, 0x513: 0x000d, 0x514: 0x000d, 0x515: 0x000d, 0x516: 0x000d, 0x517: 0x000d,\n\t0x518: 0x000d, 0x519: 0x000d, 0x51a: 0x000d, 0x51b: 0x000d, 0x51c: 0x000d, 0x51d: 0x000d,\n\t0x51e: 0x000d, 0x51f: 0x000d, 0x520: 0x000d, 0x521: 0x000d, 0x522: 0x000d, 0x523: 0x000d,\n\t0x524: 0x000d, 0x525: 0x000d, 0x526: 0x000c, 0x527: 0x000c, 0x528: 0x000c, 0x529: 0x000c,\n\t0x52a: 0x000c, 0x52b: 0x000c, 0x52c: 0x000c, 0x52d: 0x000c, 0x52e: 0x000c, 0x52f: 0x000c,\n\t0x530: 0x000c, 0x531: 0x000d, 0x532: 0x000d, 0x533: 0x000d, 0x534: 0x000d, 0x535: 0x000d,\n\t0x536: 0x000d, 0x537: 0x000d, 0x538: 0x000d, 0x539: 0x000d, 0x53a: 0x000d, 0x53b: 0x000d,\n\t0x53c: 0x000d, 0x53d: 0x000d, 0x53e: 0x000d, 0x53f: 0x000d,\n\t// Block 0x15, offset 0x540\n\t0x540: 0x0001, 0x541: 0x0001, 0x542: 0x0001, 0x543: 0x0001, 0x544: 0x0001, 0x545: 0x0001,\n\t0x546: 0x0001, 0x547: 0x0001, 0x548: 0x0001, 0x549: 0x0001, 0x54a: 0x0001, 0x54b: 0x0001,\n\t0x54c: 0x0001, 0x54d: 0x0001, 0x54e: 0x0001, 0x54f: 0x0001, 0x550: 0x0001, 0x551: 0x0001,\n\t0x552: 0x0001, 0x553: 0x0001, 0x554: 0x0001, 0x555: 0x0001, 0x556: 0x0001, 0x557: 0x0001,\n\t0x558: 0x0001, 0x559: 0x0001, 0x55a: 0x0001, 0x55b: 0x0001, 0x55c: 0x0001, 0x55d: 0x0001,\n\t0x55e: 0x0001, 0x55f: 0x0001, 0x560: 0x0001, 0x561: 0x0001, 0x562: 0x0001, 0x563: 0x0001,\n\t0x564: 0x0001, 0x565: 0x0001, 0x566: 0x0001, 0x567: 0x0001, 0x568: 0x0001, 0x569: 0x0001,\n\t0x56a: 0x0001, 0x56b: 0x000c, 0x56c: 0x000c, 0x56d: 0x000c, 0x56e: 0x000c, 0x56f: 0x000c,\n\t0x570: 0x000c, 0x571: 0x000c, 0x572: 0x000c, 0x573: 0x000c, 0x574: 0x0001, 0x575: 0x0001,\n\t0x576: 0x000a, 0x577: 0x000a, 0x578: 0x000a, 0x579: 0x000a, 0x57a: 0x0001, 0x57b: 0x0001,\n\t0x57c: 0x0001, 0x57d: 0x0001, 0x57e: 0x0001, 0x57f: 0x0001,\n\t// Block 0x16, offset 0x580\n\t0x580: 0x0001, 0x581: 0x0001, 0x582: 0x0001, 0x583: 0x0001, 0x584: 0x0001, 0x585: 0x0001,\n\t0x586: 0x0001, 0x587: 0x0001, 0x588: 0x0001, 0x589: 0x0001, 0x58a: 0x0001, 0x58b: 0x0001,\n\t0x58c: 0x0001, 0x58d: 0x0001, 0x58e: 0x0001, 0x58f: 0x0001, 0x590: 0x0001, 0x591: 0x0001,\n\t0x592: 0x0001, 0x593: 0x0001, 0x594: 0x0001, 0x595: 0x0001, 0x596: 0x000c, 0x597: 0x000c,\n\t0x598: 0x000c, 0x599: 0x000c, 0x59a: 0x0001, 0x59b: 0x000c, 0x59c: 0x000c, 0x59d: 0x000c,\n\t0x59e: 0x000c, 0x59f: 0x000c, 0x5a0: 0x000c, 0x5a1: 0x000c, 0x5a2: 0x000c, 0x5a3: 0x000c,\n\t0x5a4: 0x0001, 0x5a5: 0x000c, 0x5a6: 0x000c, 0x5a7: 0x000c, 0x5a8: 0x0001, 0x5a9: 0x000c,\n\t0x5aa: 0x000c, 0x5ab: 0x000c, 0x5ac: 0x000c, 0x5ad: 0x000c, 0x5ae: 0x0001, 0x5af: 0x0001,\n\t0x5b0: 0x0001, 0x5b1: 0x0001, 0x5b2: 0x0001, 0x5b3: 0x0001, 0x5b4: 0x0001, 0x5b5: 0x0001,\n\t0x5b6: 0x0001, 0x5b7: 0x0001, 0x5b8: 0x0001, 0x5b9: 0x0001, 0x5ba: 0x0001, 0x5bb: 0x0001,\n\t0x5bc: 0x0001, 0x5bd: 0x0001, 0x5be: 0x0001, 0x5bf: 0x0001,\n\t// Block 0x17, offset 0x5c0\n\t0x5c0: 0x0001, 0x5c1: 0x0001, 0x5c2: 0x0001, 0x5c3: 0x0001, 0x5c4: 0x0001, 0x5c5: 0x0001,\n\t0x5c6: 0x0001, 0x5c7: 0x0001, 0x5c8: 0x0001, 0x5c9: 0x0001, 0x5ca: 0x0001, 0x5cb: 0x0001,\n\t0x5cc: 0x0001, 0x5cd: 0x0001, 0x5ce: 0x0001, 0x5cf: 0x0001, 0x5d0: 0x0001, 0x5d1: 0x0001,\n\t0x5d2: 0x0001, 0x5d3: 0x0001, 0x5d4: 0x0001, 0x5d5: 0x0001, 0x5d6: 0x0001, 0x5d7: 0x0001,\n\t0x5d8: 0x0001, 0x5d9: 0x000c, 0x5da: 0x000c, 0x5db: 0x000c, 0x5dc: 0x0001, 0x5dd: 0x0001,\n\t0x5de: 0x0001, 0x5df: 0x0001, 0x5e0: 0x0001, 0x5e1: 0x0001, 0x5e2: 0x0001, 0x5e3: 0x0001,\n\t0x5e4: 0x0001, 0x5e5: 0x0001, 0x5e6: 0x0001, 0x5e7: 0x0001, 0x5e8: 0x0001, 0x5e9: 0x0001,\n\t0x5ea: 0x0001, 0x5eb: 0x0001, 0x5ec: 0x0001, 0x5ed: 0x0001, 0x5ee: 0x0001, 0x5ef: 0x0001,\n\t0x5f0: 0x0001, 0x5f1: 0x0001, 0x5f2: 0x0001, 0x5f3: 0x0001, 0x5f4: 0x0001, 0x5f5: 0x0001,\n\t0x5f6: 0x0001, 0x5f7: 0x0001, 0x5f8: 0x0001, 0x5f9: 0x0001, 0x5fa: 0x0001, 0x5fb: 0x0001,\n\t0x5fc: 0x0001, 0x5fd: 0x0001, 0x5fe: 0x0001, 0x5ff: 0x0001,\n\t// Block 0x18, offset 0x600\n\t0x600: 0x0001, 0x601: 0x0001, 0x602: 0x0001, 0x603: 0x0001, 0x604: 0x0001, 0x605: 0x0001,\n\t0x606: 0x0001, 0x607: 0x0001, 0x608: 0x0001, 0x609: 0x0001, 0x60a: 0x0001, 0x60b: 0x0001,\n\t0x60c: 0x0001, 0x60d: 0x0001, 0x60e: 0x0001, 0x60f: 0x0001, 0x610: 0x0001, 0x611: 0x0001,\n\t0x612: 0x0001, 0x613: 0x0001, 0x614: 0x0001, 0x615: 0x0001, 0x616: 0x0001, 0x617: 0x0001,\n\t0x618: 0x0001, 0x619: 0x0001, 0x61a: 0x0001, 0x61b: 0x0001, 0x61c: 0x0001, 0x61d: 0x0001,\n\t0x61e: 0x0001, 0x61f: 0x0001, 0x620: 0x000d, 0x621: 0x000d, 0x622: 0x000d, 0x623: 0x000d,\n\t0x624: 0x000d, 0x625: 0x000d, 0x626: 0x000d, 0x627: 0x000d, 0x628: 0x000d, 0x629: 0x000d,\n\t0x62a: 0x000d, 0x62b: 0x000d, 0x62c: 0x000d, 0x62d: 0x000d, 0x62e: 0x000d, 0x62f: 0x000d,\n\t0x630: 0x000d, 0x631: 0x000d, 0x632: 0x000d, 0x633: 0x000d, 0x634: 0x000d, 0x635: 0x000d,\n\t0x636: 0x000d, 0x637: 0x000d, 0x638: 0x000d, 0x639: 0x000d, 0x63a: 0x000d, 0x63b: 0x000d,\n\t0x63c: 0x000d, 0x63d: 0x000d, 0x63e: 0x000d, 0x63f: 0x000d,\n\t// Block 0x19, offset 0x640\n\t0x640: 0x000d, 0x641: 0x000d, 0x642: 0x000d, 0x643: 0x000d, 0x644: 0x000d, 0x645: 0x000d,\n\t0x646: 0x000d, 0x647: 0x000d, 0x648: 0x000d, 0x649: 0x000d, 0x64a: 0x000d, 0x64b: 0x000d,\n\t0x64c: 0x000d, 0x64d: 0x000d, 0x64e: 0x000d, 0x64f: 0x000d, 0x650: 0x000d, 0x651: 0x000d,\n\t0x652: 0x000d, 0x653: 0x000d, 0x654: 0x000c, 0x655: 0x000c, 0x656: 0x000c, 0x657: 0x000c,\n\t0x658: 0x000c, 0x659: 0x000c, 0x65a: 0x000c, 0x65b: 0x000c, 0x65c: 0x000c, 0x65d: 0x000c,\n\t0x65e: 0x000c, 0x65f: 0x000c, 0x660: 0x000c, 0x661: 0x000c, 0x662: 0x0005, 0x663: 0x000c,\n\t0x664: 0x000c, 0x665: 0x000c, 0x666: 0x000c, 0x667: 0x000c, 0x668: 0x000c, 0x669: 0x000c,\n\t0x66a: 0x000c, 0x66b: 0x000c, 0x66c: 0x000c, 0x66d: 0x000c, 0x66e: 0x000c, 0x66f: 0x000c,\n\t0x670: 0x000c, 0x671: 0x000c, 0x672: 0x000c, 0x673: 0x000c, 0x674: 0x000c, 0x675: 0x000c,\n\t0x676: 0x000c, 0x677: 0x000c, 0x678: 0x000c, 0x679: 0x000c, 0x67a: 0x000c, 0x67b: 0x000c,\n\t0x67c: 0x000c, 0x67d: 0x000c, 0x67e: 0x000c, 0x67f: 0x000c,\n\t// Block 0x1a, offset 0x680\n\t0x680: 0x000c, 0x681: 0x000c, 0x682: 0x000c,\n\t0x6ba: 0x000c,\n\t0x6bc: 0x000c,\n\t// Block 0x1b, offset 0x6c0\n\t0x6c1: 0x000c, 0x6c2: 0x000c, 0x6c3: 0x000c, 0x6c4: 0x000c, 0x6c5: 0x000c,\n\t0x6c6: 0x000c, 0x6c7: 0x000c, 0x6c8: 0x000c,\n\t0x6cd: 0x000c, 0x6d1: 0x000c,\n\t0x6d2: 0x000c, 0x6d3: 0x000c, 0x6d4: 0x000c, 0x6d5: 0x000c, 0x6d6: 0x000c, 0x6d7: 0x000c,\n\t0x6e2: 0x000c, 0x6e3: 0x000c,\n\t// Block 0x1c, offset 0x700\n\t0x701: 0x000c,\n\t0x73c: 0x000c,\n\t// Block 0x1d, offset 0x740\n\t0x741: 0x000c, 0x742: 0x000c, 0x743: 0x000c, 0x744: 0x000c,\n\t0x74d: 0x000c,\n\t0x762: 0x000c, 0x763: 0x000c,\n\t0x772: 0x0004, 0x773: 0x0004,\n\t0x77b: 0x0004,\n\t// Block 0x1e, offset 0x780\n\t0x781: 0x000c, 0x782: 0x000c,\n\t0x7bc: 0x000c,\n\t// Block 0x1f, offset 0x7c0\n\t0x7c1: 0x000c, 0x7c2: 0x000c,\n\t0x7c7: 0x000c, 0x7c8: 0x000c, 0x7cb: 0x000c,\n\t0x7cc: 0x000c, 0x7cd: 0x000c, 0x7d1: 0x000c,\n\t0x7f0: 0x000c, 0x7f1: 0x000c, 0x7f5: 0x000c,\n\t// Block 0x20, offset 0x800\n\t0x801: 0x000c, 0x802: 0x000c, 0x803: 0x000c, 0x804: 0x000c, 0x805: 0x000c,\n\t0x807: 0x000c, 0x808: 0x000c,\n\t0x80d: 0x000c,\n\t0x822: 0x000c, 0x823: 0x000c,\n\t0x831: 0x0004,\n\t// Block 0x21, offset 0x840\n\t0x841: 0x000c,\n\t0x87c: 0x000c, 0x87f: 0x000c,\n\t// Block 0x22, offset 0x880\n\t0x881: 0x000c, 0x882: 0x000c, 0x883: 0x000c, 0x884: 0x000c,\n\t0x88d: 0x000c,\n\t0x896: 0x000c,\n\t0x8a2: 0x000c, 0x8a3: 0x000c,\n\t// Block 0x23, offset 0x8c0\n\t0x8c2: 0x000c,\n\t// Block 0x24, offset 0x900\n\t0x900: 0x000c,\n\t0x90d: 0x000c,\n\t0x933: 0x000a, 0x934: 0x000a, 0x935: 0x000a,\n\t0x936: 0x000a, 0x937: 0x000a, 0x938: 0x000a, 0x939: 0x0004, 0x93a: 0x000a,\n\t// Block 0x25, offset 0x940\n\t0x940: 0x000c,\n\t0x97e: 0x000c, 0x97f: 0x000c,\n\t// Block 0x26, offset 0x980\n\t0x980: 0x000c,\n\t0x986: 0x000c, 0x987: 0x000c, 0x988: 0x000c, 0x98a: 0x000c, 0x98b: 0x000c,\n\t0x98c: 0x000c, 0x98d: 0x000c,\n\t0x995: 0x000c, 0x996: 0x000c,\n\t0x9a2: 0x000c, 0x9a3: 0x000c,\n\t0x9b8: 0x000a, 0x9b9: 0x000a, 0x9ba: 0x000a, 0x9bb: 0x000a,\n\t0x9bc: 0x000a, 0x9bd: 0x000a, 0x9be: 0x000a,\n\t// Block 0x27, offset 0x9c0\n\t0x9cc: 0x000c, 0x9cd: 0x000c,\n\t0x9e2: 0x000c, 0x9e3: 0x000c,\n\t// Block 0x28, offset 0xa00\n\t0xa01: 0x000c,\n\t// Block 0x29, offset 0xa40\n\t0xa41: 0x000c, 0xa42: 0x000c, 0xa43: 0x000c, 0xa44: 0x000c,\n\t0xa4d: 0x000c,\n\t0xa62: 0x000c, 0xa63: 0x000c,\n\t// Block 0x2a, offset 0xa80\n\t0xa8a: 0x000c,\n\t0xa92: 0x000c, 0xa93: 0x000c, 0xa94: 0x000c, 0xa96: 0x000c,\n\t// Block 0x2b, offset 0xac0\n\t0xaf1: 0x000c, 0xaf4: 0x000c, 0xaf5: 0x000c,\n\t0xaf6: 0x000c, 0xaf7: 0x000c, 0xaf8: 0x000c, 0xaf9: 0x000c, 0xafa: 0x000c,\n\t0xaff: 0x0004,\n\t// Block 0x2c, offset 0xb00\n\t0xb07: 0x000c, 0xb08: 0x000c, 0xb09: 0x000c, 0xb0a: 0x000c, 0xb0b: 0x000c,\n\t0xb0c: 0x000c, 0xb0d: 0x000c, 0xb0e: 0x000c,\n\t// Block 0x2d, offset 0xb40\n\t0xb71: 0x000c, 0xb74: 0x000c, 0xb75: 0x000c,\n\t0xb76: 0x000c, 0xb77: 0x000c, 0xb78: 0x000c, 0xb79: 0x000c, 0xb7b: 0x000c,\n\t0xb7c: 0x000c,\n\t// Block 0x2e, offset 0xb80\n\t0xb88: 0x000c, 0xb89: 0x000c, 0xb8a: 0x000c, 0xb8b: 0x000c,\n\t0xb8c: 0x000c, 0xb8d: 0x000c,\n\t// Block 0x2f, offset 0xbc0\n\t0xbd8: 0x000c, 0xbd9: 0x000c,\n\t0xbf5: 0x000c,\n\t0xbf7: 0x000c, 0xbf9: 0x000c, 0xbfa: 0x003a, 0xbfb: 0x002a,\n\t0xbfc: 0x003a, 0xbfd: 0x002a,\n\t// Block 0x30, offset 0xc00\n\t0xc31: 0x000c, 0xc32: 0x000c, 0xc33: 0x000c, 0xc34: 0x000c, 0xc35: 0x000c,\n\t0xc36: 0x000c, 0xc37: 0x000c, 0xc38: 0x000c, 0xc39: 0x000c, 0xc3a: 0x000c, 0xc3b: 0x000c,\n\t0xc3c: 0x000c, 0xc3d: 0x000c, 0xc3e: 0x000c,\n\t// Block 0x31, offset 0xc40\n\t0xc40: 0x000c, 0xc41: 0x000c, 0xc42: 0x000c, 0xc43: 0x000c, 0xc44: 0x000c,\n\t0xc46: 0x000c, 0xc47: 0x000c,\n\t0xc4d: 0x000c, 0xc4e: 0x000c, 0xc4f: 0x000c, 0xc50: 0x000c, 0xc51: 0x000c,\n\t0xc52: 0x000c, 0xc53: 0x000c, 0xc54: 0x000c, 0xc55: 0x000c, 0xc56: 0x000c, 0xc57: 0x000c,\n\t0xc59: 0x000c, 0xc5a: 0x000c, 0xc5b: 0x000c, 0xc5c: 0x000c, 0xc5d: 0x000c,\n\t0xc5e: 0x000c, 0xc5f: 0x000c, 0xc60: 0x000c, 0xc61: 0x000c, 0xc62: 0x000c, 0xc63: 0x000c,\n\t0xc64: 0x000c, 0xc65: 0x000c, 0xc66: 0x000c, 0xc67: 0x000c, 0xc68: 0x000c, 0xc69: 0x000c,\n\t0xc6a: 0x000c, 0xc6b: 0x000c, 0xc6c: 0x000c, 0xc6d: 0x000c, 0xc6e: 0x000c, 0xc6f: 0x000c,\n\t0xc70: 0x000c, 0xc71: 0x000c, 0xc72: 0x000c, 0xc73: 0x000c, 0xc74: 0x000c, 0xc75: 0x000c,\n\t0xc76: 0x000c, 0xc77: 0x000c, 0xc78: 0x000c, 0xc79: 0x000c, 0xc7a: 0x000c, 0xc7b: 0x000c,\n\t0xc7c: 0x000c,\n\t// Block 0x32, offset 0xc80\n\t0xc86: 0x000c,\n\t// Block 0x33, offset 0xcc0\n\t0xced: 0x000c, 0xcee: 0x000c, 0xcef: 0x000c,\n\t0xcf0: 0x000c, 0xcf2: 0x000c, 0xcf3: 0x000c, 0xcf4: 0x000c, 0xcf5: 0x000c,\n\t0xcf6: 0x000c, 0xcf7: 0x000c, 0xcf9: 0x000c, 0xcfa: 0x000c,\n\t0xcfd: 0x000c, 0xcfe: 0x000c,\n\t// Block 0x34, offset 0xd00\n\t0xd18: 0x000c, 0xd19: 0x000c,\n\t0xd1e: 0x000c, 0xd1f: 0x000c, 0xd20: 0x000c,\n\t0xd31: 0x000c, 0xd32: 0x000c, 0xd33: 0x000c, 0xd34: 0x000c,\n\t// Block 0x35, offset 0xd40\n\t0xd42: 0x000c, 0xd45: 0x000c,\n\t0xd46: 0x000c,\n\t0xd4d: 0x000c,\n\t0xd5d: 0x000c,\n\t// Block 0x36, offset 0xd80\n\t0xd9d: 0x000c,\n\t0xd9e: 0x000c, 0xd9f: 0x000c,\n\t// Block 0x37, offset 0xdc0\n\t0xdd0: 0x000a, 0xdd1: 0x000a,\n\t0xdd2: 0x000a, 0xdd3: 0x000a, 0xdd4: 0x000a, 0xdd5: 0x000a, 0xdd6: 0x000a, 0xdd7: 0x000a,\n\t0xdd8: 0x000a, 0xdd9: 0x000a,\n\t// Block 0x38, offset 0xe00\n\t0xe00: 0x000a,\n\t// Block 0x39, offset 0xe40\n\t0xe40: 0x0009,\n\t0xe5b: 0x007a, 0xe5c: 0x006a,\n\t// Block 0x3a, offset 0xe80\n\t0xe92: 0x000c, 0xe93: 0x000c, 0xe94: 0x000c,\n\t0xeb2: 0x000c, 0xeb3: 0x000c, 0xeb4: 0x000c,\n\t// Block 0x3b, offset 0xec0\n\t0xed2: 0x000c, 0xed3: 0x000c,\n\t0xef2: 0x000c, 0xef3: 0x000c,\n\t// Block 0x3c, offset 0xf00\n\t0xf34: 0x000c, 0xf35: 0x000c,\n\t0xf37: 0x000c, 0xf38: 0x000c, 0xf39: 0x000c, 0xf3a: 0x000c, 0xf3b: 0x000c,\n\t0xf3c: 0x000c, 0xf3d: 0x000c,\n\t// Block 0x3d, offset 0xf40\n\t0xf46: 0x000c, 0xf49: 0x000c, 0xf4a: 0x000c, 0xf4b: 0x000c,\n\t0xf4c: 0x000c, 0xf4d: 0x000c, 0xf4e: 0x000c, 0xf4f: 0x000c, 0xf50: 0x000c, 0xf51: 0x000c,\n\t0xf52: 0x000c, 0xf53: 0x000c,\n\t0xf5b: 0x0004, 0xf5d: 0x000c,\n\t0xf70: 0x000a, 0xf71: 0x000a, 0xf72: 0x000a, 0xf73: 0x000a, 0xf74: 0x000a, 0xf75: 0x000a,\n\t0xf76: 0x000a, 0xf77: 0x000a, 0xf78: 0x000a, 0xf79: 0x000a,\n\t// Block 0x3e, offset 0xf80\n\t0xf80: 0x000a, 0xf81: 0x000a, 0xf82: 0x000a, 0xf83: 0x000a, 0xf84: 0x000a, 0xf85: 0x000a,\n\t0xf86: 0x000a, 0xf87: 0x000a, 0xf88: 0x000a, 0xf89: 0x000a, 0xf8a: 0x000a, 0xf8b: 0x000c,\n\t0xf8c: 0x000c, 0xf8d: 0x000c, 0xf8e: 0x000b,\n\t// Block 0x3f, offset 0xfc0\n\t0xfc5: 0x000c,\n\t0xfc6: 0x000c,\n\t0xfe9: 0x000c,\n\t// Block 0x40, offset 0x1000\n\t0x1020: 0x000c, 0x1021: 0x000c, 0x1022: 0x000c,\n\t0x1027: 0x000c, 0x1028: 0x000c,\n\t0x1032: 0x000c,\n\t0x1039: 0x000c, 0x103a: 0x000c, 0x103b: 0x000c,\n\t// Block 0x41, offset 0x1040\n\t0x1040: 0x000a, 0x1044: 0x000a, 0x1045: 0x000a,\n\t// Block 0x42, offset 0x1080\n\t0x109e: 0x000a, 0x109f: 0x000a, 0x10a0: 0x000a, 0x10a1: 0x000a, 0x10a2: 0x000a, 0x10a3: 0x000a,\n\t0x10a4: 0x000a, 0x10a5: 0x000a, 0x10a6: 0x000a, 0x10a7: 0x000a, 0x10a8: 0x000a, 0x10a9: 0x000a,\n\t0x10aa: 0x000a, 0x10ab: 0x000a, 0x10ac: 0x000a, 0x10ad: 0x000a, 0x10ae: 0x000a, 0x10af: 0x000a,\n\t0x10b0: 0x000a, 0x10b1: 0x000a, 0x10b2: 0x000a, 0x10b3: 0x000a, 0x10b4: 0x000a, 0x10b5: 0x000a,\n\t0x10b6: 0x000a, 0x10b7: 0x000a, 0x10b8: 0x000a, 0x10b9: 0x000a, 0x10ba: 0x000a, 0x10bb: 0x000a,\n\t0x10bc: 0x000a, 0x10bd: 0x000a, 0x10be: 0x000a, 0x10bf: 0x000a,\n\t// Block 0x43, offset 0x10c0\n\t0x10d7: 0x000c,\n\t0x10d8: 0x000c, 0x10db: 0x000c,\n\t// Block 0x44, offset 0x1100\n\t0x1116: 0x000c,\n\t0x1118: 0x000c, 0x1119: 0x000c, 0x111a: 0x000c, 0x111b: 0x000c, 0x111c: 0x000c, 0x111d: 0x000c,\n\t0x111e: 0x000c, 0x1120: 0x000c, 0x1122: 0x000c,\n\t0x1125: 0x000c, 0x1126: 0x000c, 0x1127: 0x000c, 0x1128: 0x000c, 0x1129: 0x000c,\n\t0x112a: 0x000c, 0x112b: 0x000c, 0x112c: 0x000c,\n\t0x1133: 0x000c, 0x1134: 0x000c, 0x1135: 0x000c,\n\t0x1136: 0x000c, 0x1137: 0x000c, 0x1138: 0x000c, 0x1139: 0x000c, 0x113a: 0x000c, 0x113b: 0x000c,\n\t0x113c: 0x000c, 0x113f: 0x000c,\n\t// Block 0x45, offset 0x1140\n\t0x1170: 0x000c, 0x1171: 0x000c, 0x1172: 0x000c, 0x1173: 0x000c, 0x1174: 0x000c, 0x1175: 0x000c,\n\t0x1176: 0x000c, 0x1177: 0x000c, 0x1178: 0x000c, 0x1179: 0x000c, 0x117a: 0x000c, 0x117b: 0x000c,\n\t0x117c: 0x000c, 0x117d: 0x000c, 0x117e: 0x000c,\n\t// Block 0x46, offset 0x1180\n\t0x1180: 0x000c, 0x1181: 0x000c, 0x1182: 0x000c, 0x1183: 0x000c,\n\t0x11b4: 0x000c,\n\t0x11b6: 0x000c, 0x11b7: 0x000c, 0x11b8: 0x000c, 0x11b9: 0x000c, 0x11ba: 0x000c,\n\t0x11bc: 0x000c,\n\t// Block 0x47, offset 0x11c0\n\t0x11c2: 0x000c,\n\t0x11eb: 0x000c, 0x11ec: 0x000c, 0x11ed: 0x000c, 0x11ee: 0x000c, 0x11ef: 0x000c,\n\t0x11f0: 0x000c, 0x11f1: 0x000c, 0x11f2: 0x000c, 0x11f3: 0x000c,\n\t// Block 0x48, offset 0x1200\n\t0x1200: 0x000c, 0x1201: 0x000c,\n\t0x1222: 0x000c, 0x1223: 0x000c,\n\t0x1224: 0x000c, 0x1225: 0x000c, 0x1228: 0x000c, 0x1229: 0x000c,\n\t0x122b: 0x000c, 0x122c: 0x000c, 0x122d: 0x000c,\n\t// Block 0x49, offset 0x1240\n\t0x1266: 0x000c, 0x1268: 0x000c, 0x1269: 0x000c,\n\t0x126d: 0x000c, 0x126f: 0x000c,\n\t0x1270: 0x000c, 0x1271: 0x000c,\n\t// Block 0x4a, offset 0x1280\n\t0x12ac: 0x000c, 0x12ad: 0x000c, 0x12ae: 0x000c, 0x12af: 0x000c,\n\t0x12b0: 0x000c, 0x12b1: 0x000c, 0x12b2: 0x000c, 0x12b3: 0x000c,\n\t0x12b6: 0x000c, 0x12b7: 0x000c,\n\t// Block 0x4b, offset 0x12c0\n\t0x12d0: 0x000c, 0x12d1: 0x000c,\n\t0x12d2: 0x000c, 0x12d4: 0x000c, 0x12d5: 0x000c, 0x12d6: 0x000c, 0x12d7: 0x000c,\n\t0x12d8: 0x000c, 0x12d9: 0x000c, 0x12da: 0x000c, 0x12db: 0x000c, 0x12dc: 0x000c, 0x12dd: 0x000c,\n\t0x12de: 0x000c, 0x12df: 0x000c, 0x12e0: 0x000c, 0x12e2: 0x000c, 0x12e3: 0x000c,\n\t0x12e4: 0x000c, 0x12e5: 0x000c, 0x12e6: 0x000c, 0x12e7: 0x000c, 0x12e8: 0x000c,\n\t0x12ed: 0x000c,\n\t0x12f4: 0x000c,\n\t0x12f8: 0x000c, 0x12f9: 0x000c,\n\t// Block 0x4c, offset 0x1300\n\t0x1300: 0x000c, 0x1301: 0x000c, 0x1302: 0x000c, 0x1303: 0x000c, 0x1304: 0x000c, 0x1305: 0x000c,\n\t0x1306: 0x000c, 0x1307: 0x000c, 0x1308: 0x000c, 0x1309: 0x000c, 0x130a: 0x000c, 0x130b: 0x000c,\n\t0x130c: 0x000c, 0x130d: 0x000c, 0x130e: 0x000c, 0x130f: 0x000c, 0x1310: 0x000c, 0x1311: 0x000c,\n\t0x1312: 0x000c, 0x1313: 0x000c, 0x1314: 0x000c, 0x1315: 0x000c, 0x1316: 0x000c, 0x1317: 0x000c,\n\t0x1318: 0x000c, 0x1319: 0x000c, 0x131a: 0x000c, 0x131b: 0x000c, 0x131c: 0x000c, 0x131d: 0x000c,\n\t0x131e: 0x000c, 0x131f: 0x000c, 0x1320: 0x000c, 0x1321: 0x000c, 0x1322: 0x000c, 0x1323: 0x000c,\n\t0x1324: 0x000c, 0x1325: 0x000c, 0x1326: 0x000c, 0x1327: 0x000c, 0x1328: 0x000c, 0x1329: 0x000c,\n\t0x132a: 0x000c, 0x132b: 0x000c, 0x132c: 0x000c, 0x132d: 0x000c, 0x132e: 0x000c, 0x132f: 0x000c,\n\t0x1330: 0x000c, 0x1331: 0x000c, 0x1332: 0x000c, 0x1333: 0x000c, 0x1334: 0x000c, 0x1335: 0x000c,\n\t0x133b: 0x000c,\n\t0x133c: 0x000c, 0x133d: 0x000c, 0x133e: 0x000c, 0x133f: 0x000c,\n\t// Block 0x4d, offset 0x1340\n\t0x137d: 0x000a, 0x137f: 0x000a,\n\t// Block 0x4e, offset 0x1380\n\t0x1380: 0x000a, 0x1381: 0x000a,\n\t0x138d: 0x000a, 0x138e: 0x000a, 0x138f: 0x000a,\n\t0x139d: 0x000a,\n\t0x139e: 0x000a, 0x139f: 0x000a,\n\t0x13ad: 0x000a, 0x13ae: 0x000a, 0x13af: 0x000a,\n\t0x13bd: 0x000a, 0x13be: 0x000a,\n\t// Block 0x4f, offset 0x13c0\n\t0x13c0: 0x0009, 0x13c1: 0x0009, 0x13c2: 0x0009, 0x13c3: 0x0009, 0x13c4: 0x0009, 0x13c5: 0x0009,\n\t0x13c6: 0x0009, 0x13c7: 0x0009, 0x13c8: 0x0009, 0x13c9: 0x0009, 0x13ca: 0x0009, 0x13cb: 0x000b,\n\t0x13cc: 0x000b, 0x13cd: 0x000b, 0x13cf: 0x0001, 0x13d0: 0x000a, 0x13d1: 0x000a,\n\t0x13d2: 0x000a, 0x13d3: 0x000a, 0x13d4: 0x000a, 0x13d5: 0x000a, 0x13d6: 0x000a, 0x13d7: 0x000a,\n\t0x13d8: 0x000a, 0x13d9: 0x000a, 0x13da: 0x000a, 0x13db: 0x000a, 0x13dc: 0x000a, 0x13dd: 0x000a,\n\t0x13de: 0x000a, 0x13df: 0x000a, 0x13e0: 0x000a, 0x13e1: 0x000a, 0x13e2: 0x000a, 0x13e3: 0x000a,\n\t0x13e4: 0x000a, 0x13e5: 0x000a, 0x13e6: 0x000a, 0x13e7: 0x000a, 0x13e8: 0x0009, 0x13e9: 0x0007,\n\t0x13ea: 0x000e, 0x13eb: 0x000e, 0x13ec: 0x000e, 0x13ed: 0x000e, 0x13ee: 0x000e, 0x13ef: 0x0006,\n\t0x13f0: 0x0004, 0x13f1: 0x0004, 0x13f2: 0x0004, 0x13f3: 0x0004, 0x13f4: 0x0004, 0x13f5: 0x000a,\n\t0x13f6: 0x000a, 0x13f7: 0x000a, 0x13f8: 0x000a, 0x13f9: 0x000a, 0x13fa: 0x000a, 0x13fb: 0x000a,\n\t0x13fc: 0x000a, 0x13fd: 0x000a, 0x13fe: 0x000a, 0x13ff: 0x000a,\n\t// Block 0x50, offset 0x1400\n\t0x1400: 0x000a, 0x1401: 0x000a, 0x1402: 0x000a, 0x1403: 0x000a, 0x1404: 0x0006, 0x1405: 0x009a,\n\t0x1406: 0x008a, 0x1407: 0x000a, 0x1408: 0x000a, 0x1409: 0x000a, 0x140a: 0x000a, 0x140b: 0x000a,\n\t0x140c: 0x000a, 0x140d: 0x000a, 0x140e: 0x000a, 0x140f: 0x000a, 0x1410: 0x000a, 0x1411: 0x000a,\n\t0x1412: 0x000a, 0x1413: 0x000a, 0x1414: 0x000a, 0x1415: 0x000a, 0x1416: 0x000a, 0x1417: 0x000a,\n\t0x1418: 0x000a, 0x1419: 0x000a, 0x141a: 0x000a, 0x141b: 0x000a, 0x141c: 0x000a, 0x141d: 0x000a,\n\t0x141e: 0x000a, 0x141f: 0x0009, 0x1420: 0x000b, 0x1421: 0x000b, 0x1422: 0x000b, 0x1423: 0x000b,\n\t0x1424: 0x000b, 0x1425: 0x000b, 0x1426: 0x000e, 0x1427: 0x000e, 0x1428: 0x000e, 0x1429: 0x000e,\n\t0x142a: 0x000b, 0x142b: 0x000b, 0x142c: 0x000b, 0x142d: 0x000b, 0x142e: 0x000b, 0x142f: 0x000b,\n\t0x1430: 0x0002, 0x1434: 0x0002, 0x1435: 0x0002,\n\t0x1436: 0x0002, 0x1437: 0x0002, 0x1438: 0x0002, 0x1439: 0x0002, 0x143a: 0x0003, 0x143b: 0x0003,\n\t0x143c: 0x000a, 0x143d: 0x009a, 0x143e: 0x008a,\n\t// Block 0x51, offset 0x1440\n\t0x1440: 0x0002, 0x1441: 0x0002, 0x1442: 0x0002, 0x1443: 0x0002, 0x1444: 0x0002, 0x1445: 0x0002,\n\t0x1446: 0x0002, 0x1447: 0x0002, 0x1448: 0x0002, 0x1449: 0x0002, 0x144a: 0x0003, 0x144b: 0x0003,\n\t0x144c: 0x000a, 0x144d: 0x009a, 0x144e: 0x008a,\n\t0x1460: 0x0004, 0x1461: 0x0004, 0x1462: 0x0004, 0x1463: 0x0004,\n\t0x1464: 0x0004, 0x1465: 0x0004, 0x1466: 0x0004, 0x1467: 0x0004, 0x1468: 0x0004, 0x1469: 0x0004,\n\t0x146a: 0x0004, 0x146b: 0x0004, 0x146c: 0x0004, 0x146d: 0x0004, 0x146e: 0x0004, 0x146f: 0x0004,\n\t0x1470: 0x0004, 0x1471: 0x0004, 0x1472: 0x0004, 0x1473: 0x0004, 0x1474: 0x0004, 0x1475: 0x0004,\n\t0x1476: 0x0004, 0x1477: 0x0004, 0x1478: 0x0004, 0x1479: 0x0004, 0x147a: 0x0004, 0x147b: 0x0004,\n\t0x147c: 0x0004, 0x147d: 0x0004, 0x147e: 0x0004, 0x147f: 0x0004,\n\t// Block 0x52, offset 0x1480\n\t0x1480: 0x0004, 0x1481: 0x0004, 0x1482: 0x0004, 0x1483: 0x0004, 0x1484: 0x0004, 0x1485: 0x0004,\n\t0x1486: 0x0004, 0x1487: 0x0004, 0x1488: 0x0004, 0x1489: 0x0004, 0x148a: 0x0004, 0x148b: 0x0004,\n\t0x148c: 0x0004, 0x148d: 0x0004, 0x148e: 0x0004, 0x148f: 0x0004, 0x1490: 0x000c, 0x1491: 0x000c,\n\t0x1492: 0x000c, 0x1493: 0x000c, 0x1494: 0x000c, 0x1495: 0x000c, 0x1496: 0x000c, 0x1497: 0x000c,\n\t0x1498: 0x000c, 0x1499: 0x000c, 0x149a: 0x000c, 0x149b: 0x000c, 0x149c: 0x000c, 0x149d: 0x000c,\n\t0x149e: 0x000c, 0x149f: 0x000c, 0x14a0: 0x000c, 0x14a1: 0x000c, 0x14a2: 0x000c, 0x14a3: 0x000c,\n\t0x14a4: 0x000c, 0x14a5: 0x000c, 0x14a6: 0x000c, 0x14a7: 0x000c, 0x14a8: 0x000c, 0x14a9: 0x000c,\n\t0x14aa: 0x000c, 0x14ab: 0x000c, 0x14ac: 0x000c, 0x14ad: 0x000c, 0x14ae: 0x000c, 0x14af: 0x000c,\n\t0x14b0: 0x000c,\n\t// Block 0x53, offset 0x14c0\n\t0x14c0: 0x000a, 0x14c1: 0x000a, 0x14c3: 0x000a, 0x14c4: 0x000a, 0x14c5: 0x000a,\n\t0x14c6: 0x000a, 0x14c8: 0x000a, 0x14c9: 0x000a,\n\t0x14d4: 0x000a, 0x14d6: 0x000a, 0x14d7: 0x000a,\n\t0x14d8: 0x000a,\n\t0x14de: 0x000a, 0x14df: 0x000a, 0x14e0: 0x000a, 0x14e1: 0x000a, 0x14e2: 0x000a, 0x14e3: 0x000a,\n\t0x14e5: 0x000a, 0x14e7: 0x000a, 0x14e9: 0x000a,\n\t0x14ee: 0x0004,\n\t0x14fa: 0x000a, 0x14fb: 0x000a,\n\t// Block 0x54, offset 0x1500\n\t0x1500: 0x000a, 0x1501: 0x000a, 0x1502: 0x000a, 0x1503: 0x000a, 0x1504: 0x000a,\n\t0x150a: 0x000a, 0x150b: 0x000a,\n\t0x150c: 0x000a, 0x150d: 0x000a, 0x1510: 0x000a, 0x1511: 0x000a,\n\t0x1512: 0x000a, 0x1513: 0x000a, 0x1514: 0x000a, 0x1515: 0x000a, 0x1516: 0x000a, 0x1517: 0x000a,\n\t0x1518: 0x000a, 0x1519: 0x000a, 0x151a: 0x000a, 0x151b: 0x000a, 0x151c: 0x000a, 0x151d: 0x000a,\n\t0x151e: 0x000a, 0x151f: 0x000a,\n\t// Block 0x55, offset 0x1540\n\t0x1549: 0x000a, 0x154a: 0x000a, 0x154b: 0x000a,\n\t0x1550: 0x000a, 0x1551: 0x000a,\n\t0x1552: 0x000a, 0x1553: 0x000a, 0x1554: 0x000a, 0x1555: 0x000a, 0x1556: 0x000a, 0x1557: 0x000a,\n\t0x1558: 0x000a, 0x1559: 0x000a, 0x155a: 0x000a, 0x155b: 0x000a, 0x155c: 0x000a, 0x155d: 0x000a,\n\t0x155e: 0x000a, 0x155f: 0x000a, 0x1560: 0x000a, 0x1561: 0x000a, 0x1562: 0x000a, 0x1563: 0x000a,\n\t0x1564: 0x000a, 0x1565: 0x000a, 0x1566: 0x000a, 0x1567: 0x000a, 0x1568: 0x000a, 0x1569: 0x000a,\n\t0x156a: 0x000a, 0x156b: 0x000a, 0x156c: 0x000a, 0x156d: 0x000a, 0x156e: 0x000a, 0x156f: 0x000a,\n\t0x1570: 0x000a, 0x1571: 0x000a, 0x1572: 0x000a, 0x1573: 0x000a, 0x1574: 0x000a, 0x1575: 0x000a,\n\t0x1576: 0x000a, 0x1577: 0x000a, 0x1578: 0x000a, 0x1579: 0x000a, 0x157a: 0x000a, 0x157b: 0x000a,\n\t0x157c: 0x000a, 0x157d: 0x000a, 0x157e: 0x000a, 0x157f: 0x000a,\n\t// Block 0x56, offset 0x1580\n\t0x1580: 0x000a, 0x1581: 0x000a, 0x1582: 0x000a, 0x1583: 0x000a, 0x1584: 0x000a, 0x1585: 0x000a,\n\t0x1586: 0x000a, 0x1587: 0x000a, 0x1588: 0x000a, 0x1589: 0x000a, 0x158a: 0x000a, 0x158b: 0x000a,\n\t0x158c: 0x000a, 0x158d: 0x000a, 0x158e: 0x000a, 0x158f: 0x000a, 0x1590: 0x000a, 0x1591: 0x000a,\n\t0x1592: 0x000a, 0x1593: 0x000a, 0x1594: 0x000a, 0x1595: 0x000a, 0x1596: 0x000a, 0x1597: 0x000a,\n\t0x1598: 0x000a, 0x1599: 0x000a, 0x159a: 0x000a, 0x159b: 0x000a, 0x159c: 0x000a, 0x159d: 0x000a,\n\t0x159e: 0x000a, 0x159f: 0x000a, 0x15a0: 0x000a, 0x15a1: 0x000a, 0x15a2: 0x000a, 0x15a3: 0x000a,\n\t0x15a4: 0x000a, 0x15a5: 0x000a, 0x15a6: 0x000a, 0x15a7: 0x000a, 0x15a8: 0x000a, 0x15a9: 0x000a,\n\t0x15aa: 0x000a, 0x15ab: 0x000a, 0x15ac: 0x000a, 0x15ad: 0x000a, 0x15ae: 0x000a, 0x15af: 0x000a,\n\t0x15b0: 0x000a, 0x15b1: 0x000a, 0x15b2: 0x000a, 0x15b3: 0x000a, 0x15b4: 0x000a, 0x15b5: 0x000a,\n\t0x15b6: 0x000a, 0x15b7: 0x000a, 0x15b8: 0x000a, 0x15b9: 0x000a, 0x15ba: 0x000a, 0x15bb: 0x000a,\n\t0x15bc: 0x000a, 0x15bd: 0x000a, 0x15be: 0x000a, 0x15bf: 0x000a,\n\t// Block 0x57, offset 0x15c0\n\t0x15c0: 0x000a, 0x15c1: 0x000a, 0x15c2: 0x000a, 0x15c3: 0x000a, 0x15c4: 0x000a, 0x15c5: 0x000a,\n\t0x15c6: 0x000a, 0x15c7: 0x000a, 0x15c8: 0x000a, 0x15c9: 0x000a, 0x15ca: 0x000a, 0x15cb: 0x000a,\n\t0x15cc: 0x000a, 0x15cd: 0x000a, 0x15ce: 0x000a, 0x15cf: 0x000a, 0x15d0: 0x000a, 0x15d1: 0x000a,\n\t0x15d2: 0x0003, 0x15d3: 0x0004, 0x15d4: 0x000a, 0x15d5: 0x000a, 0x15d6: 0x000a, 0x15d7: 0x000a,\n\t0x15d8: 0x000a, 0x15d9: 0x000a, 0x15da: 0x000a, 0x15db: 0x000a, 0x15dc: 0x000a, 0x15dd: 0x000a,\n\t0x15de: 0x000a, 0x15df: 0x000a, 0x15e0: 0x000a, 0x15e1: 0x000a, 0x15e2: 0x000a, 0x15e3: 0x000a,\n\t0x15e4: 0x000a, 0x15e5: 0x000a, 0x15e6: 0x000a, 0x15e7: 0x000a, 0x15e8: 0x000a, 0x15e9: 0x000a,\n\t0x15ea: 0x000a, 0x15eb: 0x000a, 0x15ec: 0x000a, 0x15ed: 0x000a, 0x15ee: 0x000a, 0x15ef: 0x000a,\n\t0x15f0: 0x000a, 0x15f1: 0x000a, 0x15f2: 0x000a, 0x15f3: 0x000a, 0x15f4: 0x000a, 0x15f5: 0x000a,\n\t0x15f6: 0x000a, 0x15f7: 0x000a, 0x15f8: 0x000a, 0x15f9: 0x000a, 0x15fa: 0x000a, 0x15fb: 0x000a,\n\t0x15fc: 0x000a, 0x15fd: 0x000a, 0x15fe: 0x000a, 0x15ff: 0x000a,\n\t// Block 0x58, offset 0x1600\n\t0x1600: 0x000a, 0x1601: 0x000a, 0x1602: 0x000a, 0x1603: 0x000a, 0x1604: 0x000a, 0x1605: 0x000a,\n\t0x1606: 0x000a, 0x1607: 0x000a, 0x1608: 0x003a, 0x1609: 0x002a, 0x160a: 0x003a, 0x160b: 0x002a,\n\t0x160c: 0x000a, 0x160d: 0x000a, 0x160e: 0x000a, 0x160f: 0x000a, 0x1610: 0x000a, 0x1611: 0x000a,\n\t0x1612: 0x000a, 0x1613: 0x000a, 0x1614: 0x000a, 0x1615: 0x000a, 0x1616: 0x000a, 0x1617: 0x000a,\n\t0x1618: 0x000a, 0x1619: 0x000a, 0x161a: 0x000a, 0x161b: 0x000a, 0x161c: 0x000a, 0x161d: 0x000a,\n\t0x161e: 0x000a, 0x161f: 0x000a, 0x1620: 0x000a, 0x1621: 0x000a, 0x1622: 0x000a, 0x1623: 0x000a,\n\t0x1624: 0x000a, 0x1625: 0x000a, 0x1626: 0x000a, 0x1627: 0x000a, 0x1628: 0x000a, 0x1629: 0x009a,\n\t0x162a: 0x008a, 0x162b: 0x000a, 0x162c: 0x000a, 0x162d: 0x000a, 0x162e: 0x000a, 0x162f: 0x000a,\n\t0x1630: 0x000a, 0x1631: 0x000a, 0x1632: 0x000a, 0x1633: 0x000a, 0x1634: 0x000a, 0x1635: 0x000a,\n\t// Block 0x59, offset 0x1640\n\t0x167b: 0x000a,\n\t0x167c: 0x000a, 0x167d: 0x000a, 0x167e: 0x000a, 0x167f: 0x000a,\n\t// Block 0x5a, offset 0x1680\n\t0x1680: 0x000a, 0x1681: 0x000a, 0x1682: 0x000a, 0x1683: 0x000a, 0x1684: 0x000a, 0x1685: 0x000a,\n\t0x1686: 0x000a, 0x1687: 0x000a, 0x1688: 0x000a, 0x1689: 0x000a, 0x168a: 0x000a, 0x168b: 0x000a,\n\t0x168c: 0x000a, 0x168d: 0x000a, 0x168e: 0x000a, 0x168f: 0x000a, 0x1690: 0x000a, 0x1691: 0x000a,\n\t0x1692: 0x000a, 0x1693: 0x000a, 0x1694: 0x000a, 0x1696: 0x000a, 0x1697: 0x000a,\n\t0x1698: 0x000a, 0x1699: 0x000a, 0x169a: 0x000a, 0x169b: 0x000a, 0x169c: 0x000a, 0x169d: 0x000a,\n\t0x169e: 0x000a, 0x169f: 0x000a, 0x16a0: 0x000a, 0x16a1: 0x000a, 0x16a2: 0x000a, 0x16a3: 0x000a,\n\t0x16a4: 0x000a, 0x16a5: 0x000a, 0x16a6: 0x000a, 0x16a7: 0x000a, 0x16a8: 0x000a, 0x16a9: 0x000a,\n\t0x16aa: 0x000a, 0x16ab: 0x000a, 0x16ac: 0x000a, 0x16ad: 0x000a, 0x16ae: 0x000a, 0x16af: 0x000a,\n\t0x16b0: 0x000a, 0x16b1: 0x000a, 0x16b2: 0x000a, 0x16b3: 0x000a, 0x16b4: 0x000a, 0x16b5: 0x000a,\n\t0x16b6: 0x000a, 0x16b7: 0x000a, 0x16b8: 0x000a, 0x16b9: 0x000a, 0x16ba: 0x000a, 0x16bb: 0x000a,\n\t0x16bc: 0x000a, 0x16bd: 0x000a, 0x16be: 0x000a, 0x16bf: 0x000a,\n\t// Block 0x5b, offset 0x16c0\n\t0x16c0: 0x000a, 0x16c1: 0x000a, 0x16c2: 0x000a, 0x16c3: 0x000a, 0x16c4: 0x000a, 0x16c5: 0x000a,\n\t0x16c6: 0x000a, 0x16c7: 0x000a, 0x16c8: 0x000a, 0x16c9: 0x000a, 0x16ca: 0x000a, 0x16cb: 0x000a,\n\t0x16cc: 0x000a, 0x16cd: 0x000a, 0x16ce: 0x000a, 0x16cf: 0x000a, 0x16d0: 0x000a, 0x16d1: 0x000a,\n\t0x16d2: 0x000a, 0x16d3: 0x000a, 0x16d4: 0x000a, 0x16d5: 0x000a, 0x16d6: 0x000a, 0x16d7: 0x000a,\n\t0x16d8: 0x000a, 0x16d9: 0x000a, 0x16da: 0x000a, 0x16db: 0x000a, 0x16dc: 0x000a, 0x16dd: 0x000a,\n\t0x16de: 0x000a, 0x16df: 0x000a, 0x16e0: 0x000a, 0x16e1: 0x000a, 0x16e2: 0x000a, 0x16e3: 0x000a,\n\t0x16e4: 0x000a, 0x16e5: 0x000a, 0x16e6: 0x000a, 0x16e7: 0x000a, 0x16e8: 0x000a, 0x16e9: 0x000a,\n\t0x16ea: 0x000a, 0x16eb: 0x000a, 0x16ec: 0x000a, 0x16ed: 0x000a, 0x16ee: 0x000a, 0x16ef: 0x000a,\n\t0x16f0: 0x000a, 0x16f1: 0x000a, 0x16f2: 0x000a, 0x16f3: 0x000a, 0x16f4: 0x000a, 0x16f5: 0x000a,\n\t0x16f6: 0x000a, 0x16f7: 0x000a, 0x16f8: 0x000a, 0x16f9: 0x000a, 0x16fa: 0x000a, 0x16fb: 0x000a,\n\t0x16fc: 0x000a, 0x16fd: 0x000a, 0x16fe: 0x000a,\n\t// Block 0x5c, offset 0x1700\n\t0x1700: 0x000a, 0x1701: 0x000a, 0x1702: 0x000a, 0x1703: 0x000a, 0x1704: 0x000a, 0x1705: 0x000a,\n\t0x1706: 0x000a, 0x1707: 0x000a, 0x1708: 0x000a, 0x1709: 0x000a, 0x170a: 0x000a, 0x170b: 0x000a,\n\t0x170c: 0x000a, 0x170d: 0x000a, 0x170e: 0x000a, 0x170f: 0x000a, 0x1710: 0x000a, 0x1711: 0x000a,\n\t0x1712: 0x000a, 0x1713: 0x000a, 0x1714: 0x000a, 0x1715: 0x000a, 0x1716: 0x000a, 0x1717: 0x000a,\n\t0x1718: 0x000a, 0x1719: 0x000a, 0x171a: 0x000a, 0x171b: 0x000a, 0x171c: 0x000a, 0x171d: 0x000a,\n\t0x171e: 0x000a, 0x171f: 0x000a, 0x1720: 0x000a, 0x1721: 0x000a, 0x1722: 0x000a, 0x1723: 0x000a,\n\t0x1724: 0x000a, 0x1725: 0x000a, 0x1726: 0x000a,\n\t// Block 0x5d, offset 0x1740\n\t0x1740: 0x000a, 0x1741: 0x000a, 0x1742: 0x000a, 0x1743: 0x000a, 0x1744: 0x000a, 0x1745: 0x000a,\n\t0x1746: 0x000a, 0x1747: 0x000a, 0x1748: 0x000a, 0x1749: 0x000a, 0x174a: 0x000a,\n\t0x1760: 0x000a, 0x1761: 0x000a, 0x1762: 0x000a, 0x1763: 0x000a,\n\t0x1764: 0x000a, 0x1765: 0x000a, 0x1766: 0x000a, 0x1767: 0x000a, 0x1768: 0x000a, 0x1769: 0x000a,\n\t0x176a: 0x000a, 0x176b: 0x000a, 0x176c: 0x000a, 0x176d: 0x000a, 0x176e: 0x000a, 0x176f: 0x000a,\n\t0x1770: 0x000a, 0x1771: 0x000a, 0x1772: 0x000a, 0x1773: 0x000a, 0x1774: 0x000a, 0x1775: 0x000a,\n\t0x1776: 0x000a, 0x1777: 0x000a, 0x1778: 0x000a, 0x1779: 0x000a, 0x177a: 0x000a, 0x177b: 0x000a,\n\t0x177c: 0x000a, 0x177d: 0x000a, 0x177e: 0x000a, 0x177f: 0x000a,\n\t// Block 0x5e, offset 0x1780\n\t0x1780: 0x000a, 0x1781: 0x000a, 0x1782: 0x000a, 0x1783: 0x000a, 0x1784: 0x000a, 0x1785: 0x000a,\n\t0x1786: 0x000a, 0x1787: 0x000a, 0x1788: 0x0002, 0x1789: 0x0002, 0x178a: 0x0002, 0x178b: 0x0002,\n\t0x178c: 0x0002, 0x178d: 0x0002, 0x178e: 0x0002, 0x178f: 0x0002, 0x1790: 0x0002, 0x1791: 0x0002,\n\t0x1792: 0x0002, 0x1793: 0x0002, 0x1794: 0x0002, 0x1795: 0x0002, 0x1796: 0x0002, 0x1797: 0x0002,\n\t0x1798: 0x0002, 0x1799: 0x0002, 0x179a: 0x0002, 0x179b: 0x0002,\n\t// Block 0x5f, offset 0x17c0\n\t0x17ea: 0x000a, 0x17eb: 0x000a, 0x17ec: 0x000a, 0x17ed: 0x000a, 0x17ee: 0x000a, 0x17ef: 0x000a,\n\t0x17f0: 0x000a, 0x17f1: 0x000a, 0x17f2: 0x000a, 0x17f3: 0x000a, 0x17f4: 0x000a, 0x17f5: 0x000a,\n\t0x17f6: 0x000a, 0x17f7: 0x000a, 0x17f8: 0x000a, 0x17f9: 0x000a, 0x17fa: 0x000a, 0x17fb: 0x000a,\n\t0x17fc: 0x000a, 0x17fd: 0x000a, 0x17fe: 0x000a, 0x17ff: 0x000a,\n\t// Block 0x60, offset 0x1800\n\t0x1800: 0x000a, 0x1801: 0x000a, 0x1802: 0x000a, 0x1803: 0x000a, 0x1804: 0x000a, 0x1805: 0x000a,\n\t0x1806: 0x000a, 0x1807: 0x000a, 0x1808: 0x000a, 0x1809: 0x000a, 0x180a: 0x000a, 0x180b: 0x000a,\n\t0x180c: 0x000a, 0x180d: 0x000a, 0x180e: 0x000a, 0x180f: 0x000a, 0x1810: 0x000a, 0x1811: 0x000a,\n\t0x1812: 0x000a, 0x1813: 0x000a, 0x1814: 0x000a, 0x1815: 0x000a, 0x1816: 0x000a, 0x1817: 0x000a,\n\t0x1818: 0x000a, 0x1819: 0x000a, 0x181a: 0x000a, 0x181b: 0x000a, 0x181c: 0x000a, 0x181d: 0x000a,\n\t0x181e: 0x000a, 0x181f: 0x000a, 0x1820: 0x000a, 0x1821: 0x000a, 0x1822: 0x000a, 0x1823: 0x000a,\n\t0x1824: 0x000a, 0x1825: 0x000a, 0x1826: 0x000a, 0x1827: 0x000a, 0x1828: 0x000a, 0x1829: 0x000a,\n\t0x182a: 0x000a, 0x182b: 0x000a, 0x182d: 0x000a, 0x182e: 0x000a, 0x182f: 0x000a,\n\t0x1830: 0x000a, 0x1831: 0x000a, 0x1832: 0x000a, 0x1833: 0x000a, 0x1834: 0x000a, 0x1835: 0x000a,\n\t0x1836: 0x000a, 0x1837: 0x000a, 0x1838: 0x000a, 0x1839: 0x000a, 0x183a: 0x000a, 0x183b: 0x000a,\n\t0x183c: 0x000a, 0x183d: 0x000a, 0x183e: 0x000a, 0x183f: 0x000a,\n\t// Block 0x61, offset 0x1840\n\t0x1840: 0x000a, 0x1841: 0x000a, 0x1842: 0x000a, 0x1843: 0x000a, 0x1844: 0x000a, 0x1845: 0x000a,\n\t0x1846: 0x000a, 0x1847: 0x000a, 0x1848: 0x000a, 0x1849: 0x000a, 0x184a: 0x000a, 0x184b: 0x000a,\n\t0x184c: 0x000a, 0x184d: 0x000a, 0x184e: 0x000a, 0x184f: 0x000a, 0x1850: 0x000a, 0x1851: 0x000a,\n\t0x1852: 0x000a, 0x1853: 0x000a, 0x1854: 0x000a, 0x1855: 0x000a, 0x1856: 0x000a, 0x1857: 0x000a,\n\t0x1858: 0x000a, 0x1859: 0x000a, 0x185a: 0x000a, 0x185b: 0x000a, 0x185c: 0x000a, 0x185d: 0x000a,\n\t0x185e: 0x000a, 0x185f: 0x000a, 0x1860: 0x000a, 0x1861: 0x000a, 0x1862: 0x000a, 0x1863: 0x000a,\n\t0x1864: 0x000a, 0x1865: 0x000a, 0x1866: 0x000a, 0x1867: 0x000a, 0x1868: 0x003a, 0x1869: 0x002a,\n\t0x186a: 0x003a, 0x186b: 0x002a, 0x186c: 0x003a, 0x186d: 0x002a, 0x186e: 0x003a, 0x186f: 0x002a,\n\t0x1870: 0x003a, 0x1871: 0x002a, 0x1872: 0x003a, 0x1873: 0x002a, 0x1874: 0x003a, 0x1875: 0x002a,\n\t0x1876: 0x000a, 0x1877: 0x000a, 0x1878: 0x000a, 0x1879: 0x000a, 0x187a: 0x000a, 0x187b: 0x000a,\n\t0x187c: 0x000a, 0x187d: 0x000a, 0x187e: 0x000a, 0x187f: 0x000a,\n\t// Block 0x62, offset 0x1880\n\t0x1880: 0x000a, 0x1881: 0x000a, 0x1882: 0x000a, 0x1883: 0x000a, 0x1884: 0x000a, 0x1885: 0x009a,\n\t0x1886: 0x008a, 0x1887: 0x000a, 0x1888: 0x000a, 0x1889: 0x000a, 0x188a: 0x000a, 0x188b: 0x000a,\n\t0x188c: 0x000a, 0x188d: 0x000a, 0x188e: 0x000a, 0x188f: 0x000a, 0x1890: 0x000a, 0x1891: 0x000a,\n\t0x1892: 0x000a, 0x1893: 0x000a, 0x1894: 0x000a, 0x1895: 0x000a, 0x1896: 0x000a, 0x1897: 0x000a,\n\t0x1898: 0x000a, 0x1899: 0x000a, 0x189a: 0x000a, 0x189b: 0x000a, 0x189c: 0x000a, 0x189d: 0x000a,\n\t0x189e: 0x000a, 0x189f: 0x000a, 0x18a0: 0x000a, 0x18a1: 0x000a, 0x18a2: 0x000a, 0x18a3: 0x000a,\n\t0x18a4: 0x000a, 0x18a5: 0x000a, 0x18a6: 0x003a, 0x18a7: 0x002a, 0x18a8: 0x003a, 0x18a9: 0x002a,\n\t0x18aa: 0x003a, 0x18ab: 0x002a, 0x18ac: 0x003a, 0x18ad: 0x002a, 0x18ae: 0x003a, 0x18af: 0x002a,\n\t0x18b0: 0x000a, 0x18b1: 0x000a, 0x18b2: 0x000a, 0x18b3: 0x000a, 0x18b4: 0x000a, 0x18b5: 0x000a,\n\t0x18b6: 0x000a, 0x18b7: 0x000a, 0x18b8: 0x000a, 0x18b9: 0x000a, 0x18ba: 0x000a, 0x18bb: 0x000a,\n\t0x18bc: 0x000a, 0x18bd: 0x000a, 0x18be: 0x000a, 0x18bf: 0x000a,\n\t// Block 0x63, offset 0x18c0\n\t0x18c0: 0x000a, 0x18c1: 0x000a, 0x18c2: 0x000a, 0x18c3: 0x007a, 0x18c4: 0x006a, 0x18c5: 0x009a,\n\t0x18c6: 0x008a, 0x18c7: 0x00ba, 0x18c8: 0x00aa, 0x18c9: 0x009a, 0x18ca: 0x008a, 0x18cb: 0x007a,\n\t0x18cc: 0x006a, 0x18cd: 0x00da, 0x18ce: 0x002a, 0x18cf: 0x003a, 0x18d0: 0x00ca, 0x18d1: 0x009a,\n\t0x18d2: 0x008a, 0x18d3: 0x007a, 0x18d4: 0x006a, 0x18d5: 0x009a, 0x18d6: 0x008a, 0x18d7: 0x00ba,\n\t0x18d8: 0x00aa, 0x18d9: 0x000a, 0x18da: 0x000a, 0x18db: 0x000a, 0x18dc: 0x000a, 0x18dd: 0x000a,\n\t0x18de: 0x000a, 0x18df: 0x000a, 0x18e0: 0x000a, 0x18e1: 0x000a, 0x18e2: 0x000a, 0x18e3: 0x000a,\n\t0x18e4: 0x000a, 0x18e5: 0x000a, 0x18e6: 0x000a, 0x18e7: 0x000a, 0x18e8: 0x000a, 0x18e9: 0x000a,\n\t0x18ea: 0x000a, 0x18eb: 0x000a, 0x18ec: 0x000a, 0x18ed: 0x000a, 0x18ee: 0x000a, 0x18ef: 0x000a,\n\t0x18f0: 0x000a, 0x18f1: 0x000a, 0x18f2: 0x000a, 0x18f3: 0x000a, 0x18f4: 0x000a, 0x18f5: 0x000a,\n\t0x18f6: 0x000a, 0x18f7: 0x000a, 0x18f8: 0x000a, 0x18f9: 0x000a, 0x18fa: 0x000a, 0x18fb: 0x000a,\n\t0x18fc: 0x000a, 0x18fd: 0x000a, 0x18fe: 0x000a, 0x18ff: 0x000a,\n\t// Block 0x64, offset 0x1900\n\t0x1900: 0x000a, 0x1901: 0x000a, 0x1902: 0x000a, 0x1903: 0x000a, 0x1904: 0x000a, 0x1905: 0x000a,\n\t0x1906: 0x000a, 0x1907: 0x000a, 0x1908: 0x000a, 0x1909: 0x000a, 0x190a: 0x000a, 0x190b: 0x000a,\n\t0x190c: 0x000a, 0x190d: 0x000a, 0x190e: 0x000a, 0x190f: 0x000a, 0x1910: 0x000a, 0x1911: 0x000a,\n\t0x1912: 0x000a, 0x1913: 0x000a, 0x1914: 0x000a, 0x1915: 0x000a, 0x1916: 0x000a, 0x1917: 0x000a,\n\t0x1918: 0x003a, 0x1919: 0x002a, 0x191a: 0x003a, 0x191b: 0x002a, 0x191c: 0x000a, 0x191d: 0x000a,\n\t0x191e: 0x000a, 0x191f: 0x000a, 0x1920: 0x000a, 0x1921: 0x000a, 0x1922: 0x000a, 0x1923: 0x000a,\n\t0x1924: 0x000a, 0x1925: 0x000a, 0x1926: 0x000a, 0x1927: 0x000a, 0x1928: 0x000a, 0x1929: 0x000a,\n\t0x192a: 0x000a, 0x192b: 0x000a, 0x192c: 0x000a, 0x192d: 0x000a, 0x192e: 0x000a, 0x192f: 0x000a,\n\t0x1930: 0x000a, 0x1931: 0x000a, 0x1932: 0x000a, 0x1933: 0x000a, 0x1934: 0x000a, 0x1935: 0x000a,\n\t0x1936: 0x000a, 0x1937: 0x000a, 0x1938: 0x000a, 0x1939: 0x000a, 0x193a: 0x000a, 0x193b: 0x000a,\n\t0x193c: 0x003a, 0x193d: 0x002a, 0x193e: 0x000a, 0x193f: 0x000a,\n\t// Block 0x65, offset 0x1940\n\t0x1940: 0x000a, 0x1941: 0x000a, 0x1942: 0x000a, 0x1943: 0x000a, 0x1944: 0x000a, 0x1945: 0x000a,\n\t0x1946: 0x000a, 0x1947: 0x000a, 0x1948: 0x000a, 0x1949: 0x000a, 0x194a: 0x000a, 0x194b: 0x000a,\n\t0x194c: 0x000a, 0x194d: 0x000a, 0x194e: 0x000a, 0x194f: 0x000a, 0x1950: 0x000a, 0x1951: 0x000a,\n\t0x1952: 0x000a, 0x1953: 0x000a, 0x1954: 0x000a, 0x1955: 0x000a, 0x1956: 0x000a, 0x1957: 0x000a,\n\t0x1958: 0x000a, 0x1959: 0x000a, 0x195a: 0x000a, 0x195b: 0x000a, 0x195c: 0x000a, 0x195d: 0x000a,\n\t0x195e: 0x000a, 0x195f: 0x000a, 0x1960: 0x000a, 0x1961: 0x000a, 0x1962: 0x000a, 0x1963: 0x000a,\n\t0x1964: 0x000a, 0x1965: 0x000a, 0x1966: 0x000a, 0x1967: 0x000a, 0x1968: 0x000a, 0x1969: 0x000a,\n\t0x196a: 0x000a, 0x196b: 0x000a, 0x196c: 0x000a, 0x196d: 0x000a, 0x196e: 0x000a, 0x196f: 0x000a,\n\t0x1970: 0x000a, 0x1971: 0x000a, 0x1972: 0x000a, 0x1973: 0x000a,\n\t0x1976: 0x000a, 0x1977: 0x000a, 0x1978: 0x000a, 0x1979: 0x000a, 0x197a: 0x000a, 0x197b: 0x000a,\n\t0x197c: 0x000a, 0x197d: 0x000a, 0x197e: 0x000a, 0x197f: 0x000a,\n\t// Block 0x66, offset 0x1980\n\t0x1980: 0x000a, 0x1981: 0x000a, 0x1982: 0x000a, 0x1983: 0x000a, 0x1984: 0x000a, 0x1985: 0x000a,\n\t0x1986: 0x000a, 0x1987: 0x000a, 0x1988: 0x000a, 0x1989: 0x000a, 0x198a: 0x000a, 0x198b: 0x000a,\n\t0x198c: 0x000a, 0x198d: 0x000a, 0x198e: 0x000a, 0x198f: 0x000a, 0x1990: 0x000a, 0x1991: 0x000a,\n\t0x1992: 0x000a, 0x1993: 0x000a, 0x1994: 0x000a, 0x1995: 0x000a,\n\t0x1998: 0x000a, 0x1999: 0x000a, 0x199a: 0x000a, 0x199b: 0x000a, 0x199c: 0x000a, 0x199d: 0x000a,\n\t0x199e: 0x000a, 0x199f: 0x000a, 0x19a0: 0x000a, 0x19a1: 0x000a, 0x19a2: 0x000a, 0x19a3: 0x000a,\n\t0x19a4: 0x000a, 0x19a5: 0x000a, 0x19a6: 0x000a, 0x19a7: 0x000a, 0x19a8: 0x000a, 0x19a9: 0x000a,\n\t0x19aa: 0x000a, 0x19ab: 0x000a, 0x19ac: 0x000a, 0x19ad: 0x000a, 0x19ae: 0x000a, 0x19af: 0x000a,\n\t0x19b0: 0x000a, 0x19b1: 0x000a, 0x19b2: 0x000a, 0x19b3: 0x000a, 0x19b4: 0x000a, 0x19b5: 0x000a,\n\t0x19b6: 0x000a, 0x19b7: 0x000a, 0x19b8: 0x000a, 0x19b9: 0x000a,\n\t0x19bd: 0x000a, 0x19be: 0x000a, 0x19bf: 0x000a,\n\t// Block 0x67, offset 0x19c0\n\t0x19c0: 0x000a, 0x19c1: 0x000a, 0x19c2: 0x000a, 0x19c3: 0x000a, 0x19c4: 0x000a, 0x19c5: 0x000a,\n\t0x19c6: 0x000a, 0x19c7: 0x000a, 0x19c8: 0x000a, 0x19ca: 0x000a, 0x19cb: 0x000a,\n\t0x19cc: 0x000a, 0x19cd: 0x000a, 0x19ce: 0x000a, 0x19cf: 0x000a, 0x19d0: 0x000a, 0x19d1: 0x000a,\n\t0x19ec: 0x000a, 0x19ed: 0x000a, 0x19ee: 0x000a, 0x19ef: 0x000a,\n\t// Block 0x68, offset 0x1a00\n\t0x1a25: 0x000a, 0x1a26: 0x000a, 0x1a27: 0x000a, 0x1a28: 0x000a, 0x1a29: 0x000a,\n\t0x1a2a: 0x000a, 0x1a2f: 0x000c,\n\t0x1a30: 0x000c, 0x1a31: 0x000c,\n\t0x1a39: 0x000a, 0x1a3a: 0x000a, 0x1a3b: 0x000a,\n\t0x1a3c: 0x000a, 0x1a3d: 0x000a, 0x1a3e: 0x000a, 0x1a3f: 0x000a,\n\t// Block 0x69, offset 0x1a40\n\t0x1a7f: 0x000c,\n\t// Block 0x6a, offset 0x1a80\n\t0x1aa0: 0x000c, 0x1aa1: 0x000c, 0x1aa2: 0x000c, 0x1aa3: 0x000c,\n\t0x1aa4: 0x000c, 0x1aa5: 0x000c, 0x1aa6: 0x000c, 0x1aa7: 0x000c, 0x1aa8: 0x000c, 0x1aa9: 0x000c,\n\t0x1aaa: 0x000c, 0x1aab: 0x000c, 0x1aac: 0x000c, 0x1aad: 0x000c, 0x1aae: 0x000c, 0x1aaf: 0x000c,\n\t0x1ab0: 0x000c, 0x1ab1: 0x000c, 0x1ab2: 0x000c, 0x1ab3: 0x000c, 0x1ab4: 0x000c, 0x1ab5: 0x000c,\n\t0x1ab6: 0x000c, 0x1ab7: 0x000c, 0x1ab8: 0x000c, 0x1ab9: 0x000c, 0x1aba: 0x000c, 0x1abb: 0x000c,\n\t0x1abc: 0x000c, 0x1abd: 0x000c, 0x1abe: 0x000c, 0x1abf: 0x000c,\n\t// Block 0x6b, offset 0x1ac0\n\t0x1ac0: 0x000a, 0x1ac1: 0x000a, 0x1ac2: 0x000a, 0x1ac3: 0x000a, 0x1ac4: 0x000a, 0x1ac5: 0x000a,\n\t0x1ac6: 0x000a, 0x1ac7: 0x000a, 0x1ac8: 0x000a, 0x1ac9: 0x000a, 0x1aca: 0x000a, 0x1acb: 0x000a,\n\t0x1acc: 0x000a, 0x1acd: 0x000a, 0x1ace: 0x000a, 0x1acf: 0x000a, 0x1ad0: 0x000a, 0x1ad1: 0x000a,\n\t0x1ad2: 0x000a, 0x1ad3: 0x000a, 0x1ad4: 0x000a, 0x1ad5: 0x000a, 0x1ad6: 0x000a, 0x1ad7: 0x000a,\n\t0x1ad8: 0x000a, 0x1ad9: 0x000a, 0x1ada: 0x000a, 0x1adb: 0x000a, 0x1adc: 0x000a, 0x1add: 0x000a,\n\t0x1ade: 0x000a, 0x1adf: 0x000a, 0x1ae0: 0x000a, 0x1ae1: 0x000a, 0x1ae2: 0x003a, 0x1ae3: 0x002a,\n\t0x1ae4: 0x003a, 0x1ae5: 0x002a, 0x1ae6: 0x003a, 0x1ae7: 0x002a, 0x1ae8: 0x003a, 0x1ae9: 0x002a,\n\t0x1aea: 0x000a, 0x1aeb: 0x000a, 0x1aec: 0x000a, 0x1aed: 0x000a, 0x1aee: 0x000a, 0x1aef: 0x000a,\n\t0x1af0: 0x000a, 0x1af1: 0x000a, 0x1af2: 0x000a, 0x1af3: 0x000a, 0x1af4: 0x000a, 0x1af5: 0x000a,\n\t0x1af6: 0x000a, 0x1af7: 0x000a, 0x1af8: 0x000a, 0x1af9: 0x000a, 0x1afa: 0x000a, 0x1afb: 0x000a,\n\t0x1afc: 0x000a, 0x1afd: 0x000a, 0x1afe: 0x000a, 0x1aff: 0x000a,\n\t// Block 0x6c, offset 0x1b00\n\t0x1b00: 0x000a, 0x1b01: 0x000a, 0x1b02: 0x000a, 0x1b03: 0x000a, 0x1b04: 0x000a,\n\t// Block 0x6d, offset 0x1b40\n\t0x1b40: 0x000a, 0x1b41: 0x000a, 0x1b42: 0x000a, 0x1b43: 0x000a, 0x1b44: 0x000a, 0x1b45: 0x000a,\n\t0x1b46: 0x000a, 0x1b47: 0x000a, 0x1b48: 0x000a, 0x1b49: 0x000a, 0x1b4a: 0x000a, 0x1b4b: 0x000a,\n\t0x1b4c: 0x000a, 0x1b4d: 0x000a, 0x1b4e: 0x000a, 0x1b4f: 0x000a, 0x1b50: 0x000a, 0x1b51: 0x000a,\n\t0x1b52: 0x000a, 0x1b53: 0x000a, 0x1b54: 0x000a, 0x1b55: 0x000a, 0x1b56: 0x000a, 0x1b57: 0x000a,\n\t0x1b58: 0x000a, 0x1b59: 0x000a, 0x1b5b: 0x000a, 0x1b5c: 0x000a, 0x1b5d: 0x000a,\n\t0x1b5e: 0x000a, 0x1b5f: 0x000a, 0x1b60: 0x000a, 0x1b61: 0x000a, 0x1b62: 0x000a, 0x1b63: 0x000a,\n\t0x1b64: 0x000a, 0x1b65: 0x000a, 0x1b66: 0x000a, 0x1b67: 0x000a, 0x1b68: 0x000a, 0x1b69: 0x000a,\n\t0x1b6a: 0x000a, 0x1b6b: 0x000a, 0x1b6c: 0x000a, 0x1b6d: 0x000a, 0x1b6e: 0x000a, 0x1b6f: 0x000a,\n\t0x1b70: 0x000a, 0x1b71: 0x000a, 0x1b72: 0x000a, 0x1b73: 0x000a, 0x1b74: 0x000a, 0x1b75: 0x000a,\n\t0x1b76: 0x000a, 0x1b77: 0x000a, 0x1b78: 0x000a, 0x1b79: 0x000a, 0x1b7a: 0x000a, 0x1b7b: 0x000a,\n\t0x1b7c: 0x000a, 0x1b7d: 0x000a, 0x1b7e: 0x000a, 0x1b7f: 0x000a,\n\t// Block 0x6e, offset 0x1b80\n\t0x1b80: 0x000a, 0x1b81: 0x000a, 0x1b82: 0x000a, 0x1b83: 0x000a, 0x1b84: 0x000a, 0x1b85: 0x000a,\n\t0x1b86: 0x000a, 0x1b87: 0x000a, 0x1b88: 0x000a, 0x1b89: 0x000a, 0x1b8a: 0x000a, 0x1b8b: 0x000a,\n\t0x1b8c: 0x000a, 0x1b8d: 0x000a, 0x1b8e: 0x000a, 0x1b8f: 0x000a, 0x1b90: 0x000a, 0x1b91: 0x000a,\n\t0x1b92: 0x000a, 0x1b93: 0x000a, 0x1b94: 0x000a, 0x1b95: 0x000a, 0x1b96: 0x000a, 0x1b97: 0x000a,\n\t0x1b98: 0x000a, 0x1b99: 0x000a, 0x1b9a: 0x000a, 0x1b9b: 0x000a, 0x1b9c: 0x000a, 0x1b9d: 0x000a,\n\t0x1b9e: 0x000a, 0x1b9f: 0x000a, 0x1ba0: 0x000a, 0x1ba1: 0x000a, 0x1ba2: 0x000a, 0x1ba3: 0x000a,\n\t0x1ba4: 0x000a, 0x1ba5: 0x000a, 0x1ba6: 0x000a, 0x1ba7: 0x000a, 0x1ba8: 0x000a, 0x1ba9: 0x000a,\n\t0x1baa: 0x000a, 0x1bab: 0x000a, 0x1bac: 0x000a, 0x1bad: 0x000a, 0x1bae: 0x000a, 0x1baf: 0x000a,\n\t0x1bb0: 0x000a, 0x1bb1: 0x000a, 0x1bb2: 0x000a, 0x1bb3: 0x000a,\n\t// Block 0x6f, offset 0x1bc0\n\t0x1bc0: 0x000a, 0x1bc1: 0x000a, 0x1bc2: 0x000a, 0x1bc3: 0x000a, 0x1bc4: 0x000a, 0x1bc5: 0x000a,\n\t0x1bc6: 0x000a, 0x1bc7: 0x000a, 0x1bc8: 0x000a, 0x1bc9: 0x000a, 0x1bca: 0x000a, 0x1bcb: 0x000a,\n\t0x1bcc: 0x000a, 0x1bcd: 0x000a, 0x1bce: 0x000a, 0x1bcf: 0x000a, 0x1bd0: 0x000a, 0x1bd1: 0x000a,\n\t0x1bd2: 0x000a, 0x1bd3: 0x000a, 0x1bd4: 0x000a, 0x1bd5: 0x000a,\n\t0x1bf0: 0x000a, 0x1bf1: 0x000a, 0x1bf2: 0x000a, 0x1bf3: 0x000a, 0x1bf4: 0x000a, 0x1bf5: 0x000a,\n\t0x1bf6: 0x000a, 0x1bf7: 0x000a, 0x1bf8: 0x000a, 0x1bf9: 0x000a, 0x1bfa: 0x000a, 0x1bfb: 0x000a,\n\t// Block 0x70, offset 0x1c00\n\t0x1c00: 0x0009, 0x1c01: 0x000a, 0x1c02: 0x000a, 0x1c03: 0x000a, 0x1c04: 0x000a,\n\t0x1c08: 0x003a, 0x1c09: 0x002a, 0x1c0a: 0x003a, 0x1c0b: 0x002a,\n\t0x1c0c: 0x003a, 0x1c0d: 0x002a, 0x1c0e: 0x003a, 0x1c0f: 0x002a, 0x1c10: 0x003a, 0x1c11: 0x002a,\n\t0x1c12: 0x000a, 0x1c13: 0x000a, 0x1c14: 0x003a, 0x1c15: 0x002a, 0x1c16: 0x003a, 0x1c17: 0x002a,\n\t0x1c18: 0x003a, 0x1c19: 0x002a, 0x1c1a: 0x003a, 0x1c1b: 0x002a, 0x1c1c: 0x000a, 0x1c1d: 0x000a,\n\t0x1c1e: 0x000a, 0x1c1f: 0x000a, 0x1c20: 0x000a,\n\t0x1c2a: 0x000c, 0x1c2b: 0x000c, 0x1c2c: 0x000c, 0x1c2d: 0x000c,\n\t0x1c30: 0x000a,\n\t0x1c36: 0x000a, 0x1c37: 0x000a,\n\t0x1c3d: 0x000a, 0x1c3e: 0x000a, 0x1c3f: 0x000a,\n\t// Block 0x71, offset 0x1c40\n\t0x1c59: 0x000c, 0x1c5a: 0x000c, 0x1c5b: 0x000a, 0x1c5c: 0x000a,\n\t0x1c60: 0x000a,\n\t// Block 0x72, offset 0x1c80\n\t0x1cbb: 0x000a,\n\t// Block 0x73, offset 0x1cc0\n\t0x1cc0: 0x000a, 0x1cc1: 0x000a, 0x1cc2: 0x000a, 0x1cc3: 0x000a, 0x1cc4: 0x000a, 0x1cc5: 0x000a,\n\t0x1cc6: 0x000a, 0x1cc7: 0x000a, 0x1cc8: 0x000a, 0x1cc9: 0x000a, 0x1cca: 0x000a, 0x1ccb: 0x000a,\n\t0x1ccc: 0x000a, 0x1ccd: 0x000a, 0x1cce: 0x000a, 0x1ccf: 0x000a, 0x1cd0: 0x000a, 0x1cd1: 0x000a,\n\t0x1cd2: 0x000a, 0x1cd3: 0x000a, 0x1cd4: 0x000a, 0x1cd5: 0x000a, 0x1cd6: 0x000a, 0x1cd7: 0x000a,\n\t0x1cd8: 0x000a, 0x1cd9: 0x000a, 0x1cda: 0x000a, 0x1cdb: 0x000a, 0x1cdc: 0x000a, 0x1cdd: 0x000a,\n\t0x1cde: 0x000a, 0x1cdf: 0x000a, 0x1ce0: 0x000a, 0x1ce1: 0x000a, 0x1ce2: 0x000a, 0x1ce3: 0x000a,\n\t// Block 0x74, offset 0x1d00\n\t0x1d1d: 0x000a,\n\t0x1d1e: 0x000a,\n\t// Block 0x75, offset 0x1d40\n\t0x1d50: 0x000a, 0x1d51: 0x000a,\n\t0x1d52: 0x000a, 0x1d53: 0x000a, 0x1d54: 0x000a, 0x1d55: 0x000a, 0x1d56: 0x000a, 0x1d57: 0x000a,\n\t0x1d58: 0x000a, 0x1d59: 0x000a, 0x1d5a: 0x000a, 0x1d5b: 0x000a, 0x1d5c: 0x000a, 0x1d5d: 0x000a,\n\t0x1d5e: 0x000a, 0x1d5f: 0x000a,\n\t0x1d7c: 0x000a, 0x1d7d: 0x000a, 0x1d7e: 0x000a,\n\t// Block 0x76, offset 0x1d80\n\t0x1db1: 0x000a, 0x1db2: 0x000a, 0x1db3: 0x000a, 0x1db4: 0x000a, 0x1db5: 0x000a,\n\t0x1db6: 0x000a, 0x1db7: 0x000a, 0x1db8: 0x000a, 0x1db9: 0x000a, 0x1dba: 0x000a, 0x1dbb: 0x000a,\n\t0x1dbc: 0x000a, 0x1dbd: 0x000a, 0x1dbe: 0x000a, 0x1dbf: 0x000a,\n\t// Block 0x77, offset 0x1dc0\n\t0x1dcc: 0x000a, 0x1dcd: 0x000a, 0x1dce: 0x000a, 0x1dcf: 0x000a,\n\t// Block 0x78, offset 0x1e00\n\t0x1e37: 0x000a, 0x1e38: 0x000a, 0x1e39: 0x000a, 0x1e3a: 0x000a,\n\t// Block 0x79, offset 0x1e40\n\t0x1e5e: 0x000a, 0x1e5f: 0x000a,\n\t0x1e7f: 0x000a,\n\t// Block 0x7a, offset 0x1e80\n\t0x1e90: 0x000a, 0x1e91: 0x000a,\n\t0x1e92: 0x000a, 0x1e93: 0x000a, 0x1e94: 0x000a, 0x1e95: 0x000a, 0x1e96: 0x000a, 0x1e97: 0x000a,\n\t0x1e98: 0x000a, 0x1e99: 0x000a, 0x1e9a: 0x000a, 0x1e9b: 0x000a, 0x1e9c: 0x000a, 0x1e9d: 0x000a,\n\t0x1e9e: 0x000a, 0x1e9f: 0x000a, 0x1ea0: 0x000a, 0x1ea1: 0x000a, 0x1ea2: 0x000a, 0x1ea3: 0x000a,\n\t0x1ea4: 0x000a, 0x1ea5: 0x000a, 0x1ea6: 0x000a, 0x1ea7: 0x000a, 0x1ea8: 0x000a, 0x1ea9: 0x000a,\n\t0x1eaa: 0x000a, 0x1eab: 0x000a, 0x1eac: 0x000a, 0x1ead: 0x000a, 0x1eae: 0x000a, 0x1eaf: 0x000a,\n\t0x1eb0: 0x000a, 0x1eb1: 0x000a, 0x1eb2: 0x000a, 0x1eb3: 0x000a, 0x1eb4: 0x000a, 0x1eb5: 0x000a,\n\t0x1eb6: 0x000a, 0x1eb7: 0x000a, 0x1eb8: 0x000a, 0x1eb9: 0x000a, 0x1eba: 0x000a, 0x1ebb: 0x000a,\n\t0x1ebc: 0x000a, 0x1ebd: 0x000a, 0x1ebe: 0x000a, 0x1ebf: 0x000a,\n\t// Block 0x7b, offset 0x1ec0\n\t0x1ec0: 0x000a, 0x1ec1: 0x000a, 0x1ec2: 0x000a, 0x1ec3: 0x000a, 0x1ec4: 0x000a, 0x1ec5: 0x000a,\n\t0x1ec6: 0x000a,\n\t// Block 0x7c, offset 0x1f00\n\t0x1f0d: 0x000a, 0x1f0e: 0x000a, 0x1f0f: 0x000a,\n\t// Block 0x7d, offset 0x1f40\n\t0x1f6f: 0x000c,\n\t0x1f70: 0x000c, 0x1f71: 0x000c, 0x1f72: 0x000c, 0x1f73: 0x000a, 0x1f74: 0x000c, 0x1f75: 0x000c,\n\t0x1f76: 0x000c, 0x1f77: 0x000c, 0x1f78: 0x000c, 0x1f79: 0x000c, 0x1f7a: 0x000c, 0x1f7b: 0x000c,\n\t0x1f7c: 0x000c, 0x1f7d: 0x000c, 0x1f7e: 0x000a, 0x1f7f: 0x000a,\n\t// Block 0x7e, offset 0x1f80\n\t0x1f9e: 0x000c, 0x1f9f: 0x000c,\n\t// Block 0x7f, offset 0x1fc0\n\t0x1ff0: 0x000c, 0x1ff1: 0x000c,\n\t// Block 0x80, offset 0x2000\n\t0x2000: 0x000a, 0x2001: 0x000a, 0x2002: 0x000a, 0x2003: 0x000a, 0x2004: 0x000a, 0x2005: 0x000a,\n\t0x2006: 0x000a, 0x2007: 0x000a, 0x2008: 0x000a, 0x2009: 0x000a, 0x200a: 0x000a, 0x200b: 0x000a,\n\t0x200c: 0x000a, 0x200d: 0x000a, 0x200e: 0x000a, 0x200f: 0x000a, 0x2010: 0x000a, 0x2011: 0x000a,\n\t0x2012: 0x000a, 0x2013: 0x000a, 0x2014: 0x000a, 0x2015: 0x000a, 0x2016: 0x000a, 0x2017: 0x000a,\n\t0x2018: 0x000a, 0x2019: 0x000a, 0x201a: 0x000a, 0x201b: 0x000a, 0x201c: 0x000a, 0x201d: 0x000a,\n\t0x201e: 0x000a, 0x201f: 0x000a, 0x2020: 0x000a, 0x2021: 0x000a,\n\t// Block 0x81, offset 0x2040\n\t0x2048: 0x000a,\n\t// Block 0x82, offset 0x2080\n\t0x2082: 0x000c,\n\t0x2086: 0x000c, 0x208b: 0x000c,\n\t0x20a5: 0x000c, 0x20a6: 0x000c, 0x20a8: 0x000a, 0x20a9: 0x000a,\n\t0x20aa: 0x000a, 0x20ab: 0x000a,\n\t0x20b8: 0x0004, 0x20b9: 0x0004,\n\t// Block 0x83, offset 0x20c0\n\t0x20f4: 0x000a, 0x20f5: 0x000a,\n\t0x20f6: 0x000a, 0x20f7: 0x000a,\n\t// Block 0x84, offset 0x2100\n\t0x2104: 0x000c, 0x2105: 0x000c,\n\t0x2120: 0x000c, 0x2121: 0x000c, 0x2122: 0x000c, 0x2123: 0x000c,\n\t0x2124: 0x000c, 0x2125: 0x000c, 0x2126: 0x000c, 0x2127: 0x000c, 0x2128: 0x000c, 0x2129: 0x000c,\n\t0x212a: 0x000c, 0x212b: 0x000c, 0x212c: 0x000c, 0x212d: 0x000c, 0x212e: 0x000c, 0x212f: 0x000c,\n\t0x2130: 0x000c, 0x2131: 0x000c,\n\t// Block 0x85, offset 0x2140\n\t0x2166: 0x000c, 0x2167: 0x000c, 0x2168: 0x000c, 0x2169: 0x000c,\n\t0x216a: 0x000c, 0x216b: 0x000c, 0x216c: 0x000c, 0x216d: 0x000c,\n\t// Block 0x86, offset 0x2180\n\t0x2187: 0x000c, 0x2188: 0x000c, 0x2189: 0x000c, 0x218a: 0x000c, 0x218b: 0x000c,\n\t0x218c: 0x000c, 0x218d: 0x000c, 0x218e: 0x000c, 0x218f: 0x000c, 0x2190: 0x000c, 0x2191: 0x000c,\n\t// Block 0x87, offset 0x21c0\n\t0x21c0: 0x000c, 0x21c1: 0x000c, 0x21c2: 0x000c,\n\t0x21f3: 0x000c,\n\t0x21f6: 0x000c, 0x21f7: 0x000c, 0x21f8: 0x000c, 0x21f9: 0x000c,\n\t0x21fc: 0x000c,\n\t// Block 0x88, offset 0x2200\n\t0x2225: 0x000c,\n\t// Block 0x89, offset 0x2240\n\t0x2269: 0x000c,\n\t0x226a: 0x000c, 0x226b: 0x000c, 0x226c: 0x000c, 0x226d: 0x000c, 0x226e: 0x000c,\n\t0x2271: 0x000c, 0x2272: 0x000c, 0x2275: 0x000c,\n\t0x2276: 0x000c,\n\t// Block 0x8a, offset 0x2280\n\t0x2283: 0x000c,\n\t0x228c: 0x000c,\n\t0x22bc: 0x000c,\n\t// Block 0x8b, offset 0x22c0\n\t0x22f0: 0x000c, 0x22f2: 0x000c, 0x22f3: 0x000c, 0x22f4: 0x000c,\n\t0x22f7: 0x000c, 0x22f8: 0x000c,\n\t0x22fe: 0x000c, 0x22ff: 0x000c,\n\t// Block 0x8c, offset 0x2300\n\t0x2301: 0x000c,\n\t0x232c: 0x000c, 0x232d: 0x000c,\n\t0x2336: 0x000c,\n\t// Block 0x8d, offset 0x2340\n\t0x2365: 0x000c, 0x2368: 0x000c,\n\t0x236d: 0x000c,\n\t// Block 0x8e, offset 0x2380\n\t0x239d: 0x0001,\n\t0x239e: 0x000c, 0x239f: 0x0001, 0x23a0: 0x0001, 0x23a1: 0x0001, 0x23a2: 0x0001, 0x23a3: 0x0001,\n\t0x23a4: 0x0001, 0x23a5: 0x0001, 0x23a6: 0x0001, 0x23a7: 0x0001, 0x23a8: 0x0001, 0x23a9: 0x0003,\n\t0x23aa: 0x0001, 0x23ab: 0x0001, 0x23ac: 0x0001, 0x23ad: 0x0001, 0x23ae: 0x0001, 0x23af: 0x0001,\n\t0x23b0: 0x0001, 0x23b1: 0x0001, 0x23b2: 0x0001, 0x23b3: 0x0001, 0x23b4: 0x0001, 0x23b5: 0x0001,\n\t0x23b6: 0x0001, 0x23b7: 0x0001, 0x23b8: 0x0001, 0x23b9: 0x0001, 0x23ba: 0x0001, 0x23bb: 0x0001,\n\t0x23bc: 0x0001, 0x23bd: 0x0001, 0x23be: 0x0001, 0x23bf: 0x0001,\n\t// Block 0x8f, offset 0x23c0\n\t0x23c0: 0x0001, 0x23c1: 0x0001, 0x23c2: 0x0001, 0x23c3: 0x0001, 0x23c4: 0x0001, 0x23c5: 0x0001,\n\t0x23c6: 0x0001, 0x23c7: 0x0001, 0x23c8: 0x0001, 0x23c9: 0x0001, 0x23ca: 0x0001, 0x23cb: 0x0001,\n\t0x23cc: 0x0001, 0x23cd: 0x0001, 0x23ce: 0x0001, 0x23cf: 0x0001, 0x23d0: 0x000d, 0x23d1: 0x000d,\n\t0x23d2: 0x000d, 0x23d3: 0x000d, 0x23d4: 0x000d, 0x23d5: 0x000d, 0x23d6: 0x000d, 0x23d7: 0x000d,\n\t0x23d8: 0x000d, 0x23d9: 0x000d, 0x23da: 0x000d, 0x23db: 0x000d, 0x23dc: 0x000d, 0x23dd: 0x000d,\n\t0x23de: 0x000d, 0x23df: 0x000d, 0x23e0: 0x000d, 0x23e1: 0x000d, 0x23e2: 0x000d, 0x23e3: 0x000d,\n\t0x23e4: 0x000d, 0x23e5: 0x000d, 0x23e6: 0x000d, 0x23e7: 0x000d, 0x23e8: 0x000d, 0x23e9: 0x000d,\n\t0x23ea: 0x000d, 0x23eb: 0x000d, 0x23ec: 0x000d, 0x23ed: 0x000d, 0x23ee: 0x000d, 0x23ef: 0x000d,\n\t0x23f0: 0x000d, 0x23f1: 0x000d, 0x23f2: 0x000d, 0x23f3: 0x000d, 0x23f4: 0x000d, 0x23f5: 0x000d,\n\t0x23f6: 0x000d, 0x23f7: 0x000d, 0x23f8: 0x000d, 0x23f9: 0x000d, 0x23fa: 0x000d, 0x23fb: 0x000d,\n\t0x23fc: 0x000d, 0x23fd: 0x000d, 0x23fe: 0x000d, 0x23ff: 0x000d,\n\t// Block 0x90, offset 0x2400\n\t0x2400: 0x000d, 0x2401: 0x000d, 0x2402: 0x000d, 0x2403: 0x000d, 0x2404: 0x000d, 0x2405: 0x000d,\n\t0x2406: 0x000d, 0x2407: 0x000d, 0x2408: 0x000d, 0x2409: 0x000d, 0x240a: 0x000d, 0x240b: 0x000d,\n\t0x240c: 0x000d, 0x240d: 0x000d, 0x240e: 0x000d, 0x240f: 0x000d, 0x2410: 0x000d, 0x2411: 0x000d,\n\t0x2412: 0x000d, 0x2413: 0x000d, 0x2414: 0x000d, 0x2415: 0x000d, 0x2416: 0x000d, 0x2417: 0x000d,\n\t0x2418: 0x000d, 0x2419: 0x000d, 0x241a: 0x000d, 0x241b: 0x000d, 0x241c: 0x000d, 0x241d: 0x000d,\n\t0x241e: 0x000d, 0x241f: 0x000d, 0x2420: 0x000d, 0x2421: 0x000d, 0x2422: 0x000d, 0x2423: 0x000d,\n\t0x2424: 0x000d, 0x2425: 0x000d, 0x2426: 0x000d, 0x2427: 0x000d, 0x2428: 0x000d, 0x2429: 0x000d,\n\t0x242a: 0x000d, 0x242b: 0x000d, 0x242c: 0x000d, 0x242d: 0x000d, 0x242e: 0x000d, 0x242f: 0x000d,\n\t0x2430: 0x000d, 0x2431: 0x000d, 0x2432: 0x000d, 0x2433: 0x000d, 0x2434: 0x000d, 0x2435: 0x000d,\n\t0x2436: 0x000d, 0x2437: 0x000d, 0x2438: 0x000d, 0x2439: 0x000d, 0x243a: 0x000d, 0x243b: 0x000d,\n\t0x243c: 0x000d, 0x243d: 0x000d, 0x243e: 0x000a, 0x243f: 0x000a,\n\t// Block 0x91, offset 0x2440\n\t0x2440: 0x000d, 0x2441: 0x000d, 0x2442: 0x000d, 0x2443: 0x000d, 0x2444: 0x000d, 0x2445: 0x000d,\n\t0x2446: 0x000d, 0x2447: 0x000d, 0x2448: 0x000d, 0x2449: 0x000d, 0x244a: 0x000d, 0x244b: 0x000d,\n\t0x244c: 0x000d, 0x244d: 0x000d, 0x244e: 0x000d, 0x244f: 0x000d, 0x2450: 0x000b, 0x2451: 0x000b,\n\t0x2452: 0x000b, 0x2453: 0x000b, 0x2454: 0x000b, 0x2455: 0x000b, 0x2456: 0x000b, 0x2457: 0x000b,\n\t0x2458: 0x000b, 0x2459: 0x000b, 0x245a: 0x000b, 0x245b: 0x000b, 0x245c: 0x000b, 0x245d: 0x000b,\n\t0x245e: 0x000b, 0x245f: 0x000b, 0x2460: 0x000b, 0x2461: 0x000b, 0x2462: 0x000b, 0x2463: 0x000b,\n\t0x2464: 0x000b, 0x2465: 0x000b, 0x2466: 0x000b, 0x2467: 0x000b, 0x2468: 0x000b, 0x2469: 0x000b,\n\t0x246a: 0x000b, 0x246b: 0x000b, 0x246c: 0x000b, 0x246d: 0x000b, 0x246e: 0x000b, 0x246f: 0x000b,\n\t0x2470: 0x000d, 0x2471: 0x000d, 0x2472: 0x000d, 0x2473: 0x000d, 0x2474: 0x000d, 0x2475: 0x000d,\n\t0x2476: 0x000d, 0x2477: 0x000d, 0x2478: 0x000d, 0x2479: 0x000d, 0x247a: 0x000d, 0x247b: 0x000d,\n\t0x247c: 0x000d, 0x247d: 0x000a, 0x247e: 0x000d, 0x247f: 0x000d,\n\t// Block 0x92, offset 0x2480\n\t0x2480: 0x000c, 0x2481: 0x000c, 0x2482: 0x000c, 0x2483: 0x000c, 0x2484: 0x000c, 0x2485: 0x000c,\n\t0x2486: 0x000c, 0x2487: 0x000c, 0x2488: 0x000c, 0x2489: 0x000c, 0x248a: 0x000c, 0x248b: 0x000c,\n\t0x248c: 0x000c, 0x248d: 0x000c, 0x248e: 0x000c, 0x248f: 0x000c, 0x2490: 0x000a, 0x2491: 0x000a,\n\t0x2492: 0x000a, 0x2493: 0x000a, 0x2494: 0x000a, 0x2495: 0x000a, 0x2496: 0x000a, 0x2497: 0x000a,\n\t0x2498: 0x000a, 0x2499: 0x000a,\n\t0x24a0: 0x000c, 0x24a1: 0x000c, 0x24a2: 0x000c, 0x24a3: 0x000c,\n\t0x24a4: 0x000c, 0x24a5: 0x000c, 0x24a6: 0x000c, 0x24a7: 0x000c, 0x24a8: 0x000c, 0x24a9: 0x000c,\n\t0x24aa: 0x000c, 0x24ab: 0x000c, 0x24ac: 0x000c, 0x24ad: 0x000c, 0x24ae: 0x000c, 0x24af: 0x000c,\n\t0x24b0: 0x000a, 0x24b1: 0x000a, 0x24b2: 0x000a, 0x24b3: 0x000a, 0x24b4: 0x000a, 0x24b5: 0x000a,\n\t0x24b6: 0x000a, 0x24b7: 0x000a, 0x24b8: 0x000a, 0x24b9: 0x000a, 0x24ba: 0x000a, 0x24bb: 0x000a,\n\t0x24bc: 0x000a, 0x24bd: 0x000a, 0x24be: 0x000a, 0x24bf: 0x000a,\n\t// Block 0x93, offset 0x24c0\n\t0x24c0: 0x000a, 0x24c1: 0x000a, 0x24c2: 0x000a, 0x24c3: 0x000a, 0x24c4: 0x000a, 0x24c5: 0x000a,\n\t0x24c6: 0x000a, 0x24c7: 0x000a, 0x24c8: 0x000a, 0x24c9: 0x000a, 0x24ca: 0x000a, 0x24cb: 0x000a,\n\t0x24cc: 0x000a, 0x24cd: 0x000a, 0x24ce: 0x000a, 0x24cf: 0x000a, 0x24d0: 0x0006, 0x24d1: 0x000a,\n\t0x24d2: 0x0006, 0x24d4: 0x000a, 0x24d5: 0x0006, 0x24d6: 0x000a, 0x24d7: 0x000a,\n\t0x24d8: 0x000a, 0x24d9: 0x009a, 0x24da: 0x008a, 0x24db: 0x007a, 0x24dc: 0x006a, 0x24dd: 0x009a,\n\t0x24de: 0x008a, 0x24df: 0x0004, 0x24e0: 0x000a, 0x24e1: 0x000a, 0x24e2: 0x0003, 0x24e3: 0x0003,\n\t0x24e4: 0x000a, 0x24e5: 0x000a, 0x24e6: 0x000a, 0x24e8: 0x000a, 0x24e9: 0x0004,\n\t0x24ea: 0x0004, 0x24eb: 0x000a,\n\t0x24f0: 0x000d, 0x24f1: 0x000d, 0x24f2: 0x000d, 0x24f3: 0x000d, 0x24f4: 0x000d, 0x24f5: 0x000d,\n\t0x24f6: 0x000d, 0x24f7: 0x000d, 0x24f8: 0x000d, 0x24f9: 0x000d, 0x24fa: 0x000d, 0x24fb: 0x000d,\n\t0x24fc: 0x000d, 0x24fd: 0x000d, 0x24fe: 0x000d, 0x24ff: 0x000d,\n\t// Block 0x94, offset 0x2500\n\t0x2500: 0x000d, 0x2501: 0x000d, 0x2502: 0x000d, 0x2503: 0x000d, 0x2504: 0x000d, 0x2505: 0x000d,\n\t0x2506: 0x000d, 0x2507: 0x000d, 0x2508: 0x000d, 0x2509: 0x000d, 0x250a: 0x000d, 0x250b: 0x000d,\n\t0x250c: 0x000d, 0x250d: 0x000d, 0x250e: 0x000d, 0x250f: 0x000d, 0x2510: 0x000d, 0x2511: 0x000d,\n\t0x2512: 0x000d, 0x2513: 0x000d, 0x2514: 0x000d, 0x2515: 0x000d, 0x2516: 0x000d, 0x2517: 0x000d,\n\t0x2518: 0x000d, 0x2519: 0x000d, 0x251a: 0x000d, 0x251b: 0x000d, 0x251c: 0x000d, 0x251d: 0x000d,\n\t0x251e: 0x000d, 0x251f: 0x000d, 0x2520: 0x000d, 0x2521: 0x000d, 0x2522: 0x000d, 0x2523: 0x000d,\n\t0x2524: 0x000d, 0x2525: 0x000d, 0x2526: 0x000d, 0x2527: 0x000d, 0x2528: 0x000d, 0x2529: 0x000d,\n\t0x252a: 0x000d, 0x252b: 0x000d, 0x252c: 0x000d, 0x252d: 0x000d, 0x252e: 0x000d, 0x252f: 0x000d,\n\t0x2530: 0x000d, 0x2531: 0x000d, 0x2532: 0x000d, 0x2533: 0x000d, 0x2534: 0x000d, 0x2535: 0x000d,\n\t0x2536: 0x000d, 0x2537: 0x000d, 0x2538: 0x000d, 0x2539: 0x000d, 0x253a: 0x000d, 0x253b: 0x000d,\n\t0x253c: 0x000d, 0x253d: 0x000d, 0x253e: 0x000d, 0x253f: 0x000b,\n\t// Block 0x95, offset 0x2540\n\t0x2541: 0x000a, 0x2542: 0x000a, 0x2543: 0x0004, 0x2544: 0x0004, 0x2545: 0x0004,\n\t0x2546: 0x000a, 0x2547: 0x000a, 0x2548: 0x003a, 0x2549: 0x002a, 0x254a: 0x000a, 0x254b: 0x0003,\n\t0x254c: 0x0006, 0x254d: 0x0003, 0x254e: 0x0006, 0x254f: 0x0006, 0x2550: 0x0002, 0x2551: 0x0002,\n\t0x2552: 0x0002, 0x2553: 0x0002, 0x2554: 0x0002, 0x2555: 0x0002, 0x2556: 0x0002, 0x2557: 0x0002,\n\t0x2558: 0x0002, 0x2559: 0x0002, 0x255a: 0x0006, 0x255b: 0x000a, 0x255c: 0x000a, 0x255d: 0x000a,\n\t0x255e: 0x000a, 0x255f: 0x000a, 0x2560: 0x000a,\n\t0x257b: 0x005a,\n\t0x257c: 0x000a, 0x257d: 0x004a, 0x257e: 0x000a, 0x257f: 0x000a,\n\t// Block 0x96, offset 0x2580\n\t0x2580: 0x000a,\n\t0x259b: 0x005a, 0x259c: 0x000a, 0x259d: 0x004a,\n\t0x259e: 0x000a, 0x259f: 0x00fa, 0x25a0: 0x00ea, 0x25a1: 0x000a, 0x25a2: 0x003a, 0x25a3: 0x002a,\n\t0x25a4: 0x000a, 0x25a5: 0x000a,\n\t// Block 0x97, offset 0x25c0\n\t0x25e0: 0x0004, 0x25e1: 0x0004, 0x25e2: 0x000a, 0x25e3: 0x000a,\n\t0x25e4: 0x000a, 0x25e5: 0x0004, 0x25e6: 0x0004, 0x25e8: 0x000a, 0x25e9: 0x000a,\n\t0x25ea: 0x000a, 0x25eb: 0x000a, 0x25ec: 0x000a, 0x25ed: 0x000a, 0x25ee: 0x000a,\n\t0x25f0: 0x000b, 0x25f1: 0x000b, 0x25f2: 0x000b, 0x25f3: 0x000b, 0x25f4: 0x000b, 0x25f5: 0x000b,\n\t0x25f6: 0x000b, 0x25f7: 0x000b, 0x25f8: 0x000b, 0x25f9: 0x000a, 0x25fa: 0x000a, 0x25fb: 0x000a,\n\t0x25fc: 0x000a, 0x25fd: 0x000a, 0x25fe: 0x000b, 0x25ff: 0x000b,\n\t// Block 0x98, offset 0x2600\n\t0x2601: 0x000a,\n\t// Block 0x99, offset 0x2640\n\t0x2640: 0x000a, 0x2641: 0x000a, 0x2642: 0x000a, 0x2643: 0x000a, 0x2644: 0x000a, 0x2645: 0x000a,\n\t0x2646: 0x000a, 0x2647: 0x000a, 0x2648: 0x000a, 0x2649: 0x000a, 0x264a: 0x000a, 0x264b: 0x000a,\n\t0x264c: 0x000a, 0x2650: 0x000a, 0x2651: 0x000a,\n\t0x2652: 0x000a, 0x2653: 0x000a, 0x2654: 0x000a, 0x2655: 0x000a, 0x2656: 0x000a, 0x2657: 0x000a,\n\t0x2658: 0x000a, 0x2659: 0x000a, 0x265a: 0x000a, 0x265b: 0x000a,\n\t0x2660: 0x000a,\n\t// Block 0x9a, offset 0x2680\n\t0x26bd: 0x000c,\n\t// Block 0x9b, offset 0x26c0\n\t0x26e0: 0x000c, 0x26e1: 0x0002, 0x26e2: 0x0002, 0x26e3: 0x0002,\n\t0x26e4: 0x0002, 0x26e5: 0x0002, 0x26e6: 0x0002, 0x26e7: 0x0002, 0x26e8: 0x0002, 0x26e9: 0x0002,\n\t0x26ea: 0x0002, 0x26eb: 0x0002, 0x26ec: 0x0002, 0x26ed: 0x0002, 0x26ee: 0x0002, 0x26ef: 0x0002,\n\t0x26f0: 0x0002, 0x26f1: 0x0002, 0x26f2: 0x0002, 0x26f3: 0x0002, 0x26f4: 0x0002, 0x26f5: 0x0002,\n\t0x26f6: 0x0002, 0x26f7: 0x0002, 0x26f8: 0x0002, 0x26f9: 0x0002, 0x26fa: 0x0002, 0x26fb: 0x0002,\n\t// Block 0x9c, offset 0x2700\n\t0x2736: 0x000c, 0x2737: 0x000c, 0x2738: 0x000c, 0x2739: 0x000c, 0x273a: 0x000c,\n\t// Block 0x9d, offset 0x2740\n\t0x2740: 0x0001, 0x2741: 0x0001, 0x2742: 0x0001, 0x2743: 0x0001, 0x2744: 0x0001, 0x2745: 0x0001,\n\t0x2746: 0x0001, 0x2747: 0x0001, 0x2748: 0x0001, 0x2749: 0x0001, 0x274a: 0x0001, 0x274b: 0x0001,\n\t0x274c: 0x0001, 0x274d: 0x0001, 0x274e: 0x0001, 0x274f: 0x0001, 0x2750: 0x0001, 0x2751: 0x0001,\n\t0x2752: 0x0001, 0x2753: 0x0001, 0x2754: 0x0001, 0x2755: 0x0001, 0x2756: 0x0001, 0x2757: 0x0001,\n\t0x2758: 0x0001, 0x2759: 0x0001, 0x275a: 0x0001, 0x275b: 0x0001, 0x275c: 0x0001, 0x275d: 0x0001,\n\t0x275e: 0x0001, 0x275f: 0x0001, 0x2760: 0x0001, 0x2761: 0x0001, 0x2762: 0x0001, 0x2763: 0x0001,\n\t0x2764: 0x0001, 0x2765: 0x0001, 0x2766: 0x0001, 0x2767: 0x0001, 0x2768: 0x0001, 0x2769: 0x0001,\n\t0x276a: 0x0001, 0x276b: 0x0001, 0x276c: 0x0001, 0x276d: 0x0001, 0x276e: 0x0001, 0x276f: 0x0001,\n\t0x2770: 0x0001, 0x2771: 0x0001, 0x2772: 0x0001, 0x2773: 0x0001, 0x2774: 0x0001, 0x2775: 0x0001,\n\t0x2776: 0x0001, 0x2777: 0x0001, 0x2778: 0x0001, 0x2779: 0x0001, 0x277a: 0x0001, 0x277b: 0x0001,\n\t0x277c: 0x0001, 0x277d: 0x0001, 0x277e: 0x0001, 0x277f: 0x0001,\n\t// Block 0x9e, offset 0x2780\n\t0x2780: 0x0001, 0x2781: 0x0001, 0x2782: 0x0001, 0x2783: 0x0001, 0x2784: 0x0001, 0x2785: 0x0001,\n\t0x2786: 0x0001, 0x2787: 0x0001, 0x2788: 0x0001, 0x2789: 0x0001, 0x278a: 0x0001, 0x278b: 0x0001,\n\t0x278c: 0x0001, 0x278d: 0x0001, 0x278e: 0x0001, 0x278f: 0x0001, 0x2790: 0x0001, 0x2791: 0x0001,\n\t0x2792: 0x0001, 0x2793: 0x0001, 0x2794: 0x0001, 0x2795: 0x0001, 0x2796: 0x0001, 0x2797: 0x0001,\n\t0x2798: 0x0001, 0x2799: 0x0001, 0x279a: 0x0001, 0x279b: 0x0001, 0x279c: 0x0001, 0x279d: 0x0001,\n\t0x279e: 0x0001, 0x279f: 0x000a, 0x27a0: 0x0001, 0x27a1: 0x0001, 0x27a2: 0x0001, 0x27a3: 0x0001,\n\t0x27a4: 0x0001, 0x27a5: 0x0001, 0x27a6: 0x0001, 0x27a7: 0x0001, 0x27a8: 0x0001, 0x27a9: 0x0001,\n\t0x27aa: 0x0001, 0x27ab: 0x0001, 0x27ac: 0x0001, 0x27ad: 0x0001, 0x27ae: 0x0001, 0x27af: 0x0001,\n\t0x27b0: 0x0001, 0x27b1: 0x0001, 0x27b2: 0x0001, 0x27b3: 0x0001, 0x27b4: 0x0001, 0x27b5: 0x0001,\n\t0x27b6: 0x0001, 0x27b7: 0x0001, 0x27b8: 0x0001, 0x27b9: 0x0001, 0x27ba: 0x0001, 0x27bb: 0x0001,\n\t0x27bc: 0x0001, 0x27bd: 0x0001, 0x27be: 0x0001, 0x27bf: 0x0001,\n\t// Block 0x9f, offset 0x27c0\n\t0x27c0: 0x0001, 0x27c1: 0x000c, 0x27c2: 0x000c, 0x27c3: 0x000c, 0x27c4: 0x0001, 0x27c5: 0x000c,\n\t0x27c6: 0x000c, 0x27c7: 0x0001, 0x27c8: 0x0001, 0x27c9: 0x0001, 0x27ca: 0x0001, 0x27cb: 0x0001,\n\t0x27cc: 0x000c, 0x27cd: 0x000c, 0x27ce: 0x000c, 0x27cf: 0x000c, 0x27d0: 0x0001, 0x27d1: 0x0001,\n\t0x27d2: 0x0001, 0x27d3: 0x0001, 0x27d4: 0x0001, 0x27d5: 0x0001, 0x27d6: 0x0001, 0x27d7: 0x0001,\n\t0x27d8: 0x0001, 0x27d9: 0x0001, 0x27da: 0x0001, 0x27db: 0x0001, 0x27dc: 0x0001, 0x27dd: 0x0001,\n\t0x27de: 0x0001, 0x27df: 0x0001, 0x27e0: 0x0001, 0x27e1: 0x0001, 0x27e2: 0x0001, 0x27e3: 0x0001,\n\t0x27e4: 0x0001, 0x27e5: 0x0001, 0x27e6: 0x0001, 0x27e7: 0x0001, 0x27e8: 0x0001, 0x27e9: 0x0001,\n\t0x27ea: 0x0001, 0x27eb: 0x0001, 0x27ec: 0x0001, 0x27ed: 0x0001, 0x27ee: 0x0001, 0x27ef: 0x0001,\n\t0x27f0: 0x0001, 0x27f1: 0x0001, 0x27f2: 0x0001, 0x27f3: 0x0001, 0x27f4: 0x0001, 0x27f5: 0x0001,\n\t0x27f6: 0x0001, 0x27f7: 0x0001, 0x27f8: 0x000c, 0x27f9: 0x000c, 0x27fa: 0x000c, 0x27fb: 0x0001,\n\t0x27fc: 0x0001, 0x27fd: 0x0001, 0x27fe: 0x0001, 0x27ff: 0x000c,\n\t// Block 0xa0, offset 0x2800\n\t0x2800: 0x0001, 0x2801: 0x0001, 0x2802: 0x0001, 0x2803: 0x0001, 0x2804: 0x0001, 0x2805: 0x0001,\n\t0x2806: 0x0001, 0x2807: 0x0001, 0x2808: 0x0001, 0x2809: 0x0001, 0x280a: 0x0001, 0x280b: 0x0001,\n\t0x280c: 0x0001, 0x280d: 0x0001, 0x280e: 0x0001, 0x280f: 0x0001, 0x2810: 0x0001, 0x2811: 0x0001,\n\t0x2812: 0x0001, 0x2813: 0x0001, 0x2814: 0x0001, 0x2815: 0x0001, 0x2816: 0x0001, 0x2817: 0x0001,\n\t0x2818: 0x0001, 0x2819: 0x0001, 0x281a: 0x0001, 0x281b: 0x0001, 0x281c: 0x0001, 0x281d: 0x0001,\n\t0x281e: 0x0001, 0x281f: 0x0001, 0x2820: 0x0001, 0x2821: 0x0001, 0x2822: 0x0001, 0x2823: 0x0001,\n\t0x2824: 0x0001, 0x2825: 0x000c, 0x2826: 0x000c, 0x2827: 0x0001, 0x2828: 0x0001, 0x2829: 0x0001,\n\t0x282a: 0x0001, 0x282b: 0x0001, 0x282c: 0x0001, 0x282d: 0x0001, 0x282e: 0x0001, 0x282f: 0x0001,\n\t0x2830: 0x0001, 0x2831: 0x0001, 0x2832: 0x0001, 0x2833: 0x0001, 0x2834: 0x0001, 0x2835: 0x0001,\n\t0x2836: 0x0001, 0x2837: 0x0001, 0x2838: 0x0001, 0x2839: 0x0001, 0x283a: 0x0001, 0x283b: 0x0001,\n\t0x283c: 0x0001, 0x283d: 0x0001, 0x283e: 0x0001, 0x283f: 0x0001,\n\t// Block 0xa1, offset 0x2840\n\t0x2840: 0x0001, 0x2841: 0x0001, 0x2842: 0x0001, 0x2843: 0x0001, 0x2844: 0x0001, 0x2845: 0x0001,\n\t0x2846: 0x0001, 0x2847: 0x0001, 0x2848: 0x0001, 0x2849: 0x0001, 0x284a: 0x0001, 0x284b: 0x0001,\n\t0x284c: 0x0001, 0x284d: 0x0001, 0x284e: 0x0001, 0x284f: 0x0001, 0x2850: 0x0001, 0x2851: 0x0001,\n\t0x2852: 0x0001, 0x2853: 0x0001, 0x2854: 0x0001, 0x2855: 0x0001, 0x2856: 0x0001, 0x2857: 0x0001,\n\t0x2858: 0x0001, 0x2859: 0x0001, 0x285a: 0x0001, 0x285b: 0x0001, 0x285c: 0x0001, 0x285d: 0x0001,\n\t0x285e: 0x0001, 0x285f: 0x0001, 0x2860: 0x0001, 0x2861: 0x0001, 0x2862: 0x0001, 0x2863: 0x0001,\n\t0x2864: 0x0001, 0x2865: 0x0001, 0x2866: 0x0001, 0x2867: 0x0001, 0x2868: 0x0001, 0x2869: 0x0001,\n\t0x286a: 0x0001, 0x286b: 0x0001, 0x286c: 0x0001, 0x286d: 0x0001, 0x286e: 0x0001, 0x286f: 0x0001,\n\t0x2870: 0x0001, 0x2871: 0x0001, 0x2872: 0x0001, 0x2873: 0x0001, 0x2874: 0x0001, 0x2875: 0x0001,\n\t0x2876: 0x0001, 0x2877: 0x0001, 0x2878: 0x0001, 0x2879: 0x000a, 0x287a: 0x000a, 0x287b: 0x000a,\n\t0x287c: 0x000a, 0x287d: 0x000a, 0x287e: 0x000a, 0x287f: 0x000a,\n\t// Block 0xa2, offset 0x2880\n\t0x2880: 0x0001, 0x2881: 0x0001, 0x2882: 0x0001, 0x2883: 0x0001, 0x2884: 0x0001, 0x2885: 0x0001,\n\t0x2886: 0x0001, 0x2887: 0x0001, 0x2888: 0x0001, 0x2889: 0x0001, 0x288a: 0x0001, 0x288b: 0x0001,\n\t0x288c: 0x0001, 0x288d: 0x0001, 0x288e: 0x0001, 0x288f: 0x0001, 0x2890: 0x0001, 0x2891: 0x0001,\n\t0x2892: 0x0001, 0x2893: 0x0001, 0x2894: 0x0001, 0x2895: 0x0001, 0x2896: 0x0001, 0x2897: 0x0001,\n\t0x2898: 0x0001, 0x2899: 0x0001, 0x289a: 0x0001, 0x289b: 0x0001, 0x289c: 0x0001, 0x289d: 0x0001,\n\t0x289e: 0x0001, 0x289f: 0x0001, 0x28a0: 0x0005, 0x28a1: 0x0005, 0x28a2: 0x0005, 0x28a3: 0x0005,\n\t0x28a4: 0x0005, 0x28a5: 0x0005, 0x28a6: 0x0005, 0x28a7: 0x0005, 0x28a8: 0x0005, 0x28a9: 0x0005,\n\t0x28aa: 0x0005, 0x28ab: 0x0005, 0x28ac: 0x0005, 0x28ad: 0x0005, 0x28ae: 0x0005, 0x28af: 0x0005,\n\t0x28b0: 0x0005, 0x28b1: 0x0005, 0x28b2: 0x0005, 0x28b3: 0x0005, 0x28b4: 0x0005, 0x28b5: 0x0005,\n\t0x28b6: 0x0005, 0x28b7: 0x0005, 0x28b8: 0x0005, 0x28b9: 0x0005, 0x28ba: 0x0005, 0x28bb: 0x0005,\n\t0x28bc: 0x0005, 0x28bd: 0x0005, 0x28be: 0x0005, 0x28bf: 0x0001,\n\t// Block 0xa3, offset 0x28c0\n\t0x28c1: 0x000c,\n\t0x28f8: 0x000c, 0x28f9: 0x000c, 0x28fa: 0x000c, 0x28fb: 0x000c,\n\t0x28fc: 0x000c, 0x28fd: 0x000c, 0x28fe: 0x000c, 0x28ff: 0x000c,\n\t// Block 0xa4, offset 0x2900\n\t0x2900: 0x000c, 0x2901: 0x000c, 0x2902: 0x000c, 0x2903: 0x000c, 0x2904: 0x000c, 0x2905: 0x000c,\n\t0x2906: 0x000c,\n\t0x2912: 0x000a, 0x2913: 0x000a, 0x2914: 0x000a, 0x2915: 0x000a, 0x2916: 0x000a, 0x2917: 0x000a,\n\t0x2918: 0x000a, 0x2919: 0x000a, 0x291a: 0x000a, 0x291b: 0x000a, 0x291c: 0x000a, 0x291d: 0x000a,\n\t0x291e: 0x000a, 0x291f: 0x000a, 0x2920: 0x000a, 0x2921: 0x000a, 0x2922: 0x000a, 0x2923: 0x000a,\n\t0x2924: 0x000a, 0x2925: 0x000a,\n\t0x293f: 0x000c,\n\t// Block 0xa5, offset 0x2940\n\t0x2940: 0x000c, 0x2941: 0x000c,\n\t0x2973: 0x000c, 0x2974: 0x000c, 0x2975: 0x000c,\n\t0x2976: 0x000c, 0x2979: 0x000c, 0x297a: 0x000c,\n\t// Block 0xa6, offset 0x2980\n\t0x2980: 0x000c, 0x2981: 0x000c, 0x2982: 0x000c,\n\t0x29a7: 0x000c, 0x29a8: 0x000c, 0x29a9: 0x000c,\n\t0x29aa: 0x000c, 0x29ab: 0x000c, 0x29ad: 0x000c, 0x29ae: 0x000c, 0x29af: 0x000c,\n\t0x29b0: 0x000c, 0x29b1: 0x000c, 0x29b2: 0x000c, 0x29b3: 0x000c, 0x29b4: 0x000c,\n\t// Block 0xa7, offset 0x29c0\n\t0x29f3: 0x000c,\n\t// Block 0xa8, offset 0x2a00\n\t0x2a00: 0x000c, 0x2a01: 0x000c,\n\t0x2a36: 0x000c, 0x2a37: 0x000c, 0x2a38: 0x000c, 0x2a39: 0x000c, 0x2a3a: 0x000c, 0x2a3b: 0x000c,\n\t0x2a3c: 0x000c, 0x2a3d: 0x000c, 0x2a3e: 0x000c,\n\t// Block 0xa9, offset 0x2a40\n\t0x2a4a: 0x000c, 0x2a4b: 0x000c,\n\t0x2a4c: 0x000c,\n\t// Block 0xaa, offset 0x2a80\n\t0x2aaf: 0x000c,\n\t0x2ab0: 0x000c, 0x2ab1: 0x000c, 0x2ab4: 0x000c,\n\t0x2ab6: 0x000c, 0x2ab7: 0x000c,\n\t0x2abe: 0x000c,\n\t// Block 0xab, offset 0x2ac0\n\t0x2adf: 0x000c, 0x2ae3: 0x000c,\n\t0x2ae4: 0x000c, 0x2ae5: 0x000c, 0x2ae6: 0x000c, 0x2ae7: 0x000c, 0x2ae8: 0x000c, 0x2ae9: 0x000c,\n\t0x2aea: 0x000c,\n\t// Block 0xac, offset 0x2b00\n\t0x2b00: 0x000c, 0x2b01: 0x000c,\n\t0x2b3c: 0x000c,\n\t// Block 0xad, offset 0x2b40\n\t0x2b40: 0x000c,\n\t0x2b66: 0x000c, 0x2b67: 0x000c, 0x2b68: 0x000c, 0x2b69: 0x000c,\n\t0x2b6a: 0x000c, 0x2b6b: 0x000c, 0x2b6c: 0x000c,\n\t0x2b70: 0x000c, 0x2b71: 0x000c, 0x2b72: 0x000c, 0x2b73: 0x000c, 0x2b74: 0x000c,\n\t// Block 0xae, offset 0x2b80\n\t0x2bb8: 0x000c, 0x2bb9: 0x000c, 0x2bba: 0x000c, 0x2bbb: 0x000c,\n\t0x2bbc: 0x000c, 0x2bbd: 0x000c, 0x2bbe: 0x000c, 0x2bbf: 0x000c,\n\t// Block 0xaf, offset 0x2bc0\n\t0x2bc2: 0x000c, 0x2bc3: 0x000c, 0x2bc4: 0x000c,\n\t0x2bc6: 0x000c,\n\t// Block 0xb0, offset 0x2c00\n\t0x2c33: 0x000c, 0x2c34: 0x000c, 0x2c35: 0x000c,\n\t0x2c36: 0x000c, 0x2c37: 0x000c, 0x2c38: 0x000c, 0x2c3a: 0x000c,\n\t0x2c3f: 0x000c,\n\t// Block 0xb1, offset 0x2c40\n\t0x2c40: 0x000c, 0x2c42: 0x000c, 0x2c43: 0x000c,\n\t// Block 0xb2, offset 0x2c80\n\t0x2cb2: 0x000c, 0x2cb3: 0x000c, 0x2cb4: 0x000c, 0x2cb5: 0x000c,\n\t0x2cbc: 0x000c, 0x2cbd: 0x000c, 0x2cbf: 0x000c,\n\t// Block 0xb3, offset 0x2cc0\n\t0x2cc0: 0x000c,\n\t0x2cdc: 0x000c, 0x2cdd: 0x000c,\n\t// Block 0xb4, offset 0x2d00\n\t0x2d33: 0x000c, 0x2d34: 0x000c, 0x2d35: 0x000c,\n\t0x2d36: 0x000c, 0x2d37: 0x000c, 0x2d38: 0x000c, 0x2d39: 0x000c, 0x2d3a: 0x000c,\n\t0x2d3d: 0x000c, 0x2d3f: 0x000c,\n\t// Block 0xb5, offset 0x2d40\n\t0x2d40: 0x000c,\n\t0x2d60: 0x000a, 0x2d61: 0x000a, 0x2d62: 0x000a, 0x2d63: 0x000a,\n\t0x2d64: 0x000a, 0x2d65: 0x000a, 0x2d66: 0x000a, 0x2d67: 0x000a, 0x2d68: 0x000a, 0x2d69: 0x000a,\n\t0x2d6a: 0x000a, 0x2d6b: 0x000a, 0x2d6c: 0x000a,\n\t// Block 0xb6, offset 0x2d80\n\t0x2dab: 0x000c, 0x2dad: 0x000c,\n\t0x2db0: 0x000c, 0x2db1: 0x000c, 0x2db2: 0x000c, 0x2db3: 0x000c, 0x2db4: 0x000c, 0x2db5: 0x000c,\n\t0x2db7: 0x000c,\n\t// Block 0xb7, offset 0x2dc0\n\t0x2ddd: 0x000c,\n\t0x2dde: 0x000c, 0x2ddf: 0x000c, 0x2de2: 0x000c, 0x2de3: 0x000c,\n\t0x2de4: 0x000c, 0x2de5: 0x000c, 0x2de7: 0x000c, 0x2de8: 0x000c, 0x2de9: 0x000c,\n\t0x2dea: 0x000c, 0x2deb: 0x000c,\n\t// Block 0xb8, offset 0x2e00\n\t0x2e30: 0x000c, 0x2e31: 0x000c, 0x2e32: 0x000c, 0x2e33: 0x000c, 0x2e34: 0x000c, 0x2e35: 0x000c,\n\t0x2e36: 0x000c, 0x2e38: 0x000c, 0x2e39: 0x000c, 0x2e3a: 0x000c, 0x2e3b: 0x000c,\n\t0x2e3c: 0x000c, 0x2e3d: 0x000c,\n\t// Block 0xb9, offset 0x2e40\n\t0x2e52: 0x000c, 0x2e53: 0x000c, 0x2e54: 0x000c, 0x2e55: 0x000c, 0x2e56: 0x000c, 0x2e57: 0x000c,\n\t0x2e58: 0x000c, 0x2e59: 0x000c, 0x2e5a: 0x000c, 0x2e5b: 0x000c, 0x2e5c: 0x000c, 0x2e5d: 0x000c,\n\t0x2e5e: 0x000c, 0x2e5f: 0x000c, 0x2e60: 0x000c, 0x2e61: 0x000c, 0x2e62: 0x000c, 0x2e63: 0x000c,\n\t0x2e64: 0x000c, 0x2e65: 0x000c, 0x2e66: 0x000c, 0x2e67: 0x000c,\n\t0x2e6a: 0x000c, 0x2e6b: 0x000c, 0x2e6c: 0x000c, 0x2e6d: 0x000c, 0x2e6e: 0x000c, 0x2e6f: 0x000c,\n\t0x2e70: 0x000c, 0x2e72: 0x000c, 0x2e73: 0x000c, 0x2e75: 0x000c,\n\t0x2e76: 0x000c,\n\t// Block 0xba, offset 0x2e80\n\t0x2eb0: 0x000c, 0x2eb1: 0x000c, 0x2eb2: 0x000c, 0x2eb3: 0x000c, 0x2eb4: 0x000c,\n\t// Block 0xbb, offset 0x2ec0\n\t0x2ef0: 0x000c, 0x2ef1: 0x000c, 0x2ef2: 0x000c, 0x2ef3: 0x000c, 0x2ef4: 0x000c, 0x2ef5: 0x000c,\n\t0x2ef6: 0x000c,\n\t// Block 0xbc, offset 0x2f00\n\t0x2f0f: 0x000c, 0x2f10: 0x000c, 0x2f11: 0x000c,\n\t0x2f12: 0x000c,\n\t// Block 0xbd, offset 0x2f40\n\t0x2f5d: 0x000c,\n\t0x2f5e: 0x000c, 0x2f60: 0x000b, 0x2f61: 0x000b, 0x2f62: 0x000b, 0x2f63: 0x000b,\n\t// Block 0xbe, offset 0x2f80\n\t0x2fa7: 0x000c, 0x2fa8: 0x000c, 0x2fa9: 0x000c,\n\t0x2fb3: 0x000b, 0x2fb4: 0x000b, 0x2fb5: 0x000b,\n\t0x2fb6: 0x000b, 0x2fb7: 0x000b, 0x2fb8: 0x000b, 0x2fb9: 0x000b, 0x2fba: 0x000b, 0x2fbb: 0x000c,\n\t0x2fbc: 0x000c, 0x2fbd: 0x000c, 0x2fbe: 0x000c, 0x2fbf: 0x000c,\n\t// Block 0xbf, offset 0x2fc0\n\t0x2fc0: 0x000c, 0x2fc1: 0x000c, 0x2fc2: 0x000c, 0x2fc5: 0x000c,\n\t0x2fc6: 0x000c, 0x2fc7: 0x000c, 0x2fc8: 0x000c, 0x2fc9: 0x000c, 0x2fca: 0x000c, 0x2fcb: 0x000c,\n\t0x2fea: 0x000c, 0x2feb: 0x000c, 0x2fec: 0x000c, 0x2fed: 0x000c,\n\t// Block 0xc0, offset 0x3000\n\t0x3000: 0x000a, 0x3001: 0x000a, 0x3002: 0x000c, 0x3003: 0x000c, 0x3004: 0x000c, 0x3005: 0x000a,\n\t// Block 0xc1, offset 0x3040\n\t0x3040: 0x000a, 0x3041: 0x000a, 0x3042: 0x000a, 0x3043: 0x000a, 0x3044: 0x000a, 0x3045: 0x000a,\n\t0x3046: 0x000a, 0x3047: 0x000a, 0x3048: 0x000a, 0x3049: 0x000a, 0x304a: 0x000a, 0x304b: 0x000a,\n\t0x304c: 0x000a, 0x304d: 0x000a, 0x304e: 0x000a, 0x304f: 0x000a, 0x3050: 0x000a, 0x3051: 0x000a,\n\t0x3052: 0x000a, 0x3053: 0x000a, 0x3054: 0x000a, 0x3055: 0x000a, 0x3056: 0x000a,\n\t// Block 0xc2, offset 0x3080\n\t0x309b: 0x000a,\n\t// Block 0xc3, offset 0x30c0\n\t0x30d5: 0x000a,\n\t// Block 0xc4, offset 0x3100\n\t0x310f: 0x000a,\n\t// Block 0xc5, offset 0x3140\n\t0x3149: 0x000a,\n\t// Block 0xc6, offset 0x3180\n\t0x3183: 0x000a,\n\t0x318e: 0x0002, 0x318f: 0x0002, 0x3190: 0x0002, 0x3191: 0x0002,\n\t0x3192: 0x0002, 0x3193: 0x0002, 0x3194: 0x0002, 0x3195: 0x0002, 0x3196: 0x0002, 0x3197: 0x0002,\n\t0x3198: 0x0002, 0x3199: 0x0002, 0x319a: 0x0002, 0x319b: 0x0002, 0x319c: 0x0002, 0x319d: 0x0002,\n\t0x319e: 0x0002, 0x319f: 0x0002, 0x31a0: 0x0002, 0x31a1: 0x0002, 0x31a2: 0x0002, 0x31a3: 0x0002,\n\t0x31a4: 0x0002, 0x31a5: 0x0002, 0x31a6: 0x0002, 0x31a7: 0x0002, 0x31a8: 0x0002, 0x31a9: 0x0002,\n\t0x31aa: 0x0002, 0x31ab: 0x0002, 0x31ac: 0x0002, 0x31ad: 0x0002, 0x31ae: 0x0002, 0x31af: 0x0002,\n\t0x31b0: 0x0002, 0x31b1: 0x0002, 0x31b2: 0x0002, 0x31b3: 0x0002, 0x31b4: 0x0002, 0x31b5: 0x0002,\n\t0x31b6: 0x0002, 0x31b7: 0x0002, 0x31b8: 0x0002, 0x31b9: 0x0002, 0x31ba: 0x0002, 0x31bb: 0x0002,\n\t0x31bc: 0x0002, 0x31bd: 0x0002, 0x31be: 0x0002, 0x31bf: 0x0002,\n\t// Block 0xc7, offset 0x31c0\n\t0x31c0: 0x000c, 0x31c1: 0x000c, 0x31c2: 0x000c, 0x31c3: 0x000c, 0x31c4: 0x000c, 0x31c5: 0x000c,\n\t0x31c6: 0x000c, 0x31c7: 0x000c, 0x31c8: 0x000c, 0x31c9: 0x000c, 0x31ca: 0x000c, 0x31cb: 0x000c,\n\t0x31cc: 0x000c, 0x31cd: 0x000c, 0x31ce: 0x000c, 0x31cf: 0x000c, 0x31d0: 0x000c, 0x31d1: 0x000c,\n\t0x31d2: 0x000c, 0x31d3: 0x000c, 0x31d4: 0x000c, 0x31d5: 0x000c, 0x31d6: 0x000c, 0x31d7: 0x000c,\n\t0x31d8: 0x000c, 0x31d9: 0x000c, 0x31da: 0x000c, 0x31db: 0x000c, 0x31dc: 0x000c, 0x31dd: 0x000c,\n\t0x31de: 0x000c, 0x31df: 0x000c, 0x31e0: 0x000c, 0x31e1: 0x000c, 0x31e2: 0x000c, 0x31e3: 0x000c,\n\t0x31e4: 0x000c, 0x31e5: 0x000c, 0x31e6: 0x000c, 0x31e7: 0x000c, 0x31e8: 0x000c, 0x31e9: 0x000c,\n\t0x31ea: 0x000c, 0x31eb: 0x000c, 0x31ec: 0x000c, 0x31ed: 0x000c, 0x31ee: 0x000c, 0x31ef: 0x000c,\n\t0x31f0: 0x000c, 0x31f1: 0x000c, 0x31f2: 0x000c, 0x31f3: 0x000c, 0x31f4: 0x000c, 0x31f5: 0x000c,\n\t0x31f6: 0x000c, 0x31fb: 0x000c,\n\t0x31fc: 0x000c, 0x31fd: 0x000c, 0x31fe: 0x000c, 0x31ff: 0x000c,\n\t// Block 0xc8, offset 0x3200\n\t0x3200: 0x000c, 0x3201: 0x000c, 0x3202: 0x000c, 0x3203: 0x000c, 0x3204: 0x000c, 0x3205: 0x000c,\n\t0x3206: 0x000c, 0x3207: 0x000c, 0x3208: 0x000c, 0x3209: 0x000c, 0x320a: 0x000c, 0x320b: 0x000c,\n\t0x320c: 0x000c, 0x320d: 0x000c, 0x320e: 0x000c, 0x320f: 0x000c, 0x3210: 0x000c, 0x3211: 0x000c,\n\t0x3212: 0x000c, 0x3213: 0x000c, 0x3214: 0x000c, 0x3215: 0x000c, 0x3216: 0x000c, 0x3217: 0x000c,\n\t0x3218: 0x000c, 0x3219: 0x000c, 0x321a: 0x000c, 0x321b: 0x000c, 0x321c: 0x000c, 0x321d: 0x000c,\n\t0x321e: 0x000c, 0x321f: 0x000c, 0x3220: 0x000c, 0x3221: 0x000c, 0x3222: 0x000c, 0x3223: 0x000c,\n\t0x3224: 0x000c, 0x3225: 0x000c, 0x3226: 0x000c, 0x3227: 0x000c, 0x3228: 0x000c, 0x3229: 0x000c,\n\t0x322a: 0x000c, 0x322b: 0x000c, 0x322c: 0x000c,\n\t0x3235: 0x000c,\n\t// Block 0xc9, offset 0x3240\n\t0x3244: 0x000c,\n\t0x325b: 0x000c, 0x325c: 0x000c, 0x325d: 0x000c,\n\t0x325e: 0x000c, 0x325f: 0x000c, 0x3261: 0x000c, 0x3262: 0x000c, 0x3263: 0x000c,\n\t0x3264: 0x000c, 0x3265: 0x000c, 0x3266: 0x000c, 0x3267: 0x000c, 0x3268: 0x000c, 0x3269: 0x000c,\n\t0x326a: 0x000c, 0x326b: 0x000c, 0x326c: 0x000c, 0x326d: 0x000c, 0x326e: 0x000c, 0x326f: 0x000c,\n\t// Block 0xca, offset 0x3280\n\t0x3280: 0x000c, 0x3281: 0x000c, 0x3282: 0x000c, 0x3283: 0x000c, 0x3284: 0x000c, 0x3285: 0x000c,\n\t0x3286: 0x000c, 0x3288: 0x000c, 0x3289: 0x000c, 0x328a: 0x000c, 0x328b: 0x000c,\n\t0x328c: 0x000c, 0x328d: 0x000c, 0x328e: 0x000c, 0x328f: 0x000c, 0x3290: 0x000c, 0x3291: 0x000c,\n\t0x3292: 0x000c, 0x3293: 0x000c, 0x3294: 0x000c, 0x3295: 0x000c, 0x3296: 0x000c, 0x3297: 0x000c,\n\t0x3298: 0x000c, 0x329b: 0x000c, 0x329c: 0x000c, 0x329d: 0x000c,\n\t0x329e: 0x000c, 0x329f: 0x000c, 0x32a0: 0x000c, 0x32a1: 0x000c, 0x32a3: 0x000c,\n\t0x32a4: 0x000c, 0x32a6: 0x000c, 0x32a7: 0x000c, 0x32a8: 0x000c, 0x32a9: 0x000c,\n\t0x32aa: 0x000c,\n\t// Block 0xcb, offset 0x32c0\n\t0x32c0: 0x0001, 0x32c1: 0x0001, 0x32c2: 0x0001, 0x32c3: 0x0001, 0x32c4: 0x0001, 0x32c5: 0x0001,\n\t0x32c6: 0x0001, 0x32c7: 0x0001, 0x32c8: 0x0001, 0x32c9: 0x0001, 0x32ca: 0x0001, 0x32cb: 0x0001,\n\t0x32cc: 0x0001, 0x32cd: 0x0001, 0x32ce: 0x0001, 0x32cf: 0x0001, 0x32d0: 0x000c, 0x32d1: 0x000c,\n\t0x32d2: 0x000c, 0x32d3: 0x000c, 0x32d4: 0x000c, 0x32d5: 0x000c, 0x32d6: 0x000c, 0x32d7: 0x0001,\n\t0x32d8: 0x0001, 0x32d9: 0x0001, 0x32da: 0x0001, 0x32db: 0x0001, 0x32dc: 0x0001, 0x32dd: 0x0001,\n\t0x32de: 0x0001, 0x32df: 0x0001, 0x32e0: 0x0001, 0x32e1: 0x0001, 0x32e2: 0x0001, 0x32e3: 0x0001,\n\t0x32e4: 0x0001, 0x32e5: 0x0001, 0x32e6: 0x0001, 0x32e7: 0x0001, 0x32e8: 0x0001, 0x32e9: 0x0001,\n\t0x32ea: 0x0001, 0x32eb: 0x0001, 0x32ec: 0x0001, 0x32ed: 0x0001, 0x32ee: 0x0001, 0x32ef: 0x0001,\n\t0x32f0: 0x0001, 0x32f1: 0x0001, 0x32f2: 0x0001, 0x32f3: 0x0001, 0x32f4: 0x0001, 0x32f5: 0x0001,\n\t0x32f6: 0x0001, 0x32f7: 0x0001, 0x32f8: 0x0001, 0x32f9: 0x0001, 0x32fa: 0x0001, 0x32fb: 0x0001,\n\t0x32fc: 0x0001, 0x32fd: 0x0001, 0x32fe: 0x0001, 0x32ff: 0x0001,\n\t// Block 0xcc, offset 0x3300\n\t0x3300: 0x0001, 0x3301: 0x0001, 0x3302: 0x0001, 0x3303: 0x0001, 0x3304: 0x000c, 0x3305: 0x000c,\n\t0x3306: 0x000c, 0x3307: 0x000c, 0x3308: 0x000c, 0x3309: 0x000c, 0x330a: 0x000c, 0x330b: 0x0001,\n\t0x330c: 0x0001, 0x330d: 0x0001, 0x330e: 0x0001, 0x330f: 0x0001, 0x3310: 0x0001, 0x3311: 0x0001,\n\t0x3312: 0x0001, 0x3313: 0x0001, 0x3314: 0x0001, 0x3315: 0x0001, 0x3316: 0x0001, 0x3317: 0x0001,\n\t0x3318: 0x0001, 0x3319: 0x0001, 0x331a: 0x0001, 0x331b: 0x0001, 0x331c: 0x0001, 0x331d: 0x0001,\n\t0x331e: 0x0001, 0x331f: 0x0001, 0x3320: 0x0001, 0x3321: 0x0001, 0x3322: 0x0001, 0x3323: 0x0001,\n\t0x3324: 0x0001, 0x3325: 0x0001, 0x3326: 0x0001, 0x3327: 0x0001, 0x3328: 0x0001, 0x3329: 0x0001,\n\t0x332a: 0x0001, 0x332b: 0x0001, 0x332c: 0x0001, 0x332d: 0x0001, 0x332e: 0x0001, 0x332f: 0x0001,\n\t0x3330: 0x0001, 0x3331: 0x0001, 0x3332: 0x0001, 0x3333: 0x0001, 0x3334: 0x0001, 0x3335: 0x0001,\n\t0x3336: 0x0001, 0x3337: 0x0001, 0x3338: 0x0001, 0x3339: 0x0001, 0x333a: 0x0001, 0x333b: 0x0001,\n\t0x333c: 0x0001, 0x333d: 0x0001, 0x333e: 0x0001, 0x333f: 0x0001,\n\t// Block 0xcd, offset 0x3340\n\t0x3340: 0x000d, 0x3341: 0x000d, 0x3342: 0x000d, 0x3343: 0x000d, 0x3344: 0x000d, 0x3345: 0x000d,\n\t0x3346: 0x000d, 0x3347: 0x000d, 0x3348: 0x000d, 0x3349: 0x000d, 0x334a: 0x000d, 0x334b: 0x000d,\n\t0x334c: 0x000d, 0x334d: 0x000d, 0x334e: 0x000d, 0x334f: 0x000d, 0x3350: 0x000d, 0x3351: 0x000d,\n\t0x3352: 0x000d, 0x3353: 0x000d, 0x3354: 0x000d, 0x3355: 0x000d, 0x3356: 0x000d, 0x3357: 0x000d,\n\t0x3358: 0x000d, 0x3359: 0x000d, 0x335a: 0x000d, 0x335b: 0x000d, 0x335c: 0x000d, 0x335d: 0x000d,\n\t0x335e: 0x000d, 0x335f: 0x000d, 0x3360: 0x000d, 0x3361: 0x000d, 0x3362: 0x000d, 0x3363: 0x000d,\n\t0x3364: 0x000d, 0x3365: 0x000d, 0x3366: 0x000d, 0x3367: 0x000d, 0x3368: 0x000d, 0x3369: 0x000d,\n\t0x336a: 0x000d, 0x336b: 0x000d, 0x336c: 0x000d, 0x336d: 0x000d, 0x336e: 0x000d, 0x336f: 0x000d,\n\t0x3370: 0x000a, 0x3371: 0x000a, 0x3372: 0x000d, 0x3373: 0x000d, 0x3374: 0x000d, 0x3375: 0x000d,\n\t0x3376: 0x000d, 0x3377: 0x000d, 0x3378: 0x000d, 0x3379: 0x000d, 0x337a: 0x000d, 0x337b: 0x000d,\n\t0x337c: 0x000d, 0x337d: 0x000d, 0x337e: 0x000d, 0x337f: 0x000d,\n\t// Block 0xce, offset 0x3380\n\t0x3380: 0x000a, 0x3381: 0x000a, 0x3382: 0x000a, 0x3383: 0x000a, 0x3384: 0x000a, 0x3385: 0x000a,\n\t0x3386: 0x000a, 0x3387: 0x000a, 0x3388: 0x000a, 0x3389: 0x000a, 0x338a: 0x000a, 0x338b: 0x000a,\n\t0x338c: 0x000a, 0x338d: 0x000a, 0x338e: 0x000a, 0x338f: 0x000a, 0x3390: 0x000a, 0x3391: 0x000a,\n\t0x3392: 0x000a, 0x3393: 0x000a, 0x3394: 0x000a, 0x3395: 0x000a, 0x3396: 0x000a, 0x3397: 0x000a,\n\t0x3398: 0x000a, 0x3399: 0x000a, 0x339a: 0x000a, 0x339b: 0x000a, 0x339c: 0x000a, 0x339d: 0x000a,\n\t0x339e: 0x000a, 0x339f: 0x000a, 0x33a0: 0x000a, 0x33a1: 0x000a, 0x33a2: 0x000a, 0x33a3: 0x000a,\n\t0x33a4: 0x000a, 0x33a5: 0x000a, 0x33a6: 0x000a, 0x33a7: 0x000a, 0x33a8: 0x000a, 0x33a9: 0x000a,\n\t0x33aa: 0x000a, 0x33ab: 0x000a,\n\t0x33b0: 0x000a, 0x33b1: 0x000a, 0x33b2: 0x000a, 0x33b3: 0x000a, 0x33b4: 0x000a, 0x33b5: 0x000a,\n\t0x33b6: 0x000a, 0x33b7: 0x000a, 0x33b8: 0x000a, 0x33b9: 0x000a, 0x33ba: 0x000a, 0x33bb: 0x000a,\n\t0x33bc: 0x000a, 0x33bd: 0x000a, 0x33be: 0x000a, 0x33bf: 0x000a,\n\t// Block 0xcf, offset 0x33c0\n\t0x33c0: 0x000a, 0x33c1: 0x000a, 0x33c2: 0x000a, 0x33c3: 0x000a, 0x33c4: 0x000a, 0x33c5: 0x000a,\n\t0x33c6: 0x000a, 0x33c7: 0x000a, 0x33c8: 0x000a, 0x33c9: 0x000a, 0x33ca: 0x000a, 0x33cb: 0x000a,\n\t0x33cc: 0x000a, 0x33cd: 0x000a, 0x33ce: 0x000a, 0x33cf: 0x000a, 0x33d0: 0x000a, 0x33d1: 0x000a,\n\t0x33d2: 0x000a, 0x33d3: 0x000a,\n\t0x33e0: 0x000a, 0x33e1: 0x000a, 0x33e2: 0x000a, 0x33e3: 0x000a,\n\t0x33e4: 0x000a, 0x33e5: 0x000a, 0x33e6: 0x000a, 0x33e7: 0x000a, 0x33e8: 0x000a, 0x33e9: 0x000a,\n\t0x33ea: 0x000a, 0x33eb: 0x000a, 0x33ec: 0x000a, 0x33ed: 0x000a, 0x33ee: 0x000a,\n\t0x33f1: 0x000a, 0x33f2: 0x000a, 0x33f3: 0x000a, 0x33f4: 0x000a, 0x33f5: 0x000a,\n\t0x33f6: 0x000a, 0x33f7: 0x000a, 0x33f8: 0x000a, 0x33f9: 0x000a, 0x33fa: 0x000a, 0x33fb: 0x000a,\n\t0x33fc: 0x000a, 0x33fd: 0x000a, 0x33fe: 0x000a, 0x33ff: 0x000a,\n\t// Block 0xd0, offset 0x3400\n\t0x3401: 0x000a, 0x3402: 0x000a, 0x3403: 0x000a, 0x3404: 0x000a, 0x3405: 0x000a,\n\t0x3406: 0x000a, 0x3407: 0x000a, 0x3408: 0x000a, 0x3409: 0x000a, 0x340a: 0x000a, 0x340b: 0x000a,\n\t0x340c: 0x000a, 0x340d: 0x000a, 0x340e: 0x000a, 0x340f: 0x000a, 0x3411: 0x000a,\n\t0x3412: 0x000a, 0x3413: 0x000a, 0x3414: 0x000a, 0x3415: 0x000a, 0x3416: 0x000a, 0x3417: 0x000a,\n\t0x3418: 0x000a, 0x3419: 0x000a, 0x341a: 0x000a, 0x341b: 0x000a, 0x341c: 0x000a, 0x341d: 0x000a,\n\t0x341e: 0x000a, 0x341f: 0x000a, 0x3420: 0x000a, 0x3421: 0x000a, 0x3422: 0x000a, 0x3423: 0x000a,\n\t0x3424: 0x000a, 0x3425: 0x000a, 0x3426: 0x000a, 0x3427: 0x000a, 0x3428: 0x000a, 0x3429: 0x000a,\n\t0x342a: 0x000a, 0x342b: 0x000a, 0x342c: 0x000a, 0x342d: 0x000a, 0x342e: 0x000a, 0x342f: 0x000a,\n\t0x3430: 0x000a, 0x3431: 0x000a, 0x3432: 0x000a, 0x3433: 0x000a, 0x3434: 0x000a, 0x3435: 0x000a,\n\t// Block 0xd1, offset 0x3440\n\t0x3440: 0x0002, 0x3441: 0x0002, 0x3442: 0x0002, 0x3443: 0x0002, 0x3444: 0x0002, 0x3445: 0x0002,\n\t0x3446: 0x0002, 0x3447: 0x0002, 0x3448: 0x0002, 0x3449: 0x0002, 0x344a: 0x0002, 0x344b: 0x000a,\n\t0x344c: 0x000a,\n\t// Block 0xd2, offset 0x3480\n\t0x34aa: 0x000a, 0x34ab: 0x000a,\n\t// Block 0xd3, offset 0x34c0\n\t0x34c0: 0x000a, 0x34c1: 0x000a, 0x34c2: 0x000a, 0x34c3: 0x000a, 0x34c4: 0x000a, 0x34c5: 0x000a,\n\t0x34c6: 0x000a, 0x34c7: 0x000a, 0x34c8: 0x000a, 0x34c9: 0x000a, 0x34ca: 0x000a, 0x34cb: 0x000a,\n\t0x34cc: 0x000a, 0x34cd: 0x000a, 0x34ce: 0x000a, 0x34cf: 0x000a, 0x34d0: 0x000a, 0x34d1: 0x000a,\n\t0x34d2: 0x000a,\n\t0x34e0: 0x000a, 0x34e1: 0x000a, 0x34e2: 0x000a, 0x34e3: 0x000a,\n\t0x34e4: 0x000a, 0x34e5: 0x000a, 0x34e6: 0x000a, 0x34e7: 0x000a, 0x34e8: 0x000a, 0x34e9: 0x000a,\n\t0x34ea: 0x000a, 0x34eb: 0x000a, 0x34ec: 0x000a,\n\t0x34f0: 0x000a, 0x34f1: 0x000a, 0x34f2: 0x000a, 0x34f3: 0x000a, 0x34f4: 0x000a, 0x34f5: 0x000a,\n\t0x34f6: 0x000a,\n\t// Block 0xd4, offset 0x3500\n\t0x3500: 0x000a, 0x3501: 0x000a, 0x3502: 0x000a, 0x3503: 0x000a, 0x3504: 0x000a, 0x3505: 0x000a,\n\t0x3506: 0x000a, 0x3507: 0x000a, 0x3508: 0x000a, 0x3509: 0x000a, 0x350a: 0x000a, 0x350b: 0x000a,\n\t0x350c: 0x000a, 0x350d: 0x000a, 0x350e: 0x000a, 0x350f: 0x000a, 0x3510: 0x000a, 0x3511: 0x000a,\n\t0x3512: 0x000a, 0x3513: 0x000a, 0x3514: 0x000a,\n\t// Block 0xd5, offset 0x3540\n\t0x3540: 0x000a, 0x3541: 0x000a, 0x3542: 0x000a, 0x3543: 0x000a, 0x3544: 0x000a, 0x3545: 0x000a,\n\t0x3546: 0x000a, 0x3547: 0x000a, 0x3548: 0x000a, 0x3549: 0x000a, 0x354a: 0x000a, 0x354b: 0x000a,\n\t0x3550: 0x000a, 0x3551: 0x000a,\n\t0x3552: 0x000a, 0x3553: 0x000a, 0x3554: 0x000a, 0x3555: 0x000a, 0x3556: 0x000a, 0x3557: 0x000a,\n\t0x3558: 0x000a, 0x3559: 0x000a, 0x355a: 0x000a, 0x355b: 0x000a, 0x355c: 0x000a, 0x355d: 0x000a,\n\t0x355e: 0x000a, 0x355f: 0x000a, 0x3560: 0x000a, 0x3561: 0x000a, 0x3562: 0x000a, 0x3563: 0x000a,\n\t0x3564: 0x000a, 0x3565: 0x000a, 0x3566: 0x000a, 0x3567: 0x000a, 0x3568: 0x000a, 0x3569: 0x000a,\n\t0x356a: 0x000a, 0x356b: 0x000a, 0x356c: 0x000a, 0x356d: 0x000a, 0x356e: 0x000a, 0x356f: 0x000a,\n\t0x3570: 0x000a, 0x3571: 0x000a, 0x3572: 0x000a, 0x3573: 0x000a, 0x3574: 0x000a, 0x3575: 0x000a,\n\t0x3576: 0x000a, 0x3577: 0x000a, 0x3578: 0x000a, 0x3579: 0x000a, 0x357a: 0x000a, 0x357b: 0x000a,\n\t0x357c: 0x000a, 0x357d: 0x000a, 0x357e: 0x000a, 0x357f: 0x000a,\n\t// Block 0xd6, offset 0x3580\n\t0x3580: 0x000a, 0x3581: 0x000a, 0x3582: 0x000a, 0x3583: 0x000a, 0x3584: 0x000a, 0x3585: 0x000a,\n\t0x3586: 0x000a, 0x3587: 0x000a,\n\t0x3590: 0x000a, 0x3591: 0x000a,\n\t0x3592: 0x000a, 0x3593: 0x000a, 0x3594: 0x000a, 0x3595: 0x000a, 0x3596: 0x000a, 0x3597: 0x000a,\n\t0x3598: 0x000a, 0x3599: 0x000a,\n\t0x35a0: 0x000a, 0x35a1: 0x000a, 0x35a2: 0x000a, 0x35a3: 0x000a,\n\t0x35a4: 0x000a, 0x35a5: 0x000a, 0x35a6: 0x000a, 0x35a7: 0x000a, 0x35a8: 0x000a, 0x35a9: 0x000a,\n\t0x35aa: 0x000a, 0x35ab: 0x000a, 0x35ac: 0x000a, 0x35ad: 0x000a, 0x35ae: 0x000a, 0x35af: 0x000a,\n\t0x35b0: 0x000a, 0x35b1: 0x000a, 0x35b2: 0x000a, 0x35b3: 0x000a, 0x35b4: 0x000a, 0x35b5: 0x000a,\n\t0x35b6: 0x000a, 0x35b7: 0x000a, 0x35b8: 0x000a, 0x35b9: 0x000a, 0x35ba: 0x000a, 0x35bb: 0x000a,\n\t0x35bc: 0x000a, 0x35bd: 0x000a, 0x35be: 0x000a, 0x35bf: 0x000a,\n\t// Block 0xd7, offset 0x35c0\n\t0x35c0: 0x000a, 0x35c1: 0x000a, 0x35c2: 0x000a, 0x35c3: 0x000a, 0x35c4: 0x000a, 0x35c5: 0x000a,\n\t0x35c6: 0x000a, 0x35c7: 0x000a,\n\t0x35d0: 0x000a, 0x35d1: 0x000a,\n\t0x35d2: 0x000a, 0x35d3: 0x000a, 0x35d4: 0x000a, 0x35d5: 0x000a, 0x35d6: 0x000a, 0x35d7: 0x000a,\n\t0x35d8: 0x000a, 0x35d9: 0x000a, 0x35da: 0x000a, 0x35db: 0x000a, 0x35dc: 0x000a, 0x35dd: 0x000a,\n\t0x35de: 0x000a, 0x35df: 0x000a, 0x35e0: 0x000a, 0x35e1: 0x000a, 0x35e2: 0x000a, 0x35e3: 0x000a,\n\t0x35e4: 0x000a, 0x35e5: 0x000a, 0x35e6: 0x000a, 0x35e7: 0x000a, 0x35e8: 0x000a, 0x35e9: 0x000a,\n\t0x35ea: 0x000a, 0x35eb: 0x000a, 0x35ec: 0x000a, 0x35ed: 0x000a,\n\t// Block 0xd8, offset 0x3600\n\t0x3610: 0x000a, 0x3611: 0x000a,\n\t0x3612: 0x000a, 0x3613: 0x000a, 0x3614: 0x000a, 0x3615: 0x000a, 0x3616: 0x000a, 0x3617: 0x000a,\n\t0x3618: 0x000a, 0x3619: 0x000a, 0x361a: 0x000a, 0x361b: 0x000a, 0x361c: 0x000a, 0x361d: 0x000a,\n\t0x361e: 0x000a, 0x3620: 0x000a, 0x3621: 0x000a, 0x3622: 0x000a, 0x3623: 0x000a,\n\t0x3624: 0x000a, 0x3625: 0x000a, 0x3626: 0x000a, 0x3627: 0x000a,\n\t0x3630: 0x000a, 0x3633: 0x000a, 0x3634: 0x000a, 0x3635: 0x000a,\n\t0x3636: 0x000a, 0x3637: 0x000a, 0x3638: 0x000a, 0x3639: 0x000a, 0x363a: 0x000a, 0x363b: 0x000a,\n\t0x363c: 0x000a, 0x363d: 0x000a, 0x363e: 0x000a,\n\t// Block 0xd9, offset 0x3640\n\t0x3640: 0x000a, 0x3641: 0x000a, 0x3642: 0x000a, 0x3643: 0x000a, 0x3644: 0x000a, 0x3645: 0x000a,\n\t0x3646: 0x000a, 0x3647: 0x000a, 0x3648: 0x000a, 0x3649: 0x000a, 0x364a: 0x000a, 0x364b: 0x000a,\n\t0x3650: 0x000a, 0x3651: 0x000a,\n\t0x3652: 0x000a, 0x3653: 0x000a, 0x3654: 0x000a, 0x3655: 0x000a, 0x3656: 0x000a, 0x3657: 0x000a,\n\t0x3658: 0x000a, 0x3659: 0x000a, 0x365a: 0x000a, 0x365b: 0x000a, 0x365c: 0x000a, 0x365d: 0x000a,\n\t0x365e: 0x000a,\n\t// Block 0xda, offset 0x3680\n\t0x3680: 0x000a, 0x3681: 0x000a, 0x3682: 0x000a, 0x3683: 0x000a, 0x3684: 0x000a, 0x3685: 0x000a,\n\t0x3686: 0x000a, 0x3687: 0x000a, 0x3688: 0x000a, 0x3689: 0x000a, 0x368a: 0x000a, 0x368b: 0x000a,\n\t0x368c: 0x000a, 0x368d: 0x000a, 0x368e: 0x000a, 0x368f: 0x000a, 0x3690: 0x000a, 0x3691: 0x000a,\n\t// Block 0xdb, offset 0x36c0\n\t0x36fe: 0x000b, 0x36ff: 0x000b,\n\t// Block 0xdc, offset 0x3700\n\t0x3700: 0x000b, 0x3701: 0x000b, 0x3702: 0x000b, 0x3703: 0x000b, 0x3704: 0x000b, 0x3705: 0x000b,\n\t0x3706: 0x000b, 0x3707: 0x000b, 0x3708: 0x000b, 0x3709: 0x000b, 0x370a: 0x000b, 0x370b: 0x000b,\n\t0x370c: 0x000b, 0x370d: 0x000b, 0x370e: 0x000b, 0x370f: 0x000b, 0x3710: 0x000b, 0x3711: 0x000b,\n\t0x3712: 0x000b, 0x3713: 0x000b, 0x3714: 0x000b, 0x3715: 0x000b, 0x3716: 0x000b, 0x3717: 0x000b,\n\t0x3718: 0x000b, 0x3719: 0x000b, 0x371a: 0x000b, 0x371b: 0x000b, 0x371c: 0x000b, 0x371d: 0x000b,\n\t0x371e: 0x000b, 0x371f: 0x000b, 0x3720: 0x000b, 0x3721: 0x000b, 0x3722: 0x000b, 0x3723: 0x000b,\n\t0x3724: 0x000b, 0x3725: 0x000b, 0x3726: 0x000b, 0x3727: 0x000b, 0x3728: 0x000b, 0x3729: 0x000b,\n\t0x372a: 0x000b, 0x372b: 0x000b, 0x372c: 0x000b, 0x372d: 0x000b, 0x372e: 0x000b, 0x372f: 0x000b,\n\t0x3730: 0x000b, 0x3731: 0x000b, 0x3732: 0x000b, 0x3733: 0x000b, 0x3734: 0x000b, 0x3735: 0x000b,\n\t0x3736: 0x000b, 0x3737: 0x000b, 0x3738: 0x000b, 0x3739: 0x000b, 0x373a: 0x000b, 0x373b: 0x000b,\n\t0x373c: 0x000b, 0x373d: 0x000b, 0x373e: 0x000b, 0x373f: 0x000b,\n\t// Block 0xdd, offset 0x3740\n\t0x3740: 0x000c, 0x3741: 0x000c, 0x3742: 0x000c, 0x3743: 0x000c, 0x3744: 0x000c, 0x3745: 0x000c,\n\t0x3746: 0x000c, 0x3747: 0x000c, 0x3748: 0x000c, 0x3749: 0x000c, 0x374a: 0x000c, 0x374b: 0x000c,\n\t0x374c: 0x000c, 0x374d: 0x000c, 0x374e: 0x000c, 0x374f: 0x000c, 0x3750: 0x000c, 0x3751: 0x000c,\n\t0x3752: 0x000c, 0x3753: 0x000c, 0x3754: 0x000c, 0x3755: 0x000c, 0x3756: 0x000c, 0x3757: 0x000c,\n\t0x3758: 0x000c, 0x3759: 0x000c, 0x375a: 0x000c, 0x375b: 0x000c, 0x375c: 0x000c, 0x375d: 0x000c,\n\t0x375e: 0x000c, 0x375f: 0x000c, 0x3760: 0x000c, 0x3761: 0x000c, 0x3762: 0x000c, 0x3763: 0x000c,\n\t0x3764: 0x000c, 0x3765: 0x000c, 0x3766: 0x000c, 0x3767: 0x000c, 0x3768: 0x000c, 0x3769: 0x000c,\n\t0x376a: 0x000c, 0x376b: 0x000c, 0x376c: 0x000c, 0x376d: 0x000c, 0x376e: 0x000c, 0x376f: 0x000c,\n\t0x3770: 0x000b, 0x3771: 0x000b, 0x3772: 0x000b, 0x3773: 0x000b, 0x3774: 0x000b, 0x3775: 0x000b,\n\t0x3776: 0x000b, 0x3777: 0x000b, 0x3778: 0x000b, 0x3779: 0x000b, 0x377a: 0x000b, 0x377b: 0x000b,\n\t0x377c: 0x000b, 0x377d: 0x000b, 0x377e: 0x000b, 0x377f: 0x000b,\n}\n\n// bidiIndex: 24 blocks, 1536 entries, 1536 bytes\n// Block 0 is the zero block.\nvar bidiIndex = [1536]uint8{\n\t// Block 0x0, offset 0x0\n\t// Block 0x1, offset 0x40\n\t// Block 0x2, offset 0x80\n\t// Block 0x3, offset 0xc0\n\t0xc2: 0x01, 0xc3: 0x02,\n\t0xca: 0x03, 0xcb: 0x04, 0xcc: 0x05, 0xcd: 0x06, 0xce: 0x07, 0xcf: 0x08,\n\t0xd2: 0x09, 0xd6: 0x0a, 0xd7: 0x0b,\n\t0xd8: 0x0c, 0xd9: 0x0d, 0xda: 0x0e, 0xdb: 0x0f, 0xdc: 0x10, 0xdd: 0x11, 0xde: 0x12, 0xdf: 0x13,\n\t0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, 0xe4: 0x06,\n\t0xea: 0x07, 0xef: 0x08,\n\t0xf0: 0x11, 0xf1: 0x12, 0xf2: 0x12, 0xf3: 0x14, 0xf4: 0x15,\n\t// Block 0x4, offset 0x100\n\t0x120: 0x14, 0x121: 0x15, 0x122: 0x16, 0x123: 0x17, 0x124: 0x18, 0x125: 0x19, 0x126: 0x1a, 0x127: 0x1b,\n\t0x128: 0x1c, 0x129: 0x1d, 0x12a: 0x1c, 0x12b: 0x1e, 0x12c: 0x1f, 0x12d: 0x20, 0x12e: 0x21, 0x12f: 0x22,\n\t0x130: 0x23, 0x131: 0x24, 0x132: 0x1a, 0x133: 0x25, 0x134: 0x26, 0x135: 0x27, 0x137: 0x28,\n\t0x138: 0x29, 0x139: 0x2a, 0x13a: 0x2b, 0x13b: 0x2c, 0x13c: 0x2d, 0x13d: 0x2e, 0x13e: 0x2f, 0x13f: 0x30,\n\t// Block 0x5, offset 0x140\n\t0x140: 0x31, 0x141: 0x32, 0x142: 0x33,\n\t0x14d: 0x34, 0x14e: 0x35,\n\t0x150: 0x36,\n\t0x15a: 0x37, 0x15c: 0x38, 0x15d: 0x39, 0x15e: 0x3a, 0x15f: 0x3b,\n\t0x160: 0x3c, 0x162: 0x3d, 0x164: 0x3e, 0x165: 0x3f, 0x167: 0x40,\n\t0x168: 0x41, 0x169: 0x42, 0x16a: 0x43, 0x16c: 0x44, 0x16d: 0x45, 0x16e: 0x46, 0x16f: 0x47,\n\t0x170: 0x48, 0x173: 0x49, 0x177: 0x4a,\n\t0x17e: 0x4b, 0x17f: 0x4c,\n\t// Block 0x6, offset 0x180\n\t0x180: 0x4d, 0x181: 0x4e, 0x182: 0x4f, 0x183: 0x50, 0x184: 0x51, 0x185: 0x52, 0x186: 0x53, 0x187: 0x54,\n\t0x188: 0x55, 0x189: 0x54, 0x18a: 0x54, 0x18b: 0x54, 0x18c: 0x56, 0x18d: 0x57, 0x18e: 0x58, 0x18f: 0x59,\n\t0x190: 0x5a, 0x191: 0x5b, 0x192: 0x5c, 0x193: 0x5d, 0x194: 0x54, 0x195: 0x54, 0x196: 0x54, 0x197: 0x54,\n\t0x198: 0x54, 0x199: 0x54, 0x19a: 0x5e, 0x19b: 0x54, 0x19c: 0x54, 0x19d: 0x5f, 0x19e: 0x54, 0x19f: 0x60,\n\t0x1a4: 0x54, 0x1a5: 0x54, 0x1a6: 0x61, 0x1a7: 0x62,\n\t0x1a8: 0x54, 0x1a9: 0x54, 0x1aa: 0x54, 0x1ab: 0x54, 0x1ac: 0x54, 0x1ad: 0x63, 0x1ae: 0x64, 0x1af: 0x65,\n\t0x1b3: 0x66, 0x1b5: 0x67, 0x1b7: 0x68,\n\t0x1b8: 0x69, 0x1b9: 0x6a, 0x1ba: 0x6b, 0x1bb: 0x6c, 0x1bc: 0x54, 0x1bd: 0x54, 0x1be: 0x54, 0x1bf: 0x6d,\n\t// Block 0x7, offset 0x1c0\n\t0x1c0: 0x6e, 0x1c2: 0x6f, 0x1c3: 0x70, 0x1c7: 0x71,\n\t0x1c8: 0x72, 0x1c9: 0x73, 0x1ca: 0x74, 0x1cb: 0x75, 0x1cd: 0x76, 0x1cf: 0x77,\n\t// Block 0x8, offset 0x200\n\t0x237: 0x54,\n\t// Block 0x9, offset 0x240\n\t0x252: 0x78, 0x253: 0x79,\n\t0x258: 0x7a, 0x259: 0x7b, 0x25a: 0x7c, 0x25b: 0x7d, 0x25c: 0x7e, 0x25e: 0x7f,\n\t0x260: 0x80, 0x261: 0x81, 0x263: 0x82, 0x264: 0x83, 0x265: 0x84, 0x266: 0x85, 0x267: 0x86,\n\t0x268: 0x87, 0x269: 0x88, 0x26a: 0x89, 0x26b: 0x8a, 0x26f: 0x8b,\n\t// Block 0xa, offset 0x280\n\t0x2ac: 0x8c, 0x2ad: 0x8d, 0x2ae: 0x0e, 0x2af: 0x0e,\n\t0x2b0: 0x0e, 0x2b1: 0x0e, 0x2b2: 0x0e, 0x2b3: 0x0e, 0x2b4: 0x8e, 0x2b5: 0x0e, 0x2b6: 0x0e, 0x2b7: 0x8f,\n\t0x2b8: 0x90, 0x2b9: 0x91, 0x2ba: 0x0e, 0x2bb: 0x92, 0x2bc: 0x93, 0x2bd: 0x94, 0x2bf: 0x95,\n\t// Block 0xb, offset 0x2c0\n\t0x2c4: 0x96, 0x2c5: 0x54, 0x2c6: 0x97, 0x2c7: 0x98,\n\t0x2cb: 0x99, 0x2cd: 0x9a,\n\t0x2e0: 0x9b, 0x2e1: 0x9b, 0x2e2: 0x9b, 0x2e3: 0x9b, 0x2e4: 0x9c, 0x2e5: 0x9b, 0x2e6: 0x9b, 0x2e7: 0x9b,\n\t0x2e8: 0x9d, 0x2e9: 0x9b, 0x2ea: 0x9b, 0x2eb: 0x9e, 0x2ec: 0x9f, 0x2ed: 0x9b, 0x2ee: 0x9b, 0x2ef: 0x9b,\n\t0x2f0: 0x9b, 0x2f1: 0x9b, 0x2f2: 0x9b, 0x2f3: 0x9b, 0x2f4: 0x9b, 0x2f5: 0x9b, 0x2f6: 0x9b, 0x2f7: 0x9b,\n\t0x2f8: 0x9b, 0x2f9: 0xa0, 0x2fa: 0x9b, 0x2fb: 0x9b, 0x2fc: 0x9b, 0x2fd: 0x9b, 0x2fe: 0x9b, 0x2ff: 0x9b,\n\t// Block 0xc, offset 0x300\n\t0x300: 0xa1, 0x301: 0xa2, 0x302: 0xa3, 0x304: 0xa4, 0x305: 0xa5, 0x306: 0xa6, 0x307: 0xa7,\n\t0x308: 0xa8, 0x30b: 0xa9, 0x30c: 0xaa, 0x30d: 0xab,\n\t0x310: 0xac, 0x311: 0xad, 0x312: 0xae, 0x313: 0xaf, 0x316: 0xb0, 0x317: 0xb1,\n\t0x318: 0xb2, 0x319: 0xb3, 0x31a: 0xb4, 0x31c: 0xb5,\n\t0x330: 0xb6, 0x332: 0xb7,\n\t// Block 0xd, offset 0x340\n\t0x36b: 0xb8, 0x36c: 0xb9,\n\t0x37e: 0xba,\n\t// Block 0xe, offset 0x380\n\t0x3b2: 0xbb,\n\t// Block 0xf, offset 0x3c0\n\t0x3c5: 0xbc, 0x3c6: 0xbd,\n\t0x3c8: 0x54, 0x3c9: 0xbe, 0x3cc: 0x54, 0x3cd: 0xbf,\n\t0x3db: 0xc0, 0x3dc: 0xc1, 0x3dd: 0xc2, 0x3de: 0xc3, 0x3df: 0xc4,\n\t0x3e8: 0xc5, 0x3e9: 0xc6, 0x3ea: 0xc7,\n\t// Block 0x10, offset 0x400\n\t0x400: 0xc8,\n\t0x420: 0x9b, 0x421: 0x9b, 0x422: 0x9b, 0x423: 0xc9, 0x424: 0x9b, 0x425: 0xca, 0x426: 0x9b, 0x427: 0x9b,\n\t0x428: 0x9b, 0x429: 0x9b, 0x42a: 0x9b, 0x42b: 0x9b, 0x42c: 0x9b, 0x42d: 0x9b, 0x42e: 0x9b, 0x42f: 0x9b,\n\t0x430: 0x9b, 0x431: 0x9b, 0x432: 0x9b, 0x433: 0x9b, 0x434: 0x9b, 0x435: 0x9b, 0x436: 0x9b, 0x437: 0x9b,\n\t0x438: 0x0e, 0x439: 0x0e, 0x43a: 0x0e, 0x43b: 0xcb, 0x43c: 0x9b, 0x43d: 0x9b, 0x43e: 0x9b, 0x43f: 0x9b,\n\t// Block 0x11, offset 0x440\n\t0x440: 0xcc, 0x441: 0x54, 0x442: 0xcd, 0x443: 0xce, 0x444: 0xcf, 0x445: 0xd0,\n\t0x44c: 0x54, 0x44d: 0x54, 0x44e: 0x54, 0x44f: 0x54,\n\t0x450: 0x54, 0x451: 0x54, 0x452: 0x54, 0x453: 0x54, 0x454: 0x54, 0x455: 0x54, 0x456: 0x54, 0x457: 0x54,\n\t0x458: 0x54, 0x459: 0x54, 0x45a: 0x54, 0x45b: 0xd1, 0x45c: 0x54, 0x45d: 0x6c, 0x45e: 0x54, 0x45f: 0xd2,\n\t0x460: 0xd3, 0x461: 0xd4, 0x462: 0xd5, 0x464: 0xd6, 0x465: 0xd7, 0x466: 0xd8, 0x467: 0x36,\n\t0x47f: 0xd9,\n\t// Block 0x12, offset 0x480\n\t0x4bf: 0xd9,\n\t// Block 0x13, offset 0x4c0\n\t0x4d0: 0x09, 0x4d1: 0x0a, 0x4d6: 0x0b,\n\t0x4db: 0x0c, 0x4dd: 0x0d, 0x4de: 0x0e, 0x4df: 0x0f,\n\t0x4ef: 0x10,\n\t0x4ff: 0x10,\n\t// Block 0x14, offset 0x500\n\t0x50f: 0x10,\n\t0x51f: 0x10,\n\t0x52f: 0x10,\n\t0x53f: 0x10,\n\t// Block 0x15, offset 0x540\n\t0x540: 0xda, 0x541: 0xda, 0x542: 0xda, 0x543: 0xda, 0x544: 0x05, 0x545: 0x05, 0x546: 0x05, 0x547: 0xdb,\n\t0x548: 0xda, 0x549: 0xda, 0x54a: 0xda, 0x54b: 0xda, 0x54c: 0xda, 0x54d: 0xda, 0x54e: 0xda, 0x54f: 0xda,\n\t0x550: 0xda, 0x551: 0xda, 0x552: 0xda, 0x553: 0xda, 0x554: 0xda, 0x555: 0xda, 0x556: 0xda, 0x557: 0xda,\n\t0x558: 0xda, 0x559: 0xda, 0x55a: 0xda, 0x55b: 0xda, 0x55c: 0xda, 0x55d: 0xda, 0x55e: 0xda, 0x55f: 0xda,\n\t0x560: 0xda, 0x561: 0xda, 0x562: 0xda, 0x563: 0xda, 0x564: 0xda, 0x565: 0xda, 0x566: 0xda, 0x567: 0xda,\n\t0x568: 0xda, 0x569: 0xda, 0x56a: 0xda, 0x56b: 0xda, 0x56c: 0xda, 0x56d: 0xda, 0x56e: 0xda, 0x56f: 0xda,\n\t0x570: 0xda, 0x571: 0xda, 0x572: 0xda, 0x573: 0xda, 0x574: 0xda, 0x575: 0xda, 0x576: 0xda, 0x577: 0xda,\n\t0x578: 0xda, 0x579: 0xda, 0x57a: 0xda, 0x57b: 0xda, 0x57c: 0xda, 0x57d: 0xda, 0x57e: 0xda, 0x57f: 0xda,\n\t// Block 0x16, offset 0x580\n\t0x58f: 0x10,\n\t0x59f: 0x10,\n\t0x5a0: 0x13,\n\t0x5af: 0x10,\n\t0x5bf: 0x10,\n\t// Block 0x17, offset 0x5c0\n\t0x5cf: 0x10,\n}\n\n// Total table size 15800 bytes (15KiB); checksum: F50EF68C\n"
  },
  {
    "path": "vendor/golang.org/x/text/unicode/bidi/trieval.go",
    "content": "// Code generated by running \"go generate\" in golang.org/x/text. DO NOT EDIT.\n\npackage bidi\n\n// Class is the Unicode BiDi class. Each rune has a single class.\ntype Class uint\n\nconst (\n\tL       Class = iota // LeftToRight\n\tR                    // RightToLeft\n\tEN                   // EuropeanNumber\n\tES                   // EuropeanSeparator\n\tET                   // EuropeanTerminator\n\tAN                   // ArabicNumber\n\tCS                   // CommonSeparator\n\tB                    // ParagraphSeparator\n\tS                    // SegmentSeparator\n\tWS                   // WhiteSpace\n\tON                   // OtherNeutral\n\tBN                   // BoundaryNeutral\n\tNSM                  // NonspacingMark\n\tAL                   // ArabicLetter\n\tControl              // Control LRO - PDI\n\n\tnumClass\n\n\tLRO // LeftToRightOverride\n\tRLO // RightToLeftOverride\n\tLRE // LeftToRightEmbedding\n\tRLE // RightToLeftEmbedding\n\tPDF // PopDirectionalFormat\n\tLRI // LeftToRightIsolate\n\tRLI // RightToLeftIsolate\n\tFSI // FirstStrongIsolate\n\tPDI // PopDirectionalIsolate\n\n\tunknownClass = ^Class(0)\n)\n\nvar controlToClass = map[rune]Class{\n\t0x202D: LRO, // LeftToRightOverride,\n\t0x202E: RLO, // RightToLeftOverride,\n\t0x202A: LRE, // LeftToRightEmbedding,\n\t0x202B: RLE, // RightToLeftEmbedding,\n\t0x202C: PDF, // PopDirectionalFormat,\n\t0x2066: LRI, // LeftToRightIsolate,\n\t0x2067: RLI, // RightToLeftIsolate,\n\t0x2068: FSI, // FirstStrongIsolate,\n\t0x2069: PDI, // PopDirectionalIsolate,\n}\n\n// A trie entry has the following bits:\n// 7..5  XOR mask for brackets\n// 4     1: Bracket open, 0: Bracket close\n// 3..0  Class type\n\nconst (\n\topenMask     = 0x10\n\txorMaskShift = 5\n)\n"
  },
  {
    "path": "vendor/golang.org/x/text/unicode/norm/composition.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage norm\n\nimport \"unicode/utf8\"\n\nconst (\n\tmaxNonStarters = 30\n\t// The maximum number of characters needed for a buffer is\n\t// maxNonStarters + 1 for the starter + 1 for the GCJ\n\tmaxBufferSize    = maxNonStarters + 2\n\tmaxNFCExpansion  = 3  // NFC(0x1D160)\n\tmaxNFKCExpansion = 18 // NFKC(0xFDFA)\n\n\tmaxByteBufferSize = utf8.UTFMax * maxBufferSize // 128\n)\n\n// ssState is used for reporting the segment state after inserting a rune.\n// It is returned by streamSafe.next.\ntype ssState int\n\nconst (\n\t// Indicates a rune was successfully added to the segment.\n\tssSuccess ssState = iota\n\t// Indicates a rune starts a new segment and should not be added.\n\tssStarter\n\t// Indicates a rune caused a segment overflow and a CGJ should be inserted.\n\tssOverflow\n)\n\n// streamSafe implements the policy of when a CGJ should be inserted.\ntype streamSafe uint8\n\n// first inserts the first rune of a segment. It is a faster version of next if\n// it is known p represents the first rune in a segment.\nfunc (ss *streamSafe) first(p Properties) {\n\t*ss = streamSafe(p.nTrailingNonStarters())\n}\n\n// insert returns a ssState value to indicate whether a rune represented by p\n// can be inserted.\nfunc (ss *streamSafe) next(p Properties) ssState {\n\tif *ss > maxNonStarters {\n\t\tpanic(\"streamSafe was not reset\")\n\t}\n\tn := p.nLeadingNonStarters()\n\tif *ss += streamSafe(n); *ss > maxNonStarters {\n\t\t*ss = 0\n\t\treturn ssOverflow\n\t}\n\t// The Stream-Safe Text Processing prescribes that the counting can stop\n\t// as soon as a starter is encountered. However, there are some starters,\n\t// like Jamo V and T, that can combine with other runes, leaving their\n\t// successive non-starters appended to the previous, possibly causing an\n\t// overflow. We will therefore consider any rune with a non-zero nLead to\n\t// be a non-starter. Note that it always hold that if nLead > 0 then\n\t// nLead == nTrail.\n\tif n == 0 {\n\t\t*ss = streamSafe(p.nTrailingNonStarters())\n\t\treturn ssStarter\n\t}\n\treturn ssSuccess\n}\n\n// backwards is used for checking for overflow and segment starts\n// when traversing a string backwards. Users do not need to call first\n// for the first rune. The state of the streamSafe retains the count of\n// the non-starters loaded.\nfunc (ss *streamSafe) backwards(p Properties) ssState {\n\tif *ss > maxNonStarters {\n\t\tpanic(\"streamSafe was not reset\")\n\t}\n\tc := *ss + streamSafe(p.nTrailingNonStarters())\n\tif c > maxNonStarters {\n\t\treturn ssOverflow\n\t}\n\t*ss = c\n\tif p.nLeadingNonStarters() == 0 {\n\t\treturn ssStarter\n\t}\n\treturn ssSuccess\n}\n\nfunc (ss streamSafe) isMax() bool {\n\treturn ss == maxNonStarters\n}\n\n// GraphemeJoiner is inserted after maxNonStarters non-starter runes.\nconst GraphemeJoiner = \"\\u034F\"\n\n// reorderBuffer is used to normalize a single segment.  Characters inserted with\n// insert are decomposed and reordered based on CCC. The compose method can\n// be used to recombine characters.  Note that the byte buffer does not hold\n// the UTF-8 characters in order.  Only the rune array is maintained in sorted\n// order. flush writes the resulting segment to a byte array.\ntype reorderBuffer struct {\n\trune  [maxBufferSize]Properties // Per character info.\n\tbyte  [maxByteBufferSize]byte   // UTF-8 buffer. Referenced by runeInfo.pos.\n\tnbyte uint8                     // Number or bytes.\n\tss    streamSafe                // For limiting length of non-starter sequence.\n\tnrune int                       // Number of runeInfos.\n\tf     formInfo\n\n\tsrc      input\n\tnsrc     int\n\ttmpBytes input\n\n\tout    []byte\n\tflushF func(*reorderBuffer) bool\n}\n\nfunc (rb *reorderBuffer) init(f Form, src []byte) {\n\trb.f = *formTable[f]\n\trb.src.setBytes(src)\n\trb.nsrc = len(src)\n\trb.ss = 0\n}\n\nfunc (rb *reorderBuffer) initString(f Form, src string) {\n\trb.f = *formTable[f]\n\trb.src.setString(src)\n\trb.nsrc = len(src)\n\trb.ss = 0\n}\n\nfunc (rb *reorderBuffer) setFlusher(out []byte, f func(*reorderBuffer) bool) {\n\trb.out = out\n\trb.flushF = f\n}\n\n// reset discards all characters from the buffer.\nfunc (rb *reorderBuffer) reset() {\n\trb.nrune = 0\n\trb.nbyte = 0\n}\n\nfunc (rb *reorderBuffer) doFlush() bool {\n\tif rb.f.composing {\n\t\trb.compose()\n\t}\n\tres := rb.flushF(rb)\n\trb.reset()\n\treturn res\n}\n\n// appendFlush appends the normalized segment to rb.out.\nfunc appendFlush(rb *reorderBuffer) bool {\n\tfor i := 0; i < rb.nrune; i++ {\n\t\tstart := rb.rune[i].pos\n\t\tend := start + rb.rune[i].size\n\t\trb.out = append(rb.out, rb.byte[start:end]...)\n\t}\n\treturn true\n}\n\n// flush appends the normalized segment to out and resets rb.\nfunc (rb *reorderBuffer) flush(out []byte) []byte {\n\tfor i := 0; i < rb.nrune; i++ {\n\t\tstart := rb.rune[i].pos\n\t\tend := start + rb.rune[i].size\n\t\tout = append(out, rb.byte[start:end]...)\n\t}\n\trb.reset()\n\treturn out\n}\n\n// flushCopy copies the normalized segment to buf and resets rb.\n// It returns the number of bytes written to buf.\nfunc (rb *reorderBuffer) flushCopy(buf []byte) int {\n\tp := 0\n\tfor i := 0; i < rb.nrune; i++ {\n\t\trunep := rb.rune[i]\n\t\tp += copy(buf[p:], rb.byte[runep.pos:runep.pos+runep.size])\n\t}\n\trb.reset()\n\treturn p\n}\n\n// insertOrdered inserts a rune in the buffer, ordered by Canonical Combining Class.\n// It returns false if the buffer is not large enough to hold the rune.\n// It is used internally by insert and insertString only.\nfunc (rb *reorderBuffer) insertOrdered(info Properties) {\n\tn := rb.nrune\n\tb := rb.rune[:]\n\tcc := info.ccc\n\tif cc > 0 {\n\t\t// Find insertion position + move elements to make room.\n\t\tfor ; n > 0; n-- {\n\t\t\tif b[n-1].ccc <= cc {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tb[n] = b[n-1]\n\t\t}\n\t}\n\trb.nrune += 1\n\tpos := uint8(rb.nbyte)\n\trb.nbyte += utf8.UTFMax\n\tinfo.pos = pos\n\tb[n] = info\n}\n\n// insertErr is an error code returned by insert. Using this type instead\n// of error improves performance up to 20% for many of the benchmarks.\ntype insertErr int\n\nconst (\n\tiSuccess insertErr = -iota\n\tiShortDst\n\tiShortSrc\n)\n\n// insertFlush inserts the given rune in the buffer ordered by CCC.\n// If a decomposition with multiple segments are encountered, they leading\n// ones are flushed.\n// It returns a non-zero error code if the rune was not inserted.\nfunc (rb *reorderBuffer) insertFlush(src input, i int, info Properties) insertErr {\n\tif rune := src.hangul(i); rune != 0 {\n\t\trb.decomposeHangul(rune)\n\t\treturn iSuccess\n\t}\n\tif info.hasDecomposition() {\n\t\treturn rb.insertDecomposed(info.Decomposition())\n\t}\n\trb.insertSingle(src, i, info)\n\treturn iSuccess\n}\n\n// insertUnsafe inserts the given rune in the buffer ordered by CCC.\n// It is assumed there is sufficient space to hold the runes. It is the\n// responsibility of the caller to ensure this. This can be done by checking\n// the state returned by the streamSafe type.\nfunc (rb *reorderBuffer) insertUnsafe(src input, i int, info Properties) {\n\tif rune := src.hangul(i); rune != 0 {\n\t\trb.decomposeHangul(rune)\n\t}\n\tif info.hasDecomposition() {\n\t\t// TODO: inline.\n\t\trb.insertDecomposed(info.Decomposition())\n\t} else {\n\t\trb.insertSingle(src, i, info)\n\t}\n}\n\n// insertDecomposed inserts an entry in to the reorderBuffer for each rune\n// in dcomp. dcomp must be a sequence of decomposed UTF-8-encoded runes.\n// It flushes the buffer on each new segment start.\nfunc (rb *reorderBuffer) insertDecomposed(dcomp []byte) insertErr {\n\trb.tmpBytes.setBytes(dcomp)\n\t// As the streamSafe accounting already handles the counting for modifiers,\n\t// we don't have to call next. However, we do need to keep the accounting\n\t// intact when flushing the buffer.\n\tfor i := 0; i < len(dcomp); {\n\t\tinfo := rb.f.info(rb.tmpBytes, i)\n\t\tif info.BoundaryBefore() && rb.nrune > 0 && !rb.doFlush() {\n\t\t\treturn iShortDst\n\t\t}\n\t\ti += copy(rb.byte[rb.nbyte:], dcomp[i:i+int(info.size)])\n\t\trb.insertOrdered(info)\n\t}\n\treturn iSuccess\n}\n\n// insertSingle inserts an entry in the reorderBuffer for the rune at\n// position i. info is the runeInfo for the rune at position i.\nfunc (rb *reorderBuffer) insertSingle(src input, i int, info Properties) {\n\tsrc.copySlice(rb.byte[rb.nbyte:], i, i+int(info.size))\n\trb.insertOrdered(info)\n}\n\n// insertCGJ inserts a Combining Grapheme Joiner (0x034f) into rb.\nfunc (rb *reorderBuffer) insertCGJ() {\n\trb.insertSingle(input{str: GraphemeJoiner}, 0, Properties{size: uint8(len(GraphemeJoiner))})\n}\n\n// appendRune inserts a rune at the end of the buffer. It is used for Hangul.\nfunc (rb *reorderBuffer) appendRune(r rune) {\n\tbn := rb.nbyte\n\tsz := utf8.EncodeRune(rb.byte[bn:], rune(r))\n\trb.nbyte += utf8.UTFMax\n\trb.rune[rb.nrune] = Properties{pos: bn, size: uint8(sz)}\n\trb.nrune++\n}\n\n// assignRune sets a rune at position pos. It is used for Hangul and recomposition.\nfunc (rb *reorderBuffer) assignRune(pos int, r rune) {\n\tbn := rb.rune[pos].pos\n\tsz := utf8.EncodeRune(rb.byte[bn:], rune(r))\n\trb.rune[pos] = Properties{pos: bn, size: uint8(sz)}\n}\n\n// runeAt returns the rune at position n. It is used for Hangul and recomposition.\nfunc (rb *reorderBuffer) runeAt(n int) rune {\n\tinf := rb.rune[n]\n\tr, _ := utf8.DecodeRune(rb.byte[inf.pos : inf.pos+inf.size])\n\treturn r\n}\n\n// bytesAt returns the UTF-8 encoding of the rune at position n.\n// It is used for Hangul and recomposition.\nfunc (rb *reorderBuffer) bytesAt(n int) []byte {\n\tinf := rb.rune[n]\n\treturn rb.byte[inf.pos : int(inf.pos)+int(inf.size)]\n}\n\n// For Hangul we combine algorithmically, instead of using tables.\nconst (\n\thangulBase  = 0xAC00 // UTF-8(hangulBase) -> EA B0 80\n\thangulBase0 = 0xEA\n\thangulBase1 = 0xB0\n\thangulBase2 = 0x80\n\n\thangulEnd  = hangulBase + jamoLVTCount // UTF-8(0xD7A4) -> ED 9E A4\n\thangulEnd0 = 0xED\n\thangulEnd1 = 0x9E\n\thangulEnd2 = 0xA4\n\n\tjamoLBase  = 0x1100 // UTF-8(jamoLBase) -> E1 84 00\n\tjamoLBase0 = 0xE1\n\tjamoLBase1 = 0x84\n\tjamoLEnd   = 0x1113\n\tjamoVBase  = 0x1161\n\tjamoVEnd   = 0x1176\n\tjamoTBase  = 0x11A7\n\tjamoTEnd   = 0x11C3\n\n\tjamoTCount   = 28\n\tjamoVCount   = 21\n\tjamoVTCount  = 21 * 28\n\tjamoLVTCount = 19 * 21 * 28\n)\n\nconst hangulUTF8Size = 3\n\nfunc isHangul(b []byte) bool {\n\tif len(b) < hangulUTF8Size {\n\t\treturn false\n\t}\n\tb0 := b[0]\n\tif b0 < hangulBase0 {\n\t\treturn false\n\t}\n\tb1 := b[1]\n\tswitch {\n\tcase b0 == hangulBase0:\n\t\treturn b1 >= hangulBase1\n\tcase b0 < hangulEnd0:\n\t\treturn true\n\tcase b0 > hangulEnd0:\n\t\treturn false\n\tcase b1 < hangulEnd1:\n\t\treturn true\n\t}\n\treturn b1 == hangulEnd1 && b[2] < hangulEnd2\n}\n\nfunc isHangulString(b string) bool {\n\tif len(b) < hangulUTF8Size {\n\t\treturn false\n\t}\n\tb0 := b[0]\n\tif b0 < hangulBase0 {\n\t\treturn false\n\t}\n\tb1 := b[1]\n\tswitch {\n\tcase b0 == hangulBase0:\n\t\treturn b1 >= hangulBase1\n\tcase b0 < hangulEnd0:\n\t\treturn true\n\tcase b0 > hangulEnd0:\n\t\treturn false\n\tcase b1 < hangulEnd1:\n\t\treturn true\n\t}\n\treturn b1 == hangulEnd1 && b[2] < hangulEnd2\n}\n\n// Caller must ensure len(b) >= 2.\nfunc isJamoVT(b []byte) bool {\n\t// True if (rune & 0xff00) == jamoLBase\n\treturn b[0] == jamoLBase0 && (b[1]&0xFC) == jamoLBase1\n}\n\nfunc isHangulWithoutJamoT(b []byte) bool {\n\tc, _ := utf8.DecodeRune(b)\n\tc -= hangulBase\n\treturn c < jamoLVTCount && c%jamoTCount == 0\n}\n\n// decomposeHangul writes the decomposed Hangul to buf and returns the number\n// of bytes written.  len(buf) should be at least 9.\nfunc decomposeHangul(buf []byte, r rune) int {\n\tconst JamoUTF8Len = 3\n\tr -= hangulBase\n\tx := r % jamoTCount\n\tr /= jamoTCount\n\tutf8.EncodeRune(buf, jamoLBase+r/jamoVCount)\n\tutf8.EncodeRune(buf[JamoUTF8Len:], jamoVBase+r%jamoVCount)\n\tif x != 0 {\n\t\tutf8.EncodeRune(buf[2*JamoUTF8Len:], jamoTBase+x)\n\t\treturn 3 * JamoUTF8Len\n\t}\n\treturn 2 * JamoUTF8Len\n}\n\n// decomposeHangul algorithmically decomposes a Hangul rune into\n// its Jamo components.\n// See https://unicode.org/reports/tr15/#Hangul for details on decomposing Hangul.\nfunc (rb *reorderBuffer) decomposeHangul(r rune) {\n\tr -= hangulBase\n\tx := r % jamoTCount\n\tr /= jamoTCount\n\trb.appendRune(jamoLBase + r/jamoVCount)\n\trb.appendRune(jamoVBase + r%jamoVCount)\n\tif x != 0 {\n\t\trb.appendRune(jamoTBase + x)\n\t}\n}\n\n// combineHangul algorithmically combines Jamo character components into Hangul.\n// See https://unicode.org/reports/tr15/#Hangul for details on combining Hangul.\nfunc (rb *reorderBuffer) combineHangul(s, i, k int) {\n\tb := rb.rune[:]\n\tbn := rb.nrune\n\tfor ; i < bn; i++ {\n\t\tcccB := b[k-1].ccc\n\t\tcccC := b[i].ccc\n\t\tif cccB == 0 {\n\t\t\ts = k - 1\n\t\t}\n\t\tif s != k-1 && cccB >= cccC {\n\t\t\t// b[i] is blocked by greater-equal cccX below it\n\t\t\tb[k] = b[i]\n\t\t\tk++\n\t\t} else {\n\t\t\tl := rb.runeAt(s) // also used to compare to hangulBase\n\t\t\tv := rb.runeAt(i) // also used to compare to jamoT\n\t\t\tswitch {\n\t\t\tcase jamoLBase <= l && l < jamoLEnd &&\n\t\t\t\tjamoVBase <= v && v < jamoVEnd:\n\t\t\t\t// 11xx plus 116x to LV\n\t\t\t\trb.assignRune(s, hangulBase+\n\t\t\t\t\t(l-jamoLBase)*jamoVTCount+(v-jamoVBase)*jamoTCount)\n\t\t\tcase hangulBase <= l && l < hangulEnd &&\n\t\t\t\tjamoTBase < v && v < jamoTEnd &&\n\t\t\t\t((l-hangulBase)%jamoTCount) == 0:\n\t\t\t\t// ACxx plus 11Ax to LVT\n\t\t\t\trb.assignRune(s, l+v-jamoTBase)\n\t\t\tdefault:\n\t\t\t\tb[k] = b[i]\n\t\t\t\tk++\n\t\t\t}\n\t\t}\n\t}\n\trb.nrune = k\n}\n\n// compose recombines the runes in the buffer.\n// It should only be used to recompose a single segment, as it will not\n// handle alternations between Hangul and non-Hangul characters correctly.\nfunc (rb *reorderBuffer) compose() {\n\t// Lazily load the map used by the combine func below, but do\n\t// it outside of the loop.\n\trecompMapOnce.Do(buildRecompMap)\n\n\t// UAX #15, section X5 , including Corrigendum #5\n\t// \"In any character sequence beginning with starter S, a character C is\n\t//  blocked from S if and only if there is some character B between S\n\t//  and C, and either B is a starter or it has the same or higher\n\t//  combining class as C.\"\n\tbn := rb.nrune\n\tif bn == 0 {\n\t\treturn\n\t}\n\tk := 1\n\tb := rb.rune[:]\n\tfor s, i := 0, 1; i < bn; i++ {\n\t\tif isJamoVT(rb.bytesAt(i)) {\n\t\t\t// Redo from start in Hangul mode. Necessary to support\n\t\t\t// U+320E..U+321E in NFKC mode.\n\t\t\trb.combineHangul(s, i, k)\n\t\t\treturn\n\t\t}\n\t\tii := b[i]\n\t\t// We can only use combineForward as a filter if we later\n\t\t// get the info for the combined character. This is more\n\t\t// expensive than using the filter. Using combinesBackward()\n\t\t// is safe.\n\t\tif ii.combinesBackward() {\n\t\t\tcccB := b[k-1].ccc\n\t\t\tcccC := ii.ccc\n\t\t\tblocked := false // b[i] blocked by starter or greater or equal CCC?\n\t\t\tif cccB == 0 {\n\t\t\t\ts = k - 1\n\t\t\t} else {\n\t\t\t\tblocked = s != k-1 && cccB >= cccC\n\t\t\t}\n\t\t\tif !blocked {\n\t\t\t\tcombined := combine(rb.runeAt(s), rb.runeAt(i))\n\t\t\t\tif combined != 0 {\n\t\t\t\t\trb.assignRune(s, combined)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tb[k] = b[i]\n\t\tk++\n\t}\n\trb.nrune = k\n}\n"
  },
  {
    "path": "vendor/golang.org/x/text/unicode/norm/forminfo.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage norm\n\nimport \"encoding/binary\"\n\n// This file contains Form-specific logic and wrappers for data in tables.go.\n\n// Rune info is stored in a separate trie per composing form. A composing form\n// and its corresponding decomposing form share the same trie.  Each trie maps\n// a rune to a uint16. The values take two forms.  For v >= 0x8000:\n//   bits\n//   15:    1 (inverse of NFD_QC bit of qcInfo)\n//   13..7: qcInfo (see below). isYesD is always true (no decompostion).\n//    6..0: ccc (compressed CCC value).\n// For v < 0x8000, the respective rune has a decomposition and v is an index\n// into a byte array of UTF-8 decomposition sequences and additional info and\n// has the form:\n//    <header> <decomp_byte>* [<tccc> [<lccc>]]\n// The header contains the number of bytes in the decomposition (excluding this\n// length byte). The two most significant bits of this length byte correspond\n// to bit 5 and 4 of qcInfo (see below).  The byte sequence itself starts at v+1.\n// The byte sequence is followed by a trailing and leading CCC if the values\n// for these are not zero.  The value of v determines which ccc are appended\n// to the sequences.  For v < firstCCC, there are none, for v >= firstCCC,\n// the sequence is followed by a trailing ccc, and for v >= firstLeadingCC\n// there is an additional leading ccc. The value of tccc itself is the\n// trailing CCC shifted left 2 bits. The two least-significant bits of tccc\n// are the number of trailing non-starters.\n\nconst (\n\tqcInfoMask      = 0x3F // to clear all but the relevant bits in a qcInfo\n\theaderLenMask   = 0x3F // extract the length value from the header byte\n\theaderFlagsMask = 0xC0 // extract the qcInfo bits from the header byte\n)\n\n// Properties provides access to normalization properties of a rune.\ntype Properties struct {\n\tpos   uint8  // start position in reorderBuffer; used in composition.go\n\tsize  uint8  // length of UTF-8 encoding of this rune\n\tccc   uint8  // leading canonical combining class (ccc if not decomposition)\n\ttccc  uint8  // trailing canonical combining class (ccc if not decomposition)\n\tnLead uint8  // number of leading non-starters.\n\tflags qcInfo // quick check flags\n\tindex uint16\n}\n\n// functions dispatchable per form\ntype lookupFunc func(b input, i int) Properties\n\n// formInfo holds Form-specific functions and tables.\ntype formInfo struct {\n\tform                     Form\n\tcomposing, compatibility bool // form type\n\tinfo                     lookupFunc\n\tnextMain                 iterFunc\n}\n\nvar formTable = []*formInfo{{\n\tform:          NFC,\n\tcomposing:     true,\n\tcompatibility: false,\n\tinfo:          lookupInfoNFC,\n\tnextMain:      nextComposed,\n}, {\n\tform:          NFD,\n\tcomposing:     false,\n\tcompatibility: false,\n\tinfo:          lookupInfoNFC,\n\tnextMain:      nextDecomposed,\n}, {\n\tform:          NFKC,\n\tcomposing:     true,\n\tcompatibility: true,\n\tinfo:          lookupInfoNFKC,\n\tnextMain:      nextComposed,\n}, {\n\tform:          NFKD,\n\tcomposing:     false,\n\tcompatibility: true,\n\tinfo:          lookupInfoNFKC,\n\tnextMain:      nextDecomposed,\n}}\n\n// We do not distinguish between boundaries for NFC, NFD, etc. to avoid\n// unexpected behavior for the user.  For example, in NFD, there is a boundary\n// after 'a'.  However, 'a' might combine with modifiers, so from the application's\n// perspective it is not a good boundary. We will therefore always use the\n// boundaries for the combining variants.\n\n// BoundaryBefore returns true if this rune starts a new segment and\n// cannot combine with any rune on the left.\nfunc (p Properties) BoundaryBefore() bool {\n\tif p.ccc == 0 && !p.combinesBackward() {\n\t\treturn true\n\t}\n\t// We assume that the CCC of the first character in a decomposition\n\t// is always non-zero if different from info.ccc and that we can return\n\t// false at this point. This is verified by maketables.\n\treturn false\n}\n\n// BoundaryAfter returns true if runes cannot combine with or otherwise\n// interact with this or previous runes.\nfunc (p Properties) BoundaryAfter() bool {\n\t// TODO: loosen these conditions.\n\treturn p.isInert()\n}\n\n// We pack quick check data in 4 bits:\n//   5:    Combines forward  (0 == false, 1 == true)\n//   4..3: NFC_QC Yes(00), No (10), or Maybe (11)\n//   2:    NFD_QC Yes (0) or No (1). No also means there is a decomposition.\n//   1..0: Number of trailing non-starters.\n//\n// When all 4 bits are zero, the character is inert, meaning it is never\n// influenced by normalization.\ntype qcInfo uint8\n\nfunc (p Properties) isYesC() bool { return p.flags&0x10 == 0 }\nfunc (p Properties) isYesD() bool { return p.flags&0x4 == 0 }\n\nfunc (p Properties) combinesForward() bool  { return p.flags&0x20 != 0 }\nfunc (p Properties) combinesBackward() bool { return p.flags&0x8 != 0 } // == isMaybe\nfunc (p Properties) hasDecomposition() bool { return p.flags&0x4 != 0 } // == isNoD\n\nfunc (p Properties) isInert() bool {\n\treturn p.flags&qcInfoMask == 0 && p.ccc == 0\n}\n\nfunc (p Properties) multiSegment() bool {\n\treturn p.index >= firstMulti && p.index < endMulti\n}\n\nfunc (p Properties) nLeadingNonStarters() uint8 {\n\treturn p.nLead\n}\n\nfunc (p Properties) nTrailingNonStarters() uint8 {\n\treturn uint8(p.flags & 0x03)\n}\n\n// Decomposition returns the decomposition for the underlying rune\n// or nil if there is none.\nfunc (p Properties) Decomposition() []byte {\n\t// TODO: create the decomposition for Hangul?\n\tif p.index == 0 {\n\t\treturn nil\n\t}\n\ti := p.index\n\tn := decomps[i] & headerLenMask\n\ti++\n\treturn decomps[i : i+uint16(n)]\n}\n\n// Size returns the length of UTF-8 encoding of the rune.\nfunc (p Properties) Size() int {\n\treturn int(p.size)\n}\n\n// CCC returns the canonical combining class of the underlying rune.\nfunc (p Properties) CCC() uint8 {\n\tif p.index >= firstCCCZeroExcept {\n\t\treturn 0\n\t}\n\treturn ccc[p.ccc]\n}\n\n// LeadCCC returns the CCC of the first rune in the decomposition.\n// If there is no decomposition, LeadCCC equals CCC.\nfunc (p Properties) LeadCCC() uint8 {\n\treturn ccc[p.ccc]\n}\n\n// TrailCCC returns the CCC of the last rune in the decomposition.\n// If there is no decomposition, TrailCCC equals CCC.\nfunc (p Properties) TrailCCC() uint8 {\n\treturn ccc[p.tccc]\n}\n\nfunc buildRecompMap() {\n\trecompMap = make(map[uint32]rune, len(recompMapPacked)/8)\n\tvar buf [8]byte\n\tfor i := 0; i < len(recompMapPacked); i += 8 {\n\t\tcopy(buf[:], recompMapPacked[i:i+8])\n\t\tkey := binary.BigEndian.Uint32(buf[:4])\n\t\tval := binary.BigEndian.Uint32(buf[4:])\n\t\trecompMap[key] = rune(val)\n\t}\n}\n\n// Recomposition\n// We use 32-bit keys instead of 64-bit for the two codepoint keys.\n// This clips off the bits of three entries, but we know this will not\n// result in a collision. In the unlikely event that changes to\n// UnicodeData.txt introduce collisions, the compiler will catch it.\n// Note that the recomposition map for NFC and NFKC are identical.\n\n// combine returns the combined rune or 0 if it doesn't exist.\n//\n// The caller is responsible for calling\n// recompMapOnce.Do(buildRecompMap) sometime before this is called.\nfunc combine(a, b rune) rune {\n\tkey := uint32(uint16(a))<<16 + uint32(uint16(b))\n\tif recompMap == nil {\n\t\tpanic(\"caller error\") // see func comment\n\t}\n\treturn recompMap[key]\n}\n\nfunc lookupInfoNFC(b input, i int) Properties {\n\tv, sz := b.charinfoNFC(i)\n\treturn compInfo(v, sz)\n}\n\nfunc lookupInfoNFKC(b input, i int) Properties {\n\tv, sz := b.charinfoNFKC(i)\n\treturn compInfo(v, sz)\n}\n\n// Properties returns properties for the first rune in s.\nfunc (f Form) Properties(s []byte) Properties {\n\tif f == NFC || f == NFD {\n\t\treturn compInfo(nfcData.lookup(s))\n\t}\n\treturn compInfo(nfkcData.lookup(s))\n}\n\n// PropertiesString returns properties for the first rune in s.\nfunc (f Form) PropertiesString(s string) Properties {\n\tif f == NFC || f == NFD {\n\t\treturn compInfo(nfcData.lookupString(s))\n\t}\n\treturn compInfo(nfkcData.lookupString(s))\n}\n\n// compInfo converts the information contained in v and sz\n// to a Properties.  See the comment at the top of the file\n// for more information on the format.\nfunc compInfo(v uint16, sz int) Properties {\n\tif v == 0 {\n\t\treturn Properties{size: uint8(sz)}\n\t} else if v >= 0x8000 {\n\t\tp := Properties{\n\t\t\tsize:  uint8(sz),\n\t\t\tccc:   uint8(v),\n\t\t\ttccc:  uint8(v),\n\t\t\tflags: qcInfo(v >> 8),\n\t\t}\n\t\tif p.ccc > 0 || p.combinesBackward() {\n\t\t\tp.nLead = uint8(p.flags & 0x3)\n\t\t}\n\t\treturn p\n\t}\n\t// has decomposition\n\th := decomps[v]\n\tf := (qcInfo(h&headerFlagsMask) >> 2) | 0x4\n\tp := Properties{size: uint8(sz), flags: f, index: v}\n\tif v >= firstCCC {\n\t\tv += uint16(h&headerLenMask) + 1\n\t\tc := decomps[v]\n\t\tp.tccc = c >> 2\n\t\tp.flags |= qcInfo(c & 0x3)\n\t\tif v >= firstLeadingCCC {\n\t\t\tp.nLead = c & 0x3\n\t\t\tif v >= firstStarterWithNLead {\n\t\t\t\t// We were tricked. Remove the decomposition.\n\t\t\t\tp.flags &= 0x03\n\t\t\t\tp.index = 0\n\t\t\t\treturn p\n\t\t\t}\n\t\t\tp.ccc = decomps[v+1]\n\t\t}\n\t}\n\treturn p\n}\n"
  },
  {
    "path": "vendor/golang.org/x/text/unicode/norm/input.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage norm\n\nimport \"unicode/utf8\"\n\ntype input struct {\n\tstr   string\n\tbytes []byte\n}\n\nfunc inputBytes(str []byte) input {\n\treturn input{bytes: str}\n}\n\nfunc inputString(str string) input {\n\treturn input{str: str}\n}\n\nfunc (in *input) setBytes(str []byte) {\n\tin.str = \"\"\n\tin.bytes = str\n}\n\nfunc (in *input) setString(str string) {\n\tin.str = str\n\tin.bytes = nil\n}\n\nfunc (in *input) _byte(p int) byte {\n\tif in.bytes == nil {\n\t\treturn in.str[p]\n\t}\n\treturn in.bytes[p]\n}\n\nfunc (in *input) skipASCII(p, max int) int {\n\tif in.bytes == nil {\n\t\tfor ; p < max && in.str[p] < utf8.RuneSelf; p++ {\n\t\t}\n\t} else {\n\t\tfor ; p < max && in.bytes[p] < utf8.RuneSelf; p++ {\n\t\t}\n\t}\n\treturn p\n}\n\nfunc (in *input) skipContinuationBytes(p int) int {\n\tif in.bytes == nil {\n\t\tfor ; p < len(in.str) && !utf8.RuneStart(in.str[p]); p++ {\n\t\t}\n\t} else {\n\t\tfor ; p < len(in.bytes) && !utf8.RuneStart(in.bytes[p]); p++ {\n\t\t}\n\t}\n\treturn p\n}\n\nfunc (in *input) appendSlice(buf []byte, b, e int) []byte {\n\tif in.bytes != nil {\n\t\treturn append(buf, in.bytes[b:e]...)\n\t}\n\tfor i := b; i < e; i++ {\n\t\tbuf = append(buf, in.str[i])\n\t}\n\treturn buf\n}\n\nfunc (in *input) copySlice(buf []byte, b, e int) int {\n\tif in.bytes == nil {\n\t\treturn copy(buf, in.str[b:e])\n\t}\n\treturn copy(buf, in.bytes[b:e])\n}\n\nfunc (in *input) charinfoNFC(p int) (uint16, int) {\n\tif in.bytes == nil {\n\t\treturn nfcData.lookupString(in.str[p:])\n\t}\n\treturn nfcData.lookup(in.bytes[p:])\n}\n\nfunc (in *input) charinfoNFKC(p int) (uint16, int) {\n\tif in.bytes == nil {\n\t\treturn nfkcData.lookupString(in.str[p:])\n\t}\n\treturn nfkcData.lookup(in.bytes[p:])\n}\n\nfunc (in *input) hangul(p int) (r rune) {\n\tvar size int\n\tif in.bytes == nil {\n\t\tif !isHangulString(in.str[p:]) {\n\t\t\treturn 0\n\t\t}\n\t\tr, size = utf8.DecodeRuneInString(in.str[p:])\n\t} else {\n\t\tif !isHangul(in.bytes[p:]) {\n\t\t\treturn 0\n\t\t}\n\t\tr, size = utf8.DecodeRune(in.bytes[p:])\n\t}\n\tif size != hangulUTF8Size {\n\t\treturn 0\n\t}\n\treturn r\n}\n"
  },
  {
    "path": "vendor/golang.org/x/text/unicode/norm/iter.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage norm\n\nimport (\n\t\"fmt\"\n\t\"unicode/utf8\"\n)\n\n// MaxSegmentSize is the maximum size of a byte buffer needed to consider any\n// sequence of starter and non-starter runes for the purpose of normalization.\nconst MaxSegmentSize = maxByteBufferSize\n\n// An Iter iterates over a string or byte slice, while normalizing it\n// to a given Form.\ntype Iter struct {\n\trb     reorderBuffer\n\tbuf    [maxByteBufferSize]byte\n\tinfo   Properties // first character saved from previous iteration\n\tnext   iterFunc   // implementation of next depends on form\n\tasciiF iterFunc\n\n\tp        int    // current position in input source\n\tmultiSeg []byte // remainder of multi-segment decomposition\n}\n\ntype iterFunc func(*Iter) []byte\n\n// Init initializes i to iterate over src after normalizing it to Form f.\nfunc (i *Iter) Init(f Form, src []byte) {\n\ti.p = 0\n\tif len(src) == 0 {\n\t\ti.setDone()\n\t\ti.rb.nsrc = 0\n\t\treturn\n\t}\n\ti.multiSeg = nil\n\ti.rb.init(f, src)\n\ti.next = i.rb.f.nextMain\n\ti.asciiF = nextASCIIBytes\n\ti.info = i.rb.f.info(i.rb.src, i.p)\n\ti.rb.ss.first(i.info)\n}\n\n// InitString initializes i to iterate over src after normalizing it to Form f.\nfunc (i *Iter) InitString(f Form, src string) {\n\ti.p = 0\n\tif len(src) == 0 {\n\t\ti.setDone()\n\t\ti.rb.nsrc = 0\n\t\treturn\n\t}\n\ti.multiSeg = nil\n\ti.rb.initString(f, src)\n\ti.next = i.rb.f.nextMain\n\ti.asciiF = nextASCIIString\n\ti.info = i.rb.f.info(i.rb.src, i.p)\n\ti.rb.ss.first(i.info)\n}\n\n// Seek sets the segment to be returned by the next call to Next to start\n// at position p.  It is the responsibility of the caller to set p to the\n// start of a segment.\nfunc (i *Iter) Seek(offset int64, whence int) (int64, error) {\n\tvar abs int64\n\tswitch whence {\n\tcase 0:\n\t\tabs = offset\n\tcase 1:\n\t\tabs = int64(i.p) + offset\n\tcase 2:\n\t\tabs = int64(i.rb.nsrc) + offset\n\tdefault:\n\t\treturn 0, fmt.Errorf(\"norm: invalid whence\")\n\t}\n\tif abs < 0 {\n\t\treturn 0, fmt.Errorf(\"norm: negative position\")\n\t}\n\tif int(abs) >= i.rb.nsrc {\n\t\ti.setDone()\n\t\treturn int64(i.p), nil\n\t}\n\ti.p = int(abs)\n\ti.multiSeg = nil\n\ti.next = i.rb.f.nextMain\n\ti.info = i.rb.f.info(i.rb.src, i.p)\n\ti.rb.ss.first(i.info)\n\treturn abs, nil\n}\n\n// returnSlice returns a slice of the underlying input type as a byte slice.\n// If the underlying is of type []byte, it will simply return a slice.\n// If the underlying is of type string, it will copy the slice to the buffer\n// and return that.\nfunc (i *Iter) returnSlice(a, b int) []byte {\n\tif i.rb.src.bytes == nil {\n\t\treturn i.buf[:copy(i.buf[:], i.rb.src.str[a:b])]\n\t}\n\treturn i.rb.src.bytes[a:b]\n}\n\n// Pos returns the byte position at which the next call to Next will commence processing.\nfunc (i *Iter) Pos() int {\n\treturn i.p\n}\n\nfunc (i *Iter) setDone() {\n\ti.next = nextDone\n\ti.p = i.rb.nsrc\n}\n\n// Done returns true if there is no more input to process.\nfunc (i *Iter) Done() bool {\n\treturn i.p >= i.rb.nsrc\n}\n\n// Next returns f(i.input[i.Pos():n]), where n is a boundary of i.input.\n// For any input a and b for which f(a) == f(b), subsequent calls\n// to Next will return the same segments.\n// Modifying runes are grouped together with the preceding starter, if such a starter exists.\n// Although not guaranteed, n will typically be the smallest possible n.\nfunc (i *Iter) Next() []byte {\n\treturn i.next(i)\n}\n\nfunc nextASCIIBytes(i *Iter) []byte {\n\tp := i.p + 1\n\tif p >= i.rb.nsrc {\n\t\tp0 := i.p\n\t\ti.setDone()\n\t\treturn i.rb.src.bytes[p0:p]\n\t}\n\tif i.rb.src.bytes[p] < utf8.RuneSelf {\n\t\tp0 := i.p\n\t\ti.p = p\n\t\treturn i.rb.src.bytes[p0:p]\n\t}\n\ti.info = i.rb.f.info(i.rb.src, i.p)\n\ti.next = i.rb.f.nextMain\n\treturn i.next(i)\n}\n\nfunc nextASCIIString(i *Iter) []byte {\n\tp := i.p + 1\n\tif p >= i.rb.nsrc {\n\t\ti.buf[0] = i.rb.src.str[i.p]\n\t\ti.setDone()\n\t\treturn i.buf[:1]\n\t}\n\tif i.rb.src.str[p] < utf8.RuneSelf {\n\t\ti.buf[0] = i.rb.src.str[i.p]\n\t\ti.p = p\n\t\treturn i.buf[:1]\n\t}\n\ti.info = i.rb.f.info(i.rb.src, i.p)\n\ti.next = i.rb.f.nextMain\n\treturn i.next(i)\n}\n\nfunc nextHangul(i *Iter) []byte {\n\tp := i.p\n\tnext := p + hangulUTF8Size\n\tif next >= i.rb.nsrc {\n\t\ti.setDone()\n\t} else if i.rb.src.hangul(next) == 0 {\n\t\ti.rb.ss.next(i.info)\n\t\ti.info = i.rb.f.info(i.rb.src, i.p)\n\t\ti.next = i.rb.f.nextMain\n\t\treturn i.next(i)\n\t}\n\ti.p = next\n\treturn i.buf[:decomposeHangul(i.buf[:], i.rb.src.hangul(p))]\n}\n\nfunc nextDone(i *Iter) []byte {\n\treturn nil\n}\n\n// nextMulti is used for iterating over multi-segment decompositions\n// for decomposing normal forms.\nfunc nextMulti(i *Iter) []byte {\n\tj := 0\n\td := i.multiSeg\n\t// skip first rune\n\tfor j = 1; j < len(d) && !utf8.RuneStart(d[j]); j++ {\n\t}\n\tfor j < len(d) {\n\t\tinfo := i.rb.f.info(input{bytes: d}, j)\n\t\tif info.BoundaryBefore() {\n\t\t\ti.multiSeg = d[j:]\n\t\t\treturn d[:j]\n\t\t}\n\t\tj += int(info.size)\n\t}\n\t// treat last segment as normal decomposition\n\ti.next = i.rb.f.nextMain\n\treturn i.next(i)\n}\n\n// nextMultiNorm is used for iterating over multi-segment decompositions\n// for composing normal forms.\nfunc nextMultiNorm(i *Iter) []byte {\n\tj := 0\n\td := i.multiSeg\n\tfor j < len(d) {\n\t\tinfo := i.rb.f.info(input{bytes: d}, j)\n\t\tif info.BoundaryBefore() {\n\t\t\ti.rb.compose()\n\t\t\tseg := i.buf[:i.rb.flushCopy(i.buf[:])]\n\t\t\ti.rb.insertUnsafe(input{bytes: d}, j, info)\n\t\t\ti.multiSeg = d[j+int(info.size):]\n\t\t\treturn seg\n\t\t}\n\t\ti.rb.insertUnsafe(input{bytes: d}, j, info)\n\t\tj += int(info.size)\n\t}\n\ti.multiSeg = nil\n\ti.next = nextComposed\n\treturn doNormComposed(i)\n}\n\n// nextDecomposed is the implementation of Next for forms NFD and NFKD.\nfunc nextDecomposed(i *Iter) (next []byte) {\n\toutp := 0\n\tinCopyStart, outCopyStart := i.p, 0\n\tfor {\n\t\tif sz := int(i.info.size); sz <= 1 {\n\t\t\ti.rb.ss = 0\n\t\t\tp := i.p\n\t\t\ti.p++ // ASCII or illegal byte.  Either way, advance by 1.\n\t\t\tif i.p >= i.rb.nsrc {\n\t\t\t\ti.setDone()\n\t\t\t\treturn i.returnSlice(p, i.p)\n\t\t\t} else if i.rb.src._byte(i.p) < utf8.RuneSelf {\n\t\t\t\ti.next = i.asciiF\n\t\t\t\treturn i.returnSlice(p, i.p)\n\t\t\t}\n\t\t\toutp++\n\t\t} else if d := i.info.Decomposition(); d != nil {\n\t\t\t// Note: If leading CCC != 0, then len(d) == 2 and last is also non-zero.\n\t\t\t// Case 1: there is a leftover to copy.  In this case the decomposition\n\t\t\t// must begin with a modifier and should always be appended.\n\t\t\t// Case 2: no leftover. Simply return d if followed by a ccc == 0 value.\n\t\t\tp := outp + len(d)\n\t\t\tif outp > 0 {\n\t\t\t\ti.rb.src.copySlice(i.buf[outCopyStart:], inCopyStart, i.p)\n\t\t\t\t// TODO: this condition should not be possible, but we leave it\n\t\t\t\t// in for defensive purposes.\n\t\t\t\tif p > len(i.buf) {\n\t\t\t\t\treturn i.buf[:outp]\n\t\t\t\t}\n\t\t\t} else if i.info.multiSegment() {\n\t\t\t\t// outp must be 0 as multi-segment decompositions always\n\t\t\t\t// start a new segment.\n\t\t\t\tif i.multiSeg == nil {\n\t\t\t\t\ti.multiSeg = d\n\t\t\t\t\ti.next = nextMulti\n\t\t\t\t\treturn nextMulti(i)\n\t\t\t\t}\n\t\t\t\t// We are in the last segment.  Treat as normal decomposition.\n\t\t\t\td = i.multiSeg\n\t\t\t\ti.multiSeg = nil\n\t\t\t\tp = len(d)\n\t\t\t}\n\t\t\tprevCC := i.info.tccc\n\t\t\tif i.p += sz; i.p >= i.rb.nsrc {\n\t\t\t\ti.setDone()\n\t\t\t\ti.info = Properties{} // Force BoundaryBefore to succeed.\n\t\t\t} else {\n\t\t\t\ti.info = i.rb.f.info(i.rb.src, i.p)\n\t\t\t}\n\t\t\tswitch i.rb.ss.next(i.info) {\n\t\t\tcase ssOverflow:\n\t\t\t\ti.next = nextCGJDecompose\n\t\t\t\tfallthrough\n\t\t\tcase ssStarter:\n\t\t\t\tif outp > 0 {\n\t\t\t\t\tcopy(i.buf[outp:], d)\n\t\t\t\t\treturn i.buf[:p]\n\t\t\t\t}\n\t\t\t\treturn d\n\t\t\t}\n\t\t\tcopy(i.buf[outp:], d)\n\t\t\toutp = p\n\t\t\tinCopyStart, outCopyStart = i.p, outp\n\t\t\tif i.info.ccc < prevCC {\n\t\t\t\tgoto doNorm\n\t\t\t}\n\t\t\tcontinue\n\t\t} else if r := i.rb.src.hangul(i.p); r != 0 {\n\t\t\toutp = decomposeHangul(i.buf[:], r)\n\t\t\ti.p += hangulUTF8Size\n\t\t\tinCopyStart, outCopyStart = i.p, outp\n\t\t\tif i.p >= i.rb.nsrc {\n\t\t\t\ti.setDone()\n\t\t\t\tbreak\n\t\t\t} else if i.rb.src.hangul(i.p) != 0 {\n\t\t\t\ti.next = nextHangul\n\t\t\t\treturn i.buf[:outp]\n\t\t\t}\n\t\t} else {\n\t\t\tp := outp + sz\n\t\t\tif p > len(i.buf) {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\toutp = p\n\t\t\ti.p += sz\n\t\t}\n\t\tif i.p >= i.rb.nsrc {\n\t\t\ti.setDone()\n\t\t\tbreak\n\t\t}\n\t\tprevCC := i.info.tccc\n\t\ti.info = i.rb.f.info(i.rb.src, i.p)\n\t\tif v := i.rb.ss.next(i.info); v == ssStarter {\n\t\t\tbreak\n\t\t} else if v == ssOverflow {\n\t\t\ti.next = nextCGJDecompose\n\t\t\tbreak\n\t\t}\n\t\tif i.info.ccc < prevCC {\n\t\t\tgoto doNorm\n\t\t}\n\t}\n\tif outCopyStart == 0 {\n\t\treturn i.returnSlice(inCopyStart, i.p)\n\t} else if inCopyStart < i.p {\n\t\ti.rb.src.copySlice(i.buf[outCopyStart:], inCopyStart, i.p)\n\t}\n\treturn i.buf[:outp]\ndoNorm:\n\t// Insert what we have decomposed so far in the reorderBuffer.\n\t// As we will only reorder, there will always be enough room.\n\ti.rb.src.copySlice(i.buf[outCopyStart:], inCopyStart, i.p)\n\ti.rb.insertDecomposed(i.buf[0:outp])\n\treturn doNormDecomposed(i)\n}\n\nfunc doNormDecomposed(i *Iter) []byte {\n\tfor {\n\t\ti.rb.insertUnsafe(i.rb.src, i.p, i.info)\n\t\tif i.p += int(i.info.size); i.p >= i.rb.nsrc {\n\t\t\ti.setDone()\n\t\t\tbreak\n\t\t}\n\t\ti.info = i.rb.f.info(i.rb.src, i.p)\n\t\tif i.info.ccc == 0 {\n\t\t\tbreak\n\t\t}\n\t\tif s := i.rb.ss.next(i.info); s == ssOverflow {\n\t\t\ti.next = nextCGJDecompose\n\t\t\tbreak\n\t\t}\n\t}\n\t// new segment or too many combining characters: exit normalization\n\treturn i.buf[:i.rb.flushCopy(i.buf[:])]\n}\n\nfunc nextCGJDecompose(i *Iter) []byte {\n\ti.rb.ss = 0\n\ti.rb.insertCGJ()\n\ti.next = nextDecomposed\n\ti.rb.ss.first(i.info)\n\tbuf := doNormDecomposed(i)\n\treturn buf\n}\n\n// nextComposed is the implementation of Next for forms NFC and NFKC.\nfunc nextComposed(i *Iter) []byte {\n\toutp, startp := 0, i.p\n\tvar prevCC uint8\n\tfor {\n\t\tif !i.info.isYesC() {\n\t\t\tgoto doNorm\n\t\t}\n\t\tprevCC = i.info.tccc\n\t\tsz := int(i.info.size)\n\t\tif sz == 0 {\n\t\t\tsz = 1 // illegal rune: copy byte-by-byte\n\t\t}\n\t\tp := outp + sz\n\t\tif p > len(i.buf) {\n\t\t\tbreak\n\t\t}\n\t\toutp = p\n\t\ti.p += sz\n\t\tif i.p >= i.rb.nsrc {\n\t\t\ti.setDone()\n\t\t\tbreak\n\t\t} else if i.rb.src._byte(i.p) < utf8.RuneSelf {\n\t\t\ti.rb.ss = 0\n\t\t\ti.next = i.asciiF\n\t\t\tbreak\n\t\t}\n\t\ti.info = i.rb.f.info(i.rb.src, i.p)\n\t\tif v := i.rb.ss.next(i.info); v == ssStarter {\n\t\t\tbreak\n\t\t} else if v == ssOverflow {\n\t\t\ti.next = nextCGJCompose\n\t\t\tbreak\n\t\t}\n\t\tif i.info.ccc < prevCC {\n\t\t\tgoto doNorm\n\t\t}\n\t}\n\treturn i.returnSlice(startp, i.p)\ndoNorm:\n\t// reset to start position\n\ti.p = startp\n\ti.info = i.rb.f.info(i.rb.src, i.p)\n\ti.rb.ss.first(i.info)\n\tif i.info.multiSegment() {\n\t\td := i.info.Decomposition()\n\t\tinfo := i.rb.f.info(input{bytes: d}, 0)\n\t\ti.rb.insertUnsafe(input{bytes: d}, 0, info)\n\t\ti.multiSeg = d[int(info.size):]\n\t\ti.next = nextMultiNorm\n\t\treturn nextMultiNorm(i)\n\t}\n\ti.rb.ss.first(i.info)\n\ti.rb.insertUnsafe(i.rb.src, i.p, i.info)\n\treturn doNormComposed(i)\n}\n\nfunc doNormComposed(i *Iter) []byte {\n\t// First rune should already be inserted.\n\tfor {\n\t\tif i.p += int(i.info.size); i.p >= i.rb.nsrc {\n\t\t\ti.setDone()\n\t\t\tbreak\n\t\t}\n\t\ti.info = i.rb.f.info(i.rb.src, i.p)\n\t\tif s := i.rb.ss.next(i.info); s == ssStarter {\n\t\t\tbreak\n\t\t} else if s == ssOverflow {\n\t\t\ti.next = nextCGJCompose\n\t\t\tbreak\n\t\t}\n\t\ti.rb.insertUnsafe(i.rb.src, i.p, i.info)\n\t}\n\ti.rb.compose()\n\tseg := i.buf[:i.rb.flushCopy(i.buf[:])]\n\treturn seg\n}\n\nfunc nextCGJCompose(i *Iter) []byte {\n\ti.rb.ss = 0 // instead of first\n\ti.rb.insertCGJ()\n\ti.next = nextComposed\n\t// Note that we treat any rune with nLeadingNonStarters > 0 as a non-starter,\n\t// even if they are not. This is particularly dubious for U+FF9E and UFF9A.\n\t// If we ever change that, insert a check here.\n\ti.rb.ss.first(i.info)\n\ti.rb.insertUnsafe(i.rb.src, i.p, i.info)\n\treturn doNormComposed(i)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/text/unicode/norm/maketables.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build ignore\n\n// Normalization table generator.\n// Data read from the web.\n// See forminfo.go for a description of the trie values associated with each rune.\n\npackage main\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"flag\"\n\t\"fmt\"\n\t\"io\"\n\t\"log\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"golang.org/x/text/internal/gen\"\n\t\"golang.org/x/text/internal/triegen\"\n\t\"golang.org/x/text/internal/ucd\"\n)\n\nfunc main() {\n\tgen.Init()\n\tloadUnicodeData()\n\tcompactCCC()\n\tloadCompositionExclusions()\n\tcompleteCharFields(FCanonical)\n\tcompleteCharFields(FCompatibility)\n\tcomputeNonStarterCounts()\n\tverifyComputed()\n\tprintChars()\n\ttestDerived()\n\tprintTestdata()\n\tmakeTables()\n}\n\nvar (\n\ttablelist = flag.String(\"tables\",\n\t\t\"all\",\n\t\t\"comma-separated list of which tables to generate; \"+\n\t\t\t\"can be 'decomp', 'recomp', 'info' and 'all'\")\n\ttest = flag.Bool(\"test\",\n\t\tfalse,\n\t\t\"test existing tables against DerivedNormalizationProps and generate test data for regression testing\")\n\tverbose = flag.Bool(\"verbose\",\n\t\tfalse,\n\t\t\"write data to stdout as it is parsed\")\n)\n\nconst MaxChar = 0x10FFFF // anything above this shouldn't exist\n\n// Quick Check properties of runes allow us to quickly\n// determine whether a rune may occur in a normal form.\n// For a given normal form, a rune may be guaranteed to occur\n// verbatim (QC=Yes), may or may not combine with another\n// rune (QC=Maybe), or may not occur (QC=No).\ntype QCResult int\n\nconst (\n\tQCUnknown QCResult = iota\n\tQCYes\n\tQCNo\n\tQCMaybe\n)\n\nfunc (r QCResult) String() string {\n\tswitch r {\n\tcase QCYes:\n\t\treturn \"Yes\"\n\tcase QCNo:\n\t\treturn \"No\"\n\tcase QCMaybe:\n\t\treturn \"Maybe\"\n\t}\n\treturn \"***UNKNOWN***\"\n}\n\nconst (\n\tFCanonical     = iota // NFC or NFD\n\tFCompatibility        // NFKC or NFKD\n\tFNumberOfFormTypes\n)\n\nconst (\n\tMComposed   = iota // NFC or NFKC\n\tMDecomposed        // NFD or NFKD\n\tMNumberOfModes\n)\n\n// This contains only the properties we're interested in.\ntype Char struct {\n\tname          string\n\tcodePoint     rune  // if zero, this index is not a valid code point.\n\tccc           uint8 // canonical combining class\n\torigCCC       uint8\n\texcludeInComp bool // from CompositionExclusions.txt\n\tcompatDecomp  bool // it has a compatibility expansion\n\n\tnTrailingNonStarters uint8\n\tnLeadingNonStarters  uint8 // must be equal to trailing if non-zero\n\n\tforms [FNumberOfFormTypes]FormInfo // For FCanonical and FCompatibility\n\n\tstate State\n}\n\nvar chars = make([]Char, MaxChar+1)\nvar cccMap = make(map[uint8]uint8)\n\nfunc (c Char) String() string {\n\tbuf := new(bytes.Buffer)\n\n\tfmt.Fprintf(buf, \"%U [%s]:\\n\", c.codePoint, c.name)\n\tfmt.Fprintf(buf, \"  ccc: %v\\n\", c.ccc)\n\tfmt.Fprintf(buf, \"  excludeInComp: %v\\n\", c.excludeInComp)\n\tfmt.Fprintf(buf, \"  compatDecomp: %v\\n\", c.compatDecomp)\n\tfmt.Fprintf(buf, \"  state: %v\\n\", c.state)\n\tfmt.Fprintf(buf, \"  NFC:\\n\")\n\tfmt.Fprint(buf, c.forms[FCanonical])\n\tfmt.Fprintf(buf, \"  NFKC:\\n\")\n\tfmt.Fprint(buf, c.forms[FCompatibility])\n\n\treturn buf.String()\n}\n\n// In UnicodeData.txt, some ranges are marked like this:\n//\t3400;<CJK Ideograph Extension A, First>;Lo;0;L;;;;;N;;;;;\n//\t4DB5;<CJK Ideograph Extension A, Last>;Lo;0;L;;;;;N;;;;;\n// parseCharacter keeps a state variable indicating the weirdness.\ntype State int\n\nconst (\n\tSNormal State = iota // known to be zero for the type\n\tSFirst\n\tSLast\n\tSMissing\n)\n\nvar lastChar = rune('\\u0000')\n\nfunc (c Char) isValid() bool {\n\treturn c.codePoint != 0 && c.state != SMissing\n}\n\ntype FormInfo struct {\n\tquickCheck [MNumberOfModes]QCResult // index: MComposed or MDecomposed\n\tverified   [MNumberOfModes]bool     // index: MComposed or MDecomposed\n\n\tcombinesForward  bool // May combine with rune on the right\n\tcombinesBackward bool // May combine with rune on the left\n\tisOneWay         bool // Never appears in result\n\tinDecomp         bool // Some decompositions result in this char.\n\tdecomp           Decomposition\n\texpandedDecomp   Decomposition\n}\n\nfunc (f FormInfo) String() string {\n\tbuf := bytes.NewBuffer(make([]byte, 0))\n\n\tfmt.Fprintf(buf, \"    quickCheck[C]: %v\\n\", f.quickCheck[MComposed])\n\tfmt.Fprintf(buf, \"    quickCheck[D]: %v\\n\", f.quickCheck[MDecomposed])\n\tfmt.Fprintf(buf, \"    cmbForward: %v\\n\", f.combinesForward)\n\tfmt.Fprintf(buf, \"    cmbBackward: %v\\n\", f.combinesBackward)\n\tfmt.Fprintf(buf, \"    isOneWay: %v\\n\", f.isOneWay)\n\tfmt.Fprintf(buf, \"    inDecomp: %v\\n\", f.inDecomp)\n\tfmt.Fprintf(buf, \"    decomposition: %X\\n\", f.decomp)\n\tfmt.Fprintf(buf, \"    expandedDecomp: %X\\n\", f.expandedDecomp)\n\n\treturn buf.String()\n}\n\ntype Decomposition []rune\n\nfunc parseDecomposition(s string, skipfirst bool) (a []rune, err error) {\n\tdecomp := strings.Split(s, \" \")\n\tif len(decomp) > 0 && skipfirst {\n\t\tdecomp = decomp[1:]\n\t}\n\tfor _, d := range decomp {\n\t\tpoint, err := strconv.ParseUint(d, 16, 64)\n\t\tif err != nil {\n\t\t\treturn a, err\n\t\t}\n\t\ta = append(a, rune(point))\n\t}\n\treturn a, nil\n}\n\nfunc loadUnicodeData() {\n\tf := gen.OpenUCDFile(\"UnicodeData.txt\")\n\tdefer f.Close()\n\tp := ucd.New(f)\n\tfor p.Next() {\n\t\tr := p.Rune(ucd.CodePoint)\n\t\tchar := &chars[r]\n\n\t\tchar.ccc = uint8(p.Uint(ucd.CanonicalCombiningClass))\n\t\tdecmap := p.String(ucd.DecompMapping)\n\n\t\texp, err := parseDecomposition(decmap, false)\n\t\tisCompat := false\n\t\tif err != nil {\n\t\t\tif len(decmap) > 0 {\n\t\t\t\texp, err = parseDecomposition(decmap, true)\n\t\t\t\tif err != nil {\n\t\t\t\t\tlog.Fatalf(`%U: bad decomp |%v|: \"%s\"`, r, decmap, err)\n\t\t\t\t}\n\t\t\t\tisCompat = true\n\t\t\t}\n\t\t}\n\n\t\tchar.name = p.String(ucd.Name)\n\t\tchar.codePoint = r\n\t\tchar.forms[FCompatibility].decomp = exp\n\t\tif !isCompat {\n\t\t\tchar.forms[FCanonical].decomp = exp\n\t\t} else {\n\t\t\tchar.compatDecomp = true\n\t\t}\n\t\tif len(decmap) > 0 {\n\t\t\tchar.forms[FCompatibility].decomp = exp\n\t\t}\n\t}\n\tif err := p.Err(); err != nil {\n\t\tlog.Fatal(err)\n\t}\n}\n\n// compactCCC converts the sparse set of CCC values to a continguous one,\n// reducing the number of bits needed from 8 to 6.\nfunc compactCCC() {\n\tm := make(map[uint8]uint8)\n\tfor i := range chars {\n\t\tc := &chars[i]\n\t\tm[c.ccc] = 0\n\t}\n\tcccs := []int{}\n\tfor v, _ := range m {\n\t\tcccs = append(cccs, int(v))\n\t}\n\tsort.Ints(cccs)\n\tfor i, c := range cccs {\n\t\tcccMap[uint8(i)] = uint8(c)\n\t\tm[uint8(c)] = uint8(i)\n\t}\n\tfor i := range chars {\n\t\tc := &chars[i]\n\t\tc.origCCC = c.ccc\n\t\tc.ccc = m[c.ccc]\n\t}\n\tif len(m) >= 1<<6 {\n\t\tlog.Fatalf(\"too many difference CCC values: %d >= 64\", len(m))\n\t}\n}\n\n// CompositionExclusions.txt has form:\n// 0958    # ...\n// See https://unicode.org/reports/tr44/ for full explanation\nfunc loadCompositionExclusions() {\n\tf := gen.OpenUCDFile(\"CompositionExclusions.txt\")\n\tdefer f.Close()\n\tp := ucd.New(f)\n\tfor p.Next() {\n\t\tc := &chars[p.Rune(0)]\n\t\tif c.excludeInComp {\n\t\t\tlog.Fatalf(\"%U: Duplicate entry in exclusions.\", c.codePoint)\n\t\t}\n\t\tc.excludeInComp = true\n\t}\n\tif e := p.Err(); e != nil {\n\t\tlog.Fatal(e)\n\t}\n}\n\n// hasCompatDecomp returns true if any of the recursive\n// decompositions contains a compatibility expansion.\n// In this case, the character may not occur in NFK*.\nfunc hasCompatDecomp(r rune) bool {\n\tc := &chars[r]\n\tif c.compatDecomp {\n\t\treturn true\n\t}\n\tfor _, d := range c.forms[FCompatibility].decomp {\n\t\tif hasCompatDecomp(d) {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// Hangul related constants.\nconst (\n\tHangulBase = 0xAC00\n\tHangulEnd  = 0xD7A4 // hangulBase + Jamo combinations (19 * 21 * 28)\n\n\tJamoLBase = 0x1100\n\tJamoLEnd  = 0x1113\n\tJamoVBase = 0x1161\n\tJamoVEnd  = 0x1176\n\tJamoTBase = 0x11A8\n\tJamoTEnd  = 0x11C3\n\n\tJamoLVTCount = 19 * 21 * 28\n\tJamoTCount   = 28\n)\n\nfunc isHangul(r rune) bool {\n\treturn HangulBase <= r && r < HangulEnd\n}\n\nfunc isHangulWithoutJamoT(r rune) bool {\n\tif !isHangul(r) {\n\t\treturn false\n\t}\n\tr -= HangulBase\n\treturn r < JamoLVTCount && r%JamoTCount == 0\n}\n\nfunc ccc(r rune) uint8 {\n\treturn chars[r].ccc\n}\n\n// Insert a rune in a buffer, ordered by Canonical Combining Class.\nfunc insertOrdered(b Decomposition, r rune) Decomposition {\n\tn := len(b)\n\tb = append(b, 0)\n\tcc := ccc(r)\n\tif cc > 0 {\n\t\t// Use bubble sort.\n\t\tfor ; n > 0; n-- {\n\t\t\tif ccc(b[n-1]) <= cc {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tb[n] = b[n-1]\n\t\t}\n\t}\n\tb[n] = r\n\treturn b\n}\n\n// Recursively decompose.\nfunc decomposeRecursive(form int, r rune, d Decomposition) Decomposition {\n\tdcomp := chars[r].forms[form].decomp\n\tif len(dcomp) == 0 {\n\t\treturn insertOrdered(d, r)\n\t}\n\tfor _, c := range dcomp {\n\t\td = decomposeRecursive(form, c, d)\n\t}\n\treturn d\n}\n\nfunc completeCharFields(form int) {\n\t// Phase 0: pre-expand decomposition.\n\tfor i := range chars {\n\t\tf := &chars[i].forms[form]\n\t\tif len(f.decomp) == 0 {\n\t\t\tcontinue\n\t\t}\n\t\texp := make(Decomposition, 0)\n\t\tfor _, c := range f.decomp {\n\t\t\texp = decomposeRecursive(form, c, exp)\n\t\t}\n\t\tf.expandedDecomp = exp\n\t}\n\n\t// Phase 1: composition exclusion, mark decomposition.\n\tfor i := range chars {\n\t\tc := &chars[i]\n\t\tf := &c.forms[form]\n\n\t\t// Marks script-specific exclusions and version restricted.\n\t\tf.isOneWay = c.excludeInComp\n\n\t\t// Singletons\n\t\tf.isOneWay = f.isOneWay || len(f.decomp) == 1\n\n\t\t// Non-starter decompositions\n\t\tif len(f.decomp) > 1 {\n\t\t\tchk := c.ccc != 0 || chars[f.decomp[0]].ccc != 0\n\t\t\tf.isOneWay = f.isOneWay || chk\n\t\t}\n\n\t\t// Runes that decompose into more than two runes.\n\t\tf.isOneWay = f.isOneWay || len(f.decomp) > 2\n\n\t\tif form == FCompatibility {\n\t\t\tf.isOneWay = f.isOneWay || hasCompatDecomp(c.codePoint)\n\t\t}\n\n\t\tfor _, r := range f.decomp {\n\t\t\tchars[r].forms[form].inDecomp = true\n\t\t}\n\t}\n\n\t// Phase 2: forward and backward combining.\n\tfor i := range chars {\n\t\tc := &chars[i]\n\t\tf := &c.forms[form]\n\n\t\tif !f.isOneWay && len(f.decomp) == 2 {\n\t\t\tf0 := &chars[f.decomp[0]].forms[form]\n\t\t\tf1 := &chars[f.decomp[1]].forms[form]\n\t\t\tif !f0.isOneWay {\n\t\t\t\tf0.combinesForward = true\n\t\t\t}\n\t\t\tif !f1.isOneWay {\n\t\t\t\tf1.combinesBackward = true\n\t\t\t}\n\t\t}\n\t\tif isHangulWithoutJamoT(rune(i)) {\n\t\t\tf.combinesForward = true\n\t\t}\n\t}\n\n\t// Phase 3: quick check values.\n\tfor i := range chars {\n\t\tc := &chars[i]\n\t\tf := &c.forms[form]\n\n\t\tswitch {\n\t\tcase len(f.decomp) > 0:\n\t\t\tf.quickCheck[MDecomposed] = QCNo\n\t\tcase isHangul(rune(i)):\n\t\t\tf.quickCheck[MDecomposed] = QCNo\n\t\tdefault:\n\t\t\tf.quickCheck[MDecomposed] = QCYes\n\t\t}\n\t\tswitch {\n\t\tcase f.isOneWay:\n\t\t\tf.quickCheck[MComposed] = QCNo\n\t\tcase (i & 0xffff00) == JamoLBase:\n\t\t\tf.quickCheck[MComposed] = QCYes\n\t\t\tif JamoLBase <= i && i < JamoLEnd {\n\t\t\t\tf.combinesForward = true\n\t\t\t}\n\t\t\tif JamoVBase <= i && i < JamoVEnd {\n\t\t\t\tf.quickCheck[MComposed] = QCMaybe\n\t\t\t\tf.combinesBackward = true\n\t\t\t\tf.combinesForward = true\n\t\t\t}\n\t\t\tif JamoTBase <= i && i < JamoTEnd {\n\t\t\t\tf.quickCheck[MComposed] = QCMaybe\n\t\t\t\tf.combinesBackward = true\n\t\t\t}\n\t\tcase !f.combinesBackward:\n\t\t\tf.quickCheck[MComposed] = QCYes\n\t\tdefault:\n\t\t\tf.quickCheck[MComposed] = QCMaybe\n\t\t}\n\t}\n}\n\nfunc computeNonStarterCounts() {\n\t// Phase 4: leading and trailing non-starter count\n\tfor i := range chars {\n\t\tc := &chars[i]\n\n\t\trunes := []rune{rune(i)}\n\t\t// We always use FCompatibility so that the CGJ insertion points do not\n\t\t// change for repeated normalizations with different forms.\n\t\tif exp := c.forms[FCompatibility].expandedDecomp; len(exp) > 0 {\n\t\t\trunes = exp\n\t\t}\n\t\t// We consider runes that combine backwards to be non-starters for the\n\t\t// purpose of Stream-Safe Text Processing.\n\t\tfor _, r := range runes {\n\t\t\tif cr := &chars[r]; cr.ccc == 0 && !cr.forms[FCompatibility].combinesBackward {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tc.nLeadingNonStarters++\n\t\t}\n\t\tfor i := len(runes) - 1; i >= 0; i-- {\n\t\t\tif cr := &chars[runes[i]]; cr.ccc == 0 && !cr.forms[FCompatibility].combinesBackward {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tc.nTrailingNonStarters++\n\t\t}\n\t\tif c.nTrailingNonStarters > 3 {\n\t\t\tlog.Fatalf(\"%U: Decomposition with more than 3 (%d) trailing modifiers (%U)\", i, c.nTrailingNonStarters, runes)\n\t\t}\n\n\t\tif isHangul(rune(i)) {\n\t\t\tc.nTrailingNonStarters = 2\n\t\t\tif isHangulWithoutJamoT(rune(i)) {\n\t\t\t\tc.nTrailingNonStarters = 1\n\t\t\t}\n\t\t}\n\n\t\tif l, t := c.nLeadingNonStarters, c.nTrailingNonStarters; l > 0 && l != t {\n\t\t\tlog.Fatalf(\"%U: number of leading and trailing non-starters should be equal (%d vs %d)\", i, l, t)\n\t\t}\n\t\tif t := c.nTrailingNonStarters; t > 3 {\n\t\t\tlog.Fatalf(\"%U: number of trailing non-starters is %d > 3\", t)\n\t\t}\n\t}\n}\n\nfunc printBytes(w io.Writer, b []byte, name string) {\n\tfmt.Fprintf(w, \"// %s: %d bytes\\n\", name, len(b))\n\tfmt.Fprintf(w, \"var %s = [...]byte {\", name)\n\tfor i, c := range b {\n\t\tswitch {\n\t\tcase i%64 == 0:\n\t\t\tfmt.Fprintf(w, \"\\n// Bytes %x - %x\\n\", i, i+63)\n\t\tcase i%8 == 0:\n\t\t\tfmt.Fprintf(w, \"\\n\")\n\t\t}\n\t\tfmt.Fprintf(w, \"0x%.2X, \", c)\n\t}\n\tfmt.Fprint(w, \"\\n}\\n\\n\")\n}\n\n// See forminfo.go for format.\nfunc makeEntry(f *FormInfo, c *Char) uint16 {\n\te := uint16(0)\n\tif r := c.codePoint; HangulBase <= r && r < HangulEnd {\n\t\te |= 0x40\n\t}\n\tif f.combinesForward {\n\t\te |= 0x20\n\t}\n\tif f.quickCheck[MDecomposed] == QCNo {\n\t\te |= 0x4\n\t}\n\tswitch f.quickCheck[MComposed] {\n\tcase QCYes:\n\tcase QCNo:\n\t\te |= 0x10\n\tcase QCMaybe:\n\t\te |= 0x18\n\tdefault:\n\t\tlog.Fatalf(\"Illegal quickcheck value %v.\", f.quickCheck[MComposed])\n\t}\n\te |= uint16(c.nTrailingNonStarters)\n\treturn e\n}\n\n// decompSet keeps track of unique decompositions, grouped by whether\n// the decomposition is followed by a trailing and/or leading CCC.\ntype decompSet [7]map[string]bool\n\nconst (\n\tnormalDecomp = iota\n\tfirstMulti\n\tfirstCCC\n\tendMulti\n\tfirstLeadingCCC\n\tfirstCCCZeroExcept\n\tfirstStarterWithNLead\n\tlastDecomp\n)\n\nvar cname = []string{\"firstMulti\", \"firstCCC\", \"endMulti\", \"firstLeadingCCC\", \"firstCCCZeroExcept\", \"firstStarterWithNLead\", \"lastDecomp\"}\n\nfunc makeDecompSet() decompSet {\n\tm := decompSet{}\n\tfor i := range m {\n\t\tm[i] = make(map[string]bool)\n\t}\n\treturn m\n}\nfunc (m *decompSet) insert(key int, s string) {\n\tm[key][s] = true\n}\n\nfunc printCharInfoTables(w io.Writer) int {\n\tmkstr := func(r rune, f *FormInfo) (int, string) {\n\t\td := f.expandedDecomp\n\t\ts := string([]rune(d))\n\t\tif max := 1 << 6; len(s) >= max {\n\t\t\tconst msg = \"%U: too many bytes in decomposition: %d >= %d\"\n\t\t\tlog.Fatalf(msg, r, len(s), max)\n\t\t}\n\t\thead := uint8(len(s))\n\t\tif f.quickCheck[MComposed] != QCYes {\n\t\t\thead |= 0x40\n\t\t}\n\t\tif f.combinesForward {\n\t\t\thead |= 0x80\n\t\t}\n\t\ts = string([]byte{head}) + s\n\n\t\tlccc := ccc(d[0])\n\t\ttccc := ccc(d[len(d)-1])\n\t\tcc := ccc(r)\n\t\tif cc != 0 && lccc == 0 && tccc == 0 {\n\t\t\tlog.Fatalf(\"%U: trailing and leading ccc are 0 for non-zero ccc %d\", r, cc)\n\t\t}\n\t\tif tccc < lccc && lccc != 0 {\n\t\t\tconst msg = \"%U: lccc (%d) must be <= tcc (%d)\"\n\t\t\tlog.Fatalf(msg, r, lccc, tccc)\n\t\t}\n\t\tindex := normalDecomp\n\t\tnTrail := chars[r].nTrailingNonStarters\n\t\tnLead := chars[r].nLeadingNonStarters\n\t\tif tccc > 0 || lccc > 0 || nTrail > 0 {\n\t\t\ttccc <<= 2\n\t\t\ttccc |= nTrail\n\t\t\ts += string([]byte{tccc})\n\t\t\tindex = endMulti\n\t\t\tfor _, r := range d[1:] {\n\t\t\t\tif ccc(r) == 0 {\n\t\t\t\t\tindex = firstCCC\n\t\t\t\t}\n\t\t\t}\n\t\t\tif lccc > 0 || nLead > 0 {\n\t\t\t\ts += string([]byte{lccc})\n\t\t\t\tif index == firstCCC {\n\t\t\t\t\tlog.Fatalf(\"%U: multi-segment decomposition not supported for decompositions with leading CCC != 0\", r)\n\t\t\t\t}\n\t\t\t\tindex = firstLeadingCCC\n\t\t\t}\n\t\t\tif cc != lccc {\n\t\t\t\tif cc != 0 {\n\t\t\t\t\tlog.Fatalf(\"%U: for lccc != ccc, expected ccc to be 0; was %d\", r, cc)\n\t\t\t\t}\n\t\t\t\tindex = firstCCCZeroExcept\n\t\t\t}\n\t\t} else if len(d) > 1 {\n\t\t\tindex = firstMulti\n\t\t}\n\t\treturn index, s\n\t}\n\n\tdecompSet := makeDecompSet()\n\tconst nLeadStr = \"\\x00\\x01\" // 0-byte length and tccc with nTrail.\n\tdecompSet.insert(firstStarterWithNLead, nLeadStr)\n\n\t// Store the uniqued decompositions in a byte buffer,\n\t// preceded by their byte length.\n\tfor _, c := range chars {\n\t\tfor _, f := range c.forms {\n\t\t\tif len(f.expandedDecomp) == 0 {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif f.combinesBackward {\n\t\t\t\tlog.Fatalf(\"%U: combinesBackward and decompose\", c.codePoint)\n\t\t\t}\n\t\t\tindex, s := mkstr(c.codePoint, &f)\n\t\t\tdecompSet.insert(index, s)\n\t\t}\n\t}\n\n\tdecompositions := bytes.NewBuffer(make([]byte, 0, 10000))\n\tsize := 0\n\tpositionMap := make(map[string]uint16)\n\tdecompositions.WriteString(\"\\000\")\n\tfmt.Fprintln(w, \"const (\")\n\tfor i, m := range decompSet {\n\t\tsa := []string{}\n\t\tfor s := range m {\n\t\t\tsa = append(sa, s)\n\t\t}\n\t\tsort.Strings(sa)\n\t\tfor _, s := range sa {\n\t\t\tp := decompositions.Len()\n\t\t\tdecompositions.WriteString(s)\n\t\t\tpositionMap[s] = uint16(p)\n\t\t}\n\t\tif cname[i] != \"\" {\n\t\t\tfmt.Fprintf(w, \"%s = 0x%X\\n\", cname[i], decompositions.Len())\n\t\t}\n\t}\n\tfmt.Fprintln(w, \"maxDecomp = 0x8000\")\n\tfmt.Fprintln(w, \")\")\n\tb := decompositions.Bytes()\n\tprintBytes(w, b, \"decomps\")\n\tsize += len(b)\n\n\tvarnames := []string{\"nfc\", \"nfkc\"}\n\tfor i := 0; i < FNumberOfFormTypes; i++ {\n\t\ttrie := triegen.NewTrie(varnames[i])\n\n\t\tfor r, c := range chars {\n\t\t\tf := c.forms[i]\n\t\t\td := f.expandedDecomp\n\t\t\tif len(d) != 0 {\n\t\t\t\t_, key := mkstr(c.codePoint, &f)\n\t\t\t\ttrie.Insert(rune(r), uint64(positionMap[key]))\n\t\t\t\tif c.ccc != ccc(d[0]) {\n\t\t\t\t\t// We assume the lead ccc of a decomposition !=0 in this case.\n\t\t\t\t\tif ccc(d[0]) == 0 {\n\t\t\t\t\t\tlog.Fatalf(\"Expected leading CCC to be non-zero; ccc is %d\", c.ccc)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if c.nLeadingNonStarters > 0 && len(f.expandedDecomp) == 0 && c.ccc == 0 && !f.combinesBackward {\n\t\t\t\t// Handle cases where it can't be detected that the nLead should be equal\n\t\t\t\t// to nTrail.\n\t\t\t\ttrie.Insert(c.codePoint, uint64(positionMap[nLeadStr]))\n\t\t\t} else if v := makeEntry(&f, &c)<<8 | uint16(c.ccc); v != 0 {\n\t\t\t\ttrie.Insert(c.codePoint, uint64(0x8000|v))\n\t\t\t}\n\t\t}\n\t\tsz, err := trie.Gen(w, triegen.Compact(&normCompacter{name: varnames[i]}))\n\t\tif err != nil {\n\t\t\tlog.Fatal(err)\n\t\t}\n\t\tsize += sz\n\t}\n\treturn size\n}\n\nfunc contains(sa []string, s string) bool {\n\tfor _, a := range sa {\n\t\tif a == s {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\nfunc makeTables() {\n\tw := &bytes.Buffer{}\n\n\tsize := 0\n\tif *tablelist == \"\" {\n\t\treturn\n\t}\n\tlist := strings.Split(*tablelist, \",\")\n\tif *tablelist == \"all\" {\n\t\tlist = []string{\"recomp\", \"info\"}\n\t}\n\n\t// Compute maximum decomposition size.\n\tmax := 0\n\tfor _, c := range chars {\n\t\tif n := len(string(c.forms[FCompatibility].expandedDecomp)); n > max {\n\t\t\tmax = n\n\t\t}\n\t}\n\tfmt.Fprintln(w, `import \"sync\"`)\n\tfmt.Fprintln(w)\n\n\tfmt.Fprintln(w, \"const (\")\n\tfmt.Fprintln(w, \"\\t// Version is the Unicode edition from which the tables are derived.\")\n\tfmt.Fprintf(w, \"\\tVersion = %q\\n\", gen.UnicodeVersion())\n\tfmt.Fprintln(w)\n\tfmt.Fprintln(w, \"\\t// MaxTransformChunkSize indicates the maximum number of bytes that Transform\")\n\tfmt.Fprintln(w, \"\\t// may need to write atomically for any Form. Making a destination buffer at\")\n\tfmt.Fprintln(w, \"\\t// least this size ensures that Transform can always make progress and that\")\n\tfmt.Fprintln(w, \"\\t// the user does not need to grow the buffer on an ErrShortDst.\")\n\tfmt.Fprintf(w, \"\\tMaxTransformChunkSize = %d+maxNonStarters*4\\n\", len(string(0x034F))+max)\n\tfmt.Fprintln(w, \")\\n\")\n\n\t// Print the CCC remap table.\n\tsize += len(cccMap)\n\tfmt.Fprintf(w, \"var ccc = [%d]uint8{\", len(cccMap))\n\tfor i := 0; i < len(cccMap); i++ {\n\t\tif i%8 == 0 {\n\t\t\tfmt.Fprintln(w)\n\t\t}\n\t\tfmt.Fprintf(w, \"%3d, \", cccMap[uint8(i)])\n\t}\n\tfmt.Fprintln(w, \"\\n}\\n\")\n\n\tif contains(list, \"info\") {\n\t\tsize += printCharInfoTables(w)\n\t}\n\n\tif contains(list, \"recomp\") {\n\t\t// Note that we use 32 bit keys, instead of 64 bit.\n\t\t// This clips the bits of three entries, but we know\n\t\t// this won't cause a collision. The compiler will catch\n\t\t// any changes made to UnicodeData.txt that introduces\n\t\t// a collision.\n\t\t// Note that the recomposition map for NFC and NFKC\n\t\t// are identical.\n\n\t\t// Recomposition map\n\t\tnrentries := 0\n\t\tfor _, c := range chars {\n\t\t\tf := c.forms[FCanonical]\n\t\t\tif !f.isOneWay && len(f.decomp) > 0 {\n\t\t\t\tnrentries++\n\t\t\t}\n\t\t}\n\t\tsz := nrentries * 8\n\t\tsize += sz\n\t\tfmt.Fprintf(w, \"// recompMap: %d bytes (entries only)\\n\", sz)\n\t\tfmt.Fprintln(w, \"var recompMap map[uint32]rune\")\n\t\tfmt.Fprintln(w, \"var recompMapOnce sync.Once\\n\")\n\t\tfmt.Fprintln(w, `const recompMapPacked = \"\" +`)\n\t\tvar buf [8]byte\n\t\tfor i, c := range chars {\n\t\t\tf := c.forms[FCanonical]\n\t\t\td := f.decomp\n\t\t\tif !f.isOneWay && len(d) > 0 {\n\t\t\t\tkey := uint32(uint16(d[0]))<<16 + uint32(uint16(d[1]))\n\t\t\t\tbinary.BigEndian.PutUint32(buf[:4], key)\n\t\t\t\tbinary.BigEndian.PutUint32(buf[4:], uint32(i))\n\t\t\t\tfmt.Fprintf(w, \"\\t\\t%q + // 0x%.8X: 0x%.8X\\n\", string(buf[:]), key, uint32(i))\n\t\t\t}\n\t\t}\n\t\t// hack so we don't have to special case the trailing plus sign\n\t\tfmt.Fprintf(w, `\t\"\"`)\n\t\tfmt.Fprintln(w)\n\t}\n\n\tfmt.Fprintf(w, \"// Total size of tables: %dKB (%d bytes)\\n\", (size+512)/1024, size)\n\tgen.WriteVersionedGoFile(\"tables.go\", \"norm\", w.Bytes())\n}\n\nfunc printChars() {\n\tif *verbose {\n\t\tfor _, c := range chars {\n\t\t\tif !c.isValid() || c.state == SMissing {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tfmt.Println(c)\n\t\t}\n\t}\n}\n\n// verifyComputed does various consistency tests.\nfunc verifyComputed() {\n\tfor i, c := range chars {\n\t\tfor _, f := range c.forms {\n\t\t\tisNo := (f.quickCheck[MDecomposed] == QCNo)\n\t\t\tif (len(f.decomp) > 0) != isNo && !isHangul(rune(i)) {\n\t\t\t\tlog.Fatalf(\"%U: NF*D QC must be No if rune decomposes\", i)\n\t\t\t}\n\n\t\t\tisMaybe := f.quickCheck[MComposed] == QCMaybe\n\t\t\tif f.combinesBackward != isMaybe {\n\t\t\t\tlog.Fatalf(\"%U: NF*C QC must be Maybe if combinesBackward\", i)\n\t\t\t}\n\t\t\tif len(f.decomp) > 0 && f.combinesForward && isMaybe {\n\t\t\t\tlog.Fatalf(\"%U: NF*C QC must be Yes or No if combinesForward and decomposes\", i)\n\t\t\t}\n\n\t\t\tif len(f.expandedDecomp) != 0 {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif a, b := c.nLeadingNonStarters > 0, (c.ccc > 0 || f.combinesBackward); a != b {\n\t\t\t\t// We accept these runes to be treated differently (it only affects\n\t\t\t\t// segment breaking in iteration, most likely on improper use), but\n\t\t\t\t// reconsider if more characters are added.\n\t\t\t\t// U+FF9E HALFWIDTH KATAKANA VOICED SOUND MARK;Lm;0;L;<narrow> 3099;;;;N;;;;;\n\t\t\t\t// U+FF9F HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK;Lm;0;L;<narrow> 309A;;;;N;;;;;\n\t\t\t\t// U+3133 HANGUL LETTER KIYEOK-SIOS;Lo;0;L;<compat> 11AA;;;;N;HANGUL LETTER GIYEOG SIOS;;;;\n\t\t\t\t// U+318E HANGUL LETTER ARAEAE;Lo;0;L;<compat> 11A1;;;;N;HANGUL LETTER ALAE AE;;;;\n\t\t\t\t// U+FFA3 HALFWIDTH HANGUL LETTER KIYEOK-SIOS;Lo;0;L;<narrow> 3133;;;;N;HALFWIDTH HANGUL LETTER GIYEOG SIOS;;;;\n\t\t\t\t// U+FFDC HALFWIDTH HANGUL LETTER I;Lo;0;L;<narrow> 3163;;;;N;;;;;\n\t\t\t\tif i != 0xFF9E && i != 0xFF9F && !(0x3133 <= i && i <= 0x318E) && !(0xFFA3 <= i && i <= 0xFFDC) {\n\t\t\t\t\tlog.Fatalf(\"%U: nLead was %v; want %v\", i, a, b)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tnfc := c.forms[FCanonical]\n\t\tnfkc := c.forms[FCompatibility]\n\t\tif nfc.combinesBackward != nfkc.combinesBackward {\n\t\t\tlog.Fatalf(\"%U: Cannot combine combinesBackward\\n\", c.codePoint)\n\t\t}\n\t}\n}\n\n// Use values in DerivedNormalizationProps.txt to compare against the\n// values we computed.\n// DerivedNormalizationProps.txt has form:\n// 00C0..00C5    ; NFD_QC; N # ...\n// 0374          ; NFD_QC; N # ...\n// See https://unicode.org/reports/tr44/ for full explanation\nfunc testDerived() {\n\tf := gen.OpenUCDFile(\"DerivedNormalizationProps.txt\")\n\tdefer f.Close()\n\tp := ucd.New(f)\n\tfor p.Next() {\n\t\tr := p.Rune(0)\n\t\tc := &chars[r]\n\n\t\tvar ftype, mode int\n\t\tqt := p.String(1)\n\t\tswitch qt {\n\t\tcase \"NFC_QC\":\n\t\t\tftype, mode = FCanonical, MComposed\n\t\tcase \"NFD_QC\":\n\t\t\tftype, mode = FCanonical, MDecomposed\n\t\tcase \"NFKC_QC\":\n\t\t\tftype, mode = FCompatibility, MComposed\n\t\tcase \"NFKD_QC\":\n\t\t\tftype, mode = FCompatibility, MDecomposed\n\t\tdefault:\n\t\t\tcontinue\n\t\t}\n\t\tvar qr QCResult\n\t\tswitch p.String(2) {\n\t\tcase \"Y\":\n\t\t\tqr = QCYes\n\t\tcase \"N\":\n\t\t\tqr = QCNo\n\t\tcase \"M\":\n\t\t\tqr = QCMaybe\n\t\tdefault:\n\t\t\tlog.Fatalf(`Unexpected quick check value \"%s\"`, p.String(2))\n\t\t}\n\t\tif got := c.forms[ftype].quickCheck[mode]; got != qr {\n\t\t\tlog.Printf(\"%U: FAILED %s (was %v need %v)\\n\", r, qt, got, qr)\n\t\t}\n\t\tc.forms[ftype].verified[mode] = true\n\t}\n\tif err := p.Err(); err != nil {\n\t\tlog.Fatal(err)\n\t}\n\t// Any unspecified value must be QCYes. Verify this.\n\tfor i, c := range chars {\n\t\tfor j, fd := range c.forms {\n\t\t\tfor k, qr := range fd.quickCheck {\n\t\t\t\tif !fd.verified[k] && qr != QCYes {\n\t\t\t\t\tm := \"%U: FAIL F:%d M:%d (was %v need Yes) %s\\n\"\n\t\t\t\t\tlog.Printf(m, i, j, k, qr, c.name)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nvar testHeader = `const (\n\tYes = iota\n\tNo\n\tMaybe\n)\n\ntype formData struct {\n\tqc              uint8\n\tcombinesForward bool\n\tdecomposition   string\n}\n\ntype runeData struct {\n\tr      rune\n\tccc    uint8\n\tnLead  uint8\n\tnTrail uint8\n\tf      [2]formData // 0: canonical; 1: compatibility\n}\n\nfunc f(qc uint8, cf bool, dec string) [2]formData {\n\treturn [2]formData{{qc, cf, dec}, {qc, cf, dec}}\n}\n\nfunc g(qc, qck uint8, cf, cfk bool, d, dk string) [2]formData {\n\treturn [2]formData{{qc, cf, d}, {qck, cfk, dk}}\n}\n\nvar testData = []runeData{\n`\n\nfunc printTestdata() {\n\ttype lastInfo struct {\n\t\tccc    uint8\n\t\tnLead  uint8\n\t\tnTrail uint8\n\t\tf      string\n\t}\n\n\tlast := lastInfo{}\n\tw := &bytes.Buffer{}\n\tfmt.Fprintf(w, testHeader)\n\tfor r, c := range chars {\n\t\tf := c.forms[FCanonical]\n\t\tqc, cf, d := f.quickCheck[MComposed], f.combinesForward, string(f.expandedDecomp)\n\t\tf = c.forms[FCompatibility]\n\t\tqck, cfk, dk := f.quickCheck[MComposed], f.combinesForward, string(f.expandedDecomp)\n\t\ts := \"\"\n\t\tif d == dk && qc == qck && cf == cfk {\n\t\t\ts = fmt.Sprintf(\"f(%s, %v, %q)\", qc, cf, d)\n\t\t} else {\n\t\t\ts = fmt.Sprintf(\"g(%s, %s, %v, %v, %q, %q)\", qc, qck, cf, cfk, d, dk)\n\t\t}\n\t\tcurrent := lastInfo{c.ccc, c.nLeadingNonStarters, c.nTrailingNonStarters, s}\n\t\tif last != current {\n\t\t\tfmt.Fprintf(w, \"\\t{0x%x, %d, %d, %d, %s},\\n\", r, c.origCCC, c.nLeadingNonStarters, c.nTrailingNonStarters, s)\n\t\t\tlast = current\n\t\t}\n\t}\n\tfmt.Fprintln(w, \"}\")\n\tgen.WriteVersionedGoFile(\"data_test.go\", \"norm\", w.Bytes())\n}\n"
  },
  {
    "path": "vendor/golang.org/x/text/unicode/norm/normalize.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Note: the file data_test.go that is generated should not be checked in.\n//go:generate go run maketables.go triegen.go\n//go:generate go test -tags test\n\n// Package norm contains types and functions for normalizing Unicode strings.\npackage norm // import \"golang.org/x/text/unicode/norm\"\n\nimport (\n\t\"unicode/utf8\"\n\n\t\"golang.org/x/text/transform\"\n)\n\n// A Form denotes a canonical representation of Unicode code points.\n// The Unicode-defined normalization and equivalence forms are:\n//\n//   NFC   Unicode Normalization Form C\n//   NFD   Unicode Normalization Form D\n//   NFKC  Unicode Normalization Form KC\n//   NFKD  Unicode Normalization Form KD\n//\n// For a Form f, this documentation uses the notation f(x) to mean\n// the bytes or string x converted to the given form.\n// A position n in x is called a boundary if conversion to the form can\n// proceed independently on both sides:\n//   f(x) == append(f(x[0:n]), f(x[n:])...)\n//\n// References: https://unicode.org/reports/tr15/ and\n// https://unicode.org/notes/tn5/.\ntype Form int\n\nconst (\n\tNFC Form = iota\n\tNFD\n\tNFKC\n\tNFKD\n)\n\n// Bytes returns f(b). May return b if f(b) = b.\nfunc (f Form) Bytes(b []byte) []byte {\n\tsrc := inputBytes(b)\n\tft := formTable[f]\n\tn, ok := ft.quickSpan(src, 0, len(b), true)\n\tif ok {\n\t\treturn b\n\t}\n\tout := make([]byte, n, len(b))\n\tcopy(out, b[0:n])\n\trb := reorderBuffer{f: *ft, src: src, nsrc: len(b), out: out, flushF: appendFlush}\n\treturn doAppendInner(&rb, n)\n}\n\n// String returns f(s).\nfunc (f Form) String(s string) string {\n\tsrc := inputString(s)\n\tft := formTable[f]\n\tn, ok := ft.quickSpan(src, 0, len(s), true)\n\tif ok {\n\t\treturn s\n\t}\n\tout := make([]byte, n, len(s))\n\tcopy(out, s[0:n])\n\trb := reorderBuffer{f: *ft, src: src, nsrc: len(s), out: out, flushF: appendFlush}\n\treturn string(doAppendInner(&rb, n))\n}\n\n// IsNormal returns true if b == f(b).\nfunc (f Form) IsNormal(b []byte) bool {\n\tsrc := inputBytes(b)\n\tft := formTable[f]\n\tbp, ok := ft.quickSpan(src, 0, len(b), true)\n\tif ok {\n\t\treturn true\n\t}\n\trb := reorderBuffer{f: *ft, src: src, nsrc: len(b)}\n\trb.setFlusher(nil, cmpNormalBytes)\n\tfor bp < len(b) {\n\t\trb.out = b[bp:]\n\t\tif bp = decomposeSegment(&rb, bp, true); bp < 0 {\n\t\t\treturn false\n\t\t}\n\t\tbp, _ = rb.f.quickSpan(rb.src, bp, len(b), true)\n\t}\n\treturn true\n}\n\nfunc cmpNormalBytes(rb *reorderBuffer) bool {\n\tb := rb.out\n\tfor i := 0; i < rb.nrune; i++ {\n\t\tinfo := rb.rune[i]\n\t\tif int(info.size) > len(b) {\n\t\t\treturn false\n\t\t}\n\t\tp := info.pos\n\t\tpe := p + info.size\n\t\tfor ; p < pe; p++ {\n\t\t\tif b[0] != rb.byte[p] {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tb = b[1:]\n\t\t}\n\t}\n\treturn true\n}\n\n// IsNormalString returns true if s == f(s).\nfunc (f Form) IsNormalString(s string) bool {\n\tsrc := inputString(s)\n\tft := formTable[f]\n\tbp, ok := ft.quickSpan(src, 0, len(s), true)\n\tif ok {\n\t\treturn true\n\t}\n\trb := reorderBuffer{f: *ft, src: src, nsrc: len(s)}\n\trb.setFlusher(nil, func(rb *reorderBuffer) bool {\n\t\tfor i := 0; i < rb.nrune; i++ {\n\t\t\tinfo := rb.rune[i]\n\t\t\tif bp+int(info.size) > len(s) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tp := info.pos\n\t\t\tpe := p + info.size\n\t\t\tfor ; p < pe; p++ {\n\t\t\t\tif s[bp] != rb.byte[p] {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tbp++\n\t\t\t}\n\t\t}\n\t\treturn true\n\t})\n\tfor bp < len(s) {\n\t\tif bp = decomposeSegment(&rb, bp, true); bp < 0 {\n\t\t\treturn false\n\t\t}\n\t\tbp, _ = rb.f.quickSpan(rb.src, bp, len(s), true)\n\t}\n\treturn true\n}\n\n// patchTail fixes a case where a rune may be incorrectly normalized\n// if it is followed by illegal continuation bytes. It returns the\n// patched buffer and whether the decomposition is still in progress.\nfunc patchTail(rb *reorderBuffer) bool {\n\tinfo, p := lastRuneStart(&rb.f, rb.out)\n\tif p == -1 || info.size == 0 {\n\t\treturn true\n\t}\n\tend := p + int(info.size)\n\textra := len(rb.out) - end\n\tif extra > 0 {\n\t\t// Potentially allocating memory. However, this only\n\t\t// happens with ill-formed UTF-8.\n\t\tx := make([]byte, 0)\n\t\tx = append(x, rb.out[len(rb.out)-extra:]...)\n\t\trb.out = rb.out[:end]\n\t\tdecomposeToLastBoundary(rb)\n\t\trb.doFlush()\n\t\trb.out = append(rb.out, x...)\n\t\treturn false\n\t}\n\tbuf := rb.out[p:]\n\trb.out = rb.out[:p]\n\tdecomposeToLastBoundary(rb)\n\tif s := rb.ss.next(info); s == ssStarter {\n\t\trb.doFlush()\n\t\trb.ss.first(info)\n\t} else if s == ssOverflow {\n\t\trb.doFlush()\n\t\trb.insertCGJ()\n\t\trb.ss = 0\n\t}\n\trb.insertUnsafe(inputBytes(buf), 0, info)\n\treturn true\n}\n\nfunc appendQuick(rb *reorderBuffer, i int) int {\n\tif rb.nsrc == i {\n\t\treturn i\n\t}\n\tend, _ := rb.f.quickSpan(rb.src, i, rb.nsrc, true)\n\trb.out = rb.src.appendSlice(rb.out, i, end)\n\treturn end\n}\n\n// Append returns f(append(out, b...)).\n// The buffer out must be nil, empty, or equal to f(out).\nfunc (f Form) Append(out []byte, src ...byte) []byte {\n\treturn f.doAppend(out, inputBytes(src), len(src))\n}\n\nfunc (f Form) doAppend(out []byte, src input, n int) []byte {\n\tif n == 0 {\n\t\treturn out\n\t}\n\tft := formTable[f]\n\t// Attempt to do a quickSpan first so we can avoid initializing the reorderBuffer.\n\tif len(out) == 0 {\n\t\tp, _ := ft.quickSpan(src, 0, n, true)\n\t\tout = src.appendSlice(out, 0, p)\n\t\tif p == n {\n\t\t\treturn out\n\t\t}\n\t\trb := reorderBuffer{f: *ft, src: src, nsrc: n, out: out, flushF: appendFlush}\n\t\treturn doAppendInner(&rb, p)\n\t}\n\trb := reorderBuffer{f: *ft, src: src, nsrc: n}\n\treturn doAppend(&rb, out, 0)\n}\n\nfunc doAppend(rb *reorderBuffer, out []byte, p int) []byte {\n\trb.setFlusher(out, appendFlush)\n\tsrc, n := rb.src, rb.nsrc\n\tdoMerge := len(out) > 0\n\tif q := src.skipContinuationBytes(p); q > p {\n\t\t// Move leading non-starters to destination.\n\t\trb.out = src.appendSlice(rb.out, p, q)\n\t\tp = q\n\t\tdoMerge = patchTail(rb)\n\t}\n\tfd := &rb.f\n\tif doMerge {\n\t\tvar info Properties\n\t\tif p < n {\n\t\t\tinfo = fd.info(src, p)\n\t\t\tif !info.BoundaryBefore() || info.nLeadingNonStarters() > 0 {\n\t\t\t\tif p == 0 {\n\t\t\t\t\tdecomposeToLastBoundary(rb)\n\t\t\t\t}\n\t\t\t\tp = decomposeSegment(rb, p, true)\n\t\t\t}\n\t\t}\n\t\tif info.size == 0 {\n\t\t\trb.doFlush()\n\t\t\t// Append incomplete UTF-8 encoding.\n\t\t\treturn src.appendSlice(rb.out, p, n)\n\t\t}\n\t\tif rb.nrune > 0 {\n\t\t\treturn doAppendInner(rb, p)\n\t\t}\n\t}\n\tp = appendQuick(rb, p)\n\treturn doAppendInner(rb, p)\n}\n\nfunc doAppendInner(rb *reorderBuffer, p int) []byte {\n\tfor n := rb.nsrc; p < n; {\n\t\tp = decomposeSegment(rb, p, true)\n\t\tp = appendQuick(rb, p)\n\t}\n\treturn rb.out\n}\n\n// AppendString returns f(append(out, []byte(s))).\n// The buffer out must be nil, empty, or equal to f(out).\nfunc (f Form) AppendString(out []byte, src string) []byte {\n\treturn f.doAppend(out, inputString(src), len(src))\n}\n\n// QuickSpan returns a boundary n such that b[0:n] == f(b[0:n]).\n// It is not guaranteed to return the largest such n.\nfunc (f Form) QuickSpan(b []byte) int {\n\tn, _ := formTable[f].quickSpan(inputBytes(b), 0, len(b), true)\n\treturn n\n}\n\n// Span implements transform.SpanningTransformer. It returns a boundary n such\n// that b[0:n] == f(b[0:n]). It is not guaranteed to return the largest such n.\nfunc (f Form) Span(b []byte, atEOF bool) (n int, err error) {\n\tn, ok := formTable[f].quickSpan(inputBytes(b), 0, len(b), atEOF)\n\tif n < len(b) {\n\t\tif !ok {\n\t\t\terr = transform.ErrEndOfSpan\n\t\t} else {\n\t\t\terr = transform.ErrShortSrc\n\t\t}\n\t}\n\treturn n, err\n}\n\n// SpanString returns a boundary n such that s[0:n] == f(s[0:n]).\n// It is not guaranteed to return the largest such n.\nfunc (f Form) SpanString(s string, atEOF bool) (n int, err error) {\n\tn, ok := formTable[f].quickSpan(inputString(s), 0, len(s), atEOF)\n\tif n < len(s) {\n\t\tif !ok {\n\t\t\terr = transform.ErrEndOfSpan\n\t\t} else {\n\t\t\terr = transform.ErrShortSrc\n\t\t}\n\t}\n\treturn n, err\n}\n\n// quickSpan returns a boundary n such that src[0:n] == f(src[0:n]) and\n// whether any non-normalized parts were found. If atEOF is false, n will\n// not point past the last segment if this segment might be become\n// non-normalized by appending other runes.\nfunc (f *formInfo) quickSpan(src input, i, end int, atEOF bool) (n int, ok bool) {\n\tvar lastCC uint8\n\tss := streamSafe(0)\n\tlastSegStart := i\n\tfor n = end; i < n; {\n\t\tif j := src.skipASCII(i, n); i != j {\n\t\t\ti = j\n\t\t\tlastSegStart = i - 1\n\t\t\tlastCC = 0\n\t\t\tss = 0\n\t\t\tcontinue\n\t\t}\n\t\tinfo := f.info(src, i)\n\t\tif info.size == 0 {\n\t\t\tif atEOF {\n\t\t\t\t// include incomplete runes\n\t\t\t\treturn n, true\n\t\t\t}\n\t\t\treturn lastSegStart, true\n\t\t}\n\t\t// This block needs to be before the next, because it is possible to\n\t\t// have an overflow for runes that are starters (e.g. with U+FF9E).\n\t\tswitch ss.next(info) {\n\t\tcase ssStarter:\n\t\t\tlastSegStart = i\n\t\tcase ssOverflow:\n\t\t\treturn lastSegStart, false\n\t\tcase ssSuccess:\n\t\t\tif lastCC > info.ccc {\n\t\t\t\treturn lastSegStart, false\n\t\t\t}\n\t\t}\n\t\tif f.composing {\n\t\t\tif !info.isYesC() {\n\t\t\t\tbreak\n\t\t\t}\n\t\t} else {\n\t\t\tif !info.isYesD() {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tlastCC = info.ccc\n\t\ti += int(info.size)\n\t}\n\tif i == n {\n\t\tif !atEOF {\n\t\t\tn = lastSegStart\n\t\t}\n\t\treturn n, true\n\t}\n\treturn lastSegStart, false\n}\n\n// QuickSpanString returns a boundary n such that s[0:n] == f(s[0:n]).\n// It is not guaranteed to return the largest such n.\nfunc (f Form) QuickSpanString(s string) int {\n\tn, _ := formTable[f].quickSpan(inputString(s), 0, len(s), true)\n\treturn n\n}\n\n// FirstBoundary returns the position i of the first boundary in b\n// or -1 if b contains no boundary.\nfunc (f Form) FirstBoundary(b []byte) int {\n\treturn f.firstBoundary(inputBytes(b), len(b))\n}\n\nfunc (f Form) firstBoundary(src input, nsrc int) int {\n\ti := src.skipContinuationBytes(0)\n\tif i >= nsrc {\n\t\treturn -1\n\t}\n\tfd := formTable[f]\n\tss := streamSafe(0)\n\t// We should call ss.first here, but we can't as the first rune is\n\t// skipped already. This means FirstBoundary can't really determine\n\t// CGJ insertion points correctly. Luckily it doesn't have to.\n\tfor {\n\t\tinfo := fd.info(src, i)\n\t\tif info.size == 0 {\n\t\t\treturn -1\n\t\t}\n\t\tif s := ss.next(info); s != ssSuccess {\n\t\t\treturn i\n\t\t}\n\t\ti += int(info.size)\n\t\tif i >= nsrc {\n\t\t\tif !info.BoundaryAfter() && !ss.isMax() {\n\t\t\t\treturn -1\n\t\t\t}\n\t\t\treturn nsrc\n\t\t}\n\t}\n}\n\n// FirstBoundaryInString returns the position i of the first boundary in s\n// or -1 if s contains no boundary.\nfunc (f Form) FirstBoundaryInString(s string) int {\n\treturn f.firstBoundary(inputString(s), len(s))\n}\n\n// NextBoundary reports the index of the boundary between the first and next\n// segment in b or -1 if atEOF is false and there are not enough bytes to\n// determine this boundary.\nfunc (f Form) NextBoundary(b []byte, atEOF bool) int {\n\treturn f.nextBoundary(inputBytes(b), len(b), atEOF)\n}\n\n// NextBoundaryInString reports the index of the boundary between the first and\n// next segment in b or -1 if atEOF is false and there are not enough bytes to\n// determine this boundary.\nfunc (f Form) NextBoundaryInString(s string, atEOF bool) int {\n\treturn f.nextBoundary(inputString(s), len(s), atEOF)\n}\n\nfunc (f Form) nextBoundary(src input, nsrc int, atEOF bool) int {\n\tif nsrc == 0 {\n\t\tif atEOF {\n\t\t\treturn 0\n\t\t}\n\t\treturn -1\n\t}\n\tfd := formTable[f]\n\tinfo := fd.info(src, 0)\n\tif info.size == 0 {\n\t\tif atEOF {\n\t\t\treturn 1\n\t\t}\n\t\treturn -1\n\t}\n\tss := streamSafe(0)\n\tss.first(info)\n\n\tfor i := int(info.size); i < nsrc; i += int(info.size) {\n\t\tinfo = fd.info(src, i)\n\t\tif info.size == 0 {\n\t\t\tif atEOF {\n\t\t\t\treturn i\n\t\t\t}\n\t\t\treturn -1\n\t\t}\n\t\t// TODO: Using streamSafe to determine the boundary isn't the same as\n\t\t// using BoundaryBefore. Determine which should be used.\n\t\tif s := ss.next(info); s != ssSuccess {\n\t\t\treturn i\n\t\t}\n\t}\n\tif !atEOF && !info.BoundaryAfter() && !ss.isMax() {\n\t\treturn -1\n\t}\n\treturn nsrc\n}\n\n// LastBoundary returns the position i of the last boundary in b\n// or -1 if b contains no boundary.\nfunc (f Form) LastBoundary(b []byte) int {\n\treturn lastBoundary(formTable[f], b)\n}\n\nfunc lastBoundary(fd *formInfo, b []byte) int {\n\ti := len(b)\n\tinfo, p := lastRuneStart(fd, b)\n\tif p == -1 {\n\t\treturn -1\n\t}\n\tif info.size == 0 { // ends with incomplete rune\n\t\tif p == 0 { // starts with incomplete rune\n\t\t\treturn -1\n\t\t}\n\t\ti = p\n\t\tinfo, p = lastRuneStart(fd, b[:i])\n\t\tif p == -1 { // incomplete UTF-8 encoding or non-starter bytes without a starter\n\t\t\treturn i\n\t\t}\n\t}\n\tif p+int(info.size) != i { // trailing non-starter bytes: illegal UTF-8\n\t\treturn i\n\t}\n\tif info.BoundaryAfter() {\n\t\treturn i\n\t}\n\tss := streamSafe(0)\n\tv := ss.backwards(info)\n\tfor i = p; i >= 0 && v != ssStarter; i = p {\n\t\tinfo, p = lastRuneStart(fd, b[:i])\n\t\tif v = ss.backwards(info); v == ssOverflow {\n\t\t\tbreak\n\t\t}\n\t\tif p+int(info.size) != i {\n\t\t\tif p == -1 { // no boundary found\n\t\t\t\treturn -1\n\t\t\t}\n\t\t\treturn i // boundary after an illegal UTF-8 encoding\n\t\t}\n\t}\n\treturn i\n}\n\n// decomposeSegment scans the first segment in src into rb. It inserts 0x034f\n// (Grapheme Joiner) when it encounters a sequence of more than 30 non-starters\n// and returns the number of bytes consumed from src or iShortDst or iShortSrc.\nfunc decomposeSegment(rb *reorderBuffer, sp int, atEOF bool) int {\n\t// Force one character to be consumed.\n\tinfo := rb.f.info(rb.src, sp)\n\tif info.size == 0 {\n\t\treturn 0\n\t}\n\tif s := rb.ss.next(info); s == ssStarter {\n\t\t// TODO: this could be removed if we don't support merging.\n\t\tif rb.nrune > 0 {\n\t\t\tgoto end\n\t\t}\n\t} else if s == ssOverflow {\n\t\trb.insertCGJ()\n\t\tgoto end\n\t}\n\tif err := rb.insertFlush(rb.src, sp, info); err != iSuccess {\n\t\treturn int(err)\n\t}\n\tfor {\n\t\tsp += int(info.size)\n\t\tif sp >= rb.nsrc {\n\t\t\tif !atEOF && !info.BoundaryAfter() {\n\t\t\t\treturn int(iShortSrc)\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\t\tinfo = rb.f.info(rb.src, sp)\n\t\tif info.size == 0 {\n\t\t\tif !atEOF {\n\t\t\t\treturn int(iShortSrc)\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\t\tif s := rb.ss.next(info); s == ssStarter {\n\t\t\tbreak\n\t\t} else if s == ssOverflow {\n\t\t\trb.insertCGJ()\n\t\t\tbreak\n\t\t}\n\t\tif err := rb.insertFlush(rb.src, sp, info); err != iSuccess {\n\t\t\treturn int(err)\n\t\t}\n\t}\nend:\n\tif !rb.doFlush() {\n\t\treturn int(iShortDst)\n\t}\n\treturn sp\n}\n\n// lastRuneStart returns the runeInfo and position of the last\n// rune in buf or the zero runeInfo and -1 if no rune was found.\nfunc lastRuneStart(fd *formInfo, buf []byte) (Properties, int) {\n\tp := len(buf) - 1\n\tfor ; p >= 0 && !utf8.RuneStart(buf[p]); p-- {\n\t}\n\tif p < 0 {\n\t\treturn Properties{}, -1\n\t}\n\treturn fd.info(inputBytes(buf), p), p\n}\n\n// decomposeToLastBoundary finds an open segment at the end of the buffer\n// and scans it into rb. Returns the buffer minus the last segment.\nfunc decomposeToLastBoundary(rb *reorderBuffer) {\n\tfd := &rb.f\n\tinfo, i := lastRuneStart(fd, rb.out)\n\tif int(info.size) != len(rb.out)-i {\n\t\t// illegal trailing continuation bytes\n\t\treturn\n\t}\n\tif info.BoundaryAfter() {\n\t\treturn\n\t}\n\tvar add [maxNonStarters + 1]Properties // stores runeInfo in reverse order\n\tpadd := 0\n\tss := streamSafe(0)\n\tp := len(rb.out)\n\tfor {\n\t\tadd[padd] = info\n\t\tv := ss.backwards(info)\n\t\tif v == ssOverflow {\n\t\t\t// Note that if we have an overflow, it the string we are appending to\n\t\t\t// is not correctly normalized. In this case the behavior is undefined.\n\t\t\tbreak\n\t\t}\n\t\tpadd++\n\t\tp -= int(info.size)\n\t\tif v == ssStarter || p < 0 {\n\t\t\tbreak\n\t\t}\n\t\tinfo, i = lastRuneStart(fd, rb.out[:p])\n\t\tif int(info.size) != p-i {\n\t\t\tbreak\n\t\t}\n\t}\n\trb.ss = ss\n\t// Copy bytes for insertion as we may need to overwrite rb.out.\n\tvar buf [maxBufferSize * utf8.UTFMax]byte\n\tcp := buf[:copy(buf[:], rb.out[p:])]\n\trb.out = rb.out[:p]\n\tfor padd--; padd >= 0; padd-- {\n\t\tinfo = add[padd]\n\t\trb.insertUnsafe(inputBytes(cp), 0, info)\n\t\tcp = cp[info.size:]\n\t}\n}\n"
  },
  {
    "path": "vendor/golang.org/x/text/unicode/norm/readwriter.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage norm\n\nimport \"io\"\n\ntype normWriter struct {\n\trb  reorderBuffer\n\tw   io.Writer\n\tbuf []byte\n}\n\n// Write implements the standard write interface.  If the last characters are\n// not at a normalization boundary, the bytes will be buffered for the next\n// write. The remaining bytes will be written on close.\nfunc (w *normWriter) Write(data []byte) (n int, err error) {\n\t// Process data in pieces to keep w.buf size bounded.\n\tconst chunk = 4000\n\n\tfor len(data) > 0 {\n\t\t// Normalize into w.buf.\n\t\tm := len(data)\n\t\tif m > chunk {\n\t\t\tm = chunk\n\t\t}\n\t\tw.rb.src = inputBytes(data[:m])\n\t\tw.rb.nsrc = m\n\t\tw.buf = doAppend(&w.rb, w.buf, 0)\n\t\tdata = data[m:]\n\t\tn += m\n\n\t\t// Write out complete prefix, save remainder.\n\t\t// Note that lastBoundary looks back at most 31 runes.\n\t\ti := lastBoundary(&w.rb.f, w.buf)\n\t\tif i == -1 {\n\t\t\ti = 0\n\t\t}\n\t\tif i > 0 {\n\t\t\tif _, err = w.w.Write(w.buf[:i]); err != nil {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tbn := copy(w.buf, w.buf[i:])\n\t\t\tw.buf = w.buf[:bn]\n\t\t}\n\t}\n\treturn n, err\n}\n\n// Close forces data that remains in the buffer to be written.\nfunc (w *normWriter) Close() error {\n\tif len(w.buf) > 0 {\n\t\t_, err := w.w.Write(w.buf)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// Writer returns a new writer that implements Write(b)\n// by writing f(b) to w. The returned writer may use an\n// internal buffer to maintain state across Write calls.\n// Calling its Close method writes any buffered data to w.\nfunc (f Form) Writer(w io.Writer) io.WriteCloser {\n\twr := &normWriter{rb: reorderBuffer{}, w: w}\n\twr.rb.init(f, nil)\n\treturn wr\n}\n\ntype normReader struct {\n\trb           reorderBuffer\n\tr            io.Reader\n\tinbuf        []byte\n\toutbuf       []byte\n\tbufStart     int\n\tlastBoundary int\n\terr          error\n}\n\n// Read implements the standard read interface.\nfunc (r *normReader) Read(p []byte) (int, error) {\n\tfor {\n\t\tif r.lastBoundary-r.bufStart > 0 {\n\t\t\tn := copy(p, r.outbuf[r.bufStart:r.lastBoundary])\n\t\t\tr.bufStart += n\n\t\t\tif r.lastBoundary-r.bufStart > 0 {\n\t\t\t\treturn n, nil\n\t\t\t}\n\t\t\treturn n, r.err\n\t\t}\n\t\tif r.err != nil {\n\t\t\treturn 0, r.err\n\t\t}\n\t\toutn := copy(r.outbuf, r.outbuf[r.lastBoundary:])\n\t\tr.outbuf = r.outbuf[0:outn]\n\t\tr.bufStart = 0\n\n\t\tn, err := r.r.Read(r.inbuf)\n\t\tr.rb.src = inputBytes(r.inbuf[0:n])\n\t\tr.rb.nsrc, r.err = n, err\n\t\tif n > 0 {\n\t\t\tr.outbuf = doAppend(&r.rb, r.outbuf, 0)\n\t\t}\n\t\tif err == io.EOF {\n\t\t\tr.lastBoundary = len(r.outbuf)\n\t\t} else {\n\t\t\tr.lastBoundary = lastBoundary(&r.rb.f, r.outbuf)\n\t\t\tif r.lastBoundary == -1 {\n\t\t\t\tr.lastBoundary = 0\n\t\t\t}\n\t\t}\n\t}\n}\n\n// Reader returns a new reader that implements Read\n// by reading data from r and returning f(data).\nfunc (f Form) Reader(r io.Reader) io.Reader {\n\tconst chunk = 4000\n\tbuf := make([]byte, chunk)\n\trr := &normReader{rb: reorderBuffer{}, r: r, inbuf: buf}\n\trr.rb.init(f, buf)\n\treturn rr\n}\n"
  },
  {
    "path": "vendor/golang.org/x/text/unicode/norm/tables10.0.0.go",
    "content": "// Code generated by running \"go generate\" in golang.org/x/text. DO NOT EDIT.\n\n// +build go1.10,!go1.13\n\npackage norm\n\nimport \"sync\"\n\nconst (\n\t// Version is the Unicode edition from which the tables are derived.\n\tVersion = \"10.0.0\"\n\n\t// MaxTransformChunkSize indicates the maximum number of bytes that Transform\n\t// may need to write atomically for any Form. Making a destination buffer at\n\t// least this size ensures that Transform can always make progress and that\n\t// the user does not need to grow the buffer on an ErrShortDst.\n\tMaxTransformChunkSize = 35 + maxNonStarters*4\n)\n\nvar ccc = [55]uint8{\n\t0, 1, 7, 8, 9, 10, 11, 12,\n\t13, 14, 15, 16, 17, 18, 19, 20,\n\t21, 22, 23, 24, 25, 26, 27, 28,\n\t29, 30, 31, 32, 33, 34, 35, 36,\n\t84, 91, 103, 107, 118, 122, 129, 130,\n\t132, 202, 214, 216, 218, 220, 222, 224,\n\t226, 228, 230, 232, 233, 234, 240,\n}\n\nconst (\n\tfirstMulti            = 0x186D\n\tfirstCCC              = 0x2C9E\n\tendMulti              = 0x2F60\n\tfirstLeadingCCC       = 0x49AE\n\tfirstCCCZeroExcept    = 0x4A78\n\tfirstStarterWithNLead = 0x4A9F\n\tlastDecomp            = 0x4AA1\n\tmaxDecomp             = 0x8000\n)\n\n// decomps: 19105 bytes\nvar decomps = [...]byte{\n\t// Bytes 0 - 3f\n\t0x00, 0x41, 0x20, 0x41, 0x21, 0x41, 0x22, 0x41,\n\t0x23, 0x41, 0x24, 0x41, 0x25, 0x41, 0x26, 0x41,\n\t0x27, 0x41, 0x28, 0x41, 0x29, 0x41, 0x2A, 0x41,\n\t0x2B, 0x41, 0x2C, 0x41, 0x2D, 0x41, 0x2E, 0x41,\n\t0x2F, 0x41, 0x30, 0x41, 0x31, 0x41, 0x32, 0x41,\n\t0x33, 0x41, 0x34, 0x41, 0x35, 0x41, 0x36, 0x41,\n\t0x37, 0x41, 0x38, 0x41, 0x39, 0x41, 0x3A, 0x41,\n\t0x3B, 0x41, 0x3C, 0x41, 0x3D, 0x41, 0x3E, 0x41,\n\t// Bytes 40 - 7f\n\t0x3F, 0x41, 0x40, 0x41, 0x41, 0x41, 0x42, 0x41,\n\t0x43, 0x41, 0x44, 0x41, 0x45, 0x41, 0x46, 0x41,\n\t0x47, 0x41, 0x48, 0x41, 0x49, 0x41, 0x4A, 0x41,\n\t0x4B, 0x41, 0x4C, 0x41, 0x4D, 0x41, 0x4E, 0x41,\n\t0x4F, 0x41, 0x50, 0x41, 0x51, 0x41, 0x52, 0x41,\n\t0x53, 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41,\n\t0x57, 0x41, 0x58, 0x41, 0x59, 0x41, 0x5A, 0x41,\n\t0x5B, 0x41, 0x5C, 0x41, 0x5D, 0x41, 0x5E, 0x41,\n\t// Bytes 80 - bf\n\t0x5F, 0x41, 0x60, 0x41, 0x61, 0x41, 0x62, 0x41,\n\t0x63, 0x41, 0x64, 0x41, 0x65, 0x41, 0x66, 0x41,\n\t0x67, 0x41, 0x68, 0x41, 0x69, 0x41, 0x6A, 0x41,\n\t0x6B, 0x41, 0x6C, 0x41, 0x6D, 0x41, 0x6E, 0x41,\n\t0x6F, 0x41, 0x70, 0x41, 0x71, 0x41, 0x72, 0x41,\n\t0x73, 0x41, 0x74, 0x41, 0x75, 0x41, 0x76, 0x41,\n\t0x77, 0x41, 0x78, 0x41, 0x79, 0x41, 0x7A, 0x41,\n\t0x7B, 0x41, 0x7C, 0x41, 0x7D, 0x41, 0x7E, 0x42,\n\t// Bytes c0 - ff\n\t0xC2, 0xA2, 0x42, 0xC2, 0xA3, 0x42, 0xC2, 0xA5,\n\t0x42, 0xC2, 0xA6, 0x42, 0xC2, 0xAC, 0x42, 0xC2,\n\t0xB7, 0x42, 0xC3, 0x86, 0x42, 0xC3, 0xB0, 0x42,\n\t0xC4, 0xA6, 0x42, 0xC4, 0xA7, 0x42, 0xC4, 0xB1,\n\t0x42, 0xC5, 0x8B, 0x42, 0xC5, 0x93, 0x42, 0xC6,\n\t0x8E, 0x42, 0xC6, 0x90, 0x42, 0xC6, 0xAB, 0x42,\n\t0xC8, 0xA2, 0x42, 0xC8, 0xB7, 0x42, 0xC9, 0x90,\n\t0x42, 0xC9, 0x91, 0x42, 0xC9, 0x92, 0x42, 0xC9,\n\t// Bytes 100 - 13f\n\t0x94, 0x42, 0xC9, 0x95, 0x42, 0xC9, 0x99, 0x42,\n\t0xC9, 0x9B, 0x42, 0xC9, 0x9C, 0x42, 0xC9, 0x9F,\n\t0x42, 0xC9, 0xA1, 0x42, 0xC9, 0xA3, 0x42, 0xC9,\n\t0xA5, 0x42, 0xC9, 0xA6, 0x42, 0xC9, 0xA8, 0x42,\n\t0xC9, 0xA9, 0x42, 0xC9, 0xAA, 0x42, 0xC9, 0xAB,\n\t0x42, 0xC9, 0xAD, 0x42, 0xC9, 0xAF, 0x42, 0xC9,\n\t0xB0, 0x42, 0xC9, 0xB1, 0x42, 0xC9, 0xB2, 0x42,\n\t0xC9, 0xB3, 0x42, 0xC9, 0xB4, 0x42, 0xC9, 0xB5,\n\t// Bytes 140 - 17f\n\t0x42, 0xC9, 0xB8, 0x42, 0xC9, 0xB9, 0x42, 0xC9,\n\t0xBB, 0x42, 0xCA, 0x81, 0x42, 0xCA, 0x82, 0x42,\n\t0xCA, 0x83, 0x42, 0xCA, 0x89, 0x42, 0xCA, 0x8A,\n\t0x42, 0xCA, 0x8B, 0x42, 0xCA, 0x8C, 0x42, 0xCA,\n\t0x90, 0x42, 0xCA, 0x91, 0x42, 0xCA, 0x92, 0x42,\n\t0xCA, 0x95, 0x42, 0xCA, 0x9D, 0x42, 0xCA, 0x9F,\n\t0x42, 0xCA, 0xB9, 0x42, 0xCE, 0x91, 0x42, 0xCE,\n\t0x92, 0x42, 0xCE, 0x93, 0x42, 0xCE, 0x94, 0x42,\n\t// Bytes 180 - 1bf\n\t0xCE, 0x95, 0x42, 0xCE, 0x96, 0x42, 0xCE, 0x97,\n\t0x42, 0xCE, 0x98, 0x42, 0xCE, 0x99, 0x42, 0xCE,\n\t0x9A, 0x42, 0xCE, 0x9B, 0x42, 0xCE, 0x9C, 0x42,\n\t0xCE, 0x9D, 0x42, 0xCE, 0x9E, 0x42, 0xCE, 0x9F,\n\t0x42, 0xCE, 0xA0, 0x42, 0xCE, 0xA1, 0x42, 0xCE,\n\t0xA3, 0x42, 0xCE, 0xA4, 0x42, 0xCE, 0xA5, 0x42,\n\t0xCE, 0xA6, 0x42, 0xCE, 0xA7, 0x42, 0xCE, 0xA8,\n\t0x42, 0xCE, 0xA9, 0x42, 0xCE, 0xB1, 0x42, 0xCE,\n\t// Bytes 1c0 - 1ff\n\t0xB2, 0x42, 0xCE, 0xB3, 0x42, 0xCE, 0xB4, 0x42,\n\t0xCE, 0xB5, 0x42, 0xCE, 0xB6, 0x42, 0xCE, 0xB7,\n\t0x42, 0xCE, 0xB8, 0x42, 0xCE, 0xB9, 0x42, 0xCE,\n\t0xBA, 0x42, 0xCE, 0xBB, 0x42, 0xCE, 0xBC, 0x42,\n\t0xCE, 0xBD, 0x42, 0xCE, 0xBE, 0x42, 0xCE, 0xBF,\n\t0x42, 0xCF, 0x80, 0x42, 0xCF, 0x81, 0x42, 0xCF,\n\t0x82, 0x42, 0xCF, 0x83, 0x42, 0xCF, 0x84, 0x42,\n\t0xCF, 0x85, 0x42, 0xCF, 0x86, 0x42, 0xCF, 0x87,\n\t// Bytes 200 - 23f\n\t0x42, 0xCF, 0x88, 0x42, 0xCF, 0x89, 0x42, 0xCF,\n\t0x9C, 0x42, 0xCF, 0x9D, 0x42, 0xD0, 0xBD, 0x42,\n\t0xD1, 0x8A, 0x42, 0xD1, 0x8C, 0x42, 0xD7, 0x90,\n\t0x42, 0xD7, 0x91, 0x42, 0xD7, 0x92, 0x42, 0xD7,\n\t0x93, 0x42, 0xD7, 0x94, 0x42, 0xD7, 0x9B, 0x42,\n\t0xD7, 0x9C, 0x42, 0xD7, 0x9D, 0x42, 0xD7, 0xA2,\n\t0x42, 0xD7, 0xA8, 0x42, 0xD7, 0xAA, 0x42, 0xD8,\n\t0xA1, 0x42, 0xD8, 0xA7, 0x42, 0xD8, 0xA8, 0x42,\n\t// Bytes 240 - 27f\n\t0xD8, 0xA9, 0x42, 0xD8, 0xAA, 0x42, 0xD8, 0xAB,\n\t0x42, 0xD8, 0xAC, 0x42, 0xD8, 0xAD, 0x42, 0xD8,\n\t0xAE, 0x42, 0xD8, 0xAF, 0x42, 0xD8, 0xB0, 0x42,\n\t0xD8, 0xB1, 0x42, 0xD8, 0xB2, 0x42, 0xD8, 0xB3,\n\t0x42, 0xD8, 0xB4, 0x42, 0xD8, 0xB5, 0x42, 0xD8,\n\t0xB6, 0x42, 0xD8, 0xB7, 0x42, 0xD8, 0xB8, 0x42,\n\t0xD8, 0xB9, 0x42, 0xD8, 0xBA, 0x42, 0xD9, 0x81,\n\t0x42, 0xD9, 0x82, 0x42, 0xD9, 0x83, 0x42, 0xD9,\n\t// Bytes 280 - 2bf\n\t0x84, 0x42, 0xD9, 0x85, 0x42, 0xD9, 0x86, 0x42,\n\t0xD9, 0x87, 0x42, 0xD9, 0x88, 0x42, 0xD9, 0x89,\n\t0x42, 0xD9, 0x8A, 0x42, 0xD9, 0xAE, 0x42, 0xD9,\n\t0xAF, 0x42, 0xD9, 0xB1, 0x42, 0xD9, 0xB9, 0x42,\n\t0xD9, 0xBA, 0x42, 0xD9, 0xBB, 0x42, 0xD9, 0xBE,\n\t0x42, 0xD9, 0xBF, 0x42, 0xDA, 0x80, 0x42, 0xDA,\n\t0x83, 0x42, 0xDA, 0x84, 0x42, 0xDA, 0x86, 0x42,\n\t0xDA, 0x87, 0x42, 0xDA, 0x88, 0x42, 0xDA, 0x8C,\n\t// Bytes 2c0 - 2ff\n\t0x42, 0xDA, 0x8D, 0x42, 0xDA, 0x8E, 0x42, 0xDA,\n\t0x91, 0x42, 0xDA, 0x98, 0x42, 0xDA, 0xA1, 0x42,\n\t0xDA, 0xA4, 0x42, 0xDA, 0xA6, 0x42, 0xDA, 0xA9,\n\t0x42, 0xDA, 0xAD, 0x42, 0xDA, 0xAF, 0x42, 0xDA,\n\t0xB1, 0x42, 0xDA, 0xB3, 0x42, 0xDA, 0xBA, 0x42,\n\t0xDA, 0xBB, 0x42, 0xDA, 0xBE, 0x42, 0xDB, 0x81,\n\t0x42, 0xDB, 0x85, 0x42, 0xDB, 0x86, 0x42, 0xDB,\n\t0x87, 0x42, 0xDB, 0x88, 0x42, 0xDB, 0x89, 0x42,\n\t// Bytes 300 - 33f\n\t0xDB, 0x8B, 0x42, 0xDB, 0x8C, 0x42, 0xDB, 0x90,\n\t0x42, 0xDB, 0x92, 0x43, 0xE0, 0xBC, 0x8B, 0x43,\n\t0xE1, 0x83, 0x9C, 0x43, 0xE1, 0x84, 0x80, 0x43,\n\t0xE1, 0x84, 0x81, 0x43, 0xE1, 0x84, 0x82, 0x43,\n\t0xE1, 0x84, 0x83, 0x43, 0xE1, 0x84, 0x84, 0x43,\n\t0xE1, 0x84, 0x85, 0x43, 0xE1, 0x84, 0x86, 0x43,\n\t0xE1, 0x84, 0x87, 0x43, 0xE1, 0x84, 0x88, 0x43,\n\t0xE1, 0x84, 0x89, 0x43, 0xE1, 0x84, 0x8A, 0x43,\n\t// Bytes 340 - 37f\n\t0xE1, 0x84, 0x8B, 0x43, 0xE1, 0x84, 0x8C, 0x43,\n\t0xE1, 0x84, 0x8D, 0x43, 0xE1, 0x84, 0x8E, 0x43,\n\t0xE1, 0x84, 0x8F, 0x43, 0xE1, 0x84, 0x90, 0x43,\n\t0xE1, 0x84, 0x91, 0x43, 0xE1, 0x84, 0x92, 0x43,\n\t0xE1, 0x84, 0x94, 0x43, 0xE1, 0x84, 0x95, 0x43,\n\t0xE1, 0x84, 0x9A, 0x43, 0xE1, 0x84, 0x9C, 0x43,\n\t0xE1, 0x84, 0x9D, 0x43, 0xE1, 0x84, 0x9E, 0x43,\n\t0xE1, 0x84, 0xA0, 0x43, 0xE1, 0x84, 0xA1, 0x43,\n\t// Bytes 380 - 3bf\n\t0xE1, 0x84, 0xA2, 0x43, 0xE1, 0x84, 0xA3, 0x43,\n\t0xE1, 0x84, 0xA7, 0x43, 0xE1, 0x84, 0xA9, 0x43,\n\t0xE1, 0x84, 0xAB, 0x43, 0xE1, 0x84, 0xAC, 0x43,\n\t0xE1, 0x84, 0xAD, 0x43, 0xE1, 0x84, 0xAE, 0x43,\n\t0xE1, 0x84, 0xAF, 0x43, 0xE1, 0x84, 0xB2, 0x43,\n\t0xE1, 0x84, 0xB6, 0x43, 0xE1, 0x85, 0x80, 0x43,\n\t0xE1, 0x85, 0x87, 0x43, 0xE1, 0x85, 0x8C, 0x43,\n\t0xE1, 0x85, 0x97, 0x43, 0xE1, 0x85, 0x98, 0x43,\n\t// Bytes 3c0 - 3ff\n\t0xE1, 0x85, 0x99, 0x43, 0xE1, 0x85, 0xA0, 0x43,\n\t0xE1, 0x86, 0x84, 0x43, 0xE1, 0x86, 0x85, 0x43,\n\t0xE1, 0x86, 0x88, 0x43, 0xE1, 0x86, 0x91, 0x43,\n\t0xE1, 0x86, 0x92, 0x43, 0xE1, 0x86, 0x94, 0x43,\n\t0xE1, 0x86, 0x9E, 0x43, 0xE1, 0x86, 0xA1, 0x43,\n\t0xE1, 0x87, 0x87, 0x43, 0xE1, 0x87, 0x88, 0x43,\n\t0xE1, 0x87, 0x8C, 0x43, 0xE1, 0x87, 0x8E, 0x43,\n\t0xE1, 0x87, 0x93, 0x43, 0xE1, 0x87, 0x97, 0x43,\n\t// Bytes 400 - 43f\n\t0xE1, 0x87, 0x99, 0x43, 0xE1, 0x87, 0x9D, 0x43,\n\t0xE1, 0x87, 0x9F, 0x43, 0xE1, 0x87, 0xB1, 0x43,\n\t0xE1, 0x87, 0xB2, 0x43, 0xE1, 0xB4, 0x82, 0x43,\n\t0xE1, 0xB4, 0x96, 0x43, 0xE1, 0xB4, 0x97, 0x43,\n\t0xE1, 0xB4, 0x9C, 0x43, 0xE1, 0xB4, 0x9D, 0x43,\n\t0xE1, 0xB4, 0xA5, 0x43, 0xE1, 0xB5, 0xBB, 0x43,\n\t0xE1, 0xB6, 0x85, 0x43, 0xE2, 0x80, 0x82, 0x43,\n\t0xE2, 0x80, 0x83, 0x43, 0xE2, 0x80, 0x90, 0x43,\n\t// Bytes 440 - 47f\n\t0xE2, 0x80, 0x93, 0x43, 0xE2, 0x80, 0x94, 0x43,\n\t0xE2, 0x82, 0xA9, 0x43, 0xE2, 0x86, 0x90, 0x43,\n\t0xE2, 0x86, 0x91, 0x43, 0xE2, 0x86, 0x92, 0x43,\n\t0xE2, 0x86, 0x93, 0x43, 0xE2, 0x88, 0x82, 0x43,\n\t0xE2, 0x88, 0x87, 0x43, 0xE2, 0x88, 0x91, 0x43,\n\t0xE2, 0x88, 0x92, 0x43, 0xE2, 0x94, 0x82, 0x43,\n\t0xE2, 0x96, 0xA0, 0x43, 0xE2, 0x97, 0x8B, 0x43,\n\t0xE2, 0xA6, 0x85, 0x43, 0xE2, 0xA6, 0x86, 0x43,\n\t// Bytes 480 - 4bf\n\t0xE2, 0xB5, 0xA1, 0x43, 0xE3, 0x80, 0x81, 0x43,\n\t0xE3, 0x80, 0x82, 0x43, 0xE3, 0x80, 0x88, 0x43,\n\t0xE3, 0x80, 0x89, 0x43, 0xE3, 0x80, 0x8A, 0x43,\n\t0xE3, 0x80, 0x8B, 0x43, 0xE3, 0x80, 0x8C, 0x43,\n\t0xE3, 0x80, 0x8D, 0x43, 0xE3, 0x80, 0x8E, 0x43,\n\t0xE3, 0x80, 0x8F, 0x43, 0xE3, 0x80, 0x90, 0x43,\n\t0xE3, 0x80, 0x91, 0x43, 0xE3, 0x80, 0x92, 0x43,\n\t0xE3, 0x80, 0x94, 0x43, 0xE3, 0x80, 0x95, 0x43,\n\t// Bytes 4c0 - 4ff\n\t0xE3, 0x80, 0x96, 0x43, 0xE3, 0x80, 0x97, 0x43,\n\t0xE3, 0x82, 0xA1, 0x43, 0xE3, 0x82, 0xA2, 0x43,\n\t0xE3, 0x82, 0xA3, 0x43, 0xE3, 0x82, 0xA4, 0x43,\n\t0xE3, 0x82, 0xA5, 0x43, 0xE3, 0x82, 0xA6, 0x43,\n\t0xE3, 0x82, 0xA7, 0x43, 0xE3, 0x82, 0xA8, 0x43,\n\t0xE3, 0x82, 0xA9, 0x43, 0xE3, 0x82, 0xAA, 0x43,\n\t0xE3, 0x82, 0xAB, 0x43, 0xE3, 0x82, 0xAD, 0x43,\n\t0xE3, 0x82, 0xAF, 0x43, 0xE3, 0x82, 0xB1, 0x43,\n\t// Bytes 500 - 53f\n\t0xE3, 0x82, 0xB3, 0x43, 0xE3, 0x82, 0xB5, 0x43,\n\t0xE3, 0x82, 0xB7, 0x43, 0xE3, 0x82, 0xB9, 0x43,\n\t0xE3, 0x82, 0xBB, 0x43, 0xE3, 0x82, 0xBD, 0x43,\n\t0xE3, 0x82, 0xBF, 0x43, 0xE3, 0x83, 0x81, 0x43,\n\t0xE3, 0x83, 0x83, 0x43, 0xE3, 0x83, 0x84, 0x43,\n\t0xE3, 0x83, 0x86, 0x43, 0xE3, 0x83, 0x88, 0x43,\n\t0xE3, 0x83, 0x8A, 0x43, 0xE3, 0x83, 0x8B, 0x43,\n\t0xE3, 0x83, 0x8C, 0x43, 0xE3, 0x83, 0x8D, 0x43,\n\t// Bytes 540 - 57f\n\t0xE3, 0x83, 0x8E, 0x43, 0xE3, 0x83, 0x8F, 0x43,\n\t0xE3, 0x83, 0x92, 0x43, 0xE3, 0x83, 0x95, 0x43,\n\t0xE3, 0x83, 0x98, 0x43, 0xE3, 0x83, 0x9B, 0x43,\n\t0xE3, 0x83, 0x9E, 0x43, 0xE3, 0x83, 0x9F, 0x43,\n\t0xE3, 0x83, 0xA0, 0x43, 0xE3, 0x83, 0xA1, 0x43,\n\t0xE3, 0x83, 0xA2, 0x43, 0xE3, 0x83, 0xA3, 0x43,\n\t0xE3, 0x83, 0xA4, 0x43, 0xE3, 0x83, 0xA5, 0x43,\n\t0xE3, 0x83, 0xA6, 0x43, 0xE3, 0x83, 0xA7, 0x43,\n\t// Bytes 580 - 5bf\n\t0xE3, 0x83, 0xA8, 0x43, 0xE3, 0x83, 0xA9, 0x43,\n\t0xE3, 0x83, 0xAA, 0x43, 0xE3, 0x83, 0xAB, 0x43,\n\t0xE3, 0x83, 0xAC, 0x43, 0xE3, 0x83, 0xAD, 0x43,\n\t0xE3, 0x83, 0xAF, 0x43, 0xE3, 0x83, 0xB0, 0x43,\n\t0xE3, 0x83, 0xB1, 0x43, 0xE3, 0x83, 0xB2, 0x43,\n\t0xE3, 0x83, 0xB3, 0x43, 0xE3, 0x83, 0xBB, 0x43,\n\t0xE3, 0x83, 0xBC, 0x43, 0xE3, 0x92, 0x9E, 0x43,\n\t0xE3, 0x92, 0xB9, 0x43, 0xE3, 0x92, 0xBB, 0x43,\n\t// Bytes 5c0 - 5ff\n\t0xE3, 0x93, 0x9F, 0x43, 0xE3, 0x94, 0x95, 0x43,\n\t0xE3, 0x9B, 0xAE, 0x43, 0xE3, 0x9B, 0xBC, 0x43,\n\t0xE3, 0x9E, 0x81, 0x43, 0xE3, 0xA0, 0xAF, 0x43,\n\t0xE3, 0xA1, 0xA2, 0x43, 0xE3, 0xA1, 0xBC, 0x43,\n\t0xE3, 0xA3, 0x87, 0x43, 0xE3, 0xA3, 0xA3, 0x43,\n\t0xE3, 0xA4, 0x9C, 0x43, 0xE3, 0xA4, 0xBA, 0x43,\n\t0xE3, 0xA8, 0xAE, 0x43, 0xE3, 0xA9, 0xAC, 0x43,\n\t0xE3, 0xAB, 0xA4, 0x43, 0xE3, 0xAC, 0x88, 0x43,\n\t// Bytes 600 - 63f\n\t0xE3, 0xAC, 0x99, 0x43, 0xE3, 0xAD, 0x89, 0x43,\n\t0xE3, 0xAE, 0x9D, 0x43, 0xE3, 0xB0, 0x98, 0x43,\n\t0xE3, 0xB1, 0x8E, 0x43, 0xE3, 0xB4, 0xB3, 0x43,\n\t0xE3, 0xB6, 0x96, 0x43, 0xE3, 0xBA, 0xAC, 0x43,\n\t0xE3, 0xBA, 0xB8, 0x43, 0xE3, 0xBC, 0x9B, 0x43,\n\t0xE3, 0xBF, 0xBC, 0x43, 0xE4, 0x80, 0x88, 0x43,\n\t0xE4, 0x80, 0x98, 0x43, 0xE4, 0x80, 0xB9, 0x43,\n\t0xE4, 0x81, 0x86, 0x43, 0xE4, 0x82, 0x96, 0x43,\n\t// Bytes 640 - 67f\n\t0xE4, 0x83, 0xA3, 0x43, 0xE4, 0x84, 0xAF, 0x43,\n\t0xE4, 0x88, 0x82, 0x43, 0xE4, 0x88, 0xA7, 0x43,\n\t0xE4, 0x8A, 0xA0, 0x43, 0xE4, 0x8C, 0x81, 0x43,\n\t0xE4, 0x8C, 0xB4, 0x43, 0xE4, 0x8D, 0x99, 0x43,\n\t0xE4, 0x8F, 0x95, 0x43, 0xE4, 0x8F, 0x99, 0x43,\n\t0xE4, 0x90, 0x8B, 0x43, 0xE4, 0x91, 0xAB, 0x43,\n\t0xE4, 0x94, 0xAB, 0x43, 0xE4, 0x95, 0x9D, 0x43,\n\t0xE4, 0x95, 0xA1, 0x43, 0xE4, 0x95, 0xAB, 0x43,\n\t// Bytes 680 - 6bf\n\t0xE4, 0x97, 0x97, 0x43, 0xE4, 0x97, 0xB9, 0x43,\n\t0xE4, 0x98, 0xB5, 0x43, 0xE4, 0x9A, 0xBE, 0x43,\n\t0xE4, 0x9B, 0x87, 0x43, 0xE4, 0xA6, 0x95, 0x43,\n\t0xE4, 0xA7, 0xA6, 0x43, 0xE4, 0xA9, 0xAE, 0x43,\n\t0xE4, 0xA9, 0xB6, 0x43, 0xE4, 0xAA, 0xB2, 0x43,\n\t0xE4, 0xAC, 0xB3, 0x43, 0xE4, 0xAF, 0x8E, 0x43,\n\t0xE4, 0xB3, 0x8E, 0x43, 0xE4, 0xB3, 0xAD, 0x43,\n\t0xE4, 0xB3, 0xB8, 0x43, 0xE4, 0xB5, 0x96, 0x43,\n\t// Bytes 6c0 - 6ff\n\t0xE4, 0xB8, 0x80, 0x43, 0xE4, 0xB8, 0x81, 0x43,\n\t0xE4, 0xB8, 0x83, 0x43, 0xE4, 0xB8, 0x89, 0x43,\n\t0xE4, 0xB8, 0x8A, 0x43, 0xE4, 0xB8, 0x8B, 0x43,\n\t0xE4, 0xB8, 0x8D, 0x43, 0xE4, 0xB8, 0x99, 0x43,\n\t0xE4, 0xB8, 0xA6, 0x43, 0xE4, 0xB8, 0xA8, 0x43,\n\t0xE4, 0xB8, 0xAD, 0x43, 0xE4, 0xB8, 0xB2, 0x43,\n\t0xE4, 0xB8, 0xB6, 0x43, 0xE4, 0xB8, 0xB8, 0x43,\n\t0xE4, 0xB8, 0xB9, 0x43, 0xE4, 0xB8, 0xBD, 0x43,\n\t// Bytes 700 - 73f\n\t0xE4, 0xB8, 0xBF, 0x43, 0xE4, 0xB9, 0x81, 0x43,\n\t0xE4, 0xB9, 0x99, 0x43, 0xE4, 0xB9, 0x9D, 0x43,\n\t0xE4, 0xBA, 0x82, 0x43, 0xE4, 0xBA, 0x85, 0x43,\n\t0xE4, 0xBA, 0x86, 0x43, 0xE4, 0xBA, 0x8C, 0x43,\n\t0xE4, 0xBA, 0x94, 0x43, 0xE4, 0xBA, 0xA0, 0x43,\n\t0xE4, 0xBA, 0xA4, 0x43, 0xE4, 0xBA, 0xAE, 0x43,\n\t0xE4, 0xBA, 0xBA, 0x43, 0xE4, 0xBB, 0x80, 0x43,\n\t0xE4, 0xBB, 0x8C, 0x43, 0xE4, 0xBB, 0xA4, 0x43,\n\t// Bytes 740 - 77f\n\t0xE4, 0xBC, 0x81, 0x43, 0xE4, 0xBC, 0x91, 0x43,\n\t0xE4, 0xBD, 0xA0, 0x43, 0xE4, 0xBE, 0x80, 0x43,\n\t0xE4, 0xBE, 0x86, 0x43, 0xE4, 0xBE, 0x8B, 0x43,\n\t0xE4, 0xBE, 0xAE, 0x43, 0xE4, 0xBE, 0xBB, 0x43,\n\t0xE4, 0xBE, 0xBF, 0x43, 0xE5, 0x80, 0x82, 0x43,\n\t0xE5, 0x80, 0xAB, 0x43, 0xE5, 0x81, 0xBA, 0x43,\n\t0xE5, 0x82, 0x99, 0x43, 0xE5, 0x83, 0x8F, 0x43,\n\t0xE5, 0x83, 0x9A, 0x43, 0xE5, 0x83, 0xA7, 0x43,\n\t// Bytes 780 - 7bf\n\t0xE5, 0x84, 0xAA, 0x43, 0xE5, 0x84, 0xBF, 0x43,\n\t0xE5, 0x85, 0x80, 0x43, 0xE5, 0x85, 0x85, 0x43,\n\t0xE5, 0x85, 0x8D, 0x43, 0xE5, 0x85, 0x94, 0x43,\n\t0xE5, 0x85, 0xA4, 0x43, 0xE5, 0x85, 0xA5, 0x43,\n\t0xE5, 0x85, 0xA7, 0x43, 0xE5, 0x85, 0xA8, 0x43,\n\t0xE5, 0x85, 0xA9, 0x43, 0xE5, 0x85, 0xAB, 0x43,\n\t0xE5, 0x85, 0xAD, 0x43, 0xE5, 0x85, 0xB7, 0x43,\n\t0xE5, 0x86, 0x80, 0x43, 0xE5, 0x86, 0x82, 0x43,\n\t// Bytes 7c0 - 7ff\n\t0xE5, 0x86, 0x8D, 0x43, 0xE5, 0x86, 0x92, 0x43,\n\t0xE5, 0x86, 0x95, 0x43, 0xE5, 0x86, 0x96, 0x43,\n\t0xE5, 0x86, 0x97, 0x43, 0xE5, 0x86, 0x99, 0x43,\n\t0xE5, 0x86, 0xA4, 0x43, 0xE5, 0x86, 0xAB, 0x43,\n\t0xE5, 0x86, 0xAC, 0x43, 0xE5, 0x86, 0xB5, 0x43,\n\t0xE5, 0x86, 0xB7, 0x43, 0xE5, 0x87, 0x89, 0x43,\n\t0xE5, 0x87, 0x8C, 0x43, 0xE5, 0x87, 0x9C, 0x43,\n\t0xE5, 0x87, 0x9E, 0x43, 0xE5, 0x87, 0xA0, 0x43,\n\t// Bytes 800 - 83f\n\t0xE5, 0x87, 0xB5, 0x43, 0xE5, 0x88, 0x80, 0x43,\n\t0xE5, 0x88, 0x83, 0x43, 0xE5, 0x88, 0x87, 0x43,\n\t0xE5, 0x88, 0x97, 0x43, 0xE5, 0x88, 0x9D, 0x43,\n\t0xE5, 0x88, 0xA9, 0x43, 0xE5, 0x88, 0xBA, 0x43,\n\t0xE5, 0x88, 0xBB, 0x43, 0xE5, 0x89, 0x86, 0x43,\n\t0xE5, 0x89, 0x8D, 0x43, 0xE5, 0x89, 0xB2, 0x43,\n\t0xE5, 0x89, 0xB7, 0x43, 0xE5, 0x8A, 0x89, 0x43,\n\t0xE5, 0x8A, 0x9B, 0x43, 0xE5, 0x8A, 0xA3, 0x43,\n\t// Bytes 840 - 87f\n\t0xE5, 0x8A, 0xB3, 0x43, 0xE5, 0x8A, 0xB4, 0x43,\n\t0xE5, 0x8B, 0x87, 0x43, 0xE5, 0x8B, 0x89, 0x43,\n\t0xE5, 0x8B, 0x92, 0x43, 0xE5, 0x8B, 0x9E, 0x43,\n\t0xE5, 0x8B, 0xA4, 0x43, 0xE5, 0x8B, 0xB5, 0x43,\n\t0xE5, 0x8B, 0xB9, 0x43, 0xE5, 0x8B, 0xBA, 0x43,\n\t0xE5, 0x8C, 0x85, 0x43, 0xE5, 0x8C, 0x86, 0x43,\n\t0xE5, 0x8C, 0x95, 0x43, 0xE5, 0x8C, 0x97, 0x43,\n\t0xE5, 0x8C, 0x9A, 0x43, 0xE5, 0x8C, 0xB8, 0x43,\n\t// Bytes 880 - 8bf\n\t0xE5, 0x8C, 0xBB, 0x43, 0xE5, 0x8C, 0xBF, 0x43,\n\t0xE5, 0x8D, 0x81, 0x43, 0xE5, 0x8D, 0x84, 0x43,\n\t0xE5, 0x8D, 0x85, 0x43, 0xE5, 0x8D, 0x89, 0x43,\n\t0xE5, 0x8D, 0x91, 0x43, 0xE5, 0x8D, 0x94, 0x43,\n\t0xE5, 0x8D, 0x9A, 0x43, 0xE5, 0x8D, 0x9C, 0x43,\n\t0xE5, 0x8D, 0xA9, 0x43, 0xE5, 0x8D, 0xB0, 0x43,\n\t0xE5, 0x8D, 0xB3, 0x43, 0xE5, 0x8D, 0xB5, 0x43,\n\t0xE5, 0x8D, 0xBD, 0x43, 0xE5, 0x8D, 0xBF, 0x43,\n\t// Bytes 8c0 - 8ff\n\t0xE5, 0x8E, 0x82, 0x43, 0xE5, 0x8E, 0xB6, 0x43,\n\t0xE5, 0x8F, 0x83, 0x43, 0xE5, 0x8F, 0x88, 0x43,\n\t0xE5, 0x8F, 0x8A, 0x43, 0xE5, 0x8F, 0x8C, 0x43,\n\t0xE5, 0x8F, 0x9F, 0x43, 0xE5, 0x8F, 0xA3, 0x43,\n\t0xE5, 0x8F, 0xA5, 0x43, 0xE5, 0x8F, 0xAB, 0x43,\n\t0xE5, 0x8F, 0xAF, 0x43, 0xE5, 0x8F, 0xB1, 0x43,\n\t0xE5, 0x8F, 0xB3, 0x43, 0xE5, 0x90, 0x86, 0x43,\n\t0xE5, 0x90, 0x88, 0x43, 0xE5, 0x90, 0x8D, 0x43,\n\t// Bytes 900 - 93f\n\t0xE5, 0x90, 0x8F, 0x43, 0xE5, 0x90, 0x9D, 0x43,\n\t0xE5, 0x90, 0xB8, 0x43, 0xE5, 0x90, 0xB9, 0x43,\n\t0xE5, 0x91, 0x82, 0x43, 0xE5, 0x91, 0x88, 0x43,\n\t0xE5, 0x91, 0xA8, 0x43, 0xE5, 0x92, 0x9E, 0x43,\n\t0xE5, 0x92, 0xA2, 0x43, 0xE5, 0x92, 0xBD, 0x43,\n\t0xE5, 0x93, 0xB6, 0x43, 0xE5, 0x94, 0x90, 0x43,\n\t0xE5, 0x95, 0x8F, 0x43, 0xE5, 0x95, 0x93, 0x43,\n\t0xE5, 0x95, 0x95, 0x43, 0xE5, 0x95, 0xA3, 0x43,\n\t// Bytes 940 - 97f\n\t0xE5, 0x96, 0x84, 0x43, 0xE5, 0x96, 0x87, 0x43,\n\t0xE5, 0x96, 0x99, 0x43, 0xE5, 0x96, 0x9D, 0x43,\n\t0xE5, 0x96, 0xAB, 0x43, 0xE5, 0x96, 0xB3, 0x43,\n\t0xE5, 0x96, 0xB6, 0x43, 0xE5, 0x97, 0x80, 0x43,\n\t0xE5, 0x97, 0x82, 0x43, 0xE5, 0x97, 0xA2, 0x43,\n\t0xE5, 0x98, 0x86, 0x43, 0xE5, 0x99, 0x91, 0x43,\n\t0xE5, 0x99, 0xA8, 0x43, 0xE5, 0x99, 0xB4, 0x43,\n\t0xE5, 0x9B, 0x97, 0x43, 0xE5, 0x9B, 0x9B, 0x43,\n\t// Bytes 980 - 9bf\n\t0xE5, 0x9B, 0xB9, 0x43, 0xE5, 0x9C, 0x96, 0x43,\n\t0xE5, 0x9C, 0x97, 0x43, 0xE5, 0x9C, 0x9F, 0x43,\n\t0xE5, 0x9C, 0xB0, 0x43, 0xE5, 0x9E, 0x8B, 0x43,\n\t0xE5, 0x9F, 0x8E, 0x43, 0xE5, 0x9F, 0xB4, 0x43,\n\t0xE5, 0xA0, 0x8D, 0x43, 0xE5, 0xA0, 0xB1, 0x43,\n\t0xE5, 0xA0, 0xB2, 0x43, 0xE5, 0xA1, 0x80, 0x43,\n\t0xE5, 0xA1, 0x9A, 0x43, 0xE5, 0xA1, 0x9E, 0x43,\n\t0xE5, 0xA2, 0xA8, 0x43, 0xE5, 0xA2, 0xAC, 0x43,\n\t// Bytes 9c0 - 9ff\n\t0xE5, 0xA2, 0xB3, 0x43, 0xE5, 0xA3, 0x98, 0x43,\n\t0xE5, 0xA3, 0x9F, 0x43, 0xE5, 0xA3, 0xAB, 0x43,\n\t0xE5, 0xA3, 0xAE, 0x43, 0xE5, 0xA3, 0xB0, 0x43,\n\t0xE5, 0xA3, 0xB2, 0x43, 0xE5, 0xA3, 0xB7, 0x43,\n\t0xE5, 0xA4, 0x82, 0x43, 0xE5, 0xA4, 0x86, 0x43,\n\t0xE5, 0xA4, 0x8A, 0x43, 0xE5, 0xA4, 0x95, 0x43,\n\t0xE5, 0xA4, 0x9A, 0x43, 0xE5, 0xA4, 0x9C, 0x43,\n\t0xE5, 0xA4, 0xA2, 0x43, 0xE5, 0xA4, 0xA7, 0x43,\n\t// Bytes a00 - a3f\n\t0xE5, 0xA4, 0xA9, 0x43, 0xE5, 0xA5, 0x84, 0x43,\n\t0xE5, 0xA5, 0x88, 0x43, 0xE5, 0xA5, 0x91, 0x43,\n\t0xE5, 0xA5, 0x94, 0x43, 0xE5, 0xA5, 0xA2, 0x43,\n\t0xE5, 0xA5, 0xB3, 0x43, 0xE5, 0xA7, 0x98, 0x43,\n\t0xE5, 0xA7, 0xAC, 0x43, 0xE5, 0xA8, 0x9B, 0x43,\n\t0xE5, 0xA8, 0xA7, 0x43, 0xE5, 0xA9, 0xA2, 0x43,\n\t0xE5, 0xA9, 0xA6, 0x43, 0xE5, 0xAA, 0xB5, 0x43,\n\t0xE5, 0xAC, 0x88, 0x43, 0xE5, 0xAC, 0xA8, 0x43,\n\t// Bytes a40 - a7f\n\t0xE5, 0xAC, 0xBE, 0x43, 0xE5, 0xAD, 0x90, 0x43,\n\t0xE5, 0xAD, 0x97, 0x43, 0xE5, 0xAD, 0xA6, 0x43,\n\t0xE5, 0xAE, 0x80, 0x43, 0xE5, 0xAE, 0x85, 0x43,\n\t0xE5, 0xAE, 0x97, 0x43, 0xE5, 0xAF, 0x83, 0x43,\n\t0xE5, 0xAF, 0x98, 0x43, 0xE5, 0xAF, 0xA7, 0x43,\n\t0xE5, 0xAF, 0xAE, 0x43, 0xE5, 0xAF, 0xB3, 0x43,\n\t0xE5, 0xAF, 0xB8, 0x43, 0xE5, 0xAF, 0xBF, 0x43,\n\t0xE5, 0xB0, 0x86, 0x43, 0xE5, 0xB0, 0x8F, 0x43,\n\t// Bytes a80 - abf\n\t0xE5, 0xB0, 0xA2, 0x43, 0xE5, 0xB0, 0xB8, 0x43,\n\t0xE5, 0xB0, 0xBF, 0x43, 0xE5, 0xB1, 0xA0, 0x43,\n\t0xE5, 0xB1, 0xA2, 0x43, 0xE5, 0xB1, 0xA4, 0x43,\n\t0xE5, 0xB1, 0xA5, 0x43, 0xE5, 0xB1, 0xAE, 0x43,\n\t0xE5, 0xB1, 0xB1, 0x43, 0xE5, 0xB2, 0x8D, 0x43,\n\t0xE5, 0xB3, 0x80, 0x43, 0xE5, 0xB4, 0x99, 0x43,\n\t0xE5, 0xB5, 0x83, 0x43, 0xE5, 0xB5, 0x90, 0x43,\n\t0xE5, 0xB5, 0xAB, 0x43, 0xE5, 0xB5, 0xAE, 0x43,\n\t// Bytes ac0 - aff\n\t0xE5, 0xB5, 0xBC, 0x43, 0xE5, 0xB6, 0xB2, 0x43,\n\t0xE5, 0xB6, 0xBA, 0x43, 0xE5, 0xB7, 0x9B, 0x43,\n\t0xE5, 0xB7, 0xA1, 0x43, 0xE5, 0xB7, 0xA2, 0x43,\n\t0xE5, 0xB7, 0xA5, 0x43, 0xE5, 0xB7, 0xA6, 0x43,\n\t0xE5, 0xB7, 0xB1, 0x43, 0xE5, 0xB7, 0xBD, 0x43,\n\t0xE5, 0xB7, 0xBE, 0x43, 0xE5, 0xB8, 0xA8, 0x43,\n\t0xE5, 0xB8, 0xBD, 0x43, 0xE5, 0xB9, 0xA9, 0x43,\n\t0xE5, 0xB9, 0xB2, 0x43, 0xE5, 0xB9, 0xB4, 0x43,\n\t// Bytes b00 - b3f\n\t0xE5, 0xB9, 0xBA, 0x43, 0xE5, 0xB9, 0xBC, 0x43,\n\t0xE5, 0xB9, 0xBF, 0x43, 0xE5, 0xBA, 0xA6, 0x43,\n\t0xE5, 0xBA, 0xB0, 0x43, 0xE5, 0xBA, 0xB3, 0x43,\n\t0xE5, 0xBA, 0xB6, 0x43, 0xE5, 0xBB, 0x89, 0x43,\n\t0xE5, 0xBB, 0x8A, 0x43, 0xE5, 0xBB, 0x92, 0x43,\n\t0xE5, 0xBB, 0x93, 0x43, 0xE5, 0xBB, 0x99, 0x43,\n\t0xE5, 0xBB, 0xAC, 0x43, 0xE5, 0xBB, 0xB4, 0x43,\n\t0xE5, 0xBB, 0xBE, 0x43, 0xE5, 0xBC, 0x84, 0x43,\n\t// Bytes b40 - b7f\n\t0xE5, 0xBC, 0x8B, 0x43, 0xE5, 0xBC, 0x93, 0x43,\n\t0xE5, 0xBC, 0xA2, 0x43, 0xE5, 0xBD, 0x90, 0x43,\n\t0xE5, 0xBD, 0x93, 0x43, 0xE5, 0xBD, 0xA1, 0x43,\n\t0xE5, 0xBD, 0xA2, 0x43, 0xE5, 0xBD, 0xA9, 0x43,\n\t0xE5, 0xBD, 0xAB, 0x43, 0xE5, 0xBD, 0xB3, 0x43,\n\t0xE5, 0xBE, 0x8B, 0x43, 0xE5, 0xBE, 0x8C, 0x43,\n\t0xE5, 0xBE, 0x97, 0x43, 0xE5, 0xBE, 0x9A, 0x43,\n\t0xE5, 0xBE, 0xA9, 0x43, 0xE5, 0xBE, 0xAD, 0x43,\n\t// Bytes b80 - bbf\n\t0xE5, 0xBF, 0x83, 0x43, 0xE5, 0xBF, 0x8D, 0x43,\n\t0xE5, 0xBF, 0x97, 0x43, 0xE5, 0xBF, 0xB5, 0x43,\n\t0xE5, 0xBF, 0xB9, 0x43, 0xE6, 0x80, 0x92, 0x43,\n\t0xE6, 0x80, 0x9C, 0x43, 0xE6, 0x81, 0xB5, 0x43,\n\t0xE6, 0x82, 0x81, 0x43, 0xE6, 0x82, 0x94, 0x43,\n\t0xE6, 0x83, 0x87, 0x43, 0xE6, 0x83, 0x98, 0x43,\n\t0xE6, 0x83, 0xA1, 0x43, 0xE6, 0x84, 0x88, 0x43,\n\t0xE6, 0x85, 0x84, 0x43, 0xE6, 0x85, 0x88, 0x43,\n\t// Bytes bc0 - bff\n\t0xE6, 0x85, 0x8C, 0x43, 0xE6, 0x85, 0x8E, 0x43,\n\t0xE6, 0x85, 0xA0, 0x43, 0xE6, 0x85, 0xA8, 0x43,\n\t0xE6, 0x85, 0xBA, 0x43, 0xE6, 0x86, 0x8E, 0x43,\n\t0xE6, 0x86, 0x90, 0x43, 0xE6, 0x86, 0xA4, 0x43,\n\t0xE6, 0x86, 0xAF, 0x43, 0xE6, 0x86, 0xB2, 0x43,\n\t0xE6, 0x87, 0x9E, 0x43, 0xE6, 0x87, 0xB2, 0x43,\n\t0xE6, 0x87, 0xB6, 0x43, 0xE6, 0x88, 0x80, 0x43,\n\t0xE6, 0x88, 0x88, 0x43, 0xE6, 0x88, 0x90, 0x43,\n\t// Bytes c00 - c3f\n\t0xE6, 0x88, 0x9B, 0x43, 0xE6, 0x88, 0xAE, 0x43,\n\t0xE6, 0x88, 0xB4, 0x43, 0xE6, 0x88, 0xB6, 0x43,\n\t0xE6, 0x89, 0x8B, 0x43, 0xE6, 0x89, 0x93, 0x43,\n\t0xE6, 0x89, 0x9D, 0x43, 0xE6, 0x8A, 0x95, 0x43,\n\t0xE6, 0x8A, 0xB1, 0x43, 0xE6, 0x8B, 0x89, 0x43,\n\t0xE6, 0x8B, 0x8F, 0x43, 0xE6, 0x8B, 0x93, 0x43,\n\t0xE6, 0x8B, 0x94, 0x43, 0xE6, 0x8B, 0xBC, 0x43,\n\t0xE6, 0x8B, 0xBE, 0x43, 0xE6, 0x8C, 0x87, 0x43,\n\t// Bytes c40 - c7f\n\t0xE6, 0x8C, 0xBD, 0x43, 0xE6, 0x8D, 0x90, 0x43,\n\t0xE6, 0x8D, 0x95, 0x43, 0xE6, 0x8D, 0xA8, 0x43,\n\t0xE6, 0x8D, 0xBB, 0x43, 0xE6, 0x8E, 0x83, 0x43,\n\t0xE6, 0x8E, 0xA0, 0x43, 0xE6, 0x8E, 0xA9, 0x43,\n\t0xE6, 0x8F, 0x84, 0x43, 0xE6, 0x8F, 0x85, 0x43,\n\t0xE6, 0x8F, 0xA4, 0x43, 0xE6, 0x90, 0x9C, 0x43,\n\t0xE6, 0x90, 0xA2, 0x43, 0xE6, 0x91, 0x92, 0x43,\n\t0xE6, 0x91, 0xA9, 0x43, 0xE6, 0x91, 0xB7, 0x43,\n\t// Bytes c80 - cbf\n\t0xE6, 0x91, 0xBE, 0x43, 0xE6, 0x92, 0x9A, 0x43,\n\t0xE6, 0x92, 0x9D, 0x43, 0xE6, 0x93, 0x84, 0x43,\n\t0xE6, 0x94, 0xAF, 0x43, 0xE6, 0x94, 0xB4, 0x43,\n\t0xE6, 0x95, 0x8F, 0x43, 0xE6, 0x95, 0x96, 0x43,\n\t0xE6, 0x95, 0xAC, 0x43, 0xE6, 0x95, 0xB8, 0x43,\n\t0xE6, 0x96, 0x87, 0x43, 0xE6, 0x96, 0x97, 0x43,\n\t0xE6, 0x96, 0x99, 0x43, 0xE6, 0x96, 0xA4, 0x43,\n\t0xE6, 0x96, 0xB0, 0x43, 0xE6, 0x96, 0xB9, 0x43,\n\t// Bytes cc0 - cff\n\t0xE6, 0x97, 0x85, 0x43, 0xE6, 0x97, 0xA0, 0x43,\n\t0xE6, 0x97, 0xA2, 0x43, 0xE6, 0x97, 0xA3, 0x43,\n\t0xE6, 0x97, 0xA5, 0x43, 0xE6, 0x98, 0x93, 0x43,\n\t0xE6, 0x98, 0xA0, 0x43, 0xE6, 0x99, 0x89, 0x43,\n\t0xE6, 0x99, 0xB4, 0x43, 0xE6, 0x9A, 0x88, 0x43,\n\t0xE6, 0x9A, 0x91, 0x43, 0xE6, 0x9A, 0x9C, 0x43,\n\t0xE6, 0x9A, 0xB4, 0x43, 0xE6, 0x9B, 0x86, 0x43,\n\t0xE6, 0x9B, 0xB0, 0x43, 0xE6, 0x9B, 0xB4, 0x43,\n\t// Bytes d00 - d3f\n\t0xE6, 0x9B, 0xB8, 0x43, 0xE6, 0x9C, 0x80, 0x43,\n\t0xE6, 0x9C, 0x88, 0x43, 0xE6, 0x9C, 0x89, 0x43,\n\t0xE6, 0x9C, 0x97, 0x43, 0xE6, 0x9C, 0x9B, 0x43,\n\t0xE6, 0x9C, 0xA1, 0x43, 0xE6, 0x9C, 0xA8, 0x43,\n\t0xE6, 0x9D, 0x8E, 0x43, 0xE6, 0x9D, 0x93, 0x43,\n\t0xE6, 0x9D, 0x96, 0x43, 0xE6, 0x9D, 0x9E, 0x43,\n\t0xE6, 0x9D, 0xBB, 0x43, 0xE6, 0x9E, 0x85, 0x43,\n\t0xE6, 0x9E, 0x97, 0x43, 0xE6, 0x9F, 0xB3, 0x43,\n\t// Bytes d40 - d7f\n\t0xE6, 0x9F, 0xBA, 0x43, 0xE6, 0xA0, 0x97, 0x43,\n\t0xE6, 0xA0, 0x9F, 0x43, 0xE6, 0xA0, 0xAA, 0x43,\n\t0xE6, 0xA1, 0x92, 0x43, 0xE6, 0xA2, 0x81, 0x43,\n\t0xE6, 0xA2, 0x85, 0x43, 0xE6, 0xA2, 0x8E, 0x43,\n\t0xE6, 0xA2, 0xA8, 0x43, 0xE6, 0xA4, 0x94, 0x43,\n\t0xE6, 0xA5, 0x82, 0x43, 0xE6, 0xA6, 0xA3, 0x43,\n\t0xE6, 0xA7, 0xAA, 0x43, 0xE6, 0xA8, 0x82, 0x43,\n\t0xE6, 0xA8, 0x93, 0x43, 0xE6, 0xAA, 0xA8, 0x43,\n\t// Bytes d80 - dbf\n\t0xE6, 0xAB, 0x93, 0x43, 0xE6, 0xAB, 0x9B, 0x43,\n\t0xE6, 0xAC, 0x84, 0x43, 0xE6, 0xAC, 0xA0, 0x43,\n\t0xE6, 0xAC, 0xA1, 0x43, 0xE6, 0xAD, 0x94, 0x43,\n\t0xE6, 0xAD, 0xA2, 0x43, 0xE6, 0xAD, 0xA3, 0x43,\n\t0xE6, 0xAD, 0xB2, 0x43, 0xE6, 0xAD, 0xB7, 0x43,\n\t0xE6, 0xAD, 0xB9, 0x43, 0xE6, 0xAE, 0x9F, 0x43,\n\t0xE6, 0xAE, 0xAE, 0x43, 0xE6, 0xAE, 0xB3, 0x43,\n\t0xE6, 0xAE, 0xBA, 0x43, 0xE6, 0xAE, 0xBB, 0x43,\n\t// Bytes dc0 - dff\n\t0xE6, 0xAF, 0x8B, 0x43, 0xE6, 0xAF, 0x8D, 0x43,\n\t0xE6, 0xAF, 0x94, 0x43, 0xE6, 0xAF, 0x9B, 0x43,\n\t0xE6, 0xB0, 0x8F, 0x43, 0xE6, 0xB0, 0x94, 0x43,\n\t0xE6, 0xB0, 0xB4, 0x43, 0xE6, 0xB1, 0x8E, 0x43,\n\t0xE6, 0xB1, 0xA7, 0x43, 0xE6, 0xB2, 0x88, 0x43,\n\t0xE6, 0xB2, 0xBF, 0x43, 0xE6, 0xB3, 0x8C, 0x43,\n\t0xE6, 0xB3, 0x8D, 0x43, 0xE6, 0xB3, 0xA5, 0x43,\n\t0xE6, 0xB3, 0xA8, 0x43, 0xE6, 0xB4, 0x96, 0x43,\n\t// Bytes e00 - e3f\n\t0xE6, 0xB4, 0x9B, 0x43, 0xE6, 0xB4, 0x9E, 0x43,\n\t0xE6, 0xB4, 0xB4, 0x43, 0xE6, 0xB4, 0xBE, 0x43,\n\t0xE6, 0xB5, 0x81, 0x43, 0xE6, 0xB5, 0xA9, 0x43,\n\t0xE6, 0xB5, 0xAA, 0x43, 0xE6, 0xB5, 0xB7, 0x43,\n\t0xE6, 0xB5, 0xB8, 0x43, 0xE6, 0xB6, 0x85, 0x43,\n\t0xE6, 0xB7, 0x8B, 0x43, 0xE6, 0xB7, 0x9A, 0x43,\n\t0xE6, 0xB7, 0xAA, 0x43, 0xE6, 0xB7, 0xB9, 0x43,\n\t0xE6, 0xB8, 0x9A, 0x43, 0xE6, 0xB8, 0xAF, 0x43,\n\t// Bytes e40 - e7f\n\t0xE6, 0xB9, 0xAE, 0x43, 0xE6, 0xBA, 0x80, 0x43,\n\t0xE6, 0xBA, 0x9C, 0x43, 0xE6, 0xBA, 0xBA, 0x43,\n\t0xE6, 0xBB, 0x87, 0x43, 0xE6, 0xBB, 0x8B, 0x43,\n\t0xE6, 0xBB, 0x91, 0x43, 0xE6, 0xBB, 0x9B, 0x43,\n\t0xE6, 0xBC, 0x8F, 0x43, 0xE6, 0xBC, 0x94, 0x43,\n\t0xE6, 0xBC, 0xA2, 0x43, 0xE6, 0xBC, 0xA3, 0x43,\n\t0xE6, 0xBD, 0xAE, 0x43, 0xE6, 0xBF, 0x86, 0x43,\n\t0xE6, 0xBF, 0xAB, 0x43, 0xE6, 0xBF, 0xBE, 0x43,\n\t// Bytes e80 - ebf\n\t0xE7, 0x80, 0x9B, 0x43, 0xE7, 0x80, 0x9E, 0x43,\n\t0xE7, 0x80, 0xB9, 0x43, 0xE7, 0x81, 0x8A, 0x43,\n\t0xE7, 0x81, 0xAB, 0x43, 0xE7, 0x81, 0xB0, 0x43,\n\t0xE7, 0x81, 0xB7, 0x43, 0xE7, 0x81, 0xBD, 0x43,\n\t0xE7, 0x82, 0x99, 0x43, 0xE7, 0x82, 0xAD, 0x43,\n\t0xE7, 0x83, 0x88, 0x43, 0xE7, 0x83, 0x99, 0x43,\n\t0xE7, 0x84, 0xA1, 0x43, 0xE7, 0x85, 0x85, 0x43,\n\t0xE7, 0x85, 0x89, 0x43, 0xE7, 0x85, 0xAE, 0x43,\n\t// Bytes ec0 - eff\n\t0xE7, 0x86, 0x9C, 0x43, 0xE7, 0x87, 0x8E, 0x43,\n\t0xE7, 0x87, 0x90, 0x43, 0xE7, 0x88, 0x90, 0x43,\n\t0xE7, 0x88, 0x9B, 0x43, 0xE7, 0x88, 0xA8, 0x43,\n\t0xE7, 0x88, 0xAA, 0x43, 0xE7, 0x88, 0xAB, 0x43,\n\t0xE7, 0x88, 0xB5, 0x43, 0xE7, 0x88, 0xB6, 0x43,\n\t0xE7, 0x88, 0xBB, 0x43, 0xE7, 0x88, 0xBF, 0x43,\n\t0xE7, 0x89, 0x87, 0x43, 0xE7, 0x89, 0x90, 0x43,\n\t0xE7, 0x89, 0x99, 0x43, 0xE7, 0x89, 0x9B, 0x43,\n\t// Bytes f00 - f3f\n\t0xE7, 0x89, 0xA2, 0x43, 0xE7, 0x89, 0xB9, 0x43,\n\t0xE7, 0x8A, 0x80, 0x43, 0xE7, 0x8A, 0x95, 0x43,\n\t0xE7, 0x8A, 0xAC, 0x43, 0xE7, 0x8A, 0xAF, 0x43,\n\t0xE7, 0x8B, 0x80, 0x43, 0xE7, 0x8B, 0xBC, 0x43,\n\t0xE7, 0x8C, 0xAA, 0x43, 0xE7, 0x8D, 0xB5, 0x43,\n\t0xE7, 0x8D, 0xBA, 0x43, 0xE7, 0x8E, 0x84, 0x43,\n\t0xE7, 0x8E, 0x87, 0x43, 0xE7, 0x8E, 0x89, 0x43,\n\t0xE7, 0x8E, 0x8B, 0x43, 0xE7, 0x8E, 0xA5, 0x43,\n\t// Bytes f40 - f7f\n\t0xE7, 0x8E, 0xB2, 0x43, 0xE7, 0x8F, 0x9E, 0x43,\n\t0xE7, 0x90, 0x86, 0x43, 0xE7, 0x90, 0x89, 0x43,\n\t0xE7, 0x90, 0xA2, 0x43, 0xE7, 0x91, 0x87, 0x43,\n\t0xE7, 0x91, 0x9C, 0x43, 0xE7, 0x91, 0xA9, 0x43,\n\t0xE7, 0x91, 0xB1, 0x43, 0xE7, 0x92, 0x85, 0x43,\n\t0xE7, 0x92, 0x89, 0x43, 0xE7, 0x92, 0x98, 0x43,\n\t0xE7, 0x93, 0x8A, 0x43, 0xE7, 0x93, 0x9C, 0x43,\n\t0xE7, 0x93, 0xA6, 0x43, 0xE7, 0x94, 0x86, 0x43,\n\t// Bytes f80 - fbf\n\t0xE7, 0x94, 0x98, 0x43, 0xE7, 0x94, 0x9F, 0x43,\n\t0xE7, 0x94, 0xA4, 0x43, 0xE7, 0x94, 0xA8, 0x43,\n\t0xE7, 0x94, 0xB0, 0x43, 0xE7, 0x94, 0xB2, 0x43,\n\t0xE7, 0x94, 0xB3, 0x43, 0xE7, 0x94, 0xB7, 0x43,\n\t0xE7, 0x94, 0xBB, 0x43, 0xE7, 0x94, 0xBE, 0x43,\n\t0xE7, 0x95, 0x99, 0x43, 0xE7, 0x95, 0xA5, 0x43,\n\t0xE7, 0x95, 0xB0, 0x43, 0xE7, 0x96, 0x8B, 0x43,\n\t0xE7, 0x96, 0x92, 0x43, 0xE7, 0x97, 0xA2, 0x43,\n\t// Bytes fc0 - fff\n\t0xE7, 0x98, 0x90, 0x43, 0xE7, 0x98, 0x9D, 0x43,\n\t0xE7, 0x98, 0x9F, 0x43, 0xE7, 0x99, 0x82, 0x43,\n\t0xE7, 0x99, 0xA9, 0x43, 0xE7, 0x99, 0xB6, 0x43,\n\t0xE7, 0x99, 0xBD, 0x43, 0xE7, 0x9A, 0xAE, 0x43,\n\t0xE7, 0x9A, 0xBF, 0x43, 0xE7, 0x9B, 0x8A, 0x43,\n\t0xE7, 0x9B, 0x9B, 0x43, 0xE7, 0x9B, 0xA3, 0x43,\n\t0xE7, 0x9B, 0xA7, 0x43, 0xE7, 0x9B, 0xAE, 0x43,\n\t0xE7, 0x9B, 0xB4, 0x43, 0xE7, 0x9C, 0x81, 0x43,\n\t// Bytes 1000 - 103f\n\t0xE7, 0x9C, 0x9E, 0x43, 0xE7, 0x9C, 0x9F, 0x43,\n\t0xE7, 0x9D, 0x80, 0x43, 0xE7, 0x9D, 0x8A, 0x43,\n\t0xE7, 0x9E, 0x8B, 0x43, 0xE7, 0x9E, 0xA7, 0x43,\n\t0xE7, 0x9F, 0x9B, 0x43, 0xE7, 0x9F, 0xA2, 0x43,\n\t0xE7, 0x9F, 0xB3, 0x43, 0xE7, 0xA1, 0x8E, 0x43,\n\t0xE7, 0xA1, 0xAB, 0x43, 0xE7, 0xA2, 0x8C, 0x43,\n\t0xE7, 0xA2, 0x91, 0x43, 0xE7, 0xA3, 0x8A, 0x43,\n\t0xE7, 0xA3, 0x8C, 0x43, 0xE7, 0xA3, 0xBB, 0x43,\n\t// Bytes 1040 - 107f\n\t0xE7, 0xA4, 0xAA, 0x43, 0xE7, 0xA4, 0xBA, 0x43,\n\t0xE7, 0xA4, 0xBC, 0x43, 0xE7, 0xA4, 0xBE, 0x43,\n\t0xE7, 0xA5, 0x88, 0x43, 0xE7, 0xA5, 0x89, 0x43,\n\t0xE7, 0xA5, 0x90, 0x43, 0xE7, 0xA5, 0x96, 0x43,\n\t0xE7, 0xA5, 0x9D, 0x43, 0xE7, 0xA5, 0x9E, 0x43,\n\t0xE7, 0xA5, 0xA5, 0x43, 0xE7, 0xA5, 0xBF, 0x43,\n\t0xE7, 0xA6, 0x81, 0x43, 0xE7, 0xA6, 0x8D, 0x43,\n\t0xE7, 0xA6, 0x8E, 0x43, 0xE7, 0xA6, 0x8F, 0x43,\n\t// Bytes 1080 - 10bf\n\t0xE7, 0xA6, 0xAE, 0x43, 0xE7, 0xA6, 0xB8, 0x43,\n\t0xE7, 0xA6, 0xBE, 0x43, 0xE7, 0xA7, 0x8A, 0x43,\n\t0xE7, 0xA7, 0x98, 0x43, 0xE7, 0xA7, 0xAB, 0x43,\n\t0xE7, 0xA8, 0x9C, 0x43, 0xE7, 0xA9, 0x80, 0x43,\n\t0xE7, 0xA9, 0x8A, 0x43, 0xE7, 0xA9, 0x8F, 0x43,\n\t0xE7, 0xA9, 0xB4, 0x43, 0xE7, 0xA9, 0xBA, 0x43,\n\t0xE7, 0xAA, 0x81, 0x43, 0xE7, 0xAA, 0xB1, 0x43,\n\t0xE7, 0xAB, 0x8B, 0x43, 0xE7, 0xAB, 0xAE, 0x43,\n\t// Bytes 10c0 - 10ff\n\t0xE7, 0xAB, 0xB9, 0x43, 0xE7, 0xAC, 0xA0, 0x43,\n\t0xE7, 0xAE, 0x8F, 0x43, 0xE7, 0xAF, 0x80, 0x43,\n\t0xE7, 0xAF, 0x86, 0x43, 0xE7, 0xAF, 0x89, 0x43,\n\t0xE7, 0xB0, 0xBE, 0x43, 0xE7, 0xB1, 0xA0, 0x43,\n\t0xE7, 0xB1, 0xB3, 0x43, 0xE7, 0xB1, 0xBB, 0x43,\n\t0xE7, 0xB2, 0x92, 0x43, 0xE7, 0xB2, 0xBE, 0x43,\n\t0xE7, 0xB3, 0x92, 0x43, 0xE7, 0xB3, 0x96, 0x43,\n\t0xE7, 0xB3, 0xA3, 0x43, 0xE7, 0xB3, 0xA7, 0x43,\n\t// Bytes 1100 - 113f\n\t0xE7, 0xB3, 0xA8, 0x43, 0xE7, 0xB3, 0xB8, 0x43,\n\t0xE7, 0xB4, 0x80, 0x43, 0xE7, 0xB4, 0x90, 0x43,\n\t0xE7, 0xB4, 0xA2, 0x43, 0xE7, 0xB4, 0xAF, 0x43,\n\t0xE7, 0xB5, 0x82, 0x43, 0xE7, 0xB5, 0x9B, 0x43,\n\t0xE7, 0xB5, 0xA3, 0x43, 0xE7, 0xB6, 0xA0, 0x43,\n\t0xE7, 0xB6, 0xBE, 0x43, 0xE7, 0xB7, 0x87, 0x43,\n\t0xE7, 0xB7, 0xB4, 0x43, 0xE7, 0xB8, 0x82, 0x43,\n\t0xE7, 0xB8, 0x89, 0x43, 0xE7, 0xB8, 0xB7, 0x43,\n\t// Bytes 1140 - 117f\n\t0xE7, 0xB9, 0x81, 0x43, 0xE7, 0xB9, 0x85, 0x43,\n\t0xE7, 0xBC, 0xB6, 0x43, 0xE7, 0xBC, 0xBE, 0x43,\n\t0xE7, 0xBD, 0x91, 0x43, 0xE7, 0xBD, 0xB2, 0x43,\n\t0xE7, 0xBD, 0xB9, 0x43, 0xE7, 0xBD, 0xBA, 0x43,\n\t0xE7, 0xBE, 0x85, 0x43, 0xE7, 0xBE, 0x8A, 0x43,\n\t0xE7, 0xBE, 0x95, 0x43, 0xE7, 0xBE, 0x9A, 0x43,\n\t0xE7, 0xBE, 0xBD, 0x43, 0xE7, 0xBF, 0xBA, 0x43,\n\t0xE8, 0x80, 0x81, 0x43, 0xE8, 0x80, 0x85, 0x43,\n\t// Bytes 1180 - 11bf\n\t0xE8, 0x80, 0x8C, 0x43, 0xE8, 0x80, 0x92, 0x43,\n\t0xE8, 0x80, 0xB3, 0x43, 0xE8, 0x81, 0x86, 0x43,\n\t0xE8, 0x81, 0xA0, 0x43, 0xE8, 0x81, 0xAF, 0x43,\n\t0xE8, 0x81, 0xB0, 0x43, 0xE8, 0x81, 0xBE, 0x43,\n\t0xE8, 0x81, 0xBF, 0x43, 0xE8, 0x82, 0x89, 0x43,\n\t0xE8, 0x82, 0x8B, 0x43, 0xE8, 0x82, 0xAD, 0x43,\n\t0xE8, 0x82, 0xB2, 0x43, 0xE8, 0x84, 0x83, 0x43,\n\t0xE8, 0x84, 0xBE, 0x43, 0xE8, 0x87, 0x98, 0x43,\n\t// Bytes 11c0 - 11ff\n\t0xE8, 0x87, 0xA3, 0x43, 0xE8, 0x87, 0xA8, 0x43,\n\t0xE8, 0x87, 0xAA, 0x43, 0xE8, 0x87, 0xAD, 0x43,\n\t0xE8, 0x87, 0xB3, 0x43, 0xE8, 0x87, 0xBC, 0x43,\n\t0xE8, 0x88, 0x81, 0x43, 0xE8, 0x88, 0x84, 0x43,\n\t0xE8, 0x88, 0x8C, 0x43, 0xE8, 0x88, 0x98, 0x43,\n\t0xE8, 0x88, 0x9B, 0x43, 0xE8, 0x88, 0x9F, 0x43,\n\t0xE8, 0x89, 0xAE, 0x43, 0xE8, 0x89, 0xAF, 0x43,\n\t0xE8, 0x89, 0xB2, 0x43, 0xE8, 0x89, 0xB8, 0x43,\n\t// Bytes 1200 - 123f\n\t0xE8, 0x89, 0xB9, 0x43, 0xE8, 0x8A, 0x8B, 0x43,\n\t0xE8, 0x8A, 0x91, 0x43, 0xE8, 0x8A, 0x9D, 0x43,\n\t0xE8, 0x8A, 0xB1, 0x43, 0xE8, 0x8A, 0xB3, 0x43,\n\t0xE8, 0x8A, 0xBD, 0x43, 0xE8, 0x8B, 0xA5, 0x43,\n\t0xE8, 0x8B, 0xA6, 0x43, 0xE8, 0x8C, 0x9D, 0x43,\n\t0xE8, 0x8C, 0xA3, 0x43, 0xE8, 0x8C, 0xB6, 0x43,\n\t0xE8, 0x8D, 0x92, 0x43, 0xE8, 0x8D, 0x93, 0x43,\n\t0xE8, 0x8D, 0xA3, 0x43, 0xE8, 0x8E, 0xAD, 0x43,\n\t// Bytes 1240 - 127f\n\t0xE8, 0x8E, 0xBD, 0x43, 0xE8, 0x8F, 0x89, 0x43,\n\t0xE8, 0x8F, 0x8A, 0x43, 0xE8, 0x8F, 0x8C, 0x43,\n\t0xE8, 0x8F, 0x9C, 0x43, 0xE8, 0x8F, 0xA7, 0x43,\n\t0xE8, 0x8F, 0xAF, 0x43, 0xE8, 0x8F, 0xB1, 0x43,\n\t0xE8, 0x90, 0xBD, 0x43, 0xE8, 0x91, 0x89, 0x43,\n\t0xE8, 0x91, 0x97, 0x43, 0xE8, 0x93, 0xAE, 0x43,\n\t0xE8, 0x93, 0xB1, 0x43, 0xE8, 0x93, 0xB3, 0x43,\n\t0xE8, 0x93, 0xBC, 0x43, 0xE8, 0x94, 0x96, 0x43,\n\t// Bytes 1280 - 12bf\n\t0xE8, 0x95, 0xA4, 0x43, 0xE8, 0x97, 0x8D, 0x43,\n\t0xE8, 0x97, 0xBA, 0x43, 0xE8, 0x98, 0x86, 0x43,\n\t0xE8, 0x98, 0x92, 0x43, 0xE8, 0x98, 0xAD, 0x43,\n\t0xE8, 0x98, 0xBF, 0x43, 0xE8, 0x99, 0x8D, 0x43,\n\t0xE8, 0x99, 0x90, 0x43, 0xE8, 0x99, 0x9C, 0x43,\n\t0xE8, 0x99, 0xA7, 0x43, 0xE8, 0x99, 0xA9, 0x43,\n\t0xE8, 0x99, 0xAB, 0x43, 0xE8, 0x9A, 0x88, 0x43,\n\t0xE8, 0x9A, 0xA9, 0x43, 0xE8, 0x9B, 0xA2, 0x43,\n\t// Bytes 12c0 - 12ff\n\t0xE8, 0x9C, 0x8E, 0x43, 0xE8, 0x9C, 0xA8, 0x43,\n\t0xE8, 0x9D, 0xAB, 0x43, 0xE8, 0x9D, 0xB9, 0x43,\n\t0xE8, 0x9E, 0x86, 0x43, 0xE8, 0x9E, 0xBA, 0x43,\n\t0xE8, 0x9F, 0xA1, 0x43, 0xE8, 0xA0, 0x81, 0x43,\n\t0xE8, 0xA0, 0x9F, 0x43, 0xE8, 0xA1, 0x80, 0x43,\n\t0xE8, 0xA1, 0x8C, 0x43, 0xE8, 0xA1, 0xA0, 0x43,\n\t0xE8, 0xA1, 0xA3, 0x43, 0xE8, 0xA3, 0x82, 0x43,\n\t0xE8, 0xA3, 0x8F, 0x43, 0xE8, 0xA3, 0x97, 0x43,\n\t// Bytes 1300 - 133f\n\t0xE8, 0xA3, 0x9E, 0x43, 0xE8, 0xA3, 0xA1, 0x43,\n\t0xE8, 0xA3, 0xB8, 0x43, 0xE8, 0xA3, 0xBA, 0x43,\n\t0xE8, 0xA4, 0x90, 0x43, 0xE8, 0xA5, 0x81, 0x43,\n\t0xE8, 0xA5, 0xA4, 0x43, 0xE8, 0xA5, 0xBE, 0x43,\n\t0xE8, 0xA6, 0x86, 0x43, 0xE8, 0xA6, 0x8B, 0x43,\n\t0xE8, 0xA6, 0x96, 0x43, 0xE8, 0xA7, 0x92, 0x43,\n\t0xE8, 0xA7, 0xA3, 0x43, 0xE8, 0xA8, 0x80, 0x43,\n\t0xE8, 0xAA, 0xA0, 0x43, 0xE8, 0xAA, 0xAA, 0x43,\n\t// Bytes 1340 - 137f\n\t0xE8, 0xAA, 0xBF, 0x43, 0xE8, 0xAB, 0x8B, 0x43,\n\t0xE8, 0xAB, 0x92, 0x43, 0xE8, 0xAB, 0x96, 0x43,\n\t0xE8, 0xAB, 0xAD, 0x43, 0xE8, 0xAB, 0xB8, 0x43,\n\t0xE8, 0xAB, 0xBE, 0x43, 0xE8, 0xAC, 0x81, 0x43,\n\t0xE8, 0xAC, 0xB9, 0x43, 0xE8, 0xAD, 0x98, 0x43,\n\t0xE8, 0xAE, 0x80, 0x43, 0xE8, 0xAE, 0x8A, 0x43,\n\t0xE8, 0xB0, 0xB7, 0x43, 0xE8, 0xB1, 0x86, 0x43,\n\t0xE8, 0xB1, 0x88, 0x43, 0xE8, 0xB1, 0x95, 0x43,\n\t// Bytes 1380 - 13bf\n\t0xE8, 0xB1, 0xB8, 0x43, 0xE8, 0xB2, 0x9D, 0x43,\n\t0xE8, 0xB2, 0xA1, 0x43, 0xE8, 0xB2, 0xA9, 0x43,\n\t0xE8, 0xB2, 0xAB, 0x43, 0xE8, 0xB3, 0x81, 0x43,\n\t0xE8, 0xB3, 0x82, 0x43, 0xE8, 0xB3, 0x87, 0x43,\n\t0xE8, 0xB3, 0x88, 0x43, 0xE8, 0xB3, 0x93, 0x43,\n\t0xE8, 0xB4, 0x88, 0x43, 0xE8, 0xB4, 0x9B, 0x43,\n\t0xE8, 0xB5, 0xA4, 0x43, 0xE8, 0xB5, 0xB0, 0x43,\n\t0xE8, 0xB5, 0xB7, 0x43, 0xE8, 0xB6, 0xB3, 0x43,\n\t// Bytes 13c0 - 13ff\n\t0xE8, 0xB6, 0xBC, 0x43, 0xE8, 0xB7, 0x8B, 0x43,\n\t0xE8, 0xB7, 0xAF, 0x43, 0xE8, 0xB7, 0xB0, 0x43,\n\t0xE8, 0xBA, 0xAB, 0x43, 0xE8, 0xBB, 0x8A, 0x43,\n\t0xE8, 0xBB, 0x94, 0x43, 0xE8, 0xBC, 0xA6, 0x43,\n\t0xE8, 0xBC, 0xAA, 0x43, 0xE8, 0xBC, 0xB8, 0x43,\n\t0xE8, 0xBC, 0xBB, 0x43, 0xE8, 0xBD, 0xA2, 0x43,\n\t0xE8, 0xBE, 0x9B, 0x43, 0xE8, 0xBE, 0x9E, 0x43,\n\t0xE8, 0xBE, 0xB0, 0x43, 0xE8, 0xBE, 0xB5, 0x43,\n\t// Bytes 1400 - 143f\n\t0xE8, 0xBE, 0xB6, 0x43, 0xE9, 0x80, 0xA3, 0x43,\n\t0xE9, 0x80, 0xB8, 0x43, 0xE9, 0x81, 0x8A, 0x43,\n\t0xE9, 0x81, 0xA9, 0x43, 0xE9, 0x81, 0xB2, 0x43,\n\t0xE9, 0x81, 0xBC, 0x43, 0xE9, 0x82, 0x8F, 0x43,\n\t0xE9, 0x82, 0x91, 0x43, 0xE9, 0x82, 0x94, 0x43,\n\t0xE9, 0x83, 0x8E, 0x43, 0xE9, 0x83, 0x9E, 0x43,\n\t0xE9, 0x83, 0xB1, 0x43, 0xE9, 0x83, 0xBD, 0x43,\n\t0xE9, 0x84, 0x91, 0x43, 0xE9, 0x84, 0x9B, 0x43,\n\t// Bytes 1440 - 147f\n\t0xE9, 0x85, 0x89, 0x43, 0xE9, 0x85, 0x8D, 0x43,\n\t0xE9, 0x85, 0xAA, 0x43, 0xE9, 0x86, 0x99, 0x43,\n\t0xE9, 0x86, 0xB4, 0x43, 0xE9, 0x87, 0x86, 0x43,\n\t0xE9, 0x87, 0x8C, 0x43, 0xE9, 0x87, 0x8F, 0x43,\n\t0xE9, 0x87, 0x91, 0x43, 0xE9, 0x88, 0xB4, 0x43,\n\t0xE9, 0x88, 0xB8, 0x43, 0xE9, 0x89, 0xB6, 0x43,\n\t0xE9, 0x89, 0xBC, 0x43, 0xE9, 0x8B, 0x97, 0x43,\n\t0xE9, 0x8B, 0x98, 0x43, 0xE9, 0x8C, 0x84, 0x43,\n\t// Bytes 1480 - 14bf\n\t0xE9, 0x8D, 0x8A, 0x43, 0xE9, 0x8F, 0xB9, 0x43,\n\t0xE9, 0x90, 0x95, 0x43, 0xE9, 0x95, 0xB7, 0x43,\n\t0xE9, 0x96, 0x80, 0x43, 0xE9, 0x96, 0x8B, 0x43,\n\t0xE9, 0x96, 0xAD, 0x43, 0xE9, 0x96, 0xB7, 0x43,\n\t0xE9, 0x98, 0x9C, 0x43, 0xE9, 0x98, 0xAE, 0x43,\n\t0xE9, 0x99, 0x8B, 0x43, 0xE9, 0x99, 0x8D, 0x43,\n\t0xE9, 0x99, 0xB5, 0x43, 0xE9, 0x99, 0xB8, 0x43,\n\t0xE9, 0x99, 0xBC, 0x43, 0xE9, 0x9A, 0x86, 0x43,\n\t// Bytes 14c0 - 14ff\n\t0xE9, 0x9A, 0xA3, 0x43, 0xE9, 0x9A, 0xB6, 0x43,\n\t0xE9, 0x9A, 0xB7, 0x43, 0xE9, 0x9A, 0xB8, 0x43,\n\t0xE9, 0x9A, 0xB9, 0x43, 0xE9, 0x9B, 0x83, 0x43,\n\t0xE9, 0x9B, 0xA2, 0x43, 0xE9, 0x9B, 0xA3, 0x43,\n\t0xE9, 0x9B, 0xA8, 0x43, 0xE9, 0x9B, 0xB6, 0x43,\n\t0xE9, 0x9B, 0xB7, 0x43, 0xE9, 0x9C, 0xA3, 0x43,\n\t0xE9, 0x9C, 0xB2, 0x43, 0xE9, 0x9D, 0x88, 0x43,\n\t0xE9, 0x9D, 0x91, 0x43, 0xE9, 0x9D, 0x96, 0x43,\n\t// Bytes 1500 - 153f\n\t0xE9, 0x9D, 0x9E, 0x43, 0xE9, 0x9D, 0xA2, 0x43,\n\t0xE9, 0x9D, 0xA9, 0x43, 0xE9, 0x9F, 0x8B, 0x43,\n\t0xE9, 0x9F, 0x9B, 0x43, 0xE9, 0x9F, 0xA0, 0x43,\n\t0xE9, 0x9F, 0xAD, 0x43, 0xE9, 0x9F, 0xB3, 0x43,\n\t0xE9, 0x9F, 0xBF, 0x43, 0xE9, 0xA0, 0x81, 0x43,\n\t0xE9, 0xA0, 0x85, 0x43, 0xE9, 0xA0, 0x8B, 0x43,\n\t0xE9, 0xA0, 0x98, 0x43, 0xE9, 0xA0, 0xA9, 0x43,\n\t0xE9, 0xA0, 0xBB, 0x43, 0xE9, 0xA1, 0x9E, 0x43,\n\t// Bytes 1540 - 157f\n\t0xE9, 0xA2, 0xA8, 0x43, 0xE9, 0xA3, 0x9B, 0x43,\n\t0xE9, 0xA3, 0x9F, 0x43, 0xE9, 0xA3, 0xA2, 0x43,\n\t0xE9, 0xA3, 0xAF, 0x43, 0xE9, 0xA3, 0xBC, 0x43,\n\t0xE9, 0xA4, 0xA8, 0x43, 0xE9, 0xA4, 0xA9, 0x43,\n\t0xE9, 0xA6, 0x96, 0x43, 0xE9, 0xA6, 0x99, 0x43,\n\t0xE9, 0xA6, 0xA7, 0x43, 0xE9, 0xA6, 0xAC, 0x43,\n\t0xE9, 0xA7, 0x82, 0x43, 0xE9, 0xA7, 0xB1, 0x43,\n\t0xE9, 0xA7, 0xBE, 0x43, 0xE9, 0xA9, 0xAA, 0x43,\n\t// Bytes 1580 - 15bf\n\t0xE9, 0xAA, 0xA8, 0x43, 0xE9, 0xAB, 0x98, 0x43,\n\t0xE9, 0xAB, 0x9F, 0x43, 0xE9, 0xAC, 0x92, 0x43,\n\t0xE9, 0xAC, 0xA5, 0x43, 0xE9, 0xAC, 0xAF, 0x43,\n\t0xE9, 0xAC, 0xB2, 0x43, 0xE9, 0xAC, 0xBC, 0x43,\n\t0xE9, 0xAD, 0x9A, 0x43, 0xE9, 0xAD, 0xAF, 0x43,\n\t0xE9, 0xB1, 0x80, 0x43, 0xE9, 0xB1, 0x97, 0x43,\n\t0xE9, 0xB3, 0xA5, 0x43, 0xE9, 0xB3, 0xBD, 0x43,\n\t0xE9, 0xB5, 0xA7, 0x43, 0xE9, 0xB6, 0xB4, 0x43,\n\t// Bytes 15c0 - 15ff\n\t0xE9, 0xB7, 0xBA, 0x43, 0xE9, 0xB8, 0x9E, 0x43,\n\t0xE9, 0xB9, 0xB5, 0x43, 0xE9, 0xB9, 0xBF, 0x43,\n\t0xE9, 0xBA, 0x97, 0x43, 0xE9, 0xBA, 0x9F, 0x43,\n\t0xE9, 0xBA, 0xA5, 0x43, 0xE9, 0xBA, 0xBB, 0x43,\n\t0xE9, 0xBB, 0x83, 0x43, 0xE9, 0xBB, 0x8D, 0x43,\n\t0xE9, 0xBB, 0x8E, 0x43, 0xE9, 0xBB, 0x91, 0x43,\n\t0xE9, 0xBB, 0xB9, 0x43, 0xE9, 0xBB, 0xBD, 0x43,\n\t0xE9, 0xBB, 0xBE, 0x43, 0xE9, 0xBC, 0x85, 0x43,\n\t// Bytes 1600 - 163f\n\t0xE9, 0xBC, 0x8E, 0x43, 0xE9, 0xBC, 0x8F, 0x43,\n\t0xE9, 0xBC, 0x93, 0x43, 0xE9, 0xBC, 0x96, 0x43,\n\t0xE9, 0xBC, 0xA0, 0x43, 0xE9, 0xBC, 0xBB, 0x43,\n\t0xE9, 0xBD, 0x83, 0x43, 0xE9, 0xBD, 0x8A, 0x43,\n\t0xE9, 0xBD, 0x92, 0x43, 0xE9, 0xBE, 0x8D, 0x43,\n\t0xE9, 0xBE, 0x8E, 0x43, 0xE9, 0xBE, 0x9C, 0x43,\n\t0xE9, 0xBE, 0x9F, 0x43, 0xE9, 0xBE, 0xA0, 0x43,\n\t0xEA, 0x9C, 0xA7, 0x43, 0xEA, 0x9D, 0xAF, 0x43,\n\t// Bytes 1640 - 167f\n\t0xEA, 0xAC, 0xB7, 0x43, 0xEA, 0xAD, 0x92, 0x44,\n\t0xF0, 0xA0, 0x84, 0xA2, 0x44, 0xF0, 0xA0, 0x94,\n\t0x9C, 0x44, 0xF0, 0xA0, 0x94, 0xA5, 0x44, 0xF0,\n\t0xA0, 0x95, 0x8B, 0x44, 0xF0, 0xA0, 0x98, 0xBA,\n\t0x44, 0xF0, 0xA0, 0xA0, 0x84, 0x44, 0xF0, 0xA0,\n\t0xA3, 0x9E, 0x44, 0xF0, 0xA0, 0xA8, 0xAC, 0x44,\n\t0xF0, 0xA0, 0xAD, 0xA3, 0x44, 0xF0, 0xA1, 0x93,\n\t0xA4, 0x44, 0xF0, 0xA1, 0x9A, 0xA8, 0x44, 0xF0,\n\t// Bytes 1680 - 16bf\n\t0xA1, 0x9B, 0xAA, 0x44, 0xF0, 0xA1, 0xA7, 0x88,\n\t0x44, 0xF0, 0xA1, 0xAC, 0x98, 0x44, 0xF0, 0xA1,\n\t0xB4, 0x8B, 0x44, 0xF0, 0xA1, 0xB7, 0xA4, 0x44,\n\t0xF0, 0xA1, 0xB7, 0xA6, 0x44, 0xF0, 0xA2, 0x86,\n\t0x83, 0x44, 0xF0, 0xA2, 0x86, 0x9F, 0x44, 0xF0,\n\t0xA2, 0x8C, 0xB1, 0x44, 0xF0, 0xA2, 0x9B, 0x94,\n\t0x44, 0xF0, 0xA2, 0xA1, 0x84, 0x44, 0xF0, 0xA2,\n\t0xA1, 0x8A, 0x44, 0xF0, 0xA2, 0xAC, 0x8C, 0x44,\n\t// Bytes 16c0 - 16ff\n\t0xF0, 0xA2, 0xAF, 0xB1, 0x44, 0xF0, 0xA3, 0x80,\n\t0x8A, 0x44, 0xF0, 0xA3, 0x8A, 0xB8, 0x44, 0xF0,\n\t0xA3, 0x8D, 0x9F, 0x44, 0xF0, 0xA3, 0x8E, 0x93,\n\t0x44, 0xF0, 0xA3, 0x8E, 0x9C, 0x44, 0xF0, 0xA3,\n\t0x8F, 0x83, 0x44, 0xF0, 0xA3, 0x8F, 0x95, 0x44,\n\t0xF0, 0xA3, 0x91, 0xAD, 0x44, 0xF0, 0xA3, 0x9A,\n\t0xA3, 0x44, 0xF0, 0xA3, 0xA2, 0xA7, 0x44, 0xF0,\n\t0xA3, 0xAA, 0x8D, 0x44, 0xF0, 0xA3, 0xAB, 0xBA,\n\t// Bytes 1700 - 173f\n\t0x44, 0xF0, 0xA3, 0xB2, 0xBC, 0x44, 0xF0, 0xA3,\n\t0xB4, 0x9E, 0x44, 0xF0, 0xA3, 0xBB, 0x91, 0x44,\n\t0xF0, 0xA3, 0xBD, 0x9E, 0x44, 0xF0, 0xA3, 0xBE,\n\t0x8E, 0x44, 0xF0, 0xA4, 0x89, 0xA3, 0x44, 0xF0,\n\t0xA4, 0x8B, 0xAE, 0x44, 0xF0, 0xA4, 0x8E, 0xAB,\n\t0x44, 0xF0, 0xA4, 0x98, 0x88, 0x44, 0xF0, 0xA4,\n\t0x9C, 0xB5, 0x44, 0xF0, 0xA4, 0xA0, 0x94, 0x44,\n\t0xF0, 0xA4, 0xB0, 0xB6, 0x44, 0xF0, 0xA4, 0xB2,\n\t// Bytes 1740 - 177f\n\t0x92, 0x44, 0xF0, 0xA4, 0xBE, 0xA1, 0x44, 0xF0,\n\t0xA4, 0xBE, 0xB8, 0x44, 0xF0, 0xA5, 0x81, 0x84,\n\t0x44, 0xF0, 0xA5, 0x83, 0xB2, 0x44, 0xF0, 0xA5,\n\t0x83, 0xB3, 0x44, 0xF0, 0xA5, 0x84, 0x99, 0x44,\n\t0xF0, 0xA5, 0x84, 0xB3, 0x44, 0xF0, 0xA5, 0x89,\n\t0x89, 0x44, 0xF0, 0xA5, 0x90, 0x9D, 0x44, 0xF0,\n\t0xA5, 0x98, 0xA6, 0x44, 0xF0, 0xA5, 0x9A, 0x9A,\n\t0x44, 0xF0, 0xA5, 0x9B, 0x85, 0x44, 0xF0, 0xA5,\n\t// Bytes 1780 - 17bf\n\t0xA5, 0xBC, 0x44, 0xF0, 0xA5, 0xAA, 0xA7, 0x44,\n\t0xF0, 0xA5, 0xAE, 0xAB, 0x44, 0xF0, 0xA5, 0xB2,\n\t0x80, 0x44, 0xF0, 0xA5, 0xB3, 0x90, 0x44, 0xF0,\n\t0xA5, 0xBE, 0x86, 0x44, 0xF0, 0xA6, 0x87, 0x9A,\n\t0x44, 0xF0, 0xA6, 0x88, 0xA8, 0x44, 0xF0, 0xA6,\n\t0x89, 0x87, 0x44, 0xF0, 0xA6, 0x8B, 0x99, 0x44,\n\t0xF0, 0xA6, 0x8C, 0xBE, 0x44, 0xF0, 0xA6, 0x93,\n\t0x9A, 0x44, 0xF0, 0xA6, 0x94, 0xA3, 0x44, 0xF0,\n\t// Bytes 17c0 - 17ff\n\t0xA6, 0x96, 0xA8, 0x44, 0xF0, 0xA6, 0x9E, 0xA7,\n\t0x44, 0xF0, 0xA6, 0x9E, 0xB5, 0x44, 0xF0, 0xA6,\n\t0xAC, 0xBC, 0x44, 0xF0, 0xA6, 0xB0, 0xB6, 0x44,\n\t0xF0, 0xA6, 0xB3, 0x95, 0x44, 0xF0, 0xA6, 0xB5,\n\t0xAB, 0x44, 0xF0, 0xA6, 0xBC, 0xAC, 0x44, 0xF0,\n\t0xA6, 0xBE, 0xB1, 0x44, 0xF0, 0xA7, 0x83, 0x92,\n\t0x44, 0xF0, 0xA7, 0x8F, 0x8A, 0x44, 0xF0, 0xA7,\n\t0x99, 0xA7, 0x44, 0xF0, 0xA7, 0xA2, 0xAE, 0x44,\n\t// Bytes 1800 - 183f\n\t0xF0, 0xA7, 0xA5, 0xA6, 0x44, 0xF0, 0xA7, 0xB2,\n\t0xA8, 0x44, 0xF0, 0xA7, 0xBB, 0x93, 0x44, 0xF0,\n\t0xA7, 0xBC, 0xAF, 0x44, 0xF0, 0xA8, 0x97, 0x92,\n\t0x44, 0xF0, 0xA8, 0x97, 0xAD, 0x44, 0xF0, 0xA8,\n\t0x9C, 0xAE, 0x44, 0xF0, 0xA8, 0xAF, 0xBA, 0x44,\n\t0xF0, 0xA8, 0xB5, 0xB7, 0x44, 0xF0, 0xA9, 0x85,\n\t0x85, 0x44, 0xF0, 0xA9, 0x87, 0x9F, 0x44, 0xF0,\n\t0xA9, 0x88, 0x9A, 0x44, 0xF0, 0xA9, 0x90, 0x8A,\n\t// Bytes 1840 - 187f\n\t0x44, 0xF0, 0xA9, 0x92, 0x96, 0x44, 0xF0, 0xA9,\n\t0x96, 0xB6, 0x44, 0xF0, 0xA9, 0xAC, 0xB0, 0x44,\n\t0xF0, 0xAA, 0x83, 0x8E, 0x44, 0xF0, 0xAA, 0x84,\n\t0x85, 0x44, 0xF0, 0xAA, 0x88, 0x8E, 0x44, 0xF0,\n\t0xAA, 0x8A, 0x91, 0x44, 0xF0, 0xAA, 0x8E, 0x92,\n\t0x44, 0xF0, 0xAA, 0x98, 0x80, 0x42, 0x21, 0x21,\n\t0x42, 0x21, 0x3F, 0x42, 0x2E, 0x2E, 0x42, 0x30,\n\t0x2C, 0x42, 0x30, 0x2E, 0x42, 0x31, 0x2C, 0x42,\n\t// Bytes 1880 - 18bf\n\t0x31, 0x2E, 0x42, 0x31, 0x30, 0x42, 0x31, 0x31,\n\t0x42, 0x31, 0x32, 0x42, 0x31, 0x33, 0x42, 0x31,\n\t0x34, 0x42, 0x31, 0x35, 0x42, 0x31, 0x36, 0x42,\n\t0x31, 0x37, 0x42, 0x31, 0x38, 0x42, 0x31, 0x39,\n\t0x42, 0x32, 0x2C, 0x42, 0x32, 0x2E, 0x42, 0x32,\n\t0x30, 0x42, 0x32, 0x31, 0x42, 0x32, 0x32, 0x42,\n\t0x32, 0x33, 0x42, 0x32, 0x34, 0x42, 0x32, 0x35,\n\t0x42, 0x32, 0x36, 0x42, 0x32, 0x37, 0x42, 0x32,\n\t// Bytes 18c0 - 18ff\n\t0x38, 0x42, 0x32, 0x39, 0x42, 0x33, 0x2C, 0x42,\n\t0x33, 0x2E, 0x42, 0x33, 0x30, 0x42, 0x33, 0x31,\n\t0x42, 0x33, 0x32, 0x42, 0x33, 0x33, 0x42, 0x33,\n\t0x34, 0x42, 0x33, 0x35, 0x42, 0x33, 0x36, 0x42,\n\t0x33, 0x37, 0x42, 0x33, 0x38, 0x42, 0x33, 0x39,\n\t0x42, 0x34, 0x2C, 0x42, 0x34, 0x2E, 0x42, 0x34,\n\t0x30, 0x42, 0x34, 0x31, 0x42, 0x34, 0x32, 0x42,\n\t0x34, 0x33, 0x42, 0x34, 0x34, 0x42, 0x34, 0x35,\n\t// Bytes 1900 - 193f\n\t0x42, 0x34, 0x36, 0x42, 0x34, 0x37, 0x42, 0x34,\n\t0x38, 0x42, 0x34, 0x39, 0x42, 0x35, 0x2C, 0x42,\n\t0x35, 0x2E, 0x42, 0x35, 0x30, 0x42, 0x36, 0x2C,\n\t0x42, 0x36, 0x2E, 0x42, 0x37, 0x2C, 0x42, 0x37,\n\t0x2E, 0x42, 0x38, 0x2C, 0x42, 0x38, 0x2E, 0x42,\n\t0x39, 0x2C, 0x42, 0x39, 0x2E, 0x42, 0x3D, 0x3D,\n\t0x42, 0x3F, 0x21, 0x42, 0x3F, 0x3F, 0x42, 0x41,\n\t0x55, 0x42, 0x42, 0x71, 0x42, 0x43, 0x44, 0x42,\n\t// Bytes 1940 - 197f\n\t0x44, 0x4A, 0x42, 0x44, 0x5A, 0x42, 0x44, 0x7A,\n\t0x42, 0x47, 0x42, 0x42, 0x47, 0x79, 0x42, 0x48,\n\t0x50, 0x42, 0x48, 0x56, 0x42, 0x48, 0x67, 0x42,\n\t0x48, 0x7A, 0x42, 0x49, 0x49, 0x42, 0x49, 0x4A,\n\t0x42, 0x49, 0x55, 0x42, 0x49, 0x56, 0x42, 0x49,\n\t0x58, 0x42, 0x4B, 0x42, 0x42, 0x4B, 0x4B, 0x42,\n\t0x4B, 0x4D, 0x42, 0x4C, 0x4A, 0x42, 0x4C, 0x6A,\n\t0x42, 0x4D, 0x42, 0x42, 0x4D, 0x43, 0x42, 0x4D,\n\t// Bytes 1980 - 19bf\n\t0x44, 0x42, 0x4D, 0x56, 0x42, 0x4D, 0x57, 0x42,\n\t0x4E, 0x4A, 0x42, 0x4E, 0x6A, 0x42, 0x4E, 0x6F,\n\t0x42, 0x50, 0x48, 0x42, 0x50, 0x52, 0x42, 0x50,\n\t0x61, 0x42, 0x52, 0x73, 0x42, 0x53, 0x44, 0x42,\n\t0x53, 0x4D, 0x42, 0x53, 0x53, 0x42, 0x53, 0x76,\n\t0x42, 0x54, 0x4D, 0x42, 0x56, 0x49, 0x42, 0x57,\n\t0x43, 0x42, 0x57, 0x5A, 0x42, 0x57, 0x62, 0x42,\n\t0x58, 0x49, 0x42, 0x63, 0x63, 0x42, 0x63, 0x64,\n\t// Bytes 19c0 - 19ff\n\t0x42, 0x63, 0x6D, 0x42, 0x64, 0x42, 0x42, 0x64,\n\t0x61, 0x42, 0x64, 0x6C, 0x42, 0x64, 0x6D, 0x42,\n\t0x64, 0x7A, 0x42, 0x65, 0x56, 0x42, 0x66, 0x66,\n\t0x42, 0x66, 0x69, 0x42, 0x66, 0x6C, 0x42, 0x66,\n\t0x6D, 0x42, 0x68, 0x61, 0x42, 0x69, 0x69, 0x42,\n\t0x69, 0x6A, 0x42, 0x69, 0x6E, 0x42, 0x69, 0x76,\n\t0x42, 0x69, 0x78, 0x42, 0x6B, 0x41, 0x42, 0x6B,\n\t0x56, 0x42, 0x6B, 0x57, 0x42, 0x6B, 0x67, 0x42,\n\t// Bytes 1a00 - 1a3f\n\t0x6B, 0x6C, 0x42, 0x6B, 0x6D, 0x42, 0x6B, 0x74,\n\t0x42, 0x6C, 0x6A, 0x42, 0x6C, 0x6D, 0x42, 0x6C,\n\t0x6E, 0x42, 0x6C, 0x78, 0x42, 0x6D, 0x32, 0x42,\n\t0x6D, 0x33, 0x42, 0x6D, 0x41, 0x42, 0x6D, 0x56,\n\t0x42, 0x6D, 0x57, 0x42, 0x6D, 0x62, 0x42, 0x6D,\n\t0x67, 0x42, 0x6D, 0x6C, 0x42, 0x6D, 0x6D, 0x42,\n\t0x6D, 0x73, 0x42, 0x6E, 0x41, 0x42, 0x6E, 0x46,\n\t0x42, 0x6E, 0x56, 0x42, 0x6E, 0x57, 0x42, 0x6E,\n\t// Bytes 1a40 - 1a7f\n\t0x6A, 0x42, 0x6E, 0x6D, 0x42, 0x6E, 0x73, 0x42,\n\t0x6F, 0x56, 0x42, 0x70, 0x41, 0x42, 0x70, 0x46,\n\t0x42, 0x70, 0x56, 0x42, 0x70, 0x57, 0x42, 0x70,\n\t0x63, 0x42, 0x70, 0x73, 0x42, 0x73, 0x72, 0x42,\n\t0x73, 0x74, 0x42, 0x76, 0x69, 0x42, 0x78, 0x69,\n\t0x43, 0x28, 0x31, 0x29, 0x43, 0x28, 0x32, 0x29,\n\t0x43, 0x28, 0x33, 0x29, 0x43, 0x28, 0x34, 0x29,\n\t0x43, 0x28, 0x35, 0x29, 0x43, 0x28, 0x36, 0x29,\n\t// Bytes 1a80 - 1abf\n\t0x43, 0x28, 0x37, 0x29, 0x43, 0x28, 0x38, 0x29,\n\t0x43, 0x28, 0x39, 0x29, 0x43, 0x28, 0x41, 0x29,\n\t0x43, 0x28, 0x42, 0x29, 0x43, 0x28, 0x43, 0x29,\n\t0x43, 0x28, 0x44, 0x29, 0x43, 0x28, 0x45, 0x29,\n\t0x43, 0x28, 0x46, 0x29, 0x43, 0x28, 0x47, 0x29,\n\t0x43, 0x28, 0x48, 0x29, 0x43, 0x28, 0x49, 0x29,\n\t0x43, 0x28, 0x4A, 0x29, 0x43, 0x28, 0x4B, 0x29,\n\t0x43, 0x28, 0x4C, 0x29, 0x43, 0x28, 0x4D, 0x29,\n\t// Bytes 1ac0 - 1aff\n\t0x43, 0x28, 0x4E, 0x29, 0x43, 0x28, 0x4F, 0x29,\n\t0x43, 0x28, 0x50, 0x29, 0x43, 0x28, 0x51, 0x29,\n\t0x43, 0x28, 0x52, 0x29, 0x43, 0x28, 0x53, 0x29,\n\t0x43, 0x28, 0x54, 0x29, 0x43, 0x28, 0x55, 0x29,\n\t0x43, 0x28, 0x56, 0x29, 0x43, 0x28, 0x57, 0x29,\n\t0x43, 0x28, 0x58, 0x29, 0x43, 0x28, 0x59, 0x29,\n\t0x43, 0x28, 0x5A, 0x29, 0x43, 0x28, 0x61, 0x29,\n\t0x43, 0x28, 0x62, 0x29, 0x43, 0x28, 0x63, 0x29,\n\t// Bytes 1b00 - 1b3f\n\t0x43, 0x28, 0x64, 0x29, 0x43, 0x28, 0x65, 0x29,\n\t0x43, 0x28, 0x66, 0x29, 0x43, 0x28, 0x67, 0x29,\n\t0x43, 0x28, 0x68, 0x29, 0x43, 0x28, 0x69, 0x29,\n\t0x43, 0x28, 0x6A, 0x29, 0x43, 0x28, 0x6B, 0x29,\n\t0x43, 0x28, 0x6C, 0x29, 0x43, 0x28, 0x6D, 0x29,\n\t0x43, 0x28, 0x6E, 0x29, 0x43, 0x28, 0x6F, 0x29,\n\t0x43, 0x28, 0x70, 0x29, 0x43, 0x28, 0x71, 0x29,\n\t0x43, 0x28, 0x72, 0x29, 0x43, 0x28, 0x73, 0x29,\n\t// Bytes 1b40 - 1b7f\n\t0x43, 0x28, 0x74, 0x29, 0x43, 0x28, 0x75, 0x29,\n\t0x43, 0x28, 0x76, 0x29, 0x43, 0x28, 0x77, 0x29,\n\t0x43, 0x28, 0x78, 0x29, 0x43, 0x28, 0x79, 0x29,\n\t0x43, 0x28, 0x7A, 0x29, 0x43, 0x2E, 0x2E, 0x2E,\n\t0x43, 0x31, 0x30, 0x2E, 0x43, 0x31, 0x31, 0x2E,\n\t0x43, 0x31, 0x32, 0x2E, 0x43, 0x31, 0x33, 0x2E,\n\t0x43, 0x31, 0x34, 0x2E, 0x43, 0x31, 0x35, 0x2E,\n\t0x43, 0x31, 0x36, 0x2E, 0x43, 0x31, 0x37, 0x2E,\n\t// Bytes 1b80 - 1bbf\n\t0x43, 0x31, 0x38, 0x2E, 0x43, 0x31, 0x39, 0x2E,\n\t0x43, 0x32, 0x30, 0x2E, 0x43, 0x3A, 0x3A, 0x3D,\n\t0x43, 0x3D, 0x3D, 0x3D, 0x43, 0x43, 0x6F, 0x2E,\n\t0x43, 0x46, 0x41, 0x58, 0x43, 0x47, 0x48, 0x7A,\n\t0x43, 0x47, 0x50, 0x61, 0x43, 0x49, 0x49, 0x49,\n\t0x43, 0x4C, 0x54, 0x44, 0x43, 0x4C, 0xC2, 0xB7,\n\t0x43, 0x4D, 0x48, 0x7A, 0x43, 0x4D, 0x50, 0x61,\n\t0x43, 0x4D, 0xCE, 0xA9, 0x43, 0x50, 0x50, 0x4D,\n\t// Bytes 1bc0 - 1bff\n\t0x43, 0x50, 0x50, 0x56, 0x43, 0x50, 0x54, 0x45,\n\t0x43, 0x54, 0x45, 0x4C, 0x43, 0x54, 0x48, 0x7A,\n\t0x43, 0x56, 0x49, 0x49, 0x43, 0x58, 0x49, 0x49,\n\t0x43, 0x61, 0x2F, 0x63, 0x43, 0x61, 0x2F, 0x73,\n\t0x43, 0x61, 0xCA, 0xBE, 0x43, 0x62, 0x61, 0x72,\n\t0x43, 0x63, 0x2F, 0x6F, 0x43, 0x63, 0x2F, 0x75,\n\t0x43, 0x63, 0x61, 0x6C, 0x43, 0x63, 0x6D, 0x32,\n\t0x43, 0x63, 0x6D, 0x33, 0x43, 0x64, 0x6D, 0x32,\n\t// Bytes 1c00 - 1c3f\n\t0x43, 0x64, 0x6D, 0x33, 0x43, 0x65, 0x72, 0x67,\n\t0x43, 0x66, 0x66, 0x69, 0x43, 0x66, 0x66, 0x6C,\n\t0x43, 0x67, 0x61, 0x6C, 0x43, 0x68, 0x50, 0x61,\n\t0x43, 0x69, 0x69, 0x69, 0x43, 0x6B, 0x48, 0x7A,\n\t0x43, 0x6B, 0x50, 0x61, 0x43, 0x6B, 0x6D, 0x32,\n\t0x43, 0x6B, 0x6D, 0x33, 0x43, 0x6B, 0xCE, 0xA9,\n\t0x43, 0x6C, 0x6F, 0x67, 0x43, 0x6C, 0xC2, 0xB7,\n\t0x43, 0x6D, 0x69, 0x6C, 0x43, 0x6D, 0x6D, 0x32,\n\t// Bytes 1c40 - 1c7f\n\t0x43, 0x6D, 0x6D, 0x33, 0x43, 0x6D, 0x6F, 0x6C,\n\t0x43, 0x72, 0x61, 0x64, 0x43, 0x76, 0x69, 0x69,\n\t0x43, 0x78, 0x69, 0x69, 0x43, 0xC2, 0xB0, 0x43,\n\t0x43, 0xC2, 0xB0, 0x46, 0x43, 0xCA, 0xBC, 0x6E,\n\t0x43, 0xCE, 0xBC, 0x41, 0x43, 0xCE, 0xBC, 0x46,\n\t0x43, 0xCE, 0xBC, 0x56, 0x43, 0xCE, 0xBC, 0x57,\n\t0x43, 0xCE, 0xBC, 0x67, 0x43, 0xCE, 0xBC, 0x6C,\n\t0x43, 0xCE, 0xBC, 0x6D, 0x43, 0xCE, 0xBC, 0x73,\n\t// Bytes 1c80 - 1cbf\n\t0x44, 0x28, 0x31, 0x30, 0x29, 0x44, 0x28, 0x31,\n\t0x31, 0x29, 0x44, 0x28, 0x31, 0x32, 0x29, 0x44,\n\t0x28, 0x31, 0x33, 0x29, 0x44, 0x28, 0x31, 0x34,\n\t0x29, 0x44, 0x28, 0x31, 0x35, 0x29, 0x44, 0x28,\n\t0x31, 0x36, 0x29, 0x44, 0x28, 0x31, 0x37, 0x29,\n\t0x44, 0x28, 0x31, 0x38, 0x29, 0x44, 0x28, 0x31,\n\t0x39, 0x29, 0x44, 0x28, 0x32, 0x30, 0x29, 0x44,\n\t0x30, 0xE7, 0x82, 0xB9, 0x44, 0x31, 0xE2, 0x81,\n\t// Bytes 1cc0 - 1cff\n\t0x84, 0x44, 0x31, 0xE6, 0x97, 0xA5, 0x44, 0x31,\n\t0xE6, 0x9C, 0x88, 0x44, 0x31, 0xE7, 0x82, 0xB9,\n\t0x44, 0x32, 0xE6, 0x97, 0xA5, 0x44, 0x32, 0xE6,\n\t0x9C, 0x88, 0x44, 0x32, 0xE7, 0x82, 0xB9, 0x44,\n\t0x33, 0xE6, 0x97, 0xA5, 0x44, 0x33, 0xE6, 0x9C,\n\t0x88, 0x44, 0x33, 0xE7, 0x82, 0xB9, 0x44, 0x34,\n\t0xE6, 0x97, 0xA5, 0x44, 0x34, 0xE6, 0x9C, 0x88,\n\t0x44, 0x34, 0xE7, 0x82, 0xB9, 0x44, 0x35, 0xE6,\n\t// Bytes 1d00 - 1d3f\n\t0x97, 0xA5, 0x44, 0x35, 0xE6, 0x9C, 0x88, 0x44,\n\t0x35, 0xE7, 0x82, 0xB9, 0x44, 0x36, 0xE6, 0x97,\n\t0xA5, 0x44, 0x36, 0xE6, 0x9C, 0x88, 0x44, 0x36,\n\t0xE7, 0x82, 0xB9, 0x44, 0x37, 0xE6, 0x97, 0xA5,\n\t0x44, 0x37, 0xE6, 0x9C, 0x88, 0x44, 0x37, 0xE7,\n\t0x82, 0xB9, 0x44, 0x38, 0xE6, 0x97, 0xA5, 0x44,\n\t0x38, 0xE6, 0x9C, 0x88, 0x44, 0x38, 0xE7, 0x82,\n\t0xB9, 0x44, 0x39, 0xE6, 0x97, 0xA5, 0x44, 0x39,\n\t// Bytes 1d40 - 1d7f\n\t0xE6, 0x9C, 0x88, 0x44, 0x39, 0xE7, 0x82, 0xB9,\n\t0x44, 0x56, 0x49, 0x49, 0x49, 0x44, 0x61, 0x2E,\n\t0x6D, 0x2E, 0x44, 0x6B, 0x63, 0x61, 0x6C, 0x44,\n\t0x70, 0x2E, 0x6D, 0x2E, 0x44, 0x76, 0x69, 0x69,\n\t0x69, 0x44, 0xD5, 0xA5, 0xD6, 0x82, 0x44, 0xD5,\n\t0xB4, 0xD5, 0xA5, 0x44, 0xD5, 0xB4, 0xD5, 0xAB,\n\t0x44, 0xD5, 0xB4, 0xD5, 0xAD, 0x44, 0xD5, 0xB4,\n\t0xD5, 0xB6, 0x44, 0xD5, 0xBE, 0xD5, 0xB6, 0x44,\n\t// Bytes 1d80 - 1dbf\n\t0xD7, 0x90, 0xD7, 0x9C, 0x44, 0xD8, 0xA7, 0xD9,\n\t0xB4, 0x44, 0xD8, 0xA8, 0xD8, 0xAC, 0x44, 0xD8,\n\t0xA8, 0xD8, 0xAD, 0x44, 0xD8, 0xA8, 0xD8, 0xAE,\n\t0x44, 0xD8, 0xA8, 0xD8, 0xB1, 0x44, 0xD8, 0xA8,\n\t0xD8, 0xB2, 0x44, 0xD8, 0xA8, 0xD9, 0x85, 0x44,\n\t0xD8, 0xA8, 0xD9, 0x86, 0x44, 0xD8, 0xA8, 0xD9,\n\t0x87, 0x44, 0xD8, 0xA8, 0xD9, 0x89, 0x44, 0xD8,\n\t0xA8, 0xD9, 0x8A, 0x44, 0xD8, 0xAA, 0xD8, 0xAC,\n\t// Bytes 1dc0 - 1dff\n\t0x44, 0xD8, 0xAA, 0xD8, 0xAD, 0x44, 0xD8, 0xAA,\n\t0xD8, 0xAE, 0x44, 0xD8, 0xAA, 0xD8, 0xB1, 0x44,\n\t0xD8, 0xAA, 0xD8, 0xB2, 0x44, 0xD8, 0xAA, 0xD9,\n\t0x85, 0x44, 0xD8, 0xAA, 0xD9, 0x86, 0x44, 0xD8,\n\t0xAA, 0xD9, 0x87, 0x44, 0xD8, 0xAA, 0xD9, 0x89,\n\t0x44, 0xD8, 0xAA, 0xD9, 0x8A, 0x44, 0xD8, 0xAB,\n\t0xD8, 0xAC, 0x44, 0xD8, 0xAB, 0xD8, 0xB1, 0x44,\n\t0xD8, 0xAB, 0xD8, 0xB2, 0x44, 0xD8, 0xAB, 0xD9,\n\t// Bytes 1e00 - 1e3f\n\t0x85, 0x44, 0xD8, 0xAB, 0xD9, 0x86, 0x44, 0xD8,\n\t0xAB, 0xD9, 0x87, 0x44, 0xD8, 0xAB, 0xD9, 0x89,\n\t0x44, 0xD8, 0xAB, 0xD9, 0x8A, 0x44, 0xD8, 0xAC,\n\t0xD8, 0xAD, 0x44, 0xD8, 0xAC, 0xD9, 0x85, 0x44,\n\t0xD8, 0xAC, 0xD9, 0x89, 0x44, 0xD8, 0xAC, 0xD9,\n\t0x8A, 0x44, 0xD8, 0xAD, 0xD8, 0xAC, 0x44, 0xD8,\n\t0xAD, 0xD9, 0x85, 0x44, 0xD8, 0xAD, 0xD9, 0x89,\n\t0x44, 0xD8, 0xAD, 0xD9, 0x8A, 0x44, 0xD8, 0xAE,\n\t// Bytes 1e40 - 1e7f\n\t0xD8, 0xAC, 0x44, 0xD8, 0xAE, 0xD8, 0xAD, 0x44,\n\t0xD8, 0xAE, 0xD9, 0x85, 0x44, 0xD8, 0xAE, 0xD9,\n\t0x89, 0x44, 0xD8, 0xAE, 0xD9, 0x8A, 0x44, 0xD8,\n\t0xB3, 0xD8, 0xAC, 0x44, 0xD8, 0xB3, 0xD8, 0xAD,\n\t0x44, 0xD8, 0xB3, 0xD8, 0xAE, 0x44, 0xD8, 0xB3,\n\t0xD8, 0xB1, 0x44, 0xD8, 0xB3, 0xD9, 0x85, 0x44,\n\t0xD8, 0xB3, 0xD9, 0x87, 0x44, 0xD8, 0xB3, 0xD9,\n\t0x89, 0x44, 0xD8, 0xB3, 0xD9, 0x8A, 0x44, 0xD8,\n\t// Bytes 1e80 - 1ebf\n\t0xB4, 0xD8, 0xAC, 0x44, 0xD8, 0xB4, 0xD8, 0xAD,\n\t0x44, 0xD8, 0xB4, 0xD8, 0xAE, 0x44, 0xD8, 0xB4,\n\t0xD8, 0xB1, 0x44, 0xD8, 0xB4, 0xD9, 0x85, 0x44,\n\t0xD8, 0xB4, 0xD9, 0x87, 0x44, 0xD8, 0xB4, 0xD9,\n\t0x89, 0x44, 0xD8, 0xB4, 0xD9, 0x8A, 0x44, 0xD8,\n\t0xB5, 0xD8, 0xAD, 0x44, 0xD8, 0xB5, 0xD8, 0xAE,\n\t0x44, 0xD8, 0xB5, 0xD8, 0xB1, 0x44, 0xD8, 0xB5,\n\t0xD9, 0x85, 0x44, 0xD8, 0xB5, 0xD9, 0x89, 0x44,\n\t// Bytes 1ec0 - 1eff\n\t0xD8, 0xB5, 0xD9, 0x8A, 0x44, 0xD8, 0xB6, 0xD8,\n\t0xAC, 0x44, 0xD8, 0xB6, 0xD8, 0xAD, 0x44, 0xD8,\n\t0xB6, 0xD8, 0xAE, 0x44, 0xD8, 0xB6, 0xD8, 0xB1,\n\t0x44, 0xD8, 0xB6, 0xD9, 0x85, 0x44, 0xD8, 0xB6,\n\t0xD9, 0x89, 0x44, 0xD8, 0xB6, 0xD9, 0x8A, 0x44,\n\t0xD8, 0xB7, 0xD8, 0xAD, 0x44, 0xD8, 0xB7, 0xD9,\n\t0x85, 0x44, 0xD8, 0xB7, 0xD9, 0x89, 0x44, 0xD8,\n\t0xB7, 0xD9, 0x8A, 0x44, 0xD8, 0xB8, 0xD9, 0x85,\n\t// Bytes 1f00 - 1f3f\n\t0x44, 0xD8, 0xB9, 0xD8, 0xAC, 0x44, 0xD8, 0xB9,\n\t0xD9, 0x85, 0x44, 0xD8, 0xB9, 0xD9, 0x89, 0x44,\n\t0xD8, 0xB9, 0xD9, 0x8A, 0x44, 0xD8, 0xBA, 0xD8,\n\t0xAC, 0x44, 0xD8, 0xBA, 0xD9, 0x85, 0x44, 0xD8,\n\t0xBA, 0xD9, 0x89, 0x44, 0xD8, 0xBA, 0xD9, 0x8A,\n\t0x44, 0xD9, 0x81, 0xD8, 0xAC, 0x44, 0xD9, 0x81,\n\t0xD8, 0xAD, 0x44, 0xD9, 0x81, 0xD8, 0xAE, 0x44,\n\t0xD9, 0x81, 0xD9, 0x85, 0x44, 0xD9, 0x81, 0xD9,\n\t// Bytes 1f40 - 1f7f\n\t0x89, 0x44, 0xD9, 0x81, 0xD9, 0x8A, 0x44, 0xD9,\n\t0x82, 0xD8, 0xAD, 0x44, 0xD9, 0x82, 0xD9, 0x85,\n\t0x44, 0xD9, 0x82, 0xD9, 0x89, 0x44, 0xD9, 0x82,\n\t0xD9, 0x8A, 0x44, 0xD9, 0x83, 0xD8, 0xA7, 0x44,\n\t0xD9, 0x83, 0xD8, 0xAC, 0x44, 0xD9, 0x83, 0xD8,\n\t0xAD, 0x44, 0xD9, 0x83, 0xD8, 0xAE, 0x44, 0xD9,\n\t0x83, 0xD9, 0x84, 0x44, 0xD9, 0x83, 0xD9, 0x85,\n\t0x44, 0xD9, 0x83, 0xD9, 0x89, 0x44, 0xD9, 0x83,\n\t// Bytes 1f80 - 1fbf\n\t0xD9, 0x8A, 0x44, 0xD9, 0x84, 0xD8, 0xA7, 0x44,\n\t0xD9, 0x84, 0xD8, 0xAC, 0x44, 0xD9, 0x84, 0xD8,\n\t0xAD, 0x44, 0xD9, 0x84, 0xD8, 0xAE, 0x44, 0xD9,\n\t0x84, 0xD9, 0x85, 0x44, 0xD9, 0x84, 0xD9, 0x87,\n\t0x44, 0xD9, 0x84, 0xD9, 0x89, 0x44, 0xD9, 0x84,\n\t0xD9, 0x8A, 0x44, 0xD9, 0x85, 0xD8, 0xA7, 0x44,\n\t0xD9, 0x85, 0xD8, 0xAC, 0x44, 0xD9, 0x85, 0xD8,\n\t0xAD, 0x44, 0xD9, 0x85, 0xD8, 0xAE, 0x44, 0xD9,\n\t// Bytes 1fc0 - 1fff\n\t0x85, 0xD9, 0x85, 0x44, 0xD9, 0x85, 0xD9, 0x89,\n\t0x44, 0xD9, 0x85, 0xD9, 0x8A, 0x44, 0xD9, 0x86,\n\t0xD8, 0xAC, 0x44, 0xD9, 0x86, 0xD8, 0xAD, 0x44,\n\t0xD9, 0x86, 0xD8, 0xAE, 0x44, 0xD9, 0x86, 0xD8,\n\t0xB1, 0x44, 0xD9, 0x86, 0xD8, 0xB2, 0x44, 0xD9,\n\t0x86, 0xD9, 0x85, 0x44, 0xD9, 0x86, 0xD9, 0x86,\n\t0x44, 0xD9, 0x86, 0xD9, 0x87, 0x44, 0xD9, 0x86,\n\t0xD9, 0x89, 0x44, 0xD9, 0x86, 0xD9, 0x8A, 0x44,\n\t// Bytes 2000 - 203f\n\t0xD9, 0x87, 0xD8, 0xAC, 0x44, 0xD9, 0x87, 0xD9,\n\t0x85, 0x44, 0xD9, 0x87, 0xD9, 0x89, 0x44, 0xD9,\n\t0x87, 0xD9, 0x8A, 0x44, 0xD9, 0x88, 0xD9, 0xB4,\n\t0x44, 0xD9, 0x8A, 0xD8, 0xAC, 0x44, 0xD9, 0x8A,\n\t0xD8, 0xAD, 0x44, 0xD9, 0x8A, 0xD8, 0xAE, 0x44,\n\t0xD9, 0x8A, 0xD8, 0xB1, 0x44, 0xD9, 0x8A, 0xD8,\n\t0xB2, 0x44, 0xD9, 0x8A, 0xD9, 0x85, 0x44, 0xD9,\n\t0x8A, 0xD9, 0x86, 0x44, 0xD9, 0x8A, 0xD9, 0x87,\n\t// Bytes 2040 - 207f\n\t0x44, 0xD9, 0x8A, 0xD9, 0x89, 0x44, 0xD9, 0x8A,\n\t0xD9, 0x8A, 0x44, 0xD9, 0x8A, 0xD9, 0xB4, 0x44,\n\t0xDB, 0x87, 0xD9, 0xB4, 0x45, 0x28, 0xE1, 0x84,\n\t0x80, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x82, 0x29,\n\t0x45, 0x28, 0xE1, 0x84, 0x83, 0x29, 0x45, 0x28,\n\t0xE1, 0x84, 0x85, 0x29, 0x45, 0x28, 0xE1, 0x84,\n\t0x86, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x87, 0x29,\n\t0x45, 0x28, 0xE1, 0x84, 0x89, 0x29, 0x45, 0x28,\n\t// Bytes 2080 - 20bf\n\t0xE1, 0x84, 0x8B, 0x29, 0x45, 0x28, 0xE1, 0x84,\n\t0x8C, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x8E, 0x29,\n\t0x45, 0x28, 0xE1, 0x84, 0x8F, 0x29, 0x45, 0x28,\n\t0xE1, 0x84, 0x90, 0x29, 0x45, 0x28, 0xE1, 0x84,\n\t0x91, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x92, 0x29,\n\t0x45, 0x28, 0xE4, 0xB8, 0x80, 0x29, 0x45, 0x28,\n\t0xE4, 0xB8, 0x83, 0x29, 0x45, 0x28, 0xE4, 0xB8,\n\t0x89, 0x29, 0x45, 0x28, 0xE4, 0xB9, 0x9D, 0x29,\n\t// Bytes 20c0 - 20ff\n\t0x45, 0x28, 0xE4, 0xBA, 0x8C, 0x29, 0x45, 0x28,\n\t0xE4, 0xBA, 0x94, 0x29, 0x45, 0x28, 0xE4, 0xBB,\n\t0xA3, 0x29, 0x45, 0x28, 0xE4, 0xBC, 0x81, 0x29,\n\t0x45, 0x28, 0xE4, 0xBC, 0x91, 0x29, 0x45, 0x28,\n\t0xE5, 0x85, 0xAB, 0x29, 0x45, 0x28, 0xE5, 0x85,\n\t0xAD, 0x29, 0x45, 0x28, 0xE5, 0x8A, 0xB4, 0x29,\n\t0x45, 0x28, 0xE5, 0x8D, 0x81, 0x29, 0x45, 0x28,\n\t0xE5, 0x8D, 0x94, 0x29, 0x45, 0x28, 0xE5, 0x90,\n\t// Bytes 2100 - 213f\n\t0x8D, 0x29, 0x45, 0x28, 0xE5, 0x91, 0xBC, 0x29,\n\t0x45, 0x28, 0xE5, 0x9B, 0x9B, 0x29, 0x45, 0x28,\n\t0xE5, 0x9C, 0x9F, 0x29, 0x45, 0x28, 0xE5, 0xAD,\n\t0xA6, 0x29, 0x45, 0x28, 0xE6, 0x97, 0xA5, 0x29,\n\t0x45, 0x28, 0xE6, 0x9C, 0x88, 0x29, 0x45, 0x28,\n\t0xE6, 0x9C, 0x89, 0x29, 0x45, 0x28, 0xE6, 0x9C,\n\t0xA8, 0x29, 0x45, 0x28, 0xE6, 0xA0, 0xAA, 0x29,\n\t0x45, 0x28, 0xE6, 0xB0, 0xB4, 0x29, 0x45, 0x28,\n\t// Bytes 2140 - 217f\n\t0xE7, 0x81, 0xAB, 0x29, 0x45, 0x28, 0xE7, 0x89,\n\t0xB9, 0x29, 0x45, 0x28, 0xE7, 0x9B, 0xA3, 0x29,\n\t0x45, 0x28, 0xE7, 0xA4, 0xBE, 0x29, 0x45, 0x28,\n\t0xE7, 0xA5, 0x9D, 0x29, 0x45, 0x28, 0xE7, 0xA5,\n\t0xAD, 0x29, 0x45, 0x28, 0xE8, 0x87, 0xAA, 0x29,\n\t0x45, 0x28, 0xE8, 0x87, 0xB3, 0x29, 0x45, 0x28,\n\t0xE8, 0xB2, 0xA1, 0x29, 0x45, 0x28, 0xE8, 0xB3,\n\t0x87, 0x29, 0x45, 0x28, 0xE9, 0x87, 0x91, 0x29,\n\t// Bytes 2180 - 21bf\n\t0x45, 0x30, 0xE2, 0x81, 0x84, 0x33, 0x45, 0x31,\n\t0x30, 0xE6, 0x97, 0xA5, 0x45, 0x31, 0x30, 0xE6,\n\t0x9C, 0x88, 0x45, 0x31, 0x30, 0xE7, 0x82, 0xB9,\n\t0x45, 0x31, 0x31, 0xE6, 0x97, 0xA5, 0x45, 0x31,\n\t0x31, 0xE6, 0x9C, 0x88, 0x45, 0x31, 0x31, 0xE7,\n\t0x82, 0xB9, 0x45, 0x31, 0x32, 0xE6, 0x97, 0xA5,\n\t0x45, 0x31, 0x32, 0xE6, 0x9C, 0x88, 0x45, 0x31,\n\t0x32, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x33, 0xE6,\n\t// Bytes 21c0 - 21ff\n\t0x97, 0xA5, 0x45, 0x31, 0x33, 0xE7, 0x82, 0xB9,\n\t0x45, 0x31, 0x34, 0xE6, 0x97, 0xA5, 0x45, 0x31,\n\t0x34, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x35, 0xE6,\n\t0x97, 0xA5, 0x45, 0x31, 0x35, 0xE7, 0x82, 0xB9,\n\t0x45, 0x31, 0x36, 0xE6, 0x97, 0xA5, 0x45, 0x31,\n\t0x36, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x37, 0xE6,\n\t0x97, 0xA5, 0x45, 0x31, 0x37, 0xE7, 0x82, 0xB9,\n\t0x45, 0x31, 0x38, 0xE6, 0x97, 0xA5, 0x45, 0x31,\n\t// Bytes 2200 - 223f\n\t0x38, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x39, 0xE6,\n\t0x97, 0xA5, 0x45, 0x31, 0x39, 0xE7, 0x82, 0xB9,\n\t0x45, 0x31, 0xE2, 0x81, 0x84, 0x32, 0x45, 0x31,\n\t0xE2, 0x81, 0x84, 0x33, 0x45, 0x31, 0xE2, 0x81,\n\t0x84, 0x34, 0x45, 0x31, 0xE2, 0x81, 0x84, 0x35,\n\t0x45, 0x31, 0xE2, 0x81, 0x84, 0x36, 0x45, 0x31,\n\t0xE2, 0x81, 0x84, 0x37, 0x45, 0x31, 0xE2, 0x81,\n\t0x84, 0x38, 0x45, 0x31, 0xE2, 0x81, 0x84, 0x39,\n\t// Bytes 2240 - 227f\n\t0x45, 0x32, 0x30, 0xE6, 0x97, 0xA5, 0x45, 0x32,\n\t0x30, 0xE7, 0x82, 0xB9, 0x45, 0x32, 0x31, 0xE6,\n\t0x97, 0xA5, 0x45, 0x32, 0x31, 0xE7, 0x82, 0xB9,\n\t0x45, 0x32, 0x32, 0xE6, 0x97, 0xA5, 0x45, 0x32,\n\t0x32, 0xE7, 0x82, 0xB9, 0x45, 0x32, 0x33, 0xE6,\n\t0x97, 0xA5, 0x45, 0x32, 0x33, 0xE7, 0x82, 0xB9,\n\t0x45, 0x32, 0x34, 0xE6, 0x97, 0xA5, 0x45, 0x32,\n\t0x34, 0xE7, 0x82, 0xB9, 0x45, 0x32, 0x35, 0xE6,\n\t// Bytes 2280 - 22bf\n\t0x97, 0xA5, 0x45, 0x32, 0x36, 0xE6, 0x97, 0xA5,\n\t0x45, 0x32, 0x37, 0xE6, 0x97, 0xA5, 0x45, 0x32,\n\t0x38, 0xE6, 0x97, 0xA5, 0x45, 0x32, 0x39, 0xE6,\n\t0x97, 0xA5, 0x45, 0x32, 0xE2, 0x81, 0x84, 0x33,\n\t0x45, 0x32, 0xE2, 0x81, 0x84, 0x35, 0x45, 0x33,\n\t0x30, 0xE6, 0x97, 0xA5, 0x45, 0x33, 0x31, 0xE6,\n\t0x97, 0xA5, 0x45, 0x33, 0xE2, 0x81, 0x84, 0x34,\n\t0x45, 0x33, 0xE2, 0x81, 0x84, 0x35, 0x45, 0x33,\n\t// Bytes 22c0 - 22ff\n\t0xE2, 0x81, 0x84, 0x38, 0x45, 0x34, 0xE2, 0x81,\n\t0x84, 0x35, 0x45, 0x35, 0xE2, 0x81, 0x84, 0x36,\n\t0x45, 0x35, 0xE2, 0x81, 0x84, 0x38, 0x45, 0x37,\n\t0xE2, 0x81, 0x84, 0x38, 0x45, 0x41, 0xE2, 0x88,\n\t0x95, 0x6D, 0x45, 0x56, 0xE2, 0x88, 0x95, 0x6D,\n\t0x45, 0x6D, 0xE2, 0x88, 0x95, 0x73, 0x46, 0x31,\n\t0xE2, 0x81, 0x84, 0x31, 0x30, 0x46, 0x43, 0xE2,\n\t0x88, 0x95, 0x6B, 0x67, 0x46, 0x6D, 0xE2, 0x88,\n\t// Bytes 2300 - 233f\n\t0x95, 0x73, 0x32, 0x46, 0xD8, 0xA8, 0xD8, 0xAD,\n\t0xD9, 0x8A, 0x46, 0xD8, 0xA8, 0xD8, 0xAE, 0xD9,\n\t0x8A, 0x46, 0xD8, 0xAA, 0xD8, 0xAC, 0xD9, 0x85,\n\t0x46, 0xD8, 0xAA, 0xD8, 0xAC, 0xD9, 0x89, 0x46,\n\t0xD8, 0xAA, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD8,\n\t0xAA, 0xD8, 0xAD, 0xD8, 0xAC, 0x46, 0xD8, 0xAA,\n\t0xD8, 0xAD, 0xD9, 0x85, 0x46, 0xD8, 0xAA, 0xD8,\n\t0xAE, 0xD9, 0x85, 0x46, 0xD8, 0xAA, 0xD8, 0xAE,\n\t// Bytes 2340 - 237f\n\t0xD9, 0x89, 0x46, 0xD8, 0xAA, 0xD8, 0xAE, 0xD9,\n\t0x8A, 0x46, 0xD8, 0xAA, 0xD9, 0x85, 0xD8, 0xAC,\n\t0x46, 0xD8, 0xAA, 0xD9, 0x85, 0xD8, 0xAD, 0x46,\n\t0xD8, 0xAA, 0xD9, 0x85, 0xD8, 0xAE, 0x46, 0xD8,\n\t0xAA, 0xD9, 0x85, 0xD9, 0x89, 0x46, 0xD8, 0xAA,\n\t0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD8, 0xAC, 0xD8,\n\t0xAD, 0xD9, 0x89, 0x46, 0xD8, 0xAC, 0xD8, 0xAD,\n\t0xD9, 0x8A, 0x46, 0xD8, 0xAC, 0xD9, 0x85, 0xD8,\n\t// Bytes 2380 - 23bf\n\t0xAD, 0x46, 0xD8, 0xAC, 0xD9, 0x85, 0xD9, 0x89,\n\t0x46, 0xD8, 0xAC, 0xD9, 0x85, 0xD9, 0x8A, 0x46,\n\t0xD8, 0xAD, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD8,\n\t0xAD, 0xD9, 0x85, 0xD9, 0x89, 0x46, 0xD8, 0xAD,\n\t0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD8, 0xB3, 0xD8,\n\t0xAC, 0xD8, 0xAD, 0x46, 0xD8, 0xB3, 0xD8, 0xAC,\n\t0xD9, 0x89, 0x46, 0xD8, 0xB3, 0xD8, 0xAD, 0xD8,\n\t0xAC, 0x46, 0xD8, 0xB3, 0xD8, 0xAE, 0xD9, 0x89,\n\t// Bytes 23c0 - 23ff\n\t0x46, 0xD8, 0xB3, 0xD8, 0xAE, 0xD9, 0x8A, 0x46,\n\t0xD8, 0xB3, 0xD9, 0x85, 0xD8, 0xAC, 0x46, 0xD8,\n\t0xB3, 0xD9, 0x85, 0xD8, 0xAD, 0x46, 0xD8, 0xB3,\n\t0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD8, 0xB4, 0xD8,\n\t0xAC, 0xD9, 0x8A, 0x46, 0xD8, 0xB4, 0xD8, 0xAD,\n\t0xD9, 0x85, 0x46, 0xD8, 0xB4, 0xD8, 0xAD, 0xD9,\n\t0x8A, 0x46, 0xD8, 0xB4, 0xD9, 0x85, 0xD8, 0xAE,\n\t0x46, 0xD8, 0xB4, 0xD9, 0x85, 0xD9, 0x85, 0x46,\n\t// Bytes 2400 - 243f\n\t0xD8, 0xB5, 0xD8, 0xAD, 0xD8, 0xAD, 0x46, 0xD8,\n\t0xB5, 0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD8, 0xB5,\n\t0xD9, 0x84, 0xD9, 0x89, 0x46, 0xD8, 0xB5, 0xD9,\n\t0x84, 0xDB, 0x92, 0x46, 0xD8, 0xB5, 0xD9, 0x85,\n\t0xD9, 0x85, 0x46, 0xD8, 0xB6, 0xD8, 0xAD, 0xD9,\n\t0x89, 0x46, 0xD8, 0xB6, 0xD8, 0xAD, 0xD9, 0x8A,\n\t0x46, 0xD8, 0xB6, 0xD8, 0xAE, 0xD9, 0x85, 0x46,\n\t0xD8, 0xB7, 0xD9, 0x85, 0xD8, 0xAD, 0x46, 0xD8,\n\t// Bytes 2440 - 247f\n\t0xB7, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD8, 0xB7,\n\t0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD8, 0xB9, 0xD8,\n\t0xAC, 0xD9, 0x85, 0x46, 0xD8, 0xB9, 0xD9, 0x85,\n\t0xD9, 0x85, 0x46, 0xD8, 0xB9, 0xD9, 0x85, 0xD9,\n\t0x89, 0x46, 0xD8, 0xB9, 0xD9, 0x85, 0xD9, 0x8A,\n\t0x46, 0xD8, 0xBA, 0xD9, 0x85, 0xD9, 0x85, 0x46,\n\t0xD8, 0xBA, 0xD9, 0x85, 0xD9, 0x89, 0x46, 0xD8,\n\t0xBA, 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x81,\n\t// Bytes 2480 - 24bf\n\t0xD8, 0xAE, 0xD9, 0x85, 0x46, 0xD9, 0x81, 0xD9,\n\t0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x82, 0xD9, 0x84,\n\t0xDB, 0x92, 0x46, 0xD9, 0x82, 0xD9, 0x85, 0xD8,\n\t0xAD, 0x46, 0xD9, 0x82, 0xD9, 0x85, 0xD9, 0x85,\n\t0x46, 0xD9, 0x82, 0xD9, 0x85, 0xD9, 0x8A, 0x46,\n\t0xD9, 0x83, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD9,\n\t0x83, 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x84,\n\t0xD8, 0xAC, 0xD8, 0xAC, 0x46, 0xD9, 0x84, 0xD8,\n\t// Bytes 24c0 - 24ff\n\t0xAC, 0xD9, 0x85, 0x46, 0xD9, 0x84, 0xD8, 0xAC,\n\t0xD9, 0x8A, 0x46, 0xD9, 0x84, 0xD8, 0xAD, 0xD9,\n\t0x85, 0x46, 0xD9, 0x84, 0xD8, 0xAD, 0xD9, 0x89,\n\t0x46, 0xD9, 0x84, 0xD8, 0xAD, 0xD9, 0x8A, 0x46,\n\t0xD9, 0x84, 0xD8, 0xAE, 0xD9, 0x85, 0x46, 0xD9,\n\t0x84, 0xD9, 0x85, 0xD8, 0xAD, 0x46, 0xD9, 0x84,\n\t0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x85, 0xD8,\n\t0xAC, 0xD8, 0xAD, 0x46, 0xD9, 0x85, 0xD8, 0xAC,\n\t// Bytes 2500 - 253f\n\t0xD8, 0xAE, 0x46, 0xD9, 0x85, 0xD8, 0xAC, 0xD9,\n\t0x85, 0x46, 0xD9, 0x85, 0xD8, 0xAC, 0xD9, 0x8A,\n\t0x46, 0xD9, 0x85, 0xD8, 0xAD, 0xD8, 0xAC, 0x46,\n\t0xD9, 0x85, 0xD8, 0xAD, 0xD9, 0x85, 0x46, 0xD9,\n\t0x85, 0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD9, 0x85,\n\t0xD8, 0xAE, 0xD8, 0xAC, 0x46, 0xD9, 0x85, 0xD8,\n\t0xAE, 0xD9, 0x85, 0x46, 0xD9, 0x85, 0xD8, 0xAE,\n\t0xD9, 0x8A, 0x46, 0xD9, 0x85, 0xD9, 0x85, 0xD9,\n\t// Bytes 2540 - 257f\n\t0x8A, 0x46, 0xD9, 0x86, 0xD8, 0xAC, 0xD8, 0xAD,\n\t0x46, 0xD9, 0x86, 0xD8, 0xAC, 0xD9, 0x85, 0x46,\n\t0xD9, 0x86, 0xD8, 0xAC, 0xD9, 0x89, 0x46, 0xD9,\n\t0x86, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD9, 0x86,\n\t0xD8, 0xAD, 0xD9, 0x85, 0x46, 0xD9, 0x86, 0xD8,\n\t0xAD, 0xD9, 0x89, 0x46, 0xD9, 0x86, 0xD8, 0xAD,\n\t0xD9, 0x8A, 0x46, 0xD9, 0x86, 0xD9, 0x85, 0xD9,\n\t0x89, 0x46, 0xD9, 0x86, 0xD9, 0x85, 0xD9, 0x8A,\n\t// Bytes 2580 - 25bf\n\t0x46, 0xD9, 0x87, 0xD9, 0x85, 0xD8, 0xAC, 0x46,\n\t0xD9, 0x87, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD9,\n\t0x8A, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD9, 0x8A,\n\t0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD9, 0x8A, 0xD9,\n\t0x85, 0xD9, 0x85, 0x46, 0xD9, 0x8A, 0xD9, 0x85,\n\t0xD9, 0x8A, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD8,\n\t0xA7, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xAC,\n\t0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xAD, 0x46,\n\t// Bytes 25c0 - 25ff\n\t0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xAE, 0x46, 0xD9,\n\t0x8A, 0xD9, 0x94, 0xD8, 0xB1, 0x46, 0xD9, 0x8A,\n\t0xD9, 0x94, 0xD8, 0xB2, 0x46, 0xD9, 0x8A, 0xD9,\n\t0x94, 0xD9, 0x85, 0x46, 0xD9, 0x8A, 0xD9, 0x94,\n\t0xD9, 0x86, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD9,\n\t0x87, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x88,\n\t0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x89, 0x46,\n\t0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x8A, 0x46, 0xD9,\n\t// Bytes 2600 - 263f\n\t0x8A, 0xD9, 0x94, 0xDB, 0x86, 0x46, 0xD9, 0x8A,\n\t0xD9, 0x94, 0xDB, 0x87, 0x46, 0xD9, 0x8A, 0xD9,\n\t0x94, 0xDB, 0x88, 0x46, 0xD9, 0x8A, 0xD9, 0x94,\n\t0xDB, 0x90, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xDB,\n\t0x95, 0x46, 0xE0, 0xB9, 0x8D, 0xE0, 0xB8, 0xB2,\n\t0x46, 0xE0, 0xBA, 0xAB, 0xE0, 0xBA, 0x99, 0x46,\n\t0xE0, 0xBA, 0xAB, 0xE0, 0xBA, 0xA1, 0x46, 0xE0,\n\t0xBB, 0x8D, 0xE0, 0xBA, 0xB2, 0x46, 0xE0, 0xBD,\n\t// Bytes 2640 - 267f\n\t0x80, 0xE0, 0xBE, 0xB5, 0x46, 0xE0, 0xBD, 0x82,\n\t0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBD, 0x8C, 0xE0,\n\t0xBE, 0xB7, 0x46, 0xE0, 0xBD, 0x91, 0xE0, 0xBE,\n\t0xB7, 0x46, 0xE0, 0xBD, 0x96, 0xE0, 0xBE, 0xB7,\n\t0x46, 0xE0, 0xBD, 0x9B, 0xE0, 0xBE, 0xB7, 0x46,\n\t0xE0, 0xBE, 0x90, 0xE0, 0xBE, 0xB5, 0x46, 0xE0,\n\t0xBE, 0x92, 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBE,\n\t0x9C, 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBE, 0xA1,\n\t// Bytes 2680 - 26bf\n\t0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBE, 0xA6, 0xE0,\n\t0xBE, 0xB7, 0x46, 0xE0, 0xBE, 0xAB, 0xE0, 0xBE,\n\t0xB7, 0x46, 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2,\n\t0x46, 0xE2, 0x80, 0xB5, 0xE2, 0x80, 0xB5, 0x46,\n\t0xE2, 0x88, 0xAB, 0xE2, 0x88, 0xAB, 0x46, 0xE2,\n\t0x88, 0xAE, 0xE2, 0x88, 0xAE, 0x46, 0xE3, 0x81,\n\t0xBB, 0xE3, 0x81, 0x8B, 0x46, 0xE3, 0x82, 0x88,\n\t0xE3, 0x82, 0x8A, 0x46, 0xE3, 0x82, 0xAD, 0xE3,\n\t// Bytes 26c0 - 26ff\n\t0x83, 0xAD, 0x46, 0xE3, 0x82, 0xB3, 0xE3, 0x82,\n\t0xB3, 0x46, 0xE3, 0x82, 0xB3, 0xE3, 0x83, 0x88,\n\t0x46, 0xE3, 0x83, 0x88, 0xE3, 0x83, 0xB3, 0x46,\n\t0xE3, 0x83, 0x8A, 0xE3, 0x83, 0x8E, 0x46, 0xE3,\n\t0x83, 0x9B, 0xE3, 0x83, 0xB3, 0x46, 0xE3, 0x83,\n\t0x9F, 0xE3, 0x83, 0xAA, 0x46, 0xE3, 0x83, 0xAA,\n\t0xE3, 0x83, 0xA9, 0x46, 0xE3, 0x83, 0xAC, 0xE3,\n\t0x83, 0xA0, 0x46, 0xE5, 0xA4, 0xA7, 0xE6, 0xAD,\n\t// Bytes 2700 - 273f\n\t0xA3, 0x46, 0xE5, 0xB9, 0xB3, 0xE6, 0x88, 0x90,\n\t0x46, 0xE6, 0x98, 0x8E, 0xE6, 0xB2, 0xBB, 0x46,\n\t0xE6, 0x98, 0xAD, 0xE5, 0x92, 0x8C, 0x47, 0x72,\n\t0x61, 0x64, 0xE2, 0x88, 0x95, 0x73, 0x47, 0xE3,\n\t0x80, 0x94, 0x53, 0xE3, 0x80, 0x95, 0x48, 0x28,\n\t0xE1, 0x84, 0x80, 0xE1, 0x85, 0xA1, 0x29, 0x48,\n\t0x28, 0xE1, 0x84, 0x82, 0xE1, 0x85, 0xA1, 0x29,\n\t0x48, 0x28, 0xE1, 0x84, 0x83, 0xE1, 0x85, 0xA1,\n\t// Bytes 2740 - 277f\n\t0x29, 0x48, 0x28, 0xE1, 0x84, 0x85, 0xE1, 0x85,\n\t0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x86, 0xE1,\n\t0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x87,\n\t0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84,\n\t0x89, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1,\n\t0x84, 0x8B, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28,\n\t0xE1, 0x84, 0x8C, 0xE1, 0x85, 0xA1, 0x29, 0x48,\n\t0x28, 0xE1, 0x84, 0x8C, 0xE1, 0x85, 0xAE, 0x29,\n\t// Bytes 2780 - 27bf\n\t0x48, 0x28, 0xE1, 0x84, 0x8E, 0xE1, 0x85, 0xA1,\n\t0x29, 0x48, 0x28, 0xE1, 0x84, 0x8F, 0xE1, 0x85,\n\t0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x90, 0xE1,\n\t0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x91,\n\t0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84,\n\t0x92, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x72, 0x61,\n\t0x64, 0xE2, 0x88, 0x95, 0x73, 0x32, 0x48, 0xD8,\n\t0xA7, 0xD9, 0x83, 0xD8, 0xA8, 0xD8, 0xB1, 0x48,\n\t// Bytes 27c0 - 27ff\n\t0xD8, 0xA7, 0xD9, 0x84, 0xD9, 0x84, 0xD9, 0x87,\n\t0x48, 0xD8, 0xB1, 0xD8, 0xB3, 0xD9, 0x88, 0xD9,\n\t0x84, 0x48, 0xD8, 0xB1, 0xDB, 0x8C, 0xD8, 0xA7,\n\t0xD9, 0x84, 0x48, 0xD8, 0xB5, 0xD9, 0x84, 0xD8,\n\t0xB9, 0xD9, 0x85, 0x48, 0xD8, 0xB9, 0xD9, 0x84,\n\t0xD9, 0x8A, 0xD9, 0x87, 0x48, 0xD9, 0x85, 0xD8,\n\t0xAD, 0xD9, 0x85, 0xD8, 0xAF, 0x48, 0xD9, 0x88,\n\t0xD8, 0xB3, 0xD9, 0x84, 0xD9, 0x85, 0x49, 0xE2,\n\t// Bytes 2800 - 283f\n\t0x80, 0xB2, 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2,\n\t0x49, 0xE2, 0x80, 0xB5, 0xE2, 0x80, 0xB5, 0xE2,\n\t0x80, 0xB5, 0x49, 0xE2, 0x88, 0xAB, 0xE2, 0x88,\n\t0xAB, 0xE2, 0x88, 0xAB, 0x49, 0xE2, 0x88, 0xAE,\n\t0xE2, 0x88, 0xAE, 0xE2, 0x88, 0xAE, 0x49, 0xE3,\n\t0x80, 0x94, 0xE4, 0xB8, 0x89, 0xE3, 0x80, 0x95,\n\t0x49, 0xE3, 0x80, 0x94, 0xE4, 0xBA, 0x8C, 0xE3,\n\t0x80, 0x95, 0x49, 0xE3, 0x80, 0x94, 0xE5, 0x8B,\n\t// Bytes 2840 - 287f\n\t0x9D, 0xE3, 0x80, 0x95, 0x49, 0xE3, 0x80, 0x94,\n\t0xE5, 0xAE, 0x89, 0xE3, 0x80, 0x95, 0x49, 0xE3,\n\t0x80, 0x94, 0xE6, 0x89, 0x93, 0xE3, 0x80, 0x95,\n\t0x49, 0xE3, 0x80, 0x94, 0xE6, 0x95, 0x97, 0xE3,\n\t0x80, 0x95, 0x49, 0xE3, 0x80, 0x94, 0xE6, 0x9C,\n\t0xAC, 0xE3, 0x80, 0x95, 0x49, 0xE3, 0x80, 0x94,\n\t0xE7, 0x82, 0xB9, 0xE3, 0x80, 0x95, 0x49, 0xE3,\n\t0x80, 0x94, 0xE7, 0x9B, 0x97, 0xE3, 0x80, 0x95,\n\t// Bytes 2880 - 28bf\n\t0x49, 0xE3, 0x82, 0xA2, 0xE3, 0x83, 0xBC, 0xE3,\n\t0x83, 0xAB, 0x49, 0xE3, 0x82, 0xA4, 0xE3, 0x83,\n\t0xB3, 0xE3, 0x83, 0x81, 0x49, 0xE3, 0x82, 0xA6,\n\t0xE3, 0x82, 0xA9, 0xE3, 0x83, 0xB3, 0x49, 0xE3,\n\t0x82, 0xAA, 0xE3, 0x83, 0xB3, 0xE3, 0x82, 0xB9,\n\t0x49, 0xE3, 0x82, 0xAA, 0xE3, 0x83, 0xBC, 0xE3,\n\t0x83, 0xA0, 0x49, 0xE3, 0x82, 0xAB, 0xE3, 0x82,\n\t0xA4, 0xE3, 0x83, 0xAA, 0x49, 0xE3, 0x82, 0xB1,\n\t// Bytes 28c0 - 28ff\n\t0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xB9, 0x49, 0xE3,\n\t0x82, 0xB3, 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x8A,\n\t0x49, 0xE3, 0x82, 0xBB, 0xE3, 0x83, 0xB3, 0xE3,\n\t0x83, 0x81, 0x49, 0xE3, 0x82, 0xBB, 0xE3, 0x83,\n\t0xB3, 0xE3, 0x83, 0x88, 0x49, 0xE3, 0x83, 0x86,\n\t0xE3, 0x82, 0x99, 0xE3, 0x82, 0xB7, 0x49, 0xE3,\n\t0x83, 0x88, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xAB,\n\t0x49, 0xE3, 0x83, 0x8E, 0xE3, 0x83, 0x83, 0xE3,\n\t// Bytes 2900 - 293f\n\t0x83, 0x88, 0x49, 0xE3, 0x83, 0x8F, 0xE3, 0x82,\n\t0xA4, 0xE3, 0x83, 0x84, 0x49, 0xE3, 0x83, 0x92,\n\t0xE3, 0x82, 0x99, 0xE3, 0x83, 0xAB, 0x49, 0xE3,\n\t0x83, 0x92, 0xE3, 0x82, 0x9A, 0xE3, 0x82, 0xB3,\n\t0x49, 0xE3, 0x83, 0x95, 0xE3, 0x83, 0xA9, 0xE3,\n\t0x83, 0xB3, 0x49, 0xE3, 0x83, 0x98, 0xE3, 0x82,\n\t0x9A, 0xE3, 0x82, 0xBD, 0x49, 0xE3, 0x83, 0x98,\n\t0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x84, 0x49, 0xE3,\n\t// Bytes 2940 - 297f\n\t0x83, 0x9B, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xAB,\n\t0x49, 0xE3, 0x83, 0x9B, 0xE3, 0x83, 0xBC, 0xE3,\n\t0x83, 0xB3, 0x49, 0xE3, 0x83, 0x9E, 0xE3, 0x82,\n\t0xA4, 0xE3, 0x83, 0xAB, 0x49, 0xE3, 0x83, 0x9E,\n\t0xE3, 0x83, 0x83, 0xE3, 0x83, 0x8F, 0x49, 0xE3,\n\t0x83, 0x9E, 0xE3, 0x83, 0xAB, 0xE3, 0x82, 0xAF,\n\t0x49, 0xE3, 0x83, 0xA4, 0xE3, 0x83, 0xBC, 0xE3,\n\t0x83, 0xAB, 0x49, 0xE3, 0x83, 0xA6, 0xE3, 0x82,\n\t// Bytes 2980 - 29bf\n\t0xA2, 0xE3, 0x83, 0xB3, 0x49, 0xE3, 0x83, 0xAF,\n\t0xE3, 0x83, 0x83, 0xE3, 0x83, 0x88, 0x4C, 0xE2,\n\t0x80, 0xB2, 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2,\n\t0xE2, 0x80, 0xB2, 0x4C, 0xE2, 0x88, 0xAB, 0xE2,\n\t0x88, 0xAB, 0xE2, 0x88, 0xAB, 0xE2, 0x88, 0xAB,\n\t0x4C, 0xE3, 0x82, 0xA2, 0xE3, 0x83, 0xAB, 0xE3,\n\t0x83, 0x95, 0xE3, 0x82, 0xA1, 0x4C, 0xE3, 0x82,\n\t0xA8, 0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xAB, 0xE3,\n\t// Bytes 29c0 - 29ff\n\t0x83, 0xBC, 0x4C, 0xE3, 0x82, 0xAB, 0xE3, 0x82,\n\t0x99, 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xB3, 0x4C,\n\t0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0xE3, 0x83,\n\t0xB3, 0xE3, 0x83, 0x9E, 0x4C, 0xE3, 0x82, 0xAB,\n\t0xE3, 0x83, 0xA9, 0xE3, 0x83, 0x83, 0xE3, 0x83,\n\t0x88, 0x4C, 0xE3, 0x82, 0xAB, 0xE3, 0x83, 0xAD,\n\t0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xBC, 0x4C, 0xE3,\n\t0x82, 0xAD, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0x8B,\n\t// Bytes 2a00 - 2a3f\n\t0xE3, 0x83, 0xBC, 0x4C, 0xE3, 0x82, 0xAD, 0xE3,\n\t0x83, 0xA5, 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xBC,\n\t0x4C, 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0xE3,\n\t0x83, 0xA9, 0xE3, 0x83, 0xA0, 0x4C, 0xE3, 0x82,\n\t0xAF, 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xBC, 0xE3,\n\t0x83, 0x8D, 0x4C, 0xE3, 0x82, 0xB5, 0xE3, 0x82,\n\t0xA4, 0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAB, 0x4C,\n\t0xE3, 0x82, 0xBF, 0xE3, 0x82, 0x99, 0xE3, 0x83,\n\t// Bytes 2a40 - 2a7f\n\t0xBC, 0xE3, 0x82, 0xB9, 0x4C, 0xE3, 0x83, 0x8F,\n\t0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC, 0xE3, 0x83,\n\t0x84, 0x4C, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A,\n\t0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAB, 0x4C, 0xE3,\n\t0x83, 0x95, 0xE3, 0x82, 0xA3, 0xE3, 0x83, 0xBC,\n\t0xE3, 0x83, 0x88, 0x4C, 0xE3, 0x83, 0x98, 0xE3,\n\t0x82, 0x99, 0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xBF,\n\t0x4C, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, 0xE3,\n\t// Bytes 2a80 - 2abf\n\t0x83, 0x8B, 0xE3, 0x83, 0x92, 0x4C, 0xE3, 0x83,\n\t0x98, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xB3, 0xE3,\n\t0x82, 0xB9, 0x4C, 0xE3, 0x83, 0x9B, 0xE3, 0x82,\n\t0x99, 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x88, 0x4C,\n\t0xE3, 0x83, 0x9E, 0xE3, 0x82, 0xA4, 0xE3, 0x82,\n\t0xAF, 0xE3, 0x83, 0xAD, 0x4C, 0xE3, 0x83, 0x9F,\n\t0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAD, 0xE3, 0x83,\n\t0xB3, 0x4C, 0xE3, 0x83, 0xA1, 0xE3, 0x83, 0xBC,\n\t// Bytes 2ac0 - 2aff\n\t0xE3, 0x83, 0x88, 0xE3, 0x83, 0xAB, 0x4C, 0xE3,\n\t0x83, 0xAA, 0xE3, 0x83, 0x83, 0xE3, 0x83, 0x88,\n\t0xE3, 0x83, 0xAB, 0x4C, 0xE3, 0x83, 0xAB, 0xE3,\n\t0x83, 0x92, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC,\n\t0x4C, 0xE6, 0xA0, 0xAA, 0xE5, 0xBC, 0x8F, 0xE4,\n\t0xBC, 0x9A, 0xE7, 0xA4, 0xBE, 0x4E, 0x28, 0xE1,\n\t0x84, 0x8B, 0xE1, 0x85, 0xA9, 0xE1, 0x84, 0x92,\n\t0xE1, 0x85, 0xAE, 0x29, 0x4F, 0xD8, 0xAC, 0xD9,\n\t// Bytes 2b00 - 2b3f\n\t0x84, 0x20, 0xD8, 0xAC, 0xD9, 0x84, 0xD8, 0xA7,\n\t0xD9, 0x84, 0xD9, 0x87, 0x4F, 0xE3, 0x82, 0xA2,\n\t0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x9A, 0xE3, 0x83,\n\t0xBC, 0xE3, 0x83, 0x88, 0x4F, 0xE3, 0x82, 0xA2,\n\t0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x98, 0xE3, 0x82,\n\t0x9A, 0xE3, 0x82, 0xA2, 0x4F, 0xE3, 0x82, 0xAD,\n\t0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xAF, 0xE3, 0x83,\n\t0x83, 0xE3, 0x83, 0x88, 0x4F, 0xE3, 0x82, 0xB5,\n\t// Bytes 2b40 - 2b7f\n\t0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x81, 0xE3, 0x83,\n\t0xBC, 0xE3, 0x83, 0xA0, 0x4F, 0xE3, 0x83, 0x8F,\n\t0xE3, 0x82, 0x99, 0xE3, 0x83, 0xBC, 0xE3, 0x83,\n\t0xAC, 0xE3, 0x83, 0xAB, 0x4F, 0xE3, 0x83, 0x98,\n\t0xE3, 0x82, 0xAF, 0xE3, 0x82, 0xBF, 0xE3, 0x83,\n\t0xBC, 0xE3, 0x83, 0xAB, 0x4F, 0xE3, 0x83, 0x9B,\n\t0xE3, 0x82, 0x9A, 0xE3, 0x82, 0xA4, 0xE3, 0x83,\n\t0xB3, 0xE3, 0x83, 0x88, 0x4F, 0xE3, 0x83, 0x9E,\n\t// Bytes 2b80 - 2bbf\n\t0xE3, 0x83, 0xB3, 0xE3, 0x82, 0xB7, 0xE3, 0x83,\n\t0xA7, 0xE3, 0x83, 0xB3, 0x4F, 0xE3, 0x83, 0xA1,\n\t0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0xE3, 0x83,\n\t0x88, 0xE3, 0x83, 0xB3, 0x4F, 0xE3, 0x83, 0xAB,\n\t0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x95, 0xE3, 0x82,\n\t0x99, 0xE3, 0x83, 0xAB, 0x51, 0x28, 0xE1, 0x84,\n\t0x8B, 0xE1, 0x85, 0xA9, 0xE1, 0x84, 0x8C, 0xE1,\n\t0x85, 0xA5, 0xE1, 0x86, 0xAB, 0x29, 0x52, 0xE3,\n\t// Bytes 2bc0 - 2bff\n\t0x82, 0xAD, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xAB,\n\t0xE3, 0x82, 0xBF, 0xE3, 0x82, 0x99, 0xE3, 0x83,\n\t0xBC, 0x52, 0xE3, 0x82, 0xAD, 0xE3, 0x83, 0xAD,\n\t0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0xE3, 0x83,\n\t0xA9, 0xE3, 0x83, 0xA0, 0x52, 0xE3, 0x82, 0xAD,\n\t0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xA1, 0xE3, 0x83,\n\t0xBC, 0xE3, 0x83, 0x88, 0xE3, 0x83, 0xAB, 0x52,\n\t0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0xE3, 0x83,\n\t// Bytes 2c00 - 2c3f\n\t0xA9, 0xE3, 0x83, 0xA0, 0xE3, 0x83, 0x88, 0xE3,\n\t0x83, 0xB3, 0x52, 0xE3, 0x82, 0xAF, 0xE3, 0x83,\n\t0xAB, 0xE3, 0x82, 0xBB, 0xE3, 0x82, 0x99, 0xE3,\n\t0x82, 0xA4, 0xE3, 0x83, 0xAD, 0x52, 0xE3, 0x83,\n\t0x8F, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC, 0xE3,\n\t0x82, 0xBB, 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x88,\n\t0x52, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A, 0xE3,\n\t0x82, 0xA2, 0xE3, 0x82, 0xB9, 0xE3, 0x83, 0x88,\n\t// Bytes 2c40 - 2c7f\n\t0xE3, 0x83, 0xAB, 0x52, 0xE3, 0x83, 0x95, 0xE3,\n\t0x82, 0x99, 0xE3, 0x83, 0x83, 0xE3, 0x82, 0xB7,\n\t0xE3, 0x82, 0xA7, 0xE3, 0x83, 0xAB, 0x52, 0xE3,\n\t0x83, 0x9F, 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0x8F,\n\t0xE3, 0x82, 0x99, 0xE3, 0x83, 0xBC, 0xE3, 0x83,\n\t0xAB, 0x52, 0xE3, 0x83, 0xAC, 0xE3, 0x83, 0xB3,\n\t0xE3, 0x83, 0x88, 0xE3, 0x82, 0xB1, 0xE3, 0x82,\n\t0x99, 0xE3, 0x83, 0xB3, 0x61, 0xD8, 0xB5, 0xD9,\n\t// Bytes 2c80 - 2cbf\n\t0x84, 0xD9, 0x89, 0x20, 0xD8, 0xA7, 0xD9, 0x84,\n\t0xD9, 0x84, 0xD9, 0x87, 0x20, 0xD8, 0xB9, 0xD9,\n\t0x84, 0xD9, 0x8A, 0xD9, 0x87, 0x20, 0xD9, 0x88,\n\t0xD8, 0xB3, 0xD9, 0x84, 0xD9, 0x85, 0x06, 0xE0,\n\t0xA7, 0x87, 0xE0, 0xA6, 0xBE, 0x01, 0x06, 0xE0,\n\t0xA7, 0x87, 0xE0, 0xA7, 0x97, 0x01, 0x06, 0xE0,\n\t0xAD, 0x87, 0xE0, 0xAC, 0xBE, 0x01, 0x06, 0xE0,\n\t0xAD, 0x87, 0xE0, 0xAD, 0x96, 0x01, 0x06, 0xE0,\n\t// Bytes 2cc0 - 2cff\n\t0xAD, 0x87, 0xE0, 0xAD, 0x97, 0x01, 0x06, 0xE0,\n\t0xAE, 0x92, 0xE0, 0xAF, 0x97, 0x01, 0x06, 0xE0,\n\t0xAF, 0x86, 0xE0, 0xAE, 0xBE, 0x01, 0x06, 0xE0,\n\t0xAF, 0x86, 0xE0, 0xAF, 0x97, 0x01, 0x06, 0xE0,\n\t0xAF, 0x87, 0xE0, 0xAE, 0xBE, 0x01, 0x06, 0xE0,\n\t0xB2, 0xBF, 0xE0, 0xB3, 0x95, 0x01, 0x06, 0xE0,\n\t0xB3, 0x86, 0xE0, 0xB3, 0x95, 0x01, 0x06, 0xE0,\n\t0xB3, 0x86, 0xE0, 0xB3, 0x96, 0x01, 0x06, 0xE0,\n\t// Bytes 2d00 - 2d3f\n\t0xB5, 0x86, 0xE0, 0xB4, 0xBE, 0x01, 0x06, 0xE0,\n\t0xB5, 0x86, 0xE0, 0xB5, 0x97, 0x01, 0x06, 0xE0,\n\t0xB5, 0x87, 0xE0, 0xB4, 0xBE, 0x01, 0x06, 0xE0,\n\t0xB7, 0x99, 0xE0, 0xB7, 0x9F, 0x01, 0x06, 0xE1,\n\t0x80, 0xA5, 0xE1, 0x80, 0xAE, 0x01, 0x06, 0xE1,\n\t0xAC, 0x85, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,\n\t0xAC, 0x87, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,\n\t0xAC, 0x89, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,\n\t// Bytes 2d40 - 2d7f\n\t0xAC, 0x8B, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,\n\t0xAC, 0x8D, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,\n\t0xAC, 0x91, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,\n\t0xAC, 0xBA, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,\n\t0xAC, 0xBC, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,\n\t0xAC, 0xBE, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,\n\t0xAC, 0xBF, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,\n\t0xAD, 0x82, 0xE1, 0xAC, 0xB5, 0x01, 0x08, 0xF0,\n\t// Bytes 2d80 - 2dbf\n\t0x91, 0x84, 0xB1, 0xF0, 0x91, 0x84, 0xA7, 0x01,\n\t0x08, 0xF0, 0x91, 0x84, 0xB2, 0xF0, 0x91, 0x84,\n\t0xA7, 0x01, 0x08, 0xF0, 0x91, 0x8D, 0x87, 0xF0,\n\t0x91, 0x8C, 0xBE, 0x01, 0x08, 0xF0, 0x91, 0x8D,\n\t0x87, 0xF0, 0x91, 0x8D, 0x97, 0x01, 0x08, 0xF0,\n\t0x91, 0x92, 0xB9, 0xF0, 0x91, 0x92, 0xB0, 0x01,\n\t0x08, 0xF0, 0x91, 0x92, 0xB9, 0xF0, 0x91, 0x92,\n\t0xBA, 0x01, 0x08, 0xF0, 0x91, 0x92, 0xB9, 0xF0,\n\t// Bytes 2dc0 - 2dff\n\t0x91, 0x92, 0xBD, 0x01, 0x08, 0xF0, 0x91, 0x96,\n\t0xB8, 0xF0, 0x91, 0x96, 0xAF, 0x01, 0x08, 0xF0,\n\t0x91, 0x96, 0xB9, 0xF0, 0x91, 0x96, 0xAF, 0x01,\n\t0x09, 0xE0, 0xB3, 0x86, 0xE0, 0xB3, 0x82, 0xE0,\n\t0xB3, 0x95, 0x02, 0x09, 0xE0, 0xB7, 0x99, 0xE0,\n\t0xB7, 0x8F, 0xE0, 0xB7, 0x8A, 0x12, 0x44, 0x44,\n\t0x5A, 0xCC, 0x8C, 0xC9, 0x44, 0x44, 0x7A, 0xCC,\n\t0x8C, 0xC9, 0x44, 0x64, 0x7A, 0xCC, 0x8C, 0xC9,\n\t// Bytes 2e00 - 2e3f\n\t0x46, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x93, 0xC9,\n\t0x46, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x94, 0xC9,\n\t0x46, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x95, 0xB5,\n\t0x46, 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xA1, 0x01,\n\t0x46, 0xE1, 0x84, 0x82, 0xE1, 0x85, 0xA1, 0x01,\n\t0x46, 0xE1, 0x84, 0x83, 0xE1, 0x85, 0xA1, 0x01,\n\t0x46, 0xE1, 0x84, 0x85, 0xE1, 0x85, 0xA1, 0x01,\n\t0x46, 0xE1, 0x84, 0x86, 0xE1, 0x85, 0xA1, 0x01,\n\t// Bytes 2e40 - 2e7f\n\t0x46, 0xE1, 0x84, 0x87, 0xE1, 0x85, 0xA1, 0x01,\n\t0x46, 0xE1, 0x84, 0x89, 0xE1, 0x85, 0xA1, 0x01,\n\t0x46, 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xA1, 0x01,\n\t0x46, 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xAE, 0x01,\n\t0x46, 0xE1, 0x84, 0x8C, 0xE1, 0x85, 0xA1, 0x01,\n\t0x46, 0xE1, 0x84, 0x8E, 0xE1, 0x85, 0xA1, 0x01,\n\t0x46, 0xE1, 0x84, 0x8F, 0xE1, 0x85, 0xA1, 0x01,\n\t0x46, 0xE1, 0x84, 0x90, 0xE1, 0x85, 0xA1, 0x01,\n\t// Bytes 2e80 - 2ebf\n\t0x46, 0xE1, 0x84, 0x91, 0xE1, 0x85, 0xA1, 0x01,\n\t0x46, 0xE1, 0x84, 0x92, 0xE1, 0x85, 0xA1, 0x01,\n\t0x49, 0xE3, 0x83, 0xA1, 0xE3, 0x82, 0xAB, 0xE3,\n\t0x82, 0x99, 0x0D, 0x4C, 0xE1, 0x84, 0x8C, 0xE1,\n\t0x85, 0xAE, 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xB4,\n\t0x01, 0x4C, 0xE3, 0x82, 0xAD, 0xE3, 0x82, 0x99,\n\t0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0x0D, 0x4C,\n\t0xE3, 0x82, 0xB3, 0xE3, 0x83, 0xBC, 0xE3, 0x83,\n\t// Bytes 2ec0 - 2eff\n\t0x9B, 0xE3, 0x82, 0x9A, 0x0D, 0x4C, 0xE3, 0x83,\n\t0xA4, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88, 0xE3,\n\t0x82, 0x99, 0x0D, 0x4F, 0xE1, 0x84, 0x8E, 0xE1,\n\t0x85, 0xA1, 0xE1, 0x86, 0xB7, 0xE1, 0x84, 0x80,\n\t0xE1, 0x85, 0xA9, 0x01, 0x4F, 0xE3, 0x82, 0xA4,\n\t0xE3, 0x83, 0x8B, 0xE3, 0x83, 0xB3, 0xE3, 0x82,\n\t0xAF, 0xE3, 0x82, 0x99, 0x0D, 0x4F, 0xE3, 0x82,\n\t0xB7, 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xB3, 0xE3,\n\t// Bytes 2f00 - 2f3f\n\t0x82, 0xAF, 0xE3, 0x82, 0x99, 0x0D, 0x4F, 0xE3,\n\t0x83, 0x98, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC,\n\t0xE3, 0x82, 0xB7, 0xE3, 0x82, 0x99, 0x0D, 0x4F,\n\t0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x9A, 0xE3, 0x83,\n\t0xB3, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x0D,\n\t0x52, 0xE3, 0x82, 0xA8, 0xE3, 0x82, 0xB9, 0xE3,\n\t0x82, 0xAF, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88,\n\t0xE3, 0x82, 0x99, 0x0D, 0x52, 0xE3, 0x83, 0x95,\n\t// Bytes 2f40 - 2f7f\n\t0xE3, 0x82, 0xA1, 0xE3, 0x83, 0xA9, 0xE3, 0x83,\n\t0x83, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x0D,\n\t0x86, 0xE0, 0xB3, 0x86, 0xE0, 0xB3, 0x82, 0x01,\n\t0x86, 0xE0, 0xB7, 0x99, 0xE0, 0xB7, 0x8F, 0x01,\n\t0x03, 0x3C, 0xCC, 0xB8, 0x05, 0x03, 0x3D, 0xCC,\n\t0xB8, 0x05, 0x03, 0x3E, 0xCC, 0xB8, 0x05, 0x03,\n\t0x41, 0xCC, 0x80, 0xC9, 0x03, 0x41, 0xCC, 0x81,\n\t0xC9, 0x03, 0x41, 0xCC, 0x83, 0xC9, 0x03, 0x41,\n\t// Bytes 2f80 - 2fbf\n\t0xCC, 0x84, 0xC9, 0x03, 0x41, 0xCC, 0x89, 0xC9,\n\t0x03, 0x41, 0xCC, 0x8C, 0xC9, 0x03, 0x41, 0xCC,\n\t0x8F, 0xC9, 0x03, 0x41, 0xCC, 0x91, 0xC9, 0x03,\n\t0x41, 0xCC, 0xA5, 0xB5, 0x03, 0x41, 0xCC, 0xA8,\n\t0xA5, 0x03, 0x42, 0xCC, 0x87, 0xC9, 0x03, 0x42,\n\t0xCC, 0xA3, 0xB5, 0x03, 0x42, 0xCC, 0xB1, 0xB5,\n\t0x03, 0x43, 0xCC, 0x81, 0xC9, 0x03, 0x43, 0xCC,\n\t0x82, 0xC9, 0x03, 0x43, 0xCC, 0x87, 0xC9, 0x03,\n\t// Bytes 2fc0 - 2fff\n\t0x43, 0xCC, 0x8C, 0xC9, 0x03, 0x44, 0xCC, 0x87,\n\t0xC9, 0x03, 0x44, 0xCC, 0x8C, 0xC9, 0x03, 0x44,\n\t0xCC, 0xA3, 0xB5, 0x03, 0x44, 0xCC, 0xA7, 0xA5,\n\t0x03, 0x44, 0xCC, 0xAD, 0xB5, 0x03, 0x44, 0xCC,\n\t0xB1, 0xB5, 0x03, 0x45, 0xCC, 0x80, 0xC9, 0x03,\n\t0x45, 0xCC, 0x81, 0xC9, 0x03, 0x45, 0xCC, 0x83,\n\t0xC9, 0x03, 0x45, 0xCC, 0x86, 0xC9, 0x03, 0x45,\n\t0xCC, 0x87, 0xC9, 0x03, 0x45, 0xCC, 0x88, 0xC9,\n\t// Bytes 3000 - 303f\n\t0x03, 0x45, 0xCC, 0x89, 0xC9, 0x03, 0x45, 0xCC,\n\t0x8C, 0xC9, 0x03, 0x45, 0xCC, 0x8F, 0xC9, 0x03,\n\t0x45, 0xCC, 0x91, 0xC9, 0x03, 0x45, 0xCC, 0xA8,\n\t0xA5, 0x03, 0x45, 0xCC, 0xAD, 0xB5, 0x03, 0x45,\n\t0xCC, 0xB0, 0xB5, 0x03, 0x46, 0xCC, 0x87, 0xC9,\n\t0x03, 0x47, 0xCC, 0x81, 0xC9, 0x03, 0x47, 0xCC,\n\t0x82, 0xC9, 0x03, 0x47, 0xCC, 0x84, 0xC9, 0x03,\n\t0x47, 0xCC, 0x86, 0xC9, 0x03, 0x47, 0xCC, 0x87,\n\t// Bytes 3040 - 307f\n\t0xC9, 0x03, 0x47, 0xCC, 0x8C, 0xC9, 0x03, 0x47,\n\t0xCC, 0xA7, 0xA5, 0x03, 0x48, 0xCC, 0x82, 0xC9,\n\t0x03, 0x48, 0xCC, 0x87, 0xC9, 0x03, 0x48, 0xCC,\n\t0x88, 0xC9, 0x03, 0x48, 0xCC, 0x8C, 0xC9, 0x03,\n\t0x48, 0xCC, 0xA3, 0xB5, 0x03, 0x48, 0xCC, 0xA7,\n\t0xA5, 0x03, 0x48, 0xCC, 0xAE, 0xB5, 0x03, 0x49,\n\t0xCC, 0x80, 0xC9, 0x03, 0x49, 0xCC, 0x81, 0xC9,\n\t0x03, 0x49, 0xCC, 0x82, 0xC9, 0x03, 0x49, 0xCC,\n\t// Bytes 3080 - 30bf\n\t0x83, 0xC9, 0x03, 0x49, 0xCC, 0x84, 0xC9, 0x03,\n\t0x49, 0xCC, 0x86, 0xC9, 0x03, 0x49, 0xCC, 0x87,\n\t0xC9, 0x03, 0x49, 0xCC, 0x89, 0xC9, 0x03, 0x49,\n\t0xCC, 0x8C, 0xC9, 0x03, 0x49, 0xCC, 0x8F, 0xC9,\n\t0x03, 0x49, 0xCC, 0x91, 0xC9, 0x03, 0x49, 0xCC,\n\t0xA3, 0xB5, 0x03, 0x49, 0xCC, 0xA8, 0xA5, 0x03,\n\t0x49, 0xCC, 0xB0, 0xB5, 0x03, 0x4A, 0xCC, 0x82,\n\t0xC9, 0x03, 0x4B, 0xCC, 0x81, 0xC9, 0x03, 0x4B,\n\t// Bytes 30c0 - 30ff\n\t0xCC, 0x8C, 0xC9, 0x03, 0x4B, 0xCC, 0xA3, 0xB5,\n\t0x03, 0x4B, 0xCC, 0xA7, 0xA5, 0x03, 0x4B, 0xCC,\n\t0xB1, 0xB5, 0x03, 0x4C, 0xCC, 0x81, 0xC9, 0x03,\n\t0x4C, 0xCC, 0x8C, 0xC9, 0x03, 0x4C, 0xCC, 0xA7,\n\t0xA5, 0x03, 0x4C, 0xCC, 0xAD, 0xB5, 0x03, 0x4C,\n\t0xCC, 0xB1, 0xB5, 0x03, 0x4D, 0xCC, 0x81, 0xC9,\n\t0x03, 0x4D, 0xCC, 0x87, 0xC9, 0x03, 0x4D, 0xCC,\n\t0xA3, 0xB5, 0x03, 0x4E, 0xCC, 0x80, 0xC9, 0x03,\n\t// Bytes 3100 - 313f\n\t0x4E, 0xCC, 0x81, 0xC9, 0x03, 0x4E, 0xCC, 0x83,\n\t0xC9, 0x03, 0x4E, 0xCC, 0x87, 0xC9, 0x03, 0x4E,\n\t0xCC, 0x8C, 0xC9, 0x03, 0x4E, 0xCC, 0xA3, 0xB5,\n\t0x03, 0x4E, 0xCC, 0xA7, 0xA5, 0x03, 0x4E, 0xCC,\n\t0xAD, 0xB5, 0x03, 0x4E, 0xCC, 0xB1, 0xB5, 0x03,\n\t0x4F, 0xCC, 0x80, 0xC9, 0x03, 0x4F, 0xCC, 0x81,\n\t0xC9, 0x03, 0x4F, 0xCC, 0x86, 0xC9, 0x03, 0x4F,\n\t0xCC, 0x89, 0xC9, 0x03, 0x4F, 0xCC, 0x8B, 0xC9,\n\t// Bytes 3140 - 317f\n\t0x03, 0x4F, 0xCC, 0x8C, 0xC9, 0x03, 0x4F, 0xCC,\n\t0x8F, 0xC9, 0x03, 0x4F, 0xCC, 0x91, 0xC9, 0x03,\n\t0x50, 0xCC, 0x81, 0xC9, 0x03, 0x50, 0xCC, 0x87,\n\t0xC9, 0x03, 0x52, 0xCC, 0x81, 0xC9, 0x03, 0x52,\n\t0xCC, 0x87, 0xC9, 0x03, 0x52, 0xCC, 0x8C, 0xC9,\n\t0x03, 0x52, 0xCC, 0x8F, 0xC9, 0x03, 0x52, 0xCC,\n\t0x91, 0xC9, 0x03, 0x52, 0xCC, 0xA7, 0xA5, 0x03,\n\t0x52, 0xCC, 0xB1, 0xB5, 0x03, 0x53, 0xCC, 0x82,\n\t// Bytes 3180 - 31bf\n\t0xC9, 0x03, 0x53, 0xCC, 0x87, 0xC9, 0x03, 0x53,\n\t0xCC, 0xA6, 0xB5, 0x03, 0x53, 0xCC, 0xA7, 0xA5,\n\t0x03, 0x54, 0xCC, 0x87, 0xC9, 0x03, 0x54, 0xCC,\n\t0x8C, 0xC9, 0x03, 0x54, 0xCC, 0xA3, 0xB5, 0x03,\n\t0x54, 0xCC, 0xA6, 0xB5, 0x03, 0x54, 0xCC, 0xA7,\n\t0xA5, 0x03, 0x54, 0xCC, 0xAD, 0xB5, 0x03, 0x54,\n\t0xCC, 0xB1, 0xB5, 0x03, 0x55, 0xCC, 0x80, 0xC9,\n\t0x03, 0x55, 0xCC, 0x81, 0xC9, 0x03, 0x55, 0xCC,\n\t// Bytes 31c0 - 31ff\n\t0x82, 0xC9, 0x03, 0x55, 0xCC, 0x86, 0xC9, 0x03,\n\t0x55, 0xCC, 0x89, 0xC9, 0x03, 0x55, 0xCC, 0x8A,\n\t0xC9, 0x03, 0x55, 0xCC, 0x8B, 0xC9, 0x03, 0x55,\n\t0xCC, 0x8C, 0xC9, 0x03, 0x55, 0xCC, 0x8F, 0xC9,\n\t0x03, 0x55, 0xCC, 0x91, 0xC9, 0x03, 0x55, 0xCC,\n\t0xA3, 0xB5, 0x03, 0x55, 0xCC, 0xA4, 0xB5, 0x03,\n\t0x55, 0xCC, 0xA8, 0xA5, 0x03, 0x55, 0xCC, 0xAD,\n\t0xB5, 0x03, 0x55, 0xCC, 0xB0, 0xB5, 0x03, 0x56,\n\t// Bytes 3200 - 323f\n\t0xCC, 0x83, 0xC9, 0x03, 0x56, 0xCC, 0xA3, 0xB5,\n\t0x03, 0x57, 0xCC, 0x80, 0xC9, 0x03, 0x57, 0xCC,\n\t0x81, 0xC9, 0x03, 0x57, 0xCC, 0x82, 0xC9, 0x03,\n\t0x57, 0xCC, 0x87, 0xC9, 0x03, 0x57, 0xCC, 0x88,\n\t0xC9, 0x03, 0x57, 0xCC, 0xA3, 0xB5, 0x03, 0x58,\n\t0xCC, 0x87, 0xC9, 0x03, 0x58, 0xCC, 0x88, 0xC9,\n\t0x03, 0x59, 0xCC, 0x80, 0xC9, 0x03, 0x59, 0xCC,\n\t0x81, 0xC9, 0x03, 0x59, 0xCC, 0x82, 0xC9, 0x03,\n\t// Bytes 3240 - 327f\n\t0x59, 0xCC, 0x83, 0xC9, 0x03, 0x59, 0xCC, 0x84,\n\t0xC9, 0x03, 0x59, 0xCC, 0x87, 0xC9, 0x03, 0x59,\n\t0xCC, 0x88, 0xC9, 0x03, 0x59, 0xCC, 0x89, 0xC9,\n\t0x03, 0x59, 0xCC, 0xA3, 0xB5, 0x03, 0x5A, 0xCC,\n\t0x81, 0xC9, 0x03, 0x5A, 0xCC, 0x82, 0xC9, 0x03,\n\t0x5A, 0xCC, 0x87, 0xC9, 0x03, 0x5A, 0xCC, 0x8C,\n\t0xC9, 0x03, 0x5A, 0xCC, 0xA3, 0xB5, 0x03, 0x5A,\n\t0xCC, 0xB1, 0xB5, 0x03, 0x61, 0xCC, 0x80, 0xC9,\n\t// Bytes 3280 - 32bf\n\t0x03, 0x61, 0xCC, 0x81, 0xC9, 0x03, 0x61, 0xCC,\n\t0x83, 0xC9, 0x03, 0x61, 0xCC, 0x84, 0xC9, 0x03,\n\t0x61, 0xCC, 0x89, 0xC9, 0x03, 0x61, 0xCC, 0x8C,\n\t0xC9, 0x03, 0x61, 0xCC, 0x8F, 0xC9, 0x03, 0x61,\n\t0xCC, 0x91, 0xC9, 0x03, 0x61, 0xCC, 0xA5, 0xB5,\n\t0x03, 0x61, 0xCC, 0xA8, 0xA5, 0x03, 0x62, 0xCC,\n\t0x87, 0xC9, 0x03, 0x62, 0xCC, 0xA3, 0xB5, 0x03,\n\t0x62, 0xCC, 0xB1, 0xB5, 0x03, 0x63, 0xCC, 0x81,\n\t// Bytes 32c0 - 32ff\n\t0xC9, 0x03, 0x63, 0xCC, 0x82, 0xC9, 0x03, 0x63,\n\t0xCC, 0x87, 0xC9, 0x03, 0x63, 0xCC, 0x8C, 0xC9,\n\t0x03, 0x64, 0xCC, 0x87, 0xC9, 0x03, 0x64, 0xCC,\n\t0x8C, 0xC9, 0x03, 0x64, 0xCC, 0xA3, 0xB5, 0x03,\n\t0x64, 0xCC, 0xA7, 0xA5, 0x03, 0x64, 0xCC, 0xAD,\n\t0xB5, 0x03, 0x64, 0xCC, 0xB1, 0xB5, 0x03, 0x65,\n\t0xCC, 0x80, 0xC9, 0x03, 0x65, 0xCC, 0x81, 0xC9,\n\t0x03, 0x65, 0xCC, 0x83, 0xC9, 0x03, 0x65, 0xCC,\n\t// Bytes 3300 - 333f\n\t0x86, 0xC9, 0x03, 0x65, 0xCC, 0x87, 0xC9, 0x03,\n\t0x65, 0xCC, 0x88, 0xC9, 0x03, 0x65, 0xCC, 0x89,\n\t0xC9, 0x03, 0x65, 0xCC, 0x8C, 0xC9, 0x03, 0x65,\n\t0xCC, 0x8F, 0xC9, 0x03, 0x65, 0xCC, 0x91, 0xC9,\n\t0x03, 0x65, 0xCC, 0xA8, 0xA5, 0x03, 0x65, 0xCC,\n\t0xAD, 0xB5, 0x03, 0x65, 0xCC, 0xB0, 0xB5, 0x03,\n\t0x66, 0xCC, 0x87, 0xC9, 0x03, 0x67, 0xCC, 0x81,\n\t0xC9, 0x03, 0x67, 0xCC, 0x82, 0xC9, 0x03, 0x67,\n\t// Bytes 3340 - 337f\n\t0xCC, 0x84, 0xC9, 0x03, 0x67, 0xCC, 0x86, 0xC9,\n\t0x03, 0x67, 0xCC, 0x87, 0xC9, 0x03, 0x67, 0xCC,\n\t0x8C, 0xC9, 0x03, 0x67, 0xCC, 0xA7, 0xA5, 0x03,\n\t0x68, 0xCC, 0x82, 0xC9, 0x03, 0x68, 0xCC, 0x87,\n\t0xC9, 0x03, 0x68, 0xCC, 0x88, 0xC9, 0x03, 0x68,\n\t0xCC, 0x8C, 0xC9, 0x03, 0x68, 0xCC, 0xA3, 0xB5,\n\t0x03, 0x68, 0xCC, 0xA7, 0xA5, 0x03, 0x68, 0xCC,\n\t0xAE, 0xB5, 0x03, 0x68, 0xCC, 0xB1, 0xB5, 0x03,\n\t// Bytes 3380 - 33bf\n\t0x69, 0xCC, 0x80, 0xC9, 0x03, 0x69, 0xCC, 0x81,\n\t0xC9, 0x03, 0x69, 0xCC, 0x82, 0xC9, 0x03, 0x69,\n\t0xCC, 0x83, 0xC9, 0x03, 0x69, 0xCC, 0x84, 0xC9,\n\t0x03, 0x69, 0xCC, 0x86, 0xC9, 0x03, 0x69, 0xCC,\n\t0x89, 0xC9, 0x03, 0x69, 0xCC, 0x8C, 0xC9, 0x03,\n\t0x69, 0xCC, 0x8F, 0xC9, 0x03, 0x69, 0xCC, 0x91,\n\t0xC9, 0x03, 0x69, 0xCC, 0xA3, 0xB5, 0x03, 0x69,\n\t0xCC, 0xA8, 0xA5, 0x03, 0x69, 0xCC, 0xB0, 0xB5,\n\t// Bytes 33c0 - 33ff\n\t0x03, 0x6A, 0xCC, 0x82, 0xC9, 0x03, 0x6A, 0xCC,\n\t0x8C, 0xC9, 0x03, 0x6B, 0xCC, 0x81, 0xC9, 0x03,\n\t0x6B, 0xCC, 0x8C, 0xC9, 0x03, 0x6B, 0xCC, 0xA3,\n\t0xB5, 0x03, 0x6B, 0xCC, 0xA7, 0xA5, 0x03, 0x6B,\n\t0xCC, 0xB1, 0xB5, 0x03, 0x6C, 0xCC, 0x81, 0xC9,\n\t0x03, 0x6C, 0xCC, 0x8C, 0xC9, 0x03, 0x6C, 0xCC,\n\t0xA7, 0xA5, 0x03, 0x6C, 0xCC, 0xAD, 0xB5, 0x03,\n\t0x6C, 0xCC, 0xB1, 0xB5, 0x03, 0x6D, 0xCC, 0x81,\n\t// Bytes 3400 - 343f\n\t0xC9, 0x03, 0x6D, 0xCC, 0x87, 0xC9, 0x03, 0x6D,\n\t0xCC, 0xA3, 0xB5, 0x03, 0x6E, 0xCC, 0x80, 0xC9,\n\t0x03, 0x6E, 0xCC, 0x81, 0xC9, 0x03, 0x6E, 0xCC,\n\t0x83, 0xC9, 0x03, 0x6E, 0xCC, 0x87, 0xC9, 0x03,\n\t0x6E, 0xCC, 0x8C, 0xC9, 0x03, 0x6E, 0xCC, 0xA3,\n\t0xB5, 0x03, 0x6E, 0xCC, 0xA7, 0xA5, 0x03, 0x6E,\n\t0xCC, 0xAD, 0xB5, 0x03, 0x6E, 0xCC, 0xB1, 0xB5,\n\t0x03, 0x6F, 0xCC, 0x80, 0xC9, 0x03, 0x6F, 0xCC,\n\t// Bytes 3440 - 347f\n\t0x81, 0xC9, 0x03, 0x6F, 0xCC, 0x86, 0xC9, 0x03,\n\t0x6F, 0xCC, 0x89, 0xC9, 0x03, 0x6F, 0xCC, 0x8B,\n\t0xC9, 0x03, 0x6F, 0xCC, 0x8C, 0xC9, 0x03, 0x6F,\n\t0xCC, 0x8F, 0xC9, 0x03, 0x6F, 0xCC, 0x91, 0xC9,\n\t0x03, 0x70, 0xCC, 0x81, 0xC9, 0x03, 0x70, 0xCC,\n\t0x87, 0xC9, 0x03, 0x72, 0xCC, 0x81, 0xC9, 0x03,\n\t0x72, 0xCC, 0x87, 0xC9, 0x03, 0x72, 0xCC, 0x8C,\n\t0xC9, 0x03, 0x72, 0xCC, 0x8F, 0xC9, 0x03, 0x72,\n\t// Bytes 3480 - 34bf\n\t0xCC, 0x91, 0xC9, 0x03, 0x72, 0xCC, 0xA7, 0xA5,\n\t0x03, 0x72, 0xCC, 0xB1, 0xB5, 0x03, 0x73, 0xCC,\n\t0x82, 0xC9, 0x03, 0x73, 0xCC, 0x87, 0xC9, 0x03,\n\t0x73, 0xCC, 0xA6, 0xB5, 0x03, 0x73, 0xCC, 0xA7,\n\t0xA5, 0x03, 0x74, 0xCC, 0x87, 0xC9, 0x03, 0x74,\n\t0xCC, 0x88, 0xC9, 0x03, 0x74, 0xCC, 0x8C, 0xC9,\n\t0x03, 0x74, 0xCC, 0xA3, 0xB5, 0x03, 0x74, 0xCC,\n\t0xA6, 0xB5, 0x03, 0x74, 0xCC, 0xA7, 0xA5, 0x03,\n\t// Bytes 34c0 - 34ff\n\t0x74, 0xCC, 0xAD, 0xB5, 0x03, 0x74, 0xCC, 0xB1,\n\t0xB5, 0x03, 0x75, 0xCC, 0x80, 0xC9, 0x03, 0x75,\n\t0xCC, 0x81, 0xC9, 0x03, 0x75, 0xCC, 0x82, 0xC9,\n\t0x03, 0x75, 0xCC, 0x86, 0xC9, 0x03, 0x75, 0xCC,\n\t0x89, 0xC9, 0x03, 0x75, 0xCC, 0x8A, 0xC9, 0x03,\n\t0x75, 0xCC, 0x8B, 0xC9, 0x03, 0x75, 0xCC, 0x8C,\n\t0xC9, 0x03, 0x75, 0xCC, 0x8F, 0xC9, 0x03, 0x75,\n\t0xCC, 0x91, 0xC9, 0x03, 0x75, 0xCC, 0xA3, 0xB5,\n\t// Bytes 3500 - 353f\n\t0x03, 0x75, 0xCC, 0xA4, 0xB5, 0x03, 0x75, 0xCC,\n\t0xA8, 0xA5, 0x03, 0x75, 0xCC, 0xAD, 0xB5, 0x03,\n\t0x75, 0xCC, 0xB0, 0xB5, 0x03, 0x76, 0xCC, 0x83,\n\t0xC9, 0x03, 0x76, 0xCC, 0xA3, 0xB5, 0x03, 0x77,\n\t0xCC, 0x80, 0xC9, 0x03, 0x77, 0xCC, 0x81, 0xC9,\n\t0x03, 0x77, 0xCC, 0x82, 0xC9, 0x03, 0x77, 0xCC,\n\t0x87, 0xC9, 0x03, 0x77, 0xCC, 0x88, 0xC9, 0x03,\n\t0x77, 0xCC, 0x8A, 0xC9, 0x03, 0x77, 0xCC, 0xA3,\n\t// Bytes 3540 - 357f\n\t0xB5, 0x03, 0x78, 0xCC, 0x87, 0xC9, 0x03, 0x78,\n\t0xCC, 0x88, 0xC9, 0x03, 0x79, 0xCC, 0x80, 0xC9,\n\t0x03, 0x79, 0xCC, 0x81, 0xC9, 0x03, 0x79, 0xCC,\n\t0x82, 0xC9, 0x03, 0x79, 0xCC, 0x83, 0xC9, 0x03,\n\t0x79, 0xCC, 0x84, 0xC9, 0x03, 0x79, 0xCC, 0x87,\n\t0xC9, 0x03, 0x79, 0xCC, 0x88, 0xC9, 0x03, 0x79,\n\t0xCC, 0x89, 0xC9, 0x03, 0x79, 0xCC, 0x8A, 0xC9,\n\t0x03, 0x79, 0xCC, 0xA3, 0xB5, 0x03, 0x7A, 0xCC,\n\t// Bytes 3580 - 35bf\n\t0x81, 0xC9, 0x03, 0x7A, 0xCC, 0x82, 0xC9, 0x03,\n\t0x7A, 0xCC, 0x87, 0xC9, 0x03, 0x7A, 0xCC, 0x8C,\n\t0xC9, 0x03, 0x7A, 0xCC, 0xA3, 0xB5, 0x03, 0x7A,\n\t0xCC, 0xB1, 0xB5, 0x04, 0xC2, 0xA8, 0xCC, 0x80,\n\t0xCA, 0x04, 0xC2, 0xA8, 0xCC, 0x81, 0xCA, 0x04,\n\t0xC2, 0xA8, 0xCD, 0x82, 0xCA, 0x04, 0xC3, 0x86,\n\t0xCC, 0x81, 0xC9, 0x04, 0xC3, 0x86, 0xCC, 0x84,\n\t0xC9, 0x04, 0xC3, 0x98, 0xCC, 0x81, 0xC9, 0x04,\n\t// Bytes 35c0 - 35ff\n\t0xC3, 0xA6, 0xCC, 0x81, 0xC9, 0x04, 0xC3, 0xA6,\n\t0xCC, 0x84, 0xC9, 0x04, 0xC3, 0xB8, 0xCC, 0x81,\n\t0xC9, 0x04, 0xC5, 0xBF, 0xCC, 0x87, 0xC9, 0x04,\n\t0xC6, 0xB7, 0xCC, 0x8C, 0xC9, 0x04, 0xCA, 0x92,\n\t0xCC, 0x8C, 0xC9, 0x04, 0xCE, 0x91, 0xCC, 0x80,\n\t0xC9, 0x04, 0xCE, 0x91, 0xCC, 0x81, 0xC9, 0x04,\n\t0xCE, 0x91, 0xCC, 0x84, 0xC9, 0x04, 0xCE, 0x91,\n\t0xCC, 0x86, 0xC9, 0x04, 0xCE, 0x91, 0xCD, 0x85,\n\t// Bytes 3600 - 363f\n\t0xD9, 0x04, 0xCE, 0x95, 0xCC, 0x80, 0xC9, 0x04,\n\t0xCE, 0x95, 0xCC, 0x81, 0xC9, 0x04, 0xCE, 0x97,\n\t0xCC, 0x80, 0xC9, 0x04, 0xCE, 0x97, 0xCC, 0x81,\n\t0xC9, 0x04, 0xCE, 0x97, 0xCD, 0x85, 0xD9, 0x04,\n\t0xCE, 0x99, 0xCC, 0x80, 0xC9, 0x04, 0xCE, 0x99,\n\t0xCC, 0x81, 0xC9, 0x04, 0xCE, 0x99, 0xCC, 0x84,\n\t0xC9, 0x04, 0xCE, 0x99, 0xCC, 0x86, 0xC9, 0x04,\n\t0xCE, 0x99, 0xCC, 0x88, 0xC9, 0x04, 0xCE, 0x9F,\n\t// Bytes 3640 - 367f\n\t0xCC, 0x80, 0xC9, 0x04, 0xCE, 0x9F, 0xCC, 0x81,\n\t0xC9, 0x04, 0xCE, 0xA1, 0xCC, 0x94, 0xC9, 0x04,\n\t0xCE, 0xA5, 0xCC, 0x80, 0xC9, 0x04, 0xCE, 0xA5,\n\t0xCC, 0x81, 0xC9, 0x04, 0xCE, 0xA5, 0xCC, 0x84,\n\t0xC9, 0x04, 0xCE, 0xA5, 0xCC, 0x86, 0xC9, 0x04,\n\t0xCE, 0xA5, 0xCC, 0x88, 0xC9, 0x04, 0xCE, 0xA9,\n\t0xCC, 0x80, 0xC9, 0x04, 0xCE, 0xA9, 0xCC, 0x81,\n\t0xC9, 0x04, 0xCE, 0xA9, 0xCD, 0x85, 0xD9, 0x04,\n\t// Bytes 3680 - 36bf\n\t0xCE, 0xB1, 0xCC, 0x84, 0xC9, 0x04, 0xCE, 0xB1,\n\t0xCC, 0x86, 0xC9, 0x04, 0xCE, 0xB1, 0xCD, 0x85,\n\t0xD9, 0x04, 0xCE, 0xB5, 0xCC, 0x80, 0xC9, 0x04,\n\t0xCE, 0xB5, 0xCC, 0x81, 0xC9, 0x04, 0xCE, 0xB7,\n\t0xCD, 0x85, 0xD9, 0x04, 0xCE, 0xB9, 0xCC, 0x80,\n\t0xC9, 0x04, 0xCE, 0xB9, 0xCC, 0x81, 0xC9, 0x04,\n\t0xCE, 0xB9, 0xCC, 0x84, 0xC9, 0x04, 0xCE, 0xB9,\n\t0xCC, 0x86, 0xC9, 0x04, 0xCE, 0xB9, 0xCD, 0x82,\n\t// Bytes 36c0 - 36ff\n\t0xC9, 0x04, 0xCE, 0xBF, 0xCC, 0x80, 0xC9, 0x04,\n\t0xCE, 0xBF, 0xCC, 0x81, 0xC9, 0x04, 0xCF, 0x81,\n\t0xCC, 0x93, 0xC9, 0x04, 0xCF, 0x81, 0xCC, 0x94,\n\t0xC9, 0x04, 0xCF, 0x85, 0xCC, 0x80, 0xC9, 0x04,\n\t0xCF, 0x85, 0xCC, 0x81, 0xC9, 0x04, 0xCF, 0x85,\n\t0xCC, 0x84, 0xC9, 0x04, 0xCF, 0x85, 0xCC, 0x86,\n\t0xC9, 0x04, 0xCF, 0x85, 0xCD, 0x82, 0xC9, 0x04,\n\t0xCF, 0x89, 0xCD, 0x85, 0xD9, 0x04, 0xCF, 0x92,\n\t// Bytes 3700 - 373f\n\t0xCC, 0x81, 0xC9, 0x04, 0xCF, 0x92, 0xCC, 0x88,\n\t0xC9, 0x04, 0xD0, 0x86, 0xCC, 0x88, 0xC9, 0x04,\n\t0xD0, 0x90, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0x90,\n\t0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x93, 0xCC, 0x81,\n\t0xC9, 0x04, 0xD0, 0x95, 0xCC, 0x80, 0xC9, 0x04,\n\t0xD0, 0x95, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0x95,\n\t0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x96, 0xCC, 0x86,\n\t0xC9, 0x04, 0xD0, 0x96, 0xCC, 0x88, 0xC9, 0x04,\n\t// Bytes 3740 - 377f\n\t0xD0, 0x97, 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x98,\n\t0xCC, 0x80, 0xC9, 0x04, 0xD0, 0x98, 0xCC, 0x84,\n\t0xC9, 0x04, 0xD0, 0x98, 0xCC, 0x86, 0xC9, 0x04,\n\t0xD0, 0x98, 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x9A,\n\t0xCC, 0x81, 0xC9, 0x04, 0xD0, 0x9E, 0xCC, 0x88,\n\t0xC9, 0x04, 0xD0, 0xA3, 0xCC, 0x84, 0xC9, 0x04,\n\t0xD0, 0xA3, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0xA3,\n\t0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xA3, 0xCC, 0x8B,\n\t// Bytes 3780 - 37bf\n\t0xC9, 0x04, 0xD0, 0xA7, 0xCC, 0x88, 0xC9, 0x04,\n\t0xD0, 0xAB, 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xAD,\n\t0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xB0, 0xCC, 0x86,\n\t0xC9, 0x04, 0xD0, 0xB0, 0xCC, 0x88, 0xC9, 0x04,\n\t0xD0, 0xB3, 0xCC, 0x81, 0xC9, 0x04, 0xD0, 0xB5,\n\t0xCC, 0x80, 0xC9, 0x04, 0xD0, 0xB5, 0xCC, 0x86,\n\t0xC9, 0x04, 0xD0, 0xB5, 0xCC, 0x88, 0xC9, 0x04,\n\t0xD0, 0xB6, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0xB6,\n\t// Bytes 37c0 - 37ff\n\t0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xB7, 0xCC, 0x88,\n\t0xC9, 0x04, 0xD0, 0xB8, 0xCC, 0x80, 0xC9, 0x04,\n\t0xD0, 0xB8, 0xCC, 0x84, 0xC9, 0x04, 0xD0, 0xB8,\n\t0xCC, 0x86, 0xC9, 0x04, 0xD0, 0xB8, 0xCC, 0x88,\n\t0xC9, 0x04, 0xD0, 0xBA, 0xCC, 0x81, 0xC9, 0x04,\n\t0xD0, 0xBE, 0xCC, 0x88, 0xC9, 0x04, 0xD1, 0x83,\n\t0xCC, 0x84, 0xC9, 0x04, 0xD1, 0x83, 0xCC, 0x86,\n\t0xC9, 0x04, 0xD1, 0x83, 0xCC, 0x88, 0xC9, 0x04,\n\t// Bytes 3800 - 383f\n\t0xD1, 0x83, 0xCC, 0x8B, 0xC9, 0x04, 0xD1, 0x87,\n\t0xCC, 0x88, 0xC9, 0x04, 0xD1, 0x8B, 0xCC, 0x88,\n\t0xC9, 0x04, 0xD1, 0x8D, 0xCC, 0x88, 0xC9, 0x04,\n\t0xD1, 0x96, 0xCC, 0x88, 0xC9, 0x04, 0xD1, 0xB4,\n\t0xCC, 0x8F, 0xC9, 0x04, 0xD1, 0xB5, 0xCC, 0x8F,\n\t0xC9, 0x04, 0xD3, 0x98, 0xCC, 0x88, 0xC9, 0x04,\n\t0xD3, 0x99, 0xCC, 0x88, 0xC9, 0x04, 0xD3, 0xA8,\n\t0xCC, 0x88, 0xC9, 0x04, 0xD3, 0xA9, 0xCC, 0x88,\n\t// Bytes 3840 - 387f\n\t0xC9, 0x04, 0xD8, 0xA7, 0xD9, 0x93, 0xC9, 0x04,\n\t0xD8, 0xA7, 0xD9, 0x94, 0xC9, 0x04, 0xD8, 0xA7,\n\t0xD9, 0x95, 0xB5, 0x04, 0xD9, 0x88, 0xD9, 0x94,\n\t0xC9, 0x04, 0xD9, 0x8A, 0xD9, 0x94, 0xC9, 0x04,\n\t0xDB, 0x81, 0xD9, 0x94, 0xC9, 0x04, 0xDB, 0x92,\n\t0xD9, 0x94, 0xC9, 0x04, 0xDB, 0x95, 0xD9, 0x94,\n\t0xC9, 0x05, 0x41, 0xCC, 0x82, 0xCC, 0x80, 0xCA,\n\t0x05, 0x41, 0xCC, 0x82, 0xCC, 0x81, 0xCA, 0x05,\n\t// Bytes 3880 - 38bf\n\t0x41, 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, 0x41,\n\t0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x41, 0xCC,\n\t0x86, 0xCC, 0x80, 0xCA, 0x05, 0x41, 0xCC, 0x86,\n\t0xCC, 0x81, 0xCA, 0x05, 0x41, 0xCC, 0x86, 0xCC,\n\t0x83, 0xCA, 0x05, 0x41, 0xCC, 0x86, 0xCC, 0x89,\n\t0xCA, 0x05, 0x41, 0xCC, 0x87, 0xCC, 0x84, 0xCA,\n\t0x05, 0x41, 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05,\n\t0x41, 0xCC, 0x8A, 0xCC, 0x81, 0xCA, 0x05, 0x41,\n\t// Bytes 38c0 - 38ff\n\t0xCC, 0xA3, 0xCC, 0x82, 0xCA, 0x05, 0x41, 0xCC,\n\t0xA3, 0xCC, 0x86, 0xCA, 0x05, 0x43, 0xCC, 0xA7,\n\t0xCC, 0x81, 0xCA, 0x05, 0x45, 0xCC, 0x82, 0xCC,\n\t0x80, 0xCA, 0x05, 0x45, 0xCC, 0x82, 0xCC, 0x81,\n\t0xCA, 0x05, 0x45, 0xCC, 0x82, 0xCC, 0x83, 0xCA,\n\t0x05, 0x45, 0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05,\n\t0x45, 0xCC, 0x84, 0xCC, 0x80, 0xCA, 0x05, 0x45,\n\t0xCC, 0x84, 0xCC, 0x81, 0xCA, 0x05, 0x45, 0xCC,\n\t// Bytes 3900 - 393f\n\t0xA3, 0xCC, 0x82, 0xCA, 0x05, 0x45, 0xCC, 0xA7,\n\t0xCC, 0x86, 0xCA, 0x05, 0x49, 0xCC, 0x88, 0xCC,\n\t0x81, 0xCA, 0x05, 0x4C, 0xCC, 0xA3, 0xCC, 0x84,\n\t0xCA, 0x05, 0x4F, 0xCC, 0x82, 0xCC, 0x80, 0xCA,\n\t0x05, 0x4F, 0xCC, 0x82, 0xCC, 0x81, 0xCA, 0x05,\n\t0x4F, 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, 0x4F,\n\t0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x4F, 0xCC,\n\t0x83, 0xCC, 0x81, 0xCA, 0x05, 0x4F, 0xCC, 0x83,\n\t// Bytes 3940 - 397f\n\t0xCC, 0x84, 0xCA, 0x05, 0x4F, 0xCC, 0x83, 0xCC,\n\t0x88, 0xCA, 0x05, 0x4F, 0xCC, 0x84, 0xCC, 0x80,\n\t0xCA, 0x05, 0x4F, 0xCC, 0x84, 0xCC, 0x81, 0xCA,\n\t0x05, 0x4F, 0xCC, 0x87, 0xCC, 0x84, 0xCA, 0x05,\n\t0x4F, 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x4F,\n\t0xCC, 0x9B, 0xCC, 0x80, 0xCA, 0x05, 0x4F, 0xCC,\n\t0x9B, 0xCC, 0x81, 0xCA, 0x05, 0x4F, 0xCC, 0x9B,\n\t0xCC, 0x83, 0xCA, 0x05, 0x4F, 0xCC, 0x9B, 0xCC,\n\t// Bytes 3980 - 39bf\n\t0x89, 0xCA, 0x05, 0x4F, 0xCC, 0x9B, 0xCC, 0xA3,\n\t0xB6, 0x05, 0x4F, 0xCC, 0xA3, 0xCC, 0x82, 0xCA,\n\t0x05, 0x4F, 0xCC, 0xA8, 0xCC, 0x84, 0xCA, 0x05,\n\t0x52, 0xCC, 0xA3, 0xCC, 0x84, 0xCA, 0x05, 0x53,\n\t0xCC, 0x81, 0xCC, 0x87, 0xCA, 0x05, 0x53, 0xCC,\n\t0x8C, 0xCC, 0x87, 0xCA, 0x05, 0x53, 0xCC, 0xA3,\n\t0xCC, 0x87, 0xCA, 0x05, 0x55, 0xCC, 0x83, 0xCC,\n\t0x81, 0xCA, 0x05, 0x55, 0xCC, 0x84, 0xCC, 0x88,\n\t// Bytes 39c0 - 39ff\n\t0xCA, 0x05, 0x55, 0xCC, 0x88, 0xCC, 0x80, 0xCA,\n\t0x05, 0x55, 0xCC, 0x88, 0xCC, 0x81, 0xCA, 0x05,\n\t0x55, 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x55,\n\t0xCC, 0x88, 0xCC, 0x8C, 0xCA, 0x05, 0x55, 0xCC,\n\t0x9B, 0xCC, 0x80, 0xCA, 0x05, 0x55, 0xCC, 0x9B,\n\t0xCC, 0x81, 0xCA, 0x05, 0x55, 0xCC, 0x9B, 0xCC,\n\t0x83, 0xCA, 0x05, 0x55, 0xCC, 0x9B, 0xCC, 0x89,\n\t0xCA, 0x05, 0x55, 0xCC, 0x9B, 0xCC, 0xA3, 0xB6,\n\t// Bytes 3a00 - 3a3f\n\t0x05, 0x61, 0xCC, 0x82, 0xCC, 0x80, 0xCA, 0x05,\n\t0x61, 0xCC, 0x82, 0xCC, 0x81, 0xCA, 0x05, 0x61,\n\t0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, 0x61, 0xCC,\n\t0x82, 0xCC, 0x89, 0xCA, 0x05, 0x61, 0xCC, 0x86,\n\t0xCC, 0x80, 0xCA, 0x05, 0x61, 0xCC, 0x86, 0xCC,\n\t0x81, 0xCA, 0x05, 0x61, 0xCC, 0x86, 0xCC, 0x83,\n\t0xCA, 0x05, 0x61, 0xCC, 0x86, 0xCC, 0x89, 0xCA,\n\t0x05, 0x61, 0xCC, 0x87, 0xCC, 0x84, 0xCA, 0x05,\n\t// Bytes 3a40 - 3a7f\n\t0x61, 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x61,\n\t0xCC, 0x8A, 0xCC, 0x81, 0xCA, 0x05, 0x61, 0xCC,\n\t0xA3, 0xCC, 0x82, 0xCA, 0x05, 0x61, 0xCC, 0xA3,\n\t0xCC, 0x86, 0xCA, 0x05, 0x63, 0xCC, 0xA7, 0xCC,\n\t0x81, 0xCA, 0x05, 0x65, 0xCC, 0x82, 0xCC, 0x80,\n\t0xCA, 0x05, 0x65, 0xCC, 0x82, 0xCC, 0x81, 0xCA,\n\t0x05, 0x65, 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05,\n\t0x65, 0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x65,\n\t// Bytes 3a80 - 3abf\n\t0xCC, 0x84, 0xCC, 0x80, 0xCA, 0x05, 0x65, 0xCC,\n\t0x84, 0xCC, 0x81, 0xCA, 0x05, 0x65, 0xCC, 0xA3,\n\t0xCC, 0x82, 0xCA, 0x05, 0x65, 0xCC, 0xA7, 0xCC,\n\t0x86, 0xCA, 0x05, 0x69, 0xCC, 0x88, 0xCC, 0x81,\n\t0xCA, 0x05, 0x6C, 0xCC, 0xA3, 0xCC, 0x84, 0xCA,\n\t0x05, 0x6F, 0xCC, 0x82, 0xCC, 0x80, 0xCA, 0x05,\n\t0x6F, 0xCC, 0x82, 0xCC, 0x81, 0xCA, 0x05, 0x6F,\n\t0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, 0x6F, 0xCC,\n\t// Bytes 3ac0 - 3aff\n\t0x82, 0xCC, 0x89, 0xCA, 0x05, 0x6F, 0xCC, 0x83,\n\t0xCC, 0x81, 0xCA, 0x05, 0x6F, 0xCC, 0x83, 0xCC,\n\t0x84, 0xCA, 0x05, 0x6F, 0xCC, 0x83, 0xCC, 0x88,\n\t0xCA, 0x05, 0x6F, 0xCC, 0x84, 0xCC, 0x80, 0xCA,\n\t0x05, 0x6F, 0xCC, 0x84, 0xCC, 0x81, 0xCA, 0x05,\n\t0x6F, 0xCC, 0x87, 0xCC, 0x84, 0xCA, 0x05, 0x6F,\n\t0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x6F, 0xCC,\n\t0x9B, 0xCC, 0x80, 0xCA, 0x05, 0x6F, 0xCC, 0x9B,\n\t// Bytes 3b00 - 3b3f\n\t0xCC, 0x81, 0xCA, 0x05, 0x6F, 0xCC, 0x9B, 0xCC,\n\t0x83, 0xCA, 0x05, 0x6F, 0xCC, 0x9B, 0xCC, 0x89,\n\t0xCA, 0x05, 0x6F, 0xCC, 0x9B, 0xCC, 0xA3, 0xB6,\n\t0x05, 0x6F, 0xCC, 0xA3, 0xCC, 0x82, 0xCA, 0x05,\n\t0x6F, 0xCC, 0xA8, 0xCC, 0x84, 0xCA, 0x05, 0x72,\n\t0xCC, 0xA3, 0xCC, 0x84, 0xCA, 0x05, 0x73, 0xCC,\n\t0x81, 0xCC, 0x87, 0xCA, 0x05, 0x73, 0xCC, 0x8C,\n\t0xCC, 0x87, 0xCA, 0x05, 0x73, 0xCC, 0xA3, 0xCC,\n\t// Bytes 3b40 - 3b7f\n\t0x87, 0xCA, 0x05, 0x75, 0xCC, 0x83, 0xCC, 0x81,\n\t0xCA, 0x05, 0x75, 0xCC, 0x84, 0xCC, 0x88, 0xCA,\n\t0x05, 0x75, 0xCC, 0x88, 0xCC, 0x80, 0xCA, 0x05,\n\t0x75, 0xCC, 0x88, 0xCC, 0x81, 0xCA, 0x05, 0x75,\n\t0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x75, 0xCC,\n\t0x88, 0xCC, 0x8C, 0xCA, 0x05, 0x75, 0xCC, 0x9B,\n\t0xCC, 0x80, 0xCA, 0x05, 0x75, 0xCC, 0x9B, 0xCC,\n\t0x81, 0xCA, 0x05, 0x75, 0xCC, 0x9B, 0xCC, 0x83,\n\t// Bytes 3b80 - 3bbf\n\t0xCA, 0x05, 0x75, 0xCC, 0x9B, 0xCC, 0x89, 0xCA,\n\t0x05, 0x75, 0xCC, 0x9B, 0xCC, 0xA3, 0xB6, 0x05,\n\t0xE1, 0xBE, 0xBF, 0xCC, 0x80, 0xCA, 0x05, 0xE1,\n\t0xBE, 0xBF, 0xCC, 0x81, 0xCA, 0x05, 0xE1, 0xBE,\n\t0xBF, 0xCD, 0x82, 0xCA, 0x05, 0xE1, 0xBF, 0xBE,\n\t0xCC, 0x80, 0xCA, 0x05, 0xE1, 0xBF, 0xBE, 0xCC,\n\t0x81, 0xCA, 0x05, 0xE1, 0xBF, 0xBE, 0xCD, 0x82,\n\t0xCA, 0x05, 0xE2, 0x86, 0x90, 0xCC, 0xB8, 0x05,\n\t// Bytes 3bc0 - 3bff\n\t0x05, 0xE2, 0x86, 0x92, 0xCC, 0xB8, 0x05, 0x05,\n\t0xE2, 0x86, 0x94, 0xCC, 0xB8, 0x05, 0x05, 0xE2,\n\t0x87, 0x90, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x87,\n\t0x92, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x87, 0x94,\n\t0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x88, 0x83, 0xCC,\n\t0xB8, 0x05, 0x05, 0xE2, 0x88, 0x88, 0xCC, 0xB8,\n\t0x05, 0x05, 0xE2, 0x88, 0x8B, 0xCC, 0xB8, 0x05,\n\t0x05, 0xE2, 0x88, 0xA3, 0xCC, 0xB8, 0x05, 0x05,\n\t// Bytes 3c00 - 3c3f\n\t0xE2, 0x88, 0xA5, 0xCC, 0xB8, 0x05, 0x05, 0xE2,\n\t0x88, 0xBC, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89,\n\t0x83, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0x85,\n\t0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0x88, 0xCC,\n\t0xB8, 0x05, 0x05, 0xE2, 0x89, 0x8D, 0xCC, 0xB8,\n\t0x05, 0x05, 0xE2, 0x89, 0xA1, 0xCC, 0xB8, 0x05,\n\t0x05, 0xE2, 0x89, 0xA4, 0xCC, 0xB8, 0x05, 0x05,\n\t0xE2, 0x89, 0xA5, 0xCC, 0xB8, 0x05, 0x05, 0xE2,\n\t// Bytes 3c40 - 3c7f\n\t0x89, 0xB2, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89,\n\t0xB3, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xB6,\n\t0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xB7, 0xCC,\n\t0xB8, 0x05, 0x05, 0xE2, 0x89, 0xBA, 0xCC, 0xB8,\n\t0x05, 0x05, 0xE2, 0x89, 0xBB, 0xCC, 0xB8, 0x05,\n\t0x05, 0xE2, 0x89, 0xBC, 0xCC, 0xB8, 0x05, 0x05,\n\t0xE2, 0x89, 0xBD, 0xCC, 0xB8, 0x05, 0x05, 0xE2,\n\t0x8A, 0x82, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A,\n\t// Bytes 3c80 - 3cbf\n\t0x83, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x86,\n\t0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x87, 0xCC,\n\t0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x91, 0xCC, 0xB8,\n\t0x05, 0x05, 0xE2, 0x8A, 0x92, 0xCC, 0xB8, 0x05,\n\t0x05, 0xE2, 0x8A, 0xA2, 0xCC, 0xB8, 0x05, 0x05,\n\t0xE2, 0x8A, 0xA8, 0xCC, 0xB8, 0x05, 0x05, 0xE2,\n\t0x8A, 0xA9, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A,\n\t0xAB, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xB2,\n\t// Bytes 3cc0 - 3cff\n\t0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xB3, 0xCC,\n\t0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xB4, 0xCC, 0xB8,\n\t0x05, 0x05, 0xE2, 0x8A, 0xB5, 0xCC, 0xB8, 0x05,\n\t0x06, 0xCE, 0x91, 0xCC, 0x93, 0xCD, 0x85, 0xDA,\n\t0x06, 0xCE, 0x91, 0xCC, 0x94, 0xCD, 0x85, 0xDA,\n\t0x06, 0xCE, 0x95, 0xCC, 0x93, 0xCC, 0x80, 0xCA,\n\t0x06, 0xCE, 0x95, 0xCC, 0x93, 0xCC, 0x81, 0xCA,\n\t0x06, 0xCE, 0x95, 0xCC, 0x94, 0xCC, 0x80, 0xCA,\n\t// Bytes 3d00 - 3d3f\n\t0x06, 0xCE, 0x95, 0xCC, 0x94, 0xCC, 0x81, 0xCA,\n\t0x06, 0xCE, 0x97, 0xCC, 0x93, 0xCD, 0x85, 0xDA,\n\t0x06, 0xCE, 0x97, 0xCC, 0x94, 0xCD, 0x85, 0xDA,\n\t0x06, 0xCE, 0x99, 0xCC, 0x93, 0xCC, 0x80, 0xCA,\n\t0x06, 0xCE, 0x99, 0xCC, 0x93, 0xCC, 0x81, 0xCA,\n\t0x06, 0xCE, 0x99, 0xCC, 0x93, 0xCD, 0x82, 0xCA,\n\t0x06, 0xCE, 0x99, 0xCC, 0x94, 0xCC, 0x80, 0xCA,\n\t0x06, 0xCE, 0x99, 0xCC, 0x94, 0xCC, 0x81, 0xCA,\n\t// Bytes 3d40 - 3d7f\n\t0x06, 0xCE, 0x99, 0xCC, 0x94, 0xCD, 0x82, 0xCA,\n\t0x06, 0xCE, 0x9F, 0xCC, 0x93, 0xCC, 0x80, 0xCA,\n\t0x06, 0xCE, 0x9F, 0xCC, 0x93, 0xCC, 0x81, 0xCA,\n\t0x06, 0xCE, 0x9F, 0xCC, 0x94, 0xCC, 0x80, 0xCA,\n\t0x06, 0xCE, 0x9F, 0xCC, 0x94, 0xCC, 0x81, 0xCA,\n\t0x06, 0xCE, 0xA5, 0xCC, 0x94, 0xCC, 0x80, 0xCA,\n\t0x06, 0xCE, 0xA5, 0xCC, 0x94, 0xCC, 0x81, 0xCA,\n\t0x06, 0xCE, 0xA5, 0xCC, 0x94, 0xCD, 0x82, 0xCA,\n\t// Bytes 3d80 - 3dbf\n\t0x06, 0xCE, 0xA9, 0xCC, 0x93, 0xCD, 0x85, 0xDA,\n\t0x06, 0xCE, 0xA9, 0xCC, 0x94, 0xCD, 0x85, 0xDA,\n\t0x06, 0xCE, 0xB1, 0xCC, 0x80, 0xCD, 0x85, 0xDA,\n\t0x06, 0xCE, 0xB1, 0xCC, 0x81, 0xCD, 0x85, 0xDA,\n\t0x06, 0xCE, 0xB1, 0xCC, 0x93, 0xCD, 0x85, 0xDA,\n\t0x06, 0xCE, 0xB1, 0xCC, 0x94, 0xCD, 0x85, 0xDA,\n\t0x06, 0xCE, 0xB1, 0xCD, 0x82, 0xCD, 0x85, 0xDA,\n\t0x06, 0xCE, 0xB5, 0xCC, 0x93, 0xCC, 0x80, 0xCA,\n\t// Bytes 3dc0 - 3dff\n\t0x06, 0xCE, 0xB5, 0xCC, 0x93, 0xCC, 0x81, 0xCA,\n\t0x06, 0xCE, 0xB5, 0xCC, 0x94, 0xCC, 0x80, 0xCA,\n\t0x06, 0xCE, 0xB5, 0xCC, 0x94, 0xCC, 0x81, 0xCA,\n\t0x06, 0xCE, 0xB7, 0xCC, 0x80, 0xCD, 0x85, 0xDA,\n\t0x06, 0xCE, 0xB7, 0xCC, 0x81, 0xCD, 0x85, 0xDA,\n\t0x06, 0xCE, 0xB7, 0xCC, 0x93, 0xCD, 0x85, 0xDA,\n\t0x06, 0xCE, 0xB7, 0xCC, 0x94, 0xCD, 0x85, 0xDA,\n\t0x06, 0xCE, 0xB7, 0xCD, 0x82, 0xCD, 0x85, 0xDA,\n\t// Bytes 3e00 - 3e3f\n\t0x06, 0xCE, 0xB9, 0xCC, 0x88, 0xCC, 0x80, 0xCA,\n\t0x06, 0xCE, 0xB9, 0xCC, 0x88, 0xCC, 0x81, 0xCA,\n\t0x06, 0xCE, 0xB9, 0xCC, 0x88, 0xCD, 0x82, 0xCA,\n\t0x06, 0xCE, 0xB9, 0xCC, 0x93, 0xCC, 0x80, 0xCA,\n\t0x06, 0xCE, 0xB9, 0xCC, 0x93, 0xCC, 0x81, 0xCA,\n\t0x06, 0xCE, 0xB9, 0xCC, 0x93, 0xCD, 0x82, 0xCA,\n\t0x06, 0xCE, 0xB9, 0xCC, 0x94, 0xCC, 0x80, 0xCA,\n\t0x06, 0xCE, 0xB9, 0xCC, 0x94, 0xCC, 0x81, 0xCA,\n\t// Bytes 3e40 - 3e7f\n\t0x06, 0xCE, 0xB9, 0xCC, 0x94, 0xCD, 0x82, 0xCA,\n\t0x06, 0xCE, 0xBF, 0xCC, 0x93, 0xCC, 0x80, 0xCA,\n\t0x06, 0xCE, 0xBF, 0xCC, 0x93, 0xCC, 0x81, 0xCA,\n\t0x06, 0xCE, 0xBF, 0xCC, 0x94, 0xCC, 0x80, 0xCA,\n\t0x06, 0xCE, 0xBF, 0xCC, 0x94, 0xCC, 0x81, 0xCA,\n\t0x06, 0xCF, 0x85, 0xCC, 0x88, 0xCC, 0x80, 0xCA,\n\t0x06, 0xCF, 0x85, 0xCC, 0x88, 0xCC, 0x81, 0xCA,\n\t0x06, 0xCF, 0x85, 0xCC, 0x88, 0xCD, 0x82, 0xCA,\n\t// Bytes 3e80 - 3ebf\n\t0x06, 0xCF, 0x85, 0xCC, 0x93, 0xCC, 0x80, 0xCA,\n\t0x06, 0xCF, 0x85, 0xCC, 0x93, 0xCC, 0x81, 0xCA,\n\t0x06, 0xCF, 0x85, 0xCC, 0x93, 0xCD, 0x82, 0xCA,\n\t0x06, 0xCF, 0x85, 0xCC, 0x94, 0xCC, 0x80, 0xCA,\n\t0x06, 0xCF, 0x85, 0xCC, 0x94, 0xCC, 0x81, 0xCA,\n\t0x06, 0xCF, 0x85, 0xCC, 0x94, 0xCD, 0x82, 0xCA,\n\t0x06, 0xCF, 0x89, 0xCC, 0x80, 0xCD, 0x85, 0xDA,\n\t0x06, 0xCF, 0x89, 0xCC, 0x81, 0xCD, 0x85, 0xDA,\n\t// Bytes 3ec0 - 3eff\n\t0x06, 0xCF, 0x89, 0xCC, 0x93, 0xCD, 0x85, 0xDA,\n\t0x06, 0xCF, 0x89, 0xCC, 0x94, 0xCD, 0x85, 0xDA,\n\t0x06, 0xCF, 0x89, 0xCD, 0x82, 0xCD, 0x85, 0xDA,\n\t0x06, 0xE0, 0xA4, 0xA8, 0xE0, 0xA4, 0xBC, 0x09,\n\t0x06, 0xE0, 0xA4, 0xB0, 0xE0, 0xA4, 0xBC, 0x09,\n\t0x06, 0xE0, 0xA4, 0xB3, 0xE0, 0xA4, 0xBC, 0x09,\n\t0x06, 0xE0, 0xB1, 0x86, 0xE0, 0xB1, 0x96, 0x85,\n\t0x06, 0xE0, 0xB7, 0x99, 0xE0, 0xB7, 0x8A, 0x11,\n\t// Bytes 3f00 - 3f3f\n\t0x06, 0xE3, 0x81, 0x86, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x81, 0x8B, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x81, 0x8D, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x81, 0x8F, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x81, 0x91, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x81, 0x93, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x81, 0x95, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x81, 0x97, 0xE3, 0x82, 0x99, 0x0D,\n\t// Bytes 3f40 - 3f7f\n\t0x06, 0xE3, 0x81, 0x99, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x81, 0x9B, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x81, 0x9D, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x81, 0x9F, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x81, 0xA1, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x81, 0xA4, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x81, 0xA6, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x81, 0xA8, 0xE3, 0x82, 0x99, 0x0D,\n\t// Bytes 3f80 - 3fbf\n\t0x06, 0xE3, 0x81, 0xAF, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x81, 0xAF, 0xE3, 0x82, 0x9A, 0x0D,\n\t0x06, 0xE3, 0x81, 0xB2, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x81, 0xB2, 0xE3, 0x82, 0x9A, 0x0D,\n\t0x06, 0xE3, 0x81, 0xB5, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x81, 0xB5, 0xE3, 0x82, 0x9A, 0x0D,\n\t0x06, 0xE3, 0x81, 0xB8, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x81, 0xB8, 0xE3, 0x82, 0x9A, 0x0D,\n\t// Bytes 3fc0 - 3fff\n\t0x06, 0xE3, 0x81, 0xBB, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x81, 0xBB, 0xE3, 0x82, 0x9A, 0x0D,\n\t0x06, 0xE3, 0x82, 0x9D, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x82, 0xA6, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x82, 0xAD, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x82, 0xB1, 0xE3, 0x82, 0x99, 0x0D,\n\t// Bytes 4000 - 403f\n\t0x06, 0xE3, 0x82, 0xB3, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x82, 0xB5, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x82, 0xB7, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x82, 0xB9, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x82, 0xBB, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x82, 0xBD, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x82, 0xBF, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x83, 0x81, 0xE3, 0x82, 0x99, 0x0D,\n\t// Bytes 4040 - 407f\n\t0x06, 0xE3, 0x83, 0x84, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x83, 0x86, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x9A, 0x0D,\n\t0x06, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A, 0x0D,\n\t0x06, 0xE3, 0x83, 0x95, 0xE3, 0x82, 0x99, 0x0D,\n\t// Bytes 4080 - 40bf\n\t0x06, 0xE3, 0x83, 0x95, 0xE3, 0x82, 0x9A, 0x0D,\n\t0x06, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, 0x0D,\n\t0x06, 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x9A, 0x0D,\n\t0x06, 0xE3, 0x83, 0xAF, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x83, 0xB0, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x83, 0xB1, 0xE3, 0x82, 0x99, 0x0D,\n\t// Bytes 40c0 - 40ff\n\t0x06, 0xE3, 0x83, 0xB2, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x83, 0xBD, 0xE3, 0x82, 0x99, 0x0D,\n\t0x08, 0xCE, 0x91, 0xCC, 0x93, 0xCC, 0x80, 0xCD,\n\t0x85, 0xDB, 0x08, 0xCE, 0x91, 0xCC, 0x93, 0xCC,\n\t0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0x91, 0xCC,\n\t0x93, 0xCD, 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE,\n\t0x91, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDB,\n\t0x08, 0xCE, 0x91, 0xCC, 0x94, 0xCC, 0x81, 0xCD,\n\t// Bytes 4100 - 413f\n\t0x85, 0xDB, 0x08, 0xCE, 0x91, 0xCC, 0x94, 0xCD,\n\t0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0x97, 0xCC,\n\t0x93, 0xCC, 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE,\n\t0x97, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDB,\n\t0x08, 0xCE, 0x97, 0xCC, 0x93, 0xCD, 0x82, 0xCD,\n\t0x85, 0xDB, 0x08, 0xCE, 0x97, 0xCC, 0x94, 0xCC,\n\t0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0x97, 0xCC,\n\t0x94, 0xCC, 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE,\n\t// Bytes 4140 - 417f\n\t0x97, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDB,\n\t0x08, 0xCE, 0xA9, 0xCC, 0x93, 0xCC, 0x80, 0xCD,\n\t0x85, 0xDB, 0x08, 0xCE, 0xA9, 0xCC, 0x93, 0xCC,\n\t0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xA9, 0xCC,\n\t0x93, 0xCD, 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE,\n\t0xA9, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDB,\n\t0x08, 0xCE, 0xA9, 0xCC, 0x94, 0xCC, 0x81, 0xCD,\n\t0x85, 0xDB, 0x08, 0xCE, 0xA9, 0xCC, 0x94, 0xCD,\n\t// Bytes 4180 - 41bf\n\t0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xB1, 0xCC,\n\t0x93, 0xCC, 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE,\n\t0xB1, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDB,\n\t0x08, 0xCE, 0xB1, 0xCC, 0x93, 0xCD, 0x82, 0xCD,\n\t0x85, 0xDB, 0x08, 0xCE, 0xB1, 0xCC, 0x94, 0xCC,\n\t0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xB1, 0xCC,\n\t0x94, 0xCC, 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE,\n\t0xB1, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDB,\n\t// Bytes 41c0 - 41ff\n\t0x08, 0xCE, 0xB7, 0xCC, 0x93, 0xCC, 0x80, 0xCD,\n\t0x85, 0xDB, 0x08, 0xCE, 0xB7, 0xCC, 0x93, 0xCC,\n\t0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xB7, 0xCC,\n\t0x93, 0xCD, 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE,\n\t0xB7, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDB,\n\t0x08, 0xCE, 0xB7, 0xCC, 0x94, 0xCC, 0x81, 0xCD,\n\t0x85, 0xDB, 0x08, 0xCE, 0xB7, 0xCC, 0x94, 0xCD,\n\t0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCF, 0x89, 0xCC,\n\t// Bytes 4200 - 423f\n\t0x93, 0xCC, 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCF,\n\t0x89, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDB,\n\t0x08, 0xCF, 0x89, 0xCC, 0x93, 0xCD, 0x82, 0xCD,\n\t0x85, 0xDB, 0x08, 0xCF, 0x89, 0xCC, 0x94, 0xCC,\n\t0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCF, 0x89, 0xCC,\n\t0x94, 0xCC, 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCF,\n\t0x89, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDB,\n\t0x08, 0xF0, 0x91, 0x82, 0x99, 0xF0, 0x91, 0x82,\n\t// Bytes 4240 - 427f\n\t0xBA, 0x09, 0x08, 0xF0, 0x91, 0x82, 0x9B, 0xF0,\n\t0x91, 0x82, 0xBA, 0x09, 0x08, 0xF0, 0x91, 0x82,\n\t0xA5, 0xF0, 0x91, 0x82, 0xBA, 0x09, 0x42, 0xC2,\n\t0xB4, 0x01, 0x43, 0x20, 0xCC, 0x81, 0xC9, 0x43,\n\t0x20, 0xCC, 0x83, 0xC9, 0x43, 0x20, 0xCC, 0x84,\n\t0xC9, 0x43, 0x20, 0xCC, 0x85, 0xC9, 0x43, 0x20,\n\t0xCC, 0x86, 0xC9, 0x43, 0x20, 0xCC, 0x87, 0xC9,\n\t0x43, 0x20, 0xCC, 0x88, 0xC9, 0x43, 0x20, 0xCC,\n\t// Bytes 4280 - 42bf\n\t0x8A, 0xC9, 0x43, 0x20, 0xCC, 0x8B, 0xC9, 0x43,\n\t0x20, 0xCC, 0x93, 0xC9, 0x43, 0x20, 0xCC, 0x94,\n\t0xC9, 0x43, 0x20, 0xCC, 0xA7, 0xA5, 0x43, 0x20,\n\t0xCC, 0xA8, 0xA5, 0x43, 0x20, 0xCC, 0xB3, 0xB5,\n\t0x43, 0x20, 0xCD, 0x82, 0xC9, 0x43, 0x20, 0xCD,\n\t0x85, 0xD9, 0x43, 0x20, 0xD9, 0x8B, 0x59, 0x43,\n\t0x20, 0xD9, 0x8C, 0x5D, 0x43, 0x20, 0xD9, 0x8D,\n\t0x61, 0x43, 0x20, 0xD9, 0x8E, 0x65, 0x43, 0x20,\n\t// Bytes 42c0 - 42ff\n\t0xD9, 0x8F, 0x69, 0x43, 0x20, 0xD9, 0x90, 0x6D,\n\t0x43, 0x20, 0xD9, 0x91, 0x71, 0x43, 0x20, 0xD9,\n\t0x92, 0x75, 0x43, 0x41, 0xCC, 0x8A, 0xC9, 0x43,\n\t0x73, 0xCC, 0x87, 0xC9, 0x44, 0x20, 0xE3, 0x82,\n\t0x99, 0x0D, 0x44, 0x20, 0xE3, 0x82, 0x9A, 0x0D,\n\t0x44, 0xC2, 0xA8, 0xCC, 0x81, 0xCA, 0x44, 0xCE,\n\t0x91, 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0x95, 0xCC,\n\t0x81, 0xC9, 0x44, 0xCE, 0x97, 0xCC, 0x81, 0xC9,\n\t// Bytes 4300 - 433f\n\t0x44, 0xCE, 0x99, 0xCC, 0x81, 0xC9, 0x44, 0xCE,\n\t0x9F, 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0xA5, 0xCC,\n\t0x81, 0xC9, 0x44, 0xCE, 0xA5, 0xCC, 0x88, 0xC9,\n\t0x44, 0xCE, 0xA9, 0xCC, 0x81, 0xC9, 0x44, 0xCE,\n\t0xB1, 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0xB5, 0xCC,\n\t0x81, 0xC9, 0x44, 0xCE, 0xB7, 0xCC, 0x81, 0xC9,\n\t0x44, 0xCE, 0xB9, 0xCC, 0x81, 0xC9, 0x44, 0xCE,\n\t0xBF, 0xCC, 0x81, 0xC9, 0x44, 0xCF, 0x85, 0xCC,\n\t// Bytes 4340 - 437f\n\t0x81, 0xC9, 0x44, 0xCF, 0x89, 0xCC, 0x81, 0xC9,\n\t0x44, 0xD7, 0x90, 0xD6, 0xB7, 0x31, 0x44, 0xD7,\n\t0x90, 0xD6, 0xB8, 0x35, 0x44, 0xD7, 0x90, 0xD6,\n\t0xBC, 0x41, 0x44, 0xD7, 0x91, 0xD6, 0xBC, 0x41,\n\t0x44, 0xD7, 0x91, 0xD6, 0xBF, 0x49, 0x44, 0xD7,\n\t0x92, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x93, 0xD6,\n\t0xBC, 0x41, 0x44, 0xD7, 0x94, 0xD6, 0xBC, 0x41,\n\t0x44, 0xD7, 0x95, 0xD6, 0xB9, 0x39, 0x44, 0xD7,\n\t// Bytes 4380 - 43bf\n\t0x95, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x96, 0xD6,\n\t0xBC, 0x41, 0x44, 0xD7, 0x98, 0xD6, 0xBC, 0x41,\n\t0x44, 0xD7, 0x99, 0xD6, 0xB4, 0x25, 0x44, 0xD7,\n\t0x99, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x9A, 0xD6,\n\t0xBC, 0x41, 0x44, 0xD7, 0x9B, 0xD6, 0xBC, 0x41,\n\t0x44, 0xD7, 0x9B, 0xD6, 0xBF, 0x49, 0x44, 0xD7,\n\t0x9C, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x9E, 0xD6,\n\t0xBC, 0x41, 0x44, 0xD7, 0xA0, 0xD6, 0xBC, 0x41,\n\t// Bytes 43c0 - 43ff\n\t0x44, 0xD7, 0xA1, 0xD6, 0xBC, 0x41, 0x44, 0xD7,\n\t0xA3, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0xA4, 0xD6,\n\t0xBC, 0x41, 0x44, 0xD7, 0xA4, 0xD6, 0xBF, 0x49,\n\t0x44, 0xD7, 0xA6, 0xD6, 0xBC, 0x41, 0x44, 0xD7,\n\t0xA7, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0xA8, 0xD6,\n\t0xBC, 0x41, 0x44, 0xD7, 0xA9, 0xD6, 0xBC, 0x41,\n\t0x44, 0xD7, 0xA9, 0xD7, 0x81, 0x4D, 0x44, 0xD7,\n\t0xA9, 0xD7, 0x82, 0x51, 0x44, 0xD7, 0xAA, 0xD6,\n\t// Bytes 4400 - 443f\n\t0xBC, 0x41, 0x44, 0xD7, 0xB2, 0xD6, 0xB7, 0x31,\n\t0x44, 0xD8, 0xA7, 0xD9, 0x8B, 0x59, 0x44, 0xD8,\n\t0xA7, 0xD9, 0x93, 0xC9, 0x44, 0xD8, 0xA7, 0xD9,\n\t0x94, 0xC9, 0x44, 0xD8, 0xA7, 0xD9, 0x95, 0xB5,\n\t0x44, 0xD8, 0xB0, 0xD9, 0xB0, 0x79, 0x44, 0xD8,\n\t0xB1, 0xD9, 0xB0, 0x79, 0x44, 0xD9, 0x80, 0xD9,\n\t0x8B, 0x59, 0x44, 0xD9, 0x80, 0xD9, 0x8E, 0x65,\n\t0x44, 0xD9, 0x80, 0xD9, 0x8F, 0x69, 0x44, 0xD9,\n\t// Bytes 4440 - 447f\n\t0x80, 0xD9, 0x90, 0x6D, 0x44, 0xD9, 0x80, 0xD9,\n\t0x91, 0x71, 0x44, 0xD9, 0x80, 0xD9, 0x92, 0x75,\n\t0x44, 0xD9, 0x87, 0xD9, 0xB0, 0x79, 0x44, 0xD9,\n\t0x88, 0xD9, 0x94, 0xC9, 0x44, 0xD9, 0x89, 0xD9,\n\t0xB0, 0x79, 0x44, 0xD9, 0x8A, 0xD9, 0x94, 0xC9,\n\t0x44, 0xDB, 0x92, 0xD9, 0x94, 0xC9, 0x44, 0xDB,\n\t0x95, 0xD9, 0x94, 0xC9, 0x45, 0x20, 0xCC, 0x88,\n\t0xCC, 0x80, 0xCA, 0x45, 0x20, 0xCC, 0x88, 0xCC,\n\t// Bytes 4480 - 44bf\n\t0x81, 0xCA, 0x45, 0x20, 0xCC, 0x88, 0xCD, 0x82,\n\t0xCA, 0x45, 0x20, 0xCC, 0x93, 0xCC, 0x80, 0xCA,\n\t0x45, 0x20, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x45,\n\t0x20, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x45, 0x20,\n\t0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x45, 0x20, 0xCC,\n\t0x94, 0xCC, 0x81, 0xCA, 0x45, 0x20, 0xCC, 0x94,\n\t0xCD, 0x82, 0xCA, 0x45, 0x20, 0xD9, 0x8C, 0xD9,\n\t0x91, 0x72, 0x45, 0x20, 0xD9, 0x8D, 0xD9, 0x91,\n\t// Bytes 44c0 - 44ff\n\t0x72, 0x45, 0x20, 0xD9, 0x8E, 0xD9, 0x91, 0x72,\n\t0x45, 0x20, 0xD9, 0x8F, 0xD9, 0x91, 0x72, 0x45,\n\t0x20, 0xD9, 0x90, 0xD9, 0x91, 0x72, 0x45, 0x20,\n\t0xD9, 0x91, 0xD9, 0xB0, 0x7A, 0x45, 0xE2, 0xAB,\n\t0x9D, 0xCC, 0xB8, 0x05, 0x46, 0xCE, 0xB9, 0xCC,\n\t0x88, 0xCC, 0x81, 0xCA, 0x46, 0xCF, 0x85, 0xCC,\n\t0x88, 0xCC, 0x81, 0xCA, 0x46, 0xD7, 0xA9, 0xD6,\n\t0xBC, 0xD7, 0x81, 0x4E, 0x46, 0xD7, 0xA9, 0xD6,\n\t// Bytes 4500 - 453f\n\t0xBC, 0xD7, 0x82, 0x52, 0x46, 0xD9, 0x80, 0xD9,\n\t0x8E, 0xD9, 0x91, 0x72, 0x46, 0xD9, 0x80, 0xD9,\n\t0x8F, 0xD9, 0x91, 0x72, 0x46, 0xD9, 0x80, 0xD9,\n\t0x90, 0xD9, 0x91, 0x72, 0x46, 0xE0, 0xA4, 0x95,\n\t0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0x96,\n\t0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0x97,\n\t0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0x9C,\n\t0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xA1,\n\t// Bytes 4540 - 457f\n\t0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xA2,\n\t0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xAB,\n\t0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xAF,\n\t0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA6, 0xA1,\n\t0xE0, 0xA6, 0xBC, 0x09, 0x46, 0xE0, 0xA6, 0xA2,\n\t0xE0, 0xA6, 0xBC, 0x09, 0x46, 0xE0, 0xA6, 0xAF,\n\t0xE0, 0xA6, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0x96,\n\t0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0x97,\n\t// Bytes 4580 - 45bf\n\t0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0x9C,\n\t0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0xAB,\n\t0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0xB2,\n\t0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0xB8,\n\t0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xAC, 0xA1,\n\t0xE0, 0xAC, 0xBC, 0x09, 0x46, 0xE0, 0xAC, 0xA2,\n\t0xE0, 0xAC, 0xBC, 0x09, 0x46, 0xE0, 0xBE, 0xB2,\n\t0xE0, 0xBE, 0x80, 0x9D, 0x46, 0xE0, 0xBE, 0xB3,\n\t// Bytes 45c0 - 45ff\n\t0xE0, 0xBE, 0x80, 0x9D, 0x46, 0xE3, 0x83, 0x86,\n\t0xE3, 0x82, 0x99, 0x0D, 0x48, 0xF0, 0x9D, 0x85,\n\t0x97, 0xF0, 0x9D, 0x85, 0xA5, 0xAD, 0x48, 0xF0,\n\t0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xAD,\n\t0x48, 0xF0, 0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85,\n\t0xA5, 0xAD, 0x48, 0xF0, 0x9D, 0x86, 0xBA, 0xF0,\n\t0x9D, 0x85, 0xA5, 0xAD, 0x49, 0xE0, 0xBE, 0xB2,\n\t0xE0, 0xBD, 0xB1, 0xE0, 0xBE, 0x80, 0x9E, 0x49,\n\t// Bytes 4600 - 463f\n\t0xE0, 0xBE, 0xB3, 0xE0, 0xBD, 0xB1, 0xE0, 0xBE,\n\t0x80, 0x9E, 0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0,\n\t0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAE, 0xAE,\n\t0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85,\n\t0xA5, 0xF0, 0x9D, 0x85, 0xAF, 0xAE, 0x4C, 0xF0,\n\t0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xF0,\n\t0x9D, 0x85, 0xB0, 0xAE, 0x4C, 0xF0, 0x9D, 0x85,\n\t0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85,\n\t// Bytes 4640 - 467f\n\t0xB1, 0xAE, 0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0,\n\t0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xB2, 0xAE,\n\t0x4C, 0xF0, 0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85,\n\t0xA5, 0xF0, 0x9D, 0x85, 0xAE, 0xAE, 0x4C, 0xF0,\n\t0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85, 0xA5, 0xF0,\n\t0x9D, 0x85, 0xAF, 0xAE, 0x4C, 0xF0, 0x9D, 0x86,\n\t0xBA, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85,\n\t0xAE, 0xAE, 0x4C, 0xF0, 0x9D, 0x86, 0xBA, 0xF0,\n\t// Bytes 4680 - 46bf\n\t0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAF, 0xAE,\n\t0x83, 0x41, 0xCC, 0x82, 0xC9, 0x83, 0x41, 0xCC,\n\t0x86, 0xC9, 0x83, 0x41, 0xCC, 0x87, 0xC9, 0x83,\n\t0x41, 0xCC, 0x88, 0xC9, 0x83, 0x41, 0xCC, 0x8A,\n\t0xC9, 0x83, 0x41, 0xCC, 0xA3, 0xB5, 0x83, 0x43,\n\t0xCC, 0xA7, 0xA5, 0x83, 0x45, 0xCC, 0x82, 0xC9,\n\t0x83, 0x45, 0xCC, 0x84, 0xC9, 0x83, 0x45, 0xCC,\n\t0xA3, 0xB5, 0x83, 0x45, 0xCC, 0xA7, 0xA5, 0x83,\n\t// Bytes 46c0 - 46ff\n\t0x49, 0xCC, 0x88, 0xC9, 0x83, 0x4C, 0xCC, 0xA3,\n\t0xB5, 0x83, 0x4F, 0xCC, 0x82, 0xC9, 0x83, 0x4F,\n\t0xCC, 0x83, 0xC9, 0x83, 0x4F, 0xCC, 0x84, 0xC9,\n\t0x83, 0x4F, 0xCC, 0x87, 0xC9, 0x83, 0x4F, 0xCC,\n\t0x88, 0xC9, 0x83, 0x4F, 0xCC, 0x9B, 0xAD, 0x83,\n\t0x4F, 0xCC, 0xA3, 0xB5, 0x83, 0x4F, 0xCC, 0xA8,\n\t0xA5, 0x83, 0x52, 0xCC, 0xA3, 0xB5, 0x83, 0x53,\n\t0xCC, 0x81, 0xC9, 0x83, 0x53, 0xCC, 0x8C, 0xC9,\n\t// Bytes 4700 - 473f\n\t0x83, 0x53, 0xCC, 0xA3, 0xB5, 0x83, 0x55, 0xCC,\n\t0x83, 0xC9, 0x83, 0x55, 0xCC, 0x84, 0xC9, 0x83,\n\t0x55, 0xCC, 0x88, 0xC9, 0x83, 0x55, 0xCC, 0x9B,\n\t0xAD, 0x83, 0x61, 0xCC, 0x82, 0xC9, 0x83, 0x61,\n\t0xCC, 0x86, 0xC9, 0x83, 0x61, 0xCC, 0x87, 0xC9,\n\t0x83, 0x61, 0xCC, 0x88, 0xC9, 0x83, 0x61, 0xCC,\n\t0x8A, 0xC9, 0x83, 0x61, 0xCC, 0xA3, 0xB5, 0x83,\n\t0x63, 0xCC, 0xA7, 0xA5, 0x83, 0x65, 0xCC, 0x82,\n\t// Bytes 4740 - 477f\n\t0xC9, 0x83, 0x65, 0xCC, 0x84, 0xC9, 0x83, 0x65,\n\t0xCC, 0xA3, 0xB5, 0x83, 0x65, 0xCC, 0xA7, 0xA5,\n\t0x83, 0x69, 0xCC, 0x88, 0xC9, 0x83, 0x6C, 0xCC,\n\t0xA3, 0xB5, 0x83, 0x6F, 0xCC, 0x82, 0xC9, 0x83,\n\t0x6F, 0xCC, 0x83, 0xC9, 0x83, 0x6F, 0xCC, 0x84,\n\t0xC9, 0x83, 0x6F, 0xCC, 0x87, 0xC9, 0x83, 0x6F,\n\t0xCC, 0x88, 0xC9, 0x83, 0x6F, 0xCC, 0x9B, 0xAD,\n\t0x83, 0x6F, 0xCC, 0xA3, 0xB5, 0x83, 0x6F, 0xCC,\n\t// Bytes 4780 - 47bf\n\t0xA8, 0xA5, 0x83, 0x72, 0xCC, 0xA3, 0xB5, 0x83,\n\t0x73, 0xCC, 0x81, 0xC9, 0x83, 0x73, 0xCC, 0x8C,\n\t0xC9, 0x83, 0x73, 0xCC, 0xA3, 0xB5, 0x83, 0x75,\n\t0xCC, 0x83, 0xC9, 0x83, 0x75, 0xCC, 0x84, 0xC9,\n\t0x83, 0x75, 0xCC, 0x88, 0xC9, 0x83, 0x75, 0xCC,\n\t0x9B, 0xAD, 0x84, 0xCE, 0x91, 0xCC, 0x93, 0xC9,\n\t0x84, 0xCE, 0x91, 0xCC, 0x94, 0xC9, 0x84, 0xCE,\n\t0x95, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0x95, 0xCC,\n\t// Bytes 47c0 - 47ff\n\t0x94, 0xC9, 0x84, 0xCE, 0x97, 0xCC, 0x93, 0xC9,\n\t0x84, 0xCE, 0x97, 0xCC, 0x94, 0xC9, 0x84, 0xCE,\n\t0x99, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0x99, 0xCC,\n\t0x94, 0xC9, 0x84, 0xCE, 0x9F, 0xCC, 0x93, 0xC9,\n\t0x84, 0xCE, 0x9F, 0xCC, 0x94, 0xC9, 0x84, 0xCE,\n\t0xA5, 0xCC, 0x94, 0xC9, 0x84, 0xCE, 0xA9, 0xCC,\n\t0x93, 0xC9, 0x84, 0xCE, 0xA9, 0xCC, 0x94, 0xC9,\n\t0x84, 0xCE, 0xB1, 0xCC, 0x80, 0xC9, 0x84, 0xCE,\n\t// Bytes 4800 - 483f\n\t0xB1, 0xCC, 0x81, 0xC9, 0x84, 0xCE, 0xB1, 0xCC,\n\t0x93, 0xC9, 0x84, 0xCE, 0xB1, 0xCC, 0x94, 0xC9,\n\t0x84, 0xCE, 0xB1, 0xCD, 0x82, 0xC9, 0x84, 0xCE,\n\t0xB5, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0xB5, 0xCC,\n\t0x94, 0xC9, 0x84, 0xCE, 0xB7, 0xCC, 0x80, 0xC9,\n\t0x84, 0xCE, 0xB7, 0xCC, 0x81, 0xC9, 0x84, 0xCE,\n\t0xB7, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0xB7, 0xCC,\n\t0x94, 0xC9, 0x84, 0xCE, 0xB7, 0xCD, 0x82, 0xC9,\n\t// Bytes 4840 - 487f\n\t0x84, 0xCE, 0xB9, 0xCC, 0x88, 0xC9, 0x84, 0xCE,\n\t0xB9, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0xB9, 0xCC,\n\t0x94, 0xC9, 0x84, 0xCE, 0xBF, 0xCC, 0x93, 0xC9,\n\t0x84, 0xCE, 0xBF, 0xCC, 0x94, 0xC9, 0x84, 0xCF,\n\t0x85, 0xCC, 0x88, 0xC9, 0x84, 0xCF, 0x85, 0xCC,\n\t0x93, 0xC9, 0x84, 0xCF, 0x85, 0xCC, 0x94, 0xC9,\n\t0x84, 0xCF, 0x89, 0xCC, 0x80, 0xC9, 0x84, 0xCF,\n\t0x89, 0xCC, 0x81, 0xC9, 0x84, 0xCF, 0x89, 0xCC,\n\t// Bytes 4880 - 48bf\n\t0x93, 0xC9, 0x84, 0xCF, 0x89, 0xCC, 0x94, 0xC9,\n\t0x84, 0xCF, 0x89, 0xCD, 0x82, 0xC9, 0x86, 0xCE,\n\t0x91, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE,\n\t0x91, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE,\n\t0x91, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE,\n\t0x91, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE,\n\t0x91, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE,\n\t0x91, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE,\n\t// Bytes 48c0 - 48ff\n\t0x97, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE,\n\t0x97, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE,\n\t0x97, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE,\n\t0x97, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE,\n\t0x97, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE,\n\t0x97, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE,\n\t0xA9, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE,\n\t0xA9, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE,\n\t// Bytes 4900 - 493f\n\t0xA9, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE,\n\t0xA9, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE,\n\t0xA9, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE,\n\t0xA9, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE,\n\t0xB1, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE,\n\t0xB1, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE,\n\t0xB1, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE,\n\t0xB1, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE,\n\t// Bytes 4940 - 497f\n\t0xB1, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE,\n\t0xB1, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE,\n\t0xB7, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE,\n\t0xB7, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE,\n\t0xB7, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE,\n\t0xB7, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE,\n\t0xB7, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE,\n\t0xB7, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCF,\n\t// Bytes 4980 - 49bf\n\t0x89, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCF,\n\t0x89, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCF,\n\t0x89, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCF,\n\t0x89, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCF,\n\t0x89, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCF,\n\t0x89, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x42, 0xCC,\n\t0x80, 0xC9, 0x32, 0x42, 0xCC, 0x81, 0xC9, 0x32,\n\t0x42, 0xCC, 0x93, 0xC9, 0x32, 0x43, 0xE1, 0x85,\n\t// Bytes 49c0 - 49ff\n\t0xA1, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xA2, 0x01,\n\t0x00, 0x43, 0xE1, 0x85, 0xA3, 0x01, 0x00, 0x43,\n\t0xE1, 0x85, 0xA4, 0x01, 0x00, 0x43, 0xE1, 0x85,\n\t0xA5, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xA6, 0x01,\n\t0x00, 0x43, 0xE1, 0x85, 0xA7, 0x01, 0x00, 0x43,\n\t0xE1, 0x85, 0xA8, 0x01, 0x00, 0x43, 0xE1, 0x85,\n\t0xA9, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xAA, 0x01,\n\t0x00, 0x43, 0xE1, 0x85, 0xAB, 0x01, 0x00, 0x43,\n\t// Bytes 4a00 - 4a3f\n\t0xE1, 0x85, 0xAC, 0x01, 0x00, 0x43, 0xE1, 0x85,\n\t0xAD, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xAE, 0x01,\n\t0x00, 0x43, 0xE1, 0x85, 0xAF, 0x01, 0x00, 0x43,\n\t0xE1, 0x85, 0xB0, 0x01, 0x00, 0x43, 0xE1, 0x85,\n\t0xB1, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xB2, 0x01,\n\t0x00, 0x43, 0xE1, 0x85, 0xB3, 0x01, 0x00, 0x43,\n\t0xE1, 0x85, 0xB4, 0x01, 0x00, 0x43, 0xE1, 0x85,\n\t0xB5, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xAA, 0x01,\n\t// Bytes 4a40 - 4a7f\n\t0x00, 0x43, 0xE1, 0x86, 0xAC, 0x01, 0x00, 0x43,\n\t0xE1, 0x86, 0xAD, 0x01, 0x00, 0x43, 0xE1, 0x86,\n\t0xB0, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xB1, 0x01,\n\t0x00, 0x43, 0xE1, 0x86, 0xB2, 0x01, 0x00, 0x43,\n\t0xE1, 0x86, 0xB3, 0x01, 0x00, 0x43, 0xE1, 0x86,\n\t0xB4, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xB5, 0x01,\n\t0x00, 0x44, 0xCC, 0x88, 0xCC, 0x81, 0xCA, 0x32,\n\t0x43, 0xE3, 0x82, 0x99, 0x0D, 0x03, 0x43, 0xE3,\n\t// Bytes 4a80 - 4abf\n\t0x82, 0x9A, 0x0D, 0x03, 0x46, 0xE0, 0xBD, 0xB1,\n\t0xE0, 0xBD, 0xB2, 0x9E, 0x26, 0x46, 0xE0, 0xBD,\n\t0xB1, 0xE0, 0xBD, 0xB4, 0xA2, 0x26, 0x46, 0xE0,\n\t0xBD, 0xB1, 0xE0, 0xBE, 0x80, 0x9E, 0x26, 0x00,\n\t0x01,\n}\n\n// lookup returns the trie value for the first UTF-8 encoding in s and\n// the width in bytes of this encoding. The size will be 0 if s does not\n// hold enough bytes to complete the encoding. len(s) must be greater than 0.\nfunc (t *nfcTrie) lookup(s []byte) (v uint16, sz int) {\n\tc0 := s[0]\n\tswitch {\n\tcase c0 < 0x80: // is ASCII\n\t\treturn nfcValues[c0], 1\n\tcase c0 < 0xC2:\n\t\treturn 0, 1 // Illegal UTF-8: not a starter, not ASCII.\n\tcase c0 < 0xE0: // 2-byte UTF-8\n\t\tif len(s) < 2 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := nfcIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c1), 2\n\tcase c0 < 0xF0: // 3-byte UTF-8\n\t\tif len(s) < 3 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := nfcIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to := uint32(i)<<6 + uint32(c1)\n\t\ti = nfcIndex[o]\n\t\tc2 := s[2]\n\t\tif c2 < 0x80 || 0xC0 <= c2 {\n\t\t\treturn 0, 2 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c2), 3\n\tcase c0 < 0xF8: // 4-byte UTF-8\n\t\tif len(s) < 4 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := nfcIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to := uint32(i)<<6 + uint32(c1)\n\t\ti = nfcIndex[o]\n\t\tc2 := s[2]\n\t\tif c2 < 0x80 || 0xC0 <= c2 {\n\t\t\treturn 0, 2 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to = uint32(i)<<6 + uint32(c2)\n\t\ti = nfcIndex[o]\n\t\tc3 := s[3]\n\t\tif c3 < 0x80 || 0xC0 <= c3 {\n\t\t\treturn 0, 3 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c3), 4\n\t}\n\t// Illegal rune\n\treturn 0, 1\n}\n\n// lookupUnsafe returns the trie value for the first UTF-8 encoding in s.\n// s must start with a full and valid UTF-8 encoded rune.\nfunc (t *nfcTrie) lookupUnsafe(s []byte) uint16 {\n\tc0 := s[0]\n\tif c0 < 0x80 { // is ASCII\n\t\treturn nfcValues[c0]\n\t}\n\ti := nfcIndex[c0]\n\tif c0 < 0xE0 { // 2-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[1])\n\t}\n\ti = nfcIndex[uint32(i)<<6+uint32(s[1])]\n\tif c0 < 0xF0 { // 3-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[2])\n\t}\n\ti = nfcIndex[uint32(i)<<6+uint32(s[2])]\n\tif c0 < 0xF8 { // 4-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[3])\n\t}\n\treturn 0\n}\n\n// lookupString returns the trie value for the first UTF-8 encoding in s and\n// the width in bytes of this encoding. The size will be 0 if s does not\n// hold enough bytes to complete the encoding. len(s) must be greater than 0.\nfunc (t *nfcTrie) lookupString(s string) (v uint16, sz int) {\n\tc0 := s[0]\n\tswitch {\n\tcase c0 < 0x80: // is ASCII\n\t\treturn nfcValues[c0], 1\n\tcase c0 < 0xC2:\n\t\treturn 0, 1 // Illegal UTF-8: not a starter, not ASCII.\n\tcase c0 < 0xE0: // 2-byte UTF-8\n\t\tif len(s) < 2 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := nfcIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c1), 2\n\tcase c0 < 0xF0: // 3-byte UTF-8\n\t\tif len(s) < 3 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := nfcIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to := uint32(i)<<6 + uint32(c1)\n\t\ti = nfcIndex[o]\n\t\tc2 := s[2]\n\t\tif c2 < 0x80 || 0xC0 <= c2 {\n\t\t\treturn 0, 2 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c2), 3\n\tcase c0 < 0xF8: // 4-byte UTF-8\n\t\tif len(s) < 4 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := nfcIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to := uint32(i)<<6 + uint32(c1)\n\t\ti = nfcIndex[o]\n\t\tc2 := s[2]\n\t\tif c2 < 0x80 || 0xC0 <= c2 {\n\t\t\treturn 0, 2 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to = uint32(i)<<6 + uint32(c2)\n\t\ti = nfcIndex[o]\n\t\tc3 := s[3]\n\t\tif c3 < 0x80 || 0xC0 <= c3 {\n\t\t\treturn 0, 3 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c3), 4\n\t}\n\t// Illegal rune\n\treturn 0, 1\n}\n\n// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s.\n// s must start with a full and valid UTF-8 encoded rune.\nfunc (t *nfcTrie) lookupStringUnsafe(s string) uint16 {\n\tc0 := s[0]\n\tif c0 < 0x80 { // is ASCII\n\t\treturn nfcValues[c0]\n\t}\n\ti := nfcIndex[c0]\n\tif c0 < 0xE0 { // 2-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[1])\n\t}\n\ti = nfcIndex[uint32(i)<<6+uint32(s[1])]\n\tif c0 < 0xF0 { // 3-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[2])\n\t}\n\ti = nfcIndex[uint32(i)<<6+uint32(s[2])]\n\tif c0 < 0xF8 { // 4-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[3])\n\t}\n\treturn 0\n}\n\n// nfcTrie. Total size: 10442 bytes (10.20 KiB). Checksum: 4ba400a9d8208e03.\ntype nfcTrie struct{}\n\nfunc newNfcTrie(i int) *nfcTrie {\n\treturn &nfcTrie{}\n}\n\n// lookupValue determines the type of block n and looks up the value for b.\nfunc (t *nfcTrie) lookupValue(n uint32, b byte) uint16 {\n\tswitch {\n\tcase n < 45:\n\t\treturn uint16(nfcValues[n<<6+uint32(b)])\n\tdefault:\n\t\tn -= 45\n\t\treturn uint16(nfcSparse.lookup(n, b))\n\t}\n}\n\n// nfcValues: 47 blocks, 3008 entries, 6016 bytes\n// The third block is the zero block.\nvar nfcValues = [3008]uint16{\n\t// Block 0x0, offset 0x0\n\t0x3c: 0xa000, 0x3d: 0xa000, 0x3e: 0xa000,\n\t// Block 0x1, offset 0x40\n\t0x41: 0xa000, 0x42: 0xa000, 0x43: 0xa000, 0x44: 0xa000, 0x45: 0xa000,\n\t0x46: 0xa000, 0x47: 0xa000, 0x48: 0xa000, 0x49: 0xa000, 0x4a: 0xa000, 0x4b: 0xa000,\n\t0x4c: 0xa000, 0x4d: 0xa000, 0x4e: 0xa000, 0x4f: 0xa000, 0x50: 0xa000,\n\t0x52: 0xa000, 0x53: 0xa000, 0x54: 0xa000, 0x55: 0xa000, 0x56: 0xa000, 0x57: 0xa000,\n\t0x58: 0xa000, 0x59: 0xa000, 0x5a: 0xa000,\n\t0x61: 0xa000, 0x62: 0xa000, 0x63: 0xa000,\n\t0x64: 0xa000, 0x65: 0xa000, 0x66: 0xa000, 0x67: 0xa000, 0x68: 0xa000, 0x69: 0xa000,\n\t0x6a: 0xa000, 0x6b: 0xa000, 0x6c: 0xa000, 0x6d: 0xa000, 0x6e: 0xa000, 0x6f: 0xa000,\n\t0x70: 0xa000, 0x72: 0xa000, 0x73: 0xa000, 0x74: 0xa000, 0x75: 0xa000,\n\t0x76: 0xa000, 0x77: 0xa000, 0x78: 0xa000, 0x79: 0xa000, 0x7a: 0xa000,\n\t// Block 0x2, offset 0x80\n\t// Block 0x3, offset 0xc0\n\t0xc0: 0x2f6f, 0xc1: 0x2f74, 0xc2: 0x4688, 0xc3: 0x2f79, 0xc4: 0x4697, 0xc5: 0x469c,\n\t0xc6: 0xa000, 0xc7: 0x46a6, 0xc8: 0x2fe2, 0xc9: 0x2fe7, 0xca: 0x46ab, 0xcb: 0x2ffb,\n\t0xcc: 0x306e, 0xcd: 0x3073, 0xce: 0x3078, 0xcf: 0x46bf, 0xd1: 0x3104,\n\t0xd2: 0x3127, 0xd3: 0x312c, 0xd4: 0x46c9, 0xd5: 0x46ce, 0xd6: 0x46dd,\n\t0xd8: 0xa000, 0xd9: 0x31b3, 0xda: 0x31b8, 0xdb: 0x31bd, 0xdc: 0x470f, 0xdd: 0x3235,\n\t0xe0: 0x327b, 0xe1: 0x3280, 0xe2: 0x4719, 0xe3: 0x3285,\n\t0xe4: 0x4728, 0xe5: 0x472d, 0xe6: 0xa000, 0xe7: 0x4737, 0xe8: 0x32ee, 0xe9: 0x32f3,\n\t0xea: 0x473c, 0xeb: 0x3307, 0xec: 0x337f, 0xed: 0x3384, 0xee: 0x3389, 0xef: 0x4750,\n\t0xf1: 0x3415, 0xf2: 0x3438, 0xf3: 0x343d, 0xf4: 0x475a, 0xf5: 0x475f,\n\t0xf6: 0x476e, 0xf8: 0xa000, 0xf9: 0x34c9, 0xfa: 0x34ce, 0xfb: 0x34d3,\n\t0xfc: 0x47a0, 0xfd: 0x3550, 0xff: 0x3569,\n\t// Block 0x4, offset 0x100\n\t0x100: 0x2f7e, 0x101: 0x328a, 0x102: 0x468d, 0x103: 0x471e, 0x104: 0x2f9c, 0x105: 0x32a8,\n\t0x106: 0x2fb0, 0x107: 0x32bc, 0x108: 0x2fb5, 0x109: 0x32c1, 0x10a: 0x2fba, 0x10b: 0x32c6,\n\t0x10c: 0x2fbf, 0x10d: 0x32cb, 0x10e: 0x2fc9, 0x10f: 0x32d5,\n\t0x112: 0x46b0, 0x113: 0x4741, 0x114: 0x2ff1, 0x115: 0x32fd, 0x116: 0x2ff6, 0x117: 0x3302,\n\t0x118: 0x3014, 0x119: 0x3320, 0x11a: 0x3005, 0x11b: 0x3311, 0x11c: 0x302d, 0x11d: 0x3339,\n\t0x11e: 0x3037, 0x11f: 0x3343, 0x120: 0x303c, 0x121: 0x3348, 0x122: 0x3046, 0x123: 0x3352,\n\t0x124: 0x304b, 0x125: 0x3357, 0x128: 0x307d, 0x129: 0x338e,\n\t0x12a: 0x3082, 0x12b: 0x3393, 0x12c: 0x3087, 0x12d: 0x3398, 0x12e: 0x30aa, 0x12f: 0x33b6,\n\t0x130: 0x308c, 0x134: 0x30b4, 0x135: 0x33c0,\n\t0x136: 0x30c8, 0x137: 0x33d9, 0x139: 0x30d2, 0x13a: 0x33e3, 0x13b: 0x30dc,\n\t0x13c: 0x33ed, 0x13d: 0x30d7, 0x13e: 0x33e8,\n\t// Block 0x5, offset 0x140\n\t0x143: 0x30ff, 0x144: 0x3410, 0x145: 0x3118,\n\t0x146: 0x3429, 0x147: 0x310e, 0x148: 0x341f,\n\t0x14c: 0x46d3, 0x14d: 0x4764, 0x14e: 0x3131, 0x14f: 0x3442, 0x150: 0x313b, 0x151: 0x344c,\n\t0x154: 0x3159, 0x155: 0x346a, 0x156: 0x3172, 0x157: 0x3483,\n\t0x158: 0x3163, 0x159: 0x3474, 0x15a: 0x46f6, 0x15b: 0x4787, 0x15c: 0x317c, 0x15d: 0x348d,\n\t0x15e: 0x318b, 0x15f: 0x349c, 0x160: 0x46fb, 0x161: 0x478c, 0x162: 0x31a4, 0x163: 0x34ba,\n\t0x164: 0x3195, 0x165: 0x34ab, 0x168: 0x4705, 0x169: 0x4796,\n\t0x16a: 0x470a, 0x16b: 0x479b, 0x16c: 0x31c2, 0x16d: 0x34d8, 0x16e: 0x31cc, 0x16f: 0x34e2,\n\t0x170: 0x31d1, 0x171: 0x34e7, 0x172: 0x31ef, 0x173: 0x3505, 0x174: 0x3212, 0x175: 0x3528,\n\t0x176: 0x323a, 0x177: 0x3555, 0x178: 0x324e, 0x179: 0x325d, 0x17a: 0x357d, 0x17b: 0x3267,\n\t0x17c: 0x3587, 0x17d: 0x326c, 0x17e: 0x358c, 0x17f: 0xa000,\n\t// Block 0x6, offset 0x180\n\t0x184: 0x8100, 0x185: 0x8100,\n\t0x186: 0x8100,\n\t0x18d: 0x2f88, 0x18e: 0x3294, 0x18f: 0x3096, 0x190: 0x33a2, 0x191: 0x3140,\n\t0x192: 0x3451, 0x193: 0x31d6, 0x194: 0x34ec, 0x195: 0x39cf, 0x196: 0x3b5e, 0x197: 0x39c8,\n\t0x198: 0x3b57, 0x199: 0x39d6, 0x19a: 0x3b65, 0x19b: 0x39c1, 0x19c: 0x3b50,\n\t0x19e: 0x38b0, 0x19f: 0x3a3f, 0x1a0: 0x38a9, 0x1a1: 0x3a38, 0x1a2: 0x35b3, 0x1a3: 0x35c5,\n\t0x1a6: 0x3041, 0x1a7: 0x334d, 0x1a8: 0x30be, 0x1a9: 0x33cf,\n\t0x1aa: 0x46ec, 0x1ab: 0x477d, 0x1ac: 0x3990, 0x1ad: 0x3b1f, 0x1ae: 0x35d7, 0x1af: 0x35dd,\n\t0x1b0: 0x33c5, 0x1b4: 0x3028, 0x1b5: 0x3334,\n\t0x1b8: 0x30fa, 0x1b9: 0x340b, 0x1ba: 0x38b7, 0x1bb: 0x3a46,\n\t0x1bc: 0x35ad, 0x1bd: 0x35bf, 0x1be: 0x35b9, 0x1bf: 0x35cb,\n\t// Block 0x7, offset 0x1c0\n\t0x1c0: 0x2f8d, 0x1c1: 0x3299, 0x1c2: 0x2f92, 0x1c3: 0x329e, 0x1c4: 0x300a, 0x1c5: 0x3316,\n\t0x1c6: 0x300f, 0x1c7: 0x331b, 0x1c8: 0x309b, 0x1c9: 0x33a7, 0x1ca: 0x30a0, 0x1cb: 0x33ac,\n\t0x1cc: 0x3145, 0x1cd: 0x3456, 0x1ce: 0x314a, 0x1cf: 0x345b, 0x1d0: 0x3168, 0x1d1: 0x3479,\n\t0x1d2: 0x316d, 0x1d3: 0x347e, 0x1d4: 0x31db, 0x1d5: 0x34f1, 0x1d6: 0x31e0, 0x1d7: 0x34f6,\n\t0x1d8: 0x3186, 0x1d9: 0x3497, 0x1da: 0x319f, 0x1db: 0x34b5,\n\t0x1de: 0x305a, 0x1df: 0x3366,\n\t0x1e6: 0x4692, 0x1e7: 0x4723, 0x1e8: 0x46ba, 0x1e9: 0x474b,\n\t0x1ea: 0x395f, 0x1eb: 0x3aee, 0x1ec: 0x393c, 0x1ed: 0x3acb, 0x1ee: 0x46d8, 0x1ef: 0x4769,\n\t0x1f0: 0x3958, 0x1f1: 0x3ae7, 0x1f2: 0x3244, 0x1f3: 0x355f,\n\t// Block 0x8, offset 0x200\n\t0x200: 0x9932, 0x201: 0x9932, 0x202: 0x9932, 0x203: 0x9932, 0x204: 0x9932, 0x205: 0x8132,\n\t0x206: 0x9932, 0x207: 0x9932, 0x208: 0x9932, 0x209: 0x9932, 0x20a: 0x9932, 0x20b: 0x9932,\n\t0x20c: 0x9932, 0x20d: 0x8132, 0x20e: 0x8132, 0x20f: 0x9932, 0x210: 0x8132, 0x211: 0x9932,\n\t0x212: 0x8132, 0x213: 0x9932, 0x214: 0x9932, 0x215: 0x8133, 0x216: 0x812d, 0x217: 0x812d,\n\t0x218: 0x812d, 0x219: 0x812d, 0x21a: 0x8133, 0x21b: 0x992b, 0x21c: 0x812d, 0x21d: 0x812d,\n\t0x21e: 0x812d, 0x21f: 0x812d, 0x220: 0x812d, 0x221: 0x8129, 0x222: 0x8129, 0x223: 0x992d,\n\t0x224: 0x992d, 0x225: 0x992d, 0x226: 0x992d, 0x227: 0x9929, 0x228: 0x9929, 0x229: 0x812d,\n\t0x22a: 0x812d, 0x22b: 0x812d, 0x22c: 0x812d, 0x22d: 0x992d, 0x22e: 0x992d, 0x22f: 0x812d,\n\t0x230: 0x992d, 0x231: 0x992d, 0x232: 0x812d, 0x233: 0x812d, 0x234: 0x8101, 0x235: 0x8101,\n\t0x236: 0x8101, 0x237: 0x8101, 0x238: 0x9901, 0x239: 0x812d, 0x23a: 0x812d, 0x23b: 0x812d,\n\t0x23c: 0x812d, 0x23d: 0x8132, 0x23e: 0x8132, 0x23f: 0x8132,\n\t// Block 0x9, offset 0x240\n\t0x240: 0x49ae, 0x241: 0x49b3, 0x242: 0x9932, 0x243: 0x49b8, 0x244: 0x4a71, 0x245: 0x9936,\n\t0x246: 0x8132, 0x247: 0x812d, 0x248: 0x812d, 0x249: 0x812d, 0x24a: 0x8132, 0x24b: 0x8132,\n\t0x24c: 0x8132, 0x24d: 0x812d, 0x24e: 0x812d, 0x250: 0x8132, 0x251: 0x8132,\n\t0x252: 0x8132, 0x253: 0x812d, 0x254: 0x812d, 0x255: 0x812d, 0x256: 0x812d, 0x257: 0x8132,\n\t0x258: 0x8133, 0x259: 0x812d, 0x25a: 0x812d, 0x25b: 0x8132, 0x25c: 0x8134, 0x25d: 0x8135,\n\t0x25e: 0x8135, 0x25f: 0x8134, 0x260: 0x8135, 0x261: 0x8135, 0x262: 0x8134, 0x263: 0x8132,\n\t0x264: 0x8132, 0x265: 0x8132, 0x266: 0x8132, 0x267: 0x8132, 0x268: 0x8132, 0x269: 0x8132,\n\t0x26a: 0x8132, 0x26b: 0x8132, 0x26c: 0x8132, 0x26d: 0x8132, 0x26e: 0x8132, 0x26f: 0x8132,\n\t0x274: 0x0170,\n\t0x27a: 0x8100,\n\t0x27e: 0x0037,\n\t// Block 0xa, offset 0x280\n\t0x284: 0x8100, 0x285: 0x35a1,\n\t0x286: 0x35e9, 0x287: 0x00ce, 0x288: 0x3607, 0x289: 0x3613, 0x28a: 0x3625,\n\t0x28c: 0x3643, 0x28e: 0x3655, 0x28f: 0x3673, 0x290: 0x3e08, 0x291: 0xa000,\n\t0x295: 0xa000, 0x297: 0xa000,\n\t0x299: 0xa000,\n\t0x29f: 0xa000, 0x2a1: 0xa000,\n\t0x2a5: 0xa000, 0x2a9: 0xa000,\n\t0x2aa: 0x3637, 0x2ab: 0x3667, 0x2ac: 0x47fe, 0x2ad: 0x3697, 0x2ae: 0x4828, 0x2af: 0x36a9,\n\t0x2b0: 0x3e70, 0x2b1: 0xa000, 0x2b5: 0xa000,\n\t0x2b7: 0xa000, 0x2b9: 0xa000,\n\t0x2bf: 0xa000,\n\t// Block 0xb, offset 0x2c0\n\t0x2c0: 0x3721, 0x2c1: 0x372d, 0x2c3: 0x371b,\n\t0x2c6: 0xa000, 0x2c7: 0x3709,\n\t0x2cc: 0x375d, 0x2cd: 0x3745, 0x2ce: 0x376f, 0x2d0: 0xa000,\n\t0x2d3: 0xa000, 0x2d5: 0xa000, 0x2d6: 0xa000, 0x2d7: 0xa000,\n\t0x2d8: 0xa000, 0x2d9: 0x3751, 0x2da: 0xa000,\n\t0x2de: 0xa000, 0x2e3: 0xa000,\n\t0x2e7: 0xa000,\n\t0x2eb: 0xa000, 0x2ed: 0xa000,\n\t0x2f0: 0xa000, 0x2f3: 0xa000, 0x2f5: 0xa000,\n\t0x2f6: 0xa000, 0x2f7: 0xa000, 0x2f8: 0xa000, 0x2f9: 0x37d5, 0x2fa: 0xa000,\n\t0x2fe: 0xa000,\n\t// Block 0xc, offset 0x300\n\t0x301: 0x3733, 0x302: 0x37b7,\n\t0x310: 0x370f, 0x311: 0x3793,\n\t0x312: 0x3715, 0x313: 0x3799, 0x316: 0x3727, 0x317: 0x37ab,\n\t0x318: 0xa000, 0x319: 0xa000, 0x31a: 0x3829, 0x31b: 0x382f, 0x31c: 0x3739, 0x31d: 0x37bd,\n\t0x31e: 0x373f, 0x31f: 0x37c3, 0x322: 0x374b, 0x323: 0x37cf,\n\t0x324: 0x3757, 0x325: 0x37db, 0x326: 0x3763, 0x327: 0x37e7, 0x328: 0xa000, 0x329: 0xa000,\n\t0x32a: 0x3835, 0x32b: 0x383b, 0x32c: 0x378d, 0x32d: 0x3811, 0x32e: 0x3769, 0x32f: 0x37ed,\n\t0x330: 0x3775, 0x331: 0x37f9, 0x332: 0x377b, 0x333: 0x37ff, 0x334: 0x3781, 0x335: 0x3805,\n\t0x338: 0x3787, 0x339: 0x380b,\n\t// Block 0xd, offset 0x340\n\t0x351: 0x812d,\n\t0x352: 0x8132, 0x353: 0x8132, 0x354: 0x8132, 0x355: 0x8132, 0x356: 0x812d, 0x357: 0x8132,\n\t0x358: 0x8132, 0x359: 0x8132, 0x35a: 0x812e, 0x35b: 0x812d, 0x35c: 0x8132, 0x35d: 0x8132,\n\t0x35e: 0x8132, 0x35f: 0x8132, 0x360: 0x8132, 0x361: 0x8132, 0x362: 0x812d, 0x363: 0x812d,\n\t0x364: 0x812d, 0x365: 0x812d, 0x366: 0x812d, 0x367: 0x812d, 0x368: 0x8132, 0x369: 0x8132,\n\t0x36a: 0x812d, 0x36b: 0x8132, 0x36c: 0x8132, 0x36d: 0x812e, 0x36e: 0x8131, 0x36f: 0x8132,\n\t0x370: 0x8105, 0x371: 0x8106, 0x372: 0x8107, 0x373: 0x8108, 0x374: 0x8109, 0x375: 0x810a,\n\t0x376: 0x810b, 0x377: 0x810c, 0x378: 0x810d, 0x379: 0x810e, 0x37a: 0x810e, 0x37b: 0x810f,\n\t0x37c: 0x8110, 0x37d: 0x8111, 0x37f: 0x8112,\n\t// Block 0xe, offset 0x380\n\t0x388: 0xa000, 0x38a: 0xa000, 0x38b: 0x8116,\n\t0x38c: 0x8117, 0x38d: 0x8118, 0x38e: 0x8119, 0x38f: 0x811a, 0x390: 0x811b, 0x391: 0x811c,\n\t0x392: 0x811d, 0x393: 0x9932, 0x394: 0x9932, 0x395: 0x992d, 0x396: 0x812d, 0x397: 0x8132,\n\t0x398: 0x8132, 0x399: 0x8132, 0x39a: 0x8132, 0x39b: 0x8132, 0x39c: 0x812d, 0x39d: 0x8132,\n\t0x39e: 0x8132, 0x39f: 0x812d,\n\t0x3b0: 0x811e,\n\t// Block 0xf, offset 0x3c0\n\t0x3c5: 0xa000,\n\t0x3c6: 0x2d26, 0x3c7: 0xa000, 0x3c8: 0x2d2e, 0x3c9: 0xa000, 0x3ca: 0x2d36, 0x3cb: 0xa000,\n\t0x3cc: 0x2d3e, 0x3cd: 0xa000, 0x3ce: 0x2d46, 0x3d1: 0xa000,\n\t0x3d2: 0x2d4e,\n\t0x3f4: 0x8102, 0x3f5: 0x9900,\n\t0x3fa: 0xa000, 0x3fb: 0x2d56,\n\t0x3fc: 0xa000, 0x3fd: 0x2d5e, 0x3fe: 0xa000, 0x3ff: 0xa000,\n\t// Block 0x10, offset 0x400\n\t0x400: 0x8132, 0x401: 0x8132, 0x402: 0x812d, 0x403: 0x8132, 0x404: 0x8132, 0x405: 0x8132,\n\t0x406: 0x8132, 0x407: 0x8132, 0x408: 0x8132, 0x409: 0x8132, 0x40a: 0x812d, 0x40b: 0x8132,\n\t0x40c: 0x8132, 0x40d: 0x8135, 0x40e: 0x812a, 0x40f: 0x812d, 0x410: 0x8129, 0x411: 0x8132,\n\t0x412: 0x8132, 0x413: 0x8132, 0x414: 0x8132, 0x415: 0x8132, 0x416: 0x8132, 0x417: 0x8132,\n\t0x418: 0x8132, 0x419: 0x8132, 0x41a: 0x8132, 0x41b: 0x8132, 0x41c: 0x8132, 0x41d: 0x8132,\n\t0x41e: 0x8132, 0x41f: 0x8132, 0x420: 0x8132, 0x421: 0x8132, 0x422: 0x8132, 0x423: 0x8132,\n\t0x424: 0x8132, 0x425: 0x8132, 0x426: 0x8132, 0x427: 0x8132, 0x428: 0x8132, 0x429: 0x8132,\n\t0x42a: 0x8132, 0x42b: 0x8132, 0x42c: 0x8132, 0x42d: 0x8132, 0x42e: 0x8132, 0x42f: 0x8132,\n\t0x430: 0x8132, 0x431: 0x8132, 0x432: 0x8132, 0x433: 0x8132, 0x434: 0x8132, 0x435: 0x8132,\n\t0x436: 0x8133, 0x437: 0x8131, 0x438: 0x8131, 0x439: 0x812d, 0x43b: 0x8132,\n\t0x43c: 0x8134, 0x43d: 0x812d, 0x43e: 0x8132, 0x43f: 0x812d,\n\t// Block 0x11, offset 0x440\n\t0x440: 0x2f97, 0x441: 0x32a3, 0x442: 0x2fa1, 0x443: 0x32ad, 0x444: 0x2fa6, 0x445: 0x32b2,\n\t0x446: 0x2fab, 0x447: 0x32b7, 0x448: 0x38cc, 0x449: 0x3a5b, 0x44a: 0x2fc4, 0x44b: 0x32d0,\n\t0x44c: 0x2fce, 0x44d: 0x32da, 0x44e: 0x2fdd, 0x44f: 0x32e9, 0x450: 0x2fd3, 0x451: 0x32df,\n\t0x452: 0x2fd8, 0x453: 0x32e4, 0x454: 0x38ef, 0x455: 0x3a7e, 0x456: 0x38f6, 0x457: 0x3a85,\n\t0x458: 0x3019, 0x459: 0x3325, 0x45a: 0x301e, 0x45b: 0x332a, 0x45c: 0x3904, 0x45d: 0x3a93,\n\t0x45e: 0x3023, 0x45f: 0x332f, 0x460: 0x3032, 0x461: 0x333e, 0x462: 0x3050, 0x463: 0x335c,\n\t0x464: 0x305f, 0x465: 0x336b, 0x466: 0x3055, 0x467: 0x3361, 0x468: 0x3064, 0x469: 0x3370,\n\t0x46a: 0x3069, 0x46b: 0x3375, 0x46c: 0x30af, 0x46d: 0x33bb, 0x46e: 0x390b, 0x46f: 0x3a9a,\n\t0x470: 0x30b9, 0x471: 0x33ca, 0x472: 0x30c3, 0x473: 0x33d4, 0x474: 0x30cd, 0x475: 0x33de,\n\t0x476: 0x46c4, 0x477: 0x4755, 0x478: 0x3912, 0x479: 0x3aa1, 0x47a: 0x30e6, 0x47b: 0x33f7,\n\t0x47c: 0x30e1, 0x47d: 0x33f2, 0x47e: 0x30eb, 0x47f: 0x33fc,\n\t// Block 0x12, offset 0x480\n\t0x480: 0x30f0, 0x481: 0x3401, 0x482: 0x30f5, 0x483: 0x3406, 0x484: 0x3109, 0x485: 0x341a,\n\t0x486: 0x3113, 0x487: 0x3424, 0x488: 0x3122, 0x489: 0x3433, 0x48a: 0x311d, 0x48b: 0x342e,\n\t0x48c: 0x3935, 0x48d: 0x3ac4, 0x48e: 0x3943, 0x48f: 0x3ad2, 0x490: 0x394a, 0x491: 0x3ad9,\n\t0x492: 0x3951, 0x493: 0x3ae0, 0x494: 0x314f, 0x495: 0x3460, 0x496: 0x3154, 0x497: 0x3465,\n\t0x498: 0x315e, 0x499: 0x346f, 0x49a: 0x46f1, 0x49b: 0x4782, 0x49c: 0x3997, 0x49d: 0x3b26,\n\t0x49e: 0x3177, 0x49f: 0x3488, 0x4a0: 0x3181, 0x4a1: 0x3492, 0x4a2: 0x4700, 0x4a3: 0x4791,\n\t0x4a4: 0x399e, 0x4a5: 0x3b2d, 0x4a6: 0x39a5, 0x4a7: 0x3b34, 0x4a8: 0x39ac, 0x4a9: 0x3b3b,\n\t0x4aa: 0x3190, 0x4ab: 0x34a1, 0x4ac: 0x319a, 0x4ad: 0x34b0, 0x4ae: 0x31ae, 0x4af: 0x34c4,\n\t0x4b0: 0x31a9, 0x4b1: 0x34bf, 0x4b2: 0x31ea, 0x4b3: 0x3500, 0x4b4: 0x31f9, 0x4b5: 0x350f,\n\t0x4b6: 0x31f4, 0x4b7: 0x350a, 0x4b8: 0x39b3, 0x4b9: 0x3b42, 0x4ba: 0x39ba, 0x4bb: 0x3b49,\n\t0x4bc: 0x31fe, 0x4bd: 0x3514, 0x4be: 0x3203, 0x4bf: 0x3519,\n\t// Block 0x13, offset 0x4c0\n\t0x4c0: 0x3208, 0x4c1: 0x351e, 0x4c2: 0x320d, 0x4c3: 0x3523, 0x4c4: 0x321c, 0x4c5: 0x3532,\n\t0x4c6: 0x3217, 0x4c7: 0x352d, 0x4c8: 0x3221, 0x4c9: 0x353c, 0x4ca: 0x3226, 0x4cb: 0x3541,\n\t0x4cc: 0x322b, 0x4cd: 0x3546, 0x4ce: 0x3249, 0x4cf: 0x3564, 0x4d0: 0x3262, 0x4d1: 0x3582,\n\t0x4d2: 0x3271, 0x4d3: 0x3591, 0x4d4: 0x3276, 0x4d5: 0x3596, 0x4d6: 0x337a, 0x4d7: 0x34a6,\n\t0x4d8: 0x3537, 0x4d9: 0x3573, 0x4db: 0x35d1,\n\t0x4e0: 0x46a1, 0x4e1: 0x4732, 0x4e2: 0x2f83, 0x4e3: 0x328f,\n\t0x4e4: 0x3878, 0x4e5: 0x3a07, 0x4e6: 0x3871, 0x4e7: 0x3a00, 0x4e8: 0x3886, 0x4e9: 0x3a15,\n\t0x4ea: 0x387f, 0x4eb: 0x3a0e, 0x4ec: 0x38be, 0x4ed: 0x3a4d, 0x4ee: 0x3894, 0x4ef: 0x3a23,\n\t0x4f0: 0x388d, 0x4f1: 0x3a1c, 0x4f2: 0x38a2, 0x4f3: 0x3a31, 0x4f4: 0x389b, 0x4f5: 0x3a2a,\n\t0x4f6: 0x38c5, 0x4f7: 0x3a54, 0x4f8: 0x46b5, 0x4f9: 0x4746, 0x4fa: 0x3000, 0x4fb: 0x330c,\n\t0x4fc: 0x2fec, 0x4fd: 0x32f8, 0x4fe: 0x38da, 0x4ff: 0x3a69,\n\t// Block 0x14, offset 0x500\n\t0x500: 0x38d3, 0x501: 0x3a62, 0x502: 0x38e8, 0x503: 0x3a77, 0x504: 0x38e1, 0x505: 0x3a70,\n\t0x506: 0x38fd, 0x507: 0x3a8c, 0x508: 0x3091, 0x509: 0x339d, 0x50a: 0x30a5, 0x50b: 0x33b1,\n\t0x50c: 0x46e7, 0x50d: 0x4778, 0x50e: 0x3136, 0x50f: 0x3447, 0x510: 0x3920, 0x511: 0x3aaf,\n\t0x512: 0x3919, 0x513: 0x3aa8, 0x514: 0x392e, 0x515: 0x3abd, 0x516: 0x3927, 0x517: 0x3ab6,\n\t0x518: 0x3989, 0x519: 0x3b18, 0x51a: 0x396d, 0x51b: 0x3afc, 0x51c: 0x3966, 0x51d: 0x3af5,\n\t0x51e: 0x397b, 0x51f: 0x3b0a, 0x520: 0x3974, 0x521: 0x3b03, 0x522: 0x3982, 0x523: 0x3b11,\n\t0x524: 0x31e5, 0x525: 0x34fb, 0x526: 0x31c7, 0x527: 0x34dd, 0x528: 0x39e4, 0x529: 0x3b73,\n\t0x52a: 0x39dd, 0x52b: 0x3b6c, 0x52c: 0x39f2, 0x52d: 0x3b81, 0x52e: 0x39eb, 0x52f: 0x3b7a,\n\t0x530: 0x39f9, 0x531: 0x3b88, 0x532: 0x3230, 0x533: 0x354b, 0x534: 0x3258, 0x535: 0x3578,\n\t0x536: 0x3253, 0x537: 0x356e, 0x538: 0x323f, 0x539: 0x355a,\n\t// Block 0x15, offset 0x540\n\t0x540: 0x4804, 0x541: 0x480a, 0x542: 0x491e, 0x543: 0x4936, 0x544: 0x4926, 0x545: 0x493e,\n\t0x546: 0x492e, 0x547: 0x4946, 0x548: 0x47aa, 0x549: 0x47b0, 0x54a: 0x488e, 0x54b: 0x48a6,\n\t0x54c: 0x4896, 0x54d: 0x48ae, 0x54e: 0x489e, 0x54f: 0x48b6, 0x550: 0x4816, 0x551: 0x481c,\n\t0x552: 0x3db8, 0x553: 0x3dc8, 0x554: 0x3dc0, 0x555: 0x3dd0,\n\t0x558: 0x47b6, 0x559: 0x47bc, 0x55a: 0x3ce8, 0x55b: 0x3cf8, 0x55c: 0x3cf0, 0x55d: 0x3d00,\n\t0x560: 0x482e, 0x561: 0x4834, 0x562: 0x494e, 0x563: 0x4966,\n\t0x564: 0x4956, 0x565: 0x496e, 0x566: 0x495e, 0x567: 0x4976, 0x568: 0x47c2, 0x569: 0x47c8,\n\t0x56a: 0x48be, 0x56b: 0x48d6, 0x56c: 0x48c6, 0x56d: 0x48de, 0x56e: 0x48ce, 0x56f: 0x48e6,\n\t0x570: 0x4846, 0x571: 0x484c, 0x572: 0x3e18, 0x573: 0x3e30, 0x574: 0x3e20, 0x575: 0x3e38,\n\t0x576: 0x3e28, 0x577: 0x3e40, 0x578: 0x47ce, 0x579: 0x47d4, 0x57a: 0x3d18, 0x57b: 0x3d30,\n\t0x57c: 0x3d20, 0x57d: 0x3d38, 0x57e: 0x3d28, 0x57f: 0x3d40,\n\t// Block 0x16, offset 0x580\n\t0x580: 0x4852, 0x581: 0x4858, 0x582: 0x3e48, 0x583: 0x3e58, 0x584: 0x3e50, 0x585: 0x3e60,\n\t0x588: 0x47da, 0x589: 0x47e0, 0x58a: 0x3d48, 0x58b: 0x3d58,\n\t0x58c: 0x3d50, 0x58d: 0x3d60, 0x590: 0x4864, 0x591: 0x486a,\n\t0x592: 0x3e80, 0x593: 0x3e98, 0x594: 0x3e88, 0x595: 0x3ea0, 0x596: 0x3e90, 0x597: 0x3ea8,\n\t0x599: 0x47e6, 0x59b: 0x3d68, 0x59d: 0x3d70,\n\t0x59f: 0x3d78, 0x5a0: 0x487c, 0x5a1: 0x4882, 0x5a2: 0x497e, 0x5a3: 0x4996,\n\t0x5a4: 0x4986, 0x5a5: 0x499e, 0x5a6: 0x498e, 0x5a7: 0x49a6, 0x5a8: 0x47ec, 0x5a9: 0x47f2,\n\t0x5aa: 0x48ee, 0x5ab: 0x4906, 0x5ac: 0x48f6, 0x5ad: 0x490e, 0x5ae: 0x48fe, 0x5af: 0x4916,\n\t0x5b0: 0x47f8, 0x5b1: 0x431e, 0x5b2: 0x3691, 0x5b3: 0x4324, 0x5b4: 0x4822, 0x5b5: 0x432a,\n\t0x5b6: 0x36a3, 0x5b7: 0x4330, 0x5b8: 0x36c1, 0x5b9: 0x4336, 0x5ba: 0x36d9, 0x5bb: 0x433c,\n\t0x5bc: 0x4870, 0x5bd: 0x4342,\n\t// Block 0x17, offset 0x5c0\n\t0x5c0: 0x3da0, 0x5c1: 0x3da8, 0x5c2: 0x4184, 0x5c3: 0x41a2, 0x5c4: 0x418e, 0x5c5: 0x41ac,\n\t0x5c6: 0x4198, 0x5c7: 0x41b6, 0x5c8: 0x3cd8, 0x5c9: 0x3ce0, 0x5ca: 0x40d0, 0x5cb: 0x40ee,\n\t0x5cc: 0x40da, 0x5cd: 0x40f8, 0x5ce: 0x40e4, 0x5cf: 0x4102, 0x5d0: 0x3de8, 0x5d1: 0x3df0,\n\t0x5d2: 0x41c0, 0x5d3: 0x41de, 0x5d4: 0x41ca, 0x5d5: 0x41e8, 0x5d6: 0x41d4, 0x5d7: 0x41f2,\n\t0x5d8: 0x3d08, 0x5d9: 0x3d10, 0x5da: 0x410c, 0x5db: 0x412a, 0x5dc: 0x4116, 0x5dd: 0x4134,\n\t0x5de: 0x4120, 0x5df: 0x413e, 0x5e0: 0x3ec0, 0x5e1: 0x3ec8, 0x5e2: 0x41fc, 0x5e3: 0x421a,\n\t0x5e4: 0x4206, 0x5e5: 0x4224, 0x5e6: 0x4210, 0x5e7: 0x422e, 0x5e8: 0x3d80, 0x5e9: 0x3d88,\n\t0x5ea: 0x4148, 0x5eb: 0x4166, 0x5ec: 0x4152, 0x5ed: 0x4170, 0x5ee: 0x415c, 0x5ef: 0x417a,\n\t0x5f0: 0x3685, 0x5f1: 0x367f, 0x5f2: 0x3d90, 0x5f3: 0x368b, 0x5f4: 0x3d98,\n\t0x5f6: 0x4810, 0x5f7: 0x3db0, 0x5f8: 0x35f5, 0x5f9: 0x35ef, 0x5fa: 0x35e3, 0x5fb: 0x42ee,\n\t0x5fc: 0x35fb, 0x5fd: 0x8100, 0x5fe: 0x01d3, 0x5ff: 0xa100,\n\t// Block 0x18, offset 0x600\n\t0x600: 0x8100, 0x601: 0x35a7, 0x602: 0x3dd8, 0x603: 0x369d, 0x604: 0x3de0,\n\t0x606: 0x483a, 0x607: 0x3df8, 0x608: 0x3601, 0x609: 0x42f4, 0x60a: 0x360d, 0x60b: 0x42fa,\n\t0x60c: 0x3619, 0x60d: 0x3b8f, 0x60e: 0x3b96, 0x60f: 0x3b9d, 0x610: 0x36b5, 0x611: 0x36af,\n\t0x612: 0x3e00, 0x613: 0x44e4, 0x616: 0x36bb, 0x617: 0x3e10,\n\t0x618: 0x3631, 0x619: 0x362b, 0x61a: 0x361f, 0x61b: 0x4300, 0x61d: 0x3ba4,\n\t0x61e: 0x3bab, 0x61f: 0x3bb2, 0x620: 0x36eb, 0x621: 0x36e5, 0x622: 0x3e68, 0x623: 0x44ec,\n\t0x624: 0x36cd, 0x625: 0x36d3, 0x626: 0x36f1, 0x627: 0x3e78, 0x628: 0x3661, 0x629: 0x365b,\n\t0x62a: 0x364f, 0x62b: 0x430c, 0x62c: 0x3649, 0x62d: 0x359b, 0x62e: 0x42e8, 0x62f: 0x0081,\n\t0x632: 0x3eb0, 0x633: 0x36f7, 0x634: 0x3eb8,\n\t0x636: 0x4888, 0x637: 0x3ed0, 0x638: 0x363d, 0x639: 0x4306, 0x63a: 0x366d, 0x63b: 0x4318,\n\t0x63c: 0x3679, 0x63d: 0x4256, 0x63e: 0xa100,\n\t// Block 0x19, offset 0x640\n\t0x641: 0x3c06, 0x643: 0xa000, 0x644: 0x3c0d, 0x645: 0xa000,\n\t0x647: 0x3c14, 0x648: 0xa000, 0x649: 0x3c1b,\n\t0x64d: 0xa000,\n\t0x660: 0x2f65, 0x661: 0xa000, 0x662: 0x3c29,\n\t0x664: 0xa000, 0x665: 0xa000,\n\t0x66d: 0x3c22, 0x66e: 0x2f60, 0x66f: 0x2f6a,\n\t0x670: 0x3c30, 0x671: 0x3c37, 0x672: 0xa000, 0x673: 0xa000, 0x674: 0x3c3e, 0x675: 0x3c45,\n\t0x676: 0xa000, 0x677: 0xa000, 0x678: 0x3c4c, 0x679: 0x3c53, 0x67a: 0xa000, 0x67b: 0xa000,\n\t0x67c: 0xa000, 0x67d: 0xa000,\n\t// Block 0x1a, offset 0x680\n\t0x680: 0x3c5a, 0x681: 0x3c61, 0x682: 0xa000, 0x683: 0xa000, 0x684: 0x3c76, 0x685: 0x3c7d,\n\t0x686: 0xa000, 0x687: 0xa000, 0x688: 0x3c84, 0x689: 0x3c8b,\n\t0x691: 0xa000,\n\t0x692: 0xa000,\n\t0x6a2: 0xa000,\n\t0x6a8: 0xa000, 0x6a9: 0xa000,\n\t0x6ab: 0xa000, 0x6ac: 0x3ca0, 0x6ad: 0x3ca7, 0x6ae: 0x3cae, 0x6af: 0x3cb5,\n\t0x6b2: 0xa000, 0x6b3: 0xa000, 0x6b4: 0xa000, 0x6b5: 0xa000,\n\t// Block 0x1b, offset 0x6c0\n\t0x6c6: 0xa000, 0x6cb: 0xa000,\n\t0x6cc: 0x3f08, 0x6cd: 0xa000, 0x6ce: 0x3f10, 0x6cf: 0xa000, 0x6d0: 0x3f18, 0x6d1: 0xa000,\n\t0x6d2: 0x3f20, 0x6d3: 0xa000, 0x6d4: 0x3f28, 0x6d5: 0xa000, 0x6d6: 0x3f30, 0x6d7: 0xa000,\n\t0x6d8: 0x3f38, 0x6d9: 0xa000, 0x6da: 0x3f40, 0x6db: 0xa000, 0x6dc: 0x3f48, 0x6dd: 0xa000,\n\t0x6de: 0x3f50, 0x6df: 0xa000, 0x6e0: 0x3f58, 0x6e1: 0xa000, 0x6e2: 0x3f60,\n\t0x6e4: 0xa000, 0x6e5: 0x3f68, 0x6e6: 0xa000, 0x6e7: 0x3f70, 0x6e8: 0xa000, 0x6e9: 0x3f78,\n\t0x6ef: 0xa000,\n\t0x6f0: 0x3f80, 0x6f1: 0x3f88, 0x6f2: 0xa000, 0x6f3: 0x3f90, 0x6f4: 0x3f98, 0x6f5: 0xa000,\n\t0x6f6: 0x3fa0, 0x6f7: 0x3fa8, 0x6f8: 0xa000, 0x6f9: 0x3fb0, 0x6fa: 0x3fb8, 0x6fb: 0xa000,\n\t0x6fc: 0x3fc0, 0x6fd: 0x3fc8,\n\t// Block 0x1c, offset 0x700\n\t0x714: 0x3f00,\n\t0x719: 0x9903, 0x71a: 0x9903, 0x71b: 0x8100, 0x71c: 0x8100, 0x71d: 0xa000,\n\t0x71e: 0x3fd0,\n\t0x726: 0xa000,\n\t0x72b: 0xa000, 0x72c: 0x3fe0, 0x72d: 0xa000, 0x72e: 0x3fe8, 0x72f: 0xa000,\n\t0x730: 0x3ff0, 0x731: 0xa000, 0x732: 0x3ff8, 0x733: 0xa000, 0x734: 0x4000, 0x735: 0xa000,\n\t0x736: 0x4008, 0x737: 0xa000, 0x738: 0x4010, 0x739: 0xa000, 0x73a: 0x4018, 0x73b: 0xa000,\n\t0x73c: 0x4020, 0x73d: 0xa000, 0x73e: 0x4028, 0x73f: 0xa000,\n\t// Block 0x1d, offset 0x740\n\t0x740: 0x4030, 0x741: 0xa000, 0x742: 0x4038, 0x744: 0xa000, 0x745: 0x4040,\n\t0x746: 0xa000, 0x747: 0x4048, 0x748: 0xa000, 0x749: 0x4050,\n\t0x74f: 0xa000, 0x750: 0x4058, 0x751: 0x4060,\n\t0x752: 0xa000, 0x753: 0x4068, 0x754: 0x4070, 0x755: 0xa000, 0x756: 0x4078, 0x757: 0x4080,\n\t0x758: 0xa000, 0x759: 0x4088, 0x75a: 0x4090, 0x75b: 0xa000, 0x75c: 0x4098, 0x75d: 0x40a0,\n\t0x76f: 0xa000,\n\t0x770: 0xa000, 0x771: 0xa000, 0x772: 0xa000, 0x774: 0x3fd8,\n\t0x777: 0x40a8, 0x778: 0x40b0, 0x779: 0x40b8, 0x77a: 0x40c0,\n\t0x77d: 0xa000, 0x77e: 0x40c8,\n\t// Block 0x1e, offset 0x780\n\t0x780: 0x1377, 0x781: 0x0cfb, 0x782: 0x13d3, 0x783: 0x139f, 0x784: 0x0e57, 0x785: 0x06eb,\n\t0x786: 0x08df, 0x787: 0x162b, 0x788: 0x162b, 0x789: 0x0a0b, 0x78a: 0x145f, 0x78b: 0x0943,\n\t0x78c: 0x0a07, 0x78d: 0x0bef, 0x78e: 0x0fcf, 0x78f: 0x115f, 0x790: 0x1297, 0x791: 0x12d3,\n\t0x792: 0x1307, 0x793: 0x141b, 0x794: 0x0d73, 0x795: 0x0dff, 0x796: 0x0eab, 0x797: 0x0f43,\n\t0x798: 0x125f, 0x799: 0x1447, 0x79a: 0x1573, 0x79b: 0x070f, 0x79c: 0x08b3, 0x79d: 0x0d87,\n\t0x79e: 0x0ecf, 0x79f: 0x1293, 0x7a0: 0x15c3, 0x7a1: 0x0ab3, 0x7a2: 0x0e77, 0x7a3: 0x1283,\n\t0x7a4: 0x1317, 0x7a5: 0x0c23, 0x7a6: 0x11bb, 0x7a7: 0x12df, 0x7a8: 0x0b1f, 0x7a9: 0x0d0f,\n\t0x7aa: 0x0e17, 0x7ab: 0x0f1b, 0x7ac: 0x1427, 0x7ad: 0x074f, 0x7ae: 0x07e7, 0x7af: 0x0853,\n\t0x7b0: 0x0c8b, 0x7b1: 0x0d7f, 0x7b2: 0x0ecb, 0x7b3: 0x0fef, 0x7b4: 0x1177, 0x7b5: 0x128b,\n\t0x7b6: 0x12a3, 0x7b7: 0x13c7, 0x7b8: 0x14ef, 0x7b9: 0x15a3, 0x7ba: 0x15bf, 0x7bb: 0x102b,\n\t0x7bc: 0x106b, 0x7bd: 0x1123, 0x7be: 0x1243, 0x7bf: 0x147b,\n\t// Block 0x1f, offset 0x7c0\n\t0x7c0: 0x15cb, 0x7c1: 0x134b, 0x7c2: 0x09c7, 0x7c3: 0x0b3b, 0x7c4: 0x10db, 0x7c5: 0x119b,\n\t0x7c6: 0x0eff, 0x7c7: 0x1033, 0x7c8: 0x1397, 0x7c9: 0x14e7, 0x7ca: 0x09c3, 0x7cb: 0x0a8f,\n\t0x7cc: 0x0d77, 0x7cd: 0x0e2b, 0x7ce: 0x0e5f, 0x7cf: 0x1113, 0x7d0: 0x113b, 0x7d1: 0x14a7,\n\t0x7d2: 0x084f, 0x7d3: 0x11a7, 0x7d4: 0x07f3, 0x7d5: 0x07ef, 0x7d6: 0x1097, 0x7d7: 0x1127,\n\t0x7d8: 0x125b, 0x7d9: 0x14af, 0x7da: 0x1367, 0x7db: 0x0c27, 0x7dc: 0x0d73, 0x7dd: 0x1357,\n\t0x7de: 0x06f7, 0x7df: 0x0a63, 0x7e0: 0x0b93, 0x7e1: 0x0f2f, 0x7e2: 0x0faf, 0x7e3: 0x0873,\n\t0x7e4: 0x103b, 0x7e5: 0x075f, 0x7e6: 0x0b77, 0x7e7: 0x06d7, 0x7e8: 0x0deb, 0x7e9: 0x0ca3,\n\t0x7ea: 0x110f, 0x7eb: 0x08c7, 0x7ec: 0x09b3, 0x7ed: 0x0ffb, 0x7ee: 0x1263, 0x7ef: 0x133b,\n\t0x7f0: 0x0db7, 0x7f1: 0x13f7, 0x7f2: 0x0de3, 0x7f3: 0x0c37, 0x7f4: 0x121b, 0x7f5: 0x0c57,\n\t0x7f6: 0x0fab, 0x7f7: 0x072b, 0x7f8: 0x07a7, 0x7f9: 0x07eb, 0x7fa: 0x0d53, 0x7fb: 0x10fb,\n\t0x7fc: 0x11f3, 0x7fd: 0x1347, 0x7fe: 0x145b, 0x7ff: 0x085b,\n\t// Block 0x20, offset 0x800\n\t0x800: 0x090f, 0x801: 0x0a17, 0x802: 0x0b2f, 0x803: 0x0cbf, 0x804: 0x0e7b, 0x805: 0x103f,\n\t0x806: 0x1497, 0x807: 0x157b, 0x808: 0x15cf, 0x809: 0x15e7, 0x80a: 0x0837, 0x80b: 0x0cf3,\n\t0x80c: 0x0da3, 0x80d: 0x13eb, 0x80e: 0x0afb, 0x80f: 0x0bd7, 0x810: 0x0bf3, 0x811: 0x0c83,\n\t0x812: 0x0e6b, 0x813: 0x0eb7, 0x814: 0x0f67, 0x815: 0x108b, 0x816: 0x112f, 0x817: 0x1193,\n\t0x818: 0x13db, 0x819: 0x126b, 0x81a: 0x1403, 0x81b: 0x147f, 0x81c: 0x080f, 0x81d: 0x083b,\n\t0x81e: 0x0923, 0x81f: 0x0ea7, 0x820: 0x12f3, 0x821: 0x133b, 0x822: 0x0b1b, 0x823: 0x0b8b,\n\t0x824: 0x0c4f, 0x825: 0x0daf, 0x826: 0x10d7, 0x827: 0x0f23, 0x828: 0x073b, 0x829: 0x097f,\n\t0x82a: 0x0a63, 0x82b: 0x0ac7, 0x82c: 0x0b97, 0x82d: 0x0f3f, 0x82e: 0x0f5b, 0x82f: 0x116b,\n\t0x830: 0x118b, 0x831: 0x1463, 0x832: 0x14e3, 0x833: 0x14f3, 0x834: 0x152f, 0x835: 0x0753,\n\t0x836: 0x107f, 0x837: 0x144f, 0x838: 0x14cb, 0x839: 0x0baf, 0x83a: 0x0717, 0x83b: 0x0777,\n\t0x83c: 0x0a67, 0x83d: 0x0a87, 0x83e: 0x0caf, 0x83f: 0x0d73,\n\t// Block 0x21, offset 0x840\n\t0x840: 0x0ec3, 0x841: 0x0fcb, 0x842: 0x1277, 0x843: 0x1417, 0x844: 0x1623, 0x845: 0x0ce3,\n\t0x846: 0x14a3, 0x847: 0x0833, 0x848: 0x0d2f, 0x849: 0x0d3b, 0x84a: 0x0e0f, 0x84b: 0x0e47,\n\t0x84c: 0x0f4b, 0x84d: 0x0fa7, 0x84e: 0x1027, 0x84f: 0x110b, 0x850: 0x153b, 0x851: 0x07af,\n\t0x852: 0x0c03, 0x853: 0x14b3, 0x854: 0x0767, 0x855: 0x0aab, 0x856: 0x0e2f, 0x857: 0x13df,\n\t0x858: 0x0b67, 0x859: 0x0bb7, 0x85a: 0x0d43, 0x85b: 0x0f2f, 0x85c: 0x14bb, 0x85d: 0x0817,\n\t0x85e: 0x08ff, 0x85f: 0x0a97, 0x860: 0x0cd3, 0x861: 0x0d1f, 0x862: 0x0d5f, 0x863: 0x0df3,\n\t0x864: 0x0f47, 0x865: 0x0fbb, 0x866: 0x1157, 0x867: 0x12f7, 0x868: 0x1303, 0x869: 0x1457,\n\t0x86a: 0x14d7, 0x86b: 0x0883, 0x86c: 0x0e4b, 0x86d: 0x0903, 0x86e: 0x0ec7, 0x86f: 0x0f6b,\n\t0x870: 0x1287, 0x871: 0x14bf, 0x872: 0x15ab, 0x873: 0x15d3, 0x874: 0x0d37, 0x875: 0x0e27,\n\t0x876: 0x11c3, 0x877: 0x10b7, 0x878: 0x10c3, 0x879: 0x10e7, 0x87a: 0x0f17, 0x87b: 0x0e9f,\n\t0x87c: 0x1363, 0x87d: 0x0733, 0x87e: 0x122b, 0x87f: 0x081b,\n\t// Block 0x22, offset 0x880\n\t0x880: 0x080b, 0x881: 0x0b0b, 0x882: 0x0c2b, 0x883: 0x10f3, 0x884: 0x0a53, 0x885: 0x0e03,\n\t0x886: 0x0cef, 0x887: 0x13e7, 0x888: 0x12e7, 0x889: 0x14ab, 0x88a: 0x1323, 0x88b: 0x0b27,\n\t0x88c: 0x0787, 0x88d: 0x095b, 0x890: 0x09af,\n\t0x892: 0x0cdf, 0x895: 0x07f7, 0x896: 0x0f1f, 0x897: 0x0fe3,\n\t0x898: 0x1047, 0x899: 0x1063, 0x89a: 0x1067, 0x89b: 0x107b, 0x89c: 0x14fb, 0x89d: 0x10eb,\n\t0x89e: 0x116f, 0x8a0: 0x128f, 0x8a2: 0x1353,\n\t0x8a5: 0x1407, 0x8a6: 0x1433,\n\t0x8aa: 0x154f, 0x8ab: 0x1553, 0x8ac: 0x1557, 0x8ad: 0x15bb, 0x8ae: 0x142b, 0x8af: 0x14c7,\n\t0x8b0: 0x0757, 0x8b1: 0x077b, 0x8b2: 0x078f, 0x8b3: 0x084b, 0x8b4: 0x0857, 0x8b5: 0x0897,\n\t0x8b6: 0x094b, 0x8b7: 0x0967, 0x8b8: 0x096f, 0x8b9: 0x09ab, 0x8ba: 0x09b7, 0x8bb: 0x0a93,\n\t0x8bc: 0x0a9b, 0x8bd: 0x0ba3, 0x8be: 0x0bcb, 0x8bf: 0x0bd3,\n\t// Block 0x23, offset 0x8c0\n\t0x8c0: 0x0beb, 0x8c1: 0x0c97, 0x8c2: 0x0cc7, 0x8c3: 0x0ce7, 0x8c4: 0x0d57, 0x8c5: 0x0e1b,\n\t0x8c6: 0x0e37, 0x8c7: 0x0e67, 0x8c8: 0x0ebb, 0x8c9: 0x0edb, 0x8ca: 0x0f4f, 0x8cb: 0x102f,\n\t0x8cc: 0x104b, 0x8cd: 0x1053, 0x8ce: 0x104f, 0x8cf: 0x1057, 0x8d0: 0x105b, 0x8d1: 0x105f,\n\t0x8d2: 0x1073, 0x8d3: 0x1077, 0x8d4: 0x109b, 0x8d5: 0x10af, 0x8d6: 0x10cb, 0x8d7: 0x112f,\n\t0x8d8: 0x1137, 0x8d9: 0x113f, 0x8da: 0x1153, 0x8db: 0x117b, 0x8dc: 0x11cb, 0x8dd: 0x11ff,\n\t0x8de: 0x11ff, 0x8df: 0x1267, 0x8e0: 0x130f, 0x8e1: 0x1327, 0x8e2: 0x135b, 0x8e3: 0x135f,\n\t0x8e4: 0x13a3, 0x8e5: 0x13a7, 0x8e6: 0x13ff, 0x8e7: 0x1407, 0x8e8: 0x14db, 0x8e9: 0x151f,\n\t0x8ea: 0x1537, 0x8eb: 0x0b9b, 0x8ec: 0x171e, 0x8ed: 0x11e3,\n\t0x8f0: 0x06df, 0x8f1: 0x07e3, 0x8f2: 0x07a3, 0x8f3: 0x074b, 0x8f4: 0x078b, 0x8f5: 0x07b7,\n\t0x8f6: 0x0847, 0x8f7: 0x0863, 0x8f8: 0x094b, 0x8f9: 0x0937, 0x8fa: 0x0947, 0x8fb: 0x0963,\n\t0x8fc: 0x09af, 0x8fd: 0x09bf, 0x8fe: 0x0a03, 0x8ff: 0x0a0f,\n\t// Block 0x24, offset 0x900\n\t0x900: 0x0a2b, 0x901: 0x0a3b, 0x902: 0x0b23, 0x903: 0x0b2b, 0x904: 0x0b5b, 0x905: 0x0b7b,\n\t0x906: 0x0bab, 0x907: 0x0bc3, 0x908: 0x0bb3, 0x909: 0x0bd3, 0x90a: 0x0bc7, 0x90b: 0x0beb,\n\t0x90c: 0x0c07, 0x90d: 0x0c5f, 0x90e: 0x0c6b, 0x90f: 0x0c73, 0x910: 0x0c9b, 0x911: 0x0cdf,\n\t0x912: 0x0d0f, 0x913: 0x0d13, 0x914: 0x0d27, 0x915: 0x0da7, 0x916: 0x0db7, 0x917: 0x0e0f,\n\t0x918: 0x0e5b, 0x919: 0x0e53, 0x91a: 0x0e67, 0x91b: 0x0e83, 0x91c: 0x0ebb, 0x91d: 0x1013,\n\t0x91e: 0x0edf, 0x91f: 0x0f13, 0x920: 0x0f1f, 0x921: 0x0f5f, 0x922: 0x0f7b, 0x923: 0x0f9f,\n\t0x924: 0x0fc3, 0x925: 0x0fc7, 0x926: 0x0fe3, 0x927: 0x0fe7, 0x928: 0x0ff7, 0x929: 0x100b,\n\t0x92a: 0x1007, 0x92b: 0x1037, 0x92c: 0x10b3, 0x92d: 0x10cb, 0x92e: 0x10e3, 0x92f: 0x111b,\n\t0x930: 0x112f, 0x931: 0x114b, 0x932: 0x117b, 0x933: 0x122f, 0x934: 0x1257, 0x935: 0x12cb,\n\t0x936: 0x1313, 0x937: 0x131f, 0x938: 0x1327, 0x939: 0x133f, 0x93a: 0x1353, 0x93b: 0x1343,\n\t0x93c: 0x135b, 0x93d: 0x1357, 0x93e: 0x134f, 0x93f: 0x135f,\n\t// Block 0x25, offset 0x940\n\t0x940: 0x136b, 0x941: 0x13a7, 0x942: 0x13e3, 0x943: 0x1413, 0x944: 0x144b, 0x945: 0x146b,\n\t0x946: 0x14b7, 0x947: 0x14db, 0x948: 0x14fb, 0x949: 0x150f, 0x94a: 0x151f, 0x94b: 0x152b,\n\t0x94c: 0x1537, 0x94d: 0x158b, 0x94e: 0x162b, 0x94f: 0x16b5, 0x950: 0x16b0, 0x951: 0x16e2,\n\t0x952: 0x0607, 0x953: 0x062f, 0x954: 0x0633, 0x955: 0x1764, 0x956: 0x1791, 0x957: 0x1809,\n\t0x958: 0x1617, 0x959: 0x1627,\n\t// Block 0x26, offset 0x980\n\t0x980: 0x06fb, 0x981: 0x06f3, 0x982: 0x0703, 0x983: 0x1647, 0x984: 0x0747, 0x985: 0x0757,\n\t0x986: 0x075b, 0x987: 0x0763, 0x988: 0x076b, 0x989: 0x076f, 0x98a: 0x077b, 0x98b: 0x0773,\n\t0x98c: 0x05b3, 0x98d: 0x165b, 0x98e: 0x078f, 0x98f: 0x0793, 0x990: 0x0797, 0x991: 0x07b3,\n\t0x992: 0x164c, 0x993: 0x05b7, 0x994: 0x079f, 0x995: 0x07bf, 0x996: 0x1656, 0x997: 0x07cf,\n\t0x998: 0x07d7, 0x999: 0x0737, 0x99a: 0x07df, 0x99b: 0x07e3, 0x99c: 0x1831, 0x99d: 0x07ff,\n\t0x99e: 0x0807, 0x99f: 0x05bf, 0x9a0: 0x081f, 0x9a1: 0x0823, 0x9a2: 0x082b, 0x9a3: 0x082f,\n\t0x9a4: 0x05c3, 0x9a5: 0x0847, 0x9a6: 0x084b, 0x9a7: 0x0857, 0x9a8: 0x0863, 0x9a9: 0x0867,\n\t0x9aa: 0x086b, 0x9ab: 0x0873, 0x9ac: 0x0893, 0x9ad: 0x0897, 0x9ae: 0x089f, 0x9af: 0x08af,\n\t0x9b0: 0x08b7, 0x9b1: 0x08bb, 0x9b2: 0x08bb, 0x9b3: 0x08bb, 0x9b4: 0x166a, 0x9b5: 0x0e93,\n\t0x9b6: 0x08cf, 0x9b7: 0x08d7, 0x9b8: 0x166f, 0x9b9: 0x08e3, 0x9ba: 0x08eb, 0x9bb: 0x08f3,\n\t0x9bc: 0x091b, 0x9bd: 0x0907, 0x9be: 0x0913, 0x9bf: 0x0917,\n\t// Block 0x27, offset 0x9c0\n\t0x9c0: 0x091f, 0x9c1: 0x0927, 0x9c2: 0x092b, 0x9c3: 0x0933, 0x9c4: 0x093b, 0x9c5: 0x093f,\n\t0x9c6: 0x093f, 0x9c7: 0x0947, 0x9c8: 0x094f, 0x9c9: 0x0953, 0x9ca: 0x095f, 0x9cb: 0x0983,\n\t0x9cc: 0x0967, 0x9cd: 0x0987, 0x9ce: 0x096b, 0x9cf: 0x0973, 0x9d0: 0x080b, 0x9d1: 0x09cf,\n\t0x9d2: 0x0997, 0x9d3: 0x099b, 0x9d4: 0x099f, 0x9d5: 0x0993, 0x9d6: 0x09a7, 0x9d7: 0x09a3,\n\t0x9d8: 0x09bb, 0x9d9: 0x1674, 0x9da: 0x09d7, 0x9db: 0x09db, 0x9dc: 0x09e3, 0x9dd: 0x09ef,\n\t0x9de: 0x09f7, 0x9df: 0x0a13, 0x9e0: 0x1679, 0x9e1: 0x167e, 0x9e2: 0x0a1f, 0x9e3: 0x0a23,\n\t0x9e4: 0x0a27, 0x9e5: 0x0a1b, 0x9e6: 0x0a2f, 0x9e7: 0x05c7, 0x9e8: 0x05cb, 0x9e9: 0x0a37,\n\t0x9ea: 0x0a3f, 0x9eb: 0x0a3f, 0x9ec: 0x1683, 0x9ed: 0x0a5b, 0x9ee: 0x0a5f, 0x9ef: 0x0a63,\n\t0x9f0: 0x0a6b, 0x9f1: 0x1688, 0x9f2: 0x0a73, 0x9f3: 0x0a77, 0x9f4: 0x0b4f, 0x9f5: 0x0a7f,\n\t0x9f6: 0x05cf, 0x9f7: 0x0a8b, 0x9f8: 0x0a9b, 0x9f9: 0x0aa7, 0x9fa: 0x0aa3, 0x9fb: 0x1692,\n\t0x9fc: 0x0aaf, 0x9fd: 0x1697, 0x9fe: 0x0abb, 0x9ff: 0x0ab7,\n\t// Block 0x28, offset 0xa00\n\t0xa00: 0x0abf, 0xa01: 0x0acf, 0xa02: 0x0ad3, 0xa03: 0x05d3, 0xa04: 0x0ae3, 0xa05: 0x0aeb,\n\t0xa06: 0x0aef, 0xa07: 0x0af3, 0xa08: 0x05d7, 0xa09: 0x169c, 0xa0a: 0x05db, 0xa0b: 0x0b0f,\n\t0xa0c: 0x0b13, 0xa0d: 0x0b17, 0xa0e: 0x0b1f, 0xa0f: 0x1863, 0xa10: 0x0b37, 0xa11: 0x16a6,\n\t0xa12: 0x16a6, 0xa13: 0x11d7, 0xa14: 0x0b47, 0xa15: 0x0b47, 0xa16: 0x05df, 0xa17: 0x16c9,\n\t0xa18: 0x179b, 0xa19: 0x0b57, 0xa1a: 0x0b5f, 0xa1b: 0x05e3, 0xa1c: 0x0b73, 0xa1d: 0x0b83,\n\t0xa1e: 0x0b87, 0xa1f: 0x0b8f, 0xa20: 0x0b9f, 0xa21: 0x05eb, 0xa22: 0x05e7, 0xa23: 0x0ba3,\n\t0xa24: 0x16ab, 0xa25: 0x0ba7, 0xa26: 0x0bbb, 0xa27: 0x0bbf, 0xa28: 0x0bc3, 0xa29: 0x0bbf,\n\t0xa2a: 0x0bcf, 0xa2b: 0x0bd3, 0xa2c: 0x0be3, 0xa2d: 0x0bdb, 0xa2e: 0x0bdf, 0xa2f: 0x0be7,\n\t0xa30: 0x0beb, 0xa31: 0x0bef, 0xa32: 0x0bfb, 0xa33: 0x0bff, 0xa34: 0x0c17, 0xa35: 0x0c1f,\n\t0xa36: 0x0c2f, 0xa37: 0x0c43, 0xa38: 0x16ba, 0xa39: 0x0c3f, 0xa3a: 0x0c33, 0xa3b: 0x0c4b,\n\t0xa3c: 0x0c53, 0xa3d: 0x0c67, 0xa3e: 0x16bf, 0xa3f: 0x0c6f,\n\t// Block 0x29, offset 0xa40\n\t0xa40: 0x0c63, 0xa41: 0x0c5b, 0xa42: 0x05ef, 0xa43: 0x0c77, 0xa44: 0x0c7f, 0xa45: 0x0c87,\n\t0xa46: 0x0c7b, 0xa47: 0x05f3, 0xa48: 0x0c97, 0xa49: 0x0c9f, 0xa4a: 0x16c4, 0xa4b: 0x0ccb,\n\t0xa4c: 0x0cff, 0xa4d: 0x0cdb, 0xa4e: 0x05ff, 0xa4f: 0x0ce7, 0xa50: 0x05fb, 0xa51: 0x05f7,\n\t0xa52: 0x07c3, 0xa53: 0x07c7, 0xa54: 0x0d03, 0xa55: 0x0ceb, 0xa56: 0x11ab, 0xa57: 0x0663,\n\t0xa58: 0x0d0f, 0xa59: 0x0d13, 0xa5a: 0x0d17, 0xa5b: 0x0d2b, 0xa5c: 0x0d23, 0xa5d: 0x16dd,\n\t0xa5e: 0x0603, 0xa5f: 0x0d3f, 0xa60: 0x0d33, 0xa61: 0x0d4f, 0xa62: 0x0d57, 0xa63: 0x16e7,\n\t0xa64: 0x0d5b, 0xa65: 0x0d47, 0xa66: 0x0d63, 0xa67: 0x0607, 0xa68: 0x0d67, 0xa69: 0x0d6b,\n\t0xa6a: 0x0d6f, 0xa6b: 0x0d7b, 0xa6c: 0x16ec, 0xa6d: 0x0d83, 0xa6e: 0x060b, 0xa6f: 0x0d8f,\n\t0xa70: 0x16f1, 0xa71: 0x0d93, 0xa72: 0x060f, 0xa73: 0x0d9f, 0xa74: 0x0dab, 0xa75: 0x0db7,\n\t0xa76: 0x0dbb, 0xa77: 0x16f6, 0xa78: 0x168d, 0xa79: 0x16fb, 0xa7a: 0x0ddb, 0xa7b: 0x1700,\n\t0xa7c: 0x0de7, 0xa7d: 0x0def, 0xa7e: 0x0ddf, 0xa7f: 0x0dfb,\n\t// Block 0x2a, offset 0xa80\n\t0xa80: 0x0e0b, 0xa81: 0x0e1b, 0xa82: 0x0e0f, 0xa83: 0x0e13, 0xa84: 0x0e1f, 0xa85: 0x0e23,\n\t0xa86: 0x1705, 0xa87: 0x0e07, 0xa88: 0x0e3b, 0xa89: 0x0e3f, 0xa8a: 0x0613, 0xa8b: 0x0e53,\n\t0xa8c: 0x0e4f, 0xa8d: 0x170a, 0xa8e: 0x0e33, 0xa8f: 0x0e6f, 0xa90: 0x170f, 0xa91: 0x1714,\n\t0xa92: 0x0e73, 0xa93: 0x0e87, 0xa94: 0x0e83, 0xa95: 0x0e7f, 0xa96: 0x0617, 0xa97: 0x0e8b,\n\t0xa98: 0x0e9b, 0xa99: 0x0e97, 0xa9a: 0x0ea3, 0xa9b: 0x1651, 0xa9c: 0x0eb3, 0xa9d: 0x1719,\n\t0xa9e: 0x0ebf, 0xa9f: 0x1723, 0xaa0: 0x0ed3, 0xaa1: 0x0edf, 0xaa2: 0x0ef3, 0xaa3: 0x1728,\n\t0xaa4: 0x0f07, 0xaa5: 0x0f0b, 0xaa6: 0x172d, 0xaa7: 0x1732, 0xaa8: 0x0f27, 0xaa9: 0x0f37,\n\t0xaaa: 0x061b, 0xaab: 0x0f3b, 0xaac: 0x061f, 0xaad: 0x061f, 0xaae: 0x0f53, 0xaaf: 0x0f57,\n\t0xab0: 0x0f5f, 0xab1: 0x0f63, 0xab2: 0x0f6f, 0xab3: 0x0623, 0xab4: 0x0f87, 0xab5: 0x1737,\n\t0xab6: 0x0fa3, 0xab7: 0x173c, 0xab8: 0x0faf, 0xab9: 0x16a1, 0xaba: 0x0fbf, 0xabb: 0x1741,\n\t0xabc: 0x1746, 0xabd: 0x174b, 0xabe: 0x0627, 0xabf: 0x062b,\n\t// Block 0x2b, offset 0xac0\n\t0xac0: 0x0ff7, 0xac1: 0x1755, 0xac2: 0x1750, 0xac3: 0x175a, 0xac4: 0x175f, 0xac5: 0x0fff,\n\t0xac6: 0x1003, 0xac7: 0x1003, 0xac8: 0x100b, 0xac9: 0x0633, 0xaca: 0x100f, 0xacb: 0x0637,\n\t0xacc: 0x063b, 0xacd: 0x1769, 0xace: 0x1023, 0xacf: 0x102b, 0xad0: 0x1037, 0xad1: 0x063f,\n\t0xad2: 0x176e, 0xad3: 0x105b, 0xad4: 0x1773, 0xad5: 0x1778, 0xad6: 0x107b, 0xad7: 0x1093,\n\t0xad8: 0x0643, 0xad9: 0x109b, 0xada: 0x109f, 0xadb: 0x10a3, 0xadc: 0x177d, 0xadd: 0x1782,\n\t0xade: 0x1782, 0xadf: 0x10bb, 0xae0: 0x0647, 0xae1: 0x1787, 0xae2: 0x10cf, 0xae3: 0x10d3,\n\t0xae4: 0x064b, 0xae5: 0x178c, 0xae6: 0x10ef, 0xae7: 0x064f, 0xae8: 0x10ff, 0xae9: 0x10f7,\n\t0xaea: 0x1107, 0xaeb: 0x1796, 0xaec: 0x111f, 0xaed: 0x0653, 0xaee: 0x112b, 0xaef: 0x1133,\n\t0xaf0: 0x1143, 0xaf1: 0x0657, 0xaf2: 0x17a0, 0xaf3: 0x17a5, 0xaf4: 0x065b, 0xaf5: 0x17aa,\n\t0xaf6: 0x115b, 0xaf7: 0x17af, 0xaf8: 0x1167, 0xaf9: 0x1173, 0xafa: 0x117b, 0xafb: 0x17b4,\n\t0xafc: 0x17b9, 0xafd: 0x118f, 0xafe: 0x17be, 0xaff: 0x1197,\n\t// Block 0x2c, offset 0xb00\n\t0xb00: 0x16ce, 0xb01: 0x065f, 0xb02: 0x11af, 0xb03: 0x11b3, 0xb04: 0x0667, 0xb05: 0x11b7,\n\t0xb06: 0x0a33, 0xb07: 0x17c3, 0xb08: 0x17c8, 0xb09: 0x16d3, 0xb0a: 0x16d8, 0xb0b: 0x11d7,\n\t0xb0c: 0x11db, 0xb0d: 0x13f3, 0xb0e: 0x066b, 0xb0f: 0x1207, 0xb10: 0x1203, 0xb11: 0x120b,\n\t0xb12: 0x083f, 0xb13: 0x120f, 0xb14: 0x1213, 0xb15: 0x1217, 0xb16: 0x121f, 0xb17: 0x17cd,\n\t0xb18: 0x121b, 0xb19: 0x1223, 0xb1a: 0x1237, 0xb1b: 0x123b, 0xb1c: 0x1227, 0xb1d: 0x123f,\n\t0xb1e: 0x1253, 0xb1f: 0x1267, 0xb20: 0x1233, 0xb21: 0x1247, 0xb22: 0x124b, 0xb23: 0x124f,\n\t0xb24: 0x17d2, 0xb25: 0x17dc, 0xb26: 0x17d7, 0xb27: 0x066f, 0xb28: 0x126f, 0xb29: 0x1273,\n\t0xb2a: 0x127b, 0xb2b: 0x17f0, 0xb2c: 0x127f, 0xb2d: 0x17e1, 0xb2e: 0x0673, 0xb2f: 0x0677,\n\t0xb30: 0x17e6, 0xb31: 0x17eb, 0xb32: 0x067b, 0xb33: 0x129f, 0xb34: 0x12a3, 0xb35: 0x12a7,\n\t0xb36: 0x12ab, 0xb37: 0x12b7, 0xb38: 0x12b3, 0xb39: 0x12bf, 0xb3a: 0x12bb, 0xb3b: 0x12cb,\n\t0xb3c: 0x12c3, 0xb3d: 0x12c7, 0xb3e: 0x12cf, 0xb3f: 0x067f,\n\t// Block 0x2d, offset 0xb40\n\t0xb40: 0x12d7, 0xb41: 0x12db, 0xb42: 0x0683, 0xb43: 0x12eb, 0xb44: 0x12ef, 0xb45: 0x17f5,\n\t0xb46: 0x12fb, 0xb47: 0x12ff, 0xb48: 0x0687, 0xb49: 0x130b, 0xb4a: 0x05bb, 0xb4b: 0x17fa,\n\t0xb4c: 0x17ff, 0xb4d: 0x068b, 0xb4e: 0x068f, 0xb4f: 0x1337, 0xb50: 0x134f, 0xb51: 0x136b,\n\t0xb52: 0x137b, 0xb53: 0x1804, 0xb54: 0x138f, 0xb55: 0x1393, 0xb56: 0x13ab, 0xb57: 0x13b7,\n\t0xb58: 0x180e, 0xb59: 0x1660, 0xb5a: 0x13c3, 0xb5b: 0x13bf, 0xb5c: 0x13cb, 0xb5d: 0x1665,\n\t0xb5e: 0x13d7, 0xb5f: 0x13e3, 0xb60: 0x1813, 0xb61: 0x1818, 0xb62: 0x1423, 0xb63: 0x142f,\n\t0xb64: 0x1437, 0xb65: 0x181d, 0xb66: 0x143b, 0xb67: 0x1467, 0xb68: 0x1473, 0xb69: 0x1477,\n\t0xb6a: 0x146f, 0xb6b: 0x1483, 0xb6c: 0x1487, 0xb6d: 0x1822, 0xb6e: 0x1493, 0xb6f: 0x0693,\n\t0xb70: 0x149b, 0xb71: 0x1827, 0xb72: 0x0697, 0xb73: 0x14d3, 0xb74: 0x0ac3, 0xb75: 0x14eb,\n\t0xb76: 0x182c, 0xb77: 0x1836, 0xb78: 0x069b, 0xb79: 0x069f, 0xb7a: 0x1513, 0xb7b: 0x183b,\n\t0xb7c: 0x06a3, 0xb7d: 0x1840, 0xb7e: 0x152b, 0xb7f: 0x152b,\n\t// Block 0x2e, offset 0xb80\n\t0xb80: 0x1533, 0xb81: 0x1845, 0xb82: 0x154b, 0xb83: 0x06a7, 0xb84: 0x155b, 0xb85: 0x1567,\n\t0xb86: 0x156f, 0xb87: 0x1577, 0xb88: 0x06ab, 0xb89: 0x184a, 0xb8a: 0x158b, 0xb8b: 0x15a7,\n\t0xb8c: 0x15b3, 0xb8d: 0x06af, 0xb8e: 0x06b3, 0xb8f: 0x15b7, 0xb90: 0x184f, 0xb91: 0x06b7,\n\t0xb92: 0x1854, 0xb93: 0x1859, 0xb94: 0x185e, 0xb95: 0x15db, 0xb96: 0x06bb, 0xb97: 0x15ef,\n\t0xb98: 0x15f7, 0xb99: 0x15fb, 0xb9a: 0x1603, 0xb9b: 0x160b, 0xb9c: 0x1613, 0xb9d: 0x1868,\n}\n\n// nfcIndex: 22 blocks, 1408 entries, 1408 bytes\n// Block 0 is the zero block.\nvar nfcIndex = [1408]uint8{\n\t// Block 0x0, offset 0x0\n\t// Block 0x1, offset 0x40\n\t// Block 0x2, offset 0x80\n\t// Block 0x3, offset 0xc0\n\t0xc2: 0x2d, 0xc3: 0x01, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x2e, 0xc7: 0x04,\n\t0xc8: 0x05, 0xca: 0x2f, 0xcb: 0x30, 0xcc: 0x06, 0xcd: 0x07, 0xce: 0x08, 0xcf: 0x31,\n\t0xd0: 0x09, 0xd1: 0x32, 0xd2: 0x33, 0xd3: 0x0a, 0xd6: 0x0b, 0xd7: 0x34,\n\t0xd8: 0x35, 0xd9: 0x0c, 0xdb: 0x36, 0xdc: 0x37, 0xdd: 0x38, 0xdf: 0x39,\n\t0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05,\n\t0xea: 0x06, 0xeb: 0x07, 0xec: 0x08, 0xed: 0x09, 0xef: 0x0a,\n\t0xf0: 0x13,\n\t// Block 0x4, offset 0x100\n\t0x120: 0x3a, 0x121: 0x3b, 0x123: 0x3c, 0x124: 0x3d, 0x125: 0x3e, 0x126: 0x3f, 0x127: 0x40,\n\t0x128: 0x41, 0x129: 0x42, 0x12a: 0x43, 0x12b: 0x44, 0x12c: 0x3f, 0x12d: 0x45, 0x12e: 0x46, 0x12f: 0x47,\n\t0x131: 0x48, 0x132: 0x49, 0x133: 0x4a, 0x134: 0x4b, 0x135: 0x4c, 0x137: 0x4d,\n\t0x138: 0x4e, 0x139: 0x4f, 0x13a: 0x50, 0x13b: 0x51, 0x13c: 0x52, 0x13d: 0x53, 0x13e: 0x54, 0x13f: 0x55,\n\t// Block 0x5, offset 0x140\n\t0x140: 0x56, 0x142: 0x57, 0x144: 0x58, 0x145: 0x59, 0x146: 0x5a, 0x147: 0x5b,\n\t0x14d: 0x5c,\n\t0x15c: 0x5d, 0x15f: 0x5e,\n\t0x162: 0x5f, 0x164: 0x60,\n\t0x168: 0x61, 0x169: 0x62, 0x16a: 0x63, 0x16c: 0x0d, 0x16d: 0x64, 0x16e: 0x65, 0x16f: 0x66,\n\t0x170: 0x67, 0x173: 0x68, 0x177: 0x0e,\n\t0x178: 0x0f, 0x179: 0x10, 0x17a: 0x11, 0x17b: 0x12, 0x17c: 0x13, 0x17d: 0x14, 0x17e: 0x15, 0x17f: 0x16,\n\t// Block 0x6, offset 0x180\n\t0x180: 0x69, 0x183: 0x6a, 0x184: 0x6b, 0x186: 0x6c, 0x187: 0x6d,\n\t0x188: 0x6e, 0x189: 0x17, 0x18a: 0x18, 0x18b: 0x6f, 0x18c: 0x70,\n\t0x1ab: 0x71,\n\t0x1b3: 0x72, 0x1b5: 0x73, 0x1b7: 0x74,\n\t// Block 0x7, offset 0x1c0\n\t0x1c0: 0x75, 0x1c1: 0x19, 0x1c2: 0x1a, 0x1c3: 0x1b, 0x1c4: 0x76, 0x1c5: 0x77,\n\t0x1c9: 0x78, 0x1cc: 0x79, 0x1cd: 0x7a,\n\t// Block 0x8, offset 0x200\n\t0x219: 0x7b, 0x21a: 0x7c, 0x21b: 0x7d,\n\t0x220: 0x7e, 0x223: 0x7f, 0x224: 0x80, 0x225: 0x81, 0x226: 0x82, 0x227: 0x83,\n\t0x22a: 0x84, 0x22b: 0x85, 0x22f: 0x86,\n\t0x230: 0x87, 0x231: 0x88, 0x232: 0x89, 0x233: 0x8a, 0x234: 0x8b, 0x235: 0x8c, 0x236: 0x8d, 0x237: 0x87,\n\t0x238: 0x88, 0x239: 0x89, 0x23a: 0x8a, 0x23b: 0x8b, 0x23c: 0x8c, 0x23d: 0x8d, 0x23e: 0x87, 0x23f: 0x88,\n\t// Block 0x9, offset 0x240\n\t0x240: 0x89, 0x241: 0x8a, 0x242: 0x8b, 0x243: 0x8c, 0x244: 0x8d, 0x245: 0x87, 0x246: 0x88, 0x247: 0x89,\n\t0x248: 0x8a, 0x249: 0x8b, 0x24a: 0x8c, 0x24b: 0x8d, 0x24c: 0x87, 0x24d: 0x88, 0x24e: 0x89, 0x24f: 0x8a,\n\t0x250: 0x8b, 0x251: 0x8c, 0x252: 0x8d, 0x253: 0x87, 0x254: 0x88, 0x255: 0x89, 0x256: 0x8a, 0x257: 0x8b,\n\t0x258: 0x8c, 0x259: 0x8d, 0x25a: 0x87, 0x25b: 0x88, 0x25c: 0x89, 0x25d: 0x8a, 0x25e: 0x8b, 0x25f: 0x8c,\n\t0x260: 0x8d, 0x261: 0x87, 0x262: 0x88, 0x263: 0x89, 0x264: 0x8a, 0x265: 0x8b, 0x266: 0x8c, 0x267: 0x8d,\n\t0x268: 0x87, 0x269: 0x88, 0x26a: 0x89, 0x26b: 0x8a, 0x26c: 0x8b, 0x26d: 0x8c, 0x26e: 0x8d, 0x26f: 0x87,\n\t0x270: 0x88, 0x271: 0x89, 0x272: 0x8a, 0x273: 0x8b, 0x274: 0x8c, 0x275: 0x8d, 0x276: 0x87, 0x277: 0x88,\n\t0x278: 0x89, 0x279: 0x8a, 0x27a: 0x8b, 0x27b: 0x8c, 0x27c: 0x8d, 0x27d: 0x87, 0x27e: 0x88, 0x27f: 0x89,\n\t// Block 0xa, offset 0x280\n\t0x280: 0x8a, 0x281: 0x8b, 0x282: 0x8c, 0x283: 0x8d, 0x284: 0x87, 0x285: 0x88, 0x286: 0x89, 0x287: 0x8a,\n\t0x288: 0x8b, 0x289: 0x8c, 0x28a: 0x8d, 0x28b: 0x87, 0x28c: 0x88, 0x28d: 0x89, 0x28e: 0x8a, 0x28f: 0x8b,\n\t0x290: 0x8c, 0x291: 0x8d, 0x292: 0x87, 0x293: 0x88, 0x294: 0x89, 0x295: 0x8a, 0x296: 0x8b, 0x297: 0x8c,\n\t0x298: 0x8d, 0x299: 0x87, 0x29a: 0x88, 0x29b: 0x89, 0x29c: 0x8a, 0x29d: 0x8b, 0x29e: 0x8c, 0x29f: 0x8d,\n\t0x2a0: 0x87, 0x2a1: 0x88, 0x2a2: 0x89, 0x2a3: 0x8a, 0x2a4: 0x8b, 0x2a5: 0x8c, 0x2a6: 0x8d, 0x2a7: 0x87,\n\t0x2a8: 0x88, 0x2a9: 0x89, 0x2aa: 0x8a, 0x2ab: 0x8b, 0x2ac: 0x8c, 0x2ad: 0x8d, 0x2ae: 0x87, 0x2af: 0x88,\n\t0x2b0: 0x89, 0x2b1: 0x8a, 0x2b2: 0x8b, 0x2b3: 0x8c, 0x2b4: 0x8d, 0x2b5: 0x87, 0x2b6: 0x88, 0x2b7: 0x89,\n\t0x2b8: 0x8a, 0x2b9: 0x8b, 0x2ba: 0x8c, 0x2bb: 0x8d, 0x2bc: 0x87, 0x2bd: 0x88, 0x2be: 0x89, 0x2bf: 0x8a,\n\t// Block 0xb, offset 0x2c0\n\t0x2c0: 0x8b, 0x2c1: 0x8c, 0x2c2: 0x8d, 0x2c3: 0x87, 0x2c4: 0x88, 0x2c5: 0x89, 0x2c6: 0x8a, 0x2c7: 0x8b,\n\t0x2c8: 0x8c, 0x2c9: 0x8d, 0x2ca: 0x87, 0x2cb: 0x88, 0x2cc: 0x89, 0x2cd: 0x8a, 0x2ce: 0x8b, 0x2cf: 0x8c,\n\t0x2d0: 0x8d, 0x2d1: 0x87, 0x2d2: 0x88, 0x2d3: 0x89, 0x2d4: 0x8a, 0x2d5: 0x8b, 0x2d6: 0x8c, 0x2d7: 0x8d,\n\t0x2d8: 0x87, 0x2d9: 0x88, 0x2da: 0x89, 0x2db: 0x8a, 0x2dc: 0x8b, 0x2dd: 0x8c, 0x2de: 0x8e,\n\t// Block 0xc, offset 0x300\n\t0x324: 0x1c, 0x325: 0x1d, 0x326: 0x1e, 0x327: 0x1f,\n\t0x328: 0x20, 0x329: 0x21, 0x32a: 0x22, 0x32b: 0x23, 0x32c: 0x8f, 0x32d: 0x90, 0x32e: 0x91,\n\t0x331: 0x92, 0x332: 0x93, 0x333: 0x94, 0x334: 0x95,\n\t0x338: 0x96, 0x339: 0x97, 0x33a: 0x98, 0x33b: 0x99, 0x33e: 0x9a, 0x33f: 0x9b,\n\t// Block 0xd, offset 0x340\n\t0x347: 0x9c,\n\t0x34b: 0x9d, 0x34d: 0x9e,\n\t0x368: 0x9f, 0x36b: 0xa0,\n\t// Block 0xe, offset 0x380\n\t0x381: 0xa1, 0x382: 0xa2, 0x384: 0xa3, 0x385: 0x82, 0x387: 0xa4,\n\t0x388: 0xa5, 0x38b: 0xa6, 0x38c: 0x3f, 0x38d: 0xa7,\n\t0x391: 0xa8, 0x392: 0xa9, 0x393: 0xaa, 0x396: 0xab, 0x397: 0xac,\n\t0x398: 0x73, 0x39a: 0xad, 0x39c: 0xae,\n\t0x3a8: 0xaf, 0x3a9: 0xb0, 0x3aa: 0xb1,\n\t0x3b0: 0x73, 0x3b5: 0xb2,\n\t// Block 0xf, offset 0x3c0\n\t0x3eb: 0xb3, 0x3ec: 0xb4,\n\t// Block 0x10, offset 0x400\n\t0x432: 0xb5,\n\t// Block 0x11, offset 0x440\n\t0x445: 0xb6, 0x446: 0xb7, 0x447: 0xb8,\n\t0x449: 0xb9,\n\t// Block 0x12, offset 0x480\n\t0x480: 0xba,\n\t0x4a3: 0xbb, 0x4a5: 0xbc,\n\t// Block 0x13, offset 0x4c0\n\t0x4c8: 0xbd,\n\t// Block 0x14, offset 0x500\n\t0x520: 0x24, 0x521: 0x25, 0x522: 0x26, 0x523: 0x27, 0x524: 0x28, 0x525: 0x29, 0x526: 0x2a, 0x527: 0x2b,\n\t0x528: 0x2c,\n\t// Block 0x15, offset 0x540\n\t0x550: 0x0b, 0x551: 0x0c, 0x556: 0x0d,\n\t0x55b: 0x0e, 0x55d: 0x0f, 0x55e: 0x10, 0x55f: 0x11,\n\t0x56f: 0x12,\n}\n\n// nfcSparseOffset: 145 entries, 290 bytes\nvar 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}\n\n// nfcSparseValues: 682 entries, 2728 bytes\nvar nfcSparseValues = [682]valueRange{\n\t// Block 0x0, offset 0x0\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0xa100, lo: 0xa8, hi: 0xa8},\n\t{value: 0x8100, lo: 0xaf, hi: 0xaf},\n\t{value: 0x8100, lo: 0xb4, hi: 0xb4},\n\t{value: 0x8100, lo: 0xb8, hi: 0xb8},\n\t// Block 0x1, offset 0x5\n\t{value: 0x0091, lo: 0x03},\n\t{value: 0x46e2, lo: 0xa0, hi: 0xa1},\n\t{value: 0x4714, lo: 0xaf, hi: 0xb0},\n\t{value: 0xa000, lo: 0xb7, hi: 0xb7},\n\t// Block 0x2, offset 0x9\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0xa000, lo: 0x92, hi: 0x92},\n\t// Block 0x3, offset 0xb\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8100, lo: 0x98, hi: 0x9d},\n\t// Block 0x4, offset 0xd\n\t{value: 0x0006, lo: 0x0a},\n\t{value: 0xa000, lo: 0x81, hi: 0x81},\n\t{value: 0xa000, lo: 0x85, hi: 0x85},\n\t{value: 0xa000, lo: 0x89, hi: 0x89},\n\t{value: 0x4840, lo: 0x8a, hi: 0x8a},\n\t{value: 0x485e, lo: 0x8b, hi: 0x8b},\n\t{value: 0x36c7, lo: 0x8c, hi: 0x8c},\n\t{value: 0x36df, lo: 0x8d, hi: 0x8d},\n\t{value: 0x4876, lo: 0x8e, hi: 0x8e},\n\t{value: 0xa000, lo: 0x92, hi: 0x92},\n\t{value: 0x36fd, lo: 0x93, hi: 0x94},\n\t// Block 0x5, offset 0x18\n\t{value: 0x0000, lo: 0x0f},\n\t{value: 0xa000, lo: 0x83, hi: 0x83},\n\t{value: 0xa000, lo: 0x87, hi: 0x87},\n\t{value: 0xa000, lo: 0x8b, hi: 0x8b},\n\t{value: 0xa000, lo: 0x8d, hi: 0x8d},\n\t{value: 0x37a5, lo: 0x90, hi: 0x90},\n\t{value: 0x37b1, lo: 0x91, hi: 0x91},\n\t{value: 0x379f, lo: 0x93, hi: 0x93},\n\t{value: 0xa000, lo: 0x96, hi: 0x96},\n\t{value: 0x3817, lo: 0x97, hi: 0x97},\n\t{value: 0x37e1, lo: 0x9c, hi: 0x9c},\n\t{value: 0x37c9, lo: 0x9d, hi: 0x9d},\n\t{value: 0x37f3, lo: 0x9e, hi: 0x9e},\n\t{value: 0xa000, lo: 0xb4, hi: 0xb5},\n\t{value: 0x381d, lo: 0xb6, hi: 0xb6},\n\t{value: 0x3823, lo: 0xb7, hi: 0xb7},\n\t// Block 0x6, offset 0x28\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8132, lo: 0x83, hi: 0x87},\n\t// Block 0x7, offset 0x2a\n\t{value: 0x0001, lo: 0x04},\n\t{value: 0x8113, lo: 0x81, hi: 0x82},\n\t{value: 0x8132, lo: 0x84, hi: 0x84},\n\t{value: 0x812d, lo: 0x85, hi: 0x85},\n\t{value: 0x810d, lo: 0x87, hi: 0x87},\n\t// Block 0x8, offset 0x2f\n\t{value: 0x0000, lo: 0x0a},\n\t{value: 0x8132, lo: 0x90, hi: 0x97},\n\t{value: 0x8119, lo: 0x98, hi: 0x98},\n\t{value: 0x811a, lo: 0x99, hi: 0x99},\n\t{value: 0x811b, lo: 0x9a, hi: 0x9a},\n\t{value: 0x3841, lo: 0xa2, hi: 0xa2},\n\t{value: 0x3847, lo: 0xa3, hi: 0xa3},\n\t{value: 0x3853, lo: 0xa4, hi: 0xa4},\n\t{value: 0x384d, lo: 0xa5, hi: 0xa5},\n\t{value: 0x3859, lo: 0xa6, hi: 0xa6},\n\t{value: 0xa000, lo: 0xa7, hi: 0xa7},\n\t// Block 0x9, offset 0x3a\n\t{value: 0x0000, lo: 0x0e},\n\t{value: 0x386b, lo: 0x80, hi: 0x80},\n\t{value: 0xa000, lo: 0x81, hi: 0x81},\n\t{value: 0x385f, lo: 0x82, hi: 0x82},\n\t{value: 0xa000, lo: 0x92, hi: 0x92},\n\t{value: 0x3865, lo: 0x93, hi: 0x93},\n\t{value: 0xa000, lo: 0x95, hi: 0x95},\n\t{value: 0x8132, lo: 0x96, hi: 0x9c},\n\t{value: 0x8132, lo: 0x9f, hi: 0xa2},\n\t{value: 0x812d, lo: 0xa3, hi: 0xa3},\n\t{value: 0x8132, lo: 0xa4, hi: 0xa4},\n\t{value: 0x8132, lo: 0xa7, hi: 0xa8},\n\t{value: 0x812d, lo: 0xaa, hi: 0xaa},\n\t{value: 0x8132, lo: 0xab, hi: 0xac},\n\t{value: 0x812d, lo: 0xad, hi: 0xad},\n\t// Block 0xa, offset 0x49\n\t{value: 0x0000, lo: 0x0c},\n\t{value: 0x811f, lo: 0x91, hi: 0x91},\n\t{value: 0x8132, lo: 0xb0, hi: 0xb0},\n\t{value: 0x812d, lo: 0xb1, hi: 0xb1},\n\t{value: 0x8132, lo: 0xb2, hi: 0xb3},\n\t{value: 0x812d, lo: 0xb4, hi: 0xb4},\n\t{value: 0x8132, lo: 0xb5, hi: 0xb6},\n\t{value: 0x812d, lo: 0xb7, hi: 0xb9},\n\t{value: 0x8132, lo: 0xba, hi: 0xba},\n\t{value: 0x812d, lo: 0xbb, hi: 0xbc},\n\t{value: 0x8132, lo: 0xbd, hi: 0xbd},\n\t{value: 0x812d, lo: 0xbe, hi: 0xbe},\n\t{value: 0x8132, lo: 0xbf, hi: 0xbf},\n\t// Block 0xb, offset 0x56\n\t{value: 0x0005, lo: 0x07},\n\t{value: 0x8132, lo: 0x80, hi: 0x80},\n\t{value: 0x8132, lo: 0x81, hi: 0x81},\n\t{value: 0x812d, lo: 0x82, hi: 0x83},\n\t{value: 0x812d, lo: 0x84, hi: 0x85},\n\t{value: 0x812d, lo: 0x86, hi: 0x87},\n\t{value: 0x812d, lo: 0x88, hi: 0x89},\n\t{value: 0x8132, lo: 0x8a, hi: 0x8a},\n\t// Block 0xc, offset 0x5e\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x8132, lo: 0xab, hi: 0xb1},\n\t{value: 0x812d, lo: 0xb2, hi: 0xb2},\n\t{value: 0x8132, lo: 0xb3, hi: 0xb3},\n\t// Block 0xd, offset 0x62\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x8132, lo: 0x96, hi: 0x99},\n\t{value: 0x8132, lo: 0x9b, hi: 0xa3},\n\t{value: 0x8132, lo: 0xa5, hi: 0xa7},\n\t{value: 0x8132, lo: 0xa9, hi: 0xad},\n\t// Block 0xe, offset 0x67\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x812d, lo: 0x99, hi: 0x9b},\n\t// Block 0xf, offset 0x69\n\t{value: 0x0000, lo: 0x10},\n\t{value: 0x8132, lo: 0x94, hi: 0xa1},\n\t{value: 0x812d, lo: 0xa3, hi: 0xa3},\n\t{value: 0x8132, lo: 0xa4, hi: 0xa5},\n\t{value: 0x812d, lo: 0xa6, hi: 0xa6},\n\t{value: 0x8132, lo: 0xa7, hi: 0xa8},\n\t{value: 0x812d, lo: 0xa9, hi: 0xa9},\n\t{value: 0x8132, lo: 0xaa, hi: 0xac},\n\t{value: 0x812d, lo: 0xad, hi: 0xaf},\n\t{value: 0x8116, lo: 0xb0, hi: 0xb0},\n\t{value: 0x8117, lo: 0xb1, hi: 0xb1},\n\t{value: 0x8118, lo: 0xb2, hi: 0xb2},\n\t{value: 0x8132, lo: 0xb3, hi: 0xb5},\n\t{value: 0x812d, lo: 0xb6, hi: 0xb6},\n\t{value: 0x8132, lo: 0xb7, hi: 0xb8},\n\t{value: 0x812d, lo: 0xb9, hi: 0xba},\n\t{value: 0x8132, lo: 0xbb, hi: 0xbf},\n\t// Block 0x10, offset 0x7a\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0xa000, lo: 0xa8, hi: 0xa8},\n\t{value: 0x3ed8, lo: 0xa9, hi: 0xa9},\n\t{value: 0xa000, lo: 0xb0, hi: 0xb0},\n\t{value: 0x3ee0, lo: 0xb1, hi: 0xb1},\n\t{value: 0xa000, lo: 0xb3, hi: 0xb3},\n\t{value: 0x3ee8, lo: 0xb4, hi: 0xb4},\n\t{value: 0x9902, lo: 0xbc, hi: 0xbc},\n\t// Block 0x11, offset 0x82\n\t{value: 0x0008, lo: 0x06},\n\t{value: 0x8104, lo: 0x8d, hi: 0x8d},\n\t{value: 0x8132, lo: 0x91, hi: 0x91},\n\t{value: 0x812d, lo: 0x92, hi: 0x92},\n\t{value: 0x8132, lo: 0x93, hi: 0x93},\n\t{value: 0x8132, lo: 0x94, hi: 0x94},\n\t{value: 0x451c, lo: 0x98, hi: 0x9f},\n\t// Block 0x12, offset 0x89\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8102, lo: 0xbc, hi: 0xbc},\n\t{value: 0x9900, lo: 0xbe, hi: 0xbe},\n\t// Block 0x13, offset 0x8c\n\t{value: 0x0008, lo: 0x06},\n\t{value: 0xa000, lo: 0x87, hi: 0x87},\n\t{value: 0x2c9e, lo: 0x8b, hi: 0x8c},\n\t{value: 0x8104, lo: 0x8d, hi: 0x8d},\n\t{value: 0x9900, lo: 0x97, hi: 0x97},\n\t{value: 0x455c, lo: 0x9c, hi: 0x9d},\n\t{value: 0x456c, lo: 0x9f, hi: 0x9f},\n\t// Block 0x14, offset 0x93\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x4594, lo: 0xb3, hi: 0xb3},\n\t{value: 0x459c, lo: 0xb6, hi: 0xb6},\n\t{value: 0x8102, lo: 0xbc, hi: 0xbc},\n\t// Block 0x15, offset 0x97\n\t{value: 0x0008, lo: 0x03},\n\t{value: 0x8104, lo: 0x8d, hi: 0x8d},\n\t{value: 0x4574, lo: 0x99, hi: 0x9b},\n\t{value: 0x458c, lo: 0x9e, hi: 0x9e},\n\t// Block 0x16, offset 0x9b\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8102, lo: 0xbc, hi: 0xbc},\n\t// Block 0x17, offset 0x9d\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0x8d, hi: 0x8d},\n\t// Block 0x18, offset 0x9f\n\t{value: 0x0000, lo: 0x08},\n\t{value: 0xa000, lo: 0x87, hi: 0x87},\n\t{value: 0x2cb6, lo: 0x88, hi: 0x88},\n\t{value: 0x2cae, lo: 0x8b, hi: 0x8b},\n\t{value: 0x2cbe, lo: 0x8c, hi: 0x8c},\n\t{value: 0x8104, lo: 0x8d, hi: 0x8d},\n\t{value: 0x9900, lo: 0x96, hi: 0x97},\n\t{value: 0x45a4, lo: 0x9c, hi: 0x9c},\n\t{value: 0x45ac, lo: 0x9d, hi: 0x9d},\n\t// Block 0x19, offset 0xa8\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0xa000, lo: 0x92, hi: 0x92},\n\t{value: 0x2cc6, lo: 0x94, hi: 0x94},\n\t{value: 0x9900, lo: 0xbe, hi: 0xbe},\n\t// Block 0x1a, offset 0xac\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0xa000, lo: 0x86, hi: 0x87},\n\t{value: 0x2cce, lo: 0x8a, hi: 0x8a},\n\t{value: 0x2cde, lo: 0x8b, hi: 0x8b},\n\t{value: 0x2cd6, lo: 0x8c, hi: 0x8c},\n\t{value: 0x8104, lo: 0x8d, hi: 0x8d},\n\t{value: 0x9900, lo: 0x97, hi: 0x97},\n\t// Block 0x1b, offset 0xb3\n\t{value: 0x1801, lo: 0x04},\n\t{value: 0xa000, lo: 0x86, hi: 0x86},\n\t{value: 0x3ef0, lo: 0x88, hi: 0x88},\n\t{value: 0x8104, lo: 0x8d, hi: 0x8d},\n\t{value: 0x8120, lo: 0x95, hi: 0x96},\n\t// Block 0x1c, offset 0xb8\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8102, lo: 0xbc, hi: 0xbc},\n\t{value: 0xa000, lo: 0xbf, hi: 0xbf},\n\t// Block 0x1d, offset 0xbb\n\t{value: 0x0000, lo: 0x09},\n\t{value: 0x2ce6, lo: 0x80, hi: 0x80},\n\t{value: 0x9900, lo: 0x82, hi: 0x82},\n\t{value: 0xa000, lo: 0x86, hi: 0x86},\n\t{value: 0x2cee, lo: 0x87, hi: 0x87},\n\t{value: 0x2cf6, lo: 0x88, hi: 0x88},\n\t{value: 0x2f50, lo: 0x8a, hi: 0x8a},\n\t{value: 0x2dd8, lo: 0x8b, hi: 0x8b},\n\t{value: 0x8104, lo: 0x8d, hi: 0x8d},\n\t{value: 0x9900, lo: 0x95, hi: 0x96},\n\t// Block 0x1e, offset 0xc5\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8104, lo: 0xbb, hi: 0xbc},\n\t{value: 0x9900, lo: 0xbe, hi: 0xbe},\n\t// Block 0x1f, offset 0xc8\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0xa000, lo: 0x86, hi: 0x87},\n\t{value: 0x2cfe, lo: 0x8a, hi: 0x8a},\n\t{value: 0x2d0e, lo: 0x8b, hi: 0x8b},\n\t{value: 0x2d06, lo: 0x8c, hi: 0x8c},\n\t{value: 0x8104, lo: 0x8d, hi: 0x8d},\n\t{value: 0x9900, lo: 0x97, hi: 0x97},\n\t// Block 0x20, offset 0xcf\n\t{value: 0x6bea, lo: 0x07},\n\t{value: 0x9904, lo: 0x8a, hi: 0x8a},\n\t{value: 0x9900, lo: 0x8f, hi: 0x8f},\n\t{value: 0xa000, lo: 0x99, hi: 0x99},\n\t{value: 0x3ef8, lo: 0x9a, hi: 0x9a},\n\t{value: 0x2f58, lo: 0x9c, hi: 0x9c},\n\t{value: 0x2de3, lo: 0x9d, hi: 0x9d},\n\t{value: 0x2d16, lo: 0x9e, hi: 0x9f},\n\t// Block 0x21, offset 0xd7\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8122, lo: 0xb8, hi: 0xb9},\n\t{value: 0x8104, lo: 0xba, hi: 0xba},\n\t// Block 0x22, offset 0xda\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8123, lo: 0x88, hi: 0x8b},\n\t// Block 0x23, offset 0xdc\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8124, lo: 0xb8, hi: 0xb9},\n\t// Block 0x24, offset 0xde\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8125, lo: 0x88, hi: 0x8b},\n\t// Block 0x25, offset 0xe0\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x812d, lo: 0x98, hi: 0x99},\n\t{value: 0x812d, lo: 0xb5, hi: 0xb5},\n\t{value: 0x812d, lo: 0xb7, hi: 0xb7},\n\t{value: 0x812b, lo: 0xb9, hi: 0xb9},\n\t// Block 0x26, offset 0xe5\n\t{value: 0x0000, lo: 0x10},\n\t{value: 0x2644, lo: 0x83, hi: 0x83},\n\t{value: 0x264b, lo: 0x8d, hi: 0x8d},\n\t{value: 0x2652, lo: 0x92, hi: 0x92},\n\t{value: 0x2659, lo: 0x97, hi: 0x97},\n\t{value: 0x2660, lo: 0x9c, hi: 0x9c},\n\t{value: 0x263d, lo: 0xa9, hi: 0xa9},\n\t{value: 0x8126, lo: 0xb1, hi: 0xb1},\n\t{value: 0x8127, lo: 0xb2, hi: 0xb2},\n\t{value: 0x4a84, lo: 0xb3, hi: 0xb3},\n\t{value: 0x8128, lo: 0xb4, hi: 0xb4},\n\t{value: 0x4a8d, lo: 0xb5, hi: 0xb5},\n\t{value: 0x45b4, lo: 0xb6, hi: 0xb6},\n\t{value: 0x8200, lo: 0xb7, hi: 0xb7},\n\t{value: 0x45bc, lo: 0xb8, hi: 0xb8},\n\t{value: 0x8200, lo: 0xb9, hi: 0xb9},\n\t{value: 0x8127, lo: 0xba, hi: 0xbd},\n\t// Block 0x27, offset 0xf6\n\t{value: 0x0000, lo: 0x0b},\n\t{value: 0x8127, lo: 0x80, hi: 0x80},\n\t{value: 0x4a96, lo: 0x81, hi: 0x81},\n\t{value: 0x8132, lo: 0x82, hi: 0x83},\n\t{value: 0x8104, lo: 0x84, hi: 0x84},\n\t{value: 0x8132, lo: 0x86, hi: 0x87},\n\t{value: 0x266e, lo: 0x93, hi: 0x93},\n\t{value: 0x2675, lo: 0x9d, hi: 0x9d},\n\t{value: 0x267c, lo: 0xa2, hi: 0xa2},\n\t{value: 0x2683, lo: 0xa7, hi: 0xa7},\n\t{value: 0x268a, lo: 0xac, hi: 0xac},\n\t{value: 0x2667, lo: 0xb9, hi: 0xb9},\n\t// Block 0x28, offset 0x102\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x812d, lo: 0x86, hi: 0x86},\n\t// Block 0x29, offset 0x104\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0xa000, lo: 0xa5, hi: 0xa5},\n\t{value: 0x2d1e, lo: 0xa6, hi: 0xa6},\n\t{value: 0x9900, lo: 0xae, hi: 0xae},\n\t{value: 0x8102, lo: 0xb7, hi: 0xb7},\n\t{value: 0x8104, lo: 0xb9, hi: 0xba},\n\t// Block 0x2a, offset 0x10a\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x812d, lo: 0x8d, hi: 0x8d},\n\t// Block 0x2b, offset 0x10c\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0xa000, lo: 0x80, hi: 0x92},\n\t// Block 0x2c, offset 0x10e\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0xb900, lo: 0xa1, hi: 0xb5},\n\t// Block 0x2d, offset 0x110\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x9900, lo: 0xa8, hi: 0xbf},\n\t// Block 0x2e, offset 0x112\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x9900, lo: 0x80, hi: 0x82},\n\t// Block 0x2f, offset 0x114\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8132, lo: 0x9d, hi: 0x9f},\n\t// Block 0x30, offset 0x116\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8104, lo: 0x94, hi: 0x94},\n\t{value: 0x8104, lo: 0xb4, hi: 0xb4},\n\t// Block 0x31, offset 0x119\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8104, lo: 0x92, hi: 0x92},\n\t{value: 0x8132, lo: 0x9d, hi: 0x9d},\n\t// Block 0x32, offset 0x11c\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8131, lo: 0xa9, hi: 0xa9},\n\t// Block 0x33, offset 0x11e\n\t{value: 0x0004, lo: 0x02},\n\t{value: 0x812e, lo: 0xb9, hi: 0xba},\n\t{value: 0x812d, lo: 0xbb, hi: 0xbb},\n\t// Block 0x34, offset 0x121\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8132, lo: 0x97, hi: 0x97},\n\t{value: 0x812d, lo: 0x98, hi: 0x98},\n\t// Block 0x35, offset 0x124\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x8104, lo: 0xa0, hi: 0xa0},\n\t{value: 0x8132, lo: 0xb5, hi: 0xbc},\n\t{value: 0x812d, lo: 0xbf, hi: 0xbf},\n\t// Block 0x36, offset 0x128\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x8132, lo: 0xb0, hi: 0xb4},\n\t{value: 0x812d, lo: 0xb5, hi: 0xba},\n\t{value: 0x8132, lo: 0xbb, hi: 0xbc},\n\t{value: 0x812d, lo: 0xbd, hi: 0xbd},\n\t// Block 0x37, offset 0x12d\n\t{value: 0x0000, lo: 0x08},\n\t{value: 0x2d66, lo: 0x80, hi: 0x80},\n\t{value: 0x2d6e, lo: 0x81, hi: 0x81},\n\t{value: 0xa000, lo: 0x82, hi: 0x82},\n\t{value: 0x2d76, lo: 0x83, hi: 0x83},\n\t{value: 0x8104, lo: 0x84, hi: 0x84},\n\t{value: 0x8132, lo: 0xab, hi: 0xab},\n\t{value: 0x812d, lo: 0xac, hi: 0xac},\n\t{value: 0x8132, lo: 0xad, hi: 0xb3},\n\t// Block 0x38, offset 0x136\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0xaa, hi: 0xab},\n\t// Block 0x39, offset 0x138\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8102, lo: 0xa6, hi: 0xa6},\n\t{value: 0x8104, lo: 0xb2, hi: 0xb3},\n\t// Block 0x3a, offset 0x13b\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8102, lo: 0xb7, hi: 0xb7},\n\t// Block 0x3b, offset 0x13d\n\t{value: 0x0000, lo: 0x0a},\n\t{value: 0x8132, lo: 0x90, hi: 0x92},\n\t{value: 0x8101, lo: 0x94, hi: 0x94},\n\t{value: 0x812d, lo: 0x95, hi: 0x99},\n\t{value: 0x8132, lo: 0x9a, hi: 0x9b},\n\t{value: 0x812d, lo: 0x9c, hi: 0x9f},\n\t{value: 0x8132, lo: 0xa0, hi: 0xa0},\n\t{value: 0x8101, lo: 0xa2, hi: 0xa8},\n\t{value: 0x812d, lo: 0xad, hi: 0xad},\n\t{value: 0x8132, lo: 0xb4, hi: 0xb4},\n\t{value: 0x8132, lo: 0xb8, hi: 0xb9},\n\t// Block 0x3c, offset 0x148\n\t{value: 0x0004, lo: 0x03},\n\t{value: 0x0433, lo: 0x80, hi: 0x81},\n\t{value: 0x8100, lo: 0x97, hi: 0x97},\n\t{value: 0x8100, lo: 0xbe, hi: 0xbe},\n\t// Block 0x3d, offset 0x14c\n\t{value: 0x0000, lo: 0x0d},\n\t{value: 0x8132, lo: 0x90, hi: 0x91},\n\t{value: 0x8101, lo: 0x92, hi: 0x93},\n\t{value: 0x8132, lo: 0x94, hi: 0x97},\n\t{value: 0x8101, lo: 0x98, hi: 0x9a},\n\t{value: 0x8132, lo: 0x9b, hi: 0x9c},\n\t{value: 0x8132, lo: 0xa1, hi: 0xa1},\n\t{value: 0x8101, lo: 0xa5, hi: 0xa6},\n\t{value: 0x8132, lo: 0xa7, hi: 0xa7},\n\t{value: 0x812d, lo: 0xa8, hi: 0xa8},\n\t{value: 0x8132, lo: 0xa9, hi: 0xa9},\n\t{value: 0x8101, lo: 0xaa, hi: 0xab},\n\t{value: 0x812d, lo: 0xac, hi: 0xaf},\n\t{value: 0x8132, lo: 0xb0, hi: 0xb0},\n\t// Block 0x3e, offset 0x15a\n\t{value: 0x427b, lo: 0x02},\n\t{value: 0x01b8, lo: 0xa6, hi: 0xa6},\n\t{value: 0x0057, lo: 0xaa, hi: 0xab},\n\t// Block 0x3f, offset 0x15d\n\t{value: 0x0007, lo: 0x05},\n\t{value: 0xa000, lo: 0x90, hi: 0x90},\n\t{value: 0xa000, lo: 0x92, hi: 0x92},\n\t{value: 0xa000, lo: 0x94, hi: 0x94},\n\t{value: 0x3bb9, lo: 0x9a, hi: 0x9b},\n\t{value: 0x3bc7, lo: 0xae, hi: 0xae},\n\t// Block 0x40, offset 0x163\n\t{value: 0x000e, lo: 0x05},\n\t{value: 0x3bce, lo: 0x8d, hi: 0x8e},\n\t{value: 0x3bd5, lo: 0x8f, hi: 0x8f},\n\t{value: 0xa000, lo: 0x90, hi: 0x90},\n\t{value: 0xa000, lo: 0x92, hi: 0x92},\n\t{value: 0xa000, lo: 0x94, hi: 0x94},\n\t// Block 0x41, offset 0x169\n\t{value: 0x6408, lo: 0x0a},\n\t{value: 0xa000, lo: 0x83, hi: 0x83},\n\t{value: 0x3be3, lo: 0x84, hi: 0x84},\n\t{value: 0xa000, lo: 0x88, hi: 0x88},\n\t{value: 0x3bea, lo: 0x89, hi: 0x89},\n\t{value: 0xa000, lo: 0x8b, hi: 0x8b},\n\t{value: 0x3bf1, lo: 0x8c, hi: 0x8c},\n\t{value: 0xa000, lo: 0xa3, hi: 0xa3},\n\t{value: 0x3bf8, lo: 0xa4, hi: 0xa5},\n\t{value: 0x3bff, lo: 0xa6, hi: 0xa6},\n\t{value: 0xa000, lo: 0xbc, hi: 0xbc},\n\t// Block 0x42, offset 0x174\n\t{value: 0x0007, lo: 0x03},\n\t{value: 0x3c68, lo: 0xa0, hi: 0xa1},\n\t{value: 0x3c92, lo: 0xa2, hi: 0xa3},\n\t{value: 0x3cbc, lo: 0xaa, hi: 0xad},\n\t// Block 0x43, offset 0x178\n\t{value: 0x0004, lo: 0x01},\n\t{value: 0x048b, lo: 0xa9, hi: 0xaa},\n\t// Block 0x44, offset 0x17a\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x44dd, lo: 0x9c, hi: 0x9c},\n\t// Block 0x45, offset 0x17c\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8132, lo: 0xaf, hi: 0xb1},\n\t// Block 0x46, offset 0x17e\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0xbf, hi: 0xbf},\n\t// Block 0x47, offset 0x180\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8132, lo: 0xa0, hi: 0xbf},\n\t// Block 0x48, offset 0x182\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x812c, lo: 0xaa, hi: 0xaa},\n\t{value: 0x8131, lo: 0xab, hi: 0xab},\n\t{value: 0x8133, lo: 0xac, hi: 0xac},\n\t{value: 0x812e, lo: 0xad, hi: 0xad},\n\t{value: 0x812f, lo: 0xae, hi: 0xaf},\n\t// Block 0x49, offset 0x188\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x4a9f, lo: 0xb3, hi: 0xb3},\n\t{value: 0x4a9f, lo: 0xb5, hi: 0xb6},\n\t{value: 0x4a9f, lo: 0xba, hi: 0xbf},\n\t// Block 0x4a, offset 0x18c\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x4a9f, lo: 0x8f, hi: 0xa3},\n\t// Block 0x4b, offset 0x18e\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8100, lo: 0xae, hi: 0xbe},\n\t// Block 0x4c, offset 0x190\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0x8100, lo: 0x84, hi: 0x84},\n\t{value: 0x8100, lo: 0x87, hi: 0x87},\n\t{value: 0x8100, lo: 0x90, hi: 0x90},\n\t{value: 0x8100, lo: 0x9e, hi: 0x9e},\n\t{value: 0x8100, lo: 0xa1, hi: 0xa1},\n\t{value: 0x8100, lo: 0xb2, hi: 0xb2},\n\t{value: 0x8100, lo: 0xbb, hi: 0xbb},\n\t// Block 0x4d, offset 0x198\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x8100, lo: 0x80, hi: 0x80},\n\t{value: 0x8100, lo: 0x8b, hi: 0x8b},\n\t{value: 0x8100, lo: 0x8e, hi: 0x8e},\n\t// Block 0x4e, offset 0x19c\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8132, lo: 0xaf, hi: 0xaf},\n\t{value: 0x8132, lo: 0xb4, hi: 0xbd},\n\t// Block 0x4f, offset 0x19f\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8132, lo: 0x9e, hi: 0x9f},\n\t// Block 0x50, offset 0x1a1\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8132, lo: 0xb0, hi: 0xb1},\n\t// Block 0x51, offset 0x1a3\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0x86, hi: 0x86},\n\t// Block 0x52, offset 0x1a5\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8104, lo: 0x84, hi: 0x84},\n\t{value: 0x8132, lo: 0xa0, hi: 0xb1},\n\t// Block 0x53, offset 0x1a8\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x812d, lo: 0xab, hi: 0xad},\n\t// Block 0x54, offset 0x1aa\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0x93, hi: 0x93},\n\t// Block 0x55, offset 0x1ac\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8102, lo: 0xb3, hi: 0xb3},\n\t// Block 0x56, offset 0x1ae\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0x80, hi: 0x80},\n\t// Block 0x57, offset 0x1b0\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x8132, lo: 0xb0, hi: 0xb0},\n\t{value: 0x8132, lo: 0xb2, hi: 0xb3},\n\t{value: 0x812d, lo: 0xb4, hi: 0xb4},\n\t{value: 0x8132, lo: 0xb7, hi: 0xb8},\n\t{value: 0x8132, lo: 0xbe, hi: 0xbf},\n\t// Block 0x58, offset 0x1b6\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8132, lo: 0x81, hi: 0x81},\n\t{value: 0x8104, lo: 0xb6, hi: 0xb6},\n\t// Block 0x59, offset 0x1b9\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0xad, hi: 0xad},\n\t// Block 0x5a, offset 0x1bb\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0xe500, lo: 0x80, hi: 0x80},\n\t{value: 0xc600, lo: 0x81, hi: 0x9b},\n\t{value: 0xe500, lo: 0x9c, hi: 0x9c},\n\t{value: 0xc600, lo: 0x9d, hi: 0xb7},\n\t{value: 0xe500, lo: 0xb8, hi: 0xb8},\n\t{value: 0xc600, lo: 0xb9, hi: 0xbf},\n\t// Block 0x5b, offset 0x1c2\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0xc600, lo: 0x80, hi: 0x93},\n\t{value: 0xe500, lo: 0x94, hi: 0x94},\n\t{value: 0xc600, lo: 0x95, hi: 0xaf},\n\t{value: 0xe500, lo: 0xb0, hi: 0xb0},\n\t{value: 0xc600, lo: 0xb1, hi: 0xbf},\n\t// Block 0x5c, offset 0x1c8\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0xc600, lo: 0x80, hi: 0x8b},\n\t{value: 0xe500, lo: 0x8c, hi: 0x8c},\n\t{value: 0xc600, lo: 0x8d, hi: 0xa7},\n\t{value: 0xe500, lo: 0xa8, hi: 0xa8},\n\t{value: 0xc600, lo: 0xa9, hi: 0xbf},\n\t// Block 0x5d, offset 0x1ce\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0xc600, lo: 0x80, hi: 0x83},\n\t{value: 0xe500, lo: 0x84, hi: 0x84},\n\t{value: 0xc600, lo: 0x85, hi: 0x9f},\n\t{value: 0xe500, lo: 0xa0, hi: 0xa0},\n\t{value: 0xc600, lo: 0xa1, hi: 0xbb},\n\t{value: 0xe500, lo: 0xbc, hi: 0xbc},\n\t{value: 0xc600, lo: 0xbd, hi: 0xbf},\n\t// Block 0x5e, offset 0x1d6\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0xc600, lo: 0x80, hi: 0x97},\n\t{value: 0xe500, lo: 0x98, hi: 0x98},\n\t{value: 0xc600, lo: 0x99, hi: 0xb3},\n\t{value: 0xe500, lo: 0xb4, hi: 0xb4},\n\t{value: 0xc600, lo: 0xb5, hi: 0xbf},\n\t// Block 0x5f, offset 0x1dc\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0xc600, lo: 0x80, hi: 0x8f},\n\t{value: 0xe500, lo: 0x90, hi: 0x90},\n\t{value: 0xc600, lo: 0x91, hi: 0xab},\n\t{value: 0xe500, lo: 0xac, hi: 0xac},\n\t{value: 0xc600, lo: 0xad, hi: 0xbf},\n\t// Block 0x60, offset 0x1e2\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0xc600, lo: 0x80, hi: 0x87},\n\t{value: 0xe500, lo: 0x88, hi: 0x88},\n\t{value: 0xc600, lo: 0x89, hi: 0xa3},\n\t{value: 0xe500, lo: 0xa4, hi: 0xa4},\n\t{value: 0xc600, lo: 0xa5, hi: 0xbf},\n\t// Block 0x61, offset 0x1e8\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0xc600, lo: 0x80, hi: 0x87},\n\t{value: 0xe500, lo: 0x88, hi: 0x88},\n\t{value: 0xc600, lo: 0x89, hi: 0xa3},\n\t// Block 0x62, offset 0x1ec\n\t{value: 0x0006, lo: 0x0d},\n\t{value: 0x4390, lo: 0x9d, hi: 0x9d},\n\t{value: 0x8115, lo: 0x9e, hi: 0x9e},\n\t{value: 0x4402, lo: 0x9f, hi: 0x9f},\n\t{value: 0x43f0, lo: 0xaa, hi: 0xab},\n\t{value: 0x44f4, lo: 0xac, hi: 0xac},\n\t{value: 0x44fc, lo: 0xad, hi: 0xad},\n\t{value: 0x4348, lo: 0xae, hi: 0xb1},\n\t{value: 0x4366, lo: 0xb2, hi: 0xb4},\n\t{value: 0x437e, lo: 0xb5, hi: 0xb6},\n\t{value: 0x438a, lo: 0xb8, hi: 0xb8},\n\t{value: 0x4396, lo: 0xb9, hi: 0xbb},\n\t{value: 0x43ae, lo: 0xbc, hi: 0xbc},\n\t{value: 0x43b4, lo: 0xbe, hi: 0xbe},\n\t// Block 0x63, offset 0x1fa\n\t{value: 0x0006, lo: 0x08},\n\t{value: 0x43ba, lo: 0x80, hi: 0x81},\n\t{value: 0x43c6, lo: 0x83, hi: 0x84},\n\t{value: 0x43d8, lo: 0x86, hi: 0x89},\n\t{value: 0x43fc, lo: 0x8a, hi: 0x8a},\n\t{value: 0x4378, lo: 0x8b, hi: 0x8b},\n\t{value: 0x4360, lo: 0x8c, hi: 0x8c},\n\t{value: 0x43a8, lo: 0x8d, hi: 0x8d},\n\t{value: 0x43d2, lo: 0x8e, hi: 0x8e},\n\t// Block 0x64, offset 0x203\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8100, lo: 0xa4, hi: 0xa5},\n\t{value: 0x8100, lo: 0xb0, hi: 0xb1},\n\t// Block 0x65, offset 0x206\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8100, lo: 0x9b, hi: 0x9d},\n\t{value: 0x8200, lo: 0x9e, hi: 0xa3},\n\t// Block 0x66, offset 0x209\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8100, lo: 0x90, hi: 0x90},\n\t// Block 0x67, offset 0x20b\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8100, lo: 0x99, hi: 0x99},\n\t{value: 0x8200, lo: 0xb2, hi: 0xb4},\n\t// Block 0x68, offset 0x20e\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8100, lo: 0xbc, hi: 0xbd},\n\t// Block 0x69, offset 0x210\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x8132, lo: 0xa0, hi: 0xa6},\n\t{value: 0x812d, lo: 0xa7, hi: 0xad},\n\t{value: 0x8132, lo: 0xae, hi: 0xaf},\n\t// Block 0x6a, offset 0x214\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x8100, lo: 0x89, hi: 0x8c},\n\t{value: 0x8100, lo: 0xb0, hi: 0xb2},\n\t{value: 0x8100, lo: 0xb4, hi: 0xb4},\n\t{value: 0x8100, lo: 0xb6, hi: 0xbf},\n\t// Block 0x6b, offset 0x219\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8100, lo: 0x81, hi: 0x8c},\n\t// Block 0x6c, offset 0x21b\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8100, lo: 0xb5, hi: 0xba},\n\t// Block 0x6d, offset 0x21d\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x4a9f, lo: 0x9e, hi: 0x9f},\n\t{value: 0x4a9f, lo: 0xa3, hi: 0xa3},\n\t{value: 0x4a9f, lo: 0xa5, hi: 0xa6},\n\t{value: 0x4a9f, lo: 0xaa, hi: 0xaf},\n\t// Block 0x6e, offset 0x222\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x4a9f, lo: 0x82, hi: 0x87},\n\t{value: 0x4a9f, lo: 0x8a, hi: 0x8f},\n\t{value: 0x4a9f, lo: 0x92, hi: 0x97},\n\t{value: 0x4a9f, lo: 0x9a, hi: 0x9c},\n\t{value: 0x8100, lo: 0xa3, hi: 0xa3},\n\t// Block 0x6f, offset 0x228\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x812d, lo: 0xbd, hi: 0xbd},\n\t// Block 0x70, offset 0x22a\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x812d, lo: 0xa0, hi: 0xa0},\n\t// Block 0x71, offset 0x22c\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8132, lo: 0xb6, hi: 0xba},\n\t// Block 0x72, offset 0x22e\n\t{value: 0x002c, lo: 0x05},\n\t{value: 0x812d, lo: 0x8d, hi: 0x8d},\n\t{value: 0x8132, lo: 0x8f, hi: 0x8f},\n\t{value: 0x8132, lo: 0xb8, hi: 0xb8},\n\t{value: 0x8101, lo: 0xb9, hi: 0xba},\n\t{value: 0x8104, lo: 0xbf, hi: 0xbf},\n\t// Block 0x73, offset 0x234\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8132, lo: 0xa5, hi: 0xa5},\n\t{value: 0x812d, lo: 0xa6, hi: 0xa6},\n\t// Block 0x74, offset 0x237\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8104, lo: 0x86, hi: 0x86},\n\t{value: 0x8104, lo: 0xbf, hi: 0xbf},\n\t// Block 0x75, offset 0x23a\n\t{value: 0x17fe, lo: 0x07},\n\t{value: 0xa000, lo: 0x99, hi: 0x99},\n\t{value: 0x4238, lo: 0x9a, hi: 0x9a},\n\t{value: 0xa000, lo: 0x9b, hi: 0x9b},\n\t{value: 0x4242, lo: 0x9c, hi: 0x9c},\n\t{value: 0xa000, lo: 0xa5, hi: 0xa5},\n\t{value: 0x424c, lo: 0xab, hi: 0xab},\n\t{value: 0x8104, lo: 0xb9, hi: 0xba},\n\t// Block 0x76, offset 0x242\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0x8132, lo: 0x80, hi: 0x82},\n\t{value: 0x9900, lo: 0xa7, hi: 0xa7},\n\t{value: 0x2d7e, lo: 0xae, hi: 0xae},\n\t{value: 0x2d88, lo: 0xaf, hi: 0xaf},\n\t{value: 0xa000, lo: 0xb1, hi: 0xb2},\n\t{value: 0x8104, lo: 0xb3, hi: 0xb4},\n\t// Block 0x77, offset 0x249\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8104, lo: 0x80, hi: 0x80},\n\t{value: 0x8102, lo: 0x8a, hi: 0x8a},\n\t// Block 0x78, offset 0x24c\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8104, lo: 0xb5, hi: 0xb5},\n\t{value: 0x8102, lo: 0xb6, hi: 0xb6},\n\t// Block 0x79, offset 0x24f\n\t{value: 0x0002, lo: 0x01},\n\t{value: 0x8102, lo: 0xa9, hi: 0xaa},\n\t// Block 0x7a, offset 0x251\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0xa000, lo: 0x87, hi: 0x87},\n\t{value: 0x2d92, lo: 0x8b, hi: 0x8b},\n\t{value: 0x2d9c, lo: 0x8c, hi: 0x8c},\n\t{value: 0x8104, lo: 0x8d, hi: 0x8d},\n\t{value: 0x9900, lo: 0x97, hi: 0x97},\n\t{value: 0x8132, lo: 0xa6, hi: 0xac},\n\t{value: 0x8132, lo: 0xb0, hi: 0xb4},\n\t// Block 0x7b, offset 0x259\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8104, lo: 0x82, hi: 0x82},\n\t{value: 0x8102, lo: 0x86, hi: 0x86},\n\t// Block 0x7c, offset 0x25c\n\t{value: 0x6b5a, lo: 0x06},\n\t{value: 0x9900, lo: 0xb0, hi: 0xb0},\n\t{value: 0xa000, lo: 0xb9, hi: 0xb9},\n\t{value: 0x9900, lo: 0xba, hi: 0xba},\n\t{value: 0x2db0, lo: 0xbb, hi: 0xbb},\n\t{value: 0x2da6, lo: 0xbc, hi: 0xbd},\n\t{value: 0x2dba, lo: 0xbe, hi: 0xbe},\n\t// Block 0x7d, offset 0x263\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8104, lo: 0x82, hi: 0x82},\n\t{value: 0x8102, lo: 0x83, hi: 0x83},\n\t// Block 0x7e, offset 0x266\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x9900, lo: 0xaf, hi: 0xaf},\n\t{value: 0xa000, lo: 0xb8, hi: 0xb9},\n\t{value: 0x2dc4, lo: 0xba, hi: 0xba},\n\t{value: 0x2dce, lo: 0xbb, hi: 0xbb},\n\t{value: 0x8104, lo: 0xbf, hi: 0xbf},\n\t// Block 0x7f, offset 0x26c\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8102, lo: 0x80, hi: 0x80},\n\t// Block 0x80, offset 0x26e\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8104, lo: 0xb6, hi: 0xb6},\n\t{value: 0x8102, lo: 0xb7, hi: 0xb7},\n\t// Block 0x81, offset 0x271\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0xab, hi: 0xab},\n\t// Block 0x82, offset 0x273\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0xb4, hi: 0xb4},\n\t// Block 0x83, offset 0x275\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0x87, hi: 0x87},\n\t// Block 0x84, offset 0x277\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0x99, hi: 0x99},\n\t// Block 0x85, offset 0x279\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8102, lo: 0x82, hi: 0x82},\n\t{value: 0x8104, lo: 0x84, hi: 0x85},\n\t// Block 0x86, offset 0x27c\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8101, lo: 0xb0, hi: 0xb4},\n\t// Block 0x87, offset 0x27e\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8132, lo: 0xb0, hi: 0xb6},\n\t// Block 0x88, offset 0x280\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8101, lo: 0x9e, hi: 0x9e},\n\t// Block 0x89, offset 0x282\n\t{value: 0x0000, lo: 0x0c},\n\t{value: 0x45cc, lo: 0x9e, hi: 0x9e},\n\t{value: 0x45d6, lo: 0x9f, hi: 0x9f},\n\t{value: 0x460a, lo: 0xa0, hi: 0xa0},\n\t{value: 0x4618, lo: 0xa1, hi: 0xa1},\n\t{value: 0x4626, lo: 0xa2, hi: 0xa2},\n\t{value: 0x4634, lo: 0xa3, hi: 0xa3},\n\t{value: 0x4642, lo: 0xa4, hi: 0xa4},\n\t{value: 0x812b, lo: 0xa5, hi: 0xa6},\n\t{value: 0x8101, lo: 0xa7, hi: 0xa9},\n\t{value: 0x8130, lo: 0xad, hi: 0xad},\n\t{value: 0x812b, lo: 0xae, hi: 0xb2},\n\t{value: 0x812d, lo: 0xbb, hi: 0xbf},\n\t// Block 0x8a, offset 0x28f\n\t{value: 0x0000, lo: 0x09},\n\t{value: 0x812d, lo: 0x80, hi: 0x82},\n\t{value: 0x8132, lo: 0x85, hi: 0x89},\n\t{value: 0x812d, lo: 0x8a, hi: 0x8b},\n\t{value: 0x8132, lo: 0xaa, hi: 0xad},\n\t{value: 0x45e0, lo: 0xbb, hi: 0xbb},\n\t{value: 0x45ea, lo: 0xbc, hi: 0xbc},\n\t{value: 0x4650, lo: 0xbd, hi: 0xbd},\n\t{value: 0x466c, lo: 0xbe, hi: 0xbe},\n\t{value: 0x465e, lo: 0xbf, hi: 0xbf},\n\t// Block 0x8b, offset 0x299\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x467a, lo: 0x80, hi: 0x80},\n\t// Block 0x8c, offset 0x29b\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8132, lo: 0x82, hi: 0x84},\n\t// Block 0x8d, offset 0x29d\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x8132, lo: 0x80, hi: 0x86},\n\t{value: 0x8132, lo: 0x88, hi: 0x98},\n\t{value: 0x8132, lo: 0x9b, hi: 0xa1},\n\t{value: 0x8132, lo: 0xa3, hi: 0xa4},\n\t{value: 0x8132, lo: 0xa6, hi: 0xaa},\n\t// Block 0x8e, offset 0x2a3\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x812d, lo: 0x90, hi: 0x96},\n\t// Block 0x8f, offset 0x2a5\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8132, lo: 0x84, hi: 0x89},\n\t{value: 0x8102, lo: 0x8a, hi: 0x8a},\n\t// Block 0x90, offset 0x2a8\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8100, lo: 0x93, hi: 0x93},\n}\n\n// lookup returns the trie value for the first UTF-8 encoding in s and\n// the width in bytes of this encoding. The size will be 0 if s does not\n// hold enough bytes to complete the encoding. len(s) must be greater than 0.\nfunc (t *nfkcTrie) lookup(s []byte) (v uint16, sz int) {\n\tc0 := s[0]\n\tswitch {\n\tcase c0 < 0x80: // is ASCII\n\t\treturn nfkcValues[c0], 1\n\tcase c0 < 0xC2:\n\t\treturn 0, 1 // Illegal UTF-8: not a starter, not ASCII.\n\tcase c0 < 0xE0: // 2-byte UTF-8\n\t\tif len(s) < 2 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := nfkcIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c1), 2\n\tcase c0 < 0xF0: // 3-byte UTF-8\n\t\tif len(s) < 3 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := nfkcIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to := uint32(i)<<6 + uint32(c1)\n\t\ti = nfkcIndex[o]\n\t\tc2 := s[2]\n\t\tif c2 < 0x80 || 0xC0 <= c2 {\n\t\t\treturn 0, 2 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c2), 3\n\tcase c0 < 0xF8: // 4-byte UTF-8\n\t\tif len(s) < 4 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := nfkcIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to := uint32(i)<<6 + uint32(c1)\n\t\ti = nfkcIndex[o]\n\t\tc2 := s[2]\n\t\tif c2 < 0x80 || 0xC0 <= c2 {\n\t\t\treturn 0, 2 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to = uint32(i)<<6 + uint32(c2)\n\t\ti = nfkcIndex[o]\n\t\tc3 := s[3]\n\t\tif c3 < 0x80 || 0xC0 <= c3 {\n\t\t\treturn 0, 3 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c3), 4\n\t}\n\t// Illegal rune\n\treturn 0, 1\n}\n\n// lookupUnsafe returns the trie value for the first UTF-8 encoding in s.\n// s must start with a full and valid UTF-8 encoded rune.\nfunc (t *nfkcTrie) lookupUnsafe(s []byte) uint16 {\n\tc0 := s[0]\n\tif c0 < 0x80 { // is ASCII\n\t\treturn nfkcValues[c0]\n\t}\n\ti := nfkcIndex[c0]\n\tif c0 < 0xE0 { // 2-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[1])\n\t}\n\ti = nfkcIndex[uint32(i)<<6+uint32(s[1])]\n\tif c0 < 0xF0 { // 3-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[2])\n\t}\n\ti = nfkcIndex[uint32(i)<<6+uint32(s[2])]\n\tif c0 < 0xF8 { // 4-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[3])\n\t}\n\treturn 0\n}\n\n// lookupString returns the trie value for the first UTF-8 encoding in s and\n// the width in bytes of this encoding. The size will be 0 if s does not\n// hold enough bytes to complete the encoding. len(s) must be greater than 0.\nfunc (t *nfkcTrie) lookupString(s string) (v uint16, sz int) {\n\tc0 := s[0]\n\tswitch {\n\tcase c0 < 0x80: // is ASCII\n\t\treturn nfkcValues[c0], 1\n\tcase c0 < 0xC2:\n\t\treturn 0, 1 // Illegal UTF-8: not a starter, not ASCII.\n\tcase c0 < 0xE0: // 2-byte UTF-8\n\t\tif len(s) < 2 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := nfkcIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c1), 2\n\tcase c0 < 0xF0: // 3-byte UTF-8\n\t\tif len(s) < 3 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := nfkcIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to := uint32(i)<<6 + uint32(c1)\n\t\ti = nfkcIndex[o]\n\t\tc2 := s[2]\n\t\tif c2 < 0x80 || 0xC0 <= c2 {\n\t\t\treturn 0, 2 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c2), 3\n\tcase c0 < 0xF8: // 4-byte UTF-8\n\t\tif len(s) < 4 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := nfkcIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to := uint32(i)<<6 + uint32(c1)\n\t\ti = nfkcIndex[o]\n\t\tc2 := s[2]\n\t\tif c2 < 0x80 || 0xC0 <= c2 {\n\t\t\treturn 0, 2 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to = uint32(i)<<6 + uint32(c2)\n\t\ti = nfkcIndex[o]\n\t\tc3 := s[3]\n\t\tif c3 < 0x80 || 0xC0 <= c3 {\n\t\t\treturn 0, 3 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c3), 4\n\t}\n\t// Illegal rune\n\treturn 0, 1\n}\n\n// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s.\n// s must start with a full and valid UTF-8 encoded rune.\nfunc (t *nfkcTrie) lookupStringUnsafe(s string) uint16 {\n\tc0 := s[0]\n\tif c0 < 0x80 { // is ASCII\n\t\treturn nfkcValues[c0]\n\t}\n\ti := nfkcIndex[c0]\n\tif c0 < 0xE0 { // 2-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[1])\n\t}\n\ti = nfkcIndex[uint32(i)<<6+uint32(s[1])]\n\tif c0 < 0xF0 { // 3-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[2])\n\t}\n\ti = nfkcIndex[uint32(i)<<6+uint32(s[2])]\n\tif c0 < 0xF8 { // 4-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[3])\n\t}\n\treturn 0\n}\n\n// nfkcTrie. Total size: 17104 bytes (16.70 KiB). Checksum: d985061cf5307b35.\ntype nfkcTrie struct{}\n\nfunc newNfkcTrie(i int) *nfkcTrie {\n\treturn &nfkcTrie{}\n}\n\n// lookupValue determines the type of block n and looks up the value for b.\nfunc (t *nfkcTrie) lookupValue(n uint32, b byte) uint16 {\n\tswitch {\n\tcase n < 91:\n\t\treturn uint16(nfkcValues[n<<6+uint32(b)])\n\tdefault:\n\t\tn -= 91\n\t\treturn uint16(nfkcSparse.lookup(n, b))\n\t}\n}\n\n// nfkcValues: 93 blocks, 5952 entries, 11904 bytes\n// The third block is the zero block.\nvar nfkcValues = [5952]uint16{\n\t// Block 0x0, offset 0x0\n\t0x3c: 0xa000, 0x3d: 0xa000, 0x3e: 0xa000,\n\t// Block 0x1, offset 0x40\n\t0x41: 0xa000, 0x42: 0xa000, 0x43: 0xa000, 0x44: 0xa000, 0x45: 0xa000,\n\t0x46: 0xa000, 0x47: 0xa000, 0x48: 0xa000, 0x49: 0xa000, 0x4a: 0xa000, 0x4b: 0xa000,\n\t0x4c: 0xa000, 0x4d: 0xa000, 0x4e: 0xa000, 0x4f: 0xa000, 0x50: 0xa000,\n\t0x52: 0xa000, 0x53: 0xa000, 0x54: 0xa000, 0x55: 0xa000, 0x56: 0xa000, 0x57: 0xa000,\n\t0x58: 0xa000, 0x59: 0xa000, 0x5a: 0xa000,\n\t0x61: 0xa000, 0x62: 0xa000, 0x63: 0xa000,\n\t0x64: 0xa000, 0x65: 0xa000, 0x66: 0xa000, 0x67: 0xa000, 0x68: 0xa000, 0x69: 0xa000,\n\t0x6a: 0xa000, 0x6b: 0xa000, 0x6c: 0xa000, 0x6d: 0xa000, 0x6e: 0xa000, 0x6f: 0xa000,\n\t0x70: 0xa000, 0x72: 0xa000, 0x73: 0xa000, 0x74: 0xa000, 0x75: 0xa000,\n\t0x76: 0xa000, 0x77: 0xa000, 0x78: 0xa000, 0x79: 0xa000, 0x7a: 0xa000,\n\t// Block 0x2, offset 0x80\n\t// Block 0x3, offset 0xc0\n\t0xc0: 0x2f6f, 0xc1: 0x2f74, 0xc2: 0x4688, 0xc3: 0x2f79, 0xc4: 0x4697, 0xc5: 0x469c,\n\t0xc6: 0xa000, 0xc7: 0x46a6, 0xc8: 0x2fe2, 0xc9: 0x2fe7, 0xca: 0x46ab, 0xcb: 0x2ffb,\n\t0xcc: 0x306e, 0xcd: 0x3073, 0xce: 0x3078, 0xcf: 0x46bf, 0xd1: 0x3104,\n\t0xd2: 0x3127, 0xd3: 0x312c, 0xd4: 0x46c9, 0xd5: 0x46ce, 0xd6: 0x46dd,\n\t0xd8: 0xa000, 0xd9: 0x31b3, 0xda: 0x31b8, 0xdb: 0x31bd, 0xdc: 0x470f, 0xdd: 0x3235,\n\t0xe0: 0x327b, 0xe1: 0x3280, 0xe2: 0x4719, 0xe3: 0x3285,\n\t0xe4: 0x4728, 0xe5: 0x472d, 0xe6: 0xa000, 0xe7: 0x4737, 0xe8: 0x32ee, 0xe9: 0x32f3,\n\t0xea: 0x473c, 0xeb: 0x3307, 0xec: 0x337f, 0xed: 0x3384, 0xee: 0x3389, 0xef: 0x4750,\n\t0xf1: 0x3415, 0xf2: 0x3438, 0xf3: 0x343d, 0xf4: 0x475a, 0xf5: 0x475f,\n\t0xf6: 0x476e, 0xf8: 0xa000, 0xf9: 0x34c9, 0xfa: 0x34ce, 0xfb: 0x34d3,\n\t0xfc: 0x47a0, 0xfd: 0x3550, 0xff: 0x3569,\n\t// Block 0x4, offset 0x100\n\t0x100: 0x2f7e, 0x101: 0x328a, 0x102: 0x468d, 0x103: 0x471e, 0x104: 0x2f9c, 0x105: 0x32a8,\n\t0x106: 0x2fb0, 0x107: 0x32bc, 0x108: 0x2fb5, 0x109: 0x32c1, 0x10a: 0x2fba, 0x10b: 0x32c6,\n\t0x10c: 0x2fbf, 0x10d: 0x32cb, 0x10e: 0x2fc9, 0x10f: 0x32d5,\n\t0x112: 0x46b0, 0x113: 0x4741, 0x114: 0x2ff1, 0x115: 0x32fd, 0x116: 0x2ff6, 0x117: 0x3302,\n\t0x118: 0x3014, 0x119: 0x3320, 0x11a: 0x3005, 0x11b: 0x3311, 0x11c: 0x302d, 0x11d: 0x3339,\n\t0x11e: 0x3037, 0x11f: 0x3343, 0x120: 0x303c, 0x121: 0x3348, 0x122: 0x3046, 0x123: 0x3352,\n\t0x124: 0x304b, 0x125: 0x3357, 0x128: 0x307d, 0x129: 0x338e,\n\t0x12a: 0x3082, 0x12b: 0x3393, 0x12c: 0x3087, 0x12d: 0x3398, 0x12e: 0x30aa, 0x12f: 0x33b6,\n\t0x130: 0x308c, 0x132: 0x195d, 0x133: 0x19e7, 0x134: 0x30b4, 0x135: 0x33c0,\n\t0x136: 0x30c8, 0x137: 0x33d9, 0x139: 0x30d2, 0x13a: 0x33e3, 0x13b: 0x30dc,\n\t0x13c: 0x33ed, 0x13d: 0x30d7, 0x13e: 0x33e8, 0x13f: 0x1bac,\n\t// Block 0x5, offset 0x140\n\t0x140: 0x1c34, 0x143: 0x30ff, 0x144: 0x3410, 0x145: 0x3118,\n\t0x146: 0x3429, 0x147: 0x310e, 0x148: 0x341f, 0x149: 0x1c5c,\n\t0x14c: 0x46d3, 0x14d: 0x4764, 0x14e: 0x3131, 0x14f: 0x3442, 0x150: 0x313b, 0x151: 0x344c,\n\t0x154: 0x3159, 0x155: 0x346a, 0x156: 0x3172, 0x157: 0x3483,\n\t0x158: 0x3163, 0x159: 0x3474, 0x15a: 0x46f6, 0x15b: 0x4787, 0x15c: 0x317c, 0x15d: 0x348d,\n\t0x15e: 0x318b, 0x15f: 0x349c, 0x160: 0x46fb, 0x161: 0x478c, 0x162: 0x31a4, 0x163: 0x34ba,\n\t0x164: 0x3195, 0x165: 0x34ab, 0x168: 0x4705, 0x169: 0x4796,\n\t0x16a: 0x470a, 0x16b: 0x479b, 0x16c: 0x31c2, 0x16d: 0x34d8, 0x16e: 0x31cc, 0x16f: 0x34e2,\n\t0x170: 0x31d1, 0x171: 0x34e7, 0x172: 0x31ef, 0x173: 0x3505, 0x174: 0x3212, 0x175: 0x3528,\n\t0x176: 0x323a, 0x177: 0x3555, 0x178: 0x324e, 0x179: 0x325d, 0x17a: 0x357d, 0x17b: 0x3267,\n\t0x17c: 0x3587, 0x17d: 0x326c, 0x17e: 0x358c, 0x17f: 0x00a7,\n\t// Block 0x6, offset 0x180\n\t0x184: 0x2dee, 0x185: 0x2df4,\n\t0x186: 0x2dfa, 0x187: 0x1972, 0x188: 0x1975, 0x189: 0x1a08, 0x18a: 0x1987, 0x18b: 0x198a,\n\t0x18c: 0x1a3e, 0x18d: 0x2f88, 0x18e: 0x3294, 0x18f: 0x3096, 0x190: 0x33a2, 0x191: 0x3140,\n\t0x192: 0x3451, 0x193: 0x31d6, 0x194: 0x34ec, 0x195: 0x39cf, 0x196: 0x3b5e, 0x197: 0x39c8,\n\t0x198: 0x3b57, 0x199: 0x39d6, 0x19a: 0x3b65, 0x19b: 0x39c1, 0x19c: 0x3b50,\n\t0x19e: 0x38b0, 0x19f: 0x3a3f, 0x1a0: 0x38a9, 0x1a1: 0x3a38, 0x1a2: 0x35b3, 0x1a3: 0x35c5,\n\t0x1a6: 0x3041, 0x1a7: 0x334d, 0x1a8: 0x30be, 0x1a9: 0x33cf,\n\t0x1aa: 0x46ec, 0x1ab: 0x477d, 0x1ac: 0x3990, 0x1ad: 0x3b1f, 0x1ae: 0x35d7, 0x1af: 0x35dd,\n\t0x1b0: 0x33c5, 0x1b1: 0x1942, 0x1b2: 0x1945, 0x1b3: 0x19cf, 0x1b4: 0x3028, 0x1b5: 0x3334,\n\t0x1b8: 0x30fa, 0x1b9: 0x340b, 0x1ba: 0x38b7, 0x1bb: 0x3a46,\n\t0x1bc: 0x35ad, 0x1bd: 0x35bf, 0x1be: 0x35b9, 0x1bf: 0x35cb,\n\t// Block 0x7, offset 0x1c0\n\t0x1c0: 0x2f8d, 0x1c1: 0x3299, 0x1c2: 0x2f92, 0x1c3: 0x329e, 0x1c4: 0x300a, 0x1c5: 0x3316,\n\t0x1c6: 0x300f, 0x1c7: 0x331b, 0x1c8: 0x309b, 0x1c9: 0x33a7, 0x1ca: 0x30a0, 0x1cb: 0x33ac,\n\t0x1cc: 0x3145, 0x1cd: 0x3456, 0x1ce: 0x314a, 0x1cf: 0x345b, 0x1d0: 0x3168, 0x1d1: 0x3479,\n\t0x1d2: 0x316d, 0x1d3: 0x347e, 0x1d4: 0x31db, 0x1d5: 0x34f1, 0x1d6: 0x31e0, 0x1d7: 0x34f6,\n\t0x1d8: 0x3186, 0x1d9: 0x3497, 0x1da: 0x319f, 0x1db: 0x34b5,\n\t0x1de: 0x305a, 0x1df: 0x3366,\n\t0x1e6: 0x4692, 0x1e7: 0x4723, 0x1e8: 0x46ba, 0x1e9: 0x474b,\n\t0x1ea: 0x395f, 0x1eb: 0x3aee, 0x1ec: 0x393c, 0x1ed: 0x3acb, 0x1ee: 0x46d8, 0x1ef: 0x4769,\n\t0x1f0: 0x3958, 0x1f1: 0x3ae7, 0x1f2: 0x3244, 0x1f3: 0x355f,\n\t// Block 0x8, offset 0x200\n\t0x200: 0x9932, 0x201: 0x9932, 0x202: 0x9932, 0x203: 0x9932, 0x204: 0x9932, 0x205: 0x8132,\n\t0x206: 0x9932, 0x207: 0x9932, 0x208: 0x9932, 0x209: 0x9932, 0x20a: 0x9932, 0x20b: 0x9932,\n\t0x20c: 0x9932, 0x20d: 0x8132, 0x20e: 0x8132, 0x20f: 0x9932, 0x210: 0x8132, 0x211: 0x9932,\n\t0x212: 0x8132, 0x213: 0x9932, 0x214: 0x9932, 0x215: 0x8133, 0x216: 0x812d, 0x217: 0x812d,\n\t0x218: 0x812d, 0x219: 0x812d, 0x21a: 0x8133, 0x21b: 0x992b, 0x21c: 0x812d, 0x21d: 0x812d,\n\t0x21e: 0x812d, 0x21f: 0x812d, 0x220: 0x812d, 0x221: 0x8129, 0x222: 0x8129, 0x223: 0x992d,\n\t0x224: 0x992d, 0x225: 0x992d, 0x226: 0x992d, 0x227: 0x9929, 0x228: 0x9929, 0x229: 0x812d,\n\t0x22a: 0x812d, 0x22b: 0x812d, 0x22c: 0x812d, 0x22d: 0x992d, 0x22e: 0x992d, 0x22f: 0x812d,\n\t0x230: 0x992d, 0x231: 0x992d, 0x232: 0x812d, 0x233: 0x812d, 0x234: 0x8101, 0x235: 0x8101,\n\t0x236: 0x8101, 0x237: 0x8101, 0x238: 0x9901, 0x239: 0x812d, 0x23a: 0x812d, 0x23b: 0x812d,\n\t0x23c: 0x812d, 0x23d: 0x8132, 0x23e: 0x8132, 0x23f: 0x8132,\n\t// Block 0x9, offset 0x240\n\t0x240: 0x49ae, 0x241: 0x49b3, 0x242: 0x9932, 0x243: 0x49b8, 0x244: 0x4a71, 0x245: 0x9936,\n\t0x246: 0x8132, 0x247: 0x812d, 0x248: 0x812d, 0x249: 0x812d, 0x24a: 0x8132, 0x24b: 0x8132,\n\t0x24c: 0x8132, 0x24d: 0x812d, 0x24e: 0x812d, 0x250: 0x8132, 0x251: 0x8132,\n\t0x252: 0x8132, 0x253: 0x812d, 0x254: 0x812d, 0x255: 0x812d, 0x256: 0x812d, 0x257: 0x8132,\n\t0x258: 0x8133, 0x259: 0x812d, 0x25a: 0x812d, 0x25b: 0x8132, 0x25c: 0x8134, 0x25d: 0x8135,\n\t0x25e: 0x8135, 0x25f: 0x8134, 0x260: 0x8135, 0x261: 0x8135, 0x262: 0x8134, 0x263: 0x8132,\n\t0x264: 0x8132, 0x265: 0x8132, 0x266: 0x8132, 0x267: 0x8132, 0x268: 0x8132, 0x269: 0x8132,\n\t0x26a: 0x8132, 0x26b: 0x8132, 0x26c: 0x8132, 0x26d: 0x8132, 0x26e: 0x8132, 0x26f: 0x8132,\n\t0x274: 0x0170,\n\t0x27a: 0x42a5,\n\t0x27e: 0x0037,\n\t// Block 0xa, offset 0x280\n\t0x284: 0x425a, 0x285: 0x447b,\n\t0x286: 0x35e9, 0x287: 0x00ce, 0x288: 0x3607, 0x289: 0x3613, 0x28a: 0x3625,\n\t0x28c: 0x3643, 0x28e: 0x3655, 0x28f: 0x3673, 0x290: 0x3e08, 0x291: 0xa000,\n\t0x295: 0xa000, 0x297: 0xa000,\n\t0x299: 0xa000,\n\t0x29f: 0xa000, 0x2a1: 0xa000,\n\t0x2a5: 0xa000, 0x2a9: 0xa000,\n\t0x2aa: 0x3637, 0x2ab: 0x3667, 0x2ac: 0x47fe, 0x2ad: 0x3697, 0x2ae: 0x4828, 0x2af: 0x36a9,\n\t0x2b0: 0x3e70, 0x2b1: 0xa000, 0x2b5: 0xa000,\n\t0x2b7: 0xa000, 0x2b9: 0xa000,\n\t0x2bf: 0xa000,\n\t// Block 0xb, offset 0x2c0\n\t0x2c1: 0xa000, 0x2c5: 0xa000,\n\t0x2c9: 0xa000, 0x2ca: 0x4840, 0x2cb: 0x485e,\n\t0x2cc: 0x36c7, 0x2cd: 0x36df, 0x2ce: 0x4876, 0x2d0: 0x01be, 0x2d1: 0x01d0,\n\t0x2d2: 0x01ac, 0x2d3: 0x430c, 0x2d4: 0x4312, 0x2d5: 0x01fa, 0x2d6: 0x01e8,\n\t0x2f0: 0x01d6, 0x2f1: 0x01eb, 0x2f2: 0x01ee, 0x2f4: 0x0188, 0x2f5: 0x01c7,\n\t0x2f9: 0x01a6,\n\t// Block 0xc, offset 0x300\n\t0x300: 0x3721, 0x301: 0x372d, 0x303: 0x371b,\n\t0x306: 0xa000, 0x307: 0x3709,\n\t0x30c: 0x375d, 0x30d: 0x3745, 0x30e: 0x376f, 0x310: 0xa000,\n\t0x313: 0xa000, 0x315: 0xa000, 0x316: 0xa000, 0x317: 0xa000,\n\t0x318: 0xa000, 0x319: 0x3751, 0x31a: 0xa000,\n\t0x31e: 0xa000, 0x323: 0xa000,\n\t0x327: 0xa000,\n\t0x32b: 0xa000, 0x32d: 0xa000,\n\t0x330: 0xa000, 0x333: 0xa000, 0x335: 0xa000,\n\t0x336: 0xa000, 0x337: 0xa000, 0x338: 0xa000, 0x339: 0x37d5, 0x33a: 0xa000,\n\t0x33e: 0xa000,\n\t// Block 0xd, offset 0x340\n\t0x341: 0x3733, 0x342: 0x37b7,\n\t0x350: 0x370f, 0x351: 0x3793,\n\t0x352: 0x3715, 0x353: 0x3799, 0x356: 0x3727, 0x357: 0x37ab,\n\t0x358: 0xa000, 0x359: 0xa000, 0x35a: 0x3829, 0x35b: 0x382f, 0x35c: 0x3739, 0x35d: 0x37bd,\n\t0x35e: 0x373f, 0x35f: 0x37c3, 0x362: 0x374b, 0x363: 0x37cf,\n\t0x364: 0x3757, 0x365: 0x37db, 0x366: 0x3763, 0x367: 0x37e7, 0x368: 0xa000, 0x369: 0xa000,\n\t0x36a: 0x3835, 0x36b: 0x383b, 0x36c: 0x378d, 0x36d: 0x3811, 0x36e: 0x3769, 0x36f: 0x37ed,\n\t0x370: 0x3775, 0x371: 0x37f9, 0x372: 0x377b, 0x373: 0x37ff, 0x374: 0x3781, 0x375: 0x3805,\n\t0x378: 0x3787, 0x379: 0x380b,\n\t// Block 0xe, offset 0x380\n\t0x387: 0x1d61,\n\t0x391: 0x812d,\n\t0x392: 0x8132, 0x393: 0x8132, 0x394: 0x8132, 0x395: 0x8132, 0x396: 0x812d, 0x397: 0x8132,\n\t0x398: 0x8132, 0x399: 0x8132, 0x39a: 0x812e, 0x39b: 0x812d, 0x39c: 0x8132, 0x39d: 0x8132,\n\t0x39e: 0x8132, 0x39f: 0x8132, 0x3a0: 0x8132, 0x3a1: 0x8132, 0x3a2: 0x812d, 0x3a3: 0x812d,\n\t0x3a4: 0x812d, 0x3a5: 0x812d, 0x3a6: 0x812d, 0x3a7: 0x812d, 0x3a8: 0x8132, 0x3a9: 0x8132,\n\t0x3aa: 0x812d, 0x3ab: 0x8132, 0x3ac: 0x8132, 0x3ad: 0x812e, 0x3ae: 0x8131, 0x3af: 0x8132,\n\t0x3b0: 0x8105, 0x3b1: 0x8106, 0x3b2: 0x8107, 0x3b3: 0x8108, 0x3b4: 0x8109, 0x3b5: 0x810a,\n\t0x3b6: 0x810b, 0x3b7: 0x810c, 0x3b8: 0x810d, 0x3b9: 0x810e, 0x3ba: 0x810e, 0x3bb: 0x810f,\n\t0x3bc: 0x8110, 0x3bd: 0x8111, 0x3bf: 0x8112,\n\t// Block 0xf, offset 0x3c0\n\t0x3c8: 0xa000, 0x3ca: 0xa000, 0x3cb: 0x8116,\n\t0x3cc: 0x8117, 0x3cd: 0x8118, 0x3ce: 0x8119, 0x3cf: 0x811a, 0x3d0: 0x811b, 0x3d1: 0x811c,\n\t0x3d2: 0x811d, 0x3d3: 0x9932, 0x3d4: 0x9932, 0x3d5: 0x992d, 0x3d6: 0x812d, 0x3d7: 0x8132,\n\t0x3d8: 0x8132, 0x3d9: 0x8132, 0x3da: 0x8132, 0x3db: 0x8132, 0x3dc: 0x812d, 0x3dd: 0x8132,\n\t0x3de: 0x8132, 0x3df: 0x812d,\n\t0x3f0: 0x811e, 0x3f5: 0x1d84,\n\t0x3f6: 0x2013, 0x3f7: 0x204f, 0x3f8: 0x204a,\n\t// Block 0x10, offset 0x400\n\t0x405: 0xa000,\n\t0x406: 0x2d26, 0x407: 0xa000, 0x408: 0x2d2e, 0x409: 0xa000, 0x40a: 0x2d36, 0x40b: 0xa000,\n\t0x40c: 0x2d3e, 0x40d: 0xa000, 0x40e: 0x2d46, 0x411: 0xa000,\n\t0x412: 0x2d4e,\n\t0x434: 0x8102, 0x435: 0x9900,\n\t0x43a: 0xa000, 0x43b: 0x2d56,\n\t0x43c: 0xa000, 0x43d: 0x2d5e, 0x43e: 0xa000, 0x43f: 0xa000,\n\t// Block 0x11, offset 0x440\n\t0x440: 0x0069, 0x441: 0x006b, 0x442: 0x006f, 0x443: 0x0083, 0x444: 0x00f5, 0x445: 0x00f8,\n\t0x446: 0x0413, 0x447: 0x0085, 0x448: 0x0089, 0x449: 0x008b, 0x44a: 0x0104, 0x44b: 0x0107,\n\t0x44c: 0x010a, 0x44d: 0x008f, 0x44f: 0x0097, 0x450: 0x009b, 0x451: 0x00e0,\n\t0x452: 0x009f, 0x453: 0x00fe, 0x454: 0x0417, 0x455: 0x041b, 0x456: 0x00a1, 0x457: 0x00a9,\n\t0x458: 0x00ab, 0x459: 0x0423, 0x45a: 0x012b, 0x45b: 0x00ad, 0x45c: 0x0427, 0x45d: 0x01be,\n\t0x45e: 0x01c1, 0x45f: 0x01c4, 0x460: 0x01fa, 0x461: 0x01fd, 0x462: 0x0093, 0x463: 0x00a5,\n\t0x464: 0x00ab, 0x465: 0x00ad, 0x466: 0x01be, 0x467: 0x01c1, 0x468: 0x01eb, 0x469: 0x01fa,\n\t0x46a: 0x01fd,\n\t0x478: 0x020c,\n\t// Block 0x12, offset 0x480\n\t0x49b: 0x00fb, 0x49c: 0x0087, 0x49d: 0x0101,\n\t0x49e: 0x00d4, 0x49f: 0x010a, 0x4a0: 0x008d, 0x4a1: 0x010d, 0x4a2: 0x0110, 0x4a3: 0x0116,\n\t0x4a4: 0x011c, 0x4a5: 0x011f, 0x4a6: 0x0122, 0x4a7: 0x042b, 0x4a8: 0x016a, 0x4a9: 0x0128,\n\t0x4aa: 0x042f, 0x4ab: 0x016d, 0x4ac: 0x0131, 0x4ad: 0x012e, 0x4ae: 0x0134, 0x4af: 0x0137,\n\t0x4b0: 0x013a, 0x4b1: 0x013d, 0x4b2: 0x0140, 0x4b3: 0x014c, 0x4b4: 0x014f, 0x4b5: 0x00ec,\n\t0x4b6: 0x0152, 0x4b7: 0x0155, 0x4b8: 0x041f, 0x4b9: 0x0158, 0x4ba: 0x015b, 0x4bb: 0x00b5,\n\t0x4bc: 0x015e, 0x4bd: 0x0161, 0x4be: 0x0164, 0x4bf: 0x01d0,\n\t// Block 0x13, offset 0x4c0\n\t0x4c0: 0x8132, 0x4c1: 0x8132, 0x4c2: 0x812d, 0x4c3: 0x8132, 0x4c4: 0x8132, 0x4c5: 0x8132,\n\t0x4c6: 0x8132, 0x4c7: 0x8132, 0x4c8: 0x8132, 0x4c9: 0x8132, 0x4ca: 0x812d, 0x4cb: 0x8132,\n\t0x4cc: 0x8132, 0x4cd: 0x8135, 0x4ce: 0x812a, 0x4cf: 0x812d, 0x4d0: 0x8129, 0x4d1: 0x8132,\n\t0x4d2: 0x8132, 0x4d3: 0x8132, 0x4d4: 0x8132, 0x4d5: 0x8132, 0x4d6: 0x8132, 0x4d7: 0x8132,\n\t0x4d8: 0x8132, 0x4d9: 0x8132, 0x4da: 0x8132, 0x4db: 0x8132, 0x4dc: 0x8132, 0x4dd: 0x8132,\n\t0x4de: 0x8132, 0x4df: 0x8132, 0x4e0: 0x8132, 0x4e1: 0x8132, 0x4e2: 0x8132, 0x4e3: 0x8132,\n\t0x4e4: 0x8132, 0x4e5: 0x8132, 0x4e6: 0x8132, 0x4e7: 0x8132, 0x4e8: 0x8132, 0x4e9: 0x8132,\n\t0x4ea: 0x8132, 0x4eb: 0x8132, 0x4ec: 0x8132, 0x4ed: 0x8132, 0x4ee: 0x8132, 0x4ef: 0x8132,\n\t0x4f0: 0x8132, 0x4f1: 0x8132, 0x4f2: 0x8132, 0x4f3: 0x8132, 0x4f4: 0x8132, 0x4f5: 0x8132,\n\t0x4f6: 0x8133, 0x4f7: 0x8131, 0x4f8: 0x8131, 0x4f9: 0x812d, 0x4fb: 0x8132,\n\t0x4fc: 0x8134, 0x4fd: 0x812d, 0x4fe: 0x8132, 0x4ff: 0x812d,\n\t// Block 0x14, offset 0x500\n\t0x500: 0x2f97, 0x501: 0x32a3, 0x502: 0x2fa1, 0x503: 0x32ad, 0x504: 0x2fa6, 0x505: 0x32b2,\n\t0x506: 0x2fab, 0x507: 0x32b7, 0x508: 0x38cc, 0x509: 0x3a5b, 0x50a: 0x2fc4, 0x50b: 0x32d0,\n\t0x50c: 0x2fce, 0x50d: 0x32da, 0x50e: 0x2fdd, 0x50f: 0x32e9, 0x510: 0x2fd3, 0x511: 0x32df,\n\t0x512: 0x2fd8, 0x513: 0x32e4, 0x514: 0x38ef, 0x515: 0x3a7e, 0x516: 0x38f6, 0x517: 0x3a85,\n\t0x518: 0x3019, 0x519: 0x3325, 0x51a: 0x301e, 0x51b: 0x332a, 0x51c: 0x3904, 0x51d: 0x3a93,\n\t0x51e: 0x3023, 0x51f: 0x332f, 0x520: 0x3032, 0x521: 0x333e, 0x522: 0x3050, 0x523: 0x335c,\n\t0x524: 0x305f, 0x525: 0x336b, 0x526: 0x3055, 0x527: 0x3361, 0x528: 0x3064, 0x529: 0x3370,\n\t0x52a: 0x3069, 0x52b: 0x3375, 0x52c: 0x30af, 0x52d: 0x33bb, 0x52e: 0x390b, 0x52f: 0x3a9a,\n\t0x530: 0x30b9, 0x531: 0x33ca, 0x532: 0x30c3, 0x533: 0x33d4, 0x534: 0x30cd, 0x535: 0x33de,\n\t0x536: 0x46c4, 0x537: 0x4755, 0x538: 0x3912, 0x539: 0x3aa1, 0x53a: 0x30e6, 0x53b: 0x33f7,\n\t0x53c: 0x30e1, 0x53d: 0x33f2, 0x53e: 0x30eb, 0x53f: 0x33fc,\n\t// Block 0x15, offset 0x540\n\t0x540: 0x30f0, 0x541: 0x3401, 0x542: 0x30f5, 0x543: 0x3406, 0x544: 0x3109, 0x545: 0x341a,\n\t0x546: 0x3113, 0x547: 0x3424, 0x548: 0x3122, 0x549: 0x3433, 0x54a: 0x311d, 0x54b: 0x342e,\n\t0x54c: 0x3935, 0x54d: 0x3ac4, 0x54e: 0x3943, 0x54f: 0x3ad2, 0x550: 0x394a, 0x551: 0x3ad9,\n\t0x552: 0x3951, 0x553: 0x3ae0, 0x554: 0x314f, 0x555: 0x3460, 0x556: 0x3154, 0x557: 0x3465,\n\t0x558: 0x315e, 0x559: 0x346f, 0x55a: 0x46f1, 0x55b: 0x4782, 0x55c: 0x3997, 0x55d: 0x3b26,\n\t0x55e: 0x3177, 0x55f: 0x3488, 0x560: 0x3181, 0x561: 0x3492, 0x562: 0x4700, 0x563: 0x4791,\n\t0x564: 0x399e, 0x565: 0x3b2d, 0x566: 0x39a5, 0x567: 0x3b34, 0x568: 0x39ac, 0x569: 0x3b3b,\n\t0x56a: 0x3190, 0x56b: 0x34a1, 0x56c: 0x319a, 0x56d: 0x34b0, 0x56e: 0x31ae, 0x56f: 0x34c4,\n\t0x570: 0x31a9, 0x571: 0x34bf, 0x572: 0x31ea, 0x573: 0x3500, 0x574: 0x31f9, 0x575: 0x350f,\n\t0x576: 0x31f4, 0x577: 0x350a, 0x578: 0x39b3, 0x579: 0x3b42, 0x57a: 0x39ba, 0x57b: 0x3b49,\n\t0x57c: 0x31fe, 0x57d: 0x3514, 0x57e: 0x3203, 0x57f: 0x3519,\n\t// Block 0x16, offset 0x580\n\t0x580: 0x3208, 0x581: 0x351e, 0x582: 0x320d, 0x583: 0x3523, 0x584: 0x321c, 0x585: 0x3532,\n\t0x586: 0x3217, 0x587: 0x352d, 0x588: 0x3221, 0x589: 0x353c, 0x58a: 0x3226, 0x58b: 0x3541,\n\t0x58c: 0x322b, 0x58d: 0x3546, 0x58e: 0x3249, 0x58f: 0x3564, 0x590: 0x3262, 0x591: 0x3582,\n\t0x592: 0x3271, 0x593: 0x3591, 0x594: 0x3276, 0x595: 0x3596, 0x596: 0x337a, 0x597: 0x34a6,\n\t0x598: 0x3537, 0x599: 0x3573, 0x59a: 0x1be0, 0x59b: 0x42d7,\n\t0x5a0: 0x46a1, 0x5a1: 0x4732, 0x5a2: 0x2f83, 0x5a3: 0x328f,\n\t0x5a4: 0x3878, 0x5a5: 0x3a07, 0x5a6: 0x3871, 0x5a7: 0x3a00, 0x5a8: 0x3886, 0x5a9: 0x3a15,\n\t0x5aa: 0x387f, 0x5ab: 0x3a0e, 0x5ac: 0x38be, 0x5ad: 0x3a4d, 0x5ae: 0x3894, 0x5af: 0x3a23,\n\t0x5b0: 0x388d, 0x5b1: 0x3a1c, 0x5b2: 0x38a2, 0x5b3: 0x3a31, 0x5b4: 0x389b, 0x5b5: 0x3a2a,\n\t0x5b6: 0x38c5, 0x5b7: 0x3a54, 0x5b8: 0x46b5, 0x5b9: 0x4746, 0x5ba: 0x3000, 0x5bb: 0x330c,\n\t0x5bc: 0x2fec, 0x5bd: 0x32f8, 0x5be: 0x38da, 0x5bf: 0x3a69,\n\t// Block 0x17, offset 0x5c0\n\t0x5c0: 0x38d3, 0x5c1: 0x3a62, 0x5c2: 0x38e8, 0x5c3: 0x3a77, 0x5c4: 0x38e1, 0x5c5: 0x3a70,\n\t0x5c6: 0x38fd, 0x5c7: 0x3a8c, 0x5c8: 0x3091, 0x5c9: 0x339d, 0x5ca: 0x30a5, 0x5cb: 0x33b1,\n\t0x5cc: 0x46e7, 0x5cd: 0x4778, 0x5ce: 0x3136, 0x5cf: 0x3447, 0x5d0: 0x3920, 0x5d1: 0x3aaf,\n\t0x5d2: 0x3919, 0x5d3: 0x3aa8, 0x5d4: 0x392e, 0x5d5: 0x3abd, 0x5d6: 0x3927, 0x5d7: 0x3ab6,\n\t0x5d8: 0x3989, 0x5d9: 0x3b18, 0x5da: 0x396d, 0x5db: 0x3afc, 0x5dc: 0x3966, 0x5dd: 0x3af5,\n\t0x5de: 0x397b, 0x5df: 0x3b0a, 0x5e0: 0x3974, 0x5e1: 0x3b03, 0x5e2: 0x3982, 0x5e3: 0x3b11,\n\t0x5e4: 0x31e5, 0x5e5: 0x34fb, 0x5e6: 0x31c7, 0x5e7: 0x34dd, 0x5e8: 0x39e4, 0x5e9: 0x3b73,\n\t0x5ea: 0x39dd, 0x5eb: 0x3b6c, 0x5ec: 0x39f2, 0x5ed: 0x3b81, 0x5ee: 0x39eb, 0x5ef: 0x3b7a,\n\t0x5f0: 0x39f9, 0x5f1: 0x3b88, 0x5f2: 0x3230, 0x5f3: 0x354b, 0x5f4: 0x3258, 0x5f5: 0x3578,\n\t0x5f6: 0x3253, 0x5f7: 0x356e, 0x5f8: 0x323f, 0x5f9: 0x355a,\n\t// Block 0x18, offset 0x600\n\t0x600: 0x4804, 0x601: 0x480a, 0x602: 0x491e, 0x603: 0x4936, 0x604: 0x4926, 0x605: 0x493e,\n\t0x606: 0x492e, 0x607: 0x4946, 0x608: 0x47aa, 0x609: 0x47b0, 0x60a: 0x488e, 0x60b: 0x48a6,\n\t0x60c: 0x4896, 0x60d: 0x48ae, 0x60e: 0x489e, 0x60f: 0x48b6, 0x610: 0x4816, 0x611: 0x481c,\n\t0x612: 0x3db8, 0x613: 0x3dc8, 0x614: 0x3dc0, 0x615: 0x3dd0,\n\t0x618: 0x47b6, 0x619: 0x47bc, 0x61a: 0x3ce8, 0x61b: 0x3cf8, 0x61c: 0x3cf0, 0x61d: 0x3d00,\n\t0x620: 0x482e, 0x621: 0x4834, 0x622: 0x494e, 0x623: 0x4966,\n\t0x624: 0x4956, 0x625: 0x496e, 0x626: 0x495e, 0x627: 0x4976, 0x628: 0x47c2, 0x629: 0x47c8,\n\t0x62a: 0x48be, 0x62b: 0x48d6, 0x62c: 0x48c6, 0x62d: 0x48de, 0x62e: 0x48ce, 0x62f: 0x48e6,\n\t0x630: 0x4846, 0x631: 0x484c, 0x632: 0x3e18, 0x633: 0x3e30, 0x634: 0x3e20, 0x635: 0x3e38,\n\t0x636: 0x3e28, 0x637: 0x3e40, 0x638: 0x47ce, 0x639: 0x47d4, 0x63a: 0x3d18, 0x63b: 0x3d30,\n\t0x63c: 0x3d20, 0x63d: 0x3d38, 0x63e: 0x3d28, 0x63f: 0x3d40,\n\t// Block 0x19, offset 0x640\n\t0x640: 0x4852, 0x641: 0x4858, 0x642: 0x3e48, 0x643: 0x3e58, 0x644: 0x3e50, 0x645: 0x3e60,\n\t0x648: 0x47da, 0x649: 0x47e0, 0x64a: 0x3d48, 0x64b: 0x3d58,\n\t0x64c: 0x3d50, 0x64d: 0x3d60, 0x650: 0x4864, 0x651: 0x486a,\n\t0x652: 0x3e80, 0x653: 0x3e98, 0x654: 0x3e88, 0x655: 0x3ea0, 0x656: 0x3e90, 0x657: 0x3ea8,\n\t0x659: 0x47e6, 0x65b: 0x3d68, 0x65d: 0x3d70,\n\t0x65f: 0x3d78, 0x660: 0x487c, 0x661: 0x4882, 0x662: 0x497e, 0x663: 0x4996,\n\t0x664: 0x4986, 0x665: 0x499e, 0x666: 0x498e, 0x667: 0x49a6, 0x668: 0x47ec, 0x669: 0x47f2,\n\t0x66a: 0x48ee, 0x66b: 0x4906, 0x66c: 0x48f6, 0x66d: 0x490e, 0x66e: 0x48fe, 0x66f: 0x4916,\n\t0x670: 0x47f8, 0x671: 0x431e, 0x672: 0x3691, 0x673: 0x4324, 0x674: 0x4822, 0x675: 0x432a,\n\t0x676: 0x36a3, 0x677: 0x4330, 0x678: 0x36c1, 0x679: 0x4336, 0x67a: 0x36d9, 0x67b: 0x433c,\n\t0x67c: 0x4870, 0x67d: 0x4342,\n\t// Block 0x1a, offset 0x680\n\t0x680: 0x3da0, 0x681: 0x3da8, 0x682: 0x4184, 0x683: 0x41a2, 0x684: 0x418e, 0x685: 0x41ac,\n\t0x686: 0x4198, 0x687: 0x41b6, 0x688: 0x3cd8, 0x689: 0x3ce0, 0x68a: 0x40d0, 0x68b: 0x40ee,\n\t0x68c: 0x40da, 0x68d: 0x40f8, 0x68e: 0x40e4, 0x68f: 0x4102, 0x690: 0x3de8, 0x691: 0x3df0,\n\t0x692: 0x41c0, 0x693: 0x41de, 0x694: 0x41ca, 0x695: 0x41e8, 0x696: 0x41d4, 0x697: 0x41f2,\n\t0x698: 0x3d08, 0x699: 0x3d10, 0x69a: 0x410c, 0x69b: 0x412a, 0x69c: 0x4116, 0x69d: 0x4134,\n\t0x69e: 0x4120, 0x69f: 0x413e, 0x6a0: 0x3ec0, 0x6a1: 0x3ec8, 0x6a2: 0x41fc, 0x6a3: 0x421a,\n\t0x6a4: 0x4206, 0x6a5: 0x4224, 0x6a6: 0x4210, 0x6a7: 0x422e, 0x6a8: 0x3d80, 0x6a9: 0x3d88,\n\t0x6aa: 0x4148, 0x6ab: 0x4166, 0x6ac: 0x4152, 0x6ad: 0x4170, 0x6ae: 0x415c, 0x6af: 0x417a,\n\t0x6b0: 0x3685, 0x6b1: 0x367f, 0x6b2: 0x3d90, 0x6b3: 0x368b, 0x6b4: 0x3d98,\n\t0x6b6: 0x4810, 0x6b7: 0x3db0, 0x6b8: 0x35f5, 0x6b9: 0x35ef, 0x6ba: 0x35e3, 0x6bb: 0x42ee,\n\t0x6bc: 0x35fb, 0x6bd: 0x4287, 0x6be: 0x01d3, 0x6bf: 0x4287,\n\t// Block 0x1b, offset 0x6c0\n\t0x6c0: 0x42a0, 0x6c1: 0x4482, 0x6c2: 0x3dd8, 0x6c3: 0x369d, 0x6c4: 0x3de0,\n\t0x6c6: 0x483a, 0x6c7: 0x3df8, 0x6c8: 0x3601, 0x6c9: 0x42f4, 0x6ca: 0x360d, 0x6cb: 0x42fa,\n\t0x6cc: 0x3619, 0x6cd: 0x4489, 0x6ce: 0x4490, 0x6cf: 0x4497, 0x6d0: 0x36b5, 0x6d1: 0x36af,\n\t0x6d2: 0x3e00, 0x6d3: 0x44e4, 0x6d6: 0x36bb, 0x6d7: 0x3e10,\n\t0x6d8: 0x3631, 0x6d9: 0x362b, 0x6da: 0x361f, 0x6db: 0x4300, 0x6dd: 0x449e,\n\t0x6de: 0x44a5, 0x6df: 0x44ac, 0x6e0: 0x36eb, 0x6e1: 0x36e5, 0x6e2: 0x3e68, 0x6e3: 0x44ec,\n\t0x6e4: 0x36cd, 0x6e5: 0x36d3, 0x6e6: 0x36f1, 0x6e7: 0x3e78, 0x6e8: 0x3661, 0x6e9: 0x365b,\n\t0x6ea: 0x364f, 0x6eb: 0x430c, 0x6ec: 0x3649, 0x6ed: 0x4474, 0x6ee: 0x447b, 0x6ef: 0x0081,\n\t0x6f2: 0x3eb0, 0x6f3: 0x36f7, 0x6f4: 0x3eb8,\n\t0x6f6: 0x4888, 0x6f7: 0x3ed0, 0x6f8: 0x363d, 0x6f9: 0x4306, 0x6fa: 0x366d, 0x6fb: 0x4318,\n\t0x6fc: 0x3679, 0x6fd: 0x425a, 0x6fe: 0x428c,\n\t// Block 0x1c, offset 0x700\n\t0x700: 0x1bd8, 0x701: 0x1bdc, 0x702: 0x0047, 0x703: 0x1c54, 0x705: 0x1be8,\n\t0x706: 0x1bec, 0x707: 0x00e9, 0x709: 0x1c58, 0x70a: 0x008f, 0x70b: 0x0051,\n\t0x70c: 0x0051, 0x70d: 0x0051, 0x70e: 0x0091, 0x70f: 0x00da, 0x710: 0x0053, 0x711: 0x0053,\n\t0x712: 0x0059, 0x713: 0x0099, 0x715: 0x005d, 0x716: 0x198d,\n\t0x719: 0x0061, 0x71a: 0x0063, 0x71b: 0x0065, 0x71c: 0x0065, 0x71d: 0x0065,\n\t0x720: 0x199f, 0x721: 0x1bc8, 0x722: 0x19a8,\n\t0x724: 0x0075, 0x726: 0x01b8, 0x728: 0x0075,\n\t0x72a: 0x0057, 0x72b: 0x42d2, 0x72c: 0x0045, 0x72d: 0x0047, 0x72f: 0x008b,\n\t0x730: 0x004b, 0x731: 0x004d, 0x733: 0x005b, 0x734: 0x009f, 0x735: 0x0215,\n\t0x736: 0x0218, 0x737: 0x021b, 0x738: 0x021e, 0x739: 0x0093, 0x73b: 0x1b98,\n\t0x73c: 0x01e8, 0x73d: 0x01c1, 0x73e: 0x0179, 0x73f: 0x01a0,\n\t// Block 0x1d, offset 0x740\n\t0x740: 0x0463, 0x745: 0x0049,\n\t0x746: 0x0089, 0x747: 0x008b, 0x748: 0x0093, 0x749: 0x0095,\n\t0x750: 0x222e, 0x751: 0x223a,\n\t0x752: 0x22ee, 0x753: 0x2216, 0x754: 0x229a, 0x755: 0x2222, 0x756: 0x22a0, 0x757: 0x22b8,\n\t0x758: 0x22c4, 0x759: 0x2228, 0x75a: 0x22ca, 0x75b: 0x2234, 0x75c: 0x22be, 0x75d: 0x22d0,\n\t0x75e: 0x22d6, 0x75f: 0x1cbc, 0x760: 0x0053, 0x761: 0x195a, 0x762: 0x1ba4, 0x763: 0x1963,\n\t0x764: 0x006d, 0x765: 0x19ab, 0x766: 0x1bd0, 0x767: 0x1d48, 0x768: 0x1966, 0x769: 0x0071,\n\t0x76a: 0x19b7, 0x76b: 0x1bd4, 0x76c: 0x0059, 0x76d: 0x0047, 0x76e: 0x0049, 0x76f: 0x005b,\n\t0x770: 0x0093, 0x771: 0x19e4, 0x772: 0x1c18, 0x773: 0x19ed, 0x774: 0x00ad, 0x775: 0x1a62,\n\t0x776: 0x1c4c, 0x777: 0x1d5c, 0x778: 0x19f0, 0x779: 0x00b1, 0x77a: 0x1a65, 0x77b: 0x1c50,\n\t0x77c: 0x0099, 0x77d: 0x0087, 0x77e: 0x0089, 0x77f: 0x009b,\n\t// Block 0x1e, offset 0x780\n\t0x781: 0x3c06, 0x783: 0xa000, 0x784: 0x3c0d, 0x785: 0xa000,\n\t0x787: 0x3c14, 0x788: 0xa000, 0x789: 0x3c1b,\n\t0x78d: 0xa000,\n\t0x7a0: 0x2f65, 0x7a1: 0xa000, 0x7a2: 0x3c29,\n\t0x7a4: 0xa000, 0x7a5: 0xa000,\n\t0x7ad: 0x3c22, 0x7ae: 0x2f60, 0x7af: 0x2f6a,\n\t0x7b0: 0x3c30, 0x7b1: 0x3c37, 0x7b2: 0xa000, 0x7b3: 0xa000, 0x7b4: 0x3c3e, 0x7b5: 0x3c45,\n\t0x7b6: 0xa000, 0x7b7: 0xa000, 0x7b8: 0x3c4c, 0x7b9: 0x3c53, 0x7ba: 0xa000, 0x7bb: 0xa000,\n\t0x7bc: 0xa000, 0x7bd: 0xa000,\n\t// Block 0x1f, offset 0x7c0\n\t0x7c0: 0x3c5a, 0x7c1: 0x3c61, 0x7c2: 0xa000, 0x7c3: 0xa000, 0x7c4: 0x3c76, 0x7c5: 0x3c7d,\n\t0x7c6: 0xa000, 0x7c7: 0xa000, 0x7c8: 0x3c84, 0x7c9: 0x3c8b,\n\t0x7d1: 0xa000,\n\t0x7d2: 0xa000,\n\t0x7e2: 0xa000,\n\t0x7e8: 0xa000, 0x7e9: 0xa000,\n\t0x7eb: 0xa000, 0x7ec: 0x3ca0, 0x7ed: 0x3ca7, 0x7ee: 0x3cae, 0x7ef: 0x3cb5,\n\t0x7f2: 0xa000, 0x7f3: 0xa000, 0x7f4: 0xa000, 0x7f5: 0xa000,\n\t// Block 0x20, offset 0x800\n\t0x820: 0x0023, 0x821: 0x0025, 0x822: 0x0027, 0x823: 0x0029,\n\t0x824: 0x002b, 0x825: 0x002d, 0x826: 0x002f, 0x827: 0x0031, 0x828: 0x0033, 0x829: 0x1882,\n\t0x82a: 0x1885, 0x82b: 0x1888, 0x82c: 0x188b, 0x82d: 0x188e, 0x82e: 0x1891, 0x82f: 0x1894,\n\t0x830: 0x1897, 0x831: 0x189a, 0x832: 0x189d, 0x833: 0x18a6, 0x834: 0x1a68, 0x835: 0x1a6c,\n\t0x836: 0x1a70, 0x837: 0x1a74, 0x838: 0x1a78, 0x839: 0x1a7c, 0x83a: 0x1a80, 0x83b: 0x1a84,\n\t0x83c: 0x1a88, 0x83d: 0x1c80, 0x83e: 0x1c85, 0x83f: 0x1c8a,\n\t// Block 0x21, offset 0x840\n\t0x840: 0x1c8f, 0x841: 0x1c94, 0x842: 0x1c99, 0x843: 0x1c9e, 0x844: 0x1ca3, 0x845: 0x1ca8,\n\t0x846: 0x1cad, 0x847: 0x1cb2, 0x848: 0x187f, 0x849: 0x18a3, 0x84a: 0x18c7, 0x84b: 0x18eb,\n\t0x84c: 0x190f, 0x84d: 0x1918, 0x84e: 0x191e, 0x84f: 0x1924, 0x850: 0x192a, 0x851: 0x1b60,\n\t0x852: 0x1b64, 0x853: 0x1b68, 0x854: 0x1b6c, 0x855: 0x1b70, 0x856: 0x1b74, 0x857: 0x1b78,\n\t0x858: 0x1b7c, 0x859: 0x1b80, 0x85a: 0x1b84, 0x85b: 0x1b88, 0x85c: 0x1af4, 0x85d: 0x1af8,\n\t0x85e: 0x1afc, 0x85f: 0x1b00, 0x860: 0x1b04, 0x861: 0x1b08, 0x862: 0x1b0c, 0x863: 0x1b10,\n\t0x864: 0x1b14, 0x865: 0x1b18, 0x866: 0x1b1c, 0x867: 0x1b20, 0x868: 0x1b24, 0x869: 0x1b28,\n\t0x86a: 0x1b2c, 0x86b: 0x1b30, 0x86c: 0x1b34, 0x86d: 0x1b38, 0x86e: 0x1b3c, 0x86f: 0x1b40,\n\t0x870: 0x1b44, 0x871: 0x1b48, 0x872: 0x1b4c, 0x873: 0x1b50, 0x874: 0x1b54, 0x875: 0x1b58,\n\t0x876: 0x0043, 0x877: 0x0045, 0x878: 0x0047, 0x879: 0x0049, 0x87a: 0x004b, 0x87b: 0x004d,\n\t0x87c: 0x004f, 0x87d: 0x0051, 0x87e: 0x0053, 0x87f: 0x0055,\n\t// Block 0x22, offset 0x880\n\t0x880: 0x06bf, 0x881: 0x06e3, 0x882: 0x06ef, 0x883: 0x06ff, 0x884: 0x0707, 0x885: 0x0713,\n\t0x886: 0x071b, 0x887: 0x0723, 0x888: 0x072f, 0x889: 0x0783, 0x88a: 0x079b, 0x88b: 0x07ab,\n\t0x88c: 0x07bb, 0x88d: 0x07cb, 0x88e: 0x07db, 0x88f: 0x07fb, 0x890: 0x07ff, 0x891: 0x0803,\n\t0x892: 0x0837, 0x893: 0x085f, 0x894: 0x086f, 0x895: 0x0877, 0x896: 0x087b, 0x897: 0x0887,\n\t0x898: 0x08a3, 0x899: 0x08a7, 0x89a: 0x08bf, 0x89b: 0x08c3, 0x89c: 0x08cb, 0x89d: 0x08db,\n\t0x89e: 0x0977, 0x89f: 0x098b, 0x8a0: 0x09cb, 0x8a1: 0x09df, 0x8a2: 0x09e7, 0x8a3: 0x09eb,\n\t0x8a4: 0x09fb, 0x8a5: 0x0a17, 0x8a6: 0x0a43, 0x8a7: 0x0a4f, 0x8a8: 0x0a6f, 0x8a9: 0x0a7b,\n\t0x8aa: 0x0a7f, 0x8ab: 0x0a83, 0x8ac: 0x0a9b, 0x8ad: 0x0a9f, 0x8ae: 0x0acb, 0x8af: 0x0ad7,\n\t0x8b0: 0x0adf, 0x8b1: 0x0ae7, 0x8b2: 0x0af7, 0x8b3: 0x0aff, 0x8b4: 0x0b07, 0x8b5: 0x0b33,\n\t0x8b6: 0x0b37, 0x8b7: 0x0b3f, 0x8b8: 0x0b43, 0x8b9: 0x0b4b, 0x8ba: 0x0b53, 0x8bb: 0x0b63,\n\t0x8bc: 0x0b7f, 0x8bd: 0x0bf7, 0x8be: 0x0c0b, 0x8bf: 0x0c0f,\n\t// Block 0x23, offset 0x8c0\n\t0x8c0: 0x0c8f, 0x8c1: 0x0c93, 0x8c2: 0x0ca7, 0x8c3: 0x0cab, 0x8c4: 0x0cb3, 0x8c5: 0x0cbb,\n\t0x8c6: 0x0cc3, 0x8c7: 0x0ccf, 0x8c8: 0x0cf7, 0x8c9: 0x0d07, 0x8ca: 0x0d1b, 0x8cb: 0x0d8b,\n\t0x8cc: 0x0d97, 0x8cd: 0x0da7, 0x8ce: 0x0db3, 0x8cf: 0x0dbf, 0x8d0: 0x0dc7, 0x8d1: 0x0dcb,\n\t0x8d2: 0x0dcf, 0x8d3: 0x0dd3, 0x8d4: 0x0dd7, 0x8d5: 0x0e8f, 0x8d6: 0x0ed7, 0x8d7: 0x0ee3,\n\t0x8d8: 0x0ee7, 0x8d9: 0x0eeb, 0x8da: 0x0eef, 0x8db: 0x0ef7, 0x8dc: 0x0efb, 0x8dd: 0x0f0f,\n\t0x8de: 0x0f2b, 0x8df: 0x0f33, 0x8e0: 0x0f73, 0x8e1: 0x0f77, 0x8e2: 0x0f7f, 0x8e3: 0x0f83,\n\t0x8e4: 0x0f8b, 0x8e5: 0x0f8f, 0x8e6: 0x0fb3, 0x8e7: 0x0fb7, 0x8e8: 0x0fd3, 0x8e9: 0x0fd7,\n\t0x8ea: 0x0fdb, 0x8eb: 0x0fdf, 0x8ec: 0x0ff3, 0x8ed: 0x1017, 0x8ee: 0x101b, 0x8ef: 0x101f,\n\t0x8f0: 0x1043, 0x8f1: 0x1083, 0x8f2: 0x1087, 0x8f3: 0x10a7, 0x8f4: 0x10b7, 0x8f5: 0x10bf,\n\t0x8f6: 0x10df, 0x8f7: 0x1103, 0x8f8: 0x1147, 0x8f9: 0x114f, 0x8fa: 0x1163, 0x8fb: 0x116f,\n\t0x8fc: 0x1177, 0x8fd: 0x117f, 0x8fe: 0x1183, 0x8ff: 0x1187,\n\t// Block 0x24, offset 0x900\n\t0x900: 0x119f, 0x901: 0x11a3, 0x902: 0x11bf, 0x903: 0x11c7, 0x904: 0x11cf, 0x905: 0x11d3,\n\t0x906: 0x11df, 0x907: 0x11e7, 0x908: 0x11eb, 0x909: 0x11ef, 0x90a: 0x11f7, 0x90b: 0x11fb,\n\t0x90c: 0x129b, 0x90d: 0x12af, 0x90e: 0x12e3, 0x90f: 0x12e7, 0x910: 0x12ef, 0x911: 0x131b,\n\t0x912: 0x1323, 0x913: 0x132b, 0x914: 0x1333, 0x915: 0x136f, 0x916: 0x1373, 0x917: 0x137b,\n\t0x918: 0x137f, 0x919: 0x1383, 0x91a: 0x13af, 0x91b: 0x13b3, 0x91c: 0x13bb, 0x91d: 0x13cf,\n\t0x91e: 0x13d3, 0x91f: 0x13ef, 0x920: 0x13f7, 0x921: 0x13fb, 0x922: 0x141f, 0x923: 0x143f,\n\t0x924: 0x1453, 0x925: 0x1457, 0x926: 0x145f, 0x927: 0x148b, 0x928: 0x148f, 0x929: 0x149f,\n\t0x92a: 0x14c3, 0x92b: 0x14cf, 0x92c: 0x14df, 0x92d: 0x14f7, 0x92e: 0x14ff, 0x92f: 0x1503,\n\t0x930: 0x1507, 0x931: 0x150b, 0x932: 0x1517, 0x933: 0x151b, 0x934: 0x1523, 0x935: 0x153f,\n\t0x936: 0x1543, 0x937: 0x1547, 0x938: 0x155f, 0x939: 0x1563, 0x93a: 0x156b, 0x93b: 0x157f,\n\t0x93c: 0x1583, 0x93d: 0x1587, 0x93e: 0x158f, 0x93f: 0x1593,\n\t// Block 0x25, offset 0x940\n\t0x946: 0xa000, 0x94b: 0xa000,\n\t0x94c: 0x3f08, 0x94d: 0xa000, 0x94e: 0x3f10, 0x94f: 0xa000, 0x950: 0x3f18, 0x951: 0xa000,\n\t0x952: 0x3f20, 0x953: 0xa000, 0x954: 0x3f28, 0x955: 0xa000, 0x956: 0x3f30, 0x957: 0xa000,\n\t0x958: 0x3f38, 0x959: 0xa000, 0x95a: 0x3f40, 0x95b: 0xa000, 0x95c: 0x3f48, 0x95d: 0xa000,\n\t0x95e: 0x3f50, 0x95f: 0xa000, 0x960: 0x3f58, 0x961: 0xa000, 0x962: 0x3f60,\n\t0x964: 0xa000, 0x965: 0x3f68, 0x966: 0xa000, 0x967: 0x3f70, 0x968: 0xa000, 0x969: 0x3f78,\n\t0x96f: 0xa000,\n\t0x970: 0x3f80, 0x971: 0x3f88, 0x972: 0xa000, 0x973: 0x3f90, 0x974: 0x3f98, 0x975: 0xa000,\n\t0x976: 0x3fa0, 0x977: 0x3fa8, 0x978: 0xa000, 0x979: 0x3fb0, 0x97a: 0x3fb8, 0x97b: 0xa000,\n\t0x97c: 0x3fc0, 0x97d: 0x3fc8,\n\t// Block 0x26, offset 0x980\n\t0x994: 0x3f00,\n\t0x999: 0x9903, 0x99a: 0x9903, 0x99b: 0x42dc, 0x99c: 0x42e2, 0x99d: 0xa000,\n\t0x99e: 0x3fd0, 0x99f: 0x26b4,\n\t0x9a6: 0xa000,\n\t0x9ab: 0xa000, 0x9ac: 0x3fe0, 0x9ad: 0xa000, 0x9ae: 0x3fe8, 0x9af: 0xa000,\n\t0x9b0: 0x3ff0, 0x9b1: 0xa000, 0x9b2: 0x3ff8, 0x9b3: 0xa000, 0x9b4: 0x4000, 0x9b5: 0xa000,\n\t0x9b6: 0x4008, 0x9b7: 0xa000, 0x9b8: 0x4010, 0x9b9: 0xa000, 0x9ba: 0x4018, 0x9bb: 0xa000,\n\t0x9bc: 0x4020, 0x9bd: 0xa000, 0x9be: 0x4028, 0x9bf: 0xa000,\n\t// Block 0x27, offset 0x9c0\n\t0x9c0: 0x4030, 0x9c1: 0xa000, 0x9c2: 0x4038, 0x9c4: 0xa000, 0x9c5: 0x4040,\n\t0x9c6: 0xa000, 0x9c7: 0x4048, 0x9c8: 0xa000, 0x9c9: 0x4050,\n\t0x9cf: 0xa000, 0x9d0: 0x4058, 0x9d1: 0x4060,\n\t0x9d2: 0xa000, 0x9d3: 0x4068, 0x9d4: 0x4070, 0x9d5: 0xa000, 0x9d6: 0x4078, 0x9d7: 0x4080,\n\t0x9d8: 0xa000, 0x9d9: 0x4088, 0x9da: 0x4090, 0x9db: 0xa000, 0x9dc: 0x4098, 0x9dd: 0x40a0,\n\t0x9ef: 0xa000,\n\t0x9f0: 0xa000, 0x9f1: 0xa000, 0x9f2: 0xa000, 0x9f4: 0x3fd8,\n\t0x9f7: 0x40a8, 0x9f8: 0x40b0, 0x9f9: 0x40b8, 0x9fa: 0x40c0,\n\t0x9fd: 0xa000, 0x9fe: 0x40c8, 0x9ff: 0x26c9,\n\t// Block 0x28, offset 0xa00\n\t0xa00: 0x0367, 0xa01: 0x032b, 0xa02: 0x032f, 0xa03: 0x0333, 0xa04: 0x037b, 0xa05: 0x0337,\n\t0xa06: 0x033b, 0xa07: 0x033f, 0xa08: 0x0343, 0xa09: 0x0347, 0xa0a: 0x034b, 0xa0b: 0x034f,\n\t0xa0c: 0x0353, 0xa0d: 0x0357, 0xa0e: 0x035b, 0xa0f: 0x49bd, 0xa10: 0x49c3, 0xa11: 0x49c9,\n\t0xa12: 0x49cf, 0xa13: 0x49d5, 0xa14: 0x49db, 0xa15: 0x49e1, 0xa16: 0x49e7, 0xa17: 0x49ed,\n\t0xa18: 0x49f3, 0xa19: 0x49f9, 0xa1a: 0x49ff, 0xa1b: 0x4a05, 0xa1c: 0x4a0b, 0xa1d: 0x4a11,\n\t0xa1e: 0x4a17, 0xa1f: 0x4a1d, 0xa20: 0x4a23, 0xa21: 0x4a29, 0xa22: 0x4a2f, 0xa23: 0x4a35,\n\t0xa24: 0x03c3, 0xa25: 0x035f, 0xa26: 0x0363, 0xa27: 0x03e7, 0xa28: 0x03eb, 0xa29: 0x03ef,\n\t0xa2a: 0x03f3, 0xa2b: 0x03f7, 0xa2c: 0x03fb, 0xa2d: 0x03ff, 0xa2e: 0x036b, 0xa2f: 0x0403,\n\t0xa30: 0x0407, 0xa31: 0x036f, 0xa32: 0x0373, 0xa33: 0x0377, 0xa34: 0x037f, 0xa35: 0x0383,\n\t0xa36: 0x0387, 0xa37: 0x038b, 0xa38: 0x038f, 0xa39: 0x0393, 0xa3a: 0x0397, 0xa3b: 0x039b,\n\t0xa3c: 0x039f, 0xa3d: 0x03a3, 0xa3e: 0x03a7, 0xa3f: 0x03ab,\n\t// Block 0x29, offset 0xa40\n\t0xa40: 0x03af, 0xa41: 0x03b3, 0xa42: 0x040b, 0xa43: 0x040f, 0xa44: 0x03b7, 0xa45: 0x03bb,\n\t0xa46: 0x03bf, 0xa47: 0x03c7, 0xa48: 0x03cb, 0xa49: 0x03cf, 0xa4a: 0x03d3, 0xa4b: 0x03d7,\n\t0xa4c: 0x03db, 0xa4d: 0x03df, 0xa4e: 0x03e3,\n\t0xa52: 0x06bf, 0xa53: 0x071b, 0xa54: 0x06cb, 0xa55: 0x097b, 0xa56: 0x06cf, 0xa57: 0x06e7,\n\t0xa58: 0x06d3, 0xa59: 0x0f93, 0xa5a: 0x0707, 0xa5b: 0x06db, 0xa5c: 0x06c3, 0xa5d: 0x09ff,\n\t0xa5e: 0x098f, 0xa5f: 0x072f,\n\t// Block 0x2a, offset 0xa80\n\t0xa80: 0x2054, 0xa81: 0x205a, 0xa82: 0x2060, 0xa83: 0x2066, 0xa84: 0x206c, 0xa85: 0x2072,\n\t0xa86: 0x2078, 0xa87: 0x207e, 0xa88: 0x2084, 0xa89: 0x208a, 0xa8a: 0x2090, 0xa8b: 0x2096,\n\t0xa8c: 0x209c, 0xa8d: 0x20a2, 0xa8e: 0x2726, 0xa8f: 0x272f, 0xa90: 0x2738, 0xa91: 0x2741,\n\t0xa92: 0x274a, 0xa93: 0x2753, 0xa94: 0x275c, 0xa95: 0x2765, 0xa96: 0x276e, 0xa97: 0x2780,\n\t0xa98: 0x2789, 0xa99: 0x2792, 0xa9a: 0x279b, 0xa9b: 0x27a4, 0xa9c: 0x2777, 0xa9d: 0x2bac,\n\t0xa9e: 0x2aed, 0xaa0: 0x20a8, 0xaa1: 0x20c0, 0xaa2: 0x20b4, 0xaa3: 0x2108,\n\t0xaa4: 0x20c6, 0xaa5: 0x20e4, 0xaa6: 0x20ae, 0xaa7: 0x20de, 0xaa8: 0x20ba, 0xaa9: 0x20f0,\n\t0xaaa: 0x2120, 0xaab: 0x213e, 0xaac: 0x2138, 0xaad: 0x212c, 0xaae: 0x217a, 0xaaf: 0x210e,\n\t0xab0: 0x211a, 0xab1: 0x2132, 0xab2: 0x2126, 0xab3: 0x2150, 0xab4: 0x20fc, 0xab5: 0x2144,\n\t0xab6: 0x216e, 0xab7: 0x2156, 0xab8: 0x20ea, 0xab9: 0x20cc, 0xaba: 0x2102, 0xabb: 0x2114,\n\t0xabc: 0x214a, 0xabd: 0x20d2, 0xabe: 0x2174, 0xabf: 0x20f6,\n\t// Block 0x2b, offset 0xac0\n\t0xac0: 0x215c, 0xac1: 0x20d8, 0xac2: 0x2162, 0xac3: 0x2168, 0xac4: 0x092f, 0xac5: 0x0b03,\n\t0xac6: 0x0ca7, 0xac7: 0x10c7,\n\t0xad0: 0x1bc4, 0xad1: 0x18a9,\n\t0xad2: 0x18ac, 0xad3: 0x18af, 0xad4: 0x18b2, 0xad5: 0x18b5, 0xad6: 0x18b8, 0xad7: 0x18bb,\n\t0xad8: 0x18be, 0xad9: 0x18c1, 0xada: 0x18ca, 0xadb: 0x18cd, 0xadc: 0x18d0, 0xadd: 0x18d3,\n\t0xade: 0x18d6, 0xadf: 0x18d9, 0xae0: 0x0313, 0xae1: 0x031b, 0xae2: 0x031f, 0xae3: 0x0327,\n\t0xae4: 0x032b, 0xae5: 0x032f, 0xae6: 0x0337, 0xae7: 0x033f, 0xae8: 0x0343, 0xae9: 0x034b,\n\t0xaea: 0x034f, 0xaeb: 0x0353, 0xaec: 0x0357, 0xaed: 0x035b, 0xaee: 0x2e18, 0xaef: 0x2e20,\n\t0xaf0: 0x2e28, 0xaf1: 0x2e30, 0xaf2: 0x2e38, 0xaf3: 0x2e40, 0xaf4: 0x2e48, 0xaf5: 0x2e50,\n\t0xaf6: 0x2e60, 0xaf7: 0x2e68, 0xaf8: 0x2e70, 0xaf9: 0x2e78, 0xafa: 0x2e80, 0xafb: 0x2e88,\n\t0xafc: 0x2ed3, 0xafd: 0x2e9b, 0xafe: 0x2e58,\n\t// Block 0x2c, offset 0xb00\n\t0xb00: 0x06bf, 0xb01: 0x071b, 0xb02: 0x06cb, 0xb03: 0x097b, 0xb04: 0x071f, 0xb05: 0x07af,\n\t0xb06: 0x06c7, 0xb07: 0x07ab, 0xb08: 0x070b, 0xb09: 0x0887, 0xb0a: 0x0d07, 0xb0b: 0x0e8f,\n\t0xb0c: 0x0dd7, 0xb0d: 0x0d1b, 0xb0e: 0x145f, 0xb0f: 0x098b, 0xb10: 0x0ccf, 0xb11: 0x0d4b,\n\t0xb12: 0x0d0b, 0xb13: 0x104b, 0xb14: 0x08fb, 0xb15: 0x0f03, 0xb16: 0x1387, 0xb17: 0x105f,\n\t0xb18: 0x0843, 0xb19: 0x108f, 0xb1a: 0x0f9b, 0xb1b: 0x0a17, 0xb1c: 0x140f, 0xb1d: 0x077f,\n\t0xb1e: 0x08ab, 0xb1f: 0x0df7, 0xb20: 0x1527, 0xb21: 0x0743, 0xb22: 0x07d3, 0xb23: 0x0d9b,\n\t0xb24: 0x06cf, 0xb25: 0x06e7, 0xb26: 0x06d3, 0xb27: 0x0adb, 0xb28: 0x08ef, 0xb29: 0x087f,\n\t0xb2a: 0x0a57, 0xb2b: 0x0a4b, 0xb2c: 0x0feb, 0xb2d: 0x073f, 0xb2e: 0x139b, 0xb2f: 0x089b,\n\t0xb30: 0x09f3, 0xb31: 0x18dc, 0xb32: 0x18df, 0xb33: 0x18e2, 0xb34: 0x18e5, 0xb35: 0x18ee,\n\t0xb36: 0x18f1, 0xb37: 0x18f4, 0xb38: 0x18f7, 0xb39: 0x18fa, 0xb3a: 0x18fd, 0xb3b: 0x1900,\n\t0xb3c: 0x1903, 0xb3d: 0x1906, 0xb3e: 0x1909, 0xb3f: 0x1912,\n\t// Block 0x2d, offset 0xb40\n\t0xb40: 0x1cc6, 0xb41: 0x1cd5, 0xb42: 0x1ce4, 0xb43: 0x1cf3, 0xb44: 0x1d02, 0xb45: 0x1d11,\n\t0xb46: 0x1d20, 0xb47: 0x1d2f, 0xb48: 0x1d3e, 0xb49: 0x218c, 0xb4a: 0x219e, 0xb4b: 0x21b0,\n\t0xb4c: 0x1954, 0xb4d: 0x1c04, 0xb4e: 0x19d2, 0xb4f: 0x1ba8, 0xb50: 0x04cb, 0xb51: 0x04d3,\n\t0xb52: 0x04db, 0xb53: 0x04e3, 0xb54: 0x04eb, 0xb55: 0x04ef, 0xb56: 0x04f3, 0xb57: 0x04f7,\n\t0xb58: 0x04fb, 0xb59: 0x04ff, 0xb5a: 0x0503, 0xb5b: 0x0507, 0xb5c: 0x050b, 0xb5d: 0x050f,\n\t0xb5e: 0x0513, 0xb5f: 0x0517, 0xb60: 0x051b, 0xb61: 0x0523, 0xb62: 0x0527, 0xb63: 0x052b,\n\t0xb64: 0x052f, 0xb65: 0x0533, 0xb66: 0x0537, 0xb67: 0x053b, 0xb68: 0x053f, 0xb69: 0x0543,\n\t0xb6a: 0x0547, 0xb6b: 0x054b, 0xb6c: 0x054f, 0xb6d: 0x0553, 0xb6e: 0x0557, 0xb6f: 0x055b,\n\t0xb70: 0x055f, 0xb71: 0x0563, 0xb72: 0x0567, 0xb73: 0x056f, 0xb74: 0x0577, 0xb75: 0x057f,\n\t0xb76: 0x0583, 0xb77: 0x0587, 0xb78: 0x058b, 0xb79: 0x058f, 0xb7a: 0x0593, 0xb7b: 0x0597,\n\t0xb7c: 0x059b, 0xb7d: 0x059f, 0xb7e: 0x05a3,\n\t// Block 0x2e, offset 0xb80\n\t0xb80: 0x2b0c, 0xb81: 0x29a8, 0xb82: 0x2b1c, 0xb83: 0x2880, 0xb84: 0x2ee4, 0xb85: 0x288a,\n\t0xb86: 0x2894, 0xb87: 0x2f28, 0xb88: 0x29b5, 0xb89: 0x289e, 0xb8a: 0x28a8, 0xb8b: 0x28b2,\n\t0xb8c: 0x29dc, 0xb8d: 0x29e9, 0xb8e: 0x29c2, 0xb8f: 0x29cf, 0xb90: 0x2ea9, 0xb91: 0x29f6,\n\t0xb92: 0x2a03, 0xb93: 0x2bbe, 0xb94: 0x26bb, 0xb95: 0x2bd1, 0xb96: 0x2be4, 0xb97: 0x2b2c,\n\t0xb98: 0x2a10, 0xb99: 0x2bf7, 0xb9a: 0x2c0a, 0xb9b: 0x2a1d, 0xb9c: 0x28bc, 0xb9d: 0x28c6,\n\t0xb9e: 0x2eb7, 0xb9f: 0x2a2a, 0xba0: 0x2b3c, 0xba1: 0x2ef5, 0xba2: 0x28d0, 0xba3: 0x28da,\n\t0xba4: 0x2a37, 0xba5: 0x28e4, 0xba6: 0x28ee, 0xba7: 0x26d0, 0xba8: 0x26d7, 0xba9: 0x28f8,\n\t0xbaa: 0x2902, 0xbab: 0x2c1d, 0xbac: 0x2a44, 0xbad: 0x2b4c, 0xbae: 0x2c30, 0xbaf: 0x2a51,\n\t0xbb0: 0x2916, 0xbb1: 0x290c, 0xbb2: 0x2f3c, 0xbb3: 0x2a5e, 0xbb4: 0x2c43, 0xbb5: 0x2920,\n\t0xbb6: 0x2b5c, 0xbb7: 0x292a, 0xbb8: 0x2a78, 0xbb9: 0x2934, 0xbba: 0x2a85, 0xbbb: 0x2f06,\n\t0xbbc: 0x2a6b, 0xbbd: 0x2b6c, 0xbbe: 0x2a92, 0xbbf: 0x26de,\n\t// Block 0x2f, offset 0xbc0\n\t0xbc0: 0x2f17, 0xbc1: 0x293e, 0xbc2: 0x2948, 0xbc3: 0x2a9f, 0xbc4: 0x2952, 0xbc5: 0x295c,\n\t0xbc6: 0x2966, 0xbc7: 0x2b7c, 0xbc8: 0x2aac, 0xbc9: 0x26e5, 0xbca: 0x2c56, 0xbcb: 0x2e90,\n\t0xbcc: 0x2b8c, 0xbcd: 0x2ab9, 0xbce: 0x2ec5, 0xbcf: 0x2970, 0xbd0: 0x297a, 0xbd1: 0x2ac6,\n\t0xbd2: 0x26ec, 0xbd3: 0x2ad3, 0xbd4: 0x2b9c, 0xbd5: 0x26f3, 0xbd6: 0x2c69, 0xbd7: 0x2984,\n\t0xbd8: 0x1cb7, 0xbd9: 0x1ccb, 0xbda: 0x1cda, 0xbdb: 0x1ce9, 0xbdc: 0x1cf8, 0xbdd: 0x1d07,\n\t0xbde: 0x1d16, 0xbdf: 0x1d25, 0xbe0: 0x1d34, 0xbe1: 0x1d43, 0xbe2: 0x2192, 0xbe3: 0x21a4,\n\t0xbe4: 0x21b6, 0xbe5: 0x21c2, 0xbe6: 0x21ce, 0xbe7: 0x21da, 0xbe8: 0x21e6, 0xbe9: 0x21f2,\n\t0xbea: 0x21fe, 0xbeb: 0x220a, 0xbec: 0x2246, 0xbed: 0x2252, 0xbee: 0x225e, 0xbef: 0x226a,\n\t0xbf0: 0x2276, 0xbf1: 0x1c14, 0xbf2: 0x19c6, 0xbf3: 0x1936, 0xbf4: 0x1be4, 0xbf5: 0x1a47,\n\t0xbf6: 0x1a56, 0xbf7: 0x19cc, 0xbf8: 0x1bfc, 0xbf9: 0x1c00, 0xbfa: 0x1960, 0xbfb: 0x2701,\n\t0xbfc: 0x270f, 0xbfd: 0x26fa, 0xbfe: 0x2708, 0xbff: 0x2ae0,\n\t// Block 0x30, offset 0xc00\n\t0xc00: 0x1a4a, 0xc01: 0x1a32, 0xc02: 0x1c60, 0xc03: 0x1a1a, 0xc04: 0x19f3, 0xc05: 0x1969,\n\t0xc06: 0x1978, 0xc07: 0x1948, 0xc08: 0x1bf0, 0xc09: 0x1d52, 0xc0a: 0x1a4d, 0xc0b: 0x1a35,\n\t0xc0c: 0x1c64, 0xc0d: 0x1c70, 0xc0e: 0x1a26, 0xc0f: 0x19fc, 0xc10: 0x1957, 0xc11: 0x1c1c,\n\t0xc12: 0x1bb0, 0xc13: 0x1b9c, 0xc14: 0x1bcc, 0xc15: 0x1c74, 0xc16: 0x1a29, 0xc17: 0x19c9,\n\t0xc18: 0x19ff, 0xc19: 0x19de, 0xc1a: 0x1a41, 0xc1b: 0x1c78, 0xc1c: 0x1a2c, 0xc1d: 0x19c0,\n\t0xc1e: 0x1a02, 0xc1f: 0x1c3c, 0xc20: 0x1bf4, 0xc21: 0x1a14, 0xc22: 0x1c24, 0xc23: 0x1c40,\n\t0xc24: 0x1bf8, 0xc25: 0x1a17, 0xc26: 0x1c28, 0xc27: 0x22e8, 0xc28: 0x22fc, 0xc29: 0x1996,\n\t0xc2a: 0x1c20, 0xc2b: 0x1bb4, 0xc2c: 0x1ba0, 0xc2d: 0x1c48, 0xc2e: 0x2716, 0xc2f: 0x27ad,\n\t0xc30: 0x1a59, 0xc31: 0x1a44, 0xc32: 0x1c7c, 0xc33: 0x1a2f, 0xc34: 0x1a50, 0xc35: 0x1a38,\n\t0xc36: 0x1c68, 0xc37: 0x1a1d, 0xc38: 0x19f6, 0xc39: 0x1981, 0xc3a: 0x1a53, 0xc3b: 0x1a3b,\n\t0xc3c: 0x1c6c, 0xc3d: 0x1a20, 0xc3e: 0x19f9, 0xc3f: 0x1984,\n\t// Block 0x31, offset 0xc40\n\t0xc40: 0x1c2c, 0xc41: 0x1bb8, 0xc42: 0x1d4d, 0xc43: 0x1939, 0xc44: 0x19ba, 0xc45: 0x19bd,\n\t0xc46: 0x22f5, 0xc47: 0x1b94, 0xc48: 0x19c3, 0xc49: 0x194b, 0xc4a: 0x19e1, 0xc4b: 0x194e,\n\t0xc4c: 0x19ea, 0xc4d: 0x196c, 0xc4e: 0x196f, 0xc4f: 0x1a05, 0xc50: 0x1a0b, 0xc51: 0x1a0e,\n\t0xc52: 0x1c30, 0xc53: 0x1a11, 0xc54: 0x1a23, 0xc55: 0x1c38, 0xc56: 0x1c44, 0xc57: 0x1990,\n\t0xc58: 0x1d57, 0xc59: 0x1bbc, 0xc5a: 0x1993, 0xc5b: 0x1a5c, 0xc5c: 0x19a5, 0xc5d: 0x19b4,\n\t0xc5e: 0x22e2, 0xc5f: 0x22dc, 0xc60: 0x1cc1, 0xc61: 0x1cd0, 0xc62: 0x1cdf, 0xc63: 0x1cee,\n\t0xc64: 0x1cfd, 0xc65: 0x1d0c, 0xc66: 0x1d1b, 0xc67: 0x1d2a, 0xc68: 0x1d39, 0xc69: 0x2186,\n\t0xc6a: 0x2198, 0xc6b: 0x21aa, 0xc6c: 0x21bc, 0xc6d: 0x21c8, 0xc6e: 0x21d4, 0xc6f: 0x21e0,\n\t0xc70: 0x21ec, 0xc71: 0x21f8, 0xc72: 0x2204, 0xc73: 0x2240, 0xc74: 0x224c, 0xc75: 0x2258,\n\t0xc76: 0x2264, 0xc77: 0x2270, 0xc78: 0x227c, 0xc79: 0x2282, 0xc7a: 0x2288, 0xc7b: 0x228e,\n\t0xc7c: 0x2294, 0xc7d: 0x22a6, 0xc7e: 0x22ac, 0xc7f: 0x1c10,\n\t// Block 0x32, offset 0xc80\n\t0xc80: 0x1377, 0xc81: 0x0cfb, 0xc82: 0x13d3, 0xc83: 0x139f, 0xc84: 0x0e57, 0xc85: 0x06eb,\n\t0xc86: 0x08df, 0xc87: 0x162b, 0xc88: 0x162b, 0xc89: 0x0a0b, 0xc8a: 0x145f, 0xc8b: 0x0943,\n\t0xc8c: 0x0a07, 0xc8d: 0x0bef, 0xc8e: 0x0fcf, 0xc8f: 0x115f, 0xc90: 0x1297, 0xc91: 0x12d3,\n\t0xc92: 0x1307, 0xc93: 0x141b, 0xc94: 0x0d73, 0xc95: 0x0dff, 0xc96: 0x0eab, 0xc97: 0x0f43,\n\t0xc98: 0x125f, 0xc99: 0x1447, 0xc9a: 0x1573, 0xc9b: 0x070f, 0xc9c: 0x08b3, 0xc9d: 0x0d87,\n\t0xc9e: 0x0ecf, 0xc9f: 0x1293, 0xca0: 0x15c3, 0xca1: 0x0ab3, 0xca2: 0x0e77, 0xca3: 0x1283,\n\t0xca4: 0x1317, 0xca5: 0x0c23, 0xca6: 0x11bb, 0xca7: 0x12df, 0xca8: 0x0b1f, 0xca9: 0x0d0f,\n\t0xcaa: 0x0e17, 0xcab: 0x0f1b, 0xcac: 0x1427, 0xcad: 0x074f, 0xcae: 0x07e7, 0xcaf: 0x0853,\n\t0xcb0: 0x0c8b, 0xcb1: 0x0d7f, 0xcb2: 0x0ecb, 0xcb3: 0x0fef, 0xcb4: 0x1177, 0xcb5: 0x128b,\n\t0xcb6: 0x12a3, 0xcb7: 0x13c7, 0xcb8: 0x14ef, 0xcb9: 0x15a3, 0xcba: 0x15bf, 0xcbb: 0x102b,\n\t0xcbc: 0x106b, 0xcbd: 0x1123, 0xcbe: 0x1243, 0xcbf: 0x147b,\n\t// Block 0x33, offset 0xcc0\n\t0xcc0: 0x15cb, 0xcc1: 0x134b, 0xcc2: 0x09c7, 0xcc3: 0x0b3b, 0xcc4: 0x10db, 0xcc5: 0x119b,\n\t0xcc6: 0x0eff, 0xcc7: 0x1033, 0xcc8: 0x1397, 0xcc9: 0x14e7, 0xcca: 0x09c3, 0xccb: 0x0a8f,\n\t0xccc: 0x0d77, 0xccd: 0x0e2b, 0xcce: 0x0e5f, 0xccf: 0x1113, 0xcd0: 0x113b, 0xcd1: 0x14a7,\n\t0xcd2: 0x084f, 0xcd3: 0x11a7, 0xcd4: 0x07f3, 0xcd5: 0x07ef, 0xcd6: 0x1097, 0xcd7: 0x1127,\n\t0xcd8: 0x125b, 0xcd9: 0x14af, 0xcda: 0x1367, 0xcdb: 0x0c27, 0xcdc: 0x0d73, 0xcdd: 0x1357,\n\t0xcde: 0x06f7, 0xcdf: 0x0a63, 0xce0: 0x0b93, 0xce1: 0x0f2f, 0xce2: 0x0faf, 0xce3: 0x0873,\n\t0xce4: 0x103b, 0xce5: 0x075f, 0xce6: 0x0b77, 0xce7: 0x06d7, 0xce8: 0x0deb, 0xce9: 0x0ca3,\n\t0xcea: 0x110f, 0xceb: 0x08c7, 0xcec: 0x09b3, 0xced: 0x0ffb, 0xcee: 0x1263, 0xcef: 0x133b,\n\t0xcf0: 0x0db7, 0xcf1: 0x13f7, 0xcf2: 0x0de3, 0xcf3: 0x0c37, 0xcf4: 0x121b, 0xcf5: 0x0c57,\n\t0xcf6: 0x0fab, 0xcf7: 0x072b, 0xcf8: 0x07a7, 0xcf9: 0x07eb, 0xcfa: 0x0d53, 0xcfb: 0x10fb,\n\t0xcfc: 0x11f3, 0xcfd: 0x1347, 0xcfe: 0x145b, 0xcff: 0x085b,\n\t// Block 0x34, offset 0xd00\n\t0xd00: 0x090f, 0xd01: 0x0a17, 0xd02: 0x0b2f, 0xd03: 0x0cbf, 0xd04: 0x0e7b, 0xd05: 0x103f,\n\t0xd06: 0x1497, 0xd07: 0x157b, 0xd08: 0x15cf, 0xd09: 0x15e7, 0xd0a: 0x0837, 0xd0b: 0x0cf3,\n\t0xd0c: 0x0da3, 0xd0d: 0x13eb, 0xd0e: 0x0afb, 0xd0f: 0x0bd7, 0xd10: 0x0bf3, 0xd11: 0x0c83,\n\t0xd12: 0x0e6b, 0xd13: 0x0eb7, 0xd14: 0x0f67, 0xd15: 0x108b, 0xd16: 0x112f, 0xd17: 0x1193,\n\t0xd18: 0x13db, 0xd19: 0x126b, 0xd1a: 0x1403, 0xd1b: 0x147f, 0xd1c: 0x080f, 0xd1d: 0x083b,\n\t0xd1e: 0x0923, 0xd1f: 0x0ea7, 0xd20: 0x12f3, 0xd21: 0x133b, 0xd22: 0x0b1b, 0xd23: 0x0b8b,\n\t0xd24: 0x0c4f, 0xd25: 0x0daf, 0xd26: 0x10d7, 0xd27: 0x0f23, 0xd28: 0x073b, 0xd29: 0x097f,\n\t0xd2a: 0x0a63, 0xd2b: 0x0ac7, 0xd2c: 0x0b97, 0xd2d: 0x0f3f, 0xd2e: 0x0f5b, 0xd2f: 0x116b,\n\t0xd30: 0x118b, 0xd31: 0x1463, 0xd32: 0x14e3, 0xd33: 0x14f3, 0xd34: 0x152f, 0xd35: 0x0753,\n\t0xd36: 0x107f, 0xd37: 0x144f, 0xd38: 0x14cb, 0xd39: 0x0baf, 0xd3a: 0x0717, 0xd3b: 0x0777,\n\t0xd3c: 0x0a67, 0xd3d: 0x0a87, 0xd3e: 0x0caf, 0xd3f: 0x0d73,\n\t// Block 0x35, offset 0xd40\n\t0xd40: 0x0ec3, 0xd41: 0x0fcb, 0xd42: 0x1277, 0xd43: 0x1417, 0xd44: 0x1623, 0xd45: 0x0ce3,\n\t0xd46: 0x14a3, 0xd47: 0x0833, 0xd48: 0x0d2f, 0xd49: 0x0d3b, 0xd4a: 0x0e0f, 0xd4b: 0x0e47,\n\t0xd4c: 0x0f4b, 0xd4d: 0x0fa7, 0xd4e: 0x1027, 0xd4f: 0x110b, 0xd50: 0x153b, 0xd51: 0x07af,\n\t0xd52: 0x0c03, 0xd53: 0x14b3, 0xd54: 0x0767, 0xd55: 0x0aab, 0xd56: 0x0e2f, 0xd57: 0x13df,\n\t0xd58: 0x0b67, 0xd59: 0x0bb7, 0xd5a: 0x0d43, 0xd5b: 0x0f2f, 0xd5c: 0x14bb, 0xd5d: 0x0817,\n\t0xd5e: 0x08ff, 0xd5f: 0x0a97, 0xd60: 0x0cd3, 0xd61: 0x0d1f, 0xd62: 0x0d5f, 0xd63: 0x0df3,\n\t0xd64: 0x0f47, 0xd65: 0x0fbb, 0xd66: 0x1157, 0xd67: 0x12f7, 0xd68: 0x1303, 0xd69: 0x1457,\n\t0xd6a: 0x14d7, 0xd6b: 0x0883, 0xd6c: 0x0e4b, 0xd6d: 0x0903, 0xd6e: 0x0ec7, 0xd6f: 0x0f6b,\n\t0xd70: 0x1287, 0xd71: 0x14bf, 0xd72: 0x15ab, 0xd73: 0x15d3, 0xd74: 0x0d37, 0xd75: 0x0e27,\n\t0xd76: 0x11c3, 0xd77: 0x10b7, 0xd78: 0x10c3, 0xd79: 0x10e7, 0xd7a: 0x0f17, 0xd7b: 0x0e9f,\n\t0xd7c: 0x1363, 0xd7d: 0x0733, 0xd7e: 0x122b, 0xd7f: 0x081b,\n\t// Block 0x36, offset 0xd80\n\t0xd80: 0x080b, 0xd81: 0x0b0b, 0xd82: 0x0c2b, 0xd83: 0x10f3, 0xd84: 0x0a53, 0xd85: 0x0e03,\n\t0xd86: 0x0cef, 0xd87: 0x13e7, 0xd88: 0x12e7, 0xd89: 0x14ab, 0xd8a: 0x1323, 0xd8b: 0x0b27,\n\t0xd8c: 0x0787, 0xd8d: 0x095b, 0xd90: 0x09af,\n\t0xd92: 0x0cdf, 0xd95: 0x07f7, 0xd96: 0x0f1f, 0xd97: 0x0fe3,\n\t0xd98: 0x1047, 0xd99: 0x1063, 0xd9a: 0x1067, 0xd9b: 0x107b, 0xd9c: 0x14fb, 0xd9d: 0x10eb,\n\t0xd9e: 0x116f, 0xda0: 0x128f, 0xda2: 0x1353,\n\t0xda5: 0x1407, 0xda6: 0x1433,\n\t0xdaa: 0x154f, 0xdab: 0x1553, 0xdac: 0x1557, 0xdad: 0x15bb, 0xdae: 0x142b, 0xdaf: 0x14c7,\n\t0xdb0: 0x0757, 0xdb1: 0x077b, 0xdb2: 0x078f, 0xdb3: 0x084b, 0xdb4: 0x0857, 0xdb5: 0x0897,\n\t0xdb6: 0x094b, 0xdb7: 0x0967, 0xdb8: 0x096f, 0xdb9: 0x09ab, 0xdba: 0x09b7, 0xdbb: 0x0a93,\n\t0xdbc: 0x0a9b, 0xdbd: 0x0ba3, 0xdbe: 0x0bcb, 0xdbf: 0x0bd3,\n\t// Block 0x37, offset 0xdc0\n\t0xdc0: 0x0beb, 0xdc1: 0x0c97, 0xdc2: 0x0cc7, 0xdc3: 0x0ce7, 0xdc4: 0x0d57, 0xdc5: 0x0e1b,\n\t0xdc6: 0x0e37, 0xdc7: 0x0e67, 0xdc8: 0x0ebb, 0xdc9: 0x0edb, 0xdca: 0x0f4f, 0xdcb: 0x102f,\n\t0xdcc: 0x104b, 0xdcd: 0x1053, 0xdce: 0x104f, 0xdcf: 0x1057, 0xdd0: 0x105b, 0xdd1: 0x105f,\n\t0xdd2: 0x1073, 0xdd3: 0x1077, 0xdd4: 0x109b, 0xdd5: 0x10af, 0xdd6: 0x10cb, 0xdd7: 0x112f,\n\t0xdd8: 0x1137, 0xdd9: 0x113f, 0xdda: 0x1153, 0xddb: 0x117b, 0xddc: 0x11cb, 0xddd: 0x11ff,\n\t0xdde: 0x11ff, 0xddf: 0x1267, 0xde0: 0x130f, 0xde1: 0x1327, 0xde2: 0x135b, 0xde3: 0x135f,\n\t0xde4: 0x13a3, 0xde5: 0x13a7, 0xde6: 0x13ff, 0xde7: 0x1407, 0xde8: 0x14db, 0xde9: 0x151f,\n\t0xdea: 0x1537, 0xdeb: 0x0b9b, 0xdec: 0x171e, 0xded: 0x11e3,\n\t0xdf0: 0x06df, 0xdf1: 0x07e3, 0xdf2: 0x07a3, 0xdf3: 0x074b, 0xdf4: 0x078b, 0xdf5: 0x07b7,\n\t0xdf6: 0x0847, 0xdf7: 0x0863, 0xdf8: 0x094b, 0xdf9: 0x0937, 0xdfa: 0x0947, 0xdfb: 0x0963,\n\t0xdfc: 0x09af, 0xdfd: 0x09bf, 0xdfe: 0x0a03, 0xdff: 0x0a0f,\n\t// Block 0x38, offset 0xe00\n\t0xe00: 0x0a2b, 0xe01: 0x0a3b, 0xe02: 0x0b23, 0xe03: 0x0b2b, 0xe04: 0x0b5b, 0xe05: 0x0b7b,\n\t0xe06: 0x0bab, 0xe07: 0x0bc3, 0xe08: 0x0bb3, 0xe09: 0x0bd3, 0xe0a: 0x0bc7, 0xe0b: 0x0beb,\n\t0xe0c: 0x0c07, 0xe0d: 0x0c5f, 0xe0e: 0x0c6b, 0xe0f: 0x0c73, 0xe10: 0x0c9b, 0xe11: 0x0cdf,\n\t0xe12: 0x0d0f, 0xe13: 0x0d13, 0xe14: 0x0d27, 0xe15: 0x0da7, 0xe16: 0x0db7, 0xe17: 0x0e0f,\n\t0xe18: 0x0e5b, 0xe19: 0x0e53, 0xe1a: 0x0e67, 0xe1b: 0x0e83, 0xe1c: 0x0ebb, 0xe1d: 0x1013,\n\t0xe1e: 0x0edf, 0xe1f: 0x0f13, 0xe20: 0x0f1f, 0xe21: 0x0f5f, 0xe22: 0x0f7b, 0xe23: 0x0f9f,\n\t0xe24: 0x0fc3, 0xe25: 0x0fc7, 0xe26: 0x0fe3, 0xe27: 0x0fe7, 0xe28: 0x0ff7, 0xe29: 0x100b,\n\t0xe2a: 0x1007, 0xe2b: 0x1037, 0xe2c: 0x10b3, 0xe2d: 0x10cb, 0xe2e: 0x10e3, 0xe2f: 0x111b,\n\t0xe30: 0x112f, 0xe31: 0x114b, 0xe32: 0x117b, 0xe33: 0x122f, 0xe34: 0x1257, 0xe35: 0x12cb,\n\t0xe36: 0x1313, 0xe37: 0x131f, 0xe38: 0x1327, 0xe39: 0x133f, 0xe3a: 0x1353, 0xe3b: 0x1343,\n\t0xe3c: 0x135b, 0xe3d: 0x1357, 0xe3e: 0x134f, 0xe3f: 0x135f,\n\t// Block 0x39, offset 0xe40\n\t0xe40: 0x136b, 0xe41: 0x13a7, 0xe42: 0x13e3, 0xe43: 0x1413, 0xe44: 0x144b, 0xe45: 0x146b,\n\t0xe46: 0x14b7, 0xe47: 0x14db, 0xe48: 0x14fb, 0xe49: 0x150f, 0xe4a: 0x151f, 0xe4b: 0x152b,\n\t0xe4c: 0x1537, 0xe4d: 0x158b, 0xe4e: 0x162b, 0xe4f: 0x16b5, 0xe50: 0x16b0, 0xe51: 0x16e2,\n\t0xe52: 0x0607, 0xe53: 0x062f, 0xe54: 0x0633, 0xe55: 0x1764, 0xe56: 0x1791, 0xe57: 0x1809,\n\t0xe58: 0x1617, 0xe59: 0x1627,\n\t// Block 0x3a, offset 0xe80\n\t0xe80: 0x19d5, 0xe81: 0x19d8, 0xe82: 0x19db, 0xe83: 0x1c08, 0xe84: 0x1c0c, 0xe85: 0x1a5f,\n\t0xe86: 0x1a5f,\n\t0xe93: 0x1d75, 0xe94: 0x1d66, 0xe95: 0x1d6b, 0xe96: 0x1d7a, 0xe97: 0x1d70,\n\t0xe9d: 0x4390,\n\t0xe9e: 0x8115, 0xe9f: 0x4402, 0xea0: 0x022d, 0xea1: 0x0215, 0xea2: 0x021e, 0xea3: 0x0221,\n\t0xea4: 0x0224, 0xea5: 0x0227, 0xea6: 0x022a, 0xea7: 0x0230, 0xea8: 0x0233, 0xea9: 0x0017,\n\t0xeaa: 0x43f0, 0xeab: 0x43f6, 0xeac: 0x44f4, 0xead: 0x44fc, 0xeae: 0x4348, 0xeaf: 0x434e,\n\t0xeb0: 0x4354, 0xeb1: 0x435a, 0xeb2: 0x4366, 0xeb3: 0x436c, 0xeb4: 0x4372, 0xeb5: 0x437e,\n\t0xeb6: 0x4384, 0xeb8: 0x438a, 0xeb9: 0x4396, 0xeba: 0x439c, 0xebb: 0x43a2,\n\t0xebc: 0x43ae, 0xebe: 0x43b4,\n\t// Block 0x3b, offset 0xec0\n\t0xec0: 0x43ba, 0xec1: 0x43c0, 0xec3: 0x43c6, 0xec4: 0x43cc,\n\t0xec6: 0x43d8, 0xec7: 0x43de, 0xec8: 0x43e4, 0xec9: 0x43ea, 0xeca: 0x43fc, 0xecb: 0x4378,\n\t0xecc: 0x4360, 0xecd: 0x43a8, 0xece: 0x43d2, 0xecf: 0x1d7f, 0xed0: 0x0299, 0xed1: 0x0299,\n\t0xed2: 0x02a2, 0xed3: 0x02a2, 0xed4: 0x02a2, 0xed5: 0x02a2, 0xed6: 0x02a5, 0xed7: 0x02a5,\n\t0xed8: 0x02a5, 0xed9: 0x02a5, 0xeda: 0x02ab, 0xedb: 0x02ab, 0xedc: 0x02ab, 0xedd: 0x02ab,\n\t0xede: 0x029f, 0xedf: 0x029f, 0xee0: 0x029f, 0xee1: 0x029f, 0xee2: 0x02a8, 0xee3: 0x02a8,\n\t0xee4: 0x02a8, 0xee5: 0x02a8, 0xee6: 0x029c, 0xee7: 0x029c, 0xee8: 0x029c, 0xee9: 0x029c,\n\t0xeea: 0x02cf, 0xeeb: 0x02cf, 0xeec: 0x02cf, 0xeed: 0x02cf, 0xeee: 0x02d2, 0xeef: 0x02d2,\n\t0xef0: 0x02d2, 0xef1: 0x02d2, 0xef2: 0x02b1, 0xef3: 0x02b1, 0xef4: 0x02b1, 0xef5: 0x02b1,\n\t0xef6: 0x02ae, 0xef7: 0x02ae, 0xef8: 0x02ae, 0xef9: 0x02ae, 0xefa: 0x02b4, 0xefb: 0x02b4,\n\t0xefc: 0x02b4, 0xefd: 0x02b4, 0xefe: 0x02b7, 0xeff: 0x02b7,\n\t// Block 0x3c, offset 0xf00\n\t0xf00: 0x02b7, 0xf01: 0x02b7, 0xf02: 0x02c0, 0xf03: 0x02c0, 0xf04: 0x02bd, 0xf05: 0x02bd,\n\t0xf06: 0x02c3, 0xf07: 0x02c3, 0xf08: 0x02ba, 0xf09: 0x02ba, 0xf0a: 0x02c9, 0xf0b: 0x02c9,\n\t0xf0c: 0x02c6, 0xf0d: 0x02c6, 0xf0e: 0x02d5, 0xf0f: 0x02d5, 0xf10: 0x02d5, 0xf11: 0x02d5,\n\t0xf12: 0x02db, 0xf13: 0x02db, 0xf14: 0x02db, 0xf15: 0x02db, 0xf16: 0x02e1, 0xf17: 0x02e1,\n\t0xf18: 0x02e1, 0xf19: 0x02e1, 0xf1a: 0x02de, 0xf1b: 0x02de, 0xf1c: 0x02de, 0xf1d: 0x02de,\n\t0xf1e: 0x02e4, 0xf1f: 0x02e4, 0xf20: 0x02e7, 0xf21: 0x02e7, 0xf22: 0x02e7, 0xf23: 0x02e7,\n\t0xf24: 0x446e, 0xf25: 0x446e, 0xf26: 0x02ed, 0xf27: 0x02ed, 0xf28: 0x02ed, 0xf29: 0x02ed,\n\t0xf2a: 0x02ea, 0xf2b: 0x02ea, 0xf2c: 0x02ea, 0xf2d: 0x02ea, 0xf2e: 0x0308, 0xf2f: 0x0308,\n\t0xf30: 0x4468, 0xf31: 0x4468,\n\t// Block 0x3d, offset 0xf40\n\t0xf53: 0x02d8, 0xf54: 0x02d8, 0xf55: 0x02d8, 0xf56: 0x02d8, 0xf57: 0x02f6,\n\t0xf58: 0x02f6, 0xf59: 0x02f3, 0xf5a: 0x02f3, 0xf5b: 0x02f9, 0xf5c: 0x02f9, 0xf5d: 0x204f,\n\t0xf5e: 0x02ff, 0xf5f: 0x02ff, 0xf60: 0x02f0, 0xf61: 0x02f0, 0xf62: 0x02fc, 0xf63: 0x02fc,\n\t0xf64: 0x0305, 0xf65: 0x0305, 0xf66: 0x0305, 0xf67: 0x0305, 0xf68: 0x028d, 0xf69: 0x028d,\n\t0xf6a: 0x25aa, 0xf6b: 0x25aa, 0xf6c: 0x261a, 0xf6d: 0x261a, 0xf6e: 0x25e9, 0xf6f: 0x25e9,\n\t0xf70: 0x2605, 0xf71: 0x2605, 0xf72: 0x25fe, 0xf73: 0x25fe, 0xf74: 0x260c, 0xf75: 0x260c,\n\t0xf76: 0x2613, 0xf77: 0x2613, 0xf78: 0x2613, 0xf79: 0x25f0, 0xf7a: 0x25f0, 0xf7b: 0x25f0,\n\t0xf7c: 0x0302, 0xf7d: 0x0302, 0xf7e: 0x0302, 0xf7f: 0x0302,\n\t// Block 0x3e, offset 0xf80\n\t0xf80: 0x25b1, 0xf81: 0x25b8, 0xf82: 0x25d4, 0xf83: 0x25f0, 0xf84: 0x25f7, 0xf85: 0x1d89,\n\t0xf86: 0x1d8e, 0xf87: 0x1d93, 0xf88: 0x1da2, 0xf89: 0x1db1, 0xf8a: 0x1db6, 0xf8b: 0x1dbb,\n\t0xf8c: 0x1dc0, 0xf8d: 0x1dc5, 0xf8e: 0x1dd4, 0xf8f: 0x1de3, 0xf90: 0x1de8, 0xf91: 0x1ded,\n\t0xf92: 0x1dfc, 0xf93: 0x1e0b, 0xf94: 0x1e10, 0xf95: 0x1e15, 0xf96: 0x1e1a, 0xf97: 0x1e29,\n\t0xf98: 0x1e2e, 0xf99: 0x1e3d, 0xf9a: 0x1e42, 0xf9b: 0x1e47, 0xf9c: 0x1e56, 0xf9d: 0x1e5b,\n\t0xf9e: 0x1e60, 0xf9f: 0x1e6a, 0xfa0: 0x1ea6, 0xfa1: 0x1eb5, 0xfa2: 0x1ec4, 0xfa3: 0x1ec9,\n\t0xfa4: 0x1ece, 0xfa5: 0x1ed8, 0xfa6: 0x1ee7, 0xfa7: 0x1eec, 0xfa8: 0x1efb, 0xfa9: 0x1f00,\n\t0xfaa: 0x1f05, 0xfab: 0x1f14, 0xfac: 0x1f19, 0xfad: 0x1f28, 0xfae: 0x1f2d, 0xfaf: 0x1f32,\n\t0xfb0: 0x1f37, 0xfb1: 0x1f3c, 0xfb2: 0x1f41, 0xfb3: 0x1f46, 0xfb4: 0x1f4b, 0xfb5: 0x1f50,\n\t0xfb6: 0x1f55, 0xfb7: 0x1f5a, 0xfb8: 0x1f5f, 0xfb9: 0x1f64, 0xfba: 0x1f69, 0xfbb: 0x1f6e,\n\t0xfbc: 0x1f73, 0xfbd: 0x1f78, 0xfbe: 0x1f7d, 0xfbf: 0x1f87,\n\t// Block 0x3f, offset 0xfc0\n\t0xfc0: 0x1f8c, 0xfc1: 0x1f91, 0xfc2: 0x1f96, 0xfc3: 0x1fa0, 0xfc4: 0x1fa5, 0xfc5: 0x1faf,\n\t0xfc6: 0x1fb4, 0xfc7: 0x1fb9, 0xfc8: 0x1fbe, 0xfc9: 0x1fc3, 0xfca: 0x1fc8, 0xfcb: 0x1fcd,\n\t0xfcc: 0x1fd2, 0xfcd: 0x1fd7, 0xfce: 0x1fe6, 0xfcf: 0x1ff5, 0xfd0: 0x1ffa, 0xfd1: 0x1fff,\n\t0xfd2: 0x2004, 0xfd3: 0x2009, 0xfd4: 0x200e, 0xfd5: 0x2018, 0xfd6: 0x201d, 0xfd7: 0x2022,\n\t0xfd8: 0x2031, 0xfd9: 0x2040, 0xfda: 0x2045, 0xfdb: 0x4420, 0xfdc: 0x4426, 0xfdd: 0x445c,\n\t0xfde: 0x44b3, 0xfdf: 0x44ba, 0xfe0: 0x44c1, 0xfe1: 0x44c8, 0xfe2: 0x44cf, 0xfe3: 0x44d6,\n\t0xfe4: 0x25c6, 0xfe5: 0x25cd, 0xfe6: 0x25d4, 0xfe7: 0x25db, 0xfe8: 0x25f0, 0xfe9: 0x25f7,\n\t0xfea: 0x1d98, 0xfeb: 0x1d9d, 0xfec: 0x1da2, 0xfed: 0x1da7, 0xfee: 0x1db1, 0xfef: 0x1db6,\n\t0xff0: 0x1dca, 0xff1: 0x1dcf, 0xff2: 0x1dd4, 0xff3: 0x1dd9, 0xff4: 0x1de3, 0xff5: 0x1de8,\n\t0xff6: 0x1df2, 0xff7: 0x1df7, 0xff8: 0x1dfc, 0xff9: 0x1e01, 0xffa: 0x1e0b, 0xffb: 0x1e10,\n\t0xffc: 0x1f3c, 0xffd: 0x1f41, 0xffe: 0x1f50, 0xfff: 0x1f55,\n\t// Block 0x40, offset 0x1000\n\t0x1000: 0x1f5a, 0x1001: 0x1f6e, 0x1002: 0x1f73, 0x1003: 0x1f78, 0x1004: 0x1f7d, 0x1005: 0x1f96,\n\t0x1006: 0x1fa0, 0x1007: 0x1fa5, 0x1008: 0x1faa, 0x1009: 0x1fbe, 0x100a: 0x1fdc, 0x100b: 0x1fe1,\n\t0x100c: 0x1fe6, 0x100d: 0x1feb, 0x100e: 0x1ff5, 0x100f: 0x1ffa, 0x1010: 0x445c, 0x1011: 0x2027,\n\t0x1012: 0x202c, 0x1013: 0x2031, 0x1014: 0x2036, 0x1015: 0x2040, 0x1016: 0x2045, 0x1017: 0x25b1,\n\t0x1018: 0x25b8, 0x1019: 0x25bf, 0x101a: 0x25d4, 0x101b: 0x25e2, 0x101c: 0x1d89, 0x101d: 0x1d8e,\n\t0x101e: 0x1d93, 0x101f: 0x1da2, 0x1020: 0x1dac, 0x1021: 0x1dbb, 0x1022: 0x1dc0, 0x1023: 0x1dc5,\n\t0x1024: 0x1dd4, 0x1025: 0x1dde, 0x1026: 0x1dfc, 0x1027: 0x1e15, 0x1028: 0x1e1a, 0x1029: 0x1e29,\n\t0x102a: 0x1e2e, 0x102b: 0x1e3d, 0x102c: 0x1e47, 0x102d: 0x1e56, 0x102e: 0x1e5b, 0x102f: 0x1e60,\n\t0x1030: 0x1e6a, 0x1031: 0x1ea6, 0x1032: 0x1eab, 0x1033: 0x1eb5, 0x1034: 0x1ec4, 0x1035: 0x1ec9,\n\t0x1036: 0x1ece, 0x1037: 0x1ed8, 0x1038: 0x1ee7, 0x1039: 0x1efb, 0x103a: 0x1f00, 0x103b: 0x1f05,\n\t0x103c: 0x1f14, 0x103d: 0x1f19, 0x103e: 0x1f28, 0x103f: 0x1f2d,\n\t// Block 0x41, offset 0x1040\n\t0x1040: 0x1f32, 0x1041: 0x1f37, 0x1042: 0x1f46, 0x1043: 0x1f4b, 0x1044: 0x1f5f, 0x1045: 0x1f64,\n\t0x1046: 0x1f69, 0x1047: 0x1f6e, 0x1048: 0x1f73, 0x1049: 0x1f87, 0x104a: 0x1f8c, 0x104b: 0x1f91,\n\t0x104c: 0x1f96, 0x104d: 0x1f9b, 0x104e: 0x1faf, 0x104f: 0x1fb4, 0x1050: 0x1fb9, 0x1051: 0x1fbe,\n\t0x1052: 0x1fcd, 0x1053: 0x1fd2, 0x1054: 0x1fd7, 0x1055: 0x1fe6, 0x1056: 0x1ff0, 0x1057: 0x1fff,\n\t0x1058: 0x2004, 0x1059: 0x4450, 0x105a: 0x2018, 0x105b: 0x201d, 0x105c: 0x2022, 0x105d: 0x2031,\n\t0x105e: 0x203b, 0x105f: 0x25d4, 0x1060: 0x25e2, 0x1061: 0x1da2, 0x1062: 0x1dac, 0x1063: 0x1dd4,\n\t0x1064: 0x1dde, 0x1065: 0x1dfc, 0x1066: 0x1e06, 0x1067: 0x1e6a, 0x1068: 0x1e6f, 0x1069: 0x1e92,\n\t0x106a: 0x1e97, 0x106b: 0x1f6e, 0x106c: 0x1f73, 0x106d: 0x1f96, 0x106e: 0x1fe6, 0x106f: 0x1ff0,\n\t0x1070: 0x2031, 0x1071: 0x203b, 0x1072: 0x4504, 0x1073: 0x450c, 0x1074: 0x4514, 0x1075: 0x1ef1,\n\t0x1076: 0x1ef6, 0x1077: 0x1f0a, 0x1078: 0x1f0f, 0x1079: 0x1f1e, 0x107a: 0x1f23, 0x107b: 0x1e74,\n\t0x107c: 0x1e79, 0x107d: 0x1e9c, 0x107e: 0x1ea1, 0x107f: 0x1e33,\n\t// Block 0x42, offset 0x1080\n\t0x1080: 0x1e38, 0x1081: 0x1e1f, 0x1082: 0x1e24, 0x1083: 0x1e4c, 0x1084: 0x1e51, 0x1085: 0x1eba,\n\t0x1086: 0x1ebf, 0x1087: 0x1edd, 0x1088: 0x1ee2, 0x1089: 0x1e7e, 0x108a: 0x1e83, 0x108b: 0x1e88,\n\t0x108c: 0x1e92, 0x108d: 0x1e8d, 0x108e: 0x1e65, 0x108f: 0x1eb0, 0x1090: 0x1ed3, 0x1091: 0x1ef1,\n\t0x1092: 0x1ef6, 0x1093: 0x1f0a, 0x1094: 0x1f0f, 0x1095: 0x1f1e, 0x1096: 0x1f23, 0x1097: 0x1e74,\n\t0x1098: 0x1e79, 0x1099: 0x1e9c, 0x109a: 0x1ea1, 0x109b: 0x1e33, 0x109c: 0x1e38, 0x109d: 0x1e1f,\n\t0x109e: 0x1e24, 0x109f: 0x1e4c, 0x10a0: 0x1e51, 0x10a1: 0x1eba, 0x10a2: 0x1ebf, 0x10a3: 0x1edd,\n\t0x10a4: 0x1ee2, 0x10a5: 0x1e7e, 0x10a6: 0x1e83, 0x10a7: 0x1e88, 0x10a8: 0x1e92, 0x10a9: 0x1e8d,\n\t0x10aa: 0x1e65, 0x10ab: 0x1eb0, 0x10ac: 0x1ed3, 0x10ad: 0x1e7e, 0x10ae: 0x1e83, 0x10af: 0x1e88,\n\t0x10b0: 0x1e92, 0x10b1: 0x1e6f, 0x10b2: 0x1e97, 0x10b3: 0x1eec, 0x10b4: 0x1e56, 0x10b5: 0x1e5b,\n\t0x10b6: 0x1e60, 0x10b7: 0x1e7e, 0x10b8: 0x1e83, 0x10b9: 0x1e88, 0x10ba: 0x1eec, 0x10bb: 0x1efb,\n\t0x10bc: 0x4408, 0x10bd: 0x4408,\n\t// Block 0x43, offset 0x10c0\n\t0x10d0: 0x2311, 0x10d1: 0x2326,\n\t0x10d2: 0x2326, 0x10d3: 0x232d, 0x10d4: 0x2334, 0x10d5: 0x2349, 0x10d6: 0x2350, 0x10d7: 0x2357,\n\t0x10d8: 0x237a, 0x10d9: 0x237a, 0x10da: 0x239d, 0x10db: 0x2396, 0x10dc: 0x23b2, 0x10dd: 0x23a4,\n\t0x10de: 0x23ab, 0x10df: 0x23ce, 0x10e0: 0x23ce, 0x10e1: 0x23c7, 0x10e2: 0x23d5, 0x10e3: 0x23d5,\n\t0x10e4: 0x23ff, 0x10e5: 0x23ff, 0x10e6: 0x241b, 0x10e7: 0x23e3, 0x10e8: 0x23e3, 0x10e9: 0x23dc,\n\t0x10ea: 0x23f1, 0x10eb: 0x23f1, 0x10ec: 0x23f8, 0x10ed: 0x23f8, 0x10ee: 0x2422, 0x10ef: 0x2430,\n\t0x10f0: 0x2430, 0x10f1: 0x2437, 0x10f2: 0x2437, 0x10f3: 0x243e, 0x10f4: 0x2445, 0x10f5: 0x244c,\n\t0x10f6: 0x2453, 0x10f7: 0x2453, 0x10f8: 0x245a, 0x10f9: 0x2468, 0x10fa: 0x2476, 0x10fb: 0x246f,\n\t0x10fc: 0x247d, 0x10fd: 0x247d, 0x10fe: 0x2492, 0x10ff: 0x2499,\n\t// Block 0x44, offset 0x1100\n\t0x1100: 0x24ca, 0x1101: 0x24d8, 0x1102: 0x24d1, 0x1103: 0x24b5, 0x1104: 0x24b5, 0x1105: 0x24df,\n\t0x1106: 0x24df, 0x1107: 0x24e6, 0x1108: 0x24e6, 0x1109: 0x2510, 0x110a: 0x2517, 0x110b: 0x251e,\n\t0x110c: 0x24f4, 0x110d: 0x2502, 0x110e: 0x2525, 0x110f: 0x252c,\n\t0x1112: 0x24fb, 0x1113: 0x2580, 0x1114: 0x2587, 0x1115: 0x255d, 0x1116: 0x2564, 0x1117: 0x2548,\n\t0x1118: 0x2548, 0x1119: 0x254f, 0x111a: 0x2579, 0x111b: 0x2572, 0x111c: 0x259c, 0x111d: 0x259c,\n\t0x111e: 0x230a, 0x111f: 0x231f, 0x1120: 0x2318, 0x1121: 0x2342, 0x1122: 0x233b, 0x1123: 0x2365,\n\t0x1124: 0x235e, 0x1125: 0x2388, 0x1126: 0x236c, 0x1127: 0x2381, 0x1128: 0x23b9, 0x1129: 0x2406,\n\t0x112a: 0x23ea, 0x112b: 0x2429, 0x112c: 0x24c3, 0x112d: 0x24ed, 0x112e: 0x2595, 0x112f: 0x258e,\n\t0x1130: 0x25a3, 0x1131: 0x253a, 0x1132: 0x24a0, 0x1133: 0x256b, 0x1134: 0x2492, 0x1135: 0x24ca,\n\t0x1136: 0x2461, 0x1137: 0x24ae, 0x1138: 0x2541, 0x1139: 0x2533, 0x113a: 0x24bc, 0x113b: 0x24a7,\n\t0x113c: 0x24bc, 0x113d: 0x2541, 0x113e: 0x2373, 0x113f: 0x238f,\n\t// Block 0x45, offset 0x1140\n\t0x1140: 0x2509, 0x1141: 0x2484, 0x1142: 0x2303, 0x1143: 0x24a7, 0x1144: 0x244c, 0x1145: 0x241b,\n\t0x1146: 0x23c0, 0x1147: 0x2556,\n\t0x1170: 0x2414, 0x1171: 0x248b, 0x1172: 0x27bf, 0x1173: 0x27b6, 0x1174: 0x27ec, 0x1175: 0x27da,\n\t0x1176: 0x27c8, 0x1177: 0x27e3, 0x1178: 0x27f5, 0x1179: 0x240d, 0x117a: 0x2c7c, 0x117b: 0x2afc,\n\t0x117c: 0x27d1,\n\t// Block 0x46, offset 0x1180\n\t0x1190: 0x0019, 0x1191: 0x0483,\n\t0x1192: 0x0487, 0x1193: 0x0035, 0x1194: 0x0037, 0x1195: 0x0003, 0x1196: 0x003f, 0x1197: 0x04bf,\n\t0x1198: 0x04c3, 0x1199: 0x1b5c,\n\t0x11a0: 0x8132, 0x11a1: 0x8132, 0x11a2: 0x8132, 0x11a3: 0x8132,\n\t0x11a4: 0x8132, 0x11a5: 0x8132, 0x11a6: 0x8132, 0x11a7: 0x812d, 0x11a8: 0x812d, 0x11a9: 0x812d,\n\t0x11aa: 0x812d, 0x11ab: 0x812d, 0x11ac: 0x812d, 0x11ad: 0x812d, 0x11ae: 0x8132, 0x11af: 0x8132,\n\t0x11b0: 0x1873, 0x11b1: 0x0443, 0x11b2: 0x043f, 0x11b3: 0x007f, 0x11b4: 0x007f, 0x11b5: 0x0011,\n\t0x11b6: 0x0013, 0x11b7: 0x00b7, 0x11b8: 0x00bb, 0x11b9: 0x04b7, 0x11ba: 0x04bb, 0x11bb: 0x04ab,\n\t0x11bc: 0x04af, 0x11bd: 0x0493, 0x11be: 0x0497, 0x11bf: 0x048b,\n\t// Block 0x47, offset 0x11c0\n\t0x11c0: 0x048f, 0x11c1: 0x049b, 0x11c2: 0x049f, 0x11c3: 0x04a3, 0x11c4: 0x04a7,\n\t0x11c7: 0x0077, 0x11c8: 0x007b, 0x11c9: 0x4269, 0x11ca: 0x4269, 0x11cb: 0x4269,\n\t0x11cc: 0x4269, 0x11cd: 0x007f, 0x11ce: 0x007f, 0x11cf: 0x007f, 0x11d0: 0x0019, 0x11d1: 0x0483,\n\t0x11d2: 0x001d, 0x11d4: 0x0037, 0x11d5: 0x0035, 0x11d6: 0x003f, 0x11d7: 0x0003,\n\t0x11d8: 0x0443, 0x11d9: 0x0011, 0x11da: 0x0013, 0x11db: 0x00b7, 0x11dc: 0x00bb, 0x11dd: 0x04b7,\n\t0x11de: 0x04bb, 0x11df: 0x0007, 0x11e0: 0x000d, 0x11e1: 0x0015, 0x11e2: 0x0017, 0x11e3: 0x001b,\n\t0x11e4: 0x0039, 0x11e5: 0x003d, 0x11e6: 0x003b, 0x11e8: 0x0079, 0x11e9: 0x0009,\n\t0x11ea: 0x000b, 0x11eb: 0x0041,\n\t0x11f0: 0x42aa, 0x11f1: 0x442c, 0x11f2: 0x42af, 0x11f4: 0x42b4,\n\t0x11f6: 0x42b9, 0x11f7: 0x4432, 0x11f8: 0x42be, 0x11f9: 0x4438, 0x11fa: 0x42c3, 0x11fb: 0x443e,\n\t0x11fc: 0x42c8, 0x11fd: 0x4444, 0x11fe: 0x42cd, 0x11ff: 0x444a,\n\t// Block 0x48, offset 0x1200\n\t0x1200: 0x0236, 0x1201: 0x440e, 0x1202: 0x440e, 0x1203: 0x4414, 0x1204: 0x4414, 0x1205: 0x4456,\n\t0x1206: 0x4456, 0x1207: 0x441a, 0x1208: 0x441a, 0x1209: 0x4462, 0x120a: 0x4462, 0x120b: 0x4462,\n\t0x120c: 0x4462, 0x120d: 0x0239, 0x120e: 0x0239, 0x120f: 0x023c, 0x1210: 0x023c, 0x1211: 0x023c,\n\t0x1212: 0x023c, 0x1213: 0x023f, 0x1214: 0x023f, 0x1215: 0x0242, 0x1216: 0x0242, 0x1217: 0x0242,\n\t0x1218: 0x0242, 0x1219: 0x0245, 0x121a: 0x0245, 0x121b: 0x0245, 0x121c: 0x0245, 0x121d: 0x0248,\n\t0x121e: 0x0248, 0x121f: 0x0248, 0x1220: 0x0248, 0x1221: 0x024b, 0x1222: 0x024b, 0x1223: 0x024b,\n\t0x1224: 0x024b, 0x1225: 0x024e, 0x1226: 0x024e, 0x1227: 0x024e, 0x1228: 0x024e, 0x1229: 0x0251,\n\t0x122a: 0x0251, 0x122b: 0x0254, 0x122c: 0x0254, 0x122d: 0x0257, 0x122e: 0x0257, 0x122f: 0x025a,\n\t0x1230: 0x025a, 0x1231: 0x025d, 0x1232: 0x025d, 0x1233: 0x025d, 0x1234: 0x025d, 0x1235: 0x0260,\n\t0x1236: 0x0260, 0x1237: 0x0260, 0x1238: 0x0260, 0x1239: 0x0263, 0x123a: 0x0263, 0x123b: 0x0263,\n\t0x123c: 0x0263, 0x123d: 0x0266, 0x123e: 0x0266, 0x123f: 0x0266,\n\t// Block 0x49, offset 0x1240\n\t0x1240: 0x0266, 0x1241: 0x0269, 0x1242: 0x0269, 0x1243: 0x0269, 0x1244: 0x0269, 0x1245: 0x026c,\n\t0x1246: 0x026c, 0x1247: 0x026c, 0x1248: 0x026c, 0x1249: 0x026f, 0x124a: 0x026f, 0x124b: 0x026f,\n\t0x124c: 0x026f, 0x124d: 0x0272, 0x124e: 0x0272, 0x124f: 0x0272, 0x1250: 0x0272, 0x1251: 0x0275,\n\t0x1252: 0x0275, 0x1253: 0x0275, 0x1254: 0x0275, 0x1255: 0x0278, 0x1256: 0x0278, 0x1257: 0x0278,\n\t0x1258: 0x0278, 0x1259: 0x027b, 0x125a: 0x027b, 0x125b: 0x027b, 0x125c: 0x027b, 0x125d: 0x027e,\n\t0x125e: 0x027e, 0x125f: 0x027e, 0x1260: 0x027e, 0x1261: 0x0281, 0x1262: 0x0281, 0x1263: 0x0281,\n\t0x1264: 0x0281, 0x1265: 0x0284, 0x1266: 0x0284, 0x1267: 0x0284, 0x1268: 0x0284, 0x1269: 0x0287,\n\t0x126a: 0x0287, 0x126b: 0x0287, 0x126c: 0x0287, 0x126d: 0x028a, 0x126e: 0x028a, 0x126f: 0x028d,\n\t0x1270: 0x028d, 0x1271: 0x0290, 0x1272: 0x0290, 0x1273: 0x0290, 0x1274: 0x0290, 0x1275: 0x2e00,\n\t0x1276: 0x2e00, 0x1277: 0x2e08, 0x1278: 0x2e08, 0x1279: 0x2e10, 0x127a: 0x2e10, 0x127b: 0x1f82,\n\t0x127c: 0x1f82,\n\t// Block 0x4a, offset 0x1280\n\t0x1280: 0x0081, 0x1281: 0x0083, 0x1282: 0x0085, 0x1283: 0x0087, 0x1284: 0x0089, 0x1285: 0x008b,\n\t0x1286: 0x008d, 0x1287: 0x008f, 0x1288: 0x0091, 0x1289: 0x0093, 0x128a: 0x0095, 0x128b: 0x0097,\n\t0x128c: 0x0099, 0x128d: 0x009b, 0x128e: 0x009d, 0x128f: 0x009f, 0x1290: 0x00a1, 0x1291: 0x00a3,\n\t0x1292: 0x00a5, 0x1293: 0x00a7, 0x1294: 0x00a9, 0x1295: 0x00ab, 0x1296: 0x00ad, 0x1297: 0x00af,\n\t0x1298: 0x00b1, 0x1299: 0x00b3, 0x129a: 0x00b5, 0x129b: 0x00b7, 0x129c: 0x00b9, 0x129d: 0x00bb,\n\t0x129e: 0x00bd, 0x129f: 0x0477, 0x12a0: 0x047b, 0x12a1: 0x0487, 0x12a2: 0x049b, 0x12a3: 0x049f,\n\t0x12a4: 0x0483, 0x12a5: 0x05ab, 0x12a6: 0x05a3, 0x12a7: 0x04c7, 0x12a8: 0x04cf, 0x12a9: 0x04d7,\n\t0x12aa: 0x04df, 0x12ab: 0x04e7, 0x12ac: 0x056b, 0x12ad: 0x0573, 0x12ae: 0x057b, 0x12af: 0x051f,\n\t0x12b0: 0x05af, 0x12b1: 0x04cb, 0x12b2: 0x04d3, 0x12b3: 0x04db, 0x12b4: 0x04e3, 0x12b5: 0x04eb,\n\t0x12b6: 0x04ef, 0x12b7: 0x04f3, 0x12b8: 0x04f7, 0x12b9: 0x04fb, 0x12ba: 0x04ff, 0x12bb: 0x0503,\n\t0x12bc: 0x0507, 0x12bd: 0x050b, 0x12be: 0x050f, 0x12bf: 0x0513,\n\t// Block 0x4b, offset 0x12c0\n\t0x12c0: 0x0517, 0x12c1: 0x051b, 0x12c2: 0x0523, 0x12c3: 0x0527, 0x12c4: 0x052b, 0x12c5: 0x052f,\n\t0x12c6: 0x0533, 0x12c7: 0x0537, 0x12c8: 0x053b, 0x12c9: 0x053f, 0x12ca: 0x0543, 0x12cb: 0x0547,\n\t0x12cc: 0x054b, 0x12cd: 0x054f, 0x12ce: 0x0553, 0x12cf: 0x0557, 0x12d0: 0x055b, 0x12d1: 0x055f,\n\t0x12d2: 0x0563, 0x12d3: 0x0567, 0x12d4: 0x056f, 0x12d5: 0x0577, 0x12d6: 0x057f, 0x12d7: 0x0583,\n\t0x12d8: 0x0587, 0x12d9: 0x058b, 0x12da: 0x058f, 0x12db: 0x0593, 0x12dc: 0x0597, 0x12dd: 0x05a7,\n\t0x12de: 0x4a78, 0x12df: 0x4a7e, 0x12e0: 0x03c3, 0x12e1: 0x0313, 0x12e2: 0x0317, 0x12e3: 0x4a3b,\n\t0x12e4: 0x031b, 0x12e5: 0x4a41, 0x12e6: 0x4a47, 0x12e7: 0x031f, 0x12e8: 0x0323, 0x12e9: 0x0327,\n\t0x12ea: 0x4a4d, 0x12eb: 0x4a53, 0x12ec: 0x4a59, 0x12ed: 0x4a5f, 0x12ee: 0x4a65, 0x12ef: 0x4a6b,\n\t0x12f0: 0x0367, 0x12f1: 0x032b, 0x12f2: 0x032f, 0x12f3: 0x0333, 0x12f4: 0x037b, 0x12f5: 0x0337,\n\t0x12f6: 0x033b, 0x12f7: 0x033f, 0x12f8: 0x0343, 0x12f9: 0x0347, 0x12fa: 0x034b, 0x12fb: 0x034f,\n\t0x12fc: 0x0353, 0x12fd: 0x0357, 0x12fe: 0x035b,\n\t// Block 0x4c, offset 0x1300\n\t0x1302: 0x49bd, 0x1303: 0x49c3, 0x1304: 0x49c9, 0x1305: 0x49cf,\n\t0x1306: 0x49d5, 0x1307: 0x49db, 0x130a: 0x49e1, 0x130b: 0x49e7,\n\t0x130c: 0x49ed, 0x130d: 0x49f3, 0x130e: 0x49f9, 0x130f: 0x49ff,\n\t0x1312: 0x4a05, 0x1313: 0x4a0b, 0x1314: 0x4a11, 0x1315: 0x4a17, 0x1316: 0x4a1d, 0x1317: 0x4a23,\n\t0x131a: 0x4a29, 0x131b: 0x4a2f, 0x131c: 0x4a35,\n\t0x1320: 0x00bf, 0x1321: 0x00c2, 0x1322: 0x00cb, 0x1323: 0x4264,\n\t0x1324: 0x00c8, 0x1325: 0x00c5, 0x1326: 0x0447, 0x1328: 0x046b, 0x1329: 0x044b,\n\t0x132a: 0x044f, 0x132b: 0x0453, 0x132c: 0x0457, 0x132d: 0x046f, 0x132e: 0x0473,\n\t// Block 0x4d, offset 0x1340\n\t0x1340: 0x0063, 0x1341: 0x0065, 0x1342: 0x0067, 0x1343: 0x0069, 0x1344: 0x006b, 0x1345: 0x006d,\n\t0x1346: 0x006f, 0x1347: 0x0071, 0x1348: 0x0073, 0x1349: 0x0075, 0x134a: 0x0083, 0x134b: 0x0085,\n\t0x134c: 0x0087, 0x134d: 0x0089, 0x134e: 0x008b, 0x134f: 0x008d, 0x1350: 0x008f, 0x1351: 0x0091,\n\t0x1352: 0x0093, 0x1353: 0x0095, 0x1354: 0x0097, 0x1355: 0x0099, 0x1356: 0x009b, 0x1357: 0x009d,\n\t0x1358: 0x009f, 0x1359: 0x00a1, 0x135a: 0x00a3, 0x135b: 0x00a5, 0x135c: 0x00a7, 0x135d: 0x00a9,\n\t0x135e: 0x00ab, 0x135f: 0x00ad, 0x1360: 0x00af, 0x1361: 0x00b1, 0x1362: 0x00b3, 0x1363: 0x00b5,\n\t0x1364: 0x00dd, 0x1365: 0x00f2, 0x1368: 0x0173, 0x1369: 0x0176,\n\t0x136a: 0x0179, 0x136b: 0x017c, 0x136c: 0x017f, 0x136d: 0x0182, 0x136e: 0x0185, 0x136f: 0x0188,\n\t0x1370: 0x018b, 0x1371: 0x018e, 0x1372: 0x0191, 0x1373: 0x0194, 0x1374: 0x0197, 0x1375: 0x019a,\n\t0x1376: 0x019d, 0x1377: 0x01a0, 0x1378: 0x01a3, 0x1379: 0x0188, 0x137a: 0x01a6, 0x137b: 0x01a9,\n\t0x137c: 0x01ac, 0x137d: 0x01af, 0x137e: 0x01b2, 0x137f: 0x01b5,\n\t// Block 0x4e, offset 0x1380\n\t0x1380: 0x01fd, 0x1381: 0x0200, 0x1382: 0x0203, 0x1383: 0x045b, 0x1384: 0x01c7, 0x1385: 0x01d0,\n\t0x1386: 0x01d6, 0x1387: 0x01fa, 0x1388: 0x01eb, 0x1389: 0x01e8, 0x138a: 0x0206, 0x138b: 0x0209,\n\t0x138e: 0x0021, 0x138f: 0x0023, 0x1390: 0x0025, 0x1391: 0x0027,\n\t0x1392: 0x0029, 0x1393: 0x002b, 0x1394: 0x002d, 0x1395: 0x002f, 0x1396: 0x0031, 0x1397: 0x0033,\n\t0x1398: 0x0021, 0x1399: 0x0023, 0x139a: 0x0025, 0x139b: 0x0027, 0x139c: 0x0029, 0x139d: 0x002b,\n\t0x139e: 0x002d, 0x139f: 0x002f, 0x13a0: 0x0031, 0x13a1: 0x0033, 0x13a2: 0x0021, 0x13a3: 0x0023,\n\t0x13a4: 0x0025, 0x13a5: 0x0027, 0x13a6: 0x0029, 0x13a7: 0x002b, 0x13a8: 0x002d, 0x13a9: 0x002f,\n\t0x13aa: 0x0031, 0x13ab: 0x0033, 0x13ac: 0x0021, 0x13ad: 0x0023, 0x13ae: 0x0025, 0x13af: 0x0027,\n\t0x13b0: 0x0029, 0x13b1: 0x002b, 0x13b2: 0x002d, 0x13b3: 0x002f, 0x13b4: 0x0031, 0x13b5: 0x0033,\n\t0x13b6: 0x0021, 0x13b7: 0x0023, 0x13b8: 0x0025, 0x13b9: 0x0027, 0x13ba: 0x0029, 0x13bb: 0x002b,\n\t0x13bc: 0x002d, 0x13bd: 0x002f, 0x13be: 0x0031, 0x13bf: 0x0033,\n\t// Block 0x4f, offset 0x13c0\n\t0x13c0: 0x0239, 0x13c1: 0x023c, 0x13c2: 0x0248, 0x13c3: 0x0251, 0x13c5: 0x028a,\n\t0x13c6: 0x025a, 0x13c7: 0x024b, 0x13c8: 0x0269, 0x13c9: 0x0290, 0x13ca: 0x027b, 0x13cb: 0x027e,\n\t0x13cc: 0x0281, 0x13cd: 0x0284, 0x13ce: 0x025d, 0x13cf: 0x026f, 0x13d0: 0x0275, 0x13d1: 0x0263,\n\t0x13d2: 0x0278, 0x13d3: 0x0257, 0x13d4: 0x0260, 0x13d5: 0x0242, 0x13d6: 0x0245, 0x13d7: 0x024e,\n\t0x13d8: 0x0254, 0x13d9: 0x0266, 0x13da: 0x026c, 0x13db: 0x0272, 0x13dc: 0x0293, 0x13dd: 0x02e4,\n\t0x13de: 0x02cc, 0x13df: 0x0296, 0x13e1: 0x023c, 0x13e2: 0x0248,\n\t0x13e4: 0x0287, 0x13e7: 0x024b, 0x13e9: 0x0290,\n\t0x13ea: 0x027b, 0x13eb: 0x027e, 0x13ec: 0x0281, 0x13ed: 0x0284, 0x13ee: 0x025d, 0x13ef: 0x026f,\n\t0x13f0: 0x0275, 0x13f1: 0x0263, 0x13f2: 0x0278, 0x13f4: 0x0260, 0x13f5: 0x0242,\n\t0x13f6: 0x0245, 0x13f7: 0x024e, 0x13f9: 0x0266, 0x13fb: 0x0272,\n\t// Block 0x50, offset 0x1400\n\t0x1402: 0x0248,\n\t0x1407: 0x024b, 0x1409: 0x0290, 0x140b: 0x027e,\n\t0x140d: 0x0284, 0x140e: 0x025d, 0x140f: 0x026f, 0x1411: 0x0263,\n\t0x1412: 0x0278, 0x1414: 0x0260, 0x1417: 0x024e,\n\t0x1419: 0x0266, 0x141b: 0x0272, 0x141d: 0x02e4,\n\t0x141f: 0x0296, 0x1421: 0x023c, 0x1422: 0x0248,\n\t0x1424: 0x0287, 0x1427: 0x024b, 0x1428: 0x0269, 0x1429: 0x0290,\n\t0x142a: 0x027b, 0x142c: 0x0281, 0x142d: 0x0284, 0x142e: 0x025d, 0x142f: 0x026f,\n\t0x1430: 0x0275, 0x1431: 0x0263, 0x1432: 0x0278, 0x1434: 0x0260, 0x1435: 0x0242,\n\t0x1436: 0x0245, 0x1437: 0x024e, 0x1439: 0x0266, 0x143a: 0x026c, 0x143b: 0x0272,\n\t0x143c: 0x0293, 0x143e: 0x02cc,\n\t// Block 0x51, offset 0x1440\n\t0x1440: 0x0239, 0x1441: 0x023c, 0x1442: 0x0248, 0x1443: 0x0251, 0x1444: 0x0287, 0x1445: 0x028a,\n\t0x1446: 0x025a, 0x1447: 0x024b, 0x1448: 0x0269, 0x1449: 0x0290, 0x144b: 0x027e,\n\t0x144c: 0x0281, 0x144d: 0x0284, 0x144e: 0x025d, 0x144f: 0x026f, 0x1450: 0x0275, 0x1451: 0x0263,\n\t0x1452: 0x0278, 0x1453: 0x0257, 0x1454: 0x0260, 0x1455: 0x0242, 0x1456: 0x0245, 0x1457: 0x024e,\n\t0x1458: 0x0254, 0x1459: 0x0266, 0x145a: 0x026c, 0x145b: 0x0272,\n\t0x1461: 0x023c, 0x1462: 0x0248, 0x1463: 0x0251,\n\t0x1465: 0x028a, 0x1466: 0x025a, 0x1467: 0x024b, 0x1468: 0x0269, 0x1469: 0x0290,\n\t0x146b: 0x027e, 0x146c: 0x0281, 0x146d: 0x0284, 0x146e: 0x025d, 0x146f: 0x026f,\n\t0x1470: 0x0275, 0x1471: 0x0263, 0x1472: 0x0278, 0x1473: 0x0257, 0x1474: 0x0260, 0x1475: 0x0242,\n\t0x1476: 0x0245, 0x1477: 0x024e, 0x1478: 0x0254, 0x1479: 0x0266, 0x147a: 0x026c, 0x147b: 0x0272,\n\t// Block 0x52, offset 0x1480\n\t0x1480: 0x1879, 0x1481: 0x1876, 0x1482: 0x187c, 0x1483: 0x18a0, 0x1484: 0x18c4, 0x1485: 0x18e8,\n\t0x1486: 0x190c, 0x1487: 0x1915, 0x1488: 0x191b, 0x1489: 0x1921, 0x148a: 0x1927,\n\t0x1490: 0x1a8c, 0x1491: 0x1a90,\n\t0x1492: 0x1a94, 0x1493: 0x1a98, 0x1494: 0x1a9c, 0x1495: 0x1aa0, 0x1496: 0x1aa4, 0x1497: 0x1aa8,\n\t0x1498: 0x1aac, 0x1499: 0x1ab0, 0x149a: 0x1ab4, 0x149b: 0x1ab8, 0x149c: 0x1abc, 0x149d: 0x1ac0,\n\t0x149e: 0x1ac4, 0x149f: 0x1ac8, 0x14a0: 0x1acc, 0x14a1: 0x1ad0, 0x14a2: 0x1ad4, 0x14a3: 0x1ad8,\n\t0x14a4: 0x1adc, 0x14a5: 0x1ae0, 0x14a6: 0x1ae4, 0x14a7: 0x1ae8, 0x14a8: 0x1aec, 0x14a9: 0x1af0,\n\t0x14aa: 0x271e, 0x14ab: 0x0047, 0x14ac: 0x0065, 0x14ad: 0x193c, 0x14ae: 0x19b1,\n\t0x14b0: 0x0043, 0x14b1: 0x0045, 0x14b2: 0x0047, 0x14b3: 0x0049, 0x14b4: 0x004b, 0x14b5: 0x004d,\n\t0x14b6: 0x004f, 0x14b7: 0x0051, 0x14b8: 0x0053, 0x14b9: 0x0055, 0x14ba: 0x0057, 0x14bb: 0x0059,\n\t0x14bc: 0x005b, 0x14bd: 0x005d, 0x14be: 0x005f, 0x14bf: 0x0061,\n\t// Block 0x53, offset 0x14c0\n\t0x14c0: 0x26ad, 0x14c1: 0x26c2, 0x14c2: 0x0503,\n\t0x14d0: 0x0c0f, 0x14d1: 0x0a47,\n\t0x14d2: 0x08d3, 0x14d3: 0x45c4, 0x14d4: 0x071b, 0x14d5: 0x09ef, 0x14d6: 0x132f, 0x14d7: 0x09ff,\n\t0x14d8: 0x0727, 0x14d9: 0x0cd7, 0x14da: 0x0eaf, 0x14db: 0x0caf, 0x14dc: 0x0827, 0x14dd: 0x0b6b,\n\t0x14de: 0x07bf, 0x14df: 0x0cb7, 0x14e0: 0x0813, 0x14e1: 0x1117, 0x14e2: 0x0f83, 0x14e3: 0x138b,\n\t0x14e4: 0x09d3, 0x14e5: 0x090b, 0x14e6: 0x0e63, 0x14e7: 0x0c1b, 0x14e8: 0x0c47, 0x14e9: 0x06bf,\n\t0x14ea: 0x06cb, 0x14eb: 0x140b, 0x14ec: 0x0adb, 0x14ed: 0x06e7, 0x14ee: 0x08ef, 0x14ef: 0x0c3b,\n\t0x14f0: 0x13b3, 0x14f1: 0x0c13, 0x14f2: 0x106f, 0x14f3: 0x10ab, 0x14f4: 0x08f7, 0x14f5: 0x0e43,\n\t0x14f6: 0x0d0b, 0x14f7: 0x0d07, 0x14f8: 0x0f97, 0x14f9: 0x082b, 0x14fa: 0x0957, 0x14fb: 0x1443,\n\t// Block 0x54, offset 0x1500\n\t0x1500: 0x06fb, 0x1501: 0x06f3, 0x1502: 0x0703, 0x1503: 0x1647, 0x1504: 0x0747, 0x1505: 0x0757,\n\t0x1506: 0x075b, 0x1507: 0x0763, 0x1508: 0x076b, 0x1509: 0x076f, 0x150a: 0x077b, 0x150b: 0x0773,\n\t0x150c: 0x05b3, 0x150d: 0x165b, 0x150e: 0x078f, 0x150f: 0x0793, 0x1510: 0x0797, 0x1511: 0x07b3,\n\t0x1512: 0x164c, 0x1513: 0x05b7, 0x1514: 0x079f, 0x1515: 0x07bf, 0x1516: 0x1656, 0x1517: 0x07cf,\n\t0x1518: 0x07d7, 0x1519: 0x0737, 0x151a: 0x07df, 0x151b: 0x07e3, 0x151c: 0x1831, 0x151d: 0x07ff,\n\t0x151e: 0x0807, 0x151f: 0x05bf, 0x1520: 0x081f, 0x1521: 0x0823, 0x1522: 0x082b, 0x1523: 0x082f,\n\t0x1524: 0x05c3, 0x1525: 0x0847, 0x1526: 0x084b, 0x1527: 0x0857, 0x1528: 0x0863, 0x1529: 0x0867,\n\t0x152a: 0x086b, 0x152b: 0x0873, 0x152c: 0x0893, 0x152d: 0x0897, 0x152e: 0x089f, 0x152f: 0x08af,\n\t0x1530: 0x08b7, 0x1531: 0x08bb, 0x1532: 0x08bb, 0x1533: 0x08bb, 0x1534: 0x166a, 0x1535: 0x0e93,\n\t0x1536: 0x08cf, 0x1537: 0x08d7, 0x1538: 0x166f, 0x1539: 0x08e3, 0x153a: 0x08eb, 0x153b: 0x08f3,\n\t0x153c: 0x091b, 0x153d: 0x0907, 0x153e: 0x0913, 0x153f: 0x0917,\n\t// Block 0x55, offset 0x1540\n\t0x1540: 0x091f, 0x1541: 0x0927, 0x1542: 0x092b, 0x1543: 0x0933, 0x1544: 0x093b, 0x1545: 0x093f,\n\t0x1546: 0x093f, 0x1547: 0x0947, 0x1548: 0x094f, 0x1549: 0x0953, 0x154a: 0x095f, 0x154b: 0x0983,\n\t0x154c: 0x0967, 0x154d: 0x0987, 0x154e: 0x096b, 0x154f: 0x0973, 0x1550: 0x080b, 0x1551: 0x09cf,\n\t0x1552: 0x0997, 0x1553: 0x099b, 0x1554: 0x099f, 0x1555: 0x0993, 0x1556: 0x09a7, 0x1557: 0x09a3,\n\t0x1558: 0x09bb, 0x1559: 0x1674, 0x155a: 0x09d7, 0x155b: 0x09db, 0x155c: 0x09e3, 0x155d: 0x09ef,\n\t0x155e: 0x09f7, 0x155f: 0x0a13, 0x1560: 0x1679, 0x1561: 0x167e, 0x1562: 0x0a1f, 0x1563: 0x0a23,\n\t0x1564: 0x0a27, 0x1565: 0x0a1b, 0x1566: 0x0a2f, 0x1567: 0x05c7, 0x1568: 0x05cb, 0x1569: 0x0a37,\n\t0x156a: 0x0a3f, 0x156b: 0x0a3f, 0x156c: 0x1683, 0x156d: 0x0a5b, 0x156e: 0x0a5f, 0x156f: 0x0a63,\n\t0x1570: 0x0a6b, 0x1571: 0x1688, 0x1572: 0x0a73, 0x1573: 0x0a77, 0x1574: 0x0b4f, 0x1575: 0x0a7f,\n\t0x1576: 0x05cf, 0x1577: 0x0a8b, 0x1578: 0x0a9b, 0x1579: 0x0aa7, 0x157a: 0x0aa3, 0x157b: 0x1692,\n\t0x157c: 0x0aaf, 0x157d: 0x1697, 0x157e: 0x0abb, 0x157f: 0x0ab7,\n\t// Block 0x56, offset 0x1580\n\t0x1580: 0x0abf, 0x1581: 0x0acf, 0x1582: 0x0ad3, 0x1583: 0x05d3, 0x1584: 0x0ae3, 0x1585: 0x0aeb,\n\t0x1586: 0x0aef, 0x1587: 0x0af3, 0x1588: 0x05d7, 0x1589: 0x169c, 0x158a: 0x05db, 0x158b: 0x0b0f,\n\t0x158c: 0x0b13, 0x158d: 0x0b17, 0x158e: 0x0b1f, 0x158f: 0x1863, 0x1590: 0x0b37, 0x1591: 0x16a6,\n\t0x1592: 0x16a6, 0x1593: 0x11d7, 0x1594: 0x0b47, 0x1595: 0x0b47, 0x1596: 0x05df, 0x1597: 0x16c9,\n\t0x1598: 0x179b, 0x1599: 0x0b57, 0x159a: 0x0b5f, 0x159b: 0x05e3, 0x159c: 0x0b73, 0x159d: 0x0b83,\n\t0x159e: 0x0b87, 0x159f: 0x0b8f, 0x15a0: 0x0b9f, 0x15a1: 0x05eb, 0x15a2: 0x05e7, 0x15a3: 0x0ba3,\n\t0x15a4: 0x16ab, 0x15a5: 0x0ba7, 0x15a6: 0x0bbb, 0x15a7: 0x0bbf, 0x15a8: 0x0bc3, 0x15a9: 0x0bbf,\n\t0x15aa: 0x0bcf, 0x15ab: 0x0bd3, 0x15ac: 0x0be3, 0x15ad: 0x0bdb, 0x15ae: 0x0bdf, 0x15af: 0x0be7,\n\t0x15b0: 0x0beb, 0x15b1: 0x0bef, 0x15b2: 0x0bfb, 0x15b3: 0x0bff, 0x15b4: 0x0c17, 0x15b5: 0x0c1f,\n\t0x15b6: 0x0c2f, 0x15b7: 0x0c43, 0x15b8: 0x16ba, 0x15b9: 0x0c3f, 0x15ba: 0x0c33, 0x15bb: 0x0c4b,\n\t0x15bc: 0x0c53, 0x15bd: 0x0c67, 0x15be: 0x16bf, 0x15bf: 0x0c6f,\n\t// Block 0x57, offset 0x15c0\n\t0x15c0: 0x0c63, 0x15c1: 0x0c5b, 0x15c2: 0x05ef, 0x15c3: 0x0c77, 0x15c4: 0x0c7f, 0x15c5: 0x0c87,\n\t0x15c6: 0x0c7b, 0x15c7: 0x05f3, 0x15c8: 0x0c97, 0x15c9: 0x0c9f, 0x15ca: 0x16c4, 0x15cb: 0x0ccb,\n\t0x15cc: 0x0cff, 0x15cd: 0x0cdb, 0x15ce: 0x05ff, 0x15cf: 0x0ce7, 0x15d0: 0x05fb, 0x15d1: 0x05f7,\n\t0x15d2: 0x07c3, 0x15d3: 0x07c7, 0x15d4: 0x0d03, 0x15d5: 0x0ceb, 0x15d6: 0x11ab, 0x15d7: 0x0663,\n\t0x15d8: 0x0d0f, 0x15d9: 0x0d13, 0x15da: 0x0d17, 0x15db: 0x0d2b, 0x15dc: 0x0d23, 0x15dd: 0x16dd,\n\t0x15de: 0x0603, 0x15df: 0x0d3f, 0x15e0: 0x0d33, 0x15e1: 0x0d4f, 0x15e2: 0x0d57, 0x15e3: 0x16e7,\n\t0x15e4: 0x0d5b, 0x15e5: 0x0d47, 0x15e6: 0x0d63, 0x15e7: 0x0607, 0x15e8: 0x0d67, 0x15e9: 0x0d6b,\n\t0x15ea: 0x0d6f, 0x15eb: 0x0d7b, 0x15ec: 0x16ec, 0x15ed: 0x0d83, 0x15ee: 0x060b, 0x15ef: 0x0d8f,\n\t0x15f0: 0x16f1, 0x15f1: 0x0d93, 0x15f2: 0x060f, 0x15f3: 0x0d9f, 0x15f4: 0x0dab, 0x15f5: 0x0db7,\n\t0x15f6: 0x0dbb, 0x15f7: 0x16f6, 0x15f8: 0x168d, 0x15f9: 0x16fb, 0x15fa: 0x0ddb, 0x15fb: 0x1700,\n\t0x15fc: 0x0de7, 0x15fd: 0x0def, 0x15fe: 0x0ddf, 0x15ff: 0x0dfb,\n\t// Block 0x58, offset 0x1600\n\t0x1600: 0x0e0b, 0x1601: 0x0e1b, 0x1602: 0x0e0f, 0x1603: 0x0e13, 0x1604: 0x0e1f, 0x1605: 0x0e23,\n\t0x1606: 0x1705, 0x1607: 0x0e07, 0x1608: 0x0e3b, 0x1609: 0x0e3f, 0x160a: 0x0613, 0x160b: 0x0e53,\n\t0x160c: 0x0e4f, 0x160d: 0x170a, 0x160e: 0x0e33, 0x160f: 0x0e6f, 0x1610: 0x170f, 0x1611: 0x1714,\n\t0x1612: 0x0e73, 0x1613: 0x0e87, 0x1614: 0x0e83, 0x1615: 0x0e7f, 0x1616: 0x0617, 0x1617: 0x0e8b,\n\t0x1618: 0x0e9b, 0x1619: 0x0e97, 0x161a: 0x0ea3, 0x161b: 0x1651, 0x161c: 0x0eb3, 0x161d: 0x1719,\n\t0x161e: 0x0ebf, 0x161f: 0x1723, 0x1620: 0x0ed3, 0x1621: 0x0edf, 0x1622: 0x0ef3, 0x1623: 0x1728,\n\t0x1624: 0x0f07, 0x1625: 0x0f0b, 0x1626: 0x172d, 0x1627: 0x1732, 0x1628: 0x0f27, 0x1629: 0x0f37,\n\t0x162a: 0x061b, 0x162b: 0x0f3b, 0x162c: 0x061f, 0x162d: 0x061f, 0x162e: 0x0f53, 0x162f: 0x0f57,\n\t0x1630: 0x0f5f, 0x1631: 0x0f63, 0x1632: 0x0f6f, 0x1633: 0x0623, 0x1634: 0x0f87, 0x1635: 0x1737,\n\t0x1636: 0x0fa3, 0x1637: 0x173c, 0x1638: 0x0faf, 0x1639: 0x16a1, 0x163a: 0x0fbf, 0x163b: 0x1741,\n\t0x163c: 0x1746, 0x163d: 0x174b, 0x163e: 0x0627, 0x163f: 0x062b,\n\t// Block 0x59, offset 0x1640\n\t0x1640: 0x0ff7, 0x1641: 0x1755, 0x1642: 0x1750, 0x1643: 0x175a, 0x1644: 0x175f, 0x1645: 0x0fff,\n\t0x1646: 0x1003, 0x1647: 0x1003, 0x1648: 0x100b, 0x1649: 0x0633, 0x164a: 0x100f, 0x164b: 0x0637,\n\t0x164c: 0x063b, 0x164d: 0x1769, 0x164e: 0x1023, 0x164f: 0x102b, 0x1650: 0x1037, 0x1651: 0x063f,\n\t0x1652: 0x176e, 0x1653: 0x105b, 0x1654: 0x1773, 0x1655: 0x1778, 0x1656: 0x107b, 0x1657: 0x1093,\n\t0x1658: 0x0643, 0x1659: 0x109b, 0x165a: 0x109f, 0x165b: 0x10a3, 0x165c: 0x177d, 0x165d: 0x1782,\n\t0x165e: 0x1782, 0x165f: 0x10bb, 0x1660: 0x0647, 0x1661: 0x1787, 0x1662: 0x10cf, 0x1663: 0x10d3,\n\t0x1664: 0x064b, 0x1665: 0x178c, 0x1666: 0x10ef, 0x1667: 0x064f, 0x1668: 0x10ff, 0x1669: 0x10f7,\n\t0x166a: 0x1107, 0x166b: 0x1796, 0x166c: 0x111f, 0x166d: 0x0653, 0x166e: 0x112b, 0x166f: 0x1133,\n\t0x1670: 0x1143, 0x1671: 0x0657, 0x1672: 0x17a0, 0x1673: 0x17a5, 0x1674: 0x065b, 0x1675: 0x17aa,\n\t0x1676: 0x115b, 0x1677: 0x17af, 0x1678: 0x1167, 0x1679: 0x1173, 0x167a: 0x117b, 0x167b: 0x17b4,\n\t0x167c: 0x17b9, 0x167d: 0x118f, 0x167e: 0x17be, 0x167f: 0x1197,\n\t// Block 0x5a, offset 0x1680\n\t0x1680: 0x16ce, 0x1681: 0x065f, 0x1682: 0x11af, 0x1683: 0x11b3, 0x1684: 0x0667, 0x1685: 0x11b7,\n\t0x1686: 0x0a33, 0x1687: 0x17c3, 0x1688: 0x17c8, 0x1689: 0x16d3, 0x168a: 0x16d8, 0x168b: 0x11d7,\n\t0x168c: 0x11db, 0x168d: 0x13f3, 0x168e: 0x066b, 0x168f: 0x1207, 0x1690: 0x1203, 0x1691: 0x120b,\n\t0x1692: 0x083f, 0x1693: 0x120f, 0x1694: 0x1213, 0x1695: 0x1217, 0x1696: 0x121f, 0x1697: 0x17cd,\n\t0x1698: 0x121b, 0x1699: 0x1223, 0x169a: 0x1237, 0x169b: 0x123b, 0x169c: 0x1227, 0x169d: 0x123f,\n\t0x169e: 0x1253, 0x169f: 0x1267, 0x16a0: 0x1233, 0x16a1: 0x1247, 0x16a2: 0x124b, 0x16a3: 0x124f,\n\t0x16a4: 0x17d2, 0x16a5: 0x17dc, 0x16a6: 0x17d7, 0x16a7: 0x066f, 0x16a8: 0x126f, 0x16a9: 0x1273,\n\t0x16aa: 0x127b, 0x16ab: 0x17f0, 0x16ac: 0x127f, 0x16ad: 0x17e1, 0x16ae: 0x0673, 0x16af: 0x0677,\n\t0x16b0: 0x17e6, 0x16b1: 0x17eb, 0x16b2: 0x067b, 0x16b3: 0x129f, 0x16b4: 0x12a3, 0x16b5: 0x12a7,\n\t0x16b6: 0x12ab, 0x16b7: 0x12b7, 0x16b8: 0x12b3, 0x16b9: 0x12bf, 0x16ba: 0x12bb, 0x16bb: 0x12cb,\n\t0x16bc: 0x12c3, 0x16bd: 0x12c7, 0x16be: 0x12cf, 0x16bf: 0x067f,\n\t// Block 0x5b, offset 0x16c0\n\t0x16c0: 0x12d7, 0x16c1: 0x12db, 0x16c2: 0x0683, 0x16c3: 0x12eb, 0x16c4: 0x12ef, 0x16c5: 0x17f5,\n\t0x16c6: 0x12fb, 0x16c7: 0x12ff, 0x16c8: 0x0687, 0x16c9: 0x130b, 0x16ca: 0x05bb, 0x16cb: 0x17fa,\n\t0x16cc: 0x17ff, 0x16cd: 0x068b, 0x16ce: 0x068f, 0x16cf: 0x1337, 0x16d0: 0x134f, 0x16d1: 0x136b,\n\t0x16d2: 0x137b, 0x16d3: 0x1804, 0x16d4: 0x138f, 0x16d5: 0x1393, 0x16d6: 0x13ab, 0x16d7: 0x13b7,\n\t0x16d8: 0x180e, 0x16d9: 0x1660, 0x16da: 0x13c3, 0x16db: 0x13bf, 0x16dc: 0x13cb, 0x16dd: 0x1665,\n\t0x16de: 0x13d7, 0x16df: 0x13e3, 0x16e0: 0x1813, 0x16e1: 0x1818, 0x16e2: 0x1423, 0x16e3: 0x142f,\n\t0x16e4: 0x1437, 0x16e5: 0x181d, 0x16e6: 0x143b, 0x16e7: 0x1467, 0x16e8: 0x1473, 0x16e9: 0x1477,\n\t0x16ea: 0x146f, 0x16eb: 0x1483, 0x16ec: 0x1487, 0x16ed: 0x1822, 0x16ee: 0x1493, 0x16ef: 0x0693,\n\t0x16f0: 0x149b, 0x16f1: 0x1827, 0x16f2: 0x0697, 0x16f3: 0x14d3, 0x16f4: 0x0ac3, 0x16f5: 0x14eb,\n\t0x16f6: 0x182c, 0x16f7: 0x1836, 0x16f8: 0x069b, 0x16f9: 0x069f, 0x16fa: 0x1513, 0x16fb: 0x183b,\n\t0x16fc: 0x06a3, 0x16fd: 0x1840, 0x16fe: 0x152b, 0x16ff: 0x152b,\n\t// Block 0x5c, offset 0x1700\n\t0x1700: 0x1533, 0x1701: 0x1845, 0x1702: 0x154b, 0x1703: 0x06a7, 0x1704: 0x155b, 0x1705: 0x1567,\n\t0x1706: 0x156f, 0x1707: 0x1577, 0x1708: 0x06ab, 0x1709: 0x184a, 0x170a: 0x158b, 0x170b: 0x15a7,\n\t0x170c: 0x15b3, 0x170d: 0x06af, 0x170e: 0x06b3, 0x170f: 0x15b7, 0x1710: 0x184f, 0x1711: 0x06b7,\n\t0x1712: 0x1854, 0x1713: 0x1859, 0x1714: 0x185e, 0x1715: 0x15db, 0x1716: 0x06bb, 0x1717: 0x15ef,\n\t0x1718: 0x15f7, 0x1719: 0x15fb, 0x171a: 0x1603, 0x171b: 0x160b, 0x171c: 0x1613, 0x171d: 0x1868,\n}\n\n// nfkcIndex: 22 blocks, 1408 entries, 1408 bytes\n// Block 0 is the zero block.\nvar nfkcIndex = [1408]uint8{\n\t// Block 0x0, offset 0x0\n\t// Block 0x1, offset 0x40\n\t// Block 0x2, offset 0x80\n\t// Block 0x3, offset 0xc0\n\t0xc2: 0x5b, 0xc3: 0x01, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x5c, 0xc7: 0x04,\n\t0xc8: 0x05, 0xca: 0x5d, 0xcb: 0x5e, 0xcc: 0x06, 0xcd: 0x07, 0xce: 0x08, 0xcf: 0x09,\n\t0xd0: 0x0a, 0xd1: 0x5f, 0xd2: 0x60, 0xd3: 0x0b, 0xd6: 0x0c, 0xd7: 0x61,\n\t0xd8: 0x62, 0xd9: 0x0d, 0xdb: 0x63, 0xdc: 0x64, 0xdd: 0x65, 0xdf: 0x66,\n\t0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05,\n\t0xea: 0x06, 0xeb: 0x07, 0xec: 0x08, 0xed: 0x09, 0xef: 0x0a,\n\t0xf0: 0x13,\n\t// Block 0x4, offset 0x100\n\t0x120: 0x67, 0x121: 0x68, 0x123: 0x69, 0x124: 0x6a, 0x125: 0x6b, 0x126: 0x6c, 0x127: 0x6d,\n\t0x128: 0x6e, 0x129: 0x6f, 0x12a: 0x70, 0x12b: 0x71, 0x12c: 0x6c, 0x12d: 0x72, 0x12e: 0x73, 0x12f: 0x74,\n\t0x131: 0x75, 0x132: 0x76, 0x133: 0x77, 0x134: 0x78, 0x135: 0x79, 0x137: 0x7a,\n\t0x138: 0x7b, 0x139: 0x7c, 0x13a: 0x7d, 0x13b: 0x7e, 0x13c: 0x7f, 0x13d: 0x80, 0x13e: 0x81, 0x13f: 0x82,\n\t// Block 0x5, offset 0x140\n\t0x140: 0x83, 0x142: 0x84, 0x143: 0x85, 0x144: 0x86, 0x145: 0x87, 0x146: 0x88, 0x147: 0x89,\n\t0x14d: 0x8a,\n\t0x15c: 0x8b, 0x15f: 0x8c,\n\t0x162: 0x8d, 0x164: 0x8e,\n\t0x168: 0x8f, 0x169: 0x90, 0x16a: 0x91, 0x16c: 0x0e, 0x16d: 0x92, 0x16e: 0x93, 0x16f: 0x94,\n\t0x170: 0x95, 0x173: 0x96, 0x174: 0x97, 0x175: 0x0f, 0x176: 0x10, 0x177: 0x11,\n\t0x178: 0x12, 0x179: 0x13, 0x17a: 0x14, 0x17b: 0x15, 0x17c: 0x16, 0x17d: 0x17, 0x17e: 0x18, 0x17f: 0x19,\n\t// Block 0x6, offset 0x180\n\t0x180: 0x98, 0x181: 0x99, 0x182: 0x9a, 0x183: 0x9b, 0x184: 0x1a, 0x185: 0x1b, 0x186: 0x9c, 0x187: 0x9d,\n\t0x188: 0x9e, 0x189: 0x1c, 0x18a: 0x1d, 0x18b: 0x9f, 0x18c: 0xa0,\n\t0x191: 0x1e, 0x192: 0x1f, 0x193: 0xa1,\n\t0x1a8: 0xa2, 0x1a9: 0xa3, 0x1ab: 0xa4,\n\t0x1b1: 0xa5, 0x1b3: 0xa6, 0x1b5: 0xa7, 0x1b7: 0xa8,\n\t0x1ba: 0xa9, 0x1bb: 0xaa, 0x1bc: 0x20, 0x1bd: 0x21, 0x1be: 0x22, 0x1bf: 0xab,\n\t// Block 0x7, offset 0x1c0\n\t0x1c0: 0xac, 0x1c1: 0x23, 0x1c2: 0x24, 0x1c3: 0x25, 0x1c4: 0xad, 0x1c5: 0x26, 0x1c6: 0x27,\n\t0x1c8: 0x28, 0x1c9: 0x29, 0x1ca: 0x2a, 0x1cb: 0x2b, 0x1cc: 0x2c, 0x1cd: 0x2d, 0x1ce: 0x2e, 0x1cf: 0x2f,\n\t// Block 0x8, offset 0x200\n\t0x219: 0xae, 0x21a: 0xaf, 0x21b: 0xb0, 0x21d: 0xb1, 0x21f: 0xb2,\n\t0x220: 0xb3, 0x223: 0xb4, 0x224: 0xb5, 0x225: 0xb6, 0x226: 0xb7, 0x227: 0xb8,\n\t0x22a: 0xb9, 0x22b: 0xba, 0x22d: 0xbb, 0x22f: 0xbc,\n\t0x230: 0xbd, 0x231: 0xbe, 0x232: 0xbf, 0x233: 0xc0, 0x234: 0xc1, 0x235: 0xc2, 0x236: 0xc3, 0x237: 0xbd,\n\t0x238: 0xbe, 0x239: 0xbf, 0x23a: 0xc0, 0x23b: 0xc1, 0x23c: 0xc2, 0x23d: 0xc3, 0x23e: 0xbd, 0x23f: 0xbe,\n\t// Block 0x9, offset 0x240\n\t0x240: 0xbf, 0x241: 0xc0, 0x242: 0xc1, 0x243: 0xc2, 0x244: 0xc3, 0x245: 0xbd, 0x246: 0xbe, 0x247: 0xbf,\n\t0x248: 0xc0, 0x249: 0xc1, 0x24a: 0xc2, 0x24b: 0xc3, 0x24c: 0xbd, 0x24d: 0xbe, 0x24e: 0xbf, 0x24f: 0xc0,\n\t0x250: 0xc1, 0x251: 0xc2, 0x252: 0xc3, 0x253: 0xbd, 0x254: 0xbe, 0x255: 0xbf, 0x256: 0xc0, 0x257: 0xc1,\n\t0x258: 0xc2, 0x259: 0xc3, 0x25a: 0xbd, 0x25b: 0xbe, 0x25c: 0xbf, 0x25d: 0xc0, 0x25e: 0xc1, 0x25f: 0xc2,\n\t0x260: 0xc3, 0x261: 0xbd, 0x262: 0xbe, 0x263: 0xbf, 0x264: 0xc0, 0x265: 0xc1, 0x266: 0xc2, 0x267: 0xc3,\n\t0x268: 0xbd, 0x269: 0xbe, 0x26a: 0xbf, 0x26b: 0xc0, 0x26c: 0xc1, 0x26d: 0xc2, 0x26e: 0xc3, 0x26f: 0xbd,\n\t0x270: 0xbe, 0x271: 0xbf, 0x272: 0xc0, 0x273: 0xc1, 0x274: 0xc2, 0x275: 0xc3, 0x276: 0xbd, 0x277: 0xbe,\n\t0x278: 0xbf, 0x279: 0xc0, 0x27a: 0xc1, 0x27b: 0xc2, 0x27c: 0xc3, 0x27d: 0xbd, 0x27e: 0xbe, 0x27f: 0xbf,\n\t// Block 0xa, offset 0x280\n\t0x280: 0xc0, 0x281: 0xc1, 0x282: 0xc2, 0x283: 0xc3, 0x284: 0xbd, 0x285: 0xbe, 0x286: 0xbf, 0x287: 0xc0,\n\t0x288: 0xc1, 0x289: 0xc2, 0x28a: 0xc3, 0x28b: 0xbd, 0x28c: 0xbe, 0x28d: 0xbf, 0x28e: 0xc0, 0x28f: 0xc1,\n\t0x290: 0xc2, 0x291: 0xc3, 0x292: 0xbd, 0x293: 0xbe, 0x294: 0xbf, 0x295: 0xc0, 0x296: 0xc1, 0x297: 0xc2,\n\t0x298: 0xc3, 0x299: 0xbd, 0x29a: 0xbe, 0x29b: 0xbf, 0x29c: 0xc0, 0x29d: 0xc1, 0x29e: 0xc2, 0x29f: 0xc3,\n\t0x2a0: 0xbd, 0x2a1: 0xbe, 0x2a2: 0xbf, 0x2a3: 0xc0, 0x2a4: 0xc1, 0x2a5: 0xc2, 0x2a6: 0xc3, 0x2a7: 0xbd,\n\t0x2a8: 0xbe, 0x2a9: 0xbf, 0x2aa: 0xc0, 0x2ab: 0xc1, 0x2ac: 0xc2, 0x2ad: 0xc3, 0x2ae: 0xbd, 0x2af: 0xbe,\n\t0x2b0: 0xbf, 0x2b1: 0xc0, 0x2b2: 0xc1, 0x2b3: 0xc2, 0x2b4: 0xc3, 0x2b5: 0xbd, 0x2b6: 0xbe, 0x2b7: 0xbf,\n\t0x2b8: 0xc0, 0x2b9: 0xc1, 0x2ba: 0xc2, 0x2bb: 0xc3, 0x2bc: 0xbd, 0x2bd: 0xbe, 0x2be: 0xbf, 0x2bf: 0xc0,\n\t// Block 0xb, offset 0x2c0\n\t0x2c0: 0xc1, 0x2c1: 0xc2, 0x2c2: 0xc3, 0x2c3: 0xbd, 0x2c4: 0xbe, 0x2c5: 0xbf, 0x2c6: 0xc0, 0x2c7: 0xc1,\n\t0x2c8: 0xc2, 0x2c9: 0xc3, 0x2ca: 0xbd, 0x2cb: 0xbe, 0x2cc: 0xbf, 0x2cd: 0xc0, 0x2ce: 0xc1, 0x2cf: 0xc2,\n\t0x2d0: 0xc3, 0x2d1: 0xbd, 0x2d2: 0xbe, 0x2d3: 0xbf, 0x2d4: 0xc0, 0x2d5: 0xc1, 0x2d6: 0xc2, 0x2d7: 0xc3,\n\t0x2d8: 0xbd, 0x2d9: 0xbe, 0x2da: 0xbf, 0x2db: 0xc0, 0x2dc: 0xc1, 0x2dd: 0xc2, 0x2de: 0xc4,\n\t// Block 0xc, offset 0x300\n\t0x324: 0x30, 0x325: 0x31, 0x326: 0x32, 0x327: 0x33,\n\t0x328: 0x34, 0x329: 0x35, 0x32a: 0x36, 0x32b: 0x37, 0x32c: 0x38, 0x32d: 0x39, 0x32e: 0x3a, 0x32f: 0x3b,\n\t0x330: 0x3c, 0x331: 0x3d, 0x332: 0x3e, 0x333: 0x3f, 0x334: 0x40, 0x335: 0x41, 0x336: 0x42, 0x337: 0x43,\n\t0x338: 0x44, 0x339: 0x45, 0x33a: 0x46, 0x33b: 0x47, 0x33c: 0xc5, 0x33d: 0x48, 0x33e: 0x49, 0x33f: 0x4a,\n\t// Block 0xd, offset 0x340\n\t0x347: 0xc6,\n\t0x34b: 0xc7, 0x34d: 0xc8,\n\t0x368: 0xc9, 0x36b: 0xca,\n\t// Block 0xe, offset 0x380\n\t0x381: 0xcb, 0x382: 0xcc, 0x384: 0xcd, 0x385: 0xb7, 0x387: 0xce,\n\t0x388: 0xcf, 0x38b: 0xd0, 0x38c: 0x6c, 0x38d: 0xd1,\n\t0x391: 0xd2, 0x392: 0xd3, 0x393: 0xd4, 0x396: 0xd5, 0x397: 0xd6,\n\t0x398: 0xd7, 0x39a: 0xd8, 0x39c: 0xd9,\n\t0x3a8: 0xda, 0x3a9: 0xdb, 0x3aa: 0xdc,\n\t0x3b0: 0xd7, 0x3b5: 0xdd,\n\t// Block 0xf, offset 0x3c0\n\t0x3eb: 0xde, 0x3ec: 0xdf,\n\t// Block 0x10, offset 0x400\n\t0x432: 0xe0,\n\t// Block 0x11, offset 0x440\n\t0x445: 0xe1, 0x446: 0xe2, 0x447: 0xe3,\n\t0x449: 0xe4,\n\t0x450: 0xe5, 0x451: 0xe6, 0x452: 0xe7, 0x453: 0xe8, 0x454: 0xe9, 0x455: 0xea, 0x456: 0xeb, 0x457: 0xec,\n\t0x458: 0xed, 0x459: 0xee, 0x45a: 0x4b, 0x45b: 0xef, 0x45c: 0xf0, 0x45d: 0xf1, 0x45e: 0xf2, 0x45f: 0x4c,\n\t// Block 0x12, offset 0x480\n\t0x480: 0xf3,\n\t0x4a3: 0xf4, 0x4a5: 0xf5,\n\t0x4b8: 0x4d, 0x4b9: 0x4e, 0x4ba: 0x4f,\n\t// Block 0x13, offset 0x4c0\n\t0x4c4: 0x50, 0x4c5: 0xf6, 0x4c6: 0xf7,\n\t0x4c8: 0x51, 0x4c9: 0xf8,\n\t// Block 0x14, offset 0x500\n\t0x520: 0x52, 0x521: 0x53, 0x522: 0x54, 0x523: 0x55, 0x524: 0x56, 0x525: 0x57, 0x526: 0x58, 0x527: 0x59,\n\t0x528: 0x5a,\n\t// Block 0x15, offset 0x540\n\t0x550: 0x0b, 0x551: 0x0c, 0x556: 0x0d,\n\t0x55b: 0x0e, 0x55d: 0x0f, 0x55e: 0x10, 0x55f: 0x11,\n\t0x56f: 0x12,\n}\n\n// nfkcSparseOffset: 158 entries, 316 bytes\nvar 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}\n\n// nfkcSparseValues: 869 entries, 3476 bytes\nvar nfkcSparseValues = [869]valueRange{\n\t// Block 0x0, offset 0x0\n\t{value: 0x0002, lo: 0x0d},\n\t{value: 0x0001, lo: 0xa0, hi: 0xa0},\n\t{value: 0x4278, lo: 0xa8, hi: 0xa8},\n\t{value: 0x0083, lo: 0xaa, hi: 0xaa},\n\t{value: 0x4264, lo: 0xaf, hi: 0xaf},\n\t{value: 0x0025, lo: 0xb2, hi: 0xb3},\n\t{value: 0x425a, lo: 0xb4, hi: 0xb4},\n\t{value: 0x01dc, lo: 0xb5, hi: 0xb5},\n\t{value: 0x4291, lo: 0xb8, hi: 0xb8},\n\t{value: 0x0023, lo: 0xb9, hi: 0xb9},\n\t{value: 0x009f, lo: 0xba, hi: 0xba},\n\t{value: 0x221c, lo: 0xbc, hi: 0xbc},\n\t{value: 0x2210, lo: 0xbd, hi: 0xbd},\n\t{value: 0x22b2, lo: 0xbe, hi: 0xbe},\n\t// Block 0x1, offset 0xe\n\t{value: 0x0091, lo: 0x03},\n\t{value: 0x46e2, lo: 0xa0, hi: 0xa1},\n\t{value: 0x4714, lo: 0xaf, hi: 0xb0},\n\t{value: 0xa000, lo: 0xb7, hi: 0xb7},\n\t// Block 0x2, offset 0x12\n\t{value: 0x0003, lo: 0x08},\n\t{value: 0xa000, lo: 0x92, hi: 0x92},\n\t{value: 0x0091, lo: 0xb0, hi: 0xb0},\n\t{value: 0x0119, lo: 0xb1, hi: 0xb1},\n\t{value: 0x0095, lo: 0xb2, hi: 0xb2},\n\t{value: 0x00a5, lo: 0xb3, hi: 0xb3},\n\t{value: 0x0143, lo: 0xb4, hi: 0xb6},\n\t{value: 0x00af, lo: 0xb7, hi: 0xb7},\n\t{value: 0x00b3, lo: 0xb8, hi: 0xb8},\n\t// Block 0x3, offset 0x1b\n\t{value: 0x000a, lo: 0x09},\n\t{value: 0x426e, lo: 0x98, hi: 0x98},\n\t{value: 0x4273, lo: 0x99, hi: 0x9a},\n\t{value: 0x4296, lo: 0x9b, hi: 0x9b},\n\t{value: 0x425f, lo: 0x9c, hi: 0x9c},\n\t{value: 0x4282, lo: 0x9d, hi: 0x9d},\n\t{value: 0x0113, lo: 0xa0, hi: 0xa0},\n\t{value: 0x0099, lo: 0xa1, hi: 0xa1},\n\t{value: 0x00a7, lo: 0xa2, hi: 0xa3},\n\t{value: 0x0167, lo: 0xa4, hi: 0xa4},\n\t// Block 0x4, offset 0x25\n\t{value: 0x0000, lo: 0x0f},\n\t{value: 0xa000, lo: 0x83, hi: 0x83},\n\t{value: 0xa000, lo: 0x87, hi: 0x87},\n\t{value: 0xa000, lo: 0x8b, hi: 0x8b},\n\t{value: 0xa000, lo: 0x8d, hi: 0x8d},\n\t{value: 0x37a5, lo: 0x90, hi: 0x90},\n\t{value: 0x37b1, lo: 0x91, hi: 0x91},\n\t{value: 0x379f, lo: 0x93, hi: 0x93},\n\t{value: 0xa000, lo: 0x96, hi: 0x96},\n\t{value: 0x3817, lo: 0x97, hi: 0x97},\n\t{value: 0x37e1, lo: 0x9c, hi: 0x9c},\n\t{value: 0x37c9, lo: 0x9d, hi: 0x9d},\n\t{value: 0x37f3, lo: 0x9e, hi: 0x9e},\n\t{value: 0xa000, lo: 0xb4, hi: 0xb5},\n\t{value: 0x381d, lo: 0xb6, hi: 0xb6},\n\t{value: 0x3823, lo: 0xb7, hi: 0xb7},\n\t// Block 0x5, offset 0x35\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8132, lo: 0x83, hi: 0x87},\n\t// Block 0x6, offset 0x37\n\t{value: 0x0001, lo: 0x04},\n\t{value: 0x8113, lo: 0x81, hi: 0x82},\n\t{value: 0x8132, lo: 0x84, hi: 0x84},\n\t{value: 0x812d, lo: 0x85, hi: 0x85},\n\t{value: 0x810d, lo: 0x87, hi: 0x87},\n\t// Block 0x7, offset 0x3c\n\t{value: 0x0000, lo: 0x0a},\n\t{value: 0x8132, lo: 0x90, hi: 0x97},\n\t{value: 0x8119, lo: 0x98, hi: 0x98},\n\t{value: 0x811a, lo: 0x99, hi: 0x99},\n\t{value: 0x811b, lo: 0x9a, hi: 0x9a},\n\t{value: 0x3841, lo: 0xa2, hi: 0xa2},\n\t{value: 0x3847, lo: 0xa3, hi: 0xa3},\n\t{value: 0x3853, lo: 0xa4, hi: 0xa4},\n\t{value: 0x384d, lo: 0xa5, hi: 0xa5},\n\t{value: 0x3859, lo: 0xa6, hi: 0xa6},\n\t{value: 0xa000, lo: 0xa7, hi: 0xa7},\n\t// Block 0x8, offset 0x47\n\t{value: 0x0000, lo: 0x0e},\n\t{value: 0x386b, lo: 0x80, hi: 0x80},\n\t{value: 0xa000, lo: 0x81, hi: 0x81},\n\t{value: 0x385f, lo: 0x82, hi: 0x82},\n\t{value: 0xa000, lo: 0x92, hi: 0x92},\n\t{value: 0x3865, lo: 0x93, hi: 0x93},\n\t{value: 0xa000, lo: 0x95, hi: 0x95},\n\t{value: 0x8132, lo: 0x96, hi: 0x9c},\n\t{value: 0x8132, lo: 0x9f, hi: 0xa2},\n\t{value: 0x812d, lo: 0xa3, hi: 0xa3},\n\t{value: 0x8132, lo: 0xa4, hi: 0xa4},\n\t{value: 0x8132, lo: 0xa7, hi: 0xa8},\n\t{value: 0x812d, lo: 0xaa, hi: 0xaa},\n\t{value: 0x8132, lo: 0xab, hi: 0xac},\n\t{value: 0x812d, lo: 0xad, hi: 0xad},\n\t// Block 0x9, offset 0x56\n\t{value: 0x0000, lo: 0x0c},\n\t{value: 0x811f, lo: 0x91, hi: 0x91},\n\t{value: 0x8132, lo: 0xb0, hi: 0xb0},\n\t{value: 0x812d, lo: 0xb1, hi: 0xb1},\n\t{value: 0x8132, lo: 0xb2, hi: 0xb3},\n\t{value: 0x812d, lo: 0xb4, hi: 0xb4},\n\t{value: 0x8132, lo: 0xb5, hi: 0xb6},\n\t{value: 0x812d, lo: 0xb7, hi: 0xb9},\n\t{value: 0x8132, lo: 0xba, hi: 0xba},\n\t{value: 0x812d, lo: 0xbb, hi: 0xbc},\n\t{value: 0x8132, lo: 0xbd, hi: 0xbd},\n\t{value: 0x812d, lo: 0xbe, hi: 0xbe},\n\t{value: 0x8132, lo: 0xbf, hi: 0xbf},\n\t// Block 0xa, offset 0x63\n\t{value: 0x0005, lo: 0x07},\n\t{value: 0x8132, lo: 0x80, hi: 0x80},\n\t{value: 0x8132, lo: 0x81, hi: 0x81},\n\t{value: 0x812d, lo: 0x82, hi: 0x83},\n\t{value: 0x812d, lo: 0x84, hi: 0x85},\n\t{value: 0x812d, lo: 0x86, hi: 0x87},\n\t{value: 0x812d, lo: 0x88, hi: 0x89},\n\t{value: 0x8132, lo: 0x8a, hi: 0x8a},\n\t// Block 0xb, offset 0x6b\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x8132, lo: 0xab, hi: 0xb1},\n\t{value: 0x812d, lo: 0xb2, hi: 0xb2},\n\t{value: 0x8132, lo: 0xb3, hi: 0xb3},\n\t// Block 0xc, offset 0x6f\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x8132, lo: 0x96, hi: 0x99},\n\t{value: 0x8132, lo: 0x9b, hi: 0xa3},\n\t{value: 0x8132, lo: 0xa5, hi: 0xa7},\n\t{value: 0x8132, lo: 0xa9, hi: 0xad},\n\t// Block 0xd, offset 0x74\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x812d, lo: 0x99, hi: 0x9b},\n\t// Block 0xe, offset 0x76\n\t{value: 0x0000, lo: 0x10},\n\t{value: 0x8132, lo: 0x94, hi: 0xa1},\n\t{value: 0x812d, lo: 0xa3, hi: 0xa3},\n\t{value: 0x8132, lo: 0xa4, hi: 0xa5},\n\t{value: 0x812d, lo: 0xa6, hi: 0xa6},\n\t{value: 0x8132, lo: 0xa7, hi: 0xa8},\n\t{value: 0x812d, lo: 0xa9, hi: 0xa9},\n\t{value: 0x8132, lo: 0xaa, hi: 0xac},\n\t{value: 0x812d, lo: 0xad, hi: 0xaf},\n\t{value: 0x8116, lo: 0xb0, hi: 0xb0},\n\t{value: 0x8117, lo: 0xb1, hi: 0xb1},\n\t{value: 0x8118, lo: 0xb2, hi: 0xb2},\n\t{value: 0x8132, lo: 0xb3, hi: 0xb5},\n\t{value: 0x812d, lo: 0xb6, hi: 0xb6},\n\t{value: 0x8132, lo: 0xb7, hi: 0xb8},\n\t{value: 0x812d, lo: 0xb9, hi: 0xba},\n\t{value: 0x8132, lo: 0xbb, hi: 0xbf},\n\t// Block 0xf, offset 0x87\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0xa000, lo: 0xa8, hi: 0xa8},\n\t{value: 0x3ed8, lo: 0xa9, hi: 0xa9},\n\t{value: 0xa000, lo: 0xb0, hi: 0xb0},\n\t{value: 0x3ee0, lo: 0xb1, hi: 0xb1},\n\t{value: 0xa000, lo: 0xb3, hi: 0xb3},\n\t{value: 0x3ee8, lo: 0xb4, hi: 0xb4},\n\t{value: 0x9902, lo: 0xbc, hi: 0xbc},\n\t// Block 0x10, offset 0x8f\n\t{value: 0x0008, lo: 0x06},\n\t{value: 0x8104, lo: 0x8d, hi: 0x8d},\n\t{value: 0x8132, lo: 0x91, hi: 0x91},\n\t{value: 0x812d, lo: 0x92, hi: 0x92},\n\t{value: 0x8132, lo: 0x93, hi: 0x93},\n\t{value: 0x8132, lo: 0x94, hi: 0x94},\n\t{value: 0x451c, lo: 0x98, hi: 0x9f},\n\t// Block 0x11, offset 0x96\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8102, lo: 0xbc, hi: 0xbc},\n\t{value: 0x9900, lo: 0xbe, hi: 0xbe},\n\t// Block 0x12, offset 0x99\n\t{value: 0x0008, lo: 0x06},\n\t{value: 0xa000, lo: 0x87, hi: 0x87},\n\t{value: 0x2c9e, lo: 0x8b, hi: 0x8c},\n\t{value: 0x8104, lo: 0x8d, hi: 0x8d},\n\t{value: 0x9900, lo: 0x97, hi: 0x97},\n\t{value: 0x455c, lo: 0x9c, hi: 0x9d},\n\t{value: 0x456c, lo: 0x9f, hi: 0x9f},\n\t// Block 0x13, offset 0xa0\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x4594, lo: 0xb3, hi: 0xb3},\n\t{value: 0x459c, lo: 0xb6, hi: 0xb6},\n\t{value: 0x8102, lo: 0xbc, hi: 0xbc},\n\t// Block 0x14, offset 0xa4\n\t{value: 0x0008, lo: 0x03},\n\t{value: 0x8104, lo: 0x8d, hi: 0x8d},\n\t{value: 0x4574, lo: 0x99, hi: 0x9b},\n\t{value: 0x458c, lo: 0x9e, hi: 0x9e},\n\t// Block 0x15, offset 0xa8\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8102, lo: 0xbc, hi: 0xbc},\n\t// Block 0x16, offset 0xaa\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0x8d, hi: 0x8d},\n\t// Block 0x17, offset 0xac\n\t{value: 0x0000, lo: 0x08},\n\t{value: 0xa000, lo: 0x87, hi: 0x87},\n\t{value: 0x2cb6, lo: 0x88, hi: 0x88},\n\t{value: 0x2cae, lo: 0x8b, hi: 0x8b},\n\t{value: 0x2cbe, lo: 0x8c, hi: 0x8c},\n\t{value: 0x8104, lo: 0x8d, hi: 0x8d},\n\t{value: 0x9900, lo: 0x96, hi: 0x97},\n\t{value: 0x45a4, lo: 0x9c, hi: 0x9c},\n\t{value: 0x45ac, lo: 0x9d, hi: 0x9d},\n\t// Block 0x18, offset 0xb5\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0xa000, lo: 0x92, hi: 0x92},\n\t{value: 0x2cc6, lo: 0x94, hi: 0x94},\n\t{value: 0x9900, lo: 0xbe, hi: 0xbe},\n\t// Block 0x19, offset 0xb9\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0xa000, lo: 0x86, hi: 0x87},\n\t{value: 0x2cce, lo: 0x8a, hi: 0x8a},\n\t{value: 0x2cde, lo: 0x8b, hi: 0x8b},\n\t{value: 0x2cd6, lo: 0x8c, hi: 0x8c},\n\t{value: 0x8104, lo: 0x8d, hi: 0x8d},\n\t{value: 0x9900, lo: 0x97, hi: 0x97},\n\t// Block 0x1a, offset 0xc0\n\t{value: 0x1801, lo: 0x04},\n\t{value: 0xa000, lo: 0x86, hi: 0x86},\n\t{value: 0x3ef0, lo: 0x88, hi: 0x88},\n\t{value: 0x8104, lo: 0x8d, hi: 0x8d},\n\t{value: 0x8120, lo: 0x95, hi: 0x96},\n\t// Block 0x1b, offset 0xc5\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8102, lo: 0xbc, hi: 0xbc},\n\t{value: 0xa000, lo: 0xbf, hi: 0xbf},\n\t// Block 0x1c, offset 0xc8\n\t{value: 0x0000, lo: 0x09},\n\t{value: 0x2ce6, lo: 0x80, hi: 0x80},\n\t{value: 0x9900, lo: 0x82, hi: 0x82},\n\t{value: 0xa000, lo: 0x86, hi: 0x86},\n\t{value: 0x2cee, lo: 0x87, hi: 0x87},\n\t{value: 0x2cf6, lo: 0x88, hi: 0x88},\n\t{value: 0x2f50, lo: 0x8a, hi: 0x8a},\n\t{value: 0x2dd8, lo: 0x8b, hi: 0x8b},\n\t{value: 0x8104, lo: 0x8d, hi: 0x8d},\n\t{value: 0x9900, lo: 0x95, hi: 0x96},\n\t// Block 0x1d, offset 0xd2\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8104, lo: 0xbb, hi: 0xbc},\n\t{value: 0x9900, lo: 0xbe, hi: 0xbe},\n\t// Block 0x1e, offset 0xd5\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0xa000, lo: 0x86, hi: 0x87},\n\t{value: 0x2cfe, lo: 0x8a, hi: 0x8a},\n\t{value: 0x2d0e, lo: 0x8b, hi: 0x8b},\n\t{value: 0x2d06, lo: 0x8c, hi: 0x8c},\n\t{value: 0x8104, lo: 0x8d, hi: 0x8d},\n\t{value: 0x9900, lo: 0x97, hi: 0x97},\n\t// Block 0x1f, offset 0xdc\n\t{value: 0x6bea, lo: 0x07},\n\t{value: 0x9904, lo: 0x8a, hi: 0x8a},\n\t{value: 0x9900, lo: 0x8f, hi: 0x8f},\n\t{value: 0xa000, lo: 0x99, hi: 0x99},\n\t{value: 0x3ef8, lo: 0x9a, hi: 0x9a},\n\t{value: 0x2f58, lo: 0x9c, hi: 0x9c},\n\t{value: 0x2de3, lo: 0x9d, hi: 0x9d},\n\t{value: 0x2d16, lo: 0x9e, hi: 0x9f},\n\t// Block 0x20, offset 0xe4\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x2621, lo: 0xb3, hi: 0xb3},\n\t{value: 0x8122, lo: 0xb8, hi: 0xb9},\n\t{value: 0x8104, lo: 0xba, hi: 0xba},\n\t// Block 0x21, offset 0xe8\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8123, lo: 0x88, hi: 0x8b},\n\t// Block 0x22, offset 0xea\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x2636, lo: 0xb3, hi: 0xb3},\n\t{value: 0x8124, lo: 0xb8, hi: 0xb9},\n\t// Block 0x23, offset 0xed\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x8125, lo: 0x88, hi: 0x8b},\n\t{value: 0x2628, lo: 0x9c, hi: 0x9c},\n\t{value: 0x262f, lo: 0x9d, hi: 0x9d},\n\t// Block 0x24, offset 0xf1\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x030b, lo: 0x8c, hi: 0x8c},\n\t{value: 0x812d, lo: 0x98, hi: 0x99},\n\t{value: 0x812d, lo: 0xb5, hi: 0xb5},\n\t{value: 0x812d, lo: 0xb7, hi: 0xb7},\n\t{value: 0x812b, lo: 0xb9, hi: 0xb9},\n\t// Block 0x25, offset 0xf7\n\t{value: 0x0000, lo: 0x10},\n\t{value: 0x2644, lo: 0x83, hi: 0x83},\n\t{value: 0x264b, lo: 0x8d, hi: 0x8d},\n\t{value: 0x2652, lo: 0x92, hi: 0x92},\n\t{value: 0x2659, lo: 0x97, hi: 0x97},\n\t{value: 0x2660, lo: 0x9c, hi: 0x9c},\n\t{value: 0x263d, lo: 0xa9, hi: 0xa9},\n\t{value: 0x8126, lo: 0xb1, hi: 0xb1},\n\t{value: 0x8127, lo: 0xb2, hi: 0xb2},\n\t{value: 0x4a84, lo: 0xb3, hi: 0xb3},\n\t{value: 0x8128, lo: 0xb4, hi: 0xb4},\n\t{value: 0x4a8d, lo: 0xb5, hi: 0xb5},\n\t{value: 0x45b4, lo: 0xb6, hi: 0xb6},\n\t{value: 0x45f4, lo: 0xb7, hi: 0xb7},\n\t{value: 0x45bc, lo: 0xb8, hi: 0xb8},\n\t{value: 0x45ff, lo: 0xb9, hi: 0xb9},\n\t{value: 0x8127, lo: 0xba, hi: 0xbd},\n\t// Block 0x26, offset 0x108\n\t{value: 0x0000, lo: 0x0b},\n\t{value: 0x8127, lo: 0x80, hi: 0x80},\n\t{value: 0x4a96, lo: 0x81, hi: 0x81},\n\t{value: 0x8132, lo: 0x82, hi: 0x83},\n\t{value: 0x8104, lo: 0x84, hi: 0x84},\n\t{value: 0x8132, lo: 0x86, hi: 0x87},\n\t{value: 0x266e, lo: 0x93, hi: 0x93},\n\t{value: 0x2675, lo: 0x9d, hi: 0x9d},\n\t{value: 0x267c, lo: 0xa2, hi: 0xa2},\n\t{value: 0x2683, lo: 0xa7, hi: 0xa7},\n\t{value: 0x268a, lo: 0xac, hi: 0xac},\n\t{value: 0x2667, lo: 0xb9, hi: 0xb9},\n\t// Block 0x27, offset 0x114\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x812d, lo: 0x86, hi: 0x86},\n\t// Block 0x28, offset 0x116\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0xa000, lo: 0xa5, hi: 0xa5},\n\t{value: 0x2d1e, lo: 0xa6, hi: 0xa6},\n\t{value: 0x9900, lo: 0xae, hi: 0xae},\n\t{value: 0x8102, lo: 0xb7, hi: 0xb7},\n\t{value: 0x8104, lo: 0xb9, hi: 0xba},\n\t// Block 0x29, offset 0x11c\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x812d, lo: 0x8d, hi: 0x8d},\n\t// Block 0x2a, offset 0x11e\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x030f, lo: 0xbc, hi: 0xbc},\n\t// Block 0x2b, offset 0x120\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0xa000, lo: 0x80, hi: 0x92},\n\t// Block 0x2c, offset 0x122\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0xb900, lo: 0xa1, hi: 0xb5},\n\t// Block 0x2d, offset 0x124\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x9900, lo: 0xa8, hi: 0xbf},\n\t// Block 0x2e, offset 0x126\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x9900, lo: 0x80, hi: 0x82},\n\t// Block 0x2f, offset 0x128\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8132, lo: 0x9d, hi: 0x9f},\n\t// Block 0x30, offset 0x12a\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8104, lo: 0x94, hi: 0x94},\n\t{value: 0x8104, lo: 0xb4, hi: 0xb4},\n\t// Block 0x31, offset 0x12d\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8104, lo: 0x92, hi: 0x92},\n\t{value: 0x8132, lo: 0x9d, hi: 0x9d},\n\t// Block 0x32, offset 0x130\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8131, lo: 0xa9, hi: 0xa9},\n\t// Block 0x33, offset 0x132\n\t{value: 0x0004, lo: 0x02},\n\t{value: 0x812e, lo: 0xb9, hi: 0xba},\n\t{value: 0x812d, lo: 0xbb, hi: 0xbb},\n\t// Block 0x34, offset 0x135\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8132, lo: 0x97, hi: 0x97},\n\t{value: 0x812d, lo: 0x98, hi: 0x98},\n\t// Block 0x35, offset 0x138\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x8104, lo: 0xa0, hi: 0xa0},\n\t{value: 0x8132, lo: 0xb5, hi: 0xbc},\n\t{value: 0x812d, lo: 0xbf, hi: 0xbf},\n\t// Block 0x36, offset 0x13c\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x8132, lo: 0xb0, hi: 0xb4},\n\t{value: 0x812d, lo: 0xb5, hi: 0xba},\n\t{value: 0x8132, lo: 0xbb, hi: 0xbc},\n\t{value: 0x812d, lo: 0xbd, hi: 0xbd},\n\t// Block 0x37, offset 0x141\n\t{value: 0x0000, lo: 0x08},\n\t{value: 0x2d66, lo: 0x80, hi: 0x80},\n\t{value: 0x2d6e, lo: 0x81, hi: 0x81},\n\t{value: 0xa000, lo: 0x82, hi: 0x82},\n\t{value: 0x2d76, lo: 0x83, hi: 0x83},\n\t{value: 0x8104, lo: 0x84, hi: 0x84},\n\t{value: 0x8132, lo: 0xab, hi: 0xab},\n\t{value: 0x812d, lo: 0xac, hi: 0xac},\n\t{value: 0x8132, lo: 0xad, hi: 0xb3},\n\t// Block 0x38, offset 0x14a\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0xaa, hi: 0xab},\n\t// Block 0x39, offset 0x14c\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8102, lo: 0xa6, hi: 0xa6},\n\t{value: 0x8104, lo: 0xb2, hi: 0xb3},\n\t// Block 0x3a, offset 0x14f\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8102, lo: 0xb7, hi: 0xb7},\n\t// Block 0x3b, offset 0x151\n\t{value: 0x0000, lo: 0x0a},\n\t{value: 0x8132, lo: 0x90, hi: 0x92},\n\t{value: 0x8101, lo: 0x94, hi: 0x94},\n\t{value: 0x812d, lo: 0x95, hi: 0x99},\n\t{value: 0x8132, lo: 0x9a, hi: 0x9b},\n\t{value: 0x812d, lo: 0x9c, hi: 0x9f},\n\t{value: 0x8132, lo: 0xa0, hi: 0xa0},\n\t{value: 0x8101, lo: 0xa2, hi: 0xa8},\n\t{value: 0x812d, lo: 0xad, hi: 0xad},\n\t{value: 0x8132, lo: 0xb4, hi: 0xb4},\n\t{value: 0x8132, lo: 0xb8, hi: 0xb9},\n\t// Block 0x3c, offset 0x15c\n\t{value: 0x0002, lo: 0x0a},\n\t{value: 0x0043, lo: 0xac, hi: 0xac},\n\t{value: 0x00d1, lo: 0xad, hi: 0xad},\n\t{value: 0x0045, lo: 0xae, hi: 0xae},\n\t{value: 0x0049, lo: 0xb0, hi: 0xb1},\n\t{value: 0x00e6, lo: 0xb2, hi: 0xb2},\n\t{value: 0x004f, lo: 0xb3, hi: 0xba},\n\t{value: 0x005f, lo: 0xbc, hi: 0xbc},\n\t{value: 0x00ef, lo: 0xbd, hi: 0xbd},\n\t{value: 0x0061, lo: 0xbe, hi: 0xbe},\n\t{value: 0x0065, lo: 0xbf, hi: 0xbf},\n\t// Block 0x3d, offset 0x167\n\t{value: 0x0000, lo: 0x0d},\n\t{value: 0x0001, lo: 0x80, hi: 0x8a},\n\t{value: 0x043b, lo: 0x91, hi: 0x91},\n\t{value: 0x429b, lo: 0x97, hi: 0x97},\n\t{value: 0x001d, lo: 0xa4, hi: 0xa4},\n\t{value: 0x1873, lo: 0xa5, hi: 0xa5},\n\t{value: 0x1b5c, lo: 0xa6, hi: 0xa6},\n\t{value: 0x0001, lo: 0xaf, hi: 0xaf},\n\t{value: 0x2691, lo: 0xb3, hi: 0xb3},\n\t{value: 0x27fe, lo: 0xb4, hi: 0xb4},\n\t{value: 0x2698, lo: 0xb6, hi: 0xb6},\n\t{value: 0x2808, lo: 0xb7, hi: 0xb7},\n\t{value: 0x186d, lo: 0xbc, hi: 0xbc},\n\t{value: 0x4269, lo: 0xbe, hi: 0xbe},\n\t// Block 0x3e, offset 0x175\n\t{value: 0x0002, lo: 0x0d},\n\t{value: 0x1933, lo: 0x87, hi: 0x87},\n\t{value: 0x1930, lo: 0x88, hi: 0x88},\n\t{value: 0x1870, lo: 0x89, hi: 0x89},\n\t{value: 0x298e, lo: 0x97, hi: 0x97},\n\t{value: 0x0001, lo: 0x9f, hi: 0x9f},\n\t{value: 0x0021, lo: 0xb0, hi: 0xb0},\n\t{value: 0x0093, lo: 0xb1, hi: 0xb1},\n\t{value: 0x0029, lo: 0xb4, hi: 0xb9},\n\t{value: 0x0017, lo: 0xba, hi: 0xba},\n\t{value: 0x0467, lo: 0xbb, hi: 0xbb},\n\t{value: 0x003b, lo: 0xbc, hi: 0xbc},\n\t{value: 0x0011, lo: 0xbd, hi: 0xbe},\n\t{value: 0x009d, lo: 0xbf, hi: 0xbf},\n\t// Block 0x3f, offset 0x183\n\t{value: 0x0002, lo: 0x0f},\n\t{value: 0x0021, lo: 0x80, hi: 0x89},\n\t{value: 0x0017, lo: 0x8a, hi: 0x8a},\n\t{value: 0x0467, lo: 0x8b, hi: 0x8b},\n\t{value: 0x003b, lo: 0x8c, hi: 0x8c},\n\t{value: 0x0011, lo: 0x8d, hi: 0x8e},\n\t{value: 0x0083, lo: 0x90, hi: 0x90},\n\t{value: 0x008b, lo: 0x91, hi: 0x91},\n\t{value: 0x009f, lo: 0x92, hi: 0x92},\n\t{value: 0x00b1, lo: 0x93, hi: 0x93},\n\t{value: 0x0104, lo: 0x94, hi: 0x94},\n\t{value: 0x0091, lo: 0x95, hi: 0x95},\n\t{value: 0x0097, lo: 0x96, hi: 0x99},\n\t{value: 0x00a1, lo: 0x9a, hi: 0x9a},\n\t{value: 0x00a7, lo: 0x9b, hi: 0x9c},\n\t{value: 0x1999, lo: 0xa8, hi: 0xa8},\n\t// Block 0x40, offset 0x193\n\t{value: 0x0000, lo: 0x0d},\n\t{value: 0x8132, lo: 0x90, hi: 0x91},\n\t{value: 0x8101, lo: 0x92, hi: 0x93},\n\t{value: 0x8132, lo: 0x94, hi: 0x97},\n\t{value: 0x8101, lo: 0x98, hi: 0x9a},\n\t{value: 0x8132, lo: 0x9b, hi: 0x9c},\n\t{value: 0x8132, lo: 0xa1, hi: 0xa1},\n\t{value: 0x8101, lo: 0xa5, hi: 0xa6},\n\t{value: 0x8132, lo: 0xa7, hi: 0xa7},\n\t{value: 0x812d, lo: 0xa8, hi: 0xa8},\n\t{value: 0x8132, lo: 0xa9, hi: 0xa9},\n\t{value: 0x8101, lo: 0xaa, hi: 0xab},\n\t{value: 0x812d, lo: 0xac, hi: 0xaf},\n\t{value: 0x8132, lo: 0xb0, hi: 0xb0},\n\t// Block 0x41, offset 0x1a1\n\t{value: 0x0007, lo: 0x06},\n\t{value: 0x2180, lo: 0x89, hi: 0x89},\n\t{value: 0xa000, lo: 0x90, hi: 0x90},\n\t{value: 0xa000, lo: 0x92, hi: 0x92},\n\t{value: 0xa000, lo: 0x94, hi: 0x94},\n\t{value: 0x3bb9, lo: 0x9a, hi: 0x9b},\n\t{value: 0x3bc7, lo: 0xae, hi: 0xae},\n\t// Block 0x42, offset 0x1a8\n\t{value: 0x000e, lo: 0x05},\n\t{value: 0x3bce, lo: 0x8d, hi: 0x8e},\n\t{value: 0x3bd5, lo: 0x8f, hi: 0x8f},\n\t{value: 0xa000, lo: 0x90, hi: 0x90},\n\t{value: 0xa000, lo: 0x92, hi: 0x92},\n\t{value: 0xa000, lo: 0x94, hi: 0x94},\n\t// Block 0x43, offset 0x1ae\n\t{value: 0x0173, lo: 0x0e},\n\t{value: 0xa000, lo: 0x83, hi: 0x83},\n\t{value: 0x3be3, lo: 0x84, hi: 0x84},\n\t{value: 0xa000, lo: 0x88, hi: 0x88},\n\t{value: 0x3bea, lo: 0x89, hi: 0x89},\n\t{value: 0xa000, lo: 0x8b, hi: 0x8b},\n\t{value: 0x3bf1, lo: 0x8c, hi: 0x8c},\n\t{value: 0xa000, lo: 0xa3, hi: 0xa3},\n\t{value: 0x3bf8, lo: 0xa4, hi: 0xa4},\n\t{value: 0xa000, lo: 0xa5, hi: 0xa5},\n\t{value: 0x3bff, lo: 0xa6, hi: 0xa6},\n\t{value: 0x269f, lo: 0xac, hi: 0xad},\n\t{value: 0x26a6, lo: 0xaf, hi: 0xaf},\n\t{value: 0x281c, lo: 0xb0, hi: 0xb0},\n\t{value: 0xa000, lo: 0xbc, hi: 0xbc},\n\t// Block 0x44, offset 0x1bd\n\t{value: 0x0007, lo: 0x03},\n\t{value: 0x3c68, lo: 0xa0, hi: 0xa1},\n\t{value: 0x3c92, lo: 0xa2, hi: 0xa3},\n\t{value: 0x3cbc, lo: 0xaa, hi: 0xad},\n\t// Block 0x45, offset 0x1c1\n\t{value: 0x0004, lo: 0x01},\n\t{value: 0x048b, lo: 0xa9, hi: 0xaa},\n\t// Block 0x46, offset 0x1c3\n\t{value: 0x0002, lo: 0x03},\n\t{value: 0x0057, lo: 0x80, hi: 0x8f},\n\t{value: 0x0083, lo: 0x90, hi: 0xa9},\n\t{value: 0x0021, lo: 0xaa, hi: 0xaa},\n\t// Block 0x47, offset 0x1c7\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x299b, lo: 0x8c, hi: 0x8c},\n\t// Block 0x48, offset 0x1c9\n\t{value: 0x0263, lo: 0x02},\n\t{value: 0x1b8c, lo: 0xb4, hi: 0xb4},\n\t{value: 0x192d, lo: 0xb5, hi: 0xb6},\n\t// Block 0x49, offset 0x1cc\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x44dd, lo: 0x9c, hi: 0x9c},\n\t// Block 0x4a, offset 0x1ce\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0095, lo: 0xbc, hi: 0xbc},\n\t{value: 0x006d, lo: 0xbd, hi: 0xbd},\n\t// Block 0x4b, offset 0x1d1\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8132, lo: 0xaf, hi: 0xb1},\n\t// Block 0x4c, offset 0x1d3\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x047f, lo: 0xaf, hi: 0xaf},\n\t{value: 0x8104, lo: 0xbf, hi: 0xbf},\n\t// Block 0x4d, offset 0x1d6\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8132, lo: 0xa0, hi: 0xbf},\n\t// Block 0x4e, offset 0x1d8\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x0dc3, lo: 0x9f, hi: 0x9f},\n\t// Block 0x4f, offset 0x1da\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x162f, lo: 0xb3, hi: 0xb3},\n\t// Block 0x50, offset 0x1dc\n\t{value: 0x0004, lo: 0x0b},\n\t{value: 0x1597, lo: 0x80, hi: 0x82},\n\t{value: 0x15af, lo: 0x83, hi: 0x83},\n\t{value: 0x15c7, lo: 0x84, hi: 0x85},\n\t{value: 0x15d7, lo: 0x86, hi: 0x89},\n\t{value: 0x15eb, lo: 0x8a, hi: 0x8c},\n\t{value: 0x15ff, lo: 0x8d, hi: 0x8d},\n\t{value: 0x1607, lo: 0x8e, hi: 0x8e},\n\t{value: 0x160f, lo: 0x8f, hi: 0x90},\n\t{value: 0x161b, lo: 0x91, hi: 0x93},\n\t{value: 0x162b, lo: 0x94, hi: 0x94},\n\t{value: 0x1633, lo: 0x95, hi: 0x95},\n\t// Block 0x51, offset 0x1e8\n\t{value: 0x0004, lo: 0x09},\n\t{value: 0x0001, lo: 0x80, hi: 0x80},\n\t{value: 0x812c, lo: 0xaa, hi: 0xaa},\n\t{value: 0x8131, lo: 0xab, hi: 0xab},\n\t{value: 0x8133, lo: 0xac, hi: 0xac},\n\t{value: 0x812e, lo: 0xad, hi: 0xad},\n\t{value: 0x812f, lo: 0xae, hi: 0xae},\n\t{value: 0x812f, lo: 0xaf, hi: 0xaf},\n\t{value: 0x04b3, lo: 0xb6, hi: 0xb6},\n\t{value: 0x0887, lo: 0xb8, hi: 0xba},\n\t// Block 0x52, offset 0x1f2\n\t{value: 0x0006, lo: 0x09},\n\t{value: 0x0313, lo: 0xb1, hi: 0xb1},\n\t{value: 0x0317, lo: 0xb2, hi: 0xb2},\n\t{value: 0x4a3b, lo: 0xb3, hi: 0xb3},\n\t{value: 0x031b, lo: 0xb4, hi: 0xb4},\n\t{value: 0x4a41, lo: 0xb5, hi: 0xb6},\n\t{value: 0x031f, lo: 0xb7, hi: 0xb7},\n\t{value: 0x0323, lo: 0xb8, hi: 0xb8},\n\t{value: 0x0327, lo: 0xb9, hi: 0xb9},\n\t{value: 0x4a4d, lo: 0xba, hi: 0xbf},\n\t// Block 0x53, offset 0x1fc\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8132, lo: 0xaf, hi: 0xaf},\n\t{value: 0x8132, lo: 0xb4, hi: 0xbd},\n\t// Block 0x54, offset 0x1ff\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x020f, lo: 0x9c, hi: 0x9c},\n\t{value: 0x0212, lo: 0x9d, hi: 0x9d},\n\t{value: 0x8132, lo: 0x9e, hi: 0x9f},\n\t// Block 0x55, offset 0x203\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8132, lo: 0xb0, hi: 0xb1},\n\t// Block 0x56, offset 0x205\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x163b, lo: 0xb0, hi: 0xb0},\n\t// Block 0x57, offset 0x207\n\t{value: 0x000c, lo: 0x01},\n\t{value: 0x00d7, lo: 0xb8, hi: 0xb9},\n\t// Block 0x58, offset 0x209\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0x86, hi: 0x86},\n\t// Block 0x59, offset 0x20b\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8104, lo: 0x84, hi: 0x84},\n\t{value: 0x8132, lo: 0xa0, hi: 0xb1},\n\t// Block 0x5a, offset 0x20e\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x812d, lo: 0xab, hi: 0xad},\n\t// Block 0x5b, offset 0x210\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0x93, hi: 0x93},\n\t// Block 0x5c, offset 0x212\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8102, lo: 0xb3, hi: 0xb3},\n\t// Block 0x5d, offset 0x214\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0x80, hi: 0x80},\n\t// Block 0x5e, offset 0x216\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x8132, lo: 0xb0, hi: 0xb0},\n\t{value: 0x8132, lo: 0xb2, hi: 0xb3},\n\t{value: 0x812d, lo: 0xb4, hi: 0xb4},\n\t{value: 0x8132, lo: 0xb7, hi: 0xb8},\n\t{value: 0x8132, lo: 0xbe, hi: 0xbf},\n\t// Block 0x5f, offset 0x21c\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8132, lo: 0x81, hi: 0x81},\n\t{value: 0x8104, lo: 0xb6, hi: 0xb6},\n\t// Block 0x60, offset 0x21f\n\t{value: 0x0008, lo: 0x03},\n\t{value: 0x1637, lo: 0x9c, hi: 0x9d},\n\t{value: 0x0125, lo: 0x9e, hi: 0x9e},\n\t{value: 0x1643, lo: 0x9f, hi: 0x9f},\n\t// Block 0x61, offset 0x223\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0xad, hi: 0xad},\n\t// Block 0x62, offset 0x225\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0xe500, lo: 0x80, hi: 0x80},\n\t{value: 0xc600, lo: 0x81, hi: 0x9b},\n\t{value: 0xe500, lo: 0x9c, hi: 0x9c},\n\t{value: 0xc600, lo: 0x9d, hi: 0xb7},\n\t{value: 0xe500, lo: 0xb8, hi: 0xb8},\n\t{value: 0xc600, lo: 0xb9, hi: 0xbf},\n\t// Block 0x63, offset 0x22c\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0xc600, lo: 0x80, hi: 0x93},\n\t{value: 0xe500, lo: 0x94, hi: 0x94},\n\t{value: 0xc600, lo: 0x95, hi: 0xaf},\n\t{value: 0xe500, lo: 0xb0, hi: 0xb0},\n\t{value: 0xc600, lo: 0xb1, hi: 0xbf},\n\t// Block 0x64, offset 0x232\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0xc600, lo: 0x80, hi: 0x8b},\n\t{value: 0xe500, lo: 0x8c, hi: 0x8c},\n\t{value: 0xc600, lo: 0x8d, hi: 0xa7},\n\t{value: 0xe500, lo: 0xa8, hi: 0xa8},\n\t{value: 0xc600, lo: 0xa9, hi: 0xbf},\n\t// Block 0x65, offset 0x238\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0xc600, lo: 0x80, hi: 0x83},\n\t{value: 0xe500, lo: 0x84, hi: 0x84},\n\t{value: 0xc600, lo: 0x85, hi: 0x9f},\n\t{value: 0xe500, lo: 0xa0, hi: 0xa0},\n\t{value: 0xc600, lo: 0xa1, hi: 0xbb},\n\t{value: 0xe500, lo: 0xbc, hi: 0xbc},\n\t{value: 0xc600, lo: 0xbd, hi: 0xbf},\n\t// Block 0x66, offset 0x240\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0xc600, lo: 0x80, hi: 0x97},\n\t{value: 0xe500, lo: 0x98, hi: 0x98},\n\t{value: 0xc600, lo: 0x99, hi: 0xb3},\n\t{value: 0xe500, lo: 0xb4, hi: 0xb4},\n\t{value: 0xc600, lo: 0xb5, hi: 0xbf},\n\t// Block 0x67, offset 0x246\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0xc600, lo: 0x80, hi: 0x8f},\n\t{value: 0xe500, lo: 0x90, hi: 0x90},\n\t{value: 0xc600, lo: 0x91, hi: 0xab},\n\t{value: 0xe500, lo: 0xac, hi: 0xac},\n\t{value: 0xc600, lo: 0xad, hi: 0xbf},\n\t// Block 0x68, offset 0x24c\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0xc600, lo: 0x80, hi: 0x87},\n\t{value: 0xe500, lo: 0x88, hi: 0x88},\n\t{value: 0xc600, lo: 0x89, hi: 0xa3},\n\t{value: 0xe500, lo: 0xa4, hi: 0xa4},\n\t{value: 0xc600, lo: 0xa5, hi: 0xbf},\n\t// Block 0x69, offset 0x252\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0xc600, lo: 0x80, hi: 0x87},\n\t{value: 0xe500, lo: 0x88, hi: 0x88},\n\t{value: 0xc600, lo: 0x89, hi: 0xa3},\n\t// Block 0x6a, offset 0x256\n\t{value: 0x0002, lo: 0x01},\n\t{value: 0x0003, lo: 0x81, hi: 0xbf},\n\t// Block 0x6b, offset 0x258\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x812d, lo: 0xbd, hi: 0xbd},\n\t// Block 0x6c, offset 0x25a\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x812d, lo: 0xa0, hi: 0xa0},\n\t// Block 0x6d, offset 0x25c\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8132, lo: 0xb6, hi: 0xba},\n\t// Block 0x6e, offset 0x25e\n\t{value: 0x002c, lo: 0x05},\n\t{value: 0x812d, lo: 0x8d, hi: 0x8d},\n\t{value: 0x8132, lo: 0x8f, hi: 0x8f},\n\t{value: 0x8132, lo: 0xb8, hi: 0xb8},\n\t{value: 0x8101, lo: 0xb9, hi: 0xba},\n\t{value: 0x8104, lo: 0xbf, hi: 0xbf},\n\t// Block 0x6f, offset 0x264\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8132, lo: 0xa5, hi: 0xa5},\n\t{value: 0x812d, lo: 0xa6, hi: 0xa6},\n\t// Block 0x70, offset 0x267\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8104, lo: 0x86, hi: 0x86},\n\t{value: 0x8104, lo: 0xbf, hi: 0xbf},\n\t// Block 0x71, offset 0x26a\n\t{value: 0x17fe, lo: 0x07},\n\t{value: 0xa000, lo: 0x99, hi: 0x99},\n\t{value: 0x4238, lo: 0x9a, hi: 0x9a},\n\t{value: 0xa000, lo: 0x9b, hi: 0x9b},\n\t{value: 0x4242, lo: 0x9c, hi: 0x9c},\n\t{value: 0xa000, lo: 0xa5, hi: 0xa5},\n\t{value: 0x424c, lo: 0xab, hi: 0xab},\n\t{value: 0x8104, lo: 0xb9, hi: 0xba},\n\t// Block 0x72, offset 0x272\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0x8132, lo: 0x80, hi: 0x82},\n\t{value: 0x9900, lo: 0xa7, hi: 0xa7},\n\t{value: 0x2d7e, lo: 0xae, hi: 0xae},\n\t{value: 0x2d88, lo: 0xaf, hi: 0xaf},\n\t{value: 0xa000, lo: 0xb1, hi: 0xb2},\n\t{value: 0x8104, lo: 0xb3, hi: 0xb4},\n\t// Block 0x73, offset 0x279\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8104, lo: 0x80, hi: 0x80},\n\t{value: 0x8102, lo: 0x8a, hi: 0x8a},\n\t// Block 0x74, offset 0x27c\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8104, lo: 0xb5, hi: 0xb5},\n\t{value: 0x8102, lo: 0xb6, hi: 0xb6},\n\t// Block 0x75, offset 0x27f\n\t{value: 0x0002, lo: 0x01},\n\t{value: 0x8102, lo: 0xa9, hi: 0xaa},\n\t// Block 0x76, offset 0x281\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0xa000, lo: 0x87, hi: 0x87},\n\t{value: 0x2d92, lo: 0x8b, hi: 0x8b},\n\t{value: 0x2d9c, lo: 0x8c, hi: 0x8c},\n\t{value: 0x8104, lo: 0x8d, hi: 0x8d},\n\t{value: 0x9900, lo: 0x97, hi: 0x97},\n\t{value: 0x8132, lo: 0xa6, hi: 0xac},\n\t{value: 0x8132, lo: 0xb0, hi: 0xb4},\n\t// Block 0x77, offset 0x289\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8104, lo: 0x82, hi: 0x82},\n\t{value: 0x8102, lo: 0x86, hi: 0x86},\n\t// Block 0x78, offset 0x28c\n\t{value: 0x6b5a, lo: 0x06},\n\t{value: 0x9900, lo: 0xb0, hi: 0xb0},\n\t{value: 0xa000, lo: 0xb9, hi: 0xb9},\n\t{value: 0x9900, lo: 0xba, hi: 0xba},\n\t{value: 0x2db0, lo: 0xbb, hi: 0xbb},\n\t{value: 0x2da6, lo: 0xbc, hi: 0xbd},\n\t{value: 0x2dba, lo: 0xbe, hi: 0xbe},\n\t// Block 0x79, offset 0x293\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8104, lo: 0x82, hi: 0x82},\n\t{value: 0x8102, lo: 0x83, hi: 0x83},\n\t// Block 0x7a, offset 0x296\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x9900, lo: 0xaf, hi: 0xaf},\n\t{value: 0xa000, lo: 0xb8, hi: 0xb9},\n\t{value: 0x2dc4, lo: 0xba, hi: 0xba},\n\t{value: 0x2dce, lo: 0xbb, hi: 0xbb},\n\t{value: 0x8104, lo: 0xbf, hi: 0xbf},\n\t// Block 0x7b, offset 0x29c\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8102, lo: 0x80, hi: 0x80},\n\t// Block 0x7c, offset 0x29e\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0xbf, hi: 0xbf},\n\t// Block 0x7d, offset 0x2a0\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8104, lo: 0xb6, hi: 0xb6},\n\t{value: 0x8102, lo: 0xb7, hi: 0xb7},\n\t// Block 0x7e, offset 0x2a3\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0xab, hi: 0xab},\n\t// Block 0x7f, offset 0x2a5\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0xb4, hi: 0xb4},\n\t// Block 0x80, offset 0x2a7\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0x87, hi: 0x87},\n\t// Block 0x81, offset 0x2a9\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0x99, hi: 0x99},\n\t// Block 0x82, offset 0x2ab\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8102, lo: 0x82, hi: 0x82},\n\t{value: 0x8104, lo: 0x84, hi: 0x85},\n\t// Block 0x83, offset 0x2ae\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8101, lo: 0xb0, hi: 0xb4},\n\t// Block 0x84, offset 0x2b0\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8132, lo: 0xb0, hi: 0xb6},\n\t// Block 0x85, offset 0x2b2\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8101, lo: 0x9e, hi: 0x9e},\n\t// Block 0x86, offset 0x2b4\n\t{value: 0x0000, lo: 0x0c},\n\t{value: 0x45cc, lo: 0x9e, hi: 0x9e},\n\t{value: 0x45d6, lo: 0x9f, hi: 0x9f},\n\t{value: 0x460a, lo: 0xa0, hi: 0xa0},\n\t{value: 0x4618, lo: 0xa1, hi: 0xa1},\n\t{value: 0x4626, lo: 0xa2, hi: 0xa2},\n\t{value: 0x4634, lo: 0xa3, hi: 0xa3},\n\t{value: 0x4642, lo: 0xa4, hi: 0xa4},\n\t{value: 0x812b, lo: 0xa5, hi: 0xa6},\n\t{value: 0x8101, lo: 0xa7, hi: 0xa9},\n\t{value: 0x8130, lo: 0xad, hi: 0xad},\n\t{value: 0x812b, lo: 0xae, hi: 0xb2},\n\t{value: 0x812d, lo: 0xbb, hi: 0xbf},\n\t// Block 0x87, offset 0x2c1\n\t{value: 0x0000, lo: 0x09},\n\t{value: 0x812d, lo: 0x80, hi: 0x82},\n\t{value: 0x8132, lo: 0x85, hi: 0x89},\n\t{value: 0x812d, lo: 0x8a, hi: 0x8b},\n\t{value: 0x8132, lo: 0xaa, hi: 0xad},\n\t{value: 0x45e0, lo: 0xbb, hi: 0xbb},\n\t{value: 0x45ea, lo: 0xbc, hi: 0xbc},\n\t{value: 0x4650, lo: 0xbd, hi: 0xbd},\n\t{value: 0x466c, lo: 0xbe, hi: 0xbe},\n\t{value: 0x465e, lo: 0xbf, hi: 0xbf},\n\t// Block 0x88, offset 0x2cb\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x467a, lo: 0x80, hi: 0x80},\n\t// Block 0x89, offset 0x2cd\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8132, lo: 0x82, hi: 0x84},\n\t// Block 0x8a, offset 0x2cf\n\t{value: 0x0002, lo: 0x03},\n\t{value: 0x0043, lo: 0x80, hi: 0x99},\n\t{value: 0x0083, lo: 0x9a, hi: 0xb3},\n\t{value: 0x0043, lo: 0xb4, hi: 0xbf},\n\t// Block 0x8b, offset 0x2d3\n\t{value: 0x0002, lo: 0x04},\n\t{value: 0x005b, lo: 0x80, hi: 0x8d},\n\t{value: 0x0083, lo: 0x8e, hi: 0x94},\n\t{value: 0x0093, lo: 0x96, hi: 0xa7},\n\t{value: 0x0043, lo: 0xa8, hi: 0xbf},\n\t// Block 0x8c, offset 0x2d8\n\t{value: 0x0002, lo: 0x0b},\n\t{value: 0x0073, lo: 0x80, hi: 0x81},\n\t{value: 0x0083, lo: 0x82, hi: 0x9b},\n\t{value: 0x0043, lo: 0x9c, hi: 0x9c},\n\t{value: 0x0047, lo: 0x9e, hi: 0x9f},\n\t{value: 0x004f, lo: 0xa2, hi: 0xa2},\n\t{value: 0x0055, lo: 0xa5, hi: 0xa6},\n\t{value: 0x005d, lo: 0xa9, hi: 0xac},\n\t{value: 0x0067, lo: 0xae, hi: 0xb5},\n\t{value: 0x0083, lo: 0xb6, hi: 0xb9},\n\t{value: 0x008d, lo: 0xbb, hi: 0xbb},\n\t{value: 0x0091, lo: 0xbd, hi: 0xbf},\n\t// Block 0x8d, offset 0x2e4\n\t{value: 0x0002, lo: 0x04},\n\t{value: 0x0097, lo: 0x80, hi: 0x83},\n\t{value: 0x00a1, lo: 0x85, hi: 0x8f},\n\t{value: 0x0043, lo: 0x90, hi: 0xa9},\n\t{value: 0x0083, lo: 0xaa, hi: 0xbf},\n\t// Block 0x8e, offset 0x2e9\n\t{value: 0x0002, lo: 0x08},\n\t{value: 0x00af, lo: 0x80, hi: 0x83},\n\t{value: 0x0043, lo: 0x84, hi: 0x85},\n\t{value: 0x0049, lo: 0x87, hi: 0x8a},\n\t{value: 0x0055, lo: 0x8d, hi: 0x94},\n\t{value: 0x0067, lo: 0x96, hi: 0x9c},\n\t{value: 0x0083, lo: 0x9e, hi: 0xb7},\n\t{value: 0x0043, lo: 0xb8, hi: 0xb9},\n\t{value: 0x0049, lo: 0xbb, hi: 0xbe},\n\t// Block 0x8f, offset 0x2f2\n\t{value: 0x0002, lo: 0x05},\n\t{value: 0x0053, lo: 0x80, hi: 0x84},\n\t{value: 0x005f, lo: 0x86, hi: 0x86},\n\t{value: 0x0067, lo: 0x8a, hi: 0x90},\n\t{value: 0x0083, lo: 0x92, hi: 0xab},\n\t{value: 0x0043, lo: 0xac, hi: 0xbf},\n\t// Block 0x90, offset 0x2f8\n\t{value: 0x0002, lo: 0x04},\n\t{value: 0x006b, lo: 0x80, hi: 0x85},\n\t{value: 0x0083, lo: 0x86, hi: 0x9f},\n\t{value: 0x0043, lo: 0xa0, hi: 0xb9},\n\t{value: 0x0083, lo: 0xba, hi: 0xbf},\n\t// Block 0x91, offset 0x2fd\n\t{value: 0x0002, lo: 0x03},\n\t{value: 0x008f, lo: 0x80, hi: 0x93},\n\t{value: 0x0043, lo: 0x94, hi: 0xad},\n\t{value: 0x0083, lo: 0xae, hi: 0xbf},\n\t// Block 0x92, offset 0x301\n\t{value: 0x0002, lo: 0x04},\n\t{value: 0x00a7, lo: 0x80, hi: 0x87},\n\t{value: 0x0043, lo: 0x88, hi: 0xa1},\n\t{value: 0x0083, lo: 0xa2, hi: 0xbb},\n\t{value: 0x0043, lo: 0xbc, hi: 0xbf},\n\t// Block 0x93, offset 0x306\n\t{value: 0x0002, lo: 0x03},\n\t{value: 0x004b, lo: 0x80, hi: 0x95},\n\t{value: 0x0083, lo: 0x96, hi: 0xaf},\n\t{value: 0x0043, lo: 0xb0, hi: 0xbf},\n\t// Block 0x94, offset 0x30a\n\t{value: 0x0003, lo: 0x0f},\n\t{value: 0x01b8, lo: 0x80, hi: 0x80},\n\t{value: 0x045f, lo: 0x81, hi: 0x81},\n\t{value: 0x01bb, lo: 0x82, hi: 0x9a},\n\t{value: 0x045b, lo: 0x9b, hi: 0x9b},\n\t{value: 0x01c7, lo: 0x9c, hi: 0x9c},\n\t{value: 0x01d0, lo: 0x9d, hi: 0x9d},\n\t{value: 0x01d6, lo: 0x9e, hi: 0x9e},\n\t{value: 0x01fa, lo: 0x9f, hi: 0x9f},\n\t{value: 0x01eb, lo: 0xa0, hi: 0xa0},\n\t{value: 0x01e8, lo: 0xa1, hi: 0xa1},\n\t{value: 0x0173, lo: 0xa2, hi: 0xb2},\n\t{value: 0x0188, lo: 0xb3, hi: 0xb3},\n\t{value: 0x01a6, lo: 0xb4, hi: 0xba},\n\t{value: 0x045f, lo: 0xbb, hi: 0xbb},\n\t{value: 0x01bb, lo: 0xbc, hi: 0xbf},\n\t// Block 0x95, offset 0x31a\n\t{value: 0x0003, lo: 0x0d},\n\t{value: 0x01c7, lo: 0x80, hi: 0x94},\n\t{value: 0x045b, lo: 0x95, hi: 0x95},\n\t{value: 0x01c7, lo: 0x96, hi: 0x96},\n\t{value: 0x01d0, lo: 0x97, hi: 0x97},\n\t{value: 0x01d6, lo: 0x98, hi: 0x98},\n\t{value: 0x01fa, lo: 0x99, hi: 0x99},\n\t{value: 0x01eb, lo: 0x9a, hi: 0x9a},\n\t{value: 0x01e8, lo: 0x9b, hi: 0x9b},\n\t{value: 0x0173, lo: 0x9c, hi: 0xac},\n\t{value: 0x0188, lo: 0xad, hi: 0xad},\n\t{value: 0x01a6, lo: 0xae, hi: 0xb4},\n\t{value: 0x045f, lo: 0xb5, hi: 0xb5},\n\t{value: 0x01bb, lo: 0xb6, hi: 0xbf},\n\t// Block 0x96, offset 0x328\n\t{value: 0x0003, lo: 0x0d},\n\t{value: 0x01d9, lo: 0x80, hi: 0x8e},\n\t{value: 0x045b, lo: 0x8f, hi: 0x8f},\n\t{value: 0x01c7, lo: 0x90, hi: 0x90},\n\t{value: 0x01d0, lo: 0x91, hi: 0x91},\n\t{value: 0x01d6, lo: 0x92, hi: 0x92},\n\t{value: 0x01fa, lo: 0x93, hi: 0x93},\n\t{value: 0x01eb, lo: 0x94, hi: 0x94},\n\t{value: 0x01e8, lo: 0x95, hi: 0x95},\n\t{value: 0x0173, lo: 0x96, hi: 0xa6},\n\t{value: 0x0188, lo: 0xa7, hi: 0xa7},\n\t{value: 0x01a6, lo: 0xa8, hi: 0xae},\n\t{value: 0x045f, lo: 0xaf, hi: 0xaf},\n\t{value: 0x01bb, lo: 0xb0, hi: 0xbf},\n\t// Block 0x97, offset 0x336\n\t{value: 0x0003, lo: 0x0d},\n\t{value: 0x01eb, lo: 0x80, hi: 0x88},\n\t{value: 0x045b, lo: 0x89, hi: 0x89},\n\t{value: 0x01c7, lo: 0x8a, hi: 0x8a},\n\t{value: 0x01d0, lo: 0x8b, hi: 0x8b},\n\t{value: 0x01d6, lo: 0x8c, hi: 0x8c},\n\t{value: 0x01fa, lo: 0x8d, hi: 0x8d},\n\t{value: 0x01eb, lo: 0x8e, hi: 0x8e},\n\t{value: 0x01e8, lo: 0x8f, hi: 0x8f},\n\t{value: 0x0173, lo: 0x90, hi: 0xa0},\n\t{value: 0x0188, lo: 0xa1, hi: 0xa1},\n\t{value: 0x01a6, lo: 0xa2, hi: 0xa8},\n\t{value: 0x045f, lo: 0xa9, hi: 0xa9},\n\t{value: 0x01bb, lo: 0xaa, hi: 0xbf},\n\t// Block 0x98, offset 0x344\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x8132, lo: 0x80, hi: 0x86},\n\t{value: 0x8132, lo: 0x88, hi: 0x98},\n\t{value: 0x8132, lo: 0x9b, hi: 0xa1},\n\t{value: 0x8132, lo: 0xa3, hi: 0xa4},\n\t{value: 0x8132, lo: 0xa6, hi: 0xaa},\n\t// Block 0x99, offset 0x34a\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x812d, lo: 0x90, hi: 0x96},\n\t// Block 0x9a, offset 0x34c\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8132, lo: 0x84, hi: 0x89},\n\t{value: 0x8102, lo: 0x8a, hi: 0x8a},\n\t// Block 0x9b, offset 0x34f\n\t{value: 0x0002, lo: 0x09},\n\t{value: 0x0063, lo: 0x80, hi: 0x89},\n\t{value: 0x1951, lo: 0x8a, hi: 0x8a},\n\t{value: 0x1981, lo: 0x8b, hi: 0x8b},\n\t{value: 0x199c, lo: 0x8c, hi: 0x8c},\n\t{value: 0x19a2, lo: 0x8d, hi: 0x8d},\n\t{value: 0x1bc0, lo: 0x8e, hi: 0x8e},\n\t{value: 0x19ae, lo: 0x8f, hi: 0x8f},\n\t{value: 0x197b, lo: 0xaa, hi: 0xaa},\n\t{value: 0x197e, lo: 0xab, hi: 0xab},\n\t// Block 0x9c, offset 0x359\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x193f, lo: 0x90, hi: 0x90},\n\t// Block 0x9d, offset 0x35b\n\t{value: 0x0028, lo: 0x09},\n\t{value: 0x2862, lo: 0x80, hi: 0x80},\n\t{value: 0x2826, lo: 0x81, hi: 0x81},\n\t{value: 0x2830, lo: 0x82, hi: 0x82},\n\t{value: 0x2844, lo: 0x83, hi: 0x84},\n\t{value: 0x284e, lo: 0x85, hi: 0x86},\n\t{value: 0x283a, lo: 0x87, hi: 0x87},\n\t{value: 0x2858, lo: 0x88, hi: 0x88},\n\t{value: 0x0b6f, lo: 0x90, hi: 0x90},\n\t{value: 0x08e7, lo: 0x91, hi: 0x91},\n}\n\n// recompMap: 7520 bytes (entries only)\nvar recompMap map[uint32]rune\nvar recompMapOnce sync.Once\n\nconst recompMapPacked = \"\" +\n\t\"\\x00A\\x03\\x00\\x00\\x00\\x00\\xc0\" + // 0x00410300: 0x000000C0\n\t\"\\x00A\\x03\\x01\\x00\\x00\\x00\\xc1\" + // 0x00410301: 0x000000C1\n\t\"\\x00A\\x03\\x02\\x00\\x00\\x00\\xc2\" + // 0x00410302: 0x000000C2\n\t\"\\x00A\\x03\\x03\\x00\\x00\\x00\\xc3\" + // 0x00410303: 0x000000C3\n\t\"\\x00A\\x03\\b\\x00\\x00\\x00\\xc4\" + // 0x00410308: 0x000000C4\n\t\"\\x00A\\x03\\n\\x00\\x00\\x00\\xc5\" + // 0x0041030A: 0x000000C5\n\t\"\\x00C\\x03'\\x00\\x00\\x00\\xc7\" + // 0x00430327: 0x000000C7\n\t\"\\x00E\\x03\\x00\\x00\\x00\\x00\\xc8\" + // 0x00450300: 0x000000C8\n\t\"\\x00E\\x03\\x01\\x00\\x00\\x00\\xc9\" + // 0x00450301: 0x000000C9\n\t\"\\x00E\\x03\\x02\\x00\\x00\\x00\\xca\" + // 0x00450302: 0x000000CA\n\t\"\\x00E\\x03\\b\\x00\\x00\\x00\\xcb\" + // 0x00450308: 0x000000CB\n\t\"\\x00I\\x03\\x00\\x00\\x00\\x00\\xcc\" + // 0x00490300: 0x000000CC\n\t\"\\x00I\\x03\\x01\\x00\\x00\\x00\\xcd\" + // 0x00490301: 0x000000CD\n\t\"\\x00I\\x03\\x02\\x00\\x00\\x00\\xce\" + // 0x00490302: 0x000000CE\n\t\"\\x00I\\x03\\b\\x00\\x00\\x00\\xcf\" + // 0x00490308: 0x000000CF\n\t\"\\x00N\\x03\\x03\\x00\\x00\\x00\\xd1\" + // 0x004E0303: 0x000000D1\n\t\"\\x00O\\x03\\x00\\x00\\x00\\x00\\xd2\" + // 0x004F0300: 0x000000D2\n\t\"\\x00O\\x03\\x01\\x00\\x00\\x00\\xd3\" + // 0x004F0301: 0x000000D3\n\t\"\\x00O\\x03\\x02\\x00\\x00\\x00\\xd4\" + // 0x004F0302: 0x000000D4\n\t\"\\x00O\\x03\\x03\\x00\\x00\\x00\\xd5\" + // 0x004F0303: 0x000000D5\n\t\"\\x00O\\x03\\b\\x00\\x00\\x00\\xd6\" + // 0x004F0308: 0x000000D6\n\t\"\\x00U\\x03\\x00\\x00\\x00\\x00\\xd9\" + // 0x00550300: 0x000000D9\n\t\"\\x00U\\x03\\x01\\x00\\x00\\x00\\xda\" + // 0x00550301: 0x000000DA\n\t\"\\x00U\\x03\\x02\\x00\\x00\\x00\\xdb\" + // 0x00550302: 0x000000DB\n\t\"\\x00U\\x03\\b\\x00\\x00\\x00\\xdc\" + // 0x00550308: 0x000000DC\n\t\"\\x00Y\\x03\\x01\\x00\\x00\\x00\\xdd\" + // 0x00590301: 0x000000DD\n\t\"\\x00a\\x03\\x00\\x00\\x00\\x00\\xe0\" + // 0x00610300: 0x000000E0\n\t\"\\x00a\\x03\\x01\\x00\\x00\\x00\\xe1\" + // 0x00610301: 0x000000E1\n\t\"\\x00a\\x03\\x02\\x00\\x00\\x00\\xe2\" + // 0x00610302: 0x000000E2\n\t\"\\x00a\\x03\\x03\\x00\\x00\\x00\\xe3\" + // 0x00610303: 0x000000E3\n\t\"\\x00a\\x03\\b\\x00\\x00\\x00\\xe4\" + // 0x00610308: 0x000000E4\n\t\"\\x00a\\x03\\n\\x00\\x00\\x00\\xe5\" + // 0x0061030A: 0x000000E5\n\t\"\\x00c\\x03'\\x00\\x00\\x00\\xe7\" + // 0x00630327: 0x000000E7\n\t\"\\x00e\\x03\\x00\\x00\\x00\\x00\\xe8\" + // 0x00650300: 0x000000E8\n\t\"\\x00e\\x03\\x01\\x00\\x00\\x00\\xe9\" + // 0x00650301: 0x000000E9\n\t\"\\x00e\\x03\\x02\\x00\\x00\\x00\\xea\" + // 0x00650302: 0x000000EA\n\t\"\\x00e\\x03\\b\\x00\\x00\\x00\\xeb\" + // 0x00650308: 0x000000EB\n\t\"\\x00i\\x03\\x00\\x00\\x00\\x00\\xec\" + // 0x00690300: 0x000000EC\n\t\"\\x00i\\x03\\x01\\x00\\x00\\x00\\xed\" + // 0x00690301: 0x000000ED\n\t\"\\x00i\\x03\\x02\\x00\\x00\\x00\\xee\" + // 0x00690302: 0x000000EE\n\t\"\\x00i\\x03\\b\\x00\\x00\\x00\\xef\" + // 0x00690308: 0x000000EF\n\t\"\\x00n\\x03\\x03\\x00\\x00\\x00\\xf1\" + // 0x006E0303: 0x000000F1\n\t\"\\x00o\\x03\\x00\\x00\\x00\\x00\\xf2\" + // 0x006F0300: 0x000000F2\n\t\"\\x00o\\x03\\x01\\x00\\x00\\x00\\xf3\" + // 0x006F0301: 0x000000F3\n\t\"\\x00o\\x03\\x02\\x00\\x00\\x00\\xf4\" + // 0x006F0302: 0x000000F4\n\t\"\\x00o\\x03\\x03\\x00\\x00\\x00\\xf5\" + // 0x006F0303: 0x000000F5\n\t\"\\x00o\\x03\\b\\x00\\x00\\x00\\xf6\" + // 0x006F0308: 0x000000F6\n\t\"\\x00u\\x03\\x00\\x00\\x00\\x00\\xf9\" + // 0x00750300: 0x000000F9\n\t\"\\x00u\\x03\\x01\\x00\\x00\\x00\\xfa\" + // 0x00750301: 0x000000FA\n\t\"\\x00u\\x03\\x02\\x00\\x00\\x00\\xfb\" + // 0x00750302: 0x000000FB\n\t\"\\x00u\\x03\\b\\x00\\x00\\x00\\xfc\" + // 0x00750308: 0x000000FC\n\t\"\\x00y\\x03\\x01\\x00\\x00\\x00\\xfd\" + // 0x00790301: 0x000000FD\n\t\"\\x00y\\x03\\b\\x00\\x00\\x00\\xff\" + // 0x00790308: 0x000000FF\n\t\"\\x00A\\x03\\x04\\x00\\x00\\x01\\x00\" + // 0x00410304: 0x00000100\n\t\"\\x00a\\x03\\x04\\x00\\x00\\x01\\x01\" + // 0x00610304: 0x00000101\n\t\"\\x00A\\x03\\x06\\x00\\x00\\x01\\x02\" + // 0x00410306: 0x00000102\n\t\"\\x00a\\x03\\x06\\x00\\x00\\x01\\x03\" + // 0x00610306: 0x00000103\n\t\"\\x00A\\x03(\\x00\\x00\\x01\\x04\" + // 0x00410328: 0x00000104\n\t\"\\x00a\\x03(\\x00\\x00\\x01\\x05\" + // 0x00610328: 0x00000105\n\t\"\\x00C\\x03\\x01\\x00\\x00\\x01\\x06\" + // 0x00430301: 0x00000106\n\t\"\\x00c\\x03\\x01\\x00\\x00\\x01\\a\" + // 0x00630301: 0x00000107\n\t\"\\x00C\\x03\\x02\\x00\\x00\\x01\\b\" + // 0x00430302: 0x00000108\n\t\"\\x00c\\x03\\x02\\x00\\x00\\x01\\t\" + // 0x00630302: 0x00000109\n\t\"\\x00C\\x03\\a\\x00\\x00\\x01\\n\" + // 0x00430307: 0x0000010A\n\t\"\\x00c\\x03\\a\\x00\\x00\\x01\\v\" + // 0x00630307: 0x0000010B\n\t\"\\x00C\\x03\\f\\x00\\x00\\x01\\f\" + // 0x0043030C: 0x0000010C\n\t\"\\x00c\\x03\\f\\x00\\x00\\x01\\r\" + // 0x0063030C: 0x0000010D\n\t\"\\x00D\\x03\\f\\x00\\x00\\x01\\x0e\" + // 0x0044030C: 0x0000010E\n\t\"\\x00d\\x03\\f\\x00\\x00\\x01\\x0f\" + // 0x0064030C: 0x0000010F\n\t\"\\x00E\\x03\\x04\\x00\\x00\\x01\\x12\" + // 0x00450304: 0x00000112\n\t\"\\x00e\\x03\\x04\\x00\\x00\\x01\\x13\" + // 0x00650304: 0x00000113\n\t\"\\x00E\\x03\\x06\\x00\\x00\\x01\\x14\" + // 0x00450306: 0x00000114\n\t\"\\x00e\\x03\\x06\\x00\\x00\\x01\\x15\" + // 0x00650306: 0x00000115\n\t\"\\x00E\\x03\\a\\x00\\x00\\x01\\x16\" + // 0x00450307: 0x00000116\n\t\"\\x00e\\x03\\a\\x00\\x00\\x01\\x17\" + // 0x00650307: 0x00000117\n\t\"\\x00E\\x03(\\x00\\x00\\x01\\x18\" + // 0x00450328: 0x00000118\n\t\"\\x00e\\x03(\\x00\\x00\\x01\\x19\" + // 0x00650328: 0x00000119\n\t\"\\x00E\\x03\\f\\x00\\x00\\x01\\x1a\" + // 0x0045030C: 0x0000011A\n\t\"\\x00e\\x03\\f\\x00\\x00\\x01\\x1b\" + // 0x0065030C: 0x0000011B\n\t\"\\x00G\\x03\\x02\\x00\\x00\\x01\\x1c\" + // 0x00470302: 0x0000011C\n\t\"\\x00g\\x03\\x02\\x00\\x00\\x01\\x1d\" + // 0x00670302: 0x0000011D\n\t\"\\x00G\\x03\\x06\\x00\\x00\\x01\\x1e\" + // 0x00470306: 0x0000011E\n\t\"\\x00g\\x03\\x06\\x00\\x00\\x01\\x1f\" + // 0x00670306: 0x0000011F\n\t\"\\x00G\\x03\\a\\x00\\x00\\x01 \" + // 0x00470307: 0x00000120\n\t\"\\x00g\\x03\\a\\x00\\x00\\x01!\" + // 0x00670307: 0x00000121\n\t\"\\x00G\\x03'\\x00\\x00\\x01\\\"\" + // 0x00470327: 0x00000122\n\t\"\\x00g\\x03'\\x00\\x00\\x01#\" + // 0x00670327: 0x00000123\n\t\"\\x00H\\x03\\x02\\x00\\x00\\x01$\" + // 0x00480302: 0x00000124\n\t\"\\x00h\\x03\\x02\\x00\\x00\\x01%\" + // 0x00680302: 0x00000125\n\t\"\\x00I\\x03\\x03\\x00\\x00\\x01(\" + // 0x00490303: 0x00000128\n\t\"\\x00i\\x03\\x03\\x00\\x00\\x01)\" + // 0x00690303: 0x00000129\n\t\"\\x00I\\x03\\x04\\x00\\x00\\x01*\" + // 0x00490304: 0x0000012A\n\t\"\\x00i\\x03\\x04\\x00\\x00\\x01+\" + // 0x00690304: 0x0000012B\n\t\"\\x00I\\x03\\x06\\x00\\x00\\x01,\" + // 0x00490306: 0x0000012C\n\t\"\\x00i\\x03\\x06\\x00\\x00\\x01-\" + // 0x00690306: 0x0000012D\n\t\"\\x00I\\x03(\\x00\\x00\\x01.\" + // 0x00490328: 0x0000012E\n\t\"\\x00i\\x03(\\x00\\x00\\x01/\" + // 0x00690328: 0x0000012F\n\t\"\\x00I\\x03\\a\\x00\\x00\\x010\" + // 0x00490307: 0x00000130\n\t\"\\x00J\\x03\\x02\\x00\\x00\\x014\" + // 0x004A0302: 0x00000134\n\t\"\\x00j\\x03\\x02\\x00\\x00\\x015\" + // 0x006A0302: 0x00000135\n\t\"\\x00K\\x03'\\x00\\x00\\x016\" + // 0x004B0327: 0x00000136\n\t\"\\x00k\\x03'\\x00\\x00\\x017\" + // 0x006B0327: 0x00000137\n\t\"\\x00L\\x03\\x01\\x00\\x00\\x019\" + // 0x004C0301: 0x00000139\n\t\"\\x00l\\x03\\x01\\x00\\x00\\x01:\" + // 0x006C0301: 0x0000013A\n\t\"\\x00L\\x03'\\x00\\x00\\x01;\" + // 0x004C0327: 0x0000013B\n\t\"\\x00l\\x03'\\x00\\x00\\x01<\" + // 0x006C0327: 0x0000013C\n\t\"\\x00L\\x03\\f\\x00\\x00\\x01=\" + // 0x004C030C: 0x0000013D\n\t\"\\x00l\\x03\\f\\x00\\x00\\x01>\" + // 0x006C030C: 0x0000013E\n\t\"\\x00N\\x03\\x01\\x00\\x00\\x01C\" + // 0x004E0301: 0x00000143\n\t\"\\x00n\\x03\\x01\\x00\\x00\\x01D\" + // 0x006E0301: 0x00000144\n\t\"\\x00N\\x03'\\x00\\x00\\x01E\" + // 0x004E0327: 0x00000145\n\t\"\\x00n\\x03'\\x00\\x00\\x01F\" + // 0x006E0327: 0x00000146\n\t\"\\x00N\\x03\\f\\x00\\x00\\x01G\" + // 0x004E030C: 0x00000147\n\t\"\\x00n\\x03\\f\\x00\\x00\\x01H\" + // 0x006E030C: 0x00000148\n\t\"\\x00O\\x03\\x04\\x00\\x00\\x01L\" + // 0x004F0304: 0x0000014C\n\t\"\\x00o\\x03\\x04\\x00\\x00\\x01M\" + // 0x006F0304: 0x0000014D\n\t\"\\x00O\\x03\\x06\\x00\\x00\\x01N\" + // 0x004F0306: 0x0000014E\n\t\"\\x00o\\x03\\x06\\x00\\x00\\x01O\" + // 0x006F0306: 0x0000014F\n\t\"\\x00O\\x03\\v\\x00\\x00\\x01P\" + // 0x004F030B: 0x00000150\n\t\"\\x00o\\x03\\v\\x00\\x00\\x01Q\" + // 0x006F030B: 0x00000151\n\t\"\\x00R\\x03\\x01\\x00\\x00\\x01T\" + // 0x00520301: 0x00000154\n\t\"\\x00r\\x03\\x01\\x00\\x00\\x01U\" + // 0x00720301: 0x00000155\n\t\"\\x00R\\x03'\\x00\\x00\\x01V\" + // 0x00520327: 0x00000156\n\t\"\\x00r\\x03'\\x00\\x00\\x01W\" + // 0x00720327: 0x00000157\n\t\"\\x00R\\x03\\f\\x00\\x00\\x01X\" + // 0x0052030C: 0x00000158\n\t\"\\x00r\\x03\\f\\x00\\x00\\x01Y\" + // 0x0072030C: 0x00000159\n\t\"\\x00S\\x03\\x01\\x00\\x00\\x01Z\" + // 0x00530301: 0x0000015A\n\t\"\\x00s\\x03\\x01\\x00\\x00\\x01[\" + // 0x00730301: 0x0000015B\n\t\"\\x00S\\x03\\x02\\x00\\x00\\x01\\\\\" + // 0x00530302: 0x0000015C\n\t\"\\x00s\\x03\\x02\\x00\\x00\\x01]\" + // 0x00730302: 0x0000015D\n\t\"\\x00S\\x03'\\x00\\x00\\x01^\" + // 0x00530327: 0x0000015E\n\t\"\\x00s\\x03'\\x00\\x00\\x01_\" + // 0x00730327: 0x0000015F\n\t\"\\x00S\\x03\\f\\x00\\x00\\x01`\" + // 0x0053030C: 0x00000160\n\t\"\\x00s\\x03\\f\\x00\\x00\\x01a\" + // 0x0073030C: 0x00000161\n\t\"\\x00T\\x03'\\x00\\x00\\x01b\" + // 0x00540327: 0x00000162\n\t\"\\x00t\\x03'\\x00\\x00\\x01c\" + // 0x00740327: 0x00000163\n\t\"\\x00T\\x03\\f\\x00\\x00\\x01d\" + // 0x0054030C: 0x00000164\n\t\"\\x00t\\x03\\f\\x00\\x00\\x01e\" + // 0x0074030C: 0x00000165\n\t\"\\x00U\\x03\\x03\\x00\\x00\\x01h\" + // 0x00550303: 0x00000168\n\t\"\\x00u\\x03\\x03\\x00\\x00\\x01i\" + // 0x00750303: 0x00000169\n\t\"\\x00U\\x03\\x04\\x00\\x00\\x01j\" + // 0x00550304: 0x0000016A\n\t\"\\x00u\\x03\\x04\\x00\\x00\\x01k\" + // 0x00750304: 0x0000016B\n\t\"\\x00U\\x03\\x06\\x00\\x00\\x01l\" + // 0x00550306: 0x0000016C\n\t\"\\x00u\\x03\\x06\\x00\\x00\\x01m\" + // 0x00750306: 0x0000016D\n\t\"\\x00U\\x03\\n\\x00\\x00\\x01n\" + // 0x0055030A: 0x0000016E\n\t\"\\x00u\\x03\\n\\x00\\x00\\x01o\" + // 0x0075030A: 0x0000016F\n\t\"\\x00U\\x03\\v\\x00\\x00\\x01p\" + // 0x0055030B: 0x00000170\n\t\"\\x00u\\x03\\v\\x00\\x00\\x01q\" + // 0x0075030B: 0x00000171\n\t\"\\x00U\\x03(\\x00\\x00\\x01r\" + // 0x00550328: 0x00000172\n\t\"\\x00u\\x03(\\x00\\x00\\x01s\" + // 0x00750328: 0x00000173\n\t\"\\x00W\\x03\\x02\\x00\\x00\\x01t\" + // 0x00570302: 0x00000174\n\t\"\\x00w\\x03\\x02\\x00\\x00\\x01u\" + // 0x00770302: 0x00000175\n\t\"\\x00Y\\x03\\x02\\x00\\x00\\x01v\" + // 0x00590302: 0x00000176\n\t\"\\x00y\\x03\\x02\\x00\\x00\\x01w\" + // 0x00790302: 0x00000177\n\t\"\\x00Y\\x03\\b\\x00\\x00\\x01x\" + // 0x00590308: 0x00000178\n\t\"\\x00Z\\x03\\x01\\x00\\x00\\x01y\" + // 0x005A0301: 0x00000179\n\t\"\\x00z\\x03\\x01\\x00\\x00\\x01z\" + // 0x007A0301: 0x0000017A\n\t\"\\x00Z\\x03\\a\\x00\\x00\\x01{\" + // 0x005A0307: 0x0000017B\n\t\"\\x00z\\x03\\a\\x00\\x00\\x01|\" + // 0x007A0307: 0x0000017C\n\t\"\\x00Z\\x03\\f\\x00\\x00\\x01}\" + // 0x005A030C: 0x0000017D\n\t\"\\x00z\\x03\\f\\x00\\x00\\x01~\" + // 0x007A030C: 0x0000017E\n\t\"\\x00O\\x03\\x1b\\x00\\x00\\x01\\xa0\" + // 0x004F031B: 0x000001A0\n\t\"\\x00o\\x03\\x1b\\x00\\x00\\x01\\xa1\" + // 0x006F031B: 0x000001A1\n\t\"\\x00U\\x03\\x1b\\x00\\x00\\x01\\xaf\" + // 0x0055031B: 0x000001AF\n\t\"\\x00u\\x03\\x1b\\x00\\x00\\x01\\xb0\" + // 0x0075031B: 0x000001B0\n\t\"\\x00A\\x03\\f\\x00\\x00\\x01\\xcd\" + // 0x0041030C: 0x000001CD\n\t\"\\x00a\\x03\\f\\x00\\x00\\x01\\xce\" + // 0x0061030C: 0x000001CE\n\t\"\\x00I\\x03\\f\\x00\\x00\\x01\\xcf\" + // 0x0049030C: 0x000001CF\n\t\"\\x00i\\x03\\f\\x00\\x00\\x01\\xd0\" + // 0x0069030C: 0x000001D0\n\t\"\\x00O\\x03\\f\\x00\\x00\\x01\\xd1\" + // 0x004F030C: 0x000001D1\n\t\"\\x00o\\x03\\f\\x00\\x00\\x01\\xd2\" + // 0x006F030C: 0x000001D2\n\t\"\\x00U\\x03\\f\\x00\\x00\\x01\\xd3\" + // 0x0055030C: 0x000001D3\n\t\"\\x00u\\x03\\f\\x00\\x00\\x01\\xd4\" + // 0x0075030C: 0x000001D4\n\t\"\\x00\\xdc\\x03\\x04\\x00\\x00\\x01\\xd5\" + // 0x00DC0304: 0x000001D5\n\t\"\\x00\\xfc\\x03\\x04\\x00\\x00\\x01\\xd6\" + // 0x00FC0304: 0x000001D6\n\t\"\\x00\\xdc\\x03\\x01\\x00\\x00\\x01\\xd7\" + // 0x00DC0301: 0x000001D7\n\t\"\\x00\\xfc\\x03\\x01\\x00\\x00\\x01\\xd8\" + // 0x00FC0301: 0x000001D8\n\t\"\\x00\\xdc\\x03\\f\\x00\\x00\\x01\\xd9\" + // 0x00DC030C: 0x000001D9\n\t\"\\x00\\xfc\\x03\\f\\x00\\x00\\x01\\xda\" + // 0x00FC030C: 0x000001DA\n\t\"\\x00\\xdc\\x03\\x00\\x00\\x00\\x01\\xdb\" + // 0x00DC0300: 0x000001DB\n\t\"\\x00\\xfc\\x03\\x00\\x00\\x00\\x01\\xdc\" + // 0x00FC0300: 0x000001DC\n\t\"\\x00\\xc4\\x03\\x04\\x00\\x00\\x01\\xde\" + // 0x00C40304: 0x000001DE\n\t\"\\x00\\xe4\\x03\\x04\\x00\\x00\\x01\\xdf\" + // 0x00E40304: 0x000001DF\n\t\"\\x02&\\x03\\x04\\x00\\x00\\x01\\xe0\" + // 0x02260304: 0x000001E0\n\t\"\\x02'\\x03\\x04\\x00\\x00\\x01\\xe1\" + // 0x02270304: 0x000001E1\n\t\"\\x00\\xc6\\x03\\x04\\x00\\x00\\x01\\xe2\" + // 0x00C60304: 0x000001E2\n\t\"\\x00\\xe6\\x03\\x04\\x00\\x00\\x01\\xe3\" + // 0x00E60304: 0x000001E3\n\t\"\\x00G\\x03\\f\\x00\\x00\\x01\\xe6\" + // 0x0047030C: 0x000001E6\n\t\"\\x00g\\x03\\f\\x00\\x00\\x01\\xe7\" + // 0x0067030C: 0x000001E7\n\t\"\\x00K\\x03\\f\\x00\\x00\\x01\\xe8\" + // 0x004B030C: 0x000001E8\n\t\"\\x00k\\x03\\f\\x00\\x00\\x01\\xe9\" + // 0x006B030C: 0x000001E9\n\t\"\\x00O\\x03(\\x00\\x00\\x01\\xea\" + // 0x004F0328: 0x000001EA\n\t\"\\x00o\\x03(\\x00\\x00\\x01\\xeb\" + // 0x006F0328: 0x000001EB\n\t\"\\x01\\xea\\x03\\x04\\x00\\x00\\x01\\xec\" + // 0x01EA0304: 0x000001EC\n\t\"\\x01\\xeb\\x03\\x04\\x00\\x00\\x01\\xed\" + // 0x01EB0304: 0x000001ED\n\t\"\\x01\\xb7\\x03\\f\\x00\\x00\\x01\\xee\" + // 0x01B7030C: 0x000001EE\n\t\"\\x02\\x92\\x03\\f\\x00\\x00\\x01\\xef\" + // 0x0292030C: 0x000001EF\n\t\"\\x00j\\x03\\f\\x00\\x00\\x01\\xf0\" + // 0x006A030C: 0x000001F0\n\t\"\\x00G\\x03\\x01\\x00\\x00\\x01\\xf4\" + // 0x00470301: 0x000001F4\n\t\"\\x00g\\x03\\x01\\x00\\x00\\x01\\xf5\" + // 0x00670301: 0x000001F5\n\t\"\\x00N\\x03\\x00\\x00\\x00\\x01\\xf8\" + // 0x004E0300: 0x000001F8\n\t\"\\x00n\\x03\\x00\\x00\\x00\\x01\\xf9\" + // 0x006E0300: 0x000001F9\n\t\"\\x00\\xc5\\x03\\x01\\x00\\x00\\x01\\xfa\" + // 0x00C50301: 0x000001FA\n\t\"\\x00\\xe5\\x03\\x01\\x00\\x00\\x01\\xfb\" + // 0x00E50301: 0x000001FB\n\t\"\\x00\\xc6\\x03\\x01\\x00\\x00\\x01\\xfc\" + // 0x00C60301: 0x000001FC\n\t\"\\x00\\xe6\\x03\\x01\\x00\\x00\\x01\\xfd\" + // 0x00E60301: 0x000001FD\n\t\"\\x00\\xd8\\x03\\x01\\x00\\x00\\x01\\xfe\" + // 0x00D80301: 0x000001FE\n\t\"\\x00\\xf8\\x03\\x01\\x00\\x00\\x01\\xff\" + // 0x00F80301: 0x000001FF\n\t\"\\x00A\\x03\\x0f\\x00\\x00\\x02\\x00\" + // 0x0041030F: 0x00000200\n\t\"\\x00a\\x03\\x0f\\x00\\x00\\x02\\x01\" + // 0x0061030F: 0x00000201\n\t\"\\x00A\\x03\\x11\\x00\\x00\\x02\\x02\" + // 0x00410311: 0x00000202\n\t\"\\x00a\\x03\\x11\\x00\\x00\\x02\\x03\" + // 0x00610311: 0x00000203\n\t\"\\x00E\\x03\\x0f\\x00\\x00\\x02\\x04\" + // 0x0045030F: 0x00000204\n\t\"\\x00e\\x03\\x0f\\x00\\x00\\x02\\x05\" + // 0x0065030F: 0x00000205\n\t\"\\x00E\\x03\\x11\\x00\\x00\\x02\\x06\" + // 0x00450311: 0x00000206\n\t\"\\x00e\\x03\\x11\\x00\\x00\\x02\\a\" + // 0x00650311: 0x00000207\n\t\"\\x00I\\x03\\x0f\\x00\\x00\\x02\\b\" + // 0x0049030F: 0x00000208\n\t\"\\x00i\\x03\\x0f\\x00\\x00\\x02\\t\" + // 0x0069030F: 0x00000209\n\t\"\\x00I\\x03\\x11\\x00\\x00\\x02\\n\" + // 0x00490311: 0x0000020A\n\t\"\\x00i\\x03\\x11\\x00\\x00\\x02\\v\" + // 0x00690311: 0x0000020B\n\t\"\\x00O\\x03\\x0f\\x00\\x00\\x02\\f\" + // 0x004F030F: 0x0000020C\n\t\"\\x00o\\x03\\x0f\\x00\\x00\\x02\\r\" + // 0x006F030F: 0x0000020D\n\t\"\\x00O\\x03\\x11\\x00\\x00\\x02\\x0e\" + // 0x004F0311: 0x0000020E\n\t\"\\x00o\\x03\\x11\\x00\\x00\\x02\\x0f\" + // 0x006F0311: 0x0000020F\n\t\"\\x00R\\x03\\x0f\\x00\\x00\\x02\\x10\" + // 0x0052030F: 0x00000210\n\t\"\\x00r\\x03\\x0f\\x00\\x00\\x02\\x11\" + // 0x0072030F: 0x00000211\n\t\"\\x00R\\x03\\x11\\x00\\x00\\x02\\x12\" + // 0x00520311: 0x00000212\n\t\"\\x00r\\x03\\x11\\x00\\x00\\x02\\x13\" + // 0x00720311: 0x00000213\n\t\"\\x00U\\x03\\x0f\\x00\\x00\\x02\\x14\" + // 0x0055030F: 0x00000214\n\t\"\\x00u\\x03\\x0f\\x00\\x00\\x02\\x15\" + // 0x0075030F: 0x00000215\n\t\"\\x00U\\x03\\x11\\x00\\x00\\x02\\x16\" + // 0x00550311: 0x00000216\n\t\"\\x00u\\x03\\x11\\x00\\x00\\x02\\x17\" + // 0x00750311: 0x00000217\n\t\"\\x00S\\x03&\\x00\\x00\\x02\\x18\" + // 0x00530326: 0x00000218\n\t\"\\x00s\\x03&\\x00\\x00\\x02\\x19\" + // 0x00730326: 0x00000219\n\t\"\\x00T\\x03&\\x00\\x00\\x02\\x1a\" + // 0x00540326: 0x0000021A\n\t\"\\x00t\\x03&\\x00\\x00\\x02\\x1b\" + // 0x00740326: 0x0000021B\n\t\"\\x00H\\x03\\f\\x00\\x00\\x02\\x1e\" + // 0x0048030C: 0x0000021E\n\t\"\\x00h\\x03\\f\\x00\\x00\\x02\\x1f\" + // 0x0068030C: 0x0000021F\n\t\"\\x00A\\x03\\a\\x00\\x00\\x02&\" + // 0x00410307: 0x00000226\n\t\"\\x00a\\x03\\a\\x00\\x00\\x02'\" + // 0x00610307: 0x00000227\n\t\"\\x00E\\x03'\\x00\\x00\\x02(\" + // 0x00450327: 0x00000228\n\t\"\\x00e\\x03'\\x00\\x00\\x02)\" + // 0x00650327: 0x00000229\n\t\"\\x00\\xd6\\x03\\x04\\x00\\x00\\x02*\" + // 0x00D60304: 0x0000022A\n\t\"\\x00\\xf6\\x03\\x04\\x00\\x00\\x02+\" + // 0x00F60304: 0x0000022B\n\t\"\\x00\\xd5\\x03\\x04\\x00\\x00\\x02,\" + // 0x00D50304: 0x0000022C\n\t\"\\x00\\xf5\\x03\\x04\\x00\\x00\\x02-\" + // 0x00F50304: 0x0000022D\n\t\"\\x00O\\x03\\a\\x00\\x00\\x02.\" + // 0x004F0307: 0x0000022E\n\t\"\\x00o\\x03\\a\\x00\\x00\\x02/\" + // 0x006F0307: 0x0000022F\n\t\"\\x02.\\x03\\x04\\x00\\x00\\x020\" + // 0x022E0304: 0x00000230\n\t\"\\x02/\\x03\\x04\\x00\\x00\\x021\" + // 0x022F0304: 0x00000231\n\t\"\\x00Y\\x03\\x04\\x00\\x00\\x022\" + // 0x00590304: 0x00000232\n\t\"\\x00y\\x03\\x04\\x00\\x00\\x023\" + // 0x00790304: 0x00000233\n\t\"\\x00\\xa8\\x03\\x01\\x00\\x00\\x03\\x85\" + // 0x00A80301: 0x00000385\n\t\"\\x03\\x91\\x03\\x01\\x00\\x00\\x03\\x86\" + // 0x03910301: 0x00000386\n\t\"\\x03\\x95\\x03\\x01\\x00\\x00\\x03\\x88\" + // 0x03950301: 0x00000388\n\t\"\\x03\\x97\\x03\\x01\\x00\\x00\\x03\\x89\" + // 0x03970301: 0x00000389\n\t\"\\x03\\x99\\x03\\x01\\x00\\x00\\x03\\x8a\" + // 0x03990301: 0x0000038A\n\t\"\\x03\\x9f\\x03\\x01\\x00\\x00\\x03\\x8c\" + // 0x039F0301: 0x0000038C\n\t\"\\x03\\xa5\\x03\\x01\\x00\\x00\\x03\\x8e\" + // 0x03A50301: 0x0000038E\n\t\"\\x03\\xa9\\x03\\x01\\x00\\x00\\x03\\x8f\" + // 0x03A90301: 0x0000038F\n\t\"\\x03\\xca\\x03\\x01\\x00\\x00\\x03\\x90\" + // 0x03CA0301: 0x00000390\n\t\"\\x03\\x99\\x03\\b\\x00\\x00\\x03\\xaa\" + // 0x03990308: 0x000003AA\n\t\"\\x03\\xa5\\x03\\b\\x00\\x00\\x03\\xab\" + // 0x03A50308: 0x000003AB\n\t\"\\x03\\xb1\\x03\\x01\\x00\\x00\\x03\\xac\" + // 0x03B10301: 0x000003AC\n\t\"\\x03\\xb5\\x03\\x01\\x00\\x00\\x03\\xad\" + // 0x03B50301: 0x000003AD\n\t\"\\x03\\xb7\\x03\\x01\\x00\\x00\\x03\\xae\" + // 0x03B70301: 0x000003AE\n\t\"\\x03\\xb9\\x03\\x01\\x00\\x00\\x03\\xaf\" + // 0x03B90301: 0x000003AF\n\t\"\\x03\\xcb\\x03\\x01\\x00\\x00\\x03\\xb0\" + // 0x03CB0301: 0x000003B0\n\t\"\\x03\\xb9\\x03\\b\\x00\\x00\\x03\\xca\" + // 0x03B90308: 0x000003CA\n\t\"\\x03\\xc5\\x03\\b\\x00\\x00\\x03\\xcb\" + // 0x03C50308: 0x000003CB\n\t\"\\x03\\xbf\\x03\\x01\\x00\\x00\\x03\\xcc\" + // 0x03BF0301: 0x000003CC\n\t\"\\x03\\xc5\\x03\\x01\\x00\\x00\\x03\\xcd\" + // 0x03C50301: 0x000003CD\n\t\"\\x03\\xc9\\x03\\x01\\x00\\x00\\x03\\xce\" + // 0x03C90301: 0x000003CE\n\t\"\\x03\\xd2\\x03\\x01\\x00\\x00\\x03\\xd3\" + // 0x03D20301: 0x000003D3\n\t\"\\x03\\xd2\\x03\\b\\x00\\x00\\x03\\xd4\" + // 0x03D20308: 0x000003D4\n\t\"\\x04\\x15\\x03\\x00\\x00\\x00\\x04\\x00\" + // 0x04150300: 0x00000400\n\t\"\\x04\\x15\\x03\\b\\x00\\x00\\x04\\x01\" + // 0x04150308: 0x00000401\n\t\"\\x04\\x13\\x03\\x01\\x00\\x00\\x04\\x03\" + // 0x04130301: 0x00000403\n\t\"\\x04\\x06\\x03\\b\\x00\\x00\\x04\\a\" + // 0x04060308: 0x00000407\n\t\"\\x04\\x1a\\x03\\x01\\x00\\x00\\x04\\f\" + // 0x041A0301: 0x0000040C\n\t\"\\x04\\x18\\x03\\x00\\x00\\x00\\x04\\r\" + // 0x04180300: 0x0000040D\n\t\"\\x04#\\x03\\x06\\x00\\x00\\x04\\x0e\" + // 0x04230306: 0x0000040E\n\t\"\\x04\\x18\\x03\\x06\\x00\\x00\\x04\\x19\" + // 0x04180306: 0x00000419\n\t\"\\x048\\x03\\x06\\x00\\x00\\x049\" + // 0x04380306: 0x00000439\n\t\"\\x045\\x03\\x00\\x00\\x00\\x04P\" + // 0x04350300: 0x00000450\n\t\"\\x045\\x03\\b\\x00\\x00\\x04Q\" + // 0x04350308: 0x00000451\n\t\"\\x043\\x03\\x01\\x00\\x00\\x04S\" + // 0x04330301: 0x00000453\n\t\"\\x04V\\x03\\b\\x00\\x00\\x04W\" + // 0x04560308: 0x00000457\n\t\"\\x04:\\x03\\x01\\x00\\x00\\x04\\\\\" + // 0x043A0301: 0x0000045C\n\t\"\\x048\\x03\\x00\\x00\\x00\\x04]\" + // 0x04380300: 0x0000045D\n\t\"\\x04C\\x03\\x06\\x00\\x00\\x04^\" + // 0x04430306: 0x0000045E\n\t\"\\x04t\\x03\\x0f\\x00\\x00\\x04v\" + // 0x0474030F: 0x00000476\n\t\"\\x04u\\x03\\x0f\\x00\\x00\\x04w\" + // 0x0475030F: 0x00000477\n\t\"\\x04\\x16\\x03\\x06\\x00\\x00\\x04\\xc1\" + // 0x04160306: 0x000004C1\n\t\"\\x046\\x03\\x06\\x00\\x00\\x04\\xc2\" + // 0x04360306: 0x000004C2\n\t\"\\x04\\x10\\x03\\x06\\x00\\x00\\x04\\xd0\" + // 0x04100306: 0x000004D0\n\t\"\\x040\\x03\\x06\\x00\\x00\\x04\\xd1\" + // 0x04300306: 0x000004D1\n\t\"\\x04\\x10\\x03\\b\\x00\\x00\\x04\\xd2\" + // 0x04100308: 0x000004D2\n\t\"\\x040\\x03\\b\\x00\\x00\\x04\\xd3\" + // 0x04300308: 0x000004D3\n\t\"\\x04\\x15\\x03\\x06\\x00\\x00\\x04\\xd6\" + // 0x04150306: 0x000004D6\n\t\"\\x045\\x03\\x06\\x00\\x00\\x04\\xd7\" + // 0x04350306: 0x000004D7\n\t\"\\x04\\xd8\\x03\\b\\x00\\x00\\x04\\xda\" + // 0x04D80308: 0x000004DA\n\t\"\\x04\\xd9\\x03\\b\\x00\\x00\\x04\\xdb\" + // 0x04D90308: 0x000004DB\n\t\"\\x04\\x16\\x03\\b\\x00\\x00\\x04\\xdc\" + // 0x04160308: 0x000004DC\n\t\"\\x046\\x03\\b\\x00\\x00\\x04\\xdd\" + // 0x04360308: 0x000004DD\n\t\"\\x04\\x17\\x03\\b\\x00\\x00\\x04\\xde\" + // 0x04170308: 0x000004DE\n\t\"\\x047\\x03\\b\\x00\\x00\\x04\\xdf\" + // 0x04370308: 0x000004DF\n\t\"\\x04\\x18\\x03\\x04\\x00\\x00\\x04\\xe2\" + // 0x04180304: 0x000004E2\n\t\"\\x048\\x03\\x04\\x00\\x00\\x04\\xe3\" + // 0x04380304: 0x000004E3\n\t\"\\x04\\x18\\x03\\b\\x00\\x00\\x04\\xe4\" + // 0x04180308: 0x000004E4\n\t\"\\x048\\x03\\b\\x00\\x00\\x04\\xe5\" + // 0x04380308: 0x000004E5\n\t\"\\x04\\x1e\\x03\\b\\x00\\x00\\x04\\xe6\" + // 0x041E0308: 0x000004E6\n\t\"\\x04>\\x03\\b\\x00\\x00\\x04\\xe7\" + // 0x043E0308: 0x000004E7\n\t\"\\x04\\xe8\\x03\\b\\x00\\x00\\x04\\xea\" + // 0x04E80308: 0x000004EA\n\t\"\\x04\\xe9\\x03\\b\\x00\\x00\\x04\\xeb\" + // 0x04E90308: 0x000004EB\n\t\"\\x04-\\x03\\b\\x00\\x00\\x04\\xec\" + // 0x042D0308: 0x000004EC\n\t\"\\x04M\\x03\\b\\x00\\x00\\x04\\xed\" + // 0x044D0308: 0x000004ED\n\t\"\\x04#\\x03\\x04\\x00\\x00\\x04\\xee\" + // 0x04230304: 0x000004EE\n\t\"\\x04C\\x03\\x04\\x00\\x00\\x04\\xef\" + // 0x04430304: 0x000004EF\n\t\"\\x04#\\x03\\b\\x00\\x00\\x04\\xf0\" + // 0x04230308: 0x000004F0\n\t\"\\x04C\\x03\\b\\x00\\x00\\x04\\xf1\" + // 0x04430308: 0x000004F1\n\t\"\\x04#\\x03\\v\\x00\\x00\\x04\\xf2\" + // 0x0423030B: 0x000004F2\n\t\"\\x04C\\x03\\v\\x00\\x00\\x04\\xf3\" + // 0x0443030B: 0x000004F3\n\t\"\\x04'\\x03\\b\\x00\\x00\\x04\\xf4\" + // 0x04270308: 0x000004F4\n\t\"\\x04G\\x03\\b\\x00\\x00\\x04\\xf5\" + // 0x04470308: 0x000004F5\n\t\"\\x04+\\x03\\b\\x00\\x00\\x04\\xf8\" + // 0x042B0308: 0x000004F8\n\t\"\\x04K\\x03\\b\\x00\\x00\\x04\\xf9\" + // 0x044B0308: 0x000004F9\n\t\"\\x06'\\x06S\\x00\\x00\\x06\\\"\" + // 0x06270653: 0x00000622\n\t\"\\x06'\\x06T\\x00\\x00\\x06#\" + // 0x06270654: 0x00000623\n\t\"\\x06H\\x06T\\x00\\x00\\x06$\" + // 0x06480654: 0x00000624\n\t\"\\x06'\\x06U\\x00\\x00\\x06%\" + // 0x06270655: 0x00000625\n\t\"\\x06J\\x06T\\x00\\x00\\x06&\" + // 0x064A0654: 0x00000626\n\t\"\\x06\\xd5\\x06T\\x00\\x00\\x06\\xc0\" + // 0x06D50654: 0x000006C0\n\t\"\\x06\\xc1\\x06T\\x00\\x00\\x06\\xc2\" + // 0x06C10654: 0x000006C2\n\t\"\\x06\\xd2\\x06T\\x00\\x00\\x06\\xd3\" + // 0x06D20654: 0x000006D3\n\t\"\\t(\\t<\\x00\\x00\\t)\" + // 0x0928093C: 0x00000929\n\t\"\\t0\\t<\\x00\\x00\\t1\" + // 0x0930093C: 0x00000931\n\t\"\\t3\\t<\\x00\\x00\\t4\" + // 0x0933093C: 0x00000934\n\t\"\\t\\xc7\\t\\xbe\\x00\\x00\\t\\xcb\" + // 0x09C709BE: 0x000009CB\n\t\"\\t\\xc7\\t\\xd7\\x00\\x00\\t\\xcc\" + // 0x09C709D7: 0x000009CC\n\t\"\\vG\\vV\\x00\\x00\\vH\" + // 0x0B470B56: 0x00000B48\n\t\"\\vG\\v>\\x00\\x00\\vK\" + // 0x0B470B3E: 0x00000B4B\n\t\"\\vG\\vW\\x00\\x00\\vL\" + // 0x0B470B57: 0x00000B4C\n\t\"\\v\\x92\\v\\xd7\\x00\\x00\\v\\x94\" + // 0x0B920BD7: 0x00000B94\n\t\"\\v\\xc6\\v\\xbe\\x00\\x00\\v\\xca\" + // 0x0BC60BBE: 0x00000BCA\n\t\"\\v\\xc7\\v\\xbe\\x00\\x00\\v\\xcb\" + // 0x0BC70BBE: 0x00000BCB\n\t\"\\v\\xc6\\v\\xd7\\x00\\x00\\v\\xcc\" + // 0x0BC60BD7: 0x00000BCC\n\t\"\\fF\\fV\\x00\\x00\\fH\" + // 0x0C460C56: 0x00000C48\n\t\"\\f\\xbf\\f\\xd5\\x00\\x00\\f\\xc0\" + // 0x0CBF0CD5: 0x00000CC0\n\t\"\\f\\xc6\\f\\xd5\\x00\\x00\\f\\xc7\" + // 0x0CC60CD5: 0x00000CC7\n\t\"\\f\\xc6\\f\\xd6\\x00\\x00\\f\\xc8\" + // 0x0CC60CD6: 0x00000CC8\n\t\"\\f\\xc6\\f\\xc2\\x00\\x00\\f\\xca\" + // 0x0CC60CC2: 0x00000CCA\n\t\"\\f\\xca\\f\\xd5\\x00\\x00\\f\\xcb\" + // 0x0CCA0CD5: 0x00000CCB\n\t\"\\rF\\r>\\x00\\x00\\rJ\" + // 0x0D460D3E: 0x00000D4A\n\t\"\\rG\\r>\\x00\\x00\\rK\" + // 0x0D470D3E: 0x00000D4B\n\t\"\\rF\\rW\\x00\\x00\\rL\" + // 0x0D460D57: 0x00000D4C\n\t\"\\r\\xd9\\r\\xca\\x00\\x00\\r\\xda\" + // 0x0DD90DCA: 0x00000DDA\n\t\"\\r\\xd9\\r\\xcf\\x00\\x00\\r\\xdc\" + // 0x0DD90DCF: 0x00000DDC\n\t\"\\r\\xdc\\r\\xca\\x00\\x00\\r\\xdd\" + // 0x0DDC0DCA: 0x00000DDD\n\t\"\\r\\xd9\\r\\xdf\\x00\\x00\\r\\xde\" + // 0x0DD90DDF: 0x00000DDE\n\t\"\\x10%\\x10.\\x00\\x00\\x10&\" + // 0x1025102E: 0x00001026\n\t\"\\x1b\\x05\\x1b5\\x00\\x00\\x1b\\x06\" + // 0x1B051B35: 0x00001B06\n\t\"\\x1b\\a\\x1b5\\x00\\x00\\x1b\\b\" + // 0x1B071B35: 0x00001B08\n\t\"\\x1b\\t\\x1b5\\x00\\x00\\x1b\\n\" + // 0x1B091B35: 0x00001B0A\n\t\"\\x1b\\v\\x1b5\\x00\\x00\\x1b\\f\" + // 0x1B0B1B35: 0x00001B0C\n\t\"\\x1b\\r\\x1b5\\x00\\x00\\x1b\\x0e\" + // 0x1B0D1B35: 0x00001B0E\n\t\"\\x1b\\x11\\x1b5\\x00\\x00\\x1b\\x12\" + // 0x1B111B35: 0x00001B12\n\t\"\\x1b:\\x1b5\\x00\\x00\\x1b;\" + // 0x1B3A1B35: 0x00001B3B\n\t\"\\x1b<\\x1b5\\x00\\x00\\x1b=\" + // 0x1B3C1B35: 0x00001B3D\n\t\"\\x1b>\\x1b5\\x00\\x00\\x1b@\" + // 0x1B3E1B35: 0x00001B40\n\t\"\\x1b?\\x1b5\\x00\\x00\\x1bA\" + // 0x1B3F1B35: 0x00001B41\n\t\"\\x1bB\\x1b5\\x00\\x00\\x1bC\" + // 0x1B421B35: 0x00001B43\n\t\"\\x00A\\x03%\\x00\\x00\\x1e\\x00\" + // 0x00410325: 0x00001E00\n\t\"\\x00a\\x03%\\x00\\x00\\x1e\\x01\" + // 0x00610325: 0x00001E01\n\t\"\\x00B\\x03\\a\\x00\\x00\\x1e\\x02\" + // 0x00420307: 0x00001E02\n\t\"\\x00b\\x03\\a\\x00\\x00\\x1e\\x03\" + // 0x00620307: 0x00001E03\n\t\"\\x00B\\x03#\\x00\\x00\\x1e\\x04\" + // 0x00420323: 0x00001E04\n\t\"\\x00b\\x03#\\x00\\x00\\x1e\\x05\" + // 0x00620323: 0x00001E05\n\t\"\\x00B\\x031\\x00\\x00\\x1e\\x06\" + // 0x00420331: 0x00001E06\n\t\"\\x00b\\x031\\x00\\x00\\x1e\\a\" + // 0x00620331: 0x00001E07\n\t\"\\x00\\xc7\\x03\\x01\\x00\\x00\\x1e\\b\" + // 0x00C70301: 0x00001E08\n\t\"\\x00\\xe7\\x03\\x01\\x00\\x00\\x1e\\t\" + // 0x00E70301: 0x00001E09\n\t\"\\x00D\\x03\\a\\x00\\x00\\x1e\\n\" + // 0x00440307: 0x00001E0A\n\t\"\\x00d\\x03\\a\\x00\\x00\\x1e\\v\" + // 0x00640307: 0x00001E0B\n\t\"\\x00D\\x03#\\x00\\x00\\x1e\\f\" + // 0x00440323: 0x00001E0C\n\t\"\\x00d\\x03#\\x00\\x00\\x1e\\r\" + // 0x00640323: 0x00001E0D\n\t\"\\x00D\\x031\\x00\\x00\\x1e\\x0e\" + // 0x00440331: 0x00001E0E\n\t\"\\x00d\\x031\\x00\\x00\\x1e\\x0f\" + // 0x00640331: 0x00001E0F\n\t\"\\x00D\\x03'\\x00\\x00\\x1e\\x10\" + // 0x00440327: 0x00001E10\n\t\"\\x00d\\x03'\\x00\\x00\\x1e\\x11\" + // 0x00640327: 0x00001E11\n\t\"\\x00D\\x03-\\x00\\x00\\x1e\\x12\" + // 0x0044032D: 0x00001E12\n\t\"\\x00d\\x03-\\x00\\x00\\x1e\\x13\" + // 0x0064032D: 0x00001E13\n\t\"\\x01\\x12\\x03\\x00\\x00\\x00\\x1e\\x14\" + // 0x01120300: 0x00001E14\n\t\"\\x01\\x13\\x03\\x00\\x00\\x00\\x1e\\x15\" + // 0x01130300: 0x00001E15\n\t\"\\x01\\x12\\x03\\x01\\x00\\x00\\x1e\\x16\" + // 0x01120301: 0x00001E16\n\t\"\\x01\\x13\\x03\\x01\\x00\\x00\\x1e\\x17\" + // 0x01130301: 0x00001E17\n\t\"\\x00E\\x03-\\x00\\x00\\x1e\\x18\" + // 0x0045032D: 0x00001E18\n\t\"\\x00e\\x03-\\x00\\x00\\x1e\\x19\" + // 0x0065032D: 0x00001E19\n\t\"\\x00E\\x030\\x00\\x00\\x1e\\x1a\" + // 0x00450330: 0x00001E1A\n\t\"\\x00e\\x030\\x00\\x00\\x1e\\x1b\" + // 0x00650330: 0x00001E1B\n\t\"\\x02(\\x03\\x06\\x00\\x00\\x1e\\x1c\" + // 0x02280306: 0x00001E1C\n\t\"\\x02)\\x03\\x06\\x00\\x00\\x1e\\x1d\" + // 0x02290306: 0x00001E1D\n\t\"\\x00F\\x03\\a\\x00\\x00\\x1e\\x1e\" + // 0x00460307: 0x00001E1E\n\t\"\\x00f\\x03\\a\\x00\\x00\\x1e\\x1f\" + // 0x00660307: 0x00001E1F\n\t\"\\x00G\\x03\\x04\\x00\\x00\\x1e \" + // 0x00470304: 0x00001E20\n\t\"\\x00g\\x03\\x04\\x00\\x00\\x1e!\" + // 0x00670304: 0x00001E21\n\t\"\\x00H\\x03\\a\\x00\\x00\\x1e\\\"\" + // 0x00480307: 0x00001E22\n\t\"\\x00h\\x03\\a\\x00\\x00\\x1e#\" + // 0x00680307: 0x00001E23\n\t\"\\x00H\\x03#\\x00\\x00\\x1e$\" + // 0x00480323: 0x00001E24\n\t\"\\x00h\\x03#\\x00\\x00\\x1e%\" + // 0x00680323: 0x00001E25\n\t\"\\x00H\\x03\\b\\x00\\x00\\x1e&\" + // 0x00480308: 0x00001E26\n\t\"\\x00h\\x03\\b\\x00\\x00\\x1e'\" + // 0x00680308: 0x00001E27\n\t\"\\x00H\\x03'\\x00\\x00\\x1e(\" + // 0x00480327: 0x00001E28\n\t\"\\x00h\\x03'\\x00\\x00\\x1e)\" + // 0x00680327: 0x00001E29\n\t\"\\x00H\\x03.\\x00\\x00\\x1e*\" + // 0x0048032E: 0x00001E2A\n\t\"\\x00h\\x03.\\x00\\x00\\x1e+\" + // 0x0068032E: 0x00001E2B\n\t\"\\x00I\\x030\\x00\\x00\\x1e,\" + // 0x00490330: 0x00001E2C\n\t\"\\x00i\\x030\\x00\\x00\\x1e-\" + // 0x00690330: 0x00001E2D\n\t\"\\x00\\xcf\\x03\\x01\\x00\\x00\\x1e.\" + // 0x00CF0301: 0x00001E2E\n\t\"\\x00\\xef\\x03\\x01\\x00\\x00\\x1e/\" + // 0x00EF0301: 0x00001E2F\n\t\"\\x00K\\x03\\x01\\x00\\x00\\x1e0\" + // 0x004B0301: 0x00001E30\n\t\"\\x00k\\x03\\x01\\x00\\x00\\x1e1\" + // 0x006B0301: 0x00001E31\n\t\"\\x00K\\x03#\\x00\\x00\\x1e2\" + // 0x004B0323: 0x00001E32\n\t\"\\x00k\\x03#\\x00\\x00\\x1e3\" + // 0x006B0323: 0x00001E33\n\t\"\\x00K\\x031\\x00\\x00\\x1e4\" + // 0x004B0331: 0x00001E34\n\t\"\\x00k\\x031\\x00\\x00\\x1e5\" + // 0x006B0331: 0x00001E35\n\t\"\\x00L\\x03#\\x00\\x00\\x1e6\" + // 0x004C0323: 0x00001E36\n\t\"\\x00l\\x03#\\x00\\x00\\x1e7\" + // 0x006C0323: 0x00001E37\n\t\"\\x1e6\\x03\\x04\\x00\\x00\\x1e8\" + // 0x1E360304: 0x00001E38\n\t\"\\x1e7\\x03\\x04\\x00\\x00\\x1e9\" + // 0x1E370304: 0x00001E39\n\t\"\\x00L\\x031\\x00\\x00\\x1e:\" + // 0x004C0331: 0x00001E3A\n\t\"\\x00l\\x031\\x00\\x00\\x1e;\" + // 0x006C0331: 0x00001E3B\n\t\"\\x00L\\x03-\\x00\\x00\\x1e<\" + // 0x004C032D: 0x00001E3C\n\t\"\\x00l\\x03-\\x00\\x00\\x1e=\" + // 0x006C032D: 0x00001E3D\n\t\"\\x00M\\x03\\x01\\x00\\x00\\x1e>\" + // 0x004D0301: 0x00001E3E\n\t\"\\x00m\\x03\\x01\\x00\\x00\\x1e?\" + // 0x006D0301: 0x00001E3F\n\t\"\\x00M\\x03\\a\\x00\\x00\\x1e@\" + // 0x004D0307: 0x00001E40\n\t\"\\x00m\\x03\\a\\x00\\x00\\x1eA\" + // 0x006D0307: 0x00001E41\n\t\"\\x00M\\x03#\\x00\\x00\\x1eB\" + // 0x004D0323: 0x00001E42\n\t\"\\x00m\\x03#\\x00\\x00\\x1eC\" + // 0x006D0323: 0x00001E43\n\t\"\\x00N\\x03\\a\\x00\\x00\\x1eD\" + // 0x004E0307: 0x00001E44\n\t\"\\x00n\\x03\\a\\x00\\x00\\x1eE\" + // 0x006E0307: 0x00001E45\n\t\"\\x00N\\x03#\\x00\\x00\\x1eF\" + // 0x004E0323: 0x00001E46\n\t\"\\x00n\\x03#\\x00\\x00\\x1eG\" + // 0x006E0323: 0x00001E47\n\t\"\\x00N\\x031\\x00\\x00\\x1eH\" + // 0x004E0331: 0x00001E48\n\t\"\\x00n\\x031\\x00\\x00\\x1eI\" + // 0x006E0331: 0x00001E49\n\t\"\\x00N\\x03-\\x00\\x00\\x1eJ\" + // 0x004E032D: 0x00001E4A\n\t\"\\x00n\\x03-\\x00\\x00\\x1eK\" + // 0x006E032D: 0x00001E4B\n\t\"\\x00\\xd5\\x03\\x01\\x00\\x00\\x1eL\" + // 0x00D50301: 0x00001E4C\n\t\"\\x00\\xf5\\x03\\x01\\x00\\x00\\x1eM\" + // 0x00F50301: 0x00001E4D\n\t\"\\x00\\xd5\\x03\\b\\x00\\x00\\x1eN\" + // 0x00D50308: 0x00001E4E\n\t\"\\x00\\xf5\\x03\\b\\x00\\x00\\x1eO\" + // 0x00F50308: 0x00001E4F\n\t\"\\x01L\\x03\\x00\\x00\\x00\\x1eP\" + // 0x014C0300: 0x00001E50\n\t\"\\x01M\\x03\\x00\\x00\\x00\\x1eQ\" + // 0x014D0300: 0x00001E51\n\t\"\\x01L\\x03\\x01\\x00\\x00\\x1eR\" + // 0x014C0301: 0x00001E52\n\t\"\\x01M\\x03\\x01\\x00\\x00\\x1eS\" + // 0x014D0301: 0x00001E53\n\t\"\\x00P\\x03\\x01\\x00\\x00\\x1eT\" + // 0x00500301: 0x00001E54\n\t\"\\x00p\\x03\\x01\\x00\\x00\\x1eU\" + // 0x00700301: 0x00001E55\n\t\"\\x00P\\x03\\a\\x00\\x00\\x1eV\" + // 0x00500307: 0x00001E56\n\t\"\\x00p\\x03\\a\\x00\\x00\\x1eW\" + // 0x00700307: 0x00001E57\n\t\"\\x00R\\x03\\a\\x00\\x00\\x1eX\" + // 0x00520307: 0x00001E58\n\t\"\\x00r\\x03\\a\\x00\\x00\\x1eY\" + // 0x00720307: 0x00001E59\n\t\"\\x00R\\x03#\\x00\\x00\\x1eZ\" + // 0x00520323: 0x00001E5A\n\t\"\\x00r\\x03#\\x00\\x00\\x1e[\" + // 0x00720323: 0x00001E5B\n\t\"\\x1eZ\\x03\\x04\\x00\\x00\\x1e\\\\\" + // 0x1E5A0304: 0x00001E5C\n\t\"\\x1e[\\x03\\x04\\x00\\x00\\x1e]\" + // 0x1E5B0304: 0x00001E5D\n\t\"\\x00R\\x031\\x00\\x00\\x1e^\" + // 0x00520331: 0x00001E5E\n\t\"\\x00r\\x031\\x00\\x00\\x1e_\" + // 0x00720331: 0x00001E5F\n\t\"\\x00S\\x03\\a\\x00\\x00\\x1e`\" + // 0x00530307: 0x00001E60\n\t\"\\x00s\\x03\\a\\x00\\x00\\x1ea\" + // 0x00730307: 0x00001E61\n\t\"\\x00S\\x03#\\x00\\x00\\x1eb\" + // 0x00530323: 0x00001E62\n\t\"\\x00s\\x03#\\x00\\x00\\x1ec\" + // 0x00730323: 0x00001E63\n\t\"\\x01Z\\x03\\a\\x00\\x00\\x1ed\" + // 0x015A0307: 0x00001E64\n\t\"\\x01[\\x03\\a\\x00\\x00\\x1ee\" + // 0x015B0307: 0x00001E65\n\t\"\\x01`\\x03\\a\\x00\\x00\\x1ef\" + // 0x01600307: 0x00001E66\n\t\"\\x01a\\x03\\a\\x00\\x00\\x1eg\" + // 0x01610307: 0x00001E67\n\t\"\\x1eb\\x03\\a\\x00\\x00\\x1eh\" + // 0x1E620307: 0x00001E68\n\t\"\\x1ec\\x03\\a\\x00\\x00\\x1ei\" + // 0x1E630307: 0x00001E69\n\t\"\\x00T\\x03\\a\\x00\\x00\\x1ej\" + // 0x00540307: 0x00001E6A\n\t\"\\x00t\\x03\\a\\x00\\x00\\x1ek\" + // 0x00740307: 0x00001E6B\n\t\"\\x00T\\x03#\\x00\\x00\\x1el\" + // 0x00540323: 0x00001E6C\n\t\"\\x00t\\x03#\\x00\\x00\\x1em\" + // 0x00740323: 0x00001E6D\n\t\"\\x00T\\x031\\x00\\x00\\x1en\" + // 0x00540331: 0x00001E6E\n\t\"\\x00t\\x031\\x00\\x00\\x1eo\" + // 0x00740331: 0x00001E6F\n\t\"\\x00T\\x03-\\x00\\x00\\x1ep\" + // 0x0054032D: 0x00001E70\n\t\"\\x00t\\x03-\\x00\\x00\\x1eq\" + // 0x0074032D: 0x00001E71\n\t\"\\x00U\\x03$\\x00\\x00\\x1er\" + // 0x00550324: 0x00001E72\n\t\"\\x00u\\x03$\\x00\\x00\\x1es\" + // 0x00750324: 0x00001E73\n\t\"\\x00U\\x030\\x00\\x00\\x1et\" + // 0x00550330: 0x00001E74\n\t\"\\x00u\\x030\\x00\\x00\\x1eu\" + // 0x00750330: 0x00001E75\n\t\"\\x00U\\x03-\\x00\\x00\\x1ev\" + // 0x0055032D: 0x00001E76\n\t\"\\x00u\\x03-\\x00\\x00\\x1ew\" + // 0x0075032D: 0x00001E77\n\t\"\\x01h\\x03\\x01\\x00\\x00\\x1ex\" + // 0x01680301: 0x00001E78\n\t\"\\x01i\\x03\\x01\\x00\\x00\\x1ey\" + // 0x01690301: 0x00001E79\n\t\"\\x01j\\x03\\b\\x00\\x00\\x1ez\" + // 0x016A0308: 0x00001E7A\n\t\"\\x01k\\x03\\b\\x00\\x00\\x1e{\" + // 0x016B0308: 0x00001E7B\n\t\"\\x00V\\x03\\x03\\x00\\x00\\x1e|\" + // 0x00560303: 0x00001E7C\n\t\"\\x00v\\x03\\x03\\x00\\x00\\x1e}\" + // 0x00760303: 0x00001E7D\n\t\"\\x00V\\x03#\\x00\\x00\\x1e~\" + // 0x00560323: 0x00001E7E\n\t\"\\x00v\\x03#\\x00\\x00\\x1e\\u007f\" + // 0x00760323: 0x00001E7F\n\t\"\\x00W\\x03\\x00\\x00\\x00\\x1e\\x80\" + // 0x00570300: 0x00001E80\n\t\"\\x00w\\x03\\x00\\x00\\x00\\x1e\\x81\" + // 0x00770300: 0x00001E81\n\t\"\\x00W\\x03\\x01\\x00\\x00\\x1e\\x82\" + // 0x00570301: 0x00001E82\n\t\"\\x00w\\x03\\x01\\x00\\x00\\x1e\\x83\" + // 0x00770301: 0x00001E83\n\t\"\\x00W\\x03\\b\\x00\\x00\\x1e\\x84\" + // 0x00570308: 0x00001E84\n\t\"\\x00w\\x03\\b\\x00\\x00\\x1e\\x85\" + // 0x00770308: 0x00001E85\n\t\"\\x00W\\x03\\a\\x00\\x00\\x1e\\x86\" + // 0x00570307: 0x00001E86\n\t\"\\x00w\\x03\\a\\x00\\x00\\x1e\\x87\" + // 0x00770307: 0x00001E87\n\t\"\\x00W\\x03#\\x00\\x00\\x1e\\x88\" + // 0x00570323: 0x00001E88\n\t\"\\x00w\\x03#\\x00\\x00\\x1e\\x89\" + // 0x00770323: 0x00001E89\n\t\"\\x00X\\x03\\a\\x00\\x00\\x1e\\x8a\" + // 0x00580307: 0x00001E8A\n\t\"\\x00x\\x03\\a\\x00\\x00\\x1e\\x8b\" + // 0x00780307: 0x00001E8B\n\t\"\\x00X\\x03\\b\\x00\\x00\\x1e\\x8c\" + // 0x00580308: 0x00001E8C\n\t\"\\x00x\\x03\\b\\x00\\x00\\x1e\\x8d\" + // 0x00780308: 0x00001E8D\n\t\"\\x00Y\\x03\\a\\x00\\x00\\x1e\\x8e\" + // 0x00590307: 0x00001E8E\n\t\"\\x00y\\x03\\a\\x00\\x00\\x1e\\x8f\" + // 0x00790307: 0x00001E8F\n\t\"\\x00Z\\x03\\x02\\x00\\x00\\x1e\\x90\" + // 0x005A0302: 0x00001E90\n\t\"\\x00z\\x03\\x02\\x00\\x00\\x1e\\x91\" + // 0x007A0302: 0x00001E91\n\t\"\\x00Z\\x03#\\x00\\x00\\x1e\\x92\" + // 0x005A0323: 0x00001E92\n\t\"\\x00z\\x03#\\x00\\x00\\x1e\\x93\" + // 0x007A0323: 0x00001E93\n\t\"\\x00Z\\x031\\x00\\x00\\x1e\\x94\" + // 0x005A0331: 0x00001E94\n\t\"\\x00z\\x031\\x00\\x00\\x1e\\x95\" + // 0x007A0331: 0x00001E95\n\t\"\\x00h\\x031\\x00\\x00\\x1e\\x96\" + // 0x00680331: 0x00001E96\n\t\"\\x00t\\x03\\b\\x00\\x00\\x1e\\x97\" + // 0x00740308: 0x00001E97\n\t\"\\x00w\\x03\\n\\x00\\x00\\x1e\\x98\" + // 0x0077030A: 0x00001E98\n\t\"\\x00y\\x03\\n\\x00\\x00\\x1e\\x99\" + // 0x0079030A: 0x00001E99\n\t\"\\x01\\u007f\\x03\\a\\x00\\x00\\x1e\\x9b\" + // 0x017F0307: 0x00001E9B\n\t\"\\x00A\\x03#\\x00\\x00\\x1e\\xa0\" + // 0x00410323: 0x00001EA0\n\t\"\\x00a\\x03#\\x00\\x00\\x1e\\xa1\" + // 0x00610323: 0x00001EA1\n\t\"\\x00A\\x03\\t\\x00\\x00\\x1e\\xa2\" + // 0x00410309: 0x00001EA2\n\t\"\\x00a\\x03\\t\\x00\\x00\\x1e\\xa3\" + // 0x00610309: 0x00001EA3\n\t\"\\x00\\xc2\\x03\\x01\\x00\\x00\\x1e\\xa4\" + // 0x00C20301: 0x00001EA4\n\t\"\\x00\\xe2\\x03\\x01\\x00\\x00\\x1e\\xa5\" + // 0x00E20301: 0x00001EA5\n\t\"\\x00\\xc2\\x03\\x00\\x00\\x00\\x1e\\xa6\" + // 0x00C20300: 0x00001EA6\n\t\"\\x00\\xe2\\x03\\x00\\x00\\x00\\x1e\\xa7\" + // 0x00E20300: 0x00001EA7\n\t\"\\x00\\xc2\\x03\\t\\x00\\x00\\x1e\\xa8\" + // 0x00C20309: 0x00001EA8\n\t\"\\x00\\xe2\\x03\\t\\x00\\x00\\x1e\\xa9\" + // 0x00E20309: 0x00001EA9\n\t\"\\x00\\xc2\\x03\\x03\\x00\\x00\\x1e\\xaa\" + // 0x00C20303: 0x00001EAA\n\t\"\\x00\\xe2\\x03\\x03\\x00\\x00\\x1e\\xab\" + // 0x00E20303: 0x00001EAB\n\t\"\\x1e\\xa0\\x03\\x02\\x00\\x00\\x1e\\xac\" + // 0x1EA00302: 0x00001EAC\n\t\"\\x1e\\xa1\\x03\\x02\\x00\\x00\\x1e\\xad\" + // 0x1EA10302: 0x00001EAD\n\t\"\\x01\\x02\\x03\\x01\\x00\\x00\\x1e\\xae\" + // 0x01020301: 0x00001EAE\n\t\"\\x01\\x03\\x03\\x01\\x00\\x00\\x1e\\xaf\" + // 0x01030301: 0x00001EAF\n\t\"\\x01\\x02\\x03\\x00\\x00\\x00\\x1e\\xb0\" + // 0x01020300: 0x00001EB0\n\t\"\\x01\\x03\\x03\\x00\\x00\\x00\\x1e\\xb1\" + // 0x01030300: 0x00001EB1\n\t\"\\x01\\x02\\x03\\t\\x00\\x00\\x1e\\xb2\" + // 0x01020309: 0x00001EB2\n\t\"\\x01\\x03\\x03\\t\\x00\\x00\\x1e\\xb3\" + // 0x01030309: 0x00001EB3\n\t\"\\x01\\x02\\x03\\x03\\x00\\x00\\x1e\\xb4\" + // 0x01020303: 0x00001EB4\n\t\"\\x01\\x03\\x03\\x03\\x00\\x00\\x1e\\xb5\" + // 0x01030303: 0x00001EB5\n\t\"\\x1e\\xa0\\x03\\x06\\x00\\x00\\x1e\\xb6\" + // 0x1EA00306: 0x00001EB6\n\t\"\\x1e\\xa1\\x03\\x06\\x00\\x00\\x1e\\xb7\" + // 0x1EA10306: 0x00001EB7\n\t\"\\x00E\\x03#\\x00\\x00\\x1e\\xb8\" + // 0x00450323: 0x00001EB8\n\t\"\\x00e\\x03#\\x00\\x00\\x1e\\xb9\" + // 0x00650323: 0x00001EB9\n\t\"\\x00E\\x03\\t\\x00\\x00\\x1e\\xba\" + // 0x00450309: 0x00001EBA\n\t\"\\x00e\\x03\\t\\x00\\x00\\x1e\\xbb\" + // 0x00650309: 0x00001EBB\n\t\"\\x00E\\x03\\x03\\x00\\x00\\x1e\\xbc\" + // 0x00450303: 0x00001EBC\n\t\"\\x00e\\x03\\x03\\x00\\x00\\x1e\\xbd\" + // 0x00650303: 0x00001EBD\n\t\"\\x00\\xca\\x03\\x01\\x00\\x00\\x1e\\xbe\" + // 0x00CA0301: 0x00001EBE\n\t\"\\x00\\xea\\x03\\x01\\x00\\x00\\x1e\\xbf\" + // 0x00EA0301: 0x00001EBF\n\t\"\\x00\\xca\\x03\\x00\\x00\\x00\\x1e\\xc0\" + // 0x00CA0300: 0x00001EC0\n\t\"\\x00\\xea\\x03\\x00\\x00\\x00\\x1e\\xc1\" + // 0x00EA0300: 0x00001EC1\n\t\"\\x00\\xca\\x03\\t\\x00\\x00\\x1e\\xc2\" + // 0x00CA0309: 0x00001EC2\n\t\"\\x00\\xea\\x03\\t\\x00\\x00\\x1e\\xc3\" + // 0x00EA0309: 0x00001EC3\n\t\"\\x00\\xca\\x03\\x03\\x00\\x00\\x1e\\xc4\" + // 0x00CA0303: 0x00001EC4\n\t\"\\x00\\xea\\x03\\x03\\x00\\x00\\x1e\\xc5\" + // 0x00EA0303: 0x00001EC5\n\t\"\\x1e\\xb8\\x03\\x02\\x00\\x00\\x1e\\xc6\" + // 0x1EB80302: 0x00001EC6\n\t\"\\x1e\\xb9\\x03\\x02\\x00\\x00\\x1e\\xc7\" + // 0x1EB90302: 0x00001EC7\n\t\"\\x00I\\x03\\t\\x00\\x00\\x1e\\xc8\" + // 0x00490309: 0x00001EC8\n\t\"\\x00i\\x03\\t\\x00\\x00\\x1e\\xc9\" + // 0x00690309: 0x00001EC9\n\t\"\\x00I\\x03#\\x00\\x00\\x1e\\xca\" + // 0x00490323: 0x00001ECA\n\t\"\\x00i\\x03#\\x00\\x00\\x1e\\xcb\" + // 0x00690323: 0x00001ECB\n\t\"\\x00O\\x03#\\x00\\x00\\x1e\\xcc\" + // 0x004F0323: 0x00001ECC\n\t\"\\x00o\\x03#\\x00\\x00\\x1e\\xcd\" + // 0x006F0323: 0x00001ECD\n\t\"\\x00O\\x03\\t\\x00\\x00\\x1e\\xce\" + // 0x004F0309: 0x00001ECE\n\t\"\\x00o\\x03\\t\\x00\\x00\\x1e\\xcf\" + // 0x006F0309: 0x00001ECF\n\t\"\\x00\\xd4\\x03\\x01\\x00\\x00\\x1e\\xd0\" + // 0x00D40301: 0x00001ED0\n\t\"\\x00\\xf4\\x03\\x01\\x00\\x00\\x1e\\xd1\" + // 0x00F40301: 0x00001ED1\n\t\"\\x00\\xd4\\x03\\x00\\x00\\x00\\x1e\\xd2\" + // 0x00D40300: 0x00001ED2\n\t\"\\x00\\xf4\\x03\\x00\\x00\\x00\\x1e\\xd3\" + // 0x00F40300: 0x00001ED3\n\t\"\\x00\\xd4\\x03\\t\\x00\\x00\\x1e\\xd4\" + // 0x00D40309: 0x00001ED4\n\t\"\\x00\\xf4\\x03\\t\\x00\\x00\\x1e\\xd5\" + // 0x00F40309: 0x00001ED5\n\t\"\\x00\\xd4\\x03\\x03\\x00\\x00\\x1e\\xd6\" + // 0x00D40303: 0x00001ED6\n\t\"\\x00\\xf4\\x03\\x03\\x00\\x00\\x1e\\xd7\" + // 0x00F40303: 0x00001ED7\n\t\"\\x1e\\xcc\\x03\\x02\\x00\\x00\\x1e\\xd8\" + // 0x1ECC0302: 0x00001ED8\n\t\"\\x1e\\xcd\\x03\\x02\\x00\\x00\\x1e\\xd9\" + // 0x1ECD0302: 0x00001ED9\n\t\"\\x01\\xa0\\x03\\x01\\x00\\x00\\x1e\\xda\" + // 0x01A00301: 0x00001EDA\n\t\"\\x01\\xa1\\x03\\x01\\x00\\x00\\x1e\\xdb\" + // 0x01A10301: 0x00001EDB\n\t\"\\x01\\xa0\\x03\\x00\\x00\\x00\\x1e\\xdc\" + // 0x01A00300: 0x00001EDC\n\t\"\\x01\\xa1\\x03\\x00\\x00\\x00\\x1e\\xdd\" + // 0x01A10300: 0x00001EDD\n\t\"\\x01\\xa0\\x03\\t\\x00\\x00\\x1e\\xde\" + // 0x01A00309: 0x00001EDE\n\t\"\\x01\\xa1\\x03\\t\\x00\\x00\\x1e\\xdf\" + // 0x01A10309: 0x00001EDF\n\t\"\\x01\\xa0\\x03\\x03\\x00\\x00\\x1e\\xe0\" + // 0x01A00303: 0x00001EE0\n\t\"\\x01\\xa1\\x03\\x03\\x00\\x00\\x1e\\xe1\" + // 0x01A10303: 0x00001EE1\n\t\"\\x01\\xa0\\x03#\\x00\\x00\\x1e\\xe2\" + // 0x01A00323: 0x00001EE2\n\t\"\\x01\\xa1\\x03#\\x00\\x00\\x1e\\xe3\" + // 0x01A10323: 0x00001EE3\n\t\"\\x00U\\x03#\\x00\\x00\\x1e\\xe4\" + // 0x00550323: 0x00001EE4\n\t\"\\x00u\\x03#\\x00\\x00\\x1e\\xe5\" + // 0x00750323: 0x00001EE5\n\t\"\\x00U\\x03\\t\\x00\\x00\\x1e\\xe6\" + // 0x00550309: 0x00001EE6\n\t\"\\x00u\\x03\\t\\x00\\x00\\x1e\\xe7\" + // 0x00750309: 0x00001EE7\n\t\"\\x01\\xaf\\x03\\x01\\x00\\x00\\x1e\\xe8\" + // 0x01AF0301: 0x00001EE8\n\t\"\\x01\\xb0\\x03\\x01\\x00\\x00\\x1e\\xe9\" + // 0x01B00301: 0x00001EE9\n\t\"\\x01\\xaf\\x03\\x00\\x00\\x00\\x1e\\xea\" + // 0x01AF0300: 0x00001EEA\n\t\"\\x01\\xb0\\x03\\x00\\x00\\x00\\x1e\\xeb\" + // 0x01B00300: 0x00001EEB\n\t\"\\x01\\xaf\\x03\\t\\x00\\x00\\x1e\\xec\" + // 0x01AF0309: 0x00001EEC\n\t\"\\x01\\xb0\\x03\\t\\x00\\x00\\x1e\\xed\" + // 0x01B00309: 0x00001EED\n\t\"\\x01\\xaf\\x03\\x03\\x00\\x00\\x1e\\xee\" + // 0x01AF0303: 0x00001EEE\n\t\"\\x01\\xb0\\x03\\x03\\x00\\x00\\x1e\\xef\" + // 0x01B00303: 0x00001EEF\n\t\"\\x01\\xaf\\x03#\\x00\\x00\\x1e\\xf0\" + // 0x01AF0323: 0x00001EF0\n\t\"\\x01\\xb0\\x03#\\x00\\x00\\x1e\\xf1\" + // 0x01B00323: 0x00001EF1\n\t\"\\x00Y\\x03\\x00\\x00\\x00\\x1e\\xf2\" + // 0x00590300: 0x00001EF2\n\t\"\\x00y\\x03\\x00\\x00\\x00\\x1e\\xf3\" + // 0x00790300: 0x00001EF3\n\t\"\\x00Y\\x03#\\x00\\x00\\x1e\\xf4\" + // 0x00590323: 0x00001EF4\n\t\"\\x00y\\x03#\\x00\\x00\\x1e\\xf5\" + // 0x00790323: 0x00001EF5\n\t\"\\x00Y\\x03\\t\\x00\\x00\\x1e\\xf6\" + // 0x00590309: 0x00001EF6\n\t\"\\x00y\\x03\\t\\x00\\x00\\x1e\\xf7\" + // 0x00790309: 0x00001EF7\n\t\"\\x00Y\\x03\\x03\\x00\\x00\\x1e\\xf8\" + // 0x00590303: 0x00001EF8\n\t\"\\x00y\\x03\\x03\\x00\\x00\\x1e\\xf9\" + // 0x00790303: 0x00001EF9\n\t\"\\x03\\xb1\\x03\\x13\\x00\\x00\\x1f\\x00\" + // 0x03B10313: 0x00001F00\n\t\"\\x03\\xb1\\x03\\x14\\x00\\x00\\x1f\\x01\" + // 0x03B10314: 0x00001F01\n\t\"\\x1f\\x00\\x03\\x00\\x00\\x00\\x1f\\x02\" + // 0x1F000300: 0x00001F02\n\t\"\\x1f\\x01\\x03\\x00\\x00\\x00\\x1f\\x03\" + // 0x1F010300: 0x00001F03\n\t\"\\x1f\\x00\\x03\\x01\\x00\\x00\\x1f\\x04\" + // 0x1F000301: 0x00001F04\n\t\"\\x1f\\x01\\x03\\x01\\x00\\x00\\x1f\\x05\" + // 0x1F010301: 0x00001F05\n\t\"\\x1f\\x00\\x03B\\x00\\x00\\x1f\\x06\" + // 0x1F000342: 0x00001F06\n\t\"\\x1f\\x01\\x03B\\x00\\x00\\x1f\\a\" + // 0x1F010342: 0x00001F07\n\t\"\\x03\\x91\\x03\\x13\\x00\\x00\\x1f\\b\" + // 0x03910313: 0x00001F08\n\t\"\\x03\\x91\\x03\\x14\\x00\\x00\\x1f\\t\" + // 0x03910314: 0x00001F09\n\t\"\\x1f\\b\\x03\\x00\\x00\\x00\\x1f\\n\" + // 0x1F080300: 0x00001F0A\n\t\"\\x1f\\t\\x03\\x00\\x00\\x00\\x1f\\v\" + // 0x1F090300: 0x00001F0B\n\t\"\\x1f\\b\\x03\\x01\\x00\\x00\\x1f\\f\" + // 0x1F080301: 0x00001F0C\n\t\"\\x1f\\t\\x03\\x01\\x00\\x00\\x1f\\r\" + // 0x1F090301: 0x00001F0D\n\t\"\\x1f\\b\\x03B\\x00\\x00\\x1f\\x0e\" + // 0x1F080342: 0x00001F0E\n\t\"\\x1f\\t\\x03B\\x00\\x00\\x1f\\x0f\" + // 0x1F090342: 0x00001F0F\n\t\"\\x03\\xb5\\x03\\x13\\x00\\x00\\x1f\\x10\" + // 0x03B50313: 0x00001F10\n\t\"\\x03\\xb5\\x03\\x14\\x00\\x00\\x1f\\x11\" + // 0x03B50314: 0x00001F11\n\t\"\\x1f\\x10\\x03\\x00\\x00\\x00\\x1f\\x12\" + // 0x1F100300: 0x00001F12\n\t\"\\x1f\\x11\\x03\\x00\\x00\\x00\\x1f\\x13\" + // 0x1F110300: 0x00001F13\n\t\"\\x1f\\x10\\x03\\x01\\x00\\x00\\x1f\\x14\" + // 0x1F100301: 0x00001F14\n\t\"\\x1f\\x11\\x03\\x01\\x00\\x00\\x1f\\x15\" + // 0x1F110301: 0x00001F15\n\t\"\\x03\\x95\\x03\\x13\\x00\\x00\\x1f\\x18\" + // 0x03950313: 0x00001F18\n\t\"\\x03\\x95\\x03\\x14\\x00\\x00\\x1f\\x19\" + // 0x03950314: 0x00001F19\n\t\"\\x1f\\x18\\x03\\x00\\x00\\x00\\x1f\\x1a\" + // 0x1F180300: 0x00001F1A\n\t\"\\x1f\\x19\\x03\\x00\\x00\\x00\\x1f\\x1b\" + // 0x1F190300: 0x00001F1B\n\t\"\\x1f\\x18\\x03\\x01\\x00\\x00\\x1f\\x1c\" + // 0x1F180301: 0x00001F1C\n\t\"\\x1f\\x19\\x03\\x01\\x00\\x00\\x1f\\x1d\" + // 0x1F190301: 0x00001F1D\n\t\"\\x03\\xb7\\x03\\x13\\x00\\x00\\x1f \" + // 0x03B70313: 0x00001F20\n\t\"\\x03\\xb7\\x03\\x14\\x00\\x00\\x1f!\" + // 0x03B70314: 0x00001F21\n\t\"\\x1f \\x03\\x00\\x00\\x00\\x1f\\\"\" + // 0x1F200300: 0x00001F22\n\t\"\\x1f!\\x03\\x00\\x00\\x00\\x1f#\" + // 0x1F210300: 0x00001F23\n\t\"\\x1f \\x03\\x01\\x00\\x00\\x1f$\" + // 0x1F200301: 0x00001F24\n\t\"\\x1f!\\x03\\x01\\x00\\x00\\x1f%\" + // 0x1F210301: 0x00001F25\n\t\"\\x1f \\x03B\\x00\\x00\\x1f&\" + // 0x1F200342: 0x00001F26\n\t\"\\x1f!\\x03B\\x00\\x00\\x1f'\" + // 0x1F210342: 0x00001F27\n\t\"\\x03\\x97\\x03\\x13\\x00\\x00\\x1f(\" + // 0x03970313: 0x00001F28\n\t\"\\x03\\x97\\x03\\x14\\x00\\x00\\x1f)\" + // 0x03970314: 0x00001F29\n\t\"\\x1f(\\x03\\x00\\x00\\x00\\x1f*\" + // 0x1F280300: 0x00001F2A\n\t\"\\x1f)\\x03\\x00\\x00\\x00\\x1f+\" + // 0x1F290300: 0x00001F2B\n\t\"\\x1f(\\x03\\x01\\x00\\x00\\x1f,\" + // 0x1F280301: 0x00001F2C\n\t\"\\x1f)\\x03\\x01\\x00\\x00\\x1f-\" + // 0x1F290301: 0x00001F2D\n\t\"\\x1f(\\x03B\\x00\\x00\\x1f.\" + // 0x1F280342: 0x00001F2E\n\t\"\\x1f)\\x03B\\x00\\x00\\x1f/\" + // 0x1F290342: 0x00001F2F\n\t\"\\x03\\xb9\\x03\\x13\\x00\\x00\\x1f0\" + // 0x03B90313: 0x00001F30\n\t\"\\x03\\xb9\\x03\\x14\\x00\\x00\\x1f1\" + // 0x03B90314: 0x00001F31\n\t\"\\x1f0\\x03\\x00\\x00\\x00\\x1f2\" + // 0x1F300300: 0x00001F32\n\t\"\\x1f1\\x03\\x00\\x00\\x00\\x1f3\" + // 0x1F310300: 0x00001F33\n\t\"\\x1f0\\x03\\x01\\x00\\x00\\x1f4\" + // 0x1F300301: 0x00001F34\n\t\"\\x1f1\\x03\\x01\\x00\\x00\\x1f5\" + // 0x1F310301: 0x00001F35\n\t\"\\x1f0\\x03B\\x00\\x00\\x1f6\" + // 0x1F300342: 0x00001F36\n\t\"\\x1f1\\x03B\\x00\\x00\\x1f7\" + // 0x1F310342: 0x00001F37\n\t\"\\x03\\x99\\x03\\x13\\x00\\x00\\x1f8\" + // 0x03990313: 0x00001F38\n\t\"\\x03\\x99\\x03\\x14\\x00\\x00\\x1f9\" + // 0x03990314: 0x00001F39\n\t\"\\x1f8\\x03\\x00\\x00\\x00\\x1f:\" + // 0x1F380300: 0x00001F3A\n\t\"\\x1f9\\x03\\x00\\x00\\x00\\x1f;\" + // 0x1F390300: 0x00001F3B\n\t\"\\x1f8\\x03\\x01\\x00\\x00\\x1f<\" + // 0x1F380301: 0x00001F3C\n\t\"\\x1f9\\x03\\x01\\x00\\x00\\x1f=\" + // 0x1F390301: 0x00001F3D\n\t\"\\x1f8\\x03B\\x00\\x00\\x1f>\" + // 0x1F380342: 0x00001F3E\n\t\"\\x1f9\\x03B\\x00\\x00\\x1f?\" + // 0x1F390342: 0x00001F3F\n\t\"\\x03\\xbf\\x03\\x13\\x00\\x00\\x1f@\" + // 0x03BF0313: 0x00001F40\n\t\"\\x03\\xbf\\x03\\x14\\x00\\x00\\x1fA\" + // 0x03BF0314: 0x00001F41\n\t\"\\x1f@\\x03\\x00\\x00\\x00\\x1fB\" + // 0x1F400300: 0x00001F42\n\t\"\\x1fA\\x03\\x00\\x00\\x00\\x1fC\" + // 0x1F410300: 0x00001F43\n\t\"\\x1f@\\x03\\x01\\x00\\x00\\x1fD\" + // 0x1F400301: 0x00001F44\n\t\"\\x1fA\\x03\\x01\\x00\\x00\\x1fE\" + // 0x1F410301: 0x00001F45\n\t\"\\x03\\x9f\\x03\\x13\\x00\\x00\\x1fH\" + // 0x039F0313: 0x00001F48\n\t\"\\x03\\x9f\\x03\\x14\\x00\\x00\\x1fI\" + // 0x039F0314: 0x00001F49\n\t\"\\x1fH\\x03\\x00\\x00\\x00\\x1fJ\" + // 0x1F480300: 0x00001F4A\n\t\"\\x1fI\\x03\\x00\\x00\\x00\\x1fK\" + // 0x1F490300: 0x00001F4B\n\t\"\\x1fH\\x03\\x01\\x00\\x00\\x1fL\" + // 0x1F480301: 0x00001F4C\n\t\"\\x1fI\\x03\\x01\\x00\\x00\\x1fM\" + // 0x1F490301: 0x00001F4D\n\t\"\\x03\\xc5\\x03\\x13\\x00\\x00\\x1fP\" + // 0x03C50313: 0x00001F50\n\t\"\\x03\\xc5\\x03\\x14\\x00\\x00\\x1fQ\" + // 0x03C50314: 0x00001F51\n\t\"\\x1fP\\x03\\x00\\x00\\x00\\x1fR\" + // 0x1F500300: 0x00001F52\n\t\"\\x1fQ\\x03\\x00\\x00\\x00\\x1fS\" + // 0x1F510300: 0x00001F53\n\t\"\\x1fP\\x03\\x01\\x00\\x00\\x1fT\" + // 0x1F500301: 0x00001F54\n\t\"\\x1fQ\\x03\\x01\\x00\\x00\\x1fU\" + // 0x1F510301: 0x00001F55\n\t\"\\x1fP\\x03B\\x00\\x00\\x1fV\" + // 0x1F500342: 0x00001F56\n\t\"\\x1fQ\\x03B\\x00\\x00\\x1fW\" + // 0x1F510342: 0x00001F57\n\t\"\\x03\\xa5\\x03\\x14\\x00\\x00\\x1fY\" + // 0x03A50314: 0x00001F59\n\t\"\\x1fY\\x03\\x00\\x00\\x00\\x1f[\" + // 0x1F590300: 0x00001F5B\n\t\"\\x1fY\\x03\\x01\\x00\\x00\\x1f]\" + // 0x1F590301: 0x00001F5D\n\t\"\\x1fY\\x03B\\x00\\x00\\x1f_\" + // 0x1F590342: 0x00001F5F\n\t\"\\x03\\xc9\\x03\\x13\\x00\\x00\\x1f`\" + // 0x03C90313: 0x00001F60\n\t\"\\x03\\xc9\\x03\\x14\\x00\\x00\\x1fa\" + // 0x03C90314: 0x00001F61\n\t\"\\x1f`\\x03\\x00\\x00\\x00\\x1fb\" + // 0x1F600300: 0x00001F62\n\t\"\\x1fa\\x03\\x00\\x00\\x00\\x1fc\" + // 0x1F610300: 0x00001F63\n\t\"\\x1f`\\x03\\x01\\x00\\x00\\x1fd\" + // 0x1F600301: 0x00001F64\n\t\"\\x1fa\\x03\\x01\\x00\\x00\\x1fe\" + // 0x1F610301: 0x00001F65\n\t\"\\x1f`\\x03B\\x00\\x00\\x1ff\" + // 0x1F600342: 0x00001F66\n\t\"\\x1fa\\x03B\\x00\\x00\\x1fg\" + // 0x1F610342: 0x00001F67\n\t\"\\x03\\xa9\\x03\\x13\\x00\\x00\\x1fh\" + // 0x03A90313: 0x00001F68\n\t\"\\x03\\xa9\\x03\\x14\\x00\\x00\\x1fi\" + // 0x03A90314: 0x00001F69\n\t\"\\x1fh\\x03\\x00\\x00\\x00\\x1fj\" + // 0x1F680300: 0x00001F6A\n\t\"\\x1fi\\x03\\x00\\x00\\x00\\x1fk\" + // 0x1F690300: 0x00001F6B\n\t\"\\x1fh\\x03\\x01\\x00\\x00\\x1fl\" + // 0x1F680301: 0x00001F6C\n\t\"\\x1fi\\x03\\x01\\x00\\x00\\x1fm\" + // 0x1F690301: 0x00001F6D\n\t\"\\x1fh\\x03B\\x00\\x00\\x1fn\" + // 0x1F680342: 0x00001F6E\n\t\"\\x1fi\\x03B\\x00\\x00\\x1fo\" + // 0x1F690342: 0x00001F6F\n\t\"\\x03\\xb1\\x03\\x00\\x00\\x00\\x1fp\" + // 0x03B10300: 0x00001F70\n\t\"\\x03\\xb5\\x03\\x00\\x00\\x00\\x1fr\" + // 0x03B50300: 0x00001F72\n\t\"\\x03\\xb7\\x03\\x00\\x00\\x00\\x1ft\" + // 0x03B70300: 0x00001F74\n\t\"\\x03\\xb9\\x03\\x00\\x00\\x00\\x1fv\" + // 0x03B90300: 0x00001F76\n\t\"\\x03\\xbf\\x03\\x00\\x00\\x00\\x1fx\" + // 0x03BF0300: 0x00001F78\n\t\"\\x03\\xc5\\x03\\x00\\x00\\x00\\x1fz\" + // 0x03C50300: 0x00001F7A\n\t\"\\x03\\xc9\\x03\\x00\\x00\\x00\\x1f|\" + // 0x03C90300: 0x00001F7C\n\t\"\\x1f\\x00\\x03E\\x00\\x00\\x1f\\x80\" + // 0x1F000345: 0x00001F80\n\t\"\\x1f\\x01\\x03E\\x00\\x00\\x1f\\x81\" + // 0x1F010345: 0x00001F81\n\t\"\\x1f\\x02\\x03E\\x00\\x00\\x1f\\x82\" + // 0x1F020345: 0x00001F82\n\t\"\\x1f\\x03\\x03E\\x00\\x00\\x1f\\x83\" + // 0x1F030345: 0x00001F83\n\t\"\\x1f\\x04\\x03E\\x00\\x00\\x1f\\x84\" + // 0x1F040345: 0x00001F84\n\t\"\\x1f\\x05\\x03E\\x00\\x00\\x1f\\x85\" + // 0x1F050345: 0x00001F85\n\t\"\\x1f\\x06\\x03E\\x00\\x00\\x1f\\x86\" + // 0x1F060345: 0x00001F86\n\t\"\\x1f\\a\\x03E\\x00\\x00\\x1f\\x87\" + // 0x1F070345: 0x00001F87\n\t\"\\x1f\\b\\x03E\\x00\\x00\\x1f\\x88\" + // 0x1F080345: 0x00001F88\n\t\"\\x1f\\t\\x03E\\x00\\x00\\x1f\\x89\" + // 0x1F090345: 0x00001F89\n\t\"\\x1f\\n\\x03E\\x00\\x00\\x1f\\x8a\" + // 0x1F0A0345: 0x00001F8A\n\t\"\\x1f\\v\\x03E\\x00\\x00\\x1f\\x8b\" + // 0x1F0B0345: 0x00001F8B\n\t\"\\x1f\\f\\x03E\\x00\\x00\\x1f\\x8c\" + // 0x1F0C0345: 0x00001F8C\n\t\"\\x1f\\r\\x03E\\x00\\x00\\x1f\\x8d\" + // 0x1F0D0345: 0x00001F8D\n\t\"\\x1f\\x0e\\x03E\\x00\\x00\\x1f\\x8e\" + // 0x1F0E0345: 0x00001F8E\n\t\"\\x1f\\x0f\\x03E\\x00\\x00\\x1f\\x8f\" + // 0x1F0F0345: 0x00001F8F\n\t\"\\x1f \\x03E\\x00\\x00\\x1f\\x90\" + // 0x1F200345: 0x00001F90\n\t\"\\x1f!\\x03E\\x00\\x00\\x1f\\x91\" + // 0x1F210345: 0x00001F91\n\t\"\\x1f\\\"\\x03E\\x00\\x00\\x1f\\x92\" + // 0x1F220345: 0x00001F92\n\t\"\\x1f#\\x03E\\x00\\x00\\x1f\\x93\" + // 0x1F230345: 0x00001F93\n\t\"\\x1f$\\x03E\\x00\\x00\\x1f\\x94\" + // 0x1F240345: 0x00001F94\n\t\"\\x1f%\\x03E\\x00\\x00\\x1f\\x95\" + // 0x1F250345: 0x00001F95\n\t\"\\x1f&\\x03E\\x00\\x00\\x1f\\x96\" + // 0x1F260345: 0x00001F96\n\t\"\\x1f'\\x03E\\x00\\x00\\x1f\\x97\" + // 0x1F270345: 0x00001F97\n\t\"\\x1f(\\x03E\\x00\\x00\\x1f\\x98\" + // 0x1F280345: 0x00001F98\n\t\"\\x1f)\\x03E\\x00\\x00\\x1f\\x99\" + // 0x1F290345: 0x00001F99\n\t\"\\x1f*\\x03E\\x00\\x00\\x1f\\x9a\" + // 0x1F2A0345: 0x00001F9A\n\t\"\\x1f+\\x03E\\x00\\x00\\x1f\\x9b\" + // 0x1F2B0345: 0x00001F9B\n\t\"\\x1f,\\x03E\\x00\\x00\\x1f\\x9c\" + // 0x1F2C0345: 0x00001F9C\n\t\"\\x1f-\\x03E\\x00\\x00\\x1f\\x9d\" + // 0x1F2D0345: 0x00001F9D\n\t\"\\x1f.\\x03E\\x00\\x00\\x1f\\x9e\" + // 0x1F2E0345: 0x00001F9E\n\t\"\\x1f/\\x03E\\x00\\x00\\x1f\\x9f\" + // 0x1F2F0345: 0x00001F9F\n\t\"\\x1f`\\x03E\\x00\\x00\\x1f\\xa0\" + // 0x1F600345: 0x00001FA0\n\t\"\\x1fa\\x03E\\x00\\x00\\x1f\\xa1\" + // 0x1F610345: 0x00001FA1\n\t\"\\x1fb\\x03E\\x00\\x00\\x1f\\xa2\" + // 0x1F620345: 0x00001FA2\n\t\"\\x1fc\\x03E\\x00\\x00\\x1f\\xa3\" + // 0x1F630345: 0x00001FA3\n\t\"\\x1fd\\x03E\\x00\\x00\\x1f\\xa4\" + // 0x1F640345: 0x00001FA4\n\t\"\\x1fe\\x03E\\x00\\x00\\x1f\\xa5\" + // 0x1F650345: 0x00001FA5\n\t\"\\x1ff\\x03E\\x00\\x00\\x1f\\xa6\" + // 0x1F660345: 0x00001FA6\n\t\"\\x1fg\\x03E\\x00\\x00\\x1f\\xa7\" + // 0x1F670345: 0x00001FA7\n\t\"\\x1fh\\x03E\\x00\\x00\\x1f\\xa8\" + // 0x1F680345: 0x00001FA8\n\t\"\\x1fi\\x03E\\x00\\x00\\x1f\\xa9\" + // 0x1F690345: 0x00001FA9\n\t\"\\x1fj\\x03E\\x00\\x00\\x1f\\xaa\" + // 0x1F6A0345: 0x00001FAA\n\t\"\\x1fk\\x03E\\x00\\x00\\x1f\\xab\" + // 0x1F6B0345: 0x00001FAB\n\t\"\\x1fl\\x03E\\x00\\x00\\x1f\\xac\" + // 0x1F6C0345: 0x00001FAC\n\t\"\\x1fm\\x03E\\x00\\x00\\x1f\\xad\" + // 0x1F6D0345: 0x00001FAD\n\t\"\\x1fn\\x03E\\x00\\x00\\x1f\\xae\" + // 0x1F6E0345: 0x00001FAE\n\t\"\\x1fo\\x03E\\x00\\x00\\x1f\\xaf\" + // 0x1F6F0345: 0x00001FAF\n\t\"\\x03\\xb1\\x03\\x06\\x00\\x00\\x1f\\xb0\" + // 0x03B10306: 0x00001FB0\n\t\"\\x03\\xb1\\x03\\x04\\x00\\x00\\x1f\\xb1\" + // 0x03B10304: 0x00001FB1\n\t\"\\x1fp\\x03E\\x00\\x00\\x1f\\xb2\" + // 0x1F700345: 0x00001FB2\n\t\"\\x03\\xb1\\x03E\\x00\\x00\\x1f\\xb3\" + // 0x03B10345: 0x00001FB3\n\t\"\\x03\\xac\\x03E\\x00\\x00\\x1f\\xb4\" + // 0x03AC0345: 0x00001FB4\n\t\"\\x03\\xb1\\x03B\\x00\\x00\\x1f\\xb6\" + // 0x03B10342: 0x00001FB6\n\t\"\\x1f\\xb6\\x03E\\x00\\x00\\x1f\\xb7\" + // 0x1FB60345: 0x00001FB7\n\t\"\\x03\\x91\\x03\\x06\\x00\\x00\\x1f\\xb8\" + // 0x03910306: 0x00001FB8\n\t\"\\x03\\x91\\x03\\x04\\x00\\x00\\x1f\\xb9\" + // 0x03910304: 0x00001FB9\n\t\"\\x03\\x91\\x03\\x00\\x00\\x00\\x1f\\xba\" + // 0x03910300: 0x00001FBA\n\t\"\\x03\\x91\\x03E\\x00\\x00\\x1f\\xbc\" + // 0x03910345: 0x00001FBC\n\t\"\\x00\\xa8\\x03B\\x00\\x00\\x1f\\xc1\" + // 0x00A80342: 0x00001FC1\n\t\"\\x1ft\\x03E\\x00\\x00\\x1f\\xc2\" + // 0x1F740345: 0x00001FC2\n\t\"\\x03\\xb7\\x03E\\x00\\x00\\x1f\\xc3\" + // 0x03B70345: 0x00001FC3\n\t\"\\x03\\xae\\x03E\\x00\\x00\\x1f\\xc4\" + // 0x03AE0345: 0x00001FC4\n\t\"\\x03\\xb7\\x03B\\x00\\x00\\x1f\\xc6\" + // 0x03B70342: 0x00001FC6\n\t\"\\x1f\\xc6\\x03E\\x00\\x00\\x1f\\xc7\" + // 0x1FC60345: 0x00001FC7\n\t\"\\x03\\x95\\x03\\x00\\x00\\x00\\x1f\\xc8\" + // 0x03950300: 0x00001FC8\n\t\"\\x03\\x97\\x03\\x00\\x00\\x00\\x1f\\xca\" + // 0x03970300: 0x00001FCA\n\t\"\\x03\\x97\\x03E\\x00\\x00\\x1f\\xcc\" + // 0x03970345: 0x00001FCC\n\t\"\\x1f\\xbf\\x03\\x00\\x00\\x00\\x1f\\xcd\" + // 0x1FBF0300: 0x00001FCD\n\t\"\\x1f\\xbf\\x03\\x01\\x00\\x00\\x1f\\xce\" + // 0x1FBF0301: 0x00001FCE\n\t\"\\x1f\\xbf\\x03B\\x00\\x00\\x1f\\xcf\" + // 0x1FBF0342: 0x00001FCF\n\t\"\\x03\\xb9\\x03\\x06\\x00\\x00\\x1f\\xd0\" + // 0x03B90306: 0x00001FD0\n\t\"\\x03\\xb9\\x03\\x04\\x00\\x00\\x1f\\xd1\" + // 0x03B90304: 0x00001FD1\n\t\"\\x03\\xca\\x03\\x00\\x00\\x00\\x1f\\xd2\" + // 0x03CA0300: 0x00001FD2\n\t\"\\x03\\xb9\\x03B\\x00\\x00\\x1f\\xd6\" + // 0x03B90342: 0x00001FD6\n\t\"\\x03\\xca\\x03B\\x00\\x00\\x1f\\xd7\" + // 0x03CA0342: 0x00001FD7\n\t\"\\x03\\x99\\x03\\x06\\x00\\x00\\x1f\\xd8\" + // 0x03990306: 0x00001FD8\n\t\"\\x03\\x99\\x03\\x04\\x00\\x00\\x1f\\xd9\" + // 0x03990304: 0x00001FD9\n\t\"\\x03\\x99\\x03\\x00\\x00\\x00\\x1f\\xda\" + // 0x03990300: 0x00001FDA\n\t\"\\x1f\\xfe\\x03\\x00\\x00\\x00\\x1f\\xdd\" + // 0x1FFE0300: 0x00001FDD\n\t\"\\x1f\\xfe\\x03\\x01\\x00\\x00\\x1f\\xde\" + // 0x1FFE0301: 0x00001FDE\n\t\"\\x1f\\xfe\\x03B\\x00\\x00\\x1f\\xdf\" + // 0x1FFE0342: 0x00001FDF\n\t\"\\x03\\xc5\\x03\\x06\\x00\\x00\\x1f\\xe0\" + // 0x03C50306: 0x00001FE0\n\t\"\\x03\\xc5\\x03\\x04\\x00\\x00\\x1f\\xe1\" + // 0x03C50304: 0x00001FE1\n\t\"\\x03\\xcb\\x03\\x00\\x00\\x00\\x1f\\xe2\" + // 0x03CB0300: 0x00001FE2\n\t\"\\x03\\xc1\\x03\\x13\\x00\\x00\\x1f\\xe4\" + // 0x03C10313: 0x00001FE4\n\t\"\\x03\\xc1\\x03\\x14\\x00\\x00\\x1f\\xe5\" + // 0x03C10314: 0x00001FE5\n\t\"\\x03\\xc5\\x03B\\x00\\x00\\x1f\\xe6\" + // 0x03C50342: 0x00001FE6\n\t\"\\x03\\xcb\\x03B\\x00\\x00\\x1f\\xe7\" + // 0x03CB0342: 0x00001FE7\n\t\"\\x03\\xa5\\x03\\x06\\x00\\x00\\x1f\\xe8\" + // 0x03A50306: 0x00001FE8\n\t\"\\x03\\xa5\\x03\\x04\\x00\\x00\\x1f\\xe9\" + // 0x03A50304: 0x00001FE9\n\t\"\\x03\\xa5\\x03\\x00\\x00\\x00\\x1f\\xea\" + // 0x03A50300: 0x00001FEA\n\t\"\\x03\\xa1\\x03\\x14\\x00\\x00\\x1f\\xec\" + // 0x03A10314: 0x00001FEC\n\t\"\\x00\\xa8\\x03\\x00\\x00\\x00\\x1f\\xed\" + // 0x00A80300: 0x00001FED\n\t\"\\x1f|\\x03E\\x00\\x00\\x1f\\xf2\" + // 0x1F7C0345: 0x00001FF2\n\t\"\\x03\\xc9\\x03E\\x00\\x00\\x1f\\xf3\" + // 0x03C90345: 0x00001FF3\n\t\"\\x03\\xce\\x03E\\x00\\x00\\x1f\\xf4\" + // 0x03CE0345: 0x00001FF4\n\t\"\\x03\\xc9\\x03B\\x00\\x00\\x1f\\xf6\" + // 0x03C90342: 0x00001FF6\n\t\"\\x1f\\xf6\\x03E\\x00\\x00\\x1f\\xf7\" + // 0x1FF60345: 0x00001FF7\n\t\"\\x03\\x9f\\x03\\x00\\x00\\x00\\x1f\\xf8\" + // 0x039F0300: 0x00001FF8\n\t\"\\x03\\xa9\\x03\\x00\\x00\\x00\\x1f\\xfa\" + // 0x03A90300: 0x00001FFA\n\t\"\\x03\\xa9\\x03E\\x00\\x00\\x1f\\xfc\" + // 0x03A90345: 0x00001FFC\n\t\"!\\x90\\x038\\x00\\x00!\\x9a\" + // 0x21900338: 0x0000219A\n\t\"!\\x92\\x038\\x00\\x00!\\x9b\" + // 0x21920338: 0x0000219B\n\t\"!\\x94\\x038\\x00\\x00!\\xae\" + // 0x21940338: 0x000021AE\n\t\"!\\xd0\\x038\\x00\\x00!\\xcd\" + // 0x21D00338: 0x000021CD\n\t\"!\\xd4\\x038\\x00\\x00!\\xce\" + // 0x21D40338: 0x000021CE\n\t\"!\\xd2\\x038\\x00\\x00!\\xcf\" + // 0x21D20338: 0x000021CF\n\t\"\\\"\\x03\\x038\\x00\\x00\\\"\\x04\" + // 0x22030338: 0x00002204\n\t\"\\\"\\b\\x038\\x00\\x00\\\"\\t\" + // 0x22080338: 0x00002209\n\t\"\\\"\\v\\x038\\x00\\x00\\\"\\f\" + // 0x220B0338: 0x0000220C\n\t\"\\\"#\\x038\\x00\\x00\\\"$\" + // 0x22230338: 0x00002224\n\t\"\\\"%\\x038\\x00\\x00\\\"&\" + // 0x22250338: 0x00002226\n\t\"\\\"<\\x038\\x00\\x00\\\"A\" + // 0x223C0338: 0x00002241\n\t\"\\\"C\\x038\\x00\\x00\\\"D\" + // 0x22430338: 0x00002244\n\t\"\\\"E\\x038\\x00\\x00\\\"G\" + // 0x22450338: 0x00002247\n\t\"\\\"H\\x038\\x00\\x00\\\"I\" + // 0x22480338: 0x00002249\n\t\"\\x00=\\x038\\x00\\x00\\\"`\" + // 0x003D0338: 0x00002260\n\t\"\\\"a\\x038\\x00\\x00\\\"b\" + // 0x22610338: 0x00002262\n\t\"\\\"M\\x038\\x00\\x00\\\"m\" + // 0x224D0338: 0x0000226D\n\t\"\\x00<\\x038\\x00\\x00\\\"n\" + // 0x003C0338: 0x0000226E\n\t\"\\x00>\\x038\\x00\\x00\\\"o\" + // 0x003E0338: 0x0000226F\n\t\"\\\"d\\x038\\x00\\x00\\\"p\" + // 0x22640338: 0x00002270\n\t\"\\\"e\\x038\\x00\\x00\\\"q\" + // 0x22650338: 0x00002271\n\t\"\\\"r\\x038\\x00\\x00\\\"t\" + // 0x22720338: 0x00002274\n\t\"\\\"s\\x038\\x00\\x00\\\"u\" + // 0x22730338: 0x00002275\n\t\"\\\"v\\x038\\x00\\x00\\\"x\" + // 0x22760338: 0x00002278\n\t\"\\\"w\\x038\\x00\\x00\\\"y\" + // 0x22770338: 0x00002279\n\t\"\\\"z\\x038\\x00\\x00\\\"\\x80\" + // 0x227A0338: 0x00002280\n\t\"\\\"{\\x038\\x00\\x00\\\"\\x81\" + // 0x227B0338: 0x00002281\n\t\"\\\"\\x82\\x038\\x00\\x00\\\"\\x84\" + // 0x22820338: 0x00002284\n\t\"\\\"\\x83\\x038\\x00\\x00\\\"\\x85\" + // 0x22830338: 0x00002285\n\t\"\\\"\\x86\\x038\\x00\\x00\\\"\\x88\" + // 0x22860338: 0x00002288\n\t\"\\\"\\x87\\x038\\x00\\x00\\\"\\x89\" + // 0x22870338: 0x00002289\n\t\"\\\"\\xa2\\x038\\x00\\x00\\\"\\xac\" + // 0x22A20338: 0x000022AC\n\t\"\\\"\\xa8\\x038\\x00\\x00\\\"\\xad\" + // 0x22A80338: 0x000022AD\n\t\"\\\"\\xa9\\x038\\x00\\x00\\\"\\xae\" + // 0x22A90338: 0x000022AE\n\t\"\\\"\\xab\\x038\\x00\\x00\\\"\\xaf\" + // 0x22AB0338: 0x000022AF\n\t\"\\\"|\\x038\\x00\\x00\\\"\\xe0\" + // 0x227C0338: 0x000022E0\n\t\"\\\"}\\x038\\x00\\x00\\\"\\xe1\" + // 0x227D0338: 0x000022E1\n\t\"\\\"\\x91\\x038\\x00\\x00\\\"\\xe2\" + // 0x22910338: 0x000022E2\n\t\"\\\"\\x92\\x038\\x00\\x00\\\"\\xe3\" + // 0x22920338: 0x000022E3\n\t\"\\\"\\xb2\\x038\\x00\\x00\\\"\\xea\" + // 0x22B20338: 0x000022EA\n\t\"\\\"\\xb3\\x038\\x00\\x00\\\"\\xeb\" + // 0x22B30338: 0x000022EB\n\t\"\\\"\\xb4\\x038\\x00\\x00\\\"\\xec\" + // 0x22B40338: 0x000022EC\n\t\"\\\"\\xb5\\x038\\x00\\x00\\\"\\xed\" + // 0x22B50338: 0x000022ED\n\t\"0K0\\x99\\x00\\x000L\" + // 0x304B3099: 0x0000304C\n\t\"0M0\\x99\\x00\\x000N\" + // 0x304D3099: 0x0000304E\n\t\"0O0\\x99\\x00\\x000P\" + // 0x304F3099: 0x00003050\n\t\"0Q0\\x99\\x00\\x000R\" + // 0x30513099: 0x00003052\n\t\"0S0\\x99\\x00\\x000T\" + // 0x30533099: 0x00003054\n\t\"0U0\\x99\\x00\\x000V\" + // 0x30553099: 0x00003056\n\t\"0W0\\x99\\x00\\x000X\" + // 0x30573099: 0x00003058\n\t\"0Y0\\x99\\x00\\x000Z\" + // 0x30593099: 0x0000305A\n\t\"0[0\\x99\\x00\\x000\\\\\" + // 0x305B3099: 0x0000305C\n\t\"0]0\\x99\\x00\\x000^\" + // 0x305D3099: 0x0000305E\n\t\"0_0\\x99\\x00\\x000`\" + // 0x305F3099: 0x00003060\n\t\"0a0\\x99\\x00\\x000b\" + // 0x30613099: 0x00003062\n\t\"0d0\\x99\\x00\\x000e\" + // 0x30643099: 0x00003065\n\t\"0f0\\x99\\x00\\x000g\" + // 0x30663099: 0x00003067\n\t\"0h0\\x99\\x00\\x000i\" + // 0x30683099: 0x00003069\n\t\"0o0\\x99\\x00\\x000p\" + // 0x306F3099: 0x00003070\n\t\"0o0\\x9a\\x00\\x000q\" + // 0x306F309A: 0x00003071\n\t\"0r0\\x99\\x00\\x000s\" + // 0x30723099: 0x00003073\n\t\"0r0\\x9a\\x00\\x000t\" + // 0x3072309A: 0x00003074\n\t\"0u0\\x99\\x00\\x000v\" + // 0x30753099: 0x00003076\n\t\"0u0\\x9a\\x00\\x000w\" + // 0x3075309A: 0x00003077\n\t\"0x0\\x99\\x00\\x000y\" + // 0x30783099: 0x00003079\n\t\"0x0\\x9a\\x00\\x000z\" + // 0x3078309A: 0x0000307A\n\t\"0{0\\x99\\x00\\x000|\" + // 0x307B3099: 0x0000307C\n\t\"0{0\\x9a\\x00\\x000}\" + // 0x307B309A: 0x0000307D\n\t\"0F0\\x99\\x00\\x000\\x94\" + // 0x30463099: 0x00003094\n\t\"0\\x9d0\\x99\\x00\\x000\\x9e\" + // 0x309D3099: 0x0000309E\n\t\"0\\xab0\\x99\\x00\\x000\\xac\" + // 0x30AB3099: 0x000030AC\n\t\"0\\xad0\\x99\\x00\\x000\\xae\" + // 0x30AD3099: 0x000030AE\n\t\"0\\xaf0\\x99\\x00\\x000\\xb0\" + // 0x30AF3099: 0x000030B0\n\t\"0\\xb10\\x99\\x00\\x000\\xb2\" + // 0x30B13099: 0x000030B2\n\t\"0\\xb30\\x99\\x00\\x000\\xb4\" + // 0x30B33099: 0x000030B4\n\t\"0\\xb50\\x99\\x00\\x000\\xb6\" + // 0x30B53099: 0x000030B6\n\t\"0\\xb70\\x99\\x00\\x000\\xb8\" + // 0x30B73099: 0x000030B8\n\t\"0\\xb90\\x99\\x00\\x000\\xba\" + // 0x30B93099: 0x000030BA\n\t\"0\\xbb0\\x99\\x00\\x000\\xbc\" + // 0x30BB3099: 0x000030BC\n\t\"0\\xbd0\\x99\\x00\\x000\\xbe\" + // 0x30BD3099: 0x000030BE\n\t\"0\\xbf0\\x99\\x00\\x000\\xc0\" + // 0x30BF3099: 0x000030C0\n\t\"0\\xc10\\x99\\x00\\x000\\xc2\" + // 0x30C13099: 0x000030C2\n\t\"0\\xc40\\x99\\x00\\x000\\xc5\" + // 0x30C43099: 0x000030C5\n\t\"0\\xc60\\x99\\x00\\x000\\xc7\" + // 0x30C63099: 0x000030C7\n\t\"0\\xc80\\x99\\x00\\x000\\xc9\" + // 0x30C83099: 0x000030C9\n\t\"0\\xcf0\\x99\\x00\\x000\\xd0\" + // 0x30CF3099: 0x000030D0\n\t\"0\\xcf0\\x9a\\x00\\x000\\xd1\" + // 0x30CF309A: 0x000030D1\n\t\"0\\xd20\\x99\\x00\\x000\\xd3\" + // 0x30D23099: 0x000030D3\n\t\"0\\xd20\\x9a\\x00\\x000\\xd4\" + // 0x30D2309A: 0x000030D4\n\t\"0\\xd50\\x99\\x00\\x000\\xd6\" + // 0x30D53099: 0x000030D6\n\t\"0\\xd50\\x9a\\x00\\x000\\xd7\" + // 0x30D5309A: 0x000030D7\n\t\"0\\xd80\\x99\\x00\\x000\\xd9\" + // 0x30D83099: 0x000030D9\n\t\"0\\xd80\\x9a\\x00\\x000\\xda\" + // 0x30D8309A: 0x000030DA\n\t\"0\\xdb0\\x99\\x00\\x000\\xdc\" + // 0x30DB3099: 0x000030DC\n\t\"0\\xdb0\\x9a\\x00\\x000\\xdd\" + // 0x30DB309A: 0x000030DD\n\t\"0\\xa60\\x99\\x00\\x000\\xf4\" + // 0x30A63099: 0x000030F4\n\t\"0\\xef0\\x99\\x00\\x000\\xf7\" + // 0x30EF3099: 0x000030F7\n\t\"0\\xf00\\x99\\x00\\x000\\xf8\" + // 0x30F03099: 0x000030F8\n\t\"0\\xf10\\x99\\x00\\x000\\xf9\" + // 0x30F13099: 0x000030F9\n\t\"0\\xf20\\x99\\x00\\x000\\xfa\" + // 0x30F23099: 0x000030FA\n\t\"0\\xfd0\\x99\\x00\\x000\\xfe\" + // 0x30FD3099: 0x000030FE\n\t\"\\x10\\x99\\x10\\xba\\x00\\x01\\x10\\x9a\" + // 0x109910BA: 0x0001109A\n\t\"\\x10\\x9b\\x10\\xba\\x00\\x01\\x10\\x9c\" + // 0x109B10BA: 0x0001109C\n\t\"\\x10\\xa5\\x10\\xba\\x00\\x01\\x10\\xab\" + // 0x10A510BA: 0x000110AB\n\t\"\\x111\\x11'\\x00\\x01\\x11.\" + // 0x11311127: 0x0001112E\n\t\"\\x112\\x11'\\x00\\x01\\x11/\" + // 0x11321127: 0x0001112F\n\t\"\\x13G\\x13>\\x00\\x01\\x13K\" + // 0x1347133E: 0x0001134B\n\t\"\\x13G\\x13W\\x00\\x01\\x13L\" + // 0x13471357: 0x0001134C\n\t\"\\x14\\xb9\\x14\\xba\\x00\\x01\\x14\\xbb\" + // 0x14B914BA: 0x000114BB\n\t\"\\x14\\xb9\\x14\\xb0\\x00\\x01\\x14\\xbc\" + // 0x14B914B0: 0x000114BC\n\t\"\\x14\\xb9\\x14\\xbd\\x00\\x01\\x14\\xbe\" + // 0x14B914BD: 0x000114BE\n\t\"\\x15\\xb8\\x15\\xaf\\x00\\x01\\x15\\xba\" + // 0x15B815AF: 0x000115BA\n\t\"\\x15\\xb9\\x15\\xaf\\x00\\x01\\x15\\xbb\" + // 0x15B915AF: 0x000115BB\n\t\"\"\n\t// Total size of tables: 53KB (54226 bytes)\n"
  },
  {
    "path": "vendor/golang.org/x/text/unicode/norm/tables11.0.0.go",
    "content": "// Code generated by running \"go generate\" in golang.org/x/text. DO NOT EDIT.\n\n// +build go1.13\n\npackage norm\n\nimport \"sync\"\n\nconst (\n\t// Version is the Unicode edition from which the tables are derived.\n\tVersion = \"11.0.0\"\n\n\t// MaxTransformChunkSize indicates the maximum number of bytes that Transform\n\t// may need to write atomically for any Form. Making a destination buffer at\n\t// least this size ensures that Transform can always make progress and that\n\t// the user does not need to grow the buffer on an ErrShortDst.\n\tMaxTransformChunkSize = 35 + maxNonStarters*4\n)\n\nvar ccc = [55]uint8{\n\t0, 1, 7, 8, 9, 10, 11, 12,\n\t13, 14, 15, 16, 17, 18, 19, 20,\n\t21, 22, 23, 24, 25, 26, 27, 28,\n\t29, 30, 31, 32, 33, 34, 35, 36,\n\t84, 91, 103, 107, 118, 122, 129, 130,\n\t132, 202, 214, 216, 218, 220, 222, 224,\n\t226, 228, 230, 232, 233, 234, 240,\n}\n\nconst (\n\tfirstMulti            = 0x186D\n\tfirstCCC              = 0x2C9E\n\tendMulti              = 0x2F60\n\tfirstLeadingCCC       = 0x49AE\n\tfirstCCCZeroExcept    = 0x4A78\n\tfirstStarterWithNLead = 0x4A9F\n\tlastDecomp            = 0x4AA1\n\tmaxDecomp             = 0x8000\n)\n\n// decomps: 19105 bytes\nvar decomps = [...]byte{\n\t// Bytes 0 - 3f\n\t0x00, 0x41, 0x20, 0x41, 0x21, 0x41, 0x22, 0x41,\n\t0x23, 0x41, 0x24, 0x41, 0x25, 0x41, 0x26, 0x41,\n\t0x27, 0x41, 0x28, 0x41, 0x29, 0x41, 0x2A, 0x41,\n\t0x2B, 0x41, 0x2C, 0x41, 0x2D, 0x41, 0x2E, 0x41,\n\t0x2F, 0x41, 0x30, 0x41, 0x31, 0x41, 0x32, 0x41,\n\t0x33, 0x41, 0x34, 0x41, 0x35, 0x41, 0x36, 0x41,\n\t0x37, 0x41, 0x38, 0x41, 0x39, 0x41, 0x3A, 0x41,\n\t0x3B, 0x41, 0x3C, 0x41, 0x3D, 0x41, 0x3E, 0x41,\n\t// Bytes 40 - 7f\n\t0x3F, 0x41, 0x40, 0x41, 0x41, 0x41, 0x42, 0x41,\n\t0x43, 0x41, 0x44, 0x41, 0x45, 0x41, 0x46, 0x41,\n\t0x47, 0x41, 0x48, 0x41, 0x49, 0x41, 0x4A, 0x41,\n\t0x4B, 0x41, 0x4C, 0x41, 0x4D, 0x41, 0x4E, 0x41,\n\t0x4F, 0x41, 0x50, 0x41, 0x51, 0x41, 0x52, 0x41,\n\t0x53, 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41,\n\t0x57, 0x41, 0x58, 0x41, 0x59, 0x41, 0x5A, 0x41,\n\t0x5B, 0x41, 0x5C, 0x41, 0x5D, 0x41, 0x5E, 0x41,\n\t// Bytes 80 - bf\n\t0x5F, 0x41, 0x60, 0x41, 0x61, 0x41, 0x62, 0x41,\n\t0x63, 0x41, 0x64, 0x41, 0x65, 0x41, 0x66, 0x41,\n\t0x67, 0x41, 0x68, 0x41, 0x69, 0x41, 0x6A, 0x41,\n\t0x6B, 0x41, 0x6C, 0x41, 0x6D, 0x41, 0x6E, 0x41,\n\t0x6F, 0x41, 0x70, 0x41, 0x71, 0x41, 0x72, 0x41,\n\t0x73, 0x41, 0x74, 0x41, 0x75, 0x41, 0x76, 0x41,\n\t0x77, 0x41, 0x78, 0x41, 0x79, 0x41, 0x7A, 0x41,\n\t0x7B, 0x41, 0x7C, 0x41, 0x7D, 0x41, 0x7E, 0x42,\n\t// Bytes c0 - ff\n\t0xC2, 0xA2, 0x42, 0xC2, 0xA3, 0x42, 0xC2, 0xA5,\n\t0x42, 0xC2, 0xA6, 0x42, 0xC2, 0xAC, 0x42, 0xC2,\n\t0xB7, 0x42, 0xC3, 0x86, 0x42, 0xC3, 0xB0, 0x42,\n\t0xC4, 0xA6, 0x42, 0xC4, 0xA7, 0x42, 0xC4, 0xB1,\n\t0x42, 0xC5, 0x8B, 0x42, 0xC5, 0x93, 0x42, 0xC6,\n\t0x8E, 0x42, 0xC6, 0x90, 0x42, 0xC6, 0xAB, 0x42,\n\t0xC8, 0xA2, 0x42, 0xC8, 0xB7, 0x42, 0xC9, 0x90,\n\t0x42, 0xC9, 0x91, 0x42, 0xC9, 0x92, 0x42, 0xC9,\n\t// Bytes 100 - 13f\n\t0x94, 0x42, 0xC9, 0x95, 0x42, 0xC9, 0x99, 0x42,\n\t0xC9, 0x9B, 0x42, 0xC9, 0x9C, 0x42, 0xC9, 0x9F,\n\t0x42, 0xC9, 0xA1, 0x42, 0xC9, 0xA3, 0x42, 0xC9,\n\t0xA5, 0x42, 0xC9, 0xA6, 0x42, 0xC9, 0xA8, 0x42,\n\t0xC9, 0xA9, 0x42, 0xC9, 0xAA, 0x42, 0xC9, 0xAB,\n\t0x42, 0xC9, 0xAD, 0x42, 0xC9, 0xAF, 0x42, 0xC9,\n\t0xB0, 0x42, 0xC9, 0xB1, 0x42, 0xC9, 0xB2, 0x42,\n\t0xC9, 0xB3, 0x42, 0xC9, 0xB4, 0x42, 0xC9, 0xB5,\n\t// Bytes 140 - 17f\n\t0x42, 0xC9, 0xB8, 0x42, 0xC9, 0xB9, 0x42, 0xC9,\n\t0xBB, 0x42, 0xCA, 0x81, 0x42, 0xCA, 0x82, 0x42,\n\t0xCA, 0x83, 0x42, 0xCA, 0x89, 0x42, 0xCA, 0x8A,\n\t0x42, 0xCA, 0x8B, 0x42, 0xCA, 0x8C, 0x42, 0xCA,\n\t0x90, 0x42, 0xCA, 0x91, 0x42, 0xCA, 0x92, 0x42,\n\t0xCA, 0x95, 0x42, 0xCA, 0x9D, 0x42, 0xCA, 0x9F,\n\t0x42, 0xCA, 0xB9, 0x42, 0xCE, 0x91, 0x42, 0xCE,\n\t0x92, 0x42, 0xCE, 0x93, 0x42, 0xCE, 0x94, 0x42,\n\t// Bytes 180 - 1bf\n\t0xCE, 0x95, 0x42, 0xCE, 0x96, 0x42, 0xCE, 0x97,\n\t0x42, 0xCE, 0x98, 0x42, 0xCE, 0x99, 0x42, 0xCE,\n\t0x9A, 0x42, 0xCE, 0x9B, 0x42, 0xCE, 0x9C, 0x42,\n\t0xCE, 0x9D, 0x42, 0xCE, 0x9E, 0x42, 0xCE, 0x9F,\n\t0x42, 0xCE, 0xA0, 0x42, 0xCE, 0xA1, 0x42, 0xCE,\n\t0xA3, 0x42, 0xCE, 0xA4, 0x42, 0xCE, 0xA5, 0x42,\n\t0xCE, 0xA6, 0x42, 0xCE, 0xA7, 0x42, 0xCE, 0xA8,\n\t0x42, 0xCE, 0xA9, 0x42, 0xCE, 0xB1, 0x42, 0xCE,\n\t// Bytes 1c0 - 1ff\n\t0xB2, 0x42, 0xCE, 0xB3, 0x42, 0xCE, 0xB4, 0x42,\n\t0xCE, 0xB5, 0x42, 0xCE, 0xB6, 0x42, 0xCE, 0xB7,\n\t0x42, 0xCE, 0xB8, 0x42, 0xCE, 0xB9, 0x42, 0xCE,\n\t0xBA, 0x42, 0xCE, 0xBB, 0x42, 0xCE, 0xBC, 0x42,\n\t0xCE, 0xBD, 0x42, 0xCE, 0xBE, 0x42, 0xCE, 0xBF,\n\t0x42, 0xCF, 0x80, 0x42, 0xCF, 0x81, 0x42, 0xCF,\n\t0x82, 0x42, 0xCF, 0x83, 0x42, 0xCF, 0x84, 0x42,\n\t0xCF, 0x85, 0x42, 0xCF, 0x86, 0x42, 0xCF, 0x87,\n\t// Bytes 200 - 23f\n\t0x42, 0xCF, 0x88, 0x42, 0xCF, 0x89, 0x42, 0xCF,\n\t0x9C, 0x42, 0xCF, 0x9D, 0x42, 0xD0, 0xBD, 0x42,\n\t0xD1, 0x8A, 0x42, 0xD1, 0x8C, 0x42, 0xD7, 0x90,\n\t0x42, 0xD7, 0x91, 0x42, 0xD7, 0x92, 0x42, 0xD7,\n\t0x93, 0x42, 0xD7, 0x94, 0x42, 0xD7, 0x9B, 0x42,\n\t0xD7, 0x9C, 0x42, 0xD7, 0x9D, 0x42, 0xD7, 0xA2,\n\t0x42, 0xD7, 0xA8, 0x42, 0xD7, 0xAA, 0x42, 0xD8,\n\t0xA1, 0x42, 0xD8, 0xA7, 0x42, 0xD8, 0xA8, 0x42,\n\t// Bytes 240 - 27f\n\t0xD8, 0xA9, 0x42, 0xD8, 0xAA, 0x42, 0xD8, 0xAB,\n\t0x42, 0xD8, 0xAC, 0x42, 0xD8, 0xAD, 0x42, 0xD8,\n\t0xAE, 0x42, 0xD8, 0xAF, 0x42, 0xD8, 0xB0, 0x42,\n\t0xD8, 0xB1, 0x42, 0xD8, 0xB2, 0x42, 0xD8, 0xB3,\n\t0x42, 0xD8, 0xB4, 0x42, 0xD8, 0xB5, 0x42, 0xD8,\n\t0xB6, 0x42, 0xD8, 0xB7, 0x42, 0xD8, 0xB8, 0x42,\n\t0xD8, 0xB9, 0x42, 0xD8, 0xBA, 0x42, 0xD9, 0x81,\n\t0x42, 0xD9, 0x82, 0x42, 0xD9, 0x83, 0x42, 0xD9,\n\t// Bytes 280 - 2bf\n\t0x84, 0x42, 0xD9, 0x85, 0x42, 0xD9, 0x86, 0x42,\n\t0xD9, 0x87, 0x42, 0xD9, 0x88, 0x42, 0xD9, 0x89,\n\t0x42, 0xD9, 0x8A, 0x42, 0xD9, 0xAE, 0x42, 0xD9,\n\t0xAF, 0x42, 0xD9, 0xB1, 0x42, 0xD9, 0xB9, 0x42,\n\t0xD9, 0xBA, 0x42, 0xD9, 0xBB, 0x42, 0xD9, 0xBE,\n\t0x42, 0xD9, 0xBF, 0x42, 0xDA, 0x80, 0x42, 0xDA,\n\t0x83, 0x42, 0xDA, 0x84, 0x42, 0xDA, 0x86, 0x42,\n\t0xDA, 0x87, 0x42, 0xDA, 0x88, 0x42, 0xDA, 0x8C,\n\t// Bytes 2c0 - 2ff\n\t0x42, 0xDA, 0x8D, 0x42, 0xDA, 0x8E, 0x42, 0xDA,\n\t0x91, 0x42, 0xDA, 0x98, 0x42, 0xDA, 0xA1, 0x42,\n\t0xDA, 0xA4, 0x42, 0xDA, 0xA6, 0x42, 0xDA, 0xA9,\n\t0x42, 0xDA, 0xAD, 0x42, 0xDA, 0xAF, 0x42, 0xDA,\n\t0xB1, 0x42, 0xDA, 0xB3, 0x42, 0xDA, 0xBA, 0x42,\n\t0xDA, 0xBB, 0x42, 0xDA, 0xBE, 0x42, 0xDB, 0x81,\n\t0x42, 0xDB, 0x85, 0x42, 0xDB, 0x86, 0x42, 0xDB,\n\t0x87, 0x42, 0xDB, 0x88, 0x42, 0xDB, 0x89, 0x42,\n\t// Bytes 300 - 33f\n\t0xDB, 0x8B, 0x42, 0xDB, 0x8C, 0x42, 0xDB, 0x90,\n\t0x42, 0xDB, 0x92, 0x43, 0xE0, 0xBC, 0x8B, 0x43,\n\t0xE1, 0x83, 0x9C, 0x43, 0xE1, 0x84, 0x80, 0x43,\n\t0xE1, 0x84, 0x81, 0x43, 0xE1, 0x84, 0x82, 0x43,\n\t0xE1, 0x84, 0x83, 0x43, 0xE1, 0x84, 0x84, 0x43,\n\t0xE1, 0x84, 0x85, 0x43, 0xE1, 0x84, 0x86, 0x43,\n\t0xE1, 0x84, 0x87, 0x43, 0xE1, 0x84, 0x88, 0x43,\n\t0xE1, 0x84, 0x89, 0x43, 0xE1, 0x84, 0x8A, 0x43,\n\t// Bytes 340 - 37f\n\t0xE1, 0x84, 0x8B, 0x43, 0xE1, 0x84, 0x8C, 0x43,\n\t0xE1, 0x84, 0x8D, 0x43, 0xE1, 0x84, 0x8E, 0x43,\n\t0xE1, 0x84, 0x8F, 0x43, 0xE1, 0x84, 0x90, 0x43,\n\t0xE1, 0x84, 0x91, 0x43, 0xE1, 0x84, 0x92, 0x43,\n\t0xE1, 0x84, 0x94, 0x43, 0xE1, 0x84, 0x95, 0x43,\n\t0xE1, 0x84, 0x9A, 0x43, 0xE1, 0x84, 0x9C, 0x43,\n\t0xE1, 0x84, 0x9D, 0x43, 0xE1, 0x84, 0x9E, 0x43,\n\t0xE1, 0x84, 0xA0, 0x43, 0xE1, 0x84, 0xA1, 0x43,\n\t// Bytes 380 - 3bf\n\t0xE1, 0x84, 0xA2, 0x43, 0xE1, 0x84, 0xA3, 0x43,\n\t0xE1, 0x84, 0xA7, 0x43, 0xE1, 0x84, 0xA9, 0x43,\n\t0xE1, 0x84, 0xAB, 0x43, 0xE1, 0x84, 0xAC, 0x43,\n\t0xE1, 0x84, 0xAD, 0x43, 0xE1, 0x84, 0xAE, 0x43,\n\t0xE1, 0x84, 0xAF, 0x43, 0xE1, 0x84, 0xB2, 0x43,\n\t0xE1, 0x84, 0xB6, 0x43, 0xE1, 0x85, 0x80, 0x43,\n\t0xE1, 0x85, 0x87, 0x43, 0xE1, 0x85, 0x8C, 0x43,\n\t0xE1, 0x85, 0x97, 0x43, 0xE1, 0x85, 0x98, 0x43,\n\t// Bytes 3c0 - 3ff\n\t0xE1, 0x85, 0x99, 0x43, 0xE1, 0x85, 0xA0, 0x43,\n\t0xE1, 0x86, 0x84, 0x43, 0xE1, 0x86, 0x85, 0x43,\n\t0xE1, 0x86, 0x88, 0x43, 0xE1, 0x86, 0x91, 0x43,\n\t0xE1, 0x86, 0x92, 0x43, 0xE1, 0x86, 0x94, 0x43,\n\t0xE1, 0x86, 0x9E, 0x43, 0xE1, 0x86, 0xA1, 0x43,\n\t0xE1, 0x87, 0x87, 0x43, 0xE1, 0x87, 0x88, 0x43,\n\t0xE1, 0x87, 0x8C, 0x43, 0xE1, 0x87, 0x8E, 0x43,\n\t0xE1, 0x87, 0x93, 0x43, 0xE1, 0x87, 0x97, 0x43,\n\t// Bytes 400 - 43f\n\t0xE1, 0x87, 0x99, 0x43, 0xE1, 0x87, 0x9D, 0x43,\n\t0xE1, 0x87, 0x9F, 0x43, 0xE1, 0x87, 0xB1, 0x43,\n\t0xE1, 0x87, 0xB2, 0x43, 0xE1, 0xB4, 0x82, 0x43,\n\t0xE1, 0xB4, 0x96, 0x43, 0xE1, 0xB4, 0x97, 0x43,\n\t0xE1, 0xB4, 0x9C, 0x43, 0xE1, 0xB4, 0x9D, 0x43,\n\t0xE1, 0xB4, 0xA5, 0x43, 0xE1, 0xB5, 0xBB, 0x43,\n\t0xE1, 0xB6, 0x85, 0x43, 0xE2, 0x80, 0x82, 0x43,\n\t0xE2, 0x80, 0x83, 0x43, 0xE2, 0x80, 0x90, 0x43,\n\t// Bytes 440 - 47f\n\t0xE2, 0x80, 0x93, 0x43, 0xE2, 0x80, 0x94, 0x43,\n\t0xE2, 0x82, 0xA9, 0x43, 0xE2, 0x86, 0x90, 0x43,\n\t0xE2, 0x86, 0x91, 0x43, 0xE2, 0x86, 0x92, 0x43,\n\t0xE2, 0x86, 0x93, 0x43, 0xE2, 0x88, 0x82, 0x43,\n\t0xE2, 0x88, 0x87, 0x43, 0xE2, 0x88, 0x91, 0x43,\n\t0xE2, 0x88, 0x92, 0x43, 0xE2, 0x94, 0x82, 0x43,\n\t0xE2, 0x96, 0xA0, 0x43, 0xE2, 0x97, 0x8B, 0x43,\n\t0xE2, 0xA6, 0x85, 0x43, 0xE2, 0xA6, 0x86, 0x43,\n\t// Bytes 480 - 4bf\n\t0xE2, 0xB5, 0xA1, 0x43, 0xE3, 0x80, 0x81, 0x43,\n\t0xE3, 0x80, 0x82, 0x43, 0xE3, 0x80, 0x88, 0x43,\n\t0xE3, 0x80, 0x89, 0x43, 0xE3, 0x80, 0x8A, 0x43,\n\t0xE3, 0x80, 0x8B, 0x43, 0xE3, 0x80, 0x8C, 0x43,\n\t0xE3, 0x80, 0x8D, 0x43, 0xE3, 0x80, 0x8E, 0x43,\n\t0xE3, 0x80, 0x8F, 0x43, 0xE3, 0x80, 0x90, 0x43,\n\t0xE3, 0x80, 0x91, 0x43, 0xE3, 0x80, 0x92, 0x43,\n\t0xE3, 0x80, 0x94, 0x43, 0xE3, 0x80, 0x95, 0x43,\n\t// Bytes 4c0 - 4ff\n\t0xE3, 0x80, 0x96, 0x43, 0xE3, 0x80, 0x97, 0x43,\n\t0xE3, 0x82, 0xA1, 0x43, 0xE3, 0x82, 0xA2, 0x43,\n\t0xE3, 0x82, 0xA3, 0x43, 0xE3, 0x82, 0xA4, 0x43,\n\t0xE3, 0x82, 0xA5, 0x43, 0xE3, 0x82, 0xA6, 0x43,\n\t0xE3, 0x82, 0xA7, 0x43, 0xE3, 0x82, 0xA8, 0x43,\n\t0xE3, 0x82, 0xA9, 0x43, 0xE3, 0x82, 0xAA, 0x43,\n\t0xE3, 0x82, 0xAB, 0x43, 0xE3, 0x82, 0xAD, 0x43,\n\t0xE3, 0x82, 0xAF, 0x43, 0xE3, 0x82, 0xB1, 0x43,\n\t// Bytes 500 - 53f\n\t0xE3, 0x82, 0xB3, 0x43, 0xE3, 0x82, 0xB5, 0x43,\n\t0xE3, 0x82, 0xB7, 0x43, 0xE3, 0x82, 0xB9, 0x43,\n\t0xE3, 0x82, 0xBB, 0x43, 0xE3, 0x82, 0xBD, 0x43,\n\t0xE3, 0x82, 0xBF, 0x43, 0xE3, 0x83, 0x81, 0x43,\n\t0xE3, 0x83, 0x83, 0x43, 0xE3, 0x83, 0x84, 0x43,\n\t0xE3, 0x83, 0x86, 0x43, 0xE3, 0x83, 0x88, 0x43,\n\t0xE3, 0x83, 0x8A, 0x43, 0xE3, 0x83, 0x8B, 0x43,\n\t0xE3, 0x83, 0x8C, 0x43, 0xE3, 0x83, 0x8D, 0x43,\n\t// Bytes 540 - 57f\n\t0xE3, 0x83, 0x8E, 0x43, 0xE3, 0x83, 0x8F, 0x43,\n\t0xE3, 0x83, 0x92, 0x43, 0xE3, 0x83, 0x95, 0x43,\n\t0xE3, 0x83, 0x98, 0x43, 0xE3, 0x83, 0x9B, 0x43,\n\t0xE3, 0x83, 0x9E, 0x43, 0xE3, 0x83, 0x9F, 0x43,\n\t0xE3, 0x83, 0xA0, 0x43, 0xE3, 0x83, 0xA1, 0x43,\n\t0xE3, 0x83, 0xA2, 0x43, 0xE3, 0x83, 0xA3, 0x43,\n\t0xE3, 0x83, 0xA4, 0x43, 0xE3, 0x83, 0xA5, 0x43,\n\t0xE3, 0x83, 0xA6, 0x43, 0xE3, 0x83, 0xA7, 0x43,\n\t// Bytes 580 - 5bf\n\t0xE3, 0x83, 0xA8, 0x43, 0xE3, 0x83, 0xA9, 0x43,\n\t0xE3, 0x83, 0xAA, 0x43, 0xE3, 0x83, 0xAB, 0x43,\n\t0xE3, 0x83, 0xAC, 0x43, 0xE3, 0x83, 0xAD, 0x43,\n\t0xE3, 0x83, 0xAF, 0x43, 0xE3, 0x83, 0xB0, 0x43,\n\t0xE3, 0x83, 0xB1, 0x43, 0xE3, 0x83, 0xB2, 0x43,\n\t0xE3, 0x83, 0xB3, 0x43, 0xE3, 0x83, 0xBB, 0x43,\n\t0xE3, 0x83, 0xBC, 0x43, 0xE3, 0x92, 0x9E, 0x43,\n\t0xE3, 0x92, 0xB9, 0x43, 0xE3, 0x92, 0xBB, 0x43,\n\t// Bytes 5c0 - 5ff\n\t0xE3, 0x93, 0x9F, 0x43, 0xE3, 0x94, 0x95, 0x43,\n\t0xE3, 0x9B, 0xAE, 0x43, 0xE3, 0x9B, 0xBC, 0x43,\n\t0xE3, 0x9E, 0x81, 0x43, 0xE3, 0xA0, 0xAF, 0x43,\n\t0xE3, 0xA1, 0xA2, 0x43, 0xE3, 0xA1, 0xBC, 0x43,\n\t0xE3, 0xA3, 0x87, 0x43, 0xE3, 0xA3, 0xA3, 0x43,\n\t0xE3, 0xA4, 0x9C, 0x43, 0xE3, 0xA4, 0xBA, 0x43,\n\t0xE3, 0xA8, 0xAE, 0x43, 0xE3, 0xA9, 0xAC, 0x43,\n\t0xE3, 0xAB, 0xA4, 0x43, 0xE3, 0xAC, 0x88, 0x43,\n\t// Bytes 600 - 63f\n\t0xE3, 0xAC, 0x99, 0x43, 0xE3, 0xAD, 0x89, 0x43,\n\t0xE3, 0xAE, 0x9D, 0x43, 0xE3, 0xB0, 0x98, 0x43,\n\t0xE3, 0xB1, 0x8E, 0x43, 0xE3, 0xB4, 0xB3, 0x43,\n\t0xE3, 0xB6, 0x96, 0x43, 0xE3, 0xBA, 0xAC, 0x43,\n\t0xE3, 0xBA, 0xB8, 0x43, 0xE3, 0xBC, 0x9B, 0x43,\n\t0xE3, 0xBF, 0xBC, 0x43, 0xE4, 0x80, 0x88, 0x43,\n\t0xE4, 0x80, 0x98, 0x43, 0xE4, 0x80, 0xB9, 0x43,\n\t0xE4, 0x81, 0x86, 0x43, 0xE4, 0x82, 0x96, 0x43,\n\t// Bytes 640 - 67f\n\t0xE4, 0x83, 0xA3, 0x43, 0xE4, 0x84, 0xAF, 0x43,\n\t0xE4, 0x88, 0x82, 0x43, 0xE4, 0x88, 0xA7, 0x43,\n\t0xE4, 0x8A, 0xA0, 0x43, 0xE4, 0x8C, 0x81, 0x43,\n\t0xE4, 0x8C, 0xB4, 0x43, 0xE4, 0x8D, 0x99, 0x43,\n\t0xE4, 0x8F, 0x95, 0x43, 0xE4, 0x8F, 0x99, 0x43,\n\t0xE4, 0x90, 0x8B, 0x43, 0xE4, 0x91, 0xAB, 0x43,\n\t0xE4, 0x94, 0xAB, 0x43, 0xE4, 0x95, 0x9D, 0x43,\n\t0xE4, 0x95, 0xA1, 0x43, 0xE4, 0x95, 0xAB, 0x43,\n\t// Bytes 680 - 6bf\n\t0xE4, 0x97, 0x97, 0x43, 0xE4, 0x97, 0xB9, 0x43,\n\t0xE4, 0x98, 0xB5, 0x43, 0xE4, 0x9A, 0xBE, 0x43,\n\t0xE4, 0x9B, 0x87, 0x43, 0xE4, 0xA6, 0x95, 0x43,\n\t0xE4, 0xA7, 0xA6, 0x43, 0xE4, 0xA9, 0xAE, 0x43,\n\t0xE4, 0xA9, 0xB6, 0x43, 0xE4, 0xAA, 0xB2, 0x43,\n\t0xE4, 0xAC, 0xB3, 0x43, 0xE4, 0xAF, 0x8E, 0x43,\n\t0xE4, 0xB3, 0x8E, 0x43, 0xE4, 0xB3, 0xAD, 0x43,\n\t0xE4, 0xB3, 0xB8, 0x43, 0xE4, 0xB5, 0x96, 0x43,\n\t// Bytes 6c0 - 6ff\n\t0xE4, 0xB8, 0x80, 0x43, 0xE4, 0xB8, 0x81, 0x43,\n\t0xE4, 0xB8, 0x83, 0x43, 0xE4, 0xB8, 0x89, 0x43,\n\t0xE4, 0xB8, 0x8A, 0x43, 0xE4, 0xB8, 0x8B, 0x43,\n\t0xE4, 0xB8, 0x8D, 0x43, 0xE4, 0xB8, 0x99, 0x43,\n\t0xE4, 0xB8, 0xA6, 0x43, 0xE4, 0xB8, 0xA8, 0x43,\n\t0xE4, 0xB8, 0xAD, 0x43, 0xE4, 0xB8, 0xB2, 0x43,\n\t0xE4, 0xB8, 0xB6, 0x43, 0xE4, 0xB8, 0xB8, 0x43,\n\t0xE4, 0xB8, 0xB9, 0x43, 0xE4, 0xB8, 0xBD, 0x43,\n\t// Bytes 700 - 73f\n\t0xE4, 0xB8, 0xBF, 0x43, 0xE4, 0xB9, 0x81, 0x43,\n\t0xE4, 0xB9, 0x99, 0x43, 0xE4, 0xB9, 0x9D, 0x43,\n\t0xE4, 0xBA, 0x82, 0x43, 0xE4, 0xBA, 0x85, 0x43,\n\t0xE4, 0xBA, 0x86, 0x43, 0xE4, 0xBA, 0x8C, 0x43,\n\t0xE4, 0xBA, 0x94, 0x43, 0xE4, 0xBA, 0xA0, 0x43,\n\t0xE4, 0xBA, 0xA4, 0x43, 0xE4, 0xBA, 0xAE, 0x43,\n\t0xE4, 0xBA, 0xBA, 0x43, 0xE4, 0xBB, 0x80, 0x43,\n\t0xE4, 0xBB, 0x8C, 0x43, 0xE4, 0xBB, 0xA4, 0x43,\n\t// Bytes 740 - 77f\n\t0xE4, 0xBC, 0x81, 0x43, 0xE4, 0xBC, 0x91, 0x43,\n\t0xE4, 0xBD, 0xA0, 0x43, 0xE4, 0xBE, 0x80, 0x43,\n\t0xE4, 0xBE, 0x86, 0x43, 0xE4, 0xBE, 0x8B, 0x43,\n\t0xE4, 0xBE, 0xAE, 0x43, 0xE4, 0xBE, 0xBB, 0x43,\n\t0xE4, 0xBE, 0xBF, 0x43, 0xE5, 0x80, 0x82, 0x43,\n\t0xE5, 0x80, 0xAB, 0x43, 0xE5, 0x81, 0xBA, 0x43,\n\t0xE5, 0x82, 0x99, 0x43, 0xE5, 0x83, 0x8F, 0x43,\n\t0xE5, 0x83, 0x9A, 0x43, 0xE5, 0x83, 0xA7, 0x43,\n\t// Bytes 780 - 7bf\n\t0xE5, 0x84, 0xAA, 0x43, 0xE5, 0x84, 0xBF, 0x43,\n\t0xE5, 0x85, 0x80, 0x43, 0xE5, 0x85, 0x85, 0x43,\n\t0xE5, 0x85, 0x8D, 0x43, 0xE5, 0x85, 0x94, 0x43,\n\t0xE5, 0x85, 0xA4, 0x43, 0xE5, 0x85, 0xA5, 0x43,\n\t0xE5, 0x85, 0xA7, 0x43, 0xE5, 0x85, 0xA8, 0x43,\n\t0xE5, 0x85, 0xA9, 0x43, 0xE5, 0x85, 0xAB, 0x43,\n\t0xE5, 0x85, 0xAD, 0x43, 0xE5, 0x85, 0xB7, 0x43,\n\t0xE5, 0x86, 0x80, 0x43, 0xE5, 0x86, 0x82, 0x43,\n\t// Bytes 7c0 - 7ff\n\t0xE5, 0x86, 0x8D, 0x43, 0xE5, 0x86, 0x92, 0x43,\n\t0xE5, 0x86, 0x95, 0x43, 0xE5, 0x86, 0x96, 0x43,\n\t0xE5, 0x86, 0x97, 0x43, 0xE5, 0x86, 0x99, 0x43,\n\t0xE5, 0x86, 0xA4, 0x43, 0xE5, 0x86, 0xAB, 0x43,\n\t0xE5, 0x86, 0xAC, 0x43, 0xE5, 0x86, 0xB5, 0x43,\n\t0xE5, 0x86, 0xB7, 0x43, 0xE5, 0x87, 0x89, 0x43,\n\t0xE5, 0x87, 0x8C, 0x43, 0xE5, 0x87, 0x9C, 0x43,\n\t0xE5, 0x87, 0x9E, 0x43, 0xE5, 0x87, 0xA0, 0x43,\n\t// Bytes 800 - 83f\n\t0xE5, 0x87, 0xB5, 0x43, 0xE5, 0x88, 0x80, 0x43,\n\t0xE5, 0x88, 0x83, 0x43, 0xE5, 0x88, 0x87, 0x43,\n\t0xE5, 0x88, 0x97, 0x43, 0xE5, 0x88, 0x9D, 0x43,\n\t0xE5, 0x88, 0xA9, 0x43, 0xE5, 0x88, 0xBA, 0x43,\n\t0xE5, 0x88, 0xBB, 0x43, 0xE5, 0x89, 0x86, 0x43,\n\t0xE5, 0x89, 0x8D, 0x43, 0xE5, 0x89, 0xB2, 0x43,\n\t0xE5, 0x89, 0xB7, 0x43, 0xE5, 0x8A, 0x89, 0x43,\n\t0xE5, 0x8A, 0x9B, 0x43, 0xE5, 0x8A, 0xA3, 0x43,\n\t// Bytes 840 - 87f\n\t0xE5, 0x8A, 0xB3, 0x43, 0xE5, 0x8A, 0xB4, 0x43,\n\t0xE5, 0x8B, 0x87, 0x43, 0xE5, 0x8B, 0x89, 0x43,\n\t0xE5, 0x8B, 0x92, 0x43, 0xE5, 0x8B, 0x9E, 0x43,\n\t0xE5, 0x8B, 0xA4, 0x43, 0xE5, 0x8B, 0xB5, 0x43,\n\t0xE5, 0x8B, 0xB9, 0x43, 0xE5, 0x8B, 0xBA, 0x43,\n\t0xE5, 0x8C, 0x85, 0x43, 0xE5, 0x8C, 0x86, 0x43,\n\t0xE5, 0x8C, 0x95, 0x43, 0xE5, 0x8C, 0x97, 0x43,\n\t0xE5, 0x8C, 0x9A, 0x43, 0xE5, 0x8C, 0xB8, 0x43,\n\t// Bytes 880 - 8bf\n\t0xE5, 0x8C, 0xBB, 0x43, 0xE5, 0x8C, 0xBF, 0x43,\n\t0xE5, 0x8D, 0x81, 0x43, 0xE5, 0x8D, 0x84, 0x43,\n\t0xE5, 0x8D, 0x85, 0x43, 0xE5, 0x8D, 0x89, 0x43,\n\t0xE5, 0x8D, 0x91, 0x43, 0xE5, 0x8D, 0x94, 0x43,\n\t0xE5, 0x8D, 0x9A, 0x43, 0xE5, 0x8D, 0x9C, 0x43,\n\t0xE5, 0x8D, 0xA9, 0x43, 0xE5, 0x8D, 0xB0, 0x43,\n\t0xE5, 0x8D, 0xB3, 0x43, 0xE5, 0x8D, 0xB5, 0x43,\n\t0xE5, 0x8D, 0xBD, 0x43, 0xE5, 0x8D, 0xBF, 0x43,\n\t// Bytes 8c0 - 8ff\n\t0xE5, 0x8E, 0x82, 0x43, 0xE5, 0x8E, 0xB6, 0x43,\n\t0xE5, 0x8F, 0x83, 0x43, 0xE5, 0x8F, 0x88, 0x43,\n\t0xE5, 0x8F, 0x8A, 0x43, 0xE5, 0x8F, 0x8C, 0x43,\n\t0xE5, 0x8F, 0x9F, 0x43, 0xE5, 0x8F, 0xA3, 0x43,\n\t0xE5, 0x8F, 0xA5, 0x43, 0xE5, 0x8F, 0xAB, 0x43,\n\t0xE5, 0x8F, 0xAF, 0x43, 0xE5, 0x8F, 0xB1, 0x43,\n\t0xE5, 0x8F, 0xB3, 0x43, 0xE5, 0x90, 0x86, 0x43,\n\t0xE5, 0x90, 0x88, 0x43, 0xE5, 0x90, 0x8D, 0x43,\n\t// Bytes 900 - 93f\n\t0xE5, 0x90, 0x8F, 0x43, 0xE5, 0x90, 0x9D, 0x43,\n\t0xE5, 0x90, 0xB8, 0x43, 0xE5, 0x90, 0xB9, 0x43,\n\t0xE5, 0x91, 0x82, 0x43, 0xE5, 0x91, 0x88, 0x43,\n\t0xE5, 0x91, 0xA8, 0x43, 0xE5, 0x92, 0x9E, 0x43,\n\t0xE5, 0x92, 0xA2, 0x43, 0xE5, 0x92, 0xBD, 0x43,\n\t0xE5, 0x93, 0xB6, 0x43, 0xE5, 0x94, 0x90, 0x43,\n\t0xE5, 0x95, 0x8F, 0x43, 0xE5, 0x95, 0x93, 0x43,\n\t0xE5, 0x95, 0x95, 0x43, 0xE5, 0x95, 0xA3, 0x43,\n\t// Bytes 940 - 97f\n\t0xE5, 0x96, 0x84, 0x43, 0xE5, 0x96, 0x87, 0x43,\n\t0xE5, 0x96, 0x99, 0x43, 0xE5, 0x96, 0x9D, 0x43,\n\t0xE5, 0x96, 0xAB, 0x43, 0xE5, 0x96, 0xB3, 0x43,\n\t0xE5, 0x96, 0xB6, 0x43, 0xE5, 0x97, 0x80, 0x43,\n\t0xE5, 0x97, 0x82, 0x43, 0xE5, 0x97, 0xA2, 0x43,\n\t0xE5, 0x98, 0x86, 0x43, 0xE5, 0x99, 0x91, 0x43,\n\t0xE5, 0x99, 0xA8, 0x43, 0xE5, 0x99, 0xB4, 0x43,\n\t0xE5, 0x9B, 0x97, 0x43, 0xE5, 0x9B, 0x9B, 0x43,\n\t// Bytes 980 - 9bf\n\t0xE5, 0x9B, 0xB9, 0x43, 0xE5, 0x9C, 0x96, 0x43,\n\t0xE5, 0x9C, 0x97, 0x43, 0xE5, 0x9C, 0x9F, 0x43,\n\t0xE5, 0x9C, 0xB0, 0x43, 0xE5, 0x9E, 0x8B, 0x43,\n\t0xE5, 0x9F, 0x8E, 0x43, 0xE5, 0x9F, 0xB4, 0x43,\n\t0xE5, 0xA0, 0x8D, 0x43, 0xE5, 0xA0, 0xB1, 0x43,\n\t0xE5, 0xA0, 0xB2, 0x43, 0xE5, 0xA1, 0x80, 0x43,\n\t0xE5, 0xA1, 0x9A, 0x43, 0xE5, 0xA1, 0x9E, 0x43,\n\t0xE5, 0xA2, 0xA8, 0x43, 0xE5, 0xA2, 0xAC, 0x43,\n\t// Bytes 9c0 - 9ff\n\t0xE5, 0xA2, 0xB3, 0x43, 0xE5, 0xA3, 0x98, 0x43,\n\t0xE5, 0xA3, 0x9F, 0x43, 0xE5, 0xA3, 0xAB, 0x43,\n\t0xE5, 0xA3, 0xAE, 0x43, 0xE5, 0xA3, 0xB0, 0x43,\n\t0xE5, 0xA3, 0xB2, 0x43, 0xE5, 0xA3, 0xB7, 0x43,\n\t0xE5, 0xA4, 0x82, 0x43, 0xE5, 0xA4, 0x86, 0x43,\n\t0xE5, 0xA4, 0x8A, 0x43, 0xE5, 0xA4, 0x95, 0x43,\n\t0xE5, 0xA4, 0x9A, 0x43, 0xE5, 0xA4, 0x9C, 0x43,\n\t0xE5, 0xA4, 0xA2, 0x43, 0xE5, 0xA4, 0xA7, 0x43,\n\t// Bytes a00 - a3f\n\t0xE5, 0xA4, 0xA9, 0x43, 0xE5, 0xA5, 0x84, 0x43,\n\t0xE5, 0xA5, 0x88, 0x43, 0xE5, 0xA5, 0x91, 0x43,\n\t0xE5, 0xA5, 0x94, 0x43, 0xE5, 0xA5, 0xA2, 0x43,\n\t0xE5, 0xA5, 0xB3, 0x43, 0xE5, 0xA7, 0x98, 0x43,\n\t0xE5, 0xA7, 0xAC, 0x43, 0xE5, 0xA8, 0x9B, 0x43,\n\t0xE5, 0xA8, 0xA7, 0x43, 0xE5, 0xA9, 0xA2, 0x43,\n\t0xE5, 0xA9, 0xA6, 0x43, 0xE5, 0xAA, 0xB5, 0x43,\n\t0xE5, 0xAC, 0x88, 0x43, 0xE5, 0xAC, 0xA8, 0x43,\n\t// Bytes a40 - a7f\n\t0xE5, 0xAC, 0xBE, 0x43, 0xE5, 0xAD, 0x90, 0x43,\n\t0xE5, 0xAD, 0x97, 0x43, 0xE5, 0xAD, 0xA6, 0x43,\n\t0xE5, 0xAE, 0x80, 0x43, 0xE5, 0xAE, 0x85, 0x43,\n\t0xE5, 0xAE, 0x97, 0x43, 0xE5, 0xAF, 0x83, 0x43,\n\t0xE5, 0xAF, 0x98, 0x43, 0xE5, 0xAF, 0xA7, 0x43,\n\t0xE5, 0xAF, 0xAE, 0x43, 0xE5, 0xAF, 0xB3, 0x43,\n\t0xE5, 0xAF, 0xB8, 0x43, 0xE5, 0xAF, 0xBF, 0x43,\n\t0xE5, 0xB0, 0x86, 0x43, 0xE5, 0xB0, 0x8F, 0x43,\n\t// Bytes a80 - abf\n\t0xE5, 0xB0, 0xA2, 0x43, 0xE5, 0xB0, 0xB8, 0x43,\n\t0xE5, 0xB0, 0xBF, 0x43, 0xE5, 0xB1, 0xA0, 0x43,\n\t0xE5, 0xB1, 0xA2, 0x43, 0xE5, 0xB1, 0xA4, 0x43,\n\t0xE5, 0xB1, 0xA5, 0x43, 0xE5, 0xB1, 0xAE, 0x43,\n\t0xE5, 0xB1, 0xB1, 0x43, 0xE5, 0xB2, 0x8D, 0x43,\n\t0xE5, 0xB3, 0x80, 0x43, 0xE5, 0xB4, 0x99, 0x43,\n\t0xE5, 0xB5, 0x83, 0x43, 0xE5, 0xB5, 0x90, 0x43,\n\t0xE5, 0xB5, 0xAB, 0x43, 0xE5, 0xB5, 0xAE, 0x43,\n\t// Bytes ac0 - aff\n\t0xE5, 0xB5, 0xBC, 0x43, 0xE5, 0xB6, 0xB2, 0x43,\n\t0xE5, 0xB6, 0xBA, 0x43, 0xE5, 0xB7, 0x9B, 0x43,\n\t0xE5, 0xB7, 0xA1, 0x43, 0xE5, 0xB7, 0xA2, 0x43,\n\t0xE5, 0xB7, 0xA5, 0x43, 0xE5, 0xB7, 0xA6, 0x43,\n\t0xE5, 0xB7, 0xB1, 0x43, 0xE5, 0xB7, 0xBD, 0x43,\n\t0xE5, 0xB7, 0xBE, 0x43, 0xE5, 0xB8, 0xA8, 0x43,\n\t0xE5, 0xB8, 0xBD, 0x43, 0xE5, 0xB9, 0xA9, 0x43,\n\t0xE5, 0xB9, 0xB2, 0x43, 0xE5, 0xB9, 0xB4, 0x43,\n\t// Bytes b00 - b3f\n\t0xE5, 0xB9, 0xBA, 0x43, 0xE5, 0xB9, 0xBC, 0x43,\n\t0xE5, 0xB9, 0xBF, 0x43, 0xE5, 0xBA, 0xA6, 0x43,\n\t0xE5, 0xBA, 0xB0, 0x43, 0xE5, 0xBA, 0xB3, 0x43,\n\t0xE5, 0xBA, 0xB6, 0x43, 0xE5, 0xBB, 0x89, 0x43,\n\t0xE5, 0xBB, 0x8A, 0x43, 0xE5, 0xBB, 0x92, 0x43,\n\t0xE5, 0xBB, 0x93, 0x43, 0xE5, 0xBB, 0x99, 0x43,\n\t0xE5, 0xBB, 0xAC, 0x43, 0xE5, 0xBB, 0xB4, 0x43,\n\t0xE5, 0xBB, 0xBE, 0x43, 0xE5, 0xBC, 0x84, 0x43,\n\t// Bytes b40 - b7f\n\t0xE5, 0xBC, 0x8B, 0x43, 0xE5, 0xBC, 0x93, 0x43,\n\t0xE5, 0xBC, 0xA2, 0x43, 0xE5, 0xBD, 0x90, 0x43,\n\t0xE5, 0xBD, 0x93, 0x43, 0xE5, 0xBD, 0xA1, 0x43,\n\t0xE5, 0xBD, 0xA2, 0x43, 0xE5, 0xBD, 0xA9, 0x43,\n\t0xE5, 0xBD, 0xAB, 0x43, 0xE5, 0xBD, 0xB3, 0x43,\n\t0xE5, 0xBE, 0x8B, 0x43, 0xE5, 0xBE, 0x8C, 0x43,\n\t0xE5, 0xBE, 0x97, 0x43, 0xE5, 0xBE, 0x9A, 0x43,\n\t0xE5, 0xBE, 0xA9, 0x43, 0xE5, 0xBE, 0xAD, 0x43,\n\t// Bytes b80 - bbf\n\t0xE5, 0xBF, 0x83, 0x43, 0xE5, 0xBF, 0x8D, 0x43,\n\t0xE5, 0xBF, 0x97, 0x43, 0xE5, 0xBF, 0xB5, 0x43,\n\t0xE5, 0xBF, 0xB9, 0x43, 0xE6, 0x80, 0x92, 0x43,\n\t0xE6, 0x80, 0x9C, 0x43, 0xE6, 0x81, 0xB5, 0x43,\n\t0xE6, 0x82, 0x81, 0x43, 0xE6, 0x82, 0x94, 0x43,\n\t0xE6, 0x83, 0x87, 0x43, 0xE6, 0x83, 0x98, 0x43,\n\t0xE6, 0x83, 0xA1, 0x43, 0xE6, 0x84, 0x88, 0x43,\n\t0xE6, 0x85, 0x84, 0x43, 0xE6, 0x85, 0x88, 0x43,\n\t// Bytes bc0 - bff\n\t0xE6, 0x85, 0x8C, 0x43, 0xE6, 0x85, 0x8E, 0x43,\n\t0xE6, 0x85, 0xA0, 0x43, 0xE6, 0x85, 0xA8, 0x43,\n\t0xE6, 0x85, 0xBA, 0x43, 0xE6, 0x86, 0x8E, 0x43,\n\t0xE6, 0x86, 0x90, 0x43, 0xE6, 0x86, 0xA4, 0x43,\n\t0xE6, 0x86, 0xAF, 0x43, 0xE6, 0x86, 0xB2, 0x43,\n\t0xE6, 0x87, 0x9E, 0x43, 0xE6, 0x87, 0xB2, 0x43,\n\t0xE6, 0x87, 0xB6, 0x43, 0xE6, 0x88, 0x80, 0x43,\n\t0xE6, 0x88, 0x88, 0x43, 0xE6, 0x88, 0x90, 0x43,\n\t// Bytes c00 - c3f\n\t0xE6, 0x88, 0x9B, 0x43, 0xE6, 0x88, 0xAE, 0x43,\n\t0xE6, 0x88, 0xB4, 0x43, 0xE6, 0x88, 0xB6, 0x43,\n\t0xE6, 0x89, 0x8B, 0x43, 0xE6, 0x89, 0x93, 0x43,\n\t0xE6, 0x89, 0x9D, 0x43, 0xE6, 0x8A, 0x95, 0x43,\n\t0xE6, 0x8A, 0xB1, 0x43, 0xE6, 0x8B, 0x89, 0x43,\n\t0xE6, 0x8B, 0x8F, 0x43, 0xE6, 0x8B, 0x93, 0x43,\n\t0xE6, 0x8B, 0x94, 0x43, 0xE6, 0x8B, 0xBC, 0x43,\n\t0xE6, 0x8B, 0xBE, 0x43, 0xE6, 0x8C, 0x87, 0x43,\n\t// Bytes c40 - c7f\n\t0xE6, 0x8C, 0xBD, 0x43, 0xE6, 0x8D, 0x90, 0x43,\n\t0xE6, 0x8D, 0x95, 0x43, 0xE6, 0x8D, 0xA8, 0x43,\n\t0xE6, 0x8D, 0xBB, 0x43, 0xE6, 0x8E, 0x83, 0x43,\n\t0xE6, 0x8E, 0xA0, 0x43, 0xE6, 0x8E, 0xA9, 0x43,\n\t0xE6, 0x8F, 0x84, 0x43, 0xE6, 0x8F, 0x85, 0x43,\n\t0xE6, 0x8F, 0xA4, 0x43, 0xE6, 0x90, 0x9C, 0x43,\n\t0xE6, 0x90, 0xA2, 0x43, 0xE6, 0x91, 0x92, 0x43,\n\t0xE6, 0x91, 0xA9, 0x43, 0xE6, 0x91, 0xB7, 0x43,\n\t// Bytes c80 - cbf\n\t0xE6, 0x91, 0xBE, 0x43, 0xE6, 0x92, 0x9A, 0x43,\n\t0xE6, 0x92, 0x9D, 0x43, 0xE6, 0x93, 0x84, 0x43,\n\t0xE6, 0x94, 0xAF, 0x43, 0xE6, 0x94, 0xB4, 0x43,\n\t0xE6, 0x95, 0x8F, 0x43, 0xE6, 0x95, 0x96, 0x43,\n\t0xE6, 0x95, 0xAC, 0x43, 0xE6, 0x95, 0xB8, 0x43,\n\t0xE6, 0x96, 0x87, 0x43, 0xE6, 0x96, 0x97, 0x43,\n\t0xE6, 0x96, 0x99, 0x43, 0xE6, 0x96, 0xA4, 0x43,\n\t0xE6, 0x96, 0xB0, 0x43, 0xE6, 0x96, 0xB9, 0x43,\n\t// Bytes cc0 - cff\n\t0xE6, 0x97, 0x85, 0x43, 0xE6, 0x97, 0xA0, 0x43,\n\t0xE6, 0x97, 0xA2, 0x43, 0xE6, 0x97, 0xA3, 0x43,\n\t0xE6, 0x97, 0xA5, 0x43, 0xE6, 0x98, 0x93, 0x43,\n\t0xE6, 0x98, 0xA0, 0x43, 0xE6, 0x99, 0x89, 0x43,\n\t0xE6, 0x99, 0xB4, 0x43, 0xE6, 0x9A, 0x88, 0x43,\n\t0xE6, 0x9A, 0x91, 0x43, 0xE6, 0x9A, 0x9C, 0x43,\n\t0xE6, 0x9A, 0xB4, 0x43, 0xE6, 0x9B, 0x86, 0x43,\n\t0xE6, 0x9B, 0xB0, 0x43, 0xE6, 0x9B, 0xB4, 0x43,\n\t// Bytes d00 - d3f\n\t0xE6, 0x9B, 0xB8, 0x43, 0xE6, 0x9C, 0x80, 0x43,\n\t0xE6, 0x9C, 0x88, 0x43, 0xE6, 0x9C, 0x89, 0x43,\n\t0xE6, 0x9C, 0x97, 0x43, 0xE6, 0x9C, 0x9B, 0x43,\n\t0xE6, 0x9C, 0xA1, 0x43, 0xE6, 0x9C, 0xA8, 0x43,\n\t0xE6, 0x9D, 0x8E, 0x43, 0xE6, 0x9D, 0x93, 0x43,\n\t0xE6, 0x9D, 0x96, 0x43, 0xE6, 0x9D, 0x9E, 0x43,\n\t0xE6, 0x9D, 0xBB, 0x43, 0xE6, 0x9E, 0x85, 0x43,\n\t0xE6, 0x9E, 0x97, 0x43, 0xE6, 0x9F, 0xB3, 0x43,\n\t// Bytes d40 - d7f\n\t0xE6, 0x9F, 0xBA, 0x43, 0xE6, 0xA0, 0x97, 0x43,\n\t0xE6, 0xA0, 0x9F, 0x43, 0xE6, 0xA0, 0xAA, 0x43,\n\t0xE6, 0xA1, 0x92, 0x43, 0xE6, 0xA2, 0x81, 0x43,\n\t0xE6, 0xA2, 0x85, 0x43, 0xE6, 0xA2, 0x8E, 0x43,\n\t0xE6, 0xA2, 0xA8, 0x43, 0xE6, 0xA4, 0x94, 0x43,\n\t0xE6, 0xA5, 0x82, 0x43, 0xE6, 0xA6, 0xA3, 0x43,\n\t0xE6, 0xA7, 0xAA, 0x43, 0xE6, 0xA8, 0x82, 0x43,\n\t0xE6, 0xA8, 0x93, 0x43, 0xE6, 0xAA, 0xA8, 0x43,\n\t// Bytes d80 - dbf\n\t0xE6, 0xAB, 0x93, 0x43, 0xE6, 0xAB, 0x9B, 0x43,\n\t0xE6, 0xAC, 0x84, 0x43, 0xE6, 0xAC, 0xA0, 0x43,\n\t0xE6, 0xAC, 0xA1, 0x43, 0xE6, 0xAD, 0x94, 0x43,\n\t0xE6, 0xAD, 0xA2, 0x43, 0xE6, 0xAD, 0xA3, 0x43,\n\t0xE6, 0xAD, 0xB2, 0x43, 0xE6, 0xAD, 0xB7, 0x43,\n\t0xE6, 0xAD, 0xB9, 0x43, 0xE6, 0xAE, 0x9F, 0x43,\n\t0xE6, 0xAE, 0xAE, 0x43, 0xE6, 0xAE, 0xB3, 0x43,\n\t0xE6, 0xAE, 0xBA, 0x43, 0xE6, 0xAE, 0xBB, 0x43,\n\t// Bytes dc0 - dff\n\t0xE6, 0xAF, 0x8B, 0x43, 0xE6, 0xAF, 0x8D, 0x43,\n\t0xE6, 0xAF, 0x94, 0x43, 0xE6, 0xAF, 0x9B, 0x43,\n\t0xE6, 0xB0, 0x8F, 0x43, 0xE6, 0xB0, 0x94, 0x43,\n\t0xE6, 0xB0, 0xB4, 0x43, 0xE6, 0xB1, 0x8E, 0x43,\n\t0xE6, 0xB1, 0xA7, 0x43, 0xE6, 0xB2, 0x88, 0x43,\n\t0xE6, 0xB2, 0xBF, 0x43, 0xE6, 0xB3, 0x8C, 0x43,\n\t0xE6, 0xB3, 0x8D, 0x43, 0xE6, 0xB3, 0xA5, 0x43,\n\t0xE6, 0xB3, 0xA8, 0x43, 0xE6, 0xB4, 0x96, 0x43,\n\t// Bytes e00 - e3f\n\t0xE6, 0xB4, 0x9B, 0x43, 0xE6, 0xB4, 0x9E, 0x43,\n\t0xE6, 0xB4, 0xB4, 0x43, 0xE6, 0xB4, 0xBE, 0x43,\n\t0xE6, 0xB5, 0x81, 0x43, 0xE6, 0xB5, 0xA9, 0x43,\n\t0xE6, 0xB5, 0xAA, 0x43, 0xE6, 0xB5, 0xB7, 0x43,\n\t0xE6, 0xB5, 0xB8, 0x43, 0xE6, 0xB6, 0x85, 0x43,\n\t0xE6, 0xB7, 0x8B, 0x43, 0xE6, 0xB7, 0x9A, 0x43,\n\t0xE6, 0xB7, 0xAA, 0x43, 0xE6, 0xB7, 0xB9, 0x43,\n\t0xE6, 0xB8, 0x9A, 0x43, 0xE6, 0xB8, 0xAF, 0x43,\n\t// Bytes e40 - e7f\n\t0xE6, 0xB9, 0xAE, 0x43, 0xE6, 0xBA, 0x80, 0x43,\n\t0xE6, 0xBA, 0x9C, 0x43, 0xE6, 0xBA, 0xBA, 0x43,\n\t0xE6, 0xBB, 0x87, 0x43, 0xE6, 0xBB, 0x8B, 0x43,\n\t0xE6, 0xBB, 0x91, 0x43, 0xE6, 0xBB, 0x9B, 0x43,\n\t0xE6, 0xBC, 0x8F, 0x43, 0xE6, 0xBC, 0x94, 0x43,\n\t0xE6, 0xBC, 0xA2, 0x43, 0xE6, 0xBC, 0xA3, 0x43,\n\t0xE6, 0xBD, 0xAE, 0x43, 0xE6, 0xBF, 0x86, 0x43,\n\t0xE6, 0xBF, 0xAB, 0x43, 0xE6, 0xBF, 0xBE, 0x43,\n\t// Bytes e80 - ebf\n\t0xE7, 0x80, 0x9B, 0x43, 0xE7, 0x80, 0x9E, 0x43,\n\t0xE7, 0x80, 0xB9, 0x43, 0xE7, 0x81, 0x8A, 0x43,\n\t0xE7, 0x81, 0xAB, 0x43, 0xE7, 0x81, 0xB0, 0x43,\n\t0xE7, 0x81, 0xB7, 0x43, 0xE7, 0x81, 0xBD, 0x43,\n\t0xE7, 0x82, 0x99, 0x43, 0xE7, 0x82, 0xAD, 0x43,\n\t0xE7, 0x83, 0x88, 0x43, 0xE7, 0x83, 0x99, 0x43,\n\t0xE7, 0x84, 0xA1, 0x43, 0xE7, 0x85, 0x85, 0x43,\n\t0xE7, 0x85, 0x89, 0x43, 0xE7, 0x85, 0xAE, 0x43,\n\t// Bytes ec0 - eff\n\t0xE7, 0x86, 0x9C, 0x43, 0xE7, 0x87, 0x8E, 0x43,\n\t0xE7, 0x87, 0x90, 0x43, 0xE7, 0x88, 0x90, 0x43,\n\t0xE7, 0x88, 0x9B, 0x43, 0xE7, 0x88, 0xA8, 0x43,\n\t0xE7, 0x88, 0xAA, 0x43, 0xE7, 0x88, 0xAB, 0x43,\n\t0xE7, 0x88, 0xB5, 0x43, 0xE7, 0x88, 0xB6, 0x43,\n\t0xE7, 0x88, 0xBB, 0x43, 0xE7, 0x88, 0xBF, 0x43,\n\t0xE7, 0x89, 0x87, 0x43, 0xE7, 0x89, 0x90, 0x43,\n\t0xE7, 0x89, 0x99, 0x43, 0xE7, 0x89, 0x9B, 0x43,\n\t// Bytes f00 - f3f\n\t0xE7, 0x89, 0xA2, 0x43, 0xE7, 0x89, 0xB9, 0x43,\n\t0xE7, 0x8A, 0x80, 0x43, 0xE7, 0x8A, 0x95, 0x43,\n\t0xE7, 0x8A, 0xAC, 0x43, 0xE7, 0x8A, 0xAF, 0x43,\n\t0xE7, 0x8B, 0x80, 0x43, 0xE7, 0x8B, 0xBC, 0x43,\n\t0xE7, 0x8C, 0xAA, 0x43, 0xE7, 0x8D, 0xB5, 0x43,\n\t0xE7, 0x8D, 0xBA, 0x43, 0xE7, 0x8E, 0x84, 0x43,\n\t0xE7, 0x8E, 0x87, 0x43, 0xE7, 0x8E, 0x89, 0x43,\n\t0xE7, 0x8E, 0x8B, 0x43, 0xE7, 0x8E, 0xA5, 0x43,\n\t// Bytes f40 - f7f\n\t0xE7, 0x8E, 0xB2, 0x43, 0xE7, 0x8F, 0x9E, 0x43,\n\t0xE7, 0x90, 0x86, 0x43, 0xE7, 0x90, 0x89, 0x43,\n\t0xE7, 0x90, 0xA2, 0x43, 0xE7, 0x91, 0x87, 0x43,\n\t0xE7, 0x91, 0x9C, 0x43, 0xE7, 0x91, 0xA9, 0x43,\n\t0xE7, 0x91, 0xB1, 0x43, 0xE7, 0x92, 0x85, 0x43,\n\t0xE7, 0x92, 0x89, 0x43, 0xE7, 0x92, 0x98, 0x43,\n\t0xE7, 0x93, 0x8A, 0x43, 0xE7, 0x93, 0x9C, 0x43,\n\t0xE7, 0x93, 0xA6, 0x43, 0xE7, 0x94, 0x86, 0x43,\n\t// Bytes f80 - fbf\n\t0xE7, 0x94, 0x98, 0x43, 0xE7, 0x94, 0x9F, 0x43,\n\t0xE7, 0x94, 0xA4, 0x43, 0xE7, 0x94, 0xA8, 0x43,\n\t0xE7, 0x94, 0xB0, 0x43, 0xE7, 0x94, 0xB2, 0x43,\n\t0xE7, 0x94, 0xB3, 0x43, 0xE7, 0x94, 0xB7, 0x43,\n\t0xE7, 0x94, 0xBB, 0x43, 0xE7, 0x94, 0xBE, 0x43,\n\t0xE7, 0x95, 0x99, 0x43, 0xE7, 0x95, 0xA5, 0x43,\n\t0xE7, 0x95, 0xB0, 0x43, 0xE7, 0x96, 0x8B, 0x43,\n\t0xE7, 0x96, 0x92, 0x43, 0xE7, 0x97, 0xA2, 0x43,\n\t// Bytes fc0 - fff\n\t0xE7, 0x98, 0x90, 0x43, 0xE7, 0x98, 0x9D, 0x43,\n\t0xE7, 0x98, 0x9F, 0x43, 0xE7, 0x99, 0x82, 0x43,\n\t0xE7, 0x99, 0xA9, 0x43, 0xE7, 0x99, 0xB6, 0x43,\n\t0xE7, 0x99, 0xBD, 0x43, 0xE7, 0x9A, 0xAE, 0x43,\n\t0xE7, 0x9A, 0xBF, 0x43, 0xE7, 0x9B, 0x8A, 0x43,\n\t0xE7, 0x9B, 0x9B, 0x43, 0xE7, 0x9B, 0xA3, 0x43,\n\t0xE7, 0x9B, 0xA7, 0x43, 0xE7, 0x9B, 0xAE, 0x43,\n\t0xE7, 0x9B, 0xB4, 0x43, 0xE7, 0x9C, 0x81, 0x43,\n\t// Bytes 1000 - 103f\n\t0xE7, 0x9C, 0x9E, 0x43, 0xE7, 0x9C, 0x9F, 0x43,\n\t0xE7, 0x9D, 0x80, 0x43, 0xE7, 0x9D, 0x8A, 0x43,\n\t0xE7, 0x9E, 0x8B, 0x43, 0xE7, 0x9E, 0xA7, 0x43,\n\t0xE7, 0x9F, 0x9B, 0x43, 0xE7, 0x9F, 0xA2, 0x43,\n\t0xE7, 0x9F, 0xB3, 0x43, 0xE7, 0xA1, 0x8E, 0x43,\n\t0xE7, 0xA1, 0xAB, 0x43, 0xE7, 0xA2, 0x8C, 0x43,\n\t0xE7, 0xA2, 0x91, 0x43, 0xE7, 0xA3, 0x8A, 0x43,\n\t0xE7, 0xA3, 0x8C, 0x43, 0xE7, 0xA3, 0xBB, 0x43,\n\t// Bytes 1040 - 107f\n\t0xE7, 0xA4, 0xAA, 0x43, 0xE7, 0xA4, 0xBA, 0x43,\n\t0xE7, 0xA4, 0xBC, 0x43, 0xE7, 0xA4, 0xBE, 0x43,\n\t0xE7, 0xA5, 0x88, 0x43, 0xE7, 0xA5, 0x89, 0x43,\n\t0xE7, 0xA5, 0x90, 0x43, 0xE7, 0xA5, 0x96, 0x43,\n\t0xE7, 0xA5, 0x9D, 0x43, 0xE7, 0xA5, 0x9E, 0x43,\n\t0xE7, 0xA5, 0xA5, 0x43, 0xE7, 0xA5, 0xBF, 0x43,\n\t0xE7, 0xA6, 0x81, 0x43, 0xE7, 0xA6, 0x8D, 0x43,\n\t0xE7, 0xA6, 0x8E, 0x43, 0xE7, 0xA6, 0x8F, 0x43,\n\t// Bytes 1080 - 10bf\n\t0xE7, 0xA6, 0xAE, 0x43, 0xE7, 0xA6, 0xB8, 0x43,\n\t0xE7, 0xA6, 0xBE, 0x43, 0xE7, 0xA7, 0x8A, 0x43,\n\t0xE7, 0xA7, 0x98, 0x43, 0xE7, 0xA7, 0xAB, 0x43,\n\t0xE7, 0xA8, 0x9C, 0x43, 0xE7, 0xA9, 0x80, 0x43,\n\t0xE7, 0xA9, 0x8A, 0x43, 0xE7, 0xA9, 0x8F, 0x43,\n\t0xE7, 0xA9, 0xB4, 0x43, 0xE7, 0xA9, 0xBA, 0x43,\n\t0xE7, 0xAA, 0x81, 0x43, 0xE7, 0xAA, 0xB1, 0x43,\n\t0xE7, 0xAB, 0x8B, 0x43, 0xE7, 0xAB, 0xAE, 0x43,\n\t// Bytes 10c0 - 10ff\n\t0xE7, 0xAB, 0xB9, 0x43, 0xE7, 0xAC, 0xA0, 0x43,\n\t0xE7, 0xAE, 0x8F, 0x43, 0xE7, 0xAF, 0x80, 0x43,\n\t0xE7, 0xAF, 0x86, 0x43, 0xE7, 0xAF, 0x89, 0x43,\n\t0xE7, 0xB0, 0xBE, 0x43, 0xE7, 0xB1, 0xA0, 0x43,\n\t0xE7, 0xB1, 0xB3, 0x43, 0xE7, 0xB1, 0xBB, 0x43,\n\t0xE7, 0xB2, 0x92, 0x43, 0xE7, 0xB2, 0xBE, 0x43,\n\t0xE7, 0xB3, 0x92, 0x43, 0xE7, 0xB3, 0x96, 0x43,\n\t0xE7, 0xB3, 0xA3, 0x43, 0xE7, 0xB3, 0xA7, 0x43,\n\t// Bytes 1100 - 113f\n\t0xE7, 0xB3, 0xA8, 0x43, 0xE7, 0xB3, 0xB8, 0x43,\n\t0xE7, 0xB4, 0x80, 0x43, 0xE7, 0xB4, 0x90, 0x43,\n\t0xE7, 0xB4, 0xA2, 0x43, 0xE7, 0xB4, 0xAF, 0x43,\n\t0xE7, 0xB5, 0x82, 0x43, 0xE7, 0xB5, 0x9B, 0x43,\n\t0xE7, 0xB5, 0xA3, 0x43, 0xE7, 0xB6, 0xA0, 0x43,\n\t0xE7, 0xB6, 0xBE, 0x43, 0xE7, 0xB7, 0x87, 0x43,\n\t0xE7, 0xB7, 0xB4, 0x43, 0xE7, 0xB8, 0x82, 0x43,\n\t0xE7, 0xB8, 0x89, 0x43, 0xE7, 0xB8, 0xB7, 0x43,\n\t// Bytes 1140 - 117f\n\t0xE7, 0xB9, 0x81, 0x43, 0xE7, 0xB9, 0x85, 0x43,\n\t0xE7, 0xBC, 0xB6, 0x43, 0xE7, 0xBC, 0xBE, 0x43,\n\t0xE7, 0xBD, 0x91, 0x43, 0xE7, 0xBD, 0xB2, 0x43,\n\t0xE7, 0xBD, 0xB9, 0x43, 0xE7, 0xBD, 0xBA, 0x43,\n\t0xE7, 0xBE, 0x85, 0x43, 0xE7, 0xBE, 0x8A, 0x43,\n\t0xE7, 0xBE, 0x95, 0x43, 0xE7, 0xBE, 0x9A, 0x43,\n\t0xE7, 0xBE, 0xBD, 0x43, 0xE7, 0xBF, 0xBA, 0x43,\n\t0xE8, 0x80, 0x81, 0x43, 0xE8, 0x80, 0x85, 0x43,\n\t// Bytes 1180 - 11bf\n\t0xE8, 0x80, 0x8C, 0x43, 0xE8, 0x80, 0x92, 0x43,\n\t0xE8, 0x80, 0xB3, 0x43, 0xE8, 0x81, 0x86, 0x43,\n\t0xE8, 0x81, 0xA0, 0x43, 0xE8, 0x81, 0xAF, 0x43,\n\t0xE8, 0x81, 0xB0, 0x43, 0xE8, 0x81, 0xBE, 0x43,\n\t0xE8, 0x81, 0xBF, 0x43, 0xE8, 0x82, 0x89, 0x43,\n\t0xE8, 0x82, 0x8B, 0x43, 0xE8, 0x82, 0xAD, 0x43,\n\t0xE8, 0x82, 0xB2, 0x43, 0xE8, 0x84, 0x83, 0x43,\n\t0xE8, 0x84, 0xBE, 0x43, 0xE8, 0x87, 0x98, 0x43,\n\t// Bytes 11c0 - 11ff\n\t0xE8, 0x87, 0xA3, 0x43, 0xE8, 0x87, 0xA8, 0x43,\n\t0xE8, 0x87, 0xAA, 0x43, 0xE8, 0x87, 0xAD, 0x43,\n\t0xE8, 0x87, 0xB3, 0x43, 0xE8, 0x87, 0xBC, 0x43,\n\t0xE8, 0x88, 0x81, 0x43, 0xE8, 0x88, 0x84, 0x43,\n\t0xE8, 0x88, 0x8C, 0x43, 0xE8, 0x88, 0x98, 0x43,\n\t0xE8, 0x88, 0x9B, 0x43, 0xE8, 0x88, 0x9F, 0x43,\n\t0xE8, 0x89, 0xAE, 0x43, 0xE8, 0x89, 0xAF, 0x43,\n\t0xE8, 0x89, 0xB2, 0x43, 0xE8, 0x89, 0xB8, 0x43,\n\t// Bytes 1200 - 123f\n\t0xE8, 0x89, 0xB9, 0x43, 0xE8, 0x8A, 0x8B, 0x43,\n\t0xE8, 0x8A, 0x91, 0x43, 0xE8, 0x8A, 0x9D, 0x43,\n\t0xE8, 0x8A, 0xB1, 0x43, 0xE8, 0x8A, 0xB3, 0x43,\n\t0xE8, 0x8A, 0xBD, 0x43, 0xE8, 0x8B, 0xA5, 0x43,\n\t0xE8, 0x8B, 0xA6, 0x43, 0xE8, 0x8C, 0x9D, 0x43,\n\t0xE8, 0x8C, 0xA3, 0x43, 0xE8, 0x8C, 0xB6, 0x43,\n\t0xE8, 0x8D, 0x92, 0x43, 0xE8, 0x8D, 0x93, 0x43,\n\t0xE8, 0x8D, 0xA3, 0x43, 0xE8, 0x8E, 0xAD, 0x43,\n\t// Bytes 1240 - 127f\n\t0xE8, 0x8E, 0xBD, 0x43, 0xE8, 0x8F, 0x89, 0x43,\n\t0xE8, 0x8F, 0x8A, 0x43, 0xE8, 0x8F, 0x8C, 0x43,\n\t0xE8, 0x8F, 0x9C, 0x43, 0xE8, 0x8F, 0xA7, 0x43,\n\t0xE8, 0x8F, 0xAF, 0x43, 0xE8, 0x8F, 0xB1, 0x43,\n\t0xE8, 0x90, 0xBD, 0x43, 0xE8, 0x91, 0x89, 0x43,\n\t0xE8, 0x91, 0x97, 0x43, 0xE8, 0x93, 0xAE, 0x43,\n\t0xE8, 0x93, 0xB1, 0x43, 0xE8, 0x93, 0xB3, 0x43,\n\t0xE8, 0x93, 0xBC, 0x43, 0xE8, 0x94, 0x96, 0x43,\n\t// Bytes 1280 - 12bf\n\t0xE8, 0x95, 0xA4, 0x43, 0xE8, 0x97, 0x8D, 0x43,\n\t0xE8, 0x97, 0xBA, 0x43, 0xE8, 0x98, 0x86, 0x43,\n\t0xE8, 0x98, 0x92, 0x43, 0xE8, 0x98, 0xAD, 0x43,\n\t0xE8, 0x98, 0xBF, 0x43, 0xE8, 0x99, 0x8D, 0x43,\n\t0xE8, 0x99, 0x90, 0x43, 0xE8, 0x99, 0x9C, 0x43,\n\t0xE8, 0x99, 0xA7, 0x43, 0xE8, 0x99, 0xA9, 0x43,\n\t0xE8, 0x99, 0xAB, 0x43, 0xE8, 0x9A, 0x88, 0x43,\n\t0xE8, 0x9A, 0xA9, 0x43, 0xE8, 0x9B, 0xA2, 0x43,\n\t// Bytes 12c0 - 12ff\n\t0xE8, 0x9C, 0x8E, 0x43, 0xE8, 0x9C, 0xA8, 0x43,\n\t0xE8, 0x9D, 0xAB, 0x43, 0xE8, 0x9D, 0xB9, 0x43,\n\t0xE8, 0x9E, 0x86, 0x43, 0xE8, 0x9E, 0xBA, 0x43,\n\t0xE8, 0x9F, 0xA1, 0x43, 0xE8, 0xA0, 0x81, 0x43,\n\t0xE8, 0xA0, 0x9F, 0x43, 0xE8, 0xA1, 0x80, 0x43,\n\t0xE8, 0xA1, 0x8C, 0x43, 0xE8, 0xA1, 0xA0, 0x43,\n\t0xE8, 0xA1, 0xA3, 0x43, 0xE8, 0xA3, 0x82, 0x43,\n\t0xE8, 0xA3, 0x8F, 0x43, 0xE8, 0xA3, 0x97, 0x43,\n\t// Bytes 1300 - 133f\n\t0xE8, 0xA3, 0x9E, 0x43, 0xE8, 0xA3, 0xA1, 0x43,\n\t0xE8, 0xA3, 0xB8, 0x43, 0xE8, 0xA3, 0xBA, 0x43,\n\t0xE8, 0xA4, 0x90, 0x43, 0xE8, 0xA5, 0x81, 0x43,\n\t0xE8, 0xA5, 0xA4, 0x43, 0xE8, 0xA5, 0xBE, 0x43,\n\t0xE8, 0xA6, 0x86, 0x43, 0xE8, 0xA6, 0x8B, 0x43,\n\t0xE8, 0xA6, 0x96, 0x43, 0xE8, 0xA7, 0x92, 0x43,\n\t0xE8, 0xA7, 0xA3, 0x43, 0xE8, 0xA8, 0x80, 0x43,\n\t0xE8, 0xAA, 0xA0, 0x43, 0xE8, 0xAA, 0xAA, 0x43,\n\t// Bytes 1340 - 137f\n\t0xE8, 0xAA, 0xBF, 0x43, 0xE8, 0xAB, 0x8B, 0x43,\n\t0xE8, 0xAB, 0x92, 0x43, 0xE8, 0xAB, 0x96, 0x43,\n\t0xE8, 0xAB, 0xAD, 0x43, 0xE8, 0xAB, 0xB8, 0x43,\n\t0xE8, 0xAB, 0xBE, 0x43, 0xE8, 0xAC, 0x81, 0x43,\n\t0xE8, 0xAC, 0xB9, 0x43, 0xE8, 0xAD, 0x98, 0x43,\n\t0xE8, 0xAE, 0x80, 0x43, 0xE8, 0xAE, 0x8A, 0x43,\n\t0xE8, 0xB0, 0xB7, 0x43, 0xE8, 0xB1, 0x86, 0x43,\n\t0xE8, 0xB1, 0x88, 0x43, 0xE8, 0xB1, 0x95, 0x43,\n\t// Bytes 1380 - 13bf\n\t0xE8, 0xB1, 0xB8, 0x43, 0xE8, 0xB2, 0x9D, 0x43,\n\t0xE8, 0xB2, 0xA1, 0x43, 0xE8, 0xB2, 0xA9, 0x43,\n\t0xE8, 0xB2, 0xAB, 0x43, 0xE8, 0xB3, 0x81, 0x43,\n\t0xE8, 0xB3, 0x82, 0x43, 0xE8, 0xB3, 0x87, 0x43,\n\t0xE8, 0xB3, 0x88, 0x43, 0xE8, 0xB3, 0x93, 0x43,\n\t0xE8, 0xB4, 0x88, 0x43, 0xE8, 0xB4, 0x9B, 0x43,\n\t0xE8, 0xB5, 0xA4, 0x43, 0xE8, 0xB5, 0xB0, 0x43,\n\t0xE8, 0xB5, 0xB7, 0x43, 0xE8, 0xB6, 0xB3, 0x43,\n\t// Bytes 13c0 - 13ff\n\t0xE8, 0xB6, 0xBC, 0x43, 0xE8, 0xB7, 0x8B, 0x43,\n\t0xE8, 0xB7, 0xAF, 0x43, 0xE8, 0xB7, 0xB0, 0x43,\n\t0xE8, 0xBA, 0xAB, 0x43, 0xE8, 0xBB, 0x8A, 0x43,\n\t0xE8, 0xBB, 0x94, 0x43, 0xE8, 0xBC, 0xA6, 0x43,\n\t0xE8, 0xBC, 0xAA, 0x43, 0xE8, 0xBC, 0xB8, 0x43,\n\t0xE8, 0xBC, 0xBB, 0x43, 0xE8, 0xBD, 0xA2, 0x43,\n\t0xE8, 0xBE, 0x9B, 0x43, 0xE8, 0xBE, 0x9E, 0x43,\n\t0xE8, 0xBE, 0xB0, 0x43, 0xE8, 0xBE, 0xB5, 0x43,\n\t// Bytes 1400 - 143f\n\t0xE8, 0xBE, 0xB6, 0x43, 0xE9, 0x80, 0xA3, 0x43,\n\t0xE9, 0x80, 0xB8, 0x43, 0xE9, 0x81, 0x8A, 0x43,\n\t0xE9, 0x81, 0xA9, 0x43, 0xE9, 0x81, 0xB2, 0x43,\n\t0xE9, 0x81, 0xBC, 0x43, 0xE9, 0x82, 0x8F, 0x43,\n\t0xE9, 0x82, 0x91, 0x43, 0xE9, 0x82, 0x94, 0x43,\n\t0xE9, 0x83, 0x8E, 0x43, 0xE9, 0x83, 0x9E, 0x43,\n\t0xE9, 0x83, 0xB1, 0x43, 0xE9, 0x83, 0xBD, 0x43,\n\t0xE9, 0x84, 0x91, 0x43, 0xE9, 0x84, 0x9B, 0x43,\n\t// Bytes 1440 - 147f\n\t0xE9, 0x85, 0x89, 0x43, 0xE9, 0x85, 0x8D, 0x43,\n\t0xE9, 0x85, 0xAA, 0x43, 0xE9, 0x86, 0x99, 0x43,\n\t0xE9, 0x86, 0xB4, 0x43, 0xE9, 0x87, 0x86, 0x43,\n\t0xE9, 0x87, 0x8C, 0x43, 0xE9, 0x87, 0x8F, 0x43,\n\t0xE9, 0x87, 0x91, 0x43, 0xE9, 0x88, 0xB4, 0x43,\n\t0xE9, 0x88, 0xB8, 0x43, 0xE9, 0x89, 0xB6, 0x43,\n\t0xE9, 0x89, 0xBC, 0x43, 0xE9, 0x8B, 0x97, 0x43,\n\t0xE9, 0x8B, 0x98, 0x43, 0xE9, 0x8C, 0x84, 0x43,\n\t// Bytes 1480 - 14bf\n\t0xE9, 0x8D, 0x8A, 0x43, 0xE9, 0x8F, 0xB9, 0x43,\n\t0xE9, 0x90, 0x95, 0x43, 0xE9, 0x95, 0xB7, 0x43,\n\t0xE9, 0x96, 0x80, 0x43, 0xE9, 0x96, 0x8B, 0x43,\n\t0xE9, 0x96, 0xAD, 0x43, 0xE9, 0x96, 0xB7, 0x43,\n\t0xE9, 0x98, 0x9C, 0x43, 0xE9, 0x98, 0xAE, 0x43,\n\t0xE9, 0x99, 0x8B, 0x43, 0xE9, 0x99, 0x8D, 0x43,\n\t0xE9, 0x99, 0xB5, 0x43, 0xE9, 0x99, 0xB8, 0x43,\n\t0xE9, 0x99, 0xBC, 0x43, 0xE9, 0x9A, 0x86, 0x43,\n\t// Bytes 14c0 - 14ff\n\t0xE9, 0x9A, 0xA3, 0x43, 0xE9, 0x9A, 0xB6, 0x43,\n\t0xE9, 0x9A, 0xB7, 0x43, 0xE9, 0x9A, 0xB8, 0x43,\n\t0xE9, 0x9A, 0xB9, 0x43, 0xE9, 0x9B, 0x83, 0x43,\n\t0xE9, 0x9B, 0xA2, 0x43, 0xE9, 0x9B, 0xA3, 0x43,\n\t0xE9, 0x9B, 0xA8, 0x43, 0xE9, 0x9B, 0xB6, 0x43,\n\t0xE9, 0x9B, 0xB7, 0x43, 0xE9, 0x9C, 0xA3, 0x43,\n\t0xE9, 0x9C, 0xB2, 0x43, 0xE9, 0x9D, 0x88, 0x43,\n\t0xE9, 0x9D, 0x91, 0x43, 0xE9, 0x9D, 0x96, 0x43,\n\t// Bytes 1500 - 153f\n\t0xE9, 0x9D, 0x9E, 0x43, 0xE9, 0x9D, 0xA2, 0x43,\n\t0xE9, 0x9D, 0xA9, 0x43, 0xE9, 0x9F, 0x8B, 0x43,\n\t0xE9, 0x9F, 0x9B, 0x43, 0xE9, 0x9F, 0xA0, 0x43,\n\t0xE9, 0x9F, 0xAD, 0x43, 0xE9, 0x9F, 0xB3, 0x43,\n\t0xE9, 0x9F, 0xBF, 0x43, 0xE9, 0xA0, 0x81, 0x43,\n\t0xE9, 0xA0, 0x85, 0x43, 0xE9, 0xA0, 0x8B, 0x43,\n\t0xE9, 0xA0, 0x98, 0x43, 0xE9, 0xA0, 0xA9, 0x43,\n\t0xE9, 0xA0, 0xBB, 0x43, 0xE9, 0xA1, 0x9E, 0x43,\n\t// Bytes 1540 - 157f\n\t0xE9, 0xA2, 0xA8, 0x43, 0xE9, 0xA3, 0x9B, 0x43,\n\t0xE9, 0xA3, 0x9F, 0x43, 0xE9, 0xA3, 0xA2, 0x43,\n\t0xE9, 0xA3, 0xAF, 0x43, 0xE9, 0xA3, 0xBC, 0x43,\n\t0xE9, 0xA4, 0xA8, 0x43, 0xE9, 0xA4, 0xA9, 0x43,\n\t0xE9, 0xA6, 0x96, 0x43, 0xE9, 0xA6, 0x99, 0x43,\n\t0xE9, 0xA6, 0xA7, 0x43, 0xE9, 0xA6, 0xAC, 0x43,\n\t0xE9, 0xA7, 0x82, 0x43, 0xE9, 0xA7, 0xB1, 0x43,\n\t0xE9, 0xA7, 0xBE, 0x43, 0xE9, 0xA9, 0xAA, 0x43,\n\t// Bytes 1580 - 15bf\n\t0xE9, 0xAA, 0xA8, 0x43, 0xE9, 0xAB, 0x98, 0x43,\n\t0xE9, 0xAB, 0x9F, 0x43, 0xE9, 0xAC, 0x92, 0x43,\n\t0xE9, 0xAC, 0xA5, 0x43, 0xE9, 0xAC, 0xAF, 0x43,\n\t0xE9, 0xAC, 0xB2, 0x43, 0xE9, 0xAC, 0xBC, 0x43,\n\t0xE9, 0xAD, 0x9A, 0x43, 0xE9, 0xAD, 0xAF, 0x43,\n\t0xE9, 0xB1, 0x80, 0x43, 0xE9, 0xB1, 0x97, 0x43,\n\t0xE9, 0xB3, 0xA5, 0x43, 0xE9, 0xB3, 0xBD, 0x43,\n\t0xE9, 0xB5, 0xA7, 0x43, 0xE9, 0xB6, 0xB4, 0x43,\n\t// Bytes 15c0 - 15ff\n\t0xE9, 0xB7, 0xBA, 0x43, 0xE9, 0xB8, 0x9E, 0x43,\n\t0xE9, 0xB9, 0xB5, 0x43, 0xE9, 0xB9, 0xBF, 0x43,\n\t0xE9, 0xBA, 0x97, 0x43, 0xE9, 0xBA, 0x9F, 0x43,\n\t0xE9, 0xBA, 0xA5, 0x43, 0xE9, 0xBA, 0xBB, 0x43,\n\t0xE9, 0xBB, 0x83, 0x43, 0xE9, 0xBB, 0x8D, 0x43,\n\t0xE9, 0xBB, 0x8E, 0x43, 0xE9, 0xBB, 0x91, 0x43,\n\t0xE9, 0xBB, 0xB9, 0x43, 0xE9, 0xBB, 0xBD, 0x43,\n\t0xE9, 0xBB, 0xBE, 0x43, 0xE9, 0xBC, 0x85, 0x43,\n\t// Bytes 1600 - 163f\n\t0xE9, 0xBC, 0x8E, 0x43, 0xE9, 0xBC, 0x8F, 0x43,\n\t0xE9, 0xBC, 0x93, 0x43, 0xE9, 0xBC, 0x96, 0x43,\n\t0xE9, 0xBC, 0xA0, 0x43, 0xE9, 0xBC, 0xBB, 0x43,\n\t0xE9, 0xBD, 0x83, 0x43, 0xE9, 0xBD, 0x8A, 0x43,\n\t0xE9, 0xBD, 0x92, 0x43, 0xE9, 0xBE, 0x8D, 0x43,\n\t0xE9, 0xBE, 0x8E, 0x43, 0xE9, 0xBE, 0x9C, 0x43,\n\t0xE9, 0xBE, 0x9F, 0x43, 0xE9, 0xBE, 0xA0, 0x43,\n\t0xEA, 0x9C, 0xA7, 0x43, 0xEA, 0x9D, 0xAF, 0x43,\n\t// Bytes 1640 - 167f\n\t0xEA, 0xAC, 0xB7, 0x43, 0xEA, 0xAD, 0x92, 0x44,\n\t0xF0, 0xA0, 0x84, 0xA2, 0x44, 0xF0, 0xA0, 0x94,\n\t0x9C, 0x44, 0xF0, 0xA0, 0x94, 0xA5, 0x44, 0xF0,\n\t0xA0, 0x95, 0x8B, 0x44, 0xF0, 0xA0, 0x98, 0xBA,\n\t0x44, 0xF0, 0xA0, 0xA0, 0x84, 0x44, 0xF0, 0xA0,\n\t0xA3, 0x9E, 0x44, 0xF0, 0xA0, 0xA8, 0xAC, 0x44,\n\t0xF0, 0xA0, 0xAD, 0xA3, 0x44, 0xF0, 0xA1, 0x93,\n\t0xA4, 0x44, 0xF0, 0xA1, 0x9A, 0xA8, 0x44, 0xF0,\n\t// Bytes 1680 - 16bf\n\t0xA1, 0x9B, 0xAA, 0x44, 0xF0, 0xA1, 0xA7, 0x88,\n\t0x44, 0xF0, 0xA1, 0xAC, 0x98, 0x44, 0xF0, 0xA1,\n\t0xB4, 0x8B, 0x44, 0xF0, 0xA1, 0xB7, 0xA4, 0x44,\n\t0xF0, 0xA1, 0xB7, 0xA6, 0x44, 0xF0, 0xA2, 0x86,\n\t0x83, 0x44, 0xF0, 0xA2, 0x86, 0x9F, 0x44, 0xF0,\n\t0xA2, 0x8C, 0xB1, 0x44, 0xF0, 0xA2, 0x9B, 0x94,\n\t0x44, 0xF0, 0xA2, 0xA1, 0x84, 0x44, 0xF0, 0xA2,\n\t0xA1, 0x8A, 0x44, 0xF0, 0xA2, 0xAC, 0x8C, 0x44,\n\t// Bytes 16c0 - 16ff\n\t0xF0, 0xA2, 0xAF, 0xB1, 0x44, 0xF0, 0xA3, 0x80,\n\t0x8A, 0x44, 0xF0, 0xA3, 0x8A, 0xB8, 0x44, 0xF0,\n\t0xA3, 0x8D, 0x9F, 0x44, 0xF0, 0xA3, 0x8E, 0x93,\n\t0x44, 0xF0, 0xA3, 0x8E, 0x9C, 0x44, 0xF0, 0xA3,\n\t0x8F, 0x83, 0x44, 0xF0, 0xA3, 0x8F, 0x95, 0x44,\n\t0xF0, 0xA3, 0x91, 0xAD, 0x44, 0xF0, 0xA3, 0x9A,\n\t0xA3, 0x44, 0xF0, 0xA3, 0xA2, 0xA7, 0x44, 0xF0,\n\t0xA3, 0xAA, 0x8D, 0x44, 0xF0, 0xA3, 0xAB, 0xBA,\n\t// Bytes 1700 - 173f\n\t0x44, 0xF0, 0xA3, 0xB2, 0xBC, 0x44, 0xF0, 0xA3,\n\t0xB4, 0x9E, 0x44, 0xF0, 0xA3, 0xBB, 0x91, 0x44,\n\t0xF0, 0xA3, 0xBD, 0x9E, 0x44, 0xF0, 0xA3, 0xBE,\n\t0x8E, 0x44, 0xF0, 0xA4, 0x89, 0xA3, 0x44, 0xF0,\n\t0xA4, 0x8B, 0xAE, 0x44, 0xF0, 0xA4, 0x8E, 0xAB,\n\t0x44, 0xF0, 0xA4, 0x98, 0x88, 0x44, 0xF0, 0xA4,\n\t0x9C, 0xB5, 0x44, 0xF0, 0xA4, 0xA0, 0x94, 0x44,\n\t0xF0, 0xA4, 0xB0, 0xB6, 0x44, 0xF0, 0xA4, 0xB2,\n\t// Bytes 1740 - 177f\n\t0x92, 0x44, 0xF0, 0xA4, 0xBE, 0xA1, 0x44, 0xF0,\n\t0xA4, 0xBE, 0xB8, 0x44, 0xF0, 0xA5, 0x81, 0x84,\n\t0x44, 0xF0, 0xA5, 0x83, 0xB2, 0x44, 0xF0, 0xA5,\n\t0x83, 0xB3, 0x44, 0xF0, 0xA5, 0x84, 0x99, 0x44,\n\t0xF0, 0xA5, 0x84, 0xB3, 0x44, 0xF0, 0xA5, 0x89,\n\t0x89, 0x44, 0xF0, 0xA5, 0x90, 0x9D, 0x44, 0xF0,\n\t0xA5, 0x98, 0xA6, 0x44, 0xF0, 0xA5, 0x9A, 0x9A,\n\t0x44, 0xF0, 0xA5, 0x9B, 0x85, 0x44, 0xF0, 0xA5,\n\t// Bytes 1780 - 17bf\n\t0xA5, 0xBC, 0x44, 0xF0, 0xA5, 0xAA, 0xA7, 0x44,\n\t0xF0, 0xA5, 0xAE, 0xAB, 0x44, 0xF0, 0xA5, 0xB2,\n\t0x80, 0x44, 0xF0, 0xA5, 0xB3, 0x90, 0x44, 0xF0,\n\t0xA5, 0xBE, 0x86, 0x44, 0xF0, 0xA6, 0x87, 0x9A,\n\t0x44, 0xF0, 0xA6, 0x88, 0xA8, 0x44, 0xF0, 0xA6,\n\t0x89, 0x87, 0x44, 0xF0, 0xA6, 0x8B, 0x99, 0x44,\n\t0xF0, 0xA6, 0x8C, 0xBE, 0x44, 0xF0, 0xA6, 0x93,\n\t0x9A, 0x44, 0xF0, 0xA6, 0x94, 0xA3, 0x44, 0xF0,\n\t// Bytes 17c0 - 17ff\n\t0xA6, 0x96, 0xA8, 0x44, 0xF0, 0xA6, 0x9E, 0xA7,\n\t0x44, 0xF0, 0xA6, 0x9E, 0xB5, 0x44, 0xF0, 0xA6,\n\t0xAC, 0xBC, 0x44, 0xF0, 0xA6, 0xB0, 0xB6, 0x44,\n\t0xF0, 0xA6, 0xB3, 0x95, 0x44, 0xF0, 0xA6, 0xB5,\n\t0xAB, 0x44, 0xF0, 0xA6, 0xBC, 0xAC, 0x44, 0xF0,\n\t0xA6, 0xBE, 0xB1, 0x44, 0xF0, 0xA7, 0x83, 0x92,\n\t0x44, 0xF0, 0xA7, 0x8F, 0x8A, 0x44, 0xF0, 0xA7,\n\t0x99, 0xA7, 0x44, 0xF0, 0xA7, 0xA2, 0xAE, 0x44,\n\t// Bytes 1800 - 183f\n\t0xF0, 0xA7, 0xA5, 0xA6, 0x44, 0xF0, 0xA7, 0xB2,\n\t0xA8, 0x44, 0xF0, 0xA7, 0xBB, 0x93, 0x44, 0xF0,\n\t0xA7, 0xBC, 0xAF, 0x44, 0xF0, 0xA8, 0x97, 0x92,\n\t0x44, 0xF0, 0xA8, 0x97, 0xAD, 0x44, 0xF0, 0xA8,\n\t0x9C, 0xAE, 0x44, 0xF0, 0xA8, 0xAF, 0xBA, 0x44,\n\t0xF0, 0xA8, 0xB5, 0xB7, 0x44, 0xF0, 0xA9, 0x85,\n\t0x85, 0x44, 0xF0, 0xA9, 0x87, 0x9F, 0x44, 0xF0,\n\t0xA9, 0x88, 0x9A, 0x44, 0xF0, 0xA9, 0x90, 0x8A,\n\t// Bytes 1840 - 187f\n\t0x44, 0xF0, 0xA9, 0x92, 0x96, 0x44, 0xF0, 0xA9,\n\t0x96, 0xB6, 0x44, 0xF0, 0xA9, 0xAC, 0xB0, 0x44,\n\t0xF0, 0xAA, 0x83, 0x8E, 0x44, 0xF0, 0xAA, 0x84,\n\t0x85, 0x44, 0xF0, 0xAA, 0x88, 0x8E, 0x44, 0xF0,\n\t0xAA, 0x8A, 0x91, 0x44, 0xF0, 0xAA, 0x8E, 0x92,\n\t0x44, 0xF0, 0xAA, 0x98, 0x80, 0x42, 0x21, 0x21,\n\t0x42, 0x21, 0x3F, 0x42, 0x2E, 0x2E, 0x42, 0x30,\n\t0x2C, 0x42, 0x30, 0x2E, 0x42, 0x31, 0x2C, 0x42,\n\t// Bytes 1880 - 18bf\n\t0x31, 0x2E, 0x42, 0x31, 0x30, 0x42, 0x31, 0x31,\n\t0x42, 0x31, 0x32, 0x42, 0x31, 0x33, 0x42, 0x31,\n\t0x34, 0x42, 0x31, 0x35, 0x42, 0x31, 0x36, 0x42,\n\t0x31, 0x37, 0x42, 0x31, 0x38, 0x42, 0x31, 0x39,\n\t0x42, 0x32, 0x2C, 0x42, 0x32, 0x2E, 0x42, 0x32,\n\t0x30, 0x42, 0x32, 0x31, 0x42, 0x32, 0x32, 0x42,\n\t0x32, 0x33, 0x42, 0x32, 0x34, 0x42, 0x32, 0x35,\n\t0x42, 0x32, 0x36, 0x42, 0x32, 0x37, 0x42, 0x32,\n\t// Bytes 18c0 - 18ff\n\t0x38, 0x42, 0x32, 0x39, 0x42, 0x33, 0x2C, 0x42,\n\t0x33, 0x2E, 0x42, 0x33, 0x30, 0x42, 0x33, 0x31,\n\t0x42, 0x33, 0x32, 0x42, 0x33, 0x33, 0x42, 0x33,\n\t0x34, 0x42, 0x33, 0x35, 0x42, 0x33, 0x36, 0x42,\n\t0x33, 0x37, 0x42, 0x33, 0x38, 0x42, 0x33, 0x39,\n\t0x42, 0x34, 0x2C, 0x42, 0x34, 0x2E, 0x42, 0x34,\n\t0x30, 0x42, 0x34, 0x31, 0x42, 0x34, 0x32, 0x42,\n\t0x34, 0x33, 0x42, 0x34, 0x34, 0x42, 0x34, 0x35,\n\t// Bytes 1900 - 193f\n\t0x42, 0x34, 0x36, 0x42, 0x34, 0x37, 0x42, 0x34,\n\t0x38, 0x42, 0x34, 0x39, 0x42, 0x35, 0x2C, 0x42,\n\t0x35, 0x2E, 0x42, 0x35, 0x30, 0x42, 0x36, 0x2C,\n\t0x42, 0x36, 0x2E, 0x42, 0x37, 0x2C, 0x42, 0x37,\n\t0x2E, 0x42, 0x38, 0x2C, 0x42, 0x38, 0x2E, 0x42,\n\t0x39, 0x2C, 0x42, 0x39, 0x2E, 0x42, 0x3D, 0x3D,\n\t0x42, 0x3F, 0x21, 0x42, 0x3F, 0x3F, 0x42, 0x41,\n\t0x55, 0x42, 0x42, 0x71, 0x42, 0x43, 0x44, 0x42,\n\t// Bytes 1940 - 197f\n\t0x44, 0x4A, 0x42, 0x44, 0x5A, 0x42, 0x44, 0x7A,\n\t0x42, 0x47, 0x42, 0x42, 0x47, 0x79, 0x42, 0x48,\n\t0x50, 0x42, 0x48, 0x56, 0x42, 0x48, 0x67, 0x42,\n\t0x48, 0x7A, 0x42, 0x49, 0x49, 0x42, 0x49, 0x4A,\n\t0x42, 0x49, 0x55, 0x42, 0x49, 0x56, 0x42, 0x49,\n\t0x58, 0x42, 0x4B, 0x42, 0x42, 0x4B, 0x4B, 0x42,\n\t0x4B, 0x4D, 0x42, 0x4C, 0x4A, 0x42, 0x4C, 0x6A,\n\t0x42, 0x4D, 0x42, 0x42, 0x4D, 0x43, 0x42, 0x4D,\n\t// Bytes 1980 - 19bf\n\t0x44, 0x42, 0x4D, 0x56, 0x42, 0x4D, 0x57, 0x42,\n\t0x4E, 0x4A, 0x42, 0x4E, 0x6A, 0x42, 0x4E, 0x6F,\n\t0x42, 0x50, 0x48, 0x42, 0x50, 0x52, 0x42, 0x50,\n\t0x61, 0x42, 0x52, 0x73, 0x42, 0x53, 0x44, 0x42,\n\t0x53, 0x4D, 0x42, 0x53, 0x53, 0x42, 0x53, 0x76,\n\t0x42, 0x54, 0x4D, 0x42, 0x56, 0x49, 0x42, 0x57,\n\t0x43, 0x42, 0x57, 0x5A, 0x42, 0x57, 0x62, 0x42,\n\t0x58, 0x49, 0x42, 0x63, 0x63, 0x42, 0x63, 0x64,\n\t// Bytes 19c0 - 19ff\n\t0x42, 0x63, 0x6D, 0x42, 0x64, 0x42, 0x42, 0x64,\n\t0x61, 0x42, 0x64, 0x6C, 0x42, 0x64, 0x6D, 0x42,\n\t0x64, 0x7A, 0x42, 0x65, 0x56, 0x42, 0x66, 0x66,\n\t0x42, 0x66, 0x69, 0x42, 0x66, 0x6C, 0x42, 0x66,\n\t0x6D, 0x42, 0x68, 0x61, 0x42, 0x69, 0x69, 0x42,\n\t0x69, 0x6A, 0x42, 0x69, 0x6E, 0x42, 0x69, 0x76,\n\t0x42, 0x69, 0x78, 0x42, 0x6B, 0x41, 0x42, 0x6B,\n\t0x56, 0x42, 0x6B, 0x57, 0x42, 0x6B, 0x67, 0x42,\n\t// Bytes 1a00 - 1a3f\n\t0x6B, 0x6C, 0x42, 0x6B, 0x6D, 0x42, 0x6B, 0x74,\n\t0x42, 0x6C, 0x6A, 0x42, 0x6C, 0x6D, 0x42, 0x6C,\n\t0x6E, 0x42, 0x6C, 0x78, 0x42, 0x6D, 0x32, 0x42,\n\t0x6D, 0x33, 0x42, 0x6D, 0x41, 0x42, 0x6D, 0x56,\n\t0x42, 0x6D, 0x57, 0x42, 0x6D, 0x62, 0x42, 0x6D,\n\t0x67, 0x42, 0x6D, 0x6C, 0x42, 0x6D, 0x6D, 0x42,\n\t0x6D, 0x73, 0x42, 0x6E, 0x41, 0x42, 0x6E, 0x46,\n\t0x42, 0x6E, 0x56, 0x42, 0x6E, 0x57, 0x42, 0x6E,\n\t// Bytes 1a40 - 1a7f\n\t0x6A, 0x42, 0x6E, 0x6D, 0x42, 0x6E, 0x73, 0x42,\n\t0x6F, 0x56, 0x42, 0x70, 0x41, 0x42, 0x70, 0x46,\n\t0x42, 0x70, 0x56, 0x42, 0x70, 0x57, 0x42, 0x70,\n\t0x63, 0x42, 0x70, 0x73, 0x42, 0x73, 0x72, 0x42,\n\t0x73, 0x74, 0x42, 0x76, 0x69, 0x42, 0x78, 0x69,\n\t0x43, 0x28, 0x31, 0x29, 0x43, 0x28, 0x32, 0x29,\n\t0x43, 0x28, 0x33, 0x29, 0x43, 0x28, 0x34, 0x29,\n\t0x43, 0x28, 0x35, 0x29, 0x43, 0x28, 0x36, 0x29,\n\t// Bytes 1a80 - 1abf\n\t0x43, 0x28, 0x37, 0x29, 0x43, 0x28, 0x38, 0x29,\n\t0x43, 0x28, 0x39, 0x29, 0x43, 0x28, 0x41, 0x29,\n\t0x43, 0x28, 0x42, 0x29, 0x43, 0x28, 0x43, 0x29,\n\t0x43, 0x28, 0x44, 0x29, 0x43, 0x28, 0x45, 0x29,\n\t0x43, 0x28, 0x46, 0x29, 0x43, 0x28, 0x47, 0x29,\n\t0x43, 0x28, 0x48, 0x29, 0x43, 0x28, 0x49, 0x29,\n\t0x43, 0x28, 0x4A, 0x29, 0x43, 0x28, 0x4B, 0x29,\n\t0x43, 0x28, 0x4C, 0x29, 0x43, 0x28, 0x4D, 0x29,\n\t// Bytes 1ac0 - 1aff\n\t0x43, 0x28, 0x4E, 0x29, 0x43, 0x28, 0x4F, 0x29,\n\t0x43, 0x28, 0x50, 0x29, 0x43, 0x28, 0x51, 0x29,\n\t0x43, 0x28, 0x52, 0x29, 0x43, 0x28, 0x53, 0x29,\n\t0x43, 0x28, 0x54, 0x29, 0x43, 0x28, 0x55, 0x29,\n\t0x43, 0x28, 0x56, 0x29, 0x43, 0x28, 0x57, 0x29,\n\t0x43, 0x28, 0x58, 0x29, 0x43, 0x28, 0x59, 0x29,\n\t0x43, 0x28, 0x5A, 0x29, 0x43, 0x28, 0x61, 0x29,\n\t0x43, 0x28, 0x62, 0x29, 0x43, 0x28, 0x63, 0x29,\n\t// Bytes 1b00 - 1b3f\n\t0x43, 0x28, 0x64, 0x29, 0x43, 0x28, 0x65, 0x29,\n\t0x43, 0x28, 0x66, 0x29, 0x43, 0x28, 0x67, 0x29,\n\t0x43, 0x28, 0x68, 0x29, 0x43, 0x28, 0x69, 0x29,\n\t0x43, 0x28, 0x6A, 0x29, 0x43, 0x28, 0x6B, 0x29,\n\t0x43, 0x28, 0x6C, 0x29, 0x43, 0x28, 0x6D, 0x29,\n\t0x43, 0x28, 0x6E, 0x29, 0x43, 0x28, 0x6F, 0x29,\n\t0x43, 0x28, 0x70, 0x29, 0x43, 0x28, 0x71, 0x29,\n\t0x43, 0x28, 0x72, 0x29, 0x43, 0x28, 0x73, 0x29,\n\t// Bytes 1b40 - 1b7f\n\t0x43, 0x28, 0x74, 0x29, 0x43, 0x28, 0x75, 0x29,\n\t0x43, 0x28, 0x76, 0x29, 0x43, 0x28, 0x77, 0x29,\n\t0x43, 0x28, 0x78, 0x29, 0x43, 0x28, 0x79, 0x29,\n\t0x43, 0x28, 0x7A, 0x29, 0x43, 0x2E, 0x2E, 0x2E,\n\t0x43, 0x31, 0x30, 0x2E, 0x43, 0x31, 0x31, 0x2E,\n\t0x43, 0x31, 0x32, 0x2E, 0x43, 0x31, 0x33, 0x2E,\n\t0x43, 0x31, 0x34, 0x2E, 0x43, 0x31, 0x35, 0x2E,\n\t0x43, 0x31, 0x36, 0x2E, 0x43, 0x31, 0x37, 0x2E,\n\t// Bytes 1b80 - 1bbf\n\t0x43, 0x31, 0x38, 0x2E, 0x43, 0x31, 0x39, 0x2E,\n\t0x43, 0x32, 0x30, 0x2E, 0x43, 0x3A, 0x3A, 0x3D,\n\t0x43, 0x3D, 0x3D, 0x3D, 0x43, 0x43, 0x6F, 0x2E,\n\t0x43, 0x46, 0x41, 0x58, 0x43, 0x47, 0x48, 0x7A,\n\t0x43, 0x47, 0x50, 0x61, 0x43, 0x49, 0x49, 0x49,\n\t0x43, 0x4C, 0x54, 0x44, 0x43, 0x4C, 0xC2, 0xB7,\n\t0x43, 0x4D, 0x48, 0x7A, 0x43, 0x4D, 0x50, 0x61,\n\t0x43, 0x4D, 0xCE, 0xA9, 0x43, 0x50, 0x50, 0x4D,\n\t// Bytes 1bc0 - 1bff\n\t0x43, 0x50, 0x50, 0x56, 0x43, 0x50, 0x54, 0x45,\n\t0x43, 0x54, 0x45, 0x4C, 0x43, 0x54, 0x48, 0x7A,\n\t0x43, 0x56, 0x49, 0x49, 0x43, 0x58, 0x49, 0x49,\n\t0x43, 0x61, 0x2F, 0x63, 0x43, 0x61, 0x2F, 0x73,\n\t0x43, 0x61, 0xCA, 0xBE, 0x43, 0x62, 0x61, 0x72,\n\t0x43, 0x63, 0x2F, 0x6F, 0x43, 0x63, 0x2F, 0x75,\n\t0x43, 0x63, 0x61, 0x6C, 0x43, 0x63, 0x6D, 0x32,\n\t0x43, 0x63, 0x6D, 0x33, 0x43, 0x64, 0x6D, 0x32,\n\t// Bytes 1c00 - 1c3f\n\t0x43, 0x64, 0x6D, 0x33, 0x43, 0x65, 0x72, 0x67,\n\t0x43, 0x66, 0x66, 0x69, 0x43, 0x66, 0x66, 0x6C,\n\t0x43, 0x67, 0x61, 0x6C, 0x43, 0x68, 0x50, 0x61,\n\t0x43, 0x69, 0x69, 0x69, 0x43, 0x6B, 0x48, 0x7A,\n\t0x43, 0x6B, 0x50, 0x61, 0x43, 0x6B, 0x6D, 0x32,\n\t0x43, 0x6B, 0x6D, 0x33, 0x43, 0x6B, 0xCE, 0xA9,\n\t0x43, 0x6C, 0x6F, 0x67, 0x43, 0x6C, 0xC2, 0xB7,\n\t0x43, 0x6D, 0x69, 0x6C, 0x43, 0x6D, 0x6D, 0x32,\n\t// Bytes 1c40 - 1c7f\n\t0x43, 0x6D, 0x6D, 0x33, 0x43, 0x6D, 0x6F, 0x6C,\n\t0x43, 0x72, 0x61, 0x64, 0x43, 0x76, 0x69, 0x69,\n\t0x43, 0x78, 0x69, 0x69, 0x43, 0xC2, 0xB0, 0x43,\n\t0x43, 0xC2, 0xB0, 0x46, 0x43, 0xCA, 0xBC, 0x6E,\n\t0x43, 0xCE, 0xBC, 0x41, 0x43, 0xCE, 0xBC, 0x46,\n\t0x43, 0xCE, 0xBC, 0x56, 0x43, 0xCE, 0xBC, 0x57,\n\t0x43, 0xCE, 0xBC, 0x67, 0x43, 0xCE, 0xBC, 0x6C,\n\t0x43, 0xCE, 0xBC, 0x6D, 0x43, 0xCE, 0xBC, 0x73,\n\t// Bytes 1c80 - 1cbf\n\t0x44, 0x28, 0x31, 0x30, 0x29, 0x44, 0x28, 0x31,\n\t0x31, 0x29, 0x44, 0x28, 0x31, 0x32, 0x29, 0x44,\n\t0x28, 0x31, 0x33, 0x29, 0x44, 0x28, 0x31, 0x34,\n\t0x29, 0x44, 0x28, 0x31, 0x35, 0x29, 0x44, 0x28,\n\t0x31, 0x36, 0x29, 0x44, 0x28, 0x31, 0x37, 0x29,\n\t0x44, 0x28, 0x31, 0x38, 0x29, 0x44, 0x28, 0x31,\n\t0x39, 0x29, 0x44, 0x28, 0x32, 0x30, 0x29, 0x44,\n\t0x30, 0xE7, 0x82, 0xB9, 0x44, 0x31, 0xE2, 0x81,\n\t// Bytes 1cc0 - 1cff\n\t0x84, 0x44, 0x31, 0xE6, 0x97, 0xA5, 0x44, 0x31,\n\t0xE6, 0x9C, 0x88, 0x44, 0x31, 0xE7, 0x82, 0xB9,\n\t0x44, 0x32, 0xE6, 0x97, 0xA5, 0x44, 0x32, 0xE6,\n\t0x9C, 0x88, 0x44, 0x32, 0xE7, 0x82, 0xB9, 0x44,\n\t0x33, 0xE6, 0x97, 0xA5, 0x44, 0x33, 0xE6, 0x9C,\n\t0x88, 0x44, 0x33, 0xE7, 0x82, 0xB9, 0x44, 0x34,\n\t0xE6, 0x97, 0xA5, 0x44, 0x34, 0xE6, 0x9C, 0x88,\n\t0x44, 0x34, 0xE7, 0x82, 0xB9, 0x44, 0x35, 0xE6,\n\t// Bytes 1d00 - 1d3f\n\t0x97, 0xA5, 0x44, 0x35, 0xE6, 0x9C, 0x88, 0x44,\n\t0x35, 0xE7, 0x82, 0xB9, 0x44, 0x36, 0xE6, 0x97,\n\t0xA5, 0x44, 0x36, 0xE6, 0x9C, 0x88, 0x44, 0x36,\n\t0xE7, 0x82, 0xB9, 0x44, 0x37, 0xE6, 0x97, 0xA5,\n\t0x44, 0x37, 0xE6, 0x9C, 0x88, 0x44, 0x37, 0xE7,\n\t0x82, 0xB9, 0x44, 0x38, 0xE6, 0x97, 0xA5, 0x44,\n\t0x38, 0xE6, 0x9C, 0x88, 0x44, 0x38, 0xE7, 0x82,\n\t0xB9, 0x44, 0x39, 0xE6, 0x97, 0xA5, 0x44, 0x39,\n\t// Bytes 1d40 - 1d7f\n\t0xE6, 0x9C, 0x88, 0x44, 0x39, 0xE7, 0x82, 0xB9,\n\t0x44, 0x56, 0x49, 0x49, 0x49, 0x44, 0x61, 0x2E,\n\t0x6D, 0x2E, 0x44, 0x6B, 0x63, 0x61, 0x6C, 0x44,\n\t0x70, 0x2E, 0x6D, 0x2E, 0x44, 0x76, 0x69, 0x69,\n\t0x69, 0x44, 0xD5, 0xA5, 0xD6, 0x82, 0x44, 0xD5,\n\t0xB4, 0xD5, 0xA5, 0x44, 0xD5, 0xB4, 0xD5, 0xAB,\n\t0x44, 0xD5, 0xB4, 0xD5, 0xAD, 0x44, 0xD5, 0xB4,\n\t0xD5, 0xB6, 0x44, 0xD5, 0xBE, 0xD5, 0xB6, 0x44,\n\t// Bytes 1d80 - 1dbf\n\t0xD7, 0x90, 0xD7, 0x9C, 0x44, 0xD8, 0xA7, 0xD9,\n\t0xB4, 0x44, 0xD8, 0xA8, 0xD8, 0xAC, 0x44, 0xD8,\n\t0xA8, 0xD8, 0xAD, 0x44, 0xD8, 0xA8, 0xD8, 0xAE,\n\t0x44, 0xD8, 0xA8, 0xD8, 0xB1, 0x44, 0xD8, 0xA8,\n\t0xD8, 0xB2, 0x44, 0xD8, 0xA8, 0xD9, 0x85, 0x44,\n\t0xD8, 0xA8, 0xD9, 0x86, 0x44, 0xD8, 0xA8, 0xD9,\n\t0x87, 0x44, 0xD8, 0xA8, 0xD9, 0x89, 0x44, 0xD8,\n\t0xA8, 0xD9, 0x8A, 0x44, 0xD8, 0xAA, 0xD8, 0xAC,\n\t// Bytes 1dc0 - 1dff\n\t0x44, 0xD8, 0xAA, 0xD8, 0xAD, 0x44, 0xD8, 0xAA,\n\t0xD8, 0xAE, 0x44, 0xD8, 0xAA, 0xD8, 0xB1, 0x44,\n\t0xD8, 0xAA, 0xD8, 0xB2, 0x44, 0xD8, 0xAA, 0xD9,\n\t0x85, 0x44, 0xD8, 0xAA, 0xD9, 0x86, 0x44, 0xD8,\n\t0xAA, 0xD9, 0x87, 0x44, 0xD8, 0xAA, 0xD9, 0x89,\n\t0x44, 0xD8, 0xAA, 0xD9, 0x8A, 0x44, 0xD8, 0xAB,\n\t0xD8, 0xAC, 0x44, 0xD8, 0xAB, 0xD8, 0xB1, 0x44,\n\t0xD8, 0xAB, 0xD8, 0xB2, 0x44, 0xD8, 0xAB, 0xD9,\n\t// Bytes 1e00 - 1e3f\n\t0x85, 0x44, 0xD8, 0xAB, 0xD9, 0x86, 0x44, 0xD8,\n\t0xAB, 0xD9, 0x87, 0x44, 0xD8, 0xAB, 0xD9, 0x89,\n\t0x44, 0xD8, 0xAB, 0xD9, 0x8A, 0x44, 0xD8, 0xAC,\n\t0xD8, 0xAD, 0x44, 0xD8, 0xAC, 0xD9, 0x85, 0x44,\n\t0xD8, 0xAC, 0xD9, 0x89, 0x44, 0xD8, 0xAC, 0xD9,\n\t0x8A, 0x44, 0xD8, 0xAD, 0xD8, 0xAC, 0x44, 0xD8,\n\t0xAD, 0xD9, 0x85, 0x44, 0xD8, 0xAD, 0xD9, 0x89,\n\t0x44, 0xD8, 0xAD, 0xD9, 0x8A, 0x44, 0xD8, 0xAE,\n\t// Bytes 1e40 - 1e7f\n\t0xD8, 0xAC, 0x44, 0xD8, 0xAE, 0xD8, 0xAD, 0x44,\n\t0xD8, 0xAE, 0xD9, 0x85, 0x44, 0xD8, 0xAE, 0xD9,\n\t0x89, 0x44, 0xD8, 0xAE, 0xD9, 0x8A, 0x44, 0xD8,\n\t0xB3, 0xD8, 0xAC, 0x44, 0xD8, 0xB3, 0xD8, 0xAD,\n\t0x44, 0xD8, 0xB3, 0xD8, 0xAE, 0x44, 0xD8, 0xB3,\n\t0xD8, 0xB1, 0x44, 0xD8, 0xB3, 0xD9, 0x85, 0x44,\n\t0xD8, 0xB3, 0xD9, 0x87, 0x44, 0xD8, 0xB3, 0xD9,\n\t0x89, 0x44, 0xD8, 0xB3, 0xD9, 0x8A, 0x44, 0xD8,\n\t// Bytes 1e80 - 1ebf\n\t0xB4, 0xD8, 0xAC, 0x44, 0xD8, 0xB4, 0xD8, 0xAD,\n\t0x44, 0xD8, 0xB4, 0xD8, 0xAE, 0x44, 0xD8, 0xB4,\n\t0xD8, 0xB1, 0x44, 0xD8, 0xB4, 0xD9, 0x85, 0x44,\n\t0xD8, 0xB4, 0xD9, 0x87, 0x44, 0xD8, 0xB4, 0xD9,\n\t0x89, 0x44, 0xD8, 0xB4, 0xD9, 0x8A, 0x44, 0xD8,\n\t0xB5, 0xD8, 0xAD, 0x44, 0xD8, 0xB5, 0xD8, 0xAE,\n\t0x44, 0xD8, 0xB5, 0xD8, 0xB1, 0x44, 0xD8, 0xB5,\n\t0xD9, 0x85, 0x44, 0xD8, 0xB5, 0xD9, 0x89, 0x44,\n\t// Bytes 1ec0 - 1eff\n\t0xD8, 0xB5, 0xD9, 0x8A, 0x44, 0xD8, 0xB6, 0xD8,\n\t0xAC, 0x44, 0xD8, 0xB6, 0xD8, 0xAD, 0x44, 0xD8,\n\t0xB6, 0xD8, 0xAE, 0x44, 0xD8, 0xB6, 0xD8, 0xB1,\n\t0x44, 0xD8, 0xB6, 0xD9, 0x85, 0x44, 0xD8, 0xB6,\n\t0xD9, 0x89, 0x44, 0xD8, 0xB6, 0xD9, 0x8A, 0x44,\n\t0xD8, 0xB7, 0xD8, 0xAD, 0x44, 0xD8, 0xB7, 0xD9,\n\t0x85, 0x44, 0xD8, 0xB7, 0xD9, 0x89, 0x44, 0xD8,\n\t0xB7, 0xD9, 0x8A, 0x44, 0xD8, 0xB8, 0xD9, 0x85,\n\t// Bytes 1f00 - 1f3f\n\t0x44, 0xD8, 0xB9, 0xD8, 0xAC, 0x44, 0xD8, 0xB9,\n\t0xD9, 0x85, 0x44, 0xD8, 0xB9, 0xD9, 0x89, 0x44,\n\t0xD8, 0xB9, 0xD9, 0x8A, 0x44, 0xD8, 0xBA, 0xD8,\n\t0xAC, 0x44, 0xD8, 0xBA, 0xD9, 0x85, 0x44, 0xD8,\n\t0xBA, 0xD9, 0x89, 0x44, 0xD8, 0xBA, 0xD9, 0x8A,\n\t0x44, 0xD9, 0x81, 0xD8, 0xAC, 0x44, 0xD9, 0x81,\n\t0xD8, 0xAD, 0x44, 0xD9, 0x81, 0xD8, 0xAE, 0x44,\n\t0xD9, 0x81, 0xD9, 0x85, 0x44, 0xD9, 0x81, 0xD9,\n\t// Bytes 1f40 - 1f7f\n\t0x89, 0x44, 0xD9, 0x81, 0xD9, 0x8A, 0x44, 0xD9,\n\t0x82, 0xD8, 0xAD, 0x44, 0xD9, 0x82, 0xD9, 0x85,\n\t0x44, 0xD9, 0x82, 0xD9, 0x89, 0x44, 0xD9, 0x82,\n\t0xD9, 0x8A, 0x44, 0xD9, 0x83, 0xD8, 0xA7, 0x44,\n\t0xD9, 0x83, 0xD8, 0xAC, 0x44, 0xD9, 0x83, 0xD8,\n\t0xAD, 0x44, 0xD9, 0x83, 0xD8, 0xAE, 0x44, 0xD9,\n\t0x83, 0xD9, 0x84, 0x44, 0xD9, 0x83, 0xD9, 0x85,\n\t0x44, 0xD9, 0x83, 0xD9, 0x89, 0x44, 0xD9, 0x83,\n\t// Bytes 1f80 - 1fbf\n\t0xD9, 0x8A, 0x44, 0xD9, 0x84, 0xD8, 0xA7, 0x44,\n\t0xD9, 0x84, 0xD8, 0xAC, 0x44, 0xD9, 0x84, 0xD8,\n\t0xAD, 0x44, 0xD9, 0x84, 0xD8, 0xAE, 0x44, 0xD9,\n\t0x84, 0xD9, 0x85, 0x44, 0xD9, 0x84, 0xD9, 0x87,\n\t0x44, 0xD9, 0x84, 0xD9, 0x89, 0x44, 0xD9, 0x84,\n\t0xD9, 0x8A, 0x44, 0xD9, 0x85, 0xD8, 0xA7, 0x44,\n\t0xD9, 0x85, 0xD8, 0xAC, 0x44, 0xD9, 0x85, 0xD8,\n\t0xAD, 0x44, 0xD9, 0x85, 0xD8, 0xAE, 0x44, 0xD9,\n\t// Bytes 1fc0 - 1fff\n\t0x85, 0xD9, 0x85, 0x44, 0xD9, 0x85, 0xD9, 0x89,\n\t0x44, 0xD9, 0x85, 0xD9, 0x8A, 0x44, 0xD9, 0x86,\n\t0xD8, 0xAC, 0x44, 0xD9, 0x86, 0xD8, 0xAD, 0x44,\n\t0xD9, 0x86, 0xD8, 0xAE, 0x44, 0xD9, 0x86, 0xD8,\n\t0xB1, 0x44, 0xD9, 0x86, 0xD8, 0xB2, 0x44, 0xD9,\n\t0x86, 0xD9, 0x85, 0x44, 0xD9, 0x86, 0xD9, 0x86,\n\t0x44, 0xD9, 0x86, 0xD9, 0x87, 0x44, 0xD9, 0x86,\n\t0xD9, 0x89, 0x44, 0xD9, 0x86, 0xD9, 0x8A, 0x44,\n\t// Bytes 2000 - 203f\n\t0xD9, 0x87, 0xD8, 0xAC, 0x44, 0xD9, 0x87, 0xD9,\n\t0x85, 0x44, 0xD9, 0x87, 0xD9, 0x89, 0x44, 0xD9,\n\t0x87, 0xD9, 0x8A, 0x44, 0xD9, 0x88, 0xD9, 0xB4,\n\t0x44, 0xD9, 0x8A, 0xD8, 0xAC, 0x44, 0xD9, 0x8A,\n\t0xD8, 0xAD, 0x44, 0xD9, 0x8A, 0xD8, 0xAE, 0x44,\n\t0xD9, 0x8A, 0xD8, 0xB1, 0x44, 0xD9, 0x8A, 0xD8,\n\t0xB2, 0x44, 0xD9, 0x8A, 0xD9, 0x85, 0x44, 0xD9,\n\t0x8A, 0xD9, 0x86, 0x44, 0xD9, 0x8A, 0xD9, 0x87,\n\t// Bytes 2040 - 207f\n\t0x44, 0xD9, 0x8A, 0xD9, 0x89, 0x44, 0xD9, 0x8A,\n\t0xD9, 0x8A, 0x44, 0xD9, 0x8A, 0xD9, 0xB4, 0x44,\n\t0xDB, 0x87, 0xD9, 0xB4, 0x45, 0x28, 0xE1, 0x84,\n\t0x80, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x82, 0x29,\n\t0x45, 0x28, 0xE1, 0x84, 0x83, 0x29, 0x45, 0x28,\n\t0xE1, 0x84, 0x85, 0x29, 0x45, 0x28, 0xE1, 0x84,\n\t0x86, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x87, 0x29,\n\t0x45, 0x28, 0xE1, 0x84, 0x89, 0x29, 0x45, 0x28,\n\t// Bytes 2080 - 20bf\n\t0xE1, 0x84, 0x8B, 0x29, 0x45, 0x28, 0xE1, 0x84,\n\t0x8C, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x8E, 0x29,\n\t0x45, 0x28, 0xE1, 0x84, 0x8F, 0x29, 0x45, 0x28,\n\t0xE1, 0x84, 0x90, 0x29, 0x45, 0x28, 0xE1, 0x84,\n\t0x91, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x92, 0x29,\n\t0x45, 0x28, 0xE4, 0xB8, 0x80, 0x29, 0x45, 0x28,\n\t0xE4, 0xB8, 0x83, 0x29, 0x45, 0x28, 0xE4, 0xB8,\n\t0x89, 0x29, 0x45, 0x28, 0xE4, 0xB9, 0x9D, 0x29,\n\t// Bytes 20c0 - 20ff\n\t0x45, 0x28, 0xE4, 0xBA, 0x8C, 0x29, 0x45, 0x28,\n\t0xE4, 0xBA, 0x94, 0x29, 0x45, 0x28, 0xE4, 0xBB,\n\t0xA3, 0x29, 0x45, 0x28, 0xE4, 0xBC, 0x81, 0x29,\n\t0x45, 0x28, 0xE4, 0xBC, 0x91, 0x29, 0x45, 0x28,\n\t0xE5, 0x85, 0xAB, 0x29, 0x45, 0x28, 0xE5, 0x85,\n\t0xAD, 0x29, 0x45, 0x28, 0xE5, 0x8A, 0xB4, 0x29,\n\t0x45, 0x28, 0xE5, 0x8D, 0x81, 0x29, 0x45, 0x28,\n\t0xE5, 0x8D, 0x94, 0x29, 0x45, 0x28, 0xE5, 0x90,\n\t// Bytes 2100 - 213f\n\t0x8D, 0x29, 0x45, 0x28, 0xE5, 0x91, 0xBC, 0x29,\n\t0x45, 0x28, 0xE5, 0x9B, 0x9B, 0x29, 0x45, 0x28,\n\t0xE5, 0x9C, 0x9F, 0x29, 0x45, 0x28, 0xE5, 0xAD,\n\t0xA6, 0x29, 0x45, 0x28, 0xE6, 0x97, 0xA5, 0x29,\n\t0x45, 0x28, 0xE6, 0x9C, 0x88, 0x29, 0x45, 0x28,\n\t0xE6, 0x9C, 0x89, 0x29, 0x45, 0x28, 0xE6, 0x9C,\n\t0xA8, 0x29, 0x45, 0x28, 0xE6, 0xA0, 0xAA, 0x29,\n\t0x45, 0x28, 0xE6, 0xB0, 0xB4, 0x29, 0x45, 0x28,\n\t// Bytes 2140 - 217f\n\t0xE7, 0x81, 0xAB, 0x29, 0x45, 0x28, 0xE7, 0x89,\n\t0xB9, 0x29, 0x45, 0x28, 0xE7, 0x9B, 0xA3, 0x29,\n\t0x45, 0x28, 0xE7, 0xA4, 0xBE, 0x29, 0x45, 0x28,\n\t0xE7, 0xA5, 0x9D, 0x29, 0x45, 0x28, 0xE7, 0xA5,\n\t0xAD, 0x29, 0x45, 0x28, 0xE8, 0x87, 0xAA, 0x29,\n\t0x45, 0x28, 0xE8, 0x87, 0xB3, 0x29, 0x45, 0x28,\n\t0xE8, 0xB2, 0xA1, 0x29, 0x45, 0x28, 0xE8, 0xB3,\n\t0x87, 0x29, 0x45, 0x28, 0xE9, 0x87, 0x91, 0x29,\n\t// Bytes 2180 - 21bf\n\t0x45, 0x30, 0xE2, 0x81, 0x84, 0x33, 0x45, 0x31,\n\t0x30, 0xE6, 0x97, 0xA5, 0x45, 0x31, 0x30, 0xE6,\n\t0x9C, 0x88, 0x45, 0x31, 0x30, 0xE7, 0x82, 0xB9,\n\t0x45, 0x31, 0x31, 0xE6, 0x97, 0xA5, 0x45, 0x31,\n\t0x31, 0xE6, 0x9C, 0x88, 0x45, 0x31, 0x31, 0xE7,\n\t0x82, 0xB9, 0x45, 0x31, 0x32, 0xE6, 0x97, 0xA5,\n\t0x45, 0x31, 0x32, 0xE6, 0x9C, 0x88, 0x45, 0x31,\n\t0x32, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x33, 0xE6,\n\t// Bytes 21c0 - 21ff\n\t0x97, 0xA5, 0x45, 0x31, 0x33, 0xE7, 0x82, 0xB9,\n\t0x45, 0x31, 0x34, 0xE6, 0x97, 0xA5, 0x45, 0x31,\n\t0x34, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x35, 0xE6,\n\t0x97, 0xA5, 0x45, 0x31, 0x35, 0xE7, 0x82, 0xB9,\n\t0x45, 0x31, 0x36, 0xE6, 0x97, 0xA5, 0x45, 0x31,\n\t0x36, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x37, 0xE6,\n\t0x97, 0xA5, 0x45, 0x31, 0x37, 0xE7, 0x82, 0xB9,\n\t0x45, 0x31, 0x38, 0xE6, 0x97, 0xA5, 0x45, 0x31,\n\t// Bytes 2200 - 223f\n\t0x38, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x39, 0xE6,\n\t0x97, 0xA5, 0x45, 0x31, 0x39, 0xE7, 0x82, 0xB9,\n\t0x45, 0x31, 0xE2, 0x81, 0x84, 0x32, 0x45, 0x31,\n\t0xE2, 0x81, 0x84, 0x33, 0x45, 0x31, 0xE2, 0x81,\n\t0x84, 0x34, 0x45, 0x31, 0xE2, 0x81, 0x84, 0x35,\n\t0x45, 0x31, 0xE2, 0x81, 0x84, 0x36, 0x45, 0x31,\n\t0xE2, 0x81, 0x84, 0x37, 0x45, 0x31, 0xE2, 0x81,\n\t0x84, 0x38, 0x45, 0x31, 0xE2, 0x81, 0x84, 0x39,\n\t// Bytes 2240 - 227f\n\t0x45, 0x32, 0x30, 0xE6, 0x97, 0xA5, 0x45, 0x32,\n\t0x30, 0xE7, 0x82, 0xB9, 0x45, 0x32, 0x31, 0xE6,\n\t0x97, 0xA5, 0x45, 0x32, 0x31, 0xE7, 0x82, 0xB9,\n\t0x45, 0x32, 0x32, 0xE6, 0x97, 0xA5, 0x45, 0x32,\n\t0x32, 0xE7, 0x82, 0xB9, 0x45, 0x32, 0x33, 0xE6,\n\t0x97, 0xA5, 0x45, 0x32, 0x33, 0xE7, 0x82, 0xB9,\n\t0x45, 0x32, 0x34, 0xE6, 0x97, 0xA5, 0x45, 0x32,\n\t0x34, 0xE7, 0x82, 0xB9, 0x45, 0x32, 0x35, 0xE6,\n\t// Bytes 2280 - 22bf\n\t0x97, 0xA5, 0x45, 0x32, 0x36, 0xE6, 0x97, 0xA5,\n\t0x45, 0x32, 0x37, 0xE6, 0x97, 0xA5, 0x45, 0x32,\n\t0x38, 0xE6, 0x97, 0xA5, 0x45, 0x32, 0x39, 0xE6,\n\t0x97, 0xA5, 0x45, 0x32, 0xE2, 0x81, 0x84, 0x33,\n\t0x45, 0x32, 0xE2, 0x81, 0x84, 0x35, 0x45, 0x33,\n\t0x30, 0xE6, 0x97, 0xA5, 0x45, 0x33, 0x31, 0xE6,\n\t0x97, 0xA5, 0x45, 0x33, 0xE2, 0x81, 0x84, 0x34,\n\t0x45, 0x33, 0xE2, 0x81, 0x84, 0x35, 0x45, 0x33,\n\t// Bytes 22c0 - 22ff\n\t0xE2, 0x81, 0x84, 0x38, 0x45, 0x34, 0xE2, 0x81,\n\t0x84, 0x35, 0x45, 0x35, 0xE2, 0x81, 0x84, 0x36,\n\t0x45, 0x35, 0xE2, 0x81, 0x84, 0x38, 0x45, 0x37,\n\t0xE2, 0x81, 0x84, 0x38, 0x45, 0x41, 0xE2, 0x88,\n\t0x95, 0x6D, 0x45, 0x56, 0xE2, 0x88, 0x95, 0x6D,\n\t0x45, 0x6D, 0xE2, 0x88, 0x95, 0x73, 0x46, 0x31,\n\t0xE2, 0x81, 0x84, 0x31, 0x30, 0x46, 0x43, 0xE2,\n\t0x88, 0x95, 0x6B, 0x67, 0x46, 0x6D, 0xE2, 0x88,\n\t// Bytes 2300 - 233f\n\t0x95, 0x73, 0x32, 0x46, 0xD8, 0xA8, 0xD8, 0xAD,\n\t0xD9, 0x8A, 0x46, 0xD8, 0xA8, 0xD8, 0xAE, 0xD9,\n\t0x8A, 0x46, 0xD8, 0xAA, 0xD8, 0xAC, 0xD9, 0x85,\n\t0x46, 0xD8, 0xAA, 0xD8, 0xAC, 0xD9, 0x89, 0x46,\n\t0xD8, 0xAA, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD8,\n\t0xAA, 0xD8, 0xAD, 0xD8, 0xAC, 0x46, 0xD8, 0xAA,\n\t0xD8, 0xAD, 0xD9, 0x85, 0x46, 0xD8, 0xAA, 0xD8,\n\t0xAE, 0xD9, 0x85, 0x46, 0xD8, 0xAA, 0xD8, 0xAE,\n\t// Bytes 2340 - 237f\n\t0xD9, 0x89, 0x46, 0xD8, 0xAA, 0xD8, 0xAE, 0xD9,\n\t0x8A, 0x46, 0xD8, 0xAA, 0xD9, 0x85, 0xD8, 0xAC,\n\t0x46, 0xD8, 0xAA, 0xD9, 0x85, 0xD8, 0xAD, 0x46,\n\t0xD8, 0xAA, 0xD9, 0x85, 0xD8, 0xAE, 0x46, 0xD8,\n\t0xAA, 0xD9, 0x85, 0xD9, 0x89, 0x46, 0xD8, 0xAA,\n\t0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD8, 0xAC, 0xD8,\n\t0xAD, 0xD9, 0x89, 0x46, 0xD8, 0xAC, 0xD8, 0xAD,\n\t0xD9, 0x8A, 0x46, 0xD8, 0xAC, 0xD9, 0x85, 0xD8,\n\t// Bytes 2380 - 23bf\n\t0xAD, 0x46, 0xD8, 0xAC, 0xD9, 0x85, 0xD9, 0x89,\n\t0x46, 0xD8, 0xAC, 0xD9, 0x85, 0xD9, 0x8A, 0x46,\n\t0xD8, 0xAD, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD8,\n\t0xAD, 0xD9, 0x85, 0xD9, 0x89, 0x46, 0xD8, 0xAD,\n\t0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD8, 0xB3, 0xD8,\n\t0xAC, 0xD8, 0xAD, 0x46, 0xD8, 0xB3, 0xD8, 0xAC,\n\t0xD9, 0x89, 0x46, 0xD8, 0xB3, 0xD8, 0xAD, 0xD8,\n\t0xAC, 0x46, 0xD8, 0xB3, 0xD8, 0xAE, 0xD9, 0x89,\n\t// Bytes 23c0 - 23ff\n\t0x46, 0xD8, 0xB3, 0xD8, 0xAE, 0xD9, 0x8A, 0x46,\n\t0xD8, 0xB3, 0xD9, 0x85, 0xD8, 0xAC, 0x46, 0xD8,\n\t0xB3, 0xD9, 0x85, 0xD8, 0xAD, 0x46, 0xD8, 0xB3,\n\t0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD8, 0xB4, 0xD8,\n\t0xAC, 0xD9, 0x8A, 0x46, 0xD8, 0xB4, 0xD8, 0xAD,\n\t0xD9, 0x85, 0x46, 0xD8, 0xB4, 0xD8, 0xAD, 0xD9,\n\t0x8A, 0x46, 0xD8, 0xB4, 0xD9, 0x85, 0xD8, 0xAE,\n\t0x46, 0xD8, 0xB4, 0xD9, 0x85, 0xD9, 0x85, 0x46,\n\t// Bytes 2400 - 243f\n\t0xD8, 0xB5, 0xD8, 0xAD, 0xD8, 0xAD, 0x46, 0xD8,\n\t0xB5, 0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD8, 0xB5,\n\t0xD9, 0x84, 0xD9, 0x89, 0x46, 0xD8, 0xB5, 0xD9,\n\t0x84, 0xDB, 0x92, 0x46, 0xD8, 0xB5, 0xD9, 0x85,\n\t0xD9, 0x85, 0x46, 0xD8, 0xB6, 0xD8, 0xAD, 0xD9,\n\t0x89, 0x46, 0xD8, 0xB6, 0xD8, 0xAD, 0xD9, 0x8A,\n\t0x46, 0xD8, 0xB6, 0xD8, 0xAE, 0xD9, 0x85, 0x46,\n\t0xD8, 0xB7, 0xD9, 0x85, 0xD8, 0xAD, 0x46, 0xD8,\n\t// Bytes 2440 - 247f\n\t0xB7, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD8, 0xB7,\n\t0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD8, 0xB9, 0xD8,\n\t0xAC, 0xD9, 0x85, 0x46, 0xD8, 0xB9, 0xD9, 0x85,\n\t0xD9, 0x85, 0x46, 0xD8, 0xB9, 0xD9, 0x85, 0xD9,\n\t0x89, 0x46, 0xD8, 0xB9, 0xD9, 0x85, 0xD9, 0x8A,\n\t0x46, 0xD8, 0xBA, 0xD9, 0x85, 0xD9, 0x85, 0x46,\n\t0xD8, 0xBA, 0xD9, 0x85, 0xD9, 0x89, 0x46, 0xD8,\n\t0xBA, 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x81,\n\t// Bytes 2480 - 24bf\n\t0xD8, 0xAE, 0xD9, 0x85, 0x46, 0xD9, 0x81, 0xD9,\n\t0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x82, 0xD9, 0x84,\n\t0xDB, 0x92, 0x46, 0xD9, 0x82, 0xD9, 0x85, 0xD8,\n\t0xAD, 0x46, 0xD9, 0x82, 0xD9, 0x85, 0xD9, 0x85,\n\t0x46, 0xD9, 0x82, 0xD9, 0x85, 0xD9, 0x8A, 0x46,\n\t0xD9, 0x83, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD9,\n\t0x83, 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x84,\n\t0xD8, 0xAC, 0xD8, 0xAC, 0x46, 0xD9, 0x84, 0xD8,\n\t// Bytes 24c0 - 24ff\n\t0xAC, 0xD9, 0x85, 0x46, 0xD9, 0x84, 0xD8, 0xAC,\n\t0xD9, 0x8A, 0x46, 0xD9, 0x84, 0xD8, 0xAD, 0xD9,\n\t0x85, 0x46, 0xD9, 0x84, 0xD8, 0xAD, 0xD9, 0x89,\n\t0x46, 0xD9, 0x84, 0xD8, 0xAD, 0xD9, 0x8A, 0x46,\n\t0xD9, 0x84, 0xD8, 0xAE, 0xD9, 0x85, 0x46, 0xD9,\n\t0x84, 0xD9, 0x85, 0xD8, 0xAD, 0x46, 0xD9, 0x84,\n\t0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x85, 0xD8,\n\t0xAC, 0xD8, 0xAD, 0x46, 0xD9, 0x85, 0xD8, 0xAC,\n\t// Bytes 2500 - 253f\n\t0xD8, 0xAE, 0x46, 0xD9, 0x85, 0xD8, 0xAC, 0xD9,\n\t0x85, 0x46, 0xD9, 0x85, 0xD8, 0xAC, 0xD9, 0x8A,\n\t0x46, 0xD9, 0x85, 0xD8, 0xAD, 0xD8, 0xAC, 0x46,\n\t0xD9, 0x85, 0xD8, 0xAD, 0xD9, 0x85, 0x46, 0xD9,\n\t0x85, 0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD9, 0x85,\n\t0xD8, 0xAE, 0xD8, 0xAC, 0x46, 0xD9, 0x85, 0xD8,\n\t0xAE, 0xD9, 0x85, 0x46, 0xD9, 0x85, 0xD8, 0xAE,\n\t0xD9, 0x8A, 0x46, 0xD9, 0x85, 0xD9, 0x85, 0xD9,\n\t// Bytes 2540 - 257f\n\t0x8A, 0x46, 0xD9, 0x86, 0xD8, 0xAC, 0xD8, 0xAD,\n\t0x46, 0xD9, 0x86, 0xD8, 0xAC, 0xD9, 0x85, 0x46,\n\t0xD9, 0x86, 0xD8, 0xAC, 0xD9, 0x89, 0x46, 0xD9,\n\t0x86, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD9, 0x86,\n\t0xD8, 0xAD, 0xD9, 0x85, 0x46, 0xD9, 0x86, 0xD8,\n\t0xAD, 0xD9, 0x89, 0x46, 0xD9, 0x86, 0xD8, 0xAD,\n\t0xD9, 0x8A, 0x46, 0xD9, 0x86, 0xD9, 0x85, 0xD9,\n\t0x89, 0x46, 0xD9, 0x86, 0xD9, 0x85, 0xD9, 0x8A,\n\t// Bytes 2580 - 25bf\n\t0x46, 0xD9, 0x87, 0xD9, 0x85, 0xD8, 0xAC, 0x46,\n\t0xD9, 0x87, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD9,\n\t0x8A, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD9, 0x8A,\n\t0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD9, 0x8A, 0xD9,\n\t0x85, 0xD9, 0x85, 0x46, 0xD9, 0x8A, 0xD9, 0x85,\n\t0xD9, 0x8A, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD8,\n\t0xA7, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xAC,\n\t0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xAD, 0x46,\n\t// Bytes 25c0 - 25ff\n\t0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xAE, 0x46, 0xD9,\n\t0x8A, 0xD9, 0x94, 0xD8, 0xB1, 0x46, 0xD9, 0x8A,\n\t0xD9, 0x94, 0xD8, 0xB2, 0x46, 0xD9, 0x8A, 0xD9,\n\t0x94, 0xD9, 0x85, 0x46, 0xD9, 0x8A, 0xD9, 0x94,\n\t0xD9, 0x86, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD9,\n\t0x87, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x88,\n\t0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x89, 0x46,\n\t0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x8A, 0x46, 0xD9,\n\t// Bytes 2600 - 263f\n\t0x8A, 0xD9, 0x94, 0xDB, 0x86, 0x46, 0xD9, 0x8A,\n\t0xD9, 0x94, 0xDB, 0x87, 0x46, 0xD9, 0x8A, 0xD9,\n\t0x94, 0xDB, 0x88, 0x46, 0xD9, 0x8A, 0xD9, 0x94,\n\t0xDB, 0x90, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xDB,\n\t0x95, 0x46, 0xE0, 0xB9, 0x8D, 0xE0, 0xB8, 0xB2,\n\t0x46, 0xE0, 0xBA, 0xAB, 0xE0, 0xBA, 0x99, 0x46,\n\t0xE0, 0xBA, 0xAB, 0xE0, 0xBA, 0xA1, 0x46, 0xE0,\n\t0xBB, 0x8D, 0xE0, 0xBA, 0xB2, 0x46, 0xE0, 0xBD,\n\t// Bytes 2640 - 267f\n\t0x80, 0xE0, 0xBE, 0xB5, 0x46, 0xE0, 0xBD, 0x82,\n\t0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBD, 0x8C, 0xE0,\n\t0xBE, 0xB7, 0x46, 0xE0, 0xBD, 0x91, 0xE0, 0xBE,\n\t0xB7, 0x46, 0xE0, 0xBD, 0x96, 0xE0, 0xBE, 0xB7,\n\t0x46, 0xE0, 0xBD, 0x9B, 0xE0, 0xBE, 0xB7, 0x46,\n\t0xE0, 0xBE, 0x90, 0xE0, 0xBE, 0xB5, 0x46, 0xE0,\n\t0xBE, 0x92, 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBE,\n\t0x9C, 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBE, 0xA1,\n\t// Bytes 2680 - 26bf\n\t0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBE, 0xA6, 0xE0,\n\t0xBE, 0xB7, 0x46, 0xE0, 0xBE, 0xAB, 0xE0, 0xBE,\n\t0xB7, 0x46, 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2,\n\t0x46, 0xE2, 0x80, 0xB5, 0xE2, 0x80, 0xB5, 0x46,\n\t0xE2, 0x88, 0xAB, 0xE2, 0x88, 0xAB, 0x46, 0xE2,\n\t0x88, 0xAE, 0xE2, 0x88, 0xAE, 0x46, 0xE3, 0x81,\n\t0xBB, 0xE3, 0x81, 0x8B, 0x46, 0xE3, 0x82, 0x88,\n\t0xE3, 0x82, 0x8A, 0x46, 0xE3, 0x82, 0xAD, 0xE3,\n\t// Bytes 26c0 - 26ff\n\t0x83, 0xAD, 0x46, 0xE3, 0x82, 0xB3, 0xE3, 0x82,\n\t0xB3, 0x46, 0xE3, 0x82, 0xB3, 0xE3, 0x83, 0x88,\n\t0x46, 0xE3, 0x83, 0x88, 0xE3, 0x83, 0xB3, 0x46,\n\t0xE3, 0x83, 0x8A, 0xE3, 0x83, 0x8E, 0x46, 0xE3,\n\t0x83, 0x9B, 0xE3, 0x83, 0xB3, 0x46, 0xE3, 0x83,\n\t0x9F, 0xE3, 0x83, 0xAA, 0x46, 0xE3, 0x83, 0xAA,\n\t0xE3, 0x83, 0xA9, 0x46, 0xE3, 0x83, 0xAC, 0xE3,\n\t0x83, 0xA0, 0x46, 0xE5, 0xA4, 0xA7, 0xE6, 0xAD,\n\t// Bytes 2700 - 273f\n\t0xA3, 0x46, 0xE5, 0xB9, 0xB3, 0xE6, 0x88, 0x90,\n\t0x46, 0xE6, 0x98, 0x8E, 0xE6, 0xB2, 0xBB, 0x46,\n\t0xE6, 0x98, 0xAD, 0xE5, 0x92, 0x8C, 0x47, 0x72,\n\t0x61, 0x64, 0xE2, 0x88, 0x95, 0x73, 0x47, 0xE3,\n\t0x80, 0x94, 0x53, 0xE3, 0x80, 0x95, 0x48, 0x28,\n\t0xE1, 0x84, 0x80, 0xE1, 0x85, 0xA1, 0x29, 0x48,\n\t0x28, 0xE1, 0x84, 0x82, 0xE1, 0x85, 0xA1, 0x29,\n\t0x48, 0x28, 0xE1, 0x84, 0x83, 0xE1, 0x85, 0xA1,\n\t// Bytes 2740 - 277f\n\t0x29, 0x48, 0x28, 0xE1, 0x84, 0x85, 0xE1, 0x85,\n\t0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x86, 0xE1,\n\t0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x87,\n\t0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84,\n\t0x89, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1,\n\t0x84, 0x8B, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28,\n\t0xE1, 0x84, 0x8C, 0xE1, 0x85, 0xA1, 0x29, 0x48,\n\t0x28, 0xE1, 0x84, 0x8C, 0xE1, 0x85, 0xAE, 0x29,\n\t// Bytes 2780 - 27bf\n\t0x48, 0x28, 0xE1, 0x84, 0x8E, 0xE1, 0x85, 0xA1,\n\t0x29, 0x48, 0x28, 0xE1, 0x84, 0x8F, 0xE1, 0x85,\n\t0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x90, 0xE1,\n\t0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x91,\n\t0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84,\n\t0x92, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x72, 0x61,\n\t0x64, 0xE2, 0x88, 0x95, 0x73, 0x32, 0x48, 0xD8,\n\t0xA7, 0xD9, 0x83, 0xD8, 0xA8, 0xD8, 0xB1, 0x48,\n\t// Bytes 27c0 - 27ff\n\t0xD8, 0xA7, 0xD9, 0x84, 0xD9, 0x84, 0xD9, 0x87,\n\t0x48, 0xD8, 0xB1, 0xD8, 0xB3, 0xD9, 0x88, 0xD9,\n\t0x84, 0x48, 0xD8, 0xB1, 0xDB, 0x8C, 0xD8, 0xA7,\n\t0xD9, 0x84, 0x48, 0xD8, 0xB5, 0xD9, 0x84, 0xD8,\n\t0xB9, 0xD9, 0x85, 0x48, 0xD8, 0xB9, 0xD9, 0x84,\n\t0xD9, 0x8A, 0xD9, 0x87, 0x48, 0xD9, 0x85, 0xD8,\n\t0xAD, 0xD9, 0x85, 0xD8, 0xAF, 0x48, 0xD9, 0x88,\n\t0xD8, 0xB3, 0xD9, 0x84, 0xD9, 0x85, 0x49, 0xE2,\n\t// Bytes 2800 - 283f\n\t0x80, 0xB2, 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2,\n\t0x49, 0xE2, 0x80, 0xB5, 0xE2, 0x80, 0xB5, 0xE2,\n\t0x80, 0xB5, 0x49, 0xE2, 0x88, 0xAB, 0xE2, 0x88,\n\t0xAB, 0xE2, 0x88, 0xAB, 0x49, 0xE2, 0x88, 0xAE,\n\t0xE2, 0x88, 0xAE, 0xE2, 0x88, 0xAE, 0x49, 0xE3,\n\t0x80, 0x94, 0xE4, 0xB8, 0x89, 0xE3, 0x80, 0x95,\n\t0x49, 0xE3, 0x80, 0x94, 0xE4, 0xBA, 0x8C, 0xE3,\n\t0x80, 0x95, 0x49, 0xE3, 0x80, 0x94, 0xE5, 0x8B,\n\t// Bytes 2840 - 287f\n\t0x9D, 0xE3, 0x80, 0x95, 0x49, 0xE3, 0x80, 0x94,\n\t0xE5, 0xAE, 0x89, 0xE3, 0x80, 0x95, 0x49, 0xE3,\n\t0x80, 0x94, 0xE6, 0x89, 0x93, 0xE3, 0x80, 0x95,\n\t0x49, 0xE3, 0x80, 0x94, 0xE6, 0x95, 0x97, 0xE3,\n\t0x80, 0x95, 0x49, 0xE3, 0x80, 0x94, 0xE6, 0x9C,\n\t0xAC, 0xE3, 0x80, 0x95, 0x49, 0xE3, 0x80, 0x94,\n\t0xE7, 0x82, 0xB9, 0xE3, 0x80, 0x95, 0x49, 0xE3,\n\t0x80, 0x94, 0xE7, 0x9B, 0x97, 0xE3, 0x80, 0x95,\n\t// Bytes 2880 - 28bf\n\t0x49, 0xE3, 0x82, 0xA2, 0xE3, 0x83, 0xBC, 0xE3,\n\t0x83, 0xAB, 0x49, 0xE3, 0x82, 0xA4, 0xE3, 0x83,\n\t0xB3, 0xE3, 0x83, 0x81, 0x49, 0xE3, 0x82, 0xA6,\n\t0xE3, 0x82, 0xA9, 0xE3, 0x83, 0xB3, 0x49, 0xE3,\n\t0x82, 0xAA, 0xE3, 0x83, 0xB3, 0xE3, 0x82, 0xB9,\n\t0x49, 0xE3, 0x82, 0xAA, 0xE3, 0x83, 0xBC, 0xE3,\n\t0x83, 0xA0, 0x49, 0xE3, 0x82, 0xAB, 0xE3, 0x82,\n\t0xA4, 0xE3, 0x83, 0xAA, 0x49, 0xE3, 0x82, 0xB1,\n\t// Bytes 28c0 - 28ff\n\t0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xB9, 0x49, 0xE3,\n\t0x82, 0xB3, 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x8A,\n\t0x49, 0xE3, 0x82, 0xBB, 0xE3, 0x83, 0xB3, 0xE3,\n\t0x83, 0x81, 0x49, 0xE3, 0x82, 0xBB, 0xE3, 0x83,\n\t0xB3, 0xE3, 0x83, 0x88, 0x49, 0xE3, 0x83, 0x86,\n\t0xE3, 0x82, 0x99, 0xE3, 0x82, 0xB7, 0x49, 0xE3,\n\t0x83, 0x88, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xAB,\n\t0x49, 0xE3, 0x83, 0x8E, 0xE3, 0x83, 0x83, 0xE3,\n\t// Bytes 2900 - 293f\n\t0x83, 0x88, 0x49, 0xE3, 0x83, 0x8F, 0xE3, 0x82,\n\t0xA4, 0xE3, 0x83, 0x84, 0x49, 0xE3, 0x83, 0x92,\n\t0xE3, 0x82, 0x99, 0xE3, 0x83, 0xAB, 0x49, 0xE3,\n\t0x83, 0x92, 0xE3, 0x82, 0x9A, 0xE3, 0x82, 0xB3,\n\t0x49, 0xE3, 0x83, 0x95, 0xE3, 0x83, 0xA9, 0xE3,\n\t0x83, 0xB3, 0x49, 0xE3, 0x83, 0x98, 0xE3, 0x82,\n\t0x9A, 0xE3, 0x82, 0xBD, 0x49, 0xE3, 0x83, 0x98,\n\t0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x84, 0x49, 0xE3,\n\t// Bytes 2940 - 297f\n\t0x83, 0x9B, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xAB,\n\t0x49, 0xE3, 0x83, 0x9B, 0xE3, 0x83, 0xBC, 0xE3,\n\t0x83, 0xB3, 0x49, 0xE3, 0x83, 0x9E, 0xE3, 0x82,\n\t0xA4, 0xE3, 0x83, 0xAB, 0x49, 0xE3, 0x83, 0x9E,\n\t0xE3, 0x83, 0x83, 0xE3, 0x83, 0x8F, 0x49, 0xE3,\n\t0x83, 0x9E, 0xE3, 0x83, 0xAB, 0xE3, 0x82, 0xAF,\n\t0x49, 0xE3, 0x83, 0xA4, 0xE3, 0x83, 0xBC, 0xE3,\n\t0x83, 0xAB, 0x49, 0xE3, 0x83, 0xA6, 0xE3, 0x82,\n\t// Bytes 2980 - 29bf\n\t0xA2, 0xE3, 0x83, 0xB3, 0x49, 0xE3, 0x83, 0xAF,\n\t0xE3, 0x83, 0x83, 0xE3, 0x83, 0x88, 0x4C, 0xE2,\n\t0x80, 0xB2, 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2,\n\t0xE2, 0x80, 0xB2, 0x4C, 0xE2, 0x88, 0xAB, 0xE2,\n\t0x88, 0xAB, 0xE2, 0x88, 0xAB, 0xE2, 0x88, 0xAB,\n\t0x4C, 0xE3, 0x82, 0xA2, 0xE3, 0x83, 0xAB, 0xE3,\n\t0x83, 0x95, 0xE3, 0x82, 0xA1, 0x4C, 0xE3, 0x82,\n\t0xA8, 0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xAB, 0xE3,\n\t// Bytes 29c0 - 29ff\n\t0x83, 0xBC, 0x4C, 0xE3, 0x82, 0xAB, 0xE3, 0x82,\n\t0x99, 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xB3, 0x4C,\n\t0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0xE3, 0x83,\n\t0xB3, 0xE3, 0x83, 0x9E, 0x4C, 0xE3, 0x82, 0xAB,\n\t0xE3, 0x83, 0xA9, 0xE3, 0x83, 0x83, 0xE3, 0x83,\n\t0x88, 0x4C, 0xE3, 0x82, 0xAB, 0xE3, 0x83, 0xAD,\n\t0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xBC, 0x4C, 0xE3,\n\t0x82, 0xAD, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0x8B,\n\t// Bytes 2a00 - 2a3f\n\t0xE3, 0x83, 0xBC, 0x4C, 0xE3, 0x82, 0xAD, 0xE3,\n\t0x83, 0xA5, 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xBC,\n\t0x4C, 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0xE3,\n\t0x83, 0xA9, 0xE3, 0x83, 0xA0, 0x4C, 0xE3, 0x82,\n\t0xAF, 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xBC, 0xE3,\n\t0x83, 0x8D, 0x4C, 0xE3, 0x82, 0xB5, 0xE3, 0x82,\n\t0xA4, 0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAB, 0x4C,\n\t0xE3, 0x82, 0xBF, 0xE3, 0x82, 0x99, 0xE3, 0x83,\n\t// Bytes 2a40 - 2a7f\n\t0xBC, 0xE3, 0x82, 0xB9, 0x4C, 0xE3, 0x83, 0x8F,\n\t0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC, 0xE3, 0x83,\n\t0x84, 0x4C, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A,\n\t0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAB, 0x4C, 0xE3,\n\t0x83, 0x95, 0xE3, 0x82, 0xA3, 0xE3, 0x83, 0xBC,\n\t0xE3, 0x83, 0x88, 0x4C, 0xE3, 0x83, 0x98, 0xE3,\n\t0x82, 0x99, 0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xBF,\n\t0x4C, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, 0xE3,\n\t// Bytes 2a80 - 2abf\n\t0x83, 0x8B, 0xE3, 0x83, 0x92, 0x4C, 0xE3, 0x83,\n\t0x98, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xB3, 0xE3,\n\t0x82, 0xB9, 0x4C, 0xE3, 0x83, 0x9B, 0xE3, 0x82,\n\t0x99, 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x88, 0x4C,\n\t0xE3, 0x83, 0x9E, 0xE3, 0x82, 0xA4, 0xE3, 0x82,\n\t0xAF, 0xE3, 0x83, 0xAD, 0x4C, 0xE3, 0x83, 0x9F,\n\t0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAD, 0xE3, 0x83,\n\t0xB3, 0x4C, 0xE3, 0x83, 0xA1, 0xE3, 0x83, 0xBC,\n\t// Bytes 2ac0 - 2aff\n\t0xE3, 0x83, 0x88, 0xE3, 0x83, 0xAB, 0x4C, 0xE3,\n\t0x83, 0xAA, 0xE3, 0x83, 0x83, 0xE3, 0x83, 0x88,\n\t0xE3, 0x83, 0xAB, 0x4C, 0xE3, 0x83, 0xAB, 0xE3,\n\t0x83, 0x92, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC,\n\t0x4C, 0xE6, 0xA0, 0xAA, 0xE5, 0xBC, 0x8F, 0xE4,\n\t0xBC, 0x9A, 0xE7, 0xA4, 0xBE, 0x4E, 0x28, 0xE1,\n\t0x84, 0x8B, 0xE1, 0x85, 0xA9, 0xE1, 0x84, 0x92,\n\t0xE1, 0x85, 0xAE, 0x29, 0x4F, 0xD8, 0xAC, 0xD9,\n\t// Bytes 2b00 - 2b3f\n\t0x84, 0x20, 0xD8, 0xAC, 0xD9, 0x84, 0xD8, 0xA7,\n\t0xD9, 0x84, 0xD9, 0x87, 0x4F, 0xE3, 0x82, 0xA2,\n\t0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x9A, 0xE3, 0x83,\n\t0xBC, 0xE3, 0x83, 0x88, 0x4F, 0xE3, 0x82, 0xA2,\n\t0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x98, 0xE3, 0x82,\n\t0x9A, 0xE3, 0x82, 0xA2, 0x4F, 0xE3, 0x82, 0xAD,\n\t0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xAF, 0xE3, 0x83,\n\t0x83, 0xE3, 0x83, 0x88, 0x4F, 0xE3, 0x82, 0xB5,\n\t// Bytes 2b40 - 2b7f\n\t0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x81, 0xE3, 0x83,\n\t0xBC, 0xE3, 0x83, 0xA0, 0x4F, 0xE3, 0x83, 0x8F,\n\t0xE3, 0x82, 0x99, 0xE3, 0x83, 0xBC, 0xE3, 0x83,\n\t0xAC, 0xE3, 0x83, 0xAB, 0x4F, 0xE3, 0x83, 0x98,\n\t0xE3, 0x82, 0xAF, 0xE3, 0x82, 0xBF, 0xE3, 0x83,\n\t0xBC, 0xE3, 0x83, 0xAB, 0x4F, 0xE3, 0x83, 0x9B,\n\t0xE3, 0x82, 0x9A, 0xE3, 0x82, 0xA4, 0xE3, 0x83,\n\t0xB3, 0xE3, 0x83, 0x88, 0x4F, 0xE3, 0x83, 0x9E,\n\t// Bytes 2b80 - 2bbf\n\t0xE3, 0x83, 0xB3, 0xE3, 0x82, 0xB7, 0xE3, 0x83,\n\t0xA7, 0xE3, 0x83, 0xB3, 0x4F, 0xE3, 0x83, 0xA1,\n\t0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0xE3, 0x83,\n\t0x88, 0xE3, 0x83, 0xB3, 0x4F, 0xE3, 0x83, 0xAB,\n\t0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x95, 0xE3, 0x82,\n\t0x99, 0xE3, 0x83, 0xAB, 0x51, 0x28, 0xE1, 0x84,\n\t0x8B, 0xE1, 0x85, 0xA9, 0xE1, 0x84, 0x8C, 0xE1,\n\t0x85, 0xA5, 0xE1, 0x86, 0xAB, 0x29, 0x52, 0xE3,\n\t// Bytes 2bc0 - 2bff\n\t0x82, 0xAD, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xAB,\n\t0xE3, 0x82, 0xBF, 0xE3, 0x82, 0x99, 0xE3, 0x83,\n\t0xBC, 0x52, 0xE3, 0x82, 0xAD, 0xE3, 0x83, 0xAD,\n\t0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0xE3, 0x83,\n\t0xA9, 0xE3, 0x83, 0xA0, 0x52, 0xE3, 0x82, 0xAD,\n\t0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xA1, 0xE3, 0x83,\n\t0xBC, 0xE3, 0x83, 0x88, 0xE3, 0x83, 0xAB, 0x52,\n\t0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0xE3, 0x83,\n\t// Bytes 2c00 - 2c3f\n\t0xA9, 0xE3, 0x83, 0xA0, 0xE3, 0x83, 0x88, 0xE3,\n\t0x83, 0xB3, 0x52, 0xE3, 0x82, 0xAF, 0xE3, 0x83,\n\t0xAB, 0xE3, 0x82, 0xBB, 0xE3, 0x82, 0x99, 0xE3,\n\t0x82, 0xA4, 0xE3, 0x83, 0xAD, 0x52, 0xE3, 0x83,\n\t0x8F, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC, 0xE3,\n\t0x82, 0xBB, 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x88,\n\t0x52, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A, 0xE3,\n\t0x82, 0xA2, 0xE3, 0x82, 0xB9, 0xE3, 0x83, 0x88,\n\t// Bytes 2c40 - 2c7f\n\t0xE3, 0x83, 0xAB, 0x52, 0xE3, 0x83, 0x95, 0xE3,\n\t0x82, 0x99, 0xE3, 0x83, 0x83, 0xE3, 0x82, 0xB7,\n\t0xE3, 0x82, 0xA7, 0xE3, 0x83, 0xAB, 0x52, 0xE3,\n\t0x83, 0x9F, 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0x8F,\n\t0xE3, 0x82, 0x99, 0xE3, 0x83, 0xBC, 0xE3, 0x83,\n\t0xAB, 0x52, 0xE3, 0x83, 0xAC, 0xE3, 0x83, 0xB3,\n\t0xE3, 0x83, 0x88, 0xE3, 0x82, 0xB1, 0xE3, 0x82,\n\t0x99, 0xE3, 0x83, 0xB3, 0x61, 0xD8, 0xB5, 0xD9,\n\t// Bytes 2c80 - 2cbf\n\t0x84, 0xD9, 0x89, 0x20, 0xD8, 0xA7, 0xD9, 0x84,\n\t0xD9, 0x84, 0xD9, 0x87, 0x20, 0xD8, 0xB9, 0xD9,\n\t0x84, 0xD9, 0x8A, 0xD9, 0x87, 0x20, 0xD9, 0x88,\n\t0xD8, 0xB3, 0xD9, 0x84, 0xD9, 0x85, 0x06, 0xE0,\n\t0xA7, 0x87, 0xE0, 0xA6, 0xBE, 0x01, 0x06, 0xE0,\n\t0xA7, 0x87, 0xE0, 0xA7, 0x97, 0x01, 0x06, 0xE0,\n\t0xAD, 0x87, 0xE0, 0xAC, 0xBE, 0x01, 0x06, 0xE0,\n\t0xAD, 0x87, 0xE0, 0xAD, 0x96, 0x01, 0x06, 0xE0,\n\t// Bytes 2cc0 - 2cff\n\t0xAD, 0x87, 0xE0, 0xAD, 0x97, 0x01, 0x06, 0xE0,\n\t0xAE, 0x92, 0xE0, 0xAF, 0x97, 0x01, 0x06, 0xE0,\n\t0xAF, 0x86, 0xE0, 0xAE, 0xBE, 0x01, 0x06, 0xE0,\n\t0xAF, 0x86, 0xE0, 0xAF, 0x97, 0x01, 0x06, 0xE0,\n\t0xAF, 0x87, 0xE0, 0xAE, 0xBE, 0x01, 0x06, 0xE0,\n\t0xB2, 0xBF, 0xE0, 0xB3, 0x95, 0x01, 0x06, 0xE0,\n\t0xB3, 0x86, 0xE0, 0xB3, 0x95, 0x01, 0x06, 0xE0,\n\t0xB3, 0x86, 0xE0, 0xB3, 0x96, 0x01, 0x06, 0xE0,\n\t// Bytes 2d00 - 2d3f\n\t0xB5, 0x86, 0xE0, 0xB4, 0xBE, 0x01, 0x06, 0xE0,\n\t0xB5, 0x86, 0xE0, 0xB5, 0x97, 0x01, 0x06, 0xE0,\n\t0xB5, 0x87, 0xE0, 0xB4, 0xBE, 0x01, 0x06, 0xE0,\n\t0xB7, 0x99, 0xE0, 0xB7, 0x9F, 0x01, 0x06, 0xE1,\n\t0x80, 0xA5, 0xE1, 0x80, 0xAE, 0x01, 0x06, 0xE1,\n\t0xAC, 0x85, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,\n\t0xAC, 0x87, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,\n\t0xAC, 0x89, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,\n\t// Bytes 2d40 - 2d7f\n\t0xAC, 0x8B, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,\n\t0xAC, 0x8D, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,\n\t0xAC, 0x91, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,\n\t0xAC, 0xBA, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,\n\t0xAC, 0xBC, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,\n\t0xAC, 0xBE, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,\n\t0xAC, 0xBF, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,\n\t0xAD, 0x82, 0xE1, 0xAC, 0xB5, 0x01, 0x08, 0xF0,\n\t// Bytes 2d80 - 2dbf\n\t0x91, 0x84, 0xB1, 0xF0, 0x91, 0x84, 0xA7, 0x01,\n\t0x08, 0xF0, 0x91, 0x84, 0xB2, 0xF0, 0x91, 0x84,\n\t0xA7, 0x01, 0x08, 0xF0, 0x91, 0x8D, 0x87, 0xF0,\n\t0x91, 0x8C, 0xBE, 0x01, 0x08, 0xF0, 0x91, 0x8D,\n\t0x87, 0xF0, 0x91, 0x8D, 0x97, 0x01, 0x08, 0xF0,\n\t0x91, 0x92, 0xB9, 0xF0, 0x91, 0x92, 0xB0, 0x01,\n\t0x08, 0xF0, 0x91, 0x92, 0xB9, 0xF0, 0x91, 0x92,\n\t0xBA, 0x01, 0x08, 0xF0, 0x91, 0x92, 0xB9, 0xF0,\n\t// Bytes 2dc0 - 2dff\n\t0x91, 0x92, 0xBD, 0x01, 0x08, 0xF0, 0x91, 0x96,\n\t0xB8, 0xF0, 0x91, 0x96, 0xAF, 0x01, 0x08, 0xF0,\n\t0x91, 0x96, 0xB9, 0xF0, 0x91, 0x96, 0xAF, 0x01,\n\t0x09, 0xE0, 0xB3, 0x86, 0xE0, 0xB3, 0x82, 0xE0,\n\t0xB3, 0x95, 0x02, 0x09, 0xE0, 0xB7, 0x99, 0xE0,\n\t0xB7, 0x8F, 0xE0, 0xB7, 0x8A, 0x12, 0x44, 0x44,\n\t0x5A, 0xCC, 0x8C, 0xC9, 0x44, 0x44, 0x7A, 0xCC,\n\t0x8C, 0xC9, 0x44, 0x64, 0x7A, 0xCC, 0x8C, 0xC9,\n\t// Bytes 2e00 - 2e3f\n\t0x46, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x93, 0xC9,\n\t0x46, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x94, 0xC9,\n\t0x46, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x95, 0xB5,\n\t0x46, 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xA1, 0x01,\n\t0x46, 0xE1, 0x84, 0x82, 0xE1, 0x85, 0xA1, 0x01,\n\t0x46, 0xE1, 0x84, 0x83, 0xE1, 0x85, 0xA1, 0x01,\n\t0x46, 0xE1, 0x84, 0x85, 0xE1, 0x85, 0xA1, 0x01,\n\t0x46, 0xE1, 0x84, 0x86, 0xE1, 0x85, 0xA1, 0x01,\n\t// Bytes 2e40 - 2e7f\n\t0x46, 0xE1, 0x84, 0x87, 0xE1, 0x85, 0xA1, 0x01,\n\t0x46, 0xE1, 0x84, 0x89, 0xE1, 0x85, 0xA1, 0x01,\n\t0x46, 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xA1, 0x01,\n\t0x46, 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xAE, 0x01,\n\t0x46, 0xE1, 0x84, 0x8C, 0xE1, 0x85, 0xA1, 0x01,\n\t0x46, 0xE1, 0x84, 0x8E, 0xE1, 0x85, 0xA1, 0x01,\n\t0x46, 0xE1, 0x84, 0x8F, 0xE1, 0x85, 0xA1, 0x01,\n\t0x46, 0xE1, 0x84, 0x90, 0xE1, 0x85, 0xA1, 0x01,\n\t// Bytes 2e80 - 2ebf\n\t0x46, 0xE1, 0x84, 0x91, 0xE1, 0x85, 0xA1, 0x01,\n\t0x46, 0xE1, 0x84, 0x92, 0xE1, 0x85, 0xA1, 0x01,\n\t0x49, 0xE3, 0x83, 0xA1, 0xE3, 0x82, 0xAB, 0xE3,\n\t0x82, 0x99, 0x0D, 0x4C, 0xE1, 0x84, 0x8C, 0xE1,\n\t0x85, 0xAE, 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xB4,\n\t0x01, 0x4C, 0xE3, 0x82, 0xAD, 0xE3, 0x82, 0x99,\n\t0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0x0D, 0x4C,\n\t0xE3, 0x82, 0xB3, 0xE3, 0x83, 0xBC, 0xE3, 0x83,\n\t// Bytes 2ec0 - 2eff\n\t0x9B, 0xE3, 0x82, 0x9A, 0x0D, 0x4C, 0xE3, 0x83,\n\t0xA4, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88, 0xE3,\n\t0x82, 0x99, 0x0D, 0x4F, 0xE1, 0x84, 0x8E, 0xE1,\n\t0x85, 0xA1, 0xE1, 0x86, 0xB7, 0xE1, 0x84, 0x80,\n\t0xE1, 0x85, 0xA9, 0x01, 0x4F, 0xE3, 0x82, 0xA4,\n\t0xE3, 0x83, 0x8B, 0xE3, 0x83, 0xB3, 0xE3, 0x82,\n\t0xAF, 0xE3, 0x82, 0x99, 0x0D, 0x4F, 0xE3, 0x82,\n\t0xB7, 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xB3, 0xE3,\n\t// Bytes 2f00 - 2f3f\n\t0x82, 0xAF, 0xE3, 0x82, 0x99, 0x0D, 0x4F, 0xE3,\n\t0x83, 0x98, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC,\n\t0xE3, 0x82, 0xB7, 0xE3, 0x82, 0x99, 0x0D, 0x4F,\n\t0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x9A, 0xE3, 0x83,\n\t0xB3, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x0D,\n\t0x52, 0xE3, 0x82, 0xA8, 0xE3, 0x82, 0xB9, 0xE3,\n\t0x82, 0xAF, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88,\n\t0xE3, 0x82, 0x99, 0x0D, 0x52, 0xE3, 0x83, 0x95,\n\t// Bytes 2f40 - 2f7f\n\t0xE3, 0x82, 0xA1, 0xE3, 0x83, 0xA9, 0xE3, 0x83,\n\t0x83, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x0D,\n\t0x86, 0xE0, 0xB3, 0x86, 0xE0, 0xB3, 0x82, 0x01,\n\t0x86, 0xE0, 0xB7, 0x99, 0xE0, 0xB7, 0x8F, 0x01,\n\t0x03, 0x3C, 0xCC, 0xB8, 0x05, 0x03, 0x3D, 0xCC,\n\t0xB8, 0x05, 0x03, 0x3E, 0xCC, 0xB8, 0x05, 0x03,\n\t0x41, 0xCC, 0x80, 0xC9, 0x03, 0x41, 0xCC, 0x81,\n\t0xC9, 0x03, 0x41, 0xCC, 0x83, 0xC9, 0x03, 0x41,\n\t// Bytes 2f80 - 2fbf\n\t0xCC, 0x84, 0xC9, 0x03, 0x41, 0xCC, 0x89, 0xC9,\n\t0x03, 0x41, 0xCC, 0x8C, 0xC9, 0x03, 0x41, 0xCC,\n\t0x8F, 0xC9, 0x03, 0x41, 0xCC, 0x91, 0xC9, 0x03,\n\t0x41, 0xCC, 0xA5, 0xB5, 0x03, 0x41, 0xCC, 0xA8,\n\t0xA5, 0x03, 0x42, 0xCC, 0x87, 0xC9, 0x03, 0x42,\n\t0xCC, 0xA3, 0xB5, 0x03, 0x42, 0xCC, 0xB1, 0xB5,\n\t0x03, 0x43, 0xCC, 0x81, 0xC9, 0x03, 0x43, 0xCC,\n\t0x82, 0xC9, 0x03, 0x43, 0xCC, 0x87, 0xC9, 0x03,\n\t// Bytes 2fc0 - 2fff\n\t0x43, 0xCC, 0x8C, 0xC9, 0x03, 0x44, 0xCC, 0x87,\n\t0xC9, 0x03, 0x44, 0xCC, 0x8C, 0xC9, 0x03, 0x44,\n\t0xCC, 0xA3, 0xB5, 0x03, 0x44, 0xCC, 0xA7, 0xA5,\n\t0x03, 0x44, 0xCC, 0xAD, 0xB5, 0x03, 0x44, 0xCC,\n\t0xB1, 0xB5, 0x03, 0x45, 0xCC, 0x80, 0xC9, 0x03,\n\t0x45, 0xCC, 0x81, 0xC9, 0x03, 0x45, 0xCC, 0x83,\n\t0xC9, 0x03, 0x45, 0xCC, 0x86, 0xC9, 0x03, 0x45,\n\t0xCC, 0x87, 0xC9, 0x03, 0x45, 0xCC, 0x88, 0xC9,\n\t// Bytes 3000 - 303f\n\t0x03, 0x45, 0xCC, 0x89, 0xC9, 0x03, 0x45, 0xCC,\n\t0x8C, 0xC9, 0x03, 0x45, 0xCC, 0x8F, 0xC9, 0x03,\n\t0x45, 0xCC, 0x91, 0xC9, 0x03, 0x45, 0xCC, 0xA8,\n\t0xA5, 0x03, 0x45, 0xCC, 0xAD, 0xB5, 0x03, 0x45,\n\t0xCC, 0xB0, 0xB5, 0x03, 0x46, 0xCC, 0x87, 0xC9,\n\t0x03, 0x47, 0xCC, 0x81, 0xC9, 0x03, 0x47, 0xCC,\n\t0x82, 0xC9, 0x03, 0x47, 0xCC, 0x84, 0xC9, 0x03,\n\t0x47, 0xCC, 0x86, 0xC9, 0x03, 0x47, 0xCC, 0x87,\n\t// Bytes 3040 - 307f\n\t0xC9, 0x03, 0x47, 0xCC, 0x8C, 0xC9, 0x03, 0x47,\n\t0xCC, 0xA7, 0xA5, 0x03, 0x48, 0xCC, 0x82, 0xC9,\n\t0x03, 0x48, 0xCC, 0x87, 0xC9, 0x03, 0x48, 0xCC,\n\t0x88, 0xC9, 0x03, 0x48, 0xCC, 0x8C, 0xC9, 0x03,\n\t0x48, 0xCC, 0xA3, 0xB5, 0x03, 0x48, 0xCC, 0xA7,\n\t0xA5, 0x03, 0x48, 0xCC, 0xAE, 0xB5, 0x03, 0x49,\n\t0xCC, 0x80, 0xC9, 0x03, 0x49, 0xCC, 0x81, 0xC9,\n\t0x03, 0x49, 0xCC, 0x82, 0xC9, 0x03, 0x49, 0xCC,\n\t// Bytes 3080 - 30bf\n\t0x83, 0xC9, 0x03, 0x49, 0xCC, 0x84, 0xC9, 0x03,\n\t0x49, 0xCC, 0x86, 0xC9, 0x03, 0x49, 0xCC, 0x87,\n\t0xC9, 0x03, 0x49, 0xCC, 0x89, 0xC9, 0x03, 0x49,\n\t0xCC, 0x8C, 0xC9, 0x03, 0x49, 0xCC, 0x8F, 0xC9,\n\t0x03, 0x49, 0xCC, 0x91, 0xC9, 0x03, 0x49, 0xCC,\n\t0xA3, 0xB5, 0x03, 0x49, 0xCC, 0xA8, 0xA5, 0x03,\n\t0x49, 0xCC, 0xB0, 0xB5, 0x03, 0x4A, 0xCC, 0x82,\n\t0xC9, 0x03, 0x4B, 0xCC, 0x81, 0xC9, 0x03, 0x4B,\n\t// Bytes 30c0 - 30ff\n\t0xCC, 0x8C, 0xC9, 0x03, 0x4B, 0xCC, 0xA3, 0xB5,\n\t0x03, 0x4B, 0xCC, 0xA7, 0xA5, 0x03, 0x4B, 0xCC,\n\t0xB1, 0xB5, 0x03, 0x4C, 0xCC, 0x81, 0xC9, 0x03,\n\t0x4C, 0xCC, 0x8C, 0xC9, 0x03, 0x4C, 0xCC, 0xA7,\n\t0xA5, 0x03, 0x4C, 0xCC, 0xAD, 0xB5, 0x03, 0x4C,\n\t0xCC, 0xB1, 0xB5, 0x03, 0x4D, 0xCC, 0x81, 0xC9,\n\t0x03, 0x4D, 0xCC, 0x87, 0xC9, 0x03, 0x4D, 0xCC,\n\t0xA3, 0xB5, 0x03, 0x4E, 0xCC, 0x80, 0xC9, 0x03,\n\t// Bytes 3100 - 313f\n\t0x4E, 0xCC, 0x81, 0xC9, 0x03, 0x4E, 0xCC, 0x83,\n\t0xC9, 0x03, 0x4E, 0xCC, 0x87, 0xC9, 0x03, 0x4E,\n\t0xCC, 0x8C, 0xC9, 0x03, 0x4E, 0xCC, 0xA3, 0xB5,\n\t0x03, 0x4E, 0xCC, 0xA7, 0xA5, 0x03, 0x4E, 0xCC,\n\t0xAD, 0xB5, 0x03, 0x4E, 0xCC, 0xB1, 0xB5, 0x03,\n\t0x4F, 0xCC, 0x80, 0xC9, 0x03, 0x4F, 0xCC, 0x81,\n\t0xC9, 0x03, 0x4F, 0xCC, 0x86, 0xC9, 0x03, 0x4F,\n\t0xCC, 0x89, 0xC9, 0x03, 0x4F, 0xCC, 0x8B, 0xC9,\n\t// Bytes 3140 - 317f\n\t0x03, 0x4F, 0xCC, 0x8C, 0xC9, 0x03, 0x4F, 0xCC,\n\t0x8F, 0xC9, 0x03, 0x4F, 0xCC, 0x91, 0xC9, 0x03,\n\t0x50, 0xCC, 0x81, 0xC9, 0x03, 0x50, 0xCC, 0x87,\n\t0xC9, 0x03, 0x52, 0xCC, 0x81, 0xC9, 0x03, 0x52,\n\t0xCC, 0x87, 0xC9, 0x03, 0x52, 0xCC, 0x8C, 0xC9,\n\t0x03, 0x52, 0xCC, 0x8F, 0xC9, 0x03, 0x52, 0xCC,\n\t0x91, 0xC9, 0x03, 0x52, 0xCC, 0xA7, 0xA5, 0x03,\n\t0x52, 0xCC, 0xB1, 0xB5, 0x03, 0x53, 0xCC, 0x82,\n\t// Bytes 3180 - 31bf\n\t0xC9, 0x03, 0x53, 0xCC, 0x87, 0xC9, 0x03, 0x53,\n\t0xCC, 0xA6, 0xB5, 0x03, 0x53, 0xCC, 0xA7, 0xA5,\n\t0x03, 0x54, 0xCC, 0x87, 0xC9, 0x03, 0x54, 0xCC,\n\t0x8C, 0xC9, 0x03, 0x54, 0xCC, 0xA3, 0xB5, 0x03,\n\t0x54, 0xCC, 0xA6, 0xB5, 0x03, 0x54, 0xCC, 0xA7,\n\t0xA5, 0x03, 0x54, 0xCC, 0xAD, 0xB5, 0x03, 0x54,\n\t0xCC, 0xB1, 0xB5, 0x03, 0x55, 0xCC, 0x80, 0xC9,\n\t0x03, 0x55, 0xCC, 0x81, 0xC9, 0x03, 0x55, 0xCC,\n\t// Bytes 31c0 - 31ff\n\t0x82, 0xC9, 0x03, 0x55, 0xCC, 0x86, 0xC9, 0x03,\n\t0x55, 0xCC, 0x89, 0xC9, 0x03, 0x55, 0xCC, 0x8A,\n\t0xC9, 0x03, 0x55, 0xCC, 0x8B, 0xC9, 0x03, 0x55,\n\t0xCC, 0x8C, 0xC9, 0x03, 0x55, 0xCC, 0x8F, 0xC9,\n\t0x03, 0x55, 0xCC, 0x91, 0xC9, 0x03, 0x55, 0xCC,\n\t0xA3, 0xB5, 0x03, 0x55, 0xCC, 0xA4, 0xB5, 0x03,\n\t0x55, 0xCC, 0xA8, 0xA5, 0x03, 0x55, 0xCC, 0xAD,\n\t0xB5, 0x03, 0x55, 0xCC, 0xB0, 0xB5, 0x03, 0x56,\n\t// Bytes 3200 - 323f\n\t0xCC, 0x83, 0xC9, 0x03, 0x56, 0xCC, 0xA3, 0xB5,\n\t0x03, 0x57, 0xCC, 0x80, 0xC9, 0x03, 0x57, 0xCC,\n\t0x81, 0xC9, 0x03, 0x57, 0xCC, 0x82, 0xC9, 0x03,\n\t0x57, 0xCC, 0x87, 0xC9, 0x03, 0x57, 0xCC, 0x88,\n\t0xC9, 0x03, 0x57, 0xCC, 0xA3, 0xB5, 0x03, 0x58,\n\t0xCC, 0x87, 0xC9, 0x03, 0x58, 0xCC, 0x88, 0xC9,\n\t0x03, 0x59, 0xCC, 0x80, 0xC9, 0x03, 0x59, 0xCC,\n\t0x81, 0xC9, 0x03, 0x59, 0xCC, 0x82, 0xC9, 0x03,\n\t// Bytes 3240 - 327f\n\t0x59, 0xCC, 0x83, 0xC9, 0x03, 0x59, 0xCC, 0x84,\n\t0xC9, 0x03, 0x59, 0xCC, 0x87, 0xC9, 0x03, 0x59,\n\t0xCC, 0x88, 0xC9, 0x03, 0x59, 0xCC, 0x89, 0xC9,\n\t0x03, 0x59, 0xCC, 0xA3, 0xB5, 0x03, 0x5A, 0xCC,\n\t0x81, 0xC9, 0x03, 0x5A, 0xCC, 0x82, 0xC9, 0x03,\n\t0x5A, 0xCC, 0x87, 0xC9, 0x03, 0x5A, 0xCC, 0x8C,\n\t0xC9, 0x03, 0x5A, 0xCC, 0xA3, 0xB5, 0x03, 0x5A,\n\t0xCC, 0xB1, 0xB5, 0x03, 0x61, 0xCC, 0x80, 0xC9,\n\t// Bytes 3280 - 32bf\n\t0x03, 0x61, 0xCC, 0x81, 0xC9, 0x03, 0x61, 0xCC,\n\t0x83, 0xC9, 0x03, 0x61, 0xCC, 0x84, 0xC9, 0x03,\n\t0x61, 0xCC, 0x89, 0xC9, 0x03, 0x61, 0xCC, 0x8C,\n\t0xC9, 0x03, 0x61, 0xCC, 0x8F, 0xC9, 0x03, 0x61,\n\t0xCC, 0x91, 0xC9, 0x03, 0x61, 0xCC, 0xA5, 0xB5,\n\t0x03, 0x61, 0xCC, 0xA8, 0xA5, 0x03, 0x62, 0xCC,\n\t0x87, 0xC9, 0x03, 0x62, 0xCC, 0xA3, 0xB5, 0x03,\n\t0x62, 0xCC, 0xB1, 0xB5, 0x03, 0x63, 0xCC, 0x81,\n\t// Bytes 32c0 - 32ff\n\t0xC9, 0x03, 0x63, 0xCC, 0x82, 0xC9, 0x03, 0x63,\n\t0xCC, 0x87, 0xC9, 0x03, 0x63, 0xCC, 0x8C, 0xC9,\n\t0x03, 0x64, 0xCC, 0x87, 0xC9, 0x03, 0x64, 0xCC,\n\t0x8C, 0xC9, 0x03, 0x64, 0xCC, 0xA3, 0xB5, 0x03,\n\t0x64, 0xCC, 0xA7, 0xA5, 0x03, 0x64, 0xCC, 0xAD,\n\t0xB5, 0x03, 0x64, 0xCC, 0xB1, 0xB5, 0x03, 0x65,\n\t0xCC, 0x80, 0xC9, 0x03, 0x65, 0xCC, 0x81, 0xC9,\n\t0x03, 0x65, 0xCC, 0x83, 0xC9, 0x03, 0x65, 0xCC,\n\t// Bytes 3300 - 333f\n\t0x86, 0xC9, 0x03, 0x65, 0xCC, 0x87, 0xC9, 0x03,\n\t0x65, 0xCC, 0x88, 0xC9, 0x03, 0x65, 0xCC, 0x89,\n\t0xC9, 0x03, 0x65, 0xCC, 0x8C, 0xC9, 0x03, 0x65,\n\t0xCC, 0x8F, 0xC9, 0x03, 0x65, 0xCC, 0x91, 0xC9,\n\t0x03, 0x65, 0xCC, 0xA8, 0xA5, 0x03, 0x65, 0xCC,\n\t0xAD, 0xB5, 0x03, 0x65, 0xCC, 0xB0, 0xB5, 0x03,\n\t0x66, 0xCC, 0x87, 0xC9, 0x03, 0x67, 0xCC, 0x81,\n\t0xC9, 0x03, 0x67, 0xCC, 0x82, 0xC9, 0x03, 0x67,\n\t// Bytes 3340 - 337f\n\t0xCC, 0x84, 0xC9, 0x03, 0x67, 0xCC, 0x86, 0xC9,\n\t0x03, 0x67, 0xCC, 0x87, 0xC9, 0x03, 0x67, 0xCC,\n\t0x8C, 0xC9, 0x03, 0x67, 0xCC, 0xA7, 0xA5, 0x03,\n\t0x68, 0xCC, 0x82, 0xC9, 0x03, 0x68, 0xCC, 0x87,\n\t0xC9, 0x03, 0x68, 0xCC, 0x88, 0xC9, 0x03, 0x68,\n\t0xCC, 0x8C, 0xC9, 0x03, 0x68, 0xCC, 0xA3, 0xB5,\n\t0x03, 0x68, 0xCC, 0xA7, 0xA5, 0x03, 0x68, 0xCC,\n\t0xAE, 0xB5, 0x03, 0x68, 0xCC, 0xB1, 0xB5, 0x03,\n\t// Bytes 3380 - 33bf\n\t0x69, 0xCC, 0x80, 0xC9, 0x03, 0x69, 0xCC, 0x81,\n\t0xC9, 0x03, 0x69, 0xCC, 0x82, 0xC9, 0x03, 0x69,\n\t0xCC, 0x83, 0xC9, 0x03, 0x69, 0xCC, 0x84, 0xC9,\n\t0x03, 0x69, 0xCC, 0x86, 0xC9, 0x03, 0x69, 0xCC,\n\t0x89, 0xC9, 0x03, 0x69, 0xCC, 0x8C, 0xC9, 0x03,\n\t0x69, 0xCC, 0x8F, 0xC9, 0x03, 0x69, 0xCC, 0x91,\n\t0xC9, 0x03, 0x69, 0xCC, 0xA3, 0xB5, 0x03, 0x69,\n\t0xCC, 0xA8, 0xA5, 0x03, 0x69, 0xCC, 0xB0, 0xB5,\n\t// Bytes 33c0 - 33ff\n\t0x03, 0x6A, 0xCC, 0x82, 0xC9, 0x03, 0x6A, 0xCC,\n\t0x8C, 0xC9, 0x03, 0x6B, 0xCC, 0x81, 0xC9, 0x03,\n\t0x6B, 0xCC, 0x8C, 0xC9, 0x03, 0x6B, 0xCC, 0xA3,\n\t0xB5, 0x03, 0x6B, 0xCC, 0xA7, 0xA5, 0x03, 0x6B,\n\t0xCC, 0xB1, 0xB5, 0x03, 0x6C, 0xCC, 0x81, 0xC9,\n\t0x03, 0x6C, 0xCC, 0x8C, 0xC9, 0x03, 0x6C, 0xCC,\n\t0xA7, 0xA5, 0x03, 0x6C, 0xCC, 0xAD, 0xB5, 0x03,\n\t0x6C, 0xCC, 0xB1, 0xB5, 0x03, 0x6D, 0xCC, 0x81,\n\t// Bytes 3400 - 343f\n\t0xC9, 0x03, 0x6D, 0xCC, 0x87, 0xC9, 0x03, 0x6D,\n\t0xCC, 0xA3, 0xB5, 0x03, 0x6E, 0xCC, 0x80, 0xC9,\n\t0x03, 0x6E, 0xCC, 0x81, 0xC9, 0x03, 0x6E, 0xCC,\n\t0x83, 0xC9, 0x03, 0x6E, 0xCC, 0x87, 0xC9, 0x03,\n\t0x6E, 0xCC, 0x8C, 0xC9, 0x03, 0x6E, 0xCC, 0xA3,\n\t0xB5, 0x03, 0x6E, 0xCC, 0xA7, 0xA5, 0x03, 0x6E,\n\t0xCC, 0xAD, 0xB5, 0x03, 0x6E, 0xCC, 0xB1, 0xB5,\n\t0x03, 0x6F, 0xCC, 0x80, 0xC9, 0x03, 0x6F, 0xCC,\n\t// Bytes 3440 - 347f\n\t0x81, 0xC9, 0x03, 0x6F, 0xCC, 0x86, 0xC9, 0x03,\n\t0x6F, 0xCC, 0x89, 0xC9, 0x03, 0x6F, 0xCC, 0x8B,\n\t0xC9, 0x03, 0x6F, 0xCC, 0x8C, 0xC9, 0x03, 0x6F,\n\t0xCC, 0x8F, 0xC9, 0x03, 0x6F, 0xCC, 0x91, 0xC9,\n\t0x03, 0x70, 0xCC, 0x81, 0xC9, 0x03, 0x70, 0xCC,\n\t0x87, 0xC9, 0x03, 0x72, 0xCC, 0x81, 0xC9, 0x03,\n\t0x72, 0xCC, 0x87, 0xC9, 0x03, 0x72, 0xCC, 0x8C,\n\t0xC9, 0x03, 0x72, 0xCC, 0x8F, 0xC9, 0x03, 0x72,\n\t// Bytes 3480 - 34bf\n\t0xCC, 0x91, 0xC9, 0x03, 0x72, 0xCC, 0xA7, 0xA5,\n\t0x03, 0x72, 0xCC, 0xB1, 0xB5, 0x03, 0x73, 0xCC,\n\t0x82, 0xC9, 0x03, 0x73, 0xCC, 0x87, 0xC9, 0x03,\n\t0x73, 0xCC, 0xA6, 0xB5, 0x03, 0x73, 0xCC, 0xA7,\n\t0xA5, 0x03, 0x74, 0xCC, 0x87, 0xC9, 0x03, 0x74,\n\t0xCC, 0x88, 0xC9, 0x03, 0x74, 0xCC, 0x8C, 0xC9,\n\t0x03, 0x74, 0xCC, 0xA3, 0xB5, 0x03, 0x74, 0xCC,\n\t0xA6, 0xB5, 0x03, 0x74, 0xCC, 0xA7, 0xA5, 0x03,\n\t// Bytes 34c0 - 34ff\n\t0x74, 0xCC, 0xAD, 0xB5, 0x03, 0x74, 0xCC, 0xB1,\n\t0xB5, 0x03, 0x75, 0xCC, 0x80, 0xC9, 0x03, 0x75,\n\t0xCC, 0x81, 0xC9, 0x03, 0x75, 0xCC, 0x82, 0xC9,\n\t0x03, 0x75, 0xCC, 0x86, 0xC9, 0x03, 0x75, 0xCC,\n\t0x89, 0xC9, 0x03, 0x75, 0xCC, 0x8A, 0xC9, 0x03,\n\t0x75, 0xCC, 0x8B, 0xC9, 0x03, 0x75, 0xCC, 0x8C,\n\t0xC9, 0x03, 0x75, 0xCC, 0x8F, 0xC9, 0x03, 0x75,\n\t0xCC, 0x91, 0xC9, 0x03, 0x75, 0xCC, 0xA3, 0xB5,\n\t// Bytes 3500 - 353f\n\t0x03, 0x75, 0xCC, 0xA4, 0xB5, 0x03, 0x75, 0xCC,\n\t0xA8, 0xA5, 0x03, 0x75, 0xCC, 0xAD, 0xB5, 0x03,\n\t0x75, 0xCC, 0xB0, 0xB5, 0x03, 0x76, 0xCC, 0x83,\n\t0xC9, 0x03, 0x76, 0xCC, 0xA3, 0xB5, 0x03, 0x77,\n\t0xCC, 0x80, 0xC9, 0x03, 0x77, 0xCC, 0x81, 0xC9,\n\t0x03, 0x77, 0xCC, 0x82, 0xC9, 0x03, 0x77, 0xCC,\n\t0x87, 0xC9, 0x03, 0x77, 0xCC, 0x88, 0xC9, 0x03,\n\t0x77, 0xCC, 0x8A, 0xC9, 0x03, 0x77, 0xCC, 0xA3,\n\t// Bytes 3540 - 357f\n\t0xB5, 0x03, 0x78, 0xCC, 0x87, 0xC9, 0x03, 0x78,\n\t0xCC, 0x88, 0xC9, 0x03, 0x79, 0xCC, 0x80, 0xC9,\n\t0x03, 0x79, 0xCC, 0x81, 0xC9, 0x03, 0x79, 0xCC,\n\t0x82, 0xC9, 0x03, 0x79, 0xCC, 0x83, 0xC9, 0x03,\n\t0x79, 0xCC, 0x84, 0xC9, 0x03, 0x79, 0xCC, 0x87,\n\t0xC9, 0x03, 0x79, 0xCC, 0x88, 0xC9, 0x03, 0x79,\n\t0xCC, 0x89, 0xC9, 0x03, 0x79, 0xCC, 0x8A, 0xC9,\n\t0x03, 0x79, 0xCC, 0xA3, 0xB5, 0x03, 0x7A, 0xCC,\n\t// Bytes 3580 - 35bf\n\t0x81, 0xC9, 0x03, 0x7A, 0xCC, 0x82, 0xC9, 0x03,\n\t0x7A, 0xCC, 0x87, 0xC9, 0x03, 0x7A, 0xCC, 0x8C,\n\t0xC9, 0x03, 0x7A, 0xCC, 0xA3, 0xB5, 0x03, 0x7A,\n\t0xCC, 0xB1, 0xB5, 0x04, 0xC2, 0xA8, 0xCC, 0x80,\n\t0xCA, 0x04, 0xC2, 0xA8, 0xCC, 0x81, 0xCA, 0x04,\n\t0xC2, 0xA8, 0xCD, 0x82, 0xCA, 0x04, 0xC3, 0x86,\n\t0xCC, 0x81, 0xC9, 0x04, 0xC3, 0x86, 0xCC, 0x84,\n\t0xC9, 0x04, 0xC3, 0x98, 0xCC, 0x81, 0xC9, 0x04,\n\t// Bytes 35c0 - 35ff\n\t0xC3, 0xA6, 0xCC, 0x81, 0xC9, 0x04, 0xC3, 0xA6,\n\t0xCC, 0x84, 0xC9, 0x04, 0xC3, 0xB8, 0xCC, 0x81,\n\t0xC9, 0x04, 0xC5, 0xBF, 0xCC, 0x87, 0xC9, 0x04,\n\t0xC6, 0xB7, 0xCC, 0x8C, 0xC9, 0x04, 0xCA, 0x92,\n\t0xCC, 0x8C, 0xC9, 0x04, 0xCE, 0x91, 0xCC, 0x80,\n\t0xC9, 0x04, 0xCE, 0x91, 0xCC, 0x81, 0xC9, 0x04,\n\t0xCE, 0x91, 0xCC, 0x84, 0xC9, 0x04, 0xCE, 0x91,\n\t0xCC, 0x86, 0xC9, 0x04, 0xCE, 0x91, 0xCD, 0x85,\n\t// Bytes 3600 - 363f\n\t0xD9, 0x04, 0xCE, 0x95, 0xCC, 0x80, 0xC9, 0x04,\n\t0xCE, 0x95, 0xCC, 0x81, 0xC9, 0x04, 0xCE, 0x97,\n\t0xCC, 0x80, 0xC9, 0x04, 0xCE, 0x97, 0xCC, 0x81,\n\t0xC9, 0x04, 0xCE, 0x97, 0xCD, 0x85, 0xD9, 0x04,\n\t0xCE, 0x99, 0xCC, 0x80, 0xC9, 0x04, 0xCE, 0x99,\n\t0xCC, 0x81, 0xC9, 0x04, 0xCE, 0x99, 0xCC, 0x84,\n\t0xC9, 0x04, 0xCE, 0x99, 0xCC, 0x86, 0xC9, 0x04,\n\t0xCE, 0x99, 0xCC, 0x88, 0xC9, 0x04, 0xCE, 0x9F,\n\t// Bytes 3640 - 367f\n\t0xCC, 0x80, 0xC9, 0x04, 0xCE, 0x9F, 0xCC, 0x81,\n\t0xC9, 0x04, 0xCE, 0xA1, 0xCC, 0x94, 0xC9, 0x04,\n\t0xCE, 0xA5, 0xCC, 0x80, 0xC9, 0x04, 0xCE, 0xA5,\n\t0xCC, 0x81, 0xC9, 0x04, 0xCE, 0xA5, 0xCC, 0x84,\n\t0xC9, 0x04, 0xCE, 0xA5, 0xCC, 0x86, 0xC9, 0x04,\n\t0xCE, 0xA5, 0xCC, 0x88, 0xC9, 0x04, 0xCE, 0xA9,\n\t0xCC, 0x80, 0xC9, 0x04, 0xCE, 0xA9, 0xCC, 0x81,\n\t0xC9, 0x04, 0xCE, 0xA9, 0xCD, 0x85, 0xD9, 0x04,\n\t// Bytes 3680 - 36bf\n\t0xCE, 0xB1, 0xCC, 0x84, 0xC9, 0x04, 0xCE, 0xB1,\n\t0xCC, 0x86, 0xC9, 0x04, 0xCE, 0xB1, 0xCD, 0x85,\n\t0xD9, 0x04, 0xCE, 0xB5, 0xCC, 0x80, 0xC9, 0x04,\n\t0xCE, 0xB5, 0xCC, 0x81, 0xC9, 0x04, 0xCE, 0xB7,\n\t0xCD, 0x85, 0xD9, 0x04, 0xCE, 0xB9, 0xCC, 0x80,\n\t0xC9, 0x04, 0xCE, 0xB9, 0xCC, 0x81, 0xC9, 0x04,\n\t0xCE, 0xB9, 0xCC, 0x84, 0xC9, 0x04, 0xCE, 0xB9,\n\t0xCC, 0x86, 0xC9, 0x04, 0xCE, 0xB9, 0xCD, 0x82,\n\t// Bytes 36c0 - 36ff\n\t0xC9, 0x04, 0xCE, 0xBF, 0xCC, 0x80, 0xC9, 0x04,\n\t0xCE, 0xBF, 0xCC, 0x81, 0xC9, 0x04, 0xCF, 0x81,\n\t0xCC, 0x93, 0xC9, 0x04, 0xCF, 0x81, 0xCC, 0x94,\n\t0xC9, 0x04, 0xCF, 0x85, 0xCC, 0x80, 0xC9, 0x04,\n\t0xCF, 0x85, 0xCC, 0x81, 0xC9, 0x04, 0xCF, 0x85,\n\t0xCC, 0x84, 0xC9, 0x04, 0xCF, 0x85, 0xCC, 0x86,\n\t0xC9, 0x04, 0xCF, 0x85, 0xCD, 0x82, 0xC9, 0x04,\n\t0xCF, 0x89, 0xCD, 0x85, 0xD9, 0x04, 0xCF, 0x92,\n\t// Bytes 3700 - 373f\n\t0xCC, 0x81, 0xC9, 0x04, 0xCF, 0x92, 0xCC, 0x88,\n\t0xC9, 0x04, 0xD0, 0x86, 0xCC, 0x88, 0xC9, 0x04,\n\t0xD0, 0x90, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0x90,\n\t0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x93, 0xCC, 0x81,\n\t0xC9, 0x04, 0xD0, 0x95, 0xCC, 0x80, 0xC9, 0x04,\n\t0xD0, 0x95, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0x95,\n\t0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x96, 0xCC, 0x86,\n\t0xC9, 0x04, 0xD0, 0x96, 0xCC, 0x88, 0xC9, 0x04,\n\t// Bytes 3740 - 377f\n\t0xD0, 0x97, 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x98,\n\t0xCC, 0x80, 0xC9, 0x04, 0xD0, 0x98, 0xCC, 0x84,\n\t0xC9, 0x04, 0xD0, 0x98, 0xCC, 0x86, 0xC9, 0x04,\n\t0xD0, 0x98, 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x9A,\n\t0xCC, 0x81, 0xC9, 0x04, 0xD0, 0x9E, 0xCC, 0x88,\n\t0xC9, 0x04, 0xD0, 0xA3, 0xCC, 0x84, 0xC9, 0x04,\n\t0xD0, 0xA3, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0xA3,\n\t0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xA3, 0xCC, 0x8B,\n\t// Bytes 3780 - 37bf\n\t0xC9, 0x04, 0xD0, 0xA7, 0xCC, 0x88, 0xC9, 0x04,\n\t0xD0, 0xAB, 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xAD,\n\t0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xB0, 0xCC, 0x86,\n\t0xC9, 0x04, 0xD0, 0xB0, 0xCC, 0x88, 0xC9, 0x04,\n\t0xD0, 0xB3, 0xCC, 0x81, 0xC9, 0x04, 0xD0, 0xB5,\n\t0xCC, 0x80, 0xC9, 0x04, 0xD0, 0xB5, 0xCC, 0x86,\n\t0xC9, 0x04, 0xD0, 0xB5, 0xCC, 0x88, 0xC9, 0x04,\n\t0xD0, 0xB6, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0xB6,\n\t// Bytes 37c0 - 37ff\n\t0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xB7, 0xCC, 0x88,\n\t0xC9, 0x04, 0xD0, 0xB8, 0xCC, 0x80, 0xC9, 0x04,\n\t0xD0, 0xB8, 0xCC, 0x84, 0xC9, 0x04, 0xD0, 0xB8,\n\t0xCC, 0x86, 0xC9, 0x04, 0xD0, 0xB8, 0xCC, 0x88,\n\t0xC9, 0x04, 0xD0, 0xBA, 0xCC, 0x81, 0xC9, 0x04,\n\t0xD0, 0xBE, 0xCC, 0x88, 0xC9, 0x04, 0xD1, 0x83,\n\t0xCC, 0x84, 0xC9, 0x04, 0xD1, 0x83, 0xCC, 0x86,\n\t0xC9, 0x04, 0xD1, 0x83, 0xCC, 0x88, 0xC9, 0x04,\n\t// Bytes 3800 - 383f\n\t0xD1, 0x83, 0xCC, 0x8B, 0xC9, 0x04, 0xD1, 0x87,\n\t0xCC, 0x88, 0xC9, 0x04, 0xD1, 0x8B, 0xCC, 0x88,\n\t0xC9, 0x04, 0xD1, 0x8D, 0xCC, 0x88, 0xC9, 0x04,\n\t0xD1, 0x96, 0xCC, 0x88, 0xC9, 0x04, 0xD1, 0xB4,\n\t0xCC, 0x8F, 0xC9, 0x04, 0xD1, 0xB5, 0xCC, 0x8F,\n\t0xC9, 0x04, 0xD3, 0x98, 0xCC, 0x88, 0xC9, 0x04,\n\t0xD3, 0x99, 0xCC, 0x88, 0xC9, 0x04, 0xD3, 0xA8,\n\t0xCC, 0x88, 0xC9, 0x04, 0xD3, 0xA9, 0xCC, 0x88,\n\t// Bytes 3840 - 387f\n\t0xC9, 0x04, 0xD8, 0xA7, 0xD9, 0x93, 0xC9, 0x04,\n\t0xD8, 0xA7, 0xD9, 0x94, 0xC9, 0x04, 0xD8, 0xA7,\n\t0xD9, 0x95, 0xB5, 0x04, 0xD9, 0x88, 0xD9, 0x94,\n\t0xC9, 0x04, 0xD9, 0x8A, 0xD9, 0x94, 0xC9, 0x04,\n\t0xDB, 0x81, 0xD9, 0x94, 0xC9, 0x04, 0xDB, 0x92,\n\t0xD9, 0x94, 0xC9, 0x04, 0xDB, 0x95, 0xD9, 0x94,\n\t0xC9, 0x05, 0x41, 0xCC, 0x82, 0xCC, 0x80, 0xCA,\n\t0x05, 0x41, 0xCC, 0x82, 0xCC, 0x81, 0xCA, 0x05,\n\t// Bytes 3880 - 38bf\n\t0x41, 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, 0x41,\n\t0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x41, 0xCC,\n\t0x86, 0xCC, 0x80, 0xCA, 0x05, 0x41, 0xCC, 0x86,\n\t0xCC, 0x81, 0xCA, 0x05, 0x41, 0xCC, 0x86, 0xCC,\n\t0x83, 0xCA, 0x05, 0x41, 0xCC, 0x86, 0xCC, 0x89,\n\t0xCA, 0x05, 0x41, 0xCC, 0x87, 0xCC, 0x84, 0xCA,\n\t0x05, 0x41, 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05,\n\t0x41, 0xCC, 0x8A, 0xCC, 0x81, 0xCA, 0x05, 0x41,\n\t// Bytes 38c0 - 38ff\n\t0xCC, 0xA3, 0xCC, 0x82, 0xCA, 0x05, 0x41, 0xCC,\n\t0xA3, 0xCC, 0x86, 0xCA, 0x05, 0x43, 0xCC, 0xA7,\n\t0xCC, 0x81, 0xCA, 0x05, 0x45, 0xCC, 0x82, 0xCC,\n\t0x80, 0xCA, 0x05, 0x45, 0xCC, 0x82, 0xCC, 0x81,\n\t0xCA, 0x05, 0x45, 0xCC, 0x82, 0xCC, 0x83, 0xCA,\n\t0x05, 0x45, 0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05,\n\t0x45, 0xCC, 0x84, 0xCC, 0x80, 0xCA, 0x05, 0x45,\n\t0xCC, 0x84, 0xCC, 0x81, 0xCA, 0x05, 0x45, 0xCC,\n\t// Bytes 3900 - 393f\n\t0xA3, 0xCC, 0x82, 0xCA, 0x05, 0x45, 0xCC, 0xA7,\n\t0xCC, 0x86, 0xCA, 0x05, 0x49, 0xCC, 0x88, 0xCC,\n\t0x81, 0xCA, 0x05, 0x4C, 0xCC, 0xA3, 0xCC, 0x84,\n\t0xCA, 0x05, 0x4F, 0xCC, 0x82, 0xCC, 0x80, 0xCA,\n\t0x05, 0x4F, 0xCC, 0x82, 0xCC, 0x81, 0xCA, 0x05,\n\t0x4F, 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, 0x4F,\n\t0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x4F, 0xCC,\n\t0x83, 0xCC, 0x81, 0xCA, 0x05, 0x4F, 0xCC, 0x83,\n\t// Bytes 3940 - 397f\n\t0xCC, 0x84, 0xCA, 0x05, 0x4F, 0xCC, 0x83, 0xCC,\n\t0x88, 0xCA, 0x05, 0x4F, 0xCC, 0x84, 0xCC, 0x80,\n\t0xCA, 0x05, 0x4F, 0xCC, 0x84, 0xCC, 0x81, 0xCA,\n\t0x05, 0x4F, 0xCC, 0x87, 0xCC, 0x84, 0xCA, 0x05,\n\t0x4F, 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x4F,\n\t0xCC, 0x9B, 0xCC, 0x80, 0xCA, 0x05, 0x4F, 0xCC,\n\t0x9B, 0xCC, 0x81, 0xCA, 0x05, 0x4F, 0xCC, 0x9B,\n\t0xCC, 0x83, 0xCA, 0x05, 0x4F, 0xCC, 0x9B, 0xCC,\n\t// Bytes 3980 - 39bf\n\t0x89, 0xCA, 0x05, 0x4F, 0xCC, 0x9B, 0xCC, 0xA3,\n\t0xB6, 0x05, 0x4F, 0xCC, 0xA3, 0xCC, 0x82, 0xCA,\n\t0x05, 0x4F, 0xCC, 0xA8, 0xCC, 0x84, 0xCA, 0x05,\n\t0x52, 0xCC, 0xA3, 0xCC, 0x84, 0xCA, 0x05, 0x53,\n\t0xCC, 0x81, 0xCC, 0x87, 0xCA, 0x05, 0x53, 0xCC,\n\t0x8C, 0xCC, 0x87, 0xCA, 0x05, 0x53, 0xCC, 0xA3,\n\t0xCC, 0x87, 0xCA, 0x05, 0x55, 0xCC, 0x83, 0xCC,\n\t0x81, 0xCA, 0x05, 0x55, 0xCC, 0x84, 0xCC, 0x88,\n\t// Bytes 39c0 - 39ff\n\t0xCA, 0x05, 0x55, 0xCC, 0x88, 0xCC, 0x80, 0xCA,\n\t0x05, 0x55, 0xCC, 0x88, 0xCC, 0x81, 0xCA, 0x05,\n\t0x55, 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x55,\n\t0xCC, 0x88, 0xCC, 0x8C, 0xCA, 0x05, 0x55, 0xCC,\n\t0x9B, 0xCC, 0x80, 0xCA, 0x05, 0x55, 0xCC, 0x9B,\n\t0xCC, 0x81, 0xCA, 0x05, 0x55, 0xCC, 0x9B, 0xCC,\n\t0x83, 0xCA, 0x05, 0x55, 0xCC, 0x9B, 0xCC, 0x89,\n\t0xCA, 0x05, 0x55, 0xCC, 0x9B, 0xCC, 0xA3, 0xB6,\n\t// Bytes 3a00 - 3a3f\n\t0x05, 0x61, 0xCC, 0x82, 0xCC, 0x80, 0xCA, 0x05,\n\t0x61, 0xCC, 0x82, 0xCC, 0x81, 0xCA, 0x05, 0x61,\n\t0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, 0x61, 0xCC,\n\t0x82, 0xCC, 0x89, 0xCA, 0x05, 0x61, 0xCC, 0x86,\n\t0xCC, 0x80, 0xCA, 0x05, 0x61, 0xCC, 0x86, 0xCC,\n\t0x81, 0xCA, 0x05, 0x61, 0xCC, 0x86, 0xCC, 0x83,\n\t0xCA, 0x05, 0x61, 0xCC, 0x86, 0xCC, 0x89, 0xCA,\n\t0x05, 0x61, 0xCC, 0x87, 0xCC, 0x84, 0xCA, 0x05,\n\t// Bytes 3a40 - 3a7f\n\t0x61, 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x61,\n\t0xCC, 0x8A, 0xCC, 0x81, 0xCA, 0x05, 0x61, 0xCC,\n\t0xA3, 0xCC, 0x82, 0xCA, 0x05, 0x61, 0xCC, 0xA3,\n\t0xCC, 0x86, 0xCA, 0x05, 0x63, 0xCC, 0xA7, 0xCC,\n\t0x81, 0xCA, 0x05, 0x65, 0xCC, 0x82, 0xCC, 0x80,\n\t0xCA, 0x05, 0x65, 0xCC, 0x82, 0xCC, 0x81, 0xCA,\n\t0x05, 0x65, 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05,\n\t0x65, 0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x65,\n\t// Bytes 3a80 - 3abf\n\t0xCC, 0x84, 0xCC, 0x80, 0xCA, 0x05, 0x65, 0xCC,\n\t0x84, 0xCC, 0x81, 0xCA, 0x05, 0x65, 0xCC, 0xA3,\n\t0xCC, 0x82, 0xCA, 0x05, 0x65, 0xCC, 0xA7, 0xCC,\n\t0x86, 0xCA, 0x05, 0x69, 0xCC, 0x88, 0xCC, 0x81,\n\t0xCA, 0x05, 0x6C, 0xCC, 0xA3, 0xCC, 0x84, 0xCA,\n\t0x05, 0x6F, 0xCC, 0x82, 0xCC, 0x80, 0xCA, 0x05,\n\t0x6F, 0xCC, 0x82, 0xCC, 0x81, 0xCA, 0x05, 0x6F,\n\t0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, 0x6F, 0xCC,\n\t// Bytes 3ac0 - 3aff\n\t0x82, 0xCC, 0x89, 0xCA, 0x05, 0x6F, 0xCC, 0x83,\n\t0xCC, 0x81, 0xCA, 0x05, 0x6F, 0xCC, 0x83, 0xCC,\n\t0x84, 0xCA, 0x05, 0x6F, 0xCC, 0x83, 0xCC, 0x88,\n\t0xCA, 0x05, 0x6F, 0xCC, 0x84, 0xCC, 0x80, 0xCA,\n\t0x05, 0x6F, 0xCC, 0x84, 0xCC, 0x81, 0xCA, 0x05,\n\t0x6F, 0xCC, 0x87, 0xCC, 0x84, 0xCA, 0x05, 0x6F,\n\t0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x6F, 0xCC,\n\t0x9B, 0xCC, 0x80, 0xCA, 0x05, 0x6F, 0xCC, 0x9B,\n\t// Bytes 3b00 - 3b3f\n\t0xCC, 0x81, 0xCA, 0x05, 0x6F, 0xCC, 0x9B, 0xCC,\n\t0x83, 0xCA, 0x05, 0x6F, 0xCC, 0x9B, 0xCC, 0x89,\n\t0xCA, 0x05, 0x6F, 0xCC, 0x9B, 0xCC, 0xA3, 0xB6,\n\t0x05, 0x6F, 0xCC, 0xA3, 0xCC, 0x82, 0xCA, 0x05,\n\t0x6F, 0xCC, 0xA8, 0xCC, 0x84, 0xCA, 0x05, 0x72,\n\t0xCC, 0xA3, 0xCC, 0x84, 0xCA, 0x05, 0x73, 0xCC,\n\t0x81, 0xCC, 0x87, 0xCA, 0x05, 0x73, 0xCC, 0x8C,\n\t0xCC, 0x87, 0xCA, 0x05, 0x73, 0xCC, 0xA3, 0xCC,\n\t// Bytes 3b40 - 3b7f\n\t0x87, 0xCA, 0x05, 0x75, 0xCC, 0x83, 0xCC, 0x81,\n\t0xCA, 0x05, 0x75, 0xCC, 0x84, 0xCC, 0x88, 0xCA,\n\t0x05, 0x75, 0xCC, 0x88, 0xCC, 0x80, 0xCA, 0x05,\n\t0x75, 0xCC, 0x88, 0xCC, 0x81, 0xCA, 0x05, 0x75,\n\t0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x75, 0xCC,\n\t0x88, 0xCC, 0x8C, 0xCA, 0x05, 0x75, 0xCC, 0x9B,\n\t0xCC, 0x80, 0xCA, 0x05, 0x75, 0xCC, 0x9B, 0xCC,\n\t0x81, 0xCA, 0x05, 0x75, 0xCC, 0x9B, 0xCC, 0x83,\n\t// Bytes 3b80 - 3bbf\n\t0xCA, 0x05, 0x75, 0xCC, 0x9B, 0xCC, 0x89, 0xCA,\n\t0x05, 0x75, 0xCC, 0x9B, 0xCC, 0xA3, 0xB6, 0x05,\n\t0xE1, 0xBE, 0xBF, 0xCC, 0x80, 0xCA, 0x05, 0xE1,\n\t0xBE, 0xBF, 0xCC, 0x81, 0xCA, 0x05, 0xE1, 0xBE,\n\t0xBF, 0xCD, 0x82, 0xCA, 0x05, 0xE1, 0xBF, 0xBE,\n\t0xCC, 0x80, 0xCA, 0x05, 0xE1, 0xBF, 0xBE, 0xCC,\n\t0x81, 0xCA, 0x05, 0xE1, 0xBF, 0xBE, 0xCD, 0x82,\n\t0xCA, 0x05, 0xE2, 0x86, 0x90, 0xCC, 0xB8, 0x05,\n\t// Bytes 3bc0 - 3bff\n\t0x05, 0xE2, 0x86, 0x92, 0xCC, 0xB8, 0x05, 0x05,\n\t0xE2, 0x86, 0x94, 0xCC, 0xB8, 0x05, 0x05, 0xE2,\n\t0x87, 0x90, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x87,\n\t0x92, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x87, 0x94,\n\t0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x88, 0x83, 0xCC,\n\t0xB8, 0x05, 0x05, 0xE2, 0x88, 0x88, 0xCC, 0xB8,\n\t0x05, 0x05, 0xE2, 0x88, 0x8B, 0xCC, 0xB8, 0x05,\n\t0x05, 0xE2, 0x88, 0xA3, 0xCC, 0xB8, 0x05, 0x05,\n\t// Bytes 3c00 - 3c3f\n\t0xE2, 0x88, 0xA5, 0xCC, 0xB8, 0x05, 0x05, 0xE2,\n\t0x88, 0xBC, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89,\n\t0x83, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0x85,\n\t0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0x88, 0xCC,\n\t0xB8, 0x05, 0x05, 0xE2, 0x89, 0x8D, 0xCC, 0xB8,\n\t0x05, 0x05, 0xE2, 0x89, 0xA1, 0xCC, 0xB8, 0x05,\n\t0x05, 0xE2, 0x89, 0xA4, 0xCC, 0xB8, 0x05, 0x05,\n\t0xE2, 0x89, 0xA5, 0xCC, 0xB8, 0x05, 0x05, 0xE2,\n\t// Bytes 3c40 - 3c7f\n\t0x89, 0xB2, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89,\n\t0xB3, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xB6,\n\t0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xB7, 0xCC,\n\t0xB8, 0x05, 0x05, 0xE2, 0x89, 0xBA, 0xCC, 0xB8,\n\t0x05, 0x05, 0xE2, 0x89, 0xBB, 0xCC, 0xB8, 0x05,\n\t0x05, 0xE2, 0x89, 0xBC, 0xCC, 0xB8, 0x05, 0x05,\n\t0xE2, 0x89, 0xBD, 0xCC, 0xB8, 0x05, 0x05, 0xE2,\n\t0x8A, 0x82, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A,\n\t// Bytes 3c80 - 3cbf\n\t0x83, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x86,\n\t0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x87, 0xCC,\n\t0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x91, 0xCC, 0xB8,\n\t0x05, 0x05, 0xE2, 0x8A, 0x92, 0xCC, 0xB8, 0x05,\n\t0x05, 0xE2, 0x8A, 0xA2, 0xCC, 0xB8, 0x05, 0x05,\n\t0xE2, 0x8A, 0xA8, 0xCC, 0xB8, 0x05, 0x05, 0xE2,\n\t0x8A, 0xA9, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A,\n\t0xAB, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xB2,\n\t// Bytes 3cc0 - 3cff\n\t0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xB3, 0xCC,\n\t0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xB4, 0xCC, 0xB8,\n\t0x05, 0x05, 0xE2, 0x8A, 0xB5, 0xCC, 0xB8, 0x05,\n\t0x06, 0xCE, 0x91, 0xCC, 0x93, 0xCD, 0x85, 0xDA,\n\t0x06, 0xCE, 0x91, 0xCC, 0x94, 0xCD, 0x85, 0xDA,\n\t0x06, 0xCE, 0x95, 0xCC, 0x93, 0xCC, 0x80, 0xCA,\n\t0x06, 0xCE, 0x95, 0xCC, 0x93, 0xCC, 0x81, 0xCA,\n\t0x06, 0xCE, 0x95, 0xCC, 0x94, 0xCC, 0x80, 0xCA,\n\t// Bytes 3d00 - 3d3f\n\t0x06, 0xCE, 0x95, 0xCC, 0x94, 0xCC, 0x81, 0xCA,\n\t0x06, 0xCE, 0x97, 0xCC, 0x93, 0xCD, 0x85, 0xDA,\n\t0x06, 0xCE, 0x97, 0xCC, 0x94, 0xCD, 0x85, 0xDA,\n\t0x06, 0xCE, 0x99, 0xCC, 0x93, 0xCC, 0x80, 0xCA,\n\t0x06, 0xCE, 0x99, 0xCC, 0x93, 0xCC, 0x81, 0xCA,\n\t0x06, 0xCE, 0x99, 0xCC, 0x93, 0xCD, 0x82, 0xCA,\n\t0x06, 0xCE, 0x99, 0xCC, 0x94, 0xCC, 0x80, 0xCA,\n\t0x06, 0xCE, 0x99, 0xCC, 0x94, 0xCC, 0x81, 0xCA,\n\t// Bytes 3d40 - 3d7f\n\t0x06, 0xCE, 0x99, 0xCC, 0x94, 0xCD, 0x82, 0xCA,\n\t0x06, 0xCE, 0x9F, 0xCC, 0x93, 0xCC, 0x80, 0xCA,\n\t0x06, 0xCE, 0x9F, 0xCC, 0x93, 0xCC, 0x81, 0xCA,\n\t0x06, 0xCE, 0x9F, 0xCC, 0x94, 0xCC, 0x80, 0xCA,\n\t0x06, 0xCE, 0x9F, 0xCC, 0x94, 0xCC, 0x81, 0xCA,\n\t0x06, 0xCE, 0xA5, 0xCC, 0x94, 0xCC, 0x80, 0xCA,\n\t0x06, 0xCE, 0xA5, 0xCC, 0x94, 0xCC, 0x81, 0xCA,\n\t0x06, 0xCE, 0xA5, 0xCC, 0x94, 0xCD, 0x82, 0xCA,\n\t// Bytes 3d80 - 3dbf\n\t0x06, 0xCE, 0xA9, 0xCC, 0x93, 0xCD, 0x85, 0xDA,\n\t0x06, 0xCE, 0xA9, 0xCC, 0x94, 0xCD, 0x85, 0xDA,\n\t0x06, 0xCE, 0xB1, 0xCC, 0x80, 0xCD, 0x85, 0xDA,\n\t0x06, 0xCE, 0xB1, 0xCC, 0x81, 0xCD, 0x85, 0xDA,\n\t0x06, 0xCE, 0xB1, 0xCC, 0x93, 0xCD, 0x85, 0xDA,\n\t0x06, 0xCE, 0xB1, 0xCC, 0x94, 0xCD, 0x85, 0xDA,\n\t0x06, 0xCE, 0xB1, 0xCD, 0x82, 0xCD, 0x85, 0xDA,\n\t0x06, 0xCE, 0xB5, 0xCC, 0x93, 0xCC, 0x80, 0xCA,\n\t// Bytes 3dc0 - 3dff\n\t0x06, 0xCE, 0xB5, 0xCC, 0x93, 0xCC, 0x81, 0xCA,\n\t0x06, 0xCE, 0xB5, 0xCC, 0x94, 0xCC, 0x80, 0xCA,\n\t0x06, 0xCE, 0xB5, 0xCC, 0x94, 0xCC, 0x81, 0xCA,\n\t0x06, 0xCE, 0xB7, 0xCC, 0x80, 0xCD, 0x85, 0xDA,\n\t0x06, 0xCE, 0xB7, 0xCC, 0x81, 0xCD, 0x85, 0xDA,\n\t0x06, 0xCE, 0xB7, 0xCC, 0x93, 0xCD, 0x85, 0xDA,\n\t0x06, 0xCE, 0xB7, 0xCC, 0x94, 0xCD, 0x85, 0xDA,\n\t0x06, 0xCE, 0xB7, 0xCD, 0x82, 0xCD, 0x85, 0xDA,\n\t// Bytes 3e00 - 3e3f\n\t0x06, 0xCE, 0xB9, 0xCC, 0x88, 0xCC, 0x80, 0xCA,\n\t0x06, 0xCE, 0xB9, 0xCC, 0x88, 0xCC, 0x81, 0xCA,\n\t0x06, 0xCE, 0xB9, 0xCC, 0x88, 0xCD, 0x82, 0xCA,\n\t0x06, 0xCE, 0xB9, 0xCC, 0x93, 0xCC, 0x80, 0xCA,\n\t0x06, 0xCE, 0xB9, 0xCC, 0x93, 0xCC, 0x81, 0xCA,\n\t0x06, 0xCE, 0xB9, 0xCC, 0x93, 0xCD, 0x82, 0xCA,\n\t0x06, 0xCE, 0xB9, 0xCC, 0x94, 0xCC, 0x80, 0xCA,\n\t0x06, 0xCE, 0xB9, 0xCC, 0x94, 0xCC, 0x81, 0xCA,\n\t// Bytes 3e40 - 3e7f\n\t0x06, 0xCE, 0xB9, 0xCC, 0x94, 0xCD, 0x82, 0xCA,\n\t0x06, 0xCE, 0xBF, 0xCC, 0x93, 0xCC, 0x80, 0xCA,\n\t0x06, 0xCE, 0xBF, 0xCC, 0x93, 0xCC, 0x81, 0xCA,\n\t0x06, 0xCE, 0xBF, 0xCC, 0x94, 0xCC, 0x80, 0xCA,\n\t0x06, 0xCE, 0xBF, 0xCC, 0x94, 0xCC, 0x81, 0xCA,\n\t0x06, 0xCF, 0x85, 0xCC, 0x88, 0xCC, 0x80, 0xCA,\n\t0x06, 0xCF, 0x85, 0xCC, 0x88, 0xCC, 0x81, 0xCA,\n\t0x06, 0xCF, 0x85, 0xCC, 0x88, 0xCD, 0x82, 0xCA,\n\t// Bytes 3e80 - 3ebf\n\t0x06, 0xCF, 0x85, 0xCC, 0x93, 0xCC, 0x80, 0xCA,\n\t0x06, 0xCF, 0x85, 0xCC, 0x93, 0xCC, 0x81, 0xCA,\n\t0x06, 0xCF, 0x85, 0xCC, 0x93, 0xCD, 0x82, 0xCA,\n\t0x06, 0xCF, 0x85, 0xCC, 0x94, 0xCC, 0x80, 0xCA,\n\t0x06, 0xCF, 0x85, 0xCC, 0x94, 0xCC, 0x81, 0xCA,\n\t0x06, 0xCF, 0x85, 0xCC, 0x94, 0xCD, 0x82, 0xCA,\n\t0x06, 0xCF, 0x89, 0xCC, 0x80, 0xCD, 0x85, 0xDA,\n\t0x06, 0xCF, 0x89, 0xCC, 0x81, 0xCD, 0x85, 0xDA,\n\t// Bytes 3ec0 - 3eff\n\t0x06, 0xCF, 0x89, 0xCC, 0x93, 0xCD, 0x85, 0xDA,\n\t0x06, 0xCF, 0x89, 0xCC, 0x94, 0xCD, 0x85, 0xDA,\n\t0x06, 0xCF, 0x89, 0xCD, 0x82, 0xCD, 0x85, 0xDA,\n\t0x06, 0xE0, 0xA4, 0xA8, 0xE0, 0xA4, 0xBC, 0x09,\n\t0x06, 0xE0, 0xA4, 0xB0, 0xE0, 0xA4, 0xBC, 0x09,\n\t0x06, 0xE0, 0xA4, 0xB3, 0xE0, 0xA4, 0xBC, 0x09,\n\t0x06, 0xE0, 0xB1, 0x86, 0xE0, 0xB1, 0x96, 0x85,\n\t0x06, 0xE0, 0xB7, 0x99, 0xE0, 0xB7, 0x8A, 0x11,\n\t// Bytes 3f00 - 3f3f\n\t0x06, 0xE3, 0x81, 0x86, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x81, 0x8B, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x81, 0x8D, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x81, 0x8F, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x81, 0x91, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x81, 0x93, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x81, 0x95, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x81, 0x97, 0xE3, 0x82, 0x99, 0x0D,\n\t// Bytes 3f40 - 3f7f\n\t0x06, 0xE3, 0x81, 0x99, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x81, 0x9B, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x81, 0x9D, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x81, 0x9F, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x81, 0xA1, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x81, 0xA4, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x81, 0xA6, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x81, 0xA8, 0xE3, 0x82, 0x99, 0x0D,\n\t// Bytes 3f80 - 3fbf\n\t0x06, 0xE3, 0x81, 0xAF, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x81, 0xAF, 0xE3, 0x82, 0x9A, 0x0D,\n\t0x06, 0xE3, 0x81, 0xB2, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x81, 0xB2, 0xE3, 0x82, 0x9A, 0x0D,\n\t0x06, 0xE3, 0x81, 0xB5, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x81, 0xB5, 0xE3, 0x82, 0x9A, 0x0D,\n\t0x06, 0xE3, 0x81, 0xB8, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x81, 0xB8, 0xE3, 0x82, 0x9A, 0x0D,\n\t// Bytes 3fc0 - 3fff\n\t0x06, 0xE3, 0x81, 0xBB, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x81, 0xBB, 0xE3, 0x82, 0x9A, 0x0D,\n\t0x06, 0xE3, 0x82, 0x9D, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x82, 0xA6, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x82, 0xAD, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x82, 0xB1, 0xE3, 0x82, 0x99, 0x0D,\n\t// Bytes 4000 - 403f\n\t0x06, 0xE3, 0x82, 0xB3, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x82, 0xB5, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x82, 0xB7, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x82, 0xB9, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x82, 0xBB, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x82, 0xBD, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x82, 0xBF, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x83, 0x81, 0xE3, 0x82, 0x99, 0x0D,\n\t// Bytes 4040 - 407f\n\t0x06, 0xE3, 0x83, 0x84, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x83, 0x86, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x9A, 0x0D,\n\t0x06, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A, 0x0D,\n\t0x06, 0xE3, 0x83, 0x95, 0xE3, 0x82, 0x99, 0x0D,\n\t// Bytes 4080 - 40bf\n\t0x06, 0xE3, 0x83, 0x95, 0xE3, 0x82, 0x9A, 0x0D,\n\t0x06, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, 0x0D,\n\t0x06, 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x9A, 0x0D,\n\t0x06, 0xE3, 0x83, 0xAF, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x83, 0xB0, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x83, 0xB1, 0xE3, 0x82, 0x99, 0x0D,\n\t// Bytes 40c0 - 40ff\n\t0x06, 0xE3, 0x83, 0xB2, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x83, 0xBD, 0xE3, 0x82, 0x99, 0x0D,\n\t0x08, 0xCE, 0x91, 0xCC, 0x93, 0xCC, 0x80, 0xCD,\n\t0x85, 0xDB, 0x08, 0xCE, 0x91, 0xCC, 0x93, 0xCC,\n\t0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0x91, 0xCC,\n\t0x93, 0xCD, 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE,\n\t0x91, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDB,\n\t0x08, 0xCE, 0x91, 0xCC, 0x94, 0xCC, 0x81, 0xCD,\n\t// Bytes 4100 - 413f\n\t0x85, 0xDB, 0x08, 0xCE, 0x91, 0xCC, 0x94, 0xCD,\n\t0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0x97, 0xCC,\n\t0x93, 0xCC, 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE,\n\t0x97, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDB,\n\t0x08, 0xCE, 0x97, 0xCC, 0x93, 0xCD, 0x82, 0xCD,\n\t0x85, 0xDB, 0x08, 0xCE, 0x97, 0xCC, 0x94, 0xCC,\n\t0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0x97, 0xCC,\n\t0x94, 0xCC, 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE,\n\t// Bytes 4140 - 417f\n\t0x97, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDB,\n\t0x08, 0xCE, 0xA9, 0xCC, 0x93, 0xCC, 0x80, 0xCD,\n\t0x85, 0xDB, 0x08, 0xCE, 0xA9, 0xCC, 0x93, 0xCC,\n\t0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xA9, 0xCC,\n\t0x93, 0xCD, 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE,\n\t0xA9, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDB,\n\t0x08, 0xCE, 0xA9, 0xCC, 0x94, 0xCC, 0x81, 0xCD,\n\t0x85, 0xDB, 0x08, 0xCE, 0xA9, 0xCC, 0x94, 0xCD,\n\t// Bytes 4180 - 41bf\n\t0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xB1, 0xCC,\n\t0x93, 0xCC, 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE,\n\t0xB1, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDB,\n\t0x08, 0xCE, 0xB1, 0xCC, 0x93, 0xCD, 0x82, 0xCD,\n\t0x85, 0xDB, 0x08, 0xCE, 0xB1, 0xCC, 0x94, 0xCC,\n\t0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xB1, 0xCC,\n\t0x94, 0xCC, 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE,\n\t0xB1, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDB,\n\t// Bytes 41c0 - 41ff\n\t0x08, 0xCE, 0xB7, 0xCC, 0x93, 0xCC, 0x80, 0xCD,\n\t0x85, 0xDB, 0x08, 0xCE, 0xB7, 0xCC, 0x93, 0xCC,\n\t0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xB7, 0xCC,\n\t0x93, 0xCD, 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE,\n\t0xB7, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDB,\n\t0x08, 0xCE, 0xB7, 0xCC, 0x94, 0xCC, 0x81, 0xCD,\n\t0x85, 0xDB, 0x08, 0xCE, 0xB7, 0xCC, 0x94, 0xCD,\n\t0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCF, 0x89, 0xCC,\n\t// Bytes 4200 - 423f\n\t0x93, 0xCC, 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCF,\n\t0x89, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDB,\n\t0x08, 0xCF, 0x89, 0xCC, 0x93, 0xCD, 0x82, 0xCD,\n\t0x85, 0xDB, 0x08, 0xCF, 0x89, 0xCC, 0x94, 0xCC,\n\t0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCF, 0x89, 0xCC,\n\t0x94, 0xCC, 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCF,\n\t0x89, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDB,\n\t0x08, 0xF0, 0x91, 0x82, 0x99, 0xF0, 0x91, 0x82,\n\t// Bytes 4240 - 427f\n\t0xBA, 0x09, 0x08, 0xF0, 0x91, 0x82, 0x9B, 0xF0,\n\t0x91, 0x82, 0xBA, 0x09, 0x08, 0xF0, 0x91, 0x82,\n\t0xA5, 0xF0, 0x91, 0x82, 0xBA, 0x09, 0x42, 0xC2,\n\t0xB4, 0x01, 0x43, 0x20, 0xCC, 0x81, 0xC9, 0x43,\n\t0x20, 0xCC, 0x83, 0xC9, 0x43, 0x20, 0xCC, 0x84,\n\t0xC9, 0x43, 0x20, 0xCC, 0x85, 0xC9, 0x43, 0x20,\n\t0xCC, 0x86, 0xC9, 0x43, 0x20, 0xCC, 0x87, 0xC9,\n\t0x43, 0x20, 0xCC, 0x88, 0xC9, 0x43, 0x20, 0xCC,\n\t// Bytes 4280 - 42bf\n\t0x8A, 0xC9, 0x43, 0x20, 0xCC, 0x8B, 0xC9, 0x43,\n\t0x20, 0xCC, 0x93, 0xC9, 0x43, 0x20, 0xCC, 0x94,\n\t0xC9, 0x43, 0x20, 0xCC, 0xA7, 0xA5, 0x43, 0x20,\n\t0xCC, 0xA8, 0xA5, 0x43, 0x20, 0xCC, 0xB3, 0xB5,\n\t0x43, 0x20, 0xCD, 0x82, 0xC9, 0x43, 0x20, 0xCD,\n\t0x85, 0xD9, 0x43, 0x20, 0xD9, 0x8B, 0x59, 0x43,\n\t0x20, 0xD9, 0x8C, 0x5D, 0x43, 0x20, 0xD9, 0x8D,\n\t0x61, 0x43, 0x20, 0xD9, 0x8E, 0x65, 0x43, 0x20,\n\t// Bytes 42c0 - 42ff\n\t0xD9, 0x8F, 0x69, 0x43, 0x20, 0xD9, 0x90, 0x6D,\n\t0x43, 0x20, 0xD9, 0x91, 0x71, 0x43, 0x20, 0xD9,\n\t0x92, 0x75, 0x43, 0x41, 0xCC, 0x8A, 0xC9, 0x43,\n\t0x73, 0xCC, 0x87, 0xC9, 0x44, 0x20, 0xE3, 0x82,\n\t0x99, 0x0D, 0x44, 0x20, 0xE3, 0x82, 0x9A, 0x0D,\n\t0x44, 0xC2, 0xA8, 0xCC, 0x81, 0xCA, 0x44, 0xCE,\n\t0x91, 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0x95, 0xCC,\n\t0x81, 0xC9, 0x44, 0xCE, 0x97, 0xCC, 0x81, 0xC9,\n\t// Bytes 4300 - 433f\n\t0x44, 0xCE, 0x99, 0xCC, 0x81, 0xC9, 0x44, 0xCE,\n\t0x9F, 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0xA5, 0xCC,\n\t0x81, 0xC9, 0x44, 0xCE, 0xA5, 0xCC, 0x88, 0xC9,\n\t0x44, 0xCE, 0xA9, 0xCC, 0x81, 0xC9, 0x44, 0xCE,\n\t0xB1, 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0xB5, 0xCC,\n\t0x81, 0xC9, 0x44, 0xCE, 0xB7, 0xCC, 0x81, 0xC9,\n\t0x44, 0xCE, 0xB9, 0xCC, 0x81, 0xC9, 0x44, 0xCE,\n\t0xBF, 0xCC, 0x81, 0xC9, 0x44, 0xCF, 0x85, 0xCC,\n\t// Bytes 4340 - 437f\n\t0x81, 0xC9, 0x44, 0xCF, 0x89, 0xCC, 0x81, 0xC9,\n\t0x44, 0xD7, 0x90, 0xD6, 0xB7, 0x31, 0x44, 0xD7,\n\t0x90, 0xD6, 0xB8, 0x35, 0x44, 0xD7, 0x90, 0xD6,\n\t0xBC, 0x41, 0x44, 0xD7, 0x91, 0xD6, 0xBC, 0x41,\n\t0x44, 0xD7, 0x91, 0xD6, 0xBF, 0x49, 0x44, 0xD7,\n\t0x92, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x93, 0xD6,\n\t0xBC, 0x41, 0x44, 0xD7, 0x94, 0xD6, 0xBC, 0x41,\n\t0x44, 0xD7, 0x95, 0xD6, 0xB9, 0x39, 0x44, 0xD7,\n\t// Bytes 4380 - 43bf\n\t0x95, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x96, 0xD6,\n\t0xBC, 0x41, 0x44, 0xD7, 0x98, 0xD6, 0xBC, 0x41,\n\t0x44, 0xD7, 0x99, 0xD6, 0xB4, 0x25, 0x44, 0xD7,\n\t0x99, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x9A, 0xD6,\n\t0xBC, 0x41, 0x44, 0xD7, 0x9B, 0xD6, 0xBC, 0x41,\n\t0x44, 0xD7, 0x9B, 0xD6, 0xBF, 0x49, 0x44, 0xD7,\n\t0x9C, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x9E, 0xD6,\n\t0xBC, 0x41, 0x44, 0xD7, 0xA0, 0xD6, 0xBC, 0x41,\n\t// Bytes 43c0 - 43ff\n\t0x44, 0xD7, 0xA1, 0xD6, 0xBC, 0x41, 0x44, 0xD7,\n\t0xA3, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0xA4, 0xD6,\n\t0xBC, 0x41, 0x44, 0xD7, 0xA4, 0xD6, 0xBF, 0x49,\n\t0x44, 0xD7, 0xA6, 0xD6, 0xBC, 0x41, 0x44, 0xD7,\n\t0xA7, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0xA8, 0xD6,\n\t0xBC, 0x41, 0x44, 0xD7, 0xA9, 0xD6, 0xBC, 0x41,\n\t0x44, 0xD7, 0xA9, 0xD7, 0x81, 0x4D, 0x44, 0xD7,\n\t0xA9, 0xD7, 0x82, 0x51, 0x44, 0xD7, 0xAA, 0xD6,\n\t// Bytes 4400 - 443f\n\t0xBC, 0x41, 0x44, 0xD7, 0xB2, 0xD6, 0xB7, 0x31,\n\t0x44, 0xD8, 0xA7, 0xD9, 0x8B, 0x59, 0x44, 0xD8,\n\t0xA7, 0xD9, 0x93, 0xC9, 0x44, 0xD8, 0xA7, 0xD9,\n\t0x94, 0xC9, 0x44, 0xD8, 0xA7, 0xD9, 0x95, 0xB5,\n\t0x44, 0xD8, 0xB0, 0xD9, 0xB0, 0x79, 0x44, 0xD8,\n\t0xB1, 0xD9, 0xB0, 0x79, 0x44, 0xD9, 0x80, 0xD9,\n\t0x8B, 0x59, 0x44, 0xD9, 0x80, 0xD9, 0x8E, 0x65,\n\t0x44, 0xD9, 0x80, 0xD9, 0x8F, 0x69, 0x44, 0xD9,\n\t// Bytes 4440 - 447f\n\t0x80, 0xD9, 0x90, 0x6D, 0x44, 0xD9, 0x80, 0xD9,\n\t0x91, 0x71, 0x44, 0xD9, 0x80, 0xD9, 0x92, 0x75,\n\t0x44, 0xD9, 0x87, 0xD9, 0xB0, 0x79, 0x44, 0xD9,\n\t0x88, 0xD9, 0x94, 0xC9, 0x44, 0xD9, 0x89, 0xD9,\n\t0xB0, 0x79, 0x44, 0xD9, 0x8A, 0xD9, 0x94, 0xC9,\n\t0x44, 0xDB, 0x92, 0xD9, 0x94, 0xC9, 0x44, 0xDB,\n\t0x95, 0xD9, 0x94, 0xC9, 0x45, 0x20, 0xCC, 0x88,\n\t0xCC, 0x80, 0xCA, 0x45, 0x20, 0xCC, 0x88, 0xCC,\n\t// Bytes 4480 - 44bf\n\t0x81, 0xCA, 0x45, 0x20, 0xCC, 0x88, 0xCD, 0x82,\n\t0xCA, 0x45, 0x20, 0xCC, 0x93, 0xCC, 0x80, 0xCA,\n\t0x45, 0x20, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x45,\n\t0x20, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x45, 0x20,\n\t0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x45, 0x20, 0xCC,\n\t0x94, 0xCC, 0x81, 0xCA, 0x45, 0x20, 0xCC, 0x94,\n\t0xCD, 0x82, 0xCA, 0x45, 0x20, 0xD9, 0x8C, 0xD9,\n\t0x91, 0x72, 0x45, 0x20, 0xD9, 0x8D, 0xD9, 0x91,\n\t// Bytes 44c0 - 44ff\n\t0x72, 0x45, 0x20, 0xD9, 0x8E, 0xD9, 0x91, 0x72,\n\t0x45, 0x20, 0xD9, 0x8F, 0xD9, 0x91, 0x72, 0x45,\n\t0x20, 0xD9, 0x90, 0xD9, 0x91, 0x72, 0x45, 0x20,\n\t0xD9, 0x91, 0xD9, 0xB0, 0x7A, 0x45, 0xE2, 0xAB,\n\t0x9D, 0xCC, 0xB8, 0x05, 0x46, 0xCE, 0xB9, 0xCC,\n\t0x88, 0xCC, 0x81, 0xCA, 0x46, 0xCF, 0x85, 0xCC,\n\t0x88, 0xCC, 0x81, 0xCA, 0x46, 0xD7, 0xA9, 0xD6,\n\t0xBC, 0xD7, 0x81, 0x4E, 0x46, 0xD7, 0xA9, 0xD6,\n\t// Bytes 4500 - 453f\n\t0xBC, 0xD7, 0x82, 0x52, 0x46, 0xD9, 0x80, 0xD9,\n\t0x8E, 0xD9, 0x91, 0x72, 0x46, 0xD9, 0x80, 0xD9,\n\t0x8F, 0xD9, 0x91, 0x72, 0x46, 0xD9, 0x80, 0xD9,\n\t0x90, 0xD9, 0x91, 0x72, 0x46, 0xE0, 0xA4, 0x95,\n\t0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0x96,\n\t0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0x97,\n\t0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0x9C,\n\t0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xA1,\n\t// Bytes 4540 - 457f\n\t0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xA2,\n\t0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xAB,\n\t0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xAF,\n\t0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA6, 0xA1,\n\t0xE0, 0xA6, 0xBC, 0x09, 0x46, 0xE0, 0xA6, 0xA2,\n\t0xE0, 0xA6, 0xBC, 0x09, 0x46, 0xE0, 0xA6, 0xAF,\n\t0xE0, 0xA6, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0x96,\n\t0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0x97,\n\t// Bytes 4580 - 45bf\n\t0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0x9C,\n\t0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0xAB,\n\t0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0xB2,\n\t0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0xB8,\n\t0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xAC, 0xA1,\n\t0xE0, 0xAC, 0xBC, 0x09, 0x46, 0xE0, 0xAC, 0xA2,\n\t0xE0, 0xAC, 0xBC, 0x09, 0x46, 0xE0, 0xBE, 0xB2,\n\t0xE0, 0xBE, 0x80, 0x9D, 0x46, 0xE0, 0xBE, 0xB3,\n\t// Bytes 45c0 - 45ff\n\t0xE0, 0xBE, 0x80, 0x9D, 0x46, 0xE3, 0x83, 0x86,\n\t0xE3, 0x82, 0x99, 0x0D, 0x48, 0xF0, 0x9D, 0x85,\n\t0x97, 0xF0, 0x9D, 0x85, 0xA5, 0xAD, 0x48, 0xF0,\n\t0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xAD,\n\t0x48, 0xF0, 0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85,\n\t0xA5, 0xAD, 0x48, 0xF0, 0x9D, 0x86, 0xBA, 0xF0,\n\t0x9D, 0x85, 0xA5, 0xAD, 0x49, 0xE0, 0xBE, 0xB2,\n\t0xE0, 0xBD, 0xB1, 0xE0, 0xBE, 0x80, 0x9E, 0x49,\n\t// Bytes 4600 - 463f\n\t0xE0, 0xBE, 0xB3, 0xE0, 0xBD, 0xB1, 0xE0, 0xBE,\n\t0x80, 0x9E, 0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0,\n\t0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAE, 0xAE,\n\t0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85,\n\t0xA5, 0xF0, 0x9D, 0x85, 0xAF, 0xAE, 0x4C, 0xF0,\n\t0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xF0,\n\t0x9D, 0x85, 0xB0, 0xAE, 0x4C, 0xF0, 0x9D, 0x85,\n\t0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85,\n\t// Bytes 4640 - 467f\n\t0xB1, 0xAE, 0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0,\n\t0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xB2, 0xAE,\n\t0x4C, 0xF0, 0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85,\n\t0xA5, 0xF0, 0x9D, 0x85, 0xAE, 0xAE, 0x4C, 0xF0,\n\t0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85, 0xA5, 0xF0,\n\t0x9D, 0x85, 0xAF, 0xAE, 0x4C, 0xF0, 0x9D, 0x86,\n\t0xBA, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85,\n\t0xAE, 0xAE, 0x4C, 0xF0, 0x9D, 0x86, 0xBA, 0xF0,\n\t// Bytes 4680 - 46bf\n\t0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAF, 0xAE,\n\t0x83, 0x41, 0xCC, 0x82, 0xC9, 0x83, 0x41, 0xCC,\n\t0x86, 0xC9, 0x83, 0x41, 0xCC, 0x87, 0xC9, 0x83,\n\t0x41, 0xCC, 0x88, 0xC9, 0x83, 0x41, 0xCC, 0x8A,\n\t0xC9, 0x83, 0x41, 0xCC, 0xA3, 0xB5, 0x83, 0x43,\n\t0xCC, 0xA7, 0xA5, 0x83, 0x45, 0xCC, 0x82, 0xC9,\n\t0x83, 0x45, 0xCC, 0x84, 0xC9, 0x83, 0x45, 0xCC,\n\t0xA3, 0xB5, 0x83, 0x45, 0xCC, 0xA7, 0xA5, 0x83,\n\t// Bytes 46c0 - 46ff\n\t0x49, 0xCC, 0x88, 0xC9, 0x83, 0x4C, 0xCC, 0xA3,\n\t0xB5, 0x83, 0x4F, 0xCC, 0x82, 0xC9, 0x83, 0x4F,\n\t0xCC, 0x83, 0xC9, 0x83, 0x4F, 0xCC, 0x84, 0xC9,\n\t0x83, 0x4F, 0xCC, 0x87, 0xC9, 0x83, 0x4F, 0xCC,\n\t0x88, 0xC9, 0x83, 0x4F, 0xCC, 0x9B, 0xAD, 0x83,\n\t0x4F, 0xCC, 0xA3, 0xB5, 0x83, 0x4F, 0xCC, 0xA8,\n\t0xA5, 0x83, 0x52, 0xCC, 0xA3, 0xB5, 0x83, 0x53,\n\t0xCC, 0x81, 0xC9, 0x83, 0x53, 0xCC, 0x8C, 0xC9,\n\t// Bytes 4700 - 473f\n\t0x83, 0x53, 0xCC, 0xA3, 0xB5, 0x83, 0x55, 0xCC,\n\t0x83, 0xC9, 0x83, 0x55, 0xCC, 0x84, 0xC9, 0x83,\n\t0x55, 0xCC, 0x88, 0xC9, 0x83, 0x55, 0xCC, 0x9B,\n\t0xAD, 0x83, 0x61, 0xCC, 0x82, 0xC9, 0x83, 0x61,\n\t0xCC, 0x86, 0xC9, 0x83, 0x61, 0xCC, 0x87, 0xC9,\n\t0x83, 0x61, 0xCC, 0x88, 0xC9, 0x83, 0x61, 0xCC,\n\t0x8A, 0xC9, 0x83, 0x61, 0xCC, 0xA3, 0xB5, 0x83,\n\t0x63, 0xCC, 0xA7, 0xA5, 0x83, 0x65, 0xCC, 0x82,\n\t// Bytes 4740 - 477f\n\t0xC9, 0x83, 0x65, 0xCC, 0x84, 0xC9, 0x83, 0x65,\n\t0xCC, 0xA3, 0xB5, 0x83, 0x65, 0xCC, 0xA7, 0xA5,\n\t0x83, 0x69, 0xCC, 0x88, 0xC9, 0x83, 0x6C, 0xCC,\n\t0xA3, 0xB5, 0x83, 0x6F, 0xCC, 0x82, 0xC9, 0x83,\n\t0x6F, 0xCC, 0x83, 0xC9, 0x83, 0x6F, 0xCC, 0x84,\n\t0xC9, 0x83, 0x6F, 0xCC, 0x87, 0xC9, 0x83, 0x6F,\n\t0xCC, 0x88, 0xC9, 0x83, 0x6F, 0xCC, 0x9B, 0xAD,\n\t0x83, 0x6F, 0xCC, 0xA3, 0xB5, 0x83, 0x6F, 0xCC,\n\t// Bytes 4780 - 47bf\n\t0xA8, 0xA5, 0x83, 0x72, 0xCC, 0xA3, 0xB5, 0x83,\n\t0x73, 0xCC, 0x81, 0xC9, 0x83, 0x73, 0xCC, 0x8C,\n\t0xC9, 0x83, 0x73, 0xCC, 0xA3, 0xB5, 0x83, 0x75,\n\t0xCC, 0x83, 0xC9, 0x83, 0x75, 0xCC, 0x84, 0xC9,\n\t0x83, 0x75, 0xCC, 0x88, 0xC9, 0x83, 0x75, 0xCC,\n\t0x9B, 0xAD, 0x84, 0xCE, 0x91, 0xCC, 0x93, 0xC9,\n\t0x84, 0xCE, 0x91, 0xCC, 0x94, 0xC9, 0x84, 0xCE,\n\t0x95, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0x95, 0xCC,\n\t// Bytes 47c0 - 47ff\n\t0x94, 0xC9, 0x84, 0xCE, 0x97, 0xCC, 0x93, 0xC9,\n\t0x84, 0xCE, 0x97, 0xCC, 0x94, 0xC9, 0x84, 0xCE,\n\t0x99, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0x99, 0xCC,\n\t0x94, 0xC9, 0x84, 0xCE, 0x9F, 0xCC, 0x93, 0xC9,\n\t0x84, 0xCE, 0x9F, 0xCC, 0x94, 0xC9, 0x84, 0xCE,\n\t0xA5, 0xCC, 0x94, 0xC9, 0x84, 0xCE, 0xA9, 0xCC,\n\t0x93, 0xC9, 0x84, 0xCE, 0xA9, 0xCC, 0x94, 0xC9,\n\t0x84, 0xCE, 0xB1, 0xCC, 0x80, 0xC9, 0x84, 0xCE,\n\t// Bytes 4800 - 483f\n\t0xB1, 0xCC, 0x81, 0xC9, 0x84, 0xCE, 0xB1, 0xCC,\n\t0x93, 0xC9, 0x84, 0xCE, 0xB1, 0xCC, 0x94, 0xC9,\n\t0x84, 0xCE, 0xB1, 0xCD, 0x82, 0xC9, 0x84, 0xCE,\n\t0xB5, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0xB5, 0xCC,\n\t0x94, 0xC9, 0x84, 0xCE, 0xB7, 0xCC, 0x80, 0xC9,\n\t0x84, 0xCE, 0xB7, 0xCC, 0x81, 0xC9, 0x84, 0xCE,\n\t0xB7, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0xB7, 0xCC,\n\t0x94, 0xC9, 0x84, 0xCE, 0xB7, 0xCD, 0x82, 0xC9,\n\t// Bytes 4840 - 487f\n\t0x84, 0xCE, 0xB9, 0xCC, 0x88, 0xC9, 0x84, 0xCE,\n\t0xB9, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0xB9, 0xCC,\n\t0x94, 0xC9, 0x84, 0xCE, 0xBF, 0xCC, 0x93, 0xC9,\n\t0x84, 0xCE, 0xBF, 0xCC, 0x94, 0xC9, 0x84, 0xCF,\n\t0x85, 0xCC, 0x88, 0xC9, 0x84, 0xCF, 0x85, 0xCC,\n\t0x93, 0xC9, 0x84, 0xCF, 0x85, 0xCC, 0x94, 0xC9,\n\t0x84, 0xCF, 0x89, 0xCC, 0x80, 0xC9, 0x84, 0xCF,\n\t0x89, 0xCC, 0x81, 0xC9, 0x84, 0xCF, 0x89, 0xCC,\n\t// Bytes 4880 - 48bf\n\t0x93, 0xC9, 0x84, 0xCF, 0x89, 0xCC, 0x94, 0xC9,\n\t0x84, 0xCF, 0x89, 0xCD, 0x82, 0xC9, 0x86, 0xCE,\n\t0x91, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE,\n\t0x91, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE,\n\t0x91, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE,\n\t0x91, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE,\n\t0x91, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE,\n\t0x91, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE,\n\t// Bytes 48c0 - 48ff\n\t0x97, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE,\n\t0x97, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE,\n\t0x97, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE,\n\t0x97, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE,\n\t0x97, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE,\n\t0x97, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE,\n\t0xA9, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE,\n\t0xA9, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE,\n\t// Bytes 4900 - 493f\n\t0xA9, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE,\n\t0xA9, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE,\n\t0xA9, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE,\n\t0xA9, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE,\n\t0xB1, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE,\n\t0xB1, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE,\n\t0xB1, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE,\n\t0xB1, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE,\n\t// Bytes 4940 - 497f\n\t0xB1, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE,\n\t0xB1, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE,\n\t0xB7, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE,\n\t0xB7, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE,\n\t0xB7, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE,\n\t0xB7, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE,\n\t0xB7, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE,\n\t0xB7, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCF,\n\t// Bytes 4980 - 49bf\n\t0x89, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCF,\n\t0x89, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCF,\n\t0x89, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCF,\n\t0x89, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCF,\n\t0x89, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCF,\n\t0x89, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x42, 0xCC,\n\t0x80, 0xC9, 0x32, 0x42, 0xCC, 0x81, 0xC9, 0x32,\n\t0x42, 0xCC, 0x93, 0xC9, 0x32, 0x43, 0xE1, 0x85,\n\t// Bytes 49c0 - 49ff\n\t0xA1, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xA2, 0x01,\n\t0x00, 0x43, 0xE1, 0x85, 0xA3, 0x01, 0x00, 0x43,\n\t0xE1, 0x85, 0xA4, 0x01, 0x00, 0x43, 0xE1, 0x85,\n\t0xA5, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xA6, 0x01,\n\t0x00, 0x43, 0xE1, 0x85, 0xA7, 0x01, 0x00, 0x43,\n\t0xE1, 0x85, 0xA8, 0x01, 0x00, 0x43, 0xE1, 0x85,\n\t0xA9, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xAA, 0x01,\n\t0x00, 0x43, 0xE1, 0x85, 0xAB, 0x01, 0x00, 0x43,\n\t// Bytes 4a00 - 4a3f\n\t0xE1, 0x85, 0xAC, 0x01, 0x00, 0x43, 0xE1, 0x85,\n\t0xAD, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xAE, 0x01,\n\t0x00, 0x43, 0xE1, 0x85, 0xAF, 0x01, 0x00, 0x43,\n\t0xE1, 0x85, 0xB0, 0x01, 0x00, 0x43, 0xE1, 0x85,\n\t0xB1, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xB2, 0x01,\n\t0x00, 0x43, 0xE1, 0x85, 0xB3, 0x01, 0x00, 0x43,\n\t0xE1, 0x85, 0xB4, 0x01, 0x00, 0x43, 0xE1, 0x85,\n\t0xB5, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xAA, 0x01,\n\t// Bytes 4a40 - 4a7f\n\t0x00, 0x43, 0xE1, 0x86, 0xAC, 0x01, 0x00, 0x43,\n\t0xE1, 0x86, 0xAD, 0x01, 0x00, 0x43, 0xE1, 0x86,\n\t0xB0, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xB1, 0x01,\n\t0x00, 0x43, 0xE1, 0x86, 0xB2, 0x01, 0x00, 0x43,\n\t0xE1, 0x86, 0xB3, 0x01, 0x00, 0x43, 0xE1, 0x86,\n\t0xB4, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xB5, 0x01,\n\t0x00, 0x44, 0xCC, 0x88, 0xCC, 0x81, 0xCA, 0x32,\n\t0x43, 0xE3, 0x82, 0x99, 0x0D, 0x03, 0x43, 0xE3,\n\t// Bytes 4a80 - 4abf\n\t0x82, 0x9A, 0x0D, 0x03, 0x46, 0xE0, 0xBD, 0xB1,\n\t0xE0, 0xBD, 0xB2, 0x9E, 0x26, 0x46, 0xE0, 0xBD,\n\t0xB1, 0xE0, 0xBD, 0xB4, 0xA2, 0x26, 0x46, 0xE0,\n\t0xBD, 0xB1, 0xE0, 0xBE, 0x80, 0x9E, 0x26, 0x00,\n\t0x01,\n}\n\n// lookup returns the trie value for the first UTF-8 encoding in s and\n// the width in bytes of this encoding. The size will be 0 if s does not\n// hold enough bytes to complete the encoding. len(s) must be greater than 0.\nfunc (t *nfcTrie) lookup(s []byte) (v uint16, sz int) {\n\tc0 := s[0]\n\tswitch {\n\tcase c0 < 0x80: // is ASCII\n\t\treturn nfcValues[c0], 1\n\tcase c0 < 0xC2:\n\t\treturn 0, 1 // Illegal UTF-8: not a starter, not ASCII.\n\tcase c0 < 0xE0: // 2-byte UTF-8\n\t\tif len(s) < 2 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := nfcIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c1), 2\n\tcase c0 < 0xF0: // 3-byte UTF-8\n\t\tif len(s) < 3 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := nfcIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to := uint32(i)<<6 + uint32(c1)\n\t\ti = nfcIndex[o]\n\t\tc2 := s[2]\n\t\tif c2 < 0x80 || 0xC0 <= c2 {\n\t\t\treturn 0, 2 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c2), 3\n\tcase c0 < 0xF8: // 4-byte UTF-8\n\t\tif len(s) < 4 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := nfcIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to := uint32(i)<<6 + uint32(c1)\n\t\ti = nfcIndex[o]\n\t\tc2 := s[2]\n\t\tif c2 < 0x80 || 0xC0 <= c2 {\n\t\t\treturn 0, 2 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to = uint32(i)<<6 + uint32(c2)\n\t\ti = nfcIndex[o]\n\t\tc3 := s[3]\n\t\tif c3 < 0x80 || 0xC0 <= c3 {\n\t\t\treturn 0, 3 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c3), 4\n\t}\n\t// Illegal rune\n\treturn 0, 1\n}\n\n// lookupUnsafe returns the trie value for the first UTF-8 encoding in s.\n// s must start with a full and valid UTF-8 encoded rune.\nfunc (t *nfcTrie) lookupUnsafe(s []byte) uint16 {\n\tc0 := s[0]\n\tif c0 < 0x80 { // is ASCII\n\t\treturn nfcValues[c0]\n\t}\n\ti := nfcIndex[c0]\n\tif c0 < 0xE0 { // 2-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[1])\n\t}\n\ti = nfcIndex[uint32(i)<<6+uint32(s[1])]\n\tif c0 < 0xF0 { // 3-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[2])\n\t}\n\ti = nfcIndex[uint32(i)<<6+uint32(s[2])]\n\tif c0 < 0xF8 { // 4-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[3])\n\t}\n\treturn 0\n}\n\n// lookupString returns the trie value for the first UTF-8 encoding in s and\n// the width in bytes of this encoding. The size will be 0 if s does not\n// hold enough bytes to complete the encoding. len(s) must be greater than 0.\nfunc (t *nfcTrie) lookupString(s string) (v uint16, sz int) {\n\tc0 := s[0]\n\tswitch {\n\tcase c0 < 0x80: // is ASCII\n\t\treturn nfcValues[c0], 1\n\tcase c0 < 0xC2:\n\t\treturn 0, 1 // Illegal UTF-8: not a starter, not ASCII.\n\tcase c0 < 0xE0: // 2-byte UTF-8\n\t\tif len(s) < 2 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := nfcIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c1), 2\n\tcase c0 < 0xF0: // 3-byte UTF-8\n\t\tif len(s) < 3 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := nfcIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to := uint32(i)<<6 + uint32(c1)\n\t\ti = nfcIndex[o]\n\t\tc2 := s[2]\n\t\tif c2 < 0x80 || 0xC0 <= c2 {\n\t\t\treturn 0, 2 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c2), 3\n\tcase c0 < 0xF8: // 4-byte UTF-8\n\t\tif len(s) < 4 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := nfcIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to := uint32(i)<<6 + uint32(c1)\n\t\ti = nfcIndex[o]\n\t\tc2 := s[2]\n\t\tif c2 < 0x80 || 0xC0 <= c2 {\n\t\t\treturn 0, 2 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to = uint32(i)<<6 + uint32(c2)\n\t\ti = nfcIndex[o]\n\t\tc3 := s[3]\n\t\tif c3 < 0x80 || 0xC0 <= c3 {\n\t\t\treturn 0, 3 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c3), 4\n\t}\n\t// Illegal rune\n\treturn 0, 1\n}\n\n// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s.\n// s must start with a full and valid UTF-8 encoded rune.\nfunc (t *nfcTrie) lookupStringUnsafe(s string) uint16 {\n\tc0 := s[0]\n\tif c0 < 0x80 { // is ASCII\n\t\treturn nfcValues[c0]\n\t}\n\ti := nfcIndex[c0]\n\tif c0 < 0xE0 { // 2-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[1])\n\t}\n\ti = nfcIndex[uint32(i)<<6+uint32(s[1])]\n\tif c0 < 0xF0 { // 3-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[2])\n\t}\n\ti = nfcIndex[uint32(i)<<6+uint32(s[2])]\n\tif c0 < 0xF8 { // 4-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[3])\n\t}\n\treturn 0\n}\n\n// nfcTrie. Total size: 10586 bytes (10.34 KiB). Checksum: dd926e82067bee11.\ntype nfcTrie struct{}\n\nfunc newNfcTrie(i int) *nfcTrie {\n\treturn &nfcTrie{}\n}\n\n// lookupValue determines the type of block n and looks up the value for b.\nfunc (t *nfcTrie) lookupValue(n uint32, b byte) uint16 {\n\tswitch {\n\tcase n < 46:\n\t\treturn uint16(nfcValues[n<<6+uint32(b)])\n\tdefault:\n\t\tn -= 46\n\t\treturn uint16(nfcSparse.lookup(n, b))\n\t}\n}\n\n// nfcValues: 48 blocks, 3072 entries, 6144 bytes\n// The third block is the zero block.\nvar nfcValues = [3072]uint16{\n\t// Block 0x0, offset 0x0\n\t0x3c: 0xa000, 0x3d: 0xa000, 0x3e: 0xa000,\n\t// Block 0x1, offset 0x40\n\t0x41: 0xa000, 0x42: 0xa000, 0x43: 0xa000, 0x44: 0xa000, 0x45: 0xa000,\n\t0x46: 0xa000, 0x47: 0xa000, 0x48: 0xa000, 0x49: 0xa000, 0x4a: 0xa000, 0x4b: 0xa000,\n\t0x4c: 0xa000, 0x4d: 0xa000, 0x4e: 0xa000, 0x4f: 0xa000, 0x50: 0xa000,\n\t0x52: 0xa000, 0x53: 0xa000, 0x54: 0xa000, 0x55: 0xa000, 0x56: 0xa000, 0x57: 0xa000,\n\t0x58: 0xa000, 0x59: 0xa000, 0x5a: 0xa000,\n\t0x61: 0xa000, 0x62: 0xa000, 0x63: 0xa000,\n\t0x64: 0xa000, 0x65: 0xa000, 0x66: 0xa000, 0x67: 0xa000, 0x68: 0xa000, 0x69: 0xa000,\n\t0x6a: 0xa000, 0x6b: 0xa000, 0x6c: 0xa000, 0x6d: 0xa000, 0x6e: 0xa000, 0x6f: 0xa000,\n\t0x70: 0xa000, 0x72: 0xa000, 0x73: 0xa000, 0x74: 0xa000, 0x75: 0xa000,\n\t0x76: 0xa000, 0x77: 0xa000, 0x78: 0xa000, 0x79: 0xa000, 0x7a: 0xa000,\n\t// Block 0x2, offset 0x80\n\t// Block 0x3, offset 0xc0\n\t0xc0: 0x2f6f, 0xc1: 0x2f74, 0xc2: 0x4688, 0xc3: 0x2f79, 0xc4: 0x4697, 0xc5: 0x469c,\n\t0xc6: 0xa000, 0xc7: 0x46a6, 0xc8: 0x2fe2, 0xc9: 0x2fe7, 0xca: 0x46ab, 0xcb: 0x2ffb,\n\t0xcc: 0x306e, 0xcd: 0x3073, 0xce: 0x3078, 0xcf: 0x46bf, 0xd1: 0x3104,\n\t0xd2: 0x3127, 0xd3: 0x312c, 0xd4: 0x46c9, 0xd5: 0x46ce, 0xd6: 0x46dd,\n\t0xd8: 0xa000, 0xd9: 0x31b3, 0xda: 0x31b8, 0xdb: 0x31bd, 0xdc: 0x470f, 0xdd: 0x3235,\n\t0xe0: 0x327b, 0xe1: 0x3280, 0xe2: 0x4719, 0xe3: 0x3285,\n\t0xe4: 0x4728, 0xe5: 0x472d, 0xe6: 0xa000, 0xe7: 0x4737, 0xe8: 0x32ee, 0xe9: 0x32f3,\n\t0xea: 0x473c, 0xeb: 0x3307, 0xec: 0x337f, 0xed: 0x3384, 0xee: 0x3389, 0xef: 0x4750,\n\t0xf1: 0x3415, 0xf2: 0x3438, 0xf3: 0x343d, 0xf4: 0x475a, 0xf5: 0x475f,\n\t0xf6: 0x476e, 0xf8: 0xa000, 0xf9: 0x34c9, 0xfa: 0x34ce, 0xfb: 0x34d3,\n\t0xfc: 0x47a0, 0xfd: 0x3550, 0xff: 0x3569,\n\t// Block 0x4, offset 0x100\n\t0x100: 0x2f7e, 0x101: 0x328a, 0x102: 0x468d, 0x103: 0x471e, 0x104: 0x2f9c, 0x105: 0x32a8,\n\t0x106: 0x2fb0, 0x107: 0x32bc, 0x108: 0x2fb5, 0x109: 0x32c1, 0x10a: 0x2fba, 0x10b: 0x32c6,\n\t0x10c: 0x2fbf, 0x10d: 0x32cb, 0x10e: 0x2fc9, 0x10f: 0x32d5,\n\t0x112: 0x46b0, 0x113: 0x4741, 0x114: 0x2ff1, 0x115: 0x32fd, 0x116: 0x2ff6, 0x117: 0x3302,\n\t0x118: 0x3014, 0x119: 0x3320, 0x11a: 0x3005, 0x11b: 0x3311, 0x11c: 0x302d, 0x11d: 0x3339,\n\t0x11e: 0x3037, 0x11f: 0x3343, 0x120: 0x303c, 0x121: 0x3348, 0x122: 0x3046, 0x123: 0x3352,\n\t0x124: 0x304b, 0x125: 0x3357, 0x128: 0x307d, 0x129: 0x338e,\n\t0x12a: 0x3082, 0x12b: 0x3393, 0x12c: 0x3087, 0x12d: 0x3398, 0x12e: 0x30aa, 0x12f: 0x33b6,\n\t0x130: 0x308c, 0x134: 0x30b4, 0x135: 0x33c0,\n\t0x136: 0x30c8, 0x137: 0x33d9, 0x139: 0x30d2, 0x13a: 0x33e3, 0x13b: 0x30dc,\n\t0x13c: 0x33ed, 0x13d: 0x30d7, 0x13e: 0x33e8,\n\t// Block 0x5, offset 0x140\n\t0x143: 0x30ff, 0x144: 0x3410, 0x145: 0x3118,\n\t0x146: 0x3429, 0x147: 0x310e, 0x148: 0x341f,\n\t0x14c: 0x46d3, 0x14d: 0x4764, 0x14e: 0x3131, 0x14f: 0x3442, 0x150: 0x313b, 0x151: 0x344c,\n\t0x154: 0x3159, 0x155: 0x346a, 0x156: 0x3172, 0x157: 0x3483,\n\t0x158: 0x3163, 0x159: 0x3474, 0x15a: 0x46f6, 0x15b: 0x4787, 0x15c: 0x317c, 0x15d: 0x348d,\n\t0x15e: 0x318b, 0x15f: 0x349c, 0x160: 0x46fb, 0x161: 0x478c, 0x162: 0x31a4, 0x163: 0x34ba,\n\t0x164: 0x3195, 0x165: 0x34ab, 0x168: 0x4705, 0x169: 0x4796,\n\t0x16a: 0x470a, 0x16b: 0x479b, 0x16c: 0x31c2, 0x16d: 0x34d8, 0x16e: 0x31cc, 0x16f: 0x34e2,\n\t0x170: 0x31d1, 0x171: 0x34e7, 0x172: 0x31ef, 0x173: 0x3505, 0x174: 0x3212, 0x175: 0x3528,\n\t0x176: 0x323a, 0x177: 0x3555, 0x178: 0x324e, 0x179: 0x325d, 0x17a: 0x357d, 0x17b: 0x3267,\n\t0x17c: 0x3587, 0x17d: 0x326c, 0x17e: 0x358c, 0x17f: 0xa000,\n\t// Block 0x6, offset 0x180\n\t0x184: 0x8100, 0x185: 0x8100,\n\t0x186: 0x8100,\n\t0x18d: 0x2f88, 0x18e: 0x3294, 0x18f: 0x3096, 0x190: 0x33a2, 0x191: 0x3140,\n\t0x192: 0x3451, 0x193: 0x31d6, 0x194: 0x34ec, 0x195: 0x39cf, 0x196: 0x3b5e, 0x197: 0x39c8,\n\t0x198: 0x3b57, 0x199: 0x39d6, 0x19a: 0x3b65, 0x19b: 0x39c1, 0x19c: 0x3b50,\n\t0x19e: 0x38b0, 0x19f: 0x3a3f, 0x1a0: 0x38a9, 0x1a1: 0x3a38, 0x1a2: 0x35b3, 0x1a3: 0x35c5,\n\t0x1a6: 0x3041, 0x1a7: 0x334d, 0x1a8: 0x30be, 0x1a9: 0x33cf,\n\t0x1aa: 0x46ec, 0x1ab: 0x477d, 0x1ac: 0x3990, 0x1ad: 0x3b1f, 0x1ae: 0x35d7, 0x1af: 0x35dd,\n\t0x1b0: 0x33c5, 0x1b4: 0x3028, 0x1b5: 0x3334,\n\t0x1b8: 0x30fa, 0x1b9: 0x340b, 0x1ba: 0x38b7, 0x1bb: 0x3a46,\n\t0x1bc: 0x35ad, 0x1bd: 0x35bf, 0x1be: 0x35b9, 0x1bf: 0x35cb,\n\t// Block 0x7, offset 0x1c0\n\t0x1c0: 0x2f8d, 0x1c1: 0x3299, 0x1c2: 0x2f92, 0x1c3: 0x329e, 0x1c4: 0x300a, 0x1c5: 0x3316,\n\t0x1c6: 0x300f, 0x1c7: 0x331b, 0x1c8: 0x309b, 0x1c9: 0x33a7, 0x1ca: 0x30a0, 0x1cb: 0x33ac,\n\t0x1cc: 0x3145, 0x1cd: 0x3456, 0x1ce: 0x314a, 0x1cf: 0x345b, 0x1d0: 0x3168, 0x1d1: 0x3479,\n\t0x1d2: 0x316d, 0x1d3: 0x347e, 0x1d4: 0x31db, 0x1d5: 0x34f1, 0x1d6: 0x31e0, 0x1d7: 0x34f6,\n\t0x1d8: 0x3186, 0x1d9: 0x3497, 0x1da: 0x319f, 0x1db: 0x34b5,\n\t0x1de: 0x305a, 0x1df: 0x3366,\n\t0x1e6: 0x4692, 0x1e7: 0x4723, 0x1e8: 0x46ba, 0x1e9: 0x474b,\n\t0x1ea: 0x395f, 0x1eb: 0x3aee, 0x1ec: 0x393c, 0x1ed: 0x3acb, 0x1ee: 0x46d8, 0x1ef: 0x4769,\n\t0x1f0: 0x3958, 0x1f1: 0x3ae7, 0x1f2: 0x3244, 0x1f3: 0x355f,\n\t// Block 0x8, offset 0x200\n\t0x200: 0x9932, 0x201: 0x9932, 0x202: 0x9932, 0x203: 0x9932, 0x204: 0x9932, 0x205: 0x8132,\n\t0x206: 0x9932, 0x207: 0x9932, 0x208: 0x9932, 0x209: 0x9932, 0x20a: 0x9932, 0x20b: 0x9932,\n\t0x20c: 0x9932, 0x20d: 0x8132, 0x20e: 0x8132, 0x20f: 0x9932, 0x210: 0x8132, 0x211: 0x9932,\n\t0x212: 0x8132, 0x213: 0x9932, 0x214: 0x9932, 0x215: 0x8133, 0x216: 0x812d, 0x217: 0x812d,\n\t0x218: 0x812d, 0x219: 0x812d, 0x21a: 0x8133, 0x21b: 0x992b, 0x21c: 0x812d, 0x21d: 0x812d,\n\t0x21e: 0x812d, 0x21f: 0x812d, 0x220: 0x812d, 0x221: 0x8129, 0x222: 0x8129, 0x223: 0x992d,\n\t0x224: 0x992d, 0x225: 0x992d, 0x226: 0x992d, 0x227: 0x9929, 0x228: 0x9929, 0x229: 0x812d,\n\t0x22a: 0x812d, 0x22b: 0x812d, 0x22c: 0x812d, 0x22d: 0x992d, 0x22e: 0x992d, 0x22f: 0x812d,\n\t0x230: 0x992d, 0x231: 0x992d, 0x232: 0x812d, 0x233: 0x812d, 0x234: 0x8101, 0x235: 0x8101,\n\t0x236: 0x8101, 0x237: 0x8101, 0x238: 0x9901, 0x239: 0x812d, 0x23a: 0x812d, 0x23b: 0x812d,\n\t0x23c: 0x812d, 0x23d: 0x8132, 0x23e: 0x8132, 0x23f: 0x8132,\n\t// Block 0x9, offset 0x240\n\t0x240: 0x49ae, 0x241: 0x49b3, 0x242: 0x9932, 0x243: 0x49b8, 0x244: 0x4a71, 0x245: 0x9936,\n\t0x246: 0x8132, 0x247: 0x812d, 0x248: 0x812d, 0x249: 0x812d, 0x24a: 0x8132, 0x24b: 0x8132,\n\t0x24c: 0x8132, 0x24d: 0x812d, 0x24e: 0x812d, 0x250: 0x8132, 0x251: 0x8132,\n\t0x252: 0x8132, 0x253: 0x812d, 0x254: 0x812d, 0x255: 0x812d, 0x256: 0x812d, 0x257: 0x8132,\n\t0x258: 0x8133, 0x259: 0x812d, 0x25a: 0x812d, 0x25b: 0x8132, 0x25c: 0x8134, 0x25d: 0x8135,\n\t0x25e: 0x8135, 0x25f: 0x8134, 0x260: 0x8135, 0x261: 0x8135, 0x262: 0x8134, 0x263: 0x8132,\n\t0x264: 0x8132, 0x265: 0x8132, 0x266: 0x8132, 0x267: 0x8132, 0x268: 0x8132, 0x269: 0x8132,\n\t0x26a: 0x8132, 0x26b: 0x8132, 0x26c: 0x8132, 0x26d: 0x8132, 0x26e: 0x8132, 0x26f: 0x8132,\n\t0x274: 0x0170,\n\t0x27a: 0x8100,\n\t0x27e: 0x0037,\n\t// Block 0xa, offset 0x280\n\t0x284: 0x8100, 0x285: 0x35a1,\n\t0x286: 0x35e9, 0x287: 0x00ce, 0x288: 0x3607, 0x289: 0x3613, 0x28a: 0x3625,\n\t0x28c: 0x3643, 0x28e: 0x3655, 0x28f: 0x3673, 0x290: 0x3e08, 0x291: 0xa000,\n\t0x295: 0xa000, 0x297: 0xa000,\n\t0x299: 0xa000,\n\t0x29f: 0xa000, 0x2a1: 0xa000,\n\t0x2a5: 0xa000, 0x2a9: 0xa000,\n\t0x2aa: 0x3637, 0x2ab: 0x3667, 0x2ac: 0x47fe, 0x2ad: 0x3697, 0x2ae: 0x4828, 0x2af: 0x36a9,\n\t0x2b0: 0x3e70, 0x2b1: 0xa000, 0x2b5: 0xa000,\n\t0x2b7: 0xa000, 0x2b9: 0xa000,\n\t0x2bf: 0xa000,\n\t// Block 0xb, offset 0x2c0\n\t0x2c0: 0x3721, 0x2c1: 0x372d, 0x2c3: 0x371b,\n\t0x2c6: 0xa000, 0x2c7: 0x3709,\n\t0x2cc: 0x375d, 0x2cd: 0x3745, 0x2ce: 0x376f, 0x2d0: 0xa000,\n\t0x2d3: 0xa000, 0x2d5: 0xa000, 0x2d6: 0xa000, 0x2d7: 0xa000,\n\t0x2d8: 0xa000, 0x2d9: 0x3751, 0x2da: 0xa000,\n\t0x2de: 0xa000, 0x2e3: 0xa000,\n\t0x2e7: 0xa000,\n\t0x2eb: 0xa000, 0x2ed: 0xa000,\n\t0x2f0: 0xa000, 0x2f3: 0xa000, 0x2f5: 0xa000,\n\t0x2f6: 0xa000, 0x2f7: 0xa000, 0x2f8: 0xa000, 0x2f9: 0x37d5, 0x2fa: 0xa000,\n\t0x2fe: 0xa000,\n\t// Block 0xc, offset 0x300\n\t0x301: 0x3733, 0x302: 0x37b7,\n\t0x310: 0x370f, 0x311: 0x3793,\n\t0x312: 0x3715, 0x313: 0x3799, 0x316: 0x3727, 0x317: 0x37ab,\n\t0x318: 0xa000, 0x319: 0xa000, 0x31a: 0x3829, 0x31b: 0x382f, 0x31c: 0x3739, 0x31d: 0x37bd,\n\t0x31e: 0x373f, 0x31f: 0x37c3, 0x322: 0x374b, 0x323: 0x37cf,\n\t0x324: 0x3757, 0x325: 0x37db, 0x326: 0x3763, 0x327: 0x37e7, 0x328: 0xa000, 0x329: 0xa000,\n\t0x32a: 0x3835, 0x32b: 0x383b, 0x32c: 0x378d, 0x32d: 0x3811, 0x32e: 0x3769, 0x32f: 0x37ed,\n\t0x330: 0x3775, 0x331: 0x37f9, 0x332: 0x377b, 0x333: 0x37ff, 0x334: 0x3781, 0x335: 0x3805,\n\t0x338: 0x3787, 0x339: 0x380b,\n\t// Block 0xd, offset 0x340\n\t0x351: 0x812d,\n\t0x352: 0x8132, 0x353: 0x8132, 0x354: 0x8132, 0x355: 0x8132, 0x356: 0x812d, 0x357: 0x8132,\n\t0x358: 0x8132, 0x359: 0x8132, 0x35a: 0x812e, 0x35b: 0x812d, 0x35c: 0x8132, 0x35d: 0x8132,\n\t0x35e: 0x8132, 0x35f: 0x8132, 0x360: 0x8132, 0x361: 0x8132, 0x362: 0x812d, 0x363: 0x812d,\n\t0x364: 0x812d, 0x365: 0x812d, 0x366: 0x812d, 0x367: 0x812d, 0x368: 0x8132, 0x369: 0x8132,\n\t0x36a: 0x812d, 0x36b: 0x8132, 0x36c: 0x8132, 0x36d: 0x812e, 0x36e: 0x8131, 0x36f: 0x8132,\n\t0x370: 0x8105, 0x371: 0x8106, 0x372: 0x8107, 0x373: 0x8108, 0x374: 0x8109, 0x375: 0x810a,\n\t0x376: 0x810b, 0x377: 0x810c, 0x378: 0x810d, 0x379: 0x810e, 0x37a: 0x810e, 0x37b: 0x810f,\n\t0x37c: 0x8110, 0x37d: 0x8111, 0x37f: 0x8112,\n\t// Block 0xe, offset 0x380\n\t0x388: 0xa000, 0x38a: 0xa000, 0x38b: 0x8116,\n\t0x38c: 0x8117, 0x38d: 0x8118, 0x38e: 0x8119, 0x38f: 0x811a, 0x390: 0x811b, 0x391: 0x811c,\n\t0x392: 0x811d, 0x393: 0x9932, 0x394: 0x9932, 0x395: 0x992d, 0x396: 0x812d, 0x397: 0x8132,\n\t0x398: 0x8132, 0x399: 0x8132, 0x39a: 0x8132, 0x39b: 0x8132, 0x39c: 0x812d, 0x39d: 0x8132,\n\t0x39e: 0x8132, 0x39f: 0x812d,\n\t0x3b0: 0x811e,\n\t// Block 0xf, offset 0x3c0\n\t0x3d3: 0x812d, 0x3d4: 0x8132, 0x3d5: 0x8132, 0x3d6: 0x8132, 0x3d7: 0x8132,\n\t0x3d8: 0x8132, 0x3d9: 0x8132, 0x3da: 0x8132, 0x3db: 0x8132, 0x3dc: 0x8132, 0x3dd: 0x8132,\n\t0x3de: 0x8132, 0x3df: 0x8132, 0x3e0: 0x8132, 0x3e1: 0x8132, 0x3e3: 0x812d,\n\t0x3e4: 0x8132, 0x3e5: 0x8132, 0x3e6: 0x812d, 0x3e7: 0x8132, 0x3e8: 0x8132, 0x3e9: 0x812d,\n\t0x3ea: 0x8132, 0x3eb: 0x8132, 0x3ec: 0x8132, 0x3ed: 0x812d, 0x3ee: 0x812d, 0x3ef: 0x812d,\n\t0x3f0: 0x8116, 0x3f1: 0x8117, 0x3f2: 0x8118, 0x3f3: 0x8132, 0x3f4: 0x8132, 0x3f5: 0x8132,\n\t0x3f6: 0x812d, 0x3f7: 0x8132, 0x3f8: 0x8132, 0x3f9: 0x812d, 0x3fa: 0x812d, 0x3fb: 0x8132,\n\t0x3fc: 0x8132, 0x3fd: 0x8132, 0x3fe: 0x8132, 0x3ff: 0x8132,\n\t// Block 0x10, offset 0x400\n\t0x405: 0xa000,\n\t0x406: 0x2d26, 0x407: 0xa000, 0x408: 0x2d2e, 0x409: 0xa000, 0x40a: 0x2d36, 0x40b: 0xa000,\n\t0x40c: 0x2d3e, 0x40d: 0xa000, 0x40e: 0x2d46, 0x411: 0xa000,\n\t0x412: 0x2d4e,\n\t0x434: 0x8102, 0x435: 0x9900,\n\t0x43a: 0xa000, 0x43b: 0x2d56,\n\t0x43c: 0xa000, 0x43d: 0x2d5e, 0x43e: 0xa000, 0x43f: 0xa000,\n\t// Block 0x11, offset 0x440\n\t0x440: 0x8132, 0x441: 0x8132, 0x442: 0x812d, 0x443: 0x8132, 0x444: 0x8132, 0x445: 0x8132,\n\t0x446: 0x8132, 0x447: 0x8132, 0x448: 0x8132, 0x449: 0x8132, 0x44a: 0x812d, 0x44b: 0x8132,\n\t0x44c: 0x8132, 0x44d: 0x8135, 0x44e: 0x812a, 0x44f: 0x812d, 0x450: 0x8129, 0x451: 0x8132,\n\t0x452: 0x8132, 0x453: 0x8132, 0x454: 0x8132, 0x455: 0x8132, 0x456: 0x8132, 0x457: 0x8132,\n\t0x458: 0x8132, 0x459: 0x8132, 0x45a: 0x8132, 0x45b: 0x8132, 0x45c: 0x8132, 0x45d: 0x8132,\n\t0x45e: 0x8132, 0x45f: 0x8132, 0x460: 0x8132, 0x461: 0x8132, 0x462: 0x8132, 0x463: 0x8132,\n\t0x464: 0x8132, 0x465: 0x8132, 0x466: 0x8132, 0x467: 0x8132, 0x468: 0x8132, 0x469: 0x8132,\n\t0x46a: 0x8132, 0x46b: 0x8132, 0x46c: 0x8132, 0x46d: 0x8132, 0x46e: 0x8132, 0x46f: 0x8132,\n\t0x470: 0x8132, 0x471: 0x8132, 0x472: 0x8132, 0x473: 0x8132, 0x474: 0x8132, 0x475: 0x8132,\n\t0x476: 0x8133, 0x477: 0x8131, 0x478: 0x8131, 0x479: 0x812d, 0x47b: 0x8132,\n\t0x47c: 0x8134, 0x47d: 0x812d, 0x47e: 0x8132, 0x47f: 0x812d,\n\t// Block 0x12, offset 0x480\n\t0x480: 0x2f97, 0x481: 0x32a3, 0x482: 0x2fa1, 0x483: 0x32ad, 0x484: 0x2fa6, 0x485: 0x32b2,\n\t0x486: 0x2fab, 0x487: 0x32b7, 0x488: 0x38cc, 0x489: 0x3a5b, 0x48a: 0x2fc4, 0x48b: 0x32d0,\n\t0x48c: 0x2fce, 0x48d: 0x32da, 0x48e: 0x2fdd, 0x48f: 0x32e9, 0x490: 0x2fd3, 0x491: 0x32df,\n\t0x492: 0x2fd8, 0x493: 0x32e4, 0x494: 0x38ef, 0x495: 0x3a7e, 0x496: 0x38f6, 0x497: 0x3a85,\n\t0x498: 0x3019, 0x499: 0x3325, 0x49a: 0x301e, 0x49b: 0x332a, 0x49c: 0x3904, 0x49d: 0x3a93,\n\t0x49e: 0x3023, 0x49f: 0x332f, 0x4a0: 0x3032, 0x4a1: 0x333e, 0x4a2: 0x3050, 0x4a3: 0x335c,\n\t0x4a4: 0x305f, 0x4a5: 0x336b, 0x4a6: 0x3055, 0x4a7: 0x3361, 0x4a8: 0x3064, 0x4a9: 0x3370,\n\t0x4aa: 0x3069, 0x4ab: 0x3375, 0x4ac: 0x30af, 0x4ad: 0x33bb, 0x4ae: 0x390b, 0x4af: 0x3a9a,\n\t0x4b0: 0x30b9, 0x4b1: 0x33ca, 0x4b2: 0x30c3, 0x4b3: 0x33d4, 0x4b4: 0x30cd, 0x4b5: 0x33de,\n\t0x4b6: 0x46c4, 0x4b7: 0x4755, 0x4b8: 0x3912, 0x4b9: 0x3aa1, 0x4ba: 0x30e6, 0x4bb: 0x33f7,\n\t0x4bc: 0x30e1, 0x4bd: 0x33f2, 0x4be: 0x30eb, 0x4bf: 0x33fc,\n\t// Block 0x13, offset 0x4c0\n\t0x4c0: 0x30f0, 0x4c1: 0x3401, 0x4c2: 0x30f5, 0x4c3: 0x3406, 0x4c4: 0x3109, 0x4c5: 0x341a,\n\t0x4c6: 0x3113, 0x4c7: 0x3424, 0x4c8: 0x3122, 0x4c9: 0x3433, 0x4ca: 0x311d, 0x4cb: 0x342e,\n\t0x4cc: 0x3935, 0x4cd: 0x3ac4, 0x4ce: 0x3943, 0x4cf: 0x3ad2, 0x4d0: 0x394a, 0x4d1: 0x3ad9,\n\t0x4d2: 0x3951, 0x4d3: 0x3ae0, 0x4d4: 0x314f, 0x4d5: 0x3460, 0x4d6: 0x3154, 0x4d7: 0x3465,\n\t0x4d8: 0x315e, 0x4d9: 0x346f, 0x4da: 0x46f1, 0x4db: 0x4782, 0x4dc: 0x3997, 0x4dd: 0x3b26,\n\t0x4de: 0x3177, 0x4df: 0x3488, 0x4e0: 0x3181, 0x4e1: 0x3492, 0x4e2: 0x4700, 0x4e3: 0x4791,\n\t0x4e4: 0x399e, 0x4e5: 0x3b2d, 0x4e6: 0x39a5, 0x4e7: 0x3b34, 0x4e8: 0x39ac, 0x4e9: 0x3b3b,\n\t0x4ea: 0x3190, 0x4eb: 0x34a1, 0x4ec: 0x319a, 0x4ed: 0x34b0, 0x4ee: 0x31ae, 0x4ef: 0x34c4,\n\t0x4f0: 0x31a9, 0x4f1: 0x34bf, 0x4f2: 0x31ea, 0x4f3: 0x3500, 0x4f4: 0x31f9, 0x4f5: 0x350f,\n\t0x4f6: 0x31f4, 0x4f7: 0x350a, 0x4f8: 0x39b3, 0x4f9: 0x3b42, 0x4fa: 0x39ba, 0x4fb: 0x3b49,\n\t0x4fc: 0x31fe, 0x4fd: 0x3514, 0x4fe: 0x3203, 0x4ff: 0x3519,\n\t// Block 0x14, offset 0x500\n\t0x500: 0x3208, 0x501: 0x351e, 0x502: 0x320d, 0x503: 0x3523, 0x504: 0x321c, 0x505: 0x3532,\n\t0x506: 0x3217, 0x507: 0x352d, 0x508: 0x3221, 0x509: 0x353c, 0x50a: 0x3226, 0x50b: 0x3541,\n\t0x50c: 0x322b, 0x50d: 0x3546, 0x50e: 0x3249, 0x50f: 0x3564, 0x510: 0x3262, 0x511: 0x3582,\n\t0x512: 0x3271, 0x513: 0x3591, 0x514: 0x3276, 0x515: 0x3596, 0x516: 0x337a, 0x517: 0x34a6,\n\t0x518: 0x3537, 0x519: 0x3573, 0x51b: 0x35d1,\n\t0x520: 0x46a1, 0x521: 0x4732, 0x522: 0x2f83, 0x523: 0x328f,\n\t0x524: 0x3878, 0x525: 0x3a07, 0x526: 0x3871, 0x527: 0x3a00, 0x528: 0x3886, 0x529: 0x3a15,\n\t0x52a: 0x387f, 0x52b: 0x3a0e, 0x52c: 0x38be, 0x52d: 0x3a4d, 0x52e: 0x3894, 0x52f: 0x3a23,\n\t0x530: 0x388d, 0x531: 0x3a1c, 0x532: 0x38a2, 0x533: 0x3a31, 0x534: 0x389b, 0x535: 0x3a2a,\n\t0x536: 0x38c5, 0x537: 0x3a54, 0x538: 0x46b5, 0x539: 0x4746, 0x53a: 0x3000, 0x53b: 0x330c,\n\t0x53c: 0x2fec, 0x53d: 0x32f8, 0x53e: 0x38da, 0x53f: 0x3a69,\n\t// Block 0x15, offset 0x540\n\t0x540: 0x38d3, 0x541: 0x3a62, 0x542: 0x38e8, 0x543: 0x3a77, 0x544: 0x38e1, 0x545: 0x3a70,\n\t0x546: 0x38fd, 0x547: 0x3a8c, 0x548: 0x3091, 0x549: 0x339d, 0x54a: 0x30a5, 0x54b: 0x33b1,\n\t0x54c: 0x46e7, 0x54d: 0x4778, 0x54e: 0x3136, 0x54f: 0x3447, 0x550: 0x3920, 0x551: 0x3aaf,\n\t0x552: 0x3919, 0x553: 0x3aa8, 0x554: 0x392e, 0x555: 0x3abd, 0x556: 0x3927, 0x557: 0x3ab6,\n\t0x558: 0x3989, 0x559: 0x3b18, 0x55a: 0x396d, 0x55b: 0x3afc, 0x55c: 0x3966, 0x55d: 0x3af5,\n\t0x55e: 0x397b, 0x55f: 0x3b0a, 0x560: 0x3974, 0x561: 0x3b03, 0x562: 0x3982, 0x563: 0x3b11,\n\t0x564: 0x31e5, 0x565: 0x34fb, 0x566: 0x31c7, 0x567: 0x34dd, 0x568: 0x39e4, 0x569: 0x3b73,\n\t0x56a: 0x39dd, 0x56b: 0x3b6c, 0x56c: 0x39f2, 0x56d: 0x3b81, 0x56e: 0x39eb, 0x56f: 0x3b7a,\n\t0x570: 0x39f9, 0x571: 0x3b88, 0x572: 0x3230, 0x573: 0x354b, 0x574: 0x3258, 0x575: 0x3578,\n\t0x576: 0x3253, 0x577: 0x356e, 0x578: 0x323f, 0x579: 0x355a,\n\t// Block 0x16, offset 0x580\n\t0x580: 0x4804, 0x581: 0x480a, 0x582: 0x491e, 0x583: 0x4936, 0x584: 0x4926, 0x585: 0x493e,\n\t0x586: 0x492e, 0x587: 0x4946, 0x588: 0x47aa, 0x589: 0x47b0, 0x58a: 0x488e, 0x58b: 0x48a6,\n\t0x58c: 0x4896, 0x58d: 0x48ae, 0x58e: 0x489e, 0x58f: 0x48b6, 0x590: 0x4816, 0x591: 0x481c,\n\t0x592: 0x3db8, 0x593: 0x3dc8, 0x594: 0x3dc0, 0x595: 0x3dd0,\n\t0x598: 0x47b6, 0x599: 0x47bc, 0x59a: 0x3ce8, 0x59b: 0x3cf8, 0x59c: 0x3cf0, 0x59d: 0x3d00,\n\t0x5a0: 0x482e, 0x5a1: 0x4834, 0x5a2: 0x494e, 0x5a3: 0x4966,\n\t0x5a4: 0x4956, 0x5a5: 0x496e, 0x5a6: 0x495e, 0x5a7: 0x4976, 0x5a8: 0x47c2, 0x5a9: 0x47c8,\n\t0x5aa: 0x48be, 0x5ab: 0x48d6, 0x5ac: 0x48c6, 0x5ad: 0x48de, 0x5ae: 0x48ce, 0x5af: 0x48e6,\n\t0x5b0: 0x4846, 0x5b1: 0x484c, 0x5b2: 0x3e18, 0x5b3: 0x3e30, 0x5b4: 0x3e20, 0x5b5: 0x3e38,\n\t0x5b6: 0x3e28, 0x5b7: 0x3e40, 0x5b8: 0x47ce, 0x5b9: 0x47d4, 0x5ba: 0x3d18, 0x5bb: 0x3d30,\n\t0x5bc: 0x3d20, 0x5bd: 0x3d38, 0x5be: 0x3d28, 0x5bf: 0x3d40,\n\t// Block 0x17, offset 0x5c0\n\t0x5c0: 0x4852, 0x5c1: 0x4858, 0x5c2: 0x3e48, 0x5c3: 0x3e58, 0x5c4: 0x3e50, 0x5c5: 0x3e60,\n\t0x5c8: 0x47da, 0x5c9: 0x47e0, 0x5ca: 0x3d48, 0x5cb: 0x3d58,\n\t0x5cc: 0x3d50, 0x5cd: 0x3d60, 0x5d0: 0x4864, 0x5d1: 0x486a,\n\t0x5d2: 0x3e80, 0x5d3: 0x3e98, 0x5d4: 0x3e88, 0x5d5: 0x3ea0, 0x5d6: 0x3e90, 0x5d7: 0x3ea8,\n\t0x5d9: 0x47e6, 0x5db: 0x3d68, 0x5dd: 0x3d70,\n\t0x5df: 0x3d78, 0x5e0: 0x487c, 0x5e1: 0x4882, 0x5e2: 0x497e, 0x5e3: 0x4996,\n\t0x5e4: 0x4986, 0x5e5: 0x499e, 0x5e6: 0x498e, 0x5e7: 0x49a6, 0x5e8: 0x47ec, 0x5e9: 0x47f2,\n\t0x5ea: 0x48ee, 0x5eb: 0x4906, 0x5ec: 0x48f6, 0x5ed: 0x490e, 0x5ee: 0x48fe, 0x5ef: 0x4916,\n\t0x5f0: 0x47f8, 0x5f1: 0x431e, 0x5f2: 0x3691, 0x5f3: 0x4324, 0x5f4: 0x4822, 0x5f5: 0x432a,\n\t0x5f6: 0x36a3, 0x5f7: 0x4330, 0x5f8: 0x36c1, 0x5f9: 0x4336, 0x5fa: 0x36d9, 0x5fb: 0x433c,\n\t0x5fc: 0x4870, 0x5fd: 0x4342,\n\t// Block 0x18, offset 0x600\n\t0x600: 0x3da0, 0x601: 0x3da8, 0x602: 0x4184, 0x603: 0x41a2, 0x604: 0x418e, 0x605: 0x41ac,\n\t0x606: 0x4198, 0x607: 0x41b6, 0x608: 0x3cd8, 0x609: 0x3ce0, 0x60a: 0x40d0, 0x60b: 0x40ee,\n\t0x60c: 0x40da, 0x60d: 0x40f8, 0x60e: 0x40e4, 0x60f: 0x4102, 0x610: 0x3de8, 0x611: 0x3df0,\n\t0x612: 0x41c0, 0x613: 0x41de, 0x614: 0x41ca, 0x615: 0x41e8, 0x616: 0x41d4, 0x617: 0x41f2,\n\t0x618: 0x3d08, 0x619: 0x3d10, 0x61a: 0x410c, 0x61b: 0x412a, 0x61c: 0x4116, 0x61d: 0x4134,\n\t0x61e: 0x4120, 0x61f: 0x413e, 0x620: 0x3ec0, 0x621: 0x3ec8, 0x622: 0x41fc, 0x623: 0x421a,\n\t0x624: 0x4206, 0x625: 0x4224, 0x626: 0x4210, 0x627: 0x422e, 0x628: 0x3d80, 0x629: 0x3d88,\n\t0x62a: 0x4148, 0x62b: 0x4166, 0x62c: 0x4152, 0x62d: 0x4170, 0x62e: 0x415c, 0x62f: 0x417a,\n\t0x630: 0x3685, 0x631: 0x367f, 0x632: 0x3d90, 0x633: 0x368b, 0x634: 0x3d98,\n\t0x636: 0x4810, 0x637: 0x3db0, 0x638: 0x35f5, 0x639: 0x35ef, 0x63a: 0x35e3, 0x63b: 0x42ee,\n\t0x63c: 0x35fb, 0x63d: 0x8100, 0x63e: 0x01d3, 0x63f: 0xa100,\n\t// Block 0x19, offset 0x640\n\t0x640: 0x8100, 0x641: 0x35a7, 0x642: 0x3dd8, 0x643: 0x369d, 0x644: 0x3de0,\n\t0x646: 0x483a, 0x647: 0x3df8, 0x648: 0x3601, 0x649: 0x42f4, 0x64a: 0x360d, 0x64b: 0x42fa,\n\t0x64c: 0x3619, 0x64d: 0x3b8f, 0x64e: 0x3b96, 0x64f: 0x3b9d, 0x650: 0x36b5, 0x651: 0x36af,\n\t0x652: 0x3e00, 0x653: 0x44e4, 0x656: 0x36bb, 0x657: 0x3e10,\n\t0x658: 0x3631, 0x659: 0x362b, 0x65a: 0x361f, 0x65b: 0x4300, 0x65d: 0x3ba4,\n\t0x65e: 0x3bab, 0x65f: 0x3bb2, 0x660: 0x36eb, 0x661: 0x36e5, 0x662: 0x3e68, 0x663: 0x44ec,\n\t0x664: 0x36cd, 0x665: 0x36d3, 0x666: 0x36f1, 0x667: 0x3e78, 0x668: 0x3661, 0x669: 0x365b,\n\t0x66a: 0x364f, 0x66b: 0x430c, 0x66c: 0x3649, 0x66d: 0x359b, 0x66e: 0x42e8, 0x66f: 0x0081,\n\t0x672: 0x3eb0, 0x673: 0x36f7, 0x674: 0x3eb8,\n\t0x676: 0x4888, 0x677: 0x3ed0, 0x678: 0x363d, 0x679: 0x4306, 0x67a: 0x366d, 0x67b: 0x4318,\n\t0x67c: 0x3679, 0x67d: 0x4256, 0x67e: 0xa100,\n\t// Block 0x1a, offset 0x680\n\t0x681: 0x3c06, 0x683: 0xa000, 0x684: 0x3c0d, 0x685: 0xa000,\n\t0x687: 0x3c14, 0x688: 0xa000, 0x689: 0x3c1b,\n\t0x68d: 0xa000,\n\t0x6a0: 0x2f65, 0x6a1: 0xa000, 0x6a2: 0x3c29,\n\t0x6a4: 0xa000, 0x6a5: 0xa000,\n\t0x6ad: 0x3c22, 0x6ae: 0x2f60, 0x6af: 0x2f6a,\n\t0x6b0: 0x3c30, 0x6b1: 0x3c37, 0x6b2: 0xa000, 0x6b3: 0xa000, 0x6b4: 0x3c3e, 0x6b5: 0x3c45,\n\t0x6b6: 0xa000, 0x6b7: 0xa000, 0x6b8: 0x3c4c, 0x6b9: 0x3c53, 0x6ba: 0xa000, 0x6bb: 0xa000,\n\t0x6bc: 0xa000, 0x6bd: 0xa000,\n\t// Block 0x1b, offset 0x6c0\n\t0x6c0: 0x3c5a, 0x6c1: 0x3c61, 0x6c2: 0xa000, 0x6c3: 0xa000, 0x6c4: 0x3c76, 0x6c5: 0x3c7d,\n\t0x6c6: 0xa000, 0x6c7: 0xa000, 0x6c8: 0x3c84, 0x6c9: 0x3c8b,\n\t0x6d1: 0xa000,\n\t0x6d2: 0xa000,\n\t0x6e2: 0xa000,\n\t0x6e8: 0xa000, 0x6e9: 0xa000,\n\t0x6eb: 0xa000, 0x6ec: 0x3ca0, 0x6ed: 0x3ca7, 0x6ee: 0x3cae, 0x6ef: 0x3cb5,\n\t0x6f2: 0xa000, 0x6f3: 0xa000, 0x6f4: 0xa000, 0x6f5: 0xa000,\n\t// Block 0x1c, offset 0x700\n\t0x706: 0xa000, 0x70b: 0xa000,\n\t0x70c: 0x3f08, 0x70d: 0xa000, 0x70e: 0x3f10, 0x70f: 0xa000, 0x710: 0x3f18, 0x711: 0xa000,\n\t0x712: 0x3f20, 0x713: 0xa000, 0x714: 0x3f28, 0x715: 0xa000, 0x716: 0x3f30, 0x717: 0xa000,\n\t0x718: 0x3f38, 0x719: 0xa000, 0x71a: 0x3f40, 0x71b: 0xa000, 0x71c: 0x3f48, 0x71d: 0xa000,\n\t0x71e: 0x3f50, 0x71f: 0xa000, 0x720: 0x3f58, 0x721: 0xa000, 0x722: 0x3f60,\n\t0x724: 0xa000, 0x725: 0x3f68, 0x726: 0xa000, 0x727: 0x3f70, 0x728: 0xa000, 0x729: 0x3f78,\n\t0x72f: 0xa000,\n\t0x730: 0x3f80, 0x731: 0x3f88, 0x732: 0xa000, 0x733: 0x3f90, 0x734: 0x3f98, 0x735: 0xa000,\n\t0x736: 0x3fa0, 0x737: 0x3fa8, 0x738: 0xa000, 0x739: 0x3fb0, 0x73a: 0x3fb8, 0x73b: 0xa000,\n\t0x73c: 0x3fc0, 0x73d: 0x3fc8,\n\t// Block 0x1d, offset 0x740\n\t0x754: 0x3f00,\n\t0x759: 0x9903, 0x75a: 0x9903, 0x75b: 0x8100, 0x75c: 0x8100, 0x75d: 0xa000,\n\t0x75e: 0x3fd0,\n\t0x766: 0xa000,\n\t0x76b: 0xa000, 0x76c: 0x3fe0, 0x76d: 0xa000, 0x76e: 0x3fe8, 0x76f: 0xa000,\n\t0x770: 0x3ff0, 0x771: 0xa000, 0x772: 0x3ff8, 0x773: 0xa000, 0x774: 0x4000, 0x775: 0xa000,\n\t0x776: 0x4008, 0x777: 0xa000, 0x778: 0x4010, 0x779: 0xa000, 0x77a: 0x4018, 0x77b: 0xa000,\n\t0x77c: 0x4020, 0x77d: 0xa000, 0x77e: 0x4028, 0x77f: 0xa000,\n\t// Block 0x1e, offset 0x780\n\t0x780: 0x4030, 0x781: 0xa000, 0x782: 0x4038, 0x784: 0xa000, 0x785: 0x4040,\n\t0x786: 0xa000, 0x787: 0x4048, 0x788: 0xa000, 0x789: 0x4050,\n\t0x78f: 0xa000, 0x790: 0x4058, 0x791: 0x4060,\n\t0x792: 0xa000, 0x793: 0x4068, 0x794: 0x4070, 0x795: 0xa000, 0x796: 0x4078, 0x797: 0x4080,\n\t0x798: 0xa000, 0x799: 0x4088, 0x79a: 0x4090, 0x79b: 0xa000, 0x79c: 0x4098, 0x79d: 0x40a0,\n\t0x7af: 0xa000,\n\t0x7b0: 0xa000, 0x7b1: 0xa000, 0x7b2: 0xa000, 0x7b4: 0x3fd8,\n\t0x7b7: 0x40a8, 0x7b8: 0x40b0, 0x7b9: 0x40b8, 0x7ba: 0x40c0,\n\t0x7bd: 0xa000, 0x7be: 0x40c8,\n\t// Block 0x1f, offset 0x7c0\n\t0x7c0: 0x1377, 0x7c1: 0x0cfb, 0x7c2: 0x13d3, 0x7c3: 0x139f, 0x7c4: 0x0e57, 0x7c5: 0x06eb,\n\t0x7c6: 0x08df, 0x7c7: 0x162b, 0x7c8: 0x162b, 0x7c9: 0x0a0b, 0x7ca: 0x145f, 0x7cb: 0x0943,\n\t0x7cc: 0x0a07, 0x7cd: 0x0bef, 0x7ce: 0x0fcf, 0x7cf: 0x115f, 0x7d0: 0x1297, 0x7d1: 0x12d3,\n\t0x7d2: 0x1307, 0x7d3: 0x141b, 0x7d4: 0x0d73, 0x7d5: 0x0dff, 0x7d6: 0x0eab, 0x7d7: 0x0f43,\n\t0x7d8: 0x125f, 0x7d9: 0x1447, 0x7da: 0x1573, 0x7db: 0x070f, 0x7dc: 0x08b3, 0x7dd: 0x0d87,\n\t0x7de: 0x0ecf, 0x7df: 0x1293, 0x7e0: 0x15c3, 0x7e1: 0x0ab3, 0x7e2: 0x0e77, 0x7e3: 0x1283,\n\t0x7e4: 0x1317, 0x7e5: 0x0c23, 0x7e6: 0x11bb, 0x7e7: 0x12df, 0x7e8: 0x0b1f, 0x7e9: 0x0d0f,\n\t0x7ea: 0x0e17, 0x7eb: 0x0f1b, 0x7ec: 0x1427, 0x7ed: 0x074f, 0x7ee: 0x07e7, 0x7ef: 0x0853,\n\t0x7f0: 0x0c8b, 0x7f1: 0x0d7f, 0x7f2: 0x0ecb, 0x7f3: 0x0fef, 0x7f4: 0x1177, 0x7f5: 0x128b,\n\t0x7f6: 0x12a3, 0x7f7: 0x13c7, 0x7f8: 0x14ef, 0x7f9: 0x15a3, 0x7fa: 0x15bf, 0x7fb: 0x102b,\n\t0x7fc: 0x106b, 0x7fd: 0x1123, 0x7fe: 0x1243, 0x7ff: 0x147b,\n\t// Block 0x20, offset 0x800\n\t0x800: 0x15cb, 0x801: 0x134b, 0x802: 0x09c7, 0x803: 0x0b3b, 0x804: 0x10db, 0x805: 0x119b,\n\t0x806: 0x0eff, 0x807: 0x1033, 0x808: 0x1397, 0x809: 0x14e7, 0x80a: 0x09c3, 0x80b: 0x0a8f,\n\t0x80c: 0x0d77, 0x80d: 0x0e2b, 0x80e: 0x0e5f, 0x80f: 0x1113, 0x810: 0x113b, 0x811: 0x14a7,\n\t0x812: 0x084f, 0x813: 0x11a7, 0x814: 0x07f3, 0x815: 0x07ef, 0x816: 0x1097, 0x817: 0x1127,\n\t0x818: 0x125b, 0x819: 0x14af, 0x81a: 0x1367, 0x81b: 0x0c27, 0x81c: 0x0d73, 0x81d: 0x1357,\n\t0x81e: 0x06f7, 0x81f: 0x0a63, 0x820: 0x0b93, 0x821: 0x0f2f, 0x822: 0x0faf, 0x823: 0x0873,\n\t0x824: 0x103b, 0x825: 0x075f, 0x826: 0x0b77, 0x827: 0x06d7, 0x828: 0x0deb, 0x829: 0x0ca3,\n\t0x82a: 0x110f, 0x82b: 0x08c7, 0x82c: 0x09b3, 0x82d: 0x0ffb, 0x82e: 0x1263, 0x82f: 0x133b,\n\t0x830: 0x0db7, 0x831: 0x13f7, 0x832: 0x0de3, 0x833: 0x0c37, 0x834: 0x121b, 0x835: 0x0c57,\n\t0x836: 0x0fab, 0x837: 0x072b, 0x838: 0x07a7, 0x839: 0x07eb, 0x83a: 0x0d53, 0x83b: 0x10fb,\n\t0x83c: 0x11f3, 0x83d: 0x1347, 0x83e: 0x145b, 0x83f: 0x085b,\n\t// Block 0x21, offset 0x840\n\t0x840: 0x090f, 0x841: 0x0a17, 0x842: 0x0b2f, 0x843: 0x0cbf, 0x844: 0x0e7b, 0x845: 0x103f,\n\t0x846: 0x1497, 0x847: 0x157b, 0x848: 0x15cf, 0x849: 0x15e7, 0x84a: 0x0837, 0x84b: 0x0cf3,\n\t0x84c: 0x0da3, 0x84d: 0x13eb, 0x84e: 0x0afb, 0x84f: 0x0bd7, 0x850: 0x0bf3, 0x851: 0x0c83,\n\t0x852: 0x0e6b, 0x853: 0x0eb7, 0x854: 0x0f67, 0x855: 0x108b, 0x856: 0x112f, 0x857: 0x1193,\n\t0x858: 0x13db, 0x859: 0x126b, 0x85a: 0x1403, 0x85b: 0x147f, 0x85c: 0x080f, 0x85d: 0x083b,\n\t0x85e: 0x0923, 0x85f: 0x0ea7, 0x860: 0x12f3, 0x861: 0x133b, 0x862: 0x0b1b, 0x863: 0x0b8b,\n\t0x864: 0x0c4f, 0x865: 0x0daf, 0x866: 0x10d7, 0x867: 0x0f23, 0x868: 0x073b, 0x869: 0x097f,\n\t0x86a: 0x0a63, 0x86b: 0x0ac7, 0x86c: 0x0b97, 0x86d: 0x0f3f, 0x86e: 0x0f5b, 0x86f: 0x116b,\n\t0x870: 0x118b, 0x871: 0x1463, 0x872: 0x14e3, 0x873: 0x14f3, 0x874: 0x152f, 0x875: 0x0753,\n\t0x876: 0x107f, 0x877: 0x144f, 0x878: 0x14cb, 0x879: 0x0baf, 0x87a: 0x0717, 0x87b: 0x0777,\n\t0x87c: 0x0a67, 0x87d: 0x0a87, 0x87e: 0x0caf, 0x87f: 0x0d73,\n\t// Block 0x22, offset 0x880\n\t0x880: 0x0ec3, 0x881: 0x0fcb, 0x882: 0x1277, 0x883: 0x1417, 0x884: 0x1623, 0x885: 0x0ce3,\n\t0x886: 0x14a3, 0x887: 0x0833, 0x888: 0x0d2f, 0x889: 0x0d3b, 0x88a: 0x0e0f, 0x88b: 0x0e47,\n\t0x88c: 0x0f4b, 0x88d: 0x0fa7, 0x88e: 0x1027, 0x88f: 0x110b, 0x890: 0x153b, 0x891: 0x07af,\n\t0x892: 0x0c03, 0x893: 0x14b3, 0x894: 0x0767, 0x895: 0x0aab, 0x896: 0x0e2f, 0x897: 0x13df,\n\t0x898: 0x0b67, 0x899: 0x0bb7, 0x89a: 0x0d43, 0x89b: 0x0f2f, 0x89c: 0x14bb, 0x89d: 0x0817,\n\t0x89e: 0x08ff, 0x89f: 0x0a97, 0x8a0: 0x0cd3, 0x8a1: 0x0d1f, 0x8a2: 0x0d5f, 0x8a3: 0x0df3,\n\t0x8a4: 0x0f47, 0x8a5: 0x0fbb, 0x8a6: 0x1157, 0x8a7: 0x12f7, 0x8a8: 0x1303, 0x8a9: 0x1457,\n\t0x8aa: 0x14d7, 0x8ab: 0x0883, 0x8ac: 0x0e4b, 0x8ad: 0x0903, 0x8ae: 0x0ec7, 0x8af: 0x0f6b,\n\t0x8b0: 0x1287, 0x8b1: 0x14bf, 0x8b2: 0x15ab, 0x8b3: 0x15d3, 0x8b4: 0x0d37, 0x8b5: 0x0e27,\n\t0x8b6: 0x11c3, 0x8b7: 0x10b7, 0x8b8: 0x10c3, 0x8b9: 0x10e7, 0x8ba: 0x0f17, 0x8bb: 0x0e9f,\n\t0x8bc: 0x1363, 0x8bd: 0x0733, 0x8be: 0x122b, 0x8bf: 0x081b,\n\t// Block 0x23, offset 0x8c0\n\t0x8c0: 0x080b, 0x8c1: 0x0b0b, 0x8c2: 0x0c2b, 0x8c3: 0x10f3, 0x8c4: 0x0a53, 0x8c5: 0x0e03,\n\t0x8c6: 0x0cef, 0x8c7: 0x13e7, 0x8c8: 0x12e7, 0x8c9: 0x14ab, 0x8ca: 0x1323, 0x8cb: 0x0b27,\n\t0x8cc: 0x0787, 0x8cd: 0x095b, 0x8d0: 0x09af,\n\t0x8d2: 0x0cdf, 0x8d5: 0x07f7, 0x8d6: 0x0f1f, 0x8d7: 0x0fe3,\n\t0x8d8: 0x1047, 0x8d9: 0x1063, 0x8da: 0x1067, 0x8db: 0x107b, 0x8dc: 0x14fb, 0x8dd: 0x10eb,\n\t0x8de: 0x116f, 0x8e0: 0x128f, 0x8e2: 0x1353,\n\t0x8e5: 0x1407, 0x8e6: 0x1433,\n\t0x8ea: 0x154f, 0x8eb: 0x1553, 0x8ec: 0x1557, 0x8ed: 0x15bb, 0x8ee: 0x142b, 0x8ef: 0x14c7,\n\t0x8f0: 0x0757, 0x8f1: 0x077b, 0x8f2: 0x078f, 0x8f3: 0x084b, 0x8f4: 0x0857, 0x8f5: 0x0897,\n\t0x8f6: 0x094b, 0x8f7: 0x0967, 0x8f8: 0x096f, 0x8f9: 0x09ab, 0x8fa: 0x09b7, 0x8fb: 0x0a93,\n\t0x8fc: 0x0a9b, 0x8fd: 0x0ba3, 0x8fe: 0x0bcb, 0x8ff: 0x0bd3,\n\t// Block 0x24, offset 0x900\n\t0x900: 0x0beb, 0x901: 0x0c97, 0x902: 0x0cc7, 0x903: 0x0ce7, 0x904: 0x0d57, 0x905: 0x0e1b,\n\t0x906: 0x0e37, 0x907: 0x0e67, 0x908: 0x0ebb, 0x909: 0x0edb, 0x90a: 0x0f4f, 0x90b: 0x102f,\n\t0x90c: 0x104b, 0x90d: 0x1053, 0x90e: 0x104f, 0x90f: 0x1057, 0x910: 0x105b, 0x911: 0x105f,\n\t0x912: 0x1073, 0x913: 0x1077, 0x914: 0x109b, 0x915: 0x10af, 0x916: 0x10cb, 0x917: 0x112f,\n\t0x918: 0x1137, 0x919: 0x113f, 0x91a: 0x1153, 0x91b: 0x117b, 0x91c: 0x11cb, 0x91d: 0x11ff,\n\t0x91e: 0x11ff, 0x91f: 0x1267, 0x920: 0x130f, 0x921: 0x1327, 0x922: 0x135b, 0x923: 0x135f,\n\t0x924: 0x13a3, 0x925: 0x13a7, 0x926: 0x13ff, 0x927: 0x1407, 0x928: 0x14db, 0x929: 0x151f,\n\t0x92a: 0x1537, 0x92b: 0x0b9b, 0x92c: 0x171e, 0x92d: 0x11e3,\n\t0x930: 0x06df, 0x931: 0x07e3, 0x932: 0x07a3, 0x933: 0x074b, 0x934: 0x078b, 0x935: 0x07b7,\n\t0x936: 0x0847, 0x937: 0x0863, 0x938: 0x094b, 0x939: 0x0937, 0x93a: 0x0947, 0x93b: 0x0963,\n\t0x93c: 0x09af, 0x93d: 0x09bf, 0x93e: 0x0a03, 0x93f: 0x0a0f,\n\t// Block 0x25, offset 0x940\n\t0x940: 0x0a2b, 0x941: 0x0a3b, 0x942: 0x0b23, 0x943: 0x0b2b, 0x944: 0x0b5b, 0x945: 0x0b7b,\n\t0x946: 0x0bab, 0x947: 0x0bc3, 0x948: 0x0bb3, 0x949: 0x0bd3, 0x94a: 0x0bc7, 0x94b: 0x0beb,\n\t0x94c: 0x0c07, 0x94d: 0x0c5f, 0x94e: 0x0c6b, 0x94f: 0x0c73, 0x950: 0x0c9b, 0x951: 0x0cdf,\n\t0x952: 0x0d0f, 0x953: 0x0d13, 0x954: 0x0d27, 0x955: 0x0da7, 0x956: 0x0db7, 0x957: 0x0e0f,\n\t0x958: 0x0e5b, 0x959: 0x0e53, 0x95a: 0x0e67, 0x95b: 0x0e83, 0x95c: 0x0ebb, 0x95d: 0x1013,\n\t0x95e: 0x0edf, 0x95f: 0x0f13, 0x960: 0x0f1f, 0x961: 0x0f5f, 0x962: 0x0f7b, 0x963: 0x0f9f,\n\t0x964: 0x0fc3, 0x965: 0x0fc7, 0x966: 0x0fe3, 0x967: 0x0fe7, 0x968: 0x0ff7, 0x969: 0x100b,\n\t0x96a: 0x1007, 0x96b: 0x1037, 0x96c: 0x10b3, 0x96d: 0x10cb, 0x96e: 0x10e3, 0x96f: 0x111b,\n\t0x970: 0x112f, 0x971: 0x114b, 0x972: 0x117b, 0x973: 0x122f, 0x974: 0x1257, 0x975: 0x12cb,\n\t0x976: 0x1313, 0x977: 0x131f, 0x978: 0x1327, 0x979: 0x133f, 0x97a: 0x1353, 0x97b: 0x1343,\n\t0x97c: 0x135b, 0x97d: 0x1357, 0x97e: 0x134f, 0x97f: 0x135f,\n\t// Block 0x26, offset 0x980\n\t0x980: 0x136b, 0x981: 0x13a7, 0x982: 0x13e3, 0x983: 0x1413, 0x984: 0x144b, 0x985: 0x146b,\n\t0x986: 0x14b7, 0x987: 0x14db, 0x988: 0x14fb, 0x989: 0x150f, 0x98a: 0x151f, 0x98b: 0x152b,\n\t0x98c: 0x1537, 0x98d: 0x158b, 0x98e: 0x162b, 0x98f: 0x16b5, 0x990: 0x16b0, 0x991: 0x16e2,\n\t0x992: 0x0607, 0x993: 0x062f, 0x994: 0x0633, 0x995: 0x1764, 0x996: 0x1791, 0x997: 0x1809,\n\t0x998: 0x1617, 0x999: 0x1627,\n\t// Block 0x27, offset 0x9c0\n\t0x9c0: 0x06fb, 0x9c1: 0x06f3, 0x9c2: 0x0703, 0x9c3: 0x1647, 0x9c4: 0x0747, 0x9c5: 0x0757,\n\t0x9c6: 0x075b, 0x9c7: 0x0763, 0x9c8: 0x076b, 0x9c9: 0x076f, 0x9ca: 0x077b, 0x9cb: 0x0773,\n\t0x9cc: 0x05b3, 0x9cd: 0x165b, 0x9ce: 0x078f, 0x9cf: 0x0793, 0x9d0: 0x0797, 0x9d1: 0x07b3,\n\t0x9d2: 0x164c, 0x9d3: 0x05b7, 0x9d4: 0x079f, 0x9d5: 0x07bf, 0x9d6: 0x1656, 0x9d7: 0x07cf,\n\t0x9d8: 0x07d7, 0x9d9: 0x0737, 0x9da: 0x07df, 0x9db: 0x07e3, 0x9dc: 0x1831, 0x9dd: 0x07ff,\n\t0x9de: 0x0807, 0x9df: 0x05bf, 0x9e0: 0x081f, 0x9e1: 0x0823, 0x9e2: 0x082b, 0x9e3: 0x082f,\n\t0x9e4: 0x05c3, 0x9e5: 0x0847, 0x9e6: 0x084b, 0x9e7: 0x0857, 0x9e8: 0x0863, 0x9e9: 0x0867,\n\t0x9ea: 0x086b, 0x9eb: 0x0873, 0x9ec: 0x0893, 0x9ed: 0x0897, 0x9ee: 0x089f, 0x9ef: 0x08af,\n\t0x9f0: 0x08b7, 0x9f1: 0x08bb, 0x9f2: 0x08bb, 0x9f3: 0x08bb, 0x9f4: 0x166a, 0x9f5: 0x0e93,\n\t0x9f6: 0x08cf, 0x9f7: 0x08d7, 0x9f8: 0x166f, 0x9f9: 0x08e3, 0x9fa: 0x08eb, 0x9fb: 0x08f3,\n\t0x9fc: 0x091b, 0x9fd: 0x0907, 0x9fe: 0x0913, 0x9ff: 0x0917,\n\t// Block 0x28, offset 0xa00\n\t0xa00: 0x091f, 0xa01: 0x0927, 0xa02: 0x092b, 0xa03: 0x0933, 0xa04: 0x093b, 0xa05: 0x093f,\n\t0xa06: 0x093f, 0xa07: 0x0947, 0xa08: 0x094f, 0xa09: 0x0953, 0xa0a: 0x095f, 0xa0b: 0x0983,\n\t0xa0c: 0x0967, 0xa0d: 0x0987, 0xa0e: 0x096b, 0xa0f: 0x0973, 0xa10: 0x080b, 0xa11: 0x09cf,\n\t0xa12: 0x0997, 0xa13: 0x099b, 0xa14: 0x099f, 0xa15: 0x0993, 0xa16: 0x09a7, 0xa17: 0x09a3,\n\t0xa18: 0x09bb, 0xa19: 0x1674, 0xa1a: 0x09d7, 0xa1b: 0x09db, 0xa1c: 0x09e3, 0xa1d: 0x09ef,\n\t0xa1e: 0x09f7, 0xa1f: 0x0a13, 0xa20: 0x1679, 0xa21: 0x167e, 0xa22: 0x0a1f, 0xa23: 0x0a23,\n\t0xa24: 0x0a27, 0xa25: 0x0a1b, 0xa26: 0x0a2f, 0xa27: 0x05c7, 0xa28: 0x05cb, 0xa29: 0x0a37,\n\t0xa2a: 0x0a3f, 0xa2b: 0x0a3f, 0xa2c: 0x1683, 0xa2d: 0x0a5b, 0xa2e: 0x0a5f, 0xa2f: 0x0a63,\n\t0xa30: 0x0a6b, 0xa31: 0x1688, 0xa32: 0x0a73, 0xa33: 0x0a77, 0xa34: 0x0b4f, 0xa35: 0x0a7f,\n\t0xa36: 0x05cf, 0xa37: 0x0a8b, 0xa38: 0x0a9b, 0xa39: 0x0aa7, 0xa3a: 0x0aa3, 0xa3b: 0x1692,\n\t0xa3c: 0x0aaf, 0xa3d: 0x1697, 0xa3e: 0x0abb, 0xa3f: 0x0ab7,\n\t// Block 0x29, offset 0xa40\n\t0xa40: 0x0abf, 0xa41: 0x0acf, 0xa42: 0x0ad3, 0xa43: 0x05d3, 0xa44: 0x0ae3, 0xa45: 0x0aeb,\n\t0xa46: 0x0aef, 0xa47: 0x0af3, 0xa48: 0x05d7, 0xa49: 0x169c, 0xa4a: 0x05db, 0xa4b: 0x0b0f,\n\t0xa4c: 0x0b13, 0xa4d: 0x0b17, 0xa4e: 0x0b1f, 0xa4f: 0x1863, 0xa50: 0x0b37, 0xa51: 0x16a6,\n\t0xa52: 0x16a6, 0xa53: 0x11d7, 0xa54: 0x0b47, 0xa55: 0x0b47, 0xa56: 0x05df, 0xa57: 0x16c9,\n\t0xa58: 0x179b, 0xa59: 0x0b57, 0xa5a: 0x0b5f, 0xa5b: 0x05e3, 0xa5c: 0x0b73, 0xa5d: 0x0b83,\n\t0xa5e: 0x0b87, 0xa5f: 0x0b8f, 0xa60: 0x0b9f, 0xa61: 0x05eb, 0xa62: 0x05e7, 0xa63: 0x0ba3,\n\t0xa64: 0x16ab, 0xa65: 0x0ba7, 0xa66: 0x0bbb, 0xa67: 0x0bbf, 0xa68: 0x0bc3, 0xa69: 0x0bbf,\n\t0xa6a: 0x0bcf, 0xa6b: 0x0bd3, 0xa6c: 0x0be3, 0xa6d: 0x0bdb, 0xa6e: 0x0bdf, 0xa6f: 0x0be7,\n\t0xa70: 0x0beb, 0xa71: 0x0bef, 0xa72: 0x0bfb, 0xa73: 0x0bff, 0xa74: 0x0c17, 0xa75: 0x0c1f,\n\t0xa76: 0x0c2f, 0xa77: 0x0c43, 0xa78: 0x16ba, 0xa79: 0x0c3f, 0xa7a: 0x0c33, 0xa7b: 0x0c4b,\n\t0xa7c: 0x0c53, 0xa7d: 0x0c67, 0xa7e: 0x16bf, 0xa7f: 0x0c6f,\n\t// Block 0x2a, offset 0xa80\n\t0xa80: 0x0c63, 0xa81: 0x0c5b, 0xa82: 0x05ef, 0xa83: 0x0c77, 0xa84: 0x0c7f, 0xa85: 0x0c87,\n\t0xa86: 0x0c7b, 0xa87: 0x05f3, 0xa88: 0x0c97, 0xa89: 0x0c9f, 0xa8a: 0x16c4, 0xa8b: 0x0ccb,\n\t0xa8c: 0x0cff, 0xa8d: 0x0cdb, 0xa8e: 0x05ff, 0xa8f: 0x0ce7, 0xa90: 0x05fb, 0xa91: 0x05f7,\n\t0xa92: 0x07c3, 0xa93: 0x07c7, 0xa94: 0x0d03, 0xa95: 0x0ceb, 0xa96: 0x11ab, 0xa97: 0x0663,\n\t0xa98: 0x0d0f, 0xa99: 0x0d13, 0xa9a: 0x0d17, 0xa9b: 0x0d2b, 0xa9c: 0x0d23, 0xa9d: 0x16dd,\n\t0xa9e: 0x0603, 0xa9f: 0x0d3f, 0xaa0: 0x0d33, 0xaa1: 0x0d4f, 0xaa2: 0x0d57, 0xaa3: 0x16e7,\n\t0xaa4: 0x0d5b, 0xaa5: 0x0d47, 0xaa6: 0x0d63, 0xaa7: 0x0607, 0xaa8: 0x0d67, 0xaa9: 0x0d6b,\n\t0xaaa: 0x0d6f, 0xaab: 0x0d7b, 0xaac: 0x16ec, 0xaad: 0x0d83, 0xaae: 0x060b, 0xaaf: 0x0d8f,\n\t0xab0: 0x16f1, 0xab1: 0x0d93, 0xab2: 0x060f, 0xab3: 0x0d9f, 0xab4: 0x0dab, 0xab5: 0x0db7,\n\t0xab6: 0x0dbb, 0xab7: 0x16f6, 0xab8: 0x168d, 0xab9: 0x16fb, 0xaba: 0x0ddb, 0xabb: 0x1700,\n\t0xabc: 0x0de7, 0xabd: 0x0def, 0xabe: 0x0ddf, 0xabf: 0x0dfb,\n\t// Block 0x2b, offset 0xac0\n\t0xac0: 0x0e0b, 0xac1: 0x0e1b, 0xac2: 0x0e0f, 0xac3: 0x0e13, 0xac4: 0x0e1f, 0xac5: 0x0e23,\n\t0xac6: 0x1705, 0xac7: 0x0e07, 0xac8: 0x0e3b, 0xac9: 0x0e3f, 0xaca: 0x0613, 0xacb: 0x0e53,\n\t0xacc: 0x0e4f, 0xacd: 0x170a, 0xace: 0x0e33, 0xacf: 0x0e6f, 0xad0: 0x170f, 0xad1: 0x1714,\n\t0xad2: 0x0e73, 0xad3: 0x0e87, 0xad4: 0x0e83, 0xad5: 0x0e7f, 0xad6: 0x0617, 0xad7: 0x0e8b,\n\t0xad8: 0x0e9b, 0xad9: 0x0e97, 0xada: 0x0ea3, 0xadb: 0x1651, 0xadc: 0x0eb3, 0xadd: 0x1719,\n\t0xade: 0x0ebf, 0xadf: 0x1723, 0xae0: 0x0ed3, 0xae1: 0x0edf, 0xae2: 0x0ef3, 0xae3: 0x1728,\n\t0xae4: 0x0f07, 0xae5: 0x0f0b, 0xae6: 0x172d, 0xae7: 0x1732, 0xae8: 0x0f27, 0xae9: 0x0f37,\n\t0xaea: 0x061b, 0xaeb: 0x0f3b, 0xaec: 0x061f, 0xaed: 0x061f, 0xaee: 0x0f53, 0xaef: 0x0f57,\n\t0xaf0: 0x0f5f, 0xaf1: 0x0f63, 0xaf2: 0x0f6f, 0xaf3: 0x0623, 0xaf4: 0x0f87, 0xaf5: 0x1737,\n\t0xaf6: 0x0fa3, 0xaf7: 0x173c, 0xaf8: 0x0faf, 0xaf9: 0x16a1, 0xafa: 0x0fbf, 0xafb: 0x1741,\n\t0xafc: 0x1746, 0xafd: 0x174b, 0xafe: 0x0627, 0xaff: 0x062b,\n\t// Block 0x2c, offset 0xb00\n\t0xb00: 0x0ff7, 0xb01: 0x1755, 0xb02: 0x1750, 0xb03: 0x175a, 0xb04: 0x175f, 0xb05: 0x0fff,\n\t0xb06: 0x1003, 0xb07: 0x1003, 0xb08: 0x100b, 0xb09: 0x0633, 0xb0a: 0x100f, 0xb0b: 0x0637,\n\t0xb0c: 0x063b, 0xb0d: 0x1769, 0xb0e: 0x1023, 0xb0f: 0x102b, 0xb10: 0x1037, 0xb11: 0x063f,\n\t0xb12: 0x176e, 0xb13: 0x105b, 0xb14: 0x1773, 0xb15: 0x1778, 0xb16: 0x107b, 0xb17: 0x1093,\n\t0xb18: 0x0643, 0xb19: 0x109b, 0xb1a: 0x109f, 0xb1b: 0x10a3, 0xb1c: 0x177d, 0xb1d: 0x1782,\n\t0xb1e: 0x1782, 0xb1f: 0x10bb, 0xb20: 0x0647, 0xb21: 0x1787, 0xb22: 0x10cf, 0xb23: 0x10d3,\n\t0xb24: 0x064b, 0xb25: 0x178c, 0xb26: 0x10ef, 0xb27: 0x064f, 0xb28: 0x10ff, 0xb29: 0x10f7,\n\t0xb2a: 0x1107, 0xb2b: 0x1796, 0xb2c: 0x111f, 0xb2d: 0x0653, 0xb2e: 0x112b, 0xb2f: 0x1133,\n\t0xb30: 0x1143, 0xb31: 0x0657, 0xb32: 0x17a0, 0xb33: 0x17a5, 0xb34: 0x065b, 0xb35: 0x17aa,\n\t0xb36: 0x115b, 0xb37: 0x17af, 0xb38: 0x1167, 0xb39: 0x1173, 0xb3a: 0x117b, 0xb3b: 0x17b4,\n\t0xb3c: 0x17b9, 0xb3d: 0x118f, 0xb3e: 0x17be, 0xb3f: 0x1197,\n\t// Block 0x2d, offset 0xb40\n\t0xb40: 0x16ce, 0xb41: 0x065f, 0xb42: 0x11af, 0xb43: 0x11b3, 0xb44: 0x0667, 0xb45: 0x11b7,\n\t0xb46: 0x0a33, 0xb47: 0x17c3, 0xb48: 0x17c8, 0xb49: 0x16d3, 0xb4a: 0x16d8, 0xb4b: 0x11d7,\n\t0xb4c: 0x11db, 0xb4d: 0x13f3, 0xb4e: 0x066b, 0xb4f: 0x1207, 0xb50: 0x1203, 0xb51: 0x120b,\n\t0xb52: 0x083f, 0xb53: 0x120f, 0xb54: 0x1213, 0xb55: 0x1217, 0xb56: 0x121f, 0xb57: 0x17cd,\n\t0xb58: 0x121b, 0xb59: 0x1223, 0xb5a: 0x1237, 0xb5b: 0x123b, 0xb5c: 0x1227, 0xb5d: 0x123f,\n\t0xb5e: 0x1253, 0xb5f: 0x1267, 0xb60: 0x1233, 0xb61: 0x1247, 0xb62: 0x124b, 0xb63: 0x124f,\n\t0xb64: 0x17d2, 0xb65: 0x17dc, 0xb66: 0x17d7, 0xb67: 0x066f, 0xb68: 0x126f, 0xb69: 0x1273,\n\t0xb6a: 0x127b, 0xb6b: 0x17f0, 0xb6c: 0x127f, 0xb6d: 0x17e1, 0xb6e: 0x0673, 0xb6f: 0x0677,\n\t0xb70: 0x17e6, 0xb71: 0x17eb, 0xb72: 0x067b, 0xb73: 0x129f, 0xb74: 0x12a3, 0xb75: 0x12a7,\n\t0xb76: 0x12ab, 0xb77: 0x12b7, 0xb78: 0x12b3, 0xb79: 0x12bf, 0xb7a: 0x12bb, 0xb7b: 0x12cb,\n\t0xb7c: 0x12c3, 0xb7d: 0x12c7, 0xb7e: 0x12cf, 0xb7f: 0x067f,\n\t// Block 0x2e, offset 0xb80\n\t0xb80: 0x12d7, 0xb81: 0x12db, 0xb82: 0x0683, 0xb83: 0x12eb, 0xb84: 0x12ef, 0xb85: 0x17f5,\n\t0xb86: 0x12fb, 0xb87: 0x12ff, 0xb88: 0x0687, 0xb89: 0x130b, 0xb8a: 0x05bb, 0xb8b: 0x17fa,\n\t0xb8c: 0x17ff, 0xb8d: 0x068b, 0xb8e: 0x068f, 0xb8f: 0x1337, 0xb90: 0x134f, 0xb91: 0x136b,\n\t0xb92: 0x137b, 0xb93: 0x1804, 0xb94: 0x138f, 0xb95: 0x1393, 0xb96: 0x13ab, 0xb97: 0x13b7,\n\t0xb98: 0x180e, 0xb99: 0x1660, 0xb9a: 0x13c3, 0xb9b: 0x13bf, 0xb9c: 0x13cb, 0xb9d: 0x1665,\n\t0xb9e: 0x13d7, 0xb9f: 0x13e3, 0xba0: 0x1813, 0xba1: 0x1818, 0xba2: 0x1423, 0xba3: 0x142f,\n\t0xba4: 0x1437, 0xba5: 0x181d, 0xba6: 0x143b, 0xba7: 0x1467, 0xba8: 0x1473, 0xba9: 0x1477,\n\t0xbaa: 0x146f, 0xbab: 0x1483, 0xbac: 0x1487, 0xbad: 0x1822, 0xbae: 0x1493, 0xbaf: 0x0693,\n\t0xbb0: 0x149b, 0xbb1: 0x1827, 0xbb2: 0x0697, 0xbb3: 0x14d3, 0xbb4: 0x0ac3, 0xbb5: 0x14eb,\n\t0xbb6: 0x182c, 0xbb7: 0x1836, 0xbb8: 0x069b, 0xbb9: 0x069f, 0xbba: 0x1513, 0xbbb: 0x183b,\n\t0xbbc: 0x06a3, 0xbbd: 0x1840, 0xbbe: 0x152b, 0xbbf: 0x152b,\n\t// Block 0x2f, offset 0xbc0\n\t0xbc0: 0x1533, 0xbc1: 0x1845, 0xbc2: 0x154b, 0xbc3: 0x06a7, 0xbc4: 0x155b, 0xbc5: 0x1567,\n\t0xbc6: 0x156f, 0xbc7: 0x1577, 0xbc8: 0x06ab, 0xbc9: 0x184a, 0xbca: 0x158b, 0xbcb: 0x15a7,\n\t0xbcc: 0x15b3, 0xbcd: 0x06af, 0xbce: 0x06b3, 0xbcf: 0x15b7, 0xbd0: 0x184f, 0xbd1: 0x06b7,\n\t0xbd2: 0x1854, 0xbd3: 0x1859, 0xbd4: 0x185e, 0xbd5: 0x15db, 0xbd6: 0x06bb, 0xbd7: 0x15ef,\n\t0xbd8: 0x15f7, 0xbd9: 0x15fb, 0xbda: 0x1603, 0xbdb: 0x160b, 0xbdc: 0x1613, 0xbdd: 0x1868,\n}\n\n// nfcIndex: 22 blocks, 1408 entries, 1408 bytes\n// Block 0 is the zero block.\nvar nfcIndex = [1408]uint8{\n\t// Block 0x0, offset 0x0\n\t// Block 0x1, offset 0x40\n\t// Block 0x2, offset 0x80\n\t// Block 0x3, offset 0xc0\n\t0xc2: 0x2e, 0xc3: 0x01, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x2f, 0xc7: 0x04,\n\t0xc8: 0x05, 0xca: 0x30, 0xcb: 0x31, 0xcc: 0x06, 0xcd: 0x07, 0xce: 0x08, 0xcf: 0x32,\n\t0xd0: 0x09, 0xd1: 0x33, 0xd2: 0x34, 0xd3: 0x0a, 0xd6: 0x0b, 0xd7: 0x35,\n\t0xd8: 0x36, 0xd9: 0x0c, 0xdb: 0x37, 0xdc: 0x38, 0xdd: 0x39, 0xdf: 0x3a,\n\t0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05,\n\t0xea: 0x06, 0xeb: 0x07, 0xec: 0x08, 0xed: 0x09, 0xef: 0x0a,\n\t0xf0: 0x13,\n\t// Block 0x4, offset 0x100\n\t0x120: 0x3b, 0x121: 0x3c, 0x123: 0x0d, 0x124: 0x3d, 0x125: 0x3e, 0x126: 0x3f, 0x127: 0x40,\n\t0x128: 0x41, 0x129: 0x42, 0x12a: 0x43, 0x12b: 0x44, 0x12c: 0x3f, 0x12d: 0x45, 0x12e: 0x46, 0x12f: 0x47,\n\t0x131: 0x48, 0x132: 0x49, 0x133: 0x4a, 0x134: 0x4b, 0x135: 0x4c, 0x137: 0x4d,\n\t0x138: 0x4e, 0x139: 0x4f, 0x13a: 0x50, 0x13b: 0x51, 0x13c: 0x52, 0x13d: 0x53, 0x13e: 0x54, 0x13f: 0x55,\n\t// Block 0x5, offset 0x140\n\t0x140: 0x56, 0x142: 0x57, 0x144: 0x58, 0x145: 0x59, 0x146: 0x5a, 0x147: 0x5b,\n\t0x14d: 0x5c,\n\t0x15c: 0x5d, 0x15f: 0x5e,\n\t0x162: 0x5f, 0x164: 0x60,\n\t0x168: 0x61, 0x169: 0x62, 0x16a: 0x63, 0x16c: 0x0e, 0x16d: 0x64, 0x16e: 0x65, 0x16f: 0x66,\n\t0x170: 0x67, 0x173: 0x68, 0x177: 0x0f,\n\t0x178: 0x10, 0x179: 0x11, 0x17a: 0x12, 0x17b: 0x13, 0x17c: 0x14, 0x17d: 0x15, 0x17e: 0x16, 0x17f: 0x17,\n\t// Block 0x6, offset 0x180\n\t0x180: 0x69, 0x183: 0x6a, 0x184: 0x6b, 0x186: 0x6c, 0x187: 0x6d,\n\t0x188: 0x6e, 0x189: 0x18, 0x18a: 0x19, 0x18b: 0x6f, 0x18c: 0x70,\n\t0x1ab: 0x71,\n\t0x1b3: 0x72, 0x1b5: 0x73, 0x1b7: 0x74,\n\t// Block 0x7, offset 0x1c0\n\t0x1c0: 0x75, 0x1c1: 0x1a, 0x1c2: 0x1b, 0x1c3: 0x1c, 0x1c4: 0x76, 0x1c5: 0x77,\n\t0x1c9: 0x78, 0x1cc: 0x79, 0x1cd: 0x7a,\n\t// Block 0x8, offset 0x200\n\t0x219: 0x7b, 0x21a: 0x7c, 0x21b: 0x7d,\n\t0x220: 0x7e, 0x223: 0x7f, 0x224: 0x80, 0x225: 0x81, 0x226: 0x82, 0x227: 0x83,\n\t0x22a: 0x84, 0x22b: 0x85, 0x22f: 0x86,\n\t0x230: 0x87, 0x231: 0x88, 0x232: 0x89, 0x233: 0x8a, 0x234: 0x8b, 0x235: 0x8c, 0x236: 0x8d, 0x237: 0x87,\n\t0x238: 0x88, 0x239: 0x89, 0x23a: 0x8a, 0x23b: 0x8b, 0x23c: 0x8c, 0x23d: 0x8d, 0x23e: 0x87, 0x23f: 0x88,\n\t// Block 0x9, offset 0x240\n\t0x240: 0x89, 0x241: 0x8a, 0x242: 0x8b, 0x243: 0x8c, 0x244: 0x8d, 0x245: 0x87, 0x246: 0x88, 0x247: 0x89,\n\t0x248: 0x8a, 0x249: 0x8b, 0x24a: 0x8c, 0x24b: 0x8d, 0x24c: 0x87, 0x24d: 0x88, 0x24e: 0x89, 0x24f: 0x8a,\n\t0x250: 0x8b, 0x251: 0x8c, 0x252: 0x8d, 0x253: 0x87, 0x254: 0x88, 0x255: 0x89, 0x256: 0x8a, 0x257: 0x8b,\n\t0x258: 0x8c, 0x259: 0x8d, 0x25a: 0x87, 0x25b: 0x88, 0x25c: 0x89, 0x25d: 0x8a, 0x25e: 0x8b, 0x25f: 0x8c,\n\t0x260: 0x8d, 0x261: 0x87, 0x262: 0x88, 0x263: 0x89, 0x264: 0x8a, 0x265: 0x8b, 0x266: 0x8c, 0x267: 0x8d,\n\t0x268: 0x87, 0x269: 0x88, 0x26a: 0x89, 0x26b: 0x8a, 0x26c: 0x8b, 0x26d: 0x8c, 0x26e: 0x8d, 0x26f: 0x87,\n\t0x270: 0x88, 0x271: 0x89, 0x272: 0x8a, 0x273: 0x8b, 0x274: 0x8c, 0x275: 0x8d, 0x276: 0x87, 0x277: 0x88,\n\t0x278: 0x89, 0x279: 0x8a, 0x27a: 0x8b, 0x27b: 0x8c, 0x27c: 0x8d, 0x27d: 0x87, 0x27e: 0x88, 0x27f: 0x89,\n\t// Block 0xa, offset 0x280\n\t0x280: 0x8a, 0x281: 0x8b, 0x282: 0x8c, 0x283: 0x8d, 0x284: 0x87, 0x285: 0x88, 0x286: 0x89, 0x287: 0x8a,\n\t0x288: 0x8b, 0x289: 0x8c, 0x28a: 0x8d, 0x28b: 0x87, 0x28c: 0x88, 0x28d: 0x89, 0x28e: 0x8a, 0x28f: 0x8b,\n\t0x290: 0x8c, 0x291: 0x8d, 0x292: 0x87, 0x293: 0x88, 0x294: 0x89, 0x295: 0x8a, 0x296: 0x8b, 0x297: 0x8c,\n\t0x298: 0x8d, 0x299: 0x87, 0x29a: 0x88, 0x29b: 0x89, 0x29c: 0x8a, 0x29d: 0x8b, 0x29e: 0x8c, 0x29f: 0x8d,\n\t0x2a0: 0x87, 0x2a1: 0x88, 0x2a2: 0x89, 0x2a3: 0x8a, 0x2a4: 0x8b, 0x2a5: 0x8c, 0x2a6: 0x8d, 0x2a7: 0x87,\n\t0x2a8: 0x88, 0x2a9: 0x89, 0x2aa: 0x8a, 0x2ab: 0x8b, 0x2ac: 0x8c, 0x2ad: 0x8d, 0x2ae: 0x87, 0x2af: 0x88,\n\t0x2b0: 0x89, 0x2b1: 0x8a, 0x2b2: 0x8b, 0x2b3: 0x8c, 0x2b4: 0x8d, 0x2b5: 0x87, 0x2b6: 0x88, 0x2b7: 0x89,\n\t0x2b8: 0x8a, 0x2b9: 0x8b, 0x2ba: 0x8c, 0x2bb: 0x8d, 0x2bc: 0x87, 0x2bd: 0x88, 0x2be: 0x89, 0x2bf: 0x8a,\n\t// Block 0xb, offset 0x2c0\n\t0x2c0: 0x8b, 0x2c1: 0x8c, 0x2c2: 0x8d, 0x2c3: 0x87, 0x2c4: 0x88, 0x2c5: 0x89, 0x2c6: 0x8a, 0x2c7: 0x8b,\n\t0x2c8: 0x8c, 0x2c9: 0x8d, 0x2ca: 0x87, 0x2cb: 0x88, 0x2cc: 0x89, 0x2cd: 0x8a, 0x2ce: 0x8b, 0x2cf: 0x8c,\n\t0x2d0: 0x8d, 0x2d1: 0x87, 0x2d2: 0x88, 0x2d3: 0x89, 0x2d4: 0x8a, 0x2d5: 0x8b, 0x2d6: 0x8c, 0x2d7: 0x8d,\n\t0x2d8: 0x87, 0x2d9: 0x88, 0x2da: 0x89, 0x2db: 0x8a, 0x2dc: 0x8b, 0x2dd: 0x8c, 0x2de: 0x8e,\n\t// Block 0xc, offset 0x300\n\t0x324: 0x1d, 0x325: 0x1e, 0x326: 0x1f, 0x327: 0x20,\n\t0x328: 0x21, 0x329: 0x22, 0x32a: 0x23, 0x32b: 0x24, 0x32c: 0x8f, 0x32d: 0x90, 0x32e: 0x91,\n\t0x331: 0x92, 0x332: 0x93, 0x333: 0x94, 0x334: 0x95,\n\t0x338: 0x96, 0x339: 0x97, 0x33a: 0x98, 0x33b: 0x99, 0x33e: 0x9a, 0x33f: 0x9b,\n\t// Block 0xd, offset 0x340\n\t0x347: 0x9c,\n\t0x34b: 0x9d, 0x34d: 0x9e,\n\t0x368: 0x9f, 0x36b: 0xa0,\n\t0x374: 0xa1,\n\t0x37d: 0xa2,\n\t// Block 0xe, offset 0x380\n\t0x381: 0xa3, 0x382: 0xa4, 0x384: 0xa5, 0x385: 0x82, 0x387: 0xa6,\n\t0x388: 0xa7, 0x38b: 0xa8, 0x38c: 0xa9, 0x38d: 0xaa,\n\t0x391: 0xab, 0x392: 0xac, 0x393: 0xad, 0x396: 0xae, 0x397: 0xaf,\n\t0x398: 0x73, 0x39a: 0xb0, 0x39c: 0xb1,\n\t0x3a0: 0xb2,\n\t0x3a8: 0xb3, 0x3a9: 0xb4, 0x3aa: 0xb5,\n\t0x3b0: 0x73, 0x3b5: 0xb6, 0x3b6: 0xb7,\n\t// Block 0xf, offset 0x3c0\n\t0x3eb: 0xb8, 0x3ec: 0xb9,\n\t// Block 0x10, offset 0x400\n\t0x432: 0xba,\n\t// Block 0x11, offset 0x440\n\t0x445: 0xbb, 0x446: 0xbc, 0x447: 0xbd,\n\t0x449: 0xbe,\n\t// Block 0x12, offset 0x480\n\t0x480: 0xbf,\n\t0x4a3: 0xc0, 0x4a5: 0xc1,\n\t// Block 0x13, offset 0x4c0\n\t0x4c8: 0xc2,\n\t// Block 0x14, offset 0x500\n\t0x520: 0x25, 0x521: 0x26, 0x522: 0x27, 0x523: 0x28, 0x524: 0x29, 0x525: 0x2a, 0x526: 0x2b, 0x527: 0x2c,\n\t0x528: 0x2d,\n\t// Block 0x15, offset 0x540\n\t0x550: 0x0b, 0x551: 0x0c, 0x556: 0x0d,\n\t0x55b: 0x0e, 0x55d: 0x0f, 0x55e: 0x10, 0x55f: 0x11,\n\t0x56f: 0x12,\n}\n\n// nfcSparseOffset: 149 entries, 298 bytes\nvar 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}\n\n// nfcSparseValues: 684 entries, 2736 bytes\nvar nfcSparseValues = [684]valueRange{\n\t// Block 0x0, offset 0x0\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0xa100, lo: 0xa8, hi: 0xa8},\n\t{value: 0x8100, lo: 0xaf, hi: 0xaf},\n\t{value: 0x8100, lo: 0xb4, hi: 0xb4},\n\t{value: 0x8100, lo: 0xb8, hi: 0xb8},\n\t// Block 0x1, offset 0x5\n\t{value: 0x0091, lo: 0x03},\n\t{value: 0x46e2, lo: 0xa0, hi: 0xa1},\n\t{value: 0x4714, lo: 0xaf, hi: 0xb0},\n\t{value: 0xa000, lo: 0xb7, hi: 0xb7},\n\t// Block 0x2, offset 0x9\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0xa000, lo: 0x92, hi: 0x92},\n\t// Block 0x3, offset 0xb\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8100, lo: 0x98, hi: 0x9d},\n\t// Block 0x4, offset 0xd\n\t{value: 0x0006, lo: 0x0a},\n\t{value: 0xa000, lo: 0x81, hi: 0x81},\n\t{value: 0xa000, lo: 0x85, hi: 0x85},\n\t{value: 0xa000, lo: 0x89, hi: 0x89},\n\t{value: 0x4840, lo: 0x8a, hi: 0x8a},\n\t{value: 0x485e, lo: 0x8b, hi: 0x8b},\n\t{value: 0x36c7, lo: 0x8c, hi: 0x8c},\n\t{value: 0x36df, lo: 0x8d, hi: 0x8d},\n\t{value: 0x4876, lo: 0x8e, hi: 0x8e},\n\t{value: 0xa000, lo: 0x92, hi: 0x92},\n\t{value: 0x36fd, lo: 0x93, hi: 0x94},\n\t// Block 0x5, offset 0x18\n\t{value: 0x0000, lo: 0x0f},\n\t{value: 0xa000, lo: 0x83, hi: 0x83},\n\t{value: 0xa000, lo: 0x87, hi: 0x87},\n\t{value: 0xa000, lo: 0x8b, hi: 0x8b},\n\t{value: 0xa000, lo: 0x8d, hi: 0x8d},\n\t{value: 0x37a5, lo: 0x90, hi: 0x90},\n\t{value: 0x37b1, lo: 0x91, hi: 0x91},\n\t{value: 0x379f, lo: 0x93, hi: 0x93},\n\t{value: 0xa000, lo: 0x96, hi: 0x96},\n\t{value: 0x3817, lo: 0x97, hi: 0x97},\n\t{value: 0x37e1, lo: 0x9c, hi: 0x9c},\n\t{value: 0x37c9, lo: 0x9d, hi: 0x9d},\n\t{value: 0x37f3, lo: 0x9e, hi: 0x9e},\n\t{value: 0xa000, lo: 0xb4, hi: 0xb5},\n\t{value: 0x381d, lo: 0xb6, hi: 0xb6},\n\t{value: 0x3823, lo: 0xb7, hi: 0xb7},\n\t// Block 0x6, offset 0x28\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8132, lo: 0x83, hi: 0x87},\n\t// Block 0x7, offset 0x2a\n\t{value: 0x0001, lo: 0x04},\n\t{value: 0x8113, lo: 0x81, hi: 0x82},\n\t{value: 0x8132, lo: 0x84, hi: 0x84},\n\t{value: 0x812d, lo: 0x85, hi: 0x85},\n\t{value: 0x810d, lo: 0x87, hi: 0x87},\n\t// Block 0x8, offset 0x2f\n\t{value: 0x0000, lo: 0x0a},\n\t{value: 0x8132, lo: 0x90, hi: 0x97},\n\t{value: 0x8119, lo: 0x98, hi: 0x98},\n\t{value: 0x811a, lo: 0x99, hi: 0x99},\n\t{value: 0x811b, lo: 0x9a, hi: 0x9a},\n\t{value: 0x3841, lo: 0xa2, hi: 0xa2},\n\t{value: 0x3847, lo: 0xa3, hi: 0xa3},\n\t{value: 0x3853, lo: 0xa4, hi: 0xa4},\n\t{value: 0x384d, lo: 0xa5, hi: 0xa5},\n\t{value: 0x3859, lo: 0xa6, hi: 0xa6},\n\t{value: 0xa000, lo: 0xa7, hi: 0xa7},\n\t// Block 0x9, offset 0x3a\n\t{value: 0x0000, lo: 0x0e},\n\t{value: 0x386b, lo: 0x80, hi: 0x80},\n\t{value: 0xa000, lo: 0x81, hi: 0x81},\n\t{value: 0x385f, lo: 0x82, hi: 0x82},\n\t{value: 0xa000, lo: 0x92, hi: 0x92},\n\t{value: 0x3865, lo: 0x93, hi: 0x93},\n\t{value: 0xa000, lo: 0x95, hi: 0x95},\n\t{value: 0x8132, lo: 0x96, hi: 0x9c},\n\t{value: 0x8132, lo: 0x9f, hi: 0xa2},\n\t{value: 0x812d, lo: 0xa3, hi: 0xa3},\n\t{value: 0x8132, lo: 0xa4, hi: 0xa4},\n\t{value: 0x8132, lo: 0xa7, hi: 0xa8},\n\t{value: 0x812d, lo: 0xaa, hi: 0xaa},\n\t{value: 0x8132, lo: 0xab, hi: 0xac},\n\t{value: 0x812d, lo: 0xad, hi: 0xad},\n\t// Block 0xa, offset 0x49\n\t{value: 0x0000, lo: 0x0c},\n\t{value: 0x811f, lo: 0x91, hi: 0x91},\n\t{value: 0x8132, lo: 0xb0, hi: 0xb0},\n\t{value: 0x812d, lo: 0xb1, hi: 0xb1},\n\t{value: 0x8132, lo: 0xb2, hi: 0xb3},\n\t{value: 0x812d, lo: 0xb4, hi: 0xb4},\n\t{value: 0x8132, lo: 0xb5, hi: 0xb6},\n\t{value: 0x812d, lo: 0xb7, hi: 0xb9},\n\t{value: 0x8132, lo: 0xba, hi: 0xba},\n\t{value: 0x812d, lo: 0xbb, hi: 0xbc},\n\t{value: 0x8132, lo: 0xbd, hi: 0xbd},\n\t{value: 0x812d, lo: 0xbe, hi: 0xbe},\n\t{value: 0x8132, lo: 0xbf, hi: 0xbf},\n\t// Block 0xb, offset 0x56\n\t{value: 0x0005, lo: 0x07},\n\t{value: 0x8132, lo: 0x80, hi: 0x80},\n\t{value: 0x8132, lo: 0x81, hi: 0x81},\n\t{value: 0x812d, lo: 0x82, hi: 0x83},\n\t{value: 0x812d, lo: 0x84, hi: 0x85},\n\t{value: 0x812d, lo: 0x86, hi: 0x87},\n\t{value: 0x812d, lo: 0x88, hi: 0x89},\n\t{value: 0x8132, lo: 0x8a, hi: 0x8a},\n\t// Block 0xc, offset 0x5e\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x8132, lo: 0xab, hi: 0xb1},\n\t{value: 0x812d, lo: 0xb2, hi: 0xb2},\n\t{value: 0x8132, lo: 0xb3, hi: 0xb3},\n\t{value: 0x812d, lo: 0xbd, hi: 0xbd},\n\t// Block 0xd, offset 0x63\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x8132, lo: 0x96, hi: 0x99},\n\t{value: 0x8132, lo: 0x9b, hi: 0xa3},\n\t{value: 0x8132, lo: 0xa5, hi: 0xa7},\n\t{value: 0x8132, lo: 0xa9, hi: 0xad},\n\t// Block 0xe, offset 0x68\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x812d, lo: 0x99, hi: 0x9b},\n\t// Block 0xf, offset 0x6a\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0xa000, lo: 0xa8, hi: 0xa8},\n\t{value: 0x3ed8, lo: 0xa9, hi: 0xa9},\n\t{value: 0xa000, lo: 0xb0, hi: 0xb0},\n\t{value: 0x3ee0, lo: 0xb1, hi: 0xb1},\n\t{value: 0xa000, lo: 0xb3, hi: 0xb3},\n\t{value: 0x3ee8, lo: 0xb4, hi: 0xb4},\n\t{value: 0x9902, lo: 0xbc, hi: 0xbc},\n\t// Block 0x10, offset 0x72\n\t{value: 0x0008, lo: 0x06},\n\t{value: 0x8104, lo: 0x8d, hi: 0x8d},\n\t{value: 0x8132, lo: 0x91, hi: 0x91},\n\t{value: 0x812d, lo: 0x92, hi: 0x92},\n\t{value: 0x8132, lo: 0x93, hi: 0x93},\n\t{value: 0x8132, lo: 0x94, hi: 0x94},\n\t{value: 0x451c, lo: 0x98, hi: 0x9f},\n\t// Block 0x11, offset 0x79\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8102, lo: 0xbc, hi: 0xbc},\n\t{value: 0x9900, lo: 0xbe, hi: 0xbe},\n\t// Block 0x12, offset 0x7c\n\t{value: 0x0008, lo: 0x07},\n\t{value: 0xa000, lo: 0x87, hi: 0x87},\n\t{value: 0x2c9e, lo: 0x8b, hi: 0x8c},\n\t{value: 0x8104, lo: 0x8d, hi: 0x8d},\n\t{value: 0x9900, lo: 0x97, hi: 0x97},\n\t{value: 0x455c, lo: 0x9c, hi: 0x9d},\n\t{value: 0x456c, lo: 0x9f, hi: 0x9f},\n\t{value: 0x8132, lo: 0xbe, hi: 0xbe},\n\t// Block 0x13, offset 0x84\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x4594, lo: 0xb3, hi: 0xb3},\n\t{value: 0x459c, lo: 0xb6, hi: 0xb6},\n\t{value: 0x8102, lo: 0xbc, hi: 0xbc},\n\t// Block 0x14, offset 0x88\n\t{value: 0x0008, lo: 0x03},\n\t{value: 0x8104, lo: 0x8d, hi: 0x8d},\n\t{value: 0x4574, lo: 0x99, hi: 0x9b},\n\t{value: 0x458c, lo: 0x9e, hi: 0x9e},\n\t// Block 0x15, offset 0x8c\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8102, lo: 0xbc, hi: 0xbc},\n\t// Block 0x16, offset 0x8e\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0x8d, hi: 0x8d},\n\t// Block 0x17, offset 0x90\n\t{value: 0x0000, lo: 0x08},\n\t{value: 0xa000, lo: 0x87, hi: 0x87},\n\t{value: 0x2cb6, lo: 0x88, hi: 0x88},\n\t{value: 0x2cae, lo: 0x8b, hi: 0x8b},\n\t{value: 0x2cbe, lo: 0x8c, hi: 0x8c},\n\t{value: 0x8104, lo: 0x8d, hi: 0x8d},\n\t{value: 0x9900, lo: 0x96, hi: 0x97},\n\t{value: 0x45a4, lo: 0x9c, hi: 0x9c},\n\t{value: 0x45ac, lo: 0x9d, hi: 0x9d},\n\t// Block 0x18, offset 0x99\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0xa000, lo: 0x92, hi: 0x92},\n\t{value: 0x2cc6, lo: 0x94, hi: 0x94},\n\t{value: 0x9900, lo: 0xbe, hi: 0xbe},\n\t// Block 0x19, offset 0x9d\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0xa000, lo: 0x86, hi: 0x87},\n\t{value: 0x2cce, lo: 0x8a, hi: 0x8a},\n\t{value: 0x2cde, lo: 0x8b, hi: 0x8b},\n\t{value: 0x2cd6, lo: 0x8c, hi: 0x8c},\n\t{value: 0x8104, lo: 0x8d, hi: 0x8d},\n\t{value: 0x9900, lo: 0x97, hi: 0x97},\n\t// Block 0x1a, offset 0xa4\n\t{value: 0x1801, lo: 0x04},\n\t{value: 0xa000, lo: 0x86, hi: 0x86},\n\t{value: 0x3ef0, lo: 0x88, hi: 0x88},\n\t{value: 0x8104, lo: 0x8d, hi: 0x8d},\n\t{value: 0x8120, lo: 0x95, hi: 0x96},\n\t// Block 0x1b, offset 0xa9\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8102, lo: 0xbc, hi: 0xbc},\n\t{value: 0xa000, lo: 0xbf, hi: 0xbf},\n\t// Block 0x1c, offset 0xac\n\t{value: 0x0000, lo: 0x09},\n\t{value: 0x2ce6, lo: 0x80, hi: 0x80},\n\t{value: 0x9900, lo: 0x82, hi: 0x82},\n\t{value: 0xa000, lo: 0x86, hi: 0x86},\n\t{value: 0x2cee, lo: 0x87, hi: 0x87},\n\t{value: 0x2cf6, lo: 0x88, hi: 0x88},\n\t{value: 0x2f50, lo: 0x8a, hi: 0x8a},\n\t{value: 0x2dd8, lo: 0x8b, hi: 0x8b},\n\t{value: 0x8104, lo: 0x8d, hi: 0x8d},\n\t{value: 0x9900, lo: 0x95, hi: 0x96},\n\t// Block 0x1d, offset 0xb6\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8104, lo: 0xbb, hi: 0xbc},\n\t{value: 0x9900, lo: 0xbe, hi: 0xbe},\n\t// Block 0x1e, offset 0xb9\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0xa000, lo: 0x86, hi: 0x87},\n\t{value: 0x2cfe, lo: 0x8a, hi: 0x8a},\n\t{value: 0x2d0e, lo: 0x8b, hi: 0x8b},\n\t{value: 0x2d06, lo: 0x8c, hi: 0x8c},\n\t{value: 0x8104, lo: 0x8d, hi: 0x8d},\n\t{value: 0x9900, lo: 0x97, hi: 0x97},\n\t// Block 0x1f, offset 0xc0\n\t{value: 0x6bea, lo: 0x07},\n\t{value: 0x9904, lo: 0x8a, hi: 0x8a},\n\t{value: 0x9900, lo: 0x8f, hi: 0x8f},\n\t{value: 0xa000, lo: 0x99, hi: 0x99},\n\t{value: 0x3ef8, lo: 0x9a, hi: 0x9a},\n\t{value: 0x2f58, lo: 0x9c, hi: 0x9c},\n\t{value: 0x2de3, lo: 0x9d, hi: 0x9d},\n\t{value: 0x2d16, lo: 0x9e, hi: 0x9f},\n\t// Block 0x20, offset 0xc8\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8122, lo: 0xb8, hi: 0xb9},\n\t{value: 0x8104, lo: 0xba, hi: 0xba},\n\t// Block 0x21, offset 0xcb\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8123, lo: 0x88, hi: 0x8b},\n\t// Block 0x22, offset 0xcd\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8124, lo: 0xb8, hi: 0xb9},\n\t// Block 0x23, offset 0xcf\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8125, lo: 0x88, hi: 0x8b},\n\t// Block 0x24, offset 0xd1\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x812d, lo: 0x98, hi: 0x99},\n\t{value: 0x812d, lo: 0xb5, hi: 0xb5},\n\t{value: 0x812d, lo: 0xb7, hi: 0xb7},\n\t{value: 0x812b, lo: 0xb9, hi: 0xb9},\n\t// Block 0x25, offset 0xd6\n\t{value: 0x0000, lo: 0x10},\n\t{value: 0x2644, lo: 0x83, hi: 0x83},\n\t{value: 0x264b, lo: 0x8d, hi: 0x8d},\n\t{value: 0x2652, lo: 0x92, hi: 0x92},\n\t{value: 0x2659, lo: 0x97, hi: 0x97},\n\t{value: 0x2660, lo: 0x9c, hi: 0x9c},\n\t{value: 0x263d, lo: 0xa9, hi: 0xa9},\n\t{value: 0x8126, lo: 0xb1, hi: 0xb1},\n\t{value: 0x8127, lo: 0xb2, hi: 0xb2},\n\t{value: 0x4a84, lo: 0xb3, hi: 0xb3},\n\t{value: 0x8128, lo: 0xb4, hi: 0xb4},\n\t{value: 0x4a8d, lo: 0xb5, hi: 0xb5},\n\t{value: 0x45b4, lo: 0xb6, hi: 0xb6},\n\t{value: 0x8200, lo: 0xb7, hi: 0xb7},\n\t{value: 0x45bc, lo: 0xb8, hi: 0xb8},\n\t{value: 0x8200, lo: 0xb9, hi: 0xb9},\n\t{value: 0x8127, lo: 0xba, hi: 0xbd},\n\t// Block 0x26, offset 0xe7\n\t{value: 0x0000, lo: 0x0b},\n\t{value: 0x8127, lo: 0x80, hi: 0x80},\n\t{value: 0x4a96, lo: 0x81, hi: 0x81},\n\t{value: 0x8132, lo: 0x82, hi: 0x83},\n\t{value: 0x8104, lo: 0x84, hi: 0x84},\n\t{value: 0x8132, lo: 0x86, hi: 0x87},\n\t{value: 0x266e, lo: 0x93, hi: 0x93},\n\t{value: 0x2675, lo: 0x9d, hi: 0x9d},\n\t{value: 0x267c, lo: 0xa2, hi: 0xa2},\n\t{value: 0x2683, lo: 0xa7, hi: 0xa7},\n\t{value: 0x268a, lo: 0xac, hi: 0xac},\n\t{value: 0x2667, lo: 0xb9, hi: 0xb9},\n\t// Block 0x27, offset 0xf3\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x812d, lo: 0x86, hi: 0x86},\n\t// Block 0x28, offset 0xf5\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0xa000, lo: 0xa5, hi: 0xa5},\n\t{value: 0x2d1e, lo: 0xa6, hi: 0xa6},\n\t{value: 0x9900, lo: 0xae, hi: 0xae},\n\t{value: 0x8102, lo: 0xb7, hi: 0xb7},\n\t{value: 0x8104, lo: 0xb9, hi: 0xba},\n\t// Block 0x29, offset 0xfb\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x812d, lo: 0x8d, hi: 0x8d},\n\t// Block 0x2a, offset 0xfd\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0xa000, lo: 0x80, hi: 0x92},\n\t// Block 0x2b, offset 0xff\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0xb900, lo: 0xa1, hi: 0xb5},\n\t// Block 0x2c, offset 0x101\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x9900, lo: 0xa8, hi: 0xbf},\n\t// Block 0x2d, offset 0x103\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x9900, lo: 0x80, hi: 0x82},\n\t// Block 0x2e, offset 0x105\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8132, lo: 0x9d, hi: 0x9f},\n\t// Block 0x2f, offset 0x107\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8104, lo: 0x94, hi: 0x94},\n\t{value: 0x8104, lo: 0xb4, hi: 0xb4},\n\t// Block 0x30, offset 0x10a\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8104, lo: 0x92, hi: 0x92},\n\t{value: 0x8132, lo: 0x9d, hi: 0x9d},\n\t// Block 0x31, offset 0x10d\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8131, lo: 0xa9, hi: 0xa9},\n\t// Block 0x32, offset 0x10f\n\t{value: 0x0004, lo: 0x02},\n\t{value: 0x812e, lo: 0xb9, hi: 0xba},\n\t{value: 0x812d, lo: 0xbb, hi: 0xbb},\n\t// Block 0x33, offset 0x112\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8132, lo: 0x97, hi: 0x97},\n\t{value: 0x812d, lo: 0x98, hi: 0x98},\n\t// Block 0x34, offset 0x115\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x8104, lo: 0xa0, hi: 0xa0},\n\t{value: 0x8132, lo: 0xb5, hi: 0xbc},\n\t{value: 0x812d, lo: 0xbf, hi: 0xbf},\n\t// Block 0x35, offset 0x119\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x8132, lo: 0xb0, hi: 0xb4},\n\t{value: 0x812d, lo: 0xb5, hi: 0xba},\n\t{value: 0x8132, lo: 0xbb, hi: 0xbc},\n\t{value: 0x812d, lo: 0xbd, hi: 0xbd},\n\t// Block 0x36, offset 0x11e\n\t{value: 0x0000, lo: 0x08},\n\t{value: 0x2d66, lo: 0x80, hi: 0x80},\n\t{value: 0x2d6e, lo: 0x81, hi: 0x81},\n\t{value: 0xa000, lo: 0x82, hi: 0x82},\n\t{value: 0x2d76, lo: 0x83, hi: 0x83},\n\t{value: 0x8104, lo: 0x84, hi: 0x84},\n\t{value: 0x8132, lo: 0xab, hi: 0xab},\n\t{value: 0x812d, lo: 0xac, hi: 0xac},\n\t{value: 0x8132, lo: 0xad, hi: 0xb3},\n\t// Block 0x37, offset 0x127\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0xaa, hi: 0xab},\n\t// Block 0x38, offset 0x129\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8102, lo: 0xa6, hi: 0xa6},\n\t{value: 0x8104, lo: 0xb2, hi: 0xb3},\n\t// Block 0x39, offset 0x12c\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8102, lo: 0xb7, hi: 0xb7},\n\t// Block 0x3a, offset 0x12e\n\t{value: 0x0000, lo: 0x0a},\n\t{value: 0x8132, lo: 0x90, hi: 0x92},\n\t{value: 0x8101, lo: 0x94, hi: 0x94},\n\t{value: 0x812d, lo: 0x95, hi: 0x99},\n\t{value: 0x8132, lo: 0x9a, hi: 0x9b},\n\t{value: 0x812d, lo: 0x9c, hi: 0x9f},\n\t{value: 0x8132, lo: 0xa0, hi: 0xa0},\n\t{value: 0x8101, lo: 0xa2, hi: 0xa8},\n\t{value: 0x812d, lo: 0xad, hi: 0xad},\n\t{value: 0x8132, lo: 0xb4, hi: 0xb4},\n\t{value: 0x8132, lo: 0xb8, hi: 0xb9},\n\t// Block 0x3b, offset 0x139\n\t{value: 0x0004, lo: 0x03},\n\t{value: 0x0433, lo: 0x80, hi: 0x81},\n\t{value: 0x8100, lo: 0x97, hi: 0x97},\n\t{value: 0x8100, lo: 0xbe, hi: 0xbe},\n\t// Block 0x3c, offset 0x13d\n\t{value: 0x0000, lo: 0x0d},\n\t{value: 0x8132, lo: 0x90, hi: 0x91},\n\t{value: 0x8101, lo: 0x92, hi: 0x93},\n\t{value: 0x8132, lo: 0x94, hi: 0x97},\n\t{value: 0x8101, lo: 0x98, hi: 0x9a},\n\t{value: 0x8132, lo: 0x9b, hi: 0x9c},\n\t{value: 0x8132, lo: 0xa1, hi: 0xa1},\n\t{value: 0x8101, lo: 0xa5, hi: 0xa6},\n\t{value: 0x8132, lo: 0xa7, hi: 0xa7},\n\t{value: 0x812d, lo: 0xa8, hi: 0xa8},\n\t{value: 0x8132, lo: 0xa9, hi: 0xa9},\n\t{value: 0x8101, lo: 0xaa, hi: 0xab},\n\t{value: 0x812d, lo: 0xac, hi: 0xaf},\n\t{value: 0x8132, lo: 0xb0, hi: 0xb0},\n\t// Block 0x3d, offset 0x14b\n\t{value: 0x427b, lo: 0x02},\n\t{value: 0x01b8, lo: 0xa6, hi: 0xa6},\n\t{value: 0x0057, lo: 0xaa, hi: 0xab},\n\t// Block 0x3e, offset 0x14e\n\t{value: 0x0007, lo: 0x05},\n\t{value: 0xa000, lo: 0x90, hi: 0x90},\n\t{value: 0xa000, lo: 0x92, hi: 0x92},\n\t{value: 0xa000, lo: 0x94, hi: 0x94},\n\t{value: 0x3bb9, lo: 0x9a, hi: 0x9b},\n\t{value: 0x3bc7, lo: 0xae, hi: 0xae},\n\t// Block 0x3f, offset 0x154\n\t{value: 0x000e, lo: 0x05},\n\t{value: 0x3bce, lo: 0x8d, hi: 0x8e},\n\t{value: 0x3bd5, lo: 0x8f, hi: 0x8f},\n\t{value: 0xa000, lo: 0x90, hi: 0x90},\n\t{value: 0xa000, lo: 0x92, hi: 0x92},\n\t{value: 0xa000, lo: 0x94, hi: 0x94},\n\t// Block 0x40, offset 0x15a\n\t{value: 0x6408, lo: 0x0a},\n\t{value: 0xa000, lo: 0x83, hi: 0x83},\n\t{value: 0x3be3, lo: 0x84, hi: 0x84},\n\t{value: 0xa000, lo: 0x88, hi: 0x88},\n\t{value: 0x3bea, lo: 0x89, hi: 0x89},\n\t{value: 0xa000, lo: 0x8b, hi: 0x8b},\n\t{value: 0x3bf1, lo: 0x8c, hi: 0x8c},\n\t{value: 0xa000, lo: 0xa3, hi: 0xa3},\n\t{value: 0x3bf8, lo: 0xa4, hi: 0xa5},\n\t{value: 0x3bff, lo: 0xa6, hi: 0xa6},\n\t{value: 0xa000, lo: 0xbc, hi: 0xbc},\n\t// Block 0x41, offset 0x165\n\t{value: 0x0007, lo: 0x03},\n\t{value: 0x3c68, lo: 0xa0, hi: 0xa1},\n\t{value: 0x3c92, lo: 0xa2, hi: 0xa3},\n\t{value: 0x3cbc, lo: 0xaa, hi: 0xad},\n\t// Block 0x42, offset 0x169\n\t{value: 0x0004, lo: 0x01},\n\t{value: 0x048b, lo: 0xa9, hi: 0xaa},\n\t// Block 0x43, offset 0x16b\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x44dd, lo: 0x9c, hi: 0x9c},\n\t// Block 0x44, offset 0x16d\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8132, lo: 0xaf, hi: 0xb1},\n\t// Block 0x45, offset 0x16f\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0xbf, hi: 0xbf},\n\t// Block 0x46, offset 0x171\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8132, lo: 0xa0, hi: 0xbf},\n\t// Block 0x47, offset 0x173\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x812c, lo: 0xaa, hi: 0xaa},\n\t{value: 0x8131, lo: 0xab, hi: 0xab},\n\t{value: 0x8133, lo: 0xac, hi: 0xac},\n\t{value: 0x812e, lo: 0xad, hi: 0xad},\n\t{value: 0x812f, lo: 0xae, hi: 0xaf},\n\t// Block 0x48, offset 0x179\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x4a9f, lo: 0xb3, hi: 0xb3},\n\t{value: 0x4a9f, lo: 0xb5, hi: 0xb6},\n\t{value: 0x4a9f, lo: 0xba, hi: 0xbf},\n\t// Block 0x49, offset 0x17d\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x4a9f, lo: 0x8f, hi: 0xa3},\n\t// Block 0x4a, offset 0x17f\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8100, lo: 0xae, hi: 0xbe},\n\t// Block 0x4b, offset 0x181\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0x8100, lo: 0x84, hi: 0x84},\n\t{value: 0x8100, lo: 0x87, hi: 0x87},\n\t{value: 0x8100, lo: 0x90, hi: 0x90},\n\t{value: 0x8100, lo: 0x9e, hi: 0x9e},\n\t{value: 0x8100, lo: 0xa1, hi: 0xa1},\n\t{value: 0x8100, lo: 0xb2, hi: 0xb2},\n\t{value: 0x8100, lo: 0xbb, hi: 0xbb},\n\t// Block 0x4c, offset 0x189\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x8100, lo: 0x80, hi: 0x80},\n\t{value: 0x8100, lo: 0x8b, hi: 0x8b},\n\t{value: 0x8100, lo: 0x8e, hi: 0x8e},\n\t// Block 0x4d, offset 0x18d\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8132, lo: 0xaf, hi: 0xaf},\n\t{value: 0x8132, lo: 0xb4, hi: 0xbd},\n\t// Block 0x4e, offset 0x190\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8132, lo: 0x9e, hi: 0x9f},\n\t// Block 0x4f, offset 0x192\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8132, lo: 0xb0, hi: 0xb1},\n\t// Block 0x50, offset 0x194\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0x86, hi: 0x86},\n\t// Block 0x51, offset 0x196\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8104, lo: 0x84, hi: 0x84},\n\t{value: 0x8132, lo: 0xa0, hi: 0xb1},\n\t// Block 0x52, offset 0x199\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x812d, lo: 0xab, hi: 0xad},\n\t// Block 0x53, offset 0x19b\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0x93, hi: 0x93},\n\t// Block 0x54, offset 0x19d\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8102, lo: 0xb3, hi: 0xb3},\n\t// Block 0x55, offset 0x19f\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0x80, hi: 0x80},\n\t// Block 0x56, offset 0x1a1\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x8132, lo: 0xb0, hi: 0xb0},\n\t{value: 0x8132, lo: 0xb2, hi: 0xb3},\n\t{value: 0x812d, lo: 0xb4, hi: 0xb4},\n\t{value: 0x8132, lo: 0xb7, hi: 0xb8},\n\t{value: 0x8132, lo: 0xbe, hi: 0xbf},\n\t// Block 0x57, offset 0x1a7\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8132, lo: 0x81, hi: 0x81},\n\t{value: 0x8104, lo: 0xb6, hi: 0xb6},\n\t// Block 0x58, offset 0x1aa\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0xad, hi: 0xad},\n\t// Block 0x59, offset 0x1ac\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0xe500, lo: 0x80, hi: 0x80},\n\t{value: 0xc600, lo: 0x81, hi: 0x9b},\n\t{value: 0xe500, lo: 0x9c, hi: 0x9c},\n\t{value: 0xc600, lo: 0x9d, hi: 0xb7},\n\t{value: 0xe500, lo: 0xb8, hi: 0xb8},\n\t{value: 0xc600, lo: 0xb9, hi: 0xbf},\n\t// Block 0x5a, offset 0x1b3\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0xc600, lo: 0x80, hi: 0x93},\n\t{value: 0xe500, lo: 0x94, hi: 0x94},\n\t{value: 0xc600, lo: 0x95, hi: 0xaf},\n\t{value: 0xe500, lo: 0xb0, hi: 0xb0},\n\t{value: 0xc600, lo: 0xb1, hi: 0xbf},\n\t// Block 0x5b, offset 0x1b9\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0xc600, lo: 0x80, hi: 0x8b},\n\t{value: 0xe500, lo: 0x8c, hi: 0x8c},\n\t{value: 0xc600, lo: 0x8d, hi: 0xa7},\n\t{value: 0xe500, lo: 0xa8, hi: 0xa8},\n\t{value: 0xc600, lo: 0xa9, hi: 0xbf},\n\t// Block 0x5c, offset 0x1bf\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0xc600, lo: 0x80, hi: 0x83},\n\t{value: 0xe500, lo: 0x84, hi: 0x84},\n\t{value: 0xc600, lo: 0x85, hi: 0x9f},\n\t{value: 0xe500, lo: 0xa0, hi: 0xa0},\n\t{value: 0xc600, lo: 0xa1, hi: 0xbb},\n\t{value: 0xe500, lo: 0xbc, hi: 0xbc},\n\t{value: 0xc600, lo: 0xbd, hi: 0xbf},\n\t// Block 0x5d, offset 0x1c7\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0xc600, lo: 0x80, hi: 0x97},\n\t{value: 0xe500, lo: 0x98, hi: 0x98},\n\t{value: 0xc600, lo: 0x99, hi: 0xb3},\n\t{value: 0xe500, lo: 0xb4, hi: 0xb4},\n\t{value: 0xc600, lo: 0xb5, hi: 0xbf},\n\t// Block 0x5e, offset 0x1cd\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0xc600, lo: 0x80, hi: 0x8f},\n\t{value: 0xe500, lo: 0x90, hi: 0x90},\n\t{value: 0xc600, lo: 0x91, hi: 0xab},\n\t{value: 0xe500, lo: 0xac, hi: 0xac},\n\t{value: 0xc600, lo: 0xad, hi: 0xbf},\n\t// Block 0x5f, offset 0x1d3\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0xc600, lo: 0x80, hi: 0x87},\n\t{value: 0xe500, lo: 0x88, hi: 0x88},\n\t{value: 0xc600, lo: 0x89, hi: 0xa3},\n\t{value: 0xe500, lo: 0xa4, hi: 0xa4},\n\t{value: 0xc600, lo: 0xa5, hi: 0xbf},\n\t// Block 0x60, offset 0x1d9\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0xc600, lo: 0x80, hi: 0x87},\n\t{value: 0xe500, lo: 0x88, hi: 0x88},\n\t{value: 0xc600, lo: 0x89, hi: 0xa3},\n\t// Block 0x61, offset 0x1dd\n\t{value: 0x0006, lo: 0x0d},\n\t{value: 0x4390, lo: 0x9d, hi: 0x9d},\n\t{value: 0x8115, lo: 0x9e, hi: 0x9e},\n\t{value: 0x4402, lo: 0x9f, hi: 0x9f},\n\t{value: 0x43f0, lo: 0xaa, hi: 0xab},\n\t{value: 0x44f4, lo: 0xac, hi: 0xac},\n\t{value: 0x44fc, lo: 0xad, hi: 0xad},\n\t{value: 0x4348, lo: 0xae, hi: 0xb1},\n\t{value: 0x4366, lo: 0xb2, hi: 0xb4},\n\t{value: 0x437e, lo: 0xb5, hi: 0xb6},\n\t{value: 0x438a, lo: 0xb8, hi: 0xb8},\n\t{value: 0x4396, lo: 0xb9, hi: 0xbb},\n\t{value: 0x43ae, lo: 0xbc, hi: 0xbc},\n\t{value: 0x43b4, lo: 0xbe, hi: 0xbe},\n\t// Block 0x62, offset 0x1eb\n\t{value: 0x0006, lo: 0x08},\n\t{value: 0x43ba, lo: 0x80, hi: 0x81},\n\t{value: 0x43c6, lo: 0x83, hi: 0x84},\n\t{value: 0x43d8, lo: 0x86, hi: 0x89},\n\t{value: 0x43fc, lo: 0x8a, hi: 0x8a},\n\t{value: 0x4378, lo: 0x8b, hi: 0x8b},\n\t{value: 0x4360, lo: 0x8c, hi: 0x8c},\n\t{value: 0x43a8, lo: 0x8d, hi: 0x8d},\n\t{value: 0x43d2, lo: 0x8e, hi: 0x8e},\n\t// Block 0x63, offset 0x1f4\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8100, lo: 0xa4, hi: 0xa5},\n\t{value: 0x8100, lo: 0xb0, hi: 0xb1},\n\t// Block 0x64, offset 0x1f7\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8100, lo: 0x9b, hi: 0x9d},\n\t{value: 0x8200, lo: 0x9e, hi: 0xa3},\n\t// Block 0x65, offset 0x1fa\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8100, lo: 0x90, hi: 0x90},\n\t// Block 0x66, offset 0x1fc\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8100, lo: 0x99, hi: 0x99},\n\t{value: 0x8200, lo: 0xb2, hi: 0xb4},\n\t// Block 0x67, offset 0x1ff\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8100, lo: 0xbc, hi: 0xbd},\n\t// Block 0x68, offset 0x201\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x8132, lo: 0xa0, hi: 0xa6},\n\t{value: 0x812d, lo: 0xa7, hi: 0xad},\n\t{value: 0x8132, lo: 0xae, hi: 0xaf},\n\t// Block 0x69, offset 0x205\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x8100, lo: 0x89, hi: 0x8c},\n\t{value: 0x8100, lo: 0xb0, hi: 0xb2},\n\t{value: 0x8100, lo: 0xb4, hi: 0xb4},\n\t{value: 0x8100, lo: 0xb6, hi: 0xbf},\n\t// Block 0x6a, offset 0x20a\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8100, lo: 0x81, hi: 0x8c},\n\t// Block 0x6b, offset 0x20c\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8100, lo: 0xb5, hi: 0xba},\n\t// Block 0x6c, offset 0x20e\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x4a9f, lo: 0x9e, hi: 0x9f},\n\t{value: 0x4a9f, lo: 0xa3, hi: 0xa3},\n\t{value: 0x4a9f, lo: 0xa5, hi: 0xa6},\n\t{value: 0x4a9f, lo: 0xaa, hi: 0xaf},\n\t// Block 0x6d, offset 0x213\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x4a9f, lo: 0x82, hi: 0x87},\n\t{value: 0x4a9f, lo: 0x8a, hi: 0x8f},\n\t{value: 0x4a9f, lo: 0x92, hi: 0x97},\n\t{value: 0x4a9f, lo: 0x9a, hi: 0x9c},\n\t{value: 0x8100, lo: 0xa3, hi: 0xa3},\n\t// Block 0x6e, offset 0x219\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x812d, lo: 0xbd, hi: 0xbd},\n\t// Block 0x6f, offset 0x21b\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x812d, lo: 0xa0, hi: 0xa0},\n\t// Block 0x70, offset 0x21d\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8132, lo: 0xb6, hi: 0xba},\n\t// Block 0x71, offset 0x21f\n\t{value: 0x002c, lo: 0x05},\n\t{value: 0x812d, lo: 0x8d, hi: 0x8d},\n\t{value: 0x8132, lo: 0x8f, hi: 0x8f},\n\t{value: 0x8132, lo: 0xb8, hi: 0xb8},\n\t{value: 0x8101, lo: 0xb9, hi: 0xba},\n\t{value: 0x8104, lo: 0xbf, hi: 0xbf},\n\t// Block 0x72, offset 0x225\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8132, lo: 0xa5, hi: 0xa5},\n\t{value: 0x812d, lo: 0xa6, hi: 0xa6},\n\t// Block 0x73, offset 0x228\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8132, lo: 0xa4, hi: 0xa7},\n\t// Block 0x74, offset 0x22a\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x812d, lo: 0x86, hi: 0x87},\n\t{value: 0x8132, lo: 0x88, hi: 0x8a},\n\t{value: 0x812d, lo: 0x8b, hi: 0x8b},\n\t{value: 0x8132, lo: 0x8c, hi: 0x8c},\n\t{value: 0x812d, lo: 0x8d, hi: 0x90},\n\t// Block 0x75, offset 0x230\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8104, lo: 0x86, hi: 0x86},\n\t{value: 0x8104, lo: 0xbf, hi: 0xbf},\n\t// Block 0x76, offset 0x233\n\t{value: 0x17fe, lo: 0x07},\n\t{value: 0xa000, lo: 0x99, hi: 0x99},\n\t{value: 0x4238, lo: 0x9a, hi: 0x9a},\n\t{value: 0xa000, lo: 0x9b, hi: 0x9b},\n\t{value: 0x4242, lo: 0x9c, hi: 0x9c},\n\t{value: 0xa000, lo: 0xa5, hi: 0xa5},\n\t{value: 0x424c, lo: 0xab, hi: 0xab},\n\t{value: 0x8104, lo: 0xb9, hi: 0xba},\n\t// Block 0x77, offset 0x23b\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0x8132, lo: 0x80, hi: 0x82},\n\t{value: 0x9900, lo: 0xa7, hi: 0xa7},\n\t{value: 0x2d7e, lo: 0xae, hi: 0xae},\n\t{value: 0x2d88, lo: 0xaf, hi: 0xaf},\n\t{value: 0xa000, lo: 0xb1, hi: 0xb2},\n\t{value: 0x8104, lo: 0xb3, hi: 0xb4},\n\t// Block 0x78, offset 0x242\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8104, lo: 0x80, hi: 0x80},\n\t{value: 0x8102, lo: 0x8a, hi: 0x8a},\n\t// Block 0x79, offset 0x245\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8104, lo: 0xb5, hi: 0xb5},\n\t{value: 0x8102, lo: 0xb6, hi: 0xb6},\n\t// Block 0x7a, offset 0x248\n\t{value: 0x0002, lo: 0x01},\n\t{value: 0x8102, lo: 0xa9, hi: 0xaa},\n\t// Block 0x7b, offset 0x24a\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8102, lo: 0xbb, hi: 0xbc},\n\t{value: 0x9900, lo: 0xbe, hi: 0xbe},\n\t// Block 0x7c, offset 0x24d\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0xa000, lo: 0x87, hi: 0x87},\n\t{value: 0x2d92, lo: 0x8b, hi: 0x8b},\n\t{value: 0x2d9c, lo: 0x8c, hi: 0x8c},\n\t{value: 0x8104, lo: 0x8d, hi: 0x8d},\n\t{value: 0x9900, lo: 0x97, hi: 0x97},\n\t{value: 0x8132, lo: 0xa6, hi: 0xac},\n\t{value: 0x8132, lo: 0xb0, hi: 0xb4},\n\t// Block 0x7d, offset 0x255\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x8104, lo: 0x82, hi: 0x82},\n\t{value: 0x8102, lo: 0x86, hi: 0x86},\n\t{value: 0x8132, lo: 0x9e, hi: 0x9e},\n\t// Block 0x7e, offset 0x259\n\t{value: 0x6b5a, lo: 0x06},\n\t{value: 0x9900, lo: 0xb0, hi: 0xb0},\n\t{value: 0xa000, lo: 0xb9, hi: 0xb9},\n\t{value: 0x9900, lo: 0xba, hi: 0xba},\n\t{value: 0x2db0, lo: 0xbb, hi: 0xbb},\n\t{value: 0x2da6, lo: 0xbc, hi: 0xbd},\n\t{value: 0x2dba, lo: 0xbe, hi: 0xbe},\n\t// Block 0x7f, offset 0x260\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8104, lo: 0x82, hi: 0x82},\n\t{value: 0x8102, lo: 0x83, hi: 0x83},\n\t// Block 0x80, offset 0x263\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x9900, lo: 0xaf, hi: 0xaf},\n\t{value: 0xa000, lo: 0xb8, hi: 0xb9},\n\t{value: 0x2dc4, lo: 0xba, hi: 0xba},\n\t{value: 0x2dce, lo: 0xbb, hi: 0xbb},\n\t{value: 0x8104, lo: 0xbf, hi: 0xbf},\n\t// Block 0x81, offset 0x269\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8102, lo: 0x80, hi: 0x80},\n\t// Block 0x82, offset 0x26b\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8104, lo: 0xb6, hi: 0xb6},\n\t{value: 0x8102, lo: 0xb7, hi: 0xb7},\n\t// Block 0x83, offset 0x26e\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0xab, hi: 0xab},\n\t// Block 0x84, offset 0x270\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8104, lo: 0xb9, hi: 0xb9},\n\t{value: 0x8102, lo: 0xba, hi: 0xba},\n\t// Block 0x85, offset 0x273\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0xb4, hi: 0xb4},\n\t// Block 0x86, offset 0x275\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0x87, hi: 0x87},\n\t// Block 0x87, offset 0x277\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0x99, hi: 0x99},\n\t// Block 0x88, offset 0x279\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8102, lo: 0x82, hi: 0x82},\n\t{value: 0x8104, lo: 0x84, hi: 0x85},\n\t// Block 0x89, offset 0x27c\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0x97, hi: 0x97},\n\t// Block 0x8a, offset 0x27e\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8101, lo: 0xb0, hi: 0xb4},\n\t// Block 0x8b, offset 0x280\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8132, lo: 0xb0, hi: 0xb6},\n\t// Block 0x8c, offset 0x282\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8101, lo: 0x9e, hi: 0x9e},\n\t// Block 0x8d, offset 0x284\n\t{value: 0x0000, lo: 0x0c},\n\t{value: 0x45cc, lo: 0x9e, hi: 0x9e},\n\t{value: 0x45d6, lo: 0x9f, hi: 0x9f},\n\t{value: 0x460a, lo: 0xa0, hi: 0xa0},\n\t{value: 0x4618, lo: 0xa1, hi: 0xa1},\n\t{value: 0x4626, lo: 0xa2, hi: 0xa2},\n\t{value: 0x4634, lo: 0xa3, hi: 0xa3},\n\t{value: 0x4642, lo: 0xa4, hi: 0xa4},\n\t{value: 0x812b, lo: 0xa5, hi: 0xa6},\n\t{value: 0x8101, lo: 0xa7, hi: 0xa9},\n\t{value: 0x8130, lo: 0xad, hi: 0xad},\n\t{value: 0x812b, lo: 0xae, hi: 0xb2},\n\t{value: 0x812d, lo: 0xbb, hi: 0xbf},\n\t// Block 0x8e, offset 0x291\n\t{value: 0x0000, lo: 0x09},\n\t{value: 0x812d, lo: 0x80, hi: 0x82},\n\t{value: 0x8132, lo: 0x85, hi: 0x89},\n\t{value: 0x812d, lo: 0x8a, hi: 0x8b},\n\t{value: 0x8132, lo: 0xaa, hi: 0xad},\n\t{value: 0x45e0, lo: 0xbb, hi: 0xbb},\n\t{value: 0x45ea, lo: 0xbc, hi: 0xbc},\n\t{value: 0x4650, lo: 0xbd, hi: 0xbd},\n\t{value: 0x466c, lo: 0xbe, hi: 0xbe},\n\t{value: 0x465e, lo: 0xbf, hi: 0xbf},\n\t// Block 0x8f, offset 0x29b\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x467a, lo: 0x80, hi: 0x80},\n\t// Block 0x90, offset 0x29d\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8132, lo: 0x82, hi: 0x84},\n\t// Block 0x91, offset 0x29f\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x8132, lo: 0x80, hi: 0x86},\n\t{value: 0x8132, lo: 0x88, hi: 0x98},\n\t{value: 0x8132, lo: 0x9b, hi: 0xa1},\n\t{value: 0x8132, lo: 0xa3, hi: 0xa4},\n\t{value: 0x8132, lo: 0xa6, hi: 0xaa},\n\t// Block 0x92, offset 0x2a5\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x812d, lo: 0x90, hi: 0x96},\n\t// Block 0x93, offset 0x2a7\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8132, lo: 0x84, hi: 0x89},\n\t{value: 0x8102, lo: 0x8a, hi: 0x8a},\n\t// Block 0x94, offset 0x2aa\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8100, lo: 0x93, hi: 0x93},\n}\n\n// lookup returns the trie value for the first UTF-8 encoding in s and\n// the width in bytes of this encoding. The size will be 0 if s does not\n// hold enough bytes to complete the encoding. len(s) must be greater than 0.\nfunc (t *nfkcTrie) lookup(s []byte) (v uint16, sz int) {\n\tc0 := s[0]\n\tswitch {\n\tcase c0 < 0x80: // is ASCII\n\t\treturn nfkcValues[c0], 1\n\tcase c0 < 0xC2:\n\t\treturn 0, 1 // Illegal UTF-8: not a starter, not ASCII.\n\tcase c0 < 0xE0: // 2-byte UTF-8\n\t\tif len(s) < 2 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := nfkcIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c1), 2\n\tcase c0 < 0xF0: // 3-byte UTF-8\n\t\tif len(s) < 3 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := nfkcIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to := uint32(i)<<6 + uint32(c1)\n\t\ti = nfkcIndex[o]\n\t\tc2 := s[2]\n\t\tif c2 < 0x80 || 0xC0 <= c2 {\n\t\t\treturn 0, 2 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c2), 3\n\tcase c0 < 0xF8: // 4-byte UTF-8\n\t\tif len(s) < 4 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := nfkcIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to := uint32(i)<<6 + uint32(c1)\n\t\ti = nfkcIndex[o]\n\t\tc2 := s[2]\n\t\tif c2 < 0x80 || 0xC0 <= c2 {\n\t\t\treturn 0, 2 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to = uint32(i)<<6 + uint32(c2)\n\t\ti = nfkcIndex[o]\n\t\tc3 := s[3]\n\t\tif c3 < 0x80 || 0xC0 <= c3 {\n\t\t\treturn 0, 3 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c3), 4\n\t}\n\t// Illegal rune\n\treturn 0, 1\n}\n\n// lookupUnsafe returns the trie value for the first UTF-8 encoding in s.\n// s must start with a full and valid UTF-8 encoded rune.\nfunc (t *nfkcTrie) lookupUnsafe(s []byte) uint16 {\n\tc0 := s[0]\n\tif c0 < 0x80 { // is ASCII\n\t\treturn nfkcValues[c0]\n\t}\n\ti := nfkcIndex[c0]\n\tif c0 < 0xE0 { // 2-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[1])\n\t}\n\ti = nfkcIndex[uint32(i)<<6+uint32(s[1])]\n\tif c0 < 0xF0 { // 3-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[2])\n\t}\n\ti = nfkcIndex[uint32(i)<<6+uint32(s[2])]\n\tif c0 < 0xF8 { // 4-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[3])\n\t}\n\treturn 0\n}\n\n// lookupString returns the trie value for the first UTF-8 encoding in s and\n// the width in bytes of this encoding. The size will be 0 if s does not\n// hold enough bytes to complete the encoding. len(s) must be greater than 0.\nfunc (t *nfkcTrie) lookupString(s string) (v uint16, sz int) {\n\tc0 := s[0]\n\tswitch {\n\tcase c0 < 0x80: // is ASCII\n\t\treturn nfkcValues[c0], 1\n\tcase c0 < 0xC2:\n\t\treturn 0, 1 // Illegal UTF-8: not a starter, not ASCII.\n\tcase c0 < 0xE0: // 2-byte UTF-8\n\t\tif len(s) < 2 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := nfkcIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c1), 2\n\tcase c0 < 0xF0: // 3-byte UTF-8\n\t\tif len(s) < 3 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := nfkcIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to := uint32(i)<<6 + uint32(c1)\n\t\ti = nfkcIndex[o]\n\t\tc2 := s[2]\n\t\tif c2 < 0x80 || 0xC0 <= c2 {\n\t\t\treturn 0, 2 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c2), 3\n\tcase c0 < 0xF8: // 4-byte UTF-8\n\t\tif len(s) < 4 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := nfkcIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to := uint32(i)<<6 + uint32(c1)\n\t\ti = nfkcIndex[o]\n\t\tc2 := s[2]\n\t\tif c2 < 0x80 || 0xC0 <= c2 {\n\t\t\treturn 0, 2 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to = uint32(i)<<6 + uint32(c2)\n\t\ti = nfkcIndex[o]\n\t\tc3 := s[3]\n\t\tif c3 < 0x80 || 0xC0 <= c3 {\n\t\t\treturn 0, 3 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c3), 4\n\t}\n\t// Illegal rune\n\treturn 0, 1\n}\n\n// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s.\n// s must start with a full and valid UTF-8 encoded rune.\nfunc (t *nfkcTrie) lookupStringUnsafe(s string) uint16 {\n\tc0 := s[0]\n\tif c0 < 0x80 { // is ASCII\n\t\treturn nfkcValues[c0]\n\t}\n\ti := nfkcIndex[c0]\n\tif c0 < 0xE0 { // 2-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[1])\n\t}\n\ti = nfkcIndex[uint32(i)<<6+uint32(s[1])]\n\tif c0 < 0xF0 { // 3-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[2])\n\t}\n\ti = nfkcIndex[uint32(i)<<6+uint32(s[2])]\n\tif c0 < 0xF8 { // 4-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[3])\n\t}\n\treturn 0\n}\n\n// nfkcTrie. Total size: 17248 bytes (16.84 KiB). Checksum: 4fb368372b6b1b27.\ntype nfkcTrie struct{}\n\nfunc newNfkcTrie(i int) *nfkcTrie {\n\treturn &nfkcTrie{}\n}\n\n// lookupValue determines the type of block n and looks up the value for b.\nfunc (t *nfkcTrie) lookupValue(n uint32, b byte) uint16 {\n\tswitch {\n\tcase n < 92:\n\t\treturn uint16(nfkcValues[n<<6+uint32(b)])\n\tdefault:\n\t\tn -= 92\n\t\treturn uint16(nfkcSparse.lookup(n, b))\n\t}\n}\n\n// nfkcValues: 94 blocks, 6016 entries, 12032 bytes\n// The third block is the zero block.\nvar nfkcValues = [6016]uint16{\n\t// Block 0x0, offset 0x0\n\t0x3c: 0xa000, 0x3d: 0xa000, 0x3e: 0xa000,\n\t// Block 0x1, offset 0x40\n\t0x41: 0xa000, 0x42: 0xa000, 0x43: 0xa000, 0x44: 0xa000, 0x45: 0xa000,\n\t0x46: 0xa000, 0x47: 0xa000, 0x48: 0xa000, 0x49: 0xa000, 0x4a: 0xa000, 0x4b: 0xa000,\n\t0x4c: 0xa000, 0x4d: 0xa000, 0x4e: 0xa000, 0x4f: 0xa000, 0x50: 0xa000,\n\t0x52: 0xa000, 0x53: 0xa000, 0x54: 0xa000, 0x55: 0xa000, 0x56: 0xa000, 0x57: 0xa000,\n\t0x58: 0xa000, 0x59: 0xa000, 0x5a: 0xa000,\n\t0x61: 0xa000, 0x62: 0xa000, 0x63: 0xa000,\n\t0x64: 0xa000, 0x65: 0xa000, 0x66: 0xa000, 0x67: 0xa000, 0x68: 0xa000, 0x69: 0xa000,\n\t0x6a: 0xa000, 0x6b: 0xa000, 0x6c: 0xa000, 0x6d: 0xa000, 0x6e: 0xa000, 0x6f: 0xa000,\n\t0x70: 0xa000, 0x72: 0xa000, 0x73: 0xa000, 0x74: 0xa000, 0x75: 0xa000,\n\t0x76: 0xa000, 0x77: 0xa000, 0x78: 0xa000, 0x79: 0xa000, 0x7a: 0xa000,\n\t// Block 0x2, offset 0x80\n\t// Block 0x3, offset 0xc0\n\t0xc0: 0x2f6f, 0xc1: 0x2f74, 0xc2: 0x4688, 0xc3: 0x2f79, 0xc4: 0x4697, 0xc5: 0x469c,\n\t0xc6: 0xa000, 0xc7: 0x46a6, 0xc8: 0x2fe2, 0xc9: 0x2fe7, 0xca: 0x46ab, 0xcb: 0x2ffb,\n\t0xcc: 0x306e, 0xcd: 0x3073, 0xce: 0x3078, 0xcf: 0x46bf, 0xd1: 0x3104,\n\t0xd2: 0x3127, 0xd3: 0x312c, 0xd4: 0x46c9, 0xd5: 0x46ce, 0xd6: 0x46dd,\n\t0xd8: 0xa000, 0xd9: 0x31b3, 0xda: 0x31b8, 0xdb: 0x31bd, 0xdc: 0x470f, 0xdd: 0x3235,\n\t0xe0: 0x327b, 0xe1: 0x3280, 0xe2: 0x4719, 0xe3: 0x3285,\n\t0xe4: 0x4728, 0xe5: 0x472d, 0xe6: 0xa000, 0xe7: 0x4737, 0xe8: 0x32ee, 0xe9: 0x32f3,\n\t0xea: 0x473c, 0xeb: 0x3307, 0xec: 0x337f, 0xed: 0x3384, 0xee: 0x3389, 0xef: 0x4750,\n\t0xf1: 0x3415, 0xf2: 0x3438, 0xf3: 0x343d, 0xf4: 0x475a, 0xf5: 0x475f,\n\t0xf6: 0x476e, 0xf8: 0xa000, 0xf9: 0x34c9, 0xfa: 0x34ce, 0xfb: 0x34d3,\n\t0xfc: 0x47a0, 0xfd: 0x3550, 0xff: 0x3569,\n\t// Block 0x4, offset 0x100\n\t0x100: 0x2f7e, 0x101: 0x328a, 0x102: 0x468d, 0x103: 0x471e, 0x104: 0x2f9c, 0x105: 0x32a8,\n\t0x106: 0x2fb0, 0x107: 0x32bc, 0x108: 0x2fb5, 0x109: 0x32c1, 0x10a: 0x2fba, 0x10b: 0x32c6,\n\t0x10c: 0x2fbf, 0x10d: 0x32cb, 0x10e: 0x2fc9, 0x10f: 0x32d5,\n\t0x112: 0x46b0, 0x113: 0x4741, 0x114: 0x2ff1, 0x115: 0x32fd, 0x116: 0x2ff6, 0x117: 0x3302,\n\t0x118: 0x3014, 0x119: 0x3320, 0x11a: 0x3005, 0x11b: 0x3311, 0x11c: 0x302d, 0x11d: 0x3339,\n\t0x11e: 0x3037, 0x11f: 0x3343, 0x120: 0x303c, 0x121: 0x3348, 0x122: 0x3046, 0x123: 0x3352,\n\t0x124: 0x304b, 0x125: 0x3357, 0x128: 0x307d, 0x129: 0x338e,\n\t0x12a: 0x3082, 0x12b: 0x3393, 0x12c: 0x3087, 0x12d: 0x3398, 0x12e: 0x30aa, 0x12f: 0x33b6,\n\t0x130: 0x308c, 0x132: 0x195d, 0x133: 0x19e7, 0x134: 0x30b4, 0x135: 0x33c0,\n\t0x136: 0x30c8, 0x137: 0x33d9, 0x139: 0x30d2, 0x13a: 0x33e3, 0x13b: 0x30dc,\n\t0x13c: 0x33ed, 0x13d: 0x30d7, 0x13e: 0x33e8, 0x13f: 0x1bac,\n\t// Block 0x5, offset 0x140\n\t0x140: 0x1c34, 0x143: 0x30ff, 0x144: 0x3410, 0x145: 0x3118,\n\t0x146: 0x3429, 0x147: 0x310e, 0x148: 0x341f, 0x149: 0x1c5c,\n\t0x14c: 0x46d3, 0x14d: 0x4764, 0x14e: 0x3131, 0x14f: 0x3442, 0x150: 0x313b, 0x151: 0x344c,\n\t0x154: 0x3159, 0x155: 0x346a, 0x156: 0x3172, 0x157: 0x3483,\n\t0x158: 0x3163, 0x159: 0x3474, 0x15a: 0x46f6, 0x15b: 0x4787, 0x15c: 0x317c, 0x15d: 0x348d,\n\t0x15e: 0x318b, 0x15f: 0x349c, 0x160: 0x46fb, 0x161: 0x478c, 0x162: 0x31a4, 0x163: 0x34ba,\n\t0x164: 0x3195, 0x165: 0x34ab, 0x168: 0x4705, 0x169: 0x4796,\n\t0x16a: 0x470a, 0x16b: 0x479b, 0x16c: 0x31c2, 0x16d: 0x34d8, 0x16e: 0x31cc, 0x16f: 0x34e2,\n\t0x170: 0x31d1, 0x171: 0x34e7, 0x172: 0x31ef, 0x173: 0x3505, 0x174: 0x3212, 0x175: 0x3528,\n\t0x176: 0x323a, 0x177: 0x3555, 0x178: 0x324e, 0x179: 0x325d, 0x17a: 0x357d, 0x17b: 0x3267,\n\t0x17c: 0x3587, 0x17d: 0x326c, 0x17e: 0x358c, 0x17f: 0x00a7,\n\t// Block 0x6, offset 0x180\n\t0x184: 0x2dee, 0x185: 0x2df4,\n\t0x186: 0x2dfa, 0x187: 0x1972, 0x188: 0x1975, 0x189: 0x1a08, 0x18a: 0x1987, 0x18b: 0x198a,\n\t0x18c: 0x1a3e, 0x18d: 0x2f88, 0x18e: 0x3294, 0x18f: 0x3096, 0x190: 0x33a2, 0x191: 0x3140,\n\t0x192: 0x3451, 0x193: 0x31d6, 0x194: 0x34ec, 0x195: 0x39cf, 0x196: 0x3b5e, 0x197: 0x39c8,\n\t0x198: 0x3b57, 0x199: 0x39d6, 0x19a: 0x3b65, 0x19b: 0x39c1, 0x19c: 0x3b50,\n\t0x19e: 0x38b0, 0x19f: 0x3a3f, 0x1a0: 0x38a9, 0x1a1: 0x3a38, 0x1a2: 0x35b3, 0x1a3: 0x35c5,\n\t0x1a6: 0x3041, 0x1a7: 0x334d, 0x1a8: 0x30be, 0x1a9: 0x33cf,\n\t0x1aa: 0x46ec, 0x1ab: 0x477d, 0x1ac: 0x3990, 0x1ad: 0x3b1f, 0x1ae: 0x35d7, 0x1af: 0x35dd,\n\t0x1b0: 0x33c5, 0x1b1: 0x1942, 0x1b2: 0x1945, 0x1b3: 0x19cf, 0x1b4: 0x3028, 0x1b5: 0x3334,\n\t0x1b8: 0x30fa, 0x1b9: 0x340b, 0x1ba: 0x38b7, 0x1bb: 0x3a46,\n\t0x1bc: 0x35ad, 0x1bd: 0x35bf, 0x1be: 0x35b9, 0x1bf: 0x35cb,\n\t// Block 0x7, offset 0x1c0\n\t0x1c0: 0x2f8d, 0x1c1: 0x3299, 0x1c2: 0x2f92, 0x1c3: 0x329e, 0x1c4: 0x300a, 0x1c5: 0x3316,\n\t0x1c6: 0x300f, 0x1c7: 0x331b, 0x1c8: 0x309b, 0x1c9: 0x33a7, 0x1ca: 0x30a0, 0x1cb: 0x33ac,\n\t0x1cc: 0x3145, 0x1cd: 0x3456, 0x1ce: 0x314a, 0x1cf: 0x345b, 0x1d0: 0x3168, 0x1d1: 0x3479,\n\t0x1d2: 0x316d, 0x1d3: 0x347e, 0x1d4: 0x31db, 0x1d5: 0x34f1, 0x1d6: 0x31e0, 0x1d7: 0x34f6,\n\t0x1d8: 0x3186, 0x1d9: 0x3497, 0x1da: 0x319f, 0x1db: 0x34b5,\n\t0x1de: 0x305a, 0x1df: 0x3366,\n\t0x1e6: 0x4692, 0x1e7: 0x4723, 0x1e8: 0x46ba, 0x1e9: 0x474b,\n\t0x1ea: 0x395f, 0x1eb: 0x3aee, 0x1ec: 0x393c, 0x1ed: 0x3acb, 0x1ee: 0x46d8, 0x1ef: 0x4769,\n\t0x1f0: 0x3958, 0x1f1: 0x3ae7, 0x1f2: 0x3244, 0x1f3: 0x355f,\n\t// Block 0x8, offset 0x200\n\t0x200: 0x9932, 0x201: 0x9932, 0x202: 0x9932, 0x203: 0x9932, 0x204: 0x9932, 0x205: 0x8132,\n\t0x206: 0x9932, 0x207: 0x9932, 0x208: 0x9932, 0x209: 0x9932, 0x20a: 0x9932, 0x20b: 0x9932,\n\t0x20c: 0x9932, 0x20d: 0x8132, 0x20e: 0x8132, 0x20f: 0x9932, 0x210: 0x8132, 0x211: 0x9932,\n\t0x212: 0x8132, 0x213: 0x9932, 0x214: 0x9932, 0x215: 0x8133, 0x216: 0x812d, 0x217: 0x812d,\n\t0x218: 0x812d, 0x219: 0x812d, 0x21a: 0x8133, 0x21b: 0x992b, 0x21c: 0x812d, 0x21d: 0x812d,\n\t0x21e: 0x812d, 0x21f: 0x812d, 0x220: 0x812d, 0x221: 0x8129, 0x222: 0x8129, 0x223: 0x992d,\n\t0x224: 0x992d, 0x225: 0x992d, 0x226: 0x992d, 0x227: 0x9929, 0x228: 0x9929, 0x229: 0x812d,\n\t0x22a: 0x812d, 0x22b: 0x812d, 0x22c: 0x812d, 0x22d: 0x992d, 0x22e: 0x992d, 0x22f: 0x812d,\n\t0x230: 0x992d, 0x231: 0x992d, 0x232: 0x812d, 0x233: 0x812d, 0x234: 0x8101, 0x235: 0x8101,\n\t0x236: 0x8101, 0x237: 0x8101, 0x238: 0x9901, 0x239: 0x812d, 0x23a: 0x812d, 0x23b: 0x812d,\n\t0x23c: 0x812d, 0x23d: 0x8132, 0x23e: 0x8132, 0x23f: 0x8132,\n\t// Block 0x9, offset 0x240\n\t0x240: 0x49ae, 0x241: 0x49b3, 0x242: 0x9932, 0x243: 0x49b8, 0x244: 0x4a71, 0x245: 0x9936,\n\t0x246: 0x8132, 0x247: 0x812d, 0x248: 0x812d, 0x249: 0x812d, 0x24a: 0x8132, 0x24b: 0x8132,\n\t0x24c: 0x8132, 0x24d: 0x812d, 0x24e: 0x812d, 0x250: 0x8132, 0x251: 0x8132,\n\t0x252: 0x8132, 0x253: 0x812d, 0x254: 0x812d, 0x255: 0x812d, 0x256: 0x812d, 0x257: 0x8132,\n\t0x258: 0x8133, 0x259: 0x812d, 0x25a: 0x812d, 0x25b: 0x8132, 0x25c: 0x8134, 0x25d: 0x8135,\n\t0x25e: 0x8135, 0x25f: 0x8134, 0x260: 0x8135, 0x261: 0x8135, 0x262: 0x8134, 0x263: 0x8132,\n\t0x264: 0x8132, 0x265: 0x8132, 0x266: 0x8132, 0x267: 0x8132, 0x268: 0x8132, 0x269: 0x8132,\n\t0x26a: 0x8132, 0x26b: 0x8132, 0x26c: 0x8132, 0x26d: 0x8132, 0x26e: 0x8132, 0x26f: 0x8132,\n\t0x274: 0x0170,\n\t0x27a: 0x42a5,\n\t0x27e: 0x0037,\n\t// Block 0xa, offset 0x280\n\t0x284: 0x425a, 0x285: 0x447b,\n\t0x286: 0x35e9, 0x287: 0x00ce, 0x288: 0x3607, 0x289: 0x3613, 0x28a: 0x3625,\n\t0x28c: 0x3643, 0x28e: 0x3655, 0x28f: 0x3673, 0x290: 0x3e08, 0x291: 0xa000,\n\t0x295: 0xa000, 0x297: 0xa000,\n\t0x299: 0xa000,\n\t0x29f: 0xa000, 0x2a1: 0xa000,\n\t0x2a5: 0xa000, 0x2a9: 0xa000,\n\t0x2aa: 0x3637, 0x2ab: 0x3667, 0x2ac: 0x47fe, 0x2ad: 0x3697, 0x2ae: 0x4828, 0x2af: 0x36a9,\n\t0x2b0: 0x3e70, 0x2b1: 0xa000, 0x2b5: 0xa000,\n\t0x2b7: 0xa000, 0x2b9: 0xa000,\n\t0x2bf: 0xa000,\n\t// Block 0xb, offset 0x2c0\n\t0x2c1: 0xa000, 0x2c5: 0xa000,\n\t0x2c9: 0xa000, 0x2ca: 0x4840, 0x2cb: 0x485e,\n\t0x2cc: 0x36c7, 0x2cd: 0x36df, 0x2ce: 0x4876, 0x2d0: 0x01be, 0x2d1: 0x01d0,\n\t0x2d2: 0x01ac, 0x2d3: 0x430c, 0x2d4: 0x4312, 0x2d5: 0x01fa, 0x2d6: 0x01e8,\n\t0x2f0: 0x01d6, 0x2f1: 0x01eb, 0x2f2: 0x01ee, 0x2f4: 0x0188, 0x2f5: 0x01c7,\n\t0x2f9: 0x01a6,\n\t// Block 0xc, offset 0x300\n\t0x300: 0x3721, 0x301: 0x372d, 0x303: 0x371b,\n\t0x306: 0xa000, 0x307: 0x3709,\n\t0x30c: 0x375d, 0x30d: 0x3745, 0x30e: 0x376f, 0x310: 0xa000,\n\t0x313: 0xa000, 0x315: 0xa000, 0x316: 0xa000, 0x317: 0xa000,\n\t0x318: 0xa000, 0x319: 0x3751, 0x31a: 0xa000,\n\t0x31e: 0xa000, 0x323: 0xa000,\n\t0x327: 0xa000,\n\t0x32b: 0xa000, 0x32d: 0xa000,\n\t0x330: 0xa000, 0x333: 0xa000, 0x335: 0xa000,\n\t0x336: 0xa000, 0x337: 0xa000, 0x338: 0xa000, 0x339: 0x37d5, 0x33a: 0xa000,\n\t0x33e: 0xa000,\n\t// Block 0xd, offset 0x340\n\t0x341: 0x3733, 0x342: 0x37b7,\n\t0x350: 0x370f, 0x351: 0x3793,\n\t0x352: 0x3715, 0x353: 0x3799, 0x356: 0x3727, 0x357: 0x37ab,\n\t0x358: 0xa000, 0x359: 0xa000, 0x35a: 0x3829, 0x35b: 0x382f, 0x35c: 0x3739, 0x35d: 0x37bd,\n\t0x35e: 0x373f, 0x35f: 0x37c3, 0x362: 0x374b, 0x363: 0x37cf,\n\t0x364: 0x3757, 0x365: 0x37db, 0x366: 0x3763, 0x367: 0x37e7, 0x368: 0xa000, 0x369: 0xa000,\n\t0x36a: 0x3835, 0x36b: 0x383b, 0x36c: 0x378d, 0x36d: 0x3811, 0x36e: 0x3769, 0x36f: 0x37ed,\n\t0x370: 0x3775, 0x371: 0x37f9, 0x372: 0x377b, 0x373: 0x37ff, 0x374: 0x3781, 0x375: 0x3805,\n\t0x378: 0x3787, 0x379: 0x380b,\n\t// Block 0xe, offset 0x380\n\t0x387: 0x1d61,\n\t0x391: 0x812d,\n\t0x392: 0x8132, 0x393: 0x8132, 0x394: 0x8132, 0x395: 0x8132, 0x396: 0x812d, 0x397: 0x8132,\n\t0x398: 0x8132, 0x399: 0x8132, 0x39a: 0x812e, 0x39b: 0x812d, 0x39c: 0x8132, 0x39d: 0x8132,\n\t0x39e: 0x8132, 0x39f: 0x8132, 0x3a0: 0x8132, 0x3a1: 0x8132, 0x3a2: 0x812d, 0x3a3: 0x812d,\n\t0x3a4: 0x812d, 0x3a5: 0x812d, 0x3a6: 0x812d, 0x3a7: 0x812d, 0x3a8: 0x8132, 0x3a9: 0x8132,\n\t0x3aa: 0x812d, 0x3ab: 0x8132, 0x3ac: 0x8132, 0x3ad: 0x812e, 0x3ae: 0x8131, 0x3af: 0x8132,\n\t0x3b0: 0x8105, 0x3b1: 0x8106, 0x3b2: 0x8107, 0x3b3: 0x8108, 0x3b4: 0x8109, 0x3b5: 0x810a,\n\t0x3b6: 0x810b, 0x3b7: 0x810c, 0x3b8: 0x810d, 0x3b9: 0x810e, 0x3ba: 0x810e, 0x3bb: 0x810f,\n\t0x3bc: 0x8110, 0x3bd: 0x8111, 0x3bf: 0x8112,\n\t// Block 0xf, offset 0x3c0\n\t0x3c8: 0xa000, 0x3ca: 0xa000, 0x3cb: 0x8116,\n\t0x3cc: 0x8117, 0x3cd: 0x8118, 0x3ce: 0x8119, 0x3cf: 0x811a, 0x3d0: 0x811b, 0x3d1: 0x811c,\n\t0x3d2: 0x811d, 0x3d3: 0x9932, 0x3d4: 0x9932, 0x3d5: 0x992d, 0x3d6: 0x812d, 0x3d7: 0x8132,\n\t0x3d8: 0x8132, 0x3d9: 0x8132, 0x3da: 0x8132, 0x3db: 0x8132, 0x3dc: 0x812d, 0x3dd: 0x8132,\n\t0x3de: 0x8132, 0x3df: 0x812d,\n\t0x3f0: 0x811e, 0x3f5: 0x1d84,\n\t0x3f6: 0x2013, 0x3f7: 0x204f, 0x3f8: 0x204a,\n\t// Block 0x10, offset 0x400\n\t0x413: 0x812d, 0x414: 0x8132, 0x415: 0x8132, 0x416: 0x8132, 0x417: 0x8132,\n\t0x418: 0x8132, 0x419: 0x8132, 0x41a: 0x8132, 0x41b: 0x8132, 0x41c: 0x8132, 0x41d: 0x8132,\n\t0x41e: 0x8132, 0x41f: 0x8132, 0x420: 0x8132, 0x421: 0x8132, 0x423: 0x812d,\n\t0x424: 0x8132, 0x425: 0x8132, 0x426: 0x812d, 0x427: 0x8132, 0x428: 0x8132, 0x429: 0x812d,\n\t0x42a: 0x8132, 0x42b: 0x8132, 0x42c: 0x8132, 0x42d: 0x812d, 0x42e: 0x812d, 0x42f: 0x812d,\n\t0x430: 0x8116, 0x431: 0x8117, 0x432: 0x8118, 0x433: 0x8132, 0x434: 0x8132, 0x435: 0x8132,\n\t0x436: 0x812d, 0x437: 0x8132, 0x438: 0x8132, 0x439: 0x812d, 0x43a: 0x812d, 0x43b: 0x8132,\n\t0x43c: 0x8132, 0x43d: 0x8132, 0x43e: 0x8132, 0x43f: 0x8132,\n\t// Block 0x11, offset 0x440\n\t0x445: 0xa000,\n\t0x446: 0x2d26, 0x447: 0xa000, 0x448: 0x2d2e, 0x449: 0xa000, 0x44a: 0x2d36, 0x44b: 0xa000,\n\t0x44c: 0x2d3e, 0x44d: 0xa000, 0x44e: 0x2d46, 0x451: 0xa000,\n\t0x452: 0x2d4e,\n\t0x474: 0x8102, 0x475: 0x9900,\n\t0x47a: 0xa000, 0x47b: 0x2d56,\n\t0x47c: 0xa000, 0x47d: 0x2d5e, 0x47e: 0xa000, 0x47f: 0xa000,\n\t// Block 0x12, offset 0x480\n\t0x480: 0x0069, 0x481: 0x006b, 0x482: 0x006f, 0x483: 0x0083, 0x484: 0x00f5, 0x485: 0x00f8,\n\t0x486: 0x0413, 0x487: 0x0085, 0x488: 0x0089, 0x489: 0x008b, 0x48a: 0x0104, 0x48b: 0x0107,\n\t0x48c: 0x010a, 0x48d: 0x008f, 0x48f: 0x0097, 0x490: 0x009b, 0x491: 0x00e0,\n\t0x492: 0x009f, 0x493: 0x00fe, 0x494: 0x0417, 0x495: 0x041b, 0x496: 0x00a1, 0x497: 0x00a9,\n\t0x498: 0x00ab, 0x499: 0x0423, 0x49a: 0x012b, 0x49b: 0x00ad, 0x49c: 0x0427, 0x49d: 0x01be,\n\t0x49e: 0x01c1, 0x49f: 0x01c4, 0x4a0: 0x01fa, 0x4a1: 0x01fd, 0x4a2: 0x0093, 0x4a3: 0x00a5,\n\t0x4a4: 0x00ab, 0x4a5: 0x00ad, 0x4a6: 0x01be, 0x4a7: 0x01c1, 0x4a8: 0x01eb, 0x4a9: 0x01fa,\n\t0x4aa: 0x01fd,\n\t0x4b8: 0x020c,\n\t// Block 0x13, offset 0x4c0\n\t0x4db: 0x00fb, 0x4dc: 0x0087, 0x4dd: 0x0101,\n\t0x4de: 0x00d4, 0x4df: 0x010a, 0x4e0: 0x008d, 0x4e1: 0x010d, 0x4e2: 0x0110, 0x4e3: 0x0116,\n\t0x4e4: 0x011c, 0x4e5: 0x011f, 0x4e6: 0x0122, 0x4e7: 0x042b, 0x4e8: 0x016a, 0x4e9: 0x0128,\n\t0x4ea: 0x042f, 0x4eb: 0x016d, 0x4ec: 0x0131, 0x4ed: 0x012e, 0x4ee: 0x0134, 0x4ef: 0x0137,\n\t0x4f0: 0x013a, 0x4f1: 0x013d, 0x4f2: 0x0140, 0x4f3: 0x014c, 0x4f4: 0x014f, 0x4f5: 0x00ec,\n\t0x4f6: 0x0152, 0x4f7: 0x0155, 0x4f8: 0x041f, 0x4f9: 0x0158, 0x4fa: 0x015b, 0x4fb: 0x00b5,\n\t0x4fc: 0x015e, 0x4fd: 0x0161, 0x4fe: 0x0164, 0x4ff: 0x01d0,\n\t// Block 0x14, offset 0x500\n\t0x500: 0x8132, 0x501: 0x8132, 0x502: 0x812d, 0x503: 0x8132, 0x504: 0x8132, 0x505: 0x8132,\n\t0x506: 0x8132, 0x507: 0x8132, 0x508: 0x8132, 0x509: 0x8132, 0x50a: 0x812d, 0x50b: 0x8132,\n\t0x50c: 0x8132, 0x50d: 0x8135, 0x50e: 0x812a, 0x50f: 0x812d, 0x510: 0x8129, 0x511: 0x8132,\n\t0x512: 0x8132, 0x513: 0x8132, 0x514: 0x8132, 0x515: 0x8132, 0x516: 0x8132, 0x517: 0x8132,\n\t0x518: 0x8132, 0x519: 0x8132, 0x51a: 0x8132, 0x51b: 0x8132, 0x51c: 0x8132, 0x51d: 0x8132,\n\t0x51e: 0x8132, 0x51f: 0x8132, 0x520: 0x8132, 0x521: 0x8132, 0x522: 0x8132, 0x523: 0x8132,\n\t0x524: 0x8132, 0x525: 0x8132, 0x526: 0x8132, 0x527: 0x8132, 0x528: 0x8132, 0x529: 0x8132,\n\t0x52a: 0x8132, 0x52b: 0x8132, 0x52c: 0x8132, 0x52d: 0x8132, 0x52e: 0x8132, 0x52f: 0x8132,\n\t0x530: 0x8132, 0x531: 0x8132, 0x532: 0x8132, 0x533: 0x8132, 0x534: 0x8132, 0x535: 0x8132,\n\t0x536: 0x8133, 0x537: 0x8131, 0x538: 0x8131, 0x539: 0x812d, 0x53b: 0x8132,\n\t0x53c: 0x8134, 0x53d: 0x812d, 0x53e: 0x8132, 0x53f: 0x812d,\n\t// Block 0x15, offset 0x540\n\t0x540: 0x2f97, 0x541: 0x32a3, 0x542: 0x2fa1, 0x543: 0x32ad, 0x544: 0x2fa6, 0x545: 0x32b2,\n\t0x546: 0x2fab, 0x547: 0x32b7, 0x548: 0x38cc, 0x549: 0x3a5b, 0x54a: 0x2fc4, 0x54b: 0x32d0,\n\t0x54c: 0x2fce, 0x54d: 0x32da, 0x54e: 0x2fdd, 0x54f: 0x32e9, 0x550: 0x2fd3, 0x551: 0x32df,\n\t0x552: 0x2fd8, 0x553: 0x32e4, 0x554: 0x38ef, 0x555: 0x3a7e, 0x556: 0x38f6, 0x557: 0x3a85,\n\t0x558: 0x3019, 0x559: 0x3325, 0x55a: 0x301e, 0x55b: 0x332a, 0x55c: 0x3904, 0x55d: 0x3a93,\n\t0x55e: 0x3023, 0x55f: 0x332f, 0x560: 0x3032, 0x561: 0x333e, 0x562: 0x3050, 0x563: 0x335c,\n\t0x564: 0x305f, 0x565: 0x336b, 0x566: 0x3055, 0x567: 0x3361, 0x568: 0x3064, 0x569: 0x3370,\n\t0x56a: 0x3069, 0x56b: 0x3375, 0x56c: 0x30af, 0x56d: 0x33bb, 0x56e: 0x390b, 0x56f: 0x3a9a,\n\t0x570: 0x30b9, 0x571: 0x33ca, 0x572: 0x30c3, 0x573: 0x33d4, 0x574: 0x30cd, 0x575: 0x33de,\n\t0x576: 0x46c4, 0x577: 0x4755, 0x578: 0x3912, 0x579: 0x3aa1, 0x57a: 0x30e6, 0x57b: 0x33f7,\n\t0x57c: 0x30e1, 0x57d: 0x33f2, 0x57e: 0x30eb, 0x57f: 0x33fc,\n\t// Block 0x16, offset 0x580\n\t0x580: 0x30f0, 0x581: 0x3401, 0x582: 0x30f5, 0x583: 0x3406, 0x584: 0x3109, 0x585: 0x341a,\n\t0x586: 0x3113, 0x587: 0x3424, 0x588: 0x3122, 0x589: 0x3433, 0x58a: 0x311d, 0x58b: 0x342e,\n\t0x58c: 0x3935, 0x58d: 0x3ac4, 0x58e: 0x3943, 0x58f: 0x3ad2, 0x590: 0x394a, 0x591: 0x3ad9,\n\t0x592: 0x3951, 0x593: 0x3ae0, 0x594: 0x314f, 0x595: 0x3460, 0x596: 0x3154, 0x597: 0x3465,\n\t0x598: 0x315e, 0x599: 0x346f, 0x59a: 0x46f1, 0x59b: 0x4782, 0x59c: 0x3997, 0x59d: 0x3b26,\n\t0x59e: 0x3177, 0x59f: 0x3488, 0x5a0: 0x3181, 0x5a1: 0x3492, 0x5a2: 0x4700, 0x5a3: 0x4791,\n\t0x5a4: 0x399e, 0x5a5: 0x3b2d, 0x5a6: 0x39a5, 0x5a7: 0x3b34, 0x5a8: 0x39ac, 0x5a9: 0x3b3b,\n\t0x5aa: 0x3190, 0x5ab: 0x34a1, 0x5ac: 0x319a, 0x5ad: 0x34b0, 0x5ae: 0x31ae, 0x5af: 0x34c4,\n\t0x5b0: 0x31a9, 0x5b1: 0x34bf, 0x5b2: 0x31ea, 0x5b3: 0x3500, 0x5b4: 0x31f9, 0x5b5: 0x350f,\n\t0x5b6: 0x31f4, 0x5b7: 0x350a, 0x5b8: 0x39b3, 0x5b9: 0x3b42, 0x5ba: 0x39ba, 0x5bb: 0x3b49,\n\t0x5bc: 0x31fe, 0x5bd: 0x3514, 0x5be: 0x3203, 0x5bf: 0x3519,\n\t// Block 0x17, offset 0x5c0\n\t0x5c0: 0x3208, 0x5c1: 0x351e, 0x5c2: 0x320d, 0x5c3: 0x3523, 0x5c4: 0x321c, 0x5c5: 0x3532,\n\t0x5c6: 0x3217, 0x5c7: 0x352d, 0x5c8: 0x3221, 0x5c9: 0x353c, 0x5ca: 0x3226, 0x5cb: 0x3541,\n\t0x5cc: 0x322b, 0x5cd: 0x3546, 0x5ce: 0x3249, 0x5cf: 0x3564, 0x5d0: 0x3262, 0x5d1: 0x3582,\n\t0x5d2: 0x3271, 0x5d3: 0x3591, 0x5d4: 0x3276, 0x5d5: 0x3596, 0x5d6: 0x337a, 0x5d7: 0x34a6,\n\t0x5d8: 0x3537, 0x5d9: 0x3573, 0x5da: 0x1be0, 0x5db: 0x42d7,\n\t0x5e0: 0x46a1, 0x5e1: 0x4732, 0x5e2: 0x2f83, 0x5e3: 0x328f,\n\t0x5e4: 0x3878, 0x5e5: 0x3a07, 0x5e6: 0x3871, 0x5e7: 0x3a00, 0x5e8: 0x3886, 0x5e9: 0x3a15,\n\t0x5ea: 0x387f, 0x5eb: 0x3a0e, 0x5ec: 0x38be, 0x5ed: 0x3a4d, 0x5ee: 0x3894, 0x5ef: 0x3a23,\n\t0x5f0: 0x388d, 0x5f1: 0x3a1c, 0x5f2: 0x38a2, 0x5f3: 0x3a31, 0x5f4: 0x389b, 0x5f5: 0x3a2a,\n\t0x5f6: 0x38c5, 0x5f7: 0x3a54, 0x5f8: 0x46b5, 0x5f9: 0x4746, 0x5fa: 0x3000, 0x5fb: 0x330c,\n\t0x5fc: 0x2fec, 0x5fd: 0x32f8, 0x5fe: 0x38da, 0x5ff: 0x3a69,\n\t// Block 0x18, offset 0x600\n\t0x600: 0x38d3, 0x601: 0x3a62, 0x602: 0x38e8, 0x603: 0x3a77, 0x604: 0x38e1, 0x605: 0x3a70,\n\t0x606: 0x38fd, 0x607: 0x3a8c, 0x608: 0x3091, 0x609: 0x339d, 0x60a: 0x30a5, 0x60b: 0x33b1,\n\t0x60c: 0x46e7, 0x60d: 0x4778, 0x60e: 0x3136, 0x60f: 0x3447, 0x610: 0x3920, 0x611: 0x3aaf,\n\t0x612: 0x3919, 0x613: 0x3aa8, 0x614: 0x392e, 0x615: 0x3abd, 0x616: 0x3927, 0x617: 0x3ab6,\n\t0x618: 0x3989, 0x619: 0x3b18, 0x61a: 0x396d, 0x61b: 0x3afc, 0x61c: 0x3966, 0x61d: 0x3af5,\n\t0x61e: 0x397b, 0x61f: 0x3b0a, 0x620: 0x3974, 0x621: 0x3b03, 0x622: 0x3982, 0x623: 0x3b11,\n\t0x624: 0x31e5, 0x625: 0x34fb, 0x626: 0x31c7, 0x627: 0x34dd, 0x628: 0x39e4, 0x629: 0x3b73,\n\t0x62a: 0x39dd, 0x62b: 0x3b6c, 0x62c: 0x39f2, 0x62d: 0x3b81, 0x62e: 0x39eb, 0x62f: 0x3b7a,\n\t0x630: 0x39f9, 0x631: 0x3b88, 0x632: 0x3230, 0x633: 0x354b, 0x634: 0x3258, 0x635: 0x3578,\n\t0x636: 0x3253, 0x637: 0x356e, 0x638: 0x323f, 0x639: 0x355a,\n\t// Block 0x19, offset 0x640\n\t0x640: 0x4804, 0x641: 0x480a, 0x642: 0x491e, 0x643: 0x4936, 0x644: 0x4926, 0x645: 0x493e,\n\t0x646: 0x492e, 0x647: 0x4946, 0x648: 0x47aa, 0x649: 0x47b0, 0x64a: 0x488e, 0x64b: 0x48a6,\n\t0x64c: 0x4896, 0x64d: 0x48ae, 0x64e: 0x489e, 0x64f: 0x48b6, 0x650: 0x4816, 0x651: 0x481c,\n\t0x652: 0x3db8, 0x653: 0x3dc8, 0x654: 0x3dc0, 0x655: 0x3dd0,\n\t0x658: 0x47b6, 0x659: 0x47bc, 0x65a: 0x3ce8, 0x65b: 0x3cf8, 0x65c: 0x3cf0, 0x65d: 0x3d00,\n\t0x660: 0x482e, 0x661: 0x4834, 0x662: 0x494e, 0x663: 0x4966,\n\t0x664: 0x4956, 0x665: 0x496e, 0x666: 0x495e, 0x667: 0x4976, 0x668: 0x47c2, 0x669: 0x47c8,\n\t0x66a: 0x48be, 0x66b: 0x48d6, 0x66c: 0x48c6, 0x66d: 0x48de, 0x66e: 0x48ce, 0x66f: 0x48e6,\n\t0x670: 0x4846, 0x671: 0x484c, 0x672: 0x3e18, 0x673: 0x3e30, 0x674: 0x3e20, 0x675: 0x3e38,\n\t0x676: 0x3e28, 0x677: 0x3e40, 0x678: 0x47ce, 0x679: 0x47d4, 0x67a: 0x3d18, 0x67b: 0x3d30,\n\t0x67c: 0x3d20, 0x67d: 0x3d38, 0x67e: 0x3d28, 0x67f: 0x3d40,\n\t// Block 0x1a, offset 0x680\n\t0x680: 0x4852, 0x681: 0x4858, 0x682: 0x3e48, 0x683: 0x3e58, 0x684: 0x3e50, 0x685: 0x3e60,\n\t0x688: 0x47da, 0x689: 0x47e0, 0x68a: 0x3d48, 0x68b: 0x3d58,\n\t0x68c: 0x3d50, 0x68d: 0x3d60, 0x690: 0x4864, 0x691: 0x486a,\n\t0x692: 0x3e80, 0x693: 0x3e98, 0x694: 0x3e88, 0x695: 0x3ea0, 0x696: 0x3e90, 0x697: 0x3ea8,\n\t0x699: 0x47e6, 0x69b: 0x3d68, 0x69d: 0x3d70,\n\t0x69f: 0x3d78, 0x6a0: 0x487c, 0x6a1: 0x4882, 0x6a2: 0x497e, 0x6a3: 0x4996,\n\t0x6a4: 0x4986, 0x6a5: 0x499e, 0x6a6: 0x498e, 0x6a7: 0x49a6, 0x6a8: 0x47ec, 0x6a9: 0x47f2,\n\t0x6aa: 0x48ee, 0x6ab: 0x4906, 0x6ac: 0x48f6, 0x6ad: 0x490e, 0x6ae: 0x48fe, 0x6af: 0x4916,\n\t0x6b0: 0x47f8, 0x6b1: 0x431e, 0x6b2: 0x3691, 0x6b3: 0x4324, 0x6b4: 0x4822, 0x6b5: 0x432a,\n\t0x6b6: 0x36a3, 0x6b7: 0x4330, 0x6b8: 0x36c1, 0x6b9: 0x4336, 0x6ba: 0x36d9, 0x6bb: 0x433c,\n\t0x6bc: 0x4870, 0x6bd: 0x4342,\n\t// Block 0x1b, offset 0x6c0\n\t0x6c0: 0x3da0, 0x6c1: 0x3da8, 0x6c2: 0x4184, 0x6c3: 0x41a2, 0x6c4: 0x418e, 0x6c5: 0x41ac,\n\t0x6c6: 0x4198, 0x6c7: 0x41b6, 0x6c8: 0x3cd8, 0x6c9: 0x3ce0, 0x6ca: 0x40d0, 0x6cb: 0x40ee,\n\t0x6cc: 0x40da, 0x6cd: 0x40f8, 0x6ce: 0x40e4, 0x6cf: 0x4102, 0x6d0: 0x3de8, 0x6d1: 0x3df0,\n\t0x6d2: 0x41c0, 0x6d3: 0x41de, 0x6d4: 0x41ca, 0x6d5: 0x41e8, 0x6d6: 0x41d4, 0x6d7: 0x41f2,\n\t0x6d8: 0x3d08, 0x6d9: 0x3d10, 0x6da: 0x410c, 0x6db: 0x412a, 0x6dc: 0x4116, 0x6dd: 0x4134,\n\t0x6de: 0x4120, 0x6df: 0x413e, 0x6e0: 0x3ec0, 0x6e1: 0x3ec8, 0x6e2: 0x41fc, 0x6e3: 0x421a,\n\t0x6e4: 0x4206, 0x6e5: 0x4224, 0x6e6: 0x4210, 0x6e7: 0x422e, 0x6e8: 0x3d80, 0x6e9: 0x3d88,\n\t0x6ea: 0x4148, 0x6eb: 0x4166, 0x6ec: 0x4152, 0x6ed: 0x4170, 0x6ee: 0x415c, 0x6ef: 0x417a,\n\t0x6f0: 0x3685, 0x6f1: 0x367f, 0x6f2: 0x3d90, 0x6f3: 0x368b, 0x6f4: 0x3d98,\n\t0x6f6: 0x4810, 0x6f7: 0x3db0, 0x6f8: 0x35f5, 0x6f9: 0x35ef, 0x6fa: 0x35e3, 0x6fb: 0x42ee,\n\t0x6fc: 0x35fb, 0x6fd: 0x4287, 0x6fe: 0x01d3, 0x6ff: 0x4287,\n\t// Block 0x1c, offset 0x700\n\t0x700: 0x42a0, 0x701: 0x4482, 0x702: 0x3dd8, 0x703: 0x369d, 0x704: 0x3de0,\n\t0x706: 0x483a, 0x707: 0x3df8, 0x708: 0x3601, 0x709: 0x42f4, 0x70a: 0x360d, 0x70b: 0x42fa,\n\t0x70c: 0x3619, 0x70d: 0x4489, 0x70e: 0x4490, 0x70f: 0x4497, 0x710: 0x36b5, 0x711: 0x36af,\n\t0x712: 0x3e00, 0x713: 0x44e4, 0x716: 0x36bb, 0x717: 0x3e10,\n\t0x718: 0x3631, 0x719: 0x362b, 0x71a: 0x361f, 0x71b: 0x4300, 0x71d: 0x449e,\n\t0x71e: 0x44a5, 0x71f: 0x44ac, 0x720: 0x36eb, 0x721: 0x36e5, 0x722: 0x3e68, 0x723: 0x44ec,\n\t0x724: 0x36cd, 0x725: 0x36d3, 0x726: 0x36f1, 0x727: 0x3e78, 0x728: 0x3661, 0x729: 0x365b,\n\t0x72a: 0x364f, 0x72b: 0x430c, 0x72c: 0x3649, 0x72d: 0x4474, 0x72e: 0x447b, 0x72f: 0x0081,\n\t0x732: 0x3eb0, 0x733: 0x36f7, 0x734: 0x3eb8,\n\t0x736: 0x4888, 0x737: 0x3ed0, 0x738: 0x363d, 0x739: 0x4306, 0x73a: 0x366d, 0x73b: 0x4318,\n\t0x73c: 0x3679, 0x73d: 0x425a, 0x73e: 0x428c,\n\t// Block 0x1d, offset 0x740\n\t0x740: 0x1bd8, 0x741: 0x1bdc, 0x742: 0x0047, 0x743: 0x1c54, 0x745: 0x1be8,\n\t0x746: 0x1bec, 0x747: 0x00e9, 0x749: 0x1c58, 0x74a: 0x008f, 0x74b: 0x0051,\n\t0x74c: 0x0051, 0x74d: 0x0051, 0x74e: 0x0091, 0x74f: 0x00da, 0x750: 0x0053, 0x751: 0x0053,\n\t0x752: 0x0059, 0x753: 0x0099, 0x755: 0x005d, 0x756: 0x198d,\n\t0x759: 0x0061, 0x75a: 0x0063, 0x75b: 0x0065, 0x75c: 0x0065, 0x75d: 0x0065,\n\t0x760: 0x199f, 0x761: 0x1bc8, 0x762: 0x19a8,\n\t0x764: 0x0075, 0x766: 0x01b8, 0x768: 0x0075,\n\t0x76a: 0x0057, 0x76b: 0x42d2, 0x76c: 0x0045, 0x76d: 0x0047, 0x76f: 0x008b,\n\t0x770: 0x004b, 0x771: 0x004d, 0x773: 0x005b, 0x774: 0x009f, 0x775: 0x0215,\n\t0x776: 0x0218, 0x777: 0x021b, 0x778: 0x021e, 0x779: 0x0093, 0x77b: 0x1b98,\n\t0x77c: 0x01e8, 0x77d: 0x01c1, 0x77e: 0x0179, 0x77f: 0x01a0,\n\t// Block 0x1e, offset 0x780\n\t0x780: 0x0463, 0x785: 0x0049,\n\t0x786: 0x0089, 0x787: 0x008b, 0x788: 0x0093, 0x789: 0x0095,\n\t0x790: 0x222e, 0x791: 0x223a,\n\t0x792: 0x22ee, 0x793: 0x2216, 0x794: 0x229a, 0x795: 0x2222, 0x796: 0x22a0, 0x797: 0x22b8,\n\t0x798: 0x22c4, 0x799: 0x2228, 0x79a: 0x22ca, 0x79b: 0x2234, 0x79c: 0x22be, 0x79d: 0x22d0,\n\t0x79e: 0x22d6, 0x79f: 0x1cbc, 0x7a0: 0x0053, 0x7a1: 0x195a, 0x7a2: 0x1ba4, 0x7a3: 0x1963,\n\t0x7a4: 0x006d, 0x7a5: 0x19ab, 0x7a6: 0x1bd0, 0x7a7: 0x1d48, 0x7a8: 0x1966, 0x7a9: 0x0071,\n\t0x7aa: 0x19b7, 0x7ab: 0x1bd4, 0x7ac: 0x0059, 0x7ad: 0x0047, 0x7ae: 0x0049, 0x7af: 0x005b,\n\t0x7b0: 0x0093, 0x7b1: 0x19e4, 0x7b2: 0x1c18, 0x7b3: 0x19ed, 0x7b4: 0x00ad, 0x7b5: 0x1a62,\n\t0x7b6: 0x1c4c, 0x7b7: 0x1d5c, 0x7b8: 0x19f0, 0x7b9: 0x00b1, 0x7ba: 0x1a65, 0x7bb: 0x1c50,\n\t0x7bc: 0x0099, 0x7bd: 0x0087, 0x7be: 0x0089, 0x7bf: 0x009b,\n\t// Block 0x1f, offset 0x7c0\n\t0x7c1: 0x3c06, 0x7c3: 0xa000, 0x7c4: 0x3c0d, 0x7c5: 0xa000,\n\t0x7c7: 0x3c14, 0x7c8: 0xa000, 0x7c9: 0x3c1b,\n\t0x7cd: 0xa000,\n\t0x7e0: 0x2f65, 0x7e1: 0xa000, 0x7e2: 0x3c29,\n\t0x7e4: 0xa000, 0x7e5: 0xa000,\n\t0x7ed: 0x3c22, 0x7ee: 0x2f60, 0x7ef: 0x2f6a,\n\t0x7f0: 0x3c30, 0x7f1: 0x3c37, 0x7f2: 0xa000, 0x7f3: 0xa000, 0x7f4: 0x3c3e, 0x7f5: 0x3c45,\n\t0x7f6: 0xa000, 0x7f7: 0xa000, 0x7f8: 0x3c4c, 0x7f9: 0x3c53, 0x7fa: 0xa000, 0x7fb: 0xa000,\n\t0x7fc: 0xa000, 0x7fd: 0xa000,\n\t// Block 0x20, offset 0x800\n\t0x800: 0x3c5a, 0x801: 0x3c61, 0x802: 0xa000, 0x803: 0xa000, 0x804: 0x3c76, 0x805: 0x3c7d,\n\t0x806: 0xa000, 0x807: 0xa000, 0x808: 0x3c84, 0x809: 0x3c8b,\n\t0x811: 0xa000,\n\t0x812: 0xa000,\n\t0x822: 0xa000,\n\t0x828: 0xa000, 0x829: 0xa000,\n\t0x82b: 0xa000, 0x82c: 0x3ca0, 0x82d: 0x3ca7, 0x82e: 0x3cae, 0x82f: 0x3cb5,\n\t0x832: 0xa000, 0x833: 0xa000, 0x834: 0xa000, 0x835: 0xa000,\n\t// Block 0x21, offset 0x840\n\t0x860: 0x0023, 0x861: 0x0025, 0x862: 0x0027, 0x863: 0x0029,\n\t0x864: 0x002b, 0x865: 0x002d, 0x866: 0x002f, 0x867: 0x0031, 0x868: 0x0033, 0x869: 0x1882,\n\t0x86a: 0x1885, 0x86b: 0x1888, 0x86c: 0x188b, 0x86d: 0x188e, 0x86e: 0x1891, 0x86f: 0x1894,\n\t0x870: 0x1897, 0x871: 0x189a, 0x872: 0x189d, 0x873: 0x18a6, 0x874: 0x1a68, 0x875: 0x1a6c,\n\t0x876: 0x1a70, 0x877: 0x1a74, 0x878: 0x1a78, 0x879: 0x1a7c, 0x87a: 0x1a80, 0x87b: 0x1a84,\n\t0x87c: 0x1a88, 0x87d: 0x1c80, 0x87e: 0x1c85, 0x87f: 0x1c8a,\n\t// Block 0x22, offset 0x880\n\t0x880: 0x1c8f, 0x881: 0x1c94, 0x882: 0x1c99, 0x883: 0x1c9e, 0x884: 0x1ca3, 0x885: 0x1ca8,\n\t0x886: 0x1cad, 0x887: 0x1cb2, 0x888: 0x187f, 0x889: 0x18a3, 0x88a: 0x18c7, 0x88b: 0x18eb,\n\t0x88c: 0x190f, 0x88d: 0x1918, 0x88e: 0x191e, 0x88f: 0x1924, 0x890: 0x192a, 0x891: 0x1b60,\n\t0x892: 0x1b64, 0x893: 0x1b68, 0x894: 0x1b6c, 0x895: 0x1b70, 0x896: 0x1b74, 0x897: 0x1b78,\n\t0x898: 0x1b7c, 0x899: 0x1b80, 0x89a: 0x1b84, 0x89b: 0x1b88, 0x89c: 0x1af4, 0x89d: 0x1af8,\n\t0x89e: 0x1afc, 0x89f: 0x1b00, 0x8a0: 0x1b04, 0x8a1: 0x1b08, 0x8a2: 0x1b0c, 0x8a3: 0x1b10,\n\t0x8a4: 0x1b14, 0x8a5: 0x1b18, 0x8a6: 0x1b1c, 0x8a7: 0x1b20, 0x8a8: 0x1b24, 0x8a9: 0x1b28,\n\t0x8aa: 0x1b2c, 0x8ab: 0x1b30, 0x8ac: 0x1b34, 0x8ad: 0x1b38, 0x8ae: 0x1b3c, 0x8af: 0x1b40,\n\t0x8b0: 0x1b44, 0x8b1: 0x1b48, 0x8b2: 0x1b4c, 0x8b3: 0x1b50, 0x8b4: 0x1b54, 0x8b5: 0x1b58,\n\t0x8b6: 0x0043, 0x8b7: 0x0045, 0x8b8: 0x0047, 0x8b9: 0x0049, 0x8ba: 0x004b, 0x8bb: 0x004d,\n\t0x8bc: 0x004f, 0x8bd: 0x0051, 0x8be: 0x0053, 0x8bf: 0x0055,\n\t// Block 0x23, offset 0x8c0\n\t0x8c0: 0x06bf, 0x8c1: 0x06e3, 0x8c2: 0x06ef, 0x8c3: 0x06ff, 0x8c4: 0x0707, 0x8c5: 0x0713,\n\t0x8c6: 0x071b, 0x8c7: 0x0723, 0x8c8: 0x072f, 0x8c9: 0x0783, 0x8ca: 0x079b, 0x8cb: 0x07ab,\n\t0x8cc: 0x07bb, 0x8cd: 0x07cb, 0x8ce: 0x07db, 0x8cf: 0x07fb, 0x8d0: 0x07ff, 0x8d1: 0x0803,\n\t0x8d2: 0x0837, 0x8d3: 0x085f, 0x8d4: 0x086f, 0x8d5: 0x0877, 0x8d6: 0x087b, 0x8d7: 0x0887,\n\t0x8d8: 0x08a3, 0x8d9: 0x08a7, 0x8da: 0x08bf, 0x8db: 0x08c3, 0x8dc: 0x08cb, 0x8dd: 0x08db,\n\t0x8de: 0x0977, 0x8df: 0x098b, 0x8e0: 0x09cb, 0x8e1: 0x09df, 0x8e2: 0x09e7, 0x8e3: 0x09eb,\n\t0x8e4: 0x09fb, 0x8e5: 0x0a17, 0x8e6: 0x0a43, 0x8e7: 0x0a4f, 0x8e8: 0x0a6f, 0x8e9: 0x0a7b,\n\t0x8ea: 0x0a7f, 0x8eb: 0x0a83, 0x8ec: 0x0a9b, 0x8ed: 0x0a9f, 0x8ee: 0x0acb, 0x8ef: 0x0ad7,\n\t0x8f0: 0x0adf, 0x8f1: 0x0ae7, 0x8f2: 0x0af7, 0x8f3: 0x0aff, 0x8f4: 0x0b07, 0x8f5: 0x0b33,\n\t0x8f6: 0x0b37, 0x8f7: 0x0b3f, 0x8f8: 0x0b43, 0x8f9: 0x0b4b, 0x8fa: 0x0b53, 0x8fb: 0x0b63,\n\t0x8fc: 0x0b7f, 0x8fd: 0x0bf7, 0x8fe: 0x0c0b, 0x8ff: 0x0c0f,\n\t// Block 0x24, offset 0x900\n\t0x900: 0x0c8f, 0x901: 0x0c93, 0x902: 0x0ca7, 0x903: 0x0cab, 0x904: 0x0cb3, 0x905: 0x0cbb,\n\t0x906: 0x0cc3, 0x907: 0x0ccf, 0x908: 0x0cf7, 0x909: 0x0d07, 0x90a: 0x0d1b, 0x90b: 0x0d8b,\n\t0x90c: 0x0d97, 0x90d: 0x0da7, 0x90e: 0x0db3, 0x90f: 0x0dbf, 0x910: 0x0dc7, 0x911: 0x0dcb,\n\t0x912: 0x0dcf, 0x913: 0x0dd3, 0x914: 0x0dd7, 0x915: 0x0e8f, 0x916: 0x0ed7, 0x917: 0x0ee3,\n\t0x918: 0x0ee7, 0x919: 0x0eeb, 0x91a: 0x0eef, 0x91b: 0x0ef7, 0x91c: 0x0efb, 0x91d: 0x0f0f,\n\t0x91e: 0x0f2b, 0x91f: 0x0f33, 0x920: 0x0f73, 0x921: 0x0f77, 0x922: 0x0f7f, 0x923: 0x0f83,\n\t0x924: 0x0f8b, 0x925: 0x0f8f, 0x926: 0x0fb3, 0x927: 0x0fb7, 0x928: 0x0fd3, 0x929: 0x0fd7,\n\t0x92a: 0x0fdb, 0x92b: 0x0fdf, 0x92c: 0x0ff3, 0x92d: 0x1017, 0x92e: 0x101b, 0x92f: 0x101f,\n\t0x930: 0x1043, 0x931: 0x1083, 0x932: 0x1087, 0x933: 0x10a7, 0x934: 0x10b7, 0x935: 0x10bf,\n\t0x936: 0x10df, 0x937: 0x1103, 0x938: 0x1147, 0x939: 0x114f, 0x93a: 0x1163, 0x93b: 0x116f,\n\t0x93c: 0x1177, 0x93d: 0x117f, 0x93e: 0x1183, 0x93f: 0x1187,\n\t// Block 0x25, offset 0x940\n\t0x940: 0x119f, 0x941: 0x11a3, 0x942: 0x11bf, 0x943: 0x11c7, 0x944: 0x11cf, 0x945: 0x11d3,\n\t0x946: 0x11df, 0x947: 0x11e7, 0x948: 0x11eb, 0x949: 0x11ef, 0x94a: 0x11f7, 0x94b: 0x11fb,\n\t0x94c: 0x129b, 0x94d: 0x12af, 0x94e: 0x12e3, 0x94f: 0x12e7, 0x950: 0x12ef, 0x951: 0x131b,\n\t0x952: 0x1323, 0x953: 0x132b, 0x954: 0x1333, 0x955: 0x136f, 0x956: 0x1373, 0x957: 0x137b,\n\t0x958: 0x137f, 0x959: 0x1383, 0x95a: 0x13af, 0x95b: 0x13b3, 0x95c: 0x13bb, 0x95d: 0x13cf,\n\t0x95e: 0x13d3, 0x95f: 0x13ef, 0x960: 0x13f7, 0x961: 0x13fb, 0x962: 0x141f, 0x963: 0x143f,\n\t0x964: 0x1453, 0x965: 0x1457, 0x966: 0x145f, 0x967: 0x148b, 0x968: 0x148f, 0x969: 0x149f,\n\t0x96a: 0x14c3, 0x96b: 0x14cf, 0x96c: 0x14df, 0x96d: 0x14f7, 0x96e: 0x14ff, 0x96f: 0x1503,\n\t0x970: 0x1507, 0x971: 0x150b, 0x972: 0x1517, 0x973: 0x151b, 0x974: 0x1523, 0x975: 0x153f,\n\t0x976: 0x1543, 0x977: 0x1547, 0x978: 0x155f, 0x979: 0x1563, 0x97a: 0x156b, 0x97b: 0x157f,\n\t0x97c: 0x1583, 0x97d: 0x1587, 0x97e: 0x158f, 0x97f: 0x1593,\n\t// Block 0x26, offset 0x980\n\t0x986: 0xa000, 0x98b: 0xa000,\n\t0x98c: 0x3f08, 0x98d: 0xa000, 0x98e: 0x3f10, 0x98f: 0xa000, 0x990: 0x3f18, 0x991: 0xa000,\n\t0x992: 0x3f20, 0x993: 0xa000, 0x994: 0x3f28, 0x995: 0xa000, 0x996: 0x3f30, 0x997: 0xa000,\n\t0x998: 0x3f38, 0x999: 0xa000, 0x99a: 0x3f40, 0x99b: 0xa000, 0x99c: 0x3f48, 0x99d: 0xa000,\n\t0x99e: 0x3f50, 0x99f: 0xa000, 0x9a0: 0x3f58, 0x9a1: 0xa000, 0x9a2: 0x3f60,\n\t0x9a4: 0xa000, 0x9a5: 0x3f68, 0x9a6: 0xa000, 0x9a7: 0x3f70, 0x9a8: 0xa000, 0x9a9: 0x3f78,\n\t0x9af: 0xa000,\n\t0x9b0: 0x3f80, 0x9b1: 0x3f88, 0x9b2: 0xa000, 0x9b3: 0x3f90, 0x9b4: 0x3f98, 0x9b5: 0xa000,\n\t0x9b6: 0x3fa0, 0x9b7: 0x3fa8, 0x9b8: 0xa000, 0x9b9: 0x3fb0, 0x9ba: 0x3fb8, 0x9bb: 0xa000,\n\t0x9bc: 0x3fc0, 0x9bd: 0x3fc8,\n\t// Block 0x27, offset 0x9c0\n\t0x9d4: 0x3f00,\n\t0x9d9: 0x9903, 0x9da: 0x9903, 0x9db: 0x42dc, 0x9dc: 0x42e2, 0x9dd: 0xa000,\n\t0x9de: 0x3fd0, 0x9df: 0x26b4,\n\t0x9e6: 0xa000,\n\t0x9eb: 0xa000, 0x9ec: 0x3fe0, 0x9ed: 0xa000, 0x9ee: 0x3fe8, 0x9ef: 0xa000,\n\t0x9f0: 0x3ff0, 0x9f1: 0xa000, 0x9f2: 0x3ff8, 0x9f3: 0xa000, 0x9f4: 0x4000, 0x9f5: 0xa000,\n\t0x9f6: 0x4008, 0x9f7: 0xa000, 0x9f8: 0x4010, 0x9f9: 0xa000, 0x9fa: 0x4018, 0x9fb: 0xa000,\n\t0x9fc: 0x4020, 0x9fd: 0xa000, 0x9fe: 0x4028, 0x9ff: 0xa000,\n\t// Block 0x28, offset 0xa00\n\t0xa00: 0x4030, 0xa01: 0xa000, 0xa02: 0x4038, 0xa04: 0xa000, 0xa05: 0x4040,\n\t0xa06: 0xa000, 0xa07: 0x4048, 0xa08: 0xa000, 0xa09: 0x4050,\n\t0xa0f: 0xa000, 0xa10: 0x4058, 0xa11: 0x4060,\n\t0xa12: 0xa000, 0xa13: 0x4068, 0xa14: 0x4070, 0xa15: 0xa000, 0xa16: 0x4078, 0xa17: 0x4080,\n\t0xa18: 0xa000, 0xa19: 0x4088, 0xa1a: 0x4090, 0xa1b: 0xa000, 0xa1c: 0x4098, 0xa1d: 0x40a0,\n\t0xa2f: 0xa000,\n\t0xa30: 0xa000, 0xa31: 0xa000, 0xa32: 0xa000, 0xa34: 0x3fd8,\n\t0xa37: 0x40a8, 0xa38: 0x40b0, 0xa39: 0x40b8, 0xa3a: 0x40c0,\n\t0xa3d: 0xa000, 0xa3e: 0x40c8, 0xa3f: 0x26c9,\n\t// Block 0x29, offset 0xa40\n\t0xa40: 0x0367, 0xa41: 0x032b, 0xa42: 0x032f, 0xa43: 0x0333, 0xa44: 0x037b, 0xa45: 0x0337,\n\t0xa46: 0x033b, 0xa47: 0x033f, 0xa48: 0x0343, 0xa49: 0x0347, 0xa4a: 0x034b, 0xa4b: 0x034f,\n\t0xa4c: 0x0353, 0xa4d: 0x0357, 0xa4e: 0x035b, 0xa4f: 0x49bd, 0xa50: 0x49c3, 0xa51: 0x49c9,\n\t0xa52: 0x49cf, 0xa53: 0x49d5, 0xa54: 0x49db, 0xa55: 0x49e1, 0xa56: 0x49e7, 0xa57: 0x49ed,\n\t0xa58: 0x49f3, 0xa59: 0x49f9, 0xa5a: 0x49ff, 0xa5b: 0x4a05, 0xa5c: 0x4a0b, 0xa5d: 0x4a11,\n\t0xa5e: 0x4a17, 0xa5f: 0x4a1d, 0xa60: 0x4a23, 0xa61: 0x4a29, 0xa62: 0x4a2f, 0xa63: 0x4a35,\n\t0xa64: 0x03c3, 0xa65: 0x035f, 0xa66: 0x0363, 0xa67: 0x03e7, 0xa68: 0x03eb, 0xa69: 0x03ef,\n\t0xa6a: 0x03f3, 0xa6b: 0x03f7, 0xa6c: 0x03fb, 0xa6d: 0x03ff, 0xa6e: 0x036b, 0xa6f: 0x0403,\n\t0xa70: 0x0407, 0xa71: 0x036f, 0xa72: 0x0373, 0xa73: 0x0377, 0xa74: 0x037f, 0xa75: 0x0383,\n\t0xa76: 0x0387, 0xa77: 0x038b, 0xa78: 0x038f, 0xa79: 0x0393, 0xa7a: 0x0397, 0xa7b: 0x039b,\n\t0xa7c: 0x039f, 0xa7d: 0x03a3, 0xa7e: 0x03a7, 0xa7f: 0x03ab,\n\t// Block 0x2a, offset 0xa80\n\t0xa80: 0x03af, 0xa81: 0x03b3, 0xa82: 0x040b, 0xa83: 0x040f, 0xa84: 0x03b7, 0xa85: 0x03bb,\n\t0xa86: 0x03bf, 0xa87: 0x03c7, 0xa88: 0x03cb, 0xa89: 0x03cf, 0xa8a: 0x03d3, 0xa8b: 0x03d7,\n\t0xa8c: 0x03db, 0xa8d: 0x03df, 0xa8e: 0x03e3,\n\t0xa92: 0x06bf, 0xa93: 0x071b, 0xa94: 0x06cb, 0xa95: 0x097b, 0xa96: 0x06cf, 0xa97: 0x06e7,\n\t0xa98: 0x06d3, 0xa99: 0x0f93, 0xa9a: 0x0707, 0xa9b: 0x06db, 0xa9c: 0x06c3, 0xa9d: 0x09ff,\n\t0xa9e: 0x098f, 0xa9f: 0x072f,\n\t// Block 0x2b, offset 0xac0\n\t0xac0: 0x2054, 0xac1: 0x205a, 0xac2: 0x2060, 0xac3: 0x2066, 0xac4: 0x206c, 0xac5: 0x2072,\n\t0xac6: 0x2078, 0xac7: 0x207e, 0xac8: 0x2084, 0xac9: 0x208a, 0xaca: 0x2090, 0xacb: 0x2096,\n\t0xacc: 0x209c, 0xacd: 0x20a2, 0xace: 0x2726, 0xacf: 0x272f, 0xad0: 0x2738, 0xad1: 0x2741,\n\t0xad2: 0x274a, 0xad3: 0x2753, 0xad4: 0x275c, 0xad5: 0x2765, 0xad6: 0x276e, 0xad7: 0x2780,\n\t0xad8: 0x2789, 0xad9: 0x2792, 0xada: 0x279b, 0xadb: 0x27a4, 0xadc: 0x2777, 0xadd: 0x2bac,\n\t0xade: 0x2aed, 0xae0: 0x20a8, 0xae1: 0x20c0, 0xae2: 0x20b4, 0xae3: 0x2108,\n\t0xae4: 0x20c6, 0xae5: 0x20e4, 0xae6: 0x20ae, 0xae7: 0x20de, 0xae8: 0x20ba, 0xae9: 0x20f0,\n\t0xaea: 0x2120, 0xaeb: 0x213e, 0xaec: 0x2138, 0xaed: 0x212c, 0xaee: 0x217a, 0xaef: 0x210e,\n\t0xaf0: 0x211a, 0xaf1: 0x2132, 0xaf2: 0x2126, 0xaf3: 0x2150, 0xaf4: 0x20fc, 0xaf5: 0x2144,\n\t0xaf6: 0x216e, 0xaf7: 0x2156, 0xaf8: 0x20ea, 0xaf9: 0x20cc, 0xafa: 0x2102, 0xafb: 0x2114,\n\t0xafc: 0x214a, 0xafd: 0x20d2, 0xafe: 0x2174, 0xaff: 0x20f6,\n\t// Block 0x2c, offset 0xb00\n\t0xb00: 0x215c, 0xb01: 0x20d8, 0xb02: 0x2162, 0xb03: 0x2168, 0xb04: 0x092f, 0xb05: 0x0b03,\n\t0xb06: 0x0ca7, 0xb07: 0x10c7,\n\t0xb10: 0x1bc4, 0xb11: 0x18a9,\n\t0xb12: 0x18ac, 0xb13: 0x18af, 0xb14: 0x18b2, 0xb15: 0x18b5, 0xb16: 0x18b8, 0xb17: 0x18bb,\n\t0xb18: 0x18be, 0xb19: 0x18c1, 0xb1a: 0x18ca, 0xb1b: 0x18cd, 0xb1c: 0x18d0, 0xb1d: 0x18d3,\n\t0xb1e: 0x18d6, 0xb1f: 0x18d9, 0xb20: 0x0313, 0xb21: 0x031b, 0xb22: 0x031f, 0xb23: 0x0327,\n\t0xb24: 0x032b, 0xb25: 0x032f, 0xb26: 0x0337, 0xb27: 0x033f, 0xb28: 0x0343, 0xb29: 0x034b,\n\t0xb2a: 0x034f, 0xb2b: 0x0353, 0xb2c: 0x0357, 0xb2d: 0x035b, 0xb2e: 0x2e18, 0xb2f: 0x2e20,\n\t0xb30: 0x2e28, 0xb31: 0x2e30, 0xb32: 0x2e38, 0xb33: 0x2e40, 0xb34: 0x2e48, 0xb35: 0x2e50,\n\t0xb36: 0x2e60, 0xb37: 0x2e68, 0xb38: 0x2e70, 0xb39: 0x2e78, 0xb3a: 0x2e80, 0xb3b: 0x2e88,\n\t0xb3c: 0x2ed3, 0xb3d: 0x2e9b, 0xb3e: 0x2e58,\n\t// Block 0x2d, offset 0xb40\n\t0xb40: 0x06bf, 0xb41: 0x071b, 0xb42: 0x06cb, 0xb43: 0x097b, 0xb44: 0x071f, 0xb45: 0x07af,\n\t0xb46: 0x06c7, 0xb47: 0x07ab, 0xb48: 0x070b, 0xb49: 0x0887, 0xb4a: 0x0d07, 0xb4b: 0x0e8f,\n\t0xb4c: 0x0dd7, 0xb4d: 0x0d1b, 0xb4e: 0x145f, 0xb4f: 0x098b, 0xb50: 0x0ccf, 0xb51: 0x0d4b,\n\t0xb52: 0x0d0b, 0xb53: 0x104b, 0xb54: 0x08fb, 0xb55: 0x0f03, 0xb56: 0x1387, 0xb57: 0x105f,\n\t0xb58: 0x0843, 0xb59: 0x108f, 0xb5a: 0x0f9b, 0xb5b: 0x0a17, 0xb5c: 0x140f, 0xb5d: 0x077f,\n\t0xb5e: 0x08ab, 0xb5f: 0x0df7, 0xb60: 0x1527, 0xb61: 0x0743, 0xb62: 0x07d3, 0xb63: 0x0d9b,\n\t0xb64: 0x06cf, 0xb65: 0x06e7, 0xb66: 0x06d3, 0xb67: 0x0adb, 0xb68: 0x08ef, 0xb69: 0x087f,\n\t0xb6a: 0x0a57, 0xb6b: 0x0a4b, 0xb6c: 0x0feb, 0xb6d: 0x073f, 0xb6e: 0x139b, 0xb6f: 0x089b,\n\t0xb70: 0x09f3, 0xb71: 0x18dc, 0xb72: 0x18df, 0xb73: 0x18e2, 0xb74: 0x18e5, 0xb75: 0x18ee,\n\t0xb76: 0x18f1, 0xb77: 0x18f4, 0xb78: 0x18f7, 0xb79: 0x18fa, 0xb7a: 0x18fd, 0xb7b: 0x1900,\n\t0xb7c: 0x1903, 0xb7d: 0x1906, 0xb7e: 0x1909, 0xb7f: 0x1912,\n\t// Block 0x2e, offset 0xb80\n\t0xb80: 0x1cc6, 0xb81: 0x1cd5, 0xb82: 0x1ce4, 0xb83: 0x1cf3, 0xb84: 0x1d02, 0xb85: 0x1d11,\n\t0xb86: 0x1d20, 0xb87: 0x1d2f, 0xb88: 0x1d3e, 0xb89: 0x218c, 0xb8a: 0x219e, 0xb8b: 0x21b0,\n\t0xb8c: 0x1954, 0xb8d: 0x1c04, 0xb8e: 0x19d2, 0xb8f: 0x1ba8, 0xb90: 0x04cb, 0xb91: 0x04d3,\n\t0xb92: 0x04db, 0xb93: 0x04e3, 0xb94: 0x04eb, 0xb95: 0x04ef, 0xb96: 0x04f3, 0xb97: 0x04f7,\n\t0xb98: 0x04fb, 0xb99: 0x04ff, 0xb9a: 0x0503, 0xb9b: 0x0507, 0xb9c: 0x050b, 0xb9d: 0x050f,\n\t0xb9e: 0x0513, 0xb9f: 0x0517, 0xba0: 0x051b, 0xba1: 0x0523, 0xba2: 0x0527, 0xba3: 0x052b,\n\t0xba4: 0x052f, 0xba5: 0x0533, 0xba6: 0x0537, 0xba7: 0x053b, 0xba8: 0x053f, 0xba9: 0x0543,\n\t0xbaa: 0x0547, 0xbab: 0x054b, 0xbac: 0x054f, 0xbad: 0x0553, 0xbae: 0x0557, 0xbaf: 0x055b,\n\t0xbb0: 0x055f, 0xbb1: 0x0563, 0xbb2: 0x0567, 0xbb3: 0x056f, 0xbb4: 0x0577, 0xbb5: 0x057f,\n\t0xbb6: 0x0583, 0xbb7: 0x0587, 0xbb8: 0x058b, 0xbb9: 0x058f, 0xbba: 0x0593, 0xbbb: 0x0597,\n\t0xbbc: 0x059b, 0xbbd: 0x059f, 0xbbe: 0x05a3,\n\t// Block 0x2f, offset 0xbc0\n\t0xbc0: 0x2b0c, 0xbc1: 0x29a8, 0xbc2: 0x2b1c, 0xbc3: 0x2880, 0xbc4: 0x2ee4, 0xbc5: 0x288a,\n\t0xbc6: 0x2894, 0xbc7: 0x2f28, 0xbc8: 0x29b5, 0xbc9: 0x289e, 0xbca: 0x28a8, 0xbcb: 0x28b2,\n\t0xbcc: 0x29dc, 0xbcd: 0x29e9, 0xbce: 0x29c2, 0xbcf: 0x29cf, 0xbd0: 0x2ea9, 0xbd1: 0x29f6,\n\t0xbd2: 0x2a03, 0xbd3: 0x2bbe, 0xbd4: 0x26bb, 0xbd5: 0x2bd1, 0xbd6: 0x2be4, 0xbd7: 0x2b2c,\n\t0xbd8: 0x2a10, 0xbd9: 0x2bf7, 0xbda: 0x2c0a, 0xbdb: 0x2a1d, 0xbdc: 0x28bc, 0xbdd: 0x28c6,\n\t0xbde: 0x2eb7, 0xbdf: 0x2a2a, 0xbe0: 0x2b3c, 0xbe1: 0x2ef5, 0xbe2: 0x28d0, 0xbe3: 0x28da,\n\t0xbe4: 0x2a37, 0xbe5: 0x28e4, 0xbe6: 0x28ee, 0xbe7: 0x26d0, 0xbe8: 0x26d7, 0xbe9: 0x28f8,\n\t0xbea: 0x2902, 0xbeb: 0x2c1d, 0xbec: 0x2a44, 0xbed: 0x2b4c, 0xbee: 0x2c30, 0xbef: 0x2a51,\n\t0xbf0: 0x2916, 0xbf1: 0x290c, 0xbf2: 0x2f3c, 0xbf3: 0x2a5e, 0xbf4: 0x2c43, 0xbf5: 0x2920,\n\t0xbf6: 0x2b5c, 0xbf7: 0x292a, 0xbf8: 0x2a78, 0xbf9: 0x2934, 0xbfa: 0x2a85, 0xbfb: 0x2f06,\n\t0xbfc: 0x2a6b, 0xbfd: 0x2b6c, 0xbfe: 0x2a92, 0xbff: 0x26de,\n\t// Block 0x30, offset 0xc00\n\t0xc00: 0x2f17, 0xc01: 0x293e, 0xc02: 0x2948, 0xc03: 0x2a9f, 0xc04: 0x2952, 0xc05: 0x295c,\n\t0xc06: 0x2966, 0xc07: 0x2b7c, 0xc08: 0x2aac, 0xc09: 0x26e5, 0xc0a: 0x2c56, 0xc0b: 0x2e90,\n\t0xc0c: 0x2b8c, 0xc0d: 0x2ab9, 0xc0e: 0x2ec5, 0xc0f: 0x2970, 0xc10: 0x297a, 0xc11: 0x2ac6,\n\t0xc12: 0x26ec, 0xc13: 0x2ad3, 0xc14: 0x2b9c, 0xc15: 0x26f3, 0xc16: 0x2c69, 0xc17: 0x2984,\n\t0xc18: 0x1cb7, 0xc19: 0x1ccb, 0xc1a: 0x1cda, 0xc1b: 0x1ce9, 0xc1c: 0x1cf8, 0xc1d: 0x1d07,\n\t0xc1e: 0x1d16, 0xc1f: 0x1d25, 0xc20: 0x1d34, 0xc21: 0x1d43, 0xc22: 0x2192, 0xc23: 0x21a4,\n\t0xc24: 0x21b6, 0xc25: 0x21c2, 0xc26: 0x21ce, 0xc27: 0x21da, 0xc28: 0x21e6, 0xc29: 0x21f2,\n\t0xc2a: 0x21fe, 0xc2b: 0x220a, 0xc2c: 0x2246, 0xc2d: 0x2252, 0xc2e: 0x225e, 0xc2f: 0x226a,\n\t0xc30: 0x2276, 0xc31: 0x1c14, 0xc32: 0x19c6, 0xc33: 0x1936, 0xc34: 0x1be4, 0xc35: 0x1a47,\n\t0xc36: 0x1a56, 0xc37: 0x19cc, 0xc38: 0x1bfc, 0xc39: 0x1c00, 0xc3a: 0x1960, 0xc3b: 0x2701,\n\t0xc3c: 0x270f, 0xc3d: 0x26fa, 0xc3e: 0x2708, 0xc3f: 0x2ae0,\n\t// Block 0x31, offset 0xc40\n\t0xc40: 0x1a4a, 0xc41: 0x1a32, 0xc42: 0x1c60, 0xc43: 0x1a1a, 0xc44: 0x19f3, 0xc45: 0x1969,\n\t0xc46: 0x1978, 0xc47: 0x1948, 0xc48: 0x1bf0, 0xc49: 0x1d52, 0xc4a: 0x1a4d, 0xc4b: 0x1a35,\n\t0xc4c: 0x1c64, 0xc4d: 0x1c70, 0xc4e: 0x1a26, 0xc4f: 0x19fc, 0xc50: 0x1957, 0xc51: 0x1c1c,\n\t0xc52: 0x1bb0, 0xc53: 0x1b9c, 0xc54: 0x1bcc, 0xc55: 0x1c74, 0xc56: 0x1a29, 0xc57: 0x19c9,\n\t0xc58: 0x19ff, 0xc59: 0x19de, 0xc5a: 0x1a41, 0xc5b: 0x1c78, 0xc5c: 0x1a2c, 0xc5d: 0x19c0,\n\t0xc5e: 0x1a02, 0xc5f: 0x1c3c, 0xc60: 0x1bf4, 0xc61: 0x1a14, 0xc62: 0x1c24, 0xc63: 0x1c40,\n\t0xc64: 0x1bf8, 0xc65: 0x1a17, 0xc66: 0x1c28, 0xc67: 0x22e8, 0xc68: 0x22fc, 0xc69: 0x1996,\n\t0xc6a: 0x1c20, 0xc6b: 0x1bb4, 0xc6c: 0x1ba0, 0xc6d: 0x1c48, 0xc6e: 0x2716, 0xc6f: 0x27ad,\n\t0xc70: 0x1a59, 0xc71: 0x1a44, 0xc72: 0x1c7c, 0xc73: 0x1a2f, 0xc74: 0x1a50, 0xc75: 0x1a38,\n\t0xc76: 0x1c68, 0xc77: 0x1a1d, 0xc78: 0x19f6, 0xc79: 0x1981, 0xc7a: 0x1a53, 0xc7b: 0x1a3b,\n\t0xc7c: 0x1c6c, 0xc7d: 0x1a20, 0xc7e: 0x19f9, 0xc7f: 0x1984,\n\t// Block 0x32, offset 0xc80\n\t0xc80: 0x1c2c, 0xc81: 0x1bb8, 0xc82: 0x1d4d, 0xc83: 0x1939, 0xc84: 0x19ba, 0xc85: 0x19bd,\n\t0xc86: 0x22f5, 0xc87: 0x1b94, 0xc88: 0x19c3, 0xc89: 0x194b, 0xc8a: 0x19e1, 0xc8b: 0x194e,\n\t0xc8c: 0x19ea, 0xc8d: 0x196c, 0xc8e: 0x196f, 0xc8f: 0x1a05, 0xc90: 0x1a0b, 0xc91: 0x1a0e,\n\t0xc92: 0x1c30, 0xc93: 0x1a11, 0xc94: 0x1a23, 0xc95: 0x1c38, 0xc96: 0x1c44, 0xc97: 0x1990,\n\t0xc98: 0x1d57, 0xc99: 0x1bbc, 0xc9a: 0x1993, 0xc9b: 0x1a5c, 0xc9c: 0x19a5, 0xc9d: 0x19b4,\n\t0xc9e: 0x22e2, 0xc9f: 0x22dc, 0xca0: 0x1cc1, 0xca1: 0x1cd0, 0xca2: 0x1cdf, 0xca3: 0x1cee,\n\t0xca4: 0x1cfd, 0xca5: 0x1d0c, 0xca6: 0x1d1b, 0xca7: 0x1d2a, 0xca8: 0x1d39, 0xca9: 0x2186,\n\t0xcaa: 0x2198, 0xcab: 0x21aa, 0xcac: 0x21bc, 0xcad: 0x21c8, 0xcae: 0x21d4, 0xcaf: 0x21e0,\n\t0xcb0: 0x21ec, 0xcb1: 0x21f8, 0xcb2: 0x2204, 0xcb3: 0x2240, 0xcb4: 0x224c, 0xcb5: 0x2258,\n\t0xcb6: 0x2264, 0xcb7: 0x2270, 0xcb8: 0x227c, 0xcb9: 0x2282, 0xcba: 0x2288, 0xcbb: 0x228e,\n\t0xcbc: 0x2294, 0xcbd: 0x22a6, 0xcbe: 0x22ac, 0xcbf: 0x1c10,\n\t// Block 0x33, offset 0xcc0\n\t0xcc0: 0x1377, 0xcc1: 0x0cfb, 0xcc2: 0x13d3, 0xcc3: 0x139f, 0xcc4: 0x0e57, 0xcc5: 0x06eb,\n\t0xcc6: 0x08df, 0xcc7: 0x162b, 0xcc8: 0x162b, 0xcc9: 0x0a0b, 0xcca: 0x145f, 0xccb: 0x0943,\n\t0xccc: 0x0a07, 0xccd: 0x0bef, 0xcce: 0x0fcf, 0xccf: 0x115f, 0xcd0: 0x1297, 0xcd1: 0x12d3,\n\t0xcd2: 0x1307, 0xcd3: 0x141b, 0xcd4: 0x0d73, 0xcd5: 0x0dff, 0xcd6: 0x0eab, 0xcd7: 0x0f43,\n\t0xcd8: 0x125f, 0xcd9: 0x1447, 0xcda: 0x1573, 0xcdb: 0x070f, 0xcdc: 0x08b3, 0xcdd: 0x0d87,\n\t0xcde: 0x0ecf, 0xcdf: 0x1293, 0xce0: 0x15c3, 0xce1: 0x0ab3, 0xce2: 0x0e77, 0xce3: 0x1283,\n\t0xce4: 0x1317, 0xce5: 0x0c23, 0xce6: 0x11bb, 0xce7: 0x12df, 0xce8: 0x0b1f, 0xce9: 0x0d0f,\n\t0xcea: 0x0e17, 0xceb: 0x0f1b, 0xcec: 0x1427, 0xced: 0x074f, 0xcee: 0x07e7, 0xcef: 0x0853,\n\t0xcf0: 0x0c8b, 0xcf1: 0x0d7f, 0xcf2: 0x0ecb, 0xcf3: 0x0fef, 0xcf4: 0x1177, 0xcf5: 0x128b,\n\t0xcf6: 0x12a3, 0xcf7: 0x13c7, 0xcf8: 0x14ef, 0xcf9: 0x15a3, 0xcfa: 0x15bf, 0xcfb: 0x102b,\n\t0xcfc: 0x106b, 0xcfd: 0x1123, 0xcfe: 0x1243, 0xcff: 0x147b,\n\t// Block 0x34, offset 0xd00\n\t0xd00: 0x15cb, 0xd01: 0x134b, 0xd02: 0x09c7, 0xd03: 0x0b3b, 0xd04: 0x10db, 0xd05: 0x119b,\n\t0xd06: 0x0eff, 0xd07: 0x1033, 0xd08: 0x1397, 0xd09: 0x14e7, 0xd0a: 0x09c3, 0xd0b: 0x0a8f,\n\t0xd0c: 0x0d77, 0xd0d: 0x0e2b, 0xd0e: 0x0e5f, 0xd0f: 0x1113, 0xd10: 0x113b, 0xd11: 0x14a7,\n\t0xd12: 0x084f, 0xd13: 0x11a7, 0xd14: 0x07f3, 0xd15: 0x07ef, 0xd16: 0x1097, 0xd17: 0x1127,\n\t0xd18: 0x125b, 0xd19: 0x14af, 0xd1a: 0x1367, 0xd1b: 0x0c27, 0xd1c: 0x0d73, 0xd1d: 0x1357,\n\t0xd1e: 0x06f7, 0xd1f: 0x0a63, 0xd20: 0x0b93, 0xd21: 0x0f2f, 0xd22: 0x0faf, 0xd23: 0x0873,\n\t0xd24: 0x103b, 0xd25: 0x075f, 0xd26: 0x0b77, 0xd27: 0x06d7, 0xd28: 0x0deb, 0xd29: 0x0ca3,\n\t0xd2a: 0x110f, 0xd2b: 0x08c7, 0xd2c: 0x09b3, 0xd2d: 0x0ffb, 0xd2e: 0x1263, 0xd2f: 0x133b,\n\t0xd30: 0x0db7, 0xd31: 0x13f7, 0xd32: 0x0de3, 0xd33: 0x0c37, 0xd34: 0x121b, 0xd35: 0x0c57,\n\t0xd36: 0x0fab, 0xd37: 0x072b, 0xd38: 0x07a7, 0xd39: 0x07eb, 0xd3a: 0x0d53, 0xd3b: 0x10fb,\n\t0xd3c: 0x11f3, 0xd3d: 0x1347, 0xd3e: 0x145b, 0xd3f: 0x085b,\n\t// Block 0x35, offset 0xd40\n\t0xd40: 0x090f, 0xd41: 0x0a17, 0xd42: 0x0b2f, 0xd43: 0x0cbf, 0xd44: 0x0e7b, 0xd45: 0x103f,\n\t0xd46: 0x1497, 0xd47: 0x157b, 0xd48: 0x15cf, 0xd49: 0x15e7, 0xd4a: 0x0837, 0xd4b: 0x0cf3,\n\t0xd4c: 0x0da3, 0xd4d: 0x13eb, 0xd4e: 0x0afb, 0xd4f: 0x0bd7, 0xd50: 0x0bf3, 0xd51: 0x0c83,\n\t0xd52: 0x0e6b, 0xd53: 0x0eb7, 0xd54: 0x0f67, 0xd55: 0x108b, 0xd56: 0x112f, 0xd57: 0x1193,\n\t0xd58: 0x13db, 0xd59: 0x126b, 0xd5a: 0x1403, 0xd5b: 0x147f, 0xd5c: 0x080f, 0xd5d: 0x083b,\n\t0xd5e: 0x0923, 0xd5f: 0x0ea7, 0xd60: 0x12f3, 0xd61: 0x133b, 0xd62: 0x0b1b, 0xd63: 0x0b8b,\n\t0xd64: 0x0c4f, 0xd65: 0x0daf, 0xd66: 0x10d7, 0xd67: 0x0f23, 0xd68: 0x073b, 0xd69: 0x097f,\n\t0xd6a: 0x0a63, 0xd6b: 0x0ac7, 0xd6c: 0x0b97, 0xd6d: 0x0f3f, 0xd6e: 0x0f5b, 0xd6f: 0x116b,\n\t0xd70: 0x118b, 0xd71: 0x1463, 0xd72: 0x14e3, 0xd73: 0x14f3, 0xd74: 0x152f, 0xd75: 0x0753,\n\t0xd76: 0x107f, 0xd77: 0x144f, 0xd78: 0x14cb, 0xd79: 0x0baf, 0xd7a: 0x0717, 0xd7b: 0x0777,\n\t0xd7c: 0x0a67, 0xd7d: 0x0a87, 0xd7e: 0x0caf, 0xd7f: 0x0d73,\n\t// Block 0x36, offset 0xd80\n\t0xd80: 0x0ec3, 0xd81: 0x0fcb, 0xd82: 0x1277, 0xd83: 0x1417, 0xd84: 0x1623, 0xd85: 0x0ce3,\n\t0xd86: 0x14a3, 0xd87: 0x0833, 0xd88: 0x0d2f, 0xd89: 0x0d3b, 0xd8a: 0x0e0f, 0xd8b: 0x0e47,\n\t0xd8c: 0x0f4b, 0xd8d: 0x0fa7, 0xd8e: 0x1027, 0xd8f: 0x110b, 0xd90: 0x153b, 0xd91: 0x07af,\n\t0xd92: 0x0c03, 0xd93: 0x14b3, 0xd94: 0x0767, 0xd95: 0x0aab, 0xd96: 0x0e2f, 0xd97: 0x13df,\n\t0xd98: 0x0b67, 0xd99: 0x0bb7, 0xd9a: 0x0d43, 0xd9b: 0x0f2f, 0xd9c: 0x14bb, 0xd9d: 0x0817,\n\t0xd9e: 0x08ff, 0xd9f: 0x0a97, 0xda0: 0x0cd3, 0xda1: 0x0d1f, 0xda2: 0x0d5f, 0xda3: 0x0df3,\n\t0xda4: 0x0f47, 0xda5: 0x0fbb, 0xda6: 0x1157, 0xda7: 0x12f7, 0xda8: 0x1303, 0xda9: 0x1457,\n\t0xdaa: 0x14d7, 0xdab: 0x0883, 0xdac: 0x0e4b, 0xdad: 0x0903, 0xdae: 0x0ec7, 0xdaf: 0x0f6b,\n\t0xdb0: 0x1287, 0xdb1: 0x14bf, 0xdb2: 0x15ab, 0xdb3: 0x15d3, 0xdb4: 0x0d37, 0xdb5: 0x0e27,\n\t0xdb6: 0x11c3, 0xdb7: 0x10b7, 0xdb8: 0x10c3, 0xdb9: 0x10e7, 0xdba: 0x0f17, 0xdbb: 0x0e9f,\n\t0xdbc: 0x1363, 0xdbd: 0x0733, 0xdbe: 0x122b, 0xdbf: 0x081b,\n\t// Block 0x37, offset 0xdc0\n\t0xdc0: 0x080b, 0xdc1: 0x0b0b, 0xdc2: 0x0c2b, 0xdc3: 0x10f3, 0xdc4: 0x0a53, 0xdc5: 0x0e03,\n\t0xdc6: 0x0cef, 0xdc7: 0x13e7, 0xdc8: 0x12e7, 0xdc9: 0x14ab, 0xdca: 0x1323, 0xdcb: 0x0b27,\n\t0xdcc: 0x0787, 0xdcd: 0x095b, 0xdd0: 0x09af,\n\t0xdd2: 0x0cdf, 0xdd5: 0x07f7, 0xdd6: 0x0f1f, 0xdd7: 0x0fe3,\n\t0xdd8: 0x1047, 0xdd9: 0x1063, 0xdda: 0x1067, 0xddb: 0x107b, 0xddc: 0x14fb, 0xddd: 0x10eb,\n\t0xdde: 0x116f, 0xde0: 0x128f, 0xde2: 0x1353,\n\t0xde5: 0x1407, 0xde6: 0x1433,\n\t0xdea: 0x154f, 0xdeb: 0x1553, 0xdec: 0x1557, 0xded: 0x15bb, 0xdee: 0x142b, 0xdef: 0x14c7,\n\t0xdf0: 0x0757, 0xdf1: 0x077b, 0xdf2: 0x078f, 0xdf3: 0x084b, 0xdf4: 0x0857, 0xdf5: 0x0897,\n\t0xdf6: 0x094b, 0xdf7: 0x0967, 0xdf8: 0x096f, 0xdf9: 0x09ab, 0xdfa: 0x09b7, 0xdfb: 0x0a93,\n\t0xdfc: 0x0a9b, 0xdfd: 0x0ba3, 0xdfe: 0x0bcb, 0xdff: 0x0bd3,\n\t// Block 0x38, offset 0xe00\n\t0xe00: 0x0beb, 0xe01: 0x0c97, 0xe02: 0x0cc7, 0xe03: 0x0ce7, 0xe04: 0x0d57, 0xe05: 0x0e1b,\n\t0xe06: 0x0e37, 0xe07: 0x0e67, 0xe08: 0x0ebb, 0xe09: 0x0edb, 0xe0a: 0x0f4f, 0xe0b: 0x102f,\n\t0xe0c: 0x104b, 0xe0d: 0x1053, 0xe0e: 0x104f, 0xe0f: 0x1057, 0xe10: 0x105b, 0xe11: 0x105f,\n\t0xe12: 0x1073, 0xe13: 0x1077, 0xe14: 0x109b, 0xe15: 0x10af, 0xe16: 0x10cb, 0xe17: 0x112f,\n\t0xe18: 0x1137, 0xe19: 0x113f, 0xe1a: 0x1153, 0xe1b: 0x117b, 0xe1c: 0x11cb, 0xe1d: 0x11ff,\n\t0xe1e: 0x11ff, 0xe1f: 0x1267, 0xe20: 0x130f, 0xe21: 0x1327, 0xe22: 0x135b, 0xe23: 0x135f,\n\t0xe24: 0x13a3, 0xe25: 0x13a7, 0xe26: 0x13ff, 0xe27: 0x1407, 0xe28: 0x14db, 0xe29: 0x151f,\n\t0xe2a: 0x1537, 0xe2b: 0x0b9b, 0xe2c: 0x171e, 0xe2d: 0x11e3,\n\t0xe30: 0x06df, 0xe31: 0x07e3, 0xe32: 0x07a3, 0xe33: 0x074b, 0xe34: 0x078b, 0xe35: 0x07b7,\n\t0xe36: 0x0847, 0xe37: 0x0863, 0xe38: 0x094b, 0xe39: 0x0937, 0xe3a: 0x0947, 0xe3b: 0x0963,\n\t0xe3c: 0x09af, 0xe3d: 0x09bf, 0xe3e: 0x0a03, 0xe3f: 0x0a0f,\n\t// Block 0x39, offset 0xe40\n\t0xe40: 0x0a2b, 0xe41: 0x0a3b, 0xe42: 0x0b23, 0xe43: 0x0b2b, 0xe44: 0x0b5b, 0xe45: 0x0b7b,\n\t0xe46: 0x0bab, 0xe47: 0x0bc3, 0xe48: 0x0bb3, 0xe49: 0x0bd3, 0xe4a: 0x0bc7, 0xe4b: 0x0beb,\n\t0xe4c: 0x0c07, 0xe4d: 0x0c5f, 0xe4e: 0x0c6b, 0xe4f: 0x0c73, 0xe50: 0x0c9b, 0xe51: 0x0cdf,\n\t0xe52: 0x0d0f, 0xe53: 0x0d13, 0xe54: 0x0d27, 0xe55: 0x0da7, 0xe56: 0x0db7, 0xe57: 0x0e0f,\n\t0xe58: 0x0e5b, 0xe59: 0x0e53, 0xe5a: 0x0e67, 0xe5b: 0x0e83, 0xe5c: 0x0ebb, 0xe5d: 0x1013,\n\t0xe5e: 0x0edf, 0xe5f: 0x0f13, 0xe60: 0x0f1f, 0xe61: 0x0f5f, 0xe62: 0x0f7b, 0xe63: 0x0f9f,\n\t0xe64: 0x0fc3, 0xe65: 0x0fc7, 0xe66: 0x0fe3, 0xe67: 0x0fe7, 0xe68: 0x0ff7, 0xe69: 0x100b,\n\t0xe6a: 0x1007, 0xe6b: 0x1037, 0xe6c: 0x10b3, 0xe6d: 0x10cb, 0xe6e: 0x10e3, 0xe6f: 0x111b,\n\t0xe70: 0x112f, 0xe71: 0x114b, 0xe72: 0x117b, 0xe73: 0x122f, 0xe74: 0x1257, 0xe75: 0x12cb,\n\t0xe76: 0x1313, 0xe77: 0x131f, 0xe78: 0x1327, 0xe79: 0x133f, 0xe7a: 0x1353, 0xe7b: 0x1343,\n\t0xe7c: 0x135b, 0xe7d: 0x1357, 0xe7e: 0x134f, 0xe7f: 0x135f,\n\t// Block 0x3a, offset 0xe80\n\t0xe80: 0x136b, 0xe81: 0x13a7, 0xe82: 0x13e3, 0xe83: 0x1413, 0xe84: 0x144b, 0xe85: 0x146b,\n\t0xe86: 0x14b7, 0xe87: 0x14db, 0xe88: 0x14fb, 0xe89: 0x150f, 0xe8a: 0x151f, 0xe8b: 0x152b,\n\t0xe8c: 0x1537, 0xe8d: 0x158b, 0xe8e: 0x162b, 0xe8f: 0x16b5, 0xe90: 0x16b0, 0xe91: 0x16e2,\n\t0xe92: 0x0607, 0xe93: 0x062f, 0xe94: 0x0633, 0xe95: 0x1764, 0xe96: 0x1791, 0xe97: 0x1809,\n\t0xe98: 0x1617, 0xe99: 0x1627,\n\t// Block 0x3b, offset 0xec0\n\t0xec0: 0x19d5, 0xec1: 0x19d8, 0xec2: 0x19db, 0xec3: 0x1c08, 0xec4: 0x1c0c, 0xec5: 0x1a5f,\n\t0xec6: 0x1a5f,\n\t0xed3: 0x1d75, 0xed4: 0x1d66, 0xed5: 0x1d6b, 0xed6: 0x1d7a, 0xed7: 0x1d70,\n\t0xedd: 0x4390,\n\t0xede: 0x8115, 0xedf: 0x4402, 0xee0: 0x022d, 0xee1: 0x0215, 0xee2: 0x021e, 0xee3: 0x0221,\n\t0xee4: 0x0224, 0xee5: 0x0227, 0xee6: 0x022a, 0xee7: 0x0230, 0xee8: 0x0233, 0xee9: 0x0017,\n\t0xeea: 0x43f0, 0xeeb: 0x43f6, 0xeec: 0x44f4, 0xeed: 0x44fc, 0xeee: 0x4348, 0xeef: 0x434e,\n\t0xef0: 0x4354, 0xef1: 0x435a, 0xef2: 0x4366, 0xef3: 0x436c, 0xef4: 0x4372, 0xef5: 0x437e,\n\t0xef6: 0x4384, 0xef8: 0x438a, 0xef9: 0x4396, 0xefa: 0x439c, 0xefb: 0x43a2,\n\t0xefc: 0x43ae, 0xefe: 0x43b4,\n\t// Block 0x3c, offset 0xf00\n\t0xf00: 0x43ba, 0xf01: 0x43c0, 0xf03: 0x43c6, 0xf04: 0x43cc,\n\t0xf06: 0x43d8, 0xf07: 0x43de, 0xf08: 0x43e4, 0xf09: 0x43ea, 0xf0a: 0x43fc, 0xf0b: 0x4378,\n\t0xf0c: 0x4360, 0xf0d: 0x43a8, 0xf0e: 0x43d2, 0xf0f: 0x1d7f, 0xf10: 0x0299, 0xf11: 0x0299,\n\t0xf12: 0x02a2, 0xf13: 0x02a2, 0xf14: 0x02a2, 0xf15: 0x02a2, 0xf16: 0x02a5, 0xf17: 0x02a5,\n\t0xf18: 0x02a5, 0xf19: 0x02a5, 0xf1a: 0x02ab, 0xf1b: 0x02ab, 0xf1c: 0x02ab, 0xf1d: 0x02ab,\n\t0xf1e: 0x029f, 0xf1f: 0x029f, 0xf20: 0x029f, 0xf21: 0x029f, 0xf22: 0x02a8, 0xf23: 0x02a8,\n\t0xf24: 0x02a8, 0xf25: 0x02a8, 0xf26: 0x029c, 0xf27: 0x029c, 0xf28: 0x029c, 0xf29: 0x029c,\n\t0xf2a: 0x02cf, 0xf2b: 0x02cf, 0xf2c: 0x02cf, 0xf2d: 0x02cf, 0xf2e: 0x02d2, 0xf2f: 0x02d2,\n\t0xf30: 0x02d2, 0xf31: 0x02d2, 0xf32: 0x02b1, 0xf33: 0x02b1, 0xf34: 0x02b1, 0xf35: 0x02b1,\n\t0xf36: 0x02ae, 0xf37: 0x02ae, 0xf38: 0x02ae, 0xf39: 0x02ae, 0xf3a: 0x02b4, 0xf3b: 0x02b4,\n\t0xf3c: 0x02b4, 0xf3d: 0x02b4, 0xf3e: 0x02b7, 0xf3f: 0x02b7,\n\t// Block 0x3d, offset 0xf40\n\t0xf40: 0x02b7, 0xf41: 0x02b7, 0xf42: 0x02c0, 0xf43: 0x02c0, 0xf44: 0x02bd, 0xf45: 0x02bd,\n\t0xf46: 0x02c3, 0xf47: 0x02c3, 0xf48: 0x02ba, 0xf49: 0x02ba, 0xf4a: 0x02c9, 0xf4b: 0x02c9,\n\t0xf4c: 0x02c6, 0xf4d: 0x02c6, 0xf4e: 0x02d5, 0xf4f: 0x02d5, 0xf50: 0x02d5, 0xf51: 0x02d5,\n\t0xf52: 0x02db, 0xf53: 0x02db, 0xf54: 0x02db, 0xf55: 0x02db, 0xf56: 0x02e1, 0xf57: 0x02e1,\n\t0xf58: 0x02e1, 0xf59: 0x02e1, 0xf5a: 0x02de, 0xf5b: 0x02de, 0xf5c: 0x02de, 0xf5d: 0x02de,\n\t0xf5e: 0x02e4, 0xf5f: 0x02e4, 0xf60: 0x02e7, 0xf61: 0x02e7, 0xf62: 0x02e7, 0xf63: 0x02e7,\n\t0xf64: 0x446e, 0xf65: 0x446e, 0xf66: 0x02ed, 0xf67: 0x02ed, 0xf68: 0x02ed, 0xf69: 0x02ed,\n\t0xf6a: 0x02ea, 0xf6b: 0x02ea, 0xf6c: 0x02ea, 0xf6d: 0x02ea, 0xf6e: 0x0308, 0xf6f: 0x0308,\n\t0xf70: 0x4468, 0xf71: 0x4468,\n\t// Block 0x3e, offset 0xf80\n\t0xf93: 0x02d8, 0xf94: 0x02d8, 0xf95: 0x02d8, 0xf96: 0x02d8, 0xf97: 0x02f6,\n\t0xf98: 0x02f6, 0xf99: 0x02f3, 0xf9a: 0x02f3, 0xf9b: 0x02f9, 0xf9c: 0x02f9, 0xf9d: 0x204f,\n\t0xf9e: 0x02ff, 0xf9f: 0x02ff, 0xfa0: 0x02f0, 0xfa1: 0x02f0, 0xfa2: 0x02fc, 0xfa3: 0x02fc,\n\t0xfa4: 0x0305, 0xfa5: 0x0305, 0xfa6: 0x0305, 0xfa7: 0x0305, 0xfa8: 0x028d, 0xfa9: 0x028d,\n\t0xfaa: 0x25aa, 0xfab: 0x25aa, 0xfac: 0x261a, 0xfad: 0x261a, 0xfae: 0x25e9, 0xfaf: 0x25e9,\n\t0xfb0: 0x2605, 0xfb1: 0x2605, 0xfb2: 0x25fe, 0xfb3: 0x25fe, 0xfb4: 0x260c, 0xfb5: 0x260c,\n\t0xfb6: 0x2613, 0xfb7: 0x2613, 0xfb8: 0x2613, 0xfb9: 0x25f0, 0xfba: 0x25f0, 0xfbb: 0x25f0,\n\t0xfbc: 0x0302, 0xfbd: 0x0302, 0xfbe: 0x0302, 0xfbf: 0x0302,\n\t// Block 0x3f, offset 0xfc0\n\t0xfc0: 0x25b1, 0xfc1: 0x25b8, 0xfc2: 0x25d4, 0xfc3: 0x25f0, 0xfc4: 0x25f7, 0xfc5: 0x1d89,\n\t0xfc6: 0x1d8e, 0xfc7: 0x1d93, 0xfc8: 0x1da2, 0xfc9: 0x1db1, 0xfca: 0x1db6, 0xfcb: 0x1dbb,\n\t0xfcc: 0x1dc0, 0xfcd: 0x1dc5, 0xfce: 0x1dd4, 0xfcf: 0x1de3, 0xfd0: 0x1de8, 0xfd1: 0x1ded,\n\t0xfd2: 0x1dfc, 0xfd3: 0x1e0b, 0xfd4: 0x1e10, 0xfd5: 0x1e15, 0xfd6: 0x1e1a, 0xfd7: 0x1e29,\n\t0xfd8: 0x1e2e, 0xfd9: 0x1e3d, 0xfda: 0x1e42, 0xfdb: 0x1e47, 0xfdc: 0x1e56, 0xfdd: 0x1e5b,\n\t0xfde: 0x1e60, 0xfdf: 0x1e6a, 0xfe0: 0x1ea6, 0xfe1: 0x1eb5, 0xfe2: 0x1ec4, 0xfe3: 0x1ec9,\n\t0xfe4: 0x1ece, 0xfe5: 0x1ed8, 0xfe6: 0x1ee7, 0xfe7: 0x1eec, 0xfe8: 0x1efb, 0xfe9: 0x1f00,\n\t0xfea: 0x1f05, 0xfeb: 0x1f14, 0xfec: 0x1f19, 0xfed: 0x1f28, 0xfee: 0x1f2d, 0xfef: 0x1f32,\n\t0xff0: 0x1f37, 0xff1: 0x1f3c, 0xff2: 0x1f41, 0xff3: 0x1f46, 0xff4: 0x1f4b, 0xff5: 0x1f50,\n\t0xff6: 0x1f55, 0xff7: 0x1f5a, 0xff8: 0x1f5f, 0xff9: 0x1f64, 0xffa: 0x1f69, 0xffb: 0x1f6e,\n\t0xffc: 0x1f73, 0xffd: 0x1f78, 0xffe: 0x1f7d, 0xfff: 0x1f87,\n\t// Block 0x40, offset 0x1000\n\t0x1000: 0x1f8c, 0x1001: 0x1f91, 0x1002: 0x1f96, 0x1003: 0x1fa0, 0x1004: 0x1fa5, 0x1005: 0x1faf,\n\t0x1006: 0x1fb4, 0x1007: 0x1fb9, 0x1008: 0x1fbe, 0x1009: 0x1fc3, 0x100a: 0x1fc8, 0x100b: 0x1fcd,\n\t0x100c: 0x1fd2, 0x100d: 0x1fd7, 0x100e: 0x1fe6, 0x100f: 0x1ff5, 0x1010: 0x1ffa, 0x1011: 0x1fff,\n\t0x1012: 0x2004, 0x1013: 0x2009, 0x1014: 0x200e, 0x1015: 0x2018, 0x1016: 0x201d, 0x1017: 0x2022,\n\t0x1018: 0x2031, 0x1019: 0x2040, 0x101a: 0x2045, 0x101b: 0x4420, 0x101c: 0x4426, 0x101d: 0x445c,\n\t0x101e: 0x44b3, 0x101f: 0x44ba, 0x1020: 0x44c1, 0x1021: 0x44c8, 0x1022: 0x44cf, 0x1023: 0x44d6,\n\t0x1024: 0x25c6, 0x1025: 0x25cd, 0x1026: 0x25d4, 0x1027: 0x25db, 0x1028: 0x25f0, 0x1029: 0x25f7,\n\t0x102a: 0x1d98, 0x102b: 0x1d9d, 0x102c: 0x1da2, 0x102d: 0x1da7, 0x102e: 0x1db1, 0x102f: 0x1db6,\n\t0x1030: 0x1dca, 0x1031: 0x1dcf, 0x1032: 0x1dd4, 0x1033: 0x1dd9, 0x1034: 0x1de3, 0x1035: 0x1de8,\n\t0x1036: 0x1df2, 0x1037: 0x1df7, 0x1038: 0x1dfc, 0x1039: 0x1e01, 0x103a: 0x1e0b, 0x103b: 0x1e10,\n\t0x103c: 0x1f3c, 0x103d: 0x1f41, 0x103e: 0x1f50, 0x103f: 0x1f55,\n\t// Block 0x41, offset 0x1040\n\t0x1040: 0x1f5a, 0x1041: 0x1f6e, 0x1042: 0x1f73, 0x1043: 0x1f78, 0x1044: 0x1f7d, 0x1045: 0x1f96,\n\t0x1046: 0x1fa0, 0x1047: 0x1fa5, 0x1048: 0x1faa, 0x1049: 0x1fbe, 0x104a: 0x1fdc, 0x104b: 0x1fe1,\n\t0x104c: 0x1fe6, 0x104d: 0x1feb, 0x104e: 0x1ff5, 0x104f: 0x1ffa, 0x1050: 0x445c, 0x1051: 0x2027,\n\t0x1052: 0x202c, 0x1053: 0x2031, 0x1054: 0x2036, 0x1055: 0x2040, 0x1056: 0x2045, 0x1057: 0x25b1,\n\t0x1058: 0x25b8, 0x1059: 0x25bf, 0x105a: 0x25d4, 0x105b: 0x25e2, 0x105c: 0x1d89, 0x105d: 0x1d8e,\n\t0x105e: 0x1d93, 0x105f: 0x1da2, 0x1060: 0x1dac, 0x1061: 0x1dbb, 0x1062: 0x1dc0, 0x1063: 0x1dc5,\n\t0x1064: 0x1dd4, 0x1065: 0x1dde, 0x1066: 0x1dfc, 0x1067: 0x1e15, 0x1068: 0x1e1a, 0x1069: 0x1e29,\n\t0x106a: 0x1e2e, 0x106b: 0x1e3d, 0x106c: 0x1e47, 0x106d: 0x1e56, 0x106e: 0x1e5b, 0x106f: 0x1e60,\n\t0x1070: 0x1e6a, 0x1071: 0x1ea6, 0x1072: 0x1eab, 0x1073: 0x1eb5, 0x1074: 0x1ec4, 0x1075: 0x1ec9,\n\t0x1076: 0x1ece, 0x1077: 0x1ed8, 0x1078: 0x1ee7, 0x1079: 0x1efb, 0x107a: 0x1f00, 0x107b: 0x1f05,\n\t0x107c: 0x1f14, 0x107d: 0x1f19, 0x107e: 0x1f28, 0x107f: 0x1f2d,\n\t// Block 0x42, offset 0x1080\n\t0x1080: 0x1f32, 0x1081: 0x1f37, 0x1082: 0x1f46, 0x1083: 0x1f4b, 0x1084: 0x1f5f, 0x1085: 0x1f64,\n\t0x1086: 0x1f69, 0x1087: 0x1f6e, 0x1088: 0x1f73, 0x1089: 0x1f87, 0x108a: 0x1f8c, 0x108b: 0x1f91,\n\t0x108c: 0x1f96, 0x108d: 0x1f9b, 0x108e: 0x1faf, 0x108f: 0x1fb4, 0x1090: 0x1fb9, 0x1091: 0x1fbe,\n\t0x1092: 0x1fcd, 0x1093: 0x1fd2, 0x1094: 0x1fd7, 0x1095: 0x1fe6, 0x1096: 0x1ff0, 0x1097: 0x1fff,\n\t0x1098: 0x2004, 0x1099: 0x4450, 0x109a: 0x2018, 0x109b: 0x201d, 0x109c: 0x2022, 0x109d: 0x2031,\n\t0x109e: 0x203b, 0x109f: 0x25d4, 0x10a0: 0x25e2, 0x10a1: 0x1da2, 0x10a2: 0x1dac, 0x10a3: 0x1dd4,\n\t0x10a4: 0x1dde, 0x10a5: 0x1dfc, 0x10a6: 0x1e06, 0x10a7: 0x1e6a, 0x10a8: 0x1e6f, 0x10a9: 0x1e92,\n\t0x10aa: 0x1e97, 0x10ab: 0x1f6e, 0x10ac: 0x1f73, 0x10ad: 0x1f96, 0x10ae: 0x1fe6, 0x10af: 0x1ff0,\n\t0x10b0: 0x2031, 0x10b1: 0x203b, 0x10b2: 0x4504, 0x10b3: 0x450c, 0x10b4: 0x4514, 0x10b5: 0x1ef1,\n\t0x10b6: 0x1ef6, 0x10b7: 0x1f0a, 0x10b8: 0x1f0f, 0x10b9: 0x1f1e, 0x10ba: 0x1f23, 0x10bb: 0x1e74,\n\t0x10bc: 0x1e79, 0x10bd: 0x1e9c, 0x10be: 0x1ea1, 0x10bf: 0x1e33,\n\t// Block 0x43, offset 0x10c0\n\t0x10c0: 0x1e38, 0x10c1: 0x1e1f, 0x10c2: 0x1e24, 0x10c3: 0x1e4c, 0x10c4: 0x1e51, 0x10c5: 0x1eba,\n\t0x10c6: 0x1ebf, 0x10c7: 0x1edd, 0x10c8: 0x1ee2, 0x10c9: 0x1e7e, 0x10ca: 0x1e83, 0x10cb: 0x1e88,\n\t0x10cc: 0x1e92, 0x10cd: 0x1e8d, 0x10ce: 0x1e65, 0x10cf: 0x1eb0, 0x10d0: 0x1ed3, 0x10d1: 0x1ef1,\n\t0x10d2: 0x1ef6, 0x10d3: 0x1f0a, 0x10d4: 0x1f0f, 0x10d5: 0x1f1e, 0x10d6: 0x1f23, 0x10d7: 0x1e74,\n\t0x10d8: 0x1e79, 0x10d9: 0x1e9c, 0x10da: 0x1ea1, 0x10db: 0x1e33, 0x10dc: 0x1e38, 0x10dd: 0x1e1f,\n\t0x10de: 0x1e24, 0x10df: 0x1e4c, 0x10e0: 0x1e51, 0x10e1: 0x1eba, 0x10e2: 0x1ebf, 0x10e3: 0x1edd,\n\t0x10e4: 0x1ee2, 0x10e5: 0x1e7e, 0x10e6: 0x1e83, 0x10e7: 0x1e88, 0x10e8: 0x1e92, 0x10e9: 0x1e8d,\n\t0x10ea: 0x1e65, 0x10eb: 0x1eb0, 0x10ec: 0x1ed3, 0x10ed: 0x1e7e, 0x10ee: 0x1e83, 0x10ef: 0x1e88,\n\t0x10f0: 0x1e92, 0x10f1: 0x1e6f, 0x10f2: 0x1e97, 0x10f3: 0x1eec, 0x10f4: 0x1e56, 0x10f5: 0x1e5b,\n\t0x10f6: 0x1e60, 0x10f7: 0x1e7e, 0x10f8: 0x1e83, 0x10f9: 0x1e88, 0x10fa: 0x1eec, 0x10fb: 0x1efb,\n\t0x10fc: 0x4408, 0x10fd: 0x4408,\n\t// Block 0x44, offset 0x1100\n\t0x1110: 0x2311, 0x1111: 0x2326,\n\t0x1112: 0x2326, 0x1113: 0x232d, 0x1114: 0x2334, 0x1115: 0x2349, 0x1116: 0x2350, 0x1117: 0x2357,\n\t0x1118: 0x237a, 0x1119: 0x237a, 0x111a: 0x239d, 0x111b: 0x2396, 0x111c: 0x23b2, 0x111d: 0x23a4,\n\t0x111e: 0x23ab, 0x111f: 0x23ce, 0x1120: 0x23ce, 0x1121: 0x23c7, 0x1122: 0x23d5, 0x1123: 0x23d5,\n\t0x1124: 0x23ff, 0x1125: 0x23ff, 0x1126: 0x241b, 0x1127: 0x23e3, 0x1128: 0x23e3, 0x1129: 0x23dc,\n\t0x112a: 0x23f1, 0x112b: 0x23f1, 0x112c: 0x23f8, 0x112d: 0x23f8, 0x112e: 0x2422, 0x112f: 0x2430,\n\t0x1130: 0x2430, 0x1131: 0x2437, 0x1132: 0x2437, 0x1133: 0x243e, 0x1134: 0x2445, 0x1135: 0x244c,\n\t0x1136: 0x2453, 0x1137: 0x2453, 0x1138: 0x245a, 0x1139: 0x2468, 0x113a: 0x2476, 0x113b: 0x246f,\n\t0x113c: 0x247d, 0x113d: 0x247d, 0x113e: 0x2492, 0x113f: 0x2499,\n\t// Block 0x45, offset 0x1140\n\t0x1140: 0x24ca, 0x1141: 0x24d8, 0x1142: 0x24d1, 0x1143: 0x24b5, 0x1144: 0x24b5, 0x1145: 0x24df,\n\t0x1146: 0x24df, 0x1147: 0x24e6, 0x1148: 0x24e6, 0x1149: 0x2510, 0x114a: 0x2517, 0x114b: 0x251e,\n\t0x114c: 0x24f4, 0x114d: 0x2502, 0x114e: 0x2525, 0x114f: 0x252c,\n\t0x1152: 0x24fb, 0x1153: 0x2580, 0x1154: 0x2587, 0x1155: 0x255d, 0x1156: 0x2564, 0x1157: 0x2548,\n\t0x1158: 0x2548, 0x1159: 0x254f, 0x115a: 0x2579, 0x115b: 0x2572, 0x115c: 0x259c, 0x115d: 0x259c,\n\t0x115e: 0x230a, 0x115f: 0x231f, 0x1160: 0x2318, 0x1161: 0x2342, 0x1162: 0x233b, 0x1163: 0x2365,\n\t0x1164: 0x235e, 0x1165: 0x2388, 0x1166: 0x236c, 0x1167: 0x2381, 0x1168: 0x23b9, 0x1169: 0x2406,\n\t0x116a: 0x23ea, 0x116b: 0x2429, 0x116c: 0x24c3, 0x116d: 0x24ed, 0x116e: 0x2595, 0x116f: 0x258e,\n\t0x1170: 0x25a3, 0x1171: 0x253a, 0x1172: 0x24a0, 0x1173: 0x256b, 0x1174: 0x2492, 0x1175: 0x24ca,\n\t0x1176: 0x2461, 0x1177: 0x24ae, 0x1178: 0x2541, 0x1179: 0x2533, 0x117a: 0x24bc, 0x117b: 0x24a7,\n\t0x117c: 0x24bc, 0x117d: 0x2541, 0x117e: 0x2373, 0x117f: 0x238f,\n\t// Block 0x46, offset 0x1180\n\t0x1180: 0x2509, 0x1181: 0x2484, 0x1182: 0x2303, 0x1183: 0x24a7, 0x1184: 0x244c, 0x1185: 0x241b,\n\t0x1186: 0x23c0, 0x1187: 0x2556,\n\t0x11b0: 0x2414, 0x11b1: 0x248b, 0x11b2: 0x27bf, 0x11b3: 0x27b6, 0x11b4: 0x27ec, 0x11b5: 0x27da,\n\t0x11b6: 0x27c8, 0x11b7: 0x27e3, 0x11b8: 0x27f5, 0x11b9: 0x240d, 0x11ba: 0x2c7c, 0x11bb: 0x2afc,\n\t0x11bc: 0x27d1,\n\t// Block 0x47, offset 0x11c0\n\t0x11d0: 0x0019, 0x11d1: 0x0483,\n\t0x11d2: 0x0487, 0x11d3: 0x0035, 0x11d4: 0x0037, 0x11d5: 0x0003, 0x11d6: 0x003f, 0x11d7: 0x04bf,\n\t0x11d8: 0x04c3, 0x11d9: 0x1b5c,\n\t0x11e0: 0x8132, 0x11e1: 0x8132, 0x11e2: 0x8132, 0x11e3: 0x8132,\n\t0x11e4: 0x8132, 0x11e5: 0x8132, 0x11e6: 0x8132, 0x11e7: 0x812d, 0x11e8: 0x812d, 0x11e9: 0x812d,\n\t0x11ea: 0x812d, 0x11eb: 0x812d, 0x11ec: 0x812d, 0x11ed: 0x812d, 0x11ee: 0x8132, 0x11ef: 0x8132,\n\t0x11f0: 0x1873, 0x11f1: 0x0443, 0x11f2: 0x043f, 0x11f3: 0x007f, 0x11f4: 0x007f, 0x11f5: 0x0011,\n\t0x11f6: 0x0013, 0x11f7: 0x00b7, 0x11f8: 0x00bb, 0x11f9: 0x04b7, 0x11fa: 0x04bb, 0x11fb: 0x04ab,\n\t0x11fc: 0x04af, 0x11fd: 0x0493, 0x11fe: 0x0497, 0x11ff: 0x048b,\n\t// Block 0x48, offset 0x1200\n\t0x1200: 0x048f, 0x1201: 0x049b, 0x1202: 0x049f, 0x1203: 0x04a3, 0x1204: 0x04a7,\n\t0x1207: 0x0077, 0x1208: 0x007b, 0x1209: 0x4269, 0x120a: 0x4269, 0x120b: 0x4269,\n\t0x120c: 0x4269, 0x120d: 0x007f, 0x120e: 0x007f, 0x120f: 0x007f, 0x1210: 0x0019, 0x1211: 0x0483,\n\t0x1212: 0x001d, 0x1214: 0x0037, 0x1215: 0x0035, 0x1216: 0x003f, 0x1217: 0x0003,\n\t0x1218: 0x0443, 0x1219: 0x0011, 0x121a: 0x0013, 0x121b: 0x00b7, 0x121c: 0x00bb, 0x121d: 0x04b7,\n\t0x121e: 0x04bb, 0x121f: 0x0007, 0x1220: 0x000d, 0x1221: 0x0015, 0x1222: 0x0017, 0x1223: 0x001b,\n\t0x1224: 0x0039, 0x1225: 0x003d, 0x1226: 0x003b, 0x1228: 0x0079, 0x1229: 0x0009,\n\t0x122a: 0x000b, 0x122b: 0x0041,\n\t0x1230: 0x42aa, 0x1231: 0x442c, 0x1232: 0x42af, 0x1234: 0x42b4,\n\t0x1236: 0x42b9, 0x1237: 0x4432, 0x1238: 0x42be, 0x1239: 0x4438, 0x123a: 0x42c3, 0x123b: 0x443e,\n\t0x123c: 0x42c8, 0x123d: 0x4444, 0x123e: 0x42cd, 0x123f: 0x444a,\n\t// Block 0x49, offset 0x1240\n\t0x1240: 0x0236, 0x1241: 0x440e, 0x1242: 0x440e, 0x1243: 0x4414, 0x1244: 0x4414, 0x1245: 0x4456,\n\t0x1246: 0x4456, 0x1247: 0x441a, 0x1248: 0x441a, 0x1249: 0x4462, 0x124a: 0x4462, 0x124b: 0x4462,\n\t0x124c: 0x4462, 0x124d: 0x0239, 0x124e: 0x0239, 0x124f: 0x023c, 0x1250: 0x023c, 0x1251: 0x023c,\n\t0x1252: 0x023c, 0x1253: 0x023f, 0x1254: 0x023f, 0x1255: 0x0242, 0x1256: 0x0242, 0x1257: 0x0242,\n\t0x1258: 0x0242, 0x1259: 0x0245, 0x125a: 0x0245, 0x125b: 0x0245, 0x125c: 0x0245, 0x125d: 0x0248,\n\t0x125e: 0x0248, 0x125f: 0x0248, 0x1260: 0x0248, 0x1261: 0x024b, 0x1262: 0x024b, 0x1263: 0x024b,\n\t0x1264: 0x024b, 0x1265: 0x024e, 0x1266: 0x024e, 0x1267: 0x024e, 0x1268: 0x024e, 0x1269: 0x0251,\n\t0x126a: 0x0251, 0x126b: 0x0254, 0x126c: 0x0254, 0x126d: 0x0257, 0x126e: 0x0257, 0x126f: 0x025a,\n\t0x1270: 0x025a, 0x1271: 0x025d, 0x1272: 0x025d, 0x1273: 0x025d, 0x1274: 0x025d, 0x1275: 0x0260,\n\t0x1276: 0x0260, 0x1277: 0x0260, 0x1278: 0x0260, 0x1279: 0x0263, 0x127a: 0x0263, 0x127b: 0x0263,\n\t0x127c: 0x0263, 0x127d: 0x0266, 0x127e: 0x0266, 0x127f: 0x0266,\n\t// Block 0x4a, offset 0x1280\n\t0x1280: 0x0266, 0x1281: 0x0269, 0x1282: 0x0269, 0x1283: 0x0269, 0x1284: 0x0269, 0x1285: 0x026c,\n\t0x1286: 0x026c, 0x1287: 0x026c, 0x1288: 0x026c, 0x1289: 0x026f, 0x128a: 0x026f, 0x128b: 0x026f,\n\t0x128c: 0x026f, 0x128d: 0x0272, 0x128e: 0x0272, 0x128f: 0x0272, 0x1290: 0x0272, 0x1291: 0x0275,\n\t0x1292: 0x0275, 0x1293: 0x0275, 0x1294: 0x0275, 0x1295: 0x0278, 0x1296: 0x0278, 0x1297: 0x0278,\n\t0x1298: 0x0278, 0x1299: 0x027b, 0x129a: 0x027b, 0x129b: 0x027b, 0x129c: 0x027b, 0x129d: 0x027e,\n\t0x129e: 0x027e, 0x129f: 0x027e, 0x12a0: 0x027e, 0x12a1: 0x0281, 0x12a2: 0x0281, 0x12a3: 0x0281,\n\t0x12a4: 0x0281, 0x12a5: 0x0284, 0x12a6: 0x0284, 0x12a7: 0x0284, 0x12a8: 0x0284, 0x12a9: 0x0287,\n\t0x12aa: 0x0287, 0x12ab: 0x0287, 0x12ac: 0x0287, 0x12ad: 0x028a, 0x12ae: 0x028a, 0x12af: 0x028d,\n\t0x12b0: 0x028d, 0x12b1: 0x0290, 0x12b2: 0x0290, 0x12b3: 0x0290, 0x12b4: 0x0290, 0x12b5: 0x2e00,\n\t0x12b6: 0x2e00, 0x12b7: 0x2e08, 0x12b8: 0x2e08, 0x12b9: 0x2e10, 0x12ba: 0x2e10, 0x12bb: 0x1f82,\n\t0x12bc: 0x1f82,\n\t// Block 0x4b, offset 0x12c0\n\t0x12c0: 0x0081, 0x12c1: 0x0083, 0x12c2: 0x0085, 0x12c3: 0x0087, 0x12c4: 0x0089, 0x12c5: 0x008b,\n\t0x12c6: 0x008d, 0x12c7: 0x008f, 0x12c8: 0x0091, 0x12c9: 0x0093, 0x12ca: 0x0095, 0x12cb: 0x0097,\n\t0x12cc: 0x0099, 0x12cd: 0x009b, 0x12ce: 0x009d, 0x12cf: 0x009f, 0x12d0: 0x00a1, 0x12d1: 0x00a3,\n\t0x12d2: 0x00a5, 0x12d3: 0x00a7, 0x12d4: 0x00a9, 0x12d5: 0x00ab, 0x12d6: 0x00ad, 0x12d7: 0x00af,\n\t0x12d8: 0x00b1, 0x12d9: 0x00b3, 0x12da: 0x00b5, 0x12db: 0x00b7, 0x12dc: 0x00b9, 0x12dd: 0x00bb,\n\t0x12de: 0x00bd, 0x12df: 0x0477, 0x12e0: 0x047b, 0x12e1: 0x0487, 0x12e2: 0x049b, 0x12e3: 0x049f,\n\t0x12e4: 0x0483, 0x12e5: 0x05ab, 0x12e6: 0x05a3, 0x12e7: 0x04c7, 0x12e8: 0x04cf, 0x12e9: 0x04d7,\n\t0x12ea: 0x04df, 0x12eb: 0x04e7, 0x12ec: 0x056b, 0x12ed: 0x0573, 0x12ee: 0x057b, 0x12ef: 0x051f,\n\t0x12f0: 0x05af, 0x12f1: 0x04cb, 0x12f2: 0x04d3, 0x12f3: 0x04db, 0x12f4: 0x04e3, 0x12f5: 0x04eb,\n\t0x12f6: 0x04ef, 0x12f7: 0x04f3, 0x12f8: 0x04f7, 0x12f9: 0x04fb, 0x12fa: 0x04ff, 0x12fb: 0x0503,\n\t0x12fc: 0x0507, 0x12fd: 0x050b, 0x12fe: 0x050f, 0x12ff: 0x0513,\n\t// Block 0x4c, offset 0x1300\n\t0x1300: 0x0517, 0x1301: 0x051b, 0x1302: 0x0523, 0x1303: 0x0527, 0x1304: 0x052b, 0x1305: 0x052f,\n\t0x1306: 0x0533, 0x1307: 0x0537, 0x1308: 0x053b, 0x1309: 0x053f, 0x130a: 0x0543, 0x130b: 0x0547,\n\t0x130c: 0x054b, 0x130d: 0x054f, 0x130e: 0x0553, 0x130f: 0x0557, 0x1310: 0x055b, 0x1311: 0x055f,\n\t0x1312: 0x0563, 0x1313: 0x0567, 0x1314: 0x056f, 0x1315: 0x0577, 0x1316: 0x057f, 0x1317: 0x0583,\n\t0x1318: 0x0587, 0x1319: 0x058b, 0x131a: 0x058f, 0x131b: 0x0593, 0x131c: 0x0597, 0x131d: 0x05a7,\n\t0x131e: 0x4a78, 0x131f: 0x4a7e, 0x1320: 0x03c3, 0x1321: 0x0313, 0x1322: 0x0317, 0x1323: 0x4a3b,\n\t0x1324: 0x031b, 0x1325: 0x4a41, 0x1326: 0x4a47, 0x1327: 0x031f, 0x1328: 0x0323, 0x1329: 0x0327,\n\t0x132a: 0x4a4d, 0x132b: 0x4a53, 0x132c: 0x4a59, 0x132d: 0x4a5f, 0x132e: 0x4a65, 0x132f: 0x4a6b,\n\t0x1330: 0x0367, 0x1331: 0x032b, 0x1332: 0x032f, 0x1333: 0x0333, 0x1334: 0x037b, 0x1335: 0x0337,\n\t0x1336: 0x033b, 0x1337: 0x033f, 0x1338: 0x0343, 0x1339: 0x0347, 0x133a: 0x034b, 0x133b: 0x034f,\n\t0x133c: 0x0353, 0x133d: 0x0357, 0x133e: 0x035b,\n\t// Block 0x4d, offset 0x1340\n\t0x1342: 0x49bd, 0x1343: 0x49c3, 0x1344: 0x49c9, 0x1345: 0x49cf,\n\t0x1346: 0x49d5, 0x1347: 0x49db, 0x134a: 0x49e1, 0x134b: 0x49e7,\n\t0x134c: 0x49ed, 0x134d: 0x49f3, 0x134e: 0x49f9, 0x134f: 0x49ff,\n\t0x1352: 0x4a05, 0x1353: 0x4a0b, 0x1354: 0x4a11, 0x1355: 0x4a17, 0x1356: 0x4a1d, 0x1357: 0x4a23,\n\t0x135a: 0x4a29, 0x135b: 0x4a2f, 0x135c: 0x4a35,\n\t0x1360: 0x00bf, 0x1361: 0x00c2, 0x1362: 0x00cb, 0x1363: 0x4264,\n\t0x1364: 0x00c8, 0x1365: 0x00c5, 0x1366: 0x0447, 0x1368: 0x046b, 0x1369: 0x044b,\n\t0x136a: 0x044f, 0x136b: 0x0453, 0x136c: 0x0457, 0x136d: 0x046f, 0x136e: 0x0473,\n\t// Block 0x4e, offset 0x1380\n\t0x1380: 0x0063, 0x1381: 0x0065, 0x1382: 0x0067, 0x1383: 0x0069, 0x1384: 0x006b, 0x1385: 0x006d,\n\t0x1386: 0x006f, 0x1387: 0x0071, 0x1388: 0x0073, 0x1389: 0x0075, 0x138a: 0x0083, 0x138b: 0x0085,\n\t0x138c: 0x0087, 0x138d: 0x0089, 0x138e: 0x008b, 0x138f: 0x008d, 0x1390: 0x008f, 0x1391: 0x0091,\n\t0x1392: 0x0093, 0x1393: 0x0095, 0x1394: 0x0097, 0x1395: 0x0099, 0x1396: 0x009b, 0x1397: 0x009d,\n\t0x1398: 0x009f, 0x1399: 0x00a1, 0x139a: 0x00a3, 0x139b: 0x00a5, 0x139c: 0x00a7, 0x139d: 0x00a9,\n\t0x139e: 0x00ab, 0x139f: 0x00ad, 0x13a0: 0x00af, 0x13a1: 0x00b1, 0x13a2: 0x00b3, 0x13a3: 0x00b5,\n\t0x13a4: 0x00dd, 0x13a5: 0x00f2, 0x13a8: 0x0173, 0x13a9: 0x0176,\n\t0x13aa: 0x0179, 0x13ab: 0x017c, 0x13ac: 0x017f, 0x13ad: 0x0182, 0x13ae: 0x0185, 0x13af: 0x0188,\n\t0x13b0: 0x018b, 0x13b1: 0x018e, 0x13b2: 0x0191, 0x13b3: 0x0194, 0x13b4: 0x0197, 0x13b5: 0x019a,\n\t0x13b6: 0x019d, 0x13b7: 0x01a0, 0x13b8: 0x01a3, 0x13b9: 0x0188, 0x13ba: 0x01a6, 0x13bb: 0x01a9,\n\t0x13bc: 0x01ac, 0x13bd: 0x01af, 0x13be: 0x01b2, 0x13bf: 0x01b5,\n\t// Block 0x4f, offset 0x13c0\n\t0x13c0: 0x01fd, 0x13c1: 0x0200, 0x13c2: 0x0203, 0x13c3: 0x045b, 0x13c4: 0x01c7, 0x13c5: 0x01d0,\n\t0x13c6: 0x01d6, 0x13c7: 0x01fa, 0x13c8: 0x01eb, 0x13c9: 0x01e8, 0x13ca: 0x0206, 0x13cb: 0x0209,\n\t0x13ce: 0x0021, 0x13cf: 0x0023, 0x13d0: 0x0025, 0x13d1: 0x0027,\n\t0x13d2: 0x0029, 0x13d3: 0x002b, 0x13d4: 0x002d, 0x13d5: 0x002f, 0x13d6: 0x0031, 0x13d7: 0x0033,\n\t0x13d8: 0x0021, 0x13d9: 0x0023, 0x13da: 0x0025, 0x13db: 0x0027, 0x13dc: 0x0029, 0x13dd: 0x002b,\n\t0x13de: 0x002d, 0x13df: 0x002f, 0x13e0: 0x0031, 0x13e1: 0x0033, 0x13e2: 0x0021, 0x13e3: 0x0023,\n\t0x13e4: 0x0025, 0x13e5: 0x0027, 0x13e6: 0x0029, 0x13e7: 0x002b, 0x13e8: 0x002d, 0x13e9: 0x002f,\n\t0x13ea: 0x0031, 0x13eb: 0x0033, 0x13ec: 0x0021, 0x13ed: 0x0023, 0x13ee: 0x0025, 0x13ef: 0x0027,\n\t0x13f0: 0x0029, 0x13f1: 0x002b, 0x13f2: 0x002d, 0x13f3: 0x002f, 0x13f4: 0x0031, 0x13f5: 0x0033,\n\t0x13f6: 0x0021, 0x13f7: 0x0023, 0x13f8: 0x0025, 0x13f9: 0x0027, 0x13fa: 0x0029, 0x13fb: 0x002b,\n\t0x13fc: 0x002d, 0x13fd: 0x002f, 0x13fe: 0x0031, 0x13ff: 0x0033,\n\t// Block 0x50, offset 0x1400\n\t0x1400: 0x0239, 0x1401: 0x023c, 0x1402: 0x0248, 0x1403: 0x0251, 0x1405: 0x028a,\n\t0x1406: 0x025a, 0x1407: 0x024b, 0x1408: 0x0269, 0x1409: 0x0290, 0x140a: 0x027b, 0x140b: 0x027e,\n\t0x140c: 0x0281, 0x140d: 0x0284, 0x140e: 0x025d, 0x140f: 0x026f, 0x1410: 0x0275, 0x1411: 0x0263,\n\t0x1412: 0x0278, 0x1413: 0x0257, 0x1414: 0x0260, 0x1415: 0x0242, 0x1416: 0x0245, 0x1417: 0x024e,\n\t0x1418: 0x0254, 0x1419: 0x0266, 0x141a: 0x026c, 0x141b: 0x0272, 0x141c: 0x0293, 0x141d: 0x02e4,\n\t0x141e: 0x02cc, 0x141f: 0x0296, 0x1421: 0x023c, 0x1422: 0x0248,\n\t0x1424: 0x0287, 0x1427: 0x024b, 0x1429: 0x0290,\n\t0x142a: 0x027b, 0x142b: 0x027e, 0x142c: 0x0281, 0x142d: 0x0284, 0x142e: 0x025d, 0x142f: 0x026f,\n\t0x1430: 0x0275, 0x1431: 0x0263, 0x1432: 0x0278, 0x1434: 0x0260, 0x1435: 0x0242,\n\t0x1436: 0x0245, 0x1437: 0x024e, 0x1439: 0x0266, 0x143b: 0x0272,\n\t// Block 0x51, offset 0x1440\n\t0x1442: 0x0248,\n\t0x1447: 0x024b, 0x1449: 0x0290, 0x144b: 0x027e,\n\t0x144d: 0x0284, 0x144e: 0x025d, 0x144f: 0x026f, 0x1451: 0x0263,\n\t0x1452: 0x0278, 0x1454: 0x0260, 0x1457: 0x024e,\n\t0x1459: 0x0266, 0x145b: 0x0272, 0x145d: 0x02e4,\n\t0x145f: 0x0296, 0x1461: 0x023c, 0x1462: 0x0248,\n\t0x1464: 0x0287, 0x1467: 0x024b, 0x1468: 0x0269, 0x1469: 0x0290,\n\t0x146a: 0x027b, 0x146c: 0x0281, 0x146d: 0x0284, 0x146e: 0x025d, 0x146f: 0x026f,\n\t0x1470: 0x0275, 0x1471: 0x0263, 0x1472: 0x0278, 0x1474: 0x0260, 0x1475: 0x0242,\n\t0x1476: 0x0245, 0x1477: 0x024e, 0x1479: 0x0266, 0x147a: 0x026c, 0x147b: 0x0272,\n\t0x147c: 0x0293, 0x147e: 0x02cc,\n\t// Block 0x52, offset 0x1480\n\t0x1480: 0x0239, 0x1481: 0x023c, 0x1482: 0x0248, 0x1483: 0x0251, 0x1484: 0x0287, 0x1485: 0x028a,\n\t0x1486: 0x025a, 0x1487: 0x024b, 0x1488: 0x0269, 0x1489: 0x0290, 0x148b: 0x027e,\n\t0x148c: 0x0281, 0x148d: 0x0284, 0x148e: 0x025d, 0x148f: 0x026f, 0x1490: 0x0275, 0x1491: 0x0263,\n\t0x1492: 0x0278, 0x1493: 0x0257, 0x1494: 0x0260, 0x1495: 0x0242, 0x1496: 0x0245, 0x1497: 0x024e,\n\t0x1498: 0x0254, 0x1499: 0x0266, 0x149a: 0x026c, 0x149b: 0x0272,\n\t0x14a1: 0x023c, 0x14a2: 0x0248, 0x14a3: 0x0251,\n\t0x14a5: 0x028a, 0x14a6: 0x025a, 0x14a7: 0x024b, 0x14a8: 0x0269, 0x14a9: 0x0290,\n\t0x14ab: 0x027e, 0x14ac: 0x0281, 0x14ad: 0x0284, 0x14ae: 0x025d, 0x14af: 0x026f,\n\t0x14b0: 0x0275, 0x14b1: 0x0263, 0x14b2: 0x0278, 0x14b3: 0x0257, 0x14b4: 0x0260, 0x14b5: 0x0242,\n\t0x14b6: 0x0245, 0x14b7: 0x024e, 0x14b8: 0x0254, 0x14b9: 0x0266, 0x14ba: 0x026c, 0x14bb: 0x0272,\n\t// Block 0x53, offset 0x14c0\n\t0x14c0: 0x1879, 0x14c1: 0x1876, 0x14c2: 0x187c, 0x14c3: 0x18a0, 0x14c4: 0x18c4, 0x14c5: 0x18e8,\n\t0x14c6: 0x190c, 0x14c7: 0x1915, 0x14c8: 0x191b, 0x14c9: 0x1921, 0x14ca: 0x1927,\n\t0x14d0: 0x1a8c, 0x14d1: 0x1a90,\n\t0x14d2: 0x1a94, 0x14d3: 0x1a98, 0x14d4: 0x1a9c, 0x14d5: 0x1aa0, 0x14d6: 0x1aa4, 0x14d7: 0x1aa8,\n\t0x14d8: 0x1aac, 0x14d9: 0x1ab0, 0x14da: 0x1ab4, 0x14db: 0x1ab8, 0x14dc: 0x1abc, 0x14dd: 0x1ac0,\n\t0x14de: 0x1ac4, 0x14df: 0x1ac8, 0x14e0: 0x1acc, 0x14e1: 0x1ad0, 0x14e2: 0x1ad4, 0x14e3: 0x1ad8,\n\t0x14e4: 0x1adc, 0x14e5: 0x1ae0, 0x14e6: 0x1ae4, 0x14e7: 0x1ae8, 0x14e8: 0x1aec, 0x14e9: 0x1af0,\n\t0x14ea: 0x271e, 0x14eb: 0x0047, 0x14ec: 0x0065, 0x14ed: 0x193c, 0x14ee: 0x19b1,\n\t0x14f0: 0x0043, 0x14f1: 0x0045, 0x14f2: 0x0047, 0x14f3: 0x0049, 0x14f4: 0x004b, 0x14f5: 0x004d,\n\t0x14f6: 0x004f, 0x14f7: 0x0051, 0x14f8: 0x0053, 0x14f9: 0x0055, 0x14fa: 0x0057, 0x14fb: 0x0059,\n\t0x14fc: 0x005b, 0x14fd: 0x005d, 0x14fe: 0x005f, 0x14ff: 0x0061,\n\t// Block 0x54, offset 0x1500\n\t0x1500: 0x26ad, 0x1501: 0x26c2, 0x1502: 0x0503,\n\t0x1510: 0x0c0f, 0x1511: 0x0a47,\n\t0x1512: 0x08d3, 0x1513: 0x45c4, 0x1514: 0x071b, 0x1515: 0x09ef, 0x1516: 0x132f, 0x1517: 0x09ff,\n\t0x1518: 0x0727, 0x1519: 0x0cd7, 0x151a: 0x0eaf, 0x151b: 0x0caf, 0x151c: 0x0827, 0x151d: 0x0b6b,\n\t0x151e: 0x07bf, 0x151f: 0x0cb7, 0x1520: 0x0813, 0x1521: 0x1117, 0x1522: 0x0f83, 0x1523: 0x138b,\n\t0x1524: 0x09d3, 0x1525: 0x090b, 0x1526: 0x0e63, 0x1527: 0x0c1b, 0x1528: 0x0c47, 0x1529: 0x06bf,\n\t0x152a: 0x06cb, 0x152b: 0x140b, 0x152c: 0x0adb, 0x152d: 0x06e7, 0x152e: 0x08ef, 0x152f: 0x0c3b,\n\t0x1530: 0x13b3, 0x1531: 0x0c13, 0x1532: 0x106f, 0x1533: 0x10ab, 0x1534: 0x08f7, 0x1535: 0x0e43,\n\t0x1536: 0x0d0b, 0x1537: 0x0d07, 0x1538: 0x0f97, 0x1539: 0x082b, 0x153a: 0x0957, 0x153b: 0x1443,\n\t// Block 0x55, offset 0x1540\n\t0x1540: 0x06fb, 0x1541: 0x06f3, 0x1542: 0x0703, 0x1543: 0x1647, 0x1544: 0x0747, 0x1545: 0x0757,\n\t0x1546: 0x075b, 0x1547: 0x0763, 0x1548: 0x076b, 0x1549: 0x076f, 0x154a: 0x077b, 0x154b: 0x0773,\n\t0x154c: 0x05b3, 0x154d: 0x165b, 0x154e: 0x078f, 0x154f: 0x0793, 0x1550: 0x0797, 0x1551: 0x07b3,\n\t0x1552: 0x164c, 0x1553: 0x05b7, 0x1554: 0x079f, 0x1555: 0x07bf, 0x1556: 0x1656, 0x1557: 0x07cf,\n\t0x1558: 0x07d7, 0x1559: 0x0737, 0x155a: 0x07df, 0x155b: 0x07e3, 0x155c: 0x1831, 0x155d: 0x07ff,\n\t0x155e: 0x0807, 0x155f: 0x05bf, 0x1560: 0x081f, 0x1561: 0x0823, 0x1562: 0x082b, 0x1563: 0x082f,\n\t0x1564: 0x05c3, 0x1565: 0x0847, 0x1566: 0x084b, 0x1567: 0x0857, 0x1568: 0x0863, 0x1569: 0x0867,\n\t0x156a: 0x086b, 0x156b: 0x0873, 0x156c: 0x0893, 0x156d: 0x0897, 0x156e: 0x089f, 0x156f: 0x08af,\n\t0x1570: 0x08b7, 0x1571: 0x08bb, 0x1572: 0x08bb, 0x1573: 0x08bb, 0x1574: 0x166a, 0x1575: 0x0e93,\n\t0x1576: 0x08cf, 0x1577: 0x08d7, 0x1578: 0x166f, 0x1579: 0x08e3, 0x157a: 0x08eb, 0x157b: 0x08f3,\n\t0x157c: 0x091b, 0x157d: 0x0907, 0x157e: 0x0913, 0x157f: 0x0917,\n\t// Block 0x56, offset 0x1580\n\t0x1580: 0x091f, 0x1581: 0x0927, 0x1582: 0x092b, 0x1583: 0x0933, 0x1584: 0x093b, 0x1585: 0x093f,\n\t0x1586: 0x093f, 0x1587: 0x0947, 0x1588: 0x094f, 0x1589: 0x0953, 0x158a: 0x095f, 0x158b: 0x0983,\n\t0x158c: 0x0967, 0x158d: 0x0987, 0x158e: 0x096b, 0x158f: 0x0973, 0x1590: 0x080b, 0x1591: 0x09cf,\n\t0x1592: 0x0997, 0x1593: 0x099b, 0x1594: 0x099f, 0x1595: 0x0993, 0x1596: 0x09a7, 0x1597: 0x09a3,\n\t0x1598: 0x09bb, 0x1599: 0x1674, 0x159a: 0x09d7, 0x159b: 0x09db, 0x159c: 0x09e3, 0x159d: 0x09ef,\n\t0x159e: 0x09f7, 0x159f: 0x0a13, 0x15a0: 0x1679, 0x15a1: 0x167e, 0x15a2: 0x0a1f, 0x15a3: 0x0a23,\n\t0x15a4: 0x0a27, 0x15a5: 0x0a1b, 0x15a6: 0x0a2f, 0x15a7: 0x05c7, 0x15a8: 0x05cb, 0x15a9: 0x0a37,\n\t0x15aa: 0x0a3f, 0x15ab: 0x0a3f, 0x15ac: 0x1683, 0x15ad: 0x0a5b, 0x15ae: 0x0a5f, 0x15af: 0x0a63,\n\t0x15b0: 0x0a6b, 0x15b1: 0x1688, 0x15b2: 0x0a73, 0x15b3: 0x0a77, 0x15b4: 0x0b4f, 0x15b5: 0x0a7f,\n\t0x15b6: 0x05cf, 0x15b7: 0x0a8b, 0x15b8: 0x0a9b, 0x15b9: 0x0aa7, 0x15ba: 0x0aa3, 0x15bb: 0x1692,\n\t0x15bc: 0x0aaf, 0x15bd: 0x1697, 0x15be: 0x0abb, 0x15bf: 0x0ab7,\n\t// Block 0x57, offset 0x15c0\n\t0x15c0: 0x0abf, 0x15c1: 0x0acf, 0x15c2: 0x0ad3, 0x15c3: 0x05d3, 0x15c4: 0x0ae3, 0x15c5: 0x0aeb,\n\t0x15c6: 0x0aef, 0x15c7: 0x0af3, 0x15c8: 0x05d7, 0x15c9: 0x169c, 0x15ca: 0x05db, 0x15cb: 0x0b0f,\n\t0x15cc: 0x0b13, 0x15cd: 0x0b17, 0x15ce: 0x0b1f, 0x15cf: 0x1863, 0x15d0: 0x0b37, 0x15d1: 0x16a6,\n\t0x15d2: 0x16a6, 0x15d3: 0x11d7, 0x15d4: 0x0b47, 0x15d5: 0x0b47, 0x15d6: 0x05df, 0x15d7: 0x16c9,\n\t0x15d8: 0x179b, 0x15d9: 0x0b57, 0x15da: 0x0b5f, 0x15db: 0x05e3, 0x15dc: 0x0b73, 0x15dd: 0x0b83,\n\t0x15de: 0x0b87, 0x15df: 0x0b8f, 0x15e0: 0x0b9f, 0x15e1: 0x05eb, 0x15e2: 0x05e7, 0x15e3: 0x0ba3,\n\t0x15e4: 0x16ab, 0x15e5: 0x0ba7, 0x15e6: 0x0bbb, 0x15e7: 0x0bbf, 0x15e8: 0x0bc3, 0x15e9: 0x0bbf,\n\t0x15ea: 0x0bcf, 0x15eb: 0x0bd3, 0x15ec: 0x0be3, 0x15ed: 0x0bdb, 0x15ee: 0x0bdf, 0x15ef: 0x0be7,\n\t0x15f0: 0x0beb, 0x15f1: 0x0bef, 0x15f2: 0x0bfb, 0x15f3: 0x0bff, 0x15f4: 0x0c17, 0x15f5: 0x0c1f,\n\t0x15f6: 0x0c2f, 0x15f7: 0x0c43, 0x15f8: 0x16ba, 0x15f9: 0x0c3f, 0x15fa: 0x0c33, 0x15fb: 0x0c4b,\n\t0x15fc: 0x0c53, 0x15fd: 0x0c67, 0x15fe: 0x16bf, 0x15ff: 0x0c6f,\n\t// Block 0x58, offset 0x1600\n\t0x1600: 0x0c63, 0x1601: 0x0c5b, 0x1602: 0x05ef, 0x1603: 0x0c77, 0x1604: 0x0c7f, 0x1605: 0x0c87,\n\t0x1606: 0x0c7b, 0x1607: 0x05f3, 0x1608: 0x0c97, 0x1609: 0x0c9f, 0x160a: 0x16c4, 0x160b: 0x0ccb,\n\t0x160c: 0x0cff, 0x160d: 0x0cdb, 0x160e: 0x05ff, 0x160f: 0x0ce7, 0x1610: 0x05fb, 0x1611: 0x05f7,\n\t0x1612: 0x07c3, 0x1613: 0x07c7, 0x1614: 0x0d03, 0x1615: 0x0ceb, 0x1616: 0x11ab, 0x1617: 0x0663,\n\t0x1618: 0x0d0f, 0x1619: 0x0d13, 0x161a: 0x0d17, 0x161b: 0x0d2b, 0x161c: 0x0d23, 0x161d: 0x16dd,\n\t0x161e: 0x0603, 0x161f: 0x0d3f, 0x1620: 0x0d33, 0x1621: 0x0d4f, 0x1622: 0x0d57, 0x1623: 0x16e7,\n\t0x1624: 0x0d5b, 0x1625: 0x0d47, 0x1626: 0x0d63, 0x1627: 0x0607, 0x1628: 0x0d67, 0x1629: 0x0d6b,\n\t0x162a: 0x0d6f, 0x162b: 0x0d7b, 0x162c: 0x16ec, 0x162d: 0x0d83, 0x162e: 0x060b, 0x162f: 0x0d8f,\n\t0x1630: 0x16f1, 0x1631: 0x0d93, 0x1632: 0x060f, 0x1633: 0x0d9f, 0x1634: 0x0dab, 0x1635: 0x0db7,\n\t0x1636: 0x0dbb, 0x1637: 0x16f6, 0x1638: 0x168d, 0x1639: 0x16fb, 0x163a: 0x0ddb, 0x163b: 0x1700,\n\t0x163c: 0x0de7, 0x163d: 0x0def, 0x163e: 0x0ddf, 0x163f: 0x0dfb,\n\t// Block 0x59, offset 0x1640\n\t0x1640: 0x0e0b, 0x1641: 0x0e1b, 0x1642: 0x0e0f, 0x1643: 0x0e13, 0x1644: 0x0e1f, 0x1645: 0x0e23,\n\t0x1646: 0x1705, 0x1647: 0x0e07, 0x1648: 0x0e3b, 0x1649: 0x0e3f, 0x164a: 0x0613, 0x164b: 0x0e53,\n\t0x164c: 0x0e4f, 0x164d: 0x170a, 0x164e: 0x0e33, 0x164f: 0x0e6f, 0x1650: 0x170f, 0x1651: 0x1714,\n\t0x1652: 0x0e73, 0x1653: 0x0e87, 0x1654: 0x0e83, 0x1655: 0x0e7f, 0x1656: 0x0617, 0x1657: 0x0e8b,\n\t0x1658: 0x0e9b, 0x1659: 0x0e97, 0x165a: 0x0ea3, 0x165b: 0x1651, 0x165c: 0x0eb3, 0x165d: 0x1719,\n\t0x165e: 0x0ebf, 0x165f: 0x1723, 0x1660: 0x0ed3, 0x1661: 0x0edf, 0x1662: 0x0ef3, 0x1663: 0x1728,\n\t0x1664: 0x0f07, 0x1665: 0x0f0b, 0x1666: 0x172d, 0x1667: 0x1732, 0x1668: 0x0f27, 0x1669: 0x0f37,\n\t0x166a: 0x061b, 0x166b: 0x0f3b, 0x166c: 0x061f, 0x166d: 0x061f, 0x166e: 0x0f53, 0x166f: 0x0f57,\n\t0x1670: 0x0f5f, 0x1671: 0x0f63, 0x1672: 0x0f6f, 0x1673: 0x0623, 0x1674: 0x0f87, 0x1675: 0x1737,\n\t0x1676: 0x0fa3, 0x1677: 0x173c, 0x1678: 0x0faf, 0x1679: 0x16a1, 0x167a: 0x0fbf, 0x167b: 0x1741,\n\t0x167c: 0x1746, 0x167d: 0x174b, 0x167e: 0x0627, 0x167f: 0x062b,\n\t// Block 0x5a, offset 0x1680\n\t0x1680: 0x0ff7, 0x1681: 0x1755, 0x1682: 0x1750, 0x1683: 0x175a, 0x1684: 0x175f, 0x1685: 0x0fff,\n\t0x1686: 0x1003, 0x1687: 0x1003, 0x1688: 0x100b, 0x1689: 0x0633, 0x168a: 0x100f, 0x168b: 0x0637,\n\t0x168c: 0x063b, 0x168d: 0x1769, 0x168e: 0x1023, 0x168f: 0x102b, 0x1690: 0x1037, 0x1691: 0x063f,\n\t0x1692: 0x176e, 0x1693: 0x105b, 0x1694: 0x1773, 0x1695: 0x1778, 0x1696: 0x107b, 0x1697: 0x1093,\n\t0x1698: 0x0643, 0x1699: 0x109b, 0x169a: 0x109f, 0x169b: 0x10a3, 0x169c: 0x177d, 0x169d: 0x1782,\n\t0x169e: 0x1782, 0x169f: 0x10bb, 0x16a0: 0x0647, 0x16a1: 0x1787, 0x16a2: 0x10cf, 0x16a3: 0x10d3,\n\t0x16a4: 0x064b, 0x16a5: 0x178c, 0x16a6: 0x10ef, 0x16a7: 0x064f, 0x16a8: 0x10ff, 0x16a9: 0x10f7,\n\t0x16aa: 0x1107, 0x16ab: 0x1796, 0x16ac: 0x111f, 0x16ad: 0x0653, 0x16ae: 0x112b, 0x16af: 0x1133,\n\t0x16b0: 0x1143, 0x16b1: 0x0657, 0x16b2: 0x17a0, 0x16b3: 0x17a5, 0x16b4: 0x065b, 0x16b5: 0x17aa,\n\t0x16b6: 0x115b, 0x16b7: 0x17af, 0x16b8: 0x1167, 0x16b9: 0x1173, 0x16ba: 0x117b, 0x16bb: 0x17b4,\n\t0x16bc: 0x17b9, 0x16bd: 0x118f, 0x16be: 0x17be, 0x16bf: 0x1197,\n\t// Block 0x5b, offset 0x16c0\n\t0x16c0: 0x16ce, 0x16c1: 0x065f, 0x16c2: 0x11af, 0x16c3: 0x11b3, 0x16c4: 0x0667, 0x16c5: 0x11b7,\n\t0x16c6: 0x0a33, 0x16c7: 0x17c3, 0x16c8: 0x17c8, 0x16c9: 0x16d3, 0x16ca: 0x16d8, 0x16cb: 0x11d7,\n\t0x16cc: 0x11db, 0x16cd: 0x13f3, 0x16ce: 0x066b, 0x16cf: 0x1207, 0x16d0: 0x1203, 0x16d1: 0x120b,\n\t0x16d2: 0x083f, 0x16d3: 0x120f, 0x16d4: 0x1213, 0x16d5: 0x1217, 0x16d6: 0x121f, 0x16d7: 0x17cd,\n\t0x16d8: 0x121b, 0x16d9: 0x1223, 0x16da: 0x1237, 0x16db: 0x123b, 0x16dc: 0x1227, 0x16dd: 0x123f,\n\t0x16de: 0x1253, 0x16df: 0x1267, 0x16e0: 0x1233, 0x16e1: 0x1247, 0x16e2: 0x124b, 0x16e3: 0x124f,\n\t0x16e4: 0x17d2, 0x16e5: 0x17dc, 0x16e6: 0x17d7, 0x16e7: 0x066f, 0x16e8: 0x126f, 0x16e9: 0x1273,\n\t0x16ea: 0x127b, 0x16eb: 0x17f0, 0x16ec: 0x127f, 0x16ed: 0x17e1, 0x16ee: 0x0673, 0x16ef: 0x0677,\n\t0x16f0: 0x17e6, 0x16f1: 0x17eb, 0x16f2: 0x067b, 0x16f3: 0x129f, 0x16f4: 0x12a3, 0x16f5: 0x12a7,\n\t0x16f6: 0x12ab, 0x16f7: 0x12b7, 0x16f8: 0x12b3, 0x16f9: 0x12bf, 0x16fa: 0x12bb, 0x16fb: 0x12cb,\n\t0x16fc: 0x12c3, 0x16fd: 0x12c7, 0x16fe: 0x12cf, 0x16ff: 0x067f,\n\t// Block 0x5c, offset 0x1700\n\t0x1700: 0x12d7, 0x1701: 0x12db, 0x1702: 0x0683, 0x1703: 0x12eb, 0x1704: 0x12ef, 0x1705: 0x17f5,\n\t0x1706: 0x12fb, 0x1707: 0x12ff, 0x1708: 0x0687, 0x1709: 0x130b, 0x170a: 0x05bb, 0x170b: 0x17fa,\n\t0x170c: 0x17ff, 0x170d: 0x068b, 0x170e: 0x068f, 0x170f: 0x1337, 0x1710: 0x134f, 0x1711: 0x136b,\n\t0x1712: 0x137b, 0x1713: 0x1804, 0x1714: 0x138f, 0x1715: 0x1393, 0x1716: 0x13ab, 0x1717: 0x13b7,\n\t0x1718: 0x180e, 0x1719: 0x1660, 0x171a: 0x13c3, 0x171b: 0x13bf, 0x171c: 0x13cb, 0x171d: 0x1665,\n\t0x171e: 0x13d7, 0x171f: 0x13e3, 0x1720: 0x1813, 0x1721: 0x1818, 0x1722: 0x1423, 0x1723: 0x142f,\n\t0x1724: 0x1437, 0x1725: 0x181d, 0x1726: 0x143b, 0x1727: 0x1467, 0x1728: 0x1473, 0x1729: 0x1477,\n\t0x172a: 0x146f, 0x172b: 0x1483, 0x172c: 0x1487, 0x172d: 0x1822, 0x172e: 0x1493, 0x172f: 0x0693,\n\t0x1730: 0x149b, 0x1731: 0x1827, 0x1732: 0x0697, 0x1733: 0x14d3, 0x1734: 0x0ac3, 0x1735: 0x14eb,\n\t0x1736: 0x182c, 0x1737: 0x1836, 0x1738: 0x069b, 0x1739: 0x069f, 0x173a: 0x1513, 0x173b: 0x183b,\n\t0x173c: 0x06a3, 0x173d: 0x1840, 0x173e: 0x152b, 0x173f: 0x152b,\n\t// Block 0x5d, offset 0x1740\n\t0x1740: 0x1533, 0x1741: 0x1845, 0x1742: 0x154b, 0x1743: 0x06a7, 0x1744: 0x155b, 0x1745: 0x1567,\n\t0x1746: 0x156f, 0x1747: 0x1577, 0x1748: 0x06ab, 0x1749: 0x184a, 0x174a: 0x158b, 0x174b: 0x15a7,\n\t0x174c: 0x15b3, 0x174d: 0x06af, 0x174e: 0x06b3, 0x174f: 0x15b7, 0x1750: 0x184f, 0x1751: 0x06b7,\n\t0x1752: 0x1854, 0x1753: 0x1859, 0x1754: 0x185e, 0x1755: 0x15db, 0x1756: 0x06bb, 0x1757: 0x15ef,\n\t0x1758: 0x15f7, 0x1759: 0x15fb, 0x175a: 0x1603, 0x175b: 0x160b, 0x175c: 0x1613, 0x175d: 0x1868,\n}\n\n// nfkcIndex: 22 blocks, 1408 entries, 1408 bytes\n// Block 0 is the zero block.\nvar nfkcIndex = [1408]uint8{\n\t// Block 0x0, offset 0x0\n\t// Block 0x1, offset 0x40\n\t// Block 0x2, offset 0x80\n\t// Block 0x3, offset 0xc0\n\t0xc2: 0x5c, 0xc3: 0x01, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x5d, 0xc7: 0x04,\n\t0xc8: 0x05, 0xca: 0x5e, 0xcb: 0x5f, 0xcc: 0x06, 0xcd: 0x07, 0xce: 0x08, 0xcf: 0x09,\n\t0xd0: 0x0a, 0xd1: 0x60, 0xd2: 0x61, 0xd3: 0x0b, 0xd6: 0x0c, 0xd7: 0x62,\n\t0xd8: 0x63, 0xd9: 0x0d, 0xdb: 0x64, 0xdc: 0x65, 0xdd: 0x66, 0xdf: 0x67,\n\t0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05,\n\t0xea: 0x06, 0xeb: 0x07, 0xec: 0x08, 0xed: 0x09, 0xef: 0x0a,\n\t0xf0: 0x13,\n\t// Block 0x4, offset 0x100\n\t0x120: 0x68, 0x121: 0x69, 0x123: 0x0e, 0x124: 0x6a, 0x125: 0x6b, 0x126: 0x6c, 0x127: 0x6d,\n\t0x128: 0x6e, 0x129: 0x6f, 0x12a: 0x70, 0x12b: 0x71, 0x12c: 0x6c, 0x12d: 0x72, 0x12e: 0x73, 0x12f: 0x74,\n\t0x131: 0x75, 0x132: 0x76, 0x133: 0x77, 0x134: 0x78, 0x135: 0x79, 0x137: 0x7a,\n\t0x138: 0x7b, 0x139: 0x7c, 0x13a: 0x7d, 0x13b: 0x7e, 0x13c: 0x7f, 0x13d: 0x80, 0x13e: 0x81, 0x13f: 0x82,\n\t// Block 0x5, offset 0x140\n\t0x140: 0x83, 0x142: 0x84, 0x143: 0x85, 0x144: 0x86, 0x145: 0x87, 0x146: 0x88, 0x147: 0x89,\n\t0x14d: 0x8a,\n\t0x15c: 0x8b, 0x15f: 0x8c,\n\t0x162: 0x8d, 0x164: 0x8e,\n\t0x168: 0x8f, 0x169: 0x90, 0x16a: 0x91, 0x16c: 0x0f, 0x16d: 0x92, 0x16e: 0x93, 0x16f: 0x94,\n\t0x170: 0x95, 0x173: 0x96, 0x174: 0x97, 0x175: 0x10, 0x176: 0x11, 0x177: 0x12,\n\t0x178: 0x13, 0x179: 0x14, 0x17a: 0x15, 0x17b: 0x16, 0x17c: 0x17, 0x17d: 0x18, 0x17e: 0x19, 0x17f: 0x1a,\n\t// Block 0x6, offset 0x180\n\t0x180: 0x98, 0x181: 0x99, 0x182: 0x9a, 0x183: 0x9b, 0x184: 0x1b, 0x185: 0x1c, 0x186: 0x9c, 0x187: 0x9d,\n\t0x188: 0x9e, 0x189: 0x1d, 0x18a: 0x1e, 0x18b: 0x9f, 0x18c: 0xa0,\n\t0x191: 0x1f, 0x192: 0x20, 0x193: 0xa1,\n\t0x1a8: 0xa2, 0x1a9: 0xa3, 0x1ab: 0xa4,\n\t0x1b1: 0xa5, 0x1b3: 0xa6, 0x1b5: 0xa7, 0x1b7: 0xa8,\n\t0x1ba: 0xa9, 0x1bb: 0xaa, 0x1bc: 0x21, 0x1bd: 0x22, 0x1be: 0x23, 0x1bf: 0xab,\n\t// Block 0x7, offset 0x1c0\n\t0x1c0: 0xac, 0x1c1: 0x24, 0x1c2: 0x25, 0x1c3: 0x26, 0x1c4: 0xad, 0x1c5: 0x27, 0x1c6: 0x28,\n\t0x1c8: 0x29, 0x1c9: 0x2a, 0x1ca: 0x2b, 0x1cb: 0x2c, 0x1cc: 0x2d, 0x1cd: 0x2e, 0x1ce: 0x2f, 0x1cf: 0x30,\n\t// Block 0x8, offset 0x200\n\t0x219: 0xae, 0x21a: 0xaf, 0x21b: 0xb0, 0x21d: 0xb1, 0x21f: 0xb2,\n\t0x220: 0xb3, 0x223: 0xb4, 0x224: 0xb5, 0x225: 0xb6, 0x226: 0xb7, 0x227: 0xb8,\n\t0x22a: 0xb9, 0x22b: 0xba, 0x22d: 0xbb, 0x22f: 0xbc,\n\t0x230: 0xbd, 0x231: 0xbe, 0x232: 0xbf, 0x233: 0xc0, 0x234: 0xc1, 0x235: 0xc2, 0x236: 0xc3, 0x237: 0xbd,\n\t0x238: 0xbe, 0x239: 0xbf, 0x23a: 0xc0, 0x23b: 0xc1, 0x23c: 0xc2, 0x23d: 0xc3, 0x23e: 0xbd, 0x23f: 0xbe,\n\t// Block 0x9, offset 0x240\n\t0x240: 0xbf, 0x241: 0xc0, 0x242: 0xc1, 0x243: 0xc2, 0x244: 0xc3, 0x245: 0xbd, 0x246: 0xbe, 0x247: 0xbf,\n\t0x248: 0xc0, 0x249: 0xc1, 0x24a: 0xc2, 0x24b: 0xc3, 0x24c: 0xbd, 0x24d: 0xbe, 0x24e: 0xbf, 0x24f: 0xc0,\n\t0x250: 0xc1, 0x251: 0xc2, 0x252: 0xc3, 0x253: 0xbd, 0x254: 0xbe, 0x255: 0xbf, 0x256: 0xc0, 0x257: 0xc1,\n\t0x258: 0xc2, 0x259: 0xc3, 0x25a: 0xbd, 0x25b: 0xbe, 0x25c: 0xbf, 0x25d: 0xc0, 0x25e: 0xc1, 0x25f: 0xc2,\n\t0x260: 0xc3, 0x261: 0xbd, 0x262: 0xbe, 0x263: 0xbf, 0x264: 0xc0, 0x265: 0xc1, 0x266: 0xc2, 0x267: 0xc3,\n\t0x268: 0xbd, 0x269: 0xbe, 0x26a: 0xbf, 0x26b: 0xc0, 0x26c: 0xc1, 0x26d: 0xc2, 0x26e: 0xc3, 0x26f: 0xbd,\n\t0x270: 0xbe, 0x271: 0xbf, 0x272: 0xc0, 0x273: 0xc1, 0x274: 0xc2, 0x275: 0xc3, 0x276: 0xbd, 0x277: 0xbe,\n\t0x278: 0xbf, 0x279: 0xc0, 0x27a: 0xc1, 0x27b: 0xc2, 0x27c: 0xc3, 0x27d: 0xbd, 0x27e: 0xbe, 0x27f: 0xbf,\n\t// Block 0xa, offset 0x280\n\t0x280: 0xc0, 0x281: 0xc1, 0x282: 0xc2, 0x283: 0xc3, 0x284: 0xbd, 0x285: 0xbe, 0x286: 0xbf, 0x287: 0xc0,\n\t0x288: 0xc1, 0x289: 0xc2, 0x28a: 0xc3, 0x28b: 0xbd, 0x28c: 0xbe, 0x28d: 0xbf, 0x28e: 0xc0, 0x28f: 0xc1,\n\t0x290: 0xc2, 0x291: 0xc3, 0x292: 0xbd, 0x293: 0xbe, 0x294: 0xbf, 0x295: 0xc0, 0x296: 0xc1, 0x297: 0xc2,\n\t0x298: 0xc3, 0x299: 0xbd, 0x29a: 0xbe, 0x29b: 0xbf, 0x29c: 0xc0, 0x29d: 0xc1, 0x29e: 0xc2, 0x29f: 0xc3,\n\t0x2a0: 0xbd, 0x2a1: 0xbe, 0x2a2: 0xbf, 0x2a3: 0xc0, 0x2a4: 0xc1, 0x2a5: 0xc2, 0x2a6: 0xc3, 0x2a7: 0xbd,\n\t0x2a8: 0xbe, 0x2a9: 0xbf, 0x2aa: 0xc0, 0x2ab: 0xc1, 0x2ac: 0xc2, 0x2ad: 0xc3, 0x2ae: 0xbd, 0x2af: 0xbe,\n\t0x2b0: 0xbf, 0x2b1: 0xc0, 0x2b2: 0xc1, 0x2b3: 0xc2, 0x2b4: 0xc3, 0x2b5: 0xbd, 0x2b6: 0xbe, 0x2b7: 0xbf,\n\t0x2b8: 0xc0, 0x2b9: 0xc1, 0x2ba: 0xc2, 0x2bb: 0xc3, 0x2bc: 0xbd, 0x2bd: 0xbe, 0x2be: 0xbf, 0x2bf: 0xc0,\n\t// Block 0xb, offset 0x2c0\n\t0x2c0: 0xc1, 0x2c1: 0xc2, 0x2c2: 0xc3, 0x2c3: 0xbd, 0x2c4: 0xbe, 0x2c5: 0xbf, 0x2c6: 0xc0, 0x2c7: 0xc1,\n\t0x2c8: 0xc2, 0x2c9: 0xc3, 0x2ca: 0xbd, 0x2cb: 0xbe, 0x2cc: 0xbf, 0x2cd: 0xc0, 0x2ce: 0xc1, 0x2cf: 0xc2,\n\t0x2d0: 0xc3, 0x2d1: 0xbd, 0x2d2: 0xbe, 0x2d3: 0xbf, 0x2d4: 0xc0, 0x2d5: 0xc1, 0x2d6: 0xc2, 0x2d7: 0xc3,\n\t0x2d8: 0xbd, 0x2d9: 0xbe, 0x2da: 0xbf, 0x2db: 0xc0, 0x2dc: 0xc1, 0x2dd: 0xc2, 0x2de: 0xc4,\n\t// Block 0xc, offset 0x300\n\t0x324: 0x31, 0x325: 0x32, 0x326: 0x33, 0x327: 0x34,\n\t0x328: 0x35, 0x329: 0x36, 0x32a: 0x37, 0x32b: 0x38, 0x32c: 0x39, 0x32d: 0x3a, 0x32e: 0x3b, 0x32f: 0x3c,\n\t0x330: 0x3d, 0x331: 0x3e, 0x332: 0x3f, 0x333: 0x40, 0x334: 0x41, 0x335: 0x42, 0x336: 0x43, 0x337: 0x44,\n\t0x338: 0x45, 0x339: 0x46, 0x33a: 0x47, 0x33b: 0x48, 0x33c: 0xc5, 0x33d: 0x49, 0x33e: 0x4a, 0x33f: 0x4b,\n\t// Block 0xd, offset 0x340\n\t0x347: 0xc6,\n\t0x34b: 0xc7, 0x34d: 0xc8,\n\t0x368: 0xc9, 0x36b: 0xca,\n\t0x374: 0xcb,\n\t0x37d: 0xcc,\n\t// Block 0xe, offset 0x380\n\t0x381: 0xcd, 0x382: 0xce, 0x384: 0xcf, 0x385: 0xb7, 0x387: 0xd0,\n\t0x388: 0xd1, 0x38b: 0xd2, 0x38c: 0xd3, 0x38d: 0xd4,\n\t0x391: 0xd5, 0x392: 0xd6, 0x393: 0xd7, 0x396: 0xd8, 0x397: 0xd9,\n\t0x398: 0xda, 0x39a: 0xdb, 0x39c: 0xdc,\n\t0x3a0: 0xdd,\n\t0x3a8: 0xde, 0x3a9: 0xdf, 0x3aa: 0xe0,\n\t0x3b0: 0xda, 0x3b5: 0xe1, 0x3b6: 0xe2,\n\t// Block 0xf, offset 0x3c0\n\t0x3eb: 0xe3, 0x3ec: 0xe4,\n\t// Block 0x10, offset 0x400\n\t0x432: 0xe5,\n\t// Block 0x11, offset 0x440\n\t0x445: 0xe6, 0x446: 0xe7, 0x447: 0xe8,\n\t0x449: 0xe9,\n\t0x450: 0xea, 0x451: 0xeb, 0x452: 0xec, 0x453: 0xed, 0x454: 0xee, 0x455: 0xef, 0x456: 0xf0, 0x457: 0xf1,\n\t0x458: 0xf2, 0x459: 0xf3, 0x45a: 0x4c, 0x45b: 0xf4, 0x45c: 0xf5, 0x45d: 0xf6, 0x45e: 0xf7, 0x45f: 0x4d,\n\t// Block 0x12, offset 0x480\n\t0x480: 0xf8,\n\t0x4a3: 0xf9, 0x4a5: 0xfa,\n\t0x4b8: 0x4e, 0x4b9: 0x4f, 0x4ba: 0x50,\n\t// Block 0x13, offset 0x4c0\n\t0x4c4: 0x51, 0x4c5: 0xfb, 0x4c6: 0xfc,\n\t0x4c8: 0x52, 0x4c9: 0xfd,\n\t// Block 0x14, offset 0x500\n\t0x520: 0x53, 0x521: 0x54, 0x522: 0x55, 0x523: 0x56, 0x524: 0x57, 0x525: 0x58, 0x526: 0x59, 0x527: 0x5a,\n\t0x528: 0x5b,\n\t// Block 0x15, offset 0x540\n\t0x550: 0x0b, 0x551: 0x0c, 0x556: 0x0d,\n\t0x55b: 0x0e, 0x55d: 0x0f, 0x55e: 0x10, 0x55f: 0x11,\n\t0x56f: 0x12,\n}\n\n// nfkcSparseOffset: 162 entries, 324 bytes\nvar 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}\n\n// nfkcSparseValues: 871 entries, 3484 bytes\nvar nfkcSparseValues = [871]valueRange{\n\t// Block 0x0, offset 0x0\n\t{value: 0x0002, lo: 0x0d},\n\t{value: 0x0001, lo: 0xa0, hi: 0xa0},\n\t{value: 0x4278, lo: 0xa8, hi: 0xa8},\n\t{value: 0x0083, lo: 0xaa, hi: 0xaa},\n\t{value: 0x4264, lo: 0xaf, hi: 0xaf},\n\t{value: 0x0025, lo: 0xb2, hi: 0xb3},\n\t{value: 0x425a, lo: 0xb4, hi: 0xb4},\n\t{value: 0x01dc, lo: 0xb5, hi: 0xb5},\n\t{value: 0x4291, lo: 0xb8, hi: 0xb8},\n\t{value: 0x0023, lo: 0xb9, hi: 0xb9},\n\t{value: 0x009f, lo: 0xba, hi: 0xba},\n\t{value: 0x221c, lo: 0xbc, hi: 0xbc},\n\t{value: 0x2210, lo: 0xbd, hi: 0xbd},\n\t{value: 0x22b2, lo: 0xbe, hi: 0xbe},\n\t// Block 0x1, offset 0xe\n\t{value: 0x0091, lo: 0x03},\n\t{value: 0x46e2, lo: 0xa0, hi: 0xa1},\n\t{value: 0x4714, lo: 0xaf, hi: 0xb0},\n\t{value: 0xa000, lo: 0xb7, hi: 0xb7},\n\t// Block 0x2, offset 0x12\n\t{value: 0x0003, lo: 0x08},\n\t{value: 0xa000, lo: 0x92, hi: 0x92},\n\t{value: 0x0091, lo: 0xb0, hi: 0xb0},\n\t{value: 0x0119, lo: 0xb1, hi: 0xb1},\n\t{value: 0x0095, lo: 0xb2, hi: 0xb2},\n\t{value: 0x00a5, lo: 0xb3, hi: 0xb3},\n\t{value: 0x0143, lo: 0xb4, hi: 0xb6},\n\t{value: 0x00af, lo: 0xb7, hi: 0xb7},\n\t{value: 0x00b3, lo: 0xb8, hi: 0xb8},\n\t// Block 0x3, offset 0x1b\n\t{value: 0x000a, lo: 0x09},\n\t{value: 0x426e, lo: 0x98, hi: 0x98},\n\t{value: 0x4273, lo: 0x99, hi: 0x9a},\n\t{value: 0x4296, lo: 0x9b, hi: 0x9b},\n\t{value: 0x425f, lo: 0x9c, hi: 0x9c},\n\t{value: 0x4282, lo: 0x9d, hi: 0x9d},\n\t{value: 0x0113, lo: 0xa0, hi: 0xa0},\n\t{value: 0x0099, lo: 0xa1, hi: 0xa1},\n\t{value: 0x00a7, lo: 0xa2, hi: 0xa3},\n\t{value: 0x0167, lo: 0xa4, hi: 0xa4},\n\t// Block 0x4, offset 0x25\n\t{value: 0x0000, lo: 0x0f},\n\t{value: 0xa000, lo: 0x83, hi: 0x83},\n\t{value: 0xa000, lo: 0x87, hi: 0x87},\n\t{value: 0xa000, lo: 0x8b, hi: 0x8b},\n\t{value: 0xa000, lo: 0x8d, hi: 0x8d},\n\t{value: 0x37a5, lo: 0x90, hi: 0x90},\n\t{value: 0x37b1, lo: 0x91, hi: 0x91},\n\t{value: 0x379f, lo: 0x93, hi: 0x93},\n\t{value: 0xa000, lo: 0x96, hi: 0x96},\n\t{value: 0x3817, lo: 0x97, hi: 0x97},\n\t{value: 0x37e1, lo: 0x9c, hi: 0x9c},\n\t{value: 0x37c9, lo: 0x9d, hi: 0x9d},\n\t{value: 0x37f3, lo: 0x9e, hi: 0x9e},\n\t{value: 0xa000, lo: 0xb4, hi: 0xb5},\n\t{value: 0x381d, lo: 0xb6, hi: 0xb6},\n\t{value: 0x3823, lo: 0xb7, hi: 0xb7},\n\t// Block 0x5, offset 0x35\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8132, lo: 0x83, hi: 0x87},\n\t// Block 0x6, offset 0x37\n\t{value: 0x0001, lo: 0x04},\n\t{value: 0x8113, lo: 0x81, hi: 0x82},\n\t{value: 0x8132, lo: 0x84, hi: 0x84},\n\t{value: 0x812d, lo: 0x85, hi: 0x85},\n\t{value: 0x810d, lo: 0x87, hi: 0x87},\n\t// Block 0x7, offset 0x3c\n\t{value: 0x0000, lo: 0x0a},\n\t{value: 0x8132, lo: 0x90, hi: 0x97},\n\t{value: 0x8119, lo: 0x98, hi: 0x98},\n\t{value: 0x811a, lo: 0x99, hi: 0x99},\n\t{value: 0x811b, lo: 0x9a, hi: 0x9a},\n\t{value: 0x3841, lo: 0xa2, hi: 0xa2},\n\t{value: 0x3847, lo: 0xa3, hi: 0xa3},\n\t{value: 0x3853, lo: 0xa4, hi: 0xa4},\n\t{value: 0x384d, lo: 0xa5, hi: 0xa5},\n\t{value: 0x3859, lo: 0xa6, hi: 0xa6},\n\t{value: 0xa000, lo: 0xa7, hi: 0xa7},\n\t// Block 0x8, offset 0x47\n\t{value: 0x0000, lo: 0x0e},\n\t{value: 0x386b, lo: 0x80, hi: 0x80},\n\t{value: 0xa000, lo: 0x81, hi: 0x81},\n\t{value: 0x385f, lo: 0x82, hi: 0x82},\n\t{value: 0xa000, lo: 0x92, hi: 0x92},\n\t{value: 0x3865, lo: 0x93, hi: 0x93},\n\t{value: 0xa000, lo: 0x95, hi: 0x95},\n\t{value: 0x8132, lo: 0x96, hi: 0x9c},\n\t{value: 0x8132, lo: 0x9f, hi: 0xa2},\n\t{value: 0x812d, lo: 0xa3, hi: 0xa3},\n\t{value: 0x8132, lo: 0xa4, hi: 0xa4},\n\t{value: 0x8132, lo: 0xa7, hi: 0xa8},\n\t{value: 0x812d, lo: 0xaa, hi: 0xaa},\n\t{value: 0x8132, lo: 0xab, hi: 0xac},\n\t{value: 0x812d, lo: 0xad, hi: 0xad},\n\t// Block 0x9, offset 0x56\n\t{value: 0x0000, lo: 0x0c},\n\t{value: 0x811f, lo: 0x91, hi: 0x91},\n\t{value: 0x8132, lo: 0xb0, hi: 0xb0},\n\t{value: 0x812d, lo: 0xb1, hi: 0xb1},\n\t{value: 0x8132, lo: 0xb2, hi: 0xb3},\n\t{value: 0x812d, lo: 0xb4, hi: 0xb4},\n\t{value: 0x8132, lo: 0xb5, hi: 0xb6},\n\t{value: 0x812d, lo: 0xb7, hi: 0xb9},\n\t{value: 0x8132, lo: 0xba, hi: 0xba},\n\t{value: 0x812d, lo: 0xbb, hi: 0xbc},\n\t{value: 0x8132, lo: 0xbd, hi: 0xbd},\n\t{value: 0x812d, lo: 0xbe, hi: 0xbe},\n\t{value: 0x8132, lo: 0xbf, hi: 0xbf},\n\t// Block 0xa, offset 0x63\n\t{value: 0x0005, lo: 0x07},\n\t{value: 0x8132, lo: 0x80, hi: 0x80},\n\t{value: 0x8132, lo: 0x81, hi: 0x81},\n\t{value: 0x812d, lo: 0x82, hi: 0x83},\n\t{value: 0x812d, lo: 0x84, hi: 0x85},\n\t{value: 0x812d, lo: 0x86, hi: 0x87},\n\t{value: 0x812d, lo: 0x88, hi: 0x89},\n\t{value: 0x8132, lo: 0x8a, hi: 0x8a},\n\t// Block 0xb, offset 0x6b\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x8132, lo: 0xab, hi: 0xb1},\n\t{value: 0x812d, lo: 0xb2, hi: 0xb2},\n\t{value: 0x8132, lo: 0xb3, hi: 0xb3},\n\t{value: 0x812d, lo: 0xbd, hi: 0xbd},\n\t// Block 0xc, offset 0x70\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x8132, lo: 0x96, hi: 0x99},\n\t{value: 0x8132, lo: 0x9b, hi: 0xa3},\n\t{value: 0x8132, lo: 0xa5, hi: 0xa7},\n\t{value: 0x8132, lo: 0xa9, hi: 0xad},\n\t// Block 0xd, offset 0x75\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x812d, lo: 0x99, hi: 0x9b},\n\t// Block 0xe, offset 0x77\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0xa000, lo: 0xa8, hi: 0xa8},\n\t{value: 0x3ed8, lo: 0xa9, hi: 0xa9},\n\t{value: 0xa000, lo: 0xb0, hi: 0xb0},\n\t{value: 0x3ee0, lo: 0xb1, hi: 0xb1},\n\t{value: 0xa000, lo: 0xb3, hi: 0xb3},\n\t{value: 0x3ee8, lo: 0xb4, hi: 0xb4},\n\t{value: 0x9902, lo: 0xbc, hi: 0xbc},\n\t// Block 0xf, offset 0x7f\n\t{value: 0x0008, lo: 0x06},\n\t{value: 0x8104, lo: 0x8d, hi: 0x8d},\n\t{value: 0x8132, lo: 0x91, hi: 0x91},\n\t{value: 0x812d, lo: 0x92, hi: 0x92},\n\t{value: 0x8132, lo: 0x93, hi: 0x93},\n\t{value: 0x8132, lo: 0x94, hi: 0x94},\n\t{value: 0x451c, lo: 0x98, hi: 0x9f},\n\t// Block 0x10, offset 0x86\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8102, lo: 0xbc, hi: 0xbc},\n\t{value: 0x9900, lo: 0xbe, hi: 0xbe},\n\t// Block 0x11, offset 0x89\n\t{value: 0x0008, lo: 0x07},\n\t{value: 0xa000, lo: 0x87, hi: 0x87},\n\t{value: 0x2c9e, lo: 0x8b, hi: 0x8c},\n\t{value: 0x8104, lo: 0x8d, hi: 0x8d},\n\t{value: 0x9900, lo: 0x97, hi: 0x97},\n\t{value: 0x455c, lo: 0x9c, hi: 0x9d},\n\t{value: 0x456c, lo: 0x9f, hi: 0x9f},\n\t{value: 0x8132, lo: 0xbe, hi: 0xbe},\n\t// Block 0x12, offset 0x91\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x4594, lo: 0xb3, hi: 0xb3},\n\t{value: 0x459c, lo: 0xb6, hi: 0xb6},\n\t{value: 0x8102, lo: 0xbc, hi: 0xbc},\n\t// Block 0x13, offset 0x95\n\t{value: 0x0008, lo: 0x03},\n\t{value: 0x8104, lo: 0x8d, hi: 0x8d},\n\t{value: 0x4574, lo: 0x99, hi: 0x9b},\n\t{value: 0x458c, lo: 0x9e, hi: 0x9e},\n\t// Block 0x14, offset 0x99\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8102, lo: 0xbc, hi: 0xbc},\n\t// Block 0x15, offset 0x9b\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0x8d, hi: 0x8d},\n\t// Block 0x16, offset 0x9d\n\t{value: 0x0000, lo: 0x08},\n\t{value: 0xa000, lo: 0x87, hi: 0x87},\n\t{value: 0x2cb6, lo: 0x88, hi: 0x88},\n\t{value: 0x2cae, lo: 0x8b, hi: 0x8b},\n\t{value: 0x2cbe, lo: 0x8c, hi: 0x8c},\n\t{value: 0x8104, lo: 0x8d, hi: 0x8d},\n\t{value: 0x9900, lo: 0x96, hi: 0x97},\n\t{value: 0x45a4, lo: 0x9c, hi: 0x9c},\n\t{value: 0x45ac, lo: 0x9d, hi: 0x9d},\n\t// Block 0x17, offset 0xa6\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0xa000, lo: 0x92, hi: 0x92},\n\t{value: 0x2cc6, lo: 0x94, hi: 0x94},\n\t{value: 0x9900, lo: 0xbe, hi: 0xbe},\n\t// Block 0x18, offset 0xaa\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0xa000, lo: 0x86, hi: 0x87},\n\t{value: 0x2cce, lo: 0x8a, hi: 0x8a},\n\t{value: 0x2cde, lo: 0x8b, hi: 0x8b},\n\t{value: 0x2cd6, lo: 0x8c, hi: 0x8c},\n\t{value: 0x8104, lo: 0x8d, hi: 0x8d},\n\t{value: 0x9900, lo: 0x97, hi: 0x97},\n\t// Block 0x19, offset 0xb1\n\t{value: 0x1801, lo: 0x04},\n\t{value: 0xa000, lo: 0x86, hi: 0x86},\n\t{value: 0x3ef0, lo: 0x88, hi: 0x88},\n\t{value: 0x8104, lo: 0x8d, hi: 0x8d},\n\t{value: 0x8120, lo: 0x95, hi: 0x96},\n\t// Block 0x1a, offset 0xb6\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8102, lo: 0xbc, hi: 0xbc},\n\t{value: 0xa000, lo: 0xbf, hi: 0xbf},\n\t// Block 0x1b, offset 0xb9\n\t{value: 0x0000, lo: 0x09},\n\t{value: 0x2ce6, lo: 0x80, hi: 0x80},\n\t{value: 0x9900, lo: 0x82, hi: 0x82},\n\t{value: 0xa000, lo: 0x86, hi: 0x86},\n\t{value: 0x2cee, lo: 0x87, hi: 0x87},\n\t{value: 0x2cf6, lo: 0x88, hi: 0x88},\n\t{value: 0x2f50, lo: 0x8a, hi: 0x8a},\n\t{value: 0x2dd8, lo: 0x8b, hi: 0x8b},\n\t{value: 0x8104, lo: 0x8d, hi: 0x8d},\n\t{value: 0x9900, lo: 0x95, hi: 0x96},\n\t// Block 0x1c, offset 0xc3\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8104, lo: 0xbb, hi: 0xbc},\n\t{value: 0x9900, lo: 0xbe, hi: 0xbe},\n\t// Block 0x1d, offset 0xc6\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0xa000, lo: 0x86, hi: 0x87},\n\t{value: 0x2cfe, lo: 0x8a, hi: 0x8a},\n\t{value: 0x2d0e, lo: 0x8b, hi: 0x8b},\n\t{value: 0x2d06, lo: 0x8c, hi: 0x8c},\n\t{value: 0x8104, lo: 0x8d, hi: 0x8d},\n\t{value: 0x9900, lo: 0x97, hi: 0x97},\n\t// Block 0x1e, offset 0xcd\n\t{value: 0x6bea, lo: 0x07},\n\t{value: 0x9904, lo: 0x8a, hi: 0x8a},\n\t{value: 0x9900, lo: 0x8f, hi: 0x8f},\n\t{value: 0xa000, lo: 0x99, hi: 0x99},\n\t{value: 0x3ef8, lo: 0x9a, hi: 0x9a},\n\t{value: 0x2f58, lo: 0x9c, hi: 0x9c},\n\t{value: 0x2de3, lo: 0x9d, hi: 0x9d},\n\t{value: 0x2d16, lo: 0x9e, hi: 0x9f},\n\t// Block 0x1f, offset 0xd5\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x2621, lo: 0xb3, hi: 0xb3},\n\t{value: 0x8122, lo: 0xb8, hi: 0xb9},\n\t{value: 0x8104, lo: 0xba, hi: 0xba},\n\t// Block 0x20, offset 0xd9\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8123, lo: 0x88, hi: 0x8b},\n\t// Block 0x21, offset 0xdb\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x2636, lo: 0xb3, hi: 0xb3},\n\t{value: 0x8124, lo: 0xb8, hi: 0xb9},\n\t// Block 0x22, offset 0xde\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x8125, lo: 0x88, hi: 0x8b},\n\t{value: 0x2628, lo: 0x9c, hi: 0x9c},\n\t{value: 0x262f, lo: 0x9d, hi: 0x9d},\n\t// Block 0x23, offset 0xe2\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x030b, lo: 0x8c, hi: 0x8c},\n\t{value: 0x812d, lo: 0x98, hi: 0x99},\n\t{value: 0x812d, lo: 0xb5, hi: 0xb5},\n\t{value: 0x812d, lo: 0xb7, hi: 0xb7},\n\t{value: 0x812b, lo: 0xb9, hi: 0xb9},\n\t// Block 0x24, offset 0xe8\n\t{value: 0x0000, lo: 0x10},\n\t{value: 0x2644, lo: 0x83, hi: 0x83},\n\t{value: 0x264b, lo: 0x8d, hi: 0x8d},\n\t{value: 0x2652, lo: 0x92, hi: 0x92},\n\t{value: 0x2659, lo: 0x97, hi: 0x97},\n\t{value: 0x2660, lo: 0x9c, hi: 0x9c},\n\t{value: 0x263d, lo: 0xa9, hi: 0xa9},\n\t{value: 0x8126, lo: 0xb1, hi: 0xb1},\n\t{value: 0x8127, lo: 0xb2, hi: 0xb2},\n\t{value: 0x4a84, lo: 0xb3, hi: 0xb3},\n\t{value: 0x8128, lo: 0xb4, hi: 0xb4},\n\t{value: 0x4a8d, lo: 0xb5, hi: 0xb5},\n\t{value: 0x45b4, lo: 0xb6, hi: 0xb6},\n\t{value: 0x45f4, lo: 0xb7, hi: 0xb7},\n\t{value: 0x45bc, lo: 0xb8, hi: 0xb8},\n\t{value: 0x45ff, lo: 0xb9, hi: 0xb9},\n\t{value: 0x8127, lo: 0xba, hi: 0xbd},\n\t// Block 0x25, offset 0xf9\n\t{value: 0x0000, lo: 0x0b},\n\t{value: 0x8127, lo: 0x80, hi: 0x80},\n\t{value: 0x4a96, lo: 0x81, hi: 0x81},\n\t{value: 0x8132, lo: 0x82, hi: 0x83},\n\t{value: 0x8104, lo: 0x84, hi: 0x84},\n\t{value: 0x8132, lo: 0x86, hi: 0x87},\n\t{value: 0x266e, lo: 0x93, hi: 0x93},\n\t{value: 0x2675, lo: 0x9d, hi: 0x9d},\n\t{value: 0x267c, lo: 0xa2, hi: 0xa2},\n\t{value: 0x2683, lo: 0xa7, hi: 0xa7},\n\t{value: 0x268a, lo: 0xac, hi: 0xac},\n\t{value: 0x2667, lo: 0xb9, hi: 0xb9},\n\t// Block 0x26, offset 0x105\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x812d, lo: 0x86, hi: 0x86},\n\t// Block 0x27, offset 0x107\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0xa000, lo: 0xa5, hi: 0xa5},\n\t{value: 0x2d1e, lo: 0xa6, hi: 0xa6},\n\t{value: 0x9900, lo: 0xae, hi: 0xae},\n\t{value: 0x8102, lo: 0xb7, hi: 0xb7},\n\t{value: 0x8104, lo: 0xb9, hi: 0xba},\n\t// Block 0x28, offset 0x10d\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x812d, lo: 0x8d, hi: 0x8d},\n\t// Block 0x29, offset 0x10f\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x030f, lo: 0xbc, hi: 0xbc},\n\t// Block 0x2a, offset 0x111\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0xa000, lo: 0x80, hi: 0x92},\n\t// Block 0x2b, offset 0x113\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0xb900, lo: 0xa1, hi: 0xb5},\n\t// Block 0x2c, offset 0x115\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x9900, lo: 0xa8, hi: 0xbf},\n\t// Block 0x2d, offset 0x117\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x9900, lo: 0x80, hi: 0x82},\n\t// Block 0x2e, offset 0x119\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8132, lo: 0x9d, hi: 0x9f},\n\t// Block 0x2f, offset 0x11b\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8104, lo: 0x94, hi: 0x94},\n\t{value: 0x8104, lo: 0xb4, hi: 0xb4},\n\t// Block 0x30, offset 0x11e\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8104, lo: 0x92, hi: 0x92},\n\t{value: 0x8132, lo: 0x9d, hi: 0x9d},\n\t// Block 0x31, offset 0x121\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8131, lo: 0xa9, hi: 0xa9},\n\t// Block 0x32, offset 0x123\n\t{value: 0x0004, lo: 0x02},\n\t{value: 0x812e, lo: 0xb9, hi: 0xba},\n\t{value: 0x812d, lo: 0xbb, hi: 0xbb},\n\t// Block 0x33, offset 0x126\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8132, lo: 0x97, hi: 0x97},\n\t{value: 0x812d, lo: 0x98, hi: 0x98},\n\t// Block 0x34, offset 0x129\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x8104, lo: 0xa0, hi: 0xa0},\n\t{value: 0x8132, lo: 0xb5, hi: 0xbc},\n\t{value: 0x812d, lo: 0xbf, hi: 0xbf},\n\t// Block 0x35, offset 0x12d\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x8132, lo: 0xb0, hi: 0xb4},\n\t{value: 0x812d, lo: 0xb5, hi: 0xba},\n\t{value: 0x8132, lo: 0xbb, hi: 0xbc},\n\t{value: 0x812d, lo: 0xbd, hi: 0xbd},\n\t// Block 0x36, offset 0x132\n\t{value: 0x0000, lo: 0x08},\n\t{value: 0x2d66, lo: 0x80, hi: 0x80},\n\t{value: 0x2d6e, lo: 0x81, hi: 0x81},\n\t{value: 0xa000, lo: 0x82, hi: 0x82},\n\t{value: 0x2d76, lo: 0x83, hi: 0x83},\n\t{value: 0x8104, lo: 0x84, hi: 0x84},\n\t{value: 0x8132, lo: 0xab, hi: 0xab},\n\t{value: 0x812d, lo: 0xac, hi: 0xac},\n\t{value: 0x8132, lo: 0xad, hi: 0xb3},\n\t// Block 0x37, offset 0x13b\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0xaa, hi: 0xab},\n\t// Block 0x38, offset 0x13d\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8102, lo: 0xa6, hi: 0xa6},\n\t{value: 0x8104, lo: 0xb2, hi: 0xb3},\n\t// Block 0x39, offset 0x140\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8102, lo: 0xb7, hi: 0xb7},\n\t// Block 0x3a, offset 0x142\n\t{value: 0x0000, lo: 0x0a},\n\t{value: 0x8132, lo: 0x90, hi: 0x92},\n\t{value: 0x8101, lo: 0x94, hi: 0x94},\n\t{value: 0x812d, lo: 0x95, hi: 0x99},\n\t{value: 0x8132, lo: 0x9a, hi: 0x9b},\n\t{value: 0x812d, lo: 0x9c, hi: 0x9f},\n\t{value: 0x8132, lo: 0xa0, hi: 0xa0},\n\t{value: 0x8101, lo: 0xa2, hi: 0xa8},\n\t{value: 0x812d, lo: 0xad, hi: 0xad},\n\t{value: 0x8132, lo: 0xb4, hi: 0xb4},\n\t{value: 0x8132, lo: 0xb8, hi: 0xb9},\n\t// Block 0x3b, offset 0x14d\n\t{value: 0x0002, lo: 0x0a},\n\t{value: 0x0043, lo: 0xac, hi: 0xac},\n\t{value: 0x00d1, lo: 0xad, hi: 0xad},\n\t{value: 0x0045, lo: 0xae, hi: 0xae},\n\t{value: 0x0049, lo: 0xb0, hi: 0xb1},\n\t{value: 0x00e6, lo: 0xb2, hi: 0xb2},\n\t{value: 0x004f, lo: 0xb3, hi: 0xba},\n\t{value: 0x005f, lo: 0xbc, hi: 0xbc},\n\t{value: 0x00ef, lo: 0xbd, hi: 0xbd},\n\t{value: 0x0061, lo: 0xbe, hi: 0xbe},\n\t{value: 0x0065, lo: 0xbf, hi: 0xbf},\n\t// Block 0x3c, offset 0x158\n\t{value: 0x0000, lo: 0x0d},\n\t{value: 0x0001, lo: 0x80, hi: 0x8a},\n\t{value: 0x043b, lo: 0x91, hi: 0x91},\n\t{value: 0x429b, lo: 0x97, hi: 0x97},\n\t{value: 0x001d, lo: 0xa4, hi: 0xa4},\n\t{value: 0x1873, lo: 0xa5, hi: 0xa5},\n\t{value: 0x1b5c, lo: 0xa6, hi: 0xa6},\n\t{value: 0x0001, lo: 0xaf, hi: 0xaf},\n\t{value: 0x2691, lo: 0xb3, hi: 0xb3},\n\t{value: 0x27fe, lo: 0xb4, hi: 0xb4},\n\t{value: 0x2698, lo: 0xb6, hi: 0xb6},\n\t{value: 0x2808, lo: 0xb7, hi: 0xb7},\n\t{value: 0x186d, lo: 0xbc, hi: 0xbc},\n\t{value: 0x4269, lo: 0xbe, hi: 0xbe},\n\t// Block 0x3d, offset 0x166\n\t{value: 0x0002, lo: 0x0d},\n\t{value: 0x1933, lo: 0x87, hi: 0x87},\n\t{value: 0x1930, lo: 0x88, hi: 0x88},\n\t{value: 0x1870, lo: 0x89, hi: 0x89},\n\t{value: 0x298e, lo: 0x97, hi: 0x97},\n\t{value: 0x0001, lo: 0x9f, hi: 0x9f},\n\t{value: 0x0021, lo: 0xb0, hi: 0xb0},\n\t{value: 0x0093, lo: 0xb1, hi: 0xb1},\n\t{value: 0x0029, lo: 0xb4, hi: 0xb9},\n\t{value: 0x0017, lo: 0xba, hi: 0xba},\n\t{value: 0x0467, lo: 0xbb, hi: 0xbb},\n\t{value: 0x003b, lo: 0xbc, hi: 0xbc},\n\t{value: 0x0011, lo: 0xbd, hi: 0xbe},\n\t{value: 0x009d, lo: 0xbf, hi: 0xbf},\n\t// Block 0x3e, offset 0x174\n\t{value: 0x0002, lo: 0x0f},\n\t{value: 0x0021, lo: 0x80, hi: 0x89},\n\t{value: 0x0017, lo: 0x8a, hi: 0x8a},\n\t{value: 0x0467, lo: 0x8b, hi: 0x8b},\n\t{value: 0x003b, lo: 0x8c, hi: 0x8c},\n\t{value: 0x0011, lo: 0x8d, hi: 0x8e},\n\t{value: 0x0083, lo: 0x90, hi: 0x90},\n\t{value: 0x008b, lo: 0x91, hi: 0x91},\n\t{value: 0x009f, lo: 0x92, hi: 0x92},\n\t{value: 0x00b1, lo: 0x93, hi: 0x93},\n\t{value: 0x0104, lo: 0x94, hi: 0x94},\n\t{value: 0x0091, lo: 0x95, hi: 0x95},\n\t{value: 0x0097, lo: 0x96, hi: 0x99},\n\t{value: 0x00a1, lo: 0x9a, hi: 0x9a},\n\t{value: 0x00a7, lo: 0x9b, hi: 0x9c},\n\t{value: 0x1999, lo: 0xa8, hi: 0xa8},\n\t// Block 0x3f, offset 0x184\n\t{value: 0x0000, lo: 0x0d},\n\t{value: 0x8132, lo: 0x90, hi: 0x91},\n\t{value: 0x8101, lo: 0x92, hi: 0x93},\n\t{value: 0x8132, lo: 0x94, hi: 0x97},\n\t{value: 0x8101, lo: 0x98, hi: 0x9a},\n\t{value: 0x8132, lo: 0x9b, hi: 0x9c},\n\t{value: 0x8132, lo: 0xa1, hi: 0xa1},\n\t{value: 0x8101, lo: 0xa5, hi: 0xa6},\n\t{value: 0x8132, lo: 0xa7, hi: 0xa7},\n\t{value: 0x812d, lo: 0xa8, hi: 0xa8},\n\t{value: 0x8132, lo: 0xa9, hi: 0xa9},\n\t{value: 0x8101, lo: 0xaa, hi: 0xab},\n\t{value: 0x812d, lo: 0xac, hi: 0xaf},\n\t{value: 0x8132, lo: 0xb0, hi: 0xb0},\n\t// Block 0x40, offset 0x192\n\t{value: 0x0007, lo: 0x06},\n\t{value: 0x2180, lo: 0x89, hi: 0x89},\n\t{value: 0xa000, lo: 0x90, hi: 0x90},\n\t{value: 0xa000, lo: 0x92, hi: 0x92},\n\t{value: 0xa000, lo: 0x94, hi: 0x94},\n\t{value: 0x3bb9, lo: 0x9a, hi: 0x9b},\n\t{value: 0x3bc7, lo: 0xae, hi: 0xae},\n\t// Block 0x41, offset 0x199\n\t{value: 0x000e, lo: 0x05},\n\t{value: 0x3bce, lo: 0x8d, hi: 0x8e},\n\t{value: 0x3bd5, lo: 0x8f, hi: 0x8f},\n\t{value: 0xa000, lo: 0x90, hi: 0x90},\n\t{value: 0xa000, lo: 0x92, hi: 0x92},\n\t{value: 0xa000, lo: 0x94, hi: 0x94},\n\t// Block 0x42, offset 0x19f\n\t{value: 0x0173, lo: 0x0e},\n\t{value: 0xa000, lo: 0x83, hi: 0x83},\n\t{value: 0x3be3, lo: 0x84, hi: 0x84},\n\t{value: 0xa000, lo: 0x88, hi: 0x88},\n\t{value: 0x3bea, lo: 0x89, hi: 0x89},\n\t{value: 0xa000, lo: 0x8b, hi: 0x8b},\n\t{value: 0x3bf1, lo: 0x8c, hi: 0x8c},\n\t{value: 0xa000, lo: 0xa3, hi: 0xa3},\n\t{value: 0x3bf8, lo: 0xa4, hi: 0xa4},\n\t{value: 0xa000, lo: 0xa5, hi: 0xa5},\n\t{value: 0x3bff, lo: 0xa6, hi: 0xa6},\n\t{value: 0x269f, lo: 0xac, hi: 0xad},\n\t{value: 0x26a6, lo: 0xaf, hi: 0xaf},\n\t{value: 0x281c, lo: 0xb0, hi: 0xb0},\n\t{value: 0xa000, lo: 0xbc, hi: 0xbc},\n\t// Block 0x43, offset 0x1ae\n\t{value: 0x0007, lo: 0x03},\n\t{value: 0x3c68, lo: 0xa0, hi: 0xa1},\n\t{value: 0x3c92, lo: 0xa2, hi: 0xa3},\n\t{value: 0x3cbc, lo: 0xaa, hi: 0xad},\n\t// Block 0x44, offset 0x1b2\n\t{value: 0x0004, lo: 0x01},\n\t{value: 0x048b, lo: 0xa9, hi: 0xaa},\n\t// Block 0x45, offset 0x1b4\n\t{value: 0x0002, lo: 0x03},\n\t{value: 0x0057, lo: 0x80, hi: 0x8f},\n\t{value: 0x0083, lo: 0x90, hi: 0xa9},\n\t{value: 0x0021, lo: 0xaa, hi: 0xaa},\n\t// Block 0x46, offset 0x1b8\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x299b, lo: 0x8c, hi: 0x8c},\n\t// Block 0x47, offset 0x1ba\n\t{value: 0x0263, lo: 0x02},\n\t{value: 0x1b8c, lo: 0xb4, hi: 0xb4},\n\t{value: 0x192d, lo: 0xb5, hi: 0xb6},\n\t// Block 0x48, offset 0x1bd\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x44dd, lo: 0x9c, hi: 0x9c},\n\t// Block 0x49, offset 0x1bf\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0095, lo: 0xbc, hi: 0xbc},\n\t{value: 0x006d, lo: 0xbd, hi: 0xbd},\n\t// Block 0x4a, offset 0x1c2\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8132, lo: 0xaf, hi: 0xb1},\n\t// Block 0x4b, offset 0x1c4\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x047f, lo: 0xaf, hi: 0xaf},\n\t{value: 0x8104, lo: 0xbf, hi: 0xbf},\n\t// Block 0x4c, offset 0x1c7\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8132, lo: 0xa0, hi: 0xbf},\n\t// Block 0x4d, offset 0x1c9\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x0dc3, lo: 0x9f, hi: 0x9f},\n\t// Block 0x4e, offset 0x1cb\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x162f, lo: 0xb3, hi: 0xb3},\n\t// Block 0x4f, offset 0x1cd\n\t{value: 0x0004, lo: 0x0b},\n\t{value: 0x1597, lo: 0x80, hi: 0x82},\n\t{value: 0x15af, lo: 0x83, hi: 0x83},\n\t{value: 0x15c7, lo: 0x84, hi: 0x85},\n\t{value: 0x15d7, lo: 0x86, hi: 0x89},\n\t{value: 0x15eb, lo: 0x8a, hi: 0x8c},\n\t{value: 0x15ff, lo: 0x8d, hi: 0x8d},\n\t{value: 0x1607, lo: 0x8e, hi: 0x8e},\n\t{value: 0x160f, lo: 0x8f, hi: 0x90},\n\t{value: 0x161b, lo: 0x91, hi: 0x93},\n\t{value: 0x162b, lo: 0x94, hi: 0x94},\n\t{value: 0x1633, lo: 0x95, hi: 0x95},\n\t// Block 0x50, offset 0x1d9\n\t{value: 0x0004, lo: 0x09},\n\t{value: 0x0001, lo: 0x80, hi: 0x80},\n\t{value: 0x812c, lo: 0xaa, hi: 0xaa},\n\t{value: 0x8131, lo: 0xab, hi: 0xab},\n\t{value: 0x8133, lo: 0xac, hi: 0xac},\n\t{value: 0x812e, lo: 0xad, hi: 0xad},\n\t{value: 0x812f, lo: 0xae, hi: 0xae},\n\t{value: 0x812f, lo: 0xaf, hi: 0xaf},\n\t{value: 0x04b3, lo: 0xb6, hi: 0xb6},\n\t{value: 0x0887, lo: 0xb8, hi: 0xba},\n\t// Block 0x51, offset 0x1e3\n\t{value: 0x0006, lo: 0x09},\n\t{value: 0x0313, lo: 0xb1, hi: 0xb1},\n\t{value: 0x0317, lo: 0xb2, hi: 0xb2},\n\t{value: 0x4a3b, lo: 0xb3, hi: 0xb3},\n\t{value: 0x031b, lo: 0xb4, hi: 0xb4},\n\t{value: 0x4a41, lo: 0xb5, hi: 0xb6},\n\t{value: 0x031f, lo: 0xb7, hi: 0xb7},\n\t{value: 0x0323, lo: 0xb8, hi: 0xb8},\n\t{value: 0x0327, lo: 0xb9, hi: 0xb9},\n\t{value: 0x4a4d, lo: 0xba, hi: 0xbf},\n\t// Block 0x52, offset 0x1ed\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8132, lo: 0xaf, hi: 0xaf},\n\t{value: 0x8132, lo: 0xb4, hi: 0xbd},\n\t// Block 0x53, offset 0x1f0\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x020f, lo: 0x9c, hi: 0x9c},\n\t{value: 0x0212, lo: 0x9d, hi: 0x9d},\n\t{value: 0x8132, lo: 0x9e, hi: 0x9f},\n\t// Block 0x54, offset 0x1f4\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8132, lo: 0xb0, hi: 0xb1},\n\t// Block 0x55, offset 0x1f6\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x163b, lo: 0xb0, hi: 0xb0},\n\t// Block 0x56, offset 0x1f8\n\t{value: 0x000c, lo: 0x01},\n\t{value: 0x00d7, lo: 0xb8, hi: 0xb9},\n\t// Block 0x57, offset 0x1fa\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0x86, hi: 0x86},\n\t// Block 0x58, offset 0x1fc\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8104, lo: 0x84, hi: 0x84},\n\t{value: 0x8132, lo: 0xa0, hi: 0xb1},\n\t// Block 0x59, offset 0x1ff\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x812d, lo: 0xab, hi: 0xad},\n\t// Block 0x5a, offset 0x201\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0x93, hi: 0x93},\n\t// Block 0x5b, offset 0x203\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8102, lo: 0xb3, hi: 0xb3},\n\t// Block 0x5c, offset 0x205\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0x80, hi: 0x80},\n\t// Block 0x5d, offset 0x207\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x8132, lo: 0xb0, hi: 0xb0},\n\t{value: 0x8132, lo: 0xb2, hi: 0xb3},\n\t{value: 0x812d, lo: 0xb4, hi: 0xb4},\n\t{value: 0x8132, lo: 0xb7, hi: 0xb8},\n\t{value: 0x8132, lo: 0xbe, hi: 0xbf},\n\t// Block 0x5e, offset 0x20d\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8132, lo: 0x81, hi: 0x81},\n\t{value: 0x8104, lo: 0xb6, hi: 0xb6},\n\t// Block 0x5f, offset 0x210\n\t{value: 0x0008, lo: 0x03},\n\t{value: 0x1637, lo: 0x9c, hi: 0x9d},\n\t{value: 0x0125, lo: 0x9e, hi: 0x9e},\n\t{value: 0x1643, lo: 0x9f, hi: 0x9f},\n\t// Block 0x60, offset 0x214\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0xad, hi: 0xad},\n\t// Block 0x61, offset 0x216\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0xe500, lo: 0x80, hi: 0x80},\n\t{value: 0xc600, lo: 0x81, hi: 0x9b},\n\t{value: 0xe500, lo: 0x9c, hi: 0x9c},\n\t{value: 0xc600, lo: 0x9d, hi: 0xb7},\n\t{value: 0xe500, lo: 0xb8, hi: 0xb8},\n\t{value: 0xc600, lo: 0xb9, hi: 0xbf},\n\t// Block 0x62, offset 0x21d\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0xc600, lo: 0x80, hi: 0x93},\n\t{value: 0xe500, lo: 0x94, hi: 0x94},\n\t{value: 0xc600, lo: 0x95, hi: 0xaf},\n\t{value: 0xe500, lo: 0xb0, hi: 0xb0},\n\t{value: 0xc600, lo: 0xb1, hi: 0xbf},\n\t// Block 0x63, offset 0x223\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0xc600, lo: 0x80, hi: 0x8b},\n\t{value: 0xe500, lo: 0x8c, hi: 0x8c},\n\t{value: 0xc600, lo: 0x8d, hi: 0xa7},\n\t{value: 0xe500, lo: 0xa8, hi: 0xa8},\n\t{value: 0xc600, lo: 0xa9, hi: 0xbf},\n\t// Block 0x64, offset 0x229\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0xc600, lo: 0x80, hi: 0x83},\n\t{value: 0xe500, lo: 0x84, hi: 0x84},\n\t{value: 0xc600, lo: 0x85, hi: 0x9f},\n\t{value: 0xe500, lo: 0xa0, hi: 0xa0},\n\t{value: 0xc600, lo: 0xa1, hi: 0xbb},\n\t{value: 0xe500, lo: 0xbc, hi: 0xbc},\n\t{value: 0xc600, lo: 0xbd, hi: 0xbf},\n\t// Block 0x65, offset 0x231\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0xc600, lo: 0x80, hi: 0x97},\n\t{value: 0xe500, lo: 0x98, hi: 0x98},\n\t{value: 0xc600, lo: 0x99, hi: 0xb3},\n\t{value: 0xe500, lo: 0xb4, hi: 0xb4},\n\t{value: 0xc600, lo: 0xb5, hi: 0xbf},\n\t// Block 0x66, offset 0x237\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0xc600, lo: 0x80, hi: 0x8f},\n\t{value: 0xe500, lo: 0x90, hi: 0x90},\n\t{value: 0xc600, lo: 0x91, hi: 0xab},\n\t{value: 0xe500, lo: 0xac, hi: 0xac},\n\t{value: 0xc600, lo: 0xad, hi: 0xbf},\n\t// Block 0x67, offset 0x23d\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0xc600, lo: 0x80, hi: 0x87},\n\t{value: 0xe500, lo: 0x88, hi: 0x88},\n\t{value: 0xc600, lo: 0x89, hi: 0xa3},\n\t{value: 0xe500, lo: 0xa4, hi: 0xa4},\n\t{value: 0xc600, lo: 0xa5, hi: 0xbf},\n\t// Block 0x68, offset 0x243\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0xc600, lo: 0x80, hi: 0x87},\n\t{value: 0xe500, lo: 0x88, hi: 0x88},\n\t{value: 0xc600, lo: 0x89, hi: 0xa3},\n\t// Block 0x69, offset 0x247\n\t{value: 0x0002, lo: 0x01},\n\t{value: 0x0003, lo: 0x81, hi: 0xbf},\n\t// Block 0x6a, offset 0x249\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x812d, lo: 0xbd, hi: 0xbd},\n\t// Block 0x6b, offset 0x24b\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x812d, lo: 0xa0, hi: 0xa0},\n\t// Block 0x6c, offset 0x24d\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8132, lo: 0xb6, hi: 0xba},\n\t// Block 0x6d, offset 0x24f\n\t{value: 0x002c, lo: 0x05},\n\t{value: 0x812d, lo: 0x8d, hi: 0x8d},\n\t{value: 0x8132, lo: 0x8f, hi: 0x8f},\n\t{value: 0x8132, lo: 0xb8, hi: 0xb8},\n\t{value: 0x8101, lo: 0xb9, hi: 0xba},\n\t{value: 0x8104, lo: 0xbf, hi: 0xbf},\n\t// Block 0x6e, offset 0x255\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8132, lo: 0xa5, hi: 0xa5},\n\t{value: 0x812d, lo: 0xa6, hi: 0xa6},\n\t// Block 0x6f, offset 0x258\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8132, lo: 0xa4, hi: 0xa7},\n\t// Block 0x70, offset 0x25a\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x812d, lo: 0x86, hi: 0x87},\n\t{value: 0x8132, lo: 0x88, hi: 0x8a},\n\t{value: 0x812d, lo: 0x8b, hi: 0x8b},\n\t{value: 0x8132, lo: 0x8c, hi: 0x8c},\n\t{value: 0x812d, lo: 0x8d, hi: 0x90},\n\t// Block 0x71, offset 0x260\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8104, lo: 0x86, hi: 0x86},\n\t{value: 0x8104, lo: 0xbf, hi: 0xbf},\n\t// Block 0x72, offset 0x263\n\t{value: 0x17fe, lo: 0x07},\n\t{value: 0xa000, lo: 0x99, hi: 0x99},\n\t{value: 0x4238, lo: 0x9a, hi: 0x9a},\n\t{value: 0xa000, lo: 0x9b, hi: 0x9b},\n\t{value: 0x4242, lo: 0x9c, hi: 0x9c},\n\t{value: 0xa000, lo: 0xa5, hi: 0xa5},\n\t{value: 0x424c, lo: 0xab, hi: 0xab},\n\t{value: 0x8104, lo: 0xb9, hi: 0xba},\n\t// Block 0x73, offset 0x26b\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0x8132, lo: 0x80, hi: 0x82},\n\t{value: 0x9900, lo: 0xa7, hi: 0xa7},\n\t{value: 0x2d7e, lo: 0xae, hi: 0xae},\n\t{value: 0x2d88, lo: 0xaf, hi: 0xaf},\n\t{value: 0xa000, lo: 0xb1, hi: 0xb2},\n\t{value: 0x8104, lo: 0xb3, hi: 0xb4},\n\t// Block 0x74, offset 0x272\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8104, lo: 0x80, hi: 0x80},\n\t{value: 0x8102, lo: 0x8a, hi: 0x8a},\n\t// Block 0x75, offset 0x275\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8104, lo: 0xb5, hi: 0xb5},\n\t{value: 0x8102, lo: 0xb6, hi: 0xb6},\n\t// Block 0x76, offset 0x278\n\t{value: 0x0002, lo: 0x01},\n\t{value: 0x8102, lo: 0xa9, hi: 0xaa},\n\t// Block 0x77, offset 0x27a\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8102, lo: 0xbb, hi: 0xbc},\n\t{value: 0x9900, lo: 0xbe, hi: 0xbe},\n\t// Block 0x78, offset 0x27d\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0xa000, lo: 0x87, hi: 0x87},\n\t{value: 0x2d92, lo: 0x8b, hi: 0x8b},\n\t{value: 0x2d9c, lo: 0x8c, hi: 0x8c},\n\t{value: 0x8104, lo: 0x8d, hi: 0x8d},\n\t{value: 0x9900, lo: 0x97, hi: 0x97},\n\t{value: 0x8132, lo: 0xa6, hi: 0xac},\n\t{value: 0x8132, lo: 0xb0, hi: 0xb4},\n\t// Block 0x79, offset 0x285\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x8104, lo: 0x82, hi: 0x82},\n\t{value: 0x8102, lo: 0x86, hi: 0x86},\n\t{value: 0x8132, lo: 0x9e, hi: 0x9e},\n\t// Block 0x7a, offset 0x289\n\t{value: 0x6b5a, lo: 0x06},\n\t{value: 0x9900, lo: 0xb0, hi: 0xb0},\n\t{value: 0xa000, lo: 0xb9, hi: 0xb9},\n\t{value: 0x9900, lo: 0xba, hi: 0xba},\n\t{value: 0x2db0, lo: 0xbb, hi: 0xbb},\n\t{value: 0x2da6, lo: 0xbc, hi: 0xbd},\n\t{value: 0x2dba, lo: 0xbe, hi: 0xbe},\n\t// Block 0x7b, offset 0x290\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8104, lo: 0x82, hi: 0x82},\n\t{value: 0x8102, lo: 0x83, hi: 0x83},\n\t// Block 0x7c, offset 0x293\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x9900, lo: 0xaf, hi: 0xaf},\n\t{value: 0xa000, lo: 0xb8, hi: 0xb9},\n\t{value: 0x2dc4, lo: 0xba, hi: 0xba},\n\t{value: 0x2dce, lo: 0xbb, hi: 0xbb},\n\t{value: 0x8104, lo: 0xbf, hi: 0xbf},\n\t// Block 0x7d, offset 0x299\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8102, lo: 0x80, hi: 0x80},\n\t// Block 0x7e, offset 0x29b\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0xbf, hi: 0xbf},\n\t// Block 0x7f, offset 0x29d\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8104, lo: 0xb6, hi: 0xb6},\n\t{value: 0x8102, lo: 0xb7, hi: 0xb7},\n\t// Block 0x80, offset 0x2a0\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0xab, hi: 0xab},\n\t// Block 0x81, offset 0x2a2\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8104, lo: 0xb9, hi: 0xb9},\n\t{value: 0x8102, lo: 0xba, hi: 0xba},\n\t// Block 0x82, offset 0x2a5\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0xb4, hi: 0xb4},\n\t// Block 0x83, offset 0x2a7\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0x87, hi: 0x87},\n\t// Block 0x84, offset 0x2a9\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0x99, hi: 0x99},\n\t// Block 0x85, offset 0x2ab\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8102, lo: 0x82, hi: 0x82},\n\t{value: 0x8104, lo: 0x84, hi: 0x85},\n\t// Block 0x86, offset 0x2ae\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0x97, hi: 0x97},\n\t// Block 0x87, offset 0x2b0\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8101, lo: 0xb0, hi: 0xb4},\n\t// Block 0x88, offset 0x2b2\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8132, lo: 0xb0, hi: 0xb6},\n\t// Block 0x89, offset 0x2b4\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8101, lo: 0x9e, hi: 0x9e},\n\t// Block 0x8a, offset 0x2b6\n\t{value: 0x0000, lo: 0x0c},\n\t{value: 0x45cc, lo: 0x9e, hi: 0x9e},\n\t{value: 0x45d6, lo: 0x9f, hi: 0x9f},\n\t{value: 0x460a, lo: 0xa0, hi: 0xa0},\n\t{value: 0x4618, lo: 0xa1, hi: 0xa1},\n\t{value: 0x4626, lo: 0xa2, hi: 0xa2},\n\t{value: 0x4634, lo: 0xa3, hi: 0xa3},\n\t{value: 0x4642, lo: 0xa4, hi: 0xa4},\n\t{value: 0x812b, lo: 0xa5, hi: 0xa6},\n\t{value: 0x8101, lo: 0xa7, hi: 0xa9},\n\t{value: 0x8130, lo: 0xad, hi: 0xad},\n\t{value: 0x812b, lo: 0xae, hi: 0xb2},\n\t{value: 0x812d, lo: 0xbb, hi: 0xbf},\n\t// Block 0x8b, offset 0x2c3\n\t{value: 0x0000, lo: 0x09},\n\t{value: 0x812d, lo: 0x80, hi: 0x82},\n\t{value: 0x8132, lo: 0x85, hi: 0x89},\n\t{value: 0x812d, lo: 0x8a, hi: 0x8b},\n\t{value: 0x8132, lo: 0xaa, hi: 0xad},\n\t{value: 0x45e0, lo: 0xbb, hi: 0xbb},\n\t{value: 0x45ea, lo: 0xbc, hi: 0xbc},\n\t{value: 0x4650, lo: 0xbd, hi: 0xbd},\n\t{value: 0x466c, lo: 0xbe, hi: 0xbe},\n\t{value: 0x465e, lo: 0xbf, hi: 0xbf},\n\t// Block 0x8c, offset 0x2cd\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x467a, lo: 0x80, hi: 0x80},\n\t// Block 0x8d, offset 0x2cf\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8132, lo: 0x82, hi: 0x84},\n\t// Block 0x8e, offset 0x2d1\n\t{value: 0x0002, lo: 0x03},\n\t{value: 0x0043, lo: 0x80, hi: 0x99},\n\t{value: 0x0083, lo: 0x9a, hi: 0xb3},\n\t{value: 0x0043, lo: 0xb4, hi: 0xbf},\n\t// Block 0x8f, offset 0x2d5\n\t{value: 0x0002, lo: 0x04},\n\t{value: 0x005b, lo: 0x80, hi: 0x8d},\n\t{value: 0x0083, lo: 0x8e, hi: 0x94},\n\t{value: 0x0093, lo: 0x96, hi: 0xa7},\n\t{value: 0x0043, lo: 0xa8, hi: 0xbf},\n\t// Block 0x90, offset 0x2da\n\t{value: 0x0002, lo: 0x0b},\n\t{value: 0x0073, lo: 0x80, hi: 0x81},\n\t{value: 0x0083, lo: 0x82, hi: 0x9b},\n\t{value: 0x0043, lo: 0x9c, hi: 0x9c},\n\t{value: 0x0047, lo: 0x9e, hi: 0x9f},\n\t{value: 0x004f, lo: 0xa2, hi: 0xa2},\n\t{value: 0x0055, lo: 0xa5, hi: 0xa6},\n\t{value: 0x005d, lo: 0xa9, hi: 0xac},\n\t{value: 0x0067, lo: 0xae, hi: 0xb5},\n\t{value: 0x0083, lo: 0xb6, hi: 0xb9},\n\t{value: 0x008d, lo: 0xbb, hi: 0xbb},\n\t{value: 0x0091, lo: 0xbd, hi: 0xbf},\n\t// Block 0x91, offset 0x2e6\n\t{value: 0x0002, lo: 0x04},\n\t{value: 0x0097, lo: 0x80, hi: 0x83},\n\t{value: 0x00a1, lo: 0x85, hi: 0x8f},\n\t{value: 0x0043, lo: 0x90, hi: 0xa9},\n\t{value: 0x0083, lo: 0xaa, hi: 0xbf},\n\t// Block 0x92, offset 0x2eb\n\t{value: 0x0002, lo: 0x08},\n\t{value: 0x00af, lo: 0x80, hi: 0x83},\n\t{value: 0x0043, lo: 0x84, hi: 0x85},\n\t{value: 0x0049, lo: 0x87, hi: 0x8a},\n\t{value: 0x0055, lo: 0x8d, hi: 0x94},\n\t{value: 0x0067, lo: 0x96, hi: 0x9c},\n\t{value: 0x0083, lo: 0x9e, hi: 0xb7},\n\t{value: 0x0043, lo: 0xb8, hi: 0xb9},\n\t{value: 0x0049, lo: 0xbb, hi: 0xbe},\n\t// Block 0x93, offset 0x2f4\n\t{value: 0x0002, lo: 0x05},\n\t{value: 0x0053, lo: 0x80, hi: 0x84},\n\t{value: 0x005f, lo: 0x86, hi: 0x86},\n\t{value: 0x0067, lo: 0x8a, hi: 0x90},\n\t{value: 0x0083, lo: 0x92, hi: 0xab},\n\t{value: 0x0043, lo: 0xac, hi: 0xbf},\n\t// Block 0x94, offset 0x2fa\n\t{value: 0x0002, lo: 0x04},\n\t{value: 0x006b, lo: 0x80, hi: 0x85},\n\t{value: 0x0083, lo: 0x86, hi: 0x9f},\n\t{value: 0x0043, lo: 0xa0, hi: 0xb9},\n\t{value: 0x0083, lo: 0xba, hi: 0xbf},\n\t// Block 0x95, offset 0x2ff\n\t{value: 0x0002, lo: 0x03},\n\t{value: 0x008f, lo: 0x80, hi: 0x93},\n\t{value: 0x0043, lo: 0x94, hi: 0xad},\n\t{value: 0x0083, lo: 0xae, hi: 0xbf},\n\t// Block 0x96, offset 0x303\n\t{value: 0x0002, lo: 0x04},\n\t{value: 0x00a7, lo: 0x80, hi: 0x87},\n\t{value: 0x0043, lo: 0x88, hi: 0xa1},\n\t{value: 0x0083, lo: 0xa2, hi: 0xbb},\n\t{value: 0x0043, lo: 0xbc, hi: 0xbf},\n\t// Block 0x97, offset 0x308\n\t{value: 0x0002, lo: 0x03},\n\t{value: 0x004b, lo: 0x80, hi: 0x95},\n\t{value: 0x0083, lo: 0x96, hi: 0xaf},\n\t{value: 0x0043, lo: 0xb0, hi: 0xbf},\n\t// Block 0x98, offset 0x30c\n\t{value: 0x0003, lo: 0x0f},\n\t{value: 0x01b8, lo: 0x80, hi: 0x80},\n\t{value: 0x045f, lo: 0x81, hi: 0x81},\n\t{value: 0x01bb, lo: 0x82, hi: 0x9a},\n\t{value: 0x045b, lo: 0x9b, hi: 0x9b},\n\t{value: 0x01c7, lo: 0x9c, hi: 0x9c},\n\t{value: 0x01d0, lo: 0x9d, hi: 0x9d},\n\t{value: 0x01d6, lo: 0x9e, hi: 0x9e},\n\t{value: 0x01fa, lo: 0x9f, hi: 0x9f},\n\t{value: 0x01eb, lo: 0xa0, hi: 0xa0},\n\t{value: 0x01e8, lo: 0xa1, hi: 0xa1},\n\t{value: 0x0173, lo: 0xa2, hi: 0xb2},\n\t{value: 0x0188, lo: 0xb3, hi: 0xb3},\n\t{value: 0x01a6, lo: 0xb4, hi: 0xba},\n\t{value: 0x045f, lo: 0xbb, hi: 0xbb},\n\t{value: 0x01bb, lo: 0xbc, hi: 0xbf},\n\t// Block 0x99, offset 0x31c\n\t{value: 0x0003, lo: 0x0d},\n\t{value: 0x01c7, lo: 0x80, hi: 0x94},\n\t{value: 0x045b, lo: 0x95, hi: 0x95},\n\t{value: 0x01c7, lo: 0x96, hi: 0x96},\n\t{value: 0x01d0, lo: 0x97, hi: 0x97},\n\t{value: 0x01d6, lo: 0x98, hi: 0x98},\n\t{value: 0x01fa, lo: 0x99, hi: 0x99},\n\t{value: 0x01eb, lo: 0x9a, hi: 0x9a},\n\t{value: 0x01e8, lo: 0x9b, hi: 0x9b},\n\t{value: 0x0173, lo: 0x9c, hi: 0xac},\n\t{value: 0x0188, lo: 0xad, hi: 0xad},\n\t{value: 0x01a6, lo: 0xae, hi: 0xb4},\n\t{value: 0x045f, lo: 0xb5, hi: 0xb5},\n\t{value: 0x01bb, lo: 0xb6, hi: 0xbf},\n\t// Block 0x9a, offset 0x32a\n\t{value: 0x0003, lo: 0x0d},\n\t{value: 0x01d9, lo: 0x80, hi: 0x8e},\n\t{value: 0x045b, lo: 0x8f, hi: 0x8f},\n\t{value: 0x01c7, lo: 0x90, hi: 0x90},\n\t{value: 0x01d0, lo: 0x91, hi: 0x91},\n\t{value: 0x01d6, lo: 0x92, hi: 0x92},\n\t{value: 0x01fa, lo: 0x93, hi: 0x93},\n\t{value: 0x01eb, lo: 0x94, hi: 0x94},\n\t{value: 0x01e8, lo: 0x95, hi: 0x95},\n\t{value: 0x0173, lo: 0x96, hi: 0xa6},\n\t{value: 0x0188, lo: 0xa7, hi: 0xa7},\n\t{value: 0x01a6, lo: 0xa8, hi: 0xae},\n\t{value: 0x045f, lo: 0xaf, hi: 0xaf},\n\t{value: 0x01bb, lo: 0xb0, hi: 0xbf},\n\t// Block 0x9b, offset 0x338\n\t{value: 0x0003, lo: 0x0d},\n\t{value: 0x01eb, lo: 0x80, hi: 0x88},\n\t{value: 0x045b, lo: 0x89, hi: 0x89},\n\t{value: 0x01c7, lo: 0x8a, hi: 0x8a},\n\t{value: 0x01d0, lo: 0x8b, hi: 0x8b},\n\t{value: 0x01d6, lo: 0x8c, hi: 0x8c},\n\t{value: 0x01fa, lo: 0x8d, hi: 0x8d},\n\t{value: 0x01eb, lo: 0x8e, hi: 0x8e},\n\t{value: 0x01e8, lo: 0x8f, hi: 0x8f},\n\t{value: 0x0173, lo: 0x90, hi: 0xa0},\n\t{value: 0x0188, lo: 0xa1, hi: 0xa1},\n\t{value: 0x01a6, lo: 0xa2, hi: 0xa8},\n\t{value: 0x045f, lo: 0xa9, hi: 0xa9},\n\t{value: 0x01bb, lo: 0xaa, hi: 0xbf},\n\t// Block 0x9c, offset 0x346\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x8132, lo: 0x80, hi: 0x86},\n\t{value: 0x8132, lo: 0x88, hi: 0x98},\n\t{value: 0x8132, lo: 0x9b, hi: 0xa1},\n\t{value: 0x8132, lo: 0xa3, hi: 0xa4},\n\t{value: 0x8132, lo: 0xa6, hi: 0xaa},\n\t// Block 0x9d, offset 0x34c\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x812d, lo: 0x90, hi: 0x96},\n\t// Block 0x9e, offset 0x34e\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8132, lo: 0x84, hi: 0x89},\n\t{value: 0x8102, lo: 0x8a, hi: 0x8a},\n\t// Block 0x9f, offset 0x351\n\t{value: 0x0002, lo: 0x09},\n\t{value: 0x0063, lo: 0x80, hi: 0x89},\n\t{value: 0x1951, lo: 0x8a, hi: 0x8a},\n\t{value: 0x1981, lo: 0x8b, hi: 0x8b},\n\t{value: 0x199c, lo: 0x8c, hi: 0x8c},\n\t{value: 0x19a2, lo: 0x8d, hi: 0x8d},\n\t{value: 0x1bc0, lo: 0x8e, hi: 0x8e},\n\t{value: 0x19ae, lo: 0x8f, hi: 0x8f},\n\t{value: 0x197b, lo: 0xaa, hi: 0xaa},\n\t{value: 0x197e, lo: 0xab, hi: 0xab},\n\t// Block 0xa0, offset 0x35b\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x193f, lo: 0x90, hi: 0x90},\n\t// Block 0xa1, offset 0x35d\n\t{value: 0x0028, lo: 0x09},\n\t{value: 0x2862, lo: 0x80, hi: 0x80},\n\t{value: 0x2826, lo: 0x81, hi: 0x81},\n\t{value: 0x2830, lo: 0x82, hi: 0x82},\n\t{value: 0x2844, lo: 0x83, hi: 0x84},\n\t{value: 0x284e, lo: 0x85, hi: 0x86},\n\t{value: 0x283a, lo: 0x87, hi: 0x87},\n\t{value: 0x2858, lo: 0x88, hi: 0x88},\n\t{value: 0x0b6f, lo: 0x90, hi: 0x90},\n\t{value: 0x08e7, lo: 0x91, hi: 0x91},\n}\n\n// recompMap: 7520 bytes (entries only)\nvar recompMap map[uint32]rune\nvar recompMapOnce sync.Once\n\nconst recompMapPacked = \"\" +\n\t\"\\x00A\\x03\\x00\\x00\\x00\\x00\\xc0\" + // 0x00410300: 0x000000C0\n\t\"\\x00A\\x03\\x01\\x00\\x00\\x00\\xc1\" + // 0x00410301: 0x000000C1\n\t\"\\x00A\\x03\\x02\\x00\\x00\\x00\\xc2\" + // 0x00410302: 0x000000C2\n\t\"\\x00A\\x03\\x03\\x00\\x00\\x00\\xc3\" + // 0x00410303: 0x000000C3\n\t\"\\x00A\\x03\\b\\x00\\x00\\x00\\xc4\" + // 0x00410308: 0x000000C4\n\t\"\\x00A\\x03\\n\\x00\\x00\\x00\\xc5\" + // 0x0041030A: 0x000000C5\n\t\"\\x00C\\x03'\\x00\\x00\\x00\\xc7\" + // 0x00430327: 0x000000C7\n\t\"\\x00E\\x03\\x00\\x00\\x00\\x00\\xc8\" + // 0x00450300: 0x000000C8\n\t\"\\x00E\\x03\\x01\\x00\\x00\\x00\\xc9\" + // 0x00450301: 0x000000C9\n\t\"\\x00E\\x03\\x02\\x00\\x00\\x00\\xca\" + // 0x00450302: 0x000000CA\n\t\"\\x00E\\x03\\b\\x00\\x00\\x00\\xcb\" + // 0x00450308: 0x000000CB\n\t\"\\x00I\\x03\\x00\\x00\\x00\\x00\\xcc\" + // 0x00490300: 0x000000CC\n\t\"\\x00I\\x03\\x01\\x00\\x00\\x00\\xcd\" + // 0x00490301: 0x000000CD\n\t\"\\x00I\\x03\\x02\\x00\\x00\\x00\\xce\" + // 0x00490302: 0x000000CE\n\t\"\\x00I\\x03\\b\\x00\\x00\\x00\\xcf\" + // 0x00490308: 0x000000CF\n\t\"\\x00N\\x03\\x03\\x00\\x00\\x00\\xd1\" + // 0x004E0303: 0x000000D1\n\t\"\\x00O\\x03\\x00\\x00\\x00\\x00\\xd2\" + // 0x004F0300: 0x000000D2\n\t\"\\x00O\\x03\\x01\\x00\\x00\\x00\\xd3\" + // 0x004F0301: 0x000000D3\n\t\"\\x00O\\x03\\x02\\x00\\x00\\x00\\xd4\" + // 0x004F0302: 0x000000D4\n\t\"\\x00O\\x03\\x03\\x00\\x00\\x00\\xd5\" + // 0x004F0303: 0x000000D5\n\t\"\\x00O\\x03\\b\\x00\\x00\\x00\\xd6\" + // 0x004F0308: 0x000000D6\n\t\"\\x00U\\x03\\x00\\x00\\x00\\x00\\xd9\" + // 0x00550300: 0x000000D9\n\t\"\\x00U\\x03\\x01\\x00\\x00\\x00\\xda\" + // 0x00550301: 0x000000DA\n\t\"\\x00U\\x03\\x02\\x00\\x00\\x00\\xdb\" + // 0x00550302: 0x000000DB\n\t\"\\x00U\\x03\\b\\x00\\x00\\x00\\xdc\" + // 0x00550308: 0x000000DC\n\t\"\\x00Y\\x03\\x01\\x00\\x00\\x00\\xdd\" + // 0x00590301: 0x000000DD\n\t\"\\x00a\\x03\\x00\\x00\\x00\\x00\\xe0\" + // 0x00610300: 0x000000E0\n\t\"\\x00a\\x03\\x01\\x00\\x00\\x00\\xe1\" + // 0x00610301: 0x000000E1\n\t\"\\x00a\\x03\\x02\\x00\\x00\\x00\\xe2\" + // 0x00610302: 0x000000E2\n\t\"\\x00a\\x03\\x03\\x00\\x00\\x00\\xe3\" + // 0x00610303: 0x000000E3\n\t\"\\x00a\\x03\\b\\x00\\x00\\x00\\xe4\" + // 0x00610308: 0x000000E4\n\t\"\\x00a\\x03\\n\\x00\\x00\\x00\\xe5\" + // 0x0061030A: 0x000000E5\n\t\"\\x00c\\x03'\\x00\\x00\\x00\\xe7\" + // 0x00630327: 0x000000E7\n\t\"\\x00e\\x03\\x00\\x00\\x00\\x00\\xe8\" + // 0x00650300: 0x000000E8\n\t\"\\x00e\\x03\\x01\\x00\\x00\\x00\\xe9\" + // 0x00650301: 0x000000E9\n\t\"\\x00e\\x03\\x02\\x00\\x00\\x00\\xea\" + // 0x00650302: 0x000000EA\n\t\"\\x00e\\x03\\b\\x00\\x00\\x00\\xeb\" + // 0x00650308: 0x000000EB\n\t\"\\x00i\\x03\\x00\\x00\\x00\\x00\\xec\" + // 0x00690300: 0x000000EC\n\t\"\\x00i\\x03\\x01\\x00\\x00\\x00\\xed\" + // 0x00690301: 0x000000ED\n\t\"\\x00i\\x03\\x02\\x00\\x00\\x00\\xee\" + // 0x00690302: 0x000000EE\n\t\"\\x00i\\x03\\b\\x00\\x00\\x00\\xef\" + // 0x00690308: 0x000000EF\n\t\"\\x00n\\x03\\x03\\x00\\x00\\x00\\xf1\" + // 0x006E0303: 0x000000F1\n\t\"\\x00o\\x03\\x00\\x00\\x00\\x00\\xf2\" + // 0x006F0300: 0x000000F2\n\t\"\\x00o\\x03\\x01\\x00\\x00\\x00\\xf3\" + // 0x006F0301: 0x000000F3\n\t\"\\x00o\\x03\\x02\\x00\\x00\\x00\\xf4\" + // 0x006F0302: 0x000000F4\n\t\"\\x00o\\x03\\x03\\x00\\x00\\x00\\xf5\" + // 0x006F0303: 0x000000F5\n\t\"\\x00o\\x03\\b\\x00\\x00\\x00\\xf6\" + // 0x006F0308: 0x000000F6\n\t\"\\x00u\\x03\\x00\\x00\\x00\\x00\\xf9\" + // 0x00750300: 0x000000F9\n\t\"\\x00u\\x03\\x01\\x00\\x00\\x00\\xfa\" + // 0x00750301: 0x000000FA\n\t\"\\x00u\\x03\\x02\\x00\\x00\\x00\\xfb\" + // 0x00750302: 0x000000FB\n\t\"\\x00u\\x03\\b\\x00\\x00\\x00\\xfc\" + // 0x00750308: 0x000000FC\n\t\"\\x00y\\x03\\x01\\x00\\x00\\x00\\xfd\" + // 0x00790301: 0x000000FD\n\t\"\\x00y\\x03\\b\\x00\\x00\\x00\\xff\" + // 0x00790308: 0x000000FF\n\t\"\\x00A\\x03\\x04\\x00\\x00\\x01\\x00\" + // 0x00410304: 0x00000100\n\t\"\\x00a\\x03\\x04\\x00\\x00\\x01\\x01\" + // 0x00610304: 0x00000101\n\t\"\\x00A\\x03\\x06\\x00\\x00\\x01\\x02\" + // 0x00410306: 0x00000102\n\t\"\\x00a\\x03\\x06\\x00\\x00\\x01\\x03\" + // 0x00610306: 0x00000103\n\t\"\\x00A\\x03(\\x00\\x00\\x01\\x04\" + // 0x00410328: 0x00000104\n\t\"\\x00a\\x03(\\x00\\x00\\x01\\x05\" + // 0x00610328: 0x00000105\n\t\"\\x00C\\x03\\x01\\x00\\x00\\x01\\x06\" + // 0x00430301: 0x00000106\n\t\"\\x00c\\x03\\x01\\x00\\x00\\x01\\a\" + // 0x00630301: 0x00000107\n\t\"\\x00C\\x03\\x02\\x00\\x00\\x01\\b\" + // 0x00430302: 0x00000108\n\t\"\\x00c\\x03\\x02\\x00\\x00\\x01\\t\" + // 0x00630302: 0x00000109\n\t\"\\x00C\\x03\\a\\x00\\x00\\x01\\n\" + // 0x00430307: 0x0000010A\n\t\"\\x00c\\x03\\a\\x00\\x00\\x01\\v\" + // 0x00630307: 0x0000010B\n\t\"\\x00C\\x03\\f\\x00\\x00\\x01\\f\" + // 0x0043030C: 0x0000010C\n\t\"\\x00c\\x03\\f\\x00\\x00\\x01\\r\" + // 0x0063030C: 0x0000010D\n\t\"\\x00D\\x03\\f\\x00\\x00\\x01\\x0e\" + // 0x0044030C: 0x0000010E\n\t\"\\x00d\\x03\\f\\x00\\x00\\x01\\x0f\" + // 0x0064030C: 0x0000010F\n\t\"\\x00E\\x03\\x04\\x00\\x00\\x01\\x12\" + // 0x00450304: 0x00000112\n\t\"\\x00e\\x03\\x04\\x00\\x00\\x01\\x13\" + // 0x00650304: 0x00000113\n\t\"\\x00E\\x03\\x06\\x00\\x00\\x01\\x14\" + // 0x00450306: 0x00000114\n\t\"\\x00e\\x03\\x06\\x00\\x00\\x01\\x15\" + // 0x00650306: 0x00000115\n\t\"\\x00E\\x03\\a\\x00\\x00\\x01\\x16\" + // 0x00450307: 0x00000116\n\t\"\\x00e\\x03\\a\\x00\\x00\\x01\\x17\" + // 0x00650307: 0x00000117\n\t\"\\x00E\\x03(\\x00\\x00\\x01\\x18\" + // 0x00450328: 0x00000118\n\t\"\\x00e\\x03(\\x00\\x00\\x01\\x19\" + // 0x00650328: 0x00000119\n\t\"\\x00E\\x03\\f\\x00\\x00\\x01\\x1a\" + // 0x0045030C: 0x0000011A\n\t\"\\x00e\\x03\\f\\x00\\x00\\x01\\x1b\" + // 0x0065030C: 0x0000011B\n\t\"\\x00G\\x03\\x02\\x00\\x00\\x01\\x1c\" + // 0x00470302: 0x0000011C\n\t\"\\x00g\\x03\\x02\\x00\\x00\\x01\\x1d\" + // 0x00670302: 0x0000011D\n\t\"\\x00G\\x03\\x06\\x00\\x00\\x01\\x1e\" + // 0x00470306: 0x0000011E\n\t\"\\x00g\\x03\\x06\\x00\\x00\\x01\\x1f\" + // 0x00670306: 0x0000011F\n\t\"\\x00G\\x03\\a\\x00\\x00\\x01 \" + // 0x00470307: 0x00000120\n\t\"\\x00g\\x03\\a\\x00\\x00\\x01!\" + // 0x00670307: 0x00000121\n\t\"\\x00G\\x03'\\x00\\x00\\x01\\\"\" + // 0x00470327: 0x00000122\n\t\"\\x00g\\x03'\\x00\\x00\\x01#\" + // 0x00670327: 0x00000123\n\t\"\\x00H\\x03\\x02\\x00\\x00\\x01$\" + // 0x00480302: 0x00000124\n\t\"\\x00h\\x03\\x02\\x00\\x00\\x01%\" + // 0x00680302: 0x00000125\n\t\"\\x00I\\x03\\x03\\x00\\x00\\x01(\" + // 0x00490303: 0x00000128\n\t\"\\x00i\\x03\\x03\\x00\\x00\\x01)\" + // 0x00690303: 0x00000129\n\t\"\\x00I\\x03\\x04\\x00\\x00\\x01*\" + // 0x00490304: 0x0000012A\n\t\"\\x00i\\x03\\x04\\x00\\x00\\x01+\" + // 0x00690304: 0x0000012B\n\t\"\\x00I\\x03\\x06\\x00\\x00\\x01,\" + // 0x00490306: 0x0000012C\n\t\"\\x00i\\x03\\x06\\x00\\x00\\x01-\" + // 0x00690306: 0x0000012D\n\t\"\\x00I\\x03(\\x00\\x00\\x01.\" + // 0x00490328: 0x0000012E\n\t\"\\x00i\\x03(\\x00\\x00\\x01/\" + // 0x00690328: 0x0000012F\n\t\"\\x00I\\x03\\a\\x00\\x00\\x010\" + // 0x00490307: 0x00000130\n\t\"\\x00J\\x03\\x02\\x00\\x00\\x014\" + // 0x004A0302: 0x00000134\n\t\"\\x00j\\x03\\x02\\x00\\x00\\x015\" + // 0x006A0302: 0x00000135\n\t\"\\x00K\\x03'\\x00\\x00\\x016\" + // 0x004B0327: 0x00000136\n\t\"\\x00k\\x03'\\x00\\x00\\x017\" + // 0x006B0327: 0x00000137\n\t\"\\x00L\\x03\\x01\\x00\\x00\\x019\" + // 0x004C0301: 0x00000139\n\t\"\\x00l\\x03\\x01\\x00\\x00\\x01:\" + // 0x006C0301: 0x0000013A\n\t\"\\x00L\\x03'\\x00\\x00\\x01;\" + // 0x004C0327: 0x0000013B\n\t\"\\x00l\\x03'\\x00\\x00\\x01<\" + // 0x006C0327: 0x0000013C\n\t\"\\x00L\\x03\\f\\x00\\x00\\x01=\" + // 0x004C030C: 0x0000013D\n\t\"\\x00l\\x03\\f\\x00\\x00\\x01>\" + // 0x006C030C: 0x0000013E\n\t\"\\x00N\\x03\\x01\\x00\\x00\\x01C\" + // 0x004E0301: 0x00000143\n\t\"\\x00n\\x03\\x01\\x00\\x00\\x01D\" + // 0x006E0301: 0x00000144\n\t\"\\x00N\\x03'\\x00\\x00\\x01E\" + // 0x004E0327: 0x00000145\n\t\"\\x00n\\x03'\\x00\\x00\\x01F\" + // 0x006E0327: 0x00000146\n\t\"\\x00N\\x03\\f\\x00\\x00\\x01G\" + // 0x004E030C: 0x00000147\n\t\"\\x00n\\x03\\f\\x00\\x00\\x01H\" + // 0x006E030C: 0x00000148\n\t\"\\x00O\\x03\\x04\\x00\\x00\\x01L\" + // 0x004F0304: 0x0000014C\n\t\"\\x00o\\x03\\x04\\x00\\x00\\x01M\" + // 0x006F0304: 0x0000014D\n\t\"\\x00O\\x03\\x06\\x00\\x00\\x01N\" + // 0x004F0306: 0x0000014E\n\t\"\\x00o\\x03\\x06\\x00\\x00\\x01O\" + // 0x006F0306: 0x0000014F\n\t\"\\x00O\\x03\\v\\x00\\x00\\x01P\" + // 0x004F030B: 0x00000150\n\t\"\\x00o\\x03\\v\\x00\\x00\\x01Q\" + // 0x006F030B: 0x00000151\n\t\"\\x00R\\x03\\x01\\x00\\x00\\x01T\" + // 0x00520301: 0x00000154\n\t\"\\x00r\\x03\\x01\\x00\\x00\\x01U\" + // 0x00720301: 0x00000155\n\t\"\\x00R\\x03'\\x00\\x00\\x01V\" + // 0x00520327: 0x00000156\n\t\"\\x00r\\x03'\\x00\\x00\\x01W\" + // 0x00720327: 0x00000157\n\t\"\\x00R\\x03\\f\\x00\\x00\\x01X\" + // 0x0052030C: 0x00000158\n\t\"\\x00r\\x03\\f\\x00\\x00\\x01Y\" + // 0x0072030C: 0x00000159\n\t\"\\x00S\\x03\\x01\\x00\\x00\\x01Z\" + // 0x00530301: 0x0000015A\n\t\"\\x00s\\x03\\x01\\x00\\x00\\x01[\" + // 0x00730301: 0x0000015B\n\t\"\\x00S\\x03\\x02\\x00\\x00\\x01\\\\\" + // 0x00530302: 0x0000015C\n\t\"\\x00s\\x03\\x02\\x00\\x00\\x01]\" + // 0x00730302: 0x0000015D\n\t\"\\x00S\\x03'\\x00\\x00\\x01^\" + // 0x00530327: 0x0000015E\n\t\"\\x00s\\x03'\\x00\\x00\\x01_\" + // 0x00730327: 0x0000015F\n\t\"\\x00S\\x03\\f\\x00\\x00\\x01`\" + // 0x0053030C: 0x00000160\n\t\"\\x00s\\x03\\f\\x00\\x00\\x01a\" + // 0x0073030C: 0x00000161\n\t\"\\x00T\\x03'\\x00\\x00\\x01b\" + // 0x00540327: 0x00000162\n\t\"\\x00t\\x03'\\x00\\x00\\x01c\" + // 0x00740327: 0x00000163\n\t\"\\x00T\\x03\\f\\x00\\x00\\x01d\" + // 0x0054030C: 0x00000164\n\t\"\\x00t\\x03\\f\\x00\\x00\\x01e\" + // 0x0074030C: 0x00000165\n\t\"\\x00U\\x03\\x03\\x00\\x00\\x01h\" + // 0x00550303: 0x00000168\n\t\"\\x00u\\x03\\x03\\x00\\x00\\x01i\" + // 0x00750303: 0x00000169\n\t\"\\x00U\\x03\\x04\\x00\\x00\\x01j\" + // 0x00550304: 0x0000016A\n\t\"\\x00u\\x03\\x04\\x00\\x00\\x01k\" + // 0x00750304: 0x0000016B\n\t\"\\x00U\\x03\\x06\\x00\\x00\\x01l\" + // 0x00550306: 0x0000016C\n\t\"\\x00u\\x03\\x06\\x00\\x00\\x01m\" + // 0x00750306: 0x0000016D\n\t\"\\x00U\\x03\\n\\x00\\x00\\x01n\" + // 0x0055030A: 0x0000016E\n\t\"\\x00u\\x03\\n\\x00\\x00\\x01o\" + // 0x0075030A: 0x0000016F\n\t\"\\x00U\\x03\\v\\x00\\x00\\x01p\" + // 0x0055030B: 0x00000170\n\t\"\\x00u\\x03\\v\\x00\\x00\\x01q\" + // 0x0075030B: 0x00000171\n\t\"\\x00U\\x03(\\x00\\x00\\x01r\" + // 0x00550328: 0x00000172\n\t\"\\x00u\\x03(\\x00\\x00\\x01s\" + // 0x00750328: 0x00000173\n\t\"\\x00W\\x03\\x02\\x00\\x00\\x01t\" + // 0x00570302: 0x00000174\n\t\"\\x00w\\x03\\x02\\x00\\x00\\x01u\" + // 0x00770302: 0x00000175\n\t\"\\x00Y\\x03\\x02\\x00\\x00\\x01v\" + // 0x00590302: 0x00000176\n\t\"\\x00y\\x03\\x02\\x00\\x00\\x01w\" + // 0x00790302: 0x00000177\n\t\"\\x00Y\\x03\\b\\x00\\x00\\x01x\" + // 0x00590308: 0x00000178\n\t\"\\x00Z\\x03\\x01\\x00\\x00\\x01y\" + // 0x005A0301: 0x00000179\n\t\"\\x00z\\x03\\x01\\x00\\x00\\x01z\" + // 0x007A0301: 0x0000017A\n\t\"\\x00Z\\x03\\a\\x00\\x00\\x01{\" + // 0x005A0307: 0x0000017B\n\t\"\\x00z\\x03\\a\\x00\\x00\\x01|\" + // 0x007A0307: 0x0000017C\n\t\"\\x00Z\\x03\\f\\x00\\x00\\x01}\" + // 0x005A030C: 0x0000017D\n\t\"\\x00z\\x03\\f\\x00\\x00\\x01~\" + // 0x007A030C: 0x0000017E\n\t\"\\x00O\\x03\\x1b\\x00\\x00\\x01\\xa0\" + // 0x004F031B: 0x000001A0\n\t\"\\x00o\\x03\\x1b\\x00\\x00\\x01\\xa1\" + // 0x006F031B: 0x000001A1\n\t\"\\x00U\\x03\\x1b\\x00\\x00\\x01\\xaf\" + // 0x0055031B: 0x000001AF\n\t\"\\x00u\\x03\\x1b\\x00\\x00\\x01\\xb0\" + // 0x0075031B: 0x000001B0\n\t\"\\x00A\\x03\\f\\x00\\x00\\x01\\xcd\" + // 0x0041030C: 0x000001CD\n\t\"\\x00a\\x03\\f\\x00\\x00\\x01\\xce\" + // 0x0061030C: 0x000001CE\n\t\"\\x00I\\x03\\f\\x00\\x00\\x01\\xcf\" + // 0x0049030C: 0x000001CF\n\t\"\\x00i\\x03\\f\\x00\\x00\\x01\\xd0\" + // 0x0069030C: 0x000001D0\n\t\"\\x00O\\x03\\f\\x00\\x00\\x01\\xd1\" + // 0x004F030C: 0x000001D1\n\t\"\\x00o\\x03\\f\\x00\\x00\\x01\\xd2\" + // 0x006F030C: 0x000001D2\n\t\"\\x00U\\x03\\f\\x00\\x00\\x01\\xd3\" + // 0x0055030C: 0x000001D3\n\t\"\\x00u\\x03\\f\\x00\\x00\\x01\\xd4\" + // 0x0075030C: 0x000001D4\n\t\"\\x00\\xdc\\x03\\x04\\x00\\x00\\x01\\xd5\" + // 0x00DC0304: 0x000001D5\n\t\"\\x00\\xfc\\x03\\x04\\x00\\x00\\x01\\xd6\" + // 0x00FC0304: 0x000001D6\n\t\"\\x00\\xdc\\x03\\x01\\x00\\x00\\x01\\xd7\" + // 0x00DC0301: 0x000001D7\n\t\"\\x00\\xfc\\x03\\x01\\x00\\x00\\x01\\xd8\" + // 0x00FC0301: 0x000001D8\n\t\"\\x00\\xdc\\x03\\f\\x00\\x00\\x01\\xd9\" + // 0x00DC030C: 0x000001D9\n\t\"\\x00\\xfc\\x03\\f\\x00\\x00\\x01\\xda\" + // 0x00FC030C: 0x000001DA\n\t\"\\x00\\xdc\\x03\\x00\\x00\\x00\\x01\\xdb\" + // 0x00DC0300: 0x000001DB\n\t\"\\x00\\xfc\\x03\\x00\\x00\\x00\\x01\\xdc\" + // 0x00FC0300: 0x000001DC\n\t\"\\x00\\xc4\\x03\\x04\\x00\\x00\\x01\\xde\" + // 0x00C40304: 0x000001DE\n\t\"\\x00\\xe4\\x03\\x04\\x00\\x00\\x01\\xdf\" + // 0x00E40304: 0x000001DF\n\t\"\\x02&\\x03\\x04\\x00\\x00\\x01\\xe0\" + // 0x02260304: 0x000001E0\n\t\"\\x02'\\x03\\x04\\x00\\x00\\x01\\xe1\" + // 0x02270304: 0x000001E1\n\t\"\\x00\\xc6\\x03\\x04\\x00\\x00\\x01\\xe2\" + // 0x00C60304: 0x000001E2\n\t\"\\x00\\xe6\\x03\\x04\\x00\\x00\\x01\\xe3\" + // 0x00E60304: 0x000001E3\n\t\"\\x00G\\x03\\f\\x00\\x00\\x01\\xe6\" + // 0x0047030C: 0x000001E6\n\t\"\\x00g\\x03\\f\\x00\\x00\\x01\\xe7\" + // 0x0067030C: 0x000001E7\n\t\"\\x00K\\x03\\f\\x00\\x00\\x01\\xe8\" + // 0x004B030C: 0x000001E8\n\t\"\\x00k\\x03\\f\\x00\\x00\\x01\\xe9\" + // 0x006B030C: 0x000001E9\n\t\"\\x00O\\x03(\\x00\\x00\\x01\\xea\" + // 0x004F0328: 0x000001EA\n\t\"\\x00o\\x03(\\x00\\x00\\x01\\xeb\" + // 0x006F0328: 0x000001EB\n\t\"\\x01\\xea\\x03\\x04\\x00\\x00\\x01\\xec\" + // 0x01EA0304: 0x000001EC\n\t\"\\x01\\xeb\\x03\\x04\\x00\\x00\\x01\\xed\" + // 0x01EB0304: 0x000001ED\n\t\"\\x01\\xb7\\x03\\f\\x00\\x00\\x01\\xee\" + // 0x01B7030C: 0x000001EE\n\t\"\\x02\\x92\\x03\\f\\x00\\x00\\x01\\xef\" + // 0x0292030C: 0x000001EF\n\t\"\\x00j\\x03\\f\\x00\\x00\\x01\\xf0\" + // 0x006A030C: 0x000001F0\n\t\"\\x00G\\x03\\x01\\x00\\x00\\x01\\xf4\" + // 0x00470301: 0x000001F4\n\t\"\\x00g\\x03\\x01\\x00\\x00\\x01\\xf5\" + // 0x00670301: 0x000001F5\n\t\"\\x00N\\x03\\x00\\x00\\x00\\x01\\xf8\" + // 0x004E0300: 0x000001F8\n\t\"\\x00n\\x03\\x00\\x00\\x00\\x01\\xf9\" + // 0x006E0300: 0x000001F9\n\t\"\\x00\\xc5\\x03\\x01\\x00\\x00\\x01\\xfa\" + // 0x00C50301: 0x000001FA\n\t\"\\x00\\xe5\\x03\\x01\\x00\\x00\\x01\\xfb\" + // 0x00E50301: 0x000001FB\n\t\"\\x00\\xc6\\x03\\x01\\x00\\x00\\x01\\xfc\" + // 0x00C60301: 0x000001FC\n\t\"\\x00\\xe6\\x03\\x01\\x00\\x00\\x01\\xfd\" + // 0x00E60301: 0x000001FD\n\t\"\\x00\\xd8\\x03\\x01\\x00\\x00\\x01\\xfe\" + // 0x00D80301: 0x000001FE\n\t\"\\x00\\xf8\\x03\\x01\\x00\\x00\\x01\\xff\" + // 0x00F80301: 0x000001FF\n\t\"\\x00A\\x03\\x0f\\x00\\x00\\x02\\x00\" + // 0x0041030F: 0x00000200\n\t\"\\x00a\\x03\\x0f\\x00\\x00\\x02\\x01\" + // 0x0061030F: 0x00000201\n\t\"\\x00A\\x03\\x11\\x00\\x00\\x02\\x02\" + // 0x00410311: 0x00000202\n\t\"\\x00a\\x03\\x11\\x00\\x00\\x02\\x03\" + // 0x00610311: 0x00000203\n\t\"\\x00E\\x03\\x0f\\x00\\x00\\x02\\x04\" + // 0x0045030F: 0x00000204\n\t\"\\x00e\\x03\\x0f\\x00\\x00\\x02\\x05\" + // 0x0065030F: 0x00000205\n\t\"\\x00E\\x03\\x11\\x00\\x00\\x02\\x06\" + // 0x00450311: 0x00000206\n\t\"\\x00e\\x03\\x11\\x00\\x00\\x02\\a\" + // 0x00650311: 0x00000207\n\t\"\\x00I\\x03\\x0f\\x00\\x00\\x02\\b\" + // 0x0049030F: 0x00000208\n\t\"\\x00i\\x03\\x0f\\x00\\x00\\x02\\t\" + // 0x0069030F: 0x00000209\n\t\"\\x00I\\x03\\x11\\x00\\x00\\x02\\n\" + // 0x00490311: 0x0000020A\n\t\"\\x00i\\x03\\x11\\x00\\x00\\x02\\v\" + // 0x00690311: 0x0000020B\n\t\"\\x00O\\x03\\x0f\\x00\\x00\\x02\\f\" + // 0x004F030F: 0x0000020C\n\t\"\\x00o\\x03\\x0f\\x00\\x00\\x02\\r\" + // 0x006F030F: 0x0000020D\n\t\"\\x00O\\x03\\x11\\x00\\x00\\x02\\x0e\" + // 0x004F0311: 0x0000020E\n\t\"\\x00o\\x03\\x11\\x00\\x00\\x02\\x0f\" + // 0x006F0311: 0x0000020F\n\t\"\\x00R\\x03\\x0f\\x00\\x00\\x02\\x10\" + // 0x0052030F: 0x00000210\n\t\"\\x00r\\x03\\x0f\\x00\\x00\\x02\\x11\" + // 0x0072030F: 0x00000211\n\t\"\\x00R\\x03\\x11\\x00\\x00\\x02\\x12\" + // 0x00520311: 0x00000212\n\t\"\\x00r\\x03\\x11\\x00\\x00\\x02\\x13\" + // 0x00720311: 0x00000213\n\t\"\\x00U\\x03\\x0f\\x00\\x00\\x02\\x14\" + // 0x0055030F: 0x00000214\n\t\"\\x00u\\x03\\x0f\\x00\\x00\\x02\\x15\" + // 0x0075030F: 0x00000215\n\t\"\\x00U\\x03\\x11\\x00\\x00\\x02\\x16\" + // 0x00550311: 0x00000216\n\t\"\\x00u\\x03\\x11\\x00\\x00\\x02\\x17\" + // 0x00750311: 0x00000217\n\t\"\\x00S\\x03&\\x00\\x00\\x02\\x18\" + // 0x00530326: 0x00000218\n\t\"\\x00s\\x03&\\x00\\x00\\x02\\x19\" + // 0x00730326: 0x00000219\n\t\"\\x00T\\x03&\\x00\\x00\\x02\\x1a\" + // 0x00540326: 0x0000021A\n\t\"\\x00t\\x03&\\x00\\x00\\x02\\x1b\" + // 0x00740326: 0x0000021B\n\t\"\\x00H\\x03\\f\\x00\\x00\\x02\\x1e\" + // 0x0048030C: 0x0000021E\n\t\"\\x00h\\x03\\f\\x00\\x00\\x02\\x1f\" + // 0x0068030C: 0x0000021F\n\t\"\\x00A\\x03\\a\\x00\\x00\\x02&\" + // 0x00410307: 0x00000226\n\t\"\\x00a\\x03\\a\\x00\\x00\\x02'\" + // 0x00610307: 0x00000227\n\t\"\\x00E\\x03'\\x00\\x00\\x02(\" + // 0x00450327: 0x00000228\n\t\"\\x00e\\x03'\\x00\\x00\\x02)\" + // 0x00650327: 0x00000229\n\t\"\\x00\\xd6\\x03\\x04\\x00\\x00\\x02*\" + // 0x00D60304: 0x0000022A\n\t\"\\x00\\xf6\\x03\\x04\\x00\\x00\\x02+\" + // 0x00F60304: 0x0000022B\n\t\"\\x00\\xd5\\x03\\x04\\x00\\x00\\x02,\" + // 0x00D50304: 0x0000022C\n\t\"\\x00\\xf5\\x03\\x04\\x00\\x00\\x02-\" + // 0x00F50304: 0x0000022D\n\t\"\\x00O\\x03\\a\\x00\\x00\\x02.\" + // 0x004F0307: 0x0000022E\n\t\"\\x00o\\x03\\a\\x00\\x00\\x02/\" + // 0x006F0307: 0x0000022F\n\t\"\\x02.\\x03\\x04\\x00\\x00\\x020\" + // 0x022E0304: 0x00000230\n\t\"\\x02/\\x03\\x04\\x00\\x00\\x021\" + // 0x022F0304: 0x00000231\n\t\"\\x00Y\\x03\\x04\\x00\\x00\\x022\" + // 0x00590304: 0x00000232\n\t\"\\x00y\\x03\\x04\\x00\\x00\\x023\" + // 0x00790304: 0x00000233\n\t\"\\x00\\xa8\\x03\\x01\\x00\\x00\\x03\\x85\" + // 0x00A80301: 0x00000385\n\t\"\\x03\\x91\\x03\\x01\\x00\\x00\\x03\\x86\" + // 0x03910301: 0x00000386\n\t\"\\x03\\x95\\x03\\x01\\x00\\x00\\x03\\x88\" + // 0x03950301: 0x00000388\n\t\"\\x03\\x97\\x03\\x01\\x00\\x00\\x03\\x89\" + // 0x03970301: 0x00000389\n\t\"\\x03\\x99\\x03\\x01\\x00\\x00\\x03\\x8a\" + // 0x03990301: 0x0000038A\n\t\"\\x03\\x9f\\x03\\x01\\x00\\x00\\x03\\x8c\" + // 0x039F0301: 0x0000038C\n\t\"\\x03\\xa5\\x03\\x01\\x00\\x00\\x03\\x8e\" + // 0x03A50301: 0x0000038E\n\t\"\\x03\\xa9\\x03\\x01\\x00\\x00\\x03\\x8f\" + // 0x03A90301: 0x0000038F\n\t\"\\x03\\xca\\x03\\x01\\x00\\x00\\x03\\x90\" + // 0x03CA0301: 0x00000390\n\t\"\\x03\\x99\\x03\\b\\x00\\x00\\x03\\xaa\" + // 0x03990308: 0x000003AA\n\t\"\\x03\\xa5\\x03\\b\\x00\\x00\\x03\\xab\" + // 0x03A50308: 0x000003AB\n\t\"\\x03\\xb1\\x03\\x01\\x00\\x00\\x03\\xac\" + // 0x03B10301: 0x000003AC\n\t\"\\x03\\xb5\\x03\\x01\\x00\\x00\\x03\\xad\" + // 0x03B50301: 0x000003AD\n\t\"\\x03\\xb7\\x03\\x01\\x00\\x00\\x03\\xae\" + // 0x03B70301: 0x000003AE\n\t\"\\x03\\xb9\\x03\\x01\\x00\\x00\\x03\\xaf\" + // 0x03B90301: 0x000003AF\n\t\"\\x03\\xcb\\x03\\x01\\x00\\x00\\x03\\xb0\" + // 0x03CB0301: 0x000003B0\n\t\"\\x03\\xb9\\x03\\b\\x00\\x00\\x03\\xca\" + // 0x03B90308: 0x000003CA\n\t\"\\x03\\xc5\\x03\\b\\x00\\x00\\x03\\xcb\" + // 0x03C50308: 0x000003CB\n\t\"\\x03\\xbf\\x03\\x01\\x00\\x00\\x03\\xcc\" + // 0x03BF0301: 0x000003CC\n\t\"\\x03\\xc5\\x03\\x01\\x00\\x00\\x03\\xcd\" + // 0x03C50301: 0x000003CD\n\t\"\\x03\\xc9\\x03\\x01\\x00\\x00\\x03\\xce\" + // 0x03C90301: 0x000003CE\n\t\"\\x03\\xd2\\x03\\x01\\x00\\x00\\x03\\xd3\" + // 0x03D20301: 0x000003D3\n\t\"\\x03\\xd2\\x03\\b\\x00\\x00\\x03\\xd4\" + // 0x03D20308: 0x000003D4\n\t\"\\x04\\x15\\x03\\x00\\x00\\x00\\x04\\x00\" + // 0x04150300: 0x00000400\n\t\"\\x04\\x15\\x03\\b\\x00\\x00\\x04\\x01\" + // 0x04150308: 0x00000401\n\t\"\\x04\\x13\\x03\\x01\\x00\\x00\\x04\\x03\" + // 0x04130301: 0x00000403\n\t\"\\x04\\x06\\x03\\b\\x00\\x00\\x04\\a\" + // 0x04060308: 0x00000407\n\t\"\\x04\\x1a\\x03\\x01\\x00\\x00\\x04\\f\" + // 0x041A0301: 0x0000040C\n\t\"\\x04\\x18\\x03\\x00\\x00\\x00\\x04\\r\" + // 0x04180300: 0x0000040D\n\t\"\\x04#\\x03\\x06\\x00\\x00\\x04\\x0e\" + // 0x04230306: 0x0000040E\n\t\"\\x04\\x18\\x03\\x06\\x00\\x00\\x04\\x19\" + // 0x04180306: 0x00000419\n\t\"\\x048\\x03\\x06\\x00\\x00\\x049\" + // 0x04380306: 0x00000439\n\t\"\\x045\\x03\\x00\\x00\\x00\\x04P\" + // 0x04350300: 0x00000450\n\t\"\\x045\\x03\\b\\x00\\x00\\x04Q\" + // 0x04350308: 0x00000451\n\t\"\\x043\\x03\\x01\\x00\\x00\\x04S\" + // 0x04330301: 0x00000453\n\t\"\\x04V\\x03\\b\\x00\\x00\\x04W\" + // 0x04560308: 0x00000457\n\t\"\\x04:\\x03\\x01\\x00\\x00\\x04\\\\\" + // 0x043A0301: 0x0000045C\n\t\"\\x048\\x03\\x00\\x00\\x00\\x04]\" + // 0x04380300: 0x0000045D\n\t\"\\x04C\\x03\\x06\\x00\\x00\\x04^\" + // 0x04430306: 0x0000045E\n\t\"\\x04t\\x03\\x0f\\x00\\x00\\x04v\" + // 0x0474030F: 0x00000476\n\t\"\\x04u\\x03\\x0f\\x00\\x00\\x04w\" + // 0x0475030F: 0x00000477\n\t\"\\x04\\x16\\x03\\x06\\x00\\x00\\x04\\xc1\" + // 0x04160306: 0x000004C1\n\t\"\\x046\\x03\\x06\\x00\\x00\\x04\\xc2\" + // 0x04360306: 0x000004C2\n\t\"\\x04\\x10\\x03\\x06\\x00\\x00\\x04\\xd0\" + // 0x04100306: 0x000004D0\n\t\"\\x040\\x03\\x06\\x00\\x00\\x04\\xd1\" + // 0x04300306: 0x000004D1\n\t\"\\x04\\x10\\x03\\b\\x00\\x00\\x04\\xd2\" + // 0x04100308: 0x000004D2\n\t\"\\x040\\x03\\b\\x00\\x00\\x04\\xd3\" + // 0x04300308: 0x000004D3\n\t\"\\x04\\x15\\x03\\x06\\x00\\x00\\x04\\xd6\" + // 0x04150306: 0x000004D6\n\t\"\\x045\\x03\\x06\\x00\\x00\\x04\\xd7\" + // 0x04350306: 0x000004D7\n\t\"\\x04\\xd8\\x03\\b\\x00\\x00\\x04\\xda\" + // 0x04D80308: 0x000004DA\n\t\"\\x04\\xd9\\x03\\b\\x00\\x00\\x04\\xdb\" + // 0x04D90308: 0x000004DB\n\t\"\\x04\\x16\\x03\\b\\x00\\x00\\x04\\xdc\" + // 0x04160308: 0x000004DC\n\t\"\\x046\\x03\\b\\x00\\x00\\x04\\xdd\" + // 0x04360308: 0x000004DD\n\t\"\\x04\\x17\\x03\\b\\x00\\x00\\x04\\xde\" + // 0x04170308: 0x000004DE\n\t\"\\x047\\x03\\b\\x00\\x00\\x04\\xdf\" + // 0x04370308: 0x000004DF\n\t\"\\x04\\x18\\x03\\x04\\x00\\x00\\x04\\xe2\" + // 0x04180304: 0x000004E2\n\t\"\\x048\\x03\\x04\\x00\\x00\\x04\\xe3\" + // 0x04380304: 0x000004E3\n\t\"\\x04\\x18\\x03\\b\\x00\\x00\\x04\\xe4\" + // 0x04180308: 0x000004E4\n\t\"\\x048\\x03\\b\\x00\\x00\\x04\\xe5\" + // 0x04380308: 0x000004E5\n\t\"\\x04\\x1e\\x03\\b\\x00\\x00\\x04\\xe6\" + // 0x041E0308: 0x000004E6\n\t\"\\x04>\\x03\\b\\x00\\x00\\x04\\xe7\" + // 0x043E0308: 0x000004E7\n\t\"\\x04\\xe8\\x03\\b\\x00\\x00\\x04\\xea\" + // 0x04E80308: 0x000004EA\n\t\"\\x04\\xe9\\x03\\b\\x00\\x00\\x04\\xeb\" + // 0x04E90308: 0x000004EB\n\t\"\\x04-\\x03\\b\\x00\\x00\\x04\\xec\" + // 0x042D0308: 0x000004EC\n\t\"\\x04M\\x03\\b\\x00\\x00\\x04\\xed\" + // 0x044D0308: 0x000004ED\n\t\"\\x04#\\x03\\x04\\x00\\x00\\x04\\xee\" + // 0x04230304: 0x000004EE\n\t\"\\x04C\\x03\\x04\\x00\\x00\\x04\\xef\" + // 0x04430304: 0x000004EF\n\t\"\\x04#\\x03\\b\\x00\\x00\\x04\\xf0\" + // 0x04230308: 0x000004F0\n\t\"\\x04C\\x03\\b\\x00\\x00\\x04\\xf1\" + // 0x04430308: 0x000004F1\n\t\"\\x04#\\x03\\v\\x00\\x00\\x04\\xf2\" + // 0x0423030B: 0x000004F2\n\t\"\\x04C\\x03\\v\\x00\\x00\\x04\\xf3\" + // 0x0443030B: 0x000004F3\n\t\"\\x04'\\x03\\b\\x00\\x00\\x04\\xf4\" + // 0x04270308: 0x000004F4\n\t\"\\x04G\\x03\\b\\x00\\x00\\x04\\xf5\" + // 0x04470308: 0x000004F5\n\t\"\\x04+\\x03\\b\\x00\\x00\\x04\\xf8\" + // 0x042B0308: 0x000004F8\n\t\"\\x04K\\x03\\b\\x00\\x00\\x04\\xf9\" + // 0x044B0308: 0x000004F9\n\t\"\\x06'\\x06S\\x00\\x00\\x06\\\"\" + // 0x06270653: 0x00000622\n\t\"\\x06'\\x06T\\x00\\x00\\x06#\" + // 0x06270654: 0x00000623\n\t\"\\x06H\\x06T\\x00\\x00\\x06$\" + // 0x06480654: 0x00000624\n\t\"\\x06'\\x06U\\x00\\x00\\x06%\" + // 0x06270655: 0x00000625\n\t\"\\x06J\\x06T\\x00\\x00\\x06&\" + // 0x064A0654: 0x00000626\n\t\"\\x06\\xd5\\x06T\\x00\\x00\\x06\\xc0\" + // 0x06D50654: 0x000006C0\n\t\"\\x06\\xc1\\x06T\\x00\\x00\\x06\\xc2\" + // 0x06C10654: 0x000006C2\n\t\"\\x06\\xd2\\x06T\\x00\\x00\\x06\\xd3\" + // 0x06D20654: 0x000006D3\n\t\"\\t(\\t<\\x00\\x00\\t)\" + // 0x0928093C: 0x00000929\n\t\"\\t0\\t<\\x00\\x00\\t1\" + // 0x0930093C: 0x00000931\n\t\"\\t3\\t<\\x00\\x00\\t4\" + // 0x0933093C: 0x00000934\n\t\"\\t\\xc7\\t\\xbe\\x00\\x00\\t\\xcb\" + // 0x09C709BE: 0x000009CB\n\t\"\\t\\xc7\\t\\xd7\\x00\\x00\\t\\xcc\" + // 0x09C709D7: 0x000009CC\n\t\"\\vG\\vV\\x00\\x00\\vH\" + // 0x0B470B56: 0x00000B48\n\t\"\\vG\\v>\\x00\\x00\\vK\" + // 0x0B470B3E: 0x00000B4B\n\t\"\\vG\\vW\\x00\\x00\\vL\" + // 0x0B470B57: 0x00000B4C\n\t\"\\v\\x92\\v\\xd7\\x00\\x00\\v\\x94\" + // 0x0B920BD7: 0x00000B94\n\t\"\\v\\xc6\\v\\xbe\\x00\\x00\\v\\xca\" + // 0x0BC60BBE: 0x00000BCA\n\t\"\\v\\xc7\\v\\xbe\\x00\\x00\\v\\xcb\" + // 0x0BC70BBE: 0x00000BCB\n\t\"\\v\\xc6\\v\\xd7\\x00\\x00\\v\\xcc\" + // 0x0BC60BD7: 0x00000BCC\n\t\"\\fF\\fV\\x00\\x00\\fH\" + // 0x0C460C56: 0x00000C48\n\t\"\\f\\xbf\\f\\xd5\\x00\\x00\\f\\xc0\" + // 0x0CBF0CD5: 0x00000CC0\n\t\"\\f\\xc6\\f\\xd5\\x00\\x00\\f\\xc7\" + // 0x0CC60CD5: 0x00000CC7\n\t\"\\f\\xc6\\f\\xd6\\x00\\x00\\f\\xc8\" + // 0x0CC60CD6: 0x00000CC8\n\t\"\\f\\xc6\\f\\xc2\\x00\\x00\\f\\xca\" + // 0x0CC60CC2: 0x00000CCA\n\t\"\\f\\xca\\f\\xd5\\x00\\x00\\f\\xcb\" + // 0x0CCA0CD5: 0x00000CCB\n\t\"\\rF\\r>\\x00\\x00\\rJ\" + // 0x0D460D3E: 0x00000D4A\n\t\"\\rG\\r>\\x00\\x00\\rK\" + // 0x0D470D3E: 0x00000D4B\n\t\"\\rF\\rW\\x00\\x00\\rL\" + // 0x0D460D57: 0x00000D4C\n\t\"\\r\\xd9\\r\\xca\\x00\\x00\\r\\xda\" + // 0x0DD90DCA: 0x00000DDA\n\t\"\\r\\xd9\\r\\xcf\\x00\\x00\\r\\xdc\" + // 0x0DD90DCF: 0x00000DDC\n\t\"\\r\\xdc\\r\\xca\\x00\\x00\\r\\xdd\" + // 0x0DDC0DCA: 0x00000DDD\n\t\"\\r\\xd9\\r\\xdf\\x00\\x00\\r\\xde\" + // 0x0DD90DDF: 0x00000DDE\n\t\"\\x10%\\x10.\\x00\\x00\\x10&\" + // 0x1025102E: 0x00001026\n\t\"\\x1b\\x05\\x1b5\\x00\\x00\\x1b\\x06\" + // 0x1B051B35: 0x00001B06\n\t\"\\x1b\\a\\x1b5\\x00\\x00\\x1b\\b\" + // 0x1B071B35: 0x00001B08\n\t\"\\x1b\\t\\x1b5\\x00\\x00\\x1b\\n\" + // 0x1B091B35: 0x00001B0A\n\t\"\\x1b\\v\\x1b5\\x00\\x00\\x1b\\f\" + // 0x1B0B1B35: 0x00001B0C\n\t\"\\x1b\\r\\x1b5\\x00\\x00\\x1b\\x0e\" + // 0x1B0D1B35: 0x00001B0E\n\t\"\\x1b\\x11\\x1b5\\x00\\x00\\x1b\\x12\" + // 0x1B111B35: 0x00001B12\n\t\"\\x1b:\\x1b5\\x00\\x00\\x1b;\" + // 0x1B3A1B35: 0x00001B3B\n\t\"\\x1b<\\x1b5\\x00\\x00\\x1b=\" + // 0x1B3C1B35: 0x00001B3D\n\t\"\\x1b>\\x1b5\\x00\\x00\\x1b@\" + // 0x1B3E1B35: 0x00001B40\n\t\"\\x1b?\\x1b5\\x00\\x00\\x1bA\" + // 0x1B3F1B35: 0x00001B41\n\t\"\\x1bB\\x1b5\\x00\\x00\\x1bC\" + // 0x1B421B35: 0x00001B43\n\t\"\\x00A\\x03%\\x00\\x00\\x1e\\x00\" + // 0x00410325: 0x00001E00\n\t\"\\x00a\\x03%\\x00\\x00\\x1e\\x01\" + // 0x00610325: 0x00001E01\n\t\"\\x00B\\x03\\a\\x00\\x00\\x1e\\x02\" + // 0x00420307: 0x00001E02\n\t\"\\x00b\\x03\\a\\x00\\x00\\x1e\\x03\" + // 0x00620307: 0x00001E03\n\t\"\\x00B\\x03#\\x00\\x00\\x1e\\x04\" + // 0x00420323: 0x00001E04\n\t\"\\x00b\\x03#\\x00\\x00\\x1e\\x05\" + // 0x00620323: 0x00001E05\n\t\"\\x00B\\x031\\x00\\x00\\x1e\\x06\" + // 0x00420331: 0x00001E06\n\t\"\\x00b\\x031\\x00\\x00\\x1e\\a\" + // 0x00620331: 0x00001E07\n\t\"\\x00\\xc7\\x03\\x01\\x00\\x00\\x1e\\b\" + // 0x00C70301: 0x00001E08\n\t\"\\x00\\xe7\\x03\\x01\\x00\\x00\\x1e\\t\" + // 0x00E70301: 0x00001E09\n\t\"\\x00D\\x03\\a\\x00\\x00\\x1e\\n\" + // 0x00440307: 0x00001E0A\n\t\"\\x00d\\x03\\a\\x00\\x00\\x1e\\v\" + // 0x00640307: 0x00001E0B\n\t\"\\x00D\\x03#\\x00\\x00\\x1e\\f\" + // 0x00440323: 0x00001E0C\n\t\"\\x00d\\x03#\\x00\\x00\\x1e\\r\" + // 0x00640323: 0x00001E0D\n\t\"\\x00D\\x031\\x00\\x00\\x1e\\x0e\" + // 0x00440331: 0x00001E0E\n\t\"\\x00d\\x031\\x00\\x00\\x1e\\x0f\" + // 0x00640331: 0x00001E0F\n\t\"\\x00D\\x03'\\x00\\x00\\x1e\\x10\" + // 0x00440327: 0x00001E10\n\t\"\\x00d\\x03'\\x00\\x00\\x1e\\x11\" + // 0x00640327: 0x00001E11\n\t\"\\x00D\\x03-\\x00\\x00\\x1e\\x12\" + // 0x0044032D: 0x00001E12\n\t\"\\x00d\\x03-\\x00\\x00\\x1e\\x13\" + // 0x0064032D: 0x00001E13\n\t\"\\x01\\x12\\x03\\x00\\x00\\x00\\x1e\\x14\" + // 0x01120300: 0x00001E14\n\t\"\\x01\\x13\\x03\\x00\\x00\\x00\\x1e\\x15\" + // 0x01130300: 0x00001E15\n\t\"\\x01\\x12\\x03\\x01\\x00\\x00\\x1e\\x16\" + // 0x01120301: 0x00001E16\n\t\"\\x01\\x13\\x03\\x01\\x00\\x00\\x1e\\x17\" + // 0x01130301: 0x00001E17\n\t\"\\x00E\\x03-\\x00\\x00\\x1e\\x18\" + // 0x0045032D: 0x00001E18\n\t\"\\x00e\\x03-\\x00\\x00\\x1e\\x19\" + // 0x0065032D: 0x00001E19\n\t\"\\x00E\\x030\\x00\\x00\\x1e\\x1a\" + // 0x00450330: 0x00001E1A\n\t\"\\x00e\\x030\\x00\\x00\\x1e\\x1b\" + // 0x00650330: 0x00001E1B\n\t\"\\x02(\\x03\\x06\\x00\\x00\\x1e\\x1c\" + // 0x02280306: 0x00001E1C\n\t\"\\x02)\\x03\\x06\\x00\\x00\\x1e\\x1d\" + // 0x02290306: 0x00001E1D\n\t\"\\x00F\\x03\\a\\x00\\x00\\x1e\\x1e\" + // 0x00460307: 0x00001E1E\n\t\"\\x00f\\x03\\a\\x00\\x00\\x1e\\x1f\" + // 0x00660307: 0x00001E1F\n\t\"\\x00G\\x03\\x04\\x00\\x00\\x1e \" + // 0x00470304: 0x00001E20\n\t\"\\x00g\\x03\\x04\\x00\\x00\\x1e!\" + // 0x00670304: 0x00001E21\n\t\"\\x00H\\x03\\a\\x00\\x00\\x1e\\\"\" + // 0x00480307: 0x00001E22\n\t\"\\x00h\\x03\\a\\x00\\x00\\x1e#\" + // 0x00680307: 0x00001E23\n\t\"\\x00H\\x03#\\x00\\x00\\x1e$\" + // 0x00480323: 0x00001E24\n\t\"\\x00h\\x03#\\x00\\x00\\x1e%\" + // 0x00680323: 0x00001E25\n\t\"\\x00H\\x03\\b\\x00\\x00\\x1e&\" + // 0x00480308: 0x00001E26\n\t\"\\x00h\\x03\\b\\x00\\x00\\x1e'\" + // 0x00680308: 0x00001E27\n\t\"\\x00H\\x03'\\x00\\x00\\x1e(\" + // 0x00480327: 0x00001E28\n\t\"\\x00h\\x03'\\x00\\x00\\x1e)\" + // 0x00680327: 0x00001E29\n\t\"\\x00H\\x03.\\x00\\x00\\x1e*\" + // 0x0048032E: 0x00001E2A\n\t\"\\x00h\\x03.\\x00\\x00\\x1e+\" + // 0x0068032E: 0x00001E2B\n\t\"\\x00I\\x030\\x00\\x00\\x1e,\" + // 0x00490330: 0x00001E2C\n\t\"\\x00i\\x030\\x00\\x00\\x1e-\" + // 0x00690330: 0x00001E2D\n\t\"\\x00\\xcf\\x03\\x01\\x00\\x00\\x1e.\" + // 0x00CF0301: 0x00001E2E\n\t\"\\x00\\xef\\x03\\x01\\x00\\x00\\x1e/\" + // 0x00EF0301: 0x00001E2F\n\t\"\\x00K\\x03\\x01\\x00\\x00\\x1e0\" + // 0x004B0301: 0x00001E30\n\t\"\\x00k\\x03\\x01\\x00\\x00\\x1e1\" + // 0x006B0301: 0x00001E31\n\t\"\\x00K\\x03#\\x00\\x00\\x1e2\" + // 0x004B0323: 0x00001E32\n\t\"\\x00k\\x03#\\x00\\x00\\x1e3\" + // 0x006B0323: 0x00001E33\n\t\"\\x00K\\x031\\x00\\x00\\x1e4\" + // 0x004B0331: 0x00001E34\n\t\"\\x00k\\x031\\x00\\x00\\x1e5\" + // 0x006B0331: 0x00001E35\n\t\"\\x00L\\x03#\\x00\\x00\\x1e6\" + // 0x004C0323: 0x00001E36\n\t\"\\x00l\\x03#\\x00\\x00\\x1e7\" + // 0x006C0323: 0x00001E37\n\t\"\\x1e6\\x03\\x04\\x00\\x00\\x1e8\" + // 0x1E360304: 0x00001E38\n\t\"\\x1e7\\x03\\x04\\x00\\x00\\x1e9\" + // 0x1E370304: 0x00001E39\n\t\"\\x00L\\x031\\x00\\x00\\x1e:\" + // 0x004C0331: 0x00001E3A\n\t\"\\x00l\\x031\\x00\\x00\\x1e;\" + // 0x006C0331: 0x00001E3B\n\t\"\\x00L\\x03-\\x00\\x00\\x1e<\" + // 0x004C032D: 0x00001E3C\n\t\"\\x00l\\x03-\\x00\\x00\\x1e=\" + // 0x006C032D: 0x00001E3D\n\t\"\\x00M\\x03\\x01\\x00\\x00\\x1e>\" + // 0x004D0301: 0x00001E3E\n\t\"\\x00m\\x03\\x01\\x00\\x00\\x1e?\" + // 0x006D0301: 0x00001E3F\n\t\"\\x00M\\x03\\a\\x00\\x00\\x1e@\" + // 0x004D0307: 0x00001E40\n\t\"\\x00m\\x03\\a\\x00\\x00\\x1eA\" + // 0x006D0307: 0x00001E41\n\t\"\\x00M\\x03#\\x00\\x00\\x1eB\" + // 0x004D0323: 0x00001E42\n\t\"\\x00m\\x03#\\x00\\x00\\x1eC\" + // 0x006D0323: 0x00001E43\n\t\"\\x00N\\x03\\a\\x00\\x00\\x1eD\" + // 0x004E0307: 0x00001E44\n\t\"\\x00n\\x03\\a\\x00\\x00\\x1eE\" + // 0x006E0307: 0x00001E45\n\t\"\\x00N\\x03#\\x00\\x00\\x1eF\" + // 0x004E0323: 0x00001E46\n\t\"\\x00n\\x03#\\x00\\x00\\x1eG\" + // 0x006E0323: 0x00001E47\n\t\"\\x00N\\x031\\x00\\x00\\x1eH\" + // 0x004E0331: 0x00001E48\n\t\"\\x00n\\x031\\x00\\x00\\x1eI\" + // 0x006E0331: 0x00001E49\n\t\"\\x00N\\x03-\\x00\\x00\\x1eJ\" + // 0x004E032D: 0x00001E4A\n\t\"\\x00n\\x03-\\x00\\x00\\x1eK\" + // 0x006E032D: 0x00001E4B\n\t\"\\x00\\xd5\\x03\\x01\\x00\\x00\\x1eL\" + // 0x00D50301: 0x00001E4C\n\t\"\\x00\\xf5\\x03\\x01\\x00\\x00\\x1eM\" + // 0x00F50301: 0x00001E4D\n\t\"\\x00\\xd5\\x03\\b\\x00\\x00\\x1eN\" + // 0x00D50308: 0x00001E4E\n\t\"\\x00\\xf5\\x03\\b\\x00\\x00\\x1eO\" + // 0x00F50308: 0x00001E4F\n\t\"\\x01L\\x03\\x00\\x00\\x00\\x1eP\" + // 0x014C0300: 0x00001E50\n\t\"\\x01M\\x03\\x00\\x00\\x00\\x1eQ\" + // 0x014D0300: 0x00001E51\n\t\"\\x01L\\x03\\x01\\x00\\x00\\x1eR\" + // 0x014C0301: 0x00001E52\n\t\"\\x01M\\x03\\x01\\x00\\x00\\x1eS\" + // 0x014D0301: 0x00001E53\n\t\"\\x00P\\x03\\x01\\x00\\x00\\x1eT\" + // 0x00500301: 0x00001E54\n\t\"\\x00p\\x03\\x01\\x00\\x00\\x1eU\" + // 0x00700301: 0x00001E55\n\t\"\\x00P\\x03\\a\\x00\\x00\\x1eV\" + // 0x00500307: 0x00001E56\n\t\"\\x00p\\x03\\a\\x00\\x00\\x1eW\" + // 0x00700307: 0x00001E57\n\t\"\\x00R\\x03\\a\\x00\\x00\\x1eX\" + // 0x00520307: 0x00001E58\n\t\"\\x00r\\x03\\a\\x00\\x00\\x1eY\" + // 0x00720307: 0x00001E59\n\t\"\\x00R\\x03#\\x00\\x00\\x1eZ\" + // 0x00520323: 0x00001E5A\n\t\"\\x00r\\x03#\\x00\\x00\\x1e[\" + // 0x00720323: 0x00001E5B\n\t\"\\x1eZ\\x03\\x04\\x00\\x00\\x1e\\\\\" + // 0x1E5A0304: 0x00001E5C\n\t\"\\x1e[\\x03\\x04\\x00\\x00\\x1e]\" + // 0x1E5B0304: 0x00001E5D\n\t\"\\x00R\\x031\\x00\\x00\\x1e^\" + // 0x00520331: 0x00001E5E\n\t\"\\x00r\\x031\\x00\\x00\\x1e_\" + // 0x00720331: 0x00001E5F\n\t\"\\x00S\\x03\\a\\x00\\x00\\x1e`\" + // 0x00530307: 0x00001E60\n\t\"\\x00s\\x03\\a\\x00\\x00\\x1ea\" + // 0x00730307: 0x00001E61\n\t\"\\x00S\\x03#\\x00\\x00\\x1eb\" + // 0x00530323: 0x00001E62\n\t\"\\x00s\\x03#\\x00\\x00\\x1ec\" + // 0x00730323: 0x00001E63\n\t\"\\x01Z\\x03\\a\\x00\\x00\\x1ed\" + // 0x015A0307: 0x00001E64\n\t\"\\x01[\\x03\\a\\x00\\x00\\x1ee\" + // 0x015B0307: 0x00001E65\n\t\"\\x01`\\x03\\a\\x00\\x00\\x1ef\" + // 0x01600307: 0x00001E66\n\t\"\\x01a\\x03\\a\\x00\\x00\\x1eg\" + // 0x01610307: 0x00001E67\n\t\"\\x1eb\\x03\\a\\x00\\x00\\x1eh\" + // 0x1E620307: 0x00001E68\n\t\"\\x1ec\\x03\\a\\x00\\x00\\x1ei\" + // 0x1E630307: 0x00001E69\n\t\"\\x00T\\x03\\a\\x00\\x00\\x1ej\" + // 0x00540307: 0x00001E6A\n\t\"\\x00t\\x03\\a\\x00\\x00\\x1ek\" + // 0x00740307: 0x00001E6B\n\t\"\\x00T\\x03#\\x00\\x00\\x1el\" + // 0x00540323: 0x00001E6C\n\t\"\\x00t\\x03#\\x00\\x00\\x1em\" + // 0x00740323: 0x00001E6D\n\t\"\\x00T\\x031\\x00\\x00\\x1en\" + // 0x00540331: 0x00001E6E\n\t\"\\x00t\\x031\\x00\\x00\\x1eo\" + // 0x00740331: 0x00001E6F\n\t\"\\x00T\\x03-\\x00\\x00\\x1ep\" + // 0x0054032D: 0x00001E70\n\t\"\\x00t\\x03-\\x00\\x00\\x1eq\" + // 0x0074032D: 0x00001E71\n\t\"\\x00U\\x03$\\x00\\x00\\x1er\" + // 0x00550324: 0x00001E72\n\t\"\\x00u\\x03$\\x00\\x00\\x1es\" + // 0x00750324: 0x00001E73\n\t\"\\x00U\\x030\\x00\\x00\\x1et\" + // 0x00550330: 0x00001E74\n\t\"\\x00u\\x030\\x00\\x00\\x1eu\" + // 0x00750330: 0x00001E75\n\t\"\\x00U\\x03-\\x00\\x00\\x1ev\" + // 0x0055032D: 0x00001E76\n\t\"\\x00u\\x03-\\x00\\x00\\x1ew\" + // 0x0075032D: 0x00001E77\n\t\"\\x01h\\x03\\x01\\x00\\x00\\x1ex\" + // 0x01680301: 0x00001E78\n\t\"\\x01i\\x03\\x01\\x00\\x00\\x1ey\" + // 0x01690301: 0x00001E79\n\t\"\\x01j\\x03\\b\\x00\\x00\\x1ez\" + // 0x016A0308: 0x00001E7A\n\t\"\\x01k\\x03\\b\\x00\\x00\\x1e{\" + // 0x016B0308: 0x00001E7B\n\t\"\\x00V\\x03\\x03\\x00\\x00\\x1e|\" + // 0x00560303: 0x00001E7C\n\t\"\\x00v\\x03\\x03\\x00\\x00\\x1e}\" + // 0x00760303: 0x00001E7D\n\t\"\\x00V\\x03#\\x00\\x00\\x1e~\" + // 0x00560323: 0x00001E7E\n\t\"\\x00v\\x03#\\x00\\x00\\x1e\\u007f\" + // 0x00760323: 0x00001E7F\n\t\"\\x00W\\x03\\x00\\x00\\x00\\x1e\\x80\" + // 0x00570300: 0x00001E80\n\t\"\\x00w\\x03\\x00\\x00\\x00\\x1e\\x81\" + // 0x00770300: 0x00001E81\n\t\"\\x00W\\x03\\x01\\x00\\x00\\x1e\\x82\" + // 0x00570301: 0x00001E82\n\t\"\\x00w\\x03\\x01\\x00\\x00\\x1e\\x83\" + // 0x00770301: 0x00001E83\n\t\"\\x00W\\x03\\b\\x00\\x00\\x1e\\x84\" + // 0x00570308: 0x00001E84\n\t\"\\x00w\\x03\\b\\x00\\x00\\x1e\\x85\" + // 0x00770308: 0x00001E85\n\t\"\\x00W\\x03\\a\\x00\\x00\\x1e\\x86\" + // 0x00570307: 0x00001E86\n\t\"\\x00w\\x03\\a\\x00\\x00\\x1e\\x87\" + // 0x00770307: 0x00001E87\n\t\"\\x00W\\x03#\\x00\\x00\\x1e\\x88\" + // 0x00570323: 0x00001E88\n\t\"\\x00w\\x03#\\x00\\x00\\x1e\\x89\" + // 0x00770323: 0x00001E89\n\t\"\\x00X\\x03\\a\\x00\\x00\\x1e\\x8a\" + // 0x00580307: 0x00001E8A\n\t\"\\x00x\\x03\\a\\x00\\x00\\x1e\\x8b\" + // 0x00780307: 0x00001E8B\n\t\"\\x00X\\x03\\b\\x00\\x00\\x1e\\x8c\" + // 0x00580308: 0x00001E8C\n\t\"\\x00x\\x03\\b\\x00\\x00\\x1e\\x8d\" + // 0x00780308: 0x00001E8D\n\t\"\\x00Y\\x03\\a\\x00\\x00\\x1e\\x8e\" + // 0x00590307: 0x00001E8E\n\t\"\\x00y\\x03\\a\\x00\\x00\\x1e\\x8f\" + // 0x00790307: 0x00001E8F\n\t\"\\x00Z\\x03\\x02\\x00\\x00\\x1e\\x90\" + // 0x005A0302: 0x00001E90\n\t\"\\x00z\\x03\\x02\\x00\\x00\\x1e\\x91\" + // 0x007A0302: 0x00001E91\n\t\"\\x00Z\\x03#\\x00\\x00\\x1e\\x92\" + // 0x005A0323: 0x00001E92\n\t\"\\x00z\\x03#\\x00\\x00\\x1e\\x93\" + // 0x007A0323: 0x00001E93\n\t\"\\x00Z\\x031\\x00\\x00\\x1e\\x94\" + // 0x005A0331: 0x00001E94\n\t\"\\x00z\\x031\\x00\\x00\\x1e\\x95\" + // 0x007A0331: 0x00001E95\n\t\"\\x00h\\x031\\x00\\x00\\x1e\\x96\" + // 0x00680331: 0x00001E96\n\t\"\\x00t\\x03\\b\\x00\\x00\\x1e\\x97\" + // 0x00740308: 0x00001E97\n\t\"\\x00w\\x03\\n\\x00\\x00\\x1e\\x98\" + // 0x0077030A: 0x00001E98\n\t\"\\x00y\\x03\\n\\x00\\x00\\x1e\\x99\" + // 0x0079030A: 0x00001E99\n\t\"\\x01\\u007f\\x03\\a\\x00\\x00\\x1e\\x9b\" + // 0x017F0307: 0x00001E9B\n\t\"\\x00A\\x03#\\x00\\x00\\x1e\\xa0\" + // 0x00410323: 0x00001EA0\n\t\"\\x00a\\x03#\\x00\\x00\\x1e\\xa1\" + // 0x00610323: 0x00001EA1\n\t\"\\x00A\\x03\\t\\x00\\x00\\x1e\\xa2\" + // 0x00410309: 0x00001EA2\n\t\"\\x00a\\x03\\t\\x00\\x00\\x1e\\xa3\" + // 0x00610309: 0x00001EA3\n\t\"\\x00\\xc2\\x03\\x01\\x00\\x00\\x1e\\xa4\" + // 0x00C20301: 0x00001EA4\n\t\"\\x00\\xe2\\x03\\x01\\x00\\x00\\x1e\\xa5\" + // 0x00E20301: 0x00001EA5\n\t\"\\x00\\xc2\\x03\\x00\\x00\\x00\\x1e\\xa6\" + // 0x00C20300: 0x00001EA6\n\t\"\\x00\\xe2\\x03\\x00\\x00\\x00\\x1e\\xa7\" + // 0x00E20300: 0x00001EA7\n\t\"\\x00\\xc2\\x03\\t\\x00\\x00\\x1e\\xa8\" + // 0x00C20309: 0x00001EA8\n\t\"\\x00\\xe2\\x03\\t\\x00\\x00\\x1e\\xa9\" + // 0x00E20309: 0x00001EA9\n\t\"\\x00\\xc2\\x03\\x03\\x00\\x00\\x1e\\xaa\" + // 0x00C20303: 0x00001EAA\n\t\"\\x00\\xe2\\x03\\x03\\x00\\x00\\x1e\\xab\" + // 0x00E20303: 0x00001EAB\n\t\"\\x1e\\xa0\\x03\\x02\\x00\\x00\\x1e\\xac\" + // 0x1EA00302: 0x00001EAC\n\t\"\\x1e\\xa1\\x03\\x02\\x00\\x00\\x1e\\xad\" + // 0x1EA10302: 0x00001EAD\n\t\"\\x01\\x02\\x03\\x01\\x00\\x00\\x1e\\xae\" + // 0x01020301: 0x00001EAE\n\t\"\\x01\\x03\\x03\\x01\\x00\\x00\\x1e\\xaf\" + // 0x01030301: 0x00001EAF\n\t\"\\x01\\x02\\x03\\x00\\x00\\x00\\x1e\\xb0\" + // 0x01020300: 0x00001EB0\n\t\"\\x01\\x03\\x03\\x00\\x00\\x00\\x1e\\xb1\" + // 0x01030300: 0x00001EB1\n\t\"\\x01\\x02\\x03\\t\\x00\\x00\\x1e\\xb2\" + // 0x01020309: 0x00001EB2\n\t\"\\x01\\x03\\x03\\t\\x00\\x00\\x1e\\xb3\" + // 0x01030309: 0x00001EB3\n\t\"\\x01\\x02\\x03\\x03\\x00\\x00\\x1e\\xb4\" + // 0x01020303: 0x00001EB4\n\t\"\\x01\\x03\\x03\\x03\\x00\\x00\\x1e\\xb5\" + // 0x01030303: 0x00001EB5\n\t\"\\x1e\\xa0\\x03\\x06\\x00\\x00\\x1e\\xb6\" + // 0x1EA00306: 0x00001EB6\n\t\"\\x1e\\xa1\\x03\\x06\\x00\\x00\\x1e\\xb7\" + // 0x1EA10306: 0x00001EB7\n\t\"\\x00E\\x03#\\x00\\x00\\x1e\\xb8\" + // 0x00450323: 0x00001EB8\n\t\"\\x00e\\x03#\\x00\\x00\\x1e\\xb9\" + // 0x00650323: 0x00001EB9\n\t\"\\x00E\\x03\\t\\x00\\x00\\x1e\\xba\" + // 0x00450309: 0x00001EBA\n\t\"\\x00e\\x03\\t\\x00\\x00\\x1e\\xbb\" + // 0x00650309: 0x00001EBB\n\t\"\\x00E\\x03\\x03\\x00\\x00\\x1e\\xbc\" + // 0x00450303: 0x00001EBC\n\t\"\\x00e\\x03\\x03\\x00\\x00\\x1e\\xbd\" + // 0x00650303: 0x00001EBD\n\t\"\\x00\\xca\\x03\\x01\\x00\\x00\\x1e\\xbe\" + // 0x00CA0301: 0x00001EBE\n\t\"\\x00\\xea\\x03\\x01\\x00\\x00\\x1e\\xbf\" + // 0x00EA0301: 0x00001EBF\n\t\"\\x00\\xca\\x03\\x00\\x00\\x00\\x1e\\xc0\" + // 0x00CA0300: 0x00001EC0\n\t\"\\x00\\xea\\x03\\x00\\x00\\x00\\x1e\\xc1\" + // 0x00EA0300: 0x00001EC1\n\t\"\\x00\\xca\\x03\\t\\x00\\x00\\x1e\\xc2\" + // 0x00CA0309: 0x00001EC2\n\t\"\\x00\\xea\\x03\\t\\x00\\x00\\x1e\\xc3\" + // 0x00EA0309: 0x00001EC3\n\t\"\\x00\\xca\\x03\\x03\\x00\\x00\\x1e\\xc4\" + // 0x00CA0303: 0x00001EC4\n\t\"\\x00\\xea\\x03\\x03\\x00\\x00\\x1e\\xc5\" + // 0x00EA0303: 0x00001EC5\n\t\"\\x1e\\xb8\\x03\\x02\\x00\\x00\\x1e\\xc6\" + // 0x1EB80302: 0x00001EC6\n\t\"\\x1e\\xb9\\x03\\x02\\x00\\x00\\x1e\\xc7\" + // 0x1EB90302: 0x00001EC7\n\t\"\\x00I\\x03\\t\\x00\\x00\\x1e\\xc8\" + // 0x00490309: 0x00001EC8\n\t\"\\x00i\\x03\\t\\x00\\x00\\x1e\\xc9\" + // 0x00690309: 0x00001EC9\n\t\"\\x00I\\x03#\\x00\\x00\\x1e\\xca\" + // 0x00490323: 0x00001ECA\n\t\"\\x00i\\x03#\\x00\\x00\\x1e\\xcb\" + // 0x00690323: 0x00001ECB\n\t\"\\x00O\\x03#\\x00\\x00\\x1e\\xcc\" + // 0x004F0323: 0x00001ECC\n\t\"\\x00o\\x03#\\x00\\x00\\x1e\\xcd\" + // 0x006F0323: 0x00001ECD\n\t\"\\x00O\\x03\\t\\x00\\x00\\x1e\\xce\" + // 0x004F0309: 0x00001ECE\n\t\"\\x00o\\x03\\t\\x00\\x00\\x1e\\xcf\" + // 0x006F0309: 0x00001ECF\n\t\"\\x00\\xd4\\x03\\x01\\x00\\x00\\x1e\\xd0\" + // 0x00D40301: 0x00001ED0\n\t\"\\x00\\xf4\\x03\\x01\\x00\\x00\\x1e\\xd1\" + // 0x00F40301: 0x00001ED1\n\t\"\\x00\\xd4\\x03\\x00\\x00\\x00\\x1e\\xd2\" + // 0x00D40300: 0x00001ED2\n\t\"\\x00\\xf4\\x03\\x00\\x00\\x00\\x1e\\xd3\" + // 0x00F40300: 0x00001ED3\n\t\"\\x00\\xd4\\x03\\t\\x00\\x00\\x1e\\xd4\" + // 0x00D40309: 0x00001ED4\n\t\"\\x00\\xf4\\x03\\t\\x00\\x00\\x1e\\xd5\" + // 0x00F40309: 0x00001ED5\n\t\"\\x00\\xd4\\x03\\x03\\x00\\x00\\x1e\\xd6\" + // 0x00D40303: 0x00001ED6\n\t\"\\x00\\xf4\\x03\\x03\\x00\\x00\\x1e\\xd7\" + // 0x00F40303: 0x00001ED7\n\t\"\\x1e\\xcc\\x03\\x02\\x00\\x00\\x1e\\xd8\" + // 0x1ECC0302: 0x00001ED8\n\t\"\\x1e\\xcd\\x03\\x02\\x00\\x00\\x1e\\xd9\" + // 0x1ECD0302: 0x00001ED9\n\t\"\\x01\\xa0\\x03\\x01\\x00\\x00\\x1e\\xda\" + // 0x01A00301: 0x00001EDA\n\t\"\\x01\\xa1\\x03\\x01\\x00\\x00\\x1e\\xdb\" + // 0x01A10301: 0x00001EDB\n\t\"\\x01\\xa0\\x03\\x00\\x00\\x00\\x1e\\xdc\" + // 0x01A00300: 0x00001EDC\n\t\"\\x01\\xa1\\x03\\x00\\x00\\x00\\x1e\\xdd\" + // 0x01A10300: 0x00001EDD\n\t\"\\x01\\xa0\\x03\\t\\x00\\x00\\x1e\\xde\" + // 0x01A00309: 0x00001EDE\n\t\"\\x01\\xa1\\x03\\t\\x00\\x00\\x1e\\xdf\" + // 0x01A10309: 0x00001EDF\n\t\"\\x01\\xa0\\x03\\x03\\x00\\x00\\x1e\\xe0\" + // 0x01A00303: 0x00001EE0\n\t\"\\x01\\xa1\\x03\\x03\\x00\\x00\\x1e\\xe1\" + // 0x01A10303: 0x00001EE1\n\t\"\\x01\\xa0\\x03#\\x00\\x00\\x1e\\xe2\" + // 0x01A00323: 0x00001EE2\n\t\"\\x01\\xa1\\x03#\\x00\\x00\\x1e\\xe3\" + // 0x01A10323: 0x00001EE3\n\t\"\\x00U\\x03#\\x00\\x00\\x1e\\xe4\" + // 0x00550323: 0x00001EE4\n\t\"\\x00u\\x03#\\x00\\x00\\x1e\\xe5\" + // 0x00750323: 0x00001EE5\n\t\"\\x00U\\x03\\t\\x00\\x00\\x1e\\xe6\" + // 0x00550309: 0x00001EE6\n\t\"\\x00u\\x03\\t\\x00\\x00\\x1e\\xe7\" + // 0x00750309: 0x00001EE7\n\t\"\\x01\\xaf\\x03\\x01\\x00\\x00\\x1e\\xe8\" + // 0x01AF0301: 0x00001EE8\n\t\"\\x01\\xb0\\x03\\x01\\x00\\x00\\x1e\\xe9\" + // 0x01B00301: 0x00001EE9\n\t\"\\x01\\xaf\\x03\\x00\\x00\\x00\\x1e\\xea\" + // 0x01AF0300: 0x00001EEA\n\t\"\\x01\\xb0\\x03\\x00\\x00\\x00\\x1e\\xeb\" + // 0x01B00300: 0x00001EEB\n\t\"\\x01\\xaf\\x03\\t\\x00\\x00\\x1e\\xec\" + // 0x01AF0309: 0x00001EEC\n\t\"\\x01\\xb0\\x03\\t\\x00\\x00\\x1e\\xed\" + // 0x01B00309: 0x00001EED\n\t\"\\x01\\xaf\\x03\\x03\\x00\\x00\\x1e\\xee\" + // 0x01AF0303: 0x00001EEE\n\t\"\\x01\\xb0\\x03\\x03\\x00\\x00\\x1e\\xef\" + // 0x01B00303: 0x00001EEF\n\t\"\\x01\\xaf\\x03#\\x00\\x00\\x1e\\xf0\" + // 0x01AF0323: 0x00001EF0\n\t\"\\x01\\xb0\\x03#\\x00\\x00\\x1e\\xf1\" + // 0x01B00323: 0x00001EF1\n\t\"\\x00Y\\x03\\x00\\x00\\x00\\x1e\\xf2\" + // 0x00590300: 0x00001EF2\n\t\"\\x00y\\x03\\x00\\x00\\x00\\x1e\\xf3\" + // 0x00790300: 0x00001EF3\n\t\"\\x00Y\\x03#\\x00\\x00\\x1e\\xf4\" + // 0x00590323: 0x00001EF4\n\t\"\\x00y\\x03#\\x00\\x00\\x1e\\xf5\" + // 0x00790323: 0x00001EF5\n\t\"\\x00Y\\x03\\t\\x00\\x00\\x1e\\xf6\" + // 0x00590309: 0x00001EF6\n\t\"\\x00y\\x03\\t\\x00\\x00\\x1e\\xf7\" + // 0x00790309: 0x00001EF7\n\t\"\\x00Y\\x03\\x03\\x00\\x00\\x1e\\xf8\" + // 0x00590303: 0x00001EF8\n\t\"\\x00y\\x03\\x03\\x00\\x00\\x1e\\xf9\" + // 0x00790303: 0x00001EF9\n\t\"\\x03\\xb1\\x03\\x13\\x00\\x00\\x1f\\x00\" + // 0x03B10313: 0x00001F00\n\t\"\\x03\\xb1\\x03\\x14\\x00\\x00\\x1f\\x01\" + // 0x03B10314: 0x00001F01\n\t\"\\x1f\\x00\\x03\\x00\\x00\\x00\\x1f\\x02\" + // 0x1F000300: 0x00001F02\n\t\"\\x1f\\x01\\x03\\x00\\x00\\x00\\x1f\\x03\" + // 0x1F010300: 0x00001F03\n\t\"\\x1f\\x00\\x03\\x01\\x00\\x00\\x1f\\x04\" + // 0x1F000301: 0x00001F04\n\t\"\\x1f\\x01\\x03\\x01\\x00\\x00\\x1f\\x05\" + // 0x1F010301: 0x00001F05\n\t\"\\x1f\\x00\\x03B\\x00\\x00\\x1f\\x06\" + // 0x1F000342: 0x00001F06\n\t\"\\x1f\\x01\\x03B\\x00\\x00\\x1f\\a\" + // 0x1F010342: 0x00001F07\n\t\"\\x03\\x91\\x03\\x13\\x00\\x00\\x1f\\b\" + // 0x03910313: 0x00001F08\n\t\"\\x03\\x91\\x03\\x14\\x00\\x00\\x1f\\t\" + // 0x03910314: 0x00001F09\n\t\"\\x1f\\b\\x03\\x00\\x00\\x00\\x1f\\n\" + // 0x1F080300: 0x00001F0A\n\t\"\\x1f\\t\\x03\\x00\\x00\\x00\\x1f\\v\" + // 0x1F090300: 0x00001F0B\n\t\"\\x1f\\b\\x03\\x01\\x00\\x00\\x1f\\f\" + // 0x1F080301: 0x00001F0C\n\t\"\\x1f\\t\\x03\\x01\\x00\\x00\\x1f\\r\" + // 0x1F090301: 0x00001F0D\n\t\"\\x1f\\b\\x03B\\x00\\x00\\x1f\\x0e\" + // 0x1F080342: 0x00001F0E\n\t\"\\x1f\\t\\x03B\\x00\\x00\\x1f\\x0f\" + // 0x1F090342: 0x00001F0F\n\t\"\\x03\\xb5\\x03\\x13\\x00\\x00\\x1f\\x10\" + // 0x03B50313: 0x00001F10\n\t\"\\x03\\xb5\\x03\\x14\\x00\\x00\\x1f\\x11\" + // 0x03B50314: 0x00001F11\n\t\"\\x1f\\x10\\x03\\x00\\x00\\x00\\x1f\\x12\" + // 0x1F100300: 0x00001F12\n\t\"\\x1f\\x11\\x03\\x00\\x00\\x00\\x1f\\x13\" + // 0x1F110300: 0x00001F13\n\t\"\\x1f\\x10\\x03\\x01\\x00\\x00\\x1f\\x14\" + // 0x1F100301: 0x00001F14\n\t\"\\x1f\\x11\\x03\\x01\\x00\\x00\\x1f\\x15\" + // 0x1F110301: 0x00001F15\n\t\"\\x03\\x95\\x03\\x13\\x00\\x00\\x1f\\x18\" + // 0x03950313: 0x00001F18\n\t\"\\x03\\x95\\x03\\x14\\x00\\x00\\x1f\\x19\" + // 0x03950314: 0x00001F19\n\t\"\\x1f\\x18\\x03\\x00\\x00\\x00\\x1f\\x1a\" + // 0x1F180300: 0x00001F1A\n\t\"\\x1f\\x19\\x03\\x00\\x00\\x00\\x1f\\x1b\" + // 0x1F190300: 0x00001F1B\n\t\"\\x1f\\x18\\x03\\x01\\x00\\x00\\x1f\\x1c\" + // 0x1F180301: 0x00001F1C\n\t\"\\x1f\\x19\\x03\\x01\\x00\\x00\\x1f\\x1d\" + // 0x1F190301: 0x00001F1D\n\t\"\\x03\\xb7\\x03\\x13\\x00\\x00\\x1f \" + // 0x03B70313: 0x00001F20\n\t\"\\x03\\xb7\\x03\\x14\\x00\\x00\\x1f!\" + // 0x03B70314: 0x00001F21\n\t\"\\x1f \\x03\\x00\\x00\\x00\\x1f\\\"\" + // 0x1F200300: 0x00001F22\n\t\"\\x1f!\\x03\\x00\\x00\\x00\\x1f#\" + // 0x1F210300: 0x00001F23\n\t\"\\x1f \\x03\\x01\\x00\\x00\\x1f$\" + // 0x1F200301: 0x00001F24\n\t\"\\x1f!\\x03\\x01\\x00\\x00\\x1f%\" + // 0x1F210301: 0x00001F25\n\t\"\\x1f \\x03B\\x00\\x00\\x1f&\" + // 0x1F200342: 0x00001F26\n\t\"\\x1f!\\x03B\\x00\\x00\\x1f'\" + // 0x1F210342: 0x00001F27\n\t\"\\x03\\x97\\x03\\x13\\x00\\x00\\x1f(\" + // 0x03970313: 0x00001F28\n\t\"\\x03\\x97\\x03\\x14\\x00\\x00\\x1f)\" + // 0x03970314: 0x00001F29\n\t\"\\x1f(\\x03\\x00\\x00\\x00\\x1f*\" + // 0x1F280300: 0x00001F2A\n\t\"\\x1f)\\x03\\x00\\x00\\x00\\x1f+\" + // 0x1F290300: 0x00001F2B\n\t\"\\x1f(\\x03\\x01\\x00\\x00\\x1f,\" + // 0x1F280301: 0x00001F2C\n\t\"\\x1f)\\x03\\x01\\x00\\x00\\x1f-\" + // 0x1F290301: 0x00001F2D\n\t\"\\x1f(\\x03B\\x00\\x00\\x1f.\" + // 0x1F280342: 0x00001F2E\n\t\"\\x1f)\\x03B\\x00\\x00\\x1f/\" + // 0x1F290342: 0x00001F2F\n\t\"\\x03\\xb9\\x03\\x13\\x00\\x00\\x1f0\" + // 0x03B90313: 0x00001F30\n\t\"\\x03\\xb9\\x03\\x14\\x00\\x00\\x1f1\" + // 0x03B90314: 0x00001F31\n\t\"\\x1f0\\x03\\x00\\x00\\x00\\x1f2\" + // 0x1F300300: 0x00001F32\n\t\"\\x1f1\\x03\\x00\\x00\\x00\\x1f3\" + // 0x1F310300: 0x00001F33\n\t\"\\x1f0\\x03\\x01\\x00\\x00\\x1f4\" + // 0x1F300301: 0x00001F34\n\t\"\\x1f1\\x03\\x01\\x00\\x00\\x1f5\" + // 0x1F310301: 0x00001F35\n\t\"\\x1f0\\x03B\\x00\\x00\\x1f6\" + // 0x1F300342: 0x00001F36\n\t\"\\x1f1\\x03B\\x00\\x00\\x1f7\" + // 0x1F310342: 0x00001F37\n\t\"\\x03\\x99\\x03\\x13\\x00\\x00\\x1f8\" + // 0x03990313: 0x00001F38\n\t\"\\x03\\x99\\x03\\x14\\x00\\x00\\x1f9\" + // 0x03990314: 0x00001F39\n\t\"\\x1f8\\x03\\x00\\x00\\x00\\x1f:\" + // 0x1F380300: 0x00001F3A\n\t\"\\x1f9\\x03\\x00\\x00\\x00\\x1f;\" + // 0x1F390300: 0x00001F3B\n\t\"\\x1f8\\x03\\x01\\x00\\x00\\x1f<\" + // 0x1F380301: 0x00001F3C\n\t\"\\x1f9\\x03\\x01\\x00\\x00\\x1f=\" + // 0x1F390301: 0x00001F3D\n\t\"\\x1f8\\x03B\\x00\\x00\\x1f>\" + // 0x1F380342: 0x00001F3E\n\t\"\\x1f9\\x03B\\x00\\x00\\x1f?\" + // 0x1F390342: 0x00001F3F\n\t\"\\x03\\xbf\\x03\\x13\\x00\\x00\\x1f@\" + // 0x03BF0313: 0x00001F40\n\t\"\\x03\\xbf\\x03\\x14\\x00\\x00\\x1fA\" + // 0x03BF0314: 0x00001F41\n\t\"\\x1f@\\x03\\x00\\x00\\x00\\x1fB\" + // 0x1F400300: 0x00001F42\n\t\"\\x1fA\\x03\\x00\\x00\\x00\\x1fC\" + // 0x1F410300: 0x00001F43\n\t\"\\x1f@\\x03\\x01\\x00\\x00\\x1fD\" + // 0x1F400301: 0x00001F44\n\t\"\\x1fA\\x03\\x01\\x00\\x00\\x1fE\" + // 0x1F410301: 0x00001F45\n\t\"\\x03\\x9f\\x03\\x13\\x00\\x00\\x1fH\" + // 0x039F0313: 0x00001F48\n\t\"\\x03\\x9f\\x03\\x14\\x00\\x00\\x1fI\" + // 0x039F0314: 0x00001F49\n\t\"\\x1fH\\x03\\x00\\x00\\x00\\x1fJ\" + // 0x1F480300: 0x00001F4A\n\t\"\\x1fI\\x03\\x00\\x00\\x00\\x1fK\" + // 0x1F490300: 0x00001F4B\n\t\"\\x1fH\\x03\\x01\\x00\\x00\\x1fL\" + // 0x1F480301: 0x00001F4C\n\t\"\\x1fI\\x03\\x01\\x00\\x00\\x1fM\" + // 0x1F490301: 0x00001F4D\n\t\"\\x03\\xc5\\x03\\x13\\x00\\x00\\x1fP\" + // 0x03C50313: 0x00001F50\n\t\"\\x03\\xc5\\x03\\x14\\x00\\x00\\x1fQ\" + // 0x03C50314: 0x00001F51\n\t\"\\x1fP\\x03\\x00\\x00\\x00\\x1fR\" + // 0x1F500300: 0x00001F52\n\t\"\\x1fQ\\x03\\x00\\x00\\x00\\x1fS\" + // 0x1F510300: 0x00001F53\n\t\"\\x1fP\\x03\\x01\\x00\\x00\\x1fT\" + // 0x1F500301: 0x00001F54\n\t\"\\x1fQ\\x03\\x01\\x00\\x00\\x1fU\" + // 0x1F510301: 0x00001F55\n\t\"\\x1fP\\x03B\\x00\\x00\\x1fV\" + // 0x1F500342: 0x00001F56\n\t\"\\x1fQ\\x03B\\x00\\x00\\x1fW\" + // 0x1F510342: 0x00001F57\n\t\"\\x03\\xa5\\x03\\x14\\x00\\x00\\x1fY\" + // 0x03A50314: 0x00001F59\n\t\"\\x1fY\\x03\\x00\\x00\\x00\\x1f[\" + // 0x1F590300: 0x00001F5B\n\t\"\\x1fY\\x03\\x01\\x00\\x00\\x1f]\" + // 0x1F590301: 0x00001F5D\n\t\"\\x1fY\\x03B\\x00\\x00\\x1f_\" + // 0x1F590342: 0x00001F5F\n\t\"\\x03\\xc9\\x03\\x13\\x00\\x00\\x1f`\" + // 0x03C90313: 0x00001F60\n\t\"\\x03\\xc9\\x03\\x14\\x00\\x00\\x1fa\" + // 0x03C90314: 0x00001F61\n\t\"\\x1f`\\x03\\x00\\x00\\x00\\x1fb\" + // 0x1F600300: 0x00001F62\n\t\"\\x1fa\\x03\\x00\\x00\\x00\\x1fc\" + // 0x1F610300: 0x00001F63\n\t\"\\x1f`\\x03\\x01\\x00\\x00\\x1fd\" + // 0x1F600301: 0x00001F64\n\t\"\\x1fa\\x03\\x01\\x00\\x00\\x1fe\" + // 0x1F610301: 0x00001F65\n\t\"\\x1f`\\x03B\\x00\\x00\\x1ff\" + // 0x1F600342: 0x00001F66\n\t\"\\x1fa\\x03B\\x00\\x00\\x1fg\" + // 0x1F610342: 0x00001F67\n\t\"\\x03\\xa9\\x03\\x13\\x00\\x00\\x1fh\" + // 0x03A90313: 0x00001F68\n\t\"\\x03\\xa9\\x03\\x14\\x00\\x00\\x1fi\" + // 0x03A90314: 0x00001F69\n\t\"\\x1fh\\x03\\x00\\x00\\x00\\x1fj\" + // 0x1F680300: 0x00001F6A\n\t\"\\x1fi\\x03\\x00\\x00\\x00\\x1fk\" + // 0x1F690300: 0x00001F6B\n\t\"\\x1fh\\x03\\x01\\x00\\x00\\x1fl\" + // 0x1F680301: 0x00001F6C\n\t\"\\x1fi\\x03\\x01\\x00\\x00\\x1fm\" + // 0x1F690301: 0x00001F6D\n\t\"\\x1fh\\x03B\\x00\\x00\\x1fn\" + // 0x1F680342: 0x00001F6E\n\t\"\\x1fi\\x03B\\x00\\x00\\x1fo\" + // 0x1F690342: 0x00001F6F\n\t\"\\x03\\xb1\\x03\\x00\\x00\\x00\\x1fp\" + // 0x03B10300: 0x00001F70\n\t\"\\x03\\xb5\\x03\\x00\\x00\\x00\\x1fr\" + // 0x03B50300: 0x00001F72\n\t\"\\x03\\xb7\\x03\\x00\\x00\\x00\\x1ft\" + // 0x03B70300: 0x00001F74\n\t\"\\x03\\xb9\\x03\\x00\\x00\\x00\\x1fv\" + // 0x03B90300: 0x00001F76\n\t\"\\x03\\xbf\\x03\\x00\\x00\\x00\\x1fx\" + // 0x03BF0300: 0x00001F78\n\t\"\\x03\\xc5\\x03\\x00\\x00\\x00\\x1fz\" + // 0x03C50300: 0x00001F7A\n\t\"\\x03\\xc9\\x03\\x00\\x00\\x00\\x1f|\" + // 0x03C90300: 0x00001F7C\n\t\"\\x1f\\x00\\x03E\\x00\\x00\\x1f\\x80\" + // 0x1F000345: 0x00001F80\n\t\"\\x1f\\x01\\x03E\\x00\\x00\\x1f\\x81\" + // 0x1F010345: 0x00001F81\n\t\"\\x1f\\x02\\x03E\\x00\\x00\\x1f\\x82\" + // 0x1F020345: 0x00001F82\n\t\"\\x1f\\x03\\x03E\\x00\\x00\\x1f\\x83\" + // 0x1F030345: 0x00001F83\n\t\"\\x1f\\x04\\x03E\\x00\\x00\\x1f\\x84\" + // 0x1F040345: 0x00001F84\n\t\"\\x1f\\x05\\x03E\\x00\\x00\\x1f\\x85\" + // 0x1F050345: 0x00001F85\n\t\"\\x1f\\x06\\x03E\\x00\\x00\\x1f\\x86\" + // 0x1F060345: 0x00001F86\n\t\"\\x1f\\a\\x03E\\x00\\x00\\x1f\\x87\" + // 0x1F070345: 0x00001F87\n\t\"\\x1f\\b\\x03E\\x00\\x00\\x1f\\x88\" + // 0x1F080345: 0x00001F88\n\t\"\\x1f\\t\\x03E\\x00\\x00\\x1f\\x89\" + // 0x1F090345: 0x00001F89\n\t\"\\x1f\\n\\x03E\\x00\\x00\\x1f\\x8a\" + // 0x1F0A0345: 0x00001F8A\n\t\"\\x1f\\v\\x03E\\x00\\x00\\x1f\\x8b\" + // 0x1F0B0345: 0x00001F8B\n\t\"\\x1f\\f\\x03E\\x00\\x00\\x1f\\x8c\" + // 0x1F0C0345: 0x00001F8C\n\t\"\\x1f\\r\\x03E\\x00\\x00\\x1f\\x8d\" + // 0x1F0D0345: 0x00001F8D\n\t\"\\x1f\\x0e\\x03E\\x00\\x00\\x1f\\x8e\" + // 0x1F0E0345: 0x00001F8E\n\t\"\\x1f\\x0f\\x03E\\x00\\x00\\x1f\\x8f\" + // 0x1F0F0345: 0x00001F8F\n\t\"\\x1f \\x03E\\x00\\x00\\x1f\\x90\" + // 0x1F200345: 0x00001F90\n\t\"\\x1f!\\x03E\\x00\\x00\\x1f\\x91\" + // 0x1F210345: 0x00001F91\n\t\"\\x1f\\\"\\x03E\\x00\\x00\\x1f\\x92\" + // 0x1F220345: 0x00001F92\n\t\"\\x1f#\\x03E\\x00\\x00\\x1f\\x93\" + // 0x1F230345: 0x00001F93\n\t\"\\x1f$\\x03E\\x00\\x00\\x1f\\x94\" + // 0x1F240345: 0x00001F94\n\t\"\\x1f%\\x03E\\x00\\x00\\x1f\\x95\" + // 0x1F250345: 0x00001F95\n\t\"\\x1f&\\x03E\\x00\\x00\\x1f\\x96\" + // 0x1F260345: 0x00001F96\n\t\"\\x1f'\\x03E\\x00\\x00\\x1f\\x97\" + // 0x1F270345: 0x00001F97\n\t\"\\x1f(\\x03E\\x00\\x00\\x1f\\x98\" + // 0x1F280345: 0x00001F98\n\t\"\\x1f)\\x03E\\x00\\x00\\x1f\\x99\" + // 0x1F290345: 0x00001F99\n\t\"\\x1f*\\x03E\\x00\\x00\\x1f\\x9a\" + // 0x1F2A0345: 0x00001F9A\n\t\"\\x1f+\\x03E\\x00\\x00\\x1f\\x9b\" + // 0x1F2B0345: 0x00001F9B\n\t\"\\x1f,\\x03E\\x00\\x00\\x1f\\x9c\" + // 0x1F2C0345: 0x00001F9C\n\t\"\\x1f-\\x03E\\x00\\x00\\x1f\\x9d\" + // 0x1F2D0345: 0x00001F9D\n\t\"\\x1f.\\x03E\\x00\\x00\\x1f\\x9e\" + // 0x1F2E0345: 0x00001F9E\n\t\"\\x1f/\\x03E\\x00\\x00\\x1f\\x9f\" + // 0x1F2F0345: 0x00001F9F\n\t\"\\x1f`\\x03E\\x00\\x00\\x1f\\xa0\" + // 0x1F600345: 0x00001FA0\n\t\"\\x1fa\\x03E\\x00\\x00\\x1f\\xa1\" + // 0x1F610345: 0x00001FA1\n\t\"\\x1fb\\x03E\\x00\\x00\\x1f\\xa2\" + // 0x1F620345: 0x00001FA2\n\t\"\\x1fc\\x03E\\x00\\x00\\x1f\\xa3\" + // 0x1F630345: 0x00001FA3\n\t\"\\x1fd\\x03E\\x00\\x00\\x1f\\xa4\" + // 0x1F640345: 0x00001FA4\n\t\"\\x1fe\\x03E\\x00\\x00\\x1f\\xa5\" + // 0x1F650345: 0x00001FA5\n\t\"\\x1ff\\x03E\\x00\\x00\\x1f\\xa6\" + // 0x1F660345: 0x00001FA6\n\t\"\\x1fg\\x03E\\x00\\x00\\x1f\\xa7\" + // 0x1F670345: 0x00001FA7\n\t\"\\x1fh\\x03E\\x00\\x00\\x1f\\xa8\" + // 0x1F680345: 0x00001FA8\n\t\"\\x1fi\\x03E\\x00\\x00\\x1f\\xa9\" + // 0x1F690345: 0x00001FA9\n\t\"\\x1fj\\x03E\\x00\\x00\\x1f\\xaa\" + // 0x1F6A0345: 0x00001FAA\n\t\"\\x1fk\\x03E\\x00\\x00\\x1f\\xab\" + // 0x1F6B0345: 0x00001FAB\n\t\"\\x1fl\\x03E\\x00\\x00\\x1f\\xac\" + // 0x1F6C0345: 0x00001FAC\n\t\"\\x1fm\\x03E\\x00\\x00\\x1f\\xad\" + // 0x1F6D0345: 0x00001FAD\n\t\"\\x1fn\\x03E\\x00\\x00\\x1f\\xae\" + // 0x1F6E0345: 0x00001FAE\n\t\"\\x1fo\\x03E\\x00\\x00\\x1f\\xaf\" + // 0x1F6F0345: 0x00001FAF\n\t\"\\x03\\xb1\\x03\\x06\\x00\\x00\\x1f\\xb0\" + // 0x03B10306: 0x00001FB0\n\t\"\\x03\\xb1\\x03\\x04\\x00\\x00\\x1f\\xb1\" + // 0x03B10304: 0x00001FB1\n\t\"\\x1fp\\x03E\\x00\\x00\\x1f\\xb2\" + // 0x1F700345: 0x00001FB2\n\t\"\\x03\\xb1\\x03E\\x00\\x00\\x1f\\xb3\" + // 0x03B10345: 0x00001FB3\n\t\"\\x03\\xac\\x03E\\x00\\x00\\x1f\\xb4\" + // 0x03AC0345: 0x00001FB4\n\t\"\\x03\\xb1\\x03B\\x00\\x00\\x1f\\xb6\" + // 0x03B10342: 0x00001FB6\n\t\"\\x1f\\xb6\\x03E\\x00\\x00\\x1f\\xb7\" + // 0x1FB60345: 0x00001FB7\n\t\"\\x03\\x91\\x03\\x06\\x00\\x00\\x1f\\xb8\" + // 0x03910306: 0x00001FB8\n\t\"\\x03\\x91\\x03\\x04\\x00\\x00\\x1f\\xb9\" + // 0x03910304: 0x00001FB9\n\t\"\\x03\\x91\\x03\\x00\\x00\\x00\\x1f\\xba\" + // 0x03910300: 0x00001FBA\n\t\"\\x03\\x91\\x03E\\x00\\x00\\x1f\\xbc\" + // 0x03910345: 0x00001FBC\n\t\"\\x00\\xa8\\x03B\\x00\\x00\\x1f\\xc1\" + // 0x00A80342: 0x00001FC1\n\t\"\\x1ft\\x03E\\x00\\x00\\x1f\\xc2\" + // 0x1F740345: 0x00001FC2\n\t\"\\x03\\xb7\\x03E\\x00\\x00\\x1f\\xc3\" + // 0x03B70345: 0x00001FC3\n\t\"\\x03\\xae\\x03E\\x00\\x00\\x1f\\xc4\" + // 0x03AE0345: 0x00001FC4\n\t\"\\x03\\xb7\\x03B\\x00\\x00\\x1f\\xc6\" + // 0x03B70342: 0x00001FC6\n\t\"\\x1f\\xc6\\x03E\\x00\\x00\\x1f\\xc7\" + // 0x1FC60345: 0x00001FC7\n\t\"\\x03\\x95\\x03\\x00\\x00\\x00\\x1f\\xc8\" + // 0x03950300: 0x00001FC8\n\t\"\\x03\\x97\\x03\\x00\\x00\\x00\\x1f\\xca\" + // 0x03970300: 0x00001FCA\n\t\"\\x03\\x97\\x03E\\x00\\x00\\x1f\\xcc\" + // 0x03970345: 0x00001FCC\n\t\"\\x1f\\xbf\\x03\\x00\\x00\\x00\\x1f\\xcd\" + // 0x1FBF0300: 0x00001FCD\n\t\"\\x1f\\xbf\\x03\\x01\\x00\\x00\\x1f\\xce\" + // 0x1FBF0301: 0x00001FCE\n\t\"\\x1f\\xbf\\x03B\\x00\\x00\\x1f\\xcf\" + // 0x1FBF0342: 0x00001FCF\n\t\"\\x03\\xb9\\x03\\x06\\x00\\x00\\x1f\\xd0\" + // 0x03B90306: 0x00001FD0\n\t\"\\x03\\xb9\\x03\\x04\\x00\\x00\\x1f\\xd1\" + // 0x03B90304: 0x00001FD1\n\t\"\\x03\\xca\\x03\\x00\\x00\\x00\\x1f\\xd2\" + // 0x03CA0300: 0x00001FD2\n\t\"\\x03\\xb9\\x03B\\x00\\x00\\x1f\\xd6\" + // 0x03B90342: 0x00001FD6\n\t\"\\x03\\xca\\x03B\\x00\\x00\\x1f\\xd7\" + // 0x03CA0342: 0x00001FD7\n\t\"\\x03\\x99\\x03\\x06\\x00\\x00\\x1f\\xd8\" + // 0x03990306: 0x00001FD8\n\t\"\\x03\\x99\\x03\\x04\\x00\\x00\\x1f\\xd9\" + // 0x03990304: 0x00001FD9\n\t\"\\x03\\x99\\x03\\x00\\x00\\x00\\x1f\\xda\" + // 0x03990300: 0x00001FDA\n\t\"\\x1f\\xfe\\x03\\x00\\x00\\x00\\x1f\\xdd\" + // 0x1FFE0300: 0x00001FDD\n\t\"\\x1f\\xfe\\x03\\x01\\x00\\x00\\x1f\\xde\" + // 0x1FFE0301: 0x00001FDE\n\t\"\\x1f\\xfe\\x03B\\x00\\x00\\x1f\\xdf\" + // 0x1FFE0342: 0x00001FDF\n\t\"\\x03\\xc5\\x03\\x06\\x00\\x00\\x1f\\xe0\" + // 0x03C50306: 0x00001FE0\n\t\"\\x03\\xc5\\x03\\x04\\x00\\x00\\x1f\\xe1\" + // 0x03C50304: 0x00001FE1\n\t\"\\x03\\xcb\\x03\\x00\\x00\\x00\\x1f\\xe2\" + // 0x03CB0300: 0x00001FE2\n\t\"\\x03\\xc1\\x03\\x13\\x00\\x00\\x1f\\xe4\" + // 0x03C10313: 0x00001FE4\n\t\"\\x03\\xc1\\x03\\x14\\x00\\x00\\x1f\\xe5\" + // 0x03C10314: 0x00001FE5\n\t\"\\x03\\xc5\\x03B\\x00\\x00\\x1f\\xe6\" + // 0x03C50342: 0x00001FE6\n\t\"\\x03\\xcb\\x03B\\x00\\x00\\x1f\\xe7\" + // 0x03CB0342: 0x00001FE7\n\t\"\\x03\\xa5\\x03\\x06\\x00\\x00\\x1f\\xe8\" + // 0x03A50306: 0x00001FE8\n\t\"\\x03\\xa5\\x03\\x04\\x00\\x00\\x1f\\xe9\" + // 0x03A50304: 0x00001FE9\n\t\"\\x03\\xa5\\x03\\x00\\x00\\x00\\x1f\\xea\" + // 0x03A50300: 0x00001FEA\n\t\"\\x03\\xa1\\x03\\x14\\x00\\x00\\x1f\\xec\" + // 0x03A10314: 0x00001FEC\n\t\"\\x00\\xa8\\x03\\x00\\x00\\x00\\x1f\\xed\" + // 0x00A80300: 0x00001FED\n\t\"\\x1f|\\x03E\\x00\\x00\\x1f\\xf2\" + // 0x1F7C0345: 0x00001FF2\n\t\"\\x03\\xc9\\x03E\\x00\\x00\\x1f\\xf3\" + // 0x03C90345: 0x00001FF3\n\t\"\\x03\\xce\\x03E\\x00\\x00\\x1f\\xf4\" + // 0x03CE0345: 0x00001FF4\n\t\"\\x03\\xc9\\x03B\\x00\\x00\\x1f\\xf6\" + // 0x03C90342: 0x00001FF6\n\t\"\\x1f\\xf6\\x03E\\x00\\x00\\x1f\\xf7\" + // 0x1FF60345: 0x00001FF7\n\t\"\\x03\\x9f\\x03\\x00\\x00\\x00\\x1f\\xf8\" + // 0x039F0300: 0x00001FF8\n\t\"\\x03\\xa9\\x03\\x00\\x00\\x00\\x1f\\xfa\" + // 0x03A90300: 0x00001FFA\n\t\"\\x03\\xa9\\x03E\\x00\\x00\\x1f\\xfc\" + // 0x03A90345: 0x00001FFC\n\t\"!\\x90\\x038\\x00\\x00!\\x9a\" + // 0x21900338: 0x0000219A\n\t\"!\\x92\\x038\\x00\\x00!\\x9b\" + // 0x21920338: 0x0000219B\n\t\"!\\x94\\x038\\x00\\x00!\\xae\" + // 0x21940338: 0x000021AE\n\t\"!\\xd0\\x038\\x00\\x00!\\xcd\" + // 0x21D00338: 0x000021CD\n\t\"!\\xd4\\x038\\x00\\x00!\\xce\" + // 0x21D40338: 0x000021CE\n\t\"!\\xd2\\x038\\x00\\x00!\\xcf\" + // 0x21D20338: 0x000021CF\n\t\"\\\"\\x03\\x038\\x00\\x00\\\"\\x04\" + // 0x22030338: 0x00002204\n\t\"\\\"\\b\\x038\\x00\\x00\\\"\\t\" + // 0x22080338: 0x00002209\n\t\"\\\"\\v\\x038\\x00\\x00\\\"\\f\" + // 0x220B0338: 0x0000220C\n\t\"\\\"#\\x038\\x00\\x00\\\"$\" + // 0x22230338: 0x00002224\n\t\"\\\"%\\x038\\x00\\x00\\\"&\" + // 0x22250338: 0x00002226\n\t\"\\\"<\\x038\\x00\\x00\\\"A\" + // 0x223C0338: 0x00002241\n\t\"\\\"C\\x038\\x00\\x00\\\"D\" + // 0x22430338: 0x00002244\n\t\"\\\"E\\x038\\x00\\x00\\\"G\" + // 0x22450338: 0x00002247\n\t\"\\\"H\\x038\\x00\\x00\\\"I\" + // 0x22480338: 0x00002249\n\t\"\\x00=\\x038\\x00\\x00\\\"`\" + // 0x003D0338: 0x00002260\n\t\"\\\"a\\x038\\x00\\x00\\\"b\" + // 0x22610338: 0x00002262\n\t\"\\\"M\\x038\\x00\\x00\\\"m\" + // 0x224D0338: 0x0000226D\n\t\"\\x00<\\x038\\x00\\x00\\\"n\" + // 0x003C0338: 0x0000226E\n\t\"\\x00>\\x038\\x00\\x00\\\"o\" + // 0x003E0338: 0x0000226F\n\t\"\\\"d\\x038\\x00\\x00\\\"p\" + // 0x22640338: 0x00002270\n\t\"\\\"e\\x038\\x00\\x00\\\"q\" + // 0x22650338: 0x00002271\n\t\"\\\"r\\x038\\x00\\x00\\\"t\" + // 0x22720338: 0x00002274\n\t\"\\\"s\\x038\\x00\\x00\\\"u\" + // 0x22730338: 0x00002275\n\t\"\\\"v\\x038\\x00\\x00\\\"x\" + // 0x22760338: 0x00002278\n\t\"\\\"w\\x038\\x00\\x00\\\"y\" + // 0x22770338: 0x00002279\n\t\"\\\"z\\x038\\x00\\x00\\\"\\x80\" + // 0x227A0338: 0x00002280\n\t\"\\\"{\\x038\\x00\\x00\\\"\\x81\" + // 0x227B0338: 0x00002281\n\t\"\\\"\\x82\\x038\\x00\\x00\\\"\\x84\" + // 0x22820338: 0x00002284\n\t\"\\\"\\x83\\x038\\x00\\x00\\\"\\x85\" + // 0x22830338: 0x00002285\n\t\"\\\"\\x86\\x038\\x00\\x00\\\"\\x88\" + // 0x22860338: 0x00002288\n\t\"\\\"\\x87\\x038\\x00\\x00\\\"\\x89\" + // 0x22870338: 0x00002289\n\t\"\\\"\\xa2\\x038\\x00\\x00\\\"\\xac\" + // 0x22A20338: 0x000022AC\n\t\"\\\"\\xa8\\x038\\x00\\x00\\\"\\xad\" + // 0x22A80338: 0x000022AD\n\t\"\\\"\\xa9\\x038\\x00\\x00\\\"\\xae\" + // 0x22A90338: 0x000022AE\n\t\"\\\"\\xab\\x038\\x00\\x00\\\"\\xaf\" + // 0x22AB0338: 0x000022AF\n\t\"\\\"|\\x038\\x00\\x00\\\"\\xe0\" + // 0x227C0338: 0x000022E0\n\t\"\\\"}\\x038\\x00\\x00\\\"\\xe1\" + // 0x227D0338: 0x000022E1\n\t\"\\\"\\x91\\x038\\x00\\x00\\\"\\xe2\" + // 0x22910338: 0x000022E2\n\t\"\\\"\\x92\\x038\\x00\\x00\\\"\\xe3\" + // 0x22920338: 0x000022E3\n\t\"\\\"\\xb2\\x038\\x00\\x00\\\"\\xea\" + // 0x22B20338: 0x000022EA\n\t\"\\\"\\xb3\\x038\\x00\\x00\\\"\\xeb\" + // 0x22B30338: 0x000022EB\n\t\"\\\"\\xb4\\x038\\x00\\x00\\\"\\xec\" + // 0x22B40338: 0x000022EC\n\t\"\\\"\\xb5\\x038\\x00\\x00\\\"\\xed\" + // 0x22B50338: 0x000022ED\n\t\"0K0\\x99\\x00\\x000L\" + // 0x304B3099: 0x0000304C\n\t\"0M0\\x99\\x00\\x000N\" + // 0x304D3099: 0x0000304E\n\t\"0O0\\x99\\x00\\x000P\" + // 0x304F3099: 0x00003050\n\t\"0Q0\\x99\\x00\\x000R\" + // 0x30513099: 0x00003052\n\t\"0S0\\x99\\x00\\x000T\" + // 0x30533099: 0x00003054\n\t\"0U0\\x99\\x00\\x000V\" + // 0x30553099: 0x00003056\n\t\"0W0\\x99\\x00\\x000X\" + // 0x30573099: 0x00003058\n\t\"0Y0\\x99\\x00\\x000Z\" + // 0x30593099: 0x0000305A\n\t\"0[0\\x99\\x00\\x000\\\\\" + // 0x305B3099: 0x0000305C\n\t\"0]0\\x99\\x00\\x000^\" + // 0x305D3099: 0x0000305E\n\t\"0_0\\x99\\x00\\x000`\" + // 0x305F3099: 0x00003060\n\t\"0a0\\x99\\x00\\x000b\" + // 0x30613099: 0x00003062\n\t\"0d0\\x99\\x00\\x000e\" + // 0x30643099: 0x00003065\n\t\"0f0\\x99\\x00\\x000g\" + // 0x30663099: 0x00003067\n\t\"0h0\\x99\\x00\\x000i\" + // 0x30683099: 0x00003069\n\t\"0o0\\x99\\x00\\x000p\" + // 0x306F3099: 0x00003070\n\t\"0o0\\x9a\\x00\\x000q\" + // 0x306F309A: 0x00003071\n\t\"0r0\\x99\\x00\\x000s\" + // 0x30723099: 0x00003073\n\t\"0r0\\x9a\\x00\\x000t\" + // 0x3072309A: 0x00003074\n\t\"0u0\\x99\\x00\\x000v\" + // 0x30753099: 0x00003076\n\t\"0u0\\x9a\\x00\\x000w\" + // 0x3075309A: 0x00003077\n\t\"0x0\\x99\\x00\\x000y\" + // 0x30783099: 0x00003079\n\t\"0x0\\x9a\\x00\\x000z\" + // 0x3078309A: 0x0000307A\n\t\"0{0\\x99\\x00\\x000|\" + // 0x307B3099: 0x0000307C\n\t\"0{0\\x9a\\x00\\x000}\" + // 0x307B309A: 0x0000307D\n\t\"0F0\\x99\\x00\\x000\\x94\" + // 0x30463099: 0x00003094\n\t\"0\\x9d0\\x99\\x00\\x000\\x9e\" + // 0x309D3099: 0x0000309E\n\t\"0\\xab0\\x99\\x00\\x000\\xac\" + // 0x30AB3099: 0x000030AC\n\t\"0\\xad0\\x99\\x00\\x000\\xae\" + // 0x30AD3099: 0x000030AE\n\t\"0\\xaf0\\x99\\x00\\x000\\xb0\" + // 0x30AF3099: 0x000030B0\n\t\"0\\xb10\\x99\\x00\\x000\\xb2\" + // 0x30B13099: 0x000030B2\n\t\"0\\xb30\\x99\\x00\\x000\\xb4\" + // 0x30B33099: 0x000030B4\n\t\"0\\xb50\\x99\\x00\\x000\\xb6\" + // 0x30B53099: 0x000030B6\n\t\"0\\xb70\\x99\\x00\\x000\\xb8\" + // 0x30B73099: 0x000030B8\n\t\"0\\xb90\\x99\\x00\\x000\\xba\" + // 0x30B93099: 0x000030BA\n\t\"0\\xbb0\\x99\\x00\\x000\\xbc\" + // 0x30BB3099: 0x000030BC\n\t\"0\\xbd0\\x99\\x00\\x000\\xbe\" + // 0x30BD3099: 0x000030BE\n\t\"0\\xbf0\\x99\\x00\\x000\\xc0\" + // 0x30BF3099: 0x000030C0\n\t\"0\\xc10\\x99\\x00\\x000\\xc2\" + // 0x30C13099: 0x000030C2\n\t\"0\\xc40\\x99\\x00\\x000\\xc5\" + // 0x30C43099: 0x000030C5\n\t\"0\\xc60\\x99\\x00\\x000\\xc7\" + // 0x30C63099: 0x000030C7\n\t\"0\\xc80\\x99\\x00\\x000\\xc9\" + // 0x30C83099: 0x000030C9\n\t\"0\\xcf0\\x99\\x00\\x000\\xd0\" + // 0x30CF3099: 0x000030D0\n\t\"0\\xcf0\\x9a\\x00\\x000\\xd1\" + // 0x30CF309A: 0x000030D1\n\t\"0\\xd20\\x99\\x00\\x000\\xd3\" + // 0x30D23099: 0x000030D3\n\t\"0\\xd20\\x9a\\x00\\x000\\xd4\" + // 0x30D2309A: 0x000030D4\n\t\"0\\xd50\\x99\\x00\\x000\\xd6\" + // 0x30D53099: 0x000030D6\n\t\"0\\xd50\\x9a\\x00\\x000\\xd7\" + // 0x30D5309A: 0x000030D7\n\t\"0\\xd80\\x99\\x00\\x000\\xd9\" + // 0x30D83099: 0x000030D9\n\t\"0\\xd80\\x9a\\x00\\x000\\xda\" + // 0x30D8309A: 0x000030DA\n\t\"0\\xdb0\\x99\\x00\\x000\\xdc\" + // 0x30DB3099: 0x000030DC\n\t\"0\\xdb0\\x9a\\x00\\x000\\xdd\" + // 0x30DB309A: 0x000030DD\n\t\"0\\xa60\\x99\\x00\\x000\\xf4\" + // 0x30A63099: 0x000030F4\n\t\"0\\xef0\\x99\\x00\\x000\\xf7\" + // 0x30EF3099: 0x000030F7\n\t\"0\\xf00\\x99\\x00\\x000\\xf8\" + // 0x30F03099: 0x000030F8\n\t\"0\\xf10\\x99\\x00\\x000\\xf9\" + // 0x30F13099: 0x000030F9\n\t\"0\\xf20\\x99\\x00\\x000\\xfa\" + // 0x30F23099: 0x000030FA\n\t\"0\\xfd0\\x99\\x00\\x000\\xfe\" + // 0x30FD3099: 0x000030FE\n\t\"\\x10\\x99\\x10\\xba\\x00\\x01\\x10\\x9a\" + // 0x109910BA: 0x0001109A\n\t\"\\x10\\x9b\\x10\\xba\\x00\\x01\\x10\\x9c\" + // 0x109B10BA: 0x0001109C\n\t\"\\x10\\xa5\\x10\\xba\\x00\\x01\\x10\\xab\" + // 0x10A510BA: 0x000110AB\n\t\"\\x111\\x11'\\x00\\x01\\x11.\" + // 0x11311127: 0x0001112E\n\t\"\\x112\\x11'\\x00\\x01\\x11/\" + // 0x11321127: 0x0001112F\n\t\"\\x13G\\x13>\\x00\\x01\\x13K\" + // 0x1347133E: 0x0001134B\n\t\"\\x13G\\x13W\\x00\\x01\\x13L\" + // 0x13471357: 0x0001134C\n\t\"\\x14\\xb9\\x14\\xba\\x00\\x01\\x14\\xbb\" + // 0x14B914BA: 0x000114BB\n\t\"\\x14\\xb9\\x14\\xb0\\x00\\x01\\x14\\xbc\" + // 0x14B914B0: 0x000114BC\n\t\"\\x14\\xb9\\x14\\xbd\\x00\\x01\\x14\\xbe\" + // 0x14B914BD: 0x000114BE\n\t\"\\x15\\xb8\\x15\\xaf\\x00\\x01\\x15\\xba\" + // 0x15B815AF: 0x000115BA\n\t\"\\x15\\xb9\\x15\\xaf\\x00\\x01\\x15\\xbb\" + // 0x15B915AF: 0x000115BB\n\t\"\"\n\t// Total size of tables: 53KB (54514 bytes)\n"
  },
  {
    "path": "vendor/golang.org/x/text/unicode/norm/tables9.0.0.go",
    "content": "// Code generated by running \"go generate\" in golang.org/x/text. DO NOT EDIT.\n\n// +build !go1.10\n\npackage norm\n\nimport \"sync\"\n\nconst (\n\t// Version is the Unicode edition from which the tables are derived.\n\tVersion = \"9.0.0\"\n\n\t// MaxTransformChunkSize indicates the maximum number of bytes that Transform\n\t// may need to write atomically for any Form. Making a destination buffer at\n\t// least this size ensures that Transform can always make progress and that\n\t// the user does not need to grow the buffer on an ErrShortDst.\n\tMaxTransformChunkSize = 35 + maxNonStarters*4\n)\n\nvar ccc = [55]uint8{\n\t0, 1, 7, 8, 9, 10, 11, 12,\n\t13, 14, 15, 16, 17, 18, 19, 20,\n\t21, 22, 23, 24, 25, 26, 27, 28,\n\t29, 30, 31, 32, 33, 34, 35, 36,\n\t84, 91, 103, 107, 118, 122, 129, 130,\n\t132, 202, 214, 216, 218, 220, 222, 224,\n\t226, 228, 230, 232, 233, 234, 240,\n}\n\nconst (\n\tfirstMulti            = 0x186D\n\tfirstCCC              = 0x2C9E\n\tendMulti              = 0x2F60\n\tfirstLeadingCCC       = 0x49AE\n\tfirstCCCZeroExcept    = 0x4A78\n\tfirstStarterWithNLead = 0x4A9F\n\tlastDecomp            = 0x4AA1\n\tmaxDecomp             = 0x8000\n)\n\n// decomps: 19105 bytes\nvar decomps = [...]byte{\n\t// Bytes 0 - 3f\n\t0x00, 0x41, 0x20, 0x41, 0x21, 0x41, 0x22, 0x41,\n\t0x23, 0x41, 0x24, 0x41, 0x25, 0x41, 0x26, 0x41,\n\t0x27, 0x41, 0x28, 0x41, 0x29, 0x41, 0x2A, 0x41,\n\t0x2B, 0x41, 0x2C, 0x41, 0x2D, 0x41, 0x2E, 0x41,\n\t0x2F, 0x41, 0x30, 0x41, 0x31, 0x41, 0x32, 0x41,\n\t0x33, 0x41, 0x34, 0x41, 0x35, 0x41, 0x36, 0x41,\n\t0x37, 0x41, 0x38, 0x41, 0x39, 0x41, 0x3A, 0x41,\n\t0x3B, 0x41, 0x3C, 0x41, 0x3D, 0x41, 0x3E, 0x41,\n\t// Bytes 40 - 7f\n\t0x3F, 0x41, 0x40, 0x41, 0x41, 0x41, 0x42, 0x41,\n\t0x43, 0x41, 0x44, 0x41, 0x45, 0x41, 0x46, 0x41,\n\t0x47, 0x41, 0x48, 0x41, 0x49, 0x41, 0x4A, 0x41,\n\t0x4B, 0x41, 0x4C, 0x41, 0x4D, 0x41, 0x4E, 0x41,\n\t0x4F, 0x41, 0x50, 0x41, 0x51, 0x41, 0x52, 0x41,\n\t0x53, 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41,\n\t0x57, 0x41, 0x58, 0x41, 0x59, 0x41, 0x5A, 0x41,\n\t0x5B, 0x41, 0x5C, 0x41, 0x5D, 0x41, 0x5E, 0x41,\n\t// Bytes 80 - bf\n\t0x5F, 0x41, 0x60, 0x41, 0x61, 0x41, 0x62, 0x41,\n\t0x63, 0x41, 0x64, 0x41, 0x65, 0x41, 0x66, 0x41,\n\t0x67, 0x41, 0x68, 0x41, 0x69, 0x41, 0x6A, 0x41,\n\t0x6B, 0x41, 0x6C, 0x41, 0x6D, 0x41, 0x6E, 0x41,\n\t0x6F, 0x41, 0x70, 0x41, 0x71, 0x41, 0x72, 0x41,\n\t0x73, 0x41, 0x74, 0x41, 0x75, 0x41, 0x76, 0x41,\n\t0x77, 0x41, 0x78, 0x41, 0x79, 0x41, 0x7A, 0x41,\n\t0x7B, 0x41, 0x7C, 0x41, 0x7D, 0x41, 0x7E, 0x42,\n\t// Bytes c0 - ff\n\t0xC2, 0xA2, 0x42, 0xC2, 0xA3, 0x42, 0xC2, 0xA5,\n\t0x42, 0xC2, 0xA6, 0x42, 0xC2, 0xAC, 0x42, 0xC2,\n\t0xB7, 0x42, 0xC3, 0x86, 0x42, 0xC3, 0xB0, 0x42,\n\t0xC4, 0xA6, 0x42, 0xC4, 0xA7, 0x42, 0xC4, 0xB1,\n\t0x42, 0xC5, 0x8B, 0x42, 0xC5, 0x93, 0x42, 0xC6,\n\t0x8E, 0x42, 0xC6, 0x90, 0x42, 0xC6, 0xAB, 0x42,\n\t0xC8, 0xA2, 0x42, 0xC8, 0xB7, 0x42, 0xC9, 0x90,\n\t0x42, 0xC9, 0x91, 0x42, 0xC9, 0x92, 0x42, 0xC9,\n\t// Bytes 100 - 13f\n\t0x94, 0x42, 0xC9, 0x95, 0x42, 0xC9, 0x99, 0x42,\n\t0xC9, 0x9B, 0x42, 0xC9, 0x9C, 0x42, 0xC9, 0x9F,\n\t0x42, 0xC9, 0xA1, 0x42, 0xC9, 0xA3, 0x42, 0xC9,\n\t0xA5, 0x42, 0xC9, 0xA6, 0x42, 0xC9, 0xA8, 0x42,\n\t0xC9, 0xA9, 0x42, 0xC9, 0xAA, 0x42, 0xC9, 0xAB,\n\t0x42, 0xC9, 0xAD, 0x42, 0xC9, 0xAF, 0x42, 0xC9,\n\t0xB0, 0x42, 0xC9, 0xB1, 0x42, 0xC9, 0xB2, 0x42,\n\t0xC9, 0xB3, 0x42, 0xC9, 0xB4, 0x42, 0xC9, 0xB5,\n\t// Bytes 140 - 17f\n\t0x42, 0xC9, 0xB8, 0x42, 0xC9, 0xB9, 0x42, 0xC9,\n\t0xBB, 0x42, 0xCA, 0x81, 0x42, 0xCA, 0x82, 0x42,\n\t0xCA, 0x83, 0x42, 0xCA, 0x89, 0x42, 0xCA, 0x8A,\n\t0x42, 0xCA, 0x8B, 0x42, 0xCA, 0x8C, 0x42, 0xCA,\n\t0x90, 0x42, 0xCA, 0x91, 0x42, 0xCA, 0x92, 0x42,\n\t0xCA, 0x95, 0x42, 0xCA, 0x9D, 0x42, 0xCA, 0x9F,\n\t0x42, 0xCA, 0xB9, 0x42, 0xCE, 0x91, 0x42, 0xCE,\n\t0x92, 0x42, 0xCE, 0x93, 0x42, 0xCE, 0x94, 0x42,\n\t// Bytes 180 - 1bf\n\t0xCE, 0x95, 0x42, 0xCE, 0x96, 0x42, 0xCE, 0x97,\n\t0x42, 0xCE, 0x98, 0x42, 0xCE, 0x99, 0x42, 0xCE,\n\t0x9A, 0x42, 0xCE, 0x9B, 0x42, 0xCE, 0x9C, 0x42,\n\t0xCE, 0x9D, 0x42, 0xCE, 0x9E, 0x42, 0xCE, 0x9F,\n\t0x42, 0xCE, 0xA0, 0x42, 0xCE, 0xA1, 0x42, 0xCE,\n\t0xA3, 0x42, 0xCE, 0xA4, 0x42, 0xCE, 0xA5, 0x42,\n\t0xCE, 0xA6, 0x42, 0xCE, 0xA7, 0x42, 0xCE, 0xA8,\n\t0x42, 0xCE, 0xA9, 0x42, 0xCE, 0xB1, 0x42, 0xCE,\n\t// Bytes 1c0 - 1ff\n\t0xB2, 0x42, 0xCE, 0xB3, 0x42, 0xCE, 0xB4, 0x42,\n\t0xCE, 0xB5, 0x42, 0xCE, 0xB6, 0x42, 0xCE, 0xB7,\n\t0x42, 0xCE, 0xB8, 0x42, 0xCE, 0xB9, 0x42, 0xCE,\n\t0xBA, 0x42, 0xCE, 0xBB, 0x42, 0xCE, 0xBC, 0x42,\n\t0xCE, 0xBD, 0x42, 0xCE, 0xBE, 0x42, 0xCE, 0xBF,\n\t0x42, 0xCF, 0x80, 0x42, 0xCF, 0x81, 0x42, 0xCF,\n\t0x82, 0x42, 0xCF, 0x83, 0x42, 0xCF, 0x84, 0x42,\n\t0xCF, 0x85, 0x42, 0xCF, 0x86, 0x42, 0xCF, 0x87,\n\t// Bytes 200 - 23f\n\t0x42, 0xCF, 0x88, 0x42, 0xCF, 0x89, 0x42, 0xCF,\n\t0x9C, 0x42, 0xCF, 0x9D, 0x42, 0xD0, 0xBD, 0x42,\n\t0xD1, 0x8A, 0x42, 0xD1, 0x8C, 0x42, 0xD7, 0x90,\n\t0x42, 0xD7, 0x91, 0x42, 0xD7, 0x92, 0x42, 0xD7,\n\t0x93, 0x42, 0xD7, 0x94, 0x42, 0xD7, 0x9B, 0x42,\n\t0xD7, 0x9C, 0x42, 0xD7, 0x9D, 0x42, 0xD7, 0xA2,\n\t0x42, 0xD7, 0xA8, 0x42, 0xD7, 0xAA, 0x42, 0xD8,\n\t0xA1, 0x42, 0xD8, 0xA7, 0x42, 0xD8, 0xA8, 0x42,\n\t// Bytes 240 - 27f\n\t0xD8, 0xA9, 0x42, 0xD8, 0xAA, 0x42, 0xD8, 0xAB,\n\t0x42, 0xD8, 0xAC, 0x42, 0xD8, 0xAD, 0x42, 0xD8,\n\t0xAE, 0x42, 0xD8, 0xAF, 0x42, 0xD8, 0xB0, 0x42,\n\t0xD8, 0xB1, 0x42, 0xD8, 0xB2, 0x42, 0xD8, 0xB3,\n\t0x42, 0xD8, 0xB4, 0x42, 0xD8, 0xB5, 0x42, 0xD8,\n\t0xB6, 0x42, 0xD8, 0xB7, 0x42, 0xD8, 0xB8, 0x42,\n\t0xD8, 0xB9, 0x42, 0xD8, 0xBA, 0x42, 0xD9, 0x81,\n\t0x42, 0xD9, 0x82, 0x42, 0xD9, 0x83, 0x42, 0xD9,\n\t// Bytes 280 - 2bf\n\t0x84, 0x42, 0xD9, 0x85, 0x42, 0xD9, 0x86, 0x42,\n\t0xD9, 0x87, 0x42, 0xD9, 0x88, 0x42, 0xD9, 0x89,\n\t0x42, 0xD9, 0x8A, 0x42, 0xD9, 0xAE, 0x42, 0xD9,\n\t0xAF, 0x42, 0xD9, 0xB1, 0x42, 0xD9, 0xB9, 0x42,\n\t0xD9, 0xBA, 0x42, 0xD9, 0xBB, 0x42, 0xD9, 0xBE,\n\t0x42, 0xD9, 0xBF, 0x42, 0xDA, 0x80, 0x42, 0xDA,\n\t0x83, 0x42, 0xDA, 0x84, 0x42, 0xDA, 0x86, 0x42,\n\t0xDA, 0x87, 0x42, 0xDA, 0x88, 0x42, 0xDA, 0x8C,\n\t// Bytes 2c0 - 2ff\n\t0x42, 0xDA, 0x8D, 0x42, 0xDA, 0x8E, 0x42, 0xDA,\n\t0x91, 0x42, 0xDA, 0x98, 0x42, 0xDA, 0xA1, 0x42,\n\t0xDA, 0xA4, 0x42, 0xDA, 0xA6, 0x42, 0xDA, 0xA9,\n\t0x42, 0xDA, 0xAD, 0x42, 0xDA, 0xAF, 0x42, 0xDA,\n\t0xB1, 0x42, 0xDA, 0xB3, 0x42, 0xDA, 0xBA, 0x42,\n\t0xDA, 0xBB, 0x42, 0xDA, 0xBE, 0x42, 0xDB, 0x81,\n\t0x42, 0xDB, 0x85, 0x42, 0xDB, 0x86, 0x42, 0xDB,\n\t0x87, 0x42, 0xDB, 0x88, 0x42, 0xDB, 0x89, 0x42,\n\t// Bytes 300 - 33f\n\t0xDB, 0x8B, 0x42, 0xDB, 0x8C, 0x42, 0xDB, 0x90,\n\t0x42, 0xDB, 0x92, 0x43, 0xE0, 0xBC, 0x8B, 0x43,\n\t0xE1, 0x83, 0x9C, 0x43, 0xE1, 0x84, 0x80, 0x43,\n\t0xE1, 0x84, 0x81, 0x43, 0xE1, 0x84, 0x82, 0x43,\n\t0xE1, 0x84, 0x83, 0x43, 0xE1, 0x84, 0x84, 0x43,\n\t0xE1, 0x84, 0x85, 0x43, 0xE1, 0x84, 0x86, 0x43,\n\t0xE1, 0x84, 0x87, 0x43, 0xE1, 0x84, 0x88, 0x43,\n\t0xE1, 0x84, 0x89, 0x43, 0xE1, 0x84, 0x8A, 0x43,\n\t// Bytes 340 - 37f\n\t0xE1, 0x84, 0x8B, 0x43, 0xE1, 0x84, 0x8C, 0x43,\n\t0xE1, 0x84, 0x8D, 0x43, 0xE1, 0x84, 0x8E, 0x43,\n\t0xE1, 0x84, 0x8F, 0x43, 0xE1, 0x84, 0x90, 0x43,\n\t0xE1, 0x84, 0x91, 0x43, 0xE1, 0x84, 0x92, 0x43,\n\t0xE1, 0x84, 0x94, 0x43, 0xE1, 0x84, 0x95, 0x43,\n\t0xE1, 0x84, 0x9A, 0x43, 0xE1, 0x84, 0x9C, 0x43,\n\t0xE1, 0x84, 0x9D, 0x43, 0xE1, 0x84, 0x9E, 0x43,\n\t0xE1, 0x84, 0xA0, 0x43, 0xE1, 0x84, 0xA1, 0x43,\n\t// Bytes 380 - 3bf\n\t0xE1, 0x84, 0xA2, 0x43, 0xE1, 0x84, 0xA3, 0x43,\n\t0xE1, 0x84, 0xA7, 0x43, 0xE1, 0x84, 0xA9, 0x43,\n\t0xE1, 0x84, 0xAB, 0x43, 0xE1, 0x84, 0xAC, 0x43,\n\t0xE1, 0x84, 0xAD, 0x43, 0xE1, 0x84, 0xAE, 0x43,\n\t0xE1, 0x84, 0xAF, 0x43, 0xE1, 0x84, 0xB2, 0x43,\n\t0xE1, 0x84, 0xB6, 0x43, 0xE1, 0x85, 0x80, 0x43,\n\t0xE1, 0x85, 0x87, 0x43, 0xE1, 0x85, 0x8C, 0x43,\n\t0xE1, 0x85, 0x97, 0x43, 0xE1, 0x85, 0x98, 0x43,\n\t// Bytes 3c0 - 3ff\n\t0xE1, 0x85, 0x99, 0x43, 0xE1, 0x85, 0xA0, 0x43,\n\t0xE1, 0x86, 0x84, 0x43, 0xE1, 0x86, 0x85, 0x43,\n\t0xE1, 0x86, 0x88, 0x43, 0xE1, 0x86, 0x91, 0x43,\n\t0xE1, 0x86, 0x92, 0x43, 0xE1, 0x86, 0x94, 0x43,\n\t0xE1, 0x86, 0x9E, 0x43, 0xE1, 0x86, 0xA1, 0x43,\n\t0xE1, 0x87, 0x87, 0x43, 0xE1, 0x87, 0x88, 0x43,\n\t0xE1, 0x87, 0x8C, 0x43, 0xE1, 0x87, 0x8E, 0x43,\n\t0xE1, 0x87, 0x93, 0x43, 0xE1, 0x87, 0x97, 0x43,\n\t// Bytes 400 - 43f\n\t0xE1, 0x87, 0x99, 0x43, 0xE1, 0x87, 0x9D, 0x43,\n\t0xE1, 0x87, 0x9F, 0x43, 0xE1, 0x87, 0xB1, 0x43,\n\t0xE1, 0x87, 0xB2, 0x43, 0xE1, 0xB4, 0x82, 0x43,\n\t0xE1, 0xB4, 0x96, 0x43, 0xE1, 0xB4, 0x97, 0x43,\n\t0xE1, 0xB4, 0x9C, 0x43, 0xE1, 0xB4, 0x9D, 0x43,\n\t0xE1, 0xB4, 0xA5, 0x43, 0xE1, 0xB5, 0xBB, 0x43,\n\t0xE1, 0xB6, 0x85, 0x43, 0xE2, 0x80, 0x82, 0x43,\n\t0xE2, 0x80, 0x83, 0x43, 0xE2, 0x80, 0x90, 0x43,\n\t// Bytes 440 - 47f\n\t0xE2, 0x80, 0x93, 0x43, 0xE2, 0x80, 0x94, 0x43,\n\t0xE2, 0x82, 0xA9, 0x43, 0xE2, 0x86, 0x90, 0x43,\n\t0xE2, 0x86, 0x91, 0x43, 0xE2, 0x86, 0x92, 0x43,\n\t0xE2, 0x86, 0x93, 0x43, 0xE2, 0x88, 0x82, 0x43,\n\t0xE2, 0x88, 0x87, 0x43, 0xE2, 0x88, 0x91, 0x43,\n\t0xE2, 0x88, 0x92, 0x43, 0xE2, 0x94, 0x82, 0x43,\n\t0xE2, 0x96, 0xA0, 0x43, 0xE2, 0x97, 0x8B, 0x43,\n\t0xE2, 0xA6, 0x85, 0x43, 0xE2, 0xA6, 0x86, 0x43,\n\t// Bytes 480 - 4bf\n\t0xE2, 0xB5, 0xA1, 0x43, 0xE3, 0x80, 0x81, 0x43,\n\t0xE3, 0x80, 0x82, 0x43, 0xE3, 0x80, 0x88, 0x43,\n\t0xE3, 0x80, 0x89, 0x43, 0xE3, 0x80, 0x8A, 0x43,\n\t0xE3, 0x80, 0x8B, 0x43, 0xE3, 0x80, 0x8C, 0x43,\n\t0xE3, 0x80, 0x8D, 0x43, 0xE3, 0x80, 0x8E, 0x43,\n\t0xE3, 0x80, 0x8F, 0x43, 0xE3, 0x80, 0x90, 0x43,\n\t0xE3, 0x80, 0x91, 0x43, 0xE3, 0x80, 0x92, 0x43,\n\t0xE3, 0x80, 0x94, 0x43, 0xE3, 0x80, 0x95, 0x43,\n\t// Bytes 4c0 - 4ff\n\t0xE3, 0x80, 0x96, 0x43, 0xE3, 0x80, 0x97, 0x43,\n\t0xE3, 0x82, 0xA1, 0x43, 0xE3, 0x82, 0xA2, 0x43,\n\t0xE3, 0x82, 0xA3, 0x43, 0xE3, 0x82, 0xA4, 0x43,\n\t0xE3, 0x82, 0xA5, 0x43, 0xE3, 0x82, 0xA6, 0x43,\n\t0xE3, 0x82, 0xA7, 0x43, 0xE3, 0x82, 0xA8, 0x43,\n\t0xE3, 0x82, 0xA9, 0x43, 0xE3, 0x82, 0xAA, 0x43,\n\t0xE3, 0x82, 0xAB, 0x43, 0xE3, 0x82, 0xAD, 0x43,\n\t0xE3, 0x82, 0xAF, 0x43, 0xE3, 0x82, 0xB1, 0x43,\n\t// Bytes 500 - 53f\n\t0xE3, 0x82, 0xB3, 0x43, 0xE3, 0x82, 0xB5, 0x43,\n\t0xE3, 0x82, 0xB7, 0x43, 0xE3, 0x82, 0xB9, 0x43,\n\t0xE3, 0x82, 0xBB, 0x43, 0xE3, 0x82, 0xBD, 0x43,\n\t0xE3, 0x82, 0xBF, 0x43, 0xE3, 0x83, 0x81, 0x43,\n\t0xE3, 0x83, 0x83, 0x43, 0xE3, 0x83, 0x84, 0x43,\n\t0xE3, 0x83, 0x86, 0x43, 0xE3, 0x83, 0x88, 0x43,\n\t0xE3, 0x83, 0x8A, 0x43, 0xE3, 0x83, 0x8B, 0x43,\n\t0xE3, 0x83, 0x8C, 0x43, 0xE3, 0x83, 0x8D, 0x43,\n\t// Bytes 540 - 57f\n\t0xE3, 0x83, 0x8E, 0x43, 0xE3, 0x83, 0x8F, 0x43,\n\t0xE3, 0x83, 0x92, 0x43, 0xE3, 0x83, 0x95, 0x43,\n\t0xE3, 0x83, 0x98, 0x43, 0xE3, 0x83, 0x9B, 0x43,\n\t0xE3, 0x83, 0x9E, 0x43, 0xE3, 0x83, 0x9F, 0x43,\n\t0xE3, 0x83, 0xA0, 0x43, 0xE3, 0x83, 0xA1, 0x43,\n\t0xE3, 0x83, 0xA2, 0x43, 0xE3, 0x83, 0xA3, 0x43,\n\t0xE3, 0x83, 0xA4, 0x43, 0xE3, 0x83, 0xA5, 0x43,\n\t0xE3, 0x83, 0xA6, 0x43, 0xE3, 0x83, 0xA7, 0x43,\n\t// Bytes 580 - 5bf\n\t0xE3, 0x83, 0xA8, 0x43, 0xE3, 0x83, 0xA9, 0x43,\n\t0xE3, 0x83, 0xAA, 0x43, 0xE3, 0x83, 0xAB, 0x43,\n\t0xE3, 0x83, 0xAC, 0x43, 0xE3, 0x83, 0xAD, 0x43,\n\t0xE3, 0x83, 0xAF, 0x43, 0xE3, 0x83, 0xB0, 0x43,\n\t0xE3, 0x83, 0xB1, 0x43, 0xE3, 0x83, 0xB2, 0x43,\n\t0xE3, 0x83, 0xB3, 0x43, 0xE3, 0x83, 0xBB, 0x43,\n\t0xE3, 0x83, 0xBC, 0x43, 0xE3, 0x92, 0x9E, 0x43,\n\t0xE3, 0x92, 0xB9, 0x43, 0xE3, 0x92, 0xBB, 0x43,\n\t// Bytes 5c0 - 5ff\n\t0xE3, 0x93, 0x9F, 0x43, 0xE3, 0x94, 0x95, 0x43,\n\t0xE3, 0x9B, 0xAE, 0x43, 0xE3, 0x9B, 0xBC, 0x43,\n\t0xE3, 0x9E, 0x81, 0x43, 0xE3, 0xA0, 0xAF, 0x43,\n\t0xE3, 0xA1, 0xA2, 0x43, 0xE3, 0xA1, 0xBC, 0x43,\n\t0xE3, 0xA3, 0x87, 0x43, 0xE3, 0xA3, 0xA3, 0x43,\n\t0xE3, 0xA4, 0x9C, 0x43, 0xE3, 0xA4, 0xBA, 0x43,\n\t0xE3, 0xA8, 0xAE, 0x43, 0xE3, 0xA9, 0xAC, 0x43,\n\t0xE3, 0xAB, 0xA4, 0x43, 0xE3, 0xAC, 0x88, 0x43,\n\t// Bytes 600 - 63f\n\t0xE3, 0xAC, 0x99, 0x43, 0xE3, 0xAD, 0x89, 0x43,\n\t0xE3, 0xAE, 0x9D, 0x43, 0xE3, 0xB0, 0x98, 0x43,\n\t0xE3, 0xB1, 0x8E, 0x43, 0xE3, 0xB4, 0xB3, 0x43,\n\t0xE3, 0xB6, 0x96, 0x43, 0xE3, 0xBA, 0xAC, 0x43,\n\t0xE3, 0xBA, 0xB8, 0x43, 0xE3, 0xBC, 0x9B, 0x43,\n\t0xE3, 0xBF, 0xBC, 0x43, 0xE4, 0x80, 0x88, 0x43,\n\t0xE4, 0x80, 0x98, 0x43, 0xE4, 0x80, 0xB9, 0x43,\n\t0xE4, 0x81, 0x86, 0x43, 0xE4, 0x82, 0x96, 0x43,\n\t// Bytes 640 - 67f\n\t0xE4, 0x83, 0xA3, 0x43, 0xE4, 0x84, 0xAF, 0x43,\n\t0xE4, 0x88, 0x82, 0x43, 0xE4, 0x88, 0xA7, 0x43,\n\t0xE4, 0x8A, 0xA0, 0x43, 0xE4, 0x8C, 0x81, 0x43,\n\t0xE4, 0x8C, 0xB4, 0x43, 0xE4, 0x8D, 0x99, 0x43,\n\t0xE4, 0x8F, 0x95, 0x43, 0xE4, 0x8F, 0x99, 0x43,\n\t0xE4, 0x90, 0x8B, 0x43, 0xE4, 0x91, 0xAB, 0x43,\n\t0xE4, 0x94, 0xAB, 0x43, 0xE4, 0x95, 0x9D, 0x43,\n\t0xE4, 0x95, 0xA1, 0x43, 0xE4, 0x95, 0xAB, 0x43,\n\t// Bytes 680 - 6bf\n\t0xE4, 0x97, 0x97, 0x43, 0xE4, 0x97, 0xB9, 0x43,\n\t0xE4, 0x98, 0xB5, 0x43, 0xE4, 0x9A, 0xBE, 0x43,\n\t0xE4, 0x9B, 0x87, 0x43, 0xE4, 0xA6, 0x95, 0x43,\n\t0xE4, 0xA7, 0xA6, 0x43, 0xE4, 0xA9, 0xAE, 0x43,\n\t0xE4, 0xA9, 0xB6, 0x43, 0xE4, 0xAA, 0xB2, 0x43,\n\t0xE4, 0xAC, 0xB3, 0x43, 0xE4, 0xAF, 0x8E, 0x43,\n\t0xE4, 0xB3, 0x8E, 0x43, 0xE4, 0xB3, 0xAD, 0x43,\n\t0xE4, 0xB3, 0xB8, 0x43, 0xE4, 0xB5, 0x96, 0x43,\n\t// Bytes 6c0 - 6ff\n\t0xE4, 0xB8, 0x80, 0x43, 0xE4, 0xB8, 0x81, 0x43,\n\t0xE4, 0xB8, 0x83, 0x43, 0xE4, 0xB8, 0x89, 0x43,\n\t0xE4, 0xB8, 0x8A, 0x43, 0xE4, 0xB8, 0x8B, 0x43,\n\t0xE4, 0xB8, 0x8D, 0x43, 0xE4, 0xB8, 0x99, 0x43,\n\t0xE4, 0xB8, 0xA6, 0x43, 0xE4, 0xB8, 0xA8, 0x43,\n\t0xE4, 0xB8, 0xAD, 0x43, 0xE4, 0xB8, 0xB2, 0x43,\n\t0xE4, 0xB8, 0xB6, 0x43, 0xE4, 0xB8, 0xB8, 0x43,\n\t0xE4, 0xB8, 0xB9, 0x43, 0xE4, 0xB8, 0xBD, 0x43,\n\t// Bytes 700 - 73f\n\t0xE4, 0xB8, 0xBF, 0x43, 0xE4, 0xB9, 0x81, 0x43,\n\t0xE4, 0xB9, 0x99, 0x43, 0xE4, 0xB9, 0x9D, 0x43,\n\t0xE4, 0xBA, 0x82, 0x43, 0xE4, 0xBA, 0x85, 0x43,\n\t0xE4, 0xBA, 0x86, 0x43, 0xE4, 0xBA, 0x8C, 0x43,\n\t0xE4, 0xBA, 0x94, 0x43, 0xE4, 0xBA, 0xA0, 0x43,\n\t0xE4, 0xBA, 0xA4, 0x43, 0xE4, 0xBA, 0xAE, 0x43,\n\t0xE4, 0xBA, 0xBA, 0x43, 0xE4, 0xBB, 0x80, 0x43,\n\t0xE4, 0xBB, 0x8C, 0x43, 0xE4, 0xBB, 0xA4, 0x43,\n\t// Bytes 740 - 77f\n\t0xE4, 0xBC, 0x81, 0x43, 0xE4, 0xBC, 0x91, 0x43,\n\t0xE4, 0xBD, 0xA0, 0x43, 0xE4, 0xBE, 0x80, 0x43,\n\t0xE4, 0xBE, 0x86, 0x43, 0xE4, 0xBE, 0x8B, 0x43,\n\t0xE4, 0xBE, 0xAE, 0x43, 0xE4, 0xBE, 0xBB, 0x43,\n\t0xE4, 0xBE, 0xBF, 0x43, 0xE5, 0x80, 0x82, 0x43,\n\t0xE5, 0x80, 0xAB, 0x43, 0xE5, 0x81, 0xBA, 0x43,\n\t0xE5, 0x82, 0x99, 0x43, 0xE5, 0x83, 0x8F, 0x43,\n\t0xE5, 0x83, 0x9A, 0x43, 0xE5, 0x83, 0xA7, 0x43,\n\t// Bytes 780 - 7bf\n\t0xE5, 0x84, 0xAA, 0x43, 0xE5, 0x84, 0xBF, 0x43,\n\t0xE5, 0x85, 0x80, 0x43, 0xE5, 0x85, 0x85, 0x43,\n\t0xE5, 0x85, 0x8D, 0x43, 0xE5, 0x85, 0x94, 0x43,\n\t0xE5, 0x85, 0xA4, 0x43, 0xE5, 0x85, 0xA5, 0x43,\n\t0xE5, 0x85, 0xA7, 0x43, 0xE5, 0x85, 0xA8, 0x43,\n\t0xE5, 0x85, 0xA9, 0x43, 0xE5, 0x85, 0xAB, 0x43,\n\t0xE5, 0x85, 0xAD, 0x43, 0xE5, 0x85, 0xB7, 0x43,\n\t0xE5, 0x86, 0x80, 0x43, 0xE5, 0x86, 0x82, 0x43,\n\t// Bytes 7c0 - 7ff\n\t0xE5, 0x86, 0x8D, 0x43, 0xE5, 0x86, 0x92, 0x43,\n\t0xE5, 0x86, 0x95, 0x43, 0xE5, 0x86, 0x96, 0x43,\n\t0xE5, 0x86, 0x97, 0x43, 0xE5, 0x86, 0x99, 0x43,\n\t0xE5, 0x86, 0xA4, 0x43, 0xE5, 0x86, 0xAB, 0x43,\n\t0xE5, 0x86, 0xAC, 0x43, 0xE5, 0x86, 0xB5, 0x43,\n\t0xE5, 0x86, 0xB7, 0x43, 0xE5, 0x87, 0x89, 0x43,\n\t0xE5, 0x87, 0x8C, 0x43, 0xE5, 0x87, 0x9C, 0x43,\n\t0xE5, 0x87, 0x9E, 0x43, 0xE5, 0x87, 0xA0, 0x43,\n\t// Bytes 800 - 83f\n\t0xE5, 0x87, 0xB5, 0x43, 0xE5, 0x88, 0x80, 0x43,\n\t0xE5, 0x88, 0x83, 0x43, 0xE5, 0x88, 0x87, 0x43,\n\t0xE5, 0x88, 0x97, 0x43, 0xE5, 0x88, 0x9D, 0x43,\n\t0xE5, 0x88, 0xA9, 0x43, 0xE5, 0x88, 0xBA, 0x43,\n\t0xE5, 0x88, 0xBB, 0x43, 0xE5, 0x89, 0x86, 0x43,\n\t0xE5, 0x89, 0x8D, 0x43, 0xE5, 0x89, 0xB2, 0x43,\n\t0xE5, 0x89, 0xB7, 0x43, 0xE5, 0x8A, 0x89, 0x43,\n\t0xE5, 0x8A, 0x9B, 0x43, 0xE5, 0x8A, 0xA3, 0x43,\n\t// Bytes 840 - 87f\n\t0xE5, 0x8A, 0xB3, 0x43, 0xE5, 0x8A, 0xB4, 0x43,\n\t0xE5, 0x8B, 0x87, 0x43, 0xE5, 0x8B, 0x89, 0x43,\n\t0xE5, 0x8B, 0x92, 0x43, 0xE5, 0x8B, 0x9E, 0x43,\n\t0xE5, 0x8B, 0xA4, 0x43, 0xE5, 0x8B, 0xB5, 0x43,\n\t0xE5, 0x8B, 0xB9, 0x43, 0xE5, 0x8B, 0xBA, 0x43,\n\t0xE5, 0x8C, 0x85, 0x43, 0xE5, 0x8C, 0x86, 0x43,\n\t0xE5, 0x8C, 0x95, 0x43, 0xE5, 0x8C, 0x97, 0x43,\n\t0xE5, 0x8C, 0x9A, 0x43, 0xE5, 0x8C, 0xB8, 0x43,\n\t// Bytes 880 - 8bf\n\t0xE5, 0x8C, 0xBB, 0x43, 0xE5, 0x8C, 0xBF, 0x43,\n\t0xE5, 0x8D, 0x81, 0x43, 0xE5, 0x8D, 0x84, 0x43,\n\t0xE5, 0x8D, 0x85, 0x43, 0xE5, 0x8D, 0x89, 0x43,\n\t0xE5, 0x8D, 0x91, 0x43, 0xE5, 0x8D, 0x94, 0x43,\n\t0xE5, 0x8D, 0x9A, 0x43, 0xE5, 0x8D, 0x9C, 0x43,\n\t0xE5, 0x8D, 0xA9, 0x43, 0xE5, 0x8D, 0xB0, 0x43,\n\t0xE5, 0x8D, 0xB3, 0x43, 0xE5, 0x8D, 0xB5, 0x43,\n\t0xE5, 0x8D, 0xBD, 0x43, 0xE5, 0x8D, 0xBF, 0x43,\n\t// Bytes 8c0 - 8ff\n\t0xE5, 0x8E, 0x82, 0x43, 0xE5, 0x8E, 0xB6, 0x43,\n\t0xE5, 0x8F, 0x83, 0x43, 0xE5, 0x8F, 0x88, 0x43,\n\t0xE5, 0x8F, 0x8A, 0x43, 0xE5, 0x8F, 0x8C, 0x43,\n\t0xE5, 0x8F, 0x9F, 0x43, 0xE5, 0x8F, 0xA3, 0x43,\n\t0xE5, 0x8F, 0xA5, 0x43, 0xE5, 0x8F, 0xAB, 0x43,\n\t0xE5, 0x8F, 0xAF, 0x43, 0xE5, 0x8F, 0xB1, 0x43,\n\t0xE5, 0x8F, 0xB3, 0x43, 0xE5, 0x90, 0x86, 0x43,\n\t0xE5, 0x90, 0x88, 0x43, 0xE5, 0x90, 0x8D, 0x43,\n\t// Bytes 900 - 93f\n\t0xE5, 0x90, 0x8F, 0x43, 0xE5, 0x90, 0x9D, 0x43,\n\t0xE5, 0x90, 0xB8, 0x43, 0xE5, 0x90, 0xB9, 0x43,\n\t0xE5, 0x91, 0x82, 0x43, 0xE5, 0x91, 0x88, 0x43,\n\t0xE5, 0x91, 0xA8, 0x43, 0xE5, 0x92, 0x9E, 0x43,\n\t0xE5, 0x92, 0xA2, 0x43, 0xE5, 0x92, 0xBD, 0x43,\n\t0xE5, 0x93, 0xB6, 0x43, 0xE5, 0x94, 0x90, 0x43,\n\t0xE5, 0x95, 0x8F, 0x43, 0xE5, 0x95, 0x93, 0x43,\n\t0xE5, 0x95, 0x95, 0x43, 0xE5, 0x95, 0xA3, 0x43,\n\t// Bytes 940 - 97f\n\t0xE5, 0x96, 0x84, 0x43, 0xE5, 0x96, 0x87, 0x43,\n\t0xE5, 0x96, 0x99, 0x43, 0xE5, 0x96, 0x9D, 0x43,\n\t0xE5, 0x96, 0xAB, 0x43, 0xE5, 0x96, 0xB3, 0x43,\n\t0xE5, 0x96, 0xB6, 0x43, 0xE5, 0x97, 0x80, 0x43,\n\t0xE5, 0x97, 0x82, 0x43, 0xE5, 0x97, 0xA2, 0x43,\n\t0xE5, 0x98, 0x86, 0x43, 0xE5, 0x99, 0x91, 0x43,\n\t0xE5, 0x99, 0xA8, 0x43, 0xE5, 0x99, 0xB4, 0x43,\n\t0xE5, 0x9B, 0x97, 0x43, 0xE5, 0x9B, 0x9B, 0x43,\n\t// Bytes 980 - 9bf\n\t0xE5, 0x9B, 0xB9, 0x43, 0xE5, 0x9C, 0x96, 0x43,\n\t0xE5, 0x9C, 0x97, 0x43, 0xE5, 0x9C, 0x9F, 0x43,\n\t0xE5, 0x9C, 0xB0, 0x43, 0xE5, 0x9E, 0x8B, 0x43,\n\t0xE5, 0x9F, 0x8E, 0x43, 0xE5, 0x9F, 0xB4, 0x43,\n\t0xE5, 0xA0, 0x8D, 0x43, 0xE5, 0xA0, 0xB1, 0x43,\n\t0xE5, 0xA0, 0xB2, 0x43, 0xE5, 0xA1, 0x80, 0x43,\n\t0xE5, 0xA1, 0x9A, 0x43, 0xE5, 0xA1, 0x9E, 0x43,\n\t0xE5, 0xA2, 0xA8, 0x43, 0xE5, 0xA2, 0xAC, 0x43,\n\t// Bytes 9c0 - 9ff\n\t0xE5, 0xA2, 0xB3, 0x43, 0xE5, 0xA3, 0x98, 0x43,\n\t0xE5, 0xA3, 0x9F, 0x43, 0xE5, 0xA3, 0xAB, 0x43,\n\t0xE5, 0xA3, 0xAE, 0x43, 0xE5, 0xA3, 0xB0, 0x43,\n\t0xE5, 0xA3, 0xB2, 0x43, 0xE5, 0xA3, 0xB7, 0x43,\n\t0xE5, 0xA4, 0x82, 0x43, 0xE5, 0xA4, 0x86, 0x43,\n\t0xE5, 0xA4, 0x8A, 0x43, 0xE5, 0xA4, 0x95, 0x43,\n\t0xE5, 0xA4, 0x9A, 0x43, 0xE5, 0xA4, 0x9C, 0x43,\n\t0xE5, 0xA4, 0xA2, 0x43, 0xE5, 0xA4, 0xA7, 0x43,\n\t// Bytes a00 - a3f\n\t0xE5, 0xA4, 0xA9, 0x43, 0xE5, 0xA5, 0x84, 0x43,\n\t0xE5, 0xA5, 0x88, 0x43, 0xE5, 0xA5, 0x91, 0x43,\n\t0xE5, 0xA5, 0x94, 0x43, 0xE5, 0xA5, 0xA2, 0x43,\n\t0xE5, 0xA5, 0xB3, 0x43, 0xE5, 0xA7, 0x98, 0x43,\n\t0xE5, 0xA7, 0xAC, 0x43, 0xE5, 0xA8, 0x9B, 0x43,\n\t0xE5, 0xA8, 0xA7, 0x43, 0xE5, 0xA9, 0xA2, 0x43,\n\t0xE5, 0xA9, 0xA6, 0x43, 0xE5, 0xAA, 0xB5, 0x43,\n\t0xE5, 0xAC, 0x88, 0x43, 0xE5, 0xAC, 0xA8, 0x43,\n\t// Bytes a40 - a7f\n\t0xE5, 0xAC, 0xBE, 0x43, 0xE5, 0xAD, 0x90, 0x43,\n\t0xE5, 0xAD, 0x97, 0x43, 0xE5, 0xAD, 0xA6, 0x43,\n\t0xE5, 0xAE, 0x80, 0x43, 0xE5, 0xAE, 0x85, 0x43,\n\t0xE5, 0xAE, 0x97, 0x43, 0xE5, 0xAF, 0x83, 0x43,\n\t0xE5, 0xAF, 0x98, 0x43, 0xE5, 0xAF, 0xA7, 0x43,\n\t0xE5, 0xAF, 0xAE, 0x43, 0xE5, 0xAF, 0xB3, 0x43,\n\t0xE5, 0xAF, 0xB8, 0x43, 0xE5, 0xAF, 0xBF, 0x43,\n\t0xE5, 0xB0, 0x86, 0x43, 0xE5, 0xB0, 0x8F, 0x43,\n\t// Bytes a80 - abf\n\t0xE5, 0xB0, 0xA2, 0x43, 0xE5, 0xB0, 0xB8, 0x43,\n\t0xE5, 0xB0, 0xBF, 0x43, 0xE5, 0xB1, 0xA0, 0x43,\n\t0xE5, 0xB1, 0xA2, 0x43, 0xE5, 0xB1, 0xA4, 0x43,\n\t0xE5, 0xB1, 0xA5, 0x43, 0xE5, 0xB1, 0xAE, 0x43,\n\t0xE5, 0xB1, 0xB1, 0x43, 0xE5, 0xB2, 0x8D, 0x43,\n\t0xE5, 0xB3, 0x80, 0x43, 0xE5, 0xB4, 0x99, 0x43,\n\t0xE5, 0xB5, 0x83, 0x43, 0xE5, 0xB5, 0x90, 0x43,\n\t0xE5, 0xB5, 0xAB, 0x43, 0xE5, 0xB5, 0xAE, 0x43,\n\t// Bytes ac0 - aff\n\t0xE5, 0xB5, 0xBC, 0x43, 0xE5, 0xB6, 0xB2, 0x43,\n\t0xE5, 0xB6, 0xBA, 0x43, 0xE5, 0xB7, 0x9B, 0x43,\n\t0xE5, 0xB7, 0xA1, 0x43, 0xE5, 0xB7, 0xA2, 0x43,\n\t0xE5, 0xB7, 0xA5, 0x43, 0xE5, 0xB7, 0xA6, 0x43,\n\t0xE5, 0xB7, 0xB1, 0x43, 0xE5, 0xB7, 0xBD, 0x43,\n\t0xE5, 0xB7, 0xBE, 0x43, 0xE5, 0xB8, 0xA8, 0x43,\n\t0xE5, 0xB8, 0xBD, 0x43, 0xE5, 0xB9, 0xA9, 0x43,\n\t0xE5, 0xB9, 0xB2, 0x43, 0xE5, 0xB9, 0xB4, 0x43,\n\t// Bytes b00 - b3f\n\t0xE5, 0xB9, 0xBA, 0x43, 0xE5, 0xB9, 0xBC, 0x43,\n\t0xE5, 0xB9, 0xBF, 0x43, 0xE5, 0xBA, 0xA6, 0x43,\n\t0xE5, 0xBA, 0xB0, 0x43, 0xE5, 0xBA, 0xB3, 0x43,\n\t0xE5, 0xBA, 0xB6, 0x43, 0xE5, 0xBB, 0x89, 0x43,\n\t0xE5, 0xBB, 0x8A, 0x43, 0xE5, 0xBB, 0x92, 0x43,\n\t0xE5, 0xBB, 0x93, 0x43, 0xE5, 0xBB, 0x99, 0x43,\n\t0xE5, 0xBB, 0xAC, 0x43, 0xE5, 0xBB, 0xB4, 0x43,\n\t0xE5, 0xBB, 0xBE, 0x43, 0xE5, 0xBC, 0x84, 0x43,\n\t// Bytes b40 - b7f\n\t0xE5, 0xBC, 0x8B, 0x43, 0xE5, 0xBC, 0x93, 0x43,\n\t0xE5, 0xBC, 0xA2, 0x43, 0xE5, 0xBD, 0x90, 0x43,\n\t0xE5, 0xBD, 0x93, 0x43, 0xE5, 0xBD, 0xA1, 0x43,\n\t0xE5, 0xBD, 0xA2, 0x43, 0xE5, 0xBD, 0xA9, 0x43,\n\t0xE5, 0xBD, 0xAB, 0x43, 0xE5, 0xBD, 0xB3, 0x43,\n\t0xE5, 0xBE, 0x8B, 0x43, 0xE5, 0xBE, 0x8C, 0x43,\n\t0xE5, 0xBE, 0x97, 0x43, 0xE5, 0xBE, 0x9A, 0x43,\n\t0xE5, 0xBE, 0xA9, 0x43, 0xE5, 0xBE, 0xAD, 0x43,\n\t// Bytes b80 - bbf\n\t0xE5, 0xBF, 0x83, 0x43, 0xE5, 0xBF, 0x8D, 0x43,\n\t0xE5, 0xBF, 0x97, 0x43, 0xE5, 0xBF, 0xB5, 0x43,\n\t0xE5, 0xBF, 0xB9, 0x43, 0xE6, 0x80, 0x92, 0x43,\n\t0xE6, 0x80, 0x9C, 0x43, 0xE6, 0x81, 0xB5, 0x43,\n\t0xE6, 0x82, 0x81, 0x43, 0xE6, 0x82, 0x94, 0x43,\n\t0xE6, 0x83, 0x87, 0x43, 0xE6, 0x83, 0x98, 0x43,\n\t0xE6, 0x83, 0xA1, 0x43, 0xE6, 0x84, 0x88, 0x43,\n\t0xE6, 0x85, 0x84, 0x43, 0xE6, 0x85, 0x88, 0x43,\n\t// Bytes bc0 - bff\n\t0xE6, 0x85, 0x8C, 0x43, 0xE6, 0x85, 0x8E, 0x43,\n\t0xE6, 0x85, 0xA0, 0x43, 0xE6, 0x85, 0xA8, 0x43,\n\t0xE6, 0x85, 0xBA, 0x43, 0xE6, 0x86, 0x8E, 0x43,\n\t0xE6, 0x86, 0x90, 0x43, 0xE6, 0x86, 0xA4, 0x43,\n\t0xE6, 0x86, 0xAF, 0x43, 0xE6, 0x86, 0xB2, 0x43,\n\t0xE6, 0x87, 0x9E, 0x43, 0xE6, 0x87, 0xB2, 0x43,\n\t0xE6, 0x87, 0xB6, 0x43, 0xE6, 0x88, 0x80, 0x43,\n\t0xE6, 0x88, 0x88, 0x43, 0xE6, 0x88, 0x90, 0x43,\n\t// Bytes c00 - c3f\n\t0xE6, 0x88, 0x9B, 0x43, 0xE6, 0x88, 0xAE, 0x43,\n\t0xE6, 0x88, 0xB4, 0x43, 0xE6, 0x88, 0xB6, 0x43,\n\t0xE6, 0x89, 0x8B, 0x43, 0xE6, 0x89, 0x93, 0x43,\n\t0xE6, 0x89, 0x9D, 0x43, 0xE6, 0x8A, 0x95, 0x43,\n\t0xE6, 0x8A, 0xB1, 0x43, 0xE6, 0x8B, 0x89, 0x43,\n\t0xE6, 0x8B, 0x8F, 0x43, 0xE6, 0x8B, 0x93, 0x43,\n\t0xE6, 0x8B, 0x94, 0x43, 0xE6, 0x8B, 0xBC, 0x43,\n\t0xE6, 0x8B, 0xBE, 0x43, 0xE6, 0x8C, 0x87, 0x43,\n\t// Bytes c40 - c7f\n\t0xE6, 0x8C, 0xBD, 0x43, 0xE6, 0x8D, 0x90, 0x43,\n\t0xE6, 0x8D, 0x95, 0x43, 0xE6, 0x8D, 0xA8, 0x43,\n\t0xE6, 0x8D, 0xBB, 0x43, 0xE6, 0x8E, 0x83, 0x43,\n\t0xE6, 0x8E, 0xA0, 0x43, 0xE6, 0x8E, 0xA9, 0x43,\n\t0xE6, 0x8F, 0x84, 0x43, 0xE6, 0x8F, 0x85, 0x43,\n\t0xE6, 0x8F, 0xA4, 0x43, 0xE6, 0x90, 0x9C, 0x43,\n\t0xE6, 0x90, 0xA2, 0x43, 0xE6, 0x91, 0x92, 0x43,\n\t0xE6, 0x91, 0xA9, 0x43, 0xE6, 0x91, 0xB7, 0x43,\n\t// Bytes c80 - cbf\n\t0xE6, 0x91, 0xBE, 0x43, 0xE6, 0x92, 0x9A, 0x43,\n\t0xE6, 0x92, 0x9D, 0x43, 0xE6, 0x93, 0x84, 0x43,\n\t0xE6, 0x94, 0xAF, 0x43, 0xE6, 0x94, 0xB4, 0x43,\n\t0xE6, 0x95, 0x8F, 0x43, 0xE6, 0x95, 0x96, 0x43,\n\t0xE6, 0x95, 0xAC, 0x43, 0xE6, 0x95, 0xB8, 0x43,\n\t0xE6, 0x96, 0x87, 0x43, 0xE6, 0x96, 0x97, 0x43,\n\t0xE6, 0x96, 0x99, 0x43, 0xE6, 0x96, 0xA4, 0x43,\n\t0xE6, 0x96, 0xB0, 0x43, 0xE6, 0x96, 0xB9, 0x43,\n\t// Bytes cc0 - cff\n\t0xE6, 0x97, 0x85, 0x43, 0xE6, 0x97, 0xA0, 0x43,\n\t0xE6, 0x97, 0xA2, 0x43, 0xE6, 0x97, 0xA3, 0x43,\n\t0xE6, 0x97, 0xA5, 0x43, 0xE6, 0x98, 0x93, 0x43,\n\t0xE6, 0x98, 0xA0, 0x43, 0xE6, 0x99, 0x89, 0x43,\n\t0xE6, 0x99, 0xB4, 0x43, 0xE6, 0x9A, 0x88, 0x43,\n\t0xE6, 0x9A, 0x91, 0x43, 0xE6, 0x9A, 0x9C, 0x43,\n\t0xE6, 0x9A, 0xB4, 0x43, 0xE6, 0x9B, 0x86, 0x43,\n\t0xE6, 0x9B, 0xB0, 0x43, 0xE6, 0x9B, 0xB4, 0x43,\n\t// Bytes d00 - d3f\n\t0xE6, 0x9B, 0xB8, 0x43, 0xE6, 0x9C, 0x80, 0x43,\n\t0xE6, 0x9C, 0x88, 0x43, 0xE6, 0x9C, 0x89, 0x43,\n\t0xE6, 0x9C, 0x97, 0x43, 0xE6, 0x9C, 0x9B, 0x43,\n\t0xE6, 0x9C, 0xA1, 0x43, 0xE6, 0x9C, 0xA8, 0x43,\n\t0xE6, 0x9D, 0x8E, 0x43, 0xE6, 0x9D, 0x93, 0x43,\n\t0xE6, 0x9D, 0x96, 0x43, 0xE6, 0x9D, 0x9E, 0x43,\n\t0xE6, 0x9D, 0xBB, 0x43, 0xE6, 0x9E, 0x85, 0x43,\n\t0xE6, 0x9E, 0x97, 0x43, 0xE6, 0x9F, 0xB3, 0x43,\n\t// Bytes d40 - d7f\n\t0xE6, 0x9F, 0xBA, 0x43, 0xE6, 0xA0, 0x97, 0x43,\n\t0xE6, 0xA0, 0x9F, 0x43, 0xE6, 0xA0, 0xAA, 0x43,\n\t0xE6, 0xA1, 0x92, 0x43, 0xE6, 0xA2, 0x81, 0x43,\n\t0xE6, 0xA2, 0x85, 0x43, 0xE6, 0xA2, 0x8E, 0x43,\n\t0xE6, 0xA2, 0xA8, 0x43, 0xE6, 0xA4, 0x94, 0x43,\n\t0xE6, 0xA5, 0x82, 0x43, 0xE6, 0xA6, 0xA3, 0x43,\n\t0xE6, 0xA7, 0xAA, 0x43, 0xE6, 0xA8, 0x82, 0x43,\n\t0xE6, 0xA8, 0x93, 0x43, 0xE6, 0xAA, 0xA8, 0x43,\n\t// Bytes d80 - dbf\n\t0xE6, 0xAB, 0x93, 0x43, 0xE6, 0xAB, 0x9B, 0x43,\n\t0xE6, 0xAC, 0x84, 0x43, 0xE6, 0xAC, 0xA0, 0x43,\n\t0xE6, 0xAC, 0xA1, 0x43, 0xE6, 0xAD, 0x94, 0x43,\n\t0xE6, 0xAD, 0xA2, 0x43, 0xE6, 0xAD, 0xA3, 0x43,\n\t0xE6, 0xAD, 0xB2, 0x43, 0xE6, 0xAD, 0xB7, 0x43,\n\t0xE6, 0xAD, 0xB9, 0x43, 0xE6, 0xAE, 0x9F, 0x43,\n\t0xE6, 0xAE, 0xAE, 0x43, 0xE6, 0xAE, 0xB3, 0x43,\n\t0xE6, 0xAE, 0xBA, 0x43, 0xE6, 0xAE, 0xBB, 0x43,\n\t// Bytes dc0 - dff\n\t0xE6, 0xAF, 0x8B, 0x43, 0xE6, 0xAF, 0x8D, 0x43,\n\t0xE6, 0xAF, 0x94, 0x43, 0xE6, 0xAF, 0x9B, 0x43,\n\t0xE6, 0xB0, 0x8F, 0x43, 0xE6, 0xB0, 0x94, 0x43,\n\t0xE6, 0xB0, 0xB4, 0x43, 0xE6, 0xB1, 0x8E, 0x43,\n\t0xE6, 0xB1, 0xA7, 0x43, 0xE6, 0xB2, 0x88, 0x43,\n\t0xE6, 0xB2, 0xBF, 0x43, 0xE6, 0xB3, 0x8C, 0x43,\n\t0xE6, 0xB3, 0x8D, 0x43, 0xE6, 0xB3, 0xA5, 0x43,\n\t0xE6, 0xB3, 0xA8, 0x43, 0xE6, 0xB4, 0x96, 0x43,\n\t// Bytes e00 - e3f\n\t0xE6, 0xB4, 0x9B, 0x43, 0xE6, 0xB4, 0x9E, 0x43,\n\t0xE6, 0xB4, 0xB4, 0x43, 0xE6, 0xB4, 0xBE, 0x43,\n\t0xE6, 0xB5, 0x81, 0x43, 0xE6, 0xB5, 0xA9, 0x43,\n\t0xE6, 0xB5, 0xAA, 0x43, 0xE6, 0xB5, 0xB7, 0x43,\n\t0xE6, 0xB5, 0xB8, 0x43, 0xE6, 0xB6, 0x85, 0x43,\n\t0xE6, 0xB7, 0x8B, 0x43, 0xE6, 0xB7, 0x9A, 0x43,\n\t0xE6, 0xB7, 0xAA, 0x43, 0xE6, 0xB7, 0xB9, 0x43,\n\t0xE6, 0xB8, 0x9A, 0x43, 0xE6, 0xB8, 0xAF, 0x43,\n\t// Bytes e40 - e7f\n\t0xE6, 0xB9, 0xAE, 0x43, 0xE6, 0xBA, 0x80, 0x43,\n\t0xE6, 0xBA, 0x9C, 0x43, 0xE6, 0xBA, 0xBA, 0x43,\n\t0xE6, 0xBB, 0x87, 0x43, 0xE6, 0xBB, 0x8B, 0x43,\n\t0xE6, 0xBB, 0x91, 0x43, 0xE6, 0xBB, 0x9B, 0x43,\n\t0xE6, 0xBC, 0x8F, 0x43, 0xE6, 0xBC, 0x94, 0x43,\n\t0xE6, 0xBC, 0xA2, 0x43, 0xE6, 0xBC, 0xA3, 0x43,\n\t0xE6, 0xBD, 0xAE, 0x43, 0xE6, 0xBF, 0x86, 0x43,\n\t0xE6, 0xBF, 0xAB, 0x43, 0xE6, 0xBF, 0xBE, 0x43,\n\t// Bytes e80 - ebf\n\t0xE7, 0x80, 0x9B, 0x43, 0xE7, 0x80, 0x9E, 0x43,\n\t0xE7, 0x80, 0xB9, 0x43, 0xE7, 0x81, 0x8A, 0x43,\n\t0xE7, 0x81, 0xAB, 0x43, 0xE7, 0x81, 0xB0, 0x43,\n\t0xE7, 0x81, 0xB7, 0x43, 0xE7, 0x81, 0xBD, 0x43,\n\t0xE7, 0x82, 0x99, 0x43, 0xE7, 0x82, 0xAD, 0x43,\n\t0xE7, 0x83, 0x88, 0x43, 0xE7, 0x83, 0x99, 0x43,\n\t0xE7, 0x84, 0xA1, 0x43, 0xE7, 0x85, 0x85, 0x43,\n\t0xE7, 0x85, 0x89, 0x43, 0xE7, 0x85, 0xAE, 0x43,\n\t// Bytes ec0 - eff\n\t0xE7, 0x86, 0x9C, 0x43, 0xE7, 0x87, 0x8E, 0x43,\n\t0xE7, 0x87, 0x90, 0x43, 0xE7, 0x88, 0x90, 0x43,\n\t0xE7, 0x88, 0x9B, 0x43, 0xE7, 0x88, 0xA8, 0x43,\n\t0xE7, 0x88, 0xAA, 0x43, 0xE7, 0x88, 0xAB, 0x43,\n\t0xE7, 0x88, 0xB5, 0x43, 0xE7, 0x88, 0xB6, 0x43,\n\t0xE7, 0x88, 0xBB, 0x43, 0xE7, 0x88, 0xBF, 0x43,\n\t0xE7, 0x89, 0x87, 0x43, 0xE7, 0x89, 0x90, 0x43,\n\t0xE7, 0x89, 0x99, 0x43, 0xE7, 0x89, 0x9B, 0x43,\n\t// Bytes f00 - f3f\n\t0xE7, 0x89, 0xA2, 0x43, 0xE7, 0x89, 0xB9, 0x43,\n\t0xE7, 0x8A, 0x80, 0x43, 0xE7, 0x8A, 0x95, 0x43,\n\t0xE7, 0x8A, 0xAC, 0x43, 0xE7, 0x8A, 0xAF, 0x43,\n\t0xE7, 0x8B, 0x80, 0x43, 0xE7, 0x8B, 0xBC, 0x43,\n\t0xE7, 0x8C, 0xAA, 0x43, 0xE7, 0x8D, 0xB5, 0x43,\n\t0xE7, 0x8D, 0xBA, 0x43, 0xE7, 0x8E, 0x84, 0x43,\n\t0xE7, 0x8E, 0x87, 0x43, 0xE7, 0x8E, 0x89, 0x43,\n\t0xE7, 0x8E, 0x8B, 0x43, 0xE7, 0x8E, 0xA5, 0x43,\n\t// Bytes f40 - f7f\n\t0xE7, 0x8E, 0xB2, 0x43, 0xE7, 0x8F, 0x9E, 0x43,\n\t0xE7, 0x90, 0x86, 0x43, 0xE7, 0x90, 0x89, 0x43,\n\t0xE7, 0x90, 0xA2, 0x43, 0xE7, 0x91, 0x87, 0x43,\n\t0xE7, 0x91, 0x9C, 0x43, 0xE7, 0x91, 0xA9, 0x43,\n\t0xE7, 0x91, 0xB1, 0x43, 0xE7, 0x92, 0x85, 0x43,\n\t0xE7, 0x92, 0x89, 0x43, 0xE7, 0x92, 0x98, 0x43,\n\t0xE7, 0x93, 0x8A, 0x43, 0xE7, 0x93, 0x9C, 0x43,\n\t0xE7, 0x93, 0xA6, 0x43, 0xE7, 0x94, 0x86, 0x43,\n\t// Bytes f80 - fbf\n\t0xE7, 0x94, 0x98, 0x43, 0xE7, 0x94, 0x9F, 0x43,\n\t0xE7, 0x94, 0xA4, 0x43, 0xE7, 0x94, 0xA8, 0x43,\n\t0xE7, 0x94, 0xB0, 0x43, 0xE7, 0x94, 0xB2, 0x43,\n\t0xE7, 0x94, 0xB3, 0x43, 0xE7, 0x94, 0xB7, 0x43,\n\t0xE7, 0x94, 0xBB, 0x43, 0xE7, 0x94, 0xBE, 0x43,\n\t0xE7, 0x95, 0x99, 0x43, 0xE7, 0x95, 0xA5, 0x43,\n\t0xE7, 0x95, 0xB0, 0x43, 0xE7, 0x96, 0x8B, 0x43,\n\t0xE7, 0x96, 0x92, 0x43, 0xE7, 0x97, 0xA2, 0x43,\n\t// Bytes fc0 - fff\n\t0xE7, 0x98, 0x90, 0x43, 0xE7, 0x98, 0x9D, 0x43,\n\t0xE7, 0x98, 0x9F, 0x43, 0xE7, 0x99, 0x82, 0x43,\n\t0xE7, 0x99, 0xA9, 0x43, 0xE7, 0x99, 0xB6, 0x43,\n\t0xE7, 0x99, 0xBD, 0x43, 0xE7, 0x9A, 0xAE, 0x43,\n\t0xE7, 0x9A, 0xBF, 0x43, 0xE7, 0x9B, 0x8A, 0x43,\n\t0xE7, 0x9B, 0x9B, 0x43, 0xE7, 0x9B, 0xA3, 0x43,\n\t0xE7, 0x9B, 0xA7, 0x43, 0xE7, 0x9B, 0xAE, 0x43,\n\t0xE7, 0x9B, 0xB4, 0x43, 0xE7, 0x9C, 0x81, 0x43,\n\t// Bytes 1000 - 103f\n\t0xE7, 0x9C, 0x9E, 0x43, 0xE7, 0x9C, 0x9F, 0x43,\n\t0xE7, 0x9D, 0x80, 0x43, 0xE7, 0x9D, 0x8A, 0x43,\n\t0xE7, 0x9E, 0x8B, 0x43, 0xE7, 0x9E, 0xA7, 0x43,\n\t0xE7, 0x9F, 0x9B, 0x43, 0xE7, 0x9F, 0xA2, 0x43,\n\t0xE7, 0x9F, 0xB3, 0x43, 0xE7, 0xA1, 0x8E, 0x43,\n\t0xE7, 0xA1, 0xAB, 0x43, 0xE7, 0xA2, 0x8C, 0x43,\n\t0xE7, 0xA2, 0x91, 0x43, 0xE7, 0xA3, 0x8A, 0x43,\n\t0xE7, 0xA3, 0x8C, 0x43, 0xE7, 0xA3, 0xBB, 0x43,\n\t// Bytes 1040 - 107f\n\t0xE7, 0xA4, 0xAA, 0x43, 0xE7, 0xA4, 0xBA, 0x43,\n\t0xE7, 0xA4, 0xBC, 0x43, 0xE7, 0xA4, 0xBE, 0x43,\n\t0xE7, 0xA5, 0x88, 0x43, 0xE7, 0xA5, 0x89, 0x43,\n\t0xE7, 0xA5, 0x90, 0x43, 0xE7, 0xA5, 0x96, 0x43,\n\t0xE7, 0xA5, 0x9D, 0x43, 0xE7, 0xA5, 0x9E, 0x43,\n\t0xE7, 0xA5, 0xA5, 0x43, 0xE7, 0xA5, 0xBF, 0x43,\n\t0xE7, 0xA6, 0x81, 0x43, 0xE7, 0xA6, 0x8D, 0x43,\n\t0xE7, 0xA6, 0x8E, 0x43, 0xE7, 0xA6, 0x8F, 0x43,\n\t// Bytes 1080 - 10bf\n\t0xE7, 0xA6, 0xAE, 0x43, 0xE7, 0xA6, 0xB8, 0x43,\n\t0xE7, 0xA6, 0xBE, 0x43, 0xE7, 0xA7, 0x8A, 0x43,\n\t0xE7, 0xA7, 0x98, 0x43, 0xE7, 0xA7, 0xAB, 0x43,\n\t0xE7, 0xA8, 0x9C, 0x43, 0xE7, 0xA9, 0x80, 0x43,\n\t0xE7, 0xA9, 0x8A, 0x43, 0xE7, 0xA9, 0x8F, 0x43,\n\t0xE7, 0xA9, 0xB4, 0x43, 0xE7, 0xA9, 0xBA, 0x43,\n\t0xE7, 0xAA, 0x81, 0x43, 0xE7, 0xAA, 0xB1, 0x43,\n\t0xE7, 0xAB, 0x8B, 0x43, 0xE7, 0xAB, 0xAE, 0x43,\n\t// Bytes 10c0 - 10ff\n\t0xE7, 0xAB, 0xB9, 0x43, 0xE7, 0xAC, 0xA0, 0x43,\n\t0xE7, 0xAE, 0x8F, 0x43, 0xE7, 0xAF, 0x80, 0x43,\n\t0xE7, 0xAF, 0x86, 0x43, 0xE7, 0xAF, 0x89, 0x43,\n\t0xE7, 0xB0, 0xBE, 0x43, 0xE7, 0xB1, 0xA0, 0x43,\n\t0xE7, 0xB1, 0xB3, 0x43, 0xE7, 0xB1, 0xBB, 0x43,\n\t0xE7, 0xB2, 0x92, 0x43, 0xE7, 0xB2, 0xBE, 0x43,\n\t0xE7, 0xB3, 0x92, 0x43, 0xE7, 0xB3, 0x96, 0x43,\n\t0xE7, 0xB3, 0xA3, 0x43, 0xE7, 0xB3, 0xA7, 0x43,\n\t// Bytes 1100 - 113f\n\t0xE7, 0xB3, 0xA8, 0x43, 0xE7, 0xB3, 0xB8, 0x43,\n\t0xE7, 0xB4, 0x80, 0x43, 0xE7, 0xB4, 0x90, 0x43,\n\t0xE7, 0xB4, 0xA2, 0x43, 0xE7, 0xB4, 0xAF, 0x43,\n\t0xE7, 0xB5, 0x82, 0x43, 0xE7, 0xB5, 0x9B, 0x43,\n\t0xE7, 0xB5, 0xA3, 0x43, 0xE7, 0xB6, 0xA0, 0x43,\n\t0xE7, 0xB6, 0xBE, 0x43, 0xE7, 0xB7, 0x87, 0x43,\n\t0xE7, 0xB7, 0xB4, 0x43, 0xE7, 0xB8, 0x82, 0x43,\n\t0xE7, 0xB8, 0x89, 0x43, 0xE7, 0xB8, 0xB7, 0x43,\n\t// Bytes 1140 - 117f\n\t0xE7, 0xB9, 0x81, 0x43, 0xE7, 0xB9, 0x85, 0x43,\n\t0xE7, 0xBC, 0xB6, 0x43, 0xE7, 0xBC, 0xBE, 0x43,\n\t0xE7, 0xBD, 0x91, 0x43, 0xE7, 0xBD, 0xB2, 0x43,\n\t0xE7, 0xBD, 0xB9, 0x43, 0xE7, 0xBD, 0xBA, 0x43,\n\t0xE7, 0xBE, 0x85, 0x43, 0xE7, 0xBE, 0x8A, 0x43,\n\t0xE7, 0xBE, 0x95, 0x43, 0xE7, 0xBE, 0x9A, 0x43,\n\t0xE7, 0xBE, 0xBD, 0x43, 0xE7, 0xBF, 0xBA, 0x43,\n\t0xE8, 0x80, 0x81, 0x43, 0xE8, 0x80, 0x85, 0x43,\n\t// Bytes 1180 - 11bf\n\t0xE8, 0x80, 0x8C, 0x43, 0xE8, 0x80, 0x92, 0x43,\n\t0xE8, 0x80, 0xB3, 0x43, 0xE8, 0x81, 0x86, 0x43,\n\t0xE8, 0x81, 0xA0, 0x43, 0xE8, 0x81, 0xAF, 0x43,\n\t0xE8, 0x81, 0xB0, 0x43, 0xE8, 0x81, 0xBE, 0x43,\n\t0xE8, 0x81, 0xBF, 0x43, 0xE8, 0x82, 0x89, 0x43,\n\t0xE8, 0x82, 0x8B, 0x43, 0xE8, 0x82, 0xAD, 0x43,\n\t0xE8, 0x82, 0xB2, 0x43, 0xE8, 0x84, 0x83, 0x43,\n\t0xE8, 0x84, 0xBE, 0x43, 0xE8, 0x87, 0x98, 0x43,\n\t// Bytes 11c0 - 11ff\n\t0xE8, 0x87, 0xA3, 0x43, 0xE8, 0x87, 0xA8, 0x43,\n\t0xE8, 0x87, 0xAA, 0x43, 0xE8, 0x87, 0xAD, 0x43,\n\t0xE8, 0x87, 0xB3, 0x43, 0xE8, 0x87, 0xBC, 0x43,\n\t0xE8, 0x88, 0x81, 0x43, 0xE8, 0x88, 0x84, 0x43,\n\t0xE8, 0x88, 0x8C, 0x43, 0xE8, 0x88, 0x98, 0x43,\n\t0xE8, 0x88, 0x9B, 0x43, 0xE8, 0x88, 0x9F, 0x43,\n\t0xE8, 0x89, 0xAE, 0x43, 0xE8, 0x89, 0xAF, 0x43,\n\t0xE8, 0x89, 0xB2, 0x43, 0xE8, 0x89, 0xB8, 0x43,\n\t// Bytes 1200 - 123f\n\t0xE8, 0x89, 0xB9, 0x43, 0xE8, 0x8A, 0x8B, 0x43,\n\t0xE8, 0x8A, 0x91, 0x43, 0xE8, 0x8A, 0x9D, 0x43,\n\t0xE8, 0x8A, 0xB1, 0x43, 0xE8, 0x8A, 0xB3, 0x43,\n\t0xE8, 0x8A, 0xBD, 0x43, 0xE8, 0x8B, 0xA5, 0x43,\n\t0xE8, 0x8B, 0xA6, 0x43, 0xE8, 0x8C, 0x9D, 0x43,\n\t0xE8, 0x8C, 0xA3, 0x43, 0xE8, 0x8C, 0xB6, 0x43,\n\t0xE8, 0x8D, 0x92, 0x43, 0xE8, 0x8D, 0x93, 0x43,\n\t0xE8, 0x8D, 0xA3, 0x43, 0xE8, 0x8E, 0xAD, 0x43,\n\t// Bytes 1240 - 127f\n\t0xE8, 0x8E, 0xBD, 0x43, 0xE8, 0x8F, 0x89, 0x43,\n\t0xE8, 0x8F, 0x8A, 0x43, 0xE8, 0x8F, 0x8C, 0x43,\n\t0xE8, 0x8F, 0x9C, 0x43, 0xE8, 0x8F, 0xA7, 0x43,\n\t0xE8, 0x8F, 0xAF, 0x43, 0xE8, 0x8F, 0xB1, 0x43,\n\t0xE8, 0x90, 0xBD, 0x43, 0xE8, 0x91, 0x89, 0x43,\n\t0xE8, 0x91, 0x97, 0x43, 0xE8, 0x93, 0xAE, 0x43,\n\t0xE8, 0x93, 0xB1, 0x43, 0xE8, 0x93, 0xB3, 0x43,\n\t0xE8, 0x93, 0xBC, 0x43, 0xE8, 0x94, 0x96, 0x43,\n\t// Bytes 1280 - 12bf\n\t0xE8, 0x95, 0xA4, 0x43, 0xE8, 0x97, 0x8D, 0x43,\n\t0xE8, 0x97, 0xBA, 0x43, 0xE8, 0x98, 0x86, 0x43,\n\t0xE8, 0x98, 0x92, 0x43, 0xE8, 0x98, 0xAD, 0x43,\n\t0xE8, 0x98, 0xBF, 0x43, 0xE8, 0x99, 0x8D, 0x43,\n\t0xE8, 0x99, 0x90, 0x43, 0xE8, 0x99, 0x9C, 0x43,\n\t0xE8, 0x99, 0xA7, 0x43, 0xE8, 0x99, 0xA9, 0x43,\n\t0xE8, 0x99, 0xAB, 0x43, 0xE8, 0x9A, 0x88, 0x43,\n\t0xE8, 0x9A, 0xA9, 0x43, 0xE8, 0x9B, 0xA2, 0x43,\n\t// Bytes 12c0 - 12ff\n\t0xE8, 0x9C, 0x8E, 0x43, 0xE8, 0x9C, 0xA8, 0x43,\n\t0xE8, 0x9D, 0xAB, 0x43, 0xE8, 0x9D, 0xB9, 0x43,\n\t0xE8, 0x9E, 0x86, 0x43, 0xE8, 0x9E, 0xBA, 0x43,\n\t0xE8, 0x9F, 0xA1, 0x43, 0xE8, 0xA0, 0x81, 0x43,\n\t0xE8, 0xA0, 0x9F, 0x43, 0xE8, 0xA1, 0x80, 0x43,\n\t0xE8, 0xA1, 0x8C, 0x43, 0xE8, 0xA1, 0xA0, 0x43,\n\t0xE8, 0xA1, 0xA3, 0x43, 0xE8, 0xA3, 0x82, 0x43,\n\t0xE8, 0xA3, 0x8F, 0x43, 0xE8, 0xA3, 0x97, 0x43,\n\t// Bytes 1300 - 133f\n\t0xE8, 0xA3, 0x9E, 0x43, 0xE8, 0xA3, 0xA1, 0x43,\n\t0xE8, 0xA3, 0xB8, 0x43, 0xE8, 0xA3, 0xBA, 0x43,\n\t0xE8, 0xA4, 0x90, 0x43, 0xE8, 0xA5, 0x81, 0x43,\n\t0xE8, 0xA5, 0xA4, 0x43, 0xE8, 0xA5, 0xBE, 0x43,\n\t0xE8, 0xA6, 0x86, 0x43, 0xE8, 0xA6, 0x8B, 0x43,\n\t0xE8, 0xA6, 0x96, 0x43, 0xE8, 0xA7, 0x92, 0x43,\n\t0xE8, 0xA7, 0xA3, 0x43, 0xE8, 0xA8, 0x80, 0x43,\n\t0xE8, 0xAA, 0xA0, 0x43, 0xE8, 0xAA, 0xAA, 0x43,\n\t// Bytes 1340 - 137f\n\t0xE8, 0xAA, 0xBF, 0x43, 0xE8, 0xAB, 0x8B, 0x43,\n\t0xE8, 0xAB, 0x92, 0x43, 0xE8, 0xAB, 0x96, 0x43,\n\t0xE8, 0xAB, 0xAD, 0x43, 0xE8, 0xAB, 0xB8, 0x43,\n\t0xE8, 0xAB, 0xBE, 0x43, 0xE8, 0xAC, 0x81, 0x43,\n\t0xE8, 0xAC, 0xB9, 0x43, 0xE8, 0xAD, 0x98, 0x43,\n\t0xE8, 0xAE, 0x80, 0x43, 0xE8, 0xAE, 0x8A, 0x43,\n\t0xE8, 0xB0, 0xB7, 0x43, 0xE8, 0xB1, 0x86, 0x43,\n\t0xE8, 0xB1, 0x88, 0x43, 0xE8, 0xB1, 0x95, 0x43,\n\t// Bytes 1380 - 13bf\n\t0xE8, 0xB1, 0xB8, 0x43, 0xE8, 0xB2, 0x9D, 0x43,\n\t0xE8, 0xB2, 0xA1, 0x43, 0xE8, 0xB2, 0xA9, 0x43,\n\t0xE8, 0xB2, 0xAB, 0x43, 0xE8, 0xB3, 0x81, 0x43,\n\t0xE8, 0xB3, 0x82, 0x43, 0xE8, 0xB3, 0x87, 0x43,\n\t0xE8, 0xB3, 0x88, 0x43, 0xE8, 0xB3, 0x93, 0x43,\n\t0xE8, 0xB4, 0x88, 0x43, 0xE8, 0xB4, 0x9B, 0x43,\n\t0xE8, 0xB5, 0xA4, 0x43, 0xE8, 0xB5, 0xB0, 0x43,\n\t0xE8, 0xB5, 0xB7, 0x43, 0xE8, 0xB6, 0xB3, 0x43,\n\t// Bytes 13c0 - 13ff\n\t0xE8, 0xB6, 0xBC, 0x43, 0xE8, 0xB7, 0x8B, 0x43,\n\t0xE8, 0xB7, 0xAF, 0x43, 0xE8, 0xB7, 0xB0, 0x43,\n\t0xE8, 0xBA, 0xAB, 0x43, 0xE8, 0xBB, 0x8A, 0x43,\n\t0xE8, 0xBB, 0x94, 0x43, 0xE8, 0xBC, 0xA6, 0x43,\n\t0xE8, 0xBC, 0xAA, 0x43, 0xE8, 0xBC, 0xB8, 0x43,\n\t0xE8, 0xBC, 0xBB, 0x43, 0xE8, 0xBD, 0xA2, 0x43,\n\t0xE8, 0xBE, 0x9B, 0x43, 0xE8, 0xBE, 0x9E, 0x43,\n\t0xE8, 0xBE, 0xB0, 0x43, 0xE8, 0xBE, 0xB5, 0x43,\n\t// Bytes 1400 - 143f\n\t0xE8, 0xBE, 0xB6, 0x43, 0xE9, 0x80, 0xA3, 0x43,\n\t0xE9, 0x80, 0xB8, 0x43, 0xE9, 0x81, 0x8A, 0x43,\n\t0xE9, 0x81, 0xA9, 0x43, 0xE9, 0x81, 0xB2, 0x43,\n\t0xE9, 0x81, 0xBC, 0x43, 0xE9, 0x82, 0x8F, 0x43,\n\t0xE9, 0x82, 0x91, 0x43, 0xE9, 0x82, 0x94, 0x43,\n\t0xE9, 0x83, 0x8E, 0x43, 0xE9, 0x83, 0x9E, 0x43,\n\t0xE9, 0x83, 0xB1, 0x43, 0xE9, 0x83, 0xBD, 0x43,\n\t0xE9, 0x84, 0x91, 0x43, 0xE9, 0x84, 0x9B, 0x43,\n\t// Bytes 1440 - 147f\n\t0xE9, 0x85, 0x89, 0x43, 0xE9, 0x85, 0x8D, 0x43,\n\t0xE9, 0x85, 0xAA, 0x43, 0xE9, 0x86, 0x99, 0x43,\n\t0xE9, 0x86, 0xB4, 0x43, 0xE9, 0x87, 0x86, 0x43,\n\t0xE9, 0x87, 0x8C, 0x43, 0xE9, 0x87, 0x8F, 0x43,\n\t0xE9, 0x87, 0x91, 0x43, 0xE9, 0x88, 0xB4, 0x43,\n\t0xE9, 0x88, 0xB8, 0x43, 0xE9, 0x89, 0xB6, 0x43,\n\t0xE9, 0x89, 0xBC, 0x43, 0xE9, 0x8B, 0x97, 0x43,\n\t0xE9, 0x8B, 0x98, 0x43, 0xE9, 0x8C, 0x84, 0x43,\n\t// Bytes 1480 - 14bf\n\t0xE9, 0x8D, 0x8A, 0x43, 0xE9, 0x8F, 0xB9, 0x43,\n\t0xE9, 0x90, 0x95, 0x43, 0xE9, 0x95, 0xB7, 0x43,\n\t0xE9, 0x96, 0x80, 0x43, 0xE9, 0x96, 0x8B, 0x43,\n\t0xE9, 0x96, 0xAD, 0x43, 0xE9, 0x96, 0xB7, 0x43,\n\t0xE9, 0x98, 0x9C, 0x43, 0xE9, 0x98, 0xAE, 0x43,\n\t0xE9, 0x99, 0x8B, 0x43, 0xE9, 0x99, 0x8D, 0x43,\n\t0xE9, 0x99, 0xB5, 0x43, 0xE9, 0x99, 0xB8, 0x43,\n\t0xE9, 0x99, 0xBC, 0x43, 0xE9, 0x9A, 0x86, 0x43,\n\t// Bytes 14c0 - 14ff\n\t0xE9, 0x9A, 0xA3, 0x43, 0xE9, 0x9A, 0xB6, 0x43,\n\t0xE9, 0x9A, 0xB7, 0x43, 0xE9, 0x9A, 0xB8, 0x43,\n\t0xE9, 0x9A, 0xB9, 0x43, 0xE9, 0x9B, 0x83, 0x43,\n\t0xE9, 0x9B, 0xA2, 0x43, 0xE9, 0x9B, 0xA3, 0x43,\n\t0xE9, 0x9B, 0xA8, 0x43, 0xE9, 0x9B, 0xB6, 0x43,\n\t0xE9, 0x9B, 0xB7, 0x43, 0xE9, 0x9C, 0xA3, 0x43,\n\t0xE9, 0x9C, 0xB2, 0x43, 0xE9, 0x9D, 0x88, 0x43,\n\t0xE9, 0x9D, 0x91, 0x43, 0xE9, 0x9D, 0x96, 0x43,\n\t// Bytes 1500 - 153f\n\t0xE9, 0x9D, 0x9E, 0x43, 0xE9, 0x9D, 0xA2, 0x43,\n\t0xE9, 0x9D, 0xA9, 0x43, 0xE9, 0x9F, 0x8B, 0x43,\n\t0xE9, 0x9F, 0x9B, 0x43, 0xE9, 0x9F, 0xA0, 0x43,\n\t0xE9, 0x9F, 0xAD, 0x43, 0xE9, 0x9F, 0xB3, 0x43,\n\t0xE9, 0x9F, 0xBF, 0x43, 0xE9, 0xA0, 0x81, 0x43,\n\t0xE9, 0xA0, 0x85, 0x43, 0xE9, 0xA0, 0x8B, 0x43,\n\t0xE9, 0xA0, 0x98, 0x43, 0xE9, 0xA0, 0xA9, 0x43,\n\t0xE9, 0xA0, 0xBB, 0x43, 0xE9, 0xA1, 0x9E, 0x43,\n\t// Bytes 1540 - 157f\n\t0xE9, 0xA2, 0xA8, 0x43, 0xE9, 0xA3, 0x9B, 0x43,\n\t0xE9, 0xA3, 0x9F, 0x43, 0xE9, 0xA3, 0xA2, 0x43,\n\t0xE9, 0xA3, 0xAF, 0x43, 0xE9, 0xA3, 0xBC, 0x43,\n\t0xE9, 0xA4, 0xA8, 0x43, 0xE9, 0xA4, 0xA9, 0x43,\n\t0xE9, 0xA6, 0x96, 0x43, 0xE9, 0xA6, 0x99, 0x43,\n\t0xE9, 0xA6, 0xA7, 0x43, 0xE9, 0xA6, 0xAC, 0x43,\n\t0xE9, 0xA7, 0x82, 0x43, 0xE9, 0xA7, 0xB1, 0x43,\n\t0xE9, 0xA7, 0xBE, 0x43, 0xE9, 0xA9, 0xAA, 0x43,\n\t// Bytes 1580 - 15bf\n\t0xE9, 0xAA, 0xA8, 0x43, 0xE9, 0xAB, 0x98, 0x43,\n\t0xE9, 0xAB, 0x9F, 0x43, 0xE9, 0xAC, 0x92, 0x43,\n\t0xE9, 0xAC, 0xA5, 0x43, 0xE9, 0xAC, 0xAF, 0x43,\n\t0xE9, 0xAC, 0xB2, 0x43, 0xE9, 0xAC, 0xBC, 0x43,\n\t0xE9, 0xAD, 0x9A, 0x43, 0xE9, 0xAD, 0xAF, 0x43,\n\t0xE9, 0xB1, 0x80, 0x43, 0xE9, 0xB1, 0x97, 0x43,\n\t0xE9, 0xB3, 0xA5, 0x43, 0xE9, 0xB3, 0xBD, 0x43,\n\t0xE9, 0xB5, 0xA7, 0x43, 0xE9, 0xB6, 0xB4, 0x43,\n\t// Bytes 15c0 - 15ff\n\t0xE9, 0xB7, 0xBA, 0x43, 0xE9, 0xB8, 0x9E, 0x43,\n\t0xE9, 0xB9, 0xB5, 0x43, 0xE9, 0xB9, 0xBF, 0x43,\n\t0xE9, 0xBA, 0x97, 0x43, 0xE9, 0xBA, 0x9F, 0x43,\n\t0xE9, 0xBA, 0xA5, 0x43, 0xE9, 0xBA, 0xBB, 0x43,\n\t0xE9, 0xBB, 0x83, 0x43, 0xE9, 0xBB, 0x8D, 0x43,\n\t0xE9, 0xBB, 0x8E, 0x43, 0xE9, 0xBB, 0x91, 0x43,\n\t0xE9, 0xBB, 0xB9, 0x43, 0xE9, 0xBB, 0xBD, 0x43,\n\t0xE9, 0xBB, 0xBE, 0x43, 0xE9, 0xBC, 0x85, 0x43,\n\t// Bytes 1600 - 163f\n\t0xE9, 0xBC, 0x8E, 0x43, 0xE9, 0xBC, 0x8F, 0x43,\n\t0xE9, 0xBC, 0x93, 0x43, 0xE9, 0xBC, 0x96, 0x43,\n\t0xE9, 0xBC, 0xA0, 0x43, 0xE9, 0xBC, 0xBB, 0x43,\n\t0xE9, 0xBD, 0x83, 0x43, 0xE9, 0xBD, 0x8A, 0x43,\n\t0xE9, 0xBD, 0x92, 0x43, 0xE9, 0xBE, 0x8D, 0x43,\n\t0xE9, 0xBE, 0x8E, 0x43, 0xE9, 0xBE, 0x9C, 0x43,\n\t0xE9, 0xBE, 0x9F, 0x43, 0xE9, 0xBE, 0xA0, 0x43,\n\t0xEA, 0x9C, 0xA7, 0x43, 0xEA, 0x9D, 0xAF, 0x43,\n\t// Bytes 1640 - 167f\n\t0xEA, 0xAC, 0xB7, 0x43, 0xEA, 0xAD, 0x92, 0x44,\n\t0xF0, 0xA0, 0x84, 0xA2, 0x44, 0xF0, 0xA0, 0x94,\n\t0x9C, 0x44, 0xF0, 0xA0, 0x94, 0xA5, 0x44, 0xF0,\n\t0xA0, 0x95, 0x8B, 0x44, 0xF0, 0xA0, 0x98, 0xBA,\n\t0x44, 0xF0, 0xA0, 0xA0, 0x84, 0x44, 0xF0, 0xA0,\n\t0xA3, 0x9E, 0x44, 0xF0, 0xA0, 0xA8, 0xAC, 0x44,\n\t0xF0, 0xA0, 0xAD, 0xA3, 0x44, 0xF0, 0xA1, 0x93,\n\t0xA4, 0x44, 0xF0, 0xA1, 0x9A, 0xA8, 0x44, 0xF0,\n\t// Bytes 1680 - 16bf\n\t0xA1, 0x9B, 0xAA, 0x44, 0xF0, 0xA1, 0xA7, 0x88,\n\t0x44, 0xF0, 0xA1, 0xAC, 0x98, 0x44, 0xF0, 0xA1,\n\t0xB4, 0x8B, 0x44, 0xF0, 0xA1, 0xB7, 0xA4, 0x44,\n\t0xF0, 0xA1, 0xB7, 0xA6, 0x44, 0xF0, 0xA2, 0x86,\n\t0x83, 0x44, 0xF0, 0xA2, 0x86, 0x9F, 0x44, 0xF0,\n\t0xA2, 0x8C, 0xB1, 0x44, 0xF0, 0xA2, 0x9B, 0x94,\n\t0x44, 0xF0, 0xA2, 0xA1, 0x84, 0x44, 0xF0, 0xA2,\n\t0xA1, 0x8A, 0x44, 0xF0, 0xA2, 0xAC, 0x8C, 0x44,\n\t// Bytes 16c0 - 16ff\n\t0xF0, 0xA2, 0xAF, 0xB1, 0x44, 0xF0, 0xA3, 0x80,\n\t0x8A, 0x44, 0xF0, 0xA3, 0x8A, 0xB8, 0x44, 0xF0,\n\t0xA3, 0x8D, 0x9F, 0x44, 0xF0, 0xA3, 0x8E, 0x93,\n\t0x44, 0xF0, 0xA3, 0x8E, 0x9C, 0x44, 0xF0, 0xA3,\n\t0x8F, 0x83, 0x44, 0xF0, 0xA3, 0x8F, 0x95, 0x44,\n\t0xF0, 0xA3, 0x91, 0xAD, 0x44, 0xF0, 0xA3, 0x9A,\n\t0xA3, 0x44, 0xF0, 0xA3, 0xA2, 0xA7, 0x44, 0xF0,\n\t0xA3, 0xAA, 0x8D, 0x44, 0xF0, 0xA3, 0xAB, 0xBA,\n\t// Bytes 1700 - 173f\n\t0x44, 0xF0, 0xA3, 0xB2, 0xBC, 0x44, 0xF0, 0xA3,\n\t0xB4, 0x9E, 0x44, 0xF0, 0xA3, 0xBB, 0x91, 0x44,\n\t0xF0, 0xA3, 0xBD, 0x9E, 0x44, 0xF0, 0xA3, 0xBE,\n\t0x8E, 0x44, 0xF0, 0xA4, 0x89, 0xA3, 0x44, 0xF0,\n\t0xA4, 0x8B, 0xAE, 0x44, 0xF0, 0xA4, 0x8E, 0xAB,\n\t0x44, 0xF0, 0xA4, 0x98, 0x88, 0x44, 0xF0, 0xA4,\n\t0x9C, 0xB5, 0x44, 0xF0, 0xA4, 0xA0, 0x94, 0x44,\n\t0xF0, 0xA4, 0xB0, 0xB6, 0x44, 0xF0, 0xA4, 0xB2,\n\t// Bytes 1740 - 177f\n\t0x92, 0x44, 0xF0, 0xA4, 0xBE, 0xA1, 0x44, 0xF0,\n\t0xA4, 0xBE, 0xB8, 0x44, 0xF0, 0xA5, 0x81, 0x84,\n\t0x44, 0xF0, 0xA5, 0x83, 0xB2, 0x44, 0xF0, 0xA5,\n\t0x83, 0xB3, 0x44, 0xF0, 0xA5, 0x84, 0x99, 0x44,\n\t0xF0, 0xA5, 0x84, 0xB3, 0x44, 0xF0, 0xA5, 0x89,\n\t0x89, 0x44, 0xF0, 0xA5, 0x90, 0x9D, 0x44, 0xF0,\n\t0xA5, 0x98, 0xA6, 0x44, 0xF0, 0xA5, 0x9A, 0x9A,\n\t0x44, 0xF0, 0xA5, 0x9B, 0x85, 0x44, 0xF0, 0xA5,\n\t// Bytes 1780 - 17bf\n\t0xA5, 0xBC, 0x44, 0xF0, 0xA5, 0xAA, 0xA7, 0x44,\n\t0xF0, 0xA5, 0xAE, 0xAB, 0x44, 0xF0, 0xA5, 0xB2,\n\t0x80, 0x44, 0xF0, 0xA5, 0xB3, 0x90, 0x44, 0xF0,\n\t0xA5, 0xBE, 0x86, 0x44, 0xF0, 0xA6, 0x87, 0x9A,\n\t0x44, 0xF0, 0xA6, 0x88, 0xA8, 0x44, 0xF0, 0xA6,\n\t0x89, 0x87, 0x44, 0xF0, 0xA6, 0x8B, 0x99, 0x44,\n\t0xF0, 0xA6, 0x8C, 0xBE, 0x44, 0xF0, 0xA6, 0x93,\n\t0x9A, 0x44, 0xF0, 0xA6, 0x94, 0xA3, 0x44, 0xF0,\n\t// Bytes 17c0 - 17ff\n\t0xA6, 0x96, 0xA8, 0x44, 0xF0, 0xA6, 0x9E, 0xA7,\n\t0x44, 0xF0, 0xA6, 0x9E, 0xB5, 0x44, 0xF0, 0xA6,\n\t0xAC, 0xBC, 0x44, 0xF0, 0xA6, 0xB0, 0xB6, 0x44,\n\t0xF0, 0xA6, 0xB3, 0x95, 0x44, 0xF0, 0xA6, 0xB5,\n\t0xAB, 0x44, 0xF0, 0xA6, 0xBC, 0xAC, 0x44, 0xF0,\n\t0xA6, 0xBE, 0xB1, 0x44, 0xF0, 0xA7, 0x83, 0x92,\n\t0x44, 0xF0, 0xA7, 0x8F, 0x8A, 0x44, 0xF0, 0xA7,\n\t0x99, 0xA7, 0x44, 0xF0, 0xA7, 0xA2, 0xAE, 0x44,\n\t// Bytes 1800 - 183f\n\t0xF0, 0xA7, 0xA5, 0xA6, 0x44, 0xF0, 0xA7, 0xB2,\n\t0xA8, 0x44, 0xF0, 0xA7, 0xBB, 0x93, 0x44, 0xF0,\n\t0xA7, 0xBC, 0xAF, 0x44, 0xF0, 0xA8, 0x97, 0x92,\n\t0x44, 0xF0, 0xA8, 0x97, 0xAD, 0x44, 0xF0, 0xA8,\n\t0x9C, 0xAE, 0x44, 0xF0, 0xA8, 0xAF, 0xBA, 0x44,\n\t0xF0, 0xA8, 0xB5, 0xB7, 0x44, 0xF0, 0xA9, 0x85,\n\t0x85, 0x44, 0xF0, 0xA9, 0x87, 0x9F, 0x44, 0xF0,\n\t0xA9, 0x88, 0x9A, 0x44, 0xF0, 0xA9, 0x90, 0x8A,\n\t// Bytes 1840 - 187f\n\t0x44, 0xF0, 0xA9, 0x92, 0x96, 0x44, 0xF0, 0xA9,\n\t0x96, 0xB6, 0x44, 0xF0, 0xA9, 0xAC, 0xB0, 0x44,\n\t0xF0, 0xAA, 0x83, 0x8E, 0x44, 0xF0, 0xAA, 0x84,\n\t0x85, 0x44, 0xF0, 0xAA, 0x88, 0x8E, 0x44, 0xF0,\n\t0xAA, 0x8A, 0x91, 0x44, 0xF0, 0xAA, 0x8E, 0x92,\n\t0x44, 0xF0, 0xAA, 0x98, 0x80, 0x42, 0x21, 0x21,\n\t0x42, 0x21, 0x3F, 0x42, 0x2E, 0x2E, 0x42, 0x30,\n\t0x2C, 0x42, 0x30, 0x2E, 0x42, 0x31, 0x2C, 0x42,\n\t// Bytes 1880 - 18bf\n\t0x31, 0x2E, 0x42, 0x31, 0x30, 0x42, 0x31, 0x31,\n\t0x42, 0x31, 0x32, 0x42, 0x31, 0x33, 0x42, 0x31,\n\t0x34, 0x42, 0x31, 0x35, 0x42, 0x31, 0x36, 0x42,\n\t0x31, 0x37, 0x42, 0x31, 0x38, 0x42, 0x31, 0x39,\n\t0x42, 0x32, 0x2C, 0x42, 0x32, 0x2E, 0x42, 0x32,\n\t0x30, 0x42, 0x32, 0x31, 0x42, 0x32, 0x32, 0x42,\n\t0x32, 0x33, 0x42, 0x32, 0x34, 0x42, 0x32, 0x35,\n\t0x42, 0x32, 0x36, 0x42, 0x32, 0x37, 0x42, 0x32,\n\t// Bytes 18c0 - 18ff\n\t0x38, 0x42, 0x32, 0x39, 0x42, 0x33, 0x2C, 0x42,\n\t0x33, 0x2E, 0x42, 0x33, 0x30, 0x42, 0x33, 0x31,\n\t0x42, 0x33, 0x32, 0x42, 0x33, 0x33, 0x42, 0x33,\n\t0x34, 0x42, 0x33, 0x35, 0x42, 0x33, 0x36, 0x42,\n\t0x33, 0x37, 0x42, 0x33, 0x38, 0x42, 0x33, 0x39,\n\t0x42, 0x34, 0x2C, 0x42, 0x34, 0x2E, 0x42, 0x34,\n\t0x30, 0x42, 0x34, 0x31, 0x42, 0x34, 0x32, 0x42,\n\t0x34, 0x33, 0x42, 0x34, 0x34, 0x42, 0x34, 0x35,\n\t// Bytes 1900 - 193f\n\t0x42, 0x34, 0x36, 0x42, 0x34, 0x37, 0x42, 0x34,\n\t0x38, 0x42, 0x34, 0x39, 0x42, 0x35, 0x2C, 0x42,\n\t0x35, 0x2E, 0x42, 0x35, 0x30, 0x42, 0x36, 0x2C,\n\t0x42, 0x36, 0x2E, 0x42, 0x37, 0x2C, 0x42, 0x37,\n\t0x2E, 0x42, 0x38, 0x2C, 0x42, 0x38, 0x2E, 0x42,\n\t0x39, 0x2C, 0x42, 0x39, 0x2E, 0x42, 0x3D, 0x3D,\n\t0x42, 0x3F, 0x21, 0x42, 0x3F, 0x3F, 0x42, 0x41,\n\t0x55, 0x42, 0x42, 0x71, 0x42, 0x43, 0x44, 0x42,\n\t// Bytes 1940 - 197f\n\t0x44, 0x4A, 0x42, 0x44, 0x5A, 0x42, 0x44, 0x7A,\n\t0x42, 0x47, 0x42, 0x42, 0x47, 0x79, 0x42, 0x48,\n\t0x50, 0x42, 0x48, 0x56, 0x42, 0x48, 0x67, 0x42,\n\t0x48, 0x7A, 0x42, 0x49, 0x49, 0x42, 0x49, 0x4A,\n\t0x42, 0x49, 0x55, 0x42, 0x49, 0x56, 0x42, 0x49,\n\t0x58, 0x42, 0x4B, 0x42, 0x42, 0x4B, 0x4B, 0x42,\n\t0x4B, 0x4D, 0x42, 0x4C, 0x4A, 0x42, 0x4C, 0x6A,\n\t0x42, 0x4D, 0x42, 0x42, 0x4D, 0x43, 0x42, 0x4D,\n\t// Bytes 1980 - 19bf\n\t0x44, 0x42, 0x4D, 0x56, 0x42, 0x4D, 0x57, 0x42,\n\t0x4E, 0x4A, 0x42, 0x4E, 0x6A, 0x42, 0x4E, 0x6F,\n\t0x42, 0x50, 0x48, 0x42, 0x50, 0x52, 0x42, 0x50,\n\t0x61, 0x42, 0x52, 0x73, 0x42, 0x53, 0x44, 0x42,\n\t0x53, 0x4D, 0x42, 0x53, 0x53, 0x42, 0x53, 0x76,\n\t0x42, 0x54, 0x4D, 0x42, 0x56, 0x49, 0x42, 0x57,\n\t0x43, 0x42, 0x57, 0x5A, 0x42, 0x57, 0x62, 0x42,\n\t0x58, 0x49, 0x42, 0x63, 0x63, 0x42, 0x63, 0x64,\n\t// Bytes 19c0 - 19ff\n\t0x42, 0x63, 0x6D, 0x42, 0x64, 0x42, 0x42, 0x64,\n\t0x61, 0x42, 0x64, 0x6C, 0x42, 0x64, 0x6D, 0x42,\n\t0x64, 0x7A, 0x42, 0x65, 0x56, 0x42, 0x66, 0x66,\n\t0x42, 0x66, 0x69, 0x42, 0x66, 0x6C, 0x42, 0x66,\n\t0x6D, 0x42, 0x68, 0x61, 0x42, 0x69, 0x69, 0x42,\n\t0x69, 0x6A, 0x42, 0x69, 0x6E, 0x42, 0x69, 0x76,\n\t0x42, 0x69, 0x78, 0x42, 0x6B, 0x41, 0x42, 0x6B,\n\t0x56, 0x42, 0x6B, 0x57, 0x42, 0x6B, 0x67, 0x42,\n\t// Bytes 1a00 - 1a3f\n\t0x6B, 0x6C, 0x42, 0x6B, 0x6D, 0x42, 0x6B, 0x74,\n\t0x42, 0x6C, 0x6A, 0x42, 0x6C, 0x6D, 0x42, 0x6C,\n\t0x6E, 0x42, 0x6C, 0x78, 0x42, 0x6D, 0x32, 0x42,\n\t0x6D, 0x33, 0x42, 0x6D, 0x41, 0x42, 0x6D, 0x56,\n\t0x42, 0x6D, 0x57, 0x42, 0x6D, 0x62, 0x42, 0x6D,\n\t0x67, 0x42, 0x6D, 0x6C, 0x42, 0x6D, 0x6D, 0x42,\n\t0x6D, 0x73, 0x42, 0x6E, 0x41, 0x42, 0x6E, 0x46,\n\t0x42, 0x6E, 0x56, 0x42, 0x6E, 0x57, 0x42, 0x6E,\n\t// Bytes 1a40 - 1a7f\n\t0x6A, 0x42, 0x6E, 0x6D, 0x42, 0x6E, 0x73, 0x42,\n\t0x6F, 0x56, 0x42, 0x70, 0x41, 0x42, 0x70, 0x46,\n\t0x42, 0x70, 0x56, 0x42, 0x70, 0x57, 0x42, 0x70,\n\t0x63, 0x42, 0x70, 0x73, 0x42, 0x73, 0x72, 0x42,\n\t0x73, 0x74, 0x42, 0x76, 0x69, 0x42, 0x78, 0x69,\n\t0x43, 0x28, 0x31, 0x29, 0x43, 0x28, 0x32, 0x29,\n\t0x43, 0x28, 0x33, 0x29, 0x43, 0x28, 0x34, 0x29,\n\t0x43, 0x28, 0x35, 0x29, 0x43, 0x28, 0x36, 0x29,\n\t// Bytes 1a80 - 1abf\n\t0x43, 0x28, 0x37, 0x29, 0x43, 0x28, 0x38, 0x29,\n\t0x43, 0x28, 0x39, 0x29, 0x43, 0x28, 0x41, 0x29,\n\t0x43, 0x28, 0x42, 0x29, 0x43, 0x28, 0x43, 0x29,\n\t0x43, 0x28, 0x44, 0x29, 0x43, 0x28, 0x45, 0x29,\n\t0x43, 0x28, 0x46, 0x29, 0x43, 0x28, 0x47, 0x29,\n\t0x43, 0x28, 0x48, 0x29, 0x43, 0x28, 0x49, 0x29,\n\t0x43, 0x28, 0x4A, 0x29, 0x43, 0x28, 0x4B, 0x29,\n\t0x43, 0x28, 0x4C, 0x29, 0x43, 0x28, 0x4D, 0x29,\n\t// Bytes 1ac0 - 1aff\n\t0x43, 0x28, 0x4E, 0x29, 0x43, 0x28, 0x4F, 0x29,\n\t0x43, 0x28, 0x50, 0x29, 0x43, 0x28, 0x51, 0x29,\n\t0x43, 0x28, 0x52, 0x29, 0x43, 0x28, 0x53, 0x29,\n\t0x43, 0x28, 0x54, 0x29, 0x43, 0x28, 0x55, 0x29,\n\t0x43, 0x28, 0x56, 0x29, 0x43, 0x28, 0x57, 0x29,\n\t0x43, 0x28, 0x58, 0x29, 0x43, 0x28, 0x59, 0x29,\n\t0x43, 0x28, 0x5A, 0x29, 0x43, 0x28, 0x61, 0x29,\n\t0x43, 0x28, 0x62, 0x29, 0x43, 0x28, 0x63, 0x29,\n\t// Bytes 1b00 - 1b3f\n\t0x43, 0x28, 0x64, 0x29, 0x43, 0x28, 0x65, 0x29,\n\t0x43, 0x28, 0x66, 0x29, 0x43, 0x28, 0x67, 0x29,\n\t0x43, 0x28, 0x68, 0x29, 0x43, 0x28, 0x69, 0x29,\n\t0x43, 0x28, 0x6A, 0x29, 0x43, 0x28, 0x6B, 0x29,\n\t0x43, 0x28, 0x6C, 0x29, 0x43, 0x28, 0x6D, 0x29,\n\t0x43, 0x28, 0x6E, 0x29, 0x43, 0x28, 0x6F, 0x29,\n\t0x43, 0x28, 0x70, 0x29, 0x43, 0x28, 0x71, 0x29,\n\t0x43, 0x28, 0x72, 0x29, 0x43, 0x28, 0x73, 0x29,\n\t// Bytes 1b40 - 1b7f\n\t0x43, 0x28, 0x74, 0x29, 0x43, 0x28, 0x75, 0x29,\n\t0x43, 0x28, 0x76, 0x29, 0x43, 0x28, 0x77, 0x29,\n\t0x43, 0x28, 0x78, 0x29, 0x43, 0x28, 0x79, 0x29,\n\t0x43, 0x28, 0x7A, 0x29, 0x43, 0x2E, 0x2E, 0x2E,\n\t0x43, 0x31, 0x30, 0x2E, 0x43, 0x31, 0x31, 0x2E,\n\t0x43, 0x31, 0x32, 0x2E, 0x43, 0x31, 0x33, 0x2E,\n\t0x43, 0x31, 0x34, 0x2E, 0x43, 0x31, 0x35, 0x2E,\n\t0x43, 0x31, 0x36, 0x2E, 0x43, 0x31, 0x37, 0x2E,\n\t// Bytes 1b80 - 1bbf\n\t0x43, 0x31, 0x38, 0x2E, 0x43, 0x31, 0x39, 0x2E,\n\t0x43, 0x32, 0x30, 0x2E, 0x43, 0x3A, 0x3A, 0x3D,\n\t0x43, 0x3D, 0x3D, 0x3D, 0x43, 0x43, 0x6F, 0x2E,\n\t0x43, 0x46, 0x41, 0x58, 0x43, 0x47, 0x48, 0x7A,\n\t0x43, 0x47, 0x50, 0x61, 0x43, 0x49, 0x49, 0x49,\n\t0x43, 0x4C, 0x54, 0x44, 0x43, 0x4C, 0xC2, 0xB7,\n\t0x43, 0x4D, 0x48, 0x7A, 0x43, 0x4D, 0x50, 0x61,\n\t0x43, 0x4D, 0xCE, 0xA9, 0x43, 0x50, 0x50, 0x4D,\n\t// Bytes 1bc0 - 1bff\n\t0x43, 0x50, 0x50, 0x56, 0x43, 0x50, 0x54, 0x45,\n\t0x43, 0x54, 0x45, 0x4C, 0x43, 0x54, 0x48, 0x7A,\n\t0x43, 0x56, 0x49, 0x49, 0x43, 0x58, 0x49, 0x49,\n\t0x43, 0x61, 0x2F, 0x63, 0x43, 0x61, 0x2F, 0x73,\n\t0x43, 0x61, 0xCA, 0xBE, 0x43, 0x62, 0x61, 0x72,\n\t0x43, 0x63, 0x2F, 0x6F, 0x43, 0x63, 0x2F, 0x75,\n\t0x43, 0x63, 0x61, 0x6C, 0x43, 0x63, 0x6D, 0x32,\n\t0x43, 0x63, 0x6D, 0x33, 0x43, 0x64, 0x6D, 0x32,\n\t// Bytes 1c00 - 1c3f\n\t0x43, 0x64, 0x6D, 0x33, 0x43, 0x65, 0x72, 0x67,\n\t0x43, 0x66, 0x66, 0x69, 0x43, 0x66, 0x66, 0x6C,\n\t0x43, 0x67, 0x61, 0x6C, 0x43, 0x68, 0x50, 0x61,\n\t0x43, 0x69, 0x69, 0x69, 0x43, 0x6B, 0x48, 0x7A,\n\t0x43, 0x6B, 0x50, 0x61, 0x43, 0x6B, 0x6D, 0x32,\n\t0x43, 0x6B, 0x6D, 0x33, 0x43, 0x6B, 0xCE, 0xA9,\n\t0x43, 0x6C, 0x6F, 0x67, 0x43, 0x6C, 0xC2, 0xB7,\n\t0x43, 0x6D, 0x69, 0x6C, 0x43, 0x6D, 0x6D, 0x32,\n\t// Bytes 1c40 - 1c7f\n\t0x43, 0x6D, 0x6D, 0x33, 0x43, 0x6D, 0x6F, 0x6C,\n\t0x43, 0x72, 0x61, 0x64, 0x43, 0x76, 0x69, 0x69,\n\t0x43, 0x78, 0x69, 0x69, 0x43, 0xC2, 0xB0, 0x43,\n\t0x43, 0xC2, 0xB0, 0x46, 0x43, 0xCA, 0xBC, 0x6E,\n\t0x43, 0xCE, 0xBC, 0x41, 0x43, 0xCE, 0xBC, 0x46,\n\t0x43, 0xCE, 0xBC, 0x56, 0x43, 0xCE, 0xBC, 0x57,\n\t0x43, 0xCE, 0xBC, 0x67, 0x43, 0xCE, 0xBC, 0x6C,\n\t0x43, 0xCE, 0xBC, 0x6D, 0x43, 0xCE, 0xBC, 0x73,\n\t// Bytes 1c80 - 1cbf\n\t0x44, 0x28, 0x31, 0x30, 0x29, 0x44, 0x28, 0x31,\n\t0x31, 0x29, 0x44, 0x28, 0x31, 0x32, 0x29, 0x44,\n\t0x28, 0x31, 0x33, 0x29, 0x44, 0x28, 0x31, 0x34,\n\t0x29, 0x44, 0x28, 0x31, 0x35, 0x29, 0x44, 0x28,\n\t0x31, 0x36, 0x29, 0x44, 0x28, 0x31, 0x37, 0x29,\n\t0x44, 0x28, 0x31, 0x38, 0x29, 0x44, 0x28, 0x31,\n\t0x39, 0x29, 0x44, 0x28, 0x32, 0x30, 0x29, 0x44,\n\t0x30, 0xE7, 0x82, 0xB9, 0x44, 0x31, 0xE2, 0x81,\n\t// Bytes 1cc0 - 1cff\n\t0x84, 0x44, 0x31, 0xE6, 0x97, 0xA5, 0x44, 0x31,\n\t0xE6, 0x9C, 0x88, 0x44, 0x31, 0xE7, 0x82, 0xB9,\n\t0x44, 0x32, 0xE6, 0x97, 0xA5, 0x44, 0x32, 0xE6,\n\t0x9C, 0x88, 0x44, 0x32, 0xE7, 0x82, 0xB9, 0x44,\n\t0x33, 0xE6, 0x97, 0xA5, 0x44, 0x33, 0xE6, 0x9C,\n\t0x88, 0x44, 0x33, 0xE7, 0x82, 0xB9, 0x44, 0x34,\n\t0xE6, 0x97, 0xA5, 0x44, 0x34, 0xE6, 0x9C, 0x88,\n\t0x44, 0x34, 0xE7, 0x82, 0xB9, 0x44, 0x35, 0xE6,\n\t// Bytes 1d00 - 1d3f\n\t0x97, 0xA5, 0x44, 0x35, 0xE6, 0x9C, 0x88, 0x44,\n\t0x35, 0xE7, 0x82, 0xB9, 0x44, 0x36, 0xE6, 0x97,\n\t0xA5, 0x44, 0x36, 0xE6, 0x9C, 0x88, 0x44, 0x36,\n\t0xE7, 0x82, 0xB9, 0x44, 0x37, 0xE6, 0x97, 0xA5,\n\t0x44, 0x37, 0xE6, 0x9C, 0x88, 0x44, 0x37, 0xE7,\n\t0x82, 0xB9, 0x44, 0x38, 0xE6, 0x97, 0xA5, 0x44,\n\t0x38, 0xE6, 0x9C, 0x88, 0x44, 0x38, 0xE7, 0x82,\n\t0xB9, 0x44, 0x39, 0xE6, 0x97, 0xA5, 0x44, 0x39,\n\t// Bytes 1d40 - 1d7f\n\t0xE6, 0x9C, 0x88, 0x44, 0x39, 0xE7, 0x82, 0xB9,\n\t0x44, 0x56, 0x49, 0x49, 0x49, 0x44, 0x61, 0x2E,\n\t0x6D, 0x2E, 0x44, 0x6B, 0x63, 0x61, 0x6C, 0x44,\n\t0x70, 0x2E, 0x6D, 0x2E, 0x44, 0x76, 0x69, 0x69,\n\t0x69, 0x44, 0xD5, 0xA5, 0xD6, 0x82, 0x44, 0xD5,\n\t0xB4, 0xD5, 0xA5, 0x44, 0xD5, 0xB4, 0xD5, 0xAB,\n\t0x44, 0xD5, 0xB4, 0xD5, 0xAD, 0x44, 0xD5, 0xB4,\n\t0xD5, 0xB6, 0x44, 0xD5, 0xBE, 0xD5, 0xB6, 0x44,\n\t// Bytes 1d80 - 1dbf\n\t0xD7, 0x90, 0xD7, 0x9C, 0x44, 0xD8, 0xA7, 0xD9,\n\t0xB4, 0x44, 0xD8, 0xA8, 0xD8, 0xAC, 0x44, 0xD8,\n\t0xA8, 0xD8, 0xAD, 0x44, 0xD8, 0xA8, 0xD8, 0xAE,\n\t0x44, 0xD8, 0xA8, 0xD8, 0xB1, 0x44, 0xD8, 0xA8,\n\t0xD8, 0xB2, 0x44, 0xD8, 0xA8, 0xD9, 0x85, 0x44,\n\t0xD8, 0xA8, 0xD9, 0x86, 0x44, 0xD8, 0xA8, 0xD9,\n\t0x87, 0x44, 0xD8, 0xA8, 0xD9, 0x89, 0x44, 0xD8,\n\t0xA8, 0xD9, 0x8A, 0x44, 0xD8, 0xAA, 0xD8, 0xAC,\n\t// Bytes 1dc0 - 1dff\n\t0x44, 0xD8, 0xAA, 0xD8, 0xAD, 0x44, 0xD8, 0xAA,\n\t0xD8, 0xAE, 0x44, 0xD8, 0xAA, 0xD8, 0xB1, 0x44,\n\t0xD8, 0xAA, 0xD8, 0xB2, 0x44, 0xD8, 0xAA, 0xD9,\n\t0x85, 0x44, 0xD8, 0xAA, 0xD9, 0x86, 0x44, 0xD8,\n\t0xAA, 0xD9, 0x87, 0x44, 0xD8, 0xAA, 0xD9, 0x89,\n\t0x44, 0xD8, 0xAA, 0xD9, 0x8A, 0x44, 0xD8, 0xAB,\n\t0xD8, 0xAC, 0x44, 0xD8, 0xAB, 0xD8, 0xB1, 0x44,\n\t0xD8, 0xAB, 0xD8, 0xB2, 0x44, 0xD8, 0xAB, 0xD9,\n\t// Bytes 1e00 - 1e3f\n\t0x85, 0x44, 0xD8, 0xAB, 0xD9, 0x86, 0x44, 0xD8,\n\t0xAB, 0xD9, 0x87, 0x44, 0xD8, 0xAB, 0xD9, 0x89,\n\t0x44, 0xD8, 0xAB, 0xD9, 0x8A, 0x44, 0xD8, 0xAC,\n\t0xD8, 0xAD, 0x44, 0xD8, 0xAC, 0xD9, 0x85, 0x44,\n\t0xD8, 0xAC, 0xD9, 0x89, 0x44, 0xD8, 0xAC, 0xD9,\n\t0x8A, 0x44, 0xD8, 0xAD, 0xD8, 0xAC, 0x44, 0xD8,\n\t0xAD, 0xD9, 0x85, 0x44, 0xD8, 0xAD, 0xD9, 0x89,\n\t0x44, 0xD8, 0xAD, 0xD9, 0x8A, 0x44, 0xD8, 0xAE,\n\t// Bytes 1e40 - 1e7f\n\t0xD8, 0xAC, 0x44, 0xD8, 0xAE, 0xD8, 0xAD, 0x44,\n\t0xD8, 0xAE, 0xD9, 0x85, 0x44, 0xD8, 0xAE, 0xD9,\n\t0x89, 0x44, 0xD8, 0xAE, 0xD9, 0x8A, 0x44, 0xD8,\n\t0xB3, 0xD8, 0xAC, 0x44, 0xD8, 0xB3, 0xD8, 0xAD,\n\t0x44, 0xD8, 0xB3, 0xD8, 0xAE, 0x44, 0xD8, 0xB3,\n\t0xD8, 0xB1, 0x44, 0xD8, 0xB3, 0xD9, 0x85, 0x44,\n\t0xD8, 0xB3, 0xD9, 0x87, 0x44, 0xD8, 0xB3, 0xD9,\n\t0x89, 0x44, 0xD8, 0xB3, 0xD9, 0x8A, 0x44, 0xD8,\n\t// Bytes 1e80 - 1ebf\n\t0xB4, 0xD8, 0xAC, 0x44, 0xD8, 0xB4, 0xD8, 0xAD,\n\t0x44, 0xD8, 0xB4, 0xD8, 0xAE, 0x44, 0xD8, 0xB4,\n\t0xD8, 0xB1, 0x44, 0xD8, 0xB4, 0xD9, 0x85, 0x44,\n\t0xD8, 0xB4, 0xD9, 0x87, 0x44, 0xD8, 0xB4, 0xD9,\n\t0x89, 0x44, 0xD8, 0xB4, 0xD9, 0x8A, 0x44, 0xD8,\n\t0xB5, 0xD8, 0xAD, 0x44, 0xD8, 0xB5, 0xD8, 0xAE,\n\t0x44, 0xD8, 0xB5, 0xD8, 0xB1, 0x44, 0xD8, 0xB5,\n\t0xD9, 0x85, 0x44, 0xD8, 0xB5, 0xD9, 0x89, 0x44,\n\t// Bytes 1ec0 - 1eff\n\t0xD8, 0xB5, 0xD9, 0x8A, 0x44, 0xD8, 0xB6, 0xD8,\n\t0xAC, 0x44, 0xD8, 0xB6, 0xD8, 0xAD, 0x44, 0xD8,\n\t0xB6, 0xD8, 0xAE, 0x44, 0xD8, 0xB6, 0xD8, 0xB1,\n\t0x44, 0xD8, 0xB6, 0xD9, 0x85, 0x44, 0xD8, 0xB6,\n\t0xD9, 0x89, 0x44, 0xD8, 0xB6, 0xD9, 0x8A, 0x44,\n\t0xD8, 0xB7, 0xD8, 0xAD, 0x44, 0xD8, 0xB7, 0xD9,\n\t0x85, 0x44, 0xD8, 0xB7, 0xD9, 0x89, 0x44, 0xD8,\n\t0xB7, 0xD9, 0x8A, 0x44, 0xD8, 0xB8, 0xD9, 0x85,\n\t// Bytes 1f00 - 1f3f\n\t0x44, 0xD8, 0xB9, 0xD8, 0xAC, 0x44, 0xD8, 0xB9,\n\t0xD9, 0x85, 0x44, 0xD8, 0xB9, 0xD9, 0x89, 0x44,\n\t0xD8, 0xB9, 0xD9, 0x8A, 0x44, 0xD8, 0xBA, 0xD8,\n\t0xAC, 0x44, 0xD8, 0xBA, 0xD9, 0x85, 0x44, 0xD8,\n\t0xBA, 0xD9, 0x89, 0x44, 0xD8, 0xBA, 0xD9, 0x8A,\n\t0x44, 0xD9, 0x81, 0xD8, 0xAC, 0x44, 0xD9, 0x81,\n\t0xD8, 0xAD, 0x44, 0xD9, 0x81, 0xD8, 0xAE, 0x44,\n\t0xD9, 0x81, 0xD9, 0x85, 0x44, 0xD9, 0x81, 0xD9,\n\t// Bytes 1f40 - 1f7f\n\t0x89, 0x44, 0xD9, 0x81, 0xD9, 0x8A, 0x44, 0xD9,\n\t0x82, 0xD8, 0xAD, 0x44, 0xD9, 0x82, 0xD9, 0x85,\n\t0x44, 0xD9, 0x82, 0xD9, 0x89, 0x44, 0xD9, 0x82,\n\t0xD9, 0x8A, 0x44, 0xD9, 0x83, 0xD8, 0xA7, 0x44,\n\t0xD9, 0x83, 0xD8, 0xAC, 0x44, 0xD9, 0x83, 0xD8,\n\t0xAD, 0x44, 0xD9, 0x83, 0xD8, 0xAE, 0x44, 0xD9,\n\t0x83, 0xD9, 0x84, 0x44, 0xD9, 0x83, 0xD9, 0x85,\n\t0x44, 0xD9, 0x83, 0xD9, 0x89, 0x44, 0xD9, 0x83,\n\t// Bytes 1f80 - 1fbf\n\t0xD9, 0x8A, 0x44, 0xD9, 0x84, 0xD8, 0xA7, 0x44,\n\t0xD9, 0x84, 0xD8, 0xAC, 0x44, 0xD9, 0x84, 0xD8,\n\t0xAD, 0x44, 0xD9, 0x84, 0xD8, 0xAE, 0x44, 0xD9,\n\t0x84, 0xD9, 0x85, 0x44, 0xD9, 0x84, 0xD9, 0x87,\n\t0x44, 0xD9, 0x84, 0xD9, 0x89, 0x44, 0xD9, 0x84,\n\t0xD9, 0x8A, 0x44, 0xD9, 0x85, 0xD8, 0xA7, 0x44,\n\t0xD9, 0x85, 0xD8, 0xAC, 0x44, 0xD9, 0x85, 0xD8,\n\t0xAD, 0x44, 0xD9, 0x85, 0xD8, 0xAE, 0x44, 0xD9,\n\t// Bytes 1fc0 - 1fff\n\t0x85, 0xD9, 0x85, 0x44, 0xD9, 0x85, 0xD9, 0x89,\n\t0x44, 0xD9, 0x85, 0xD9, 0x8A, 0x44, 0xD9, 0x86,\n\t0xD8, 0xAC, 0x44, 0xD9, 0x86, 0xD8, 0xAD, 0x44,\n\t0xD9, 0x86, 0xD8, 0xAE, 0x44, 0xD9, 0x86, 0xD8,\n\t0xB1, 0x44, 0xD9, 0x86, 0xD8, 0xB2, 0x44, 0xD9,\n\t0x86, 0xD9, 0x85, 0x44, 0xD9, 0x86, 0xD9, 0x86,\n\t0x44, 0xD9, 0x86, 0xD9, 0x87, 0x44, 0xD9, 0x86,\n\t0xD9, 0x89, 0x44, 0xD9, 0x86, 0xD9, 0x8A, 0x44,\n\t// Bytes 2000 - 203f\n\t0xD9, 0x87, 0xD8, 0xAC, 0x44, 0xD9, 0x87, 0xD9,\n\t0x85, 0x44, 0xD9, 0x87, 0xD9, 0x89, 0x44, 0xD9,\n\t0x87, 0xD9, 0x8A, 0x44, 0xD9, 0x88, 0xD9, 0xB4,\n\t0x44, 0xD9, 0x8A, 0xD8, 0xAC, 0x44, 0xD9, 0x8A,\n\t0xD8, 0xAD, 0x44, 0xD9, 0x8A, 0xD8, 0xAE, 0x44,\n\t0xD9, 0x8A, 0xD8, 0xB1, 0x44, 0xD9, 0x8A, 0xD8,\n\t0xB2, 0x44, 0xD9, 0x8A, 0xD9, 0x85, 0x44, 0xD9,\n\t0x8A, 0xD9, 0x86, 0x44, 0xD9, 0x8A, 0xD9, 0x87,\n\t// Bytes 2040 - 207f\n\t0x44, 0xD9, 0x8A, 0xD9, 0x89, 0x44, 0xD9, 0x8A,\n\t0xD9, 0x8A, 0x44, 0xD9, 0x8A, 0xD9, 0xB4, 0x44,\n\t0xDB, 0x87, 0xD9, 0xB4, 0x45, 0x28, 0xE1, 0x84,\n\t0x80, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x82, 0x29,\n\t0x45, 0x28, 0xE1, 0x84, 0x83, 0x29, 0x45, 0x28,\n\t0xE1, 0x84, 0x85, 0x29, 0x45, 0x28, 0xE1, 0x84,\n\t0x86, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x87, 0x29,\n\t0x45, 0x28, 0xE1, 0x84, 0x89, 0x29, 0x45, 0x28,\n\t// Bytes 2080 - 20bf\n\t0xE1, 0x84, 0x8B, 0x29, 0x45, 0x28, 0xE1, 0x84,\n\t0x8C, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x8E, 0x29,\n\t0x45, 0x28, 0xE1, 0x84, 0x8F, 0x29, 0x45, 0x28,\n\t0xE1, 0x84, 0x90, 0x29, 0x45, 0x28, 0xE1, 0x84,\n\t0x91, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x92, 0x29,\n\t0x45, 0x28, 0xE4, 0xB8, 0x80, 0x29, 0x45, 0x28,\n\t0xE4, 0xB8, 0x83, 0x29, 0x45, 0x28, 0xE4, 0xB8,\n\t0x89, 0x29, 0x45, 0x28, 0xE4, 0xB9, 0x9D, 0x29,\n\t// Bytes 20c0 - 20ff\n\t0x45, 0x28, 0xE4, 0xBA, 0x8C, 0x29, 0x45, 0x28,\n\t0xE4, 0xBA, 0x94, 0x29, 0x45, 0x28, 0xE4, 0xBB,\n\t0xA3, 0x29, 0x45, 0x28, 0xE4, 0xBC, 0x81, 0x29,\n\t0x45, 0x28, 0xE4, 0xBC, 0x91, 0x29, 0x45, 0x28,\n\t0xE5, 0x85, 0xAB, 0x29, 0x45, 0x28, 0xE5, 0x85,\n\t0xAD, 0x29, 0x45, 0x28, 0xE5, 0x8A, 0xB4, 0x29,\n\t0x45, 0x28, 0xE5, 0x8D, 0x81, 0x29, 0x45, 0x28,\n\t0xE5, 0x8D, 0x94, 0x29, 0x45, 0x28, 0xE5, 0x90,\n\t// Bytes 2100 - 213f\n\t0x8D, 0x29, 0x45, 0x28, 0xE5, 0x91, 0xBC, 0x29,\n\t0x45, 0x28, 0xE5, 0x9B, 0x9B, 0x29, 0x45, 0x28,\n\t0xE5, 0x9C, 0x9F, 0x29, 0x45, 0x28, 0xE5, 0xAD,\n\t0xA6, 0x29, 0x45, 0x28, 0xE6, 0x97, 0xA5, 0x29,\n\t0x45, 0x28, 0xE6, 0x9C, 0x88, 0x29, 0x45, 0x28,\n\t0xE6, 0x9C, 0x89, 0x29, 0x45, 0x28, 0xE6, 0x9C,\n\t0xA8, 0x29, 0x45, 0x28, 0xE6, 0xA0, 0xAA, 0x29,\n\t0x45, 0x28, 0xE6, 0xB0, 0xB4, 0x29, 0x45, 0x28,\n\t// Bytes 2140 - 217f\n\t0xE7, 0x81, 0xAB, 0x29, 0x45, 0x28, 0xE7, 0x89,\n\t0xB9, 0x29, 0x45, 0x28, 0xE7, 0x9B, 0xA3, 0x29,\n\t0x45, 0x28, 0xE7, 0xA4, 0xBE, 0x29, 0x45, 0x28,\n\t0xE7, 0xA5, 0x9D, 0x29, 0x45, 0x28, 0xE7, 0xA5,\n\t0xAD, 0x29, 0x45, 0x28, 0xE8, 0x87, 0xAA, 0x29,\n\t0x45, 0x28, 0xE8, 0x87, 0xB3, 0x29, 0x45, 0x28,\n\t0xE8, 0xB2, 0xA1, 0x29, 0x45, 0x28, 0xE8, 0xB3,\n\t0x87, 0x29, 0x45, 0x28, 0xE9, 0x87, 0x91, 0x29,\n\t// Bytes 2180 - 21bf\n\t0x45, 0x30, 0xE2, 0x81, 0x84, 0x33, 0x45, 0x31,\n\t0x30, 0xE6, 0x97, 0xA5, 0x45, 0x31, 0x30, 0xE6,\n\t0x9C, 0x88, 0x45, 0x31, 0x30, 0xE7, 0x82, 0xB9,\n\t0x45, 0x31, 0x31, 0xE6, 0x97, 0xA5, 0x45, 0x31,\n\t0x31, 0xE6, 0x9C, 0x88, 0x45, 0x31, 0x31, 0xE7,\n\t0x82, 0xB9, 0x45, 0x31, 0x32, 0xE6, 0x97, 0xA5,\n\t0x45, 0x31, 0x32, 0xE6, 0x9C, 0x88, 0x45, 0x31,\n\t0x32, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x33, 0xE6,\n\t// Bytes 21c0 - 21ff\n\t0x97, 0xA5, 0x45, 0x31, 0x33, 0xE7, 0x82, 0xB9,\n\t0x45, 0x31, 0x34, 0xE6, 0x97, 0xA5, 0x45, 0x31,\n\t0x34, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x35, 0xE6,\n\t0x97, 0xA5, 0x45, 0x31, 0x35, 0xE7, 0x82, 0xB9,\n\t0x45, 0x31, 0x36, 0xE6, 0x97, 0xA5, 0x45, 0x31,\n\t0x36, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x37, 0xE6,\n\t0x97, 0xA5, 0x45, 0x31, 0x37, 0xE7, 0x82, 0xB9,\n\t0x45, 0x31, 0x38, 0xE6, 0x97, 0xA5, 0x45, 0x31,\n\t// Bytes 2200 - 223f\n\t0x38, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x39, 0xE6,\n\t0x97, 0xA5, 0x45, 0x31, 0x39, 0xE7, 0x82, 0xB9,\n\t0x45, 0x31, 0xE2, 0x81, 0x84, 0x32, 0x45, 0x31,\n\t0xE2, 0x81, 0x84, 0x33, 0x45, 0x31, 0xE2, 0x81,\n\t0x84, 0x34, 0x45, 0x31, 0xE2, 0x81, 0x84, 0x35,\n\t0x45, 0x31, 0xE2, 0x81, 0x84, 0x36, 0x45, 0x31,\n\t0xE2, 0x81, 0x84, 0x37, 0x45, 0x31, 0xE2, 0x81,\n\t0x84, 0x38, 0x45, 0x31, 0xE2, 0x81, 0x84, 0x39,\n\t// Bytes 2240 - 227f\n\t0x45, 0x32, 0x30, 0xE6, 0x97, 0xA5, 0x45, 0x32,\n\t0x30, 0xE7, 0x82, 0xB9, 0x45, 0x32, 0x31, 0xE6,\n\t0x97, 0xA5, 0x45, 0x32, 0x31, 0xE7, 0x82, 0xB9,\n\t0x45, 0x32, 0x32, 0xE6, 0x97, 0xA5, 0x45, 0x32,\n\t0x32, 0xE7, 0x82, 0xB9, 0x45, 0x32, 0x33, 0xE6,\n\t0x97, 0xA5, 0x45, 0x32, 0x33, 0xE7, 0x82, 0xB9,\n\t0x45, 0x32, 0x34, 0xE6, 0x97, 0xA5, 0x45, 0x32,\n\t0x34, 0xE7, 0x82, 0xB9, 0x45, 0x32, 0x35, 0xE6,\n\t// Bytes 2280 - 22bf\n\t0x97, 0xA5, 0x45, 0x32, 0x36, 0xE6, 0x97, 0xA5,\n\t0x45, 0x32, 0x37, 0xE6, 0x97, 0xA5, 0x45, 0x32,\n\t0x38, 0xE6, 0x97, 0xA5, 0x45, 0x32, 0x39, 0xE6,\n\t0x97, 0xA5, 0x45, 0x32, 0xE2, 0x81, 0x84, 0x33,\n\t0x45, 0x32, 0xE2, 0x81, 0x84, 0x35, 0x45, 0x33,\n\t0x30, 0xE6, 0x97, 0xA5, 0x45, 0x33, 0x31, 0xE6,\n\t0x97, 0xA5, 0x45, 0x33, 0xE2, 0x81, 0x84, 0x34,\n\t0x45, 0x33, 0xE2, 0x81, 0x84, 0x35, 0x45, 0x33,\n\t// Bytes 22c0 - 22ff\n\t0xE2, 0x81, 0x84, 0x38, 0x45, 0x34, 0xE2, 0x81,\n\t0x84, 0x35, 0x45, 0x35, 0xE2, 0x81, 0x84, 0x36,\n\t0x45, 0x35, 0xE2, 0x81, 0x84, 0x38, 0x45, 0x37,\n\t0xE2, 0x81, 0x84, 0x38, 0x45, 0x41, 0xE2, 0x88,\n\t0x95, 0x6D, 0x45, 0x56, 0xE2, 0x88, 0x95, 0x6D,\n\t0x45, 0x6D, 0xE2, 0x88, 0x95, 0x73, 0x46, 0x31,\n\t0xE2, 0x81, 0x84, 0x31, 0x30, 0x46, 0x43, 0xE2,\n\t0x88, 0x95, 0x6B, 0x67, 0x46, 0x6D, 0xE2, 0x88,\n\t// Bytes 2300 - 233f\n\t0x95, 0x73, 0x32, 0x46, 0xD8, 0xA8, 0xD8, 0xAD,\n\t0xD9, 0x8A, 0x46, 0xD8, 0xA8, 0xD8, 0xAE, 0xD9,\n\t0x8A, 0x46, 0xD8, 0xAA, 0xD8, 0xAC, 0xD9, 0x85,\n\t0x46, 0xD8, 0xAA, 0xD8, 0xAC, 0xD9, 0x89, 0x46,\n\t0xD8, 0xAA, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD8,\n\t0xAA, 0xD8, 0xAD, 0xD8, 0xAC, 0x46, 0xD8, 0xAA,\n\t0xD8, 0xAD, 0xD9, 0x85, 0x46, 0xD8, 0xAA, 0xD8,\n\t0xAE, 0xD9, 0x85, 0x46, 0xD8, 0xAA, 0xD8, 0xAE,\n\t// Bytes 2340 - 237f\n\t0xD9, 0x89, 0x46, 0xD8, 0xAA, 0xD8, 0xAE, 0xD9,\n\t0x8A, 0x46, 0xD8, 0xAA, 0xD9, 0x85, 0xD8, 0xAC,\n\t0x46, 0xD8, 0xAA, 0xD9, 0x85, 0xD8, 0xAD, 0x46,\n\t0xD8, 0xAA, 0xD9, 0x85, 0xD8, 0xAE, 0x46, 0xD8,\n\t0xAA, 0xD9, 0x85, 0xD9, 0x89, 0x46, 0xD8, 0xAA,\n\t0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD8, 0xAC, 0xD8,\n\t0xAD, 0xD9, 0x89, 0x46, 0xD8, 0xAC, 0xD8, 0xAD,\n\t0xD9, 0x8A, 0x46, 0xD8, 0xAC, 0xD9, 0x85, 0xD8,\n\t// Bytes 2380 - 23bf\n\t0xAD, 0x46, 0xD8, 0xAC, 0xD9, 0x85, 0xD9, 0x89,\n\t0x46, 0xD8, 0xAC, 0xD9, 0x85, 0xD9, 0x8A, 0x46,\n\t0xD8, 0xAD, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD8,\n\t0xAD, 0xD9, 0x85, 0xD9, 0x89, 0x46, 0xD8, 0xAD,\n\t0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD8, 0xB3, 0xD8,\n\t0xAC, 0xD8, 0xAD, 0x46, 0xD8, 0xB3, 0xD8, 0xAC,\n\t0xD9, 0x89, 0x46, 0xD8, 0xB3, 0xD8, 0xAD, 0xD8,\n\t0xAC, 0x46, 0xD8, 0xB3, 0xD8, 0xAE, 0xD9, 0x89,\n\t// Bytes 23c0 - 23ff\n\t0x46, 0xD8, 0xB3, 0xD8, 0xAE, 0xD9, 0x8A, 0x46,\n\t0xD8, 0xB3, 0xD9, 0x85, 0xD8, 0xAC, 0x46, 0xD8,\n\t0xB3, 0xD9, 0x85, 0xD8, 0xAD, 0x46, 0xD8, 0xB3,\n\t0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD8, 0xB4, 0xD8,\n\t0xAC, 0xD9, 0x8A, 0x46, 0xD8, 0xB4, 0xD8, 0xAD,\n\t0xD9, 0x85, 0x46, 0xD8, 0xB4, 0xD8, 0xAD, 0xD9,\n\t0x8A, 0x46, 0xD8, 0xB4, 0xD9, 0x85, 0xD8, 0xAE,\n\t0x46, 0xD8, 0xB4, 0xD9, 0x85, 0xD9, 0x85, 0x46,\n\t// Bytes 2400 - 243f\n\t0xD8, 0xB5, 0xD8, 0xAD, 0xD8, 0xAD, 0x46, 0xD8,\n\t0xB5, 0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD8, 0xB5,\n\t0xD9, 0x84, 0xD9, 0x89, 0x46, 0xD8, 0xB5, 0xD9,\n\t0x84, 0xDB, 0x92, 0x46, 0xD8, 0xB5, 0xD9, 0x85,\n\t0xD9, 0x85, 0x46, 0xD8, 0xB6, 0xD8, 0xAD, 0xD9,\n\t0x89, 0x46, 0xD8, 0xB6, 0xD8, 0xAD, 0xD9, 0x8A,\n\t0x46, 0xD8, 0xB6, 0xD8, 0xAE, 0xD9, 0x85, 0x46,\n\t0xD8, 0xB7, 0xD9, 0x85, 0xD8, 0xAD, 0x46, 0xD8,\n\t// Bytes 2440 - 247f\n\t0xB7, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD8, 0xB7,\n\t0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD8, 0xB9, 0xD8,\n\t0xAC, 0xD9, 0x85, 0x46, 0xD8, 0xB9, 0xD9, 0x85,\n\t0xD9, 0x85, 0x46, 0xD8, 0xB9, 0xD9, 0x85, 0xD9,\n\t0x89, 0x46, 0xD8, 0xB9, 0xD9, 0x85, 0xD9, 0x8A,\n\t0x46, 0xD8, 0xBA, 0xD9, 0x85, 0xD9, 0x85, 0x46,\n\t0xD8, 0xBA, 0xD9, 0x85, 0xD9, 0x89, 0x46, 0xD8,\n\t0xBA, 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x81,\n\t// Bytes 2480 - 24bf\n\t0xD8, 0xAE, 0xD9, 0x85, 0x46, 0xD9, 0x81, 0xD9,\n\t0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x82, 0xD9, 0x84,\n\t0xDB, 0x92, 0x46, 0xD9, 0x82, 0xD9, 0x85, 0xD8,\n\t0xAD, 0x46, 0xD9, 0x82, 0xD9, 0x85, 0xD9, 0x85,\n\t0x46, 0xD9, 0x82, 0xD9, 0x85, 0xD9, 0x8A, 0x46,\n\t0xD9, 0x83, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD9,\n\t0x83, 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x84,\n\t0xD8, 0xAC, 0xD8, 0xAC, 0x46, 0xD9, 0x84, 0xD8,\n\t// Bytes 24c0 - 24ff\n\t0xAC, 0xD9, 0x85, 0x46, 0xD9, 0x84, 0xD8, 0xAC,\n\t0xD9, 0x8A, 0x46, 0xD9, 0x84, 0xD8, 0xAD, 0xD9,\n\t0x85, 0x46, 0xD9, 0x84, 0xD8, 0xAD, 0xD9, 0x89,\n\t0x46, 0xD9, 0x84, 0xD8, 0xAD, 0xD9, 0x8A, 0x46,\n\t0xD9, 0x84, 0xD8, 0xAE, 0xD9, 0x85, 0x46, 0xD9,\n\t0x84, 0xD9, 0x85, 0xD8, 0xAD, 0x46, 0xD9, 0x84,\n\t0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x85, 0xD8,\n\t0xAC, 0xD8, 0xAD, 0x46, 0xD9, 0x85, 0xD8, 0xAC,\n\t// Bytes 2500 - 253f\n\t0xD8, 0xAE, 0x46, 0xD9, 0x85, 0xD8, 0xAC, 0xD9,\n\t0x85, 0x46, 0xD9, 0x85, 0xD8, 0xAC, 0xD9, 0x8A,\n\t0x46, 0xD9, 0x85, 0xD8, 0xAD, 0xD8, 0xAC, 0x46,\n\t0xD9, 0x85, 0xD8, 0xAD, 0xD9, 0x85, 0x46, 0xD9,\n\t0x85, 0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD9, 0x85,\n\t0xD8, 0xAE, 0xD8, 0xAC, 0x46, 0xD9, 0x85, 0xD8,\n\t0xAE, 0xD9, 0x85, 0x46, 0xD9, 0x85, 0xD8, 0xAE,\n\t0xD9, 0x8A, 0x46, 0xD9, 0x85, 0xD9, 0x85, 0xD9,\n\t// Bytes 2540 - 257f\n\t0x8A, 0x46, 0xD9, 0x86, 0xD8, 0xAC, 0xD8, 0xAD,\n\t0x46, 0xD9, 0x86, 0xD8, 0xAC, 0xD9, 0x85, 0x46,\n\t0xD9, 0x86, 0xD8, 0xAC, 0xD9, 0x89, 0x46, 0xD9,\n\t0x86, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD9, 0x86,\n\t0xD8, 0xAD, 0xD9, 0x85, 0x46, 0xD9, 0x86, 0xD8,\n\t0xAD, 0xD9, 0x89, 0x46, 0xD9, 0x86, 0xD8, 0xAD,\n\t0xD9, 0x8A, 0x46, 0xD9, 0x86, 0xD9, 0x85, 0xD9,\n\t0x89, 0x46, 0xD9, 0x86, 0xD9, 0x85, 0xD9, 0x8A,\n\t// Bytes 2580 - 25bf\n\t0x46, 0xD9, 0x87, 0xD9, 0x85, 0xD8, 0xAC, 0x46,\n\t0xD9, 0x87, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD9,\n\t0x8A, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD9, 0x8A,\n\t0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD9, 0x8A, 0xD9,\n\t0x85, 0xD9, 0x85, 0x46, 0xD9, 0x8A, 0xD9, 0x85,\n\t0xD9, 0x8A, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD8,\n\t0xA7, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xAC,\n\t0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xAD, 0x46,\n\t// Bytes 25c0 - 25ff\n\t0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xAE, 0x46, 0xD9,\n\t0x8A, 0xD9, 0x94, 0xD8, 0xB1, 0x46, 0xD9, 0x8A,\n\t0xD9, 0x94, 0xD8, 0xB2, 0x46, 0xD9, 0x8A, 0xD9,\n\t0x94, 0xD9, 0x85, 0x46, 0xD9, 0x8A, 0xD9, 0x94,\n\t0xD9, 0x86, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD9,\n\t0x87, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x88,\n\t0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x89, 0x46,\n\t0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x8A, 0x46, 0xD9,\n\t// Bytes 2600 - 263f\n\t0x8A, 0xD9, 0x94, 0xDB, 0x86, 0x46, 0xD9, 0x8A,\n\t0xD9, 0x94, 0xDB, 0x87, 0x46, 0xD9, 0x8A, 0xD9,\n\t0x94, 0xDB, 0x88, 0x46, 0xD9, 0x8A, 0xD9, 0x94,\n\t0xDB, 0x90, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xDB,\n\t0x95, 0x46, 0xE0, 0xB9, 0x8D, 0xE0, 0xB8, 0xB2,\n\t0x46, 0xE0, 0xBA, 0xAB, 0xE0, 0xBA, 0x99, 0x46,\n\t0xE0, 0xBA, 0xAB, 0xE0, 0xBA, 0xA1, 0x46, 0xE0,\n\t0xBB, 0x8D, 0xE0, 0xBA, 0xB2, 0x46, 0xE0, 0xBD,\n\t// Bytes 2640 - 267f\n\t0x80, 0xE0, 0xBE, 0xB5, 0x46, 0xE0, 0xBD, 0x82,\n\t0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBD, 0x8C, 0xE0,\n\t0xBE, 0xB7, 0x46, 0xE0, 0xBD, 0x91, 0xE0, 0xBE,\n\t0xB7, 0x46, 0xE0, 0xBD, 0x96, 0xE0, 0xBE, 0xB7,\n\t0x46, 0xE0, 0xBD, 0x9B, 0xE0, 0xBE, 0xB7, 0x46,\n\t0xE0, 0xBE, 0x90, 0xE0, 0xBE, 0xB5, 0x46, 0xE0,\n\t0xBE, 0x92, 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBE,\n\t0x9C, 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBE, 0xA1,\n\t// Bytes 2680 - 26bf\n\t0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBE, 0xA6, 0xE0,\n\t0xBE, 0xB7, 0x46, 0xE0, 0xBE, 0xAB, 0xE0, 0xBE,\n\t0xB7, 0x46, 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2,\n\t0x46, 0xE2, 0x80, 0xB5, 0xE2, 0x80, 0xB5, 0x46,\n\t0xE2, 0x88, 0xAB, 0xE2, 0x88, 0xAB, 0x46, 0xE2,\n\t0x88, 0xAE, 0xE2, 0x88, 0xAE, 0x46, 0xE3, 0x81,\n\t0xBB, 0xE3, 0x81, 0x8B, 0x46, 0xE3, 0x82, 0x88,\n\t0xE3, 0x82, 0x8A, 0x46, 0xE3, 0x82, 0xAD, 0xE3,\n\t// Bytes 26c0 - 26ff\n\t0x83, 0xAD, 0x46, 0xE3, 0x82, 0xB3, 0xE3, 0x82,\n\t0xB3, 0x46, 0xE3, 0x82, 0xB3, 0xE3, 0x83, 0x88,\n\t0x46, 0xE3, 0x83, 0x88, 0xE3, 0x83, 0xB3, 0x46,\n\t0xE3, 0x83, 0x8A, 0xE3, 0x83, 0x8E, 0x46, 0xE3,\n\t0x83, 0x9B, 0xE3, 0x83, 0xB3, 0x46, 0xE3, 0x83,\n\t0x9F, 0xE3, 0x83, 0xAA, 0x46, 0xE3, 0x83, 0xAA,\n\t0xE3, 0x83, 0xA9, 0x46, 0xE3, 0x83, 0xAC, 0xE3,\n\t0x83, 0xA0, 0x46, 0xE5, 0xA4, 0xA7, 0xE6, 0xAD,\n\t// Bytes 2700 - 273f\n\t0xA3, 0x46, 0xE5, 0xB9, 0xB3, 0xE6, 0x88, 0x90,\n\t0x46, 0xE6, 0x98, 0x8E, 0xE6, 0xB2, 0xBB, 0x46,\n\t0xE6, 0x98, 0xAD, 0xE5, 0x92, 0x8C, 0x47, 0x72,\n\t0x61, 0x64, 0xE2, 0x88, 0x95, 0x73, 0x47, 0xE3,\n\t0x80, 0x94, 0x53, 0xE3, 0x80, 0x95, 0x48, 0x28,\n\t0xE1, 0x84, 0x80, 0xE1, 0x85, 0xA1, 0x29, 0x48,\n\t0x28, 0xE1, 0x84, 0x82, 0xE1, 0x85, 0xA1, 0x29,\n\t0x48, 0x28, 0xE1, 0x84, 0x83, 0xE1, 0x85, 0xA1,\n\t// Bytes 2740 - 277f\n\t0x29, 0x48, 0x28, 0xE1, 0x84, 0x85, 0xE1, 0x85,\n\t0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x86, 0xE1,\n\t0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x87,\n\t0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84,\n\t0x89, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1,\n\t0x84, 0x8B, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28,\n\t0xE1, 0x84, 0x8C, 0xE1, 0x85, 0xA1, 0x29, 0x48,\n\t0x28, 0xE1, 0x84, 0x8C, 0xE1, 0x85, 0xAE, 0x29,\n\t// Bytes 2780 - 27bf\n\t0x48, 0x28, 0xE1, 0x84, 0x8E, 0xE1, 0x85, 0xA1,\n\t0x29, 0x48, 0x28, 0xE1, 0x84, 0x8F, 0xE1, 0x85,\n\t0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x90, 0xE1,\n\t0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x91,\n\t0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84,\n\t0x92, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x72, 0x61,\n\t0x64, 0xE2, 0x88, 0x95, 0x73, 0x32, 0x48, 0xD8,\n\t0xA7, 0xD9, 0x83, 0xD8, 0xA8, 0xD8, 0xB1, 0x48,\n\t// Bytes 27c0 - 27ff\n\t0xD8, 0xA7, 0xD9, 0x84, 0xD9, 0x84, 0xD9, 0x87,\n\t0x48, 0xD8, 0xB1, 0xD8, 0xB3, 0xD9, 0x88, 0xD9,\n\t0x84, 0x48, 0xD8, 0xB1, 0xDB, 0x8C, 0xD8, 0xA7,\n\t0xD9, 0x84, 0x48, 0xD8, 0xB5, 0xD9, 0x84, 0xD8,\n\t0xB9, 0xD9, 0x85, 0x48, 0xD8, 0xB9, 0xD9, 0x84,\n\t0xD9, 0x8A, 0xD9, 0x87, 0x48, 0xD9, 0x85, 0xD8,\n\t0xAD, 0xD9, 0x85, 0xD8, 0xAF, 0x48, 0xD9, 0x88,\n\t0xD8, 0xB3, 0xD9, 0x84, 0xD9, 0x85, 0x49, 0xE2,\n\t// Bytes 2800 - 283f\n\t0x80, 0xB2, 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2,\n\t0x49, 0xE2, 0x80, 0xB5, 0xE2, 0x80, 0xB5, 0xE2,\n\t0x80, 0xB5, 0x49, 0xE2, 0x88, 0xAB, 0xE2, 0x88,\n\t0xAB, 0xE2, 0x88, 0xAB, 0x49, 0xE2, 0x88, 0xAE,\n\t0xE2, 0x88, 0xAE, 0xE2, 0x88, 0xAE, 0x49, 0xE3,\n\t0x80, 0x94, 0xE4, 0xB8, 0x89, 0xE3, 0x80, 0x95,\n\t0x49, 0xE3, 0x80, 0x94, 0xE4, 0xBA, 0x8C, 0xE3,\n\t0x80, 0x95, 0x49, 0xE3, 0x80, 0x94, 0xE5, 0x8B,\n\t// Bytes 2840 - 287f\n\t0x9D, 0xE3, 0x80, 0x95, 0x49, 0xE3, 0x80, 0x94,\n\t0xE5, 0xAE, 0x89, 0xE3, 0x80, 0x95, 0x49, 0xE3,\n\t0x80, 0x94, 0xE6, 0x89, 0x93, 0xE3, 0x80, 0x95,\n\t0x49, 0xE3, 0x80, 0x94, 0xE6, 0x95, 0x97, 0xE3,\n\t0x80, 0x95, 0x49, 0xE3, 0x80, 0x94, 0xE6, 0x9C,\n\t0xAC, 0xE3, 0x80, 0x95, 0x49, 0xE3, 0x80, 0x94,\n\t0xE7, 0x82, 0xB9, 0xE3, 0x80, 0x95, 0x49, 0xE3,\n\t0x80, 0x94, 0xE7, 0x9B, 0x97, 0xE3, 0x80, 0x95,\n\t// Bytes 2880 - 28bf\n\t0x49, 0xE3, 0x82, 0xA2, 0xE3, 0x83, 0xBC, 0xE3,\n\t0x83, 0xAB, 0x49, 0xE3, 0x82, 0xA4, 0xE3, 0x83,\n\t0xB3, 0xE3, 0x83, 0x81, 0x49, 0xE3, 0x82, 0xA6,\n\t0xE3, 0x82, 0xA9, 0xE3, 0x83, 0xB3, 0x49, 0xE3,\n\t0x82, 0xAA, 0xE3, 0x83, 0xB3, 0xE3, 0x82, 0xB9,\n\t0x49, 0xE3, 0x82, 0xAA, 0xE3, 0x83, 0xBC, 0xE3,\n\t0x83, 0xA0, 0x49, 0xE3, 0x82, 0xAB, 0xE3, 0x82,\n\t0xA4, 0xE3, 0x83, 0xAA, 0x49, 0xE3, 0x82, 0xB1,\n\t// Bytes 28c0 - 28ff\n\t0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xB9, 0x49, 0xE3,\n\t0x82, 0xB3, 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x8A,\n\t0x49, 0xE3, 0x82, 0xBB, 0xE3, 0x83, 0xB3, 0xE3,\n\t0x83, 0x81, 0x49, 0xE3, 0x82, 0xBB, 0xE3, 0x83,\n\t0xB3, 0xE3, 0x83, 0x88, 0x49, 0xE3, 0x83, 0x86,\n\t0xE3, 0x82, 0x99, 0xE3, 0x82, 0xB7, 0x49, 0xE3,\n\t0x83, 0x88, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xAB,\n\t0x49, 0xE3, 0x83, 0x8E, 0xE3, 0x83, 0x83, 0xE3,\n\t// Bytes 2900 - 293f\n\t0x83, 0x88, 0x49, 0xE3, 0x83, 0x8F, 0xE3, 0x82,\n\t0xA4, 0xE3, 0x83, 0x84, 0x49, 0xE3, 0x83, 0x92,\n\t0xE3, 0x82, 0x99, 0xE3, 0x83, 0xAB, 0x49, 0xE3,\n\t0x83, 0x92, 0xE3, 0x82, 0x9A, 0xE3, 0x82, 0xB3,\n\t0x49, 0xE3, 0x83, 0x95, 0xE3, 0x83, 0xA9, 0xE3,\n\t0x83, 0xB3, 0x49, 0xE3, 0x83, 0x98, 0xE3, 0x82,\n\t0x9A, 0xE3, 0x82, 0xBD, 0x49, 0xE3, 0x83, 0x98,\n\t0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x84, 0x49, 0xE3,\n\t// Bytes 2940 - 297f\n\t0x83, 0x9B, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xAB,\n\t0x49, 0xE3, 0x83, 0x9B, 0xE3, 0x83, 0xBC, 0xE3,\n\t0x83, 0xB3, 0x49, 0xE3, 0x83, 0x9E, 0xE3, 0x82,\n\t0xA4, 0xE3, 0x83, 0xAB, 0x49, 0xE3, 0x83, 0x9E,\n\t0xE3, 0x83, 0x83, 0xE3, 0x83, 0x8F, 0x49, 0xE3,\n\t0x83, 0x9E, 0xE3, 0x83, 0xAB, 0xE3, 0x82, 0xAF,\n\t0x49, 0xE3, 0x83, 0xA4, 0xE3, 0x83, 0xBC, 0xE3,\n\t0x83, 0xAB, 0x49, 0xE3, 0x83, 0xA6, 0xE3, 0x82,\n\t// Bytes 2980 - 29bf\n\t0xA2, 0xE3, 0x83, 0xB3, 0x49, 0xE3, 0x83, 0xAF,\n\t0xE3, 0x83, 0x83, 0xE3, 0x83, 0x88, 0x4C, 0xE2,\n\t0x80, 0xB2, 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2,\n\t0xE2, 0x80, 0xB2, 0x4C, 0xE2, 0x88, 0xAB, 0xE2,\n\t0x88, 0xAB, 0xE2, 0x88, 0xAB, 0xE2, 0x88, 0xAB,\n\t0x4C, 0xE3, 0x82, 0xA2, 0xE3, 0x83, 0xAB, 0xE3,\n\t0x83, 0x95, 0xE3, 0x82, 0xA1, 0x4C, 0xE3, 0x82,\n\t0xA8, 0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xAB, 0xE3,\n\t// Bytes 29c0 - 29ff\n\t0x83, 0xBC, 0x4C, 0xE3, 0x82, 0xAB, 0xE3, 0x82,\n\t0x99, 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xB3, 0x4C,\n\t0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0xE3, 0x83,\n\t0xB3, 0xE3, 0x83, 0x9E, 0x4C, 0xE3, 0x82, 0xAB,\n\t0xE3, 0x83, 0xA9, 0xE3, 0x83, 0x83, 0xE3, 0x83,\n\t0x88, 0x4C, 0xE3, 0x82, 0xAB, 0xE3, 0x83, 0xAD,\n\t0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xBC, 0x4C, 0xE3,\n\t0x82, 0xAD, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0x8B,\n\t// Bytes 2a00 - 2a3f\n\t0xE3, 0x83, 0xBC, 0x4C, 0xE3, 0x82, 0xAD, 0xE3,\n\t0x83, 0xA5, 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xBC,\n\t0x4C, 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0xE3,\n\t0x83, 0xA9, 0xE3, 0x83, 0xA0, 0x4C, 0xE3, 0x82,\n\t0xAF, 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xBC, 0xE3,\n\t0x83, 0x8D, 0x4C, 0xE3, 0x82, 0xB5, 0xE3, 0x82,\n\t0xA4, 0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAB, 0x4C,\n\t0xE3, 0x82, 0xBF, 0xE3, 0x82, 0x99, 0xE3, 0x83,\n\t// Bytes 2a40 - 2a7f\n\t0xBC, 0xE3, 0x82, 0xB9, 0x4C, 0xE3, 0x83, 0x8F,\n\t0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC, 0xE3, 0x83,\n\t0x84, 0x4C, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A,\n\t0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAB, 0x4C, 0xE3,\n\t0x83, 0x95, 0xE3, 0x82, 0xA3, 0xE3, 0x83, 0xBC,\n\t0xE3, 0x83, 0x88, 0x4C, 0xE3, 0x83, 0x98, 0xE3,\n\t0x82, 0x99, 0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xBF,\n\t0x4C, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, 0xE3,\n\t// Bytes 2a80 - 2abf\n\t0x83, 0x8B, 0xE3, 0x83, 0x92, 0x4C, 0xE3, 0x83,\n\t0x98, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xB3, 0xE3,\n\t0x82, 0xB9, 0x4C, 0xE3, 0x83, 0x9B, 0xE3, 0x82,\n\t0x99, 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x88, 0x4C,\n\t0xE3, 0x83, 0x9E, 0xE3, 0x82, 0xA4, 0xE3, 0x82,\n\t0xAF, 0xE3, 0x83, 0xAD, 0x4C, 0xE3, 0x83, 0x9F,\n\t0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAD, 0xE3, 0x83,\n\t0xB3, 0x4C, 0xE3, 0x83, 0xA1, 0xE3, 0x83, 0xBC,\n\t// Bytes 2ac0 - 2aff\n\t0xE3, 0x83, 0x88, 0xE3, 0x83, 0xAB, 0x4C, 0xE3,\n\t0x83, 0xAA, 0xE3, 0x83, 0x83, 0xE3, 0x83, 0x88,\n\t0xE3, 0x83, 0xAB, 0x4C, 0xE3, 0x83, 0xAB, 0xE3,\n\t0x83, 0x92, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC,\n\t0x4C, 0xE6, 0xA0, 0xAA, 0xE5, 0xBC, 0x8F, 0xE4,\n\t0xBC, 0x9A, 0xE7, 0xA4, 0xBE, 0x4E, 0x28, 0xE1,\n\t0x84, 0x8B, 0xE1, 0x85, 0xA9, 0xE1, 0x84, 0x92,\n\t0xE1, 0x85, 0xAE, 0x29, 0x4F, 0xD8, 0xAC, 0xD9,\n\t// Bytes 2b00 - 2b3f\n\t0x84, 0x20, 0xD8, 0xAC, 0xD9, 0x84, 0xD8, 0xA7,\n\t0xD9, 0x84, 0xD9, 0x87, 0x4F, 0xE3, 0x82, 0xA2,\n\t0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x9A, 0xE3, 0x83,\n\t0xBC, 0xE3, 0x83, 0x88, 0x4F, 0xE3, 0x82, 0xA2,\n\t0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x98, 0xE3, 0x82,\n\t0x9A, 0xE3, 0x82, 0xA2, 0x4F, 0xE3, 0x82, 0xAD,\n\t0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xAF, 0xE3, 0x83,\n\t0x83, 0xE3, 0x83, 0x88, 0x4F, 0xE3, 0x82, 0xB5,\n\t// Bytes 2b40 - 2b7f\n\t0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x81, 0xE3, 0x83,\n\t0xBC, 0xE3, 0x83, 0xA0, 0x4F, 0xE3, 0x83, 0x8F,\n\t0xE3, 0x82, 0x99, 0xE3, 0x83, 0xBC, 0xE3, 0x83,\n\t0xAC, 0xE3, 0x83, 0xAB, 0x4F, 0xE3, 0x83, 0x98,\n\t0xE3, 0x82, 0xAF, 0xE3, 0x82, 0xBF, 0xE3, 0x83,\n\t0xBC, 0xE3, 0x83, 0xAB, 0x4F, 0xE3, 0x83, 0x9B,\n\t0xE3, 0x82, 0x9A, 0xE3, 0x82, 0xA4, 0xE3, 0x83,\n\t0xB3, 0xE3, 0x83, 0x88, 0x4F, 0xE3, 0x83, 0x9E,\n\t// Bytes 2b80 - 2bbf\n\t0xE3, 0x83, 0xB3, 0xE3, 0x82, 0xB7, 0xE3, 0x83,\n\t0xA7, 0xE3, 0x83, 0xB3, 0x4F, 0xE3, 0x83, 0xA1,\n\t0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0xE3, 0x83,\n\t0x88, 0xE3, 0x83, 0xB3, 0x4F, 0xE3, 0x83, 0xAB,\n\t0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x95, 0xE3, 0x82,\n\t0x99, 0xE3, 0x83, 0xAB, 0x51, 0x28, 0xE1, 0x84,\n\t0x8B, 0xE1, 0x85, 0xA9, 0xE1, 0x84, 0x8C, 0xE1,\n\t0x85, 0xA5, 0xE1, 0x86, 0xAB, 0x29, 0x52, 0xE3,\n\t// Bytes 2bc0 - 2bff\n\t0x82, 0xAD, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xAB,\n\t0xE3, 0x82, 0xBF, 0xE3, 0x82, 0x99, 0xE3, 0x83,\n\t0xBC, 0x52, 0xE3, 0x82, 0xAD, 0xE3, 0x83, 0xAD,\n\t0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0xE3, 0x83,\n\t0xA9, 0xE3, 0x83, 0xA0, 0x52, 0xE3, 0x82, 0xAD,\n\t0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xA1, 0xE3, 0x83,\n\t0xBC, 0xE3, 0x83, 0x88, 0xE3, 0x83, 0xAB, 0x52,\n\t0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0xE3, 0x83,\n\t// Bytes 2c00 - 2c3f\n\t0xA9, 0xE3, 0x83, 0xA0, 0xE3, 0x83, 0x88, 0xE3,\n\t0x83, 0xB3, 0x52, 0xE3, 0x82, 0xAF, 0xE3, 0x83,\n\t0xAB, 0xE3, 0x82, 0xBB, 0xE3, 0x82, 0x99, 0xE3,\n\t0x82, 0xA4, 0xE3, 0x83, 0xAD, 0x52, 0xE3, 0x83,\n\t0x8F, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC, 0xE3,\n\t0x82, 0xBB, 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x88,\n\t0x52, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A, 0xE3,\n\t0x82, 0xA2, 0xE3, 0x82, 0xB9, 0xE3, 0x83, 0x88,\n\t// Bytes 2c40 - 2c7f\n\t0xE3, 0x83, 0xAB, 0x52, 0xE3, 0x83, 0x95, 0xE3,\n\t0x82, 0x99, 0xE3, 0x83, 0x83, 0xE3, 0x82, 0xB7,\n\t0xE3, 0x82, 0xA7, 0xE3, 0x83, 0xAB, 0x52, 0xE3,\n\t0x83, 0x9F, 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0x8F,\n\t0xE3, 0x82, 0x99, 0xE3, 0x83, 0xBC, 0xE3, 0x83,\n\t0xAB, 0x52, 0xE3, 0x83, 0xAC, 0xE3, 0x83, 0xB3,\n\t0xE3, 0x83, 0x88, 0xE3, 0x82, 0xB1, 0xE3, 0x82,\n\t0x99, 0xE3, 0x83, 0xB3, 0x61, 0xD8, 0xB5, 0xD9,\n\t// Bytes 2c80 - 2cbf\n\t0x84, 0xD9, 0x89, 0x20, 0xD8, 0xA7, 0xD9, 0x84,\n\t0xD9, 0x84, 0xD9, 0x87, 0x20, 0xD8, 0xB9, 0xD9,\n\t0x84, 0xD9, 0x8A, 0xD9, 0x87, 0x20, 0xD9, 0x88,\n\t0xD8, 0xB3, 0xD9, 0x84, 0xD9, 0x85, 0x06, 0xE0,\n\t0xA7, 0x87, 0xE0, 0xA6, 0xBE, 0x01, 0x06, 0xE0,\n\t0xA7, 0x87, 0xE0, 0xA7, 0x97, 0x01, 0x06, 0xE0,\n\t0xAD, 0x87, 0xE0, 0xAC, 0xBE, 0x01, 0x06, 0xE0,\n\t0xAD, 0x87, 0xE0, 0xAD, 0x96, 0x01, 0x06, 0xE0,\n\t// Bytes 2cc0 - 2cff\n\t0xAD, 0x87, 0xE0, 0xAD, 0x97, 0x01, 0x06, 0xE0,\n\t0xAE, 0x92, 0xE0, 0xAF, 0x97, 0x01, 0x06, 0xE0,\n\t0xAF, 0x86, 0xE0, 0xAE, 0xBE, 0x01, 0x06, 0xE0,\n\t0xAF, 0x86, 0xE0, 0xAF, 0x97, 0x01, 0x06, 0xE0,\n\t0xAF, 0x87, 0xE0, 0xAE, 0xBE, 0x01, 0x06, 0xE0,\n\t0xB2, 0xBF, 0xE0, 0xB3, 0x95, 0x01, 0x06, 0xE0,\n\t0xB3, 0x86, 0xE0, 0xB3, 0x95, 0x01, 0x06, 0xE0,\n\t0xB3, 0x86, 0xE0, 0xB3, 0x96, 0x01, 0x06, 0xE0,\n\t// Bytes 2d00 - 2d3f\n\t0xB5, 0x86, 0xE0, 0xB4, 0xBE, 0x01, 0x06, 0xE0,\n\t0xB5, 0x86, 0xE0, 0xB5, 0x97, 0x01, 0x06, 0xE0,\n\t0xB5, 0x87, 0xE0, 0xB4, 0xBE, 0x01, 0x06, 0xE0,\n\t0xB7, 0x99, 0xE0, 0xB7, 0x9F, 0x01, 0x06, 0xE1,\n\t0x80, 0xA5, 0xE1, 0x80, 0xAE, 0x01, 0x06, 0xE1,\n\t0xAC, 0x85, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,\n\t0xAC, 0x87, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,\n\t0xAC, 0x89, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,\n\t// Bytes 2d40 - 2d7f\n\t0xAC, 0x8B, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,\n\t0xAC, 0x8D, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,\n\t0xAC, 0x91, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,\n\t0xAC, 0xBA, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,\n\t0xAC, 0xBC, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,\n\t0xAC, 0xBE, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,\n\t0xAC, 0xBF, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,\n\t0xAD, 0x82, 0xE1, 0xAC, 0xB5, 0x01, 0x08, 0xF0,\n\t// Bytes 2d80 - 2dbf\n\t0x91, 0x84, 0xB1, 0xF0, 0x91, 0x84, 0xA7, 0x01,\n\t0x08, 0xF0, 0x91, 0x84, 0xB2, 0xF0, 0x91, 0x84,\n\t0xA7, 0x01, 0x08, 0xF0, 0x91, 0x8D, 0x87, 0xF0,\n\t0x91, 0x8C, 0xBE, 0x01, 0x08, 0xF0, 0x91, 0x8D,\n\t0x87, 0xF0, 0x91, 0x8D, 0x97, 0x01, 0x08, 0xF0,\n\t0x91, 0x92, 0xB9, 0xF0, 0x91, 0x92, 0xB0, 0x01,\n\t0x08, 0xF0, 0x91, 0x92, 0xB9, 0xF0, 0x91, 0x92,\n\t0xBA, 0x01, 0x08, 0xF0, 0x91, 0x92, 0xB9, 0xF0,\n\t// Bytes 2dc0 - 2dff\n\t0x91, 0x92, 0xBD, 0x01, 0x08, 0xF0, 0x91, 0x96,\n\t0xB8, 0xF0, 0x91, 0x96, 0xAF, 0x01, 0x08, 0xF0,\n\t0x91, 0x96, 0xB9, 0xF0, 0x91, 0x96, 0xAF, 0x01,\n\t0x09, 0xE0, 0xB3, 0x86, 0xE0, 0xB3, 0x82, 0xE0,\n\t0xB3, 0x95, 0x02, 0x09, 0xE0, 0xB7, 0x99, 0xE0,\n\t0xB7, 0x8F, 0xE0, 0xB7, 0x8A, 0x12, 0x44, 0x44,\n\t0x5A, 0xCC, 0x8C, 0xC9, 0x44, 0x44, 0x7A, 0xCC,\n\t0x8C, 0xC9, 0x44, 0x64, 0x7A, 0xCC, 0x8C, 0xC9,\n\t// Bytes 2e00 - 2e3f\n\t0x46, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x93, 0xC9,\n\t0x46, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x94, 0xC9,\n\t0x46, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x95, 0xB5,\n\t0x46, 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xA1, 0x01,\n\t0x46, 0xE1, 0x84, 0x82, 0xE1, 0x85, 0xA1, 0x01,\n\t0x46, 0xE1, 0x84, 0x83, 0xE1, 0x85, 0xA1, 0x01,\n\t0x46, 0xE1, 0x84, 0x85, 0xE1, 0x85, 0xA1, 0x01,\n\t0x46, 0xE1, 0x84, 0x86, 0xE1, 0x85, 0xA1, 0x01,\n\t// Bytes 2e40 - 2e7f\n\t0x46, 0xE1, 0x84, 0x87, 0xE1, 0x85, 0xA1, 0x01,\n\t0x46, 0xE1, 0x84, 0x89, 0xE1, 0x85, 0xA1, 0x01,\n\t0x46, 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xA1, 0x01,\n\t0x46, 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xAE, 0x01,\n\t0x46, 0xE1, 0x84, 0x8C, 0xE1, 0x85, 0xA1, 0x01,\n\t0x46, 0xE1, 0x84, 0x8E, 0xE1, 0x85, 0xA1, 0x01,\n\t0x46, 0xE1, 0x84, 0x8F, 0xE1, 0x85, 0xA1, 0x01,\n\t0x46, 0xE1, 0x84, 0x90, 0xE1, 0x85, 0xA1, 0x01,\n\t// Bytes 2e80 - 2ebf\n\t0x46, 0xE1, 0x84, 0x91, 0xE1, 0x85, 0xA1, 0x01,\n\t0x46, 0xE1, 0x84, 0x92, 0xE1, 0x85, 0xA1, 0x01,\n\t0x49, 0xE3, 0x83, 0xA1, 0xE3, 0x82, 0xAB, 0xE3,\n\t0x82, 0x99, 0x0D, 0x4C, 0xE1, 0x84, 0x8C, 0xE1,\n\t0x85, 0xAE, 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xB4,\n\t0x01, 0x4C, 0xE3, 0x82, 0xAD, 0xE3, 0x82, 0x99,\n\t0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0x0D, 0x4C,\n\t0xE3, 0x82, 0xB3, 0xE3, 0x83, 0xBC, 0xE3, 0x83,\n\t// Bytes 2ec0 - 2eff\n\t0x9B, 0xE3, 0x82, 0x9A, 0x0D, 0x4C, 0xE3, 0x83,\n\t0xA4, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88, 0xE3,\n\t0x82, 0x99, 0x0D, 0x4F, 0xE1, 0x84, 0x8E, 0xE1,\n\t0x85, 0xA1, 0xE1, 0x86, 0xB7, 0xE1, 0x84, 0x80,\n\t0xE1, 0x85, 0xA9, 0x01, 0x4F, 0xE3, 0x82, 0xA4,\n\t0xE3, 0x83, 0x8B, 0xE3, 0x83, 0xB3, 0xE3, 0x82,\n\t0xAF, 0xE3, 0x82, 0x99, 0x0D, 0x4F, 0xE3, 0x82,\n\t0xB7, 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xB3, 0xE3,\n\t// Bytes 2f00 - 2f3f\n\t0x82, 0xAF, 0xE3, 0x82, 0x99, 0x0D, 0x4F, 0xE3,\n\t0x83, 0x98, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC,\n\t0xE3, 0x82, 0xB7, 0xE3, 0x82, 0x99, 0x0D, 0x4F,\n\t0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x9A, 0xE3, 0x83,\n\t0xB3, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x0D,\n\t0x52, 0xE3, 0x82, 0xA8, 0xE3, 0x82, 0xB9, 0xE3,\n\t0x82, 0xAF, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88,\n\t0xE3, 0x82, 0x99, 0x0D, 0x52, 0xE3, 0x83, 0x95,\n\t// Bytes 2f40 - 2f7f\n\t0xE3, 0x82, 0xA1, 0xE3, 0x83, 0xA9, 0xE3, 0x83,\n\t0x83, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x0D,\n\t0x86, 0xE0, 0xB3, 0x86, 0xE0, 0xB3, 0x82, 0x01,\n\t0x86, 0xE0, 0xB7, 0x99, 0xE0, 0xB7, 0x8F, 0x01,\n\t0x03, 0x3C, 0xCC, 0xB8, 0x05, 0x03, 0x3D, 0xCC,\n\t0xB8, 0x05, 0x03, 0x3E, 0xCC, 0xB8, 0x05, 0x03,\n\t0x41, 0xCC, 0x80, 0xC9, 0x03, 0x41, 0xCC, 0x81,\n\t0xC9, 0x03, 0x41, 0xCC, 0x83, 0xC9, 0x03, 0x41,\n\t// Bytes 2f80 - 2fbf\n\t0xCC, 0x84, 0xC9, 0x03, 0x41, 0xCC, 0x89, 0xC9,\n\t0x03, 0x41, 0xCC, 0x8C, 0xC9, 0x03, 0x41, 0xCC,\n\t0x8F, 0xC9, 0x03, 0x41, 0xCC, 0x91, 0xC9, 0x03,\n\t0x41, 0xCC, 0xA5, 0xB5, 0x03, 0x41, 0xCC, 0xA8,\n\t0xA5, 0x03, 0x42, 0xCC, 0x87, 0xC9, 0x03, 0x42,\n\t0xCC, 0xA3, 0xB5, 0x03, 0x42, 0xCC, 0xB1, 0xB5,\n\t0x03, 0x43, 0xCC, 0x81, 0xC9, 0x03, 0x43, 0xCC,\n\t0x82, 0xC9, 0x03, 0x43, 0xCC, 0x87, 0xC9, 0x03,\n\t// Bytes 2fc0 - 2fff\n\t0x43, 0xCC, 0x8C, 0xC9, 0x03, 0x44, 0xCC, 0x87,\n\t0xC9, 0x03, 0x44, 0xCC, 0x8C, 0xC9, 0x03, 0x44,\n\t0xCC, 0xA3, 0xB5, 0x03, 0x44, 0xCC, 0xA7, 0xA5,\n\t0x03, 0x44, 0xCC, 0xAD, 0xB5, 0x03, 0x44, 0xCC,\n\t0xB1, 0xB5, 0x03, 0x45, 0xCC, 0x80, 0xC9, 0x03,\n\t0x45, 0xCC, 0x81, 0xC9, 0x03, 0x45, 0xCC, 0x83,\n\t0xC9, 0x03, 0x45, 0xCC, 0x86, 0xC9, 0x03, 0x45,\n\t0xCC, 0x87, 0xC9, 0x03, 0x45, 0xCC, 0x88, 0xC9,\n\t// Bytes 3000 - 303f\n\t0x03, 0x45, 0xCC, 0x89, 0xC9, 0x03, 0x45, 0xCC,\n\t0x8C, 0xC9, 0x03, 0x45, 0xCC, 0x8F, 0xC9, 0x03,\n\t0x45, 0xCC, 0x91, 0xC9, 0x03, 0x45, 0xCC, 0xA8,\n\t0xA5, 0x03, 0x45, 0xCC, 0xAD, 0xB5, 0x03, 0x45,\n\t0xCC, 0xB0, 0xB5, 0x03, 0x46, 0xCC, 0x87, 0xC9,\n\t0x03, 0x47, 0xCC, 0x81, 0xC9, 0x03, 0x47, 0xCC,\n\t0x82, 0xC9, 0x03, 0x47, 0xCC, 0x84, 0xC9, 0x03,\n\t0x47, 0xCC, 0x86, 0xC9, 0x03, 0x47, 0xCC, 0x87,\n\t// Bytes 3040 - 307f\n\t0xC9, 0x03, 0x47, 0xCC, 0x8C, 0xC9, 0x03, 0x47,\n\t0xCC, 0xA7, 0xA5, 0x03, 0x48, 0xCC, 0x82, 0xC9,\n\t0x03, 0x48, 0xCC, 0x87, 0xC9, 0x03, 0x48, 0xCC,\n\t0x88, 0xC9, 0x03, 0x48, 0xCC, 0x8C, 0xC9, 0x03,\n\t0x48, 0xCC, 0xA3, 0xB5, 0x03, 0x48, 0xCC, 0xA7,\n\t0xA5, 0x03, 0x48, 0xCC, 0xAE, 0xB5, 0x03, 0x49,\n\t0xCC, 0x80, 0xC9, 0x03, 0x49, 0xCC, 0x81, 0xC9,\n\t0x03, 0x49, 0xCC, 0x82, 0xC9, 0x03, 0x49, 0xCC,\n\t// Bytes 3080 - 30bf\n\t0x83, 0xC9, 0x03, 0x49, 0xCC, 0x84, 0xC9, 0x03,\n\t0x49, 0xCC, 0x86, 0xC9, 0x03, 0x49, 0xCC, 0x87,\n\t0xC9, 0x03, 0x49, 0xCC, 0x89, 0xC9, 0x03, 0x49,\n\t0xCC, 0x8C, 0xC9, 0x03, 0x49, 0xCC, 0x8F, 0xC9,\n\t0x03, 0x49, 0xCC, 0x91, 0xC9, 0x03, 0x49, 0xCC,\n\t0xA3, 0xB5, 0x03, 0x49, 0xCC, 0xA8, 0xA5, 0x03,\n\t0x49, 0xCC, 0xB0, 0xB5, 0x03, 0x4A, 0xCC, 0x82,\n\t0xC9, 0x03, 0x4B, 0xCC, 0x81, 0xC9, 0x03, 0x4B,\n\t// Bytes 30c0 - 30ff\n\t0xCC, 0x8C, 0xC9, 0x03, 0x4B, 0xCC, 0xA3, 0xB5,\n\t0x03, 0x4B, 0xCC, 0xA7, 0xA5, 0x03, 0x4B, 0xCC,\n\t0xB1, 0xB5, 0x03, 0x4C, 0xCC, 0x81, 0xC9, 0x03,\n\t0x4C, 0xCC, 0x8C, 0xC9, 0x03, 0x4C, 0xCC, 0xA7,\n\t0xA5, 0x03, 0x4C, 0xCC, 0xAD, 0xB5, 0x03, 0x4C,\n\t0xCC, 0xB1, 0xB5, 0x03, 0x4D, 0xCC, 0x81, 0xC9,\n\t0x03, 0x4D, 0xCC, 0x87, 0xC9, 0x03, 0x4D, 0xCC,\n\t0xA3, 0xB5, 0x03, 0x4E, 0xCC, 0x80, 0xC9, 0x03,\n\t// Bytes 3100 - 313f\n\t0x4E, 0xCC, 0x81, 0xC9, 0x03, 0x4E, 0xCC, 0x83,\n\t0xC9, 0x03, 0x4E, 0xCC, 0x87, 0xC9, 0x03, 0x4E,\n\t0xCC, 0x8C, 0xC9, 0x03, 0x4E, 0xCC, 0xA3, 0xB5,\n\t0x03, 0x4E, 0xCC, 0xA7, 0xA5, 0x03, 0x4E, 0xCC,\n\t0xAD, 0xB5, 0x03, 0x4E, 0xCC, 0xB1, 0xB5, 0x03,\n\t0x4F, 0xCC, 0x80, 0xC9, 0x03, 0x4F, 0xCC, 0x81,\n\t0xC9, 0x03, 0x4F, 0xCC, 0x86, 0xC9, 0x03, 0x4F,\n\t0xCC, 0x89, 0xC9, 0x03, 0x4F, 0xCC, 0x8B, 0xC9,\n\t// Bytes 3140 - 317f\n\t0x03, 0x4F, 0xCC, 0x8C, 0xC9, 0x03, 0x4F, 0xCC,\n\t0x8F, 0xC9, 0x03, 0x4F, 0xCC, 0x91, 0xC9, 0x03,\n\t0x50, 0xCC, 0x81, 0xC9, 0x03, 0x50, 0xCC, 0x87,\n\t0xC9, 0x03, 0x52, 0xCC, 0x81, 0xC9, 0x03, 0x52,\n\t0xCC, 0x87, 0xC9, 0x03, 0x52, 0xCC, 0x8C, 0xC9,\n\t0x03, 0x52, 0xCC, 0x8F, 0xC9, 0x03, 0x52, 0xCC,\n\t0x91, 0xC9, 0x03, 0x52, 0xCC, 0xA7, 0xA5, 0x03,\n\t0x52, 0xCC, 0xB1, 0xB5, 0x03, 0x53, 0xCC, 0x82,\n\t// Bytes 3180 - 31bf\n\t0xC9, 0x03, 0x53, 0xCC, 0x87, 0xC9, 0x03, 0x53,\n\t0xCC, 0xA6, 0xB5, 0x03, 0x53, 0xCC, 0xA7, 0xA5,\n\t0x03, 0x54, 0xCC, 0x87, 0xC9, 0x03, 0x54, 0xCC,\n\t0x8C, 0xC9, 0x03, 0x54, 0xCC, 0xA3, 0xB5, 0x03,\n\t0x54, 0xCC, 0xA6, 0xB5, 0x03, 0x54, 0xCC, 0xA7,\n\t0xA5, 0x03, 0x54, 0xCC, 0xAD, 0xB5, 0x03, 0x54,\n\t0xCC, 0xB1, 0xB5, 0x03, 0x55, 0xCC, 0x80, 0xC9,\n\t0x03, 0x55, 0xCC, 0x81, 0xC9, 0x03, 0x55, 0xCC,\n\t// Bytes 31c0 - 31ff\n\t0x82, 0xC9, 0x03, 0x55, 0xCC, 0x86, 0xC9, 0x03,\n\t0x55, 0xCC, 0x89, 0xC9, 0x03, 0x55, 0xCC, 0x8A,\n\t0xC9, 0x03, 0x55, 0xCC, 0x8B, 0xC9, 0x03, 0x55,\n\t0xCC, 0x8C, 0xC9, 0x03, 0x55, 0xCC, 0x8F, 0xC9,\n\t0x03, 0x55, 0xCC, 0x91, 0xC9, 0x03, 0x55, 0xCC,\n\t0xA3, 0xB5, 0x03, 0x55, 0xCC, 0xA4, 0xB5, 0x03,\n\t0x55, 0xCC, 0xA8, 0xA5, 0x03, 0x55, 0xCC, 0xAD,\n\t0xB5, 0x03, 0x55, 0xCC, 0xB0, 0xB5, 0x03, 0x56,\n\t// Bytes 3200 - 323f\n\t0xCC, 0x83, 0xC9, 0x03, 0x56, 0xCC, 0xA3, 0xB5,\n\t0x03, 0x57, 0xCC, 0x80, 0xC9, 0x03, 0x57, 0xCC,\n\t0x81, 0xC9, 0x03, 0x57, 0xCC, 0x82, 0xC9, 0x03,\n\t0x57, 0xCC, 0x87, 0xC9, 0x03, 0x57, 0xCC, 0x88,\n\t0xC9, 0x03, 0x57, 0xCC, 0xA3, 0xB5, 0x03, 0x58,\n\t0xCC, 0x87, 0xC9, 0x03, 0x58, 0xCC, 0x88, 0xC9,\n\t0x03, 0x59, 0xCC, 0x80, 0xC9, 0x03, 0x59, 0xCC,\n\t0x81, 0xC9, 0x03, 0x59, 0xCC, 0x82, 0xC9, 0x03,\n\t// Bytes 3240 - 327f\n\t0x59, 0xCC, 0x83, 0xC9, 0x03, 0x59, 0xCC, 0x84,\n\t0xC9, 0x03, 0x59, 0xCC, 0x87, 0xC9, 0x03, 0x59,\n\t0xCC, 0x88, 0xC9, 0x03, 0x59, 0xCC, 0x89, 0xC9,\n\t0x03, 0x59, 0xCC, 0xA3, 0xB5, 0x03, 0x5A, 0xCC,\n\t0x81, 0xC9, 0x03, 0x5A, 0xCC, 0x82, 0xC9, 0x03,\n\t0x5A, 0xCC, 0x87, 0xC9, 0x03, 0x5A, 0xCC, 0x8C,\n\t0xC9, 0x03, 0x5A, 0xCC, 0xA3, 0xB5, 0x03, 0x5A,\n\t0xCC, 0xB1, 0xB5, 0x03, 0x61, 0xCC, 0x80, 0xC9,\n\t// Bytes 3280 - 32bf\n\t0x03, 0x61, 0xCC, 0x81, 0xC9, 0x03, 0x61, 0xCC,\n\t0x83, 0xC9, 0x03, 0x61, 0xCC, 0x84, 0xC9, 0x03,\n\t0x61, 0xCC, 0x89, 0xC9, 0x03, 0x61, 0xCC, 0x8C,\n\t0xC9, 0x03, 0x61, 0xCC, 0x8F, 0xC9, 0x03, 0x61,\n\t0xCC, 0x91, 0xC9, 0x03, 0x61, 0xCC, 0xA5, 0xB5,\n\t0x03, 0x61, 0xCC, 0xA8, 0xA5, 0x03, 0x62, 0xCC,\n\t0x87, 0xC9, 0x03, 0x62, 0xCC, 0xA3, 0xB5, 0x03,\n\t0x62, 0xCC, 0xB1, 0xB5, 0x03, 0x63, 0xCC, 0x81,\n\t// Bytes 32c0 - 32ff\n\t0xC9, 0x03, 0x63, 0xCC, 0x82, 0xC9, 0x03, 0x63,\n\t0xCC, 0x87, 0xC9, 0x03, 0x63, 0xCC, 0x8C, 0xC9,\n\t0x03, 0x64, 0xCC, 0x87, 0xC9, 0x03, 0x64, 0xCC,\n\t0x8C, 0xC9, 0x03, 0x64, 0xCC, 0xA3, 0xB5, 0x03,\n\t0x64, 0xCC, 0xA7, 0xA5, 0x03, 0x64, 0xCC, 0xAD,\n\t0xB5, 0x03, 0x64, 0xCC, 0xB1, 0xB5, 0x03, 0x65,\n\t0xCC, 0x80, 0xC9, 0x03, 0x65, 0xCC, 0x81, 0xC9,\n\t0x03, 0x65, 0xCC, 0x83, 0xC9, 0x03, 0x65, 0xCC,\n\t// Bytes 3300 - 333f\n\t0x86, 0xC9, 0x03, 0x65, 0xCC, 0x87, 0xC9, 0x03,\n\t0x65, 0xCC, 0x88, 0xC9, 0x03, 0x65, 0xCC, 0x89,\n\t0xC9, 0x03, 0x65, 0xCC, 0x8C, 0xC9, 0x03, 0x65,\n\t0xCC, 0x8F, 0xC9, 0x03, 0x65, 0xCC, 0x91, 0xC9,\n\t0x03, 0x65, 0xCC, 0xA8, 0xA5, 0x03, 0x65, 0xCC,\n\t0xAD, 0xB5, 0x03, 0x65, 0xCC, 0xB0, 0xB5, 0x03,\n\t0x66, 0xCC, 0x87, 0xC9, 0x03, 0x67, 0xCC, 0x81,\n\t0xC9, 0x03, 0x67, 0xCC, 0x82, 0xC9, 0x03, 0x67,\n\t// Bytes 3340 - 337f\n\t0xCC, 0x84, 0xC9, 0x03, 0x67, 0xCC, 0x86, 0xC9,\n\t0x03, 0x67, 0xCC, 0x87, 0xC9, 0x03, 0x67, 0xCC,\n\t0x8C, 0xC9, 0x03, 0x67, 0xCC, 0xA7, 0xA5, 0x03,\n\t0x68, 0xCC, 0x82, 0xC9, 0x03, 0x68, 0xCC, 0x87,\n\t0xC9, 0x03, 0x68, 0xCC, 0x88, 0xC9, 0x03, 0x68,\n\t0xCC, 0x8C, 0xC9, 0x03, 0x68, 0xCC, 0xA3, 0xB5,\n\t0x03, 0x68, 0xCC, 0xA7, 0xA5, 0x03, 0x68, 0xCC,\n\t0xAE, 0xB5, 0x03, 0x68, 0xCC, 0xB1, 0xB5, 0x03,\n\t// Bytes 3380 - 33bf\n\t0x69, 0xCC, 0x80, 0xC9, 0x03, 0x69, 0xCC, 0x81,\n\t0xC9, 0x03, 0x69, 0xCC, 0x82, 0xC9, 0x03, 0x69,\n\t0xCC, 0x83, 0xC9, 0x03, 0x69, 0xCC, 0x84, 0xC9,\n\t0x03, 0x69, 0xCC, 0x86, 0xC9, 0x03, 0x69, 0xCC,\n\t0x89, 0xC9, 0x03, 0x69, 0xCC, 0x8C, 0xC9, 0x03,\n\t0x69, 0xCC, 0x8F, 0xC9, 0x03, 0x69, 0xCC, 0x91,\n\t0xC9, 0x03, 0x69, 0xCC, 0xA3, 0xB5, 0x03, 0x69,\n\t0xCC, 0xA8, 0xA5, 0x03, 0x69, 0xCC, 0xB0, 0xB5,\n\t// Bytes 33c0 - 33ff\n\t0x03, 0x6A, 0xCC, 0x82, 0xC9, 0x03, 0x6A, 0xCC,\n\t0x8C, 0xC9, 0x03, 0x6B, 0xCC, 0x81, 0xC9, 0x03,\n\t0x6B, 0xCC, 0x8C, 0xC9, 0x03, 0x6B, 0xCC, 0xA3,\n\t0xB5, 0x03, 0x6B, 0xCC, 0xA7, 0xA5, 0x03, 0x6B,\n\t0xCC, 0xB1, 0xB5, 0x03, 0x6C, 0xCC, 0x81, 0xC9,\n\t0x03, 0x6C, 0xCC, 0x8C, 0xC9, 0x03, 0x6C, 0xCC,\n\t0xA7, 0xA5, 0x03, 0x6C, 0xCC, 0xAD, 0xB5, 0x03,\n\t0x6C, 0xCC, 0xB1, 0xB5, 0x03, 0x6D, 0xCC, 0x81,\n\t// Bytes 3400 - 343f\n\t0xC9, 0x03, 0x6D, 0xCC, 0x87, 0xC9, 0x03, 0x6D,\n\t0xCC, 0xA3, 0xB5, 0x03, 0x6E, 0xCC, 0x80, 0xC9,\n\t0x03, 0x6E, 0xCC, 0x81, 0xC9, 0x03, 0x6E, 0xCC,\n\t0x83, 0xC9, 0x03, 0x6E, 0xCC, 0x87, 0xC9, 0x03,\n\t0x6E, 0xCC, 0x8C, 0xC9, 0x03, 0x6E, 0xCC, 0xA3,\n\t0xB5, 0x03, 0x6E, 0xCC, 0xA7, 0xA5, 0x03, 0x6E,\n\t0xCC, 0xAD, 0xB5, 0x03, 0x6E, 0xCC, 0xB1, 0xB5,\n\t0x03, 0x6F, 0xCC, 0x80, 0xC9, 0x03, 0x6F, 0xCC,\n\t// Bytes 3440 - 347f\n\t0x81, 0xC9, 0x03, 0x6F, 0xCC, 0x86, 0xC9, 0x03,\n\t0x6F, 0xCC, 0x89, 0xC9, 0x03, 0x6F, 0xCC, 0x8B,\n\t0xC9, 0x03, 0x6F, 0xCC, 0x8C, 0xC9, 0x03, 0x6F,\n\t0xCC, 0x8F, 0xC9, 0x03, 0x6F, 0xCC, 0x91, 0xC9,\n\t0x03, 0x70, 0xCC, 0x81, 0xC9, 0x03, 0x70, 0xCC,\n\t0x87, 0xC9, 0x03, 0x72, 0xCC, 0x81, 0xC9, 0x03,\n\t0x72, 0xCC, 0x87, 0xC9, 0x03, 0x72, 0xCC, 0x8C,\n\t0xC9, 0x03, 0x72, 0xCC, 0x8F, 0xC9, 0x03, 0x72,\n\t// Bytes 3480 - 34bf\n\t0xCC, 0x91, 0xC9, 0x03, 0x72, 0xCC, 0xA7, 0xA5,\n\t0x03, 0x72, 0xCC, 0xB1, 0xB5, 0x03, 0x73, 0xCC,\n\t0x82, 0xC9, 0x03, 0x73, 0xCC, 0x87, 0xC9, 0x03,\n\t0x73, 0xCC, 0xA6, 0xB5, 0x03, 0x73, 0xCC, 0xA7,\n\t0xA5, 0x03, 0x74, 0xCC, 0x87, 0xC9, 0x03, 0x74,\n\t0xCC, 0x88, 0xC9, 0x03, 0x74, 0xCC, 0x8C, 0xC9,\n\t0x03, 0x74, 0xCC, 0xA3, 0xB5, 0x03, 0x74, 0xCC,\n\t0xA6, 0xB5, 0x03, 0x74, 0xCC, 0xA7, 0xA5, 0x03,\n\t// Bytes 34c0 - 34ff\n\t0x74, 0xCC, 0xAD, 0xB5, 0x03, 0x74, 0xCC, 0xB1,\n\t0xB5, 0x03, 0x75, 0xCC, 0x80, 0xC9, 0x03, 0x75,\n\t0xCC, 0x81, 0xC9, 0x03, 0x75, 0xCC, 0x82, 0xC9,\n\t0x03, 0x75, 0xCC, 0x86, 0xC9, 0x03, 0x75, 0xCC,\n\t0x89, 0xC9, 0x03, 0x75, 0xCC, 0x8A, 0xC9, 0x03,\n\t0x75, 0xCC, 0x8B, 0xC9, 0x03, 0x75, 0xCC, 0x8C,\n\t0xC9, 0x03, 0x75, 0xCC, 0x8F, 0xC9, 0x03, 0x75,\n\t0xCC, 0x91, 0xC9, 0x03, 0x75, 0xCC, 0xA3, 0xB5,\n\t// Bytes 3500 - 353f\n\t0x03, 0x75, 0xCC, 0xA4, 0xB5, 0x03, 0x75, 0xCC,\n\t0xA8, 0xA5, 0x03, 0x75, 0xCC, 0xAD, 0xB5, 0x03,\n\t0x75, 0xCC, 0xB0, 0xB5, 0x03, 0x76, 0xCC, 0x83,\n\t0xC9, 0x03, 0x76, 0xCC, 0xA3, 0xB5, 0x03, 0x77,\n\t0xCC, 0x80, 0xC9, 0x03, 0x77, 0xCC, 0x81, 0xC9,\n\t0x03, 0x77, 0xCC, 0x82, 0xC9, 0x03, 0x77, 0xCC,\n\t0x87, 0xC9, 0x03, 0x77, 0xCC, 0x88, 0xC9, 0x03,\n\t0x77, 0xCC, 0x8A, 0xC9, 0x03, 0x77, 0xCC, 0xA3,\n\t// Bytes 3540 - 357f\n\t0xB5, 0x03, 0x78, 0xCC, 0x87, 0xC9, 0x03, 0x78,\n\t0xCC, 0x88, 0xC9, 0x03, 0x79, 0xCC, 0x80, 0xC9,\n\t0x03, 0x79, 0xCC, 0x81, 0xC9, 0x03, 0x79, 0xCC,\n\t0x82, 0xC9, 0x03, 0x79, 0xCC, 0x83, 0xC9, 0x03,\n\t0x79, 0xCC, 0x84, 0xC9, 0x03, 0x79, 0xCC, 0x87,\n\t0xC9, 0x03, 0x79, 0xCC, 0x88, 0xC9, 0x03, 0x79,\n\t0xCC, 0x89, 0xC9, 0x03, 0x79, 0xCC, 0x8A, 0xC9,\n\t0x03, 0x79, 0xCC, 0xA3, 0xB5, 0x03, 0x7A, 0xCC,\n\t// Bytes 3580 - 35bf\n\t0x81, 0xC9, 0x03, 0x7A, 0xCC, 0x82, 0xC9, 0x03,\n\t0x7A, 0xCC, 0x87, 0xC9, 0x03, 0x7A, 0xCC, 0x8C,\n\t0xC9, 0x03, 0x7A, 0xCC, 0xA3, 0xB5, 0x03, 0x7A,\n\t0xCC, 0xB1, 0xB5, 0x04, 0xC2, 0xA8, 0xCC, 0x80,\n\t0xCA, 0x04, 0xC2, 0xA8, 0xCC, 0x81, 0xCA, 0x04,\n\t0xC2, 0xA8, 0xCD, 0x82, 0xCA, 0x04, 0xC3, 0x86,\n\t0xCC, 0x81, 0xC9, 0x04, 0xC3, 0x86, 0xCC, 0x84,\n\t0xC9, 0x04, 0xC3, 0x98, 0xCC, 0x81, 0xC9, 0x04,\n\t// Bytes 35c0 - 35ff\n\t0xC3, 0xA6, 0xCC, 0x81, 0xC9, 0x04, 0xC3, 0xA6,\n\t0xCC, 0x84, 0xC9, 0x04, 0xC3, 0xB8, 0xCC, 0x81,\n\t0xC9, 0x04, 0xC5, 0xBF, 0xCC, 0x87, 0xC9, 0x04,\n\t0xC6, 0xB7, 0xCC, 0x8C, 0xC9, 0x04, 0xCA, 0x92,\n\t0xCC, 0x8C, 0xC9, 0x04, 0xCE, 0x91, 0xCC, 0x80,\n\t0xC9, 0x04, 0xCE, 0x91, 0xCC, 0x81, 0xC9, 0x04,\n\t0xCE, 0x91, 0xCC, 0x84, 0xC9, 0x04, 0xCE, 0x91,\n\t0xCC, 0x86, 0xC9, 0x04, 0xCE, 0x91, 0xCD, 0x85,\n\t// Bytes 3600 - 363f\n\t0xD9, 0x04, 0xCE, 0x95, 0xCC, 0x80, 0xC9, 0x04,\n\t0xCE, 0x95, 0xCC, 0x81, 0xC9, 0x04, 0xCE, 0x97,\n\t0xCC, 0x80, 0xC9, 0x04, 0xCE, 0x97, 0xCC, 0x81,\n\t0xC9, 0x04, 0xCE, 0x97, 0xCD, 0x85, 0xD9, 0x04,\n\t0xCE, 0x99, 0xCC, 0x80, 0xC9, 0x04, 0xCE, 0x99,\n\t0xCC, 0x81, 0xC9, 0x04, 0xCE, 0x99, 0xCC, 0x84,\n\t0xC9, 0x04, 0xCE, 0x99, 0xCC, 0x86, 0xC9, 0x04,\n\t0xCE, 0x99, 0xCC, 0x88, 0xC9, 0x04, 0xCE, 0x9F,\n\t// Bytes 3640 - 367f\n\t0xCC, 0x80, 0xC9, 0x04, 0xCE, 0x9F, 0xCC, 0x81,\n\t0xC9, 0x04, 0xCE, 0xA1, 0xCC, 0x94, 0xC9, 0x04,\n\t0xCE, 0xA5, 0xCC, 0x80, 0xC9, 0x04, 0xCE, 0xA5,\n\t0xCC, 0x81, 0xC9, 0x04, 0xCE, 0xA5, 0xCC, 0x84,\n\t0xC9, 0x04, 0xCE, 0xA5, 0xCC, 0x86, 0xC9, 0x04,\n\t0xCE, 0xA5, 0xCC, 0x88, 0xC9, 0x04, 0xCE, 0xA9,\n\t0xCC, 0x80, 0xC9, 0x04, 0xCE, 0xA9, 0xCC, 0x81,\n\t0xC9, 0x04, 0xCE, 0xA9, 0xCD, 0x85, 0xD9, 0x04,\n\t// Bytes 3680 - 36bf\n\t0xCE, 0xB1, 0xCC, 0x84, 0xC9, 0x04, 0xCE, 0xB1,\n\t0xCC, 0x86, 0xC9, 0x04, 0xCE, 0xB1, 0xCD, 0x85,\n\t0xD9, 0x04, 0xCE, 0xB5, 0xCC, 0x80, 0xC9, 0x04,\n\t0xCE, 0xB5, 0xCC, 0x81, 0xC9, 0x04, 0xCE, 0xB7,\n\t0xCD, 0x85, 0xD9, 0x04, 0xCE, 0xB9, 0xCC, 0x80,\n\t0xC9, 0x04, 0xCE, 0xB9, 0xCC, 0x81, 0xC9, 0x04,\n\t0xCE, 0xB9, 0xCC, 0x84, 0xC9, 0x04, 0xCE, 0xB9,\n\t0xCC, 0x86, 0xC9, 0x04, 0xCE, 0xB9, 0xCD, 0x82,\n\t// Bytes 36c0 - 36ff\n\t0xC9, 0x04, 0xCE, 0xBF, 0xCC, 0x80, 0xC9, 0x04,\n\t0xCE, 0xBF, 0xCC, 0x81, 0xC9, 0x04, 0xCF, 0x81,\n\t0xCC, 0x93, 0xC9, 0x04, 0xCF, 0x81, 0xCC, 0x94,\n\t0xC9, 0x04, 0xCF, 0x85, 0xCC, 0x80, 0xC9, 0x04,\n\t0xCF, 0x85, 0xCC, 0x81, 0xC9, 0x04, 0xCF, 0x85,\n\t0xCC, 0x84, 0xC9, 0x04, 0xCF, 0x85, 0xCC, 0x86,\n\t0xC9, 0x04, 0xCF, 0x85, 0xCD, 0x82, 0xC9, 0x04,\n\t0xCF, 0x89, 0xCD, 0x85, 0xD9, 0x04, 0xCF, 0x92,\n\t// Bytes 3700 - 373f\n\t0xCC, 0x81, 0xC9, 0x04, 0xCF, 0x92, 0xCC, 0x88,\n\t0xC9, 0x04, 0xD0, 0x86, 0xCC, 0x88, 0xC9, 0x04,\n\t0xD0, 0x90, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0x90,\n\t0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x93, 0xCC, 0x81,\n\t0xC9, 0x04, 0xD0, 0x95, 0xCC, 0x80, 0xC9, 0x04,\n\t0xD0, 0x95, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0x95,\n\t0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x96, 0xCC, 0x86,\n\t0xC9, 0x04, 0xD0, 0x96, 0xCC, 0x88, 0xC9, 0x04,\n\t// Bytes 3740 - 377f\n\t0xD0, 0x97, 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x98,\n\t0xCC, 0x80, 0xC9, 0x04, 0xD0, 0x98, 0xCC, 0x84,\n\t0xC9, 0x04, 0xD0, 0x98, 0xCC, 0x86, 0xC9, 0x04,\n\t0xD0, 0x98, 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x9A,\n\t0xCC, 0x81, 0xC9, 0x04, 0xD0, 0x9E, 0xCC, 0x88,\n\t0xC9, 0x04, 0xD0, 0xA3, 0xCC, 0x84, 0xC9, 0x04,\n\t0xD0, 0xA3, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0xA3,\n\t0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xA3, 0xCC, 0x8B,\n\t// Bytes 3780 - 37bf\n\t0xC9, 0x04, 0xD0, 0xA7, 0xCC, 0x88, 0xC9, 0x04,\n\t0xD0, 0xAB, 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xAD,\n\t0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xB0, 0xCC, 0x86,\n\t0xC9, 0x04, 0xD0, 0xB0, 0xCC, 0x88, 0xC9, 0x04,\n\t0xD0, 0xB3, 0xCC, 0x81, 0xC9, 0x04, 0xD0, 0xB5,\n\t0xCC, 0x80, 0xC9, 0x04, 0xD0, 0xB5, 0xCC, 0x86,\n\t0xC9, 0x04, 0xD0, 0xB5, 0xCC, 0x88, 0xC9, 0x04,\n\t0xD0, 0xB6, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0xB6,\n\t// Bytes 37c0 - 37ff\n\t0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xB7, 0xCC, 0x88,\n\t0xC9, 0x04, 0xD0, 0xB8, 0xCC, 0x80, 0xC9, 0x04,\n\t0xD0, 0xB8, 0xCC, 0x84, 0xC9, 0x04, 0xD0, 0xB8,\n\t0xCC, 0x86, 0xC9, 0x04, 0xD0, 0xB8, 0xCC, 0x88,\n\t0xC9, 0x04, 0xD0, 0xBA, 0xCC, 0x81, 0xC9, 0x04,\n\t0xD0, 0xBE, 0xCC, 0x88, 0xC9, 0x04, 0xD1, 0x83,\n\t0xCC, 0x84, 0xC9, 0x04, 0xD1, 0x83, 0xCC, 0x86,\n\t0xC9, 0x04, 0xD1, 0x83, 0xCC, 0x88, 0xC9, 0x04,\n\t// Bytes 3800 - 383f\n\t0xD1, 0x83, 0xCC, 0x8B, 0xC9, 0x04, 0xD1, 0x87,\n\t0xCC, 0x88, 0xC9, 0x04, 0xD1, 0x8B, 0xCC, 0x88,\n\t0xC9, 0x04, 0xD1, 0x8D, 0xCC, 0x88, 0xC9, 0x04,\n\t0xD1, 0x96, 0xCC, 0x88, 0xC9, 0x04, 0xD1, 0xB4,\n\t0xCC, 0x8F, 0xC9, 0x04, 0xD1, 0xB5, 0xCC, 0x8F,\n\t0xC9, 0x04, 0xD3, 0x98, 0xCC, 0x88, 0xC9, 0x04,\n\t0xD3, 0x99, 0xCC, 0x88, 0xC9, 0x04, 0xD3, 0xA8,\n\t0xCC, 0x88, 0xC9, 0x04, 0xD3, 0xA9, 0xCC, 0x88,\n\t// Bytes 3840 - 387f\n\t0xC9, 0x04, 0xD8, 0xA7, 0xD9, 0x93, 0xC9, 0x04,\n\t0xD8, 0xA7, 0xD9, 0x94, 0xC9, 0x04, 0xD8, 0xA7,\n\t0xD9, 0x95, 0xB5, 0x04, 0xD9, 0x88, 0xD9, 0x94,\n\t0xC9, 0x04, 0xD9, 0x8A, 0xD9, 0x94, 0xC9, 0x04,\n\t0xDB, 0x81, 0xD9, 0x94, 0xC9, 0x04, 0xDB, 0x92,\n\t0xD9, 0x94, 0xC9, 0x04, 0xDB, 0x95, 0xD9, 0x94,\n\t0xC9, 0x05, 0x41, 0xCC, 0x82, 0xCC, 0x80, 0xCA,\n\t0x05, 0x41, 0xCC, 0x82, 0xCC, 0x81, 0xCA, 0x05,\n\t// Bytes 3880 - 38bf\n\t0x41, 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, 0x41,\n\t0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x41, 0xCC,\n\t0x86, 0xCC, 0x80, 0xCA, 0x05, 0x41, 0xCC, 0x86,\n\t0xCC, 0x81, 0xCA, 0x05, 0x41, 0xCC, 0x86, 0xCC,\n\t0x83, 0xCA, 0x05, 0x41, 0xCC, 0x86, 0xCC, 0x89,\n\t0xCA, 0x05, 0x41, 0xCC, 0x87, 0xCC, 0x84, 0xCA,\n\t0x05, 0x41, 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05,\n\t0x41, 0xCC, 0x8A, 0xCC, 0x81, 0xCA, 0x05, 0x41,\n\t// Bytes 38c0 - 38ff\n\t0xCC, 0xA3, 0xCC, 0x82, 0xCA, 0x05, 0x41, 0xCC,\n\t0xA3, 0xCC, 0x86, 0xCA, 0x05, 0x43, 0xCC, 0xA7,\n\t0xCC, 0x81, 0xCA, 0x05, 0x45, 0xCC, 0x82, 0xCC,\n\t0x80, 0xCA, 0x05, 0x45, 0xCC, 0x82, 0xCC, 0x81,\n\t0xCA, 0x05, 0x45, 0xCC, 0x82, 0xCC, 0x83, 0xCA,\n\t0x05, 0x45, 0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05,\n\t0x45, 0xCC, 0x84, 0xCC, 0x80, 0xCA, 0x05, 0x45,\n\t0xCC, 0x84, 0xCC, 0x81, 0xCA, 0x05, 0x45, 0xCC,\n\t// Bytes 3900 - 393f\n\t0xA3, 0xCC, 0x82, 0xCA, 0x05, 0x45, 0xCC, 0xA7,\n\t0xCC, 0x86, 0xCA, 0x05, 0x49, 0xCC, 0x88, 0xCC,\n\t0x81, 0xCA, 0x05, 0x4C, 0xCC, 0xA3, 0xCC, 0x84,\n\t0xCA, 0x05, 0x4F, 0xCC, 0x82, 0xCC, 0x80, 0xCA,\n\t0x05, 0x4F, 0xCC, 0x82, 0xCC, 0x81, 0xCA, 0x05,\n\t0x4F, 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, 0x4F,\n\t0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x4F, 0xCC,\n\t0x83, 0xCC, 0x81, 0xCA, 0x05, 0x4F, 0xCC, 0x83,\n\t// Bytes 3940 - 397f\n\t0xCC, 0x84, 0xCA, 0x05, 0x4F, 0xCC, 0x83, 0xCC,\n\t0x88, 0xCA, 0x05, 0x4F, 0xCC, 0x84, 0xCC, 0x80,\n\t0xCA, 0x05, 0x4F, 0xCC, 0x84, 0xCC, 0x81, 0xCA,\n\t0x05, 0x4F, 0xCC, 0x87, 0xCC, 0x84, 0xCA, 0x05,\n\t0x4F, 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x4F,\n\t0xCC, 0x9B, 0xCC, 0x80, 0xCA, 0x05, 0x4F, 0xCC,\n\t0x9B, 0xCC, 0x81, 0xCA, 0x05, 0x4F, 0xCC, 0x9B,\n\t0xCC, 0x83, 0xCA, 0x05, 0x4F, 0xCC, 0x9B, 0xCC,\n\t// Bytes 3980 - 39bf\n\t0x89, 0xCA, 0x05, 0x4F, 0xCC, 0x9B, 0xCC, 0xA3,\n\t0xB6, 0x05, 0x4F, 0xCC, 0xA3, 0xCC, 0x82, 0xCA,\n\t0x05, 0x4F, 0xCC, 0xA8, 0xCC, 0x84, 0xCA, 0x05,\n\t0x52, 0xCC, 0xA3, 0xCC, 0x84, 0xCA, 0x05, 0x53,\n\t0xCC, 0x81, 0xCC, 0x87, 0xCA, 0x05, 0x53, 0xCC,\n\t0x8C, 0xCC, 0x87, 0xCA, 0x05, 0x53, 0xCC, 0xA3,\n\t0xCC, 0x87, 0xCA, 0x05, 0x55, 0xCC, 0x83, 0xCC,\n\t0x81, 0xCA, 0x05, 0x55, 0xCC, 0x84, 0xCC, 0x88,\n\t// Bytes 39c0 - 39ff\n\t0xCA, 0x05, 0x55, 0xCC, 0x88, 0xCC, 0x80, 0xCA,\n\t0x05, 0x55, 0xCC, 0x88, 0xCC, 0x81, 0xCA, 0x05,\n\t0x55, 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x55,\n\t0xCC, 0x88, 0xCC, 0x8C, 0xCA, 0x05, 0x55, 0xCC,\n\t0x9B, 0xCC, 0x80, 0xCA, 0x05, 0x55, 0xCC, 0x9B,\n\t0xCC, 0x81, 0xCA, 0x05, 0x55, 0xCC, 0x9B, 0xCC,\n\t0x83, 0xCA, 0x05, 0x55, 0xCC, 0x9B, 0xCC, 0x89,\n\t0xCA, 0x05, 0x55, 0xCC, 0x9B, 0xCC, 0xA3, 0xB6,\n\t// Bytes 3a00 - 3a3f\n\t0x05, 0x61, 0xCC, 0x82, 0xCC, 0x80, 0xCA, 0x05,\n\t0x61, 0xCC, 0x82, 0xCC, 0x81, 0xCA, 0x05, 0x61,\n\t0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, 0x61, 0xCC,\n\t0x82, 0xCC, 0x89, 0xCA, 0x05, 0x61, 0xCC, 0x86,\n\t0xCC, 0x80, 0xCA, 0x05, 0x61, 0xCC, 0x86, 0xCC,\n\t0x81, 0xCA, 0x05, 0x61, 0xCC, 0x86, 0xCC, 0x83,\n\t0xCA, 0x05, 0x61, 0xCC, 0x86, 0xCC, 0x89, 0xCA,\n\t0x05, 0x61, 0xCC, 0x87, 0xCC, 0x84, 0xCA, 0x05,\n\t// Bytes 3a40 - 3a7f\n\t0x61, 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x61,\n\t0xCC, 0x8A, 0xCC, 0x81, 0xCA, 0x05, 0x61, 0xCC,\n\t0xA3, 0xCC, 0x82, 0xCA, 0x05, 0x61, 0xCC, 0xA3,\n\t0xCC, 0x86, 0xCA, 0x05, 0x63, 0xCC, 0xA7, 0xCC,\n\t0x81, 0xCA, 0x05, 0x65, 0xCC, 0x82, 0xCC, 0x80,\n\t0xCA, 0x05, 0x65, 0xCC, 0x82, 0xCC, 0x81, 0xCA,\n\t0x05, 0x65, 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05,\n\t0x65, 0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x65,\n\t// Bytes 3a80 - 3abf\n\t0xCC, 0x84, 0xCC, 0x80, 0xCA, 0x05, 0x65, 0xCC,\n\t0x84, 0xCC, 0x81, 0xCA, 0x05, 0x65, 0xCC, 0xA3,\n\t0xCC, 0x82, 0xCA, 0x05, 0x65, 0xCC, 0xA7, 0xCC,\n\t0x86, 0xCA, 0x05, 0x69, 0xCC, 0x88, 0xCC, 0x81,\n\t0xCA, 0x05, 0x6C, 0xCC, 0xA3, 0xCC, 0x84, 0xCA,\n\t0x05, 0x6F, 0xCC, 0x82, 0xCC, 0x80, 0xCA, 0x05,\n\t0x6F, 0xCC, 0x82, 0xCC, 0x81, 0xCA, 0x05, 0x6F,\n\t0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, 0x6F, 0xCC,\n\t// Bytes 3ac0 - 3aff\n\t0x82, 0xCC, 0x89, 0xCA, 0x05, 0x6F, 0xCC, 0x83,\n\t0xCC, 0x81, 0xCA, 0x05, 0x6F, 0xCC, 0x83, 0xCC,\n\t0x84, 0xCA, 0x05, 0x6F, 0xCC, 0x83, 0xCC, 0x88,\n\t0xCA, 0x05, 0x6F, 0xCC, 0x84, 0xCC, 0x80, 0xCA,\n\t0x05, 0x6F, 0xCC, 0x84, 0xCC, 0x81, 0xCA, 0x05,\n\t0x6F, 0xCC, 0x87, 0xCC, 0x84, 0xCA, 0x05, 0x6F,\n\t0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x6F, 0xCC,\n\t0x9B, 0xCC, 0x80, 0xCA, 0x05, 0x6F, 0xCC, 0x9B,\n\t// Bytes 3b00 - 3b3f\n\t0xCC, 0x81, 0xCA, 0x05, 0x6F, 0xCC, 0x9B, 0xCC,\n\t0x83, 0xCA, 0x05, 0x6F, 0xCC, 0x9B, 0xCC, 0x89,\n\t0xCA, 0x05, 0x6F, 0xCC, 0x9B, 0xCC, 0xA3, 0xB6,\n\t0x05, 0x6F, 0xCC, 0xA3, 0xCC, 0x82, 0xCA, 0x05,\n\t0x6F, 0xCC, 0xA8, 0xCC, 0x84, 0xCA, 0x05, 0x72,\n\t0xCC, 0xA3, 0xCC, 0x84, 0xCA, 0x05, 0x73, 0xCC,\n\t0x81, 0xCC, 0x87, 0xCA, 0x05, 0x73, 0xCC, 0x8C,\n\t0xCC, 0x87, 0xCA, 0x05, 0x73, 0xCC, 0xA3, 0xCC,\n\t// Bytes 3b40 - 3b7f\n\t0x87, 0xCA, 0x05, 0x75, 0xCC, 0x83, 0xCC, 0x81,\n\t0xCA, 0x05, 0x75, 0xCC, 0x84, 0xCC, 0x88, 0xCA,\n\t0x05, 0x75, 0xCC, 0x88, 0xCC, 0x80, 0xCA, 0x05,\n\t0x75, 0xCC, 0x88, 0xCC, 0x81, 0xCA, 0x05, 0x75,\n\t0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x75, 0xCC,\n\t0x88, 0xCC, 0x8C, 0xCA, 0x05, 0x75, 0xCC, 0x9B,\n\t0xCC, 0x80, 0xCA, 0x05, 0x75, 0xCC, 0x9B, 0xCC,\n\t0x81, 0xCA, 0x05, 0x75, 0xCC, 0x9B, 0xCC, 0x83,\n\t// Bytes 3b80 - 3bbf\n\t0xCA, 0x05, 0x75, 0xCC, 0x9B, 0xCC, 0x89, 0xCA,\n\t0x05, 0x75, 0xCC, 0x9B, 0xCC, 0xA3, 0xB6, 0x05,\n\t0xE1, 0xBE, 0xBF, 0xCC, 0x80, 0xCA, 0x05, 0xE1,\n\t0xBE, 0xBF, 0xCC, 0x81, 0xCA, 0x05, 0xE1, 0xBE,\n\t0xBF, 0xCD, 0x82, 0xCA, 0x05, 0xE1, 0xBF, 0xBE,\n\t0xCC, 0x80, 0xCA, 0x05, 0xE1, 0xBF, 0xBE, 0xCC,\n\t0x81, 0xCA, 0x05, 0xE1, 0xBF, 0xBE, 0xCD, 0x82,\n\t0xCA, 0x05, 0xE2, 0x86, 0x90, 0xCC, 0xB8, 0x05,\n\t// Bytes 3bc0 - 3bff\n\t0x05, 0xE2, 0x86, 0x92, 0xCC, 0xB8, 0x05, 0x05,\n\t0xE2, 0x86, 0x94, 0xCC, 0xB8, 0x05, 0x05, 0xE2,\n\t0x87, 0x90, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x87,\n\t0x92, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x87, 0x94,\n\t0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x88, 0x83, 0xCC,\n\t0xB8, 0x05, 0x05, 0xE2, 0x88, 0x88, 0xCC, 0xB8,\n\t0x05, 0x05, 0xE2, 0x88, 0x8B, 0xCC, 0xB8, 0x05,\n\t0x05, 0xE2, 0x88, 0xA3, 0xCC, 0xB8, 0x05, 0x05,\n\t// Bytes 3c00 - 3c3f\n\t0xE2, 0x88, 0xA5, 0xCC, 0xB8, 0x05, 0x05, 0xE2,\n\t0x88, 0xBC, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89,\n\t0x83, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0x85,\n\t0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0x88, 0xCC,\n\t0xB8, 0x05, 0x05, 0xE2, 0x89, 0x8D, 0xCC, 0xB8,\n\t0x05, 0x05, 0xE2, 0x89, 0xA1, 0xCC, 0xB8, 0x05,\n\t0x05, 0xE2, 0x89, 0xA4, 0xCC, 0xB8, 0x05, 0x05,\n\t0xE2, 0x89, 0xA5, 0xCC, 0xB8, 0x05, 0x05, 0xE2,\n\t// Bytes 3c40 - 3c7f\n\t0x89, 0xB2, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89,\n\t0xB3, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xB6,\n\t0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xB7, 0xCC,\n\t0xB8, 0x05, 0x05, 0xE2, 0x89, 0xBA, 0xCC, 0xB8,\n\t0x05, 0x05, 0xE2, 0x89, 0xBB, 0xCC, 0xB8, 0x05,\n\t0x05, 0xE2, 0x89, 0xBC, 0xCC, 0xB8, 0x05, 0x05,\n\t0xE2, 0x89, 0xBD, 0xCC, 0xB8, 0x05, 0x05, 0xE2,\n\t0x8A, 0x82, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A,\n\t// Bytes 3c80 - 3cbf\n\t0x83, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x86,\n\t0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x87, 0xCC,\n\t0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x91, 0xCC, 0xB8,\n\t0x05, 0x05, 0xE2, 0x8A, 0x92, 0xCC, 0xB8, 0x05,\n\t0x05, 0xE2, 0x8A, 0xA2, 0xCC, 0xB8, 0x05, 0x05,\n\t0xE2, 0x8A, 0xA8, 0xCC, 0xB8, 0x05, 0x05, 0xE2,\n\t0x8A, 0xA9, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A,\n\t0xAB, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xB2,\n\t// Bytes 3cc0 - 3cff\n\t0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xB3, 0xCC,\n\t0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xB4, 0xCC, 0xB8,\n\t0x05, 0x05, 0xE2, 0x8A, 0xB5, 0xCC, 0xB8, 0x05,\n\t0x06, 0xCE, 0x91, 0xCC, 0x93, 0xCD, 0x85, 0xDA,\n\t0x06, 0xCE, 0x91, 0xCC, 0x94, 0xCD, 0x85, 0xDA,\n\t0x06, 0xCE, 0x95, 0xCC, 0x93, 0xCC, 0x80, 0xCA,\n\t0x06, 0xCE, 0x95, 0xCC, 0x93, 0xCC, 0x81, 0xCA,\n\t0x06, 0xCE, 0x95, 0xCC, 0x94, 0xCC, 0x80, 0xCA,\n\t// Bytes 3d00 - 3d3f\n\t0x06, 0xCE, 0x95, 0xCC, 0x94, 0xCC, 0x81, 0xCA,\n\t0x06, 0xCE, 0x97, 0xCC, 0x93, 0xCD, 0x85, 0xDA,\n\t0x06, 0xCE, 0x97, 0xCC, 0x94, 0xCD, 0x85, 0xDA,\n\t0x06, 0xCE, 0x99, 0xCC, 0x93, 0xCC, 0x80, 0xCA,\n\t0x06, 0xCE, 0x99, 0xCC, 0x93, 0xCC, 0x81, 0xCA,\n\t0x06, 0xCE, 0x99, 0xCC, 0x93, 0xCD, 0x82, 0xCA,\n\t0x06, 0xCE, 0x99, 0xCC, 0x94, 0xCC, 0x80, 0xCA,\n\t0x06, 0xCE, 0x99, 0xCC, 0x94, 0xCC, 0x81, 0xCA,\n\t// Bytes 3d40 - 3d7f\n\t0x06, 0xCE, 0x99, 0xCC, 0x94, 0xCD, 0x82, 0xCA,\n\t0x06, 0xCE, 0x9F, 0xCC, 0x93, 0xCC, 0x80, 0xCA,\n\t0x06, 0xCE, 0x9F, 0xCC, 0x93, 0xCC, 0x81, 0xCA,\n\t0x06, 0xCE, 0x9F, 0xCC, 0x94, 0xCC, 0x80, 0xCA,\n\t0x06, 0xCE, 0x9F, 0xCC, 0x94, 0xCC, 0x81, 0xCA,\n\t0x06, 0xCE, 0xA5, 0xCC, 0x94, 0xCC, 0x80, 0xCA,\n\t0x06, 0xCE, 0xA5, 0xCC, 0x94, 0xCC, 0x81, 0xCA,\n\t0x06, 0xCE, 0xA5, 0xCC, 0x94, 0xCD, 0x82, 0xCA,\n\t// Bytes 3d80 - 3dbf\n\t0x06, 0xCE, 0xA9, 0xCC, 0x93, 0xCD, 0x85, 0xDA,\n\t0x06, 0xCE, 0xA9, 0xCC, 0x94, 0xCD, 0x85, 0xDA,\n\t0x06, 0xCE, 0xB1, 0xCC, 0x80, 0xCD, 0x85, 0xDA,\n\t0x06, 0xCE, 0xB1, 0xCC, 0x81, 0xCD, 0x85, 0xDA,\n\t0x06, 0xCE, 0xB1, 0xCC, 0x93, 0xCD, 0x85, 0xDA,\n\t0x06, 0xCE, 0xB1, 0xCC, 0x94, 0xCD, 0x85, 0xDA,\n\t0x06, 0xCE, 0xB1, 0xCD, 0x82, 0xCD, 0x85, 0xDA,\n\t0x06, 0xCE, 0xB5, 0xCC, 0x93, 0xCC, 0x80, 0xCA,\n\t// Bytes 3dc0 - 3dff\n\t0x06, 0xCE, 0xB5, 0xCC, 0x93, 0xCC, 0x81, 0xCA,\n\t0x06, 0xCE, 0xB5, 0xCC, 0x94, 0xCC, 0x80, 0xCA,\n\t0x06, 0xCE, 0xB5, 0xCC, 0x94, 0xCC, 0x81, 0xCA,\n\t0x06, 0xCE, 0xB7, 0xCC, 0x80, 0xCD, 0x85, 0xDA,\n\t0x06, 0xCE, 0xB7, 0xCC, 0x81, 0xCD, 0x85, 0xDA,\n\t0x06, 0xCE, 0xB7, 0xCC, 0x93, 0xCD, 0x85, 0xDA,\n\t0x06, 0xCE, 0xB7, 0xCC, 0x94, 0xCD, 0x85, 0xDA,\n\t0x06, 0xCE, 0xB7, 0xCD, 0x82, 0xCD, 0x85, 0xDA,\n\t// Bytes 3e00 - 3e3f\n\t0x06, 0xCE, 0xB9, 0xCC, 0x88, 0xCC, 0x80, 0xCA,\n\t0x06, 0xCE, 0xB9, 0xCC, 0x88, 0xCC, 0x81, 0xCA,\n\t0x06, 0xCE, 0xB9, 0xCC, 0x88, 0xCD, 0x82, 0xCA,\n\t0x06, 0xCE, 0xB9, 0xCC, 0x93, 0xCC, 0x80, 0xCA,\n\t0x06, 0xCE, 0xB9, 0xCC, 0x93, 0xCC, 0x81, 0xCA,\n\t0x06, 0xCE, 0xB9, 0xCC, 0x93, 0xCD, 0x82, 0xCA,\n\t0x06, 0xCE, 0xB9, 0xCC, 0x94, 0xCC, 0x80, 0xCA,\n\t0x06, 0xCE, 0xB9, 0xCC, 0x94, 0xCC, 0x81, 0xCA,\n\t// Bytes 3e40 - 3e7f\n\t0x06, 0xCE, 0xB9, 0xCC, 0x94, 0xCD, 0x82, 0xCA,\n\t0x06, 0xCE, 0xBF, 0xCC, 0x93, 0xCC, 0x80, 0xCA,\n\t0x06, 0xCE, 0xBF, 0xCC, 0x93, 0xCC, 0x81, 0xCA,\n\t0x06, 0xCE, 0xBF, 0xCC, 0x94, 0xCC, 0x80, 0xCA,\n\t0x06, 0xCE, 0xBF, 0xCC, 0x94, 0xCC, 0x81, 0xCA,\n\t0x06, 0xCF, 0x85, 0xCC, 0x88, 0xCC, 0x80, 0xCA,\n\t0x06, 0xCF, 0x85, 0xCC, 0x88, 0xCC, 0x81, 0xCA,\n\t0x06, 0xCF, 0x85, 0xCC, 0x88, 0xCD, 0x82, 0xCA,\n\t// Bytes 3e80 - 3ebf\n\t0x06, 0xCF, 0x85, 0xCC, 0x93, 0xCC, 0x80, 0xCA,\n\t0x06, 0xCF, 0x85, 0xCC, 0x93, 0xCC, 0x81, 0xCA,\n\t0x06, 0xCF, 0x85, 0xCC, 0x93, 0xCD, 0x82, 0xCA,\n\t0x06, 0xCF, 0x85, 0xCC, 0x94, 0xCC, 0x80, 0xCA,\n\t0x06, 0xCF, 0x85, 0xCC, 0x94, 0xCC, 0x81, 0xCA,\n\t0x06, 0xCF, 0x85, 0xCC, 0x94, 0xCD, 0x82, 0xCA,\n\t0x06, 0xCF, 0x89, 0xCC, 0x80, 0xCD, 0x85, 0xDA,\n\t0x06, 0xCF, 0x89, 0xCC, 0x81, 0xCD, 0x85, 0xDA,\n\t// Bytes 3ec0 - 3eff\n\t0x06, 0xCF, 0x89, 0xCC, 0x93, 0xCD, 0x85, 0xDA,\n\t0x06, 0xCF, 0x89, 0xCC, 0x94, 0xCD, 0x85, 0xDA,\n\t0x06, 0xCF, 0x89, 0xCD, 0x82, 0xCD, 0x85, 0xDA,\n\t0x06, 0xE0, 0xA4, 0xA8, 0xE0, 0xA4, 0xBC, 0x09,\n\t0x06, 0xE0, 0xA4, 0xB0, 0xE0, 0xA4, 0xBC, 0x09,\n\t0x06, 0xE0, 0xA4, 0xB3, 0xE0, 0xA4, 0xBC, 0x09,\n\t0x06, 0xE0, 0xB1, 0x86, 0xE0, 0xB1, 0x96, 0x85,\n\t0x06, 0xE0, 0xB7, 0x99, 0xE0, 0xB7, 0x8A, 0x11,\n\t// Bytes 3f00 - 3f3f\n\t0x06, 0xE3, 0x81, 0x86, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x81, 0x8B, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x81, 0x8D, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x81, 0x8F, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x81, 0x91, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x81, 0x93, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x81, 0x95, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x81, 0x97, 0xE3, 0x82, 0x99, 0x0D,\n\t// Bytes 3f40 - 3f7f\n\t0x06, 0xE3, 0x81, 0x99, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x81, 0x9B, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x81, 0x9D, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x81, 0x9F, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x81, 0xA1, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x81, 0xA4, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x81, 0xA6, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x81, 0xA8, 0xE3, 0x82, 0x99, 0x0D,\n\t// Bytes 3f80 - 3fbf\n\t0x06, 0xE3, 0x81, 0xAF, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x81, 0xAF, 0xE3, 0x82, 0x9A, 0x0D,\n\t0x06, 0xE3, 0x81, 0xB2, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x81, 0xB2, 0xE3, 0x82, 0x9A, 0x0D,\n\t0x06, 0xE3, 0x81, 0xB5, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x81, 0xB5, 0xE3, 0x82, 0x9A, 0x0D,\n\t0x06, 0xE3, 0x81, 0xB8, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x81, 0xB8, 0xE3, 0x82, 0x9A, 0x0D,\n\t// Bytes 3fc0 - 3fff\n\t0x06, 0xE3, 0x81, 0xBB, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x81, 0xBB, 0xE3, 0x82, 0x9A, 0x0D,\n\t0x06, 0xE3, 0x82, 0x9D, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x82, 0xA6, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x82, 0xAD, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x82, 0xB1, 0xE3, 0x82, 0x99, 0x0D,\n\t// Bytes 4000 - 403f\n\t0x06, 0xE3, 0x82, 0xB3, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x82, 0xB5, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x82, 0xB7, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x82, 0xB9, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x82, 0xBB, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x82, 0xBD, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x82, 0xBF, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x83, 0x81, 0xE3, 0x82, 0x99, 0x0D,\n\t// Bytes 4040 - 407f\n\t0x06, 0xE3, 0x83, 0x84, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x83, 0x86, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x9A, 0x0D,\n\t0x06, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A, 0x0D,\n\t0x06, 0xE3, 0x83, 0x95, 0xE3, 0x82, 0x99, 0x0D,\n\t// Bytes 4080 - 40bf\n\t0x06, 0xE3, 0x83, 0x95, 0xE3, 0x82, 0x9A, 0x0D,\n\t0x06, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, 0x0D,\n\t0x06, 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x9A, 0x0D,\n\t0x06, 0xE3, 0x83, 0xAF, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x83, 0xB0, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x83, 0xB1, 0xE3, 0x82, 0x99, 0x0D,\n\t// Bytes 40c0 - 40ff\n\t0x06, 0xE3, 0x83, 0xB2, 0xE3, 0x82, 0x99, 0x0D,\n\t0x06, 0xE3, 0x83, 0xBD, 0xE3, 0x82, 0x99, 0x0D,\n\t0x08, 0xCE, 0x91, 0xCC, 0x93, 0xCC, 0x80, 0xCD,\n\t0x85, 0xDB, 0x08, 0xCE, 0x91, 0xCC, 0x93, 0xCC,\n\t0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0x91, 0xCC,\n\t0x93, 0xCD, 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE,\n\t0x91, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDB,\n\t0x08, 0xCE, 0x91, 0xCC, 0x94, 0xCC, 0x81, 0xCD,\n\t// Bytes 4100 - 413f\n\t0x85, 0xDB, 0x08, 0xCE, 0x91, 0xCC, 0x94, 0xCD,\n\t0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0x97, 0xCC,\n\t0x93, 0xCC, 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE,\n\t0x97, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDB,\n\t0x08, 0xCE, 0x97, 0xCC, 0x93, 0xCD, 0x82, 0xCD,\n\t0x85, 0xDB, 0x08, 0xCE, 0x97, 0xCC, 0x94, 0xCC,\n\t0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0x97, 0xCC,\n\t0x94, 0xCC, 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE,\n\t// Bytes 4140 - 417f\n\t0x97, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDB,\n\t0x08, 0xCE, 0xA9, 0xCC, 0x93, 0xCC, 0x80, 0xCD,\n\t0x85, 0xDB, 0x08, 0xCE, 0xA9, 0xCC, 0x93, 0xCC,\n\t0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xA9, 0xCC,\n\t0x93, 0xCD, 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE,\n\t0xA9, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDB,\n\t0x08, 0xCE, 0xA9, 0xCC, 0x94, 0xCC, 0x81, 0xCD,\n\t0x85, 0xDB, 0x08, 0xCE, 0xA9, 0xCC, 0x94, 0xCD,\n\t// Bytes 4180 - 41bf\n\t0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xB1, 0xCC,\n\t0x93, 0xCC, 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE,\n\t0xB1, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDB,\n\t0x08, 0xCE, 0xB1, 0xCC, 0x93, 0xCD, 0x82, 0xCD,\n\t0x85, 0xDB, 0x08, 0xCE, 0xB1, 0xCC, 0x94, 0xCC,\n\t0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xB1, 0xCC,\n\t0x94, 0xCC, 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE,\n\t0xB1, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDB,\n\t// Bytes 41c0 - 41ff\n\t0x08, 0xCE, 0xB7, 0xCC, 0x93, 0xCC, 0x80, 0xCD,\n\t0x85, 0xDB, 0x08, 0xCE, 0xB7, 0xCC, 0x93, 0xCC,\n\t0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xB7, 0xCC,\n\t0x93, 0xCD, 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE,\n\t0xB7, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDB,\n\t0x08, 0xCE, 0xB7, 0xCC, 0x94, 0xCC, 0x81, 0xCD,\n\t0x85, 0xDB, 0x08, 0xCE, 0xB7, 0xCC, 0x94, 0xCD,\n\t0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCF, 0x89, 0xCC,\n\t// Bytes 4200 - 423f\n\t0x93, 0xCC, 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCF,\n\t0x89, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDB,\n\t0x08, 0xCF, 0x89, 0xCC, 0x93, 0xCD, 0x82, 0xCD,\n\t0x85, 0xDB, 0x08, 0xCF, 0x89, 0xCC, 0x94, 0xCC,\n\t0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCF, 0x89, 0xCC,\n\t0x94, 0xCC, 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCF,\n\t0x89, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDB,\n\t0x08, 0xF0, 0x91, 0x82, 0x99, 0xF0, 0x91, 0x82,\n\t// Bytes 4240 - 427f\n\t0xBA, 0x09, 0x08, 0xF0, 0x91, 0x82, 0x9B, 0xF0,\n\t0x91, 0x82, 0xBA, 0x09, 0x08, 0xF0, 0x91, 0x82,\n\t0xA5, 0xF0, 0x91, 0x82, 0xBA, 0x09, 0x42, 0xC2,\n\t0xB4, 0x01, 0x43, 0x20, 0xCC, 0x81, 0xC9, 0x43,\n\t0x20, 0xCC, 0x83, 0xC9, 0x43, 0x20, 0xCC, 0x84,\n\t0xC9, 0x43, 0x20, 0xCC, 0x85, 0xC9, 0x43, 0x20,\n\t0xCC, 0x86, 0xC9, 0x43, 0x20, 0xCC, 0x87, 0xC9,\n\t0x43, 0x20, 0xCC, 0x88, 0xC9, 0x43, 0x20, 0xCC,\n\t// Bytes 4280 - 42bf\n\t0x8A, 0xC9, 0x43, 0x20, 0xCC, 0x8B, 0xC9, 0x43,\n\t0x20, 0xCC, 0x93, 0xC9, 0x43, 0x20, 0xCC, 0x94,\n\t0xC9, 0x43, 0x20, 0xCC, 0xA7, 0xA5, 0x43, 0x20,\n\t0xCC, 0xA8, 0xA5, 0x43, 0x20, 0xCC, 0xB3, 0xB5,\n\t0x43, 0x20, 0xCD, 0x82, 0xC9, 0x43, 0x20, 0xCD,\n\t0x85, 0xD9, 0x43, 0x20, 0xD9, 0x8B, 0x59, 0x43,\n\t0x20, 0xD9, 0x8C, 0x5D, 0x43, 0x20, 0xD9, 0x8D,\n\t0x61, 0x43, 0x20, 0xD9, 0x8E, 0x65, 0x43, 0x20,\n\t// Bytes 42c0 - 42ff\n\t0xD9, 0x8F, 0x69, 0x43, 0x20, 0xD9, 0x90, 0x6D,\n\t0x43, 0x20, 0xD9, 0x91, 0x71, 0x43, 0x20, 0xD9,\n\t0x92, 0x75, 0x43, 0x41, 0xCC, 0x8A, 0xC9, 0x43,\n\t0x73, 0xCC, 0x87, 0xC9, 0x44, 0x20, 0xE3, 0x82,\n\t0x99, 0x0D, 0x44, 0x20, 0xE3, 0x82, 0x9A, 0x0D,\n\t0x44, 0xC2, 0xA8, 0xCC, 0x81, 0xCA, 0x44, 0xCE,\n\t0x91, 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0x95, 0xCC,\n\t0x81, 0xC9, 0x44, 0xCE, 0x97, 0xCC, 0x81, 0xC9,\n\t// Bytes 4300 - 433f\n\t0x44, 0xCE, 0x99, 0xCC, 0x81, 0xC9, 0x44, 0xCE,\n\t0x9F, 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0xA5, 0xCC,\n\t0x81, 0xC9, 0x44, 0xCE, 0xA5, 0xCC, 0x88, 0xC9,\n\t0x44, 0xCE, 0xA9, 0xCC, 0x81, 0xC9, 0x44, 0xCE,\n\t0xB1, 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0xB5, 0xCC,\n\t0x81, 0xC9, 0x44, 0xCE, 0xB7, 0xCC, 0x81, 0xC9,\n\t0x44, 0xCE, 0xB9, 0xCC, 0x81, 0xC9, 0x44, 0xCE,\n\t0xBF, 0xCC, 0x81, 0xC9, 0x44, 0xCF, 0x85, 0xCC,\n\t// Bytes 4340 - 437f\n\t0x81, 0xC9, 0x44, 0xCF, 0x89, 0xCC, 0x81, 0xC9,\n\t0x44, 0xD7, 0x90, 0xD6, 0xB7, 0x31, 0x44, 0xD7,\n\t0x90, 0xD6, 0xB8, 0x35, 0x44, 0xD7, 0x90, 0xD6,\n\t0xBC, 0x41, 0x44, 0xD7, 0x91, 0xD6, 0xBC, 0x41,\n\t0x44, 0xD7, 0x91, 0xD6, 0xBF, 0x49, 0x44, 0xD7,\n\t0x92, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x93, 0xD6,\n\t0xBC, 0x41, 0x44, 0xD7, 0x94, 0xD6, 0xBC, 0x41,\n\t0x44, 0xD7, 0x95, 0xD6, 0xB9, 0x39, 0x44, 0xD7,\n\t// Bytes 4380 - 43bf\n\t0x95, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x96, 0xD6,\n\t0xBC, 0x41, 0x44, 0xD7, 0x98, 0xD6, 0xBC, 0x41,\n\t0x44, 0xD7, 0x99, 0xD6, 0xB4, 0x25, 0x44, 0xD7,\n\t0x99, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x9A, 0xD6,\n\t0xBC, 0x41, 0x44, 0xD7, 0x9B, 0xD6, 0xBC, 0x41,\n\t0x44, 0xD7, 0x9B, 0xD6, 0xBF, 0x49, 0x44, 0xD7,\n\t0x9C, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x9E, 0xD6,\n\t0xBC, 0x41, 0x44, 0xD7, 0xA0, 0xD6, 0xBC, 0x41,\n\t// Bytes 43c0 - 43ff\n\t0x44, 0xD7, 0xA1, 0xD6, 0xBC, 0x41, 0x44, 0xD7,\n\t0xA3, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0xA4, 0xD6,\n\t0xBC, 0x41, 0x44, 0xD7, 0xA4, 0xD6, 0xBF, 0x49,\n\t0x44, 0xD7, 0xA6, 0xD6, 0xBC, 0x41, 0x44, 0xD7,\n\t0xA7, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0xA8, 0xD6,\n\t0xBC, 0x41, 0x44, 0xD7, 0xA9, 0xD6, 0xBC, 0x41,\n\t0x44, 0xD7, 0xA9, 0xD7, 0x81, 0x4D, 0x44, 0xD7,\n\t0xA9, 0xD7, 0x82, 0x51, 0x44, 0xD7, 0xAA, 0xD6,\n\t// Bytes 4400 - 443f\n\t0xBC, 0x41, 0x44, 0xD7, 0xB2, 0xD6, 0xB7, 0x31,\n\t0x44, 0xD8, 0xA7, 0xD9, 0x8B, 0x59, 0x44, 0xD8,\n\t0xA7, 0xD9, 0x93, 0xC9, 0x44, 0xD8, 0xA7, 0xD9,\n\t0x94, 0xC9, 0x44, 0xD8, 0xA7, 0xD9, 0x95, 0xB5,\n\t0x44, 0xD8, 0xB0, 0xD9, 0xB0, 0x79, 0x44, 0xD8,\n\t0xB1, 0xD9, 0xB0, 0x79, 0x44, 0xD9, 0x80, 0xD9,\n\t0x8B, 0x59, 0x44, 0xD9, 0x80, 0xD9, 0x8E, 0x65,\n\t0x44, 0xD9, 0x80, 0xD9, 0x8F, 0x69, 0x44, 0xD9,\n\t// Bytes 4440 - 447f\n\t0x80, 0xD9, 0x90, 0x6D, 0x44, 0xD9, 0x80, 0xD9,\n\t0x91, 0x71, 0x44, 0xD9, 0x80, 0xD9, 0x92, 0x75,\n\t0x44, 0xD9, 0x87, 0xD9, 0xB0, 0x79, 0x44, 0xD9,\n\t0x88, 0xD9, 0x94, 0xC9, 0x44, 0xD9, 0x89, 0xD9,\n\t0xB0, 0x79, 0x44, 0xD9, 0x8A, 0xD9, 0x94, 0xC9,\n\t0x44, 0xDB, 0x92, 0xD9, 0x94, 0xC9, 0x44, 0xDB,\n\t0x95, 0xD9, 0x94, 0xC9, 0x45, 0x20, 0xCC, 0x88,\n\t0xCC, 0x80, 0xCA, 0x45, 0x20, 0xCC, 0x88, 0xCC,\n\t// Bytes 4480 - 44bf\n\t0x81, 0xCA, 0x45, 0x20, 0xCC, 0x88, 0xCD, 0x82,\n\t0xCA, 0x45, 0x20, 0xCC, 0x93, 0xCC, 0x80, 0xCA,\n\t0x45, 0x20, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x45,\n\t0x20, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x45, 0x20,\n\t0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x45, 0x20, 0xCC,\n\t0x94, 0xCC, 0x81, 0xCA, 0x45, 0x20, 0xCC, 0x94,\n\t0xCD, 0x82, 0xCA, 0x45, 0x20, 0xD9, 0x8C, 0xD9,\n\t0x91, 0x72, 0x45, 0x20, 0xD9, 0x8D, 0xD9, 0x91,\n\t// Bytes 44c0 - 44ff\n\t0x72, 0x45, 0x20, 0xD9, 0x8E, 0xD9, 0x91, 0x72,\n\t0x45, 0x20, 0xD9, 0x8F, 0xD9, 0x91, 0x72, 0x45,\n\t0x20, 0xD9, 0x90, 0xD9, 0x91, 0x72, 0x45, 0x20,\n\t0xD9, 0x91, 0xD9, 0xB0, 0x7A, 0x45, 0xE2, 0xAB,\n\t0x9D, 0xCC, 0xB8, 0x05, 0x46, 0xCE, 0xB9, 0xCC,\n\t0x88, 0xCC, 0x81, 0xCA, 0x46, 0xCF, 0x85, 0xCC,\n\t0x88, 0xCC, 0x81, 0xCA, 0x46, 0xD7, 0xA9, 0xD6,\n\t0xBC, 0xD7, 0x81, 0x4E, 0x46, 0xD7, 0xA9, 0xD6,\n\t// Bytes 4500 - 453f\n\t0xBC, 0xD7, 0x82, 0x52, 0x46, 0xD9, 0x80, 0xD9,\n\t0x8E, 0xD9, 0x91, 0x72, 0x46, 0xD9, 0x80, 0xD9,\n\t0x8F, 0xD9, 0x91, 0x72, 0x46, 0xD9, 0x80, 0xD9,\n\t0x90, 0xD9, 0x91, 0x72, 0x46, 0xE0, 0xA4, 0x95,\n\t0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0x96,\n\t0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0x97,\n\t0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0x9C,\n\t0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xA1,\n\t// Bytes 4540 - 457f\n\t0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xA2,\n\t0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xAB,\n\t0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xAF,\n\t0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA6, 0xA1,\n\t0xE0, 0xA6, 0xBC, 0x09, 0x46, 0xE0, 0xA6, 0xA2,\n\t0xE0, 0xA6, 0xBC, 0x09, 0x46, 0xE0, 0xA6, 0xAF,\n\t0xE0, 0xA6, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0x96,\n\t0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0x97,\n\t// Bytes 4580 - 45bf\n\t0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0x9C,\n\t0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0xAB,\n\t0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0xB2,\n\t0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0xB8,\n\t0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xAC, 0xA1,\n\t0xE0, 0xAC, 0xBC, 0x09, 0x46, 0xE0, 0xAC, 0xA2,\n\t0xE0, 0xAC, 0xBC, 0x09, 0x46, 0xE0, 0xBE, 0xB2,\n\t0xE0, 0xBE, 0x80, 0x9D, 0x46, 0xE0, 0xBE, 0xB3,\n\t// Bytes 45c0 - 45ff\n\t0xE0, 0xBE, 0x80, 0x9D, 0x46, 0xE3, 0x83, 0x86,\n\t0xE3, 0x82, 0x99, 0x0D, 0x48, 0xF0, 0x9D, 0x85,\n\t0x97, 0xF0, 0x9D, 0x85, 0xA5, 0xAD, 0x48, 0xF0,\n\t0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xAD,\n\t0x48, 0xF0, 0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85,\n\t0xA5, 0xAD, 0x48, 0xF0, 0x9D, 0x86, 0xBA, 0xF0,\n\t0x9D, 0x85, 0xA5, 0xAD, 0x49, 0xE0, 0xBE, 0xB2,\n\t0xE0, 0xBD, 0xB1, 0xE0, 0xBE, 0x80, 0x9E, 0x49,\n\t// Bytes 4600 - 463f\n\t0xE0, 0xBE, 0xB3, 0xE0, 0xBD, 0xB1, 0xE0, 0xBE,\n\t0x80, 0x9E, 0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0,\n\t0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAE, 0xAE,\n\t0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85,\n\t0xA5, 0xF0, 0x9D, 0x85, 0xAF, 0xAE, 0x4C, 0xF0,\n\t0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xF0,\n\t0x9D, 0x85, 0xB0, 0xAE, 0x4C, 0xF0, 0x9D, 0x85,\n\t0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85,\n\t// Bytes 4640 - 467f\n\t0xB1, 0xAE, 0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0,\n\t0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xB2, 0xAE,\n\t0x4C, 0xF0, 0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85,\n\t0xA5, 0xF0, 0x9D, 0x85, 0xAE, 0xAE, 0x4C, 0xF0,\n\t0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85, 0xA5, 0xF0,\n\t0x9D, 0x85, 0xAF, 0xAE, 0x4C, 0xF0, 0x9D, 0x86,\n\t0xBA, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85,\n\t0xAE, 0xAE, 0x4C, 0xF0, 0x9D, 0x86, 0xBA, 0xF0,\n\t// Bytes 4680 - 46bf\n\t0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAF, 0xAE,\n\t0x83, 0x41, 0xCC, 0x82, 0xC9, 0x83, 0x41, 0xCC,\n\t0x86, 0xC9, 0x83, 0x41, 0xCC, 0x87, 0xC9, 0x83,\n\t0x41, 0xCC, 0x88, 0xC9, 0x83, 0x41, 0xCC, 0x8A,\n\t0xC9, 0x83, 0x41, 0xCC, 0xA3, 0xB5, 0x83, 0x43,\n\t0xCC, 0xA7, 0xA5, 0x83, 0x45, 0xCC, 0x82, 0xC9,\n\t0x83, 0x45, 0xCC, 0x84, 0xC9, 0x83, 0x45, 0xCC,\n\t0xA3, 0xB5, 0x83, 0x45, 0xCC, 0xA7, 0xA5, 0x83,\n\t// Bytes 46c0 - 46ff\n\t0x49, 0xCC, 0x88, 0xC9, 0x83, 0x4C, 0xCC, 0xA3,\n\t0xB5, 0x83, 0x4F, 0xCC, 0x82, 0xC9, 0x83, 0x4F,\n\t0xCC, 0x83, 0xC9, 0x83, 0x4F, 0xCC, 0x84, 0xC9,\n\t0x83, 0x4F, 0xCC, 0x87, 0xC9, 0x83, 0x4F, 0xCC,\n\t0x88, 0xC9, 0x83, 0x4F, 0xCC, 0x9B, 0xAD, 0x83,\n\t0x4F, 0xCC, 0xA3, 0xB5, 0x83, 0x4F, 0xCC, 0xA8,\n\t0xA5, 0x83, 0x52, 0xCC, 0xA3, 0xB5, 0x83, 0x53,\n\t0xCC, 0x81, 0xC9, 0x83, 0x53, 0xCC, 0x8C, 0xC9,\n\t// Bytes 4700 - 473f\n\t0x83, 0x53, 0xCC, 0xA3, 0xB5, 0x83, 0x55, 0xCC,\n\t0x83, 0xC9, 0x83, 0x55, 0xCC, 0x84, 0xC9, 0x83,\n\t0x55, 0xCC, 0x88, 0xC9, 0x83, 0x55, 0xCC, 0x9B,\n\t0xAD, 0x83, 0x61, 0xCC, 0x82, 0xC9, 0x83, 0x61,\n\t0xCC, 0x86, 0xC9, 0x83, 0x61, 0xCC, 0x87, 0xC9,\n\t0x83, 0x61, 0xCC, 0x88, 0xC9, 0x83, 0x61, 0xCC,\n\t0x8A, 0xC9, 0x83, 0x61, 0xCC, 0xA3, 0xB5, 0x83,\n\t0x63, 0xCC, 0xA7, 0xA5, 0x83, 0x65, 0xCC, 0x82,\n\t// Bytes 4740 - 477f\n\t0xC9, 0x83, 0x65, 0xCC, 0x84, 0xC9, 0x83, 0x65,\n\t0xCC, 0xA3, 0xB5, 0x83, 0x65, 0xCC, 0xA7, 0xA5,\n\t0x83, 0x69, 0xCC, 0x88, 0xC9, 0x83, 0x6C, 0xCC,\n\t0xA3, 0xB5, 0x83, 0x6F, 0xCC, 0x82, 0xC9, 0x83,\n\t0x6F, 0xCC, 0x83, 0xC9, 0x83, 0x6F, 0xCC, 0x84,\n\t0xC9, 0x83, 0x6F, 0xCC, 0x87, 0xC9, 0x83, 0x6F,\n\t0xCC, 0x88, 0xC9, 0x83, 0x6F, 0xCC, 0x9B, 0xAD,\n\t0x83, 0x6F, 0xCC, 0xA3, 0xB5, 0x83, 0x6F, 0xCC,\n\t// Bytes 4780 - 47bf\n\t0xA8, 0xA5, 0x83, 0x72, 0xCC, 0xA3, 0xB5, 0x83,\n\t0x73, 0xCC, 0x81, 0xC9, 0x83, 0x73, 0xCC, 0x8C,\n\t0xC9, 0x83, 0x73, 0xCC, 0xA3, 0xB5, 0x83, 0x75,\n\t0xCC, 0x83, 0xC9, 0x83, 0x75, 0xCC, 0x84, 0xC9,\n\t0x83, 0x75, 0xCC, 0x88, 0xC9, 0x83, 0x75, 0xCC,\n\t0x9B, 0xAD, 0x84, 0xCE, 0x91, 0xCC, 0x93, 0xC9,\n\t0x84, 0xCE, 0x91, 0xCC, 0x94, 0xC9, 0x84, 0xCE,\n\t0x95, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0x95, 0xCC,\n\t// Bytes 47c0 - 47ff\n\t0x94, 0xC9, 0x84, 0xCE, 0x97, 0xCC, 0x93, 0xC9,\n\t0x84, 0xCE, 0x97, 0xCC, 0x94, 0xC9, 0x84, 0xCE,\n\t0x99, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0x99, 0xCC,\n\t0x94, 0xC9, 0x84, 0xCE, 0x9F, 0xCC, 0x93, 0xC9,\n\t0x84, 0xCE, 0x9F, 0xCC, 0x94, 0xC9, 0x84, 0xCE,\n\t0xA5, 0xCC, 0x94, 0xC9, 0x84, 0xCE, 0xA9, 0xCC,\n\t0x93, 0xC9, 0x84, 0xCE, 0xA9, 0xCC, 0x94, 0xC9,\n\t0x84, 0xCE, 0xB1, 0xCC, 0x80, 0xC9, 0x84, 0xCE,\n\t// Bytes 4800 - 483f\n\t0xB1, 0xCC, 0x81, 0xC9, 0x84, 0xCE, 0xB1, 0xCC,\n\t0x93, 0xC9, 0x84, 0xCE, 0xB1, 0xCC, 0x94, 0xC9,\n\t0x84, 0xCE, 0xB1, 0xCD, 0x82, 0xC9, 0x84, 0xCE,\n\t0xB5, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0xB5, 0xCC,\n\t0x94, 0xC9, 0x84, 0xCE, 0xB7, 0xCC, 0x80, 0xC9,\n\t0x84, 0xCE, 0xB7, 0xCC, 0x81, 0xC9, 0x84, 0xCE,\n\t0xB7, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0xB7, 0xCC,\n\t0x94, 0xC9, 0x84, 0xCE, 0xB7, 0xCD, 0x82, 0xC9,\n\t// Bytes 4840 - 487f\n\t0x84, 0xCE, 0xB9, 0xCC, 0x88, 0xC9, 0x84, 0xCE,\n\t0xB9, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0xB9, 0xCC,\n\t0x94, 0xC9, 0x84, 0xCE, 0xBF, 0xCC, 0x93, 0xC9,\n\t0x84, 0xCE, 0xBF, 0xCC, 0x94, 0xC9, 0x84, 0xCF,\n\t0x85, 0xCC, 0x88, 0xC9, 0x84, 0xCF, 0x85, 0xCC,\n\t0x93, 0xC9, 0x84, 0xCF, 0x85, 0xCC, 0x94, 0xC9,\n\t0x84, 0xCF, 0x89, 0xCC, 0x80, 0xC9, 0x84, 0xCF,\n\t0x89, 0xCC, 0x81, 0xC9, 0x84, 0xCF, 0x89, 0xCC,\n\t// Bytes 4880 - 48bf\n\t0x93, 0xC9, 0x84, 0xCF, 0x89, 0xCC, 0x94, 0xC9,\n\t0x84, 0xCF, 0x89, 0xCD, 0x82, 0xC9, 0x86, 0xCE,\n\t0x91, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE,\n\t0x91, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE,\n\t0x91, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE,\n\t0x91, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE,\n\t0x91, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE,\n\t0x91, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE,\n\t// Bytes 48c0 - 48ff\n\t0x97, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE,\n\t0x97, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE,\n\t0x97, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE,\n\t0x97, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE,\n\t0x97, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE,\n\t0x97, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE,\n\t0xA9, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE,\n\t0xA9, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE,\n\t// Bytes 4900 - 493f\n\t0xA9, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE,\n\t0xA9, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE,\n\t0xA9, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE,\n\t0xA9, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE,\n\t0xB1, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE,\n\t0xB1, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE,\n\t0xB1, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE,\n\t0xB1, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE,\n\t// Bytes 4940 - 497f\n\t0xB1, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE,\n\t0xB1, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE,\n\t0xB7, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE,\n\t0xB7, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE,\n\t0xB7, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE,\n\t0xB7, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE,\n\t0xB7, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE,\n\t0xB7, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCF,\n\t// Bytes 4980 - 49bf\n\t0x89, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCF,\n\t0x89, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCF,\n\t0x89, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCF,\n\t0x89, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCF,\n\t0x89, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCF,\n\t0x89, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x42, 0xCC,\n\t0x80, 0xC9, 0x32, 0x42, 0xCC, 0x81, 0xC9, 0x32,\n\t0x42, 0xCC, 0x93, 0xC9, 0x32, 0x43, 0xE1, 0x85,\n\t// Bytes 49c0 - 49ff\n\t0xA1, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xA2, 0x01,\n\t0x00, 0x43, 0xE1, 0x85, 0xA3, 0x01, 0x00, 0x43,\n\t0xE1, 0x85, 0xA4, 0x01, 0x00, 0x43, 0xE1, 0x85,\n\t0xA5, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xA6, 0x01,\n\t0x00, 0x43, 0xE1, 0x85, 0xA7, 0x01, 0x00, 0x43,\n\t0xE1, 0x85, 0xA8, 0x01, 0x00, 0x43, 0xE1, 0x85,\n\t0xA9, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xAA, 0x01,\n\t0x00, 0x43, 0xE1, 0x85, 0xAB, 0x01, 0x00, 0x43,\n\t// Bytes 4a00 - 4a3f\n\t0xE1, 0x85, 0xAC, 0x01, 0x00, 0x43, 0xE1, 0x85,\n\t0xAD, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xAE, 0x01,\n\t0x00, 0x43, 0xE1, 0x85, 0xAF, 0x01, 0x00, 0x43,\n\t0xE1, 0x85, 0xB0, 0x01, 0x00, 0x43, 0xE1, 0x85,\n\t0xB1, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xB2, 0x01,\n\t0x00, 0x43, 0xE1, 0x85, 0xB3, 0x01, 0x00, 0x43,\n\t0xE1, 0x85, 0xB4, 0x01, 0x00, 0x43, 0xE1, 0x85,\n\t0xB5, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xAA, 0x01,\n\t// Bytes 4a40 - 4a7f\n\t0x00, 0x43, 0xE1, 0x86, 0xAC, 0x01, 0x00, 0x43,\n\t0xE1, 0x86, 0xAD, 0x01, 0x00, 0x43, 0xE1, 0x86,\n\t0xB0, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xB1, 0x01,\n\t0x00, 0x43, 0xE1, 0x86, 0xB2, 0x01, 0x00, 0x43,\n\t0xE1, 0x86, 0xB3, 0x01, 0x00, 0x43, 0xE1, 0x86,\n\t0xB4, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xB5, 0x01,\n\t0x00, 0x44, 0xCC, 0x88, 0xCC, 0x81, 0xCA, 0x32,\n\t0x43, 0xE3, 0x82, 0x99, 0x0D, 0x03, 0x43, 0xE3,\n\t// Bytes 4a80 - 4abf\n\t0x82, 0x9A, 0x0D, 0x03, 0x46, 0xE0, 0xBD, 0xB1,\n\t0xE0, 0xBD, 0xB2, 0x9E, 0x26, 0x46, 0xE0, 0xBD,\n\t0xB1, 0xE0, 0xBD, 0xB4, 0xA2, 0x26, 0x46, 0xE0,\n\t0xBD, 0xB1, 0xE0, 0xBE, 0x80, 0x9E, 0x26, 0x00,\n\t0x01,\n}\n\n// lookup returns the trie value for the first UTF-8 encoding in s and\n// the width in bytes of this encoding. The size will be 0 if s does not\n// hold enough bytes to complete the encoding. len(s) must be greater than 0.\nfunc (t *nfcTrie) lookup(s []byte) (v uint16, sz int) {\n\tc0 := s[0]\n\tswitch {\n\tcase c0 < 0x80: // is ASCII\n\t\treturn nfcValues[c0], 1\n\tcase c0 < 0xC2:\n\t\treturn 0, 1 // Illegal UTF-8: not a starter, not ASCII.\n\tcase c0 < 0xE0: // 2-byte UTF-8\n\t\tif len(s) < 2 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := nfcIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c1), 2\n\tcase c0 < 0xF0: // 3-byte UTF-8\n\t\tif len(s) < 3 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := nfcIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to := uint32(i)<<6 + uint32(c1)\n\t\ti = nfcIndex[o]\n\t\tc2 := s[2]\n\t\tif c2 < 0x80 || 0xC0 <= c2 {\n\t\t\treturn 0, 2 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c2), 3\n\tcase c0 < 0xF8: // 4-byte UTF-8\n\t\tif len(s) < 4 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := nfcIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to := uint32(i)<<6 + uint32(c1)\n\t\ti = nfcIndex[o]\n\t\tc2 := s[2]\n\t\tif c2 < 0x80 || 0xC0 <= c2 {\n\t\t\treturn 0, 2 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to = uint32(i)<<6 + uint32(c2)\n\t\ti = nfcIndex[o]\n\t\tc3 := s[3]\n\t\tif c3 < 0x80 || 0xC0 <= c3 {\n\t\t\treturn 0, 3 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c3), 4\n\t}\n\t// Illegal rune\n\treturn 0, 1\n}\n\n// lookupUnsafe returns the trie value for the first UTF-8 encoding in s.\n// s must start with a full and valid UTF-8 encoded rune.\nfunc (t *nfcTrie) lookupUnsafe(s []byte) uint16 {\n\tc0 := s[0]\n\tif c0 < 0x80 { // is ASCII\n\t\treturn nfcValues[c0]\n\t}\n\ti := nfcIndex[c0]\n\tif c0 < 0xE0 { // 2-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[1])\n\t}\n\ti = nfcIndex[uint32(i)<<6+uint32(s[1])]\n\tif c0 < 0xF0 { // 3-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[2])\n\t}\n\ti = nfcIndex[uint32(i)<<6+uint32(s[2])]\n\tif c0 < 0xF8 { // 4-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[3])\n\t}\n\treturn 0\n}\n\n// lookupString returns the trie value for the first UTF-8 encoding in s and\n// the width in bytes of this encoding. The size will be 0 if s does not\n// hold enough bytes to complete the encoding. len(s) must be greater than 0.\nfunc (t *nfcTrie) lookupString(s string) (v uint16, sz int) {\n\tc0 := s[0]\n\tswitch {\n\tcase c0 < 0x80: // is ASCII\n\t\treturn nfcValues[c0], 1\n\tcase c0 < 0xC2:\n\t\treturn 0, 1 // Illegal UTF-8: not a starter, not ASCII.\n\tcase c0 < 0xE0: // 2-byte UTF-8\n\t\tif len(s) < 2 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := nfcIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c1), 2\n\tcase c0 < 0xF0: // 3-byte UTF-8\n\t\tif len(s) < 3 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := nfcIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to := uint32(i)<<6 + uint32(c1)\n\t\ti = nfcIndex[o]\n\t\tc2 := s[2]\n\t\tif c2 < 0x80 || 0xC0 <= c2 {\n\t\t\treturn 0, 2 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c2), 3\n\tcase c0 < 0xF8: // 4-byte UTF-8\n\t\tif len(s) < 4 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := nfcIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to := uint32(i)<<6 + uint32(c1)\n\t\ti = nfcIndex[o]\n\t\tc2 := s[2]\n\t\tif c2 < 0x80 || 0xC0 <= c2 {\n\t\t\treturn 0, 2 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to = uint32(i)<<6 + uint32(c2)\n\t\ti = nfcIndex[o]\n\t\tc3 := s[3]\n\t\tif c3 < 0x80 || 0xC0 <= c3 {\n\t\t\treturn 0, 3 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c3), 4\n\t}\n\t// Illegal rune\n\treturn 0, 1\n}\n\n// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s.\n// s must start with a full and valid UTF-8 encoded rune.\nfunc (t *nfcTrie) lookupStringUnsafe(s string) uint16 {\n\tc0 := s[0]\n\tif c0 < 0x80 { // is ASCII\n\t\treturn nfcValues[c0]\n\t}\n\ti := nfcIndex[c0]\n\tif c0 < 0xE0 { // 2-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[1])\n\t}\n\ti = nfcIndex[uint32(i)<<6+uint32(s[1])]\n\tif c0 < 0xF0 { // 3-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[2])\n\t}\n\ti = nfcIndex[uint32(i)<<6+uint32(s[2])]\n\tif c0 < 0xF8 { // 4-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[3])\n\t}\n\treturn 0\n}\n\n// nfcTrie. Total size: 10332 bytes (10.09 KiB). Checksum: 51cc525b297fc970.\ntype nfcTrie struct{}\n\nfunc newNfcTrie(i int) *nfcTrie {\n\treturn &nfcTrie{}\n}\n\n// lookupValue determines the type of block n and looks up the value for b.\nfunc (t *nfcTrie) lookupValue(n uint32, b byte) uint16 {\n\tswitch {\n\tcase n < 44:\n\t\treturn uint16(nfcValues[n<<6+uint32(b)])\n\tdefault:\n\t\tn -= 44\n\t\treturn uint16(nfcSparse.lookup(n, b))\n\t}\n}\n\n// nfcValues: 46 blocks, 2944 entries, 5888 bytes\n// The third block is the zero block.\nvar nfcValues = [2944]uint16{\n\t// Block 0x0, offset 0x0\n\t0x3c: 0xa000, 0x3d: 0xa000, 0x3e: 0xa000,\n\t// Block 0x1, offset 0x40\n\t0x41: 0xa000, 0x42: 0xa000, 0x43: 0xa000, 0x44: 0xa000, 0x45: 0xa000,\n\t0x46: 0xa000, 0x47: 0xa000, 0x48: 0xa000, 0x49: 0xa000, 0x4a: 0xa000, 0x4b: 0xa000,\n\t0x4c: 0xa000, 0x4d: 0xa000, 0x4e: 0xa000, 0x4f: 0xa000, 0x50: 0xa000,\n\t0x52: 0xa000, 0x53: 0xa000, 0x54: 0xa000, 0x55: 0xa000, 0x56: 0xa000, 0x57: 0xa000,\n\t0x58: 0xa000, 0x59: 0xa000, 0x5a: 0xa000,\n\t0x61: 0xa000, 0x62: 0xa000, 0x63: 0xa000,\n\t0x64: 0xa000, 0x65: 0xa000, 0x66: 0xa000, 0x67: 0xa000, 0x68: 0xa000, 0x69: 0xa000,\n\t0x6a: 0xa000, 0x6b: 0xa000, 0x6c: 0xa000, 0x6d: 0xa000, 0x6e: 0xa000, 0x6f: 0xa000,\n\t0x70: 0xa000, 0x72: 0xa000, 0x73: 0xa000, 0x74: 0xa000, 0x75: 0xa000,\n\t0x76: 0xa000, 0x77: 0xa000, 0x78: 0xa000, 0x79: 0xa000, 0x7a: 0xa000,\n\t// Block 0x2, offset 0x80\n\t// Block 0x3, offset 0xc0\n\t0xc0: 0x2f6f, 0xc1: 0x2f74, 0xc2: 0x4688, 0xc3: 0x2f79, 0xc4: 0x4697, 0xc5: 0x469c,\n\t0xc6: 0xa000, 0xc7: 0x46a6, 0xc8: 0x2fe2, 0xc9: 0x2fe7, 0xca: 0x46ab, 0xcb: 0x2ffb,\n\t0xcc: 0x306e, 0xcd: 0x3073, 0xce: 0x3078, 0xcf: 0x46bf, 0xd1: 0x3104,\n\t0xd2: 0x3127, 0xd3: 0x312c, 0xd4: 0x46c9, 0xd5: 0x46ce, 0xd6: 0x46dd,\n\t0xd8: 0xa000, 0xd9: 0x31b3, 0xda: 0x31b8, 0xdb: 0x31bd, 0xdc: 0x470f, 0xdd: 0x3235,\n\t0xe0: 0x327b, 0xe1: 0x3280, 0xe2: 0x4719, 0xe3: 0x3285,\n\t0xe4: 0x4728, 0xe5: 0x472d, 0xe6: 0xa000, 0xe7: 0x4737, 0xe8: 0x32ee, 0xe9: 0x32f3,\n\t0xea: 0x473c, 0xeb: 0x3307, 0xec: 0x337f, 0xed: 0x3384, 0xee: 0x3389, 0xef: 0x4750,\n\t0xf1: 0x3415, 0xf2: 0x3438, 0xf3: 0x343d, 0xf4: 0x475a, 0xf5: 0x475f,\n\t0xf6: 0x476e, 0xf8: 0xa000, 0xf9: 0x34c9, 0xfa: 0x34ce, 0xfb: 0x34d3,\n\t0xfc: 0x47a0, 0xfd: 0x3550, 0xff: 0x3569,\n\t// Block 0x4, offset 0x100\n\t0x100: 0x2f7e, 0x101: 0x328a, 0x102: 0x468d, 0x103: 0x471e, 0x104: 0x2f9c, 0x105: 0x32a8,\n\t0x106: 0x2fb0, 0x107: 0x32bc, 0x108: 0x2fb5, 0x109: 0x32c1, 0x10a: 0x2fba, 0x10b: 0x32c6,\n\t0x10c: 0x2fbf, 0x10d: 0x32cb, 0x10e: 0x2fc9, 0x10f: 0x32d5,\n\t0x112: 0x46b0, 0x113: 0x4741, 0x114: 0x2ff1, 0x115: 0x32fd, 0x116: 0x2ff6, 0x117: 0x3302,\n\t0x118: 0x3014, 0x119: 0x3320, 0x11a: 0x3005, 0x11b: 0x3311, 0x11c: 0x302d, 0x11d: 0x3339,\n\t0x11e: 0x3037, 0x11f: 0x3343, 0x120: 0x303c, 0x121: 0x3348, 0x122: 0x3046, 0x123: 0x3352,\n\t0x124: 0x304b, 0x125: 0x3357, 0x128: 0x307d, 0x129: 0x338e,\n\t0x12a: 0x3082, 0x12b: 0x3393, 0x12c: 0x3087, 0x12d: 0x3398, 0x12e: 0x30aa, 0x12f: 0x33b6,\n\t0x130: 0x308c, 0x134: 0x30b4, 0x135: 0x33c0,\n\t0x136: 0x30c8, 0x137: 0x33d9, 0x139: 0x30d2, 0x13a: 0x33e3, 0x13b: 0x30dc,\n\t0x13c: 0x33ed, 0x13d: 0x30d7, 0x13e: 0x33e8,\n\t// Block 0x5, offset 0x140\n\t0x143: 0x30ff, 0x144: 0x3410, 0x145: 0x3118,\n\t0x146: 0x3429, 0x147: 0x310e, 0x148: 0x341f,\n\t0x14c: 0x46d3, 0x14d: 0x4764, 0x14e: 0x3131, 0x14f: 0x3442, 0x150: 0x313b, 0x151: 0x344c,\n\t0x154: 0x3159, 0x155: 0x346a, 0x156: 0x3172, 0x157: 0x3483,\n\t0x158: 0x3163, 0x159: 0x3474, 0x15a: 0x46f6, 0x15b: 0x4787, 0x15c: 0x317c, 0x15d: 0x348d,\n\t0x15e: 0x318b, 0x15f: 0x349c, 0x160: 0x46fb, 0x161: 0x478c, 0x162: 0x31a4, 0x163: 0x34ba,\n\t0x164: 0x3195, 0x165: 0x34ab, 0x168: 0x4705, 0x169: 0x4796,\n\t0x16a: 0x470a, 0x16b: 0x479b, 0x16c: 0x31c2, 0x16d: 0x34d8, 0x16e: 0x31cc, 0x16f: 0x34e2,\n\t0x170: 0x31d1, 0x171: 0x34e7, 0x172: 0x31ef, 0x173: 0x3505, 0x174: 0x3212, 0x175: 0x3528,\n\t0x176: 0x323a, 0x177: 0x3555, 0x178: 0x324e, 0x179: 0x325d, 0x17a: 0x357d, 0x17b: 0x3267,\n\t0x17c: 0x3587, 0x17d: 0x326c, 0x17e: 0x358c, 0x17f: 0xa000,\n\t// Block 0x6, offset 0x180\n\t0x184: 0x8100, 0x185: 0x8100,\n\t0x186: 0x8100,\n\t0x18d: 0x2f88, 0x18e: 0x3294, 0x18f: 0x3096, 0x190: 0x33a2, 0x191: 0x3140,\n\t0x192: 0x3451, 0x193: 0x31d6, 0x194: 0x34ec, 0x195: 0x39cf, 0x196: 0x3b5e, 0x197: 0x39c8,\n\t0x198: 0x3b57, 0x199: 0x39d6, 0x19a: 0x3b65, 0x19b: 0x39c1, 0x19c: 0x3b50,\n\t0x19e: 0x38b0, 0x19f: 0x3a3f, 0x1a0: 0x38a9, 0x1a1: 0x3a38, 0x1a2: 0x35b3, 0x1a3: 0x35c5,\n\t0x1a6: 0x3041, 0x1a7: 0x334d, 0x1a8: 0x30be, 0x1a9: 0x33cf,\n\t0x1aa: 0x46ec, 0x1ab: 0x477d, 0x1ac: 0x3990, 0x1ad: 0x3b1f, 0x1ae: 0x35d7, 0x1af: 0x35dd,\n\t0x1b0: 0x33c5, 0x1b4: 0x3028, 0x1b5: 0x3334,\n\t0x1b8: 0x30fa, 0x1b9: 0x340b, 0x1ba: 0x38b7, 0x1bb: 0x3a46,\n\t0x1bc: 0x35ad, 0x1bd: 0x35bf, 0x1be: 0x35b9, 0x1bf: 0x35cb,\n\t// Block 0x7, offset 0x1c0\n\t0x1c0: 0x2f8d, 0x1c1: 0x3299, 0x1c2: 0x2f92, 0x1c3: 0x329e, 0x1c4: 0x300a, 0x1c5: 0x3316,\n\t0x1c6: 0x300f, 0x1c7: 0x331b, 0x1c8: 0x309b, 0x1c9: 0x33a7, 0x1ca: 0x30a0, 0x1cb: 0x33ac,\n\t0x1cc: 0x3145, 0x1cd: 0x3456, 0x1ce: 0x314a, 0x1cf: 0x345b, 0x1d0: 0x3168, 0x1d1: 0x3479,\n\t0x1d2: 0x316d, 0x1d3: 0x347e, 0x1d4: 0x31db, 0x1d5: 0x34f1, 0x1d6: 0x31e0, 0x1d7: 0x34f6,\n\t0x1d8: 0x3186, 0x1d9: 0x3497, 0x1da: 0x319f, 0x1db: 0x34b5,\n\t0x1de: 0x305a, 0x1df: 0x3366,\n\t0x1e6: 0x4692, 0x1e7: 0x4723, 0x1e8: 0x46ba, 0x1e9: 0x474b,\n\t0x1ea: 0x395f, 0x1eb: 0x3aee, 0x1ec: 0x393c, 0x1ed: 0x3acb, 0x1ee: 0x46d8, 0x1ef: 0x4769,\n\t0x1f0: 0x3958, 0x1f1: 0x3ae7, 0x1f2: 0x3244, 0x1f3: 0x355f,\n\t// Block 0x8, offset 0x200\n\t0x200: 0x9932, 0x201: 0x9932, 0x202: 0x9932, 0x203: 0x9932, 0x204: 0x9932, 0x205: 0x8132,\n\t0x206: 0x9932, 0x207: 0x9932, 0x208: 0x9932, 0x209: 0x9932, 0x20a: 0x9932, 0x20b: 0x9932,\n\t0x20c: 0x9932, 0x20d: 0x8132, 0x20e: 0x8132, 0x20f: 0x9932, 0x210: 0x8132, 0x211: 0x9932,\n\t0x212: 0x8132, 0x213: 0x9932, 0x214: 0x9932, 0x215: 0x8133, 0x216: 0x812d, 0x217: 0x812d,\n\t0x218: 0x812d, 0x219: 0x812d, 0x21a: 0x8133, 0x21b: 0x992b, 0x21c: 0x812d, 0x21d: 0x812d,\n\t0x21e: 0x812d, 0x21f: 0x812d, 0x220: 0x812d, 0x221: 0x8129, 0x222: 0x8129, 0x223: 0x992d,\n\t0x224: 0x992d, 0x225: 0x992d, 0x226: 0x992d, 0x227: 0x9929, 0x228: 0x9929, 0x229: 0x812d,\n\t0x22a: 0x812d, 0x22b: 0x812d, 0x22c: 0x812d, 0x22d: 0x992d, 0x22e: 0x992d, 0x22f: 0x812d,\n\t0x230: 0x992d, 0x231: 0x992d, 0x232: 0x812d, 0x233: 0x812d, 0x234: 0x8101, 0x235: 0x8101,\n\t0x236: 0x8101, 0x237: 0x8101, 0x238: 0x9901, 0x239: 0x812d, 0x23a: 0x812d, 0x23b: 0x812d,\n\t0x23c: 0x812d, 0x23d: 0x8132, 0x23e: 0x8132, 0x23f: 0x8132,\n\t// Block 0x9, offset 0x240\n\t0x240: 0x49ae, 0x241: 0x49b3, 0x242: 0x9932, 0x243: 0x49b8, 0x244: 0x4a71, 0x245: 0x9936,\n\t0x246: 0x8132, 0x247: 0x812d, 0x248: 0x812d, 0x249: 0x812d, 0x24a: 0x8132, 0x24b: 0x8132,\n\t0x24c: 0x8132, 0x24d: 0x812d, 0x24e: 0x812d, 0x250: 0x8132, 0x251: 0x8132,\n\t0x252: 0x8132, 0x253: 0x812d, 0x254: 0x812d, 0x255: 0x812d, 0x256: 0x812d, 0x257: 0x8132,\n\t0x258: 0x8133, 0x259: 0x812d, 0x25a: 0x812d, 0x25b: 0x8132, 0x25c: 0x8134, 0x25d: 0x8135,\n\t0x25e: 0x8135, 0x25f: 0x8134, 0x260: 0x8135, 0x261: 0x8135, 0x262: 0x8134, 0x263: 0x8132,\n\t0x264: 0x8132, 0x265: 0x8132, 0x266: 0x8132, 0x267: 0x8132, 0x268: 0x8132, 0x269: 0x8132,\n\t0x26a: 0x8132, 0x26b: 0x8132, 0x26c: 0x8132, 0x26d: 0x8132, 0x26e: 0x8132, 0x26f: 0x8132,\n\t0x274: 0x0170,\n\t0x27a: 0x8100,\n\t0x27e: 0x0037,\n\t// Block 0xa, offset 0x280\n\t0x284: 0x8100, 0x285: 0x35a1,\n\t0x286: 0x35e9, 0x287: 0x00ce, 0x288: 0x3607, 0x289: 0x3613, 0x28a: 0x3625,\n\t0x28c: 0x3643, 0x28e: 0x3655, 0x28f: 0x3673, 0x290: 0x3e08, 0x291: 0xa000,\n\t0x295: 0xa000, 0x297: 0xa000,\n\t0x299: 0xa000,\n\t0x29f: 0xa000, 0x2a1: 0xa000,\n\t0x2a5: 0xa000, 0x2a9: 0xa000,\n\t0x2aa: 0x3637, 0x2ab: 0x3667, 0x2ac: 0x47fe, 0x2ad: 0x3697, 0x2ae: 0x4828, 0x2af: 0x36a9,\n\t0x2b0: 0x3e70, 0x2b1: 0xa000, 0x2b5: 0xa000,\n\t0x2b7: 0xa000, 0x2b9: 0xa000,\n\t0x2bf: 0xa000,\n\t// Block 0xb, offset 0x2c0\n\t0x2c0: 0x3721, 0x2c1: 0x372d, 0x2c3: 0x371b,\n\t0x2c6: 0xa000, 0x2c7: 0x3709,\n\t0x2cc: 0x375d, 0x2cd: 0x3745, 0x2ce: 0x376f, 0x2d0: 0xa000,\n\t0x2d3: 0xa000, 0x2d5: 0xa000, 0x2d6: 0xa000, 0x2d7: 0xa000,\n\t0x2d8: 0xa000, 0x2d9: 0x3751, 0x2da: 0xa000,\n\t0x2de: 0xa000, 0x2e3: 0xa000,\n\t0x2e7: 0xa000,\n\t0x2eb: 0xa000, 0x2ed: 0xa000,\n\t0x2f0: 0xa000, 0x2f3: 0xa000, 0x2f5: 0xa000,\n\t0x2f6: 0xa000, 0x2f7: 0xa000, 0x2f8: 0xa000, 0x2f9: 0x37d5, 0x2fa: 0xa000,\n\t0x2fe: 0xa000,\n\t// Block 0xc, offset 0x300\n\t0x301: 0x3733, 0x302: 0x37b7,\n\t0x310: 0x370f, 0x311: 0x3793,\n\t0x312: 0x3715, 0x313: 0x3799, 0x316: 0x3727, 0x317: 0x37ab,\n\t0x318: 0xa000, 0x319: 0xa000, 0x31a: 0x3829, 0x31b: 0x382f, 0x31c: 0x3739, 0x31d: 0x37bd,\n\t0x31e: 0x373f, 0x31f: 0x37c3, 0x322: 0x374b, 0x323: 0x37cf,\n\t0x324: 0x3757, 0x325: 0x37db, 0x326: 0x3763, 0x327: 0x37e7, 0x328: 0xa000, 0x329: 0xa000,\n\t0x32a: 0x3835, 0x32b: 0x383b, 0x32c: 0x378d, 0x32d: 0x3811, 0x32e: 0x3769, 0x32f: 0x37ed,\n\t0x330: 0x3775, 0x331: 0x37f9, 0x332: 0x377b, 0x333: 0x37ff, 0x334: 0x3781, 0x335: 0x3805,\n\t0x338: 0x3787, 0x339: 0x380b,\n\t// Block 0xd, offset 0x340\n\t0x351: 0x812d,\n\t0x352: 0x8132, 0x353: 0x8132, 0x354: 0x8132, 0x355: 0x8132, 0x356: 0x812d, 0x357: 0x8132,\n\t0x358: 0x8132, 0x359: 0x8132, 0x35a: 0x812e, 0x35b: 0x812d, 0x35c: 0x8132, 0x35d: 0x8132,\n\t0x35e: 0x8132, 0x35f: 0x8132, 0x360: 0x8132, 0x361: 0x8132, 0x362: 0x812d, 0x363: 0x812d,\n\t0x364: 0x812d, 0x365: 0x812d, 0x366: 0x812d, 0x367: 0x812d, 0x368: 0x8132, 0x369: 0x8132,\n\t0x36a: 0x812d, 0x36b: 0x8132, 0x36c: 0x8132, 0x36d: 0x812e, 0x36e: 0x8131, 0x36f: 0x8132,\n\t0x370: 0x8105, 0x371: 0x8106, 0x372: 0x8107, 0x373: 0x8108, 0x374: 0x8109, 0x375: 0x810a,\n\t0x376: 0x810b, 0x377: 0x810c, 0x378: 0x810d, 0x379: 0x810e, 0x37a: 0x810e, 0x37b: 0x810f,\n\t0x37c: 0x8110, 0x37d: 0x8111, 0x37f: 0x8112,\n\t// Block 0xe, offset 0x380\n\t0x388: 0xa000, 0x38a: 0xa000, 0x38b: 0x8116,\n\t0x38c: 0x8117, 0x38d: 0x8118, 0x38e: 0x8119, 0x38f: 0x811a, 0x390: 0x811b, 0x391: 0x811c,\n\t0x392: 0x811d, 0x393: 0x9932, 0x394: 0x9932, 0x395: 0x992d, 0x396: 0x812d, 0x397: 0x8132,\n\t0x398: 0x8132, 0x399: 0x8132, 0x39a: 0x8132, 0x39b: 0x8132, 0x39c: 0x812d, 0x39d: 0x8132,\n\t0x39e: 0x8132, 0x39f: 0x812d,\n\t0x3b0: 0x811e,\n\t// Block 0xf, offset 0x3c0\n\t0x3c5: 0xa000,\n\t0x3c6: 0x2d26, 0x3c7: 0xa000, 0x3c8: 0x2d2e, 0x3c9: 0xa000, 0x3ca: 0x2d36, 0x3cb: 0xa000,\n\t0x3cc: 0x2d3e, 0x3cd: 0xa000, 0x3ce: 0x2d46, 0x3d1: 0xa000,\n\t0x3d2: 0x2d4e,\n\t0x3f4: 0x8102, 0x3f5: 0x9900,\n\t0x3fa: 0xa000, 0x3fb: 0x2d56,\n\t0x3fc: 0xa000, 0x3fd: 0x2d5e, 0x3fe: 0xa000, 0x3ff: 0xa000,\n\t// Block 0x10, offset 0x400\n\t0x400: 0x2f97, 0x401: 0x32a3, 0x402: 0x2fa1, 0x403: 0x32ad, 0x404: 0x2fa6, 0x405: 0x32b2,\n\t0x406: 0x2fab, 0x407: 0x32b7, 0x408: 0x38cc, 0x409: 0x3a5b, 0x40a: 0x2fc4, 0x40b: 0x32d0,\n\t0x40c: 0x2fce, 0x40d: 0x32da, 0x40e: 0x2fdd, 0x40f: 0x32e9, 0x410: 0x2fd3, 0x411: 0x32df,\n\t0x412: 0x2fd8, 0x413: 0x32e4, 0x414: 0x38ef, 0x415: 0x3a7e, 0x416: 0x38f6, 0x417: 0x3a85,\n\t0x418: 0x3019, 0x419: 0x3325, 0x41a: 0x301e, 0x41b: 0x332a, 0x41c: 0x3904, 0x41d: 0x3a93,\n\t0x41e: 0x3023, 0x41f: 0x332f, 0x420: 0x3032, 0x421: 0x333e, 0x422: 0x3050, 0x423: 0x335c,\n\t0x424: 0x305f, 0x425: 0x336b, 0x426: 0x3055, 0x427: 0x3361, 0x428: 0x3064, 0x429: 0x3370,\n\t0x42a: 0x3069, 0x42b: 0x3375, 0x42c: 0x30af, 0x42d: 0x33bb, 0x42e: 0x390b, 0x42f: 0x3a9a,\n\t0x430: 0x30b9, 0x431: 0x33ca, 0x432: 0x30c3, 0x433: 0x33d4, 0x434: 0x30cd, 0x435: 0x33de,\n\t0x436: 0x46c4, 0x437: 0x4755, 0x438: 0x3912, 0x439: 0x3aa1, 0x43a: 0x30e6, 0x43b: 0x33f7,\n\t0x43c: 0x30e1, 0x43d: 0x33f2, 0x43e: 0x30eb, 0x43f: 0x33fc,\n\t// Block 0x11, offset 0x440\n\t0x440: 0x30f0, 0x441: 0x3401, 0x442: 0x30f5, 0x443: 0x3406, 0x444: 0x3109, 0x445: 0x341a,\n\t0x446: 0x3113, 0x447: 0x3424, 0x448: 0x3122, 0x449: 0x3433, 0x44a: 0x311d, 0x44b: 0x342e,\n\t0x44c: 0x3935, 0x44d: 0x3ac4, 0x44e: 0x3943, 0x44f: 0x3ad2, 0x450: 0x394a, 0x451: 0x3ad9,\n\t0x452: 0x3951, 0x453: 0x3ae0, 0x454: 0x314f, 0x455: 0x3460, 0x456: 0x3154, 0x457: 0x3465,\n\t0x458: 0x315e, 0x459: 0x346f, 0x45a: 0x46f1, 0x45b: 0x4782, 0x45c: 0x3997, 0x45d: 0x3b26,\n\t0x45e: 0x3177, 0x45f: 0x3488, 0x460: 0x3181, 0x461: 0x3492, 0x462: 0x4700, 0x463: 0x4791,\n\t0x464: 0x399e, 0x465: 0x3b2d, 0x466: 0x39a5, 0x467: 0x3b34, 0x468: 0x39ac, 0x469: 0x3b3b,\n\t0x46a: 0x3190, 0x46b: 0x34a1, 0x46c: 0x319a, 0x46d: 0x34b0, 0x46e: 0x31ae, 0x46f: 0x34c4,\n\t0x470: 0x31a9, 0x471: 0x34bf, 0x472: 0x31ea, 0x473: 0x3500, 0x474: 0x31f9, 0x475: 0x350f,\n\t0x476: 0x31f4, 0x477: 0x350a, 0x478: 0x39b3, 0x479: 0x3b42, 0x47a: 0x39ba, 0x47b: 0x3b49,\n\t0x47c: 0x31fe, 0x47d: 0x3514, 0x47e: 0x3203, 0x47f: 0x3519,\n\t// Block 0x12, offset 0x480\n\t0x480: 0x3208, 0x481: 0x351e, 0x482: 0x320d, 0x483: 0x3523, 0x484: 0x321c, 0x485: 0x3532,\n\t0x486: 0x3217, 0x487: 0x352d, 0x488: 0x3221, 0x489: 0x353c, 0x48a: 0x3226, 0x48b: 0x3541,\n\t0x48c: 0x322b, 0x48d: 0x3546, 0x48e: 0x3249, 0x48f: 0x3564, 0x490: 0x3262, 0x491: 0x3582,\n\t0x492: 0x3271, 0x493: 0x3591, 0x494: 0x3276, 0x495: 0x3596, 0x496: 0x337a, 0x497: 0x34a6,\n\t0x498: 0x3537, 0x499: 0x3573, 0x49b: 0x35d1,\n\t0x4a0: 0x46a1, 0x4a1: 0x4732, 0x4a2: 0x2f83, 0x4a3: 0x328f,\n\t0x4a4: 0x3878, 0x4a5: 0x3a07, 0x4a6: 0x3871, 0x4a7: 0x3a00, 0x4a8: 0x3886, 0x4a9: 0x3a15,\n\t0x4aa: 0x387f, 0x4ab: 0x3a0e, 0x4ac: 0x38be, 0x4ad: 0x3a4d, 0x4ae: 0x3894, 0x4af: 0x3a23,\n\t0x4b0: 0x388d, 0x4b1: 0x3a1c, 0x4b2: 0x38a2, 0x4b3: 0x3a31, 0x4b4: 0x389b, 0x4b5: 0x3a2a,\n\t0x4b6: 0x38c5, 0x4b7: 0x3a54, 0x4b8: 0x46b5, 0x4b9: 0x4746, 0x4ba: 0x3000, 0x4bb: 0x330c,\n\t0x4bc: 0x2fec, 0x4bd: 0x32f8, 0x4be: 0x38da, 0x4bf: 0x3a69,\n\t// Block 0x13, offset 0x4c0\n\t0x4c0: 0x38d3, 0x4c1: 0x3a62, 0x4c2: 0x38e8, 0x4c3: 0x3a77, 0x4c4: 0x38e1, 0x4c5: 0x3a70,\n\t0x4c6: 0x38fd, 0x4c7: 0x3a8c, 0x4c8: 0x3091, 0x4c9: 0x339d, 0x4ca: 0x30a5, 0x4cb: 0x33b1,\n\t0x4cc: 0x46e7, 0x4cd: 0x4778, 0x4ce: 0x3136, 0x4cf: 0x3447, 0x4d0: 0x3920, 0x4d1: 0x3aaf,\n\t0x4d2: 0x3919, 0x4d3: 0x3aa8, 0x4d4: 0x392e, 0x4d5: 0x3abd, 0x4d6: 0x3927, 0x4d7: 0x3ab6,\n\t0x4d8: 0x3989, 0x4d9: 0x3b18, 0x4da: 0x396d, 0x4db: 0x3afc, 0x4dc: 0x3966, 0x4dd: 0x3af5,\n\t0x4de: 0x397b, 0x4df: 0x3b0a, 0x4e0: 0x3974, 0x4e1: 0x3b03, 0x4e2: 0x3982, 0x4e3: 0x3b11,\n\t0x4e4: 0x31e5, 0x4e5: 0x34fb, 0x4e6: 0x31c7, 0x4e7: 0x34dd, 0x4e8: 0x39e4, 0x4e9: 0x3b73,\n\t0x4ea: 0x39dd, 0x4eb: 0x3b6c, 0x4ec: 0x39f2, 0x4ed: 0x3b81, 0x4ee: 0x39eb, 0x4ef: 0x3b7a,\n\t0x4f0: 0x39f9, 0x4f1: 0x3b88, 0x4f2: 0x3230, 0x4f3: 0x354b, 0x4f4: 0x3258, 0x4f5: 0x3578,\n\t0x4f6: 0x3253, 0x4f7: 0x356e, 0x4f8: 0x323f, 0x4f9: 0x355a,\n\t// Block 0x14, offset 0x500\n\t0x500: 0x4804, 0x501: 0x480a, 0x502: 0x491e, 0x503: 0x4936, 0x504: 0x4926, 0x505: 0x493e,\n\t0x506: 0x492e, 0x507: 0x4946, 0x508: 0x47aa, 0x509: 0x47b0, 0x50a: 0x488e, 0x50b: 0x48a6,\n\t0x50c: 0x4896, 0x50d: 0x48ae, 0x50e: 0x489e, 0x50f: 0x48b6, 0x510: 0x4816, 0x511: 0x481c,\n\t0x512: 0x3db8, 0x513: 0x3dc8, 0x514: 0x3dc0, 0x515: 0x3dd0,\n\t0x518: 0x47b6, 0x519: 0x47bc, 0x51a: 0x3ce8, 0x51b: 0x3cf8, 0x51c: 0x3cf0, 0x51d: 0x3d00,\n\t0x520: 0x482e, 0x521: 0x4834, 0x522: 0x494e, 0x523: 0x4966,\n\t0x524: 0x4956, 0x525: 0x496e, 0x526: 0x495e, 0x527: 0x4976, 0x528: 0x47c2, 0x529: 0x47c8,\n\t0x52a: 0x48be, 0x52b: 0x48d6, 0x52c: 0x48c6, 0x52d: 0x48de, 0x52e: 0x48ce, 0x52f: 0x48e6,\n\t0x530: 0x4846, 0x531: 0x484c, 0x532: 0x3e18, 0x533: 0x3e30, 0x534: 0x3e20, 0x535: 0x3e38,\n\t0x536: 0x3e28, 0x537: 0x3e40, 0x538: 0x47ce, 0x539: 0x47d4, 0x53a: 0x3d18, 0x53b: 0x3d30,\n\t0x53c: 0x3d20, 0x53d: 0x3d38, 0x53e: 0x3d28, 0x53f: 0x3d40,\n\t// Block 0x15, offset 0x540\n\t0x540: 0x4852, 0x541: 0x4858, 0x542: 0x3e48, 0x543: 0x3e58, 0x544: 0x3e50, 0x545: 0x3e60,\n\t0x548: 0x47da, 0x549: 0x47e0, 0x54a: 0x3d48, 0x54b: 0x3d58,\n\t0x54c: 0x3d50, 0x54d: 0x3d60, 0x550: 0x4864, 0x551: 0x486a,\n\t0x552: 0x3e80, 0x553: 0x3e98, 0x554: 0x3e88, 0x555: 0x3ea0, 0x556: 0x3e90, 0x557: 0x3ea8,\n\t0x559: 0x47e6, 0x55b: 0x3d68, 0x55d: 0x3d70,\n\t0x55f: 0x3d78, 0x560: 0x487c, 0x561: 0x4882, 0x562: 0x497e, 0x563: 0x4996,\n\t0x564: 0x4986, 0x565: 0x499e, 0x566: 0x498e, 0x567: 0x49a6, 0x568: 0x47ec, 0x569: 0x47f2,\n\t0x56a: 0x48ee, 0x56b: 0x4906, 0x56c: 0x48f6, 0x56d: 0x490e, 0x56e: 0x48fe, 0x56f: 0x4916,\n\t0x570: 0x47f8, 0x571: 0x431e, 0x572: 0x3691, 0x573: 0x4324, 0x574: 0x4822, 0x575: 0x432a,\n\t0x576: 0x36a3, 0x577: 0x4330, 0x578: 0x36c1, 0x579: 0x4336, 0x57a: 0x36d9, 0x57b: 0x433c,\n\t0x57c: 0x4870, 0x57d: 0x4342,\n\t// Block 0x16, offset 0x580\n\t0x580: 0x3da0, 0x581: 0x3da8, 0x582: 0x4184, 0x583: 0x41a2, 0x584: 0x418e, 0x585: 0x41ac,\n\t0x586: 0x4198, 0x587: 0x41b6, 0x588: 0x3cd8, 0x589: 0x3ce0, 0x58a: 0x40d0, 0x58b: 0x40ee,\n\t0x58c: 0x40da, 0x58d: 0x40f8, 0x58e: 0x40e4, 0x58f: 0x4102, 0x590: 0x3de8, 0x591: 0x3df0,\n\t0x592: 0x41c0, 0x593: 0x41de, 0x594: 0x41ca, 0x595: 0x41e8, 0x596: 0x41d4, 0x597: 0x41f2,\n\t0x598: 0x3d08, 0x599: 0x3d10, 0x59a: 0x410c, 0x59b: 0x412a, 0x59c: 0x4116, 0x59d: 0x4134,\n\t0x59e: 0x4120, 0x59f: 0x413e, 0x5a0: 0x3ec0, 0x5a1: 0x3ec8, 0x5a2: 0x41fc, 0x5a3: 0x421a,\n\t0x5a4: 0x4206, 0x5a5: 0x4224, 0x5a6: 0x4210, 0x5a7: 0x422e, 0x5a8: 0x3d80, 0x5a9: 0x3d88,\n\t0x5aa: 0x4148, 0x5ab: 0x4166, 0x5ac: 0x4152, 0x5ad: 0x4170, 0x5ae: 0x415c, 0x5af: 0x417a,\n\t0x5b0: 0x3685, 0x5b1: 0x367f, 0x5b2: 0x3d90, 0x5b3: 0x368b, 0x5b4: 0x3d98,\n\t0x5b6: 0x4810, 0x5b7: 0x3db0, 0x5b8: 0x35f5, 0x5b9: 0x35ef, 0x5ba: 0x35e3, 0x5bb: 0x42ee,\n\t0x5bc: 0x35fb, 0x5bd: 0x8100, 0x5be: 0x01d3, 0x5bf: 0xa100,\n\t// Block 0x17, offset 0x5c0\n\t0x5c0: 0x8100, 0x5c1: 0x35a7, 0x5c2: 0x3dd8, 0x5c3: 0x369d, 0x5c4: 0x3de0,\n\t0x5c6: 0x483a, 0x5c7: 0x3df8, 0x5c8: 0x3601, 0x5c9: 0x42f4, 0x5ca: 0x360d, 0x5cb: 0x42fa,\n\t0x5cc: 0x3619, 0x5cd: 0x3b8f, 0x5ce: 0x3b96, 0x5cf: 0x3b9d, 0x5d0: 0x36b5, 0x5d1: 0x36af,\n\t0x5d2: 0x3e00, 0x5d3: 0x44e4, 0x5d6: 0x36bb, 0x5d7: 0x3e10,\n\t0x5d8: 0x3631, 0x5d9: 0x362b, 0x5da: 0x361f, 0x5db: 0x4300, 0x5dd: 0x3ba4,\n\t0x5de: 0x3bab, 0x5df: 0x3bb2, 0x5e0: 0x36eb, 0x5e1: 0x36e5, 0x5e2: 0x3e68, 0x5e3: 0x44ec,\n\t0x5e4: 0x36cd, 0x5e5: 0x36d3, 0x5e6: 0x36f1, 0x5e7: 0x3e78, 0x5e8: 0x3661, 0x5e9: 0x365b,\n\t0x5ea: 0x364f, 0x5eb: 0x430c, 0x5ec: 0x3649, 0x5ed: 0x359b, 0x5ee: 0x42e8, 0x5ef: 0x0081,\n\t0x5f2: 0x3eb0, 0x5f3: 0x36f7, 0x5f4: 0x3eb8,\n\t0x5f6: 0x4888, 0x5f7: 0x3ed0, 0x5f8: 0x363d, 0x5f9: 0x4306, 0x5fa: 0x366d, 0x5fb: 0x4318,\n\t0x5fc: 0x3679, 0x5fd: 0x4256, 0x5fe: 0xa100,\n\t// Block 0x18, offset 0x600\n\t0x601: 0x3c06, 0x603: 0xa000, 0x604: 0x3c0d, 0x605: 0xa000,\n\t0x607: 0x3c14, 0x608: 0xa000, 0x609: 0x3c1b,\n\t0x60d: 0xa000,\n\t0x620: 0x2f65, 0x621: 0xa000, 0x622: 0x3c29,\n\t0x624: 0xa000, 0x625: 0xa000,\n\t0x62d: 0x3c22, 0x62e: 0x2f60, 0x62f: 0x2f6a,\n\t0x630: 0x3c30, 0x631: 0x3c37, 0x632: 0xa000, 0x633: 0xa000, 0x634: 0x3c3e, 0x635: 0x3c45,\n\t0x636: 0xa000, 0x637: 0xa000, 0x638: 0x3c4c, 0x639: 0x3c53, 0x63a: 0xa000, 0x63b: 0xa000,\n\t0x63c: 0xa000, 0x63d: 0xa000,\n\t// Block 0x19, offset 0x640\n\t0x640: 0x3c5a, 0x641: 0x3c61, 0x642: 0xa000, 0x643: 0xa000, 0x644: 0x3c76, 0x645: 0x3c7d,\n\t0x646: 0xa000, 0x647: 0xa000, 0x648: 0x3c84, 0x649: 0x3c8b,\n\t0x651: 0xa000,\n\t0x652: 0xa000,\n\t0x662: 0xa000,\n\t0x668: 0xa000, 0x669: 0xa000,\n\t0x66b: 0xa000, 0x66c: 0x3ca0, 0x66d: 0x3ca7, 0x66e: 0x3cae, 0x66f: 0x3cb5,\n\t0x672: 0xa000, 0x673: 0xa000, 0x674: 0xa000, 0x675: 0xa000,\n\t// Block 0x1a, offset 0x680\n\t0x686: 0xa000, 0x68b: 0xa000,\n\t0x68c: 0x3f08, 0x68d: 0xa000, 0x68e: 0x3f10, 0x68f: 0xa000, 0x690: 0x3f18, 0x691: 0xa000,\n\t0x692: 0x3f20, 0x693: 0xa000, 0x694: 0x3f28, 0x695: 0xa000, 0x696: 0x3f30, 0x697: 0xa000,\n\t0x698: 0x3f38, 0x699: 0xa000, 0x69a: 0x3f40, 0x69b: 0xa000, 0x69c: 0x3f48, 0x69d: 0xa000,\n\t0x69e: 0x3f50, 0x69f: 0xa000, 0x6a0: 0x3f58, 0x6a1: 0xa000, 0x6a2: 0x3f60,\n\t0x6a4: 0xa000, 0x6a5: 0x3f68, 0x6a6: 0xa000, 0x6a7: 0x3f70, 0x6a8: 0xa000, 0x6a9: 0x3f78,\n\t0x6af: 0xa000,\n\t0x6b0: 0x3f80, 0x6b1: 0x3f88, 0x6b2: 0xa000, 0x6b3: 0x3f90, 0x6b4: 0x3f98, 0x6b5: 0xa000,\n\t0x6b6: 0x3fa0, 0x6b7: 0x3fa8, 0x6b8: 0xa000, 0x6b9: 0x3fb0, 0x6ba: 0x3fb8, 0x6bb: 0xa000,\n\t0x6bc: 0x3fc0, 0x6bd: 0x3fc8,\n\t// Block 0x1b, offset 0x6c0\n\t0x6d4: 0x3f00,\n\t0x6d9: 0x9903, 0x6da: 0x9903, 0x6db: 0x8100, 0x6dc: 0x8100, 0x6dd: 0xa000,\n\t0x6de: 0x3fd0,\n\t0x6e6: 0xa000,\n\t0x6eb: 0xa000, 0x6ec: 0x3fe0, 0x6ed: 0xa000, 0x6ee: 0x3fe8, 0x6ef: 0xa000,\n\t0x6f0: 0x3ff0, 0x6f1: 0xa000, 0x6f2: 0x3ff8, 0x6f3: 0xa000, 0x6f4: 0x4000, 0x6f5: 0xa000,\n\t0x6f6: 0x4008, 0x6f7: 0xa000, 0x6f8: 0x4010, 0x6f9: 0xa000, 0x6fa: 0x4018, 0x6fb: 0xa000,\n\t0x6fc: 0x4020, 0x6fd: 0xa000, 0x6fe: 0x4028, 0x6ff: 0xa000,\n\t// Block 0x1c, offset 0x700\n\t0x700: 0x4030, 0x701: 0xa000, 0x702: 0x4038, 0x704: 0xa000, 0x705: 0x4040,\n\t0x706: 0xa000, 0x707: 0x4048, 0x708: 0xa000, 0x709: 0x4050,\n\t0x70f: 0xa000, 0x710: 0x4058, 0x711: 0x4060,\n\t0x712: 0xa000, 0x713: 0x4068, 0x714: 0x4070, 0x715: 0xa000, 0x716: 0x4078, 0x717: 0x4080,\n\t0x718: 0xa000, 0x719: 0x4088, 0x71a: 0x4090, 0x71b: 0xa000, 0x71c: 0x4098, 0x71d: 0x40a0,\n\t0x72f: 0xa000,\n\t0x730: 0xa000, 0x731: 0xa000, 0x732: 0xa000, 0x734: 0x3fd8,\n\t0x737: 0x40a8, 0x738: 0x40b0, 0x739: 0x40b8, 0x73a: 0x40c0,\n\t0x73d: 0xa000, 0x73e: 0x40c8,\n\t// Block 0x1d, offset 0x740\n\t0x740: 0x1377, 0x741: 0x0cfb, 0x742: 0x13d3, 0x743: 0x139f, 0x744: 0x0e57, 0x745: 0x06eb,\n\t0x746: 0x08df, 0x747: 0x162b, 0x748: 0x162b, 0x749: 0x0a0b, 0x74a: 0x145f, 0x74b: 0x0943,\n\t0x74c: 0x0a07, 0x74d: 0x0bef, 0x74e: 0x0fcf, 0x74f: 0x115f, 0x750: 0x1297, 0x751: 0x12d3,\n\t0x752: 0x1307, 0x753: 0x141b, 0x754: 0x0d73, 0x755: 0x0dff, 0x756: 0x0eab, 0x757: 0x0f43,\n\t0x758: 0x125f, 0x759: 0x1447, 0x75a: 0x1573, 0x75b: 0x070f, 0x75c: 0x08b3, 0x75d: 0x0d87,\n\t0x75e: 0x0ecf, 0x75f: 0x1293, 0x760: 0x15c3, 0x761: 0x0ab3, 0x762: 0x0e77, 0x763: 0x1283,\n\t0x764: 0x1317, 0x765: 0x0c23, 0x766: 0x11bb, 0x767: 0x12df, 0x768: 0x0b1f, 0x769: 0x0d0f,\n\t0x76a: 0x0e17, 0x76b: 0x0f1b, 0x76c: 0x1427, 0x76d: 0x074f, 0x76e: 0x07e7, 0x76f: 0x0853,\n\t0x770: 0x0c8b, 0x771: 0x0d7f, 0x772: 0x0ecb, 0x773: 0x0fef, 0x774: 0x1177, 0x775: 0x128b,\n\t0x776: 0x12a3, 0x777: 0x13c7, 0x778: 0x14ef, 0x779: 0x15a3, 0x77a: 0x15bf, 0x77b: 0x102b,\n\t0x77c: 0x106b, 0x77d: 0x1123, 0x77e: 0x1243, 0x77f: 0x147b,\n\t// Block 0x1e, offset 0x780\n\t0x780: 0x15cb, 0x781: 0x134b, 0x782: 0x09c7, 0x783: 0x0b3b, 0x784: 0x10db, 0x785: 0x119b,\n\t0x786: 0x0eff, 0x787: 0x1033, 0x788: 0x1397, 0x789: 0x14e7, 0x78a: 0x09c3, 0x78b: 0x0a8f,\n\t0x78c: 0x0d77, 0x78d: 0x0e2b, 0x78e: 0x0e5f, 0x78f: 0x1113, 0x790: 0x113b, 0x791: 0x14a7,\n\t0x792: 0x084f, 0x793: 0x11a7, 0x794: 0x07f3, 0x795: 0x07ef, 0x796: 0x1097, 0x797: 0x1127,\n\t0x798: 0x125b, 0x799: 0x14af, 0x79a: 0x1367, 0x79b: 0x0c27, 0x79c: 0x0d73, 0x79d: 0x1357,\n\t0x79e: 0x06f7, 0x79f: 0x0a63, 0x7a0: 0x0b93, 0x7a1: 0x0f2f, 0x7a2: 0x0faf, 0x7a3: 0x0873,\n\t0x7a4: 0x103b, 0x7a5: 0x075f, 0x7a6: 0x0b77, 0x7a7: 0x06d7, 0x7a8: 0x0deb, 0x7a9: 0x0ca3,\n\t0x7aa: 0x110f, 0x7ab: 0x08c7, 0x7ac: 0x09b3, 0x7ad: 0x0ffb, 0x7ae: 0x1263, 0x7af: 0x133b,\n\t0x7b0: 0x0db7, 0x7b1: 0x13f7, 0x7b2: 0x0de3, 0x7b3: 0x0c37, 0x7b4: 0x121b, 0x7b5: 0x0c57,\n\t0x7b6: 0x0fab, 0x7b7: 0x072b, 0x7b8: 0x07a7, 0x7b9: 0x07eb, 0x7ba: 0x0d53, 0x7bb: 0x10fb,\n\t0x7bc: 0x11f3, 0x7bd: 0x1347, 0x7be: 0x145b, 0x7bf: 0x085b,\n\t// Block 0x1f, offset 0x7c0\n\t0x7c0: 0x090f, 0x7c1: 0x0a17, 0x7c2: 0x0b2f, 0x7c3: 0x0cbf, 0x7c4: 0x0e7b, 0x7c5: 0x103f,\n\t0x7c6: 0x1497, 0x7c7: 0x157b, 0x7c8: 0x15cf, 0x7c9: 0x15e7, 0x7ca: 0x0837, 0x7cb: 0x0cf3,\n\t0x7cc: 0x0da3, 0x7cd: 0x13eb, 0x7ce: 0x0afb, 0x7cf: 0x0bd7, 0x7d0: 0x0bf3, 0x7d1: 0x0c83,\n\t0x7d2: 0x0e6b, 0x7d3: 0x0eb7, 0x7d4: 0x0f67, 0x7d5: 0x108b, 0x7d6: 0x112f, 0x7d7: 0x1193,\n\t0x7d8: 0x13db, 0x7d9: 0x126b, 0x7da: 0x1403, 0x7db: 0x147f, 0x7dc: 0x080f, 0x7dd: 0x083b,\n\t0x7de: 0x0923, 0x7df: 0x0ea7, 0x7e0: 0x12f3, 0x7e1: 0x133b, 0x7e2: 0x0b1b, 0x7e3: 0x0b8b,\n\t0x7e4: 0x0c4f, 0x7e5: 0x0daf, 0x7e6: 0x10d7, 0x7e7: 0x0f23, 0x7e8: 0x073b, 0x7e9: 0x097f,\n\t0x7ea: 0x0a63, 0x7eb: 0x0ac7, 0x7ec: 0x0b97, 0x7ed: 0x0f3f, 0x7ee: 0x0f5b, 0x7ef: 0x116b,\n\t0x7f0: 0x118b, 0x7f1: 0x1463, 0x7f2: 0x14e3, 0x7f3: 0x14f3, 0x7f4: 0x152f, 0x7f5: 0x0753,\n\t0x7f6: 0x107f, 0x7f7: 0x144f, 0x7f8: 0x14cb, 0x7f9: 0x0baf, 0x7fa: 0x0717, 0x7fb: 0x0777,\n\t0x7fc: 0x0a67, 0x7fd: 0x0a87, 0x7fe: 0x0caf, 0x7ff: 0x0d73,\n\t// Block 0x20, offset 0x800\n\t0x800: 0x0ec3, 0x801: 0x0fcb, 0x802: 0x1277, 0x803: 0x1417, 0x804: 0x1623, 0x805: 0x0ce3,\n\t0x806: 0x14a3, 0x807: 0x0833, 0x808: 0x0d2f, 0x809: 0x0d3b, 0x80a: 0x0e0f, 0x80b: 0x0e47,\n\t0x80c: 0x0f4b, 0x80d: 0x0fa7, 0x80e: 0x1027, 0x80f: 0x110b, 0x810: 0x153b, 0x811: 0x07af,\n\t0x812: 0x0c03, 0x813: 0x14b3, 0x814: 0x0767, 0x815: 0x0aab, 0x816: 0x0e2f, 0x817: 0x13df,\n\t0x818: 0x0b67, 0x819: 0x0bb7, 0x81a: 0x0d43, 0x81b: 0x0f2f, 0x81c: 0x14bb, 0x81d: 0x0817,\n\t0x81e: 0x08ff, 0x81f: 0x0a97, 0x820: 0x0cd3, 0x821: 0x0d1f, 0x822: 0x0d5f, 0x823: 0x0df3,\n\t0x824: 0x0f47, 0x825: 0x0fbb, 0x826: 0x1157, 0x827: 0x12f7, 0x828: 0x1303, 0x829: 0x1457,\n\t0x82a: 0x14d7, 0x82b: 0x0883, 0x82c: 0x0e4b, 0x82d: 0x0903, 0x82e: 0x0ec7, 0x82f: 0x0f6b,\n\t0x830: 0x1287, 0x831: 0x14bf, 0x832: 0x15ab, 0x833: 0x15d3, 0x834: 0x0d37, 0x835: 0x0e27,\n\t0x836: 0x11c3, 0x837: 0x10b7, 0x838: 0x10c3, 0x839: 0x10e7, 0x83a: 0x0f17, 0x83b: 0x0e9f,\n\t0x83c: 0x1363, 0x83d: 0x0733, 0x83e: 0x122b, 0x83f: 0x081b,\n\t// Block 0x21, offset 0x840\n\t0x840: 0x080b, 0x841: 0x0b0b, 0x842: 0x0c2b, 0x843: 0x10f3, 0x844: 0x0a53, 0x845: 0x0e03,\n\t0x846: 0x0cef, 0x847: 0x13e7, 0x848: 0x12e7, 0x849: 0x14ab, 0x84a: 0x1323, 0x84b: 0x0b27,\n\t0x84c: 0x0787, 0x84d: 0x095b, 0x850: 0x09af,\n\t0x852: 0x0cdf, 0x855: 0x07f7, 0x856: 0x0f1f, 0x857: 0x0fe3,\n\t0x858: 0x1047, 0x859: 0x1063, 0x85a: 0x1067, 0x85b: 0x107b, 0x85c: 0x14fb, 0x85d: 0x10eb,\n\t0x85e: 0x116f, 0x860: 0x128f, 0x862: 0x1353,\n\t0x865: 0x1407, 0x866: 0x1433,\n\t0x86a: 0x154f, 0x86b: 0x1553, 0x86c: 0x1557, 0x86d: 0x15bb, 0x86e: 0x142b, 0x86f: 0x14c7,\n\t0x870: 0x0757, 0x871: 0x077b, 0x872: 0x078f, 0x873: 0x084b, 0x874: 0x0857, 0x875: 0x0897,\n\t0x876: 0x094b, 0x877: 0x0967, 0x878: 0x096f, 0x879: 0x09ab, 0x87a: 0x09b7, 0x87b: 0x0a93,\n\t0x87c: 0x0a9b, 0x87d: 0x0ba3, 0x87e: 0x0bcb, 0x87f: 0x0bd3,\n\t// Block 0x22, offset 0x880\n\t0x880: 0x0beb, 0x881: 0x0c97, 0x882: 0x0cc7, 0x883: 0x0ce7, 0x884: 0x0d57, 0x885: 0x0e1b,\n\t0x886: 0x0e37, 0x887: 0x0e67, 0x888: 0x0ebb, 0x889: 0x0edb, 0x88a: 0x0f4f, 0x88b: 0x102f,\n\t0x88c: 0x104b, 0x88d: 0x1053, 0x88e: 0x104f, 0x88f: 0x1057, 0x890: 0x105b, 0x891: 0x105f,\n\t0x892: 0x1073, 0x893: 0x1077, 0x894: 0x109b, 0x895: 0x10af, 0x896: 0x10cb, 0x897: 0x112f,\n\t0x898: 0x1137, 0x899: 0x113f, 0x89a: 0x1153, 0x89b: 0x117b, 0x89c: 0x11cb, 0x89d: 0x11ff,\n\t0x89e: 0x11ff, 0x89f: 0x1267, 0x8a0: 0x130f, 0x8a1: 0x1327, 0x8a2: 0x135b, 0x8a3: 0x135f,\n\t0x8a4: 0x13a3, 0x8a5: 0x13a7, 0x8a6: 0x13ff, 0x8a7: 0x1407, 0x8a8: 0x14db, 0x8a9: 0x151f,\n\t0x8aa: 0x1537, 0x8ab: 0x0b9b, 0x8ac: 0x171e, 0x8ad: 0x11e3,\n\t0x8b0: 0x06df, 0x8b1: 0x07e3, 0x8b2: 0x07a3, 0x8b3: 0x074b, 0x8b4: 0x078b, 0x8b5: 0x07b7,\n\t0x8b6: 0x0847, 0x8b7: 0x0863, 0x8b8: 0x094b, 0x8b9: 0x0937, 0x8ba: 0x0947, 0x8bb: 0x0963,\n\t0x8bc: 0x09af, 0x8bd: 0x09bf, 0x8be: 0x0a03, 0x8bf: 0x0a0f,\n\t// Block 0x23, offset 0x8c0\n\t0x8c0: 0x0a2b, 0x8c1: 0x0a3b, 0x8c2: 0x0b23, 0x8c3: 0x0b2b, 0x8c4: 0x0b5b, 0x8c5: 0x0b7b,\n\t0x8c6: 0x0bab, 0x8c7: 0x0bc3, 0x8c8: 0x0bb3, 0x8c9: 0x0bd3, 0x8ca: 0x0bc7, 0x8cb: 0x0beb,\n\t0x8cc: 0x0c07, 0x8cd: 0x0c5f, 0x8ce: 0x0c6b, 0x8cf: 0x0c73, 0x8d0: 0x0c9b, 0x8d1: 0x0cdf,\n\t0x8d2: 0x0d0f, 0x8d3: 0x0d13, 0x8d4: 0x0d27, 0x8d5: 0x0da7, 0x8d6: 0x0db7, 0x8d7: 0x0e0f,\n\t0x8d8: 0x0e5b, 0x8d9: 0x0e53, 0x8da: 0x0e67, 0x8db: 0x0e83, 0x8dc: 0x0ebb, 0x8dd: 0x1013,\n\t0x8de: 0x0edf, 0x8df: 0x0f13, 0x8e0: 0x0f1f, 0x8e1: 0x0f5f, 0x8e2: 0x0f7b, 0x8e3: 0x0f9f,\n\t0x8e4: 0x0fc3, 0x8e5: 0x0fc7, 0x8e6: 0x0fe3, 0x8e7: 0x0fe7, 0x8e8: 0x0ff7, 0x8e9: 0x100b,\n\t0x8ea: 0x1007, 0x8eb: 0x1037, 0x8ec: 0x10b3, 0x8ed: 0x10cb, 0x8ee: 0x10e3, 0x8ef: 0x111b,\n\t0x8f0: 0x112f, 0x8f1: 0x114b, 0x8f2: 0x117b, 0x8f3: 0x122f, 0x8f4: 0x1257, 0x8f5: 0x12cb,\n\t0x8f6: 0x1313, 0x8f7: 0x131f, 0x8f8: 0x1327, 0x8f9: 0x133f, 0x8fa: 0x1353, 0x8fb: 0x1343,\n\t0x8fc: 0x135b, 0x8fd: 0x1357, 0x8fe: 0x134f, 0x8ff: 0x135f,\n\t// Block 0x24, offset 0x900\n\t0x900: 0x136b, 0x901: 0x13a7, 0x902: 0x13e3, 0x903: 0x1413, 0x904: 0x144b, 0x905: 0x146b,\n\t0x906: 0x14b7, 0x907: 0x14db, 0x908: 0x14fb, 0x909: 0x150f, 0x90a: 0x151f, 0x90b: 0x152b,\n\t0x90c: 0x1537, 0x90d: 0x158b, 0x90e: 0x162b, 0x90f: 0x16b5, 0x910: 0x16b0, 0x911: 0x16e2,\n\t0x912: 0x0607, 0x913: 0x062f, 0x914: 0x0633, 0x915: 0x1764, 0x916: 0x1791, 0x917: 0x1809,\n\t0x918: 0x1617, 0x919: 0x1627,\n\t// Block 0x25, offset 0x940\n\t0x940: 0x06fb, 0x941: 0x06f3, 0x942: 0x0703, 0x943: 0x1647, 0x944: 0x0747, 0x945: 0x0757,\n\t0x946: 0x075b, 0x947: 0x0763, 0x948: 0x076b, 0x949: 0x076f, 0x94a: 0x077b, 0x94b: 0x0773,\n\t0x94c: 0x05b3, 0x94d: 0x165b, 0x94e: 0x078f, 0x94f: 0x0793, 0x950: 0x0797, 0x951: 0x07b3,\n\t0x952: 0x164c, 0x953: 0x05b7, 0x954: 0x079f, 0x955: 0x07bf, 0x956: 0x1656, 0x957: 0x07cf,\n\t0x958: 0x07d7, 0x959: 0x0737, 0x95a: 0x07df, 0x95b: 0x07e3, 0x95c: 0x1831, 0x95d: 0x07ff,\n\t0x95e: 0x0807, 0x95f: 0x05bf, 0x960: 0x081f, 0x961: 0x0823, 0x962: 0x082b, 0x963: 0x082f,\n\t0x964: 0x05c3, 0x965: 0x0847, 0x966: 0x084b, 0x967: 0x0857, 0x968: 0x0863, 0x969: 0x0867,\n\t0x96a: 0x086b, 0x96b: 0x0873, 0x96c: 0x0893, 0x96d: 0x0897, 0x96e: 0x089f, 0x96f: 0x08af,\n\t0x970: 0x08b7, 0x971: 0x08bb, 0x972: 0x08bb, 0x973: 0x08bb, 0x974: 0x166a, 0x975: 0x0e93,\n\t0x976: 0x08cf, 0x977: 0x08d7, 0x978: 0x166f, 0x979: 0x08e3, 0x97a: 0x08eb, 0x97b: 0x08f3,\n\t0x97c: 0x091b, 0x97d: 0x0907, 0x97e: 0x0913, 0x97f: 0x0917,\n\t// Block 0x26, offset 0x980\n\t0x980: 0x091f, 0x981: 0x0927, 0x982: 0x092b, 0x983: 0x0933, 0x984: 0x093b, 0x985: 0x093f,\n\t0x986: 0x093f, 0x987: 0x0947, 0x988: 0x094f, 0x989: 0x0953, 0x98a: 0x095f, 0x98b: 0x0983,\n\t0x98c: 0x0967, 0x98d: 0x0987, 0x98e: 0x096b, 0x98f: 0x0973, 0x990: 0x080b, 0x991: 0x09cf,\n\t0x992: 0x0997, 0x993: 0x099b, 0x994: 0x099f, 0x995: 0x0993, 0x996: 0x09a7, 0x997: 0x09a3,\n\t0x998: 0x09bb, 0x999: 0x1674, 0x99a: 0x09d7, 0x99b: 0x09db, 0x99c: 0x09e3, 0x99d: 0x09ef,\n\t0x99e: 0x09f7, 0x99f: 0x0a13, 0x9a0: 0x1679, 0x9a1: 0x167e, 0x9a2: 0x0a1f, 0x9a3: 0x0a23,\n\t0x9a4: 0x0a27, 0x9a5: 0x0a1b, 0x9a6: 0x0a2f, 0x9a7: 0x05c7, 0x9a8: 0x05cb, 0x9a9: 0x0a37,\n\t0x9aa: 0x0a3f, 0x9ab: 0x0a3f, 0x9ac: 0x1683, 0x9ad: 0x0a5b, 0x9ae: 0x0a5f, 0x9af: 0x0a63,\n\t0x9b0: 0x0a6b, 0x9b1: 0x1688, 0x9b2: 0x0a73, 0x9b3: 0x0a77, 0x9b4: 0x0b4f, 0x9b5: 0x0a7f,\n\t0x9b6: 0x05cf, 0x9b7: 0x0a8b, 0x9b8: 0x0a9b, 0x9b9: 0x0aa7, 0x9ba: 0x0aa3, 0x9bb: 0x1692,\n\t0x9bc: 0x0aaf, 0x9bd: 0x1697, 0x9be: 0x0abb, 0x9bf: 0x0ab7,\n\t// Block 0x27, offset 0x9c0\n\t0x9c0: 0x0abf, 0x9c1: 0x0acf, 0x9c2: 0x0ad3, 0x9c3: 0x05d3, 0x9c4: 0x0ae3, 0x9c5: 0x0aeb,\n\t0x9c6: 0x0aef, 0x9c7: 0x0af3, 0x9c8: 0x05d7, 0x9c9: 0x169c, 0x9ca: 0x05db, 0x9cb: 0x0b0f,\n\t0x9cc: 0x0b13, 0x9cd: 0x0b17, 0x9ce: 0x0b1f, 0x9cf: 0x1863, 0x9d0: 0x0b37, 0x9d1: 0x16a6,\n\t0x9d2: 0x16a6, 0x9d3: 0x11d7, 0x9d4: 0x0b47, 0x9d5: 0x0b47, 0x9d6: 0x05df, 0x9d7: 0x16c9,\n\t0x9d8: 0x179b, 0x9d9: 0x0b57, 0x9da: 0x0b5f, 0x9db: 0x05e3, 0x9dc: 0x0b73, 0x9dd: 0x0b83,\n\t0x9de: 0x0b87, 0x9df: 0x0b8f, 0x9e0: 0x0b9f, 0x9e1: 0x05eb, 0x9e2: 0x05e7, 0x9e3: 0x0ba3,\n\t0x9e4: 0x16ab, 0x9e5: 0x0ba7, 0x9e6: 0x0bbb, 0x9e7: 0x0bbf, 0x9e8: 0x0bc3, 0x9e9: 0x0bbf,\n\t0x9ea: 0x0bcf, 0x9eb: 0x0bd3, 0x9ec: 0x0be3, 0x9ed: 0x0bdb, 0x9ee: 0x0bdf, 0x9ef: 0x0be7,\n\t0x9f0: 0x0beb, 0x9f1: 0x0bef, 0x9f2: 0x0bfb, 0x9f3: 0x0bff, 0x9f4: 0x0c17, 0x9f5: 0x0c1f,\n\t0x9f6: 0x0c2f, 0x9f7: 0x0c43, 0x9f8: 0x16ba, 0x9f9: 0x0c3f, 0x9fa: 0x0c33, 0x9fb: 0x0c4b,\n\t0x9fc: 0x0c53, 0x9fd: 0x0c67, 0x9fe: 0x16bf, 0x9ff: 0x0c6f,\n\t// Block 0x28, offset 0xa00\n\t0xa00: 0x0c63, 0xa01: 0x0c5b, 0xa02: 0x05ef, 0xa03: 0x0c77, 0xa04: 0x0c7f, 0xa05: 0x0c87,\n\t0xa06: 0x0c7b, 0xa07: 0x05f3, 0xa08: 0x0c97, 0xa09: 0x0c9f, 0xa0a: 0x16c4, 0xa0b: 0x0ccb,\n\t0xa0c: 0x0cff, 0xa0d: 0x0cdb, 0xa0e: 0x05ff, 0xa0f: 0x0ce7, 0xa10: 0x05fb, 0xa11: 0x05f7,\n\t0xa12: 0x07c3, 0xa13: 0x07c7, 0xa14: 0x0d03, 0xa15: 0x0ceb, 0xa16: 0x11ab, 0xa17: 0x0663,\n\t0xa18: 0x0d0f, 0xa19: 0x0d13, 0xa1a: 0x0d17, 0xa1b: 0x0d2b, 0xa1c: 0x0d23, 0xa1d: 0x16dd,\n\t0xa1e: 0x0603, 0xa1f: 0x0d3f, 0xa20: 0x0d33, 0xa21: 0x0d4f, 0xa22: 0x0d57, 0xa23: 0x16e7,\n\t0xa24: 0x0d5b, 0xa25: 0x0d47, 0xa26: 0x0d63, 0xa27: 0x0607, 0xa28: 0x0d67, 0xa29: 0x0d6b,\n\t0xa2a: 0x0d6f, 0xa2b: 0x0d7b, 0xa2c: 0x16ec, 0xa2d: 0x0d83, 0xa2e: 0x060b, 0xa2f: 0x0d8f,\n\t0xa30: 0x16f1, 0xa31: 0x0d93, 0xa32: 0x060f, 0xa33: 0x0d9f, 0xa34: 0x0dab, 0xa35: 0x0db7,\n\t0xa36: 0x0dbb, 0xa37: 0x16f6, 0xa38: 0x168d, 0xa39: 0x16fb, 0xa3a: 0x0ddb, 0xa3b: 0x1700,\n\t0xa3c: 0x0de7, 0xa3d: 0x0def, 0xa3e: 0x0ddf, 0xa3f: 0x0dfb,\n\t// Block 0x29, offset 0xa40\n\t0xa40: 0x0e0b, 0xa41: 0x0e1b, 0xa42: 0x0e0f, 0xa43: 0x0e13, 0xa44: 0x0e1f, 0xa45: 0x0e23,\n\t0xa46: 0x1705, 0xa47: 0x0e07, 0xa48: 0x0e3b, 0xa49: 0x0e3f, 0xa4a: 0x0613, 0xa4b: 0x0e53,\n\t0xa4c: 0x0e4f, 0xa4d: 0x170a, 0xa4e: 0x0e33, 0xa4f: 0x0e6f, 0xa50: 0x170f, 0xa51: 0x1714,\n\t0xa52: 0x0e73, 0xa53: 0x0e87, 0xa54: 0x0e83, 0xa55: 0x0e7f, 0xa56: 0x0617, 0xa57: 0x0e8b,\n\t0xa58: 0x0e9b, 0xa59: 0x0e97, 0xa5a: 0x0ea3, 0xa5b: 0x1651, 0xa5c: 0x0eb3, 0xa5d: 0x1719,\n\t0xa5e: 0x0ebf, 0xa5f: 0x1723, 0xa60: 0x0ed3, 0xa61: 0x0edf, 0xa62: 0x0ef3, 0xa63: 0x1728,\n\t0xa64: 0x0f07, 0xa65: 0x0f0b, 0xa66: 0x172d, 0xa67: 0x1732, 0xa68: 0x0f27, 0xa69: 0x0f37,\n\t0xa6a: 0x061b, 0xa6b: 0x0f3b, 0xa6c: 0x061f, 0xa6d: 0x061f, 0xa6e: 0x0f53, 0xa6f: 0x0f57,\n\t0xa70: 0x0f5f, 0xa71: 0x0f63, 0xa72: 0x0f6f, 0xa73: 0x0623, 0xa74: 0x0f87, 0xa75: 0x1737,\n\t0xa76: 0x0fa3, 0xa77: 0x173c, 0xa78: 0x0faf, 0xa79: 0x16a1, 0xa7a: 0x0fbf, 0xa7b: 0x1741,\n\t0xa7c: 0x1746, 0xa7d: 0x174b, 0xa7e: 0x0627, 0xa7f: 0x062b,\n\t// Block 0x2a, offset 0xa80\n\t0xa80: 0x0ff7, 0xa81: 0x1755, 0xa82: 0x1750, 0xa83: 0x175a, 0xa84: 0x175f, 0xa85: 0x0fff,\n\t0xa86: 0x1003, 0xa87: 0x1003, 0xa88: 0x100b, 0xa89: 0x0633, 0xa8a: 0x100f, 0xa8b: 0x0637,\n\t0xa8c: 0x063b, 0xa8d: 0x1769, 0xa8e: 0x1023, 0xa8f: 0x102b, 0xa90: 0x1037, 0xa91: 0x063f,\n\t0xa92: 0x176e, 0xa93: 0x105b, 0xa94: 0x1773, 0xa95: 0x1778, 0xa96: 0x107b, 0xa97: 0x1093,\n\t0xa98: 0x0643, 0xa99: 0x109b, 0xa9a: 0x109f, 0xa9b: 0x10a3, 0xa9c: 0x177d, 0xa9d: 0x1782,\n\t0xa9e: 0x1782, 0xa9f: 0x10bb, 0xaa0: 0x0647, 0xaa1: 0x1787, 0xaa2: 0x10cf, 0xaa3: 0x10d3,\n\t0xaa4: 0x064b, 0xaa5: 0x178c, 0xaa6: 0x10ef, 0xaa7: 0x064f, 0xaa8: 0x10ff, 0xaa9: 0x10f7,\n\t0xaaa: 0x1107, 0xaab: 0x1796, 0xaac: 0x111f, 0xaad: 0x0653, 0xaae: 0x112b, 0xaaf: 0x1133,\n\t0xab0: 0x1143, 0xab1: 0x0657, 0xab2: 0x17a0, 0xab3: 0x17a5, 0xab4: 0x065b, 0xab5: 0x17aa,\n\t0xab6: 0x115b, 0xab7: 0x17af, 0xab8: 0x1167, 0xab9: 0x1173, 0xaba: 0x117b, 0xabb: 0x17b4,\n\t0xabc: 0x17b9, 0xabd: 0x118f, 0xabe: 0x17be, 0xabf: 0x1197,\n\t// Block 0x2b, offset 0xac0\n\t0xac0: 0x16ce, 0xac1: 0x065f, 0xac2: 0x11af, 0xac3: 0x11b3, 0xac4: 0x0667, 0xac5: 0x11b7,\n\t0xac6: 0x0a33, 0xac7: 0x17c3, 0xac8: 0x17c8, 0xac9: 0x16d3, 0xaca: 0x16d8, 0xacb: 0x11d7,\n\t0xacc: 0x11db, 0xacd: 0x13f3, 0xace: 0x066b, 0xacf: 0x1207, 0xad0: 0x1203, 0xad1: 0x120b,\n\t0xad2: 0x083f, 0xad3: 0x120f, 0xad4: 0x1213, 0xad5: 0x1217, 0xad6: 0x121f, 0xad7: 0x17cd,\n\t0xad8: 0x121b, 0xad9: 0x1223, 0xada: 0x1237, 0xadb: 0x123b, 0xadc: 0x1227, 0xadd: 0x123f,\n\t0xade: 0x1253, 0xadf: 0x1267, 0xae0: 0x1233, 0xae1: 0x1247, 0xae2: 0x124b, 0xae3: 0x124f,\n\t0xae4: 0x17d2, 0xae5: 0x17dc, 0xae6: 0x17d7, 0xae7: 0x066f, 0xae8: 0x126f, 0xae9: 0x1273,\n\t0xaea: 0x127b, 0xaeb: 0x17f0, 0xaec: 0x127f, 0xaed: 0x17e1, 0xaee: 0x0673, 0xaef: 0x0677,\n\t0xaf0: 0x17e6, 0xaf1: 0x17eb, 0xaf2: 0x067b, 0xaf3: 0x129f, 0xaf4: 0x12a3, 0xaf5: 0x12a7,\n\t0xaf6: 0x12ab, 0xaf7: 0x12b7, 0xaf8: 0x12b3, 0xaf9: 0x12bf, 0xafa: 0x12bb, 0xafb: 0x12cb,\n\t0xafc: 0x12c3, 0xafd: 0x12c7, 0xafe: 0x12cf, 0xaff: 0x067f,\n\t// Block 0x2c, offset 0xb00\n\t0xb00: 0x12d7, 0xb01: 0x12db, 0xb02: 0x0683, 0xb03: 0x12eb, 0xb04: 0x12ef, 0xb05: 0x17f5,\n\t0xb06: 0x12fb, 0xb07: 0x12ff, 0xb08: 0x0687, 0xb09: 0x130b, 0xb0a: 0x05bb, 0xb0b: 0x17fa,\n\t0xb0c: 0x17ff, 0xb0d: 0x068b, 0xb0e: 0x068f, 0xb0f: 0x1337, 0xb10: 0x134f, 0xb11: 0x136b,\n\t0xb12: 0x137b, 0xb13: 0x1804, 0xb14: 0x138f, 0xb15: 0x1393, 0xb16: 0x13ab, 0xb17: 0x13b7,\n\t0xb18: 0x180e, 0xb19: 0x1660, 0xb1a: 0x13c3, 0xb1b: 0x13bf, 0xb1c: 0x13cb, 0xb1d: 0x1665,\n\t0xb1e: 0x13d7, 0xb1f: 0x13e3, 0xb20: 0x1813, 0xb21: 0x1818, 0xb22: 0x1423, 0xb23: 0x142f,\n\t0xb24: 0x1437, 0xb25: 0x181d, 0xb26: 0x143b, 0xb27: 0x1467, 0xb28: 0x1473, 0xb29: 0x1477,\n\t0xb2a: 0x146f, 0xb2b: 0x1483, 0xb2c: 0x1487, 0xb2d: 0x1822, 0xb2e: 0x1493, 0xb2f: 0x0693,\n\t0xb30: 0x149b, 0xb31: 0x1827, 0xb32: 0x0697, 0xb33: 0x14d3, 0xb34: 0x0ac3, 0xb35: 0x14eb,\n\t0xb36: 0x182c, 0xb37: 0x1836, 0xb38: 0x069b, 0xb39: 0x069f, 0xb3a: 0x1513, 0xb3b: 0x183b,\n\t0xb3c: 0x06a3, 0xb3d: 0x1840, 0xb3e: 0x152b, 0xb3f: 0x152b,\n\t// Block 0x2d, offset 0xb40\n\t0xb40: 0x1533, 0xb41: 0x1845, 0xb42: 0x154b, 0xb43: 0x06a7, 0xb44: 0x155b, 0xb45: 0x1567,\n\t0xb46: 0x156f, 0xb47: 0x1577, 0xb48: 0x06ab, 0xb49: 0x184a, 0xb4a: 0x158b, 0xb4b: 0x15a7,\n\t0xb4c: 0x15b3, 0xb4d: 0x06af, 0xb4e: 0x06b3, 0xb4f: 0x15b7, 0xb50: 0x184f, 0xb51: 0x06b7,\n\t0xb52: 0x1854, 0xb53: 0x1859, 0xb54: 0x185e, 0xb55: 0x15db, 0xb56: 0x06bb, 0xb57: 0x15ef,\n\t0xb58: 0x15f7, 0xb59: 0x15fb, 0xb5a: 0x1603, 0xb5b: 0x160b, 0xb5c: 0x1613, 0xb5d: 0x1868,\n}\n\n// nfcIndex: 22 blocks, 1408 entries, 1408 bytes\n// Block 0 is the zero block.\nvar nfcIndex = [1408]uint8{\n\t// Block 0x0, offset 0x0\n\t// Block 0x1, offset 0x40\n\t// Block 0x2, offset 0x80\n\t// Block 0x3, offset 0xc0\n\t0xc2: 0x2c, 0xc3: 0x01, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x2d, 0xc7: 0x04,\n\t0xc8: 0x05, 0xca: 0x2e, 0xcb: 0x2f, 0xcc: 0x06, 0xcd: 0x07, 0xce: 0x08, 0xcf: 0x30,\n\t0xd0: 0x09, 0xd1: 0x31, 0xd2: 0x32, 0xd3: 0x0a, 0xd6: 0x0b, 0xd7: 0x33,\n\t0xd8: 0x34, 0xd9: 0x0c, 0xdb: 0x35, 0xdc: 0x36, 0xdd: 0x37, 0xdf: 0x38,\n\t0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05,\n\t0xea: 0x06, 0xeb: 0x07, 0xec: 0x08, 0xed: 0x09, 0xef: 0x0a,\n\t0xf0: 0x13,\n\t// Block 0x4, offset 0x100\n\t0x120: 0x39, 0x121: 0x3a, 0x123: 0x3b, 0x124: 0x3c, 0x125: 0x3d, 0x126: 0x3e, 0x127: 0x3f,\n\t0x128: 0x40, 0x129: 0x41, 0x12a: 0x42, 0x12b: 0x43, 0x12c: 0x3e, 0x12d: 0x44, 0x12e: 0x45, 0x12f: 0x46,\n\t0x131: 0x47, 0x132: 0x48, 0x133: 0x49, 0x134: 0x4a, 0x135: 0x4b, 0x137: 0x4c,\n\t0x138: 0x4d, 0x139: 0x4e, 0x13a: 0x4f, 0x13b: 0x50, 0x13c: 0x51, 0x13d: 0x52, 0x13e: 0x53, 0x13f: 0x54,\n\t// Block 0x5, offset 0x140\n\t0x140: 0x55, 0x142: 0x56, 0x144: 0x57, 0x145: 0x58, 0x146: 0x59, 0x147: 0x5a,\n\t0x14d: 0x5b,\n\t0x15c: 0x5c, 0x15f: 0x5d,\n\t0x162: 0x5e, 0x164: 0x5f,\n\t0x168: 0x60, 0x169: 0x61, 0x16a: 0x62, 0x16c: 0x0d, 0x16d: 0x63, 0x16e: 0x64, 0x16f: 0x65,\n\t0x170: 0x66, 0x173: 0x67, 0x177: 0x68,\n\t0x178: 0x0e, 0x179: 0x0f, 0x17a: 0x10, 0x17b: 0x11, 0x17c: 0x12, 0x17d: 0x13, 0x17e: 0x14, 0x17f: 0x15,\n\t// Block 0x6, offset 0x180\n\t0x180: 0x69, 0x183: 0x6a, 0x184: 0x6b, 0x186: 0x6c, 0x187: 0x6d,\n\t0x188: 0x6e, 0x189: 0x16, 0x18a: 0x17, 0x18b: 0x6f, 0x18c: 0x70,\n\t0x1ab: 0x71,\n\t0x1b3: 0x72, 0x1b5: 0x73, 0x1b7: 0x74,\n\t// Block 0x7, offset 0x1c0\n\t0x1c0: 0x75, 0x1c1: 0x18, 0x1c2: 0x19, 0x1c3: 0x1a, 0x1c4: 0x76, 0x1c5: 0x77,\n\t0x1c9: 0x78, 0x1cc: 0x79, 0x1cd: 0x7a,\n\t// Block 0x8, offset 0x200\n\t0x219: 0x7b, 0x21a: 0x7c, 0x21b: 0x7d,\n\t0x220: 0x7e, 0x223: 0x7f, 0x224: 0x80, 0x225: 0x81, 0x226: 0x82, 0x227: 0x83,\n\t0x22a: 0x84, 0x22b: 0x85, 0x22f: 0x86,\n\t0x230: 0x87, 0x231: 0x88, 0x232: 0x89, 0x233: 0x8a, 0x234: 0x8b, 0x235: 0x8c, 0x236: 0x8d, 0x237: 0x87,\n\t0x238: 0x88, 0x239: 0x89, 0x23a: 0x8a, 0x23b: 0x8b, 0x23c: 0x8c, 0x23d: 0x8d, 0x23e: 0x87, 0x23f: 0x88,\n\t// Block 0x9, offset 0x240\n\t0x240: 0x89, 0x241: 0x8a, 0x242: 0x8b, 0x243: 0x8c, 0x244: 0x8d, 0x245: 0x87, 0x246: 0x88, 0x247: 0x89,\n\t0x248: 0x8a, 0x249: 0x8b, 0x24a: 0x8c, 0x24b: 0x8d, 0x24c: 0x87, 0x24d: 0x88, 0x24e: 0x89, 0x24f: 0x8a,\n\t0x250: 0x8b, 0x251: 0x8c, 0x252: 0x8d, 0x253: 0x87, 0x254: 0x88, 0x255: 0x89, 0x256: 0x8a, 0x257: 0x8b,\n\t0x258: 0x8c, 0x259: 0x8d, 0x25a: 0x87, 0x25b: 0x88, 0x25c: 0x89, 0x25d: 0x8a, 0x25e: 0x8b, 0x25f: 0x8c,\n\t0x260: 0x8d, 0x261: 0x87, 0x262: 0x88, 0x263: 0x89, 0x264: 0x8a, 0x265: 0x8b, 0x266: 0x8c, 0x267: 0x8d,\n\t0x268: 0x87, 0x269: 0x88, 0x26a: 0x89, 0x26b: 0x8a, 0x26c: 0x8b, 0x26d: 0x8c, 0x26e: 0x8d, 0x26f: 0x87,\n\t0x270: 0x88, 0x271: 0x89, 0x272: 0x8a, 0x273: 0x8b, 0x274: 0x8c, 0x275: 0x8d, 0x276: 0x87, 0x277: 0x88,\n\t0x278: 0x89, 0x279: 0x8a, 0x27a: 0x8b, 0x27b: 0x8c, 0x27c: 0x8d, 0x27d: 0x87, 0x27e: 0x88, 0x27f: 0x89,\n\t// Block 0xa, offset 0x280\n\t0x280: 0x8a, 0x281: 0x8b, 0x282: 0x8c, 0x283: 0x8d, 0x284: 0x87, 0x285: 0x88, 0x286: 0x89, 0x287: 0x8a,\n\t0x288: 0x8b, 0x289: 0x8c, 0x28a: 0x8d, 0x28b: 0x87, 0x28c: 0x88, 0x28d: 0x89, 0x28e: 0x8a, 0x28f: 0x8b,\n\t0x290: 0x8c, 0x291: 0x8d, 0x292: 0x87, 0x293: 0x88, 0x294: 0x89, 0x295: 0x8a, 0x296: 0x8b, 0x297: 0x8c,\n\t0x298: 0x8d, 0x299: 0x87, 0x29a: 0x88, 0x29b: 0x89, 0x29c: 0x8a, 0x29d: 0x8b, 0x29e: 0x8c, 0x29f: 0x8d,\n\t0x2a0: 0x87, 0x2a1: 0x88, 0x2a2: 0x89, 0x2a3: 0x8a, 0x2a4: 0x8b, 0x2a5: 0x8c, 0x2a6: 0x8d, 0x2a7: 0x87,\n\t0x2a8: 0x88, 0x2a9: 0x89, 0x2aa: 0x8a, 0x2ab: 0x8b, 0x2ac: 0x8c, 0x2ad: 0x8d, 0x2ae: 0x87, 0x2af: 0x88,\n\t0x2b0: 0x89, 0x2b1: 0x8a, 0x2b2: 0x8b, 0x2b3: 0x8c, 0x2b4: 0x8d, 0x2b5: 0x87, 0x2b6: 0x88, 0x2b7: 0x89,\n\t0x2b8: 0x8a, 0x2b9: 0x8b, 0x2ba: 0x8c, 0x2bb: 0x8d, 0x2bc: 0x87, 0x2bd: 0x88, 0x2be: 0x89, 0x2bf: 0x8a,\n\t// Block 0xb, offset 0x2c0\n\t0x2c0: 0x8b, 0x2c1: 0x8c, 0x2c2: 0x8d, 0x2c3: 0x87, 0x2c4: 0x88, 0x2c5: 0x89, 0x2c6: 0x8a, 0x2c7: 0x8b,\n\t0x2c8: 0x8c, 0x2c9: 0x8d, 0x2ca: 0x87, 0x2cb: 0x88, 0x2cc: 0x89, 0x2cd: 0x8a, 0x2ce: 0x8b, 0x2cf: 0x8c,\n\t0x2d0: 0x8d, 0x2d1: 0x87, 0x2d2: 0x88, 0x2d3: 0x89, 0x2d4: 0x8a, 0x2d5: 0x8b, 0x2d6: 0x8c, 0x2d7: 0x8d,\n\t0x2d8: 0x87, 0x2d9: 0x88, 0x2da: 0x89, 0x2db: 0x8a, 0x2dc: 0x8b, 0x2dd: 0x8c, 0x2de: 0x8e,\n\t// Block 0xc, offset 0x300\n\t0x324: 0x1b, 0x325: 0x1c, 0x326: 0x1d, 0x327: 0x1e,\n\t0x328: 0x1f, 0x329: 0x20, 0x32a: 0x21, 0x32b: 0x22, 0x32c: 0x8f, 0x32d: 0x90, 0x32e: 0x91,\n\t0x331: 0x92, 0x332: 0x93, 0x333: 0x94, 0x334: 0x95,\n\t0x338: 0x96, 0x339: 0x97, 0x33a: 0x98, 0x33b: 0x99, 0x33e: 0x9a, 0x33f: 0x9b,\n\t// Block 0xd, offset 0x340\n\t0x347: 0x9c,\n\t0x34b: 0x9d, 0x34d: 0x9e,\n\t0x368: 0x9f, 0x36b: 0xa0,\n\t// Block 0xe, offset 0x380\n\t0x381: 0xa1, 0x382: 0xa2, 0x384: 0xa3, 0x385: 0x82, 0x387: 0xa4,\n\t0x388: 0xa5, 0x38b: 0xa6, 0x38c: 0x3e, 0x38d: 0xa7,\n\t0x391: 0xa8, 0x392: 0xa9, 0x393: 0xaa, 0x396: 0xab, 0x397: 0xac,\n\t0x398: 0x73, 0x39a: 0xad, 0x39c: 0xae,\n\t0x3b0: 0x73,\n\t// Block 0xf, offset 0x3c0\n\t0x3eb: 0xaf, 0x3ec: 0xb0,\n\t// Block 0x10, offset 0x400\n\t0x432: 0xb1,\n\t// Block 0x11, offset 0x440\n\t0x445: 0xb2, 0x446: 0xb3, 0x447: 0xb4,\n\t0x449: 0xb5,\n\t// Block 0x12, offset 0x480\n\t0x480: 0xb6,\n\t0x4a3: 0xb7, 0x4a5: 0xb8,\n\t// Block 0x13, offset 0x4c0\n\t0x4c8: 0xb9,\n\t// Block 0x14, offset 0x500\n\t0x520: 0x23, 0x521: 0x24, 0x522: 0x25, 0x523: 0x26, 0x524: 0x27, 0x525: 0x28, 0x526: 0x29, 0x527: 0x2a,\n\t0x528: 0x2b,\n\t// Block 0x15, offset 0x540\n\t0x550: 0x0b, 0x551: 0x0c, 0x556: 0x0d,\n\t0x55b: 0x0e, 0x55d: 0x0f, 0x55e: 0x10, 0x55f: 0x11,\n\t0x56f: 0x12,\n}\n\n// nfcSparseOffset: 142 entries, 284 bytes\nvar 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}\n\n// nfcSparseValues: 688 entries, 2752 bytes\nvar nfcSparseValues = [688]valueRange{\n\t// Block 0x0, offset 0x0\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0xa100, lo: 0xa8, hi: 0xa8},\n\t{value: 0x8100, lo: 0xaf, hi: 0xaf},\n\t{value: 0x8100, lo: 0xb4, hi: 0xb4},\n\t{value: 0x8100, lo: 0xb8, hi: 0xb8},\n\t// Block 0x1, offset 0x5\n\t{value: 0x0091, lo: 0x03},\n\t{value: 0x46e2, lo: 0xa0, hi: 0xa1},\n\t{value: 0x4714, lo: 0xaf, hi: 0xb0},\n\t{value: 0xa000, lo: 0xb7, hi: 0xb7},\n\t// Block 0x2, offset 0x9\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0xa000, lo: 0x92, hi: 0x92},\n\t// Block 0x3, offset 0xb\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8100, lo: 0x98, hi: 0x9d},\n\t// Block 0x4, offset 0xd\n\t{value: 0x0006, lo: 0x0a},\n\t{value: 0xa000, lo: 0x81, hi: 0x81},\n\t{value: 0xa000, lo: 0x85, hi: 0x85},\n\t{value: 0xa000, lo: 0x89, hi: 0x89},\n\t{value: 0x4840, lo: 0x8a, hi: 0x8a},\n\t{value: 0x485e, lo: 0x8b, hi: 0x8b},\n\t{value: 0x36c7, lo: 0x8c, hi: 0x8c},\n\t{value: 0x36df, lo: 0x8d, hi: 0x8d},\n\t{value: 0x4876, lo: 0x8e, hi: 0x8e},\n\t{value: 0xa000, lo: 0x92, hi: 0x92},\n\t{value: 0x36fd, lo: 0x93, hi: 0x94},\n\t// Block 0x5, offset 0x18\n\t{value: 0x0000, lo: 0x0f},\n\t{value: 0xa000, lo: 0x83, hi: 0x83},\n\t{value: 0xa000, lo: 0x87, hi: 0x87},\n\t{value: 0xa000, lo: 0x8b, hi: 0x8b},\n\t{value: 0xa000, lo: 0x8d, hi: 0x8d},\n\t{value: 0x37a5, lo: 0x90, hi: 0x90},\n\t{value: 0x37b1, lo: 0x91, hi: 0x91},\n\t{value: 0x379f, lo: 0x93, hi: 0x93},\n\t{value: 0xa000, lo: 0x96, hi: 0x96},\n\t{value: 0x3817, lo: 0x97, hi: 0x97},\n\t{value: 0x37e1, lo: 0x9c, hi: 0x9c},\n\t{value: 0x37c9, lo: 0x9d, hi: 0x9d},\n\t{value: 0x37f3, lo: 0x9e, hi: 0x9e},\n\t{value: 0xa000, lo: 0xb4, hi: 0xb5},\n\t{value: 0x381d, lo: 0xb6, hi: 0xb6},\n\t{value: 0x3823, lo: 0xb7, hi: 0xb7},\n\t// Block 0x6, offset 0x28\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8132, lo: 0x83, hi: 0x87},\n\t// Block 0x7, offset 0x2a\n\t{value: 0x0001, lo: 0x04},\n\t{value: 0x8113, lo: 0x81, hi: 0x82},\n\t{value: 0x8132, lo: 0x84, hi: 0x84},\n\t{value: 0x812d, lo: 0x85, hi: 0x85},\n\t{value: 0x810d, lo: 0x87, hi: 0x87},\n\t// Block 0x8, offset 0x2f\n\t{value: 0x0000, lo: 0x0a},\n\t{value: 0x8132, lo: 0x90, hi: 0x97},\n\t{value: 0x8119, lo: 0x98, hi: 0x98},\n\t{value: 0x811a, lo: 0x99, hi: 0x99},\n\t{value: 0x811b, lo: 0x9a, hi: 0x9a},\n\t{value: 0x3841, lo: 0xa2, hi: 0xa2},\n\t{value: 0x3847, lo: 0xa3, hi: 0xa3},\n\t{value: 0x3853, lo: 0xa4, hi: 0xa4},\n\t{value: 0x384d, lo: 0xa5, hi: 0xa5},\n\t{value: 0x3859, lo: 0xa6, hi: 0xa6},\n\t{value: 0xa000, lo: 0xa7, hi: 0xa7},\n\t// Block 0x9, offset 0x3a\n\t{value: 0x0000, lo: 0x0e},\n\t{value: 0x386b, lo: 0x80, hi: 0x80},\n\t{value: 0xa000, lo: 0x81, hi: 0x81},\n\t{value: 0x385f, lo: 0x82, hi: 0x82},\n\t{value: 0xa000, lo: 0x92, hi: 0x92},\n\t{value: 0x3865, lo: 0x93, hi: 0x93},\n\t{value: 0xa000, lo: 0x95, hi: 0x95},\n\t{value: 0x8132, lo: 0x96, hi: 0x9c},\n\t{value: 0x8132, lo: 0x9f, hi: 0xa2},\n\t{value: 0x812d, lo: 0xa3, hi: 0xa3},\n\t{value: 0x8132, lo: 0xa4, hi: 0xa4},\n\t{value: 0x8132, lo: 0xa7, hi: 0xa8},\n\t{value: 0x812d, lo: 0xaa, hi: 0xaa},\n\t{value: 0x8132, lo: 0xab, hi: 0xac},\n\t{value: 0x812d, lo: 0xad, hi: 0xad},\n\t// Block 0xa, offset 0x49\n\t{value: 0x0000, lo: 0x0c},\n\t{value: 0x811f, lo: 0x91, hi: 0x91},\n\t{value: 0x8132, lo: 0xb0, hi: 0xb0},\n\t{value: 0x812d, lo: 0xb1, hi: 0xb1},\n\t{value: 0x8132, lo: 0xb2, hi: 0xb3},\n\t{value: 0x812d, lo: 0xb4, hi: 0xb4},\n\t{value: 0x8132, lo: 0xb5, hi: 0xb6},\n\t{value: 0x812d, lo: 0xb7, hi: 0xb9},\n\t{value: 0x8132, lo: 0xba, hi: 0xba},\n\t{value: 0x812d, lo: 0xbb, hi: 0xbc},\n\t{value: 0x8132, lo: 0xbd, hi: 0xbd},\n\t{value: 0x812d, lo: 0xbe, hi: 0xbe},\n\t{value: 0x8132, lo: 0xbf, hi: 0xbf},\n\t// Block 0xb, offset 0x56\n\t{value: 0x0005, lo: 0x07},\n\t{value: 0x8132, lo: 0x80, hi: 0x80},\n\t{value: 0x8132, lo: 0x81, hi: 0x81},\n\t{value: 0x812d, lo: 0x82, hi: 0x83},\n\t{value: 0x812d, lo: 0x84, hi: 0x85},\n\t{value: 0x812d, lo: 0x86, hi: 0x87},\n\t{value: 0x812d, lo: 0x88, hi: 0x89},\n\t{value: 0x8132, lo: 0x8a, hi: 0x8a},\n\t// Block 0xc, offset 0x5e\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x8132, lo: 0xab, hi: 0xb1},\n\t{value: 0x812d, lo: 0xb2, hi: 0xb2},\n\t{value: 0x8132, lo: 0xb3, hi: 0xb3},\n\t// Block 0xd, offset 0x62\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x8132, lo: 0x96, hi: 0x99},\n\t{value: 0x8132, lo: 0x9b, hi: 0xa3},\n\t{value: 0x8132, lo: 0xa5, hi: 0xa7},\n\t{value: 0x8132, lo: 0xa9, hi: 0xad},\n\t// Block 0xe, offset 0x67\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x812d, lo: 0x99, hi: 0x9b},\n\t// Block 0xf, offset 0x69\n\t{value: 0x0000, lo: 0x10},\n\t{value: 0x8132, lo: 0x94, hi: 0xa1},\n\t{value: 0x812d, lo: 0xa3, hi: 0xa3},\n\t{value: 0x8132, lo: 0xa4, hi: 0xa5},\n\t{value: 0x812d, lo: 0xa6, hi: 0xa6},\n\t{value: 0x8132, lo: 0xa7, hi: 0xa8},\n\t{value: 0x812d, lo: 0xa9, hi: 0xa9},\n\t{value: 0x8132, lo: 0xaa, hi: 0xac},\n\t{value: 0x812d, lo: 0xad, hi: 0xaf},\n\t{value: 0x8116, lo: 0xb0, hi: 0xb0},\n\t{value: 0x8117, lo: 0xb1, hi: 0xb1},\n\t{value: 0x8118, lo: 0xb2, hi: 0xb2},\n\t{value: 0x8132, lo: 0xb3, hi: 0xb5},\n\t{value: 0x812d, lo: 0xb6, hi: 0xb6},\n\t{value: 0x8132, lo: 0xb7, hi: 0xb8},\n\t{value: 0x812d, lo: 0xb9, hi: 0xba},\n\t{value: 0x8132, lo: 0xbb, hi: 0xbf},\n\t// Block 0x10, offset 0x7a\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0xa000, lo: 0xa8, hi: 0xa8},\n\t{value: 0x3ed8, lo: 0xa9, hi: 0xa9},\n\t{value: 0xa000, lo: 0xb0, hi: 0xb0},\n\t{value: 0x3ee0, lo: 0xb1, hi: 0xb1},\n\t{value: 0xa000, lo: 0xb3, hi: 0xb3},\n\t{value: 0x3ee8, lo: 0xb4, hi: 0xb4},\n\t{value: 0x9902, lo: 0xbc, hi: 0xbc},\n\t// Block 0x11, offset 0x82\n\t{value: 0x0008, lo: 0x06},\n\t{value: 0x8104, lo: 0x8d, hi: 0x8d},\n\t{value: 0x8132, lo: 0x91, hi: 0x91},\n\t{value: 0x812d, lo: 0x92, hi: 0x92},\n\t{value: 0x8132, lo: 0x93, hi: 0x93},\n\t{value: 0x8132, lo: 0x94, hi: 0x94},\n\t{value: 0x451c, lo: 0x98, hi: 0x9f},\n\t// Block 0x12, offset 0x89\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8102, lo: 0xbc, hi: 0xbc},\n\t{value: 0x9900, lo: 0xbe, hi: 0xbe},\n\t// Block 0x13, offset 0x8c\n\t{value: 0x0008, lo: 0x06},\n\t{value: 0xa000, lo: 0x87, hi: 0x87},\n\t{value: 0x2c9e, lo: 0x8b, hi: 0x8c},\n\t{value: 0x8104, lo: 0x8d, hi: 0x8d},\n\t{value: 0x9900, lo: 0x97, hi: 0x97},\n\t{value: 0x455c, lo: 0x9c, hi: 0x9d},\n\t{value: 0x456c, lo: 0x9f, hi: 0x9f},\n\t// Block 0x14, offset 0x93\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x4594, lo: 0xb3, hi: 0xb3},\n\t{value: 0x459c, lo: 0xb6, hi: 0xb6},\n\t{value: 0x8102, lo: 0xbc, hi: 0xbc},\n\t// Block 0x15, offset 0x97\n\t{value: 0x0008, lo: 0x03},\n\t{value: 0x8104, lo: 0x8d, hi: 0x8d},\n\t{value: 0x4574, lo: 0x99, hi: 0x9b},\n\t{value: 0x458c, lo: 0x9e, hi: 0x9e},\n\t// Block 0x16, offset 0x9b\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8102, lo: 0xbc, hi: 0xbc},\n\t// Block 0x17, offset 0x9d\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0x8d, hi: 0x8d},\n\t// Block 0x18, offset 0x9f\n\t{value: 0x0000, lo: 0x08},\n\t{value: 0xa000, lo: 0x87, hi: 0x87},\n\t{value: 0x2cb6, lo: 0x88, hi: 0x88},\n\t{value: 0x2cae, lo: 0x8b, hi: 0x8b},\n\t{value: 0x2cbe, lo: 0x8c, hi: 0x8c},\n\t{value: 0x8104, lo: 0x8d, hi: 0x8d},\n\t{value: 0x9900, lo: 0x96, hi: 0x97},\n\t{value: 0x45a4, lo: 0x9c, hi: 0x9c},\n\t{value: 0x45ac, lo: 0x9d, hi: 0x9d},\n\t// Block 0x19, offset 0xa8\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0xa000, lo: 0x92, hi: 0x92},\n\t{value: 0x2cc6, lo: 0x94, hi: 0x94},\n\t{value: 0x9900, lo: 0xbe, hi: 0xbe},\n\t// Block 0x1a, offset 0xac\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0xa000, lo: 0x86, hi: 0x87},\n\t{value: 0x2cce, lo: 0x8a, hi: 0x8a},\n\t{value: 0x2cde, lo: 0x8b, hi: 0x8b},\n\t{value: 0x2cd6, lo: 0x8c, hi: 0x8c},\n\t{value: 0x8104, lo: 0x8d, hi: 0x8d},\n\t{value: 0x9900, lo: 0x97, hi: 0x97},\n\t// Block 0x1b, offset 0xb3\n\t{value: 0x1801, lo: 0x04},\n\t{value: 0xa000, lo: 0x86, hi: 0x86},\n\t{value: 0x3ef0, lo: 0x88, hi: 0x88},\n\t{value: 0x8104, lo: 0x8d, hi: 0x8d},\n\t{value: 0x8120, lo: 0x95, hi: 0x96},\n\t// Block 0x1c, offset 0xb8\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8102, lo: 0xbc, hi: 0xbc},\n\t{value: 0xa000, lo: 0xbf, hi: 0xbf},\n\t// Block 0x1d, offset 0xbb\n\t{value: 0x0000, lo: 0x09},\n\t{value: 0x2ce6, lo: 0x80, hi: 0x80},\n\t{value: 0x9900, lo: 0x82, hi: 0x82},\n\t{value: 0xa000, lo: 0x86, hi: 0x86},\n\t{value: 0x2cee, lo: 0x87, hi: 0x87},\n\t{value: 0x2cf6, lo: 0x88, hi: 0x88},\n\t{value: 0x2f50, lo: 0x8a, hi: 0x8a},\n\t{value: 0x2dd8, lo: 0x8b, hi: 0x8b},\n\t{value: 0x8104, lo: 0x8d, hi: 0x8d},\n\t{value: 0x9900, lo: 0x95, hi: 0x96},\n\t// Block 0x1e, offset 0xc5\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x9900, lo: 0xbe, hi: 0xbe},\n\t// Block 0x1f, offset 0xc7\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0xa000, lo: 0x86, hi: 0x87},\n\t{value: 0x2cfe, lo: 0x8a, hi: 0x8a},\n\t{value: 0x2d0e, lo: 0x8b, hi: 0x8b},\n\t{value: 0x2d06, lo: 0x8c, hi: 0x8c},\n\t{value: 0x8104, lo: 0x8d, hi: 0x8d},\n\t{value: 0x9900, lo: 0x97, hi: 0x97},\n\t// Block 0x20, offset 0xce\n\t{value: 0x6bea, lo: 0x07},\n\t{value: 0x9904, lo: 0x8a, hi: 0x8a},\n\t{value: 0x9900, lo: 0x8f, hi: 0x8f},\n\t{value: 0xa000, lo: 0x99, hi: 0x99},\n\t{value: 0x3ef8, lo: 0x9a, hi: 0x9a},\n\t{value: 0x2f58, lo: 0x9c, hi: 0x9c},\n\t{value: 0x2de3, lo: 0x9d, hi: 0x9d},\n\t{value: 0x2d16, lo: 0x9e, hi: 0x9f},\n\t// Block 0x21, offset 0xd6\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8122, lo: 0xb8, hi: 0xb9},\n\t{value: 0x8104, lo: 0xba, hi: 0xba},\n\t// Block 0x22, offset 0xd9\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8123, lo: 0x88, hi: 0x8b},\n\t// Block 0x23, offset 0xdb\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8124, lo: 0xb8, hi: 0xb9},\n\t// Block 0x24, offset 0xdd\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8125, lo: 0x88, hi: 0x8b},\n\t// Block 0x25, offset 0xdf\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x812d, lo: 0x98, hi: 0x99},\n\t{value: 0x812d, lo: 0xb5, hi: 0xb5},\n\t{value: 0x812d, lo: 0xb7, hi: 0xb7},\n\t{value: 0x812b, lo: 0xb9, hi: 0xb9},\n\t// Block 0x26, offset 0xe4\n\t{value: 0x0000, lo: 0x10},\n\t{value: 0x2644, lo: 0x83, hi: 0x83},\n\t{value: 0x264b, lo: 0x8d, hi: 0x8d},\n\t{value: 0x2652, lo: 0x92, hi: 0x92},\n\t{value: 0x2659, lo: 0x97, hi: 0x97},\n\t{value: 0x2660, lo: 0x9c, hi: 0x9c},\n\t{value: 0x263d, lo: 0xa9, hi: 0xa9},\n\t{value: 0x8126, lo: 0xb1, hi: 0xb1},\n\t{value: 0x8127, lo: 0xb2, hi: 0xb2},\n\t{value: 0x4a84, lo: 0xb3, hi: 0xb3},\n\t{value: 0x8128, lo: 0xb4, hi: 0xb4},\n\t{value: 0x4a8d, lo: 0xb5, hi: 0xb5},\n\t{value: 0x45b4, lo: 0xb6, hi: 0xb6},\n\t{value: 0x8200, lo: 0xb7, hi: 0xb7},\n\t{value: 0x45bc, lo: 0xb8, hi: 0xb8},\n\t{value: 0x8200, lo: 0xb9, hi: 0xb9},\n\t{value: 0x8127, lo: 0xba, hi: 0xbd},\n\t// Block 0x27, offset 0xf5\n\t{value: 0x0000, lo: 0x0b},\n\t{value: 0x8127, lo: 0x80, hi: 0x80},\n\t{value: 0x4a96, lo: 0x81, hi: 0x81},\n\t{value: 0x8132, lo: 0x82, hi: 0x83},\n\t{value: 0x8104, lo: 0x84, hi: 0x84},\n\t{value: 0x8132, lo: 0x86, hi: 0x87},\n\t{value: 0x266e, lo: 0x93, hi: 0x93},\n\t{value: 0x2675, lo: 0x9d, hi: 0x9d},\n\t{value: 0x267c, lo: 0xa2, hi: 0xa2},\n\t{value: 0x2683, lo: 0xa7, hi: 0xa7},\n\t{value: 0x268a, lo: 0xac, hi: 0xac},\n\t{value: 0x2667, lo: 0xb9, hi: 0xb9},\n\t// Block 0x28, offset 0x101\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x812d, lo: 0x86, hi: 0x86},\n\t// Block 0x29, offset 0x103\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0xa000, lo: 0xa5, hi: 0xa5},\n\t{value: 0x2d1e, lo: 0xa6, hi: 0xa6},\n\t{value: 0x9900, lo: 0xae, hi: 0xae},\n\t{value: 0x8102, lo: 0xb7, hi: 0xb7},\n\t{value: 0x8104, lo: 0xb9, hi: 0xba},\n\t// Block 0x2a, offset 0x109\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x812d, lo: 0x8d, hi: 0x8d},\n\t// Block 0x2b, offset 0x10b\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0xa000, lo: 0x80, hi: 0x92},\n\t// Block 0x2c, offset 0x10d\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0xb900, lo: 0xa1, hi: 0xb5},\n\t// Block 0x2d, offset 0x10f\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x9900, lo: 0xa8, hi: 0xbf},\n\t// Block 0x2e, offset 0x111\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x9900, lo: 0x80, hi: 0x82},\n\t// Block 0x2f, offset 0x113\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8132, lo: 0x9d, hi: 0x9f},\n\t// Block 0x30, offset 0x115\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8104, lo: 0x94, hi: 0x94},\n\t{value: 0x8104, lo: 0xb4, hi: 0xb4},\n\t// Block 0x31, offset 0x118\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8104, lo: 0x92, hi: 0x92},\n\t{value: 0x8132, lo: 0x9d, hi: 0x9d},\n\t// Block 0x32, offset 0x11b\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8131, lo: 0xa9, hi: 0xa9},\n\t// Block 0x33, offset 0x11d\n\t{value: 0x0004, lo: 0x02},\n\t{value: 0x812e, lo: 0xb9, hi: 0xba},\n\t{value: 0x812d, lo: 0xbb, hi: 0xbb},\n\t// Block 0x34, offset 0x120\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8132, lo: 0x97, hi: 0x97},\n\t{value: 0x812d, lo: 0x98, hi: 0x98},\n\t// Block 0x35, offset 0x123\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x8104, lo: 0xa0, hi: 0xa0},\n\t{value: 0x8132, lo: 0xb5, hi: 0xbc},\n\t{value: 0x812d, lo: 0xbf, hi: 0xbf},\n\t// Block 0x36, offset 0x127\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x8132, lo: 0xb0, hi: 0xb4},\n\t{value: 0x812d, lo: 0xb5, hi: 0xba},\n\t{value: 0x8132, lo: 0xbb, hi: 0xbc},\n\t{value: 0x812d, lo: 0xbd, hi: 0xbd},\n\t// Block 0x37, offset 0x12c\n\t{value: 0x0000, lo: 0x08},\n\t{value: 0x2d66, lo: 0x80, hi: 0x80},\n\t{value: 0x2d6e, lo: 0x81, hi: 0x81},\n\t{value: 0xa000, lo: 0x82, hi: 0x82},\n\t{value: 0x2d76, lo: 0x83, hi: 0x83},\n\t{value: 0x8104, lo: 0x84, hi: 0x84},\n\t{value: 0x8132, lo: 0xab, hi: 0xab},\n\t{value: 0x812d, lo: 0xac, hi: 0xac},\n\t{value: 0x8132, lo: 0xad, hi: 0xb3},\n\t// Block 0x38, offset 0x135\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0xaa, hi: 0xab},\n\t// Block 0x39, offset 0x137\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8102, lo: 0xa6, hi: 0xa6},\n\t{value: 0x8104, lo: 0xb2, hi: 0xb3},\n\t// Block 0x3a, offset 0x13a\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8102, lo: 0xb7, hi: 0xb7},\n\t// Block 0x3b, offset 0x13c\n\t{value: 0x0000, lo: 0x0a},\n\t{value: 0x8132, lo: 0x90, hi: 0x92},\n\t{value: 0x8101, lo: 0x94, hi: 0x94},\n\t{value: 0x812d, lo: 0x95, hi: 0x99},\n\t{value: 0x8132, lo: 0x9a, hi: 0x9b},\n\t{value: 0x812d, lo: 0x9c, hi: 0x9f},\n\t{value: 0x8132, lo: 0xa0, hi: 0xa0},\n\t{value: 0x8101, lo: 0xa2, hi: 0xa8},\n\t{value: 0x812d, lo: 0xad, hi: 0xad},\n\t{value: 0x8132, lo: 0xb4, hi: 0xb4},\n\t{value: 0x8132, lo: 0xb8, hi: 0xb9},\n\t// Block 0x3c, offset 0x147\n\t{value: 0x0000, lo: 0x0f},\n\t{value: 0x8132, lo: 0x80, hi: 0x81},\n\t{value: 0x812d, lo: 0x82, hi: 0x82},\n\t{value: 0x8132, lo: 0x83, hi: 0x89},\n\t{value: 0x812d, lo: 0x8a, hi: 0x8a},\n\t{value: 0x8132, lo: 0x8b, hi: 0x8c},\n\t{value: 0x8135, lo: 0x8d, hi: 0x8d},\n\t{value: 0x812a, lo: 0x8e, hi: 0x8e},\n\t{value: 0x812d, lo: 0x8f, hi: 0x8f},\n\t{value: 0x8129, lo: 0x90, hi: 0x90},\n\t{value: 0x8132, lo: 0x91, hi: 0xb5},\n\t{value: 0x8132, lo: 0xbb, hi: 0xbb},\n\t{value: 0x8134, lo: 0xbc, hi: 0xbc},\n\t{value: 0x812d, lo: 0xbd, hi: 0xbd},\n\t{value: 0x8132, lo: 0xbe, hi: 0xbe},\n\t{value: 0x812d, lo: 0xbf, hi: 0xbf},\n\t// Block 0x3d, offset 0x157\n\t{value: 0x0004, lo: 0x03},\n\t{value: 0x0433, lo: 0x80, hi: 0x81},\n\t{value: 0x8100, lo: 0x97, hi: 0x97},\n\t{value: 0x8100, lo: 0xbe, hi: 0xbe},\n\t// Block 0x3e, offset 0x15b\n\t{value: 0x0000, lo: 0x0d},\n\t{value: 0x8132, lo: 0x90, hi: 0x91},\n\t{value: 0x8101, lo: 0x92, hi: 0x93},\n\t{value: 0x8132, lo: 0x94, hi: 0x97},\n\t{value: 0x8101, lo: 0x98, hi: 0x9a},\n\t{value: 0x8132, lo: 0x9b, hi: 0x9c},\n\t{value: 0x8132, lo: 0xa1, hi: 0xa1},\n\t{value: 0x8101, lo: 0xa5, hi: 0xa6},\n\t{value: 0x8132, lo: 0xa7, hi: 0xa7},\n\t{value: 0x812d, lo: 0xa8, hi: 0xa8},\n\t{value: 0x8132, lo: 0xa9, hi: 0xa9},\n\t{value: 0x8101, lo: 0xaa, hi: 0xab},\n\t{value: 0x812d, lo: 0xac, hi: 0xaf},\n\t{value: 0x8132, lo: 0xb0, hi: 0xb0},\n\t// Block 0x3f, offset 0x169\n\t{value: 0x427b, lo: 0x02},\n\t{value: 0x01b8, lo: 0xa6, hi: 0xa6},\n\t{value: 0x0057, lo: 0xaa, hi: 0xab},\n\t// Block 0x40, offset 0x16c\n\t{value: 0x0007, lo: 0x05},\n\t{value: 0xa000, lo: 0x90, hi: 0x90},\n\t{value: 0xa000, lo: 0x92, hi: 0x92},\n\t{value: 0xa000, lo: 0x94, hi: 0x94},\n\t{value: 0x3bb9, lo: 0x9a, hi: 0x9b},\n\t{value: 0x3bc7, lo: 0xae, hi: 0xae},\n\t// Block 0x41, offset 0x172\n\t{value: 0x000e, lo: 0x05},\n\t{value: 0x3bce, lo: 0x8d, hi: 0x8e},\n\t{value: 0x3bd5, lo: 0x8f, hi: 0x8f},\n\t{value: 0xa000, lo: 0x90, hi: 0x90},\n\t{value: 0xa000, lo: 0x92, hi: 0x92},\n\t{value: 0xa000, lo: 0x94, hi: 0x94},\n\t// Block 0x42, offset 0x178\n\t{value: 0x6408, lo: 0x0a},\n\t{value: 0xa000, lo: 0x83, hi: 0x83},\n\t{value: 0x3be3, lo: 0x84, hi: 0x84},\n\t{value: 0xa000, lo: 0x88, hi: 0x88},\n\t{value: 0x3bea, lo: 0x89, hi: 0x89},\n\t{value: 0xa000, lo: 0x8b, hi: 0x8b},\n\t{value: 0x3bf1, lo: 0x8c, hi: 0x8c},\n\t{value: 0xa000, lo: 0xa3, hi: 0xa3},\n\t{value: 0x3bf8, lo: 0xa4, hi: 0xa5},\n\t{value: 0x3bff, lo: 0xa6, hi: 0xa6},\n\t{value: 0xa000, lo: 0xbc, hi: 0xbc},\n\t// Block 0x43, offset 0x183\n\t{value: 0x0007, lo: 0x03},\n\t{value: 0x3c68, lo: 0xa0, hi: 0xa1},\n\t{value: 0x3c92, lo: 0xa2, hi: 0xa3},\n\t{value: 0x3cbc, lo: 0xaa, hi: 0xad},\n\t// Block 0x44, offset 0x187\n\t{value: 0x0004, lo: 0x01},\n\t{value: 0x048b, lo: 0xa9, hi: 0xaa},\n\t// Block 0x45, offset 0x189\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x44dd, lo: 0x9c, hi: 0x9c},\n\t// Block 0x46, offset 0x18b\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8132, lo: 0xaf, hi: 0xb1},\n\t// Block 0x47, offset 0x18d\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0xbf, hi: 0xbf},\n\t// Block 0x48, offset 0x18f\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8132, lo: 0xa0, hi: 0xbf},\n\t// Block 0x49, offset 0x191\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x812c, lo: 0xaa, hi: 0xaa},\n\t{value: 0x8131, lo: 0xab, hi: 0xab},\n\t{value: 0x8133, lo: 0xac, hi: 0xac},\n\t{value: 0x812e, lo: 0xad, hi: 0xad},\n\t{value: 0x812f, lo: 0xae, hi: 0xaf},\n\t// Block 0x4a, offset 0x197\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x4a9f, lo: 0xb3, hi: 0xb3},\n\t{value: 0x4a9f, lo: 0xb5, hi: 0xb6},\n\t{value: 0x4a9f, lo: 0xba, hi: 0xbf},\n\t// Block 0x4b, offset 0x19b\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x4a9f, lo: 0x8f, hi: 0xa3},\n\t// Block 0x4c, offset 0x19d\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8100, lo: 0xae, hi: 0xbe},\n\t// Block 0x4d, offset 0x19f\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0x8100, lo: 0x84, hi: 0x84},\n\t{value: 0x8100, lo: 0x87, hi: 0x87},\n\t{value: 0x8100, lo: 0x90, hi: 0x90},\n\t{value: 0x8100, lo: 0x9e, hi: 0x9e},\n\t{value: 0x8100, lo: 0xa1, hi: 0xa1},\n\t{value: 0x8100, lo: 0xb2, hi: 0xb2},\n\t{value: 0x8100, lo: 0xbb, hi: 0xbb},\n\t// Block 0x4e, offset 0x1a7\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x8100, lo: 0x80, hi: 0x80},\n\t{value: 0x8100, lo: 0x8b, hi: 0x8b},\n\t{value: 0x8100, lo: 0x8e, hi: 0x8e},\n\t// Block 0x4f, offset 0x1ab\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8132, lo: 0xaf, hi: 0xaf},\n\t{value: 0x8132, lo: 0xb4, hi: 0xbd},\n\t// Block 0x50, offset 0x1ae\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8132, lo: 0x9e, hi: 0x9f},\n\t// Block 0x51, offset 0x1b0\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8132, lo: 0xb0, hi: 0xb1},\n\t// Block 0x52, offset 0x1b2\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0x86, hi: 0x86},\n\t// Block 0x53, offset 0x1b4\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8104, lo: 0x84, hi: 0x84},\n\t{value: 0x8132, lo: 0xa0, hi: 0xb1},\n\t// Block 0x54, offset 0x1b7\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x812d, lo: 0xab, hi: 0xad},\n\t// Block 0x55, offset 0x1b9\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0x93, hi: 0x93},\n\t// Block 0x56, offset 0x1bb\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8102, lo: 0xb3, hi: 0xb3},\n\t// Block 0x57, offset 0x1bd\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0x80, hi: 0x80},\n\t// Block 0x58, offset 0x1bf\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x8132, lo: 0xb0, hi: 0xb0},\n\t{value: 0x8132, lo: 0xb2, hi: 0xb3},\n\t{value: 0x812d, lo: 0xb4, hi: 0xb4},\n\t{value: 0x8132, lo: 0xb7, hi: 0xb8},\n\t{value: 0x8132, lo: 0xbe, hi: 0xbf},\n\t// Block 0x59, offset 0x1c5\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8132, lo: 0x81, hi: 0x81},\n\t{value: 0x8104, lo: 0xb6, hi: 0xb6},\n\t// Block 0x5a, offset 0x1c8\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0xad, hi: 0xad},\n\t// Block 0x5b, offset 0x1ca\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0xe500, lo: 0x80, hi: 0x80},\n\t{value: 0xc600, lo: 0x81, hi: 0x9b},\n\t{value: 0xe500, lo: 0x9c, hi: 0x9c},\n\t{value: 0xc600, lo: 0x9d, hi: 0xb7},\n\t{value: 0xe500, lo: 0xb8, hi: 0xb8},\n\t{value: 0xc600, lo: 0xb9, hi: 0xbf},\n\t// Block 0x5c, offset 0x1d1\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0xc600, lo: 0x80, hi: 0x93},\n\t{value: 0xe500, lo: 0x94, hi: 0x94},\n\t{value: 0xc600, lo: 0x95, hi: 0xaf},\n\t{value: 0xe500, lo: 0xb0, hi: 0xb0},\n\t{value: 0xc600, lo: 0xb1, hi: 0xbf},\n\t// Block 0x5d, offset 0x1d7\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0xc600, lo: 0x80, hi: 0x8b},\n\t{value: 0xe500, lo: 0x8c, hi: 0x8c},\n\t{value: 0xc600, lo: 0x8d, hi: 0xa7},\n\t{value: 0xe500, lo: 0xa8, hi: 0xa8},\n\t{value: 0xc600, lo: 0xa9, hi: 0xbf},\n\t// Block 0x5e, offset 0x1dd\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0xc600, lo: 0x80, hi: 0x83},\n\t{value: 0xe500, lo: 0x84, hi: 0x84},\n\t{value: 0xc600, lo: 0x85, hi: 0x9f},\n\t{value: 0xe500, lo: 0xa0, hi: 0xa0},\n\t{value: 0xc600, lo: 0xa1, hi: 0xbb},\n\t{value: 0xe500, lo: 0xbc, hi: 0xbc},\n\t{value: 0xc600, lo: 0xbd, hi: 0xbf},\n\t// Block 0x5f, offset 0x1e5\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0xc600, lo: 0x80, hi: 0x97},\n\t{value: 0xe500, lo: 0x98, hi: 0x98},\n\t{value: 0xc600, lo: 0x99, hi: 0xb3},\n\t{value: 0xe500, lo: 0xb4, hi: 0xb4},\n\t{value: 0xc600, lo: 0xb5, hi: 0xbf},\n\t// Block 0x60, offset 0x1eb\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0xc600, lo: 0x80, hi: 0x8f},\n\t{value: 0xe500, lo: 0x90, hi: 0x90},\n\t{value: 0xc600, lo: 0x91, hi: 0xab},\n\t{value: 0xe500, lo: 0xac, hi: 0xac},\n\t{value: 0xc600, lo: 0xad, hi: 0xbf},\n\t// Block 0x61, offset 0x1f1\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0xc600, lo: 0x80, hi: 0x87},\n\t{value: 0xe500, lo: 0x88, hi: 0x88},\n\t{value: 0xc600, lo: 0x89, hi: 0xa3},\n\t{value: 0xe500, lo: 0xa4, hi: 0xa4},\n\t{value: 0xc600, lo: 0xa5, hi: 0xbf},\n\t// Block 0x62, offset 0x1f7\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0xc600, lo: 0x80, hi: 0x87},\n\t{value: 0xe500, lo: 0x88, hi: 0x88},\n\t{value: 0xc600, lo: 0x89, hi: 0xa3},\n\t// Block 0x63, offset 0x1fb\n\t{value: 0x0006, lo: 0x0d},\n\t{value: 0x4390, lo: 0x9d, hi: 0x9d},\n\t{value: 0x8115, lo: 0x9e, hi: 0x9e},\n\t{value: 0x4402, lo: 0x9f, hi: 0x9f},\n\t{value: 0x43f0, lo: 0xaa, hi: 0xab},\n\t{value: 0x44f4, lo: 0xac, hi: 0xac},\n\t{value: 0x44fc, lo: 0xad, hi: 0xad},\n\t{value: 0x4348, lo: 0xae, hi: 0xb1},\n\t{value: 0x4366, lo: 0xb2, hi: 0xb4},\n\t{value: 0x437e, lo: 0xb5, hi: 0xb6},\n\t{value: 0x438a, lo: 0xb8, hi: 0xb8},\n\t{value: 0x4396, lo: 0xb9, hi: 0xbb},\n\t{value: 0x43ae, lo: 0xbc, hi: 0xbc},\n\t{value: 0x43b4, lo: 0xbe, hi: 0xbe},\n\t// Block 0x64, offset 0x209\n\t{value: 0x0006, lo: 0x08},\n\t{value: 0x43ba, lo: 0x80, hi: 0x81},\n\t{value: 0x43c6, lo: 0x83, hi: 0x84},\n\t{value: 0x43d8, lo: 0x86, hi: 0x89},\n\t{value: 0x43fc, lo: 0x8a, hi: 0x8a},\n\t{value: 0x4378, lo: 0x8b, hi: 0x8b},\n\t{value: 0x4360, lo: 0x8c, hi: 0x8c},\n\t{value: 0x43a8, lo: 0x8d, hi: 0x8d},\n\t{value: 0x43d2, lo: 0x8e, hi: 0x8e},\n\t// Block 0x65, offset 0x212\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8100, lo: 0xa4, hi: 0xa5},\n\t{value: 0x8100, lo: 0xb0, hi: 0xb1},\n\t// Block 0x66, offset 0x215\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8100, lo: 0x9b, hi: 0x9d},\n\t{value: 0x8200, lo: 0x9e, hi: 0xa3},\n\t// Block 0x67, offset 0x218\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8100, lo: 0x90, hi: 0x90},\n\t// Block 0x68, offset 0x21a\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8100, lo: 0x99, hi: 0x99},\n\t{value: 0x8200, lo: 0xb2, hi: 0xb4},\n\t// Block 0x69, offset 0x21d\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8100, lo: 0xbc, hi: 0xbd},\n\t// Block 0x6a, offset 0x21f\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x8132, lo: 0xa0, hi: 0xa6},\n\t{value: 0x812d, lo: 0xa7, hi: 0xad},\n\t{value: 0x8132, lo: 0xae, hi: 0xaf},\n\t// Block 0x6b, offset 0x223\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x8100, lo: 0x89, hi: 0x8c},\n\t{value: 0x8100, lo: 0xb0, hi: 0xb2},\n\t{value: 0x8100, lo: 0xb4, hi: 0xb4},\n\t{value: 0x8100, lo: 0xb6, hi: 0xbf},\n\t// Block 0x6c, offset 0x228\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8100, lo: 0x81, hi: 0x8c},\n\t// Block 0x6d, offset 0x22a\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8100, lo: 0xb5, hi: 0xba},\n\t// Block 0x6e, offset 0x22c\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x4a9f, lo: 0x9e, hi: 0x9f},\n\t{value: 0x4a9f, lo: 0xa3, hi: 0xa3},\n\t{value: 0x4a9f, lo: 0xa5, hi: 0xa6},\n\t{value: 0x4a9f, lo: 0xaa, hi: 0xaf},\n\t// Block 0x6f, offset 0x231\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x4a9f, lo: 0x82, hi: 0x87},\n\t{value: 0x4a9f, lo: 0x8a, hi: 0x8f},\n\t{value: 0x4a9f, lo: 0x92, hi: 0x97},\n\t{value: 0x4a9f, lo: 0x9a, hi: 0x9c},\n\t{value: 0x8100, lo: 0xa3, hi: 0xa3},\n\t// Block 0x70, offset 0x237\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x812d, lo: 0xbd, hi: 0xbd},\n\t// Block 0x71, offset 0x239\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x812d, lo: 0xa0, hi: 0xa0},\n\t// Block 0x72, offset 0x23b\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8132, lo: 0xb6, hi: 0xba},\n\t// Block 0x73, offset 0x23d\n\t{value: 0x002c, lo: 0x05},\n\t{value: 0x812d, lo: 0x8d, hi: 0x8d},\n\t{value: 0x8132, lo: 0x8f, hi: 0x8f},\n\t{value: 0x8132, lo: 0xb8, hi: 0xb8},\n\t{value: 0x8101, lo: 0xb9, hi: 0xba},\n\t{value: 0x8104, lo: 0xbf, hi: 0xbf},\n\t// Block 0x74, offset 0x243\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8132, lo: 0xa5, hi: 0xa5},\n\t{value: 0x812d, lo: 0xa6, hi: 0xa6},\n\t// Block 0x75, offset 0x246\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8104, lo: 0x86, hi: 0x86},\n\t{value: 0x8104, lo: 0xbf, hi: 0xbf},\n\t// Block 0x76, offset 0x249\n\t{value: 0x17fe, lo: 0x07},\n\t{value: 0xa000, lo: 0x99, hi: 0x99},\n\t{value: 0x4238, lo: 0x9a, hi: 0x9a},\n\t{value: 0xa000, lo: 0x9b, hi: 0x9b},\n\t{value: 0x4242, lo: 0x9c, hi: 0x9c},\n\t{value: 0xa000, lo: 0xa5, hi: 0xa5},\n\t{value: 0x424c, lo: 0xab, hi: 0xab},\n\t{value: 0x8104, lo: 0xb9, hi: 0xba},\n\t// Block 0x77, offset 0x251\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0x8132, lo: 0x80, hi: 0x82},\n\t{value: 0x9900, lo: 0xa7, hi: 0xa7},\n\t{value: 0x2d7e, lo: 0xae, hi: 0xae},\n\t{value: 0x2d88, lo: 0xaf, hi: 0xaf},\n\t{value: 0xa000, lo: 0xb1, hi: 0xb2},\n\t{value: 0x8104, lo: 0xb3, hi: 0xb4},\n\t// Block 0x78, offset 0x258\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8104, lo: 0x80, hi: 0x80},\n\t{value: 0x8102, lo: 0x8a, hi: 0x8a},\n\t// Block 0x79, offset 0x25b\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8104, lo: 0xb5, hi: 0xb5},\n\t{value: 0x8102, lo: 0xb6, hi: 0xb6},\n\t// Block 0x7a, offset 0x25e\n\t{value: 0x0002, lo: 0x01},\n\t{value: 0x8102, lo: 0xa9, hi: 0xaa},\n\t// Block 0x7b, offset 0x260\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0xa000, lo: 0x87, hi: 0x87},\n\t{value: 0x2d92, lo: 0x8b, hi: 0x8b},\n\t{value: 0x2d9c, lo: 0x8c, hi: 0x8c},\n\t{value: 0x8104, lo: 0x8d, hi: 0x8d},\n\t{value: 0x9900, lo: 0x97, hi: 0x97},\n\t{value: 0x8132, lo: 0xa6, hi: 0xac},\n\t{value: 0x8132, lo: 0xb0, hi: 0xb4},\n\t// Block 0x7c, offset 0x268\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8104, lo: 0x82, hi: 0x82},\n\t{value: 0x8102, lo: 0x86, hi: 0x86},\n\t// Block 0x7d, offset 0x26b\n\t{value: 0x6b5a, lo: 0x06},\n\t{value: 0x9900, lo: 0xb0, hi: 0xb0},\n\t{value: 0xa000, lo: 0xb9, hi: 0xb9},\n\t{value: 0x9900, lo: 0xba, hi: 0xba},\n\t{value: 0x2db0, lo: 0xbb, hi: 0xbb},\n\t{value: 0x2da6, lo: 0xbc, hi: 0xbd},\n\t{value: 0x2dba, lo: 0xbe, hi: 0xbe},\n\t// Block 0x7e, offset 0x272\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8104, lo: 0x82, hi: 0x82},\n\t{value: 0x8102, lo: 0x83, hi: 0x83},\n\t// Block 0x7f, offset 0x275\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x9900, lo: 0xaf, hi: 0xaf},\n\t{value: 0xa000, lo: 0xb8, hi: 0xb9},\n\t{value: 0x2dc4, lo: 0xba, hi: 0xba},\n\t{value: 0x2dce, lo: 0xbb, hi: 0xbb},\n\t{value: 0x8104, lo: 0xbf, hi: 0xbf},\n\t// Block 0x80, offset 0x27b\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8102, lo: 0x80, hi: 0x80},\n\t// Block 0x81, offset 0x27d\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8104, lo: 0xb6, hi: 0xb6},\n\t{value: 0x8102, lo: 0xb7, hi: 0xb7},\n\t// Block 0x82, offset 0x280\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0xab, hi: 0xab},\n\t// Block 0x83, offset 0x282\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8101, lo: 0xb0, hi: 0xb4},\n\t// Block 0x84, offset 0x284\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8132, lo: 0xb0, hi: 0xb6},\n\t// Block 0x85, offset 0x286\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8101, lo: 0x9e, hi: 0x9e},\n\t// Block 0x86, offset 0x288\n\t{value: 0x0000, lo: 0x0c},\n\t{value: 0x45cc, lo: 0x9e, hi: 0x9e},\n\t{value: 0x45d6, lo: 0x9f, hi: 0x9f},\n\t{value: 0x460a, lo: 0xa0, hi: 0xa0},\n\t{value: 0x4618, lo: 0xa1, hi: 0xa1},\n\t{value: 0x4626, lo: 0xa2, hi: 0xa2},\n\t{value: 0x4634, lo: 0xa3, hi: 0xa3},\n\t{value: 0x4642, lo: 0xa4, hi: 0xa4},\n\t{value: 0x812b, lo: 0xa5, hi: 0xa6},\n\t{value: 0x8101, lo: 0xa7, hi: 0xa9},\n\t{value: 0x8130, lo: 0xad, hi: 0xad},\n\t{value: 0x812b, lo: 0xae, hi: 0xb2},\n\t{value: 0x812d, lo: 0xbb, hi: 0xbf},\n\t// Block 0x87, offset 0x295\n\t{value: 0x0000, lo: 0x09},\n\t{value: 0x812d, lo: 0x80, hi: 0x82},\n\t{value: 0x8132, lo: 0x85, hi: 0x89},\n\t{value: 0x812d, lo: 0x8a, hi: 0x8b},\n\t{value: 0x8132, lo: 0xaa, hi: 0xad},\n\t{value: 0x45e0, lo: 0xbb, hi: 0xbb},\n\t{value: 0x45ea, lo: 0xbc, hi: 0xbc},\n\t{value: 0x4650, lo: 0xbd, hi: 0xbd},\n\t{value: 0x466c, lo: 0xbe, hi: 0xbe},\n\t{value: 0x465e, lo: 0xbf, hi: 0xbf},\n\t// Block 0x88, offset 0x29f\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x467a, lo: 0x80, hi: 0x80},\n\t// Block 0x89, offset 0x2a1\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8132, lo: 0x82, hi: 0x84},\n\t// Block 0x8a, offset 0x2a3\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x8132, lo: 0x80, hi: 0x86},\n\t{value: 0x8132, lo: 0x88, hi: 0x98},\n\t{value: 0x8132, lo: 0x9b, hi: 0xa1},\n\t{value: 0x8132, lo: 0xa3, hi: 0xa4},\n\t{value: 0x8132, lo: 0xa6, hi: 0xaa},\n\t// Block 0x8b, offset 0x2a9\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x812d, lo: 0x90, hi: 0x96},\n\t// Block 0x8c, offset 0x2ab\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8132, lo: 0x84, hi: 0x89},\n\t{value: 0x8102, lo: 0x8a, hi: 0x8a},\n\t// Block 0x8d, offset 0x2ae\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8100, lo: 0x93, hi: 0x93},\n}\n\n// lookup returns the trie value for the first UTF-8 encoding in s and\n// the width in bytes of this encoding. The size will be 0 if s does not\n// hold enough bytes to complete the encoding. len(s) must be greater than 0.\nfunc (t *nfkcTrie) lookup(s []byte) (v uint16, sz int) {\n\tc0 := s[0]\n\tswitch {\n\tcase c0 < 0x80: // is ASCII\n\t\treturn nfkcValues[c0], 1\n\tcase c0 < 0xC2:\n\t\treturn 0, 1 // Illegal UTF-8: not a starter, not ASCII.\n\tcase c0 < 0xE0: // 2-byte UTF-8\n\t\tif len(s) < 2 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := nfkcIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c1), 2\n\tcase c0 < 0xF0: // 3-byte UTF-8\n\t\tif len(s) < 3 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := nfkcIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to := uint32(i)<<6 + uint32(c1)\n\t\ti = nfkcIndex[o]\n\t\tc2 := s[2]\n\t\tif c2 < 0x80 || 0xC0 <= c2 {\n\t\t\treturn 0, 2 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c2), 3\n\tcase c0 < 0xF8: // 4-byte UTF-8\n\t\tif len(s) < 4 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := nfkcIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to := uint32(i)<<6 + uint32(c1)\n\t\ti = nfkcIndex[o]\n\t\tc2 := s[2]\n\t\tif c2 < 0x80 || 0xC0 <= c2 {\n\t\t\treturn 0, 2 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to = uint32(i)<<6 + uint32(c2)\n\t\ti = nfkcIndex[o]\n\t\tc3 := s[3]\n\t\tif c3 < 0x80 || 0xC0 <= c3 {\n\t\t\treturn 0, 3 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c3), 4\n\t}\n\t// Illegal rune\n\treturn 0, 1\n}\n\n// lookupUnsafe returns the trie value for the first UTF-8 encoding in s.\n// s must start with a full and valid UTF-8 encoded rune.\nfunc (t *nfkcTrie) lookupUnsafe(s []byte) uint16 {\n\tc0 := s[0]\n\tif c0 < 0x80 { // is ASCII\n\t\treturn nfkcValues[c0]\n\t}\n\ti := nfkcIndex[c0]\n\tif c0 < 0xE0 { // 2-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[1])\n\t}\n\ti = nfkcIndex[uint32(i)<<6+uint32(s[1])]\n\tif c0 < 0xF0 { // 3-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[2])\n\t}\n\ti = nfkcIndex[uint32(i)<<6+uint32(s[2])]\n\tif c0 < 0xF8 { // 4-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[3])\n\t}\n\treturn 0\n}\n\n// lookupString returns the trie value for the first UTF-8 encoding in s and\n// the width in bytes of this encoding. The size will be 0 if s does not\n// hold enough bytes to complete the encoding. len(s) must be greater than 0.\nfunc (t *nfkcTrie) lookupString(s string) (v uint16, sz int) {\n\tc0 := s[0]\n\tswitch {\n\tcase c0 < 0x80: // is ASCII\n\t\treturn nfkcValues[c0], 1\n\tcase c0 < 0xC2:\n\t\treturn 0, 1 // Illegal UTF-8: not a starter, not ASCII.\n\tcase c0 < 0xE0: // 2-byte UTF-8\n\t\tif len(s) < 2 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := nfkcIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c1), 2\n\tcase c0 < 0xF0: // 3-byte UTF-8\n\t\tif len(s) < 3 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := nfkcIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to := uint32(i)<<6 + uint32(c1)\n\t\ti = nfkcIndex[o]\n\t\tc2 := s[2]\n\t\tif c2 < 0x80 || 0xC0 <= c2 {\n\t\t\treturn 0, 2 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c2), 3\n\tcase c0 < 0xF8: // 4-byte UTF-8\n\t\tif len(s) < 4 {\n\t\t\treturn 0, 0\n\t\t}\n\t\ti := nfkcIndex[c0]\n\t\tc1 := s[1]\n\t\tif c1 < 0x80 || 0xC0 <= c1 {\n\t\t\treturn 0, 1 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to := uint32(i)<<6 + uint32(c1)\n\t\ti = nfkcIndex[o]\n\t\tc2 := s[2]\n\t\tif c2 < 0x80 || 0xC0 <= c2 {\n\t\t\treturn 0, 2 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\to = uint32(i)<<6 + uint32(c2)\n\t\ti = nfkcIndex[o]\n\t\tc3 := s[3]\n\t\tif c3 < 0x80 || 0xC0 <= c3 {\n\t\t\treturn 0, 3 // Illegal UTF-8: not a continuation byte.\n\t\t}\n\t\treturn t.lookupValue(uint32(i), c3), 4\n\t}\n\t// Illegal rune\n\treturn 0, 1\n}\n\n// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s.\n// s must start with a full and valid UTF-8 encoded rune.\nfunc (t *nfkcTrie) lookupStringUnsafe(s string) uint16 {\n\tc0 := s[0]\n\tif c0 < 0x80 { // is ASCII\n\t\treturn nfkcValues[c0]\n\t}\n\ti := nfkcIndex[c0]\n\tif c0 < 0xE0 { // 2-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[1])\n\t}\n\ti = nfkcIndex[uint32(i)<<6+uint32(s[1])]\n\tif c0 < 0xF0 { // 3-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[2])\n\t}\n\ti = nfkcIndex[uint32(i)<<6+uint32(s[2])]\n\tif c0 < 0xF8 { // 4-byte UTF-8\n\t\treturn t.lookupValue(uint32(i), s[3])\n\t}\n\treturn 0\n}\n\n// nfkcTrie. Total size: 16994 bytes (16.60 KiB). Checksum: c3ed54ee046f3c46.\ntype nfkcTrie struct{}\n\nfunc newNfkcTrie(i int) *nfkcTrie {\n\treturn &nfkcTrie{}\n}\n\n// lookupValue determines the type of block n and looks up the value for b.\nfunc (t *nfkcTrie) lookupValue(n uint32, b byte) uint16 {\n\tswitch {\n\tcase n < 90:\n\t\treturn uint16(nfkcValues[n<<6+uint32(b)])\n\tdefault:\n\t\tn -= 90\n\t\treturn uint16(nfkcSparse.lookup(n, b))\n\t}\n}\n\n// nfkcValues: 92 blocks, 5888 entries, 11776 bytes\n// The third block is the zero block.\nvar nfkcValues = [5888]uint16{\n\t// Block 0x0, offset 0x0\n\t0x3c: 0xa000, 0x3d: 0xa000, 0x3e: 0xa000,\n\t// Block 0x1, offset 0x40\n\t0x41: 0xa000, 0x42: 0xa000, 0x43: 0xa000, 0x44: 0xa000, 0x45: 0xa000,\n\t0x46: 0xa000, 0x47: 0xa000, 0x48: 0xa000, 0x49: 0xa000, 0x4a: 0xa000, 0x4b: 0xa000,\n\t0x4c: 0xa000, 0x4d: 0xa000, 0x4e: 0xa000, 0x4f: 0xa000, 0x50: 0xa000,\n\t0x52: 0xa000, 0x53: 0xa000, 0x54: 0xa000, 0x55: 0xa000, 0x56: 0xa000, 0x57: 0xa000,\n\t0x58: 0xa000, 0x59: 0xa000, 0x5a: 0xa000,\n\t0x61: 0xa000, 0x62: 0xa000, 0x63: 0xa000,\n\t0x64: 0xa000, 0x65: 0xa000, 0x66: 0xa000, 0x67: 0xa000, 0x68: 0xa000, 0x69: 0xa000,\n\t0x6a: 0xa000, 0x6b: 0xa000, 0x6c: 0xa000, 0x6d: 0xa000, 0x6e: 0xa000, 0x6f: 0xa000,\n\t0x70: 0xa000, 0x72: 0xa000, 0x73: 0xa000, 0x74: 0xa000, 0x75: 0xa000,\n\t0x76: 0xa000, 0x77: 0xa000, 0x78: 0xa000, 0x79: 0xa000, 0x7a: 0xa000,\n\t// Block 0x2, offset 0x80\n\t// Block 0x3, offset 0xc0\n\t0xc0: 0x2f6f, 0xc1: 0x2f74, 0xc2: 0x4688, 0xc3: 0x2f79, 0xc4: 0x4697, 0xc5: 0x469c,\n\t0xc6: 0xa000, 0xc7: 0x46a6, 0xc8: 0x2fe2, 0xc9: 0x2fe7, 0xca: 0x46ab, 0xcb: 0x2ffb,\n\t0xcc: 0x306e, 0xcd: 0x3073, 0xce: 0x3078, 0xcf: 0x46bf, 0xd1: 0x3104,\n\t0xd2: 0x3127, 0xd3: 0x312c, 0xd4: 0x46c9, 0xd5: 0x46ce, 0xd6: 0x46dd,\n\t0xd8: 0xa000, 0xd9: 0x31b3, 0xda: 0x31b8, 0xdb: 0x31bd, 0xdc: 0x470f, 0xdd: 0x3235,\n\t0xe0: 0x327b, 0xe1: 0x3280, 0xe2: 0x4719, 0xe3: 0x3285,\n\t0xe4: 0x4728, 0xe5: 0x472d, 0xe6: 0xa000, 0xe7: 0x4737, 0xe8: 0x32ee, 0xe9: 0x32f3,\n\t0xea: 0x473c, 0xeb: 0x3307, 0xec: 0x337f, 0xed: 0x3384, 0xee: 0x3389, 0xef: 0x4750,\n\t0xf1: 0x3415, 0xf2: 0x3438, 0xf3: 0x343d, 0xf4: 0x475a, 0xf5: 0x475f,\n\t0xf6: 0x476e, 0xf8: 0xa000, 0xf9: 0x34c9, 0xfa: 0x34ce, 0xfb: 0x34d3,\n\t0xfc: 0x47a0, 0xfd: 0x3550, 0xff: 0x3569,\n\t// Block 0x4, offset 0x100\n\t0x100: 0x2f7e, 0x101: 0x328a, 0x102: 0x468d, 0x103: 0x471e, 0x104: 0x2f9c, 0x105: 0x32a8,\n\t0x106: 0x2fb0, 0x107: 0x32bc, 0x108: 0x2fb5, 0x109: 0x32c1, 0x10a: 0x2fba, 0x10b: 0x32c6,\n\t0x10c: 0x2fbf, 0x10d: 0x32cb, 0x10e: 0x2fc9, 0x10f: 0x32d5,\n\t0x112: 0x46b0, 0x113: 0x4741, 0x114: 0x2ff1, 0x115: 0x32fd, 0x116: 0x2ff6, 0x117: 0x3302,\n\t0x118: 0x3014, 0x119: 0x3320, 0x11a: 0x3005, 0x11b: 0x3311, 0x11c: 0x302d, 0x11d: 0x3339,\n\t0x11e: 0x3037, 0x11f: 0x3343, 0x120: 0x303c, 0x121: 0x3348, 0x122: 0x3046, 0x123: 0x3352,\n\t0x124: 0x304b, 0x125: 0x3357, 0x128: 0x307d, 0x129: 0x338e,\n\t0x12a: 0x3082, 0x12b: 0x3393, 0x12c: 0x3087, 0x12d: 0x3398, 0x12e: 0x30aa, 0x12f: 0x33b6,\n\t0x130: 0x308c, 0x132: 0x195d, 0x133: 0x19e7, 0x134: 0x30b4, 0x135: 0x33c0,\n\t0x136: 0x30c8, 0x137: 0x33d9, 0x139: 0x30d2, 0x13a: 0x33e3, 0x13b: 0x30dc,\n\t0x13c: 0x33ed, 0x13d: 0x30d7, 0x13e: 0x33e8, 0x13f: 0x1bac,\n\t// Block 0x5, offset 0x140\n\t0x140: 0x1c34, 0x143: 0x30ff, 0x144: 0x3410, 0x145: 0x3118,\n\t0x146: 0x3429, 0x147: 0x310e, 0x148: 0x341f, 0x149: 0x1c5c,\n\t0x14c: 0x46d3, 0x14d: 0x4764, 0x14e: 0x3131, 0x14f: 0x3442, 0x150: 0x313b, 0x151: 0x344c,\n\t0x154: 0x3159, 0x155: 0x346a, 0x156: 0x3172, 0x157: 0x3483,\n\t0x158: 0x3163, 0x159: 0x3474, 0x15a: 0x46f6, 0x15b: 0x4787, 0x15c: 0x317c, 0x15d: 0x348d,\n\t0x15e: 0x318b, 0x15f: 0x349c, 0x160: 0x46fb, 0x161: 0x478c, 0x162: 0x31a4, 0x163: 0x34ba,\n\t0x164: 0x3195, 0x165: 0x34ab, 0x168: 0x4705, 0x169: 0x4796,\n\t0x16a: 0x470a, 0x16b: 0x479b, 0x16c: 0x31c2, 0x16d: 0x34d8, 0x16e: 0x31cc, 0x16f: 0x34e2,\n\t0x170: 0x31d1, 0x171: 0x34e7, 0x172: 0x31ef, 0x173: 0x3505, 0x174: 0x3212, 0x175: 0x3528,\n\t0x176: 0x323a, 0x177: 0x3555, 0x178: 0x324e, 0x179: 0x325d, 0x17a: 0x357d, 0x17b: 0x3267,\n\t0x17c: 0x3587, 0x17d: 0x326c, 0x17e: 0x358c, 0x17f: 0x00a7,\n\t// Block 0x6, offset 0x180\n\t0x184: 0x2dee, 0x185: 0x2df4,\n\t0x186: 0x2dfa, 0x187: 0x1972, 0x188: 0x1975, 0x189: 0x1a08, 0x18a: 0x1987, 0x18b: 0x198a,\n\t0x18c: 0x1a3e, 0x18d: 0x2f88, 0x18e: 0x3294, 0x18f: 0x3096, 0x190: 0x33a2, 0x191: 0x3140,\n\t0x192: 0x3451, 0x193: 0x31d6, 0x194: 0x34ec, 0x195: 0x39cf, 0x196: 0x3b5e, 0x197: 0x39c8,\n\t0x198: 0x3b57, 0x199: 0x39d6, 0x19a: 0x3b65, 0x19b: 0x39c1, 0x19c: 0x3b50,\n\t0x19e: 0x38b0, 0x19f: 0x3a3f, 0x1a0: 0x38a9, 0x1a1: 0x3a38, 0x1a2: 0x35b3, 0x1a3: 0x35c5,\n\t0x1a6: 0x3041, 0x1a7: 0x334d, 0x1a8: 0x30be, 0x1a9: 0x33cf,\n\t0x1aa: 0x46ec, 0x1ab: 0x477d, 0x1ac: 0x3990, 0x1ad: 0x3b1f, 0x1ae: 0x35d7, 0x1af: 0x35dd,\n\t0x1b0: 0x33c5, 0x1b1: 0x1942, 0x1b2: 0x1945, 0x1b3: 0x19cf, 0x1b4: 0x3028, 0x1b5: 0x3334,\n\t0x1b8: 0x30fa, 0x1b9: 0x340b, 0x1ba: 0x38b7, 0x1bb: 0x3a46,\n\t0x1bc: 0x35ad, 0x1bd: 0x35bf, 0x1be: 0x35b9, 0x1bf: 0x35cb,\n\t// Block 0x7, offset 0x1c0\n\t0x1c0: 0x2f8d, 0x1c1: 0x3299, 0x1c2: 0x2f92, 0x1c3: 0x329e, 0x1c4: 0x300a, 0x1c5: 0x3316,\n\t0x1c6: 0x300f, 0x1c7: 0x331b, 0x1c8: 0x309b, 0x1c9: 0x33a7, 0x1ca: 0x30a0, 0x1cb: 0x33ac,\n\t0x1cc: 0x3145, 0x1cd: 0x3456, 0x1ce: 0x314a, 0x1cf: 0x345b, 0x1d0: 0x3168, 0x1d1: 0x3479,\n\t0x1d2: 0x316d, 0x1d3: 0x347e, 0x1d4: 0x31db, 0x1d5: 0x34f1, 0x1d6: 0x31e0, 0x1d7: 0x34f6,\n\t0x1d8: 0x3186, 0x1d9: 0x3497, 0x1da: 0x319f, 0x1db: 0x34b5,\n\t0x1de: 0x305a, 0x1df: 0x3366,\n\t0x1e6: 0x4692, 0x1e7: 0x4723, 0x1e8: 0x46ba, 0x1e9: 0x474b,\n\t0x1ea: 0x395f, 0x1eb: 0x3aee, 0x1ec: 0x393c, 0x1ed: 0x3acb, 0x1ee: 0x46d8, 0x1ef: 0x4769,\n\t0x1f0: 0x3958, 0x1f1: 0x3ae7, 0x1f2: 0x3244, 0x1f3: 0x355f,\n\t// Block 0x8, offset 0x200\n\t0x200: 0x9932, 0x201: 0x9932, 0x202: 0x9932, 0x203: 0x9932, 0x204: 0x9932, 0x205: 0x8132,\n\t0x206: 0x9932, 0x207: 0x9932, 0x208: 0x9932, 0x209: 0x9932, 0x20a: 0x9932, 0x20b: 0x9932,\n\t0x20c: 0x9932, 0x20d: 0x8132, 0x20e: 0x8132, 0x20f: 0x9932, 0x210: 0x8132, 0x211: 0x9932,\n\t0x212: 0x8132, 0x213: 0x9932, 0x214: 0x9932, 0x215: 0x8133, 0x216: 0x812d, 0x217: 0x812d,\n\t0x218: 0x812d, 0x219: 0x812d, 0x21a: 0x8133, 0x21b: 0x992b, 0x21c: 0x812d, 0x21d: 0x812d,\n\t0x21e: 0x812d, 0x21f: 0x812d, 0x220: 0x812d, 0x221: 0x8129, 0x222: 0x8129, 0x223: 0x992d,\n\t0x224: 0x992d, 0x225: 0x992d, 0x226: 0x992d, 0x227: 0x9929, 0x228: 0x9929, 0x229: 0x812d,\n\t0x22a: 0x812d, 0x22b: 0x812d, 0x22c: 0x812d, 0x22d: 0x992d, 0x22e: 0x992d, 0x22f: 0x812d,\n\t0x230: 0x992d, 0x231: 0x992d, 0x232: 0x812d, 0x233: 0x812d, 0x234: 0x8101, 0x235: 0x8101,\n\t0x236: 0x8101, 0x237: 0x8101, 0x238: 0x9901, 0x239: 0x812d, 0x23a: 0x812d, 0x23b: 0x812d,\n\t0x23c: 0x812d, 0x23d: 0x8132, 0x23e: 0x8132, 0x23f: 0x8132,\n\t// Block 0x9, offset 0x240\n\t0x240: 0x49ae, 0x241: 0x49b3, 0x242: 0x9932, 0x243: 0x49b8, 0x244: 0x4a71, 0x245: 0x9936,\n\t0x246: 0x8132, 0x247: 0x812d, 0x248: 0x812d, 0x249: 0x812d, 0x24a: 0x8132, 0x24b: 0x8132,\n\t0x24c: 0x8132, 0x24d: 0x812d, 0x24e: 0x812d, 0x250: 0x8132, 0x251: 0x8132,\n\t0x252: 0x8132, 0x253: 0x812d, 0x254: 0x812d, 0x255: 0x812d, 0x256: 0x812d, 0x257: 0x8132,\n\t0x258: 0x8133, 0x259: 0x812d, 0x25a: 0x812d, 0x25b: 0x8132, 0x25c: 0x8134, 0x25d: 0x8135,\n\t0x25e: 0x8135, 0x25f: 0x8134, 0x260: 0x8135, 0x261: 0x8135, 0x262: 0x8134, 0x263: 0x8132,\n\t0x264: 0x8132, 0x265: 0x8132, 0x266: 0x8132, 0x267: 0x8132, 0x268: 0x8132, 0x269: 0x8132,\n\t0x26a: 0x8132, 0x26b: 0x8132, 0x26c: 0x8132, 0x26d: 0x8132, 0x26e: 0x8132, 0x26f: 0x8132,\n\t0x274: 0x0170,\n\t0x27a: 0x42a5,\n\t0x27e: 0x0037,\n\t// Block 0xa, offset 0x280\n\t0x284: 0x425a, 0x285: 0x447b,\n\t0x286: 0x35e9, 0x287: 0x00ce, 0x288: 0x3607, 0x289: 0x3613, 0x28a: 0x3625,\n\t0x28c: 0x3643, 0x28e: 0x3655, 0x28f: 0x3673, 0x290: 0x3e08, 0x291: 0xa000,\n\t0x295: 0xa000, 0x297: 0xa000,\n\t0x299: 0xa000,\n\t0x29f: 0xa000, 0x2a1: 0xa000,\n\t0x2a5: 0xa000, 0x2a9: 0xa000,\n\t0x2aa: 0x3637, 0x2ab: 0x3667, 0x2ac: 0x47fe, 0x2ad: 0x3697, 0x2ae: 0x4828, 0x2af: 0x36a9,\n\t0x2b0: 0x3e70, 0x2b1: 0xa000, 0x2b5: 0xa000,\n\t0x2b7: 0xa000, 0x2b9: 0xa000,\n\t0x2bf: 0xa000,\n\t// Block 0xb, offset 0x2c0\n\t0x2c1: 0xa000, 0x2c5: 0xa000,\n\t0x2c9: 0xa000, 0x2ca: 0x4840, 0x2cb: 0x485e,\n\t0x2cc: 0x36c7, 0x2cd: 0x36df, 0x2ce: 0x4876, 0x2d0: 0x01be, 0x2d1: 0x01d0,\n\t0x2d2: 0x01ac, 0x2d3: 0x430c, 0x2d4: 0x4312, 0x2d5: 0x01fa, 0x2d6: 0x01e8,\n\t0x2f0: 0x01d6, 0x2f1: 0x01eb, 0x2f2: 0x01ee, 0x2f4: 0x0188, 0x2f5: 0x01c7,\n\t0x2f9: 0x01a6,\n\t// Block 0xc, offset 0x300\n\t0x300: 0x3721, 0x301: 0x372d, 0x303: 0x371b,\n\t0x306: 0xa000, 0x307: 0x3709,\n\t0x30c: 0x375d, 0x30d: 0x3745, 0x30e: 0x376f, 0x310: 0xa000,\n\t0x313: 0xa000, 0x315: 0xa000, 0x316: 0xa000, 0x317: 0xa000,\n\t0x318: 0xa000, 0x319: 0x3751, 0x31a: 0xa000,\n\t0x31e: 0xa000, 0x323: 0xa000,\n\t0x327: 0xa000,\n\t0x32b: 0xa000, 0x32d: 0xa000,\n\t0x330: 0xa000, 0x333: 0xa000, 0x335: 0xa000,\n\t0x336: 0xa000, 0x337: 0xa000, 0x338: 0xa000, 0x339: 0x37d5, 0x33a: 0xa000,\n\t0x33e: 0xa000,\n\t// Block 0xd, offset 0x340\n\t0x341: 0x3733, 0x342: 0x37b7,\n\t0x350: 0x370f, 0x351: 0x3793,\n\t0x352: 0x3715, 0x353: 0x3799, 0x356: 0x3727, 0x357: 0x37ab,\n\t0x358: 0xa000, 0x359: 0xa000, 0x35a: 0x3829, 0x35b: 0x382f, 0x35c: 0x3739, 0x35d: 0x37bd,\n\t0x35e: 0x373f, 0x35f: 0x37c3, 0x362: 0x374b, 0x363: 0x37cf,\n\t0x364: 0x3757, 0x365: 0x37db, 0x366: 0x3763, 0x367: 0x37e7, 0x368: 0xa000, 0x369: 0xa000,\n\t0x36a: 0x3835, 0x36b: 0x383b, 0x36c: 0x378d, 0x36d: 0x3811, 0x36e: 0x3769, 0x36f: 0x37ed,\n\t0x370: 0x3775, 0x371: 0x37f9, 0x372: 0x377b, 0x373: 0x37ff, 0x374: 0x3781, 0x375: 0x3805,\n\t0x378: 0x3787, 0x379: 0x380b,\n\t// Block 0xe, offset 0x380\n\t0x387: 0x1d61,\n\t0x391: 0x812d,\n\t0x392: 0x8132, 0x393: 0x8132, 0x394: 0x8132, 0x395: 0x8132, 0x396: 0x812d, 0x397: 0x8132,\n\t0x398: 0x8132, 0x399: 0x8132, 0x39a: 0x812e, 0x39b: 0x812d, 0x39c: 0x8132, 0x39d: 0x8132,\n\t0x39e: 0x8132, 0x39f: 0x8132, 0x3a0: 0x8132, 0x3a1: 0x8132, 0x3a2: 0x812d, 0x3a3: 0x812d,\n\t0x3a4: 0x812d, 0x3a5: 0x812d, 0x3a6: 0x812d, 0x3a7: 0x812d, 0x3a8: 0x8132, 0x3a9: 0x8132,\n\t0x3aa: 0x812d, 0x3ab: 0x8132, 0x3ac: 0x8132, 0x3ad: 0x812e, 0x3ae: 0x8131, 0x3af: 0x8132,\n\t0x3b0: 0x8105, 0x3b1: 0x8106, 0x3b2: 0x8107, 0x3b3: 0x8108, 0x3b4: 0x8109, 0x3b5: 0x810a,\n\t0x3b6: 0x810b, 0x3b7: 0x810c, 0x3b8: 0x810d, 0x3b9: 0x810e, 0x3ba: 0x810e, 0x3bb: 0x810f,\n\t0x3bc: 0x8110, 0x3bd: 0x8111, 0x3bf: 0x8112,\n\t// Block 0xf, offset 0x3c0\n\t0x3c8: 0xa000, 0x3ca: 0xa000, 0x3cb: 0x8116,\n\t0x3cc: 0x8117, 0x3cd: 0x8118, 0x3ce: 0x8119, 0x3cf: 0x811a, 0x3d0: 0x811b, 0x3d1: 0x811c,\n\t0x3d2: 0x811d, 0x3d3: 0x9932, 0x3d4: 0x9932, 0x3d5: 0x992d, 0x3d6: 0x812d, 0x3d7: 0x8132,\n\t0x3d8: 0x8132, 0x3d9: 0x8132, 0x3da: 0x8132, 0x3db: 0x8132, 0x3dc: 0x812d, 0x3dd: 0x8132,\n\t0x3de: 0x8132, 0x3df: 0x812d,\n\t0x3f0: 0x811e, 0x3f5: 0x1d84,\n\t0x3f6: 0x2013, 0x3f7: 0x204f, 0x3f8: 0x204a,\n\t// Block 0x10, offset 0x400\n\t0x405: 0xa000,\n\t0x406: 0x2d26, 0x407: 0xa000, 0x408: 0x2d2e, 0x409: 0xa000, 0x40a: 0x2d36, 0x40b: 0xa000,\n\t0x40c: 0x2d3e, 0x40d: 0xa000, 0x40e: 0x2d46, 0x411: 0xa000,\n\t0x412: 0x2d4e,\n\t0x434: 0x8102, 0x435: 0x9900,\n\t0x43a: 0xa000, 0x43b: 0x2d56,\n\t0x43c: 0xa000, 0x43d: 0x2d5e, 0x43e: 0xa000, 0x43f: 0xa000,\n\t// Block 0x11, offset 0x440\n\t0x440: 0x0069, 0x441: 0x006b, 0x442: 0x006f, 0x443: 0x0083, 0x444: 0x00f5, 0x445: 0x00f8,\n\t0x446: 0x0413, 0x447: 0x0085, 0x448: 0x0089, 0x449: 0x008b, 0x44a: 0x0104, 0x44b: 0x0107,\n\t0x44c: 0x010a, 0x44d: 0x008f, 0x44f: 0x0097, 0x450: 0x009b, 0x451: 0x00e0,\n\t0x452: 0x009f, 0x453: 0x00fe, 0x454: 0x0417, 0x455: 0x041b, 0x456: 0x00a1, 0x457: 0x00a9,\n\t0x458: 0x00ab, 0x459: 0x0423, 0x45a: 0x012b, 0x45b: 0x00ad, 0x45c: 0x0427, 0x45d: 0x01be,\n\t0x45e: 0x01c1, 0x45f: 0x01c4, 0x460: 0x01fa, 0x461: 0x01fd, 0x462: 0x0093, 0x463: 0x00a5,\n\t0x464: 0x00ab, 0x465: 0x00ad, 0x466: 0x01be, 0x467: 0x01c1, 0x468: 0x01eb, 0x469: 0x01fa,\n\t0x46a: 0x01fd,\n\t0x478: 0x020c,\n\t// Block 0x12, offset 0x480\n\t0x49b: 0x00fb, 0x49c: 0x0087, 0x49d: 0x0101,\n\t0x49e: 0x00d4, 0x49f: 0x010a, 0x4a0: 0x008d, 0x4a1: 0x010d, 0x4a2: 0x0110, 0x4a3: 0x0116,\n\t0x4a4: 0x011c, 0x4a5: 0x011f, 0x4a6: 0x0122, 0x4a7: 0x042b, 0x4a8: 0x016a, 0x4a9: 0x0128,\n\t0x4aa: 0x042f, 0x4ab: 0x016d, 0x4ac: 0x0131, 0x4ad: 0x012e, 0x4ae: 0x0134, 0x4af: 0x0137,\n\t0x4b0: 0x013a, 0x4b1: 0x013d, 0x4b2: 0x0140, 0x4b3: 0x014c, 0x4b4: 0x014f, 0x4b5: 0x00ec,\n\t0x4b6: 0x0152, 0x4b7: 0x0155, 0x4b8: 0x041f, 0x4b9: 0x0158, 0x4ba: 0x015b, 0x4bb: 0x00b5,\n\t0x4bc: 0x015e, 0x4bd: 0x0161, 0x4be: 0x0164, 0x4bf: 0x01d0,\n\t// Block 0x13, offset 0x4c0\n\t0x4c0: 0x2f97, 0x4c1: 0x32a3, 0x4c2: 0x2fa1, 0x4c3: 0x32ad, 0x4c4: 0x2fa6, 0x4c5: 0x32b2,\n\t0x4c6: 0x2fab, 0x4c7: 0x32b7, 0x4c8: 0x38cc, 0x4c9: 0x3a5b, 0x4ca: 0x2fc4, 0x4cb: 0x32d0,\n\t0x4cc: 0x2fce, 0x4cd: 0x32da, 0x4ce: 0x2fdd, 0x4cf: 0x32e9, 0x4d0: 0x2fd3, 0x4d1: 0x32df,\n\t0x4d2: 0x2fd8, 0x4d3: 0x32e4, 0x4d4: 0x38ef, 0x4d5: 0x3a7e, 0x4d6: 0x38f6, 0x4d7: 0x3a85,\n\t0x4d8: 0x3019, 0x4d9: 0x3325, 0x4da: 0x301e, 0x4db: 0x332a, 0x4dc: 0x3904, 0x4dd: 0x3a93,\n\t0x4de: 0x3023, 0x4df: 0x332f, 0x4e0: 0x3032, 0x4e1: 0x333e, 0x4e2: 0x3050, 0x4e3: 0x335c,\n\t0x4e4: 0x305f, 0x4e5: 0x336b, 0x4e6: 0x3055, 0x4e7: 0x3361, 0x4e8: 0x3064, 0x4e9: 0x3370,\n\t0x4ea: 0x3069, 0x4eb: 0x3375, 0x4ec: 0x30af, 0x4ed: 0x33bb, 0x4ee: 0x390b, 0x4ef: 0x3a9a,\n\t0x4f0: 0x30b9, 0x4f1: 0x33ca, 0x4f2: 0x30c3, 0x4f3: 0x33d4, 0x4f4: 0x30cd, 0x4f5: 0x33de,\n\t0x4f6: 0x46c4, 0x4f7: 0x4755, 0x4f8: 0x3912, 0x4f9: 0x3aa1, 0x4fa: 0x30e6, 0x4fb: 0x33f7,\n\t0x4fc: 0x30e1, 0x4fd: 0x33f2, 0x4fe: 0x30eb, 0x4ff: 0x33fc,\n\t// Block 0x14, offset 0x500\n\t0x500: 0x30f0, 0x501: 0x3401, 0x502: 0x30f5, 0x503: 0x3406, 0x504: 0x3109, 0x505: 0x341a,\n\t0x506: 0x3113, 0x507: 0x3424, 0x508: 0x3122, 0x509: 0x3433, 0x50a: 0x311d, 0x50b: 0x342e,\n\t0x50c: 0x3935, 0x50d: 0x3ac4, 0x50e: 0x3943, 0x50f: 0x3ad2, 0x510: 0x394a, 0x511: 0x3ad9,\n\t0x512: 0x3951, 0x513: 0x3ae0, 0x514: 0x314f, 0x515: 0x3460, 0x516: 0x3154, 0x517: 0x3465,\n\t0x518: 0x315e, 0x519: 0x346f, 0x51a: 0x46f1, 0x51b: 0x4782, 0x51c: 0x3997, 0x51d: 0x3b26,\n\t0x51e: 0x3177, 0x51f: 0x3488, 0x520: 0x3181, 0x521: 0x3492, 0x522: 0x4700, 0x523: 0x4791,\n\t0x524: 0x399e, 0x525: 0x3b2d, 0x526: 0x39a5, 0x527: 0x3b34, 0x528: 0x39ac, 0x529: 0x3b3b,\n\t0x52a: 0x3190, 0x52b: 0x34a1, 0x52c: 0x319a, 0x52d: 0x34b0, 0x52e: 0x31ae, 0x52f: 0x34c4,\n\t0x530: 0x31a9, 0x531: 0x34bf, 0x532: 0x31ea, 0x533: 0x3500, 0x534: 0x31f9, 0x535: 0x350f,\n\t0x536: 0x31f4, 0x537: 0x350a, 0x538: 0x39b3, 0x539: 0x3b42, 0x53a: 0x39ba, 0x53b: 0x3b49,\n\t0x53c: 0x31fe, 0x53d: 0x3514, 0x53e: 0x3203, 0x53f: 0x3519,\n\t// Block 0x15, offset 0x540\n\t0x540: 0x3208, 0x541: 0x351e, 0x542: 0x320d, 0x543: 0x3523, 0x544: 0x321c, 0x545: 0x3532,\n\t0x546: 0x3217, 0x547: 0x352d, 0x548: 0x3221, 0x549: 0x353c, 0x54a: 0x3226, 0x54b: 0x3541,\n\t0x54c: 0x322b, 0x54d: 0x3546, 0x54e: 0x3249, 0x54f: 0x3564, 0x550: 0x3262, 0x551: 0x3582,\n\t0x552: 0x3271, 0x553: 0x3591, 0x554: 0x3276, 0x555: 0x3596, 0x556: 0x337a, 0x557: 0x34a6,\n\t0x558: 0x3537, 0x559: 0x3573, 0x55a: 0x1be0, 0x55b: 0x42d7,\n\t0x560: 0x46a1, 0x561: 0x4732, 0x562: 0x2f83, 0x563: 0x328f,\n\t0x564: 0x3878, 0x565: 0x3a07, 0x566: 0x3871, 0x567: 0x3a00, 0x568: 0x3886, 0x569: 0x3a15,\n\t0x56a: 0x387f, 0x56b: 0x3a0e, 0x56c: 0x38be, 0x56d: 0x3a4d, 0x56e: 0x3894, 0x56f: 0x3a23,\n\t0x570: 0x388d, 0x571: 0x3a1c, 0x572: 0x38a2, 0x573: 0x3a31, 0x574: 0x389b, 0x575: 0x3a2a,\n\t0x576: 0x38c5, 0x577: 0x3a54, 0x578: 0x46b5, 0x579: 0x4746, 0x57a: 0x3000, 0x57b: 0x330c,\n\t0x57c: 0x2fec, 0x57d: 0x32f8, 0x57e: 0x38da, 0x57f: 0x3a69,\n\t// Block 0x16, offset 0x580\n\t0x580: 0x38d3, 0x581: 0x3a62, 0x582: 0x38e8, 0x583: 0x3a77, 0x584: 0x38e1, 0x585: 0x3a70,\n\t0x586: 0x38fd, 0x587: 0x3a8c, 0x588: 0x3091, 0x589: 0x339d, 0x58a: 0x30a5, 0x58b: 0x33b1,\n\t0x58c: 0x46e7, 0x58d: 0x4778, 0x58e: 0x3136, 0x58f: 0x3447, 0x590: 0x3920, 0x591: 0x3aaf,\n\t0x592: 0x3919, 0x593: 0x3aa8, 0x594: 0x392e, 0x595: 0x3abd, 0x596: 0x3927, 0x597: 0x3ab6,\n\t0x598: 0x3989, 0x599: 0x3b18, 0x59a: 0x396d, 0x59b: 0x3afc, 0x59c: 0x3966, 0x59d: 0x3af5,\n\t0x59e: 0x397b, 0x59f: 0x3b0a, 0x5a0: 0x3974, 0x5a1: 0x3b03, 0x5a2: 0x3982, 0x5a3: 0x3b11,\n\t0x5a4: 0x31e5, 0x5a5: 0x34fb, 0x5a6: 0x31c7, 0x5a7: 0x34dd, 0x5a8: 0x39e4, 0x5a9: 0x3b73,\n\t0x5aa: 0x39dd, 0x5ab: 0x3b6c, 0x5ac: 0x39f2, 0x5ad: 0x3b81, 0x5ae: 0x39eb, 0x5af: 0x3b7a,\n\t0x5b0: 0x39f9, 0x5b1: 0x3b88, 0x5b2: 0x3230, 0x5b3: 0x354b, 0x5b4: 0x3258, 0x5b5: 0x3578,\n\t0x5b6: 0x3253, 0x5b7: 0x356e, 0x5b8: 0x323f, 0x5b9: 0x355a,\n\t// Block 0x17, offset 0x5c0\n\t0x5c0: 0x4804, 0x5c1: 0x480a, 0x5c2: 0x491e, 0x5c3: 0x4936, 0x5c4: 0x4926, 0x5c5: 0x493e,\n\t0x5c6: 0x492e, 0x5c7: 0x4946, 0x5c8: 0x47aa, 0x5c9: 0x47b0, 0x5ca: 0x488e, 0x5cb: 0x48a6,\n\t0x5cc: 0x4896, 0x5cd: 0x48ae, 0x5ce: 0x489e, 0x5cf: 0x48b6, 0x5d0: 0x4816, 0x5d1: 0x481c,\n\t0x5d2: 0x3db8, 0x5d3: 0x3dc8, 0x5d4: 0x3dc0, 0x5d5: 0x3dd0,\n\t0x5d8: 0x47b6, 0x5d9: 0x47bc, 0x5da: 0x3ce8, 0x5db: 0x3cf8, 0x5dc: 0x3cf0, 0x5dd: 0x3d00,\n\t0x5e0: 0x482e, 0x5e1: 0x4834, 0x5e2: 0x494e, 0x5e3: 0x4966,\n\t0x5e4: 0x4956, 0x5e5: 0x496e, 0x5e6: 0x495e, 0x5e7: 0x4976, 0x5e8: 0x47c2, 0x5e9: 0x47c8,\n\t0x5ea: 0x48be, 0x5eb: 0x48d6, 0x5ec: 0x48c6, 0x5ed: 0x48de, 0x5ee: 0x48ce, 0x5ef: 0x48e6,\n\t0x5f0: 0x4846, 0x5f1: 0x484c, 0x5f2: 0x3e18, 0x5f3: 0x3e30, 0x5f4: 0x3e20, 0x5f5: 0x3e38,\n\t0x5f6: 0x3e28, 0x5f7: 0x3e40, 0x5f8: 0x47ce, 0x5f9: 0x47d4, 0x5fa: 0x3d18, 0x5fb: 0x3d30,\n\t0x5fc: 0x3d20, 0x5fd: 0x3d38, 0x5fe: 0x3d28, 0x5ff: 0x3d40,\n\t// Block 0x18, offset 0x600\n\t0x600: 0x4852, 0x601: 0x4858, 0x602: 0x3e48, 0x603: 0x3e58, 0x604: 0x3e50, 0x605: 0x3e60,\n\t0x608: 0x47da, 0x609: 0x47e0, 0x60a: 0x3d48, 0x60b: 0x3d58,\n\t0x60c: 0x3d50, 0x60d: 0x3d60, 0x610: 0x4864, 0x611: 0x486a,\n\t0x612: 0x3e80, 0x613: 0x3e98, 0x614: 0x3e88, 0x615: 0x3ea0, 0x616: 0x3e90, 0x617: 0x3ea8,\n\t0x619: 0x47e6, 0x61b: 0x3d68, 0x61d: 0x3d70,\n\t0x61f: 0x3d78, 0x620: 0x487c, 0x621: 0x4882, 0x622: 0x497e, 0x623: 0x4996,\n\t0x624: 0x4986, 0x625: 0x499e, 0x626: 0x498e, 0x627: 0x49a6, 0x628: 0x47ec, 0x629: 0x47f2,\n\t0x62a: 0x48ee, 0x62b: 0x4906, 0x62c: 0x48f6, 0x62d: 0x490e, 0x62e: 0x48fe, 0x62f: 0x4916,\n\t0x630: 0x47f8, 0x631: 0x431e, 0x632: 0x3691, 0x633: 0x4324, 0x634: 0x4822, 0x635: 0x432a,\n\t0x636: 0x36a3, 0x637: 0x4330, 0x638: 0x36c1, 0x639: 0x4336, 0x63a: 0x36d9, 0x63b: 0x433c,\n\t0x63c: 0x4870, 0x63d: 0x4342,\n\t// Block 0x19, offset 0x640\n\t0x640: 0x3da0, 0x641: 0x3da8, 0x642: 0x4184, 0x643: 0x41a2, 0x644: 0x418e, 0x645: 0x41ac,\n\t0x646: 0x4198, 0x647: 0x41b6, 0x648: 0x3cd8, 0x649: 0x3ce0, 0x64a: 0x40d0, 0x64b: 0x40ee,\n\t0x64c: 0x40da, 0x64d: 0x40f8, 0x64e: 0x40e4, 0x64f: 0x4102, 0x650: 0x3de8, 0x651: 0x3df0,\n\t0x652: 0x41c0, 0x653: 0x41de, 0x654: 0x41ca, 0x655: 0x41e8, 0x656: 0x41d4, 0x657: 0x41f2,\n\t0x658: 0x3d08, 0x659: 0x3d10, 0x65a: 0x410c, 0x65b: 0x412a, 0x65c: 0x4116, 0x65d: 0x4134,\n\t0x65e: 0x4120, 0x65f: 0x413e, 0x660: 0x3ec0, 0x661: 0x3ec8, 0x662: 0x41fc, 0x663: 0x421a,\n\t0x664: 0x4206, 0x665: 0x4224, 0x666: 0x4210, 0x667: 0x422e, 0x668: 0x3d80, 0x669: 0x3d88,\n\t0x66a: 0x4148, 0x66b: 0x4166, 0x66c: 0x4152, 0x66d: 0x4170, 0x66e: 0x415c, 0x66f: 0x417a,\n\t0x670: 0x3685, 0x671: 0x367f, 0x672: 0x3d90, 0x673: 0x368b, 0x674: 0x3d98,\n\t0x676: 0x4810, 0x677: 0x3db0, 0x678: 0x35f5, 0x679: 0x35ef, 0x67a: 0x35e3, 0x67b: 0x42ee,\n\t0x67c: 0x35fb, 0x67d: 0x4287, 0x67e: 0x01d3, 0x67f: 0x4287,\n\t// Block 0x1a, offset 0x680\n\t0x680: 0x42a0, 0x681: 0x4482, 0x682: 0x3dd8, 0x683: 0x369d, 0x684: 0x3de0,\n\t0x686: 0x483a, 0x687: 0x3df8, 0x688: 0x3601, 0x689: 0x42f4, 0x68a: 0x360d, 0x68b: 0x42fa,\n\t0x68c: 0x3619, 0x68d: 0x4489, 0x68e: 0x4490, 0x68f: 0x4497, 0x690: 0x36b5, 0x691: 0x36af,\n\t0x692: 0x3e00, 0x693: 0x44e4, 0x696: 0x36bb, 0x697: 0x3e10,\n\t0x698: 0x3631, 0x699: 0x362b, 0x69a: 0x361f, 0x69b: 0x4300, 0x69d: 0x449e,\n\t0x69e: 0x44a5, 0x69f: 0x44ac, 0x6a0: 0x36eb, 0x6a1: 0x36e5, 0x6a2: 0x3e68, 0x6a3: 0x44ec,\n\t0x6a4: 0x36cd, 0x6a5: 0x36d3, 0x6a6: 0x36f1, 0x6a7: 0x3e78, 0x6a8: 0x3661, 0x6a9: 0x365b,\n\t0x6aa: 0x364f, 0x6ab: 0x430c, 0x6ac: 0x3649, 0x6ad: 0x4474, 0x6ae: 0x447b, 0x6af: 0x0081,\n\t0x6b2: 0x3eb0, 0x6b3: 0x36f7, 0x6b4: 0x3eb8,\n\t0x6b6: 0x4888, 0x6b7: 0x3ed0, 0x6b8: 0x363d, 0x6b9: 0x4306, 0x6ba: 0x366d, 0x6bb: 0x4318,\n\t0x6bc: 0x3679, 0x6bd: 0x425a, 0x6be: 0x428c,\n\t// Block 0x1b, offset 0x6c0\n\t0x6c0: 0x1bd8, 0x6c1: 0x1bdc, 0x6c2: 0x0047, 0x6c3: 0x1c54, 0x6c5: 0x1be8,\n\t0x6c6: 0x1bec, 0x6c7: 0x00e9, 0x6c9: 0x1c58, 0x6ca: 0x008f, 0x6cb: 0x0051,\n\t0x6cc: 0x0051, 0x6cd: 0x0051, 0x6ce: 0x0091, 0x6cf: 0x00da, 0x6d0: 0x0053, 0x6d1: 0x0053,\n\t0x6d2: 0x0059, 0x6d3: 0x0099, 0x6d5: 0x005d, 0x6d6: 0x198d,\n\t0x6d9: 0x0061, 0x6da: 0x0063, 0x6db: 0x0065, 0x6dc: 0x0065, 0x6dd: 0x0065,\n\t0x6e0: 0x199f, 0x6e1: 0x1bc8, 0x6e2: 0x19a8,\n\t0x6e4: 0x0075, 0x6e6: 0x01b8, 0x6e8: 0x0075,\n\t0x6ea: 0x0057, 0x6eb: 0x42d2, 0x6ec: 0x0045, 0x6ed: 0x0047, 0x6ef: 0x008b,\n\t0x6f0: 0x004b, 0x6f1: 0x004d, 0x6f3: 0x005b, 0x6f4: 0x009f, 0x6f5: 0x0215,\n\t0x6f6: 0x0218, 0x6f7: 0x021b, 0x6f8: 0x021e, 0x6f9: 0x0093, 0x6fb: 0x1b98,\n\t0x6fc: 0x01e8, 0x6fd: 0x01c1, 0x6fe: 0x0179, 0x6ff: 0x01a0,\n\t// Block 0x1c, offset 0x700\n\t0x700: 0x0463, 0x705: 0x0049,\n\t0x706: 0x0089, 0x707: 0x008b, 0x708: 0x0093, 0x709: 0x0095,\n\t0x710: 0x222e, 0x711: 0x223a,\n\t0x712: 0x22ee, 0x713: 0x2216, 0x714: 0x229a, 0x715: 0x2222, 0x716: 0x22a0, 0x717: 0x22b8,\n\t0x718: 0x22c4, 0x719: 0x2228, 0x71a: 0x22ca, 0x71b: 0x2234, 0x71c: 0x22be, 0x71d: 0x22d0,\n\t0x71e: 0x22d6, 0x71f: 0x1cbc, 0x720: 0x0053, 0x721: 0x195a, 0x722: 0x1ba4, 0x723: 0x1963,\n\t0x724: 0x006d, 0x725: 0x19ab, 0x726: 0x1bd0, 0x727: 0x1d48, 0x728: 0x1966, 0x729: 0x0071,\n\t0x72a: 0x19b7, 0x72b: 0x1bd4, 0x72c: 0x0059, 0x72d: 0x0047, 0x72e: 0x0049, 0x72f: 0x005b,\n\t0x730: 0x0093, 0x731: 0x19e4, 0x732: 0x1c18, 0x733: 0x19ed, 0x734: 0x00ad, 0x735: 0x1a62,\n\t0x736: 0x1c4c, 0x737: 0x1d5c, 0x738: 0x19f0, 0x739: 0x00b1, 0x73a: 0x1a65, 0x73b: 0x1c50,\n\t0x73c: 0x0099, 0x73d: 0x0087, 0x73e: 0x0089, 0x73f: 0x009b,\n\t// Block 0x1d, offset 0x740\n\t0x741: 0x3c06, 0x743: 0xa000, 0x744: 0x3c0d, 0x745: 0xa000,\n\t0x747: 0x3c14, 0x748: 0xa000, 0x749: 0x3c1b,\n\t0x74d: 0xa000,\n\t0x760: 0x2f65, 0x761: 0xa000, 0x762: 0x3c29,\n\t0x764: 0xa000, 0x765: 0xa000,\n\t0x76d: 0x3c22, 0x76e: 0x2f60, 0x76f: 0x2f6a,\n\t0x770: 0x3c30, 0x771: 0x3c37, 0x772: 0xa000, 0x773: 0xa000, 0x774: 0x3c3e, 0x775: 0x3c45,\n\t0x776: 0xa000, 0x777: 0xa000, 0x778: 0x3c4c, 0x779: 0x3c53, 0x77a: 0xa000, 0x77b: 0xa000,\n\t0x77c: 0xa000, 0x77d: 0xa000,\n\t// Block 0x1e, offset 0x780\n\t0x780: 0x3c5a, 0x781: 0x3c61, 0x782: 0xa000, 0x783: 0xa000, 0x784: 0x3c76, 0x785: 0x3c7d,\n\t0x786: 0xa000, 0x787: 0xa000, 0x788: 0x3c84, 0x789: 0x3c8b,\n\t0x791: 0xa000,\n\t0x792: 0xa000,\n\t0x7a2: 0xa000,\n\t0x7a8: 0xa000, 0x7a9: 0xa000,\n\t0x7ab: 0xa000, 0x7ac: 0x3ca0, 0x7ad: 0x3ca7, 0x7ae: 0x3cae, 0x7af: 0x3cb5,\n\t0x7b2: 0xa000, 0x7b3: 0xa000, 0x7b4: 0xa000, 0x7b5: 0xa000,\n\t// Block 0x1f, offset 0x7c0\n\t0x7e0: 0x0023, 0x7e1: 0x0025, 0x7e2: 0x0027, 0x7e3: 0x0029,\n\t0x7e4: 0x002b, 0x7e5: 0x002d, 0x7e6: 0x002f, 0x7e7: 0x0031, 0x7e8: 0x0033, 0x7e9: 0x1882,\n\t0x7ea: 0x1885, 0x7eb: 0x1888, 0x7ec: 0x188b, 0x7ed: 0x188e, 0x7ee: 0x1891, 0x7ef: 0x1894,\n\t0x7f0: 0x1897, 0x7f1: 0x189a, 0x7f2: 0x189d, 0x7f3: 0x18a6, 0x7f4: 0x1a68, 0x7f5: 0x1a6c,\n\t0x7f6: 0x1a70, 0x7f7: 0x1a74, 0x7f8: 0x1a78, 0x7f9: 0x1a7c, 0x7fa: 0x1a80, 0x7fb: 0x1a84,\n\t0x7fc: 0x1a88, 0x7fd: 0x1c80, 0x7fe: 0x1c85, 0x7ff: 0x1c8a,\n\t// Block 0x20, offset 0x800\n\t0x800: 0x1c8f, 0x801: 0x1c94, 0x802: 0x1c99, 0x803: 0x1c9e, 0x804: 0x1ca3, 0x805: 0x1ca8,\n\t0x806: 0x1cad, 0x807: 0x1cb2, 0x808: 0x187f, 0x809: 0x18a3, 0x80a: 0x18c7, 0x80b: 0x18eb,\n\t0x80c: 0x190f, 0x80d: 0x1918, 0x80e: 0x191e, 0x80f: 0x1924, 0x810: 0x192a, 0x811: 0x1b60,\n\t0x812: 0x1b64, 0x813: 0x1b68, 0x814: 0x1b6c, 0x815: 0x1b70, 0x816: 0x1b74, 0x817: 0x1b78,\n\t0x818: 0x1b7c, 0x819: 0x1b80, 0x81a: 0x1b84, 0x81b: 0x1b88, 0x81c: 0x1af4, 0x81d: 0x1af8,\n\t0x81e: 0x1afc, 0x81f: 0x1b00, 0x820: 0x1b04, 0x821: 0x1b08, 0x822: 0x1b0c, 0x823: 0x1b10,\n\t0x824: 0x1b14, 0x825: 0x1b18, 0x826: 0x1b1c, 0x827: 0x1b20, 0x828: 0x1b24, 0x829: 0x1b28,\n\t0x82a: 0x1b2c, 0x82b: 0x1b30, 0x82c: 0x1b34, 0x82d: 0x1b38, 0x82e: 0x1b3c, 0x82f: 0x1b40,\n\t0x830: 0x1b44, 0x831: 0x1b48, 0x832: 0x1b4c, 0x833: 0x1b50, 0x834: 0x1b54, 0x835: 0x1b58,\n\t0x836: 0x0043, 0x837: 0x0045, 0x838: 0x0047, 0x839: 0x0049, 0x83a: 0x004b, 0x83b: 0x004d,\n\t0x83c: 0x004f, 0x83d: 0x0051, 0x83e: 0x0053, 0x83f: 0x0055,\n\t// Block 0x21, offset 0x840\n\t0x840: 0x06bf, 0x841: 0x06e3, 0x842: 0x06ef, 0x843: 0x06ff, 0x844: 0x0707, 0x845: 0x0713,\n\t0x846: 0x071b, 0x847: 0x0723, 0x848: 0x072f, 0x849: 0x0783, 0x84a: 0x079b, 0x84b: 0x07ab,\n\t0x84c: 0x07bb, 0x84d: 0x07cb, 0x84e: 0x07db, 0x84f: 0x07fb, 0x850: 0x07ff, 0x851: 0x0803,\n\t0x852: 0x0837, 0x853: 0x085f, 0x854: 0x086f, 0x855: 0x0877, 0x856: 0x087b, 0x857: 0x0887,\n\t0x858: 0x08a3, 0x859: 0x08a7, 0x85a: 0x08bf, 0x85b: 0x08c3, 0x85c: 0x08cb, 0x85d: 0x08db,\n\t0x85e: 0x0977, 0x85f: 0x098b, 0x860: 0x09cb, 0x861: 0x09df, 0x862: 0x09e7, 0x863: 0x09eb,\n\t0x864: 0x09fb, 0x865: 0x0a17, 0x866: 0x0a43, 0x867: 0x0a4f, 0x868: 0x0a6f, 0x869: 0x0a7b,\n\t0x86a: 0x0a7f, 0x86b: 0x0a83, 0x86c: 0x0a9b, 0x86d: 0x0a9f, 0x86e: 0x0acb, 0x86f: 0x0ad7,\n\t0x870: 0x0adf, 0x871: 0x0ae7, 0x872: 0x0af7, 0x873: 0x0aff, 0x874: 0x0b07, 0x875: 0x0b33,\n\t0x876: 0x0b37, 0x877: 0x0b3f, 0x878: 0x0b43, 0x879: 0x0b4b, 0x87a: 0x0b53, 0x87b: 0x0b63,\n\t0x87c: 0x0b7f, 0x87d: 0x0bf7, 0x87e: 0x0c0b, 0x87f: 0x0c0f,\n\t// Block 0x22, offset 0x880\n\t0x880: 0x0c8f, 0x881: 0x0c93, 0x882: 0x0ca7, 0x883: 0x0cab, 0x884: 0x0cb3, 0x885: 0x0cbb,\n\t0x886: 0x0cc3, 0x887: 0x0ccf, 0x888: 0x0cf7, 0x889: 0x0d07, 0x88a: 0x0d1b, 0x88b: 0x0d8b,\n\t0x88c: 0x0d97, 0x88d: 0x0da7, 0x88e: 0x0db3, 0x88f: 0x0dbf, 0x890: 0x0dc7, 0x891: 0x0dcb,\n\t0x892: 0x0dcf, 0x893: 0x0dd3, 0x894: 0x0dd7, 0x895: 0x0e8f, 0x896: 0x0ed7, 0x897: 0x0ee3,\n\t0x898: 0x0ee7, 0x899: 0x0eeb, 0x89a: 0x0eef, 0x89b: 0x0ef7, 0x89c: 0x0efb, 0x89d: 0x0f0f,\n\t0x89e: 0x0f2b, 0x89f: 0x0f33, 0x8a0: 0x0f73, 0x8a1: 0x0f77, 0x8a2: 0x0f7f, 0x8a3: 0x0f83,\n\t0x8a4: 0x0f8b, 0x8a5: 0x0f8f, 0x8a6: 0x0fb3, 0x8a7: 0x0fb7, 0x8a8: 0x0fd3, 0x8a9: 0x0fd7,\n\t0x8aa: 0x0fdb, 0x8ab: 0x0fdf, 0x8ac: 0x0ff3, 0x8ad: 0x1017, 0x8ae: 0x101b, 0x8af: 0x101f,\n\t0x8b0: 0x1043, 0x8b1: 0x1083, 0x8b2: 0x1087, 0x8b3: 0x10a7, 0x8b4: 0x10b7, 0x8b5: 0x10bf,\n\t0x8b6: 0x10df, 0x8b7: 0x1103, 0x8b8: 0x1147, 0x8b9: 0x114f, 0x8ba: 0x1163, 0x8bb: 0x116f,\n\t0x8bc: 0x1177, 0x8bd: 0x117f, 0x8be: 0x1183, 0x8bf: 0x1187,\n\t// Block 0x23, offset 0x8c0\n\t0x8c0: 0x119f, 0x8c1: 0x11a3, 0x8c2: 0x11bf, 0x8c3: 0x11c7, 0x8c4: 0x11cf, 0x8c5: 0x11d3,\n\t0x8c6: 0x11df, 0x8c7: 0x11e7, 0x8c8: 0x11eb, 0x8c9: 0x11ef, 0x8ca: 0x11f7, 0x8cb: 0x11fb,\n\t0x8cc: 0x129b, 0x8cd: 0x12af, 0x8ce: 0x12e3, 0x8cf: 0x12e7, 0x8d0: 0x12ef, 0x8d1: 0x131b,\n\t0x8d2: 0x1323, 0x8d3: 0x132b, 0x8d4: 0x1333, 0x8d5: 0x136f, 0x8d6: 0x1373, 0x8d7: 0x137b,\n\t0x8d8: 0x137f, 0x8d9: 0x1383, 0x8da: 0x13af, 0x8db: 0x13b3, 0x8dc: 0x13bb, 0x8dd: 0x13cf,\n\t0x8de: 0x13d3, 0x8df: 0x13ef, 0x8e0: 0x13f7, 0x8e1: 0x13fb, 0x8e2: 0x141f, 0x8e3: 0x143f,\n\t0x8e4: 0x1453, 0x8e5: 0x1457, 0x8e6: 0x145f, 0x8e7: 0x148b, 0x8e8: 0x148f, 0x8e9: 0x149f,\n\t0x8ea: 0x14c3, 0x8eb: 0x14cf, 0x8ec: 0x14df, 0x8ed: 0x14f7, 0x8ee: 0x14ff, 0x8ef: 0x1503,\n\t0x8f0: 0x1507, 0x8f1: 0x150b, 0x8f2: 0x1517, 0x8f3: 0x151b, 0x8f4: 0x1523, 0x8f5: 0x153f,\n\t0x8f6: 0x1543, 0x8f7: 0x1547, 0x8f8: 0x155f, 0x8f9: 0x1563, 0x8fa: 0x156b, 0x8fb: 0x157f,\n\t0x8fc: 0x1583, 0x8fd: 0x1587, 0x8fe: 0x158f, 0x8ff: 0x1593,\n\t// Block 0x24, offset 0x900\n\t0x906: 0xa000, 0x90b: 0xa000,\n\t0x90c: 0x3f08, 0x90d: 0xa000, 0x90e: 0x3f10, 0x90f: 0xa000, 0x910: 0x3f18, 0x911: 0xa000,\n\t0x912: 0x3f20, 0x913: 0xa000, 0x914: 0x3f28, 0x915: 0xa000, 0x916: 0x3f30, 0x917: 0xa000,\n\t0x918: 0x3f38, 0x919: 0xa000, 0x91a: 0x3f40, 0x91b: 0xa000, 0x91c: 0x3f48, 0x91d: 0xa000,\n\t0x91e: 0x3f50, 0x91f: 0xa000, 0x920: 0x3f58, 0x921: 0xa000, 0x922: 0x3f60,\n\t0x924: 0xa000, 0x925: 0x3f68, 0x926: 0xa000, 0x927: 0x3f70, 0x928: 0xa000, 0x929: 0x3f78,\n\t0x92f: 0xa000,\n\t0x930: 0x3f80, 0x931: 0x3f88, 0x932: 0xa000, 0x933: 0x3f90, 0x934: 0x3f98, 0x935: 0xa000,\n\t0x936: 0x3fa0, 0x937: 0x3fa8, 0x938: 0xa000, 0x939: 0x3fb0, 0x93a: 0x3fb8, 0x93b: 0xa000,\n\t0x93c: 0x3fc0, 0x93d: 0x3fc8,\n\t// Block 0x25, offset 0x940\n\t0x954: 0x3f00,\n\t0x959: 0x9903, 0x95a: 0x9903, 0x95b: 0x42dc, 0x95c: 0x42e2, 0x95d: 0xa000,\n\t0x95e: 0x3fd0, 0x95f: 0x26b4,\n\t0x966: 0xa000,\n\t0x96b: 0xa000, 0x96c: 0x3fe0, 0x96d: 0xa000, 0x96e: 0x3fe8, 0x96f: 0xa000,\n\t0x970: 0x3ff0, 0x971: 0xa000, 0x972: 0x3ff8, 0x973: 0xa000, 0x974: 0x4000, 0x975: 0xa000,\n\t0x976: 0x4008, 0x977: 0xa000, 0x978: 0x4010, 0x979: 0xa000, 0x97a: 0x4018, 0x97b: 0xa000,\n\t0x97c: 0x4020, 0x97d: 0xa000, 0x97e: 0x4028, 0x97f: 0xa000,\n\t// Block 0x26, offset 0x980\n\t0x980: 0x4030, 0x981: 0xa000, 0x982: 0x4038, 0x984: 0xa000, 0x985: 0x4040,\n\t0x986: 0xa000, 0x987: 0x4048, 0x988: 0xa000, 0x989: 0x4050,\n\t0x98f: 0xa000, 0x990: 0x4058, 0x991: 0x4060,\n\t0x992: 0xa000, 0x993: 0x4068, 0x994: 0x4070, 0x995: 0xa000, 0x996: 0x4078, 0x997: 0x4080,\n\t0x998: 0xa000, 0x999: 0x4088, 0x99a: 0x4090, 0x99b: 0xa000, 0x99c: 0x4098, 0x99d: 0x40a0,\n\t0x9af: 0xa000,\n\t0x9b0: 0xa000, 0x9b1: 0xa000, 0x9b2: 0xa000, 0x9b4: 0x3fd8,\n\t0x9b7: 0x40a8, 0x9b8: 0x40b0, 0x9b9: 0x40b8, 0x9ba: 0x40c0,\n\t0x9bd: 0xa000, 0x9be: 0x40c8, 0x9bf: 0x26c9,\n\t// Block 0x27, offset 0x9c0\n\t0x9c0: 0x0367, 0x9c1: 0x032b, 0x9c2: 0x032f, 0x9c3: 0x0333, 0x9c4: 0x037b, 0x9c5: 0x0337,\n\t0x9c6: 0x033b, 0x9c7: 0x033f, 0x9c8: 0x0343, 0x9c9: 0x0347, 0x9ca: 0x034b, 0x9cb: 0x034f,\n\t0x9cc: 0x0353, 0x9cd: 0x0357, 0x9ce: 0x035b, 0x9cf: 0x49bd, 0x9d0: 0x49c3, 0x9d1: 0x49c9,\n\t0x9d2: 0x49cf, 0x9d3: 0x49d5, 0x9d4: 0x49db, 0x9d5: 0x49e1, 0x9d6: 0x49e7, 0x9d7: 0x49ed,\n\t0x9d8: 0x49f3, 0x9d9: 0x49f9, 0x9da: 0x49ff, 0x9db: 0x4a05, 0x9dc: 0x4a0b, 0x9dd: 0x4a11,\n\t0x9de: 0x4a17, 0x9df: 0x4a1d, 0x9e0: 0x4a23, 0x9e1: 0x4a29, 0x9e2: 0x4a2f, 0x9e3: 0x4a35,\n\t0x9e4: 0x03c3, 0x9e5: 0x035f, 0x9e6: 0x0363, 0x9e7: 0x03e7, 0x9e8: 0x03eb, 0x9e9: 0x03ef,\n\t0x9ea: 0x03f3, 0x9eb: 0x03f7, 0x9ec: 0x03fb, 0x9ed: 0x03ff, 0x9ee: 0x036b, 0x9ef: 0x0403,\n\t0x9f0: 0x0407, 0x9f1: 0x036f, 0x9f2: 0x0373, 0x9f3: 0x0377, 0x9f4: 0x037f, 0x9f5: 0x0383,\n\t0x9f6: 0x0387, 0x9f7: 0x038b, 0x9f8: 0x038f, 0x9f9: 0x0393, 0x9fa: 0x0397, 0x9fb: 0x039b,\n\t0x9fc: 0x039f, 0x9fd: 0x03a3, 0x9fe: 0x03a7, 0x9ff: 0x03ab,\n\t// Block 0x28, offset 0xa00\n\t0xa00: 0x03af, 0xa01: 0x03b3, 0xa02: 0x040b, 0xa03: 0x040f, 0xa04: 0x03b7, 0xa05: 0x03bb,\n\t0xa06: 0x03bf, 0xa07: 0x03c7, 0xa08: 0x03cb, 0xa09: 0x03cf, 0xa0a: 0x03d3, 0xa0b: 0x03d7,\n\t0xa0c: 0x03db, 0xa0d: 0x03df, 0xa0e: 0x03e3,\n\t0xa12: 0x06bf, 0xa13: 0x071b, 0xa14: 0x06cb, 0xa15: 0x097b, 0xa16: 0x06cf, 0xa17: 0x06e7,\n\t0xa18: 0x06d3, 0xa19: 0x0f93, 0xa1a: 0x0707, 0xa1b: 0x06db, 0xa1c: 0x06c3, 0xa1d: 0x09ff,\n\t0xa1e: 0x098f, 0xa1f: 0x072f,\n\t// Block 0x29, offset 0xa40\n\t0xa40: 0x2054, 0xa41: 0x205a, 0xa42: 0x2060, 0xa43: 0x2066, 0xa44: 0x206c, 0xa45: 0x2072,\n\t0xa46: 0x2078, 0xa47: 0x207e, 0xa48: 0x2084, 0xa49: 0x208a, 0xa4a: 0x2090, 0xa4b: 0x2096,\n\t0xa4c: 0x209c, 0xa4d: 0x20a2, 0xa4e: 0x2726, 0xa4f: 0x272f, 0xa50: 0x2738, 0xa51: 0x2741,\n\t0xa52: 0x274a, 0xa53: 0x2753, 0xa54: 0x275c, 0xa55: 0x2765, 0xa56: 0x276e, 0xa57: 0x2780,\n\t0xa58: 0x2789, 0xa59: 0x2792, 0xa5a: 0x279b, 0xa5b: 0x27a4, 0xa5c: 0x2777, 0xa5d: 0x2bac,\n\t0xa5e: 0x2aed, 0xa60: 0x20a8, 0xa61: 0x20c0, 0xa62: 0x20b4, 0xa63: 0x2108,\n\t0xa64: 0x20c6, 0xa65: 0x20e4, 0xa66: 0x20ae, 0xa67: 0x20de, 0xa68: 0x20ba, 0xa69: 0x20f0,\n\t0xa6a: 0x2120, 0xa6b: 0x213e, 0xa6c: 0x2138, 0xa6d: 0x212c, 0xa6e: 0x217a, 0xa6f: 0x210e,\n\t0xa70: 0x211a, 0xa71: 0x2132, 0xa72: 0x2126, 0xa73: 0x2150, 0xa74: 0x20fc, 0xa75: 0x2144,\n\t0xa76: 0x216e, 0xa77: 0x2156, 0xa78: 0x20ea, 0xa79: 0x20cc, 0xa7a: 0x2102, 0xa7b: 0x2114,\n\t0xa7c: 0x214a, 0xa7d: 0x20d2, 0xa7e: 0x2174, 0xa7f: 0x20f6,\n\t// Block 0x2a, offset 0xa80\n\t0xa80: 0x215c, 0xa81: 0x20d8, 0xa82: 0x2162, 0xa83: 0x2168, 0xa84: 0x092f, 0xa85: 0x0b03,\n\t0xa86: 0x0ca7, 0xa87: 0x10c7,\n\t0xa90: 0x1bc4, 0xa91: 0x18a9,\n\t0xa92: 0x18ac, 0xa93: 0x18af, 0xa94: 0x18b2, 0xa95: 0x18b5, 0xa96: 0x18b8, 0xa97: 0x18bb,\n\t0xa98: 0x18be, 0xa99: 0x18c1, 0xa9a: 0x18ca, 0xa9b: 0x18cd, 0xa9c: 0x18d0, 0xa9d: 0x18d3,\n\t0xa9e: 0x18d6, 0xa9f: 0x18d9, 0xaa0: 0x0313, 0xaa1: 0x031b, 0xaa2: 0x031f, 0xaa3: 0x0327,\n\t0xaa4: 0x032b, 0xaa5: 0x032f, 0xaa6: 0x0337, 0xaa7: 0x033f, 0xaa8: 0x0343, 0xaa9: 0x034b,\n\t0xaaa: 0x034f, 0xaab: 0x0353, 0xaac: 0x0357, 0xaad: 0x035b, 0xaae: 0x2e18, 0xaaf: 0x2e20,\n\t0xab0: 0x2e28, 0xab1: 0x2e30, 0xab2: 0x2e38, 0xab3: 0x2e40, 0xab4: 0x2e48, 0xab5: 0x2e50,\n\t0xab6: 0x2e60, 0xab7: 0x2e68, 0xab8: 0x2e70, 0xab9: 0x2e78, 0xaba: 0x2e80, 0xabb: 0x2e88,\n\t0xabc: 0x2ed3, 0xabd: 0x2e9b, 0xabe: 0x2e58,\n\t// Block 0x2b, offset 0xac0\n\t0xac0: 0x06bf, 0xac1: 0x071b, 0xac2: 0x06cb, 0xac3: 0x097b, 0xac4: 0x071f, 0xac5: 0x07af,\n\t0xac6: 0x06c7, 0xac7: 0x07ab, 0xac8: 0x070b, 0xac9: 0x0887, 0xaca: 0x0d07, 0xacb: 0x0e8f,\n\t0xacc: 0x0dd7, 0xacd: 0x0d1b, 0xace: 0x145f, 0xacf: 0x098b, 0xad0: 0x0ccf, 0xad1: 0x0d4b,\n\t0xad2: 0x0d0b, 0xad3: 0x104b, 0xad4: 0x08fb, 0xad5: 0x0f03, 0xad6: 0x1387, 0xad7: 0x105f,\n\t0xad8: 0x0843, 0xad9: 0x108f, 0xada: 0x0f9b, 0xadb: 0x0a17, 0xadc: 0x140f, 0xadd: 0x077f,\n\t0xade: 0x08ab, 0xadf: 0x0df7, 0xae0: 0x1527, 0xae1: 0x0743, 0xae2: 0x07d3, 0xae3: 0x0d9b,\n\t0xae4: 0x06cf, 0xae5: 0x06e7, 0xae6: 0x06d3, 0xae7: 0x0adb, 0xae8: 0x08ef, 0xae9: 0x087f,\n\t0xaea: 0x0a57, 0xaeb: 0x0a4b, 0xaec: 0x0feb, 0xaed: 0x073f, 0xaee: 0x139b, 0xaef: 0x089b,\n\t0xaf0: 0x09f3, 0xaf1: 0x18dc, 0xaf2: 0x18df, 0xaf3: 0x18e2, 0xaf4: 0x18e5, 0xaf5: 0x18ee,\n\t0xaf6: 0x18f1, 0xaf7: 0x18f4, 0xaf8: 0x18f7, 0xaf9: 0x18fa, 0xafa: 0x18fd, 0xafb: 0x1900,\n\t0xafc: 0x1903, 0xafd: 0x1906, 0xafe: 0x1909, 0xaff: 0x1912,\n\t// Block 0x2c, offset 0xb00\n\t0xb00: 0x1cc6, 0xb01: 0x1cd5, 0xb02: 0x1ce4, 0xb03: 0x1cf3, 0xb04: 0x1d02, 0xb05: 0x1d11,\n\t0xb06: 0x1d20, 0xb07: 0x1d2f, 0xb08: 0x1d3e, 0xb09: 0x218c, 0xb0a: 0x219e, 0xb0b: 0x21b0,\n\t0xb0c: 0x1954, 0xb0d: 0x1c04, 0xb0e: 0x19d2, 0xb0f: 0x1ba8, 0xb10: 0x04cb, 0xb11: 0x04d3,\n\t0xb12: 0x04db, 0xb13: 0x04e3, 0xb14: 0x04eb, 0xb15: 0x04ef, 0xb16: 0x04f3, 0xb17: 0x04f7,\n\t0xb18: 0x04fb, 0xb19: 0x04ff, 0xb1a: 0x0503, 0xb1b: 0x0507, 0xb1c: 0x050b, 0xb1d: 0x050f,\n\t0xb1e: 0x0513, 0xb1f: 0x0517, 0xb20: 0x051b, 0xb21: 0x0523, 0xb22: 0x0527, 0xb23: 0x052b,\n\t0xb24: 0x052f, 0xb25: 0x0533, 0xb26: 0x0537, 0xb27: 0x053b, 0xb28: 0x053f, 0xb29: 0x0543,\n\t0xb2a: 0x0547, 0xb2b: 0x054b, 0xb2c: 0x054f, 0xb2d: 0x0553, 0xb2e: 0x0557, 0xb2f: 0x055b,\n\t0xb30: 0x055f, 0xb31: 0x0563, 0xb32: 0x0567, 0xb33: 0x056f, 0xb34: 0x0577, 0xb35: 0x057f,\n\t0xb36: 0x0583, 0xb37: 0x0587, 0xb38: 0x058b, 0xb39: 0x058f, 0xb3a: 0x0593, 0xb3b: 0x0597,\n\t0xb3c: 0x059b, 0xb3d: 0x059f, 0xb3e: 0x05a3,\n\t// Block 0x2d, offset 0xb40\n\t0xb40: 0x2b0c, 0xb41: 0x29a8, 0xb42: 0x2b1c, 0xb43: 0x2880, 0xb44: 0x2ee4, 0xb45: 0x288a,\n\t0xb46: 0x2894, 0xb47: 0x2f28, 0xb48: 0x29b5, 0xb49: 0x289e, 0xb4a: 0x28a8, 0xb4b: 0x28b2,\n\t0xb4c: 0x29dc, 0xb4d: 0x29e9, 0xb4e: 0x29c2, 0xb4f: 0x29cf, 0xb50: 0x2ea9, 0xb51: 0x29f6,\n\t0xb52: 0x2a03, 0xb53: 0x2bbe, 0xb54: 0x26bb, 0xb55: 0x2bd1, 0xb56: 0x2be4, 0xb57: 0x2b2c,\n\t0xb58: 0x2a10, 0xb59: 0x2bf7, 0xb5a: 0x2c0a, 0xb5b: 0x2a1d, 0xb5c: 0x28bc, 0xb5d: 0x28c6,\n\t0xb5e: 0x2eb7, 0xb5f: 0x2a2a, 0xb60: 0x2b3c, 0xb61: 0x2ef5, 0xb62: 0x28d0, 0xb63: 0x28da,\n\t0xb64: 0x2a37, 0xb65: 0x28e4, 0xb66: 0x28ee, 0xb67: 0x26d0, 0xb68: 0x26d7, 0xb69: 0x28f8,\n\t0xb6a: 0x2902, 0xb6b: 0x2c1d, 0xb6c: 0x2a44, 0xb6d: 0x2b4c, 0xb6e: 0x2c30, 0xb6f: 0x2a51,\n\t0xb70: 0x2916, 0xb71: 0x290c, 0xb72: 0x2f3c, 0xb73: 0x2a5e, 0xb74: 0x2c43, 0xb75: 0x2920,\n\t0xb76: 0x2b5c, 0xb77: 0x292a, 0xb78: 0x2a78, 0xb79: 0x2934, 0xb7a: 0x2a85, 0xb7b: 0x2f06,\n\t0xb7c: 0x2a6b, 0xb7d: 0x2b6c, 0xb7e: 0x2a92, 0xb7f: 0x26de,\n\t// Block 0x2e, offset 0xb80\n\t0xb80: 0x2f17, 0xb81: 0x293e, 0xb82: 0x2948, 0xb83: 0x2a9f, 0xb84: 0x2952, 0xb85: 0x295c,\n\t0xb86: 0x2966, 0xb87: 0x2b7c, 0xb88: 0x2aac, 0xb89: 0x26e5, 0xb8a: 0x2c56, 0xb8b: 0x2e90,\n\t0xb8c: 0x2b8c, 0xb8d: 0x2ab9, 0xb8e: 0x2ec5, 0xb8f: 0x2970, 0xb90: 0x297a, 0xb91: 0x2ac6,\n\t0xb92: 0x26ec, 0xb93: 0x2ad3, 0xb94: 0x2b9c, 0xb95: 0x26f3, 0xb96: 0x2c69, 0xb97: 0x2984,\n\t0xb98: 0x1cb7, 0xb99: 0x1ccb, 0xb9a: 0x1cda, 0xb9b: 0x1ce9, 0xb9c: 0x1cf8, 0xb9d: 0x1d07,\n\t0xb9e: 0x1d16, 0xb9f: 0x1d25, 0xba0: 0x1d34, 0xba1: 0x1d43, 0xba2: 0x2192, 0xba3: 0x21a4,\n\t0xba4: 0x21b6, 0xba5: 0x21c2, 0xba6: 0x21ce, 0xba7: 0x21da, 0xba8: 0x21e6, 0xba9: 0x21f2,\n\t0xbaa: 0x21fe, 0xbab: 0x220a, 0xbac: 0x2246, 0xbad: 0x2252, 0xbae: 0x225e, 0xbaf: 0x226a,\n\t0xbb0: 0x2276, 0xbb1: 0x1c14, 0xbb2: 0x19c6, 0xbb3: 0x1936, 0xbb4: 0x1be4, 0xbb5: 0x1a47,\n\t0xbb6: 0x1a56, 0xbb7: 0x19cc, 0xbb8: 0x1bfc, 0xbb9: 0x1c00, 0xbba: 0x1960, 0xbbb: 0x2701,\n\t0xbbc: 0x270f, 0xbbd: 0x26fa, 0xbbe: 0x2708, 0xbbf: 0x2ae0,\n\t// Block 0x2f, offset 0xbc0\n\t0xbc0: 0x1a4a, 0xbc1: 0x1a32, 0xbc2: 0x1c60, 0xbc3: 0x1a1a, 0xbc4: 0x19f3, 0xbc5: 0x1969,\n\t0xbc6: 0x1978, 0xbc7: 0x1948, 0xbc8: 0x1bf0, 0xbc9: 0x1d52, 0xbca: 0x1a4d, 0xbcb: 0x1a35,\n\t0xbcc: 0x1c64, 0xbcd: 0x1c70, 0xbce: 0x1a26, 0xbcf: 0x19fc, 0xbd0: 0x1957, 0xbd1: 0x1c1c,\n\t0xbd2: 0x1bb0, 0xbd3: 0x1b9c, 0xbd4: 0x1bcc, 0xbd5: 0x1c74, 0xbd6: 0x1a29, 0xbd7: 0x19c9,\n\t0xbd8: 0x19ff, 0xbd9: 0x19de, 0xbda: 0x1a41, 0xbdb: 0x1c78, 0xbdc: 0x1a2c, 0xbdd: 0x19c0,\n\t0xbde: 0x1a02, 0xbdf: 0x1c3c, 0xbe0: 0x1bf4, 0xbe1: 0x1a14, 0xbe2: 0x1c24, 0xbe3: 0x1c40,\n\t0xbe4: 0x1bf8, 0xbe5: 0x1a17, 0xbe6: 0x1c28, 0xbe7: 0x22e8, 0xbe8: 0x22fc, 0xbe9: 0x1996,\n\t0xbea: 0x1c20, 0xbeb: 0x1bb4, 0xbec: 0x1ba0, 0xbed: 0x1c48, 0xbee: 0x2716, 0xbef: 0x27ad,\n\t0xbf0: 0x1a59, 0xbf1: 0x1a44, 0xbf2: 0x1c7c, 0xbf3: 0x1a2f, 0xbf4: 0x1a50, 0xbf5: 0x1a38,\n\t0xbf6: 0x1c68, 0xbf7: 0x1a1d, 0xbf8: 0x19f6, 0xbf9: 0x1981, 0xbfa: 0x1a53, 0xbfb: 0x1a3b,\n\t0xbfc: 0x1c6c, 0xbfd: 0x1a20, 0xbfe: 0x19f9, 0xbff: 0x1984,\n\t// Block 0x30, offset 0xc00\n\t0xc00: 0x1c2c, 0xc01: 0x1bb8, 0xc02: 0x1d4d, 0xc03: 0x1939, 0xc04: 0x19ba, 0xc05: 0x19bd,\n\t0xc06: 0x22f5, 0xc07: 0x1b94, 0xc08: 0x19c3, 0xc09: 0x194b, 0xc0a: 0x19e1, 0xc0b: 0x194e,\n\t0xc0c: 0x19ea, 0xc0d: 0x196c, 0xc0e: 0x196f, 0xc0f: 0x1a05, 0xc10: 0x1a0b, 0xc11: 0x1a0e,\n\t0xc12: 0x1c30, 0xc13: 0x1a11, 0xc14: 0x1a23, 0xc15: 0x1c38, 0xc16: 0x1c44, 0xc17: 0x1990,\n\t0xc18: 0x1d57, 0xc19: 0x1bbc, 0xc1a: 0x1993, 0xc1b: 0x1a5c, 0xc1c: 0x19a5, 0xc1d: 0x19b4,\n\t0xc1e: 0x22e2, 0xc1f: 0x22dc, 0xc20: 0x1cc1, 0xc21: 0x1cd0, 0xc22: 0x1cdf, 0xc23: 0x1cee,\n\t0xc24: 0x1cfd, 0xc25: 0x1d0c, 0xc26: 0x1d1b, 0xc27: 0x1d2a, 0xc28: 0x1d39, 0xc29: 0x2186,\n\t0xc2a: 0x2198, 0xc2b: 0x21aa, 0xc2c: 0x21bc, 0xc2d: 0x21c8, 0xc2e: 0x21d4, 0xc2f: 0x21e0,\n\t0xc30: 0x21ec, 0xc31: 0x21f8, 0xc32: 0x2204, 0xc33: 0x2240, 0xc34: 0x224c, 0xc35: 0x2258,\n\t0xc36: 0x2264, 0xc37: 0x2270, 0xc38: 0x227c, 0xc39: 0x2282, 0xc3a: 0x2288, 0xc3b: 0x228e,\n\t0xc3c: 0x2294, 0xc3d: 0x22a6, 0xc3e: 0x22ac, 0xc3f: 0x1c10,\n\t// Block 0x31, offset 0xc40\n\t0xc40: 0x1377, 0xc41: 0x0cfb, 0xc42: 0x13d3, 0xc43: 0x139f, 0xc44: 0x0e57, 0xc45: 0x06eb,\n\t0xc46: 0x08df, 0xc47: 0x162b, 0xc48: 0x162b, 0xc49: 0x0a0b, 0xc4a: 0x145f, 0xc4b: 0x0943,\n\t0xc4c: 0x0a07, 0xc4d: 0x0bef, 0xc4e: 0x0fcf, 0xc4f: 0x115f, 0xc50: 0x1297, 0xc51: 0x12d3,\n\t0xc52: 0x1307, 0xc53: 0x141b, 0xc54: 0x0d73, 0xc55: 0x0dff, 0xc56: 0x0eab, 0xc57: 0x0f43,\n\t0xc58: 0x125f, 0xc59: 0x1447, 0xc5a: 0x1573, 0xc5b: 0x070f, 0xc5c: 0x08b3, 0xc5d: 0x0d87,\n\t0xc5e: 0x0ecf, 0xc5f: 0x1293, 0xc60: 0x15c3, 0xc61: 0x0ab3, 0xc62: 0x0e77, 0xc63: 0x1283,\n\t0xc64: 0x1317, 0xc65: 0x0c23, 0xc66: 0x11bb, 0xc67: 0x12df, 0xc68: 0x0b1f, 0xc69: 0x0d0f,\n\t0xc6a: 0x0e17, 0xc6b: 0x0f1b, 0xc6c: 0x1427, 0xc6d: 0x074f, 0xc6e: 0x07e7, 0xc6f: 0x0853,\n\t0xc70: 0x0c8b, 0xc71: 0x0d7f, 0xc72: 0x0ecb, 0xc73: 0x0fef, 0xc74: 0x1177, 0xc75: 0x128b,\n\t0xc76: 0x12a3, 0xc77: 0x13c7, 0xc78: 0x14ef, 0xc79: 0x15a3, 0xc7a: 0x15bf, 0xc7b: 0x102b,\n\t0xc7c: 0x106b, 0xc7d: 0x1123, 0xc7e: 0x1243, 0xc7f: 0x147b,\n\t// Block 0x32, offset 0xc80\n\t0xc80: 0x15cb, 0xc81: 0x134b, 0xc82: 0x09c7, 0xc83: 0x0b3b, 0xc84: 0x10db, 0xc85: 0x119b,\n\t0xc86: 0x0eff, 0xc87: 0x1033, 0xc88: 0x1397, 0xc89: 0x14e7, 0xc8a: 0x09c3, 0xc8b: 0x0a8f,\n\t0xc8c: 0x0d77, 0xc8d: 0x0e2b, 0xc8e: 0x0e5f, 0xc8f: 0x1113, 0xc90: 0x113b, 0xc91: 0x14a7,\n\t0xc92: 0x084f, 0xc93: 0x11a7, 0xc94: 0x07f3, 0xc95: 0x07ef, 0xc96: 0x1097, 0xc97: 0x1127,\n\t0xc98: 0x125b, 0xc99: 0x14af, 0xc9a: 0x1367, 0xc9b: 0x0c27, 0xc9c: 0x0d73, 0xc9d: 0x1357,\n\t0xc9e: 0x06f7, 0xc9f: 0x0a63, 0xca0: 0x0b93, 0xca1: 0x0f2f, 0xca2: 0x0faf, 0xca3: 0x0873,\n\t0xca4: 0x103b, 0xca5: 0x075f, 0xca6: 0x0b77, 0xca7: 0x06d7, 0xca8: 0x0deb, 0xca9: 0x0ca3,\n\t0xcaa: 0x110f, 0xcab: 0x08c7, 0xcac: 0x09b3, 0xcad: 0x0ffb, 0xcae: 0x1263, 0xcaf: 0x133b,\n\t0xcb0: 0x0db7, 0xcb1: 0x13f7, 0xcb2: 0x0de3, 0xcb3: 0x0c37, 0xcb4: 0x121b, 0xcb5: 0x0c57,\n\t0xcb6: 0x0fab, 0xcb7: 0x072b, 0xcb8: 0x07a7, 0xcb9: 0x07eb, 0xcba: 0x0d53, 0xcbb: 0x10fb,\n\t0xcbc: 0x11f3, 0xcbd: 0x1347, 0xcbe: 0x145b, 0xcbf: 0x085b,\n\t// Block 0x33, offset 0xcc0\n\t0xcc0: 0x090f, 0xcc1: 0x0a17, 0xcc2: 0x0b2f, 0xcc3: 0x0cbf, 0xcc4: 0x0e7b, 0xcc5: 0x103f,\n\t0xcc6: 0x1497, 0xcc7: 0x157b, 0xcc8: 0x15cf, 0xcc9: 0x15e7, 0xcca: 0x0837, 0xccb: 0x0cf3,\n\t0xccc: 0x0da3, 0xccd: 0x13eb, 0xcce: 0x0afb, 0xccf: 0x0bd7, 0xcd0: 0x0bf3, 0xcd1: 0x0c83,\n\t0xcd2: 0x0e6b, 0xcd3: 0x0eb7, 0xcd4: 0x0f67, 0xcd5: 0x108b, 0xcd6: 0x112f, 0xcd7: 0x1193,\n\t0xcd8: 0x13db, 0xcd9: 0x126b, 0xcda: 0x1403, 0xcdb: 0x147f, 0xcdc: 0x080f, 0xcdd: 0x083b,\n\t0xcde: 0x0923, 0xcdf: 0x0ea7, 0xce0: 0x12f3, 0xce1: 0x133b, 0xce2: 0x0b1b, 0xce3: 0x0b8b,\n\t0xce4: 0x0c4f, 0xce5: 0x0daf, 0xce6: 0x10d7, 0xce7: 0x0f23, 0xce8: 0x073b, 0xce9: 0x097f,\n\t0xcea: 0x0a63, 0xceb: 0x0ac7, 0xcec: 0x0b97, 0xced: 0x0f3f, 0xcee: 0x0f5b, 0xcef: 0x116b,\n\t0xcf0: 0x118b, 0xcf1: 0x1463, 0xcf2: 0x14e3, 0xcf3: 0x14f3, 0xcf4: 0x152f, 0xcf5: 0x0753,\n\t0xcf6: 0x107f, 0xcf7: 0x144f, 0xcf8: 0x14cb, 0xcf9: 0x0baf, 0xcfa: 0x0717, 0xcfb: 0x0777,\n\t0xcfc: 0x0a67, 0xcfd: 0x0a87, 0xcfe: 0x0caf, 0xcff: 0x0d73,\n\t// Block 0x34, offset 0xd00\n\t0xd00: 0x0ec3, 0xd01: 0x0fcb, 0xd02: 0x1277, 0xd03: 0x1417, 0xd04: 0x1623, 0xd05: 0x0ce3,\n\t0xd06: 0x14a3, 0xd07: 0x0833, 0xd08: 0x0d2f, 0xd09: 0x0d3b, 0xd0a: 0x0e0f, 0xd0b: 0x0e47,\n\t0xd0c: 0x0f4b, 0xd0d: 0x0fa7, 0xd0e: 0x1027, 0xd0f: 0x110b, 0xd10: 0x153b, 0xd11: 0x07af,\n\t0xd12: 0x0c03, 0xd13: 0x14b3, 0xd14: 0x0767, 0xd15: 0x0aab, 0xd16: 0x0e2f, 0xd17: 0x13df,\n\t0xd18: 0x0b67, 0xd19: 0x0bb7, 0xd1a: 0x0d43, 0xd1b: 0x0f2f, 0xd1c: 0x14bb, 0xd1d: 0x0817,\n\t0xd1e: 0x08ff, 0xd1f: 0x0a97, 0xd20: 0x0cd3, 0xd21: 0x0d1f, 0xd22: 0x0d5f, 0xd23: 0x0df3,\n\t0xd24: 0x0f47, 0xd25: 0x0fbb, 0xd26: 0x1157, 0xd27: 0x12f7, 0xd28: 0x1303, 0xd29: 0x1457,\n\t0xd2a: 0x14d7, 0xd2b: 0x0883, 0xd2c: 0x0e4b, 0xd2d: 0x0903, 0xd2e: 0x0ec7, 0xd2f: 0x0f6b,\n\t0xd30: 0x1287, 0xd31: 0x14bf, 0xd32: 0x15ab, 0xd33: 0x15d3, 0xd34: 0x0d37, 0xd35: 0x0e27,\n\t0xd36: 0x11c3, 0xd37: 0x10b7, 0xd38: 0x10c3, 0xd39: 0x10e7, 0xd3a: 0x0f17, 0xd3b: 0x0e9f,\n\t0xd3c: 0x1363, 0xd3d: 0x0733, 0xd3e: 0x122b, 0xd3f: 0x081b,\n\t// Block 0x35, offset 0xd40\n\t0xd40: 0x080b, 0xd41: 0x0b0b, 0xd42: 0x0c2b, 0xd43: 0x10f3, 0xd44: 0x0a53, 0xd45: 0x0e03,\n\t0xd46: 0x0cef, 0xd47: 0x13e7, 0xd48: 0x12e7, 0xd49: 0x14ab, 0xd4a: 0x1323, 0xd4b: 0x0b27,\n\t0xd4c: 0x0787, 0xd4d: 0x095b, 0xd50: 0x09af,\n\t0xd52: 0x0cdf, 0xd55: 0x07f7, 0xd56: 0x0f1f, 0xd57: 0x0fe3,\n\t0xd58: 0x1047, 0xd59: 0x1063, 0xd5a: 0x1067, 0xd5b: 0x107b, 0xd5c: 0x14fb, 0xd5d: 0x10eb,\n\t0xd5e: 0x116f, 0xd60: 0x128f, 0xd62: 0x1353,\n\t0xd65: 0x1407, 0xd66: 0x1433,\n\t0xd6a: 0x154f, 0xd6b: 0x1553, 0xd6c: 0x1557, 0xd6d: 0x15bb, 0xd6e: 0x142b, 0xd6f: 0x14c7,\n\t0xd70: 0x0757, 0xd71: 0x077b, 0xd72: 0x078f, 0xd73: 0x084b, 0xd74: 0x0857, 0xd75: 0x0897,\n\t0xd76: 0x094b, 0xd77: 0x0967, 0xd78: 0x096f, 0xd79: 0x09ab, 0xd7a: 0x09b7, 0xd7b: 0x0a93,\n\t0xd7c: 0x0a9b, 0xd7d: 0x0ba3, 0xd7e: 0x0bcb, 0xd7f: 0x0bd3,\n\t// Block 0x36, offset 0xd80\n\t0xd80: 0x0beb, 0xd81: 0x0c97, 0xd82: 0x0cc7, 0xd83: 0x0ce7, 0xd84: 0x0d57, 0xd85: 0x0e1b,\n\t0xd86: 0x0e37, 0xd87: 0x0e67, 0xd88: 0x0ebb, 0xd89: 0x0edb, 0xd8a: 0x0f4f, 0xd8b: 0x102f,\n\t0xd8c: 0x104b, 0xd8d: 0x1053, 0xd8e: 0x104f, 0xd8f: 0x1057, 0xd90: 0x105b, 0xd91: 0x105f,\n\t0xd92: 0x1073, 0xd93: 0x1077, 0xd94: 0x109b, 0xd95: 0x10af, 0xd96: 0x10cb, 0xd97: 0x112f,\n\t0xd98: 0x1137, 0xd99: 0x113f, 0xd9a: 0x1153, 0xd9b: 0x117b, 0xd9c: 0x11cb, 0xd9d: 0x11ff,\n\t0xd9e: 0x11ff, 0xd9f: 0x1267, 0xda0: 0x130f, 0xda1: 0x1327, 0xda2: 0x135b, 0xda3: 0x135f,\n\t0xda4: 0x13a3, 0xda5: 0x13a7, 0xda6: 0x13ff, 0xda7: 0x1407, 0xda8: 0x14db, 0xda9: 0x151f,\n\t0xdaa: 0x1537, 0xdab: 0x0b9b, 0xdac: 0x171e, 0xdad: 0x11e3,\n\t0xdb0: 0x06df, 0xdb1: 0x07e3, 0xdb2: 0x07a3, 0xdb3: 0x074b, 0xdb4: 0x078b, 0xdb5: 0x07b7,\n\t0xdb6: 0x0847, 0xdb7: 0x0863, 0xdb8: 0x094b, 0xdb9: 0x0937, 0xdba: 0x0947, 0xdbb: 0x0963,\n\t0xdbc: 0x09af, 0xdbd: 0x09bf, 0xdbe: 0x0a03, 0xdbf: 0x0a0f,\n\t// Block 0x37, offset 0xdc0\n\t0xdc0: 0x0a2b, 0xdc1: 0x0a3b, 0xdc2: 0x0b23, 0xdc3: 0x0b2b, 0xdc4: 0x0b5b, 0xdc5: 0x0b7b,\n\t0xdc6: 0x0bab, 0xdc7: 0x0bc3, 0xdc8: 0x0bb3, 0xdc9: 0x0bd3, 0xdca: 0x0bc7, 0xdcb: 0x0beb,\n\t0xdcc: 0x0c07, 0xdcd: 0x0c5f, 0xdce: 0x0c6b, 0xdcf: 0x0c73, 0xdd0: 0x0c9b, 0xdd1: 0x0cdf,\n\t0xdd2: 0x0d0f, 0xdd3: 0x0d13, 0xdd4: 0x0d27, 0xdd5: 0x0da7, 0xdd6: 0x0db7, 0xdd7: 0x0e0f,\n\t0xdd8: 0x0e5b, 0xdd9: 0x0e53, 0xdda: 0x0e67, 0xddb: 0x0e83, 0xddc: 0x0ebb, 0xddd: 0x1013,\n\t0xdde: 0x0edf, 0xddf: 0x0f13, 0xde0: 0x0f1f, 0xde1: 0x0f5f, 0xde2: 0x0f7b, 0xde3: 0x0f9f,\n\t0xde4: 0x0fc3, 0xde5: 0x0fc7, 0xde6: 0x0fe3, 0xde7: 0x0fe7, 0xde8: 0x0ff7, 0xde9: 0x100b,\n\t0xdea: 0x1007, 0xdeb: 0x1037, 0xdec: 0x10b3, 0xded: 0x10cb, 0xdee: 0x10e3, 0xdef: 0x111b,\n\t0xdf0: 0x112f, 0xdf1: 0x114b, 0xdf2: 0x117b, 0xdf3: 0x122f, 0xdf4: 0x1257, 0xdf5: 0x12cb,\n\t0xdf6: 0x1313, 0xdf7: 0x131f, 0xdf8: 0x1327, 0xdf9: 0x133f, 0xdfa: 0x1353, 0xdfb: 0x1343,\n\t0xdfc: 0x135b, 0xdfd: 0x1357, 0xdfe: 0x134f, 0xdff: 0x135f,\n\t// Block 0x38, offset 0xe00\n\t0xe00: 0x136b, 0xe01: 0x13a7, 0xe02: 0x13e3, 0xe03: 0x1413, 0xe04: 0x144b, 0xe05: 0x146b,\n\t0xe06: 0x14b7, 0xe07: 0x14db, 0xe08: 0x14fb, 0xe09: 0x150f, 0xe0a: 0x151f, 0xe0b: 0x152b,\n\t0xe0c: 0x1537, 0xe0d: 0x158b, 0xe0e: 0x162b, 0xe0f: 0x16b5, 0xe10: 0x16b0, 0xe11: 0x16e2,\n\t0xe12: 0x0607, 0xe13: 0x062f, 0xe14: 0x0633, 0xe15: 0x1764, 0xe16: 0x1791, 0xe17: 0x1809,\n\t0xe18: 0x1617, 0xe19: 0x1627,\n\t// Block 0x39, offset 0xe40\n\t0xe40: 0x19d5, 0xe41: 0x19d8, 0xe42: 0x19db, 0xe43: 0x1c08, 0xe44: 0x1c0c, 0xe45: 0x1a5f,\n\t0xe46: 0x1a5f,\n\t0xe53: 0x1d75, 0xe54: 0x1d66, 0xe55: 0x1d6b, 0xe56: 0x1d7a, 0xe57: 0x1d70,\n\t0xe5d: 0x4390,\n\t0xe5e: 0x8115, 0xe5f: 0x4402, 0xe60: 0x022d, 0xe61: 0x0215, 0xe62: 0x021e, 0xe63: 0x0221,\n\t0xe64: 0x0224, 0xe65: 0x0227, 0xe66: 0x022a, 0xe67: 0x0230, 0xe68: 0x0233, 0xe69: 0x0017,\n\t0xe6a: 0x43f0, 0xe6b: 0x43f6, 0xe6c: 0x44f4, 0xe6d: 0x44fc, 0xe6e: 0x4348, 0xe6f: 0x434e,\n\t0xe70: 0x4354, 0xe71: 0x435a, 0xe72: 0x4366, 0xe73: 0x436c, 0xe74: 0x4372, 0xe75: 0x437e,\n\t0xe76: 0x4384, 0xe78: 0x438a, 0xe79: 0x4396, 0xe7a: 0x439c, 0xe7b: 0x43a2,\n\t0xe7c: 0x43ae, 0xe7e: 0x43b4,\n\t// Block 0x3a, offset 0xe80\n\t0xe80: 0x43ba, 0xe81: 0x43c0, 0xe83: 0x43c6, 0xe84: 0x43cc,\n\t0xe86: 0x43d8, 0xe87: 0x43de, 0xe88: 0x43e4, 0xe89: 0x43ea, 0xe8a: 0x43fc, 0xe8b: 0x4378,\n\t0xe8c: 0x4360, 0xe8d: 0x43a8, 0xe8e: 0x43d2, 0xe8f: 0x1d7f, 0xe90: 0x0299, 0xe91: 0x0299,\n\t0xe92: 0x02a2, 0xe93: 0x02a2, 0xe94: 0x02a2, 0xe95: 0x02a2, 0xe96: 0x02a5, 0xe97: 0x02a5,\n\t0xe98: 0x02a5, 0xe99: 0x02a5, 0xe9a: 0x02ab, 0xe9b: 0x02ab, 0xe9c: 0x02ab, 0xe9d: 0x02ab,\n\t0xe9e: 0x029f, 0xe9f: 0x029f, 0xea0: 0x029f, 0xea1: 0x029f, 0xea2: 0x02a8, 0xea3: 0x02a8,\n\t0xea4: 0x02a8, 0xea5: 0x02a8, 0xea6: 0x029c, 0xea7: 0x029c, 0xea8: 0x029c, 0xea9: 0x029c,\n\t0xeaa: 0x02cf, 0xeab: 0x02cf, 0xeac: 0x02cf, 0xead: 0x02cf, 0xeae: 0x02d2, 0xeaf: 0x02d2,\n\t0xeb0: 0x02d2, 0xeb1: 0x02d2, 0xeb2: 0x02b1, 0xeb3: 0x02b1, 0xeb4: 0x02b1, 0xeb5: 0x02b1,\n\t0xeb6: 0x02ae, 0xeb7: 0x02ae, 0xeb8: 0x02ae, 0xeb9: 0x02ae, 0xeba: 0x02b4, 0xebb: 0x02b4,\n\t0xebc: 0x02b4, 0xebd: 0x02b4, 0xebe: 0x02b7, 0xebf: 0x02b7,\n\t// Block 0x3b, offset 0xec0\n\t0xec0: 0x02b7, 0xec1: 0x02b7, 0xec2: 0x02c0, 0xec3: 0x02c0, 0xec4: 0x02bd, 0xec5: 0x02bd,\n\t0xec6: 0x02c3, 0xec7: 0x02c3, 0xec8: 0x02ba, 0xec9: 0x02ba, 0xeca: 0x02c9, 0xecb: 0x02c9,\n\t0xecc: 0x02c6, 0xecd: 0x02c6, 0xece: 0x02d5, 0xecf: 0x02d5, 0xed0: 0x02d5, 0xed1: 0x02d5,\n\t0xed2: 0x02db, 0xed3: 0x02db, 0xed4: 0x02db, 0xed5: 0x02db, 0xed6: 0x02e1, 0xed7: 0x02e1,\n\t0xed8: 0x02e1, 0xed9: 0x02e1, 0xeda: 0x02de, 0xedb: 0x02de, 0xedc: 0x02de, 0xedd: 0x02de,\n\t0xede: 0x02e4, 0xedf: 0x02e4, 0xee0: 0x02e7, 0xee1: 0x02e7, 0xee2: 0x02e7, 0xee3: 0x02e7,\n\t0xee4: 0x446e, 0xee5: 0x446e, 0xee6: 0x02ed, 0xee7: 0x02ed, 0xee8: 0x02ed, 0xee9: 0x02ed,\n\t0xeea: 0x02ea, 0xeeb: 0x02ea, 0xeec: 0x02ea, 0xeed: 0x02ea, 0xeee: 0x0308, 0xeef: 0x0308,\n\t0xef0: 0x4468, 0xef1: 0x4468,\n\t// Block 0x3c, offset 0xf00\n\t0xf13: 0x02d8, 0xf14: 0x02d8, 0xf15: 0x02d8, 0xf16: 0x02d8, 0xf17: 0x02f6,\n\t0xf18: 0x02f6, 0xf19: 0x02f3, 0xf1a: 0x02f3, 0xf1b: 0x02f9, 0xf1c: 0x02f9, 0xf1d: 0x204f,\n\t0xf1e: 0x02ff, 0xf1f: 0x02ff, 0xf20: 0x02f0, 0xf21: 0x02f0, 0xf22: 0x02fc, 0xf23: 0x02fc,\n\t0xf24: 0x0305, 0xf25: 0x0305, 0xf26: 0x0305, 0xf27: 0x0305, 0xf28: 0x028d, 0xf29: 0x028d,\n\t0xf2a: 0x25aa, 0xf2b: 0x25aa, 0xf2c: 0x261a, 0xf2d: 0x261a, 0xf2e: 0x25e9, 0xf2f: 0x25e9,\n\t0xf30: 0x2605, 0xf31: 0x2605, 0xf32: 0x25fe, 0xf33: 0x25fe, 0xf34: 0x260c, 0xf35: 0x260c,\n\t0xf36: 0x2613, 0xf37: 0x2613, 0xf38: 0x2613, 0xf39: 0x25f0, 0xf3a: 0x25f0, 0xf3b: 0x25f0,\n\t0xf3c: 0x0302, 0xf3d: 0x0302, 0xf3e: 0x0302, 0xf3f: 0x0302,\n\t// Block 0x3d, offset 0xf40\n\t0xf40: 0x25b1, 0xf41: 0x25b8, 0xf42: 0x25d4, 0xf43: 0x25f0, 0xf44: 0x25f7, 0xf45: 0x1d89,\n\t0xf46: 0x1d8e, 0xf47: 0x1d93, 0xf48: 0x1da2, 0xf49: 0x1db1, 0xf4a: 0x1db6, 0xf4b: 0x1dbb,\n\t0xf4c: 0x1dc0, 0xf4d: 0x1dc5, 0xf4e: 0x1dd4, 0xf4f: 0x1de3, 0xf50: 0x1de8, 0xf51: 0x1ded,\n\t0xf52: 0x1dfc, 0xf53: 0x1e0b, 0xf54: 0x1e10, 0xf55: 0x1e15, 0xf56: 0x1e1a, 0xf57: 0x1e29,\n\t0xf58: 0x1e2e, 0xf59: 0x1e3d, 0xf5a: 0x1e42, 0xf5b: 0x1e47, 0xf5c: 0x1e56, 0xf5d: 0x1e5b,\n\t0xf5e: 0x1e60, 0xf5f: 0x1e6a, 0xf60: 0x1ea6, 0xf61: 0x1eb5, 0xf62: 0x1ec4, 0xf63: 0x1ec9,\n\t0xf64: 0x1ece, 0xf65: 0x1ed8, 0xf66: 0x1ee7, 0xf67: 0x1eec, 0xf68: 0x1efb, 0xf69: 0x1f00,\n\t0xf6a: 0x1f05, 0xf6b: 0x1f14, 0xf6c: 0x1f19, 0xf6d: 0x1f28, 0xf6e: 0x1f2d, 0xf6f: 0x1f32,\n\t0xf70: 0x1f37, 0xf71: 0x1f3c, 0xf72: 0x1f41, 0xf73: 0x1f46, 0xf74: 0x1f4b, 0xf75: 0x1f50,\n\t0xf76: 0x1f55, 0xf77: 0x1f5a, 0xf78: 0x1f5f, 0xf79: 0x1f64, 0xf7a: 0x1f69, 0xf7b: 0x1f6e,\n\t0xf7c: 0x1f73, 0xf7d: 0x1f78, 0xf7e: 0x1f7d, 0xf7f: 0x1f87,\n\t// Block 0x3e, offset 0xf80\n\t0xf80: 0x1f8c, 0xf81: 0x1f91, 0xf82: 0x1f96, 0xf83: 0x1fa0, 0xf84: 0x1fa5, 0xf85: 0x1faf,\n\t0xf86: 0x1fb4, 0xf87: 0x1fb9, 0xf88: 0x1fbe, 0xf89: 0x1fc3, 0xf8a: 0x1fc8, 0xf8b: 0x1fcd,\n\t0xf8c: 0x1fd2, 0xf8d: 0x1fd7, 0xf8e: 0x1fe6, 0xf8f: 0x1ff5, 0xf90: 0x1ffa, 0xf91: 0x1fff,\n\t0xf92: 0x2004, 0xf93: 0x2009, 0xf94: 0x200e, 0xf95: 0x2018, 0xf96: 0x201d, 0xf97: 0x2022,\n\t0xf98: 0x2031, 0xf99: 0x2040, 0xf9a: 0x2045, 0xf9b: 0x4420, 0xf9c: 0x4426, 0xf9d: 0x445c,\n\t0xf9e: 0x44b3, 0xf9f: 0x44ba, 0xfa0: 0x44c1, 0xfa1: 0x44c8, 0xfa2: 0x44cf, 0xfa3: 0x44d6,\n\t0xfa4: 0x25c6, 0xfa5: 0x25cd, 0xfa6: 0x25d4, 0xfa7: 0x25db, 0xfa8: 0x25f0, 0xfa9: 0x25f7,\n\t0xfaa: 0x1d98, 0xfab: 0x1d9d, 0xfac: 0x1da2, 0xfad: 0x1da7, 0xfae: 0x1db1, 0xfaf: 0x1db6,\n\t0xfb0: 0x1dca, 0xfb1: 0x1dcf, 0xfb2: 0x1dd4, 0xfb3: 0x1dd9, 0xfb4: 0x1de3, 0xfb5: 0x1de8,\n\t0xfb6: 0x1df2, 0xfb7: 0x1df7, 0xfb8: 0x1dfc, 0xfb9: 0x1e01, 0xfba: 0x1e0b, 0xfbb: 0x1e10,\n\t0xfbc: 0x1f3c, 0xfbd: 0x1f41, 0xfbe: 0x1f50, 0xfbf: 0x1f55,\n\t// Block 0x3f, offset 0xfc0\n\t0xfc0: 0x1f5a, 0xfc1: 0x1f6e, 0xfc2: 0x1f73, 0xfc3: 0x1f78, 0xfc4: 0x1f7d, 0xfc5: 0x1f96,\n\t0xfc6: 0x1fa0, 0xfc7: 0x1fa5, 0xfc8: 0x1faa, 0xfc9: 0x1fbe, 0xfca: 0x1fdc, 0xfcb: 0x1fe1,\n\t0xfcc: 0x1fe6, 0xfcd: 0x1feb, 0xfce: 0x1ff5, 0xfcf: 0x1ffa, 0xfd0: 0x445c, 0xfd1: 0x2027,\n\t0xfd2: 0x202c, 0xfd3: 0x2031, 0xfd4: 0x2036, 0xfd5: 0x2040, 0xfd6: 0x2045, 0xfd7: 0x25b1,\n\t0xfd8: 0x25b8, 0xfd9: 0x25bf, 0xfda: 0x25d4, 0xfdb: 0x25e2, 0xfdc: 0x1d89, 0xfdd: 0x1d8e,\n\t0xfde: 0x1d93, 0xfdf: 0x1da2, 0xfe0: 0x1dac, 0xfe1: 0x1dbb, 0xfe2: 0x1dc0, 0xfe3: 0x1dc5,\n\t0xfe4: 0x1dd4, 0xfe5: 0x1dde, 0xfe6: 0x1dfc, 0xfe7: 0x1e15, 0xfe8: 0x1e1a, 0xfe9: 0x1e29,\n\t0xfea: 0x1e2e, 0xfeb: 0x1e3d, 0xfec: 0x1e47, 0xfed: 0x1e56, 0xfee: 0x1e5b, 0xfef: 0x1e60,\n\t0xff0: 0x1e6a, 0xff1: 0x1ea6, 0xff2: 0x1eab, 0xff3: 0x1eb5, 0xff4: 0x1ec4, 0xff5: 0x1ec9,\n\t0xff6: 0x1ece, 0xff7: 0x1ed8, 0xff8: 0x1ee7, 0xff9: 0x1efb, 0xffa: 0x1f00, 0xffb: 0x1f05,\n\t0xffc: 0x1f14, 0xffd: 0x1f19, 0xffe: 0x1f28, 0xfff: 0x1f2d,\n\t// Block 0x40, offset 0x1000\n\t0x1000: 0x1f32, 0x1001: 0x1f37, 0x1002: 0x1f46, 0x1003: 0x1f4b, 0x1004: 0x1f5f, 0x1005: 0x1f64,\n\t0x1006: 0x1f69, 0x1007: 0x1f6e, 0x1008: 0x1f73, 0x1009: 0x1f87, 0x100a: 0x1f8c, 0x100b: 0x1f91,\n\t0x100c: 0x1f96, 0x100d: 0x1f9b, 0x100e: 0x1faf, 0x100f: 0x1fb4, 0x1010: 0x1fb9, 0x1011: 0x1fbe,\n\t0x1012: 0x1fcd, 0x1013: 0x1fd2, 0x1014: 0x1fd7, 0x1015: 0x1fe6, 0x1016: 0x1ff0, 0x1017: 0x1fff,\n\t0x1018: 0x2004, 0x1019: 0x4450, 0x101a: 0x2018, 0x101b: 0x201d, 0x101c: 0x2022, 0x101d: 0x2031,\n\t0x101e: 0x203b, 0x101f: 0x25d4, 0x1020: 0x25e2, 0x1021: 0x1da2, 0x1022: 0x1dac, 0x1023: 0x1dd4,\n\t0x1024: 0x1dde, 0x1025: 0x1dfc, 0x1026: 0x1e06, 0x1027: 0x1e6a, 0x1028: 0x1e6f, 0x1029: 0x1e92,\n\t0x102a: 0x1e97, 0x102b: 0x1f6e, 0x102c: 0x1f73, 0x102d: 0x1f96, 0x102e: 0x1fe6, 0x102f: 0x1ff0,\n\t0x1030: 0x2031, 0x1031: 0x203b, 0x1032: 0x4504, 0x1033: 0x450c, 0x1034: 0x4514, 0x1035: 0x1ef1,\n\t0x1036: 0x1ef6, 0x1037: 0x1f0a, 0x1038: 0x1f0f, 0x1039: 0x1f1e, 0x103a: 0x1f23, 0x103b: 0x1e74,\n\t0x103c: 0x1e79, 0x103d: 0x1e9c, 0x103e: 0x1ea1, 0x103f: 0x1e33,\n\t// Block 0x41, offset 0x1040\n\t0x1040: 0x1e38, 0x1041: 0x1e1f, 0x1042: 0x1e24, 0x1043: 0x1e4c, 0x1044: 0x1e51, 0x1045: 0x1eba,\n\t0x1046: 0x1ebf, 0x1047: 0x1edd, 0x1048: 0x1ee2, 0x1049: 0x1e7e, 0x104a: 0x1e83, 0x104b: 0x1e88,\n\t0x104c: 0x1e92, 0x104d: 0x1e8d, 0x104e: 0x1e65, 0x104f: 0x1eb0, 0x1050: 0x1ed3, 0x1051: 0x1ef1,\n\t0x1052: 0x1ef6, 0x1053: 0x1f0a, 0x1054: 0x1f0f, 0x1055: 0x1f1e, 0x1056: 0x1f23, 0x1057: 0x1e74,\n\t0x1058: 0x1e79, 0x1059: 0x1e9c, 0x105a: 0x1ea1, 0x105b: 0x1e33, 0x105c: 0x1e38, 0x105d: 0x1e1f,\n\t0x105e: 0x1e24, 0x105f: 0x1e4c, 0x1060: 0x1e51, 0x1061: 0x1eba, 0x1062: 0x1ebf, 0x1063: 0x1edd,\n\t0x1064: 0x1ee2, 0x1065: 0x1e7e, 0x1066: 0x1e83, 0x1067: 0x1e88, 0x1068: 0x1e92, 0x1069: 0x1e8d,\n\t0x106a: 0x1e65, 0x106b: 0x1eb0, 0x106c: 0x1ed3, 0x106d: 0x1e7e, 0x106e: 0x1e83, 0x106f: 0x1e88,\n\t0x1070: 0x1e92, 0x1071: 0x1e6f, 0x1072: 0x1e97, 0x1073: 0x1eec, 0x1074: 0x1e56, 0x1075: 0x1e5b,\n\t0x1076: 0x1e60, 0x1077: 0x1e7e, 0x1078: 0x1e83, 0x1079: 0x1e88, 0x107a: 0x1eec, 0x107b: 0x1efb,\n\t0x107c: 0x4408, 0x107d: 0x4408,\n\t// Block 0x42, offset 0x1080\n\t0x1090: 0x2311, 0x1091: 0x2326,\n\t0x1092: 0x2326, 0x1093: 0x232d, 0x1094: 0x2334, 0x1095: 0x2349, 0x1096: 0x2350, 0x1097: 0x2357,\n\t0x1098: 0x237a, 0x1099: 0x237a, 0x109a: 0x239d, 0x109b: 0x2396, 0x109c: 0x23b2, 0x109d: 0x23a4,\n\t0x109e: 0x23ab, 0x109f: 0x23ce, 0x10a0: 0x23ce, 0x10a1: 0x23c7, 0x10a2: 0x23d5, 0x10a3: 0x23d5,\n\t0x10a4: 0x23ff, 0x10a5: 0x23ff, 0x10a6: 0x241b, 0x10a7: 0x23e3, 0x10a8: 0x23e3, 0x10a9: 0x23dc,\n\t0x10aa: 0x23f1, 0x10ab: 0x23f1, 0x10ac: 0x23f8, 0x10ad: 0x23f8, 0x10ae: 0x2422, 0x10af: 0x2430,\n\t0x10b0: 0x2430, 0x10b1: 0x2437, 0x10b2: 0x2437, 0x10b3: 0x243e, 0x10b4: 0x2445, 0x10b5: 0x244c,\n\t0x10b6: 0x2453, 0x10b7: 0x2453, 0x10b8: 0x245a, 0x10b9: 0x2468, 0x10ba: 0x2476, 0x10bb: 0x246f,\n\t0x10bc: 0x247d, 0x10bd: 0x247d, 0x10be: 0x2492, 0x10bf: 0x2499,\n\t// Block 0x43, offset 0x10c0\n\t0x10c0: 0x24ca, 0x10c1: 0x24d8, 0x10c2: 0x24d1, 0x10c3: 0x24b5, 0x10c4: 0x24b5, 0x10c5: 0x24df,\n\t0x10c6: 0x24df, 0x10c7: 0x24e6, 0x10c8: 0x24e6, 0x10c9: 0x2510, 0x10ca: 0x2517, 0x10cb: 0x251e,\n\t0x10cc: 0x24f4, 0x10cd: 0x2502, 0x10ce: 0x2525, 0x10cf: 0x252c,\n\t0x10d2: 0x24fb, 0x10d3: 0x2580, 0x10d4: 0x2587, 0x10d5: 0x255d, 0x10d6: 0x2564, 0x10d7: 0x2548,\n\t0x10d8: 0x2548, 0x10d9: 0x254f, 0x10da: 0x2579, 0x10db: 0x2572, 0x10dc: 0x259c, 0x10dd: 0x259c,\n\t0x10de: 0x230a, 0x10df: 0x231f, 0x10e0: 0x2318, 0x10e1: 0x2342, 0x10e2: 0x233b, 0x10e3: 0x2365,\n\t0x10e4: 0x235e, 0x10e5: 0x2388, 0x10e6: 0x236c, 0x10e7: 0x2381, 0x10e8: 0x23b9, 0x10e9: 0x2406,\n\t0x10ea: 0x23ea, 0x10eb: 0x2429, 0x10ec: 0x24c3, 0x10ed: 0x24ed, 0x10ee: 0x2595, 0x10ef: 0x258e,\n\t0x10f0: 0x25a3, 0x10f1: 0x253a, 0x10f2: 0x24a0, 0x10f3: 0x256b, 0x10f4: 0x2492, 0x10f5: 0x24ca,\n\t0x10f6: 0x2461, 0x10f7: 0x24ae, 0x10f8: 0x2541, 0x10f9: 0x2533, 0x10fa: 0x24bc, 0x10fb: 0x24a7,\n\t0x10fc: 0x24bc, 0x10fd: 0x2541, 0x10fe: 0x2373, 0x10ff: 0x238f,\n\t// Block 0x44, offset 0x1100\n\t0x1100: 0x2509, 0x1101: 0x2484, 0x1102: 0x2303, 0x1103: 0x24a7, 0x1104: 0x244c, 0x1105: 0x241b,\n\t0x1106: 0x23c0, 0x1107: 0x2556,\n\t0x1130: 0x2414, 0x1131: 0x248b, 0x1132: 0x27bf, 0x1133: 0x27b6, 0x1134: 0x27ec, 0x1135: 0x27da,\n\t0x1136: 0x27c8, 0x1137: 0x27e3, 0x1138: 0x27f5, 0x1139: 0x240d, 0x113a: 0x2c7c, 0x113b: 0x2afc,\n\t0x113c: 0x27d1,\n\t// Block 0x45, offset 0x1140\n\t0x1150: 0x0019, 0x1151: 0x0483,\n\t0x1152: 0x0487, 0x1153: 0x0035, 0x1154: 0x0037, 0x1155: 0x0003, 0x1156: 0x003f, 0x1157: 0x04bf,\n\t0x1158: 0x04c3, 0x1159: 0x1b5c,\n\t0x1160: 0x8132, 0x1161: 0x8132, 0x1162: 0x8132, 0x1163: 0x8132,\n\t0x1164: 0x8132, 0x1165: 0x8132, 0x1166: 0x8132, 0x1167: 0x812d, 0x1168: 0x812d, 0x1169: 0x812d,\n\t0x116a: 0x812d, 0x116b: 0x812d, 0x116c: 0x812d, 0x116d: 0x812d, 0x116e: 0x8132, 0x116f: 0x8132,\n\t0x1170: 0x1873, 0x1171: 0x0443, 0x1172: 0x043f, 0x1173: 0x007f, 0x1174: 0x007f, 0x1175: 0x0011,\n\t0x1176: 0x0013, 0x1177: 0x00b7, 0x1178: 0x00bb, 0x1179: 0x04b7, 0x117a: 0x04bb, 0x117b: 0x04ab,\n\t0x117c: 0x04af, 0x117d: 0x0493, 0x117e: 0x0497, 0x117f: 0x048b,\n\t// Block 0x46, offset 0x1180\n\t0x1180: 0x048f, 0x1181: 0x049b, 0x1182: 0x049f, 0x1183: 0x04a3, 0x1184: 0x04a7,\n\t0x1187: 0x0077, 0x1188: 0x007b, 0x1189: 0x4269, 0x118a: 0x4269, 0x118b: 0x4269,\n\t0x118c: 0x4269, 0x118d: 0x007f, 0x118e: 0x007f, 0x118f: 0x007f, 0x1190: 0x0019, 0x1191: 0x0483,\n\t0x1192: 0x001d, 0x1194: 0x0037, 0x1195: 0x0035, 0x1196: 0x003f, 0x1197: 0x0003,\n\t0x1198: 0x0443, 0x1199: 0x0011, 0x119a: 0x0013, 0x119b: 0x00b7, 0x119c: 0x00bb, 0x119d: 0x04b7,\n\t0x119e: 0x04bb, 0x119f: 0x0007, 0x11a0: 0x000d, 0x11a1: 0x0015, 0x11a2: 0x0017, 0x11a3: 0x001b,\n\t0x11a4: 0x0039, 0x11a5: 0x003d, 0x11a6: 0x003b, 0x11a8: 0x0079, 0x11a9: 0x0009,\n\t0x11aa: 0x000b, 0x11ab: 0x0041,\n\t0x11b0: 0x42aa, 0x11b1: 0x442c, 0x11b2: 0x42af, 0x11b4: 0x42b4,\n\t0x11b6: 0x42b9, 0x11b7: 0x4432, 0x11b8: 0x42be, 0x11b9: 0x4438, 0x11ba: 0x42c3, 0x11bb: 0x443e,\n\t0x11bc: 0x42c8, 0x11bd: 0x4444, 0x11be: 0x42cd, 0x11bf: 0x444a,\n\t// Block 0x47, offset 0x11c0\n\t0x11c0: 0x0236, 0x11c1: 0x440e, 0x11c2: 0x440e, 0x11c3: 0x4414, 0x11c4: 0x4414, 0x11c5: 0x4456,\n\t0x11c6: 0x4456, 0x11c7: 0x441a, 0x11c8: 0x441a, 0x11c9: 0x4462, 0x11ca: 0x4462, 0x11cb: 0x4462,\n\t0x11cc: 0x4462, 0x11cd: 0x0239, 0x11ce: 0x0239, 0x11cf: 0x023c, 0x11d0: 0x023c, 0x11d1: 0x023c,\n\t0x11d2: 0x023c, 0x11d3: 0x023f, 0x11d4: 0x023f, 0x11d5: 0x0242, 0x11d6: 0x0242, 0x11d7: 0x0242,\n\t0x11d8: 0x0242, 0x11d9: 0x0245, 0x11da: 0x0245, 0x11db: 0x0245, 0x11dc: 0x0245, 0x11dd: 0x0248,\n\t0x11de: 0x0248, 0x11df: 0x0248, 0x11e0: 0x0248, 0x11e1: 0x024b, 0x11e2: 0x024b, 0x11e3: 0x024b,\n\t0x11e4: 0x024b, 0x11e5: 0x024e, 0x11e6: 0x024e, 0x11e7: 0x024e, 0x11e8: 0x024e, 0x11e9: 0x0251,\n\t0x11ea: 0x0251, 0x11eb: 0x0254, 0x11ec: 0x0254, 0x11ed: 0x0257, 0x11ee: 0x0257, 0x11ef: 0x025a,\n\t0x11f0: 0x025a, 0x11f1: 0x025d, 0x11f2: 0x025d, 0x11f3: 0x025d, 0x11f4: 0x025d, 0x11f5: 0x0260,\n\t0x11f6: 0x0260, 0x11f7: 0x0260, 0x11f8: 0x0260, 0x11f9: 0x0263, 0x11fa: 0x0263, 0x11fb: 0x0263,\n\t0x11fc: 0x0263, 0x11fd: 0x0266, 0x11fe: 0x0266, 0x11ff: 0x0266,\n\t// Block 0x48, offset 0x1200\n\t0x1200: 0x0266, 0x1201: 0x0269, 0x1202: 0x0269, 0x1203: 0x0269, 0x1204: 0x0269, 0x1205: 0x026c,\n\t0x1206: 0x026c, 0x1207: 0x026c, 0x1208: 0x026c, 0x1209: 0x026f, 0x120a: 0x026f, 0x120b: 0x026f,\n\t0x120c: 0x026f, 0x120d: 0x0272, 0x120e: 0x0272, 0x120f: 0x0272, 0x1210: 0x0272, 0x1211: 0x0275,\n\t0x1212: 0x0275, 0x1213: 0x0275, 0x1214: 0x0275, 0x1215: 0x0278, 0x1216: 0x0278, 0x1217: 0x0278,\n\t0x1218: 0x0278, 0x1219: 0x027b, 0x121a: 0x027b, 0x121b: 0x027b, 0x121c: 0x027b, 0x121d: 0x027e,\n\t0x121e: 0x027e, 0x121f: 0x027e, 0x1220: 0x027e, 0x1221: 0x0281, 0x1222: 0x0281, 0x1223: 0x0281,\n\t0x1224: 0x0281, 0x1225: 0x0284, 0x1226: 0x0284, 0x1227: 0x0284, 0x1228: 0x0284, 0x1229: 0x0287,\n\t0x122a: 0x0287, 0x122b: 0x0287, 0x122c: 0x0287, 0x122d: 0x028a, 0x122e: 0x028a, 0x122f: 0x028d,\n\t0x1230: 0x028d, 0x1231: 0x0290, 0x1232: 0x0290, 0x1233: 0x0290, 0x1234: 0x0290, 0x1235: 0x2e00,\n\t0x1236: 0x2e00, 0x1237: 0x2e08, 0x1238: 0x2e08, 0x1239: 0x2e10, 0x123a: 0x2e10, 0x123b: 0x1f82,\n\t0x123c: 0x1f82,\n\t// Block 0x49, offset 0x1240\n\t0x1240: 0x0081, 0x1241: 0x0083, 0x1242: 0x0085, 0x1243: 0x0087, 0x1244: 0x0089, 0x1245: 0x008b,\n\t0x1246: 0x008d, 0x1247: 0x008f, 0x1248: 0x0091, 0x1249: 0x0093, 0x124a: 0x0095, 0x124b: 0x0097,\n\t0x124c: 0x0099, 0x124d: 0x009b, 0x124e: 0x009d, 0x124f: 0x009f, 0x1250: 0x00a1, 0x1251: 0x00a3,\n\t0x1252: 0x00a5, 0x1253: 0x00a7, 0x1254: 0x00a9, 0x1255: 0x00ab, 0x1256: 0x00ad, 0x1257: 0x00af,\n\t0x1258: 0x00b1, 0x1259: 0x00b3, 0x125a: 0x00b5, 0x125b: 0x00b7, 0x125c: 0x00b9, 0x125d: 0x00bb,\n\t0x125e: 0x00bd, 0x125f: 0x0477, 0x1260: 0x047b, 0x1261: 0x0487, 0x1262: 0x049b, 0x1263: 0x049f,\n\t0x1264: 0x0483, 0x1265: 0x05ab, 0x1266: 0x05a3, 0x1267: 0x04c7, 0x1268: 0x04cf, 0x1269: 0x04d7,\n\t0x126a: 0x04df, 0x126b: 0x04e7, 0x126c: 0x056b, 0x126d: 0x0573, 0x126e: 0x057b, 0x126f: 0x051f,\n\t0x1270: 0x05af, 0x1271: 0x04cb, 0x1272: 0x04d3, 0x1273: 0x04db, 0x1274: 0x04e3, 0x1275: 0x04eb,\n\t0x1276: 0x04ef, 0x1277: 0x04f3, 0x1278: 0x04f7, 0x1279: 0x04fb, 0x127a: 0x04ff, 0x127b: 0x0503,\n\t0x127c: 0x0507, 0x127d: 0x050b, 0x127e: 0x050f, 0x127f: 0x0513,\n\t// Block 0x4a, offset 0x1280\n\t0x1280: 0x0517, 0x1281: 0x051b, 0x1282: 0x0523, 0x1283: 0x0527, 0x1284: 0x052b, 0x1285: 0x052f,\n\t0x1286: 0x0533, 0x1287: 0x0537, 0x1288: 0x053b, 0x1289: 0x053f, 0x128a: 0x0543, 0x128b: 0x0547,\n\t0x128c: 0x054b, 0x128d: 0x054f, 0x128e: 0x0553, 0x128f: 0x0557, 0x1290: 0x055b, 0x1291: 0x055f,\n\t0x1292: 0x0563, 0x1293: 0x0567, 0x1294: 0x056f, 0x1295: 0x0577, 0x1296: 0x057f, 0x1297: 0x0583,\n\t0x1298: 0x0587, 0x1299: 0x058b, 0x129a: 0x058f, 0x129b: 0x0593, 0x129c: 0x0597, 0x129d: 0x05a7,\n\t0x129e: 0x4a78, 0x129f: 0x4a7e, 0x12a0: 0x03c3, 0x12a1: 0x0313, 0x12a2: 0x0317, 0x12a3: 0x4a3b,\n\t0x12a4: 0x031b, 0x12a5: 0x4a41, 0x12a6: 0x4a47, 0x12a7: 0x031f, 0x12a8: 0x0323, 0x12a9: 0x0327,\n\t0x12aa: 0x4a4d, 0x12ab: 0x4a53, 0x12ac: 0x4a59, 0x12ad: 0x4a5f, 0x12ae: 0x4a65, 0x12af: 0x4a6b,\n\t0x12b0: 0x0367, 0x12b1: 0x032b, 0x12b2: 0x032f, 0x12b3: 0x0333, 0x12b4: 0x037b, 0x12b5: 0x0337,\n\t0x12b6: 0x033b, 0x12b7: 0x033f, 0x12b8: 0x0343, 0x12b9: 0x0347, 0x12ba: 0x034b, 0x12bb: 0x034f,\n\t0x12bc: 0x0353, 0x12bd: 0x0357, 0x12be: 0x035b,\n\t// Block 0x4b, offset 0x12c0\n\t0x12c2: 0x49bd, 0x12c3: 0x49c3, 0x12c4: 0x49c9, 0x12c5: 0x49cf,\n\t0x12c6: 0x49d5, 0x12c7: 0x49db, 0x12ca: 0x49e1, 0x12cb: 0x49e7,\n\t0x12cc: 0x49ed, 0x12cd: 0x49f3, 0x12ce: 0x49f9, 0x12cf: 0x49ff,\n\t0x12d2: 0x4a05, 0x12d3: 0x4a0b, 0x12d4: 0x4a11, 0x12d5: 0x4a17, 0x12d6: 0x4a1d, 0x12d7: 0x4a23,\n\t0x12da: 0x4a29, 0x12db: 0x4a2f, 0x12dc: 0x4a35,\n\t0x12e0: 0x00bf, 0x12e1: 0x00c2, 0x12e2: 0x00cb, 0x12e3: 0x4264,\n\t0x12e4: 0x00c8, 0x12e5: 0x00c5, 0x12e6: 0x0447, 0x12e8: 0x046b, 0x12e9: 0x044b,\n\t0x12ea: 0x044f, 0x12eb: 0x0453, 0x12ec: 0x0457, 0x12ed: 0x046f, 0x12ee: 0x0473,\n\t// Block 0x4c, offset 0x1300\n\t0x1300: 0x0063, 0x1301: 0x0065, 0x1302: 0x0067, 0x1303: 0x0069, 0x1304: 0x006b, 0x1305: 0x006d,\n\t0x1306: 0x006f, 0x1307: 0x0071, 0x1308: 0x0073, 0x1309: 0x0075, 0x130a: 0x0083, 0x130b: 0x0085,\n\t0x130c: 0x0087, 0x130d: 0x0089, 0x130e: 0x008b, 0x130f: 0x008d, 0x1310: 0x008f, 0x1311: 0x0091,\n\t0x1312: 0x0093, 0x1313: 0x0095, 0x1314: 0x0097, 0x1315: 0x0099, 0x1316: 0x009b, 0x1317: 0x009d,\n\t0x1318: 0x009f, 0x1319: 0x00a1, 0x131a: 0x00a3, 0x131b: 0x00a5, 0x131c: 0x00a7, 0x131d: 0x00a9,\n\t0x131e: 0x00ab, 0x131f: 0x00ad, 0x1320: 0x00af, 0x1321: 0x00b1, 0x1322: 0x00b3, 0x1323: 0x00b5,\n\t0x1324: 0x00dd, 0x1325: 0x00f2, 0x1328: 0x0173, 0x1329: 0x0176,\n\t0x132a: 0x0179, 0x132b: 0x017c, 0x132c: 0x017f, 0x132d: 0x0182, 0x132e: 0x0185, 0x132f: 0x0188,\n\t0x1330: 0x018b, 0x1331: 0x018e, 0x1332: 0x0191, 0x1333: 0x0194, 0x1334: 0x0197, 0x1335: 0x019a,\n\t0x1336: 0x019d, 0x1337: 0x01a0, 0x1338: 0x01a3, 0x1339: 0x0188, 0x133a: 0x01a6, 0x133b: 0x01a9,\n\t0x133c: 0x01ac, 0x133d: 0x01af, 0x133e: 0x01b2, 0x133f: 0x01b5,\n\t// Block 0x4d, offset 0x1340\n\t0x1340: 0x01fd, 0x1341: 0x0200, 0x1342: 0x0203, 0x1343: 0x045b, 0x1344: 0x01c7, 0x1345: 0x01d0,\n\t0x1346: 0x01d6, 0x1347: 0x01fa, 0x1348: 0x01eb, 0x1349: 0x01e8, 0x134a: 0x0206, 0x134b: 0x0209,\n\t0x134e: 0x0021, 0x134f: 0x0023, 0x1350: 0x0025, 0x1351: 0x0027,\n\t0x1352: 0x0029, 0x1353: 0x002b, 0x1354: 0x002d, 0x1355: 0x002f, 0x1356: 0x0031, 0x1357: 0x0033,\n\t0x1358: 0x0021, 0x1359: 0x0023, 0x135a: 0x0025, 0x135b: 0x0027, 0x135c: 0x0029, 0x135d: 0x002b,\n\t0x135e: 0x002d, 0x135f: 0x002f, 0x1360: 0x0031, 0x1361: 0x0033, 0x1362: 0x0021, 0x1363: 0x0023,\n\t0x1364: 0x0025, 0x1365: 0x0027, 0x1366: 0x0029, 0x1367: 0x002b, 0x1368: 0x002d, 0x1369: 0x002f,\n\t0x136a: 0x0031, 0x136b: 0x0033, 0x136c: 0x0021, 0x136d: 0x0023, 0x136e: 0x0025, 0x136f: 0x0027,\n\t0x1370: 0x0029, 0x1371: 0x002b, 0x1372: 0x002d, 0x1373: 0x002f, 0x1374: 0x0031, 0x1375: 0x0033,\n\t0x1376: 0x0021, 0x1377: 0x0023, 0x1378: 0x0025, 0x1379: 0x0027, 0x137a: 0x0029, 0x137b: 0x002b,\n\t0x137c: 0x002d, 0x137d: 0x002f, 0x137e: 0x0031, 0x137f: 0x0033,\n\t// Block 0x4e, offset 0x1380\n\t0x1380: 0x0239, 0x1381: 0x023c, 0x1382: 0x0248, 0x1383: 0x0251, 0x1385: 0x028a,\n\t0x1386: 0x025a, 0x1387: 0x024b, 0x1388: 0x0269, 0x1389: 0x0290, 0x138a: 0x027b, 0x138b: 0x027e,\n\t0x138c: 0x0281, 0x138d: 0x0284, 0x138e: 0x025d, 0x138f: 0x026f, 0x1390: 0x0275, 0x1391: 0x0263,\n\t0x1392: 0x0278, 0x1393: 0x0257, 0x1394: 0x0260, 0x1395: 0x0242, 0x1396: 0x0245, 0x1397: 0x024e,\n\t0x1398: 0x0254, 0x1399: 0x0266, 0x139a: 0x026c, 0x139b: 0x0272, 0x139c: 0x0293, 0x139d: 0x02e4,\n\t0x139e: 0x02cc, 0x139f: 0x0296, 0x13a1: 0x023c, 0x13a2: 0x0248,\n\t0x13a4: 0x0287, 0x13a7: 0x024b, 0x13a9: 0x0290,\n\t0x13aa: 0x027b, 0x13ab: 0x027e, 0x13ac: 0x0281, 0x13ad: 0x0284, 0x13ae: 0x025d, 0x13af: 0x026f,\n\t0x13b0: 0x0275, 0x13b1: 0x0263, 0x13b2: 0x0278, 0x13b4: 0x0260, 0x13b5: 0x0242,\n\t0x13b6: 0x0245, 0x13b7: 0x024e, 0x13b9: 0x0266, 0x13bb: 0x0272,\n\t// Block 0x4f, offset 0x13c0\n\t0x13c2: 0x0248,\n\t0x13c7: 0x024b, 0x13c9: 0x0290, 0x13cb: 0x027e,\n\t0x13cd: 0x0284, 0x13ce: 0x025d, 0x13cf: 0x026f, 0x13d1: 0x0263,\n\t0x13d2: 0x0278, 0x13d4: 0x0260, 0x13d7: 0x024e,\n\t0x13d9: 0x0266, 0x13db: 0x0272, 0x13dd: 0x02e4,\n\t0x13df: 0x0296, 0x13e1: 0x023c, 0x13e2: 0x0248,\n\t0x13e4: 0x0287, 0x13e7: 0x024b, 0x13e8: 0x0269, 0x13e9: 0x0290,\n\t0x13ea: 0x027b, 0x13ec: 0x0281, 0x13ed: 0x0284, 0x13ee: 0x025d, 0x13ef: 0x026f,\n\t0x13f0: 0x0275, 0x13f1: 0x0263, 0x13f2: 0x0278, 0x13f4: 0x0260, 0x13f5: 0x0242,\n\t0x13f6: 0x0245, 0x13f7: 0x024e, 0x13f9: 0x0266, 0x13fa: 0x026c, 0x13fb: 0x0272,\n\t0x13fc: 0x0293, 0x13fe: 0x02cc,\n\t// Block 0x50, offset 0x1400\n\t0x1400: 0x0239, 0x1401: 0x023c, 0x1402: 0x0248, 0x1403: 0x0251, 0x1404: 0x0287, 0x1405: 0x028a,\n\t0x1406: 0x025a, 0x1407: 0x024b, 0x1408: 0x0269, 0x1409: 0x0290, 0x140b: 0x027e,\n\t0x140c: 0x0281, 0x140d: 0x0284, 0x140e: 0x025d, 0x140f: 0x026f, 0x1410: 0x0275, 0x1411: 0x0263,\n\t0x1412: 0x0278, 0x1413: 0x0257, 0x1414: 0x0260, 0x1415: 0x0242, 0x1416: 0x0245, 0x1417: 0x024e,\n\t0x1418: 0x0254, 0x1419: 0x0266, 0x141a: 0x026c, 0x141b: 0x0272,\n\t0x1421: 0x023c, 0x1422: 0x0248, 0x1423: 0x0251,\n\t0x1425: 0x028a, 0x1426: 0x025a, 0x1427: 0x024b, 0x1428: 0x0269, 0x1429: 0x0290,\n\t0x142b: 0x027e, 0x142c: 0x0281, 0x142d: 0x0284, 0x142e: 0x025d, 0x142f: 0x026f,\n\t0x1430: 0x0275, 0x1431: 0x0263, 0x1432: 0x0278, 0x1433: 0x0257, 0x1434: 0x0260, 0x1435: 0x0242,\n\t0x1436: 0x0245, 0x1437: 0x024e, 0x1438: 0x0254, 0x1439: 0x0266, 0x143a: 0x026c, 0x143b: 0x0272,\n\t// Block 0x51, offset 0x1440\n\t0x1440: 0x1879, 0x1441: 0x1876, 0x1442: 0x187c, 0x1443: 0x18a0, 0x1444: 0x18c4, 0x1445: 0x18e8,\n\t0x1446: 0x190c, 0x1447: 0x1915, 0x1448: 0x191b, 0x1449: 0x1921, 0x144a: 0x1927,\n\t0x1450: 0x1a8c, 0x1451: 0x1a90,\n\t0x1452: 0x1a94, 0x1453: 0x1a98, 0x1454: 0x1a9c, 0x1455: 0x1aa0, 0x1456: 0x1aa4, 0x1457: 0x1aa8,\n\t0x1458: 0x1aac, 0x1459: 0x1ab0, 0x145a: 0x1ab4, 0x145b: 0x1ab8, 0x145c: 0x1abc, 0x145d: 0x1ac0,\n\t0x145e: 0x1ac4, 0x145f: 0x1ac8, 0x1460: 0x1acc, 0x1461: 0x1ad0, 0x1462: 0x1ad4, 0x1463: 0x1ad8,\n\t0x1464: 0x1adc, 0x1465: 0x1ae0, 0x1466: 0x1ae4, 0x1467: 0x1ae8, 0x1468: 0x1aec, 0x1469: 0x1af0,\n\t0x146a: 0x271e, 0x146b: 0x0047, 0x146c: 0x0065, 0x146d: 0x193c, 0x146e: 0x19b1,\n\t0x1470: 0x0043, 0x1471: 0x0045, 0x1472: 0x0047, 0x1473: 0x0049, 0x1474: 0x004b, 0x1475: 0x004d,\n\t0x1476: 0x004f, 0x1477: 0x0051, 0x1478: 0x0053, 0x1479: 0x0055, 0x147a: 0x0057, 0x147b: 0x0059,\n\t0x147c: 0x005b, 0x147d: 0x005d, 0x147e: 0x005f, 0x147f: 0x0061,\n\t// Block 0x52, offset 0x1480\n\t0x1480: 0x26ad, 0x1481: 0x26c2, 0x1482: 0x0503,\n\t0x1490: 0x0c0f, 0x1491: 0x0a47,\n\t0x1492: 0x08d3, 0x1493: 0x45c4, 0x1494: 0x071b, 0x1495: 0x09ef, 0x1496: 0x132f, 0x1497: 0x09ff,\n\t0x1498: 0x0727, 0x1499: 0x0cd7, 0x149a: 0x0eaf, 0x149b: 0x0caf, 0x149c: 0x0827, 0x149d: 0x0b6b,\n\t0x149e: 0x07bf, 0x149f: 0x0cb7, 0x14a0: 0x0813, 0x14a1: 0x1117, 0x14a2: 0x0f83, 0x14a3: 0x138b,\n\t0x14a4: 0x09d3, 0x14a5: 0x090b, 0x14a6: 0x0e63, 0x14a7: 0x0c1b, 0x14a8: 0x0c47, 0x14a9: 0x06bf,\n\t0x14aa: 0x06cb, 0x14ab: 0x140b, 0x14ac: 0x0adb, 0x14ad: 0x06e7, 0x14ae: 0x08ef, 0x14af: 0x0c3b,\n\t0x14b0: 0x13b3, 0x14b1: 0x0c13, 0x14b2: 0x106f, 0x14b3: 0x10ab, 0x14b4: 0x08f7, 0x14b5: 0x0e43,\n\t0x14b6: 0x0d0b, 0x14b7: 0x0d07, 0x14b8: 0x0f97, 0x14b9: 0x082b, 0x14ba: 0x0957, 0x14bb: 0x1443,\n\t// Block 0x53, offset 0x14c0\n\t0x14c0: 0x06fb, 0x14c1: 0x06f3, 0x14c2: 0x0703, 0x14c3: 0x1647, 0x14c4: 0x0747, 0x14c5: 0x0757,\n\t0x14c6: 0x075b, 0x14c7: 0x0763, 0x14c8: 0x076b, 0x14c9: 0x076f, 0x14ca: 0x077b, 0x14cb: 0x0773,\n\t0x14cc: 0x05b3, 0x14cd: 0x165b, 0x14ce: 0x078f, 0x14cf: 0x0793, 0x14d0: 0x0797, 0x14d1: 0x07b3,\n\t0x14d2: 0x164c, 0x14d3: 0x05b7, 0x14d4: 0x079f, 0x14d5: 0x07bf, 0x14d6: 0x1656, 0x14d7: 0x07cf,\n\t0x14d8: 0x07d7, 0x14d9: 0x0737, 0x14da: 0x07df, 0x14db: 0x07e3, 0x14dc: 0x1831, 0x14dd: 0x07ff,\n\t0x14de: 0x0807, 0x14df: 0x05bf, 0x14e0: 0x081f, 0x14e1: 0x0823, 0x14e2: 0x082b, 0x14e3: 0x082f,\n\t0x14e4: 0x05c3, 0x14e5: 0x0847, 0x14e6: 0x084b, 0x14e7: 0x0857, 0x14e8: 0x0863, 0x14e9: 0x0867,\n\t0x14ea: 0x086b, 0x14eb: 0x0873, 0x14ec: 0x0893, 0x14ed: 0x0897, 0x14ee: 0x089f, 0x14ef: 0x08af,\n\t0x14f0: 0x08b7, 0x14f1: 0x08bb, 0x14f2: 0x08bb, 0x14f3: 0x08bb, 0x14f4: 0x166a, 0x14f5: 0x0e93,\n\t0x14f6: 0x08cf, 0x14f7: 0x08d7, 0x14f8: 0x166f, 0x14f9: 0x08e3, 0x14fa: 0x08eb, 0x14fb: 0x08f3,\n\t0x14fc: 0x091b, 0x14fd: 0x0907, 0x14fe: 0x0913, 0x14ff: 0x0917,\n\t// Block 0x54, offset 0x1500\n\t0x1500: 0x091f, 0x1501: 0x0927, 0x1502: 0x092b, 0x1503: 0x0933, 0x1504: 0x093b, 0x1505: 0x093f,\n\t0x1506: 0x093f, 0x1507: 0x0947, 0x1508: 0x094f, 0x1509: 0x0953, 0x150a: 0x095f, 0x150b: 0x0983,\n\t0x150c: 0x0967, 0x150d: 0x0987, 0x150e: 0x096b, 0x150f: 0x0973, 0x1510: 0x080b, 0x1511: 0x09cf,\n\t0x1512: 0x0997, 0x1513: 0x099b, 0x1514: 0x099f, 0x1515: 0x0993, 0x1516: 0x09a7, 0x1517: 0x09a3,\n\t0x1518: 0x09bb, 0x1519: 0x1674, 0x151a: 0x09d7, 0x151b: 0x09db, 0x151c: 0x09e3, 0x151d: 0x09ef,\n\t0x151e: 0x09f7, 0x151f: 0x0a13, 0x1520: 0x1679, 0x1521: 0x167e, 0x1522: 0x0a1f, 0x1523: 0x0a23,\n\t0x1524: 0x0a27, 0x1525: 0x0a1b, 0x1526: 0x0a2f, 0x1527: 0x05c7, 0x1528: 0x05cb, 0x1529: 0x0a37,\n\t0x152a: 0x0a3f, 0x152b: 0x0a3f, 0x152c: 0x1683, 0x152d: 0x0a5b, 0x152e: 0x0a5f, 0x152f: 0x0a63,\n\t0x1530: 0x0a6b, 0x1531: 0x1688, 0x1532: 0x0a73, 0x1533: 0x0a77, 0x1534: 0x0b4f, 0x1535: 0x0a7f,\n\t0x1536: 0x05cf, 0x1537: 0x0a8b, 0x1538: 0x0a9b, 0x1539: 0x0aa7, 0x153a: 0x0aa3, 0x153b: 0x1692,\n\t0x153c: 0x0aaf, 0x153d: 0x1697, 0x153e: 0x0abb, 0x153f: 0x0ab7,\n\t// Block 0x55, offset 0x1540\n\t0x1540: 0x0abf, 0x1541: 0x0acf, 0x1542: 0x0ad3, 0x1543: 0x05d3, 0x1544: 0x0ae3, 0x1545: 0x0aeb,\n\t0x1546: 0x0aef, 0x1547: 0x0af3, 0x1548: 0x05d7, 0x1549: 0x169c, 0x154a: 0x05db, 0x154b: 0x0b0f,\n\t0x154c: 0x0b13, 0x154d: 0x0b17, 0x154e: 0x0b1f, 0x154f: 0x1863, 0x1550: 0x0b37, 0x1551: 0x16a6,\n\t0x1552: 0x16a6, 0x1553: 0x11d7, 0x1554: 0x0b47, 0x1555: 0x0b47, 0x1556: 0x05df, 0x1557: 0x16c9,\n\t0x1558: 0x179b, 0x1559: 0x0b57, 0x155a: 0x0b5f, 0x155b: 0x05e3, 0x155c: 0x0b73, 0x155d: 0x0b83,\n\t0x155e: 0x0b87, 0x155f: 0x0b8f, 0x1560: 0x0b9f, 0x1561: 0x05eb, 0x1562: 0x05e7, 0x1563: 0x0ba3,\n\t0x1564: 0x16ab, 0x1565: 0x0ba7, 0x1566: 0x0bbb, 0x1567: 0x0bbf, 0x1568: 0x0bc3, 0x1569: 0x0bbf,\n\t0x156a: 0x0bcf, 0x156b: 0x0bd3, 0x156c: 0x0be3, 0x156d: 0x0bdb, 0x156e: 0x0bdf, 0x156f: 0x0be7,\n\t0x1570: 0x0beb, 0x1571: 0x0bef, 0x1572: 0x0bfb, 0x1573: 0x0bff, 0x1574: 0x0c17, 0x1575: 0x0c1f,\n\t0x1576: 0x0c2f, 0x1577: 0x0c43, 0x1578: 0x16ba, 0x1579: 0x0c3f, 0x157a: 0x0c33, 0x157b: 0x0c4b,\n\t0x157c: 0x0c53, 0x157d: 0x0c67, 0x157e: 0x16bf, 0x157f: 0x0c6f,\n\t// Block 0x56, offset 0x1580\n\t0x1580: 0x0c63, 0x1581: 0x0c5b, 0x1582: 0x05ef, 0x1583: 0x0c77, 0x1584: 0x0c7f, 0x1585: 0x0c87,\n\t0x1586: 0x0c7b, 0x1587: 0x05f3, 0x1588: 0x0c97, 0x1589: 0x0c9f, 0x158a: 0x16c4, 0x158b: 0x0ccb,\n\t0x158c: 0x0cff, 0x158d: 0x0cdb, 0x158e: 0x05ff, 0x158f: 0x0ce7, 0x1590: 0x05fb, 0x1591: 0x05f7,\n\t0x1592: 0x07c3, 0x1593: 0x07c7, 0x1594: 0x0d03, 0x1595: 0x0ceb, 0x1596: 0x11ab, 0x1597: 0x0663,\n\t0x1598: 0x0d0f, 0x1599: 0x0d13, 0x159a: 0x0d17, 0x159b: 0x0d2b, 0x159c: 0x0d23, 0x159d: 0x16dd,\n\t0x159e: 0x0603, 0x159f: 0x0d3f, 0x15a0: 0x0d33, 0x15a1: 0x0d4f, 0x15a2: 0x0d57, 0x15a3: 0x16e7,\n\t0x15a4: 0x0d5b, 0x15a5: 0x0d47, 0x15a6: 0x0d63, 0x15a7: 0x0607, 0x15a8: 0x0d67, 0x15a9: 0x0d6b,\n\t0x15aa: 0x0d6f, 0x15ab: 0x0d7b, 0x15ac: 0x16ec, 0x15ad: 0x0d83, 0x15ae: 0x060b, 0x15af: 0x0d8f,\n\t0x15b0: 0x16f1, 0x15b1: 0x0d93, 0x15b2: 0x060f, 0x15b3: 0x0d9f, 0x15b4: 0x0dab, 0x15b5: 0x0db7,\n\t0x15b6: 0x0dbb, 0x15b7: 0x16f6, 0x15b8: 0x168d, 0x15b9: 0x16fb, 0x15ba: 0x0ddb, 0x15bb: 0x1700,\n\t0x15bc: 0x0de7, 0x15bd: 0x0def, 0x15be: 0x0ddf, 0x15bf: 0x0dfb,\n\t// Block 0x57, offset 0x15c0\n\t0x15c0: 0x0e0b, 0x15c1: 0x0e1b, 0x15c2: 0x0e0f, 0x15c3: 0x0e13, 0x15c4: 0x0e1f, 0x15c5: 0x0e23,\n\t0x15c6: 0x1705, 0x15c7: 0x0e07, 0x15c8: 0x0e3b, 0x15c9: 0x0e3f, 0x15ca: 0x0613, 0x15cb: 0x0e53,\n\t0x15cc: 0x0e4f, 0x15cd: 0x170a, 0x15ce: 0x0e33, 0x15cf: 0x0e6f, 0x15d0: 0x170f, 0x15d1: 0x1714,\n\t0x15d2: 0x0e73, 0x15d3: 0x0e87, 0x15d4: 0x0e83, 0x15d5: 0x0e7f, 0x15d6: 0x0617, 0x15d7: 0x0e8b,\n\t0x15d8: 0x0e9b, 0x15d9: 0x0e97, 0x15da: 0x0ea3, 0x15db: 0x1651, 0x15dc: 0x0eb3, 0x15dd: 0x1719,\n\t0x15de: 0x0ebf, 0x15df: 0x1723, 0x15e0: 0x0ed3, 0x15e1: 0x0edf, 0x15e2: 0x0ef3, 0x15e3: 0x1728,\n\t0x15e4: 0x0f07, 0x15e5: 0x0f0b, 0x15e6: 0x172d, 0x15e7: 0x1732, 0x15e8: 0x0f27, 0x15e9: 0x0f37,\n\t0x15ea: 0x061b, 0x15eb: 0x0f3b, 0x15ec: 0x061f, 0x15ed: 0x061f, 0x15ee: 0x0f53, 0x15ef: 0x0f57,\n\t0x15f0: 0x0f5f, 0x15f1: 0x0f63, 0x15f2: 0x0f6f, 0x15f3: 0x0623, 0x15f4: 0x0f87, 0x15f5: 0x1737,\n\t0x15f6: 0x0fa3, 0x15f7: 0x173c, 0x15f8: 0x0faf, 0x15f9: 0x16a1, 0x15fa: 0x0fbf, 0x15fb: 0x1741,\n\t0x15fc: 0x1746, 0x15fd: 0x174b, 0x15fe: 0x0627, 0x15ff: 0x062b,\n\t// Block 0x58, offset 0x1600\n\t0x1600: 0x0ff7, 0x1601: 0x1755, 0x1602: 0x1750, 0x1603: 0x175a, 0x1604: 0x175f, 0x1605: 0x0fff,\n\t0x1606: 0x1003, 0x1607: 0x1003, 0x1608: 0x100b, 0x1609: 0x0633, 0x160a: 0x100f, 0x160b: 0x0637,\n\t0x160c: 0x063b, 0x160d: 0x1769, 0x160e: 0x1023, 0x160f: 0x102b, 0x1610: 0x1037, 0x1611: 0x063f,\n\t0x1612: 0x176e, 0x1613: 0x105b, 0x1614: 0x1773, 0x1615: 0x1778, 0x1616: 0x107b, 0x1617: 0x1093,\n\t0x1618: 0x0643, 0x1619: 0x109b, 0x161a: 0x109f, 0x161b: 0x10a3, 0x161c: 0x177d, 0x161d: 0x1782,\n\t0x161e: 0x1782, 0x161f: 0x10bb, 0x1620: 0x0647, 0x1621: 0x1787, 0x1622: 0x10cf, 0x1623: 0x10d3,\n\t0x1624: 0x064b, 0x1625: 0x178c, 0x1626: 0x10ef, 0x1627: 0x064f, 0x1628: 0x10ff, 0x1629: 0x10f7,\n\t0x162a: 0x1107, 0x162b: 0x1796, 0x162c: 0x111f, 0x162d: 0x0653, 0x162e: 0x112b, 0x162f: 0x1133,\n\t0x1630: 0x1143, 0x1631: 0x0657, 0x1632: 0x17a0, 0x1633: 0x17a5, 0x1634: 0x065b, 0x1635: 0x17aa,\n\t0x1636: 0x115b, 0x1637: 0x17af, 0x1638: 0x1167, 0x1639: 0x1173, 0x163a: 0x117b, 0x163b: 0x17b4,\n\t0x163c: 0x17b9, 0x163d: 0x118f, 0x163e: 0x17be, 0x163f: 0x1197,\n\t// Block 0x59, offset 0x1640\n\t0x1640: 0x16ce, 0x1641: 0x065f, 0x1642: 0x11af, 0x1643: 0x11b3, 0x1644: 0x0667, 0x1645: 0x11b7,\n\t0x1646: 0x0a33, 0x1647: 0x17c3, 0x1648: 0x17c8, 0x1649: 0x16d3, 0x164a: 0x16d8, 0x164b: 0x11d7,\n\t0x164c: 0x11db, 0x164d: 0x13f3, 0x164e: 0x066b, 0x164f: 0x1207, 0x1650: 0x1203, 0x1651: 0x120b,\n\t0x1652: 0x083f, 0x1653: 0x120f, 0x1654: 0x1213, 0x1655: 0x1217, 0x1656: 0x121f, 0x1657: 0x17cd,\n\t0x1658: 0x121b, 0x1659: 0x1223, 0x165a: 0x1237, 0x165b: 0x123b, 0x165c: 0x1227, 0x165d: 0x123f,\n\t0x165e: 0x1253, 0x165f: 0x1267, 0x1660: 0x1233, 0x1661: 0x1247, 0x1662: 0x124b, 0x1663: 0x124f,\n\t0x1664: 0x17d2, 0x1665: 0x17dc, 0x1666: 0x17d7, 0x1667: 0x066f, 0x1668: 0x126f, 0x1669: 0x1273,\n\t0x166a: 0x127b, 0x166b: 0x17f0, 0x166c: 0x127f, 0x166d: 0x17e1, 0x166e: 0x0673, 0x166f: 0x0677,\n\t0x1670: 0x17e6, 0x1671: 0x17eb, 0x1672: 0x067b, 0x1673: 0x129f, 0x1674: 0x12a3, 0x1675: 0x12a7,\n\t0x1676: 0x12ab, 0x1677: 0x12b7, 0x1678: 0x12b3, 0x1679: 0x12bf, 0x167a: 0x12bb, 0x167b: 0x12cb,\n\t0x167c: 0x12c3, 0x167d: 0x12c7, 0x167e: 0x12cf, 0x167f: 0x067f,\n\t// Block 0x5a, offset 0x1680\n\t0x1680: 0x12d7, 0x1681: 0x12db, 0x1682: 0x0683, 0x1683: 0x12eb, 0x1684: 0x12ef, 0x1685: 0x17f5,\n\t0x1686: 0x12fb, 0x1687: 0x12ff, 0x1688: 0x0687, 0x1689: 0x130b, 0x168a: 0x05bb, 0x168b: 0x17fa,\n\t0x168c: 0x17ff, 0x168d: 0x068b, 0x168e: 0x068f, 0x168f: 0x1337, 0x1690: 0x134f, 0x1691: 0x136b,\n\t0x1692: 0x137b, 0x1693: 0x1804, 0x1694: 0x138f, 0x1695: 0x1393, 0x1696: 0x13ab, 0x1697: 0x13b7,\n\t0x1698: 0x180e, 0x1699: 0x1660, 0x169a: 0x13c3, 0x169b: 0x13bf, 0x169c: 0x13cb, 0x169d: 0x1665,\n\t0x169e: 0x13d7, 0x169f: 0x13e3, 0x16a0: 0x1813, 0x16a1: 0x1818, 0x16a2: 0x1423, 0x16a3: 0x142f,\n\t0x16a4: 0x1437, 0x16a5: 0x181d, 0x16a6: 0x143b, 0x16a7: 0x1467, 0x16a8: 0x1473, 0x16a9: 0x1477,\n\t0x16aa: 0x146f, 0x16ab: 0x1483, 0x16ac: 0x1487, 0x16ad: 0x1822, 0x16ae: 0x1493, 0x16af: 0x0693,\n\t0x16b0: 0x149b, 0x16b1: 0x1827, 0x16b2: 0x0697, 0x16b3: 0x14d3, 0x16b4: 0x0ac3, 0x16b5: 0x14eb,\n\t0x16b6: 0x182c, 0x16b7: 0x1836, 0x16b8: 0x069b, 0x16b9: 0x069f, 0x16ba: 0x1513, 0x16bb: 0x183b,\n\t0x16bc: 0x06a3, 0x16bd: 0x1840, 0x16be: 0x152b, 0x16bf: 0x152b,\n\t// Block 0x5b, offset 0x16c0\n\t0x16c0: 0x1533, 0x16c1: 0x1845, 0x16c2: 0x154b, 0x16c3: 0x06a7, 0x16c4: 0x155b, 0x16c5: 0x1567,\n\t0x16c6: 0x156f, 0x16c7: 0x1577, 0x16c8: 0x06ab, 0x16c9: 0x184a, 0x16ca: 0x158b, 0x16cb: 0x15a7,\n\t0x16cc: 0x15b3, 0x16cd: 0x06af, 0x16ce: 0x06b3, 0x16cf: 0x15b7, 0x16d0: 0x184f, 0x16d1: 0x06b7,\n\t0x16d2: 0x1854, 0x16d3: 0x1859, 0x16d4: 0x185e, 0x16d5: 0x15db, 0x16d6: 0x06bb, 0x16d7: 0x15ef,\n\t0x16d8: 0x15f7, 0x16d9: 0x15fb, 0x16da: 0x1603, 0x16db: 0x160b, 0x16dc: 0x1613, 0x16dd: 0x1868,\n}\n\n// nfkcIndex: 22 blocks, 1408 entries, 1408 bytes\n// Block 0 is the zero block.\nvar nfkcIndex = [1408]uint8{\n\t// Block 0x0, offset 0x0\n\t// Block 0x1, offset 0x40\n\t// Block 0x2, offset 0x80\n\t// Block 0x3, offset 0xc0\n\t0xc2: 0x5a, 0xc3: 0x01, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x5b, 0xc7: 0x04,\n\t0xc8: 0x05, 0xca: 0x5c, 0xcb: 0x5d, 0xcc: 0x06, 0xcd: 0x07, 0xce: 0x08, 0xcf: 0x09,\n\t0xd0: 0x0a, 0xd1: 0x5e, 0xd2: 0x5f, 0xd3: 0x0b, 0xd6: 0x0c, 0xd7: 0x60,\n\t0xd8: 0x61, 0xd9: 0x0d, 0xdb: 0x62, 0xdc: 0x63, 0xdd: 0x64, 0xdf: 0x65,\n\t0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05,\n\t0xea: 0x06, 0xeb: 0x07, 0xec: 0x08, 0xed: 0x09, 0xef: 0x0a,\n\t0xf0: 0x13,\n\t// Block 0x4, offset 0x100\n\t0x120: 0x66, 0x121: 0x67, 0x123: 0x68, 0x124: 0x69, 0x125: 0x6a, 0x126: 0x6b, 0x127: 0x6c,\n\t0x128: 0x6d, 0x129: 0x6e, 0x12a: 0x6f, 0x12b: 0x70, 0x12c: 0x6b, 0x12d: 0x71, 0x12e: 0x72, 0x12f: 0x73,\n\t0x131: 0x74, 0x132: 0x75, 0x133: 0x76, 0x134: 0x77, 0x135: 0x78, 0x137: 0x79,\n\t0x138: 0x7a, 0x139: 0x7b, 0x13a: 0x7c, 0x13b: 0x7d, 0x13c: 0x7e, 0x13d: 0x7f, 0x13e: 0x80, 0x13f: 0x81,\n\t// Block 0x5, offset 0x140\n\t0x140: 0x82, 0x142: 0x83, 0x143: 0x84, 0x144: 0x85, 0x145: 0x86, 0x146: 0x87, 0x147: 0x88,\n\t0x14d: 0x89,\n\t0x15c: 0x8a, 0x15f: 0x8b,\n\t0x162: 0x8c, 0x164: 0x8d,\n\t0x168: 0x8e, 0x169: 0x8f, 0x16a: 0x90, 0x16c: 0x0e, 0x16d: 0x91, 0x16e: 0x92, 0x16f: 0x93,\n\t0x170: 0x94, 0x173: 0x95, 0x174: 0x96, 0x175: 0x0f, 0x176: 0x10, 0x177: 0x97,\n\t0x178: 0x11, 0x179: 0x12, 0x17a: 0x13, 0x17b: 0x14, 0x17c: 0x15, 0x17d: 0x16, 0x17e: 0x17, 0x17f: 0x18,\n\t// Block 0x6, offset 0x180\n\t0x180: 0x98, 0x181: 0x99, 0x182: 0x9a, 0x183: 0x9b, 0x184: 0x19, 0x185: 0x1a, 0x186: 0x9c, 0x187: 0x9d,\n\t0x188: 0x9e, 0x189: 0x1b, 0x18a: 0x1c, 0x18b: 0x9f, 0x18c: 0xa0,\n\t0x191: 0x1d, 0x192: 0x1e, 0x193: 0xa1,\n\t0x1a8: 0xa2, 0x1a9: 0xa3, 0x1ab: 0xa4,\n\t0x1b1: 0xa5, 0x1b3: 0xa6, 0x1b5: 0xa7, 0x1b7: 0xa8,\n\t0x1ba: 0xa9, 0x1bb: 0xaa, 0x1bc: 0x1f, 0x1bd: 0x20, 0x1be: 0x21, 0x1bf: 0xab,\n\t// Block 0x7, offset 0x1c0\n\t0x1c0: 0xac, 0x1c1: 0x22, 0x1c2: 0x23, 0x1c3: 0x24, 0x1c4: 0xad, 0x1c5: 0x25, 0x1c6: 0x26,\n\t0x1c8: 0x27, 0x1c9: 0x28, 0x1ca: 0x29, 0x1cb: 0x2a, 0x1cc: 0x2b, 0x1cd: 0x2c, 0x1ce: 0x2d, 0x1cf: 0x2e,\n\t// Block 0x8, offset 0x200\n\t0x219: 0xae, 0x21a: 0xaf, 0x21b: 0xb0, 0x21d: 0xb1, 0x21f: 0xb2,\n\t0x220: 0xb3, 0x223: 0xb4, 0x224: 0xb5, 0x225: 0xb6, 0x226: 0xb7, 0x227: 0xb8,\n\t0x22a: 0xb9, 0x22b: 0xba, 0x22d: 0xbb, 0x22f: 0xbc,\n\t0x230: 0xbd, 0x231: 0xbe, 0x232: 0xbf, 0x233: 0xc0, 0x234: 0xc1, 0x235: 0xc2, 0x236: 0xc3, 0x237: 0xbd,\n\t0x238: 0xbe, 0x239: 0xbf, 0x23a: 0xc0, 0x23b: 0xc1, 0x23c: 0xc2, 0x23d: 0xc3, 0x23e: 0xbd, 0x23f: 0xbe,\n\t// Block 0x9, offset 0x240\n\t0x240: 0xbf, 0x241: 0xc0, 0x242: 0xc1, 0x243: 0xc2, 0x244: 0xc3, 0x245: 0xbd, 0x246: 0xbe, 0x247: 0xbf,\n\t0x248: 0xc0, 0x249: 0xc1, 0x24a: 0xc2, 0x24b: 0xc3, 0x24c: 0xbd, 0x24d: 0xbe, 0x24e: 0xbf, 0x24f: 0xc0,\n\t0x250: 0xc1, 0x251: 0xc2, 0x252: 0xc3, 0x253: 0xbd, 0x254: 0xbe, 0x255: 0xbf, 0x256: 0xc0, 0x257: 0xc1,\n\t0x258: 0xc2, 0x259: 0xc3, 0x25a: 0xbd, 0x25b: 0xbe, 0x25c: 0xbf, 0x25d: 0xc0, 0x25e: 0xc1, 0x25f: 0xc2,\n\t0x260: 0xc3, 0x261: 0xbd, 0x262: 0xbe, 0x263: 0xbf, 0x264: 0xc0, 0x265: 0xc1, 0x266: 0xc2, 0x267: 0xc3,\n\t0x268: 0xbd, 0x269: 0xbe, 0x26a: 0xbf, 0x26b: 0xc0, 0x26c: 0xc1, 0x26d: 0xc2, 0x26e: 0xc3, 0x26f: 0xbd,\n\t0x270: 0xbe, 0x271: 0xbf, 0x272: 0xc0, 0x273: 0xc1, 0x274: 0xc2, 0x275: 0xc3, 0x276: 0xbd, 0x277: 0xbe,\n\t0x278: 0xbf, 0x279: 0xc0, 0x27a: 0xc1, 0x27b: 0xc2, 0x27c: 0xc3, 0x27d: 0xbd, 0x27e: 0xbe, 0x27f: 0xbf,\n\t// Block 0xa, offset 0x280\n\t0x280: 0xc0, 0x281: 0xc1, 0x282: 0xc2, 0x283: 0xc3, 0x284: 0xbd, 0x285: 0xbe, 0x286: 0xbf, 0x287: 0xc0,\n\t0x288: 0xc1, 0x289: 0xc2, 0x28a: 0xc3, 0x28b: 0xbd, 0x28c: 0xbe, 0x28d: 0xbf, 0x28e: 0xc0, 0x28f: 0xc1,\n\t0x290: 0xc2, 0x291: 0xc3, 0x292: 0xbd, 0x293: 0xbe, 0x294: 0xbf, 0x295: 0xc0, 0x296: 0xc1, 0x297: 0xc2,\n\t0x298: 0xc3, 0x299: 0xbd, 0x29a: 0xbe, 0x29b: 0xbf, 0x29c: 0xc0, 0x29d: 0xc1, 0x29e: 0xc2, 0x29f: 0xc3,\n\t0x2a0: 0xbd, 0x2a1: 0xbe, 0x2a2: 0xbf, 0x2a3: 0xc0, 0x2a4: 0xc1, 0x2a5: 0xc2, 0x2a6: 0xc3, 0x2a7: 0xbd,\n\t0x2a8: 0xbe, 0x2a9: 0xbf, 0x2aa: 0xc0, 0x2ab: 0xc1, 0x2ac: 0xc2, 0x2ad: 0xc3, 0x2ae: 0xbd, 0x2af: 0xbe,\n\t0x2b0: 0xbf, 0x2b1: 0xc0, 0x2b2: 0xc1, 0x2b3: 0xc2, 0x2b4: 0xc3, 0x2b5: 0xbd, 0x2b6: 0xbe, 0x2b7: 0xbf,\n\t0x2b8: 0xc0, 0x2b9: 0xc1, 0x2ba: 0xc2, 0x2bb: 0xc3, 0x2bc: 0xbd, 0x2bd: 0xbe, 0x2be: 0xbf, 0x2bf: 0xc0,\n\t// Block 0xb, offset 0x2c0\n\t0x2c0: 0xc1, 0x2c1: 0xc2, 0x2c2: 0xc3, 0x2c3: 0xbd, 0x2c4: 0xbe, 0x2c5: 0xbf, 0x2c6: 0xc0, 0x2c7: 0xc1,\n\t0x2c8: 0xc2, 0x2c9: 0xc3, 0x2ca: 0xbd, 0x2cb: 0xbe, 0x2cc: 0xbf, 0x2cd: 0xc0, 0x2ce: 0xc1, 0x2cf: 0xc2,\n\t0x2d0: 0xc3, 0x2d1: 0xbd, 0x2d2: 0xbe, 0x2d3: 0xbf, 0x2d4: 0xc0, 0x2d5: 0xc1, 0x2d6: 0xc2, 0x2d7: 0xc3,\n\t0x2d8: 0xbd, 0x2d9: 0xbe, 0x2da: 0xbf, 0x2db: 0xc0, 0x2dc: 0xc1, 0x2dd: 0xc2, 0x2de: 0xc4,\n\t// Block 0xc, offset 0x300\n\t0x324: 0x2f, 0x325: 0x30, 0x326: 0x31, 0x327: 0x32,\n\t0x328: 0x33, 0x329: 0x34, 0x32a: 0x35, 0x32b: 0x36, 0x32c: 0x37, 0x32d: 0x38, 0x32e: 0x39, 0x32f: 0x3a,\n\t0x330: 0x3b, 0x331: 0x3c, 0x332: 0x3d, 0x333: 0x3e, 0x334: 0x3f, 0x335: 0x40, 0x336: 0x41, 0x337: 0x42,\n\t0x338: 0x43, 0x339: 0x44, 0x33a: 0x45, 0x33b: 0x46, 0x33c: 0xc5, 0x33d: 0x47, 0x33e: 0x48, 0x33f: 0x49,\n\t// Block 0xd, offset 0x340\n\t0x347: 0xc6,\n\t0x34b: 0xc7, 0x34d: 0xc8,\n\t0x368: 0xc9, 0x36b: 0xca,\n\t// Block 0xe, offset 0x380\n\t0x381: 0xcb, 0x382: 0xcc, 0x384: 0xcd, 0x385: 0xb7, 0x387: 0xce,\n\t0x388: 0xcf, 0x38b: 0xd0, 0x38c: 0x6b, 0x38d: 0xd1,\n\t0x391: 0xd2, 0x392: 0xd3, 0x393: 0xd4, 0x396: 0xd5, 0x397: 0xd6,\n\t0x398: 0xd7, 0x39a: 0xd8, 0x39c: 0xd9,\n\t0x3b0: 0xd7,\n\t// Block 0xf, offset 0x3c0\n\t0x3eb: 0xda, 0x3ec: 0xdb,\n\t// Block 0x10, offset 0x400\n\t0x432: 0xdc,\n\t// Block 0x11, offset 0x440\n\t0x445: 0xdd, 0x446: 0xde, 0x447: 0xdf,\n\t0x449: 0xe0,\n\t0x450: 0xe1, 0x451: 0xe2, 0x452: 0xe3, 0x453: 0xe4, 0x454: 0xe5, 0x455: 0xe6, 0x456: 0xe7, 0x457: 0xe8,\n\t0x458: 0xe9, 0x459: 0xea, 0x45a: 0x4a, 0x45b: 0xeb, 0x45c: 0xec, 0x45d: 0xed, 0x45e: 0xee, 0x45f: 0x4b,\n\t// Block 0x12, offset 0x480\n\t0x480: 0xef,\n\t0x4a3: 0xf0, 0x4a5: 0xf1,\n\t0x4b8: 0x4c, 0x4b9: 0x4d, 0x4ba: 0x4e,\n\t// Block 0x13, offset 0x4c0\n\t0x4c4: 0x4f, 0x4c5: 0xf2, 0x4c6: 0xf3,\n\t0x4c8: 0x50, 0x4c9: 0xf4,\n\t// Block 0x14, offset 0x500\n\t0x520: 0x51, 0x521: 0x52, 0x522: 0x53, 0x523: 0x54, 0x524: 0x55, 0x525: 0x56, 0x526: 0x57, 0x527: 0x58,\n\t0x528: 0x59,\n\t// Block 0x15, offset 0x540\n\t0x550: 0x0b, 0x551: 0x0c, 0x556: 0x0d,\n\t0x55b: 0x0e, 0x55d: 0x0f, 0x55e: 0x10, 0x55f: 0x11,\n\t0x56f: 0x12,\n}\n\n// nfkcSparseOffset: 155 entries, 310 bytes\nvar 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}\n\n// nfkcSparseValues: 875 entries, 3500 bytes\nvar nfkcSparseValues = [875]valueRange{\n\t// Block 0x0, offset 0x0\n\t{value: 0x0002, lo: 0x0d},\n\t{value: 0x0001, lo: 0xa0, hi: 0xa0},\n\t{value: 0x4278, lo: 0xa8, hi: 0xa8},\n\t{value: 0x0083, lo: 0xaa, hi: 0xaa},\n\t{value: 0x4264, lo: 0xaf, hi: 0xaf},\n\t{value: 0x0025, lo: 0xb2, hi: 0xb3},\n\t{value: 0x425a, lo: 0xb4, hi: 0xb4},\n\t{value: 0x01dc, lo: 0xb5, hi: 0xb5},\n\t{value: 0x4291, lo: 0xb8, hi: 0xb8},\n\t{value: 0x0023, lo: 0xb9, hi: 0xb9},\n\t{value: 0x009f, lo: 0xba, hi: 0xba},\n\t{value: 0x221c, lo: 0xbc, hi: 0xbc},\n\t{value: 0x2210, lo: 0xbd, hi: 0xbd},\n\t{value: 0x22b2, lo: 0xbe, hi: 0xbe},\n\t// Block 0x1, offset 0xe\n\t{value: 0x0091, lo: 0x03},\n\t{value: 0x46e2, lo: 0xa0, hi: 0xa1},\n\t{value: 0x4714, lo: 0xaf, hi: 0xb0},\n\t{value: 0xa000, lo: 0xb7, hi: 0xb7},\n\t// Block 0x2, offset 0x12\n\t{value: 0x0003, lo: 0x08},\n\t{value: 0xa000, lo: 0x92, hi: 0x92},\n\t{value: 0x0091, lo: 0xb0, hi: 0xb0},\n\t{value: 0x0119, lo: 0xb1, hi: 0xb1},\n\t{value: 0x0095, lo: 0xb2, hi: 0xb2},\n\t{value: 0x00a5, lo: 0xb3, hi: 0xb3},\n\t{value: 0x0143, lo: 0xb4, hi: 0xb6},\n\t{value: 0x00af, lo: 0xb7, hi: 0xb7},\n\t{value: 0x00b3, lo: 0xb8, hi: 0xb8},\n\t// Block 0x3, offset 0x1b\n\t{value: 0x000a, lo: 0x09},\n\t{value: 0x426e, lo: 0x98, hi: 0x98},\n\t{value: 0x4273, lo: 0x99, hi: 0x9a},\n\t{value: 0x4296, lo: 0x9b, hi: 0x9b},\n\t{value: 0x425f, lo: 0x9c, hi: 0x9c},\n\t{value: 0x4282, lo: 0x9d, hi: 0x9d},\n\t{value: 0x0113, lo: 0xa0, hi: 0xa0},\n\t{value: 0x0099, lo: 0xa1, hi: 0xa1},\n\t{value: 0x00a7, lo: 0xa2, hi: 0xa3},\n\t{value: 0x0167, lo: 0xa4, hi: 0xa4},\n\t// Block 0x4, offset 0x25\n\t{value: 0x0000, lo: 0x0f},\n\t{value: 0xa000, lo: 0x83, hi: 0x83},\n\t{value: 0xa000, lo: 0x87, hi: 0x87},\n\t{value: 0xa000, lo: 0x8b, hi: 0x8b},\n\t{value: 0xa000, lo: 0x8d, hi: 0x8d},\n\t{value: 0x37a5, lo: 0x90, hi: 0x90},\n\t{value: 0x37b1, lo: 0x91, hi: 0x91},\n\t{value: 0x379f, lo: 0x93, hi: 0x93},\n\t{value: 0xa000, lo: 0x96, hi: 0x96},\n\t{value: 0x3817, lo: 0x97, hi: 0x97},\n\t{value: 0x37e1, lo: 0x9c, hi: 0x9c},\n\t{value: 0x37c9, lo: 0x9d, hi: 0x9d},\n\t{value: 0x37f3, lo: 0x9e, hi: 0x9e},\n\t{value: 0xa000, lo: 0xb4, hi: 0xb5},\n\t{value: 0x381d, lo: 0xb6, hi: 0xb6},\n\t{value: 0x3823, lo: 0xb7, hi: 0xb7},\n\t// Block 0x5, offset 0x35\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8132, lo: 0x83, hi: 0x87},\n\t// Block 0x6, offset 0x37\n\t{value: 0x0001, lo: 0x04},\n\t{value: 0x8113, lo: 0x81, hi: 0x82},\n\t{value: 0x8132, lo: 0x84, hi: 0x84},\n\t{value: 0x812d, lo: 0x85, hi: 0x85},\n\t{value: 0x810d, lo: 0x87, hi: 0x87},\n\t// Block 0x7, offset 0x3c\n\t{value: 0x0000, lo: 0x0a},\n\t{value: 0x8132, lo: 0x90, hi: 0x97},\n\t{value: 0x8119, lo: 0x98, hi: 0x98},\n\t{value: 0x811a, lo: 0x99, hi: 0x99},\n\t{value: 0x811b, lo: 0x9a, hi: 0x9a},\n\t{value: 0x3841, lo: 0xa2, hi: 0xa2},\n\t{value: 0x3847, lo: 0xa3, hi: 0xa3},\n\t{value: 0x3853, lo: 0xa4, hi: 0xa4},\n\t{value: 0x384d, lo: 0xa5, hi: 0xa5},\n\t{value: 0x3859, lo: 0xa6, hi: 0xa6},\n\t{value: 0xa000, lo: 0xa7, hi: 0xa7},\n\t// Block 0x8, offset 0x47\n\t{value: 0x0000, lo: 0x0e},\n\t{value: 0x386b, lo: 0x80, hi: 0x80},\n\t{value: 0xa000, lo: 0x81, hi: 0x81},\n\t{value: 0x385f, lo: 0x82, hi: 0x82},\n\t{value: 0xa000, lo: 0x92, hi: 0x92},\n\t{value: 0x3865, lo: 0x93, hi: 0x93},\n\t{value: 0xa000, lo: 0x95, hi: 0x95},\n\t{value: 0x8132, lo: 0x96, hi: 0x9c},\n\t{value: 0x8132, lo: 0x9f, hi: 0xa2},\n\t{value: 0x812d, lo: 0xa3, hi: 0xa3},\n\t{value: 0x8132, lo: 0xa4, hi: 0xa4},\n\t{value: 0x8132, lo: 0xa7, hi: 0xa8},\n\t{value: 0x812d, lo: 0xaa, hi: 0xaa},\n\t{value: 0x8132, lo: 0xab, hi: 0xac},\n\t{value: 0x812d, lo: 0xad, hi: 0xad},\n\t// Block 0x9, offset 0x56\n\t{value: 0x0000, lo: 0x0c},\n\t{value: 0x811f, lo: 0x91, hi: 0x91},\n\t{value: 0x8132, lo: 0xb0, hi: 0xb0},\n\t{value: 0x812d, lo: 0xb1, hi: 0xb1},\n\t{value: 0x8132, lo: 0xb2, hi: 0xb3},\n\t{value: 0x812d, lo: 0xb4, hi: 0xb4},\n\t{value: 0x8132, lo: 0xb5, hi: 0xb6},\n\t{value: 0x812d, lo: 0xb7, hi: 0xb9},\n\t{value: 0x8132, lo: 0xba, hi: 0xba},\n\t{value: 0x812d, lo: 0xbb, hi: 0xbc},\n\t{value: 0x8132, lo: 0xbd, hi: 0xbd},\n\t{value: 0x812d, lo: 0xbe, hi: 0xbe},\n\t{value: 0x8132, lo: 0xbf, hi: 0xbf},\n\t// Block 0xa, offset 0x63\n\t{value: 0x0005, lo: 0x07},\n\t{value: 0x8132, lo: 0x80, hi: 0x80},\n\t{value: 0x8132, lo: 0x81, hi: 0x81},\n\t{value: 0x812d, lo: 0x82, hi: 0x83},\n\t{value: 0x812d, lo: 0x84, hi: 0x85},\n\t{value: 0x812d, lo: 0x86, hi: 0x87},\n\t{value: 0x812d, lo: 0x88, hi: 0x89},\n\t{value: 0x8132, lo: 0x8a, hi: 0x8a},\n\t// Block 0xb, offset 0x6b\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x8132, lo: 0xab, hi: 0xb1},\n\t{value: 0x812d, lo: 0xb2, hi: 0xb2},\n\t{value: 0x8132, lo: 0xb3, hi: 0xb3},\n\t// Block 0xc, offset 0x6f\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x8132, lo: 0x96, hi: 0x99},\n\t{value: 0x8132, lo: 0x9b, hi: 0xa3},\n\t{value: 0x8132, lo: 0xa5, hi: 0xa7},\n\t{value: 0x8132, lo: 0xa9, hi: 0xad},\n\t// Block 0xd, offset 0x74\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x812d, lo: 0x99, hi: 0x9b},\n\t// Block 0xe, offset 0x76\n\t{value: 0x0000, lo: 0x10},\n\t{value: 0x8132, lo: 0x94, hi: 0xa1},\n\t{value: 0x812d, lo: 0xa3, hi: 0xa3},\n\t{value: 0x8132, lo: 0xa4, hi: 0xa5},\n\t{value: 0x812d, lo: 0xa6, hi: 0xa6},\n\t{value: 0x8132, lo: 0xa7, hi: 0xa8},\n\t{value: 0x812d, lo: 0xa9, hi: 0xa9},\n\t{value: 0x8132, lo: 0xaa, hi: 0xac},\n\t{value: 0x812d, lo: 0xad, hi: 0xaf},\n\t{value: 0x8116, lo: 0xb0, hi: 0xb0},\n\t{value: 0x8117, lo: 0xb1, hi: 0xb1},\n\t{value: 0x8118, lo: 0xb2, hi: 0xb2},\n\t{value: 0x8132, lo: 0xb3, hi: 0xb5},\n\t{value: 0x812d, lo: 0xb6, hi: 0xb6},\n\t{value: 0x8132, lo: 0xb7, hi: 0xb8},\n\t{value: 0x812d, lo: 0xb9, hi: 0xba},\n\t{value: 0x8132, lo: 0xbb, hi: 0xbf},\n\t// Block 0xf, offset 0x87\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0xa000, lo: 0xa8, hi: 0xa8},\n\t{value: 0x3ed8, lo: 0xa9, hi: 0xa9},\n\t{value: 0xa000, lo: 0xb0, hi: 0xb0},\n\t{value: 0x3ee0, lo: 0xb1, hi: 0xb1},\n\t{value: 0xa000, lo: 0xb3, hi: 0xb3},\n\t{value: 0x3ee8, lo: 0xb4, hi: 0xb4},\n\t{value: 0x9902, lo: 0xbc, hi: 0xbc},\n\t// Block 0x10, offset 0x8f\n\t{value: 0x0008, lo: 0x06},\n\t{value: 0x8104, lo: 0x8d, hi: 0x8d},\n\t{value: 0x8132, lo: 0x91, hi: 0x91},\n\t{value: 0x812d, lo: 0x92, hi: 0x92},\n\t{value: 0x8132, lo: 0x93, hi: 0x93},\n\t{value: 0x8132, lo: 0x94, hi: 0x94},\n\t{value: 0x451c, lo: 0x98, hi: 0x9f},\n\t// Block 0x11, offset 0x96\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8102, lo: 0xbc, hi: 0xbc},\n\t{value: 0x9900, lo: 0xbe, hi: 0xbe},\n\t// Block 0x12, offset 0x99\n\t{value: 0x0008, lo: 0x06},\n\t{value: 0xa000, lo: 0x87, hi: 0x87},\n\t{value: 0x2c9e, lo: 0x8b, hi: 0x8c},\n\t{value: 0x8104, lo: 0x8d, hi: 0x8d},\n\t{value: 0x9900, lo: 0x97, hi: 0x97},\n\t{value: 0x455c, lo: 0x9c, hi: 0x9d},\n\t{value: 0x456c, lo: 0x9f, hi: 0x9f},\n\t// Block 0x13, offset 0xa0\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x4594, lo: 0xb3, hi: 0xb3},\n\t{value: 0x459c, lo: 0xb6, hi: 0xb6},\n\t{value: 0x8102, lo: 0xbc, hi: 0xbc},\n\t// Block 0x14, offset 0xa4\n\t{value: 0x0008, lo: 0x03},\n\t{value: 0x8104, lo: 0x8d, hi: 0x8d},\n\t{value: 0x4574, lo: 0x99, hi: 0x9b},\n\t{value: 0x458c, lo: 0x9e, hi: 0x9e},\n\t// Block 0x15, offset 0xa8\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8102, lo: 0xbc, hi: 0xbc},\n\t// Block 0x16, offset 0xaa\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0x8d, hi: 0x8d},\n\t// Block 0x17, offset 0xac\n\t{value: 0x0000, lo: 0x08},\n\t{value: 0xa000, lo: 0x87, hi: 0x87},\n\t{value: 0x2cb6, lo: 0x88, hi: 0x88},\n\t{value: 0x2cae, lo: 0x8b, hi: 0x8b},\n\t{value: 0x2cbe, lo: 0x8c, hi: 0x8c},\n\t{value: 0x8104, lo: 0x8d, hi: 0x8d},\n\t{value: 0x9900, lo: 0x96, hi: 0x97},\n\t{value: 0x45a4, lo: 0x9c, hi: 0x9c},\n\t{value: 0x45ac, lo: 0x9d, hi: 0x9d},\n\t// Block 0x18, offset 0xb5\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0xa000, lo: 0x92, hi: 0x92},\n\t{value: 0x2cc6, lo: 0x94, hi: 0x94},\n\t{value: 0x9900, lo: 0xbe, hi: 0xbe},\n\t// Block 0x19, offset 0xb9\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0xa000, lo: 0x86, hi: 0x87},\n\t{value: 0x2cce, lo: 0x8a, hi: 0x8a},\n\t{value: 0x2cde, lo: 0x8b, hi: 0x8b},\n\t{value: 0x2cd6, lo: 0x8c, hi: 0x8c},\n\t{value: 0x8104, lo: 0x8d, hi: 0x8d},\n\t{value: 0x9900, lo: 0x97, hi: 0x97},\n\t// Block 0x1a, offset 0xc0\n\t{value: 0x1801, lo: 0x04},\n\t{value: 0xa000, lo: 0x86, hi: 0x86},\n\t{value: 0x3ef0, lo: 0x88, hi: 0x88},\n\t{value: 0x8104, lo: 0x8d, hi: 0x8d},\n\t{value: 0x8120, lo: 0x95, hi: 0x96},\n\t// Block 0x1b, offset 0xc5\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8102, lo: 0xbc, hi: 0xbc},\n\t{value: 0xa000, lo: 0xbf, hi: 0xbf},\n\t// Block 0x1c, offset 0xc8\n\t{value: 0x0000, lo: 0x09},\n\t{value: 0x2ce6, lo: 0x80, hi: 0x80},\n\t{value: 0x9900, lo: 0x82, hi: 0x82},\n\t{value: 0xa000, lo: 0x86, hi: 0x86},\n\t{value: 0x2cee, lo: 0x87, hi: 0x87},\n\t{value: 0x2cf6, lo: 0x88, hi: 0x88},\n\t{value: 0x2f50, lo: 0x8a, hi: 0x8a},\n\t{value: 0x2dd8, lo: 0x8b, hi: 0x8b},\n\t{value: 0x8104, lo: 0x8d, hi: 0x8d},\n\t{value: 0x9900, lo: 0x95, hi: 0x96},\n\t// Block 0x1d, offset 0xd2\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x9900, lo: 0xbe, hi: 0xbe},\n\t// Block 0x1e, offset 0xd4\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0xa000, lo: 0x86, hi: 0x87},\n\t{value: 0x2cfe, lo: 0x8a, hi: 0x8a},\n\t{value: 0x2d0e, lo: 0x8b, hi: 0x8b},\n\t{value: 0x2d06, lo: 0x8c, hi: 0x8c},\n\t{value: 0x8104, lo: 0x8d, hi: 0x8d},\n\t{value: 0x9900, lo: 0x97, hi: 0x97},\n\t// Block 0x1f, offset 0xdb\n\t{value: 0x6bea, lo: 0x07},\n\t{value: 0x9904, lo: 0x8a, hi: 0x8a},\n\t{value: 0x9900, lo: 0x8f, hi: 0x8f},\n\t{value: 0xa000, lo: 0x99, hi: 0x99},\n\t{value: 0x3ef8, lo: 0x9a, hi: 0x9a},\n\t{value: 0x2f58, lo: 0x9c, hi: 0x9c},\n\t{value: 0x2de3, lo: 0x9d, hi: 0x9d},\n\t{value: 0x2d16, lo: 0x9e, hi: 0x9f},\n\t// Block 0x20, offset 0xe3\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x2621, lo: 0xb3, hi: 0xb3},\n\t{value: 0x8122, lo: 0xb8, hi: 0xb9},\n\t{value: 0x8104, lo: 0xba, hi: 0xba},\n\t// Block 0x21, offset 0xe7\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8123, lo: 0x88, hi: 0x8b},\n\t// Block 0x22, offset 0xe9\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x2636, lo: 0xb3, hi: 0xb3},\n\t{value: 0x8124, lo: 0xb8, hi: 0xb9},\n\t// Block 0x23, offset 0xec\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x8125, lo: 0x88, hi: 0x8b},\n\t{value: 0x2628, lo: 0x9c, hi: 0x9c},\n\t{value: 0x262f, lo: 0x9d, hi: 0x9d},\n\t// Block 0x24, offset 0xf0\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x030b, lo: 0x8c, hi: 0x8c},\n\t{value: 0x812d, lo: 0x98, hi: 0x99},\n\t{value: 0x812d, lo: 0xb5, hi: 0xb5},\n\t{value: 0x812d, lo: 0xb7, hi: 0xb7},\n\t{value: 0x812b, lo: 0xb9, hi: 0xb9},\n\t// Block 0x25, offset 0xf6\n\t{value: 0x0000, lo: 0x10},\n\t{value: 0x2644, lo: 0x83, hi: 0x83},\n\t{value: 0x264b, lo: 0x8d, hi: 0x8d},\n\t{value: 0x2652, lo: 0x92, hi: 0x92},\n\t{value: 0x2659, lo: 0x97, hi: 0x97},\n\t{value: 0x2660, lo: 0x9c, hi: 0x9c},\n\t{value: 0x263d, lo: 0xa9, hi: 0xa9},\n\t{value: 0x8126, lo: 0xb1, hi: 0xb1},\n\t{value: 0x8127, lo: 0xb2, hi: 0xb2},\n\t{value: 0x4a84, lo: 0xb3, hi: 0xb3},\n\t{value: 0x8128, lo: 0xb4, hi: 0xb4},\n\t{value: 0x4a8d, lo: 0xb5, hi: 0xb5},\n\t{value: 0x45b4, lo: 0xb6, hi: 0xb6},\n\t{value: 0x45f4, lo: 0xb7, hi: 0xb7},\n\t{value: 0x45bc, lo: 0xb8, hi: 0xb8},\n\t{value: 0x45ff, lo: 0xb9, hi: 0xb9},\n\t{value: 0x8127, lo: 0xba, hi: 0xbd},\n\t// Block 0x26, offset 0x107\n\t{value: 0x0000, lo: 0x0b},\n\t{value: 0x8127, lo: 0x80, hi: 0x80},\n\t{value: 0x4a96, lo: 0x81, hi: 0x81},\n\t{value: 0x8132, lo: 0x82, hi: 0x83},\n\t{value: 0x8104, lo: 0x84, hi: 0x84},\n\t{value: 0x8132, lo: 0x86, hi: 0x87},\n\t{value: 0x266e, lo: 0x93, hi: 0x93},\n\t{value: 0x2675, lo: 0x9d, hi: 0x9d},\n\t{value: 0x267c, lo: 0xa2, hi: 0xa2},\n\t{value: 0x2683, lo: 0xa7, hi: 0xa7},\n\t{value: 0x268a, lo: 0xac, hi: 0xac},\n\t{value: 0x2667, lo: 0xb9, hi: 0xb9},\n\t// Block 0x27, offset 0x113\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x812d, lo: 0x86, hi: 0x86},\n\t// Block 0x28, offset 0x115\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0xa000, lo: 0xa5, hi: 0xa5},\n\t{value: 0x2d1e, lo: 0xa6, hi: 0xa6},\n\t{value: 0x9900, lo: 0xae, hi: 0xae},\n\t{value: 0x8102, lo: 0xb7, hi: 0xb7},\n\t{value: 0x8104, lo: 0xb9, hi: 0xba},\n\t// Block 0x29, offset 0x11b\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x812d, lo: 0x8d, hi: 0x8d},\n\t// Block 0x2a, offset 0x11d\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x030f, lo: 0xbc, hi: 0xbc},\n\t// Block 0x2b, offset 0x11f\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0xa000, lo: 0x80, hi: 0x92},\n\t// Block 0x2c, offset 0x121\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0xb900, lo: 0xa1, hi: 0xb5},\n\t// Block 0x2d, offset 0x123\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x9900, lo: 0xa8, hi: 0xbf},\n\t// Block 0x2e, offset 0x125\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x9900, lo: 0x80, hi: 0x82},\n\t// Block 0x2f, offset 0x127\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8132, lo: 0x9d, hi: 0x9f},\n\t// Block 0x30, offset 0x129\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8104, lo: 0x94, hi: 0x94},\n\t{value: 0x8104, lo: 0xb4, hi: 0xb4},\n\t// Block 0x31, offset 0x12c\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8104, lo: 0x92, hi: 0x92},\n\t{value: 0x8132, lo: 0x9d, hi: 0x9d},\n\t// Block 0x32, offset 0x12f\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8131, lo: 0xa9, hi: 0xa9},\n\t// Block 0x33, offset 0x131\n\t{value: 0x0004, lo: 0x02},\n\t{value: 0x812e, lo: 0xb9, hi: 0xba},\n\t{value: 0x812d, lo: 0xbb, hi: 0xbb},\n\t// Block 0x34, offset 0x134\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8132, lo: 0x97, hi: 0x97},\n\t{value: 0x812d, lo: 0x98, hi: 0x98},\n\t// Block 0x35, offset 0x137\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x8104, lo: 0xa0, hi: 0xa0},\n\t{value: 0x8132, lo: 0xb5, hi: 0xbc},\n\t{value: 0x812d, lo: 0xbf, hi: 0xbf},\n\t// Block 0x36, offset 0x13b\n\t{value: 0x0000, lo: 0x04},\n\t{value: 0x8132, lo: 0xb0, hi: 0xb4},\n\t{value: 0x812d, lo: 0xb5, hi: 0xba},\n\t{value: 0x8132, lo: 0xbb, hi: 0xbc},\n\t{value: 0x812d, lo: 0xbd, hi: 0xbd},\n\t// Block 0x37, offset 0x140\n\t{value: 0x0000, lo: 0x08},\n\t{value: 0x2d66, lo: 0x80, hi: 0x80},\n\t{value: 0x2d6e, lo: 0x81, hi: 0x81},\n\t{value: 0xa000, lo: 0x82, hi: 0x82},\n\t{value: 0x2d76, lo: 0x83, hi: 0x83},\n\t{value: 0x8104, lo: 0x84, hi: 0x84},\n\t{value: 0x8132, lo: 0xab, hi: 0xab},\n\t{value: 0x812d, lo: 0xac, hi: 0xac},\n\t{value: 0x8132, lo: 0xad, hi: 0xb3},\n\t// Block 0x38, offset 0x149\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0xaa, hi: 0xab},\n\t// Block 0x39, offset 0x14b\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8102, lo: 0xa6, hi: 0xa6},\n\t{value: 0x8104, lo: 0xb2, hi: 0xb3},\n\t// Block 0x3a, offset 0x14e\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8102, lo: 0xb7, hi: 0xb7},\n\t// Block 0x3b, offset 0x150\n\t{value: 0x0000, lo: 0x0a},\n\t{value: 0x8132, lo: 0x90, hi: 0x92},\n\t{value: 0x8101, lo: 0x94, hi: 0x94},\n\t{value: 0x812d, lo: 0x95, hi: 0x99},\n\t{value: 0x8132, lo: 0x9a, hi: 0x9b},\n\t{value: 0x812d, lo: 0x9c, hi: 0x9f},\n\t{value: 0x8132, lo: 0xa0, hi: 0xa0},\n\t{value: 0x8101, lo: 0xa2, hi: 0xa8},\n\t{value: 0x812d, lo: 0xad, hi: 0xad},\n\t{value: 0x8132, lo: 0xb4, hi: 0xb4},\n\t{value: 0x8132, lo: 0xb8, hi: 0xb9},\n\t// Block 0x3c, offset 0x15b\n\t{value: 0x0002, lo: 0x0a},\n\t{value: 0x0043, lo: 0xac, hi: 0xac},\n\t{value: 0x00d1, lo: 0xad, hi: 0xad},\n\t{value: 0x0045, lo: 0xae, hi: 0xae},\n\t{value: 0x0049, lo: 0xb0, hi: 0xb1},\n\t{value: 0x00e6, lo: 0xb2, hi: 0xb2},\n\t{value: 0x004f, lo: 0xb3, hi: 0xba},\n\t{value: 0x005f, lo: 0xbc, hi: 0xbc},\n\t{value: 0x00ef, lo: 0xbd, hi: 0xbd},\n\t{value: 0x0061, lo: 0xbe, hi: 0xbe},\n\t{value: 0x0065, lo: 0xbf, hi: 0xbf},\n\t// Block 0x3d, offset 0x166\n\t{value: 0x0000, lo: 0x0f},\n\t{value: 0x8132, lo: 0x80, hi: 0x81},\n\t{value: 0x812d, lo: 0x82, hi: 0x82},\n\t{value: 0x8132, lo: 0x83, hi: 0x89},\n\t{value: 0x812d, lo: 0x8a, hi: 0x8a},\n\t{value: 0x8132, lo: 0x8b, hi: 0x8c},\n\t{value: 0x8135, lo: 0x8d, hi: 0x8d},\n\t{value: 0x812a, lo: 0x8e, hi: 0x8e},\n\t{value: 0x812d, lo: 0x8f, hi: 0x8f},\n\t{value: 0x8129, lo: 0x90, hi: 0x90},\n\t{value: 0x8132, lo: 0x91, hi: 0xb5},\n\t{value: 0x8132, lo: 0xbb, hi: 0xbb},\n\t{value: 0x8134, lo: 0xbc, hi: 0xbc},\n\t{value: 0x812d, lo: 0xbd, hi: 0xbd},\n\t{value: 0x8132, lo: 0xbe, hi: 0xbe},\n\t{value: 0x812d, lo: 0xbf, hi: 0xbf},\n\t// Block 0x3e, offset 0x176\n\t{value: 0x0000, lo: 0x0d},\n\t{value: 0x0001, lo: 0x80, hi: 0x8a},\n\t{value: 0x043b, lo: 0x91, hi: 0x91},\n\t{value: 0x429b, lo: 0x97, hi: 0x97},\n\t{value: 0x001d, lo: 0xa4, hi: 0xa4},\n\t{value: 0x1873, lo: 0xa5, hi: 0xa5},\n\t{value: 0x1b5c, lo: 0xa6, hi: 0xa6},\n\t{value: 0x0001, lo: 0xaf, hi: 0xaf},\n\t{value: 0x2691, lo: 0xb3, hi: 0xb3},\n\t{value: 0x27fe, lo: 0xb4, hi: 0xb4},\n\t{value: 0x2698, lo: 0xb6, hi: 0xb6},\n\t{value: 0x2808, lo: 0xb7, hi: 0xb7},\n\t{value: 0x186d, lo: 0xbc, hi: 0xbc},\n\t{value: 0x4269, lo: 0xbe, hi: 0xbe},\n\t// Block 0x3f, offset 0x184\n\t{value: 0x0002, lo: 0x0d},\n\t{value: 0x1933, lo: 0x87, hi: 0x87},\n\t{value: 0x1930, lo: 0x88, hi: 0x88},\n\t{value: 0x1870, lo: 0x89, hi: 0x89},\n\t{value: 0x298e, lo: 0x97, hi: 0x97},\n\t{value: 0x0001, lo: 0x9f, hi: 0x9f},\n\t{value: 0x0021, lo: 0xb0, hi: 0xb0},\n\t{value: 0x0093, lo: 0xb1, hi: 0xb1},\n\t{value: 0x0029, lo: 0xb4, hi: 0xb9},\n\t{value: 0x0017, lo: 0xba, hi: 0xba},\n\t{value: 0x0467, lo: 0xbb, hi: 0xbb},\n\t{value: 0x003b, lo: 0xbc, hi: 0xbc},\n\t{value: 0x0011, lo: 0xbd, hi: 0xbe},\n\t{value: 0x009d, lo: 0xbf, hi: 0xbf},\n\t// Block 0x40, offset 0x192\n\t{value: 0x0002, lo: 0x0f},\n\t{value: 0x0021, lo: 0x80, hi: 0x89},\n\t{value: 0x0017, lo: 0x8a, hi: 0x8a},\n\t{value: 0x0467, lo: 0x8b, hi: 0x8b},\n\t{value: 0x003b, lo: 0x8c, hi: 0x8c},\n\t{value: 0x0011, lo: 0x8d, hi: 0x8e},\n\t{value: 0x0083, lo: 0x90, hi: 0x90},\n\t{value: 0x008b, lo: 0x91, hi: 0x91},\n\t{value: 0x009f, lo: 0x92, hi: 0x92},\n\t{value: 0x00b1, lo: 0x93, hi: 0x93},\n\t{value: 0x0104, lo: 0x94, hi: 0x94},\n\t{value: 0x0091, lo: 0x95, hi: 0x95},\n\t{value: 0x0097, lo: 0x96, hi: 0x99},\n\t{value: 0x00a1, lo: 0x9a, hi: 0x9a},\n\t{value: 0x00a7, lo: 0x9b, hi: 0x9c},\n\t{value: 0x1999, lo: 0xa8, hi: 0xa8},\n\t// Block 0x41, offset 0x1a2\n\t{value: 0x0000, lo: 0x0d},\n\t{value: 0x8132, lo: 0x90, hi: 0x91},\n\t{value: 0x8101, lo: 0x92, hi: 0x93},\n\t{value: 0x8132, lo: 0x94, hi: 0x97},\n\t{value: 0x8101, lo: 0x98, hi: 0x9a},\n\t{value: 0x8132, lo: 0x9b, hi: 0x9c},\n\t{value: 0x8132, lo: 0xa1, hi: 0xa1},\n\t{value: 0x8101, lo: 0xa5, hi: 0xa6},\n\t{value: 0x8132, lo: 0xa7, hi: 0xa7},\n\t{value: 0x812d, lo: 0xa8, hi: 0xa8},\n\t{value: 0x8132, lo: 0xa9, hi: 0xa9},\n\t{value: 0x8101, lo: 0xaa, hi: 0xab},\n\t{value: 0x812d, lo: 0xac, hi: 0xaf},\n\t{value: 0x8132, lo: 0xb0, hi: 0xb0},\n\t// Block 0x42, offset 0x1b0\n\t{value: 0x0007, lo: 0x06},\n\t{value: 0x2180, lo: 0x89, hi: 0x89},\n\t{value: 0xa000, lo: 0x90, hi: 0x90},\n\t{value: 0xa000, lo: 0x92, hi: 0x92},\n\t{value: 0xa000, lo: 0x94, hi: 0x94},\n\t{value: 0x3bb9, lo: 0x9a, hi: 0x9b},\n\t{value: 0x3bc7, lo: 0xae, hi: 0xae},\n\t// Block 0x43, offset 0x1b7\n\t{value: 0x000e, lo: 0x05},\n\t{value: 0x3bce, lo: 0x8d, hi: 0x8e},\n\t{value: 0x3bd5, lo: 0x8f, hi: 0x8f},\n\t{value: 0xa000, lo: 0x90, hi: 0x90},\n\t{value: 0xa000, lo: 0x92, hi: 0x92},\n\t{value: 0xa000, lo: 0x94, hi: 0x94},\n\t// Block 0x44, offset 0x1bd\n\t{value: 0x0173, lo: 0x0e},\n\t{value: 0xa000, lo: 0x83, hi: 0x83},\n\t{value: 0x3be3, lo: 0x84, hi: 0x84},\n\t{value: 0xa000, lo: 0x88, hi: 0x88},\n\t{value: 0x3bea, lo: 0x89, hi: 0x89},\n\t{value: 0xa000, lo: 0x8b, hi: 0x8b},\n\t{value: 0x3bf1, lo: 0x8c, hi: 0x8c},\n\t{value: 0xa000, lo: 0xa3, hi: 0xa3},\n\t{value: 0x3bf8, lo: 0xa4, hi: 0xa4},\n\t{value: 0xa000, lo: 0xa5, hi: 0xa5},\n\t{value: 0x3bff, lo: 0xa6, hi: 0xa6},\n\t{value: 0x269f, lo: 0xac, hi: 0xad},\n\t{value: 0x26a6, lo: 0xaf, hi: 0xaf},\n\t{value: 0x281c, lo: 0xb0, hi: 0xb0},\n\t{value: 0xa000, lo: 0xbc, hi: 0xbc},\n\t// Block 0x45, offset 0x1cc\n\t{value: 0x0007, lo: 0x03},\n\t{value: 0x3c68, lo: 0xa0, hi: 0xa1},\n\t{value: 0x3c92, lo: 0xa2, hi: 0xa3},\n\t{value: 0x3cbc, lo: 0xaa, hi: 0xad},\n\t// Block 0x46, offset 0x1d0\n\t{value: 0x0004, lo: 0x01},\n\t{value: 0x048b, lo: 0xa9, hi: 0xaa},\n\t// Block 0x47, offset 0x1d2\n\t{value: 0x0002, lo: 0x03},\n\t{value: 0x0057, lo: 0x80, hi: 0x8f},\n\t{value: 0x0083, lo: 0x90, hi: 0xa9},\n\t{value: 0x0021, lo: 0xaa, hi: 0xaa},\n\t// Block 0x48, offset 0x1d6\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x299b, lo: 0x8c, hi: 0x8c},\n\t// Block 0x49, offset 0x1d8\n\t{value: 0x0263, lo: 0x02},\n\t{value: 0x1b8c, lo: 0xb4, hi: 0xb4},\n\t{value: 0x192d, lo: 0xb5, hi: 0xb6},\n\t// Block 0x4a, offset 0x1db\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x44dd, lo: 0x9c, hi: 0x9c},\n\t// Block 0x4b, offset 0x1dd\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x0095, lo: 0xbc, hi: 0xbc},\n\t{value: 0x006d, lo: 0xbd, hi: 0xbd},\n\t// Block 0x4c, offset 0x1e0\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8132, lo: 0xaf, hi: 0xb1},\n\t// Block 0x4d, offset 0x1e2\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x047f, lo: 0xaf, hi: 0xaf},\n\t{value: 0x8104, lo: 0xbf, hi: 0xbf},\n\t// Block 0x4e, offset 0x1e5\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8132, lo: 0xa0, hi: 0xbf},\n\t// Block 0x4f, offset 0x1e7\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x0dc3, lo: 0x9f, hi: 0x9f},\n\t// Block 0x50, offset 0x1e9\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x162f, lo: 0xb3, hi: 0xb3},\n\t// Block 0x51, offset 0x1eb\n\t{value: 0x0004, lo: 0x0b},\n\t{value: 0x1597, lo: 0x80, hi: 0x82},\n\t{value: 0x15af, lo: 0x83, hi: 0x83},\n\t{value: 0x15c7, lo: 0x84, hi: 0x85},\n\t{value: 0x15d7, lo: 0x86, hi: 0x89},\n\t{value: 0x15eb, lo: 0x8a, hi: 0x8c},\n\t{value: 0x15ff, lo: 0x8d, hi: 0x8d},\n\t{value: 0x1607, lo: 0x8e, hi: 0x8e},\n\t{value: 0x160f, lo: 0x8f, hi: 0x90},\n\t{value: 0x161b, lo: 0x91, hi: 0x93},\n\t{value: 0x162b, lo: 0x94, hi: 0x94},\n\t{value: 0x1633, lo: 0x95, hi: 0x95},\n\t// Block 0x52, offset 0x1f7\n\t{value: 0x0004, lo: 0x09},\n\t{value: 0x0001, lo: 0x80, hi: 0x80},\n\t{value: 0x812c, lo: 0xaa, hi: 0xaa},\n\t{value: 0x8131, lo: 0xab, hi: 0xab},\n\t{value: 0x8133, lo: 0xac, hi: 0xac},\n\t{value: 0x812e, lo: 0xad, hi: 0xad},\n\t{value: 0x812f, lo: 0xae, hi: 0xae},\n\t{value: 0x812f, lo: 0xaf, hi: 0xaf},\n\t{value: 0x04b3, lo: 0xb6, hi: 0xb6},\n\t{value: 0x0887, lo: 0xb8, hi: 0xba},\n\t// Block 0x53, offset 0x201\n\t{value: 0x0006, lo: 0x09},\n\t{value: 0x0313, lo: 0xb1, hi: 0xb1},\n\t{value: 0x0317, lo: 0xb2, hi: 0xb2},\n\t{value: 0x4a3b, lo: 0xb3, hi: 0xb3},\n\t{value: 0x031b, lo: 0xb4, hi: 0xb4},\n\t{value: 0x4a41, lo: 0xb5, hi: 0xb6},\n\t{value: 0x031f, lo: 0xb7, hi: 0xb7},\n\t{value: 0x0323, lo: 0xb8, hi: 0xb8},\n\t{value: 0x0327, lo: 0xb9, hi: 0xb9},\n\t{value: 0x4a4d, lo: 0xba, hi: 0xbf},\n\t// Block 0x54, offset 0x20b\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8132, lo: 0xaf, hi: 0xaf},\n\t{value: 0x8132, lo: 0xb4, hi: 0xbd},\n\t// Block 0x55, offset 0x20e\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0x020f, lo: 0x9c, hi: 0x9c},\n\t{value: 0x0212, lo: 0x9d, hi: 0x9d},\n\t{value: 0x8132, lo: 0x9e, hi: 0x9f},\n\t// Block 0x56, offset 0x212\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8132, lo: 0xb0, hi: 0xb1},\n\t// Block 0x57, offset 0x214\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x163b, lo: 0xb0, hi: 0xb0},\n\t// Block 0x58, offset 0x216\n\t{value: 0x000c, lo: 0x01},\n\t{value: 0x00d7, lo: 0xb8, hi: 0xb9},\n\t// Block 0x59, offset 0x218\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0x86, hi: 0x86},\n\t// Block 0x5a, offset 0x21a\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8104, lo: 0x84, hi: 0x84},\n\t{value: 0x8132, lo: 0xa0, hi: 0xb1},\n\t// Block 0x5b, offset 0x21d\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x812d, lo: 0xab, hi: 0xad},\n\t// Block 0x5c, offset 0x21f\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0x93, hi: 0x93},\n\t// Block 0x5d, offset 0x221\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8102, lo: 0xb3, hi: 0xb3},\n\t// Block 0x5e, offset 0x223\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0x80, hi: 0x80},\n\t// Block 0x5f, offset 0x225\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x8132, lo: 0xb0, hi: 0xb0},\n\t{value: 0x8132, lo: 0xb2, hi: 0xb3},\n\t{value: 0x812d, lo: 0xb4, hi: 0xb4},\n\t{value: 0x8132, lo: 0xb7, hi: 0xb8},\n\t{value: 0x8132, lo: 0xbe, hi: 0xbf},\n\t// Block 0x60, offset 0x22b\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8132, lo: 0x81, hi: 0x81},\n\t{value: 0x8104, lo: 0xb6, hi: 0xb6},\n\t// Block 0x61, offset 0x22e\n\t{value: 0x0008, lo: 0x03},\n\t{value: 0x1637, lo: 0x9c, hi: 0x9d},\n\t{value: 0x0125, lo: 0x9e, hi: 0x9e},\n\t{value: 0x1643, lo: 0x9f, hi: 0x9f},\n\t// Block 0x62, offset 0x232\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0xad, hi: 0xad},\n\t// Block 0x63, offset 0x234\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0xe500, lo: 0x80, hi: 0x80},\n\t{value: 0xc600, lo: 0x81, hi: 0x9b},\n\t{value: 0xe500, lo: 0x9c, hi: 0x9c},\n\t{value: 0xc600, lo: 0x9d, hi: 0xb7},\n\t{value: 0xe500, lo: 0xb8, hi: 0xb8},\n\t{value: 0xc600, lo: 0xb9, hi: 0xbf},\n\t// Block 0x64, offset 0x23b\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0xc600, lo: 0x80, hi: 0x93},\n\t{value: 0xe500, lo: 0x94, hi: 0x94},\n\t{value: 0xc600, lo: 0x95, hi: 0xaf},\n\t{value: 0xe500, lo: 0xb0, hi: 0xb0},\n\t{value: 0xc600, lo: 0xb1, hi: 0xbf},\n\t// Block 0x65, offset 0x241\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0xc600, lo: 0x80, hi: 0x8b},\n\t{value: 0xe500, lo: 0x8c, hi: 0x8c},\n\t{value: 0xc600, lo: 0x8d, hi: 0xa7},\n\t{value: 0xe500, lo: 0xa8, hi: 0xa8},\n\t{value: 0xc600, lo: 0xa9, hi: 0xbf},\n\t// Block 0x66, offset 0x247\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0xc600, lo: 0x80, hi: 0x83},\n\t{value: 0xe500, lo: 0x84, hi: 0x84},\n\t{value: 0xc600, lo: 0x85, hi: 0x9f},\n\t{value: 0xe500, lo: 0xa0, hi: 0xa0},\n\t{value: 0xc600, lo: 0xa1, hi: 0xbb},\n\t{value: 0xe500, lo: 0xbc, hi: 0xbc},\n\t{value: 0xc600, lo: 0xbd, hi: 0xbf},\n\t// Block 0x67, offset 0x24f\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0xc600, lo: 0x80, hi: 0x97},\n\t{value: 0xe500, lo: 0x98, hi: 0x98},\n\t{value: 0xc600, lo: 0x99, hi: 0xb3},\n\t{value: 0xe500, lo: 0xb4, hi: 0xb4},\n\t{value: 0xc600, lo: 0xb5, hi: 0xbf},\n\t// Block 0x68, offset 0x255\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0xc600, lo: 0x80, hi: 0x8f},\n\t{value: 0xe500, lo: 0x90, hi: 0x90},\n\t{value: 0xc600, lo: 0x91, hi: 0xab},\n\t{value: 0xe500, lo: 0xac, hi: 0xac},\n\t{value: 0xc600, lo: 0xad, hi: 0xbf},\n\t// Block 0x69, offset 0x25b\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0xc600, lo: 0x80, hi: 0x87},\n\t{value: 0xe500, lo: 0x88, hi: 0x88},\n\t{value: 0xc600, lo: 0x89, hi: 0xa3},\n\t{value: 0xe500, lo: 0xa4, hi: 0xa4},\n\t{value: 0xc600, lo: 0xa5, hi: 0xbf},\n\t// Block 0x6a, offset 0x261\n\t{value: 0x0000, lo: 0x03},\n\t{value: 0xc600, lo: 0x80, hi: 0x87},\n\t{value: 0xe500, lo: 0x88, hi: 0x88},\n\t{value: 0xc600, lo: 0x89, hi: 0xa3},\n\t// Block 0x6b, offset 0x265\n\t{value: 0x0002, lo: 0x01},\n\t{value: 0x0003, lo: 0x81, hi: 0xbf},\n\t// Block 0x6c, offset 0x267\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x812d, lo: 0xbd, hi: 0xbd},\n\t// Block 0x6d, offset 0x269\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x812d, lo: 0xa0, hi: 0xa0},\n\t// Block 0x6e, offset 0x26b\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8132, lo: 0xb6, hi: 0xba},\n\t// Block 0x6f, offset 0x26d\n\t{value: 0x002c, lo: 0x05},\n\t{value: 0x812d, lo: 0x8d, hi: 0x8d},\n\t{value: 0x8132, lo: 0x8f, hi: 0x8f},\n\t{value: 0x8132, lo: 0xb8, hi: 0xb8},\n\t{value: 0x8101, lo: 0xb9, hi: 0xba},\n\t{value: 0x8104, lo: 0xbf, hi: 0xbf},\n\t// Block 0x70, offset 0x273\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8132, lo: 0xa5, hi: 0xa5},\n\t{value: 0x812d, lo: 0xa6, hi: 0xa6},\n\t// Block 0x71, offset 0x276\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8104, lo: 0x86, hi: 0x86},\n\t{value: 0x8104, lo: 0xbf, hi: 0xbf},\n\t// Block 0x72, offset 0x279\n\t{value: 0x17fe, lo: 0x07},\n\t{value: 0xa000, lo: 0x99, hi: 0x99},\n\t{value: 0x4238, lo: 0x9a, hi: 0x9a},\n\t{value: 0xa000, lo: 0x9b, hi: 0x9b},\n\t{value: 0x4242, lo: 0x9c, hi: 0x9c},\n\t{value: 0xa000, lo: 0xa5, hi: 0xa5},\n\t{value: 0x424c, lo: 0xab, hi: 0xab},\n\t{value: 0x8104, lo: 0xb9, hi: 0xba},\n\t// Block 0x73, offset 0x281\n\t{value: 0x0000, lo: 0x06},\n\t{value: 0x8132, lo: 0x80, hi: 0x82},\n\t{value: 0x9900, lo: 0xa7, hi: 0xa7},\n\t{value: 0x2d7e, lo: 0xae, hi: 0xae},\n\t{value: 0x2d88, lo: 0xaf, hi: 0xaf},\n\t{value: 0xa000, lo: 0xb1, hi: 0xb2},\n\t{value: 0x8104, lo: 0xb3, hi: 0xb4},\n\t// Block 0x74, offset 0x288\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8104, lo: 0x80, hi: 0x80},\n\t{value: 0x8102, lo: 0x8a, hi: 0x8a},\n\t// Block 0x75, offset 0x28b\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8104, lo: 0xb5, hi: 0xb5},\n\t{value: 0x8102, lo: 0xb6, hi: 0xb6},\n\t// Block 0x76, offset 0x28e\n\t{value: 0x0002, lo: 0x01},\n\t{value: 0x8102, lo: 0xa9, hi: 0xaa},\n\t// Block 0x77, offset 0x290\n\t{value: 0x0000, lo: 0x07},\n\t{value: 0xa000, lo: 0x87, hi: 0x87},\n\t{value: 0x2d92, lo: 0x8b, hi: 0x8b},\n\t{value: 0x2d9c, lo: 0x8c, hi: 0x8c},\n\t{value: 0x8104, lo: 0x8d, hi: 0x8d},\n\t{value: 0x9900, lo: 0x97, hi: 0x97},\n\t{value: 0x8132, lo: 0xa6, hi: 0xac},\n\t{value: 0x8132, lo: 0xb0, hi: 0xb4},\n\t// Block 0x78, offset 0x298\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8104, lo: 0x82, hi: 0x82},\n\t{value: 0x8102, lo: 0x86, hi: 0x86},\n\t// Block 0x79, offset 0x29b\n\t{value: 0x6b5a, lo: 0x06},\n\t{value: 0x9900, lo: 0xb0, hi: 0xb0},\n\t{value: 0xa000, lo: 0xb9, hi: 0xb9},\n\t{value: 0x9900, lo: 0xba, hi: 0xba},\n\t{value: 0x2db0, lo: 0xbb, hi: 0xbb},\n\t{value: 0x2da6, lo: 0xbc, hi: 0xbd},\n\t{value: 0x2dba, lo: 0xbe, hi: 0xbe},\n\t// Block 0x7a, offset 0x2a2\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8104, lo: 0x82, hi: 0x82},\n\t{value: 0x8102, lo: 0x83, hi: 0x83},\n\t// Block 0x7b, offset 0x2a5\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x9900, lo: 0xaf, hi: 0xaf},\n\t{value: 0xa000, lo: 0xb8, hi: 0xb9},\n\t{value: 0x2dc4, lo: 0xba, hi: 0xba},\n\t{value: 0x2dce, lo: 0xbb, hi: 0xbb},\n\t{value: 0x8104, lo: 0xbf, hi: 0xbf},\n\t// Block 0x7c, offset 0x2ab\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8102, lo: 0x80, hi: 0x80},\n\t// Block 0x7d, offset 0x2ad\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0xbf, hi: 0xbf},\n\t// Block 0x7e, offset 0x2af\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8104, lo: 0xb6, hi: 0xb6},\n\t{value: 0x8102, lo: 0xb7, hi: 0xb7},\n\t// Block 0x7f, offset 0x2b2\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8104, lo: 0xab, hi: 0xab},\n\t// Block 0x80, offset 0x2b4\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8101, lo: 0xb0, hi: 0xb4},\n\t// Block 0x81, offset 0x2b6\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8132, lo: 0xb0, hi: 0xb6},\n\t// Block 0x82, offset 0x2b8\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8101, lo: 0x9e, hi: 0x9e},\n\t// Block 0x83, offset 0x2ba\n\t{value: 0x0000, lo: 0x0c},\n\t{value: 0x45cc, lo: 0x9e, hi: 0x9e},\n\t{value: 0x45d6, lo: 0x9f, hi: 0x9f},\n\t{value: 0x460a, lo: 0xa0, hi: 0xa0},\n\t{value: 0x4618, lo: 0xa1, hi: 0xa1},\n\t{value: 0x4626, lo: 0xa2, hi: 0xa2},\n\t{value: 0x4634, lo: 0xa3, hi: 0xa3},\n\t{value: 0x4642, lo: 0xa4, hi: 0xa4},\n\t{value: 0x812b, lo: 0xa5, hi: 0xa6},\n\t{value: 0x8101, lo: 0xa7, hi: 0xa9},\n\t{value: 0x8130, lo: 0xad, hi: 0xad},\n\t{value: 0x812b, lo: 0xae, hi: 0xb2},\n\t{value: 0x812d, lo: 0xbb, hi: 0xbf},\n\t// Block 0x84, offset 0x2c7\n\t{value: 0x0000, lo: 0x09},\n\t{value: 0x812d, lo: 0x80, hi: 0x82},\n\t{value: 0x8132, lo: 0x85, hi: 0x89},\n\t{value: 0x812d, lo: 0x8a, hi: 0x8b},\n\t{value: 0x8132, lo: 0xaa, hi: 0xad},\n\t{value: 0x45e0, lo: 0xbb, hi: 0xbb},\n\t{value: 0x45ea, lo: 0xbc, hi: 0xbc},\n\t{value: 0x4650, lo: 0xbd, hi: 0xbd},\n\t{value: 0x466c, lo: 0xbe, hi: 0xbe},\n\t{value: 0x465e, lo: 0xbf, hi: 0xbf},\n\t// Block 0x85, offset 0x2d1\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x467a, lo: 0x80, hi: 0x80},\n\t// Block 0x86, offset 0x2d3\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x8132, lo: 0x82, hi: 0x84},\n\t// Block 0x87, offset 0x2d5\n\t{value: 0x0002, lo: 0x03},\n\t{value: 0x0043, lo: 0x80, hi: 0x99},\n\t{value: 0x0083, lo: 0x9a, hi: 0xb3},\n\t{value: 0x0043, lo: 0xb4, hi: 0xbf},\n\t// Block 0x88, offset 0x2d9\n\t{value: 0x0002, lo: 0x04},\n\t{value: 0x005b, lo: 0x80, hi: 0x8d},\n\t{value: 0x0083, lo: 0x8e, hi: 0x94},\n\t{value: 0x0093, lo: 0x96, hi: 0xa7},\n\t{value: 0x0043, lo: 0xa8, hi: 0xbf},\n\t// Block 0x89, offset 0x2de\n\t{value: 0x0002, lo: 0x0b},\n\t{value: 0x0073, lo: 0x80, hi: 0x81},\n\t{value: 0x0083, lo: 0x82, hi: 0x9b},\n\t{value: 0x0043, lo: 0x9c, hi: 0x9c},\n\t{value: 0x0047, lo: 0x9e, hi: 0x9f},\n\t{value: 0x004f, lo: 0xa2, hi: 0xa2},\n\t{value: 0x0055, lo: 0xa5, hi: 0xa6},\n\t{value: 0x005d, lo: 0xa9, hi: 0xac},\n\t{value: 0x0067, lo: 0xae, hi: 0xb5},\n\t{value: 0x0083, lo: 0xb6, hi: 0xb9},\n\t{value: 0x008d, lo: 0xbb, hi: 0xbb},\n\t{value: 0x0091, lo: 0xbd, hi: 0xbf},\n\t// Block 0x8a, offset 0x2ea\n\t{value: 0x0002, lo: 0x04},\n\t{value: 0x0097, lo: 0x80, hi: 0x83},\n\t{value: 0x00a1, lo: 0x85, hi: 0x8f},\n\t{value: 0x0043, lo: 0x90, hi: 0xa9},\n\t{value: 0x0083, lo: 0xaa, hi: 0xbf},\n\t// Block 0x8b, offset 0x2ef\n\t{value: 0x0002, lo: 0x08},\n\t{value: 0x00af, lo: 0x80, hi: 0x83},\n\t{value: 0x0043, lo: 0x84, hi: 0x85},\n\t{value: 0x0049, lo: 0x87, hi: 0x8a},\n\t{value: 0x0055, lo: 0x8d, hi: 0x94},\n\t{value: 0x0067, lo: 0x96, hi: 0x9c},\n\t{value: 0x0083, lo: 0x9e, hi: 0xb7},\n\t{value: 0x0043, lo: 0xb8, hi: 0xb9},\n\t{value: 0x0049, lo: 0xbb, hi: 0xbe},\n\t// Block 0x8c, offset 0x2f8\n\t{value: 0x0002, lo: 0x05},\n\t{value: 0x0053, lo: 0x80, hi: 0x84},\n\t{value: 0x005f, lo: 0x86, hi: 0x86},\n\t{value: 0x0067, lo: 0x8a, hi: 0x90},\n\t{value: 0x0083, lo: 0x92, hi: 0xab},\n\t{value: 0x0043, lo: 0xac, hi: 0xbf},\n\t// Block 0x8d, offset 0x2fe\n\t{value: 0x0002, lo: 0x04},\n\t{value: 0x006b, lo: 0x80, hi: 0x85},\n\t{value: 0x0083, lo: 0x86, hi: 0x9f},\n\t{value: 0x0043, lo: 0xa0, hi: 0xb9},\n\t{value: 0x0083, lo: 0xba, hi: 0xbf},\n\t// Block 0x8e, offset 0x303\n\t{value: 0x0002, lo: 0x03},\n\t{value: 0x008f, lo: 0x80, hi: 0x93},\n\t{value: 0x0043, lo: 0x94, hi: 0xad},\n\t{value: 0x0083, lo: 0xae, hi: 0xbf},\n\t// Block 0x8f, offset 0x307\n\t{value: 0x0002, lo: 0x04},\n\t{value: 0x00a7, lo: 0x80, hi: 0x87},\n\t{value: 0x0043, lo: 0x88, hi: 0xa1},\n\t{value: 0x0083, lo: 0xa2, hi: 0xbb},\n\t{value: 0x0043, lo: 0xbc, hi: 0xbf},\n\t// Block 0x90, offset 0x30c\n\t{value: 0x0002, lo: 0x03},\n\t{value: 0x004b, lo: 0x80, hi: 0x95},\n\t{value: 0x0083, lo: 0x96, hi: 0xaf},\n\t{value: 0x0043, lo: 0xb0, hi: 0xbf},\n\t// Block 0x91, offset 0x310\n\t{value: 0x0003, lo: 0x0f},\n\t{value: 0x01b8, lo: 0x80, hi: 0x80},\n\t{value: 0x045f, lo: 0x81, hi: 0x81},\n\t{value: 0x01bb, lo: 0x82, hi: 0x9a},\n\t{value: 0x045b, lo: 0x9b, hi: 0x9b},\n\t{value: 0x01c7, lo: 0x9c, hi: 0x9c},\n\t{value: 0x01d0, lo: 0x9d, hi: 0x9d},\n\t{value: 0x01d6, lo: 0x9e, hi: 0x9e},\n\t{value: 0x01fa, lo: 0x9f, hi: 0x9f},\n\t{value: 0x01eb, lo: 0xa0, hi: 0xa0},\n\t{value: 0x01e8, lo: 0xa1, hi: 0xa1},\n\t{value: 0x0173, lo: 0xa2, hi: 0xb2},\n\t{value: 0x0188, lo: 0xb3, hi: 0xb3},\n\t{value: 0x01a6, lo: 0xb4, hi: 0xba},\n\t{value: 0x045f, lo: 0xbb, hi: 0xbb},\n\t{value: 0x01bb, lo: 0xbc, hi: 0xbf},\n\t// Block 0x92, offset 0x320\n\t{value: 0x0003, lo: 0x0d},\n\t{value: 0x01c7, lo: 0x80, hi: 0x94},\n\t{value: 0x045b, lo: 0x95, hi: 0x95},\n\t{value: 0x01c7, lo: 0x96, hi: 0x96},\n\t{value: 0x01d0, lo: 0x97, hi: 0x97},\n\t{value: 0x01d6, lo: 0x98, hi: 0x98},\n\t{value: 0x01fa, lo: 0x99, hi: 0x99},\n\t{value: 0x01eb, lo: 0x9a, hi: 0x9a},\n\t{value: 0x01e8, lo: 0x9b, hi: 0x9b},\n\t{value: 0x0173, lo: 0x9c, hi: 0xac},\n\t{value: 0x0188, lo: 0xad, hi: 0xad},\n\t{value: 0x01a6, lo: 0xae, hi: 0xb4},\n\t{value: 0x045f, lo: 0xb5, hi: 0xb5},\n\t{value: 0x01bb, lo: 0xb6, hi: 0xbf},\n\t// Block 0x93, offset 0x32e\n\t{value: 0x0003, lo: 0x0d},\n\t{value: 0x01d9, lo: 0x80, hi: 0x8e},\n\t{value: 0x045b, lo: 0x8f, hi: 0x8f},\n\t{value: 0x01c7, lo: 0x90, hi: 0x90},\n\t{value: 0x01d0, lo: 0x91, hi: 0x91},\n\t{value: 0x01d6, lo: 0x92, hi: 0x92},\n\t{value: 0x01fa, lo: 0x93, hi: 0x93},\n\t{value: 0x01eb, lo: 0x94, hi: 0x94},\n\t{value: 0x01e8, lo: 0x95, hi: 0x95},\n\t{value: 0x0173, lo: 0x96, hi: 0xa6},\n\t{value: 0x0188, lo: 0xa7, hi: 0xa7},\n\t{value: 0x01a6, lo: 0xa8, hi: 0xae},\n\t{value: 0x045f, lo: 0xaf, hi: 0xaf},\n\t{value: 0x01bb, lo: 0xb0, hi: 0xbf},\n\t// Block 0x94, offset 0x33c\n\t{value: 0x0003, lo: 0x0d},\n\t{value: 0x01eb, lo: 0x80, hi: 0x88},\n\t{value: 0x045b, lo: 0x89, hi: 0x89},\n\t{value: 0x01c7, lo: 0x8a, hi: 0x8a},\n\t{value: 0x01d0, lo: 0x8b, hi: 0x8b},\n\t{value: 0x01d6, lo: 0x8c, hi: 0x8c},\n\t{value: 0x01fa, lo: 0x8d, hi: 0x8d},\n\t{value: 0x01eb, lo: 0x8e, hi: 0x8e},\n\t{value: 0x01e8, lo: 0x8f, hi: 0x8f},\n\t{value: 0x0173, lo: 0x90, hi: 0xa0},\n\t{value: 0x0188, lo: 0xa1, hi: 0xa1},\n\t{value: 0x01a6, lo: 0xa2, hi: 0xa8},\n\t{value: 0x045f, lo: 0xa9, hi: 0xa9},\n\t{value: 0x01bb, lo: 0xaa, hi: 0xbf},\n\t// Block 0x95, offset 0x34a\n\t{value: 0x0000, lo: 0x05},\n\t{value: 0x8132, lo: 0x80, hi: 0x86},\n\t{value: 0x8132, lo: 0x88, hi: 0x98},\n\t{value: 0x8132, lo: 0x9b, hi: 0xa1},\n\t{value: 0x8132, lo: 0xa3, hi: 0xa4},\n\t{value: 0x8132, lo: 0xa6, hi: 0xaa},\n\t// Block 0x96, offset 0x350\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x812d, lo: 0x90, hi: 0x96},\n\t// Block 0x97, offset 0x352\n\t{value: 0x0000, lo: 0x02},\n\t{value: 0x8132, lo: 0x84, hi: 0x89},\n\t{value: 0x8102, lo: 0x8a, hi: 0x8a},\n\t// Block 0x98, offset 0x355\n\t{value: 0x0002, lo: 0x09},\n\t{value: 0x0063, lo: 0x80, hi: 0x89},\n\t{value: 0x1951, lo: 0x8a, hi: 0x8a},\n\t{value: 0x1981, lo: 0x8b, hi: 0x8b},\n\t{value: 0x199c, lo: 0x8c, hi: 0x8c},\n\t{value: 0x19a2, lo: 0x8d, hi: 0x8d},\n\t{value: 0x1bc0, lo: 0x8e, hi: 0x8e},\n\t{value: 0x19ae, lo: 0x8f, hi: 0x8f},\n\t{value: 0x197b, lo: 0xaa, hi: 0xaa},\n\t{value: 0x197e, lo: 0xab, hi: 0xab},\n\t// Block 0x99, offset 0x35f\n\t{value: 0x0000, lo: 0x01},\n\t{value: 0x193f, lo: 0x90, hi: 0x90},\n\t// Block 0x9a, offset 0x361\n\t{value: 0x0028, lo: 0x09},\n\t{value: 0x2862, lo: 0x80, hi: 0x80},\n\t{value: 0x2826, lo: 0x81, hi: 0x81},\n\t{value: 0x2830, lo: 0x82, hi: 0x82},\n\t{value: 0x2844, lo: 0x83, hi: 0x84},\n\t{value: 0x284e, lo: 0x85, hi: 0x86},\n\t{value: 0x283a, lo: 0x87, hi: 0x87},\n\t{value: 0x2858, lo: 0x88, hi: 0x88},\n\t{value: 0x0b6f, lo: 0x90, hi: 0x90},\n\t{value: 0x08e7, lo: 0x91, hi: 0x91},\n}\n\n// recompMap: 7520 bytes (entries only)\nvar recompMap map[uint32]rune\nvar recompMapOnce sync.Once\n\nconst recompMapPacked = \"\" +\n\t\"\\x00A\\x03\\x00\\x00\\x00\\x00\\xc0\" + // 0x00410300: 0x000000C0\n\t\"\\x00A\\x03\\x01\\x00\\x00\\x00\\xc1\" + // 0x00410301: 0x000000C1\n\t\"\\x00A\\x03\\x02\\x00\\x00\\x00\\xc2\" + // 0x00410302: 0x000000C2\n\t\"\\x00A\\x03\\x03\\x00\\x00\\x00\\xc3\" + // 0x00410303: 0x000000C3\n\t\"\\x00A\\x03\\b\\x00\\x00\\x00\\xc4\" + // 0x00410308: 0x000000C4\n\t\"\\x00A\\x03\\n\\x00\\x00\\x00\\xc5\" + // 0x0041030A: 0x000000C5\n\t\"\\x00C\\x03'\\x00\\x00\\x00\\xc7\" + // 0x00430327: 0x000000C7\n\t\"\\x00E\\x03\\x00\\x00\\x00\\x00\\xc8\" + // 0x00450300: 0x000000C8\n\t\"\\x00E\\x03\\x01\\x00\\x00\\x00\\xc9\" + // 0x00450301: 0x000000C9\n\t\"\\x00E\\x03\\x02\\x00\\x00\\x00\\xca\" + // 0x00450302: 0x000000CA\n\t\"\\x00E\\x03\\b\\x00\\x00\\x00\\xcb\" + // 0x00450308: 0x000000CB\n\t\"\\x00I\\x03\\x00\\x00\\x00\\x00\\xcc\" + // 0x00490300: 0x000000CC\n\t\"\\x00I\\x03\\x01\\x00\\x00\\x00\\xcd\" + // 0x00490301: 0x000000CD\n\t\"\\x00I\\x03\\x02\\x00\\x00\\x00\\xce\" + // 0x00490302: 0x000000CE\n\t\"\\x00I\\x03\\b\\x00\\x00\\x00\\xcf\" + // 0x00490308: 0x000000CF\n\t\"\\x00N\\x03\\x03\\x00\\x00\\x00\\xd1\" + // 0x004E0303: 0x000000D1\n\t\"\\x00O\\x03\\x00\\x00\\x00\\x00\\xd2\" + // 0x004F0300: 0x000000D2\n\t\"\\x00O\\x03\\x01\\x00\\x00\\x00\\xd3\" + // 0x004F0301: 0x000000D3\n\t\"\\x00O\\x03\\x02\\x00\\x00\\x00\\xd4\" + // 0x004F0302: 0x000000D4\n\t\"\\x00O\\x03\\x03\\x00\\x00\\x00\\xd5\" + // 0x004F0303: 0x000000D5\n\t\"\\x00O\\x03\\b\\x00\\x00\\x00\\xd6\" + // 0x004F0308: 0x000000D6\n\t\"\\x00U\\x03\\x00\\x00\\x00\\x00\\xd9\" + // 0x00550300: 0x000000D9\n\t\"\\x00U\\x03\\x01\\x00\\x00\\x00\\xda\" + // 0x00550301: 0x000000DA\n\t\"\\x00U\\x03\\x02\\x00\\x00\\x00\\xdb\" + // 0x00550302: 0x000000DB\n\t\"\\x00U\\x03\\b\\x00\\x00\\x00\\xdc\" + // 0x00550308: 0x000000DC\n\t\"\\x00Y\\x03\\x01\\x00\\x00\\x00\\xdd\" + // 0x00590301: 0x000000DD\n\t\"\\x00a\\x03\\x00\\x00\\x00\\x00\\xe0\" + // 0x00610300: 0x000000E0\n\t\"\\x00a\\x03\\x01\\x00\\x00\\x00\\xe1\" + // 0x00610301: 0x000000E1\n\t\"\\x00a\\x03\\x02\\x00\\x00\\x00\\xe2\" + // 0x00610302: 0x000000E2\n\t\"\\x00a\\x03\\x03\\x00\\x00\\x00\\xe3\" + // 0x00610303: 0x000000E3\n\t\"\\x00a\\x03\\b\\x00\\x00\\x00\\xe4\" + // 0x00610308: 0x000000E4\n\t\"\\x00a\\x03\\n\\x00\\x00\\x00\\xe5\" + // 0x0061030A: 0x000000E5\n\t\"\\x00c\\x03'\\x00\\x00\\x00\\xe7\" + // 0x00630327: 0x000000E7\n\t\"\\x00e\\x03\\x00\\x00\\x00\\x00\\xe8\" + // 0x00650300: 0x000000E8\n\t\"\\x00e\\x03\\x01\\x00\\x00\\x00\\xe9\" + // 0x00650301: 0x000000E9\n\t\"\\x00e\\x03\\x02\\x00\\x00\\x00\\xea\" + // 0x00650302: 0x000000EA\n\t\"\\x00e\\x03\\b\\x00\\x00\\x00\\xeb\" + // 0x00650308: 0x000000EB\n\t\"\\x00i\\x03\\x00\\x00\\x00\\x00\\xec\" + // 0x00690300: 0x000000EC\n\t\"\\x00i\\x03\\x01\\x00\\x00\\x00\\xed\" + // 0x00690301: 0x000000ED\n\t\"\\x00i\\x03\\x02\\x00\\x00\\x00\\xee\" + // 0x00690302: 0x000000EE\n\t\"\\x00i\\x03\\b\\x00\\x00\\x00\\xef\" + // 0x00690308: 0x000000EF\n\t\"\\x00n\\x03\\x03\\x00\\x00\\x00\\xf1\" + // 0x006E0303: 0x000000F1\n\t\"\\x00o\\x03\\x00\\x00\\x00\\x00\\xf2\" + // 0x006F0300: 0x000000F2\n\t\"\\x00o\\x03\\x01\\x00\\x00\\x00\\xf3\" + // 0x006F0301: 0x000000F3\n\t\"\\x00o\\x03\\x02\\x00\\x00\\x00\\xf4\" + // 0x006F0302: 0x000000F4\n\t\"\\x00o\\x03\\x03\\x00\\x00\\x00\\xf5\" + // 0x006F0303: 0x000000F5\n\t\"\\x00o\\x03\\b\\x00\\x00\\x00\\xf6\" + // 0x006F0308: 0x000000F6\n\t\"\\x00u\\x03\\x00\\x00\\x00\\x00\\xf9\" + // 0x00750300: 0x000000F9\n\t\"\\x00u\\x03\\x01\\x00\\x00\\x00\\xfa\" + // 0x00750301: 0x000000FA\n\t\"\\x00u\\x03\\x02\\x00\\x00\\x00\\xfb\" + // 0x00750302: 0x000000FB\n\t\"\\x00u\\x03\\b\\x00\\x00\\x00\\xfc\" + // 0x00750308: 0x000000FC\n\t\"\\x00y\\x03\\x01\\x00\\x00\\x00\\xfd\" + // 0x00790301: 0x000000FD\n\t\"\\x00y\\x03\\b\\x00\\x00\\x00\\xff\" + // 0x00790308: 0x000000FF\n\t\"\\x00A\\x03\\x04\\x00\\x00\\x01\\x00\" + // 0x00410304: 0x00000100\n\t\"\\x00a\\x03\\x04\\x00\\x00\\x01\\x01\" + // 0x00610304: 0x00000101\n\t\"\\x00A\\x03\\x06\\x00\\x00\\x01\\x02\" + // 0x00410306: 0x00000102\n\t\"\\x00a\\x03\\x06\\x00\\x00\\x01\\x03\" + // 0x00610306: 0x00000103\n\t\"\\x00A\\x03(\\x00\\x00\\x01\\x04\" + // 0x00410328: 0x00000104\n\t\"\\x00a\\x03(\\x00\\x00\\x01\\x05\" + // 0x00610328: 0x00000105\n\t\"\\x00C\\x03\\x01\\x00\\x00\\x01\\x06\" + // 0x00430301: 0x00000106\n\t\"\\x00c\\x03\\x01\\x00\\x00\\x01\\a\" + // 0x00630301: 0x00000107\n\t\"\\x00C\\x03\\x02\\x00\\x00\\x01\\b\" + // 0x00430302: 0x00000108\n\t\"\\x00c\\x03\\x02\\x00\\x00\\x01\\t\" + // 0x00630302: 0x00000109\n\t\"\\x00C\\x03\\a\\x00\\x00\\x01\\n\" + // 0x00430307: 0x0000010A\n\t\"\\x00c\\x03\\a\\x00\\x00\\x01\\v\" + // 0x00630307: 0x0000010B\n\t\"\\x00C\\x03\\f\\x00\\x00\\x01\\f\" + // 0x0043030C: 0x0000010C\n\t\"\\x00c\\x03\\f\\x00\\x00\\x01\\r\" + // 0x0063030C: 0x0000010D\n\t\"\\x00D\\x03\\f\\x00\\x00\\x01\\x0e\" + // 0x0044030C: 0x0000010E\n\t\"\\x00d\\x03\\f\\x00\\x00\\x01\\x0f\" + // 0x0064030C: 0x0000010F\n\t\"\\x00E\\x03\\x04\\x00\\x00\\x01\\x12\" + // 0x00450304: 0x00000112\n\t\"\\x00e\\x03\\x04\\x00\\x00\\x01\\x13\" + // 0x00650304: 0x00000113\n\t\"\\x00E\\x03\\x06\\x00\\x00\\x01\\x14\" + // 0x00450306: 0x00000114\n\t\"\\x00e\\x03\\x06\\x00\\x00\\x01\\x15\" + // 0x00650306: 0x00000115\n\t\"\\x00E\\x03\\a\\x00\\x00\\x01\\x16\" + // 0x00450307: 0x00000116\n\t\"\\x00e\\x03\\a\\x00\\x00\\x01\\x17\" + // 0x00650307: 0x00000117\n\t\"\\x00E\\x03(\\x00\\x00\\x01\\x18\" + // 0x00450328: 0x00000118\n\t\"\\x00e\\x03(\\x00\\x00\\x01\\x19\" + // 0x00650328: 0x00000119\n\t\"\\x00E\\x03\\f\\x00\\x00\\x01\\x1a\" + // 0x0045030C: 0x0000011A\n\t\"\\x00e\\x03\\f\\x00\\x00\\x01\\x1b\" + // 0x0065030C: 0x0000011B\n\t\"\\x00G\\x03\\x02\\x00\\x00\\x01\\x1c\" + // 0x00470302: 0x0000011C\n\t\"\\x00g\\x03\\x02\\x00\\x00\\x01\\x1d\" + // 0x00670302: 0x0000011D\n\t\"\\x00G\\x03\\x06\\x00\\x00\\x01\\x1e\" + // 0x00470306: 0x0000011E\n\t\"\\x00g\\x03\\x06\\x00\\x00\\x01\\x1f\" + // 0x00670306: 0x0000011F\n\t\"\\x00G\\x03\\a\\x00\\x00\\x01 \" + // 0x00470307: 0x00000120\n\t\"\\x00g\\x03\\a\\x00\\x00\\x01!\" + // 0x00670307: 0x00000121\n\t\"\\x00G\\x03'\\x00\\x00\\x01\\\"\" + // 0x00470327: 0x00000122\n\t\"\\x00g\\x03'\\x00\\x00\\x01#\" + // 0x00670327: 0x00000123\n\t\"\\x00H\\x03\\x02\\x00\\x00\\x01$\" + // 0x00480302: 0x00000124\n\t\"\\x00h\\x03\\x02\\x00\\x00\\x01%\" + // 0x00680302: 0x00000125\n\t\"\\x00I\\x03\\x03\\x00\\x00\\x01(\" + // 0x00490303: 0x00000128\n\t\"\\x00i\\x03\\x03\\x00\\x00\\x01)\" + // 0x00690303: 0x00000129\n\t\"\\x00I\\x03\\x04\\x00\\x00\\x01*\" + // 0x00490304: 0x0000012A\n\t\"\\x00i\\x03\\x04\\x00\\x00\\x01+\" + // 0x00690304: 0x0000012B\n\t\"\\x00I\\x03\\x06\\x00\\x00\\x01,\" + // 0x00490306: 0x0000012C\n\t\"\\x00i\\x03\\x06\\x00\\x00\\x01-\" + // 0x00690306: 0x0000012D\n\t\"\\x00I\\x03(\\x00\\x00\\x01.\" + // 0x00490328: 0x0000012E\n\t\"\\x00i\\x03(\\x00\\x00\\x01/\" + // 0x00690328: 0x0000012F\n\t\"\\x00I\\x03\\a\\x00\\x00\\x010\" + // 0x00490307: 0x00000130\n\t\"\\x00J\\x03\\x02\\x00\\x00\\x014\" + // 0x004A0302: 0x00000134\n\t\"\\x00j\\x03\\x02\\x00\\x00\\x015\" + // 0x006A0302: 0x00000135\n\t\"\\x00K\\x03'\\x00\\x00\\x016\" + // 0x004B0327: 0x00000136\n\t\"\\x00k\\x03'\\x00\\x00\\x017\" + // 0x006B0327: 0x00000137\n\t\"\\x00L\\x03\\x01\\x00\\x00\\x019\" + // 0x004C0301: 0x00000139\n\t\"\\x00l\\x03\\x01\\x00\\x00\\x01:\" + // 0x006C0301: 0x0000013A\n\t\"\\x00L\\x03'\\x00\\x00\\x01;\" + // 0x004C0327: 0x0000013B\n\t\"\\x00l\\x03'\\x00\\x00\\x01<\" + // 0x006C0327: 0x0000013C\n\t\"\\x00L\\x03\\f\\x00\\x00\\x01=\" + // 0x004C030C: 0x0000013D\n\t\"\\x00l\\x03\\f\\x00\\x00\\x01>\" + // 0x006C030C: 0x0000013E\n\t\"\\x00N\\x03\\x01\\x00\\x00\\x01C\" + // 0x004E0301: 0x00000143\n\t\"\\x00n\\x03\\x01\\x00\\x00\\x01D\" + // 0x006E0301: 0x00000144\n\t\"\\x00N\\x03'\\x00\\x00\\x01E\" + // 0x004E0327: 0x00000145\n\t\"\\x00n\\x03'\\x00\\x00\\x01F\" + // 0x006E0327: 0x00000146\n\t\"\\x00N\\x03\\f\\x00\\x00\\x01G\" + // 0x004E030C: 0x00000147\n\t\"\\x00n\\x03\\f\\x00\\x00\\x01H\" + // 0x006E030C: 0x00000148\n\t\"\\x00O\\x03\\x04\\x00\\x00\\x01L\" + // 0x004F0304: 0x0000014C\n\t\"\\x00o\\x03\\x04\\x00\\x00\\x01M\" + // 0x006F0304: 0x0000014D\n\t\"\\x00O\\x03\\x06\\x00\\x00\\x01N\" + // 0x004F0306: 0x0000014E\n\t\"\\x00o\\x03\\x06\\x00\\x00\\x01O\" + // 0x006F0306: 0x0000014F\n\t\"\\x00O\\x03\\v\\x00\\x00\\x01P\" + // 0x004F030B: 0x00000150\n\t\"\\x00o\\x03\\v\\x00\\x00\\x01Q\" + // 0x006F030B: 0x00000151\n\t\"\\x00R\\x03\\x01\\x00\\x00\\x01T\" + // 0x00520301: 0x00000154\n\t\"\\x00r\\x03\\x01\\x00\\x00\\x01U\" + // 0x00720301: 0x00000155\n\t\"\\x00R\\x03'\\x00\\x00\\x01V\" + // 0x00520327: 0x00000156\n\t\"\\x00r\\x03'\\x00\\x00\\x01W\" + // 0x00720327: 0x00000157\n\t\"\\x00R\\x03\\f\\x00\\x00\\x01X\" + // 0x0052030C: 0x00000158\n\t\"\\x00r\\x03\\f\\x00\\x00\\x01Y\" + // 0x0072030C: 0x00000159\n\t\"\\x00S\\x03\\x01\\x00\\x00\\x01Z\" + // 0x00530301: 0x0000015A\n\t\"\\x00s\\x03\\x01\\x00\\x00\\x01[\" + // 0x00730301: 0x0000015B\n\t\"\\x00S\\x03\\x02\\x00\\x00\\x01\\\\\" + // 0x00530302: 0x0000015C\n\t\"\\x00s\\x03\\x02\\x00\\x00\\x01]\" + // 0x00730302: 0x0000015D\n\t\"\\x00S\\x03'\\x00\\x00\\x01^\" + // 0x00530327: 0x0000015E\n\t\"\\x00s\\x03'\\x00\\x00\\x01_\" + // 0x00730327: 0x0000015F\n\t\"\\x00S\\x03\\f\\x00\\x00\\x01`\" + // 0x0053030C: 0x00000160\n\t\"\\x00s\\x03\\f\\x00\\x00\\x01a\" + // 0x0073030C: 0x00000161\n\t\"\\x00T\\x03'\\x00\\x00\\x01b\" + // 0x00540327: 0x00000162\n\t\"\\x00t\\x03'\\x00\\x00\\x01c\" + // 0x00740327: 0x00000163\n\t\"\\x00T\\x03\\f\\x00\\x00\\x01d\" + // 0x0054030C: 0x00000164\n\t\"\\x00t\\x03\\f\\x00\\x00\\x01e\" + // 0x0074030C: 0x00000165\n\t\"\\x00U\\x03\\x03\\x00\\x00\\x01h\" + // 0x00550303: 0x00000168\n\t\"\\x00u\\x03\\x03\\x00\\x00\\x01i\" + // 0x00750303: 0x00000169\n\t\"\\x00U\\x03\\x04\\x00\\x00\\x01j\" + // 0x00550304: 0x0000016A\n\t\"\\x00u\\x03\\x04\\x00\\x00\\x01k\" + // 0x00750304: 0x0000016B\n\t\"\\x00U\\x03\\x06\\x00\\x00\\x01l\" + // 0x00550306: 0x0000016C\n\t\"\\x00u\\x03\\x06\\x00\\x00\\x01m\" + // 0x00750306: 0x0000016D\n\t\"\\x00U\\x03\\n\\x00\\x00\\x01n\" + // 0x0055030A: 0x0000016E\n\t\"\\x00u\\x03\\n\\x00\\x00\\x01o\" + // 0x0075030A: 0x0000016F\n\t\"\\x00U\\x03\\v\\x00\\x00\\x01p\" + // 0x0055030B: 0x00000170\n\t\"\\x00u\\x03\\v\\x00\\x00\\x01q\" + // 0x0075030B: 0x00000171\n\t\"\\x00U\\x03(\\x00\\x00\\x01r\" + // 0x00550328: 0x00000172\n\t\"\\x00u\\x03(\\x00\\x00\\x01s\" + // 0x00750328: 0x00000173\n\t\"\\x00W\\x03\\x02\\x00\\x00\\x01t\" + // 0x00570302: 0x00000174\n\t\"\\x00w\\x03\\x02\\x00\\x00\\x01u\" + // 0x00770302: 0x00000175\n\t\"\\x00Y\\x03\\x02\\x00\\x00\\x01v\" + // 0x00590302: 0x00000176\n\t\"\\x00y\\x03\\x02\\x00\\x00\\x01w\" + // 0x00790302: 0x00000177\n\t\"\\x00Y\\x03\\b\\x00\\x00\\x01x\" + // 0x00590308: 0x00000178\n\t\"\\x00Z\\x03\\x01\\x00\\x00\\x01y\" + // 0x005A0301: 0x00000179\n\t\"\\x00z\\x03\\x01\\x00\\x00\\x01z\" + // 0x007A0301: 0x0000017A\n\t\"\\x00Z\\x03\\a\\x00\\x00\\x01{\" + // 0x005A0307: 0x0000017B\n\t\"\\x00z\\x03\\a\\x00\\x00\\x01|\" + // 0x007A0307: 0x0000017C\n\t\"\\x00Z\\x03\\f\\x00\\x00\\x01}\" + // 0x005A030C: 0x0000017D\n\t\"\\x00z\\x03\\f\\x00\\x00\\x01~\" + // 0x007A030C: 0x0000017E\n\t\"\\x00O\\x03\\x1b\\x00\\x00\\x01\\xa0\" + // 0x004F031B: 0x000001A0\n\t\"\\x00o\\x03\\x1b\\x00\\x00\\x01\\xa1\" + // 0x006F031B: 0x000001A1\n\t\"\\x00U\\x03\\x1b\\x00\\x00\\x01\\xaf\" + // 0x0055031B: 0x000001AF\n\t\"\\x00u\\x03\\x1b\\x00\\x00\\x01\\xb0\" + // 0x0075031B: 0x000001B0\n\t\"\\x00A\\x03\\f\\x00\\x00\\x01\\xcd\" + // 0x0041030C: 0x000001CD\n\t\"\\x00a\\x03\\f\\x00\\x00\\x01\\xce\" + // 0x0061030C: 0x000001CE\n\t\"\\x00I\\x03\\f\\x00\\x00\\x01\\xcf\" + // 0x0049030C: 0x000001CF\n\t\"\\x00i\\x03\\f\\x00\\x00\\x01\\xd0\" + // 0x0069030C: 0x000001D0\n\t\"\\x00O\\x03\\f\\x00\\x00\\x01\\xd1\" + // 0x004F030C: 0x000001D1\n\t\"\\x00o\\x03\\f\\x00\\x00\\x01\\xd2\" + // 0x006F030C: 0x000001D2\n\t\"\\x00U\\x03\\f\\x00\\x00\\x01\\xd3\" + // 0x0055030C: 0x000001D3\n\t\"\\x00u\\x03\\f\\x00\\x00\\x01\\xd4\" + // 0x0075030C: 0x000001D4\n\t\"\\x00\\xdc\\x03\\x04\\x00\\x00\\x01\\xd5\" + // 0x00DC0304: 0x000001D5\n\t\"\\x00\\xfc\\x03\\x04\\x00\\x00\\x01\\xd6\" + // 0x00FC0304: 0x000001D6\n\t\"\\x00\\xdc\\x03\\x01\\x00\\x00\\x01\\xd7\" + // 0x00DC0301: 0x000001D7\n\t\"\\x00\\xfc\\x03\\x01\\x00\\x00\\x01\\xd8\" + // 0x00FC0301: 0x000001D8\n\t\"\\x00\\xdc\\x03\\f\\x00\\x00\\x01\\xd9\" + // 0x00DC030C: 0x000001D9\n\t\"\\x00\\xfc\\x03\\f\\x00\\x00\\x01\\xda\" + // 0x00FC030C: 0x000001DA\n\t\"\\x00\\xdc\\x03\\x00\\x00\\x00\\x01\\xdb\" + // 0x00DC0300: 0x000001DB\n\t\"\\x00\\xfc\\x03\\x00\\x00\\x00\\x01\\xdc\" + // 0x00FC0300: 0x000001DC\n\t\"\\x00\\xc4\\x03\\x04\\x00\\x00\\x01\\xde\" + // 0x00C40304: 0x000001DE\n\t\"\\x00\\xe4\\x03\\x04\\x00\\x00\\x01\\xdf\" + // 0x00E40304: 0x000001DF\n\t\"\\x02&\\x03\\x04\\x00\\x00\\x01\\xe0\" + // 0x02260304: 0x000001E0\n\t\"\\x02'\\x03\\x04\\x00\\x00\\x01\\xe1\" + // 0x02270304: 0x000001E1\n\t\"\\x00\\xc6\\x03\\x04\\x00\\x00\\x01\\xe2\" + // 0x00C60304: 0x000001E2\n\t\"\\x00\\xe6\\x03\\x04\\x00\\x00\\x01\\xe3\" + // 0x00E60304: 0x000001E3\n\t\"\\x00G\\x03\\f\\x00\\x00\\x01\\xe6\" + // 0x0047030C: 0x000001E6\n\t\"\\x00g\\x03\\f\\x00\\x00\\x01\\xe7\" + // 0x0067030C: 0x000001E7\n\t\"\\x00K\\x03\\f\\x00\\x00\\x01\\xe8\" + // 0x004B030C: 0x000001E8\n\t\"\\x00k\\x03\\f\\x00\\x00\\x01\\xe9\" + // 0x006B030C: 0x000001E9\n\t\"\\x00O\\x03(\\x00\\x00\\x01\\xea\" + // 0x004F0328: 0x000001EA\n\t\"\\x00o\\x03(\\x00\\x00\\x01\\xeb\" + // 0x006F0328: 0x000001EB\n\t\"\\x01\\xea\\x03\\x04\\x00\\x00\\x01\\xec\" + // 0x01EA0304: 0x000001EC\n\t\"\\x01\\xeb\\x03\\x04\\x00\\x00\\x01\\xed\" + // 0x01EB0304: 0x000001ED\n\t\"\\x01\\xb7\\x03\\f\\x00\\x00\\x01\\xee\" + // 0x01B7030C: 0x000001EE\n\t\"\\x02\\x92\\x03\\f\\x00\\x00\\x01\\xef\" + // 0x0292030C: 0x000001EF\n\t\"\\x00j\\x03\\f\\x00\\x00\\x01\\xf0\" + // 0x006A030C: 0x000001F0\n\t\"\\x00G\\x03\\x01\\x00\\x00\\x01\\xf4\" + // 0x00470301: 0x000001F4\n\t\"\\x00g\\x03\\x01\\x00\\x00\\x01\\xf5\" + // 0x00670301: 0x000001F5\n\t\"\\x00N\\x03\\x00\\x00\\x00\\x01\\xf8\" + // 0x004E0300: 0x000001F8\n\t\"\\x00n\\x03\\x00\\x00\\x00\\x01\\xf9\" + // 0x006E0300: 0x000001F9\n\t\"\\x00\\xc5\\x03\\x01\\x00\\x00\\x01\\xfa\" + // 0x00C50301: 0x000001FA\n\t\"\\x00\\xe5\\x03\\x01\\x00\\x00\\x01\\xfb\" + // 0x00E50301: 0x000001FB\n\t\"\\x00\\xc6\\x03\\x01\\x00\\x00\\x01\\xfc\" + // 0x00C60301: 0x000001FC\n\t\"\\x00\\xe6\\x03\\x01\\x00\\x00\\x01\\xfd\" + // 0x00E60301: 0x000001FD\n\t\"\\x00\\xd8\\x03\\x01\\x00\\x00\\x01\\xfe\" + // 0x00D80301: 0x000001FE\n\t\"\\x00\\xf8\\x03\\x01\\x00\\x00\\x01\\xff\" + // 0x00F80301: 0x000001FF\n\t\"\\x00A\\x03\\x0f\\x00\\x00\\x02\\x00\" + // 0x0041030F: 0x00000200\n\t\"\\x00a\\x03\\x0f\\x00\\x00\\x02\\x01\" + // 0x0061030F: 0x00000201\n\t\"\\x00A\\x03\\x11\\x00\\x00\\x02\\x02\" + // 0x00410311: 0x00000202\n\t\"\\x00a\\x03\\x11\\x00\\x00\\x02\\x03\" + // 0x00610311: 0x00000203\n\t\"\\x00E\\x03\\x0f\\x00\\x00\\x02\\x04\" + // 0x0045030F: 0x00000204\n\t\"\\x00e\\x03\\x0f\\x00\\x00\\x02\\x05\" + // 0x0065030F: 0x00000205\n\t\"\\x00E\\x03\\x11\\x00\\x00\\x02\\x06\" + // 0x00450311: 0x00000206\n\t\"\\x00e\\x03\\x11\\x00\\x00\\x02\\a\" + // 0x00650311: 0x00000207\n\t\"\\x00I\\x03\\x0f\\x00\\x00\\x02\\b\" + // 0x0049030F: 0x00000208\n\t\"\\x00i\\x03\\x0f\\x00\\x00\\x02\\t\" + // 0x0069030F: 0x00000209\n\t\"\\x00I\\x03\\x11\\x00\\x00\\x02\\n\" + // 0x00490311: 0x0000020A\n\t\"\\x00i\\x03\\x11\\x00\\x00\\x02\\v\" + // 0x00690311: 0x0000020B\n\t\"\\x00O\\x03\\x0f\\x00\\x00\\x02\\f\" + // 0x004F030F: 0x0000020C\n\t\"\\x00o\\x03\\x0f\\x00\\x00\\x02\\r\" + // 0x006F030F: 0x0000020D\n\t\"\\x00O\\x03\\x11\\x00\\x00\\x02\\x0e\" + // 0x004F0311: 0x0000020E\n\t\"\\x00o\\x03\\x11\\x00\\x00\\x02\\x0f\" + // 0x006F0311: 0x0000020F\n\t\"\\x00R\\x03\\x0f\\x00\\x00\\x02\\x10\" + // 0x0052030F: 0x00000210\n\t\"\\x00r\\x03\\x0f\\x00\\x00\\x02\\x11\" + // 0x0072030F: 0x00000211\n\t\"\\x00R\\x03\\x11\\x00\\x00\\x02\\x12\" + // 0x00520311: 0x00000212\n\t\"\\x00r\\x03\\x11\\x00\\x00\\x02\\x13\" + // 0x00720311: 0x00000213\n\t\"\\x00U\\x03\\x0f\\x00\\x00\\x02\\x14\" + // 0x0055030F: 0x00000214\n\t\"\\x00u\\x03\\x0f\\x00\\x00\\x02\\x15\" + // 0x0075030F: 0x00000215\n\t\"\\x00U\\x03\\x11\\x00\\x00\\x02\\x16\" + // 0x00550311: 0x00000216\n\t\"\\x00u\\x03\\x11\\x00\\x00\\x02\\x17\" + // 0x00750311: 0x00000217\n\t\"\\x00S\\x03&\\x00\\x00\\x02\\x18\" + // 0x00530326: 0x00000218\n\t\"\\x00s\\x03&\\x00\\x00\\x02\\x19\" + // 0x00730326: 0x00000219\n\t\"\\x00T\\x03&\\x00\\x00\\x02\\x1a\" + // 0x00540326: 0x0000021A\n\t\"\\x00t\\x03&\\x00\\x00\\x02\\x1b\" + // 0x00740326: 0x0000021B\n\t\"\\x00H\\x03\\f\\x00\\x00\\x02\\x1e\" + // 0x0048030C: 0x0000021E\n\t\"\\x00h\\x03\\f\\x00\\x00\\x02\\x1f\" + // 0x0068030C: 0x0000021F\n\t\"\\x00A\\x03\\a\\x00\\x00\\x02&\" + // 0x00410307: 0x00000226\n\t\"\\x00a\\x03\\a\\x00\\x00\\x02'\" + // 0x00610307: 0x00000227\n\t\"\\x00E\\x03'\\x00\\x00\\x02(\" + // 0x00450327: 0x00000228\n\t\"\\x00e\\x03'\\x00\\x00\\x02)\" + // 0x00650327: 0x00000229\n\t\"\\x00\\xd6\\x03\\x04\\x00\\x00\\x02*\" + // 0x00D60304: 0x0000022A\n\t\"\\x00\\xf6\\x03\\x04\\x00\\x00\\x02+\" + // 0x00F60304: 0x0000022B\n\t\"\\x00\\xd5\\x03\\x04\\x00\\x00\\x02,\" + // 0x00D50304: 0x0000022C\n\t\"\\x00\\xf5\\x03\\x04\\x00\\x00\\x02-\" + // 0x00F50304: 0x0000022D\n\t\"\\x00O\\x03\\a\\x00\\x00\\x02.\" + // 0x004F0307: 0x0000022E\n\t\"\\x00o\\x03\\a\\x00\\x00\\x02/\" + // 0x006F0307: 0x0000022F\n\t\"\\x02.\\x03\\x04\\x00\\x00\\x020\" + // 0x022E0304: 0x00000230\n\t\"\\x02/\\x03\\x04\\x00\\x00\\x021\" + // 0x022F0304: 0x00000231\n\t\"\\x00Y\\x03\\x04\\x00\\x00\\x022\" + // 0x00590304: 0x00000232\n\t\"\\x00y\\x03\\x04\\x00\\x00\\x023\" + // 0x00790304: 0x00000233\n\t\"\\x00\\xa8\\x03\\x01\\x00\\x00\\x03\\x85\" + // 0x00A80301: 0x00000385\n\t\"\\x03\\x91\\x03\\x01\\x00\\x00\\x03\\x86\" + // 0x03910301: 0x00000386\n\t\"\\x03\\x95\\x03\\x01\\x00\\x00\\x03\\x88\" + // 0x03950301: 0x00000388\n\t\"\\x03\\x97\\x03\\x01\\x00\\x00\\x03\\x89\" + // 0x03970301: 0x00000389\n\t\"\\x03\\x99\\x03\\x01\\x00\\x00\\x03\\x8a\" + // 0x03990301: 0x0000038A\n\t\"\\x03\\x9f\\x03\\x01\\x00\\x00\\x03\\x8c\" + // 0x039F0301: 0x0000038C\n\t\"\\x03\\xa5\\x03\\x01\\x00\\x00\\x03\\x8e\" + // 0x03A50301: 0x0000038E\n\t\"\\x03\\xa9\\x03\\x01\\x00\\x00\\x03\\x8f\" + // 0x03A90301: 0x0000038F\n\t\"\\x03\\xca\\x03\\x01\\x00\\x00\\x03\\x90\" + // 0x03CA0301: 0x00000390\n\t\"\\x03\\x99\\x03\\b\\x00\\x00\\x03\\xaa\" + // 0x03990308: 0x000003AA\n\t\"\\x03\\xa5\\x03\\b\\x00\\x00\\x03\\xab\" + // 0x03A50308: 0x000003AB\n\t\"\\x03\\xb1\\x03\\x01\\x00\\x00\\x03\\xac\" + // 0x03B10301: 0x000003AC\n\t\"\\x03\\xb5\\x03\\x01\\x00\\x00\\x03\\xad\" + // 0x03B50301: 0x000003AD\n\t\"\\x03\\xb7\\x03\\x01\\x00\\x00\\x03\\xae\" + // 0x03B70301: 0x000003AE\n\t\"\\x03\\xb9\\x03\\x01\\x00\\x00\\x03\\xaf\" + // 0x03B90301: 0x000003AF\n\t\"\\x03\\xcb\\x03\\x01\\x00\\x00\\x03\\xb0\" + // 0x03CB0301: 0x000003B0\n\t\"\\x03\\xb9\\x03\\b\\x00\\x00\\x03\\xca\" + // 0x03B90308: 0x000003CA\n\t\"\\x03\\xc5\\x03\\b\\x00\\x00\\x03\\xcb\" + // 0x03C50308: 0x000003CB\n\t\"\\x03\\xbf\\x03\\x01\\x00\\x00\\x03\\xcc\" + // 0x03BF0301: 0x000003CC\n\t\"\\x03\\xc5\\x03\\x01\\x00\\x00\\x03\\xcd\" + // 0x03C50301: 0x000003CD\n\t\"\\x03\\xc9\\x03\\x01\\x00\\x00\\x03\\xce\" + // 0x03C90301: 0x000003CE\n\t\"\\x03\\xd2\\x03\\x01\\x00\\x00\\x03\\xd3\" + // 0x03D20301: 0x000003D3\n\t\"\\x03\\xd2\\x03\\b\\x00\\x00\\x03\\xd4\" + // 0x03D20308: 0x000003D4\n\t\"\\x04\\x15\\x03\\x00\\x00\\x00\\x04\\x00\" + // 0x04150300: 0x00000400\n\t\"\\x04\\x15\\x03\\b\\x00\\x00\\x04\\x01\" + // 0x04150308: 0x00000401\n\t\"\\x04\\x13\\x03\\x01\\x00\\x00\\x04\\x03\" + // 0x04130301: 0x00000403\n\t\"\\x04\\x06\\x03\\b\\x00\\x00\\x04\\a\" + // 0x04060308: 0x00000407\n\t\"\\x04\\x1a\\x03\\x01\\x00\\x00\\x04\\f\" + // 0x041A0301: 0x0000040C\n\t\"\\x04\\x18\\x03\\x00\\x00\\x00\\x04\\r\" + // 0x04180300: 0x0000040D\n\t\"\\x04#\\x03\\x06\\x00\\x00\\x04\\x0e\" + // 0x04230306: 0x0000040E\n\t\"\\x04\\x18\\x03\\x06\\x00\\x00\\x04\\x19\" + // 0x04180306: 0x00000419\n\t\"\\x048\\x03\\x06\\x00\\x00\\x049\" + // 0x04380306: 0x00000439\n\t\"\\x045\\x03\\x00\\x00\\x00\\x04P\" + // 0x04350300: 0x00000450\n\t\"\\x045\\x03\\b\\x00\\x00\\x04Q\" + // 0x04350308: 0x00000451\n\t\"\\x043\\x03\\x01\\x00\\x00\\x04S\" + // 0x04330301: 0x00000453\n\t\"\\x04V\\x03\\b\\x00\\x00\\x04W\" + // 0x04560308: 0x00000457\n\t\"\\x04:\\x03\\x01\\x00\\x00\\x04\\\\\" + // 0x043A0301: 0x0000045C\n\t\"\\x048\\x03\\x00\\x00\\x00\\x04]\" + // 0x04380300: 0x0000045D\n\t\"\\x04C\\x03\\x06\\x00\\x00\\x04^\" + // 0x04430306: 0x0000045E\n\t\"\\x04t\\x03\\x0f\\x00\\x00\\x04v\" + // 0x0474030F: 0x00000476\n\t\"\\x04u\\x03\\x0f\\x00\\x00\\x04w\" + // 0x0475030F: 0x00000477\n\t\"\\x04\\x16\\x03\\x06\\x00\\x00\\x04\\xc1\" + // 0x04160306: 0x000004C1\n\t\"\\x046\\x03\\x06\\x00\\x00\\x04\\xc2\" + // 0x04360306: 0x000004C2\n\t\"\\x04\\x10\\x03\\x06\\x00\\x00\\x04\\xd0\" + // 0x04100306: 0x000004D0\n\t\"\\x040\\x03\\x06\\x00\\x00\\x04\\xd1\" + // 0x04300306: 0x000004D1\n\t\"\\x04\\x10\\x03\\b\\x00\\x00\\x04\\xd2\" + // 0x04100308: 0x000004D2\n\t\"\\x040\\x03\\b\\x00\\x00\\x04\\xd3\" + // 0x04300308: 0x000004D3\n\t\"\\x04\\x15\\x03\\x06\\x00\\x00\\x04\\xd6\" + // 0x04150306: 0x000004D6\n\t\"\\x045\\x03\\x06\\x00\\x00\\x04\\xd7\" + // 0x04350306: 0x000004D7\n\t\"\\x04\\xd8\\x03\\b\\x00\\x00\\x04\\xda\" + // 0x04D80308: 0x000004DA\n\t\"\\x04\\xd9\\x03\\b\\x00\\x00\\x04\\xdb\" + // 0x04D90308: 0x000004DB\n\t\"\\x04\\x16\\x03\\b\\x00\\x00\\x04\\xdc\" + // 0x04160308: 0x000004DC\n\t\"\\x046\\x03\\b\\x00\\x00\\x04\\xdd\" + // 0x04360308: 0x000004DD\n\t\"\\x04\\x17\\x03\\b\\x00\\x00\\x04\\xde\" + // 0x04170308: 0x000004DE\n\t\"\\x047\\x03\\b\\x00\\x00\\x04\\xdf\" + // 0x04370308: 0x000004DF\n\t\"\\x04\\x18\\x03\\x04\\x00\\x00\\x04\\xe2\" + // 0x04180304: 0x000004E2\n\t\"\\x048\\x03\\x04\\x00\\x00\\x04\\xe3\" + // 0x04380304: 0x000004E3\n\t\"\\x04\\x18\\x03\\b\\x00\\x00\\x04\\xe4\" + // 0x04180308: 0x000004E4\n\t\"\\x048\\x03\\b\\x00\\x00\\x04\\xe5\" + // 0x04380308: 0x000004E5\n\t\"\\x04\\x1e\\x03\\b\\x00\\x00\\x04\\xe6\" + // 0x041E0308: 0x000004E6\n\t\"\\x04>\\x03\\b\\x00\\x00\\x04\\xe7\" + // 0x043E0308: 0x000004E7\n\t\"\\x04\\xe8\\x03\\b\\x00\\x00\\x04\\xea\" + // 0x04E80308: 0x000004EA\n\t\"\\x04\\xe9\\x03\\b\\x00\\x00\\x04\\xeb\" + // 0x04E90308: 0x000004EB\n\t\"\\x04-\\x03\\b\\x00\\x00\\x04\\xec\" + // 0x042D0308: 0x000004EC\n\t\"\\x04M\\x03\\b\\x00\\x00\\x04\\xed\" + // 0x044D0308: 0x000004ED\n\t\"\\x04#\\x03\\x04\\x00\\x00\\x04\\xee\" + // 0x04230304: 0x000004EE\n\t\"\\x04C\\x03\\x04\\x00\\x00\\x04\\xef\" + // 0x04430304: 0x000004EF\n\t\"\\x04#\\x03\\b\\x00\\x00\\x04\\xf0\" + // 0x04230308: 0x000004F0\n\t\"\\x04C\\x03\\b\\x00\\x00\\x04\\xf1\" + // 0x04430308: 0x000004F1\n\t\"\\x04#\\x03\\v\\x00\\x00\\x04\\xf2\" + // 0x0423030B: 0x000004F2\n\t\"\\x04C\\x03\\v\\x00\\x00\\x04\\xf3\" + // 0x0443030B: 0x000004F3\n\t\"\\x04'\\x03\\b\\x00\\x00\\x04\\xf4\" + // 0x04270308: 0x000004F4\n\t\"\\x04G\\x03\\b\\x00\\x00\\x04\\xf5\" + // 0x04470308: 0x000004F5\n\t\"\\x04+\\x03\\b\\x00\\x00\\x04\\xf8\" + // 0x042B0308: 0x000004F8\n\t\"\\x04K\\x03\\b\\x00\\x00\\x04\\xf9\" + // 0x044B0308: 0x000004F9\n\t\"\\x06'\\x06S\\x00\\x00\\x06\\\"\" + // 0x06270653: 0x00000622\n\t\"\\x06'\\x06T\\x00\\x00\\x06#\" + // 0x06270654: 0x00000623\n\t\"\\x06H\\x06T\\x00\\x00\\x06$\" + // 0x06480654: 0x00000624\n\t\"\\x06'\\x06U\\x00\\x00\\x06%\" + // 0x06270655: 0x00000625\n\t\"\\x06J\\x06T\\x00\\x00\\x06&\" + // 0x064A0654: 0x00000626\n\t\"\\x06\\xd5\\x06T\\x00\\x00\\x06\\xc0\" + // 0x06D50654: 0x000006C0\n\t\"\\x06\\xc1\\x06T\\x00\\x00\\x06\\xc2\" + // 0x06C10654: 0x000006C2\n\t\"\\x06\\xd2\\x06T\\x00\\x00\\x06\\xd3\" + // 0x06D20654: 0x000006D3\n\t\"\\t(\\t<\\x00\\x00\\t)\" + // 0x0928093C: 0x00000929\n\t\"\\t0\\t<\\x00\\x00\\t1\" + // 0x0930093C: 0x00000931\n\t\"\\t3\\t<\\x00\\x00\\t4\" + // 0x0933093C: 0x00000934\n\t\"\\t\\xc7\\t\\xbe\\x00\\x00\\t\\xcb\" + // 0x09C709BE: 0x000009CB\n\t\"\\t\\xc7\\t\\xd7\\x00\\x00\\t\\xcc\" + // 0x09C709D7: 0x000009CC\n\t\"\\vG\\vV\\x00\\x00\\vH\" + // 0x0B470B56: 0x00000B48\n\t\"\\vG\\v>\\x00\\x00\\vK\" + // 0x0B470B3E: 0x00000B4B\n\t\"\\vG\\vW\\x00\\x00\\vL\" + // 0x0B470B57: 0x00000B4C\n\t\"\\v\\x92\\v\\xd7\\x00\\x00\\v\\x94\" + // 0x0B920BD7: 0x00000B94\n\t\"\\v\\xc6\\v\\xbe\\x00\\x00\\v\\xca\" + // 0x0BC60BBE: 0x00000BCA\n\t\"\\v\\xc7\\v\\xbe\\x00\\x00\\v\\xcb\" + // 0x0BC70BBE: 0x00000BCB\n\t\"\\v\\xc6\\v\\xd7\\x00\\x00\\v\\xcc\" + // 0x0BC60BD7: 0x00000BCC\n\t\"\\fF\\fV\\x00\\x00\\fH\" + // 0x0C460C56: 0x00000C48\n\t\"\\f\\xbf\\f\\xd5\\x00\\x00\\f\\xc0\" + // 0x0CBF0CD5: 0x00000CC0\n\t\"\\f\\xc6\\f\\xd5\\x00\\x00\\f\\xc7\" + // 0x0CC60CD5: 0x00000CC7\n\t\"\\f\\xc6\\f\\xd6\\x00\\x00\\f\\xc8\" + // 0x0CC60CD6: 0x00000CC8\n\t\"\\f\\xc6\\f\\xc2\\x00\\x00\\f\\xca\" + // 0x0CC60CC2: 0x00000CCA\n\t\"\\f\\xca\\f\\xd5\\x00\\x00\\f\\xcb\" + // 0x0CCA0CD5: 0x00000CCB\n\t\"\\rF\\r>\\x00\\x00\\rJ\" + // 0x0D460D3E: 0x00000D4A\n\t\"\\rG\\r>\\x00\\x00\\rK\" + // 0x0D470D3E: 0x00000D4B\n\t\"\\rF\\rW\\x00\\x00\\rL\" + // 0x0D460D57: 0x00000D4C\n\t\"\\r\\xd9\\r\\xca\\x00\\x00\\r\\xda\" + // 0x0DD90DCA: 0x00000DDA\n\t\"\\r\\xd9\\r\\xcf\\x00\\x00\\r\\xdc\" + // 0x0DD90DCF: 0x00000DDC\n\t\"\\r\\xdc\\r\\xca\\x00\\x00\\r\\xdd\" + // 0x0DDC0DCA: 0x00000DDD\n\t\"\\r\\xd9\\r\\xdf\\x00\\x00\\r\\xde\" + // 0x0DD90DDF: 0x00000DDE\n\t\"\\x10%\\x10.\\x00\\x00\\x10&\" + // 0x1025102E: 0x00001026\n\t\"\\x1b\\x05\\x1b5\\x00\\x00\\x1b\\x06\" + // 0x1B051B35: 0x00001B06\n\t\"\\x1b\\a\\x1b5\\x00\\x00\\x1b\\b\" + // 0x1B071B35: 0x00001B08\n\t\"\\x1b\\t\\x1b5\\x00\\x00\\x1b\\n\" + // 0x1B091B35: 0x00001B0A\n\t\"\\x1b\\v\\x1b5\\x00\\x00\\x1b\\f\" + // 0x1B0B1B35: 0x00001B0C\n\t\"\\x1b\\r\\x1b5\\x00\\x00\\x1b\\x0e\" + // 0x1B0D1B35: 0x00001B0E\n\t\"\\x1b\\x11\\x1b5\\x00\\x00\\x1b\\x12\" + // 0x1B111B35: 0x00001B12\n\t\"\\x1b:\\x1b5\\x00\\x00\\x1b;\" + // 0x1B3A1B35: 0x00001B3B\n\t\"\\x1b<\\x1b5\\x00\\x00\\x1b=\" + // 0x1B3C1B35: 0x00001B3D\n\t\"\\x1b>\\x1b5\\x00\\x00\\x1b@\" + // 0x1B3E1B35: 0x00001B40\n\t\"\\x1b?\\x1b5\\x00\\x00\\x1bA\" + // 0x1B3F1B35: 0x00001B41\n\t\"\\x1bB\\x1b5\\x00\\x00\\x1bC\" + // 0x1B421B35: 0x00001B43\n\t\"\\x00A\\x03%\\x00\\x00\\x1e\\x00\" + // 0x00410325: 0x00001E00\n\t\"\\x00a\\x03%\\x00\\x00\\x1e\\x01\" + // 0x00610325: 0x00001E01\n\t\"\\x00B\\x03\\a\\x00\\x00\\x1e\\x02\" + // 0x00420307: 0x00001E02\n\t\"\\x00b\\x03\\a\\x00\\x00\\x1e\\x03\" + // 0x00620307: 0x00001E03\n\t\"\\x00B\\x03#\\x00\\x00\\x1e\\x04\" + // 0x00420323: 0x00001E04\n\t\"\\x00b\\x03#\\x00\\x00\\x1e\\x05\" + // 0x00620323: 0x00001E05\n\t\"\\x00B\\x031\\x00\\x00\\x1e\\x06\" + // 0x00420331: 0x00001E06\n\t\"\\x00b\\x031\\x00\\x00\\x1e\\a\" + // 0x00620331: 0x00001E07\n\t\"\\x00\\xc7\\x03\\x01\\x00\\x00\\x1e\\b\" + // 0x00C70301: 0x00001E08\n\t\"\\x00\\xe7\\x03\\x01\\x00\\x00\\x1e\\t\" + // 0x00E70301: 0x00001E09\n\t\"\\x00D\\x03\\a\\x00\\x00\\x1e\\n\" + // 0x00440307: 0x00001E0A\n\t\"\\x00d\\x03\\a\\x00\\x00\\x1e\\v\" + // 0x00640307: 0x00001E0B\n\t\"\\x00D\\x03#\\x00\\x00\\x1e\\f\" + // 0x00440323: 0x00001E0C\n\t\"\\x00d\\x03#\\x00\\x00\\x1e\\r\" + // 0x00640323: 0x00001E0D\n\t\"\\x00D\\x031\\x00\\x00\\x1e\\x0e\" + // 0x00440331: 0x00001E0E\n\t\"\\x00d\\x031\\x00\\x00\\x1e\\x0f\" + // 0x00640331: 0x00001E0F\n\t\"\\x00D\\x03'\\x00\\x00\\x1e\\x10\" + // 0x00440327: 0x00001E10\n\t\"\\x00d\\x03'\\x00\\x00\\x1e\\x11\" + // 0x00640327: 0x00001E11\n\t\"\\x00D\\x03-\\x00\\x00\\x1e\\x12\" + // 0x0044032D: 0x00001E12\n\t\"\\x00d\\x03-\\x00\\x00\\x1e\\x13\" + // 0x0064032D: 0x00001E13\n\t\"\\x01\\x12\\x03\\x00\\x00\\x00\\x1e\\x14\" + // 0x01120300: 0x00001E14\n\t\"\\x01\\x13\\x03\\x00\\x00\\x00\\x1e\\x15\" + // 0x01130300: 0x00001E15\n\t\"\\x01\\x12\\x03\\x01\\x00\\x00\\x1e\\x16\" + // 0x01120301: 0x00001E16\n\t\"\\x01\\x13\\x03\\x01\\x00\\x00\\x1e\\x17\" + // 0x01130301: 0x00001E17\n\t\"\\x00E\\x03-\\x00\\x00\\x1e\\x18\" + // 0x0045032D: 0x00001E18\n\t\"\\x00e\\x03-\\x00\\x00\\x1e\\x19\" + // 0x0065032D: 0x00001E19\n\t\"\\x00E\\x030\\x00\\x00\\x1e\\x1a\" + // 0x00450330: 0x00001E1A\n\t\"\\x00e\\x030\\x00\\x00\\x1e\\x1b\" + // 0x00650330: 0x00001E1B\n\t\"\\x02(\\x03\\x06\\x00\\x00\\x1e\\x1c\" + // 0x02280306: 0x00001E1C\n\t\"\\x02)\\x03\\x06\\x00\\x00\\x1e\\x1d\" + // 0x02290306: 0x00001E1D\n\t\"\\x00F\\x03\\a\\x00\\x00\\x1e\\x1e\" + // 0x00460307: 0x00001E1E\n\t\"\\x00f\\x03\\a\\x00\\x00\\x1e\\x1f\" + // 0x00660307: 0x00001E1F\n\t\"\\x00G\\x03\\x04\\x00\\x00\\x1e \" + // 0x00470304: 0x00001E20\n\t\"\\x00g\\x03\\x04\\x00\\x00\\x1e!\" + // 0x00670304: 0x00001E21\n\t\"\\x00H\\x03\\a\\x00\\x00\\x1e\\\"\" + // 0x00480307: 0x00001E22\n\t\"\\x00h\\x03\\a\\x00\\x00\\x1e#\" + // 0x00680307: 0x00001E23\n\t\"\\x00H\\x03#\\x00\\x00\\x1e$\" + // 0x00480323: 0x00001E24\n\t\"\\x00h\\x03#\\x00\\x00\\x1e%\" + // 0x00680323: 0x00001E25\n\t\"\\x00H\\x03\\b\\x00\\x00\\x1e&\" + // 0x00480308: 0x00001E26\n\t\"\\x00h\\x03\\b\\x00\\x00\\x1e'\" + // 0x00680308: 0x00001E27\n\t\"\\x00H\\x03'\\x00\\x00\\x1e(\" + // 0x00480327: 0x00001E28\n\t\"\\x00h\\x03'\\x00\\x00\\x1e)\" + // 0x00680327: 0x00001E29\n\t\"\\x00H\\x03.\\x00\\x00\\x1e*\" + // 0x0048032E: 0x00001E2A\n\t\"\\x00h\\x03.\\x00\\x00\\x1e+\" + // 0x0068032E: 0x00001E2B\n\t\"\\x00I\\x030\\x00\\x00\\x1e,\" + // 0x00490330: 0x00001E2C\n\t\"\\x00i\\x030\\x00\\x00\\x1e-\" + // 0x00690330: 0x00001E2D\n\t\"\\x00\\xcf\\x03\\x01\\x00\\x00\\x1e.\" + // 0x00CF0301: 0x00001E2E\n\t\"\\x00\\xef\\x03\\x01\\x00\\x00\\x1e/\" + // 0x00EF0301: 0x00001E2F\n\t\"\\x00K\\x03\\x01\\x00\\x00\\x1e0\" + // 0x004B0301: 0x00001E30\n\t\"\\x00k\\x03\\x01\\x00\\x00\\x1e1\" + // 0x006B0301: 0x00001E31\n\t\"\\x00K\\x03#\\x00\\x00\\x1e2\" + // 0x004B0323: 0x00001E32\n\t\"\\x00k\\x03#\\x00\\x00\\x1e3\" + // 0x006B0323: 0x00001E33\n\t\"\\x00K\\x031\\x00\\x00\\x1e4\" + // 0x004B0331: 0x00001E34\n\t\"\\x00k\\x031\\x00\\x00\\x1e5\" + // 0x006B0331: 0x00001E35\n\t\"\\x00L\\x03#\\x00\\x00\\x1e6\" + // 0x004C0323: 0x00001E36\n\t\"\\x00l\\x03#\\x00\\x00\\x1e7\" + // 0x006C0323: 0x00001E37\n\t\"\\x1e6\\x03\\x04\\x00\\x00\\x1e8\" + // 0x1E360304: 0x00001E38\n\t\"\\x1e7\\x03\\x04\\x00\\x00\\x1e9\" + // 0x1E370304: 0x00001E39\n\t\"\\x00L\\x031\\x00\\x00\\x1e:\" + // 0x004C0331: 0x00001E3A\n\t\"\\x00l\\x031\\x00\\x00\\x1e;\" + // 0x006C0331: 0x00001E3B\n\t\"\\x00L\\x03-\\x00\\x00\\x1e<\" + // 0x004C032D: 0x00001E3C\n\t\"\\x00l\\x03-\\x00\\x00\\x1e=\" + // 0x006C032D: 0x00001E3D\n\t\"\\x00M\\x03\\x01\\x00\\x00\\x1e>\" + // 0x004D0301: 0x00001E3E\n\t\"\\x00m\\x03\\x01\\x00\\x00\\x1e?\" + // 0x006D0301: 0x00001E3F\n\t\"\\x00M\\x03\\a\\x00\\x00\\x1e@\" + // 0x004D0307: 0x00001E40\n\t\"\\x00m\\x03\\a\\x00\\x00\\x1eA\" + // 0x006D0307: 0x00001E41\n\t\"\\x00M\\x03#\\x00\\x00\\x1eB\" + // 0x004D0323: 0x00001E42\n\t\"\\x00m\\x03#\\x00\\x00\\x1eC\" + // 0x006D0323: 0x00001E43\n\t\"\\x00N\\x03\\a\\x00\\x00\\x1eD\" + // 0x004E0307: 0x00001E44\n\t\"\\x00n\\x03\\a\\x00\\x00\\x1eE\" + // 0x006E0307: 0x00001E45\n\t\"\\x00N\\x03#\\x00\\x00\\x1eF\" + // 0x004E0323: 0x00001E46\n\t\"\\x00n\\x03#\\x00\\x00\\x1eG\" + // 0x006E0323: 0x00001E47\n\t\"\\x00N\\x031\\x00\\x00\\x1eH\" + // 0x004E0331: 0x00001E48\n\t\"\\x00n\\x031\\x00\\x00\\x1eI\" + // 0x006E0331: 0x00001E49\n\t\"\\x00N\\x03-\\x00\\x00\\x1eJ\" + // 0x004E032D: 0x00001E4A\n\t\"\\x00n\\x03-\\x00\\x00\\x1eK\" + // 0x006E032D: 0x00001E4B\n\t\"\\x00\\xd5\\x03\\x01\\x00\\x00\\x1eL\" + // 0x00D50301: 0x00001E4C\n\t\"\\x00\\xf5\\x03\\x01\\x00\\x00\\x1eM\" + // 0x00F50301: 0x00001E4D\n\t\"\\x00\\xd5\\x03\\b\\x00\\x00\\x1eN\" + // 0x00D50308: 0x00001E4E\n\t\"\\x00\\xf5\\x03\\b\\x00\\x00\\x1eO\" + // 0x00F50308: 0x00001E4F\n\t\"\\x01L\\x03\\x00\\x00\\x00\\x1eP\" + // 0x014C0300: 0x00001E50\n\t\"\\x01M\\x03\\x00\\x00\\x00\\x1eQ\" + // 0x014D0300: 0x00001E51\n\t\"\\x01L\\x03\\x01\\x00\\x00\\x1eR\" + // 0x014C0301: 0x00001E52\n\t\"\\x01M\\x03\\x01\\x00\\x00\\x1eS\" + // 0x014D0301: 0x00001E53\n\t\"\\x00P\\x03\\x01\\x00\\x00\\x1eT\" + // 0x00500301: 0x00001E54\n\t\"\\x00p\\x03\\x01\\x00\\x00\\x1eU\" + // 0x00700301: 0x00001E55\n\t\"\\x00P\\x03\\a\\x00\\x00\\x1eV\" + // 0x00500307: 0x00001E56\n\t\"\\x00p\\x03\\a\\x00\\x00\\x1eW\" + // 0x00700307: 0x00001E57\n\t\"\\x00R\\x03\\a\\x00\\x00\\x1eX\" + // 0x00520307: 0x00001E58\n\t\"\\x00r\\x03\\a\\x00\\x00\\x1eY\" + // 0x00720307: 0x00001E59\n\t\"\\x00R\\x03#\\x00\\x00\\x1eZ\" + // 0x00520323: 0x00001E5A\n\t\"\\x00r\\x03#\\x00\\x00\\x1e[\" + // 0x00720323: 0x00001E5B\n\t\"\\x1eZ\\x03\\x04\\x00\\x00\\x1e\\\\\" + // 0x1E5A0304: 0x00001E5C\n\t\"\\x1e[\\x03\\x04\\x00\\x00\\x1e]\" + // 0x1E5B0304: 0x00001E5D\n\t\"\\x00R\\x031\\x00\\x00\\x1e^\" + // 0x00520331: 0x00001E5E\n\t\"\\x00r\\x031\\x00\\x00\\x1e_\" + // 0x00720331: 0x00001E5F\n\t\"\\x00S\\x03\\a\\x00\\x00\\x1e`\" + // 0x00530307: 0x00001E60\n\t\"\\x00s\\x03\\a\\x00\\x00\\x1ea\" + // 0x00730307: 0x00001E61\n\t\"\\x00S\\x03#\\x00\\x00\\x1eb\" + // 0x00530323: 0x00001E62\n\t\"\\x00s\\x03#\\x00\\x00\\x1ec\" + // 0x00730323: 0x00001E63\n\t\"\\x01Z\\x03\\a\\x00\\x00\\x1ed\" + // 0x015A0307: 0x00001E64\n\t\"\\x01[\\x03\\a\\x00\\x00\\x1ee\" + // 0x015B0307: 0x00001E65\n\t\"\\x01`\\x03\\a\\x00\\x00\\x1ef\" + // 0x01600307: 0x00001E66\n\t\"\\x01a\\x03\\a\\x00\\x00\\x1eg\" + // 0x01610307: 0x00001E67\n\t\"\\x1eb\\x03\\a\\x00\\x00\\x1eh\" + // 0x1E620307: 0x00001E68\n\t\"\\x1ec\\x03\\a\\x00\\x00\\x1ei\" + // 0x1E630307: 0x00001E69\n\t\"\\x00T\\x03\\a\\x00\\x00\\x1ej\" + // 0x00540307: 0x00001E6A\n\t\"\\x00t\\x03\\a\\x00\\x00\\x1ek\" + // 0x00740307: 0x00001E6B\n\t\"\\x00T\\x03#\\x00\\x00\\x1el\" + // 0x00540323: 0x00001E6C\n\t\"\\x00t\\x03#\\x00\\x00\\x1em\" + // 0x00740323: 0x00001E6D\n\t\"\\x00T\\x031\\x00\\x00\\x1en\" + // 0x00540331: 0x00001E6E\n\t\"\\x00t\\x031\\x00\\x00\\x1eo\" + // 0x00740331: 0x00001E6F\n\t\"\\x00T\\x03-\\x00\\x00\\x1ep\" + // 0x0054032D: 0x00001E70\n\t\"\\x00t\\x03-\\x00\\x00\\x1eq\" + // 0x0074032D: 0x00001E71\n\t\"\\x00U\\x03$\\x00\\x00\\x1er\" + // 0x00550324: 0x00001E72\n\t\"\\x00u\\x03$\\x00\\x00\\x1es\" + // 0x00750324: 0x00001E73\n\t\"\\x00U\\x030\\x00\\x00\\x1et\" + // 0x00550330: 0x00001E74\n\t\"\\x00u\\x030\\x00\\x00\\x1eu\" + // 0x00750330: 0x00001E75\n\t\"\\x00U\\x03-\\x00\\x00\\x1ev\" + // 0x0055032D: 0x00001E76\n\t\"\\x00u\\x03-\\x00\\x00\\x1ew\" + // 0x0075032D: 0x00001E77\n\t\"\\x01h\\x03\\x01\\x00\\x00\\x1ex\" + // 0x01680301: 0x00001E78\n\t\"\\x01i\\x03\\x01\\x00\\x00\\x1ey\" + // 0x01690301: 0x00001E79\n\t\"\\x01j\\x03\\b\\x00\\x00\\x1ez\" + // 0x016A0308: 0x00001E7A\n\t\"\\x01k\\x03\\b\\x00\\x00\\x1e{\" + // 0x016B0308: 0x00001E7B\n\t\"\\x00V\\x03\\x03\\x00\\x00\\x1e|\" + // 0x00560303: 0x00001E7C\n\t\"\\x00v\\x03\\x03\\x00\\x00\\x1e}\" + // 0x00760303: 0x00001E7D\n\t\"\\x00V\\x03#\\x00\\x00\\x1e~\" + // 0x00560323: 0x00001E7E\n\t\"\\x00v\\x03#\\x00\\x00\\x1e\\u007f\" + // 0x00760323: 0x00001E7F\n\t\"\\x00W\\x03\\x00\\x00\\x00\\x1e\\x80\" + // 0x00570300: 0x00001E80\n\t\"\\x00w\\x03\\x00\\x00\\x00\\x1e\\x81\" + // 0x00770300: 0x00001E81\n\t\"\\x00W\\x03\\x01\\x00\\x00\\x1e\\x82\" + // 0x00570301: 0x00001E82\n\t\"\\x00w\\x03\\x01\\x00\\x00\\x1e\\x83\" + // 0x00770301: 0x00001E83\n\t\"\\x00W\\x03\\b\\x00\\x00\\x1e\\x84\" + // 0x00570308: 0x00001E84\n\t\"\\x00w\\x03\\b\\x00\\x00\\x1e\\x85\" + // 0x00770308: 0x00001E85\n\t\"\\x00W\\x03\\a\\x00\\x00\\x1e\\x86\" + // 0x00570307: 0x00001E86\n\t\"\\x00w\\x03\\a\\x00\\x00\\x1e\\x87\" + // 0x00770307: 0x00001E87\n\t\"\\x00W\\x03#\\x00\\x00\\x1e\\x88\" + // 0x00570323: 0x00001E88\n\t\"\\x00w\\x03#\\x00\\x00\\x1e\\x89\" + // 0x00770323: 0x00001E89\n\t\"\\x00X\\x03\\a\\x00\\x00\\x1e\\x8a\" + // 0x00580307: 0x00001E8A\n\t\"\\x00x\\x03\\a\\x00\\x00\\x1e\\x8b\" + // 0x00780307: 0x00001E8B\n\t\"\\x00X\\x03\\b\\x00\\x00\\x1e\\x8c\" + // 0x00580308: 0x00001E8C\n\t\"\\x00x\\x03\\b\\x00\\x00\\x1e\\x8d\" + // 0x00780308: 0x00001E8D\n\t\"\\x00Y\\x03\\a\\x00\\x00\\x1e\\x8e\" + // 0x00590307: 0x00001E8E\n\t\"\\x00y\\x03\\a\\x00\\x00\\x1e\\x8f\" + // 0x00790307: 0x00001E8F\n\t\"\\x00Z\\x03\\x02\\x00\\x00\\x1e\\x90\" + // 0x005A0302: 0x00001E90\n\t\"\\x00z\\x03\\x02\\x00\\x00\\x1e\\x91\" + // 0x007A0302: 0x00001E91\n\t\"\\x00Z\\x03#\\x00\\x00\\x1e\\x92\" + // 0x005A0323: 0x00001E92\n\t\"\\x00z\\x03#\\x00\\x00\\x1e\\x93\" + // 0x007A0323: 0x00001E93\n\t\"\\x00Z\\x031\\x00\\x00\\x1e\\x94\" + // 0x005A0331: 0x00001E94\n\t\"\\x00z\\x031\\x00\\x00\\x1e\\x95\" + // 0x007A0331: 0x00001E95\n\t\"\\x00h\\x031\\x00\\x00\\x1e\\x96\" + // 0x00680331: 0x00001E96\n\t\"\\x00t\\x03\\b\\x00\\x00\\x1e\\x97\" + // 0x00740308: 0x00001E97\n\t\"\\x00w\\x03\\n\\x00\\x00\\x1e\\x98\" + // 0x0077030A: 0x00001E98\n\t\"\\x00y\\x03\\n\\x00\\x00\\x1e\\x99\" + // 0x0079030A: 0x00001E99\n\t\"\\x01\\u007f\\x03\\a\\x00\\x00\\x1e\\x9b\" + // 0x017F0307: 0x00001E9B\n\t\"\\x00A\\x03#\\x00\\x00\\x1e\\xa0\" + // 0x00410323: 0x00001EA0\n\t\"\\x00a\\x03#\\x00\\x00\\x1e\\xa1\" + // 0x00610323: 0x00001EA1\n\t\"\\x00A\\x03\\t\\x00\\x00\\x1e\\xa2\" + // 0x00410309: 0x00001EA2\n\t\"\\x00a\\x03\\t\\x00\\x00\\x1e\\xa3\" + // 0x00610309: 0x00001EA3\n\t\"\\x00\\xc2\\x03\\x01\\x00\\x00\\x1e\\xa4\" + // 0x00C20301: 0x00001EA4\n\t\"\\x00\\xe2\\x03\\x01\\x00\\x00\\x1e\\xa5\" + // 0x00E20301: 0x00001EA5\n\t\"\\x00\\xc2\\x03\\x00\\x00\\x00\\x1e\\xa6\" + // 0x00C20300: 0x00001EA6\n\t\"\\x00\\xe2\\x03\\x00\\x00\\x00\\x1e\\xa7\" + // 0x00E20300: 0x00001EA7\n\t\"\\x00\\xc2\\x03\\t\\x00\\x00\\x1e\\xa8\" + // 0x00C20309: 0x00001EA8\n\t\"\\x00\\xe2\\x03\\t\\x00\\x00\\x1e\\xa9\" + // 0x00E20309: 0x00001EA9\n\t\"\\x00\\xc2\\x03\\x03\\x00\\x00\\x1e\\xaa\" + // 0x00C20303: 0x00001EAA\n\t\"\\x00\\xe2\\x03\\x03\\x00\\x00\\x1e\\xab\" + // 0x00E20303: 0x00001EAB\n\t\"\\x1e\\xa0\\x03\\x02\\x00\\x00\\x1e\\xac\" + // 0x1EA00302: 0x00001EAC\n\t\"\\x1e\\xa1\\x03\\x02\\x00\\x00\\x1e\\xad\" + // 0x1EA10302: 0x00001EAD\n\t\"\\x01\\x02\\x03\\x01\\x00\\x00\\x1e\\xae\" + // 0x01020301: 0x00001EAE\n\t\"\\x01\\x03\\x03\\x01\\x00\\x00\\x1e\\xaf\" + // 0x01030301: 0x00001EAF\n\t\"\\x01\\x02\\x03\\x00\\x00\\x00\\x1e\\xb0\" + // 0x01020300: 0x00001EB0\n\t\"\\x01\\x03\\x03\\x00\\x00\\x00\\x1e\\xb1\" + // 0x01030300: 0x00001EB1\n\t\"\\x01\\x02\\x03\\t\\x00\\x00\\x1e\\xb2\" + // 0x01020309: 0x00001EB2\n\t\"\\x01\\x03\\x03\\t\\x00\\x00\\x1e\\xb3\" + // 0x01030309: 0x00001EB3\n\t\"\\x01\\x02\\x03\\x03\\x00\\x00\\x1e\\xb4\" + // 0x01020303: 0x00001EB4\n\t\"\\x01\\x03\\x03\\x03\\x00\\x00\\x1e\\xb5\" + // 0x01030303: 0x00001EB5\n\t\"\\x1e\\xa0\\x03\\x06\\x00\\x00\\x1e\\xb6\" + // 0x1EA00306: 0x00001EB6\n\t\"\\x1e\\xa1\\x03\\x06\\x00\\x00\\x1e\\xb7\" + // 0x1EA10306: 0x00001EB7\n\t\"\\x00E\\x03#\\x00\\x00\\x1e\\xb8\" + // 0x00450323: 0x00001EB8\n\t\"\\x00e\\x03#\\x00\\x00\\x1e\\xb9\" + // 0x00650323: 0x00001EB9\n\t\"\\x00E\\x03\\t\\x00\\x00\\x1e\\xba\" + // 0x00450309: 0x00001EBA\n\t\"\\x00e\\x03\\t\\x00\\x00\\x1e\\xbb\" + // 0x00650309: 0x00001EBB\n\t\"\\x00E\\x03\\x03\\x00\\x00\\x1e\\xbc\" + // 0x00450303: 0x00001EBC\n\t\"\\x00e\\x03\\x03\\x00\\x00\\x1e\\xbd\" + // 0x00650303: 0x00001EBD\n\t\"\\x00\\xca\\x03\\x01\\x00\\x00\\x1e\\xbe\" + // 0x00CA0301: 0x00001EBE\n\t\"\\x00\\xea\\x03\\x01\\x00\\x00\\x1e\\xbf\" + // 0x00EA0301: 0x00001EBF\n\t\"\\x00\\xca\\x03\\x00\\x00\\x00\\x1e\\xc0\" + // 0x00CA0300: 0x00001EC0\n\t\"\\x00\\xea\\x03\\x00\\x00\\x00\\x1e\\xc1\" + // 0x00EA0300: 0x00001EC1\n\t\"\\x00\\xca\\x03\\t\\x00\\x00\\x1e\\xc2\" + // 0x00CA0309: 0x00001EC2\n\t\"\\x00\\xea\\x03\\t\\x00\\x00\\x1e\\xc3\" + // 0x00EA0309: 0x00001EC3\n\t\"\\x00\\xca\\x03\\x03\\x00\\x00\\x1e\\xc4\" + // 0x00CA0303: 0x00001EC4\n\t\"\\x00\\xea\\x03\\x03\\x00\\x00\\x1e\\xc5\" + // 0x00EA0303: 0x00001EC5\n\t\"\\x1e\\xb8\\x03\\x02\\x00\\x00\\x1e\\xc6\" + // 0x1EB80302: 0x00001EC6\n\t\"\\x1e\\xb9\\x03\\x02\\x00\\x00\\x1e\\xc7\" + // 0x1EB90302: 0x00001EC7\n\t\"\\x00I\\x03\\t\\x00\\x00\\x1e\\xc8\" + // 0x00490309: 0x00001EC8\n\t\"\\x00i\\x03\\t\\x00\\x00\\x1e\\xc9\" + // 0x00690309: 0x00001EC9\n\t\"\\x00I\\x03#\\x00\\x00\\x1e\\xca\" + // 0x00490323: 0x00001ECA\n\t\"\\x00i\\x03#\\x00\\x00\\x1e\\xcb\" + // 0x00690323: 0x00001ECB\n\t\"\\x00O\\x03#\\x00\\x00\\x1e\\xcc\" + // 0x004F0323: 0x00001ECC\n\t\"\\x00o\\x03#\\x00\\x00\\x1e\\xcd\" + // 0x006F0323: 0x00001ECD\n\t\"\\x00O\\x03\\t\\x00\\x00\\x1e\\xce\" + // 0x004F0309: 0x00001ECE\n\t\"\\x00o\\x03\\t\\x00\\x00\\x1e\\xcf\" + // 0x006F0309: 0x00001ECF\n\t\"\\x00\\xd4\\x03\\x01\\x00\\x00\\x1e\\xd0\" + // 0x00D40301: 0x00001ED0\n\t\"\\x00\\xf4\\x03\\x01\\x00\\x00\\x1e\\xd1\" + // 0x00F40301: 0x00001ED1\n\t\"\\x00\\xd4\\x03\\x00\\x00\\x00\\x1e\\xd2\" + // 0x00D40300: 0x00001ED2\n\t\"\\x00\\xf4\\x03\\x00\\x00\\x00\\x1e\\xd3\" + // 0x00F40300: 0x00001ED3\n\t\"\\x00\\xd4\\x03\\t\\x00\\x00\\x1e\\xd4\" + // 0x00D40309: 0x00001ED4\n\t\"\\x00\\xf4\\x03\\t\\x00\\x00\\x1e\\xd5\" + // 0x00F40309: 0x00001ED5\n\t\"\\x00\\xd4\\x03\\x03\\x00\\x00\\x1e\\xd6\" + // 0x00D40303: 0x00001ED6\n\t\"\\x00\\xf4\\x03\\x03\\x00\\x00\\x1e\\xd7\" + // 0x00F40303: 0x00001ED7\n\t\"\\x1e\\xcc\\x03\\x02\\x00\\x00\\x1e\\xd8\" + // 0x1ECC0302: 0x00001ED8\n\t\"\\x1e\\xcd\\x03\\x02\\x00\\x00\\x1e\\xd9\" + // 0x1ECD0302: 0x00001ED9\n\t\"\\x01\\xa0\\x03\\x01\\x00\\x00\\x1e\\xda\" + // 0x01A00301: 0x00001EDA\n\t\"\\x01\\xa1\\x03\\x01\\x00\\x00\\x1e\\xdb\" + // 0x01A10301: 0x00001EDB\n\t\"\\x01\\xa0\\x03\\x00\\x00\\x00\\x1e\\xdc\" + // 0x01A00300: 0x00001EDC\n\t\"\\x01\\xa1\\x03\\x00\\x00\\x00\\x1e\\xdd\" + // 0x01A10300: 0x00001EDD\n\t\"\\x01\\xa0\\x03\\t\\x00\\x00\\x1e\\xde\" + // 0x01A00309: 0x00001EDE\n\t\"\\x01\\xa1\\x03\\t\\x00\\x00\\x1e\\xdf\" + // 0x01A10309: 0x00001EDF\n\t\"\\x01\\xa0\\x03\\x03\\x00\\x00\\x1e\\xe0\" + // 0x01A00303: 0x00001EE0\n\t\"\\x01\\xa1\\x03\\x03\\x00\\x00\\x1e\\xe1\" + // 0x01A10303: 0x00001EE1\n\t\"\\x01\\xa0\\x03#\\x00\\x00\\x1e\\xe2\" + // 0x01A00323: 0x00001EE2\n\t\"\\x01\\xa1\\x03#\\x00\\x00\\x1e\\xe3\" + // 0x01A10323: 0x00001EE3\n\t\"\\x00U\\x03#\\x00\\x00\\x1e\\xe4\" + // 0x00550323: 0x00001EE4\n\t\"\\x00u\\x03#\\x00\\x00\\x1e\\xe5\" + // 0x00750323: 0x00001EE5\n\t\"\\x00U\\x03\\t\\x00\\x00\\x1e\\xe6\" + // 0x00550309: 0x00001EE6\n\t\"\\x00u\\x03\\t\\x00\\x00\\x1e\\xe7\" + // 0x00750309: 0x00001EE7\n\t\"\\x01\\xaf\\x03\\x01\\x00\\x00\\x1e\\xe8\" + // 0x01AF0301: 0x00001EE8\n\t\"\\x01\\xb0\\x03\\x01\\x00\\x00\\x1e\\xe9\" + // 0x01B00301: 0x00001EE9\n\t\"\\x01\\xaf\\x03\\x00\\x00\\x00\\x1e\\xea\" + // 0x01AF0300: 0x00001EEA\n\t\"\\x01\\xb0\\x03\\x00\\x00\\x00\\x1e\\xeb\" + // 0x01B00300: 0x00001EEB\n\t\"\\x01\\xaf\\x03\\t\\x00\\x00\\x1e\\xec\" + // 0x01AF0309: 0x00001EEC\n\t\"\\x01\\xb0\\x03\\t\\x00\\x00\\x1e\\xed\" + // 0x01B00309: 0x00001EED\n\t\"\\x01\\xaf\\x03\\x03\\x00\\x00\\x1e\\xee\" + // 0x01AF0303: 0x00001EEE\n\t\"\\x01\\xb0\\x03\\x03\\x00\\x00\\x1e\\xef\" + // 0x01B00303: 0x00001EEF\n\t\"\\x01\\xaf\\x03#\\x00\\x00\\x1e\\xf0\" + // 0x01AF0323: 0x00001EF0\n\t\"\\x01\\xb0\\x03#\\x00\\x00\\x1e\\xf1\" + // 0x01B00323: 0x00001EF1\n\t\"\\x00Y\\x03\\x00\\x00\\x00\\x1e\\xf2\" + // 0x00590300: 0x00001EF2\n\t\"\\x00y\\x03\\x00\\x00\\x00\\x1e\\xf3\" + // 0x00790300: 0x00001EF3\n\t\"\\x00Y\\x03#\\x00\\x00\\x1e\\xf4\" + // 0x00590323: 0x00001EF4\n\t\"\\x00y\\x03#\\x00\\x00\\x1e\\xf5\" + // 0x00790323: 0x00001EF5\n\t\"\\x00Y\\x03\\t\\x00\\x00\\x1e\\xf6\" + // 0x00590309: 0x00001EF6\n\t\"\\x00y\\x03\\t\\x00\\x00\\x1e\\xf7\" + // 0x00790309: 0x00001EF7\n\t\"\\x00Y\\x03\\x03\\x00\\x00\\x1e\\xf8\" + // 0x00590303: 0x00001EF8\n\t\"\\x00y\\x03\\x03\\x00\\x00\\x1e\\xf9\" + // 0x00790303: 0x00001EF9\n\t\"\\x03\\xb1\\x03\\x13\\x00\\x00\\x1f\\x00\" + // 0x03B10313: 0x00001F00\n\t\"\\x03\\xb1\\x03\\x14\\x00\\x00\\x1f\\x01\" + // 0x03B10314: 0x00001F01\n\t\"\\x1f\\x00\\x03\\x00\\x00\\x00\\x1f\\x02\" + // 0x1F000300: 0x00001F02\n\t\"\\x1f\\x01\\x03\\x00\\x00\\x00\\x1f\\x03\" + // 0x1F010300: 0x00001F03\n\t\"\\x1f\\x00\\x03\\x01\\x00\\x00\\x1f\\x04\" + // 0x1F000301: 0x00001F04\n\t\"\\x1f\\x01\\x03\\x01\\x00\\x00\\x1f\\x05\" + // 0x1F010301: 0x00001F05\n\t\"\\x1f\\x00\\x03B\\x00\\x00\\x1f\\x06\" + // 0x1F000342: 0x00001F06\n\t\"\\x1f\\x01\\x03B\\x00\\x00\\x1f\\a\" + // 0x1F010342: 0x00001F07\n\t\"\\x03\\x91\\x03\\x13\\x00\\x00\\x1f\\b\" + // 0x03910313: 0x00001F08\n\t\"\\x03\\x91\\x03\\x14\\x00\\x00\\x1f\\t\" + // 0x03910314: 0x00001F09\n\t\"\\x1f\\b\\x03\\x00\\x00\\x00\\x1f\\n\" + // 0x1F080300: 0x00001F0A\n\t\"\\x1f\\t\\x03\\x00\\x00\\x00\\x1f\\v\" + // 0x1F090300: 0x00001F0B\n\t\"\\x1f\\b\\x03\\x01\\x00\\x00\\x1f\\f\" + // 0x1F080301: 0x00001F0C\n\t\"\\x1f\\t\\x03\\x01\\x00\\x00\\x1f\\r\" + // 0x1F090301: 0x00001F0D\n\t\"\\x1f\\b\\x03B\\x00\\x00\\x1f\\x0e\" + // 0x1F080342: 0x00001F0E\n\t\"\\x1f\\t\\x03B\\x00\\x00\\x1f\\x0f\" + // 0x1F090342: 0x00001F0F\n\t\"\\x03\\xb5\\x03\\x13\\x00\\x00\\x1f\\x10\" + // 0x03B50313: 0x00001F10\n\t\"\\x03\\xb5\\x03\\x14\\x00\\x00\\x1f\\x11\" + // 0x03B50314: 0x00001F11\n\t\"\\x1f\\x10\\x03\\x00\\x00\\x00\\x1f\\x12\" + // 0x1F100300: 0x00001F12\n\t\"\\x1f\\x11\\x03\\x00\\x00\\x00\\x1f\\x13\" + // 0x1F110300: 0x00001F13\n\t\"\\x1f\\x10\\x03\\x01\\x00\\x00\\x1f\\x14\" + // 0x1F100301: 0x00001F14\n\t\"\\x1f\\x11\\x03\\x01\\x00\\x00\\x1f\\x15\" + // 0x1F110301: 0x00001F15\n\t\"\\x03\\x95\\x03\\x13\\x00\\x00\\x1f\\x18\" + // 0x03950313: 0x00001F18\n\t\"\\x03\\x95\\x03\\x14\\x00\\x00\\x1f\\x19\" + // 0x03950314: 0x00001F19\n\t\"\\x1f\\x18\\x03\\x00\\x00\\x00\\x1f\\x1a\" + // 0x1F180300: 0x00001F1A\n\t\"\\x1f\\x19\\x03\\x00\\x00\\x00\\x1f\\x1b\" + // 0x1F190300: 0x00001F1B\n\t\"\\x1f\\x18\\x03\\x01\\x00\\x00\\x1f\\x1c\" + // 0x1F180301: 0x00001F1C\n\t\"\\x1f\\x19\\x03\\x01\\x00\\x00\\x1f\\x1d\" + // 0x1F190301: 0x00001F1D\n\t\"\\x03\\xb7\\x03\\x13\\x00\\x00\\x1f \" + // 0x03B70313: 0x00001F20\n\t\"\\x03\\xb7\\x03\\x14\\x00\\x00\\x1f!\" + // 0x03B70314: 0x00001F21\n\t\"\\x1f \\x03\\x00\\x00\\x00\\x1f\\\"\" + // 0x1F200300: 0x00001F22\n\t\"\\x1f!\\x03\\x00\\x00\\x00\\x1f#\" + // 0x1F210300: 0x00001F23\n\t\"\\x1f \\x03\\x01\\x00\\x00\\x1f$\" + // 0x1F200301: 0x00001F24\n\t\"\\x1f!\\x03\\x01\\x00\\x00\\x1f%\" + // 0x1F210301: 0x00001F25\n\t\"\\x1f \\x03B\\x00\\x00\\x1f&\" + // 0x1F200342: 0x00001F26\n\t\"\\x1f!\\x03B\\x00\\x00\\x1f'\" + // 0x1F210342: 0x00001F27\n\t\"\\x03\\x97\\x03\\x13\\x00\\x00\\x1f(\" + // 0x03970313: 0x00001F28\n\t\"\\x03\\x97\\x03\\x14\\x00\\x00\\x1f)\" + // 0x03970314: 0x00001F29\n\t\"\\x1f(\\x03\\x00\\x00\\x00\\x1f*\" + // 0x1F280300: 0x00001F2A\n\t\"\\x1f)\\x03\\x00\\x00\\x00\\x1f+\" + // 0x1F290300: 0x00001F2B\n\t\"\\x1f(\\x03\\x01\\x00\\x00\\x1f,\" + // 0x1F280301: 0x00001F2C\n\t\"\\x1f)\\x03\\x01\\x00\\x00\\x1f-\" + // 0x1F290301: 0x00001F2D\n\t\"\\x1f(\\x03B\\x00\\x00\\x1f.\" + // 0x1F280342: 0x00001F2E\n\t\"\\x1f)\\x03B\\x00\\x00\\x1f/\" + // 0x1F290342: 0x00001F2F\n\t\"\\x03\\xb9\\x03\\x13\\x00\\x00\\x1f0\" + // 0x03B90313: 0x00001F30\n\t\"\\x03\\xb9\\x03\\x14\\x00\\x00\\x1f1\" + // 0x03B90314: 0x00001F31\n\t\"\\x1f0\\x03\\x00\\x00\\x00\\x1f2\" + // 0x1F300300: 0x00001F32\n\t\"\\x1f1\\x03\\x00\\x00\\x00\\x1f3\" + // 0x1F310300: 0x00001F33\n\t\"\\x1f0\\x03\\x01\\x00\\x00\\x1f4\" + // 0x1F300301: 0x00001F34\n\t\"\\x1f1\\x03\\x01\\x00\\x00\\x1f5\" + // 0x1F310301: 0x00001F35\n\t\"\\x1f0\\x03B\\x00\\x00\\x1f6\" + // 0x1F300342: 0x00001F36\n\t\"\\x1f1\\x03B\\x00\\x00\\x1f7\" + // 0x1F310342: 0x00001F37\n\t\"\\x03\\x99\\x03\\x13\\x00\\x00\\x1f8\" + // 0x03990313: 0x00001F38\n\t\"\\x03\\x99\\x03\\x14\\x00\\x00\\x1f9\" + // 0x03990314: 0x00001F39\n\t\"\\x1f8\\x03\\x00\\x00\\x00\\x1f:\" + // 0x1F380300: 0x00001F3A\n\t\"\\x1f9\\x03\\x00\\x00\\x00\\x1f;\" + // 0x1F390300: 0x00001F3B\n\t\"\\x1f8\\x03\\x01\\x00\\x00\\x1f<\" + // 0x1F380301: 0x00001F3C\n\t\"\\x1f9\\x03\\x01\\x00\\x00\\x1f=\" + // 0x1F390301: 0x00001F3D\n\t\"\\x1f8\\x03B\\x00\\x00\\x1f>\" + // 0x1F380342: 0x00001F3E\n\t\"\\x1f9\\x03B\\x00\\x00\\x1f?\" + // 0x1F390342: 0x00001F3F\n\t\"\\x03\\xbf\\x03\\x13\\x00\\x00\\x1f@\" + // 0x03BF0313: 0x00001F40\n\t\"\\x03\\xbf\\x03\\x14\\x00\\x00\\x1fA\" + // 0x03BF0314: 0x00001F41\n\t\"\\x1f@\\x03\\x00\\x00\\x00\\x1fB\" + // 0x1F400300: 0x00001F42\n\t\"\\x1fA\\x03\\x00\\x00\\x00\\x1fC\" + // 0x1F410300: 0x00001F43\n\t\"\\x1f@\\x03\\x01\\x00\\x00\\x1fD\" + // 0x1F400301: 0x00001F44\n\t\"\\x1fA\\x03\\x01\\x00\\x00\\x1fE\" + // 0x1F410301: 0x00001F45\n\t\"\\x03\\x9f\\x03\\x13\\x00\\x00\\x1fH\" + // 0x039F0313: 0x00001F48\n\t\"\\x03\\x9f\\x03\\x14\\x00\\x00\\x1fI\" + // 0x039F0314: 0x00001F49\n\t\"\\x1fH\\x03\\x00\\x00\\x00\\x1fJ\" + // 0x1F480300: 0x00001F4A\n\t\"\\x1fI\\x03\\x00\\x00\\x00\\x1fK\" + // 0x1F490300: 0x00001F4B\n\t\"\\x1fH\\x03\\x01\\x00\\x00\\x1fL\" + // 0x1F480301: 0x00001F4C\n\t\"\\x1fI\\x03\\x01\\x00\\x00\\x1fM\" + // 0x1F490301: 0x00001F4D\n\t\"\\x03\\xc5\\x03\\x13\\x00\\x00\\x1fP\" + // 0x03C50313: 0x00001F50\n\t\"\\x03\\xc5\\x03\\x14\\x00\\x00\\x1fQ\" + // 0x03C50314: 0x00001F51\n\t\"\\x1fP\\x03\\x00\\x00\\x00\\x1fR\" + // 0x1F500300: 0x00001F52\n\t\"\\x1fQ\\x03\\x00\\x00\\x00\\x1fS\" + // 0x1F510300: 0x00001F53\n\t\"\\x1fP\\x03\\x01\\x00\\x00\\x1fT\" + // 0x1F500301: 0x00001F54\n\t\"\\x1fQ\\x03\\x01\\x00\\x00\\x1fU\" + // 0x1F510301: 0x00001F55\n\t\"\\x1fP\\x03B\\x00\\x00\\x1fV\" + // 0x1F500342: 0x00001F56\n\t\"\\x1fQ\\x03B\\x00\\x00\\x1fW\" + // 0x1F510342: 0x00001F57\n\t\"\\x03\\xa5\\x03\\x14\\x00\\x00\\x1fY\" + // 0x03A50314: 0x00001F59\n\t\"\\x1fY\\x03\\x00\\x00\\x00\\x1f[\" + // 0x1F590300: 0x00001F5B\n\t\"\\x1fY\\x03\\x01\\x00\\x00\\x1f]\" + // 0x1F590301: 0x00001F5D\n\t\"\\x1fY\\x03B\\x00\\x00\\x1f_\" + // 0x1F590342: 0x00001F5F\n\t\"\\x03\\xc9\\x03\\x13\\x00\\x00\\x1f`\" + // 0x03C90313: 0x00001F60\n\t\"\\x03\\xc9\\x03\\x14\\x00\\x00\\x1fa\" + // 0x03C90314: 0x00001F61\n\t\"\\x1f`\\x03\\x00\\x00\\x00\\x1fb\" + // 0x1F600300: 0x00001F62\n\t\"\\x1fa\\x03\\x00\\x00\\x00\\x1fc\" + // 0x1F610300: 0x00001F63\n\t\"\\x1f`\\x03\\x01\\x00\\x00\\x1fd\" + // 0x1F600301: 0x00001F64\n\t\"\\x1fa\\x03\\x01\\x00\\x00\\x1fe\" + // 0x1F610301: 0x00001F65\n\t\"\\x1f`\\x03B\\x00\\x00\\x1ff\" + // 0x1F600342: 0x00001F66\n\t\"\\x1fa\\x03B\\x00\\x00\\x1fg\" + // 0x1F610342: 0x00001F67\n\t\"\\x03\\xa9\\x03\\x13\\x00\\x00\\x1fh\" + // 0x03A90313: 0x00001F68\n\t\"\\x03\\xa9\\x03\\x14\\x00\\x00\\x1fi\" + // 0x03A90314: 0x00001F69\n\t\"\\x1fh\\x03\\x00\\x00\\x00\\x1fj\" + // 0x1F680300: 0x00001F6A\n\t\"\\x1fi\\x03\\x00\\x00\\x00\\x1fk\" + // 0x1F690300: 0x00001F6B\n\t\"\\x1fh\\x03\\x01\\x00\\x00\\x1fl\" + // 0x1F680301: 0x00001F6C\n\t\"\\x1fi\\x03\\x01\\x00\\x00\\x1fm\" + // 0x1F690301: 0x00001F6D\n\t\"\\x1fh\\x03B\\x00\\x00\\x1fn\" + // 0x1F680342: 0x00001F6E\n\t\"\\x1fi\\x03B\\x00\\x00\\x1fo\" + // 0x1F690342: 0x00001F6F\n\t\"\\x03\\xb1\\x03\\x00\\x00\\x00\\x1fp\" + // 0x03B10300: 0x00001F70\n\t\"\\x03\\xb5\\x03\\x00\\x00\\x00\\x1fr\" + // 0x03B50300: 0x00001F72\n\t\"\\x03\\xb7\\x03\\x00\\x00\\x00\\x1ft\" + // 0x03B70300: 0x00001F74\n\t\"\\x03\\xb9\\x03\\x00\\x00\\x00\\x1fv\" + // 0x03B90300: 0x00001F76\n\t\"\\x03\\xbf\\x03\\x00\\x00\\x00\\x1fx\" + // 0x03BF0300: 0x00001F78\n\t\"\\x03\\xc5\\x03\\x00\\x00\\x00\\x1fz\" + // 0x03C50300: 0x00001F7A\n\t\"\\x03\\xc9\\x03\\x00\\x00\\x00\\x1f|\" + // 0x03C90300: 0x00001F7C\n\t\"\\x1f\\x00\\x03E\\x00\\x00\\x1f\\x80\" + // 0x1F000345: 0x00001F80\n\t\"\\x1f\\x01\\x03E\\x00\\x00\\x1f\\x81\" + // 0x1F010345: 0x00001F81\n\t\"\\x1f\\x02\\x03E\\x00\\x00\\x1f\\x82\" + // 0x1F020345: 0x00001F82\n\t\"\\x1f\\x03\\x03E\\x00\\x00\\x1f\\x83\" + // 0x1F030345: 0x00001F83\n\t\"\\x1f\\x04\\x03E\\x00\\x00\\x1f\\x84\" + // 0x1F040345: 0x00001F84\n\t\"\\x1f\\x05\\x03E\\x00\\x00\\x1f\\x85\" + // 0x1F050345: 0x00001F85\n\t\"\\x1f\\x06\\x03E\\x00\\x00\\x1f\\x86\" + // 0x1F060345: 0x00001F86\n\t\"\\x1f\\a\\x03E\\x00\\x00\\x1f\\x87\" + // 0x1F070345: 0x00001F87\n\t\"\\x1f\\b\\x03E\\x00\\x00\\x1f\\x88\" + // 0x1F080345: 0x00001F88\n\t\"\\x1f\\t\\x03E\\x00\\x00\\x1f\\x89\" + // 0x1F090345: 0x00001F89\n\t\"\\x1f\\n\\x03E\\x00\\x00\\x1f\\x8a\" + // 0x1F0A0345: 0x00001F8A\n\t\"\\x1f\\v\\x03E\\x00\\x00\\x1f\\x8b\" + // 0x1F0B0345: 0x00001F8B\n\t\"\\x1f\\f\\x03E\\x00\\x00\\x1f\\x8c\" + // 0x1F0C0345: 0x00001F8C\n\t\"\\x1f\\r\\x03E\\x00\\x00\\x1f\\x8d\" + // 0x1F0D0345: 0x00001F8D\n\t\"\\x1f\\x0e\\x03E\\x00\\x00\\x1f\\x8e\" + // 0x1F0E0345: 0x00001F8E\n\t\"\\x1f\\x0f\\x03E\\x00\\x00\\x1f\\x8f\" + // 0x1F0F0345: 0x00001F8F\n\t\"\\x1f \\x03E\\x00\\x00\\x1f\\x90\" + // 0x1F200345: 0x00001F90\n\t\"\\x1f!\\x03E\\x00\\x00\\x1f\\x91\" + // 0x1F210345: 0x00001F91\n\t\"\\x1f\\\"\\x03E\\x00\\x00\\x1f\\x92\" + // 0x1F220345: 0x00001F92\n\t\"\\x1f#\\x03E\\x00\\x00\\x1f\\x93\" + // 0x1F230345: 0x00001F93\n\t\"\\x1f$\\x03E\\x00\\x00\\x1f\\x94\" + // 0x1F240345: 0x00001F94\n\t\"\\x1f%\\x03E\\x00\\x00\\x1f\\x95\" + // 0x1F250345: 0x00001F95\n\t\"\\x1f&\\x03E\\x00\\x00\\x1f\\x96\" + // 0x1F260345: 0x00001F96\n\t\"\\x1f'\\x03E\\x00\\x00\\x1f\\x97\" + // 0x1F270345: 0x00001F97\n\t\"\\x1f(\\x03E\\x00\\x00\\x1f\\x98\" + // 0x1F280345: 0x00001F98\n\t\"\\x1f)\\x03E\\x00\\x00\\x1f\\x99\" + // 0x1F290345: 0x00001F99\n\t\"\\x1f*\\x03E\\x00\\x00\\x1f\\x9a\" + // 0x1F2A0345: 0x00001F9A\n\t\"\\x1f+\\x03E\\x00\\x00\\x1f\\x9b\" + // 0x1F2B0345: 0x00001F9B\n\t\"\\x1f,\\x03E\\x00\\x00\\x1f\\x9c\" + // 0x1F2C0345: 0x00001F9C\n\t\"\\x1f-\\x03E\\x00\\x00\\x1f\\x9d\" + // 0x1F2D0345: 0x00001F9D\n\t\"\\x1f.\\x03E\\x00\\x00\\x1f\\x9e\" + // 0x1F2E0345: 0x00001F9E\n\t\"\\x1f/\\x03E\\x00\\x00\\x1f\\x9f\" + // 0x1F2F0345: 0x00001F9F\n\t\"\\x1f`\\x03E\\x00\\x00\\x1f\\xa0\" + // 0x1F600345: 0x00001FA0\n\t\"\\x1fa\\x03E\\x00\\x00\\x1f\\xa1\" + // 0x1F610345: 0x00001FA1\n\t\"\\x1fb\\x03E\\x00\\x00\\x1f\\xa2\" + // 0x1F620345: 0x00001FA2\n\t\"\\x1fc\\x03E\\x00\\x00\\x1f\\xa3\" + // 0x1F630345: 0x00001FA3\n\t\"\\x1fd\\x03E\\x00\\x00\\x1f\\xa4\" + // 0x1F640345: 0x00001FA4\n\t\"\\x1fe\\x03E\\x00\\x00\\x1f\\xa5\" + // 0x1F650345: 0x00001FA5\n\t\"\\x1ff\\x03E\\x00\\x00\\x1f\\xa6\" + // 0x1F660345: 0x00001FA6\n\t\"\\x1fg\\x03E\\x00\\x00\\x1f\\xa7\" + // 0x1F670345: 0x00001FA7\n\t\"\\x1fh\\x03E\\x00\\x00\\x1f\\xa8\" + // 0x1F680345: 0x00001FA8\n\t\"\\x1fi\\x03E\\x00\\x00\\x1f\\xa9\" + // 0x1F690345: 0x00001FA9\n\t\"\\x1fj\\x03E\\x00\\x00\\x1f\\xaa\" + // 0x1F6A0345: 0x00001FAA\n\t\"\\x1fk\\x03E\\x00\\x00\\x1f\\xab\" + // 0x1F6B0345: 0x00001FAB\n\t\"\\x1fl\\x03E\\x00\\x00\\x1f\\xac\" + // 0x1F6C0345: 0x00001FAC\n\t\"\\x1fm\\x03E\\x00\\x00\\x1f\\xad\" + // 0x1F6D0345: 0x00001FAD\n\t\"\\x1fn\\x03E\\x00\\x00\\x1f\\xae\" + // 0x1F6E0345: 0x00001FAE\n\t\"\\x1fo\\x03E\\x00\\x00\\x1f\\xaf\" + // 0x1F6F0345: 0x00001FAF\n\t\"\\x03\\xb1\\x03\\x06\\x00\\x00\\x1f\\xb0\" + // 0x03B10306: 0x00001FB0\n\t\"\\x03\\xb1\\x03\\x04\\x00\\x00\\x1f\\xb1\" + // 0x03B10304: 0x00001FB1\n\t\"\\x1fp\\x03E\\x00\\x00\\x1f\\xb2\" + // 0x1F700345: 0x00001FB2\n\t\"\\x03\\xb1\\x03E\\x00\\x00\\x1f\\xb3\" + // 0x03B10345: 0x00001FB3\n\t\"\\x03\\xac\\x03E\\x00\\x00\\x1f\\xb4\" + // 0x03AC0345: 0x00001FB4\n\t\"\\x03\\xb1\\x03B\\x00\\x00\\x1f\\xb6\" + // 0x03B10342: 0x00001FB6\n\t\"\\x1f\\xb6\\x03E\\x00\\x00\\x1f\\xb7\" + // 0x1FB60345: 0x00001FB7\n\t\"\\x03\\x91\\x03\\x06\\x00\\x00\\x1f\\xb8\" + // 0x03910306: 0x00001FB8\n\t\"\\x03\\x91\\x03\\x04\\x00\\x00\\x1f\\xb9\" + // 0x03910304: 0x00001FB9\n\t\"\\x03\\x91\\x03\\x00\\x00\\x00\\x1f\\xba\" + // 0x03910300: 0x00001FBA\n\t\"\\x03\\x91\\x03E\\x00\\x00\\x1f\\xbc\" + // 0x03910345: 0x00001FBC\n\t\"\\x00\\xa8\\x03B\\x00\\x00\\x1f\\xc1\" + // 0x00A80342: 0x00001FC1\n\t\"\\x1ft\\x03E\\x00\\x00\\x1f\\xc2\" + // 0x1F740345: 0x00001FC2\n\t\"\\x03\\xb7\\x03E\\x00\\x00\\x1f\\xc3\" + // 0x03B70345: 0x00001FC3\n\t\"\\x03\\xae\\x03E\\x00\\x00\\x1f\\xc4\" + // 0x03AE0345: 0x00001FC4\n\t\"\\x03\\xb7\\x03B\\x00\\x00\\x1f\\xc6\" + // 0x03B70342: 0x00001FC6\n\t\"\\x1f\\xc6\\x03E\\x00\\x00\\x1f\\xc7\" + // 0x1FC60345: 0x00001FC7\n\t\"\\x03\\x95\\x03\\x00\\x00\\x00\\x1f\\xc8\" + // 0x03950300: 0x00001FC8\n\t\"\\x03\\x97\\x03\\x00\\x00\\x00\\x1f\\xca\" + // 0x03970300: 0x00001FCA\n\t\"\\x03\\x97\\x03E\\x00\\x00\\x1f\\xcc\" + // 0x03970345: 0x00001FCC\n\t\"\\x1f\\xbf\\x03\\x00\\x00\\x00\\x1f\\xcd\" + // 0x1FBF0300: 0x00001FCD\n\t\"\\x1f\\xbf\\x03\\x01\\x00\\x00\\x1f\\xce\" + // 0x1FBF0301: 0x00001FCE\n\t\"\\x1f\\xbf\\x03B\\x00\\x00\\x1f\\xcf\" + // 0x1FBF0342: 0x00001FCF\n\t\"\\x03\\xb9\\x03\\x06\\x00\\x00\\x1f\\xd0\" + // 0x03B90306: 0x00001FD0\n\t\"\\x03\\xb9\\x03\\x04\\x00\\x00\\x1f\\xd1\" + // 0x03B90304: 0x00001FD1\n\t\"\\x03\\xca\\x03\\x00\\x00\\x00\\x1f\\xd2\" + // 0x03CA0300: 0x00001FD2\n\t\"\\x03\\xb9\\x03B\\x00\\x00\\x1f\\xd6\" + // 0x03B90342: 0x00001FD6\n\t\"\\x03\\xca\\x03B\\x00\\x00\\x1f\\xd7\" + // 0x03CA0342: 0x00001FD7\n\t\"\\x03\\x99\\x03\\x06\\x00\\x00\\x1f\\xd8\" + // 0x03990306: 0x00001FD8\n\t\"\\x03\\x99\\x03\\x04\\x00\\x00\\x1f\\xd9\" + // 0x03990304: 0x00001FD9\n\t\"\\x03\\x99\\x03\\x00\\x00\\x00\\x1f\\xda\" + // 0x03990300: 0x00001FDA\n\t\"\\x1f\\xfe\\x03\\x00\\x00\\x00\\x1f\\xdd\" + // 0x1FFE0300: 0x00001FDD\n\t\"\\x1f\\xfe\\x03\\x01\\x00\\x00\\x1f\\xde\" + // 0x1FFE0301: 0x00001FDE\n\t\"\\x1f\\xfe\\x03B\\x00\\x00\\x1f\\xdf\" + // 0x1FFE0342: 0x00001FDF\n\t\"\\x03\\xc5\\x03\\x06\\x00\\x00\\x1f\\xe0\" + // 0x03C50306: 0x00001FE0\n\t\"\\x03\\xc5\\x03\\x04\\x00\\x00\\x1f\\xe1\" + // 0x03C50304: 0x00001FE1\n\t\"\\x03\\xcb\\x03\\x00\\x00\\x00\\x1f\\xe2\" + // 0x03CB0300: 0x00001FE2\n\t\"\\x03\\xc1\\x03\\x13\\x00\\x00\\x1f\\xe4\" + // 0x03C10313: 0x00001FE4\n\t\"\\x03\\xc1\\x03\\x14\\x00\\x00\\x1f\\xe5\" + // 0x03C10314: 0x00001FE5\n\t\"\\x03\\xc5\\x03B\\x00\\x00\\x1f\\xe6\" + // 0x03C50342: 0x00001FE6\n\t\"\\x03\\xcb\\x03B\\x00\\x00\\x1f\\xe7\" + // 0x03CB0342: 0x00001FE7\n\t\"\\x03\\xa5\\x03\\x06\\x00\\x00\\x1f\\xe8\" + // 0x03A50306: 0x00001FE8\n\t\"\\x03\\xa5\\x03\\x04\\x00\\x00\\x1f\\xe9\" + // 0x03A50304: 0x00001FE9\n\t\"\\x03\\xa5\\x03\\x00\\x00\\x00\\x1f\\xea\" + // 0x03A50300: 0x00001FEA\n\t\"\\x03\\xa1\\x03\\x14\\x00\\x00\\x1f\\xec\" + // 0x03A10314: 0x00001FEC\n\t\"\\x00\\xa8\\x03\\x00\\x00\\x00\\x1f\\xed\" + // 0x00A80300: 0x00001FED\n\t\"\\x1f|\\x03E\\x00\\x00\\x1f\\xf2\" + // 0x1F7C0345: 0x00001FF2\n\t\"\\x03\\xc9\\x03E\\x00\\x00\\x1f\\xf3\" + // 0x03C90345: 0x00001FF3\n\t\"\\x03\\xce\\x03E\\x00\\x00\\x1f\\xf4\" + // 0x03CE0345: 0x00001FF4\n\t\"\\x03\\xc9\\x03B\\x00\\x00\\x1f\\xf6\" + // 0x03C90342: 0x00001FF6\n\t\"\\x1f\\xf6\\x03E\\x00\\x00\\x1f\\xf7\" + // 0x1FF60345: 0x00001FF7\n\t\"\\x03\\x9f\\x03\\x00\\x00\\x00\\x1f\\xf8\" + // 0x039F0300: 0x00001FF8\n\t\"\\x03\\xa9\\x03\\x00\\x00\\x00\\x1f\\xfa\" + // 0x03A90300: 0x00001FFA\n\t\"\\x03\\xa9\\x03E\\x00\\x00\\x1f\\xfc\" + // 0x03A90345: 0x00001FFC\n\t\"!\\x90\\x038\\x00\\x00!\\x9a\" + // 0x21900338: 0x0000219A\n\t\"!\\x92\\x038\\x00\\x00!\\x9b\" + // 0x21920338: 0x0000219B\n\t\"!\\x94\\x038\\x00\\x00!\\xae\" + // 0x21940338: 0x000021AE\n\t\"!\\xd0\\x038\\x00\\x00!\\xcd\" + // 0x21D00338: 0x000021CD\n\t\"!\\xd4\\x038\\x00\\x00!\\xce\" + // 0x21D40338: 0x000021CE\n\t\"!\\xd2\\x038\\x00\\x00!\\xcf\" + // 0x21D20338: 0x000021CF\n\t\"\\\"\\x03\\x038\\x00\\x00\\\"\\x04\" + // 0x22030338: 0x00002204\n\t\"\\\"\\b\\x038\\x00\\x00\\\"\\t\" + // 0x22080338: 0x00002209\n\t\"\\\"\\v\\x038\\x00\\x00\\\"\\f\" + // 0x220B0338: 0x0000220C\n\t\"\\\"#\\x038\\x00\\x00\\\"$\" + // 0x22230338: 0x00002224\n\t\"\\\"%\\x038\\x00\\x00\\\"&\" + // 0x22250338: 0x00002226\n\t\"\\\"<\\x038\\x00\\x00\\\"A\" + // 0x223C0338: 0x00002241\n\t\"\\\"C\\x038\\x00\\x00\\\"D\" + // 0x22430338: 0x00002244\n\t\"\\\"E\\x038\\x00\\x00\\\"G\" + // 0x22450338: 0x00002247\n\t\"\\\"H\\x038\\x00\\x00\\\"I\" + // 0x22480338: 0x00002249\n\t\"\\x00=\\x038\\x00\\x00\\\"`\" + // 0x003D0338: 0x00002260\n\t\"\\\"a\\x038\\x00\\x00\\\"b\" + // 0x22610338: 0x00002262\n\t\"\\\"M\\x038\\x00\\x00\\\"m\" + // 0x224D0338: 0x0000226D\n\t\"\\x00<\\x038\\x00\\x00\\\"n\" + // 0x003C0338: 0x0000226E\n\t\"\\x00>\\x038\\x00\\x00\\\"o\" + // 0x003E0338: 0x0000226F\n\t\"\\\"d\\x038\\x00\\x00\\\"p\" + // 0x22640338: 0x00002270\n\t\"\\\"e\\x038\\x00\\x00\\\"q\" + // 0x22650338: 0x00002271\n\t\"\\\"r\\x038\\x00\\x00\\\"t\" + // 0x22720338: 0x00002274\n\t\"\\\"s\\x038\\x00\\x00\\\"u\" + // 0x22730338: 0x00002275\n\t\"\\\"v\\x038\\x00\\x00\\\"x\" + // 0x22760338: 0x00002278\n\t\"\\\"w\\x038\\x00\\x00\\\"y\" + // 0x22770338: 0x00002279\n\t\"\\\"z\\x038\\x00\\x00\\\"\\x80\" + // 0x227A0338: 0x00002280\n\t\"\\\"{\\x038\\x00\\x00\\\"\\x81\" + // 0x227B0338: 0x00002281\n\t\"\\\"\\x82\\x038\\x00\\x00\\\"\\x84\" + // 0x22820338: 0x00002284\n\t\"\\\"\\x83\\x038\\x00\\x00\\\"\\x85\" + // 0x22830338: 0x00002285\n\t\"\\\"\\x86\\x038\\x00\\x00\\\"\\x88\" + // 0x22860338: 0x00002288\n\t\"\\\"\\x87\\x038\\x00\\x00\\\"\\x89\" + // 0x22870338: 0x00002289\n\t\"\\\"\\xa2\\x038\\x00\\x00\\\"\\xac\" + // 0x22A20338: 0x000022AC\n\t\"\\\"\\xa8\\x038\\x00\\x00\\\"\\xad\" + // 0x22A80338: 0x000022AD\n\t\"\\\"\\xa9\\x038\\x00\\x00\\\"\\xae\" + // 0x22A90338: 0x000022AE\n\t\"\\\"\\xab\\x038\\x00\\x00\\\"\\xaf\" + // 0x22AB0338: 0x000022AF\n\t\"\\\"|\\x038\\x00\\x00\\\"\\xe0\" + // 0x227C0338: 0x000022E0\n\t\"\\\"}\\x038\\x00\\x00\\\"\\xe1\" + // 0x227D0338: 0x000022E1\n\t\"\\\"\\x91\\x038\\x00\\x00\\\"\\xe2\" + // 0x22910338: 0x000022E2\n\t\"\\\"\\x92\\x038\\x00\\x00\\\"\\xe3\" + // 0x22920338: 0x000022E3\n\t\"\\\"\\xb2\\x038\\x00\\x00\\\"\\xea\" + // 0x22B20338: 0x000022EA\n\t\"\\\"\\xb3\\x038\\x00\\x00\\\"\\xeb\" + // 0x22B30338: 0x000022EB\n\t\"\\\"\\xb4\\x038\\x00\\x00\\\"\\xec\" + // 0x22B40338: 0x000022EC\n\t\"\\\"\\xb5\\x038\\x00\\x00\\\"\\xed\" + // 0x22B50338: 0x000022ED\n\t\"0K0\\x99\\x00\\x000L\" + // 0x304B3099: 0x0000304C\n\t\"0M0\\x99\\x00\\x000N\" + // 0x304D3099: 0x0000304E\n\t\"0O0\\x99\\x00\\x000P\" + // 0x304F3099: 0x00003050\n\t\"0Q0\\x99\\x00\\x000R\" + // 0x30513099: 0x00003052\n\t\"0S0\\x99\\x00\\x000T\" + // 0x30533099: 0x00003054\n\t\"0U0\\x99\\x00\\x000V\" + // 0x30553099: 0x00003056\n\t\"0W0\\x99\\x00\\x000X\" + // 0x30573099: 0x00003058\n\t\"0Y0\\x99\\x00\\x000Z\" + // 0x30593099: 0x0000305A\n\t\"0[0\\x99\\x00\\x000\\\\\" + // 0x305B3099: 0x0000305C\n\t\"0]0\\x99\\x00\\x000^\" + // 0x305D3099: 0x0000305E\n\t\"0_0\\x99\\x00\\x000`\" + // 0x305F3099: 0x00003060\n\t\"0a0\\x99\\x00\\x000b\" + // 0x30613099: 0x00003062\n\t\"0d0\\x99\\x00\\x000e\" + // 0x30643099: 0x00003065\n\t\"0f0\\x99\\x00\\x000g\" + // 0x30663099: 0x00003067\n\t\"0h0\\x99\\x00\\x000i\" + // 0x30683099: 0x00003069\n\t\"0o0\\x99\\x00\\x000p\" + // 0x306F3099: 0x00003070\n\t\"0o0\\x9a\\x00\\x000q\" + // 0x306F309A: 0x00003071\n\t\"0r0\\x99\\x00\\x000s\" + // 0x30723099: 0x00003073\n\t\"0r0\\x9a\\x00\\x000t\" + // 0x3072309A: 0x00003074\n\t\"0u0\\x99\\x00\\x000v\" + // 0x30753099: 0x00003076\n\t\"0u0\\x9a\\x00\\x000w\" + // 0x3075309A: 0x00003077\n\t\"0x0\\x99\\x00\\x000y\" + // 0x30783099: 0x00003079\n\t\"0x0\\x9a\\x00\\x000z\" + // 0x3078309A: 0x0000307A\n\t\"0{0\\x99\\x00\\x000|\" + // 0x307B3099: 0x0000307C\n\t\"0{0\\x9a\\x00\\x000}\" + // 0x307B309A: 0x0000307D\n\t\"0F0\\x99\\x00\\x000\\x94\" + // 0x30463099: 0x00003094\n\t\"0\\x9d0\\x99\\x00\\x000\\x9e\" + // 0x309D3099: 0x0000309E\n\t\"0\\xab0\\x99\\x00\\x000\\xac\" + // 0x30AB3099: 0x000030AC\n\t\"0\\xad0\\x99\\x00\\x000\\xae\" + // 0x30AD3099: 0x000030AE\n\t\"0\\xaf0\\x99\\x00\\x000\\xb0\" + // 0x30AF3099: 0x000030B0\n\t\"0\\xb10\\x99\\x00\\x000\\xb2\" + // 0x30B13099: 0x000030B2\n\t\"0\\xb30\\x99\\x00\\x000\\xb4\" + // 0x30B33099: 0x000030B4\n\t\"0\\xb50\\x99\\x00\\x000\\xb6\" + // 0x30B53099: 0x000030B6\n\t\"0\\xb70\\x99\\x00\\x000\\xb8\" + // 0x30B73099: 0x000030B8\n\t\"0\\xb90\\x99\\x00\\x000\\xba\" + // 0x30B93099: 0x000030BA\n\t\"0\\xbb0\\x99\\x00\\x000\\xbc\" + // 0x30BB3099: 0x000030BC\n\t\"0\\xbd0\\x99\\x00\\x000\\xbe\" + // 0x30BD3099: 0x000030BE\n\t\"0\\xbf0\\x99\\x00\\x000\\xc0\" + // 0x30BF3099: 0x000030C0\n\t\"0\\xc10\\x99\\x00\\x000\\xc2\" + // 0x30C13099: 0x000030C2\n\t\"0\\xc40\\x99\\x00\\x000\\xc5\" + // 0x30C43099: 0x000030C5\n\t\"0\\xc60\\x99\\x00\\x000\\xc7\" + // 0x30C63099: 0x000030C7\n\t\"0\\xc80\\x99\\x00\\x000\\xc9\" + // 0x30C83099: 0x000030C9\n\t\"0\\xcf0\\x99\\x00\\x000\\xd0\" + // 0x30CF3099: 0x000030D0\n\t\"0\\xcf0\\x9a\\x00\\x000\\xd1\" + // 0x30CF309A: 0x000030D1\n\t\"0\\xd20\\x99\\x00\\x000\\xd3\" + // 0x30D23099: 0x000030D3\n\t\"0\\xd20\\x9a\\x00\\x000\\xd4\" + // 0x30D2309A: 0x000030D4\n\t\"0\\xd50\\x99\\x00\\x000\\xd6\" + // 0x30D53099: 0x000030D6\n\t\"0\\xd50\\x9a\\x00\\x000\\xd7\" + // 0x30D5309A: 0x000030D7\n\t\"0\\xd80\\x99\\x00\\x000\\xd9\" + // 0x30D83099: 0x000030D9\n\t\"0\\xd80\\x9a\\x00\\x000\\xda\" + // 0x30D8309A: 0x000030DA\n\t\"0\\xdb0\\x99\\x00\\x000\\xdc\" + // 0x30DB3099: 0x000030DC\n\t\"0\\xdb0\\x9a\\x00\\x000\\xdd\" + // 0x30DB309A: 0x000030DD\n\t\"0\\xa60\\x99\\x00\\x000\\xf4\" + // 0x30A63099: 0x000030F4\n\t\"0\\xef0\\x99\\x00\\x000\\xf7\" + // 0x30EF3099: 0x000030F7\n\t\"0\\xf00\\x99\\x00\\x000\\xf8\" + // 0x30F03099: 0x000030F8\n\t\"0\\xf10\\x99\\x00\\x000\\xf9\" + // 0x30F13099: 0x000030F9\n\t\"0\\xf20\\x99\\x00\\x000\\xfa\" + // 0x30F23099: 0x000030FA\n\t\"0\\xfd0\\x99\\x00\\x000\\xfe\" + // 0x30FD3099: 0x000030FE\n\t\"\\x10\\x99\\x10\\xba\\x00\\x01\\x10\\x9a\" + // 0x109910BA: 0x0001109A\n\t\"\\x10\\x9b\\x10\\xba\\x00\\x01\\x10\\x9c\" + // 0x109B10BA: 0x0001109C\n\t\"\\x10\\xa5\\x10\\xba\\x00\\x01\\x10\\xab\" + // 0x10A510BA: 0x000110AB\n\t\"\\x111\\x11'\\x00\\x01\\x11.\" + // 0x11311127: 0x0001112E\n\t\"\\x112\\x11'\\x00\\x01\\x11/\" + // 0x11321127: 0x0001112F\n\t\"\\x13G\\x13>\\x00\\x01\\x13K\" + // 0x1347133E: 0x0001134B\n\t\"\\x13G\\x13W\\x00\\x01\\x13L\" + // 0x13471357: 0x0001134C\n\t\"\\x14\\xb9\\x14\\xba\\x00\\x01\\x14\\xbb\" + // 0x14B914BA: 0x000114BB\n\t\"\\x14\\xb9\\x14\\xb0\\x00\\x01\\x14\\xbc\" + // 0x14B914B0: 0x000114BC\n\t\"\\x14\\xb9\\x14\\xbd\\x00\\x01\\x14\\xbe\" + // 0x14B914BD: 0x000114BE\n\t\"\\x15\\xb8\\x15\\xaf\\x00\\x01\\x15\\xba\" + // 0x15B815AF: 0x000115BA\n\t\"\\x15\\xb9\\x15\\xaf\\x00\\x01\\x15\\xbb\" + // 0x15B915AF: 0x000115BB\n\t\"\"\n\t// Total size of tables: 53KB (54006 bytes)\n"
  },
  {
    "path": "vendor/golang.org/x/text/unicode/norm/transform.go",
    "content": "// Copyright 2013 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage norm\n\nimport (\n\t\"unicode/utf8\"\n\n\t\"golang.org/x/text/transform\"\n)\n\n// Reset implements the Reset method of the transform.Transformer interface.\nfunc (Form) Reset() {}\n\n// Transform implements the Transform method of the transform.Transformer\n// interface. It may need to write segments of up to MaxSegmentSize at once.\n// Users should either catch ErrShortDst and allow dst to grow or have dst be at\n// least of size MaxTransformChunkSize to be guaranteed of progress.\nfunc (f Form) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {\n\t// Cap the maximum number of src bytes to check.\n\tb := src\n\teof := atEOF\n\tif ns := len(dst); ns < len(b) {\n\t\terr = transform.ErrShortDst\n\t\teof = false\n\t\tb = b[:ns]\n\t}\n\ti, ok := formTable[f].quickSpan(inputBytes(b), 0, len(b), eof)\n\tn := copy(dst, b[:i])\n\tif !ok {\n\t\tnDst, nSrc, err = f.transform(dst[n:], src[n:], atEOF)\n\t\treturn nDst + n, nSrc + n, err\n\t}\n\n\tif err == nil && n < len(src) && !atEOF {\n\t\terr = transform.ErrShortSrc\n\t}\n\treturn n, n, err\n}\n\nfunc flushTransform(rb *reorderBuffer) bool {\n\t// Write out (must fully fit in dst, or else it is an ErrShortDst).\n\tif len(rb.out) < rb.nrune*utf8.UTFMax {\n\t\treturn false\n\t}\n\trb.out = rb.out[rb.flushCopy(rb.out):]\n\treturn true\n}\n\nvar errs = []error{nil, transform.ErrShortDst, transform.ErrShortSrc}\n\n// transform implements the transform.Transformer interface. It is only called\n// when quickSpan does not pass for a given string.\nfunc (f Form) transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {\n\t// TODO: get rid of reorderBuffer. See CL 23460044.\n\trb := reorderBuffer{}\n\trb.init(f, src)\n\tfor {\n\t\t// Load segment into reorder buffer.\n\t\trb.setFlusher(dst[nDst:], flushTransform)\n\t\tend := decomposeSegment(&rb, nSrc, atEOF)\n\t\tif end < 0 {\n\t\t\treturn nDst, nSrc, errs[-end]\n\t\t}\n\t\tnDst = len(dst) - len(rb.out)\n\t\tnSrc = end\n\n\t\t// Next quickSpan.\n\t\tend = rb.nsrc\n\t\teof := atEOF\n\t\tif n := nSrc + len(dst) - nDst; n < end {\n\t\t\terr = transform.ErrShortDst\n\t\t\tend = n\n\t\t\teof = false\n\t\t}\n\t\tend, ok := rb.f.quickSpan(rb.src, nSrc, end, eof)\n\t\tn := copy(dst[nDst:], rb.src.bytes[nSrc:end])\n\t\tnSrc += n\n\t\tnDst += n\n\t\tif ok {\n\t\t\tif err == nil && n < rb.nsrc && !atEOF {\n\t\t\t\terr = transform.ErrShortSrc\n\t\t\t}\n\t\t\treturn nDst, nSrc, err\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "vendor/golang.org/x/text/unicode/norm/trie.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage norm\n\ntype valueRange struct {\n\tvalue  uint16 // header: value:stride\n\tlo, hi byte   // header: lo:n\n}\n\ntype sparseBlocks struct {\n\tvalues []valueRange\n\toffset []uint16\n}\n\nvar nfcSparse = sparseBlocks{\n\tvalues: nfcSparseValues[:],\n\toffset: nfcSparseOffset[:],\n}\n\nvar nfkcSparse = sparseBlocks{\n\tvalues: nfkcSparseValues[:],\n\toffset: nfkcSparseOffset[:],\n}\n\nvar (\n\tnfcData  = newNfcTrie(0)\n\tnfkcData = newNfkcTrie(0)\n)\n\n// lookupValue determines the type of block n and looks up the value for b.\n// For n < t.cutoff, the block is a simple lookup table. Otherwise, the block\n// is a list of ranges with an accompanying value. Given a matching range r,\n// the value for b is by r.value + (b - r.lo) * stride.\nfunc (t *sparseBlocks) lookup(n uint32, b byte) uint16 {\n\toffset := t.offset[n]\n\theader := t.values[offset]\n\tlo := offset + 1\n\thi := lo + uint16(header.lo)\n\tfor lo < hi {\n\t\tm := lo + (hi-lo)/2\n\t\tr := t.values[m]\n\t\tif r.lo <= b && b <= r.hi {\n\t\t\treturn r.value + uint16(b-r.lo)*header.value\n\t\t}\n\t\tif b < r.lo {\n\t\t\thi = m\n\t\t} else {\n\t\t\tlo = m + 1\n\t\t}\n\t}\n\treturn 0\n}\n"
  },
  {
    "path": "vendor/golang.org/x/text/unicode/norm/triegen.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// +build ignore\n\n// Trie table generator.\n// Used by make*tables tools to generate a go file with trie data structures\n// for mapping UTF-8 to a 16-bit value. All but the last byte in a UTF-8 byte\n// sequence are used to lookup offsets in the index table to be used for the\n// next byte. The last byte is used to index into a table with 16-bit values.\n\npackage main\n\nimport (\n\t\"fmt\"\n\t\"io\"\n)\n\nconst maxSparseEntries = 16\n\ntype normCompacter struct {\n\tsparseBlocks [][]uint64\n\tsparseOffset []uint16\n\tsparseCount  int\n\tname         string\n}\n\nfunc mostFrequentStride(a []uint64) int {\n\tcounts := make(map[int]int)\n\tvar v int\n\tfor _, x := range a {\n\t\tif stride := int(x) - v; v != 0 && stride >= 0 {\n\t\t\tcounts[stride]++\n\t\t}\n\t\tv = int(x)\n\t}\n\tvar maxs, maxc int\n\tfor stride, cnt := range counts {\n\t\tif cnt > maxc || (cnt == maxc && stride < maxs) {\n\t\t\tmaxs, maxc = stride, cnt\n\t\t}\n\t}\n\treturn maxs\n}\n\nfunc countSparseEntries(a []uint64) int {\n\tstride := mostFrequentStride(a)\n\tvar v, count int\n\tfor _, tv := range a {\n\t\tif int(tv)-v != stride {\n\t\t\tif tv != 0 {\n\t\t\t\tcount++\n\t\t\t}\n\t\t}\n\t\tv = int(tv)\n\t}\n\treturn count\n}\n\nfunc (c *normCompacter) Size(v []uint64) (sz int, ok bool) {\n\tif n := countSparseEntries(v); n <= maxSparseEntries {\n\t\treturn (n+1)*4 + 2, true\n\t}\n\treturn 0, false\n}\n\nfunc (c *normCompacter) Store(v []uint64) uint32 {\n\th := uint32(len(c.sparseOffset))\n\tc.sparseBlocks = append(c.sparseBlocks, v)\n\tc.sparseOffset = append(c.sparseOffset, uint16(c.sparseCount))\n\tc.sparseCount += countSparseEntries(v) + 1\n\treturn h\n}\n\nfunc (c *normCompacter) Handler() string {\n\treturn c.name + \"Sparse.lookup\"\n}\n\nfunc (c *normCompacter) Print(w io.Writer) (retErr error) {\n\tp := func(f string, x ...interface{}) {\n\t\tif _, err := fmt.Fprintf(w, f, x...); retErr == nil && err != nil {\n\t\t\tretErr = err\n\t\t}\n\t}\n\n\tls := len(c.sparseBlocks)\n\tp(\"// %sSparseOffset: %d entries, %d bytes\\n\", c.name, ls, ls*2)\n\tp(\"var %sSparseOffset = %#v\\n\\n\", c.name, c.sparseOffset)\n\n\tns := c.sparseCount\n\tp(\"// %sSparseValues: %d entries, %d bytes\\n\", c.name, ns, ns*4)\n\tp(\"var %sSparseValues = [%d]valueRange {\", c.name, ns)\n\tfor i, b := range c.sparseBlocks {\n\t\tp(\"\\n// Block %#x, offset %#x\", i, c.sparseOffset[i])\n\t\tvar v int\n\t\tstride := mostFrequentStride(b)\n\t\tn := countSparseEntries(b)\n\t\tp(\"\\n{value:%#04x,lo:%#02x},\", stride, uint8(n))\n\t\tfor i, nv := range b {\n\t\t\tif int(nv)-v != stride {\n\t\t\t\tif v != 0 {\n\t\t\t\t\tp(\",hi:%#02x},\", 0x80+i-1)\n\t\t\t\t}\n\t\t\t\tif nv != 0 {\n\t\t\t\t\tp(\"\\n{value:%#04x,lo:%#02x\", nv, 0x80+i)\n\t\t\t\t}\n\t\t\t}\n\t\t\tv = int(nv)\n\t\t}\n\t\tif v != 0 {\n\t\t\tp(\",hi:%#02x},\", 0x80+len(b)-1)\n\t\t}\n\t}\n\tp(\"\\n}\\n\\n\")\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/time/LICENSE",
    "content": "Copyright (c) 2009 The Go Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "vendor/golang.org/x/time/PATENTS",
    "content": "Additional IP Rights Grant (Patents)\n\n\"This implementation\" means the copyrightable works distributed by\nGoogle as part of the Go project.\n\nGoogle hereby grants to You a perpetual, worldwide, non-exclusive,\nno-charge, royalty-free, irrevocable (except as stated in this section)\npatent license to make, have made, use, offer to sell, sell, import,\ntransfer and otherwise run, modify and propagate the contents of this\nimplementation of Go, where such license applies only to those patent\nclaims, both currently owned or controlled by Google and acquired in\nthe future, licensable by Google that are necessarily infringed by this\nimplementation of Go.  This grant does not include claims that would be\ninfringed only as a consequence of further modification of this\nimplementation.  If you or your agent or exclusive licensee institute or\norder or agree to the institution of patent litigation against any\nentity (including a cross-claim or counterclaim in a lawsuit) alleging\nthat this implementation of Go or any code incorporated within this\nimplementation of Go constitutes direct or contributory patent\ninfringement, or inducement of patent infringement, then any patent\nrights granted to you under this License for this implementation of Go\nshall terminate as of the date such litigation is filed.\n"
  },
  {
    "path": "vendor/golang.org/x/time/rate/rate.go",
    "content": "// Copyright 2015 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package rate provides a rate limiter.\npackage rate\n\nimport (\n\t\"fmt\"\n\t\"math\"\n\t\"sync\"\n\t\"time\"\n\n\t\"golang.org/x/net/context\"\n)\n\n// Limit defines the maximum frequency of some events.\n// Limit is represented as number of events per second.\n// A zero Limit allows no events.\ntype Limit float64\n\n// Inf is the infinite rate limit; it allows all events (even if burst is zero).\nconst Inf = Limit(math.MaxFloat64)\n\n// Every converts a minimum time interval between events to a Limit.\nfunc Every(interval time.Duration) Limit {\n\tif interval <= 0 {\n\t\treturn Inf\n\t}\n\treturn 1 / Limit(interval.Seconds())\n}\n\n// A Limiter controls how frequently events are allowed to happen.\n// It implements a \"token bucket\" of size b, initially full and refilled\n// at rate r tokens per second.\n// Informally, in any large enough time interval, the Limiter limits the\n// rate to r tokens per second, with a maximum burst size of b events.\n// As a special case, if r == Inf (the infinite rate), b is ignored.\n// See https://en.wikipedia.org/wiki/Token_bucket for more about token buckets.\n//\n// The zero value is a valid Limiter, but it will reject all events.\n// Use NewLimiter to create non-zero Limiters.\n//\n// Limiter has three main methods, Allow, Reserve, and Wait.\n// Most callers should use Wait.\n//\n// Each of the three methods consumes a single token.\n// They differ in their behavior when no token is available.\n// If no token is available, Allow returns false.\n// If no token is available, Reserve returns a reservation for a future token\n// and the amount of time the caller must wait before using it.\n// If no token is available, Wait blocks until one can be obtained\n// or its associated context.Context is canceled.\n//\n// The methods AllowN, ReserveN, and WaitN consume n tokens.\ntype Limiter struct {\n\tlimit Limit\n\tburst int\n\n\tmu     sync.Mutex\n\ttokens float64\n\t// last is the last time the limiter's tokens field was updated\n\tlast time.Time\n\t// lastEvent is the latest time of a rate-limited event (past or future)\n\tlastEvent time.Time\n}\n\n// Limit returns the maximum overall event rate.\nfunc (lim *Limiter) Limit() Limit {\n\tlim.mu.Lock()\n\tdefer lim.mu.Unlock()\n\treturn lim.limit\n}\n\n// Burst returns the maximum burst size. Burst is the maximum number of tokens\n// that can be consumed in a single call to Allow, Reserve, or Wait, so higher\n// Burst values allow more events to happen at once.\n// A zero Burst allows no events, unless limit == Inf.\nfunc (lim *Limiter) Burst() int {\n\treturn lim.burst\n}\n\n// NewLimiter returns a new Limiter that allows events up to rate r and permits\n// bursts of at most b tokens.\nfunc NewLimiter(r Limit, b int) *Limiter {\n\treturn &Limiter{\n\t\tlimit: r,\n\t\tburst: b,\n\t}\n}\n\n// Allow is shorthand for AllowN(time.Now(), 1).\nfunc (lim *Limiter) Allow() bool {\n\treturn lim.AllowN(time.Now(), 1)\n}\n\n// AllowN reports whether n events may happen at time now.\n// Use this method if you intend to drop / skip events that exceed the rate limit.\n// Otherwise use Reserve or Wait.\nfunc (lim *Limiter) AllowN(now time.Time, n int) bool {\n\treturn lim.reserveN(now, n, 0).ok\n}\n\n// A Reservation holds information about events that are permitted by a Limiter to happen after a delay.\n// A Reservation may be canceled, which may enable the Limiter to permit additional events.\ntype Reservation struct {\n\tok        bool\n\tlim       *Limiter\n\ttokens    int\n\ttimeToAct time.Time\n\t// This is the Limit at reservation time, it can change later.\n\tlimit Limit\n}\n\n// OK returns whether the limiter can provide the requested number of tokens\n// within the maximum wait time.  If OK is false, Delay returns InfDuration, and\n// Cancel does nothing.\nfunc (r *Reservation) OK() bool {\n\treturn r.ok\n}\n\n// Delay is shorthand for DelayFrom(time.Now()).\nfunc (r *Reservation) Delay() time.Duration {\n\treturn r.DelayFrom(time.Now())\n}\n\n// InfDuration is the duration returned by Delay when a Reservation is not OK.\nconst InfDuration = time.Duration(1<<63 - 1)\n\n// DelayFrom returns the duration for which the reservation holder must wait\n// before taking the reserved action.  Zero duration means act immediately.\n// InfDuration means the limiter cannot grant the tokens requested in this\n// Reservation within the maximum wait time.\nfunc (r *Reservation) DelayFrom(now time.Time) time.Duration {\n\tif !r.ok {\n\t\treturn InfDuration\n\t}\n\tdelay := r.timeToAct.Sub(now)\n\tif delay < 0 {\n\t\treturn 0\n\t}\n\treturn delay\n}\n\n// Cancel is shorthand for CancelAt(time.Now()).\nfunc (r *Reservation) Cancel() {\n\tr.CancelAt(time.Now())\n\treturn\n}\n\n// CancelAt indicates that the reservation holder will not perform the reserved action\n// and reverses the effects of this Reservation on the rate limit as much as possible,\n// considering that other reservations may have already been made.\nfunc (r *Reservation) CancelAt(now time.Time) {\n\tif !r.ok {\n\t\treturn\n\t}\n\n\tr.lim.mu.Lock()\n\tdefer r.lim.mu.Unlock()\n\n\tif r.lim.limit == Inf || r.tokens == 0 || r.timeToAct.Before(now) {\n\t\treturn\n\t}\n\n\t// calculate tokens to restore\n\t// The duration between lim.lastEvent and r.timeToAct tells us how many tokens were reserved\n\t// after r was obtained. These tokens should not be restored.\n\trestoreTokens := float64(r.tokens) - r.limit.tokensFromDuration(r.lim.lastEvent.Sub(r.timeToAct))\n\tif restoreTokens <= 0 {\n\t\treturn\n\t}\n\t// advance time to now\n\tnow, _, tokens := r.lim.advance(now)\n\t// calculate new number of tokens\n\ttokens += restoreTokens\n\tif burst := float64(r.lim.burst); tokens > burst {\n\t\ttokens = burst\n\t}\n\t// update state\n\tr.lim.last = now\n\tr.lim.tokens = tokens\n\tif r.timeToAct == r.lim.lastEvent {\n\t\tprevEvent := r.timeToAct.Add(r.limit.durationFromTokens(float64(-r.tokens)))\n\t\tif !prevEvent.Before(now) {\n\t\t\tr.lim.lastEvent = prevEvent\n\t\t}\n\t}\n\n\treturn\n}\n\n// Reserve is shorthand for ReserveN(time.Now(), 1).\nfunc (lim *Limiter) Reserve() *Reservation {\n\treturn lim.ReserveN(time.Now(), 1)\n}\n\n// ReserveN returns a Reservation that indicates how long the caller must wait before n events happen.\n// The Limiter takes this Reservation into account when allowing future events.\n// ReserveN returns false if n exceeds the Limiter's burst size.\n// Usage example:\n//   r := lim.ReserveN(time.Now(), 1)\n//   if !r.OK() {\n//     // Not allowed to act! Did you remember to set lim.burst to be > 0 ?\n//     return\n//   }\n//   time.Sleep(r.Delay())\n//   Act()\n// Use this method if you wish to wait and slow down in accordance with the rate limit without dropping events.\n// If you need to respect a deadline or cancel the delay, use Wait instead.\n// To drop or skip events exceeding rate limit, use Allow instead.\nfunc (lim *Limiter) ReserveN(now time.Time, n int) *Reservation {\n\tr := lim.reserveN(now, n, InfDuration)\n\treturn &r\n}\n\n// Wait is shorthand for WaitN(ctx, 1).\nfunc (lim *Limiter) Wait(ctx context.Context) (err error) {\n\treturn lim.WaitN(ctx, 1)\n}\n\n// WaitN blocks until lim permits n events to happen.\n// It returns an error if n exceeds the Limiter's burst size, the Context is\n// canceled, or the expected wait time exceeds the Context's Deadline.\n// The burst limit is ignored if the rate limit is Inf.\nfunc (lim *Limiter) WaitN(ctx context.Context, n int) (err error) {\n\tif n > lim.burst && lim.limit != Inf {\n\t\treturn fmt.Errorf(\"rate: Wait(n=%d) exceeds limiter's burst %d\", n, lim.burst)\n\t}\n\t// Check if ctx is already cancelled\n\tselect {\n\tcase <-ctx.Done():\n\t\treturn ctx.Err()\n\tdefault:\n\t}\n\t// Determine wait limit\n\tnow := time.Now()\n\twaitLimit := InfDuration\n\tif deadline, ok := ctx.Deadline(); ok {\n\t\twaitLimit = deadline.Sub(now)\n\t}\n\t// Reserve\n\tr := lim.reserveN(now, n, waitLimit)\n\tif !r.ok {\n\t\treturn fmt.Errorf(\"rate: Wait(n=%d) would exceed context deadline\", n)\n\t}\n\t// Wait\n\tt := time.NewTimer(r.DelayFrom(now))\n\tdefer t.Stop()\n\tselect {\n\tcase <-t.C:\n\t\t// We can proceed.\n\t\treturn nil\n\tcase <-ctx.Done():\n\t\t// Context was canceled before we could proceed.  Cancel the\n\t\t// reservation, which may permit other events to proceed sooner.\n\t\tr.Cancel()\n\t\treturn ctx.Err()\n\t}\n}\n\n// SetLimit is shorthand for SetLimitAt(time.Now(), newLimit).\nfunc (lim *Limiter) SetLimit(newLimit Limit) {\n\tlim.SetLimitAt(time.Now(), newLimit)\n}\n\n// SetLimitAt sets a new Limit for the limiter. The new Limit, and Burst, may be violated\n// or underutilized by those which reserved (using Reserve or Wait) but did not yet act\n// before SetLimitAt was called.\nfunc (lim *Limiter) SetLimitAt(now time.Time, newLimit Limit) {\n\tlim.mu.Lock()\n\tdefer lim.mu.Unlock()\n\n\tnow, _, tokens := lim.advance(now)\n\n\tlim.last = now\n\tlim.tokens = tokens\n\tlim.limit = newLimit\n}\n\n// reserveN is a helper method for AllowN, ReserveN, and WaitN.\n// maxFutureReserve specifies the maximum reservation wait duration allowed.\n// reserveN returns Reservation, not *Reservation, to avoid allocation in AllowN and WaitN.\nfunc (lim *Limiter) reserveN(now time.Time, n int, maxFutureReserve time.Duration) Reservation {\n\tlim.mu.Lock()\n\n\tif lim.limit == Inf {\n\t\tlim.mu.Unlock()\n\t\treturn Reservation{\n\t\t\tok:        true,\n\t\t\tlim:       lim,\n\t\t\ttokens:    n,\n\t\t\ttimeToAct: now,\n\t\t}\n\t}\n\n\tnow, last, tokens := lim.advance(now)\n\n\t// Calculate the remaining number of tokens resulting from the request.\n\ttokens -= float64(n)\n\n\t// Calculate the wait duration\n\tvar waitDuration time.Duration\n\tif tokens < 0 {\n\t\twaitDuration = lim.limit.durationFromTokens(-tokens)\n\t}\n\n\t// Decide result\n\tok := n <= lim.burst && waitDuration <= maxFutureReserve\n\n\t// Prepare reservation\n\tr := Reservation{\n\t\tok:    ok,\n\t\tlim:   lim,\n\t\tlimit: lim.limit,\n\t}\n\tif ok {\n\t\tr.tokens = n\n\t\tr.timeToAct = now.Add(waitDuration)\n\t}\n\n\t// Update state\n\tif ok {\n\t\tlim.last = now\n\t\tlim.tokens = tokens\n\t\tlim.lastEvent = r.timeToAct\n\t} else {\n\t\tlim.last = last\n\t}\n\n\tlim.mu.Unlock()\n\treturn r\n}\n\n// advance calculates and returns an updated state for lim resulting from the passage of time.\n// lim is not changed.\nfunc (lim *Limiter) advance(now time.Time) (newNow time.Time, newLast time.Time, newTokens float64) {\n\tlast := lim.last\n\tif now.Before(last) {\n\t\tlast = now\n\t}\n\n\t// Avoid making delta overflow below when last is very old.\n\tmaxElapsed := lim.limit.durationFromTokens(float64(lim.burst) - lim.tokens)\n\telapsed := now.Sub(last)\n\tif elapsed > maxElapsed {\n\t\telapsed = maxElapsed\n\t}\n\n\t// Calculate the new number of tokens, due to time that passed.\n\tdelta := lim.limit.tokensFromDuration(elapsed)\n\ttokens := lim.tokens + delta\n\tif burst := float64(lim.burst); tokens > burst {\n\t\ttokens = burst\n\t}\n\n\treturn now, last, tokens\n}\n\n// durationFromTokens is a unit conversion function from the number of tokens to the duration\n// of time it takes to accumulate them at a rate of limit tokens per second.\nfunc (limit Limit) durationFromTokens(tokens float64) time.Duration {\n\tseconds := tokens / float64(limit)\n\treturn time.Nanosecond * time.Duration(1e9*seconds)\n}\n\n// tokensFromDuration is a unit conversion function from a time duration to the number of tokens\n// which could be accumulated during that duration at a rate of limit tokens per second.\nfunc (limit Limit) tokensFromDuration(d time.Duration) float64 {\n\treturn d.Seconds() * float64(limit)\n}\n"
  },
  {
    "path": "vendor/google.golang.org/api/LICENSE",
    "content": "Copyright (c) 2011 Google Inc. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "vendor/google.golang.org/api/gensupport/backoff.go",
    "content": "// Copyright 2016 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage gensupport\n\nimport (\n\t\"math/rand\"\n\t\"time\"\n)\n\n// BackoffStrategy defines the set of functions that a backoff-er must\n// implement.\ntype BackoffStrategy interface {\n\t// Pause returns the duration of the next pause and true if the operation should be\n\t// retried, or false if no further retries should be attempted.\n\tPause() (time.Duration, bool)\n\n\t// Reset restores the strategy to its initial state.\n\tReset()\n}\n\n// ExponentialBackoff performs exponential backoff as per https://en.wikipedia.org/wiki/Exponential_backoff.\n// The initial pause time is given by Base.\n// Once the total pause time exceeds Max, Pause will indicate no further retries.\ntype ExponentialBackoff struct {\n\tBase  time.Duration\n\tMax   time.Duration\n\ttotal time.Duration\n\tn     uint\n}\n\n// Pause returns the amount of time the caller should wait.\nfunc (eb *ExponentialBackoff) Pause() (time.Duration, bool) {\n\tif eb.total > eb.Max {\n\t\treturn 0, false\n\t}\n\n\t// The next pause is selected from randomly from [0, 2^n * Base).\n\td := time.Duration(rand.Int63n((1 << eb.n) * int64(eb.Base)))\n\teb.total += d\n\teb.n++\n\treturn d, true\n}\n\n// Reset resets the backoff strategy such that the next Pause call will begin\n// counting from the start. It is not safe to call concurrently with Pause.\nfunc (eb *ExponentialBackoff) Reset() {\n\teb.n = 0\n\teb.total = 0\n}\n"
  },
  {
    "path": "vendor/google.golang.org/api/gensupport/buffer.go",
    "content": "// Copyright 2016 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage gensupport\n\nimport (\n\t\"bytes\"\n\t\"io\"\n\n\t\"google.golang.org/api/googleapi\"\n)\n\n// MediaBuffer buffers data from an io.Reader to support uploading media in\n// retryable chunks. It should be created with NewMediaBuffer.\ntype MediaBuffer struct {\n\tmedia io.Reader\n\n\tchunk []byte // The current chunk which is pending upload.  The capacity is the chunk size.\n\terr   error  // Any error generated when populating chunk by reading media.\n\n\t// The absolute position of chunk in the underlying media.\n\toff int64\n}\n\n// NewMediaBuffer initializes a MediaBuffer.\nfunc NewMediaBuffer(media io.Reader, chunkSize int) *MediaBuffer {\n\treturn &MediaBuffer{media: media, chunk: make([]byte, 0, chunkSize)}\n}\n\n// Chunk returns the current buffered chunk, the offset in the underlying media\n// from which the chunk is drawn, and the size of the chunk.\n// Successive calls to Chunk return the same chunk between calls to Next.\nfunc (mb *MediaBuffer) Chunk() (chunk io.Reader, off int64, size int, err error) {\n\t// There may already be data in chunk if Next has not been called since the previous call to Chunk.\n\tif mb.err == nil && len(mb.chunk) == 0 {\n\t\tmb.err = mb.loadChunk()\n\t}\n\treturn bytes.NewReader(mb.chunk), mb.off, len(mb.chunk), mb.err\n}\n\n// loadChunk will read from media into chunk, up to the capacity of chunk.\nfunc (mb *MediaBuffer) loadChunk() error {\n\tbufSize := cap(mb.chunk)\n\tmb.chunk = mb.chunk[:bufSize]\n\n\tread := 0\n\tvar err error\n\tfor err == nil && read < bufSize {\n\t\tvar n int\n\t\tn, err = mb.media.Read(mb.chunk[read:])\n\t\tread += n\n\t}\n\tmb.chunk = mb.chunk[:read]\n\treturn err\n}\n\n// Next advances to the next chunk, which will be returned by the next call to Chunk.\n// Calls to Next without a corresponding prior call to Chunk will have no effect.\nfunc (mb *MediaBuffer) Next() {\n\tmb.off += int64(len(mb.chunk))\n\tmb.chunk = mb.chunk[0:0]\n}\n\ntype readerTyper struct {\n\tio.Reader\n\tgoogleapi.ContentTyper\n}\n\n// ReaderAtToReader adapts a ReaderAt to be used as a Reader.\n// If ra implements googleapi.ContentTyper, then the returned reader\n// will also implement googleapi.ContentTyper, delegating to ra.\nfunc ReaderAtToReader(ra io.ReaderAt, size int64) io.Reader {\n\tr := io.NewSectionReader(ra, 0, size)\n\tif typer, ok := ra.(googleapi.ContentTyper); ok {\n\t\treturn readerTyper{r, typer}\n\t}\n\treturn r\n}\n"
  },
  {
    "path": "vendor/google.golang.org/api/gensupport/doc.go",
    "content": "// Copyright 2016 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package gensupport is an internal implementation detail used by code\n// generated by the google-api-go-generator tool.\n//\n// This package may be modified at any time without regard for backwards\n// compatibility. It should not be used directly by API users.\npackage gensupport\n"
  },
  {
    "path": "vendor/google.golang.org/api/gensupport/header.go",
    "content": "// Copyright 2017 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage gensupport\n\nimport (\n\t\"fmt\"\n\t\"runtime\"\n\t\"strings\"\n)\n\n// GoogleClientHeader returns the value to use for the x-goog-api-client\n// header, which is used internally by Google.\nfunc GoogleClientHeader(generatorVersion, clientElement string) string {\n\telts := []string{\"gl-go/\" + strings.Replace(runtime.Version(), \" \", \"_\", -1)}\n\tif clientElement != \"\" {\n\t\telts = append(elts, clientElement)\n\t}\n\telts = append(elts, fmt.Sprintf(\"gdcl/%s\", generatorVersion))\n\treturn strings.Join(elts, \" \")\n}\n"
  },
  {
    "path": "vendor/google.golang.org/api/gensupport/json.go",
    "content": "// Copyright 2015 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage gensupport\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"strings\"\n)\n\n// MarshalJSON returns a JSON encoding of schema containing only selected fields.\n// A field is selected if any of the following is true:\n//   * it has a non-empty value\n//   * its field name is present in forceSendFields and it is not a nil pointer or nil interface\n//   * its field name is present in nullFields.\n// The JSON key for each selected field is taken from the field's json: struct tag.\nfunc MarshalJSON(schema interface{}, forceSendFields, nullFields []string) ([]byte, error) {\n\tif len(forceSendFields) == 0 && len(nullFields) == 0 {\n\t\treturn json.Marshal(schema)\n\t}\n\n\tmustInclude := make(map[string]bool)\n\tfor _, f := range forceSendFields {\n\t\tmustInclude[f] = true\n\t}\n\tuseNull := make(map[string]bool)\n\tuseNullMaps := make(map[string]map[string]bool)\n\tfor _, nf := range nullFields {\n\t\tparts := strings.SplitN(nf, \".\", 2)\n\t\tfield := parts[0]\n\t\tif len(parts) == 1 {\n\t\t\tuseNull[field] = true\n\t\t} else {\n\t\t\tif useNullMaps[field] == nil {\n\t\t\t\tuseNullMaps[field] = map[string]bool{}\n\t\t\t}\n\t\t\tuseNullMaps[field][parts[1]] = true\n\t\t}\n\t}\n\n\tdataMap, err := schemaToMap(schema, mustInclude, useNull, useNullMaps)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn json.Marshal(dataMap)\n}\n\nfunc schemaToMap(schema interface{}, mustInclude, useNull map[string]bool, useNullMaps map[string]map[string]bool) (map[string]interface{}, error) {\n\tm := make(map[string]interface{})\n\ts := reflect.ValueOf(schema)\n\tst := s.Type()\n\n\tfor i := 0; i < s.NumField(); i++ {\n\t\tjsonTag := st.Field(i).Tag.Get(\"json\")\n\t\tif jsonTag == \"\" {\n\t\t\tcontinue\n\t\t}\n\t\ttag, err := parseJSONTag(jsonTag)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif tag.ignore {\n\t\t\tcontinue\n\t\t}\n\n\t\tv := s.Field(i)\n\t\tf := st.Field(i)\n\n\t\tif useNull[f.Name] {\n\t\t\tif !isEmptyValue(v) {\n\t\t\t\treturn nil, fmt.Errorf(\"field %q in NullFields has non-empty value\", f.Name)\n\t\t\t}\n\t\t\tm[tag.apiName] = nil\n\t\t\tcontinue\n\t\t}\n\n\t\tif !includeField(v, f, mustInclude) {\n\t\t\tcontinue\n\t\t}\n\n\t\t// If map fields are explicitly set to null, use a map[string]interface{}.\n\t\tif f.Type.Kind() == reflect.Map && useNullMaps[f.Name] != nil {\n\t\t\tms, ok := v.Interface().(map[string]string)\n\t\t\tif !ok {\n\t\t\t\treturn nil, fmt.Errorf(\"field %q has keys in NullFields but is not a map[string]string\", f.Name)\n\t\t\t}\n\t\t\tmi := map[string]interface{}{}\n\t\t\tfor k, v := range ms {\n\t\t\t\tmi[k] = v\n\t\t\t}\n\t\t\tfor k := range useNullMaps[f.Name] {\n\t\t\t\tmi[k] = nil\n\t\t\t}\n\t\t\tm[tag.apiName] = mi\n\t\t\tcontinue\n\t\t}\n\n\t\t// nil maps are treated as empty maps.\n\t\tif f.Type.Kind() == reflect.Map && v.IsNil() {\n\t\t\tm[tag.apiName] = map[string]string{}\n\t\t\tcontinue\n\t\t}\n\n\t\t// nil slices are treated as empty slices.\n\t\tif f.Type.Kind() == reflect.Slice && v.IsNil() {\n\t\t\tm[tag.apiName] = []bool{}\n\t\t\tcontinue\n\t\t}\n\n\t\tif tag.stringFormat {\n\t\t\tm[tag.apiName] = formatAsString(v, f.Type.Kind())\n\t\t} else {\n\t\t\tm[tag.apiName] = v.Interface()\n\t\t}\n\t}\n\treturn m, nil\n}\n\n// formatAsString returns a string representation of v, dereferencing it first if possible.\nfunc formatAsString(v reflect.Value, kind reflect.Kind) string {\n\tif kind == reflect.Ptr && !v.IsNil() {\n\t\tv = v.Elem()\n\t}\n\n\treturn fmt.Sprintf(\"%v\", v.Interface())\n}\n\n// jsonTag represents a restricted version of the struct tag format used by encoding/json.\n// It is used to describe the JSON encoding of fields in a Schema struct.\ntype jsonTag struct {\n\tapiName      string\n\tstringFormat bool\n\tignore       bool\n}\n\n// parseJSONTag parses a restricted version of the struct tag format used by encoding/json.\n// The format of the tag must match that generated by the Schema.writeSchemaStruct method\n// in the api generator.\nfunc parseJSONTag(val string) (jsonTag, error) {\n\tif val == \"-\" {\n\t\treturn jsonTag{ignore: true}, nil\n\t}\n\n\tvar tag jsonTag\n\n\ti := strings.Index(val, \",\")\n\tif i == -1 || val[:i] == \"\" {\n\t\treturn tag, fmt.Errorf(\"malformed json tag: %s\", val)\n\t}\n\n\ttag = jsonTag{\n\t\tapiName: val[:i],\n\t}\n\n\tswitch val[i+1:] {\n\tcase \"omitempty\":\n\tcase \"omitempty,string\":\n\t\ttag.stringFormat = true\n\tdefault:\n\t\treturn tag, fmt.Errorf(\"malformed json tag: %s\", val)\n\t}\n\n\treturn tag, nil\n}\n\n// Reports whether the struct field \"f\" with value \"v\" should be included in JSON output.\nfunc includeField(v reflect.Value, f reflect.StructField, mustInclude map[string]bool) bool {\n\t// The regular JSON encoding of a nil pointer is \"null\", which means \"delete this field\".\n\t// Therefore, we could enable field deletion by honoring pointer fields' presence in the mustInclude set.\n\t// However, many fields are not pointers, so there would be no way to delete these fields.\n\t// Rather than partially supporting field deletion, we ignore mustInclude for nil pointer fields.\n\t// Deletion will be handled by a separate mechanism.\n\tif f.Type.Kind() == reflect.Ptr && v.IsNil() {\n\t\treturn false\n\t}\n\n\t// The \"any\" type is represented as an interface{}.  If this interface\n\t// is nil, there is no reasonable representation to send.  We ignore\n\t// these fields, for the same reasons as given above for pointers.\n\tif f.Type.Kind() == reflect.Interface && v.IsNil() {\n\t\treturn false\n\t}\n\n\treturn mustInclude[f.Name] || !isEmptyValue(v)\n}\n\n// isEmptyValue reports whether v is the empty value for its type.  This\n// implementation is based on that of the encoding/json package, but its\n// correctness does not depend on it being identical. What's important is that\n// this function return false in situations where v should not be sent as part\n// of a PATCH operation.\nfunc isEmptyValue(v reflect.Value) bool {\n\tswitch v.Kind() {\n\tcase reflect.Array, reflect.Map, reflect.Slice, reflect.String:\n\t\treturn v.Len() == 0\n\tcase reflect.Bool:\n\t\treturn !v.Bool()\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\treturn v.Int() == 0\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:\n\t\treturn v.Uint() == 0\n\tcase reflect.Float32, reflect.Float64:\n\t\treturn v.Float() == 0\n\tcase reflect.Interface, reflect.Ptr:\n\t\treturn v.IsNil()\n\t}\n\treturn false\n}\n"
  },
  {
    "path": "vendor/google.golang.org/api/gensupport/jsonfloat.go",
    "content": "// Copyright 2016 Google LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage gensupport\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"math\"\n)\n\n// JSONFloat64 is a float64 that supports proper unmarshaling of special float\n// values in JSON, according to\n// https://developers.google.com/protocol-buffers/docs/proto3#json. Although\n// that is a proto-to-JSON spec, it applies to all Google APIs.\n//\n// The jsonpb package\n// (https://github.com/golang/protobuf/blob/master/jsonpb/jsonpb.go) has\n// similar functionality, but only for direct translation from proto messages\n// to JSON.\ntype JSONFloat64 float64\n\nfunc (f *JSONFloat64) UnmarshalJSON(data []byte) error {\n\tvar ff float64\n\tif err := json.Unmarshal(data, &ff); err == nil {\n\t\t*f = JSONFloat64(ff)\n\t\treturn nil\n\t}\n\tvar s string\n\tif err := json.Unmarshal(data, &s); err == nil {\n\t\tswitch s {\n\t\tcase \"NaN\":\n\t\t\tff = math.NaN()\n\t\tcase \"Infinity\":\n\t\t\tff = math.Inf(1)\n\t\tcase \"-Infinity\":\n\t\t\tff = math.Inf(-1)\n\t\tdefault:\n\t\t\treturn fmt.Errorf(\"google.golang.org/api/internal: bad float string %q\", s)\n\t\t}\n\t\t*f = JSONFloat64(ff)\n\t\treturn nil\n\t}\n\treturn errors.New(\"google.golang.org/api/internal: data not float or string\")\n}\n"
  },
  {
    "path": "vendor/google.golang.org/api/gensupport/media.go",
    "content": "// Copyright 2016 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage gensupport\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"mime\"\n\t\"mime/multipart\"\n\t\"net/http\"\n\t\"net/textproto\"\n\t\"strings\"\n\t\"sync\"\n\n\t\"google.golang.org/api/googleapi\"\n)\n\nconst sniffBuffSize = 512\n\nfunc newContentSniffer(r io.Reader) *contentSniffer {\n\treturn &contentSniffer{r: r}\n}\n\n// contentSniffer wraps a Reader, and reports the content type determined by sniffing up to 512 bytes from the Reader.\ntype contentSniffer struct {\n\tr     io.Reader\n\tstart []byte // buffer for the sniffed bytes.\n\terr   error  // set to any error encountered while reading bytes to be sniffed.\n\n\tctype   string // set on first sniff.\n\tsniffed bool   // set to true on first sniff.\n}\n\nfunc (cs *contentSniffer) Read(p []byte) (n int, err error) {\n\t// Ensure that the content type is sniffed before any data is consumed from Reader.\n\t_, _ = cs.ContentType()\n\n\tif len(cs.start) > 0 {\n\t\tn := copy(p, cs.start)\n\t\tcs.start = cs.start[n:]\n\t\treturn n, nil\n\t}\n\n\t// We may have read some bytes into start while sniffing, even if the read ended in an error.\n\t// We should first return those bytes, then the error.\n\tif cs.err != nil {\n\t\treturn 0, cs.err\n\t}\n\n\t// Now we have handled all bytes that were buffered while sniffing.  Now just delegate to the underlying reader.\n\treturn cs.r.Read(p)\n}\n\n// ContentType returns the sniffed content type, and whether the content type was succesfully sniffed.\nfunc (cs *contentSniffer) ContentType() (string, bool) {\n\tif cs.sniffed {\n\t\treturn cs.ctype, cs.ctype != \"\"\n\t}\n\tcs.sniffed = true\n\t// If ReadAll hits EOF, it returns err==nil.\n\tcs.start, cs.err = ioutil.ReadAll(io.LimitReader(cs.r, sniffBuffSize))\n\n\t// Don't try to detect the content type based on possibly incomplete data.\n\tif cs.err != nil {\n\t\treturn \"\", false\n\t}\n\n\tcs.ctype = http.DetectContentType(cs.start)\n\treturn cs.ctype, true\n}\n\n// DetermineContentType determines the content type of the supplied reader.\n// If the content type is already known, it can be specified via ctype.\n// Otherwise, the content of media will be sniffed to determine the content type.\n// If media implements googleapi.ContentTyper (deprecated), this will be used\n// instead of sniffing the content.\n// After calling DetectContentType the caller must not perform further reads on\n// media, but rather read from the Reader that is returned.\nfunc DetermineContentType(media io.Reader, ctype string) (io.Reader, string) {\n\t// Note: callers could avoid calling DetectContentType if ctype != \"\",\n\t// but doing the check inside this function reduces the amount of\n\t// generated code.\n\tif ctype != \"\" {\n\t\treturn media, ctype\n\t}\n\n\t// For backwards compatability, allow clients to set content\n\t// type by providing a ContentTyper for media.\n\tif typer, ok := media.(googleapi.ContentTyper); ok {\n\t\treturn media, typer.ContentType()\n\t}\n\n\tsniffer := newContentSniffer(media)\n\tif ctype, ok := sniffer.ContentType(); ok {\n\t\treturn sniffer, ctype\n\t}\n\t// If content type could not be sniffed, reads from sniffer will eventually fail with an error.\n\treturn sniffer, \"\"\n}\n\ntype typeReader struct {\n\tio.Reader\n\ttyp string\n}\n\n// multipartReader combines the contents of multiple readers to create a multipart/related HTTP body.\n// Close must be called if reads from the multipartReader are abandoned before reaching EOF.\ntype multipartReader struct {\n\tpr       *io.PipeReader\n\tctype    string\n\tmu       sync.Mutex\n\tpipeOpen bool\n}\n\n// boundary optionally specifies the MIME boundary\nfunc newMultipartReader(parts []typeReader, boundary string) *multipartReader {\n\tmp := &multipartReader{pipeOpen: true}\n\tvar pw *io.PipeWriter\n\tmp.pr, pw = io.Pipe()\n\tmpw := multipart.NewWriter(pw)\n\tif boundary != \"\" {\n\t\tmpw.SetBoundary(boundary)\n\t}\n\tmp.ctype = \"multipart/related; boundary=\" + mpw.Boundary()\n\tgo func() {\n\t\tfor _, part := range parts {\n\t\t\tw, err := mpw.CreatePart(typeHeader(part.typ))\n\t\t\tif err != nil {\n\t\t\t\tmpw.Close()\n\t\t\t\tpw.CloseWithError(fmt.Errorf(\"googleapi: CreatePart failed: %v\", err))\n\t\t\t\treturn\n\t\t\t}\n\t\t\t_, err = io.Copy(w, part.Reader)\n\t\t\tif err != nil {\n\t\t\t\tmpw.Close()\n\t\t\t\tpw.CloseWithError(fmt.Errorf(\"googleapi: Copy failed: %v\", err))\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\n\t\tmpw.Close()\n\t\tpw.Close()\n\t}()\n\treturn mp\n}\n\nfunc (mp *multipartReader) Read(data []byte) (n int, err error) {\n\treturn mp.pr.Read(data)\n}\n\nfunc (mp *multipartReader) Close() error {\n\tmp.mu.Lock()\n\tif !mp.pipeOpen {\n\t\tmp.mu.Unlock()\n\t\treturn nil\n\t}\n\tmp.pipeOpen = false\n\tmp.mu.Unlock()\n\treturn mp.pr.Close()\n}\n\n// CombineBodyMedia combines a json body with media content to create a multipart/related HTTP body.\n// It returns a ReadCloser containing the combined body, and the overall \"multipart/related\" content type, with random boundary.\n//\n// The caller must call Close on the returned ReadCloser if reads are abandoned before reaching EOF.\nfunc CombineBodyMedia(body io.Reader, bodyContentType string, media io.Reader, mediaContentType string) (io.ReadCloser, string) {\n\treturn combineBodyMedia(body, bodyContentType, media, mediaContentType, \"\")\n}\n\n// combineBodyMedia is CombineBodyMedia but with an optional mimeBoundary field.\nfunc combineBodyMedia(body io.Reader, bodyContentType string, media io.Reader, mediaContentType, mimeBoundary string) (io.ReadCloser, string) {\n\tmp := newMultipartReader([]typeReader{\n\t\t{body, bodyContentType},\n\t\t{media, mediaContentType},\n\t}, mimeBoundary)\n\treturn mp, mp.ctype\n}\n\nfunc typeHeader(contentType string) textproto.MIMEHeader {\n\th := make(textproto.MIMEHeader)\n\tif contentType != \"\" {\n\t\th.Set(\"Content-Type\", contentType)\n\t}\n\treturn h\n}\n\n// PrepareUpload determines whether the data in the supplied reader should be\n// uploaded in a single request, or in sequential chunks.\n// chunkSize is the size of the chunk that media should be split into.\n//\n// If chunkSize is zero, media is returned as the first value, and the other\n// two return values are nil, true.\n//\n// Otherwise, a MediaBuffer is returned, along with a bool indicating whether the\n// contents of media fit in a single chunk.\n//\n// After PrepareUpload has been called, media should no longer be used: the\n// media content should be accessed via one of the return values.\nfunc PrepareUpload(media io.Reader, chunkSize int) (r io.Reader, mb *MediaBuffer, singleChunk bool) {\n\tif chunkSize == 0 { // do not chunk\n\t\treturn media, nil, true\n\t}\n\tmb = NewMediaBuffer(media, chunkSize)\n\t_, _, _, err := mb.Chunk()\n\t// If err is io.EOF, we can upload this in a single request. Otherwise, err is\n\t// either nil or a non-EOF error. If it is the latter, then the next call to\n\t// mb.Chunk will return the same error. Returning a MediaBuffer ensures that this\n\t// error will be handled at some point.\n\treturn nil, mb, err == io.EOF\n}\n\n// MediaInfo holds information for media uploads. It is intended for use by generated\n// code only.\ntype MediaInfo struct {\n\t// At most one of Media and MediaBuffer will be set.\n\tmedia           io.Reader\n\tbuffer          *MediaBuffer\n\tsingleChunk     bool\n\tmType           string\n\tsize            int64 // mediaSize, if known.  Used only for calls to progressUpdater_.\n\tprogressUpdater googleapi.ProgressUpdater\n}\n\n// NewInfoFromMedia should be invoked from the Media method of a call. It returns a\n// MediaInfo populated with chunk size and content type, and a reader or MediaBuffer\n// if needed.\nfunc NewInfoFromMedia(r io.Reader, options []googleapi.MediaOption) *MediaInfo {\n\tmi := &MediaInfo{}\n\topts := googleapi.ProcessMediaOptions(options)\n\tif !opts.ForceEmptyContentType {\n\t\tr, mi.mType = DetermineContentType(r, opts.ContentType)\n\t}\n\tmi.media, mi.buffer, mi.singleChunk = PrepareUpload(r, opts.ChunkSize)\n\treturn mi\n}\n\n// NewInfoFromResumableMedia should be invoked from the ResumableMedia method of a\n// call. It returns a MediaInfo using the given reader, size and media type.\nfunc NewInfoFromResumableMedia(r io.ReaderAt, size int64, mediaType string) *MediaInfo {\n\trdr := ReaderAtToReader(r, size)\n\trdr, mType := DetermineContentType(rdr, mediaType)\n\treturn &MediaInfo{\n\t\tsize:        size,\n\t\tmType:       mType,\n\t\tbuffer:      NewMediaBuffer(rdr, googleapi.DefaultUploadChunkSize),\n\t\tmedia:       nil,\n\t\tsingleChunk: false,\n\t}\n}\n\n// SetProgressUpdater sets the progress updater for the media info.\nfunc (mi *MediaInfo) SetProgressUpdater(pu googleapi.ProgressUpdater) {\n\tif mi != nil {\n\t\tmi.progressUpdater = pu\n\t}\n}\n\n// UploadType determines the type of upload: a single request, or a resumable\n// series of requests.\nfunc (mi *MediaInfo) UploadType() string {\n\tif mi.singleChunk {\n\t\treturn \"multipart\"\n\t}\n\treturn \"resumable\"\n}\n\n// UploadRequest sets up an HTTP request for media upload. It adds headers\n// as necessary, and returns a replacement for the body and a function for http.Request.GetBody.\nfunc (mi *MediaInfo) UploadRequest(reqHeaders http.Header, body io.Reader) (newBody io.Reader, getBody func() (io.ReadCloser, error), cleanup func()) {\n\tcleanup = func() {}\n\tif mi == nil {\n\t\treturn body, nil, cleanup\n\t}\n\tvar media io.Reader\n\tif mi.media != nil {\n\t\t// This only happens when the caller has turned off chunking. In that\n\t\t// case, we write all of media in a single non-retryable request.\n\t\tmedia = mi.media\n\t} else if mi.singleChunk {\n\t\t// The data fits in a single chunk, which has now been read into the MediaBuffer.\n\t\t// We obtain that chunk so we can write it in a single request. The request can\n\t\t// be retried because the data is stored in the MediaBuffer.\n\t\tmedia, _, _, _ = mi.buffer.Chunk()\n\t}\n\tif media != nil {\n\t\tfb := readerFunc(body)\n\t\tfm := readerFunc(media)\n\t\tcombined, ctype := CombineBodyMedia(body, \"application/json\", media, mi.mType)\n\t\tif fb != nil && fm != nil {\n\t\t\tgetBody = func() (io.ReadCloser, error) {\n\t\t\t\trb := ioutil.NopCloser(fb())\n\t\t\t\trm := ioutil.NopCloser(fm())\n\t\t\t\tvar mimeBoundary string\n\t\t\t\tif _, params, err := mime.ParseMediaType(ctype); err == nil {\n\t\t\t\t\tmimeBoundary = params[\"boundary\"]\n\t\t\t\t}\n\t\t\t\tr, _ := combineBodyMedia(rb, \"application/json\", rm, mi.mType, mimeBoundary)\n\t\t\t\treturn r, nil\n\t\t\t}\n\t\t}\n\t\tcleanup = func() { combined.Close() }\n\t\treqHeaders.Set(\"Content-Type\", ctype)\n\t\tbody = combined\n\t}\n\tif mi.buffer != nil && mi.mType != \"\" && !mi.singleChunk {\n\t\treqHeaders.Set(\"X-Upload-Content-Type\", mi.mType)\n\t}\n\treturn body, getBody, cleanup\n}\n\n// readerFunc returns a function that always returns an io.Reader that has the same\n// contents as r, provided that can be done without consuming r. Otherwise, it\n// returns nil.\n// See http.NewRequest (in net/http/request.go).\nfunc readerFunc(r io.Reader) func() io.Reader {\n\tswitch r := r.(type) {\n\tcase *bytes.Buffer:\n\t\tbuf := r.Bytes()\n\t\treturn func() io.Reader { return bytes.NewReader(buf) }\n\tcase *bytes.Reader:\n\t\tsnapshot := *r\n\t\treturn func() io.Reader { r := snapshot; return &r }\n\tcase *strings.Reader:\n\t\tsnapshot := *r\n\t\treturn func() io.Reader { r := snapshot; return &r }\n\tdefault:\n\t\treturn nil\n\t}\n}\n\n// ResumableUpload returns an appropriately configured ResumableUpload value if the\n// upload is resumable, or nil otherwise.\nfunc (mi *MediaInfo) ResumableUpload(locURI string) *ResumableUpload {\n\tif mi == nil || mi.singleChunk {\n\t\treturn nil\n\t}\n\treturn &ResumableUpload{\n\t\tURI:       locURI,\n\t\tMedia:     mi.buffer,\n\t\tMediaType: mi.mType,\n\t\tCallback: func(curr int64) {\n\t\t\tif mi.progressUpdater != nil {\n\t\t\t\tmi.progressUpdater(curr, mi.size)\n\t\t\t}\n\t\t},\n\t}\n}\n\n// SetGetBody sets the GetBody field of req to f. This was once needed\n// to gracefully support Go 1.7 and earlier which didn't have that\n// field.\n//\n// Deprecated: the code generator no longer uses this as of\n// 2019-02-19. Nothing else should be calling this anyway, but we\n// won't delete this immediately; it will be deleted in as early as 6\n// months.\nfunc SetGetBody(req *http.Request, f func() (io.ReadCloser, error)) {\n\treq.GetBody = f\n}\n"
  },
  {
    "path": "vendor/google.golang.org/api/gensupport/params.go",
    "content": "// Copyright 2015 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage gensupport\n\nimport (\n\t\"net/url\"\n\n\t\"google.golang.org/api/googleapi\"\n)\n\n// URLParams is a simplified replacement for url.Values\n// that safely builds up URL parameters for encoding.\ntype URLParams map[string][]string\n\n// Get returns the first value for the given key, or \"\".\nfunc (u URLParams) Get(key string) string {\n\tvs := u[key]\n\tif len(vs) == 0 {\n\t\treturn \"\"\n\t}\n\treturn vs[0]\n}\n\n// Set sets the key to value.\n// It replaces any existing values.\nfunc (u URLParams) Set(key, value string) {\n\tu[key] = []string{value}\n}\n\n// SetMulti sets the key to an array of values.\n// It replaces any existing values.\n// Note that values must not be modified after calling SetMulti\n// so the caller is responsible for making a copy if necessary.\nfunc (u URLParams) SetMulti(key string, values []string) {\n\tu[key] = values\n}\n\n// Encode encodes the values into ``URL encoded'' form\n// (\"bar=baz&foo=quux\") sorted by key.\nfunc (u URLParams) Encode() string {\n\treturn url.Values(u).Encode()\n}\n\n// SetOptions sets the URL params and any additional call options.\nfunc SetOptions(u URLParams, opts ...googleapi.CallOption) {\n\tfor _, o := range opts {\n\t\tu.Set(o.Get())\n\t}\n}\n"
  },
  {
    "path": "vendor/google.golang.org/api/gensupport/resumable.go",
    "content": "// Copyright 2016 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage gensupport\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"sync\"\n\t\"time\"\n)\n\nconst (\n\t// statusTooManyRequests is returned by the storage API if the\n\t// per-project limits have been temporarily exceeded. The request\n\t// should be retried.\n\t// https://cloud.google.com/storage/docs/json_api/v1/status-codes#standardcodes\n\tstatusTooManyRequests = 429\n)\n\n// ResumableUpload is used by the generated APIs to provide resumable uploads.\n// It is not used by developers directly.\ntype ResumableUpload struct {\n\tClient *http.Client\n\t// URI is the resumable resource destination provided by the server after specifying \"&uploadType=resumable\".\n\tURI       string\n\tUserAgent string // User-Agent for header of the request\n\t// Media is the object being uploaded.\n\tMedia *MediaBuffer\n\t// MediaType defines the media type, e.g. \"image/jpeg\".\n\tMediaType string\n\n\tmu       sync.Mutex // guards progress\n\tprogress int64      // number of bytes uploaded so far\n\n\t// Callback is an optional function that will be periodically called with the cumulative number of bytes uploaded.\n\tCallback func(int64)\n\n\t// If not specified, a default exponential backoff strategy will be used.\n\tBackoff BackoffStrategy\n}\n\n// Progress returns the number of bytes uploaded at this point.\nfunc (rx *ResumableUpload) Progress() int64 {\n\trx.mu.Lock()\n\tdefer rx.mu.Unlock()\n\treturn rx.progress\n}\n\n// doUploadRequest performs a single HTTP request to upload data.\n// off specifies the offset in rx.Media from which data is drawn.\n// size is the number of bytes in data.\n// final specifies whether data is the final chunk to be uploaded.\nfunc (rx *ResumableUpload) doUploadRequest(ctx context.Context, data io.Reader, off, size int64, final bool) (*http.Response, error) {\n\treq, err := http.NewRequest(\"POST\", rx.URI, data)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treq.ContentLength = size\n\tvar contentRange string\n\tif final {\n\t\tif size == 0 {\n\t\t\tcontentRange = fmt.Sprintf(\"bytes */%v\", off)\n\t\t} else {\n\t\t\tcontentRange = fmt.Sprintf(\"bytes %v-%v/%v\", off, off+size-1, off+size)\n\t\t}\n\t} else {\n\t\tcontentRange = fmt.Sprintf(\"bytes %v-%v/*\", off, off+size-1)\n\t}\n\treq.Header.Set(\"Content-Range\", contentRange)\n\treq.Header.Set(\"Content-Type\", rx.MediaType)\n\treq.Header.Set(\"User-Agent\", rx.UserAgent)\n\n\t// Google's upload endpoint uses status code 308 for a\n\t// different purpose than the \"308 Permanent Redirect\"\n\t// since-standardized in RFC 7238. Because of the conflict in\n\t// semantics, Google added this new request header which\n\t// causes it to not use \"308\" and instead reply with 200 OK\n\t// and sets the upload-specific \"X-HTTP-Status-Code-Override:\n\t// 308\" response header.\n\treq.Header.Set(\"X-GUploader-No-308\", \"yes\")\n\n\treturn SendRequest(ctx, rx.Client, req)\n}\n\nfunc statusResumeIncomplete(resp *http.Response) bool {\n\t// This is how the server signals \"status resume incomplete\"\n\t// when X-GUploader-No-308 is set to \"yes\":\n\treturn resp != nil && resp.Header.Get(\"X-Http-Status-Code-Override\") == \"308\"\n}\n\n// reportProgress calls a user-supplied callback to report upload progress.\n// If old==updated, the callback is not called.\nfunc (rx *ResumableUpload) reportProgress(old, updated int64) {\n\tif updated-old == 0 {\n\t\treturn\n\t}\n\trx.mu.Lock()\n\trx.progress = updated\n\trx.mu.Unlock()\n\tif rx.Callback != nil {\n\t\trx.Callback(updated)\n\t}\n}\n\n// transferChunk performs a single HTTP request to upload a single chunk from rx.Media.\nfunc (rx *ResumableUpload) transferChunk(ctx context.Context) (*http.Response, error) {\n\tchunk, off, size, err := rx.Media.Chunk()\n\n\tdone := err == io.EOF\n\tif !done && err != nil {\n\t\treturn nil, err\n\t}\n\n\tres, err := rx.doUploadRequest(ctx, chunk, off, int64(size), done)\n\tif err != nil {\n\t\treturn res, err\n\t}\n\n\t// We sent \"X-GUploader-No-308: yes\" (see comment elsewhere in\n\t// this file), so we don't expect to get a 308.\n\tif res.StatusCode == 308 {\n\t\treturn nil, errors.New(\"unexpected 308 response status code\")\n\t}\n\n\tif res.StatusCode == http.StatusOK {\n\t\trx.reportProgress(off, off+int64(size))\n\t}\n\n\tif statusResumeIncomplete(res) {\n\t\trx.Media.Next()\n\t}\n\treturn res, nil\n}\n\nfunc contextDone(ctx context.Context) bool {\n\tselect {\n\tcase <-ctx.Done():\n\t\treturn true\n\tdefault:\n\t\treturn false\n\t}\n}\n\n// Upload starts the process of a resumable upload with a cancellable context.\n// It retries using the provided back off strategy until cancelled or the\n// strategy indicates to stop retrying.\n// It is called from the auto-generated API code and is not visible to the user.\n// Before sending an HTTP request, Upload calls any registered hook functions,\n// and calls the returned functions after the request returns (see send.go).\n// rx is private to the auto-generated API code.\n// Exactly one of resp or err will be nil.  If resp is non-nil, the caller must call resp.Body.Close.\nfunc (rx *ResumableUpload) Upload(ctx context.Context) (resp *http.Response, err error) {\n\tvar pause time.Duration\n\tbackoff := rx.Backoff\n\tif backoff == nil {\n\t\tbackoff = DefaultBackoffStrategy()\n\t}\n\n\tfor {\n\t\t// Ensure that we return in the case of cancelled context, even if pause is 0.\n\t\tif contextDone(ctx) {\n\t\t\treturn nil, ctx.Err()\n\t\t}\n\t\tselect {\n\t\tcase <-ctx.Done():\n\t\t\treturn nil, ctx.Err()\n\t\tcase <-time.After(pause):\n\t\t}\n\n\t\tresp, err = rx.transferChunk(ctx)\n\n\t\tvar status int\n\t\tif resp != nil {\n\t\t\tstatus = resp.StatusCode\n\t\t}\n\n\t\t// Check if we should retry the request.\n\t\tif shouldRetry(status, err) {\n\t\t\tvar retry bool\n\t\t\tpause, retry = backoff.Pause()\n\t\t\tif retry {\n\t\t\t\tif resp != nil && resp.Body != nil {\n\t\t\t\t\tresp.Body.Close()\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\t// If the chunk was uploaded successfully, but there's still\n\t\t// more to go, upload the next chunk without any delay.\n\t\tif statusResumeIncomplete(resp) {\n\t\t\tpause = 0\n\t\t\tbackoff.Reset()\n\t\t\tresp.Body.Close()\n\t\t\tcontinue\n\t\t}\n\n\t\t// It's possible for err and resp to both be non-nil here, but we expose a simpler\n\t\t// contract to our callers: exactly one of resp and err will be non-nil.  This means\n\t\t// that any response body must be closed here before returning a non-nil error.\n\t\tif err != nil {\n\t\t\tif resp != nil && resp.Body != nil {\n\t\t\t\tresp.Body.Close()\n\t\t\t}\n\t\t\treturn nil, err\n\t\t}\n\n\t\treturn resp, nil\n\t}\n}\n"
  },
  {
    "path": "vendor/google.golang.org/api/gensupport/retry.go",
    "content": "// Copyright 2017 Google LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage gensupport\n\nimport (\n\t\"context\"\n\t\"io\"\n\t\"net\"\n\t\"net/http\"\n\t\"time\"\n)\n\n// Retry invokes the given function, retrying it multiple times if the connection failed or\n// the HTTP status response indicates the request should be attempted again. ctx may be nil.\nfunc Retry(ctx context.Context, f func() (*http.Response, error), backoff BackoffStrategy) (*http.Response, error) {\n\tfor {\n\t\tresp, err := f()\n\n\t\tvar status int\n\t\tif resp != nil {\n\t\t\tstatus = resp.StatusCode\n\t\t}\n\n\t\t// Return if we shouldn't retry.\n\t\tpause, retry := backoff.Pause()\n\t\tif !shouldRetry(status, err) || !retry {\n\t\t\treturn resp, err\n\t\t}\n\n\t\t// Ensure the response body is closed, if any.\n\t\tif resp != nil && resp.Body != nil {\n\t\t\tresp.Body.Close()\n\t\t}\n\n\t\t// Pause, but still listen to ctx.Done if context is not nil.\n\t\tvar done <-chan struct{}\n\t\tif ctx != nil {\n\t\t\tdone = ctx.Done()\n\t\t}\n\t\tselect {\n\t\tcase <-done:\n\t\t\treturn nil, ctx.Err()\n\t\tcase <-time.After(pause):\n\t\t}\n\t}\n}\n\n// DefaultBackoffStrategy returns a default strategy to use for retrying failed upload requests.\nfunc DefaultBackoffStrategy() BackoffStrategy {\n\treturn &ExponentialBackoff{\n\t\tBase: 250 * time.Millisecond,\n\t\tMax:  16 * time.Second,\n\t}\n}\n\n// shouldRetry returns true if the HTTP response / error indicates that the\n// request should be attempted again.\nfunc shouldRetry(status int, err error) bool {\n\tif 500 <= status && status <= 599 {\n\t\treturn true\n\t}\n\tif status == statusTooManyRequests {\n\t\treturn true\n\t}\n\tif err == io.ErrUnexpectedEOF {\n\t\treturn true\n\t}\n\tif err, ok := err.(net.Error); ok {\n\t\treturn err.Temporary()\n\t}\n\treturn false\n}\n"
  },
  {
    "path": "vendor/google.golang.org/api/gensupport/send.go",
    "content": "// Copyright 2016 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage gensupport\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"net/http\"\n)\n\n// Hook is the type of a function that is called once before each HTTP request\n// that is sent by a generated API.  It returns a function that is called after\n// the request returns.\n// Hooks are not called if the context is nil.\ntype Hook func(ctx context.Context, req *http.Request) func(resp *http.Response)\n\nvar hooks []Hook\n\n// RegisterHook registers a Hook to be called before each HTTP request by a\n// generated API.  Hooks are called in the order they are registered.  Each\n// hook can return a function; if it is non-nil, it is called after the HTTP\n// request returns.  These functions are called in the reverse order.\n// RegisterHook should not be called concurrently with itself or SendRequest.\nfunc RegisterHook(h Hook) {\n\thooks = append(hooks, h)\n}\n\n// SendRequest sends a single HTTP request using the given client.\n// If ctx is non-nil, it calls all hooks, then sends the request with\n// req.WithContext, then calls any functions returned by the hooks in\n// reverse order.\nfunc SendRequest(ctx context.Context, client *http.Client, req *http.Request) (*http.Response, error) {\n\t// Disallow Accept-Encoding because it interferes with the automatic gzip handling\n\t// done by the default http.Transport. See https://github.com/google/google-api-go-client/issues/219.\n\tif _, ok := req.Header[\"Accept-Encoding\"]; ok {\n\t\treturn nil, errors.New(\"google api: custom Accept-Encoding headers not allowed\")\n\t}\n\tif ctx == nil {\n\t\treturn client.Do(req)\n\t}\n\t// Call hooks in order of registration, store returned funcs.\n\tpost := make([]func(resp *http.Response), len(hooks))\n\tfor i, h := range hooks {\n\t\tfn := h(ctx, req)\n\t\tpost[i] = fn\n\t}\n\n\t// Send request.\n\tresp, err := send(ctx, client, req)\n\n\t// Call returned funcs in reverse order.\n\tfor i := len(post) - 1; i >= 0; i-- {\n\t\tif fn := post[i]; fn != nil {\n\t\t\tfn(resp)\n\t\t}\n\t}\n\treturn resp, err\n}\n\nfunc send(ctx context.Context, client *http.Client, req *http.Request) (*http.Response, error) {\n\tif client == nil {\n\t\tclient = http.DefaultClient\n\t}\n\tresp, err := client.Do(req.WithContext(ctx))\n\t// If we got an error, and the context has been canceled,\n\t// the context's error is probably more useful.\n\tif err != nil {\n\t\tselect {\n\t\tcase <-ctx.Done():\n\t\t\terr = ctx.Err()\n\t\tdefault:\n\t\t}\n\t}\n\treturn resp, err\n}\n\n// DecodeResponse decodes the body of res into target. If there is no body,\n// target is unchanged.\nfunc DecodeResponse(target interface{}, res *http.Response) error {\n\tif res.StatusCode == http.StatusNoContent {\n\t\treturn nil\n\t}\n\treturn json.NewDecoder(res.Body).Decode(target)\n}\n"
  },
  {
    "path": "vendor/google.golang.org/api/googleapi/googleapi.go",
    "content": "// Copyright 2011 Google Inc. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package googleapi contains the common code shared by all Google API\n// libraries.\npackage googleapi // import \"google.golang.org/api/googleapi\"\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"strings\"\n\n\t\"google.golang.org/api/googleapi/internal/uritemplates\"\n)\n\n// ContentTyper is an interface for Readers which know (or would like\n// to override) their Content-Type. If a media body doesn't implement\n// ContentTyper, the type is sniffed from the content using\n// http.DetectContentType.\ntype ContentTyper interface {\n\tContentType() string\n}\n\n// A SizeReaderAt is a ReaderAt with a Size method.\n// An io.SectionReader implements SizeReaderAt.\ntype SizeReaderAt interface {\n\tio.ReaderAt\n\tSize() int64\n}\n\n// ServerResponse is embedded in each Do response and\n// provides the HTTP status code and header sent by the server.\ntype ServerResponse struct {\n\t// HTTPStatusCode is the server's response status code. When using a\n\t// resource method's Do call, this will always be in the 2xx range.\n\tHTTPStatusCode int\n\t// Header contains the response header fields from the server.\n\tHeader http.Header\n}\n\nconst (\n\t// Version defines the gax version being used. This is typically sent\n\t// in an HTTP header to services.\n\tVersion = \"0.5\"\n\n\t// UserAgent is the header string used to identify this package.\n\tUserAgent = \"google-api-go-client/\" + Version\n\n\t// DefaultUploadChunkSize is the default chunk size to use for resumable\n\t// uploads if not specified by the user.\n\tDefaultUploadChunkSize = 8 * 1024 * 1024\n\n\t// MinUploadChunkSize is the minimum chunk size that can be used for\n\t// resumable uploads.  All user-specified chunk sizes must be multiple of\n\t// this value.\n\tMinUploadChunkSize = 256 * 1024\n)\n\n// Error contains an error response from the server.\ntype Error struct {\n\t// Code is the HTTP response status code and will always be populated.\n\tCode int `json:\"code\"`\n\t// Message is the server response message and is only populated when\n\t// explicitly referenced by the JSON server response.\n\tMessage string `json:\"message\"`\n\t// Body is the raw response returned by the server.\n\t// It is often but not always JSON, depending on how the request fails.\n\tBody string\n\t// Header contains the response header fields from the server.\n\tHeader http.Header\n\n\tErrors []ErrorItem\n}\n\n// ErrorItem is a detailed error code & message from the Google API frontend.\ntype ErrorItem struct {\n\t// Reason is the typed error code. For example: \"some_example\".\n\tReason string `json:\"reason\"`\n\t// Message is the human-readable description of the error.\n\tMessage string `json:\"message\"`\n}\n\nfunc (e *Error) Error() string {\n\tif len(e.Errors) == 0 && e.Message == \"\" {\n\t\treturn fmt.Sprintf(\"googleapi: got HTTP response code %d with body: %v\", e.Code, e.Body)\n\t}\n\tvar buf bytes.Buffer\n\tfmt.Fprintf(&buf, \"googleapi: Error %d: \", e.Code)\n\tif e.Message != \"\" {\n\t\tfmt.Fprintf(&buf, \"%s\", e.Message)\n\t}\n\tif len(e.Errors) == 0 {\n\t\treturn strings.TrimSpace(buf.String())\n\t}\n\tif len(e.Errors) == 1 && e.Errors[0].Message == e.Message {\n\t\tfmt.Fprintf(&buf, \", %s\", e.Errors[0].Reason)\n\t\treturn buf.String()\n\t}\n\tfmt.Fprintln(&buf, \"\\nMore details:\")\n\tfor _, v := range e.Errors {\n\t\tfmt.Fprintf(&buf, \"Reason: %s, Message: %s\\n\", v.Reason, v.Message)\n\t}\n\treturn buf.String()\n}\n\ntype errorReply struct {\n\tError *Error `json:\"error\"`\n}\n\n// CheckResponse returns an error (of type *Error) if the response\n// status code is not 2xx.\nfunc CheckResponse(res *http.Response) error {\n\tif res.StatusCode >= 200 && res.StatusCode <= 299 {\n\t\treturn nil\n\t}\n\tslurp, err := ioutil.ReadAll(res.Body)\n\tif err == nil {\n\t\tjerr := new(errorReply)\n\t\terr = json.Unmarshal(slurp, jerr)\n\t\tif err == nil && jerr.Error != nil {\n\t\t\tif jerr.Error.Code == 0 {\n\t\t\t\tjerr.Error.Code = res.StatusCode\n\t\t\t}\n\t\t\tjerr.Error.Body = string(slurp)\n\t\t\treturn jerr.Error\n\t\t}\n\t}\n\treturn &Error{\n\t\tCode:   res.StatusCode,\n\t\tBody:   string(slurp),\n\t\tHeader: res.Header,\n\t}\n}\n\n// IsNotModified reports whether err is the result of the\n// server replying with http.StatusNotModified.\n// Such error values are sometimes returned by \"Do\" methods\n// on calls when If-None-Match is used.\nfunc IsNotModified(err error) bool {\n\tif err == nil {\n\t\treturn false\n\t}\n\tae, ok := err.(*Error)\n\treturn ok && ae.Code == http.StatusNotModified\n}\n\n// CheckMediaResponse returns an error (of type *Error) if the response\n// status code is not 2xx. Unlike CheckResponse it does not assume the\n// body is a JSON error document.\n// It is the caller's responsibility to close res.Body.\nfunc CheckMediaResponse(res *http.Response) error {\n\tif res.StatusCode >= 200 && res.StatusCode <= 299 {\n\t\treturn nil\n\t}\n\tslurp, _ := ioutil.ReadAll(io.LimitReader(res.Body, 1<<20))\n\treturn &Error{\n\t\tCode: res.StatusCode,\n\t\tBody: string(slurp),\n\t}\n}\n\n// MarshalStyle defines whether to marshal JSON with a {\"data\": ...} wrapper.\ntype MarshalStyle bool\n\n// WithDataWrapper marshals JSON with a {\"data\": ...} wrapper.\nvar WithDataWrapper = MarshalStyle(true)\n\n// WithoutDataWrapper marshals JSON without a {\"data\": ...} wrapper.\nvar WithoutDataWrapper = MarshalStyle(false)\n\nfunc (wrap MarshalStyle) JSONReader(v interface{}) (io.Reader, error) {\n\tbuf := new(bytes.Buffer)\n\tif wrap {\n\t\tbuf.Write([]byte(`{\"data\": `))\n\t}\n\terr := json.NewEncoder(buf).Encode(v)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif wrap {\n\t\tbuf.Write([]byte(`}`))\n\t}\n\treturn buf, nil\n}\n\n// ProgressUpdater is a function that is called upon every progress update of a resumable upload.\n// This is the only part of a resumable upload (from googleapi) that is usable by the developer.\n// The remaining usable pieces of resumable uploads is exposed in each auto-generated API.\ntype ProgressUpdater func(current, total int64)\n\n// MediaOption defines the interface for setting media options.\ntype MediaOption interface {\n\tsetOptions(o *MediaOptions)\n}\n\ntype contentTypeOption string\n\nfunc (ct contentTypeOption) setOptions(o *MediaOptions) {\n\to.ContentType = string(ct)\n\tif o.ContentType == \"\" {\n\t\to.ForceEmptyContentType = true\n\t}\n}\n\n// ContentType returns a MediaOption which sets the Content-Type header for media uploads.\n// If ctype is empty, the Content-Type header will be omitted.\nfunc ContentType(ctype string) MediaOption {\n\treturn contentTypeOption(ctype)\n}\n\ntype chunkSizeOption int\n\nfunc (cs chunkSizeOption) setOptions(o *MediaOptions) {\n\tsize := int(cs)\n\tif size%MinUploadChunkSize != 0 {\n\t\tsize += MinUploadChunkSize - (size % MinUploadChunkSize)\n\t}\n\to.ChunkSize = size\n}\n\n// ChunkSize returns a MediaOption which sets the chunk size for media uploads.\n// size will be rounded up to the nearest multiple of 256K.\n// Media which contains fewer than size bytes will be uploaded in a single request.\n// Media which contains size bytes or more will be uploaded in separate chunks.\n// If size is zero, media will be uploaded in a single request.\nfunc ChunkSize(size int) MediaOption {\n\treturn chunkSizeOption(size)\n}\n\n// MediaOptions stores options for customizing media upload.  It is not used by developers directly.\ntype MediaOptions struct {\n\tContentType           string\n\tForceEmptyContentType bool\n\n\tChunkSize int\n}\n\n// ProcessMediaOptions stores options from opts in a MediaOptions.\n// It is not used by developers directly.\nfunc ProcessMediaOptions(opts []MediaOption) *MediaOptions {\n\tmo := &MediaOptions{ChunkSize: DefaultUploadChunkSize}\n\tfor _, o := range opts {\n\t\to.setOptions(mo)\n\t}\n\treturn mo\n}\n\n// ResolveRelative resolves relatives such as \"http://www.golang.org/\" and\n// \"topics/myproject/mytopic\" into a single string, such as\n// \"http://www.golang.org/topics/myproject/mytopic\". It strips all parent\n// references (e.g. ../..) as well as anything after the host\n// (e.g. /bar/gaz gets stripped out of foo.com/bar/gaz).\nfunc ResolveRelative(basestr, relstr string) string {\n\tu, _ := url.Parse(basestr)\n\tafterColonPath := \"\"\n\tif i := strings.IndexRune(relstr, ':'); i > 0 {\n\t\tafterColonPath = relstr[i+1:]\n\t\trelstr = relstr[:i]\n\t}\n\trel, _ := url.Parse(relstr)\n\tu = u.ResolveReference(rel)\n\tus := u.String()\n\tif afterColonPath != \"\" {\n\t\tus = fmt.Sprintf(\"%s:%s\", us, afterColonPath)\n\t}\n\tus = strings.Replace(us, \"%7B\", \"{\", -1)\n\tus = strings.Replace(us, \"%7D\", \"}\", -1)\n\tus = strings.Replace(us, \"%2A\", \"*\", -1)\n\treturn us\n}\n\n// Expand subsitutes any {encoded} strings in the URL passed in using\n// the map supplied.\n//\n// This calls SetOpaque to avoid encoding of the parameters in the URL path.\nfunc Expand(u *url.URL, expansions map[string]string) {\n\tescaped, unescaped, err := uritemplates.Expand(u.Path, expansions)\n\tif err == nil {\n\t\tu.Path = unescaped\n\t\tu.RawPath = escaped\n\t}\n}\n\n// CloseBody is used to close res.Body.\n// Prior to calling Close, it also tries to Read a small amount to see an EOF.\n// Not seeing an EOF can prevent HTTP Transports from reusing connections.\nfunc CloseBody(res *http.Response) {\n\tif res == nil || res.Body == nil {\n\t\treturn\n\t}\n\t// Justification for 3 byte reads: two for up to \"\\r\\n\" after\n\t// a JSON/XML document, and then 1 to see EOF if we haven't yet.\n\t// TODO(bradfitz): detect Go 1.3+ and skip these reads.\n\t// See https://codereview.appspot.com/58240043\n\t// and https://codereview.appspot.com/49570044\n\tbuf := make([]byte, 1)\n\tfor i := 0; i < 3; i++ {\n\t\t_, err := res.Body.Read(buf)\n\t\tif err != nil {\n\t\t\tbreak\n\t\t}\n\t}\n\tres.Body.Close()\n\n}\n\n// VariantType returns the type name of the given variant.\n// If the map doesn't contain the named key or the value is not a []interface{}, \"\" is returned.\n// This is used to support \"variant\" APIs that can return one of a number of different types.\nfunc VariantType(t map[string]interface{}) string {\n\ts, _ := t[\"type\"].(string)\n\treturn s\n}\n\n// ConvertVariant uses the JSON encoder/decoder to fill in the struct 'dst' with the fields found in variant 'v'.\n// This is used to support \"variant\" APIs that can return one of a number of different types.\n// It reports whether the conversion was successful.\nfunc ConvertVariant(v map[string]interface{}, dst interface{}) bool {\n\tvar buf bytes.Buffer\n\terr := json.NewEncoder(&buf).Encode(v)\n\tif err != nil {\n\t\treturn false\n\t}\n\treturn json.Unmarshal(buf.Bytes(), dst) == nil\n}\n\n// A Field names a field to be retrieved with a partial response.\n// See https://developers.google.com/gdata/docs/2.0/basics#PartialResponse\n//\n// Partial responses can dramatically reduce the amount of data that must be sent to your application.\n// In order to request partial responses, you can specify the full list of fields\n// that your application needs by adding the Fields option to your request.\n//\n// Field strings use camelCase with leading lower-case characters to identify fields within the response.\n//\n// For example, if your response has a \"NextPageToken\" and a slice of \"Items\" with \"Id\" fields,\n// you could request just those fields like this:\n//\n//     svc.Events.List().Fields(\"nextPageToken\", \"items/id\").Do()\n//\n// or if you were also interested in each Item's \"Updated\" field, you can combine them like this:\n//\n//     svc.Events.List().Fields(\"nextPageToken\", \"items(id,updated)\").Do()\n//\n// More information about field formatting can be found here:\n// https://developers.google.com/+/api/#fields-syntax\n//\n// Another way to find field names is through the Google API explorer:\n// https://developers.google.com/apis-explorer/#p/\ntype Field string\n\n// CombineFields combines fields into a single string.\nfunc CombineFields(s []Field) string {\n\tr := make([]string, len(s))\n\tfor i, v := range s {\n\t\tr[i] = string(v)\n\t}\n\treturn strings.Join(r, \",\")\n}\n\n// A CallOption is an optional argument to an API call.\n// It should be treated as an opaque value by users of Google APIs.\n//\n// A CallOption is something that configures an API call in a way that is\n// not specific to that API; for instance, controlling the quota user for\n// an API call is common across many APIs, and is thus a CallOption.\ntype CallOption interface {\n\tGet() (key, value string)\n}\n\n// QuotaUser returns a CallOption that will set the quota user for a call.\n// The quota user can be used by server-side applications to control accounting.\n// It can be an arbitrary string up to 40 characters, and will override UserIP\n// if both are provided.\nfunc QuotaUser(u string) CallOption { return quotaUser(u) }\n\ntype quotaUser string\n\nfunc (q quotaUser) Get() (string, string) { return \"quotaUser\", string(q) }\n\n// UserIP returns a CallOption that will set the \"userIp\" parameter of a call.\n// This should be the IP address of the originating request.\nfunc UserIP(ip string) CallOption { return userIP(ip) }\n\ntype userIP string\n\nfunc (i userIP) Get() (string, string) { return \"userIp\", string(i) }\n\n// Trace returns a CallOption that enables diagnostic tracing for a call.\n// traceToken is an ID supplied by Google support.\nfunc Trace(traceToken string) CallOption { return traceTok(traceToken) }\n\ntype traceTok string\n\nfunc (t traceTok) Get() (string, string) { return \"trace\", \"token:\" + string(t) }\n\n// TODO: Fields too\n"
  },
  {
    "path": "vendor/google.golang.org/api/googleapi/internal/uritemplates/LICENSE",
    "content": "Copyright (c) 2013 Joshua Tacoma\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "vendor/google.golang.org/api/googleapi/internal/uritemplates/uritemplates.go",
    "content": "// Copyright 2013 Joshua Tacoma. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package uritemplates is a level 3 implementation of RFC 6570 (URI\n// Template, http://tools.ietf.org/html/rfc6570).\n// uritemplates does not support composite values (in Go: slices or maps)\n// and so does not qualify as a level 4 implementation.\npackage uritemplates\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"regexp\"\n\t\"strconv\"\n\t\"strings\"\n)\n\nvar (\n\tunreserved = regexp.MustCompile(\"[^A-Za-z0-9\\\\-._~]\")\n\treserved   = regexp.MustCompile(\"[^A-Za-z0-9\\\\-._~:/?#[\\\\]@!$&'()*+,;=]\")\n\tvalidname  = regexp.MustCompile(\"^([A-Za-z0-9_\\\\.]|%[0-9A-Fa-f][0-9A-Fa-f])+$\")\n\thex        = []byte(\"0123456789ABCDEF\")\n)\n\nfunc pctEncode(src []byte) []byte {\n\tdst := make([]byte, len(src)*3)\n\tfor i, b := range src {\n\t\tbuf := dst[i*3 : i*3+3]\n\t\tbuf[0] = 0x25\n\t\tbuf[1] = hex[b/16]\n\t\tbuf[2] = hex[b%16]\n\t}\n\treturn dst\n}\n\n// pairWriter is a convenience struct which allows escaped and unescaped\n// versions of the template to be written in parallel.\ntype pairWriter struct {\n\tescaped, unescaped bytes.Buffer\n}\n\n// Write writes the provided string directly without any escaping.\nfunc (w *pairWriter) Write(s string) {\n\tw.escaped.WriteString(s)\n\tw.unescaped.WriteString(s)\n}\n\n// Escape writes the provided string, escaping the string for the\n// escaped output.\nfunc (w *pairWriter) Escape(s string, allowReserved bool) {\n\tw.unescaped.WriteString(s)\n\tif allowReserved {\n\t\tw.escaped.Write(reserved.ReplaceAllFunc([]byte(s), pctEncode))\n\t} else {\n\t\tw.escaped.Write(unreserved.ReplaceAllFunc([]byte(s), pctEncode))\n\t}\n}\n\n// Escaped returns the escaped string.\nfunc (w *pairWriter) Escaped() string {\n\treturn w.escaped.String()\n}\n\n// Unescaped returns the unescaped string.\nfunc (w *pairWriter) Unescaped() string {\n\treturn w.unescaped.String()\n}\n\n// A uriTemplate is a parsed representation of a URI template.\ntype uriTemplate struct {\n\traw   string\n\tparts []templatePart\n}\n\n// parse parses a URI template string into a uriTemplate object.\nfunc parse(rawTemplate string) (*uriTemplate, error) {\n\tsplit := strings.Split(rawTemplate, \"{\")\n\tparts := make([]templatePart, len(split)*2-1)\n\tfor i, s := range split {\n\t\tif i == 0 {\n\t\t\tif strings.Contains(s, \"}\") {\n\t\t\t\treturn nil, errors.New(\"unexpected }\")\n\t\t\t}\n\t\t\tparts[i].raw = s\n\t\t\tcontinue\n\t\t}\n\t\tsubsplit := strings.Split(s, \"}\")\n\t\tif len(subsplit) != 2 {\n\t\t\treturn nil, errors.New(\"malformed template\")\n\t\t}\n\t\texpression := subsplit[0]\n\t\tvar err error\n\t\tparts[i*2-1], err = parseExpression(expression)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tparts[i*2].raw = subsplit[1]\n\t}\n\treturn &uriTemplate{\n\t\traw:   rawTemplate,\n\t\tparts: parts,\n\t}, nil\n}\n\ntype templatePart struct {\n\traw           string\n\tterms         []templateTerm\n\tfirst         string\n\tsep           string\n\tnamed         bool\n\tifemp         string\n\tallowReserved bool\n}\n\ntype templateTerm struct {\n\tname     string\n\texplode  bool\n\ttruncate int\n}\n\nfunc parseExpression(expression string) (result templatePart, err error) {\n\tswitch expression[0] {\n\tcase '+':\n\t\tresult.sep = \",\"\n\t\tresult.allowReserved = true\n\t\texpression = expression[1:]\n\tcase '.':\n\t\tresult.first = \".\"\n\t\tresult.sep = \".\"\n\t\texpression = expression[1:]\n\tcase '/':\n\t\tresult.first = \"/\"\n\t\tresult.sep = \"/\"\n\t\texpression = expression[1:]\n\tcase ';':\n\t\tresult.first = \";\"\n\t\tresult.sep = \";\"\n\t\tresult.named = true\n\t\texpression = expression[1:]\n\tcase '?':\n\t\tresult.first = \"?\"\n\t\tresult.sep = \"&\"\n\t\tresult.named = true\n\t\tresult.ifemp = \"=\"\n\t\texpression = expression[1:]\n\tcase '&':\n\t\tresult.first = \"&\"\n\t\tresult.sep = \"&\"\n\t\tresult.named = true\n\t\tresult.ifemp = \"=\"\n\t\texpression = expression[1:]\n\tcase '#':\n\t\tresult.first = \"#\"\n\t\tresult.sep = \",\"\n\t\tresult.allowReserved = true\n\t\texpression = expression[1:]\n\tdefault:\n\t\tresult.sep = \",\"\n\t}\n\trawterms := strings.Split(expression, \",\")\n\tresult.terms = make([]templateTerm, len(rawterms))\n\tfor i, raw := range rawterms {\n\t\tresult.terms[i], err = parseTerm(raw)\n\t\tif err != nil {\n\t\t\tbreak\n\t\t}\n\t}\n\treturn result, err\n}\n\nfunc parseTerm(term string) (result templateTerm, err error) {\n\t// TODO(djd): Remove \"*\" suffix parsing once we check that no APIs have\n\t// mistakenly used that attribute.\n\tif strings.HasSuffix(term, \"*\") {\n\t\tresult.explode = true\n\t\tterm = term[:len(term)-1]\n\t}\n\tsplit := strings.Split(term, \":\")\n\tif len(split) == 1 {\n\t\tresult.name = term\n\t} else if len(split) == 2 {\n\t\tresult.name = split[0]\n\t\tvar parsed int64\n\t\tparsed, err = strconv.ParseInt(split[1], 10, 0)\n\t\tresult.truncate = int(parsed)\n\t} else {\n\t\terr = errors.New(\"multiple colons in same term\")\n\t}\n\tif !validname.MatchString(result.name) {\n\t\terr = errors.New(\"not a valid name: \" + result.name)\n\t}\n\tif result.explode && result.truncate > 0 {\n\t\terr = errors.New(\"both explode and prefix modifers on same term\")\n\t}\n\treturn result, err\n}\n\n// Expand expands a URI template with a set of values to produce the\n// resultant URI. Two forms of the result are returned: one with all the\n// elements escaped, and one with the elements unescaped.\nfunc (t *uriTemplate) Expand(values map[string]string) (escaped, unescaped string) {\n\tvar w pairWriter\n\tfor _, p := range t.parts {\n\t\tp.expand(&w, values)\n\t}\n\treturn w.Escaped(), w.Unescaped()\n}\n\nfunc (tp *templatePart) expand(w *pairWriter, values map[string]string) {\n\tif len(tp.raw) > 0 {\n\t\tw.Write(tp.raw)\n\t\treturn\n\t}\n\tvar first = true\n\tfor _, term := range tp.terms {\n\t\tvalue, exists := values[term.name]\n\t\tif !exists {\n\t\t\tcontinue\n\t\t}\n\t\tif first {\n\t\t\tw.Write(tp.first)\n\t\t\tfirst = false\n\t\t} else {\n\t\t\tw.Write(tp.sep)\n\t\t}\n\t\ttp.expandString(w, term, value)\n\t}\n}\n\nfunc (tp *templatePart) expandName(w *pairWriter, name string, empty bool) {\n\tif tp.named {\n\t\tw.Write(name)\n\t\tif empty {\n\t\t\tw.Write(tp.ifemp)\n\t\t} else {\n\t\t\tw.Write(\"=\")\n\t\t}\n\t}\n}\n\nfunc (tp *templatePart) expandString(w *pairWriter, t templateTerm, s string) {\n\tif len(s) > t.truncate && t.truncate > 0 {\n\t\ts = s[:t.truncate]\n\t}\n\ttp.expandName(w, t.name, len(s) == 0)\n\tw.Escape(s, tp.allowReserved)\n}\n"
  },
  {
    "path": "vendor/google.golang.org/api/googleapi/internal/uritemplates/utils.go",
    "content": "// Copyright 2016 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage uritemplates\n\n// Expand parses then expands a URI template with a set of values to produce\n// the resultant URI. Two forms of the result are returned: one with all the\n// elements escaped, and one with the elements unescaped.\nfunc Expand(path string, values map[string]string) (escaped, unescaped string, err error) {\n\ttemplate, err := parse(path)\n\tif err != nil {\n\t\treturn \"\", \"\", err\n\t}\n\tescaped, unescaped = template.Expand(values)\n\treturn escaped, unescaped, nil\n}\n"
  },
  {
    "path": "vendor/google.golang.org/api/googleapi/transport/apikey.go",
    "content": "// Copyright 2012 Google Inc. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package transport contains HTTP transports used to make\n// authenticated API requests.\npackage transport\n\nimport (\n\t\"errors\"\n\t\"net/http\"\n)\n\n// APIKey is an HTTP Transport which wraps an underlying transport and\n// appends an API Key \"key\" parameter to the URL of outgoing requests.\ntype APIKey struct {\n\t// Key is the API Key to set on requests.\n\tKey string\n\n\t// Transport is the underlying HTTP transport.\n\t// If nil, http.DefaultTransport is used.\n\tTransport http.RoundTripper\n}\n\nfunc (t *APIKey) RoundTrip(req *http.Request) (*http.Response, error) {\n\trt := t.Transport\n\tif rt == nil {\n\t\trt = http.DefaultTransport\n\t\tif rt == nil {\n\t\t\treturn nil, errors.New(\"googleapi/transport: no Transport specified or available\")\n\t\t}\n\t}\n\tnewReq := *req\n\targs := newReq.URL.Query()\n\targs.Set(\"key\", t.Key)\n\tnewReq.URL.RawQuery = args.Encode()\n\treturn rt.RoundTrip(&newReq)\n}\n"
  },
  {
    "path": "vendor/google.golang.org/api/googleapi/types.go",
    "content": "// Copyright 2013 Google Inc. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage googleapi\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\t\"strconv\"\n)\n\n// Int64s is a slice of int64s that marshal as quoted strings in JSON.\ntype Int64s []int64\n\nfunc (q *Int64s) UnmarshalJSON(raw []byte) error {\n\t*q = (*q)[:0]\n\tvar ss []string\n\tif err := json.Unmarshal(raw, &ss); err != nil {\n\t\treturn err\n\t}\n\tfor _, s := range ss {\n\t\tv, err := strconv.ParseInt(s, 10, 64)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t*q = append(*q, int64(v))\n\t}\n\treturn nil\n}\n\n// Int32s is a slice of int32s that marshal as quoted strings in JSON.\ntype Int32s []int32\n\nfunc (q *Int32s) UnmarshalJSON(raw []byte) error {\n\t*q = (*q)[:0]\n\tvar ss []string\n\tif err := json.Unmarshal(raw, &ss); err != nil {\n\t\treturn err\n\t}\n\tfor _, s := range ss {\n\t\tv, err := strconv.ParseInt(s, 10, 32)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t*q = append(*q, int32(v))\n\t}\n\treturn nil\n}\n\n// Uint64s is a slice of uint64s that marshal as quoted strings in JSON.\ntype Uint64s []uint64\n\nfunc (q *Uint64s) UnmarshalJSON(raw []byte) error {\n\t*q = (*q)[:0]\n\tvar ss []string\n\tif err := json.Unmarshal(raw, &ss); err != nil {\n\t\treturn err\n\t}\n\tfor _, s := range ss {\n\t\tv, err := strconv.ParseUint(s, 10, 64)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t*q = append(*q, uint64(v))\n\t}\n\treturn nil\n}\n\n// Uint32s is a slice of uint32s that marshal as quoted strings in JSON.\ntype Uint32s []uint32\n\nfunc (q *Uint32s) UnmarshalJSON(raw []byte) error {\n\t*q = (*q)[:0]\n\tvar ss []string\n\tif err := json.Unmarshal(raw, &ss); err != nil {\n\t\treturn err\n\t}\n\tfor _, s := range ss {\n\t\tv, err := strconv.ParseUint(s, 10, 32)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t*q = append(*q, uint32(v))\n\t}\n\treturn nil\n}\n\n// Float64s is a slice of float64s that marshal as quoted strings in JSON.\ntype Float64s []float64\n\nfunc (q *Float64s) UnmarshalJSON(raw []byte) error {\n\t*q = (*q)[:0]\n\tvar ss []string\n\tif err := json.Unmarshal(raw, &ss); err != nil {\n\t\treturn err\n\t}\n\tfor _, s := range ss {\n\t\tv, err := strconv.ParseFloat(s, 64)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t*q = append(*q, float64(v))\n\t}\n\treturn nil\n}\n\nfunc quotedList(n int, fn func(dst []byte, i int) []byte) ([]byte, error) {\n\tdst := make([]byte, 0, 2+n*10) // somewhat arbitrary\n\tdst = append(dst, '[')\n\tfor i := 0; i < n; i++ {\n\t\tif i > 0 {\n\t\t\tdst = append(dst, ',')\n\t\t}\n\t\tdst = append(dst, '\"')\n\t\tdst = fn(dst, i)\n\t\tdst = append(dst, '\"')\n\t}\n\tdst = append(dst, ']')\n\treturn dst, nil\n}\n\nfunc (q Int64s) MarshalJSON() ([]byte, error) {\n\treturn quotedList(len(q), func(dst []byte, i int) []byte {\n\t\treturn strconv.AppendInt(dst, q[i], 10)\n\t})\n}\n\nfunc (q Int32s) MarshalJSON() ([]byte, error) {\n\treturn quotedList(len(q), func(dst []byte, i int) []byte {\n\t\treturn strconv.AppendInt(dst, int64(q[i]), 10)\n\t})\n}\n\nfunc (q Uint64s) MarshalJSON() ([]byte, error) {\n\treturn quotedList(len(q), func(dst []byte, i int) []byte {\n\t\treturn strconv.AppendUint(dst, q[i], 10)\n\t})\n}\n\nfunc (q Uint32s) MarshalJSON() ([]byte, error) {\n\treturn quotedList(len(q), func(dst []byte, i int) []byte {\n\t\treturn strconv.AppendUint(dst, uint64(q[i]), 10)\n\t})\n}\n\nfunc (q Float64s) MarshalJSON() ([]byte, error) {\n\treturn quotedList(len(q), func(dst []byte, i int) []byte {\n\t\treturn strconv.AppendFloat(dst, q[i], 'g', -1, 64)\n\t})\n}\n\n// RawMessage is a raw encoded JSON value.\n// It is identical to json.RawMessage, except it does not suffer from\n// https://golang.org/issue/14493.\ntype RawMessage []byte\n\n// MarshalJSON returns m.\nfunc (m RawMessage) MarshalJSON() ([]byte, error) {\n\treturn m, nil\n}\n\n// UnmarshalJSON sets *m to a copy of data.\nfunc (m *RawMessage) UnmarshalJSON(data []byte) error {\n\tif m == nil {\n\t\treturn errors.New(\"googleapi.RawMessage: UnmarshalJSON on nil pointer\")\n\t}\n\t*m = append((*m)[:0], data...)\n\treturn nil\n}\n\n/*\n * Helper routines for simplifying the creation of optional fields of basic type.\n */\n\n// Bool is a helper routine that allocates a new bool value\n// to store v and returns a pointer to it.\nfunc Bool(v bool) *bool { return &v }\n\n// Int32 is a helper routine that allocates a new int32 value\n// to store v and returns a pointer to it.\nfunc Int32(v int32) *int32 { return &v }\n\n// Int64 is a helper routine that allocates a new int64 value\n// to store v and returns a pointer to it.\nfunc Int64(v int64) *int64 { return &v }\n\n// Float64 is a helper routine that allocates a new float64 value\n// to store v and returns a pointer to it.\nfunc Float64(v float64) *float64 { return &v }\n\n// Uint32 is a helper routine that allocates a new uint32 value\n// to store v and returns a pointer to it.\nfunc Uint32(v uint32) *uint32 { return &v }\n\n// Uint64 is a helper routine that allocates a new uint64 value\n// to store v and returns a pointer to it.\nfunc Uint64(v uint64) *uint64 { return &v }\n\n// String is a helper routine that allocates a new string value\n// to store v and returns a pointer to it.\nfunc String(v string) *string { return &v }\n"
  },
  {
    "path": "vendor/google.golang.org/api/internal/creds.go",
    "content": "// Copyright 2017 Google LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage internal\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io/ioutil\"\n\n\t\"golang.org/x/oauth2\"\n\n\t\"golang.org/x/oauth2/google\"\n)\n\n// Creds returns credential information obtained from DialSettings, or if none, then\n// it returns default credential information.\nfunc Creds(ctx context.Context, ds *DialSettings) (*google.Credentials, error) {\n\tif ds.Credentials != nil {\n\t\treturn ds.Credentials, nil\n\t}\n\tif ds.CredentialsJSON != nil {\n\t\treturn credentialsFromJSON(ctx, ds.CredentialsJSON, ds.Endpoint, ds.Scopes, ds.Audiences)\n\t}\n\tif ds.CredentialsFile != \"\" {\n\t\tdata, err := ioutil.ReadFile(ds.CredentialsFile)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"cannot read credentials file: %v\", err)\n\t\t}\n\t\treturn credentialsFromJSON(ctx, data, ds.Endpoint, ds.Scopes, ds.Audiences)\n\t}\n\tif ds.TokenSource != nil {\n\t\treturn &google.Credentials{TokenSource: ds.TokenSource}, nil\n\t}\n\tcred, err := google.FindDefaultCredentials(ctx, ds.Scopes...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif len(cred.JSON) > 0 {\n\t\treturn credentialsFromJSON(ctx, cred.JSON, ds.Endpoint, ds.Scopes, ds.Audiences)\n\t}\n\t// For GAE and GCE, the JSON is empty so return the default credentials directly.\n\treturn cred, nil\n}\n\n// JSON key file type.\nconst (\n\tserviceAccountKey = \"service_account\"\n)\n\n// credentialsFromJSON returns a google.Credentials based on the input.\n//\n// - If the JSON is a service account and no scopes provided, returns self-signed JWT auth flow\n// - Otherwise, returns OAuth 2.0 flow.\nfunc credentialsFromJSON(ctx context.Context, data []byte, endpoint string, scopes []string, audiences []string) (*google.Credentials, error) {\n\tcred, err := google.CredentialsFromJSON(ctx, data, scopes...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif len(data) > 0 && len(scopes) == 0 {\n\t\tvar f struct {\n\t\t\tType string `json:\"type\"`\n\t\t\t// The rest JSON fields are omitted because they are not used.\n\t\t}\n\t\tif err := json.Unmarshal(cred.JSON, &f); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif f.Type == serviceAccountKey {\n\t\t\tts, err := selfSignedJWTTokenSource(data, endpoint, audiences)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tcred.TokenSource = ts\n\t\t}\n\t}\n\treturn cred, err\n}\n\nfunc selfSignedJWTTokenSource(data []byte, endpoint string, audiences []string) (oauth2.TokenSource, error) {\n\t// Use the API endpoint as the default audience\n\taudience := endpoint\n\tif len(audiences) > 0 {\n\t\t// TODO(shinfan): Update golang oauth to support multiple audiences.\n\t\tif len(audiences) > 1 {\n\t\t\treturn nil, fmt.Errorf(\"multiple audiences support is not implemented\")\n\t\t}\n\t\taudience = audiences[0]\n\t}\n\treturn google.JWTAccessTokenSourceFromJSON(data, audience)\n}\n"
  },
  {
    "path": "vendor/google.golang.org/api/internal/pool.go",
    "content": "// Copyright 2016 Google LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage internal\n\nimport (\n\t\"errors\"\n\n\t\"google.golang.org/grpc/naming\"\n)\n\n// PoolResolver provides a fixed list of addresses to load balance between\n// and does not provide further updates.\ntype PoolResolver struct {\n\tpoolSize int\n\tdialOpt  *DialSettings\n\tch       chan []*naming.Update\n}\n\n// NewPoolResolver returns a PoolResolver\n// This is an EXPERIMENTAL API and may be changed or removed in the future.\nfunc NewPoolResolver(size int, o *DialSettings) *PoolResolver {\n\treturn &PoolResolver{poolSize: size, dialOpt: o}\n}\n\n// Resolve returns a Watcher for the endpoint defined by the DialSettings\n// provided to NewPoolResolver.\nfunc (r *PoolResolver) Resolve(target string) (naming.Watcher, error) {\n\tif r.dialOpt.Endpoint == \"\" {\n\t\treturn nil, errors.New(\"no endpoint configured\")\n\t}\n\taddrs := make([]*naming.Update, 0, r.poolSize)\n\tfor i := 0; i < r.poolSize; i++ {\n\t\taddrs = append(addrs, &naming.Update{Op: naming.Add, Addr: r.dialOpt.Endpoint, Metadata: i})\n\t}\n\tr.ch = make(chan []*naming.Update, 1)\n\tr.ch <- addrs\n\treturn r, nil\n}\n\n// Next returns a static list of updates on the first call,\n// and blocks indefinitely until Close is called on subsequent calls.\nfunc (r *PoolResolver) Next() ([]*naming.Update, error) {\n\treturn <-r.ch, nil\n}\n\n// Close releases resources associated with the pool and causes Next to unblock.\nfunc (r *PoolResolver) Close() {\n\tclose(r.ch)\n}\n"
  },
  {
    "path": "vendor/google.golang.org/api/internal/settings.go",
    "content": "// Copyright 2017 Google LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// Package internal supports the options and transport packages.\npackage internal\n\nimport (\n\t\"errors\"\n\t\"net/http\"\n\n\t\"golang.org/x/oauth2\"\n\t\"golang.org/x/oauth2/google\"\n\t\"google.golang.org/grpc\"\n)\n\n// DialSettings holds information needed to establish a connection with a\n// Google API service.\ntype DialSettings struct {\n\tEndpoint        string\n\tScopes          []string\n\tTokenSource     oauth2.TokenSource\n\tCredentials     *google.Credentials\n\tCredentialsFile string // if set, Token Source is ignored.\n\tCredentialsJSON []byte\n\tUserAgent       string\n\tAPIKey          string\n\tAudiences       []string\n\tHTTPClient      *http.Client\n\tGRPCDialOpts    []grpc.DialOption\n\tGRPCConn        *grpc.ClientConn\n\tNoAuth          bool\n\n\t// Google API system parameters. For more information please read:\n\t// https://cloud.google.com/apis/docs/system-parameters\n\tQuotaProject  string\n\tRequestReason string\n}\n\n// Validate reports an error if ds is invalid.\nfunc (ds *DialSettings) Validate() error {\n\thasCreds := ds.APIKey != \"\" || ds.TokenSource != nil || ds.CredentialsFile != \"\" || ds.Credentials != nil\n\tif ds.NoAuth && hasCreds {\n\t\treturn errors.New(\"options.WithoutAuthentication is incompatible with any option that provides credentials\")\n\t}\n\t// Credentials should not appear with other options.\n\t// We currently allow TokenSource and CredentialsFile to coexist.\n\t// TODO(jba): make TokenSource & CredentialsFile an error (breaking change).\n\tnCreds := 0\n\tif ds.Credentials != nil {\n\t\tnCreds++\n\t}\n\tif ds.CredentialsJSON != nil {\n\t\tnCreds++\n\t}\n\tif ds.CredentialsFile != \"\" {\n\t\tnCreds++\n\t}\n\tif ds.APIKey != \"\" {\n\t\tnCreds++\n\t}\n\tif ds.TokenSource != nil {\n\t\tnCreds++\n\t}\n\tif len(ds.Scopes) > 0 && len(ds.Audiences) > 0 {\n\t\treturn errors.New(\"WithScopes is incompatible with WithAudience\")\n\t}\n\t// Accept only one form of credentials, except we allow TokenSource and CredentialsFile for backwards compatibility.\n\tif nCreds > 1 && !(nCreds == 2 && ds.TokenSource != nil && ds.CredentialsFile != \"\") {\n\t\treturn errors.New(\"multiple credential options provided\")\n\t}\n\tif ds.HTTPClient != nil && ds.GRPCConn != nil {\n\t\treturn errors.New(\"WithHTTPClient is incompatible with WithGRPCConn\")\n\t}\n\tif ds.HTTPClient != nil && ds.GRPCDialOpts != nil {\n\t\treturn errors.New(\"WithHTTPClient is incompatible with gRPC dial options\")\n\t}\n\tif ds.HTTPClient != nil && ds.QuotaProject != \"\" {\n\t\treturn errors.New(\"WithHTTPClient is incompatible with QuotaProject\")\n\t}\n\tif ds.HTTPClient != nil && ds.RequestReason != \"\" {\n\t\treturn errors.New(\"WithHTTPClient is incompatible with RequestReason\")\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/google.golang.org/api/iterator/iterator.go",
    "content": "// Copyright 2016 Google LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// Package iterator provides support for standard Google API iterators.\n// See https://github.com/GoogleCloudPlatform/gcloud-golang/wiki/Iterator-Guidelines.\npackage iterator\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"reflect\"\n)\n\n// Done is returned by an iterator's Next method when the iteration is\n// complete; when there are no more items to return.\nvar Done = errors.New(\"no more items in iterator\")\n\n// We don't support mixed calls to Next and NextPage because they play\n// with the paging state in incompatible ways.\nvar errMixed = errors.New(\"iterator: Next and NextPage called on same iterator\")\n\n// PageInfo contains information about an iterator's paging state.\ntype PageInfo struct {\n\t// Token is the token used to retrieve the next page of items from the\n\t// API. You may set Token immediately after creating an iterator to\n\t// begin iteration at a particular point. If Token is the empty string,\n\t// the iterator will begin with the first eligible item.\n\t//\n\t// The result of setting Token after the first call to Next is undefined.\n\t//\n\t// After the underlying API method is called to retrieve a page of items,\n\t// Token is set to the next-page token in the response.\n\tToken string\n\n\t// MaxSize is the maximum number of items returned by a call to the API.\n\t// Set MaxSize as a hint to optimize the buffering behavior of the iterator.\n\t// If zero, the page size is determined by the underlying service.\n\t//\n\t// Use Pager to retrieve a page of a specific, exact size.\n\tMaxSize int\n\n\t// The error state of the iterator. Manipulated by PageInfo.next and Pager.\n\t// This is a latch: it starts as nil, and once set should never change.\n\terr error\n\n\t// If true, no more calls to fetch should be made. Set to true when fetch\n\t// returns an empty page token. The iterator is Done when this is true AND\n\t// the buffer is empty.\n\tatEnd bool\n\n\t// Function that fetches a page from the underlying service. It should pass\n\t// the pageSize and pageToken arguments to the service, fill the buffer\n\t// with the results from the call, and return the next-page token returned\n\t// by the service. The function must not remove any existing items from the\n\t// buffer. If the underlying RPC takes an int32 page size, pageSize should\n\t// be silently truncated.\n\tfetch func(pageSize int, pageToken string) (nextPageToken string, err error)\n\n\t// Function that returns the number of currently buffered items.\n\tbufLen func() int\n\n\t// Function that returns the buffer, after setting the buffer variable to nil.\n\ttakeBuf func() interface{}\n\n\t// Set to true on first call to PageInfo.next or Pager.NextPage. Used to check\n\t// for calls to both Next and NextPage with the same iterator.\n\tnextCalled, nextPageCalled bool\n}\n\n// NewPageInfo exposes internals for iterator implementations.\n// It is not a stable interface.\nvar NewPageInfo = newPageInfo\n\n// If an iterator can support paging, its iterator-creating method should call\n// this (via the NewPageInfo variable above).\n//\n// The fetch, bufLen and takeBuf arguments provide access to the\n// iterator's internal slice of buffered items. They behave as described in\n// PageInfo, above.\n//\n// The return value is the PageInfo.next method bound to the returned PageInfo value.\n// (Returning it avoids exporting PageInfo.next.)\nfunc newPageInfo(fetch func(int, string) (string, error), bufLen func() int, takeBuf func() interface{}) (*PageInfo, func() error) {\n\tpi := &PageInfo{\n\t\tfetch:   fetch,\n\t\tbufLen:  bufLen,\n\t\ttakeBuf: takeBuf,\n\t}\n\treturn pi, pi.next\n}\n\n// Remaining returns the number of items available before the iterator makes another API call.\nfunc (pi *PageInfo) Remaining() int { return pi.bufLen() }\n\n// next provides support for an iterator's Next function. An iterator's Next\n// should return the error returned by next if non-nil; else it can assume\n// there is at least one item in its buffer, and it should return that item and\n// remove it from the buffer.\nfunc (pi *PageInfo) next() error {\n\tpi.nextCalled = true\n\tif pi.err != nil { // Once we get an error, always return it.\n\t\t// TODO(jba): fix so users can retry on transient errors? Probably not worth it.\n\t\treturn pi.err\n\t}\n\tif pi.nextPageCalled {\n\t\tpi.err = errMixed\n\t\treturn pi.err\n\t}\n\t// Loop until we get some items or reach the end.\n\tfor pi.bufLen() == 0 && !pi.atEnd {\n\t\tif err := pi.fill(pi.MaxSize); err != nil {\n\t\t\tpi.err = err\n\t\t\treturn pi.err\n\t\t}\n\t\tif pi.Token == \"\" {\n\t\t\tpi.atEnd = true\n\t\t}\n\t}\n\t// Either the buffer is non-empty or pi.atEnd is true (or both).\n\tif pi.bufLen() == 0 {\n\t\t// The buffer is empty and pi.atEnd is true, i.e. the service has no\n\t\t// more items.\n\t\tpi.err = Done\n\t}\n\treturn pi.err\n}\n\n// Call the service to fill the buffer, using size and pi.Token. Set pi.Token to the\n// next-page token returned by the call.\n// If fill returns a non-nil error, the buffer will be empty.\nfunc (pi *PageInfo) fill(size int) error {\n\ttok, err := pi.fetch(size, pi.Token)\n\tif err != nil {\n\t\tpi.takeBuf() // clear the buffer\n\t\treturn err\n\t}\n\tpi.Token = tok\n\treturn nil\n}\n\n// Pageable is implemented by iterators that support paging.\ntype Pageable interface {\n\t// PageInfo returns paging information associated with the iterator.\n\tPageInfo() *PageInfo\n}\n\n// Pager supports retrieving iterator items a page at a time.\ntype Pager struct {\n\tpageInfo *PageInfo\n\tpageSize int\n}\n\n// NewPager returns a pager that uses iter. Calls to its NextPage method will\n// obtain exactly pageSize items, unless fewer remain. The pageToken argument\n// indicates where to start the iteration. Pass the empty string to start at\n// the beginning, or pass a token retrieved from a call to Pager.NextPage.\n//\n// If you use an iterator with a Pager, you must not call Next on the iterator.\nfunc NewPager(iter Pageable, pageSize int, pageToken string) *Pager {\n\tp := &Pager{\n\t\tpageInfo: iter.PageInfo(),\n\t\tpageSize: pageSize,\n\t}\n\tp.pageInfo.Token = pageToken\n\tif pageSize <= 0 {\n\t\tp.pageInfo.err = errors.New(\"iterator: page size must be positive\")\n\t}\n\treturn p\n}\n\n// NextPage retrieves a sequence of items from the iterator and appends them\n// to slicep, which must be a pointer to a slice of the iterator's item type.\n// Exactly p.pageSize items will be appended, unless fewer remain.\n//\n// The first return value is the page token to use for the next page of items.\n// If empty, there are no more pages. Aside from checking for the end of the\n// iteration, the returned page token is only needed if the iteration is to be\n// resumed a later time, in another context (possibly another process).\n//\n// The second return value is non-nil if an error occurred. It will never be\n// the special iterator sentinel value Done. To recognize the end of the\n// iteration, compare nextPageToken to the empty string.\n//\n// It is possible for NextPage to return a single zero-length page along with\n// an empty page token when there are no more items in the iteration.\nfunc (p *Pager) NextPage(slicep interface{}) (nextPageToken string, err error) {\n\tp.pageInfo.nextPageCalled = true\n\tif p.pageInfo.err != nil {\n\t\treturn \"\", p.pageInfo.err\n\t}\n\tif p.pageInfo.nextCalled {\n\t\tp.pageInfo.err = errMixed\n\t\treturn \"\", p.pageInfo.err\n\t}\n\tif p.pageInfo.bufLen() > 0 {\n\t\treturn \"\", errors.New(\"must call NextPage with an empty buffer\")\n\t}\n\t// The buffer must be empty here, so takeBuf is a no-op. We call it just to get\n\t// the buffer's type.\n\twantSliceType := reflect.PtrTo(reflect.ValueOf(p.pageInfo.takeBuf()).Type())\n\tif slicep == nil {\n\t\treturn \"\", errors.New(\"nil passed to Pager.NextPage\")\n\t}\n\tvslicep := reflect.ValueOf(slicep)\n\tif vslicep.Type() != wantSliceType {\n\t\treturn \"\", fmt.Errorf(\"slicep should be of type %s, got %T\", wantSliceType, slicep)\n\t}\n\tfor p.pageInfo.bufLen() < p.pageSize {\n\t\tif err := p.pageInfo.fill(p.pageSize - p.pageInfo.bufLen()); err != nil {\n\t\t\tp.pageInfo.err = err\n\t\t\treturn \"\", p.pageInfo.err\n\t\t}\n\t\tif p.pageInfo.Token == \"\" {\n\t\t\tbreak\n\t\t}\n\t}\n\te := vslicep.Elem()\n\te.Set(reflect.AppendSlice(e, reflect.ValueOf(p.pageInfo.takeBuf())))\n\treturn p.pageInfo.Token, nil\n}\n"
  },
  {
    "path": "vendor/google.golang.org/api/option/credentials_go19.go",
    "content": "// Copyright 2018 Google LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// +build go1.9\n\npackage option\n\nimport (\n\t\"golang.org/x/oauth2/google\"\n\t\"google.golang.org/api/internal\"\n)\n\ntype withCreds google.Credentials\n\nfunc (w *withCreds) Apply(o *internal.DialSettings) {\n\to.Credentials = (*google.Credentials)(w)\n}\n\n// WithCredentials returns a ClientOption that authenticates API calls.\nfunc WithCredentials(creds *google.Credentials) ClientOption {\n\treturn (*withCreds)(creds)\n}\n"
  },
  {
    "path": "vendor/google.golang.org/api/option/credentials_notgo19.go",
    "content": "// Copyright 2018 Google LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// +build !go1.9\n\npackage option\n\nimport (\n\t\"golang.org/x/oauth2/google\"\n\t\"google.golang.org/api/internal\"\n)\n\ntype withCreds google.DefaultCredentials\n\nfunc (w *withCreds) Apply(o *internal.DialSettings) {\n\to.Credentials = (*google.DefaultCredentials)(w)\n}\n\nfunc WithCredentials(creds *google.DefaultCredentials) ClientOption {\n\treturn (*withCreds)(creds)\n}\n"
  },
  {
    "path": "vendor/google.golang.org/api/option/option.go",
    "content": "// Copyright 2017 Google LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// Package option contains options for Google API clients.\npackage option\n\nimport (\n\t\"net/http\"\n\n\t\"golang.org/x/oauth2\"\n\t\"google.golang.org/api/internal\"\n\t\"google.golang.org/grpc\"\n)\n\n// A ClientOption is an option for a Google API client.\ntype ClientOption interface {\n\tApply(*internal.DialSettings)\n}\n\n// WithTokenSource returns a ClientOption that specifies an OAuth2 token\n// source to be used as the basis for authentication.\nfunc WithTokenSource(s oauth2.TokenSource) ClientOption {\n\treturn withTokenSource{s}\n}\n\ntype withTokenSource struct{ ts oauth2.TokenSource }\n\nfunc (w withTokenSource) Apply(o *internal.DialSettings) {\n\to.TokenSource = w.ts\n}\n\ntype withCredFile string\n\nfunc (w withCredFile) Apply(o *internal.DialSettings) {\n\to.CredentialsFile = string(w)\n}\n\n// WithCredentialsFile returns a ClientOption that authenticates\n// API calls with the given service account or refresh token JSON\n// credentials file.\nfunc WithCredentialsFile(filename string) ClientOption {\n\treturn withCredFile(filename)\n}\n\n// WithServiceAccountFile returns a ClientOption that uses a Google service\n// account credentials file to authenticate.\n//\n// Deprecated: Use WithCredentialsFile instead.\nfunc WithServiceAccountFile(filename string) ClientOption {\n\treturn WithCredentialsFile(filename)\n}\n\n// WithCredentialsJSON returns a ClientOption that authenticates\n// API calls with the given service account or refresh token JSON\n// credentials.\nfunc WithCredentialsJSON(p []byte) ClientOption {\n\treturn withCredentialsJSON(p)\n}\n\ntype withCredentialsJSON []byte\n\nfunc (w withCredentialsJSON) Apply(o *internal.DialSettings) {\n\to.CredentialsJSON = make([]byte, len(w))\n\tcopy(o.CredentialsJSON, w)\n}\n\n// WithEndpoint returns a ClientOption that overrides the default endpoint\n// to be used for a service.\nfunc WithEndpoint(url string) ClientOption {\n\treturn withEndpoint(url)\n}\n\ntype withEndpoint string\n\nfunc (w withEndpoint) Apply(o *internal.DialSettings) {\n\to.Endpoint = string(w)\n}\n\n// WithScopes returns a ClientOption that overrides the default OAuth2 scopes\n// to be used for a service.\nfunc WithScopes(scope ...string) ClientOption {\n\treturn withScopes(scope)\n}\n\ntype withScopes []string\n\nfunc (w withScopes) Apply(o *internal.DialSettings) {\n\to.Scopes = make([]string, len(w))\n\tcopy(o.Scopes, w)\n}\n\n// WithUserAgent returns a ClientOption that sets the User-Agent.\nfunc WithUserAgent(ua string) ClientOption {\n\treturn withUA(ua)\n}\n\ntype withUA string\n\nfunc (w withUA) Apply(o *internal.DialSettings) { o.UserAgent = string(w) }\n\n// WithHTTPClient returns a ClientOption that specifies the HTTP client to use\n// as the basis of communications. This option may only be used with services\n// that support HTTP as their communication transport. When used, the\n// WithHTTPClient option takes precedent over all other supplied options.\nfunc WithHTTPClient(client *http.Client) ClientOption {\n\treturn withHTTPClient{client}\n}\n\ntype withHTTPClient struct{ client *http.Client }\n\nfunc (w withHTTPClient) Apply(o *internal.DialSettings) {\n\to.HTTPClient = w.client\n}\n\n// WithGRPCConn returns a ClientOption that specifies the gRPC client\n// connection to use as the basis of communications. This option many only be\n// used with services that support gRPC as their communication transport. When\n// used, the WithGRPCConn option takes precedent over all other supplied\n// options.\nfunc WithGRPCConn(conn *grpc.ClientConn) ClientOption {\n\treturn withGRPCConn{conn}\n}\n\ntype withGRPCConn struct{ conn *grpc.ClientConn }\n\nfunc (w withGRPCConn) Apply(o *internal.DialSettings) {\n\to.GRPCConn = w.conn\n}\n\n// WithGRPCDialOption returns a ClientOption that appends a new grpc.DialOption\n// to an underlying gRPC dial. It does not work with WithGRPCConn.\nfunc WithGRPCDialOption(opt grpc.DialOption) ClientOption {\n\treturn withGRPCDialOption{opt}\n}\n\ntype withGRPCDialOption struct{ opt grpc.DialOption }\n\nfunc (w withGRPCDialOption) Apply(o *internal.DialSettings) {\n\to.GRPCDialOpts = append(o.GRPCDialOpts, w.opt)\n}\n\n// WithGRPCConnectionPool returns a ClientOption that creates a pool of gRPC\n// connections that requests will be balanced between.\n// This is an EXPERIMENTAL API and may be changed or removed in the future.\nfunc WithGRPCConnectionPool(size int) ClientOption {\n\treturn withGRPCConnectionPool(size)\n}\n\ntype withGRPCConnectionPool int\n\nfunc (w withGRPCConnectionPool) Apply(o *internal.DialSettings) {\n\tbalancer := grpc.RoundRobin(internal.NewPoolResolver(int(w), o))\n\to.GRPCDialOpts = append(o.GRPCDialOpts, grpc.WithBalancer(balancer))\n}\n\n// WithAPIKey returns a ClientOption that specifies an API key to be used\n// as the basis for authentication.\n//\n// API Keys can only be used for JSON-over-HTTP APIs, including those under\n// the import path google.golang.org/api/....\nfunc WithAPIKey(apiKey string) ClientOption {\n\treturn withAPIKey(apiKey)\n}\n\ntype withAPIKey string\n\nfunc (w withAPIKey) Apply(o *internal.DialSettings) { o.APIKey = string(w) }\n\n// WithAudiences returns a ClientOption that specifies an audience to be used\n// as the audience field (\"aud\") for the JWT token authentication.\nfunc WithAudiences(audience ...string) ClientOption {\n\treturn withAudiences(audience)\n}\n\ntype withAudiences []string\n\nfunc (w withAudiences) Apply(o *internal.DialSettings) {\n\to.Audiences = make([]string, len(w))\n\tcopy(o.Audiences, w)\n}\n\n// WithoutAuthentication returns a ClientOption that specifies that no\n// authentication should be used. It is suitable only for testing and for\n// accessing public resources, like public Google Cloud Storage buckets.\n// It is an error to provide both WithoutAuthentication and any of WithAPIKey,\n// WithTokenSource, WithCredentialsFile or WithServiceAccountFile.\nfunc WithoutAuthentication() ClientOption {\n\treturn withoutAuthentication{}\n}\n\ntype withoutAuthentication struct{}\n\nfunc (w withoutAuthentication) Apply(o *internal.DialSettings) { o.NoAuth = true }\n\n// WithQuotaProject returns a ClientOption that specifies the project used\n// for quota and billing purposes.\n//\n// For more information please read:\n// https://cloud.google.com/apis/docs/system-parameters\nfunc WithQuotaProject(quotaProject string) ClientOption {\n\treturn withQuotaProject(quotaProject)\n}\n\ntype withQuotaProject string\n\nfunc (w withQuotaProject) Apply(o *internal.DialSettings) {\n\to.QuotaProject = string(w)\n}\n\n// WithRequestReason returns a ClientOption that specifies a reason for\n// making the request, which is intended to be recorded in audit logging.\n// An example reason would be a support-case ticket number.\n//\n// For more information please read:\n// https://cloud.google.com/apis/docs/system-parameters\nfunc WithRequestReason(requestReason string) ClientOption {\n\treturn withRequestReason(requestReason)\n}\n\ntype withRequestReason string\n\nfunc (w withRequestReason) Apply(o *internal.DialSettings) {\n\to.RequestReason = string(w)\n}\n"
  },
  {
    "path": "vendor/google.golang.org/api/storage/v1/storage-gen.go",
    "content": "// Copyright 2019 Google LLC.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Code generated file. DO NOT EDIT.\n\n// Package storage provides access to the Cloud Storage JSON API.\n//\n// This package is DEPRECATED. Use package cloud.google.com/go/storage instead.\n//\n// For product documentation, see: https://developers.google.com/storage/docs/json_api/\n//\n// Creating a client\n//\n// Usage example:\n//\n//   import \"google.golang.org/api/storage/v1\"\n//   ...\n//   ctx := context.Background()\n//   storageService, err := storage.NewService(ctx)\n//\n// In this example, Google Application Default Credentials are used for authentication.\n//\n// For information on how to create and obtain Application Default Credentials, see https://developers.google.com/identity/protocols/application-default-credentials.\n//\n// Other authentication options\n//\n// By default, all available scopes (see \"Constants\") are used to authenticate. To restrict scopes, use option.WithScopes:\n//\n//   storageService, err := storage.NewService(ctx, option.WithScopes(storage.DevstorageReadWriteScope))\n//\n// To use an API key for authentication (note: some APIs do not support API keys), use option.WithAPIKey:\n//\n//   storageService, err := storage.NewService(ctx, option.WithAPIKey(\"AIza...\"))\n//\n// To use an OAuth token (e.g., a user token obtained via a three-legged OAuth flow), use option.WithTokenSource:\n//\n//   config := &oauth2.Config{...}\n//   // ...\n//   token, err := config.Exchange(ctx, ...)\n//   storageService, err := storage.NewService(ctx, option.WithTokenSource(config.TokenSource(ctx, token)))\n//\n// See https://godoc.org/google.golang.org/api/option/ for details on options.\npackage storage // import \"google.golang.org/api/storage/v1\"\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"strconv\"\n\t\"strings\"\n\n\tgensupport \"google.golang.org/api/gensupport\"\n\tgoogleapi \"google.golang.org/api/googleapi\"\n\toption \"google.golang.org/api/option\"\n\thtransport \"google.golang.org/api/transport/http\"\n)\n\n// Always reference these packages, just in case the auto-generated code\n// below doesn't.\nvar _ = bytes.NewBuffer\nvar _ = strconv.Itoa\nvar _ = fmt.Sprintf\nvar _ = json.NewDecoder\nvar _ = io.Copy\nvar _ = url.Parse\nvar _ = gensupport.MarshalJSON\nvar _ = googleapi.Version\nvar _ = errors.New\nvar _ = strings.Replace\nvar _ = context.Canceled\n\nconst apiId = \"storage:v1\"\nconst apiName = \"storage\"\nconst apiVersion = \"v1\"\nconst basePath = \"https://www.googleapis.com/storage/v1/\"\n\n// OAuth2 scopes used by this API.\nconst (\n\t// View and manage your data across Google Cloud Platform services\n\tCloudPlatformScope = \"https://www.googleapis.com/auth/cloud-platform\"\n\n\t// View your data across Google Cloud Platform services\n\tCloudPlatformReadOnlyScope = \"https://www.googleapis.com/auth/cloud-platform.read-only\"\n\n\t// Manage your data and permissions in Google Cloud Storage\n\tDevstorageFullControlScope = \"https://www.googleapis.com/auth/devstorage.full_control\"\n\n\t// View your data in Google Cloud Storage\n\tDevstorageReadOnlyScope = \"https://www.googleapis.com/auth/devstorage.read_only\"\n\n\t// Manage your data in Google Cloud Storage\n\tDevstorageReadWriteScope = \"https://www.googleapis.com/auth/devstorage.read_write\"\n)\n\n// NewService creates a new Service.\nfunc NewService(ctx context.Context, opts ...option.ClientOption) (*Service, error) {\n\tscopesOption := option.WithScopes(\n\t\t\"https://www.googleapis.com/auth/cloud-platform\",\n\t\t\"https://www.googleapis.com/auth/cloud-platform.read-only\",\n\t\t\"https://www.googleapis.com/auth/devstorage.full_control\",\n\t\t\"https://www.googleapis.com/auth/devstorage.read_only\",\n\t\t\"https://www.googleapis.com/auth/devstorage.read_write\",\n\t)\n\t// NOTE: prepend, so we don't override user-specified scopes.\n\topts = append([]option.ClientOption{scopesOption}, opts...)\n\tclient, endpoint, err := htransport.NewClient(ctx, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\ts, err := New(client)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif endpoint != \"\" {\n\t\ts.BasePath = endpoint\n\t}\n\treturn s, nil\n}\n\n// New creates a new Service. It uses the provided http.Client for requests.\n//\n// Deprecated: please use NewService instead.\n// To provide a custom HTTP client, use option.WithHTTPClient.\n// If you are using google.golang.org/api/googleapis/transport.APIKey, use option.WithAPIKey with NewService instead.\nfunc New(client *http.Client) (*Service, error) {\n\tif client == nil {\n\t\treturn nil, errors.New(\"client is nil\")\n\t}\n\ts := &Service{client: client, BasePath: basePath}\n\ts.BucketAccessControls = NewBucketAccessControlsService(s)\n\ts.Buckets = NewBucketsService(s)\n\ts.Channels = NewChannelsService(s)\n\ts.DefaultObjectAccessControls = NewDefaultObjectAccessControlsService(s)\n\ts.Notifications = NewNotificationsService(s)\n\ts.ObjectAccessControls = NewObjectAccessControlsService(s)\n\ts.Objects = NewObjectsService(s)\n\ts.Projects = NewProjectsService(s)\n\treturn s, nil\n}\n\ntype Service struct {\n\tclient    *http.Client\n\tBasePath  string // API endpoint base URL\n\tUserAgent string // optional additional User-Agent fragment\n\n\tBucketAccessControls *BucketAccessControlsService\n\n\tBuckets *BucketsService\n\n\tChannels *ChannelsService\n\n\tDefaultObjectAccessControls *DefaultObjectAccessControlsService\n\n\tNotifications *NotificationsService\n\n\tObjectAccessControls *ObjectAccessControlsService\n\n\tObjects *ObjectsService\n\n\tProjects *ProjectsService\n}\n\nfunc (s *Service) userAgent() string {\n\tif s.UserAgent == \"\" {\n\t\treturn googleapi.UserAgent\n\t}\n\treturn googleapi.UserAgent + \" \" + s.UserAgent\n}\n\nfunc NewBucketAccessControlsService(s *Service) *BucketAccessControlsService {\n\trs := &BucketAccessControlsService{s: s}\n\treturn rs\n}\n\ntype BucketAccessControlsService struct {\n\ts *Service\n}\n\nfunc NewBucketsService(s *Service) *BucketsService {\n\trs := &BucketsService{s: s}\n\treturn rs\n}\n\ntype BucketsService struct {\n\ts *Service\n}\n\nfunc NewChannelsService(s *Service) *ChannelsService {\n\trs := &ChannelsService{s: s}\n\treturn rs\n}\n\ntype ChannelsService struct {\n\ts *Service\n}\n\nfunc NewDefaultObjectAccessControlsService(s *Service) *DefaultObjectAccessControlsService {\n\trs := &DefaultObjectAccessControlsService{s: s}\n\treturn rs\n}\n\ntype DefaultObjectAccessControlsService struct {\n\ts *Service\n}\n\nfunc NewNotificationsService(s *Service) *NotificationsService {\n\trs := &NotificationsService{s: s}\n\treturn rs\n}\n\ntype NotificationsService struct {\n\ts *Service\n}\n\nfunc NewObjectAccessControlsService(s *Service) *ObjectAccessControlsService {\n\trs := &ObjectAccessControlsService{s: s}\n\treturn rs\n}\n\ntype ObjectAccessControlsService struct {\n\ts *Service\n}\n\nfunc NewObjectsService(s *Service) *ObjectsService {\n\trs := &ObjectsService{s: s}\n\treturn rs\n}\n\ntype ObjectsService struct {\n\ts *Service\n}\n\nfunc NewProjectsService(s *Service) *ProjectsService {\n\trs := &ProjectsService{s: s}\n\trs.HmacKeys = NewProjectsHmacKeysService(s)\n\trs.ServiceAccount = NewProjectsServiceAccountService(s)\n\treturn rs\n}\n\ntype ProjectsService struct {\n\ts *Service\n\n\tHmacKeys *ProjectsHmacKeysService\n\n\tServiceAccount *ProjectsServiceAccountService\n}\n\nfunc NewProjectsHmacKeysService(s *Service) *ProjectsHmacKeysService {\n\trs := &ProjectsHmacKeysService{s: s}\n\treturn rs\n}\n\ntype ProjectsHmacKeysService struct {\n\ts *Service\n}\n\nfunc NewProjectsServiceAccountService(s *Service) *ProjectsServiceAccountService {\n\trs := &ProjectsServiceAccountService{s: s}\n\treturn rs\n}\n\ntype ProjectsServiceAccountService struct {\n\ts *Service\n}\n\n// Bucket: A bucket.\ntype Bucket struct {\n\t// Acl: Access controls on the bucket.\n\tAcl []*BucketAccessControl `json:\"acl,omitempty\"`\n\n\t// Billing: The bucket's billing configuration.\n\tBilling *BucketBilling `json:\"billing,omitempty\"`\n\n\t// Cors: The bucket's Cross-Origin Resource Sharing (CORS)\n\t// configuration.\n\tCors []*BucketCors `json:\"cors,omitempty\"`\n\n\t// DefaultEventBasedHold: The default value for event-based hold on\n\t// newly created objects in this bucket. Event-based hold is a way to\n\t// retain objects indefinitely until an event occurs, signified by the\n\t// hold's release. After being released, such objects will be subject to\n\t// bucket-level retention (if any). One sample use case of this flag is\n\t// for banks to hold loan documents for at least 3 years after loan is\n\t// paid in full. Here, bucket-level retention is 3 years and the event\n\t// is loan being paid in full. In this example, these objects will be\n\t// held intact for any number of years until the event has occurred\n\t// (event-based hold on the object is released) and then 3 more years\n\t// after that. That means retention duration of the objects begins from\n\t// the moment event-based hold transitioned from true to false. Objects\n\t// under event-based hold cannot be deleted, overwritten or archived\n\t// until the hold is removed.\n\tDefaultEventBasedHold bool `json:\"defaultEventBasedHold,omitempty\"`\n\n\t// DefaultObjectAcl: Default access controls to apply to new objects\n\t// when no ACL is provided.\n\tDefaultObjectAcl []*ObjectAccessControl `json:\"defaultObjectAcl,omitempty\"`\n\n\t// Encryption: Encryption configuration for a bucket.\n\tEncryption *BucketEncryption `json:\"encryption,omitempty\"`\n\n\t// Etag: HTTP 1.1 Entity tag for the bucket.\n\tEtag string `json:\"etag,omitempty\"`\n\n\t// IamConfiguration: The bucket's IAM configuration.\n\tIamConfiguration *BucketIamConfiguration `json:\"iamConfiguration,omitempty\"`\n\n\t// Id: The ID of the bucket. For buckets, the id and name properties are\n\t// the same.\n\tId string `json:\"id,omitempty\"`\n\n\t// Kind: The kind of item this is. For buckets, this is always\n\t// storage#bucket.\n\tKind string `json:\"kind,omitempty\"`\n\n\t// Labels: User-provided labels, in key/value pairs.\n\tLabels map[string]string `json:\"labels,omitempty\"`\n\n\t// Lifecycle: The bucket's lifecycle configuration. See lifecycle\n\t// management for more information.\n\tLifecycle *BucketLifecycle `json:\"lifecycle,omitempty\"`\n\n\t// Location: The location of the bucket. Object data for objects in the\n\t// bucket resides in physical storage within this region. Defaults to\n\t// US. See the developer's guide for the authoritative list.\n\tLocation string `json:\"location,omitempty\"`\n\n\t// LocationType: The type of the bucket location.\n\tLocationType string `json:\"locationType,omitempty\"`\n\n\t// Logging: The bucket's logging configuration, which defines the\n\t// destination bucket and optional name prefix for the current bucket's\n\t// logs.\n\tLogging *BucketLogging `json:\"logging,omitempty\"`\n\n\t// Metageneration: The metadata generation of this bucket.\n\tMetageneration int64 `json:\"metageneration,omitempty,string\"`\n\n\t// Name: The name of the bucket.\n\tName string `json:\"name,omitempty\"`\n\n\t// Owner: The owner of the bucket. This is always the project team's\n\t// owner group.\n\tOwner *BucketOwner `json:\"owner,omitempty\"`\n\n\t// ProjectNumber: The project number of the project the bucket belongs\n\t// to.\n\tProjectNumber uint64 `json:\"projectNumber,omitempty,string\"`\n\n\t// RetentionPolicy: The bucket's retention policy. The retention policy\n\t// enforces a minimum retention time for all objects contained in the\n\t// bucket, based on their creation time. Any attempt to overwrite or\n\t// delete objects younger than the retention period will result in a\n\t// PERMISSION_DENIED error. An unlocked retention policy can be modified\n\t// or removed from the bucket via a storage.buckets.update operation. A\n\t// locked retention policy cannot be removed or shortened in duration\n\t// for the lifetime of the bucket. Attempting to remove or decrease\n\t// period of a locked retention policy will result in a\n\t// PERMISSION_DENIED error.\n\tRetentionPolicy *BucketRetentionPolicy `json:\"retentionPolicy,omitempty\"`\n\n\t// SelfLink: The URI of this bucket.\n\tSelfLink string `json:\"selfLink,omitempty\"`\n\n\t// StorageClass: The bucket's default storage class, used whenever no\n\t// storageClass is specified for a newly-created object. This defines\n\t// how objects in the bucket are stored and determines the SLA and the\n\t// cost of storage. Values include MULTI_REGIONAL, REGIONAL, STANDARD,\n\t// NEARLINE, COLDLINE, and DURABLE_REDUCED_AVAILABILITY. If this value\n\t// is not specified when the bucket is created, it will default to\n\t// STANDARD. For more information, see storage classes.\n\tStorageClass string `json:\"storageClass,omitempty\"`\n\n\t// TimeCreated: The creation time of the bucket in RFC 3339 format.\n\tTimeCreated string `json:\"timeCreated,omitempty\"`\n\n\t// Updated: The modification time of the bucket in RFC 3339 format.\n\tUpdated string `json:\"updated,omitempty\"`\n\n\t// Versioning: The bucket's versioning configuration.\n\tVersioning *BucketVersioning `json:\"versioning,omitempty\"`\n\n\t// Website: The bucket's website configuration, controlling how the\n\t// service behaves when accessing bucket contents as a web site. See the\n\t// Static Website Examples for more information.\n\tWebsite *BucketWebsite `json:\"website,omitempty\"`\n\n\t// ServerResponse contains the HTTP response code and headers from the\n\t// server.\n\tgoogleapi.ServerResponse `json:\"-\"`\n\n\t// ForceSendFields is a list of field names (e.g. \"Acl\") to\n\t// unconditionally include in API requests. By default, fields with\n\t// empty values are omitted from API requests. However, any non-pointer,\n\t// non-interface field appearing in ForceSendFields will be sent to the\n\t// server regardless of whether the field is empty or not. This may be\n\t// used to include empty fields in Patch requests.\n\tForceSendFields []string `json:\"-\"`\n\n\t// NullFields is a list of field names (e.g. \"Acl\") to include in API\n\t// requests with the JSON null value. By default, fields with empty\n\t// values are omitted from API requests. However, any field with an\n\t// empty value appearing in NullFields will be sent to the server as\n\t// null. It is an error if a field in this list has a non-empty value.\n\t// This may be used to include null fields in Patch requests.\n\tNullFields []string `json:\"-\"`\n}\n\nfunc (s *Bucket) MarshalJSON() ([]byte, error) {\n\ttype NoMethod Bucket\n\traw := NoMethod(*s)\n\treturn gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)\n}\n\n// BucketBilling: The bucket's billing configuration.\ntype BucketBilling struct {\n\t// RequesterPays: When set to true, Requester Pays is enabled for this\n\t// bucket.\n\tRequesterPays bool `json:\"requesterPays,omitempty\"`\n\n\t// ForceSendFields is a list of field names (e.g. \"RequesterPays\") to\n\t// unconditionally include in API requests. By default, fields with\n\t// empty values are omitted from API requests. However, any non-pointer,\n\t// non-interface field appearing in ForceSendFields will be sent to the\n\t// server regardless of whether the field is empty or not. This may be\n\t// used to include empty fields in Patch requests.\n\tForceSendFields []string `json:\"-\"`\n\n\t// NullFields is a list of field names (e.g. \"RequesterPays\") to include\n\t// in API requests with the JSON null value. By default, fields with\n\t// empty values are omitted from API requests. However, any field with\n\t// an empty value appearing in NullFields will be sent to the server as\n\t// null. It is an error if a field in this list has a non-empty value.\n\t// This may be used to include null fields in Patch requests.\n\tNullFields []string `json:\"-\"`\n}\n\nfunc (s *BucketBilling) MarshalJSON() ([]byte, error) {\n\ttype NoMethod BucketBilling\n\traw := NoMethod(*s)\n\treturn gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)\n}\n\ntype BucketCors struct {\n\t// MaxAgeSeconds: The value, in seconds, to return in the\n\t// Access-Control-Max-Age header used in preflight responses.\n\tMaxAgeSeconds int64 `json:\"maxAgeSeconds,omitempty\"`\n\n\t// Method: The list of HTTP methods on which to include CORS response\n\t// headers, (GET, OPTIONS, POST, etc) Note: \"*\" is permitted in the list\n\t// of methods, and means \"any method\".\n\tMethod []string `json:\"method,omitempty\"`\n\n\t// Origin: The list of Origins eligible to receive CORS response\n\t// headers. Note: \"*\" is permitted in the list of origins, and means\n\t// \"any Origin\".\n\tOrigin []string `json:\"origin,omitempty\"`\n\n\t// ResponseHeader: The list of HTTP headers other than the simple\n\t// response headers to give permission for the user-agent to share\n\t// across domains.\n\tResponseHeader []string `json:\"responseHeader,omitempty\"`\n\n\t// ForceSendFields is a list of field names (e.g. \"MaxAgeSeconds\") to\n\t// unconditionally include in API requests. By default, fields with\n\t// empty values are omitted from API requests. However, any non-pointer,\n\t// non-interface field appearing in ForceSendFields will be sent to the\n\t// server regardless of whether the field is empty or not. This may be\n\t// used to include empty fields in Patch requests.\n\tForceSendFields []string `json:\"-\"`\n\n\t// NullFields is a list of field names (e.g. \"MaxAgeSeconds\") to include\n\t// in API requests with the JSON null value. By default, fields with\n\t// empty values are omitted from API requests. However, any field with\n\t// an empty value appearing in NullFields will be sent to the server as\n\t// null. It is an error if a field in this list has a non-empty value.\n\t// This may be used to include null fields in Patch requests.\n\tNullFields []string `json:\"-\"`\n}\n\nfunc (s *BucketCors) MarshalJSON() ([]byte, error) {\n\ttype NoMethod BucketCors\n\traw := NoMethod(*s)\n\treturn gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)\n}\n\n// BucketEncryption: Encryption configuration for a bucket.\ntype BucketEncryption struct {\n\t// DefaultKmsKeyName: A Cloud KMS key that will be used to encrypt\n\t// objects inserted into this bucket, if no encryption method is\n\t// specified.\n\tDefaultKmsKeyName string `json:\"defaultKmsKeyName,omitempty\"`\n\n\t// ForceSendFields is a list of field names (e.g. \"DefaultKmsKeyName\")\n\t// to unconditionally include in API requests. By default, fields with\n\t// empty values are omitted from API requests. However, any non-pointer,\n\t// non-interface field appearing in ForceSendFields will be sent to the\n\t// server regardless of whether the field is empty or not. This may be\n\t// used to include empty fields in Patch requests.\n\tForceSendFields []string `json:\"-\"`\n\n\t// NullFields is a list of field names (e.g. \"DefaultKmsKeyName\") to\n\t// include in API requests with the JSON null value. By default, fields\n\t// with empty values are omitted from API requests. However, any field\n\t// with an empty value appearing in NullFields will be sent to the\n\t// server as null. It is an error if a field in this list has a\n\t// non-empty value. This may be used to include null fields in Patch\n\t// requests.\n\tNullFields []string `json:\"-\"`\n}\n\nfunc (s *BucketEncryption) MarshalJSON() ([]byte, error) {\n\ttype NoMethod BucketEncryption\n\traw := NoMethod(*s)\n\treturn gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)\n}\n\n// BucketIamConfiguration: The bucket's IAM configuration.\ntype BucketIamConfiguration struct {\n\t// BucketPolicyOnly: The bucket's Bucket Policy Only configuration.\n\tBucketPolicyOnly *BucketIamConfigurationBucketPolicyOnly `json:\"bucketPolicyOnly,omitempty\"`\n\n\t// ForceSendFields is a list of field names (e.g. \"BucketPolicyOnly\") to\n\t// unconditionally include in API requests. By default, fields with\n\t// empty values are omitted from API requests. However, any non-pointer,\n\t// non-interface field appearing in ForceSendFields will be sent to the\n\t// server regardless of whether the field is empty or not. This may be\n\t// used to include empty fields in Patch requests.\n\tForceSendFields []string `json:\"-\"`\n\n\t// NullFields is a list of field names (e.g. \"BucketPolicyOnly\") to\n\t// include in API requests with the JSON null value. By default, fields\n\t// with empty values are omitted from API requests. However, any field\n\t// with an empty value appearing in NullFields will be sent to the\n\t// server as null. It is an error if a field in this list has a\n\t// non-empty value. This may be used to include null fields in Patch\n\t// requests.\n\tNullFields []string `json:\"-\"`\n}\n\nfunc (s *BucketIamConfiguration) MarshalJSON() ([]byte, error) {\n\ttype NoMethod BucketIamConfiguration\n\traw := NoMethod(*s)\n\treturn gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)\n}\n\n// BucketIamConfigurationBucketPolicyOnly: The bucket's Bucket Policy\n// Only configuration.\ntype BucketIamConfigurationBucketPolicyOnly struct {\n\t// Enabled: If set, access checks only use bucket-level IAM policies or\n\t// above.\n\tEnabled bool `json:\"enabled,omitempty\"`\n\n\t// LockedTime: The deadline time for changing\n\t// iamConfiguration.bucketPolicyOnly.enabled from true to false in RFC\n\t// 3339 format. iamConfiguration.bucketPolicyOnly.enabled may be changed\n\t// from true to false until the locked time, after which the field is\n\t// immutable.\n\tLockedTime string `json:\"lockedTime,omitempty\"`\n\n\t// ForceSendFields is a list of field names (e.g. \"Enabled\") to\n\t// unconditionally include in API requests. By default, fields with\n\t// empty values are omitted from API requests. However, any non-pointer,\n\t// non-interface field appearing in ForceSendFields will be sent to the\n\t// server regardless of whether the field is empty or not. This may be\n\t// used to include empty fields in Patch requests.\n\tForceSendFields []string `json:\"-\"`\n\n\t// NullFields is a list of field names (e.g. \"Enabled\") to include in\n\t// API requests with the JSON null value. By default, fields with empty\n\t// values are omitted from API requests. However, any field with an\n\t// empty value appearing in NullFields will be sent to the server as\n\t// null. It is an error if a field in this list has a non-empty value.\n\t// This may be used to include null fields in Patch requests.\n\tNullFields []string `json:\"-\"`\n}\n\nfunc (s *BucketIamConfigurationBucketPolicyOnly) MarshalJSON() ([]byte, error) {\n\ttype NoMethod BucketIamConfigurationBucketPolicyOnly\n\traw := NoMethod(*s)\n\treturn gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)\n}\n\n// BucketLifecycle: The bucket's lifecycle configuration. See lifecycle\n// management for more information.\ntype BucketLifecycle struct {\n\t// Rule: A lifecycle management rule, which is made of an action to take\n\t// and the condition(s) under which the action will be taken.\n\tRule []*BucketLifecycleRule `json:\"rule,omitempty\"`\n\n\t// ForceSendFields is a list of field names (e.g. \"Rule\") to\n\t// unconditionally include in API requests. By default, fields with\n\t// empty values are omitted from API requests. However, any non-pointer,\n\t// non-interface field appearing in ForceSendFields will be sent to the\n\t// server regardless of whether the field is empty or not. This may be\n\t// used to include empty fields in Patch requests.\n\tForceSendFields []string `json:\"-\"`\n\n\t// NullFields is a list of field names (e.g. \"Rule\") to include in API\n\t// requests with the JSON null value. By default, fields with empty\n\t// values are omitted from API requests. However, any field with an\n\t// empty value appearing in NullFields will be sent to the server as\n\t// null. It is an error if a field in this list has a non-empty value.\n\t// This may be used to include null fields in Patch requests.\n\tNullFields []string `json:\"-\"`\n}\n\nfunc (s *BucketLifecycle) MarshalJSON() ([]byte, error) {\n\ttype NoMethod BucketLifecycle\n\traw := NoMethod(*s)\n\treturn gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)\n}\n\ntype BucketLifecycleRule struct {\n\t// Action: The action to take.\n\tAction *BucketLifecycleRuleAction `json:\"action,omitempty\"`\n\n\t// Condition: The condition(s) under which the action will be taken.\n\tCondition *BucketLifecycleRuleCondition `json:\"condition,omitempty\"`\n\n\t// ForceSendFields is a list of field names (e.g. \"Action\") to\n\t// unconditionally include in API requests. By default, fields with\n\t// empty values are omitted from API requests. However, any non-pointer,\n\t// non-interface field appearing in ForceSendFields will be sent to the\n\t// server regardless of whether the field is empty or not. This may be\n\t// used to include empty fields in Patch requests.\n\tForceSendFields []string `json:\"-\"`\n\n\t// NullFields is a list of field names (e.g. \"Action\") to include in API\n\t// requests with the JSON null value. By default, fields with empty\n\t// values are omitted from API requests. However, any field with an\n\t// empty value appearing in NullFields will be sent to the server as\n\t// null. It is an error if a field in this list has a non-empty value.\n\t// This may be used to include null fields in Patch requests.\n\tNullFields []string `json:\"-\"`\n}\n\nfunc (s *BucketLifecycleRule) MarshalJSON() ([]byte, error) {\n\ttype NoMethod BucketLifecycleRule\n\traw := NoMethod(*s)\n\treturn gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)\n}\n\n// BucketLifecycleRuleAction: The action to take.\ntype BucketLifecycleRuleAction struct {\n\t// StorageClass: Target storage class. Required iff the type of the\n\t// action is SetStorageClass.\n\tStorageClass string `json:\"storageClass,omitempty\"`\n\n\t// Type: Type of the action. Currently, only Delete and SetStorageClass\n\t// are supported.\n\tType string `json:\"type,omitempty\"`\n\n\t// ForceSendFields is a list of field names (e.g. \"StorageClass\") to\n\t// unconditionally include in API requests. By default, fields with\n\t// empty values are omitted from API requests. However, any non-pointer,\n\t// non-interface field appearing in ForceSendFields will be sent to the\n\t// server regardless of whether the field is empty or not. This may be\n\t// used to include empty fields in Patch requests.\n\tForceSendFields []string `json:\"-\"`\n\n\t// NullFields is a list of field names (e.g. \"StorageClass\") to include\n\t// in API requests with the JSON null value. By default, fields with\n\t// empty values are omitted from API requests. However, any field with\n\t// an empty value appearing in NullFields will be sent to the server as\n\t// null. It is an error if a field in this list has a non-empty value.\n\t// This may be used to include null fields in Patch requests.\n\tNullFields []string `json:\"-\"`\n}\n\nfunc (s *BucketLifecycleRuleAction) MarshalJSON() ([]byte, error) {\n\ttype NoMethod BucketLifecycleRuleAction\n\traw := NoMethod(*s)\n\treturn gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)\n}\n\n// BucketLifecycleRuleCondition: The condition(s) under which the action\n// will be taken.\ntype BucketLifecycleRuleCondition struct {\n\t// Age: Age of an object (in days). This condition is satisfied when an\n\t// object reaches the specified age.\n\tAge int64 `json:\"age,omitempty\"`\n\n\t// CreatedBefore: A date in RFC 3339 format with only the date part (for\n\t// instance, \"2013-01-15\"). This condition is satisfied when an object\n\t// is created before midnight of the specified date in UTC.\n\tCreatedBefore string `json:\"createdBefore,omitempty\"`\n\n\t// IsLive: Relevant only for versioned objects. If the value is true,\n\t// this condition matches live objects; if the value is false, it\n\t// matches archived objects.\n\tIsLive *bool `json:\"isLive,omitempty\"`\n\n\t// MatchesPattern: A regular expression that satisfies the RE2 syntax.\n\t// This condition is satisfied when the name of the object matches the\n\t// RE2 pattern. Note: This feature is currently in the \"Early Access\"\n\t// launch stage and is only available to a whitelisted set of users;\n\t// that means that this feature may be changed in backward-incompatible\n\t// ways and that it is not guaranteed to be released.\n\tMatchesPattern string `json:\"matchesPattern,omitempty\"`\n\n\t// MatchesStorageClass: Objects having any of the storage classes\n\t// specified by this condition will be matched. Values include\n\t// MULTI_REGIONAL, REGIONAL, NEARLINE, COLDLINE, STANDARD, and\n\t// DURABLE_REDUCED_AVAILABILITY.\n\tMatchesStorageClass []string `json:\"matchesStorageClass,omitempty\"`\n\n\t// NumNewerVersions: Relevant only for versioned objects. If the value\n\t// is N, this condition is satisfied when there are at least N versions\n\t// (including the live version) newer than this version of the object.\n\tNumNewerVersions int64 `json:\"numNewerVersions,omitempty\"`\n\n\t// ForceSendFields is a list of field names (e.g. \"Age\") to\n\t// unconditionally include in API requests. By default, fields with\n\t// empty values are omitted from API requests. However, any non-pointer,\n\t// non-interface field appearing in ForceSendFields will be sent to the\n\t// server regardless of whether the field is empty or not. This may be\n\t// used to include empty fields in Patch requests.\n\tForceSendFields []string `json:\"-\"`\n\n\t// NullFields is a list of field names (e.g. \"Age\") to include in API\n\t// requests with the JSON null value. By default, fields with empty\n\t// values are omitted from API requests. However, any field with an\n\t// empty value appearing in NullFields will be sent to the server as\n\t// null. It is an error if a field in this list has a non-empty value.\n\t// This may be used to include null fields in Patch requests.\n\tNullFields []string `json:\"-\"`\n}\n\nfunc (s *BucketLifecycleRuleCondition) MarshalJSON() ([]byte, error) {\n\ttype NoMethod BucketLifecycleRuleCondition\n\traw := NoMethod(*s)\n\treturn gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)\n}\n\n// BucketLogging: The bucket's logging configuration, which defines the\n// destination bucket and optional name prefix for the current bucket's\n// logs.\ntype BucketLogging struct {\n\t// LogBucket: The destination bucket where the current bucket's logs\n\t// should be placed.\n\tLogBucket string `json:\"logBucket,omitempty\"`\n\n\t// LogObjectPrefix: A prefix for log object names.\n\tLogObjectPrefix string `json:\"logObjectPrefix,omitempty\"`\n\n\t// ForceSendFields is a list of field names (e.g. \"LogBucket\") to\n\t// unconditionally include in API requests. By default, fields with\n\t// empty values are omitted from API requests. However, any non-pointer,\n\t// non-interface field appearing in ForceSendFields will be sent to the\n\t// server regardless of whether the field is empty or not. This may be\n\t// used to include empty fields in Patch requests.\n\tForceSendFields []string `json:\"-\"`\n\n\t// NullFields is a list of field names (e.g. \"LogBucket\") to include in\n\t// API requests with the JSON null value. By default, fields with empty\n\t// values are omitted from API requests. However, any field with an\n\t// empty value appearing in NullFields will be sent to the server as\n\t// null. It is an error if a field in this list has a non-empty value.\n\t// This may be used to include null fields in Patch requests.\n\tNullFields []string `json:\"-\"`\n}\n\nfunc (s *BucketLogging) MarshalJSON() ([]byte, error) {\n\ttype NoMethod BucketLogging\n\traw := NoMethod(*s)\n\treturn gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)\n}\n\n// BucketOwner: The owner of the bucket. This is always the project\n// team's owner group.\ntype BucketOwner struct {\n\t// Entity: The entity, in the form project-owner-projectId.\n\tEntity string `json:\"entity,omitempty\"`\n\n\t// EntityId: The ID for the entity.\n\tEntityId string `json:\"entityId,omitempty\"`\n\n\t// ForceSendFields is a list of field names (e.g. \"Entity\") to\n\t// unconditionally include in API requests. By default, fields with\n\t// empty values are omitted from API requests. However, any non-pointer,\n\t// non-interface field appearing in ForceSendFields will be sent to the\n\t// server regardless of whether the field is empty or not. This may be\n\t// used to include empty fields in Patch requests.\n\tForceSendFields []string `json:\"-\"`\n\n\t// NullFields is a list of field names (e.g. \"Entity\") to include in API\n\t// requests with the JSON null value. By default, fields with empty\n\t// values are omitted from API requests. However, any field with an\n\t// empty value appearing in NullFields will be sent to the server as\n\t// null. It is an error if a field in this list has a non-empty value.\n\t// This may be used to include null fields in Patch requests.\n\tNullFields []string `json:\"-\"`\n}\n\nfunc (s *BucketOwner) MarshalJSON() ([]byte, error) {\n\ttype NoMethod BucketOwner\n\traw := NoMethod(*s)\n\treturn gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)\n}\n\n// BucketRetentionPolicy: The bucket's retention policy. The retention\n// policy enforces a minimum retention time for all objects contained in\n// the bucket, based on their creation time. Any attempt to overwrite or\n// delete objects younger than the retention period will result in a\n// PERMISSION_DENIED error. An unlocked retention policy can be modified\n// or removed from the bucket via a storage.buckets.update operation. A\n// locked retention policy cannot be removed or shortened in duration\n// for the lifetime of the bucket. Attempting to remove or decrease\n// period of a locked retention policy will result in a\n// PERMISSION_DENIED error.\ntype BucketRetentionPolicy struct {\n\t// EffectiveTime: Server-determined value that indicates the time from\n\t// which policy was enforced and effective. This value is in RFC 3339\n\t// format.\n\tEffectiveTime string `json:\"effectiveTime,omitempty\"`\n\n\t// IsLocked: Once locked, an object retention policy cannot be modified.\n\tIsLocked bool `json:\"isLocked,omitempty\"`\n\n\t// RetentionPeriod: The duration in seconds that objects need to be\n\t// retained. Retention duration must be greater than zero and less than\n\t// 100 years. Note that enforcement of retention periods less than a day\n\t// is not guaranteed. Such periods should only be used for testing\n\t// purposes.\n\tRetentionPeriod int64 `json:\"retentionPeriod,omitempty,string\"`\n\n\t// ForceSendFields is a list of field names (e.g. \"EffectiveTime\") to\n\t// unconditionally include in API requests. By default, fields with\n\t// empty values are omitted from API requests. However, any non-pointer,\n\t// non-interface field appearing in ForceSendFields will be sent to the\n\t// server regardless of whether the field is empty or not. This may be\n\t// used to include empty fields in Patch requests.\n\tForceSendFields []string `json:\"-\"`\n\n\t// NullFields is a list of field names (e.g. \"EffectiveTime\") to include\n\t// in API requests with the JSON null value. By default, fields with\n\t// empty values are omitted from API requests. However, any field with\n\t// an empty value appearing in NullFields will be sent to the server as\n\t// null. It is an error if a field in this list has a non-empty value.\n\t// This may be used to include null fields in Patch requests.\n\tNullFields []string `json:\"-\"`\n}\n\nfunc (s *BucketRetentionPolicy) MarshalJSON() ([]byte, error) {\n\ttype NoMethod BucketRetentionPolicy\n\traw := NoMethod(*s)\n\treturn gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)\n}\n\n// BucketVersioning: The bucket's versioning configuration.\ntype BucketVersioning struct {\n\t// Enabled: While set to true, versioning is fully enabled for this\n\t// bucket.\n\tEnabled bool `json:\"enabled,omitempty\"`\n\n\t// ForceSendFields is a list of field names (e.g. \"Enabled\") to\n\t// unconditionally include in API requests. By default, fields with\n\t// empty values are omitted from API requests. However, any non-pointer,\n\t// non-interface field appearing in ForceSendFields will be sent to the\n\t// server regardless of whether the field is empty or not. This may be\n\t// used to include empty fields in Patch requests.\n\tForceSendFields []string `json:\"-\"`\n\n\t// NullFields is a list of field names (e.g. \"Enabled\") to include in\n\t// API requests with the JSON null value. By default, fields with empty\n\t// values are omitted from API requests. However, any field with an\n\t// empty value appearing in NullFields will be sent to the server as\n\t// null. It is an error if a field in this list has a non-empty value.\n\t// This may be used to include null fields in Patch requests.\n\tNullFields []string `json:\"-\"`\n}\n\nfunc (s *BucketVersioning) MarshalJSON() ([]byte, error) {\n\ttype NoMethod BucketVersioning\n\traw := NoMethod(*s)\n\treturn gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)\n}\n\n// BucketWebsite: The bucket's website configuration, controlling how\n// the service behaves when accessing bucket contents as a web site. See\n// the Static Website Examples for more information.\ntype BucketWebsite struct {\n\t// MainPageSuffix: If the requested object path is missing, the service\n\t// will ensure the path has a trailing '/', append this suffix, and\n\t// attempt to retrieve the resulting object. This allows the creation of\n\t// index.html objects to represent directory pages.\n\tMainPageSuffix string `json:\"mainPageSuffix,omitempty\"`\n\n\t// NotFoundPage: If the requested object path is missing, and any\n\t// mainPageSuffix object is missing, if applicable, the service will\n\t// return the named object from this bucket as the content for a 404 Not\n\t// Found result.\n\tNotFoundPage string `json:\"notFoundPage,omitempty\"`\n\n\t// ForceSendFields is a list of field names (e.g. \"MainPageSuffix\") to\n\t// unconditionally include in API requests. By default, fields with\n\t// empty values are omitted from API requests. However, any non-pointer,\n\t// non-interface field appearing in ForceSendFields will be sent to the\n\t// server regardless of whether the field is empty or not. This may be\n\t// used to include empty fields in Patch requests.\n\tForceSendFields []string `json:\"-\"`\n\n\t// NullFields is a list of field names (e.g. \"MainPageSuffix\") to\n\t// include in API requests with the JSON null value. By default, fields\n\t// with empty values are omitted from API requests. However, any field\n\t// with an empty value appearing in NullFields will be sent to the\n\t// server as null. It is an error if a field in this list has a\n\t// non-empty value. This may be used to include null fields in Patch\n\t// requests.\n\tNullFields []string `json:\"-\"`\n}\n\nfunc (s *BucketWebsite) MarshalJSON() ([]byte, error) {\n\ttype NoMethod BucketWebsite\n\traw := NoMethod(*s)\n\treturn gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)\n}\n\n// BucketAccessControl: An access-control entry.\ntype BucketAccessControl struct {\n\t// Bucket: The name of the bucket.\n\tBucket string `json:\"bucket,omitempty\"`\n\n\t// Domain: The domain associated with the entity, if any.\n\tDomain string `json:\"domain,omitempty\"`\n\n\t// Email: The email address associated with the entity, if any.\n\tEmail string `json:\"email,omitempty\"`\n\n\t// Entity: The entity holding the permission, in one of the following\n\t// forms:\n\t// - user-userId\n\t// - user-email\n\t// - group-groupId\n\t// - group-email\n\t// - domain-domain\n\t// - project-team-projectId\n\t// - allUsers\n\t// - allAuthenticatedUsers Examples:\n\t// - The user liz@example.com would be user-liz@example.com.\n\t// - The group example@googlegroups.com would be\n\t// group-example@googlegroups.com.\n\t// - To refer to all members of the Google Apps for Business domain\n\t// example.com, the entity would be domain-example.com.\n\tEntity string `json:\"entity,omitempty\"`\n\n\t// EntityId: The ID for the entity, if any.\n\tEntityId string `json:\"entityId,omitempty\"`\n\n\t// Etag: HTTP 1.1 Entity tag for the access-control entry.\n\tEtag string `json:\"etag,omitempty\"`\n\n\t// Id: The ID of the access-control entry.\n\tId string `json:\"id,omitempty\"`\n\n\t// Kind: The kind of item this is. For bucket access control entries,\n\t// this is always storage#bucketAccessControl.\n\tKind string `json:\"kind,omitempty\"`\n\n\t// ProjectTeam: The project team associated with the entity, if any.\n\tProjectTeam *BucketAccessControlProjectTeam `json:\"projectTeam,omitempty\"`\n\n\t// Role: The access permission for the entity.\n\tRole string `json:\"role,omitempty\"`\n\n\t// SelfLink: The link to this access-control entry.\n\tSelfLink string `json:\"selfLink,omitempty\"`\n\n\t// ServerResponse contains the HTTP response code and headers from the\n\t// server.\n\tgoogleapi.ServerResponse `json:\"-\"`\n\n\t// ForceSendFields is a list of field names (e.g. \"Bucket\") to\n\t// unconditionally include in API requests. By default, fields with\n\t// empty values are omitted from API requests. However, any non-pointer,\n\t// non-interface field appearing in ForceSendFields will be sent to the\n\t// server regardless of whether the field is empty or not. This may be\n\t// used to include empty fields in Patch requests.\n\tForceSendFields []string `json:\"-\"`\n\n\t// NullFields is a list of field names (e.g. \"Bucket\") to include in API\n\t// requests with the JSON null value. By default, fields with empty\n\t// values are omitted from API requests. However, any field with an\n\t// empty value appearing in NullFields will be sent to the server as\n\t// null. It is an error if a field in this list has a non-empty value.\n\t// This may be used to include null fields in Patch requests.\n\tNullFields []string `json:\"-\"`\n}\n\nfunc (s *BucketAccessControl) MarshalJSON() ([]byte, error) {\n\ttype NoMethod BucketAccessControl\n\traw := NoMethod(*s)\n\treturn gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)\n}\n\n// BucketAccessControlProjectTeam: The project team associated with the\n// entity, if any.\ntype BucketAccessControlProjectTeam struct {\n\t// ProjectNumber: The project number.\n\tProjectNumber string `json:\"projectNumber,omitempty\"`\n\n\t// Team: The team.\n\tTeam string `json:\"team,omitempty\"`\n\n\t// ForceSendFields is a list of field names (e.g. \"ProjectNumber\") to\n\t// unconditionally include in API requests. By default, fields with\n\t// empty values are omitted from API requests. However, any non-pointer,\n\t// non-interface field appearing in ForceSendFields will be sent to the\n\t// server regardless of whether the field is empty or not. This may be\n\t// used to include empty fields in Patch requests.\n\tForceSendFields []string `json:\"-\"`\n\n\t// NullFields is a list of field names (e.g. \"ProjectNumber\") to include\n\t// in API requests with the JSON null value. By default, fields with\n\t// empty values are omitted from API requests. However, any field with\n\t// an empty value appearing in NullFields will be sent to the server as\n\t// null. It is an error if a field in this list has a non-empty value.\n\t// This may be used to include null fields in Patch requests.\n\tNullFields []string `json:\"-\"`\n}\n\nfunc (s *BucketAccessControlProjectTeam) MarshalJSON() ([]byte, error) {\n\ttype NoMethod BucketAccessControlProjectTeam\n\traw := NoMethod(*s)\n\treturn gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)\n}\n\n// BucketAccessControls: An access-control list.\ntype BucketAccessControls struct {\n\t// Items: The list of items.\n\tItems []*BucketAccessControl `json:\"items,omitempty\"`\n\n\t// Kind: The kind of item this is. For lists of bucket access control\n\t// entries, this is always storage#bucketAccessControls.\n\tKind string `json:\"kind,omitempty\"`\n\n\t// ServerResponse contains the HTTP response code and headers from the\n\t// server.\n\tgoogleapi.ServerResponse `json:\"-\"`\n\n\t// ForceSendFields is a list of field names (e.g. \"Items\") to\n\t// unconditionally include in API requests. By default, fields with\n\t// empty values are omitted from API requests. However, any non-pointer,\n\t// non-interface field appearing in ForceSendFields will be sent to the\n\t// server regardless of whether the field is empty or not. This may be\n\t// used to include empty fields in Patch requests.\n\tForceSendFields []string `json:\"-\"`\n\n\t// NullFields is a list of field names (e.g. \"Items\") to include in API\n\t// requests with the JSON null value. By default, fields with empty\n\t// values are omitted from API requests. However, any field with an\n\t// empty value appearing in NullFields will be sent to the server as\n\t// null. It is an error if a field in this list has a non-empty value.\n\t// This may be used to include null fields in Patch requests.\n\tNullFields []string `json:\"-\"`\n}\n\nfunc (s *BucketAccessControls) MarshalJSON() ([]byte, error) {\n\ttype NoMethod BucketAccessControls\n\traw := NoMethod(*s)\n\treturn gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)\n}\n\n// Buckets: A list of buckets.\ntype Buckets struct {\n\t// Items: The list of items.\n\tItems []*Bucket `json:\"items,omitempty\"`\n\n\t// Kind: The kind of item this is. For lists of buckets, this is always\n\t// storage#buckets.\n\tKind string `json:\"kind,omitempty\"`\n\n\t// NextPageToken: The continuation token, used to page through large\n\t// result sets. Provide this value in a subsequent request to return the\n\t// next page of results.\n\tNextPageToken string `json:\"nextPageToken,omitempty\"`\n\n\t// ServerResponse contains the HTTP response code and headers from the\n\t// server.\n\tgoogleapi.ServerResponse `json:\"-\"`\n\n\t// ForceSendFields is a list of field names (e.g. \"Items\") to\n\t// unconditionally include in API requests. By default, fields with\n\t// empty values are omitted from API requests. However, any non-pointer,\n\t// non-interface field appearing in ForceSendFields will be sent to the\n\t// server regardless of whether the field is empty or not. This may be\n\t// used to include empty fields in Patch requests.\n\tForceSendFields []string `json:\"-\"`\n\n\t// NullFields is a list of field names (e.g. \"Items\") to include in API\n\t// requests with the JSON null value. By default, fields with empty\n\t// values are omitted from API requests. However, any field with an\n\t// empty value appearing in NullFields will be sent to the server as\n\t// null. It is an error if a field in this list has a non-empty value.\n\t// This may be used to include null fields in Patch requests.\n\tNullFields []string `json:\"-\"`\n}\n\nfunc (s *Buckets) MarshalJSON() ([]byte, error) {\n\ttype NoMethod Buckets\n\traw := NoMethod(*s)\n\treturn gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)\n}\n\n// Channel: An notification channel used to watch for resource changes.\ntype Channel struct {\n\t// Address: The address where notifications are delivered for this\n\t// channel.\n\tAddress string `json:\"address,omitempty\"`\n\n\t// Expiration: Date and time of notification channel expiration,\n\t// expressed as a Unix timestamp, in milliseconds. Optional.\n\tExpiration int64 `json:\"expiration,omitempty,string\"`\n\n\t// Id: A UUID or similar unique string that identifies this channel.\n\tId string `json:\"id,omitempty\"`\n\n\t// Kind: Identifies this as a notification channel used to watch for\n\t// changes to a resource. Value: the fixed string \"api#channel\".\n\tKind string `json:\"kind,omitempty\"`\n\n\t// Params: Additional parameters controlling delivery channel behavior.\n\t// Optional.\n\tParams map[string]string `json:\"params,omitempty\"`\n\n\t// Payload: A Boolean value to indicate whether payload is wanted.\n\t// Optional.\n\tPayload bool `json:\"payload,omitempty\"`\n\n\t// ResourceId: An opaque ID that identifies the resource being watched\n\t// on this channel. Stable across different API versions.\n\tResourceId string `json:\"resourceId,omitempty\"`\n\n\t// ResourceUri: A version-specific identifier for the watched resource.\n\tResourceUri string `json:\"resourceUri,omitempty\"`\n\n\t// Token: An arbitrary string delivered to the target address with each\n\t// notification delivered over this channel. Optional.\n\tToken string `json:\"token,omitempty\"`\n\n\t// Type: The type of delivery mechanism used for this channel.\n\tType string `json:\"type,omitempty\"`\n\n\t// ServerResponse contains the HTTP response code and headers from the\n\t// server.\n\tgoogleapi.ServerResponse `json:\"-\"`\n\n\t// ForceSendFields is a list of field names (e.g. \"Address\") to\n\t// unconditionally include in API requests. By default, fields with\n\t// empty values are omitted from API requests. However, any non-pointer,\n\t// non-interface field appearing in ForceSendFields will be sent to the\n\t// server regardless of whether the field is empty or not. This may be\n\t// used to include empty fields in Patch requests.\n\tForceSendFields []string `json:\"-\"`\n\n\t// NullFields is a list of field names (e.g. \"Address\") to include in\n\t// API requests with the JSON null value. By default, fields with empty\n\t// values are omitted from API requests. However, any field with an\n\t// empty value appearing in NullFields will be sent to the server as\n\t// null. It is an error if a field in this list has a non-empty value.\n\t// This may be used to include null fields in Patch requests.\n\tNullFields []string `json:\"-\"`\n}\n\nfunc (s *Channel) MarshalJSON() ([]byte, error) {\n\ttype NoMethod Channel\n\traw := NoMethod(*s)\n\treturn gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)\n}\n\n// ComposeRequest: A Compose request.\ntype ComposeRequest struct {\n\t// Destination: Properties of the resulting object.\n\tDestination *Object `json:\"destination,omitempty\"`\n\n\t// Kind: The kind of item this is.\n\tKind string `json:\"kind,omitempty\"`\n\n\t// SourceObjects: The list of source objects that will be concatenated\n\t// into a single object.\n\tSourceObjects []*ComposeRequestSourceObjects `json:\"sourceObjects,omitempty\"`\n\n\t// ForceSendFields is a list of field names (e.g. \"Destination\") to\n\t// unconditionally include in API requests. By default, fields with\n\t// empty values are omitted from API requests. However, any non-pointer,\n\t// non-interface field appearing in ForceSendFields will be sent to the\n\t// server regardless of whether the field is empty or not. This may be\n\t// used to include empty fields in Patch requests.\n\tForceSendFields []string `json:\"-\"`\n\n\t// NullFields is a list of field names (e.g. \"Destination\") to include\n\t// in API requests with the JSON null value. By default, fields with\n\t// empty values are omitted from API requests. However, any field with\n\t// an empty value appearing in NullFields will be sent to the server as\n\t// null. It is an error if a field in this list has a non-empty value.\n\t// This may be used to include null fields in Patch requests.\n\tNullFields []string `json:\"-\"`\n}\n\nfunc (s *ComposeRequest) MarshalJSON() ([]byte, error) {\n\ttype NoMethod ComposeRequest\n\traw := NoMethod(*s)\n\treturn gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)\n}\n\ntype ComposeRequestSourceObjects struct {\n\t// Generation: The generation of this object to use as the source.\n\tGeneration int64 `json:\"generation,omitempty,string\"`\n\n\t// Name: The source object's name. All source objects must reside in the\n\t// same bucket.\n\tName string `json:\"name,omitempty\"`\n\n\t// ObjectPreconditions: Conditions that must be met for this operation\n\t// to execute.\n\tObjectPreconditions *ComposeRequestSourceObjectsObjectPreconditions `json:\"objectPreconditions,omitempty\"`\n\n\t// ForceSendFields is a list of field names (e.g. \"Generation\") to\n\t// unconditionally include in API requests. By default, fields with\n\t// empty values are omitted from API requests. However, any non-pointer,\n\t// non-interface field appearing in ForceSendFields will be sent to the\n\t// server regardless of whether the field is empty or not. This may be\n\t// used to include empty fields in Patch requests.\n\tForceSendFields []string `json:\"-\"`\n\n\t// NullFields is a list of field names (e.g. \"Generation\") to include in\n\t// API requests with the JSON null value. By default, fields with empty\n\t// values are omitted from API requests. However, any field with an\n\t// empty value appearing in NullFields will be sent to the server as\n\t// null. It is an error if a field in this list has a non-empty value.\n\t// This may be used to include null fields in Patch requests.\n\tNullFields []string `json:\"-\"`\n}\n\nfunc (s *ComposeRequestSourceObjects) MarshalJSON() ([]byte, error) {\n\ttype NoMethod ComposeRequestSourceObjects\n\traw := NoMethod(*s)\n\treturn gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)\n}\n\n// ComposeRequestSourceObjectsObjectPreconditions: Conditions that must\n// be met for this operation to execute.\ntype ComposeRequestSourceObjectsObjectPreconditions struct {\n\t// IfGenerationMatch: Only perform the composition if the generation of\n\t// the source object that would be used matches this value. If this\n\t// value and a generation are both specified, they must be the same\n\t// value or the call will fail.\n\tIfGenerationMatch int64 `json:\"ifGenerationMatch,omitempty,string\"`\n\n\t// ForceSendFields is a list of field names (e.g. \"IfGenerationMatch\")\n\t// to unconditionally include in API requests. By default, fields with\n\t// empty values are omitted from API requests. However, any non-pointer,\n\t// non-interface field appearing in ForceSendFields will be sent to the\n\t// server regardless of whether the field is empty or not. This may be\n\t// used to include empty fields in Patch requests.\n\tForceSendFields []string `json:\"-\"`\n\n\t// NullFields is a list of field names (e.g. \"IfGenerationMatch\") to\n\t// include in API requests with the JSON null value. By default, fields\n\t// with empty values are omitted from API requests. However, any field\n\t// with an empty value appearing in NullFields will be sent to the\n\t// server as null. It is an error if a field in this list has a\n\t// non-empty value. This may be used to include null fields in Patch\n\t// requests.\n\tNullFields []string `json:\"-\"`\n}\n\nfunc (s *ComposeRequestSourceObjectsObjectPreconditions) MarshalJSON() ([]byte, error) {\n\ttype NoMethod ComposeRequestSourceObjectsObjectPreconditions\n\traw := NoMethod(*s)\n\treturn gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)\n}\n\n// Expr: Represents an expression text. Example: title: \"User account\n// presence\" description: \"Determines whether the request has a user\n// account\" expression: \"size(request.user) > 0\"\ntype Expr struct {\n\t// Description: An optional description of the expression. This is a\n\t// longer text which describes the expression, e.g. when hovered over it\n\t// in a UI.\n\tDescription string `json:\"description,omitempty\"`\n\n\t// Expression: Textual representation of an expression in Common\n\t// Expression Language syntax. The application context of the containing\n\t// message determines which well-known feature set of CEL is supported.\n\tExpression string `json:\"expression,omitempty\"`\n\n\t// Kind: The kind of item this is. For storage, this is always\n\t// storage#expr. This field is ignored on input.\n\tKind string `json:\"kind,omitempty\"`\n\n\t// Location: An optional string indicating the location of the\n\t// expression for error reporting, e.g. a file name and a position in\n\t// the file.\n\tLocation string `json:\"location,omitempty\"`\n\n\t// Title: An optional title for the expression, i.e. a short string\n\t// describing its purpose. This can be used e.g. in UIs which allow to\n\t// enter the expression.\n\tTitle string `json:\"title,omitempty\"`\n\n\t// ForceSendFields is a list of field names (e.g. \"Description\") to\n\t// unconditionally include in API requests. By default, fields with\n\t// empty values are omitted from API requests. However, any non-pointer,\n\t// non-interface field appearing in ForceSendFields will be sent to the\n\t// server regardless of whether the field is empty or not. This may be\n\t// used to include empty fields in Patch requests.\n\tForceSendFields []string `json:\"-\"`\n\n\t// NullFields is a list of field names (e.g. \"Description\") to include\n\t// in API requests with the JSON null value. By default, fields with\n\t// empty values are omitted from API requests. However, any field with\n\t// an empty value appearing in NullFields will be sent to the server as\n\t// null. It is an error if a field in this list has a non-empty value.\n\t// This may be used to include null fields in Patch requests.\n\tNullFields []string `json:\"-\"`\n}\n\nfunc (s *Expr) MarshalJSON() ([]byte, error) {\n\ttype NoMethod Expr\n\traw := NoMethod(*s)\n\treturn gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)\n}\n\n// HmacKey: JSON template to produce a JSON-style HMAC Key resource for\n// Create responses.\ntype HmacKey struct {\n\t// Kind: The kind of item this is. For HMAC keys, this is always\n\t// storage#hmacKey.\n\tKind string `json:\"kind,omitempty\"`\n\n\t// Metadata: Key metadata.\n\tMetadata *HmacKeyMetadata `json:\"metadata,omitempty\"`\n\n\t// Secret: HMAC secret key material.\n\tSecret string `json:\"secret,omitempty\"`\n\n\t// ServerResponse contains the HTTP response code and headers from the\n\t// server.\n\tgoogleapi.ServerResponse `json:\"-\"`\n\n\t// ForceSendFields is a list of field names (e.g. \"Kind\") to\n\t// unconditionally include in API requests. By default, fields with\n\t// empty values are omitted from API requests. However, any non-pointer,\n\t// non-interface field appearing in ForceSendFields will be sent to the\n\t// server regardless of whether the field is empty or not. This may be\n\t// used to include empty fields in Patch requests.\n\tForceSendFields []string `json:\"-\"`\n\n\t// NullFields is a list of field names (e.g. \"Kind\") to include in API\n\t// requests with the JSON null value. By default, fields with empty\n\t// values are omitted from API requests. However, any field with an\n\t// empty value appearing in NullFields will be sent to the server as\n\t// null. It is an error if a field in this list has a non-empty value.\n\t// This may be used to include null fields in Patch requests.\n\tNullFields []string `json:\"-\"`\n}\n\nfunc (s *HmacKey) MarshalJSON() ([]byte, error) {\n\ttype NoMethod HmacKey\n\traw := NoMethod(*s)\n\treturn gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)\n}\n\n// HmacKeyMetadata: JSON template to produce a JSON-style HMAC Key\n// metadata resource.\ntype HmacKeyMetadata struct {\n\t// AccessId: The ID of the HMAC Key.\n\tAccessId string `json:\"accessId,omitempty\"`\n\n\t// Etag: HTTP 1.1 Entity tag for the HMAC key.\n\tEtag string `json:\"etag,omitempty\"`\n\n\t// Id: The ID of the HMAC key, including the Project ID and the Access\n\t// ID.\n\tId string `json:\"id,omitempty\"`\n\n\t// Kind: The kind of item this is. For HMAC Key metadata, this is always\n\t// storage#hmacKeyMetadata.\n\tKind string `json:\"kind,omitempty\"`\n\n\t// ProjectId: Project ID owning the service account to which the key\n\t// authenticates.\n\tProjectId string `json:\"projectId,omitempty\"`\n\n\t// SelfLink: The link to this resource.\n\tSelfLink string `json:\"selfLink,omitempty\"`\n\n\t// ServiceAccountEmail: The email address of the key's associated\n\t// service account.\n\tServiceAccountEmail string `json:\"serviceAccountEmail,omitempty\"`\n\n\t// State: The state of the key. Can be one of ACTIVE, INACTIVE, or\n\t// DELETED.\n\tState string `json:\"state,omitempty\"`\n\n\t// TimeCreated: The creation time of the HMAC key in RFC 3339 format.\n\tTimeCreated string `json:\"timeCreated,omitempty\"`\n\n\t// Updated: The last modification time of the HMAC key metadata in RFC\n\t// 3339 format.\n\tUpdated string `json:\"updated,omitempty\"`\n\n\t// ServerResponse contains the HTTP response code and headers from the\n\t// server.\n\tgoogleapi.ServerResponse `json:\"-\"`\n\n\t// ForceSendFields is a list of field names (e.g. \"AccessId\") to\n\t// unconditionally include in API requests. By default, fields with\n\t// empty values are omitted from API requests. However, any non-pointer,\n\t// non-interface field appearing in ForceSendFields will be sent to the\n\t// server regardless of whether the field is empty or not. This may be\n\t// used to include empty fields in Patch requests.\n\tForceSendFields []string `json:\"-\"`\n\n\t// NullFields is a list of field names (e.g. \"AccessId\") to include in\n\t// API requests with the JSON null value. By default, fields with empty\n\t// values are omitted from API requests. However, any field with an\n\t// empty value appearing in NullFields will be sent to the server as\n\t// null. It is an error if a field in this list has a non-empty value.\n\t// This may be used to include null fields in Patch requests.\n\tNullFields []string `json:\"-\"`\n}\n\nfunc (s *HmacKeyMetadata) MarshalJSON() ([]byte, error) {\n\ttype NoMethod HmacKeyMetadata\n\traw := NoMethod(*s)\n\treturn gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)\n}\n\n// HmacKeysMetadata: A list of hmacKeys.\ntype HmacKeysMetadata struct {\n\t// Items: The list of items.\n\tItems []*HmacKeyMetadata `json:\"items,omitempty\"`\n\n\t// Kind: The kind of item this is. For lists of hmacKeys, this is always\n\t// storage#hmacKeysMetadata.\n\tKind string `json:\"kind,omitempty\"`\n\n\t// NextPageToken: The continuation token, used to page through large\n\t// result sets. Provide this value in a subsequent request to return the\n\t// next page of results.\n\tNextPageToken string `json:\"nextPageToken,omitempty\"`\n\n\t// ServerResponse contains the HTTP response code and headers from the\n\t// server.\n\tgoogleapi.ServerResponse `json:\"-\"`\n\n\t// ForceSendFields is a list of field names (e.g. \"Items\") to\n\t// unconditionally include in API requests. By default, fields with\n\t// empty values are omitted from API requests. However, any non-pointer,\n\t// non-interface field appearing in ForceSendFields will be sent to the\n\t// server regardless of whether the field is empty or not. This may be\n\t// used to include empty fields in Patch requests.\n\tForceSendFields []string `json:\"-\"`\n\n\t// NullFields is a list of field names (e.g. \"Items\") to include in API\n\t// requests with the JSON null value. By default, fields with empty\n\t// values are omitted from API requests. However, any field with an\n\t// empty value appearing in NullFields will be sent to the server as\n\t// null. It is an error if a field in this list has a non-empty value.\n\t// This may be used to include null fields in Patch requests.\n\tNullFields []string `json:\"-\"`\n}\n\nfunc (s *HmacKeysMetadata) MarshalJSON() ([]byte, error) {\n\ttype NoMethod HmacKeysMetadata\n\traw := NoMethod(*s)\n\treturn gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)\n}\n\n// Notification: A subscription to receive Google PubSub notifications.\ntype Notification struct {\n\t// CustomAttributes: An optional list of additional attributes to attach\n\t// to each Cloud PubSub message published for this notification\n\t// subscription.\n\tCustomAttributes map[string]string `json:\"custom_attributes,omitempty\"`\n\n\t// Etag: HTTP 1.1 Entity tag for this subscription notification.\n\tEtag string `json:\"etag,omitempty\"`\n\n\t// EventTypes: If present, only send notifications about listed event\n\t// types. If empty, sent notifications for all event types.\n\tEventTypes []string `json:\"event_types,omitempty\"`\n\n\t// Id: The ID of the notification.\n\tId string `json:\"id,omitempty\"`\n\n\t// Kind: The kind of item this is. For notifications, this is always\n\t// storage#notification.\n\tKind string `json:\"kind,omitempty\"`\n\n\t// ObjectNamePrefix: If present, only apply this notification\n\t// configuration to object names that begin with this prefix.\n\tObjectNamePrefix string `json:\"object_name_prefix,omitempty\"`\n\n\t// PayloadFormat: The desired content of the Payload.\n\tPayloadFormat string `json:\"payload_format,omitempty\"`\n\n\t// SelfLink: The canonical URL of this notification.\n\tSelfLink string `json:\"selfLink,omitempty\"`\n\n\t// Topic: The Cloud PubSub topic to which this subscription publishes.\n\t// Formatted as:\n\t// '//pubsub.googleapis.com/projects/{project-identifier}/topics/{my-topi\n\t// c}'\n\tTopic string `json:\"topic,omitempty\"`\n\n\t// ServerResponse contains the HTTP response code and headers from the\n\t// server.\n\tgoogleapi.ServerResponse `json:\"-\"`\n\n\t// ForceSendFields is a list of field names (e.g. \"CustomAttributes\") to\n\t// unconditionally include in API requests. By default, fields with\n\t// empty values are omitted from API requests. However, any non-pointer,\n\t// non-interface field appearing in ForceSendFields will be sent to the\n\t// server regardless of whether the field is empty or not. This may be\n\t// used to include empty fields in Patch requests.\n\tForceSendFields []string `json:\"-\"`\n\n\t// NullFields is a list of field names (e.g. \"CustomAttributes\") to\n\t// include in API requests with the JSON null value. By default, fields\n\t// with empty values are omitted from API requests. However, any field\n\t// with an empty value appearing in NullFields will be sent to the\n\t// server as null. It is an error if a field in this list has a\n\t// non-empty value. This may be used to include null fields in Patch\n\t// requests.\n\tNullFields []string `json:\"-\"`\n}\n\nfunc (s *Notification) MarshalJSON() ([]byte, error) {\n\ttype NoMethod Notification\n\traw := NoMethod(*s)\n\treturn gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)\n}\n\n// Notifications: A list of notification subscriptions.\ntype Notifications struct {\n\t// Items: The list of items.\n\tItems []*Notification `json:\"items,omitempty\"`\n\n\t// Kind: The kind of item this is. For lists of notifications, this is\n\t// always storage#notifications.\n\tKind string `json:\"kind,omitempty\"`\n\n\t// ServerResponse contains the HTTP response code and headers from the\n\t// server.\n\tgoogleapi.ServerResponse `json:\"-\"`\n\n\t// ForceSendFields is a list of field names (e.g. \"Items\") to\n\t// unconditionally include in API requests. By default, fields with\n\t// empty values are omitted from API requests. However, any non-pointer,\n\t// non-interface field appearing in ForceSendFields will be sent to the\n\t// server regardless of whether the field is empty or not. This may be\n\t// used to include empty fields in Patch requests.\n\tForceSendFields []string `json:\"-\"`\n\n\t// NullFields is a list of field names (e.g. \"Items\") to include in API\n\t// requests with the JSON null value. By default, fields with empty\n\t// values are omitted from API requests. However, any field with an\n\t// empty value appearing in NullFields will be sent to the server as\n\t// null. It is an error if a field in this list has a non-empty value.\n\t// This may be used to include null fields in Patch requests.\n\tNullFields []string `json:\"-\"`\n}\n\nfunc (s *Notifications) MarshalJSON() ([]byte, error) {\n\ttype NoMethod Notifications\n\traw := NoMethod(*s)\n\treturn gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)\n}\n\n// Object: An object.\ntype Object struct {\n\t// Acl: Access controls on the object.\n\tAcl []*ObjectAccessControl `json:\"acl,omitempty\"`\n\n\t// Bucket: The name of the bucket containing this object.\n\tBucket string `json:\"bucket,omitempty\"`\n\n\t// CacheControl: Cache-Control directive for the object data. If\n\t// omitted, and the object is accessible to all anonymous users, the\n\t// default will be public, max-age=3600.\n\tCacheControl string `json:\"cacheControl,omitempty\"`\n\n\t// ComponentCount: Number of underlying components that make up this\n\t// object. Components are accumulated by compose operations.\n\tComponentCount int64 `json:\"componentCount,omitempty\"`\n\n\t// ContentDisposition: Content-Disposition of the object data.\n\tContentDisposition string `json:\"contentDisposition,omitempty\"`\n\n\t// ContentEncoding: Content-Encoding of the object data.\n\tContentEncoding string `json:\"contentEncoding,omitempty\"`\n\n\t// ContentLanguage: Content-Language of the object data.\n\tContentLanguage string `json:\"contentLanguage,omitempty\"`\n\n\t// ContentType: Content-Type of the object data. If an object is stored\n\t// without a Content-Type, it is served as application/octet-stream.\n\tContentType string `json:\"contentType,omitempty\"`\n\n\t// Crc32c: CRC32c checksum, as described in RFC 4960, Appendix B;\n\t// encoded using base64 in big-endian byte order. For more information\n\t// about using the CRC32c checksum, see Hashes and ETags: Best\n\t// Practices.\n\tCrc32c string `json:\"crc32c,omitempty\"`\n\n\t// CustomerEncryption: Metadata of customer-supplied encryption key, if\n\t// the object is encrypted by such a key.\n\tCustomerEncryption *ObjectCustomerEncryption `json:\"customerEncryption,omitempty\"`\n\n\t// Etag: HTTP 1.1 Entity tag for the object.\n\tEtag string `json:\"etag,omitempty\"`\n\n\t// EventBasedHold: Whether an object is under event-based hold.\n\t// Event-based hold is a way to retain objects until an event occurs,\n\t// which is signified by the hold's release (i.e. this value is set to\n\t// false). After being released (set to false), such objects will be\n\t// subject to bucket-level retention (if any). One sample use case of\n\t// this flag is for banks to hold loan documents for at least 3 years\n\t// after loan is paid in full. Here, bucket-level retention is 3 years\n\t// and the event is the loan being paid in full. In this example, these\n\t// objects will be held intact for any number of years until the event\n\t// has occurred (event-based hold on the object is released) and then 3\n\t// more years after that. That means retention duration of the objects\n\t// begins from the moment event-based hold transitioned from true to\n\t// false.\n\tEventBasedHold bool `json:\"eventBasedHold,omitempty\"`\n\n\t// Generation: The content generation of this object. Used for object\n\t// versioning.\n\tGeneration int64 `json:\"generation,omitempty,string\"`\n\n\t// Id: The ID of the object, including the bucket name, object name, and\n\t// generation number.\n\tId string `json:\"id,omitempty\"`\n\n\t// Kind: The kind of item this is. For objects, this is always\n\t// storage#object.\n\tKind string `json:\"kind,omitempty\"`\n\n\t// KmsKeyName: Cloud KMS Key used to encrypt this object, if the object\n\t// is encrypted by such a key.\n\tKmsKeyName string `json:\"kmsKeyName,omitempty\"`\n\n\t// Md5Hash: MD5 hash of the data; encoded using base64. For more\n\t// information about using the MD5 hash, see Hashes and ETags: Best\n\t// Practices.\n\tMd5Hash string `json:\"md5Hash,omitempty\"`\n\n\t// MediaLink: Media download link.\n\tMediaLink string `json:\"mediaLink,omitempty\"`\n\n\t// Metadata: User-provided metadata, in key/value pairs.\n\tMetadata map[string]string `json:\"metadata,omitempty\"`\n\n\t// Metageneration: The version of the metadata for this object at this\n\t// generation. Used for preconditions and for detecting changes in\n\t// metadata. A metageneration number is only meaningful in the context\n\t// of a particular generation of a particular object.\n\tMetageneration int64 `json:\"metageneration,omitempty,string\"`\n\n\t// Name: The name of the object. Required if not specified by URL\n\t// parameter.\n\tName string `json:\"name,omitempty\"`\n\n\t// Owner: The owner of the object. This will always be the uploader of\n\t// the object.\n\tOwner *ObjectOwner `json:\"owner,omitempty\"`\n\n\t// RetentionExpirationTime: A server-determined value that specifies the\n\t// earliest time that the object's retention period expires. This value\n\t// is in RFC 3339 format. Note 1: This field is not provided for objects\n\t// with an active event-based hold, since retention expiration is\n\t// unknown until the hold is removed. Note 2: This value can be provided\n\t// even when temporary hold is set (so that the user can reason about\n\t// policy without having to first unset the temporary hold).\n\tRetentionExpirationTime string `json:\"retentionExpirationTime,omitempty\"`\n\n\t// SelfLink: The link to this object.\n\tSelfLink string `json:\"selfLink,omitempty\"`\n\n\t// Size: Content-Length of the data in bytes.\n\tSize uint64 `json:\"size,omitempty,string\"`\n\n\t// StorageClass: Storage class of the object.\n\tStorageClass string `json:\"storageClass,omitempty\"`\n\n\t// TemporaryHold: Whether an object is under temporary hold. While this\n\t// flag is set to true, the object is protected against deletion and\n\t// overwrites. A common use case of this flag is regulatory\n\t// investigations where objects need to be retained while the\n\t// investigation is ongoing. Note that unlike event-based hold,\n\t// temporary hold does not impact retention expiration time of an\n\t// object.\n\tTemporaryHold bool `json:\"temporaryHold,omitempty\"`\n\n\t// TimeCreated: The creation time of the object in RFC 3339 format.\n\tTimeCreated string `json:\"timeCreated,omitempty\"`\n\n\t// TimeDeleted: The deletion time of the object in RFC 3339 format. Will\n\t// be returned if and only if this version of the object has been\n\t// deleted.\n\tTimeDeleted string `json:\"timeDeleted,omitempty\"`\n\n\t// TimeStorageClassUpdated: The time at which the object's storage class\n\t// was last changed. When the object is initially created, it will be\n\t// set to timeCreated.\n\tTimeStorageClassUpdated string `json:\"timeStorageClassUpdated,omitempty\"`\n\n\t// Updated: The modification time of the object metadata in RFC 3339\n\t// format.\n\tUpdated string `json:\"updated,omitempty\"`\n\n\t// ServerResponse contains the HTTP response code and headers from the\n\t// server.\n\tgoogleapi.ServerResponse `json:\"-\"`\n\n\t// ForceSendFields is a list of field names (e.g. \"Acl\") to\n\t// unconditionally include in API requests. By default, fields with\n\t// empty values are omitted from API requests. However, any non-pointer,\n\t// non-interface field appearing in ForceSendFields will be sent to the\n\t// server regardless of whether the field is empty or not. This may be\n\t// used to include empty fields in Patch requests.\n\tForceSendFields []string `json:\"-\"`\n\n\t// NullFields is a list of field names (e.g. \"Acl\") to include in API\n\t// requests with the JSON null value. By default, fields with empty\n\t// values are omitted from API requests. However, any field with an\n\t// empty value appearing in NullFields will be sent to the server as\n\t// null. It is an error if a field in this list has a non-empty value.\n\t// This may be used to include null fields in Patch requests.\n\tNullFields []string `json:\"-\"`\n}\n\nfunc (s *Object) MarshalJSON() ([]byte, error) {\n\ttype NoMethod Object\n\traw := NoMethod(*s)\n\treturn gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)\n}\n\n// ObjectCustomerEncryption: Metadata of customer-supplied encryption\n// key, if the object is encrypted by such a key.\ntype ObjectCustomerEncryption struct {\n\t// EncryptionAlgorithm: The encryption algorithm.\n\tEncryptionAlgorithm string `json:\"encryptionAlgorithm,omitempty\"`\n\n\t// KeySha256: SHA256 hash value of the encryption key.\n\tKeySha256 string `json:\"keySha256,omitempty\"`\n\n\t// ForceSendFields is a list of field names (e.g. \"EncryptionAlgorithm\")\n\t// to unconditionally include in API requests. By default, fields with\n\t// empty values are omitted from API requests. However, any non-pointer,\n\t// non-interface field appearing in ForceSendFields will be sent to the\n\t// server regardless of whether the field is empty or not. This may be\n\t// used to include empty fields in Patch requests.\n\tForceSendFields []string `json:\"-\"`\n\n\t// NullFields is a list of field names (e.g. \"EncryptionAlgorithm\") to\n\t// include in API requests with the JSON null value. By default, fields\n\t// with empty values are omitted from API requests. However, any field\n\t// with an empty value appearing in NullFields will be sent to the\n\t// server as null. It is an error if a field in this list has a\n\t// non-empty value. This may be used to include null fields in Patch\n\t// requests.\n\tNullFields []string `json:\"-\"`\n}\n\nfunc (s *ObjectCustomerEncryption) MarshalJSON() ([]byte, error) {\n\ttype NoMethod ObjectCustomerEncryption\n\traw := NoMethod(*s)\n\treturn gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)\n}\n\n// ObjectOwner: The owner of the object. This will always be the\n// uploader of the object.\ntype ObjectOwner struct {\n\t// Entity: The entity, in the form user-userId.\n\tEntity string `json:\"entity,omitempty\"`\n\n\t// EntityId: The ID for the entity.\n\tEntityId string `json:\"entityId,omitempty\"`\n\n\t// ForceSendFields is a list of field names (e.g. \"Entity\") to\n\t// unconditionally include in API requests. By default, fields with\n\t// empty values are omitted from API requests. However, any non-pointer,\n\t// non-interface field appearing in ForceSendFields will be sent to the\n\t// server regardless of whether the field is empty or not. This may be\n\t// used to include empty fields in Patch requests.\n\tForceSendFields []string `json:\"-\"`\n\n\t// NullFields is a list of field names (e.g. \"Entity\") to include in API\n\t// requests with the JSON null value. By default, fields with empty\n\t// values are omitted from API requests. However, any field with an\n\t// empty value appearing in NullFields will be sent to the server as\n\t// null. It is an error if a field in this list has a non-empty value.\n\t// This may be used to include null fields in Patch requests.\n\tNullFields []string `json:\"-\"`\n}\n\nfunc (s *ObjectOwner) MarshalJSON() ([]byte, error) {\n\ttype NoMethod ObjectOwner\n\traw := NoMethod(*s)\n\treturn gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)\n}\n\n// ObjectAccessControl: An access-control entry.\ntype ObjectAccessControl struct {\n\t// Bucket: The name of the bucket.\n\tBucket string `json:\"bucket,omitempty\"`\n\n\t// Domain: The domain associated with the entity, if any.\n\tDomain string `json:\"domain,omitempty\"`\n\n\t// Email: The email address associated with the entity, if any.\n\tEmail string `json:\"email,omitempty\"`\n\n\t// Entity: The entity holding the permission, in one of the following\n\t// forms:\n\t// - user-userId\n\t// - user-email\n\t// - group-groupId\n\t// - group-email\n\t// - domain-domain\n\t// - project-team-projectId\n\t// - allUsers\n\t// - allAuthenticatedUsers Examples:\n\t// - The user liz@example.com would be user-liz@example.com.\n\t// - The group example@googlegroups.com would be\n\t// group-example@googlegroups.com.\n\t// - To refer to all members of the Google Apps for Business domain\n\t// example.com, the entity would be domain-example.com.\n\tEntity string `json:\"entity,omitempty\"`\n\n\t// EntityId: The ID for the entity, if any.\n\tEntityId string `json:\"entityId,omitempty\"`\n\n\t// Etag: HTTP 1.1 Entity tag for the access-control entry.\n\tEtag string `json:\"etag,omitempty\"`\n\n\t// Generation: The content generation of the object, if applied to an\n\t// object.\n\tGeneration int64 `json:\"generation,omitempty,string\"`\n\n\t// Id: The ID of the access-control entry.\n\tId string `json:\"id,omitempty\"`\n\n\t// Kind: The kind of item this is. For object access control entries,\n\t// this is always storage#objectAccessControl.\n\tKind string `json:\"kind,omitempty\"`\n\n\t// Object: The name of the object, if applied to an object.\n\tObject string `json:\"object,omitempty\"`\n\n\t// ProjectTeam: The project team associated with the entity, if any.\n\tProjectTeam *ObjectAccessControlProjectTeam `json:\"projectTeam,omitempty\"`\n\n\t// Role: The access permission for the entity.\n\tRole string `json:\"role,omitempty\"`\n\n\t// SelfLink: The link to this access-control entry.\n\tSelfLink string `json:\"selfLink,omitempty\"`\n\n\t// ServerResponse contains the HTTP response code and headers from the\n\t// server.\n\tgoogleapi.ServerResponse `json:\"-\"`\n\n\t// ForceSendFields is a list of field names (e.g. \"Bucket\") to\n\t// unconditionally include in API requests. By default, fields with\n\t// empty values are omitted from API requests. However, any non-pointer,\n\t// non-interface field appearing in ForceSendFields will be sent to the\n\t// server regardless of whether the field is empty or not. This may be\n\t// used to include empty fields in Patch requests.\n\tForceSendFields []string `json:\"-\"`\n\n\t// NullFields is a list of field names (e.g. \"Bucket\") to include in API\n\t// requests with the JSON null value. By default, fields with empty\n\t// values are omitted from API requests. However, any field with an\n\t// empty value appearing in NullFields will be sent to the server as\n\t// null. It is an error if a field in this list has a non-empty value.\n\t// This may be used to include null fields in Patch requests.\n\tNullFields []string `json:\"-\"`\n}\n\nfunc (s *ObjectAccessControl) MarshalJSON() ([]byte, error) {\n\ttype NoMethod ObjectAccessControl\n\traw := NoMethod(*s)\n\treturn gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)\n}\n\n// ObjectAccessControlProjectTeam: The project team associated with the\n// entity, if any.\ntype ObjectAccessControlProjectTeam struct {\n\t// ProjectNumber: The project number.\n\tProjectNumber string `json:\"projectNumber,omitempty\"`\n\n\t// Team: The team.\n\tTeam string `json:\"team,omitempty\"`\n\n\t// ForceSendFields is a list of field names (e.g. \"ProjectNumber\") to\n\t// unconditionally include in API requests. By default, fields with\n\t// empty values are omitted from API requests. However, any non-pointer,\n\t// non-interface field appearing in ForceSendFields will be sent to the\n\t// server regardless of whether the field is empty or not. This may be\n\t// used to include empty fields in Patch requests.\n\tForceSendFields []string `json:\"-\"`\n\n\t// NullFields is a list of field names (e.g. \"ProjectNumber\") to include\n\t// in API requests with the JSON null value. By default, fields with\n\t// empty values are omitted from API requests. However, any field with\n\t// an empty value appearing in NullFields will be sent to the server as\n\t// null. It is an error if a field in this list has a non-empty value.\n\t// This may be used to include null fields in Patch requests.\n\tNullFields []string `json:\"-\"`\n}\n\nfunc (s *ObjectAccessControlProjectTeam) MarshalJSON() ([]byte, error) {\n\ttype NoMethod ObjectAccessControlProjectTeam\n\traw := NoMethod(*s)\n\treturn gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)\n}\n\n// ObjectAccessControls: An access-control list.\ntype ObjectAccessControls struct {\n\t// Items: The list of items.\n\tItems []*ObjectAccessControl `json:\"items,omitempty\"`\n\n\t// Kind: The kind of item this is. For lists of object access control\n\t// entries, this is always storage#objectAccessControls.\n\tKind string `json:\"kind,omitempty\"`\n\n\t// ServerResponse contains the HTTP response code and headers from the\n\t// server.\n\tgoogleapi.ServerResponse `json:\"-\"`\n\n\t// ForceSendFields is a list of field names (e.g. \"Items\") to\n\t// unconditionally include in API requests. By default, fields with\n\t// empty values are omitted from API requests. However, any non-pointer,\n\t// non-interface field appearing in ForceSendFields will be sent to the\n\t// server regardless of whether the field is empty or not. This may be\n\t// used to include empty fields in Patch requests.\n\tForceSendFields []string `json:\"-\"`\n\n\t// NullFields is a list of field names (e.g. \"Items\") to include in API\n\t// requests with the JSON null value. By default, fields with empty\n\t// values are omitted from API requests. However, any field with an\n\t// empty value appearing in NullFields will be sent to the server as\n\t// null. It is an error if a field in this list has a non-empty value.\n\t// This may be used to include null fields in Patch requests.\n\tNullFields []string `json:\"-\"`\n}\n\nfunc (s *ObjectAccessControls) MarshalJSON() ([]byte, error) {\n\ttype NoMethod ObjectAccessControls\n\traw := NoMethod(*s)\n\treturn gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)\n}\n\n// Objects: A list of objects.\ntype Objects struct {\n\t// Items: The list of items.\n\tItems []*Object `json:\"items,omitempty\"`\n\n\t// Kind: The kind of item this is. For lists of objects, this is always\n\t// storage#objects.\n\tKind string `json:\"kind,omitempty\"`\n\n\t// NextPageToken: The continuation token, used to page through large\n\t// result sets. Provide this value in a subsequent request to return the\n\t// next page of results.\n\tNextPageToken string `json:\"nextPageToken,omitempty\"`\n\n\t// Prefixes: The list of prefixes of objects matching-but-not-listed up\n\t// to and including the requested delimiter.\n\tPrefixes []string `json:\"prefixes,omitempty\"`\n\n\t// ServerResponse contains the HTTP response code and headers from the\n\t// server.\n\tgoogleapi.ServerResponse `json:\"-\"`\n\n\t// ForceSendFields is a list of field names (e.g. \"Items\") to\n\t// unconditionally include in API requests. By default, fields with\n\t// empty values are omitted from API requests. However, any non-pointer,\n\t// non-interface field appearing in ForceSendFields will be sent to the\n\t// server regardless of whether the field is empty or not. This may be\n\t// used to include empty fields in Patch requests.\n\tForceSendFields []string `json:\"-\"`\n\n\t// NullFields is a list of field names (e.g. \"Items\") to include in API\n\t// requests with the JSON null value. By default, fields with empty\n\t// values are omitted from API requests. However, any field with an\n\t// empty value appearing in NullFields will be sent to the server as\n\t// null. It is an error if a field in this list has a non-empty value.\n\t// This may be used to include null fields in Patch requests.\n\tNullFields []string `json:\"-\"`\n}\n\nfunc (s *Objects) MarshalJSON() ([]byte, error) {\n\ttype NoMethod Objects\n\traw := NoMethod(*s)\n\treturn gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)\n}\n\n// Policy: A bucket/object IAM policy.\ntype Policy struct {\n\t// Bindings: An association between a role, which comes with a set of\n\t// permissions, and members who may assume that role.\n\tBindings []*PolicyBindings `json:\"bindings,omitempty\"`\n\n\t// Etag: HTTP 1.1  Entity tag for the policy.\n\tEtag string `json:\"etag,omitempty\"`\n\n\t// Kind: The kind of item this is. For policies, this is always\n\t// storage#policy. This field is ignored on input.\n\tKind string `json:\"kind,omitempty\"`\n\n\t// ResourceId: The ID of the resource to which this policy belongs. Will\n\t// be of the form projects/_/buckets/bucket for buckets, and\n\t// projects/_/buckets/bucket/objects/object for objects. A specific\n\t// generation may be specified by appending #generationNumber to the end\n\t// of the object name, e.g.\n\t// projects/_/buckets/my-bucket/objects/data.txt#17. The current\n\t// generation can be denoted with #0. This field is ignored on input.\n\tResourceId string `json:\"resourceId,omitempty\"`\n\n\t// ServerResponse contains the HTTP response code and headers from the\n\t// server.\n\tgoogleapi.ServerResponse `json:\"-\"`\n\n\t// ForceSendFields is a list of field names (e.g. \"Bindings\") to\n\t// unconditionally include in API requests. By default, fields with\n\t// empty values are omitted from API requests. However, any non-pointer,\n\t// non-interface field appearing in ForceSendFields will be sent to the\n\t// server regardless of whether the field is empty or not. This may be\n\t// used to include empty fields in Patch requests.\n\tForceSendFields []string `json:\"-\"`\n\n\t// NullFields is a list of field names (e.g. \"Bindings\") to include in\n\t// API requests with the JSON null value. By default, fields with empty\n\t// values are omitted from API requests. However, any field with an\n\t// empty value appearing in NullFields will be sent to the server as\n\t// null. It is an error if a field in this list has a non-empty value.\n\t// This may be used to include null fields in Patch requests.\n\tNullFields []string `json:\"-\"`\n}\n\nfunc (s *Policy) MarshalJSON() ([]byte, error) {\n\ttype NoMethod Policy\n\traw := NoMethod(*s)\n\treturn gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)\n}\n\ntype PolicyBindings struct {\n\t// Condition: The condition that is associated with this binding. NOTE:\n\t// an unsatisfied condition will not allow user access via current\n\t// binding. Different bindings, including their conditions, are examined\n\t// independently.\n\tCondition *Expr `json:\"condition,omitempty\"`\n\n\t// Members: A collection of identifiers for members who may assume the\n\t// provided role. Recognized identifiers are as follows:\n\t// - allUsers — A special identifier that represents anyone on the\n\t// internet; with or without a Google account.\n\t// - allAuthenticatedUsers — A special identifier that represents\n\t// anyone who is authenticated with a Google account or a service\n\t// account.\n\t// - user:emailid — An email address that represents a specific\n\t// account. For example, user:alice@gmail.com or user:joe@example.com.\n\t//\n\t// - serviceAccount:emailid — An email address that represents a\n\t// service account. For example,\n\t// serviceAccount:my-other-app@appspot.gserviceaccount.com .\n\t// - group:emailid — An email address that represents a Google group.\n\t// For example, group:admins@example.com.\n\t// - domain:domain — A Google Apps domain name that represents all the\n\t// users of that domain. For example, domain:google.com or\n\t// domain:example.com.\n\t// - projectOwner:projectid — Owners of the given project. For\n\t// example, projectOwner:my-example-project\n\t// - projectEditor:projectid — Editors of the given project. For\n\t// example, projectEditor:my-example-project\n\t// - projectViewer:projectid — Viewers of the given project. For\n\t// example, projectViewer:my-example-project\n\tMembers []string `json:\"members,omitempty\"`\n\n\t// Role: The role to which members belong. Two types of roles are\n\t// supported: new IAM roles, which grant permissions that do not map\n\t// directly to those provided by ACLs, and legacy IAM roles, which do\n\t// map directly to ACL permissions. All roles are of the format\n\t// roles/storage.specificRole.\n\t// The new IAM roles are:\n\t// - roles/storage.admin — Full control of Google Cloud Storage\n\t// resources.\n\t// - roles/storage.objectViewer — Read-Only access to Google Cloud\n\t// Storage objects.\n\t// - roles/storage.objectCreator — Access to create objects in Google\n\t// Cloud Storage.\n\t// - roles/storage.objectAdmin — Full control of Google Cloud Storage\n\t// objects.   The legacy IAM roles are:\n\t// - roles/storage.legacyObjectReader — Read-only access to objects\n\t// without listing. Equivalent to an ACL entry on an object with the\n\t// READER role.\n\t// - roles/storage.legacyObjectOwner — Read/write access to existing\n\t// objects without listing. Equivalent to an ACL entry on an object with\n\t// the OWNER role.\n\t// - roles/storage.legacyBucketReader — Read access to buckets with\n\t// object listing. Equivalent to an ACL entry on a bucket with the\n\t// READER role.\n\t// - roles/storage.legacyBucketWriter — Read access to buckets with\n\t// object listing/creation/deletion. Equivalent to an ACL entry on a\n\t// bucket with the WRITER role.\n\t// - roles/storage.legacyBucketOwner — Read and write access to\n\t// existing buckets with object listing/creation/deletion. Equivalent to\n\t// an ACL entry on a bucket with the OWNER role.\n\tRole string `json:\"role,omitempty\"`\n\n\t// ForceSendFields is a list of field names (e.g. \"Condition\") to\n\t// unconditionally include in API requests. By default, fields with\n\t// empty values are omitted from API requests. However, any non-pointer,\n\t// non-interface field appearing in ForceSendFields will be sent to the\n\t// server regardless of whether the field is empty or not. This may be\n\t// used to include empty fields in Patch requests.\n\tForceSendFields []string `json:\"-\"`\n\n\t// NullFields is a list of field names (e.g. \"Condition\") to include in\n\t// API requests with the JSON null value. By default, fields with empty\n\t// values are omitted from API requests. However, any field with an\n\t// empty value appearing in NullFields will be sent to the server as\n\t// null. It is an error if a field in this list has a non-empty value.\n\t// This may be used to include null fields in Patch requests.\n\tNullFields []string `json:\"-\"`\n}\n\nfunc (s *PolicyBindings) MarshalJSON() ([]byte, error) {\n\ttype NoMethod PolicyBindings\n\traw := NoMethod(*s)\n\treturn gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)\n}\n\n// RewriteResponse: A rewrite response.\ntype RewriteResponse struct {\n\t// Done: true if the copy is finished; otherwise, false if the copy is\n\t// in progress. This property is always present in the response.\n\tDone bool `json:\"done,omitempty\"`\n\n\t// Kind: The kind of item this is.\n\tKind string `json:\"kind,omitempty\"`\n\n\t// ObjectSize: The total size of the object being copied in bytes. This\n\t// property is always present in the response.\n\tObjectSize int64 `json:\"objectSize,omitempty,string\"`\n\n\t// Resource: A resource containing the metadata for the copied-to\n\t// object. This property is present in the response only when copying\n\t// completes.\n\tResource *Object `json:\"resource,omitempty\"`\n\n\t// RewriteToken: A token to use in subsequent requests to continue\n\t// copying data. This token is present in the response only when there\n\t// is more data to copy.\n\tRewriteToken string `json:\"rewriteToken,omitempty\"`\n\n\t// TotalBytesRewritten: The total bytes written so far, which can be\n\t// used to provide a waiting user with a progress indicator. This\n\t// property is always present in the response.\n\tTotalBytesRewritten int64 `json:\"totalBytesRewritten,omitempty,string\"`\n\n\t// ServerResponse contains the HTTP response code and headers from the\n\t// server.\n\tgoogleapi.ServerResponse `json:\"-\"`\n\n\t// ForceSendFields is a list of field names (e.g. \"Done\") to\n\t// unconditionally include in API requests. By default, fields with\n\t// empty values are omitted from API requests. However, any non-pointer,\n\t// non-interface field appearing in ForceSendFields will be sent to the\n\t// server regardless of whether the field is empty or not. This may be\n\t// used to include empty fields in Patch requests.\n\tForceSendFields []string `json:\"-\"`\n\n\t// NullFields is a list of field names (e.g. \"Done\") to include in API\n\t// requests with the JSON null value. By default, fields with empty\n\t// values are omitted from API requests. However, any field with an\n\t// empty value appearing in NullFields will be sent to the server as\n\t// null. It is an error if a field in this list has a non-empty value.\n\t// This may be used to include null fields in Patch requests.\n\tNullFields []string `json:\"-\"`\n}\n\nfunc (s *RewriteResponse) MarshalJSON() ([]byte, error) {\n\ttype NoMethod RewriteResponse\n\traw := NoMethod(*s)\n\treturn gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)\n}\n\n// ServiceAccount: A subscription to receive Google PubSub\n// notifications.\ntype ServiceAccount struct {\n\t// EmailAddress: The ID of the notification.\n\tEmailAddress string `json:\"email_address,omitempty\"`\n\n\t// Kind: The kind of item this is. For notifications, this is always\n\t// storage#notification.\n\tKind string `json:\"kind,omitempty\"`\n\n\t// ServerResponse contains the HTTP response code and headers from the\n\t// server.\n\tgoogleapi.ServerResponse `json:\"-\"`\n\n\t// ForceSendFields is a list of field names (e.g. \"EmailAddress\") to\n\t// unconditionally include in API requests. By default, fields with\n\t// empty values are omitted from API requests. However, any non-pointer,\n\t// non-interface field appearing in ForceSendFields will be sent to the\n\t// server regardless of whether the field is empty or not. This may be\n\t// used to include empty fields in Patch requests.\n\tForceSendFields []string `json:\"-\"`\n\n\t// NullFields is a list of field names (e.g. \"EmailAddress\") to include\n\t// in API requests with the JSON null value. By default, fields with\n\t// empty values are omitted from API requests. However, any field with\n\t// an empty value appearing in NullFields will be sent to the server as\n\t// null. It is an error if a field in this list has a non-empty value.\n\t// This may be used to include null fields in Patch requests.\n\tNullFields []string `json:\"-\"`\n}\n\nfunc (s *ServiceAccount) MarshalJSON() ([]byte, error) {\n\ttype NoMethod ServiceAccount\n\traw := NoMethod(*s)\n\treturn gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)\n}\n\n// TestIamPermissionsResponse: A\n// storage.(buckets|objects).testIamPermissions response.\ntype TestIamPermissionsResponse struct {\n\t// Kind: The kind of item this is.\n\tKind string `json:\"kind,omitempty\"`\n\n\t// Permissions: The permissions held by the caller. Permissions are\n\t// always of the format storage.resource.capability, where resource is\n\t// one of buckets or objects. The supported permissions are as follows:\n\t//\n\t// - storage.buckets.delete — Delete bucket.\n\t// - storage.buckets.get — Read bucket metadata.\n\t// - storage.buckets.getIamPolicy — Read bucket IAM policy.\n\t// - storage.buckets.create — Create bucket.\n\t// - storage.buckets.list — List buckets.\n\t// - storage.buckets.setIamPolicy — Update bucket IAM policy.\n\t// - storage.buckets.update — Update bucket metadata.\n\t// - storage.objects.delete — Delete object.\n\t// - storage.objects.get — Read object data and metadata.\n\t// - storage.objects.getIamPolicy — Read object IAM policy.\n\t// - storage.objects.create — Create object.\n\t// - storage.objects.list — List objects.\n\t// - storage.objects.setIamPolicy — Update object IAM policy.\n\t// - storage.objects.update — Update object metadata.\n\tPermissions []string `json:\"permissions,omitempty\"`\n\n\t// ServerResponse contains the HTTP response code and headers from the\n\t// server.\n\tgoogleapi.ServerResponse `json:\"-\"`\n\n\t// ForceSendFields is a list of field names (e.g. \"Kind\") to\n\t// unconditionally include in API requests. By default, fields with\n\t// empty values are omitted from API requests. However, any non-pointer,\n\t// non-interface field appearing in ForceSendFields will be sent to the\n\t// server regardless of whether the field is empty or not. This may be\n\t// used to include empty fields in Patch requests.\n\tForceSendFields []string `json:\"-\"`\n\n\t// NullFields is a list of field names (e.g. \"Kind\") to include in API\n\t// requests with the JSON null value. By default, fields with empty\n\t// values are omitted from API requests. However, any field with an\n\t// empty value appearing in NullFields will be sent to the server as\n\t// null. It is an error if a field in this list has a non-empty value.\n\t// This may be used to include null fields in Patch requests.\n\tNullFields []string `json:\"-\"`\n}\n\nfunc (s *TestIamPermissionsResponse) MarshalJSON() ([]byte, error) {\n\ttype NoMethod TestIamPermissionsResponse\n\traw := NoMethod(*s)\n\treturn gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)\n}\n\n// method id \"storage.bucketAccessControls.delete\":\n\ntype BucketAccessControlsDeleteCall struct {\n\ts          *Service\n\tbucket     string\n\tentity     string\n\turlParams_ gensupport.URLParams\n\tctx_       context.Context\n\theader_    http.Header\n}\n\n// Delete: Permanently deletes the ACL entry for the specified entity on\n// the specified bucket.\nfunc (r *BucketAccessControlsService) Delete(bucket string, entity string) *BucketAccessControlsDeleteCall {\n\tc := &BucketAccessControlsDeleteCall{s: r.s, urlParams_: make(gensupport.URLParams)}\n\tc.bucket = bucket\n\tc.entity = entity\n\treturn c\n}\n\n// ProvisionalUserProject sets the optional parameter\n// \"provisionalUserProject\": The project to be billed for this request\n// if the target bucket is requester-pays bucket.\nfunc (c *BucketAccessControlsDeleteCall) ProvisionalUserProject(provisionalUserProject string) *BucketAccessControlsDeleteCall {\n\tc.urlParams_.Set(\"provisionalUserProject\", provisionalUserProject)\n\treturn c\n}\n\n// UserProject sets the optional parameter \"userProject\": The project to\n// be billed for this request. Required for Requester Pays buckets.\nfunc (c *BucketAccessControlsDeleteCall) UserProject(userProject string) *BucketAccessControlsDeleteCall {\n\tc.urlParams_.Set(\"userProject\", userProject)\n\treturn c\n}\n\n// Fields allows partial responses to be retrieved. See\n// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse\n// for more information.\nfunc (c *BucketAccessControlsDeleteCall) Fields(s ...googleapi.Field) *BucketAccessControlsDeleteCall {\n\tc.urlParams_.Set(\"fields\", googleapi.CombineFields(s))\n\treturn c\n}\n\n// Context sets the context to be used in this call's Do method. Any\n// pending HTTP request will be aborted if the provided context is\n// canceled.\nfunc (c *BucketAccessControlsDeleteCall) Context(ctx context.Context) *BucketAccessControlsDeleteCall {\n\tc.ctx_ = ctx\n\treturn c\n}\n\n// Header returns an http.Header that can be modified by the caller to\n// add HTTP headers to the request.\nfunc (c *BucketAccessControlsDeleteCall) Header() http.Header {\n\tif c.header_ == nil {\n\t\tc.header_ = make(http.Header)\n\t}\n\treturn c.header_\n}\n\nfunc (c *BucketAccessControlsDeleteCall) doRequest(alt string) (*http.Response, error) {\n\treqHeaders := make(http.Header)\n\tfor k, v := range c.header_ {\n\t\treqHeaders[k] = v\n\t}\n\treqHeaders.Set(\"User-Agent\", c.s.userAgent())\n\tvar body io.Reader = nil\n\tc.urlParams_.Set(\"alt\", alt)\n\tc.urlParams_.Set(\"prettyPrint\", \"false\")\n\turls := googleapi.ResolveRelative(c.s.BasePath, \"b/{bucket}/acl/{entity}\")\n\turls += \"?\" + c.urlParams_.Encode()\n\treq, err := http.NewRequest(\"DELETE\", urls, body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.Header = reqHeaders\n\tgoogleapi.Expand(req.URL, map[string]string{\n\t\t\"bucket\": c.bucket,\n\t\t\"entity\": c.entity,\n\t})\n\treturn gensupport.SendRequest(c.ctx_, c.s.client, req)\n}\n\n// Do executes the \"storage.bucketAccessControls.delete\" call.\nfunc (c *BucketAccessControlsDeleteCall) Do(opts ...googleapi.CallOption) error {\n\tgensupport.SetOptions(c.urlParams_, opts...)\n\tres, err := c.doRequest(\"json\")\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer googleapi.CloseBody(res)\n\tif err := googleapi.CheckResponse(res); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n\t// {\n\t//   \"description\": \"Permanently deletes the ACL entry for the specified entity on the specified bucket.\",\n\t//   \"httpMethod\": \"DELETE\",\n\t//   \"id\": \"storage.bucketAccessControls.delete\",\n\t//   \"parameterOrder\": [\n\t//     \"bucket\",\n\t//     \"entity\"\n\t//   ],\n\t//   \"parameters\": {\n\t//     \"bucket\": {\n\t//       \"description\": \"Name of a bucket.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"entity\": {\n\t//       \"description\": \"The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"provisionalUserProject\": {\n\t//       \"description\": \"The project to be billed for this request if the target bucket is requester-pays bucket.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"userProject\": {\n\t//       \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     }\n\t//   },\n\t//   \"path\": \"b/{bucket}/acl/{entity}\",\n\t//   \"scopes\": [\n\t//     \"https://www.googleapis.com/auth/cloud-platform\",\n\t//     \"https://www.googleapis.com/auth/devstorage.full_control\"\n\t//   ]\n\t// }\n\n}\n\n// method id \"storage.bucketAccessControls.get\":\n\ntype BucketAccessControlsGetCall struct {\n\ts            *Service\n\tbucket       string\n\tentity       string\n\turlParams_   gensupport.URLParams\n\tifNoneMatch_ string\n\tctx_         context.Context\n\theader_      http.Header\n}\n\n// Get: Returns the ACL entry for the specified entity on the specified\n// bucket.\nfunc (r *BucketAccessControlsService) Get(bucket string, entity string) *BucketAccessControlsGetCall {\n\tc := &BucketAccessControlsGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}\n\tc.bucket = bucket\n\tc.entity = entity\n\treturn c\n}\n\n// ProvisionalUserProject sets the optional parameter\n// \"provisionalUserProject\": The project to be billed for this request\n// if the target bucket is requester-pays bucket.\nfunc (c *BucketAccessControlsGetCall) ProvisionalUserProject(provisionalUserProject string) *BucketAccessControlsGetCall {\n\tc.urlParams_.Set(\"provisionalUserProject\", provisionalUserProject)\n\treturn c\n}\n\n// UserProject sets the optional parameter \"userProject\": The project to\n// be billed for this request. Required for Requester Pays buckets.\nfunc (c *BucketAccessControlsGetCall) UserProject(userProject string) *BucketAccessControlsGetCall {\n\tc.urlParams_.Set(\"userProject\", userProject)\n\treturn c\n}\n\n// Fields allows partial responses to be retrieved. See\n// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse\n// for more information.\nfunc (c *BucketAccessControlsGetCall) Fields(s ...googleapi.Field) *BucketAccessControlsGetCall {\n\tc.urlParams_.Set(\"fields\", googleapi.CombineFields(s))\n\treturn c\n}\n\n// IfNoneMatch sets the optional parameter which makes the operation\n// fail if the object's ETag matches the given value. This is useful for\n// getting updates only after the object has changed since the last\n// request. Use googleapi.IsNotModified to check whether the response\n// error from Do is the result of In-None-Match.\nfunc (c *BucketAccessControlsGetCall) IfNoneMatch(entityTag string) *BucketAccessControlsGetCall {\n\tc.ifNoneMatch_ = entityTag\n\treturn c\n}\n\n// Context sets the context to be used in this call's Do method. Any\n// pending HTTP request will be aborted if the provided context is\n// canceled.\nfunc (c *BucketAccessControlsGetCall) Context(ctx context.Context) *BucketAccessControlsGetCall {\n\tc.ctx_ = ctx\n\treturn c\n}\n\n// Header returns an http.Header that can be modified by the caller to\n// add HTTP headers to the request.\nfunc (c *BucketAccessControlsGetCall) Header() http.Header {\n\tif c.header_ == nil {\n\t\tc.header_ = make(http.Header)\n\t}\n\treturn c.header_\n}\n\nfunc (c *BucketAccessControlsGetCall) doRequest(alt string) (*http.Response, error) {\n\treqHeaders := make(http.Header)\n\tfor k, v := range c.header_ {\n\t\treqHeaders[k] = v\n\t}\n\treqHeaders.Set(\"User-Agent\", c.s.userAgent())\n\tif c.ifNoneMatch_ != \"\" {\n\t\treqHeaders.Set(\"If-None-Match\", c.ifNoneMatch_)\n\t}\n\tvar body io.Reader = nil\n\tc.urlParams_.Set(\"alt\", alt)\n\tc.urlParams_.Set(\"prettyPrint\", \"false\")\n\turls := googleapi.ResolveRelative(c.s.BasePath, \"b/{bucket}/acl/{entity}\")\n\turls += \"?\" + c.urlParams_.Encode()\n\treq, err := http.NewRequest(\"GET\", urls, body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.Header = reqHeaders\n\tgoogleapi.Expand(req.URL, map[string]string{\n\t\t\"bucket\": c.bucket,\n\t\t\"entity\": c.entity,\n\t})\n\treturn gensupport.SendRequest(c.ctx_, c.s.client, req)\n}\n\n// Do executes the \"storage.bucketAccessControls.get\" call.\n// Exactly one of *BucketAccessControl or error will be non-nil. Any\n// non-2xx status code is an error. Response headers are in either\n// *BucketAccessControl.ServerResponse.Header or (if a response was\n// returned at all) in error.(*googleapi.Error).Header. Use\n// googleapi.IsNotModified to check whether the returned error was\n// because http.StatusNotModified was returned.\nfunc (c *BucketAccessControlsGetCall) Do(opts ...googleapi.CallOption) (*BucketAccessControl, error) {\n\tgensupport.SetOptions(c.urlParams_, opts...)\n\tres, err := c.doRequest(\"json\")\n\tif res != nil && res.StatusCode == http.StatusNotModified {\n\t\tif res.Body != nil {\n\t\t\tres.Body.Close()\n\t\t}\n\t\treturn nil, &googleapi.Error{\n\t\t\tCode:   res.StatusCode,\n\t\t\tHeader: res.Header,\n\t\t}\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer googleapi.CloseBody(res)\n\tif err := googleapi.CheckResponse(res); err != nil {\n\t\treturn nil, err\n\t}\n\tret := &BucketAccessControl{\n\t\tServerResponse: googleapi.ServerResponse{\n\t\t\tHeader:         res.Header,\n\t\t\tHTTPStatusCode: res.StatusCode,\n\t\t},\n\t}\n\ttarget := &ret\n\tif err := gensupport.DecodeResponse(target, res); err != nil {\n\t\treturn nil, err\n\t}\n\treturn ret, nil\n\t// {\n\t//   \"description\": \"Returns the ACL entry for the specified entity on the specified bucket.\",\n\t//   \"httpMethod\": \"GET\",\n\t//   \"id\": \"storage.bucketAccessControls.get\",\n\t//   \"parameterOrder\": [\n\t//     \"bucket\",\n\t//     \"entity\"\n\t//   ],\n\t//   \"parameters\": {\n\t//     \"bucket\": {\n\t//       \"description\": \"Name of a bucket.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"entity\": {\n\t//       \"description\": \"The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"provisionalUserProject\": {\n\t//       \"description\": \"The project to be billed for this request if the target bucket is requester-pays bucket.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"userProject\": {\n\t//       \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     }\n\t//   },\n\t//   \"path\": \"b/{bucket}/acl/{entity}\",\n\t//   \"response\": {\n\t//     \"$ref\": \"BucketAccessControl\"\n\t//   },\n\t//   \"scopes\": [\n\t//     \"https://www.googleapis.com/auth/cloud-platform\",\n\t//     \"https://www.googleapis.com/auth/devstorage.full_control\"\n\t//   ]\n\t// }\n\n}\n\n// method id \"storage.bucketAccessControls.insert\":\n\ntype BucketAccessControlsInsertCall struct {\n\ts                   *Service\n\tbucket              string\n\tbucketaccesscontrol *BucketAccessControl\n\turlParams_          gensupport.URLParams\n\tctx_                context.Context\n\theader_             http.Header\n}\n\n// Insert: Creates a new ACL entry on the specified bucket.\nfunc (r *BucketAccessControlsService) Insert(bucket string, bucketaccesscontrol *BucketAccessControl) *BucketAccessControlsInsertCall {\n\tc := &BucketAccessControlsInsertCall{s: r.s, urlParams_: make(gensupport.URLParams)}\n\tc.bucket = bucket\n\tc.bucketaccesscontrol = bucketaccesscontrol\n\treturn c\n}\n\n// ProvisionalUserProject sets the optional parameter\n// \"provisionalUserProject\": The project to be billed for this request\n// if the target bucket is requester-pays bucket.\nfunc (c *BucketAccessControlsInsertCall) ProvisionalUserProject(provisionalUserProject string) *BucketAccessControlsInsertCall {\n\tc.urlParams_.Set(\"provisionalUserProject\", provisionalUserProject)\n\treturn c\n}\n\n// UserProject sets the optional parameter \"userProject\": The project to\n// be billed for this request. Required for Requester Pays buckets.\nfunc (c *BucketAccessControlsInsertCall) UserProject(userProject string) *BucketAccessControlsInsertCall {\n\tc.urlParams_.Set(\"userProject\", userProject)\n\treturn c\n}\n\n// Fields allows partial responses to be retrieved. See\n// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse\n// for more information.\nfunc (c *BucketAccessControlsInsertCall) Fields(s ...googleapi.Field) *BucketAccessControlsInsertCall {\n\tc.urlParams_.Set(\"fields\", googleapi.CombineFields(s))\n\treturn c\n}\n\n// Context sets the context to be used in this call's Do method. Any\n// pending HTTP request will be aborted if the provided context is\n// canceled.\nfunc (c *BucketAccessControlsInsertCall) Context(ctx context.Context) *BucketAccessControlsInsertCall {\n\tc.ctx_ = ctx\n\treturn c\n}\n\n// Header returns an http.Header that can be modified by the caller to\n// add HTTP headers to the request.\nfunc (c *BucketAccessControlsInsertCall) Header() http.Header {\n\tif c.header_ == nil {\n\t\tc.header_ = make(http.Header)\n\t}\n\treturn c.header_\n}\n\nfunc (c *BucketAccessControlsInsertCall) doRequest(alt string) (*http.Response, error) {\n\treqHeaders := make(http.Header)\n\tfor k, v := range c.header_ {\n\t\treqHeaders[k] = v\n\t}\n\treqHeaders.Set(\"User-Agent\", c.s.userAgent())\n\tvar body io.Reader = nil\n\tbody, err := googleapi.WithoutDataWrapper.JSONReader(c.bucketaccesscontrol)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treqHeaders.Set(\"Content-Type\", \"application/json\")\n\tc.urlParams_.Set(\"alt\", alt)\n\tc.urlParams_.Set(\"prettyPrint\", \"false\")\n\turls := googleapi.ResolveRelative(c.s.BasePath, \"b/{bucket}/acl\")\n\turls += \"?\" + c.urlParams_.Encode()\n\treq, err := http.NewRequest(\"POST\", urls, body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.Header = reqHeaders\n\tgoogleapi.Expand(req.URL, map[string]string{\n\t\t\"bucket\": c.bucket,\n\t})\n\treturn gensupport.SendRequest(c.ctx_, c.s.client, req)\n}\n\n// Do executes the \"storage.bucketAccessControls.insert\" call.\n// Exactly one of *BucketAccessControl or error will be non-nil. Any\n// non-2xx status code is an error. Response headers are in either\n// *BucketAccessControl.ServerResponse.Header or (if a response was\n// returned at all) in error.(*googleapi.Error).Header. Use\n// googleapi.IsNotModified to check whether the returned error was\n// because http.StatusNotModified was returned.\nfunc (c *BucketAccessControlsInsertCall) Do(opts ...googleapi.CallOption) (*BucketAccessControl, error) {\n\tgensupport.SetOptions(c.urlParams_, opts...)\n\tres, err := c.doRequest(\"json\")\n\tif res != nil && res.StatusCode == http.StatusNotModified {\n\t\tif res.Body != nil {\n\t\t\tres.Body.Close()\n\t\t}\n\t\treturn nil, &googleapi.Error{\n\t\t\tCode:   res.StatusCode,\n\t\t\tHeader: res.Header,\n\t\t}\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer googleapi.CloseBody(res)\n\tif err := googleapi.CheckResponse(res); err != nil {\n\t\treturn nil, err\n\t}\n\tret := &BucketAccessControl{\n\t\tServerResponse: googleapi.ServerResponse{\n\t\t\tHeader:         res.Header,\n\t\t\tHTTPStatusCode: res.StatusCode,\n\t\t},\n\t}\n\ttarget := &ret\n\tif err := gensupport.DecodeResponse(target, res); err != nil {\n\t\treturn nil, err\n\t}\n\treturn ret, nil\n\t// {\n\t//   \"description\": \"Creates a new ACL entry on the specified bucket.\",\n\t//   \"httpMethod\": \"POST\",\n\t//   \"id\": \"storage.bucketAccessControls.insert\",\n\t//   \"parameterOrder\": [\n\t//     \"bucket\"\n\t//   ],\n\t//   \"parameters\": {\n\t//     \"bucket\": {\n\t//       \"description\": \"Name of a bucket.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"provisionalUserProject\": {\n\t//       \"description\": \"The project to be billed for this request if the target bucket is requester-pays bucket.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"userProject\": {\n\t//       \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     }\n\t//   },\n\t//   \"path\": \"b/{bucket}/acl\",\n\t//   \"request\": {\n\t//     \"$ref\": \"BucketAccessControl\"\n\t//   },\n\t//   \"response\": {\n\t//     \"$ref\": \"BucketAccessControl\"\n\t//   },\n\t//   \"scopes\": [\n\t//     \"https://www.googleapis.com/auth/cloud-platform\",\n\t//     \"https://www.googleapis.com/auth/devstorage.full_control\"\n\t//   ]\n\t// }\n\n}\n\n// method id \"storage.bucketAccessControls.list\":\n\ntype BucketAccessControlsListCall struct {\n\ts            *Service\n\tbucket       string\n\turlParams_   gensupport.URLParams\n\tifNoneMatch_ string\n\tctx_         context.Context\n\theader_      http.Header\n}\n\n// List: Retrieves ACL entries on the specified bucket.\nfunc (r *BucketAccessControlsService) List(bucket string) *BucketAccessControlsListCall {\n\tc := &BucketAccessControlsListCall{s: r.s, urlParams_: make(gensupport.URLParams)}\n\tc.bucket = bucket\n\treturn c\n}\n\n// ProvisionalUserProject sets the optional parameter\n// \"provisionalUserProject\": The project to be billed for this request\n// if the target bucket is requester-pays bucket.\nfunc (c *BucketAccessControlsListCall) ProvisionalUserProject(provisionalUserProject string) *BucketAccessControlsListCall {\n\tc.urlParams_.Set(\"provisionalUserProject\", provisionalUserProject)\n\treturn c\n}\n\n// UserProject sets the optional parameter \"userProject\": The project to\n// be billed for this request. Required for Requester Pays buckets.\nfunc (c *BucketAccessControlsListCall) UserProject(userProject string) *BucketAccessControlsListCall {\n\tc.urlParams_.Set(\"userProject\", userProject)\n\treturn c\n}\n\n// Fields allows partial responses to be retrieved. See\n// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse\n// for more information.\nfunc (c *BucketAccessControlsListCall) Fields(s ...googleapi.Field) *BucketAccessControlsListCall {\n\tc.urlParams_.Set(\"fields\", googleapi.CombineFields(s))\n\treturn c\n}\n\n// IfNoneMatch sets the optional parameter which makes the operation\n// fail if the object's ETag matches the given value. This is useful for\n// getting updates only after the object has changed since the last\n// request. Use googleapi.IsNotModified to check whether the response\n// error from Do is the result of In-None-Match.\nfunc (c *BucketAccessControlsListCall) IfNoneMatch(entityTag string) *BucketAccessControlsListCall {\n\tc.ifNoneMatch_ = entityTag\n\treturn c\n}\n\n// Context sets the context to be used in this call's Do method. Any\n// pending HTTP request will be aborted if the provided context is\n// canceled.\nfunc (c *BucketAccessControlsListCall) Context(ctx context.Context) *BucketAccessControlsListCall {\n\tc.ctx_ = ctx\n\treturn c\n}\n\n// Header returns an http.Header that can be modified by the caller to\n// add HTTP headers to the request.\nfunc (c *BucketAccessControlsListCall) Header() http.Header {\n\tif c.header_ == nil {\n\t\tc.header_ = make(http.Header)\n\t}\n\treturn c.header_\n}\n\nfunc (c *BucketAccessControlsListCall) doRequest(alt string) (*http.Response, error) {\n\treqHeaders := make(http.Header)\n\tfor k, v := range c.header_ {\n\t\treqHeaders[k] = v\n\t}\n\treqHeaders.Set(\"User-Agent\", c.s.userAgent())\n\tif c.ifNoneMatch_ != \"\" {\n\t\treqHeaders.Set(\"If-None-Match\", c.ifNoneMatch_)\n\t}\n\tvar body io.Reader = nil\n\tc.urlParams_.Set(\"alt\", alt)\n\tc.urlParams_.Set(\"prettyPrint\", \"false\")\n\turls := googleapi.ResolveRelative(c.s.BasePath, \"b/{bucket}/acl\")\n\turls += \"?\" + c.urlParams_.Encode()\n\treq, err := http.NewRequest(\"GET\", urls, body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.Header = reqHeaders\n\tgoogleapi.Expand(req.URL, map[string]string{\n\t\t\"bucket\": c.bucket,\n\t})\n\treturn gensupport.SendRequest(c.ctx_, c.s.client, req)\n}\n\n// Do executes the \"storage.bucketAccessControls.list\" call.\n// Exactly one of *BucketAccessControls or error will be non-nil. Any\n// non-2xx status code is an error. Response headers are in either\n// *BucketAccessControls.ServerResponse.Header or (if a response was\n// returned at all) in error.(*googleapi.Error).Header. Use\n// googleapi.IsNotModified to check whether the returned error was\n// because http.StatusNotModified was returned.\nfunc (c *BucketAccessControlsListCall) Do(opts ...googleapi.CallOption) (*BucketAccessControls, error) {\n\tgensupport.SetOptions(c.urlParams_, opts...)\n\tres, err := c.doRequest(\"json\")\n\tif res != nil && res.StatusCode == http.StatusNotModified {\n\t\tif res.Body != nil {\n\t\t\tres.Body.Close()\n\t\t}\n\t\treturn nil, &googleapi.Error{\n\t\t\tCode:   res.StatusCode,\n\t\t\tHeader: res.Header,\n\t\t}\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer googleapi.CloseBody(res)\n\tif err := googleapi.CheckResponse(res); err != nil {\n\t\treturn nil, err\n\t}\n\tret := &BucketAccessControls{\n\t\tServerResponse: googleapi.ServerResponse{\n\t\t\tHeader:         res.Header,\n\t\t\tHTTPStatusCode: res.StatusCode,\n\t\t},\n\t}\n\ttarget := &ret\n\tif err := gensupport.DecodeResponse(target, res); err != nil {\n\t\treturn nil, err\n\t}\n\treturn ret, nil\n\t// {\n\t//   \"description\": \"Retrieves ACL entries on the specified bucket.\",\n\t//   \"httpMethod\": \"GET\",\n\t//   \"id\": \"storage.bucketAccessControls.list\",\n\t//   \"parameterOrder\": [\n\t//     \"bucket\"\n\t//   ],\n\t//   \"parameters\": {\n\t//     \"bucket\": {\n\t//       \"description\": \"Name of a bucket.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"provisionalUserProject\": {\n\t//       \"description\": \"The project to be billed for this request if the target bucket is requester-pays bucket.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"userProject\": {\n\t//       \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     }\n\t//   },\n\t//   \"path\": \"b/{bucket}/acl\",\n\t//   \"response\": {\n\t//     \"$ref\": \"BucketAccessControls\"\n\t//   },\n\t//   \"scopes\": [\n\t//     \"https://www.googleapis.com/auth/cloud-platform\",\n\t//     \"https://www.googleapis.com/auth/devstorage.full_control\"\n\t//   ]\n\t// }\n\n}\n\n// method id \"storage.bucketAccessControls.patch\":\n\ntype BucketAccessControlsPatchCall struct {\n\ts                   *Service\n\tbucket              string\n\tentity              string\n\tbucketaccesscontrol *BucketAccessControl\n\turlParams_          gensupport.URLParams\n\tctx_                context.Context\n\theader_             http.Header\n}\n\n// Patch: Patches an ACL entry on the specified bucket.\nfunc (r *BucketAccessControlsService) Patch(bucket string, entity string, bucketaccesscontrol *BucketAccessControl) *BucketAccessControlsPatchCall {\n\tc := &BucketAccessControlsPatchCall{s: r.s, urlParams_: make(gensupport.URLParams)}\n\tc.bucket = bucket\n\tc.entity = entity\n\tc.bucketaccesscontrol = bucketaccesscontrol\n\treturn c\n}\n\n// ProvisionalUserProject sets the optional parameter\n// \"provisionalUserProject\": The project to be billed for this request\n// if the target bucket is requester-pays bucket.\nfunc (c *BucketAccessControlsPatchCall) ProvisionalUserProject(provisionalUserProject string) *BucketAccessControlsPatchCall {\n\tc.urlParams_.Set(\"provisionalUserProject\", provisionalUserProject)\n\treturn c\n}\n\n// UserProject sets the optional parameter \"userProject\": The project to\n// be billed for this request. Required for Requester Pays buckets.\nfunc (c *BucketAccessControlsPatchCall) UserProject(userProject string) *BucketAccessControlsPatchCall {\n\tc.urlParams_.Set(\"userProject\", userProject)\n\treturn c\n}\n\n// Fields allows partial responses to be retrieved. See\n// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse\n// for more information.\nfunc (c *BucketAccessControlsPatchCall) Fields(s ...googleapi.Field) *BucketAccessControlsPatchCall {\n\tc.urlParams_.Set(\"fields\", googleapi.CombineFields(s))\n\treturn c\n}\n\n// Context sets the context to be used in this call's Do method. Any\n// pending HTTP request will be aborted if the provided context is\n// canceled.\nfunc (c *BucketAccessControlsPatchCall) Context(ctx context.Context) *BucketAccessControlsPatchCall {\n\tc.ctx_ = ctx\n\treturn c\n}\n\n// Header returns an http.Header that can be modified by the caller to\n// add HTTP headers to the request.\nfunc (c *BucketAccessControlsPatchCall) Header() http.Header {\n\tif c.header_ == nil {\n\t\tc.header_ = make(http.Header)\n\t}\n\treturn c.header_\n}\n\nfunc (c *BucketAccessControlsPatchCall) doRequest(alt string) (*http.Response, error) {\n\treqHeaders := make(http.Header)\n\tfor k, v := range c.header_ {\n\t\treqHeaders[k] = v\n\t}\n\treqHeaders.Set(\"User-Agent\", c.s.userAgent())\n\tvar body io.Reader = nil\n\tbody, err := googleapi.WithoutDataWrapper.JSONReader(c.bucketaccesscontrol)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treqHeaders.Set(\"Content-Type\", \"application/json\")\n\tc.urlParams_.Set(\"alt\", alt)\n\tc.urlParams_.Set(\"prettyPrint\", \"false\")\n\turls := googleapi.ResolveRelative(c.s.BasePath, \"b/{bucket}/acl/{entity}\")\n\turls += \"?\" + c.urlParams_.Encode()\n\treq, err := http.NewRequest(\"PATCH\", urls, body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.Header = reqHeaders\n\tgoogleapi.Expand(req.URL, map[string]string{\n\t\t\"bucket\": c.bucket,\n\t\t\"entity\": c.entity,\n\t})\n\treturn gensupport.SendRequest(c.ctx_, c.s.client, req)\n}\n\n// Do executes the \"storage.bucketAccessControls.patch\" call.\n// Exactly one of *BucketAccessControl or error will be non-nil. Any\n// non-2xx status code is an error. Response headers are in either\n// *BucketAccessControl.ServerResponse.Header or (if a response was\n// returned at all) in error.(*googleapi.Error).Header. Use\n// googleapi.IsNotModified to check whether the returned error was\n// because http.StatusNotModified was returned.\nfunc (c *BucketAccessControlsPatchCall) Do(opts ...googleapi.CallOption) (*BucketAccessControl, error) {\n\tgensupport.SetOptions(c.urlParams_, opts...)\n\tres, err := c.doRequest(\"json\")\n\tif res != nil && res.StatusCode == http.StatusNotModified {\n\t\tif res.Body != nil {\n\t\t\tres.Body.Close()\n\t\t}\n\t\treturn nil, &googleapi.Error{\n\t\t\tCode:   res.StatusCode,\n\t\t\tHeader: res.Header,\n\t\t}\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer googleapi.CloseBody(res)\n\tif err := googleapi.CheckResponse(res); err != nil {\n\t\treturn nil, err\n\t}\n\tret := &BucketAccessControl{\n\t\tServerResponse: googleapi.ServerResponse{\n\t\t\tHeader:         res.Header,\n\t\t\tHTTPStatusCode: res.StatusCode,\n\t\t},\n\t}\n\ttarget := &ret\n\tif err := gensupport.DecodeResponse(target, res); err != nil {\n\t\treturn nil, err\n\t}\n\treturn ret, nil\n\t// {\n\t//   \"description\": \"Patches an ACL entry on the specified bucket.\",\n\t//   \"httpMethod\": \"PATCH\",\n\t//   \"id\": \"storage.bucketAccessControls.patch\",\n\t//   \"parameterOrder\": [\n\t//     \"bucket\",\n\t//     \"entity\"\n\t//   ],\n\t//   \"parameters\": {\n\t//     \"bucket\": {\n\t//       \"description\": \"Name of a bucket.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"entity\": {\n\t//       \"description\": \"The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"provisionalUserProject\": {\n\t//       \"description\": \"The project to be billed for this request if the target bucket is requester-pays bucket.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"userProject\": {\n\t//       \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     }\n\t//   },\n\t//   \"path\": \"b/{bucket}/acl/{entity}\",\n\t//   \"request\": {\n\t//     \"$ref\": \"BucketAccessControl\"\n\t//   },\n\t//   \"response\": {\n\t//     \"$ref\": \"BucketAccessControl\"\n\t//   },\n\t//   \"scopes\": [\n\t//     \"https://www.googleapis.com/auth/cloud-platform\",\n\t//     \"https://www.googleapis.com/auth/devstorage.full_control\"\n\t//   ]\n\t// }\n\n}\n\n// method id \"storage.bucketAccessControls.update\":\n\ntype BucketAccessControlsUpdateCall struct {\n\ts                   *Service\n\tbucket              string\n\tentity              string\n\tbucketaccesscontrol *BucketAccessControl\n\turlParams_          gensupport.URLParams\n\tctx_                context.Context\n\theader_             http.Header\n}\n\n// Update: Updates an ACL entry on the specified bucket.\nfunc (r *BucketAccessControlsService) Update(bucket string, entity string, bucketaccesscontrol *BucketAccessControl) *BucketAccessControlsUpdateCall {\n\tc := &BucketAccessControlsUpdateCall{s: r.s, urlParams_: make(gensupport.URLParams)}\n\tc.bucket = bucket\n\tc.entity = entity\n\tc.bucketaccesscontrol = bucketaccesscontrol\n\treturn c\n}\n\n// ProvisionalUserProject sets the optional parameter\n// \"provisionalUserProject\": The project to be billed for this request\n// if the target bucket is requester-pays bucket.\nfunc (c *BucketAccessControlsUpdateCall) ProvisionalUserProject(provisionalUserProject string) *BucketAccessControlsUpdateCall {\n\tc.urlParams_.Set(\"provisionalUserProject\", provisionalUserProject)\n\treturn c\n}\n\n// UserProject sets the optional parameter \"userProject\": The project to\n// be billed for this request. Required for Requester Pays buckets.\nfunc (c *BucketAccessControlsUpdateCall) UserProject(userProject string) *BucketAccessControlsUpdateCall {\n\tc.urlParams_.Set(\"userProject\", userProject)\n\treturn c\n}\n\n// Fields allows partial responses to be retrieved. See\n// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse\n// for more information.\nfunc (c *BucketAccessControlsUpdateCall) Fields(s ...googleapi.Field) *BucketAccessControlsUpdateCall {\n\tc.urlParams_.Set(\"fields\", googleapi.CombineFields(s))\n\treturn c\n}\n\n// Context sets the context to be used in this call's Do method. Any\n// pending HTTP request will be aborted if the provided context is\n// canceled.\nfunc (c *BucketAccessControlsUpdateCall) Context(ctx context.Context) *BucketAccessControlsUpdateCall {\n\tc.ctx_ = ctx\n\treturn c\n}\n\n// Header returns an http.Header that can be modified by the caller to\n// add HTTP headers to the request.\nfunc (c *BucketAccessControlsUpdateCall) Header() http.Header {\n\tif c.header_ == nil {\n\t\tc.header_ = make(http.Header)\n\t}\n\treturn c.header_\n}\n\nfunc (c *BucketAccessControlsUpdateCall) doRequest(alt string) (*http.Response, error) {\n\treqHeaders := make(http.Header)\n\tfor k, v := range c.header_ {\n\t\treqHeaders[k] = v\n\t}\n\treqHeaders.Set(\"User-Agent\", c.s.userAgent())\n\tvar body io.Reader = nil\n\tbody, err := googleapi.WithoutDataWrapper.JSONReader(c.bucketaccesscontrol)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treqHeaders.Set(\"Content-Type\", \"application/json\")\n\tc.urlParams_.Set(\"alt\", alt)\n\tc.urlParams_.Set(\"prettyPrint\", \"false\")\n\turls := googleapi.ResolveRelative(c.s.BasePath, \"b/{bucket}/acl/{entity}\")\n\turls += \"?\" + c.urlParams_.Encode()\n\treq, err := http.NewRequest(\"PUT\", urls, body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.Header = reqHeaders\n\tgoogleapi.Expand(req.URL, map[string]string{\n\t\t\"bucket\": c.bucket,\n\t\t\"entity\": c.entity,\n\t})\n\treturn gensupport.SendRequest(c.ctx_, c.s.client, req)\n}\n\n// Do executes the \"storage.bucketAccessControls.update\" call.\n// Exactly one of *BucketAccessControl or error will be non-nil. Any\n// non-2xx status code is an error. Response headers are in either\n// *BucketAccessControl.ServerResponse.Header or (if a response was\n// returned at all) in error.(*googleapi.Error).Header. Use\n// googleapi.IsNotModified to check whether the returned error was\n// because http.StatusNotModified was returned.\nfunc (c *BucketAccessControlsUpdateCall) Do(opts ...googleapi.CallOption) (*BucketAccessControl, error) {\n\tgensupport.SetOptions(c.urlParams_, opts...)\n\tres, err := c.doRequest(\"json\")\n\tif res != nil && res.StatusCode == http.StatusNotModified {\n\t\tif res.Body != nil {\n\t\t\tres.Body.Close()\n\t\t}\n\t\treturn nil, &googleapi.Error{\n\t\t\tCode:   res.StatusCode,\n\t\t\tHeader: res.Header,\n\t\t}\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer googleapi.CloseBody(res)\n\tif err := googleapi.CheckResponse(res); err != nil {\n\t\treturn nil, err\n\t}\n\tret := &BucketAccessControl{\n\t\tServerResponse: googleapi.ServerResponse{\n\t\t\tHeader:         res.Header,\n\t\t\tHTTPStatusCode: res.StatusCode,\n\t\t},\n\t}\n\ttarget := &ret\n\tif err := gensupport.DecodeResponse(target, res); err != nil {\n\t\treturn nil, err\n\t}\n\treturn ret, nil\n\t// {\n\t//   \"description\": \"Updates an ACL entry on the specified bucket.\",\n\t//   \"httpMethod\": \"PUT\",\n\t//   \"id\": \"storage.bucketAccessControls.update\",\n\t//   \"parameterOrder\": [\n\t//     \"bucket\",\n\t//     \"entity\"\n\t//   ],\n\t//   \"parameters\": {\n\t//     \"bucket\": {\n\t//       \"description\": \"Name of a bucket.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"entity\": {\n\t//       \"description\": \"The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"provisionalUserProject\": {\n\t//       \"description\": \"The project to be billed for this request if the target bucket is requester-pays bucket.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"userProject\": {\n\t//       \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     }\n\t//   },\n\t//   \"path\": \"b/{bucket}/acl/{entity}\",\n\t//   \"request\": {\n\t//     \"$ref\": \"BucketAccessControl\"\n\t//   },\n\t//   \"response\": {\n\t//     \"$ref\": \"BucketAccessControl\"\n\t//   },\n\t//   \"scopes\": [\n\t//     \"https://www.googleapis.com/auth/cloud-platform\",\n\t//     \"https://www.googleapis.com/auth/devstorage.full_control\"\n\t//   ]\n\t// }\n\n}\n\n// method id \"storage.buckets.delete\":\n\ntype BucketsDeleteCall struct {\n\ts          *Service\n\tbucket     string\n\turlParams_ gensupport.URLParams\n\tctx_       context.Context\n\theader_    http.Header\n}\n\n// Delete: Permanently deletes an empty bucket.\nfunc (r *BucketsService) Delete(bucket string) *BucketsDeleteCall {\n\tc := &BucketsDeleteCall{s: r.s, urlParams_: make(gensupport.URLParams)}\n\tc.bucket = bucket\n\treturn c\n}\n\n// IfMetagenerationMatch sets the optional parameter\n// \"ifMetagenerationMatch\": If set, only deletes the bucket if its\n// metageneration matches this value.\nfunc (c *BucketsDeleteCall) IfMetagenerationMatch(ifMetagenerationMatch int64) *BucketsDeleteCall {\n\tc.urlParams_.Set(\"ifMetagenerationMatch\", fmt.Sprint(ifMetagenerationMatch))\n\treturn c\n}\n\n// IfMetagenerationNotMatch sets the optional parameter\n// \"ifMetagenerationNotMatch\": If set, only deletes the bucket if its\n// metageneration does not match this value.\nfunc (c *BucketsDeleteCall) IfMetagenerationNotMatch(ifMetagenerationNotMatch int64) *BucketsDeleteCall {\n\tc.urlParams_.Set(\"ifMetagenerationNotMatch\", fmt.Sprint(ifMetagenerationNotMatch))\n\treturn c\n}\n\n// ProvisionalUserProject sets the optional parameter\n// \"provisionalUserProject\": The project to be billed for this request\n// if the target bucket is requester-pays bucket.\nfunc (c *BucketsDeleteCall) ProvisionalUserProject(provisionalUserProject string) *BucketsDeleteCall {\n\tc.urlParams_.Set(\"provisionalUserProject\", provisionalUserProject)\n\treturn c\n}\n\n// UserProject sets the optional parameter \"userProject\": The project to\n// be billed for this request. Required for Requester Pays buckets.\nfunc (c *BucketsDeleteCall) UserProject(userProject string) *BucketsDeleteCall {\n\tc.urlParams_.Set(\"userProject\", userProject)\n\treturn c\n}\n\n// Fields allows partial responses to be retrieved. See\n// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse\n// for more information.\nfunc (c *BucketsDeleteCall) Fields(s ...googleapi.Field) *BucketsDeleteCall {\n\tc.urlParams_.Set(\"fields\", googleapi.CombineFields(s))\n\treturn c\n}\n\n// Context sets the context to be used in this call's Do method. Any\n// pending HTTP request will be aborted if the provided context is\n// canceled.\nfunc (c *BucketsDeleteCall) Context(ctx context.Context) *BucketsDeleteCall {\n\tc.ctx_ = ctx\n\treturn c\n}\n\n// Header returns an http.Header that can be modified by the caller to\n// add HTTP headers to the request.\nfunc (c *BucketsDeleteCall) Header() http.Header {\n\tif c.header_ == nil {\n\t\tc.header_ = make(http.Header)\n\t}\n\treturn c.header_\n}\n\nfunc (c *BucketsDeleteCall) doRequest(alt string) (*http.Response, error) {\n\treqHeaders := make(http.Header)\n\tfor k, v := range c.header_ {\n\t\treqHeaders[k] = v\n\t}\n\treqHeaders.Set(\"User-Agent\", c.s.userAgent())\n\tvar body io.Reader = nil\n\tc.urlParams_.Set(\"alt\", alt)\n\tc.urlParams_.Set(\"prettyPrint\", \"false\")\n\turls := googleapi.ResolveRelative(c.s.BasePath, \"b/{bucket}\")\n\turls += \"?\" + c.urlParams_.Encode()\n\treq, err := http.NewRequest(\"DELETE\", urls, body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.Header = reqHeaders\n\tgoogleapi.Expand(req.URL, map[string]string{\n\t\t\"bucket\": c.bucket,\n\t})\n\treturn gensupport.SendRequest(c.ctx_, c.s.client, req)\n}\n\n// Do executes the \"storage.buckets.delete\" call.\nfunc (c *BucketsDeleteCall) Do(opts ...googleapi.CallOption) error {\n\tgensupport.SetOptions(c.urlParams_, opts...)\n\tres, err := c.doRequest(\"json\")\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer googleapi.CloseBody(res)\n\tif err := googleapi.CheckResponse(res); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n\t// {\n\t//   \"description\": \"Permanently deletes an empty bucket.\",\n\t//   \"httpMethod\": \"DELETE\",\n\t//   \"id\": \"storage.buckets.delete\",\n\t//   \"parameterOrder\": [\n\t//     \"bucket\"\n\t//   ],\n\t//   \"parameters\": {\n\t//     \"bucket\": {\n\t//       \"description\": \"Name of a bucket.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"ifMetagenerationMatch\": {\n\t//       \"description\": \"If set, only deletes the bucket if its metageneration matches this value.\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"ifMetagenerationNotMatch\": {\n\t//       \"description\": \"If set, only deletes the bucket if its metageneration does not match this value.\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"provisionalUserProject\": {\n\t//       \"description\": \"The project to be billed for this request if the target bucket is requester-pays bucket.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"userProject\": {\n\t//       \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     }\n\t//   },\n\t//   \"path\": \"b/{bucket}\",\n\t//   \"scopes\": [\n\t//     \"https://www.googleapis.com/auth/cloud-platform\",\n\t//     \"https://www.googleapis.com/auth/devstorage.full_control\",\n\t//     \"https://www.googleapis.com/auth/devstorage.read_write\"\n\t//   ]\n\t// }\n\n}\n\n// method id \"storage.buckets.get\":\n\ntype BucketsGetCall struct {\n\ts            *Service\n\tbucket       string\n\turlParams_   gensupport.URLParams\n\tifNoneMatch_ string\n\tctx_         context.Context\n\theader_      http.Header\n}\n\n// Get: Returns metadata for the specified bucket.\nfunc (r *BucketsService) Get(bucket string) *BucketsGetCall {\n\tc := &BucketsGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}\n\tc.bucket = bucket\n\treturn c\n}\n\n// IfMetagenerationMatch sets the optional parameter\n// \"ifMetagenerationMatch\": Makes the return of the bucket metadata\n// conditional on whether the bucket's current metageneration matches\n// the given value.\nfunc (c *BucketsGetCall) IfMetagenerationMatch(ifMetagenerationMatch int64) *BucketsGetCall {\n\tc.urlParams_.Set(\"ifMetagenerationMatch\", fmt.Sprint(ifMetagenerationMatch))\n\treturn c\n}\n\n// IfMetagenerationNotMatch sets the optional parameter\n// \"ifMetagenerationNotMatch\": Makes the return of the bucket metadata\n// conditional on whether the bucket's current metageneration does not\n// match the given value.\nfunc (c *BucketsGetCall) IfMetagenerationNotMatch(ifMetagenerationNotMatch int64) *BucketsGetCall {\n\tc.urlParams_.Set(\"ifMetagenerationNotMatch\", fmt.Sprint(ifMetagenerationNotMatch))\n\treturn c\n}\n\n// Projection sets the optional parameter \"projection\": Set of\n// properties to return. Defaults to noAcl.\n//\n// Possible values:\n//   \"full\" - Include all properties.\n//   \"noAcl\" - Omit owner, acl and defaultObjectAcl properties.\nfunc (c *BucketsGetCall) Projection(projection string) *BucketsGetCall {\n\tc.urlParams_.Set(\"projection\", projection)\n\treturn c\n}\n\n// ProvisionalUserProject sets the optional parameter\n// \"provisionalUserProject\": The project to be billed for this request\n// if the target bucket is requester-pays bucket.\nfunc (c *BucketsGetCall) ProvisionalUserProject(provisionalUserProject string) *BucketsGetCall {\n\tc.urlParams_.Set(\"provisionalUserProject\", provisionalUserProject)\n\treturn c\n}\n\n// UserProject sets the optional parameter \"userProject\": The project to\n// be billed for this request. Required for Requester Pays buckets.\nfunc (c *BucketsGetCall) UserProject(userProject string) *BucketsGetCall {\n\tc.urlParams_.Set(\"userProject\", userProject)\n\treturn c\n}\n\n// Fields allows partial responses to be retrieved. See\n// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse\n// for more information.\nfunc (c *BucketsGetCall) Fields(s ...googleapi.Field) *BucketsGetCall {\n\tc.urlParams_.Set(\"fields\", googleapi.CombineFields(s))\n\treturn c\n}\n\n// IfNoneMatch sets the optional parameter which makes the operation\n// fail if the object's ETag matches the given value. This is useful for\n// getting updates only after the object has changed since the last\n// request. Use googleapi.IsNotModified to check whether the response\n// error from Do is the result of In-None-Match.\nfunc (c *BucketsGetCall) IfNoneMatch(entityTag string) *BucketsGetCall {\n\tc.ifNoneMatch_ = entityTag\n\treturn c\n}\n\n// Context sets the context to be used in this call's Do method. Any\n// pending HTTP request will be aborted if the provided context is\n// canceled.\nfunc (c *BucketsGetCall) Context(ctx context.Context) *BucketsGetCall {\n\tc.ctx_ = ctx\n\treturn c\n}\n\n// Header returns an http.Header that can be modified by the caller to\n// add HTTP headers to the request.\nfunc (c *BucketsGetCall) Header() http.Header {\n\tif c.header_ == nil {\n\t\tc.header_ = make(http.Header)\n\t}\n\treturn c.header_\n}\n\nfunc (c *BucketsGetCall) doRequest(alt string) (*http.Response, error) {\n\treqHeaders := make(http.Header)\n\tfor k, v := range c.header_ {\n\t\treqHeaders[k] = v\n\t}\n\treqHeaders.Set(\"User-Agent\", c.s.userAgent())\n\tif c.ifNoneMatch_ != \"\" {\n\t\treqHeaders.Set(\"If-None-Match\", c.ifNoneMatch_)\n\t}\n\tvar body io.Reader = nil\n\tc.urlParams_.Set(\"alt\", alt)\n\tc.urlParams_.Set(\"prettyPrint\", \"false\")\n\turls := googleapi.ResolveRelative(c.s.BasePath, \"b/{bucket}\")\n\turls += \"?\" + c.urlParams_.Encode()\n\treq, err := http.NewRequest(\"GET\", urls, body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.Header = reqHeaders\n\tgoogleapi.Expand(req.URL, map[string]string{\n\t\t\"bucket\": c.bucket,\n\t})\n\treturn gensupport.SendRequest(c.ctx_, c.s.client, req)\n}\n\n// Do executes the \"storage.buckets.get\" call.\n// Exactly one of *Bucket or error will be non-nil. Any non-2xx status\n// code is an error. Response headers are in either\n// *Bucket.ServerResponse.Header or (if a response was returned at all)\n// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to\n// check whether the returned error was because http.StatusNotModified\n// was returned.\nfunc (c *BucketsGetCall) Do(opts ...googleapi.CallOption) (*Bucket, error) {\n\tgensupport.SetOptions(c.urlParams_, opts...)\n\tres, err := c.doRequest(\"json\")\n\tif res != nil && res.StatusCode == http.StatusNotModified {\n\t\tif res.Body != nil {\n\t\t\tres.Body.Close()\n\t\t}\n\t\treturn nil, &googleapi.Error{\n\t\t\tCode:   res.StatusCode,\n\t\t\tHeader: res.Header,\n\t\t}\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer googleapi.CloseBody(res)\n\tif err := googleapi.CheckResponse(res); err != nil {\n\t\treturn nil, err\n\t}\n\tret := &Bucket{\n\t\tServerResponse: googleapi.ServerResponse{\n\t\t\tHeader:         res.Header,\n\t\t\tHTTPStatusCode: res.StatusCode,\n\t\t},\n\t}\n\ttarget := &ret\n\tif err := gensupport.DecodeResponse(target, res); err != nil {\n\t\treturn nil, err\n\t}\n\treturn ret, nil\n\t// {\n\t//   \"description\": \"Returns metadata for the specified bucket.\",\n\t//   \"httpMethod\": \"GET\",\n\t//   \"id\": \"storage.buckets.get\",\n\t//   \"parameterOrder\": [\n\t//     \"bucket\"\n\t//   ],\n\t//   \"parameters\": {\n\t//     \"bucket\": {\n\t//       \"description\": \"Name of a bucket.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"ifMetagenerationMatch\": {\n\t//       \"description\": \"Makes the return of the bucket metadata conditional on whether the bucket's current metageneration matches the given value.\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"ifMetagenerationNotMatch\": {\n\t//       \"description\": \"Makes the return of the bucket metadata conditional on whether the bucket's current metageneration does not match the given value.\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"projection\": {\n\t//       \"description\": \"Set of properties to return. Defaults to noAcl.\",\n\t//       \"enum\": [\n\t//         \"full\",\n\t//         \"noAcl\"\n\t//       ],\n\t//       \"enumDescriptions\": [\n\t//         \"Include all properties.\",\n\t//         \"Omit owner, acl and defaultObjectAcl properties.\"\n\t//       ],\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"provisionalUserProject\": {\n\t//       \"description\": \"The project to be billed for this request if the target bucket is requester-pays bucket.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"userProject\": {\n\t//       \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     }\n\t//   },\n\t//   \"path\": \"b/{bucket}\",\n\t//   \"response\": {\n\t//     \"$ref\": \"Bucket\"\n\t//   },\n\t//   \"scopes\": [\n\t//     \"https://www.googleapis.com/auth/cloud-platform\",\n\t//     \"https://www.googleapis.com/auth/cloud-platform.read-only\",\n\t//     \"https://www.googleapis.com/auth/devstorage.full_control\",\n\t//     \"https://www.googleapis.com/auth/devstorage.read_only\",\n\t//     \"https://www.googleapis.com/auth/devstorage.read_write\"\n\t//   ]\n\t// }\n\n}\n\n// method id \"storage.buckets.getIamPolicy\":\n\ntype BucketsGetIamPolicyCall struct {\n\ts            *Service\n\tbucket       string\n\turlParams_   gensupport.URLParams\n\tifNoneMatch_ string\n\tctx_         context.Context\n\theader_      http.Header\n}\n\n// GetIamPolicy: Returns an IAM policy for the specified bucket.\nfunc (r *BucketsService) GetIamPolicy(bucket string) *BucketsGetIamPolicyCall {\n\tc := &BucketsGetIamPolicyCall{s: r.s, urlParams_: make(gensupport.URLParams)}\n\tc.bucket = bucket\n\treturn c\n}\n\n// ProvisionalUserProject sets the optional parameter\n// \"provisionalUserProject\": The project to be billed for this request\n// if the target bucket is requester-pays bucket.\nfunc (c *BucketsGetIamPolicyCall) ProvisionalUserProject(provisionalUserProject string) *BucketsGetIamPolicyCall {\n\tc.urlParams_.Set(\"provisionalUserProject\", provisionalUserProject)\n\treturn c\n}\n\n// UserProject sets the optional parameter \"userProject\": The project to\n// be billed for this request. Required for Requester Pays buckets.\nfunc (c *BucketsGetIamPolicyCall) UserProject(userProject string) *BucketsGetIamPolicyCall {\n\tc.urlParams_.Set(\"userProject\", userProject)\n\treturn c\n}\n\n// Fields allows partial responses to be retrieved. See\n// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse\n// for more information.\nfunc (c *BucketsGetIamPolicyCall) Fields(s ...googleapi.Field) *BucketsGetIamPolicyCall {\n\tc.urlParams_.Set(\"fields\", googleapi.CombineFields(s))\n\treturn c\n}\n\n// IfNoneMatch sets the optional parameter which makes the operation\n// fail if the object's ETag matches the given value. This is useful for\n// getting updates only after the object has changed since the last\n// request. Use googleapi.IsNotModified to check whether the response\n// error from Do is the result of In-None-Match.\nfunc (c *BucketsGetIamPolicyCall) IfNoneMatch(entityTag string) *BucketsGetIamPolicyCall {\n\tc.ifNoneMatch_ = entityTag\n\treturn c\n}\n\n// Context sets the context to be used in this call's Do method. Any\n// pending HTTP request will be aborted if the provided context is\n// canceled.\nfunc (c *BucketsGetIamPolicyCall) Context(ctx context.Context) *BucketsGetIamPolicyCall {\n\tc.ctx_ = ctx\n\treturn c\n}\n\n// Header returns an http.Header that can be modified by the caller to\n// add HTTP headers to the request.\nfunc (c *BucketsGetIamPolicyCall) Header() http.Header {\n\tif c.header_ == nil {\n\t\tc.header_ = make(http.Header)\n\t}\n\treturn c.header_\n}\n\nfunc (c *BucketsGetIamPolicyCall) doRequest(alt string) (*http.Response, error) {\n\treqHeaders := make(http.Header)\n\tfor k, v := range c.header_ {\n\t\treqHeaders[k] = v\n\t}\n\treqHeaders.Set(\"User-Agent\", c.s.userAgent())\n\tif c.ifNoneMatch_ != \"\" {\n\t\treqHeaders.Set(\"If-None-Match\", c.ifNoneMatch_)\n\t}\n\tvar body io.Reader = nil\n\tc.urlParams_.Set(\"alt\", alt)\n\tc.urlParams_.Set(\"prettyPrint\", \"false\")\n\turls := googleapi.ResolveRelative(c.s.BasePath, \"b/{bucket}/iam\")\n\turls += \"?\" + c.urlParams_.Encode()\n\treq, err := http.NewRequest(\"GET\", urls, body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.Header = reqHeaders\n\tgoogleapi.Expand(req.URL, map[string]string{\n\t\t\"bucket\": c.bucket,\n\t})\n\treturn gensupport.SendRequest(c.ctx_, c.s.client, req)\n}\n\n// Do executes the \"storage.buckets.getIamPolicy\" call.\n// Exactly one of *Policy or error will be non-nil. Any non-2xx status\n// code is an error. Response headers are in either\n// *Policy.ServerResponse.Header or (if a response was returned at all)\n// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to\n// check whether the returned error was because http.StatusNotModified\n// was returned.\nfunc (c *BucketsGetIamPolicyCall) Do(opts ...googleapi.CallOption) (*Policy, error) {\n\tgensupport.SetOptions(c.urlParams_, opts...)\n\tres, err := c.doRequest(\"json\")\n\tif res != nil && res.StatusCode == http.StatusNotModified {\n\t\tif res.Body != nil {\n\t\t\tres.Body.Close()\n\t\t}\n\t\treturn nil, &googleapi.Error{\n\t\t\tCode:   res.StatusCode,\n\t\t\tHeader: res.Header,\n\t\t}\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer googleapi.CloseBody(res)\n\tif err := googleapi.CheckResponse(res); err != nil {\n\t\treturn nil, err\n\t}\n\tret := &Policy{\n\t\tServerResponse: googleapi.ServerResponse{\n\t\t\tHeader:         res.Header,\n\t\t\tHTTPStatusCode: res.StatusCode,\n\t\t},\n\t}\n\ttarget := &ret\n\tif err := gensupport.DecodeResponse(target, res); err != nil {\n\t\treturn nil, err\n\t}\n\treturn ret, nil\n\t// {\n\t//   \"description\": \"Returns an IAM policy for the specified bucket.\",\n\t//   \"httpMethod\": \"GET\",\n\t//   \"id\": \"storage.buckets.getIamPolicy\",\n\t//   \"parameterOrder\": [\n\t//     \"bucket\"\n\t//   ],\n\t//   \"parameters\": {\n\t//     \"bucket\": {\n\t//       \"description\": \"Name of a bucket.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"provisionalUserProject\": {\n\t//       \"description\": \"The project to be billed for this request if the target bucket is requester-pays bucket.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"userProject\": {\n\t//       \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     }\n\t//   },\n\t//   \"path\": \"b/{bucket}/iam\",\n\t//   \"response\": {\n\t//     \"$ref\": \"Policy\"\n\t//   },\n\t//   \"scopes\": [\n\t//     \"https://www.googleapis.com/auth/cloud-platform\",\n\t//     \"https://www.googleapis.com/auth/devstorage.full_control\"\n\t//   ]\n\t// }\n\n}\n\n// method id \"storage.buckets.insert\":\n\ntype BucketsInsertCall struct {\n\ts          *Service\n\tbucket     *Bucket\n\turlParams_ gensupport.URLParams\n\tctx_       context.Context\n\theader_    http.Header\n}\n\n// Insert: Creates a new bucket.\nfunc (r *BucketsService) Insert(projectid string, bucket *Bucket) *BucketsInsertCall {\n\tc := &BucketsInsertCall{s: r.s, urlParams_: make(gensupport.URLParams)}\n\tc.urlParams_.Set(\"project\", projectid)\n\tc.bucket = bucket\n\treturn c\n}\n\n// PredefinedAcl sets the optional parameter \"predefinedAcl\": Apply a\n// predefined set of access controls to this bucket.\n//\n// Possible values:\n//   \"authenticatedRead\" - Project team owners get OWNER access, and\n// allAuthenticatedUsers get READER access.\n//   \"private\" - Project team owners get OWNER access.\n//   \"projectPrivate\" - Project team members get access according to\n// their roles.\n//   \"publicRead\" - Project team owners get OWNER access, and allUsers\n// get READER access.\n//   \"publicReadWrite\" - Project team owners get OWNER access, and\n// allUsers get WRITER access.\nfunc (c *BucketsInsertCall) PredefinedAcl(predefinedAcl string) *BucketsInsertCall {\n\tc.urlParams_.Set(\"predefinedAcl\", predefinedAcl)\n\treturn c\n}\n\n// PredefinedDefaultObjectAcl sets the optional parameter\n// \"predefinedDefaultObjectAcl\": Apply a predefined set of default\n// object access controls to this bucket.\n//\n// Possible values:\n//   \"authenticatedRead\" - Object owner gets OWNER access, and\n// allAuthenticatedUsers get READER access.\n//   \"bucketOwnerFullControl\" - Object owner gets OWNER access, and\n// project team owners get OWNER access.\n//   \"bucketOwnerRead\" - Object owner gets OWNER access, and project\n// team owners get READER access.\n//   \"private\" - Object owner gets OWNER access.\n//   \"projectPrivate\" - Object owner gets OWNER access, and project team\n// members get access according to their roles.\n//   \"publicRead\" - Object owner gets OWNER access, and allUsers get\n// READER access.\nfunc (c *BucketsInsertCall) PredefinedDefaultObjectAcl(predefinedDefaultObjectAcl string) *BucketsInsertCall {\n\tc.urlParams_.Set(\"predefinedDefaultObjectAcl\", predefinedDefaultObjectAcl)\n\treturn c\n}\n\n// Projection sets the optional parameter \"projection\": Set of\n// properties to return. Defaults to noAcl, unless the bucket resource\n// specifies acl or defaultObjectAcl properties, when it defaults to\n// full.\n//\n// Possible values:\n//   \"full\" - Include all properties.\n//   \"noAcl\" - Omit owner, acl and defaultObjectAcl properties.\nfunc (c *BucketsInsertCall) Projection(projection string) *BucketsInsertCall {\n\tc.urlParams_.Set(\"projection\", projection)\n\treturn c\n}\n\n// ProvisionalUserProject sets the optional parameter\n// \"provisionalUserProject\": The project to be billed for this request\n// if the target bucket is requester-pays bucket.\nfunc (c *BucketsInsertCall) ProvisionalUserProject(provisionalUserProject string) *BucketsInsertCall {\n\tc.urlParams_.Set(\"provisionalUserProject\", provisionalUserProject)\n\treturn c\n}\n\n// UserProject sets the optional parameter \"userProject\": The project to\n// be billed for this request.\nfunc (c *BucketsInsertCall) UserProject(userProject string) *BucketsInsertCall {\n\tc.urlParams_.Set(\"userProject\", userProject)\n\treturn c\n}\n\n// Fields allows partial responses to be retrieved. See\n// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse\n// for more information.\nfunc (c *BucketsInsertCall) Fields(s ...googleapi.Field) *BucketsInsertCall {\n\tc.urlParams_.Set(\"fields\", googleapi.CombineFields(s))\n\treturn c\n}\n\n// Context sets the context to be used in this call's Do method. Any\n// pending HTTP request will be aborted if the provided context is\n// canceled.\nfunc (c *BucketsInsertCall) Context(ctx context.Context) *BucketsInsertCall {\n\tc.ctx_ = ctx\n\treturn c\n}\n\n// Header returns an http.Header that can be modified by the caller to\n// add HTTP headers to the request.\nfunc (c *BucketsInsertCall) Header() http.Header {\n\tif c.header_ == nil {\n\t\tc.header_ = make(http.Header)\n\t}\n\treturn c.header_\n}\n\nfunc (c *BucketsInsertCall) doRequest(alt string) (*http.Response, error) {\n\treqHeaders := make(http.Header)\n\tfor k, v := range c.header_ {\n\t\treqHeaders[k] = v\n\t}\n\treqHeaders.Set(\"User-Agent\", c.s.userAgent())\n\tvar body io.Reader = nil\n\tbody, err := googleapi.WithoutDataWrapper.JSONReader(c.bucket)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treqHeaders.Set(\"Content-Type\", \"application/json\")\n\tc.urlParams_.Set(\"alt\", alt)\n\tc.urlParams_.Set(\"prettyPrint\", \"false\")\n\turls := googleapi.ResolveRelative(c.s.BasePath, \"b\")\n\turls += \"?\" + c.urlParams_.Encode()\n\treq, err := http.NewRequest(\"POST\", urls, body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.Header = reqHeaders\n\treturn gensupport.SendRequest(c.ctx_, c.s.client, req)\n}\n\n// Do executes the \"storage.buckets.insert\" call.\n// Exactly one of *Bucket or error will be non-nil. Any non-2xx status\n// code is an error. Response headers are in either\n// *Bucket.ServerResponse.Header or (if a response was returned at all)\n// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to\n// check whether the returned error was because http.StatusNotModified\n// was returned.\nfunc (c *BucketsInsertCall) Do(opts ...googleapi.CallOption) (*Bucket, error) {\n\tgensupport.SetOptions(c.urlParams_, opts...)\n\tres, err := c.doRequest(\"json\")\n\tif res != nil && res.StatusCode == http.StatusNotModified {\n\t\tif res.Body != nil {\n\t\t\tres.Body.Close()\n\t\t}\n\t\treturn nil, &googleapi.Error{\n\t\t\tCode:   res.StatusCode,\n\t\t\tHeader: res.Header,\n\t\t}\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer googleapi.CloseBody(res)\n\tif err := googleapi.CheckResponse(res); err != nil {\n\t\treturn nil, err\n\t}\n\tret := &Bucket{\n\t\tServerResponse: googleapi.ServerResponse{\n\t\t\tHeader:         res.Header,\n\t\t\tHTTPStatusCode: res.StatusCode,\n\t\t},\n\t}\n\ttarget := &ret\n\tif err := gensupport.DecodeResponse(target, res); err != nil {\n\t\treturn nil, err\n\t}\n\treturn ret, nil\n\t// {\n\t//   \"description\": \"Creates a new bucket.\",\n\t//   \"httpMethod\": \"POST\",\n\t//   \"id\": \"storage.buckets.insert\",\n\t//   \"parameterOrder\": [\n\t//     \"project\"\n\t//   ],\n\t//   \"parameters\": {\n\t//     \"predefinedAcl\": {\n\t//       \"description\": \"Apply a predefined set of access controls to this bucket.\",\n\t//       \"enum\": [\n\t//         \"authenticatedRead\",\n\t//         \"private\",\n\t//         \"projectPrivate\",\n\t//         \"publicRead\",\n\t//         \"publicReadWrite\"\n\t//       ],\n\t//       \"enumDescriptions\": [\n\t//         \"Project team owners get OWNER access, and allAuthenticatedUsers get READER access.\",\n\t//         \"Project team owners get OWNER access.\",\n\t//         \"Project team members get access according to their roles.\",\n\t//         \"Project team owners get OWNER access, and allUsers get READER access.\",\n\t//         \"Project team owners get OWNER access, and allUsers get WRITER access.\"\n\t//       ],\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"predefinedDefaultObjectAcl\": {\n\t//       \"description\": \"Apply a predefined set of default object access controls to this bucket.\",\n\t//       \"enum\": [\n\t//         \"authenticatedRead\",\n\t//         \"bucketOwnerFullControl\",\n\t//         \"bucketOwnerRead\",\n\t//         \"private\",\n\t//         \"projectPrivate\",\n\t//         \"publicRead\"\n\t//       ],\n\t//       \"enumDescriptions\": [\n\t//         \"Object owner gets OWNER access, and allAuthenticatedUsers get READER access.\",\n\t//         \"Object owner gets OWNER access, and project team owners get OWNER access.\",\n\t//         \"Object owner gets OWNER access, and project team owners get READER access.\",\n\t//         \"Object owner gets OWNER access.\",\n\t//         \"Object owner gets OWNER access, and project team members get access according to their roles.\",\n\t//         \"Object owner gets OWNER access, and allUsers get READER access.\"\n\t//       ],\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"project\": {\n\t//       \"description\": \"A valid API project identifier.\",\n\t//       \"location\": \"query\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"projection\": {\n\t//       \"description\": \"Set of properties to return. Defaults to noAcl, unless the bucket resource specifies acl or defaultObjectAcl properties, when it defaults to full.\",\n\t//       \"enum\": [\n\t//         \"full\",\n\t//         \"noAcl\"\n\t//       ],\n\t//       \"enumDescriptions\": [\n\t//         \"Include all properties.\",\n\t//         \"Omit owner, acl and defaultObjectAcl properties.\"\n\t//       ],\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"provisionalUserProject\": {\n\t//       \"description\": \"The project to be billed for this request if the target bucket is requester-pays bucket.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"userProject\": {\n\t//       \"description\": \"The project to be billed for this request.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     }\n\t//   },\n\t//   \"path\": \"b\",\n\t//   \"request\": {\n\t//     \"$ref\": \"Bucket\"\n\t//   },\n\t//   \"response\": {\n\t//     \"$ref\": \"Bucket\"\n\t//   },\n\t//   \"scopes\": [\n\t//     \"https://www.googleapis.com/auth/cloud-platform\",\n\t//     \"https://www.googleapis.com/auth/devstorage.full_control\",\n\t//     \"https://www.googleapis.com/auth/devstorage.read_write\"\n\t//   ]\n\t// }\n\n}\n\n// method id \"storage.buckets.list\":\n\ntype BucketsListCall struct {\n\ts            *Service\n\turlParams_   gensupport.URLParams\n\tifNoneMatch_ string\n\tctx_         context.Context\n\theader_      http.Header\n}\n\n// List: Retrieves a list of buckets for a given project.\nfunc (r *BucketsService) List(projectid string) *BucketsListCall {\n\tc := &BucketsListCall{s: r.s, urlParams_: make(gensupport.URLParams)}\n\tc.urlParams_.Set(\"project\", projectid)\n\treturn c\n}\n\n// MaxResults sets the optional parameter \"maxResults\": Maximum number\n// of buckets to return in a single response. The service will use this\n// parameter or 1,000 items, whichever is smaller.\nfunc (c *BucketsListCall) MaxResults(maxResults int64) *BucketsListCall {\n\tc.urlParams_.Set(\"maxResults\", fmt.Sprint(maxResults))\n\treturn c\n}\n\n// PageToken sets the optional parameter \"pageToken\": A\n// previously-returned page token representing part of the larger set of\n// results to view.\nfunc (c *BucketsListCall) PageToken(pageToken string) *BucketsListCall {\n\tc.urlParams_.Set(\"pageToken\", pageToken)\n\treturn c\n}\n\n// Prefix sets the optional parameter \"prefix\": Filter results to\n// buckets whose names begin with this prefix.\nfunc (c *BucketsListCall) Prefix(prefix string) *BucketsListCall {\n\tc.urlParams_.Set(\"prefix\", prefix)\n\treturn c\n}\n\n// Projection sets the optional parameter \"projection\": Set of\n// properties to return. Defaults to noAcl.\n//\n// Possible values:\n//   \"full\" - Include all properties.\n//   \"noAcl\" - Omit owner, acl and defaultObjectAcl properties.\nfunc (c *BucketsListCall) Projection(projection string) *BucketsListCall {\n\tc.urlParams_.Set(\"projection\", projection)\n\treturn c\n}\n\n// ProvisionalUserProject sets the optional parameter\n// \"provisionalUserProject\": The project to be billed for this request\n// if the target bucket is requester-pays bucket.\nfunc (c *BucketsListCall) ProvisionalUserProject(provisionalUserProject string) *BucketsListCall {\n\tc.urlParams_.Set(\"provisionalUserProject\", provisionalUserProject)\n\treturn c\n}\n\n// UserProject sets the optional parameter \"userProject\": The project to\n// be billed for this request.\nfunc (c *BucketsListCall) UserProject(userProject string) *BucketsListCall {\n\tc.urlParams_.Set(\"userProject\", userProject)\n\treturn c\n}\n\n// Fields allows partial responses to be retrieved. See\n// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse\n// for more information.\nfunc (c *BucketsListCall) Fields(s ...googleapi.Field) *BucketsListCall {\n\tc.urlParams_.Set(\"fields\", googleapi.CombineFields(s))\n\treturn c\n}\n\n// IfNoneMatch sets the optional parameter which makes the operation\n// fail if the object's ETag matches the given value. This is useful for\n// getting updates only after the object has changed since the last\n// request. Use googleapi.IsNotModified to check whether the response\n// error from Do is the result of In-None-Match.\nfunc (c *BucketsListCall) IfNoneMatch(entityTag string) *BucketsListCall {\n\tc.ifNoneMatch_ = entityTag\n\treturn c\n}\n\n// Context sets the context to be used in this call's Do method. Any\n// pending HTTP request will be aborted if the provided context is\n// canceled.\nfunc (c *BucketsListCall) Context(ctx context.Context) *BucketsListCall {\n\tc.ctx_ = ctx\n\treturn c\n}\n\n// Header returns an http.Header that can be modified by the caller to\n// add HTTP headers to the request.\nfunc (c *BucketsListCall) Header() http.Header {\n\tif c.header_ == nil {\n\t\tc.header_ = make(http.Header)\n\t}\n\treturn c.header_\n}\n\nfunc (c *BucketsListCall) doRequest(alt string) (*http.Response, error) {\n\treqHeaders := make(http.Header)\n\tfor k, v := range c.header_ {\n\t\treqHeaders[k] = v\n\t}\n\treqHeaders.Set(\"User-Agent\", c.s.userAgent())\n\tif c.ifNoneMatch_ != \"\" {\n\t\treqHeaders.Set(\"If-None-Match\", c.ifNoneMatch_)\n\t}\n\tvar body io.Reader = nil\n\tc.urlParams_.Set(\"alt\", alt)\n\tc.urlParams_.Set(\"prettyPrint\", \"false\")\n\turls := googleapi.ResolveRelative(c.s.BasePath, \"b\")\n\turls += \"?\" + c.urlParams_.Encode()\n\treq, err := http.NewRequest(\"GET\", urls, body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.Header = reqHeaders\n\treturn gensupport.SendRequest(c.ctx_, c.s.client, req)\n}\n\n// Do executes the \"storage.buckets.list\" call.\n// Exactly one of *Buckets or error will be non-nil. Any non-2xx status\n// code is an error. Response headers are in either\n// *Buckets.ServerResponse.Header or (if a response was returned at all)\n// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to\n// check whether the returned error was because http.StatusNotModified\n// was returned.\nfunc (c *BucketsListCall) Do(opts ...googleapi.CallOption) (*Buckets, error) {\n\tgensupport.SetOptions(c.urlParams_, opts...)\n\tres, err := c.doRequest(\"json\")\n\tif res != nil && res.StatusCode == http.StatusNotModified {\n\t\tif res.Body != nil {\n\t\t\tres.Body.Close()\n\t\t}\n\t\treturn nil, &googleapi.Error{\n\t\t\tCode:   res.StatusCode,\n\t\t\tHeader: res.Header,\n\t\t}\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer googleapi.CloseBody(res)\n\tif err := googleapi.CheckResponse(res); err != nil {\n\t\treturn nil, err\n\t}\n\tret := &Buckets{\n\t\tServerResponse: googleapi.ServerResponse{\n\t\t\tHeader:         res.Header,\n\t\t\tHTTPStatusCode: res.StatusCode,\n\t\t},\n\t}\n\ttarget := &ret\n\tif err := gensupport.DecodeResponse(target, res); err != nil {\n\t\treturn nil, err\n\t}\n\treturn ret, nil\n\t// {\n\t//   \"description\": \"Retrieves a list of buckets for a given project.\",\n\t//   \"httpMethod\": \"GET\",\n\t//   \"id\": \"storage.buckets.list\",\n\t//   \"parameterOrder\": [\n\t//     \"project\"\n\t//   ],\n\t//   \"parameters\": {\n\t//     \"maxResults\": {\n\t//       \"default\": \"1000\",\n\t//       \"description\": \"Maximum number of buckets to return in a single response. The service will use this parameter or 1,000 items, whichever is smaller.\",\n\t//       \"format\": \"uint32\",\n\t//       \"location\": \"query\",\n\t//       \"minimum\": \"0\",\n\t//       \"type\": \"integer\"\n\t//     },\n\t//     \"pageToken\": {\n\t//       \"description\": \"A previously-returned page token representing part of the larger set of results to view.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"prefix\": {\n\t//       \"description\": \"Filter results to buckets whose names begin with this prefix.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"project\": {\n\t//       \"description\": \"A valid API project identifier.\",\n\t//       \"location\": \"query\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"projection\": {\n\t//       \"description\": \"Set of properties to return. Defaults to noAcl.\",\n\t//       \"enum\": [\n\t//         \"full\",\n\t//         \"noAcl\"\n\t//       ],\n\t//       \"enumDescriptions\": [\n\t//         \"Include all properties.\",\n\t//         \"Omit owner, acl and defaultObjectAcl properties.\"\n\t//       ],\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"provisionalUserProject\": {\n\t//       \"description\": \"The project to be billed for this request if the target bucket is requester-pays bucket.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"userProject\": {\n\t//       \"description\": \"The project to be billed for this request.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     }\n\t//   },\n\t//   \"path\": \"b\",\n\t//   \"response\": {\n\t//     \"$ref\": \"Buckets\"\n\t//   },\n\t//   \"scopes\": [\n\t//     \"https://www.googleapis.com/auth/cloud-platform\",\n\t//     \"https://www.googleapis.com/auth/cloud-platform.read-only\",\n\t//     \"https://www.googleapis.com/auth/devstorage.full_control\",\n\t//     \"https://www.googleapis.com/auth/devstorage.read_only\",\n\t//     \"https://www.googleapis.com/auth/devstorage.read_write\"\n\t//   ]\n\t// }\n\n}\n\n// Pages invokes f for each page of results.\n// A non-nil error returned from f will halt the iteration.\n// The provided context supersedes any context provided to the Context method.\nfunc (c *BucketsListCall) Pages(ctx context.Context, f func(*Buckets) error) error {\n\tc.ctx_ = ctx\n\tdefer c.PageToken(c.urlParams_.Get(\"pageToken\")) // reset paging to original point\n\tfor {\n\t\tx, err := c.Do()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif err := f(x); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif x.NextPageToken == \"\" {\n\t\t\treturn nil\n\t\t}\n\t\tc.PageToken(x.NextPageToken)\n\t}\n}\n\n// method id \"storage.buckets.lockRetentionPolicy\":\n\ntype BucketsLockRetentionPolicyCall struct {\n\ts          *Service\n\tbucket     string\n\turlParams_ gensupport.URLParams\n\tctx_       context.Context\n\theader_    http.Header\n}\n\n// LockRetentionPolicy: Locks retention policy on a bucket.\nfunc (r *BucketsService) LockRetentionPolicy(bucket string, ifMetagenerationMatch int64) *BucketsLockRetentionPolicyCall {\n\tc := &BucketsLockRetentionPolicyCall{s: r.s, urlParams_: make(gensupport.URLParams)}\n\tc.bucket = bucket\n\tc.urlParams_.Set(\"ifMetagenerationMatch\", fmt.Sprint(ifMetagenerationMatch))\n\treturn c\n}\n\n// ProvisionalUserProject sets the optional parameter\n// \"provisionalUserProject\": The project to be billed for this request\n// if the target bucket is requester-pays bucket.\nfunc (c *BucketsLockRetentionPolicyCall) ProvisionalUserProject(provisionalUserProject string) *BucketsLockRetentionPolicyCall {\n\tc.urlParams_.Set(\"provisionalUserProject\", provisionalUserProject)\n\treturn c\n}\n\n// UserProject sets the optional parameter \"userProject\": The project to\n// be billed for this request. Required for Requester Pays buckets.\nfunc (c *BucketsLockRetentionPolicyCall) UserProject(userProject string) *BucketsLockRetentionPolicyCall {\n\tc.urlParams_.Set(\"userProject\", userProject)\n\treturn c\n}\n\n// Fields allows partial responses to be retrieved. See\n// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse\n// for more information.\nfunc (c *BucketsLockRetentionPolicyCall) Fields(s ...googleapi.Field) *BucketsLockRetentionPolicyCall {\n\tc.urlParams_.Set(\"fields\", googleapi.CombineFields(s))\n\treturn c\n}\n\n// Context sets the context to be used in this call's Do method. Any\n// pending HTTP request will be aborted if the provided context is\n// canceled.\nfunc (c *BucketsLockRetentionPolicyCall) Context(ctx context.Context) *BucketsLockRetentionPolicyCall {\n\tc.ctx_ = ctx\n\treturn c\n}\n\n// Header returns an http.Header that can be modified by the caller to\n// add HTTP headers to the request.\nfunc (c *BucketsLockRetentionPolicyCall) Header() http.Header {\n\tif c.header_ == nil {\n\t\tc.header_ = make(http.Header)\n\t}\n\treturn c.header_\n}\n\nfunc (c *BucketsLockRetentionPolicyCall) doRequest(alt string) (*http.Response, error) {\n\treqHeaders := make(http.Header)\n\tfor k, v := range c.header_ {\n\t\treqHeaders[k] = v\n\t}\n\treqHeaders.Set(\"User-Agent\", c.s.userAgent())\n\tvar body io.Reader = nil\n\tc.urlParams_.Set(\"alt\", alt)\n\tc.urlParams_.Set(\"prettyPrint\", \"false\")\n\turls := googleapi.ResolveRelative(c.s.BasePath, \"b/{bucket}/lockRetentionPolicy\")\n\turls += \"?\" + c.urlParams_.Encode()\n\treq, err := http.NewRequest(\"POST\", urls, body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.Header = reqHeaders\n\tgoogleapi.Expand(req.URL, map[string]string{\n\t\t\"bucket\": c.bucket,\n\t})\n\treturn gensupport.SendRequest(c.ctx_, c.s.client, req)\n}\n\n// Do executes the \"storage.buckets.lockRetentionPolicy\" call.\n// Exactly one of *Bucket or error will be non-nil. Any non-2xx status\n// code is an error. Response headers are in either\n// *Bucket.ServerResponse.Header or (if a response was returned at all)\n// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to\n// check whether the returned error was because http.StatusNotModified\n// was returned.\nfunc (c *BucketsLockRetentionPolicyCall) Do(opts ...googleapi.CallOption) (*Bucket, error) {\n\tgensupport.SetOptions(c.urlParams_, opts...)\n\tres, err := c.doRequest(\"json\")\n\tif res != nil && res.StatusCode == http.StatusNotModified {\n\t\tif res.Body != nil {\n\t\t\tres.Body.Close()\n\t\t}\n\t\treturn nil, &googleapi.Error{\n\t\t\tCode:   res.StatusCode,\n\t\t\tHeader: res.Header,\n\t\t}\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer googleapi.CloseBody(res)\n\tif err := googleapi.CheckResponse(res); err != nil {\n\t\treturn nil, err\n\t}\n\tret := &Bucket{\n\t\tServerResponse: googleapi.ServerResponse{\n\t\t\tHeader:         res.Header,\n\t\t\tHTTPStatusCode: res.StatusCode,\n\t\t},\n\t}\n\ttarget := &ret\n\tif err := gensupport.DecodeResponse(target, res); err != nil {\n\t\treturn nil, err\n\t}\n\treturn ret, nil\n\t// {\n\t//   \"description\": \"Locks retention policy on a bucket.\",\n\t//   \"httpMethod\": \"POST\",\n\t//   \"id\": \"storage.buckets.lockRetentionPolicy\",\n\t//   \"parameterOrder\": [\n\t//     \"bucket\",\n\t//     \"ifMetagenerationMatch\"\n\t//   ],\n\t//   \"parameters\": {\n\t//     \"bucket\": {\n\t//       \"description\": \"Name of a bucket.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"ifMetagenerationMatch\": {\n\t//       \"description\": \"Makes the operation conditional on whether bucket's current metageneration matches the given value.\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"provisionalUserProject\": {\n\t//       \"description\": \"The project to be billed for this request if the target bucket is requester-pays bucket.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"userProject\": {\n\t//       \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     }\n\t//   },\n\t//   \"path\": \"b/{bucket}/lockRetentionPolicy\",\n\t//   \"response\": {\n\t//     \"$ref\": \"Bucket\"\n\t//   },\n\t//   \"scopes\": [\n\t//     \"https://www.googleapis.com/auth/cloud-platform\",\n\t//     \"https://www.googleapis.com/auth/devstorage.full_control\",\n\t//     \"https://www.googleapis.com/auth/devstorage.read_write\"\n\t//   ]\n\t// }\n\n}\n\n// method id \"storage.buckets.patch\":\n\ntype BucketsPatchCall struct {\n\ts          *Service\n\tbucket     string\n\tbucket2    *Bucket\n\turlParams_ gensupport.URLParams\n\tctx_       context.Context\n\theader_    http.Header\n}\n\n// Patch: Patches a bucket. Changes to the bucket will be readable\n// immediately after writing, but configuration changes may take time to\n// propagate.\nfunc (r *BucketsService) Patch(bucket string, bucket2 *Bucket) *BucketsPatchCall {\n\tc := &BucketsPatchCall{s: r.s, urlParams_: make(gensupport.URLParams)}\n\tc.bucket = bucket\n\tc.bucket2 = bucket2\n\treturn c\n}\n\n// IfMetagenerationMatch sets the optional parameter\n// \"ifMetagenerationMatch\": Makes the return of the bucket metadata\n// conditional on whether the bucket's current metageneration matches\n// the given value.\nfunc (c *BucketsPatchCall) IfMetagenerationMatch(ifMetagenerationMatch int64) *BucketsPatchCall {\n\tc.urlParams_.Set(\"ifMetagenerationMatch\", fmt.Sprint(ifMetagenerationMatch))\n\treturn c\n}\n\n// IfMetagenerationNotMatch sets the optional parameter\n// \"ifMetagenerationNotMatch\": Makes the return of the bucket metadata\n// conditional on whether the bucket's current metageneration does not\n// match the given value.\nfunc (c *BucketsPatchCall) IfMetagenerationNotMatch(ifMetagenerationNotMatch int64) *BucketsPatchCall {\n\tc.urlParams_.Set(\"ifMetagenerationNotMatch\", fmt.Sprint(ifMetagenerationNotMatch))\n\treturn c\n}\n\n// PredefinedAcl sets the optional parameter \"predefinedAcl\": Apply a\n// predefined set of access controls to this bucket.\n//\n// Possible values:\n//   \"authenticatedRead\" - Project team owners get OWNER access, and\n// allAuthenticatedUsers get READER access.\n//   \"private\" - Project team owners get OWNER access.\n//   \"projectPrivate\" - Project team members get access according to\n// their roles.\n//   \"publicRead\" - Project team owners get OWNER access, and allUsers\n// get READER access.\n//   \"publicReadWrite\" - Project team owners get OWNER access, and\n// allUsers get WRITER access.\nfunc (c *BucketsPatchCall) PredefinedAcl(predefinedAcl string) *BucketsPatchCall {\n\tc.urlParams_.Set(\"predefinedAcl\", predefinedAcl)\n\treturn c\n}\n\n// PredefinedDefaultObjectAcl sets the optional parameter\n// \"predefinedDefaultObjectAcl\": Apply a predefined set of default\n// object access controls to this bucket.\n//\n// Possible values:\n//   \"authenticatedRead\" - Object owner gets OWNER access, and\n// allAuthenticatedUsers get READER access.\n//   \"bucketOwnerFullControl\" - Object owner gets OWNER access, and\n// project team owners get OWNER access.\n//   \"bucketOwnerRead\" - Object owner gets OWNER access, and project\n// team owners get READER access.\n//   \"private\" - Object owner gets OWNER access.\n//   \"projectPrivate\" - Object owner gets OWNER access, and project team\n// members get access according to their roles.\n//   \"publicRead\" - Object owner gets OWNER access, and allUsers get\n// READER access.\nfunc (c *BucketsPatchCall) PredefinedDefaultObjectAcl(predefinedDefaultObjectAcl string) *BucketsPatchCall {\n\tc.urlParams_.Set(\"predefinedDefaultObjectAcl\", predefinedDefaultObjectAcl)\n\treturn c\n}\n\n// Projection sets the optional parameter \"projection\": Set of\n// properties to return. Defaults to full.\n//\n// Possible values:\n//   \"full\" - Include all properties.\n//   \"noAcl\" - Omit owner, acl and defaultObjectAcl properties.\nfunc (c *BucketsPatchCall) Projection(projection string) *BucketsPatchCall {\n\tc.urlParams_.Set(\"projection\", projection)\n\treturn c\n}\n\n// ProvisionalUserProject sets the optional parameter\n// \"provisionalUserProject\": The project to be billed for this request\n// if the target bucket is requester-pays bucket.\nfunc (c *BucketsPatchCall) ProvisionalUserProject(provisionalUserProject string) *BucketsPatchCall {\n\tc.urlParams_.Set(\"provisionalUserProject\", provisionalUserProject)\n\treturn c\n}\n\n// UserProject sets the optional parameter \"userProject\": The project to\n// be billed for this request. Required for Requester Pays buckets.\nfunc (c *BucketsPatchCall) UserProject(userProject string) *BucketsPatchCall {\n\tc.urlParams_.Set(\"userProject\", userProject)\n\treturn c\n}\n\n// Fields allows partial responses to be retrieved. See\n// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse\n// for more information.\nfunc (c *BucketsPatchCall) Fields(s ...googleapi.Field) *BucketsPatchCall {\n\tc.urlParams_.Set(\"fields\", googleapi.CombineFields(s))\n\treturn c\n}\n\n// Context sets the context to be used in this call's Do method. Any\n// pending HTTP request will be aborted if the provided context is\n// canceled.\nfunc (c *BucketsPatchCall) Context(ctx context.Context) *BucketsPatchCall {\n\tc.ctx_ = ctx\n\treturn c\n}\n\n// Header returns an http.Header that can be modified by the caller to\n// add HTTP headers to the request.\nfunc (c *BucketsPatchCall) Header() http.Header {\n\tif c.header_ == nil {\n\t\tc.header_ = make(http.Header)\n\t}\n\treturn c.header_\n}\n\nfunc (c *BucketsPatchCall) doRequest(alt string) (*http.Response, error) {\n\treqHeaders := make(http.Header)\n\tfor k, v := range c.header_ {\n\t\treqHeaders[k] = v\n\t}\n\treqHeaders.Set(\"User-Agent\", c.s.userAgent())\n\tvar body io.Reader = nil\n\tbody, err := googleapi.WithoutDataWrapper.JSONReader(c.bucket2)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treqHeaders.Set(\"Content-Type\", \"application/json\")\n\tc.urlParams_.Set(\"alt\", alt)\n\tc.urlParams_.Set(\"prettyPrint\", \"false\")\n\turls := googleapi.ResolveRelative(c.s.BasePath, \"b/{bucket}\")\n\turls += \"?\" + c.urlParams_.Encode()\n\treq, err := http.NewRequest(\"PATCH\", urls, body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.Header = reqHeaders\n\tgoogleapi.Expand(req.URL, map[string]string{\n\t\t\"bucket\": c.bucket,\n\t})\n\treturn gensupport.SendRequest(c.ctx_, c.s.client, req)\n}\n\n// Do executes the \"storage.buckets.patch\" call.\n// Exactly one of *Bucket or error will be non-nil. Any non-2xx status\n// code is an error. Response headers are in either\n// *Bucket.ServerResponse.Header or (if a response was returned at all)\n// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to\n// check whether the returned error was because http.StatusNotModified\n// was returned.\nfunc (c *BucketsPatchCall) Do(opts ...googleapi.CallOption) (*Bucket, error) {\n\tgensupport.SetOptions(c.urlParams_, opts...)\n\tres, err := c.doRequest(\"json\")\n\tif res != nil && res.StatusCode == http.StatusNotModified {\n\t\tif res.Body != nil {\n\t\t\tres.Body.Close()\n\t\t}\n\t\treturn nil, &googleapi.Error{\n\t\t\tCode:   res.StatusCode,\n\t\t\tHeader: res.Header,\n\t\t}\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer googleapi.CloseBody(res)\n\tif err := googleapi.CheckResponse(res); err != nil {\n\t\treturn nil, err\n\t}\n\tret := &Bucket{\n\t\tServerResponse: googleapi.ServerResponse{\n\t\t\tHeader:         res.Header,\n\t\t\tHTTPStatusCode: res.StatusCode,\n\t\t},\n\t}\n\ttarget := &ret\n\tif err := gensupport.DecodeResponse(target, res); err != nil {\n\t\treturn nil, err\n\t}\n\treturn ret, nil\n\t// {\n\t//   \"description\": \"Patches a bucket. Changes to the bucket will be readable immediately after writing, but configuration changes may take time to propagate.\",\n\t//   \"httpMethod\": \"PATCH\",\n\t//   \"id\": \"storage.buckets.patch\",\n\t//   \"parameterOrder\": [\n\t//     \"bucket\"\n\t//   ],\n\t//   \"parameters\": {\n\t//     \"bucket\": {\n\t//       \"description\": \"Name of a bucket.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"ifMetagenerationMatch\": {\n\t//       \"description\": \"Makes the return of the bucket metadata conditional on whether the bucket's current metageneration matches the given value.\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"ifMetagenerationNotMatch\": {\n\t//       \"description\": \"Makes the return of the bucket metadata conditional on whether the bucket's current metageneration does not match the given value.\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"predefinedAcl\": {\n\t//       \"description\": \"Apply a predefined set of access controls to this bucket.\",\n\t//       \"enum\": [\n\t//         \"authenticatedRead\",\n\t//         \"private\",\n\t//         \"projectPrivate\",\n\t//         \"publicRead\",\n\t//         \"publicReadWrite\"\n\t//       ],\n\t//       \"enumDescriptions\": [\n\t//         \"Project team owners get OWNER access, and allAuthenticatedUsers get READER access.\",\n\t//         \"Project team owners get OWNER access.\",\n\t//         \"Project team members get access according to their roles.\",\n\t//         \"Project team owners get OWNER access, and allUsers get READER access.\",\n\t//         \"Project team owners get OWNER access, and allUsers get WRITER access.\"\n\t//       ],\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"predefinedDefaultObjectAcl\": {\n\t//       \"description\": \"Apply a predefined set of default object access controls to this bucket.\",\n\t//       \"enum\": [\n\t//         \"authenticatedRead\",\n\t//         \"bucketOwnerFullControl\",\n\t//         \"bucketOwnerRead\",\n\t//         \"private\",\n\t//         \"projectPrivate\",\n\t//         \"publicRead\"\n\t//       ],\n\t//       \"enumDescriptions\": [\n\t//         \"Object owner gets OWNER access, and allAuthenticatedUsers get READER access.\",\n\t//         \"Object owner gets OWNER access, and project team owners get OWNER access.\",\n\t//         \"Object owner gets OWNER access, and project team owners get READER access.\",\n\t//         \"Object owner gets OWNER access.\",\n\t//         \"Object owner gets OWNER access, and project team members get access according to their roles.\",\n\t//         \"Object owner gets OWNER access, and allUsers get READER access.\"\n\t//       ],\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"projection\": {\n\t//       \"description\": \"Set of properties to return. Defaults to full.\",\n\t//       \"enum\": [\n\t//         \"full\",\n\t//         \"noAcl\"\n\t//       ],\n\t//       \"enumDescriptions\": [\n\t//         \"Include all properties.\",\n\t//         \"Omit owner, acl and defaultObjectAcl properties.\"\n\t//       ],\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"provisionalUserProject\": {\n\t//       \"description\": \"The project to be billed for this request if the target bucket is requester-pays bucket.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"userProject\": {\n\t//       \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     }\n\t//   },\n\t//   \"path\": \"b/{bucket}\",\n\t//   \"request\": {\n\t//     \"$ref\": \"Bucket\"\n\t//   },\n\t//   \"response\": {\n\t//     \"$ref\": \"Bucket\"\n\t//   },\n\t//   \"scopes\": [\n\t//     \"https://www.googleapis.com/auth/cloud-platform\",\n\t//     \"https://www.googleapis.com/auth/devstorage.full_control\"\n\t//   ]\n\t// }\n\n}\n\n// method id \"storage.buckets.setIamPolicy\":\n\ntype BucketsSetIamPolicyCall struct {\n\ts          *Service\n\tbucket     string\n\tpolicy     *Policy\n\turlParams_ gensupport.URLParams\n\tctx_       context.Context\n\theader_    http.Header\n}\n\n// SetIamPolicy: Updates an IAM policy for the specified bucket.\nfunc (r *BucketsService) SetIamPolicy(bucket string, policy *Policy) *BucketsSetIamPolicyCall {\n\tc := &BucketsSetIamPolicyCall{s: r.s, urlParams_: make(gensupport.URLParams)}\n\tc.bucket = bucket\n\tc.policy = policy\n\treturn c\n}\n\n// ProvisionalUserProject sets the optional parameter\n// \"provisionalUserProject\": The project to be billed for this request\n// if the target bucket is requester-pays bucket.\nfunc (c *BucketsSetIamPolicyCall) ProvisionalUserProject(provisionalUserProject string) *BucketsSetIamPolicyCall {\n\tc.urlParams_.Set(\"provisionalUserProject\", provisionalUserProject)\n\treturn c\n}\n\n// UserProject sets the optional parameter \"userProject\": The project to\n// be billed for this request. Required for Requester Pays buckets.\nfunc (c *BucketsSetIamPolicyCall) UserProject(userProject string) *BucketsSetIamPolicyCall {\n\tc.urlParams_.Set(\"userProject\", userProject)\n\treturn c\n}\n\n// Fields allows partial responses to be retrieved. See\n// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse\n// for more information.\nfunc (c *BucketsSetIamPolicyCall) Fields(s ...googleapi.Field) *BucketsSetIamPolicyCall {\n\tc.urlParams_.Set(\"fields\", googleapi.CombineFields(s))\n\treturn c\n}\n\n// Context sets the context to be used in this call's Do method. Any\n// pending HTTP request will be aborted if the provided context is\n// canceled.\nfunc (c *BucketsSetIamPolicyCall) Context(ctx context.Context) *BucketsSetIamPolicyCall {\n\tc.ctx_ = ctx\n\treturn c\n}\n\n// Header returns an http.Header that can be modified by the caller to\n// add HTTP headers to the request.\nfunc (c *BucketsSetIamPolicyCall) Header() http.Header {\n\tif c.header_ == nil {\n\t\tc.header_ = make(http.Header)\n\t}\n\treturn c.header_\n}\n\nfunc (c *BucketsSetIamPolicyCall) doRequest(alt string) (*http.Response, error) {\n\treqHeaders := make(http.Header)\n\tfor k, v := range c.header_ {\n\t\treqHeaders[k] = v\n\t}\n\treqHeaders.Set(\"User-Agent\", c.s.userAgent())\n\tvar body io.Reader = nil\n\tbody, err := googleapi.WithoutDataWrapper.JSONReader(c.policy)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treqHeaders.Set(\"Content-Type\", \"application/json\")\n\tc.urlParams_.Set(\"alt\", alt)\n\tc.urlParams_.Set(\"prettyPrint\", \"false\")\n\turls := googleapi.ResolveRelative(c.s.BasePath, \"b/{bucket}/iam\")\n\turls += \"?\" + c.urlParams_.Encode()\n\treq, err := http.NewRequest(\"PUT\", urls, body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.Header = reqHeaders\n\tgoogleapi.Expand(req.URL, map[string]string{\n\t\t\"bucket\": c.bucket,\n\t})\n\treturn gensupport.SendRequest(c.ctx_, c.s.client, req)\n}\n\n// Do executes the \"storage.buckets.setIamPolicy\" call.\n// Exactly one of *Policy or error will be non-nil. Any non-2xx status\n// code is an error. Response headers are in either\n// *Policy.ServerResponse.Header or (if a response was returned at all)\n// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to\n// check whether the returned error was because http.StatusNotModified\n// was returned.\nfunc (c *BucketsSetIamPolicyCall) Do(opts ...googleapi.CallOption) (*Policy, error) {\n\tgensupport.SetOptions(c.urlParams_, opts...)\n\tres, err := c.doRequest(\"json\")\n\tif res != nil && res.StatusCode == http.StatusNotModified {\n\t\tif res.Body != nil {\n\t\t\tres.Body.Close()\n\t\t}\n\t\treturn nil, &googleapi.Error{\n\t\t\tCode:   res.StatusCode,\n\t\t\tHeader: res.Header,\n\t\t}\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer googleapi.CloseBody(res)\n\tif err := googleapi.CheckResponse(res); err != nil {\n\t\treturn nil, err\n\t}\n\tret := &Policy{\n\t\tServerResponse: googleapi.ServerResponse{\n\t\t\tHeader:         res.Header,\n\t\t\tHTTPStatusCode: res.StatusCode,\n\t\t},\n\t}\n\ttarget := &ret\n\tif err := gensupport.DecodeResponse(target, res); err != nil {\n\t\treturn nil, err\n\t}\n\treturn ret, nil\n\t// {\n\t//   \"description\": \"Updates an IAM policy for the specified bucket.\",\n\t//   \"httpMethod\": \"PUT\",\n\t//   \"id\": \"storage.buckets.setIamPolicy\",\n\t//   \"parameterOrder\": [\n\t//     \"bucket\"\n\t//   ],\n\t//   \"parameters\": {\n\t//     \"bucket\": {\n\t//       \"description\": \"Name of a bucket.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"provisionalUserProject\": {\n\t//       \"description\": \"The project to be billed for this request if the target bucket is requester-pays bucket.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"userProject\": {\n\t//       \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     }\n\t//   },\n\t//   \"path\": \"b/{bucket}/iam\",\n\t//   \"request\": {\n\t//     \"$ref\": \"Policy\"\n\t//   },\n\t//   \"response\": {\n\t//     \"$ref\": \"Policy\"\n\t//   },\n\t//   \"scopes\": [\n\t//     \"https://www.googleapis.com/auth/cloud-platform\",\n\t//     \"https://www.googleapis.com/auth/devstorage.full_control\"\n\t//   ]\n\t// }\n\n}\n\n// method id \"storage.buckets.testIamPermissions\":\n\ntype BucketsTestIamPermissionsCall struct {\n\ts            *Service\n\tbucket       string\n\turlParams_   gensupport.URLParams\n\tifNoneMatch_ string\n\tctx_         context.Context\n\theader_      http.Header\n}\n\n// TestIamPermissions: Tests a set of permissions on the given bucket to\n// see which, if any, are held by the caller.\nfunc (r *BucketsService) TestIamPermissions(bucket string, permissions []string) *BucketsTestIamPermissionsCall {\n\tc := &BucketsTestIamPermissionsCall{s: r.s, urlParams_: make(gensupport.URLParams)}\n\tc.bucket = bucket\n\tc.urlParams_.SetMulti(\"permissions\", append([]string{}, permissions...))\n\treturn c\n}\n\n// ProvisionalUserProject sets the optional parameter\n// \"provisionalUserProject\": The project to be billed for this request\n// if the target bucket is requester-pays bucket.\nfunc (c *BucketsTestIamPermissionsCall) ProvisionalUserProject(provisionalUserProject string) *BucketsTestIamPermissionsCall {\n\tc.urlParams_.Set(\"provisionalUserProject\", provisionalUserProject)\n\treturn c\n}\n\n// UserProject sets the optional parameter \"userProject\": The project to\n// be billed for this request. Required for Requester Pays buckets.\nfunc (c *BucketsTestIamPermissionsCall) UserProject(userProject string) *BucketsTestIamPermissionsCall {\n\tc.urlParams_.Set(\"userProject\", userProject)\n\treturn c\n}\n\n// Fields allows partial responses to be retrieved. See\n// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse\n// for more information.\nfunc (c *BucketsTestIamPermissionsCall) Fields(s ...googleapi.Field) *BucketsTestIamPermissionsCall {\n\tc.urlParams_.Set(\"fields\", googleapi.CombineFields(s))\n\treturn c\n}\n\n// IfNoneMatch sets the optional parameter which makes the operation\n// fail if the object's ETag matches the given value. This is useful for\n// getting updates only after the object has changed since the last\n// request. Use googleapi.IsNotModified to check whether the response\n// error from Do is the result of In-None-Match.\nfunc (c *BucketsTestIamPermissionsCall) IfNoneMatch(entityTag string) *BucketsTestIamPermissionsCall {\n\tc.ifNoneMatch_ = entityTag\n\treturn c\n}\n\n// Context sets the context to be used in this call's Do method. Any\n// pending HTTP request will be aborted if the provided context is\n// canceled.\nfunc (c *BucketsTestIamPermissionsCall) Context(ctx context.Context) *BucketsTestIamPermissionsCall {\n\tc.ctx_ = ctx\n\treturn c\n}\n\n// Header returns an http.Header that can be modified by the caller to\n// add HTTP headers to the request.\nfunc (c *BucketsTestIamPermissionsCall) Header() http.Header {\n\tif c.header_ == nil {\n\t\tc.header_ = make(http.Header)\n\t}\n\treturn c.header_\n}\n\nfunc (c *BucketsTestIamPermissionsCall) doRequest(alt string) (*http.Response, error) {\n\treqHeaders := make(http.Header)\n\tfor k, v := range c.header_ {\n\t\treqHeaders[k] = v\n\t}\n\treqHeaders.Set(\"User-Agent\", c.s.userAgent())\n\tif c.ifNoneMatch_ != \"\" {\n\t\treqHeaders.Set(\"If-None-Match\", c.ifNoneMatch_)\n\t}\n\tvar body io.Reader = nil\n\tc.urlParams_.Set(\"alt\", alt)\n\tc.urlParams_.Set(\"prettyPrint\", \"false\")\n\turls := googleapi.ResolveRelative(c.s.BasePath, \"b/{bucket}/iam/testPermissions\")\n\turls += \"?\" + c.urlParams_.Encode()\n\treq, err := http.NewRequest(\"GET\", urls, body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.Header = reqHeaders\n\tgoogleapi.Expand(req.URL, map[string]string{\n\t\t\"bucket\": c.bucket,\n\t})\n\treturn gensupport.SendRequest(c.ctx_, c.s.client, req)\n}\n\n// Do executes the \"storage.buckets.testIamPermissions\" call.\n// Exactly one of *TestIamPermissionsResponse or error will be non-nil.\n// Any non-2xx status code is an error. Response headers are in either\n// *TestIamPermissionsResponse.ServerResponse.Header or (if a response\n// was returned at all) in error.(*googleapi.Error).Header. Use\n// googleapi.IsNotModified to check whether the returned error was\n// because http.StatusNotModified was returned.\nfunc (c *BucketsTestIamPermissionsCall) Do(opts ...googleapi.CallOption) (*TestIamPermissionsResponse, error) {\n\tgensupport.SetOptions(c.urlParams_, opts...)\n\tres, err := c.doRequest(\"json\")\n\tif res != nil && res.StatusCode == http.StatusNotModified {\n\t\tif res.Body != nil {\n\t\t\tres.Body.Close()\n\t\t}\n\t\treturn nil, &googleapi.Error{\n\t\t\tCode:   res.StatusCode,\n\t\t\tHeader: res.Header,\n\t\t}\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer googleapi.CloseBody(res)\n\tif err := googleapi.CheckResponse(res); err != nil {\n\t\treturn nil, err\n\t}\n\tret := &TestIamPermissionsResponse{\n\t\tServerResponse: googleapi.ServerResponse{\n\t\t\tHeader:         res.Header,\n\t\t\tHTTPStatusCode: res.StatusCode,\n\t\t},\n\t}\n\ttarget := &ret\n\tif err := gensupport.DecodeResponse(target, res); err != nil {\n\t\treturn nil, err\n\t}\n\treturn ret, nil\n\t// {\n\t//   \"description\": \"Tests a set of permissions on the given bucket to see which, if any, are held by the caller.\",\n\t//   \"httpMethod\": \"GET\",\n\t//   \"id\": \"storage.buckets.testIamPermissions\",\n\t//   \"parameterOrder\": [\n\t//     \"bucket\",\n\t//     \"permissions\"\n\t//   ],\n\t//   \"parameters\": {\n\t//     \"bucket\": {\n\t//       \"description\": \"Name of a bucket.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"permissions\": {\n\t//       \"description\": \"Permissions to test.\",\n\t//       \"location\": \"query\",\n\t//       \"repeated\": true,\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"provisionalUserProject\": {\n\t//       \"description\": \"The project to be billed for this request if the target bucket is requester-pays bucket.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"userProject\": {\n\t//       \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     }\n\t//   },\n\t//   \"path\": \"b/{bucket}/iam/testPermissions\",\n\t//   \"response\": {\n\t//     \"$ref\": \"TestIamPermissionsResponse\"\n\t//   },\n\t//   \"scopes\": [\n\t//     \"https://www.googleapis.com/auth/cloud-platform\",\n\t//     \"https://www.googleapis.com/auth/cloud-platform.read-only\",\n\t//     \"https://www.googleapis.com/auth/devstorage.full_control\",\n\t//     \"https://www.googleapis.com/auth/devstorage.read_only\",\n\t//     \"https://www.googleapis.com/auth/devstorage.read_write\"\n\t//   ]\n\t// }\n\n}\n\n// method id \"storage.buckets.update\":\n\ntype BucketsUpdateCall struct {\n\ts          *Service\n\tbucket     string\n\tbucket2    *Bucket\n\turlParams_ gensupport.URLParams\n\tctx_       context.Context\n\theader_    http.Header\n}\n\n// Update: Updates a bucket. Changes to the bucket will be readable\n// immediately after writing, but configuration changes may take time to\n// propagate.\nfunc (r *BucketsService) Update(bucket string, bucket2 *Bucket) *BucketsUpdateCall {\n\tc := &BucketsUpdateCall{s: r.s, urlParams_: make(gensupport.URLParams)}\n\tc.bucket = bucket\n\tc.bucket2 = bucket2\n\treturn c\n}\n\n// IfMetagenerationMatch sets the optional parameter\n// \"ifMetagenerationMatch\": Makes the return of the bucket metadata\n// conditional on whether the bucket's current metageneration matches\n// the given value.\nfunc (c *BucketsUpdateCall) IfMetagenerationMatch(ifMetagenerationMatch int64) *BucketsUpdateCall {\n\tc.urlParams_.Set(\"ifMetagenerationMatch\", fmt.Sprint(ifMetagenerationMatch))\n\treturn c\n}\n\n// IfMetagenerationNotMatch sets the optional parameter\n// \"ifMetagenerationNotMatch\": Makes the return of the bucket metadata\n// conditional on whether the bucket's current metageneration does not\n// match the given value.\nfunc (c *BucketsUpdateCall) IfMetagenerationNotMatch(ifMetagenerationNotMatch int64) *BucketsUpdateCall {\n\tc.urlParams_.Set(\"ifMetagenerationNotMatch\", fmt.Sprint(ifMetagenerationNotMatch))\n\treturn c\n}\n\n// PredefinedAcl sets the optional parameter \"predefinedAcl\": Apply a\n// predefined set of access controls to this bucket.\n//\n// Possible values:\n//   \"authenticatedRead\" - Project team owners get OWNER access, and\n// allAuthenticatedUsers get READER access.\n//   \"private\" - Project team owners get OWNER access.\n//   \"projectPrivate\" - Project team members get access according to\n// their roles.\n//   \"publicRead\" - Project team owners get OWNER access, and allUsers\n// get READER access.\n//   \"publicReadWrite\" - Project team owners get OWNER access, and\n// allUsers get WRITER access.\nfunc (c *BucketsUpdateCall) PredefinedAcl(predefinedAcl string) *BucketsUpdateCall {\n\tc.urlParams_.Set(\"predefinedAcl\", predefinedAcl)\n\treturn c\n}\n\n// PredefinedDefaultObjectAcl sets the optional parameter\n// \"predefinedDefaultObjectAcl\": Apply a predefined set of default\n// object access controls to this bucket.\n//\n// Possible values:\n//   \"authenticatedRead\" - Object owner gets OWNER access, and\n// allAuthenticatedUsers get READER access.\n//   \"bucketOwnerFullControl\" - Object owner gets OWNER access, and\n// project team owners get OWNER access.\n//   \"bucketOwnerRead\" - Object owner gets OWNER access, and project\n// team owners get READER access.\n//   \"private\" - Object owner gets OWNER access.\n//   \"projectPrivate\" - Object owner gets OWNER access, and project team\n// members get access according to their roles.\n//   \"publicRead\" - Object owner gets OWNER access, and allUsers get\n// READER access.\nfunc (c *BucketsUpdateCall) PredefinedDefaultObjectAcl(predefinedDefaultObjectAcl string) *BucketsUpdateCall {\n\tc.urlParams_.Set(\"predefinedDefaultObjectAcl\", predefinedDefaultObjectAcl)\n\treturn c\n}\n\n// Projection sets the optional parameter \"projection\": Set of\n// properties to return. Defaults to full.\n//\n// Possible values:\n//   \"full\" - Include all properties.\n//   \"noAcl\" - Omit owner, acl and defaultObjectAcl properties.\nfunc (c *BucketsUpdateCall) Projection(projection string) *BucketsUpdateCall {\n\tc.urlParams_.Set(\"projection\", projection)\n\treturn c\n}\n\n// ProvisionalUserProject sets the optional parameter\n// \"provisionalUserProject\": The project to be billed for this request\n// if the target bucket is requester-pays bucket.\nfunc (c *BucketsUpdateCall) ProvisionalUserProject(provisionalUserProject string) *BucketsUpdateCall {\n\tc.urlParams_.Set(\"provisionalUserProject\", provisionalUserProject)\n\treturn c\n}\n\n// UserProject sets the optional parameter \"userProject\": The project to\n// be billed for this request. Required for Requester Pays buckets.\nfunc (c *BucketsUpdateCall) UserProject(userProject string) *BucketsUpdateCall {\n\tc.urlParams_.Set(\"userProject\", userProject)\n\treturn c\n}\n\n// Fields allows partial responses to be retrieved. See\n// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse\n// for more information.\nfunc (c *BucketsUpdateCall) Fields(s ...googleapi.Field) *BucketsUpdateCall {\n\tc.urlParams_.Set(\"fields\", googleapi.CombineFields(s))\n\treturn c\n}\n\n// Context sets the context to be used in this call's Do method. Any\n// pending HTTP request will be aborted if the provided context is\n// canceled.\nfunc (c *BucketsUpdateCall) Context(ctx context.Context) *BucketsUpdateCall {\n\tc.ctx_ = ctx\n\treturn c\n}\n\n// Header returns an http.Header that can be modified by the caller to\n// add HTTP headers to the request.\nfunc (c *BucketsUpdateCall) Header() http.Header {\n\tif c.header_ == nil {\n\t\tc.header_ = make(http.Header)\n\t}\n\treturn c.header_\n}\n\nfunc (c *BucketsUpdateCall) doRequest(alt string) (*http.Response, error) {\n\treqHeaders := make(http.Header)\n\tfor k, v := range c.header_ {\n\t\treqHeaders[k] = v\n\t}\n\treqHeaders.Set(\"User-Agent\", c.s.userAgent())\n\tvar body io.Reader = nil\n\tbody, err := googleapi.WithoutDataWrapper.JSONReader(c.bucket2)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treqHeaders.Set(\"Content-Type\", \"application/json\")\n\tc.urlParams_.Set(\"alt\", alt)\n\tc.urlParams_.Set(\"prettyPrint\", \"false\")\n\turls := googleapi.ResolveRelative(c.s.BasePath, \"b/{bucket}\")\n\turls += \"?\" + c.urlParams_.Encode()\n\treq, err := http.NewRequest(\"PUT\", urls, body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.Header = reqHeaders\n\tgoogleapi.Expand(req.URL, map[string]string{\n\t\t\"bucket\": c.bucket,\n\t})\n\treturn gensupport.SendRequest(c.ctx_, c.s.client, req)\n}\n\n// Do executes the \"storage.buckets.update\" call.\n// Exactly one of *Bucket or error will be non-nil. Any non-2xx status\n// code is an error. Response headers are in either\n// *Bucket.ServerResponse.Header or (if a response was returned at all)\n// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to\n// check whether the returned error was because http.StatusNotModified\n// was returned.\nfunc (c *BucketsUpdateCall) Do(opts ...googleapi.CallOption) (*Bucket, error) {\n\tgensupport.SetOptions(c.urlParams_, opts...)\n\tres, err := c.doRequest(\"json\")\n\tif res != nil && res.StatusCode == http.StatusNotModified {\n\t\tif res.Body != nil {\n\t\t\tres.Body.Close()\n\t\t}\n\t\treturn nil, &googleapi.Error{\n\t\t\tCode:   res.StatusCode,\n\t\t\tHeader: res.Header,\n\t\t}\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer googleapi.CloseBody(res)\n\tif err := googleapi.CheckResponse(res); err != nil {\n\t\treturn nil, err\n\t}\n\tret := &Bucket{\n\t\tServerResponse: googleapi.ServerResponse{\n\t\t\tHeader:         res.Header,\n\t\t\tHTTPStatusCode: res.StatusCode,\n\t\t},\n\t}\n\ttarget := &ret\n\tif err := gensupport.DecodeResponse(target, res); err != nil {\n\t\treturn nil, err\n\t}\n\treturn ret, nil\n\t// {\n\t//   \"description\": \"Updates a bucket. Changes to the bucket will be readable immediately after writing, but configuration changes may take time to propagate.\",\n\t//   \"httpMethod\": \"PUT\",\n\t//   \"id\": \"storage.buckets.update\",\n\t//   \"parameterOrder\": [\n\t//     \"bucket\"\n\t//   ],\n\t//   \"parameters\": {\n\t//     \"bucket\": {\n\t//       \"description\": \"Name of a bucket.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"ifMetagenerationMatch\": {\n\t//       \"description\": \"Makes the return of the bucket metadata conditional on whether the bucket's current metageneration matches the given value.\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"ifMetagenerationNotMatch\": {\n\t//       \"description\": \"Makes the return of the bucket metadata conditional on whether the bucket's current metageneration does not match the given value.\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"predefinedAcl\": {\n\t//       \"description\": \"Apply a predefined set of access controls to this bucket.\",\n\t//       \"enum\": [\n\t//         \"authenticatedRead\",\n\t//         \"private\",\n\t//         \"projectPrivate\",\n\t//         \"publicRead\",\n\t//         \"publicReadWrite\"\n\t//       ],\n\t//       \"enumDescriptions\": [\n\t//         \"Project team owners get OWNER access, and allAuthenticatedUsers get READER access.\",\n\t//         \"Project team owners get OWNER access.\",\n\t//         \"Project team members get access according to their roles.\",\n\t//         \"Project team owners get OWNER access, and allUsers get READER access.\",\n\t//         \"Project team owners get OWNER access, and allUsers get WRITER access.\"\n\t//       ],\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"predefinedDefaultObjectAcl\": {\n\t//       \"description\": \"Apply a predefined set of default object access controls to this bucket.\",\n\t//       \"enum\": [\n\t//         \"authenticatedRead\",\n\t//         \"bucketOwnerFullControl\",\n\t//         \"bucketOwnerRead\",\n\t//         \"private\",\n\t//         \"projectPrivate\",\n\t//         \"publicRead\"\n\t//       ],\n\t//       \"enumDescriptions\": [\n\t//         \"Object owner gets OWNER access, and allAuthenticatedUsers get READER access.\",\n\t//         \"Object owner gets OWNER access, and project team owners get OWNER access.\",\n\t//         \"Object owner gets OWNER access, and project team owners get READER access.\",\n\t//         \"Object owner gets OWNER access.\",\n\t//         \"Object owner gets OWNER access, and project team members get access according to their roles.\",\n\t//         \"Object owner gets OWNER access, and allUsers get READER access.\"\n\t//       ],\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"projection\": {\n\t//       \"description\": \"Set of properties to return. Defaults to full.\",\n\t//       \"enum\": [\n\t//         \"full\",\n\t//         \"noAcl\"\n\t//       ],\n\t//       \"enumDescriptions\": [\n\t//         \"Include all properties.\",\n\t//         \"Omit owner, acl and defaultObjectAcl properties.\"\n\t//       ],\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"provisionalUserProject\": {\n\t//       \"description\": \"The project to be billed for this request if the target bucket is requester-pays bucket.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"userProject\": {\n\t//       \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     }\n\t//   },\n\t//   \"path\": \"b/{bucket}\",\n\t//   \"request\": {\n\t//     \"$ref\": \"Bucket\"\n\t//   },\n\t//   \"response\": {\n\t//     \"$ref\": \"Bucket\"\n\t//   },\n\t//   \"scopes\": [\n\t//     \"https://www.googleapis.com/auth/cloud-platform\",\n\t//     \"https://www.googleapis.com/auth/devstorage.full_control\"\n\t//   ]\n\t// }\n\n}\n\n// method id \"storage.channels.stop\":\n\ntype ChannelsStopCall struct {\n\ts          *Service\n\tchannel    *Channel\n\turlParams_ gensupport.URLParams\n\tctx_       context.Context\n\theader_    http.Header\n}\n\n// Stop: Stop watching resources through this channel\nfunc (r *ChannelsService) Stop(channel *Channel) *ChannelsStopCall {\n\tc := &ChannelsStopCall{s: r.s, urlParams_: make(gensupport.URLParams)}\n\tc.channel = channel\n\treturn c\n}\n\n// Fields allows partial responses to be retrieved. See\n// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse\n// for more information.\nfunc (c *ChannelsStopCall) Fields(s ...googleapi.Field) *ChannelsStopCall {\n\tc.urlParams_.Set(\"fields\", googleapi.CombineFields(s))\n\treturn c\n}\n\n// Context sets the context to be used in this call's Do method. Any\n// pending HTTP request will be aborted if the provided context is\n// canceled.\nfunc (c *ChannelsStopCall) Context(ctx context.Context) *ChannelsStopCall {\n\tc.ctx_ = ctx\n\treturn c\n}\n\n// Header returns an http.Header that can be modified by the caller to\n// add HTTP headers to the request.\nfunc (c *ChannelsStopCall) Header() http.Header {\n\tif c.header_ == nil {\n\t\tc.header_ = make(http.Header)\n\t}\n\treturn c.header_\n}\n\nfunc (c *ChannelsStopCall) doRequest(alt string) (*http.Response, error) {\n\treqHeaders := make(http.Header)\n\tfor k, v := range c.header_ {\n\t\treqHeaders[k] = v\n\t}\n\treqHeaders.Set(\"User-Agent\", c.s.userAgent())\n\tvar body io.Reader = nil\n\tbody, err := googleapi.WithoutDataWrapper.JSONReader(c.channel)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treqHeaders.Set(\"Content-Type\", \"application/json\")\n\tc.urlParams_.Set(\"alt\", alt)\n\tc.urlParams_.Set(\"prettyPrint\", \"false\")\n\turls := googleapi.ResolveRelative(c.s.BasePath, \"channels/stop\")\n\turls += \"?\" + c.urlParams_.Encode()\n\treq, err := http.NewRequest(\"POST\", urls, body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.Header = reqHeaders\n\treturn gensupport.SendRequest(c.ctx_, c.s.client, req)\n}\n\n// Do executes the \"storage.channels.stop\" call.\nfunc (c *ChannelsStopCall) Do(opts ...googleapi.CallOption) error {\n\tgensupport.SetOptions(c.urlParams_, opts...)\n\tres, err := c.doRequest(\"json\")\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer googleapi.CloseBody(res)\n\tif err := googleapi.CheckResponse(res); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n\t// {\n\t//   \"description\": \"Stop watching resources through this channel\",\n\t//   \"httpMethod\": \"POST\",\n\t//   \"id\": \"storage.channels.stop\",\n\t//   \"path\": \"channels/stop\",\n\t//   \"request\": {\n\t//     \"$ref\": \"Channel\",\n\t//     \"parameterName\": \"resource\"\n\t//   },\n\t//   \"scopes\": [\n\t//     \"https://www.googleapis.com/auth/cloud-platform\",\n\t//     \"https://www.googleapis.com/auth/cloud-platform.read-only\",\n\t//     \"https://www.googleapis.com/auth/devstorage.full_control\",\n\t//     \"https://www.googleapis.com/auth/devstorage.read_only\",\n\t//     \"https://www.googleapis.com/auth/devstorage.read_write\"\n\t//   ]\n\t// }\n\n}\n\n// method id \"storage.defaultObjectAccessControls.delete\":\n\ntype DefaultObjectAccessControlsDeleteCall struct {\n\ts          *Service\n\tbucket     string\n\tentity     string\n\turlParams_ gensupport.URLParams\n\tctx_       context.Context\n\theader_    http.Header\n}\n\n// Delete: Permanently deletes the default object ACL entry for the\n// specified entity on the specified bucket.\nfunc (r *DefaultObjectAccessControlsService) Delete(bucket string, entity string) *DefaultObjectAccessControlsDeleteCall {\n\tc := &DefaultObjectAccessControlsDeleteCall{s: r.s, urlParams_: make(gensupport.URLParams)}\n\tc.bucket = bucket\n\tc.entity = entity\n\treturn c\n}\n\n// ProvisionalUserProject sets the optional parameter\n// \"provisionalUserProject\": The project to be billed for this request\n// if the target bucket is requester-pays bucket.\nfunc (c *DefaultObjectAccessControlsDeleteCall) ProvisionalUserProject(provisionalUserProject string) *DefaultObjectAccessControlsDeleteCall {\n\tc.urlParams_.Set(\"provisionalUserProject\", provisionalUserProject)\n\treturn c\n}\n\n// UserProject sets the optional parameter \"userProject\": The project to\n// be billed for this request. Required for Requester Pays buckets.\nfunc (c *DefaultObjectAccessControlsDeleteCall) UserProject(userProject string) *DefaultObjectAccessControlsDeleteCall {\n\tc.urlParams_.Set(\"userProject\", userProject)\n\treturn c\n}\n\n// Fields allows partial responses to be retrieved. See\n// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse\n// for more information.\nfunc (c *DefaultObjectAccessControlsDeleteCall) Fields(s ...googleapi.Field) *DefaultObjectAccessControlsDeleteCall {\n\tc.urlParams_.Set(\"fields\", googleapi.CombineFields(s))\n\treturn c\n}\n\n// Context sets the context to be used in this call's Do method. Any\n// pending HTTP request will be aborted if the provided context is\n// canceled.\nfunc (c *DefaultObjectAccessControlsDeleteCall) Context(ctx context.Context) *DefaultObjectAccessControlsDeleteCall {\n\tc.ctx_ = ctx\n\treturn c\n}\n\n// Header returns an http.Header that can be modified by the caller to\n// add HTTP headers to the request.\nfunc (c *DefaultObjectAccessControlsDeleteCall) Header() http.Header {\n\tif c.header_ == nil {\n\t\tc.header_ = make(http.Header)\n\t}\n\treturn c.header_\n}\n\nfunc (c *DefaultObjectAccessControlsDeleteCall) doRequest(alt string) (*http.Response, error) {\n\treqHeaders := make(http.Header)\n\tfor k, v := range c.header_ {\n\t\treqHeaders[k] = v\n\t}\n\treqHeaders.Set(\"User-Agent\", c.s.userAgent())\n\tvar body io.Reader = nil\n\tc.urlParams_.Set(\"alt\", alt)\n\tc.urlParams_.Set(\"prettyPrint\", \"false\")\n\turls := googleapi.ResolveRelative(c.s.BasePath, \"b/{bucket}/defaultObjectAcl/{entity}\")\n\turls += \"?\" + c.urlParams_.Encode()\n\treq, err := http.NewRequest(\"DELETE\", urls, body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.Header = reqHeaders\n\tgoogleapi.Expand(req.URL, map[string]string{\n\t\t\"bucket\": c.bucket,\n\t\t\"entity\": c.entity,\n\t})\n\treturn gensupport.SendRequest(c.ctx_, c.s.client, req)\n}\n\n// Do executes the \"storage.defaultObjectAccessControls.delete\" call.\nfunc (c *DefaultObjectAccessControlsDeleteCall) Do(opts ...googleapi.CallOption) error {\n\tgensupport.SetOptions(c.urlParams_, opts...)\n\tres, err := c.doRequest(\"json\")\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer googleapi.CloseBody(res)\n\tif err := googleapi.CheckResponse(res); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n\t// {\n\t//   \"description\": \"Permanently deletes the default object ACL entry for the specified entity on the specified bucket.\",\n\t//   \"httpMethod\": \"DELETE\",\n\t//   \"id\": \"storage.defaultObjectAccessControls.delete\",\n\t//   \"parameterOrder\": [\n\t//     \"bucket\",\n\t//     \"entity\"\n\t//   ],\n\t//   \"parameters\": {\n\t//     \"bucket\": {\n\t//       \"description\": \"Name of a bucket.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"entity\": {\n\t//       \"description\": \"The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"provisionalUserProject\": {\n\t//       \"description\": \"The project to be billed for this request if the target bucket is requester-pays bucket.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"userProject\": {\n\t//       \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     }\n\t//   },\n\t//   \"path\": \"b/{bucket}/defaultObjectAcl/{entity}\",\n\t//   \"scopes\": [\n\t//     \"https://www.googleapis.com/auth/cloud-platform\",\n\t//     \"https://www.googleapis.com/auth/devstorage.full_control\"\n\t//   ]\n\t// }\n\n}\n\n// method id \"storage.defaultObjectAccessControls.get\":\n\ntype DefaultObjectAccessControlsGetCall struct {\n\ts            *Service\n\tbucket       string\n\tentity       string\n\turlParams_   gensupport.URLParams\n\tifNoneMatch_ string\n\tctx_         context.Context\n\theader_      http.Header\n}\n\n// Get: Returns the default object ACL entry for the specified entity on\n// the specified bucket.\nfunc (r *DefaultObjectAccessControlsService) Get(bucket string, entity string) *DefaultObjectAccessControlsGetCall {\n\tc := &DefaultObjectAccessControlsGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}\n\tc.bucket = bucket\n\tc.entity = entity\n\treturn c\n}\n\n// ProvisionalUserProject sets the optional parameter\n// \"provisionalUserProject\": The project to be billed for this request\n// if the target bucket is requester-pays bucket.\nfunc (c *DefaultObjectAccessControlsGetCall) ProvisionalUserProject(provisionalUserProject string) *DefaultObjectAccessControlsGetCall {\n\tc.urlParams_.Set(\"provisionalUserProject\", provisionalUserProject)\n\treturn c\n}\n\n// UserProject sets the optional parameter \"userProject\": The project to\n// be billed for this request. Required for Requester Pays buckets.\nfunc (c *DefaultObjectAccessControlsGetCall) UserProject(userProject string) *DefaultObjectAccessControlsGetCall {\n\tc.urlParams_.Set(\"userProject\", userProject)\n\treturn c\n}\n\n// Fields allows partial responses to be retrieved. See\n// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse\n// for more information.\nfunc (c *DefaultObjectAccessControlsGetCall) Fields(s ...googleapi.Field) *DefaultObjectAccessControlsGetCall {\n\tc.urlParams_.Set(\"fields\", googleapi.CombineFields(s))\n\treturn c\n}\n\n// IfNoneMatch sets the optional parameter which makes the operation\n// fail if the object's ETag matches the given value. This is useful for\n// getting updates only after the object has changed since the last\n// request. Use googleapi.IsNotModified to check whether the response\n// error from Do is the result of In-None-Match.\nfunc (c *DefaultObjectAccessControlsGetCall) IfNoneMatch(entityTag string) *DefaultObjectAccessControlsGetCall {\n\tc.ifNoneMatch_ = entityTag\n\treturn c\n}\n\n// Context sets the context to be used in this call's Do method. Any\n// pending HTTP request will be aborted if the provided context is\n// canceled.\nfunc (c *DefaultObjectAccessControlsGetCall) Context(ctx context.Context) *DefaultObjectAccessControlsGetCall {\n\tc.ctx_ = ctx\n\treturn c\n}\n\n// Header returns an http.Header that can be modified by the caller to\n// add HTTP headers to the request.\nfunc (c *DefaultObjectAccessControlsGetCall) Header() http.Header {\n\tif c.header_ == nil {\n\t\tc.header_ = make(http.Header)\n\t}\n\treturn c.header_\n}\n\nfunc (c *DefaultObjectAccessControlsGetCall) doRequest(alt string) (*http.Response, error) {\n\treqHeaders := make(http.Header)\n\tfor k, v := range c.header_ {\n\t\treqHeaders[k] = v\n\t}\n\treqHeaders.Set(\"User-Agent\", c.s.userAgent())\n\tif c.ifNoneMatch_ != \"\" {\n\t\treqHeaders.Set(\"If-None-Match\", c.ifNoneMatch_)\n\t}\n\tvar body io.Reader = nil\n\tc.urlParams_.Set(\"alt\", alt)\n\tc.urlParams_.Set(\"prettyPrint\", \"false\")\n\turls := googleapi.ResolveRelative(c.s.BasePath, \"b/{bucket}/defaultObjectAcl/{entity}\")\n\turls += \"?\" + c.urlParams_.Encode()\n\treq, err := http.NewRequest(\"GET\", urls, body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.Header = reqHeaders\n\tgoogleapi.Expand(req.URL, map[string]string{\n\t\t\"bucket\": c.bucket,\n\t\t\"entity\": c.entity,\n\t})\n\treturn gensupport.SendRequest(c.ctx_, c.s.client, req)\n}\n\n// Do executes the \"storage.defaultObjectAccessControls.get\" call.\n// Exactly one of *ObjectAccessControl or error will be non-nil. Any\n// non-2xx status code is an error. Response headers are in either\n// *ObjectAccessControl.ServerResponse.Header or (if a response was\n// returned at all) in error.(*googleapi.Error).Header. Use\n// googleapi.IsNotModified to check whether the returned error was\n// because http.StatusNotModified was returned.\nfunc (c *DefaultObjectAccessControlsGetCall) Do(opts ...googleapi.CallOption) (*ObjectAccessControl, error) {\n\tgensupport.SetOptions(c.urlParams_, opts...)\n\tres, err := c.doRequest(\"json\")\n\tif res != nil && res.StatusCode == http.StatusNotModified {\n\t\tif res.Body != nil {\n\t\t\tres.Body.Close()\n\t\t}\n\t\treturn nil, &googleapi.Error{\n\t\t\tCode:   res.StatusCode,\n\t\t\tHeader: res.Header,\n\t\t}\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer googleapi.CloseBody(res)\n\tif err := googleapi.CheckResponse(res); err != nil {\n\t\treturn nil, err\n\t}\n\tret := &ObjectAccessControl{\n\t\tServerResponse: googleapi.ServerResponse{\n\t\t\tHeader:         res.Header,\n\t\t\tHTTPStatusCode: res.StatusCode,\n\t\t},\n\t}\n\ttarget := &ret\n\tif err := gensupport.DecodeResponse(target, res); err != nil {\n\t\treturn nil, err\n\t}\n\treturn ret, nil\n\t// {\n\t//   \"description\": \"Returns the default object ACL entry for the specified entity on the specified bucket.\",\n\t//   \"httpMethod\": \"GET\",\n\t//   \"id\": \"storage.defaultObjectAccessControls.get\",\n\t//   \"parameterOrder\": [\n\t//     \"bucket\",\n\t//     \"entity\"\n\t//   ],\n\t//   \"parameters\": {\n\t//     \"bucket\": {\n\t//       \"description\": \"Name of a bucket.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"entity\": {\n\t//       \"description\": \"The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"provisionalUserProject\": {\n\t//       \"description\": \"The project to be billed for this request if the target bucket is requester-pays bucket.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"userProject\": {\n\t//       \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     }\n\t//   },\n\t//   \"path\": \"b/{bucket}/defaultObjectAcl/{entity}\",\n\t//   \"response\": {\n\t//     \"$ref\": \"ObjectAccessControl\"\n\t//   },\n\t//   \"scopes\": [\n\t//     \"https://www.googleapis.com/auth/cloud-platform\",\n\t//     \"https://www.googleapis.com/auth/devstorage.full_control\"\n\t//   ]\n\t// }\n\n}\n\n// method id \"storage.defaultObjectAccessControls.insert\":\n\ntype DefaultObjectAccessControlsInsertCall struct {\n\ts                   *Service\n\tbucket              string\n\tobjectaccesscontrol *ObjectAccessControl\n\turlParams_          gensupport.URLParams\n\tctx_                context.Context\n\theader_             http.Header\n}\n\n// Insert: Creates a new default object ACL entry on the specified\n// bucket.\nfunc (r *DefaultObjectAccessControlsService) Insert(bucket string, objectaccesscontrol *ObjectAccessControl) *DefaultObjectAccessControlsInsertCall {\n\tc := &DefaultObjectAccessControlsInsertCall{s: r.s, urlParams_: make(gensupport.URLParams)}\n\tc.bucket = bucket\n\tc.objectaccesscontrol = objectaccesscontrol\n\treturn c\n}\n\n// ProvisionalUserProject sets the optional parameter\n// \"provisionalUserProject\": The project to be billed for this request\n// if the target bucket is requester-pays bucket.\nfunc (c *DefaultObjectAccessControlsInsertCall) ProvisionalUserProject(provisionalUserProject string) *DefaultObjectAccessControlsInsertCall {\n\tc.urlParams_.Set(\"provisionalUserProject\", provisionalUserProject)\n\treturn c\n}\n\n// UserProject sets the optional parameter \"userProject\": The project to\n// be billed for this request. Required for Requester Pays buckets.\nfunc (c *DefaultObjectAccessControlsInsertCall) UserProject(userProject string) *DefaultObjectAccessControlsInsertCall {\n\tc.urlParams_.Set(\"userProject\", userProject)\n\treturn c\n}\n\n// Fields allows partial responses to be retrieved. See\n// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse\n// for more information.\nfunc (c *DefaultObjectAccessControlsInsertCall) Fields(s ...googleapi.Field) *DefaultObjectAccessControlsInsertCall {\n\tc.urlParams_.Set(\"fields\", googleapi.CombineFields(s))\n\treturn c\n}\n\n// Context sets the context to be used in this call's Do method. Any\n// pending HTTP request will be aborted if the provided context is\n// canceled.\nfunc (c *DefaultObjectAccessControlsInsertCall) Context(ctx context.Context) *DefaultObjectAccessControlsInsertCall {\n\tc.ctx_ = ctx\n\treturn c\n}\n\n// Header returns an http.Header that can be modified by the caller to\n// add HTTP headers to the request.\nfunc (c *DefaultObjectAccessControlsInsertCall) Header() http.Header {\n\tif c.header_ == nil {\n\t\tc.header_ = make(http.Header)\n\t}\n\treturn c.header_\n}\n\nfunc (c *DefaultObjectAccessControlsInsertCall) doRequest(alt string) (*http.Response, error) {\n\treqHeaders := make(http.Header)\n\tfor k, v := range c.header_ {\n\t\treqHeaders[k] = v\n\t}\n\treqHeaders.Set(\"User-Agent\", c.s.userAgent())\n\tvar body io.Reader = nil\n\tbody, err := googleapi.WithoutDataWrapper.JSONReader(c.objectaccesscontrol)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treqHeaders.Set(\"Content-Type\", \"application/json\")\n\tc.urlParams_.Set(\"alt\", alt)\n\tc.urlParams_.Set(\"prettyPrint\", \"false\")\n\turls := googleapi.ResolveRelative(c.s.BasePath, \"b/{bucket}/defaultObjectAcl\")\n\turls += \"?\" + c.urlParams_.Encode()\n\treq, err := http.NewRequest(\"POST\", urls, body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.Header = reqHeaders\n\tgoogleapi.Expand(req.URL, map[string]string{\n\t\t\"bucket\": c.bucket,\n\t})\n\treturn gensupport.SendRequest(c.ctx_, c.s.client, req)\n}\n\n// Do executes the \"storage.defaultObjectAccessControls.insert\" call.\n// Exactly one of *ObjectAccessControl or error will be non-nil. Any\n// non-2xx status code is an error. Response headers are in either\n// *ObjectAccessControl.ServerResponse.Header or (if a response was\n// returned at all) in error.(*googleapi.Error).Header. Use\n// googleapi.IsNotModified to check whether the returned error was\n// because http.StatusNotModified was returned.\nfunc (c *DefaultObjectAccessControlsInsertCall) Do(opts ...googleapi.CallOption) (*ObjectAccessControl, error) {\n\tgensupport.SetOptions(c.urlParams_, opts...)\n\tres, err := c.doRequest(\"json\")\n\tif res != nil && res.StatusCode == http.StatusNotModified {\n\t\tif res.Body != nil {\n\t\t\tres.Body.Close()\n\t\t}\n\t\treturn nil, &googleapi.Error{\n\t\t\tCode:   res.StatusCode,\n\t\t\tHeader: res.Header,\n\t\t}\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer googleapi.CloseBody(res)\n\tif err := googleapi.CheckResponse(res); err != nil {\n\t\treturn nil, err\n\t}\n\tret := &ObjectAccessControl{\n\t\tServerResponse: googleapi.ServerResponse{\n\t\t\tHeader:         res.Header,\n\t\t\tHTTPStatusCode: res.StatusCode,\n\t\t},\n\t}\n\ttarget := &ret\n\tif err := gensupport.DecodeResponse(target, res); err != nil {\n\t\treturn nil, err\n\t}\n\treturn ret, nil\n\t// {\n\t//   \"description\": \"Creates a new default object ACL entry on the specified bucket.\",\n\t//   \"httpMethod\": \"POST\",\n\t//   \"id\": \"storage.defaultObjectAccessControls.insert\",\n\t//   \"parameterOrder\": [\n\t//     \"bucket\"\n\t//   ],\n\t//   \"parameters\": {\n\t//     \"bucket\": {\n\t//       \"description\": \"Name of a bucket.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"provisionalUserProject\": {\n\t//       \"description\": \"The project to be billed for this request if the target bucket is requester-pays bucket.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"userProject\": {\n\t//       \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     }\n\t//   },\n\t//   \"path\": \"b/{bucket}/defaultObjectAcl\",\n\t//   \"request\": {\n\t//     \"$ref\": \"ObjectAccessControl\"\n\t//   },\n\t//   \"response\": {\n\t//     \"$ref\": \"ObjectAccessControl\"\n\t//   },\n\t//   \"scopes\": [\n\t//     \"https://www.googleapis.com/auth/cloud-platform\",\n\t//     \"https://www.googleapis.com/auth/devstorage.full_control\"\n\t//   ]\n\t// }\n\n}\n\n// method id \"storage.defaultObjectAccessControls.list\":\n\ntype DefaultObjectAccessControlsListCall struct {\n\ts            *Service\n\tbucket       string\n\turlParams_   gensupport.URLParams\n\tifNoneMatch_ string\n\tctx_         context.Context\n\theader_      http.Header\n}\n\n// List: Retrieves default object ACL entries on the specified bucket.\nfunc (r *DefaultObjectAccessControlsService) List(bucket string) *DefaultObjectAccessControlsListCall {\n\tc := &DefaultObjectAccessControlsListCall{s: r.s, urlParams_: make(gensupport.URLParams)}\n\tc.bucket = bucket\n\treturn c\n}\n\n// IfMetagenerationMatch sets the optional parameter\n// \"ifMetagenerationMatch\": If present, only return default ACL listing\n// if the bucket's current metageneration matches this value.\nfunc (c *DefaultObjectAccessControlsListCall) IfMetagenerationMatch(ifMetagenerationMatch int64) *DefaultObjectAccessControlsListCall {\n\tc.urlParams_.Set(\"ifMetagenerationMatch\", fmt.Sprint(ifMetagenerationMatch))\n\treturn c\n}\n\n// IfMetagenerationNotMatch sets the optional parameter\n// \"ifMetagenerationNotMatch\": If present, only return default ACL\n// listing if the bucket's current metageneration does not match the\n// given value.\nfunc (c *DefaultObjectAccessControlsListCall) IfMetagenerationNotMatch(ifMetagenerationNotMatch int64) *DefaultObjectAccessControlsListCall {\n\tc.urlParams_.Set(\"ifMetagenerationNotMatch\", fmt.Sprint(ifMetagenerationNotMatch))\n\treturn c\n}\n\n// ProvisionalUserProject sets the optional parameter\n// \"provisionalUserProject\": The project to be billed for this request\n// if the target bucket is requester-pays bucket.\nfunc (c *DefaultObjectAccessControlsListCall) ProvisionalUserProject(provisionalUserProject string) *DefaultObjectAccessControlsListCall {\n\tc.urlParams_.Set(\"provisionalUserProject\", provisionalUserProject)\n\treturn c\n}\n\n// UserProject sets the optional parameter \"userProject\": The project to\n// be billed for this request. Required for Requester Pays buckets.\nfunc (c *DefaultObjectAccessControlsListCall) UserProject(userProject string) *DefaultObjectAccessControlsListCall {\n\tc.urlParams_.Set(\"userProject\", userProject)\n\treturn c\n}\n\n// Fields allows partial responses to be retrieved. See\n// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse\n// for more information.\nfunc (c *DefaultObjectAccessControlsListCall) Fields(s ...googleapi.Field) *DefaultObjectAccessControlsListCall {\n\tc.urlParams_.Set(\"fields\", googleapi.CombineFields(s))\n\treturn c\n}\n\n// IfNoneMatch sets the optional parameter which makes the operation\n// fail if the object's ETag matches the given value. This is useful for\n// getting updates only after the object has changed since the last\n// request. Use googleapi.IsNotModified to check whether the response\n// error from Do is the result of In-None-Match.\nfunc (c *DefaultObjectAccessControlsListCall) IfNoneMatch(entityTag string) *DefaultObjectAccessControlsListCall {\n\tc.ifNoneMatch_ = entityTag\n\treturn c\n}\n\n// Context sets the context to be used in this call's Do method. Any\n// pending HTTP request will be aborted if the provided context is\n// canceled.\nfunc (c *DefaultObjectAccessControlsListCall) Context(ctx context.Context) *DefaultObjectAccessControlsListCall {\n\tc.ctx_ = ctx\n\treturn c\n}\n\n// Header returns an http.Header that can be modified by the caller to\n// add HTTP headers to the request.\nfunc (c *DefaultObjectAccessControlsListCall) Header() http.Header {\n\tif c.header_ == nil {\n\t\tc.header_ = make(http.Header)\n\t}\n\treturn c.header_\n}\n\nfunc (c *DefaultObjectAccessControlsListCall) doRequest(alt string) (*http.Response, error) {\n\treqHeaders := make(http.Header)\n\tfor k, v := range c.header_ {\n\t\treqHeaders[k] = v\n\t}\n\treqHeaders.Set(\"User-Agent\", c.s.userAgent())\n\tif c.ifNoneMatch_ != \"\" {\n\t\treqHeaders.Set(\"If-None-Match\", c.ifNoneMatch_)\n\t}\n\tvar body io.Reader = nil\n\tc.urlParams_.Set(\"alt\", alt)\n\tc.urlParams_.Set(\"prettyPrint\", \"false\")\n\turls := googleapi.ResolveRelative(c.s.BasePath, \"b/{bucket}/defaultObjectAcl\")\n\turls += \"?\" + c.urlParams_.Encode()\n\treq, err := http.NewRequest(\"GET\", urls, body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.Header = reqHeaders\n\tgoogleapi.Expand(req.URL, map[string]string{\n\t\t\"bucket\": c.bucket,\n\t})\n\treturn gensupport.SendRequest(c.ctx_, c.s.client, req)\n}\n\n// Do executes the \"storage.defaultObjectAccessControls.list\" call.\n// Exactly one of *ObjectAccessControls or error will be non-nil. Any\n// non-2xx status code is an error. Response headers are in either\n// *ObjectAccessControls.ServerResponse.Header or (if a response was\n// returned at all) in error.(*googleapi.Error).Header. Use\n// googleapi.IsNotModified to check whether the returned error was\n// because http.StatusNotModified was returned.\nfunc (c *DefaultObjectAccessControlsListCall) Do(opts ...googleapi.CallOption) (*ObjectAccessControls, error) {\n\tgensupport.SetOptions(c.urlParams_, opts...)\n\tres, err := c.doRequest(\"json\")\n\tif res != nil && res.StatusCode == http.StatusNotModified {\n\t\tif res.Body != nil {\n\t\t\tres.Body.Close()\n\t\t}\n\t\treturn nil, &googleapi.Error{\n\t\t\tCode:   res.StatusCode,\n\t\t\tHeader: res.Header,\n\t\t}\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer googleapi.CloseBody(res)\n\tif err := googleapi.CheckResponse(res); err != nil {\n\t\treturn nil, err\n\t}\n\tret := &ObjectAccessControls{\n\t\tServerResponse: googleapi.ServerResponse{\n\t\t\tHeader:         res.Header,\n\t\t\tHTTPStatusCode: res.StatusCode,\n\t\t},\n\t}\n\ttarget := &ret\n\tif err := gensupport.DecodeResponse(target, res); err != nil {\n\t\treturn nil, err\n\t}\n\treturn ret, nil\n\t// {\n\t//   \"description\": \"Retrieves default object ACL entries on the specified bucket.\",\n\t//   \"httpMethod\": \"GET\",\n\t//   \"id\": \"storage.defaultObjectAccessControls.list\",\n\t//   \"parameterOrder\": [\n\t//     \"bucket\"\n\t//   ],\n\t//   \"parameters\": {\n\t//     \"bucket\": {\n\t//       \"description\": \"Name of a bucket.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"ifMetagenerationMatch\": {\n\t//       \"description\": \"If present, only return default ACL listing if the bucket's current metageneration matches this value.\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"ifMetagenerationNotMatch\": {\n\t//       \"description\": \"If present, only return default ACL listing if the bucket's current metageneration does not match the given value.\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"provisionalUserProject\": {\n\t//       \"description\": \"The project to be billed for this request if the target bucket is requester-pays bucket.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"userProject\": {\n\t//       \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     }\n\t//   },\n\t//   \"path\": \"b/{bucket}/defaultObjectAcl\",\n\t//   \"response\": {\n\t//     \"$ref\": \"ObjectAccessControls\"\n\t//   },\n\t//   \"scopes\": [\n\t//     \"https://www.googleapis.com/auth/cloud-platform\",\n\t//     \"https://www.googleapis.com/auth/devstorage.full_control\"\n\t//   ]\n\t// }\n\n}\n\n// method id \"storage.defaultObjectAccessControls.patch\":\n\ntype DefaultObjectAccessControlsPatchCall struct {\n\ts                   *Service\n\tbucket              string\n\tentity              string\n\tobjectaccesscontrol *ObjectAccessControl\n\turlParams_          gensupport.URLParams\n\tctx_                context.Context\n\theader_             http.Header\n}\n\n// Patch: Patches a default object ACL entry on the specified bucket.\nfunc (r *DefaultObjectAccessControlsService) Patch(bucket string, entity string, objectaccesscontrol *ObjectAccessControl) *DefaultObjectAccessControlsPatchCall {\n\tc := &DefaultObjectAccessControlsPatchCall{s: r.s, urlParams_: make(gensupport.URLParams)}\n\tc.bucket = bucket\n\tc.entity = entity\n\tc.objectaccesscontrol = objectaccesscontrol\n\treturn c\n}\n\n// ProvisionalUserProject sets the optional parameter\n// \"provisionalUserProject\": The project to be billed for this request\n// if the target bucket is requester-pays bucket.\nfunc (c *DefaultObjectAccessControlsPatchCall) ProvisionalUserProject(provisionalUserProject string) *DefaultObjectAccessControlsPatchCall {\n\tc.urlParams_.Set(\"provisionalUserProject\", provisionalUserProject)\n\treturn c\n}\n\n// UserProject sets the optional parameter \"userProject\": The project to\n// be billed for this request. Required for Requester Pays buckets.\nfunc (c *DefaultObjectAccessControlsPatchCall) UserProject(userProject string) *DefaultObjectAccessControlsPatchCall {\n\tc.urlParams_.Set(\"userProject\", userProject)\n\treturn c\n}\n\n// Fields allows partial responses to be retrieved. See\n// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse\n// for more information.\nfunc (c *DefaultObjectAccessControlsPatchCall) Fields(s ...googleapi.Field) *DefaultObjectAccessControlsPatchCall {\n\tc.urlParams_.Set(\"fields\", googleapi.CombineFields(s))\n\treturn c\n}\n\n// Context sets the context to be used in this call's Do method. Any\n// pending HTTP request will be aborted if the provided context is\n// canceled.\nfunc (c *DefaultObjectAccessControlsPatchCall) Context(ctx context.Context) *DefaultObjectAccessControlsPatchCall {\n\tc.ctx_ = ctx\n\treturn c\n}\n\n// Header returns an http.Header that can be modified by the caller to\n// add HTTP headers to the request.\nfunc (c *DefaultObjectAccessControlsPatchCall) Header() http.Header {\n\tif c.header_ == nil {\n\t\tc.header_ = make(http.Header)\n\t}\n\treturn c.header_\n}\n\nfunc (c *DefaultObjectAccessControlsPatchCall) doRequest(alt string) (*http.Response, error) {\n\treqHeaders := make(http.Header)\n\tfor k, v := range c.header_ {\n\t\treqHeaders[k] = v\n\t}\n\treqHeaders.Set(\"User-Agent\", c.s.userAgent())\n\tvar body io.Reader = nil\n\tbody, err := googleapi.WithoutDataWrapper.JSONReader(c.objectaccesscontrol)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treqHeaders.Set(\"Content-Type\", \"application/json\")\n\tc.urlParams_.Set(\"alt\", alt)\n\tc.urlParams_.Set(\"prettyPrint\", \"false\")\n\turls := googleapi.ResolveRelative(c.s.BasePath, \"b/{bucket}/defaultObjectAcl/{entity}\")\n\turls += \"?\" + c.urlParams_.Encode()\n\treq, err := http.NewRequest(\"PATCH\", urls, body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.Header = reqHeaders\n\tgoogleapi.Expand(req.URL, map[string]string{\n\t\t\"bucket\": c.bucket,\n\t\t\"entity\": c.entity,\n\t})\n\treturn gensupport.SendRequest(c.ctx_, c.s.client, req)\n}\n\n// Do executes the \"storage.defaultObjectAccessControls.patch\" call.\n// Exactly one of *ObjectAccessControl or error will be non-nil. Any\n// non-2xx status code is an error. Response headers are in either\n// *ObjectAccessControl.ServerResponse.Header or (if a response was\n// returned at all) in error.(*googleapi.Error).Header. Use\n// googleapi.IsNotModified to check whether the returned error was\n// because http.StatusNotModified was returned.\nfunc (c *DefaultObjectAccessControlsPatchCall) Do(opts ...googleapi.CallOption) (*ObjectAccessControl, error) {\n\tgensupport.SetOptions(c.urlParams_, opts...)\n\tres, err := c.doRequest(\"json\")\n\tif res != nil && res.StatusCode == http.StatusNotModified {\n\t\tif res.Body != nil {\n\t\t\tres.Body.Close()\n\t\t}\n\t\treturn nil, &googleapi.Error{\n\t\t\tCode:   res.StatusCode,\n\t\t\tHeader: res.Header,\n\t\t}\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer googleapi.CloseBody(res)\n\tif err := googleapi.CheckResponse(res); err != nil {\n\t\treturn nil, err\n\t}\n\tret := &ObjectAccessControl{\n\t\tServerResponse: googleapi.ServerResponse{\n\t\t\tHeader:         res.Header,\n\t\t\tHTTPStatusCode: res.StatusCode,\n\t\t},\n\t}\n\ttarget := &ret\n\tif err := gensupport.DecodeResponse(target, res); err != nil {\n\t\treturn nil, err\n\t}\n\treturn ret, nil\n\t// {\n\t//   \"description\": \"Patches a default object ACL entry on the specified bucket.\",\n\t//   \"httpMethod\": \"PATCH\",\n\t//   \"id\": \"storage.defaultObjectAccessControls.patch\",\n\t//   \"parameterOrder\": [\n\t//     \"bucket\",\n\t//     \"entity\"\n\t//   ],\n\t//   \"parameters\": {\n\t//     \"bucket\": {\n\t//       \"description\": \"Name of a bucket.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"entity\": {\n\t//       \"description\": \"The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"provisionalUserProject\": {\n\t//       \"description\": \"The project to be billed for this request if the target bucket is requester-pays bucket.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"userProject\": {\n\t//       \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     }\n\t//   },\n\t//   \"path\": \"b/{bucket}/defaultObjectAcl/{entity}\",\n\t//   \"request\": {\n\t//     \"$ref\": \"ObjectAccessControl\"\n\t//   },\n\t//   \"response\": {\n\t//     \"$ref\": \"ObjectAccessControl\"\n\t//   },\n\t//   \"scopes\": [\n\t//     \"https://www.googleapis.com/auth/cloud-platform\",\n\t//     \"https://www.googleapis.com/auth/devstorage.full_control\"\n\t//   ]\n\t// }\n\n}\n\n// method id \"storage.defaultObjectAccessControls.update\":\n\ntype DefaultObjectAccessControlsUpdateCall struct {\n\ts                   *Service\n\tbucket              string\n\tentity              string\n\tobjectaccesscontrol *ObjectAccessControl\n\turlParams_          gensupport.URLParams\n\tctx_                context.Context\n\theader_             http.Header\n}\n\n// Update: Updates a default object ACL entry on the specified bucket.\nfunc (r *DefaultObjectAccessControlsService) Update(bucket string, entity string, objectaccesscontrol *ObjectAccessControl) *DefaultObjectAccessControlsUpdateCall {\n\tc := &DefaultObjectAccessControlsUpdateCall{s: r.s, urlParams_: make(gensupport.URLParams)}\n\tc.bucket = bucket\n\tc.entity = entity\n\tc.objectaccesscontrol = objectaccesscontrol\n\treturn c\n}\n\n// ProvisionalUserProject sets the optional parameter\n// \"provisionalUserProject\": The project to be billed for this request\n// if the target bucket is requester-pays bucket.\nfunc (c *DefaultObjectAccessControlsUpdateCall) ProvisionalUserProject(provisionalUserProject string) *DefaultObjectAccessControlsUpdateCall {\n\tc.urlParams_.Set(\"provisionalUserProject\", provisionalUserProject)\n\treturn c\n}\n\n// UserProject sets the optional parameter \"userProject\": The project to\n// be billed for this request. Required for Requester Pays buckets.\nfunc (c *DefaultObjectAccessControlsUpdateCall) UserProject(userProject string) *DefaultObjectAccessControlsUpdateCall {\n\tc.urlParams_.Set(\"userProject\", userProject)\n\treturn c\n}\n\n// Fields allows partial responses to be retrieved. See\n// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse\n// for more information.\nfunc (c *DefaultObjectAccessControlsUpdateCall) Fields(s ...googleapi.Field) *DefaultObjectAccessControlsUpdateCall {\n\tc.urlParams_.Set(\"fields\", googleapi.CombineFields(s))\n\treturn c\n}\n\n// Context sets the context to be used in this call's Do method. Any\n// pending HTTP request will be aborted if the provided context is\n// canceled.\nfunc (c *DefaultObjectAccessControlsUpdateCall) Context(ctx context.Context) *DefaultObjectAccessControlsUpdateCall {\n\tc.ctx_ = ctx\n\treturn c\n}\n\n// Header returns an http.Header that can be modified by the caller to\n// add HTTP headers to the request.\nfunc (c *DefaultObjectAccessControlsUpdateCall) Header() http.Header {\n\tif c.header_ == nil {\n\t\tc.header_ = make(http.Header)\n\t}\n\treturn c.header_\n}\n\nfunc (c *DefaultObjectAccessControlsUpdateCall) doRequest(alt string) (*http.Response, error) {\n\treqHeaders := make(http.Header)\n\tfor k, v := range c.header_ {\n\t\treqHeaders[k] = v\n\t}\n\treqHeaders.Set(\"User-Agent\", c.s.userAgent())\n\tvar body io.Reader = nil\n\tbody, err := googleapi.WithoutDataWrapper.JSONReader(c.objectaccesscontrol)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treqHeaders.Set(\"Content-Type\", \"application/json\")\n\tc.urlParams_.Set(\"alt\", alt)\n\tc.urlParams_.Set(\"prettyPrint\", \"false\")\n\turls := googleapi.ResolveRelative(c.s.BasePath, \"b/{bucket}/defaultObjectAcl/{entity}\")\n\turls += \"?\" + c.urlParams_.Encode()\n\treq, err := http.NewRequest(\"PUT\", urls, body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.Header = reqHeaders\n\tgoogleapi.Expand(req.URL, map[string]string{\n\t\t\"bucket\": c.bucket,\n\t\t\"entity\": c.entity,\n\t})\n\treturn gensupport.SendRequest(c.ctx_, c.s.client, req)\n}\n\n// Do executes the \"storage.defaultObjectAccessControls.update\" call.\n// Exactly one of *ObjectAccessControl or error will be non-nil. Any\n// non-2xx status code is an error. Response headers are in either\n// *ObjectAccessControl.ServerResponse.Header or (if a response was\n// returned at all) in error.(*googleapi.Error).Header. Use\n// googleapi.IsNotModified to check whether the returned error was\n// because http.StatusNotModified was returned.\nfunc (c *DefaultObjectAccessControlsUpdateCall) Do(opts ...googleapi.CallOption) (*ObjectAccessControl, error) {\n\tgensupport.SetOptions(c.urlParams_, opts...)\n\tres, err := c.doRequest(\"json\")\n\tif res != nil && res.StatusCode == http.StatusNotModified {\n\t\tif res.Body != nil {\n\t\t\tres.Body.Close()\n\t\t}\n\t\treturn nil, &googleapi.Error{\n\t\t\tCode:   res.StatusCode,\n\t\t\tHeader: res.Header,\n\t\t}\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer googleapi.CloseBody(res)\n\tif err := googleapi.CheckResponse(res); err != nil {\n\t\treturn nil, err\n\t}\n\tret := &ObjectAccessControl{\n\t\tServerResponse: googleapi.ServerResponse{\n\t\t\tHeader:         res.Header,\n\t\t\tHTTPStatusCode: res.StatusCode,\n\t\t},\n\t}\n\ttarget := &ret\n\tif err := gensupport.DecodeResponse(target, res); err != nil {\n\t\treturn nil, err\n\t}\n\treturn ret, nil\n\t// {\n\t//   \"description\": \"Updates a default object ACL entry on the specified bucket.\",\n\t//   \"httpMethod\": \"PUT\",\n\t//   \"id\": \"storage.defaultObjectAccessControls.update\",\n\t//   \"parameterOrder\": [\n\t//     \"bucket\",\n\t//     \"entity\"\n\t//   ],\n\t//   \"parameters\": {\n\t//     \"bucket\": {\n\t//       \"description\": \"Name of a bucket.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"entity\": {\n\t//       \"description\": \"The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"provisionalUserProject\": {\n\t//       \"description\": \"The project to be billed for this request if the target bucket is requester-pays bucket.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"userProject\": {\n\t//       \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     }\n\t//   },\n\t//   \"path\": \"b/{bucket}/defaultObjectAcl/{entity}\",\n\t//   \"request\": {\n\t//     \"$ref\": \"ObjectAccessControl\"\n\t//   },\n\t//   \"response\": {\n\t//     \"$ref\": \"ObjectAccessControl\"\n\t//   },\n\t//   \"scopes\": [\n\t//     \"https://www.googleapis.com/auth/cloud-platform\",\n\t//     \"https://www.googleapis.com/auth/devstorage.full_control\"\n\t//   ]\n\t// }\n\n}\n\n// method id \"storage.notifications.delete\":\n\ntype NotificationsDeleteCall struct {\n\ts            *Service\n\tbucket       string\n\tnotification string\n\turlParams_   gensupport.URLParams\n\tctx_         context.Context\n\theader_      http.Header\n}\n\n// Delete: Permanently deletes a notification subscription.\nfunc (r *NotificationsService) Delete(bucket string, notification string) *NotificationsDeleteCall {\n\tc := &NotificationsDeleteCall{s: r.s, urlParams_: make(gensupport.URLParams)}\n\tc.bucket = bucket\n\tc.notification = notification\n\treturn c\n}\n\n// ProvisionalUserProject sets the optional parameter\n// \"provisionalUserProject\": The project to be billed for this request\n// if the target bucket is requester-pays bucket.\nfunc (c *NotificationsDeleteCall) ProvisionalUserProject(provisionalUserProject string) *NotificationsDeleteCall {\n\tc.urlParams_.Set(\"provisionalUserProject\", provisionalUserProject)\n\treturn c\n}\n\n// UserProject sets the optional parameter \"userProject\": The project to\n// be billed for this request. Required for Requester Pays buckets.\nfunc (c *NotificationsDeleteCall) UserProject(userProject string) *NotificationsDeleteCall {\n\tc.urlParams_.Set(\"userProject\", userProject)\n\treturn c\n}\n\n// Fields allows partial responses to be retrieved. See\n// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse\n// for more information.\nfunc (c *NotificationsDeleteCall) Fields(s ...googleapi.Field) *NotificationsDeleteCall {\n\tc.urlParams_.Set(\"fields\", googleapi.CombineFields(s))\n\treturn c\n}\n\n// Context sets the context to be used in this call's Do method. Any\n// pending HTTP request will be aborted if the provided context is\n// canceled.\nfunc (c *NotificationsDeleteCall) Context(ctx context.Context) *NotificationsDeleteCall {\n\tc.ctx_ = ctx\n\treturn c\n}\n\n// Header returns an http.Header that can be modified by the caller to\n// add HTTP headers to the request.\nfunc (c *NotificationsDeleteCall) Header() http.Header {\n\tif c.header_ == nil {\n\t\tc.header_ = make(http.Header)\n\t}\n\treturn c.header_\n}\n\nfunc (c *NotificationsDeleteCall) doRequest(alt string) (*http.Response, error) {\n\treqHeaders := make(http.Header)\n\tfor k, v := range c.header_ {\n\t\treqHeaders[k] = v\n\t}\n\treqHeaders.Set(\"User-Agent\", c.s.userAgent())\n\tvar body io.Reader = nil\n\tc.urlParams_.Set(\"alt\", alt)\n\tc.urlParams_.Set(\"prettyPrint\", \"false\")\n\turls := googleapi.ResolveRelative(c.s.BasePath, \"b/{bucket}/notificationConfigs/{notification}\")\n\turls += \"?\" + c.urlParams_.Encode()\n\treq, err := http.NewRequest(\"DELETE\", urls, body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.Header = reqHeaders\n\tgoogleapi.Expand(req.URL, map[string]string{\n\t\t\"bucket\":       c.bucket,\n\t\t\"notification\": c.notification,\n\t})\n\treturn gensupport.SendRequest(c.ctx_, c.s.client, req)\n}\n\n// Do executes the \"storage.notifications.delete\" call.\nfunc (c *NotificationsDeleteCall) Do(opts ...googleapi.CallOption) error {\n\tgensupport.SetOptions(c.urlParams_, opts...)\n\tres, err := c.doRequest(\"json\")\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer googleapi.CloseBody(res)\n\tif err := googleapi.CheckResponse(res); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n\t// {\n\t//   \"description\": \"Permanently deletes a notification subscription.\",\n\t//   \"httpMethod\": \"DELETE\",\n\t//   \"id\": \"storage.notifications.delete\",\n\t//   \"parameterOrder\": [\n\t//     \"bucket\",\n\t//     \"notification\"\n\t//   ],\n\t//   \"parameters\": {\n\t//     \"bucket\": {\n\t//       \"description\": \"The parent bucket of the notification.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"notification\": {\n\t//       \"description\": \"ID of the notification to delete.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"provisionalUserProject\": {\n\t//       \"description\": \"The project to be billed for this request if the target bucket is requester-pays bucket.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"userProject\": {\n\t//       \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     }\n\t//   },\n\t//   \"path\": \"b/{bucket}/notificationConfigs/{notification}\",\n\t//   \"scopes\": [\n\t//     \"https://www.googleapis.com/auth/cloud-platform\",\n\t//     \"https://www.googleapis.com/auth/devstorage.full_control\",\n\t//     \"https://www.googleapis.com/auth/devstorage.read_write\"\n\t//   ]\n\t// }\n\n}\n\n// method id \"storage.notifications.get\":\n\ntype NotificationsGetCall struct {\n\ts            *Service\n\tbucket       string\n\tnotification string\n\turlParams_   gensupport.URLParams\n\tifNoneMatch_ string\n\tctx_         context.Context\n\theader_      http.Header\n}\n\n// Get: View a notification configuration.\nfunc (r *NotificationsService) Get(bucket string, notification string) *NotificationsGetCall {\n\tc := &NotificationsGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}\n\tc.bucket = bucket\n\tc.notification = notification\n\treturn c\n}\n\n// ProvisionalUserProject sets the optional parameter\n// \"provisionalUserProject\": The project to be billed for this request\n// if the target bucket is requester-pays bucket.\nfunc (c *NotificationsGetCall) ProvisionalUserProject(provisionalUserProject string) *NotificationsGetCall {\n\tc.urlParams_.Set(\"provisionalUserProject\", provisionalUserProject)\n\treturn c\n}\n\n// UserProject sets the optional parameter \"userProject\": The project to\n// be billed for this request. Required for Requester Pays buckets.\nfunc (c *NotificationsGetCall) UserProject(userProject string) *NotificationsGetCall {\n\tc.urlParams_.Set(\"userProject\", userProject)\n\treturn c\n}\n\n// Fields allows partial responses to be retrieved. See\n// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse\n// for more information.\nfunc (c *NotificationsGetCall) Fields(s ...googleapi.Field) *NotificationsGetCall {\n\tc.urlParams_.Set(\"fields\", googleapi.CombineFields(s))\n\treturn c\n}\n\n// IfNoneMatch sets the optional parameter which makes the operation\n// fail if the object's ETag matches the given value. This is useful for\n// getting updates only after the object has changed since the last\n// request. Use googleapi.IsNotModified to check whether the response\n// error from Do is the result of In-None-Match.\nfunc (c *NotificationsGetCall) IfNoneMatch(entityTag string) *NotificationsGetCall {\n\tc.ifNoneMatch_ = entityTag\n\treturn c\n}\n\n// Context sets the context to be used in this call's Do method. Any\n// pending HTTP request will be aborted if the provided context is\n// canceled.\nfunc (c *NotificationsGetCall) Context(ctx context.Context) *NotificationsGetCall {\n\tc.ctx_ = ctx\n\treturn c\n}\n\n// Header returns an http.Header that can be modified by the caller to\n// add HTTP headers to the request.\nfunc (c *NotificationsGetCall) Header() http.Header {\n\tif c.header_ == nil {\n\t\tc.header_ = make(http.Header)\n\t}\n\treturn c.header_\n}\n\nfunc (c *NotificationsGetCall) doRequest(alt string) (*http.Response, error) {\n\treqHeaders := make(http.Header)\n\tfor k, v := range c.header_ {\n\t\treqHeaders[k] = v\n\t}\n\treqHeaders.Set(\"User-Agent\", c.s.userAgent())\n\tif c.ifNoneMatch_ != \"\" {\n\t\treqHeaders.Set(\"If-None-Match\", c.ifNoneMatch_)\n\t}\n\tvar body io.Reader = nil\n\tc.urlParams_.Set(\"alt\", alt)\n\tc.urlParams_.Set(\"prettyPrint\", \"false\")\n\turls := googleapi.ResolveRelative(c.s.BasePath, \"b/{bucket}/notificationConfigs/{notification}\")\n\turls += \"?\" + c.urlParams_.Encode()\n\treq, err := http.NewRequest(\"GET\", urls, body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.Header = reqHeaders\n\tgoogleapi.Expand(req.URL, map[string]string{\n\t\t\"bucket\":       c.bucket,\n\t\t\"notification\": c.notification,\n\t})\n\treturn gensupport.SendRequest(c.ctx_, c.s.client, req)\n}\n\n// Do executes the \"storage.notifications.get\" call.\n// Exactly one of *Notification or error will be non-nil. Any non-2xx\n// status code is an error. Response headers are in either\n// *Notification.ServerResponse.Header or (if a response was returned at\n// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified\n// to check whether the returned error was because\n// http.StatusNotModified was returned.\nfunc (c *NotificationsGetCall) Do(opts ...googleapi.CallOption) (*Notification, error) {\n\tgensupport.SetOptions(c.urlParams_, opts...)\n\tres, err := c.doRequest(\"json\")\n\tif res != nil && res.StatusCode == http.StatusNotModified {\n\t\tif res.Body != nil {\n\t\t\tres.Body.Close()\n\t\t}\n\t\treturn nil, &googleapi.Error{\n\t\t\tCode:   res.StatusCode,\n\t\t\tHeader: res.Header,\n\t\t}\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer googleapi.CloseBody(res)\n\tif err := googleapi.CheckResponse(res); err != nil {\n\t\treturn nil, err\n\t}\n\tret := &Notification{\n\t\tServerResponse: googleapi.ServerResponse{\n\t\t\tHeader:         res.Header,\n\t\t\tHTTPStatusCode: res.StatusCode,\n\t\t},\n\t}\n\ttarget := &ret\n\tif err := gensupport.DecodeResponse(target, res); err != nil {\n\t\treturn nil, err\n\t}\n\treturn ret, nil\n\t// {\n\t//   \"description\": \"View a notification configuration.\",\n\t//   \"httpMethod\": \"GET\",\n\t//   \"id\": \"storage.notifications.get\",\n\t//   \"parameterOrder\": [\n\t//     \"bucket\",\n\t//     \"notification\"\n\t//   ],\n\t//   \"parameters\": {\n\t//     \"bucket\": {\n\t//       \"description\": \"The parent bucket of the notification.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"notification\": {\n\t//       \"description\": \"Notification ID\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"provisionalUserProject\": {\n\t//       \"description\": \"The project to be billed for this request if the target bucket is requester-pays bucket.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"userProject\": {\n\t//       \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     }\n\t//   },\n\t//   \"path\": \"b/{bucket}/notificationConfigs/{notification}\",\n\t//   \"response\": {\n\t//     \"$ref\": \"Notification\"\n\t//   },\n\t//   \"scopes\": [\n\t//     \"https://www.googleapis.com/auth/cloud-platform\",\n\t//     \"https://www.googleapis.com/auth/cloud-platform.read-only\",\n\t//     \"https://www.googleapis.com/auth/devstorage.full_control\",\n\t//     \"https://www.googleapis.com/auth/devstorage.read_only\",\n\t//     \"https://www.googleapis.com/auth/devstorage.read_write\"\n\t//   ]\n\t// }\n\n}\n\n// method id \"storage.notifications.insert\":\n\ntype NotificationsInsertCall struct {\n\ts            *Service\n\tbucket       string\n\tnotification *Notification\n\turlParams_   gensupport.URLParams\n\tctx_         context.Context\n\theader_      http.Header\n}\n\n// Insert: Creates a notification subscription for a given bucket.\nfunc (r *NotificationsService) Insert(bucket string, notification *Notification) *NotificationsInsertCall {\n\tc := &NotificationsInsertCall{s: r.s, urlParams_: make(gensupport.URLParams)}\n\tc.bucket = bucket\n\tc.notification = notification\n\treturn c\n}\n\n// ProvisionalUserProject sets the optional parameter\n// \"provisionalUserProject\": The project to be billed for this request\n// if the target bucket is requester-pays bucket.\nfunc (c *NotificationsInsertCall) ProvisionalUserProject(provisionalUserProject string) *NotificationsInsertCall {\n\tc.urlParams_.Set(\"provisionalUserProject\", provisionalUserProject)\n\treturn c\n}\n\n// UserProject sets the optional parameter \"userProject\": The project to\n// be billed for this request. Required for Requester Pays buckets.\nfunc (c *NotificationsInsertCall) UserProject(userProject string) *NotificationsInsertCall {\n\tc.urlParams_.Set(\"userProject\", userProject)\n\treturn c\n}\n\n// Fields allows partial responses to be retrieved. See\n// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse\n// for more information.\nfunc (c *NotificationsInsertCall) Fields(s ...googleapi.Field) *NotificationsInsertCall {\n\tc.urlParams_.Set(\"fields\", googleapi.CombineFields(s))\n\treturn c\n}\n\n// Context sets the context to be used in this call's Do method. Any\n// pending HTTP request will be aborted if the provided context is\n// canceled.\nfunc (c *NotificationsInsertCall) Context(ctx context.Context) *NotificationsInsertCall {\n\tc.ctx_ = ctx\n\treturn c\n}\n\n// Header returns an http.Header that can be modified by the caller to\n// add HTTP headers to the request.\nfunc (c *NotificationsInsertCall) Header() http.Header {\n\tif c.header_ == nil {\n\t\tc.header_ = make(http.Header)\n\t}\n\treturn c.header_\n}\n\nfunc (c *NotificationsInsertCall) doRequest(alt string) (*http.Response, error) {\n\treqHeaders := make(http.Header)\n\tfor k, v := range c.header_ {\n\t\treqHeaders[k] = v\n\t}\n\treqHeaders.Set(\"User-Agent\", c.s.userAgent())\n\tvar body io.Reader = nil\n\tbody, err := googleapi.WithoutDataWrapper.JSONReader(c.notification)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treqHeaders.Set(\"Content-Type\", \"application/json\")\n\tc.urlParams_.Set(\"alt\", alt)\n\tc.urlParams_.Set(\"prettyPrint\", \"false\")\n\turls := googleapi.ResolveRelative(c.s.BasePath, \"b/{bucket}/notificationConfigs\")\n\turls += \"?\" + c.urlParams_.Encode()\n\treq, err := http.NewRequest(\"POST\", urls, body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.Header = reqHeaders\n\tgoogleapi.Expand(req.URL, map[string]string{\n\t\t\"bucket\": c.bucket,\n\t})\n\treturn gensupport.SendRequest(c.ctx_, c.s.client, req)\n}\n\n// Do executes the \"storage.notifications.insert\" call.\n// Exactly one of *Notification or error will be non-nil. Any non-2xx\n// status code is an error. Response headers are in either\n// *Notification.ServerResponse.Header or (if a response was returned at\n// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified\n// to check whether the returned error was because\n// http.StatusNotModified was returned.\nfunc (c *NotificationsInsertCall) Do(opts ...googleapi.CallOption) (*Notification, error) {\n\tgensupport.SetOptions(c.urlParams_, opts...)\n\tres, err := c.doRequest(\"json\")\n\tif res != nil && res.StatusCode == http.StatusNotModified {\n\t\tif res.Body != nil {\n\t\t\tres.Body.Close()\n\t\t}\n\t\treturn nil, &googleapi.Error{\n\t\t\tCode:   res.StatusCode,\n\t\t\tHeader: res.Header,\n\t\t}\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer googleapi.CloseBody(res)\n\tif err := googleapi.CheckResponse(res); err != nil {\n\t\treturn nil, err\n\t}\n\tret := &Notification{\n\t\tServerResponse: googleapi.ServerResponse{\n\t\t\tHeader:         res.Header,\n\t\t\tHTTPStatusCode: res.StatusCode,\n\t\t},\n\t}\n\ttarget := &ret\n\tif err := gensupport.DecodeResponse(target, res); err != nil {\n\t\treturn nil, err\n\t}\n\treturn ret, nil\n\t// {\n\t//   \"description\": \"Creates a notification subscription for a given bucket.\",\n\t//   \"httpMethod\": \"POST\",\n\t//   \"id\": \"storage.notifications.insert\",\n\t//   \"parameterOrder\": [\n\t//     \"bucket\"\n\t//   ],\n\t//   \"parameters\": {\n\t//     \"bucket\": {\n\t//       \"description\": \"The parent bucket of the notification.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"provisionalUserProject\": {\n\t//       \"description\": \"The project to be billed for this request if the target bucket is requester-pays bucket.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"userProject\": {\n\t//       \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     }\n\t//   },\n\t//   \"path\": \"b/{bucket}/notificationConfigs\",\n\t//   \"request\": {\n\t//     \"$ref\": \"Notification\"\n\t//   },\n\t//   \"response\": {\n\t//     \"$ref\": \"Notification\"\n\t//   },\n\t//   \"scopes\": [\n\t//     \"https://www.googleapis.com/auth/cloud-platform\",\n\t//     \"https://www.googleapis.com/auth/devstorage.full_control\",\n\t//     \"https://www.googleapis.com/auth/devstorage.read_write\"\n\t//   ]\n\t// }\n\n}\n\n// method id \"storage.notifications.list\":\n\ntype NotificationsListCall struct {\n\ts            *Service\n\tbucket       string\n\turlParams_   gensupport.URLParams\n\tifNoneMatch_ string\n\tctx_         context.Context\n\theader_      http.Header\n}\n\n// List: Retrieves a list of notification subscriptions for a given\n// bucket.\nfunc (r *NotificationsService) List(bucket string) *NotificationsListCall {\n\tc := &NotificationsListCall{s: r.s, urlParams_: make(gensupport.URLParams)}\n\tc.bucket = bucket\n\treturn c\n}\n\n// ProvisionalUserProject sets the optional parameter\n// \"provisionalUserProject\": The project to be billed for this request\n// if the target bucket is requester-pays bucket.\nfunc (c *NotificationsListCall) ProvisionalUserProject(provisionalUserProject string) *NotificationsListCall {\n\tc.urlParams_.Set(\"provisionalUserProject\", provisionalUserProject)\n\treturn c\n}\n\n// UserProject sets the optional parameter \"userProject\": The project to\n// be billed for this request. Required for Requester Pays buckets.\nfunc (c *NotificationsListCall) UserProject(userProject string) *NotificationsListCall {\n\tc.urlParams_.Set(\"userProject\", userProject)\n\treturn c\n}\n\n// Fields allows partial responses to be retrieved. See\n// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse\n// for more information.\nfunc (c *NotificationsListCall) Fields(s ...googleapi.Field) *NotificationsListCall {\n\tc.urlParams_.Set(\"fields\", googleapi.CombineFields(s))\n\treturn c\n}\n\n// IfNoneMatch sets the optional parameter which makes the operation\n// fail if the object's ETag matches the given value. This is useful for\n// getting updates only after the object has changed since the last\n// request. Use googleapi.IsNotModified to check whether the response\n// error from Do is the result of In-None-Match.\nfunc (c *NotificationsListCall) IfNoneMatch(entityTag string) *NotificationsListCall {\n\tc.ifNoneMatch_ = entityTag\n\treturn c\n}\n\n// Context sets the context to be used in this call's Do method. Any\n// pending HTTP request will be aborted if the provided context is\n// canceled.\nfunc (c *NotificationsListCall) Context(ctx context.Context) *NotificationsListCall {\n\tc.ctx_ = ctx\n\treturn c\n}\n\n// Header returns an http.Header that can be modified by the caller to\n// add HTTP headers to the request.\nfunc (c *NotificationsListCall) Header() http.Header {\n\tif c.header_ == nil {\n\t\tc.header_ = make(http.Header)\n\t}\n\treturn c.header_\n}\n\nfunc (c *NotificationsListCall) doRequest(alt string) (*http.Response, error) {\n\treqHeaders := make(http.Header)\n\tfor k, v := range c.header_ {\n\t\treqHeaders[k] = v\n\t}\n\treqHeaders.Set(\"User-Agent\", c.s.userAgent())\n\tif c.ifNoneMatch_ != \"\" {\n\t\treqHeaders.Set(\"If-None-Match\", c.ifNoneMatch_)\n\t}\n\tvar body io.Reader = nil\n\tc.urlParams_.Set(\"alt\", alt)\n\tc.urlParams_.Set(\"prettyPrint\", \"false\")\n\turls := googleapi.ResolveRelative(c.s.BasePath, \"b/{bucket}/notificationConfigs\")\n\turls += \"?\" + c.urlParams_.Encode()\n\treq, err := http.NewRequest(\"GET\", urls, body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.Header = reqHeaders\n\tgoogleapi.Expand(req.URL, map[string]string{\n\t\t\"bucket\": c.bucket,\n\t})\n\treturn gensupport.SendRequest(c.ctx_, c.s.client, req)\n}\n\n// Do executes the \"storage.notifications.list\" call.\n// Exactly one of *Notifications or error will be non-nil. Any non-2xx\n// status code is an error. Response headers are in either\n// *Notifications.ServerResponse.Header or (if a response was returned\n// at all) in error.(*googleapi.Error).Header. Use\n// googleapi.IsNotModified to check whether the returned error was\n// because http.StatusNotModified was returned.\nfunc (c *NotificationsListCall) Do(opts ...googleapi.CallOption) (*Notifications, error) {\n\tgensupport.SetOptions(c.urlParams_, opts...)\n\tres, err := c.doRequest(\"json\")\n\tif res != nil && res.StatusCode == http.StatusNotModified {\n\t\tif res.Body != nil {\n\t\t\tres.Body.Close()\n\t\t}\n\t\treturn nil, &googleapi.Error{\n\t\t\tCode:   res.StatusCode,\n\t\t\tHeader: res.Header,\n\t\t}\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer googleapi.CloseBody(res)\n\tif err := googleapi.CheckResponse(res); err != nil {\n\t\treturn nil, err\n\t}\n\tret := &Notifications{\n\t\tServerResponse: googleapi.ServerResponse{\n\t\t\tHeader:         res.Header,\n\t\t\tHTTPStatusCode: res.StatusCode,\n\t\t},\n\t}\n\ttarget := &ret\n\tif err := gensupport.DecodeResponse(target, res); err != nil {\n\t\treturn nil, err\n\t}\n\treturn ret, nil\n\t// {\n\t//   \"description\": \"Retrieves a list of notification subscriptions for a given bucket.\",\n\t//   \"httpMethod\": \"GET\",\n\t//   \"id\": \"storage.notifications.list\",\n\t//   \"parameterOrder\": [\n\t//     \"bucket\"\n\t//   ],\n\t//   \"parameters\": {\n\t//     \"bucket\": {\n\t//       \"description\": \"Name of a Google Cloud Storage bucket.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"provisionalUserProject\": {\n\t//       \"description\": \"The project to be billed for this request if the target bucket is requester-pays bucket.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"userProject\": {\n\t//       \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     }\n\t//   },\n\t//   \"path\": \"b/{bucket}/notificationConfigs\",\n\t//   \"response\": {\n\t//     \"$ref\": \"Notifications\"\n\t//   },\n\t//   \"scopes\": [\n\t//     \"https://www.googleapis.com/auth/cloud-platform\",\n\t//     \"https://www.googleapis.com/auth/cloud-platform.read-only\",\n\t//     \"https://www.googleapis.com/auth/devstorage.full_control\",\n\t//     \"https://www.googleapis.com/auth/devstorage.read_only\",\n\t//     \"https://www.googleapis.com/auth/devstorage.read_write\"\n\t//   ]\n\t// }\n\n}\n\n// method id \"storage.objectAccessControls.delete\":\n\ntype ObjectAccessControlsDeleteCall struct {\n\ts          *Service\n\tbucket     string\n\tobject     string\n\tentity     string\n\turlParams_ gensupport.URLParams\n\tctx_       context.Context\n\theader_    http.Header\n}\n\n// Delete: Permanently deletes the ACL entry for the specified entity on\n// the specified object.\nfunc (r *ObjectAccessControlsService) Delete(bucket string, object string, entity string) *ObjectAccessControlsDeleteCall {\n\tc := &ObjectAccessControlsDeleteCall{s: r.s, urlParams_: make(gensupport.URLParams)}\n\tc.bucket = bucket\n\tc.object = object\n\tc.entity = entity\n\treturn c\n}\n\n// Generation sets the optional parameter \"generation\": If present,\n// selects a specific revision of this object (as opposed to the latest\n// version, the default).\nfunc (c *ObjectAccessControlsDeleteCall) Generation(generation int64) *ObjectAccessControlsDeleteCall {\n\tc.urlParams_.Set(\"generation\", fmt.Sprint(generation))\n\treturn c\n}\n\n// ProvisionalUserProject sets the optional parameter\n// \"provisionalUserProject\": The project to be billed for this request\n// if the target bucket is requester-pays bucket.\nfunc (c *ObjectAccessControlsDeleteCall) ProvisionalUserProject(provisionalUserProject string) *ObjectAccessControlsDeleteCall {\n\tc.urlParams_.Set(\"provisionalUserProject\", provisionalUserProject)\n\treturn c\n}\n\n// UserProject sets the optional parameter \"userProject\": The project to\n// be billed for this request. Required for Requester Pays buckets.\nfunc (c *ObjectAccessControlsDeleteCall) UserProject(userProject string) *ObjectAccessControlsDeleteCall {\n\tc.urlParams_.Set(\"userProject\", userProject)\n\treturn c\n}\n\n// Fields allows partial responses to be retrieved. See\n// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse\n// for more information.\nfunc (c *ObjectAccessControlsDeleteCall) Fields(s ...googleapi.Field) *ObjectAccessControlsDeleteCall {\n\tc.urlParams_.Set(\"fields\", googleapi.CombineFields(s))\n\treturn c\n}\n\n// Context sets the context to be used in this call's Do method. Any\n// pending HTTP request will be aborted if the provided context is\n// canceled.\nfunc (c *ObjectAccessControlsDeleteCall) Context(ctx context.Context) *ObjectAccessControlsDeleteCall {\n\tc.ctx_ = ctx\n\treturn c\n}\n\n// Header returns an http.Header that can be modified by the caller to\n// add HTTP headers to the request.\nfunc (c *ObjectAccessControlsDeleteCall) Header() http.Header {\n\tif c.header_ == nil {\n\t\tc.header_ = make(http.Header)\n\t}\n\treturn c.header_\n}\n\nfunc (c *ObjectAccessControlsDeleteCall) doRequest(alt string) (*http.Response, error) {\n\treqHeaders := make(http.Header)\n\tfor k, v := range c.header_ {\n\t\treqHeaders[k] = v\n\t}\n\treqHeaders.Set(\"User-Agent\", c.s.userAgent())\n\tvar body io.Reader = nil\n\tc.urlParams_.Set(\"alt\", alt)\n\tc.urlParams_.Set(\"prettyPrint\", \"false\")\n\turls := googleapi.ResolveRelative(c.s.BasePath, \"b/{bucket}/o/{object}/acl/{entity}\")\n\turls += \"?\" + c.urlParams_.Encode()\n\treq, err := http.NewRequest(\"DELETE\", urls, body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.Header = reqHeaders\n\tgoogleapi.Expand(req.URL, map[string]string{\n\t\t\"bucket\": c.bucket,\n\t\t\"object\": c.object,\n\t\t\"entity\": c.entity,\n\t})\n\treturn gensupport.SendRequest(c.ctx_, c.s.client, req)\n}\n\n// Do executes the \"storage.objectAccessControls.delete\" call.\nfunc (c *ObjectAccessControlsDeleteCall) Do(opts ...googleapi.CallOption) error {\n\tgensupport.SetOptions(c.urlParams_, opts...)\n\tres, err := c.doRequest(\"json\")\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer googleapi.CloseBody(res)\n\tif err := googleapi.CheckResponse(res); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n\t// {\n\t//   \"description\": \"Permanently deletes the ACL entry for the specified entity on the specified object.\",\n\t//   \"httpMethod\": \"DELETE\",\n\t//   \"id\": \"storage.objectAccessControls.delete\",\n\t//   \"parameterOrder\": [\n\t//     \"bucket\",\n\t//     \"object\",\n\t//     \"entity\"\n\t//   ],\n\t//   \"parameters\": {\n\t//     \"bucket\": {\n\t//       \"description\": \"Name of a bucket.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"entity\": {\n\t//       \"description\": \"The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"generation\": {\n\t//       \"description\": \"If present, selects a specific revision of this object (as opposed to the latest version, the default).\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"object\": {\n\t//       \"description\": \"Name of the object. For information about how to URL encode object names to be path safe, see Encoding URI Path Parts.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"provisionalUserProject\": {\n\t//       \"description\": \"The project to be billed for this request if the target bucket is requester-pays bucket.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"userProject\": {\n\t//       \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     }\n\t//   },\n\t//   \"path\": \"b/{bucket}/o/{object}/acl/{entity}\",\n\t//   \"scopes\": [\n\t//     \"https://www.googleapis.com/auth/cloud-platform\",\n\t//     \"https://www.googleapis.com/auth/devstorage.full_control\"\n\t//   ]\n\t// }\n\n}\n\n// method id \"storage.objectAccessControls.get\":\n\ntype ObjectAccessControlsGetCall struct {\n\ts            *Service\n\tbucket       string\n\tobject       string\n\tentity       string\n\turlParams_   gensupport.URLParams\n\tifNoneMatch_ string\n\tctx_         context.Context\n\theader_      http.Header\n}\n\n// Get: Returns the ACL entry for the specified entity on the specified\n// object.\nfunc (r *ObjectAccessControlsService) Get(bucket string, object string, entity string) *ObjectAccessControlsGetCall {\n\tc := &ObjectAccessControlsGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}\n\tc.bucket = bucket\n\tc.object = object\n\tc.entity = entity\n\treturn c\n}\n\n// Generation sets the optional parameter \"generation\": If present,\n// selects a specific revision of this object (as opposed to the latest\n// version, the default).\nfunc (c *ObjectAccessControlsGetCall) Generation(generation int64) *ObjectAccessControlsGetCall {\n\tc.urlParams_.Set(\"generation\", fmt.Sprint(generation))\n\treturn c\n}\n\n// ProvisionalUserProject sets the optional parameter\n// \"provisionalUserProject\": The project to be billed for this request\n// if the target bucket is requester-pays bucket.\nfunc (c *ObjectAccessControlsGetCall) ProvisionalUserProject(provisionalUserProject string) *ObjectAccessControlsGetCall {\n\tc.urlParams_.Set(\"provisionalUserProject\", provisionalUserProject)\n\treturn c\n}\n\n// UserProject sets the optional parameter \"userProject\": The project to\n// be billed for this request. Required for Requester Pays buckets.\nfunc (c *ObjectAccessControlsGetCall) UserProject(userProject string) *ObjectAccessControlsGetCall {\n\tc.urlParams_.Set(\"userProject\", userProject)\n\treturn c\n}\n\n// Fields allows partial responses to be retrieved. See\n// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse\n// for more information.\nfunc (c *ObjectAccessControlsGetCall) Fields(s ...googleapi.Field) *ObjectAccessControlsGetCall {\n\tc.urlParams_.Set(\"fields\", googleapi.CombineFields(s))\n\treturn c\n}\n\n// IfNoneMatch sets the optional parameter which makes the operation\n// fail if the object's ETag matches the given value. This is useful for\n// getting updates only after the object has changed since the last\n// request. Use googleapi.IsNotModified to check whether the response\n// error from Do is the result of In-None-Match.\nfunc (c *ObjectAccessControlsGetCall) IfNoneMatch(entityTag string) *ObjectAccessControlsGetCall {\n\tc.ifNoneMatch_ = entityTag\n\treturn c\n}\n\n// Context sets the context to be used in this call's Do method. Any\n// pending HTTP request will be aborted if the provided context is\n// canceled.\nfunc (c *ObjectAccessControlsGetCall) Context(ctx context.Context) *ObjectAccessControlsGetCall {\n\tc.ctx_ = ctx\n\treturn c\n}\n\n// Header returns an http.Header that can be modified by the caller to\n// add HTTP headers to the request.\nfunc (c *ObjectAccessControlsGetCall) Header() http.Header {\n\tif c.header_ == nil {\n\t\tc.header_ = make(http.Header)\n\t}\n\treturn c.header_\n}\n\nfunc (c *ObjectAccessControlsGetCall) doRequest(alt string) (*http.Response, error) {\n\treqHeaders := make(http.Header)\n\tfor k, v := range c.header_ {\n\t\treqHeaders[k] = v\n\t}\n\treqHeaders.Set(\"User-Agent\", c.s.userAgent())\n\tif c.ifNoneMatch_ != \"\" {\n\t\treqHeaders.Set(\"If-None-Match\", c.ifNoneMatch_)\n\t}\n\tvar body io.Reader = nil\n\tc.urlParams_.Set(\"alt\", alt)\n\tc.urlParams_.Set(\"prettyPrint\", \"false\")\n\turls := googleapi.ResolveRelative(c.s.BasePath, \"b/{bucket}/o/{object}/acl/{entity}\")\n\turls += \"?\" + c.urlParams_.Encode()\n\treq, err := http.NewRequest(\"GET\", urls, body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.Header = reqHeaders\n\tgoogleapi.Expand(req.URL, map[string]string{\n\t\t\"bucket\": c.bucket,\n\t\t\"object\": c.object,\n\t\t\"entity\": c.entity,\n\t})\n\treturn gensupport.SendRequest(c.ctx_, c.s.client, req)\n}\n\n// Do executes the \"storage.objectAccessControls.get\" call.\n// Exactly one of *ObjectAccessControl or error will be non-nil. Any\n// non-2xx status code is an error. Response headers are in either\n// *ObjectAccessControl.ServerResponse.Header or (if a response was\n// returned at all) in error.(*googleapi.Error).Header. Use\n// googleapi.IsNotModified to check whether the returned error was\n// because http.StatusNotModified was returned.\nfunc (c *ObjectAccessControlsGetCall) Do(opts ...googleapi.CallOption) (*ObjectAccessControl, error) {\n\tgensupport.SetOptions(c.urlParams_, opts...)\n\tres, err := c.doRequest(\"json\")\n\tif res != nil && res.StatusCode == http.StatusNotModified {\n\t\tif res.Body != nil {\n\t\t\tres.Body.Close()\n\t\t}\n\t\treturn nil, &googleapi.Error{\n\t\t\tCode:   res.StatusCode,\n\t\t\tHeader: res.Header,\n\t\t}\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer googleapi.CloseBody(res)\n\tif err := googleapi.CheckResponse(res); err != nil {\n\t\treturn nil, err\n\t}\n\tret := &ObjectAccessControl{\n\t\tServerResponse: googleapi.ServerResponse{\n\t\t\tHeader:         res.Header,\n\t\t\tHTTPStatusCode: res.StatusCode,\n\t\t},\n\t}\n\ttarget := &ret\n\tif err := gensupport.DecodeResponse(target, res); err != nil {\n\t\treturn nil, err\n\t}\n\treturn ret, nil\n\t// {\n\t//   \"description\": \"Returns the ACL entry for the specified entity on the specified object.\",\n\t//   \"httpMethod\": \"GET\",\n\t//   \"id\": \"storage.objectAccessControls.get\",\n\t//   \"parameterOrder\": [\n\t//     \"bucket\",\n\t//     \"object\",\n\t//     \"entity\"\n\t//   ],\n\t//   \"parameters\": {\n\t//     \"bucket\": {\n\t//       \"description\": \"Name of a bucket.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"entity\": {\n\t//       \"description\": \"The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"generation\": {\n\t//       \"description\": \"If present, selects a specific revision of this object (as opposed to the latest version, the default).\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"object\": {\n\t//       \"description\": \"Name of the object. For information about how to URL encode object names to be path safe, see Encoding URI Path Parts.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"provisionalUserProject\": {\n\t//       \"description\": \"The project to be billed for this request if the target bucket is requester-pays bucket.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"userProject\": {\n\t//       \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     }\n\t//   },\n\t//   \"path\": \"b/{bucket}/o/{object}/acl/{entity}\",\n\t//   \"response\": {\n\t//     \"$ref\": \"ObjectAccessControl\"\n\t//   },\n\t//   \"scopes\": [\n\t//     \"https://www.googleapis.com/auth/cloud-platform\",\n\t//     \"https://www.googleapis.com/auth/devstorage.full_control\"\n\t//   ]\n\t// }\n\n}\n\n// method id \"storage.objectAccessControls.insert\":\n\ntype ObjectAccessControlsInsertCall struct {\n\ts                   *Service\n\tbucket              string\n\tobject              string\n\tobjectaccesscontrol *ObjectAccessControl\n\turlParams_          gensupport.URLParams\n\tctx_                context.Context\n\theader_             http.Header\n}\n\n// Insert: Creates a new ACL entry on the specified object.\nfunc (r *ObjectAccessControlsService) Insert(bucket string, object string, objectaccesscontrol *ObjectAccessControl) *ObjectAccessControlsInsertCall {\n\tc := &ObjectAccessControlsInsertCall{s: r.s, urlParams_: make(gensupport.URLParams)}\n\tc.bucket = bucket\n\tc.object = object\n\tc.objectaccesscontrol = objectaccesscontrol\n\treturn c\n}\n\n// Generation sets the optional parameter \"generation\": If present,\n// selects a specific revision of this object (as opposed to the latest\n// version, the default).\nfunc (c *ObjectAccessControlsInsertCall) Generation(generation int64) *ObjectAccessControlsInsertCall {\n\tc.urlParams_.Set(\"generation\", fmt.Sprint(generation))\n\treturn c\n}\n\n// ProvisionalUserProject sets the optional parameter\n// \"provisionalUserProject\": The project to be billed for this request\n// if the target bucket is requester-pays bucket.\nfunc (c *ObjectAccessControlsInsertCall) ProvisionalUserProject(provisionalUserProject string) *ObjectAccessControlsInsertCall {\n\tc.urlParams_.Set(\"provisionalUserProject\", provisionalUserProject)\n\treturn c\n}\n\n// UserProject sets the optional parameter \"userProject\": The project to\n// be billed for this request. Required for Requester Pays buckets.\nfunc (c *ObjectAccessControlsInsertCall) UserProject(userProject string) *ObjectAccessControlsInsertCall {\n\tc.urlParams_.Set(\"userProject\", userProject)\n\treturn c\n}\n\n// Fields allows partial responses to be retrieved. See\n// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse\n// for more information.\nfunc (c *ObjectAccessControlsInsertCall) Fields(s ...googleapi.Field) *ObjectAccessControlsInsertCall {\n\tc.urlParams_.Set(\"fields\", googleapi.CombineFields(s))\n\treturn c\n}\n\n// Context sets the context to be used in this call's Do method. Any\n// pending HTTP request will be aborted if the provided context is\n// canceled.\nfunc (c *ObjectAccessControlsInsertCall) Context(ctx context.Context) *ObjectAccessControlsInsertCall {\n\tc.ctx_ = ctx\n\treturn c\n}\n\n// Header returns an http.Header that can be modified by the caller to\n// add HTTP headers to the request.\nfunc (c *ObjectAccessControlsInsertCall) Header() http.Header {\n\tif c.header_ == nil {\n\t\tc.header_ = make(http.Header)\n\t}\n\treturn c.header_\n}\n\nfunc (c *ObjectAccessControlsInsertCall) doRequest(alt string) (*http.Response, error) {\n\treqHeaders := make(http.Header)\n\tfor k, v := range c.header_ {\n\t\treqHeaders[k] = v\n\t}\n\treqHeaders.Set(\"User-Agent\", c.s.userAgent())\n\tvar body io.Reader = nil\n\tbody, err := googleapi.WithoutDataWrapper.JSONReader(c.objectaccesscontrol)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treqHeaders.Set(\"Content-Type\", \"application/json\")\n\tc.urlParams_.Set(\"alt\", alt)\n\tc.urlParams_.Set(\"prettyPrint\", \"false\")\n\turls := googleapi.ResolveRelative(c.s.BasePath, \"b/{bucket}/o/{object}/acl\")\n\turls += \"?\" + c.urlParams_.Encode()\n\treq, err := http.NewRequest(\"POST\", urls, body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.Header = reqHeaders\n\tgoogleapi.Expand(req.URL, map[string]string{\n\t\t\"bucket\": c.bucket,\n\t\t\"object\": c.object,\n\t})\n\treturn gensupport.SendRequest(c.ctx_, c.s.client, req)\n}\n\n// Do executes the \"storage.objectAccessControls.insert\" call.\n// Exactly one of *ObjectAccessControl or error will be non-nil. Any\n// non-2xx status code is an error. Response headers are in either\n// *ObjectAccessControl.ServerResponse.Header or (if a response was\n// returned at all) in error.(*googleapi.Error).Header. Use\n// googleapi.IsNotModified to check whether the returned error was\n// because http.StatusNotModified was returned.\nfunc (c *ObjectAccessControlsInsertCall) Do(opts ...googleapi.CallOption) (*ObjectAccessControl, error) {\n\tgensupport.SetOptions(c.urlParams_, opts...)\n\tres, err := c.doRequest(\"json\")\n\tif res != nil && res.StatusCode == http.StatusNotModified {\n\t\tif res.Body != nil {\n\t\t\tres.Body.Close()\n\t\t}\n\t\treturn nil, &googleapi.Error{\n\t\t\tCode:   res.StatusCode,\n\t\t\tHeader: res.Header,\n\t\t}\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer googleapi.CloseBody(res)\n\tif err := googleapi.CheckResponse(res); err != nil {\n\t\treturn nil, err\n\t}\n\tret := &ObjectAccessControl{\n\t\tServerResponse: googleapi.ServerResponse{\n\t\t\tHeader:         res.Header,\n\t\t\tHTTPStatusCode: res.StatusCode,\n\t\t},\n\t}\n\ttarget := &ret\n\tif err := gensupport.DecodeResponse(target, res); err != nil {\n\t\treturn nil, err\n\t}\n\treturn ret, nil\n\t// {\n\t//   \"description\": \"Creates a new ACL entry on the specified object.\",\n\t//   \"httpMethod\": \"POST\",\n\t//   \"id\": \"storage.objectAccessControls.insert\",\n\t//   \"parameterOrder\": [\n\t//     \"bucket\",\n\t//     \"object\"\n\t//   ],\n\t//   \"parameters\": {\n\t//     \"bucket\": {\n\t//       \"description\": \"Name of a bucket.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"generation\": {\n\t//       \"description\": \"If present, selects a specific revision of this object (as opposed to the latest version, the default).\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"object\": {\n\t//       \"description\": \"Name of the object. For information about how to URL encode object names to be path safe, see Encoding URI Path Parts.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"provisionalUserProject\": {\n\t//       \"description\": \"The project to be billed for this request if the target bucket is requester-pays bucket.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"userProject\": {\n\t//       \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     }\n\t//   },\n\t//   \"path\": \"b/{bucket}/o/{object}/acl\",\n\t//   \"request\": {\n\t//     \"$ref\": \"ObjectAccessControl\"\n\t//   },\n\t//   \"response\": {\n\t//     \"$ref\": \"ObjectAccessControl\"\n\t//   },\n\t//   \"scopes\": [\n\t//     \"https://www.googleapis.com/auth/cloud-platform\",\n\t//     \"https://www.googleapis.com/auth/devstorage.full_control\"\n\t//   ]\n\t// }\n\n}\n\n// method id \"storage.objectAccessControls.list\":\n\ntype ObjectAccessControlsListCall struct {\n\ts            *Service\n\tbucket       string\n\tobject       string\n\turlParams_   gensupport.URLParams\n\tifNoneMatch_ string\n\tctx_         context.Context\n\theader_      http.Header\n}\n\n// List: Retrieves ACL entries on the specified object.\nfunc (r *ObjectAccessControlsService) List(bucket string, object string) *ObjectAccessControlsListCall {\n\tc := &ObjectAccessControlsListCall{s: r.s, urlParams_: make(gensupport.URLParams)}\n\tc.bucket = bucket\n\tc.object = object\n\treturn c\n}\n\n// Generation sets the optional parameter \"generation\": If present,\n// selects a specific revision of this object (as opposed to the latest\n// version, the default).\nfunc (c *ObjectAccessControlsListCall) Generation(generation int64) *ObjectAccessControlsListCall {\n\tc.urlParams_.Set(\"generation\", fmt.Sprint(generation))\n\treturn c\n}\n\n// ProvisionalUserProject sets the optional parameter\n// \"provisionalUserProject\": The project to be billed for this request\n// if the target bucket is requester-pays bucket.\nfunc (c *ObjectAccessControlsListCall) ProvisionalUserProject(provisionalUserProject string) *ObjectAccessControlsListCall {\n\tc.urlParams_.Set(\"provisionalUserProject\", provisionalUserProject)\n\treturn c\n}\n\n// UserProject sets the optional parameter \"userProject\": The project to\n// be billed for this request. Required for Requester Pays buckets.\nfunc (c *ObjectAccessControlsListCall) UserProject(userProject string) *ObjectAccessControlsListCall {\n\tc.urlParams_.Set(\"userProject\", userProject)\n\treturn c\n}\n\n// Fields allows partial responses to be retrieved. See\n// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse\n// for more information.\nfunc (c *ObjectAccessControlsListCall) Fields(s ...googleapi.Field) *ObjectAccessControlsListCall {\n\tc.urlParams_.Set(\"fields\", googleapi.CombineFields(s))\n\treturn c\n}\n\n// IfNoneMatch sets the optional parameter which makes the operation\n// fail if the object's ETag matches the given value. This is useful for\n// getting updates only after the object has changed since the last\n// request. Use googleapi.IsNotModified to check whether the response\n// error from Do is the result of In-None-Match.\nfunc (c *ObjectAccessControlsListCall) IfNoneMatch(entityTag string) *ObjectAccessControlsListCall {\n\tc.ifNoneMatch_ = entityTag\n\treturn c\n}\n\n// Context sets the context to be used in this call's Do method. Any\n// pending HTTP request will be aborted if the provided context is\n// canceled.\nfunc (c *ObjectAccessControlsListCall) Context(ctx context.Context) *ObjectAccessControlsListCall {\n\tc.ctx_ = ctx\n\treturn c\n}\n\n// Header returns an http.Header that can be modified by the caller to\n// add HTTP headers to the request.\nfunc (c *ObjectAccessControlsListCall) Header() http.Header {\n\tif c.header_ == nil {\n\t\tc.header_ = make(http.Header)\n\t}\n\treturn c.header_\n}\n\nfunc (c *ObjectAccessControlsListCall) doRequest(alt string) (*http.Response, error) {\n\treqHeaders := make(http.Header)\n\tfor k, v := range c.header_ {\n\t\treqHeaders[k] = v\n\t}\n\treqHeaders.Set(\"User-Agent\", c.s.userAgent())\n\tif c.ifNoneMatch_ != \"\" {\n\t\treqHeaders.Set(\"If-None-Match\", c.ifNoneMatch_)\n\t}\n\tvar body io.Reader = nil\n\tc.urlParams_.Set(\"alt\", alt)\n\tc.urlParams_.Set(\"prettyPrint\", \"false\")\n\turls := googleapi.ResolveRelative(c.s.BasePath, \"b/{bucket}/o/{object}/acl\")\n\turls += \"?\" + c.urlParams_.Encode()\n\treq, err := http.NewRequest(\"GET\", urls, body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.Header = reqHeaders\n\tgoogleapi.Expand(req.URL, map[string]string{\n\t\t\"bucket\": c.bucket,\n\t\t\"object\": c.object,\n\t})\n\treturn gensupport.SendRequest(c.ctx_, c.s.client, req)\n}\n\n// Do executes the \"storage.objectAccessControls.list\" call.\n// Exactly one of *ObjectAccessControls or error will be non-nil. Any\n// non-2xx status code is an error. Response headers are in either\n// *ObjectAccessControls.ServerResponse.Header or (if a response was\n// returned at all) in error.(*googleapi.Error).Header. Use\n// googleapi.IsNotModified to check whether the returned error was\n// because http.StatusNotModified was returned.\nfunc (c *ObjectAccessControlsListCall) Do(opts ...googleapi.CallOption) (*ObjectAccessControls, error) {\n\tgensupport.SetOptions(c.urlParams_, opts...)\n\tres, err := c.doRequest(\"json\")\n\tif res != nil && res.StatusCode == http.StatusNotModified {\n\t\tif res.Body != nil {\n\t\t\tres.Body.Close()\n\t\t}\n\t\treturn nil, &googleapi.Error{\n\t\t\tCode:   res.StatusCode,\n\t\t\tHeader: res.Header,\n\t\t}\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer googleapi.CloseBody(res)\n\tif err := googleapi.CheckResponse(res); err != nil {\n\t\treturn nil, err\n\t}\n\tret := &ObjectAccessControls{\n\t\tServerResponse: googleapi.ServerResponse{\n\t\t\tHeader:         res.Header,\n\t\t\tHTTPStatusCode: res.StatusCode,\n\t\t},\n\t}\n\ttarget := &ret\n\tif err := gensupport.DecodeResponse(target, res); err != nil {\n\t\treturn nil, err\n\t}\n\treturn ret, nil\n\t// {\n\t//   \"description\": \"Retrieves ACL entries on the specified object.\",\n\t//   \"httpMethod\": \"GET\",\n\t//   \"id\": \"storage.objectAccessControls.list\",\n\t//   \"parameterOrder\": [\n\t//     \"bucket\",\n\t//     \"object\"\n\t//   ],\n\t//   \"parameters\": {\n\t//     \"bucket\": {\n\t//       \"description\": \"Name of a bucket.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"generation\": {\n\t//       \"description\": \"If present, selects a specific revision of this object (as opposed to the latest version, the default).\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"object\": {\n\t//       \"description\": \"Name of the object. For information about how to URL encode object names to be path safe, see Encoding URI Path Parts.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"provisionalUserProject\": {\n\t//       \"description\": \"The project to be billed for this request if the target bucket is requester-pays bucket.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"userProject\": {\n\t//       \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     }\n\t//   },\n\t//   \"path\": \"b/{bucket}/o/{object}/acl\",\n\t//   \"response\": {\n\t//     \"$ref\": \"ObjectAccessControls\"\n\t//   },\n\t//   \"scopes\": [\n\t//     \"https://www.googleapis.com/auth/cloud-platform\",\n\t//     \"https://www.googleapis.com/auth/devstorage.full_control\"\n\t//   ]\n\t// }\n\n}\n\n// method id \"storage.objectAccessControls.patch\":\n\ntype ObjectAccessControlsPatchCall struct {\n\ts                   *Service\n\tbucket              string\n\tobject              string\n\tentity              string\n\tobjectaccesscontrol *ObjectAccessControl\n\turlParams_          gensupport.URLParams\n\tctx_                context.Context\n\theader_             http.Header\n}\n\n// Patch: Patches an ACL entry on the specified object.\nfunc (r *ObjectAccessControlsService) Patch(bucket string, object string, entity string, objectaccesscontrol *ObjectAccessControl) *ObjectAccessControlsPatchCall {\n\tc := &ObjectAccessControlsPatchCall{s: r.s, urlParams_: make(gensupport.URLParams)}\n\tc.bucket = bucket\n\tc.object = object\n\tc.entity = entity\n\tc.objectaccesscontrol = objectaccesscontrol\n\treturn c\n}\n\n// Generation sets the optional parameter \"generation\": If present,\n// selects a specific revision of this object (as opposed to the latest\n// version, the default).\nfunc (c *ObjectAccessControlsPatchCall) Generation(generation int64) *ObjectAccessControlsPatchCall {\n\tc.urlParams_.Set(\"generation\", fmt.Sprint(generation))\n\treturn c\n}\n\n// ProvisionalUserProject sets the optional parameter\n// \"provisionalUserProject\": The project to be billed for this request\n// if the target bucket is requester-pays bucket.\nfunc (c *ObjectAccessControlsPatchCall) ProvisionalUserProject(provisionalUserProject string) *ObjectAccessControlsPatchCall {\n\tc.urlParams_.Set(\"provisionalUserProject\", provisionalUserProject)\n\treturn c\n}\n\n// UserProject sets the optional parameter \"userProject\": The project to\n// be billed for this request. Required for Requester Pays buckets.\nfunc (c *ObjectAccessControlsPatchCall) UserProject(userProject string) *ObjectAccessControlsPatchCall {\n\tc.urlParams_.Set(\"userProject\", userProject)\n\treturn c\n}\n\n// Fields allows partial responses to be retrieved. See\n// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse\n// for more information.\nfunc (c *ObjectAccessControlsPatchCall) Fields(s ...googleapi.Field) *ObjectAccessControlsPatchCall {\n\tc.urlParams_.Set(\"fields\", googleapi.CombineFields(s))\n\treturn c\n}\n\n// Context sets the context to be used in this call's Do method. Any\n// pending HTTP request will be aborted if the provided context is\n// canceled.\nfunc (c *ObjectAccessControlsPatchCall) Context(ctx context.Context) *ObjectAccessControlsPatchCall {\n\tc.ctx_ = ctx\n\treturn c\n}\n\n// Header returns an http.Header that can be modified by the caller to\n// add HTTP headers to the request.\nfunc (c *ObjectAccessControlsPatchCall) Header() http.Header {\n\tif c.header_ == nil {\n\t\tc.header_ = make(http.Header)\n\t}\n\treturn c.header_\n}\n\nfunc (c *ObjectAccessControlsPatchCall) doRequest(alt string) (*http.Response, error) {\n\treqHeaders := make(http.Header)\n\tfor k, v := range c.header_ {\n\t\treqHeaders[k] = v\n\t}\n\treqHeaders.Set(\"User-Agent\", c.s.userAgent())\n\tvar body io.Reader = nil\n\tbody, err := googleapi.WithoutDataWrapper.JSONReader(c.objectaccesscontrol)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treqHeaders.Set(\"Content-Type\", \"application/json\")\n\tc.urlParams_.Set(\"alt\", alt)\n\tc.urlParams_.Set(\"prettyPrint\", \"false\")\n\turls := googleapi.ResolveRelative(c.s.BasePath, \"b/{bucket}/o/{object}/acl/{entity}\")\n\turls += \"?\" + c.urlParams_.Encode()\n\treq, err := http.NewRequest(\"PATCH\", urls, body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.Header = reqHeaders\n\tgoogleapi.Expand(req.URL, map[string]string{\n\t\t\"bucket\": c.bucket,\n\t\t\"object\": c.object,\n\t\t\"entity\": c.entity,\n\t})\n\treturn gensupport.SendRequest(c.ctx_, c.s.client, req)\n}\n\n// Do executes the \"storage.objectAccessControls.patch\" call.\n// Exactly one of *ObjectAccessControl or error will be non-nil. Any\n// non-2xx status code is an error. Response headers are in either\n// *ObjectAccessControl.ServerResponse.Header or (if a response was\n// returned at all) in error.(*googleapi.Error).Header. Use\n// googleapi.IsNotModified to check whether the returned error was\n// because http.StatusNotModified was returned.\nfunc (c *ObjectAccessControlsPatchCall) Do(opts ...googleapi.CallOption) (*ObjectAccessControl, error) {\n\tgensupport.SetOptions(c.urlParams_, opts...)\n\tres, err := c.doRequest(\"json\")\n\tif res != nil && res.StatusCode == http.StatusNotModified {\n\t\tif res.Body != nil {\n\t\t\tres.Body.Close()\n\t\t}\n\t\treturn nil, &googleapi.Error{\n\t\t\tCode:   res.StatusCode,\n\t\t\tHeader: res.Header,\n\t\t}\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer googleapi.CloseBody(res)\n\tif err := googleapi.CheckResponse(res); err != nil {\n\t\treturn nil, err\n\t}\n\tret := &ObjectAccessControl{\n\t\tServerResponse: googleapi.ServerResponse{\n\t\t\tHeader:         res.Header,\n\t\t\tHTTPStatusCode: res.StatusCode,\n\t\t},\n\t}\n\ttarget := &ret\n\tif err := gensupport.DecodeResponse(target, res); err != nil {\n\t\treturn nil, err\n\t}\n\treturn ret, nil\n\t// {\n\t//   \"description\": \"Patches an ACL entry on the specified object.\",\n\t//   \"httpMethod\": \"PATCH\",\n\t//   \"id\": \"storage.objectAccessControls.patch\",\n\t//   \"parameterOrder\": [\n\t//     \"bucket\",\n\t//     \"object\",\n\t//     \"entity\"\n\t//   ],\n\t//   \"parameters\": {\n\t//     \"bucket\": {\n\t//       \"description\": \"Name of a bucket.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"entity\": {\n\t//       \"description\": \"The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"generation\": {\n\t//       \"description\": \"If present, selects a specific revision of this object (as opposed to the latest version, the default).\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"object\": {\n\t//       \"description\": \"Name of the object. For information about how to URL encode object names to be path safe, see Encoding URI Path Parts.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"provisionalUserProject\": {\n\t//       \"description\": \"The project to be billed for this request if the target bucket is requester-pays bucket.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"userProject\": {\n\t//       \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     }\n\t//   },\n\t//   \"path\": \"b/{bucket}/o/{object}/acl/{entity}\",\n\t//   \"request\": {\n\t//     \"$ref\": \"ObjectAccessControl\"\n\t//   },\n\t//   \"response\": {\n\t//     \"$ref\": \"ObjectAccessControl\"\n\t//   },\n\t//   \"scopes\": [\n\t//     \"https://www.googleapis.com/auth/cloud-platform\",\n\t//     \"https://www.googleapis.com/auth/devstorage.full_control\"\n\t//   ]\n\t// }\n\n}\n\n// method id \"storage.objectAccessControls.update\":\n\ntype ObjectAccessControlsUpdateCall struct {\n\ts                   *Service\n\tbucket              string\n\tobject              string\n\tentity              string\n\tobjectaccesscontrol *ObjectAccessControl\n\turlParams_          gensupport.URLParams\n\tctx_                context.Context\n\theader_             http.Header\n}\n\n// Update: Updates an ACL entry on the specified object.\nfunc (r *ObjectAccessControlsService) Update(bucket string, object string, entity string, objectaccesscontrol *ObjectAccessControl) *ObjectAccessControlsUpdateCall {\n\tc := &ObjectAccessControlsUpdateCall{s: r.s, urlParams_: make(gensupport.URLParams)}\n\tc.bucket = bucket\n\tc.object = object\n\tc.entity = entity\n\tc.objectaccesscontrol = objectaccesscontrol\n\treturn c\n}\n\n// Generation sets the optional parameter \"generation\": If present,\n// selects a specific revision of this object (as opposed to the latest\n// version, the default).\nfunc (c *ObjectAccessControlsUpdateCall) Generation(generation int64) *ObjectAccessControlsUpdateCall {\n\tc.urlParams_.Set(\"generation\", fmt.Sprint(generation))\n\treturn c\n}\n\n// ProvisionalUserProject sets the optional parameter\n// \"provisionalUserProject\": The project to be billed for this request\n// if the target bucket is requester-pays bucket.\nfunc (c *ObjectAccessControlsUpdateCall) ProvisionalUserProject(provisionalUserProject string) *ObjectAccessControlsUpdateCall {\n\tc.urlParams_.Set(\"provisionalUserProject\", provisionalUserProject)\n\treturn c\n}\n\n// UserProject sets the optional parameter \"userProject\": The project to\n// be billed for this request. Required for Requester Pays buckets.\nfunc (c *ObjectAccessControlsUpdateCall) UserProject(userProject string) *ObjectAccessControlsUpdateCall {\n\tc.urlParams_.Set(\"userProject\", userProject)\n\treturn c\n}\n\n// Fields allows partial responses to be retrieved. See\n// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse\n// for more information.\nfunc (c *ObjectAccessControlsUpdateCall) Fields(s ...googleapi.Field) *ObjectAccessControlsUpdateCall {\n\tc.urlParams_.Set(\"fields\", googleapi.CombineFields(s))\n\treturn c\n}\n\n// Context sets the context to be used in this call's Do method. Any\n// pending HTTP request will be aborted if the provided context is\n// canceled.\nfunc (c *ObjectAccessControlsUpdateCall) Context(ctx context.Context) *ObjectAccessControlsUpdateCall {\n\tc.ctx_ = ctx\n\treturn c\n}\n\n// Header returns an http.Header that can be modified by the caller to\n// add HTTP headers to the request.\nfunc (c *ObjectAccessControlsUpdateCall) Header() http.Header {\n\tif c.header_ == nil {\n\t\tc.header_ = make(http.Header)\n\t}\n\treturn c.header_\n}\n\nfunc (c *ObjectAccessControlsUpdateCall) doRequest(alt string) (*http.Response, error) {\n\treqHeaders := make(http.Header)\n\tfor k, v := range c.header_ {\n\t\treqHeaders[k] = v\n\t}\n\treqHeaders.Set(\"User-Agent\", c.s.userAgent())\n\tvar body io.Reader = nil\n\tbody, err := googleapi.WithoutDataWrapper.JSONReader(c.objectaccesscontrol)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treqHeaders.Set(\"Content-Type\", \"application/json\")\n\tc.urlParams_.Set(\"alt\", alt)\n\tc.urlParams_.Set(\"prettyPrint\", \"false\")\n\turls := googleapi.ResolveRelative(c.s.BasePath, \"b/{bucket}/o/{object}/acl/{entity}\")\n\turls += \"?\" + c.urlParams_.Encode()\n\treq, err := http.NewRequest(\"PUT\", urls, body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.Header = reqHeaders\n\tgoogleapi.Expand(req.URL, map[string]string{\n\t\t\"bucket\": c.bucket,\n\t\t\"object\": c.object,\n\t\t\"entity\": c.entity,\n\t})\n\treturn gensupport.SendRequest(c.ctx_, c.s.client, req)\n}\n\n// Do executes the \"storage.objectAccessControls.update\" call.\n// Exactly one of *ObjectAccessControl or error will be non-nil. Any\n// non-2xx status code is an error. Response headers are in either\n// *ObjectAccessControl.ServerResponse.Header or (if a response was\n// returned at all) in error.(*googleapi.Error).Header. Use\n// googleapi.IsNotModified to check whether the returned error was\n// because http.StatusNotModified was returned.\nfunc (c *ObjectAccessControlsUpdateCall) Do(opts ...googleapi.CallOption) (*ObjectAccessControl, error) {\n\tgensupport.SetOptions(c.urlParams_, opts...)\n\tres, err := c.doRequest(\"json\")\n\tif res != nil && res.StatusCode == http.StatusNotModified {\n\t\tif res.Body != nil {\n\t\t\tres.Body.Close()\n\t\t}\n\t\treturn nil, &googleapi.Error{\n\t\t\tCode:   res.StatusCode,\n\t\t\tHeader: res.Header,\n\t\t}\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer googleapi.CloseBody(res)\n\tif err := googleapi.CheckResponse(res); err != nil {\n\t\treturn nil, err\n\t}\n\tret := &ObjectAccessControl{\n\t\tServerResponse: googleapi.ServerResponse{\n\t\t\tHeader:         res.Header,\n\t\t\tHTTPStatusCode: res.StatusCode,\n\t\t},\n\t}\n\ttarget := &ret\n\tif err := gensupport.DecodeResponse(target, res); err != nil {\n\t\treturn nil, err\n\t}\n\treturn ret, nil\n\t// {\n\t//   \"description\": \"Updates an ACL entry on the specified object.\",\n\t//   \"httpMethod\": \"PUT\",\n\t//   \"id\": \"storage.objectAccessControls.update\",\n\t//   \"parameterOrder\": [\n\t//     \"bucket\",\n\t//     \"object\",\n\t//     \"entity\"\n\t//   ],\n\t//   \"parameters\": {\n\t//     \"bucket\": {\n\t//       \"description\": \"Name of a bucket.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"entity\": {\n\t//       \"description\": \"The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"generation\": {\n\t//       \"description\": \"If present, selects a specific revision of this object (as opposed to the latest version, the default).\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"object\": {\n\t//       \"description\": \"Name of the object. For information about how to URL encode object names to be path safe, see Encoding URI Path Parts.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"provisionalUserProject\": {\n\t//       \"description\": \"The project to be billed for this request if the target bucket is requester-pays bucket.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"userProject\": {\n\t//       \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     }\n\t//   },\n\t//   \"path\": \"b/{bucket}/o/{object}/acl/{entity}\",\n\t//   \"request\": {\n\t//     \"$ref\": \"ObjectAccessControl\"\n\t//   },\n\t//   \"response\": {\n\t//     \"$ref\": \"ObjectAccessControl\"\n\t//   },\n\t//   \"scopes\": [\n\t//     \"https://www.googleapis.com/auth/cloud-platform\",\n\t//     \"https://www.googleapis.com/auth/devstorage.full_control\"\n\t//   ]\n\t// }\n\n}\n\n// method id \"storage.objects.compose\":\n\ntype ObjectsComposeCall struct {\n\ts                 *Service\n\tdestinationBucket string\n\tdestinationObject string\n\tcomposerequest    *ComposeRequest\n\turlParams_        gensupport.URLParams\n\tctx_              context.Context\n\theader_           http.Header\n}\n\n// Compose: Concatenates a list of existing objects into a new object in\n// the same bucket.\nfunc (r *ObjectsService) Compose(destinationBucket string, destinationObject string, composerequest *ComposeRequest) *ObjectsComposeCall {\n\tc := &ObjectsComposeCall{s: r.s, urlParams_: make(gensupport.URLParams)}\n\tc.destinationBucket = destinationBucket\n\tc.destinationObject = destinationObject\n\tc.composerequest = composerequest\n\treturn c\n}\n\n// DestinationPredefinedAcl sets the optional parameter\n// \"destinationPredefinedAcl\": Apply a predefined set of access controls\n// to the destination object.\n//\n// Possible values:\n//   \"authenticatedRead\" - Object owner gets OWNER access, and\n// allAuthenticatedUsers get READER access.\n//   \"bucketOwnerFullControl\" - Object owner gets OWNER access, and\n// project team owners get OWNER access.\n//   \"bucketOwnerRead\" - Object owner gets OWNER access, and project\n// team owners get READER access.\n//   \"private\" - Object owner gets OWNER access.\n//   \"projectPrivate\" - Object owner gets OWNER access, and project team\n// members get access according to their roles.\n//   \"publicRead\" - Object owner gets OWNER access, and allUsers get\n// READER access.\nfunc (c *ObjectsComposeCall) DestinationPredefinedAcl(destinationPredefinedAcl string) *ObjectsComposeCall {\n\tc.urlParams_.Set(\"destinationPredefinedAcl\", destinationPredefinedAcl)\n\treturn c\n}\n\n// IfGenerationMatch sets the optional parameter \"ifGenerationMatch\":\n// Makes the operation conditional on whether the object's current\n// generation matches the given value. Setting to 0 makes the operation\n// succeed only if there are no live versions of the object.\nfunc (c *ObjectsComposeCall) IfGenerationMatch(ifGenerationMatch int64) *ObjectsComposeCall {\n\tc.urlParams_.Set(\"ifGenerationMatch\", fmt.Sprint(ifGenerationMatch))\n\treturn c\n}\n\n// IfMetagenerationMatch sets the optional parameter\n// \"ifMetagenerationMatch\": Makes the operation conditional on whether\n// the object's current metageneration matches the given value.\nfunc (c *ObjectsComposeCall) IfMetagenerationMatch(ifMetagenerationMatch int64) *ObjectsComposeCall {\n\tc.urlParams_.Set(\"ifMetagenerationMatch\", fmt.Sprint(ifMetagenerationMatch))\n\treturn c\n}\n\n// KmsKeyName sets the optional parameter \"kmsKeyName\": Resource name of\n// the Cloud KMS key, of the form\n// projects/my-project/locations/global/keyRings/my-kr/cryptoKeys/my-key,\n//  that will be used to encrypt the object. Overrides the object\n// metadata's kms_key_name value, if any.\nfunc (c *ObjectsComposeCall) KmsKeyName(kmsKeyName string) *ObjectsComposeCall {\n\tc.urlParams_.Set(\"kmsKeyName\", kmsKeyName)\n\treturn c\n}\n\n// ProvisionalUserProject sets the optional parameter\n// \"provisionalUserProject\": The project to be billed for this request\n// if the target bucket is requester-pays bucket.\nfunc (c *ObjectsComposeCall) ProvisionalUserProject(provisionalUserProject string) *ObjectsComposeCall {\n\tc.urlParams_.Set(\"provisionalUserProject\", provisionalUserProject)\n\treturn c\n}\n\n// UserProject sets the optional parameter \"userProject\": The project to\n// be billed for this request. Required for Requester Pays buckets.\nfunc (c *ObjectsComposeCall) UserProject(userProject string) *ObjectsComposeCall {\n\tc.urlParams_.Set(\"userProject\", userProject)\n\treturn c\n}\n\n// Fields allows partial responses to be retrieved. See\n// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse\n// for more information.\nfunc (c *ObjectsComposeCall) Fields(s ...googleapi.Field) *ObjectsComposeCall {\n\tc.urlParams_.Set(\"fields\", googleapi.CombineFields(s))\n\treturn c\n}\n\n// Context sets the context to be used in this call's Do method. Any\n// pending HTTP request will be aborted if the provided context is\n// canceled.\nfunc (c *ObjectsComposeCall) Context(ctx context.Context) *ObjectsComposeCall {\n\tc.ctx_ = ctx\n\treturn c\n}\n\n// Header returns an http.Header that can be modified by the caller to\n// add HTTP headers to the request.\nfunc (c *ObjectsComposeCall) Header() http.Header {\n\tif c.header_ == nil {\n\t\tc.header_ = make(http.Header)\n\t}\n\treturn c.header_\n}\n\nfunc (c *ObjectsComposeCall) doRequest(alt string) (*http.Response, error) {\n\treqHeaders := make(http.Header)\n\tfor k, v := range c.header_ {\n\t\treqHeaders[k] = v\n\t}\n\treqHeaders.Set(\"User-Agent\", c.s.userAgent())\n\tvar body io.Reader = nil\n\tbody, err := googleapi.WithoutDataWrapper.JSONReader(c.composerequest)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treqHeaders.Set(\"Content-Type\", \"application/json\")\n\tc.urlParams_.Set(\"alt\", alt)\n\tc.urlParams_.Set(\"prettyPrint\", \"false\")\n\turls := googleapi.ResolveRelative(c.s.BasePath, \"b/{destinationBucket}/o/{destinationObject}/compose\")\n\turls += \"?\" + c.urlParams_.Encode()\n\treq, err := http.NewRequest(\"POST\", urls, body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.Header = reqHeaders\n\tgoogleapi.Expand(req.URL, map[string]string{\n\t\t\"destinationBucket\": c.destinationBucket,\n\t\t\"destinationObject\": c.destinationObject,\n\t})\n\treturn gensupport.SendRequest(c.ctx_, c.s.client, req)\n}\n\n// Do executes the \"storage.objects.compose\" call.\n// Exactly one of *Object or error will be non-nil. Any non-2xx status\n// code is an error. Response headers are in either\n// *Object.ServerResponse.Header or (if a response was returned at all)\n// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to\n// check whether the returned error was because http.StatusNotModified\n// was returned.\nfunc (c *ObjectsComposeCall) Do(opts ...googleapi.CallOption) (*Object, error) {\n\tgensupport.SetOptions(c.urlParams_, opts...)\n\tres, err := c.doRequest(\"json\")\n\tif res != nil && res.StatusCode == http.StatusNotModified {\n\t\tif res.Body != nil {\n\t\t\tres.Body.Close()\n\t\t}\n\t\treturn nil, &googleapi.Error{\n\t\t\tCode:   res.StatusCode,\n\t\t\tHeader: res.Header,\n\t\t}\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer googleapi.CloseBody(res)\n\tif err := googleapi.CheckResponse(res); err != nil {\n\t\treturn nil, err\n\t}\n\tret := &Object{\n\t\tServerResponse: googleapi.ServerResponse{\n\t\t\tHeader:         res.Header,\n\t\t\tHTTPStatusCode: res.StatusCode,\n\t\t},\n\t}\n\ttarget := &ret\n\tif err := gensupport.DecodeResponse(target, res); err != nil {\n\t\treturn nil, err\n\t}\n\treturn ret, nil\n\t// {\n\t//   \"description\": \"Concatenates a list of existing objects into a new object in the same bucket.\",\n\t//   \"httpMethod\": \"POST\",\n\t//   \"id\": \"storage.objects.compose\",\n\t//   \"parameterOrder\": [\n\t//     \"destinationBucket\",\n\t//     \"destinationObject\"\n\t//   ],\n\t//   \"parameters\": {\n\t//     \"destinationBucket\": {\n\t//       \"description\": \"Name of the bucket containing the source objects. The destination object is stored in this bucket.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"destinationObject\": {\n\t//       \"description\": \"Name of the new object. For information about how to URL encode object names to be path safe, see Encoding URI Path Parts.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"destinationPredefinedAcl\": {\n\t//       \"description\": \"Apply a predefined set of access controls to the destination object.\",\n\t//       \"enum\": [\n\t//         \"authenticatedRead\",\n\t//         \"bucketOwnerFullControl\",\n\t//         \"bucketOwnerRead\",\n\t//         \"private\",\n\t//         \"projectPrivate\",\n\t//         \"publicRead\"\n\t//       ],\n\t//       \"enumDescriptions\": [\n\t//         \"Object owner gets OWNER access, and allAuthenticatedUsers get READER access.\",\n\t//         \"Object owner gets OWNER access, and project team owners get OWNER access.\",\n\t//         \"Object owner gets OWNER access, and project team owners get READER access.\",\n\t//         \"Object owner gets OWNER access.\",\n\t//         \"Object owner gets OWNER access, and project team members get access according to their roles.\",\n\t//         \"Object owner gets OWNER access, and allUsers get READER access.\"\n\t//       ],\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"ifGenerationMatch\": {\n\t//       \"description\": \"Makes the operation conditional on whether the object's current generation matches the given value. Setting to 0 makes the operation succeed only if there are no live versions of the object.\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"ifMetagenerationMatch\": {\n\t//       \"description\": \"Makes the operation conditional on whether the object's current metageneration matches the given value.\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"kmsKeyName\": {\n\t//       \"description\": \"Resource name of the Cloud KMS key, of the form projects/my-project/locations/global/keyRings/my-kr/cryptoKeys/my-key, that will be used to encrypt the object. Overrides the object metadata's kms_key_name value, if any.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"provisionalUserProject\": {\n\t//       \"description\": \"The project to be billed for this request if the target bucket is requester-pays bucket.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"userProject\": {\n\t//       \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     }\n\t//   },\n\t//   \"path\": \"b/{destinationBucket}/o/{destinationObject}/compose\",\n\t//   \"request\": {\n\t//     \"$ref\": \"ComposeRequest\"\n\t//   },\n\t//   \"response\": {\n\t//     \"$ref\": \"Object\"\n\t//   },\n\t//   \"scopes\": [\n\t//     \"https://www.googleapis.com/auth/cloud-platform\",\n\t//     \"https://www.googleapis.com/auth/devstorage.full_control\",\n\t//     \"https://www.googleapis.com/auth/devstorage.read_write\"\n\t//   ]\n\t// }\n\n}\n\n// method id \"storage.objects.copy\":\n\ntype ObjectsCopyCall struct {\n\ts                 *Service\n\tsourceBucket      string\n\tsourceObject      string\n\tdestinationBucket string\n\tdestinationObject string\n\tobject            *Object\n\turlParams_        gensupport.URLParams\n\tctx_              context.Context\n\theader_           http.Header\n}\n\n// Copy: Copies a source object to a destination object. Optionally\n// overrides metadata.\nfunc (r *ObjectsService) Copy(sourceBucket string, sourceObject string, destinationBucket string, destinationObject string, object *Object) *ObjectsCopyCall {\n\tc := &ObjectsCopyCall{s: r.s, urlParams_: make(gensupport.URLParams)}\n\tc.sourceBucket = sourceBucket\n\tc.sourceObject = sourceObject\n\tc.destinationBucket = destinationBucket\n\tc.destinationObject = destinationObject\n\tc.object = object\n\treturn c\n}\n\n// DestinationPredefinedAcl sets the optional parameter\n// \"destinationPredefinedAcl\": Apply a predefined set of access controls\n// to the destination object.\n//\n// Possible values:\n//   \"authenticatedRead\" - Object owner gets OWNER access, and\n// allAuthenticatedUsers get READER access.\n//   \"bucketOwnerFullControl\" - Object owner gets OWNER access, and\n// project team owners get OWNER access.\n//   \"bucketOwnerRead\" - Object owner gets OWNER access, and project\n// team owners get READER access.\n//   \"private\" - Object owner gets OWNER access.\n//   \"projectPrivate\" - Object owner gets OWNER access, and project team\n// members get access according to their roles.\n//   \"publicRead\" - Object owner gets OWNER access, and allUsers get\n// READER access.\nfunc (c *ObjectsCopyCall) DestinationPredefinedAcl(destinationPredefinedAcl string) *ObjectsCopyCall {\n\tc.urlParams_.Set(\"destinationPredefinedAcl\", destinationPredefinedAcl)\n\treturn c\n}\n\n// IfGenerationMatch sets the optional parameter \"ifGenerationMatch\":\n// Makes the operation conditional on whether the destination object's\n// current generation matches the given value. Setting to 0 makes the\n// operation succeed only if there are no live versions of the object.\nfunc (c *ObjectsCopyCall) IfGenerationMatch(ifGenerationMatch int64) *ObjectsCopyCall {\n\tc.urlParams_.Set(\"ifGenerationMatch\", fmt.Sprint(ifGenerationMatch))\n\treturn c\n}\n\n// IfGenerationNotMatch sets the optional parameter\n// \"ifGenerationNotMatch\": Makes the operation conditional on whether\n// the destination object's current generation does not match the given\n// value. If no live object exists, the precondition fails. Setting to 0\n// makes the operation succeed only if there is a live version of the\n// object.\nfunc (c *ObjectsCopyCall) IfGenerationNotMatch(ifGenerationNotMatch int64) *ObjectsCopyCall {\n\tc.urlParams_.Set(\"ifGenerationNotMatch\", fmt.Sprint(ifGenerationNotMatch))\n\treturn c\n}\n\n// IfMetagenerationMatch sets the optional parameter\n// \"ifMetagenerationMatch\": Makes the operation conditional on whether\n// the destination object's current metageneration matches the given\n// value.\nfunc (c *ObjectsCopyCall) IfMetagenerationMatch(ifMetagenerationMatch int64) *ObjectsCopyCall {\n\tc.urlParams_.Set(\"ifMetagenerationMatch\", fmt.Sprint(ifMetagenerationMatch))\n\treturn c\n}\n\n// IfMetagenerationNotMatch sets the optional parameter\n// \"ifMetagenerationNotMatch\": Makes the operation conditional on\n// whether the destination object's current metageneration does not\n// match the given value.\nfunc (c *ObjectsCopyCall) IfMetagenerationNotMatch(ifMetagenerationNotMatch int64) *ObjectsCopyCall {\n\tc.urlParams_.Set(\"ifMetagenerationNotMatch\", fmt.Sprint(ifMetagenerationNotMatch))\n\treturn c\n}\n\n// IfSourceGenerationMatch sets the optional parameter\n// \"ifSourceGenerationMatch\": Makes the operation conditional on whether\n// the source object's current generation matches the given value.\nfunc (c *ObjectsCopyCall) IfSourceGenerationMatch(ifSourceGenerationMatch int64) *ObjectsCopyCall {\n\tc.urlParams_.Set(\"ifSourceGenerationMatch\", fmt.Sprint(ifSourceGenerationMatch))\n\treturn c\n}\n\n// IfSourceGenerationNotMatch sets the optional parameter\n// \"ifSourceGenerationNotMatch\": Makes the operation conditional on\n// whether the source object's current generation does not match the\n// given value.\nfunc (c *ObjectsCopyCall) IfSourceGenerationNotMatch(ifSourceGenerationNotMatch int64) *ObjectsCopyCall {\n\tc.urlParams_.Set(\"ifSourceGenerationNotMatch\", fmt.Sprint(ifSourceGenerationNotMatch))\n\treturn c\n}\n\n// IfSourceMetagenerationMatch sets the optional parameter\n// \"ifSourceMetagenerationMatch\": Makes the operation conditional on\n// whether the source object's current metageneration matches the given\n// value.\nfunc (c *ObjectsCopyCall) IfSourceMetagenerationMatch(ifSourceMetagenerationMatch int64) *ObjectsCopyCall {\n\tc.urlParams_.Set(\"ifSourceMetagenerationMatch\", fmt.Sprint(ifSourceMetagenerationMatch))\n\treturn c\n}\n\n// IfSourceMetagenerationNotMatch sets the optional parameter\n// \"ifSourceMetagenerationNotMatch\": Makes the operation conditional on\n// whether the source object's current metageneration does not match the\n// given value.\nfunc (c *ObjectsCopyCall) IfSourceMetagenerationNotMatch(ifSourceMetagenerationNotMatch int64) *ObjectsCopyCall {\n\tc.urlParams_.Set(\"ifSourceMetagenerationNotMatch\", fmt.Sprint(ifSourceMetagenerationNotMatch))\n\treturn c\n}\n\n// Projection sets the optional parameter \"projection\": Set of\n// properties to return. Defaults to noAcl, unless the object resource\n// specifies the acl property, when it defaults to full.\n//\n// Possible values:\n//   \"full\" - Include all properties.\n//   \"noAcl\" - Omit the owner, acl property.\nfunc (c *ObjectsCopyCall) Projection(projection string) *ObjectsCopyCall {\n\tc.urlParams_.Set(\"projection\", projection)\n\treturn c\n}\n\n// ProvisionalUserProject sets the optional parameter\n// \"provisionalUserProject\": The project to be billed for this request\n// if the target bucket is requester-pays bucket.\nfunc (c *ObjectsCopyCall) ProvisionalUserProject(provisionalUserProject string) *ObjectsCopyCall {\n\tc.urlParams_.Set(\"provisionalUserProject\", provisionalUserProject)\n\treturn c\n}\n\n// SourceGeneration sets the optional parameter \"sourceGeneration\": If\n// present, selects a specific revision of the source object (as opposed\n// to the latest version, the default).\nfunc (c *ObjectsCopyCall) SourceGeneration(sourceGeneration int64) *ObjectsCopyCall {\n\tc.urlParams_.Set(\"sourceGeneration\", fmt.Sprint(sourceGeneration))\n\treturn c\n}\n\n// UserProject sets the optional parameter \"userProject\": The project to\n// be billed for this request. Required for Requester Pays buckets.\nfunc (c *ObjectsCopyCall) UserProject(userProject string) *ObjectsCopyCall {\n\tc.urlParams_.Set(\"userProject\", userProject)\n\treturn c\n}\n\n// Fields allows partial responses to be retrieved. See\n// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse\n// for more information.\nfunc (c *ObjectsCopyCall) Fields(s ...googleapi.Field) *ObjectsCopyCall {\n\tc.urlParams_.Set(\"fields\", googleapi.CombineFields(s))\n\treturn c\n}\n\n// Context sets the context to be used in this call's Do method. Any\n// pending HTTP request will be aborted if the provided context is\n// canceled.\nfunc (c *ObjectsCopyCall) Context(ctx context.Context) *ObjectsCopyCall {\n\tc.ctx_ = ctx\n\treturn c\n}\n\n// Header returns an http.Header that can be modified by the caller to\n// add HTTP headers to the request.\nfunc (c *ObjectsCopyCall) Header() http.Header {\n\tif c.header_ == nil {\n\t\tc.header_ = make(http.Header)\n\t}\n\treturn c.header_\n}\n\nfunc (c *ObjectsCopyCall) doRequest(alt string) (*http.Response, error) {\n\treqHeaders := make(http.Header)\n\tfor k, v := range c.header_ {\n\t\treqHeaders[k] = v\n\t}\n\treqHeaders.Set(\"User-Agent\", c.s.userAgent())\n\tvar body io.Reader = nil\n\tbody, err := googleapi.WithoutDataWrapper.JSONReader(c.object)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treqHeaders.Set(\"Content-Type\", \"application/json\")\n\tc.urlParams_.Set(\"alt\", alt)\n\tc.urlParams_.Set(\"prettyPrint\", \"false\")\n\turls := googleapi.ResolveRelative(c.s.BasePath, \"b/{sourceBucket}/o/{sourceObject}/copyTo/b/{destinationBucket}/o/{destinationObject}\")\n\turls += \"?\" + c.urlParams_.Encode()\n\treq, err := http.NewRequest(\"POST\", urls, body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.Header = reqHeaders\n\tgoogleapi.Expand(req.URL, map[string]string{\n\t\t\"sourceBucket\":      c.sourceBucket,\n\t\t\"sourceObject\":      c.sourceObject,\n\t\t\"destinationBucket\": c.destinationBucket,\n\t\t\"destinationObject\": c.destinationObject,\n\t})\n\treturn gensupport.SendRequest(c.ctx_, c.s.client, req)\n}\n\n// Do executes the \"storage.objects.copy\" call.\n// Exactly one of *Object or error will be non-nil. Any non-2xx status\n// code is an error. Response headers are in either\n// *Object.ServerResponse.Header or (if a response was returned at all)\n// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to\n// check whether the returned error was because http.StatusNotModified\n// was returned.\nfunc (c *ObjectsCopyCall) Do(opts ...googleapi.CallOption) (*Object, error) {\n\tgensupport.SetOptions(c.urlParams_, opts...)\n\tres, err := c.doRequest(\"json\")\n\tif res != nil && res.StatusCode == http.StatusNotModified {\n\t\tif res.Body != nil {\n\t\t\tres.Body.Close()\n\t\t}\n\t\treturn nil, &googleapi.Error{\n\t\t\tCode:   res.StatusCode,\n\t\t\tHeader: res.Header,\n\t\t}\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer googleapi.CloseBody(res)\n\tif err := googleapi.CheckResponse(res); err != nil {\n\t\treturn nil, err\n\t}\n\tret := &Object{\n\t\tServerResponse: googleapi.ServerResponse{\n\t\t\tHeader:         res.Header,\n\t\t\tHTTPStatusCode: res.StatusCode,\n\t\t},\n\t}\n\ttarget := &ret\n\tif err := gensupport.DecodeResponse(target, res); err != nil {\n\t\treturn nil, err\n\t}\n\treturn ret, nil\n\t// {\n\t//   \"description\": \"Copies a source object to a destination object. Optionally overrides metadata.\",\n\t//   \"httpMethod\": \"POST\",\n\t//   \"id\": \"storage.objects.copy\",\n\t//   \"parameterOrder\": [\n\t//     \"sourceBucket\",\n\t//     \"sourceObject\",\n\t//     \"destinationBucket\",\n\t//     \"destinationObject\"\n\t//   ],\n\t//   \"parameters\": {\n\t//     \"destinationBucket\": {\n\t//       \"description\": \"Name of the bucket in which to store the new object. Overrides the provided object metadata's bucket value, if any.For information about how to URL encode object names to be path safe, see Encoding URI Path Parts.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"destinationObject\": {\n\t//       \"description\": \"Name of the new object. Required when the object metadata is not otherwise provided. Overrides the object metadata's name value, if any.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"destinationPredefinedAcl\": {\n\t//       \"description\": \"Apply a predefined set of access controls to the destination object.\",\n\t//       \"enum\": [\n\t//         \"authenticatedRead\",\n\t//         \"bucketOwnerFullControl\",\n\t//         \"bucketOwnerRead\",\n\t//         \"private\",\n\t//         \"projectPrivate\",\n\t//         \"publicRead\"\n\t//       ],\n\t//       \"enumDescriptions\": [\n\t//         \"Object owner gets OWNER access, and allAuthenticatedUsers get READER access.\",\n\t//         \"Object owner gets OWNER access, and project team owners get OWNER access.\",\n\t//         \"Object owner gets OWNER access, and project team owners get READER access.\",\n\t//         \"Object owner gets OWNER access.\",\n\t//         \"Object owner gets OWNER access, and project team members get access according to their roles.\",\n\t//         \"Object owner gets OWNER access, and allUsers get READER access.\"\n\t//       ],\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"ifGenerationMatch\": {\n\t//       \"description\": \"Makes the operation conditional on whether the destination object's current generation matches the given value. Setting to 0 makes the operation succeed only if there are no live versions of the object.\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"ifGenerationNotMatch\": {\n\t//       \"description\": \"Makes the operation conditional on whether the destination object's current generation does not match the given value. If no live object exists, the precondition fails. Setting to 0 makes the operation succeed only if there is a live version of the object.\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"ifMetagenerationMatch\": {\n\t//       \"description\": \"Makes the operation conditional on whether the destination object's current metageneration matches the given value.\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"ifMetagenerationNotMatch\": {\n\t//       \"description\": \"Makes the operation conditional on whether the destination object's current metageneration does not match the given value.\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"ifSourceGenerationMatch\": {\n\t//       \"description\": \"Makes the operation conditional on whether the source object's current generation matches the given value.\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"ifSourceGenerationNotMatch\": {\n\t//       \"description\": \"Makes the operation conditional on whether the source object's current generation does not match the given value.\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"ifSourceMetagenerationMatch\": {\n\t//       \"description\": \"Makes the operation conditional on whether the source object's current metageneration matches the given value.\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"ifSourceMetagenerationNotMatch\": {\n\t//       \"description\": \"Makes the operation conditional on whether the source object's current metageneration does not match the given value.\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"projection\": {\n\t//       \"description\": \"Set of properties to return. Defaults to noAcl, unless the object resource specifies the acl property, when it defaults to full.\",\n\t//       \"enum\": [\n\t//         \"full\",\n\t//         \"noAcl\"\n\t//       ],\n\t//       \"enumDescriptions\": [\n\t//         \"Include all properties.\",\n\t//         \"Omit the owner, acl property.\"\n\t//       ],\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"provisionalUserProject\": {\n\t//       \"description\": \"The project to be billed for this request if the target bucket is requester-pays bucket.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"sourceBucket\": {\n\t//       \"description\": \"Name of the bucket in which to find the source object.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"sourceGeneration\": {\n\t//       \"description\": \"If present, selects a specific revision of the source object (as opposed to the latest version, the default).\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"sourceObject\": {\n\t//       \"description\": \"Name of the source object. For information about how to URL encode object names to be path safe, see Encoding URI Path Parts.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"userProject\": {\n\t//       \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     }\n\t//   },\n\t//   \"path\": \"b/{sourceBucket}/o/{sourceObject}/copyTo/b/{destinationBucket}/o/{destinationObject}\",\n\t//   \"request\": {\n\t//     \"$ref\": \"Object\"\n\t//   },\n\t//   \"response\": {\n\t//     \"$ref\": \"Object\"\n\t//   },\n\t//   \"scopes\": [\n\t//     \"https://www.googleapis.com/auth/cloud-platform\",\n\t//     \"https://www.googleapis.com/auth/devstorage.full_control\",\n\t//     \"https://www.googleapis.com/auth/devstorage.read_write\"\n\t//   ]\n\t// }\n\n}\n\n// method id \"storage.objects.delete\":\n\ntype ObjectsDeleteCall struct {\n\ts          *Service\n\tbucket     string\n\tobject     string\n\turlParams_ gensupport.URLParams\n\tctx_       context.Context\n\theader_    http.Header\n}\n\n// Delete: Deletes an object and its metadata. Deletions are permanent\n// if versioning is not enabled for the bucket, or if the generation\n// parameter is used.\nfunc (r *ObjectsService) Delete(bucket string, object string) *ObjectsDeleteCall {\n\tc := &ObjectsDeleteCall{s: r.s, urlParams_: make(gensupport.URLParams)}\n\tc.bucket = bucket\n\tc.object = object\n\treturn c\n}\n\n// Generation sets the optional parameter \"generation\": If present,\n// permanently deletes a specific revision of this object (as opposed to\n// the latest version, the default).\nfunc (c *ObjectsDeleteCall) Generation(generation int64) *ObjectsDeleteCall {\n\tc.urlParams_.Set(\"generation\", fmt.Sprint(generation))\n\treturn c\n}\n\n// IfGenerationMatch sets the optional parameter \"ifGenerationMatch\":\n// Makes the operation conditional on whether the object's current\n// generation matches the given value. Setting to 0 makes the operation\n// succeed only if there are no live versions of the object.\nfunc (c *ObjectsDeleteCall) IfGenerationMatch(ifGenerationMatch int64) *ObjectsDeleteCall {\n\tc.urlParams_.Set(\"ifGenerationMatch\", fmt.Sprint(ifGenerationMatch))\n\treturn c\n}\n\n// IfGenerationNotMatch sets the optional parameter\n// \"ifGenerationNotMatch\": Makes the operation conditional on whether\n// the object's current generation does not match the given value. If no\n// live object exists, the precondition fails. Setting to 0 makes the\n// operation succeed only if there is a live version of the object.\nfunc (c *ObjectsDeleteCall) IfGenerationNotMatch(ifGenerationNotMatch int64) *ObjectsDeleteCall {\n\tc.urlParams_.Set(\"ifGenerationNotMatch\", fmt.Sprint(ifGenerationNotMatch))\n\treturn c\n}\n\n// IfMetagenerationMatch sets the optional parameter\n// \"ifMetagenerationMatch\": Makes the operation conditional on whether\n// the object's current metageneration matches the given value.\nfunc (c *ObjectsDeleteCall) IfMetagenerationMatch(ifMetagenerationMatch int64) *ObjectsDeleteCall {\n\tc.urlParams_.Set(\"ifMetagenerationMatch\", fmt.Sprint(ifMetagenerationMatch))\n\treturn c\n}\n\n// IfMetagenerationNotMatch sets the optional parameter\n// \"ifMetagenerationNotMatch\": Makes the operation conditional on\n// whether the object's current metageneration does not match the given\n// value.\nfunc (c *ObjectsDeleteCall) IfMetagenerationNotMatch(ifMetagenerationNotMatch int64) *ObjectsDeleteCall {\n\tc.urlParams_.Set(\"ifMetagenerationNotMatch\", fmt.Sprint(ifMetagenerationNotMatch))\n\treturn c\n}\n\n// ProvisionalUserProject sets the optional parameter\n// \"provisionalUserProject\": The project to be billed for this request\n// if the target bucket is requester-pays bucket.\nfunc (c *ObjectsDeleteCall) ProvisionalUserProject(provisionalUserProject string) *ObjectsDeleteCall {\n\tc.urlParams_.Set(\"provisionalUserProject\", provisionalUserProject)\n\treturn c\n}\n\n// UserProject sets the optional parameter \"userProject\": The project to\n// be billed for this request. Required for Requester Pays buckets.\nfunc (c *ObjectsDeleteCall) UserProject(userProject string) *ObjectsDeleteCall {\n\tc.urlParams_.Set(\"userProject\", userProject)\n\treturn c\n}\n\n// Fields allows partial responses to be retrieved. See\n// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse\n// for more information.\nfunc (c *ObjectsDeleteCall) Fields(s ...googleapi.Field) *ObjectsDeleteCall {\n\tc.urlParams_.Set(\"fields\", googleapi.CombineFields(s))\n\treturn c\n}\n\n// Context sets the context to be used in this call's Do method. Any\n// pending HTTP request will be aborted if the provided context is\n// canceled.\nfunc (c *ObjectsDeleteCall) Context(ctx context.Context) *ObjectsDeleteCall {\n\tc.ctx_ = ctx\n\treturn c\n}\n\n// Header returns an http.Header that can be modified by the caller to\n// add HTTP headers to the request.\nfunc (c *ObjectsDeleteCall) Header() http.Header {\n\tif c.header_ == nil {\n\t\tc.header_ = make(http.Header)\n\t}\n\treturn c.header_\n}\n\nfunc (c *ObjectsDeleteCall) doRequest(alt string) (*http.Response, error) {\n\treqHeaders := make(http.Header)\n\tfor k, v := range c.header_ {\n\t\treqHeaders[k] = v\n\t}\n\treqHeaders.Set(\"User-Agent\", c.s.userAgent())\n\tvar body io.Reader = nil\n\tc.urlParams_.Set(\"alt\", alt)\n\tc.urlParams_.Set(\"prettyPrint\", \"false\")\n\turls := googleapi.ResolveRelative(c.s.BasePath, \"b/{bucket}/o/{object}\")\n\turls += \"?\" + c.urlParams_.Encode()\n\treq, err := http.NewRequest(\"DELETE\", urls, body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.Header = reqHeaders\n\tgoogleapi.Expand(req.URL, map[string]string{\n\t\t\"bucket\": c.bucket,\n\t\t\"object\": c.object,\n\t})\n\treturn gensupport.SendRequest(c.ctx_, c.s.client, req)\n}\n\n// Do executes the \"storage.objects.delete\" call.\nfunc (c *ObjectsDeleteCall) Do(opts ...googleapi.CallOption) error {\n\tgensupport.SetOptions(c.urlParams_, opts...)\n\tres, err := c.doRequest(\"json\")\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer googleapi.CloseBody(res)\n\tif err := googleapi.CheckResponse(res); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n\t// {\n\t//   \"description\": \"Deletes an object and its metadata. Deletions are permanent if versioning is not enabled for the bucket, or if the generation parameter is used.\",\n\t//   \"httpMethod\": \"DELETE\",\n\t//   \"id\": \"storage.objects.delete\",\n\t//   \"parameterOrder\": [\n\t//     \"bucket\",\n\t//     \"object\"\n\t//   ],\n\t//   \"parameters\": {\n\t//     \"bucket\": {\n\t//       \"description\": \"Name of the bucket in which the object resides.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"generation\": {\n\t//       \"description\": \"If present, permanently deletes a specific revision of this object (as opposed to the latest version, the default).\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"ifGenerationMatch\": {\n\t//       \"description\": \"Makes the operation conditional on whether the object's current generation matches the given value. Setting to 0 makes the operation succeed only if there are no live versions of the object.\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"ifGenerationNotMatch\": {\n\t//       \"description\": \"Makes the operation conditional on whether the object's current generation does not match the given value. If no live object exists, the precondition fails. Setting to 0 makes the operation succeed only if there is a live version of the object.\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"ifMetagenerationMatch\": {\n\t//       \"description\": \"Makes the operation conditional on whether the object's current metageneration matches the given value.\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"ifMetagenerationNotMatch\": {\n\t//       \"description\": \"Makes the operation conditional on whether the object's current metageneration does not match the given value.\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"object\": {\n\t//       \"description\": \"Name of the object. For information about how to URL encode object names to be path safe, see Encoding URI Path Parts.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"provisionalUserProject\": {\n\t//       \"description\": \"The project to be billed for this request if the target bucket is requester-pays bucket.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"userProject\": {\n\t//       \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     }\n\t//   },\n\t//   \"path\": \"b/{bucket}/o/{object}\",\n\t//   \"scopes\": [\n\t//     \"https://www.googleapis.com/auth/cloud-platform\",\n\t//     \"https://www.googleapis.com/auth/devstorage.full_control\",\n\t//     \"https://www.googleapis.com/auth/devstorage.read_write\"\n\t//   ]\n\t// }\n\n}\n\n// method id \"storage.objects.get\":\n\ntype ObjectsGetCall struct {\n\ts            *Service\n\tbucket       string\n\tobject       string\n\turlParams_   gensupport.URLParams\n\tifNoneMatch_ string\n\tctx_         context.Context\n\theader_      http.Header\n}\n\n// Get: Retrieves an object or its metadata.\nfunc (r *ObjectsService) Get(bucket string, object string) *ObjectsGetCall {\n\tc := &ObjectsGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}\n\tc.bucket = bucket\n\tc.object = object\n\treturn c\n}\n\n// Generation sets the optional parameter \"generation\": If present,\n// selects a specific revision of this object (as opposed to the latest\n// version, the default).\nfunc (c *ObjectsGetCall) Generation(generation int64) *ObjectsGetCall {\n\tc.urlParams_.Set(\"generation\", fmt.Sprint(generation))\n\treturn c\n}\n\n// IfGenerationMatch sets the optional parameter \"ifGenerationMatch\":\n// Makes the operation conditional on whether the object's current\n// generation matches the given value. Setting to 0 makes the operation\n// succeed only if there are no live versions of the object.\nfunc (c *ObjectsGetCall) IfGenerationMatch(ifGenerationMatch int64) *ObjectsGetCall {\n\tc.urlParams_.Set(\"ifGenerationMatch\", fmt.Sprint(ifGenerationMatch))\n\treturn c\n}\n\n// IfGenerationNotMatch sets the optional parameter\n// \"ifGenerationNotMatch\": Makes the operation conditional on whether\n// the object's current generation does not match the given value. If no\n// live object exists, the precondition fails. Setting to 0 makes the\n// operation succeed only if there is a live version of the object.\nfunc (c *ObjectsGetCall) IfGenerationNotMatch(ifGenerationNotMatch int64) *ObjectsGetCall {\n\tc.urlParams_.Set(\"ifGenerationNotMatch\", fmt.Sprint(ifGenerationNotMatch))\n\treturn c\n}\n\n// IfMetagenerationMatch sets the optional parameter\n// \"ifMetagenerationMatch\": Makes the operation conditional on whether\n// the object's current metageneration matches the given value.\nfunc (c *ObjectsGetCall) IfMetagenerationMatch(ifMetagenerationMatch int64) *ObjectsGetCall {\n\tc.urlParams_.Set(\"ifMetagenerationMatch\", fmt.Sprint(ifMetagenerationMatch))\n\treturn c\n}\n\n// IfMetagenerationNotMatch sets the optional parameter\n// \"ifMetagenerationNotMatch\": Makes the operation conditional on\n// whether the object's current metageneration does not match the given\n// value.\nfunc (c *ObjectsGetCall) IfMetagenerationNotMatch(ifMetagenerationNotMatch int64) *ObjectsGetCall {\n\tc.urlParams_.Set(\"ifMetagenerationNotMatch\", fmt.Sprint(ifMetagenerationNotMatch))\n\treturn c\n}\n\n// Projection sets the optional parameter \"projection\": Set of\n// properties to return. Defaults to noAcl.\n//\n// Possible values:\n//   \"full\" - Include all properties.\n//   \"noAcl\" - Omit the owner, acl property.\nfunc (c *ObjectsGetCall) Projection(projection string) *ObjectsGetCall {\n\tc.urlParams_.Set(\"projection\", projection)\n\treturn c\n}\n\n// ProvisionalUserProject sets the optional parameter\n// \"provisionalUserProject\": The project to be billed for this request\n// if the target bucket is requester-pays bucket.\nfunc (c *ObjectsGetCall) ProvisionalUserProject(provisionalUserProject string) *ObjectsGetCall {\n\tc.urlParams_.Set(\"provisionalUserProject\", provisionalUserProject)\n\treturn c\n}\n\n// UserProject sets the optional parameter \"userProject\": The project to\n// be billed for this request. Required for Requester Pays buckets.\nfunc (c *ObjectsGetCall) UserProject(userProject string) *ObjectsGetCall {\n\tc.urlParams_.Set(\"userProject\", userProject)\n\treturn c\n}\n\n// Fields allows partial responses to be retrieved. See\n// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse\n// for more information.\nfunc (c *ObjectsGetCall) Fields(s ...googleapi.Field) *ObjectsGetCall {\n\tc.urlParams_.Set(\"fields\", googleapi.CombineFields(s))\n\treturn c\n}\n\n// IfNoneMatch sets the optional parameter which makes the operation\n// fail if the object's ETag matches the given value. This is useful for\n// getting updates only after the object has changed since the last\n// request. Use googleapi.IsNotModified to check whether the response\n// error from Do is the result of In-None-Match.\nfunc (c *ObjectsGetCall) IfNoneMatch(entityTag string) *ObjectsGetCall {\n\tc.ifNoneMatch_ = entityTag\n\treturn c\n}\n\n// Context sets the context to be used in this call's Do and Download\n// methods. Any pending HTTP request will be aborted if the provided\n// context is canceled.\nfunc (c *ObjectsGetCall) Context(ctx context.Context) *ObjectsGetCall {\n\tc.ctx_ = ctx\n\treturn c\n}\n\n// Header returns an http.Header that can be modified by the caller to\n// add HTTP headers to the request.\nfunc (c *ObjectsGetCall) Header() http.Header {\n\tif c.header_ == nil {\n\t\tc.header_ = make(http.Header)\n\t}\n\treturn c.header_\n}\n\nfunc (c *ObjectsGetCall) doRequest(alt string) (*http.Response, error) {\n\treqHeaders := make(http.Header)\n\tfor k, v := range c.header_ {\n\t\treqHeaders[k] = v\n\t}\n\treqHeaders.Set(\"User-Agent\", c.s.userAgent())\n\tif c.ifNoneMatch_ != \"\" {\n\t\treqHeaders.Set(\"If-None-Match\", c.ifNoneMatch_)\n\t}\n\tvar body io.Reader = nil\n\tc.urlParams_.Set(\"alt\", alt)\n\tc.urlParams_.Set(\"prettyPrint\", \"false\")\n\turls := googleapi.ResolveRelative(c.s.BasePath, \"b/{bucket}/o/{object}\")\n\turls += \"?\" + c.urlParams_.Encode()\n\treq, err := http.NewRequest(\"GET\", urls, body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.Header = reqHeaders\n\tgoogleapi.Expand(req.URL, map[string]string{\n\t\t\"bucket\": c.bucket,\n\t\t\"object\": c.object,\n\t})\n\treturn gensupport.SendRequest(c.ctx_, c.s.client, req)\n}\n\n// Download fetches the API endpoint's \"media\" value, instead of the normal\n// API response value. If the returned error is nil, the Response is guaranteed to\n// have a 2xx status code. Callers must close the Response.Body as usual.\nfunc (c *ObjectsGetCall) Download(opts ...googleapi.CallOption) (*http.Response, error) {\n\tgensupport.SetOptions(c.urlParams_, opts...)\n\tres, err := c.doRequest(\"media\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif err := googleapi.CheckMediaResponse(res); err != nil {\n\t\tres.Body.Close()\n\t\treturn nil, err\n\t}\n\treturn res, nil\n}\n\n// Do executes the \"storage.objects.get\" call.\n// Exactly one of *Object or error will be non-nil. Any non-2xx status\n// code is an error. Response headers are in either\n// *Object.ServerResponse.Header or (if a response was returned at all)\n// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to\n// check whether the returned error was because http.StatusNotModified\n// was returned.\nfunc (c *ObjectsGetCall) Do(opts ...googleapi.CallOption) (*Object, error) {\n\tgensupport.SetOptions(c.urlParams_, opts...)\n\tres, err := c.doRequest(\"json\")\n\tif res != nil && res.StatusCode == http.StatusNotModified {\n\t\tif res.Body != nil {\n\t\t\tres.Body.Close()\n\t\t}\n\t\treturn nil, &googleapi.Error{\n\t\t\tCode:   res.StatusCode,\n\t\t\tHeader: res.Header,\n\t\t}\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer googleapi.CloseBody(res)\n\tif err := googleapi.CheckResponse(res); err != nil {\n\t\treturn nil, err\n\t}\n\tret := &Object{\n\t\tServerResponse: googleapi.ServerResponse{\n\t\t\tHeader:         res.Header,\n\t\t\tHTTPStatusCode: res.StatusCode,\n\t\t},\n\t}\n\ttarget := &ret\n\tif err := gensupport.DecodeResponse(target, res); err != nil {\n\t\treturn nil, err\n\t}\n\treturn ret, nil\n\t// {\n\t//   \"description\": \"Retrieves an object or its metadata.\",\n\t//   \"httpMethod\": \"GET\",\n\t//   \"id\": \"storage.objects.get\",\n\t//   \"parameterOrder\": [\n\t//     \"bucket\",\n\t//     \"object\"\n\t//   ],\n\t//   \"parameters\": {\n\t//     \"bucket\": {\n\t//       \"description\": \"Name of the bucket in which the object resides.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"generation\": {\n\t//       \"description\": \"If present, selects a specific revision of this object (as opposed to the latest version, the default).\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"ifGenerationMatch\": {\n\t//       \"description\": \"Makes the operation conditional on whether the object's current generation matches the given value. Setting to 0 makes the operation succeed only if there are no live versions of the object.\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"ifGenerationNotMatch\": {\n\t//       \"description\": \"Makes the operation conditional on whether the object's current generation does not match the given value. If no live object exists, the precondition fails. Setting to 0 makes the operation succeed only if there is a live version of the object.\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"ifMetagenerationMatch\": {\n\t//       \"description\": \"Makes the operation conditional on whether the object's current metageneration matches the given value.\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"ifMetagenerationNotMatch\": {\n\t//       \"description\": \"Makes the operation conditional on whether the object's current metageneration does not match the given value.\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"object\": {\n\t//       \"description\": \"Name of the object. For information about how to URL encode object names to be path safe, see Encoding URI Path Parts.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"projection\": {\n\t//       \"description\": \"Set of properties to return. Defaults to noAcl.\",\n\t//       \"enum\": [\n\t//         \"full\",\n\t//         \"noAcl\"\n\t//       ],\n\t//       \"enumDescriptions\": [\n\t//         \"Include all properties.\",\n\t//         \"Omit the owner, acl property.\"\n\t//       ],\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"provisionalUserProject\": {\n\t//       \"description\": \"The project to be billed for this request if the target bucket is requester-pays bucket.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"userProject\": {\n\t//       \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     }\n\t//   },\n\t//   \"path\": \"b/{bucket}/o/{object}\",\n\t//   \"response\": {\n\t//     \"$ref\": \"Object\"\n\t//   },\n\t//   \"scopes\": [\n\t//     \"https://www.googleapis.com/auth/cloud-platform\",\n\t//     \"https://www.googleapis.com/auth/cloud-platform.read-only\",\n\t//     \"https://www.googleapis.com/auth/devstorage.full_control\",\n\t//     \"https://www.googleapis.com/auth/devstorage.read_only\",\n\t//     \"https://www.googleapis.com/auth/devstorage.read_write\"\n\t//   ],\n\t//   \"supportsMediaDownload\": true,\n\t//   \"useMediaDownloadService\": true\n\t// }\n\n}\n\n// method id \"storage.objects.getIamPolicy\":\n\ntype ObjectsGetIamPolicyCall struct {\n\ts            *Service\n\tbucket       string\n\tobject       string\n\turlParams_   gensupport.URLParams\n\tifNoneMatch_ string\n\tctx_         context.Context\n\theader_      http.Header\n}\n\n// GetIamPolicy: Returns an IAM policy for the specified object.\nfunc (r *ObjectsService) GetIamPolicy(bucket string, object string) *ObjectsGetIamPolicyCall {\n\tc := &ObjectsGetIamPolicyCall{s: r.s, urlParams_: make(gensupport.URLParams)}\n\tc.bucket = bucket\n\tc.object = object\n\treturn c\n}\n\n// Generation sets the optional parameter \"generation\": If present,\n// selects a specific revision of this object (as opposed to the latest\n// version, the default).\nfunc (c *ObjectsGetIamPolicyCall) Generation(generation int64) *ObjectsGetIamPolicyCall {\n\tc.urlParams_.Set(\"generation\", fmt.Sprint(generation))\n\treturn c\n}\n\n// ProvisionalUserProject sets the optional parameter\n// \"provisionalUserProject\": The project to be billed for this request\n// if the target bucket is requester-pays bucket.\nfunc (c *ObjectsGetIamPolicyCall) ProvisionalUserProject(provisionalUserProject string) *ObjectsGetIamPolicyCall {\n\tc.urlParams_.Set(\"provisionalUserProject\", provisionalUserProject)\n\treturn c\n}\n\n// UserProject sets the optional parameter \"userProject\": The project to\n// be billed for this request. Required for Requester Pays buckets.\nfunc (c *ObjectsGetIamPolicyCall) UserProject(userProject string) *ObjectsGetIamPolicyCall {\n\tc.urlParams_.Set(\"userProject\", userProject)\n\treturn c\n}\n\n// Fields allows partial responses to be retrieved. See\n// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse\n// for more information.\nfunc (c *ObjectsGetIamPolicyCall) Fields(s ...googleapi.Field) *ObjectsGetIamPolicyCall {\n\tc.urlParams_.Set(\"fields\", googleapi.CombineFields(s))\n\treturn c\n}\n\n// IfNoneMatch sets the optional parameter which makes the operation\n// fail if the object's ETag matches the given value. This is useful for\n// getting updates only after the object has changed since the last\n// request. Use googleapi.IsNotModified to check whether the response\n// error from Do is the result of In-None-Match.\nfunc (c *ObjectsGetIamPolicyCall) IfNoneMatch(entityTag string) *ObjectsGetIamPolicyCall {\n\tc.ifNoneMatch_ = entityTag\n\treturn c\n}\n\n// Context sets the context to be used in this call's Do method. Any\n// pending HTTP request will be aborted if the provided context is\n// canceled.\nfunc (c *ObjectsGetIamPolicyCall) Context(ctx context.Context) *ObjectsGetIamPolicyCall {\n\tc.ctx_ = ctx\n\treturn c\n}\n\n// Header returns an http.Header that can be modified by the caller to\n// add HTTP headers to the request.\nfunc (c *ObjectsGetIamPolicyCall) Header() http.Header {\n\tif c.header_ == nil {\n\t\tc.header_ = make(http.Header)\n\t}\n\treturn c.header_\n}\n\nfunc (c *ObjectsGetIamPolicyCall) doRequest(alt string) (*http.Response, error) {\n\treqHeaders := make(http.Header)\n\tfor k, v := range c.header_ {\n\t\treqHeaders[k] = v\n\t}\n\treqHeaders.Set(\"User-Agent\", c.s.userAgent())\n\tif c.ifNoneMatch_ != \"\" {\n\t\treqHeaders.Set(\"If-None-Match\", c.ifNoneMatch_)\n\t}\n\tvar body io.Reader = nil\n\tc.urlParams_.Set(\"alt\", alt)\n\tc.urlParams_.Set(\"prettyPrint\", \"false\")\n\turls := googleapi.ResolveRelative(c.s.BasePath, \"b/{bucket}/o/{object}/iam\")\n\turls += \"?\" + c.urlParams_.Encode()\n\treq, err := http.NewRequest(\"GET\", urls, body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.Header = reqHeaders\n\tgoogleapi.Expand(req.URL, map[string]string{\n\t\t\"bucket\": c.bucket,\n\t\t\"object\": c.object,\n\t})\n\treturn gensupport.SendRequest(c.ctx_, c.s.client, req)\n}\n\n// Do executes the \"storage.objects.getIamPolicy\" call.\n// Exactly one of *Policy or error will be non-nil. Any non-2xx status\n// code is an error. Response headers are in either\n// *Policy.ServerResponse.Header or (if a response was returned at all)\n// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to\n// check whether the returned error was because http.StatusNotModified\n// was returned.\nfunc (c *ObjectsGetIamPolicyCall) Do(opts ...googleapi.CallOption) (*Policy, error) {\n\tgensupport.SetOptions(c.urlParams_, opts...)\n\tres, err := c.doRequest(\"json\")\n\tif res != nil && res.StatusCode == http.StatusNotModified {\n\t\tif res.Body != nil {\n\t\t\tres.Body.Close()\n\t\t}\n\t\treturn nil, &googleapi.Error{\n\t\t\tCode:   res.StatusCode,\n\t\t\tHeader: res.Header,\n\t\t}\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer googleapi.CloseBody(res)\n\tif err := googleapi.CheckResponse(res); err != nil {\n\t\treturn nil, err\n\t}\n\tret := &Policy{\n\t\tServerResponse: googleapi.ServerResponse{\n\t\t\tHeader:         res.Header,\n\t\t\tHTTPStatusCode: res.StatusCode,\n\t\t},\n\t}\n\ttarget := &ret\n\tif err := gensupport.DecodeResponse(target, res); err != nil {\n\t\treturn nil, err\n\t}\n\treturn ret, nil\n\t// {\n\t//   \"description\": \"Returns an IAM policy for the specified object.\",\n\t//   \"httpMethod\": \"GET\",\n\t//   \"id\": \"storage.objects.getIamPolicy\",\n\t//   \"parameterOrder\": [\n\t//     \"bucket\",\n\t//     \"object\"\n\t//   ],\n\t//   \"parameters\": {\n\t//     \"bucket\": {\n\t//       \"description\": \"Name of the bucket in which the object resides.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"generation\": {\n\t//       \"description\": \"If present, selects a specific revision of this object (as opposed to the latest version, the default).\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"object\": {\n\t//       \"description\": \"Name of the object. For information about how to URL encode object names to be path safe, see Encoding URI Path Parts.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"provisionalUserProject\": {\n\t//       \"description\": \"The project to be billed for this request if the target bucket is requester-pays bucket.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"userProject\": {\n\t//       \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     }\n\t//   },\n\t//   \"path\": \"b/{bucket}/o/{object}/iam\",\n\t//   \"response\": {\n\t//     \"$ref\": \"Policy\"\n\t//   },\n\t//   \"scopes\": [\n\t//     \"https://www.googleapis.com/auth/cloud-platform\",\n\t//     \"https://www.googleapis.com/auth/cloud-platform.read-only\",\n\t//     \"https://www.googleapis.com/auth/devstorage.full_control\",\n\t//     \"https://www.googleapis.com/auth/devstorage.read_only\",\n\t//     \"https://www.googleapis.com/auth/devstorage.read_write\"\n\t//   ]\n\t// }\n\n}\n\n// method id \"storage.objects.insert\":\n\ntype ObjectsInsertCall struct {\n\ts          *Service\n\tbucket     string\n\tobject     *Object\n\turlParams_ gensupport.URLParams\n\tmediaInfo_ *gensupport.MediaInfo\n\tctx_       context.Context\n\theader_    http.Header\n}\n\n// Insert: Stores a new object and metadata.\nfunc (r *ObjectsService) Insert(bucket string, object *Object) *ObjectsInsertCall {\n\tc := &ObjectsInsertCall{s: r.s, urlParams_: make(gensupport.URLParams)}\n\tc.bucket = bucket\n\tc.object = object\n\treturn c\n}\n\n// ContentEncoding sets the optional parameter \"contentEncoding\": If\n// set, sets the contentEncoding property of the final object to this\n// value. Setting this parameter is equivalent to setting the\n// contentEncoding metadata property. This can be useful when uploading\n// an object with uploadType=media to indicate the encoding of the\n// content being uploaded.\nfunc (c *ObjectsInsertCall) ContentEncoding(contentEncoding string) *ObjectsInsertCall {\n\tc.urlParams_.Set(\"contentEncoding\", contentEncoding)\n\treturn c\n}\n\n// IfGenerationMatch sets the optional parameter \"ifGenerationMatch\":\n// Makes the operation conditional on whether the object's current\n// generation matches the given value. Setting to 0 makes the operation\n// succeed only if there are no live versions of the object.\nfunc (c *ObjectsInsertCall) IfGenerationMatch(ifGenerationMatch int64) *ObjectsInsertCall {\n\tc.urlParams_.Set(\"ifGenerationMatch\", fmt.Sprint(ifGenerationMatch))\n\treturn c\n}\n\n// IfGenerationNotMatch sets the optional parameter\n// \"ifGenerationNotMatch\": Makes the operation conditional on whether\n// the object's current generation does not match the given value. If no\n// live object exists, the precondition fails. Setting to 0 makes the\n// operation succeed only if there is a live version of the object.\nfunc (c *ObjectsInsertCall) IfGenerationNotMatch(ifGenerationNotMatch int64) *ObjectsInsertCall {\n\tc.urlParams_.Set(\"ifGenerationNotMatch\", fmt.Sprint(ifGenerationNotMatch))\n\treturn c\n}\n\n// IfMetagenerationMatch sets the optional parameter\n// \"ifMetagenerationMatch\": Makes the operation conditional on whether\n// the object's current metageneration matches the given value.\nfunc (c *ObjectsInsertCall) IfMetagenerationMatch(ifMetagenerationMatch int64) *ObjectsInsertCall {\n\tc.urlParams_.Set(\"ifMetagenerationMatch\", fmt.Sprint(ifMetagenerationMatch))\n\treturn c\n}\n\n// IfMetagenerationNotMatch sets the optional parameter\n// \"ifMetagenerationNotMatch\": Makes the operation conditional on\n// whether the object's current metageneration does not match the given\n// value.\nfunc (c *ObjectsInsertCall) IfMetagenerationNotMatch(ifMetagenerationNotMatch int64) *ObjectsInsertCall {\n\tc.urlParams_.Set(\"ifMetagenerationNotMatch\", fmt.Sprint(ifMetagenerationNotMatch))\n\treturn c\n}\n\n// KmsKeyName sets the optional parameter \"kmsKeyName\": Resource name of\n// the Cloud KMS key, of the form\n// projects/my-project/locations/global/keyRings/my-kr/cryptoKeys/my-key,\n//  that will be used to encrypt the object. Overrides the object\n// metadata's kms_key_name value, if any.\nfunc (c *ObjectsInsertCall) KmsKeyName(kmsKeyName string) *ObjectsInsertCall {\n\tc.urlParams_.Set(\"kmsKeyName\", kmsKeyName)\n\treturn c\n}\n\n// Name sets the optional parameter \"name\": Name of the object. Required\n// when the object metadata is not otherwise provided. Overrides the\n// object metadata's name value, if any. For information about how to\n// URL encode object names to be path safe, see Encoding URI Path Parts.\nfunc (c *ObjectsInsertCall) Name(name string) *ObjectsInsertCall {\n\tc.urlParams_.Set(\"name\", name)\n\treturn c\n}\n\n// PredefinedAcl sets the optional parameter \"predefinedAcl\": Apply a\n// predefined set of access controls to this object.\n//\n// Possible values:\n//   \"authenticatedRead\" - Object owner gets OWNER access, and\n// allAuthenticatedUsers get READER access.\n//   \"bucketOwnerFullControl\" - Object owner gets OWNER access, and\n// project team owners get OWNER access.\n//   \"bucketOwnerRead\" - Object owner gets OWNER access, and project\n// team owners get READER access.\n//   \"private\" - Object owner gets OWNER access.\n//   \"projectPrivate\" - Object owner gets OWNER access, and project team\n// members get access according to their roles.\n//   \"publicRead\" - Object owner gets OWNER access, and allUsers get\n// READER access.\nfunc (c *ObjectsInsertCall) PredefinedAcl(predefinedAcl string) *ObjectsInsertCall {\n\tc.urlParams_.Set(\"predefinedAcl\", predefinedAcl)\n\treturn c\n}\n\n// Projection sets the optional parameter \"projection\": Set of\n// properties to return. Defaults to noAcl, unless the object resource\n// specifies the acl property, when it defaults to full.\n//\n// Possible values:\n//   \"full\" - Include all properties.\n//   \"noAcl\" - Omit the owner, acl property.\nfunc (c *ObjectsInsertCall) Projection(projection string) *ObjectsInsertCall {\n\tc.urlParams_.Set(\"projection\", projection)\n\treturn c\n}\n\n// ProvisionalUserProject sets the optional parameter\n// \"provisionalUserProject\": The project to be billed for this request\n// if the target bucket is requester-pays bucket.\nfunc (c *ObjectsInsertCall) ProvisionalUserProject(provisionalUserProject string) *ObjectsInsertCall {\n\tc.urlParams_.Set(\"provisionalUserProject\", provisionalUserProject)\n\treturn c\n}\n\n// UserProject sets the optional parameter \"userProject\": The project to\n// be billed for this request. Required for Requester Pays buckets.\nfunc (c *ObjectsInsertCall) UserProject(userProject string) *ObjectsInsertCall {\n\tc.urlParams_.Set(\"userProject\", userProject)\n\treturn c\n}\n\n// Media specifies the media to upload in one or more chunks. The chunk\n// size may be controlled by supplying a MediaOption generated by\n// googleapi.ChunkSize. The chunk size defaults to\n// googleapi.DefaultUploadChunkSize.The Content-Type header used in the\n// upload request will be determined by sniffing the contents of r,\n// unless a MediaOption generated by googleapi.ContentType is\n// supplied.\n// At most one of Media and ResumableMedia may be set.\nfunc (c *ObjectsInsertCall) Media(r io.Reader, options ...googleapi.MediaOption) *ObjectsInsertCall {\n\tif ct := c.object.ContentType; ct != \"\" {\n\t\toptions = append([]googleapi.MediaOption{googleapi.ContentType(ct)}, options...)\n\t}\n\tc.mediaInfo_ = gensupport.NewInfoFromMedia(r, options)\n\treturn c\n}\n\n// ResumableMedia specifies the media to upload in chunks and can be\n// canceled with ctx.\n//\n// Deprecated: use Media instead.\n//\n// At most one of Media and ResumableMedia may be set. mediaType\n// identifies the MIME media type of the upload, such as \"image/png\". If\n// mediaType is \"\", it will be auto-detected. The provided ctx will\n// supersede any context previously provided to the Context method.\nfunc (c *ObjectsInsertCall) ResumableMedia(ctx context.Context, r io.ReaderAt, size int64, mediaType string) *ObjectsInsertCall {\n\tc.ctx_ = ctx\n\tc.mediaInfo_ = gensupport.NewInfoFromResumableMedia(r, size, mediaType)\n\treturn c\n}\n\n// ProgressUpdater provides a callback function that will be called\n// after every chunk. It should be a low-latency function in order to\n// not slow down the upload operation. This should only be called when\n// using ResumableMedia (as opposed to Media).\nfunc (c *ObjectsInsertCall) ProgressUpdater(pu googleapi.ProgressUpdater) *ObjectsInsertCall {\n\tc.mediaInfo_.SetProgressUpdater(pu)\n\treturn c\n}\n\n// Fields allows partial responses to be retrieved. See\n// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse\n// for more information.\nfunc (c *ObjectsInsertCall) Fields(s ...googleapi.Field) *ObjectsInsertCall {\n\tc.urlParams_.Set(\"fields\", googleapi.CombineFields(s))\n\treturn c\n}\n\n// Context sets the context to be used in this call's Do method. Any\n// pending HTTP request will be aborted if the provided context is\n// canceled.\n// This context will supersede any context previously provided to the\n// ResumableMedia method.\nfunc (c *ObjectsInsertCall) Context(ctx context.Context) *ObjectsInsertCall {\n\tc.ctx_ = ctx\n\treturn c\n}\n\n// Header returns an http.Header that can be modified by the caller to\n// add HTTP headers to the request.\nfunc (c *ObjectsInsertCall) Header() http.Header {\n\tif c.header_ == nil {\n\t\tc.header_ = make(http.Header)\n\t}\n\treturn c.header_\n}\n\nfunc (c *ObjectsInsertCall) doRequest(alt string) (*http.Response, error) {\n\treqHeaders := make(http.Header)\n\tfor k, v := range c.header_ {\n\t\treqHeaders[k] = v\n\t}\n\treqHeaders.Set(\"User-Agent\", c.s.userAgent())\n\tvar body io.Reader = nil\n\tbody, err := googleapi.WithoutDataWrapper.JSONReader(c.object)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treqHeaders.Set(\"Content-Type\", \"application/json\")\n\tc.urlParams_.Set(\"alt\", alt)\n\tc.urlParams_.Set(\"prettyPrint\", \"false\")\n\turls := googleapi.ResolveRelative(c.s.BasePath, \"b/{bucket}/o\")\n\tif c.mediaInfo_ != nil {\n\t\turls = strings.Replace(urls, \"https://www.googleapis.com/\", \"https://www.googleapis.com/upload/\", 1)\n\t\tc.urlParams_.Set(\"uploadType\", c.mediaInfo_.UploadType())\n\t}\n\tif body == nil {\n\t\tbody = new(bytes.Buffer)\n\t\treqHeaders.Set(\"Content-Type\", \"application/json\")\n\t}\n\tbody, getBody, cleanup := c.mediaInfo_.UploadRequest(reqHeaders, body)\n\tdefer cleanup()\n\turls += \"?\" + c.urlParams_.Encode()\n\treq, err := http.NewRequest(\"POST\", urls, body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.Header = reqHeaders\n\treq.GetBody = getBody\n\tgoogleapi.Expand(req.URL, map[string]string{\n\t\t\"bucket\": c.bucket,\n\t})\n\treturn gensupport.SendRequest(c.ctx_, c.s.client, req)\n}\n\n// Do executes the \"storage.objects.insert\" call.\n// Exactly one of *Object or error will be non-nil. Any non-2xx status\n// code is an error. Response headers are in either\n// *Object.ServerResponse.Header or (if a response was returned at all)\n// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to\n// check whether the returned error was because http.StatusNotModified\n// was returned.\nfunc (c *ObjectsInsertCall) Do(opts ...googleapi.CallOption) (*Object, error) {\n\tgensupport.SetOptions(c.urlParams_, opts...)\n\tres, err := c.doRequest(\"json\")\n\tif res != nil && res.StatusCode == http.StatusNotModified {\n\t\tif res.Body != nil {\n\t\t\tres.Body.Close()\n\t\t}\n\t\treturn nil, &googleapi.Error{\n\t\t\tCode:   res.StatusCode,\n\t\t\tHeader: res.Header,\n\t\t}\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer googleapi.CloseBody(res)\n\tif err := googleapi.CheckResponse(res); err != nil {\n\t\treturn nil, err\n\t}\n\trx := c.mediaInfo_.ResumableUpload(res.Header.Get(\"Location\"))\n\tif rx != nil {\n\t\trx.Client = c.s.client\n\t\trx.UserAgent = c.s.userAgent()\n\t\tctx := c.ctx_\n\t\tif ctx == nil {\n\t\t\tctx = context.TODO()\n\t\t}\n\t\tres, err = rx.Upload(ctx)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tdefer res.Body.Close()\n\t\tif err := googleapi.CheckResponse(res); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\tret := &Object{\n\t\tServerResponse: googleapi.ServerResponse{\n\t\t\tHeader:         res.Header,\n\t\t\tHTTPStatusCode: res.StatusCode,\n\t\t},\n\t}\n\ttarget := &ret\n\tif err := gensupport.DecodeResponse(target, res); err != nil {\n\t\treturn nil, err\n\t}\n\treturn ret, nil\n\t// {\n\t//   \"description\": \"Stores a new object and metadata.\",\n\t//   \"httpMethod\": \"POST\",\n\t//   \"id\": \"storage.objects.insert\",\n\t//   \"mediaUpload\": {\n\t//     \"accept\": [\n\t//       \"*/*\"\n\t//     ],\n\t//     \"protocols\": {\n\t//       \"resumable\": {\n\t//         \"multipart\": true,\n\t//         \"path\": \"/resumable/upload/storage/v1/b/{bucket}/o\"\n\t//       },\n\t//       \"simple\": {\n\t//         \"multipart\": true,\n\t//         \"path\": \"/upload/storage/v1/b/{bucket}/o\"\n\t//       }\n\t//     }\n\t//   },\n\t//   \"parameterOrder\": [\n\t//     \"bucket\"\n\t//   ],\n\t//   \"parameters\": {\n\t//     \"bucket\": {\n\t//       \"description\": \"Name of the bucket in which to store the new object. Overrides the provided object metadata's bucket value, if any.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"contentEncoding\": {\n\t//       \"description\": \"If set, sets the contentEncoding property of the final object to this value. Setting this parameter is equivalent to setting the contentEncoding metadata property. This can be useful when uploading an object with uploadType=media to indicate the encoding of the content being uploaded.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"ifGenerationMatch\": {\n\t//       \"description\": \"Makes the operation conditional on whether the object's current generation matches the given value. Setting to 0 makes the operation succeed only if there are no live versions of the object.\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"ifGenerationNotMatch\": {\n\t//       \"description\": \"Makes the operation conditional on whether the object's current generation does not match the given value. If no live object exists, the precondition fails. Setting to 0 makes the operation succeed only if there is a live version of the object.\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"ifMetagenerationMatch\": {\n\t//       \"description\": \"Makes the operation conditional on whether the object's current metageneration matches the given value.\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"ifMetagenerationNotMatch\": {\n\t//       \"description\": \"Makes the operation conditional on whether the object's current metageneration does not match the given value.\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"kmsKeyName\": {\n\t//       \"description\": \"Resource name of the Cloud KMS key, of the form projects/my-project/locations/global/keyRings/my-kr/cryptoKeys/my-key, that will be used to encrypt the object. Overrides the object metadata's kms_key_name value, if any.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"name\": {\n\t//       \"description\": \"Name of the object. Required when the object metadata is not otherwise provided. Overrides the object metadata's name value, if any. For information about how to URL encode object names to be path safe, see Encoding URI Path Parts.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"predefinedAcl\": {\n\t//       \"description\": \"Apply a predefined set of access controls to this object.\",\n\t//       \"enum\": [\n\t//         \"authenticatedRead\",\n\t//         \"bucketOwnerFullControl\",\n\t//         \"bucketOwnerRead\",\n\t//         \"private\",\n\t//         \"projectPrivate\",\n\t//         \"publicRead\"\n\t//       ],\n\t//       \"enumDescriptions\": [\n\t//         \"Object owner gets OWNER access, and allAuthenticatedUsers get READER access.\",\n\t//         \"Object owner gets OWNER access, and project team owners get OWNER access.\",\n\t//         \"Object owner gets OWNER access, and project team owners get READER access.\",\n\t//         \"Object owner gets OWNER access.\",\n\t//         \"Object owner gets OWNER access, and project team members get access according to their roles.\",\n\t//         \"Object owner gets OWNER access, and allUsers get READER access.\"\n\t//       ],\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"projection\": {\n\t//       \"description\": \"Set of properties to return. Defaults to noAcl, unless the object resource specifies the acl property, when it defaults to full.\",\n\t//       \"enum\": [\n\t//         \"full\",\n\t//         \"noAcl\"\n\t//       ],\n\t//       \"enumDescriptions\": [\n\t//         \"Include all properties.\",\n\t//         \"Omit the owner, acl property.\"\n\t//       ],\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"provisionalUserProject\": {\n\t//       \"description\": \"The project to be billed for this request if the target bucket is requester-pays bucket.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"userProject\": {\n\t//       \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     }\n\t//   },\n\t//   \"path\": \"b/{bucket}/o\",\n\t//   \"request\": {\n\t//     \"$ref\": \"Object\"\n\t//   },\n\t//   \"response\": {\n\t//     \"$ref\": \"Object\"\n\t//   },\n\t//   \"scopes\": [\n\t//     \"https://www.googleapis.com/auth/cloud-platform\",\n\t//     \"https://www.googleapis.com/auth/devstorage.full_control\",\n\t//     \"https://www.googleapis.com/auth/devstorage.read_write\"\n\t//   ],\n\t//   \"supportsMediaUpload\": true\n\t// }\n\n}\n\n// method id \"storage.objects.list\":\n\ntype ObjectsListCall struct {\n\ts            *Service\n\tbucket       string\n\turlParams_   gensupport.URLParams\n\tifNoneMatch_ string\n\tctx_         context.Context\n\theader_      http.Header\n}\n\n// List: Retrieves a list of objects matching the criteria.\nfunc (r *ObjectsService) List(bucket string) *ObjectsListCall {\n\tc := &ObjectsListCall{s: r.s, urlParams_: make(gensupport.URLParams)}\n\tc.bucket = bucket\n\treturn c\n}\n\n// Delimiter sets the optional parameter \"delimiter\": Returns results in\n// a directory-like mode. items will contain only objects whose names,\n// aside from the prefix, do not contain delimiter. Objects whose names,\n// aside from the prefix, contain delimiter will have their name,\n// truncated after the delimiter, returned in prefixes. Duplicate\n// prefixes are omitted.\nfunc (c *ObjectsListCall) Delimiter(delimiter string) *ObjectsListCall {\n\tc.urlParams_.Set(\"delimiter\", delimiter)\n\treturn c\n}\n\n// IncludeTrailingDelimiter sets the optional parameter\n// \"includeTrailingDelimiter\": If true, objects that end in exactly one\n// instance of delimiter will have their metadata included in items in\n// addition to prefixes.\nfunc (c *ObjectsListCall) IncludeTrailingDelimiter(includeTrailingDelimiter bool) *ObjectsListCall {\n\tc.urlParams_.Set(\"includeTrailingDelimiter\", fmt.Sprint(includeTrailingDelimiter))\n\treturn c\n}\n\n// MaxResults sets the optional parameter \"maxResults\": Maximum number\n// of items plus prefixes to return in a single page of responses. As\n// duplicate prefixes are omitted, fewer total results may be returned\n// than requested. The service will use this parameter or 1,000 items,\n// whichever is smaller.\nfunc (c *ObjectsListCall) MaxResults(maxResults int64) *ObjectsListCall {\n\tc.urlParams_.Set(\"maxResults\", fmt.Sprint(maxResults))\n\treturn c\n}\n\n// PageToken sets the optional parameter \"pageToken\": A\n// previously-returned page token representing part of the larger set of\n// results to view.\nfunc (c *ObjectsListCall) PageToken(pageToken string) *ObjectsListCall {\n\tc.urlParams_.Set(\"pageToken\", pageToken)\n\treturn c\n}\n\n// Prefix sets the optional parameter \"prefix\": Filter results to\n// objects whose names begin with this prefix.\nfunc (c *ObjectsListCall) Prefix(prefix string) *ObjectsListCall {\n\tc.urlParams_.Set(\"prefix\", prefix)\n\treturn c\n}\n\n// Projection sets the optional parameter \"projection\": Set of\n// properties to return. Defaults to noAcl.\n//\n// Possible values:\n//   \"full\" - Include all properties.\n//   \"noAcl\" - Omit the owner, acl property.\nfunc (c *ObjectsListCall) Projection(projection string) *ObjectsListCall {\n\tc.urlParams_.Set(\"projection\", projection)\n\treturn c\n}\n\n// ProvisionalUserProject sets the optional parameter\n// \"provisionalUserProject\": The project to be billed for this request\n// if the target bucket is requester-pays bucket.\nfunc (c *ObjectsListCall) ProvisionalUserProject(provisionalUserProject string) *ObjectsListCall {\n\tc.urlParams_.Set(\"provisionalUserProject\", provisionalUserProject)\n\treturn c\n}\n\n// UserProject sets the optional parameter \"userProject\": The project to\n// be billed for this request. Required for Requester Pays buckets.\nfunc (c *ObjectsListCall) UserProject(userProject string) *ObjectsListCall {\n\tc.urlParams_.Set(\"userProject\", userProject)\n\treturn c\n}\n\n// Versions sets the optional parameter \"versions\": If true, lists all\n// versions of an object as distinct results. The default is false. For\n// more information, see Object Versioning.\nfunc (c *ObjectsListCall) Versions(versions bool) *ObjectsListCall {\n\tc.urlParams_.Set(\"versions\", fmt.Sprint(versions))\n\treturn c\n}\n\n// Fields allows partial responses to be retrieved. See\n// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse\n// for more information.\nfunc (c *ObjectsListCall) Fields(s ...googleapi.Field) *ObjectsListCall {\n\tc.urlParams_.Set(\"fields\", googleapi.CombineFields(s))\n\treturn c\n}\n\n// IfNoneMatch sets the optional parameter which makes the operation\n// fail if the object's ETag matches the given value. This is useful for\n// getting updates only after the object has changed since the last\n// request. Use googleapi.IsNotModified to check whether the response\n// error from Do is the result of In-None-Match.\nfunc (c *ObjectsListCall) IfNoneMatch(entityTag string) *ObjectsListCall {\n\tc.ifNoneMatch_ = entityTag\n\treturn c\n}\n\n// Context sets the context to be used in this call's Do method. Any\n// pending HTTP request will be aborted if the provided context is\n// canceled.\nfunc (c *ObjectsListCall) Context(ctx context.Context) *ObjectsListCall {\n\tc.ctx_ = ctx\n\treturn c\n}\n\n// Header returns an http.Header that can be modified by the caller to\n// add HTTP headers to the request.\nfunc (c *ObjectsListCall) Header() http.Header {\n\tif c.header_ == nil {\n\t\tc.header_ = make(http.Header)\n\t}\n\treturn c.header_\n}\n\nfunc (c *ObjectsListCall) doRequest(alt string) (*http.Response, error) {\n\treqHeaders := make(http.Header)\n\tfor k, v := range c.header_ {\n\t\treqHeaders[k] = v\n\t}\n\treqHeaders.Set(\"User-Agent\", c.s.userAgent())\n\tif c.ifNoneMatch_ != \"\" {\n\t\treqHeaders.Set(\"If-None-Match\", c.ifNoneMatch_)\n\t}\n\tvar body io.Reader = nil\n\tc.urlParams_.Set(\"alt\", alt)\n\tc.urlParams_.Set(\"prettyPrint\", \"false\")\n\turls := googleapi.ResolveRelative(c.s.BasePath, \"b/{bucket}/o\")\n\turls += \"?\" + c.urlParams_.Encode()\n\treq, err := http.NewRequest(\"GET\", urls, body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.Header = reqHeaders\n\tgoogleapi.Expand(req.URL, map[string]string{\n\t\t\"bucket\": c.bucket,\n\t})\n\treturn gensupport.SendRequest(c.ctx_, c.s.client, req)\n}\n\n// Do executes the \"storage.objects.list\" call.\n// Exactly one of *Objects or error will be non-nil. Any non-2xx status\n// code is an error. Response headers are in either\n// *Objects.ServerResponse.Header or (if a response was returned at all)\n// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to\n// check whether the returned error was because http.StatusNotModified\n// was returned.\nfunc (c *ObjectsListCall) Do(opts ...googleapi.CallOption) (*Objects, error) {\n\tgensupport.SetOptions(c.urlParams_, opts...)\n\tres, err := c.doRequest(\"json\")\n\tif res != nil && res.StatusCode == http.StatusNotModified {\n\t\tif res.Body != nil {\n\t\t\tres.Body.Close()\n\t\t}\n\t\treturn nil, &googleapi.Error{\n\t\t\tCode:   res.StatusCode,\n\t\t\tHeader: res.Header,\n\t\t}\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer googleapi.CloseBody(res)\n\tif err := googleapi.CheckResponse(res); err != nil {\n\t\treturn nil, err\n\t}\n\tret := &Objects{\n\t\tServerResponse: googleapi.ServerResponse{\n\t\t\tHeader:         res.Header,\n\t\t\tHTTPStatusCode: res.StatusCode,\n\t\t},\n\t}\n\ttarget := &ret\n\tif err := gensupport.DecodeResponse(target, res); err != nil {\n\t\treturn nil, err\n\t}\n\treturn ret, nil\n\t// {\n\t//   \"description\": \"Retrieves a list of objects matching the criteria.\",\n\t//   \"httpMethod\": \"GET\",\n\t//   \"id\": \"storage.objects.list\",\n\t//   \"parameterOrder\": [\n\t//     \"bucket\"\n\t//   ],\n\t//   \"parameters\": {\n\t//     \"bucket\": {\n\t//       \"description\": \"Name of the bucket in which to look for objects.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"delimiter\": {\n\t//       \"description\": \"Returns results in a directory-like mode. items will contain only objects whose names, aside from the prefix, do not contain delimiter. Objects whose names, aside from the prefix, contain delimiter will have their name, truncated after the delimiter, returned in prefixes. Duplicate prefixes are omitted.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"includeTrailingDelimiter\": {\n\t//       \"description\": \"If true, objects that end in exactly one instance of delimiter will have their metadata included in items in addition to prefixes.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"boolean\"\n\t//     },\n\t//     \"maxResults\": {\n\t//       \"default\": \"1000\",\n\t//       \"description\": \"Maximum number of items plus prefixes to return in a single page of responses. As duplicate prefixes are omitted, fewer total results may be returned than requested. The service will use this parameter or 1,000 items, whichever is smaller.\",\n\t//       \"format\": \"uint32\",\n\t//       \"location\": \"query\",\n\t//       \"minimum\": \"0\",\n\t//       \"type\": \"integer\"\n\t//     },\n\t//     \"pageToken\": {\n\t//       \"description\": \"A previously-returned page token representing part of the larger set of results to view.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"prefix\": {\n\t//       \"description\": \"Filter results to objects whose names begin with this prefix.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"projection\": {\n\t//       \"description\": \"Set of properties to return. Defaults to noAcl.\",\n\t//       \"enum\": [\n\t//         \"full\",\n\t//         \"noAcl\"\n\t//       ],\n\t//       \"enumDescriptions\": [\n\t//         \"Include all properties.\",\n\t//         \"Omit the owner, acl property.\"\n\t//       ],\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"provisionalUserProject\": {\n\t//       \"description\": \"The project to be billed for this request if the target bucket is requester-pays bucket.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"userProject\": {\n\t//       \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"versions\": {\n\t//       \"description\": \"If true, lists all versions of an object as distinct results. The default is false. For more information, see Object Versioning.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"boolean\"\n\t//     }\n\t//   },\n\t//   \"path\": \"b/{bucket}/o\",\n\t//   \"response\": {\n\t//     \"$ref\": \"Objects\"\n\t//   },\n\t//   \"scopes\": [\n\t//     \"https://www.googleapis.com/auth/cloud-platform\",\n\t//     \"https://www.googleapis.com/auth/cloud-platform.read-only\",\n\t//     \"https://www.googleapis.com/auth/devstorage.full_control\",\n\t//     \"https://www.googleapis.com/auth/devstorage.read_only\",\n\t//     \"https://www.googleapis.com/auth/devstorage.read_write\"\n\t//   ],\n\t//   \"supportsSubscription\": true\n\t// }\n\n}\n\n// Pages invokes f for each page of results.\n// A non-nil error returned from f will halt the iteration.\n// The provided context supersedes any context provided to the Context method.\nfunc (c *ObjectsListCall) Pages(ctx context.Context, f func(*Objects) error) error {\n\tc.ctx_ = ctx\n\tdefer c.PageToken(c.urlParams_.Get(\"pageToken\")) // reset paging to original point\n\tfor {\n\t\tx, err := c.Do()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif err := f(x); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif x.NextPageToken == \"\" {\n\t\t\treturn nil\n\t\t}\n\t\tc.PageToken(x.NextPageToken)\n\t}\n}\n\n// method id \"storage.objects.patch\":\n\ntype ObjectsPatchCall struct {\n\ts          *Service\n\tbucket     string\n\tobject     string\n\tobject2    *Object\n\turlParams_ gensupport.URLParams\n\tctx_       context.Context\n\theader_    http.Header\n}\n\n// Patch: Patches an object's metadata.\nfunc (r *ObjectsService) Patch(bucket string, object string, object2 *Object) *ObjectsPatchCall {\n\tc := &ObjectsPatchCall{s: r.s, urlParams_: make(gensupport.URLParams)}\n\tc.bucket = bucket\n\tc.object = object\n\tc.object2 = object2\n\treturn c\n}\n\n// Generation sets the optional parameter \"generation\": If present,\n// selects a specific revision of this object (as opposed to the latest\n// version, the default).\nfunc (c *ObjectsPatchCall) Generation(generation int64) *ObjectsPatchCall {\n\tc.urlParams_.Set(\"generation\", fmt.Sprint(generation))\n\treturn c\n}\n\n// IfGenerationMatch sets the optional parameter \"ifGenerationMatch\":\n// Makes the operation conditional on whether the object's current\n// generation matches the given value. Setting to 0 makes the operation\n// succeed only if there are no live versions of the object.\nfunc (c *ObjectsPatchCall) IfGenerationMatch(ifGenerationMatch int64) *ObjectsPatchCall {\n\tc.urlParams_.Set(\"ifGenerationMatch\", fmt.Sprint(ifGenerationMatch))\n\treturn c\n}\n\n// IfGenerationNotMatch sets the optional parameter\n// \"ifGenerationNotMatch\": Makes the operation conditional on whether\n// the object's current generation does not match the given value. If no\n// live object exists, the precondition fails. Setting to 0 makes the\n// operation succeed only if there is a live version of the object.\nfunc (c *ObjectsPatchCall) IfGenerationNotMatch(ifGenerationNotMatch int64) *ObjectsPatchCall {\n\tc.urlParams_.Set(\"ifGenerationNotMatch\", fmt.Sprint(ifGenerationNotMatch))\n\treturn c\n}\n\n// IfMetagenerationMatch sets the optional parameter\n// \"ifMetagenerationMatch\": Makes the operation conditional on whether\n// the object's current metageneration matches the given value.\nfunc (c *ObjectsPatchCall) IfMetagenerationMatch(ifMetagenerationMatch int64) *ObjectsPatchCall {\n\tc.urlParams_.Set(\"ifMetagenerationMatch\", fmt.Sprint(ifMetagenerationMatch))\n\treturn c\n}\n\n// IfMetagenerationNotMatch sets the optional parameter\n// \"ifMetagenerationNotMatch\": Makes the operation conditional on\n// whether the object's current metageneration does not match the given\n// value.\nfunc (c *ObjectsPatchCall) IfMetagenerationNotMatch(ifMetagenerationNotMatch int64) *ObjectsPatchCall {\n\tc.urlParams_.Set(\"ifMetagenerationNotMatch\", fmt.Sprint(ifMetagenerationNotMatch))\n\treturn c\n}\n\n// PredefinedAcl sets the optional parameter \"predefinedAcl\": Apply a\n// predefined set of access controls to this object.\n//\n// Possible values:\n//   \"authenticatedRead\" - Object owner gets OWNER access, and\n// allAuthenticatedUsers get READER access.\n//   \"bucketOwnerFullControl\" - Object owner gets OWNER access, and\n// project team owners get OWNER access.\n//   \"bucketOwnerRead\" - Object owner gets OWNER access, and project\n// team owners get READER access.\n//   \"private\" - Object owner gets OWNER access.\n//   \"projectPrivate\" - Object owner gets OWNER access, and project team\n// members get access according to their roles.\n//   \"publicRead\" - Object owner gets OWNER access, and allUsers get\n// READER access.\nfunc (c *ObjectsPatchCall) PredefinedAcl(predefinedAcl string) *ObjectsPatchCall {\n\tc.urlParams_.Set(\"predefinedAcl\", predefinedAcl)\n\treturn c\n}\n\n// Projection sets the optional parameter \"projection\": Set of\n// properties to return. Defaults to full.\n//\n// Possible values:\n//   \"full\" - Include all properties.\n//   \"noAcl\" - Omit the owner, acl property.\nfunc (c *ObjectsPatchCall) Projection(projection string) *ObjectsPatchCall {\n\tc.urlParams_.Set(\"projection\", projection)\n\treturn c\n}\n\n// ProvisionalUserProject sets the optional parameter\n// \"provisionalUserProject\": The project to be billed for this request\n// if the target bucket is requester-pays bucket.\nfunc (c *ObjectsPatchCall) ProvisionalUserProject(provisionalUserProject string) *ObjectsPatchCall {\n\tc.urlParams_.Set(\"provisionalUserProject\", provisionalUserProject)\n\treturn c\n}\n\n// UserProject sets the optional parameter \"userProject\": The project to\n// be billed for this request, for Requester Pays buckets.\nfunc (c *ObjectsPatchCall) UserProject(userProject string) *ObjectsPatchCall {\n\tc.urlParams_.Set(\"userProject\", userProject)\n\treturn c\n}\n\n// Fields allows partial responses to be retrieved. See\n// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse\n// for more information.\nfunc (c *ObjectsPatchCall) Fields(s ...googleapi.Field) *ObjectsPatchCall {\n\tc.urlParams_.Set(\"fields\", googleapi.CombineFields(s))\n\treturn c\n}\n\n// Context sets the context to be used in this call's Do method. Any\n// pending HTTP request will be aborted if the provided context is\n// canceled.\nfunc (c *ObjectsPatchCall) Context(ctx context.Context) *ObjectsPatchCall {\n\tc.ctx_ = ctx\n\treturn c\n}\n\n// Header returns an http.Header that can be modified by the caller to\n// add HTTP headers to the request.\nfunc (c *ObjectsPatchCall) Header() http.Header {\n\tif c.header_ == nil {\n\t\tc.header_ = make(http.Header)\n\t}\n\treturn c.header_\n}\n\nfunc (c *ObjectsPatchCall) doRequest(alt string) (*http.Response, error) {\n\treqHeaders := make(http.Header)\n\tfor k, v := range c.header_ {\n\t\treqHeaders[k] = v\n\t}\n\treqHeaders.Set(\"User-Agent\", c.s.userAgent())\n\tvar body io.Reader = nil\n\tbody, err := googleapi.WithoutDataWrapper.JSONReader(c.object2)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treqHeaders.Set(\"Content-Type\", \"application/json\")\n\tc.urlParams_.Set(\"alt\", alt)\n\tc.urlParams_.Set(\"prettyPrint\", \"false\")\n\turls := googleapi.ResolveRelative(c.s.BasePath, \"b/{bucket}/o/{object}\")\n\turls += \"?\" + c.urlParams_.Encode()\n\treq, err := http.NewRequest(\"PATCH\", urls, body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.Header = reqHeaders\n\tgoogleapi.Expand(req.URL, map[string]string{\n\t\t\"bucket\": c.bucket,\n\t\t\"object\": c.object,\n\t})\n\treturn gensupport.SendRequest(c.ctx_, c.s.client, req)\n}\n\n// Do executes the \"storage.objects.patch\" call.\n// Exactly one of *Object or error will be non-nil. Any non-2xx status\n// code is an error. Response headers are in either\n// *Object.ServerResponse.Header or (if a response was returned at all)\n// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to\n// check whether the returned error was because http.StatusNotModified\n// was returned.\nfunc (c *ObjectsPatchCall) Do(opts ...googleapi.CallOption) (*Object, error) {\n\tgensupport.SetOptions(c.urlParams_, opts...)\n\tres, err := c.doRequest(\"json\")\n\tif res != nil && res.StatusCode == http.StatusNotModified {\n\t\tif res.Body != nil {\n\t\t\tres.Body.Close()\n\t\t}\n\t\treturn nil, &googleapi.Error{\n\t\t\tCode:   res.StatusCode,\n\t\t\tHeader: res.Header,\n\t\t}\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer googleapi.CloseBody(res)\n\tif err := googleapi.CheckResponse(res); err != nil {\n\t\treturn nil, err\n\t}\n\tret := &Object{\n\t\tServerResponse: googleapi.ServerResponse{\n\t\t\tHeader:         res.Header,\n\t\t\tHTTPStatusCode: res.StatusCode,\n\t\t},\n\t}\n\ttarget := &ret\n\tif err := gensupport.DecodeResponse(target, res); err != nil {\n\t\treturn nil, err\n\t}\n\treturn ret, nil\n\t// {\n\t//   \"description\": \"Patches an object's metadata.\",\n\t//   \"httpMethod\": \"PATCH\",\n\t//   \"id\": \"storage.objects.patch\",\n\t//   \"parameterOrder\": [\n\t//     \"bucket\",\n\t//     \"object\"\n\t//   ],\n\t//   \"parameters\": {\n\t//     \"bucket\": {\n\t//       \"description\": \"Name of the bucket in which the object resides.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"generation\": {\n\t//       \"description\": \"If present, selects a specific revision of this object (as opposed to the latest version, the default).\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"ifGenerationMatch\": {\n\t//       \"description\": \"Makes the operation conditional on whether the object's current generation matches the given value. Setting to 0 makes the operation succeed only if there are no live versions of the object.\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"ifGenerationNotMatch\": {\n\t//       \"description\": \"Makes the operation conditional on whether the object's current generation does not match the given value. If no live object exists, the precondition fails. Setting to 0 makes the operation succeed only if there is a live version of the object.\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"ifMetagenerationMatch\": {\n\t//       \"description\": \"Makes the operation conditional on whether the object's current metageneration matches the given value.\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"ifMetagenerationNotMatch\": {\n\t//       \"description\": \"Makes the operation conditional on whether the object's current metageneration does not match the given value.\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"object\": {\n\t//       \"description\": \"Name of the object. For information about how to URL encode object names to be path safe, see Encoding URI Path Parts.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"predefinedAcl\": {\n\t//       \"description\": \"Apply a predefined set of access controls to this object.\",\n\t//       \"enum\": [\n\t//         \"authenticatedRead\",\n\t//         \"bucketOwnerFullControl\",\n\t//         \"bucketOwnerRead\",\n\t//         \"private\",\n\t//         \"projectPrivate\",\n\t//         \"publicRead\"\n\t//       ],\n\t//       \"enumDescriptions\": [\n\t//         \"Object owner gets OWNER access, and allAuthenticatedUsers get READER access.\",\n\t//         \"Object owner gets OWNER access, and project team owners get OWNER access.\",\n\t//         \"Object owner gets OWNER access, and project team owners get READER access.\",\n\t//         \"Object owner gets OWNER access.\",\n\t//         \"Object owner gets OWNER access, and project team members get access according to their roles.\",\n\t//         \"Object owner gets OWNER access, and allUsers get READER access.\"\n\t//       ],\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"projection\": {\n\t//       \"description\": \"Set of properties to return. Defaults to full.\",\n\t//       \"enum\": [\n\t//         \"full\",\n\t//         \"noAcl\"\n\t//       ],\n\t//       \"enumDescriptions\": [\n\t//         \"Include all properties.\",\n\t//         \"Omit the owner, acl property.\"\n\t//       ],\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"provisionalUserProject\": {\n\t//       \"description\": \"The project to be billed for this request if the target bucket is requester-pays bucket.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"userProject\": {\n\t//       \"description\": \"The project to be billed for this request, for Requester Pays buckets.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     }\n\t//   },\n\t//   \"path\": \"b/{bucket}/o/{object}\",\n\t//   \"request\": {\n\t//     \"$ref\": \"Object\"\n\t//   },\n\t//   \"response\": {\n\t//     \"$ref\": \"Object\"\n\t//   },\n\t//   \"scopes\": [\n\t//     \"https://www.googleapis.com/auth/cloud-platform\",\n\t//     \"https://www.googleapis.com/auth/devstorage.full_control\"\n\t//   ]\n\t// }\n\n}\n\n// method id \"storage.objects.rewrite\":\n\ntype ObjectsRewriteCall struct {\n\ts                 *Service\n\tsourceBucket      string\n\tsourceObject      string\n\tdestinationBucket string\n\tdestinationObject string\n\tobject            *Object\n\turlParams_        gensupport.URLParams\n\tctx_              context.Context\n\theader_           http.Header\n}\n\n// Rewrite: Rewrites a source object to a destination object. Optionally\n// overrides metadata.\nfunc (r *ObjectsService) Rewrite(sourceBucket string, sourceObject string, destinationBucket string, destinationObject string, object *Object) *ObjectsRewriteCall {\n\tc := &ObjectsRewriteCall{s: r.s, urlParams_: make(gensupport.URLParams)}\n\tc.sourceBucket = sourceBucket\n\tc.sourceObject = sourceObject\n\tc.destinationBucket = destinationBucket\n\tc.destinationObject = destinationObject\n\tc.object = object\n\treturn c\n}\n\n// DestinationKmsKeyName sets the optional parameter\n// \"destinationKmsKeyName\": Resource name of the Cloud KMS key, of the\n// form\n// projects/my-project/locations/global/keyRings/my-kr/cryptoKeys/my-key,\n//  that will be used to encrypt the object. Overrides the object\n// metadata's kms_key_name value, if any.\nfunc (c *ObjectsRewriteCall) DestinationKmsKeyName(destinationKmsKeyName string) *ObjectsRewriteCall {\n\tc.urlParams_.Set(\"destinationKmsKeyName\", destinationKmsKeyName)\n\treturn c\n}\n\n// DestinationPredefinedAcl sets the optional parameter\n// \"destinationPredefinedAcl\": Apply a predefined set of access controls\n// to the destination object.\n//\n// Possible values:\n//   \"authenticatedRead\" - Object owner gets OWNER access, and\n// allAuthenticatedUsers get READER access.\n//   \"bucketOwnerFullControl\" - Object owner gets OWNER access, and\n// project team owners get OWNER access.\n//   \"bucketOwnerRead\" - Object owner gets OWNER access, and project\n// team owners get READER access.\n//   \"private\" - Object owner gets OWNER access.\n//   \"projectPrivate\" - Object owner gets OWNER access, and project team\n// members get access according to their roles.\n//   \"publicRead\" - Object owner gets OWNER access, and allUsers get\n// READER access.\nfunc (c *ObjectsRewriteCall) DestinationPredefinedAcl(destinationPredefinedAcl string) *ObjectsRewriteCall {\n\tc.urlParams_.Set(\"destinationPredefinedAcl\", destinationPredefinedAcl)\n\treturn c\n}\n\n// IfGenerationMatch sets the optional parameter \"ifGenerationMatch\":\n// Makes the operation conditional on whether the object's current\n// generation matches the given value. Setting to 0 makes the operation\n// succeed only if there are no live versions of the object.\nfunc (c *ObjectsRewriteCall) IfGenerationMatch(ifGenerationMatch int64) *ObjectsRewriteCall {\n\tc.urlParams_.Set(\"ifGenerationMatch\", fmt.Sprint(ifGenerationMatch))\n\treturn c\n}\n\n// IfGenerationNotMatch sets the optional parameter\n// \"ifGenerationNotMatch\": Makes the operation conditional on whether\n// the object's current generation does not match the given value. If no\n// live object exists, the precondition fails. Setting to 0 makes the\n// operation succeed only if there is a live version of the object.\nfunc (c *ObjectsRewriteCall) IfGenerationNotMatch(ifGenerationNotMatch int64) *ObjectsRewriteCall {\n\tc.urlParams_.Set(\"ifGenerationNotMatch\", fmt.Sprint(ifGenerationNotMatch))\n\treturn c\n}\n\n// IfMetagenerationMatch sets the optional parameter\n// \"ifMetagenerationMatch\": Makes the operation conditional on whether\n// the destination object's current metageneration matches the given\n// value.\nfunc (c *ObjectsRewriteCall) IfMetagenerationMatch(ifMetagenerationMatch int64) *ObjectsRewriteCall {\n\tc.urlParams_.Set(\"ifMetagenerationMatch\", fmt.Sprint(ifMetagenerationMatch))\n\treturn c\n}\n\n// IfMetagenerationNotMatch sets the optional parameter\n// \"ifMetagenerationNotMatch\": Makes the operation conditional on\n// whether the destination object's current metageneration does not\n// match the given value.\nfunc (c *ObjectsRewriteCall) IfMetagenerationNotMatch(ifMetagenerationNotMatch int64) *ObjectsRewriteCall {\n\tc.urlParams_.Set(\"ifMetagenerationNotMatch\", fmt.Sprint(ifMetagenerationNotMatch))\n\treturn c\n}\n\n// IfSourceGenerationMatch sets the optional parameter\n// \"ifSourceGenerationMatch\": Makes the operation conditional on whether\n// the source object's current generation matches the given value.\nfunc (c *ObjectsRewriteCall) IfSourceGenerationMatch(ifSourceGenerationMatch int64) *ObjectsRewriteCall {\n\tc.urlParams_.Set(\"ifSourceGenerationMatch\", fmt.Sprint(ifSourceGenerationMatch))\n\treturn c\n}\n\n// IfSourceGenerationNotMatch sets the optional parameter\n// \"ifSourceGenerationNotMatch\": Makes the operation conditional on\n// whether the source object's current generation does not match the\n// given value.\nfunc (c *ObjectsRewriteCall) IfSourceGenerationNotMatch(ifSourceGenerationNotMatch int64) *ObjectsRewriteCall {\n\tc.urlParams_.Set(\"ifSourceGenerationNotMatch\", fmt.Sprint(ifSourceGenerationNotMatch))\n\treturn c\n}\n\n// IfSourceMetagenerationMatch sets the optional parameter\n// \"ifSourceMetagenerationMatch\": Makes the operation conditional on\n// whether the source object's current metageneration matches the given\n// value.\nfunc (c *ObjectsRewriteCall) IfSourceMetagenerationMatch(ifSourceMetagenerationMatch int64) *ObjectsRewriteCall {\n\tc.urlParams_.Set(\"ifSourceMetagenerationMatch\", fmt.Sprint(ifSourceMetagenerationMatch))\n\treturn c\n}\n\n// IfSourceMetagenerationNotMatch sets the optional parameter\n// \"ifSourceMetagenerationNotMatch\": Makes the operation conditional on\n// whether the source object's current metageneration does not match the\n// given value.\nfunc (c *ObjectsRewriteCall) IfSourceMetagenerationNotMatch(ifSourceMetagenerationNotMatch int64) *ObjectsRewriteCall {\n\tc.urlParams_.Set(\"ifSourceMetagenerationNotMatch\", fmt.Sprint(ifSourceMetagenerationNotMatch))\n\treturn c\n}\n\n// MaxBytesRewrittenPerCall sets the optional parameter\n// \"maxBytesRewrittenPerCall\": The maximum number of bytes that will be\n// rewritten per rewrite request. Most callers shouldn't need to specify\n// this parameter - it is primarily in place to support testing. If\n// specified the value must be an integral multiple of 1 MiB (1048576).\n// Also, this only applies to requests where the source and destination\n// span locations and/or storage classes. Finally, this value must not\n// change across rewrite calls else you'll get an error that the\n// rewriteToken is invalid.\nfunc (c *ObjectsRewriteCall) MaxBytesRewrittenPerCall(maxBytesRewrittenPerCall int64) *ObjectsRewriteCall {\n\tc.urlParams_.Set(\"maxBytesRewrittenPerCall\", fmt.Sprint(maxBytesRewrittenPerCall))\n\treturn c\n}\n\n// Projection sets the optional parameter \"projection\": Set of\n// properties to return. Defaults to noAcl, unless the object resource\n// specifies the acl property, when it defaults to full.\n//\n// Possible values:\n//   \"full\" - Include all properties.\n//   \"noAcl\" - Omit the owner, acl property.\nfunc (c *ObjectsRewriteCall) Projection(projection string) *ObjectsRewriteCall {\n\tc.urlParams_.Set(\"projection\", projection)\n\treturn c\n}\n\n// ProvisionalUserProject sets the optional parameter\n// \"provisionalUserProject\": The project to be billed for this request\n// if the target bucket is requester-pays bucket.\nfunc (c *ObjectsRewriteCall) ProvisionalUserProject(provisionalUserProject string) *ObjectsRewriteCall {\n\tc.urlParams_.Set(\"provisionalUserProject\", provisionalUserProject)\n\treturn c\n}\n\n// RewriteToken sets the optional parameter \"rewriteToken\": Include this\n// field (from the previous rewrite response) on each rewrite request\n// after the first one, until the rewrite response 'done' flag is true.\n// Calls that provide a rewriteToken can omit all other request fields,\n// but if included those fields must match the values provided in the\n// first rewrite request.\nfunc (c *ObjectsRewriteCall) RewriteToken(rewriteToken string) *ObjectsRewriteCall {\n\tc.urlParams_.Set(\"rewriteToken\", rewriteToken)\n\treturn c\n}\n\n// SourceGeneration sets the optional parameter \"sourceGeneration\": If\n// present, selects a specific revision of the source object (as opposed\n// to the latest version, the default).\nfunc (c *ObjectsRewriteCall) SourceGeneration(sourceGeneration int64) *ObjectsRewriteCall {\n\tc.urlParams_.Set(\"sourceGeneration\", fmt.Sprint(sourceGeneration))\n\treturn c\n}\n\n// UserProject sets the optional parameter \"userProject\": The project to\n// be billed for this request. Required for Requester Pays buckets.\nfunc (c *ObjectsRewriteCall) UserProject(userProject string) *ObjectsRewriteCall {\n\tc.urlParams_.Set(\"userProject\", userProject)\n\treturn c\n}\n\n// Fields allows partial responses to be retrieved. See\n// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse\n// for more information.\nfunc (c *ObjectsRewriteCall) Fields(s ...googleapi.Field) *ObjectsRewriteCall {\n\tc.urlParams_.Set(\"fields\", googleapi.CombineFields(s))\n\treturn c\n}\n\n// Context sets the context to be used in this call's Do method. Any\n// pending HTTP request will be aborted if the provided context is\n// canceled.\nfunc (c *ObjectsRewriteCall) Context(ctx context.Context) *ObjectsRewriteCall {\n\tc.ctx_ = ctx\n\treturn c\n}\n\n// Header returns an http.Header that can be modified by the caller to\n// add HTTP headers to the request.\nfunc (c *ObjectsRewriteCall) Header() http.Header {\n\tif c.header_ == nil {\n\t\tc.header_ = make(http.Header)\n\t}\n\treturn c.header_\n}\n\nfunc (c *ObjectsRewriteCall) doRequest(alt string) (*http.Response, error) {\n\treqHeaders := make(http.Header)\n\tfor k, v := range c.header_ {\n\t\treqHeaders[k] = v\n\t}\n\treqHeaders.Set(\"User-Agent\", c.s.userAgent())\n\tvar body io.Reader = nil\n\tbody, err := googleapi.WithoutDataWrapper.JSONReader(c.object)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treqHeaders.Set(\"Content-Type\", \"application/json\")\n\tc.urlParams_.Set(\"alt\", alt)\n\tc.urlParams_.Set(\"prettyPrint\", \"false\")\n\turls := googleapi.ResolveRelative(c.s.BasePath, \"b/{sourceBucket}/o/{sourceObject}/rewriteTo/b/{destinationBucket}/o/{destinationObject}\")\n\turls += \"?\" + c.urlParams_.Encode()\n\treq, err := http.NewRequest(\"POST\", urls, body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.Header = reqHeaders\n\tgoogleapi.Expand(req.URL, map[string]string{\n\t\t\"sourceBucket\":      c.sourceBucket,\n\t\t\"sourceObject\":      c.sourceObject,\n\t\t\"destinationBucket\": c.destinationBucket,\n\t\t\"destinationObject\": c.destinationObject,\n\t})\n\treturn gensupport.SendRequest(c.ctx_, c.s.client, req)\n}\n\n// Do executes the \"storage.objects.rewrite\" call.\n// Exactly one of *RewriteResponse or error will be non-nil. Any non-2xx\n// status code is an error. Response headers are in either\n// *RewriteResponse.ServerResponse.Header or (if a response was returned\n// at all) in error.(*googleapi.Error).Header. Use\n// googleapi.IsNotModified to check whether the returned error was\n// because http.StatusNotModified was returned.\nfunc (c *ObjectsRewriteCall) Do(opts ...googleapi.CallOption) (*RewriteResponse, error) {\n\tgensupport.SetOptions(c.urlParams_, opts...)\n\tres, err := c.doRequest(\"json\")\n\tif res != nil && res.StatusCode == http.StatusNotModified {\n\t\tif res.Body != nil {\n\t\t\tres.Body.Close()\n\t\t}\n\t\treturn nil, &googleapi.Error{\n\t\t\tCode:   res.StatusCode,\n\t\t\tHeader: res.Header,\n\t\t}\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer googleapi.CloseBody(res)\n\tif err := googleapi.CheckResponse(res); err != nil {\n\t\treturn nil, err\n\t}\n\tret := &RewriteResponse{\n\t\tServerResponse: googleapi.ServerResponse{\n\t\t\tHeader:         res.Header,\n\t\t\tHTTPStatusCode: res.StatusCode,\n\t\t},\n\t}\n\ttarget := &ret\n\tif err := gensupport.DecodeResponse(target, res); err != nil {\n\t\treturn nil, err\n\t}\n\treturn ret, nil\n\t// {\n\t//   \"description\": \"Rewrites a source object to a destination object. Optionally overrides metadata.\",\n\t//   \"httpMethod\": \"POST\",\n\t//   \"id\": \"storage.objects.rewrite\",\n\t//   \"parameterOrder\": [\n\t//     \"sourceBucket\",\n\t//     \"sourceObject\",\n\t//     \"destinationBucket\",\n\t//     \"destinationObject\"\n\t//   ],\n\t//   \"parameters\": {\n\t//     \"destinationBucket\": {\n\t//       \"description\": \"Name of the bucket in which to store the new object. Overrides the provided object metadata's bucket value, if any.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"destinationKmsKeyName\": {\n\t//       \"description\": \"Resource name of the Cloud KMS key, of the form projects/my-project/locations/global/keyRings/my-kr/cryptoKeys/my-key, that will be used to encrypt the object. Overrides the object metadata's kms_key_name value, if any.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"destinationObject\": {\n\t//       \"description\": \"Name of the new object. Required when the object metadata is not otherwise provided. Overrides the object metadata's name value, if any. For information about how to URL encode object names to be path safe, see Encoding URI Path Parts.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"destinationPredefinedAcl\": {\n\t//       \"description\": \"Apply a predefined set of access controls to the destination object.\",\n\t//       \"enum\": [\n\t//         \"authenticatedRead\",\n\t//         \"bucketOwnerFullControl\",\n\t//         \"bucketOwnerRead\",\n\t//         \"private\",\n\t//         \"projectPrivate\",\n\t//         \"publicRead\"\n\t//       ],\n\t//       \"enumDescriptions\": [\n\t//         \"Object owner gets OWNER access, and allAuthenticatedUsers get READER access.\",\n\t//         \"Object owner gets OWNER access, and project team owners get OWNER access.\",\n\t//         \"Object owner gets OWNER access, and project team owners get READER access.\",\n\t//         \"Object owner gets OWNER access.\",\n\t//         \"Object owner gets OWNER access, and project team members get access according to their roles.\",\n\t//         \"Object owner gets OWNER access, and allUsers get READER access.\"\n\t//       ],\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"ifGenerationMatch\": {\n\t//       \"description\": \"Makes the operation conditional on whether the object's current generation matches the given value. Setting to 0 makes the operation succeed only if there are no live versions of the object.\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"ifGenerationNotMatch\": {\n\t//       \"description\": \"Makes the operation conditional on whether the object's current generation does not match the given value. If no live object exists, the precondition fails. Setting to 0 makes the operation succeed only if there is a live version of the object.\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"ifMetagenerationMatch\": {\n\t//       \"description\": \"Makes the operation conditional on whether the destination object's current metageneration matches the given value.\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"ifMetagenerationNotMatch\": {\n\t//       \"description\": \"Makes the operation conditional on whether the destination object's current metageneration does not match the given value.\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"ifSourceGenerationMatch\": {\n\t//       \"description\": \"Makes the operation conditional on whether the source object's current generation matches the given value.\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"ifSourceGenerationNotMatch\": {\n\t//       \"description\": \"Makes the operation conditional on whether the source object's current generation does not match the given value.\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"ifSourceMetagenerationMatch\": {\n\t//       \"description\": \"Makes the operation conditional on whether the source object's current metageneration matches the given value.\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"ifSourceMetagenerationNotMatch\": {\n\t//       \"description\": \"Makes the operation conditional on whether the source object's current metageneration does not match the given value.\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"maxBytesRewrittenPerCall\": {\n\t//       \"description\": \"The maximum number of bytes that will be rewritten per rewrite request. Most callers shouldn't need to specify this parameter - it is primarily in place to support testing. If specified the value must be an integral multiple of 1 MiB (1048576). Also, this only applies to requests where the source and destination span locations and/or storage classes. Finally, this value must not change across rewrite calls else you'll get an error that the rewriteToken is invalid.\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"projection\": {\n\t//       \"description\": \"Set of properties to return. Defaults to noAcl, unless the object resource specifies the acl property, when it defaults to full.\",\n\t//       \"enum\": [\n\t//         \"full\",\n\t//         \"noAcl\"\n\t//       ],\n\t//       \"enumDescriptions\": [\n\t//         \"Include all properties.\",\n\t//         \"Omit the owner, acl property.\"\n\t//       ],\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"provisionalUserProject\": {\n\t//       \"description\": \"The project to be billed for this request if the target bucket is requester-pays bucket.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"rewriteToken\": {\n\t//       \"description\": \"Include this field (from the previous rewrite response) on each rewrite request after the first one, until the rewrite response 'done' flag is true. Calls that provide a rewriteToken can omit all other request fields, but if included those fields must match the values provided in the first rewrite request.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"sourceBucket\": {\n\t//       \"description\": \"Name of the bucket in which to find the source object.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"sourceGeneration\": {\n\t//       \"description\": \"If present, selects a specific revision of the source object (as opposed to the latest version, the default).\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"sourceObject\": {\n\t//       \"description\": \"Name of the source object. For information about how to URL encode object names to be path safe, see Encoding URI Path Parts.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"userProject\": {\n\t//       \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     }\n\t//   },\n\t//   \"path\": \"b/{sourceBucket}/o/{sourceObject}/rewriteTo/b/{destinationBucket}/o/{destinationObject}\",\n\t//   \"request\": {\n\t//     \"$ref\": \"Object\"\n\t//   },\n\t//   \"response\": {\n\t//     \"$ref\": \"RewriteResponse\"\n\t//   },\n\t//   \"scopes\": [\n\t//     \"https://www.googleapis.com/auth/cloud-platform\",\n\t//     \"https://www.googleapis.com/auth/devstorage.full_control\",\n\t//     \"https://www.googleapis.com/auth/devstorage.read_write\"\n\t//   ]\n\t// }\n\n}\n\n// method id \"storage.objects.setIamPolicy\":\n\ntype ObjectsSetIamPolicyCall struct {\n\ts          *Service\n\tbucket     string\n\tobject     string\n\tpolicy     *Policy\n\turlParams_ gensupport.URLParams\n\tctx_       context.Context\n\theader_    http.Header\n}\n\n// SetIamPolicy: Updates an IAM policy for the specified object.\nfunc (r *ObjectsService) SetIamPolicy(bucket string, object string, policy *Policy) *ObjectsSetIamPolicyCall {\n\tc := &ObjectsSetIamPolicyCall{s: r.s, urlParams_: make(gensupport.URLParams)}\n\tc.bucket = bucket\n\tc.object = object\n\tc.policy = policy\n\treturn c\n}\n\n// Generation sets the optional parameter \"generation\": If present,\n// selects a specific revision of this object (as opposed to the latest\n// version, the default).\nfunc (c *ObjectsSetIamPolicyCall) Generation(generation int64) *ObjectsSetIamPolicyCall {\n\tc.urlParams_.Set(\"generation\", fmt.Sprint(generation))\n\treturn c\n}\n\n// ProvisionalUserProject sets the optional parameter\n// \"provisionalUserProject\": The project to be billed for this request\n// if the target bucket is requester-pays bucket.\nfunc (c *ObjectsSetIamPolicyCall) ProvisionalUserProject(provisionalUserProject string) *ObjectsSetIamPolicyCall {\n\tc.urlParams_.Set(\"provisionalUserProject\", provisionalUserProject)\n\treturn c\n}\n\n// UserProject sets the optional parameter \"userProject\": The project to\n// be billed for this request. Required for Requester Pays buckets.\nfunc (c *ObjectsSetIamPolicyCall) UserProject(userProject string) *ObjectsSetIamPolicyCall {\n\tc.urlParams_.Set(\"userProject\", userProject)\n\treturn c\n}\n\n// Fields allows partial responses to be retrieved. See\n// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse\n// for more information.\nfunc (c *ObjectsSetIamPolicyCall) Fields(s ...googleapi.Field) *ObjectsSetIamPolicyCall {\n\tc.urlParams_.Set(\"fields\", googleapi.CombineFields(s))\n\treturn c\n}\n\n// Context sets the context to be used in this call's Do method. Any\n// pending HTTP request will be aborted if the provided context is\n// canceled.\nfunc (c *ObjectsSetIamPolicyCall) Context(ctx context.Context) *ObjectsSetIamPolicyCall {\n\tc.ctx_ = ctx\n\treturn c\n}\n\n// Header returns an http.Header that can be modified by the caller to\n// add HTTP headers to the request.\nfunc (c *ObjectsSetIamPolicyCall) Header() http.Header {\n\tif c.header_ == nil {\n\t\tc.header_ = make(http.Header)\n\t}\n\treturn c.header_\n}\n\nfunc (c *ObjectsSetIamPolicyCall) doRequest(alt string) (*http.Response, error) {\n\treqHeaders := make(http.Header)\n\tfor k, v := range c.header_ {\n\t\treqHeaders[k] = v\n\t}\n\treqHeaders.Set(\"User-Agent\", c.s.userAgent())\n\tvar body io.Reader = nil\n\tbody, err := googleapi.WithoutDataWrapper.JSONReader(c.policy)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treqHeaders.Set(\"Content-Type\", \"application/json\")\n\tc.urlParams_.Set(\"alt\", alt)\n\tc.urlParams_.Set(\"prettyPrint\", \"false\")\n\turls := googleapi.ResolveRelative(c.s.BasePath, \"b/{bucket}/o/{object}/iam\")\n\turls += \"?\" + c.urlParams_.Encode()\n\treq, err := http.NewRequest(\"PUT\", urls, body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.Header = reqHeaders\n\tgoogleapi.Expand(req.URL, map[string]string{\n\t\t\"bucket\": c.bucket,\n\t\t\"object\": c.object,\n\t})\n\treturn gensupport.SendRequest(c.ctx_, c.s.client, req)\n}\n\n// Do executes the \"storage.objects.setIamPolicy\" call.\n// Exactly one of *Policy or error will be non-nil. Any non-2xx status\n// code is an error. Response headers are in either\n// *Policy.ServerResponse.Header or (if a response was returned at all)\n// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to\n// check whether the returned error was because http.StatusNotModified\n// was returned.\nfunc (c *ObjectsSetIamPolicyCall) Do(opts ...googleapi.CallOption) (*Policy, error) {\n\tgensupport.SetOptions(c.urlParams_, opts...)\n\tres, err := c.doRequest(\"json\")\n\tif res != nil && res.StatusCode == http.StatusNotModified {\n\t\tif res.Body != nil {\n\t\t\tres.Body.Close()\n\t\t}\n\t\treturn nil, &googleapi.Error{\n\t\t\tCode:   res.StatusCode,\n\t\t\tHeader: res.Header,\n\t\t}\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer googleapi.CloseBody(res)\n\tif err := googleapi.CheckResponse(res); err != nil {\n\t\treturn nil, err\n\t}\n\tret := &Policy{\n\t\tServerResponse: googleapi.ServerResponse{\n\t\t\tHeader:         res.Header,\n\t\t\tHTTPStatusCode: res.StatusCode,\n\t\t},\n\t}\n\ttarget := &ret\n\tif err := gensupport.DecodeResponse(target, res); err != nil {\n\t\treturn nil, err\n\t}\n\treturn ret, nil\n\t// {\n\t//   \"description\": \"Updates an IAM policy for the specified object.\",\n\t//   \"httpMethod\": \"PUT\",\n\t//   \"id\": \"storage.objects.setIamPolicy\",\n\t//   \"parameterOrder\": [\n\t//     \"bucket\",\n\t//     \"object\"\n\t//   ],\n\t//   \"parameters\": {\n\t//     \"bucket\": {\n\t//       \"description\": \"Name of the bucket in which the object resides.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"generation\": {\n\t//       \"description\": \"If present, selects a specific revision of this object (as opposed to the latest version, the default).\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"object\": {\n\t//       \"description\": \"Name of the object. For information about how to URL encode object names to be path safe, see Encoding URI Path Parts.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"provisionalUserProject\": {\n\t//       \"description\": \"The project to be billed for this request if the target bucket is requester-pays bucket.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"userProject\": {\n\t//       \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     }\n\t//   },\n\t//   \"path\": \"b/{bucket}/o/{object}/iam\",\n\t//   \"request\": {\n\t//     \"$ref\": \"Policy\"\n\t//   },\n\t//   \"response\": {\n\t//     \"$ref\": \"Policy\"\n\t//   },\n\t//   \"scopes\": [\n\t//     \"https://www.googleapis.com/auth/cloud-platform\",\n\t//     \"https://www.googleapis.com/auth/devstorage.full_control\",\n\t//     \"https://www.googleapis.com/auth/devstorage.read_write\"\n\t//   ]\n\t// }\n\n}\n\n// method id \"storage.objects.testIamPermissions\":\n\ntype ObjectsTestIamPermissionsCall struct {\n\ts            *Service\n\tbucket       string\n\tobject       string\n\turlParams_   gensupport.URLParams\n\tifNoneMatch_ string\n\tctx_         context.Context\n\theader_      http.Header\n}\n\n// TestIamPermissions: Tests a set of permissions on the given object to\n// see which, if any, are held by the caller.\nfunc (r *ObjectsService) TestIamPermissions(bucket string, object string, permissions []string) *ObjectsTestIamPermissionsCall {\n\tc := &ObjectsTestIamPermissionsCall{s: r.s, urlParams_: make(gensupport.URLParams)}\n\tc.bucket = bucket\n\tc.object = object\n\tc.urlParams_.SetMulti(\"permissions\", append([]string{}, permissions...))\n\treturn c\n}\n\n// Generation sets the optional parameter \"generation\": If present,\n// selects a specific revision of this object (as opposed to the latest\n// version, the default).\nfunc (c *ObjectsTestIamPermissionsCall) Generation(generation int64) *ObjectsTestIamPermissionsCall {\n\tc.urlParams_.Set(\"generation\", fmt.Sprint(generation))\n\treturn c\n}\n\n// ProvisionalUserProject sets the optional parameter\n// \"provisionalUserProject\": The project to be billed for this request\n// if the target bucket is requester-pays bucket.\nfunc (c *ObjectsTestIamPermissionsCall) ProvisionalUserProject(provisionalUserProject string) *ObjectsTestIamPermissionsCall {\n\tc.urlParams_.Set(\"provisionalUserProject\", provisionalUserProject)\n\treturn c\n}\n\n// UserProject sets the optional parameter \"userProject\": The project to\n// be billed for this request. Required for Requester Pays buckets.\nfunc (c *ObjectsTestIamPermissionsCall) UserProject(userProject string) *ObjectsTestIamPermissionsCall {\n\tc.urlParams_.Set(\"userProject\", userProject)\n\treturn c\n}\n\n// Fields allows partial responses to be retrieved. See\n// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse\n// for more information.\nfunc (c *ObjectsTestIamPermissionsCall) Fields(s ...googleapi.Field) *ObjectsTestIamPermissionsCall {\n\tc.urlParams_.Set(\"fields\", googleapi.CombineFields(s))\n\treturn c\n}\n\n// IfNoneMatch sets the optional parameter which makes the operation\n// fail if the object's ETag matches the given value. This is useful for\n// getting updates only after the object has changed since the last\n// request. Use googleapi.IsNotModified to check whether the response\n// error from Do is the result of In-None-Match.\nfunc (c *ObjectsTestIamPermissionsCall) IfNoneMatch(entityTag string) *ObjectsTestIamPermissionsCall {\n\tc.ifNoneMatch_ = entityTag\n\treturn c\n}\n\n// Context sets the context to be used in this call's Do method. Any\n// pending HTTP request will be aborted if the provided context is\n// canceled.\nfunc (c *ObjectsTestIamPermissionsCall) Context(ctx context.Context) *ObjectsTestIamPermissionsCall {\n\tc.ctx_ = ctx\n\treturn c\n}\n\n// Header returns an http.Header that can be modified by the caller to\n// add HTTP headers to the request.\nfunc (c *ObjectsTestIamPermissionsCall) Header() http.Header {\n\tif c.header_ == nil {\n\t\tc.header_ = make(http.Header)\n\t}\n\treturn c.header_\n}\n\nfunc (c *ObjectsTestIamPermissionsCall) doRequest(alt string) (*http.Response, error) {\n\treqHeaders := make(http.Header)\n\tfor k, v := range c.header_ {\n\t\treqHeaders[k] = v\n\t}\n\treqHeaders.Set(\"User-Agent\", c.s.userAgent())\n\tif c.ifNoneMatch_ != \"\" {\n\t\treqHeaders.Set(\"If-None-Match\", c.ifNoneMatch_)\n\t}\n\tvar body io.Reader = nil\n\tc.urlParams_.Set(\"alt\", alt)\n\tc.urlParams_.Set(\"prettyPrint\", \"false\")\n\turls := googleapi.ResolveRelative(c.s.BasePath, \"b/{bucket}/o/{object}/iam/testPermissions\")\n\turls += \"?\" + c.urlParams_.Encode()\n\treq, err := http.NewRequest(\"GET\", urls, body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.Header = reqHeaders\n\tgoogleapi.Expand(req.URL, map[string]string{\n\t\t\"bucket\": c.bucket,\n\t\t\"object\": c.object,\n\t})\n\treturn gensupport.SendRequest(c.ctx_, c.s.client, req)\n}\n\n// Do executes the \"storage.objects.testIamPermissions\" call.\n// Exactly one of *TestIamPermissionsResponse or error will be non-nil.\n// Any non-2xx status code is an error. Response headers are in either\n// *TestIamPermissionsResponse.ServerResponse.Header or (if a response\n// was returned at all) in error.(*googleapi.Error).Header. Use\n// googleapi.IsNotModified to check whether the returned error was\n// because http.StatusNotModified was returned.\nfunc (c *ObjectsTestIamPermissionsCall) Do(opts ...googleapi.CallOption) (*TestIamPermissionsResponse, error) {\n\tgensupport.SetOptions(c.urlParams_, opts...)\n\tres, err := c.doRequest(\"json\")\n\tif res != nil && res.StatusCode == http.StatusNotModified {\n\t\tif res.Body != nil {\n\t\t\tres.Body.Close()\n\t\t}\n\t\treturn nil, &googleapi.Error{\n\t\t\tCode:   res.StatusCode,\n\t\t\tHeader: res.Header,\n\t\t}\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer googleapi.CloseBody(res)\n\tif err := googleapi.CheckResponse(res); err != nil {\n\t\treturn nil, err\n\t}\n\tret := &TestIamPermissionsResponse{\n\t\tServerResponse: googleapi.ServerResponse{\n\t\t\tHeader:         res.Header,\n\t\t\tHTTPStatusCode: res.StatusCode,\n\t\t},\n\t}\n\ttarget := &ret\n\tif err := gensupport.DecodeResponse(target, res); err != nil {\n\t\treturn nil, err\n\t}\n\treturn ret, nil\n\t// {\n\t//   \"description\": \"Tests a set of permissions on the given object to see which, if any, are held by the caller.\",\n\t//   \"httpMethod\": \"GET\",\n\t//   \"id\": \"storage.objects.testIamPermissions\",\n\t//   \"parameterOrder\": [\n\t//     \"bucket\",\n\t//     \"object\",\n\t//     \"permissions\"\n\t//   ],\n\t//   \"parameters\": {\n\t//     \"bucket\": {\n\t//       \"description\": \"Name of the bucket in which the object resides.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"generation\": {\n\t//       \"description\": \"If present, selects a specific revision of this object (as opposed to the latest version, the default).\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"object\": {\n\t//       \"description\": \"Name of the object. For information about how to URL encode object names to be path safe, see Encoding URI Path Parts.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"permissions\": {\n\t//       \"description\": \"Permissions to test.\",\n\t//       \"location\": \"query\",\n\t//       \"repeated\": true,\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"provisionalUserProject\": {\n\t//       \"description\": \"The project to be billed for this request if the target bucket is requester-pays bucket.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"userProject\": {\n\t//       \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     }\n\t//   },\n\t//   \"path\": \"b/{bucket}/o/{object}/iam/testPermissions\",\n\t//   \"response\": {\n\t//     \"$ref\": \"TestIamPermissionsResponse\"\n\t//   },\n\t//   \"scopes\": [\n\t//     \"https://www.googleapis.com/auth/cloud-platform\",\n\t//     \"https://www.googleapis.com/auth/cloud-platform.read-only\",\n\t//     \"https://www.googleapis.com/auth/devstorage.full_control\",\n\t//     \"https://www.googleapis.com/auth/devstorage.read_only\",\n\t//     \"https://www.googleapis.com/auth/devstorage.read_write\"\n\t//   ]\n\t// }\n\n}\n\n// method id \"storage.objects.update\":\n\ntype ObjectsUpdateCall struct {\n\ts          *Service\n\tbucket     string\n\tobject     string\n\tobject2    *Object\n\turlParams_ gensupport.URLParams\n\tctx_       context.Context\n\theader_    http.Header\n}\n\n// Update: Updates an object's metadata.\nfunc (r *ObjectsService) Update(bucket string, object string, object2 *Object) *ObjectsUpdateCall {\n\tc := &ObjectsUpdateCall{s: r.s, urlParams_: make(gensupport.URLParams)}\n\tc.bucket = bucket\n\tc.object = object\n\tc.object2 = object2\n\treturn c\n}\n\n// Generation sets the optional parameter \"generation\": If present,\n// selects a specific revision of this object (as opposed to the latest\n// version, the default).\nfunc (c *ObjectsUpdateCall) Generation(generation int64) *ObjectsUpdateCall {\n\tc.urlParams_.Set(\"generation\", fmt.Sprint(generation))\n\treturn c\n}\n\n// IfGenerationMatch sets the optional parameter \"ifGenerationMatch\":\n// Makes the operation conditional on whether the object's current\n// generation matches the given value. Setting to 0 makes the operation\n// succeed only if there are no live versions of the object.\nfunc (c *ObjectsUpdateCall) IfGenerationMatch(ifGenerationMatch int64) *ObjectsUpdateCall {\n\tc.urlParams_.Set(\"ifGenerationMatch\", fmt.Sprint(ifGenerationMatch))\n\treturn c\n}\n\n// IfGenerationNotMatch sets the optional parameter\n// \"ifGenerationNotMatch\": Makes the operation conditional on whether\n// the object's current generation does not match the given value. If no\n// live object exists, the precondition fails. Setting to 0 makes the\n// operation succeed only if there is a live version of the object.\nfunc (c *ObjectsUpdateCall) IfGenerationNotMatch(ifGenerationNotMatch int64) *ObjectsUpdateCall {\n\tc.urlParams_.Set(\"ifGenerationNotMatch\", fmt.Sprint(ifGenerationNotMatch))\n\treturn c\n}\n\n// IfMetagenerationMatch sets the optional parameter\n// \"ifMetagenerationMatch\": Makes the operation conditional on whether\n// the object's current metageneration matches the given value.\nfunc (c *ObjectsUpdateCall) IfMetagenerationMatch(ifMetagenerationMatch int64) *ObjectsUpdateCall {\n\tc.urlParams_.Set(\"ifMetagenerationMatch\", fmt.Sprint(ifMetagenerationMatch))\n\treturn c\n}\n\n// IfMetagenerationNotMatch sets the optional parameter\n// \"ifMetagenerationNotMatch\": Makes the operation conditional on\n// whether the object's current metageneration does not match the given\n// value.\nfunc (c *ObjectsUpdateCall) IfMetagenerationNotMatch(ifMetagenerationNotMatch int64) *ObjectsUpdateCall {\n\tc.urlParams_.Set(\"ifMetagenerationNotMatch\", fmt.Sprint(ifMetagenerationNotMatch))\n\treturn c\n}\n\n// PredefinedAcl sets the optional parameter \"predefinedAcl\": Apply a\n// predefined set of access controls to this object.\n//\n// Possible values:\n//   \"authenticatedRead\" - Object owner gets OWNER access, and\n// allAuthenticatedUsers get READER access.\n//   \"bucketOwnerFullControl\" - Object owner gets OWNER access, and\n// project team owners get OWNER access.\n//   \"bucketOwnerRead\" - Object owner gets OWNER access, and project\n// team owners get READER access.\n//   \"private\" - Object owner gets OWNER access.\n//   \"projectPrivate\" - Object owner gets OWNER access, and project team\n// members get access according to their roles.\n//   \"publicRead\" - Object owner gets OWNER access, and allUsers get\n// READER access.\nfunc (c *ObjectsUpdateCall) PredefinedAcl(predefinedAcl string) *ObjectsUpdateCall {\n\tc.urlParams_.Set(\"predefinedAcl\", predefinedAcl)\n\treturn c\n}\n\n// Projection sets the optional parameter \"projection\": Set of\n// properties to return. Defaults to full.\n//\n// Possible values:\n//   \"full\" - Include all properties.\n//   \"noAcl\" - Omit the owner, acl property.\nfunc (c *ObjectsUpdateCall) Projection(projection string) *ObjectsUpdateCall {\n\tc.urlParams_.Set(\"projection\", projection)\n\treturn c\n}\n\n// ProvisionalUserProject sets the optional parameter\n// \"provisionalUserProject\": The project to be billed for this request\n// if the target bucket is requester-pays bucket.\nfunc (c *ObjectsUpdateCall) ProvisionalUserProject(provisionalUserProject string) *ObjectsUpdateCall {\n\tc.urlParams_.Set(\"provisionalUserProject\", provisionalUserProject)\n\treturn c\n}\n\n// UserProject sets the optional parameter \"userProject\": The project to\n// be billed for this request. Required for Requester Pays buckets.\nfunc (c *ObjectsUpdateCall) UserProject(userProject string) *ObjectsUpdateCall {\n\tc.urlParams_.Set(\"userProject\", userProject)\n\treturn c\n}\n\n// Fields allows partial responses to be retrieved. See\n// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse\n// for more information.\nfunc (c *ObjectsUpdateCall) Fields(s ...googleapi.Field) *ObjectsUpdateCall {\n\tc.urlParams_.Set(\"fields\", googleapi.CombineFields(s))\n\treturn c\n}\n\n// Context sets the context to be used in this call's Do method. Any\n// pending HTTP request will be aborted if the provided context is\n// canceled.\nfunc (c *ObjectsUpdateCall) Context(ctx context.Context) *ObjectsUpdateCall {\n\tc.ctx_ = ctx\n\treturn c\n}\n\n// Header returns an http.Header that can be modified by the caller to\n// add HTTP headers to the request.\nfunc (c *ObjectsUpdateCall) Header() http.Header {\n\tif c.header_ == nil {\n\t\tc.header_ = make(http.Header)\n\t}\n\treturn c.header_\n}\n\nfunc (c *ObjectsUpdateCall) doRequest(alt string) (*http.Response, error) {\n\treqHeaders := make(http.Header)\n\tfor k, v := range c.header_ {\n\t\treqHeaders[k] = v\n\t}\n\treqHeaders.Set(\"User-Agent\", c.s.userAgent())\n\tvar body io.Reader = nil\n\tbody, err := googleapi.WithoutDataWrapper.JSONReader(c.object2)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treqHeaders.Set(\"Content-Type\", \"application/json\")\n\tc.urlParams_.Set(\"alt\", alt)\n\tc.urlParams_.Set(\"prettyPrint\", \"false\")\n\turls := googleapi.ResolveRelative(c.s.BasePath, \"b/{bucket}/o/{object}\")\n\turls += \"?\" + c.urlParams_.Encode()\n\treq, err := http.NewRequest(\"PUT\", urls, body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.Header = reqHeaders\n\tgoogleapi.Expand(req.URL, map[string]string{\n\t\t\"bucket\": c.bucket,\n\t\t\"object\": c.object,\n\t})\n\treturn gensupport.SendRequest(c.ctx_, c.s.client, req)\n}\n\n// Do executes the \"storage.objects.update\" call.\n// Exactly one of *Object or error will be non-nil. Any non-2xx status\n// code is an error. Response headers are in either\n// *Object.ServerResponse.Header or (if a response was returned at all)\n// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to\n// check whether the returned error was because http.StatusNotModified\n// was returned.\nfunc (c *ObjectsUpdateCall) Do(opts ...googleapi.CallOption) (*Object, error) {\n\tgensupport.SetOptions(c.urlParams_, opts...)\n\tres, err := c.doRequest(\"json\")\n\tif res != nil && res.StatusCode == http.StatusNotModified {\n\t\tif res.Body != nil {\n\t\t\tres.Body.Close()\n\t\t}\n\t\treturn nil, &googleapi.Error{\n\t\t\tCode:   res.StatusCode,\n\t\t\tHeader: res.Header,\n\t\t}\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer googleapi.CloseBody(res)\n\tif err := googleapi.CheckResponse(res); err != nil {\n\t\treturn nil, err\n\t}\n\tret := &Object{\n\t\tServerResponse: googleapi.ServerResponse{\n\t\t\tHeader:         res.Header,\n\t\t\tHTTPStatusCode: res.StatusCode,\n\t\t},\n\t}\n\ttarget := &ret\n\tif err := gensupport.DecodeResponse(target, res); err != nil {\n\t\treturn nil, err\n\t}\n\treturn ret, nil\n\t// {\n\t//   \"description\": \"Updates an object's metadata.\",\n\t//   \"httpMethod\": \"PUT\",\n\t//   \"id\": \"storage.objects.update\",\n\t//   \"parameterOrder\": [\n\t//     \"bucket\",\n\t//     \"object\"\n\t//   ],\n\t//   \"parameters\": {\n\t//     \"bucket\": {\n\t//       \"description\": \"Name of the bucket in which the object resides.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"generation\": {\n\t//       \"description\": \"If present, selects a specific revision of this object (as opposed to the latest version, the default).\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"ifGenerationMatch\": {\n\t//       \"description\": \"Makes the operation conditional on whether the object's current generation matches the given value. Setting to 0 makes the operation succeed only if there are no live versions of the object.\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"ifGenerationNotMatch\": {\n\t//       \"description\": \"Makes the operation conditional on whether the object's current generation does not match the given value. If no live object exists, the precondition fails. Setting to 0 makes the operation succeed only if there is a live version of the object.\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"ifMetagenerationMatch\": {\n\t//       \"description\": \"Makes the operation conditional on whether the object's current metageneration matches the given value.\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"ifMetagenerationNotMatch\": {\n\t//       \"description\": \"Makes the operation conditional on whether the object's current metageneration does not match the given value.\",\n\t//       \"format\": \"int64\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"object\": {\n\t//       \"description\": \"Name of the object. For information about how to URL encode object names to be path safe, see Encoding URI Path Parts.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"predefinedAcl\": {\n\t//       \"description\": \"Apply a predefined set of access controls to this object.\",\n\t//       \"enum\": [\n\t//         \"authenticatedRead\",\n\t//         \"bucketOwnerFullControl\",\n\t//         \"bucketOwnerRead\",\n\t//         \"private\",\n\t//         \"projectPrivate\",\n\t//         \"publicRead\"\n\t//       ],\n\t//       \"enumDescriptions\": [\n\t//         \"Object owner gets OWNER access, and allAuthenticatedUsers get READER access.\",\n\t//         \"Object owner gets OWNER access, and project team owners get OWNER access.\",\n\t//         \"Object owner gets OWNER access, and project team owners get READER access.\",\n\t//         \"Object owner gets OWNER access.\",\n\t//         \"Object owner gets OWNER access, and project team members get access according to their roles.\",\n\t//         \"Object owner gets OWNER access, and allUsers get READER access.\"\n\t//       ],\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"projection\": {\n\t//       \"description\": \"Set of properties to return. Defaults to full.\",\n\t//       \"enum\": [\n\t//         \"full\",\n\t//         \"noAcl\"\n\t//       ],\n\t//       \"enumDescriptions\": [\n\t//         \"Include all properties.\",\n\t//         \"Omit the owner, acl property.\"\n\t//       ],\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"provisionalUserProject\": {\n\t//       \"description\": \"The project to be billed for this request if the target bucket is requester-pays bucket.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"userProject\": {\n\t//       \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     }\n\t//   },\n\t//   \"path\": \"b/{bucket}/o/{object}\",\n\t//   \"request\": {\n\t//     \"$ref\": \"Object\"\n\t//   },\n\t//   \"response\": {\n\t//     \"$ref\": \"Object\"\n\t//   },\n\t//   \"scopes\": [\n\t//     \"https://www.googleapis.com/auth/cloud-platform\",\n\t//     \"https://www.googleapis.com/auth/devstorage.full_control\"\n\t//   ]\n\t// }\n\n}\n\n// method id \"storage.objects.watchAll\":\n\ntype ObjectsWatchAllCall struct {\n\ts          *Service\n\tbucket     string\n\tchannel    *Channel\n\turlParams_ gensupport.URLParams\n\tctx_       context.Context\n\theader_    http.Header\n}\n\n// WatchAll: Watch for changes on all objects in a bucket.\nfunc (r *ObjectsService) WatchAll(bucket string, channel *Channel) *ObjectsWatchAllCall {\n\tc := &ObjectsWatchAllCall{s: r.s, urlParams_: make(gensupport.URLParams)}\n\tc.bucket = bucket\n\tc.channel = channel\n\treturn c\n}\n\n// Delimiter sets the optional parameter \"delimiter\": Returns results in\n// a directory-like mode. items will contain only objects whose names,\n// aside from the prefix, do not contain delimiter. Objects whose names,\n// aside from the prefix, contain delimiter will have their name,\n// truncated after the delimiter, returned in prefixes. Duplicate\n// prefixes are omitted.\nfunc (c *ObjectsWatchAllCall) Delimiter(delimiter string) *ObjectsWatchAllCall {\n\tc.urlParams_.Set(\"delimiter\", delimiter)\n\treturn c\n}\n\n// IncludeTrailingDelimiter sets the optional parameter\n// \"includeTrailingDelimiter\": If true, objects that end in exactly one\n// instance of delimiter will have their metadata included in items in\n// addition to prefixes.\nfunc (c *ObjectsWatchAllCall) IncludeTrailingDelimiter(includeTrailingDelimiter bool) *ObjectsWatchAllCall {\n\tc.urlParams_.Set(\"includeTrailingDelimiter\", fmt.Sprint(includeTrailingDelimiter))\n\treturn c\n}\n\n// MaxResults sets the optional parameter \"maxResults\": Maximum number\n// of items plus prefixes to return in a single page of responses. As\n// duplicate prefixes are omitted, fewer total results may be returned\n// than requested. The service will use this parameter or 1,000 items,\n// whichever is smaller.\nfunc (c *ObjectsWatchAllCall) MaxResults(maxResults int64) *ObjectsWatchAllCall {\n\tc.urlParams_.Set(\"maxResults\", fmt.Sprint(maxResults))\n\treturn c\n}\n\n// PageToken sets the optional parameter \"pageToken\": A\n// previously-returned page token representing part of the larger set of\n// results to view.\nfunc (c *ObjectsWatchAllCall) PageToken(pageToken string) *ObjectsWatchAllCall {\n\tc.urlParams_.Set(\"pageToken\", pageToken)\n\treturn c\n}\n\n// Prefix sets the optional parameter \"prefix\": Filter results to\n// objects whose names begin with this prefix.\nfunc (c *ObjectsWatchAllCall) Prefix(prefix string) *ObjectsWatchAllCall {\n\tc.urlParams_.Set(\"prefix\", prefix)\n\treturn c\n}\n\n// Projection sets the optional parameter \"projection\": Set of\n// properties to return. Defaults to noAcl.\n//\n// Possible values:\n//   \"full\" - Include all properties.\n//   \"noAcl\" - Omit the owner, acl property.\nfunc (c *ObjectsWatchAllCall) Projection(projection string) *ObjectsWatchAllCall {\n\tc.urlParams_.Set(\"projection\", projection)\n\treturn c\n}\n\n// ProvisionalUserProject sets the optional parameter\n// \"provisionalUserProject\": The project to be billed for this request\n// if the target bucket is requester-pays bucket.\nfunc (c *ObjectsWatchAllCall) ProvisionalUserProject(provisionalUserProject string) *ObjectsWatchAllCall {\n\tc.urlParams_.Set(\"provisionalUserProject\", provisionalUserProject)\n\treturn c\n}\n\n// UserProject sets the optional parameter \"userProject\": The project to\n// be billed for this request. Required for Requester Pays buckets.\nfunc (c *ObjectsWatchAllCall) UserProject(userProject string) *ObjectsWatchAllCall {\n\tc.urlParams_.Set(\"userProject\", userProject)\n\treturn c\n}\n\n// Versions sets the optional parameter \"versions\": If true, lists all\n// versions of an object as distinct results. The default is false. For\n// more information, see Object Versioning.\nfunc (c *ObjectsWatchAllCall) Versions(versions bool) *ObjectsWatchAllCall {\n\tc.urlParams_.Set(\"versions\", fmt.Sprint(versions))\n\treturn c\n}\n\n// Fields allows partial responses to be retrieved. See\n// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse\n// for more information.\nfunc (c *ObjectsWatchAllCall) Fields(s ...googleapi.Field) *ObjectsWatchAllCall {\n\tc.urlParams_.Set(\"fields\", googleapi.CombineFields(s))\n\treturn c\n}\n\n// Context sets the context to be used in this call's Do method. Any\n// pending HTTP request will be aborted if the provided context is\n// canceled.\nfunc (c *ObjectsWatchAllCall) Context(ctx context.Context) *ObjectsWatchAllCall {\n\tc.ctx_ = ctx\n\treturn c\n}\n\n// Header returns an http.Header that can be modified by the caller to\n// add HTTP headers to the request.\nfunc (c *ObjectsWatchAllCall) Header() http.Header {\n\tif c.header_ == nil {\n\t\tc.header_ = make(http.Header)\n\t}\n\treturn c.header_\n}\n\nfunc (c *ObjectsWatchAllCall) doRequest(alt string) (*http.Response, error) {\n\treqHeaders := make(http.Header)\n\tfor k, v := range c.header_ {\n\t\treqHeaders[k] = v\n\t}\n\treqHeaders.Set(\"User-Agent\", c.s.userAgent())\n\tvar body io.Reader = nil\n\tbody, err := googleapi.WithoutDataWrapper.JSONReader(c.channel)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treqHeaders.Set(\"Content-Type\", \"application/json\")\n\tc.urlParams_.Set(\"alt\", alt)\n\tc.urlParams_.Set(\"prettyPrint\", \"false\")\n\turls := googleapi.ResolveRelative(c.s.BasePath, \"b/{bucket}/o/watch\")\n\turls += \"?\" + c.urlParams_.Encode()\n\treq, err := http.NewRequest(\"POST\", urls, body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.Header = reqHeaders\n\tgoogleapi.Expand(req.URL, map[string]string{\n\t\t\"bucket\": c.bucket,\n\t})\n\treturn gensupport.SendRequest(c.ctx_, c.s.client, req)\n}\n\n// Do executes the \"storage.objects.watchAll\" call.\n// Exactly one of *Channel or error will be non-nil. Any non-2xx status\n// code is an error. Response headers are in either\n// *Channel.ServerResponse.Header or (if a response was returned at all)\n// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to\n// check whether the returned error was because http.StatusNotModified\n// was returned.\nfunc (c *ObjectsWatchAllCall) Do(opts ...googleapi.CallOption) (*Channel, error) {\n\tgensupport.SetOptions(c.urlParams_, opts...)\n\tres, err := c.doRequest(\"json\")\n\tif res != nil && res.StatusCode == http.StatusNotModified {\n\t\tif res.Body != nil {\n\t\t\tres.Body.Close()\n\t\t}\n\t\treturn nil, &googleapi.Error{\n\t\t\tCode:   res.StatusCode,\n\t\t\tHeader: res.Header,\n\t\t}\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer googleapi.CloseBody(res)\n\tif err := googleapi.CheckResponse(res); err != nil {\n\t\treturn nil, err\n\t}\n\tret := &Channel{\n\t\tServerResponse: googleapi.ServerResponse{\n\t\t\tHeader:         res.Header,\n\t\t\tHTTPStatusCode: res.StatusCode,\n\t\t},\n\t}\n\ttarget := &ret\n\tif err := gensupport.DecodeResponse(target, res); err != nil {\n\t\treturn nil, err\n\t}\n\treturn ret, nil\n\t// {\n\t//   \"description\": \"Watch for changes on all objects in a bucket.\",\n\t//   \"httpMethod\": \"POST\",\n\t//   \"id\": \"storage.objects.watchAll\",\n\t//   \"parameterOrder\": [\n\t//     \"bucket\"\n\t//   ],\n\t//   \"parameters\": {\n\t//     \"bucket\": {\n\t//       \"description\": \"Name of the bucket in which to look for objects.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"delimiter\": {\n\t//       \"description\": \"Returns results in a directory-like mode. items will contain only objects whose names, aside from the prefix, do not contain delimiter. Objects whose names, aside from the prefix, contain delimiter will have their name, truncated after the delimiter, returned in prefixes. Duplicate prefixes are omitted.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"includeTrailingDelimiter\": {\n\t//       \"description\": \"If true, objects that end in exactly one instance of delimiter will have their metadata included in items in addition to prefixes.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"boolean\"\n\t//     },\n\t//     \"maxResults\": {\n\t//       \"default\": \"1000\",\n\t//       \"description\": \"Maximum number of items plus prefixes to return in a single page of responses. As duplicate prefixes are omitted, fewer total results may be returned than requested. The service will use this parameter or 1,000 items, whichever is smaller.\",\n\t//       \"format\": \"uint32\",\n\t//       \"location\": \"query\",\n\t//       \"minimum\": \"0\",\n\t//       \"type\": \"integer\"\n\t//     },\n\t//     \"pageToken\": {\n\t//       \"description\": \"A previously-returned page token representing part of the larger set of results to view.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"prefix\": {\n\t//       \"description\": \"Filter results to objects whose names begin with this prefix.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"projection\": {\n\t//       \"description\": \"Set of properties to return. Defaults to noAcl.\",\n\t//       \"enum\": [\n\t//         \"full\",\n\t//         \"noAcl\"\n\t//       ],\n\t//       \"enumDescriptions\": [\n\t//         \"Include all properties.\",\n\t//         \"Omit the owner, acl property.\"\n\t//       ],\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"provisionalUserProject\": {\n\t//       \"description\": \"The project to be billed for this request if the target bucket is requester-pays bucket.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"userProject\": {\n\t//       \"description\": \"The project to be billed for this request. Required for Requester Pays buckets.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"versions\": {\n\t//       \"description\": \"If true, lists all versions of an object as distinct results. The default is false. For more information, see Object Versioning.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"boolean\"\n\t//     }\n\t//   },\n\t//   \"path\": \"b/{bucket}/o/watch\",\n\t//   \"request\": {\n\t//     \"$ref\": \"Channel\",\n\t//     \"parameterName\": \"resource\"\n\t//   },\n\t//   \"response\": {\n\t//     \"$ref\": \"Channel\"\n\t//   },\n\t//   \"scopes\": [\n\t//     \"https://www.googleapis.com/auth/cloud-platform\",\n\t//     \"https://www.googleapis.com/auth/cloud-platform.read-only\",\n\t//     \"https://www.googleapis.com/auth/devstorage.full_control\",\n\t//     \"https://www.googleapis.com/auth/devstorage.read_only\",\n\t//     \"https://www.googleapis.com/auth/devstorage.read_write\"\n\t//   ],\n\t//   \"supportsSubscription\": true\n\t// }\n\n}\n\n// method id \"storage.projects.hmacKeys.create\":\n\ntype ProjectsHmacKeysCreateCall struct {\n\ts          *Service\n\tprojectId  string\n\turlParams_ gensupport.URLParams\n\tctx_       context.Context\n\theader_    http.Header\n}\n\n// Create: Creates a new HMAC key for the specified service account.\nfunc (r *ProjectsHmacKeysService) Create(projectId string, serviceAccountEmail string) *ProjectsHmacKeysCreateCall {\n\tc := &ProjectsHmacKeysCreateCall{s: r.s, urlParams_: make(gensupport.URLParams)}\n\tc.projectId = projectId\n\tc.urlParams_.Set(\"serviceAccountEmail\", serviceAccountEmail)\n\treturn c\n}\n\n// UserProject sets the optional parameter \"userProject\": The project to\n// be billed for this request.\nfunc (c *ProjectsHmacKeysCreateCall) UserProject(userProject string) *ProjectsHmacKeysCreateCall {\n\tc.urlParams_.Set(\"userProject\", userProject)\n\treturn c\n}\n\n// Fields allows partial responses to be retrieved. See\n// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse\n// for more information.\nfunc (c *ProjectsHmacKeysCreateCall) Fields(s ...googleapi.Field) *ProjectsHmacKeysCreateCall {\n\tc.urlParams_.Set(\"fields\", googleapi.CombineFields(s))\n\treturn c\n}\n\n// Context sets the context to be used in this call's Do method. Any\n// pending HTTP request will be aborted if the provided context is\n// canceled.\nfunc (c *ProjectsHmacKeysCreateCall) Context(ctx context.Context) *ProjectsHmacKeysCreateCall {\n\tc.ctx_ = ctx\n\treturn c\n}\n\n// Header returns an http.Header that can be modified by the caller to\n// add HTTP headers to the request.\nfunc (c *ProjectsHmacKeysCreateCall) Header() http.Header {\n\tif c.header_ == nil {\n\t\tc.header_ = make(http.Header)\n\t}\n\treturn c.header_\n}\n\nfunc (c *ProjectsHmacKeysCreateCall) doRequest(alt string) (*http.Response, error) {\n\treqHeaders := make(http.Header)\n\tfor k, v := range c.header_ {\n\t\treqHeaders[k] = v\n\t}\n\treqHeaders.Set(\"User-Agent\", c.s.userAgent())\n\tvar body io.Reader = nil\n\tc.urlParams_.Set(\"alt\", alt)\n\tc.urlParams_.Set(\"prettyPrint\", \"false\")\n\turls := googleapi.ResolveRelative(c.s.BasePath, \"projects/{projectId}/hmacKeys\")\n\turls += \"?\" + c.urlParams_.Encode()\n\treq, err := http.NewRequest(\"POST\", urls, body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.Header = reqHeaders\n\tgoogleapi.Expand(req.URL, map[string]string{\n\t\t\"projectId\": c.projectId,\n\t})\n\treturn gensupport.SendRequest(c.ctx_, c.s.client, req)\n}\n\n// Do executes the \"storage.projects.hmacKeys.create\" call.\n// Exactly one of *HmacKey or error will be non-nil. Any non-2xx status\n// code is an error. Response headers are in either\n// *HmacKey.ServerResponse.Header or (if a response was returned at all)\n// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to\n// check whether the returned error was because http.StatusNotModified\n// was returned.\nfunc (c *ProjectsHmacKeysCreateCall) Do(opts ...googleapi.CallOption) (*HmacKey, error) {\n\tgensupport.SetOptions(c.urlParams_, opts...)\n\tres, err := c.doRequest(\"json\")\n\tif res != nil && res.StatusCode == http.StatusNotModified {\n\t\tif res.Body != nil {\n\t\t\tres.Body.Close()\n\t\t}\n\t\treturn nil, &googleapi.Error{\n\t\t\tCode:   res.StatusCode,\n\t\t\tHeader: res.Header,\n\t\t}\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer googleapi.CloseBody(res)\n\tif err := googleapi.CheckResponse(res); err != nil {\n\t\treturn nil, err\n\t}\n\tret := &HmacKey{\n\t\tServerResponse: googleapi.ServerResponse{\n\t\t\tHeader:         res.Header,\n\t\t\tHTTPStatusCode: res.StatusCode,\n\t\t},\n\t}\n\ttarget := &ret\n\tif err := gensupport.DecodeResponse(target, res); err != nil {\n\t\treturn nil, err\n\t}\n\treturn ret, nil\n\t// {\n\t//   \"description\": \"Creates a new HMAC key for the specified service account.\",\n\t//   \"httpMethod\": \"POST\",\n\t//   \"id\": \"storage.projects.hmacKeys.create\",\n\t//   \"parameterOrder\": [\n\t//     \"projectId\",\n\t//     \"serviceAccountEmail\"\n\t//   ],\n\t//   \"parameters\": {\n\t//     \"projectId\": {\n\t//       \"description\": \"Project ID owning the service account.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"serviceAccountEmail\": {\n\t//       \"description\": \"Email address of the service account.\",\n\t//       \"location\": \"query\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"userProject\": {\n\t//       \"description\": \"The project to be billed for this request.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     }\n\t//   },\n\t//   \"path\": \"projects/{projectId}/hmacKeys\",\n\t//   \"response\": {\n\t//     \"$ref\": \"HmacKey\"\n\t//   },\n\t//   \"scopes\": [\n\t//     \"https://www.googleapis.com/auth/cloud-platform\",\n\t//     \"https://www.googleapis.com/auth/devstorage.full_control\"\n\t//   ]\n\t// }\n\n}\n\n// method id \"storage.projects.hmacKeys.delete\":\n\ntype ProjectsHmacKeysDeleteCall struct {\n\ts          *Service\n\tprojectId  string\n\taccessId   string\n\turlParams_ gensupport.URLParams\n\tctx_       context.Context\n\theader_    http.Header\n}\n\n// Delete: Deletes an HMAC key.\nfunc (r *ProjectsHmacKeysService) Delete(projectId string, accessId string) *ProjectsHmacKeysDeleteCall {\n\tc := &ProjectsHmacKeysDeleteCall{s: r.s, urlParams_: make(gensupport.URLParams)}\n\tc.projectId = projectId\n\tc.accessId = accessId\n\treturn c\n}\n\n// UserProject sets the optional parameter \"userProject\": The project to\n// be billed for this request.\nfunc (c *ProjectsHmacKeysDeleteCall) UserProject(userProject string) *ProjectsHmacKeysDeleteCall {\n\tc.urlParams_.Set(\"userProject\", userProject)\n\treturn c\n}\n\n// Fields allows partial responses to be retrieved. See\n// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse\n// for more information.\nfunc (c *ProjectsHmacKeysDeleteCall) Fields(s ...googleapi.Field) *ProjectsHmacKeysDeleteCall {\n\tc.urlParams_.Set(\"fields\", googleapi.CombineFields(s))\n\treturn c\n}\n\n// Context sets the context to be used in this call's Do method. Any\n// pending HTTP request will be aborted if the provided context is\n// canceled.\nfunc (c *ProjectsHmacKeysDeleteCall) Context(ctx context.Context) *ProjectsHmacKeysDeleteCall {\n\tc.ctx_ = ctx\n\treturn c\n}\n\n// Header returns an http.Header that can be modified by the caller to\n// add HTTP headers to the request.\nfunc (c *ProjectsHmacKeysDeleteCall) Header() http.Header {\n\tif c.header_ == nil {\n\t\tc.header_ = make(http.Header)\n\t}\n\treturn c.header_\n}\n\nfunc (c *ProjectsHmacKeysDeleteCall) doRequest(alt string) (*http.Response, error) {\n\treqHeaders := make(http.Header)\n\tfor k, v := range c.header_ {\n\t\treqHeaders[k] = v\n\t}\n\treqHeaders.Set(\"User-Agent\", c.s.userAgent())\n\tvar body io.Reader = nil\n\tc.urlParams_.Set(\"alt\", alt)\n\tc.urlParams_.Set(\"prettyPrint\", \"false\")\n\turls := googleapi.ResolveRelative(c.s.BasePath, \"projects/{projectId}/hmacKeys/{accessId}\")\n\turls += \"?\" + c.urlParams_.Encode()\n\treq, err := http.NewRequest(\"DELETE\", urls, body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.Header = reqHeaders\n\tgoogleapi.Expand(req.URL, map[string]string{\n\t\t\"projectId\": c.projectId,\n\t\t\"accessId\":  c.accessId,\n\t})\n\treturn gensupport.SendRequest(c.ctx_, c.s.client, req)\n}\n\n// Do executes the \"storage.projects.hmacKeys.delete\" call.\nfunc (c *ProjectsHmacKeysDeleteCall) Do(opts ...googleapi.CallOption) error {\n\tgensupport.SetOptions(c.urlParams_, opts...)\n\tres, err := c.doRequest(\"json\")\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer googleapi.CloseBody(res)\n\tif err := googleapi.CheckResponse(res); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n\t// {\n\t//   \"description\": \"Deletes an HMAC key.\",\n\t//   \"httpMethod\": \"DELETE\",\n\t//   \"id\": \"storage.projects.hmacKeys.delete\",\n\t//   \"parameterOrder\": [\n\t//     \"projectId\",\n\t//     \"accessId\"\n\t//   ],\n\t//   \"parameters\": {\n\t//     \"accessId\": {\n\t//       \"description\": \"Name of the HMAC key to be deleted.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"projectId\": {\n\t//       \"description\": \"Project ID owning the requested key\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"userProject\": {\n\t//       \"description\": \"The project to be billed for this request.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     }\n\t//   },\n\t//   \"path\": \"projects/{projectId}/hmacKeys/{accessId}\",\n\t//   \"scopes\": [\n\t//     \"https://www.googleapis.com/auth/cloud-platform\",\n\t//     \"https://www.googleapis.com/auth/devstorage.full_control\",\n\t//     \"https://www.googleapis.com/auth/devstorage.read_write\"\n\t//   ]\n\t// }\n\n}\n\n// method id \"storage.projects.hmacKeys.get\":\n\ntype ProjectsHmacKeysGetCall struct {\n\ts            *Service\n\tprojectId    string\n\taccessId     string\n\turlParams_   gensupport.URLParams\n\tifNoneMatch_ string\n\tctx_         context.Context\n\theader_      http.Header\n}\n\n// Get: Retrieves an HMAC key's metadata\nfunc (r *ProjectsHmacKeysService) Get(projectId string, accessId string) *ProjectsHmacKeysGetCall {\n\tc := &ProjectsHmacKeysGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}\n\tc.projectId = projectId\n\tc.accessId = accessId\n\treturn c\n}\n\n// UserProject sets the optional parameter \"userProject\": The project to\n// be billed for this request.\nfunc (c *ProjectsHmacKeysGetCall) UserProject(userProject string) *ProjectsHmacKeysGetCall {\n\tc.urlParams_.Set(\"userProject\", userProject)\n\treturn c\n}\n\n// Fields allows partial responses to be retrieved. See\n// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse\n// for more information.\nfunc (c *ProjectsHmacKeysGetCall) Fields(s ...googleapi.Field) *ProjectsHmacKeysGetCall {\n\tc.urlParams_.Set(\"fields\", googleapi.CombineFields(s))\n\treturn c\n}\n\n// IfNoneMatch sets the optional parameter which makes the operation\n// fail if the object's ETag matches the given value. This is useful for\n// getting updates only after the object has changed since the last\n// request. Use googleapi.IsNotModified to check whether the response\n// error from Do is the result of In-None-Match.\nfunc (c *ProjectsHmacKeysGetCall) IfNoneMatch(entityTag string) *ProjectsHmacKeysGetCall {\n\tc.ifNoneMatch_ = entityTag\n\treturn c\n}\n\n// Context sets the context to be used in this call's Do method. Any\n// pending HTTP request will be aborted if the provided context is\n// canceled.\nfunc (c *ProjectsHmacKeysGetCall) Context(ctx context.Context) *ProjectsHmacKeysGetCall {\n\tc.ctx_ = ctx\n\treturn c\n}\n\n// Header returns an http.Header that can be modified by the caller to\n// add HTTP headers to the request.\nfunc (c *ProjectsHmacKeysGetCall) Header() http.Header {\n\tif c.header_ == nil {\n\t\tc.header_ = make(http.Header)\n\t}\n\treturn c.header_\n}\n\nfunc (c *ProjectsHmacKeysGetCall) doRequest(alt string) (*http.Response, error) {\n\treqHeaders := make(http.Header)\n\tfor k, v := range c.header_ {\n\t\treqHeaders[k] = v\n\t}\n\treqHeaders.Set(\"User-Agent\", c.s.userAgent())\n\tif c.ifNoneMatch_ != \"\" {\n\t\treqHeaders.Set(\"If-None-Match\", c.ifNoneMatch_)\n\t}\n\tvar body io.Reader = nil\n\tc.urlParams_.Set(\"alt\", alt)\n\tc.urlParams_.Set(\"prettyPrint\", \"false\")\n\turls := googleapi.ResolveRelative(c.s.BasePath, \"projects/{projectId}/hmacKeys/{accessId}\")\n\turls += \"?\" + c.urlParams_.Encode()\n\treq, err := http.NewRequest(\"GET\", urls, body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.Header = reqHeaders\n\tgoogleapi.Expand(req.URL, map[string]string{\n\t\t\"projectId\": c.projectId,\n\t\t\"accessId\":  c.accessId,\n\t})\n\treturn gensupport.SendRequest(c.ctx_, c.s.client, req)\n}\n\n// Do executes the \"storage.projects.hmacKeys.get\" call.\n// Exactly one of *HmacKeyMetadata or error will be non-nil. Any non-2xx\n// status code is an error. Response headers are in either\n// *HmacKeyMetadata.ServerResponse.Header or (if a response was returned\n// at all) in error.(*googleapi.Error).Header. Use\n// googleapi.IsNotModified to check whether the returned error was\n// because http.StatusNotModified was returned.\nfunc (c *ProjectsHmacKeysGetCall) Do(opts ...googleapi.CallOption) (*HmacKeyMetadata, error) {\n\tgensupport.SetOptions(c.urlParams_, opts...)\n\tres, err := c.doRequest(\"json\")\n\tif res != nil && res.StatusCode == http.StatusNotModified {\n\t\tif res.Body != nil {\n\t\t\tres.Body.Close()\n\t\t}\n\t\treturn nil, &googleapi.Error{\n\t\t\tCode:   res.StatusCode,\n\t\t\tHeader: res.Header,\n\t\t}\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer googleapi.CloseBody(res)\n\tif err := googleapi.CheckResponse(res); err != nil {\n\t\treturn nil, err\n\t}\n\tret := &HmacKeyMetadata{\n\t\tServerResponse: googleapi.ServerResponse{\n\t\t\tHeader:         res.Header,\n\t\t\tHTTPStatusCode: res.StatusCode,\n\t\t},\n\t}\n\ttarget := &ret\n\tif err := gensupport.DecodeResponse(target, res); err != nil {\n\t\treturn nil, err\n\t}\n\treturn ret, nil\n\t// {\n\t//   \"description\": \"Retrieves an HMAC key's metadata\",\n\t//   \"httpMethod\": \"GET\",\n\t//   \"id\": \"storage.projects.hmacKeys.get\",\n\t//   \"parameterOrder\": [\n\t//     \"projectId\",\n\t//     \"accessId\"\n\t//   ],\n\t//   \"parameters\": {\n\t//     \"accessId\": {\n\t//       \"description\": \"Name of the HMAC key.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"projectId\": {\n\t//       \"description\": \"Project ID owning the service account of the requested key.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"userProject\": {\n\t//       \"description\": \"The project to be billed for this request.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     }\n\t//   },\n\t//   \"path\": \"projects/{projectId}/hmacKeys/{accessId}\",\n\t//   \"response\": {\n\t//     \"$ref\": \"HmacKeyMetadata\"\n\t//   },\n\t//   \"scopes\": [\n\t//     \"https://www.googleapis.com/auth/cloud-platform\",\n\t//     \"https://www.googleapis.com/auth/cloud-platform.read-only\",\n\t//     \"https://www.googleapis.com/auth/devstorage.read_only\"\n\t//   ]\n\t// }\n\n}\n\n// method id \"storage.projects.hmacKeys.list\":\n\ntype ProjectsHmacKeysListCall struct {\n\ts            *Service\n\tprojectId    string\n\turlParams_   gensupport.URLParams\n\tifNoneMatch_ string\n\tctx_         context.Context\n\theader_      http.Header\n}\n\n// List: Retrieves a list of HMAC keys matching the criteria.\nfunc (r *ProjectsHmacKeysService) List(projectId string) *ProjectsHmacKeysListCall {\n\tc := &ProjectsHmacKeysListCall{s: r.s, urlParams_: make(gensupport.URLParams)}\n\tc.projectId = projectId\n\treturn c\n}\n\n// MaxResults sets the optional parameter \"maxResults\": Maximum number\n// of items to return in a single page of responses. The service uses\n// this parameter or 250 items, whichever is smaller. The max number of\n// items per page will also be limited by the number of distinct service\n// accounts in the response. If the number of service accounts in a\n// single response is too high, the page will truncated and a next page\n// token will be returned.\nfunc (c *ProjectsHmacKeysListCall) MaxResults(maxResults int64) *ProjectsHmacKeysListCall {\n\tc.urlParams_.Set(\"maxResults\", fmt.Sprint(maxResults))\n\treturn c\n}\n\n// PageToken sets the optional parameter \"pageToken\": A\n// previously-returned page token representing part of the larger set of\n// results to view.\nfunc (c *ProjectsHmacKeysListCall) PageToken(pageToken string) *ProjectsHmacKeysListCall {\n\tc.urlParams_.Set(\"pageToken\", pageToken)\n\treturn c\n}\n\n// ServiceAccountEmail sets the optional parameter\n// \"serviceAccountEmail\": If present, only keys for the given service\n// account are returned.\nfunc (c *ProjectsHmacKeysListCall) ServiceAccountEmail(serviceAccountEmail string) *ProjectsHmacKeysListCall {\n\tc.urlParams_.Set(\"serviceAccountEmail\", serviceAccountEmail)\n\treturn c\n}\n\n// ShowDeletedKeys sets the optional parameter \"showDeletedKeys\":\n// Whether or not to show keys in the DELETED state.\nfunc (c *ProjectsHmacKeysListCall) ShowDeletedKeys(showDeletedKeys bool) *ProjectsHmacKeysListCall {\n\tc.urlParams_.Set(\"showDeletedKeys\", fmt.Sprint(showDeletedKeys))\n\treturn c\n}\n\n// UserProject sets the optional parameter \"userProject\": The project to\n// be billed for this request.\nfunc (c *ProjectsHmacKeysListCall) UserProject(userProject string) *ProjectsHmacKeysListCall {\n\tc.urlParams_.Set(\"userProject\", userProject)\n\treturn c\n}\n\n// Fields allows partial responses to be retrieved. See\n// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse\n// for more information.\nfunc (c *ProjectsHmacKeysListCall) Fields(s ...googleapi.Field) *ProjectsHmacKeysListCall {\n\tc.urlParams_.Set(\"fields\", googleapi.CombineFields(s))\n\treturn c\n}\n\n// IfNoneMatch sets the optional parameter which makes the operation\n// fail if the object's ETag matches the given value. This is useful for\n// getting updates only after the object has changed since the last\n// request. Use googleapi.IsNotModified to check whether the response\n// error from Do is the result of In-None-Match.\nfunc (c *ProjectsHmacKeysListCall) IfNoneMatch(entityTag string) *ProjectsHmacKeysListCall {\n\tc.ifNoneMatch_ = entityTag\n\treturn c\n}\n\n// Context sets the context to be used in this call's Do method. Any\n// pending HTTP request will be aborted if the provided context is\n// canceled.\nfunc (c *ProjectsHmacKeysListCall) Context(ctx context.Context) *ProjectsHmacKeysListCall {\n\tc.ctx_ = ctx\n\treturn c\n}\n\n// Header returns an http.Header that can be modified by the caller to\n// add HTTP headers to the request.\nfunc (c *ProjectsHmacKeysListCall) Header() http.Header {\n\tif c.header_ == nil {\n\t\tc.header_ = make(http.Header)\n\t}\n\treturn c.header_\n}\n\nfunc (c *ProjectsHmacKeysListCall) doRequest(alt string) (*http.Response, error) {\n\treqHeaders := make(http.Header)\n\tfor k, v := range c.header_ {\n\t\treqHeaders[k] = v\n\t}\n\treqHeaders.Set(\"User-Agent\", c.s.userAgent())\n\tif c.ifNoneMatch_ != \"\" {\n\t\treqHeaders.Set(\"If-None-Match\", c.ifNoneMatch_)\n\t}\n\tvar body io.Reader = nil\n\tc.urlParams_.Set(\"alt\", alt)\n\tc.urlParams_.Set(\"prettyPrint\", \"false\")\n\turls := googleapi.ResolveRelative(c.s.BasePath, \"projects/{projectId}/hmacKeys\")\n\turls += \"?\" + c.urlParams_.Encode()\n\treq, err := http.NewRequest(\"GET\", urls, body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.Header = reqHeaders\n\tgoogleapi.Expand(req.URL, map[string]string{\n\t\t\"projectId\": c.projectId,\n\t})\n\treturn gensupport.SendRequest(c.ctx_, c.s.client, req)\n}\n\n// Do executes the \"storage.projects.hmacKeys.list\" call.\n// Exactly one of *HmacKeysMetadata or error will be non-nil. Any\n// non-2xx status code is an error. Response headers are in either\n// *HmacKeysMetadata.ServerResponse.Header or (if a response was\n// returned at all) in error.(*googleapi.Error).Header. Use\n// googleapi.IsNotModified to check whether the returned error was\n// because http.StatusNotModified was returned.\nfunc (c *ProjectsHmacKeysListCall) Do(opts ...googleapi.CallOption) (*HmacKeysMetadata, error) {\n\tgensupport.SetOptions(c.urlParams_, opts...)\n\tres, err := c.doRequest(\"json\")\n\tif res != nil && res.StatusCode == http.StatusNotModified {\n\t\tif res.Body != nil {\n\t\t\tres.Body.Close()\n\t\t}\n\t\treturn nil, &googleapi.Error{\n\t\t\tCode:   res.StatusCode,\n\t\t\tHeader: res.Header,\n\t\t}\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer googleapi.CloseBody(res)\n\tif err := googleapi.CheckResponse(res); err != nil {\n\t\treturn nil, err\n\t}\n\tret := &HmacKeysMetadata{\n\t\tServerResponse: googleapi.ServerResponse{\n\t\t\tHeader:         res.Header,\n\t\t\tHTTPStatusCode: res.StatusCode,\n\t\t},\n\t}\n\ttarget := &ret\n\tif err := gensupport.DecodeResponse(target, res); err != nil {\n\t\treturn nil, err\n\t}\n\treturn ret, nil\n\t// {\n\t//   \"description\": \"Retrieves a list of HMAC keys matching the criteria.\",\n\t//   \"httpMethod\": \"GET\",\n\t//   \"id\": \"storage.projects.hmacKeys.list\",\n\t//   \"parameterOrder\": [\n\t//     \"projectId\"\n\t//   ],\n\t//   \"parameters\": {\n\t//     \"maxResults\": {\n\t//       \"default\": \"250\",\n\t//       \"description\": \"Maximum number of items to return in a single page of responses. The service uses this parameter or 250 items, whichever is smaller. The max number of items per page will also be limited by the number of distinct service accounts in the response. If the number of service accounts in a single response is too high, the page will truncated and a next page token will be returned.\",\n\t//       \"format\": \"uint32\",\n\t//       \"location\": \"query\",\n\t//       \"minimum\": \"0\",\n\t//       \"type\": \"integer\"\n\t//     },\n\t//     \"pageToken\": {\n\t//       \"description\": \"A previously-returned page token representing part of the larger set of results to view.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"projectId\": {\n\t//       \"description\": \"Name of the project in which to look for HMAC keys.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"serviceAccountEmail\": {\n\t//       \"description\": \"If present, only keys for the given service account are returned.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"showDeletedKeys\": {\n\t//       \"description\": \"Whether or not to show keys in the DELETED state.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"boolean\"\n\t//     },\n\t//     \"userProject\": {\n\t//       \"description\": \"The project to be billed for this request.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     }\n\t//   },\n\t//   \"path\": \"projects/{projectId}/hmacKeys\",\n\t//   \"response\": {\n\t//     \"$ref\": \"HmacKeysMetadata\"\n\t//   },\n\t//   \"scopes\": [\n\t//     \"https://www.googleapis.com/auth/cloud-platform\",\n\t//     \"https://www.googleapis.com/auth/cloud-platform.read-only\",\n\t//     \"https://www.googleapis.com/auth/devstorage.full_control\",\n\t//     \"https://www.googleapis.com/auth/devstorage.read_only\"\n\t//   ]\n\t// }\n\n}\n\n// Pages invokes f for each page of results.\n// A non-nil error returned from f will halt the iteration.\n// The provided context supersedes any context provided to the Context method.\nfunc (c *ProjectsHmacKeysListCall) Pages(ctx context.Context, f func(*HmacKeysMetadata) error) error {\n\tc.ctx_ = ctx\n\tdefer c.PageToken(c.urlParams_.Get(\"pageToken\")) // reset paging to original point\n\tfor {\n\t\tx, err := c.Do()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif err := f(x); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif x.NextPageToken == \"\" {\n\t\t\treturn nil\n\t\t}\n\t\tc.PageToken(x.NextPageToken)\n\t}\n}\n\n// method id \"storage.projects.hmacKeys.update\":\n\ntype ProjectsHmacKeysUpdateCall struct {\n\ts               *Service\n\tprojectId       string\n\taccessId        string\n\thmackeymetadata *HmacKeyMetadata\n\turlParams_      gensupport.URLParams\n\tctx_            context.Context\n\theader_         http.Header\n}\n\n// Update: Updates the state of an HMAC key. See the HMAC Key resource\n// descriptor for valid states.\nfunc (r *ProjectsHmacKeysService) Update(projectId string, accessId string, hmackeymetadata *HmacKeyMetadata) *ProjectsHmacKeysUpdateCall {\n\tc := &ProjectsHmacKeysUpdateCall{s: r.s, urlParams_: make(gensupport.URLParams)}\n\tc.projectId = projectId\n\tc.accessId = accessId\n\tc.hmackeymetadata = hmackeymetadata\n\treturn c\n}\n\n// UserProject sets the optional parameter \"userProject\": The project to\n// be billed for this request.\nfunc (c *ProjectsHmacKeysUpdateCall) UserProject(userProject string) *ProjectsHmacKeysUpdateCall {\n\tc.urlParams_.Set(\"userProject\", userProject)\n\treturn c\n}\n\n// Fields allows partial responses to be retrieved. See\n// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse\n// for more information.\nfunc (c *ProjectsHmacKeysUpdateCall) Fields(s ...googleapi.Field) *ProjectsHmacKeysUpdateCall {\n\tc.urlParams_.Set(\"fields\", googleapi.CombineFields(s))\n\treturn c\n}\n\n// Context sets the context to be used in this call's Do method. Any\n// pending HTTP request will be aborted if the provided context is\n// canceled.\nfunc (c *ProjectsHmacKeysUpdateCall) Context(ctx context.Context) *ProjectsHmacKeysUpdateCall {\n\tc.ctx_ = ctx\n\treturn c\n}\n\n// Header returns an http.Header that can be modified by the caller to\n// add HTTP headers to the request.\nfunc (c *ProjectsHmacKeysUpdateCall) Header() http.Header {\n\tif c.header_ == nil {\n\t\tc.header_ = make(http.Header)\n\t}\n\treturn c.header_\n}\n\nfunc (c *ProjectsHmacKeysUpdateCall) doRequest(alt string) (*http.Response, error) {\n\treqHeaders := make(http.Header)\n\tfor k, v := range c.header_ {\n\t\treqHeaders[k] = v\n\t}\n\treqHeaders.Set(\"User-Agent\", c.s.userAgent())\n\tvar body io.Reader = nil\n\tbody, err := googleapi.WithoutDataWrapper.JSONReader(c.hmackeymetadata)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treqHeaders.Set(\"Content-Type\", \"application/json\")\n\tc.urlParams_.Set(\"alt\", alt)\n\tc.urlParams_.Set(\"prettyPrint\", \"false\")\n\turls := googleapi.ResolveRelative(c.s.BasePath, \"projects/{projectId}/hmacKeys/{accessId}\")\n\turls += \"?\" + c.urlParams_.Encode()\n\treq, err := http.NewRequest(\"PUT\", urls, body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.Header = reqHeaders\n\tgoogleapi.Expand(req.URL, map[string]string{\n\t\t\"projectId\": c.projectId,\n\t\t\"accessId\":  c.accessId,\n\t})\n\treturn gensupport.SendRequest(c.ctx_, c.s.client, req)\n}\n\n// Do executes the \"storage.projects.hmacKeys.update\" call.\n// Exactly one of *HmacKeyMetadata or error will be non-nil. Any non-2xx\n// status code is an error. Response headers are in either\n// *HmacKeyMetadata.ServerResponse.Header or (if a response was returned\n// at all) in error.(*googleapi.Error).Header. Use\n// googleapi.IsNotModified to check whether the returned error was\n// because http.StatusNotModified was returned.\nfunc (c *ProjectsHmacKeysUpdateCall) Do(opts ...googleapi.CallOption) (*HmacKeyMetadata, error) {\n\tgensupport.SetOptions(c.urlParams_, opts...)\n\tres, err := c.doRequest(\"json\")\n\tif res != nil && res.StatusCode == http.StatusNotModified {\n\t\tif res.Body != nil {\n\t\t\tres.Body.Close()\n\t\t}\n\t\treturn nil, &googleapi.Error{\n\t\t\tCode:   res.StatusCode,\n\t\t\tHeader: res.Header,\n\t\t}\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer googleapi.CloseBody(res)\n\tif err := googleapi.CheckResponse(res); err != nil {\n\t\treturn nil, err\n\t}\n\tret := &HmacKeyMetadata{\n\t\tServerResponse: googleapi.ServerResponse{\n\t\t\tHeader:         res.Header,\n\t\t\tHTTPStatusCode: res.StatusCode,\n\t\t},\n\t}\n\ttarget := &ret\n\tif err := gensupport.DecodeResponse(target, res); err != nil {\n\t\treturn nil, err\n\t}\n\treturn ret, nil\n\t// {\n\t//   \"description\": \"Updates the state of an HMAC key. See the HMAC Key resource descriptor for valid states.\",\n\t//   \"httpMethod\": \"PUT\",\n\t//   \"id\": \"storage.projects.hmacKeys.update\",\n\t//   \"parameterOrder\": [\n\t//     \"projectId\",\n\t//     \"accessId\"\n\t//   ],\n\t//   \"parameters\": {\n\t//     \"accessId\": {\n\t//       \"description\": \"Name of the HMAC key being updated.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"projectId\": {\n\t//       \"description\": \"Project ID owning the service account of the updated key.\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"userProject\": {\n\t//       \"description\": \"The project to be billed for this request.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     }\n\t//   },\n\t//   \"path\": \"projects/{projectId}/hmacKeys/{accessId}\",\n\t//   \"request\": {\n\t//     \"$ref\": \"HmacKeyMetadata\"\n\t//   },\n\t//   \"response\": {\n\t//     \"$ref\": \"HmacKeyMetadata\"\n\t//   },\n\t//   \"scopes\": [\n\t//     \"https://www.googleapis.com/auth/cloud-platform\",\n\t//     \"https://www.googleapis.com/auth/devstorage.full_control\"\n\t//   ]\n\t// }\n\n}\n\n// method id \"storage.projects.serviceAccount.get\":\n\ntype ProjectsServiceAccountGetCall struct {\n\ts            *Service\n\tprojectId    string\n\turlParams_   gensupport.URLParams\n\tifNoneMatch_ string\n\tctx_         context.Context\n\theader_      http.Header\n}\n\n// Get: Get the email address of this project's Google Cloud Storage\n// service account.\nfunc (r *ProjectsServiceAccountService) Get(projectId string) *ProjectsServiceAccountGetCall {\n\tc := &ProjectsServiceAccountGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}\n\tc.projectId = projectId\n\treturn c\n}\n\n// ProvisionalUserProject sets the optional parameter\n// \"provisionalUserProject\": The project to be billed for this request\n// if the target bucket is requester-pays bucket.\nfunc (c *ProjectsServiceAccountGetCall) ProvisionalUserProject(provisionalUserProject string) *ProjectsServiceAccountGetCall {\n\tc.urlParams_.Set(\"provisionalUserProject\", provisionalUserProject)\n\treturn c\n}\n\n// UserProject sets the optional parameter \"userProject\": The project to\n// be billed for this request.\nfunc (c *ProjectsServiceAccountGetCall) UserProject(userProject string) *ProjectsServiceAccountGetCall {\n\tc.urlParams_.Set(\"userProject\", userProject)\n\treturn c\n}\n\n// Fields allows partial responses to be retrieved. See\n// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse\n// for more information.\nfunc (c *ProjectsServiceAccountGetCall) Fields(s ...googleapi.Field) *ProjectsServiceAccountGetCall {\n\tc.urlParams_.Set(\"fields\", googleapi.CombineFields(s))\n\treturn c\n}\n\n// IfNoneMatch sets the optional parameter which makes the operation\n// fail if the object's ETag matches the given value. This is useful for\n// getting updates only after the object has changed since the last\n// request. Use googleapi.IsNotModified to check whether the response\n// error from Do is the result of In-None-Match.\nfunc (c *ProjectsServiceAccountGetCall) IfNoneMatch(entityTag string) *ProjectsServiceAccountGetCall {\n\tc.ifNoneMatch_ = entityTag\n\treturn c\n}\n\n// Context sets the context to be used in this call's Do method. Any\n// pending HTTP request will be aborted if the provided context is\n// canceled.\nfunc (c *ProjectsServiceAccountGetCall) Context(ctx context.Context) *ProjectsServiceAccountGetCall {\n\tc.ctx_ = ctx\n\treturn c\n}\n\n// Header returns an http.Header that can be modified by the caller to\n// add HTTP headers to the request.\nfunc (c *ProjectsServiceAccountGetCall) Header() http.Header {\n\tif c.header_ == nil {\n\t\tc.header_ = make(http.Header)\n\t}\n\treturn c.header_\n}\n\nfunc (c *ProjectsServiceAccountGetCall) doRequest(alt string) (*http.Response, error) {\n\treqHeaders := make(http.Header)\n\tfor k, v := range c.header_ {\n\t\treqHeaders[k] = v\n\t}\n\treqHeaders.Set(\"User-Agent\", c.s.userAgent())\n\tif c.ifNoneMatch_ != \"\" {\n\t\treqHeaders.Set(\"If-None-Match\", c.ifNoneMatch_)\n\t}\n\tvar body io.Reader = nil\n\tc.urlParams_.Set(\"alt\", alt)\n\tc.urlParams_.Set(\"prettyPrint\", \"false\")\n\turls := googleapi.ResolveRelative(c.s.BasePath, \"projects/{projectId}/serviceAccount\")\n\turls += \"?\" + c.urlParams_.Encode()\n\treq, err := http.NewRequest(\"GET\", urls, body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treq.Header = reqHeaders\n\tgoogleapi.Expand(req.URL, map[string]string{\n\t\t\"projectId\": c.projectId,\n\t})\n\treturn gensupport.SendRequest(c.ctx_, c.s.client, req)\n}\n\n// Do executes the \"storage.projects.serviceAccount.get\" call.\n// Exactly one of *ServiceAccount or error will be non-nil. Any non-2xx\n// status code is an error. Response headers are in either\n// *ServiceAccount.ServerResponse.Header or (if a response was returned\n// at all) in error.(*googleapi.Error).Header. Use\n// googleapi.IsNotModified to check whether the returned error was\n// because http.StatusNotModified was returned.\nfunc (c *ProjectsServiceAccountGetCall) Do(opts ...googleapi.CallOption) (*ServiceAccount, error) {\n\tgensupport.SetOptions(c.urlParams_, opts...)\n\tres, err := c.doRequest(\"json\")\n\tif res != nil && res.StatusCode == http.StatusNotModified {\n\t\tif res.Body != nil {\n\t\t\tres.Body.Close()\n\t\t}\n\t\treturn nil, &googleapi.Error{\n\t\t\tCode:   res.StatusCode,\n\t\t\tHeader: res.Header,\n\t\t}\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer googleapi.CloseBody(res)\n\tif err := googleapi.CheckResponse(res); err != nil {\n\t\treturn nil, err\n\t}\n\tret := &ServiceAccount{\n\t\tServerResponse: googleapi.ServerResponse{\n\t\t\tHeader:         res.Header,\n\t\t\tHTTPStatusCode: res.StatusCode,\n\t\t},\n\t}\n\ttarget := &ret\n\tif err := gensupport.DecodeResponse(target, res); err != nil {\n\t\treturn nil, err\n\t}\n\treturn ret, nil\n\t// {\n\t//   \"description\": \"Get the email address of this project's Google Cloud Storage service account.\",\n\t//   \"httpMethod\": \"GET\",\n\t//   \"id\": \"storage.projects.serviceAccount.get\",\n\t//   \"parameterOrder\": [\n\t//     \"projectId\"\n\t//   ],\n\t//   \"parameters\": {\n\t//     \"projectId\": {\n\t//       \"description\": \"Project ID\",\n\t//       \"location\": \"path\",\n\t//       \"required\": true,\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"provisionalUserProject\": {\n\t//       \"description\": \"The project to be billed for this request if the target bucket is requester-pays bucket.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     },\n\t//     \"userProject\": {\n\t//       \"description\": \"The project to be billed for this request.\",\n\t//       \"location\": \"query\",\n\t//       \"type\": \"string\"\n\t//     }\n\t//   },\n\t//   \"path\": \"projects/{projectId}/serviceAccount\",\n\t//   \"response\": {\n\t//     \"$ref\": \"ServiceAccount\"\n\t//   },\n\t//   \"scopes\": [\n\t//     \"https://www.googleapis.com/auth/cloud-platform\",\n\t//     \"https://www.googleapis.com/auth/cloud-platform.read-only\",\n\t//     \"https://www.googleapis.com/auth/devstorage.full_control\",\n\t//     \"https://www.googleapis.com/auth/devstorage.read_only\",\n\t//     \"https://www.googleapis.com/auth/devstorage.read_write\"\n\t//   ]\n\t// }\n\n}\n"
  },
  {
    "path": "vendor/google.golang.org/api/transport/http/dial.go",
    "content": "// Copyright 2015 Google LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// Package http supports network connections to HTTP servers.\n// This package is not intended for use by end developers. Use the\n// google.golang.org/api/option package to configure API clients.\npackage http\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"net/http\"\n\n\t\"go.opencensus.io/plugin/ochttp\"\n\t\"golang.org/x/oauth2\"\n\t\"google.golang.org/api/googleapi/transport\"\n\t\"google.golang.org/api/internal\"\n\t\"google.golang.org/api/option\"\n\t\"google.golang.org/api/transport/http/internal/propagation\"\n)\n\n// NewClient returns an HTTP client for use communicating with a Google cloud\n// service, configured with the given ClientOptions. It also returns the endpoint\n// for the service as specified in the options.\nfunc NewClient(ctx context.Context, opts ...option.ClientOption) (*http.Client, string, error) {\n\tsettings, err := newSettings(opts)\n\tif err != nil {\n\t\treturn nil, \"\", err\n\t}\n\t// TODO(cbro): consider injecting the User-Agent even if an explicit HTTP client is provided?\n\tif settings.HTTPClient != nil {\n\t\treturn settings.HTTPClient, settings.Endpoint, nil\n\t}\n\ttrans, err := newTransport(ctx, defaultBaseTransport(ctx), settings)\n\tif err != nil {\n\t\treturn nil, \"\", err\n\t}\n\treturn &http.Client{Transport: trans}, settings.Endpoint, nil\n}\n\n// NewTransport creates an http.RoundTripper for use communicating with a Google\n// cloud service, configured with the given ClientOptions. Its RoundTrip method delegates to base.\nfunc NewTransport(ctx context.Context, base http.RoundTripper, opts ...option.ClientOption) (http.RoundTripper, error) {\n\tsettings, err := newSettings(opts)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif settings.HTTPClient != nil {\n\t\treturn nil, errors.New(\"transport/http: WithHTTPClient passed to NewTransport\")\n\t}\n\treturn newTransport(ctx, base, settings)\n}\n\nfunc newTransport(ctx context.Context, base http.RoundTripper, settings *internal.DialSettings) (http.RoundTripper, error) {\n\ttrans := base\n\ttrans = parameterTransport{\n\t\tbase:          trans,\n\t\tuserAgent:     settings.UserAgent,\n\t\tquotaProject:  settings.QuotaProject,\n\t\trequestReason: settings.RequestReason,\n\t}\n\ttrans = addOCTransport(trans)\n\tswitch {\n\tcase settings.NoAuth:\n\t\t// Do nothing.\n\tcase settings.APIKey != \"\":\n\t\ttrans = &transport.APIKey{\n\t\t\tTransport: trans,\n\t\t\tKey:       settings.APIKey,\n\t\t}\n\tdefault:\n\t\tcreds, err := internal.Creds(ctx, settings)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\ttrans = &oauth2.Transport{\n\t\t\tBase:   trans,\n\t\t\tSource: creds.TokenSource,\n\t\t}\n\t}\n\treturn trans, nil\n}\n\nfunc newSettings(opts []option.ClientOption) (*internal.DialSettings, error) {\n\tvar o internal.DialSettings\n\tfor _, opt := range opts {\n\t\topt.Apply(&o)\n\t}\n\tif err := o.Validate(); err != nil {\n\t\treturn nil, err\n\t}\n\tif o.GRPCConn != nil {\n\t\treturn nil, errors.New(\"unsupported gRPC connection specified\")\n\t}\n\treturn &o, nil\n}\n\ntype parameterTransport struct {\n\tuserAgent     string\n\tquotaProject  string\n\trequestReason string\n\n\tbase http.RoundTripper\n}\n\nfunc (t parameterTransport) RoundTrip(req *http.Request) (*http.Response, error) {\n\trt := t.base\n\tif rt == nil {\n\t\treturn nil, errors.New(\"transport: no Transport specified\")\n\t}\n\tif t.userAgent == \"\" {\n\t\treturn rt.RoundTrip(req)\n\t}\n\tnewReq := *req\n\tnewReq.Header = make(http.Header)\n\tfor k, vv := range req.Header {\n\t\tnewReq.Header[k] = vv\n\t}\n\t// TODO(cbro): append to existing User-Agent header?\n\tnewReq.Header.Set(\"User-Agent\", t.userAgent)\n\n\t// Attach system parameters into the header\n\tif t.quotaProject != \"\" {\n\t\tnewReq.Header.Set(\"X-Goog-User-Project\", t.quotaProject)\n\t}\n\tif t.requestReason != \"\" {\n\t\tnewReq.Header.Set(\"X-Goog-Request-Reason\", t.requestReason)\n\t}\n\n\treturn rt.RoundTrip(&newReq)\n}\n\n// Set at init time by dial_appengine.go. If nil, we're not on App Engine.\nvar appengineUrlfetchHook func(context.Context) http.RoundTripper\n\n// defaultBaseTransport returns the base HTTP transport.\n// On App Engine, this is urlfetch.Transport, otherwise it's http.DefaultTransport.\nfunc defaultBaseTransport(ctx context.Context) http.RoundTripper {\n\tif appengineUrlfetchHook != nil {\n\t\treturn appengineUrlfetchHook(ctx)\n\t}\n\treturn http.DefaultTransport\n}\n\nfunc addOCTransport(trans http.RoundTripper) http.RoundTripper {\n\treturn &ochttp.Transport{\n\t\tBase:        trans,\n\t\tPropagation: &propagation.HTTPFormat{},\n\t}\n}\n"
  },
  {
    "path": "vendor/google.golang.org/api/transport/http/dial_appengine.go",
    "content": "// Copyright 2016 Google LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// +build appengine\n\npackage http\n\nimport (\n\t\"context\"\n\t\"net/http\"\n\n\t\"google.golang.org/appengine/urlfetch\"\n)\n\nfunc init() {\n\tappengineUrlfetchHook = func(ctx context.Context) http.RoundTripper {\n\t\treturn &urlfetch.Transport{Context: ctx}\n\t}\n}\n"
  },
  {
    "path": "vendor/google.golang.org/api/transport/http/internal/propagation/http.go",
    "content": "// Copyright 2018 Google LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// +build go1.8\n\n// Package propagation implements X-Cloud-Trace-Context header propagation used\n// by Google Cloud products.\npackage propagation\n\nimport (\n\t\"encoding/binary\"\n\t\"encoding/hex\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"go.opencensus.io/trace\"\n\t\"go.opencensus.io/trace/propagation\"\n)\n\nconst (\n\thttpHeaderMaxSize = 200\n\thttpHeader        = `X-Cloud-Trace-Context`\n)\n\nvar _ propagation.HTTPFormat = (*HTTPFormat)(nil)\n\n// HTTPFormat implements propagation.HTTPFormat to propagate\n// traces in HTTP headers for Google Cloud Platform and Stackdriver Trace.\ntype HTTPFormat struct{}\n\n// SpanContextFromRequest extracts a Stackdriver Trace span context from incoming requests.\nfunc (f *HTTPFormat) SpanContextFromRequest(req *http.Request) (sc trace.SpanContext, ok bool) {\n\th := req.Header.Get(httpHeader)\n\t// See https://cloud.google.com/trace/docs/faq for the header HTTPFormat.\n\t// Return if the header is empty or missing, or if the header is unreasonably\n\t// large, to avoid making unnecessary copies of a large string.\n\tif h == \"\" || len(h) > httpHeaderMaxSize {\n\t\treturn trace.SpanContext{}, false\n\t}\n\n\t// Parse the trace id field.\n\tslash := strings.Index(h, `/`)\n\tif slash == -1 {\n\t\treturn trace.SpanContext{}, false\n\t}\n\ttid, h := h[:slash], h[slash+1:]\n\n\tbuf, err := hex.DecodeString(tid)\n\tif err != nil {\n\t\treturn trace.SpanContext{}, false\n\t}\n\tcopy(sc.TraceID[:], buf)\n\n\t// Parse the span id field.\n\tspanstr := h\n\tsemicolon := strings.Index(h, `;`)\n\tif semicolon != -1 {\n\t\tspanstr, h = h[:semicolon], h[semicolon+1:]\n\t}\n\tsid, err := strconv.ParseUint(spanstr, 10, 64)\n\tif err != nil {\n\t\treturn trace.SpanContext{}, false\n\t}\n\tbinary.BigEndian.PutUint64(sc.SpanID[:], sid)\n\n\t// Parse the options field, options field is optional.\n\tif !strings.HasPrefix(h, \"o=\") {\n\t\treturn sc, true\n\t}\n\to, err := strconv.ParseUint(h[2:], 10, 64)\n\tif err != nil {\n\t\treturn trace.SpanContext{}, false\n\t}\n\tsc.TraceOptions = trace.TraceOptions(o)\n\treturn sc, true\n}\n\n// SpanContextToRequest modifies the given request to include a Stackdriver Trace header.\nfunc (f *HTTPFormat) SpanContextToRequest(sc trace.SpanContext, req *http.Request) {\n\tsid := binary.BigEndian.Uint64(sc.SpanID[:])\n\theader := fmt.Sprintf(\"%s/%d;o=%d\", hex.EncodeToString(sc.TraceID[:]), sid, int64(sc.TraceOptions))\n\treq.Header.Set(httpHeader, header)\n}\n"
  },
  {
    "path": "vendor/google.golang.org/appengine/LICENSE",
    "content": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "vendor/google.golang.org/appengine/appengine.go",
    "content": "// Copyright 2011 Google Inc. All rights reserved.\n// Use of this source code is governed by the Apache 2.0\n// license that can be found in the LICENSE file.\n\n// Package appengine provides basic functionality for Google App Engine.\n//\n// For more information on how to write Go apps for Google App Engine, see:\n// https://cloud.google.com/appengine/docs/go/\npackage appengine // import \"google.golang.org/appengine\"\n\nimport (\n\t\"net/http\"\n\n\t\"github.com/golang/protobuf/proto\"\n\t\"golang.org/x/net/context\"\n\n\t\"google.golang.org/appengine/internal\"\n)\n\n// The gophers party all night; the rabbits provide the beats.\n\n// Main is the principal entry point for an app running in App Engine.\n//\n// On App Engine Flexible it installs a trivial health checker if one isn't\n// already registered, and starts listening on port 8080 (overridden by the\n// $PORT environment variable).\n//\n// See https://cloud.google.com/appengine/docs/flexible/custom-runtimes#health_check_requests\n// for details on how to do your own health checking.\n//\n// On App Engine Standard it ensures the server has started and is prepared to\n// receive requests.\n//\n// Main never returns.\n//\n// Main is designed so that the app's main package looks like this:\n//\n//      package main\n//\n//      import (\n//              \"google.golang.org/appengine\"\n//\n//              _ \"myapp/package0\"\n//              _ \"myapp/package1\"\n//      )\n//\n//      func main() {\n//              appengine.Main()\n//      }\n//\n// The \"myapp/packageX\" packages are expected to register HTTP handlers\n// in their init functions.\nfunc Main() {\n\tinternal.Main()\n}\n\n// IsDevAppServer reports whether the App Engine app is running in the\n// development App Server.\nfunc IsDevAppServer() bool {\n\treturn internal.IsDevAppServer()\n}\n\n// IsStandard reports whether the App Engine app is running in the standard\n// environment. This includes both the first generation runtimes (<= Go 1.9)\n// and the second generation runtimes (>= Go 1.11).\nfunc IsStandard() bool {\n\treturn internal.IsStandard()\n}\n\n// IsFlex reports whether the App Engine app is running in the flexible environment.\nfunc IsFlex() bool {\n\treturn internal.IsFlex()\n}\n\n// IsAppEngine reports whether the App Engine app is running on App Engine, in either\n// the standard or flexible environment.\nfunc IsAppEngine() bool {\n\treturn internal.IsAppEngine()\n}\n\n// IsSecondGen reports whether the App Engine app is running on the second generation\n// runtimes (>= Go 1.11).\nfunc IsSecondGen() bool {\n\treturn internal.IsSecondGen()\n}\n\n// NewContext returns a context for an in-flight HTTP request.\n// This function is cheap.\nfunc NewContext(req *http.Request) context.Context {\n\treturn internal.ReqContext(req)\n}\n\n// WithContext returns a copy of the parent context\n// and associates it with an in-flight HTTP request.\n// This function is cheap.\nfunc WithContext(parent context.Context, req *http.Request) context.Context {\n\treturn internal.WithContext(parent, req)\n}\n\n// BlobKey is a key for a blobstore blob.\n//\n// Conceptually, this type belongs in the blobstore package, but it lives in\n// the appengine package to avoid a circular dependency: blobstore depends on\n// datastore, and datastore needs to refer to the BlobKey type.\ntype BlobKey string\n\n// GeoPoint represents a location as latitude/longitude in degrees.\ntype GeoPoint struct {\n\tLat, Lng float64\n}\n\n// Valid returns whether a GeoPoint is within [-90, 90] latitude and [-180, 180] longitude.\nfunc (g GeoPoint) Valid() bool {\n\treturn -90 <= g.Lat && g.Lat <= 90 && -180 <= g.Lng && g.Lng <= 180\n}\n\n// APICallFunc defines a function type for handling an API call.\n// See WithCallOverride.\ntype APICallFunc func(ctx context.Context, service, method string, in, out proto.Message) error\n\n// WithAPICallFunc returns a copy of the parent context\n// that will cause API calls to invoke f instead of their normal operation.\n//\n// This is intended for advanced users only.\nfunc WithAPICallFunc(ctx context.Context, f APICallFunc) context.Context {\n\treturn internal.WithCallOverride(ctx, internal.CallOverrideFunc(f))\n}\n\n// APICall performs an API call.\n//\n// This is not intended for general use; it is exported for use in conjunction\n// with WithAPICallFunc.\nfunc APICall(ctx context.Context, service, method string, in, out proto.Message) error {\n\treturn internal.Call(ctx, service, method, in, out)\n}\n"
  },
  {
    "path": "vendor/google.golang.org/appengine/appengine_vm.go",
    "content": "// Copyright 2015 Google Inc. All rights reserved.\n// Use of this source code is governed by the Apache 2.0\n// license that can be found in the LICENSE file.\n\n// +build !appengine\n\npackage appengine\n\nimport (\n\t\"golang.org/x/net/context\"\n\n\t\"google.golang.org/appengine/internal\"\n)\n\n// BackgroundContext returns a context not associated with a request.\n// This should only be used when not servicing a request.\n// This only works in App Engine \"flexible environment\".\nfunc BackgroundContext() context.Context {\n\treturn internal.BackgroundContext()\n}\n"
  },
  {
    "path": "vendor/google.golang.org/appengine/datastore/datastore.go",
    "content": "// Copyright 2011 Google Inc. All rights reserved.\n// Use of this source code is governed by the Apache 2.0\n// license that can be found in the LICENSE file.\n\npackage datastore\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"reflect\"\n\n\t\"github.com/golang/protobuf/proto\"\n\t\"golang.org/x/net/context\"\n\n\t\"google.golang.org/appengine\"\n\t\"google.golang.org/appengine/internal\"\n\tpb \"google.golang.org/appengine/internal/datastore\"\n)\n\nvar (\n\t// ErrInvalidEntityType is returned when functions like Get or Next are\n\t// passed a dst or src argument of invalid type.\n\tErrInvalidEntityType = errors.New(\"datastore: invalid entity type\")\n\t// ErrInvalidKey is returned when an invalid key is presented.\n\tErrInvalidKey = errors.New(\"datastore: invalid key\")\n\t// ErrNoSuchEntity is returned when no entity was found for a given key.\n\tErrNoSuchEntity = errors.New(\"datastore: no such entity\")\n)\n\n// ErrFieldMismatch is returned when a field is to be loaded into a different\n// type than the one it was stored from, or when a field is missing or\n// unexported in the destination struct.\n// StructType is the type of the struct pointed to by the destination argument\n// passed to Get or to Iterator.Next.\ntype ErrFieldMismatch struct {\n\tStructType reflect.Type\n\tFieldName  string\n\tReason     string\n}\n\nfunc (e *ErrFieldMismatch) Error() string {\n\treturn fmt.Sprintf(\"datastore: cannot load field %q into a %q: %s\",\n\t\te.FieldName, e.StructType, e.Reason)\n}\n\n// protoToKey converts a Reference proto to a *Key. If the key is invalid,\n// protoToKey will return the invalid key along with ErrInvalidKey.\nfunc protoToKey(r *pb.Reference) (k *Key, err error) {\n\tappID := r.GetApp()\n\tnamespace := r.GetNameSpace()\n\tfor _, e := range r.Path.Element {\n\t\tk = &Key{\n\t\t\tkind:      e.GetType(),\n\t\t\tstringID:  e.GetName(),\n\t\t\tintID:     e.GetId(),\n\t\t\tparent:    k,\n\t\t\tappID:     appID,\n\t\t\tnamespace: namespace,\n\t\t}\n\t\tif !k.valid() {\n\t\t\treturn k, ErrInvalidKey\n\t\t}\n\t}\n\treturn\n}\n\n// keyToProto converts a *Key to a Reference proto.\nfunc keyToProto(defaultAppID string, k *Key) *pb.Reference {\n\tappID := k.appID\n\tif appID == \"\" {\n\t\tappID = defaultAppID\n\t}\n\tn := 0\n\tfor i := k; i != nil; i = i.parent {\n\t\tn++\n\t}\n\te := make([]*pb.Path_Element, n)\n\tfor i := k; i != nil; i = i.parent {\n\t\tn--\n\t\te[n] = &pb.Path_Element{\n\t\t\tType: &i.kind,\n\t\t}\n\t\t// At most one of {Name,Id} should be set.\n\t\t// Neither will be set for incomplete keys.\n\t\tif i.stringID != \"\" {\n\t\t\te[n].Name = &i.stringID\n\t\t} else if i.intID != 0 {\n\t\t\te[n].Id = &i.intID\n\t\t}\n\t}\n\tvar namespace *string\n\tif k.namespace != \"\" {\n\t\tnamespace = proto.String(k.namespace)\n\t}\n\treturn &pb.Reference{\n\t\tApp:       proto.String(appID),\n\t\tNameSpace: namespace,\n\t\tPath: &pb.Path{\n\t\t\tElement: e,\n\t\t},\n\t}\n}\n\n// multiKeyToProto is a batch version of keyToProto.\nfunc multiKeyToProto(appID string, key []*Key) []*pb.Reference {\n\tret := make([]*pb.Reference, len(key))\n\tfor i, k := range key {\n\t\tret[i] = keyToProto(appID, k)\n\t}\n\treturn ret\n}\n\n// multiValid is a batch version of Key.valid. It returns an error, not a\n// []bool.\nfunc multiValid(key []*Key) error {\n\tinvalid := false\n\tfor _, k := range key {\n\t\tif !k.valid() {\n\t\t\tinvalid = true\n\t\t\tbreak\n\t\t}\n\t}\n\tif !invalid {\n\t\treturn nil\n\t}\n\terr := make(appengine.MultiError, len(key))\n\tfor i, k := range key {\n\t\tif !k.valid() {\n\t\t\terr[i] = ErrInvalidKey\n\t\t}\n\t}\n\treturn err\n}\n\n// It's unfortunate that the two semantically equivalent concepts pb.Reference\n// and pb.PropertyValue_ReferenceValue aren't the same type. For example, the\n// two have different protobuf field numbers.\n\n// referenceValueToKey is the same as protoToKey except the input is a\n// PropertyValue_ReferenceValue instead of a Reference.\nfunc referenceValueToKey(r *pb.PropertyValue_ReferenceValue) (k *Key, err error) {\n\tappID := r.GetApp()\n\tnamespace := r.GetNameSpace()\n\tfor _, e := range r.Pathelement {\n\t\tk = &Key{\n\t\t\tkind:      e.GetType(),\n\t\t\tstringID:  e.GetName(),\n\t\t\tintID:     e.GetId(),\n\t\t\tparent:    k,\n\t\t\tappID:     appID,\n\t\t\tnamespace: namespace,\n\t\t}\n\t\tif !k.valid() {\n\t\t\treturn nil, ErrInvalidKey\n\t\t}\n\t}\n\treturn\n}\n\n// keyToReferenceValue is the same as keyToProto except the output is a\n// PropertyValue_ReferenceValue instead of a Reference.\nfunc keyToReferenceValue(defaultAppID string, k *Key) *pb.PropertyValue_ReferenceValue {\n\tref := keyToProto(defaultAppID, k)\n\tpe := make([]*pb.PropertyValue_ReferenceValue_PathElement, len(ref.Path.Element))\n\tfor i, e := range ref.Path.Element {\n\t\tpe[i] = &pb.PropertyValue_ReferenceValue_PathElement{\n\t\t\tType: e.Type,\n\t\t\tId:   e.Id,\n\t\t\tName: e.Name,\n\t\t}\n\t}\n\treturn &pb.PropertyValue_ReferenceValue{\n\t\tApp:         ref.App,\n\t\tNameSpace:   ref.NameSpace,\n\t\tPathelement: pe,\n\t}\n}\n\ntype multiArgType int\n\nconst (\n\tmultiArgTypeInvalid multiArgType = iota\n\tmultiArgTypePropertyLoadSaver\n\tmultiArgTypeStruct\n\tmultiArgTypeStructPtr\n\tmultiArgTypeInterface\n)\n\n// checkMultiArg checks that v has type []S, []*S, []I, or []P, for some struct\n// type S, for some interface type I, or some non-interface non-pointer type P\n// such that P or *P implements PropertyLoadSaver.\n//\n// It returns what category the slice's elements are, and the reflect.Type\n// that represents S, I or P.\n//\n// As a special case, PropertyList is an invalid type for v.\nfunc checkMultiArg(v reflect.Value) (m multiArgType, elemType reflect.Type) {\n\tif v.Kind() != reflect.Slice {\n\t\treturn multiArgTypeInvalid, nil\n\t}\n\tif v.Type() == typeOfPropertyList {\n\t\treturn multiArgTypeInvalid, nil\n\t}\n\telemType = v.Type().Elem()\n\tif reflect.PtrTo(elemType).Implements(typeOfPropertyLoadSaver) {\n\t\treturn multiArgTypePropertyLoadSaver, elemType\n\t}\n\tswitch elemType.Kind() {\n\tcase reflect.Struct:\n\t\treturn multiArgTypeStruct, elemType\n\tcase reflect.Interface:\n\t\treturn multiArgTypeInterface, elemType\n\tcase reflect.Ptr:\n\t\telemType = elemType.Elem()\n\t\tif elemType.Kind() == reflect.Struct {\n\t\t\treturn multiArgTypeStructPtr, elemType\n\t\t}\n\t}\n\treturn multiArgTypeInvalid, nil\n}\n\n// Get loads the entity stored for k into dst, which must be a struct pointer\n// or implement PropertyLoadSaver. If there is no such entity for the key, Get\n// returns ErrNoSuchEntity.\n//\n// The values of dst's unmatched struct fields are not modified, and matching\n// slice-typed fields are not reset before appending to them. In particular, it\n// is recommended to pass a pointer to a zero valued struct on each Get call.\n//\n// ErrFieldMismatch is returned when a field is to be loaded into a different\n// type than the one it was stored from, or when a field is missing or\n// unexported in the destination struct. ErrFieldMismatch is only returned if\n// dst is a struct pointer.\nfunc Get(c context.Context, key *Key, dst interface{}) error {\n\tif dst == nil { // GetMulti catches nil interface; we need to catch nil ptr here\n\t\treturn ErrInvalidEntityType\n\t}\n\terr := GetMulti(c, []*Key{key}, []interface{}{dst})\n\tif me, ok := err.(appengine.MultiError); ok {\n\t\treturn me[0]\n\t}\n\treturn err\n}\n\n// GetMulti is a batch version of Get.\n//\n// dst must be a []S, []*S, []I or []P, for some struct type S, some interface\n// type I, or some non-interface non-pointer type P such that P or *P\n// implements PropertyLoadSaver. If an []I, each element must be a valid dst\n// for Get: it must be a struct pointer or implement PropertyLoadSaver.\n//\n// As a special case, PropertyList is an invalid type for dst, even though a\n// PropertyList is a slice of structs. It is treated as invalid to avoid being\n// mistakenly passed when []PropertyList was intended.\nfunc GetMulti(c context.Context, key []*Key, dst interface{}) error {\n\tv := reflect.ValueOf(dst)\n\tmultiArgType, _ := checkMultiArg(v)\n\tif multiArgType == multiArgTypeInvalid {\n\t\treturn errors.New(\"datastore: dst has invalid type\")\n\t}\n\tif len(key) != v.Len() {\n\t\treturn errors.New(\"datastore: key and dst slices have different length\")\n\t}\n\tif len(key) == 0 {\n\t\treturn nil\n\t}\n\tif err := multiValid(key); err != nil {\n\t\treturn err\n\t}\n\treq := &pb.GetRequest{\n\t\tKey: multiKeyToProto(internal.FullyQualifiedAppID(c), key),\n\t}\n\tres := &pb.GetResponse{}\n\tif err := internal.Call(c, \"datastore_v3\", \"Get\", req, res); err != nil {\n\t\treturn err\n\t}\n\tif len(key) != len(res.Entity) {\n\t\treturn errors.New(\"datastore: internal error: server returned the wrong number of entities\")\n\t}\n\tmultiErr, any := make(appengine.MultiError, len(key)), false\n\tfor i, e := range res.Entity {\n\t\tif e.Entity == nil {\n\t\t\tmultiErr[i] = ErrNoSuchEntity\n\t\t} else {\n\t\t\telem := v.Index(i)\n\t\t\tif multiArgType == multiArgTypePropertyLoadSaver || multiArgType == multiArgTypeStruct {\n\t\t\t\telem = elem.Addr()\n\t\t\t}\n\t\t\tif multiArgType == multiArgTypeStructPtr && elem.IsNil() {\n\t\t\t\telem.Set(reflect.New(elem.Type().Elem()))\n\t\t\t}\n\t\t\tmultiErr[i] = loadEntity(elem.Interface(), e.Entity)\n\t\t}\n\t\tif multiErr[i] != nil {\n\t\t\tany = true\n\t\t}\n\t}\n\tif any {\n\t\treturn multiErr\n\t}\n\treturn nil\n}\n\n// Put saves the entity src into the datastore with key k. src must be a struct\n// pointer or implement PropertyLoadSaver; if a struct pointer then any\n// unexported fields of that struct will be skipped. If k is an incomplete key,\n// the returned key will be a unique key generated by the datastore.\nfunc Put(c context.Context, key *Key, src interface{}) (*Key, error) {\n\tk, err := PutMulti(c, []*Key{key}, []interface{}{src})\n\tif err != nil {\n\t\tif me, ok := err.(appengine.MultiError); ok {\n\t\t\treturn nil, me[0]\n\t\t}\n\t\treturn nil, err\n\t}\n\treturn k[0], nil\n}\n\n// PutMulti is a batch version of Put.\n//\n// src must satisfy the same conditions as the dst argument to GetMulti.\nfunc PutMulti(c context.Context, key []*Key, src interface{}) ([]*Key, error) {\n\tv := reflect.ValueOf(src)\n\tmultiArgType, _ := checkMultiArg(v)\n\tif multiArgType == multiArgTypeInvalid {\n\t\treturn nil, errors.New(\"datastore: src has invalid type\")\n\t}\n\tif len(key) != v.Len() {\n\t\treturn nil, errors.New(\"datastore: key and src slices have different length\")\n\t}\n\tif len(key) == 0 {\n\t\treturn nil, nil\n\t}\n\tappID := internal.FullyQualifiedAppID(c)\n\tif err := multiValid(key); err != nil {\n\t\treturn nil, err\n\t}\n\treq := &pb.PutRequest{}\n\tfor i := range key {\n\t\telem := v.Index(i)\n\t\tif multiArgType == multiArgTypePropertyLoadSaver || multiArgType == multiArgTypeStruct {\n\t\t\telem = elem.Addr()\n\t\t}\n\t\tsProto, err := saveEntity(appID, key[i], elem.Interface())\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treq.Entity = append(req.Entity, sProto)\n\t}\n\tres := &pb.PutResponse{}\n\tif err := internal.Call(c, \"datastore_v3\", \"Put\", req, res); err != nil {\n\t\treturn nil, err\n\t}\n\tif len(key) != len(res.Key) {\n\t\treturn nil, errors.New(\"datastore: internal error: server returned the wrong number of keys\")\n\t}\n\tret := make([]*Key, len(key))\n\tfor i := range ret {\n\t\tvar err error\n\t\tret[i], err = protoToKey(res.Key[i])\n\t\tif err != nil || ret[i].Incomplete() {\n\t\t\treturn nil, errors.New(\"datastore: internal error: server returned an invalid key\")\n\t\t}\n\t}\n\treturn ret, nil\n}\n\n// Delete deletes the entity for the given key.\nfunc Delete(c context.Context, key *Key) error {\n\terr := DeleteMulti(c, []*Key{key})\n\tif me, ok := err.(appengine.MultiError); ok {\n\t\treturn me[0]\n\t}\n\treturn err\n}\n\n// DeleteMulti is a batch version of Delete.\nfunc DeleteMulti(c context.Context, key []*Key) error {\n\tif len(key) == 0 {\n\t\treturn nil\n\t}\n\tif err := multiValid(key); err != nil {\n\t\treturn err\n\t}\n\treq := &pb.DeleteRequest{\n\t\tKey: multiKeyToProto(internal.FullyQualifiedAppID(c), key),\n\t}\n\tres := &pb.DeleteResponse{}\n\treturn internal.Call(c, \"datastore_v3\", \"Delete\", req, res)\n}\n\nfunc namespaceMod(m proto.Message, namespace string) {\n\t// pb.Query is the only type that has a name_space field.\n\t// All other namespace support in datastore is in the keys.\n\tswitch m := m.(type) {\n\tcase *pb.Query:\n\t\tif m.NameSpace == nil {\n\t\t\tm.NameSpace = &namespace\n\t\t}\n\t}\n}\n\nfunc init() {\n\tinternal.NamespaceMods[\"datastore_v3\"] = namespaceMod\n\tinternal.RegisterErrorCodeMap(\"datastore_v3\", pb.Error_ErrorCode_name)\n\tinternal.RegisterTimeoutErrorCode(\"datastore_v3\", int32(pb.Error_TIMEOUT))\n}\n"
  },
  {
    "path": "vendor/google.golang.org/appengine/datastore/doc.go",
    "content": "// Copyright 2011 Google Inc. All rights reserved.\n// Use of this source code is governed by the Apache 2.0\n// license that can be found in the LICENSE file.\n\n/*\nPackage datastore provides a client for App Engine's datastore service.\n\n\nBasic Operations\n\nEntities are the unit of storage and are associated with a key. A key\nconsists of an optional parent key, a string application ID, a string kind\n(also known as an entity type), and either a StringID or an IntID. A\nStringID is also known as an entity name or key name.\n\nIt is valid to create a key with a zero StringID and a zero IntID; this is\ncalled an incomplete key, and does not refer to any saved entity. Putting an\nentity into the datastore under an incomplete key will cause a unique key\nto be generated for that entity, with a non-zero IntID.\n\nAn entity's contents are a mapping from case-sensitive field names to values.\nValid value types are:\n  - signed integers (int, int8, int16, int32 and int64),\n  - bool,\n  - string,\n  - float32 and float64,\n  - []byte (up to 1 megabyte in length),\n  - any type whose underlying type is one of the above predeclared types,\n  - ByteString,\n  - *Key,\n  - time.Time (stored with microsecond precision),\n  - appengine.BlobKey,\n  - appengine.GeoPoint,\n  - structs whose fields are all valid value types,\n  - slices of any of the above.\n\nSlices of structs are valid, as are structs that contain slices. However, if\none struct contains another, then at most one of those can be repeated. This\ndisqualifies recursively defined struct types: any struct T that (directly or\nindirectly) contains a []T.\n\nThe Get and Put functions load and save an entity's contents. An entity's\ncontents are typically represented by a struct pointer.\n\nExample code:\n\n\ttype Entity struct {\n\t\tValue string\n\t}\n\n\tfunc handle(w http.ResponseWriter, r *http.Request) {\n\t\tctx := appengine.NewContext(r)\n\n\t\tk := datastore.NewKey(ctx, \"Entity\", \"stringID\", 0, nil)\n\t\te := new(Entity)\n\t\tif err := datastore.Get(ctx, k, e); err != nil {\n\t\t\thttp.Error(w, err.Error(), 500)\n\t\t\treturn\n\t\t}\n\n\t\told := e.Value\n\t\te.Value = r.URL.Path\n\n\t\tif _, err := datastore.Put(ctx, k, e); err != nil {\n\t\t\thttp.Error(w, err.Error(), 500)\n\t\t\treturn\n\t\t}\n\n\t\tw.Header().Set(\"Content-Type\", \"text/plain; charset=utf-8\")\n\t\tfmt.Fprintf(w, \"old=%q\\nnew=%q\\n\", old, e.Value)\n\t}\n\nGetMulti, PutMulti and DeleteMulti are batch versions of the Get, Put and\nDelete functions. They take a []*Key instead of a *Key, and may return an\nappengine.MultiError when encountering partial failure.\n\n\nProperties\n\nAn entity's contents can be represented by a variety of types. These are\ntypically struct pointers, but can also be any type that implements the\nPropertyLoadSaver interface. If using a struct pointer, you do not have to\nexplicitly implement the PropertyLoadSaver interface; the datastore will\nautomatically convert via reflection. If a struct pointer does implement that\ninterface then those methods will be used in preference to the default\nbehavior for struct pointers. Struct pointers are more strongly typed and are\neasier to use; PropertyLoadSavers are more flexible.\n\nThe actual types passed do not have to match between Get and Put calls or even\nacross different calls to datastore. It is valid to put a *PropertyList and\nget that same entity as a *myStruct, or put a *myStruct0 and get a *myStruct1.\nConceptually, any entity is saved as a sequence of properties, and is loaded\ninto the destination value on a property-by-property basis. When loading into\na struct pointer, an entity that cannot be completely represented (such as a\nmissing field) will result in an ErrFieldMismatch error but it is up to the\ncaller whether this error is fatal, recoverable or ignorable.\n\nBy default, for struct pointers, all properties are potentially indexed, and\nthe property name is the same as the field name (and hence must start with an\nupper case letter).\n\nFields may have a `datastore:\"name,options\"` tag. The tag name is the\nproperty name, which must be one or more valid Go identifiers joined by \".\",\nbut may start with a lower case letter. An empty tag name means to just use the\nfield name. A \"-\" tag name means that the datastore will ignore that field.\n\nThe only valid options are \"omitempty\" and \"noindex\".\n\nIf the options include \"omitempty\" and the value of the field is empty, then the field will be omitted on Save.\nThe empty values are false, 0, any nil interface value, and any array, slice, map, or string of length zero.\nStruct field values will never be empty.\n\nIf options include \"noindex\" then the field will not be indexed. All fields are indexed\nby default. Strings or byte slices longer than 1500 bytes cannot be indexed;\nfields used to store long strings and byte slices must be tagged with \"noindex\"\nor they will cause Put operations to fail.\n\nTo use multiple options together, separate them by a comma.\nThe order does not matter.\n\nIf the options is \"\" then the comma may be omitted.\n\nExample code:\n\n\t// A and B are renamed to a and b.\n\t// A, C and J are not indexed.\n\t// D's tag is equivalent to having no tag at all (E).\n\t// I is ignored entirely by the datastore.\n\t// J has tag information for both the datastore and json packages.\n\ttype TaggedStruct struct {\n\t\tA int `datastore:\"a,noindex\"`\n\t\tB int `datastore:\"b\"`\n\t\tC int `datastore:\",noindex\"`\n\t\tD int `datastore:\"\"`\n\t\tE int\n\t\tI int `datastore:\"-\"`\n\t\tJ int `datastore:\",noindex\" json:\"j\"`\n\t}\n\n\nStructured Properties\n\nIf the struct pointed to contains other structs, then the nested or embedded\nstructs are flattened. For example, given these definitions:\n\n\ttype Inner1 struct {\n\t\tW int32\n\t\tX string\n\t}\n\n\ttype Inner2 struct {\n\t\tY float64\n\t}\n\n\ttype Inner3 struct {\n\t\tZ bool\n\t}\n\n\ttype Outer struct {\n\t\tA int16\n\t\tI []Inner1\n\t\tJ Inner2\n\t\tInner3\n\t}\n\nthen an Outer's properties would be equivalent to those of:\n\n\ttype OuterEquivalent struct {\n\t\tA     int16\n\t\tIDotW []int32  `datastore:\"I.W\"`\n\t\tIDotX []string `datastore:\"I.X\"`\n\t\tJDotY float64  `datastore:\"J.Y\"`\n\t\tZ     bool\n\t}\n\nIf Outer's embedded Inner3 field was tagged as `datastore:\"Foo\"` then the\nequivalent field would instead be: FooDotZ bool `datastore:\"Foo.Z\"`.\n\nIf an outer struct is tagged \"noindex\" then all of its implicit flattened\nfields are effectively \"noindex\".\n\n\nThe PropertyLoadSaver Interface\n\nAn entity's contents can also be represented by any type that implements the\nPropertyLoadSaver interface. This type may be a struct pointer, but it does\nnot have to be. The datastore package will call Load when getting the entity's\ncontents, and Save when putting the entity's contents.\nPossible uses include deriving non-stored fields, verifying fields, or indexing\na field only if its value is positive.\n\nExample code:\n\n\ttype CustomPropsExample struct {\n\t\tI, J int\n\t\t// Sum is not stored, but should always be equal to I + J.\n\t\tSum int `datastore:\"-\"`\n\t}\n\n\tfunc (x *CustomPropsExample) Load(ps []datastore.Property) error {\n\t\t// Load I and J as usual.\n\t\tif err := datastore.LoadStruct(x, ps); err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Derive the Sum field.\n\t\tx.Sum = x.I + x.J\n\t\treturn nil\n\t}\n\n\tfunc (x *CustomPropsExample) Save() ([]datastore.Property, error) {\n\t\t// Validate the Sum field.\n\t\tif x.Sum != x.I + x.J {\n\t\t\treturn nil, errors.New(\"CustomPropsExample has inconsistent sum\")\n\t\t}\n\t\t// Save I and J as usual. The code below is equivalent to calling\n\t\t// \"return datastore.SaveStruct(x)\", but is done manually for\n\t\t// demonstration purposes.\n\t\treturn []datastore.Property{\n\t\t\t{\n\t\t\t\tName:  \"I\",\n\t\t\t\tValue: int64(x.I),\n\t\t\t},\n\t\t\t{\n\t\t\t\tName:  \"J\",\n\t\t\t\tValue: int64(x.J),\n\t\t\t},\n\t\t}, nil\n\t}\n\nThe *PropertyList type implements PropertyLoadSaver, and can therefore hold an\narbitrary entity's contents.\n\n\nQueries\n\nQueries retrieve entities based on their properties or key's ancestry. Running\na query yields an iterator of results: either keys or (key, entity) pairs.\nQueries are re-usable and it is safe to call Query.Run from concurrent\ngoroutines. Iterators are not safe for concurrent use.\n\nQueries are immutable, and are either created by calling NewQuery, or derived\nfrom an existing query by calling a method like Filter or Order that returns a\nnew query value. A query is typically constructed by calling NewQuery followed\nby a chain of zero or more such methods. These methods are:\n  - Ancestor and Filter constrain the entities returned by running a query.\n  - Order affects the order in which they are returned.\n  - Project constrains the fields returned.\n  - Distinct de-duplicates projected entities.\n  - KeysOnly makes the iterator return only keys, not (key, entity) pairs.\n  - Start, End, Offset and Limit define which sub-sequence of matching entities\n    to return. Start and End take cursors, Offset and Limit take integers. Start\n    and Offset affect the first result, End and Limit affect the last result.\n    If both Start and Offset are set, then the offset is relative to Start.\n    If both End and Limit are set, then the earliest constraint wins. Limit is\n    relative to Start+Offset, not relative to End. As a special case, a\n    negative limit means unlimited.\n\nExample code:\n\n\ttype Widget struct {\n\t\tDescription string\n\t\tPrice       int\n\t}\n\n\tfunc handle(w http.ResponseWriter, r *http.Request) {\n\t\tctx := appengine.NewContext(r)\n\t\tq := datastore.NewQuery(\"Widget\").\n\t\t\tFilter(\"Price <\", 1000).\n\t\t\tOrder(\"-Price\")\n\t\tb := new(bytes.Buffer)\n\t\tfor t := q.Run(ctx); ; {\n\t\t\tvar x Widget\n\t\t\tkey, err := t.Next(&x)\n\t\t\tif err == datastore.Done {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\tserveError(ctx, w, err)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tfmt.Fprintf(b, \"Key=%v\\nWidget=%#v\\n\\n\", key, x)\n\t\t}\n\t\tw.Header().Set(\"Content-Type\", \"text/plain; charset=utf-8\")\n\t\tio.Copy(w, b)\n\t}\n\n\nTransactions\n\nRunInTransaction runs a function in a transaction.\n\nExample code:\n\n\ttype Counter struct {\n\t\tCount int\n\t}\n\n\tfunc inc(ctx context.Context, key *datastore.Key) (int, error) {\n\t\tvar x Counter\n\t\tif err := datastore.Get(ctx, key, &x); err != nil && err != datastore.ErrNoSuchEntity {\n\t\t\treturn 0, err\n\t\t}\n\t\tx.Count++\n\t\tif _, err := datastore.Put(ctx, key, &x); err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\treturn x.Count, nil\n\t}\n\n\tfunc handle(w http.ResponseWriter, r *http.Request) {\n\t\tctx := appengine.NewContext(r)\n\t\tvar count int\n\t\terr := datastore.RunInTransaction(ctx, func(ctx context.Context) error {\n\t\t\tvar err1 error\n\t\t\tcount, err1 = inc(ctx, datastore.NewKey(ctx, \"Counter\", \"singleton\", 0, nil))\n\t\t\treturn err1\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\tserveError(ctx, w, err)\n\t\t\treturn\n\t\t}\n\t\tw.Header().Set(\"Content-Type\", \"text/plain; charset=utf-8\")\n\t\tfmt.Fprintf(w, \"Count=%d\", count)\n\t}\n\n\nMetadata\n\nThe datastore package provides access to some of App Engine's datastore\nmetadata. This metadata includes information about the entity groups,\nnamespaces, entity kinds, and properties in the datastore, as well as the\nproperty representations for each property.\n\nExample code:\n\n\tfunc handle(w http.ResponseWriter, r *http.Request) {\n\t\t// Print all the kinds in the datastore, with all the indexed\n\t\t// properties (and their representations) for each.\n\t\tctx := appengine.NewContext(r)\n\n\t\tkinds, err := datastore.Kinds(ctx)\n\t\tif err != nil {\n\t\t\tserveError(ctx, w, err)\n\t\t\treturn\n\t\t}\n\n\t\tw.Header().Set(\"Content-Type\", \"text/plain; charset=utf-8\")\n\t\tfor _, kind := range kinds {\n\t\t\tfmt.Fprintf(w, \"%s:\\n\", kind)\n\t\t\tprops, err := datastore.KindProperties(ctx, kind)\n\t\t\tif err != nil {\n\t\t\t\tfmt.Fprintln(w, \"\\t(unable to retrieve properties)\")\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tfor p, rep := range props {\n\t\t\t\tfmt.Fprintf(w, \"\\t-%s (%s)\\n\", p, strings.Join(rep, \", \"))\n\t\t\t}\n\t\t}\n\t}\n*/\npackage datastore // import \"google.golang.org/appengine/datastore\"\n"
  },
  {
    "path": "vendor/google.golang.org/appengine/datastore/internal/cloudkey/cloudkey.go",
    "content": "// Copyright 2019 Google Inc. All rights reserved.\n// Use of this source code is governed by the Apache 2.0\n// license that can be found in the LICENSE file.\n\n// Package cloudpb is a subset of types and functions, copied from cloud.google.com/go/datastore.\n//\n// They are copied here to provide compatibility to decode keys generated by the cloud.google.com/go/datastore package.\npackage cloudkey\n\nimport (\n\t\"encoding/base64\"\n\t\"errors\"\n\t\"strings\"\n\n\t\"github.com/golang/protobuf/proto\"\n\tcloudpb \"google.golang.org/appengine/datastore/internal/cloudpb\"\n)\n\n/////////////////////////////////////////////////////////////////////\n// Code below is copied from https://github.com/googleapis/google-cloud-go/blob/master/datastore/datastore.go\n/////////////////////////////////////////////////////////////////////\n\nvar (\n\t// ErrInvalidKey is returned when an invalid key is presented.\n\tErrInvalidKey = errors.New(\"datastore: invalid key\")\n)\n\n/////////////////////////////////////////////////////////////////////\n// Code below is copied from https://github.com/googleapis/google-cloud-go/blob/master/datastore/key.go\n/////////////////////////////////////////////////////////////////////\n\n// Key represents the datastore key for a stored entity.\ntype Key struct {\n\t// Kind cannot be empty.\n\tKind string\n\t// Either ID or Name must be zero for the Key to be valid.\n\t// If both are zero, the Key is incomplete.\n\tID   int64\n\tName string\n\t// Parent must either be a complete Key or nil.\n\tParent *Key\n\n\t// Namespace provides the ability to partition your data for multiple\n\t// tenants. In most cases, it is not necessary to specify a namespace.\n\t// See docs on datastore multitenancy for details:\n\t// https://cloud.google.com/datastore/docs/concepts/multitenancy\n\tNamespace string\n}\n\n// DecodeKey decodes a key from the opaque representation returned by Encode.\nfunc DecodeKey(encoded string) (*Key, error) {\n\t// Re-add padding.\n\tif m := len(encoded) % 4; m != 0 {\n\t\tencoded += strings.Repeat(\"=\", 4-m)\n\t}\n\n\tb, err := base64.URLEncoding.DecodeString(encoded)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tpKey := new(cloudpb.Key)\n\tif err := proto.Unmarshal(b, pKey); err != nil {\n\t\treturn nil, err\n\t}\n\treturn protoToKey(pKey)\n}\n\n// valid returns whether the key is valid.\nfunc (k *Key) valid() bool {\n\tif k == nil {\n\t\treturn false\n\t}\n\tfor ; k != nil; k = k.Parent {\n\t\tif k.Kind == \"\" {\n\t\t\treturn false\n\t\t}\n\t\tif k.Name != \"\" && k.ID != 0 {\n\t\t\treturn false\n\t\t}\n\t\tif k.Parent != nil {\n\t\t\tif k.Parent.Incomplete() {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif k.Parent.Namespace != k.Namespace {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t}\n\treturn true\n}\n\n// Incomplete reports whether the key does not refer to a stored entity.\nfunc (k *Key) Incomplete() bool {\n\treturn k.Name == \"\" && k.ID == 0\n}\n\n// protoToKey decodes a protocol buffer representation of a key into an\n// equivalent *Key object. If the key is invalid, protoToKey will return the\n// invalid key along with ErrInvalidKey.\nfunc protoToKey(p *cloudpb.Key) (*Key, error) {\n\tvar key *Key\n\tvar namespace string\n\tif partition := p.PartitionId; partition != nil {\n\t\tnamespace = partition.NamespaceId\n\t}\n\tfor _, el := range p.Path {\n\t\tkey = &Key{\n\t\t\tNamespace: namespace,\n\t\t\tKind:      el.Kind,\n\t\t\tID:        el.GetId(),\n\t\t\tName:      el.GetName(),\n\t\t\tParent:    key,\n\t\t}\n\t}\n\tif !key.valid() { // Also detects key == nil.\n\t\treturn key, ErrInvalidKey\n\t}\n\treturn key, nil\n}\n"
  },
  {
    "path": "vendor/google.golang.org/appengine/datastore/internal/cloudpb/entity.pb.go",
    "content": "// Copyright 2019 Google Inc. All rights reserved.\n// Use of this source code is governed by the Apache 2.0\n// license that can be found in the LICENSE file.\n\n// Package cloudpb is a subset of protobufs, copied from google.golang.org/genproto/googleapis/datastore/v1.\n//\n// They are copied here to provide compatibility to decode keys generated by the cloud.google.com/go/datastore package.\npackage cloudpb\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/golang/protobuf/proto\"\n)\n\n// A partition ID identifies a grouping of entities. The grouping is always\n// by project and namespace, however the namespace ID may be empty.\n//\n// A partition ID contains several dimensions:\n// project ID and namespace ID.\n//\n// Partition dimensions:\n//\n// - May be `\"\"`.\n// - Must be valid UTF-8 bytes.\n// - Must have values that match regex `[A-Za-z\\d\\.\\-_]{1,100}`\n// If the value of any dimension matches regex `__.*__`, the partition is\n// reserved/read-only.\n// A reserved/read-only partition ID is forbidden in certain documented\n// contexts.\n//\n// Foreign partition IDs (in which the project ID does\n// not match the context project ID ) are discouraged.\n// Reads and writes of foreign partition IDs may fail if the project is not in\n// an active state.\ntype PartitionId struct {\n\t// The ID of the project to which the entities belong.\n\tProjectId string `protobuf:\"bytes,2,opt,name=project_id,json=projectId,proto3\" json:\"project_id,omitempty\"`\n\t// If not empty, the ID of the namespace to which the entities belong.\n\tNamespaceId          string   `protobuf:\"bytes,4,opt,name=namespace_id,json=namespaceId,proto3\" json:\"namespace_id,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *PartitionId) Reset()         { *m = PartitionId{} }\nfunc (m *PartitionId) String() string { return proto.CompactTextString(m) }\nfunc (*PartitionId) ProtoMessage()    {}\nfunc (*PartitionId) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_entity_096a297364b049a5, []int{0}\n}\nfunc (m *PartitionId) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_PartitionId.Unmarshal(m, b)\n}\nfunc (m *PartitionId) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_PartitionId.Marshal(b, m, deterministic)\n}\nfunc (dst *PartitionId) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_PartitionId.Merge(dst, src)\n}\nfunc (m *PartitionId) XXX_Size() int {\n\treturn xxx_messageInfo_PartitionId.Size(m)\n}\nfunc (m *PartitionId) XXX_DiscardUnknown() {\n\txxx_messageInfo_PartitionId.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_PartitionId proto.InternalMessageInfo\n\nfunc (m *PartitionId) GetProjectId() string {\n\tif m != nil {\n\t\treturn m.ProjectId\n\t}\n\treturn \"\"\n}\n\nfunc (m *PartitionId) GetNamespaceId() string {\n\tif m != nil {\n\t\treturn m.NamespaceId\n\t}\n\treturn \"\"\n}\n\n// A unique identifier for an entity.\n// If a key's partition ID or any of its path kinds or names are\n// reserved/read-only, the key is reserved/read-only.\n// A reserved/read-only key is forbidden in certain documented contexts.\ntype Key struct {\n\t// Entities are partitioned into subsets, currently identified by a project\n\t// ID and namespace ID.\n\t// Queries are scoped to a single partition.\n\tPartitionId *PartitionId `protobuf:\"bytes,1,opt,name=partition_id,json=partitionId,proto3\" json:\"partition_id,omitempty\"`\n\t// The entity path.\n\t// An entity path consists of one or more elements composed of a kind and a\n\t// string or numerical identifier, which identify entities. The first\n\t// element identifies a _root entity_, the second element identifies\n\t// a _child_ of the root entity, the third element identifies a child of the\n\t// second entity, and so forth. The entities identified by all prefixes of\n\t// the path are called the element's _ancestors_.\n\t//\n\t// An entity path is always fully complete: *all* of the entity's ancestors\n\t// are required to be in the path along with the entity identifier itself.\n\t// The only exception is that in some documented cases, the identifier in the\n\t// last path element (for the entity) itself may be omitted. For example,\n\t// the last path element of the key of `Mutation.insert` may have no\n\t// identifier.\n\t//\n\t// A path can never be empty, and a path can have at most 100 elements.\n\tPath                 []*Key_PathElement `protobuf:\"bytes,2,rep,name=path,proto3\" json:\"path,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}           `json:\"-\"`\n\tXXX_unrecognized     []byte             `json:\"-\"`\n\tXXX_sizecache        int32              `json:\"-\"`\n}\n\nfunc (m *Key) Reset()         { *m = Key{} }\nfunc (m *Key) String() string { return proto.CompactTextString(m) }\nfunc (*Key) ProtoMessage()    {}\nfunc (*Key) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_entity_096a297364b049a5, []int{1}\n}\nfunc (m *Key) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_Key.Unmarshal(m, b)\n}\nfunc (m *Key) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_Key.Marshal(b, m, deterministic)\n}\nfunc (dst *Key) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Key.Merge(dst, src)\n}\nfunc (m *Key) XXX_Size() int {\n\treturn xxx_messageInfo_Key.Size(m)\n}\nfunc (m *Key) XXX_DiscardUnknown() {\n\txxx_messageInfo_Key.DiscardUnknown(m)\n}\n\n// A (kind, ID/name) pair used to construct a key path.\n//\n// If either name or ID is set, the element is complete.\n// If neither is set, the element is incomplete.\ntype Key_PathElement struct {\n\t// The kind of the entity.\n\t// A kind matching regex `__.*__` is reserved/read-only.\n\t// A kind must not contain more than 1500 bytes when UTF-8 encoded.\n\t// Cannot be `\"\"`.\n\tKind string `protobuf:\"bytes,1,opt,name=kind,proto3\" json:\"kind,omitempty\"`\n\t// The type of ID.\n\t//\n\t// Types that are valid to be assigned to IdType:\n\t//\t*Key_PathElement_Id\n\t//\t*Key_PathElement_Name\n\tIdType               isKey_PathElement_IdType `protobuf_oneof:\"id_type\"`\n\tXXX_NoUnkeyedLiteral struct{}                 `json:\"-\"`\n\tXXX_unrecognized     []byte                   `json:\"-\"`\n\tXXX_sizecache        int32                    `json:\"-\"`\n}\n\nfunc (m *Key_PathElement) Reset()         { *m = Key_PathElement{} }\nfunc (m *Key_PathElement) String() string { return proto.CompactTextString(m) }\nfunc (*Key_PathElement) ProtoMessage()    {}\nfunc (*Key_PathElement) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_entity_096a297364b049a5, []int{1, 0}\n}\nfunc (m *Key_PathElement) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_Key_PathElement.Unmarshal(m, b)\n}\nfunc (m *Key_PathElement) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_Key_PathElement.Marshal(b, m, deterministic)\n}\nfunc (dst *Key_PathElement) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Key_PathElement.Merge(dst, src)\n}\nfunc (m *Key_PathElement) XXX_Size() int {\n\treturn xxx_messageInfo_Key_PathElement.Size(m)\n}\nfunc (m *Key_PathElement) XXX_DiscardUnknown() {\n\txxx_messageInfo_Key_PathElement.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Key_PathElement proto.InternalMessageInfo\n\nfunc (m *Key_PathElement) GetKind() string {\n\tif m != nil {\n\t\treturn m.Kind\n\t}\n\treturn \"\"\n}\n\ntype isKey_PathElement_IdType interface {\n\tisKey_PathElement_IdType()\n}\n\ntype Key_PathElement_Id struct {\n\tId int64 `protobuf:\"varint,2,opt,name=id,proto3,oneof\"`\n}\n\ntype Key_PathElement_Name struct {\n\tName string `protobuf:\"bytes,3,opt,name=name,proto3,oneof\"`\n}\n\nfunc (*Key_PathElement_Id) isKey_PathElement_IdType() {}\n\nfunc (*Key_PathElement_Name) isKey_PathElement_IdType() {}\n\nfunc (m *Key_PathElement) GetIdType() isKey_PathElement_IdType {\n\tif m != nil {\n\t\treturn m.IdType\n\t}\n\treturn nil\n}\n\nfunc (m *Key_PathElement) GetId() int64 {\n\tif x, ok := m.GetIdType().(*Key_PathElement_Id); ok {\n\t\treturn x.Id\n\t}\n\treturn 0\n}\n\nfunc (m *Key_PathElement) GetName() string {\n\tif x, ok := m.GetIdType().(*Key_PathElement_Name); ok {\n\t\treturn x.Name\n\t}\n\treturn \"\"\n}\n\n// XXX_OneofFuncs is for the internal use of the proto package.\nfunc (*Key_PathElement) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {\n\treturn _Key_PathElement_OneofMarshaler, _Key_PathElement_OneofUnmarshaler, _Key_PathElement_OneofSizer, []interface{}{\n\t\t(*Key_PathElement_Id)(nil),\n\t\t(*Key_PathElement_Name)(nil),\n\t}\n}\n\nfunc _Key_PathElement_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {\n\tm := msg.(*Key_PathElement)\n\t// id_type\n\tswitch x := m.IdType.(type) {\n\tcase *Key_PathElement_Id:\n\t\tb.EncodeVarint(2<<3 | proto.WireVarint)\n\t\tb.EncodeVarint(uint64(x.Id))\n\tcase *Key_PathElement_Name:\n\t\tb.EncodeVarint(3<<3 | proto.WireBytes)\n\t\tb.EncodeStringBytes(x.Name)\n\tcase nil:\n\tdefault:\n\t\treturn fmt.Errorf(\"Key_PathElement.IdType has unexpected type %T\", x)\n\t}\n\treturn nil\n}\n\nfunc _Key_PathElement_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {\n\tm := msg.(*Key_PathElement)\n\tswitch tag {\n\tcase 2: // id_type.id\n\t\tif wire != proto.WireVarint {\n\t\t\treturn true, proto.ErrInternalBadWireType\n\t\t}\n\t\tx, err := b.DecodeVarint()\n\t\tm.IdType = &Key_PathElement_Id{int64(x)}\n\t\treturn true, err\n\tcase 3: // id_type.name\n\t\tif wire != proto.WireBytes {\n\t\t\treturn true, proto.ErrInternalBadWireType\n\t\t}\n\t\tx, err := b.DecodeStringBytes()\n\t\tm.IdType = &Key_PathElement_Name{x}\n\t\treturn true, err\n\tdefault:\n\t\treturn false, nil\n\t}\n}\n\nfunc _Key_PathElement_OneofSizer(msg proto.Message) (n int) {\n\tm := msg.(*Key_PathElement)\n\t// id_type\n\tswitch x := m.IdType.(type) {\n\tcase *Key_PathElement_Id:\n\t\tn += 1 // tag and wire\n\t\tn += proto.SizeVarint(uint64(x.Id))\n\tcase *Key_PathElement_Name:\n\t\tn += 1 // tag and wire\n\t\tn += proto.SizeVarint(uint64(len(x.Name)))\n\t\tn += len(x.Name)\n\tcase nil:\n\tdefault:\n\t\tpanic(fmt.Sprintf(\"proto: unexpected type %T in oneof\", x))\n\t}\n\treturn n\n}\n\nvar fileDescriptor_entity_096a297364b049a5 = []byte{\n\t// 780 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x94, 0xff, 0x6e, 0xdc, 0x44,\n\t0x10, 0xc7, 0xed, 0xbb, 0x5c, 0x1a, 0x8f, 0xdd, 0xa4, 0x6c, 0x2a, 0x61, 0x02, 0x28, 0x26, 0x80,\n\t0x74, 0x02, 0xc9, 0x6e, 0xc2, 0x1f, 0x54, 0x14, 0xa4, 0x72, 0x25, 0xe0, 0x28, 0x15, 0x9c, 0x56,\n\t0x55, 0x24, 0x50, 0xa4, 0xd3, 0xde, 0x79, 0xeb, 0x2e, 0x67, 0xef, 0x5a, 0xf6, 0x3a, 0xaa, 0xdf,\n\t0x05, 0xf1, 0x00, 0x3c, 0x0a, 0x8f, 0x80, 0x78, 0x18, 0xb4, 0x3f, 0xec, 0x0b, 0xed, 0x35, 0xff,\n\t0x79, 0x67, 0x3e, 0xdf, 0xd9, 0xef, 0xec, 0xce, 0x1a, 0xa2, 0x5c, 0x88, 0xbc, 0xa0, 0x49, 0x46,\n\t0x24, 0x69, 0xa4, 0xa8, 0x69, 0x72, 0x73, 0x9a, 0x50, 0x2e, 0x99, 0xec, 0xe2, 0xaa, 0x16, 0x52,\n\t0xa0, 0x43, 0x43, 0xc4, 0x03, 0x11, 0xdf, 0x9c, 0x1e, 0x7d, 0x64, 0x65, 0xa4, 0x62, 0x09, 0xe1,\n\t0x5c, 0x48, 0x22, 0x99, 0xe0, 0x8d, 0x91, 0x0c, 0x59, 0xbd, 0x5a, 0xb6, 0x2f, 0x93, 0x46, 0xd6,\n\t0xed, 0x4a, 0xda, 0xec, 0xf1, 0x9b, 0x59, 0xc9, 0x4a, 0xda, 0x48, 0x52, 0x56, 0x16, 0x08, 0x2d,\n\t0x20, 0xbb, 0x8a, 0x26, 0x05, 0x91, 0x05, 0xcf, 0x4d, 0xe6, 0xe4, 0x17, 0xf0, 0xe7, 0xa4, 0x96,\n\t0x4c, 0x6d, 0x76, 0x91, 0xa1, 0x8f, 0x01, 0xaa, 0x5a, 0xfc, 0x4e, 0x57, 0x72, 0xc1, 0xb2, 0x70,\n\t0x14, 0xb9, 0x53, 0x0f, 0x7b, 0x36, 0x72, 0x91, 0xa1, 0x4f, 0x20, 0xe0, 0xa4, 0xa4, 0x4d, 0x45,\n\t0x56, 0x54, 0x01, 0x3b, 0x1a, 0xf0, 0x87, 0xd8, 0x45, 0x76, 0xf2, 0x8f, 0x0b, 0xe3, 0x4b, 0xda,\n\t0xa1, 0x67, 0x10, 0x54, 0x7d, 0x61, 0x85, 0xba, 0x91, 0x3b, 0xf5, 0xcf, 0xa2, 0x78, 0x4b, 0xef,\n\t0xf1, 0x2d, 0x07, 0xd8, 0xaf, 0x6e, 0xd9, 0x79, 0x0c, 0x3b, 0x15, 0x91, 0xaf, 0xc2, 0x51, 0x34,\n\t0x9e, 0xfa, 0x67, 0x9f, 0x6d, 0x15, 0x5f, 0xd2, 0x2e, 0x9e, 0x13, 0xf9, 0xea, 0xbc, 0xa0, 0x25,\n\t0xe5, 0x12, 0x6b, 0xc5, 0xd1, 0x0b, 0xd5, 0xd7, 0x10, 0x44, 0x08, 0x76, 0xd6, 0x8c, 0x1b, 0x17,\n\t0x1e, 0xd6, 0xdf, 0xe8, 0x01, 0x8c, 0x6c, 0x8f, 0xe3, 0xd4, 0xc1, 0x23, 0x96, 0xa1, 0x87, 0xb0,\n\t0xa3, 0x5a, 0x09, 0xc7, 0x8a, 0x4a, 0x1d, 0xac, 0x57, 0x33, 0x0f, 0xee, 0xb1, 0x6c, 0xa1, 0x8e,\n\t0xee, 0xe4, 0x29, 0xc0, 0xf7, 0x75, 0x4d, 0xba, 0x2b, 0x52, 0xb4, 0x14, 0x9d, 0xc1, 0xee, 0x8d,\n\t0xfa, 0x68, 0x42, 0x57, 0xfb, 0x3b, 0xda, 0xea, 0x4f, 0xb3, 0xd8, 0x92, 0x27, 0x7f, 0x4c, 0x60,\n\t0x62, 0xd4, 0x4f, 0x00, 0x78, 0x5b, 0x14, 0x0b, 0x9d, 0x08, 0xfd, 0xc8, 0x9d, 0xee, 0x6f, 0x2a,\n\t0xf4, 0x37, 0x19, 0xff, 0xdc, 0x16, 0x85, 0xe6, 0x53, 0x07, 0x7b, 0xbc, 0x5f, 0xa0, 0xcf, 0xe1,\n\t0xfe, 0x52, 0x88, 0x82, 0x12, 0x6e, 0xf5, 0xaa, 0xb1, 0xbd, 0xd4, 0xc1, 0x81, 0x0d, 0x0f, 0x18,\n\t0xe3, 0x92, 0xe6, 0xb4, 0xb6, 0x58, 0xdf, 0x6d, 0x60, 0xc3, 0x06, 0xfb, 0x14, 0x82, 0x4c, 0xb4,\n\t0xcb, 0x82, 0x5a, 0x4a, 0xf5, 0xef, 0xa6, 0x0e, 0xf6, 0x4d, 0xd4, 0x40, 0xe7, 0x70, 0x30, 0x8c,\n\t0x95, 0xe5, 0x40, 0xdf, 0xe9, 0xdb, 0xa6, 0x5f, 0xf4, 0x5c, 0xea, 0xe0, 0xfd, 0x41, 0x64, 0xca,\n\t0x7c, 0x0d, 0xde, 0x9a, 0x76, 0xb6, 0xc0, 0x44, 0x17, 0x08, 0xdf, 0x75, 0xaf, 0xa9, 0x83, 0xf7,\n\t0xd6, 0xb4, 0x1b, 0x4c, 0x36, 0xb2, 0x66, 0x3c, 0xb7, 0xda, 0xf7, 0xec, 0x25, 0xf9, 0x26, 0x6a,\n\t0xa0, 0x63, 0x80, 0x65, 0x21, 0x96, 0x16, 0x41, 0x91, 0x3b, 0x0d, 0xd4, 0xc1, 0xa9, 0x98, 0x01,\n\t0xbe, 0x83, 0x83, 0x9c, 0x8a, 0x45, 0x25, 0x18, 0x97, 0x96, 0xda, 0xd3, 0x26, 0x0e, 0x7b, 0x13,\n\t0xea, 0xa2, 0xe3, 0xe7, 0x44, 0x3e, 0xe7, 0x79, 0xea, 0xe0, 0xfb, 0x39, 0x15, 0x73, 0x05, 0x1b,\n\t0xf9, 0x53, 0x08, 0xcc, 0x53, 0xb6, 0xda, 0x5d, 0xad, 0xfd, 0x70, 0x6b, 0x03, 0xe7, 0x1a, 0x54,\n\t0x0e, 0x8d, 0xc4, 0x54, 0x98, 0x81, 0x4f, 0xd4, 0x08, 0xd9, 0x02, 0x9e, 0x2e, 0x70, 0xbc, 0xb5,\n\t0xc0, 0x66, 0xd4, 0x52, 0x07, 0x03, 0xd9, 0x0c, 0x5e, 0x08, 0xf7, 0x4a, 0x4a, 0x38, 0xe3, 0x79,\n\t0xb8, 0x1f, 0xb9, 0xd3, 0x09, 0xee, 0x97, 0xe8, 0x11, 0x3c, 0xa4, 0xaf, 0x57, 0x45, 0x9b, 0xd1,\n\t0xc5, 0xcb, 0x5a, 0x94, 0x0b, 0xc6, 0x33, 0xfa, 0x9a, 0x36, 0xe1, 0xa1, 0x1a, 0x0f, 0x8c, 0x6c,\n\t0xee, 0xc7, 0x5a, 0x94, 0x17, 0x26, 0x33, 0x0b, 0x00, 0xb4, 0x13, 0x33, 0xe0, 0xff, 0xba, 0xb0,\n\t0x6b, 0x7c, 0xa3, 0x2f, 0x60, 0xbc, 0xa6, 0x9d, 0x7d, 0xb7, 0xef, 0xbc, 0x22, 0xac, 0x20, 0x74,\n\t0xa9, 0x7f, 0x1b, 0x15, 0xad, 0x25, 0xa3, 0x4d, 0x38, 0xd6, 0xaf, 0xe1, 0xcb, 0x3b, 0x0e, 0x25,\n\t0x9e, 0x0f, 0xf4, 0x39, 0x97, 0x75, 0x87, 0x6f, 0xc9, 0x8f, 0x7e, 0x85, 0x83, 0x37, 0xd2, 0xe8,\n\t0xc1, 0xc6, 0x8b, 0x67, 0x76, 0x7c, 0x04, 0x93, 0xcd, 0x44, 0xdf, 0xfd, 0xf4, 0x0c, 0xf8, 0xcd,\n\t0xe8, 0xb1, 0x3b, 0xfb, 0xd3, 0x85, 0xf7, 0x57, 0xa2, 0xdc, 0x06, 0xcf, 0x7c, 0x63, 0x6d, 0xae,\n\t0x86, 0x78, 0xee, 0xfe, 0xf6, 0xad, 0x65, 0x72, 0x51, 0x10, 0x9e, 0xc7, 0xa2, 0xce, 0x93, 0x9c,\n\t0x72, 0x3d, 0xe2, 0x89, 0x49, 0x91, 0x8a, 0x35, 0xff, 0xfb, 0xcb, 0x3f, 0x19, 0x16, 0x7f, 0x8d,\n\t0x3e, 0xf8, 0xc9, 0xc8, 0x9f, 0x15, 0xa2, 0xcd, 0xe2, 0x1f, 0x86, 0x8d, 0xae, 0x4e, 0xff, 0xee,\n\t0x73, 0xd7, 0x3a, 0x77, 0x3d, 0xe4, 0xae, 0xaf, 0x4e, 0x97, 0xbb, 0x7a, 0x83, 0xaf, 0xfe, 0x0b,\n\t0x00, 0x00, 0xff, 0xff, 0xf3, 0xdd, 0x11, 0x96, 0x45, 0x06, 0x00, 0x00,\n}\n\nvar xxx_messageInfo_Key proto.InternalMessageInfo\n"
  },
  {
    "path": "vendor/google.golang.org/appengine/datastore/key.go",
    "content": "// Copyright 2011 Google Inc. All rights reserved.\n// Use of this source code is governed by the Apache 2.0\n// license that can be found in the LICENSE file.\n\npackage datastore\n\nimport (\n\t\"bytes\"\n\t\"encoding/base64\"\n\t\"encoding/gob\"\n\t\"errors\"\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/golang/protobuf/proto\"\n\t\"golang.org/x/net/context\"\n\n\t\"google.golang.org/appengine/internal\"\n\tpb \"google.golang.org/appengine/internal/datastore\"\n)\n\ntype KeyRangeCollisionError struct {\n\tstart int64\n\tend   int64\n}\n\nfunc (e *KeyRangeCollisionError) Error() string {\n\treturn fmt.Sprintf(\"datastore: Collision when attempting to allocate range [%d, %d]\",\n\t\te.start, e.end)\n}\n\ntype KeyRangeContentionError struct {\n\tstart int64\n\tend   int64\n}\n\nfunc (e *KeyRangeContentionError) Error() string {\n\treturn fmt.Sprintf(\"datastore: Contention when attempting to allocate range [%d, %d]\",\n\t\te.start, e.end)\n}\n\n// Key represents the datastore key for a stored entity, and is immutable.\ntype Key struct {\n\tkind      string\n\tstringID  string\n\tintID     int64\n\tparent    *Key\n\tappID     string\n\tnamespace string\n}\n\n// Kind returns the key's kind (also known as entity type).\nfunc (k *Key) Kind() string {\n\treturn k.kind\n}\n\n// StringID returns the key's string ID (also known as an entity name or key\n// name), which may be \"\".\nfunc (k *Key) StringID() string {\n\treturn k.stringID\n}\n\n// IntID returns the key's integer ID, which may be 0.\nfunc (k *Key) IntID() int64 {\n\treturn k.intID\n}\n\n// Parent returns the key's parent key, which may be nil.\nfunc (k *Key) Parent() *Key {\n\treturn k.parent\n}\n\n// AppID returns the key's application ID.\nfunc (k *Key) AppID() string {\n\treturn k.appID\n}\n\n// Namespace returns the key's namespace.\nfunc (k *Key) Namespace() string {\n\treturn k.namespace\n}\n\n// Incomplete returns whether the key does not refer to a stored entity.\n// In particular, whether the key has a zero StringID and a zero IntID.\nfunc (k *Key) Incomplete() bool {\n\treturn k.stringID == \"\" && k.intID == 0\n}\n\n// valid returns whether the key is valid.\nfunc (k *Key) valid() bool {\n\tif k == nil {\n\t\treturn false\n\t}\n\tfor ; k != nil; k = k.parent {\n\t\tif k.kind == \"\" || k.appID == \"\" {\n\t\t\treturn false\n\t\t}\n\t\tif k.stringID != \"\" && k.intID != 0 {\n\t\t\treturn false\n\t\t}\n\t\tif k.parent != nil {\n\t\t\tif k.parent.Incomplete() {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif k.parent.appID != k.appID || k.parent.namespace != k.namespace {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t}\n\treturn true\n}\n\n// Equal returns whether two keys are equal.\nfunc (k *Key) Equal(o *Key) bool {\n\tfor k != nil && o != nil {\n\t\tif k.kind != o.kind || k.stringID != o.stringID || k.intID != o.intID || k.appID != o.appID || k.namespace != o.namespace {\n\t\t\treturn false\n\t\t}\n\t\tk, o = k.parent, o.parent\n\t}\n\treturn k == o\n}\n\n// root returns the furthest ancestor of a key, which may be itself.\nfunc (k *Key) root() *Key {\n\tfor k.parent != nil {\n\t\tk = k.parent\n\t}\n\treturn k\n}\n\n// marshal marshals the key's string representation to the buffer.\nfunc (k *Key) marshal(b *bytes.Buffer) {\n\tif k.parent != nil {\n\t\tk.parent.marshal(b)\n\t}\n\tb.WriteByte('/')\n\tb.WriteString(k.kind)\n\tb.WriteByte(',')\n\tif k.stringID != \"\" {\n\t\tb.WriteString(k.stringID)\n\t} else {\n\t\tb.WriteString(strconv.FormatInt(k.intID, 10))\n\t}\n}\n\n// String returns a string representation of the key.\nfunc (k *Key) String() string {\n\tif k == nil {\n\t\treturn \"\"\n\t}\n\tb := bytes.NewBuffer(make([]byte, 0, 512))\n\tk.marshal(b)\n\treturn b.String()\n}\n\ntype gobKey struct {\n\tKind      string\n\tStringID  string\n\tIntID     int64\n\tParent    *gobKey\n\tAppID     string\n\tNamespace string\n}\n\nfunc keyToGobKey(k *Key) *gobKey {\n\tif k == nil {\n\t\treturn nil\n\t}\n\treturn &gobKey{\n\t\tKind:      k.kind,\n\t\tStringID:  k.stringID,\n\t\tIntID:     k.intID,\n\t\tParent:    keyToGobKey(k.parent),\n\t\tAppID:     k.appID,\n\t\tNamespace: k.namespace,\n\t}\n}\n\nfunc gobKeyToKey(gk *gobKey) *Key {\n\tif gk == nil {\n\t\treturn nil\n\t}\n\treturn &Key{\n\t\tkind:      gk.Kind,\n\t\tstringID:  gk.StringID,\n\t\tintID:     gk.IntID,\n\t\tparent:    gobKeyToKey(gk.Parent),\n\t\tappID:     gk.AppID,\n\t\tnamespace: gk.Namespace,\n\t}\n}\n\nfunc (k *Key) GobEncode() ([]byte, error) {\n\tbuf := new(bytes.Buffer)\n\tif err := gob.NewEncoder(buf).Encode(keyToGobKey(k)); err != nil {\n\t\treturn nil, err\n\t}\n\treturn buf.Bytes(), nil\n}\n\nfunc (k *Key) GobDecode(buf []byte) error {\n\tgk := new(gobKey)\n\tif err := gob.NewDecoder(bytes.NewBuffer(buf)).Decode(gk); err != nil {\n\t\treturn err\n\t}\n\t*k = *gobKeyToKey(gk)\n\treturn nil\n}\n\nfunc (k *Key) MarshalJSON() ([]byte, error) {\n\treturn []byte(`\"` + k.Encode() + `\"`), nil\n}\n\nfunc (k *Key) UnmarshalJSON(buf []byte) error {\n\tif len(buf) < 2 || buf[0] != '\"' || buf[len(buf)-1] != '\"' {\n\t\treturn errors.New(\"datastore: bad JSON key\")\n\t}\n\tk2, err := DecodeKey(string(buf[1 : len(buf)-1]))\n\tif err != nil {\n\t\treturn err\n\t}\n\t*k = *k2\n\treturn nil\n}\n\n// Encode returns an opaque representation of the key\n// suitable for use in HTML and URLs.\n// This is compatible with the Python and Java runtimes.\nfunc (k *Key) Encode() string {\n\tref := keyToProto(\"\", k)\n\n\tb, err := proto.Marshal(ref)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\t// Trailing padding is stripped.\n\treturn strings.TrimRight(base64.URLEncoding.EncodeToString(b), \"=\")\n}\n\n// DecodeKey decodes a key from the opaque representation returned by Encode.\nfunc DecodeKey(encoded string) (*Key, error) {\n\t// Re-add padding.\n\tif m := len(encoded) % 4; m != 0 {\n\t\tencoded += strings.Repeat(\"=\", 4-m)\n\t}\n\n\tb, err := base64.URLEncoding.DecodeString(encoded)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tref := new(pb.Reference)\n\tif err := proto.Unmarshal(b, ref); err != nil {\n\t\t// Couldn't decode it as an App Engine key, try decoding it as a key encoded by cloud.google.com/go/datastore.\n\t\tif k := decodeCloudKey(encoded); k != nil {\n\t\t\treturn k, nil\n\t\t}\n\t\treturn nil, err\n\t}\n\n\treturn protoToKey(ref)\n}\n\n// NewIncompleteKey creates a new incomplete key.\n// kind cannot be empty.\nfunc NewIncompleteKey(c context.Context, kind string, parent *Key) *Key {\n\treturn NewKey(c, kind, \"\", 0, parent)\n}\n\n// NewKey creates a new key.\n// kind cannot be empty.\n// Either one or both of stringID and intID must be zero. If both are zero,\n// the key returned is incomplete.\n// parent must either be a complete key or nil.\nfunc NewKey(c context.Context, kind, stringID string, intID int64, parent *Key) *Key {\n\t// If there's a parent key, use its namespace.\n\t// Otherwise, use any namespace attached to the context.\n\tvar namespace string\n\tif parent != nil {\n\t\tnamespace = parent.namespace\n\t} else {\n\t\tnamespace = internal.NamespaceFromContext(c)\n\t}\n\n\treturn &Key{\n\t\tkind:      kind,\n\t\tstringID:  stringID,\n\t\tintID:     intID,\n\t\tparent:    parent,\n\t\tappID:     internal.FullyQualifiedAppID(c),\n\t\tnamespace: namespace,\n\t}\n}\n\n// AllocateIDs returns a range of n integer IDs with the given kind and parent\n// combination. kind cannot be empty; parent may be nil. The IDs in the range\n// returned will not be used by the datastore's automatic ID sequence generator\n// and may be used with NewKey without conflict.\n//\n// The range is inclusive at the low end and exclusive at the high end. In\n// other words, valid intIDs x satisfy low <= x && x < high.\n//\n// If no error is returned, low + n == high.\nfunc AllocateIDs(c context.Context, kind string, parent *Key, n int) (low, high int64, err error) {\n\tif kind == \"\" {\n\t\treturn 0, 0, errors.New(\"datastore: AllocateIDs given an empty kind\")\n\t}\n\tif n < 0 {\n\t\treturn 0, 0, fmt.Errorf(\"datastore: AllocateIDs given a negative count: %d\", n)\n\t}\n\tif n == 0 {\n\t\treturn 0, 0, nil\n\t}\n\treq := &pb.AllocateIdsRequest{\n\t\tModelKey: keyToProto(\"\", NewIncompleteKey(c, kind, parent)),\n\t\tSize:     proto.Int64(int64(n)),\n\t}\n\tres := &pb.AllocateIdsResponse{}\n\tif err := internal.Call(c, \"datastore_v3\", \"AllocateIds\", req, res); err != nil {\n\t\treturn 0, 0, err\n\t}\n\t// The protobuf is inclusive at both ends. Idiomatic Go (e.g. slices, for loops)\n\t// is inclusive at the low end and exclusive at the high end, so we add 1.\n\tlow = res.GetStart()\n\thigh = res.GetEnd() + 1\n\tif low+int64(n) != high {\n\t\treturn 0, 0, fmt.Errorf(\"datastore: internal error: could not allocate %d IDs\", n)\n\t}\n\treturn low, high, nil\n}\n\n// AllocateIDRange allocates a range of IDs with specific endpoints.\n// The range is inclusive at both the low and high end. Once these IDs have been\n// allocated, you can manually assign them to newly created entities.\n//\n// The Datastore's automatic ID allocator never assigns a key that has already\n// been allocated (either through automatic ID allocation or through an explicit\n// AllocateIDs call). As a result, entities written to the given key range will\n// never be overwritten. However, writing entities with manually assigned keys in\n// this range may overwrite existing entities (or new entities written by a separate\n// request), depending on the error returned.\n//\n// Use this only if you have an existing numeric ID range that you want to reserve\n// (for example, bulk loading entities that already have IDs). If you don't care\n// about which IDs you receive, use AllocateIDs instead.\n//\n// AllocateIDRange returns nil if the range is successfully allocated. If one or more\n// entities with an ID in the given range already exist, it returns a KeyRangeCollisionError.\n// If the Datastore has already cached IDs in this range (e.g. from a previous call to\n// AllocateIDRange), it returns a KeyRangeContentionError. Errors of other types indicate\n// problems with arguments or an error returned directly from the Datastore.\nfunc AllocateIDRange(c context.Context, kind string, parent *Key, start, end int64) (err error) {\n\tif kind == \"\" {\n\t\treturn errors.New(\"datastore: AllocateIDRange given an empty kind\")\n\t}\n\n\tif start < 1 || end < 1 {\n\t\treturn errors.New(\"datastore: AllocateIDRange start and end must both be greater than 0\")\n\t}\n\n\tif start > end {\n\t\treturn errors.New(\"datastore: AllocateIDRange start must be before end\")\n\t}\n\n\treq := &pb.AllocateIdsRequest{\n\t\tModelKey: keyToProto(\"\", NewIncompleteKey(c, kind, parent)),\n\t\tMax:      proto.Int64(end),\n\t}\n\tres := &pb.AllocateIdsResponse{}\n\tif err := internal.Call(c, \"datastore_v3\", \"AllocateIds\", req, res); err != nil {\n\t\treturn err\n\t}\n\n\t// Check for collisions, i.e. existing entities with IDs in this range.\n\t// We could do this before the allocation, but we'd still have to do it\n\t// afterward as well to catch the race condition where an entity is inserted\n\t// after that initial check but before the allocation. Skip the up-front check\n\t// and just do it once.\n\tq := NewQuery(kind).Filter(\"__key__ >=\", NewKey(c, kind, \"\", start, parent)).\n\t\tFilter(\"__key__ <=\", NewKey(c, kind, \"\", end, parent)).KeysOnly().Limit(1)\n\n\tkeys, err := q.GetAll(c, nil)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif len(keys) != 0 {\n\t\treturn &KeyRangeCollisionError{start: start, end: end}\n\t}\n\n\t// Check for a race condition, i.e. cases where the datastore may have\n\t// cached ID batches that contain IDs in this range.\n\tif start < res.GetStart() {\n\t\treturn &KeyRangeContentionError{start: start, end: end}\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/google.golang.org/appengine/datastore/keycompat.go",
    "content": "// Copyright 2019 Google Inc. All rights reserved.\n// Use of this source code is governed by the Apache 2.0\n// license that can be found in the LICENSE file.\n\npackage datastore\n\nimport (\n\t\"sync\"\n\n\t\"golang.org/x/net/context\"\n\n\t\"google.golang.org/appengine/datastore/internal/cloudkey\"\n\t\"google.golang.org/appengine/internal\"\n)\n\nvar keyConversion struct {\n\tmu    sync.RWMutex\n\tappID string // read using getKeyConversionAppID\n}\n\n// EnableKeyConversion enables encoded key compatibility with the Cloud\n// Datastore client library (cloud.google.com/go/datastore). Encoded keys\n// generated by the Cloud Datastore client library will be decoded into App\n// Engine datastore keys.\n//\n// The context provided must be an App Engine context if running in App Engine\n// first generation runtime. This can be called in the /_ah/start handler. It is\n// safe to call multiple times, and is cheap to call, so can also be inserted as\n// middleware.\n//\n// Enabling key compatibility does not affect the encoding format used by\n// Key.Encode, it only expands the type of keys that are able to be decoded with\n// DecodeKey.\nfunc EnableKeyConversion(ctx context.Context) {\n\t// Only attempt to set appID if it's unset.\n\t// If already set, ignore.\n\tif getKeyConversionAppID() != \"\" {\n\t\treturn\n\t}\n\n\tkeyConversion.mu.Lock()\n\t// Check again to avoid race where another goroutine set appID between the call\n\t// to getKeyConversionAppID above and taking the write lock.\n\tif keyConversion.appID == \"\" {\n\t\tkeyConversion.appID = internal.FullyQualifiedAppID(ctx)\n\t}\n\tkeyConversion.mu.Unlock()\n}\n\nfunc getKeyConversionAppID() string {\n\tkeyConversion.mu.RLock()\n\tappID := keyConversion.appID\n\tkeyConversion.mu.RUnlock()\n\treturn appID\n}\n\n// decodeCloudKey attempts to decode the given encoded key generated by the\n// Cloud Datastore client library (cloud.google.com/go/datastore), returning nil\n// if the key couldn't be decoded.\nfunc decodeCloudKey(encoded string) *Key {\n\tappID := getKeyConversionAppID()\n\tif appID == \"\" {\n\t\treturn nil\n\t}\n\n\tk, err := cloudkey.DecodeKey(encoded)\n\tif err != nil {\n\t\treturn nil\n\t}\n\treturn convertCloudKey(k, appID)\n}\n\n// convertCloudKey converts a Cloud Datastore key and converts it to an App\n// Engine Datastore key. Cloud Datastore keys don't include the project/app ID,\n// so we must add it back in.\nfunc convertCloudKey(key *cloudkey.Key, appID string) *Key {\n\tif key == nil {\n\t\treturn nil\n\t}\n\tk := &Key{\n\t\tintID:     key.ID,\n\t\tkind:      key.Kind,\n\t\tnamespace: key.Namespace,\n\t\tparent:    convertCloudKey(key.Parent, appID),\n\t\tstringID:  key.Name,\n\t\tappID:     appID,\n\t}\n\treturn k\n}\n"
  },
  {
    "path": "vendor/google.golang.org/appengine/datastore/load.go",
    "content": "// Copyright 2011 Google Inc. All rights reserved.\n// Use of this source code is governed by the Apache 2.0\n// license that can be found in the LICENSE file.\n\npackage datastore\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/golang/protobuf/proto\"\n\t\"google.golang.org/appengine\"\n\tpb \"google.golang.org/appengine/internal/datastore\"\n)\n\nvar (\n\ttypeOfBlobKey    = reflect.TypeOf(appengine.BlobKey(\"\"))\n\ttypeOfByteSlice  = reflect.TypeOf([]byte(nil))\n\ttypeOfByteString = reflect.TypeOf(ByteString(nil))\n\ttypeOfGeoPoint   = reflect.TypeOf(appengine.GeoPoint{})\n\ttypeOfTime       = reflect.TypeOf(time.Time{})\n\ttypeOfKeyPtr     = reflect.TypeOf(&Key{})\n\ttypeOfEntityPtr  = reflect.TypeOf(&Entity{})\n)\n\n// typeMismatchReason returns a string explaining why the property p could not\n// be stored in an entity field of type v.Type().\nfunc typeMismatchReason(pValue interface{}, v reflect.Value) string {\n\tentityType := \"empty\"\n\tswitch pValue.(type) {\n\tcase int64:\n\t\tentityType = \"int\"\n\tcase bool:\n\t\tentityType = \"bool\"\n\tcase string:\n\t\tentityType = \"string\"\n\tcase float64:\n\t\tentityType = \"float\"\n\tcase *Key:\n\t\tentityType = \"*datastore.Key\"\n\tcase time.Time:\n\t\tentityType = \"time.Time\"\n\tcase appengine.BlobKey:\n\t\tentityType = \"appengine.BlobKey\"\n\tcase appengine.GeoPoint:\n\t\tentityType = \"appengine.GeoPoint\"\n\tcase ByteString:\n\t\tentityType = \"datastore.ByteString\"\n\tcase []byte:\n\t\tentityType = \"[]byte\"\n\t}\n\treturn fmt.Sprintf(\"type mismatch: %s versus %v\", entityType, v.Type())\n}\n\ntype propertyLoader struct {\n\t// m holds the number of times a substruct field like \"Foo.Bar.Baz\" has\n\t// been seen so far. The map is constructed lazily.\n\tm map[string]int\n}\n\nfunc (l *propertyLoader) load(codec *structCodec, structValue reflect.Value, p Property, requireSlice bool) string {\n\tvar v reflect.Value\n\tvar sliceIndex int\n\n\tname := p.Name\n\n\t// If name ends with a '.', the last field is anonymous.\n\t// In this case, strings.Split will give us \"\" as the\n\t// last element of our fields slice, which will match the \"\"\n\t// field name in the substruct codec.\n\tfields := strings.Split(name, \".\")\n\n\tfor len(fields) > 0 {\n\t\tvar decoder fieldCodec\n\t\tvar ok bool\n\n\t\t// Cut off the last field (delimited by \".\") and find its parent\n\t\t// in the codec.\n\t\t// eg. for name \"A.B.C.D\", split off \"A.B.C\" and try to\n\t\t// find a field in the codec with this name.\n\t\t// Loop again with \"A.B\", etc.\n\t\tfor i := len(fields); i > 0; i-- {\n\t\t\tparent := strings.Join(fields[:i], \".\")\n\t\t\tdecoder, ok = codec.fields[parent]\n\t\t\tif ok {\n\t\t\t\tfields = fields[i:]\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\t// If we never found a matching field in the codec, return\n\t\t// error message.\n\t\tif !ok {\n\t\t\treturn \"no such struct field\"\n\t\t}\n\n\t\tv = initField(structValue, decoder.path)\n\t\tif !v.IsValid() {\n\t\t\treturn \"no such struct field\"\n\t\t}\n\t\tif !v.CanSet() {\n\t\t\treturn \"cannot set struct field\"\n\t\t}\n\n\t\tif decoder.structCodec != nil {\n\t\t\tcodec = decoder.structCodec\n\t\t\tstructValue = v\n\t\t}\n\n\t\tif v.Kind() == reflect.Slice && v.Type() != typeOfByteSlice {\n\t\t\tif l.m == nil {\n\t\t\t\tl.m = make(map[string]int)\n\t\t\t}\n\t\t\tsliceIndex = l.m[p.Name]\n\t\t\tl.m[p.Name] = sliceIndex + 1\n\t\t\tfor v.Len() <= sliceIndex {\n\t\t\t\tv.Set(reflect.Append(v, reflect.New(v.Type().Elem()).Elem()))\n\t\t\t}\n\t\t\tstructValue = v.Index(sliceIndex)\n\t\t\trequireSlice = false\n\t\t}\n\t}\n\n\tvar slice reflect.Value\n\tif v.Kind() == reflect.Slice && v.Type().Elem().Kind() != reflect.Uint8 {\n\t\tslice = v\n\t\tv = reflect.New(v.Type().Elem()).Elem()\n\t} else if requireSlice {\n\t\treturn \"multiple-valued property requires a slice field type\"\n\t}\n\n\t// Convert indexValues to a Go value with a meaning derived from the\n\t// destination type.\n\tpValue := p.Value\n\tif iv, ok := pValue.(indexValue); ok {\n\t\tmeaning := pb.Property_NO_MEANING\n\t\tswitch v.Type() {\n\t\tcase typeOfBlobKey:\n\t\t\tmeaning = pb.Property_BLOBKEY\n\t\tcase typeOfByteSlice:\n\t\t\tmeaning = pb.Property_BLOB\n\t\tcase typeOfByteString:\n\t\t\tmeaning = pb.Property_BYTESTRING\n\t\tcase typeOfGeoPoint:\n\t\t\tmeaning = pb.Property_GEORSS_POINT\n\t\tcase typeOfTime:\n\t\t\tmeaning = pb.Property_GD_WHEN\n\t\tcase typeOfEntityPtr:\n\t\t\tmeaning = pb.Property_ENTITY_PROTO\n\t\t}\n\t\tvar err error\n\t\tpValue, err = propValue(iv.value, meaning)\n\t\tif err != nil {\n\t\t\treturn err.Error()\n\t\t}\n\t}\n\n\tif errReason := setVal(v, pValue); errReason != \"\" {\n\t\t// Set the slice back to its zero value.\n\t\tif slice.IsValid() {\n\t\t\tslice.Set(reflect.Zero(slice.Type()))\n\t\t}\n\t\treturn errReason\n\t}\n\n\tif slice.IsValid() {\n\t\tslice.Index(sliceIndex).Set(v)\n\t}\n\n\treturn \"\"\n}\n\n// setVal sets v to the value pValue.\nfunc setVal(v reflect.Value, pValue interface{}) string {\n\tswitch v.Kind() {\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\tx, ok := pValue.(int64)\n\t\tif !ok && pValue != nil {\n\t\t\treturn typeMismatchReason(pValue, v)\n\t\t}\n\t\tif v.OverflowInt(x) {\n\t\t\treturn fmt.Sprintf(\"value %v overflows struct field of type %v\", x, v.Type())\n\t\t}\n\t\tv.SetInt(x)\n\tcase reflect.Bool:\n\t\tx, ok := pValue.(bool)\n\t\tif !ok && pValue != nil {\n\t\t\treturn typeMismatchReason(pValue, v)\n\t\t}\n\t\tv.SetBool(x)\n\tcase reflect.String:\n\t\tswitch x := pValue.(type) {\n\t\tcase appengine.BlobKey:\n\t\t\tv.SetString(string(x))\n\t\tcase ByteString:\n\t\t\tv.SetString(string(x))\n\t\tcase string:\n\t\t\tv.SetString(x)\n\t\tdefault:\n\t\t\tif pValue != nil {\n\t\t\t\treturn typeMismatchReason(pValue, v)\n\t\t\t}\n\t\t}\n\tcase reflect.Float32, reflect.Float64:\n\t\tx, ok := pValue.(float64)\n\t\tif !ok && pValue != nil {\n\t\t\treturn typeMismatchReason(pValue, v)\n\t\t}\n\t\tif v.OverflowFloat(x) {\n\t\t\treturn fmt.Sprintf(\"value %v overflows struct field of type %v\", x, v.Type())\n\t\t}\n\t\tv.SetFloat(x)\n\tcase reflect.Ptr:\n\t\tx, ok := pValue.(*Key)\n\t\tif !ok && pValue != nil {\n\t\t\treturn typeMismatchReason(pValue, v)\n\t\t}\n\t\tif _, ok := v.Interface().(*Key); !ok {\n\t\t\treturn typeMismatchReason(pValue, v)\n\t\t}\n\t\tv.Set(reflect.ValueOf(x))\n\tcase reflect.Struct:\n\t\tswitch v.Type() {\n\t\tcase typeOfTime:\n\t\t\tx, ok := pValue.(time.Time)\n\t\t\tif !ok && pValue != nil {\n\t\t\t\treturn typeMismatchReason(pValue, v)\n\t\t\t}\n\t\t\tv.Set(reflect.ValueOf(x))\n\t\tcase typeOfGeoPoint:\n\t\t\tx, ok := pValue.(appengine.GeoPoint)\n\t\t\tif !ok && pValue != nil {\n\t\t\t\treturn typeMismatchReason(pValue, v)\n\t\t\t}\n\t\t\tv.Set(reflect.ValueOf(x))\n\t\tdefault:\n\t\t\tent, ok := pValue.(*Entity)\n\t\t\tif !ok {\n\t\t\t\treturn typeMismatchReason(pValue, v)\n\t\t\t}\n\n\t\t\t// Recursively load nested struct\n\t\t\tpls, err := newStructPLS(v.Addr().Interface())\n\t\t\tif err != nil {\n\t\t\t\treturn err.Error()\n\t\t\t}\n\n\t\t\t// if ent has a Key value and our struct has a Key field,\n\t\t\t// load the Entity's Key value into the Key field on the struct.\n\t\t\tif ent.Key != nil && pls.codec.keyField != -1 {\n\n\t\t\t\tpls.v.Field(pls.codec.keyField).Set(reflect.ValueOf(ent.Key))\n\t\t\t}\n\n\t\t\terr = pls.Load(ent.Properties)\n\t\t\tif err != nil {\n\t\t\t\treturn err.Error()\n\t\t\t}\n\t\t}\n\tcase reflect.Slice:\n\t\tx, ok := pValue.([]byte)\n\t\tif !ok {\n\t\t\tif y, yok := pValue.(ByteString); yok {\n\t\t\t\tx, ok = []byte(y), true\n\t\t\t}\n\t\t}\n\t\tif !ok && pValue != nil {\n\t\t\treturn typeMismatchReason(pValue, v)\n\t\t}\n\t\tif v.Type().Elem().Kind() != reflect.Uint8 {\n\t\t\treturn typeMismatchReason(pValue, v)\n\t\t}\n\t\tv.SetBytes(x)\n\tdefault:\n\t\treturn typeMismatchReason(pValue, v)\n\t}\n\treturn \"\"\n}\n\n// initField is similar to reflect's Value.FieldByIndex, in that it\n// returns the nested struct field corresponding to index, but it\n// initialises any nil pointers encountered when traversing the structure.\nfunc initField(val reflect.Value, index []int) reflect.Value {\n\tfor _, i := range index[:len(index)-1] {\n\t\tval = val.Field(i)\n\t\tif val.Kind() == reflect.Ptr {\n\t\t\tif val.IsNil() {\n\t\t\t\tval.Set(reflect.New(val.Type().Elem()))\n\t\t\t}\n\t\t\tval = val.Elem()\n\t\t}\n\t}\n\treturn val.Field(index[len(index)-1])\n}\n\n// loadEntity loads an EntityProto into PropertyLoadSaver or struct pointer.\nfunc loadEntity(dst interface{}, src *pb.EntityProto) (err error) {\n\tent, err := protoToEntity(src)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif e, ok := dst.(PropertyLoadSaver); ok {\n\t\treturn e.Load(ent.Properties)\n\t}\n\treturn LoadStruct(dst, ent.Properties)\n}\n\nfunc (s structPLS) Load(props []Property) error {\n\tvar fieldName, reason string\n\tvar l propertyLoader\n\tfor _, p := range props {\n\t\tif errStr := l.load(s.codec, s.v, p, p.Multiple); errStr != \"\" {\n\t\t\t// We don't return early, as we try to load as many properties as possible.\n\t\t\t// It is valid to load an entity into a struct that cannot fully represent it.\n\t\t\t// That case returns an error, but the caller is free to ignore it.\n\t\t\tfieldName, reason = p.Name, errStr\n\t\t}\n\t}\n\tif reason != \"\" {\n\t\treturn &ErrFieldMismatch{\n\t\t\tStructType: s.v.Type(),\n\t\t\tFieldName:  fieldName,\n\t\t\tReason:     reason,\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc protoToEntity(src *pb.EntityProto) (*Entity, error) {\n\tprops, rawProps := src.Property, src.RawProperty\n\toutProps := make([]Property, 0, len(props)+len(rawProps))\n\tfor {\n\t\tvar (\n\t\t\tx       *pb.Property\n\t\t\tnoIndex bool\n\t\t)\n\t\tif len(props) > 0 {\n\t\t\tx, props = props[0], props[1:]\n\t\t} else if len(rawProps) > 0 {\n\t\t\tx, rawProps = rawProps[0], rawProps[1:]\n\t\t\tnoIndex = true\n\t\t} else {\n\t\t\tbreak\n\t\t}\n\n\t\tvar value interface{}\n\t\tif x.Meaning != nil && *x.Meaning == pb.Property_INDEX_VALUE {\n\t\t\tvalue = indexValue{x.Value}\n\t\t} else {\n\t\t\tvar err error\n\t\t\tvalue, err = propValue(x.Value, x.GetMeaning())\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t}\n\t\toutProps = append(outProps, Property{\n\t\t\tName:     x.GetName(),\n\t\t\tValue:    value,\n\t\t\tNoIndex:  noIndex,\n\t\t\tMultiple: x.GetMultiple(),\n\t\t})\n\t}\n\n\tvar key *Key\n\tif src.Key != nil {\n\t\t// Ignore any error, since nested entity values\n\t\t// are allowed to have an invalid key.\n\t\tkey, _ = protoToKey(src.Key)\n\t}\n\treturn &Entity{key, outProps}, nil\n}\n\n// propValue returns a Go value that combines the raw PropertyValue with a\n// meaning. For example, an Int64Value with GD_WHEN becomes a time.Time.\nfunc propValue(v *pb.PropertyValue, m pb.Property_Meaning) (interface{}, error) {\n\tswitch {\n\tcase v.Int64Value != nil:\n\t\tif m == pb.Property_GD_WHEN {\n\t\t\treturn fromUnixMicro(*v.Int64Value), nil\n\t\t} else {\n\t\t\treturn *v.Int64Value, nil\n\t\t}\n\tcase v.BooleanValue != nil:\n\t\treturn *v.BooleanValue, nil\n\tcase v.StringValue != nil:\n\t\tif m == pb.Property_BLOB {\n\t\t\treturn []byte(*v.StringValue), nil\n\t\t} else if m == pb.Property_BLOBKEY {\n\t\t\treturn appengine.BlobKey(*v.StringValue), nil\n\t\t} else if m == pb.Property_BYTESTRING {\n\t\t\treturn ByteString(*v.StringValue), nil\n\t\t} else if m == pb.Property_ENTITY_PROTO {\n\t\t\tvar ent pb.EntityProto\n\t\t\terr := proto.Unmarshal([]byte(*v.StringValue), &ent)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\treturn protoToEntity(&ent)\n\t\t} else {\n\t\t\treturn *v.StringValue, nil\n\t\t}\n\tcase v.DoubleValue != nil:\n\t\treturn *v.DoubleValue, nil\n\tcase v.Referencevalue != nil:\n\t\tkey, err := referenceValueToKey(v.Referencevalue)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn key, nil\n\tcase v.Pointvalue != nil:\n\t\t// NOTE: Strangely, latitude maps to X, longitude to Y.\n\t\treturn appengine.GeoPoint{Lat: v.Pointvalue.GetX(), Lng: v.Pointvalue.GetY()}, nil\n\t}\n\treturn nil, nil\n}\n\n// indexValue is a Property value that is created when entities are loaded from\n// an index, such as from a projection query.\n//\n// Such Property values do not contain all of the metadata required to be\n// faithfully represented as a Go value, and are instead represented as an\n// opaque indexValue. Load the properties into a concrete struct type (e.g. by\n// passing a struct pointer to Iterator.Next) to reconstruct actual Go values\n// of type int, string, time.Time, etc.\ntype indexValue struct {\n\tvalue *pb.PropertyValue\n}\n"
  },
  {
    "path": "vendor/google.golang.org/appengine/datastore/metadata.go",
    "content": "// Copyright 2016 Google Inc. All rights reserved.\n// Use of this source code is governed by the Apache 2.0\n// license that can be found in the LICENSE file.\n\npackage datastore\n\nimport \"golang.org/x/net/context\"\n\n// Datastore kinds for the metadata entities.\nconst (\n\tnamespaceKind = \"__namespace__\"\n\tkindKind      = \"__kind__\"\n\tpropertyKind  = \"__property__\"\n)\n\n// Namespaces returns all the datastore namespaces.\nfunc Namespaces(ctx context.Context) ([]string, error) {\n\t// TODO(djd): Support range queries.\n\tq := NewQuery(namespaceKind).KeysOnly()\n\tkeys, err := q.GetAll(ctx, nil)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\t// The empty namespace key uses a numeric ID (==1), but luckily\n\t// the string ID defaults to \"\" for numeric IDs anyway.\n\treturn keyNames(keys), nil\n}\n\n// Kinds returns the names of all the kinds in the current namespace.\nfunc Kinds(ctx context.Context) ([]string, error) {\n\t// TODO(djd): Support range queries.\n\tq := NewQuery(kindKind).KeysOnly()\n\tkeys, err := q.GetAll(ctx, nil)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn keyNames(keys), nil\n}\n\n// keyNames returns a slice of the provided keys' names (string IDs).\nfunc keyNames(keys []*Key) []string {\n\tn := make([]string, 0, len(keys))\n\tfor _, k := range keys {\n\t\tn = append(n, k.StringID())\n\t}\n\treturn n\n}\n\n// KindProperties returns all the indexed properties for the given kind.\n// The properties are returned as a map of property names to a slice of the\n// representation types. The representation types for the supported Go property\n// types are:\n//   \"INT64\":     signed integers and time.Time\n//   \"DOUBLE\":    float32 and float64\n//   \"BOOLEAN\":   bool\n//   \"STRING\":    string, []byte and ByteString\n//   \"POINT\":     appengine.GeoPoint\n//   \"REFERENCE\": *Key\n//   \"USER\":      (not used in the Go runtime)\nfunc KindProperties(ctx context.Context, kind string) (map[string][]string, error) {\n\t// TODO(djd): Support range queries.\n\tkindKey := NewKey(ctx, kindKind, kind, 0, nil)\n\tq := NewQuery(propertyKind).Ancestor(kindKey)\n\n\tpropMap := map[string][]string{}\n\tprops := []struct {\n\t\tRepr []string `datastore:\"property_representation\"`\n\t}{}\n\n\tkeys, err := q.GetAll(ctx, &props)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tfor i, p := range props {\n\t\tpropMap[keys[i].StringID()] = p.Repr\n\t}\n\treturn propMap, nil\n}\n"
  },
  {
    "path": "vendor/google.golang.org/appengine/datastore/prop.go",
    "content": "// Copyright 2011 Google Inc. All rights reserved.\n// Use of this source code is governed by the Apache 2.0\n// license that can be found in the LICENSE file.\n\npackage datastore\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\t\"strings\"\n\t\"sync\"\n\t\"unicode\"\n)\n\n// Entities with more than this many indexed properties will not be saved.\nconst maxIndexedProperties = 20000\n\n// []byte fields more than 1 megabyte long will not be loaded or saved.\nconst maxBlobLen = 1 << 20\n\n// Property is a name/value pair plus some metadata. A datastore entity's\n// contents are loaded and saved as a sequence of Properties. An entity can\n// have multiple Properties with the same name, provided that p.Multiple is\n// true on all of that entity's Properties with that name.\ntype Property struct {\n\t// Name is the property name.\n\tName string\n\t// Value is the property value. The valid types are:\n\t//\t- int64\n\t//\t- bool\n\t//\t- string\n\t//\t- float64\n\t//\t- ByteString\n\t//\t- *Key\n\t//\t- time.Time\n\t//\t- appengine.BlobKey\n\t//\t- appengine.GeoPoint\n\t//\t- []byte (up to 1 megabyte in length)\n\t//\t- *Entity (representing a nested struct)\n\t// This set is smaller than the set of valid struct field types that the\n\t// datastore can load and save. A Property Value cannot be a slice (apart\n\t// from []byte); use multiple Properties instead. Also, a Value's type\n\t// must be explicitly on the list above; it is not sufficient for the\n\t// underlying type to be on that list. For example, a Value of \"type\n\t// myInt64 int64\" is invalid. Smaller-width integers and floats are also\n\t// invalid. Again, this is more restrictive than the set of valid struct\n\t// field types.\n\t//\n\t// A Value will have an opaque type when loading entities from an index,\n\t// such as via a projection query. Load entities into a struct instead\n\t// of a PropertyLoadSaver when using a projection query.\n\t//\n\t// A Value may also be the nil interface value; this is equivalent to\n\t// Python's None but not directly representable by a Go struct. Loading\n\t// a nil-valued property into a struct will set that field to the zero\n\t// value.\n\tValue interface{}\n\t// NoIndex is whether the datastore cannot index this property.\n\tNoIndex bool\n\t// Multiple is whether the entity can have multiple properties with\n\t// the same name. Even if a particular instance only has one property with\n\t// a certain name, Multiple should be true if a struct would best represent\n\t// it as a field of type []T instead of type T.\n\tMultiple bool\n}\n\n// An Entity is the value type for a nested struct.\n// This type is only used for a Property's Value.\ntype Entity struct {\n\tKey        *Key\n\tProperties []Property\n}\n\n// ByteString is a short byte slice (up to 1500 bytes) that can be indexed.\ntype ByteString []byte\n\n// PropertyLoadSaver can be converted from and to a slice of Properties.\ntype PropertyLoadSaver interface {\n\tLoad([]Property) error\n\tSave() ([]Property, error)\n}\n\n// PropertyList converts a []Property to implement PropertyLoadSaver.\ntype PropertyList []Property\n\nvar (\n\ttypeOfPropertyLoadSaver = reflect.TypeOf((*PropertyLoadSaver)(nil)).Elem()\n\ttypeOfPropertyList      = reflect.TypeOf(PropertyList(nil))\n)\n\n// Load loads all of the provided properties into l.\n// It does not first reset *l to an empty slice.\nfunc (l *PropertyList) Load(p []Property) error {\n\t*l = append(*l, p...)\n\treturn nil\n}\n\n// Save saves all of l's properties as a slice or Properties.\nfunc (l *PropertyList) Save() ([]Property, error) {\n\treturn *l, nil\n}\n\n// validPropertyName returns whether name consists of one or more valid Go\n// identifiers joined by \".\".\nfunc validPropertyName(name string) bool {\n\tif name == \"\" {\n\t\treturn false\n\t}\n\tfor _, s := range strings.Split(name, \".\") {\n\t\tif s == \"\" {\n\t\t\treturn false\n\t\t}\n\t\tfirst := true\n\t\tfor _, c := range s {\n\t\t\tif first {\n\t\t\t\tfirst = false\n\t\t\t\tif c != '_' && !unicode.IsLetter(c) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif c != '_' && !unicode.IsLetter(c) && !unicode.IsDigit(c) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn true\n}\n\n// structCodec describes how to convert a struct to and from a sequence of\n// properties.\ntype structCodec struct {\n\t// fields gives the field codec for the structTag with the given name.\n\tfields map[string]fieldCodec\n\t// hasSlice is whether a struct or any of its nested or embedded structs\n\t// has a slice-typed field (other than []byte).\n\thasSlice bool\n\t// keyField is the index of a *Key field with structTag __key__.\n\t// This field is not relevant for the top level struct, only for\n\t// nested structs.\n\tkeyField int\n\t// complete is whether the structCodec is complete. An incomplete\n\t// structCodec may be encountered when walking a recursive struct.\n\tcomplete bool\n}\n\n// fieldCodec is a struct field's index and, if that struct field's type is\n// itself a struct, that substruct's structCodec.\ntype fieldCodec struct {\n\t// path is the index path to the field\n\tpath    []int\n\tnoIndex bool\n\t// omitEmpty indicates that the field should be omitted on save\n\t// if empty.\n\tomitEmpty bool\n\t// structCodec is the codec fot the struct field at index 'path',\n\t// or nil if the field is not a struct.\n\tstructCodec *structCodec\n}\n\n// structCodecs collects the structCodecs that have already been calculated.\nvar (\n\tstructCodecsMutex sync.Mutex\n\tstructCodecs      = make(map[reflect.Type]*structCodec)\n)\n\n// getStructCodec returns the structCodec for the given struct type.\nfunc getStructCodec(t reflect.Type) (*structCodec, error) {\n\tstructCodecsMutex.Lock()\n\tdefer structCodecsMutex.Unlock()\n\treturn getStructCodecLocked(t)\n}\n\n// getStructCodecLocked implements getStructCodec. The structCodecsMutex must\n// be held when calling this function.\nfunc getStructCodecLocked(t reflect.Type) (ret *structCodec, retErr error) {\n\tc, ok := structCodecs[t]\n\tif ok {\n\t\treturn c, nil\n\t}\n\tc = &structCodec{\n\t\tfields: make(map[string]fieldCodec),\n\t\t// We initialize keyField to -1 so that the zero-value is not\n\t\t// misinterpreted as index 0.\n\t\tkeyField: -1,\n\t}\n\n\t// Add c to the structCodecs map before we are sure it is good. If t is\n\t// a recursive type, it needs to find the incomplete entry for itself in\n\t// the map.\n\tstructCodecs[t] = c\n\tdefer func() {\n\t\tif retErr != nil {\n\t\t\tdelete(structCodecs, t)\n\t\t}\n\t}()\n\n\tfor i := 0; i < t.NumField(); i++ {\n\t\tf := t.Field(i)\n\t\t// Skip unexported fields.\n\t\t// Note that if f is an anonymous, unexported struct field,\n\t\t// we will promote its fields.\n\t\tif f.PkgPath != \"\" && !f.Anonymous {\n\t\t\tcontinue\n\t\t}\n\n\t\ttags := strings.Split(f.Tag.Get(\"datastore\"), \",\")\n\t\tname := tags[0]\n\t\topts := make(map[string]bool)\n\t\tfor _, t := range tags[1:] {\n\t\t\topts[t] = true\n\t\t}\n\t\tswitch {\n\t\tcase name == \"\":\n\t\t\tif !f.Anonymous {\n\t\t\t\tname = f.Name\n\t\t\t}\n\t\tcase name == \"-\":\n\t\t\tcontinue\n\t\tcase name == \"__key__\":\n\t\t\tif f.Type != typeOfKeyPtr {\n\t\t\t\treturn nil, fmt.Errorf(\"datastore: __key__ field on struct %v is not a *datastore.Key\", t)\n\t\t\t}\n\t\t\tc.keyField = i\n\t\tcase !validPropertyName(name):\n\t\t\treturn nil, fmt.Errorf(\"datastore: struct tag has invalid property name: %q\", name)\n\t\t}\n\n\t\tsubstructType, fIsSlice := reflect.Type(nil), false\n\t\tswitch f.Type.Kind() {\n\t\tcase reflect.Struct:\n\t\t\tsubstructType = f.Type\n\t\tcase reflect.Slice:\n\t\t\tif f.Type.Elem().Kind() == reflect.Struct {\n\t\t\t\tsubstructType = f.Type.Elem()\n\t\t\t}\n\t\t\tfIsSlice = f.Type != typeOfByteSlice\n\t\t\tc.hasSlice = c.hasSlice || fIsSlice\n\t\t}\n\n\t\tvar sub *structCodec\n\t\tif substructType != nil && substructType != typeOfTime && substructType != typeOfGeoPoint {\n\t\t\tvar err error\n\t\t\tsub, err = getStructCodecLocked(substructType)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tif !sub.complete {\n\t\t\t\treturn nil, fmt.Errorf(\"datastore: recursive struct: field %q\", f.Name)\n\t\t\t}\n\t\t\tif fIsSlice && sub.hasSlice {\n\t\t\t\treturn nil, fmt.Errorf(\n\t\t\t\t\t\"datastore: flattening nested structs leads to a slice of slices: field %q\", f.Name)\n\t\t\t}\n\t\t\tc.hasSlice = c.hasSlice || sub.hasSlice\n\t\t\t// If f is an anonymous struct field, we promote the substruct's fields up to this level\n\t\t\t// in the linked list of struct codecs.\n\t\t\tif f.Anonymous {\n\t\t\t\tfor subname, subfield := range sub.fields {\n\t\t\t\t\tif name != \"\" {\n\t\t\t\t\t\tsubname = name + \".\" + subname\n\t\t\t\t\t}\n\t\t\t\t\tif _, ok := c.fields[subname]; ok {\n\t\t\t\t\t\treturn nil, fmt.Errorf(\"datastore: struct tag has repeated property name: %q\", subname)\n\t\t\t\t\t}\n\t\t\t\t\tc.fields[subname] = fieldCodec{\n\t\t\t\t\t\tpath:        append([]int{i}, subfield.path...),\n\t\t\t\t\t\tnoIndex:     subfield.noIndex || opts[\"noindex\"],\n\t\t\t\t\t\tomitEmpty:   subfield.omitEmpty,\n\t\t\t\t\t\tstructCodec: subfield.structCodec,\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\tif _, ok := c.fields[name]; ok {\n\t\t\treturn nil, fmt.Errorf(\"datastore: struct tag has repeated property name: %q\", name)\n\t\t}\n\t\tc.fields[name] = fieldCodec{\n\t\t\tpath:        []int{i},\n\t\t\tnoIndex:     opts[\"noindex\"],\n\t\t\tomitEmpty:   opts[\"omitempty\"],\n\t\t\tstructCodec: sub,\n\t\t}\n\t}\n\tc.complete = true\n\treturn c, nil\n}\n\n// structPLS adapts a struct to be a PropertyLoadSaver.\ntype structPLS struct {\n\tv     reflect.Value\n\tcodec *structCodec\n}\n\n// newStructPLS returns a structPLS, which implements the\n// PropertyLoadSaver interface, for the struct pointer p.\nfunc newStructPLS(p interface{}) (*structPLS, error) {\n\tv := reflect.ValueOf(p)\n\tif v.Kind() != reflect.Ptr || v.Elem().Kind() != reflect.Struct {\n\t\treturn nil, ErrInvalidEntityType\n\t}\n\tv = v.Elem()\n\tcodec, err := getStructCodec(v.Type())\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &structPLS{v, codec}, nil\n}\n\n// LoadStruct loads the properties from p to dst.\n// dst must be a struct pointer.\nfunc LoadStruct(dst interface{}, p []Property) error {\n\tx, err := newStructPLS(dst)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn x.Load(p)\n}\n\n// SaveStruct returns the properties from src as a slice of Properties.\n// src must be a struct pointer.\nfunc SaveStruct(src interface{}) ([]Property, error) {\n\tx, err := newStructPLS(src)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn x.Save()\n}\n"
  },
  {
    "path": "vendor/google.golang.org/appengine/datastore/query.go",
    "content": "// Copyright 2011 Google Inc. All rights reserved.\n// Use of this source code is governed by the Apache 2.0\n// license that can be found in the LICENSE file.\n\npackage datastore\n\nimport (\n\t\"encoding/base64\"\n\t\"errors\"\n\t\"fmt\"\n\t\"math\"\n\t\"reflect\"\n\t\"strings\"\n\n\t\"github.com/golang/protobuf/proto\"\n\t\"golang.org/x/net/context\"\n\n\t\"google.golang.org/appengine/internal\"\n\tpb \"google.golang.org/appengine/internal/datastore\"\n)\n\ntype operator int\n\nconst (\n\tlessThan operator = iota\n\tlessEq\n\tequal\n\tgreaterEq\n\tgreaterThan\n)\n\nvar operatorToProto = map[operator]*pb.Query_Filter_Operator{\n\tlessThan:    pb.Query_Filter_LESS_THAN.Enum(),\n\tlessEq:      pb.Query_Filter_LESS_THAN_OR_EQUAL.Enum(),\n\tequal:       pb.Query_Filter_EQUAL.Enum(),\n\tgreaterEq:   pb.Query_Filter_GREATER_THAN_OR_EQUAL.Enum(),\n\tgreaterThan: pb.Query_Filter_GREATER_THAN.Enum(),\n}\n\n// filter is a conditional filter on query results.\ntype filter struct {\n\tFieldName string\n\tOp        operator\n\tValue     interface{}\n}\n\ntype sortDirection int\n\nconst (\n\tascending sortDirection = iota\n\tdescending\n)\n\nvar sortDirectionToProto = map[sortDirection]*pb.Query_Order_Direction{\n\tascending:  pb.Query_Order_ASCENDING.Enum(),\n\tdescending: pb.Query_Order_DESCENDING.Enum(),\n}\n\n// order is a sort order on query results.\ntype order struct {\n\tFieldName string\n\tDirection sortDirection\n}\n\n// NewQuery creates a new Query for a specific entity kind.\n//\n// An empty kind means to return all entities, including entities created and\n// managed by other App Engine features, and is called a kindless query.\n// Kindless queries cannot include filters or sort orders on property values.\nfunc NewQuery(kind string) *Query {\n\treturn &Query{\n\t\tkind:  kind,\n\t\tlimit: -1,\n\t}\n}\n\n// Query represents a datastore query.\ntype Query struct {\n\tkind       string\n\tancestor   *Key\n\tfilter     []filter\n\torder      []order\n\tprojection []string\n\n\tdistinct   bool\n\tdistinctOn []string\n\tkeysOnly   bool\n\teventual   bool\n\tlimit      int32\n\toffset     int32\n\tcount      int32\n\tstart      *pb.CompiledCursor\n\tend        *pb.CompiledCursor\n\n\terr error\n}\n\nfunc (q *Query) clone() *Query {\n\tx := *q\n\t// Copy the contents of the slice-typed fields to a new backing store.\n\tif len(q.filter) > 0 {\n\t\tx.filter = make([]filter, len(q.filter))\n\t\tcopy(x.filter, q.filter)\n\t}\n\tif len(q.order) > 0 {\n\t\tx.order = make([]order, len(q.order))\n\t\tcopy(x.order, q.order)\n\t}\n\treturn &x\n}\n\n// Ancestor returns a derivative query with an ancestor filter.\n// The ancestor should not be nil.\nfunc (q *Query) Ancestor(ancestor *Key) *Query {\n\tq = q.clone()\n\tif ancestor == nil {\n\t\tq.err = errors.New(\"datastore: nil query ancestor\")\n\t\treturn q\n\t}\n\tq.ancestor = ancestor\n\treturn q\n}\n\n// EventualConsistency returns a derivative query that returns eventually\n// consistent results.\n// It only has an effect on ancestor queries.\nfunc (q *Query) EventualConsistency() *Query {\n\tq = q.clone()\n\tq.eventual = true\n\treturn q\n}\n\n// Filter returns a derivative query with a field-based filter.\n// The filterStr argument must be a field name followed by optional space,\n// followed by an operator, one of \">\", \"<\", \">=\", \"<=\", or \"=\".\n// Fields are compared against the provided value using the operator.\n// Multiple filters are AND'ed together.\nfunc (q *Query) Filter(filterStr string, value interface{}) *Query {\n\tq = q.clone()\n\tfilterStr = strings.TrimSpace(filterStr)\n\tif len(filterStr) < 1 {\n\t\tq.err = errors.New(\"datastore: invalid filter: \" + filterStr)\n\t\treturn q\n\t}\n\tf := filter{\n\t\tFieldName: strings.TrimRight(filterStr, \" ><=!\"),\n\t\tValue:     value,\n\t}\n\tswitch op := strings.TrimSpace(filterStr[len(f.FieldName):]); op {\n\tcase \"<=\":\n\t\tf.Op = lessEq\n\tcase \">=\":\n\t\tf.Op = greaterEq\n\tcase \"<\":\n\t\tf.Op = lessThan\n\tcase \">\":\n\t\tf.Op = greaterThan\n\tcase \"=\":\n\t\tf.Op = equal\n\tdefault:\n\t\tq.err = fmt.Errorf(\"datastore: invalid operator %q in filter %q\", op, filterStr)\n\t\treturn q\n\t}\n\tq.filter = append(q.filter, f)\n\treturn q\n}\n\n// Order returns a derivative query with a field-based sort order. Orders are\n// applied in the order they are added. The default order is ascending; to sort\n// in descending order prefix the fieldName with a minus sign (-).\nfunc (q *Query) Order(fieldName string) *Query {\n\tq = q.clone()\n\tfieldName = strings.TrimSpace(fieldName)\n\to := order{\n\t\tDirection: ascending,\n\t\tFieldName: fieldName,\n\t}\n\tif strings.HasPrefix(fieldName, \"-\") {\n\t\to.Direction = descending\n\t\to.FieldName = strings.TrimSpace(fieldName[1:])\n\t} else if strings.HasPrefix(fieldName, \"+\") {\n\t\tq.err = fmt.Errorf(\"datastore: invalid order: %q\", fieldName)\n\t\treturn q\n\t}\n\tif len(o.FieldName) == 0 {\n\t\tq.err = errors.New(\"datastore: empty order\")\n\t\treturn q\n\t}\n\tq.order = append(q.order, o)\n\treturn q\n}\n\n// Project returns a derivative query that yields only the given fields. It\n// cannot be used with KeysOnly.\nfunc (q *Query) Project(fieldNames ...string) *Query {\n\tq = q.clone()\n\tq.projection = append([]string(nil), fieldNames...)\n\treturn q\n}\n\n// Distinct returns a derivative query that yields de-duplicated entities with\n// respect to the set of projected fields. It is only used for projection\n// queries. Distinct cannot be used with DistinctOn.\nfunc (q *Query) Distinct() *Query {\n\tq = q.clone()\n\tq.distinct = true\n\treturn q\n}\n\n// DistinctOn returns a derivative query that yields de-duplicated entities with\n// respect to the set of the specified fields. It is only used for projection\n// queries. The field list should be a subset of the projected field list.\n// DistinctOn cannot be used with Distinct.\nfunc (q *Query) DistinctOn(fieldNames ...string) *Query {\n\tq = q.clone()\n\tq.distinctOn = fieldNames\n\treturn q\n}\n\n// KeysOnly returns a derivative query that yields only keys, not keys and\n// entities. It cannot be used with projection queries.\nfunc (q *Query) KeysOnly() *Query {\n\tq = q.clone()\n\tq.keysOnly = true\n\treturn q\n}\n\n// Limit returns a derivative query that has a limit on the number of results\n// returned. A negative value means unlimited.\nfunc (q *Query) Limit(limit int) *Query {\n\tq = q.clone()\n\tif limit < math.MinInt32 || limit > math.MaxInt32 {\n\t\tq.err = errors.New(\"datastore: query limit overflow\")\n\t\treturn q\n\t}\n\tq.limit = int32(limit)\n\treturn q\n}\n\n// Offset returns a derivative query that has an offset of how many keys to\n// skip over before returning results. A negative value is invalid.\nfunc (q *Query) Offset(offset int) *Query {\n\tq = q.clone()\n\tif offset < 0 {\n\t\tq.err = errors.New(\"datastore: negative query offset\")\n\t\treturn q\n\t}\n\tif offset > math.MaxInt32 {\n\t\tq.err = errors.New(\"datastore: query offset overflow\")\n\t\treturn q\n\t}\n\tq.offset = int32(offset)\n\treturn q\n}\n\n// BatchSize returns a derivative query to fetch the supplied number of results\n// at once. This value should be greater than zero, and equal to or less than\n// the Limit.\nfunc (q *Query) BatchSize(size int) *Query {\n\tq = q.clone()\n\tif size <= 0 || size > math.MaxInt32 {\n\t\tq.err = errors.New(\"datastore: query batch size overflow\")\n\t\treturn q\n\t}\n\tq.count = int32(size)\n\treturn q\n}\n\n// Start returns a derivative query with the given start point.\nfunc (q *Query) Start(c Cursor) *Query {\n\tq = q.clone()\n\tif c.cc == nil {\n\t\tq.err = errors.New(\"datastore: invalid cursor\")\n\t\treturn q\n\t}\n\tq.start = c.cc\n\treturn q\n}\n\n// End returns a derivative query with the given end point.\nfunc (q *Query) End(c Cursor) *Query {\n\tq = q.clone()\n\tif c.cc == nil {\n\t\tq.err = errors.New(\"datastore: invalid cursor\")\n\t\treturn q\n\t}\n\tq.end = c.cc\n\treturn q\n}\n\n// toProto converts the query to a protocol buffer.\nfunc (q *Query) toProto(dst *pb.Query, appID string) error {\n\tif len(q.projection) != 0 && q.keysOnly {\n\t\treturn errors.New(\"datastore: query cannot both project and be keys-only\")\n\t}\n\tif len(q.distinctOn) != 0 && q.distinct {\n\t\treturn errors.New(\"datastore: query cannot be both distinct and distinct-on\")\n\t}\n\tdst.Reset()\n\tdst.App = proto.String(appID)\n\tif q.kind != \"\" {\n\t\tdst.Kind = proto.String(q.kind)\n\t}\n\tif q.ancestor != nil {\n\t\tdst.Ancestor = keyToProto(appID, q.ancestor)\n\t\tif q.eventual {\n\t\t\tdst.Strong = proto.Bool(false)\n\t\t}\n\t}\n\tif q.projection != nil {\n\t\tdst.PropertyName = q.projection\n\t\tif len(q.distinctOn) != 0 {\n\t\t\tdst.GroupByPropertyName = q.distinctOn\n\t\t}\n\t\tif q.distinct {\n\t\t\tdst.GroupByPropertyName = q.projection\n\t\t}\n\t}\n\tif q.keysOnly {\n\t\tdst.KeysOnly = proto.Bool(true)\n\t\tdst.RequirePerfectPlan = proto.Bool(true)\n\t}\n\tfor _, qf := range q.filter {\n\t\tif qf.FieldName == \"\" {\n\t\t\treturn errors.New(\"datastore: empty query filter field name\")\n\t\t}\n\t\tp, errStr := valueToProto(appID, qf.FieldName, reflect.ValueOf(qf.Value), false)\n\t\tif errStr != \"\" {\n\t\t\treturn errors.New(\"datastore: bad query filter value type: \" + errStr)\n\t\t}\n\t\txf := &pb.Query_Filter{\n\t\t\tOp:       operatorToProto[qf.Op],\n\t\t\tProperty: []*pb.Property{p},\n\t\t}\n\t\tif xf.Op == nil {\n\t\t\treturn errors.New(\"datastore: unknown query filter operator\")\n\t\t}\n\t\tdst.Filter = append(dst.Filter, xf)\n\t}\n\tfor _, qo := range q.order {\n\t\tif qo.FieldName == \"\" {\n\t\t\treturn errors.New(\"datastore: empty query order field name\")\n\t\t}\n\t\txo := &pb.Query_Order{\n\t\t\tProperty:  proto.String(qo.FieldName),\n\t\t\tDirection: sortDirectionToProto[qo.Direction],\n\t\t}\n\t\tif xo.Direction == nil {\n\t\t\treturn errors.New(\"datastore: unknown query order direction\")\n\t\t}\n\t\tdst.Order = append(dst.Order, xo)\n\t}\n\tif q.limit >= 0 {\n\t\tdst.Limit = proto.Int32(q.limit)\n\t}\n\tif q.offset != 0 {\n\t\tdst.Offset = proto.Int32(q.offset)\n\t}\n\tif q.count != 0 {\n\t\tdst.Count = proto.Int32(q.count)\n\t}\n\tdst.CompiledCursor = q.start\n\tdst.EndCompiledCursor = q.end\n\tdst.Compile = proto.Bool(true)\n\treturn nil\n}\n\n// Count returns the number of results for the query.\n//\n// The running time and number of API calls made by Count scale linearly with\n// the sum of the query's offset and limit. Unless the result count is\n// expected to be small, it is best to specify a limit; otherwise Count will\n// continue until it finishes counting or the provided context expires.\nfunc (q *Query) Count(c context.Context) (int, error) {\n\t// Check that the query is well-formed.\n\tif q.err != nil {\n\t\treturn 0, q.err\n\t}\n\n\t// Run a copy of the query, with keysOnly true (if we're not a projection,\n\t// since the two are incompatible), and an adjusted offset. We also set the\n\t// limit to zero, as we don't want any actual entity data, just the number\n\t// of skipped results.\n\tnewQ := q.clone()\n\tnewQ.keysOnly = len(newQ.projection) == 0\n\tnewQ.limit = 0\n\tif q.limit < 0 {\n\t\t// If the original query was unlimited, set the new query's offset to maximum.\n\t\tnewQ.offset = math.MaxInt32\n\t} else {\n\t\tnewQ.offset = q.offset + q.limit\n\t\tif newQ.offset < 0 {\n\t\t\t// Do the best we can, in the presence of overflow.\n\t\t\tnewQ.offset = math.MaxInt32\n\t\t}\n\t}\n\treq := &pb.Query{}\n\tif err := newQ.toProto(req, internal.FullyQualifiedAppID(c)); err != nil {\n\t\treturn 0, err\n\t}\n\tres := &pb.QueryResult{}\n\tif err := internal.Call(c, \"datastore_v3\", \"RunQuery\", req, res); err != nil {\n\t\treturn 0, err\n\t}\n\n\t// n is the count we will return. For example, suppose that our original\n\t// query had an offset of 4 and a limit of 2008: the count will be 2008,\n\t// provided that there are at least 2012 matching entities. However, the\n\t// RPCs will only skip 1000 results at a time. The RPC sequence is:\n\t//   call RunQuery with (offset, limit) = (2012, 0)  // 2012 == newQ.offset\n\t//   response has (skippedResults, moreResults) = (1000, true)\n\t//   n += 1000  // n == 1000\n\t//   call Next     with (offset, limit) = (1012, 0)  // 1012 == newQ.offset - n\n\t//   response has (skippedResults, moreResults) = (1000, true)\n\t//   n += 1000  // n == 2000\n\t//   call Next     with (offset, limit) = (12, 0)    // 12 == newQ.offset - n\n\t//   response has (skippedResults, moreResults) = (12, false)\n\t//   n += 12    // n == 2012\n\t//   // exit the loop\n\t//   n -= 4     // n == 2008\n\tvar n int32\n\tfor {\n\t\t// The QueryResult should have no actual entity data, just skipped results.\n\t\tif len(res.Result) != 0 {\n\t\t\treturn 0, errors.New(\"datastore: internal error: Count request returned too much data\")\n\t\t}\n\t\tn += res.GetSkippedResults()\n\t\tif !res.GetMoreResults() {\n\t\t\tbreak\n\t\t}\n\t\tif err := callNext(c, res, newQ.offset-n, q.count); err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t}\n\tn -= q.offset\n\tif n < 0 {\n\t\t// If the offset was greater than the number of matching entities,\n\t\t// return 0 instead of negative.\n\t\tn = 0\n\t}\n\treturn int(n), nil\n}\n\n// callNext issues a datastore_v3/Next RPC to advance a cursor, such as that\n// returned by a query with more results.\nfunc callNext(c context.Context, res *pb.QueryResult, offset, count int32) error {\n\tif res.Cursor == nil {\n\t\treturn errors.New(\"datastore: internal error: server did not return a cursor\")\n\t}\n\treq := &pb.NextRequest{\n\t\tCursor: res.Cursor,\n\t}\n\tif count >= 0 {\n\t\treq.Count = proto.Int32(count)\n\t}\n\tif offset != 0 {\n\t\treq.Offset = proto.Int32(offset)\n\t}\n\tif res.CompiledCursor != nil {\n\t\treq.Compile = proto.Bool(true)\n\t}\n\tres.Reset()\n\treturn internal.Call(c, \"datastore_v3\", \"Next\", req, res)\n}\n\n// GetAll runs the query in the given context and returns all keys that match\n// that query, as well as appending the values to dst.\n//\n// dst must have type *[]S or *[]*S or *[]P, for some struct type S or some non-\n// interface, non-pointer type P such that P or *P implements PropertyLoadSaver.\n//\n// As a special case, *PropertyList is an invalid type for dst, even though a\n// PropertyList is a slice of structs. It is treated as invalid to avoid being\n// mistakenly passed when *[]PropertyList was intended.\n//\n// The keys returned by GetAll will be in a 1-1 correspondence with the entities\n// added to dst.\n//\n// If q is a ``keys-only'' query, GetAll ignores dst and only returns the keys.\n//\n// The running time and number of API calls made by GetAll scale linearly with\n// the sum of the query's offset and limit. Unless the result count is\n// expected to be small, it is best to specify a limit; otherwise GetAll will\n// continue until it finishes collecting results or the provided context\n// expires.\nfunc (q *Query) GetAll(c context.Context, dst interface{}) ([]*Key, error) {\n\tvar (\n\t\tdv               reflect.Value\n\t\tmat              multiArgType\n\t\telemType         reflect.Type\n\t\terrFieldMismatch error\n\t)\n\tif !q.keysOnly {\n\t\tdv = reflect.ValueOf(dst)\n\t\tif dv.Kind() != reflect.Ptr || dv.IsNil() {\n\t\t\treturn nil, ErrInvalidEntityType\n\t\t}\n\t\tdv = dv.Elem()\n\t\tmat, elemType = checkMultiArg(dv)\n\t\tif mat == multiArgTypeInvalid || mat == multiArgTypeInterface {\n\t\t\treturn nil, ErrInvalidEntityType\n\t\t}\n\t}\n\n\tvar keys []*Key\n\tfor t := q.Run(c); ; {\n\t\tk, e, err := t.next()\n\t\tif err == Done {\n\t\t\tbreak\n\t\t}\n\t\tif err != nil {\n\t\t\treturn keys, err\n\t\t}\n\t\tif !q.keysOnly {\n\t\t\tev := reflect.New(elemType)\n\t\t\tif elemType.Kind() == reflect.Map {\n\t\t\t\t// This is a special case. The zero values of a map type are\n\t\t\t\t// not immediately useful; they have to be make'd.\n\t\t\t\t//\n\t\t\t\t// Funcs and channels are similar, in that a zero value is not useful,\n\t\t\t\t// but even a freshly make'd channel isn't useful: there's no fixed\n\t\t\t\t// channel buffer size that is always going to be large enough, and\n\t\t\t\t// there's no goroutine to drain the other end. Theoretically, these\n\t\t\t\t// types could be supported, for example by sniffing for a constructor\n\t\t\t\t// method or requiring prior registration, but for now it's not a\n\t\t\t\t// frequent enough concern to be worth it. Programmers can work around\n\t\t\t\t// it by explicitly using Iterator.Next instead of the Query.GetAll\n\t\t\t\t// convenience method.\n\t\t\t\tx := reflect.MakeMap(elemType)\n\t\t\t\tev.Elem().Set(x)\n\t\t\t}\n\t\t\tif err = loadEntity(ev.Interface(), e); err != nil {\n\t\t\t\tif _, ok := err.(*ErrFieldMismatch); ok {\n\t\t\t\t\t// We continue loading entities even in the face of field mismatch errors.\n\t\t\t\t\t// If we encounter any other error, that other error is returned. Otherwise,\n\t\t\t\t\t// an ErrFieldMismatch is returned.\n\t\t\t\t\terrFieldMismatch = err\n\t\t\t\t} else {\n\t\t\t\t\treturn keys, err\n\t\t\t\t}\n\t\t\t}\n\t\t\tif mat != multiArgTypeStructPtr {\n\t\t\t\tev = ev.Elem()\n\t\t\t}\n\t\t\tdv.Set(reflect.Append(dv, ev))\n\t\t}\n\t\tkeys = append(keys, k)\n\t}\n\treturn keys, errFieldMismatch\n}\n\n// Run runs the query in the given context.\nfunc (q *Query) Run(c context.Context) *Iterator {\n\tif q.err != nil {\n\t\treturn &Iterator{err: q.err}\n\t}\n\tt := &Iterator{\n\t\tc:      c,\n\t\tlimit:  q.limit,\n\t\tcount:  q.count,\n\t\tq:      q,\n\t\tprevCC: q.start,\n\t}\n\tvar req pb.Query\n\tif err := q.toProto(&req, internal.FullyQualifiedAppID(c)); err != nil {\n\t\tt.err = err\n\t\treturn t\n\t}\n\tif err := internal.Call(c, \"datastore_v3\", \"RunQuery\", &req, &t.res); err != nil {\n\t\tt.err = err\n\t\treturn t\n\t}\n\toffset := q.offset - t.res.GetSkippedResults()\n\tvar count int32\n\tif t.count > 0 && (t.limit < 0 || t.count < t.limit) {\n\t\tcount = t.count\n\t} else {\n\t\tcount = t.limit\n\t}\n\tfor offset > 0 && t.res.GetMoreResults() {\n\t\tt.prevCC = t.res.CompiledCursor\n\t\tif err := callNext(t.c, &t.res, offset, count); err != nil {\n\t\t\tt.err = err\n\t\t\tbreak\n\t\t}\n\t\tskip := t.res.GetSkippedResults()\n\t\tif skip < 0 {\n\t\t\tt.err = errors.New(\"datastore: internal error: negative number of skipped_results\")\n\t\t\tbreak\n\t\t}\n\t\toffset -= skip\n\t}\n\tif offset < 0 {\n\t\tt.err = errors.New(\"datastore: internal error: query offset was overshot\")\n\t}\n\treturn t\n}\n\n// Iterator is the result of running a query.\ntype Iterator struct {\n\tc   context.Context\n\terr error\n\t// res is the result of the most recent RunQuery or Next API call.\n\tres pb.QueryResult\n\t// i is how many elements of res.Result we have iterated over.\n\ti int\n\t// limit is the limit on the number of results this iterator should return.\n\t// A negative value means unlimited.\n\tlimit int32\n\t// count is the number of results this iterator should fetch at once. This\n\t// should be equal to or greater than zero.\n\tcount int32\n\t// q is the original query which yielded this iterator.\n\tq *Query\n\t// prevCC is the compiled cursor that marks the end of the previous batch\n\t// of results.\n\tprevCC *pb.CompiledCursor\n}\n\n// Done is returned when a query iteration has completed.\nvar Done = errors.New(\"datastore: query has no more results\")\n\n// Next returns the key of the next result. When there are no more results,\n// Done is returned as the error.\n//\n// If the query is not keys only and dst is non-nil, it also loads the entity\n// stored for that key into the struct pointer or PropertyLoadSaver dst, with\n// the same semantics and possible errors as for the Get function.\nfunc (t *Iterator) Next(dst interface{}) (*Key, error) {\n\tk, e, err := t.next()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif dst != nil && !t.q.keysOnly {\n\t\terr = loadEntity(dst, e)\n\t}\n\treturn k, err\n}\n\nfunc (t *Iterator) next() (*Key, *pb.EntityProto, error) {\n\tif t.err != nil {\n\t\treturn nil, nil, t.err\n\t}\n\n\t// Issue datastore_v3/Next RPCs as necessary.\n\tfor t.i == len(t.res.Result) {\n\t\tif !t.res.GetMoreResults() {\n\t\t\tt.err = Done\n\t\t\treturn nil, nil, t.err\n\t\t}\n\t\tt.prevCC = t.res.CompiledCursor\n\t\tvar count int32\n\t\tif t.count > 0 && (t.limit < 0 || t.count < t.limit) {\n\t\t\tcount = t.count\n\t\t} else {\n\t\t\tcount = t.limit\n\t\t}\n\t\tif err := callNext(t.c, &t.res, 0, count); err != nil {\n\t\t\tt.err = err\n\t\t\treturn nil, nil, t.err\n\t\t}\n\t\tif t.res.GetSkippedResults() != 0 {\n\t\t\tt.err = errors.New(\"datastore: internal error: iterator has skipped results\")\n\t\t\treturn nil, nil, t.err\n\t\t}\n\t\tt.i = 0\n\t\tif t.limit >= 0 {\n\t\t\tt.limit -= int32(len(t.res.Result))\n\t\t\tif t.limit < 0 {\n\t\t\t\tt.err = errors.New(\"datastore: internal error: query returned more results than the limit\")\n\t\t\t\treturn nil, nil, t.err\n\t\t\t}\n\t\t}\n\t}\n\n\t// Extract the key from the t.i'th element of t.res.Result.\n\te := t.res.Result[t.i]\n\tt.i++\n\tif e.Key == nil {\n\t\treturn nil, nil, errors.New(\"datastore: internal error: server did not return a key\")\n\t}\n\tk, err := protoToKey(e.Key)\n\tif err != nil || k.Incomplete() {\n\t\treturn nil, nil, errors.New(\"datastore: internal error: server returned an invalid key\")\n\t}\n\treturn k, e, nil\n}\n\n// Cursor returns a cursor for the iterator's current location.\nfunc (t *Iterator) Cursor() (Cursor, error) {\n\tif t.err != nil && t.err != Done {\n\t\treturn Cursor{}, t.err\n\t}\n\t// If we are at either end of the current batch of results,\n\t// return the compiled cursor at that end.\n\tskipped := t.res.GetSkippedResults()\n\tif t.i == 0 && skipped == 0 {\n\t\tif t.prevCC == nil {\n\t\t\t// A nil pointer (of type *pb.CompiledCursor) means no constraint:\n\t\t\t// passing it as the end cursor of a new query means unlimited results\n\t\t\t// (glossing over the integer limit parameter for now).\n\t\t\t// A non-nil pointer to an empty pb.CompiledCursor means the start:\n\t\t\t// passing it as the end cursor of a new query means 0 results.\n\t\t\t// If prevCC was nil, then the original query had no start cursor, but\n\t\t\t// Iterator.Cursor should return \"the start\" instead of unlimited.\n\t\t\treturn Cursor{&zeroCC}, nil\n\t\t}\n\t\treturn Cursor{t.prevCC}, nil\n\t}\n\tif t.i == len(t.res.Result) {\n\t\treturn Cursor{t.res.CompiledCursor}, nil\n\t}\n\t// Otherwise, re-run the query offset to this iterator's position, starting from\n\t// the most recent compiled cursor. This is done on a best-effort basis, as it\n\t// is racy; if a concurrent process has added or removed entities, then the\n\t// cursor returned may be inconsistent.\n\tq := t.q.clone()\n\tq.start = t.prevCC\n\tq.offset = skipped + int32(t.i)\n\tq.limit = 0\n\tq.keysOnly = len(q.projection) == 0\n\tt1 := q.Run(t.c)\n\t_, _, err := t1.next()\n\tif err != Done {\n\t\tif err == nil {\n\t\t\terr = fmt.Errorf(\"datastore: internal error: zero-limit query did not have zero results\")\n\t\t}\n\t\treturn Cursor{}, err\n\t}\n\treturn Cursor{t1.res.CompiledCursor}, nil\n}\n\nvar zeroCC pb.CompiledCursor\n\n// Cursor is an iterator's position. It can be converted to and from an opaque\n// string. A cursor can be used from different HTTP requests, but only with a\n// query with the same kind, ancestor, filter and order constraints.\ntype Cursor struct {\n\tcc *pb.CompiledCursor\n}\n\n// String returns a base-64 string representation of a cursor.\nfunc (c Cursor) String() string {\n\tif c.cc == nil {\n\t\treturn \"\"\n\t}\n\tb, err := proto.Marshal(c.cc)\n\tif err != nil {\n\t\t// The only way to construct a Cursor with a non-nil cc field is to\n\t\t// unmarshal from the byte representation. We panic if the unmarshal\n\t\t// succeeds but the marshaling of the unchanged protobuf value fails.\n\t\tpanic(fmt.Sprintf(\"datastore: internal error: malformed cursor: %v\", err))\n\t}\n\treturn strings.TrimRight(base64.URLEncoding.EncodeToString(b), \"=\")\n}\n\n// Decode decodes a cursor from its base-64 string representation.\nfunc DecodeCursor(s string) (Cursor, error) {\n\tif s == \"\" {\n\t\treturn Cursor{&zeroCC}, nil\n\t}\n\tif n := len(s) % 4; n != 0 {\n\t\ts += strings.Repeat(\"=\", 4-n)\n\t}\n\tb, err := base64.URLEncoding.DecodeString(s)\n\tif err != nil {\n\t\treturn Cursor{}, err\n\t}\n\tcc := &pb.CompiledCursor{}\n\tif err := proto.Unmarshal(b, cc); err != nil {\n\t\treturn Cursor{}, err\n\t}\n\treturn Cursor{cc}, nil\n}\n"
  },
  {
    "path": "vendor/google.golang.org/appengine/datastore/save.go",
    "content": "// Copyright 2011 Google Inc. All rights reserved.\n// Use of this source code is governed by the Apache 2.0\n// license that can be found in the LICENSE file.\n\npackage datastore\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"math\"\n\t\"reflect\"\n\t\"time\"\n\n\t\"github.com/golang/protobuf/proto\"\n\n\t\"google.golang.org/appengine\"\n\tpb \"google.golang.org/appengine/internal/datastore\"\n)\n\nfunc toUnixMicro(t time.Time) int64 {\n\t// We cannot use t.UnixNano() / 1e3 because we want to handle times more than\n\t// 2^63 nanoseconds (which is about 292 years) away from 1970, and those cannot\n\t// be represented in the numerator of a single int64 divide.\n\treturn t.Unix()*1e6 + int64(t.Nanosecond()/1e3)\n}\n\nfunc fromUnixMicro(t int64) time.Time {\n\treturn time.Unix(t/1e6, (t%1e6)*1e3).UTC()\n}\n\nvar (\n\tminTime = time.Unix(int64(math.MinInt64)/1e6, (int64(math.MinInt64)%1e6)*1e3)\n\tmaxTime = time.Unix(int64(math.MaxInt64)/1e6, (int64(math.MaxInt64)%1e6)*1e3)\n)\n\n// valueToProto converts a named value to a newly allocated Property.\n// The returned error string is empty on success.\nfunc valueToProto(defaultAppID, name string, v reflect.Value, multiple bool) (p *pb.Property, errStr string) {\n\tvar (\n\t\tpv          pb.PropertyValue\n\t\tunsupported bool\n\t)\n\tswitch v.Kind() {\n\tcase reflect.Invalid:\n\t\t// No-op.\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\tpv.Int64Value = proto.Int64(v.Int())\n\tcase reflect.Bool:\n\t\tpv.BooleanValue = proto.Bool(v.Bool())\n\tcase reflect.String:\n\t\tpv.StringValue = proto.String(v.String())\n\tcase reflect.Float32, reflect.Float64:\n\t\tpv.DoubleValue = proto.Float64(v.Float())\n\tcase reflect.Ptr:\n\t\tif k, ok := v.Interface().(*Key); ok {\n\t\t\tif k != nil {\n\t\t\t\tpv.Referencevalue = keyToReferenceValue(defaultAppID, k)\n\t\t\t}\n\t\t} else {\n\t\t\tunsupported = true\n\t\t}\n\tcase reflect.Struct:\n\t\tswitch t := v.Interface().(type) {\n\t\tcase time.Time:\n\t\t\tif t.Before(minTime) || t.After(maxTime) {\n\t\t\t\treturn nil, \"time value out of range\"\n\t\t\t}\n\t\t\tpv.Int64Value = proto.Int64(toUnixMicro(t))\n\t\tcase appengine.GeoPoint:\n\t\t\tif !t.Valid() {\n\t\t\t\treturn nil, \"invalid GeoPoint value\"\n\t\t\t}\n\t\t\t// NOTE: Strangely, latitude maps to X, longitude to Y.\n\t\t\tpv.Pointvalue = &pb.PropertyValue_PointValue{X: &t.Lat, Y: &t.Lng}\n\t\tdefault:\n\t\t\tunsupported = true\n\t\t}\n\tcase reflect.Slice:\n\t\tif b, ok := v.Interface().([]byte); ok {\n\t\t\tpv.StringValue = proto.String(string(b))\n\t\t} else {\n\t\t\t// nvToProto should already catch slice values.\n\t\t\t// If we get here, we have a slice of slice values.\n\t\t\tunsupported = true\n\t\t}\n\tdefault:\n\t\tunsupported = true\n\t}\n\tif unsupported {\n\t\treturn nil, \"unsupported datastore value type: \" + v.Type().String()\n\t}\n\tp = &pb.Property{\n\t\tName:     proto.String(name),\n\t\tValue:    &pv,\n\t\tMultiple: proto.Bool(multiple),\n\t}\n\tif v.IsValid() {\n\t\tswitch v.Interface().(type) {\n\t\tcase []byte:\n\t\t\tp.Meaning = pb.Property_BLOB.Enum()\n\t\tcase ByteString:\n\t\t\tp.Meaning = pb.Property_BYTESTRING.Enum()\n\t\tcase appengine.BlobKey:\n\t\t\tp.Meaning = pb.Property_BLOBKEY.Enum()\n\t\tcase time.Time:\n\t\t\tp.Meaning = pb.Property_GD_WHEN.Enum()\n\t\tcase appengine.GeoPoint:\n\t\t\tp.Meaning = pb.Property_GEORSS_POINT.Enum()\n\t\t}\n\t}\n\treturn p, \"\"\n}\n\ntype saveOpts struct {\n\tnoIndex   bool\n\tmultiple  bool\n\tomitEmpty bool\n}\n\n// saveEntity saves an EntityProto into a PropertyLoadSaver or struct pointer.\nfunc saveEntity(defaultAppID string, key *Key, src interface{}) (*pb.EntityProto, error) {\n\tvar err error\n\tvar props []Property\n\tif e, ok := src.(PropertyLoadSaver); ok {\n\t\tprops, err = e.Save()\n\t} else {\n\t\tprops, err = SaveStruct(src)\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn propertiesToProto(defaultAppID, key, props)\n}\n\nfunc saveStructProperty(props *[]Property, name string, opts saveOpts, v reflect.Value) error {\n\tif opts.omitEmpty && isEmptyValue(v) {\n\t\treturn nil\n\t}\n\tp := Property{\n\t\tName:     name,\n\t\tNoIndex:  opts.noIndex,\n\t\tMultiple: opts.multiple,\n\t}\n\tswitch x := v.Interface().(type) {\n\tcase *Key:\n\t\tp.Value = x\n\tcase time.Time:\n\t\tp.Value = x\n\tcase appengine.BlobKey:\n\t\tp.Value = x\n\tcase appengine.GeoPoint:\n\t\tp.Value = x\n\tcase ByteString:\n\t\tp.Value = x\n\tdefault:\n\t\tswitch v.Kind() {\n\t\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\t\tp.Value = v.Int()\n\t\tcase reflect.Bool:\n\t\t\tp.Value = v.Bool()\n\t\tcase reflect.String:\n\t\t\tp.Value = v.String()\n\t\tcase reflect.Float32, reflect.Float64:\n\t\t\tp.Value = v.Float()\n\t\tcase reflect.Slice:\n\t\t\tif v.Type().Elem().Kind() == reflect.Uint8 {\n\t\t\t\tp.NoIndex = true\n\t\t\t\tp.Value = v.Bytes()\n\t\t\t}\n\t\tcase reflect.Struct:\n\t\t\tif !v.CanAddr() {\n\t\t\t\treturn fmt.Errorf(\"datastore: unsupported struct field: value is unaddressable\")\n\t\t\t}\n\t\t\tsub, err := newStructPLS(v.Addr().Interface())\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"datastore: unsupported struct field: %v\", err)\n\t\t\t}\n\t\t\treturn sub.save(props, name+\".\", opts)\n\t\t}\n\t}\n\tif p.Value == nil {\n\t\treturn fmt.Errorf(\"datastore: unsupported struct field type: %v\", v.Type())\n\t}\n\t*props = append(*props, p)\n\treturn nil\n}\n\nfunc (s structPLS) Save() ([]Property, error) {\n\tvar props []Property\n\tif err := s.save(&props, \"\", saveOpts{}); err != nil {\n\t\treturn nil, err\n\t}\n\treturn props, nil\n}\n\nfunc (s structPLS) save(props *[]Property, prefix string, opts saveOpts) error {\n\tfor name, f := range s.codec.fields {\n\t\tname = prefix + name\n\t\tv := s.v.FieldByIndex(f.path)\n\t\tif !v.IsValid() || !v.CanSet() {\n\t\t\tcontinue\n\t\t}\n\t\tvar opts1 saveOpts\n\t\topts1.noIndex = opts.noIndex || f.noIndex\n\t\topts1.multiple = opts.multiple\n\t\topts1.omitEmpty = f.omitEmpty // don't propagate\n\t\t// For slice fields that aren't []byte, save each element.\n\t\tif v.Kind() == reflect.Slice && v.Type().Elem().Kind() != reflect.Uint8 {\n\t\t\topts1.multiple = true\n\t\t\tfor j := 0; j < v.Len(); j++ {\n\t\t\t\tif err := saveStructProperty(props, name, opts1, v.Index(j)); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\t// Otherwise, save the field itself.\n\t\tif err := saveStructProperty(props, name, opts1, v); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc propertiesToProto(defaultAppID string, key *Key, props []Property) (*pb.EntityProto, error) {\n\te := &pb.EntityProto{\n\t\tKey: keyToProto(defaultAppID, key),\n\t}\n\tif key.parent == nil {\n\t\te.EntityGroup = &pb.Path{}\n\t} else {\n\t\te.EntityGroup = keyToProto(defaultAppID, key.root()).Path\n\t}\n\tprevMultiple := make(map[string]bool)\n\n\tfor _, p := range props {\n\t\tif pm, ok := prevMultiple[p.Name]; ok {\n\t\t\tif !pm || !p.Multiple {\n\t\t\t\treturn nil, fmt.Errorf(\"datastore: multiple Properties with Name %q, but Multiple is false\", p.Name)\n\t\t\t}\n\t\t} else {\n\t\t\tprevMultiple[p.Name] = p.Multiple\n\t\t}\n\n\t\tx := &pb.Property{\n\t\t\tName:     proto.String(p.Name),\n\t\t\tValue:    new(pb.PropertyValue),\n\t\t\tMultiple: proto.Bool(p.Multiple),\n\t\t}\n\t\tswitch v := p.Value.(type) {\n\t\tcase int64:\n\t\t\tx.Value.Int64Value = proto.Int64(v)\n\t\tcase bool:\n\t\t\tx.Value.BooleanValue = proto.Bool(v)\n\t\tcase string:\n\t\t\tx.Value.StringValue = proto.String(v)\n\t\t\tif p.NoIndex {\n\t\t\t\tx.Meaning = pb.Property_TEXT.Enum()\n\t\t\t}\n\t\tcase float64:\n\t\t\tx.Value.DoubleValue = proto.Float64(v)\n\t\tcase *Key:\n\t\t\tif v != nil {\n\t\t\t\tx.Value.Referencevalue = keyToReferenceValue(defaultAppID, v)\n\t\t\t}\n\t\tcase time.Time:\n\t\t\tif v.Before(minTime) || v.After(maxTime) {\n\t\t\t\treturn nil, fmt.Errorf(\"datastore: time value out of range\")\n\t\t\t}\n\t\t\tx.Value.Int64Value = proto.Int64(toUnixMicro(v))\n\t\t\tx.Meaning = pb.Property_GD_WHEN.Enum()\n\t\tcase appengine.BlobKey:\n\t\t\tx.Value.StringValue = proto.String(string(v))\n\t\t\tx.Meaning = pb.Property_BLOBKEY.Enum()\n\t\tcase appengine.GeoPoint:\n\t\t\tif !v.Valid() {\n\t\t\t\treturn nil, fmt.Errorf(\"datastore: invalid GeoPoint value\")\n\t\t\t}\n\t\t\t// NOTE: Strangely, latitude maps to X, longitude to Y.\n\t\t\tx.Value.Pointvalue = &pb.PropertyValue_PointValue{X: &v.Lat, Y: &v.Lng}\n\t\t\tx.Meaning = pb.Property_GEORSS_POINT.Enum()\n\t\tcase []byte:\n\t\t\tx.Value.StringValue = proto.String(string(v))\n\t\t\tx.Meaning = pb.Property_BLOB.Enum()\n\t\t\tif !p.NoIndex {\n\t\t\t\treturn nil, fmt.Errorf(\"datastore: cannot index a []byte valued Property with Name %q\", p.Name)\n\t\t\t}\n\t\tcase ByteString:\n\t\t\tx.Value.StringValue = proto.String(string(v))\n\t\t\tx.Meaning = pb.Property_BYTESTRING.Enum()\n\t\tdefault:\n\t\t\tif p.Value != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"datastore: invalid Value type for a Property with Name %q\", p.Name)\n\t\t\t}\n\t\t}\n\n\t\tif p.NoIndex {\n\t\t\te.RawProperty = append(e.RawProperty, x)\n\t\t} else {\n\t\t\te.Property = append(e.Property, x)\n\t\t\tif len(e.Property) > maxIndexedProperties {\n\t\t\t\treturn nil, errors.New(\"datastore: too many indexed properties\")\n\t\t\t}\n\t\t}\n\t}\n\treturn e, nil\n}\n\n// isEmptyValue is taken from the encoding/json package in the standard library.\nfunc isEmptyValue(v reflect.Value) bool {\n\tswitch v.Kind() {\n\tcase reflect.Array, reflect.Map, reflect.Slice, reflect.String:\n\t\t// TODO(perfomance): Only reflect.String needed, other property types are not supported (copy/paste from json package)\n\t\treturn v.Len() == 0\n\tcase reflect.Bool:\n\t\treturn !v.Bool()\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\treturn v.Int() == 0\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:\n\t\t// TODO(perfomance): Uint* are unsupported property types - should be removed (copy/paste from json package)\n\t\treturn v.Uint() == 0\n\tcase reflect.Float32, reflect.Float64:\n\t\treturn v.Float() == 0\n\tcase reflect.Interface, reflect.Ptr:\n\t\treturn v.IsNil()\n\tcase reflect.Struct:\n\t\tswitch x := v.Interface().(type) {\n\t\tcase time.Time:\n\t\t\treturn x.IsZero()\n\t\t}\n\t}\n\treturn false\n}\n"
  },
  {
    "path": "vendor/google.golang.org/appengine/datastore/transaction.go",
    "content": "// Copyright 2011 Google Inc. All rights reserved.\n// Use of this source code is governed by the Apache 2.0\n// license that can be found in the LICENSE file.\n\npackage datastore\n\nimport (\n\t\"errors\"\n\n\t\"golang.org/x/net/context\"\n\n\t\"google.golang.org/appengine/internal\"\n\tpb \"google.golang.org/appengine/internal/datastore\"\n)\n\nfunc init() {\n\tinternal.RegisterTransactionSetter(func(x *pb.Query, t *pb.Transaction) {\n\t\tx.Transaction = t\n\t})\n\tinternal.RegisterTransactionSetter(func(x *pb.GetRequest, t *pb.Transaction) {\n\t\tx.Transaction = t\n\t})\n\tinternal.RegisterTransactionSetter(func(x *pb.PutRequest, t *pb.Transaction) {\n\t\tx.Transaction = t\n\t})\n\tinternal.RegisterTransactionSetter(func(x *pb.DeleteRequest, t *pb.Transaction) {\n\t\tx.Transaction = t\n\t})\n}\n\n// ErrConcurrentTransaction is returned when a transaction is rolled back due\n// to a conflict with a concurrent transaction.\nvar ErrConcurrentTransaction = errors.New(\"datastore: concurrent transaction\")\n\n// RunInTransaction runs f in a transaction. It calls f with a transaction\n// context tc that f should use for all App Engine operations.\n//\n// If f returns nil, RunInTransaction attempts to commit the transaction,\n// returning nil if it succeeds. If the commit fails due to a conflicting\n// transaction, RunInTransaction retries f, each time with a new transaction\n// context. It gives up and returns ErrConcurrentTransaction after three\n// failed attempts. The number of attempts can be configured by specifying\n// TransactionOptions.Attempts.\n//\n// If f returns non-nil, then any datastore changes will not be applied and\n// RunInTransaction returns that same error. The function f is not retried.\n//\n// Note that when f returns, the transaction is not yet committed. Calling code\n// must be careful not to assume that any of f's changes have been committed\n// until RunInTransaction returns nil.\n//\n// Since f may be called multiple times, f should usually be idempotent.\n// datastore.Get is not idempotent when unmarshaling slice fields.\n//\n// Nested transactions are not supported; c may not be a transaction context.\nfunc RunInTransaction(c context.Context, f func(tc context.Context) error, opts *TransactionOptions) error {\n\txg := false\n\tif opts != nil {\n\t\txg = opts.XG\n\t}\n\treadOnly := false\n\tif opts != nil {\n\t\treadOnly = opts.ReadOnly\n\t}\n\tattempts := 3\n\tif opts != nil && opts.Attempts > 0 {\n\t\tattempts = opts.Attempts\n\t}\n\tvar t *pb.Transaction\n\tvar err error\n\tfor i := 0; i < attempts; i++ {\n\t\tif t, err = internal.RunTransactionOnce(c, f, xg, readOnly, t); err != internal.ErrConcurrentTransaction {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn ErrConcurrentTransaction\n}\n\n// TransactionOptions are the options for running a transaction.\ntype TransactionOptions struct {\n\t// XG is whether the transaction can cross multiple entity groups. In\n\t// comparison, a single group transaction is one where all datastore keys\n\t// used have the same root key. Note that cross group transactions do not\n\t// have the same behavior as single group transactions. In particular, it\n\t// is much more likely to see partially applied transactions in different\n\t// entity groups, in global queries.\n\t// It is valid to set XG to true even if the transaction is within a\n\t// single entity group.\n\tXG bool\n\t// Attempts controls the number of retries to perform when commits fail\n\t// due to a conflicting transaction. If omitted, it defaults to 3.\n\tAttempts int\n\t// ReadOnly controls whether the transaction is a read only transaction.\n\t// Read only transactions are potentially more efficient.\n\tReadOnly bool\n}\n"
  },
  {
    "path": "vendor/google.golang.org/appengine/errors.go",
    "content": "// Copyright 2011 Google Inc. All rights reserved.\n// Use of this source code is governed by the Apache 2.0\n// license that can be found in the LICENSE file.\n\n// This file provides error functions for common API failure modes.\n\npackage appengine\n\nimport (\n\t\"fmt\"\n\n\t\"google.golang.org/appengine/internal\"\n)\n\n// IsOverQuota reports whether err represents an API call failure\n// due to insufficient available quota.\nfunc IsOverQuota(err error) bool {\n\tcallErr, ok := err.(*internal.CallError)\n\treturn ok && callErr.Code == 4\n}\n\n// MultiError is returned by batch operations when there are errors with\n// particular elements. Errors will be in a one-to-one correspondence with\n// the input elements; successful elements will have a nil entry.\ntype MultiError []error\n\nfunc (m MultiError) Error() string {\n\ts, n := \"\", 0\n\tfor _, e := range m {\n\t\tif e != nil {\n\t\t\tif n == 0 {\n\t\t\t\ts = e.Error()\n\t\t\t}\n\t\t\tn++\n\t\t}\n\t}\n\tswitch n {\n\tcase 0:\n\t\treturn \"(0 errors)\"\n\tcase 1:\n\t\treturn s\n\tcase 2:\n\t\treturn s + \" (and 1 other error)\"\n\t}\n\treturn fmt.Sprintf(\"%s (and %d other errors)\", s, n-1)\n}\n"
  },
  {
    "path": "vendor/google.golang.org/appengine/identity.go",
    "content": "// Copyright 2011 Google Inc. All rights reserved.\n// Use of this source code is governed by the Apache 2.0\n// license that can be found in the LICENSE file.\n\npackage appengine\n\nimport (\n\t\"time\"\n\n\t\"golang.org/x/net/context\"\n\n\t\"google.golang.org/appengine/internal\"\n\tpb \"google.golang.org/appengine/internal/app_identity\"\n\tmodpb \"google.golang.org/appengine/internal/modules\"\n)\n\n// AppID returns the application ID for the current application.\n// The string will be a plain application ID (e.g. \"appid\"), with a\n// domain prefix for custom domain deployments (e.g. \"example.com:appid\").\nfunc AppID(c context.Context) string { return internal.AppID(c) }\n\n// DefaultVersionHostname returns the standard hostname of the default version\n// of the current application (e.g. \"my-app.appspot.com\"). This is suitable for\n// use in constructing URLs.\nfunc DefaultVersionHostname(c context.Context) string {\n\treturn internal.DefaultVersionHostname(c)\n}\n\n// ModuleName returns the module name of the current instance.\nfunc ModuleName(c context.Context) string {\n\treturn internal.ModuleName(c)\n}\n\n// ModuleHostname returns a hostname of a module instance.\n// If module is the empty string, it refers to the module of the current instance.\n// If version is empty, it refers to the version of the current instance if valid,\n// or the default version of the module of the current instance.\n// If instance is empty, ModuleHostname returns the load-balancing hostname.\nfunc ModuleHostname(c context.Context, module, version, instance string) (string, error) {\n\treq := &modpb.GetHostnameRequest{}\n\tif module != \"\" {\n\t\treq.Module = &module\n\t}\n\tif version != \"\" {\n\t\treq.Version = &version\n\t}\n\tif instance != \"\" {\n\t\treq.Instance = &instance\n\t}\n\tres := &modpb.GetHostnameResponse{}\n\tif err := internal.Call(c, \"modules\", \"GetHostname\", req, res); err != nil {\n\t\treturn \"\", err\n\t}\n\treturn *res.Hostname, nil\n}\n\n// VersionID returns the version ID for the current application.\n// It will be of the form \"X.Y\", where X is specified in app.yaml,\n// and Y is a number generated when each version of the app is uploaded.\n// It does not include a module name.\nfunc VersionID(c context.Context) string { return internal.VersionID(c) }\n\n// InstanceID returns a mostly-unique identifier for this instance.\nfunc InstanceID() string { return internal.InstanceID() }\n\n// Datacenter returns an identifier for the datacenter that the instance is running in.\nfunc Datacenter(c context.Context) string { return internal.Datacenter(c) }\n\n// ServerSoftware returns the App Engine release version.\n// In production, it looks like \"Google App Engine/X.Y.Z\".\n// In the development appserver, it looks like \"Development/X.Y\".\nfunc ServerSoftware() string { return internal.ServerSoftware() }\n\n// RequestID returns a string that uniquely identifies the request.\nfunc RequestID(c context.Context) string { return internal.RequestID(c) }\n\n// AccessToken generates an OAuth2 access token for the specified scopes on\n// behalf of service account of this application. This token will expire after\n// the returned time.\nfunc AccessToken(c context.Context, scopes ...string) (token string, expiry time.Time, err error) {\n\treq := &pb.GetAccessTokenRequest{Scope: scopes}\n\tres := &pb.GetAccessTokenResponse{}\n\n\terr = internal.Call(c, \"app_identity_service\", \"GetAccessToken\", req, res)\n\tif err != nil {\n\t\treturn \"\", time.Time{}, err\n\t}\n\treturn res.GetAccessToken(), time.Unix(res.GetExpirationTime(), 0), nil\n}\n\n// Certificate represents a public certificate for the app.\ntype Certificate struct {\n\tKeyName string\n\tData    []byte // PEM-encoded X.509 certificate\n}\n\n// PublicCertificates retrieves the public certificates for the app.\n// They can be used to verify a signature returned by SignBytes.\nfunc PublicCertificates(c context.Context) ([]Certificate, error) {\n\treq := &pb.GetPublicCertificateForAppRequest{}\n\tres := &pb.GetPublicCertificateForAppResponse{}\n\tif err := internal.Call(c, \"app_identity_service\", \"GetPublicCertificatesForApp\", req, res); err != nil {\n\t\treturn nil, err\n\t}\n\tvar cs []Certificate\n\tfor _, pc := range res.PublicCertificateList {\n\t\tcs = append(cs, Certificate{\n\t\t\tKeyName: pc.GetKeyName(),\n\t\t\tData:    []byte(pc.GetX509CertificatePem()),\n\t\t})\n\t}\n\treturn cs, nil\n}\n\n// ServiceAccount returns a string representing the service account name, in\n// the form of an email address (typically app_id@appspot.gserviceaccount.com).\nfunc ServiceAccount(c context.Context) (string, error) {\n\treq := &pb.GetServiceAccountNameRequest{}\n\tres := &pb.GetServiceAccountNameResponse{}\n\n\terr := internal.Call(c, \"app_identity_service\", \"GetServiceAccountName\", req, res)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn res.GetServiceAccountName(), err\n}\n\n// SignBytes signs bytes using a private key unique to your application.\nfunc SignBytes(c context.Context, bytes []byte) (keyName string, signature []byte, err error) {\n\treq := &pb.SignForAppRequest{BytesToSign: bytes}\n\tres := &pb.SignForAppResponse{}\n\n\tif err := internal.Call(c, \"app_identity_service\", \"SignForApp\", req, res); err != nil {\n\t\treturn \"\", nil, err\n\t}\n\treturn res.GetKeyName(), res.GetSignatureBytes(), nil\n}\n\nfunc init() {\n\tinternal.RegisterErrorCodeMap(\"app_identity_service\", pb.AppIdentityServiceError_ErrorCode_name)\n\tinternal.RegisterErrorCodeMap(\"modules\", modpb.ModulesServiceError_ErrorCode_name)\n}\n"
  },
  {
    "path": "vendor/google.golang.org/appengine/internal/api.go",
    "content": "// Copyright 2011 Google Inc. All rights reserved.\n// Use of this source code is governed by the Apache 2.0\n// license that can be found in the LICENSE file.\n\n// +build !appengine\n\npackage internal\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"log\"\n\t\"net\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"os\"\n\t\"runtime\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\t\"sync/atomic\"\n\t\"time\"\n\n\t\"github.com/golang/protobuf/proto\"\n\tnetcontext \"golang.org/x/net/context\"\n\n\tbasepb \"google.golang.org/appengine/internal/base\"\n\tlogpb \"google.golang.org/appengine/internal/log\"\n\tremotepb \"google.golang.org/appengine/internal/remote_api\"\n)\n\nconst (\n\tapiPath             = \"/rpc_http\"\n\tdefaultTicketSuffix = \"/default.20150612t184001.0\"\n)\n\nvar (\n\t// Incoming headers.\n\tticketHeader       = http.CanonicalHeaderKey(\"X-AppEngine-API-Ticket\")\n\tdapperHeader       = http.CanonicalHeaderKey(\"X-Google-DapperTraceInfo\")\n\ttraceHeader        = http.CanonicalHeaderKey(\"X-Cloud-Trace-Context\")\n\tcurNamespaceHeader = http.CanonicalHeaderKey(\"X-AppEngine-Current-Namespace\")\n\tuserIPHeader       = http.CanonicalHeaderKey(\"X-AppEngine-User-IP\")\n\tremoteAddrHeader   = http.CanonicalHeaderKey(\"X-AppEngine-Remote-Addr\")\n\tdevRequestIdHeader = http.CanonicalHeaderKey(\"X-Appengine-Dev-Request-Id\")\n\n\t// Outgoing headers.\n\tapiEndpointHeader      = http.CanonicalHeaderKey(\"X-Google-RPC-Service-Endpoint\")\n\tapiEndpointHeaderValue = []string{\"app-engine-apis\"}\n\tapiMethodHeader        = http.CanonicalHeaderKey(\"X-Google-RPC-Service-Method\")\n\tapiMethodHeaderValue   = []string{\"/VMRemoteAPI.CallRemoteAPI\"}\n\tapiDeadlineHeader      = http.CanonicalHeaderKey(\"X-Google-RPC-Service-Deadline\")\n\tapiContentType         = http.CanonicalHeaderKey(\"Content-Type\")\n\tapiContentTypeValue    = []string{\"application/octet-stream\"}\n\tlogFlushHeader         = http.CanonicalHeaderKey(\"X-AppEngine-Log-Flush-Count\")\n\n\tapiHTTPClient = &http.Client{\n\t\tTransport: &http.Transport{\n\t\t\tProxy: http.ProxyFromEnvironment,\n\t\t\tDial:  limitDial,\n\t\t},\n\t}\n\n\tdefaultTicketOnce     sync.Once\n\tdefaultTicket         string\n\tbackgroundContextOnce sync.Once\n\tbackgroundContext     netcontext.Context\n)\n\nfunc apiURL() *url.URL {\n\thost, port := \"appengine.googleapis.internal\", \"10001\"\n\tif h := os.Getenv(\"API_HOST\"); h != \"\" {\n\t\thost = h\n\t}\n\tif p := os.Getenv(\"API_PORT\"); p != \"\" {\n\t\tport = p\n\t}\n\treturn &url.URL{\n\t\tScheme: \"http\",\n\t\tHost:   host + \":\" + port,\n\t\tPath:   apiPath,\n\t}\n}\n\nfunc handleHTTP(w http.ResponseWriter, r *http.Request) {\n\tc := &context{\n\t\treq:       r,\n\t\toutHeader: w.Header(),\n\t\tapiURL:    apiURL(),\n\t}\n\tr = r.WithContext(withContext(r.Context(), c))\n\tc.req = r\n\n\tstopFlushing := make(chan int)\n\n\t// Patch up RemoteAddr so it looks reasonable.\n\tif addr := r.Header.Get(userIPHeader); addr != \"\" {\n\t\tr.RemoteAddr = addr\n\t} else if addr = r.Header.Get(remoteAddrHeader); addr != \"\" {\n\t\tr.RemoteAddr = addr\n\t} else {\n\t\t// Should not normally reach here, but pick a sensible default anyway.\n\t\tr.RemoteAddr = \"127.0.0.1\"\n\t}\n\t// The address in the headers will most likely be of these forms:\n\t//\t123.123.123.123\n\t//\t2001:db8::1\n\t// net/http.Request.RemoteAddr is specified to be in \"IP:port\" form.\n\tif _, _, err := net.SplitHostPort(r.RemoteAddr); err != nil {\n\t\t// Assume the remote address is only a host; add a default port.\n\t\tr.RemoteAddr = net.JoinHostPort(r.RemoteAddr, \"80\")\n\t}\n\n\t// Start goroutine responsible for flushing app logs.\n\t// This is done after adding c to ctx.m (and stopped before removing it)\n\t// because flushing logs requires making an API call.\n\tgo c.logFlusher(stopFlushing)\n\n\texecuteRequestSafely(c, r)\n\tc.outHeader = nil // make sure header changes aren't respected any more\n\n\tstopFlushing <- 1 // any logging beyond this point will be dropped\n\n\t// Flush any pending logs asynchronously.\n\tc.pendingLogs.Lock()\n\tflushes := c.pendingLogs.flushes\n\tif len(c.pendingLogs.lines) > 0 {\n\t\tflushes++\n\t}\n\tc.pendingLogs.Unlock()\n\tflushed := make(chan struct{})\n\tgo func() {\n\t\tdefer close(flushed)\n\t\t// Force a log flush, because with very short requests we\n\t\t// may not ever flush logs.\n\t\tc.flushLog(true)\n\t}()\n\tw.Header().Set(logFlushHeader, strconv.Itoa(flushes))\n\n\t// Avoid nil Write call if c.Write is never called.\n\tif c.outCode != 0 {\n\t\tw.WriteHeader(c.outCode)\n\t}\n\tif c.outBody != nil {\n\t\tw.Write(c.outBody)\n\t}\n\t// Wait for the last flush to complete before returning,\n\t// otherwise the security ticket will not be valid.\n\t<-flushed\n}\n\nfunc executeRequestSafely(c *context, r *http.Request) {\n\tdefer func() {\n\t\tif x := recover(); x != nil {\n\t\t\tlogf(c, 4, \"%s\", renderPanic(x)) // 4 == critical\n\t\t\tc.outCode = 500\n\t\t}\n\t}()\n\n\thttp.DefaultServeMux.ServeHTTP(c, r)\n}\n\nfunc renderPanic(x interface{}) string {\n\tbuf := make([]byte, 16<<10) // 16 KB should be plenty\n\tbuf = buf[:runtime.Stack(buf, false)]\n\n\t// Remove the first few stack frames:\n\t//   this func\n\t//   the recover closure in the caller\n\t// That will root the stack trace at the site of the panic.\n\tconst (\n\t\tskipStart  = \"internal.renderPanic\"\n\t\tskipFrames = 2\n\t)\n\tstart := bytes.Index(buf, []byte(skipStart))\n\tp := start\n\tfor i := 0; i < skipFrames*2 && p+1 < len(buf); i++ {\n\t\tp = bytes.IndexByte(buf[p+1:], '\\n') + p + 1\n\t\tif p < 0 {\n\t\t\tbreak\n\t\t}\n\t}\n\tif p >= 0 {\n\t\t// buf[start:p+1] is the block to remove.\n\t\t// Copy buf[p+1:] over buf[start:] and shrink buf.\n\t\tcopy(buf[start:], buf[p+1:])\n\t\tbuf = buf[:len(buf)-(p+1-start)]\n\t}\n\n\t// Add panic heading.\n\thead := fmt.Sprintf(\"panic: %v\\n\\n\", x)\n\tif len(head) > len(buf) {\n\t\t// Extremely unlikely to happen.\n\t\treturn head\n\t}\n\tcopy(buf[len(head):], buf)\n\tcopy(buf, head)\n\n\treturn string(buf)\n}\n\n// context represents the context of an in-flight HTTP request.\n// It implements the appengine.Context and http.ResponseWriter interfaces.\ntype context struct {\n\treq *http.Request\n\n\toutCode   int\n\toutHeader http.Header\n\toutBody   []byte\n\n\tpendingLogs struct {\n\t\tsync.Mutex\n\t\tlines   []*logpb.UserAppLogLine\n\t\tflushes int\n\t}\n\n\tapiURL *url.URL\n}\n\nvar contextKey = \"holds a *context\"\n\n// jointContext joins two contexts in a superficial way.\n// It takes values and timeouts from a base context, and only values from another context.\ntype jointContext struct {\n\tbase       netcontext.Context\n\tvaluesOnly netcontext.Context\n}\n\nfunc (c jointContext) Deadline() (time.Time, bool) {\n\treturn c.base.Deadline()\n}\n\nfunc (c jointContext) Done() <-chan struct{} {\n\treturn c.base.Done()\n}\n\nfunc (c jointContext) Err() error {\n\treturn c.base.Err()\n}\n\nfunc (c jointContext) Value(key interface{}) interface{} {\n\tif val := c.base.Value(key); val != nil {\n\t\treturn val\n\t}\n\treturn c.valuesOnly.Value(key)\n}\n\n// fromContext returns the App Engine context or nil if ctx is not\n// derived from an App Engine context.\nfunc fromContext(ctx netcontext.Context) *context {\n\tc, _ := ctx.Value(&contextKey).(*context)\n\treturn c\n}\n\nfunc withContext(parent netcontext.Context, c *context) netcontext.Context {\n\tctx := netcontext.WithValue(parent, &contextKey, c)\n\tif ns := c.req.Header.Get(curNamespaceHeader); ns != \"\" {\n\t\tctx = withNamespace(ctx, ns)\n\t}\n\treturn ctx\n}\n\nfunc toContext(c *context) netcontext.Context {\n\treturn withContext(netcontext.Background(), c)\n}\n\nfunc IncomingHeaders(ctx netcontext.Context) http.Header {\n\tif c := fromContext(ctx); c != nil {\n\t\treturn c.req.Header\n\t}\n\treturn nil\n}\n\nfunc ReqContext(req *http.Request) netcontext.Context {\n\treturn req.Context()\n}\n\nfunc WithContext(parent netcontext.Context, req *http.Request) netcontext.Context {\n\treturn jointContext{\n\t\tbase:       parent,\n\t\tvaluesOnly: req.Context(),\n\t}\n}\n\n// DefaultTicket returns a ticket used for background context or dev_appserver.\nfunc DefaultTicket() string {\n\tdefaultTicketOnce.Do(func() {\n\t\tif IsDevAppServer() {\n\t\t\tdefaultTicket = \"testapp\" + defaultTicketSuffix\n\t\t\treturn\n\t\t}\n\t\tappID := partitionlessAppID()\n\t\tescAppID := strings.Replace(strings.Replace(appID, \":\", \"_\", -1), \".\", \"_\", -1)\n\t\tmajVersion := VersionID(nil)\n\t\tif i := strings.Index(majVersion, \".\"); i > 0 {\n\t\t\tmajVersion = majVersion[:i]\n\t\t}\n\t\tdefaultTicket = fmt.Sprintf(\"%s/%s.%s.%s\", escAppID, ModuleName(nil), majVersion, InstanceID())\n\t})\n\treturn defaultTicket\n}\n\nfunc BackgroundContext() netcontext.Context {\n\tbackgroundContextOnce.Do(func() {\n\t\t// Compute background security ticket.\n\t\tticket := DefaultTicket()\n\n\t\tc := &context{\n\t\t\treq: &http.Request{\n\t\t\t\tHeader: http.Header{\n\t\t\t\t\tticketHeader: []string{ticket},\n\t\t\t\t},\n\t\t\t},\n\t\t\tapiURL: apiURL(),\n\t\t}\n\t\tbackgroundContext = toContext(c)\n\n\t\t// TODO(dsymonds): Wire up the shutdown handler to do a final flush.\n\t\tgo c.logFlusher(make(chan int))\n\t})\n\n\treturn backgroundContext\n}\n\n// RegisterTestRequest registers the HTTP request req for testing, such that\n// any API calls are sent to the provided URL. It returns a closure to delete\n// the registration.\n// It should only be used by aetest package.\nfunc RegisterTestRequest(req *http.Request, apiURL *url.URL, decorate func(netcontext.Context) netcontext.Context) (*http.Request, func()) {\n\tc := &context{\n\t\treq:    req,\n\t\tapiURL: apiURL,\n\t}\n\tctx := withContext(decorate(req.Context()), c)\n\treq = req.WithContext(ctx)\n\tc.req = req\n\treturn req, func() {}\n}\n\nvar errTimeout = &CallError{\n\tDetail:  \"Deadline exceeded\",\n\tCode:    int32(remotepb.RpcError_CANCELLED),\n\tTimeout: true,\n}\n\nfunc (c *context) Header() http.Header { return c.outHeader }\n\n// Copied from $GOROOT/src/pkg/net/http/transfer.go. Some response status\n// codes do not permit a response body (nor response entity headers such as\n// Content-Length, Content-Type, etc).\nfunc bodyAllowedForStatus(status int) bool {\n\tswitch {\n\tcase status >= 100 && status <= 199:\n\t\treturn false\n\tcase status == 204:\n\t\treturn false\n\tcase status == 304:\n\t\treturn false\n\t}\n\treturn true\n}\n\nfunc (c *context) Write(b []byte) (int, error) {\n\tif c.outCode == 0 {\n\t\tc.WriteHeader(http.StatusOK)\n\t}\n\tif len(b) > 0 && !bodyAllowedForStatus(c.outCode) {\n\t\treturn 0, http.ErrBodyNotAllowed\n\t}\n\tc.outBody = append(c.outBody, b...)\n\treturn len(b), nil\n}\n\nfunc (c *context) WriteHeader(code int) {\n\tif c.outCode != 0 {\n\t\tlogf(c, 3, \"WriteHeader called multiple times on request.\") // error level\n\t\treturn\n\t}\n\tc.outCode = code\n}\n\nfunc (c *context) post(body []byte, timeout time.Duration) (b []byte, err error) {\n\threq := &http.Request{\n\t\tMethod: \"POST\",\n\t\tURL:    c.apiURL,\n\t\tHeader: http.Header{\n\t\t\tapiEndpointHeader: apiEndpointHeaderValue,\n\t\t\tapiMethodHeader:   apiMethodHeaderValue,\n\t\t\tapiContentType:    apiContentTypeValue,\n\t\t\tapiDeadlineHeader: []string{strconv.FormatFloat(timeout.Seconds(), 'f', -1, 64)},\n\t\t},\n\t\tBody:          ioutil.NopCloser(bytes.NewReader(body)),\n\t\tContentLength: int64(len(body)),\n\t\tHost:          c.apiURL.Host,\n\t}\n\tif info := c.req.Header.Get(dapperHeader); info != \"\" {\n\t\threq.Header.Set(dapperHeader, info)\n\t}\n\tif info := c.req.Header.Get(traceHeader); info != \"\" {\n\t\threq.Header.Set(traceHeader, info)\n\t}\n\n\ttr := apiHTTPClient.Transport.(*http.Transport)\n\n\tvar timedOut int32 // atomic; set to 1 if timed out\n\tt := time.AfterFunc(timeout, func() {\n\t\tatomic.StoreInt32(&timedOut, 1)\n\t\ttr.CancelRequest(hreq)\n\t})\n\tdefer t.Stop()\n\tdefer func() {\n\t\t// Check if timeout was exceeded.\n\t\tif atomic.LoadInt32(&timedOut) != 0 {\n\t\t\terr = errTimeout\n\t\t}\n\t}()\n\n\thresp, err := apiHTTPClient.Do(hreq)\n\tif err != nil {\n\t\treturn nil, &CallError{\n\t\t\tDetail: fmt.Sprintf(\"service bridge HTTP failed: %v\", err),\n\t\t\tCode:   int32(remotepb.RpcError_UNKNOWN),\n\t\t}\n\t}\n\tdefer hresp.Body.Close()\n\threspBody, err := ioutil.ReadAll(hresp.Body)\n\tif hresp.StatusCode != 200 {\n\t\treturn nil, &CallError{\n\t\t\tDetail: fmt.Sprintf(\"service bridge returned HTTP %d (%q)\", hresp.StatusCode, hrespBody),\n\t\t\tCode:   int32(remotepb.RpcError_UNKNOWN),\n\t\t}\n\t}\n\tif err != nil {\n\t\treturn nil, &CallError{\n\t\t\tDetail: fmt.Sprintf(\"service bridge response bad: %v\", err),\n\t\t\tCode:   int32(remotepb.RpcError_UNKNOWN),\n\t\t}\n\t}\n\treturn hrespBody, nil\n}\n\nfunc Call(ctx netcontext.Context, service, method string, in, out proto.Message) error {\n\tif ns := NamespaceFromContext(ctx); ns != \"\" {\n\t\tif fn, ok := NamespaceMods[service]; ok {\n\t\t\tfn(in, ns)\n\t\t}\n\t}\n\n\tif f, ctx, ok := callOverrideFromContext(ctx); ok {\n\t\treturn f(ctx, service, method, in, out)\n\t}\n\n\t// Handle already-done contexts quickly.\n\tselect {\n\tcase <-ctx.Done():\n\t\treturn ctx.Err()\n\tdefault:\n\t}\n\n\tc := fromContext(ctx)\n\tif c == nil {\n\t\t// Give a good error message rather than a panic lower down.\n\t\treturn errNotAppEngineContext\n\t}\n\n\t// Apply transaction modifications if we're in a transaction.\n\tif t := transactionFromContext(ctx); t != nil {\n\t\tif t.finished {\n\t\t\treturn errors.New(\"transaction context has expired\")\n\t\t}\n\t\tapplyTransaction(in, &t.transaction)\n\t}\n\n\t// Default RPC timeout is 60s.\n\ttimeout := 60 * time.Second\n\tif deadline, ok := ctx.Deadline(); ok {\n\t\ttimeout = deadline.Sub(time.Now())\n\t}\n\n\tdata, err := proto.Marshal(in)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tticket := c.req.Header.Get(ticketHeader)\n\t// Use a test ticket under test environment.\n\tif ticket == \"\" {\n\t\tif appid := ctx.Value(&appIDOverrideKey); appid != nil {\n\t\t\tticket = appid.(string) + defaultTicketSuffix\n\t\t}\n\t}\n\t// Fall back to use background ticket when the request ticket is not available in Flex or dev_appserver.\n\tif ticket == \"\" {\n\t\tticket = DefaultTicket()\n\t}\n\tif dri := c.req.Header.Get(devRequestIdHeader); IsDevAppServer() && dri != \"\" {\n\t\tticket = dri\n\t}\n\treq := &remotepb.Request{\n\t\tServiceName: &service,\n\t\tMethod:      &method,\n\t\tRequest:     data,\n\t\tRequestId:   &ticket,\n\t}\n\threqBody, err := proto.Marshal(req)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\threspBody, err := c.post(hreqBody, timeout)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tres := &remotepb.Response{}\n\tif err := proto.Unmarshal(hrespBody, res); err != nil {\n\t\treturn err\n\t}\n\tif res.RpcError != nil {\n\t\tce := &CallError{\n\t\t\tDetail: res.RpcError.GetDetail(),\n\t\t\tCode:   *res.RpcError.Code,\n\t\t}\n\t\tswitch remotepb.RpcError_ErrorCode(ce.Code) {\n\t\tcase remotepb.RpcError_CANCELLED, remotepb.RpcError_DEADLINE_EXCEEDED:\n\t\t\tce.Timeout = true\n\t\t}\n\t\treturn ce\n\t}\n\tif res.ApplicationError != nil {\n\t\treturn &APIError{\n\t\t\tService: *req.ServiceName,\n\t\t\tDetail:  res.ApplicationError.GetDetail(),\n\t\t\tCode:    *res.ApplicationError.Code,\n\t\t}\n\t}\n\tif res.Exception != nil || res.JavaException != nil {\n\t\t// This shouldn't happen, but let's be defensive.\n\t\treturn &CallError{\n\t\t\tDetail: \"service bridge returned exception\",\n\t\t\tCode:   int32(remotepb.RpcError_UNKNOWN),\n\t\t}\n\t}\n\treturn proto.Unmarshal(res.Response, out)\n}\n\nfunc (c *context) Request() *http.Request {\n\treturn c.req\n}\n\nfunc (c *context) addLogLine(ll *logpb.UserAppLogLine) {\n\t// Truncate long log lines.\n\t// TODO(dsymonds): Check if this is still necessary.\n\tconst lim = 8 << 10\n\tif len(*ll.Message) > lim {\n\t\tsuffix := fmt.Sprintf(\"...(length %d)\", len(*ll.Message))\n\t\tll.Message = proto.String((*ll.Message)[:lim-len(suffix)] + suffix)\n\t}\n\n\tc.pendingLogs.Lock()\n\tc.pendingLogs.lines = append(c.pendingLogs.lines, ll)\n\tc.pendingLogs.Unlock()\n}\n\nvar logLevelName = map[int64]string{\n\t0: \"DEBUG\",\n\t1: \"INFO\",\n\t2: \"WARNING\",\n\t3: \"ERROR\",\n\t4: \"CRITICAL\",\n}\n\nfunc logf(c *context, level int64, format string, args ...interface{}) {\n\tif c == nil {\n\t\tpanic(\"not an App Engine context\")\n\t}\n\ts := fmt.Sprintf(format, args...)\n\ts = strings.TrimRight(s, \"\\n\") // Remove any trailing newline characters.\n\tc.addLogLine(&logpb.UserAppLogLine{\n\t\tTimestampUsec: proto.Int64(time.Now().UnixNano() / 1e3),\n\t\tLevel:         &level,\n\t\tMessage:       &s,\n\t})\n\t// Only duplicate log to stderr if not running on App Engine second generation\n\tif !IsSecondGen() {\n\t\tlog.Print(logLevelName[level] + \": \" + s)\n\t}\n}\n\n// flushLog attempts to flush any pending logs to the appserver.\n// It should not be called concurrently.\nfunc (c *context) flushLog(force bool) (flushed bool) {\n\tc.pendingLogs.Lock()\n\t// Grab up to 30 MB. We can get away with up to 32 MB, but let's be cautious.\n\tn, rem := 0, 30<<20\n\tfor ; n < len(c.pendingLogs.lines); n++ {\n\t\tll := c.pendingLogs.lines[n]\n\t\t// Each log line will require about 3 bytes of overhead.\n\t\tnb := proto.Size(ll) + 3\n\t\tif nb > rem {\n\t\t\tbreak\n\t\t}\n\t\trem -= nb\n\t}\n\tlines := c.pendingLogs.lines[:n]\n\tc.pendingLogs.lines = c.pendingLogs.lines[n:]\n\tc.pendingLogs.Unlock()\n\n\tif len(lines) == 0 && !force {\n\t\t// Nothing to flush.\n\t\treturn false\n\t}\n\n\trescueLogs := false\n\tdefer func() {\n\t\tif rescueLogs {\n\t\t\tc.pendingLogs.Lock()\n\t\t\tc.pendingLogs.lines = append(lines, c.pendingLogs.lines...)\n\t\t\tc.pendingLogs.Unlock()\n\t\t}\n\t}()\n\n\tbuf, err := proto.Marshal(&logpb.UserAppLogGroup{\n\t\tLogLine: lines,\n\t})\n\tif err != nil {\n\t\tlog.Printf(\"internal.flushLog: marshaling UserAppLogGroup: %v\", err)\n\t\trescueLogs = true\n\t\treturn false\n\t}\n\n\treq := &logpb.FlushRequest{\n\t\tLogs: buf,\n\t}\n\tres := &basepb.VoidProto{}\n\tc.pendingLogs.Lock()\n\tc.pendingLogs.flushes++\n\tc.pendingLogs.Unlock()\n\tif err := Call(toContext(c), \"logservice\", \"Flush\", req, res); err != nil {\n\t\tlog.Printf(\"internal.flushLog: Flush RPC: %v\", err)\n\t\trescueLogs = true\n\t\treturn false\n\t}\n\treturn true\n}\n\nconst (\n\t// Log flushing parameters.\n\tflushInterval      = 1 * time.Second\n\tforceFlushInterval = 60 * time.Second\n)\n\nfunc (c *context) logFlusher(stop <-chan int) {\n\tlastFlush := time.Now()\n\ttick := time.NewTicker(flushInterval)\n\tfor {\n\t\tselect {\n\t\tcase <-stop:\n\t\t\t// Request finished.\n\t\t\ttick.Stop()\n\t\t\treturn\n\t\tcase <-tick.C:\n\t\t\tforce := time.Now().Sub(lastFlush) > forceFlushInterval\n\t\t\tif c.flushLog(force) {\n\t\t\t\tlastFlush = time.Now()\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc ContextForTesting(req *http.Request) netcontext.Context {\n\treturn toContext(&context{req: req})\n}\n"
  },
  {
    "path": "vendor/google.golang.org/appengine/internal/api_classic.go",
    "content": "// Copyright 2015 Google Inc. All rights reserved.\n// Use of this source code is governed by the Apache 2.0\n// license that can be found in the LICENSE file.\n\n// +build appengine\n\npackage internal\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"time\"\n\n\t\"appengine\"\n\t\"appengine_internal\"\n\tbasepb \"appengine_internal/base\"\n\n\t\"github.com/golang/protobuf/proto\"\n\tnetcontext \"golang.org/x/net/context\"\n)\n\nvar contextKey = \"holds an appengine.Context\"\n\n// fromContext returns the App Engine context or nil if ctx is not\n// derived from an App Engine context.\nfunc fromContext(ctx netcontext.Context) appengine.Context {\n\tc, _ := ctx.Value(&contextKey).(appengine.Context)\n\treturn c\n}\n\n// This is only for classic App Engine adapters.\nfunc ClassicContextFromContext(ctx netcontext.Context) (appengine.Context, error) {\n\tc := fromContext(ctx)\n\tif c == nil {\n\t\treturn nil, errNotAppEngineContext\n\t}\n\treturn c, nil\n}\n\nfunc withContext(parent netcontext.Context, c appengine.Context) netcontext.Context {\n\tctx := netcontext.WithValue(parent, &contextKey, c)\n\n\ts := &basepb.StringProto{}\n\tc.Call(\"__go__\", \"GetNamespace\", &basepb.VoidProto{}, s, nil)\n\tif ns := s.GetValue(); ns != \"\" {\n\t\tctx = NamespacedContext(ctx, ns)\n\t}\n\n\treturn ctx\n}\n\nfunc IncomingHeaders(ctx netcontext.Context) http.Header {\n\tif c := fromContext(ctx); c != nil {\n\t\tif req, ok := c.Request().(*http.Request); ok {\n\t\t\treturn req.Header\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc ReqContext(req *http.Request) netcontext.Context {\n\treturn WithContext(netcontext.Background(), req)\n}\n\nfunc WithContext(parent netcontext.Context, req *http.Request) netcontext.Context {\n\tc := appengine.NewContext(req)\n\treturn withContext(parent, c)\n}\n\ntype testingContext struct {\n\tappengine.Context\n\n\treq *http.Request\n}\n\nfunc (t *testingContext) FullyQualifiedAppID() string { return \"dev~testcontext\" }\nfunc (t *testingContext) Call(service, method string, _, _ appengine_internal.ProtoMessage, _ *appengine_internal.CallOptions) error {\n\tif service == \"__go__\" && method == \"GetNamespace\" {\n\t\treturn nil\n\t}\n\treturn fmt.Errorf(\"testingContext: unsupported Call\")\n}\nfunc (t *testingContext) Request() interface{} { return t.req }\n\nfunc ContextForTesting(req *http.Request) netcontext.Context {\n\treturn withContext(netcontext.Background(), &testingContext{req: req})\n}\n\nfunc Call(ctx netcontext.Context, service, method string, in, out proto.Message) error {\n\tif ns := NamespaceFromContext(ctx); ns != \"\" {\n\t\tif fn, ok := NamespaceMods[service]; ok {\n\t\t\tfn(in, ns)\n\t\t}\n\t}\n\n\tif f, ctx, ok := callOverrideFromContext(ctx); ok {\n\t\treturn f(ctx, service, method, in, out)\n\t}\n\n\t// Handle already-done contexts quickly.\n\tselect {\n\tcase <-ctx.Done():\n\t\treturn ctx.Err()\n\tdefault:\n\t}\n\n\tc := fromContext(ctx)\n\tif c == nil {\n\t\t// Give a good error message rather than a panic lower down.\n\t\treturn errNotAppEngineContext\n\t}\n\n\t// Apply transaction modifications if we're in a transaction.\n\tif t := transactionFromContext(ctx); t != nil {\n\t\tif t.finished {\n\t\t\treturn errors.New(\"transaction context has expired\")\n\t\t}\n\t\tapplyTransaction(in, &t.transaction)\n\t}\n\n\tvar opts *appengine_internal.CallOptions\n\tif d, ok := ctx.Deadline(); ok {\n\t\topts = &appengine_internal.CallOptions{\n\t\t\tTimeout: d.Sub(time.Now()),\n\t\t}\n\t}\n\n\terr := c.Call(service, method, in, out, opts)\n\tswitch v := err.(type) {\n\tcase *appengine_internal.APIError:\n\t\treturn &APIError{\n\t\t\tService: v.Service,\n\t\t\tDetail:  v.Detail,\n\t\t\tCode:    v.Code,\n\t\t}\n\tcase *appengine_internal.CallError:\n\t\treturn &CallError{\n\t\t\tDetail:  v.Detail,\n\t\t\tCode:    v.Code,\n\t\t\tTimeout: v.Timeout,\n\t\t}\n\t}\n\treturn err\n}\n\nfunc handleHTTP(w http.ResponseWriter, r *http.Request) {\n\tpanic(\"handleHTTP called; this should be impossible\")\n}\n\nfunc logf(c appengine.Context, level int64, format string, args ...interface{}) {\n\tvar fn func(format string, args ...interface{})\n\tswitch level {\n\tcase 0:\n\t\tfn = c.Debugf\n\tcase 1:\n\t\tfn = c.Infof\n\tcase 2:\n\t\tfn = c.Warningf\n\tcase 3:\n\t\tfn = c.Errorf\n\tcase 4:\n\t\tfn = c.Criticalf\n\tdefault:\n\t\t// This shouldn't happen.\n\t\tfn = c.Criticalf\n\t}\n\tfn(format, args...)\n}\n"
  },
  {
    "path": "vendor/google.golang.org/appengine/internal/api_common.go",
    "content": "// Copyright 2015 Google Inc. All rights reserved.\n// Use of this source code is governed by the Apache 2.0\n// license that can be found in the LICENSE file.\n\npackage internal\n\nimport (\n\t\"errors\"\n\t\"os\"\n\n\t\"github.com/golang/protobuf/proto\"\n\tnetcontext \"golang.org/x/net/context\"\n)\n\nvar errNotAppEngineContext = errors.New(\"not an App Engine context\")\n\ntype CallOverrideFunc func(ctx netcontext.Context, service, method string, in, out proto.Message) error\n\nvar callOverrideKey = \"holds []CallOverrideFunc\"\n\nfunc WithCallOverride(ctx netcontext.Context, f CallOverrideFunc) netcontext.Context {\n\t// We avoid appending to any existing call override\n\t// so we don't risk overwriting a popped stack below.\n\tvar cofs []CallOverrideFunc\n\tif uf, ok := ctx.Value(&callOverrideKey).([]CallOverrideFunc); ok {\n\t\tcofs = append(cofs, uf...)\n\t}\n\tcofs = append(cofs, f)\n\treturn netcontext.WithValue(ctx, &callOverrideKey, cofs)\n}\n\nfunc callOverrideFromContext(ctx netcontext.Context) (CallOverrideFunc, netcontext.Context, bool) {\n\tcofs, _ := ctx.Value(&callOverrideKey).([]CallOverrideFunc)\n\tif len(cofs) == 0 {\n\t\treturn nil, nil, false\n\t}\n\t// We found a list of overrides; grab the last, and reconstitute a\n\t// context that will hide it.\n\tf := cofs[len(cofs)-1]\n\tctx = netcontext.WithValue(ctx, &callOverrideKey, cofs[:len(cofs)-1])\n\treturn f, ctx, true\n}\n\ntype logOverrideFunc func(level int64, format string, args ...interface{})\n\nvar logOverrideKey = \"holds a logOverrideFunc\"\n\nfunc WithLogOverride(ctx netcontext.Context, f logOverrideFunc) netcontext.Context {\n\treturn netcontext.WithValue(ctx, &logOverrideKey, f)\n}\n\nvar appIDOverrideKey = \"holds a string, being the full app ID\"\n\nfunc WithAppIDOverride(ctx netcontext.Context, appID string) netcontext.Context {\n\treturn netcontext.WithValue(ctx, &appIDOverrideKey, appID)\n}\n\nvar namespaceKey = \"holds the namespace string\"\n\nfunc withNamespace(ctx netcontext.Context, ns string) netcontext.Context {\n\treturn netcontext.WithValue(ctx, &namespaceKey, ns)\n}\n\nfunc NamespaceFromContext(ctx netcontext.Context) string {\n\t// If there's no namespace, return the empty string.\n\tns, _ := ctx.Value(&namespaceKey).(string)\n\treturn ns\n}\n\n// FullyQualifiedAppID returns the fully-qualified application ID.\n// This may contain a partition prefix (e.g. \"s~\" for High Replication apps),\n// or a domain prefix (e.g. \"example.com:\").\nfunc FullyQualifiedAppID(ctx netcontext.Context) string {\n\tif id, ok := ctx.Value(&appIDOverrideKey).(string); ok {\n\t\treturn id\n\t}\n\treturn fullyQualifiedAppID(ctx)\n}\n\nfunc Logf(ctx netcontext.Context, level int64, format string, args ...interface{}) {\n\tif f, ok := ctx.Value(&logOverrideKey).(logOverrideFunc); ok {\n\t\tf(level, format, args...)\n\t\treturn\n\t}\n\tc := fromContext(ctx)\n\tif c == nil {\n\t\tpanic(errNotAppEngineContext)\n\t}\n\tlogf(c, level, format, args...)\n}\n\n// NamespacedContext wraps a Context to support namespaces.\nfunc NamespacedContext(ctx netcontext.Context, namespace string) netcontext.Context {\n\treturn withNamespace(ctx, namespace)\n}\n\n// SetTestEnv sets the env variables for testing background ticket in Flex.\nfunc SetTestEnv() func() {\n\tvar environ = []struct {\n\t\tkey, value string\n\t}{\n\t\t{\"GAE_LONG_APP_ID\", \"my-app-id\"},\n\t\t{\"GAE_MINOR_VERSION\", \"067924799508853122\"},\n\t\t{\"GAE_MODULE_INSTANCE\", \"0\"},\n\t\t{\"GAE_MODULE_NAME\", \"default\"},\n\t\t{\"GAE_MODULE_VERSION\", \"20150612t184001\"},\n\t}\n\n\tfor _, v := range environ {\n\t\told := os.Getenv(v.key)\n\t\tos.Setenv(v.key, v.value)\n\t\tv.value = old\n\t}\n\treturn func() { // Restore old environment after the test completes.\n\t\tfor _, v := range environ {\n\t\t\tif v.value == \"\" {\n\t\t\t\tos.Unsetenv(v.key)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tos.Setenv(v.key, v.value)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "vendor/google.golang.org/appengine/internal/app_id.go",
    "content": "// Copyright 2011 Google Inc. All rights reserved.\n// Use of this source code is governed by the Apache 2.0\n// license that can be found in the LICENSE file.\n\npackage internal\n\nimport (\n\t\"strings\"\n)\n\nfunc parseFullAppID(appid string) (partition, domain, displayID string) {\n\tif i := strings.Index(appid, \"~\"); i != -1 {\n\t\tpartition, appid = appid[:i], appid[i+1:]\n\t}\n\tif i := strings.Index(appid, \":\"); i != -1 {\n\t\tdomain, appid = appid[:i], appid[i+1:]\n\t}\n\treturn partition, domain, appid\n}\n\n// appID returns \"appid\" or \"domain.com:appid\".\nfunc appID(fullAppID string) string {\n\t_, dom, dis := parseFullAppID(fullAppID)\n\tif dom != \"\" {\n\t\treturn dom + \":\" + dis\n\t}\n\treturn dis\n}\n"
  },
  {
    "path": "vendor/google.golang.org/appengine/internal/app_identity/app_identity_service.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// source: google.golang.org/appengine/internal/app_identity/app_identity_service.proto\n\npackage app_identity\n\nimport proto \"github.com/golang/protobuf/proto\"\nimport fmt \"fmt\"\nimport math \"math\"\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar _ = proto.Marshal\nvar _ = fmt.Errorf\nvar _ = math.Inf\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package\n\ntype AppIdentityServiceError_ErrorCode int32\n\nconst (\n\tAppIdentityServiceError_SUCCESS           AppIdentityServiceError_ErrorCode = 0\n\tAppIdentityServiceError_UNKNOWN_SCOPE     AppIdentityServiceError_ErrorCode = 9\n\tAppIdentityServiceError_BLOB_TOO_LARGE    AppIdentityServiceError_ErrorCode = 1000\n\tAppIdentityServiceError_DEADLINE_EXCEEDED AppIdentityServiceError_ErrorCode = 1001\n\tAppIdentityServiceError_NOT_A_VALID_APP   AppIdentityServiceError_ErrorCode = 1002\n\tAppIdentityServiceError_UNKNOWN_ERROR     AppIdentityServiceError_ErrorCode = 1003\n\tAppIdentityServiceError_NOT_ALLOWED       AppIdentityServiceError_ErrorCode = 1005\n\tAppIdentityServiceError_NOT_IMPLEMENTED   AppIdentityServiceError_ErrorCode = 1006\n)\n\nvar AppIdentityServiceError_ErrorCode_name = map[int32]string{\n\t0:    \"SUCCESS\",\n\t9:    \"UNKNOWN_SCOPE\",\n\t1000: \"BLOB_TOO_LARGE\",\n\t1001: \"DEADLINE_EXCEEDED\",\n\t1002: \"NOT_A_VALID_APP\",\n\t1003: \"UNKNOWN_ERROR\",\n\t1005: \"NOT_ALLOWED\",\n\t1006: \"NOT_IMPLEMENTED\",\n}\nvar AppIdentityServiceError_ErrorCode_value = map[string]int32{\n\t\"SUCCESS\":           0,\n\t\"UNKNOWN_SCOPE\":     9,\n\t\"BLOB_TOO_LARGE\":    1000,\n\t\"DEADLINE_EXCEEDED\": 1001,\n\t\"NOT_A_VALID_APP\":   1002,\n\t\"UNKNOWN_ERROR\":     1003,\n\t\"NOT_ALLOWED\":       1005,\n\t\"NOT_IMPLEMENTED\":   1006,\n}\n\nfunc (x AppIdentityServiceError_ErrorCode) Enum() *AppIdentityServiceError_ErrorCode {\n\tp := new(AppIdentityServiceError_ErrorCode)\n\t*p = x\n\treturn p\n}\nfunc (x AppIdentityServiceError_ErrorCode) String() string {\n\treturn proto.EnumName(AppIdentityServiceError_ErrorCode_name, int32(x))\n}\nfunc (x *AppIdentityServiceError_ErrorCode) UnmarshalJSON(data []byte) error {\n\tvalue, err := proto.UnmarshalJSONEnum(AppIdentityServiceError_ErrorCode_value, data, \"AppIdentityServiceError_ErrorCode\")\n\tif err != nil {\n\t\treturn err\n\t}\n\t*x = AppIdentityServiceError_ErrorCode(value)\n\treturn nil\n}\nfunc (AppIdentityServiceError_ErrorCode) EnumDescriptor() ([]byte, []int) {\n\treturn fileDescriptor_app_identity_service_08a6e3f74b04cfa4, []int{0, 0}\n}\n\ntype AppIdentityServiceError struct {\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *AppIdentityServiceError) Reset()         { *m = AppIdentityServiceError{} }\nfunc (m *AppIdentityServiceError) String() string { return proto.CompactTextString(m) }\nfunc (*AppIdentityServiceError) ProtoMessage()    {}\nfunc (*AppIdentityServiceError) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_app_identity_service_08a6e3f74b04cfa4, []int{0}\n}\nfunc (m *AppIdentityServiceError) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_AppIdentityServiceError.Unmarshal(m, b)\n}\nfunc (m *AppIdentityServiceError) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_AppIdentityServiceError.Marshal(b, m, deterministic)\n}\nfunc (dst *AppIdentityServiceError) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_AppIdentityServiceError.Merge(dst, src)\n}\nfunc (m *AppIdentityServiceError) XXX_Size() int {\n\treturn xxx_messageInfo_AppIdentityServiceError.Size(m)\n}\nfunc (m *AppIdentityServiceError) XXX_DiscardUnknown() {\n\txxx_messageInfo_AppIdentityServiceError.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_AppIdentityServiceError proto.InternalMessageInfo\n\ntype SignForAppRequest struct {\n\tBytesToSign          []byte   `protobuf:\"bytes,1,opt,name=bytes_to_sign,json=bytesToSign\" json:\"bytes_to_sign,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *SignForAppRequest) Reset()         { *m = SignForAppRequest{} }\nfunc (m *SignForAppRequest) String() string { return proto.CompactTextString(m) }\nfunc (*SignForAppRequest) ProtoMessage()    {}\nfunc (*SignForAppRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_app_identity_service_08a6e3f74b04cfa4, []int{1}\n}\nfunc (m *SignForAppRequest) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_SignForAppRequest.Unmarshal(m, b)\n}\nfunc (m *SignForAppRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_SignForAppRequest.Marshal(b, m, deterministic)\n}\nfunc (dst *SignForAppRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_SignForAppRequest.Merge(dst, src)\n}\nfunc (m *SignForAppRequest) XXX_Size() int {\n\treturn xxx_messageInfo_SignForAppRequest.Size(m)\n}\nfunc (m *SignForAppRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_SignForAppRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_SignForAppRequest proto.InternalMessageInfo\n\nfunc (m *SignForAppRequest) GetBytesToSign() []byte {\n\tif m != nil {\n\t\treturn m.BytesToSign\n\t}\n\treturn nil\n}\n\ntype SignForAppResponse struct {\n\tKeyName              *string  `protobuf:\"bytes,1,opt,name=key_name,json=keyName\" json:\"key_name,omitempty\"`\n\tSignatureBytes       []byte   `protobuf:\"bytes,2,opt,name=signature_bytes,json=signatureBytes\" json:\"signature_bytes,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *SignForAppResponse) Reset()         { *m = SignForAppResponse{} }\nfunc (m *SignForAppResponse) String() string { return proto.CompactTextString(m) }\nfunc (*SignForAppResponse) ProtoMessage()    {}\nfunc (*SignForAppResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_app_identity_service_08a6e3f74b04cfa4, []int{2}\n}\nfunc (m *SignForAppResponse) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_SignForAppResponse.Unmarshal(m, b)\n}\nfunc (m *SignForAppResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_SignForAppResponse.Marshal(b, m, deterministic)\n}\nfunc (dst *SignForAppResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_SignForAppResponse.Merge(dst, src)\n}\nfunc (m *SignForAppResponse) XXX_Size() int {\n\treturn xxx_messageInfo_SignForAppResponse.Size(m)\n}\nfunc (m *SignForAppResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_SignForAppResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_SignForAppResponse proto.InternalMessageInfo\n\nfunc (m *SignForAppResponse) GetKeyName() string {\n\tif m != nil && m.KeyName != nil {\n\t\treturn *m.KeyName\n\t}\n\treturn \"\"\n}\n\nfunc (m *SignForAppResponse) GetSignatureBytes() []byte {\n\tif m != nil {\n\t\treturn m.SignatureBytes\n\t}\n\treturn nil\n}\n\ntype GetPublicCertificateForAppRequest struct {\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *GetPublicCertificateForAppRequest) Reset()         { *m = GetPublicCertificateForAppRequest{} }\nfunc (m *GetPublicCertificateForAppRequest) String() string { return proto.CompactTextString(m) }\nfunc (*GetPublicCertificateForAppRequest) ProtoMessage()    {}\nfunc (*GetPublicCertificateForAppRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_app_identity_service_08a6e3f74b04cfa4, []int{3}\n}\nfunc (m *GetPublicCertificateForAppRequest) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_GetPublicCertificateForAppRequest.Unmarshal(m, b)\n}\nfunc (m *GetPublicCertificateForAppRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_GetPublicCertificateForAppRequest.Marshal(b, m, deterministic)\n}\nfunc (dst *GetPublicCertificateForAppRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_GetPublicCertificateForAppRequest.Merge(dst, src)\n}\nfunc (m *GetPublicCertificateForAppRequest) XXX_Size() int {\n\treturn xxx_messageInfo_GetPublicCertificateForAppRequest.Size(m)\n}\nfunc (m *GetPublicCertificateForAppRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_GetPublicCertificateForAppRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_GetPublicCertificateForAppRequest proto.InternalMessageInfo\n\ntype PublicCertificate struct {\n\tKeyName              *string  `protobuf:\"bytes,1,opt,name=key_name,json=keyName\" json:\"key_name,omitempty\"`\n\tX509CertificatePem   *string  `protobuf:\"bytes,2,opt,name=x509_certificate_pem,json=x509CertificatePem\" json:\"x509_certificate_pem,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *PublicCertificate) Reset()         { *m = PublicCertificate{} }\nfunc (m *PublicCertificate) String() string { return proto.CompactTextString(m) }\nfunc (*PublicCertificate) ProtoMessage()    {}\nfunc (*PublicCertificate) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_app_identity_service_08a6e3f74b04cfa4, []int{4}\n}\nfunc (m *PublicCertificate) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_PublicCertificate.Unmarshal(m, b)\n}\nfunc (m *PublicCertificate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_PublicCertificate.Marshal(b, m, deterministic)\n}\nfunc (dst *PublicCertificate) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_PublicCertificate.Merge(dst, src)\n}\nfunc (m *PublicCertificate) XXX_Size() int {\n\treturn xxx_messageInfo_PublicCertificate.Size(m)\n}\nfunc (m *PublicCertificate) XXX_DiscardUnknown() {\n\txxx_messageInfo_PublicCertificate.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_PublicCertificate proto.InternalMessageInfo\n\nfunc (m *PublicCertificate) GetKeyName() string {\n\tif m != nil && m.KeyName != nil {\n\t\treturn *m.KeyName\n\t}\n\treturn \"\"\n}\n\nfunc (m *PublicCertificate) GetX509CertificatePem() string {\n\tif m != nil && m.X509CertificatePem != nil {\n\t\treturn *m.X509CertificatePem\n\t}\n\treturn \"\"\n}\n\ntype GetPublicCertificateForAppResponse struct {\n\tPublicCertificateList      []*PublicCertificate `protobuf:\"bytes,1,rep,name=public_certificate_list,json=publicCertificateList\" json:\"public_certificate_list,omitempty\"`\n\tMaxClientCacheTimeInSecond *int64               `protobuf:\"varint,2,opt,name=max_client_cache_time_in_second,json=maxClientCacheTimeInSecond\" json:\"max_client_cache_time_in_second,omitempty\"`\n\tXXX_NoUnkeyedLiteral       struct{}             `json:\"-\"`\n\tXXX_unrecognized           []byte               `json:\"-\"`\n\tXXX_sizecache              int32                `json:\"-\"`\n}\n\nfunc (m *GetPublicCertificateForAppResponse) Reset()         { *m = GetPublicCertificateForAppResponse{} }\nfunc (m *GetPublicCertificateForAppResponse) String() string { return proto.CompactTextString(m) }\nfunc (*GetPublicCertificateForAppResponse) ProtoMessage()    {}\nfunc (*GetPublicCertificateForAppResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_app_identity_service_08a6e3f74b04cfa4, []int{5}\n}\nfunc (m *GetPublicCertificateForAppResponse) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_GetPublicCertificateForAppResponse.Unmarshal(m, b)\n}\nfunc (m *GetPublicCertificateForAppResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_GetPublicCertificateForAppResponse.Marshal(b, m, deterministic)\n}\nfunc (dst *GetPublicCertificateForAppResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_GetPublicCertificateForAppResponse.Merge(dst, src)\n}\nfunc (m *GetPublicCertificateForAppResponse) XXX_Size() int {\n\treturn xxx_messageInfo_GetPublicCertificateForAppResponse.Size(m)\n}\nfunc (m *GetPublicCertificateForAppResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_GetPublicCertificateForAppResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_GetPublicCertificateForAppResponse proto.InternalMessageInfo\n\nfunc (m *GetPublicCertificateForAppResponse) GetPublicCertificateList() []*PublicCertificate {\n\tif m != nil {\n\t\treturn m.PublicCertificateList\n\t}\n\treturn nil\n}\n\nfunc (m *GetPublicCertificateForAppResponse) GetMaxClientCacheTimeInSecond() int64 {\n\tif m != nil && m.MaxClientCacheTimeInSecond != nil {\n\t\treturn *m.MaxClientCacheTimeInSecond\n\t}\n\treturn 0\n}\n\ntype GetServiceAccountNameRequest struct {\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *GetServiceAccountNameRequest) Reset()         { *m = GetServiceAccountNameRequest{} }\nfunc (m *GetServiceAccountNameRequest) String() string { return proto.CompactTextString(m) }\nfunc (*GetServiceAccountNameRequest) ProtoMessage()    {}\nfunc (*GetServiceAccountNameRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_app_identity_service_08a6e3f74b04cfa4, []int{6}\n}\nfunc (m *GetServiceAccountNameRequest) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_GetServiceAccountNameRequest.Unmarshal(m, b)\n}\nfunc (m *GetServiceAccountNameRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_GetServiceAccountNameRequest.Marshal(b, m, deterministic)\n}\nfunc (dst *GetServiceAccountNameRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_GetServiceAccountNameRequest.Merge(dst, src)\n}\nfunc (m *GetServiceAccountNameRequest) XXX_Size() int {\n\treturn xxx_messageInfo_GetServiceAccountNameRequest.Size(m)\n}\nfunc (m *GetServiceAccountNameRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_GetServiceAccountNameRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_GetServiceAccountNameRequest proto.InternalMessageInfo\n\ntype GetServiceAccountNameResponse struct {\n\tServiceAccountName   *string  `protobuf:\"bytes,1,opt,name=service_account_name,json=serviceAccountName\" json:\"service_account_name,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *GetServiceAccountNameResponse) Reset()         { *m = GetServiceAccountNameResponse{} }\nfunc (m *GetServiceAccountNameResponse) String() string { return proto.CompactTextString(m) }\nfunc (*GetServiceAccountNameResponse) ProtoMessage()    {}\nfunc (*GetServiceAccountNameResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_app_identity_service_08a6e3f74b04cfa4, []int{7}\n}\nfunc (m *GetServiceAccountNameResponse) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_GetServiceAccountNameResponse.Unmarshal(m, b)\n}\nfunc (m *GetServiceAccountNameResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_GetServiceAccountNameResponse.Marshal(b, m, deterministic)\n}\nfunc (dst *GetServiceAccountNameResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_GetServiceAccountNameResponse.Merge(dst, src)\n}\nfunc (m *GetServiceAccountNameResponse) XXX_Size() int {\n\treturn xxx_messageInfo_GetServiceAccountNameResponse.Size(m)\n}\nfunc (m *GetServiceAccountNameResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_GetServiceAccountNameResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_GetServiceAccountNameResponse proto.InternalMessageInfo\n\nfunc (m *GetServiceAccountNameResponse) GetServiceAccountName() string {\n\tif m != nil && m.ServiceAccountName != nil {\n\t\treturn *m.ServiceAccountName\n\t}\n\treturn \"\"\n}\n\ntype GetAccessTokenRequest struct {\n\tScope                []string `protobuf:\"bytes,1,rep,name=scope\" json:\"scope,omitempty\"`\n\tServiceAccountId     *int64   `protobuf:\"varint,2,opt,name=service_account_id,json=serviceAccountId\" json:\"service_account_id,omitempty\"`\n\tServiceAccountName   *string  `protobuf:\"bytes,3,opt,name=service_account_name,json=serviceAccountName\" json:\"service_account_name,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *GetAccessTokenRequest) Reset()         { *m = GetAccessTokenRequest{} }\nfunc (m *GetAccessTokenRequest) String() string { return proto.CompactTextString(m) }\nfunc (*GetAccessTokenRequest) ProtoMessage()    {}\nfunc (*GetAccessTokenRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_app_identity_service_08a6e3f74b04cfa4, []int{8}\n}\nfunc (m *GetAccessTokenRequest) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_GetAccessTokenRequest.Unmarshal(m, b)\n}\nfunc (m *GetAccessTokenRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_GetAccessTokenRequest.Marshal(b, m, deterministic)\n}\nfunc (dst *GetAccessTokenRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_GetAccessTokenRequest.Merge(dst, src)\n}\nfunc (m *GetAccessTokenRequest) XXX_Size() int {\n\treturn xxx_messageInfo_GetAccessTokenRequest.Size(m)\n}\nfunc (m *GetAccessTokenRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_GetAccessTokenRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_GetAccessTokenRequest proto.InternalMessageInfo\n\nfunc (m *GetAccessTokenRequest) GetScope() []string {\n\tif m != nil {\n\t\treturn m.Scope\n\t}\n\treturn nil\n}\n\nfunc (m *GetAccessTokenRequest) GetServiceAccountId() int64 {\n\tif m != nil && m.ServiceAccountId != nil {\n\t\treturn *m.ServiceAccountId\n\t}\n\treturn 0\n}\n\nfunc (m *GetAccessTokenRequest) GetServiceAccountName() string {\n\tif m != nil && m.ServiceAccountName != nil {\n\t\treturn *m.ServiceAccountName\n\t}\n\treturn \"\"\n}\n\ntype GetAccessTokenResponse struct {\n\tAccessToken          *string  `protobuf:\"bytes,1,opt,name=access_token,json=accessToken\" json:\"access_token,omitempty\"`\n\tExpirationTime       *int64   `protobuf:\"varint,2,opt,name=expiration_time,json=expirationTime\" json:\"expiration_time,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *GetAccessTokenResponse) Reset()         { *m = GetAccessTokenResponse{} }\nfunc (m *GetAccessTokenResponse) String() string { return proto.CompactTextString(m) }\nfunc (*GetAccessTokenResponse) ProtoMessage()    {}\nfunc (*GetAccessTokenResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_app_identity_service_08a6e3f74b04cfa4, []int{9}\n}\nfunc (m *GetAccessTokenResponse) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_GetAccessTokenResponse.Unmarshal(m, b)\n}\nfunc (m *GetAccessTokenResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_GetAccessTokenResponse.Marshal(b, m, deterministic)\n}\nfunc (dst *GetAccessTokenResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_GetAccessTokenResponse.Merge(dst, src)\n}\nfunc (m *GetAccessTokenResponse) XXX_Size() int {\n\treturn xxx_messageInfo_GetAccessTokenResponse.Size(m)\n}\nfunc (m *GetAccessTokenResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_GetAccessTokenResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_GetAccessTokenResponse proto.InternalMessageInfo\n\nfunc (m *GetAccessTokenResponse) GetAccessToken() string {\n\tif m != nil && m.AccessToken != nil {\n\t\treturn *m.AccessToken\n\t}\n\treturn \"\"\n}\n\nfunc (m *GetAccessTokenResponse) GetExpirationTime() int64 {\n\tif m != nil && m.ExpirationTime != nil {\n\t\treturn *m.ExpirationTime\n\t}\n\treturn 0\n}\n\ntype GetDefaultGcsBucketNameRequest struct {\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *GetDefaultGcsBucketNameRequest) Reset()         { *m = GetDefaultGcsBucketNameRequest{} }\nfunc (m *GetDefaultGcsBucketNameRequest) String() string { return proto.CompactTextString(m) }\nfunc (*GetDefaultGcsBucketNameRequest) ProtoMessage()    {}\nfunc (*GetDefaultGcsBucketNameRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_app_identity_service_08a6e3f74b04cfa4, []int{10}\n}\nfunc (m *GetDefaultGcsBucketNameRequest) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_GetDefaultGcsBucketNameRequest.Unmarshal(m, b)\n}\nfunc (m *GetDefaultGcsBucketNameRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_GetDefaultGcsBucketNameRequest.Marshal(b, m, deterministic)\n}\nfunc (dst *GetDefaultGcsBucketNameRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_GetDefaultGcsBucketNameRequest.Merge(dst, src)\n}\nfunc (m *GetDefaultGcsBucketNameRequest) XXX_Size() int {\n\treturn xxx_messageInfo_GetDefaultGcsBucketNameRequest.Size(m)\n}\nfunc (m *GetDefaultGcsBucketNameRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_GetDefaultGcsBucketNameRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_GetDefaultGcsBucketNameRequest proto.InternalMessageInfo\n\ntype GetDefaultGcsBucketNameResponse struct {\n\tDefaultGcsBucketName *string  `protobuf:\"bytes,1,opt,name=default_gcs_bucket_name,json=defaultGcsBucketName\" json:\"default_gcs_bucket_name,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *GetDefaultGcsBucketNameResponse) Reset()         { *m = GetDefaultGcsBucketNameResponse{} }\nfunc (m *GetDefaultGcsBucketNameResponse) String() string { return proto.CompactTextString(m) }\nfunc (*GetDefaultGcsBucketNameResponse) ProtoMessage()    {}\nfunc (*GetDefaultGcsBucketNameResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_app_identity_service_08a6e3f74b04cfa4, []int{11}\n}\nfunc (m *GetDefaultGcsBucketNameResponse) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_GetDefaultGcsBucketNameResponse.Unmarshal(m, b)\n}\nfunc (m *GetDefaultGcsBucketNameResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_GetDefaultGcsBucketNameResponse.Marshal(b, m, deterministic)\n}\nfunc (dst *GetDefaultGcsBucketNameResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_GetDefaultGcsBucketNameResponse.Merge(dst, src)\n}\nfunc (m *GetDefaultGcsBucketNameResponse) XXX_Size() int {\n\treturn xxx_messageInfo_GetDefaultGcsBucketNameResponse.Size(m)\n}\nfunc (m *GetDefaultGcsBucketNameResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_GetDefaultGcsBucketNameResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_GetDefaultGcsBucketNameResponse proto.InternalMessageInfo\n\nfunc (m *GetDefaultGcsBucketNameResponse) GetDefaultGcsBucketName() string {\n\tif m != nil && m.DefaultGcsBucketName != nil {\n\t\treturn *m.DefaultGcsBucketName\n\t}\n\treturn \"\"\n}\n\nfunc init() {\n\tproto.RegisterType((*AppIdentityServiceError)(nil), \"appengine.AppIdentityServiceError\")\n\tproto.RegisterType((*SignForAppRequest)(nil), \"appengine.SignForAppRequest\")\n\tproto.RegisterType((*SignForAppResponse)(nil), \"appengine.SignForAppResponse\")\n\tproto.RegisterType((*GetPublicCertificateForAppRequest)(nil), \"appengine.GetPublicCertificateForAppRequest\")\n\tproto.RegisterType((*PublicCertificate)(nil), \"appengine.PublicCertificate\")\n\tproto.RegisterType((*GetPublicCertificateForAppResponse)(nil), \"appengine.GetPublicCertificateForAppResponse\")\n\tproto.RegisterType((*GetServiceAccountNameRequest)(nil), \"appengine.GetServiceAccountNameRequest\")\n\tproto.RegisterType((*GetServiceAccountNameResponse)(nil), \"appengine.GetServiceAccountNameResponse\")\n\tproto.RegisterType((*GetAccessTokenRequest)(nil), \"appengine.GetAccessTokenRequest\")\n\tproto.RegisterType((*GetAccessTokenResponse)(nil), \"appengine.GetAccessTokenResponse\")\n\tproto.RegisterType((*GetDefaultGcsBucketNameRequest)(nil), \"appengine.GetDefaultGcsBucketNameRequest\")\n\tproto.RegisterType((*GetDefaultGcsBucketNameResponse)(nil), \"appengine.GetDefaultGcsBucketNameResponse\")\n}\n\nfunc init() {\n\tproto.RegisterFile(\"google.golang.org/appengine/internal/app_identity/app_identity_service.proto\", fileDescriptor_app_identity_service_08a6e3f74b04cfa4)\n}\n\nvar fileDescriptor_app_identity_service_08a6e3f74b04cfa4 = []byte{\n\t// 676 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x54, 0xdb, 0x6e, 0xda, 0x58,\n\t0x14, 0x1d, 0x26, 0x1a, 0x31, 0x6c, 0x12, 0x62, 0xce, 0x90, 0xcb, 0x8c, 0x32, 0xb9, 0x78, 0x1e,\n\t0x26, 0x0f, 0x15, 0x89, 0x2a, 0x45, 0x55, 0x1f, 0x8d, 0xed, 0x22, 0x54, 0x07, 0x53, 0x43, 0x9a,\n\t0xa8, 0x2f, 0xa7, 0xce, 0x61, 0xc7, 0x3d, 0x02, 0x9f, 0xe3, 0xda, 0x87, 0x0a, 0x3e, 0xa2, 0x3f,\n\t0xd2, 0x9f, 0xe8, 0x5b, 0xbf, 0xa5, 0x17, 0xb5, 0xdf, 0x50, 0xd9, 0x38, 0x5c, 0x92, 0x92, 0x37,\n\t0xbc, 0xf6, 0x5a, 0xcb, 0x6b, 0x2f, 0x6d, 0x0c, 0x4e, 0x20, 0x65, 0x30, 0xc4, 0x7a, 0x20, 0x87,\n\t0xbe, 0x08, 0xea, 0x32, 0x0e, 0x4e, 0xfc, 0x28, 0x42, 0x11, 0x70, 0x81, 0x27, 0x5c, 0x28, 0x8c,\n\t0x85, 0x3f, 0x4c, 0x21, 0xca, 0xfb, 0x28, 0x14, 0x57, 0x93, 0xa5, 0x07, 0x9a, 0x60, 0xfc, 0x8e,\n\t0x33, 0xac, 0x47, 0xb1, 0x54, 0x92, 0x94, 0x66, 0x5a, 0xfd, 0x53, 0x01, 0x76, 0x8c, 0x28, 0x6a,\n\t0xe5, 0xc4, 0xee, 0x94, 0x67, 0xc7, 0xb1, 0x8c, 0xf5, 0x0f, 0x05, 0x28, 0x65, 0xbf, 0x4c, 0xd9,\n\t0x47, 0x52, 0x86, 0x62, 0xf7, 0xc2, 0x34, 0xed, 0x6e, 0x57, 0xfb, 0x8d, 0x54, 0x61, 0xe3, 0xa2,\n\t0xfd, 0xbc, 0xed, 0x5e, 0xb6, 0x69, 0xd7, 0x74, 0x3b, 0xb6, 0x56, 0x22, 0x7f, 0x41, 0xa5, 0xe1,\n\t0xb8, 0x0d, 0xda, 0x73, 0x5d, 0xea, 0x18, 0x5e, 0xd3, 0xd6, 0x3e, 0x17, 0xc9, 0x36, 0x54, 0x2d,\n\t0xdb, 0xb0, 0x9c, 0x56, 0xdb, 0xa6, 0xf6, 0x95, 0x69, 0xdb, 0x96, 0x6d, 0x69, 0x5f, 0x8a, 0xa4,\n\t0x06, 0x9b, 0x6d, 0xb7, 0x47, 0x0d, 0xfa, 0xd2, 0x70, 0x5a, 0x16, 0x35, 0x3a, 0x1d, 0xed, 0x6b,\n\t0x91, 0x90, 0xb9, 0xab, 0xed, 0x79, 0xae, 0xa7, 0x7d, 0x2b, 0x12, 0x0d, 0xca, 0x19, 0xd3, 0x71,\n\t0xdc, 0x4b, 0xdb, 0xd2, 0xbe, 0xcf, 0xb4, 0xad, 0xf3, 0x8e, 0x63, 0x9f, 0xdb, 0xed, 0x9e, 0x6d,\n\t0x69, 0x3f, 0x8a, 0xfa, 0x13, 0xa8, 0x76, 0x79, 0x20, 0x9e, 0xc9, 0xd8, 0x88, 0x22, 0x0f, 0xdf,\n\t0x8e, 0x30, 0x51, 0x44, 0x87, 0x8d, 0xeb, 0x89, 0xc2, 0x84, 0x2a, 0x49, 0x13, 0x1e, 0x88, 0xdd,\n\t0xc2, 0x61, 0xe1, 0x78, 0xdd, 0x2b, 0x67, 0x60, 0x4f, 0xa6, 0x02, 0xfd, 0x0a, 0xc8, 0xa2, 0x30,\n\t0x89, 0xa4, 0x48, 0x90, 0xfc, 0x0d, 0x7f, 0x0e, 0x70, 0x42, 0x85, 0x1f, 0x62, 0x26, 0x2a, 0x79,\n\t0xc5, 0x01, 0x4e, 0xda, 0x7e, 0x88, 0xe4, 0x7f, 0xd8, 0x4c, 0xbd, 0x7c, 0x35, 0x8a, 0x91, 0x66,\n\t0x4e, 0xbb, 0xbf, 0x67, 0xb6, 0x95, 0x19, 0xdc, 0x48, 0x51, 0xfd, 0x3f, 0x38, 0x6a, 0xa2, 0xea,\n\t0x8c, 0xae, 0x87, 0x9c, 0x99, 0x18, 0x2b, 0x7e, 0xc3, 0x99, 0xaf, 0x70, 0x29, 0xa2, 0xfe, 0x1a,\n\t0xaa, 0xf7, 0x18, 0x0f, 0xbd, 0xfd, 0x14, 0x6a, 0xe3, 0xb3, 0xd3, 0xa7, 0x94, 0xcd, 0xe9, 0x34,\n\t0xc2, 0x30, 0x8b, 0x50, 0xf2, 0x48, 0x3a, 0x5b, 0x70, 0xea, 0x60, 0xa8, 0x7f, 0x2c, 0x80, 0xfe,\n\t0x50, 0x8e, 0x7c, 0xe3, 0x1e, 0xec, 0x44, 0x19, 0x65, 0xc9, 0x7a, 0xc8, 0x13, 0xb5, 0x5b, 0x38,\n\t0x5c, 0x3b, 0x2e, 0x3f, 0xde, 0xab, 0xcf, 0xce, 0xa6, 0x7e, 0xcf, 0xcc, 0xdb, 0x8a, 0xee, 0x42,\n\t0x0e, 0x4f, 0x14, 0x31, 0xe1, 0x20, 0xf4, 0xc7, 0x94, 0x0d, 0x39, 0x0a, 0x45, 0x99, 0xcf, 0xde,\n\t0x20, 0x55, 0x3c, 0x44, 0xca, 0x05, 0x4d, 0x90, 0x49, 0xd1, 0xcf, 0x92, 0xaf, 0x79, 0xff, 0x84,\n\t0xfe, 0xd8, 0xcc, 0x58, 0x66, 0x4a, 0xea, 0xf1, 0x10, 0x5b, 0xa2, 0x9b, 0x31, 0xf4, 0x7d, 0xd8,\n\t0x6b, 0xa2, 0xca, 0x6f, 0xd3, 0x60, 0x4c, 0x8e, 0x84, 0x4a, 0xcb, 0xb8, 0xed, 0xf0, 0x05, 0xfc,\n\t0xbb, 0x62, 0x9e, 0xef, 0x76, 0x0a, 0xb5, 0xfc, 0x1f, 0x40, 0xfd, 0xe9, 0x78, 0xb1, 0x5b, 0x92,\n\t0xdc, 0x53, 0xea, 0xef, 0x0b, 0xb0, 0xd5, 0x44, 0x65, 0x30, 0x86, 0x49, 0xd2, 0x93, 0x03, 0x14,\n\t0xb7, 0x37, 0x55, 0x83, 0x3f, 0x12, 0x26, 0x23, 0xcc, 0x5a, 0x29, 0x79, 0xd3, 0x07, 0xf2, 0x08,\n\t0xc8, 0xdd, 0x37, 0xf0, 0xdb, 0xd5, 0xb4, 0x65, 0xff, 0x56, 0x7f, 0x65, 0x9e, 0xb5, 0x95, 0x79,\n\t0xfa, 0xb0, 0x7d, 0x37, 0x4e, 0xbe, 0xdb, 0x11, 0xac, 0xfb, 0x19, 0x4c, 0x55, 0x8a, 0xe7, 0x3b,\n\t0x95, 0xfd, 0x39, 0x35, 0xbd, 0x58, 0x1c, 0x47, 0x3c, 0xf6, 0x15, 0x97, 0x22, 0xab, 0x3f, 0x4f,\n\t0x56, 0x99, 0xc3, 0x69, 0xe1, 0xfa, 0x21, 0xec, 0x37, 0x51, 0x59, 0x78, 0xe3, 0x8f, 0x86, 0xaa,\n\t0xc9, 0x92, 0xc6, 0x88, 0x0d, 0x70, 0xa9, 0xea, 0x2b, 0x38, 0x58, 0xc9, 0xc8, 0x03, 0x9d, 0xc1,\n\t0x4e, 0x7f, 0x3a, 0xa7, 0x01, 0x4b, 0xe8, 0x75, 0xc6, 0x58, 0xec, 0xbb, 0xd6, 0xff, 0x85, 0xbc,\n\t0x51, 0x79, 0xb5, 0xbe, 0xf8, 0xc9, 0xfa, 0x19, 0x00, 0x00, 0xff, 0xff, 0x37, 0x4c, 0x56, 0x38,\n\t0xf3, 0x04, 0x00, 0x00,\n}\n"
  },
  {
    "path": "vendor/google.golang.org/appengine/internal/base/api_base.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// source: google.golang.org/appengine/internal/base/api_base.proto\n\npackage base\n\nimport proto \"github.com/golang/protobuf/proto\"\nimport fmt \"fmt\"\nimport math \"math\"\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar _ = proto.Marshal\nvar _ = fmt.Errorf\nvar _ = math.Inf\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package\n\ntype StringProto struct {\n\tValue                *string  `protobuf:\"bytes,1,req,name=value\" json:\"value,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *StringProto) Reset()         { *m = StringProto{} }\nfunc (m *StringProto) String() string { return proto.CompactTextString(m) }\nfunc (*StringProto) ProtoMessage()    {}\nfunc (*StringProto) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_api_base_9d49f8792e0c1140, []int{0}\n}\nfunc (m *StringProto) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_StringProto.Unmarshal(m, b)\n}\nfunc (m *StringProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_StringProto.Marshal(b, m, deterministic)\n}\nfunc (dst *StringProto) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_StringProto.Merge(dst, src)\n}\nfunc (m *StringProto) XXX_Size() int {\n\treturn xxx_messageInfo_StringProto.Size(m)\n}\nfunc (m *StringProto) XXX_DiscardUnknown() {\n\txxx_messageInfo_StringProto.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_StringProto proto.InternalMessageInfo\n\nfunc (m *StringProto) GetValue() string {\n\tif m != nil && m.Value != nil {\n\t\treturn *m.Value\n\t}\n\treturn \"\"\n}\n\ntype Integer32Proto struct {\n\tValue                *int32   `protobuf:\"varint,1,req,name=value\" json:\"value,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *Integer32Proto) Reset()         { *m = Integer32Proto{} }\nfunc (m *Integer32Proto) String() string { return proto.CompactTextString(m) }\nfunc (*Integer32Proto) ProtoMessage()    {}\nfunc (*Integer32Proto) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_api_base_9d49f8792e0c1140, []int{1}\n}\nfunc (m *Integer32Proto) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_Integer32Proto.Unmarshal(m, b)\n}\nfunc (m *Integer32Proto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_Integer32Proto.Marshal(b, m, deterministic)\n}\nfunc (dst *Integer32Proto) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Integer32Proto.Merge(dst, src)\n}\nfunc (m *Integer32Proto) XXX_Size() int {\n\treturn xxx_messageInfo_Integer32Proto.Size(m)\n}\nfunc (m *Integer32Proto) XXX_DiscardUnknown() {\n\txxx_messageInfo_Integer32Proto.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Integer32Proto proto.InternalMessageInfo\n\nfunc (m *Integer32Proto) GetValue() int32 {\n\tif m != nil && m.Value != nil {\n\t\treturn *m.Value\n\t}\n\treturn 0\n}\n\ntype Integer64Proto struct {\n\tValue                *int64   `protobuf:\"varint,1,req,name=value\" json:\"value,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *Integer64Proto) Reset()         { *m = Integer64Proto{} }\nfunc (m *Integer64Proto) String() string { return proto.CompactTextString(m) }\nfunc (*Integer64Proto) ProtoMessage()    {}\nfunc (*Integer64Proto) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_api_base_9d49f8792e0c1140, []int{2}\n}\nfunc (m *Integer64Proto) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_Integer64Proto.Unmarshal(m, b)\n}\nfunc (m *Integer64Proto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_Integer64Proto.Marshal(b, m, deterministic)\n}\nfunc (dst *Integer64Proto) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Integer64Proto.Merge(dst, src)\n}\nfunc (m *Integer64Proto) XXX_Size() int {\n\treturn xxx_messageInfo_Integer64Proto.Size(m)\n}\nfunc (m *Integer64Proto) XXX_DiscardUnknown() {\n\txxx_messageInfo_Integer64Proto.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Integer64Proto proto.InternalMessageInfo\n\nfunc (m *Integer64Proto) GetValue() int64 {\n\tif m != nil && m.Value != nil {\n\t\treturn *m.Value\n\t}\n\treturn 0\n}\n\ntype BoolProto struct {\n\tValue                *bool    `protobuf:\"varint,1,req,name=value\" json:\"value,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *BoolProto) Reset()         { *m = BoolProto{} }\nfunc (m *BoolProto) String() string { return proto.CompactTextString(m) }\nfunc (*BoolProto) ProtoMessage()    {}\nfunc (*BoolProto) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_api_base_9d49f8792e0c1140, []int{3}\n}\nfunc (m *BoolProto) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_BoolProto.Unmarshal(m, b)\n}\nfunc (m *BoolProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_BoolProto.Marshal(b, m, deterministic)\n}\nfunc (dst *BoolProto) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_BoolProto.Merge(dst, src)\n}\nfunc (m *BoolProto) XXX_Size() int {\n\treturn xxx_messageInfo_BoolProto.Size(m)\n}\nfunc (m *BoolProto) XXX_DiscardUnknown() {\n\txxx_messageInfo_BoolProto.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_BoolProto proto.InternalMessageInfo\n\nfunc (m *BoolProto) GetValue() bool {\n\tif m != nil && m.Value != nil {\n\t\treturn *m.Value\n\t}\n\treturn false\n}\n\ntype DoubleProto struct {\n\tValue                *float64 `protobuf:\"fixed64,1,req,name=value\" json:\"value,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *DoubleProto) Reset()         { *m = DoubleProto{} }\nfunc (m *DoubleProto) String() string { return proto.CompactTextString(m) }\nfunc (*DoubleProto) ProtoMessage()    {}\nfunc (*DoubleProto) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_api_base_9d49f8792e0c1140, []int{4}\n}\nfunc (m *DoubleProto) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_DoubleProto.Unmarshal(m, b)\n}\nfunc (m *DoubleProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_DoubleProto.Marshal(b, m, deterministic)\n}\nfunc (dst *DoubleProto) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_DoubleProto.Merge(dst, src)\n}\nfunc (m *DoubleProto) XXX_Size() int {\n\treturn xxx_messageInfo_DoubleProto.Size(m)\n}\nfunc (m *DoubleProto) XXX_DiscardUnknown() {\n\txxx_messageInfo_DoubleProto.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_DoubleProto proto.InternalMessageInfo\n\nfunc (m *DoubleProto) GetValue() float64 {\n\tif m != nil && m.Value != nil {\n\t\treturn *m.Value\n\t}\n\treturn 0\n}\n\ntype BytesProto struct {\n\tValue                []byte   `protobuf:\"bytes,1,req,name=value\" json:\"value,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *BytesProto) Reset()         { *m = BytesProto{} }\nfunc (m *BytesProto) String() string { return proto.CompactTextString(m) }\nfunc (*BytesProto) ProtoMessage()    {}\nfunc (*BytesProto) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_api_base_9d49f8792e0c1140, []int{5}\n}\nfunc (m *BytesProto) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_BytesProto.Unmarshal(m, b)\n}\nfunc (m *BytesProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_BytesProto.Marshal(b, m, deterministic)\n}\nfunc (dst *BytesProto) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_BytesProto.Merge(dst, src)\n}\nfunc (m *BytesProto) XXX_Size() int {\n\treturn xxx_messageInfo_BytesProto.Size(m)\n}\nfunc (m *BytesProto) XXX_DiscardUnknown() {\n\txxx_messageInfo_BytesProto.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_BytesProto proto.InternalMessageInfo\n\nfunc (m *BytesProto) GetValue() []byte {\n\tif m != nil {\n\t\treturn m.Value\n\t}\n\treturn nil\n}\n\ntype VoidProto struct {\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *VoidProto) Reset()         { *m = VoidProto{} }\nfunc (m *VoidProto) String() string { return proto.CompactTextString(m) }\nfunc (*VoidProto) ProtoMessage()    {}\nfunc (*VoidProto) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_api_base_9d49f8792e0c1140, []int{6}\n}\nfunc (m *VoidProto) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_VoidProto.Unmarshal(m, b)\n}\nfunc (m *VoidProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_VoidProto.Marshal(b, m, deterministic)\n}\nfunc (dst *VoidProto) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_VoidProto.Merge(dst, src)\n}\nfunc (m *VoidProto) XXX_Size() int {\n\treturn xxx_messageInfo_VoidProto.Size(m)\n}\nfunc (m *VoidProto) XXX_DiscardUnknown() {\n\txxx_messageInfo_VoidProto.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_VoidProto proto.InternalMessageInfo\n\nfunc init() {\n\tproto.RegisterType((*StringProto)(nil), \"appengine.base.StringProto\")\n\tproto.RegisterType((*Integer32Proto)(nil), \"appengine.base.Integer32Proto\")\n\tproto.RegisterType((*Integer64Proto)(nil), \"appengine.base.Integer64Proto\")\n\tproto.RegisterType((*BoolProto)(nil), \"appengine.base.BoolProto\")\n\tproto.RegisterType((*DoubleProto)(nil), \"appengine.base.DoubleProto\")\n\tproto.RegisterType((*BytesProto)(nil), \"appengine.base.BytesProto\")\n\tproto.RegisterType((*VoidProto)(nil), \"appengine.base.VoidProto\")\n}\n\nfunc init() {\n\tproto.RegisterFile(\"google.golang.org/appengine/internal/base/api_base.proto\", fileDescriptor_api_base_9d49f8792e0c1140)\n}\n\nvar fileDescriptor_api_base_9d49f8792e0c1140 = []byte{\n\t// 199 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0xcf, 0x3f, 0x4b, 0xc6, 0x30,\n\t0x10, 0x06, 0x70, 0x5a, 0xad, 0xb4, 0x57, 0xe9, 0x20, 0x0e, 0x1d, 0xb5, 0x05, 0x71, 0x4a, 0x40,\n\t0x45, 0x9c, 0x83, 0x8b, 0x9b, 0x28, 0x38, 0xb8, 0x48, 0x8a, 0xc7, 0x11, 0x08, 0xb9, 0x90, 0xa6,\n\t0x82, 0xdf, 0x5e, 0xda, 0xd2, 0xfa, 0xc2, 0x9b, 0xed, 0xfe, 0xfc, 0xe0, 0xe1, 0x81, 0x27, 0x62,\n\t0x26, 0x8b, 0x82, 0xd8, 0x6a, 0x47, 0x82, 0x03, 0x49, 0xed, 0x3d, 0x3a, 0x32, 0x0e, 0xa5, 0x71,\n\t0x11, 0x83, 0xd3, 0x56, 0x0e, 0x7a, 0x44, 0xa9, 0xbd, 0xf9, 0x9a, 0x07, 0xe1, 0x03, 0x47, 0xbe,\n\t0x68, 0x76, 0x27, 0xe6, 0x6b, 0xd7, 0x43, 0xfd, 0x1e, 0x83, 0x71, 0xf4, 0xba, 0xbc, 0x2f, 0xa1,\n\t0xf8, 0xd1, 0x76, 0xc2, 0x36, 0xbb, 0xca, 0x6f, 0xab, 0xb7, 0x75, 0xe9, 0x6e, 0xa0, 0x79, 0x71,\n\t0x11, 0x09, 0xc3, 0xfd, 0x5d, 0xc2, 0x15, 0xc7, 0xee, 0xf1, 0x21, 0xe1, 0x4e, 0x36, 0x77, 0x0d,\n\t0x95, 0x62, 0xb6, 0x09, 0x52, 0x6e, 0xa4, 0x87, 0xfa, 0x99, 0xa7, 0xc1, 0x62, 0x02, 0x65, 0xff,\n\t0x79, 0xa0, 0x7e, 0x23, 0x8e, 0xab, 0x69, 0x0f, 0xcd, 0xb9, 0xca, 0xcb, 0xdd, 0xd5, 0x50, 0x7d,\n\t0xb0, 0xf9, 0x5e, 0x98, 0x3a, 0xfb, 0x3c, 0x9d, 0x9b, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0xba,\n\t0x37, 0x25, 0xea, 0x44, 0x01, 0x00, 0x00,\n}\n"
  },
  {
    "path": "vendor/google.golang.org/appengine/internal/datastore/datastore_v3.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// source: google.golang.org/appengine/internal/datastore/datastore_v3.proto\n\npackage datastore\n\nimport proto \"github.com/golang/protobuf/proto\"\nimport fmt \"fmt\"\nimport math \"math\"\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar _ = proto.Marshal\nvar _ = fmt.Errorf\nvar _ = math.Inf\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package\n\ntype Property_Meaning int32\n\nconst (\n\tProperty_NO_MEANING       Property_Meaning = 0\n\tProperty_BLOB             Property_Meaning = 14\n\tProperty_TEXT             Property_Meaning = 15\n\tProperty_BYTESTRING       Property_Meaning = 16\n\tProperty_ATOM_CATEGORY    Property_Meaning = 1\n\tProperty_ATOM_LINK        Property_Meaning = 2\n\tProperty_ATOM_TITLE       Property_Meaning = 3\n\tProperty_ATOM_CONTENT     Property_Meaning = 4\n\tProperty_ATOM_SUMMARY     Property_Meaning = 5\n\tProperty_ATOM_AUTHOR      Property_Meaning = 6\n\tProperty_GD_WHEN          Property_Meaning = 7\n\tProperty_GD_EMAIL         Property_Meaning = 8\n\tProperty_GEORSS_POINT     Property_Meaning = 9\n\tProperty_GD_IM            Property_Meaning = 10\n\tProperty_GD_PHONENUMBER   Property_Meaning = 11\n\tProperty_GD_POSTALADDRESS Property_Meaning = 12\n\tProperty_GD_RATING        Property_Meaning = 13\n\tProperty_BLOBKEY          Property_Meaning = 17\n\tProperty_ENTITY_PROTO     Property_Meaning = 19\n\tProperty_INDEX_VALUE      Property_Meaning = 18\n)\n\nvar Property_Meaning_name = map[int32]string{\n\t0:  \"NO_MEANING\",\n\t14: \"BLOB\",\n\t15: \"TEXT\",\n\t16: \"BYTESTRING\",\n\t1:  \"ATOM_CATEGORY\",\n\t2:  \"ATOM_LINK\",\n\t3:  \"ATOM_TITLE\",\n\t4:  \"ATOM_CONTENT\",\n\t5:  \"ATOM_SUMMARY\",\n\t6:  \"ATOM_AUTHOR\",\n\t7:  \"GD_WHEN\",\n\t8:  \"GD_EMAIL\",\n\t9:  \"GEORSS_POINT\",\n\t10: \"GD_IM\",\n\t11: \"GD_PHONENUMBER\",\n\t12: \"GD_POSTALADDRESS\",\n\t13: \"GD_RATING\",\n\t17: \"BLOBKEY\",\n\t19: \"ENTITY_PROTO\",\n\t18: \"INDEX_VALUE\",\n}\nvar Property_Meaning_value = map[string]int32{\n\t\"NO_MEANING\":       0,\n\t\"BLOB\":             14,\n\t\"TEXT\":             15,\n\t\"BYTESTRING\":       16,\n\t\"ATOM_CATEGORY\":    1,\n\t\"ATOM_LINK\":        2,\n\t\"ATOM_TITLE\":       3,\n\t\"ATOM_CONTENT\":     4,\n\t\"ATOM_SUMMARY\":     5,\n\t\"ATOM_AUTHOR\":      6,\n\t\"GD_WHEN\":          7,\n\t\"GD_EMAIL\":         8,\n\t\"GEORSS_POINT\":     9,\n\t\"GD_IM\":            10,\n\t\"GD_PHONENUMBER\":   11,\n\t\"GD_POSTALADDRESS\": 12,\n\t\"GD_RATING\":        13,\n\t\"BLOBKEY\":          17,\n\t\"ENTITY_PROTO\":     19,\n\t\"INDEX_VALUE\":      18,\n}\n\nfunc (x Property_Meaning) Enum() *Property_Meaning {\n\tp := new(Property_Meaning)\n\t*p = x\n\treturn p\n}\nfunc (x Property_Meaning) String() string {\n\treturn proto.EnumName(Property_Meaning_name, int32(x))\n}\nfunc (x *Property_Meaning) UnmarshalJSON(data []byte) error {\n\tvalue, err := proto.UnmarshalJSONEnum(Property_Meaning_value, data, \"Property_Meaning\")\n\tif err != nil {\n\t\treturn err\n\t}\n\t*x = Property_Meaning(value)\n\treturn nil\n}\nfunc (Property_Meaning) EnumDescriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{2, 0}\n}\n\ntype Property_FtsTokenizationOption int32\n\nconst (\n\tProperty_HTML Property_FtsTokenizationOption = 1\n\tProperty_ATOM Property_FtsTokenizationOption = 2\n)\n\nvar Property_FtsTokenizationOption_name = map[int32]string{\n\t1: \"HTML\",\n\t2: \"ATOM\",\n}\nvar Property_FtsTokenizationOption_value = map[string]int32{\n\t\"HTML\": 1,\n\t\"ATOM\": 2,\n}\n\nfunc (x Property_FtsTokenizationOption) Enum() *Property_FtsTokenizationOption {\n\tp := new(Property_FtsTokenizationOption)\n\t*p = x\n\treturn p\n}\nfunc (x Property_FtsTokenizationOption) String() string {\n\treturn proto.EnumName(Property_FtsTokenizationOption_name, int32(x))\n}\nfunc (x *Property_FtsTokenizationOption) UnmarshalJSON(data []byte) error {\n\tvalue, err := proto.UnmarshalJSONEnum(Property_FtsTokenizationOption_value, data, \"Property_FtsTokenizationOption\")\n\tif err != nil {\n\t\treturn err\n\t}\n\t*x = Property_FtsTokenizationOption(value)\n\treturn nil\n}\nfunc (Property_FtsTokenizationOption) EnumDescriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{2, 1}\n}\n\ntype EntityProto_Kind int32\n\nconst (\n\tEntityProto_GD_CONTACT EntityProto_Kind = 1\n\tEntityProto_GD_EVENT   EntityProto_Kind = 2\n\tEntityProto_GD_MESSAGE EntityProto_Kind = 3\n)\n\nvar EntityProto_Kind_name = map[int32]string{\n\t1: \"GD_CONTACT\",\n\t2: \"GD_EVENT\",\n\t3: \"GD_MESSAGE\",\n}\nvar EntityProto_Kind_value = map[string]int32{\n\t\"GD_CONTACT\": 1,\n\t\"GD_EVENT\":   2,\n\t\"GD_MESSAGE\": 3,\n}\n\nfunc (x EntityProto_Kind) Enum() *EntityProto_Kind {\n\tp := new(EntityProto_Kind)\n\t*p = x\n\treturn p\n}\nfunc (x EntityProto_Kind) String() string {\n\treturn proto.EnumName(EntityProto_Kind_name, int32(x))\n}\nfunc (x *EntityProto_Kind) UnmarshalJSON(data []byte) error {\n\tvalue, err := proto.UnmarshalJSONEnum(EntityProto_Kind_value, data, \"EntityProto_Kind\")\n\tif err != nil {\n\t\treturn err\n\t}\n\t*x = EntityProto_Kind(value)\n\treturn nil\n}\nfunc (EntityProto_Kind) EnumDescriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{6, 0}\n}\n\ntype Index_Property_Direction int32\n\nconst (\n\tIndex_Property_ASCENDING  Index_Property_Direction = 1\n\tIndex_Property_DESCENDING Index_Property_Direction = 2\n)\n\nvar Index_Property_Direction_name = map[int32]string{\n\t1: \"ASCENDING\",\n\t2: \"DESCENDING\",\n}\nvar Index_Property_Direction_value = map[string]int32{\n\t\"ASCENDING\":  1,\n\t\"DESCENDING\": 2,\n}\n\nfunc (x Index_Property_Direction) Enum() *Index_Property_Direction {\n\tp := new(Index_Property_Direction)\n\t*p = x\n\treturn p\n}\nfunc (x Index_Property_Direction) String() string {\n\treturn proto.EnumName(Index_Property_Direction_name, int32(x))\n}\nfunc (x *Index_Property_Direction) UnmarshalJSON(data []byte) error {\n\tvalue, err := proto.UnmarshalJSONEnum(Index_Property_Direction_value, data, \"Index_Property_Direction\")\n\tif err != nil {\n\t\treturn err\n\t}\n\t*x = Index_Property_Direction(value)\n\treturn nil\n}\nfunc (Index_Property_Direction) EnumDescriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{8, 0, 0}\n}\n\ntype CompositeIndex_State int32\n\nconst (\n\tCompositeIndex_WRITE_ONLY CompositeIndex_State = 1\n\tCompositeIndex_READ_WRITE CompositeIndex_State = 2\n\tCompositeIndex_DELETED    CompositeIndex_State = 3\n\tCompositeIndex_ERROR      CompositeIndex_State = 4\n)\n\nvar CompositeIndex_State_name = map[int32]string{\n\t1: \"WRITE_ONLY\",\n\t2: \"READ_WRITE\",\n\t3: \"DELETED\",\n\t4: \"ERROR\",\n}\nvar CompositeIndex_State_value = map[string]int32{\n\t\"WRITE_ONLY\": 1,\n\t\"READ_WRITE\": 2,\n\t\"DELETED\":    3,\n\t\"ERROR\":      4,\n}\n\nfunc (x CompositeIndex_State) Enum() *CompositeIndex_State {\n\tp := new(CompositeIndex_State)\n\t*p = x\n\treturn p\n}\nfunc (x CompositeIndex_State) String() string {\n\treturn proto.EnumName(CompositeIndex_State_name, int32(x))\n}\nfunc (x *CompositeIndex_State) UnmarshalJSON(data []byte) error {\n\tvalue, err := proto.UnmarshalJSONEnum(CompositeIndex_State_value, data, \"CompositeIndex_State\")\n\tif err != nil {\n\t\treturn err\n\t}\n\t*x = CompositeIndex_State(value)\n\treturn nil\n}\nfunc (CompositeIndex_State) EnumDescriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{9, 0}\n}\n\ntype Snapshot_Status int32\n\nconst (\n\tSnapshot_INACTIVE Snapshot_Status = 0\n\tSnapshot_ACTIVE   Snapshot_Status = 1\n)\n\nvar Snapshot_Status_name = map[int32]string{\n\t0: \"INACTIVE\",\n\t1: \"ACTIVE\",\n}\nvar Snapshot_Status_value = map[string]int32{\n\t\"INACTIVE\": 0,\n\t\"ACTIVE\":   1,\n}\n\nfunc (x Snapshot_Status) Enum() *Snapshot_Status {\n\tp := new(Snapshot_Status)\n\t*p = x\n\treturn p\n}\nfunc (x Snapshot_Status) String() string {\n\treturn proto.EnumName(Snapshot_Status_name, int32(x))\n}\nfunc (x *Snapshot_Status) UnmarshalJSON(data []byte) error {\n\tvalue, err := proto.UnmarshalJSONEnum(Snapshot_Status_value, data, \"Snapshot_Status\")\n\tif err != nil {\n\t\treturn err\n\t}\n\t*x = Snapshot_Status(value)\n\treturn nil\n}\nfunc (Snapshot_Status) EnumDescriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{12, 0}\n}\n\ntype Query_Hint int32\n\nconst (\n\tQuery_ORDER_FIRST    Query_Hint = 1\n\tQuery_ANCESTOR_FIRST Query_Hint = 2\n\tQuery_FILTER_FIRST   Query_Hint = 3\n)\n\nvar Query_Hint_name = map[int32]string{\n\t1: \"ORDER_FIRST\",\n\t2: \"ANCESTOR_FIRST\",\n\t3: \"FILTER_FIRST\",\n}\nvar Query_Hint_value = map[string]int32{\n\t\"ORDER_FIRST\":    1,\n\t\"ANCESTOR_FIRST\": 2,\n\t\"FILTER_FIRST\":   3,\n}\n\nfunc (x Query_Hint) Enum() *Query_Hint {\n\tp := new(Query_Hint)\n\t*p = x\n\treturn p\n}\nfunc (x Query_Hint) String() string {\n\treturn proto.EnumName(Query_Hint_name, int32(x))\n}\nfunc (x *Query_Hint) UnmarshalJSON(data []byte) error {\n\tvalue, err := proto.UnmarshalJSONEnum(Query_Hint_value, data, \"Query_Hint\")\n\tif err != nil {\n\t\treturn err\n\t}\n\t*x = Query_Hint(value)\n\treturn nil\n}\nfunc (Query_Hint) EnumDescriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{15, 0}\n}\n\ntype Query_Filter_Operator int32\n\nconst (\n\tQuery_Filter_LESS_THAN             Query_Filter_Operator = 1\n\tQuery_Filter_LESS_THAN_OR_EQUAL    Query_Filter_Operator = 2\n\tQuery_Filter_GREATER_THAN          Query_Filter_Operator = 3\n\tQuery_Filter_GREATER_THAN_OR_EQUAL Query_Filter_Operator = 4\n\tQuery_Filter_EQUAL                 Query_Filter_Operator = 5\n\tQuery_Filter_IN                    Query_Filter_Operator = 6\n\tQuery_Filter_EXISTS                Query_Filter_Operator = 7\n)\n\nvar Query_Filter_Operator_name = map[int32]string{\n\t1: \"LESS_THAN\",\n\t2: \"LESS_THAN_OR_EQUAL\",\n\t3: \"GREATER_THAN\",\n\t4: \"GREATER_THAN_OR_EQUAL\",\n\t5: \"EQUAL\",\n\t6: \"IN\",\n\t7: \"EXISTS\",\n}\nvar Query_Filter_Operator_value = map[string]int32{\n\t\"LESS_THAN\":             1,\n\t\"LESS_THAN_OR_EQUAL\":    2,\n\t\"GREATER_THAN\":          3,\n\t\"GREATER_THAN_OR_EQUAL\": 4,\n\t\"EQUAL\":                 5,\n\t\"IN\":                    6,\n\t\"EXISTS\":                7,\n}\n\nfunc (x Query_Filter_Operator) Enum() *Query_Filter_Operator {\n\tp := new(Query_Filter_Operator)\n\t*p = x\n\treturn p\n}\nfunc (x Query_Filter_Operator) String() string {\n\treturn proto.EnumName(Query_Filter_Operator_name, int32(x))\n}\nfunc (x *Query_Filter_Operator) UnmarshalJSON(data []byte) error {\n\tvalue, err := proto.UnmarshalJSONEnum(Query_Filter_Operator_value, data, \"Query_Filter_Operator\")\n\tif err != nil {\n\t\treturn err\n\t}\n\t*x = Query_Filter_Operator(value)\n\treturn nil\n}\nfunc (Query_Filter_Operator) EnumDescriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{15, 0, 0}\n}\n\ntype Query_Order_Direction int32\n\nconst (\n\tQuery_Order_ASCENDING  Query_Order_Direction = 1\n\tQuery_Order_DESCENDING Query_Order_Direction = 2\n)\n\nvar Query_Order_Direction_name = map[int32]string{\n\t1: \"ASCENDING\",\n\t2: \"DESCENDING\",\n}\nvar Query_Order_Direction_value = map[string]int32{\n\t\"ASCENDING\":  1,\n\t\"DESCENDING\": 2,\n}\n\nfunc (x Query_Order_Direction) Enum() *Query_Order_Direction {\n\tp := new(Query_Order_Direction)\n\t*p = x\n\treturn p\n}\nfunc (x Query_Order_Direction) String() string {\n\treturn proto.EnumName(Query_Order_Direction_name, int32(x))\n}\nfunc (x *Query_Order_Direction) UnmarshalJSON(data []byte) error {\n\tvalue, err := proto.UnmarshalJSONEnum(Query_Order_Direction_value, data, \"Query_Order_Direction\")\n\tif err != nil {\n\t\treturn err\n\t}\n\t*x = Query_Order_Direction(value)\n\treturn nil\n}\nfunc (Query_Order_Direction) EnumDescriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{15, 1, 0}\n}\n\ntype Error_ErrorCode int32\n\nconst (\n\tError_BAD_REQUEST                  Error_ErrorCode = 1\n\tError_CONCURRENT_TRANSACTION       Error_ErrorCode = 2\n\tError_INTERNAL_ERROR               Error_ErrorCode = 3\n\tError_NEED_INDEX                   Error_ErrorCode = 4\n\tError_TIMEOUT                      Error_ErrorCode = 5\n\tError_PERMISSION_DENIED            Error_ErrorCode = 6\n\tError_BIGTABLE_ERROR               Error_ErrorCode = 7\n\tError_COMMITTED_BUT_STILL_APPLYING Error_ErrorCode = 8\n\tError_CAPABILITY_DISABLED          Error_ErrorCode = 9\n\tError_TRY_ALTERNATE_BACKEND        Error_ErrorCode = 10\n\tError_SAFE_TIME_TOO_OLD            Error_ErrorCode = 11\n)\n\nvar Error_ErrorCode_name = map[int32]string{\n\t1:  \"BAD_REQUEST\",\n\t2:  \"CONCURRENT_TRANSACTION\",\n\t3:  \"INTERNAL_ERROR\",\n\t4:  \"NEED_INDEX\",\n\t5:  \"TIMEOUT\",\n\t6:  \"PERMISSION_DENIED\",\n\t7:  \"BIGTABLE_ERROR\",\n\t8:  \"COMMITTED_BUT_STILL_APPLYING\",\n\t9:  \"CAPABILITY_DISABLED\",\n\t10: \"TRY_ALTERNATE_BACKEND\",\n\t11: \"SAFE_TIME_TOO_OLD\",\n}\nvar Error_ErrorCode_value = map[string]int32{\n\t\"BAD_REQUEST\":                  1,\n\t\"CONCURRENT_TRANSACTION\":       2,\n\t\"INTERNAL_ERROR\":               3,\n\t\"NEED_INDEX\":                   4,\n\t\"TIMEOUT\":                      5,\n\t\"PERMISSION_DENIED\":            6,\n\t\"BIGTABLE_ERROR\":               7,\n\t\"COMMITTED_BUT_STILL_APPLYING\": 8,\n\t\"CAPABILITY_DISABLED\":          9,\n\t\"TRY_ALTERNATE_BACKEND\":        10,\n\t\"SAFE_TIME_TOO_OLD\":            11,\n}\n\nfunc (x Error_ErrorCode) Enum() *Error_ErrorCode {\n\tp := new(Error_ErrorCode)\n\t*p = x\n\treturn p\n}\nfunc (x Error_ErrorCode) String() string {\n\treturn proto.EnumName(Error_ErrorCode_name, int32(x))\n}\nfunc (x *Error_ErrorCode) UnmarshalJSON(data []byte) error {\n\tvalue, err := proto.UnmarshalJSONEnum(Error_ErrorCode_value, data, \"Error_ErrorCode\")\n\tif err != nil {\n\t\treturn err\n\t}\n\t*x = Error_ErrorCode(value)\n\treturn nil\n}\nfunc (Error_ErrorCode) EnumDescriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{19, 0}\n}\n\ntype PutRequest_AutoIdPolicy int32\n\nconst (\n\tPutRequest_CURRENT    PutRequest_AutoIdPolicy = 0\n\tPutRequest_SEQUENTIAL PutRequest_AutoIdPolicy = 1\n)\n\nvar PutRequest_AutoIdPolicy_name = map[int32]string{\n\t0: \"CURRENT\",\n\t1: \"SEQUENTIAL\",\n}\nvar PutRequest_AutoIdPolicy_value = map[string]int32{\n\t\"CURRENT\":    0,\n\t\"SEQUENTIAL\": 1,\n}\n\nfunc (x PutRequest_AutoIdPolicy) Enum() *PutRequest_AutoIdPolicy {\n\tp := new(PutRequest_AutoIdPolicy)\n\t*p = x\n\treturn p\n}\nfunc (x PutRequest_AutoIdPolicy) String() string {\n\treturn proto.EnumName(PutRequest_AutoIdPolicy_name, int32(x))\n}\nfunc (x *PutRequest_AutoIdPolicy) UnmarshalJSON(data []byte) error {\n\tvalue, err := proto.UnmarshalJSONEnum(PutRequest_AutoIdPolicy_value, data, \"PutRequest_AutoIdPolicy\")\n\tif err != nil {\n\t\treturn err\n\t}\n\t*x = PutRequest_AutoIdPolicy(value)\n\treturn nil\n}\nfunc (PutRequest_AutoIdPolicy) EnumDescriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{23, 0}\n}\n\ntype BeginTransactionRequest_TransactionMode int32\n\nconst (\n\tBeginTransactionRequest_UNKNOWN    BeginTransactionRequest_TransactionMode = 0\n\tBeginTransactionRequest_READ_ONLY  BeginTransactionRequest_TransactionMode = 1\n\tBeginTransactionRequest_READ_WRITE BeginTransactionRequest_TransactionMode = 2\n)\n\nvar BeginTransactionRequest_TransactionMode_name = map[int32]string{\n\t0: \"UNKNOWN\",\n\t1: \"READ_ONLY\",\n\t2: \"READ_WRITE\",\n}\nvar BeginTransactionRequest_TransactionMode_value = map[string]int32{\n\t\"UNKNOWN\":    0,\n\t\"READ_ONLY\":  1,\n\t\"READ_WRITE\": 2,\n}\n\nfunc (x BeginTransactionRequest_TransactionMode) Enum() *BeginTransactionRequest_TransactionMode {\n\tp := new(BeginTransactionRequest_TransactionMode)\n\t*p = x\n\treturn p\n}\nfunc (x BeginTransactionRequest_TransactionMode) String() string {\n\treturn proto.EnumName(BeginTransactionRequest_TransactionMode_name, int32(x))\n}\nfunc (x *BeginTransactionRequest_TransactionMode) UnmarshalJSON(data []byte) error {\n\tvalue, err := proto.UnmarshalJSONEnum(BeginTransactionRequest_TransactionMode_value, data, \"BeginTransactionRequest_TransactionMode\")\n\tif err != nil {\n\t\treturn err\n\t}\n\t*x = BeginTransactionRequest_TransactionMode(value)\n\treturn nil\n}\nfunc (BeginTransactionRequest_TransactionMode) EnumDescriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{36, 0}\n}\n\ntype Action struct {\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *Action) Reset()         { *m = Action{} }\nfunc (m *Action) String() string { return proto.CompactTextString(m) }\nfunc (*Action) ProtoMessage()    {}\nfunc (*Action) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{0}\n}\nfunc (m *Action) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_Action.Unmarshal(m, b)\n}\nfunc (m *Action) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_Action.Marshal(b, m, deterministic)\n}\nfunc (dst *Action) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Action.Merge(dst, src)\n}\nfunc (m *Action) XXX_Size() int {\n\treturn xxx_messageInfo_Action.Size(m)\n}\nfunc (m *Action) XXX_DiscardUnknown() {\n\txxx_messageInfo_Action.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Action proto.InternalMessageInfo\n\ntype PropertyValue struct {\n\tInt64Value           *int64                        `protobuf:\"varint,1,opt,name=int64Value\" json:\"int64Value,omitempty\"`\n\tBooleanValue         *bool                         `protobuf:\"varint,2,opt,name=booleanValue\" json:\"booleanValue,omitempty\"`\n\tStringValue          *string                       `protobuf:\"bytes,3,opt,name=stringValue\" json:\"stringValue,omitempty\"`\n\tDoubleValue          *float64                      `protobuf:\"fixed64,4,opt,name=doubleValue\" json:\"doubleValue,omitempty\"`\n\tPointvalue           *PropertyValue_PointValue     `protobuf:\"group,5,opt,name=PointValue,json=pointvalue\" json:\"pointvalue,omitempty\"`\n\tUservalue            *PropertyValue_UserValue      `protobuf:\"group,8,opt,name=UserValue,json=uservalue\" json:\"uservalue,omitempty\"`\n\tReferencevalue       *PropertyValue_ReferenceValue `protobuf:\"group,12,opt,name=ReferenceValue,json=referencevalue\" json:\"referencevalue,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}                      `json:\"-\"`\n\tXXX_unrecognized     []byte                        `json:\"-\"`\n\tXXX_sizecache        int32                         `json:\"-\"`\n}\n\nfunc (m *PropertyValue) Reset()         { *m = PropertyValue{} }\nfunc (m *PropertyValue) String() string { return proto.CompactTextString(m) }\nfunc (*PropertyValue) ProtoMessage()    {}\nfunc (*PropertyValue) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{1}\n}\nfunc (m *PropertyValue) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_PropertyValue.Unmarshal(m, b)\n}\nfunc (m *PropertyValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_PropertyValue.Marshal(b, m, deterministic)\n}\nfunc (dst *PropertyValue) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_PropertyValue.Merge(dst, src)\n}\nfunc (m *PropertyValue) XXX_Size() int {\n\treturn xxx_messageInfo_PropertyValue.Size(m)\n}\nfunc (m *PropertyValue) XXX_DiscardUnknown() {\n\txxx_messageInfo_PropertyValue.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_PropertyValue proto.InternalMessageInfo\n\nfunc (m *PropertyValue) GetInt64Value() int64 {\n\tif m != nil && m.Int64Value != nil {\n\t\treturn *m.Int64Value\n\t}\n\treturn 0\n}\n\nfunc (m *PropertyValue) GetBooleanValue() bool {\n\tif m != nil && m.BooleanValue != nil {\n\t\treturn *m.BooleanValue\n\t}\n\treturn false\n}\n\nfunc (m *PropertyValue) GetStringValue() string {\n\tif m != nil && m.StringValue != nil {\n\t\treturn *m.StringValue\n\t}\n\treturn \"\"\n}\n\nfunc (m *PropertyValue) GetDoubleValue() float64 {\n\tif m != nil && m.DoubleValue != nil {\n\t\treturn *m.DoubleValue\n\t}\n\treturn 0\n}\n\nfunc (m *PropertyValue) GetPointvalue() *PropertyValue_PointValue {\n\tif m != nil {\n\t\treturn m.Pointvalue\n\t}\n\treturn nil\n}\n\nfunc (m *PropertyValue) GetUservalue() *PropertyValue_UserValue {\n\tif m != nil {\n\t\treturn m.Uservalue\n\t}\n\treturn nil\n}\n\nfunc (m *PropertyValue) GetReferencevalue() *PropertyValue_ReferenceValue {\n\tif m != nil {\n\t\treturn m.Referencevalue\n\t}\n\treturn nil\n}\n\ntype PropertyValue_PointValue struct {\n\tX                    *float64 `protobuf:\"fixed64,6,req,name=x\" json:\"x,omitempty\"`\n\tY                    *float64 `protobuf:\"fixed64,7,req,name=y\" json:\"y,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *PropertyValue_PointValue) Reset()         { *m = PropertyValue_PointValue{} }\nfunc (m *PropertyValue_PointValue) String() string { return proto.CompactTextString(m) }\nfunc (*PropertyValue_PointValue) ProtoMessage()    {}\nfunc (*PropertyValue_PointValue) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{1, 0}\n}\nfunc (m *PropertyValue_PointValue) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_PropertyValue_PointValue.Unmarshal(m, b)\n}\nfunc (m *PropertyValue_PointValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_PropertyValue_PointValue.Marshal(b, m, deterministic)\n}\nfunc (dst *PropertyValue_PointValue) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_PropertyValue_PointValue.Merge(dst, src)\n}\nfunc (m *PropertyValue_PointValue) XXX_Size() int {\n\treturn xxx_messageInfo_PropertyValue_PointValue.Size(m)\n}\nfunc (m *PropertyValue_PointValue) XXX_DiscardUnknown() {\n\txxx_messageInfo_PropertyValue_PointValue.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_PropertyValue_PointValue proto.InternalMessageInfo\n\nfunc (m *PropertyValue_PointValue) GetX() float64 {\n\tif m != nil && m.X != nil {\n\t\treturn *m.X\n\t}\n\treturn 0\n}\n\nfunc (m *PropertyValue_PointValue) GetY() float64 {\n\tif m != nil && m.Y != nil {\n\t\treturn *m.Y\n\t}\n\treturn 0\n}\n\ntype PropertyValue_UserValue struct {\n\tEmail                *string  `protobuf:\"bytes,9,req,name=email\" json:\"email,omitempty\"`\n\tAuthDomain           *string  `protobuf:\"bytes,10,req,name=auth_domain,json=authDomain\" json:\"auth_domain,omitempty\"`\n\tNickname             *string  `protobuf:\"bytes,11,opt,name=nickname\" json:\"nickname,omitempty\"`\n\tFederatedIdentity    *string  `protobuf:\"bytes,21,opt,name=federated_identity,json=federatedIdentity\" json:\"federated_identity,omitempty\"`\n\tFederatedProvider    *string  `protobuf:\"bytes,22,opt,name=federated_provider,json=federatedProvider\" json:\"federated_provider,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *PropertyValue_UserValue) Reset()         { *m = PropertyValue_UserValue{} }\nfunc (m *PropertyValue_UserValue) String() string { return proto.CompactTextString(m) }\nfunc (*PropertyValue_UserValue) ProtoMessage()    {}\nfunc (*PropertyValue_UserValue) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{1, 1}\n}\nfunc (m *PropertyValue_UserValue) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_PropertyValue_UserValue.Unmarshal(m, b)\n}\nfunc (m *PropertyValue_UserValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_PropertyValue_UserValue.Marshal(b, m, deterministic)\n}\nfunc (dst *PropertyValue_UserValue) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_PropertyValue_UserValue.Merge(dst, src)\n}\nfunc (m *PropertyValue_UserValue) XXX_Size() int {\n\treturn xxx_messageInfo_PropertyValue_UserValue.Size(m)\n}\nfunc (m *PropertyValue_UserValue) XXX_DiscardUnknown() {\n\txxx_messageInfo_PropertyValue_UserValue.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_PropertyValue_UserValue proto.InternalMessageInfo\n\nfunc (m *PropertyValue_UserValue) GetEmail() string {\n\tif m != nil && m.Email != nil {\n\t\treturn *m.Email\n\t}\n\treturn \"\"\n}\n\nfunc (m *PropertyValue_UserValue) GetAuthDomain() string {\n\tif m != nil && m.AuthDomain != nil {\n\t\treturn *m.AuthDomain\n\t}\n\treturn \"\"\n}\n\nfunc (m *PropertyValue_UserValue) GetNickname() string {\n\tif m != nil && m.Nickname != nil {\n\t\treturn *m.Nickname\n\t}\n\treturn \"\"\n}\n\nfunc (m *PropertyValue_UserValue) GetFederatedIdentity() string {\n\tif m != nil && m.FederatedIdentity != nil {\n\t\treturn *m.FederatedIdentity\n\t}\n\treturn \"\"\n}\n\nfunc (m *PropertyValue_UserValue) GetFederatedProvider() string {\n\tif m != nil && m.FederatedProvider != nil {\n\t\treturn *m.FederatedProvider\n\t}\n\treturn \"\"\n}\n\ntype PropertyValue_ReferenceValue struct {\n\tApp                  *string                                     `protobuf:\"bytes,13,req,name=app\" json:\"app,omitempty\"`\n\tNameSpace            *string                                     `protobuf:\"bytes,20,opt,name=name_space,json=nameSpace\" json:\"name_space,omitempty\"`\n\tPathelement          []*PropertyValue_ReferenceValue_PathElement `protobuf:\"group,14,rep,name=PathElement,json=pathelement\" json:\"pathelement,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}                                    `json:\"-\"`\n\tXXX_unrecognized     []byte                                      `json:\"-\"`\n\tXXX_sizecache        int32                                       `json:\"-\"`\n}\n\nfunc (m *PropertyValue_ReferenceValue) Reset()         { *m = PropertyValue_ReferenceValue{} }\nfunc (m *PropertyValue_ReferenceValue) String() string { return proto.CompactTextString(m) }\nfunc (*PropertyValue_ReferenceValue) ProtoMessage()    {}\nfunc (*PropertyValue_ReferenceValue) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{1, 2}\n}\nfunc (m *PropertyValue_ReferenceValue) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_PropertyValue_ReferenceValue.Unmarshal(m, b)\n}\nfunc (m *PropertyValue_ReferenceValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_PropertyValue_ReferenceValue.Marshal(b, m, deterministic)\n}\nfunc (dst *PropertyValue_ReferenceValue) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_PropertyValue_ReferenceValue.Merge(dst, src)\n}\nfunc (m *PropertyValue_ReferenceValue) XXX_Size() int {\n\treturn xxx_messageInfo_PropertyValue_ReferenceValue.Size(m)\n}\nfunc (m *PropertyValue_ReferenceValue) XXX_DiscardUnknown() {\n\txxx_messageInfo_PropertyValue_ReferenceValue.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_PropertyValue_ReferenceValue proto.InternalMessageInfo\n\nfunc (m *PropertyValue_ReferenceValue) GetApp() string {\n\tif m != nil && m.App != nil {\n\t\treturn *m.App\n\t}\n\treturn \"\"\n}\n\nfunc (m *PropertyValue_ReferenceValue) GetNameSpace() string {\n\tif m != nil && m.NameSpace != nil {\n\t\treturn *m.NameSpace\n\t}\n\treturn \"\"\n}\n\nfunc (m *PropertyValue_ReferenceValue) GetPathelement() []*PropertyValue_ReferenceValue_PathElement {\n\tif m != nil {\n\t\treturn m.Pathelement\n\t}\n\treturn nil\n}\n\ntype PropertyValue_ReferenceValue_PathElement struct {\n\tType                 *string  `protobuf:\"bytes,15,req,name=type\" json:\"type,omitempty\"`\n\tId                   *int64   `protobuf:\"varint,16,opt,name=id\" json:\"id,omitempty\"`\n\tName                 *string  `protobuf:\"bytes,17,opt,name=name\" json:\"name,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *PropertyValue_ReferenceValue_PathElement) Reset() {\n\t*m = PropertyValue_ReferenceValue_PathElement{}\n}\nfunc (m *PropertyValue_ReferenceValue_PathElement) String() string { return proto.CompactTextString(m) }\nfunc (*PropertyValue_ReferenceValue_PathElement) ProtoMessage()    {}\nfunc (*PropertyValue_ReferenceValue_PathElement) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{1, 2, 0}\n}\nfunc (m *PropertyValue_ReferenceValue_PathElement) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_PropertyValue_ReferenceValue_PathElement.Unmarshal(m, b)\n}\nfunc (m *PropertyValue_ReferenceValue_PathElement) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_PropertyValue_ReferenceValue_PathElement.Marshal(b, m, deterministic)\n}\nfunc (dst *PropertyValue_ReferenceValue_PathElement) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_PropertyValue_ReferenceValue_PathElement.Merge(dst, src)\n}\nfunc (m *PropertyValue_ReferenceValue_PathElement) XXX_Size() int {\n\treturn xxx_messageInfo_PropertyValue_ReferenceValue_PathElement.Size(m)\n}\nfunc (m *PropertyValue_ReferenceValue_PathElement) XXX_DiscardUnknown() {\n\txxx_messageInfo_PropertyValue_ReferenceValue_PathElement.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_PropertyValue_ReferenceValue_PathElement proto.InternalMessageInfo\n\nfunc (m *PropertyValue_ReferenceValue_PathElement) GetType() string {\n\tif m != nil && m.Type != nil {\n\t\treturn *m.Type\n\t}\n\treturn \"\"\n}\n\nfunc (m *PropertyValue_ReferenceValue_PathElement) GetId() int64 {\n\tif m != nil && m.Id != nil {\n\t\treturn *m.Id\n\t}\n\treturn 0\n}\n\nfunc (m *PropertyValue_ReferenceValue_PathElement) GetName() string {\n\tif m != nil && m.Name != nil {\n\t\treturn *m.Name\n\t}\n\treturn \"\"\n}\n\ntype Property struct {\n\tMeaning               *Property_Meaning               `protobuf:\"varint,1,opt,name=meaning,enum=appengine.Property_Meaning,def=0\" json:\"meaning,omitempty\"`\n\tMeaningUri            *string                         `protobuf:\"bytes,2,opt,name=meaning_uri,json=meaningUri\" json:\"meaning_uri,omitempty\"`\n\tName                  *string                         `protobuf:\"bytes,3,req,name=name\" json:\"name,omitempty\"`\n\tValue                 *PropertyValue                  `protobuf:\"bytes,5,req,name=value\" json:\"value,omitempty\"`\n\tMultiple              *bool                           `protobuf:\"varint,4,req,name=multiple\" json:\"multiple,omitempty\"`\n\tSearchable            *bool                           `protobuf:\"varint,6,opt,name=searchable,def=0\" json:\"searchable,omitempty\"`\n\tFtsTokenizationOption *Property_FtsTokenizationOption `protobuf:\"varint,8,opt,name=fts_tokenization_option,json=ftsTokenizationOption,enum=appengine.Property_FtsTokenizationOption\" json:\"fts_tokenization_option,omitempty\"`\n\tLocale                *string                         `protobuf:\"bytes,9,opt,name=locale,def=en\" json:\"locale,omitempty\"`\n\tXXX_NoUnkeyedLiteral  struct{}                        `json:\"-\"`\n\tXXX_unrecognized      []byte                          `json:\"-\"`\n\tXXX_sizecache         int32                           `json:\"-\"`\n}\n\nfunc (m *Property) Reset()         { *m = Property{} }\nfunc (m *Property) String() string { return proto.CompactTextString(m) }\nfunc (*Property) ProtoMessage()    {}\nfunc (*Property) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{2}\n}\nfunc (m *Property) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_Property.Unmarshal(m, b)\n}\nfunc (m *Property) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_Property.Marshal(b, m, deterministic)\n}\nfunc (dst *Property) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Property.Merge(dst, src)\n}\nfunc (m *Property) XXX_Size() int {\n\treturn xxx_messageInfo_Property.Size(m)\n}\nfunc (m *Property) XXX_DiscardUnknown() {\n\txxx_messageInfo_Property.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Property proto.InternalMessageInfo\n\nconst Default_Property_Meaning Property_Meaning = Property_NO_MEANING\nconst Default_Property_Searchable bool = false\nconst Default_Property_Locale string = \"en\"\n\nfunc (m *Property) GetMeaning() Property_Meaning {\n\tif m != nil && m.Meaning != nil {\n\t\treturn *m.Meaning\n\t}\n\treturn Default_Property_Meaning\n}\n\nfunc (m *Property) GetMeaningUri() string {\n\tif m != nil && m.MeaningUri != nil {\n\t\treturn *m.MeaningUri\n\t}\n\treturn \"\"\n}\n\nfunc (m *Property) GetName() string {\n\tif m != nil && m.Name != nil {\n\t\treturn *m.Name\n\t}\n\treturn \"\"\n}\n\nfunc (m *Property) GetValue() *PropertyValue {\n\tif m != nil {\n\t\treturn m.Value\n\t}\n\treturn nil\n}\n\nfunc (m *Property) GetMultiple() bool {\n\tif m != nil && m.Multiple != nil {\n\t\treturn *m.Multiple\n\t}\n\treturn false\n}\n\nfunc (m *Property) GetSearchable() bool {\n\tif m != nil && m.Searchable != nil {\n\t\treturn *m.Searchable\n\t}\n\treturn Default_Property_Searchable\n}\n\nfunc (m *Property) GetFtsTokenizationOption() Property_FtsTokenizationOption {\n\tif m != nil && m.FtsTokenizationOption != nil {\n\t\treturn *m.FtsTokenizationOption\n\t}\n\treturn Property_HTML\n}\n\nfunc (m *Property) GetLocale() string {\n\tif m != nil && m.Locale != nil {\n\t\treturn *m.Locale\n\t}\n\treturn Default_Property_Locale\n}\n\ntype Path struct {\n\tElement              []*Path_Element `protobuf:\"group,1,rep,name=Element,json=element\" json:\"element,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}        `json:\"-\"`\n\tXXX_unrecognized     []byte          `json:\"-\"`\n\tXXX_sizecache        int32           `json:\"-\"`\n}\n\nfunc (m *Path) Reset()         { *m = Path{} }\nfunc (m *Path) String() string { return proto.CompactTextString(m) }\nfunc (*Path) ProtoMessage()    {}\nfunc (*Path) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{3}\n}\nfunc (m *Path) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_Path.Unmarshal(m, b)\n}\nfunc (m *Path) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_Path.Marshal(b, m, deterministic)\n}\nfunc (dst *Path) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Path.Merge(dst, src)\n}\nfunc (m *Path) XXX_Size() int {\n\treturn xxx_messageInfo_Path.Size(m)\n}\nfunc (m *Path) XXX_DiscardUnknown() {\n\txxx_messageInfo_Path.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Path proto.InternalMessageInfo\n\nfunc (m *Path) GetElement() []*Path_Element {\n\tif m != nil {\n\t\treturn m.Element\n\t}\n\treturn nil\n}\n\ntype Path_Element struct {\n\tType                 *string  `protobuf:\"bytes,2,req,name=type\" json:\"type,omitempty\"`\n\tId                   *int64   `protobuf:\"varint,3,opt,name=id\" json:\"id,omitempty\"`\n\tName                 *string  `protobuf:\"bytes,4,opt,name=name\" json:\"name,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *Path_Element) Reset()         { *m = Path_Element{} }\nfunc (m *Path_Element) String() string { return proto.CompactTextString(m) }\nfunc (*Path_Element) ProtoMessage()    {}\nfunc (*Path_Element) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{3, 0}\n}\nfunc (m *Path_Element) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_Path_Element.Unmarshal(m, b)\n}\nfunc (m *Path_Element) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_Path_Element.Marshal(b, m, deterministic)\n}\nfunc (dst *Path_Element) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Path_Element.Merge(dst, src)\n}\nfunc (m *Path_Element) XXX_Size() int {\n\treturn xxx_messageInfo_Path_Element.Size(m)\n}\nfunc (m *Path_Element) XXX_DiscardUnknown() {\n\txxx_messageInfo_Path_Element.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Path_Element proto.InternalMessageInfo\n\nfunc (m *Path_Element) GetType() string {\n\tif m != nil && m.Type != nil {\n\t\treturn *m.Type\n\t}\n\treturn \"\"\n}\n\nfunc (m *Path_Element) GetId() int64 {\n\tif m != nil && m.Id != nil {\n\t\treturn *m.Id\n\t}\n\treturn 0\n}\n\nfunc (m *Path_Element) GetName() string {\n\tif m != nil && m.Name != nil {\n\t\treturn *m.Name\n\t}\n\treturn \"\"\n}\n\ntype Reference struct {\n\tApp                  *string  `protobuf:\"bytes,13,req,name=app\" json:\"app,omitempty\"`\n\tNameSpace            *string  `protobuf:\"bytes,20,opt,name=name_space,json=nameSpace\" json:\"name_space,omitempty\"`\n\tPath                 *Path    `protobuf:\"bytes,14,req,name=path\" json:\"path,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *Reference) Reset()         { *m = Reference{} }\nfunc (m *Reference) String() string { return proto.CompactTextString(m) }\nfunc (*Reference) ProtoMessage()    {}\nfunc (*Reference) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{4}\n}\nfunc (m *Reference) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_Reference.Unmarshal(m, b)\n}\nfunc (m *Reference) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_Reference.Marshal(b, m, deterministic)\n}\nfunc (dst *Reference) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Reference.Merge(dst, src)\n}\nfunc (m *Reference) XXX_Size() int {\n\treturn xxx_messageInfo_Reference.Size(m)\n}\nfunc (m *Reference) XXX_DiscardUnknown() {\n\txxx_messageInfo_Reference.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Reference proto.InternalMessageInfo\n\nfunc (m *Reference) GetApp() string {\n\tif m != nil && m.App != nil {\n\t\treturn *m.App\n\t}\n\treturn \"\"\n}\n\nfunc (m *Reference) GetNameSpace() string {\n\tif m != nil && m.NameSpace != nil {\n\t\treturn *m.NameSpace\n\t}\n\treturn \"\"\n}\n\nfunc (m *Reference) GetPath() *Path {\n\tif m != nil {\n\t\treturn m.Path\n\t}\n\treturn nil\n}\n\ntype User struct {\n\tEmail                *string  `protobuf:\"bytes,1,req,name=email\" json:\"email,omitempty\"`\n\tAuthDomain           *string  `protobuf:\"bytes,2,req,name=auth_domain,json=authDomain\" json:\"auth_domain,omitempty\"`\n\tNickname             *string  `protobuf:\"bytes,3,opt,name=nickname\" json:\"nickname,omitempty\"`\n\tFederatedIdentity    *string  `protobuf:\"bytes,6,opt,name=federated_identity,json=federatedIdentity\" json:\"federated_identity,omitempty\"`\n\tFederatedProvider    *string  `protobuf:\"bytes,7,opt,name=federated_provider,json=federatedProvider\" json:\"federated_provider,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *User) Reset()         { *m = User{} }\nfunc (m *User) String() string { return proto.CompactTextString(m) }\nfunc (*User) ProtoMessage()    {}\nfunc (*User) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{5}\n}\nfunc (m *User) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_User.Unmarshal(m, b)\n}\nfunc (m *User) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_User.Marshal(b, m, deterministic)\n}\nfunc (dst *User) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_User.Merge(dst, src)\n}\nfunc (m *User) XXX_Size() int {\n\treturn xxx_messageInfo_User.Size(m)\n}\nfunc (m *User) XXX_DiscardUnknown() {\n\txxx_messageInfo_User.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_User proto.InternalMessageInfo\n\nfunc (m *User) GetEmail() string {\n\tif m != nil && m.Email != nil {\n\t\treturn *m.Email\n\t}\n\treturn \"\"\n}\n\nfunc (m *User) GetAuthDomain() string {\n\tif m != nil && m.AuthDomain != nil {\n\t\treturn *m.AuthDomain\n\t}\n\treturn \"\"\n}\n\nfunc (m *User) GetNickname() string {\n\tif m != nil && m.Nickname != nil {\n\t\treturn *m.Nickname\n\t}\n\treturn \"\"\n}\n\nfunc (m *User) GetFederatedIdentity() string {\n\tif m != nil && m.FederatedIdentity != nil {\n\t\treturn *m.FederatedIdentity\n\t}\n\treturn \"\"\n}\n\nfunc (m *User) GetFederatedProvider() string {\n\tif m != nil && m.FederatedProvider != nil {\n\t\treturn *m.FederatedProvider\n\t}\n\treturn \"\"\n}\n\ntype EntityProto struct {\n\tKey                  *Reference        `protobuf:\"bytes,13,req,name=key\" json:\"key,omitempty\"`\n\tEntityGroup          *Path             `protobuf:\"bytes,16,req,name=entity_group,json=entityGroup\" json:\"entity_group,omitempty\"`\n\tOwner                *User             `protobuf:\"bytes,17,opt,name=owner\" json:\"owner,omitempty\"`\n\tKind                 *EntityProto_Kind `protobuf:\"varint,4,opt,name=kind,enum=appengine.EntityProto_Kind\" json:\"kind,omitempty\"`\n\tKindUri              *string           `protobuf:\"bytes,5,opt,name=kind_uri,json=kindUri\" json:\"kind_uri,omitempty\"`\n\tProperty             []*Property       `protobuf:\"bytes,14,rep,name=property\" json:\"property,omitempty\"`\n\tRawProperty          []*Property       `protobuf:\"bytes,15,rep,name=raw_property,json=rawProperty\" json:\"raw_property,omitempty\"`\n\tRank                 *int32            `protobuf:\"varint,18,opt,name=rank\" json:\"rank,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}          `json:\"-\"`\n\tXXX_unrecognized     []byte            `json:\"-\"`\n\tXXX_sizecache        int32             `json:\"-\"`\n}\n\nfunc (m *EntityProto) Reset()         { *m = EntityProto{} }\nfunc (m *EntityProto) String() string { return proto.CompactTextString(m) }\nfunc (*EntityProto) ProtoMessage()    {}\nfunc (*EntityProto) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{6}\n}\nfunc (m *EntityProto) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_EntityProto.Unmarshal(m, b)\n}\nfunc (m *EntityProto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_EntityProto.Marshal(b, m, deterministic)\n}\nfunc (dst *EntityProto) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_EntityProto.Merge(dst, src)\n}\nfunc (m *EntityProto) XXX_Size() int {\n\treturn xxx_messageInfo_EntityProto.Size(m)\n}\nfunc (m *EntityProto) XXX_DiscardUnknown() {\n\txxx_messageInfo_EntityProto.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_EntityProto proto.InternalMessageInfo\n\nfunc (m *EntityProto) GetKey() *Reference {\n\tif m != nil {\n\t\treturn m.Key\n\t}\n\treturn nil\n}\n\nfunc (m *EntityProto) GetEntityGroup() *Path {\n\tif m != nil {\n\t\treturn m.EntityGroup\n\t}\n\treturn nil\n}\n\nfunc (m *EntityProto) GetOwner() *User {\n\tif m != nil {\n\t\treturn m.Owner\n\t}\n\treturn nil\n}\n\nfunc (m *EntityProto) GetKind() EntityProto_Kind {\n\tif m != nil && m.Kind != nil {\n\t\treturn *m.Kind\n\t}\n\treturn EntityProto_GD_CONTACT\n}\n\nfunc (m *EntityProto) GetKindUri() string {\n\tif m != nil && m.KindUri != nil {\n\t\treturn *m.KindUri\n\t}\n\treturn \"\"\n}\n\nfunc (m *EntityProto) GetProperty() []*Property {\n\tif m != nil {\n\t\treturn m.Property\n\t}\n\treturn nil\n}\n\nfunc (m *EntityProto) GetRawProperty() []*Property {\n\tif m != nil {\n\t\treturn m.RawProperty\n\t}\n\treturn nil\n}\n\nfunc (m *EntityProto) GetRank() int32 {\n\tif m != nil && m.Rank != nil {\n\t\treturn *m.Rank\n\t}\n\treturn 0\n}\n\ntype CompositeProperty struct {\n\tIndexId              *int64   `protobuf:\"varint,1,req,name=index_id,json=indexId\" json:\"index_id,omitempty\"`\n\tValue                []string `protobuf:\"bytes,2,rep,name=value\" json:\"value,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *CompositeProperty) Reset()         { *m = CompositeProperty{} }\nfunc (m *CompositeProperty) String() string { return proto.CompactTextString(m) }\nfunc (*CompositeProperty) ProtoMessage()    {}\nfunc (*CompositeProperty) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{7}\n}\nfunc (m *CompositeProperty) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_CompositeProperty.Unmarshal(m, b)\n}\nfunc (m *CompositeProperty) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_CompositeProperty.Marshal(b, m, deterministic)\n}\nfunc (dst *CompositeProperty) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_CompositeProperty.Merge(dst, src)\n}\nfunc (m *CompositeProperty) XXX_Size() int {\n\treturn xxx_messageInfo_CompositeProperty.Size(m)\n}\nfunc (m *CompositeProperty) XXX_DiscardUnknown() {\n\txxx_messageInfo_CompositeProperty.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_CompositeProperty proto.InternalMessageInfo\n\nfunc (m *CompositeProperty) GetIndexId() int64 {\n\tif m != nil && m.IndexId != nil {\n\t\treturn *m.IndexId\n\t}\n\treturn 0\n}\n\nfunc (m *CompositeProperty) GetValue() []string {\n\tif m != nil {\n\t\treturn m.Value\n\t}\n\treturn nil\n}\n\ntype Index struct {\n\tEntityType           *string           `protobuf:\"bytes,1,req,name=entity_type,json=entityType\" json:\"entity_type,omitempty\"`\n\tAncestor             *bool             `protobuf:\"varint,5,req,name=ancestor\" json:\"ancestor,omitempty\"`\n\tProperty             []*Index_Property `protobuf:\"group,2,rep,name=Property,json=property\" json:\"property,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}          `json:\"-\"`\n\tXXX_unrecognized     []byte            `json:\"-\"`\n\tXXX_sizecache        int32             `json:\"-\"`\n}\n\nfunc (m *Index) Reset()         { *m = Index{} }\nfunc (m *Index) String() string { return proto.CompactTextString(m) }\nfunc (*Index) ProtoMessage()    {}\nfunc (*Index) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{8}\n}\nfunc (m *Index) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_Index.Unmarshal(m, b)\n}\nfunc (m *Index) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_Index.Marshal(b, m, deterministic)\n}\nfunc (dst *Index) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Index.Merge(dst, src)\n}\nfunc (m *Index) XXX_Size() int {\n\treturn xxx_messageInfo_Index.Size(m)\n}\nfunc (m *Index) XXX_DiscardUnknown() {\n\txxx_messageInfo_Index.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Index proto.InternalMessageInfo\n\nfunc (m *Index) GetEntityType() string {\n\tif m != nil && m.EntityType != nil {\n\t\treturn *m.EntityType\n\t}\n\treturn \"\"\n}\n\nfunc (m *Index) GetAncestor() bool {\n\tif m != nil && m.Ancestor != nil {\n\t\treturn *m.Ancestor\n\t}\n\treturn false\n}\n\nfunc (m *Index) GetProperty() []*Index_Property {\n\tif m != nil {\n\t\treturn m.Property\n\t}\n\treturn nil\n}\n\ntype Index_Property struct {\n\tName                 *string                   `protobuf:\"bytes,3,req,name=name\" json:\"name,omitempty\"`\n\tDirection            *Index_Property_Direction `protobuf:\"varint,4,opt,name=direction,enum=appengine.Index_Property_Direction,def=1\" json:\"direction,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}                  `json:\"-\"`\n\tXXX_unrecognized     []byte                    `json:\"-\"`\n\tXXX_sizecache        int32                     `json:\"-\"`\n}\n\nfunc (m *Index_Property) Reset()         { *m = Index_Property{} }\nfunc (m *Index_Property) String() string { return proto.CompactTextString(m) }\nfunc (*Index_Property) ProtoMessage()    {}\nfunc (*Index_Property) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{8, 0}\n}\nfunc (m *Index_Property) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_Index_Property.Unmarshal(m, b)\n}\nfunc (m *Index_Property) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_Index_Property.Marshal(b, m, deterministic)\n}\nfunc (dst *Index_Property) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Index_Property.Merge(dst, src)\n}\nfunc (m *Index_Property) XXX_Size() int {\n\treturn xxx_messageInfo_Index_Property.Size(m)\n}\nfunc (m *Index_Property) XXX_DiscardUnknown() {\n\txxx_messageInfo_Index_Property.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Index_Property proto.InternalMessageInfo\n\nconst Default_Index_Property_Direction Index_Property_Direction = Index_Property_ASCENDING\n\nfunc (m *Index_Property) GetName() string {\n\tif m != nil && m.Name != nil {\n\t\treturn *m.Name\n\t}\n\treturn \"\"\n}\n\nfunc (m *Index_Property) GetDirection() Index_Property_Direction {\n\tif m != nil && m.Direction != nil {\n\t\treturn *m.Direction\n\t}\n\treturn Default_Index_Property_Direction\n}\n\ntype CompositeIndex struct {\n\tAppId                *string               `protobuf:\"bytes,1,req,name=app_id,json=appId\" json:\"app_id,omitempty\"`\n\tId                   *int64                `protobuf:\"varint,2,req,name=id\" json:\"id,omitempty\"`\n\tDefinition           *Index                `protobuf:\"bytes,3,req,name=definition\" json:\"definition,omitempty\"`\n\tState                *CompositeIndex_State `protobuf:\"varint,4,req,name=state,enum=appengine.CompositeIndex_State\" json:\"state,omitempty\"`\n\tOnlyUseIfRequired    *bool                 `protobuf:\"varint,6,opt,name=only_use_if_required,json=onlyUseIfRequired,def=0\" json:\"only_use_if_required,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}              `json:\"-\"`\n\tXXX_unrecognized     []byte                `json:\"-\"`\n\tXXX_sizecache        int32                 `json:\"-\"`\n}\n\nfunc (m *CompositeIndex) Reset()         { *m = CompositeIndex{} }\nfunc (m *CompositeIndex) String() string { return proto.CompactTextString(m) }\nfunc (*CompositeIndex) ProtoMessage()    {}\nfunc (*CompositeIndex) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{9}\n}\nfunc (m *CompositeIndex) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_CompositeIndex.Unmarshal(m, b)\n}\nfunc (m *CompositeIndex) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_CompositeIndex.Marshal(b, m, deterministic)\n}\nfunc (dst *CompositeIndex) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_CompositeIndex.Merge(dst, src)\n}\nfunc (m *CompositeIndex) XXX_Size() int {\n\treturn xxx_messageInfo_CompositeIndex.Size(m)\n}\nfunc (m *CompositeIndex) XXX_DiscardUnknown() {\n\txxx_messageInfo_CompositeIndex.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_CompositeIndex proto.InternalMessageInfo\n\nconst Default_CompositeIndex_OnlyUseIfRequired bool = false\n\nfunc (m *CompositeIndex) GetAppId() string {\n\tif m != nil && m.AppId != nil {\n\t\treturn *m.AppId\n\t}\n\treturn \"\"\n}\n\nfunc (m *CompositeIndex) GetId() int64 {\n\tif m != nil && m.Id != nil {\n\t\treturn *m.Id\n\t}\n\treturn 0\n}\n\nfunc (m *CompositeIndex) GetDefinition() *Index {\n\tif m != nil {\n\t\treturn m.Definition\n\t}\n\treturn nil\n}\n\nfunc (m *CompositeIndex) GetState() CompositeIndex_State {\n\tif m != nil && m.State != nil {\n\t\treturn *m.State\n\t}\n\treturn CompositeIndex_WRITE_ONLY\n}\n\nfunc (m *CompositeIndex) GetOnlyUseIfRequired() bool {\n\tif m != nil && m.OnlyUseIfRequired != nil {\n\t\treturn *m.OnlyUseIfRequired\n\t}\n\treturn Default_CompositeIndex_OnlyUseIfRequired\n}\n\ntype IndexPostfix struct {\n\tIndexValue           []*IndexPostfix_IndexValue `protobuf:\"bytes,1,rep,name=index_value,json=indexValue\" json:\"index_value,omitempty\"`\n\tKey                  *Reference                 `protobuf:\"bytes,2,opt,name=key\" json:\"key,omitempty\"`\n\tBefore               *bool                      `protobuf:\"varint,3,opt,name=before,def=1\" json:\"before,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}                   `json:\"-\"`\n\tXXX_unrecognized     []byte                     `json:\"-\"`\n\tXXX_sizecache        int32                      `json:\"-\"`\n}\n\nfunc (m *IndexPostfix) Reset()         { *m = IndexPostfix{} }\nfunc (m *IndexPostfix) String() string { return proto.CompactTextString(m) }\nfunc (*IndexPostfix) ProtoMessage()    {}\nfunc (*IndexPostfix) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{10}\n}\nfunc (m *IndexPostfix) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_IndexPostfix.Unmarshal(m, b)\n}\nfunc (m *IndexPostfix) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_IndexPostfix.Marshal(b, m, deterministic)\n}\nfunc (dst *IndexPostfix) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_IndexPostfix.Merge(dst, src)\n}\nfunc (m *IndexPostfix) XXX_Size() int {\n\treturn xxx_messageInfo_IndexPostfix.Size(m)\n}\nfunc (m *IndexPostfix) XXX_DiscardUnknown() {\n\txxx_messageInfo_IndexPostfix.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_IndexPostfix proto.InternalMessageInfo\n\nconst Default_IndexPostfix_Before bool = true\n\nfunc (m *IndexPostfix) GetIndexValue() []*IndexPostfix_IndexValue {\n\tif m != nil {\n\t\treturn m.IndexValue\n\t}\n\treturn nil\n}\n\nfunc (m *IndexPostfix) GetKey() *Reference {\n\tif m != nil {\n\t\treturn m.Key\n\t}\n\treturn nil\n}\n\nfunc (m *IndexPostfix) GetBefore() bool {\n\tif m != nil && m.Before != nil {\n\t\treturn *m.Before\n\t}\n\treturn Default_IndexPostfix_Before\n}\n\ntype IndexPostfix_IndexValue struct {\n\tPropertyName         *string        `protobuf:\"bytes,1,req,name=property_name,json=propertyName\" json:\"property_name,omitempty\"`\n\tValue                *PropertyValue `protobuf:\"bytes,2,req,name=value\" json:\"value,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}       `json:\"-\"`\n\tXXX_unrecognized     []byte         `json:\"-\"`\n\tXXX_sizecache        int32          `json:\"-\"`\n}\n\nfunc (m *IndexPostfix_IndexValue) Reset()         { *m = IndexPostfix_IndexValue{} }\nfunc (m *IndexPostfix_IndexValue) String() string { return proto.CompactTextString(m) }\nfunc (*IndexPostfix_IndexValue) ProtoMessage()    {}\nfunc (*IndexPostfix_IndexValue) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{10, 0}\n}\nfunc (m *IndexPostfix_IndexValue) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_IndexPostfix_IndexValue.Unmarshal(m, b)\n}\nfunc (m *IndexPostfix_IndexValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_IndexPostfix_IndexValue.Marshal(b, m, deterministic)\n}\nfunc (dst *IndexPostfix_IndexValue) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_IndexPostfix_IndexValue.Merge(dst, src)\n}\nfunc (m *IndexPostfix_IndexValue) XXX_Size() int {\n\treturn xxx_messageInfo_IndexPostfix_IndexValue.Size(m)\n}\nfunc (m *IndexPostfix_IndexValue) XXX_DiscardUnknown() {\n\txxx_messageInfo_IndexPostfix_IndexValue.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_IndexPostfix_IndexValue proto.InternalMessageInfo\n\nfunc (m *IndexPostfix_IndexValue) GetPropertyName() string {\n\tif m != nil && m.PropertyName != nil {\n\t\treturn *m.PropertyName\n\t}\n\treturn \"\"\n}\n\nfunc (m *IndexPostfix_IndexValue) GetValue() *PropertyValue {\n\tif m != nil {\n\t\treturn m.Value\n\t}\n\treturn nil\n}\n\ntype IndexPosition struct {\n\tKey                  *string  `protobuf:\"bytes,1,opt,name=key\" json:\"key,omitempty\"`\n\tBefore               *bool    `protobuf:\"varint,2,opt,name=before,def=1\" json:\"before,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *IndexPosition) Reset()         { *m = IndexPosition{} }\nfunc (m *IndexPosition) String() string { return proto.CompactTextString(m) }\nfunc (*IndexPosition) ProtoMessage()    {}\nfunc (*IndexPosition) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{11}\n}\nfunc (m *IndexPosition) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_IndexPosition.Unmarshal(m, b)\n}\nfunc (m *IndexPosition) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_IndexPosition.Marshal(b, m, deterministic)\n}\nfunc (dst *IndexPosition) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_IndexPosition.Merge(dst, src)\n}\nfunc (m *IndexPosition) XXX_Size() int {\n\treturn xxx_messageInfo_IndexPosition.Size(m)\n}\nfunc (m *IndexPosition) XXX_DiscardUnknown() {\n\txxx_messageInfo_IndexPosition.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_IndexPosition proto.InternalMessageInfo\n\nconst Default_IndexPosition_Before bool = true\n\nfunc (m *IndexPosition) GetKey() string {\n\tif m != nil && m.Key != nil {\n\t\treturn *m.Key\n\t}\n\treturn \"\"\n}\n\nfunc (m *IndexPosition) GetBefore() bool {\n\tif m != nil && m.Before != nil {\n\t\treturn *m.Before\n\t}\n\treturn Default_IndexPosition_Before\n}\n\ntype Snapshot struct {\n\tTs                   *int64   `protobuf:\"varint,1,req,name=ts\" json:\"ts,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *Snapshot) Reset()         { *m = Snapshot{} }\nfunc (m *Snapshot) String() string { return proto.CompactTextString(m) }\nfunc (*Snapshot) ProtoMessage()    {}\nfunc (*Snapshot) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{12}\n}\nfunc (m *Snapshot) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_Snapshot.Unmarshal(m, b)\n}\nfunc (m *Snapshot) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_Snapshot.Marshal(b, m, deterministic)\n}\nfunc (dst *Snapshot) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Snapshot.Merge(dst, src)\n}\nfunc (m *Snapshot) XXX_Size() int {\n\treturn xxx_messageInfo_Snapshot.Size(m)\n}\nfunc (m *Snapshot) XXX_DiscardUnknown() {\n\txxx_messageInfo_Snapshot.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Snapshot proto.InternalMessageInfo\n\nfunc (m *Snapshot) GetTs() int64 {\n\tif m != nil && m.Ts != nil {\n\t\treturn *m.Ts\n\t}\n\treturn 0\n}\n\ntype InternalHeader struct {\n\tQos                  *string  `protobuf:\"bytes,1,opt,name=qos\" json:\"qos,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *InternalHeader) Reset()         { *m = InternalHeader{} }\nfunc (m *InternalHeader) String() string { return proto.CompactTextString(m) }\nfunc (*InternalHeader) ProtoMessage()    {}\nfunc (*InternalHeader) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{13}\n}\nfunc (m *InternalHeader) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_InternalHeader.Unmarshal(m, b)\n}\nfunc (m *InternalHeader) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_InternalHeader.Marshal(b, m, deterministic)\n}\nfunc (dst *InternalHeader) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_InternalHeader.Merge(dst, src)\n}\nfunc (m *InternalHeader) XXX_Size() int {\n\treturn xxx_messageInfo_InternalHeader.Size(m)\n}\nfunc (m *InternalHeader) XXX_DiscardUnknown() {\n\txxx_messageInfo_InternalHeader.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_InternalHeader proto.InternalMessageInfo\n\nfunc (m *InternalHeader) GetQos() string {\n\tif m != nil && m.Qos != nil {\n\t\treturn *m.Qos\n\t}\n\treturn \"\"\n}\n\ntype Transaction struct {\n\tHeader               *InternalHeader `protobuf:\"bytes,4,opt,name=header\" json:\"header,omitempty\"`\n\tHandle               *uint64         `protobuf:\"fixed64,1,req,name=handle\" json:\"handle,omitempty\"`\n\tApp                  *string         `protobuf:\"bytes,2,req,name=app\" json:\"app,omitempty\"`\n\tMarkChanges          *bool           `protobuf:\"varint,3,opt,name=mark_changes,json=markChanges,def=0\" json:\"mark_changes,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}        `json:\"-\"`\n\tXXX_unrecognized     []byte          `json:\"-\"`\n\tXXX_sizecache        int32           `json:\"-\"`\n}\n\nfunc (m *Transaction) Reset()         { *m = Transaction{} }\nfunc (m *Transaction) String() string { return proto.CompactTextString(m) }\nfunc (*Transaction) ProtoMessage()    {}\nfunc (*Transaction) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{14}\n}\nfunc (m *Transaction) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_Transaction.Unmarshal(m, b)\n}\nfunc (m *Transaction) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_Transaction.Marshal(b, m, deterministic)\n}\nfunc (dst *Transaction) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Transaction.Merge(dst, src)\n}\nfunc (m *Transaction) XXX_Size() int {\n\treturn xxx_messageInfo_Transaction.Size(m)\n}\nfunc (m *Transaction) XXX_DiscardUnknown() {\n\txxx_messageInfo_Transaction.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Transaction proto.InternalMessageInfo\n\nconst Default_Transaction_MarkChanges bool = false\n\nfunc (m *Transaction) GetHeader() *InternalHeader {\n\tif m != nil {\n\t\treturn m.Header\n\t}\n\treturn nil\n}\n\nfunc (m *Transaction) GetHandle() uint64 {\n\tif m != nil && m.Handle != nil {\n\t\treturn *m.Handle\n\t}\n\treturn 0\n}\n\nfunc (m *Transaction) GetApp() string {\n\tif m != nil && m.App != nil {\n\t\treturn *m.App\n\t}\n\treturn \"\"\n}\n\nfunc (m *Transaction) GetMarkChanges() bool {\n\tif m != nil && m.MarkChanges != nil {\n\t\treturn *m.MarkChanges\n\t}\n\treturn Default_Transaction_MarkChanges\n}\n\ntype Query struct {\n\tHeader               *InternalHeader   `protobuf:\"bytes,39,opt,name=header\" json:\"header,omitempty\"`\n\tApp                  *string           `protobuf:\"bytes,1,req,name=app\" json:\"app,omitempty\"`\n\tNameSpace            *string           `protobuf:\"bytes,29,opt,name=name_space,json=nameSpace\" json:\"name_space,omitempty\"`\n\tKind                 *string           `protobuf:\"bytes,3,opt,name=kind\" json:\"kind,omitempty\"`\n\tAncestor             *Reference        `protobuf:\"bytes,17,opt,name=ancestor\" json:\"ancestor,omitempty\"`\n\tFilter               []*Query_Filter   `protobuf:\"group,4,rep,name=Filter,json=filter\" json:\"filter,omitempty\"`\n\tSearchQuery          *string           `protobuf:\"bytes,8,opt,name=search_query,json=searchQuery\" json:\"search_query,omitempty\"`\n\tOrder                []*Query_Order    `protobuf:\"group,9,rep,name=Order,json=order\" json:\"order,omitempty\"`\n\tHint                 *Query_Hint       `protobuf:\"varint,18,opt,name=hint,enum=appengine.Query_Hint\" json:\"hint,omitempty\"`\n\tCount                *int32            `protobuf:\"varint,23,opt,name=count\" json:\"count,omitempty\"`\n\tOffset               *int32            `protobuf:\"varint,12,opt,name=offset,def=0\" json:\"offset,omitempty\"`\n\tLimit                *int32            `protobuf:\"varint,16,opt,name=limit\" json:\"limit,omitempty\"`\n\tCompiledCursor       *CompiledCursor   `protobuf:\"bytes,30,opt,name=compiled_cursor,json=compiledCursor\" json:\"compiled_cursor,omitempty\"`\n\tEndCompiledCursor    *CompiledCursor   `protobuf:\"bytes,31,opt,name=end_compiled_cursor,json=endCompiledCursor\" json:\"end_compiled_cursor,omitempty\"`\n\tCompositeIndex       []*CompositeIndex `protobuf:\"bytes,19,rep,name=composite_index,json=compositeIndex\" json:\"composite_index,omitempty\"`\n\tRequirePerfectPlan   *bool             `protobuf:\"varint,20,opt,name=require_perfect_plan,json=requirePerfectPlan,def=0\" json:\"require_perfect_plan,omitempty\"`\n\tKeysOnly             *bool             `protobuf:\"varint,21,opt,name=keys_only,json=keysOnly,def=0\" json:\"keys_only,omitempty\"`\n\tTransaction          *Transaction      `protobuf:\"bytes,22,opt,name=transaction\" json:\"transaction,omitempty\"`\n\tCompile              *bool             `protobuf:\"varint,25,opt,name=compile,def=0\" json:\"compile,omitempty\"`\n\tFailoverMs           *int64            `protobuf:\"varint,26,opt,name=failover_ms,json=failoverMs\" json:\"failover_ms,omitempty\"`\n\tStrong               *bool             `protobuf:\"varint,32,opt,name=strong\" json:\"strong,omitempty\"`\n\tPropertyName         []string          `protobuf:\"bytes,33,rep,name=property_name,json=propertyName\" json:\"property_name,omitempty\"`\n\tGroupByPropertyName  []string          `protobuf:\"bytes,34,rep,name=group_by_property_name,json=groupByPropertyName\" json:\"group_by_property_name,omitempty\"`\n\tDistinct             *bool             `protobuf:\"varint,24,opt,name=distinct\" json:\"distinct,omitempty\"`\n\tMinSafeTimeSeconds   *int64            `protobuf:\"varint,35,opt,name=min_safe_time_seconds,json=minSafeTimeSeconds\" json:\"min_safe_time_seconds,omitempty\"`\n\tSafeReplicaName      []string          `protobuf:\"bytes,36,rep,name=safe_replica_name,json=safeReplicaName\" json:\"safe_replica_name,omitempty\"`\n\tPersistOffset        *bool             `protobuf:\"varint,37,opt,name=persist_offset,json=persistOffset,def=0\" json:\"persist_offset,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}          `json:\"-\"`\n\tXXX_unrecognized     []byte            `json:\"-\"`\n\tXXX_sizecache        int32             `json:\"-\"`\n}\n\nfunc (m *Query) Reset()         { *m = Query{} }\nfunc (m *Query) String() string { return proto.CompactTextString(m) }\nfunc (*Query) ProtoMessage()    {}\nfunc (*Query) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{15}\n}\nfunc (m *Query) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_Query.Unmarshal(m, b)\n}\nfunc (m *Query) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_Query.Marshal(b, m, deterministic)\n}\nfunc (dst *Query) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Query.Merge(dst, src)\n}\nfunc (m *Query) XXX_Size() int {\n\treturn xxx_messageInfo_Query.Size(m)\n}\nfunc (m *Query) XXX_DiscardUnknown() {\n\txxx_messageInfo_Query.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Query proto.InternalMessageInfo\n\nconst Default_Query_Offset int32 = 0\nconst Default_Query_RequirePerfectPlan bool = false\nconst Default_Query_KeysOnly bool = false\nconst Default_Query_Compile bool = false\nconst Default_Query_PersistOffset bool = false\n\nfunc (m *Query) GetHeader() *InternalHeader {\n\tif m != nil {\n\t\treturn m.Header\n\t}\n\treturn nil\n}\n\nfunc (m *Query) GetApp() string {\n\tif m != nil && m.App != nil {\n\t\treturn *m.App\n\t}\n\treturn \"\"\n}\n\nfunc (m *Query) GetNameSpace() string {\n\tif m != nil && m.NameSpace != nil {\n\t\treturn *m.NameSpace\n\t}\n\treturn \"\"\n}\n\nfunc (m *Query) GetKind() string {\n\tif m != nil && m.Kind != nil {\n\t\treturn *m.Kind\n\t}\n\treturn \"\"\n}\n\nfunc (m *Query) GetAncestor() *Reference {\n\tif m != nil {\n\t\treturn m.Ancestor\n\t}\n\treturn nil\n}\n\nfunc (m *Query) GetFilter() []*Query_Filter {\n\tif m != nil {\n\t\treturn m.Filter\n\t}\n\treturn nil\n}\n\nfunc (m *Query) GetSearchQuery() string {\n\tif m != nil && m.SearchQuery != nil {\n\t\treturn *m.SearchQuery\n\t}\n\treturn \"\"\n}\n\nfunc (m *Query) GetOrder() []*Query_Order {\n\tif m != nil {\n\t\treturn m.Order\n\t}\n\treturn nil\n}\n\nfunc (m *Query) GetHint() Query_Hint {\n\tif m != nil && m.Hint != nil {\n\t\treturn *m.Hint\n\t}\n\treturn Query_ORDER_FIRST\n}\n\nfunc (m *Query) GetCount() int32 {\n\tif m != nil && m.Count != nil {\n\t\treturn *m.Count\n\t}\n\treturn 0\n}\n\nfunc (m *Query) GetOffset() int32 {\n\tif m != nil && m.Offset != nil {\n\t\treturn *m.Offset\n\t}\n\treturn Default_Query_Offset\n}\n\nfunc (m *Query) GetLimit() int32 {\n\tif m != nil && m.Limit != nil {\n\t\treturn *m.Limit\n\t}\n\treturn 0\n}\n\nfunc (m *Query) GetCompiledCursor() *CompiledCursor {\n\tif m != nil {\n\t\treturn m.CompiledCursor\n\t}\n\treturn nil\n}\n\nfunc (m *Query) GetEndCompiledCursor() *CompiledCursor {\n\tif m != nil {\n\t\treturn m.EndCompiledCursor\n\t}\n\treturn nil\n}\n\nfunc (m *Query) GetCompositeIndex() []*CompositeIndex {\n\tif m != nil {\n\t\treturn m.CompositeIndex\n\t}\n\treturn nil\n}\n\nfunc (m *Query) GetRequirePerfectPlan() bool {\n\tif m != nil && m.RequirePerfectPlan != nil {\n\t\treturn *m.RequirePerfectPlan\n\t}\n\treturn Default_Query_RequirePerfectPlan\n}\n\nfunc (m *Query) GetKeysOnly() bool {\n\tif m != nil && m.KeysOnly != nil {\n\t\treturn *m.KeysOnly\n\t}\n\treturn Default_Query_KeysOnly\n}\n\nfunc (m *Query) GetTransaction() *Transaction {\n\tif m != nil {\n\t\treturn m.Transaction\n\t}\n\treturn nil\n}\n\nfunc (m *Query) GetCompile() bool {\n\tif m != nil && m.Compile != nil {\n\t\treturn *m.Compile\n\t}\n\treturn Default_Query_Compile\n}\n\nfunc (m *Query) GetFailoverMs() int64 {\n\tif m != nil && m.FailoverMs != nil {\n\t\treturn *m.FailoverMs\n\t}\n\treturn 0\n}\n\nfunc (m *Query) GetStrong() bool {\n\tif m != nil && m.Strong != nil {\n\t\treturn *m.Strong\n\t}\n\treturn false\n}\n\nfunc (m *Query) GetPropertyName() []string {\n\tif m != nil {\n\t\treturn m.PropertyName\n\t}\n\treturn nil\n}\n\nfunc (m *Query) GetGroupByPropertyName() []string {\n\tif m != nil {\n\t\treturn m.GroupByPropertyName\n\t}\n\treturn nil\n}\n\nfunc (m *Query) GetDistinct() bool {\n\tif m != nil && m.Distinct != nil {\n\t\treturn *m.Distinct\n\t}\n\treturn false\n}\n\nfunc (m *Query) GetMinSafeTimeSeconds() int64 {\n\tif m != nil && m.MinSafeTimeSeconds != nil {\n\t\treturn *m.MinSafeTimeSeconds\n\t}\n\treturn 0\n}\n\nfunc (m *Query) GetSafeReplicaName() []string {\n\tif m != nil {\n\t\treturn m.SafeReplicaName\n\t}\n\treturn nil\n}\n\nfunc (m *Query) GetPersistOffset() bool {\n\tif m != nil && m.PersistOffset != nil {\n\t\treturn *m.PersistOffset\n\t}\n\treturn Default_Query_PersistOffset\n}\n\ntype Query_Filter struct {\n\tOp                   *Query_Filter_Operator `protobuf:\"varint,6,req,name=op,enum=appengine.Query_Filter_Operator\" json:\"op,omitempty\"`\n\tProperty             []*Property            `protobuf:\"bytes,14,rep,name=property\" json:\"property,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}               `json:\"-\"`\n\tXXX_unrecognized     []byte                 `json:\"-\"`\n\tXXX_sizecache        int32                  `json:\"-\"`\n}\n\nfunc (m *Query_Filter) Reset()         { *m = Query_Filter{} }\nfunc (m *Query_Filter) String() string { return proto.CompactTextString(m) }\nfunc (*Query_Filter) ProtoMessage()    {}\nfunc (*Query_Filter) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{15, 0}\n}\nfunc (m *Query_Filter) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_Query_Filter.Unmarshal(m, b)\n}\nfunc (m *Query_Filter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_Query_Filter.Marshal(b, m, deterministic)\n}\nfunc (dst *Query_Filter) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Query_Filter.Merge(dst, src)\n}\nfunc (m *Query_Filter) XXX_Size() int {\n\treturn xxx_messageInfo_Query_Filter.Size(m)\n}\nfunc (m *Query_Filter) XXX_DiscardUnknown() {\n\txxx_messageInfo_Query_Filter.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Query_Filter proto.InternalMessageInfo\n\nfunc (m *Query_Filter) GetOp() Query_Filter_Operator {\n\tif m != nil && m.Op != nil {\n\t\treturn *m.Op\n\t}\n\treturn Query_Filter_LESS_THAN\n}\n\nfunc (m *Query_Filter) GetProperty() []*Property {\n\tif m != nil {\n\t\treturn m.Property\n\t}\n\treturn nil\n}\n\ntype Query_Order struct {\n\tProperty             *string                `protobuf:\"bytes,10,req,name=property\" json:\"property,omitempty\"`\n\tDirection            *Query_Order_Direction `protobuf:\"varint,11,opt,name=direction,enum=appengine.Query_Order_Direction,def=1\" json:\"direction,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}               `json:\"-\"`\n\tXXX_unrecognized     []byte                 `json:\"-\"`\n\tXXX_sizecache        int32                  `json:\"-\"`\n}\n\nfunc (m *Query_Order) Reset()         { *m = Query_Order{} }\nfunc (m *Query_Order) String() string { return proto.CompactTextString(m) }\nfunc (*Query_Order) ProtoMessage()    {}\nfunc (*Query_Order) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{15, 1}\n}\nfunc (m *Query_Order) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_Query_Order.Unmarshal(m, b)\n}\nfunc (m *Query_Order) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_Query_Order.Marshal(b, m, deterministic)\n}\nfunc (dst *Query_Order) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Query_Order.Merge(dst, src)\n}\nfunc (m *Query_Order) XXX_Size() int {\n\treturn xxx_messageInfo_Query_Order.Size(m)\n}\nfunc (m *Query_Order) XXX_DiscardUnknown() {\n\txxx_messageInfo_Query_Order.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Query_Order proto.InternalMessageInfo\n\nconst Default_Query_Order_Direction Query_Order_Direction = Query_Order_ASCENDING\n\nfunc (m *Query_Order) GetProperty() string {\n\tif m != nil && m.Property != nil {\n\t\treturn *m.Property\n\t}\n\treturn \"\"\n}\n\nfunc (m *Query_Order) GetDirection() Query_Order_Direction {\n\tif m != nil && m.Direction != nil {\n\t\treturn *m.Direction\n\t}\n\treturn Default_Query_Order_Direction\n}\n\ntype CompiledQuery struct {\n\tPrimaryscan          *CompiledQuery_PrimaryScan     `protobuf:\"group,1,req,name=PrimaryScan,json=primaryscan\" json:\"primaryscan,omitempty\"`\n\tMergejoinscan        []*CompiledQuery_MergeJoinScan `protobuf:\"group,7,rep,name=MergeJoinScan,json=mergejoinscan\" json:\"mergejoinscan,omitempty\"`\n\tIndexDef             *Index                         `protobuf:\"bytes,21,opt,name=index_def,json=indexDef\" json:\"index_def,omitempty\"`\n\tOffset               *int32                         `protobuf:\"varint,10,opt,name=offset,def=0\" json:\"offset,omitempty\"`\n\tLimit                *int32                         `protobuf:\"varint,11,opt,name=limit\" json:\"limit,omitempty\"`\n\tKeysOnly             *bool                          `protobuf:\"varint,12,req,name=keys_only,json=keysOnly\" json:\"keys_only,omitempty\"`\n\tPropertyName         []string                       `protobuf:\"bytes,24,rep,name=property_name,json=propertyName\" json:\"property_name,omitempty\"`\n\tDistinctInfixSize    *int32                         `protobuf:\"varint,25,opt,name=distinct_infix_size,json=distinctInfixSize\" json:\"distinct_infix_size,omitempty\"`\n\tEntityfilter         *CompiledQuery_EntityFilter    `protobuf:\"group,13,opt,name=EntityFilter,json=entityfilter\" json:\"entityfilter,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}                       `json:\"-\"`\n\tXXX_unrecognized     []byte                         `json:\"-\"`\n\tXXX_sizecache        int32                          `json:\"-\"`\n}\n\nfunc (m *CompiledQuery) Reset()         { *m = CompiledQuery{} }\nfunc (m *CompiledQuery) String() string { return proto.CompactTextString(m) }\nfunc (*CompiledQuery) ProtoMessage()    {}\nfunc (*CompiledQuery) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{16}\n}\nfunc (m *CompiledQuery) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_CompiledQuery.Unmarshal(m, b)\n}\nfunc (m *CompiledQuery) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_CompiledQuery.Marshal(b, m, deterministic)\n}\nfunc (dst *CompiledQuery) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_CompiledQuery.Merge(dst, src)\n}\nfunc (m *CompiledQuery) XXX_Size() int {\n\treturn xxx_messageInfo_CompiledQuery.Size(m)\n}\nfunc (m *CompiledQuery) XXX_DiscardUnknown() {\n\txxx_messageInfo_CompiledQuery.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_CompiledQuery proto.InternalMessageInfo\n\nconst Default_CompiledQuery_Offset int32 = 0\n\nfunc (m *CompiledQuery) GetPrimaryscan() *CompiledQuery_PrimaryScan {\n\tif m != nil {\n\t\treturn m.Primaryscan\n\t}\n\treturn nil\n}\n\nfunc (m *CompiledQuery) GetMergejoinscan() []*CompiledQuery_MergeJoinScan {\n\tif m != nil {\n\t\treturn m.Mergejoinscan\n\t}\n\treturn nil\n}\n\nfunc (m *CompiledQuery) GetIndexDef() *Index {\n\tif m != nil {\n\t\treturn m.IndexDef\n\t}\n\treturn nil\n}\n\nfunc (m *CompiledQuery) GetOffset() int32 {\n\tif m != nil && m.Offset != nil {\n\t\treturn *m.Offset\n\t}\n\treturn Default_CompiledQuery_Offset\n}\n\nfunc (m *CompiledQuery) GetLimit() int32 {\n\tif m != nil && m.Limit != nil {\n\t\treturn *m.Limit\n\t}\n\treturn 0\n}\n\nfunc (m *CompiledQuery) GetKeysOnly() bool {\n\tif m != nil && m.KeysOnly != nil {\n\t\treturn *m.KeysOnly\n\t}\n\treturn false\n}\n\nfunc (m *CompiledQuery) GetPropertyName() []string {\n\tif m != nil {\n\t\treturn m.PropertyName\n\t}\n\treturn nil\n}\n\nfunc (m *CompiledQuery) GetDistinctInfixSize() int32 {\n\tif m != nil && m.DistinctInfixSize != nil {\n\t\treturn *m.DistinctInfixSize\n\t}\n\treturn 0\n}\n\nfunc (m *CompiledQuery) GetEntityfilter() *CompiledQuery_EntityFilter {\n\tif m != nil {\n\t\treturn m.Entityfilter\n\t}\n\treturn nil\n}\n\ntype CompiledQuery_PrimaryScan struct {\n\tIndexName                  *string  `protobuf:\"bytes,2,opt,name=index_name,json=indexName\" json:\"index_name,omitempty\"`\n\tStartKey                   *string  `protobuf:\"bytes,3,opt,name=start_key,json=startKey\" json:\"start_key,omitempty\"`\n\tStartInclusive             *bool    `protobuf:\"varint,4,opt,name=start_inclusive,json=startInclusive\" json:\"start_inclusive,omitempty\"`\n\tEndKey                     *string  `protobuf:\"bytes,5,opt,name=end_key,json=endKey\" json:\"end_key,omitempty\"`\n\tEndInclusive               *bool    `protobuf:\"varint,6,opt,name=end_inclusive,json=endInclusive\" json:\"end_inclusive,omitempty\"`\n\tStartPostfixValue          []string `protobuf:\"bytes,22,rep,name=start_postfix_value,json=startPostfixValue\" json:\"start_postfix_value,omitempty\"`\n\tEndPostfixValue            []string `protobuf:\"bytes,23,rep,name=end_postfix_value,json=endPostfixValue\" json:\"end_postfix_value,omitempty\"`\n\tEndUnappliedLogTimestampUs *int64   `protobuf:\"varint,19,opt,name=end_unapplied_log_timestamp_us,json=endUnappliedLogTimestampUs\" json:\"end_unapplied_log_timestamp_us,omitempty\"`\n\tXXX_NoUnkeyedLiteral       struct{} `json:\"-\"`\n\tXXX_unrecognized           []byte   `json:\"-\"`\n\tXXX_sizecache              int32    `json:\"-\"`\n}\n\nfunc (m *CompiledQuery_PrimaryScan) Reset()         { *m = CompiledQuery_PrimaryScan{} }\nfunc (m *CompiledQuery_PrimaryScan) String() string { return proto.CompactTextString(m) }\nfunc (*CompiledQuery_PrimaryScan) ProtoMessage()    {}\nfunc (*CompiledQuery_PrimaryScan) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{16, 0}\n}\nfunc (m *CompiledQuery_PrimaryScan) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_CompiledQuery_PrimaryScan.Unmarshal(m, b)\n}\nfunc (m *CompiledQuery_PrimaryScan) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_CompiledQuery_PrimaryScan.Marshal(b, m, deterministic)\n}\nfunc (dst *CompiledQuery_PrimaryScan) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_CompiledQuery_PrimaryScan.Merge(dst, src)\n}\nfunc (m *CompiledQuery_PrimaryScan) XXX_Size() int {\n\treturn xxx_messageInfo_CompiledQuery_PrimaryScan.Size(m)\n}\nfunc (m *CompiledQuery_PrimaryScan) XXX_DiscardUnknown() {\n\txxx_messageInfo_CompiledQuery_PrimaryScan.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_CompiledQuery_PrimaryScan proto.InternalMessageInfo\n\nfunc (m *CompiledQuery_PrimaryScan) GetIndexName() string {\n\tif m != nil && m.IndexName != nil {\n\t\treturn *m.IndexName\n\t}\n\treturn \"\"\n}\n\nfunc (m *CompiledQuery_PrimaryScan) GetStartKey() string {\n\tif m != nil && m.StartKey != nil {\n\t\treturn *m.StartKey\n\t}\n\treturn \"\"\n}\n\nfunc (m *CompiledQuery_PrimaryScan) GetStartInclusive() bool {\n\tif m != nil && m.StartInclusive != nil {\n\t\treturn *m.StartInclusive\n\t}\n\treturn false\n}\n\nfunc (m *CompiledQuery_PrimaryScan) GetEndKey() string {\n\tif m != nil && m.EndKey != nil {\n\t\treturn *m.EndKey\n\t}\n\treturn \"\"\n}\n\nfunc (m *CompiledQuery_PrimaryScan) GetEndInclusive() bool {\n\tif m != nil && m.EndInclusive != nil {\n\t\treturn *m.EndInclusive\n\t}\n\treturn false\n}\n\nfunc (m *CompiledQuery_PrimaryScan) GetStartPostfixValue() []string {\n\tif m != nil {\n\t\treturn m.StartPostfixValue\n\t}\n\treturn nil\n}\n\nfunc (m *CompiledQuery_PrimaryScan) GetEndPostfixValue() []string {\n\tif m != nil {\n\t\treturn m.EndPostfixValue\n\t}\n\treturn nil\n}\n\nfunc (m *CompiledQuery_PrimaryScan) GetEndUnappliedLogTimestampUs() int64 {\n\tif m != nil && m.EndUnappliedLogTimestampUs != nil {\n\t\treturn *m.EndUnappliedLogTimestampUs\n\t}\n\treturn 0\n}\n\ntype CompiledQuery_MergeJoinScan struct {\n\tIndexName            *string  `protobuf:\"bytes,8,req,name=index_name,json=indexName\" json:\"index_name,omitempty\"`\n\tPrefixValue          []string `protobuf:\"bytes,9,rep,name=prefix_value,json=prefixValue\" json:\"prefix_value,omitempty\"`\n\tValuePrefix          *bool    `protobuf:\"varint,20,opt,name=value_prefix,json=valuePrefix,def=0\" json:\"value_prefix,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *CompiledQuery_MergeJoinScan) Reset()         { *m = CompiledQuery_MergeJoinScan{} }\nfunc (m *CompiledQuery_MergeJoinScan) String() string { return proto.CompactTextString(m) }\nfunc (*CompiledQuery_MergeJoinScan) ProtoMessage()    {}\nfunc (*CompiledQuery_MergeJoinScan) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{16, 1}\n}\nfunc (m *CompiledQuery_MergeJoinScan) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_CompiledQuery_MergeJoinScan.Unmarshal(m, b)\n}\nfunc (m *CompiledQuery_MergeJoinScan) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_CompiledQuery_MergeJoinScan.Marshal(b, m, deterministic)\n}\nfunc (dst *CompiledQuery_MergeJoinScan) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_CompiledQuery_MergeJoinScan.Merge(dst, src)\n}\nfunc (m *CompiledQuery_MergeJoinScan) XXX_Size() int {\n\treturn xxx_messageInfo_CompiledQuery_MergeJoinScan.Size(m)\n}\nfunc (m *CompiledQuery_MergeJoinScan) XXX_DiscardUnknown() {\n\txxx_messageInfo_CompiledQuery_MergeJoinScan.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_CompiledQuery_MergeJoinScan proto.InternalMessageInfo\n\nconst Default_CompiledQuery_MergeJoinScan_ValuePrefix bool = false\n\nfunc (m *CompiledQuery_MergeJoinScan) GetIndexName() string {\n\tif m != nil && m.IndexName != nil {\n\t\treturn *m.IndexName\n\t}\n\treturn \"\"\n}\n\nfunc (m *CompiledQuery_MergeJoinScan) GetPrefixValue() []string {\n\tif m != nil {\n\t\treturn m.PrefixValue\n\t}\n\treturn nil\n}\n\nfunc (m *CompiledQuery_MergeJoinScan) GetValuePrefix() bool {\n\tif m != nil && m.ValuePrefix != nil {\n\t\treturn *m.ValuePrefix\n\t}\n\treturn Default_CompiledQuery_MergeJoinScan_ValuePrefix\n}\n\ntype CompiledQuery_EntityFilter struct {\n\tDistinct             *bool      `protobuf:\"varint,14,opt,name=distinct,def=0\" json:\"distinct,omitempty\"`\n\tKind                 *string    `protobuf:\"bytes,17,opt,name=kind\" json:\"kind,omitempty\"`\n\tAncestor             *Reference `protobuf:\"bytes,18,opt,name=ancestor\" json:\"ancestor,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}   `json:\"-\"`\n\tXXX_unrecognized     []byte     `json:\"-\"`\n\tXXX_sizecache        int32      `json:\"-\"`\n}\n\nfunc (m *CompiledQuery_EntityFilter) Reset()         { *m = CompiledQuery_EntityFilter{} }\nfunc (m *CompiledQuery_EntityFilter) String() string { return proto.CompactTextString(m) }\nfunc (*CompiledQuery_EntityFilter) ProtoMessage()    {}\nfunc (*CompiledQuery_EntityFilter) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{16, 2}\n}\nfunc (m *CompiledQuery_EntityFilter) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_CompiledQuery_EntityFilter.Unmarshal(m, b)\n}\nfunc (m *CompiledQuery_EntityFilter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_CompiledQuery_EntityFilter.Marshal(b, m, deterministic)\n}\nfunc (dst *CompiledQuery_EntityFilter) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_CompiledQuery_EntityFilter.Merge(dst, src)\n}\nfunc (m *CompiledQuery_EntityFilter) XXX_Size() int {\n\treturn xxx_messageInfo_CompiledQuery_EntityFilter.Size(m)\n}\nfunc (m *CompiledQuery_EntityFilter) XXX_DiscardUnknown() {\n\txxx_messageInfo_CompiledQuery_EntityFilter.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_CompiledQuery_EntityFilter proto.InternalMessageInfo\n\nconst Default_CompiledQuery_EntityFilter_Distinct bool = false\n\nfunc (m *CompiledQuery_EntityFilter) GetDistinct() bool {\n\tif m != nil && m.Distinct != nil {\n\t\treturn *m.Distinct\n\t}\n\treturn Default_CompiledQuery_EntityFilter_Distinct\n}\n\nfunc (m *CompiledQuery_EntityFilter) GetKind() string {\n\tif m != nil && m.Kind != nil {\n\t\treturn *m.Kind\n\t}\n\treturn \"\"\n}\n\nfunc (m *CompiledQuery_EntityFilter) GetAncestor() *Reference {\n\tif m != nil {\n\t\treturn m.Ancestor\n\t}\n\treturn nil\n}\n\ntype CompiledCursor struct {\n\tPosition             *CompiledCursor_Position `protobuf:\"group,2,opt,name=Position,json=position\" json:\"position,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}                 `json:\"-\"`\n\tXXX_unrecognized     []byte                   `json:\"-\"`\n\tXXX_sizecache        int32                    `json:\"-\"`\n}\n\nfunc (m *CompiledCursor) Reset()         { *m = CompiledCursor{} }\nfunc (m *CompiledCursor) String() string { return proto.CompactTextString(m) }\nfunc (*CompiledCursor) ProtoMessage()    {}\nfunc (*CompiledCursor) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{17}\n}\nfunc (m *CompiledCursor) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_CompiledCursor.Unmarshal(m, b)\n}\nfunc (m *CompiledCursor) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_CompiledCursor.Marshal(b, m, deterministic)\n}\nfunc (dst *CompiledCursor) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_CompiledCursor.Merge(dst, src)\n}\nfunc (m *CompiledCursor) XXX_Size() int {\n\treturn xxx_messageInfo_CompiledCursor.Size(m)\n}\nfunc (m *CompiledCursor) XXX_DiscardUnknown() {\n\txxx_messageInfo_CompiledCursor.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_CompiledCursor proto.InternalMessageInfo\n\nfunc (m *CompiledCursor) GetPosition() *CompiledCursor_Position {\n\tif m != nil {\n\t\treturn m.Position\n\t}\n\treturn nil\n}\n\ntype CompiledCursor_Position struct {\n\tStartKey             *string                               `protobuf:\"bytes,27,opt,name=start_key,json=startKey\" json:\"start_key,omitempty\"`\n\tIndexvalue           []*CompiledCursor_Position_IndexValue `protobuf:\"group,29,rep,name=IndexValue,json=indexvalue\" json:\"indexvalue,omitempty\"`\n\tKey                  *Reference                            `protobuf:\"bytes,32,opt,name=key\" json:\"key,omitempty\"`\n\tStartInclusive       *bool                                 `protobuf:\"varint,28,opt,name=start_inclusive,json=startInclusive,def=1\" json:\"start_inclusive,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}                              `json:\"-\"`\n\tXXX_unrecognized     []byte                                `json:\"-\"`\n\tXXX_sizecache        int32                                 `json:\"-\"`\n}\n\nfunc (m *CompiledCursor_Position) Reset()         { *m = CompiledCursor_Position{} }\nfunc (m *CompiledCursor_Position) String() string { return proto.CompactTextString(m) }\nfunc (*CompiledCursor_Position) ProtoMessage()    {}\nfunc (*CompiledCursor_Position) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{17, 0}\n}\nfunc (m *CompiledCursor_Position) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_CompiledCursor_Position.Unmarshal(m, b)\n}\nfunc (m *CompiledCursor_Position) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_CompiledCursor_Position.Marshal(b, m, deterministic)\n}\nfunc (dst *CompiledCursor_Position) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_CompiledCursor_Position.Merge(dst, src)\n}\nfunc (m *CompiledCursor_Position) XXX_Size() int {\n\treturn xxx_messageInfo_CompiledCursor_Position.Size(m)\n}\nfunc (m *CompiledCursor_Position) XXX_DiscardUnknown() {\n\txxx_messageInfo_CompiledCursor_Position.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_CompiledCursor_Position proto.InternalMessageInfo\n\nconst Default_CompiledCursor_Position_StartInclusive bool = true\n\nfunc (m *CompiledCursor_Position) GetStartKey() string {\n\tif m != nil && m.StartKey != nil {\n\t\treturn *m.StartKey\n\t}\n\treturn \"\"\n}\n\nfunc (m *CompiledCursor_Position) GetIndexvalue() []*CompiledCursor_Position_IndexValue {\n\tif m != nil {\n\t\treturn m.Indexvalue\n\t}\n\treturn nil\n}\n\nfunc (m *CompiledCursor_Position) GetKey() *Reference {\n\tif m != nil {\n\t\treturn m.Key\n\t}\n\treturn nil\n}\n\nfunc (m *CompiledCursor_Position) GetStartInclusive() bool {\n\tif m != nil && m.StartInclusive != nil {\n\t\treturn *m.StartInclusive\n\t}\n\treturn Default_CompiledCursor_Position_StartInclusive\n}\n\ntype CompiledCursor_Position_IndexValue struct {\n\tProperty             *string        `protobuf:\"bytes,30,opt,name=property\" json:\"property,omitempty\"`\n\tValue                *PropertyValue `protobuf:\"bytes,31,req,name=value\" json:\"value,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}       `json:\"-\"`\n\tXXX_unrecognized     []byte         `json:\"-\"`\n\tXXX_sizecache        int32          `json:\"-\"`\n}\n\nfunc (m *CompiledCursor_Position_IndexValue) Reset()         { *m = CompiledCursor_Position_IndexValue{} }\nfunc (m *CompiledCursor_Position_IndexValue) String() string { return proto.CompactTextString(m) }\nfunc (*CompiledCursor_Position_IndexValue) ProtoMessage()    {}\nfunc (*CompiledCursor_Position_IndexValue) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{17, 0, 0}\n}\nfunc (m *CompiledCursor_Position_IndexValue) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_CompiledCursor_Position_IndexValue.Unmarshal(m, b)\n}\nfunc (m *CompiledCursor_Position_IndexValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_CompiledCursor_Position_IndexValue.Marshal(b, m, deterministic)\n}\nfunc (dst *CompiledCursor_Position_IndexValue) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_CompiledCursor_Position_IndexValue.Merge(dst, src)\n}\nfunc (m *CompiledCursor_Position_IndexValue) XXX_Size() int {\n\treturn xxx_messageInfo_CompiledCursor_Position_IndexValue.Size(m)\n}\nfunc (m *CompiledCursor_Position_IndexValue) XXX_DiscardUnknown() {\n\txxx_messageInfo_CompiledCursor_Position_IndexValue.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_CompiledCursor_Position_IndexValue proto.InternalMessageInfo\n\nfunc (m *CompiledCursor_Position_IndexValue) GetProperty() string {\n\tif m != nil && m.Property != nil {\n\t\treturn *m.Property\n\t}\n\treturn \"\"\n}\n\nfunc (m *CompiledCursor_Position_IndexValue) GetValue() *PropertyValue {\n\tif m != nil {\n\t\treturn m.Value\n\t}\n\treturn nil\n}\n\ntype Cursor struct {\n\tCursor               *uint64  `protobuf:\"fixed64,1,req,name=cursor\" json:\"cursor,omitempty\"`\n\tApp                  *string  `protobuf:\"bytes,2,opt,name=app\" json:\"app,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *Cursor) Reset()         { *m = Cursor{} }\nfunc (m *Cursor) String() string { return proto.CompactTextString(m) }\nfunc (*Cursor) ProtoMessage()    {}\nfunc (*Cursor) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{18}\n}\nfunc (m *Cursor) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_Cursor.Unmarshal(m, b)\n}\nfunc (m *Cursor) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_Cursor.Marshal(b, m, deterministic)\n}\nfunc (dst *Cursor) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Cursor.Merge(dst, src)\n}\nfunc (m *Cursor) XXX_Size() int {\n\treturn xxx_messageInfo_Cursor.Size(m)\n}\nfunc (m *Cursor) XXX_DiscardUnknown() {\n\txxx_messageInfo_Cursor.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Cursor proto.InternalMessageInfo\n\nfunc (m *Cursor) GetCursor() uint64 {\n\tif m != nil && m.Cursor != nil {\n\t\treturn *m.Cursor\n\t}\n\treturn 0\n}\n\nfunc (m *Cursor) GetApp() string {\n\tif m != nil && m.App != nil {\n\t\treturn *m.App\n\t}\n\treturn \"\"\n}\n\ntype Error struct {\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *Error) Reset()         { *m = Error{} }\nfunc (m *Error) String() string { return proto.CompactTextString(m) }\nfunc (*Error) ProtoMessage()    {}\nfunc (*Error) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{19}\n}\nfunc (m *Error) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_Error.Unmarshal(m, b)\n}\nfunc (m *Error) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_Error.Marshal(b, m, deterministic)\n}\nfunc (dst *Error) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Error.Merge(dst, src)\n}\nfunc (m *Error) XXX_Size() int {\n\treturn xxx_messageInfo_Error.Size(m)\n}\nfunc (m *Error) XXX_DiscardUnknown() {\n\txxx_messageInfo_Error.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Error proto.InternalMessageInfo\n\ntype Cost struct {\n\tIndexWrites             *int32           `protobuf:\"varint,1,opt,name=index_writes,json=indexWrites\" json:\"index_writes,omitempty\"`\n\tIndexWriteBytes         *int32           `protobuf:\"varint,2,opt,name=index_write_bytes,json=indexWriteBytes\" json:\"index_write_bytes,omitempty\"`\n\tEntityWrites            *int32           `protobuf:\"varint,3,opt,name=entity_writes,json=entityWrites\" json:\"entity_writes,omitempty\"`\n\tEntityWriteBytes        *int32           `protobuf:\"varint,4,opt,name=entity_write_bytes,json=entityWriteBytes\" json:\"entity_write_bytes,omitempty\"`\n\tCommitcost              *Cost_CommitCost `protobuf:\"group,5,opt,name=CommitCost,json=commitcost\" json:\"commitcost,omitempty\"`\n\tApproximateStorageDelta *int32           `protobuf:\"varint,8,opt,name=approximate_storage_delta,json=approximateStorageDelta\" json:\"approximate_storage_delta,omitempty\"`\n\tIdSequenceUpdates       *int32           `protobuf:\"varint,9,opt,name=id_sequence_updates,json=idSequenceUpdates\" json:\"id_sequence_updates,omitempty\"`\n\tXXX_NoUnkeyedLiteral    struct{}         `json:\"-\"`\n\tXXX_unrecognized        []byte           `json:\"-\"`\n\tXXX_sizecache           int32            `json:\"-\"`\n}\n\nfunc (m *Cost) Reset()         { *m = Cost{} }\nfunc (m *Cost) String() string { return proto.CompactTextString(m) }\nfunc (*Cost) ProtoMessage()    {}\nfunc (*Cost) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{20}\n}\nfunc (m *Cost) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_Cost.Unmarshal(m, b)\n}\nfunc (m *Cost) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_Cost.Marshal(b, m, deterministic)\n}\nfunc (dst *Cost) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Cost.Merge(dst, src)\n}\nfunc (m *Cost) XXX_Size() int {\n\treturn xxx_messageInfo_Cost.Size(m)\n}\nfunc (m *Cost) XXX_DiscardUnknown() {\n\txxx_messageInfo_Cost.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Cost proto.InternalMessageInfo\n\nfunc (m *Cost) GetIndexWrites() int32 {\n\tif m != nil && m.IndexWrites != nil {\n\t\treturn *m.IndexWrites\n\t}\n\treturn 0\n}\n\nfunc (m *Cost) GetIndexWriteBytes() int32 {\n\tif m != nil && m.IndexWriteBytes != nil {\n\t\treturn *m.IndexWriteBytes\n\t}\n\treturn 0\n}\n\nfunc (m *Cost) GetEntityWrites() int32 {\n\tif m != nil && m.EntityWrites != nil {\n\t\treturn *m.EntityWrites\n\t}\n\treturn 0\n}\n\nfunc (m *Cost) GetEntityWriteBytes() int32 {\n\tif m != nil && m.EntityWriteBytes != nil {\n\t\treturn *m.EntityWriteBytes\n\t}\n\treturn 0\n}\n\nfunc (m *Cost) GetCommitcost() *Cost_CommitCost {\n\tif m != nil {\n\t\treturn m.Commitcost\n\t}\n\treturn nil\n}\n\nfunc (m *Cost) GetApproximateStorageDelta() int32 {\n\tif m != nil && m.ApproximateStorageDelta != nil {\n\t\treturn *m.ApproximateStorageDelta\n\t}\n\treturn 0\n}\n\nfunc (m *Cost) GetIdSequenceUpdates() int32 {\n\tif m != nil && m.IdSequenceUpdates != nil {\n\t\treturn *m.IdSequenceUpdates\n\t}\n\treturn 0\n}\n\ntype Cost_CommitCost struct {\n\tRequestedEntityPuts    *int32   `protobuf:\"varint,6,opt,name=requested_entity_puts,json=requestedEntityPuts\" json:\"requested_entity_puts,omitempty\"`\n\tRequestedEntityDeletes *int32   `protobuf:\"varint,7,opt,name=requested_entity_deletes,json=requestedEntityDeletes\" json:\"requested_entity_deletes,omitempty\"`\n\tXXX_NoUnkeyedLiteral   struct{} `json:\"-\"`\n\tXXX_unrecognized       []byte   `json:\"-\"`\n\tXXX_sizecache          int32    `json:\"-\"`\n}\n\nfunc (m *Cost_CommitCost) Reset()         { *m = Cost_CommitCost{} }\nfunc (m *Cost_CommitCost) String() string { return proto.CompactTextString(m) }\nfunc (*Cost_CommitCost) ProtoMessage()    {}\nfunc (*Cost_CommitCost) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{20, 0}\n}\nfunc (m *Cost_CommitCost) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_Cost_CommitCost.Unmarshal(m, b)\n}\nfunc (m *Cost_CommitCost) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_Cost_CommitCost.Marshal(b, m, deterministic)\n}\nfunc (dst *Cost_CommitCost) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Cost_CommitCost.Merge(dst, src)\n}\nfunc (m *Cost_CommitCost) XXX_Size() int {\n\treturn xxx_messageInfo_Cost_CommitCost.Size(m)\n}\nfunc (m *Cost_CommitCost) XXX_DiscardUnknown() {\n\txxx_messageInfo_Cost_CommitCost.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Cost_CommitCost proto.InternalMessageInfo\n\nfunc (m *Cost_CommitCost) GetRequestedEntityPuts() int32 {\n\tif m != nil && m.RequestedEntityPuts != nil {\n\t\treturn *m.RequestedEntityPuts\n\t}\n\treturn 0\n}\n\nfunc (m *Cost_CommitCost) GetRequestedEntityDeletes() int32 {\n\tif m != nil && m.RequestedEntityDeletes != nil {\n\t\treturn *m.RequestedEntityDeletes\n\t}\n\treturn 0\n}\n\ntype GetRequest struct {\n\tHeader               *InternalHeader `protobuf:\"bytes,6,opt,name=header\" json:\"header,omitempty\"`\n\tKey                  []*Reference    `protobuf:\"bytes,1,rep,name=key\" json:\"key,omitempty\"`\n\tTransaction          *Transaction    `protobuf:\"bytes,2,opt,name=transaction\" json:\"transaction,omitempty\"`\n\tFailoverMs           *int64          `protobuf:\"varint,3,opt,name=failover_ms,json=failoverMs\" json:\"failover_ms,omitempty\"`\n\tStrong               *bool           `protobuf:\"varint,4,opt,name=strong\" json:\"strong,omitempty\"`\n\tAllowDeferred        *bool           `protobuf:\"varint,5,opt,name=allow_deferred,json=allowDeferred,def=0\" json:\"allow_deferred,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}        `json:\"-\"`\n\tXXX_unrecognized     []byte          `json:\"-\"`\n\tXXX_sizecache        int32           `json:\"-\"`\n}\n\nfunc (m *GetRequest) Reset()         { *m = GetRequest{} }\nfunc (m *GetRequest) String() string { return proto.CompactTextString(m) }\nfunc (*GetRequest) ProtoMessage()    {}\nfunc (*GetRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{21}\n}\nfunc (m *GetRequest) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_GetRequest.Unmarshal(m, b)\n}\nfunc (m *GetRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_GetRequest.Marshal(b, m, deterministic)\n}\nfunc (dst *GetRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_GetRequest.Merge(dst, src)\n}\nfunc (m *GetRequest) XXX_Size() int {\n\treturn xxx_messageInfo_GetRequest.Size(m)\n}\nfunc (m *GetRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_GetRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_GetRequest proto.InternalMessageInfo\n\nconst Default_GetRequest_AllowDeferred bool = false\n\nfunc (m *GetRequest) GetHeader() *InternalHeader {\n\tif m != nil {\n\t\treturn m.Header\n\t}\n\treturn nil\n}\n\nfunc (m *GetRequest) GetKey() []*Reference {\n\tif m != nil {\n\t\treturn m.Key\n\t}\n\treturn nil\n}\n\nfunc (m *GetRequest) GetTransaction() *Transaction {\n\tif m != nil {\n\t\treturn m.Transaction\n\t}\n\treturn nil\n}\n\nfunc (m *GetRequest) GetFailoverMs() int64 {\n\tif m != nil && m.FailoverMs != nil {\n\t\treturn *m.FailoverMs\n\t}\n\treturn 0\n}\n\nfunc (m *GetRequest) GetStrong() bool {\n\tif m != nil && m.Strong != nil {\n\t\treturn *m.Strong\n\t}\n\treturn false\n}\n\nfunc (m *GetRequest) GetAllowDeferred() bool {\n\tif m != nil && m.AllowDeferred != nil {\n\t\treturn *m.AllowDeferred\n\t}\n\treturn Default_GetRequest_AllowDeferred\n}\n\ntype GetResponse struct {\n\tEntity               []*GetResponse_Entity `protobuf:\"group,1,rep,name=Entity,json=entity\" json:\"entity,omitempty\"`\n\tDeferred             []*Reference          `protobuf:\"bytes,5,rep,name=deferred\" json:\"deferred,omitempty\"`\n\tInOrder              *bool                 `protobuf:\"varint,6,opt,name=in_order,json=inOrder,def=1\" json:\"in_order,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}              `json:\"-\"`\n\tXXX_unrecognized     []byte                `json:\"-\"`\n\tXXX_sizecache        int32                 `json:\"-\"`\n}\n\nfunc (m *GetResponse) Reset()         { *m = GetResponse{} }\nfunc (m *GetResponse) String() string { return proto.CompactTextString(m) }\nfunc (*GetResponse) ProtoMessage()    {}\nfunc (*GetResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{22}\n}\nfunc (m *GetResponse) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_GetResponse.Unmarshal(m, b)\n}\nfunc (m *GetResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_GetResponse.Marshal(b, m, deterministic)\n}\nfunc (dst *GetResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_GetResponse.Merge(dst, src)\n}\nfunc (m *GetResponse) XXX_Size() int {\n\treturn xxx_messageInfo_GetResponse.Size(m)\n}\nfunc (m *GetResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_GetResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_GetResponse proto.InternalMessageInfo\n\nconst Default_GetResponse_InOrder bool = true\n\nfunc (m *GetResponse) GetEntity() []*GetResponse_Entity {\n\tif m != nil {\n\t\treturn m.Entity\n\t}\n\treturn nil\n}\n\nfunc (m *GetResponse) GetDeferred() []*Reference {\n\tif m != nil {\n\t\treturn m.Deferred\n\t}\n\treturn nil\n}\n\nfunc (m *GetResponse) GetInOrder() bool {\n\tif m != nil && m.InOrder != nil {\n\t\treturn *m.InOrder\n\t}\n\treturn Default_GetResponse_InOrder\n}\n\ntype GetResponse_Entity struct {\n\tEntity               *EntityProto `protobuf:\"bytes,2,opt,name=entity\" json:\"entity,omitempty\"`\n\tKey                  *Reference   `protobuf:\"bytes,4,opt,name=key\" json:\"key,omitempty\"`\n\tVersion              *int64       `protobuf:\"varint,3,opt,name=version\" json:\"version,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}     `json:\"-\"`\n\tXXX_unrecognized     []byte       `json:\"-\"`\n\tXXX_sizecache        int32        `json:\"-\"`\n}\n\nfunc (m *GetResponse_Entity) Reset()         { *m = GetResponse_Entity{} }\nfunc (m *GetResponse_Entity) String() string { return proto.CompactTextString(m) }\nfunc (*GetResponse_Entity) ProtoMessage()    {}\nfunc (*GetResponse_Entity) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{22, 0}\n}\nfunc (m *GetResponse_Entity) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_GetResponse_Entity.Unmarshal(m, b)\n}\nfunc (m *GetResponse_Entity) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_GetResponse_Entity.Marshal(b, m, deterministic)\n}\nfunc (dst *GetResponse_Entity) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_GetResponse_Entity.Merge(dst, src)\n}\nfunc (m *GetResponse_Entity) XXX_Size() int {\n\treturn xxx_messageInfo_GetResponse_Entity.Size(m)\n}\nfunc (m *GetResponse_Entity) XXX_DiscardUnknown() {\n\txxx_messageInfo_GetResponse_Entity.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_GetResponse_Entity proto.InternalMessageInfo\n\nfunc (m *GetResponse_Entity) GetEntity() *EntityProto {\n\tif m != nil {\n\t\treturn m.Entity\n\t}\n\treturn nil\n}\n\nfunc (m *GetResponse_Entity) GetKey() *Reference {\n\tif m != nil {\n\t\treturn m.Key\n\t}\n\treturn nil\n}\n\nfunc (m *GetResponse_Entity) GetVersion() int64 {\n\tif m != nil && m.Version != nil {\n\t\treturn *m.Version\n\t}\n\treturn 0\n}\n\ntype PutRequest struct {\n\tHeader               *InternalHeader          `protobuf:\"bytes,11,opt,name=header\" json:\"header,omitempty\"`\n\tEntity               []*EntityProto           `protobuf:\"bytes,1,rep,name=entity\" json:\"entity,omitempty\"`\n\tTransaction          *Transaction             `protobuf:\"bytes,2,opt,name=transaction\" json:\"transaction,omitempty\"`\n\tCompositeIndex       []*CompositeIndex        `protobuf:\"bytes,3,rep,name=composite_index,json=compositeIndex\" json:\"composite_index,omitempty\"`\n\tTrusted              *bool                    `protobuf:\"varint,4,opt,name=trusted,def=0\" json:\"trusted,omitempty\"`\n\tForce                *bool                    `protobuf:\"varint,7,opt,name=force,def=0\" json:\"force,omitempty\"`\n\tMarkChanges          *bool                    `protobuf:\"varint,8,opt,name=mark_changes,json=markChanges,def=0\" json:\"mark_changes,omitempty\"`\n\tSnapshot             []*Snapshot              `protobuf:\"bytes,9,rep,name=snapshot\" json:\"snapshot,omitempty\"`\n\tAutoIdPolicy         *PutRequest_AutoIdPolicy `protobuf:\"varint,10,opt,name=auto_id_policy,json=autoIdPolicy,enum=appengine.PutRequest_AutoIdPolicy,def=0\" json:\"auto_id_policy,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}                 `json:\"-\"`\n\tXXX_unrecognized     []byte                   `json:\"-\"`\n\tXXX_sizecache        int32                    `json:\"-\"`\n}\n\nfunc (m *PutRequest) Reset()         { *m = PutRequest{} }\nfunc (m *PutRequest) String() string { return proto.CompactTextString(m) }\nfunc (*PutRequest) ProtoMessage()    {}\nfunc (*PutRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{23}\n}\nfunc (m *PutRequest) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_PutRequest.Unmarshal(m, b)\n}\nfunc (m *PutRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_PutRequest.Marshal(b, m, deterministic)\n}\nfunc (dst *PutRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_PutRequest.Merge(dst, src)\n}\nfunc (m *PutRequest) XXX_Size() int {\n\treturn xxx_messageInfo_PutRequest.Size(m)\n}\nfunc (m *PutRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_PutRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_PutRequest proto.InternalMessageInfo\n\nconst Default_PutRequest_Trusted bool = false\nconst Default_PutRequest_Force bool = false\nconst Default_PutRequest_MarkChanges bool = false\nconst Default_PutRequest_AutoIdPolicy PutRequest_AutoIdPolicy = PutRequest_CURRENT\n\nfunc (m *PutRequest) GetHeader() *InternalHeader {\n\tif m != nil {\n\t\treturn m.Header\n\t}\n\treturn nil\n}\n\nfunc (m *PutRequest) GetEntity() []*EntityProto {\n\tif m != nil {\n\t\treturn m.Entity\n\t}\n\treturn nil\n}\n\nfunc (m *PutRequest) GetTransaction() *Transaction {\n\tif m != nil {\n\t\treturn m.Transaction\n\t}\n\treturn nil\n}\n\nfunc (m *PutRequest) GetCompositeIndex() []*CompositeIndex {\n\tif m != nil {\n\t\treturn m.CompositeIndex\n\t}\n\treturn nil\n}\n\nfunc (m *PutRequest) GetTrusted() bool {\n\tif m != nil && m.Trusted != nil {\n\t\treturn *m.Trusted\n\t}\n\treturn Default_PutRequest_Trusted\n}\n\nfunc (m *PutRequest) GetForce() bool {\n\tif m != nil && m.Force != nil {\n\t\treturn *m.Force\n\t}\n\treturn Default_PutRequest_Force\n}\n\nfunc (m *PutRequest) GetMarkChanges() bool {\n\tif m != nil && m.MarkChanges != nil {\n\t\treturn *m.MarkChanges\n\t}\n\treturn Default_PutRequest_MarkChanges\n}\n\nfunc (m *PutRequest) GetSnapshot() []*Snapshot {\n\tif m != nil {\n\t\treturn m.Snapshot\n\t}\n\treturn nil\n}\n\nfunc (m *PutRequest) GetAutoIdPolicy() PutRequest_AutoIdPolicy {\n\tif m != nil && m.AutoIdPolicy != nil {\n\t\treturn *m.AutoIdPolicy\n\t}\n\treturn Default_PutRequest_AutoIdPolicy\n}\n\ntype PutResponse struct {\n\tKey                  []*Reference `protobuf:\"bytes,1,rep,name=key\" json:\"key,omitempty\"`\n\tCost                 *Cost        `protobuf:\"bytes,2,opt,name=cost\" json:\"cost,omitempty\"`\n\tVersion              []int64      `protobuf:\"varint,3,rep,name=version\" json:\"version,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}     `json:\"-\"`\n\tXXX_unrecognized     []byte       `json:\"-\"`\n\tXXX_sizecache        int32        `json:\"-\"`\n}\n\nfunc (m *PutResponse) Reset()         { *m = PutResponse{} }\nfunc (m *PutResponse) String() string { return proto.CompactTextString(m) }\nfunc (*PutResponse) ProtoMessage()    {}\nfunc (*PutResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{24}\n}\nfunc (m *PutResponse) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_PutResponse.Unmarshal(m, b)\n}\nfunc (m *PutResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_PutResponse.Marshal(b, m, deterministic)\n}\nfunc (dst *PutResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_PutResponse.Merge(dst, src)\n}\nfunc (m *PutResponse) XXX_Size() int {\n\treturn xxx_messageInfo_PutResponse.Size(m)\n}\nfunc (m *PutResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_PutResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_PutResponse proto.InternalMessageInfo\n\nfunc (m *PutResponse) GetKey() []*Reference {\n\tif m != nil {\n\t\treturn m.Key\n\t}\n\treturn nil\n}\n\nfunc (m *PutResponse) GetCost() *Cost {\n\tif m != nil {\n\t\treturn m.Cost\n\t}\n\treturn nil\n}\n\nfunc (m *PutResponse) GetVersion() []int64 {\n\tif m != nil {\n\t\treturn m.Version\n\t}\n\treturn nil\n}\n\ntype TouchRequest struct {\n\tHeader               *InternalHeader   `protobuf:\"bytes,10,opt,name=header\" json:\"header,omitempty\"`\n\tKey                  []*Reference      `protobuf:\"bytes,1,rep,name=key\" json:\"key,omitempty\"`\n\tCompositeIndex       []*CompositeIndex `protobuf:\"bytes,2,rep,name=composite_index,json=compositeIndex\" json:\"composite_index,omitempty\"`\n\tForce                *bool             `protobuf:\"varint,3,opt,name=force,def=0\" json:\"force,omitempty\"`\n\tSnapshot             []*Snapshot       `protobuf:\"bytes,9,rep,name=snapshot\" json:\"snapshot,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}          `json:\"-\"`\n\tXXX_unrecognized     []byte            `json:\"-\"`\n\tXXX_sizecache        int32             `json:\"-\"`\n}\n\nfunc (m *TouchRequest) Reset()         { *m = TouchRequest{} }\nfunc (m *TouchRequest) String() string { return proto.CompactTextString(m) }\nfunc (*TouchRequest) ProtoMessage()    {}\nfunc (*TouchRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{25}\n}\nfunc (m *TouchRequest) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_TouchRequest.Unmarshal(m, b)\n}\nfunc (m *TouchRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_TouchRequest.Marshal(b, m, deterministic)\n}\nfunc (dst *TouchRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_TouchRequest.Merge(dst, src)\n}\nfunc (m *TouchRequest) XXX_Size() int {\n\treturn xxx_messageInfo_TouchRequest.Size(m)\n}\nfunc (m *TouchRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_TouchRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_TouchRequest proto.InternalMessageInfo\n\nconst Default_TouchRequest_Force bool = false\n\nfunc (m *TouchRequest) GetHeader() *InternalHeader {\n\tif m != nil {\n\t\treturn m.Header\n\t}\n\treturn nil\n}\n\nfunc (m *TouchRequest) GetKey() []*Reference {\n\tif m != nil {\n\t\treturn m.Key\n\t}\n\treturn nil\n}\n\nfunc (m *TouchRequest) GetCompositeIndex() []*CompositeIndex {\n\tif m != nil {\n\t\treturn m.CompositeIndex\n\t}\n\treturn nil\n}\n\nfunc (m *TouchRequest) GetForce() bool {\n\tif m != nil && m.Force != nil {\n\t\treturn *m.Force\n\t}\n\treturn Default_TouchRequest_Force\n}\n\nfunc (m *TouchRequest) GetSnapshot() []*Snapshot {\n\tif m != nil {\n\t\treturn m.Snapshot\n\t}\n\treturn nil\n}\n\ntype TouchResponse struct {\n\tCost                 *Cost    `protobuf:\"bytes,1,opt,name=cost\" json:\"cost,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *TouchResponse) Reset()         { *m = TouchResponse{} }\nfunc (m *TouchResponse) String() string { return proto.CompactTextString(m) }\nfunc (*TouchResponse) ProtoMessage()    {}\nfunc (*TouchResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{26}\n}\nfunc (m *TouchResponse) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_TouchResponse.Unmarshal(m, b)\n}\nfunc (m *TouchResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_TouchResponse.Marshal(b, m, deterministic)\n}\nfunc (dst *TouchResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_TouchResponse.Merge(dst, src)\n}\nfunc (m *TouchResponse) XXX_Size() int {\n\treturn xxx_messageInfo_TouchResponse.Size(m)\n}\nfunc (m *TouchResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_TouchResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_TouchResponse proto.InternalMessageInfo\n\nfunc (m *TouchResponse) GetCost() *Cost {\n\tif m != nil {\n\t\treturn m.Cost\n\t}\n\treturn nil\n}\n\ntype DeleteRequest struct {\n\tHeader               *InternalHeader `protobuf:\"bytes,10,opt,name=header\" json:\"header,omitempty\"`\n\tKey                  []*Reference    `protobuf:\"bytes,6,rep,name=key\" json:\"key,omitempty\"`\n\tTransaction          *Transaction    `protobuf:\"bytes,5,opt,name=transaction\" json:\"transaction,omitempty\"`\n\tTrusted              *bool           `protobuf:\"varint,4,opt,name=trusted,def=0\" json:\"trusted,omitempty\"`\n\tForce                *bool           `protobuf:\"varint,7,opt,name=force,def=0\" json:\"force,omitempty\"`\n\tMarkChanges          *bool           `protobuf:\"varint,8,opt,name=mark_changes,json=markChanges,def=0\" json:\"mark_changes,omitempty\"`\n\tSnapshot             []*Snapshot     `protobuf:\"bytes,9,rep,name=snapshot\" json:\"snapshot,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}        `json:\"-\"`\n\tXXX_unrecognized     []byte          `json:\"-\"`\n\tXXX_sizecache        int32           `json:\"-\"`\n}\n\nfunc (m *DeleteRequest) Reset()         { *m = DeleteRequest{} }\nfunc (m *DeleteRequest) String() string { return proto.CompactTextString(m) }\nfunc (*DeleteRequest) ProtoMessage()    {}\nfunc (*DeleteRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{27}\n}\nfunc (m *DeleteRequest) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_DeleteRequest.Unmarshal(m, b)\n}\nfunc (m *DeleteRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_DeleteRequest.Marshal(b, m, deterministic)\n}\nfunc (dst *DeleteRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_DeleteRequest.Merge(dst, src)\n}\nfunc (m *DeleteRequest) XXX_Size() int {\n\treturn xxx_messageInfo_DeleteRequest.Size(m)\n}\nfunc (m *DeleteRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_DeleteRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_DeleteRequest proto.InternalMessageInfo\n\nconst Default_DeleteRequest_Trusted bool = false\nconst Default_DeleteRequest_Force bool = false\nconst Default_DeleteRequest_MarkChanges bool = false\n\nfunc (m *DeleteRequest) GetHeader() *InternalHeader {\n\tif m != nil {\n\t\treturn m.Header\n\t}\n\treturn nil\n}\n\nfunc (m *DeleteRequest) GetKey() []*Reference {\n\tif m != nil {\n\t\treturn m.Key\n\t}\n\treturn nil\n}\n\nfunc (m *DeleteRequest) GetTransaction() *Transaction {\n\tif m != nil {\n\t\treturn m.Transaction\n\t}\n\treturn nil\n}\n\nfunc (m *DeleteRequest) GetTrusted() bool {\n\tif m != nil && m.Trusted != nil {\n\t\treturn *m.Trusted\n\t}\n\treturn Default_DeleteRequest_Trusted\n}\n\nfunc (m *DeleteRequest) GetForce() bool {\n\tif m != nil && m.Force != nil {\n\t\treturn *m.Force\n\t}\n\treturn Default_DeleteRequest_Force\n}\n\nfunc (m *DeleteRequest) GetMarkChanges() bool {\n\tif m != nil && m.MarkChanges != nil {\n\t\treturn *m.MarkChanges\n\t}\n\treturn Default_DeleteRequest_MarkChanges\n}\n\nfunc (m *DeleteRequest) GetSnapshot() []*Snapshot {\n\tif m != nil {\n\t\treturn m.Snapshot\n\t}\n\treturn nil\n}\n\ntype DeleteResponse struct {\n\tCost                 *Cost    `protobuf:\"bytes,1,opt,name=cost\" json:\"cost,omitempty\"`\n\tVersion              []int64  `protobuf:\"varint,3,rep,name=version\" json:\"version,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *DeleteResponse) Reset()         { *m = DeleteResponse{} }\nfunc (m *DeleteResponse) String() string { return proto.CompactTextString(m) }\nfunc (*DeleteResponse) ProtoMessage()    {}\nfunc (*DeleteResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{28}\n}\nfunc (m *DeleteResponse) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_DeleteResponse.Unmarshal(m, b)\n}\nfunc (m *DeleteResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_DeleteResponse.Marshal(b, m, deterministic)\n}\nfunc (dst *DeleteResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_DeleteResponse.Merge(dst, src)\n}\nfunc (m *DeleteResponse) XXX_Size() int {\n\treturn xxx_messageInfo_DeleteResponse.Size(m)\n}\nfunc (m *DeleteResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_DeleteResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_DeleteResponse proto.InternalMessageInfo\n\nfunc (m *DeleteResponse) GetCost() *Cost {\n\tif m != nil {\n\t\treturn m.Cost\n\t}\n\treturn nil\n}\n\nfunc (m *DeleteResponse) GetVersion() []int64 {\n\tif m != nil {\n\t\treturn m.Version\n\t}\n\treturn nil\n}\n\ntype NextRequest struct {\n\tHeader               *InternalHeader `protobuf:\"bytes,5,opt,name=header\" json:\"header,omitempty\"`\n\tCursor               *Cursor         `protobuf:\"bytes,1,req,name=cursor\" json:\"cursor,omitempty\"`\n\tCount                *int32          `protobuf:\"varint,2,opt,name=count\" json:\"count,omitempty\"`\n\tOffset               *int32          `protobuf:\"varint,4,opt,name=offset,def=0\" json:\"offset,omitempty\"`\n\tCompile              *bool           `protobuf:\"varint,3,opt,name=compile,def=0\" json:\"compile,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}        `json:\"-\"`\n\tXXX_unrecognized     []byte          `json:\"-\"`\n\tXXX_sizecache        int32           `json:\"-\"`\n}\n\nfunc (m *NextRequest) Reset()         { *m = NextRequest{} }\nfunc (m *NextRequest) String() string { return proto.CompactTextString(m) }\nfunc (*NextRequest) ProtoMessage()    {}\nfunc (*NextRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{29}\n}\nfunc (m *NextRequest) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_NextRequest.Unmarshal(m, b)\n}\nfunc (m *NextRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_NextRequest.Marshal(b, m, deterministic)\n}\nfunc (dst *NextRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_NextRequest.Merge(dst, src)\n}\nfunc (m *NextRequest) XXX_Size() int {\n\treturn xxx_messageInfo_NextRequest.Size(m)\n}\nfunc (m *NextRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_NextRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_NextRequest proto.InternalMessageInfo\n\nconst Default_NextRequest_Offset int32 = 0\nconst Default_NextRequest_Compile bool = false\n\nfunc (m *NextRequest) GetHeader() *InternalHeader {\n\tif m != nil {\n\t\treturn m.Header\n\t}\n\treturn nil\n}\n\nfunc (m *NextRequest) GetCursor() *Cursor {\n\tif m != nil {\n\t\treturn m.Cursor\n\t}\n\treturn nil\n}\n\nfunc (m *NextRequest) GetCount() int32 {\n\tif m != nil && m.Count != nil {\n\t\treturn *m.Count\n\t}\n\treturn 0\n}\n\nfunc (m *NextRequest) GetOffset() int32 {\n\tif m != nil && m.Offset != nil {\n\t\treturn *m.Offset\n\t}\n\treturn Default_NextRequest_Offset\n}\n\nfunc (m *NextRequest) GetCompile() bool {\n\tif m != nil && m.Compile != nil {\n\t\treturn *m.Compile\n\t}\n\treturn Default_NextRequest_Compile\n}\n\ntype QueryResult struct {\n\tCursor               *Cursor           `protobuf:\"bytes,1,opt,name=cursor\" json:\"cursor,omitempty\"`\n\tResult               []*EntityProto    `protobuf:\"bytes,2,rep,name=result\" json:\"result,omitempty\"`\n\tSkippedResults       *int32            `protobuf:\"varint,7,opt,name=skipped_results,json=skippedResults\" json:\"skipped_results,omitempty\"`\n\tMoreResults          *bool             `protobuf:\"varint,3,req,name=more_results,json=moreResults\" json:\"more_results,omitempty\"`\n\tKeysOnly             *bool             `protobuf:\"varint,4,opt,name=keys_only,json=keysOnly\" json:\"keys_only,omitempty\"`\n\tIndexOnly            *bool             `protobuf:\"varint,9,opt,name=index_only,json=indexOnly\" json:\"index_only,omitempty\"`\n\tSmallOps             *bool             `protobuf:\"varint,10,opt,name=small_ops,json=smallOps\" json:\"small_ops,omitempty\"`\n\tCompiledQuery        *CompiledQuery    `protobuf:\"bytes,5,opt,name=compiled_query,json=compiledQuery\" json:\"compiled_query,omitempty\"`\n\tCompiledCursor       *CompiledCursor   `protobuf:\"bytes,6,opt,name=compiled_cursor,json=compiledCursor\" json:\"compiled_cursor,omitempty\"`\n\tIndex                []*CompositeIndex `protobuf:\"bytes,8,rep,name=index\" json:\"index,omitempty\"`\n\tVersion              []int64           `protobuf:\"varint,11,rep,name=version\" json:\"version,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}          `json:\"-\"`\n\tXXX_unrecognized     []byte            `json:\"-\"`\n\tXXX_sizecache        int32             `json:\"-\"`\n}\n\nfunc (m *QueryResult) Reset()         { *m = QueryResult{} }\nfunc (m *QueryResult) String() string { return proto.CompactTextString(m) }\nfunc (*QueryResult) ProtoMessage()    {}\nfunc (*QueryResult) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{30}\n}\nfunc (m *QueryResult) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_QueryResult.Unmarshal(m, b)\n}\nfunc (m *QueryResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_QueryResult.Marshal(b, m, deterministic)\n}\nfunc (dst *QueryResult) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_QueryResult.Merge(dst, src)\n}\nfunc (m *QueryResult) XXX_Size() int {\n\treturn xxx_messageInfo_QueryResult.Size(m)\n}\nfunc (m *QueryResult) XXX_DiscardUnknown() {\n\txxx_messageInfo_QueryResult.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_QueryResult proto.InternalMessageInfo\n\nfunc (m *QueryResult) GetCursor() *Cursor {\n\tif m != nil {\n\t\treturn m.Cursor\n\t}\n\treturn nil\n}\n\nfunc (m *QueryResult) GetResult() []*EntityProto {\n\tif m != nil {\n\t\treturn m.Result\n\t}\n\treturn nil\n}\n\nfunc (m *QueryResult) GetSkippedResults() int32 {\n\tif m != nil && m.SkippedResults != nil {\n\t\treturn *m.SkippedResults\n\t}\n\treturn 0\n}\n\nfunc (m *QueryResult) GetMoreResults() bool {\n\tif m != nil && m.MoreResults != nil {\n\t\treturn *m.MoreResults\n\t}\n\treturn false\n}\n\nfunc (m *QueryResult) GetKeysOnly() bool {\n\tif m != nil && m.KeysOnly != nil {\n\t\treturn *m.KeysOnly\n\t}\n\treturn false\n}\n\nfunc (m *QueryResult) GetIndexOnly() bool {\n\tif m != nil && m.IndexOnly != nil {\n\t\treturn *m.IndexOnly\n\t}\n\treturn false\n}\n\nfunc (m *QueryResult) GetSmallOps() bool {\n\tif m != nil && m.SmallOps != nil {\n\t\treturn *m.SmallOps\n\t}\n\treturn false\n}\n\nfunc (m *QueryResult) GetCompiledQuery() *CompiledQuery {\n\tif m != nil {\n\t\treturn m.CompiledQuery\n\t}\n\treturn nil\n}\n\nfunc (m *QueryResult) GetCompiledCursor() *CompiledCursor {\n\tif m != nil {\n\t\treturn m.CompiledCursor\n\t}\n\treturn nil\n}\n\nfunc (m *QueryResult) GetIndex() []*CompositeIndex {\n\tif m != nil {\n\t\treturn m.Index\n\t}\n\treturn nil\n}\n\nfunc (m *QueryResult) GetVersion() []int64 {\n\tif m != nil {\n\t\treturn m.Version\n\t}\n\treturn nil\n}\n\ntype AllocateIdsRequest struct {\n\tHeader               *InternalHeader `protobuf:\"bytes,4,opt,name=header\" json:\"header,omitempty\"`\n\tModelKey             *Reference      `protobuf:\"bytes,1,opt,name=model_key,json=modelKey\" json:\"model_key,omitempty\"`\n\tSize                 *int64          `protobuf:\"varint,2,opt,name=size\" json:\"size,omitempty\"`\n\tMax                  *int64          `protobuf:\"varint,3,opt,name=max\" json:\"max,omitempty\"`\n\tReserve              []*Reference    `protobuf:\"bytes,5,rep,name=reserve\" json:\"reserve,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}        `json:\"-\"`\n\tXXX_unrecognized     []byte          `json:\"-\"`\n\tXXX_sizecache        int32           `json:\"-\"`\n}\n\nfunc (m *AllocateIdsRequest) Reset()         { *m = AllocateIdsRequest{} }\nfunc (m *AllocateIdsRequest) String() string { return proto.CompactTextString(m) }\nfunc (*AllocateIdsRequest) ProtoMessage()    {}\nfunc (*AllocateIdsRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{31}\n}\nfunc (m *AllocateIdsRequest) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_AllocateIdsRequest.Unmarshal(m, b)\n}\nfunc (m *AllocateIdsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_AllocateIdsRequest.Marshal(b, m, deterministic)\n}\nfunc (dst *AllocateIdsRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_AllocateIdsRequest.Merge(dst, src)\n}\nfunc (m *AllocateIdsRequest) XXX_Size() int {\n\treturn xxx_messageInfo_AllocateIdsRequest.Size(m)\n}\nfunc (m *AllocateIdsRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_AllocateIdsRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_AllocateIdsRequest proto.InternalMessageInfo\n\nfunc (m *AllocateIdsRequest) GetHeader() *InternalHeader {\n\tif m != nil {\n\t\treturn m.Header\n\t}\n\treturn nil\n}\n\nfunc (m *AllocateIdsRequest) GetModelKey() *Reference {\n\tif m != nil {\n\t\treturn m.ModelKey\n\t}\n\treturn nil\n}\n\nfunc (m *AllocateIdsRequest) GetSize() int64 {\n\tif m != nil && m.Size != nil {\n\t\treturn *m.Size\n\t}\n\treturn 0\n}\n\nfunc (m *AllocateIdsRequest) GetMax() int64 {\n\tif m != nil && m.Max != nil {\n\t\treturn *m.Max\n\t}\n\treturn 0\n}\n\nfunc (m *AllocateIdsRequest) GetReserve() []*Reference {\n\tif m != nil {\n\t\treturn m.Reserve\n\t}\n\treturn nil\n}\n\ntype AllocateIdsResponse struct {\n\tStart                *int64   `protobuf:\"varint,1,req,name=start\" json:\"start,omitempty\"`\n\tEnd                  *int64   `protobuf:\"varint,2,req,name=end\" json:\"end,omitempty\"`\n\tCost                 *Cost    `protobuf:\"bytes,3,opt,name=cost\" json:\"cost,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *AllocateIdsResponse) Reset()         { *m = AllocateIdsResponse{} }\nfunc (m *AllocateIdsResponse) String() string { return proto.CompactTextString(m) }\nfunc (*AllocateIdsResponse) ProtoMessage()    {}\nfunc (*AllocateIdsResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{32}\n}\nfunc (m *AllocateIdsResponse) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_AllocateIdsResponse.Unmarshal(m, b)\n}\nfunc (m *AllocateIdsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_AllocateIdsResponse.Marshal(b, m, deterministic)\n}\nfunc (dst *AllocateIdsResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_AllocateIdsResponse.Merge(dst, src)\n}\nfunc (m *AllocateIdsResponse) XXX_Size() int {\n\treturn xxx_messageInfo_AllocateIdsResponse.Size(m)\n}\nfunc (m *AllocateIdsResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_AllocateIdsResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_AllocateIdsResponse proto.InternalMessageInfo\n\nfunc (m *AllocateIdsResponse) GetStart() int64 {\n\tif m != nil && m.Start != nil {\n\t\treturn *m.Start\n\t}\n\treturn 0\n}\n\nfunc (m *AllocateIdsResponse) GetEnd() int64 {\n\tif m != nil && m.End != nil {\n\t\treturn *m.End\n\t}\n\treturn 0\n}\n\nfunc (m *AllocateIdsResponse) GetCost() *Cost {\n\tif m != nil {\n\t\treturn m.Cost\n\t}\n\treturn nil\n}\n\ntype CompositeIndices struct {\n\tIndex                []*CompositeIndex `protobuf:\"bytes,1,rep,name=index\" json:\"index,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}          `json:\"-\"`\n\tXXX_unrecognized     []byte            `json:\"-\"`\n\tXXX_sizecache        int32             `json:\"-\"`\n}\n\nfunc (m *CompositeIndices) Reset()         { *m = CompositeIndices{} }\nfunc (m *CompositeIndices) String() string { return proto.CompactTextString(m) }\nfunc (*CompositeIndices) ProtoMessage()    {}\nfunc (*CompositeIndices) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{33}\n}\nfunc (m *CompositeIndices) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_CompositeIndices.Unmarshal(m, b)\n}\nfunc (m *CompositeIndices) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_CompositeIndices.Marshal(b, m, deterministic)\n}\nfunc (dst *CompositeIndices) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_CompositeIndices.Merge(dst, src)\n}\nfunc (m *CompositeIndices) XXX_Size() int {\n\treturn xxx_messageInfo_CompositeIndices.Size(m)\n}\nfunc (m *CompositeIndices) XXX_DiscardUnknown() {\n\txxx_messageInfo_CompositeIndices.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_CompositeIndices proto.InternalMessageInfo\n\nfunc (m *CompositeIndices) GetIndex() []*CompositeIndex {\n\tif m != nil {\n\t\treturn m.Index\n\t}\n\treturn nil\n}\n\ntype AddActionsRequest struct {\n\tHeader               *InternalHeader `protobuf:\"bytes,3,opt,name=header\" json:\"header,omitempty\"`\n\tTransaction          *Transaction    `protobuf:\"bytes,1,req,name=transaction\" json:\"transaction,omitempty\"`\n\tAction               []*Action       `protobuf:\"bytes,2,rep,name=action\" json:\"action,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}        `json:\"-\"`\n\tXXX_unrecognized     []byte          `json:\"-\"`\n\tXXX_sizecache        int32           `json:\"-\"`\n}\n\nfunc (m *AddActionsRequest) Reset()         { *m = AddActionsRequest{} }\nfunc (m *AddActionsRequest) String() string { return proto.CompactTextString(m) }\nfunc (*AddActionsRequest) ProtoMessage()    {}\nfunc (*AddActionsRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{34}\n}\nfunc (m *AddActionsRequest) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_AddActionsRequest.Unmarshal(m, b)\n}\nfunc (m *AddActionsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_AddActionsRequest.Marshal(b, m, deterministic)\n}\nfunc (dst *AddActionsRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_AddActionsRequest.Merge(dst, src)\n}\nfunc (m *AddActionsRequest) XXX_Size() int {\n\treturn xxx_messageInfo_AddActionsRequest.Size(m)\n}\nfunc (m *AddActionsRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_AddActionsRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_AddActionsRequest proto.InternalMessageInfo\n\nfunc (m *AddActionsRequest) GetHeader() *InternalHeader {\n\tif m != nil {\n\t\treturn m.Header\n\t}\n\treturn nil\n}\n\nfunc (m *AddActionsRequest) GetTransaction() *Transaction {\n\tif m != nil {\n\t\treturn m.Transaction\n\t}\n\treturn nil\n}\n\nfunc (m *AddActionsRequest) GetAction() []*Action {\n\tif m != nil {\n\t\treturn m.Action\n\t}\n\treturn nil\n}\n\ntype AddActionsResponse struct {\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *AddActionsResponse) Reset()         { *m = AddActionsResponse{} }\nfunc (m *AddActionsResponse) String() string { return proto.CompactTextString(m) }\nfunc (*AddActionsResponse) ProtoMessage()    {}\nfunc (*AddActionsResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{35}\n}\nfunc (m *AddActionsResponse) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_AddActionsResponse.Unmarshal(m, b)\n}\nfunc (m *AddActionsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_AddActionsResponse.Marshal(b, m, deterministic)\n}\nfunc (dst *AddActionsResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_AddActionsResponse.Merge(dst, src)\n}\nfunc (m *AddActionsResponse) XXX_Size() int {\n\treturn xxx_messageInfo_AddActionsResponse.Size(m)\n}\nfunc (m *AddActionsResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_AddActionsResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_AddActionsResponse proto.InternalMessageInfo\n\ntype BeginTransactionRequest struct {\n\tHeader               *InternalHeader                          `protobuf:\"bytes,3,opt,name=header\" json:\"header,omitempty\"`\n\tApp                  *string                                  `protobuf:\"bytes,1,req,name=app\" json:\"app,omitempty\"`\n\tAllowMultipleEg      *bool                                    `protobuf:\"varint,2,opt,name=allow_multiple_eg,json=allowMultipleEg,def=0\" json:\"allow_multiple_eg,omitempty\"`\n\tDatabaseId           *string                                  `protobuf:\"bytes,4,opt,name=database_id,json=databaseId\" json:\"database_id,omitempty\"`\n\tMode                 *BeginTransactionRequest_TransactionMode `protobuf:\"varint,5,opt,name=mode,enum=appengine.BeginTransactionRequest_TransactionMode,def=0\" json:\"mode,omitempty\"`\n\tPreviousTransaction  *Transaction                             `protobuf:\"bytes,7,opt,name=previous_transaction,json=previousTransaction\" json:\"previous_transaction,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}                                 `json:\"-\"`\n\tXXX_unrecognized     []byte                                   `json:\"-\"`\n\tXXX_sizecache        int32                                    `json:\"-\"`\n}\n\nfunc (m *BeginTransactionRequest) Reset()         { *m = BeginTransactionRequest{} }\nfunc (m *BeginTransactionRequest) String() string { return proto.CompactTextString(m) }\nfunc (*BeginTransactionRequest) ProtoMessage()    {}\nfunc (*BeginTransactionRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{36}\n}\nfunc (m *BeginTransactionRequest) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_BeginTransactionRequest.Unmarshal(m, b)\n}\nfunc (m *BeginTransactionRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_BeginTransactionRequest.Marshal(b, m, deterministic)\n}\nfunc (dst *BeginTransactionRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_BeginTransactionRequest.Merge(dst, src)\n}\nfunc (m *BeginTransactionRequest) XXX_Size() int {\n\treturn xxx_messageInfo_BeginTransactionRequest.Size(m)\n}\nfunc (m *BeginTransactionRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_BeginTransactionRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_BeginTransactionRequest proto.InternalMessageInfo\n\nconst Default_BeginTransactionRequest_AllowMultipleEg bool = false\nconst Default_BeginTransactionRequest_Mode BeginTransactionRequest_TransactionMode = BeginTransactionRequest_UNKNOWN\n\nfunc (m *BeginTransactionRequest) GetHeader() *InternalHeader {\n\tif m != nil {\n\t\treturn m.Header\n\t}\n\treturn nil\n}\n\nfunc (m *BeginTransactionRequest) GetApp() string {\n\tif m != nil && m.App != nil {\n\t\treturn *m.App\n\t}\n\treturn \"\"\n}\n\nfunc (m *BeginTransactionRequest) GetAllowMultipleEg() bool {\n\tif m != nil && m.AllowMultipleEg != nil {\n\t\treturn *m.AllowMultipleEg\n\t}\n\treturn Default_BeginTransactionRequest_AllowMultipleEg\n}\n\nfunc (m *BeginTransactionRequest) GetDatabaseId() string {\n\tif m != nil && m.DatabaseId != nil {\n\t\treturn *m.DatabaseId\n\t}\n\treturn \"\"\n}\n\nfunc (m *BeginTransactionRequest) GetMode() BeginTransactionRequest_TransactionMode {\n\tif m != nil && m.Mode != nil {\n\t\treturn *m.Mode\n\t}\n\treturn Default_BeginTransactionRequest_Mode\n}\n\nfunc (m *BeginTransactionRequest) GetPreviousTransaction() *Transaction {\n\tif m != nil {\n\t\treturn m.PreviousTransaction\n\t}\n\treturn nil\n}\n\ntype CommitResponse struct {\n\tCost                 *Cost                     `protobuf:\"bytes,1,opt,name=cost\" json:\"cost,omitempty\"`\n\tVersion              []*CommitResponse_Version `protobuf:\"group,3,rep,name=Version,json=version\" json:\"version,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}                  `json:\"-\"`\n\tXXX_unrecognized     []byte                    `json:\"-\"`\n\tXXX_sizecache        int32                     `json:\"-\"`\n}\n\nfunc (m *CommitResponse) Reset()         { *m = CommitResponse{} }\nfunc (m *CommitResponse) String() string { return proto.CompactTextString(m) }\nfunc (*CommitResponse) ProtoMessage()    {}\nfunc (*CommitResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{37}\n}\nfunc (m *CommitResponse) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_CommitResponse.Unmarshal(m, b)\n}\nfunc (m *CommitResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_CommitResponse.Marshal(b, m, deterministic)\n}\nfunc (dst *CommitResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_CommitResponse.Merge(dst, src)\n}\nfunc (m *CommitResponse) XXX_Size() int {\n\treturn xxx_messageInfo_CommitResponse.Size(m)\n}\nfunc (m *CommitResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_CommitResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_CommitResponse proto.InternalMessageInfo\n\nfunc (m *CommitResponse) GetCost() *Cost {\n\tif m != nil {\n\t\treturn m.Cost\n\t}\n\treturn nil\n}\n\nfunc (m *CommitResponse) GetVersion() []*CommitResponse_Version {\n\tif m != nil {\n\t\treturn m.Version\n\t}\n\treturn nil\n}\n\ntype CommitResponse_Version struct {\n\tRootEntityKey        *Reference `protobuf:\"bytes,4,req,name=root_entity_key,json=rootEntityKey\" json:\"root_entity_key,omitempty\"`\n\tVersion              *int64     `protobuf:\"varint,5,req,name=version\" json:\"version,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}   `json:\"-\"`\n\tXXX_unrecognized     []byte     `json:\"-\"`\n\tXXX_sizecache        int32      `json:\"-\"`\n}\n\nfunc (m *CommitResponse_Version) Reset()         { *m = CommitResponse_Version{} }\nfunc (m *CommitResponse_Version) String() string { return proto.CompactTextString(m) }\nfunc (*CommitResponse_Version) ProtoMessage()    {}\nfunc (*CommitResponse_Version) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_datastore_v3_83b17b80c34f6179, []int{37, 0}\n}\nfunc (m *CommitResponse_Version) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_CommitResponse_Version.Unmarshal(m, b)\n}\nfunc (m *CommitResponse_Version) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_CommitResponse_Version.Marshal(b, m, deterministic)\n}\nfunc (dst *CommitResponse_Version) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_CommitResponse_Version.Merge(dst, src)\n}\nfunc (m *CommitResponse_Version) XXX_Size() int {\n\treturn xxx_messageInfo_CommitResponse_Version.Size(m)\n}\nfunc (m *CommitResponse_Version) XXX_DiscardUnknown() {\n\txxx_messageInfo_CommitResponse_Version.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_CommitResponse_Version proto.InternalMessageInfo\n\nfunc (m *CommitResponse_Version) GetRootEntityKey() *Reference {\n\tif m != nil {\n\t\treturn m.RootEntityKey\n\t}\n\treturn nil\n}\n\nfunc (m *CommitResponse_Version) GetVersion() int64 {\n\tif m != nil && m.Version != nil {\n\t\treturn *m.Version\n\t}\n\treturn 0\n}\n\nfunc init() {\n\tproto.RegisterType((*Action)(nil), \"appengine.Action\")\n\tproto.RegisterType((*PropertyValue)(nil), \"appengine.PropertyValue\")\n\tproto.RegisterType((*PropertyValue_PointValue)(nil), \"appengine.PropertyValue.PointValue\")\n\tproto.RegisterType((*PropertyValue_UserValue)(nil), \"appengine.PropertyValue.UserValue\")\n\tproto.RegisterType((*PropertyValue_ReferenceValue)(nil), \"appengine.PropertyValue.ReferenceValue\")\n\tproto.RegisterType((*PropertyValue_ReferenceValue_PathElement)(nil), \"appengine.PropertyValue.ReferenceValue.PathElement\")\n\tproto.RegisterType((*Property)(nil), \"appengine.Property\")\n\tproto.RegisterType((*Path)(nil), \"appengine.Path\")\n\tproto.RegisterType((*Path_Element)(nil), \"appengine.Path.Element\")\n\tproto.RegisterType((*Reference)(nil), \"appengine.Reference\")\n\tproto.RegisterType((*User)(nil), \"appengine.User\")\n\tproto.RegisterType((*EntityProto)(nil), \"appengine.EntityProto\")\n\tproto.RegisterType((*CompositeProperty)(nil), \"appengine.CompositeProperty\")\n\tproto.RegisterType((*Index)(nil), \"appengine.Index\")\n\tproto.RegisterType((*Index_Property)(nil), \"appengine.Index.Property\")\n\tproto.RegisterType((*CompositeIndex)(nil), \"appengine.CompositeIndex\")\n\tproto.RegisterType((*IndexPostfix)(nil), \"appengine.IndexPostfix\")\n\tproto.RegisterType((*IndexPostfix_IndexValue)(nil), \"appengine.IndexPostfix.IndexValue\")\n\tproto.RegisterType((*IndexPosition)(nil), \"appengine.IndexPosition\")\n\tproto.RegisterType((*Snapshot)(nil), \"appengine.Snapshot\")\n\tproto.RegisterType((*InternalHeader)(nil), \"appengine.InternalHeader\")\n\tproto.RegisterType((*Transaction)(nil), \"appengine.Transaction\")\n\tproto.RegisterType((*Query)(nil), \"appengine.Query\")\n\tproto.RegisterType((*Query_Filter)(nil), \"appengine.Query.Filter\")\n\tproto.RegisterType((*Query_Order)(nil), \"appengine.Query.Order\")\n\tproto.RegisterType((*CompiledQuery)(nil), \"appengine.CompiledQuery\")\n\tproto.RegisterType((*CompiledQuery_PrimaryScan)(nil), \"appengine.CompiledQuery.PrimaryScan\")\n\tproto.RegisterType((*CompiledQuery_MergeJoinScan)(nil), \"appengine.CompiledQuery.MergeJoinScan\")\n\tproto.RegisterType((*CompiledQuery_EntityFilter)(nil), \"appengine.CompiledQuery.EntityFilter\")\n\tproto.RegisterType((*CompiledCursor)(nil), \"appengine.CompiledCursor\")\n\tproto.RegisterType((*CompiledCursor_Position)(nil), \"appengine.CompiledCursor.Position\")\n\tproto.RegisterType((*CompiledCursor_Position_IndexValue)(nil), \"appengine.CompiledCursor.Position.IndexValue\")\n\tproto.RegisterType((*Cursor)(nil), \"appengine.Cursor\")\n\tproto.RegisterType((*Error)(nil), \"appengine.Error\")\n\tproto.RegisterType((*Cost)(nil), \"appengine.Cost\")\n\tproto.RegisterType((*Cost_CommitCost)(nil), \"appengine.Cost.CommitCost\")\n\tproto.RegisterType((*GetRequest)(nil), \"appengine.GetRequest\")\n\tproto.RegisterType((*GetResponse)(nil), \"appengine.GetResponse\")\n\tproto.RegisterType((*GetResponse_Entity)(nil), \"appengine.GetResponse.Entity\")\n\tproto.RegisterType((*PutRequest)(nil), \"appengine.PutRequest\")\n\tproto.RegisterType((*PutResponse)(nil), \"appengine.PutResponse\")\n\tproto.RegisterType((*TouchRequest)(nil), \"appengine.TouchRequest\")\n\tproto.RegisterType((*TouchResponse)(nil), \"appengine.TouchResponse\")\n\tproto.RegisterType((*DeleteRequest)(nil), \"appengine.DeleteRequest\")\n\tproto.RegisterType((*DeleteResponse)(nil), \"appengine.DeleteResponse\")\n\tproto.RegisterType((*NextRequest)(nil), \"appengine.NextRequest\")\n\tproto.RegisterType((*QueryResult)(nil), \"appengine.QueryResult\")\n\tproto.RegisterType((*AllocateIdsRequest)(nil), \"appengine.AllocateIdsRequest\")\n\tproto.RegisterType((*AllocateIdsResponse)(nil), \"appengine.AllocateIdsResponse\")\n\tproto.RegisterType((*CompositeIndices)(nil), \"appengine.CompositeIndices\")\n\tproto.RegisterType((*AddActionsRequest)(nil), \"appengine.AddActionsRequest\")\n\tproto.RegisterType((*AddActionsResponse)(nil), \"appengine.AddActionsResponse\")\n\tproto.RegisterType((*BeginTransactionRequest)(nil), \"appengine.BeginTransactionRequest\")\n\tproto.RegisterType((*CommitResponse)(nil), \"appengine.CommitResponse\")\n\tproto.RegisterType((*CommitResponse_Version)(nil), \"appengine.CommitResponse.Version\")\n}\n\nfunc init() {\n\tproto.RegisterFile(\"google.golang.org/appengine/internal/datastore/datastore_v3.proto\", fileDescriptor_datastore_v3_83b17b80c34f6179)\n}\n\nvar fileDescriptor_datastore_v3_83b17b80c34f6179 = []byte{\n\t// 4156 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x5a, 0xcd, 0x73, 0xe3, 0x46,\n\t0x76, 0x37, 0xc1, 0xef, 0x47, 0x89, 0x82, 0x5a, 0xf3, 0xc1, 0xa1, 0x3f, 0x46, 0xc6, 0xac, 0x6d,\n\t0xd9, 0x6b, 0x73, 0x6c, 0xf9, 0x23, 0x5b, 0x4a, 0x76, 0x1d, 0x4a, 0xc4, 0x68, 0x90, 0xa1, 0x48,\n\t0xb9, 0x09, 0xd9, 0x9e, 0x5c, 0x50, 0x18, 0xa2, 0x29, 0x21, 0x43, 0x02, 0x30, 0x00, 0x6a, 0x46,\n\t0x93, 0xe4, 0x90, 0x4b, 0x2a, 0x55, 0x5b, 0xa9, 0x1c, 0x92, 0x4a, 0x25, 0xf9, 0x07, 0x72, 0xc8,\n\t0x39, 0x95, 0xaa, 0x54, 0xf6, 0x98, 0x5b, 0x0e, 0x7b, 0xc9, 0x31, 0x95, 0x73, 0xf2, 0x27, 0x24,\n\t0x39, 0xa4, 0xfa, 0x75, 0x03, 0x02, 0x28, 0x4a, 0x23, 0x6d, 0xf6, 0x90, 0x13, 0xd1, 0xef, 0xfd,\n\t0xba, 0xf1, 0xfa, 0xf5, 0xfb, 0x6c, 0x10, 0xba, 0xc7, 0xbe, 0x7f, 0x3c, 0x65, 0x9d, 0x63, 0x7f,\n\t0x6a, 0x7b, 0xc7, 0x1d, 0x3f, 0x3c, 0x7e, 0x68, 0x07, 0x01, 0xf3, 0x8e, 0x5d, 0x8f, 0x3d, 0x74,\n\t0xbd, 0x98, 0x85, 0x9e, 0x3d, 0x7d, 0xe8, 0xd8, 0xb1, 0x1d, 0xc5, 0x7e, 0xc8, 0xce, 0x9f, 0xac,\n\t0xd3, 0xcf, 0x3b, 0x41, 0xe8, 0xc7, 0x3e, 0xa9, 0xa7, 0x13, 0xb4, 0x1a, 0x54, 0xba, 0xe3, 0xd8,\n\t0xf5, 0x3d, 0xed, 0x1f, 0x2b, 0xb0, 0x7a, 0x18, 0xfa, 0x01, 0x0b, 0xe3, 0xb3, 0x6f, 0xed, 0xe9,\n\t0x9c, 0x91, 0x77, 0x00, 0x5c, 0x2f, 0xfe, 0xea, 0x0b, 0x1c, 0xb5, 0x0a, 0x9b, 0x85, 0xad, 0x22,\n\t0xcd, 0x50, 0x88, 0x06, 0x2b, 0xcf, 0x7c, 0x7f, 0xca, 0x6c, 0x4f, 0x20, 0x94, 0xcd, 0xc2, 0x56,\n\t0x8d, 0xe6, 0x68, 0x64, 0x13, 0x1a, 0x51, 0x1c, 0xba, 0xde, 0xb1, 0x80, 0x14, 0x37, 0x0b, 0x5b,\n\t0x75, 0x9a, 0x25, 0x71, 0x84, 0xe3, 0xcf, 0x9f, 0x4d, 0x99, 0x40, 0x94, 0x36, 0x0b, 0x5b, 0x05,\n\t0x9a, 0x25, 0x91, 0x3d, 0x80, 0xc0, 0x77, 0xbd, 0xf8, 0x14, 0x01, 0xe5, 0xcd, 0xc2, 0x16, 0x6c,\n\t0x3f, 0xe8, 0xa4, 0x7b, 0xe8, 0xe4, 0xa4, 0xee, 0x1c, 0x72, 0x28, 0x3e, 0xd2, 0xcc, 0x34, 0xf2,\n\t0xdb, 0x50, 0x9f, 0x47, 0x2c, 0x14, 0x6b, 0xd4, 0x70, 0x0d, 0xed, 0xd2, 0x35, 0x8e, 0x22, 0x16,\n\t0x8a, 0x25, 0xce, 0x27, 0x91, 0x21, 0x34, 0x43, 0x36, 0x61, 0x21, 0xf3, 0xc6, 0x4c, 0x2c, 0xb3,\n\t0x82, 0xcb, 0x7c, 0x70, 0xe9, 0x32, 0x34, 0x81, 0x8b, 0xb5, 0x16, 0xa6, 0xb7, 0xb7, 0x00, 0xce,\n\t0x85, 0x25, 0x2b, 0x50, 0x78, 0xd9, 0xaa, 0x6c, 0x2a, 0x5b, 0x05, 0x5a, 0x78, 0xc9, 0x47, 0x67,\n\t0xad, 0xaa, 0x18, 0x9d, 0xb5, 0xff, 0xa9, 0x00, 0xf5, 0x54, 0x26, 0x72, 0x0b, 0xca, 0x6c, 0x66,\n\t0xbb, 0xd3, 0x56, 0x7d, 0x53, 0xd9, 0xaa, 0x53, 0x31, 0x20, 0xf7, 0xa1, 0x61, 0xcf, 0xe3, 0x13,\n\t0xcb, 0xf1, 0x67, 0xb6, 0xeb, 0xb5, 0x00, 0x79, 0xc0, 0x49, 0x3d, 0xa4, 0x90, 0x36, 0xd4, 0x3c,\n\t0x77, 0xfc, 0xdc, 0xb3, 0x67, 0xac, 0xd5, 0xc0, 0x73, 0x48, 0xc7, 0xe4, 0x13, 0x20, 0x13, 0xe6,\n\t0xb0, 0xd0, 0x8e, 0x99, 0x63, 0xb9, 0x0e, 0xf3, 0x62, 0x37, 0x3e, 0x6b, 0xdd, 0x46, 0xd4, 0x7a,\n\t0xca, 0x31, 0x24, 0x23, 0x0f, 0x0f, 0x42, 0xff, 0xd4, 0x75, 0x58, 0xd8, 0xba, 0xb3, 0x00, 0x3f,\n\t0x94, 0x8c, 0xf6, 0xbf, 0x17, 0xa0, 0x99, 0xd7, 0x05, 0x51, 0xa1, 0x68, 0x07, 0x41, 0x6b, 0x15,\n\t0xa5, 0xe4, 0x8f, 0xe4, 0x6d, 0x00, 0x2e, 0x8a, 0x15, 0x05, 0xf6, 0x98, 0xb5, 0x6e, 0xe1, 0x5a,\n\t0x75, 0x4e, 0x19, 0x71, 0x02, 0x39, 0x82, 0x46, 0x60, 0xc7, 0x27, 0x6c, 0xca, 0x66, 0xcc, 0x8b,\n\t0x5b, 0xcd, 0xcd, 0xe2, 0x16, 0x6c, 0x7f, 0x7e, 0x4d, 0xd5, 0x77, 0x0e, 0xed, 0xf8, 0x44, 0x17,\n\t0x53, 0x69, 0x76, 0x9d, 0xb6, 0x0e, 0x8d, 0x0c, 0x8f, 0x10, 0x28, 0xc5, 0x67, 0x01, 0x6b, 0xad,\n\t0xa1, 0x5c, 0xf8, 0x4c, 0x9a, 0xa0, 0xb8, 0x4e, 0x4b, 0x45, 0xf3, 0x57, 0x5c, 0x87, 0x63, 0x50,\n\t0x87, 0xeb, 0x28, 0x22, 0x3e, 0x6b, 0xff, 0x51, 0x86, 0x5a, 0x22, 0x00, 0xe9, 0x42, 0x75, 0xc6,\n\t0x6c, 0xcf, 0xf5, 0x8e, 0xd1, 0x69, 0x9a, 0xdb, 0x6f, 0x2e, 0x11, 0xb3, 0x73, 0x20, 0x20, 0x3b,\n\t0x30, 0x18, 0x5a, 0x07, 0x7a, 0x77, 0x60, 0x0c, 0xf6, 0x69, 0x32, 0x8f, 0x1f, 0xa6, 0x7c, 0xb4,\n\t0xe6, 0xa1, 0x8b, 0x9e, 0x55, 0xa7, 0x20, 0x49, 0x47, 0xa1, 0x9b, 0x0a, 0x51, 0x14, 0x82, 0xe2,\n\t0x21, 0x76, 0xa0, 0x9c, 0xb8, 0x88, 0xb2, 0xd5, 0xd8, 0x6e, 0x5d, 0xa6, 0x1c, 0x2a, 0x60, 0xdc,\n\t0x20, 0x66, 0xf3, 0x69, 0xec, 0x06, 0x53, 0xee, 0x76, 0xca, 0x56, 0x8d, 0xa6, 0x63, 0xf2, 0x1e,\n\t0x40, 0xc4, 0xec, 0x70, 0x7c, 0x62, 0x3f, 0x9b, 0xb2, 0x56, 0x85, 0x7b, 0xf6, 0x4e, 0x79, 0x62,\n\t0x4f, 0x23, 0x46, 0x33, 0x0c, 0x62, 0xc3, 0xdd, 0x49, 0x1c, 0x59, 0xb1, 0xff, 0x9c, 0x79, 0xee,\n\t0x2b, 0x9b, 0x07, 0x12, 0xcb, 0x0f, 0xf8, 0x0f, 0xfa, 0x58, 0x73, 0xfb, 0xc3, 0x65, 0x5b, 0x7f,\n\t0x14, 0x47, 0x66, 0x66, 0xc6, 0x10, 0x27, 0xd0, 0xdb, 0x93, 0x65, 0x64, 0xd2, 0x86, 0xca, 0xd4,\n\t0x1f, 0xdb, 0x53, 0xd6, 0xaa, 0x73, 0x2d, 0xec, 0x28, 0xcc, 0xa3, 0x92, 0xa2, 0xfd, 0xb3, 0x02,\n\t0x55, 0xa9, 0x47, 0xd2, 0x84, 0x8c, 0x26, 0xd5, 0x37, 0x48, 0x0d, 0x4a, 0xbb, 0xfd, 0xe1, 0xae,\n\t0xda, 0xe4, 0x4f, 0xa6, 0xfe, 0xbd, 0xa9, 0xae, 0x71, 0xcc, 0xee, 0x53, 0x53, 0x1f, 0x99, 0x94,\n\t0x63, 0x54, 0xb2, 0x0e, 0xab, 0x5d, 0x73, 0x78, 0x60, 0xed, 0x75, 0x4d, 0x7d, 0x7f, 0x48, 0x9f,\n\t0xaa, 0x05, 0xb2, 0x0a, 0x75, 0x24, 0xf5, 0x8d, 0xc1, 0x13, 0x55, 0xe1, 0x33, 0x70, 0x68, 0x1a,\n\t0x66, 0x5f, 0x57, 0x8b, 0x44, 0x85, 0x15, 0x31, 0x63, 0x38, 0x30, 0xf5, 0x81, 0xa9, 0x96, 0x52,\n\t0xca, 0xe8, 0xe8, 0xe0, 0xa0, 0x4b, 0x9f, 0xaa, 0x65, 0xb2, 0x06, 0x0d, 0xa4, 0x74, 0x8f, 0xcc,\n\t0xc7, 0x43, 0xaa, 0x56, 0x48, 0x03, 0xaa, 0xfb, 0x3d, 0xeb, 0xbb, 0xc7, 0xfa, 0x40, 0xad, 0x92,\n\t0x15, 0xa8, 0xed, 0xf7, 0x2c, 0xfd, 0xa0, 0x6b, 0xf4, 0xd5, 0x1a, 0x9f, 0xbd, 0xaf, 0x0f, 0xe9,\n\t0x68, 0x64, 0x1d, 0x0e, 0x8d, 0x81, 0xa9, 0xd6, 0x49, 0x1d, 0xca, 0xfb, 0x3d, 0xcb, 0x38, 0x50,\n\t0x81, 0x10, 0x68, 0xee, 0xf7, 0xac, 0xc3, 0xc7, 0xc3, 0x81, 0x3e, 0x38, 0x3a, 0xd8, 0xd5, 0xa9,\n\t0xda, 0x20, 0xb7, 0x40, 0xe5, 0xb4, 0xe1, 0xc8, 0xec, 0xf6, 0xbb, 0xbd, 0x1e, 0xd5, 0x47, 0x23,\n\t0x75, 0x85, 0x4b, 0xbd, 0xdf, 0xb3, 0x68, 0xd7, 0xe4, 0xfb, 0x5a, 0xe5, 0x2f, 0xe4, 0x7b, 0x7f,\n\t0xa2, 0x3f, 0x55, 0xd7, 0xf9, 0x2b, 0xf4, 0x81, 0x69, 0x98, 0x4f, 0xad, 0x43, 0x3a, 0x34, 0x87,\n\t0xea, 0x06, 0x17, 0xd0, 0x18, 0xf4, 0xf4, 0xef, 0xad, 0x6f, 0xbb, 0xfd, 0x23, 0x5d, 0x25, 0xda,\n\t0x8f, 0xe1, 0xf6, 0xd2, 0x33, 0xe1, 0xaa, 0x7b, 0x6c, 0x1e, 0xf4, 0xd5, 0x02, 0x7f, 0xe2, 0x9b,\n\t0x52, 0x15, 0xed, 0x0f, 0xa0, 0xc4, 0x5d, 0x86, 0x7c, 0x06, 0xd5, 0xc4, 0x1b, 0x0b, 0xe8, 0x8d,\n\t0x77, 0xb3, 0x67, 0x6d, 0xc7, 0x27, 0x9d, 0xc4, 0xe3, 0x12, 0x5c, 0xbb, 0x0b, 0xd5, 0x45, 0x4f,\n\t0x53, 0x2e, 0x78, 0x5a, 0xf1, 0x82, 0xa7, 0x95, 0x32, 0x9e, 0x66, 0x43, 0x3d, 0xf5, 0xed, 0x9b,\n\t0x47, 0x91, 0x07, 0x50, 0xe2, 0xde, 0xdf, 0x6a, 0xa2, 0x87, 0xac, 0x2d, 0x08, 0x4c, 0x91, 0xa9,\n\t0xfd, 0x43, 0x01, 0x4a, 0x3c, 0xda, 0x9e, 0x07, 0xda, 0xc2, 0x15, 0x81, 0x56, 0xb9, 0x32, 0xd0,\n\t0x16, 0xaf, 0x15, 0x68, 0x2b, 0x37, 0x0b, 0xb4, 0xd5, 0x4b, 0x02, 0xad, 0xf6, 0x67, 0x45, 0x68,\n\t0xe8, 0x38, 0xf3, 0x10, 0x13, 0xfd, 0xfb, 0x50, 0x7c, 0xce, 0xce, 0x50, 0x3f, 0x8d, 0xed, 0x5b,\n\t0x99, 0xdd, 0xa6, 0x2a, 0xa4, 0x1c, 0x40, 0xb6, 0x61, 0x45, 0xbc, 0xd0, 0x3a, 0x0e, 0xfd, 0x79,\n\t0xd0, 0x52, 0x97, 0xab, 0xa7, 0x21, 0x40, 0xfb, 0x1c, 0x43, 0xde, 0x83, 0xb2, 0xff, 0xc2, 0x63,\n\t0x21, 0xc6, 0xc1, 0x3c, 0x98, 0x2b, 0x8f, 0x0a, 0x2e, 0x79, 0x08, 0xa5, 0xe7, 0xae, 0xe7, 0xe0,\n\t0x19, 0xe6, 0x23, 0x61, 0x46, 0xd0, 0xce, 0x13, 0xd7, 0x73, 0x28, 0x02, 0xc9, 0x3d, 0xa8, 0xf1,\n\t0x5f, 0x8c, 0x7b, 0x65, 0xdc, 0x68, 0x95, 0x8f, 0x79, 0xd0, 0x7b, 0x08, 0xb5, 0x40, 0xc6, 0x10,\n\t0x4c, 0x00, 0x8d, 0xed, 0x8d, 0x25, 0xe1, 0x85, 0xa6, 0x20, 0xf2, 0x15, 0xac, 0x84, 0xf6, 0x0b,\n\t0x2b, 0x9d, 0xb4, 0x76, 0xf9, 0xa4, 0x46, 0x68, 0xbf, 0x48, 0x23, 0x38, 0x81, 0x52, 0x68, 0x7b,\n\t0xcf, 0x5b, 0x64, 0xb3, 0xb0, 0x55, 0xa6, 0xf8, 0xac, 0x7d, 0x01, 0x25, 0x2e, 0x25, 0x8f, 0x08,\n\t0xfb, 0x3d, 0xf4, 0xff, 0xee, 0x9e, 0xa9, 0x16, 0x12, 0x7f, 0xfe, 0x96, 0x47, 0x03, 0x45, 0x72,\n\t0x0f, 0xf4, 0xd1, 0xa8, 0xbb, 0xaf, 0xab, 0x45, 0xad, 0x07, 0xeb, 0x7b, 0xfe, 0x2c, 0xf0, 0x23,\n\t0x37, 0x66, 0xe9, 0xf2, 0xf7, 0xa0, 0xe6, 0x7a, 0x0e, 0x7b, 0x69, 0xb9, 0x0e, 0x9a, 0x56, 0x91,\n\t0x56, 0x71, 0x6c, 0x38, 0xdc, 0xe4, 0x4e, 0x65, 0x31, 0x55, 0xe4, 0x26, 0x87, 0x03, 0xed, 0x2f,\n\t0x15, 0x28, 0x1b, 0x1c, 0xc1, 0x8d, 0x4f, 0x9e, 0x14, 0x7a, 0x8f, 0x30, 0x4c, 0x10, 0x24, 0x93,\n\t0xfb, 0x50, 0x1b, 0x6a, 0xb6, 0x37, 0x66, 0xbc, 0xe2, 0xc3, 0x3c, 0x50, 0xa3, 0xe9, 0x98, 0x7c,\n\t0x99, 0xd1, 0x9f, 0x82, 0x2e, 0x7b, 0x2f, 0xa3, 0x0a, 0x7c, 0xc1, 0x12, 0x2d, 0xb6, 0xff, 0xaa,\n\t0x90, 0x49, 0x6e, 0xcb, 0x12, 0x4f, 0x1f, 0xea, 0x8e, 0x1b, 0x32, 0xac, 0x23, 0xe5, 0x41, 0x3f,\n\t0xb8, 0x74, 0xe1, 0x4e, 0x2f, 0x81, 0xee, 0xd4, 0xbb, 0xa3, 0x3d, 0x7d, 0xd0, 0xe3, 0x99, 0xef,\n\t0x7c, 0x01, 0xed, 0x23, 0xa8, 0xa7, 0x10, 0x0c, 0xc7, 0x09, 0x48, 0x2d, 0x70, 0xf5, 0xf6, 0xf4,\n\t0x74, 0xac, 0x68, 0x7f, 0xad, 0x40, 0x33, 0xd5, 0xaf, 0xd0, 0xd0, 0x6d, 0xa8, 0xd8, 0x41, 0x90,\n\t0xa8, 0xb6, 0x4e, 0xcb, 0x76, 0x10, 0x18, 0x8e, 0x8c, 0x2d, 0x0a, 0x6a, 0x9b, 0xc7, 0x96, 0x4f,\n\t0x01, 0x1c, 0x36, 0x71, 0x3d, 0x17, 0x85, 0x2e, 0xa2, 0xc1, 0xab, 0x8b, 0x42, 0xd3, 0x0c, 0x86,\n\t0x7c, 0x09, 0xe5, 0x28, 0xb6, 0x63, 0x91, 0x2b, 0x9b, 0xdb, 0xf7, 0x33, 0xe0, 0xbc, 0x08, 0x9d,\n\t0x11, 0x87, 0x51, 0x81, 0x26, 0x5f, 0xc1, 0x2d, 0xdf, 0x9b, 0x9e, 0x59, 0xf3, 0x88, 0x59, 0xee,\n\t0xc4, 0x0a, 0xd9, 0x0f, 0x73, 0x37, 0x64, 0x4e, 0x3e, 0xa7, 0xae, 0x73, 0xc8, 0x51, 0xc4, 0x8c,\n\t0x09, 0x95, 0x7c, 0xed, 0x6b, 0x28, 0xe3, 0x3a, 0x7c, 0xcf, 0xdf, 0x51, 0xc3, 0xd4, 0xad, 0xe1,\n\t0xa0, 0xff, 0x54, 0xe8, 0x80, 0xea, 0xdd, 0x9e, 0x85, 0x44, 0x55, 0xe1, 0xc1, 0xbe, 0xa7, 0xf7,\n\t0x75, 0x53, 0xef, 0xa9, 0x45, 0x9e, 0x3d, 0x74, 0x4a, 0x87, 0x54, 0x2d, 0x69, 0xff, 0x53, 0x80,\n\t0x15, 0x94, 0xe7, 0xd0, 0x8f, 0xe2, 0x89, 0xfb, 0x92, 0xec, 0x41, 0x43, 0x98, 0xdd, 0xa9, 0x2c,\n\t0xe8, 0xb9, 0x33, 0x68, 0x8b, 0x7b, 0x96, 0x68, 0x31, 0x90, 0x75, 0xb4, 0x9b, 0x3e, 0x27, 0x21,\n\t0x45, 0x41, 0xa7, 0xbf, 0x22, 0xa4, 0xbc, 0x05, 0x95, 0x67, 0x6c, 0xe2, 0x87, 0x22, 0x04, 0xd6,\n\t0x76, 0x4a, 0x71, 0x38, 0x67, 0x54, 0xd2, 0xda, 0x36, 0xc0, 0xf9, 0xfa, 0xe4, 0x01, 0xac, 0x26,\n\t0xc6, 0x66, 0xa1, 0x71, 0x89, 0x93, 0x5b, 0x49, 0x88, 0x83, 0x5c, 0x75, 0xa3, 0x5c, 0xab, 0xba,\n\t0xd1, 0xbe, 0x86, 0xd5, 0x64, 0x3f, 0xe2, 0xfc, 0x54, 0x21, 0x79, 0x01, 0x63, 0xca, 0x82, 0x8c,\n\t0xca, 0x45, 0x19, 0xb5, 0x9f, 0x41, 0x6d, 0xe4, 0xd9, 0x41, 0x74, 0xe2, 0xc7, 0xdc, 0x7a, 0xe2,\n\t0x48, 0xfa, 0xaa, 0x12, 0x47, 0x9a, 0x06, 0x15, 0x7e, 0x38, 0xf3, 0x88, 0xbb, 0xbf, 0x31, 0xe8,\n\t0xee, 0x99, 0xc6, 0xb7, 0xba, 0xfa, 0x06, 0x01, 0xa8, 0xc8, 0xe7, 0x82, 0xa6, 0x41, 0xd3, 0x90,\n\t0xed, 0xd8, 0x63, 0x66, 0x3b, 0x2c, 0xe4, 0x12, 0xfc, 0xe0, 0x47, 0x89, 0x04, 0x3f, 0xf8, 0x91,\n\t0xf6, 0x17, 0x05, 0x68, 0x98, 0xa1, 0xed, 0x45, 0xb6, 0x30, 0xf7, 0xcf, 0xa0, 0x72, 0x82, 0x58,\n\t0x74, 0xa3, 0xc6, 0x82, 0x7f, 0x66, 0x17, 0xa3, 0x12, 0x48, 0xee, 0x40, 0xe5, 0xc4, 0xf6, 0x9c,\n\t0xa9, 0xd0, 0x5a, 0x85, 0xca, 0x51, 0x92, 0x1b, 0x95, 0xf3, 0xdc, 0xb8, 0x05, 0x2b, 0x33, 0x3b,\n\t0x7c, 0x6e, 0x8d, 0x4f, 0x6c, 0xef, 0x98, 0x45, 0xf2, 0x60, 0xa4, 0x05, 0x36, 0x38, 0x6b, 0x4f,\n\t0x70, 0xb4, 0xbf, 0x5f, 0x81, 0xf2, 0x37, 0x73, 0x16, 0x9e, 0x65, 0x04, 0xfa, 0xe0, 0xba, 0x02,\n\t0xc9, 0x17, 0x17, 0x2e, 0x4b, 0xca, 0x6f, 0x2f, 0x26, 0x65, 0x22, 0x53, 0x84, 0xc8, 0x95, 0x22,\n\t0x0b, 0x7c, 0x9a, 0x09, 0x63, 0xeb, 0x57, 0xd8, 0xda, 0x79, 0x70, 0x7b, 0x08, 0x95, 0x89, 0x3b,\n\t0x8d, 0x51, 0x75, 0x8b, 0xd5, 0x08, 0xee, 0xa5, 0xf3, 0x08, 0xd9, 0x54, 0xc2, 0xc8, 0xbb, 0xb0,\n\t0x22, 0x2a, 0x59, 0xeb, 0x07, 0xce, 0xc6, 0x82, 0x95, 0xf7, 0xa6, 0x48, 0x13, 0xbb, 0xff, 0x18,\n\t0xca, 0x7e, 0xc8, 0x37, 0x5f, 0xc7, 0x25, 0xef, 0x5c, 0x58, 0x72, 0xc8, 0xb9, 0x54, 0x80, 0xc8,\n\t0x87, 0x50, 0x3a, 0x71, 0xbd, 0x18, 0xb3, 0x46, 0x73, 0xfb, 0xf6, 0x05, 0xf0, 0x63, 0xd7, 0x8b,\n\t0x29, 0x42, 0x78, 0x98, 0x1f, 0xfb, 0x73, 0x2f, 0x6e, 0xdd, 0xc5, 0x0c, 0x23, 0x06, 0xe4, 0x1e,\n\t0x54, 0xfc, 0xc9, 0x24, 0x62, 0x31, 0x76, 0x96, 0xe5, 0x9d, 0xc2, 0xa7, 0x54, 0x12, 0xf8, 0x84,\n\t0xa9, 0x3b, 0x73, 0x63, 0xec, 0x43, 0xca, 0x54, 0x0c, 0xc8, 0x2e, 0xac, 0x8d, 0xfd, 0x59, 0xe0,\n\t0x4e, 0x99, 0x63, 0x8d, 0xe7, 0x61, 0xe4, 0x87, 0xad, 0x77, 0x2e, 0x1c, 0xd3, 0x9e, 0x44, 0xec,\n\t0x21, 0x80, 0x36, 0xc7, 0xb9, 0x31, 0x31, 0x60, 0x83, 0x79, 0x8e, 0xb5, 0xb8, 0xce, 0xfd, 0xd7,\n\t0xad, 0xb3, 0xce, 0x3c, 0x27, 0x4f, 0x4a, 0xc4, 0xc1, 0x48, 0x68, 0x61, 0xcc, 0x68, 0x6d, 0x60,\n\t0x90, 0xb9, 0x77, 0x69, 0xac, 0x14, 0xe2, 0x64, 0xc2, 0xf7, 0x6f, 0xc0, 0x2d, 0x19, 0x22, 0xad,\n\t0x80, 0x85, 0x13, 0x36, 0x8e, 0xad, 0x60, 0x6a, 0x7b, 0x58, 0xca, 0xa5, 0xc6, 0x4a, 0x24, 0xe4,\n\t0x50, 0x20, 0x0e, 0xa7, 0xb6, 0x47, 0x34, 0xa8, 0x3f, 0x67, 0x67, 0x91, 0xc5, 0x23, 0x29, 0x76,\n\t0xae, 0x29, 0xba, 0xc6, 0xe9, 0x43, 0x6f, 0x7a, 0x46, 0x7e, 0x02, 0x8d, 0xf8, 0xdc, 0xdb, 0xb0,\n\t0x61, 0x6d, 0xe4, 0x4e, 0x35, 0xe3, 0x8b, 0x34, 0x0b, 0x25, 0xf7, 0xa1, 0x2a, 0x35, 0xd4, 0xba,\n\t0x97, 0x5d, 0x3b, 0xa1, 0xf2, 0xc4, 0x3c, 0xb1, 0xdd, 0xa9, 0x7f, 0xca, 0x42, 0x6b, 0x16, 0xb5,\n\t0xda, 0xe2, 0xb6, 0x24, 0x21, 0x1d, 0x44, 0xdc, 0x4f, 0xa3, 0x38, 0xf4, 0xbd, 0xe3, 0xd6, 0x26,\n\t0xde, 0x93, 0xc8, 0xd1, 0xc5, 0xe0, 0xf7, 0x2e, 0x66, 0xfe, 0x7c, 0xf0, 0xfb, 0x1c, 0xee, 0x60,\n\t0x65, 0x66, 0x3d, 0x3b, 0xb3, 0xf2, 0x68, 0x0d, 0xd1, 0x1b, 0xc8, 0xdd, 0x3d, 0x3b, 0xcc, 0x4e,\n\t0x6a, 0x43, 0xcd, 0x71, 0xa3, 0xd8, 0xf5, 0xc6, 0x71, 0xab, 0x85, 0xef, 0x4c, 0xc7, 0xe4, 0x33,\n\t0xb8, 0x3d, 0x73, 0x3d, 0x2b, 0xb2, 0x27, 0xcc, 0x8a, 0x5d, 0xee, 0x9b, 0x6c, 0xec, 0x7b, 0x4e,\n\t0xd4, 0x7a, 0x80, 0x82, 0x93, 0x99, 0xeb, 0x8d, 0xec, 0x09, 0x33, 0xdd, 0x19, 0x1b, 0x09, 0x0e,\n\t0xf9, 0x08, 0xd6, 0x11, 0x1e, 0xb2, 0x60, 0xea, 0x8e, 0x6d, 0xf1, 0xfa, 0x1f, 0xe1, 0xeb, 0xd7,\n\t0x38, 0x83, 0x0a, 0x3a, 0xbe, 0xfa, 0x63, 0x68, 0x06, 0x2c, 0x8c, 0xdc, 0x28, 0xb6, 0xa4, 0x45,\n\t0xbf, 0x97, 0xd5, 0xda, 0xaa, 0x64, 0x0e, 0x91, 0xd7, 0xfe, 0xcf, 0x02, 0x54, 0x84, 0x73, 0x92,\n\t0x4f, 0x41, 0xf1, 0x03, 0xbc, 0x06, 0x69, 0x6e, 0x6f, 0x5e, 0xe2, 0xc1, 0x9d, 0x61, 0xc0, 0xeb,\n\t0x5e, 0x3f, 0xa4, 0x8a, 0x1f, 0xdc, 0xb8, 0x28, 0xd4, 0xfe, 0x10, 0x6a, 0xc9, 0x02, 0xbc, 0xbc,\n\t0xe8, 0xeb, 0xa3, 0x91, 0x65, 0x3e, 0xee, 0x0e, 0xd4, 0x02, 0xb9, 0x03, 0x24, 0x1d, 0x5a, 0x43,\n\t0x6a, 0xe9, 0xdf, 0x1c, 0x75, 0xfb, 0xaa, 0x82, 0x5d, 0x1a, 0xd5, 0xbb, 0xa6, 0x4e, 0x05, 0xb2,\n\t0x48, 0xee, 0xc1, 0xed, 0x2c, 0xe5, 0x1c, 0x5c, 0xc2, 0x14, 0x8c, 0x8f, 0x65, 0x52, 0x01, 0xc5,\n\t0x18, 0xa8, 0x15, 0x9e, 0x16, 0xf4, 0xef, 0x8d, 0x91, 0x39, 0x52, 0xab, 0xed, 0xbf, 0x29, 0x40,\n\t0x19, 0xc3, 0x06, 0x3f, 0x9f, 0x54, 0x72, 0x71, 0x5d, 0x73, 0x5e, 0xb9, 0x1a, 0xd9, 0x92, 0xaa,\n\t0x81, 0x01, 0x65, 0x73, 0x79, 0xf4, 0xf9, 0xb5, 0xd6, 0x53, 0x3f, 0x85, 0x12, 0x8f, 0x52, 0xbc,\n\t0x43, 0x1c, 0xd2, 0x9e, 0x4e, 0xad, 0x47, 0x06, 0x1d, 0xf1, 0x2a, 0x97, 0x40, 0xb3, 0x3b, 0xd8,\n\t0xd3, 0x47, 0xe6, 0x30, 0xa1, 0xa1, 0x56, 0x1e, 0x19, 0x7d, 0x33, 0x45, 0x15, 0xb5, 0x9f, 0xd7,\n\t0x60, 0x35, 0x89, 0x09, 0x22, 0x82, 0x3e, 0x82, 0x46, 0x10, 0xba, 0x33, 0x3b, 0x3c, 0x8b, 0xc6,\n\t0xb6, 0x87, 0x49, 0x01, 0xb6, 0x7f, 0xb4, 0x24, 0xaa, 0x88, 0x1d, 0x1d, 0x0a, 0xec, 0x68, 0x6c,\n\t0x7b, 0x34, 0x3b, 0x91, 0xf4, 0x61, 0x75, 0xc6, 0xc2, 0x63, 0xf6, 0x7b, 0xbe, 0xeb, 0xe1, 0x4a,\n\t0x55, 0x8c, 0xc8, 0xef, 0x5f, 0xba, 0xd2, 0x01, 0x47, 0xff, 0x8e, 0xef, 0x7a, 0xb8, 0x56, 0x7e,\n\t0x32, 0xf9, 0x04, 0xea, 0xa2, 0x12, 0x72, 0xd8, 0x04, 0x63, 0xc5, 0xb2, 0xda, 0x4f, 0xd4, 0xe8,\n\t0x3d, 0x36, 0xc9, 0xc4, 0x65, 0xb8, 0x34, 0x2e, 0x37, 0xb2, 0x71, 0xf9, 0xcd, 0x6c, 0x2c, 0x5a,\n\t0x11, 0x55, 0x78, 0x1a, 0x84, 0x2e, 0x38, 0x7c, 0x6b, 0x89, 0xc3, 0x77, 0x60, 0x23, 0xf1, 0x55,\n\t0xcb, 0xf5, 0x26, 0xee, 0x4b, 0x2b, 0x72, 0x5f, 0x89, 0xd8, 0x53, 0xa6, 0xeb, 0x09, 0xcb, 0xe0,\n\t0x9c, 0x91, 0xfb, 0x8a, 0x11, 0x23, 0xe9, 0xe0, 0x64, 0x0e, 0x5c, 0xc5, 0xab, 0xc9, 0xf7, 0x2e,\n\t0x55, 0x8f, 0x68, 0xbe, 0x64, 0x46, 0xcc, 0x4d, 0x6d, 0xff, 0x52, 0x81, 0x46, 0xe6, 0x1c, 0x78,\n\t0xf6, 0x16, 0xca, 0x42, 0x61, 0xc5, 0x55, 0x94, 0x50, 0x1f, 0x4a, 0xfa, 0x26, 0xd4, 0xa3, 0xd8,\n\t0x0e, 0x63, 0x8b, 0x17, 0x57, 0xb2, 0xdd, 0x45, 0xc2, 0x13, 0x76, 0x46, 0x3e, 0x80, 0x35, 0xc1,\n\t0x74, 0xbd, 0xf1, 0x74, 0x1e, 0xb9, 0xa7, 0xa2, 0x99, 0xaf, 0xd1, 0x26, 0x92, 0x8d, 0x84, 0x4a,\n\t0xee, 0x42, 0x95, 0x67, 0x21, 0xbe, 0x86, 0x68, 0xfa, 0x2a, 0xcc, 0x73, 0xf8, 0x0a, 0x0f, 0x60,\n\t0x95, 0x33, 0xce, 0xe7, 0x57, 0xc4, 0x2d, 0x33, 0xf3, 0x9c, 0xf3, 0xd9, 0x1d, 0xd8, 0x10, 0xaf,\n\t0x09, 0x44, 0xf1, 0x2a, 0x2b, 0xdc, 0x3b, 0xa8, 0xd8, 0x75, 0x64, 0xc9, 0xb2, 0x56, 0x14, 0x9c,\n\t0x1f, 0x01, 0xcf, 0x5e, 0x0b, 0xe8, 0xbb, 0x22, 0x94, 0x31, 0xcf, 0xc9, 0x61, 0x77, 0xe1, 0x1d,\n\t0x8e, 0x9d, 0x7b, 0x76, 0x10, 0x4c, 0x5d, 0xe6, 0x58, 0x53, 0xff, 0x18, 0x43, 0x66, 0x14, 0xdb,\n\t0xb3, 0xc0, 0x9a, 0x47, 0xad, 0x0d, 0x0c, 0x99, 0x6d, 0xe6, 0x39, 0x47, 0x09, 0xa8, 0xef, 0x1f,\n\t0x9b, 0x09, 0xe4, 0x28, 0x6a, 0xff, 0x3e, 0xac, 0xe6, 0xec, 0x71, 0x41, 0xa7, 0x35, 0x74, 0xfe,\n\t0x8c, 0x4e, 0xdf, 0x85, 0x95, 0x20, 0x64, 0xe7, 0xa2, 0xd5, 0x51, 0xb4, 0x86, 0xa0, 0x09, 0xb1,\n\t0xb6, 0x60, 0x05, 0x79, 0x96, 0x20, 0xe6, 0xf3, 0x63, 0x03, 0x59, 0x87, 0xc8, 0x69, 0xbf, 0x80,\n\t0x95, 0xec, 0x69, 0x93, 0x77, 0x33, 0x69, 0xa1, 0x99, 0xcb, 0x93, 0x69, 0x76, 0x48, 0x2a, 0xb2,\n\t0xf5, 0x4b, 0x2a, 0x32, 0x72, 0x9d, 0x8a, 0x4c, 0xfb, 0x2f, 0xd9, 0x9c, 0x65, 0x2a, 0x84, 0x9f,\n\t0x41, 0x2d, 0x90, 0xf5, 0x38, 0x5a, 0x52, 0xfe, 0x12, 0x3e, 0x0f, 0xee, 0x24, 0x95, 0x3b, 0x4d,\n\t0xe7, 0xb4, 0xff, 0x56, 0x81, 0x5a, 0x5a, 0xd0, 0xe7, 0x2c, 0xef, 0xcd, 0x05, 0xcb, 0x3b, 0x90,\n\t0x1a, 0x16, 0x0a, 0x7c, 0x1b, 0xa3, 0xc5, 0x27, 0xaf, 0x7f, 0xd7, 0xc5, 0xb6, 0xe7, 0x34, 0xdb,\n\t0xf6, 0x6c, 0xbe, 0xae, 0xed, 0xf9, 0xe4, 0xa2, 0xc1, 0xbf, 0x95, 0xe9, 0x2d, 0x16, 0xcc, 0xbe,\n\t0xfd, 0x7d, 0xae, 0x0f, 0xca, 0x26, 0x84, 0x77, 0xc4, 0x7e, 0xd2, 0x84, 0x90, 0xb6, 0x3f, 0xf7,\n\t0xaf, 0xd7, 0xfe, 0x6c, 0x43, 0x45, 0xea, 0xfc, 0x0e, 0x54, 0x64, 0x4d, 0x27, 0x1b, 0x04, 0x31,\n\t0x3a, 0x6f, 0x10, 0x0a, 0xb2, 0x4e, 0xd7, 0x7e, 0xae, 0x40, 0x59, 0x0f, 0x43, 0x3f, 0xd4, 0xfe,\n\t0x48, 0x81, 0x3a, 0x3e, 0xed, 0xf9, 0x0e, 0xe3, 0xd9, 0x60, 0xb7, 0xdb, 0xb3, 0xa8, 0xfe, 0xcd,\n\t0x91, 0x8e, 0xd9, 0xa0, 0x0d, 0x77, 0xf6, 0x86, 0x83, 0xbd, 0x23, 0x4a, 0xf5, 0x81, 0x69, 0x99,\n\t0xb4, 0x3b, 0x18, 0xf1, 0xb6, 0x67, 0x38, 0x50, 0x15, 0x9e, 0x29, 0x8c, 0x81, 0xa9, 0xd3, 0x41,\n\t0xb7, 0x6f, 0x89, 0x56, 0xb4, 0x88, 0x77, 0xb3, 0xba, 0xde, 0xb3, 0xf0, 0xd6, 0x51, 0x2d, 0xf1,\n\t0x96, 0xd5, 0x34, 0x0e, 0xf4, 0xe1, 0x91, 0xa9, 0x96, 0xc9, 0x6d, 0x58, 0x3f, 0xd4, 0xe9, 0x81,\n\t0x31, 0x1a, 0x19, 0xc3, 0x81, 0xd5, 0xd3, 0x07, 0x86, 0xde, 0x53, 0x2b, 0x7c, 0x9d, 0x5d, 0x63,\n\t0xdf, 0xec, 0xee, 0xf6, 0x75, 0xb9, 0x4e, 0x95, 0x6c, 0xc2, 0x5b, 0x7b, 0xc3, 0x83, 0x03, 0xc3,\n\t0x34, 0xf5, 0x9e, 0xb5, 0x7b, 0x64, 0x5a, 0x23, 0xd3, 0xe8, 0xf7, 0xad, 0xee, 0xe1, 0x61, 0xff,\n\t0x29, 0x4f, 0x60, 0x35, 0x72, 0x17, 0x36, 0xf6, 0xba, 0x87, 0xdd, 0x5d, 0xa3, 0x6f, 0x98, 0x4f,\n\t0xad, 0x9e, 0x31, 0xe2, 0xf3, 0x7b, 0x6a, 0x9d, 0x27, 0x6c, 0x93, 0x3e, 0xb5, 0xba, 0x7d, 0x14,\n\t0xcd, 0xd4, 0xad, 0xdd, 0xee, 0xde, 0x13, 0x7d, 0xd0, 0x53, 0x81, 0x0b, 0x30, 0xea, 0x3e, 0xd2,\n\t0x2d, 0x2e, 0x92, 0x65, 0x0e, 0x87, 0xd6, 0xb0, 0xdf, 0x53, 0x1b, 0xda, 0xbf, 0x14, 0xa1, 0xb4,\n\t0xe7, 0x47, 0x31, 0xf7, 0x46, 0xe1, 0xac, 0x2f, 0x42, 0x37, 0x66, 0xa2, 0x7f, 0x2b, 0x53, 0xd1,\n\t0x4b, 0x7f, 0x87, 0x24, 0x1e, 0x50, 0x32, 0x10, 0xeb, 0xd9, 0x19, 0xc7, 0x29, 0x88, 0x5b, 0x3b,\n\t0xc7, 0xed, 0x72, 0xb2, 0x88, 0x68, 0x78, 0x85, 0x23, 0xd7, 0x2b, 0x22, 0x4e, 0x06, 0x61, 0xb9,\n\t0xe0, 0xc7, 0x40, 0xb2, 0x20, 0xb9, 0x62, 0x09, 0x91, 0x6a, 0x06, 0x29, 0x96, 0xdc, 0x01, 0x18,\n\t0xfb, 0xb3, 0x99, 0x1b, 0x8f, 0xfd, 0x28, 0x96, 0x5f, 0xc8, 0xda, 0x39, 0x63, 0x8f, 0x62, 0x6e,\n\t0xf1, 0x33, 0x37, 0xe6, 0x8f, 0x34, 0x83, 0x26, 0x3b, 0x70, 0xcf, 0x0e, 0x82, 0xd0, 0x7f, 0xe9,\n\t0xce, 0xec, 0x98, 0x59, 0xdc, 0x73, 0xed, 0x63, 0x66, 0x39, 0x6c, 0x1a, 0xdb, 0xd8, 0x13, 0x95,\n\t0xe9, 0xdd, 0x0c, 0x60, 0x24, 0xf8, 0x3d, 0xce, 0xe6, 0x71, 0xd7, 0x75, 0xac, 0x88, 0xfd, 0x30,\n\t0xe7, 0x1e, 0x60, 0xcd, 0x03, 0xc7, 0xe6, 0x62, 0xd6, 0x45, 0x96, 0x72, 0x9d, 0x91, 0xe4, 0x1c,\n\t0x09, 0x46, 0xfb, 0x15, 0xc0, 0xb9, 0x14, 0x64, 0x1b, 0x6e, 0xf3, 0x3a, 0x9e, 0x45, 0x31, 0x73,\n\t0x2c, 0xb9, 0xdb, 0x60, 0x1e, 0x47, 0x18, 0xe2, 0xcb, 0x74, 0x23, 0x65, 0xca, 0x9b, 0xc2, 0x79,\n\t0x1c, 0x91, 0x9f, 0x40, 0xeb, 0xc2, 0x1c, 0x87, 0x4d, 0x19, 0x7f, 0x6d, 0x15, 0xa7, 0xdd, 0x59,\n\t0x98, 0xd6, 0x13, 0x5c, 0xed, 0x4f, 0x14, 0x80, 0x7d, 0x16, 0x53, 0xc1, 0xcd, 0x34, 0xb6, 0x95,\n\t0xeb, 0x36, 0xb6, 0xef, 0x27, 0x17, 0x08, 0xc5, 0xab, 0x63, 0xc0, 0x42, 0x97, 0xa1, 0xdc, 0xa4,\n\t0xcb, 0xc8, 0x35, 0x11, 0xc5, 0x2b, 0x9a, 0x88, 0x52, 0xae, 0x89, 0xf8, 0x18, 0x9a, 0xf6, 0x74,\n\t0xea, 0xbf, 0xe0, 0x05, 0x0d, 0x0b, 0x43, 0xe6, 0xa0, 0x11, 0x9c, 0xd7, 0xdb, 0xc8, 0xec, 0x49,\n\t0x9e, 0xf6, 0xe7, 0x0a, 0x34, 0x50, 0x15, 0x51, 0xe0, 0x7b, 0x11, 0x23, 0x5f, 0x42, 0x45, 0x5e,\n\t0x44, 0x8b, 0x8b, 0xfc, 0xb7, 0x33, 0xb2, 0x66, 0x70, 0xb2, 0x68, 0xa0, 0x12, 0xcc, 0x33, 0x42,\n\t0xe6, 0x75, 0x97, 0x2b, 0x25, 0x45, 0x91, 0xfb, 0x50, 0x73, 0x3d, 0x4b, 0xb4, 0xd4, 0x95, 0x4c,\n\t0x58, 0xac, 0xba, 0x1e, 0xd6, 0xb2, 0xed, 0x57, 0x50, 0x11, 0x2f, 0x21, 0x9d, 0x54, 0xa6, 0x8b,\n\t0xfa, 0xcb, 0xdc, 0x1c, 0xa7, 0xc2, 0xc8, 0xc3, 0x29, 0xbd, 0x2e, 0x40, 0xb7, 0xa0, 0x7a, 0xca,\n\t0x9b, 0x0f, 0xbc, 0xf4, 0xe3, 0xea, 0x4d, 0x86, 0xda, 0x1f, 0x97, 0x00, 0x0e, 0xe7, 0x4b, 0x0c,\n\t0xa4, 0x71, 0x5d, 0x03, 0xe9, 0xe4, 0xf4, 0xf8, 0x7a, 0x99, 0x7f, 0x75, 0x43, 0x59, 0xd2, 0x69,\n\t0x17, 0x6f, 0xda, 0x69, 0xdf, 0x87, 0x6a, 0x1c, 0xce, 0xb9, 0xa3, 0x08, 0x63, 0x4a, 0x5b, 0x5a,\n\t0x49, 0x25, 0x6f, 0x42, 0x79, 0xe2, 0x87, 0x63, 0x86, 0x8e, 0x95, 0xb2, 0x05, 0xed, 0xc2, 0x65,\n\t0x52, 0xed, 0xb2, 0xcb, 0x24, 0xde, 0xa0, 0x45, 0xf2, 0x1e, 0x0d, 0x0b, 0x99, 0x7c, 0x83, 0x96,\n\t0x5c, 0xb1, 0xd1, 0x14, 0x44, 0xbe, 0x81, 0xa6, 0x3d, 0x8f, 0x7d, 0xcb, 0xe5, 0x15, 0xda, 0xd4,\n\t0x1d, 0x9f, 0x61, 0xd9, 0xdd, 0xcc, 0x7f, 0xaf, 0x4f, 0x0f, 0xaa, 0xd3, 0x9d, 0xc7, 0xbe, 0xe1,\n\t0x1c, 0x22, 0x72, 0xa7, 0x2a, 0x93, 0x12, 0x5d, 0xb1, 0x33, 0x64, 0xed, 0xc7, 0xb0, 0x92, 0x85,\n\t0xf1, 0x04, 0x24, 0x81, 0xea, 0x1b, 0x3c, 0x3b, 0x8d, 0x78, 0x6a, 0x1b, 0x98, 0x46, 0xb7, 0xaf,\n\t0x16, 0xb4, 0x18, 0x1a, 0xb8, 0xbc, 0xf4, 0x8e, 0xeb, 0xba, 0xfd, 0x03, 0x28, 0x61, 0xf8, 0x55,\n\t0x2e, 0x7c, 0x0f, 0xc1, 0x98, 0x8b, 0xcc, 0xbc, 0xf9, 0x15, 0xb3, 0xe6, 0xf7, 0xdf, 0x05, 0x58,\n\t0x31, 0xfd, 0xf9, 0xf8, 0xe4, 0xa2, 0x01, 0xc2, 0xaf, 0x3b, 0x42, 0x2d, 0x31, 0x1f, 0xe5, 0xa6,\n\t0xe6, 0x93, 0x5a, 0x47, 0x71, 0x89, 0x75, 0xdc, 0xf4, 0xcc, 0xb5, 0x2f, 0x60, 0x55, 0x6e, 0x5e,\n\t0x6a, 0x3d, 0xd1, 0x66, 0xe1, 0x0a, 0x6d, 0x6a, 0xbf, 0x50, 0x60, 0x55, 0xc4, 0xf7, 0xff, 0xbb,\n\t0xd2, 0x2a, 0x37, 0x0c, 0xeb, 0xe5, 0x1b, 0x5d, 0x1e, 0xfd, 0xbf, 0xf4, 0x34, 0x6d, 0x08, 0xcd,\n\t0x44, 0x7d, 0x37, 0x50, 0xfb, 0x15, 0x46, 0xfc, 0x8b, 0x02, 0x34, 0x06, 0xec, 0xe5, 0x92, 0x20,\n\t0x5a, 0xbe, 0xee, 0x71, 0x7c, 0x98, 0x2b, 0x57, 0x1b, 0xdb, 0xeb, 0x59, 0x19, 0xc4, 0xd5, 0x63,\n\t0x52, 0xc1, 0xa6, 0xb7, 0xa8, 0xca, 0xf2, 0x5b, 0xd4, 0xd2, 0x62, 0xb7, 0x9e, 0xb9, 0xc5, 0x2b,\n\t0x2e, 0xbb, 0xc5, 0xd3, 0xfe, 0xad, 0x08, 0x0d, 0x6c, 0x90, 0x29, 0x8b, 0xe6, 0xd3, 0x38, 0x27,\n\t0x4c, 0xe1, 0x6a, 0x61, 0x3a, 0x50, 0x09, 0x71, 0x92, 0x74, 0xa5, 0x4b, 0x83, 0xbf, 0x40, 0x61,\n\t0x6b, 0xfc, 0xdc, 0x0d, 0x02, 0xe6, 0x58, 0x82, 0x92, 0x14, 0x30, 0x4d, 0x49, 0x16, 0x22, 0x44,\n\t0xbc, 0xfc, 0x9c, 0xf9, 0x21, 0x4b, 0x51, 0x45, 0xbc, 0x4f, 0x68, 0x70, 0x5a, 0x02, 0xc9, 0xdd,\n\t0x37, 0x88, 0xca, 0xe0, 0xfc, 0xbe, 0x21, 0xed, 0x35, 0x91, 0x5b, 0x47, 0xae, 0xe8, 0x35, 0x91,\n\t0xcd, 0xbb, 0xa8, 0x99, 0x3d, 0x9d, 0x5a, 0x7e, 0x10, 0xa1, 0xd3, 0xd4, 0x68, 0x0d, 0x09, 0xc3,\n\t0x20, 0x22, 0x5f, 0x43, 0x7a, 0x5d, 0x2c, 0x6f, 0xc9, 0xc5, 0x39, 0xb6, 0x2e, 0xbb, 0x58, 0xa0,\n\t0xab, 0xe3, 0xdc, 0xfd, 0xcf, 0x92, 0x1b, 0xea, 0xca, 0x4d, 0x6f, 0xa8, 0x1f, 0x42, 0x59, 0xc4,\n\t0xa8, 0xda, 0xeb, 0x62, 0x94, 0xc0, 0x65, 0xed, 0xb3, 0x91, 0xb7, 0xcf, 0x5f, 0x16, 0x80, 0x74,\n\t0xa7, 0x53, 0x7f, 0x6c, 0xc7, 0xcc, 0x70, 0xa2, 0x8b, 0x66, 0x7a, 0xed, 0xcf, 0x2e, 0x9f, 0x41,\n\t0x7d, 0xe6, 0x3b, 0x6c, 0x6a, 0x25, 0xdf, 0x94, 0x2e, 0xad, 0x7e, 0x10, 0xc6, 0x5b, 0x52, 0x02,\n\t0x25, 0xbc, 0xc4, 0x51, 0xb0, 0xee, 0xc0, 0x67, 0xde, 0x84, 0xcd, 0xec, 0x97, 0xb2, 0x14, 0xe1,\n\t0x8f, 0xa4, 0x03, 0xd5, 0x90, 0x45, 0x2c, 0x3c, 0x65, 0x57, 0x16, 0x55, 0x09, 0x48, 0x7b, 0x06,\n\t0x1b, 0xb9, 0x1d, 0x49, 0x47, 0xbe, 0x85, 0x5f, 0x2b, 0xc3, 0x58, 0x7e, 0xb4, 0x12, 0x03, 0xfe,\n\t0x3a, 0xe6, 0x25, 0x9f, 0x41, 0xf9, 0x63, 0xea, 0xf0, 0xc5, 0xab, 0xe2, 0xec, 0x1e, 0xa8, 0x59,\n\t0x4d, 0xbb, 0x63, 0x0c, 0x36, 0xf2, 0x54, 0x0a, 0xd7, 0x3b, 0x15, 0xed, 0xef, 0x0a, 0xb0, 0xde,\n\t0x75, 0x1c, 0xf1, 0x77, 0xc3, 0x25, 0xaa, 0x2f, 0x5e, 0x57, 0xf5, 0x0b, 0x81, 0x58, 0x84, 0x89,\n\t0x6b, 0x05, 0xe2, 0x0f, 0xa1, 0x92, 0xd6, 0x5a, 0xc5, 0x05, 0x77, 0x16, 0x72, 0x51, 0x09, 0xd0,\n\t0x6e, 0x01, 0xc9, 0x0a, 0x2b, 0xb4, 0xaa, 0xfd, 0x69, 0x11, 0xee, 0xee, 0xb2, 0x63, 0xd7, 0xcb,\n\t0xbe, 0xe2, 0x57, 0xdf, 0xc9, 0xc5, 0x4f, 0x65, 0x9f, 0xc1, 0xba, 0x28, 0xe4, 0x93, 0x7f, 0x62,\n\t0x59, 0xec, 0x58, 0x7e, 0x9d, 0x94, 0xb1, 0x6a, 0x0d, 0xf9, 0x07, 0x92, 0xad, 0xe3, 0x7f, 0xc5,\n\t0x1c, 0x3b, 0xb6, 0x9f, 0xd9, 0x11, 0xb3, 0x5c, 0x47, 0xfe, 0x59, 0x06, 0x12, 0x92, 0xe1, 0x90,\n\t0x21, 0x94, 0xb8, 0x0d, 0xa2, 0xeb, 0x36, 0xb7, 0xb7, 0x33, 0x62, 0x5d, 0xb2, 0x95, 0xac, 0x02,\n\t0x0f, 0x7c, 0x87, 0xed, 0x54, 0x8f, 0x06, 0x4f, 0x06, 0xc3, 0xef, 0x06, 0x14, 0x17, 0x22, 0x06,\n\t0xdc, 0x0a, 0x42, 0x76, 0xea, 0xfa, 0xf3, 0xc8, 0xca, 0x9e, 0x44, 0xf5, 0xca, 0x94, 0xb8, 0x91,\n\t0xcc, 0xc9, 0x10, 0xb5, 0x9f, 0xc2, 0xda, 0xc2, 0xcb, 0x78, 0x6d, 0x26, 0x5f, 0xa7, 0xbe, 0x41,\n\t0x56, 0xa1, 0x8e, 0x1f, 0xbb, 0x97, 0x7f, 0xfb, 0xd6, 0xfe, 0xb5, 0x80, 0x57, 0x4c, 0x33, 0x37,\n\t0xbe, 0x59, 0x06, 0xfb, 0xcd, 0x7c, 0x06, 0x83, 0xed, 0x77, 0xf3, 0xe6, 0x9b, 0x59, 0xb0, 0xf3,\n\t0xad, 0x00, 0xa6, 0x41, 0xa4, 0x6d, 0x43, 0x55, 0xd2, 0xc8, 0x6f, 0xc1, 0x5a, 0xe8, 0xfb, 0x71,\n\t0xd2, 0x89, 0x8a, 0x0e, 0xe4, 0xf2, 0x3f, 0xdb, 0xac, 0x72, 0xb0, 0x48, 0x06, 0x4f, 0xf2, 0xbd,\n\t0x48, 0x59, 0xfc, 0x0d, 0x44, 0x0e, 0x77, 0x1b, 0xbf, 0x5b, 0x4f, 0xff, 0xb7, 0xfb, 0xbf, 0x01,\n\t0x00, 0x00, 0xff, 0xff, 0x35, 0x9f, 0x30, 0x98, 0xf2, 0x2b, 0x00, 0x00,\n}\n"
  },
  {
    "path": "vendor/google.golang.org/appengine/internal/identity.go",
    "content": "// Copyright 2011 Google Inc. All rights reserved.\n// Use of this source code is governed by the Apache 2.0\n// license that can be found in the LICENSE file.\n\npackage internal\n\nimport (\n\t\"os\"\n\n\tnetcontext \"golang.org/x/net/context\"\n)\n\nvar (\n\t// This is set to true in identity_classic.go, which is behind the appengine build tag.\n\t// The appengine build tag is set for the first generation runtimes (<= Go 1.9) but not\n\t// the second generation runtimes (>= Go 1.11), so this indicates whether we're on a\n\t// first-gen runtime. See IsStandard below for the second-gen check.\n\tappengineStandard bool\n\n\t// This is set to true in identity_flex.go, which is behind the appenginevm build tag.\n\tappengineFlex bool\n)\n\n// AppID is the implementation of the wrapper function of the same name in\n// ../identity.go. See that file for commentary.\nfunc AppID(c netcontext.Context) string {\n\treturn appID(FullyQualifiedAppID(c))\n}\n\n// IsStandard is the implementation of the wrapper function of the same name in\n// ../appengine.go. See that file for commentary.\nfunc IsStandard() bool {\n\t// appengineStandard will be true for first-gen runtimes (<= Go 1.9) but not\n\t// second-gen (>= Go 1.11).\n\treturn appengineStandard || IsSecondGen()\n}\n\n// IsStandard is the implementation of the wrapper function of the same name in\n// ../appengine.go. See that file for commentary.\nfunc IsSecondGen() bool {\n\t// Second-gen runtimes set $GAE_ENV so we use that to check if we're on a second-gen runtime.\n\treturn os.Getenv(\"GAE_ENV\") == \"standard\"\n}\n\n// IsFlex is the implementation of the wrapper function of the same name in\n// ../appengine.go. See that file for commentary.\nfunc IsFlex() bool {\n\treturn appengineFlex\n}\n\n// IsAppEngine is the implementation of the wrapper function of the same name in\n// ../appengine.go. See that file for commentary.\nfunc IsAppEngine() bool {\n\treturn IsStandard() || IsFlex()\n}\n"
  },
  {
    "path": "vendor/google.golang.org/appengine/internal/identity_classic.go",
    "content": "// Copyright 2015 Google Inc. All rights reserved.\n// Use of this source code is governed by the Apache 2.0\n// license that can be found in the LICENSE file.\n\n// +build appengine\n\npackage internal\n\nimport (\n\t\"appengine\"\n\n\tnetcontext \"golang.org/x/net/context\"\n)\n\nfunc init() {\n\tappengineStandard = true\n}\n\nfunc DefaultVersionHostname(ctx netcontext.Context) string {\n\tc := fromContext(ctx)\n\tif c == nil {\n\t\tpanic(errNotAppEngineContext)\n\t}\n\treturn appengine.DefaultVersionHostname(c)\n}\n\nfunc Datacenter(_ netcontext.Context) string { return appengine.Datacenter() }\nfunc ServerSoftware() string                 { return appengine.ServerSoftware() }\nfunc InstanceID() string                     { return appengine.InstanceID() }\nfunc IsDevAppServer() bool                   { return appengine.IsDevAppServer() }\n\nfunc RequestID(ctx netcontext.Context) string {\n\tc := fromContext(ctx)\n\tif c == nil {\n\t\tpanic(errNotAppEngineContext)\n\t}\n\treturn appengine.RequestID(c)\n}\n\nfunc ModuleName(ctx netcontext.Context) string {\n\tc := fromContext(ctx)\n\tif c == nil {\n\t\tpanic(errNotAppEngineContext)\n\t}\n\treturn appengine.ModuleName(c)\n}\nfunc VersionID(ctx netcontext.Context) string {\n\tc := fromContext(ctx)\n\tif c == nil {\n\t\tpanic(errNotAppEngineContext)\n\t}\n\treturn appengine.VersionID(c)\n}\n\nfunc fullyQualifiedAppID(ctx netcontext.Context) string {\n\tc := fromContext(ctx)\n\tif c == nil {\n\t\tpanic(errNotAppEngineContext)\n\t}\n\treturn c.FullyQualifiedAppID()\n}\n"
  },
  {
    "path": "vendor/google.golang.org/appengine/internal/identity_flex.go",
    "content": "// Copyright 2018 Google LLC. All rights reserved.\n// Use of this source code is governed by the Apache 2.0\n// license that can be found in the LICENSE file.\n\n// +build appenginevm\n\npackage internal\n\nfunc init() {\n\tappengineFlex = true\n}\n"
  },
  {
    "path": "vendor/google.golang.org/appengine/internal/identity_vm.go",
    "content": "// Copyright 2011 Google Inc. All rights reserved.\n// Use of this source code is governed by the Apache 2.0\n// license that can be found in the LICENSE file.\n\n// +build !appengine\n\npackage internal\n\nimport (\n\t\"log\"\n\t\"net/http\"\n\t\"os\"\n\t\"strings\"\n\n\tnetcontext \"golang.org/x/net/context\"\n)\n\n// These functions are implementations of the wrapper functions\n// in ../appengine/identity.go. See that file for commentary.\n\nconst (\n\thDefaultVersionHostname = \"X-AppEngine-Default-Version-Hostname\"\n\thRequestLogId           = \"X-AppEngine-Request-Log-Id\"\n\thDatacenter             = \"X-AppEngine-Datacenter\"\n)\n\nfunc ctxHeaders(ctx netcontext.Context) http.Header {\n\tc := fromContext(ctx)\n\tif c == nil {\n\t\treturn nil\n\t}\n\treturn c.Request().Header\n}\n\nfunc DefaultVersionHostname(ctx netcontext.Context) string {\n\treturn ctxHeaders(ctx).Get(hDefaultVersionHostname)\n}\n\nfunc RequestID(ctx netcontext.Context) string {\n\treturn ctxHeaders(ctx).Get(hRequestLogId)\n}\n\nfunc Datacenter(ctx netcontext.Context) string {\n\tif dc := ctxHeaders(ctx).Get(hDatacenter); dc != \"\" {\n\t\treturn dc\n\t}\n\t// If the header isn't set, read zone from the metadata service.\n\t// It has the format projects/[NUMERIC_PROJECT_ID]/zones/[ZONE]\n\tzone, err := getMetadata(\"instance/zone\")\n\tif err != nil {\n\t\tlog.Printf(\"Datacenter: %v\", err)\n\t\treturn \"\"\n\t}\n\tparts := strings.Split(string(zone), \"/\")\n\tif len(parts) == 0 {\n\t\treturn \"\"\n\t}\n\treturn parts[len(parts)-1]\n}\n\nfunc ServerSoftware() string {\n\t// TODO(dsymonds): Remove fallback when we've verified this.\n\tif s := os.Getenv(\"SERVER_SOFTWARE\"); s != \"\" {\n\t\treturn s\n\t}\n\tif s := os.Getenv(\"GAE_ENV\"); s != \"\" {\n\t\treturn s\n\t}\n\treturn \"Google App Engine/1.x.x\"\n}\n\n// TODO(dsymonds): Remove the metadata fetches.\n\nfunc ModuleName(_ netcontext.Context) string {\n\tif s := os.Getenv(\"GAE_MODULE_NAME\"); s != \"\" {\n\t\treturn s\n\t}\n\tif s := os.Getenv(\"GAE_SERVICE\"); s != \"\" {\n\t\treturn s\n\t}\n\treturn string(mustGetMetadata(\"instance/attributes/gae_backend_name\"))\n}\n\nfunc VersionID(_ netcontext.Context) string {\n\tif s1, s2 := os.Getenv(\"GAE_MODULE_VERSION\"), os.Getenv(\"GAE_MINOR_VERSION\"); s1 != \"\" && s2 != \"\" {\n\t\treturn s1 + \".\" + s2\n\t}\n\tif s1, s2 := os.Getenv(\"GAE_VERSION\"), os.Getenv(\"GAE_DEPLOYMENT_ID\"); s1 != \"\" && s2 != \"\" {\n\t\treturn s1 + \".\" + s2\n\t}\n\treturn string(mustGetMetadata(\"instance/attributes/gae_backend_version\")) + \".\" + string(mustGetMetadata(\"instance/attributes/gae_backend_minor_version\"))\n}\n\nfunc InstanceID() string {\n\tif s := os.Getenv(\"GAE_MODULE_INSTANCE\"); s != \"\" {\n\t\treturn s\n\t}\n\tif s := os.Getenv(\"GAE_INSTANCE\"); s != \"\" {\n\t\treturn s\n\t}\n\treturn string(mustGetMetadata(\"instance/attributes/gae_backend_instance\"))\n}\n\nfunc partitionlessAppID() string {\n\t// gae_project has everything except the partition prefix.\n\tif appID := os.Getenv(\"GAE_LONG_APP_ID\"); appID != \"\" {\n\t\treturn appID\n\t}\n\tif project := os.Getenv(\"GOOGLE_CLOUD_PROJECT\"); project != \"\" {\n\t\treturn project\n\t}\n\treturn string(mustGetMetadata(\"instance/attributes/gae_project\"))\n}\n\nfunc fullyQualifiedAppID(_ netcontext.Context) string {\n\tif s := os.Getenv(\"GAE_APPLICATION\"); s != \"\" {\n\t\treturn s\n\t}\n\tappID := partitionlessAppID()\n\n\tpart := os.Getenv(\"GAE_PARTITION\")\n\tif part == \"\" {\n\t\tpart = string(mustGetMetadata(\"instance/attributes/gae_partition\"))\n\t}\n\n\tif part != \"\" {\n\t\tappID = part + \"~\" + appID\n\t}\n\treturn appID\n}\n\nfunc IsDevAppServer() bool {\n\treturn os.Getenv(\"RUN_WITH_DEVAPPSERVER\") != \"\"\n}\n"
  },
  {
    "path": "vendor/google.golang.org/appengine/internal/internal.go",
    "content": "// Copyright 2011 Google Inc. All rights reserved.\n// Use of this source code is governed by the Apache 2.0\n// license that can be found in the LICENSE file.\n\n// Package internal provides support for package appengine.\n//\n// Programs should not use this package directly. Its API is not stable.\n// Use packages appengine and appengine/* instead.\npackage internal\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/golang/protobuf/proto\"\n\n\tremotepb \"google.golang.org/appengine/internal/remote_api\"\n)\n\n// errorCodeMaps is a map of service name to the error code map for the service.\nvar errorCodeMaps = make(map[string]map[int32]string)\n\n// RegisterErrorCodeMap is called from API implementations to register their\n// error code map. This should only be called from init functions.\nfunc RegisterErrorCodeMap(service string, m map[int32]string) {\n\terrorCodeMaps[service] = m\n}\n\ntype timeoutCodeKey struct {\n\tservice string\n\tcode    int32\n}\n\n// timeoutCodes is the set of service+code pairs that represent timeouts.\nvar timeoutCodes = make(map[timeoutCodeKey]bool)\n\nfunc RegisterTimeoutErrorCode(service string, code int32) {\n\ttimeoutCodes[timeoutCodeKey{service, code}] = true\n}\n\n// APIError is the type returned by appengine.Context's Call method\n// when an API call fails in an API-specific way. This may be, for instance,\n// a taskqueue API call failing with TaskQueueServiceError::UNKNOWN_QUEUE.\ntype APIError struct {\n\tService string\n\tDetail  string\n\tCode    int32 // API-specific error code\n}\n\nfunc (e *APIError) Error() string {\n\tif e.Code == 0 {\n\t\tif e.Detail == \"\" {\n\t\t\treturn \"APIError <empty>\"\n\t\t}\n\t\treturn e.Detail\n\t}\n\ts := fmt.Sprintf(\"API error %d\", e.Code)\n\tif m, ok := errorCodeMaps[e.Service]; ok {\n\t\ts += \" (\" + e.Service + \": \" + m[e.Code] + \")\"\n\t} else {\n\t\t// Shouldn't happen, but provide a bit more detail if it does.\n\t\ts = e.Service + \" \" + s\n\t}\n\tif e.Detail != \"\" {\n\t\ts += \": \" + e.Detail\n\t}\n\treturn s\n}\n\nfunc (e *APIError) IsTimeout() bool {\n\treturn timeoutCodes[timeoutCodeKey{e.Service, e.Code}]\n}\n\n// CallError is the type returned by appengine.Context's Call method when an\n// API call fails in a generic way, such as RpcError::CAPABILITY_DISABLED.\ntype CallError struct {\n\tDetail string\n\tCode   int32\n\t// TODO: Remove this if we get a distinguishable error code.\n\tTimeout bool\n}\n\nfunc (e *CallError) Error() string {\n\tvar msg string\n\tswitch remotepb.RpcError_ErrorCode(e.Code) {\n\tcase remotepb.RpcError_UNKNOWN:\n\t\treturn e.Detail\n\tcase remotepb.RpcError_OVER_QUOTA:\n\t\tmsg = \"Over quota\"\n\tcase remotepb.RpcError_CAPABILITY_DISABLED:\n\t\tmsg = \"Capability disabled\"\n\tcase remotepb.RpcError_CANCELLED:\n\t\tmsg = \"Canceled\"\n\tdefault:\n\t\tmsg = fmt.Sprintf(\"Call error %d\", e.Code)\n\t}\n\ts := msg + \": \" + e.Detail\n\tif e.Timeout {\n\t\ts += \" (timeout)\"\n\t}\n\treturn s\n}\n\nfunc (e *CallError) IsTimeout() bool {\n\treturn e.Timeout\n}\n\n// NamespaceMods is a map from API service to a function that will mutate an RPC request to attach a namespace.\n// The function should be prepared to be called on the same message more than once; it should only modify the\n// RPC request the first time.\nvar NamespaceMods = make(map[string]func(m proto.Message, namespace string))\n"
  },
  {
    "path": "vendor/google.golang.org/appengine/internal/log/log_service.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// source: google.golang.org/appengine/internal/log/log_service.proto\n\npackage log\n\nimport proto \"github.com/golang/protobuf/proto\"\nimport fmt \"fmt\"\nimport math \"math\"\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar _ = proto.Marshal\nvar _ = fmt.Errorf\nvar _ = math.Inf\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package\n\ntype LogServiceError_ErrorCode int32\n\nconst (\n\tLogServiceError_OK              LogServiceError_ErrorCode = 0\n\tLogServiceError_INVALID_REQUEST LogServiceError_ErrorCode = 1\n\tLogServiceError_STORAGE_ERROR   LogServiceError_ErrorCode = 2\n)\n\nvar LogServiceError_ErrorCode_name = map[int32]string{\n\t0: \"OK\",\n\t1: \"INVALID_REQUEST\",\n\t2: \"STORAGE_ERROR\",\n}\nvar LogServiceError_ErrorCode_value = map[string]int32{\n\t\"OK\":              0,\n\t\"INVALID_REQUEST\": 1,\n\t\"STORAGE_ERROR\":   2,\n}\n\nfunc (x LogServiceError_ErrorCode) Enum() *LogServiceError_ErrorCode {\n\tp := new(LogServiceError_ErrorCode)\n\t*p = x\n\treturn p\n}\nfunc (x LogServiceError_ErrorCode) String() string {\n\treturn proto.EnumName(LogServiceError_ErrorCode_name, int32(x))\n}\nfunc (x *LogServiceError_ErrorCode) UnmarshalJSON(data []byte) error {\n\tvalue, err := proto.UnmarshalJSONEnum(LogServiceError_ErrorCode_value, data, \"LogServiceError_ErrorCode\")\n\tif err != nil {\n\t\treturn err\n\t}\n\t*x = LogServiceError_ErrorCode(value)\n\treturn nil\n}\nfunc (LogServiceError_ErrorCode) EnumDescriptor() ([]byte, []int) {\n\treturn fileDescriptor_log_service_f054fd4b5012319d, []int{0, 0}\n}\n\ntype LogServiceError struct {\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *LogServiceError) Reset()         { *m = LogServiceError{} }\nfunc (m *LogServiceError) String() string { return proto.CompactTextString(m) }\nfunc (*LogServiceError) ProtoMessage()    {}\nfunc (*LogServiceError) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_log_service_f054fd4b5012319d, []int{0}\n}\nfunc (m *LogServiceError) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_LogServiceError.Unmarshal(m, b)\n}\nfunc (m *LogServiceError) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_LogServiceError.Marshal(b, m, deterministic)\n}\nfunc (dst *LogServiceError) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_LogServiceError.Merge(dst, src)\n}\nfunc (m *LogServiceError) XXX_Size() int {\n\treturn xxx_messageInfo_LogServiceError.Size(m)\n}\nfunc (m *LogServiceError) XXX_DiscardUnknown() {\n\txxx_messageInfo_LogServiceError.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_LogServiceError proto.InternalMessageInfo\n\ntype UserAppLogLine struct {\n\tTimestampUsec        *int64   `protobuf:\"varint,1,req,name=timestamp_usec,json=timestampUsec\" json:\"timestamp_usec,omitempty\"`\n\tLevel                *int64   `protobuf:\"varint,2,req,name=level\" json:\"level,omitempty\"`\n\tMessage              *string  `protobuf:\"bytes,3,req,name=message\" json:\"message,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *UserAppLogLine) Reset()         { *m = UserAppLogLine{} }\nfunc (m *UserAppLogLine) String() string { return proto.CompactTextString(m) }\nfunc (*UserAppLogLine) ProtoMessage()    {}\nfunc (*UserAppLogLine) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_log_service_f054fd4b5012319d, []int{1}\n}\nfunc (m *UserAppLogLine) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_UserAppLogLine.Unmarshal(m, b)\n}\nfunc (m *UserAppLogLine) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_UserAppLogLine.Marshal(b, m, deterministic)\n}\nfunc (dst *UserAppLogLine) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_UserAppLogLine.Merge(dst, src)\n}\nfunc (m *UserAppLogLine) XXX_Size() int {\n\treturn xxx_messageInfo_UserAppLogLine.Size(m)\n}\nfunc (m *UserAppLogLine) XXX_DiscardUnknown() {\n\txxx_messageInfo_UserAppLogLine.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_UserAppLogLine proto.InternalMessageInfo\n\nfunc (m *UserAppLogLine) GetTimestampUsec() int64 {\n\tif m != nil && m.TimestampUsec != nil {\n\t\treturn *m.TimestampUsec\n\t}\n\treturn 0\n}\n\nfunc (m *UserAppLogLine) GetLevel() int64 {\n\tif m != nil && m.Level != nil {\n\t\treturn *m.Level\n\t}\n\treturn 0\n}\n\nfunc (m *UserAppLogLine) GetMessage() string {\n\tif m != nil && m.Message != nil {\n\t\treturn *m.Message\n\t}\n\treturn \"\"\n}\n\ntype UserAppLogGroup struct {\n\tLogLine              []*UserAppLogLine `protobuf:\"bytes,2,rep,name=log_line,json=logLine\" json:\"log_line,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}          `json:\"-\"`\n\tXXX_unrecognized     []byte            `json:\"-\"`\n\tXXX_sizecache        int32             `json:\"-\"`\n}\n\nfunc (m *UserAppLogGroup) Reset()         { *m = UserAppLogGroup{} }\nfunc (m *UserAppLogGroup) String() string { return proto.CompactTextString(m) }\nfunc (*UserAppLogGroup) ProtoMessage()    {}\nfunc (*UserAppLogGroup) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_log_service_f054fd4b5012319d, []int{2}\n}\nfunc (m *UserAppLogGroup) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_UserAppLogGroup.Unmarshal(m, b)\n}\nfunc (m *UserAppLogGroup) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_UserAppLogGroup.Marshal(b, m, deterministic)\n}\nfunc (dst *UserAppLogGroup) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_UserAppLogGroup.Merge(dst, src)\n}\nfunc (m *UserAppLogGroup) XXX_Size() int {\n\treturn xxx_messageInfo_UserAppLogGroup.Size(m)\n}\nfunc (m *UserAppLogGroup) XXX_DiscardUnknown() {\n\txxx_messageInfo_UserAppLogGroup.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_UserAppLogGroup proto.InternalMessageInfo\n\nfunc (m *UserAppLogGroup) GetLogLine() []*UserAppLogLine {\n\tif m != nil {\n\t\treturn m.LogLine\n\t}\n\treturn nil\n}\n\ntype FlushRequest struct {\n\tLogs                 []byte   `protobuf:\"bytes,1,opt,name=logs\" json:\"logs,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *FlushRequest) Reset()         { *m = FlushRequest{} }\nfunc (m *FlushRequest) String() string { return proto.CompactTextString(m) }\nfunc (*FlushRequest) ProtoMessage()    {}\nfunc (*FlushRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_log_service_f054fd4b5012319d, []int{3}\n}\nfunc (m *FlushRequest) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_FlushRequest.Unmarshal(m, b)\n}\nfunc (m *FlushRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_FlushRequest.Marshal(b, m, deterministic)\n}\nfunc (dst *FlushRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_FlushRequest.Merge(dst, src)\n}\nfunc (m *FlushRequest) XXX_Size() int {\n\treturn xxx_messageInfo_FlushRequest.Size(m)\n}\nfunc (m *FlushRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_FlushRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_FlushRequest proto.InternalMessageInfo\n\nfunc (m *FlushRequest) GetLogs() []byte {\n\tif m != nil {\n\t\treturn m.Logs\n\t}\n\treturn nil\n}\n\ntype SetStatusRequest struct {\n\tStatus               *string  `protobuf:\"bytes,1,req,name=status\" json:\"status,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *SetStatusRequest) Reset()         { *m = SetStatusRequest{} }\nfunc (m *SetStatusRequest) String() string { return proto.CompactTextString(m) }\nfunc (*SetStatusRequest) ProtoMessage()    {}\nfunc (*SetStatusRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_log_service_f054fd4b5012319d, []int{4}\n}\nfunc (m *SetStatusRequest) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_SetStatusRequest.Unmarshal(m, b)\n}\nfunc (m *SetStatusRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_SetStatusRequest.Marshal(b, m, deterministic)\n}\nfunc (dst *SetStatusRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_SetStatusRequest.Merge(dst, src)\n}\nfunc (m *SetStatusRequest) XXX_Size() int {\n\treturn xxx_messageInfo_SetStatusRequest.Size(m)\n}\nfunc (m *SetStatusRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_SetStatusRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_SetStatusRequest proto.InternalMessageInfo\n\nfunc (m *SetStatusRequest) GetStatus() string {\n\tif m != nil && m.Status != nil {\n\t\treturn *m.Status\n\t}\n\treturn \"\"\n}\n\ntype LogOffset struct {\n\tRequestId            []byte   `protobuf:\"bytes,1,opt,name=request_id,json=requestId\" json:\"request_id,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *LogOffset) Reset()         { *m = LogOffset{} }\nfunc (m *LogOffset) String() string { return proto.CompactTextString(m) }\nfunc (*LogOffset) ProtoMessage()    {}\nfunc (*LogOffset) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_log_service_f054fd4b5012319d, []int{5}\n}\nfunc (m *LogOffset) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_LogOffset.Unmarshal(m, b)\n}\nfunc (m *LogOffset) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_LogOffset.Marshal(b, m, deterministic)\n}\nfunc (dst *LogOffset) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_LogOffset.Merge(dst, src)\n}\nfunc (m *LogOffset) XXX_Size() int {\n\treturn xxx_messageInfo_LogOffset.Size(m)\n}\nfunc (m *LogOffset) XXX_DiscardUnknown() {\n\txxx_messageInfo_LogOffset.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_LogOffset proto.InternalMessageInfo\n\nfunc (m *LogOffset) GetRequestId() []byte {\n\tif m != nil {\n\t\treturn m.RequestId\n\t}\n\treturn nil\n}\n\ntype LogLine struct {\n\tTime                 *int64   `protobuf:\"varint,1,req,name=time\" json:\"time,omitempty\"`\n\tLevel                *int32   `protobuf:\"varint,2,req,name=level\" json:\"level,omitempty\"`\n\tLogMessage           *string  `protobuf:\"bytes,3,req,name=log_message,json=logMessage\" json:\"log_message,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *LogLine) Reset()         { *m = LogLine{} }\nfunc (m *LogLine) String() string { return proto.CompactTextString(m) }\nfunc (*LogLine) ProtoMessage()    {}\nfunc (*LogLine) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_log_service_f054fd4b5012319d, []int{6}\n}\nfunc (m *LogLine) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_LogLine.Unmarshal(m, b)\n}\nfunc (m *LogLine) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_LogLine.Marshal(b, m, deterministic)\n}\nfunc (dst *LogLine) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_LogLine.Merge(dst, src)\n}\nfunc (m *LogLine) XXX_Size() int {\n\treturn xxx_messageInfo_LogLine.Size(m)\n}\nfunc (m *LogLine) XXX_DiscardUnknown() {\n\txxx_messageInfo_LogLine.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_LogLine proto.InternalMessageInfo\n\nfunc (m *LogLine) GetTime() int64 {\n\tif m != nil && m.Time != nil {\n\t\treturn *m.Time\n\t}\n\treturn 0\n}\n\nfunc (m *LogLine) GetLevel() int32 {\n\tif m != nil && m.Level != nil {\n\t\treturn *m.Level\n\t}\n\treturn 0\n}\n\nfunc (m *LogLine) GetLogMessage() string {\n\tif m != nil && m.LogMessage != nil {\n\t\treturn *m.LogMessage\n\t}\n\treturn \"\"\n}\n\ntype RequestLog struct {\n\tAppId                   *string    `protobuf:\"bytes,1,req,name=app_id,json=appId\" json:\"app_id,omitempty\"`\n\tModuleId                *string    `protobuf:\"bytes,37,opt,name=module_id,json=moduleId,def=default\" json:\"module_id,omitempty\"`\n\tVersionId               *string    `protobuf:\"bytes,2,req,name=version_id,json=versionId\" json:\"version_id,omitempty\"`\n\tRequestId               []byte     `protobuf:\"bytes,3,req,name=request_id,json=requestId\" json:\"request_id,omitempty\"`\n\tOffset                  *LogOffset `protobuf:\"bytes,35,opt,name=offset\" json:\"offset,omitempty\"`\n\tIp                      *string    `protobuf:\"bytes,4,req,name=ip\" json:\"ip,omitempty\"`\n\tNickname                *string    `protobuf:\"bytes,5,opt,name=nickname\" json:\"nickname,omitempty\"`\n\tStartTime               *int64     `protobuf:\"varint,6,req,name=start_time,json=startTime\" json:\"start_time,omitempty\"`\n\tEndTime                 *int64     `protobuf:\"varint,7,req,name=end_time,json=endTime\" json:\"end_time,omitempty\"`\n\tLatency                 *int64     `protobuf:\"varint,8,req,name=latency\" json:\"latency,omitempty\"`\n\tMcycles                 *int64     `protobuf:\"varint,9,req,name=mcycles\" json:\"mcycles,omitempty\"`\n\tMethod                  *string    `protobuf:\"bytes,10,req,name=method\" json:\"method,omitempty\"`\n\tResource                *string    `protobuf:\"bytes,11,req,name=resource\" json:\"resource,omitempty\"`\n\tHttpVersion             *string    `protobuf:\"bytes,12,req,name=http_version,json=httpVersion\" json:\"http_version,omitempty\"`\n\tStatus                  *int32     `protobuf:\"varint,13,req,name=status\" json:\"status,omitempty\"`\n\tResponseSize            *int64     `protobuf:\"varint,14,req,name=response_size,json=responseSize\" json:\"response_size,omitempty\"`\n\tReferrer                *string    `protobuf:\"bytes,15,opt,name=referrer\" json:\"referrer,omitempty\"`\n\tUserAgent               *string    `protobuf:\"bytes,16,opt,name=user_agent,json=userAgent\" json:\"user_agent,omitempty\"`\n\tUrlMapEntry             *string    `protobuf:\"bytes,17,req,name=url_map_entry,json=urlMapEntry\" json:\"url_map_entry,omitempty\"`\n\tCombined                *string    `protobuf:\"bytes,18,req,name=combined\" json:\"combined,omitempty\"`\n\tApiMcycles              *int64     `protobuf:\"varint,19,opt,name=api_mcycles,json=apiMcycles\" json:\"api_mcycles,omitempty\"`\n\tHost                    *string    `protobuf:\"bytes,20,opt,name=host\" json:\"host,omitempty\"`\n\tCost                    *float64   `protobuf:\"fixed64,21,opt,name=cost\" json:\"cost,omitempty\"`\n\tTaskQueueName           *string    `protobuf:\"bytes,22,opt,name=task_queue_name,json=taskQueueName\" json:\"task_queue_name,omitempty\"`\n\tTaskName                *string    `protobuf:\"bytes,23,opt,name=task_name,json=taskName\" json:\"task_name,omitempty\"`\n\tWasLoadingRequest       *bool      `protobuf:\"varint,24,opt,name=was_loading_request,json=wasLoadingRequest\" json:\"was_loading_request,omitempty\"`\n\tPendingTime             *int64     `protobuf:\"varint,25,opt,name=pending_time,json=pendingTime\" json:\"pending_time,omitempty\"`\n\tReplicaIndex            *int32     `protobuf:\"varint,26,opt,name=replica_index,json=replicaIndex,def=-1\" json:\"replica_index,omitempty\"`\n\tFinished                *bool      `protobuf:\"varint,27,opt,name=finished,def=1\" json:\"finished,omitempty\"`\n\tCloneKey                []byte     `protobuf:\"bytes,28,opt,name=clone_key,json=cloneKey\" json:\"clone_key,omitempty\"`\n\tLine                    []*LogLine `protobuf:\"bytes,29,rep,name=line\" json:\"line,omitempty\"`\n\tLinesIncomplete         *bool      `protobuf:\"varint,36,opt,name=lines_incomplete,json=linesIncomplete\" json:\"lines_incomplete,omitempty\"`\n\tAppEngineRelease        []byte     `protobuf:\"bytes,38,opt,name=app_engine_release,json=appEngineRelease\" json:\"app_engine_release,omitempty\"`\n\tExitReason              *int32     `protobuf:\"varint,30,opt,name=exit_reason,json=exitReason\" json:\"exit_reason,omitempty\"`\n\tWasThrottledForTime     *bool      `protobuf:\"varint,31,opt,name=was_throttled_for_time,json=wasThrottledForTime\" json:\"was_throttled_for_time,omitempty\"`\n\tWasThrottledForRequests *bool      `protobuf:\"varint,32,opt,name=was_throttled_for_requests,json=wasThrottledForRequests\" json:\"was_throttled_for_requests,omitempty\"`\n\tThrottledTime           *int64     `protobuf:\"varint,33,opt,name=throttled_time,json=throttledTime\" json:\"throttled_time,omitempty\"`\n\tServerName              []byte     `protobuf:\"bytes,34,opt,name=server_name,json=serverName\" json:\"server_name,omitempty\"`\n\tXXX_NoUnkeyedLiteral    struct{}   `json:\"-\"`\n\tXXX_unrecognized        []byte     `json:\"-\"`\n\tXXX_sizecache           int32      `json:\"-\"`\n}\n\nfunc (m *RequestLog) Reset()         { *m = RequestLog{} }\nfunc (m *RequestLog) String() string { return proto.CompactTextString(m) }\nfunc (*RequestLog) ProtoMessage()    {}\nfunc (*RequestLog) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_log_service_f054fd4b5012319d, []int{7}\n}\nfunc (m *RequestLog) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_RequestLog.Unmarshal(m, b)\n}\nfunc (m *RequestLog) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_RequestLog.Marshal(b, m, deterministic)\n}\nfunc (dst *RequestLog) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_RequestLog.Merge(dst, src)\n}\nfunc (m *RequestLog) XXX_Size() int {\n\treturn xxx_messageInfo_RequestLog.Size(m)\n}\nfunc (m *RequestLog) XXX_DiscardUnknown() {\n\txxx_messageInfo_RequestLog.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_RequestLog proto.InternalMessageInfo\n\nconst Default_RequestLog_ModuleId string = \"default\"\nconst Default_RequestLog_ReplicaIndex int32 = -1\nconst Default_RequestLog_Finished bool = true\n\nfunc (m *RequestLog) GetAppId() string {\n\tif m != nil && m.AppId != nil {\n\t\treturn *m.AppId\n\t}\n\treturn \"\"\n}\n\nfunc (m *RequestLog) GetModuleId() string {\n\tif m != nil && m.ModuleId != nil {\n\t\treturn *m.ModuleId\n\t}\n\treturn Default_RequestLog_ModuleId\n}\n\nfunc (m *RequestLog) GetVersionId() string {\n\tif m != nil && m.VersionId != nil {\n\t\treturn *m.VersionId\n\t}\n\treturn \"\"\n}\n\nfunc (m *RequestLog) GetRequestId() []byte {\n\tif m != nil {\n\t\treturn m.RequestId\n\t}\n\treturn nil\n}\n\nfunc (m *RequestLog) GetOffset() *LogOffset {\n\tif m != nil {\n\t\treturn m.Offset\n\t}\n\treturn nil\n}\n\nfunc (m *RequestLog) GetIp() string {\n\tif m != nil && m.Ip != nil {\n\t\treturn *m.Ip\n\t}\n\treturn \"\"\n}\n\nfunc (m *RequestLog) GetNickname() string {\n\tif m != nil && m.Nickname != nil {\n\t\treturn *m.Nickname\n\t}\n\treturn \"\"\n}\n\nfunc (m *RequestLog) GetStartTime() int64 {\n\tif m != nil && m.StartTime != nil {\n\t\treturn *m.StartTime\n\t}\n\treturn 0\n}\n\nfunc (m *RequestLog) GetEndTime() int64 {\n\tif m != nil && m.EndTime != nil {\n\t\treturn *m.EndTime\n\t}\n\treturn 0\n}\n\nfunc (m *RequestLog) GetLatency() int64 {\n\tif m != nil && m.Latency != nil {\n\t\treturn *m.Latency\n\t}\n\treturn 0\n}\n\nfunc (m *RequestLog) GetMcycles() int64 {\n\tif m != nil && m.Mcycles != nil {\n\t\treturn *m.Mcycles\n\t}\n\treturn 0\n}\n\nfunc (m *RequestLog) GetMethod() string {\n\tif m != nil && m.Method != nil {\n\t\treturn *m.Method\n\t}\n\treturn \"\"\n}\n\nfunc (m *RequestLog) GetResource() string {\n\tif m != nil && m.Resource != nil {\n\t\treturn *m.Resource\n\t}\n\treturn \"\"\n}\n\nfunc (m *RequestLog) GetHttpVersion() string {\n\tif m != nil && m.HttpVersion != nil {\n\t\treturn *m.HttpVersion\n\t}\n\treturn \"\"\n}\n\nfunc (m *RequestLog) GetStatus() int32 {\n\tif m != nil && m.Status != nil {\n\t\treturn *m.Status\n\t}\n\treturn 0\n}\n\nfunc (m *RequestLog) GetResponseSize() int64 {\n\tif m != nil && m.ResponseSize != nil {\n\t\treturn *m.ResponseSize\n\t}\n\treturn 0\n}\n\nfunc (m *RequestLog) GetReferrer() string {\n\tif m != nil && m.Referrer != nil {\n\t\treturn *m.Referrer\n\t}\n\treturn \"\"\n}\n\nfunc (m *RequestLog) GetUserAgent() string {\n\tif m != nil && m.UserAgent != nil {\n\t\treturn *m.UserAgent\n\t}\n\treturn \"\"\n}\n\nfunc (m *RequestLog) GetUrlMapEntry() string {\n\tif m != nil && m.UrlMapEntry != nil {\n\t\treturn *m.UrlMapEntry\n\t}\n\treturn \"\"\n}\n\nfunc (m *RequestLog) GetCombined() string {\n\tif m != nil && m.Combined != nil {\n\t\treturn *m.Combined\n\t}\n\treturn \"\"\n}\n\nfunc (m *RequestLog) GetApiMcycles() int64 {\n\tif m != nil && m.ApiMcycles != nil {\n\t\treturn *m.ApiMcycles\n\t}\n\treturn 0\n}\n\nfunc (m *RequestLog) GetHost() string {\n\tif m != nil && m.Host != nil {\n\t\treturn *m.Host\n\t}\n\treturn \"\"\n}\n\nfunc (m *RequestLog) GetCost() float64 {\n\tif m != nil && m.Cost != nil {\n\t\treturn *m.Cost\n\t}\n\treturn 0\n}\n\nfunc (m *RequestLog) GetTaskQueueName() string {\n\tif m != nil && m.TaskQueueName != nil {\n\t\treturn *m.TaskQueueName\n\t}\n\treturn \"\"\n}\n\nfunc (m *RequestLog) GetTaskName() string {\n\tif m != nil && m.TaskName != nil {\n\t\treturn *m.TaskName\n\t}\n\treturn \"\"\n}\n\nfunc (m *RequestLog) GetWasLoadingRequest() bool {\n\tif m != nil && m.WasLoadingRequest != nil {\n\t\treturn *m.WasLoadingRequest\n\t}\n\treturn false\n}\n\nfunc (m *RequestLog) GetPendingTime() int64 {\n\tif m != nil && m.PendingTime != nil {\n\t\treturn *m.PendingTime\n\t}\n\treturn 0\n}\n\nfunc (m *RequestLog) GetReplicaIndex() int32 {\n\tif m != nil && m.ReplicaIndex != nil {\n\t\treturn *m.ReplicaIndex\n\t}\n\treturn Default_RequestLog_ReplicaIndex\n}\n\nfunc (m *RequestLog) GetFinished() bool {\n\tif m != nil && m.Finished != nil {\n\t\treturn *m.Finished\n\t}\n\treturn Default_RequestLog_Finished\n}\n\nfunc (m *RequestLog) GetCloneKey() []byte {\n\tif m != nil {\n\t\treturn m.CloneKey\n\t}\n\treturn nil\n}\n\nfunc (m *RequestLog) GetLine() []*LogLine {\n\tif m != nil {\n\t\treturn m.Line\n\t}\n\treturn nil\n}\n\nfunc (m *RequestLog) GetLinesIncomplete() bool {\n\tif m != nil && m.LinesIncomplete != nil {\n\t\treturn *m.LinesIncomplete\n\t}\n\treturn false\n}\n\nfunc (m *RequestLog) GetAppEngineRelease() []byte {\n\tif m != nil {\n\t\treturn m.AppEngineRelease\n\t}\n\treturn nil\n}\n\nfunc (m *RequestLog) GetExitReason() int32 {\n\tif m != nil && m.ExitReason != nil {\n\t\treturn *m.ExitReason\n\t}\n\treturn 0\n}\n\nfunc (m *RequestLog) GetWasThrottledForTime() bool {\n\tif m != nil && m.WasThrottledForTime != nil {\n\t\treturn *m.WasThrottledForTime\n\t}\n\treturn false\n}\n\nfunc (m *RequestLog) GetWasThrottledForRequests() bool {\n\tif m != nil && m.WasThrottledForRequests != nil {\n\t\treturn *m.WasThrottledForRequests\n\t}\n\treturn false\n}\n\nfunc (m *RequestLog) GetThrottledTime() int64 {\n\tif m != nil && m.ThrottledTime != nil {\n\t\treturn *m.ThrottledTime\n\t}\n\treturn 0\n}\n\nfunc (m *RequestLog) GetServerName() []byte {\n\tif m != nil {\n\t\treturn m.ServerName\n\t}\n\treturn nil\n}\n\ntype LogModuleVersion struct {\n\tModuleId             *string  `protobuf:\"bytes,1,opt,name=module_id,json=moduleId,def=default\" json:\"module_id,omitempty\"`\n\tVersionId            *string  `protobuf:\"bytes,2,opt,name=version_id,json=versionId\" json:\"version_id,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *LogModuleVersion) Reset()         { *m = LogModuleVersion{} }\nfunc (m *LogModuleVersion) String() string { return proto.CompactTextString(m) }\nfunc (*LogModuleVersion) ProtoMessage()    {}\nfunc (*LogModuleVersion) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_log_service_f054fd4b5012319d, []int{8}\n}\nfunc (m *LogModuleVersion) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_LogModuleVersion.Unmarshal(m, b)\n}\nfunc (m *LogModuleVersion) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_LogModuleVersion.Marshal(b, m, deterministic)\n}\nfunc (dst *LogModuleVersion) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_LogModuleVersion.Merge(dst, src)\n}\nfunc (m *LogModuleVersion) XXX_Size() int {\n\treturn xxx_messageInfo_LogModuleVersion.Size(m)\n}\nfunc (m *LogModuleVersion) XXX_DiscardUnknown() {\n\txxx_messageInfo_LogModuleVersion.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_LogModuleVersion proto.InternalMessageInfo\n\nconst Default_LogModuleVersion_ModuleId string = \"default\"\n\nfunc (m *LogModuleVersion) GetModuleId() string {\n\tif m != nil && m.ModuleId != nil {\n\t\treturn *m.ModuleId\n\t}\n\treturn Default_LogModuleVersion_ModuleId\n}\n\nfunc (m *LogModuleVersion) GetVersionId() string {\n\tif m != nil && m.VersionId != nil {\n\t\treturn *m.VersionId\n\t}\n\treturn \"\"\n}\n\ntype LogReadRequest struct {\n\tAppId                *string             `protobuf:\"bytes,1,req,name=app_id,json=appId\" json:\"app_id,omitempty\"`\n\tVersionId            []string            `protobuf:\"bytes,2,rep,name=version_id,json=versionId\" json:\"version_id,omitempty\"`\n\tModuleVersion        []*LogModuleVersion `protobuf:\"bytes,19,rep,name=module_version,json=moduleVersion\" json:\"module_version,omitempty\"`\n\tStartTime            *int64              `protobuf:\"varint,3,opt,name=start_time,json=startTime\" json:\"start_time,omitempty\"`\n\tEndTime              *int64              `protobuf:\"varint,4,opt,name=end_time,json=endTime\" json:\"end_time,omitempty\"`\n\tOffset               *LogOffset          `protobuf:\"bytes,5,opt,name=offset\" json:\"offset,omitempty\"`\n\tRequestId            [][]byte            `protobuf:\"bytes,6,rep,name=request_id,json=requestId\" json:\"request_id,omitempty\"`\n\tMinimumLogLevel      *int32              `protobuf:\"varint,7,opt,name=minimum_log_level,json=minimumLogLevel\" json:\"minimum_log_level,omitempty\"`\n\tIncludeIncomplete    *bool               `protobuf:\"varint,8,opt,name=include_incomplete,json=includeIncomplete\" json:\"include_incomplete,omitempty\"`\n\tCount                *int64              `protobuf:\"varint,9,opt,name=count\" json:\"count,omitempty\"`\n\tCombinedLogRegex     *string             `protobuf:\"bytes,14,opt,name=combined_log_regex,json=combinedLogRegex\" json:\"combined_log_regex,omitempty\"`\n\tHostRegex            *string             `protobuf:\"bytes,15,opt,name=host_regex,json=hostRegex\" json:\"host_regex,omitempty\"`\n\tReplicaIndex         *int32              `protobuf:\"varint,16,opt,name=replica_index,json=replicaIndex\" json:\"replica_index,omitempty\"`\n\tIncludeAppLogs       *bool               `protobuf:\"varint,10,opt,name=include_app_logs,json=includeAppLogs\" json:\"include_app_logs,omitempty\"`\n\tAppLogsPerRequest    *int32              `protobuf:\"varint,17,opt,name=app_logs_per_request,json=appLogsPerRequest\" json:\"app_logs_per_request,omitempty\"`\n\tIncludeHost          *bool               `protobuf:\"varint,11,opt,name=include_host,json=includeHost\" json:\"include_host,omitempty\"`\n\tIncludeAll           *bool               `protobuf:\"varint,12,opt,name=include_all,json=includeAll\" json:\"include_all,omitempty\"`\n\tCacheIterator        *bool               `protobuf:\"varint,13,opt,name=cache_iterator,json=cacheIterator\" json:\"cache_iterator,omitempty\"`\n\tNumShards            *int32              `protobuf:\"varint,18,opt,name=num_shards,json=numShards\" json:\"num_shards,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}            `json:\"-\"`\n\tXXX_unrecognized     []byte              `json:\"-\"`\n\tXXX_sizecache        int32               `json:\"-\"`\n}\n\nfunc (m *LogReadRequest) Reset()         { *m = LogReadRequest{} }\nfunc (m *LogReadRequest) String() string { return proto.CompactTextString(m) }\nfunc (*LogReadRequest) ProtoMessage()    {}\nfunc (*LogReadRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_log_service_f054fd4b5012319d, []int{9}\n}\nfunc (m *LogReadRequest) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_LogReadRequest.Unmarshal(m, b)\n}\nfunc (m *LogReadRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_LogReadRequest.Marshal(b, m, deterministic)\n}\nfunc (dst *LogReadRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_LogReadRequest.Merge(dst, src)\n}\nfunc (m *LogReadRequest) XXX_Size() int {\n\treturn xxx_messageInfo_LogReadRequest.Size(m)\n}\nfunc (m *LogReadRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_LogReadRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_LogReadRequest proto.InternalMessageInfo\n\nfunc (m *LogReadRequest) GetAppId() string {\n\tif m != nil && m.AppId != nil {\n\t\treturn *m.AppId\n\t}\n\treturn \"\"\n}\n\nfunc (m *LogReadRequest) GetVersionId() []string {\n\tif m != nil {\n\t\treturn m.VersionId\n\t}\n\treturn nil\n}\n\nfunc (m *LogReadRequest) GetModuleVersion() []*LogModuleVersion {\n\tif m != nil {\n\t\treturn m.ModuleVersion\n\t}\n\treturn nil\n}\n\nfunc (m *LogReadRequest) GetStartTime() int64 {\n\tif m != nil && m.StartTime != nil {\n\t\treturn *m.StartTime\n\t}\n\treturn 0\n}\n\nfunc (m *LogReadRequest) GetEndTime() int64 {\n\tif m != nil && m.EndTime != nil {\n\t\treturn *m.EndTime\n\t}\n\treturn 0\n}\n\nfunc (m *LogReadRequest) GetOffset() *LogOffset {\n\tif m != nil {\n\t\treturn m.Offset\n\t}\n\treturn nil\n}\n\nfunc (m *LogReadRequest) GetRequestId() [][]byte {\n\tif m != nil {\n\t\treturn m.RequestId\n\t}\n\treturn nil\n}\n\nfunc (m *LogReadRequest) GetMinimumLogLevel() int32 {\n\tif m != nil && m.MinimumLogLevel != nil {\n\t\treturn *m.MinimumLogLevel\n\t}\n\treturn 0\n}\n\nfunc (m *LogReadRequest) GetIncludeIncomplete() bool {\n\tif m != nil && m.IncludeIncomplete != nil {\n\t\treturn *m.IncludeIncomplete\n\t}\n\treturn false\n}\n\nfunc (m *LogReadRequest) GetCount() int64 {\n\tif m != nil && m.Count != nil {\n\t\treturn *m.Count\n\t}\n\treturn 0\n}\n\nfunc (m *LogReadRequest) GetCombinedLogRegex() string {\n\tif m != nil && m.CombinedLogRegex != nil {\n\t\treturn *m.CombinedLogRegex\n\t}\n\treturn \"\"\n}\n\nfunc (m *LogReadRequest) GetHostRegex() string {\n\tif m != nil && m.HostRegex != nil {\n\t\treturn *m.HostRegex\n\t}\n\treturn \"\"\n}\n\nfunc (m *LogReadRequest) GetReplicaIndex() int32 {\n\tif m != nil && m.ReplicaIndex != nil {\n\t\treturn *m.ReplicaIndex\n\t}\n\treturn 0\n}\n\nfunc (m *LogReadRequest) GetIncludeAppLogs() bool {\n\tif m != nil && m.IncludeAppLogs != nil {\n\t\treturn *m.IncludeAppLogs\n\t}\n\treturn false\n}\n\nfunc (m *LogReadRequest) GetAppLogsPerRequest() int32 {\n\tif m != nil && m.AppLogsPerRequest != nil {\n\t\treturn *m.AppLogsPerRequest\n\t}\n\treturn 0\n}\n\nfunc (m *LogReadRequest) GetIncludeHost() bool {\n\tif m != nil && m.IncludeHost != nil {\n\t\treturn *m.IncludeHost\n\t}\n\treturn false\n}\n\nfunc (m *LogReadRequest) GetIncludeAll() bool {\n\tif m != nil && m.IncludeAll != nil {\n\t\treturn *m.IncludeAll\n\t}\n\treturn false\n}\n\nfunc (m *LogReadRequest) GetCacheIterator() bool {\n\tif m != nil && m.CacheIterator != nil {\n\t\treturn *m.CacheIterator\n\t}\n\treturn false\n}\n\nfunc (m *LogReadRequest) GetNumShards() int32 {\n\tif m != nil && m.NumShards != nil {\n\t\treturn *m.NumShards\n\t}\n\treturn 0\n}\n\ntype LogReadResponse struct {\n\tLog                  []*RequestLog `protobuf:\"bytes,1,rep,name=log\" json:\"log,omitempty\"`\n\tOffset               *LogOffset    `protobuf:\"bytes,2,opt,name=offset\" json:\"offset,omitempty\"`\n\tLastEndTime          *int64        `protobuf:\"varint,3,opt,name=last_end_time,json=lastEndTime\" json:\"last_end_time,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}      `json:\"-\"`\n\tXXX_unrecognized     []byte        `json:\"-\"`\n\tXXX_sizecache        int32         `json:\"-\"`\n}\n\nfunc (m *LogReadResponse) Reset()         { *m = LogReadResponse{} }\nfunc (m *LogReadResponse) String() string { return proto.CompactTextString(m) }\nfunc (*LogReadResponse) ProtoMessage()    {}\nfunc (*LogReadResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_log_service_f054fd4b5012319d, []int{10}\n}\nfunc (m *LogReadResponse) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_LogReadResponse.Unmarshal(m, b)\n}\nfunc (m *LogReadResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_LogReadResponse.Marshal(b, m, deterministic)\n}\nfunc (dst *LogReadResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_LogReadResponse.Merge(dst, src)\n}\nfunc (m *LogReadResponse) XXX_Size() int {\n\treturn xxx_messageInfo_LogReadResponse.Size(m)\n}\nfunc (m *LogReadResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_LogReadResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_LogReadResponse proto.InternalMessageInfo\n\nfunc (m *LogReadResponse) GetLog() []*RequestLog {\n\tif m != nil {\n\t\treturn m.Log\n\t}\n\treturn nil\n}\n\nfunc (m *LogReadResponse) GetOffset() *LogOffset {\n\tif m != nil {\n\t\treturn m.Offset\n\t}\n\treturn nil\n}\n\nfunc (m *LogReadResponse) GetLastEndTime() int64 {\n\tif m != nil && m.LastEndTime != nil {\n\t\treturn *m.LastEndTime\n\t}\n\treturn 0\n}\n\ntype LogUsageRecord struct {\n\tVersionId            *string  `protobuf:\"bytes,1,opt,name=version_id,json=versionId\" json:\"version_id,omitempty\"`\n\tStartTime            *int32   `protobuf:\"varint,2,opt,name=start_time,json=startTime\" json:\"start_time,omitempty\"`\n\tEndTime              *int32   `protobuf:\"varint,3,opt,name=end_time,json=endTime\" json:\"end_time,omitempty\"`\n\tCount                *int64   `protobuf:\"varint,4,opt,name=count\" json:\"count,omitempty\"`\n\tTotalSize            *int64   `protobuf:\"varint,5,opt,name=total_size,json=totalSize\" json:\"total_size,omitempty\"`\n\tRecords              *int32   `protobuf:\"varint,6,opt,name=records\" json:\"records,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *LogUsageRecord) Reset()         { *m = LogUsageRecord{} }\nfunc (m *LogUsageRecord) String() string { return proto.CompactTextString(m) }\nfunc (*LogUsageRecord) ProtoMessage()    {}\nfunc (*LogUsageRecord) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_log_service_f054fd4b5012319d, []int{11}\n}\nfunc (m *LogUsageRecord) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_LogUsageRecord.Unmarshal(m, b)\n}\nfunc (m *LogUsageRecord) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_LogUsageRecord.Marshal(b, m, deterministic)\n}\nfunc (dst *LogUsageRecord) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_LogUsageRecord.Merge(dst, src)\n}\nfunc (m *LogUsageRecord) XXX_Size() int {\n\treturn xxx_messageInfo_LogUsageRecord.Size(m)\n}\nfunc (m *LogUsageRecord) XXX_DiscardUnknown() {\n\txxx_messageInfo_LogUsageRecord.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_LogUsageRecord proto.InternalMessageInfo\n\nfunc (m *LogUsageRecord) GetVersionId() string {\n\tif m != nil && m.VersionId != nil {\n\t\treturn *m.VersionId\n\t}\n\treturn \"\"\n}\n\nfunc (m *LogUsageRecord) GetStartTime() int32 {\n\tif m != nil && m.StartTime != nil {\n\t\treturn *m.StartTime\n\t}\n\treturn 0\n}\n\nfunc (m *LogUsageRecord) GetEndTime() int32 {\n\tif m != nil && m.EndTime != nil {\n\t\treturn *m.EndTime\n\t}\n\treturn 0\n}\n\nfunc (m *LogUsageRecord) GetCount() int64 {\n\tif m != nil && m.Count != nil {\n\t\treturn *m.Count\n\t}\n\treturn 0\n}\n\nfunc (m *LogUsageRecord) GetTotalSize() int64 {\n\tif m != nil && m.TotalSize != nil {\n\t\treturn *m.TotalSize\n\t}\n\treturn 0\n}\n\nfunc (m *LogUsageRecord) GetRecords() int32 {\n\tif m != nil && m.Records != nil {\n\t\treturn *m.Records\n\t}\n\treturn 0\n}\n\ntype LogUsageRequest struct {\n\tAppId                *string  `protobuf:\"bytes,1,req,name=app_id,json=appId\" json:\"app_id,omitempty\"`\n\tVersionId            []string `protobuf:\"bytes,2,rep,name=version_id,json=versionId\" json:\"version_id,omitempty\"`\n\tStartTime            *int32   `protobuf:\"varint,3,opt,name=start_time,json=startTime\" json:\"start_time,omitempty\"`\n\tEndTime              *int32   `protobuf:\"varint,4,opt,name=end_time,json=endTime\" json:\"end_time,omitempty\"`\n\tResolutionHours      *uint32  `protobuf:\"varint,5,opt,name=resolution_hours,json=resolutionHours,def=1\" json:\"resolution_hours,omitempty\"`\n\tCombineVersions      *bool    `protobuf:\"varint,6,opt,name=combine_versions,json=combineVersions\" json:\"combine_versions,omitempty\"`\n\tUsageVersion         *int32   `protobuf:\"varint,7,opt,name=usage_version,json=usageVersion\" json:\"usage_version,omitempty\"`\n\tVersionsOnly         *bool    `protobuf:\"varint,8,opt,name=versions_only,json=versionsOnly\" json:\"versions_only,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *LogUsageRequest) Reset()         { *m = LogUsageRequest{} }\nfunc (m *LogUsageRequest) String() string { return proto.CompactTextString(m) }\nfunc (*LogUsageRequest) ProtoMessage()    {}\nfunc (*LogUsageRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_log_service_f054fd4b5012319d, []int{12}\n}\nfunc (m *LogUsageRequest) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_LogUsageRequest.Unmarshal(m, b)\n}\nfunc (m *LogUsageRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_LogUsageRequest.Marshal(b, m, deterministic)\n}\nfunc (dst *LogUsageRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_LogUsageRequest.Merge(dst, src)\n}\nfunc (m *LogUsageRequest) XXX_Size() int {\n\treturn xxx_messageInfo_LogUsageRequest.Size(m)\n}\nfunc (m *LogUsageRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_LogUsageRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_LogUsageRequest proto.InternalMessageInfo\n\nconst Default_LogUsageRequest_ResolutionHours uint32 = 1\n\nfunc (m *LogUsageRequest) GetAppId() string {\n\tif m != nil && m.AppId != nil {\n\t\treturn *m.AppId\n\t}\n\treturn \"\"\n}\n\nfunc (m *LogUsageRequest) GetVersionId() []string {\n\tif m != nil {\n\t\treturn m.VersionId\n\t}\n\treturn nil\n}\n\nfunc (m *LogUsageRequest) GetStartTime() int32 {\n\tif m != nil && m.StartTime != nil {\n\t\treturn *m.StartTime\n\t}\n\treturn 0\n}\n\nfunc (m *LogUsageRequest) GetEndTime() int32 {\n\tif m != nil && m.EndTime != nil {\n\t\treturn *m.EndTime\n\t}\n\treturn 0\n}\n\nfunc (m *LogUsageRequest) GetResolutionHours() uint32 {\n\tif m != nil && m.ResolutionHours != nil {\n\t\treturn *m.ResolutionHours\n\t}\n\treturn Default_LogUsageRequest_ResolutionHours\n}\n\nfunc (m *LogUsageRequest) GetCombineVersions() bool {\n\tif m != nil && m.CombineVersions != nil {\n\t\treturn *m.CombineVersions\n\t}\n\treturn false\n}\n\nfunc (m *LogUsageRequest) GetUsageVersion() int32 {\n\tif m != nil && m.UsageVersion != nil {\n\t\treturn *m.UsageVersion\n\t}\n\treturn 0\n}\n\nfunc (m *LogUsageRequest) GetVersionsOnly() bool {\n\tif m != nil && m.VersionsOnly != nil {\n\t\treturn *m.VersionsOnly\n\t}\n\treturn false\n}\n\ntype LogUsageResponse struct {\n\tUsage                []*LogUsageRecord `protobuf:\"bytes,1,rep,name=usage\" json:\"usage,omitempty\"`\n\tSummary              *LogUsageRecord   `protobuf:\"bytes,2,opt,name=summary\" json:\"summary,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}          `json:\"-\"`\n\tXXX_unrecognized     []byte            `json:\"-\"`\n\tXXX_sizecache        int32             `json:\"-\"`\n}\n\nfunc (m *LogUsageResponse) Reset()         { *m = LogUsageResponse{} }\nfunc (m *LogUsageResponse) String() string { return proto.CompactTextString(m) }\nfunc (*LogUsageResponse) ProtoMessage()    {}\nfunc (*LogUsageResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_log_service_f054fd4b5012319d, []int{13}\n}\nfunc (m *LogUsageResponse) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_LogUsageResponse.Unmarshal(m, b)\n}\nfunc (m *LogUsageResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_LogUsageResponse.Marshal(b, m, deterministic)\n}\nfunc (dst *LogUsageResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_LogUsageResponse.Merge(dst, src)\n}\nfunc (m *LogUsageResponse) XXX_Size() int {\n\treturn xxx_messageInfo_LogUsageResponse.Size(m)\n}\nfunc (m *LogUsageResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_LogUsageResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_LogUsageResponse proto.InternalMessageInfo\n\nfunc (m *LogUsageResponse) GetUsage() []*LogUsageRecord {\n\tif m != nil {\n\t\treturn m.Usage\n\t}\n\treturn nil\n}\n\nfunc (m *LogUsageResponse) GetSummary() *LogUsageRecord {\n\tif m != nil {\n\t\treturn m.Summary\n\t}\n\treturn nil\n}\n\nfunc init() {\n\tproto.RegisterType((*LogServiceError)(nil), \"appengine.LogServiceError\")\n\tproto.RegisterType((*UserAppLogLine)(nil), \"appengine.UserAppLogLine\")\n\tproto.RegisterType((*UserAppLogGroup)(nil), \"appengine.UserAppLogGroup\")\n\tproto.RegisterType((*FlushRequest)(nil), \"appengine.FlushRequest\")\n\tproto.RegisterType((*SetStatusRequest)(nil), \"appengine.SetStatusRequest\")\n\tproto.RegisterType((*LogOffset)(nil), \"appengine.LogOffset\")\n\tproto.RegisterType((*LogLine)(nil), \"appengine.LogLine\")\n\tproto.RegisterType((*RequestLog)(nil), \"appengine.RequestLog\")\n\tproto.RegisterType((*LogModuleVersion)(nil), \"appengine.LogModuleVersion\")\n\tproto.RegisterType((*LogReadRequest)(nil), \"appengine.LogReadRequest\")\n\tproto.RegisterType((*LogReadResponse)(nil), \"appengine.LogReadResponse\")\n\tproto.RegisterType((*LogUsageRecord)(nil), \"appengine.LogUsageRecord\")\n\tproto.RegisterType((*LogUsageRequest)(nil), \"appengine.LogUsageRequest\")\n\tproto.RegisterType((*LogUsageResponse)(nil), \"appengine.LogUsageResponse\")\n}\n\nfunc init() {\n\tproto.RegisterFile(\"google.golang.org/appengine/internal/log/log_service.proto\", fileDescriptor_log_service_f054fd4b5012319d)\n}\n\nvar fileDescriptor_log_service_f054fd4b5012319d = []byte{\n\t// 1553 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x56, 0xdd, 0x72, 0xdb, 0xc6,\n\t0x15, 0x2e, 0x48, 0x51, 0x24, 0x0f, 0x49, 0x91, 0x5a, 0xcb, 0xce, 0xda, 0xae, 0x6b, 0x1a, 0x4e,\n\t0x1c, 0xd6, 0x93, 0x48, 0x93, 0xa4, 0x57, 0xca, 0x95, 0xd3, 0x2a, 0x8e, 0x26, 0xb4, 0xd5, 0x40,\n\t0x72, 0x3a, 0xd3, 0x1b, 0x0c, 0x0a, 0x1c, 0x81, 0x18, 0x2f, 0xb1, 0xc8, 0xee, 0xc2, 0x91, 0x72,\n\t0xdb, 0xdb, 0x3e, 0x46, 0x1f, 0xa2, 0xaf, 0xd2, 0xb7, 0xe9, 0xec, 0xd9, 0x05, 0x44, 0x2a, 0x4d,\n\t0xc6, 0x33, 0xb9, 0xe0, 0x10, 0xfb, 0x9d, 0x83, 0xdd, 0xf3, 0xf3, 0x9d, 0x6f, 0x01, 0xc7, 0xb9,\n\t0x94, 0xb9, 0xc0, 0xc3, 0x5c, 0x8a, 0xa4, 0xcc, 0x0f, 0xa5, 0xca, 0x8f, 0x92, 0xaa, 0xc2, 0x32,\n\t0x2f, 0x4a, 0x3c, 0x2a, 0x4a, 0x83, 0xaa, 0x4c, 0xc4, 0x91, 0x90, 0xb9, 0xfd, 0xc5, 0x1a, 0xd5,\n\t0xbb, 0x22, 0xc5, 0xc3, 0x4a, 0x49, 0x23, 0xd9, 0xb0, 0xf5, 0x0c, 0x5f, 0xc3, 0x74, 0x29, 0xf3,\n\t0x73, 0x67, 0x3e, 0x51, 0x4a, 0xaa, 0xf0, 0x4b, 0x18, 0xd2, 0xc3, 0x9f, 0x65, 0x86, 0x6c, 0x17,\n\t0x3a, 0x67, 0xdf, 0xce, 0x7e, 0xc7, 0xee, 0xc0, 0xf4, 0xf4, 0xf5, 0xf7, 0x2f, 0x96, 0xa7, 0x7f,\n\t0x89, 0xa3, 0x93, 0xef, 0xde, 0x9c, 0x9c, 0x5f, 0xcc, 0x02, 0xb6, 0x0f, 0x93, 0xf3, 0x8b, 0xb3,\n\t0xe8, 0xc5, 0xcb, 0x93, 0xf8, 0x24, 0x8a, 0xce, 0xa2, 0x59, 0x27, 0xcc, 0x61, 0xef, 0x8d, 0x46,\n\t0xf5, 0xa2, 0xaa, 0x96, 0x32, 0x5f, 0x16, 0x25, 0xb2, 0x8f, 0x60, 0xcf, 0x14, 0x6b, 0xd4, 0x26,\n\t0x59, 0x57, 0x71, 0xad, 0x31, 0xe5, 0xc1, 0xbc, 0xb3, 0xe8, 0x46, 0x93, 0x16, 0x7d, 0xa3, 0x31,\n\t0x65, 0x07, 0xd0, 0x13, 0xf8, 0x0e, 0x05, 0xef, 0x90, 0xd5, 0x2d, 0x18, 0x87, 0xfe, 0x1a, 0xb5,\n\t0x4e, 0x72, 0xe4, 0xdd, 0x79, 0x67, 0x31, 0x8c, 0x9a, 0x65, 0xf8, 0x12, 0xa6, 0x37, 0x07, 0xbd,\n\t0x54, 0xb2, 0xae, 0xd8, 0x9f, 0x60, 0x60, 0x73, 0x15, 0x45, 0x89, 0xbc, 0x33, 0xef, 0x2e, 0x46,\n\t0x9f, 0xdf, 0x3f, 0x6c, 0x33, 0x3d, 0xdc, 0x0e, 0x2b, 0xea, 0x0b, 0xf7, 0x10, 0x86, 0x30, 0xfe,\n\t0x5a, 0xd4, 0x7a, 0x15, 0xe1, 0x0f, 0x35, 0x6a, 0xc3, 0x18, 0xec, 0x08, 0x99, 0x6b, 0x1e, 0xcc,\n\t0x83, 0xc5, 0x38, 0xa2, 0xe7, 0xf0, 0x39, 0xcc, 0xce, 0xd1, 0x9c, 0x9b, 0xc4, 0xd4, 0xba, 0xf1,\n\t0xbb, 0x07, 0xbb, 0x9a, 0x00, 0xca, 0x67, 0x18, 0xf9, 0x55, 0xf8, 0x1c, 0x86, 0x4b, 0x99, 0x9f,\n\t0x5d, 0x5e, 0x6a, 0x34, 0xec, 0x11, 0x80, 0x72, 0xfe, 0x71, 0x91, 0xf9, 0x2d, 0x87, 0x1e, 0x39,\n\t0xcd, 0xc2, 0x0b, 0xe8, 0x37, 0x65, 0x62, 0xb0, 0x63, 0x0b, 0xe2, 0x8b, 0x43, 0xcf, 0xdb, 0x35,\n\t0xe9, 0x35, 0x35, 0x79, 0x0c, 0x23, 0x9b, 0xe6, 0x76, 0x5d, 0x40, 0xc8, 0xfc, 0x95, 0x2f, 0xcd,\n\t0x3f, 0x01, 0xc0, 0x47, 0xb9, 0x94, 0x39, 0xbb, 0x0b, 0xbb, 0x49, 0x55, 0xb9, 0xf3, 0xad, 0x6b,\n\t0x2f, 0xa9, 0xaa, 0xd3, 0x8c, 0x7d, 0x08, 0xc3, 0xb5, 0xcc, 0x6a, 0x81, 0xd6, 0xf2, 0xd1, 0x3c,\n\t0x58, 0x0c, 0x8f, 0xfb, 0x19, 0x5e, 0x26, 0xb5, 0x30, 0xd1, 0xc0, 0x59, 0x4e, 0x33, 0x9b, 0xc0,\n\t0x3b, 0x54, 0xba, 0x90, 0xa5, 0x75, 0xeb, 0xd0, 0x06, 0x43, 0x8f, 0x38, 0xf3, 0x46, 0x7e, 0x36,\n\t0x94, 0xcd, 0xfc, 0xd8, 0x27, 0xb0, 0x2b, 0xa9, 0x10, 0xfc, 0xe9, 0x3c, 0x58, 0x8c, 0x3e, 0x3f,\n\t0xd8, 0xe8, 0x47, 0x5b, 0xa4, 0xc8, 0xfb, 0xb0, 0x3d, 0xe8, 0x14, 0x15, 0xdf, 0xa1, 0x33, 0x3a,\n\t0x45, 0xc5, 0x1e, 0xc0, 0xa0, 0x2c, 0xd2, 0xb7, 0x65, 0xb2, 0x46, 0xde, 0xb3, 0x01, 0x46, 0xed,\n\t0xda, 0x1e, 0xac, 0x4d, 0xa2, 0x4c, 0x4c, 0x45, 0xdb, 0xa5, 0xa2, 0x0d, 0x09, 0xb9, 0xb0, 0x95,\n\t0xbb, 0x0f, 0x03, 0x2c, 0x33, 0x67, 0xec, 0x93, 0xb1, 0x8f, 0x65, 0x46, 0x26, 0x0e, 0x7d, 0x91,\n\t0x18, 0x2c, 0xd3, 0x6b, 0x3e, 0x70, 0x16, 0xbf, 0x24, 0xb2, 0xa5, 0xd7, 0xa9, 0x40, 0xcd, 0x87,\n\t0xce, 0xe2, 0x97, 0xb6, 0xd7, 0x6b, 0x34, 0x2b, 0x99, 0x71, 0x70, 0xbd, 0x76, 0x2b, 0x1b, 0xa1,\n\t0x42, 0x2d, 0x6b, 0x95, 0x22, 0x1f, 0x91, 0xa5, 0x5d, 0xb3, 0x27, 0x30, 0x5e, 0x19, 0x53, 0xc5,\n\t0xbe, 0x58, 0x7c, 0x4c, 0xf6, 0x91, 0xc5, 0xbe, 0x77, 0xd0, 0x06, 0x85, 0x26, 0xd4, 0x60, 0xbf,\n\t0x62, 0x4f, 0x61, 0xa2, 0x50, 0x57, 0xb2, 0xd4, 0x18, 0xeb, 0xe2, 0x27, 0xe4, 0x7b, 0x14, 0xce,\n\t0xb8, 0x01, 0xcf, 0x8b, 0x9f, 0xd0, 0x9d, 0x7d, 0x89, 0x4a, 0xa1, 0xe2, 0x53, 0x57, 0x9d, 0x66,\n\t0x6d, 0xab, 0x53, 0x6b, 0x54, 0x71, 0x92, 0x63, 0x69, 0xf8, 0x8c, 0xac, 0x43, 0x8b, 0xbc, 0xb0,\n\t0x00, 0x0b, 0x61, 0x52, 0x2b, 0x11, 0xaf, 0x93, 0x2a, 0xc6, 0xd2, 0xa8, 0x6b, 0xbe, 0xef, 0x62,\n\t0xab, 0x95, 0x78, 0x95, 0x54, 0x27, 0x16, 0xb2, 0xdb, 0xa7, 0x72, 0xfd, 0x8f, 0xa2, 0xc4, 0x8c,\n\t0x33, 0x97, 0x5a, 0xb3, 0xb6, 0x0c, 0x4c, 0xaa, 0x22, 0x6e, 0x8a, 0x75, 0x67, 0x1e, 0x2c, 0xba,\n\t0x11, 0x24, 0x55, 0xf1, 0xca, 0xd7, 0x8b, 0xc1, 0xce, 0x4a, 0x6a, 0xc3, 0x0f, 0xe8, 0x64, 0x7a,\n\t0xb6, 0x58, 0x6a, 0xb1, 0xbb, 0xf3, 0x60, 0x11, 0x44, 0xf4, 0xcc, 0x9e, 0xc1, 0xd4, 0x24, 0xfa,\n\t0x6d, 0xfc, 0x43, 0x8d, 0x35, 0xc6, 0xd4, 0xe8, 0x7b, 0xf4, 0xca, 0xc4, 0xc2, 0xdf, 0x59, 0xf4,\n\t0xb5, 0xed, 0xf6, 0x43, 0x18, 0x92, 0x1f, 0x79, 0x7c, 0xe0, 0x92, 0xb5, 0x00, 0x19, 0x0f, 0xe1,\n\t0xce, 0x8f, 0x89, 0x8e, 0x85, 0x4c, 0xb2, 0xa2, 0xcc, 0x63, 0xcf, 0x3e, 0xce, 0xe7, 0xc1, 0x62,\n\t0x10, 0xed, 0xff, 0x98, 0xe8, 0xa5, 0xb3, 0x34, 0x83, 0xfb, 0x04, 0xc6, 0x15, 0x96, 0xe4, 0x4b,\n\t0xfc, 0xb8, 0x4f, 0xe1, 0x8f, 0x3c, 0x46, 0x1c, 0xf9, 0xd8, 0x36, 0xa0, 0x12, 0x45, 0x9a, 0xc4,\n\t0x45, 0x99, 0xe1, 0x15, 0x7f, 0x30, 0x0f, 0x16, 0xbd, 0xe3, 0xce, 0xa7, 0x9f, 0xd9, 0x26, 0x90,\n\t0xe1, 0xd4, 0xe2, 0x6c, 0x0e, 0x83, 0xcb, 0xa2, 0x2c, 0xf4, 0x0a, 0x33, 0xfe, 0xd0, 0x1e, 0x78,\n\t0xbc, 0x63, 0x54, 0x8d, 0x51, 0x8b, 0xda, 0xd0, 0x53, 0x21, 0x4b, 0x8c, 0xdf, 0xe2, 0x35, 0xff,\n\t0x3d, 0x09, 0xc0, 0x80, 0x80, 0x6f, 0xf1, 0x9a, 0x3d, 0x83, 0x1d, 0x52, 0xab, 0x47, 0xa4, 0x56,\n\t0x6c, 0x7b, 0x3a, 0x48, 0xa6, 0xc8, 0xce, 0xfe, 0x08, 0x33, 0xfb, 0xaf, 0xe3, 0xa2, 0x4c, 0xe5,\n\t0xba, 0x12, 0x68, 0x90, 0x7f, 0x48, 0xf9, 0x4d, 0x09, 0x3f, 0x6d, 0x61, 0xf6, 0x09, 0x30, 0x3b,\n\t0xed, 0x6e, 0x9b, 0x58, 0xa1, 0xc0, 0x44, 0x23, 0x7f, 0x46, 0x07, 0xcf, 0x92, 0xaa, 0x3a, 0x21,\n\t0x43, 0xe4, 0x70, 0xdb, 0x49, 0xbc, 0x2a, 0x4c, 0xac, 0x30, 0xd1, 0xb2, 0xe4, 0x7f, 0xb0, 0x69,\n\t0x46, 0x60, 0xa1, 0x88, 0x10, 0xf6, 0x05, 0xdc, 0xb3, 0xc5, 0x35, 0x2b, 0x25, 0x8d, 0x11, 0x98,\n\t0xc5, 0x97, 0x52, 0xb9, 0xb2, 0x3d, 0xa6, 0xf3, 0x6d, 0xe9, 0x2f, 0x1a, 0xe3, 0xd7, 0x52, 0x51,\n\t0xf9, 0xbe, 0x84, 0x07, 0x3f, 0x7f, 0xc9, 0xf7, 0x45, 0xf3, 0x39, 0xbd, 0xf8, 0xc1, 0xad, 0x17,\n\t0x7d, 0x77, 0x34, 0xdd, 0x17, 0xed, 0x8b, 0x74, 0xd2, 0x13, 0x6a, 0xd0, 0xa4, 0x45, 0xe9, 0x8c,\n\t0xc7, 0x30, 0xb2, 0x97, 0x1a, 0x2a, 0x47, 0x8a, 0x90, 0x12, 0x04, 0x07, 0x59, 0x5a, 0x84, 0x7f,\n\t0x83, 0xd9, 0x52, 0xe6, 0xaf, 0x48, 0xc8, 0x9a, 0x81, 0xdb, 0xd2, 0xbc, 0xe0, 0x7d, 0x35, 0x2f,\n\t0xd8, 0xd2, 0xbc, 0xf0, 0xbf, 0x3d, 0xd8, 0x5b, 0xca, 0x3c, 0xc2, 0x24, 0x6b, 0x28, 0xf5, 0x0b,\n\t0x12, 0x7b, 0x7b, 0xa3, 0xee, 0xb6, 0x78, 0x7e, 0x05, 0x7b, 0x3e, 0x9a, 0x46, 0x23, 0xee, 0x10,\n\t0x0f, 0x1e, 0x6e, 0xf3, 0x60, 0x2b, 0x85, 0x68, 0xb2, 0xde, 0xca, 0x68, 0x5b, 0x07, 0xbb, 0x54,\n\t0xa9, 0x5f, 0xd0, 0xc1, 0x1d, 0x32, 0xb6, 0x3a, 0x78, 0xa3, 0xcd, 0xbd, 0xf7, 0xd0, 0xe6, 0x6d,\n\t0xa1, 0xdf, 0x9d, 0x77, 0xb7, 0x85, 0xfe, 0x39, 0xec, 0xaf, 0x8b, 0xb2, 0x58, 0xd7, 0xeb, 0x98,\n\t0xae, 0x60, 0xba, 0xb5, 0xfa, 0xc4, 0xa6, 0xa9, 0x37, 0x58, 0x46, 0xd3, 0xfd, 0xf5, 0x29, 0xb0,\n\t0xa2, 0x4c, 0x45, 0x9d, 0xe1, 0x26, 0x9d, 0x07, 0x6e, 0x5c, 0xbd, 0x65, 0x83, 0xd0, 0x07, 0xd0,\n\t0x4b, 0x65, 0x5d, 0x1a, 0x3e, 0xa4, 0xf8, 0xdd, 0xc2, 0xd2, 0xbc, 0x91, 0x23, 0x3a, 0x51, 0x61,\n\t0x8e, 0x57, 0x7c, 0x8f, 0x7a, 0x35, 0x6b, 0x2c, 0xd4, 0xa5, 0x1c, 0xaf, 0x6c, 0xf4, 0x56, 0x83,\n\t0xbc, 0x97, 0x53, 0xcb, 0xa1, 0x45, 0x9c, 0xf9, 0xe9, 0xed, 0x71, 0x9f, 0x51, 0xe4, 0xdb, 0xa3,\n\t0xbe, 0x80, 0x59, 0x13, 0xb6, 0xed, 0x35, 0x7d, 0x23, 0x00, 0x05, 0xbd, 0xe7, 0x71, 0xf7, 0x75,\n\t0xa1, 0xd9, 0x11, 0x1c, 0x34, 0x1e, 0x71, 0x85, 0x2d, 0xf3, 0xf9, 0x3e, 0xed, 0xba, 0x9f, 0x38,\n\t0xb7, 0xbf, 0xa2, 0xda, 0x50, 0xa4, 0x66, 0x6b, 0x92, 0xcd, 0x11, 0x6d, 0x3b, 0xf2, 0xd8, 0x37,\n\t0x56, 0x29, 0x1f, 0xc3, 0xa8, 0x3d, 0x5d, 0x08, 0x3e, 0x26, 0x0f, 0x68, 0x0e, 0x16, 0xc2, 0x8e,\n\t0x4d, 0x9a, 0xa4, 0x2b, 0x8c, 0x0b, 0x83, 0x2a, 0x31, 0x52, 0xf1, 0x09, 0xf9, 0x4c, 0x08, 0x3d,\n\t0xf5, 0xa0, 0xad, 0x44, 0x59, 0xaf, 0x63, 0xbd, 0x4a, 0x54, 0xa6, 0x39, 0xa3, 0x88, 0x86, 0x65,\n\t0xbd, 0x3e, 0x27, 0x20, 0xfc, 0x57, 0x40, 0xdf, 0x83, 0x8e, 0xdb, 0xee, 0xb2, 0x61, 0x1f, 0x43,\n\t0x57, 0xc8, 0x9c, 0x07, 0xc4, 0xcd, 0xbb, 0x1b, 0x2c, 0xb9, 0xf9, 0xc6, 0x88, 0xac, 0xc7, 0x06,\n\t0xa3, 0x3a, 0xef, 0xc1, 0xa8, 0x10, 0x26, 0x22, 0xd1, 0x26, 0x6e, 0xf9, 0xe9, 0xc8, 0x3b, 0xb2,\n\t0xe0, 0x89, 0xe3, 0x68, 0xf8, 0x9f, 0x80, 0x46, 0xed, 0x8d, 0xfd, 0xac, 0x89, 0x30, 0x95, 0xea,\n\t0xf6, 0x4c, 0x05, 0xb7, 0x86, 0xf3, 0xd6, 0x3c, 0x74, 0x5c, 0x7e, 0xff, 0x7f, 0x1e, 0xba, 0x64,\n\t0x6c, 0xe7, 0xa1, 0xe5, 0xd9, 0xce, 0x26, 0xcf, 0x1e, 0x01, 0x18, 0x69, 0x12, 0xe1, 0xee, 0xe1,\n\t0x9e, 0x9b, 0x2f, 0x42, 0xe8, 0x12, 0xe6, 0xd0, 0x57, 0x14, 0x97, 0xe6, 0xbb, 0x6e, 0x3b, 0xbf,\n\t0x0c, 0xff, 0xdd, 0xa1, 0x4a, 0xfa, 0xd0, 0x7f, 0x8b, 0x4c, 0xfc, 0x7c, 0xc4, 0x7b, 0xbf, 0x36,\n\t0xe2, 0xbd, 0xcd, 0x11, 0x9f, 0xd9, 0xcf, 0x11, 0x51, 0x1b, 0xbb, 0xf7, 0x4a, 0xd6, 0x4a, 0x53,\n\t0x0a, 0x93, 0xe3, 0xe0, 0xb3, 0x68, 0x7a, 0x63, 0xfa, 0xc6, 0x5a, 0xec, 0x25, 0xe3, 0x07, 0xa7,\n\t0xd1, 0x23, 0x97, 0xd4, 0x20, 0x9a, 0x7a, 0xdc, 0x8b, 0x0e, 0x7d, 0xa0, 0xd4, 0x36, 0xb1, 0x56,\n\t0xb8, 0xdc, 0xa8, 0x8f, 0x09, 0x6c, 0xa4, 0xe9, 0x29, 0x4c, 0x9a, 0x7d, 0x62, 0x59, 0x8a, 0x6b,\n\t0x3f, 0xe2, 0xe3, 0x06, 0x3c, 0x2b, 0xc5, 0x75, 0x78, 0x45, 0x2a, 0xed, 0xab, 0xe4, 0x09, 0x77,\n\t0x04, 0x3d, 0xda, 0xc8, 0x53, 0xee, 0xfe, 0x36, 0x8d, 0x36, 0xc8, 0x10, 0x39, 0x3f, 0xf6, 0x05,\n\t0xf4, 0x75, 0xbd, 0x5e, 0x27, 0xea, 0xda, 0x33, 0xef, 0x57, 0x5e, 0x69, 0x3c, 0xbf, 0xea, 0xfd,\n\t0xdd, 0x92, 0xf6, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x70, 0xd9, 0xa0, 0xf8, 0x48, 0x0d, 0x00,\n\t0x00,\n}\n"
  },
  {
    "path": "vendor/google.golang.org/appengine/internal/main.go",
    "content": "// Copyright 2011 Google Inc. All rights reserved.\n// Use of this source code is governed by the Apache 2.0\n// license that can be found in the LICENSE file.\n\n// +build appengine\n\npackage internal\n\nimport (\n\t\"appengine_internal\"\n)\n\nfunc Main() {\n\tMainPath = \"\"\n\tappengine_internal.Main()\n}\n"
  },
  {
    "path": "vendor/google.golang.org/appengine/internal/main_common.go",
    "content": "package internal\n\n// MainPath stores the file path of the main package. On App Engine Standard\n// using Go version 1.9 and below, this will be unset. On App Engine Flex and\n// App Engine Standard second-gen (Go 1.11 and above), this will be the\n// filepath to package main.\nvar MainPath string\n"
  },
  {
    "path": "vendor/google.golang.org/appengine/internal/main_vm.go",
    "content": "// Copyright 2011 Google Inc. All rights reserved.\n// Use of this source code is governed by the Apache 2.0\n// license that can be found in the LICENSE file.\n\n// +build !appengine\n\npackage internal\n\nimport (\n\t\"io\"\n\t\"log\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"runtime\"\n)\n\nfunc Main() {\n\tMainPath = filepath.Dir(findMainPath())\n\tinstallHealthChecker(http.DefaultServeMux)\n\n\tport := \"8080\"\n\tif s := os.Getenv(\"PORT\"); s != \"\" {\n\t\tport = s\n\t}\n\n\thost := \"\"\n\tif IsDevAppServer() {\n\t\thost = \"127.0.0.1\"\n\t}\n\tif err := http.ListenAndServe(host+\":\"+port, http.HandlerFunc(handleHTTP)); err != nil {\n\t\tlog.Fatalf(\"http.ListenAndServe: %v\", err)\n\t}\n}\n\n// Find the path to package main by looking at the root Caller.\nfunc findMainPath() string {\n\tpc := make([]uintptr, 100)\n\tn := runtime.Callers(2, pc)\n\tframes := runtime.CallersFrames(pc[:n])\n\tfor {\n\t\tframe, more := frames.Next()\n\t\t// Tests won't have package main, instead they have testing.tRunner\n\t\tif frame.Function == \"main.main\" || frame.Function == \"testing.tRunner\" {\n\t\t\treturn frame.File\n\t\t}\n\t\tif !more {\n\t\t\tbreak\n\t\t}\n\t}\n\treturn \"\"\n}\n\nfunc installHealthChecker(mux *http.ServeMux) {\n\t// If no health check handler has been installed by this point, add a trivial one.\n\tconst healthPath = \"/_ah/health\"\n\threq := &http.Request{\n\t\tMethod: \"GET\",\n\t\tURL: &url.URL{\n\t\t\tPath: healthPath,\n\t\t},\n\t}\n\tif _, pat := mux.Handler(hreq); pat != healthPath {\n\t\tmux.HandleFunc(healthPath, func(w http.ResponseWriter, r *http.Request) {\n\t\t\tio.WriteString(w, \"ok\")\n\t\t})\n\t}\n}\n"
  },
  {
    "path": "vendor/google.golang.org/appengine/internal/metadata.go",
    "content": "// Copyright 2014 Google Inc. All rights reserved.\n// Use of this source code is governed by the Apache 2.0\n// license that can be found in the LICENSE file.\n\npackage internal\n\n// This file has code for accessing metadata.\n//\n// References:\n//\thttps://cloud.google.com/compute/docs/metadata\n\nimport (\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"net/http\"\n\t\"net/url\"\n)\n\nconst (\n\tmetadataHost = \"metadata\"\n\tmetadataPath = \"/computeMetadata/v1/\"\n)\n\nvar (\n\tmetadataRequestHeaders = http.Header{\n\t\t\"Metadata-Flavor\": []string{\"Google\"},\n\t}\n)\n\n// TODO(dsymonds): Do we need to support default values, like Python?\nfunc mustGetMetadata(key string) []byte {\n\tb, err := getMetadata(key)\n\tif err != nil {\n\t\tpanic(fmt.Sprintf(\"Metadata fetch failed for '%s': %v\", key, err))\n\t}\n\treturn b\n}\n\nfunc getMetadata(key string) ([]byte, error) {\n\t// TODO(dsymonds): May need to use url.Parse to support keys with query args.\n\treq := &http.Request{\n\t\tMethod: \"GET\",\n\t\tURL: &url.URL{\n\t\t\tScheme: \"http\",\n\t\t\tHost:   metadataHost,\n\t\t\tPath:   metadataPath + key,\n\t\t},\n\t\tHeader: metadataRequestHeaders,\n\t\tHost:   metadataHost,\n\t}\n\tresp, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer resp.Body.Close()\n\tif resp.StatusCode != 200 {\n\t\treturn nil, fmt.Errorf(\"metadata server returned HTTP %d\", resp.StatusCode)\n\t}\n\treturn ioutil.ReadAll(resp.Body)\n}\n"
  },
  {
    "path": "vendor/google.golang.org/appengine/internal/modules/modules_service.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// source: google.golang.org/appengine/internal/modules/modules_service.proto\n\npackage modules\n\nimport proto \"github.com/golang/protobuf/proto\"\nimport fmt \"fmt\"\nimport math \"math\"\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar _ = proto.Marshal\nvar _ = fmt.Errorf\nvar _ = math.Inf\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package\n\ntype ModulesServiceError_ErrorCode int32\n\nconst (\n\tModulesServiceError_OK                ModulesServiceError_ErrorCode = 0\n\tModulesServiceError_INVALID_MODULE    ModulesServiceError_ErrorCode = 1\n\tModulesServiceError_INVALID_VERSION   ModulesServiceError_ErrorCode = 2\n\tModulesServiceError_INVALID_INSTANCES ModulesServiceError_ErrorCode = 3\n\tModulesServiceError_TRANSIENT_ERROR   ModulesServiceError_ErrorCode = 4\n\tModulesServiceError_UNEXPECTED_STATE  ModulesServiceError_ErrorCode = 5\n)\n\nvar ModulesServiceError_ErrorCode_name = map[int32]string{\n\t0: \"OK\",\n\t1: \"INVALID_MODULE\",\n\t2: \"INVALID_VERSION\",\n\t3: \"INVALID_INSTANCES\",\n\t4: \"TRANSIENT_ERROR\",\n\t5: \"UNEXPECTED_STATE\",\n}\nvar ModulesServiceError_ErrorCode_value = map[string]int32{\n\t\"OK\":                0,\n\t\"INVALID_MODULE\":    1,\n\t\"INVALID_VERSION\":   2,\n\t\"INVALID_INSTANCES\": 3,\n\t\"TRANSIENT_ERROR\":   4,\n\t\"UNEXPECTED_STATE\":  5,\n}\n\nfunc (x ModulesServiceError_ErrorCode) Enum() *ModulesServiceError_ErrorCode {\n\tp := new(ModulesServiceError_ErrorCode)\n\t*p = x\n\treturn p\n}\nfunc (x ModulesServiceError_ErrorCode) String() string {\n\treturn proto.EnumName(ModulesServiceError_ErrorCode_name, int32(x))\n}\nfunc (x *ModulesServiceError_ErrorCode) UnmarshalJSON(data []byte) error {\n\tvalue, err := proto.UnmarshalJSONEnum(ModulesServiceError_ErrorCode_value, data, \"ModulesServiceError_ErrorCode\")\n\tif err != nil {\n\t\treturn err\n\t}\n\t*x = ModulesServiceError_ErrorCode(value)\n\treturn nil\n}\nfunc (ModulesServiceError_ErrorCode) EnumDescriptor() ([]byte, []int) {\n\treturn fileDescriptor_modules_service_9cd3bffe4e91c59a, []int{0, 0}\n}\n\ntype ModulesServiceError struct {\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *ModulesServiceError) Reset()         { *m = ModulesServiceError{} }\nfunc (m *ModulesServiceError) String() string { return proto.CompactTextString(m) }\nfunc (*ModulesServiceError) ProtoMessage()    {}\nfunc (*ModulesServiceError) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_modules_service_9cd3bffe4e91c59a, []int{0}\n}\nfunc (m *ModulesServiceError) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_ModulesServiceError.Unmarshal(m, b)\n}\nfunc (m *ModulesServiceError) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_ModulesServiceError.Marshal(b, m, deterministic)\n}\nfunc (dst *ModulesServiceError) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_ModulesServiceError.Merge(dst, src)\n}\nfunc (m *ModulesServiceError) XXX_Size() int {\n\treturn xxx_messageInfo_ModulesServiceError.Size(m)\n}\nfunc (m *ModulesServiceError) XXX_DiscardUnknown() {\n\txxx_messageInfo_ModulesServiceError.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_ModulesServiceError proto.InternalMessageInfo\n\ntype GetModulesRequest struct {\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *GetModulesRequest) Reset()         { *m = GetModulesRequest{} }\nfunc (m *GetModulesRequest) String() string { return proto.CompactTextString(m) }\nfunc (*GetModulesRequest) ProtoMessage()    {}\nfunc (*GetModulesRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_modules_service_9cd3bffe4e91c59a, []int{1}\n}\nfunc (m *GetModulesRequest) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_GetModulesRequest.Unmarshal(m, b)\n}\nfunc (m *GetModulesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_GetModulesRequest.Marshal(b, m, deterministic)\n}\nfunc (dst *GetModulesRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_GetModulesRequest.Merge(dst, src)\n}\nfunc (m *GetModulesRequest) XXX_Size() int {\n\treturn xxx_messageInfo_GetModulesRequest.Size(m)\n}\nfunc (m *GetModulesRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_GetModulesRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_GetModulesRequest proto.InternalMessageInfo\n\ntype GetModulesResponse struct {\n\tModule               []string `protobuf:\"bytes,1,rep,name=module\" json:\"module,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *GetModulesResponse) Reset()         { *m = GetModulesResponse{} }\nfunc (m *GetModulesResponse) String() string { return proto.CompactTextString(m) }\nfunc (*GetModulesResponse) ProtoMessage()    {}\nfunc (*GetModulesResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_modules_service_9cd3bffe4e91c59a, []int{2}\n}\nfunc (m *GetModulesResponse) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_GetModulesResponse.Unmarshal(m, b)\n}\nfunc (m *GetModulesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_GetModulesResponse.Marshal(b, m, deterministic)\n}\nfunc (dst *GetModulesResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_GetModulesResponse.Merge(dst, src)\n}\nfunc (m *GetModulesResponse) XXX_Size() int {\n\treturn xxx_messageInfo_GetModulesResponse.Size(m)\n}\nfunc (m *GetModulesResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_GetModulesResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_GetModulesResponse proto.InternalMessageInfo\n\nfunc (m *GetModulesResponse) GetModule() []string {\n\tif m != nil {\n\t\treturn m.Module\n\t}\n\treturn nil\n}\n\ntype GetVersionsRequest struct {\n\tModule               *string  `protobuf:\"bytes,1,opt,name=module\" json:\"module,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *GetVersionsRequest) Reset()         { *m = GetVersionsRequest{} }\nfunc (m *GetVersionsRequest) String() string { return proto.CompactTextString(m) }\nfunc (*GetVersionsRequest) ProtoMessage()    {}\nfunc (*GetVersionsRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_modules_service_9cd3bffe4e91c59a, []int{3}\n}\nfunc (m *GetVersionsRequest) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_GetVersionsRequest.Unmarshal(m, b)\n}\nfunc (m *GetVersionsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_GetVersionsRequest.Marshal(b, m, deterministic)\n}\nfunc (dst *GetVersionsRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_GetVersionsRequest.Merge(dst, src)\n}\nfunc (m *GetVersionsRequest) XXX_Size() int {\n\treturn xxx_messageInfo_GetVersionsRequest.Size(m)\n}\nfunc (m *GetVersionsRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_GetVersionsRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_GetVersionsRequest proto.InternalMessageInfo\n\nfunc (m *GetVersionsRequest) GetModule() string {\n\tif m != nil && m.Module != nil {\n\t\treturn *m.Module\n\t}\n\treturn \"\"\n}\n\ntype GetVersionsResponse struct {\n\tVersion              []string `protobuf:\"bytes,1,rep,name=version\" json:\"version,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *GetVersionsResponse) Reset()         { *m = GetVersionsResponse{} }\nfunc (m *GetVersionsResponse) String() string { return proto.CompactTextString(m) }\nfunc (*GetVersionsResponse) ProtoMessage()    {}\nfunc (*GetVersionsResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_modules_service_9cd3bffe4e91c59a, []int{4}\n}\nfunc (m *GetVersionsResponse) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_GetVersionsResponse.Unmarshal(m, b)\n}\nfunc (m *GetVersionsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_GetVersionsResponse.Marshal(b, m, deterministic)\n}\nfunc (dst *GetVersionsResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_GetVersionsResponse.Merge(dst, src)\n}\nfunc (m *GetVersionsResponse) XXX_Size() int {\n\treturn xxx_messageInfo_GetVersionsResponse.Size(m)\n}\nfunc (m *GetVersionsResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_GetVersionsResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_GetVersionsResponse proto.InternalMessageInfo\n\nfunc (m *GetVersionsResponse) GetVersion() []string {\n\tif m != nil {\n\t\treturn m.Version\n\t}\n\treturn nil\n}\n\ntype GetDefaultVersionRequest struct {\n\tModule               *string  `protobuf:\"bytes,1,opt,name=module\" json:\"module,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *GetDefaultVersionRequest) Reset()         { *m = GetDefaultVersionRequest{} }\nfunc (m *GetDefaultVersionRequest) String() string { return proto.CompactTextString(m) }\nfunc (*GetDefaultVersionRequest) ProtoMessage()    {}\nfunc (*GetDefaultVersionRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_modules_service_9cd3bffe4e91c59a, []int{5}\n}\nfunc (m *GetDefaultVersionRequest) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_GetDefaultVersionRequest.Unmarshal(m, b)\n}\nfunc (m *GetDefaultVersionRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_GetDefaultVersionRequest.Marshal(b, m, deterministic)\n}\nfunc (dst *GetDefaultVersionRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_GetDefaultVersionRequest.Merge(dst, src)\n}\nfunc (m *GetDefaultVersionRequest) XXX_Size() int {\n\treturn xxx_messageInfo_GetDefaultVersionRequest.Size(m)\n}\nfunc (m *GetDefaultVersionRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_GetDefaultVersionRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_GetDefaultVersionRequest proto.InternalMessageInfo\n\nfunc (m *GetDefaultVersionRequest) GetModule() string {\n\tif m != nil && m.Module != nil {\n\t\treturn *m.Module\n\t}\n\treturn \"\"\n}\n\ntype GetDefaultVersionResponse struct {\n\tVersion              *string  `protobuf:\"bytes,1,req,name=version\" json:\"version,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *GetDefaultVersionResponse) Reset()         { *m = GetDefaultVersionResponse{} }\nfunc (m *GetDefaultVersionResponse) String() string { return proto.CompactTextString(m) }\nfunc (*GetDefaultVersionResponse) ProtoMessage()    {}\nfunc (*GetDefaultVersionResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_modules_service_9cd3bffe4e91c59a, []int{6}\n}\nfunc (m *GetDefaultVersionResponse) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_GetDefaultVersionResponse.Unmarshal(m, b)\n}\nfunc (m *GetDefaultVersionResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_GetDefaultVersionResponse.Marshal(b, m, deterministic)\n}\nfunc (dst *GetDefaultVersionResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_GetDefaultVersionResponse.Merge(dst, src)\n}\nfunc (m *GetDefaultVersionResponse) XXX_Size() int {\n\treturn xxx_messageInfo_GetDefaultVersionResponse.Size(m)\n}\nfunc (m *GetDefaultVersionResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_GetDefaultVersionResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_GetDefaultVersionResponse proto.InternalMessageInfo\n\nfunc (m *GetDefaultVersionResponse) GetVersion() string {\n\tif m != nil && m.Version != nil {\n\t\treturn *m.Version\n\t}\n\treturn \"\"\n}\n\ntype GetNumInstancesRequest struct {\n\tModule               *string  `protobuf:\"bytes,1,opt,name=module\" json:\"module,omitempty\"`\n\tVersion              *string  `protobuf:\"bytes,2,opt,name=version\" json:\"version,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *GetNumInstancesRequest) Reset()         { *m = GetNumInstancesRequest{} }\nfunc (m *GetNumInstancesRequest) String() string { return proto.CompactTextString(m) }\nfunc (*GetNumInstancesRequest) ProtoMessage()    {}\nfunc (*GetNumInstancesRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_modules_service_9cd3bffe4e91c59a, []int{7}\n}\nfunc (m *GetNumInstancesRequest) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_GetNumInstancesRequest.Unmarshal(m, b)\n}\nfunc (m *GetNumInstancesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_GetNumInstancesRequest.Marshal(b, m, deterministic)\n}\nfunc (dst *GetNumInstancesRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_GetNumInstancesRequest.Merge(dst, src)\n}\nfunc (m *GetNumInstancesRequest) XXX_Size() int {\n\treturn xxx_messageInfo_GetNumInstancesRequest.Size(m)\n}\nfunc (m *GetNumInstancesRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_GetNumInstancesRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_GetNumInstancesRequest proto.InternalMessageInfo\n\nfunc (m *GetNumInstancesRequest) GetModule() string {\n\tif m != nil && m.Module != nil {\n\t\treturn *m.Module\n\t}\n\treturn \"\"\n}\n\nfunc (m *GetNumInstancesRequest) GetVersion() string {\n\tif m != nil && m.Version != nil {\n\t\treturn *m.Version\n\t}\n\treturn \"\"\n}\n\ntype GetNumInstancesResponse struct {\n\tInstances            *int64   `protobuf:\"varint,1,req,name=instances\" json:\"instances,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *GetNumInstancesResponse) Reset()         { *m = GetNumInstancesResponse{} }\nfunc (m *GetNumInstancesResponse) String() string { return proto.CompactTextString(m) }\nfunc (*GetNumInstancesResponse) ProtoMessage()    {}\nfunc (*GetNumInstancesResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_modules_service_9cd3bffe4e91c59a, []int{8}\n}\nfunc (m *GetNumInstancesResponse) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_GetNumInstancesResponse.Unmarshal(m, b)\n}\nfunc (m *GetNumInstancesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_GetNumInstancesResponse.Marshal(b, m, deterministic)\n}\nfunc (dst *GetNumInstancesResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_GetNumInstancesResponse.Merge(dst, src)\n}\nfunc (m *GetNumInstancesResponse) XXX_Size() int {\n\treturn xxx_messageInfo_GetNumInstancesResponse.Size(m)\n}\nfunc (m *GetNumInstancesResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_GetNumInstancesResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_GetNumInstancesResponse proto.InternalMessageInfo\n\nfunc (m *GetNumInstancesResponse) GetInstances() int64 {\n\tif m != nil && m.Instances != nil {\n\t\treturn *m.Instances\n\t}\n\treturn 0\n}\n\ntype SetNumInstancesRequest struct {\n\tModule               *string  `protobuf:\"bytes,1,opt,name=module\" json:\"module,omitempty\"`\n\tVersion              *string  `protobuf:\"bytes,2,opt,name=version\" json:\"version,omitempty\"`\n\tInstances            *int64   `protobuf:\"varint,3,req,name=instances\" json:\"instances,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *SetNumInstancesRequest) Reset()         { *m = SetNumInstancesRequest{} }\nfunc (m *SetNumInstancesRequest) String() string { return proto.CompactTextString(m) }\nfunc (*SetNumInstancesRequest) ProtoMessage()    {}\nfunc (*SetNumInstancesRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_modules_service_9cd3bffe4e91c59a, []int{9}\n}\nfunc (m *SetNumInstancesRequest) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_SetNumInstancesRequest.Unmarshal(m, b)\n}\nfunc (m *SetNumInstancesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_SetNumInstancesRequest.Marshal(b, m, deterministic)\n}\nfunc (dst *SetNumInstancesRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_SetNumInstancesRequest.Merge(dst, src)\n}\nfunc (m *SetNumInstancesRequest) XXX_Size() int {\n\treturn xxx_messageInfo_SetNumInstancesRequest.Size(m)\n}\nfunc (m *SetNumInstancesRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_SetNumInstancesRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_SetNumInstancesRequest proto.InternalMessageInfo\n\nfunc (m *SetNumInstancesRequest) GetModule() string {\n\tif m != nil && m.Module != nil {\n\t\treturn *m.Module\n\t}\n\treturn \"\"\n}\n\nfunc (m *SetNumInstancesRequest) GetVersion() string {\n\tif m != nil && m.Version != nil {\n\t\treturn *m.Version\n\t}\n\treturn \"\"\n}\n\nfunc (m *SetNumInstancesRequest) GetInstances() int64 {\n\tif m != nil && m.Instances != nil {\n\t\treturn *m.Instances\n\t}\n\treturn 0\n}\n\ntype SetNumInstancesResponse struct {\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *SetNumInstancesResponse) Reset()         { *m = SetNumInstancesResponse{} }\nfunc (m *SetNumInstancesResponse) String() string { return proto.CompactTextString(m) }\nfunc (*SetNumInstancesResponse) ProtoMessage()    {}\nfunc (*SetNumInstancesResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_modules_service_9cd3bffe4e91c59a, []int{10}\n}\nfunc (m *SetNumInstancesResponse) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_SetNumInstancesResponse.Unmarshal(m, b)\n}\nfunc (m *SetNumInstancesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_SetNumInstancesResponse.Marshal(b, m, deterministic)\n}\nfunc (dst *SetNumInstancesResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_SetNumInstancesResponse.Merge(dst, src)\n}\nfunc (m *SetNumInstancesResponse) XXX_Size() int {\n\treturn xxx_messageInfo_SetNumInstancesResponse.Size(m)\n}\nfunc (m *SetNumInstancesResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_SetNumInstancesResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_SetNumInstancesResponse proto.InternalMessageInfo\n\ntype StartModuleRequest struct {\n\tModule               *string  `protobuf:\"bytes,1,req,name=module\" json:\"module,omitempty\"`\n\tVersion              *string  `protobuf:\"bytes,2,req,name=version\" json:\"version,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *StartModuleRequest) Reset()         { *m = StartModuleRequest{} }\nfunc (m *StartModuleRequest) String() string { return proto.CompactTextString(m) }\nfunc (*StartModuleRequest) ProtoMessage()    {}\nfunc (*StartModuleRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_modules_service_9cd3bffe4e91c59a, []int{11}\n}\nfunc (m *StartModuleRequest) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_StartModuleRequest.Unmarshal(m, b)\n}\nfunc (m *StartModuleRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_StartModuleRequest.Marshal(b, m, deterministic)\n}\nfunc (dst *StartModuleRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_StartModuleRequest.Merge(dst, src)\n}\nfunc (m *StartModuleRequest) XXX_Size() int {\n\treturn xxx_messageInfo_StartModuleRequest.Size(m)\n}\nfunc (m *StartModuleRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_StartModuleRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_StartModuleRequest proto.InternalMessageInfo\n\nfunc (m *StartModuleRequest) GetModule() string {\n\tif m != nil && m.Module != nil {\n\t\treturn *m.Module\n\t}\n\treturn \"\"\n}\n\nfunc (m *StartModuleRequest) GetVersion() string {\n\tif m != nil && m.Version != nil {\n\t\treturn *m.Version\n\t}\n\treturn \"\"\n}\n\ntype StartModuleResponse struct {\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *StartModuleResponse) Reset()         { *m = StartModuleResponse{} }\nfunc (m *StartModuleResponse) String() string { return proto.CompactTextString(m) }\nfunc (*StartModuleResponse) ProtoMessage()    {}\nfunc (*StartModuleResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_modules_service_9cd3bffe4e91c59a, []int{12}\n}\nfunc (m *StartModuleResponse) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_StartModuleResponse.Unmarshal(m, b)\n}\nfunc (m *StartModuleResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_StartModuleResponse.Marshal(b, m, deterministic)\n}\nfunc (dst *StartModuleResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_StartModuleResponse.Merge(dst, src)\n}\nfunc (m *StartModuleResponse) XXX_Size() int {\n\treturn xxx_messageInfo_StartModuleResponse.Size(m)\n}\nfunc (m *StartModuleResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_StartModuleResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_StartModuleResponse proto.InternalMessageInfo\n\ntype StopModuleRequest struct {\n\tModule               *string  `protobuf:\"bytes,1,opt,name=module\" json:\"module,omitempty\"`\n\tVersion              *string  `protobuf:\"bytes,2,opt,name=version\" json:\"version,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *StopModuleRequest) Reset()         { *m = StopModuleRequest{} }\nfunc (m *StopModuleRequest) String() string { return proto.CompactTextString(m) }\nfunc (*StopModuleRequest) ProtoMessage()    {}\nfunc (*StopModuleRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_modules_service_9cd3bffe4e91c59a, []int{13}\n}\nfunc (m *StopModuleRequest) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_StopModuleRequest.Unmarshal(m, b)\n}\nfunc (m *StopModuleRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_StopModuleRequest.Marshal(b, m, deterministic)\n}\nfunc (dst *StopModuleRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_StopModuleRequest.Merge(dst, src)\n}\nfunc (m *StopModuleRequest) XXX_Size() int {\n\treturn xxx_messageInfo_StopModuleRequest.Size(m)\n}\nfunc (m *StopModuleRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_StopModuleRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_StopModuleRequest proto.InternalMessageInfo\n\nfunc (m *StopModuleRequest) GetModule() string {\n\tif m != nil && m.Module != nil {\n\t\treturn *m.Module\n\t}\n\treturn \"\"\n}\n\nfunc (m *StopModuleRequest) GetVersion() string {\n\tif m != nil && m.Version != nil {\n\t\treturn *m.Version\n\t}\n\treturn \"\"\n}\n\ntype StopModuleResponse struct {\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *StopModuleResponse) Reset()         { *m = StopModuleResponse{} }\nfunc (m *StopModuleResponse) String() string { return proto.CompactTextString(m) }\nfunc (*StopModuleResponse) ProtoMessage()    {}\nfunc (*StopModuleResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_modules_service_9cd3bffe4e91c59a, []int{14}\n}\nfunc (m *StopModuleResponse) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_StopModuleResponse.Unmarshal(m, b)\n}\nfunc (m *StopModuleResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_StopModuleResponse.Marshal(b, m, deterministic)\n}\nfunc (dst *StopModuleResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_StopModuleResponse.Merge(dst, src)\n}\nfunc (m *StopModuleResponse) XXX_Size() int {\n\treturn xxx_messageInfo_StopModuleResponse.Size(m)\n}\nfunc (m *StopModuleResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_StopModuleResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_StopModuleResponse proto.InternalMessageInfo\n\ntype GetHostnameRequest struct {\n\tModule               *string  `protobuf:\"bytes,1,opt,name=module\" json:\"module,omitempty\"`\n\tVersion              *string  `protobuf:\"bytes,2,opt,name=version\" json:\"version,omitempty\"`\n\tInstance             *string  `protobuf:\"bytes,3,opt,name=instance\" json:\"instance,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *GetHostnameRequest) Reset()         { *m = GetHostnameRequest{} }\nfunc (m *GetHostnameRequest) String() string { return proto.CompactTextString(m) }\nfunc (*GetHostnameRequest) ProtoMessage()    {}\nfunc (*GetHostnameRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_modules_service_9cd3bffe4e91c59a, []int{15}\n}\nfunc (m *GetHostnameRequest) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_GetHostnameRequest.Unmarshal(m, b)\n}\nfunc (m *GetHostnameRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_GetHostnameRequest.Marshal(b, m, deterministic)\n}\nfunc (dst *GetHostnameRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_GetHostnameRequest.Merge(dst, src)\n}\nfunc (m *GetHostnameRequest) XXX_Size() int {\n\treturn xxx_messageInfo_GetHostnameRequest.Size(m)\n}\nfunc (m *GetHostnameRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_GetHostnameRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_GetHostnameRequest proto.InternalMessageInfo\n\nfunc (m *GetHostnameRequest) GetModule() string {\n\tif m != nil && m.Module != nil {\n\t\treturn *m.Module\n\t}\n\treturn \"\"\n}\n\nfunc (m *GetHostnameRequest) GetVersion() string {\n\tif m != nil && m.Version != nil {\n\t\treturn *m.Version\n\t}\n\treturn \"\"\n}\n\nfunc (m *GetHostnameRequest) GetInstance() string {\n\tif m != nil && m.Instance != nil {\n\t\treturn *m.Instance\n\t}\n\treturn \"\"\n}\n\ntype GetHostnameResponse struct {\n\tHostname             *string  `protobuf:\"bytes,1,req,name=hostname\" json:\"hostname,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *GetHostnameResponse) Reset()         { *m = GetHostnameResponse{} }\nfunc (m *GetHostnameResponse) String() string { return proto.CompactTextString(m) }\nfunc (*GetHostnameResponse) ProtoMessage()    {}\nfunc (*GetHostnameResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_modules_service_9cd3bffe4e91c59a, []int{16}\n}\nfunc (m *GetHostnameResponse) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_GetHostnameResponse.Unmarshal(m, b)\n}\nfunc (m *GetHostnameResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_GetHostnameResponse.Marshal(b, m, deterministic)\n}\nfunc (dst *GetHostnameResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_GetHostnameResponse.Merge(dst, src)\n}\nfunc (m *GetHostnameResponse) XXX_Size() int {\n\treturn xxx_messageInfo_GetHostnameResponse.Size(m)\n}\nfunc (m *GetHostnameResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_GetHostnameResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_GetHostnameResponse proto.InternalMessageInfo\n\nfunc (m *GetHostnameResponse) GetHostname() string {\n\tif m != nil && m.Hostname != nil {\n\t\treturn *m.Hostname\n\t}\n\treturn \"\"\n}\n\nfunc init() {\n\tproto.RegisterType((*ModulesServiceError)(nil), \"appengine.ModulesServiceError\")\n\tproto.RegisterType((*GetModulesRequest)(nil), \"appengine.GetModulesRequest\")\n\tproto.RegisterType((*GetModulesResponse)(nil), \"appengine.GetModulesResponse\")\n\tproto.RegisterType((*GetVersionsRequest)(nil), \"appengine.GetVersionsRequest\")\n\tproto.RegisterType((*GetVersionsResponse)(nil), \"appengine.GetVersionsResponse\")\n\tproto.RegisterType((*GetDefaultVersionRequest)(nil), \"appengine.GetDefaultVersionRequest\")\n\tproto.RegisterType((*GetDefaultVersionResponse)(nil), \"appengine.GetDefaultVersionResponse\")\n\tproto.RegisterType((*GetNumInstancesRequest)(nil), \"appengine.GetNumInstancesRequest\")\n\tproto.RegisterType((*GetNumInstancesResponse)(nil), \"appengine.GetNumInstancesResponse\")\n\tproto.RegisterType((*SetNumInstancesRequest)(nil), \"appengine.SetNumInstancesRequest\")\n\tproto.RegisterType((*SetNumInstancesResponse)(nil), \"appengine.SetNumInstancesResponse\")\n\tproto.RegisterType((*StartModuleRequest)(nil), \"appengine.StartModuleRequest\")\n\tproto.RegisterType((*StartModuleResponse)(nil), \"appengine.StartModuleResponse\")\n\tproto.RegisterType((*StopModuleRequest)(nil), \"appengine.StopModuleRequest\")\n\tproto.RegisterType((*StopModuleResponse)(nil), \"appengine.StopModuleResponse\")\n\tproto.RegisterType((*GetHostnameRequest)(nil), \"appengine.GetHostnameRequest\")\n\tproto.RegisterType((*GetHostnameResponse)(nil), \"appengine.GetHostnameResponse\")\n}\n\nfunc init() {\n\tproto.RegisterFile(\"google.golang.org/appengine/internal/modules/modules_service.proto\", fileDescriptor_modules_service_9cd3bffe4e91c59a)\n}\n\nvar fileDescriptor_modules_service_9cd3bffe4e91c59a = []byte{\n\t// 457 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x94, 0xc1, 0x6f, 0xd3, 0x30,\n\t0x14, 0xc6, 0x69, 0x02, 0xdb, 0xf2, 0x0e, 0x90, 0x3a, 0x5b, 0xd7, 0x4d, 0x1c, 0x50, 0x4e, 0x1c,\n\t0x50, 0x2b, 0x90, 0x10, 0xe7, 0xae, 0x35, 0x25, 0xb0, 0xa5, 0x28, 0xce, 0x2a, 0xc4, 0xa5, 0x0a,\n\t0xdb, 0x23, 0x8b, 0x94, 0xda, 0xc1, 0x76, 0x77, 0xe4, 0xbf, 0xe0, 0xff, 0x45, 0x4b, 0xed, 0xb6,\n\t0x81, 0x4e, 0x45, 0x68, 0xa7, 0xe4, 0x7d, 0xfe, 0xfc, 0x7b, 0x9f, 0x5f, 0xac, 0xc0, 0x59, 0x2e,\n\t0x44, 0x5e, 0x62, 0x2f, 0x17, 0x65, 0xc6, 0xf3, 0x9e, 0x90, 0x79, 0x3f, 0xab, 0x2a, 0xe4, 0x79,\n\t0xc1, 0xb1, 0x5f, 0x70, 0x8d, 0x92, 0x67, 0x65, 0x7f, 0x2e, 0xae, 0x17, 0x25, 0x2a, 0xfb, 0x9c,\n\t0x29, 0x94, 0xb7, 0xc5, 0x15, 0xf6, 0x2a, 0x29, 0xb4, 0x20, 0xde, 0x6a, 0x47, 0xf8, 0xab, 0x05,\n\t0xc1, 0xc5, 0xd2, 0xc4, 0x96, 0x1e, 0x2a, 0xa5, 0x90, 0xe1, 0x4f, 0xf0, 0xea, 0x97, 0xa1, 0xb8,\n\t0x46, 0xb2, 0x07, 0xce, 0xe4, 0x93, 0xff, 0x88, 0x10, 0x78, 0x1a, 0xc5, 0xd3, 0xc1, 0x79, 0x34,\n\t0x9a, 0x5d, 0x4c, 0x46, 0x97, 0xe7, 0xd4, 0x6f, 0x91, 0x00, 0x9e, 0x59, 0x6d, 0x4a, 0x13, 0x16,\n\t0x4d, 0x62, 0xdf, 0x21, 0x47, 0xd0, 0xb6, 0x62, 0x14, 0xb3, 0x74, 0x10, 0x0f, 0x29, 0xf3, 0xdd,\n\t0x3b, 0x6f, 0x9a, 0x0c, 0x62, 0x16, 0xd1, 0x38, 0x9d, 0xd1, 0x24, 0x99, 0x24, 0xfe, 0x63, 0x72,\n\t0x08, 0xfe, 0x65, 0x4c, 0xbf, 0x7c, 0xa6, 0xc3, 0x94, 0x8e, 0x66, 0x2c, 0x1d, 0xa4, 0xd4, 0x7f,\n\t0x12, 0x06, 0xd0, 0x1e, 0xa3, 0x36, 0xc9, 0x12, 0xfc, 0xb1, 0x40, 0xa5, 0xc3, 0x57, 0x40, 0x36,\n\t0x45, 0x55, 0x09, 0xae, 0x90, 0x74, 0x60, 0x6f, 0x79, 0xcc, 0x6e, 0xeb, 0x85, 0xfb, 0xd2, 0x4b,\n\t0x4c, 0x65, 0xdc, 0x53, 0x94, 0xaa, 0x10, 0xdc, 0x32, 0x1a, 0xee, 0xd6, 0x86, 0xbb, 0x0f, 0x41,\n\t0xc3, 0x6d, 0xe0, 0x5d, 0xd8, 0xbf, 0x5d, 0x6a, 0x86, 0x6e, 0xcb, 0xf0, 0x0d, 0x74, 0xc7, 0xa8,\n\t0x47, 0xf8, 0x3d, 0x5b, 0x94, 0x76, 0xdf, 0xae, 0x26, 0x6f, 0xe1, 0x64, 0xcb, 0x9e, 0x6d, 0xad,\n\t0x9c, 0xcd, 0x56, 0x1f, 0xa1, 0x33, 0x46, 0x1d, 0x2f, 0xe6, 0x11, 0x57, 0x3a, 0xe3, 0x57, 0xb8,\n\t0xeb, 0x34, 0x9b, 0x2c, 0xa7, 0x5e, 0x58, 0xb1, 0xde, 0xc1, 0xf1, 0x5f, 0x2c, 0x13, 0xe0, 0x39,\n\t0x78, 0x85, 0x15, 0xeb, 0x08, 0x6e, 0xb2, 0x16, 0xc2, 0x1b, 0xe8, 0xb0, 0x07, 0x0a, 0xd1, 0xec,\n\t0xe4, 0xfe, 0xd9, 0xe9, 0x04, 0x8e, 0xd9, 0xf6, 0x88, 0xe1, 0x7b, 0x20, 0x4c, 0x67, 0xd2, 0xdc,\n\t0x81, 0x6d, 0x01, 0x9c, 0xfb, 0x02, 0x34, 0x26, 0x7a, 0x04, 0x41, 0x83, 0x63, 0xf0, 0x14, 0xda,\n\t0x4c, 0x8b, 0xea, 0x7e, 0xfa, 0xbf, 0xcd, 0xf8, 0xf0, 0x2e, 0xe5, 0x1a, 0x63, 0xe0, 0xdf, 0xea,\n\t0xfb, 0xf8, 0x41, 0x28, 0xcd, 0xb3, 0xf9, 0xff, 0xd3, 0xc9, 0x29, 0x1c, 0xd8, 0x59, 0x75, 0xdd,\n\t0x7a, 0x69, 0x55, 0x87, 0xaf, 0xeb, 0x5b, 0xbc, 0xee, 0x61, 0xbe, 0xec, 0x29, 0x1c, 0xdc, 0x18,\n\t0xcd, 0x8c, 0x68, 0x55, 0x9f, 0x79, 0x5f, 0xf7, 0xcd, 0x5f, 0xe2, 0x77, 0x00, 0x00, 0x00, 0xff,\n\t0xff, 0x6e, 0xbc, 0xe0, 0x61, 0x5c, 0x04, 0x00, 0x00,\n}\n"
  },
  {
    "path": "vendor/google.golang.org/appengine/internal/net.go",
    "content": "// Copyright 2014 Google Inc. All rights reserved.\n// Use of this source code is governed by the Apache 2.0\n// license that can be found in the LICENSE file.\n\npackage internal\n\n// This file implements a network dialer that limits the number of concurrent connections.\n// It is only used for API calls.\n\nimport (\n\t\"log\"\n\t\"net\"\n\t\"runtime\"\n\t\"sync\"\n\t\"time\"\n)\n\nvar limitSem = make(chan int, 100) // TODO(dsymonds): Use environment variable.\n\nfunc limitRelease() {\n\t// non-blocking\n\tselect {\n\tcase <-limitSem:\n\tdefault:\n\t\t// This should not normally happen.\n\t\tlog.Print(\"appengine: unbalanced limitSem release!\")\n\t}\n}\n\nfunc limitDial(network, addr string) (net.Conn, error) {\n\tlimitSem <- 1\n\n\t// Dial with a timeout in case the API host is MIA.\n\t// The connection should normally be very fast.\n\tconn, err := net.DialTimeout(network, addr, 500*time.Millisecond)\n\tif err != nil {\n\t\tlimitRelease()\n\t\treturn nil, err\n\t}\n\tlc := &limitConn{Conn: conn}\n\truntime.SetFinalizer(lc, (*limitConn).Close) // shouldn't usually be required\n\treturn lc, nil\n}\n\ntype limitConn struct {\n\tclose sync.Once\n\tnet.Conn\n}\n\nfunc (lc *limitConn) Close() error {\n\tdefer lc.close.Do(func() {\n\t\tlimitRelease()\n\t\truntime.SetFinalizer(lc, nil)\n\t})\n\treturn lc.Conn.Close()\n}\n"
  },
  {
    "path": "vendor/google.golang.org/appengine/internal/remote_api/remote_api.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// source: google.golang.org/appengine/internal/remote_api/remote_api.proto\n\npackage remote_api\n\nimport proto \"github.com/golang/protobuf/proto\"\nimport fmt \"fmt\"\nimport math \"math\"\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar _ = proto.Marshal\nvar _ = fmt.Errorf\nvar _ = math.Inf\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package\n\ntype RpcError_ErrorCode int32\n\nconst (\n\tRpcError_UNKNOWN             RpcError_ErrorCode = 0\n\tRpcError_CALL_NOT_FOUND      RpcError_ErrorCode = 1\n\tRpcError_PARSE_ERROR         RpcError_ErrorCode = 2\n\tRpcError_SECURITY_VIOLATION  RpcError_ErrorCode = 3\n\tRpcError_OVER_QUOTA          RpcError_ErrorCode = 4\n\tRpcError_REQUEST_TOO_LARGE   RpcError_ErrorCode = 5\n\tRpcError_CAPABILITY_DISABLED RpcError_ErrorCode = 6\n\tRpcError_FEATURE_DISABLED    RpcError_ErrorCode = 7\n\tRpcError_BAD_REQUEST         RpcError_ErrorCode = 8\n\tRpcError_RESPONSE_TOO_LARGE  RpcError_ErrorCode = 9\n\tRpcError_CANCELLED           RpcError_ErrorCode = 10\n\tRpcError_REPLAY_ERROR        RpcError_ErrorCode = 11\n\tRpcError_DEADLINE_EXCEEDED   RpcError_ErrorCode = 12\n)\n\nvar RpcError_ErrorCode_name = map[int32]string{\n\t0:  \"UNKNOWN\",\n\t1:  \"CALL_NOT_FOUND\",\n\t2:  \"PARSE_ERROR\",\n\t3:  \"SECURITY_VIOLATION\",\n\t4:  \"OVER_QUOTA\",\n\t5:  \"REQUEST_TOO_LARGE\",\n\t6:  \"CAPABILITY_DISABLED\",\n\t7:  \"FEATURE_DISABLED\",\n\t8:  \"BAD_REQUEST\",\n\t9:  \"RESPONSE_TOO_LARGE\",\n\t10: \"CANCELLED\",\n\t11: \"REPLAY_ERROR\",\n\t12: \"DEADLINE_EXCEEDED\",\n}\nvar RpcError_ErrorCode_value = map[string]int32{\n\t\"UNKNOWN\":             0,\n\t\"CALL_NOT_FOUND\":      1,\n\t\"PARSE_ERROR\":         2,\n\t\"SECURITY_VIOLATION\":  3,\n\t\"OVER_QUOTA\":          4,\n\t\"REQUEST_TOO_LARGE\":   5,\n\t\"CAPABILITY_DISABLED\": 6,\n\t\"FEATURE_DISABLED\":    7,\n\t\"BAD_REQUEST\":         8,\n\t\"RESPONSE_TOO_LARGE\":  9,\n\t\"CANCELLED\":           10,\n\t\"REPLAY_ERROR\":        11,\n\t\"DEADLINE_EXCEEDED\":   12,\n}\n\nfunc (x RpcError_ErrorCode) Enum() *RpcError_ErrorCode {\n\tp := new(RpcError_ErrorCode)\n\t*p = x\n\treturn p\n}\nfunc (x RpcError_ErrorCode) String() string {\n\treturn proto.EnumName(RpcError_ErrorCode_name, int32(x))\n}\nfunc (x *RpcError_ErrorCode) UnmarshalJSON(data []byte) error {\n\tvalue, err := proto.UnmarshalJSONEnum(RpcError_ErrorCode_value, data, \"RpcError_ErrorCode\")\n\tif err != nil {\n\t\treturn err\n\t}\n\t*x = RpcError_ErrorCode(value)\n\treturn nil\n}\nfunc (RpcError_ErrorCode) EnumDescriptor() ([]byte, []int) {\n\treturn fileDescriptor_remote_api_1978114ec33a273d, []int{2, 0}\n}\n\ntype Request struct {\n\tServiceName          *string  `protobuf:\"bytes,2,req,name=service_name,json=serviceName\" json:\"service_name,omitempty\"`\n\tMethod               *string  `protobuf:\"bytes,3,req,name=method\" json:\"method,omitempty\"`\n\tRequest              []byte   `protobuf:\"bytes,4,req,name=request\" json:\"request,omitempty\"`\n\tRequestId            *string  `protobuf:\"bytes,5,opt,name=request_id,json=requestId\" json:\"request_id,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *Request) Reset()         { *m = Request{} }\nfunc (m *Request) String() string { return proto.CompactTextString(m) }\nfunc (*Request) ProtoMessage()    {}\nfunc (*Request) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_remote_api_1978114ec33a273d, []int{0}\n}\nfunc (m *Request) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_Request.Unmarshal(m, b)\n}\nfunc (m *Request) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_Request.Marshal(b, m, deterministic)\n}\nfunc (dst *Request) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Request.Merge(dst, src)\n}\nfunc (m *Request) XXX_Size() int {\n\treturn xxx_messageInfo_Request.Size(m)\n}\nfunc (m *Request) XXX_DiscardUnknown() {\n\txxx_messageInfo_Request.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Request proto.InternalMessageInfo\n\nfunc (m *Request) GetServiceName() string {\n\tif m != nil && m.ServiceName != nil {\n\t\treturn *m.ServiceName\n\t}\n\treturn \"\"\n}\n\nfunc (m *Request) GetMethod() string {\n\tif m != nil && m.Method != nil {\n\t\treturn *m.Method\n\t}\n\treturn \"\"\n}\n\nfunc (m *Request) GetRequest() []byte {\n\tif m != nil {\n\t\treturn m.Request\n\t}\n\treturn nil\n}\n\nfunc (m *Request) GetRequestId() string {\n\tif m != nil && m.RequestId != nil {\n\t\treturn *m.RequestId\n\t}\n\treturn \"\"\n}\n\ntype ApplicationError struct {\n\tCode                 *int32   `protobuf:\"varint,1,req,name=code\" json:\"code,omitempty\"`\n\tDetail               *string  `protobuf:\"bytes,2,req,name=detail\" json:\"detail,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *ApplicationError) Reset()         { *m = ApplicationError{} }\nfunc (m *ApplicationError) String() string { return proto.CompactTextString(m) }\nfunc (*ApplicationError) ProtoMessage()    {}\nfunc (*ApplicationError) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_remote_api_1978114ec33a273d, []int{1}\n}\nfunc (m *ApplicationError) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_ApplicationError.Unmarshal(m, b)\n}\nfunc (m *ApplicationError) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_ApplicationError.Marshal(b, m, deterministic)\n}\nfunc (dst *ApplicationError) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_ApplicationError.Merge(dst, src)\n}\nfunc (m *ApplicationError) XXX_Size() int {\n\treturn xxx_messageInfo_ApplicationError.Size(m)\n}\nfunc (m *ApplicationError) XXX_DiscardUnknown() {\n\txxx_messageInfo_ApplicationError.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_ApplicationError proto.InternalMessageInfo\n\nfunc (m *ApplicationError) GetCode() int32 {\n\tif m != nil && m.Code != nil {\n\t\treturn *m.Code\n\t}\n\treturn 0\n}\n\nfunc (m *ApplicationError) GetDetail() string {\n\tif m != nil && m.Detail != nil {\n\t\treturn *m.Detail\n\t}\n\treturn \"\"\n}\n\ntype RpcError struct {\n\tCode                 *int32   `protobuf:\"varint,1,req,name=code\" json:\"code,omitempty\"`\n\tDetail               *string  `protobuf:\"bytes,2,opt,name=detail\" json:\"detail,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *RpcError) Reset()         { *m = RpcError{} }\nfunc (m *RpcError) String() string { return proto.CompactTextString(m) }\nfunc (*RpcError) ProtoMessage()    {}\nfunc (*RpcError) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_remote_api_1978114ec33a273d, []int{2}\n}\nfunc (m *RpcError) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_RpcError.Unmarshal(m, b)\n}\nfunc (m *RpcError) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_RpcError.Marshal(b, m, deterministic)\n}\nfunc (dst *RpcError) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_RpcError.Merge(dst, src)\n}\nfunc (m *RpcError) XXX_Size() int {\n\treturn xxx_messageInfo_RpcError.Size(m)\n}\nfunc (m *RpcError) XXX_DiscardUnknown() {\n\txxx_messageInfo_RpcError.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_RpcError proto.InternalMessageInfo\n\nfunc (m *RpcError) GetCode() int32 {\n\tif m != nil && m.Code != nil {\n\t\treturn *m.Code\n\t}\n\treturn 0\n}\n\nfunc (m *RpcError) GetDetail() string {\n\tif m != nil && m.Detail != nil {\n\t\treturn *m.Detail\n\t}\n\treturn \"\"\n}\n\ntype Response struct {\n\tResponse             []byte            `protobuf:\"bytes,1,opt,name=response\" json:\"response,omitempty\"`\n\tException            []byte            `protobuf:\"bytes,2,opt,name=exception\" json:\"exception,omitempty\"`\n\tApplicationError     *ApplicationError `protobuf:\"bytes,3,opt,name=application_error,json=applicationError\" json:\"application_error,omitempty\"`\n\tJavaException        []byte            `protobuf:\"bytes,4,opt,name=java_exception,json=javaException\" json:\"java_exception,omitempty\"`\n\tRpcError             *RpcError         `protobuf:\"bytes,5,opt,name=rpc_error,json=rpcError\" json:\"rpc_error,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}          `json:\"-\"`\n\tXXX_unrecognized     []byte            `json:\"-\"`\n\tXXX_sizecache        int32             `json:\"-\"`\n}\n\nfunc (m *Response) Reset()         { *m = Response{} }\nfunc (m *Response) String() string { return proto.CompactTextString(m) }\nfunc (*Response) ProtoMessage()    {}\nfunc (*Response) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_remote_api_1978114ec33a273d, []int{3}\n}\nfunc (m *Response) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_Response.Unmarshal(m, b)\n}\nfunc (m *Response) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_Response.Marshal(b, m, deterministic)\n}\nfunc (dst *Response) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Response.Merge(dst, src)\n}\nfunc (m *Response) XXX_Size() int {\n\treturn xxx_messageInfo_Response.Size(m)\n}\nfunc (m *Response) XXX_DiscardUnknown() {\n\txxx_messageInfo_Response.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Response proto.InternalMessageInfo\n\nfunc (m *Response) GetResponse() []byte {\n\tif m != nil {\n\t\treturn m.Response\n\t}\n\treturn nil\n}\n\nfunc (m *Response) GetException() []byte {\n\tif m != nil {\n\t\treturn m.Exception\n\t}\n\treturn nil\n}\n\nfunc (m *Response) GetApplicationError() *ApplicationError {\n\tif m != nil {\n\t\treturn m.ApplicationError\n\t}\n\treturn nil\n}\n\nfunc (m *Response) GetJavaException() []byte {\n\tif m != nil {\n\t\treturn m.JavaException\n\t}\n\treturn nil\n}\n\nfunc (m *Response) GetRpcError() *RpcError {\n\tif m != nil {\n\t\treturn m.RpcError\n\t}\n\treturn nil\n}\n\nfunc init() {\n\tproto.RegisterType((*Request)(nil), \"remote_api.Request\")\n\tproto.RegisterType((*ApplicationError)(nil), \"remote_api.ApplicationError\")\n\tproto.RegisterType((*RpcError)(nil), \"remote_api.RpcError\")\n\tproto.RegisterType((*Response)(nil), \"remote_api.Response\")\n}\n\nfunc init() {\n\tproto.RegisterFile(\"google.golang.org/appengine/internal/remote_api/remote_api.proto\", fileDescriptor_remote_api_1978114ec33a273d)\n}\n\nvar fileDescriptor_remote_api_1978114ec33a273d = []byte{\n\t// 531 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0x51, 0x6e, 0xd3, 0x40,\n\t0x10, 0x86, 0xb1, 0x9b, 0x34, 0xf1, 0xc4, 0x2d, 0xdb, 0xa5, 0x14, 0x0b, 0x15, 0x29, 0x44, 0x42,\n\t0xca, 0x53, 0x2a, 0x38, 0x00, 0x62, 0x63, 0x6f, 0x91, 0x85, 0x65, 0xa7, 0x6b, 0xbb, 0x50, 0x5e,\n\t0x56, 0x2b, 0x67, 0x65, 0x8c, 0x12, 0xaf, 0xd9, 0x98, 0x8a, 0x17, 0x6e, 0xc0, 0xb5, 0x38, 0x0c,\n\t0xb7, 0x40, 0x36, 0x6e, 0x63, 0xf5, 0x89, 0xb7, 0x7f, 0x7e, 0x7b, 0xe6, 0x1b, 0xcd, 0xcc, 0xc2,\n\t0xbb, 0x5c, 0xa9, 0x7c, 0x23, 0x17, 0xb9, 0xda, 0x88, 0x32, 0x5f, 0x28, 0x9d, 0x5f, 0x88, 0xaa,\n\t0x92, 0x65, 0x5e, 0x94, 0xf2, 0xa2, 0x28, 0x6b, 0xa9, 0x4b, 0xb1, 0xb9, 0xd0, 0x72, 0xab, 0x6a,\n\t0xc9, 0x45, 0x55, 0xf4, 0xe4, 0xa2, 0xd2, 0xaa, 0x56, 0x18, 0xf6, 0xce, 0xec, 0x27, 0x8c, 0x98,\n\t0xfc, 0xf6, 0x5d, 0xee, 0x6a, 0xfc, 0x12, 0xec, 0x9d, 0xd4, 0xb7, 0x45, 0x26, 0x79, 0x29, 0xb6,\n\t0xd2, 0x31, 0xa7, 0xe6, 0xdc, 0x62, 0x93, 0xce, 0x0b, 0xc5, 0x56, 0xe2, 0x33, 0x38, 0xdc, 0xca,\n\t0xfa, 0x8b, 0x5a, 0x3b, 0x07, 0xed, 0xc7, 0x2e, 0xc2, 0x0e, 0x8c, 0xf4, 0xbf, 0x2a, 0xce, 0x60,\n\t0x6a, 0xce, 0x6d, 0x76, 0x17, 0xe2, 0x17, 0x00, 0x9d, 0xe4, 0xc5, 0xda, 0x19, 0x4e, 0x8d, 0xb9,\n\t0xc5, 0xac, 0xce, 0xf1, 0xd7, 0xb3, 0xb7, 0x80, 0x48, 0x55, 0x6d, 0x8a, 0x4c, 0xd4, 0x85, 0x2a,\n\t0xa9, 0xd6, 0x4a, 0x63, 0x0c, 0x83, 0x4c, 0xad, 0xa5, 0x63, 0x4c, 0xcd, 0xf9, 0x90, 0xb5, 0xba,\n\t0x01, 0xaf, 0x65, 0x2d, 0x8a, 0x4d, 0xd7, 0x55, 0x17, 0xcd, 0x7e, 0x9b, 0x30, 0x66, 0x55, 0xf6,\n\t0x7f, 0x89, 0x46, 0x2f, 0xf1, 0x97, 0x09, 0x56, 0x9b, 0xe5, 0x36, 0x7f, 0x4d, 0x60, 0x94, 0x86,\n\t0x1f, 0xc2, 0xe8, 0x63, 0x88, 0x1e, 0x61, 0x0c, 0xc7, 0x2e, 0x09, 0x02, 0x1e, 0x46, 0x09, 0xbf,\n\t0x8c, 0xd2, 0xd0, 0x43, 0x06, 0x7e, 0x0c, 0x93, 0x15, 0x61, 0x31, 0xe5, 0x94, 0xb1, 0x88, 0x21,\n\t0x13, 0x9f, 0x01, 0x8e, 0xa9, 0x9b, 0x32, 0x3f, 0xb9, 0xe1, 0xd7, 0x7e, 0x14, 0x90, 0xc4, 0x8f,\n\t0x42, 0x74, 0x80, 0x8f, 0x01, 0xa2, 0x6b, 0xca, 0xf8, 0x55, 0x1a, 0x25, 0x04, 0x0d, 0xf0, 0x53,\n\t0x38, 0x61, 0xf4, 0x2a, 0xa5, 0x71, 0xc2, 0x93, 0x28, 0xe2, 0x01, 0x61, 0xef, 0x29, 0x1a, 0xe2,\n\t0x67, 0xf0, 0xc4, 0x25, 0x2b, 0xb2, 0xf4, 0x83, 0xa6, 0x80, 0xe7, 0xc7, 0x64, 0x19, 0x50, 0x0f,\n\t0x1d, 0xe2, 0x53, 0x40, 0x97, 0x94, 0x24, 0x29, 0xa3, 0x7b, 0x77, 0xd4, 0xe0, 0x97, 0xc4, 0xe3,\n\t0x5d, 0x25, 0x34, 0x6e, 0xf0, 0x8c, 0xc6, 0xab, 0x28, 0x8c, 0x69, 0xaf, 0xae, 0x85, 0x8f, 0xc0,\n\t0x72, 0x49, 0xe8, 0xd2, 0xa0, 0xc9, 0x03, 0x8c, 0xc0, 0x66, 0x74, 0x15, 0x90, 0x9b, 0xae, 0xef,\n\t0x49, 0xd3, 0x8f, 0x47, 0x89, 0x17, 0xf8, 0x21, 0xe5, 0xf4, 0x93, 0x4b, 0xa9, 0x47, 0x3d, 0x64,\n\t0xcf, 0xfe, 0x18, 0x30, 0x66, 0x72, 0x57, 0xa9, 0x72, 0x27, 0xf1, 0x73, 0x18, 0xeb, 0x4e, 0x3b,\n\t0xc6, 0xd4, 0x98, 0xdb, 0xec, 0x3e, 0xc6, 0xe7, 0x60, 0xc9, 0x1f, 0x99, 0xac, 0x9a, 0x75, 0xb5,\n\t0x23, 0xb5, 0xd9, 0xde, 0xc0, 0x3e, 0x9c, 0x88, 0xfd, 0x3a, 0xb9, 0x6c, 0x06, 0xec, 0x1c, 0x4c,\n\t0x8d, 0xf9, 0xe4, 0xcd, 0xf9, 0xa2, 0x77, 0x87, 0x0f, 0x77, 0xce, 0x90, 0x78, 0x78, 0x05, 0xaf,\n\t0xe0, 0xf8, 0xab, 0xb8, 0x15, 0x7c, 0x4f, 0x1b, 0xb4, 0xb4, 0xa3, 0xc6, 0xa5, 0xf7, 0xc4, 0xd7,\n\t0x60, 0xe9, 0x2a, 0xeb, 0x48, 0xc3, 0x96, 0x74, 0xda, 0x27, 0xdd, 0x1d, 0x07, 0x1b, 0xeb, 0x4e,\n\t0x2d, 0xed, 0xcf, 0xbd, 0x07, 0xf0, 0x37, 0x00, 0x00, 0xff, 0xff, 0x38, 0xd1, 0x0f, 0x22, 0x4f,\n\t0x03, 0x00, 0x00,\n}\n"
  },
  {
    "path": "vendor/google.golang.org/appengine/internal/transaction.go",
    "content": "// Copyright 2014 Google Inc. All rights reserved.\n// Use of this source code is governed by the Apache 2.0\n// license that can be found in the LICENSE file.\n\npackage internal\n\n// This file implements hooks for applying datastore transactions.\n\nimport (\n\t\"errors\"\n\t\"reflect\"\n\n\t\"github.com/golang/protobuf/proto\"\n\tnetcontext \"golang.org/x/net/context\"\n\n\tbasepb \"google.golang.org/appengine/internal/base\"\n\tpb \"google.golang.org/appengine/internal/datastore\"\n)\n\nvar transactionSetters = make(map[reflect.Type]reflect.Value)\n\n// RegisterTransactionSetter registers a function that sets transaction information\n// in a protocol buffer message. f should be a function with two arguments,\n// the first being a protocol buffer type, and the second being *datastore.Transaction.\nfunc RegisterTransactionSetter(f interface{}) {\n\tv := reflect.ValueOf(f)\n\ttransactionSetters[v.Type().In(0)] = v\n}\n\n// applyTransaction applies the transaction t to message pb\n// by using the relevant setter passed to RegisterTransactionSetter.\nfunc applyTransaction(pb proto.Message, t *pb.Transaction) {\n\tv := reflect.ValueOf(pb)\n\tif f, ok := transactionSetters[v.Type()]; ok {\n\t\tf.Call([]reflect.Value{v, reflect.ValueOf(t)})\n\t}\n}\n\nvar transactionKey = \"used for *Transaction\"\n\nfunc transactionFromContext(ctx netcontext.Context) *transaction {\n\tt, _ := ctx.Value(&transactionKey).(*transaction)\n\treturn t\n}\n\nfunc withTransaction(ctx netcontext.Context, t *transaction) netcontext.Context {\n\treturn netcontext.WithValue(ctx, &transactionKey, t)\n}\n\ntype transaction struct {\n\ttransaction pb.Transaction\n\tfinished    bool\n}\n\nvar ErrConcurrentTransaction = errors.New(\"internal: concurrent transaction\")\n\nfunc RunTransactionOnce(c netcontext.Context, f func(netcontext.Context) error, xg bool, readOnly bool, previousTransaction *pb.Transaction) (*pb.Transaction, error) {\n\tif transactionFromContext(c) != nil {\n\t\treturn nil, errors.New(\"nested transactions are not supported\")\n\t}\n\n\t// Begin the transaction.\n\tt := &transaction{}\n\treq := &pb.BeginTransactionRequest{\n\t\tApp: proto.String(FullyQualifiedAppID(c)),\n\t}\n\tif xg {\n\t\treq.AllowMultipleEg = proto.Bool(true)\n\t}\n\tif previousTransaction != nil {\n\t\treq.PreviousTransaction = previousTransaction\n\t}\n\tif readOnly {\n\t\treq.Mode = pb.BeginTransactionRequest_READ_ONLY.Enum()\n\t} else {\n\t\treq.Mode = pb.BeginTransactionRequest_READ_WRITE.Enum()\n\t}\n\tif err := Call(c, \"datastore_v3\", \"BeginTransaction\", req, &t.transaction); err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Call f, rolling back the transaction if f returns a non-nil error, or panics.\n\t// The panic is not recovered.\n\tdefer func() {\n\t\tif t.finished {\n\t\t\treturn\n\t\t}\n\t\tt.finished = true\n\t\t// Ignore the error return value, since we are already returning a non-nil\n\t\t// error (or we're panicking).\n\t\tCall(c, \"datastore_v3\", \"Rollback\", &t.transaction, &basepb.VoidProto{})\n\t}()\n\tif err := f(withTransaction(c, t)); err != nil {\n\t\treturn &t.transaction, err\n\t}\n\tt.finished = true\n\n\t// Commit the transaction.\n\tres := &pb.CommitResponse{}\n\terr := Call(c, \"datastore_v3\", \"Commit\", &t.transaction, res)\n\tif ae, ok := err.(*APIError); ok {\n\t\t/* TODO: restore this conditional\n\t\tif appengine.IsDevAppServer() {\n\t\t*/\n\t\t// The Python Dev AppServer raises an ApplicationError with error code 2 (which is\n\t\t// Error.CONCURRENT_TRANSACTION) and message \"Concurrency exception.\".\n\t\tif ae.Code == int32(pb.Error_BAD_REQUEST) && ae.Detail == \"ApplicationError: 2 Concurrency exception.\" {\n\t\t\treturn &t.transaction, ErrConcurrentTransaction\n\t\t}\n\t\tif ae.Code == int32(pb.Error_CONCURRENT_TRANSACTION) {\n\t\t\treturn &t.transaction, ErrConcurrentTransaction\n\t\t}\n\t}\n\treturn &t.transaction, err\n}\n"
  },
  {
    "path": "vendor/google.golang.org/appengine/internal/urlfetch/urlfetch_service.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// source: google.golang.org/appengine/internal/urlfetch/urlfetch_service.proto\n\npackage urlfetch\n\nimport proto \"github.com/golang/protobuf/proto\"\nimport fmt \"fmt\"\nimport math \"math\"\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar _ = proto.Marshal\nvar _ = fmt.Errorf\nvar _ = math.Inf\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package\n\ntype URLFetchServiceError_ErrorCode int32\n\nconst (\n\tURLFetchServiceError_OK                       URLFetchServiceError_ErrorCode = 0\n\tURLFetchServiceError_INVALID_URL              URLFetchServiceError_ErrorCode = 1\n\tURLFetchServiceError_FETCH_ERROR              URLFetchServiceError_ErrorCode = 2\n\tURLFetchServiceError_UNSPECIFIED_ERROR        URLFetchServiceError_ErrorCode = 3\n\tURLFetchServiceError_RESPONSE_TOO_LARGE       URLFetchServiceError_ErrorCode = 4\n\tURLFetchServiceError_DEADLINE_EXCEEDED        URLFetchServiceError_ErrorCode = 5\n\tURLFetchServiceError_SSL_CERTIFICATE_ERROR    URLFetchServiceError_ErrorCode = 6\n\tURLFetchServiceError_DNS_ERROR                URLFetchServiceError_ErrorCode = 7\n\tURLFetchServiceError_CLOSED                   URLFetchServiceError_ErrorCode = 8\n\tURLFetchServiceError_INTERNAL_TRANSIENT_ERROR URLFetchServiceError_ErrorCode = 9\n\tURLFetchServiceError_TOO_MANY_REDIRECTS       URLFetchServiceError_ErrorCode = 10\n\tURLFetchServiceError_MALFORMED_REPLY          URLFetchServiceError_ErrorCode = 11\n\tURLFetchServiceError_CONNECTION_ERROR         URLFetchServiceError_ErrorCode = 12\n)\n\nvar URLFetchServiceError_ErrorCode_name = map[int32]string{\n\t0:  \"OK\",\n\t1:  \"INVALID_URL\",\n\t2:  \"FETCH_ERROR\",\n\t3:  \"UNSPECIFIED_ERROR\",\n\t4:  \"RESPONSE_TOO_LARGE\",\n\t5:  \"DEADLINE_EXCEEDED\",\n\t6:  \"SSL_CERTIFICATE_ERROR\",\n\t7:  \"DNS_ERROR\",\n\t8:  \"CLOSED\",\n\t9:  \"INTERNAL_TRANSIENT_ERROR\",\n\t10: \"TOO_MANY_REDIRECTS\",\n\t11: \"MALFORMED_REPLY\",\n\t12: \"CONNECTION_ERROR\",\n}\nvar URLFetchServiceError_ErrorCode_value = map[string]int32{\n\t\"OK\":                       0,\n\t\"INVALID_URL\":              1,\n\t\"FETCH_ERROR\":              2,\n\t\"UNSPECIFIED_ERROR\":        3,\n\t\"RESPONSE_TOO_LARGE\":       4,\n\t\"DEADLINE_EXCEEDED\":        5,\n\t\"SSL_CERTIFICATE_ERROR\":    6,\n\t\"DNS_ERROR\":                7,\n\t\"CLOSED\":                   8,\n\t\"INTERNAL_TRANSIENT_ERROR\": 9,\n\t\"TOO_MANY_REDIRECTS\":       10,\n\t\"MALFORMED_REPLY\":          11,\n\t\"CONNECTION_ERROR\":         12,\n}\n\nfunc (x URLFetchServiceError_ErrorCode) Enum() *URLFetchServiceError_ErrorCode {\n\tp := new(URLFetchServiceError_ErrorCode)\n\t*p = x\n\treturn p\n}\nfunc (x URLFetchServiceError_ErrorCode) String() string {\n\treturn proto.EnumName(URLFetchServiceError_ErrorCode_name, int32(x))\n}\nfunc (x *URLFetchServiceError_ErrorCode) UnmarshalJSON(data []byte) error {\n\tvalue, err := proto.UnmarshalJSONEnum(URLFetchServiceError_ErrorCode_value, data, \"URLFetchServiceError_ErrorCode\")\n\tif err != nil {\n\t\treturn err\n\t}\n\t*x = URLFetchServiceError_ErrorCode(value)\n\treturn nil\n}\nfunc (URLFetchServiceError_ErrorCode) EnumDescriptor() ([]byte, []int) {\n\treturn fileDescriptor_urlfetch_service_b245a7065f33bced, []int{0, 0}\n}\n\ntype URLFetchRequest_RequestMethod int32\n\nconst (\n\tURLFetchRequest_GET    URLFetchRequest_RequestMethod = 1\n\tURLFetchRequest_POST   URLFetchRequest_RequestMethod = 2\n\tURLFetchRequest_HEAD   URLFetchRequest_RequestMethod = 3\n\tURLFetchRequest_PUT    URLFetchRequest_RequestMethod = 4\n\tURLFetchRequest_DELETE URLFetchRequest_RequestMethod = 5\n\tURLFetchRequest_PATCH  URLFetchRequest_RequestMethod = 6\n)\n\nvar URLFetchRequest_RequestMethod_name = map[int32]string{\n\t1: \"GET\",\n\t2: \"POST\",\n\t3: \"HEAD\",\n\t4: \"PUT\",\n\t5: \"DELETE\",\n\t6: \"PATCH\",\n}\nvar URLFetchRequest_RequestMethod_value = map[string]int32{\n\t\"GET\":    1,\n\t\"POST\":   2,\n\t\"HEAD\":   3,\n\t\"PUT\":    4,\n\t\"DELETE\": 5,\n\t\"PATCH\":  6,\n}\n\nfunc (x URLFetchRequest_RequestMethod) Enum() *URLFetchRequest_RequestMethod {\n\tp := new(URLFetchRequest_RequestMethod)\n\t*p = x\n\treturn p\n}\nfunc (x URLFetchRequest_RequestMethod) String() string {\n\treturn proto.EnumName(URLFetchRequest_RequestMethod_name, int32(x))\n}\nfunc (x *URLFetchRequest_RequestMethod) UnmarshalJSON(data []byte) error {\n\tvalue, err := proto.UnmarshalJSONEnum(URLFetchRequest_RequestMethod_value, data, \"URLFetchRequest_RequestMethod\")\n\tif err != nil {\n\t\treturn err\n\t}\n\t*x = URLFetchRequest_RequestMethod(value)\n\treturn nil\n}\nfunc (URLFetchRequest_RequestMethod) EnumDescriptor() ([]byte, []int) {\n\treturn fileDescriptor_urlfetch_service_b245a7065f33bced, []int{1, 0}\n}\n\ntype URLFetchServiceError struct {\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *URLFetchServiceError) Reset()         { *m = URLFetchServiceError{} }\nfunc (m *URLFetchServiceError) String() string { return proto.CompactTextString(m) }\nfunc (*URLFetchServiceError) ProtoMessage()    {}\nfunc (*URLFetchServiceError) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_urlfetch_service_b245a7065f33bced, []int{0}\n}\nfunc (m *URLFetchServiceError) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_URLFetchServiceError.Unmarshal(m, b)\n}\nfunc (m *URLFetchServiceError) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_URLFetchServiceError.Marshal(b, m, deterministic)\n}\nfunc (dst *URLFetchServiceError) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_URLFetchServiceError.Merge(dst, src)\n}\nfunc (m *URLFetchServiceError) XXX_Size() int {\n\treturn xxx_messageInfo_URLFetchServiceError.Size(m)\n}\nfunc (m *URLFetchServiceError) XXX_DiscardUnknown() {\n\txxx_messageInfo_URLFetchServiceError.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_URLFetchServiceError proto.InternalMessageInfo\n\ntype URLFetchRequest struct {\n\tMethod                        *URLFetchRequest_RequestMethod `protobuf:\"varint,1,req,name=Method,enum=appengine.URLFetchRequest_RequestMethod\" json:\"Method,omitempty\"`\n\tUrl                           *string                        `protobuf:\"bytes,2,req,name=Url\" json:\"Url,omitempty\"`\n\tHeader                        []*URLFetchRequest_Header      `protobuf:\"group,3,rep,name=Header,json=header\" json:\"header,omitempty\"`\n\tPayload                       []byte                         `protobuf:\"bytes,6,opt,name=Payload\" json:\"Payload,omitempty\"`\n\tFollowRedirects               *bool                          `protobuf:\"varint,7,opt,name=FollowRedirects,def=1\" json:\"FollowRedirects,omitempty\"`\n\tDeadline                      *float64                       `protobuf:\"fixed64,8,opt,name=Deadline\" json:\"Deadline,omitempty\"`\n\tMustValidateServerCertificate *bool                          `protobuf:\"varint,9,opt,name=MustValidateServerCertificate,def=1\" json:\"MustValidateServerCertificate,omitempty\"`\n\tXXX_NoUnkeyedLiteral          struct{}                       `json:\"-\"`\n\tXXX_unrecognized              []byte                         `json:\"-\"`\n\tXXX_sizecache                 int32                          `json:\"-\"`\n}\n\nfunc (m *URLFetchRequest) Reset()         { *m = URLFetchRequest{} }\nfunc (m *URLFetchRequest) String() string { return proto.CompactTextString(m) }\nfunc (*URLFetchRequest) ProtoMessage()    {}\nfunc (*URLFetchRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_urlfetch_service_b245a7065f33bced, []int{1}\n}\nfunc (m *URLFetchRequest) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_URLFetchRequest.Unmarshal(m, b)\n}\nfunc (m *URLFetchRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_URLFetchRequest.Marshal(b, m, deterministic)\n}\nfunc (dst *URLFetchRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_URLFetchRequest.Merge(dst, src)\n}\nfunc (m *URLFetchRequest) XXX_Size() int {\n\treturn xxx_messageInfo_URLFetchRequest.Size(m)\n}\nfunc (m *URLFetchRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_URLFetchRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_URLFetchRequest proto.InternalMessageInfo\n\nconst Default_URLFetchRequest_FollowRedirects bool = true\nconst Default_URLFetchRequest_MustValidateServerCertificate bool = true\n\nfunc (m *URLFetchRequest) GetMethod() URLFetchRequest_RequestMethod {\n\tif m != nil && m.Method != nil {\n\t\treturn *m.Method\n\t}\n\treturn URLFetchRequest_GET\n}\n\nfunc (m *URLFetchRequest) GetUrl() string {\n\tif m != nil && m.Url != nil {\n\t\treturn *m.Url\n\t}\n\treturn \"\"\n}\n\nfunc (m *URLFetchRequest) GetHeader() []*URLFetchRequest_Header {\n\tif m != nil {\n\t\treturn m.Header\n\t}\n\treturn nil\n}\n\nfunc (m *URLFetchRequest) GetPayload() []byte {\n\tif m != nil {\n\t\treturn m.Payload\n\t}\n\treturn nil\n}\n\nfunc (m *URLFetchRequest) GetFollowRedirects() bool {\n\tif m != nil && m.FollowRedirects != nil {\n\t\treturn *m.FollowRedirects\n\t}\n\treturn Default_URLFetchRequest_FollowRedirects\n}\n\nfunc (m *URLFetchRequest) GetDeadline() float64 {\n\tif m != nil && m.Deadline != nil {\n\t\treturn *m.Deadline\n\t}\n\treturn 0\n}\n\nfunc (m *URLFetchRequest) GetMustValidateServerCertificate() bool {\n\tif m != nil && m.MustValidateServerCertificate != nil {\n\t\treturn *m.MustValidateServerCertificate\n\t}\n\treturn Default_URLFetchRequest_MustValidateServerCertificate\n}\n\ntype URLFetchRequest_Header struct {\n\tKey                  *string  `protobuf:\"bytes,4,req,name=Key\" json:\"Key,omitempty\"`\n\tValue                *string  `protobuf:\"bytes,5,req,name=Value\" json:\"Value,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *URLFetchRequest_Header) Reset()         { *m = URLFetchRequest_Header{} }\nfunc (m *URLFetchRequest_Header) String() string { return proto.CompactTextString(m) }\nfunc (*URLFetchRequest_Header) ProtoMessage()    {}\nfunc (*URLFetchRequest_Header) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_urlfetch_service_b245a7065f33bced, []int{1, 0}\n}\nfunc (m *URLFetchRequest_Header) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_URLFetchRequest_Header.Unmarshal(m, b)\n}\nfunc (m *URLFetchRequest_Header) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_URLFetchRequest_Header.Marshal(b, m, deterministic)\n}\nfunc (dst *URLFetchRequest_Header) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_URLFetchRequest_Header.Merge(dst, src)\n}\nfunc (m *URLFetchRequest_Header) XXX_Size() int {\n\treturn xxx_messageInfo_URLFetchRequest_Header.Size(m)\n}\nfunc (m *URLFetchRequest_Header) XXX_DiscardUnknown() {\n\txxx_messageInfo_URLFetchRequest_Header.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_URLFetchRequest_Header proto.InternalMessageInfo\n\nfunc (m *URLFetchRequest_Header) GetKey() string {\n\tif m != nil && m.Key != nil {\n\t\treturn *m.Key\n\t}\n\treturn \"\"\n}\n\nfunc (m *URLFetchRequest_Header) GetValue() string {\n\tif m != nil && m.Value != nil {\n\t\treturn *m.Value\n\t}\n\treturn \"\"\n}\n\ntype URLFetchResponse struct {\n\tContent               []byte                     `protobuf:\"bytes,1,opt,name=Content\" json:\"Content,omitempty\"`\n\tStatusCode            *int32                     `protobuf:\"varint,2,req,name=StatusCode\" json:\"StatusCode,omitempty\"`\n\tHeader                []*URLFetchResponse_Header `protobuf:\"group,3,rep,name=Header,json=header\" json:\"header,omitempty\"`\n\tContentWasTruncated   *bool                      `protobuf:\"varint,6,opt,name=ContentWasTruncated,def=0\" json:\"ContentWasTruncated,omitempty\"`\n\tExternalBytesSent     *int64                     `protobuf:\"varint,7,opt,name=ExternalBytesSent\" json:\"ExternalBytesSent,omitempty\"`\n\tExternalBytesReceived *int64                     `protobuf:\"varint,8,opt,name=ExternalBytesReceived\" json:\"ExternalBytesReceived,omitempty\"`\n\tFinalUrl              *string                    `protobuf:\"bytes,9,opt,name=FinalUrl\" json:\"FinalUrl,omitempty\"`\n\tApiCpuMilliseconds    *int64                     `protobuf:\"varint,10,opt,name=ApiCpuMilliseconds,def=0\" json:\"ApiCpuMilliseconds,omitempty\"`\n\tApiBytesSent          *int64                     `protobuf:\"varint,11,opt,name=ApiBytesSent,def=0\" json:\"ApiBytesSent,omitempty\"`\n\tApiBytesReceived      *int64                     `protobuf:\"varint,12,opt,name=ApiBytesReceived,def=0\" json:\"ApiBytesReceived,omitempty\"`\n\tXXX_NoUnkeyedLiteral  struct{}                   `json:\"-\"`\n\tXXX_unrecognized      []byte                     `json:\"-\"`\n\tXXX_sizecache         int32                      `json:\"-\"`\n}\n\nfunc (m *URLFetchResponse) Reset()         { *m = URLFetchResponse{} }\nfunc (m *URLFetchResponse) String() string { return proto.CompactTextString(m) }\nfunc (*URLFetchResponse) ProtoMessage()    {}\nfunc (*URLFetchResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_urlfetch_service_b245a7065f33bced, []int{2}\n}\nfunc (m *URLFetchResponse) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_URLFetchResponse.Unmarshal(m, b)\n}\nfunc (m *URLFetchResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_URLFetchResponse.Marshal(b, m, deterministic)\n}\nfunc (dst *URLFetchResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_URLFetchResponse.Merge(dst, src)\n}\nfunc (m *URLFetchResponse) XXX_Size() int {\n\treturn xxx_messageInfo_URLFetchResponse.Size(m)\n}\nfunc (m *URLFetchResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_URLFetchResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_URLFetchResponse proto.InternalMessageInfo\n\nconst Default_URLFetchResponse_ContentWasTruncated bool = false\nconst Default_URLFetchResponse_ApiCpuMilliseconds int64 = 0\nconst Default_URLFetchResponse_ApiBytesSent int64 = 0\nconst Default_URLFetchResponse_ApiBytesReceived int64 = 0\n\nfunc (m *URLFetchResponse) GetContent() []byte {\n\tif m != nil {\n\t\treturn m.Content\n\t}\n\treturn nil\n}\n\nfunc (m *URLFetchResponse) GetStatusCode() int32 {\n\tif m != nil && m.StatusCode != nil {\n\t\treturn *m.StatusCode\n\t}\n\treturn 0\n}\n\nfunc (m *URLFetchResponse) GetHeader() []*URLFetchResponse_Header {\n\tif m != nil {\n\t\treturn m.Header\n\t}\n\treturn nil\n}\n\nfunc (m *URLFetchResponse) GetContentWasTruncated() bool {\n\tif m != nil && m.ContentWasTruncated != nil {\n\t\treturn *m.ContentWasTruncated\n\t}\n\treturn Default_URLFetchResponse_ContentWasTruncated\n}\n\nfunc (m *URLFetchResponse) GetExternalBytesSent() int64 {\n\tif m != nil && m.ExternalBytesSent != nil {\n\t\treturn *m.ExternalBytesSent\n\t}\n\treturn 0\n}\n\nfunc (m *URLFetchResponse) GetExternalBytesReceived() int64 {\n\tif m != nil && m.ExternalBytesReceived != nil {\n\t\treturn *m.ExternalBytesReceived\n\t}\n\treturn 0\n}\n\nfunc (m *URLFetchResponse) GetFinalUrl() string {\n\tif m != nil && m.FinalUrl != nil {\n\t\treturn *m.FinalUrl\n\t}\n\treturn \"\"\n}\n\nfunc (m *URLFetchResponse) GetApiCpuMilliseconds() int64 {\n\tif m != nil && m.ApiCpuMilliseconds != nil {\n\t\treturn *m.ApiCpuMilliseconds\n\t}\n\treturn Default_URLFetchResponse_ApiCpuMilliseconds\n}\n\nfunc (m *URLFetchResponse) GetApiBytesSent() int64 {\n\tif m != nil && m.ApiBytesSent != nil {\n\t\treturn *m.ApiBytesSent\n\t}\n\treturn Default_URLFetchResponse_ApiBytesSent\n}\n\nfunc (m *URLFetchResponse) GetApiBytesReceived() int64 {\n\tif m != nil && m.ApiBytesReceived != nil {\n\t\treturn *m.ApiBytesReceived\n\t}\n\treturn Default_URLFetchResponse_ApiBytesReceived\n}\n\ntype URLFetchResponse_Header struct {\n\tKey                  *string  `protobuf:\"bytes,4,req,name=Key\" json:\"Key,omitempty\"`\n\tValue                *string  `protobuf:\"bytes,5,req,name=Value\" json:\"Value,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *URLFetchResponse_Header) Reset()         { *m = URLFetchResponse_Header{} }\nfunc (m *URLFetchResponse_Header) String() string { return proto.CompactTextString(m) }\nfunc (*URLFetchResponse_Header) ProtoMessage()    {}\nfunc (*URLFetchResponse_Header) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_urlfetch_service_b245a7065f33bced, []int{2, 0}\n}\nfunc (m *URLFetchResponse_Header) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_URLFetchResponse_Header.Unmarshal(m, b)\n}\nfunc (m *URLFetchResponse_Header) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_URLFetchResponse_Header.Marshal(b, m, deterministic)\n}\nfunc (dst *URLFetchResponse_Header) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_URLFetchResponse_Header.Merge(dst, src)\n}\nfunc (m *URLFetchResponse_Header) XXX_Size() int {\n\treturn xxx_messageInfo_URLFetchResponse_Header.Size(m)\n}\nfunc (m *URLFetchResponse_Header) XXX_DiscardUnknown() {\n\txxx_messageInfo_URLFetchResponse_Header.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_URLFetchResponse_Header proto.InternalMessageInfo\n\nfunc (m *URLFetchResponse_Header) GetKey() string {\n\tif m != nil && m.Key != nil {\n\t\treturn *m.Key\n\t}\n\treturn \"\"\n}\n\nfunc (m *URLFetchResponse_Header) GetValue() string {\n\tif m != nil && m.Value != nil {\n\t\treturn *m.Value\n\t}\n\treturn \"\"\n}\n\nfunc init() {\n\tproto.RegisterType((*URLFetchServiceError)(nil), \"appengine.URLFetchServiceError\")\n\tproto.RegisterType((*URLFetchRequest)(nil), \"appengine.URLFetchRequest\")\n\tproto.RegisterType((*URLFetchRequest_Header)(nil), \"appengine.URLFetchRequest.Header\")\n\tproto.RegisterType((*URLFetchResponse)(nil), \"appengine.URLFetchResponse\")\n\tproto.RegisterType((*URLFetchResponse_Header)(nil), \"appengine.URLFetchResponse.Header\")\n}\n\nfunc init() {\n\tproto.RegisterFile(\"google.golang.org/appengine/internal/urlfetch/urlfetch_service.proto\", fileDescriptor_urlfetch_service_b245a7065f33bced)\n}\n\nvar fileDescriptor_urlfetch_service_b245a7065f33bced = []byte{\n\t// 770 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x54, 0xdd, 0x6e, 0xe3, 0x54,\n\t0x10, 0xc6, 0x76, 0x7e, 0xa7, 0x5d, 0x7a, 0x76, 0xb6, 0x45, 0x66, 0xb5, 0xa0, 0x10, 0x09, 0x29,\n\t0x17, 0x90, 0x2e, 0x2b, 0x24, 0x44, 0xaf, 0x70, 0xed, 0x93, 0xad, 0xa9, 0x63, 0x47, 0xc7, 0x4e,\n\t0x61, 0xb9, 0xb1, 0xac, 0x78, 0x9a, 0x5a, 0xb2, 0xec, 0x60, 0x9f, 0x2c, 0xf4, 0x35, 0x78, 0x0d,\n\t0xde, 0x87, 0xa7, 0xe1, 0x02, 0x9d, 0xc4, 0xc9, 0x6e, 0xbb, 0xd1, 0x4a, 0x5c, 0x65, 0xe6, 0x9b,\n\t0xef, 0xcc, 0x99, 0x7c, 0xdf, 0xf8, 0x80, 0xb3, 0x2c, 0xcb, 0x65, 0x4e, 0xe3, 0x65, 0x99, 0x27,\n\t0xc5, 0x72, 0x5c, 0x56, 0xcb, 0xf3, 0x64, 0xb5, 0xa2, 0x62, 0x99, 0x15, 0x74, 0x9e, 0x15, 0x92,\n\t0xaa, 0x22, 0xc9, 0xcf, 0xd7, 0x55, 0x7e, 0x4b, 0x72, 0x71, 0xb7, 0x0f, 0xe2, 0x9a, 0xaa, 0xb7,\n\t0xd9, 0x82, 0xc6, 0xab, 0xaa, 0x94, 0x25, 0xf6, 0xf7, 0x67, 0x86, 0x7f, 0xeb, 0x70, 0x3a, 0x17,\n\t0xde, 0x44, 0xb1, 0xc2, 0x2d, 0x89, 0x57, 0x55, 0x59, 0x0d, 0xff, 0xd2, 0xa1, 0xbf, 0x89, 0xec,\n\t0x32, 0x25, 0xec, 0x80, 0x1e, 0x5c, 0xb3, 0x4f, 0xf0, 0x04, 0x8e, 0x5c, 0xff, 0xc6, 0xf2, 0x5c,\n\t0x27, 0x9e, 0x0b, 0x8f, 0x69, 0x0a, 0x98, 0xf0, 0xc8, 0xbe, 0x8a, 0xb9, 0x10, 0x81, 0x60, 0x3a,\n\t0x9e, 0xc1, 0xd3, 0xb9, 0x1f, 0xce, 0xb8, 0xed, 0x4e, 0x5c, 0xee, 0x34, 0xb0, 0x81, 0x9f, 0x01,\n\t0x0a, 0x1e, 0xce, 0x02, 0x3f, 0xe4, 0x71, 0x14, 0x04, 0xb1, 0x67, 0x89, 0xd7, 0x9c, 0xb5, 0x14,\n\t0xdd, 0xe1, 0x96, 0xe3, 0xb9, 0x3e, 0x8f, 0xf9, 0xaf, 0x36, 0xe7, 0x0e, 0x77, 0x58, 0x1b, 0x3f,\n\t0x87, 0xb3, 0x30, 0xf4, 0x62, 0x9b, 0x8b, 0xc8, 0x9d, 0xb8, 0xb6, 0x15, 0xf1, 0xa6, 0x53, 0x07,\n\t0x9f, 0x40, 0xdf, 0xf1, 0xc3, 0x26, 0xed, 0x22, 0x40, 0xc7, 0xf6, 0x82, 0x90, 0x3b, 0xac, 0x87,\n\t0x2f, 0xc0, 0x74, 0xfd, 0x88, 0x0b, 0xdf, 0xf2, 0xe2, 0x48, 0x58, 0x7e, 0xe8, 0x72, 0x3f, 0x6a,\n\t0x98, 0x7d, 0x35, 0x82, 0xba, 0x79, 0x6a, 0xf9, 0x6f, 0x62, 0xc1, 0x1d, 0x57, 0x70, 0x3b, 0x0a,\n\t0x19, 0xe0, 0x33, 0x38, 0x99, 0x5a, 0xde, 0x24, 0x10, 0x53, 0xee, 0xc4, 0x82, 0xcf, 0xbc, 0x37,\n\t0xec, 0x08, 0x4f, 0x81, 0xd9, 0x81, 0xef, 0x73, 0x3b, 0x72, 0x03, 0xbf, 0x69, 0x71, 0x3c, 0xfc,\n\t0xc7, 0x80, 0x93, 0x9d, 0x5a, 0x82, 0x7e, 0x5f, 0x53, 0x2d, 0xf1, 0x27, 0xe8, 0x4c, 0x49, 0xde,\n\t0x95, 0xa9, 0xa9, 0x0d, 0xf4, 0xd1, 0xa7, 0xaf, 0x46, 0xe3, 0xbd, 0xba, 0xe3, 0x47, 0xdc, 0x71,\n\t0xf3, 0xbb, 0xe5, 0x8b, 0xe6, 0x1c, 0x32, 0x30, 0xe6, 0x55, 0x6e, 0xea, 0x03, 0x7d, 0xd4, 0x17,\n\t0x2a, 0xc4, 0x1f, 0xa1, 0x73, 0x47, 0x49, 0x4a, 0x95, 0x69, 0x0c, 0x8c, 0x11, 0xbc, 0xfa, 0xea,\n\t0x23, 0x3d, 0xaf, 0x36, 0x44, 0xd1, 0x1c, 0xc0, 0x17, 0xd0, 0x9d, 0x25, 0xf7, 0x79, 0x99, 0xa4,\n\t0x66, 0x67, 0xa0, 0x8d, 0x8e, 0x2f, 0xf5, 0x9e, 0x26, 0x76, 0x10, 0x8e, 0xe1, 0x64, 0x52, 0xe6,\n\t0x79, 0xf9, 0x87, 0xa0, 0x34, 0xab, 0x68, 0x21, 0x6b, 0xb3, 0x3b, 0xd0, 0x46, 0xbd, 0x8b, 0x96,\n\t0xac, 0xd6, 0x24, 0x1e, 0x17, 0xf1, 0x39, 0xf4, 0x1c, 0x4a, 0xd2, 0x3c, 0x2b, 0xc8, 0xec, 0x0d,\n\t0xb4, 0x91, 0x26, 0xf6, 0x39, 0xfe, 0x0c, 0x5f, 0x4c, 0xd7, 0xb5, 0xbc, 0x49, 0xf2, 0x2c, 0x4d,\n\t0x24, 0xa9, 0xed, 0xa1, 0xca, 0xa6, 0x4a, 0x66, 0xb7, 0xd9, 0x22, 0x91, 0x64, 0xf6, 0xdf, 0xeb,\n\t0xfc, 0x71, 0xea, 0xf3, 0x97, 0xd0, 0xd9, 0xfe, 0x0f, 0x25, 0xc6, 0x35, 0xdd, 0x9b, 0xad, 0xad,\n\t0x18, 0xd7, 0x74, 0x8f, 0xa7, 0xd0, 0xbe, 0x49, 0xf2, 0x35, 0x99, 0xed, 0x0d, 0xb6, 0x4d, 0x86,\n\t0x1e, 0x3c, 0x79, 0xa0, 0x26, 0x76, 0xc1, 0x78, 0xcd, 0x23, 0xa6, 0x61, 0x0f, 0x5a, 0xb3, 0x20,\n\t0x8c, 0x98, 0xae, 0xa2, 0x2b, 0x6e, 0x39, 0xcc, 0x50, 0xc5, 0xd9, 0x3c, 0x62, 0x2d, 0xb5, 0x2e,\n\t0x0e, 0xf7, 0x78, 0xc4, 0x59, 0x1b, 0xfb, 0xd0, 0x9e, 0x59, 0x91, 0x7d, 0xc5, 0x3a, 0xc3, 0x7f,\n\t0x0d, 0x60, 0xef, 0x84, 0xad, 0x57, 0x65, 0x51, 0x13, 0x9a, 0xd0, 0xb5, 0xcb, 0x42, 0x52, 0x21,\n\t0x4d, 0x4d, 0x49, 0x29, 0x76, 0x29, 0x7e, 0x09, 0x10, 0xca, 0x44, 0xae, 0x6b, 0xf5, 0x71, 0x6c,\n\t0x8c, 0x6b, 0x8b, 0xf7, 0x10, 0xbc, 0x78, 0xe4, 0xdf, 0xf0, 0xa0, 0x7f, 0xdb, 0x6b, 0x1e, 0x1b,\n\t0xf8, 0x03, 0x3c, 0x6b, 0xae, 0xf9, 0x25, 0xa9, 0xa3, 0x6a, 0x5d, 0x28, 0x81, 0xb6, 0x66, 0xf6,\n\t0x2e, 0xda, 0xb7, 0x49, 0x5e, 0x93, 0x38, 0xc4, 0xc0, 0x6f, 0xe0, 0x29, 0xff, 0x73, 0xfb, 0x02,\n\t0x5c, 0xde, 0x4b, 0xaa, 0x43, 0x35, 0xb8, 0x72, 0xd7, 0x10, 0x1f, 0x16, 0xf0, 0x7b, 0x38, 0x7b,\n\t0x00, 0x0a, 0x5a, 0x50, 0xf6, 0x96, 0xd2, 0x8d, 0xcd, 0x86, 0x38, 0x5c, 0x54, 0xfb, 0x30, 0xc9,\n\t0x8a, 0x24, 0x57, 0xfb, 0xaa, 0xec, 0xed, 0x8b, 0x7d, 0x8e, 0xdf, 0x01, 0x5a, 0xab, 0xcc, 0x5e,\n\t0xad, 0xa7, 0x59, 0x9e, 0x67, 0x35, 0x2d, 0xca, 0x22, 0xad, 0x4d, 0x50, 0xed, 0x2e, 0xb4, 0x97,\n\t0xe2, 0x40, 0x11, 0xbf, 0x86, 0x63, 0x6b, 0x95, 0xbd, 0x9b, 0xf6, 0x68, 0x47, 0x7e, 0x00, 0xe3,\n\t0xb7, 0xc0, 0x76, 0xf9, 0x7e, 0xcc, 0xe3, 0x1d, 0xf5, 0x83, 0xd2, 0xff, 0x5f, 0xa6, 0x4b, 0xf8,\n\t0xad, 0xb7, 0x7b, 0x2a, 0xff, 0x0b, 0x00, 0x00, 0xff, 0xff, 0x1d, 0x9f, 0x6d, 0x24, 0x63, 0x05,\n\t0x00, 0x00,\n}\n"
  },
  {
    "path": "vendor/google.golang.org/appengine/namespace.go",
    "content": "// Copyright 2012 Google Inc. All rights reserved.\n// Use of this source code is governed by the Apache 2.0\n// license that can be found in the LICENSE file.\n\npackage appengine\n\nimport (\n\t\"fmt\"\n\t\"regexp\"\n\n\t\"golang.org/x/net/context\"\n\n\t\"google.golang.org/appengine/internal\"\n)\n\n// Namespace returns a replacement context that operates within the given namespace.\nfunc Namespace(c context.Context, namespace string) (context.Context, error) {\n\tif !validNamespace.MatchString(namespace) {\n\t\treturn nil, fmt.Errorf(\"appengine: namespace %q does not match /%s/\", namespace, validNamespace)\n\t}\n\treturn internal.NamespacedContext(c, namespace), nil\n}\n\n// validNamespace matches valid namespace names.\nvar validNamespace = regexp.MustCompile(`^[0-9A-Za-z._-]{0,100}$`)\n"
  },
  {
    "path": "vendor/google.golang.org/appengine/timeout.go",
    "content": "// Copyright 2013 Google Inc. All rights reserved.\n// Use of this source code is governed by the Apache 2.0\n// license that can be found in the LICENSE file.\n\npackage appengine\n\nimport \"golang.org/x/net/context\"\n\n// IsTimeoutError reports whether err is a timeout error.\nfunc IsTimeoutError(err error) bool {\n\tif err == context.DeadlineExceeded {\n\t\treturn true\n\t}\n\tif t, ok := err.(interface {\n\t\tIsTimeout() bool\n\t}); ok {\n\t\treturn t.IsTimeout()\n\t}\n\treturn false\n}\n"
  },
  {
    "path": "vendor/google.golang.org/appengine/urlfetch/urlfetch.go",
    "content": "// Copyright 2011 Google Inc. All rights reserved.\n// Use of this source code is governed by the Apache 2.0\n// license that can be found in the LICENSE file.\n\n// Package urlfetch provides an http.RoundTripper implementation\n// for fetching URLs via App Engine's urlfetch service.\npackage urlfetch // import \"google.golang.org/appengine/urlfetch\"\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"net/http\"\n\t\"net/url\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/golang/protobuf/proto\"\n\t\"golang.org/x/net/context\"\n\n\t\"google.golang.org/appengine/internal\"\n\tpb \"google.golang.org/appengine/internal/urlfetch\"\n)\n\n// Transport is an implementation of http.RoundTripper for\n// App Engine. Users should generally create an http.Client using\n// this transport and use the Client rather than using this transport\n// directly.\ntype Transport struct {\n\tContext context.Context\n\n\t// Controls whether the application checks the validity of SSL certificates\n\t// over HTTPS connections. A value of false (the default) instructs the\n\t// application to send a request to the server only if the certificate is\n\t// valid and signed by a trusted certificate authority (CA), and also\n\t// includes a hostname that matches the certificate. A value of true\n\t// instructs the application to perform no certificate validation.\n\tAllowInvalidServerCertificate bool\n}\n\n// Verify statically that *Transport implements http.RoundTripper.\nvar _ http.RoundTripper = (*Transport)(nil)\n\n// Client returns an *http.Client using a default urlfetch Transport. This\n// client will have the default deadline of 5 seconds, and will check the\n// validity of SSL certificates.\n//\n// Any deadline of the provided context will be used for requests through this client;\n// if the client does not have a deadline then a 5 second default is used.\nfunc Client(ctx context.Context) *http.Client {\n\treturn &http.Client{\n\t\tTransport: &Transport{\n\t\t\tContext: ctx,\n\t\t},\n\t}\n}\n\ntype bodyReader struct {\n\tcontent   []byte\n\ttruncated bool\n\tclosed    bool\n}\n\n// ErrTruncatedBody is the error returned after the final Read() from a\n// response's Body if the body has been truncated by App Engine's proxy.\nvar ErrTruncatedBody = errors.New(\"urlfetch: truncated body\")\n\nfunc statusCodeToText(code int) string {\n\tif t := http.StatusText(code); t != \"\" {\n\t\treturn t\n\t}\n\treturn strconv.Itoa(code)\n}\n\nfunc (br *bodyReader) Read(p []byte) (n int, err error) {\n\tif br.closed {\n\t\tif br.truncated {\n\t\t\treturn 0, ErrTruncatedBody\n\t\t}\n\t\treturn 0, io.EOF\n\t}\n\tn = copy(p, br.content)\n\tif n > 0 {\n\t\tbr.content = br.content[n:]\n\t\treturn\n\t}\n\tif br.truncated {\n\t\tbr.closed = true\n\t\treturn 0, ErrTruncatedBody\n\t}\n\treturn 0, io.EOF\n}\n\nfunc (br *bodyReader) Close() error {\n\tbr.closed = true\n\tbr.content = nil\n\treturn nil\n}\n\n// A map of the URL Fetch-accepted methods that take a request body.\nvar methodAcceptsRequestBody = map[string]bool{\n\t\"POST\":  true,\n\t\"PUT\":   true,\n\t\"PATCH\": true,\n}\n\n// urlString returns a valid string given a URL. This function is necessary because\n// the String method of URL doesn't correctly handle URLs with non-empty Opaque values.\n// See http://code.google.com/p/go/issues/detail?id=4860.\nfunc urlString(u *url.URL) string {\n\tif u.Opaque == \"\" || strings.HasPrefix(u.Opaque, \"//\") {\n\t\treturn u.String()\n\t}\n\taux := *u\n\taux.Opaque = \"//\" + aux.Host + aux.Opaque\n\treturn aux.String()\n}\n\n// RoundTrip issues a single HTTP request and returns its response. Per the\n// http.RoundTripper interface, RoundTrip only returns an error if there\n// was an unsupported request or the URL Fetch proxy fails.\n// Note that HTTP response codes such as 5xx, 403, 404, etc are not\n// errors as far as the transport is concerned and will be returned\n// with err set to nil.\nfunc (t *Transport) RoundTrip(req *http.Request) (res *http.Response, err error) {\n\tmethNum, ok := pb.URLFetchRequest_RequestMethod_value[req.Method]\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"urlfetch: unsupported HTTP method %q\", req.Method)\n\t}\n\n\tmethod := pb.URLFetchRequest_RequestMethod(methNum)\n\n\tfreq := &pb.URLFetchRequest{\n\t\tMethod:                        &method,\n\t\tUrl:                           proto.String(urlString(req.URL)),\n\t\tFollowRedirects:               proto.Bool(false), // http.Client's responsibility\n\t\tMustValidateServerCertificate: proto.Bool(!t.AllowInvalidServerCertificate),\n\t}\n\tif deadline, ok := t.Context.Deadline(); ok {\n\t\tfreq.Deadline = proto.Float64(deadline.Sub(time.Now()).Seconds())\n\t}\n\n\tfor k, vals := range req.Header {\n\t\tfor _, val := range vals {\n\t\t\tfreq.Header = append(freq.Header, &pb.URLFetchRequest_Header{\n\t\t\t\tKey:   proto.String(k),\n\t\t\t\tValue: proto.String(val),\n\t\t\t})\n\t\t}\n\t}\n\tif methodAcceptsRequestBody[req.Method] && req.Body != nil {\n\t\t// Avoid a []byte copy if req.Body has a Bytes method.\n\t\tswitch b := req.Body.(type) {\n\t\tcase interface {\n\t\t\tBytes() []byte\n\t\t}:\n\t\t\tfreq.Payload = b.Bytes()\n\t\tdefault:\n\t\t\tfreq.Payload, err = ioutil.ReadAll(req.Body)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t}\n\t}\n\n\tfres := &pb.URLFetchResponse{}\n\tif err := internal.Call(t.Context, \"urlfetch\", \"Fetch\", freq, fres); err != nil {\n\t\treturn nil, err\n\t}\n\n\tres = &http.Response{}\n\tres.StatusCode = int(*fres.StatusCode)\n\tres.Status = fmt.Sprintf(\"%d %s\", res.StatusCode, statusCodeToText(res.StatusCode))\n\tres.Header = make(http.Header)\n\tres.Request = req\n\n\t// Faked:\n\tres.ProtoMajor = 1\n\tres.ProtoMinor = 1\n\tres.Proto = \"HTTP/1.1\"\n\tres.Close = true\n\n\tfor _, h := range fres.Header {\n\t\thkey := http.CanonicalHeaderKey(*h.Key)\n\t\thval := *h.Value\n\t\tif hkey == \"Content-Length\" {\n\t\t\t// Will get filled in below for all but HEAD requests.\n\t\t\tif req.Method == \"HEAD\" {\n\t\t\t\tres.ContentLength, _ = strconv.ParseInt(hval, 10, 64)\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\tres.Header.Add(hkey, hval)\n\t}\n\n\tif req.Method != \"HEAD\" {\n\t\tres.ContentLength = int64(len(fres.Content))\n\t}\n\n\ttruncated := fres.GetContentWasTruncated()\n\tres.Body = &bodyReader{content: fres.Content, truncated: truncated}\n\treturn\n}\n\nfunc init() {\n\tinternal.RegisterErrorCodeMap(\"urlfetch\", pb.URLFetchServiceError_ErrorCode_name)\n\tinternal.RegisterTimeoutErrorCode(\"urlfetch\", int32(pb.URLFetchServiceError_DEADLINE_EXCEEDED))\n}\n"
  },
  {
    "path": "vendor/google.golang.org/genproto/LICENSE",
    "content": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "vendor/google.golang.org/genproto/googleapis/api/annotations/annotations.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// source: google/api/annotations.proto\n\npackage annotations\n\nimport (\n\tfmt \"fmt\"\n\tmath \"math\"\n\n\tproto \"github.com/golang/protobuf/proto\"\n\tdescriptor \"github.com/golang/protobuf/protoc-gen-go/descriptor\"\n)\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar _ = proto.Marshal\nvar _ = fmt.Errorf\nvar _ = math.Inf\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package\n\nvar E_Http = &proto.ExtensionDesc{\n\tExtendedType:  (*descriptor.MethodOptions)(nil),\n\tExtensionType: (*HttpRule)(nil),\n\tField:         72295728,\n\tName:          \"google.api.http\",\n\tTag:           \"bytes,72295728,opt,name=http\",\n\tFilename:      \"google/api/annotations.proto\",\n}\n\nfunc init() {\n\tproto.RegisterExtension(E_Http)\n}\n\nfunc init() { proto.RegisterFile(\"google/api/annotations.proto\", fileDescriptor_c591c5aa9fb79aab) }\n\nvar fileDescriptor_c591c5aa9fb79aab = []byte{\n\t// 208 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x49, 0xcf, 0xcf, 0x4f,\n\t0xcf, 0x49, 0xd5, 0x4f, 0x2c, 0xc8, 0xd4, 0x4f, 0xcc, 0xcb, 0xcb, 0x2f, 0x49, 0x2c, 0xc9, 0xcc,\n\t0xcf, 0x2b, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x82, 0xc8, 0xea, 0x25, 0x16, 0x64,\n\t0x4a, 0x89, 0x22, 0xa9, 0xcc, 0x28, 0x29, 0x29, 0x80, 0x28, 0x91, 0x52, 0x80, 0x0a, 0x83, 0x79,\n\t0x49, 0xa5, 0x69, 0xfa, 0x29, 0xa9, 0xc5, 0xc9, 0x45, 0x99, 0x05, 0x25, 0xf9, 0x45, 0x10, 0x15,\n\t0x56, 0xde, 0x5c, 0x2c, 0x20, 0xf5, 0x42, 0x72, 0x7a, 0x50, 0xd3, 0x60, 0x4a, 0xf5, 0x7c, 0x53,\n\t0x4b, 0x32, 0xf2, 0x53, 0xfc, 0x0b, 0xc0, 0x56, 0x4a, 0x6c, 0x38, 0xb5, 0x47, 0x49, 0x81, 0x51,\n\t0x83, 0xdb, 0x48, 0x44, 0x0f, 0x61, 0xad, 0x9e, 0x47, 0x49, 0x49, 0x41, 0x50, 0x69, 0x4e, 0x6a,\n\t0x10, 0xd8, 0x10, 0xa7, 0x3c, 0x2e, 0xbe, 0xe4, 0xfc, 0x5c, 0x24, 0x05, 0x4e, 0x02, 0x8e, 0x08,\n\t0x67, 0x07, 0x80, 0x4c, 0x0e, 0x60, 0x8c, 0x72, 0x84, 0xca, 0xa7, 0xe7, 0xe7, 0x24, 0xe6, 0xa5,\n\t0xeb, 0xe5, 0x17, 0xa5, 0xeb, 0xa7, 0xa7, 0xe6, 0x81, 0xed, 0xd5, 0x87, 0x48, 0x25, 0x16, 0x64,\n\t0x16, 0xa3, 0x7b, 0xda, 0x1a, 0x89, 0xbd, 0x88, 0x89, 0xc5, 0xdd, 0x31, 0xc0, 0x33, 0x89, 0x0d,\n\t0xac, 0xc9, 0x18, 0x10, 0x00, 0x00, 0xff, 0xff, 0xe3, 0x29, 0x19, 0x62, 0x28, 0x01, 0x00, 0x00,\n}\n"
  },
  {
    "path": "vendor/google.golang.org/genproto/googleapis/api/annotations/client.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// source: google/api/client.proto\n\npackage annotations\n\nimport (\n\tfmt \"fmt\"\n\tmath \"math\"\n\n\tproto \"github.com/golang/protobuf/proto\"\n\tdescriptor \"github.com/golang/protobuf/protoc-gen-go/descriptor\"\n)\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar _ = proto.Marshal\nvar _ = fmt.Errorf\nvar _ = math.Inf\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package\n\nvar E_MethodSignature = &proto.ExtensionDesc{\n\tExtendedType:  (*descriptor.MethodOptions)(nil),\n\tExtensionType: ([]string)(nil),\n\tField:         1051,\n\tName:          \"google.api.method_signature\",\n\tTag:           \"bytes,1051,rep,name=method_signature\",\n\tFilename:      \"google/api/client.proto\",\n}\n\nvar E_DefaultHost = &proto.ExtensionDesc{\n\tExtendedType:  (*descriptor.ServiceOptions)(nil),\n\tExtensionType: (*string)(nil),\n\tField:         1049,\n\tName:          \"google.api.default_host\",\n\tTag:           \"bytes,1049,opt,name=default_host\",\n\tFilename:      \"google/api/client.proto\",\n}\n\nvar E_OauthScopes = &proto.ExtensionDesc{\n\tExtendedType:  (*descriptor.ServiceOptions)(nil),\n\tExtensionType: (*string)(nil),\n\tField:         1050,\n\tName:          \"google.api.oauth_scopes\",\n\tTag:           \"bytes,1050,opt,name=oauth_scopes\",\n\tFilename:      \"google/api/client.proto\",\n}\n\nfunc init() {\n\tproto.RegisterExtension(E_MethodSignature)\n\tproto.RegisterExtension(E_DefaultHost)\n\tproto.RegisterExtension(E_OauthScopes)\n}\n\nfunc init() { proto.RegisterFile(\"google/api/client.proto\", fileDescriptor_78f2c6f7c3a942c1) }\n\nvar fileDescriptor_78f2c6f7c3a942c1 = []byte{\n\t// 262 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x90, 0x3f, 0x4f, 0xc3, 0x30,\n\t0x10, 0xc5, 0x55, 0x40, 0xa8, 0x75, 0x11, 0xa0, 0x2c, 0x20, 0x06, 0xc8, 0xd8, 0xc9, 0x1e, 0xd8,\n\t0xca, 0xd4, 0x76, 0xe0, 0x8f, 0x84, 0x88, 0x9a, 0x8d, 0x25, 0x72, 0x9d, 0xab, 0x63, 0x29, 0xf5,\n\t0x59, 0xf6, 0x85, 0xef, 0x02, 0x6c, 0x7c, 0x52, 0x54, 0xc7, 0x11, 0x48, 0x0c, 0x6c, 0x27, 0xbd,\n\t0xf7, 0xfb, 0x9d, 0xf4, 0xd8, 0x85, 0x46, 0xd4, 0x2d, 0x08, 0xe9, 0x8c, 0x50, 0xad, 0x01, 0x4b,\n\t0xdc, 0x79, 0x24, 0xcc, 0x58, 0x1f, 0x70, 0xe9, 0xcc, 0x55, 0x9e, 0x4a, 0x31, 0xd9, 0x74, 0x5b,\n\t0x51, 0x43, 0x50, 0xde, 0x38, 0x42, 0xdf, 0xb7, 0xe7, 0x4f, 0xec, 0x7c, 0x07, 0xd4, 0x60, 0x5d,\n\t0x05, 0xa3, 0xad, 0xa4, 0xce, 0x43, 0x76, 0xcd, 0x93, 0x62, 0xc0, 0xf8, 0x73, 0xac, 0xbc, 0x38,\n\t0x32, 0x68, 0xc3, 0xe5, 0xe7, 0x38, 0x3f, 0x9c, 0x4d, 0xd6, 0x67, 0x3d, 0x58, 0x0e, 0xdc, 0x7c,\n\t0xc5, 0x4e, 0x6a, 0xd8, 0xca, 0xae, 0xa5, 0xaa, 0xc1, 0x40, 0xd9, 0xcd, 0x1f, 0x4f, 0x09, 0xfe,\n\t0xcd, 0x28, 0x18, 0x44, 0xef, 0xe3, 0x7c, 0x34, 0x9b, 0xac, 0xa7, 0x89, 0x7a, 0xc0, 0x40, 0x7b,\n\t0x09, 0xca, 0x8e, 0x9a, 0x2a, 0x28, 0x74, 0x10, 0xfe, 0x97, 0x7c, 0x24, 0x49, 0xa4, 0xca, 0x08,\n\t0x2d, 0x0d, 0x3b, 0x55, 0xb8, 0xe3, 0x3f, 0x4b, 0x2c, 0xa7, 0xab, 0xb8, 0x51, 0xb1, 0x97, 0x14,\n\t0xa3, 0xd7, 0x45, 0x8a, 0x34, 0xb6, 0xd2, 0x6a, 0x8e, 0x5e, 0x0b, 0x0d, 0x36, 0xbe, 0x10, 0x7d,\n\t0x24, 0x9d, 0x09, 0x71, 0x5c, 0x69, 0x2d, 0x92, 0x8c, 0xbf, 0xee, 0x7e, 0xdd, 0x5f, 0x07, 0x47,\n\t0xf7, 0x8b, 0xe2, 0x71, 0x73, 0x1c, 0xa1, 0xdb, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xc2,\n\t0xcf, 0x71, 0x90, 0x01, 0x00, 0x00,\n}\n"
  },
  {
    "path": "vendor/google.golang.org/genproto/googleapis/api/annotations/field_behavior.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// source: google/api/field_behavior.proto\n\npackage annotations\n\nimport (\n\tfmt \"fmt\"\n\tmath \"math\"\n\n\tproto \"github.com/golang/protobuf/proto\"\n\tdescriptor \"github.com/golang/protobuf/protoc-gen-go/descriptor\"\n)\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar _ = proto.Marshal\nvar _ = fmt.Errorf\nvar _ = math.Inf\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package\n\n// An indicator of the behavior of a given field (for example, that a field\n// is required in requests, or given as output but ignored as input).\n// This **does not** change the behavior in protocol buffers itself; it only\n// denotes the behavior and may affect how API tooling handles the field.\n//\n// Note: This enum **may** receive new values in the future.\ntype FieldBehavior int32\n\nconst (\n\t// Conventional default for enums. Do not use this.\n\tFieldBehavior_FIELD_BEHAVIOR_UNSPECIFIED FieldBehavior = 0\n\t// Specifically denotes a field as optional.\n\t// While all fields in protocol buffers are optional, this may be specified\n\t// for emphasis if appropriate.\n\tFieldBehavior_OPTIONAL FieldBehavior = 1\n\t// Denotes a field as required.\n\t// This indicates that the field **must** be provided as part of the request,\n\t// and failure to do so will cause an error (usually `INVALID_ARGUMENT`).\n\tFieldBehavior_REQUIRED FieldBehavior = 2\n\t// Denotes a field as output only.\n\t// This indicates that the field is provided in responses, but including the\n\t// field in a request does nothing (the server *must* ignore it and\n\t// *must not* throw an error as a result of the field's presence).\n\tFieldBehavior_OUTPUT_ONLY FieldBehavior = 3\n\t// Denotes a field as input only.\n\t// This indicates that the field is provided in requests, and the\n\t// corresponding field is not included in output.\n\tFieldBehavior_INPUT_ONLY FieldBehavior = 4\n\t// Denotes a field as immutable.\n\t// This indicates that the field may be set once in a request to create a\n\t// resource, but may not be changed thereafter.\n\tFieldBehavior_IMMUTABLE FieldBehavior = 5\n)\n\nvar FieldBehavior_name = map[int32]string{\n\t0: \"FIELD_BEHAVIOR_UNSPECIFIED\",\n\t1: \"OPTIONAL\",\n\t2: \"REQUIRED\",\n\t3: \"OUTPUT_ONLY\",\n\t4: \"INPUT_ONLY\",\n\t5: \"IMMUTABLE\",\n}\n\nvar FieldBehavior_value = map[string]int32{\n\t\"FIELD_BEHAVIOR_UNSPECIFIED\": 0,\n\t\"OPTIONAL\":                   1,\n\t\"REQUIRED\":                   2,\n\t\"OUTPUT_ONLY\":                3,\n\t\"INPUT_ONLY\":                 4,\n\t\"IMMUTABLE\":                  5,\n}\n\nfunc (x FieldBehavior) String() string {\n\treturn proto.EnumName(FieldBehavior_name, int32(x))\n}\n\nfunc (FieldBehavior) EnumDescriptor() ([]byte, []int) {\n\treturn fileDescriptor_4648f18fd5079967, []int{0}\n}\n\nvar E_FieldBehavior = &proto.ExtensionDesc{\n\tExtendedType:  (*descriptor.FieldOptions)(nil),\n\tExtensionType: ([]FieldBehavior)(nil),\n\tField:         1052,\n\tName:          \"google.api.field_behavior\",\n\tTag:           \"varint,1052,rep,name=field_behavior,enum=google.api.FieldBehavior\",\n\tFilename:      \"google/api/field_behavior.proto\",\n}\n\nfunc init() {\n\tproto.RegisterEnum(\"google.api.FieldBehavior\", FieldBehavior_name, FieldBehavior_value)\n\tproto.RegisterExtension(E_FieldBehavior)\n}\n\nfunc init() { proto.RegisterFile(\"google/api/field_behavior.proto\", fileDescriptor_4648f18fd5079967) }\n\nvar fileDescriptor_4648f18fd5079967 = []byte{\n\t// 303 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x54, 0x90, 0x4f, 0x4f, 0xb3, 0x30,\n\t0x1c, 0xc7, 0x9f, 0xfd, 0x79, 0xcc, 0xac, 0x0e, 0x49, 0x4f, 0xba, 0x44, 0xdd, 0xd1, 0x78, 0x28,\n\t0x89, 0xde, 0xf4, 0x04, 0xae, 0xd3, 0x26, 0x8c, 0x56, 0x04, 0x13, 0xbd, 0x60, 0xb7, 0xb1, 0xda,\n\t0x64, 0xd2, 0x06, 0xd0, 0x8b, 0x6f, 0xc5, 0x93, 0xaf, 0xd4, 0xd0, 0x31, 0x85, 0x5b, 0xbf, 0xf9,\n\t0x7d, 0xfa, 0xeb, 0xe7, 0x5b, 0x70, 0x2a, 0x94, 0x12, 0xeb, 0xd4, 0xe1, 0x5a, 0x3a, 0x2b, 0x99,\n\t0xae, 0x97, 0xc9, 0x3c, 0x7d, 0xe5, 0x1f, 0x52, 0xe5, 0x48, 0xe7, 0xaa, 0x54, 0x10, 0x6c, 0x00,\n\t0xc4, 0xb5, 0x1c, 0x8d, 0x6b, 0xd8, 0x4c, 0xe6, 0xef, 0x2b, 0x67, 0x99, 0x16, 0x8b, 0x5c, 0xea,\n\t0x72, 0x4b, 0x9f, 0x7f, 0x82, 0xe1, 0xb4, 0xda, 0xe2, 0xd5, 0x4b, 0xe0, 0x09, 0x18, 0x4d, 0x09,\n\t0xf6, 0x27, 0x89, 0x87, 0xef, 0xdc, 0x47, 0x42, 0xc3, 0x24, 0x0e, 0x1e, 0x18, 0xbe, 0x21, 0x53,\n\t0x82, 0x27, 0xf6, 0x3f, 0xb8, 0x0f, 0x06, 0x94, 0x45, 0x84, 0x06, 0xae, 0x6f, 0x77, 0xaa, 0x14,\n\t0xe2, 0xfb, 0x98, 0x84, 0x78, 0x62, 0x77, 0xe1, 0x01, 0xd8, 0xa3, 0x71, 0xc4, 0xe2, 0x28, 0xa1,\n\t0x81, 0xff, 0x64, 0xf7, 0xa0, 0x05, 0x00, 0x09, 0x7e, 0x73, 0x1f, 0x0e, 0xc1, 0x2e, 0x99, 0xcd,\n\t0xe2, 0xc8, 0xf5, 0x7c, 0x6c, 0xff, 0xbf, 0x7a, 0x01, 0x56, 0xbb, 0x02, 0x3c, 0x46, 0xb5, 0xfd,\n\t0xd6, 0x18, 0x19, 0x3b, 0xaa, 0x4b, 0xa9, 0xb2, 0xe2, 0xf0, 0x6b, 0x30, 0xee, 0x9d, 0x59, 0x17,\n\t0x47, 0xe8, 0xaf, 0x23, 0x6a, 0xe9, 0x87, 0xc3, 0x55, 0x33, 0x7a, 0x1a, 0x58, 0x0b, 0xf5, 0xd6,\n\t0xc0, 0x3d, 0xd8, 0xe2, 0x59, 0xf5, 0x0c, 0xeb, 0x3c, 0xbb, 0x35, 0x21, 0xd4, 0x9a, 0x67, 0x02,\n\t0xa9, 0x5c, 0x38, 0x22, 0xcd, 0x8c, 0x84, 0xb3, 0x19, 0x71, 0x2d, 0x0b, 0xf3, 0xe9, 0x3c, 0xcb,\n\t0x54, 0xc9, 0x8d, 0xcf, 0x75, 0xe3, 0xfc, 0xdd, 0xed, 0xdf, 0xba, 0x8c, 0xcc, 0x77, 0xcc, 0xa5,\n\t0xcb, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xfc, 0x94, 0x57, 0x94, 0xa8, 0x01, 0x00, 0x00,\n}\n"
  },
  {
    "path": "vendor/google.golang.org/genproto/googleapis/api/annotations/http.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// source: google/api/http.proto\n\npackage annotations\n\nimport (\n\tfmt \"fmt\"\n\tmath \"math\"\n\n\tproto \"github.com/golang/protobuf/proto\"\n)\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar _ = proto.Marshal\nvar _ = fmt.Errorf\nvar _ = math.Inf\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package\n\n// Defines the HTTP configuration for an API service. It contains a list of\n// [HttpRule][google.api.HttpRule], each specifying the mapping of an RPC method\n// to one or more HTTP REST API methods.\ntype Http struct {\n\t// A list of HTTP configuration rules that apply to individual API methods.\n\t//\n\t// **NOTE:** All service configuration rules follow \"last one wins\" order.\n\tRules []*HttpRule `protobuf:\"bytes,1,rep,name=rules,proto3\" json:\"rules,omitempty\"`\n\t// When set to true, URL path parameters will be fully URI-decoded except in\n\t// cases of single segment matches in reserved expansion, where \"%2F\" will be\n\t// left encoded.\n\t//\n\t// The default behavior is to not decode RFC 6570 reserved characters in multi\n\t// segment matches.\n\tFullyDecodeReservedExpansion bool     `protobuf:\"varint,2,opt,name=fully_decode_reserved_expansion,json=fullyDecodeReservedExpansion,proto3\" json:\"fully_decode_reserved_expansion,omitempty\"`\n\tXXX_NoUnkeyedLiteral         struct{} `json:\"-\"`\n\tXXX_unrecognized             []byte   `json:\"-\"`\n\tXXX_sizecache                int32    `json:\"-\"`\n}\n\nfunc (m *Http) Reset()         { *m = Http{} }\nfunc (m *Http) String() string { return proto.CompactTextString(m) }\nfunc (*Http) ProtoMessage()    {}\nfunc (*Http) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_ff9994be407cdcc9, []int{0}\n}\n\nfunc (m *Http) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_Http.Unmarshal(m, b)\n}\nfunc (m *Http) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_Http.Marshal(b, m, deterministic)\n}\nfunc (m *Http) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Http.Merge(m, src)\n}\nfunc (m *Http) XXX_Size() int {\n\treturn xxx_messageInfo_Http.Size(m)\n}\nfunc (m *Http) XXX_DiscardUnknown() {\n\txxx_messageInfo_Http.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Http proto.InternalMessageInfo\n\nfunc (m *Http) GetRules() []*HttpRule {\n\tif m != nil {\n\t\treturn m.Rules\n\t}\n\treturn nil\n}\n\nfunc (m *Http) GetFullyDecodeReservedExpansion() bool {\n\tif m != nil {\n\t\treturn m.FullyDecodeReservedExpansion\n\t}\n\treturn false\n}\n\n// # gRPC Transcoding\n//\n// gRPC Transcoding is a feature for mapping between a gRPC method and one or\n// more HTTP REST endpoints. It allows developers to build a single API service\n// that supports both gRPC APIs and REST APIs. Many systems, including [Google\n// APIs](https://github.com/googleapis/googleapis),\n// [Cloud Endpoints](https://cloud.google.com/endpoints), [gRPC\n// Gateway](https://github.com/grpc-ecosystem/grpc-gateway),\n// and [Envoy](https://github.com/envoyproxy/envoy) proxy support this feature\n// and use it for large scale production services.\n//\n// `HttpRule` defines the schema of the gRPC/REST mapping. The mapping specifies\n// how different portions of the gRPC request message are mapped to the URL\n// path, URL query parameters, and HTTP request body. It also controls how the\n// gRPC response message is mapped to the HTTP response body. `HttpRule` is\n// typically specified as an `google.api.http` annotation on the gRPC method.\n//\n// Each mapping specifies a URL path template and an HTTP method. The path\n// template may refer to one or more fields in the gRPC request message, as long\n// as each field is a non-repeated field with a primitive (non-message) type.\n// The path template controls how fields of the request message are mapped to\n// the URL path.\n//\n// Example:\n//\n//     service Messaging {\n//       rpc GetMessage(GetMessageRequest) returns (Message) {\n//         option (google.api.http) = {\n//             get: \"/v1/{name=messages/*}\"\n//         };\n//       }\n//     }\n//     message GetMessageRequest {\n//       string name = 1; // Mapped to URL path.\n//     }\n//     message Message {\n//       string text = 1; // The resource content.\n//     }\n//\n// This enables an HTTP REST to gRPC mapping as below:\n//\n// HTTP | gRPC\n// -----|-----\n// `GET /v1/messages/123456`  | `GetMessage(name: \"messages/123456\")`\n//\n// Any fields in the request message which are not bound by the path template\n// automatically become HTTP query parameters if there is no HTTP request body.\n// For example:\n//\n//     service Messaging {\n//       rpc GetMessage(GetMessageRequest) returns (Message) {\n//         option (google.api.http) = {\n//             get:\"/v1/messages/{message_id}\"\n//         };\n//       }\n//     }\n//     message GetMessageRequest {\n//       message SubMessage {\n//         string subfield = 1;\n//       }\n//       string message_id = 1; // Mapped to URL path.\n//       int64 revision = 2;    // Mapped to URL query parameter `revision`.\n//       SubMessage sub = 3;    // Mapped to URL query parameter `sub.subfield`.\n//     }\n//\n// This enables a HTTP JSON to RPC mapping as below:\n//\n// HTTP | gRPC\n// -----|-----\n// `GET /v1/messages/123456?revision=2&sub.subfield=foo` |\n// `GetMessage(message_id: \"123456\" revision: 2 sub: SubMessage(subfield:\n// \"foo\"))`\n//\n// Note that fields which are mapped to URL query parameters must have a\n// primitive type or a repeated primitive type or a non-repeated message type.\n// In the case of a repeated type, the parameter can be repeated in the URL\n// as `...?param=A&param=B`. In the case of a message type, each field of the\n// message is mapped to a separate parameter, such as\n// `...?foo.a=A&foo.b=B&foo.c=C`.\n//\n// For HTTP methods that allow a request body, the `body` field\n// specifies the mapping. Consider a REST update method on the\n// message resource collection:\n//\n//     service Messaging {\n//       rpc UpdateMessage(UpdateMessageRequest) returns (Message) {\n//         option (google.api.http) = {\n//           patch: \"/v1/messages/{message_id}\"\n//           body: \"message\"\n//         };\n//       }\n//     }\n//     message UpdateMessageRequest {\n//       string message_id = 1; // mapped to the URL\n//       Message message = 2;   // mapped to the body\n//     }\n//\n// The following HTTP JSON to RPC mapping is enabled, where the\n// representation of the JSON in the request body is determined by\n// protos JSON encoding:\n//\n// HTTP | gRPC\n// -----|-----\n// `PATCH /v1/messages/123456 { \"text\": \"Hi!\" }` | `UpdateMessage(message_id:\n// \"123456\" message { text: \"Hi!\" })`\n//\n// The special name `*` can be used in the body mapping to define that\n// every field not bound by the path template should be mapped to the\n// request body.  This enables the following alternative definition of\n// the update method:\n//\n//     service Messaging {\n//       rpc UpdateMessage(Message) returns (Message) {\n//         option (google.api.http) = {\n//           patch: \"/v1/messages/{message_id}\"\n//           body: \"*\"\n//         };\n//       }\n//     }\n//     message Message {\n//       string message_id = 1;\n//       string text = 2;\n//     }\n//\n//\n// The following HTTP JSON to RPC mapping is enabled:\n//\n// HTTP | gRPC\n// -----|-----\n// `PATCH /v1/messages/123456 { \"text\": \"Hi!\" }` | `UpdateMessage(message_id:\n// \"123456\" text: \"Hi!\")`\n//\n// Note that when using `*` in the body mapping, it is not possible to\n// have HTTP parameters, as all fields not bound by the path end in\n// the body. This makes this option more rarely used in practice when\n// defining REST APIs. The common usage of `*` is in custom methods\n// which don't use the URL at all for transferring data.\n//\n// It is possible to define multiple HTTP methods for one RPC by using\n// the `additional_bindings` option. Example:\n//\n//     service Messaging {\n//       rpc GetMessage(GetMessageRequest) returns (Message) {\n//         option (google.api.http) = {\n//           get: \"/v1/messages/{message_id}\"\n//           additional_bindings {\n//             get: \"/v1/users/{user_id}/messages/{message_id}\"\n//           }\n//         };\n//       }\n//     }\n//     message GetMessageRequest {\n//       string message_id = 1;\n//       string user_id = 2;\n//     }\n//\n// This enables the following two alternative HTTP JSON to RPC mappings:\n//\n// HTTP | gRPC\n// -----|-----\n// `GET /v1/messages/123456` | `GetMessage(message_id: \"123456\")`\n// `GET /v1/users/me/messages/123456` | `GetMessage(user_id: \"me\" message_id:\n// \"123456\")`\n//\n// ## Rules for HTTP mapping\n//\n// 1. Leaf request fields (recursive expansion nested messages in the request\n//    message) are classified into three categories:\n//    - Fields referred by the path template. They are passed via the URL path.\n//    - Fields referred by the [HttpRule.body][google.api.HttpRule.body]. They are passed via the HTTP\n//      request body.\n//    - All other fields are passed via the URL query parameters, and the\n//      parameter name is the field path in the request message. A repeated\n//      field can be represented as multiple query parameters under the same\n//      name.\n//  2. If [HttpRule.body][google.api.HttpRule.body] is \"*\", there is no URL query parameter, all fields\n//     are passed via URL path and HTTP request body.\n//  3. If [HttpRule.body][google.api.HttpRule.body] is omitted, there is no HTTP request body, all\n//     fields are passed via URL path and URL query parameters.\n//\n// ### Path template syntax\n//\n//     Template = \"/\" Segments [ Verb ] ;\n//     Segments = Segment { \"/\" Segment } ;\n//     Segment  = \"*\" | \"**\" | LITERAL | Variable ;\n//     Variable = \"{\" FieldPath [ \"=\" Segments ] \"}\" ;\n//     FieldPath = IDENT { \".\" IDENT } ;\n//     Verb     = \":\" LITERAL ;\n//\n// The syntax `*` matches a single URL path segment. The syntax `**` matches\n// zero or more URL path segments, which must be the last part of the URL path\n// except the `Verb`.\n//\n// The syntax `Variable` matches part of the URL path as specified by its\n// template. A variable template must not contain other variables. If a variable\n// matches a single path segment, its template may be omitted, e.g. `{var}`\n// is equivalent to `{var=*}`.\n//\n// The syntax `LITERAL` matches literal text in the URL path. If the `LITERAL`\n// contains any reserved character, such characters should be percent-encoded\n// before the matching.\n//\n// If a variable contains exactly one path segment, such as `\"{var}\"` or\n// `\"{var=*}\"`, when such a variable is expanded into a URL path on the client\n// side, all characters except `[-_.~0-9a-zA-Z]` are percent-encoded. The\n// server side does the reverse decoding. Such variables show up in the\n// [Discovery\n// Document](https://developers.google.com/discovery/v1/reference/apis) as\n// `{var}`.\n//\n// If a variable contains multiple path segments, such as `\"{var=foo/*}\"`\n// or `\"{var=**}\"`, when such a variable is expanded into a URL path on the\n// client side, all characters except `[-_.~/0-9a-zA-Z]` are percent-encoded.\n// The server side does the reverse decoding, except \"%2F\" and \"%2f\" are left\n// unchanged. Such variables show up in the\n// [Discovery\n// Document](https://developers.google.com/discovery/v1/reference/apis) as\n// `{+var}`.\n//\n// ## Using gRPC API Service Configuration\n//\n// gRPC API Service Configuration (service config) is a configuration language\n// for configuring a gRPC service to become a user-facing product. The\n// service config is simply the YAML representation of the `google.api.Service`\n// proto message.\n//\n// As an alternative to annotating your proto file, you can configure gRPC\n// transcoding in your service config YAML files. You do this by specifying a\n// `HttpRule` that maps the gRPC method to a REST endpoint, achieving the same\n// effect as the proto annotation. This can be particularly useful if you\n// have a proto that is reused in multiple services. Note that any transcoding\n// specified in the service config will override any matching transcoding\n// configuration in the proto.\n//\n// Example:\n//\n//     http:\n//       rules:\n//         # Selects a gRPC method and applies HttpRule to it.\n//         - selector: example.v1.Messaging.GetMessage\n//           get: /v1/messages/{message_id}/{sub.subfield}\n//\n// ## Special notes\n//\n// When gRPC Transcoding is used to map a gRPC to JSON REST endpoints, the\n// proto to JSON conversion must follow the [proto3\n// specification](https://developers.google.com/protocol-buffers/docs/proto3#json).\n//\n// While the single segment variable follows the semantics of\n// [RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.2 Simple String\n// Expansion, the multi segment variable **does not** follow RFC 6570 Section\n// 3.2.3 Reserved Expansion. The reason is that the Reserved Expansion\n// does not expand special characters like `?` and `#`, which would lead\n// to invalid URLs. As the result, gRPC Transcoding uses a custom encoding\n// for multi segment variables.\n//\n// The path variables **must not** refer to any repeated or mapped field,\n// because client libraries are not capable of handling such variable expansion.\n//\n// The path variables **must not** capture the leading \"/\" character. The reason\n// is that the most common use case \"{var}\" does not capture the leading \"/\"\n// character. For consistency, all path variables must share the same behavior.\n//\n// Repeated message fields must not be mapped to URL query parameters, because\n// no client library can support such complicated mapping.\n//\n// If an API needs to use a JSON array for request or response body, it can map\n// the request or response body to a repeated field. However, some gRPC\n// Transcoding implementations may not support this feature.\ntype HttpRule struct {\n\t// Selects a method to which this rule applies.\n\t//\n\t// Refer to [selector][google.api.DocumentationRule.selector] for syntax details.\n\tSelector string `protobuf:\"bytes,1,opt,name=selector,proto3\" json:\"selector,omitempty\"`\n\t// Determines the URL pattern is matched by this rules. This pattern can be\n\t// used with any of the {get|put|post|delete|patch} methods. A custom method\n\t// can be defined using the 'custom' field.\n\t//\n\t// Types that are valid to be assigned to Pattern:\n\t//\t*HttpRule_Get\n\t//\t*HttpRule_Put\n\t//\t*HttpRule_Post\n\t//\t*HttpRule_Delete\n\t//\t*HttpRule_Patch\n\t//\t*HttpRule_Custom\n\tPattern isHttpRule_Pattern `protobuf_oneof:\"pattern\"`\n\t// The name of the request field whose value is mapped to the HTTP request\n\t// body, or `*` for mapping all request fields not captured by the path\n\t// pattern to the HTTP body, or omitted for not having any HTTP request body.\n\t//\n\t// NOTE: the referred field must be present at the top-level of the request\n\t// message type.\n\tBody string `protobuf:\"bytes,7,opt,name=body,proto3\" json:\"body,omitempty\"`\n\t// Optional. The name of the response field whose value is mapped to the HTTP\n\t// response body. When omitted, the entire response message will be used\n\t// as the HTTP response body.\n\t//\n\t// NOTE: The referred field must be present at the top-level of the response\n\t// message type.\n\tResponseBody string `protobuf:\"bytes,12,opt,name=response_body,json=responseBody,proto3\" json:\"response_body,omitempty\"`\n\t// Additional HTTP bindings for the selector. Nested bindings must\n\t// not contain an `additional_bindings` field themselves (that is,\n\t// the nesting may only be one level deep).\n\tAdditionalBindings   []*HttpRule `protobuf:\"bytes,11,rep,name=additional_bindings,json=additionalBindings,proto3\" json:\"additional_bindings,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}    `json:\"-\"`\n\tXXX_unrecognized     []byte      `json:\"-\"`\n\tXXX_sizecache        int32       `json:\"-\"`\n}\n\nfunc (m *HttpRule) Reset()         { *m = HttpRule{} }\nfunc (m *HttpRule) String() string { return proto.CompactTextString(m) }\nfunc (*HttpRule) ProtoMessage()    {}\nfunc (*HttpRule) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_ff9994be407cdcc9, []int{1}\n}\n\nfunc (m *HttpRule) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_HttpRule.Unmarshal(m, b)\n}\nfunc (m *HttpRule) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_HttpRule.Marshal(b, m, deterministic)\n}\nfunc (m *HttpRule) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_HttpRule.Merge(m, src)\n}\nfunc (m *HttpRule) XXX_Size() int {\n\treturn xxx_messageInfo_HttpRule.Size(m)\n}\nfunc (m *HttpRule) XXX_DiscardUnknown() {\n\txxx_messageInfo_HttpRule.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_HttpRule proto.InternalMessageInfo\n\nfunc (m *HttpRule) GetSelector() string {\n\tif m != nil {\n\t\treturn m.Selector\n\t}\n\treturn \"\"\n}\n\ntype isHttpRule_Pattern interface {\n\tisHttpRule_Pattern()\n}\n\ntype HttpRule_Get struct {\n\tGet string `protobuf:\"bytes,2,opt,name=get,proto3,oneof\"`\n}\n\ntype HttpRule_Put struct {\n\tPut string `protobuf:\"bytes,3,opt,name=put,proto3,oneof\"`\n}\n\ntype HttpRule_Post struct {\n\tPost string `protobuf:\"bytes,4,opt,name=post,proto3,oneof\"`\n}\n\ntype HttpRule_Delete struct {\n\tDelete string `protobuf:\"bytes,5,opt,name=delete,proto3,oneof\"`\n}\n\ntype HttpRule_Patch struct {\n\tPatch string `protobuf:\"bytes,6,opt,name=patch,proto3,oneof\"`\n}\n\ntype HttpRule_Custom struct {\n\tCustom *CustomHttpPattern `protobuf:\"bytes,8,opt,name=custom,proto3,oneof\"`\n}\n\nfunc (*HttpRule_Get) isHttpRule_Pattern() {}\n\nfunc (*HttpRule_Put) isHttpRule_Pattern() {}\n\nfunc (*HttpRule_Post) isHttpRule_Pattern() {}\n\nfunc (*HttpRule_Delete) isHttpRule_Pattern() {}\n\nfunc (*HttpRule_Patch) isHttpRule_Pattern() {}\n\nfunc (*HttpRule_Custom) isHttpRule_Pattern() {}\n\nfunc (m *HttpRule) GetPattern() isHttpRule_Pattern {\n\tif m != nil {\n\t\treturn m.Pattern\n\t}\n\treturn nil\n}\n\nfunc (m *HttpRule) GetGet() string {\n\tif x, ok := m.GetPattern().(*HttpRule_Get); ok {\n\t\treturn x.Get\n\t}\n\treturn \"\"\n}\n\nfunc (m *HttpRule) GetPut() string {\n\tif x, ok := m.GetPattern().(*HttpRule_Put); ok {\n\t\treturn x.Put\n\t}\n\treturn \"\"\n}\n\nfunc (m *HttpRule) GetPost() string {\n\tif x, ok := m.GetPattern().(*HttpRule_Post); ok {\n\t\treturn x.Post\n\t}\n\treturn \"\"\n}\n\nfunc (m *HttpRule) GetDelete() string {\n\tif x, ok := m.GetPattern().(*HttpRule_Delete); ok {\n\t\treturn x.Delete\n\t}\n\treturn \"\"\n}\n\nfunc (m *HttpRule) GetPatch() string {\n\tif x, ok := m.GetPattern().(*HttpRule_Patch); ok {\n\t\treturn x.Patch\n\t}\n\treturn \"\"\n}\n\nfunc (m *HttpRule) GetCustom() *CustomHttpPattern {\n\tif x, ok := m.GetPattern().(*HttpRule_Custom); ok {\n\t\treturn x.Custom\n\t}\n\treturn nil\n}\n\nfunc (m *HttpRule) GetBody() string {\n\tif m != nil {\n\t\treturn m.Body\n\t}\n\treturn \"\"\n}\n\nfunc (m *HttpRule) GetResponseBody() string {\n\tif m != nil {\n\t\treturn m.ResponseBody\n\t}\n\treturn \"\"\n}\n\nfunc (m *HttpRule) GetAdditionalBindings() []*HttpRule {\n\tif m != nil {\n\t\treturn m.AdditionalBindings\n\t}\n\treturn nil\n}\n\n// XXX_OneofWrappers is for the internal use of the proto package.\nfunc (*HttpRule) XXX_OneofWrappers() []interface{} {\n\treturn []interface{}{\n\t\t(*HttpRule_Get)(nil),\n\t\t(*HttpRule_Put)(nil),\n\t\t(*HttpRule_Post)(nil),\n\t\t(*HttpRule_Delete)(nil),\n\t\t(*HttpRule_Patch)(nil),\n\t\t(*HttpRule_Custom)(nil),\n\t}\n}\n\n// A custom pattern is used for defining custom HTTP verb.\ntype CustomHttpPattern struct {\n\t// The name of this custom HTTP verb.\n\tKind string `protobuf:\"bytes,1,opt,name=kind,proto3\" json:\"kind,omitempty\"`\n\t// The path matched by this custom verb.\n\tPath                 string   `protobuf:\"bytes,2,opt,name=path,proto3\" json:\"path,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *CustomHttpPattern) Reset()         { *m = CustomHttpPattern{} }\nfunc (m *CustomHttpPattern) String() string { return proto.CompactTextString(m) }\nfunc (*CustomHttpPattern) ProtoMessage()    {}\nfunc (*CustomHttpPattern) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_ff9994be407cdcc9, []int{2}\n}\n\nfunc (m *CustomHttpPattern) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_CustomHttpPattern.Unmarshal(m, b)\n}\nfunc (m *CustomHttpPattern) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_CustomHttpPattern.Marshal(b, m, deterministic)\n}\nfunc (m *CustomHttpPattern) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_CustomHttpPattern.Merge(m, src)\n}\nfunc (m *CustomHttpPattern) XXX_Size() int {\n\treturn xxx_messageInfo_CustomHttpPattern.Size(m)\n}\nfunc (m *CustomHttpPattern) XXX_DiscardUnknown() {\n\txxx_messageInfo_CustomHttpPattern.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_CustomHttpPattern proto.InternalMessageInfo\n\nfunc (m *CustomHttpPattern) GetKind() string {\n\tif m != nil {\n\t\treturn m.Kind\n\t}\n\treturn \"\"\n}\n\nfunc (m *CustomHttpPattern) GetPath() string {\n\tif m != nil {\n\t\treturn m.Path\n\t}\n\treturn \"\"\n}\n\nfunc init() {\n\tproto.RegisterType((*Http)(nil), \"google.api.Http\")\n\tproto.RegisterType((*HttpRule)(nil), \"google.api.HttpRule\")\n\tproto.RegisterType((*CustomHttpPattern)(nil), \"google.api.CustomHttpPattern\")\n}\n\nfunc init() { proto.RegisterFile(\"google/api/http.proto\", fileDescriptor_ff9994be407cdcc9) }\n\nvar fileDescriptor_ff9994be407cdcc9 = []byte{\n\t// 419 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0xc1, 0x8e, 0xd3, 0x30,\n\t0x10, 0x86, 0x49, 0x9b, 0x76, 0xdb, 0xe9, 0x82, 0x84, 0x59, 0x90, 0x85, 0x40, 0x54, 0xe5, 0x52,\n\t0x71, 0x48, 0xa5, 0xe5, 0xc0, 0x61, 0x4f, 0x1b, 0xa8, 0x58, 0x6e, 0x55, 0x8e, 0x5c, 0x22, 0x37,\n\t0x1e, 0x52, 0x83, 0xd7, 0xb6, 0xe2, 0x09, 0xa2, 0xaf, 0xc3, 0x63, 0xf1, 0x24, 0x1c, 0x91, 0x9d,\n\t0x84, 0x56, 0x42, 0xe2, 0x36, 0xf3, 0xff, 0x9f, 0xa7, 0x7f, 0x27, 0x03, 0x4f, 0x6b, 0x6b, 0x6b,\n\t0x8d, 0x1b, 0xe1, 0xd4, 0xe6, 0x40, 0xe4, 0x32, 0xd7, 0x58, 0xb2, 0x0c, 0x3a, 0x39, 0x13, 0x4e,\n\t0xad, 0x8e, 0x90, 0xde, 0x11, 0x39, 0xf6, 0x06, 0x26, 0x4d, 0xab, 0xd1, 0xf3, 0x64, 0x39, 0x5e,\n\t0x2f, 0xae, 0xaf, 0xb2, 0x13, 0x93, 0x05, 0xa0, 0x68, 0x35, 0x16, 0x1d, 0xc2, 0xb6, 0xf0, 0xea,\n\t0x4b, 0xab, 0xf5, 0xb1, 0x94, 0x58, 0x59, 0x89, 0x65, 0x83, 0x1e, 0x9b, 0xef, 0x28, 0x4b, 0xfc,\n\t0xe1, 0x84, 0xf1, 0xca, 0x1a, 0x3e, 0x5a, 0x26, 0xeb, 0x59, 0xf1, 0x22, 0x62, 0x1f, 0x22, 0x55,\n\t0xf4, 0xd0, 0x76, 0x60, 0x56, 0xbf, 0x46, 0x30, 0x1b, 0x46, 0xb3, 0xe7, 0x30, 0xf3, 0xa8, 0xb1,\n\t0x22, 0xdb, 0xf0, 0x64, 0x99, 0xac, 0xe7, 0xc5, 0xdf, 0x9e, 0x31, 0x18, 0xd7, 0x48, 0x71, 0xe6,\n\t0xfc, 0xee, 0x41, 0x11, 0x9a, 0xa0, 0xb9, 0x96, 0xf8, 0x78, 0xd0, 0x5c, 0x4b, 0xec, 0x0a, 0x52,\n\t0x67, 0x3d, 0xf1, 0xb4, 0x17, 0x63, 0xc7, 0x38, 0x4c, 0x25, 0x6a, 0x24, 0xe4, 0x93, 0x5e, 0xef,\n\t0x7b, 0xf6, 0x0c, 0x26, 0x4e, 0x50, 0x75, 0xe0, 0xd3, 0xde, 0xe8, 0x5a, 0xf6, 0x0e, 0xa6, 0x55,\n\t0xeb, 0xc9, 0xde, 0xf3, 0xd9, 0x32, 0x59, 0x2f, 0xae, 0x5f, 0x9e, 0x2f, 0xe3, 0x7d, 0x74, 0x42,\n\t0xee, 0x9d, 0x20, 0xc2, 0xc6, 0x84, 0x81, 0x1d, 0xce, 0x18, 0xa4, 0x7b, 0x2b, 0x8f, 0xfc, 0x22,\n\t0xfe, 0x81, 0x58, 0xb3, 0xd7, 0xf0, 0xb0, 0x41, 0xef, 0xac, 0xf1, 0x58, 0x46, 0xf3, 0x32, 0x9a,\n\t0x97, 0x83, 0x98, 0x07, 0x68, 0x0b, 0x4f, 0x84, 0x94, 0x8a, 0x94, 0x35, 0x42, 0x97, 0x7b, 0x65,\n\t0xa4, 0x32, 0xb5, 0xe7, 0x8b, 0xff, 0x7c, 0x0b, 0x76, 0x7a, 0x90, 0xf7, 0x7c, 0x3e, 0x87, 0x0b,\n\t0xd7, 0x85, 0x5a, 0xdd, 0xc0, 0xe3, 0x7f, 0x92, 0x86, 0x7c, 0xdf, 0x94, 0x91, 0xfd, 0x82, 0x63,\n\t0x1d, 0x34, 0x27, 0xe8, 0xd0, 0x6d, 0xb7, 0x88, 0x75, 0xfe, 0x15, 0x1e, 0x55, 0xf6, 0xfe, 0xec,\n\t0x67, 0xf3, 0x79, 0x1c, 0x13, 0xae, 0x67, 0x97, 0x7c, 0xbe, 0xed, 0x8d, 0xda, 0x6a, 0x61, 0xea,\n\t0xcc, 0x36, 0xf5, 0xa6, 0x46, 0x13, 0x6f, 0x6b, 0xd3, 0x59, 0xc2, 0x29, 0x1f, 0xaf, 0x4e, 0x18,\n\t0x63, 0x49, 0x84, 0x98, 0xfe, 0xe6, 0xac, 0xfe, 0x9d, 0x24, 0x3f, 0x47, 0xe9, 0xc7, 0xdb, 0xdd,\n\t0xa7, 0xfd, 0x34, 0xbe, 0x7b, 0xfb, 0x27, 0x00, 0x00, 0xff, 0xff, 0xae, 0xde, 0xa1, 0xd0, 0xac,\n\t0x02, 0x00, 0x00,\n}\n"
  },
  {
    "path": "vendor/google.golang.org/genproto/googleapis/api/annotations/resource.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// source: google/api/resource.proto\n\npackage annotations\n\nimport (\n\tfmt \"fmt\"\n\tmath \"math\"\n\n\tproto \"github.com/golang/protobuf/proto\"\n\tdescriptor \"github.com/golang/protobuf/protoc-gen-go/descriptor\"\n)\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar _ = proto.Marshal\nvar _ = fmt.Errorf\nvar _ = math.Inf\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package\n\n// A description of the historical or future-looking state of the\n// resource pattern.\ntype ResourceDescriptor_History int32\n\nconst (\n\t// The \"unset\" value.\n\tResourceDescriptor_HISTORY_UNSPECIFIED ResourceDescriptor_History = 0\n\t// The resource originally had one pattern and launched as such, and\n\t// additional patterns were added later.\n\tResourceDescriptor_ORIGINALLY_SINGLE_PATTERN ResourceDescriptor_History = 1\n\t// The resource has one pattern, but the API owner expects to add more\n\t// later. (This is the inverse of ORIGINALLY_SINGLE_PATTERN, and prevents\n\t// that from being necessary once there are multiple patterns.)\n\tResourceDescriptor_FUTURE_MULTI_PATTERN ResourceDescriptor_History = 2\n)\n\nvar ResourceDescriptor_History_name = map[int32]string{\n\t0: \"HISTORY_UNSPECIFIED\",\n\t1: \"ORIGINALLY_SINGLE_PATTERN\",\n\t2: \"FUTURE_MULTI_PATTERN\",\n}\n\nvar ResourceDescriptor_History_value = map[string]int32{\n\t\"HISTORY_UNSPECIFIED\":       0,\n\t\"ORIGINALLY_SINGLE_PATTERN\": 1,\n\t\"FUTURE_MULTI_PATTERN\":      2,\n}\n\nfunc (x ResourceDescriptor_History) String() string {\n\treturn proto.EnumName(ResourceDescriptor_History_name, int32(x))\n}\n\nfunc (ResourceDescriptor_History) EnumDescriptor() ([]byte, []int) {\n\treturn fileDescriptor_465e9122405d1bb5, []int{0, 0}\n}\n\n// A simple descriptor of a resource type.\n//\n// ResourceDescriptor annotates a resource message (either by means of a\n// protobuf annotation or use in the service config), and associates the\n// resource's schema, the resource type, and the pattern of the resource name.\n//\n// Example:\n//\n//   message Topic {\n//     // Indicates this message defines a resource schema.\n//     // Declares the resource type in the format of {service}/{kind}.\n//     // For Kubernetes resources, the format is {api group}/{kind}.\n//     option (google.api.resource) = {\n//       type: \"pubsub.googleapis.com/Topic\"\n//       pattern: \"projects/{project}/topics/{topic}\"\n//     };\n//   }\n//\n// Sometimes, resources have multiple patterns, typically because they can\n// live under multiple parents.\n//\n// Example:\n//\n//   message LogEntry {\n//     option (google.api.resource) = {\n//       type: \"logging.googleapis.com/LogEntry\"\n//       pattern: \"projects/{project}/logs/{log}\"\n//       pattern: \"organizations/{organization}/logs/{log}\"\n//       pattern: \"folders/{folder}/logs/{log}\"\n//       pattern: \"billingAccounts/{billing_account}/logs/{log}\"\n//     };\n//   }\ntype ResourceDescriptor struct {\n\t// The resource type. It must be in the format of\n\t// {service_name}/{resource_type_kind}. The `resource_type_kind` must be\n\t// singular and must not include version numbers.\n\t//\n\t// Example: `storage.googleapis.com/Bucket`\n\t//\n\t// The value of the resource_type_kind must follow the regular expression\n\t// /[A-Za-z][a-zA-Z0-9]+/. It should start with an upper case character and\n\t// should use PascalCase (UpperCamelCase). The maximum number of\n\t// characters allowed for the `resource_type_kind` is 100.\n\tType string `protobuf:\"bytes,1,opt,name=type,proto3\" json:\"type,omitempty\"`\n\t// Optional. The valid resource name pattern(s) for this resource type.\n\t//\n\t// Examples:\n\t//   - \"projects/{project}/topics/{topic}\"\n\t//   - \"projects/{project}/knowledgeBases/{knowledge_base}\"\n\t//\n\t// The components in braces correspond to the IDs for each resource in the\n\t// hierarchy. It is expected that, if multiple patterns are provided,\n\t// the same component name (e.g. \"project\") refers to IDs of the same\n\t// type of resource.\n\tPattern []string `protobuf:\"bytes,2,rep,name=pattern,proto3\" json:\"pattern,omitempty\"`\n\t// Optional. The field on the resource that designates the resource name\n\t// field. If omitted, this is assumed to be \"name\".\n\tNameField string `protobuf:\"bytes,3,opt,name=name_field,json=nameField,proto3\" json:\"name_field,omitempty\"`\n\t// Optional. The historical or future-looking state of the resource pattern.\n\t//\n\t// Example:\n\t//   // The InspectTemplate message originally only supported resource\n\t//   // names with organization, and project was added later.\n\t//   message InspectTemplate {\n\t//     option (google.api.resource) = {\n\t//       type: \"dlp.googleapis.com/InspectTemplate\"\n\t//       pattern:\n\t//       \"organizations/{organization}/inspectTemplates/{inspect_template}\"\n\t//       pattern: \"projects/{project}/inspectTemplates/{inspect_template}\"\n\t//       history: ORIGINALLY_SINGLE_PATTERN\n\t//     };\n\t//   }\n\tHistory              ResourceDescriptor_History `protobuf:\"varint,4,opt,name=history,proto3,enum=google.api.ResourceDescriptor_History\" json:\"history,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}                   `json:\"-\"`\n\tXXX_unrecognized     []byte                     `json:\"-\"`\n\tXXX_sizecache        int32                      `json:\"-\"`\n}\n\nfunc (m *ResourceDescriptor) Reset()         { *m = ResourceDescriptor{} }\nfunc (m *ResourceDescriptor) String() string { return proto.CompactTextString(m) }\nfunc (*ResourceDescriptor) ProtoMessage()    {}\nfunc (*ResourceDescriptor) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_465e9122405d1bb5, []int{0}\n}\n\nfunc (m *ResourceDescriptor) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_ResourceDescriptor.Unmarshal(m, b)\n}\nfunc (m *ResourceDescriptor) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_ResourceDescriptor.Marshal(b, m, deterministic)\n}\nfunc (m *ResourceDescriptor) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_ResourceDescriptor.Merge(m, src)\n}\nfunc (m *ResourceDescriptor) XXX_Size() int {\n\treturn xxx_messageInfo_ResourceDescriptor.Size(m)\n}\nfunc (m *ResourceDescriptor) XXX_DiscardUnknown() {\n\txxx_messageInfo_ResourceDescriptor.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_ResourceDescriptor proto.InternalMessageInfo\n\nfunc (m *ResourceDescriptor) GetType() string {\n\tif m != nil {\n\t\treturn m.Type\n\t}\n\treturn \"\"\n}\n\nfunc (m *ResourceDescriptor) GetPattern() []string {\n\tif m != nil {\n\t\treturn m.Pattern\n\t}\n\treturn nil\n}\n\nfunc (m *ResourceDescriptor) GetNameField() string {\n\tif m != nil {\n\t\treturn m.NameField\n\t}\n\treturn \"\"\n}\n\nfunc (m *ResourceDescriptor) GetHistory() ResourceDescriptor_History {\n\tif m != nil {\n\t\treturn m.History\n\t}\n\treturn ResourceDescriptor_HISTORY_UNSPECIFIED\n}\n\n// Defines a proto annotation that describes a field that refers to a resource.\ntype ResourceReference struct {\n\t// The resource type that the annotated field references.\n\t//\n\t// Example:\n\t//\n\t//   message Subscription {\n\t//     string topic = 2 [(google.api.resource_reference) = {\n\t//       type = \"pubsub.googleapis.com/Topic\"\n\t//     }];\n\t//   }\n\tType string `protobuf:\"bytes,1,opt,name=type,proto3\" json:\"type,omitempty\"`\n\t// The resource type of a child collection that the annotated field\n\t// references. This is useful for `parent` fields where a resource has more\n\t// than one possible type of parent.\n\t//\n\t// Example:\n\t//\n\t//   message ListLogEntriesRequest {\n\t//     string parent = 1 [(google.api.resource_reference) = {\n\t//       child_type: \"logging.googleapis.com/LogEntry\"\n\t//     };\n\t//   }\n\tChildType            string   `protobuf:\"bytes,2,opt,name=child_type,json=childType,proto3\" json:\"child_type,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *ResourceReference) Reset()         { *m = ResourceReference{} }\nfunc (m *ResourceReference) String() string { return proto.CompactTextString(m) }\nfunc (*ResourceReference) ProtoMessage()    {}\nfunc (*ResourceReference) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_465e9122405d1bb5, []int{1}\n}\n\nfunc (m *ResourceReference) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_ResourceReference.Unmarshal(m, b)\n}\nfunc (m *ResourceReference) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_ResourceReference.Marshal(b, m, deterministic)\n}\nfunc (m *ResourceReference) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_ResourceReference.Merge(m, src)\n}\nfunc (m *ResourceReference) XXX_Size() int {\n\treturn xxx_messageInfo_ResourceReference.Size(m)\n}\nfunc (m *ResourceReference) XXX_DiscardUnknown() {\n\txxx_messageInfo_ResourceReference.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_ResourceReference proto.InternalMessageInfo\n\nfunc (m *ResourceReference) GetType() string {\n\tif m != nil {\n\t\treturn m.Type\n\t}\n\treturn \"\"\n}\n\nfunc (m *ResourceReference) GetChildType() string {\n\tif m != nil {\n\t\treturn m.ChildType\n\t}\n\treturn \"\"\n}\n\nvar E_ResourceReference = &proto.ExtensionDesc{\n\tExtendedType:  (*descriptor.FieldOptions)(nil),\n\tExtensionType: (*ResourceReference)(nil),\n\tField:         1055,\n\tName:          \"google.api.resource_reference\",\n\tTag:           \"bytes,1055,opt,name=resource_reference\",\n\tFilename:      \"google/api/resource.proto\",\n}\n\nvar E_Resource = &proto.ExtensionDesc{\n\tExtendedType:  (*descriptor.MessageOptions)(nil),\n\tExtensionType: (*ResourceDescriptor)(nil),\n\tField:         1053,\n\tName:          \"google.api.resource\",\n\tTag:           \"bytes,1053,opt,name=resource\",\n\tFilename:      \"google/api/resource.proto\",\n}\n\nfunc init() {\n\tproto.RegisterEnum(\"google.api.ResourceDescriptor_History\", ResourceDescriptor_History_name, ResourceDescriptor_History_value)\n\tproto.RegisterType((*ResourceDescriptor)(nil), \"google.api.ResourceDescriptor\")\n\tproto.RegisterType((*ResourceReference)(nil), \"google.api.ResourceReference\")\n\tproto.RegisterExtension(E_ResourceReference)\n\tproto.RegisterExtension(E_Resource)\n}\n\nfunc init() { proto.RegisterFile(\"google/api/resource.proto\", fileDescriptor_465e9122405d1bb5) }\n\nvar fileDescriptor_465e9122405d1bb5 = []byte{\n\t// 430 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x52, 0x41, 0x6f, 0xd3, 0x30,\n\t0x18, 0x25, 0x59, 0x45, 0xd7, 0x0f, 0x31, 0x6d, 0x06, 0x89, 0x0c, 0x29, 0x10, 0xf5, 0x80, 0x7a,\n\t0x4a, 0xa4, 0x71, 0x1b, 0x17, 0x3a, 0x96, 0x76, 0x91, 0xba, 0x36, 0x72, 0xd3, 0xc3, 0x00, 0x29,\n\t0xf2, 0xd2, 0xaf, 0x59, 0xa4, 0xcc, 0xb6, 0x9c, 0xec, 0xd0, 0x1b, 0x7f, 0x04, 0x21, 0xf1, 0x2b,\n\t0x39, 0xa2, 0x3a, 0x71, 0x98, 0xd8, 0xb4, 0x9b, 0xf3, 0xde, 0xfb, 0xbe, 0xf7, 0xfc, 0x1c, 0x38,\n\t0xce, 0x85, 0xc8, 0x4b, 0x0c, 0x98, 0x2c, 0x02, 0x85, 0x95, 0xb8, 0x53, 0x19, 0xfa, 0x52, 0x89,\n\t0x5a, 0x10, 0x68, 0x28, 0x9f, 0xc9, 0xe2, 0xad, 0xd7, 0xca, 0x34, 0x73, 0x7d, 0xb7, 0x09, 0xd6,\n\t0x58, 0x65, 0xaa, 0x90, 0xb5, 0x50, 0x8d, 0x7a, 0xf8, 0xc3, 0x06, 0x42, 0xdb, 0x05, 0xe7, 0x1d,\n\t0x49, 0x08, 0xf4, 0xea, 0xad, 0x44, 0xc7, 0xf2, 0xac, 0xd1, 0x80, 0xea, 0x33, 0x71, 0xa0, 0x2f,\n\t0x59, 0x5d, 0xa3, 0xe2, 0x8e, 0xed, 0xed, 0x8d, 0x06, 0xd4, 0x7c, 0x12, 0x17, 0x80, 0xb3, 0x5b,\n\t0x4c, 0x37, 0x05, 0x96, 0x6b, 0x67, 0x4f, 0xcf, 0x0c, 0x76, 0xc8, 0x64, 0x07, 0x90, 0xcf, 0xd0,\n\t0xbf, 0x29, 0xaa, 0x5a, 0xa8, 0xad, 0xd3, 0xf3, 0xac, 0xd1, 0xc1, 0xc9, 0x07, 0xff, 0x5f, 0x46,\n\t0xff, 0xa1, 0xbb, 0x7f, 0xd1, 0xa8, 0xa9, 0x19, 0x1b, 0x7e, 0x83, 0x7e, 0x8b, 0x91, 0x37, 0xf0,\n\t0xea, 0x22, 0x5a, 0x26, 0x0b, 0x7a, 0x95, 0xae, 0xe6, 0xcb, 0x38, 0xfc, 0x12, 0x4d, 0xa2, 0xf0,\n\t0xfc, 0xf0, 0x19, 0x71, 0xe1, 0x78, 0x41, 0xa3, 0x69, 0x34, 0x1f, 0xcf, 0x66, 0x57, 0xe9, 0x32,\n\t0x9a, 0x4f, 0x67, 0x61, 0x1a, 0x8f, 0x93, 0x24, 0xa4, 0xf3, 0x43, 0x8b, 0x38, 0xf0, 0x7a, 0xb2,\n\t0x4a, 0x56, 0x34, 0x4c, 0x2f, 0x57, 0xb3, 0x24, 0xea, 0x18, 0x7b, 0x38, 0x81, 0x23, 0x93, 0x81,\n\t0xe2, 0x06, 0x15, 0xf2, 0x0c, 0x1f, 0x2d, 0xc0, 0x05, 0xc8, 0x6e, 0x8a, 0x72, 0x9d, 0x6a, 0xc6,\n\t0x6e, 0xae, 0xa9, 0x91, 0x64, 0x2b, 0xf1, 0xb4, 0x04, 0x62, 0x9e, 0x22, 0x55, 0xdd, 0x22, 0xd7,\n\t0xdc, 0xd5, 0xbc, 0x81, 0xaf, 0x4b, 0x59, 0xc8, 0xba, 0x10, 0xbc, 0x72, 0x7e, 0xed, 0x7b, 0xd6,\n\t0xe8, 0xc5, 0x89, 0xfb, 0x58, 0x23, 0x5d, 0x1a, 0x7a, 0xa4, 0xfe, 0x87, 0x4e, 0xbf, 0xc3, 0xbe,\n\t0x01, 0xc9, 0xfb, 0x07, 0x1e, 0x97, 0x58, 0x55, 0x2c, 0x47, 0xe3, 0xf2, 0xb3, 0x71, 0x79, 0xf7,\n\t0x74, 0xef, 0xb4, 0xdb, 0x78, 0xc6, 0xe1, 0x20, 0x13, 0xb7, 0xf7, 0xe4, 0x67, 0x2f, 0x8d, 0x3e,\n\t0xde, 0x79, 0xc4, 0xd6, 0xd7, 0x71, 0x4b, 0xe6, 0xa2, 0x64, 0x3c, 0xf7, 0x85, 0xca, 0x83, 0x1c,\n\t0xb9, 0x4e, 0x10, 0x34, 0x14, 0x93, 0x45, 0xa5, 0xff, 0x50, 0xc6, 0xb9, 0xa8, 0x99, 0x8e, 0xf2,\n\t0xe9, 0xde, 0xf9, 0x8f, 0x65, 0xfd, 0xb6, 0x7b, 0xd3, 0x71, 0x1c, 0x5d, 0x3f, 0xd7, 0x73, 0x1f,\n\t0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0xb5, 0x1e, 0x07, 0x80, 0xd8, 0x02, 0x00, 0x00,\n}\n"
  },
  {
    "path": "vendor/google.golang.org/genproto/googleapis/iam/v1/iam_policy.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// source: google/iam/v1/iam_policy.proto\n\npackage iam\n\nimport (\n\tcontext \"context\"\n\tfmt \"fmt\"\n\tmath \"math\"\n\n\tproto \"github.com/golang/protobuf/proto\"\n\t_ \"google.golang.org/genproto/googleapis/api/annotations\"\n\tgrpc \"google.golang.org/grpc\"\n)\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar _ = proto.Marshal\nvar _ = fmt.Errorf\nvar _ = math.Inf\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package\n\n// Request message for `SetIamPolicy` method.\ntype SetIamPolicyRequest struct {\n\t// REQUIRED: The resource for which the policy is being specified.\n\t// See the operation documentation for the appropriate value for this field.\n\tResource string `protobuf:\"bytes,1,opt,name=resource,proto3\" json:\"resource,omitempty\"`\n\t// REQUIRED: The complete policy to be applied to the `resource`. The size of\n\t// the policy is limited to a few 10s of KB. An empty policy is a\n\t// valid policy but certain Cloud Platform services (such as Projects)\n\t// might reject them.\n\tPolicy               *Policy  `protobuf:\"bytes,2,opt,name=policy,proto3\" json:\"policy,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *SetIamPolicyRequest) Reset()         { *m = SetIamPolicyRequest{} }\nfunc (m *SetIamPolicyRequest) String() string { return proto.CompactTextString(m) }\nfunc (*SetIamPolicyRequest) ProtoMessage()    {}\nfunc (*SetIamPolicyRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_d2728eb97d748a32, []int{0}\n}\n\nfunc (m *SetIamPolicyRequest) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_SetIamPolicyRequest.Unmarshal(m, b)\n}\nfunc (m *SetIamPolicyRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_SetIamPolicyRequest.Marshal(b, m, deterministic)\n}\nfunc (m *SetIamPolicyRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_SetIamPolicyRequest.Merge(m, src)\n}\nfunc (m *SetIamPolicyRequest) XXX_Size() int {\n\treturn xxx_messageInfo_SetIamPolicyRequest.Size(m)\n}\nfunc (m *SetIamPolicyRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_SetIamPolicyRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_SetIamPolicyRequest proto.InternalMessageInfo\n\nfunc (m *SetIamPolicyRequest) GetResource() string {\n\tif m != nil {\n\t\treturn m.Resource\n\t}\n\treturn \"\"\n}\n\nfunc (m *SetIamPolicyRequest) GetPolicy() *Policy {\n\tif m != nil {\n\t\treturn m.Policy\n\t}\n\treturn nil\n}\n\n// Request message for `GetIamPolicy` method.\ntype GetIamPolicyRequest struct {\n\t// REQUIRED: The resource for which the policy is being requested.\n\t// See the operation documentation for the appropriate value for this field.\n\tResource             string   `protobuf:\"bytes,1,opt,name=resource,proto3\" json:\"resource,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *GetIamPolicyRequest) Reset()         { *m = GetIamPolicyRequest{} }\nfunc (m *GetIamPolicyRequest) String() string { return proto.CompactTextString(m) }\nfunc (*GetIamPolicyRequest) ProtoMessage()    {}\nfunc (*GetIamPolicyRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_d2728eb97d748a32, []int{1}\n}\n\nfunc (m *GetIamPolicyRequest) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_GetIamPolicyRequest.Unmarshal(m, b)\n}\nfunc (m *GetIamPolicyRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_GetIamPolicyRequest.Marshal(b, m, deterministic)\n}\nfunc (m *GetIamPolicyRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_GetIamPolicyRequest.Merge(m, src)\n}\nfunc (m *GetIamPolicyRequest) XXX_Size() int {\n\treturn xxx_messageInfo_GetIamPolicyRequest.Size(m)\n}\nfunc (m *GetIamPolicyRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_GetIamPolicyRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_GetIamPolicyRequest proto.InternalMessageInfo\n\nfunc (m *GetIamPolicyRequest) GetResource() string {\n\tif m != nil {\n\t\treturn m.Resource\n\t}\n\treturn \"\"\n}\n\n// Request message for `TestIamPermissions` method.\ntype TestIamPermissionsRequest struct {\n\t// REQUIRED: The resource for which the policy detail is being requested.\n\t// See the operation documentation for the appropriate value for this field.\n\tResource string `protobuf:\"bytes,1,opt,name=resource,proto3\" json:\"resource,omitempty\"`\n\t// The set of permissions to check for the `resource`. Permissions with\n\t// wildcards (such as '*' or 'storage.*') are not allowed. For more\n\t// information see\n\t// [IAM Overview](https://cloud.google.com/iam/docs/overview#permissions).\n\tPermissions          []string `protobuf:\"bytes,2,rep,name=permissions,proto3\" json:\"permissions,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *TestIamPermissionsRequest) Reset()         { *m = TestIamPermissionsRequest{} }\nfunc (m *TestIamPermissionsRequest) String() string { return proto.CompactTextString(m) }\nfunc (*TestIamPermissionsRequest) ProtoMessage()    {}\nfunc (*TestIamPermissionsRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_d2728eb97d748a32, []int{2}\n}\n\nfunc (m *TestIamPermissionsRequest) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_TestIamPermissionsRequest.Unmarshal(m, b)\n}\nfunc (m *TestIamPermissionsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_TestIamPermissionsRequest.Marshal(b, m, deterministic)\n}\nfunc (m *TestIamPermissionsRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_TestIamPermissionsRequest.Merge(m, src)\n}\nfunc (m *TestIamPermissionsRequest) XXX_Size() int {\n\treturn xxx_messageInfo_TestIamPermissionsRequest.Size(m)\n}\nfunc (m *TestIamPermissionsRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_TestIamPermissionsRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_TestIamPermissionsRequest proto.InternalMessageInfo\n\nfunc (m *TestIamPermissionsRequest) GetResource() string {\n\tif m != nil {\n\t\treturn m.Resource\n\t}\n\treturn \"\"\n}\n\nfunc (m *TestIamPermissionsRequest) GetPermissions() []string {\n\tif m != nil {\n\t\treturn m.Permissions\n\t}\n\treturn nil\n}\n\n// Response message for `TestIamPermissions` method.\ntype TestIamPermissionsResponse struct {\n\t// A subset of `TestPermissionsRequest.permissions` that the caller is\n\t// allowed.\n\tPermissions          []string `protobuf:\"bytes,1,rep,name=permissions,proto3\" json:\"permissions,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *TestIamPermissionsResponse) Reset()         { *m = TestIamPermissionsResponse{} }\nfunc (m *TestIamPermissionsResponse) String() string { return proto.CompactTextString(m) }\nfunc (*TestIamPermissionsResponse) ProtoMessage()    {}\nfunc (*TestIamPermissionsResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_d2728eb97d748a32, []int{3}\n}\n\nfunc (m *TestIamPermissionsResponse) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_TestIamPermissionsResponse.Unmarshal(m, b)\n}\nfunc (m *TestIamPermissionsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_TestIamPermissionsResponse.Marshal(b, m, deterministic)\n}\nfunc (m *TestIamPermissionsResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_TestIamPermissionsResponse.Merge(m, src)\n}\nfunc (m *TestIamPermissionsResponse) XXX_Size() int {\n\treturn xxx_messageInfo_TestIamPermissionsResponse.Size(m)\n}\nfunc (m *TestIamPermissionsResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_TestIamPermissionsResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_TestIamPermissionsResponse proto.InternalMessageInfo\n\nfunc (m *TestIamPermissionsResponse) GetPermissions() []string {\n\tif m != nil {\n\t\treturn m.Permissions\n\t}\n\treturn nil\n}\n\nfunc init() {\n\tproto.RegisterType((*SetIamPolicyRequest)(nil), \"google.iam.v1.SetIamPolicyRequest\")\n\tproto.RegisterType((*GetIamPolicyRequest)(nil), \"google.iam.v1.GetIamPolicyRequest\")\n\tproto.RegisterType((*TestIamPermissionsRequest)(nil), \"google.iam.v1.TestIamPermissionsRequest\")\n\tproto.RegisterType((*TestIamPermissionsResponse)(nil), \"google.iam.v1.TestIamPermissionsResponse\")\n}\n\nfunc init() { proto.RegisterFile(\"google/iam/v1/iam_policy.proto\", fileDescriptor_d2728eb97d748a32) }\n\nvar fileDescriptor_d2728eb97d748a32 = []byte{\n\t// 419 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4b, 0xcf, 0xcf, 0x4f,\n\t0xcf, 0x49, 0xd5, 0xcf, 0x4c, 0xcc, 0xd5, 0x2f, 0x33, 0x04, 0x51, 0xf1, 0x05, 0xf9, 0x39, 0x99,\n\t0xc9, 0x95, 0x7a, 0x05, 0x45, 0xf9, 0x25, 0xf9, 0x42, 0xbc, 0x10, 0x79, 0xbd, 0xcc, 0xc4, 0x5c,\n\t0xbd, 0x32, 0x43, 0x29, 0x49, 0xa8, 0xf2, 0xc4, 0x82, 0x4c, 0xfd, 0xa2, 0xd4, 0xe2, 0xfc, 0xd2,\n\t0xa2, 0xe4, 0x54, 0x88, 0x4a, 0x29, 0x29, 0x54, 0x93, 0x90, 0x4d, 0x91, 0x92, 0x41, 0xd2, 0x96,\n\t0x98, 0x97, 0x97, 0x5f, 0x92, 0x58, 0x92, 0x99, 0x9f, 0x57, 0x0c, 0x91, 0x55, 0x4a, 0xe0, 0x12,\n\t0x0e, 0x4e, 0x2d, 0xf1, 0x4c, 0xcc, 0x0d, 0x00, 0xeb, 0x09, 0x4a, 0x2d, 0x2c, 0x4d, 0x2d, 0x2e,\n\t0x11, 0x92, 0xe2, 0xe2, 0x80, 0x59, 0x21, 0xc1, 0xa8, 0xc0, 0xa8, 0xc1, 0x19, 0x04, 0xe7, 0x0b,\n\t0xe9, 0x72, 0xb1, 0x41, 0x2c, 0x90, 0x60, 0x52, 0x60, 0xd4, 0xe0, 0x36, 0x12, 0xd5, 0x43, 0x71,\n\t0xa7, 0x1e, 0xd4, 0x24, 0xa8, 0x22, 0x25, 0x43, 0x2e, 0x61, 0x77, 0xd2, 0x6c, 0x50, 0x8a, 0xe4,\n\t0x92, 0x0c, 0x49, 0x2d, 0x06, 0xeb, 0x49, 0x2d, 0xca, 0xcd, 0x2c, 0x2e, 0x06, 0x39, 0x98, 0x18,\n\t0xa7, 0x29, 0x70, 0x71, 0x17, 0x20, 0x74, 0x48, 0x30, 0x29, 0x30, 0x6b, 0x70, 0x06, 0x21, 0x0b,\n\t0x29, 0xd9, 0x71, 0x49, 0x61, 0x33, 0xba, 0xb8, 0x20, 0x3f, 0xaf, 0x18, 0x43, 0x3f, 0x23, 0x86,\n\t0x7e, 0xa3, 0x29, 0xcc, 0x5c, 0x9c, 0x9e, 0x8e, 0xbe, 0x10, 0xbf, 0x08, 0x95, 0x70, 0xf1, 0x20,\n\t0x87, 0x9e, 0x90, 0x12, 0x5a, 0x50, 0x60, 0x09, 0x5a, 0x29, 0xec, 0xc1, 0xa5, 0xa4, 0xd9, 0x74,\n\t0xf9, 0xc9, 0x64, 0x26, 0x65, 0x25, 0x39, 0x50, 0x04, 0x56, 0xc3, 0x7c, 0x64, 0xab, 0xa5, 0x55,\n\t0x6b, 0x55, 0x8c, 0x64, 0x8a, 0x15, 0xa3, 0x16, 0xc8, 0x56, 0x77, 0x7c, 0xb6, 0xba, 0x53, 0xc5,\n\t0xd6, 0x74, 0x34, 0x5b, 0x67, 0x31, 0x72, 0x09, 0x61, 0x06, 0x9d, 0x90, 0x06, 0x9a, 0xc1, 0x38,\n\t0x23, 0x4e, 0x4a, 0x93, 0x08, 0x95, 0x90, 0x78, 0x50, 0xd2, 0x07, 0x3b, 0x4b, 0x53, 0x49, 0x05,\n\t0xd3, 0x59, 0x25, 0x18, 0xba, 0xac, 0x18, 0xb5, 0x9c, 0xda, 0x18, 0xb9, 0x04, 0x93, 0xf3, 0x73,\n\t0x51, 0x6d, 0x70, 0xe2, 0x83, 0x7b, 0x20, 0x00, 0x94, 0xd8, 0x03, 0x18, 0xa3, 0x0c, 0xa0, 0x0a,\n\t0xd2, 0xf3, 0x73, 0x12, 0xf3, 0xd2, 0xf5, 0xf2, 0x8b, 0xd2, 0xf5, 0xd3, 0x53, 0xf3, 0xc0, 0x59,\n\t0x41, 0x1f, 0x22, 0x95, 0x58, 0x90, 0x59, 0x0c, 0xcd, 0x47, 0xd6, 0x99, 0x89, 0xb9, 0x3f, 0x18,\n\t0x19, 0x57, 0x31, 0x09, 0xbb, 0x43, 0x74, 0x39, 0xe7, 0xe4, 0x97, 0xa6, 0xe8, 0x79, 0x26, 0xe6,\n\t0xea, 0x85, 0x19, 0x9e, 0x82, 0x89, 0xc6, 0x80, 0x45, 0x63, 0x3c, 0x13, 0x73, 0x63, 0xc2, 0x0c,\n\t0x93, 0xd8, 0xc0, 0x66, 0x19, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0xba, 0x05, 0xa3, 0xc3, 0xdc,\n\t0x03, 0x00, 0x00,\n}\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar _ context.Context\nvar _ grpc.ClientConn\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the grpc package it is being compiled against.\nconst _ = grpc.SupportPackageIsVersion4\n\n// IAMPolicyClient is the client API for IAMPolicy service.\n//\n// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.\ntype IAMPolicyClient interface {\n\t// Sets the access control policy on the specified resource. Replaces any\n\t// existing policy.\n\tSetIamPolicy(ctx context.Context, in *SetIamPolicyRequest, opts ...grpc.CallOption) (*Policy, error)\n\t// Gets the access control policy for a resource.\n\t// Returns an empty policy if the resource exists and does not have a policy\n\t// set.\n\tGetIamPolicy(ctx context.Context, in *GetIamPolicyRequest, opts ...grpc.CallOption) (*Policy, error)\n\t// Returns permissions that a caller has on the specified resource.\n\t// If the resource does not exist, this will return an empty set of\n\t// permissions, not a NOT_FOUND error.\n\t//\n\t// Note: This operation is designed to be used for building permission-aware\n\t// UIs and command-line tools, not for authorization checking. This operation\n\t// may \"fail open\" without warning.\n\tTestIamPermissions(ctx context.Context, in *TestIamPermissionsRequest, opts ...grpc.CallOption) (*TestIamPermissionsResponse, error)\n}\n\ntype iAMPolicyClient struct {\n\tcc *grpc.ClientConn\n}\n\nfunc NewIAMPolicyClient(cc *grpc.ClientConn) IAMPolicyClient {\n\treturn &iAMPolicyClient{cc}\n}\n\nfunc (c *iAMPolicyClient) SetIamPolicy(ctx context.Context, in *SetIamPolicyRequest, opts ...grpc.CallOption) (*Policy, error) {\n\tout := new(Policy)\n\terr := c.cc.Invoke(ctx, \"/google.iam.v1.IAMPolicy/SetIamPolicy\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *iAMPolicyClient) GetIamPolicy(ctx context.Context, in *GetIamPolicyRequest, opts ...grpc.CallOption) (*Policy, error) {\n\tout := new(Policy)\n\terr := c.cc.Invoke(ctx, \"/google.iam.v1.IAMPolicy/GetIamPolicy\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *iAMPolicyClient) TestIamPermissions(ctx context.Context, in *TestIamPermissionsRequest, opts ...grpc.CallOption) (*TestIamPermissionsResponse, error) {\n\tout := new(TestIamPermissionsResponse)\n\terr := c.cc.Invoke(ctx, \"/google.iam.v1.IAMPolicy/TestIamPermissions\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\n// IAMPolicyServer is the server API for IAMPolicy service.\ntype IAMPolicyServer interface {\n\t// Sets the access control policy on the specified resource. Replaces any\n\t// existing policy.\n\tSetIamPolicy(context.Context, *SetIamPolicyRequest) (*Policy, error)\n\t// Gets the access control policy for a resource.\n\t// Returns an empty policy if the resource exists and does not have a policy\n\t// set.\n\tGetIamPolicy(context.Context, *GetIamPolicyRequest) (*Policy, error)\n\t// Returns permissions that a caller has on the specified resource.\n\t// If the resource does not exist, this will return an empty set of\n\t// permissions, not a NOT_FOUND error.\n\t//\n\t// Note: This operation is designed to be used for building permission-aware\n\t// UIs and command-line tools, not for authorization checking. This operation\n\t// may \"fail open\" without warning.\n\tTestIamPermissions(context.Context, *TestIamPermissionsRequest) (*TestIamPermissionsResponse, error)\n}\n\nfunc RegisterIAMPolicyServer(s *grpc.Server, srv IAMPolicyServer) {\n\ts.RegisterService(&_IAMPolicy_serviceDesc, srv)\n}\n\nfunc _IAMPolicy_SetIamPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(SetIamPolicyRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(IAMPolicyServer).SetIamPolicy(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/google.iam.v1.IAMPolicy/SetIamPolicy\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(IAMPolicyServer).SetIamPolicy(ctx, req.(*SetIamPolicyRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _IAMPolicy_GetIamPolicy_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(GetIamPolicyRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(IAMPolicyServer).GetIamPolicy(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/google.iam.v1.IAMPolicy/GetIamPolicy\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(IAMPolicyServer).GetIamPolicy(ctx, req.(*GetIamPolicyRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _IAMPolicy_TestIamPermissions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(TestIamPermissionsRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(IAMPolicyServer).TestIamPermissions(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/google.iam.v1.IAMPolicy/TestIamPermissions\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(IAMPolicyServer).TestIamPermissions(ctx, req.(*TestIamPermissionsRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nvar _IAMPolicy_serviceDesc = grpc.ServiceDesc{\n\tServiceName: \"google.iam.v1.IAMPolicy\",\n\tHandlerType: (*IAMPolicyServer)(nil),\n\tMethods: []grpc.MethodDesc{\n\t\t{\n\t\t\tMethodName: \"SetIamPolicy\",\n\t\t\tHandler:    _IAMPolicy_SetIamPolicy_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"GetIamPolicy\",\n\t\t\tHandler:    _IAMPolicy_GetIamPolicy_Handler,\n\t\t},\n\t\t{\n\t\t\tMethodName: \"TestIamPermissions\",\n\t\t\tHandler:    _IAMPolicy_TestIamPermissions_Handler,\n\t\t},\n\t},\n\tStreams:  []grpc.StreamDesc{},\n\tMetadata: \"google/iam/v1/iam_policy.proto\",\n}\n"
  },
  {
    "path": "vendor/google.golang.org/genproto/googleapis/iam/v1/policy.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// source: google/iam/v1/policy.proto\n\npackage iam\n\nimport (\n\tfmt \"fmt\"\n\tmath \"math\"\n\n\tproto \"github.com/golang/protobuf/proto\"\n\t_ \"google.golang.org/genproto/googleapis/api/annotations\"\n\texpr \"google.golang.org/genproto/googleapis/type/expr\"\n)\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar _ = proto.Marshal\nvar _ = fmt.Errorf\nvar _ = math.Inf\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package\n\n// The type of action performed on a Binding in a policy.\ntype BindingDelta_Action int32\n\nconst (\n\t// Unspecified.\n\tBindingDelta_ACTION_UNSPECIFIED BindingDelta_Action = 0\n\t// Addition of a Binding.\n\tBindingDelta_ADD BindingDelta_Action = 1\n\t// Removal of a Binding.\n\tBindingDelta_REMOVE BindingDelta_Action = 2\n)\n\nvar BindingDelta_Action_name = map[int32]string{\n\t0: \"ACTION_UNSPECIFIED\",\n\t1: \"ADD\",\n\t2: \"REMOVE\",\n}\n\nvar BindingDelta_Action_value = map[string]int32{\n\t\"ACTION_UNSPECIFIED\": 0,\n\t\"ADD\":                1,\n\t\"REMOVE\":             2,\n}\n\nfunc (x BindingDelta_Action) String() string {\n\treturn proto.EnumName(BindingDelta_Action_name, int32(x))\n}\n\nfunc (BindingDelta_Action) EnumDescriptor() ([]byte, []int) {\n\treturn fileDescriptor_a3cd40b8a66b2a99, []int{3, 0}\n}\n\n// The type of action performed on an audit configuration in a policy.\ntype AuditConfigDelta_Action int32\n\nconst (\n\t// Unspecified.\n\tAuditConfigDelta_ACTION_UNSPECIFIED AuditConfigDelta_Action = 0\n\t// Addition of an audit configuration.\n\tAuditConfigDelta_ADD AuditConfigDelta_Action = 1\n\t// Removal of an audit configuration.\n\tAuditConfigDelta_REMOVE AuditConfigDelta_Action = 2\n)\n\nvar AuditConfigDelta_Action_name = map[int32]string{\n\t0: \"ACTION_UNSPECIFIED\",\n\t1: \"ADD\",\n\t2: \"REMOVE\",\n}\n\nvar AuditConfigDelta_Action_value = map[string]int32{\n\t\"ACTION_UNSPECIFIED\": 0,\n\t\"ADD\":                1,\n\t\"REMOVE\":             2,\n}\n\nfunc (x AuditConfigDelta_Action) String() string {\n\treturn proto.EnumName(AuditConfigDelta_Action_name, int32(x))\n}\n\nfunc (AuditConfigDelta_Action) EnumDescriptor() ([]byte, []int) {\n\treturn fileDescriptor_a3cd40b8a66b2a99, []int{4, 0}\n}\n\n// Defines an Identity and Access Management (IAM) policy. It is used to\n// specify access control policies for Cloud Platform resources.\n//\n//\n// A `Policy` consists of a list of `bindings`. A `binding` binds a list of\n// `members` to a `role`, where the members can be user accounts, Google groups,\n// Google domains, and service accounts. A `role` is a named list of permissions\n// defined by IAM.\n//\n// **JSON Example**\n//\n//     {\n//       \"bindings\": [\n//         {\n//           \"role\": \"roles/owner\",\n//           \"members\": [\n//             \"user:mike@example.com\",\n//             \"group:admins@example.com\",\n//             \"domain:google.com\",\n//             \"serviceAccount:my-other-app@appspot.gserviceaccount.com\"\n//           ]\n//         },\n//         {\n//           \"role\": \"roles/viewer\",\n//           \"members\": [\"user:sean@example.com\"]\n//         }\n//       ]\n//     }\n//\n// **YAML Example**\n//\n//     bindings:\n//     - members:\n//       - user:mike@example.com\n//       - group:admins@example.com\n//       - domain:google.com\n//       - serviceAccount:my-other-app@appspot.gserviceaccount.com\n//       role: roles/owner\n//     - members:\n//       - user:sean@example.com\n//       role: roles/viewer\n//\n//\n// For a description of IAM and its features, see the\n// [IAM developer's guide](https://cloud.google.com/iam/docs).\ntype Policy struct {\n\t// Deprecated.\n\tVersion int32 `protobuf:\"varint,1,opt,name=version,proto3\" json:\"version,omitempty\"`\n\t// Associates a list of `members` to a `role`.\n\t// `bindings` with no members will result in an error.\n\tBindings []*Binding `protobuf:\"bytes,4,rep,name=bindings,proto3\" json:\"bindings,omitempty\"`\n\t// `etag` is used for optimistic concurrency control as a way to help\n\t// prevent simultaneous updates of a policy from overwriting each other.\n\t// It is strongly suggested that systems make use of the `etag` in the\n\t// read-modify-write cycle to perform policy updates in order to avoid race\n\t// conditions: An `etag` is returned in the response to `getIamPolicy`, and\n\t// systems are expected to put that etag in the request to `setIamPolicy` to\n\t// ensure that their change will be applied to the same version of the policy.\n\t//\n\t// If no `etag` is provided in the call to `setIamPolicy`, then the existing\n\t// policy is overwritten blindly.\n\tEtag                 []byte   `protobuf:\"bytes,3,opt,name=etag,proto3\" json:\"etag,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *Policy) Reset()         { *m = Policy{} }\nfunc (m *Policy) String() string { return proto.CompactTextString(m) }\nfunc (*Policy) ProtoMessage()    {}\nfunc (*Policy) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_a3cd40b8a66b2a99, []int{0}\n}\n\nfunc (m *Policy) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_Policy.Unmarshal(m, b)\n}\nfunc (m *Policy) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_Policy.Marshal(b, m, deterministic)\n}\nfunc (m *Policy) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Policy.Merge(m, src)\n}\nfunc (m *Policy) XXX_Size() int {\n\treturn xxx_messageInfo_Policy.Size(m)\n}\nfunc (m *Policy) XXX_DiscardUnknown() {\n\txxx_messageInfo_Policy.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Policy proto.InternalMessageInfo\n\nfunc (m *Policy) GetVersion() int32 {\n\tif m != nil {\n\t\treturn m.Version\n\t}\n\treturn 0\n}\n\nfunc (m *Policy) GetBindings() []*Binding {\n\tif m != nil {\n\t\treturn m.Bindings\n\t}\n\treturn nil\n}\n\nfunc (m *Policy) GetEtag() []byte {\n\tif m != nil {\n\t\treturn m.Etag\n\t}\n\treturn nil\n}\n\n// Associates `members` with a `role`.\ntype Binding struct {\n\t// Role that is assigned to `members`.\n\t// For example, `roles/viewer`, `roles/editor`, or `roles/owner`.\n\tRole string `protobuf:\"bytes,1,opt,name=role,proto3\" json:\"role,omitempty\"`\n\t// Specifies the identities requesting access for a Cloud Platform resource.\n\t// `members` can have the following values:\n\t//\n\t// * `allUsers`: A special identifier that represents anyone who is\n\t//    on the internet; with or without a Google account.\n\t//\n\t// * `allAuthenticatedUsers`: A special identifier that represents anyone\n\t//    who is authenticated with a Google account or a service account.\n\t//\n\t// * `user:{emailid}`: An email address that represents a specific Google\n\t//    account. For example, `alice@gmail.com` .\n\t//\n\t//\n\t// * `serviceAccount:{emailid}`: An email address that represents a service\n\t//    account. For example, `my-other-app@appspot.gserviceaccount.com`.\n\t//\n\t// * `group:{emailid}`: An email address that represents a Google group.\n\t//    For example, `admins@example.com`.\n\t//\n\t//\n\t// * `domain:{domain}`: The G Suite domain (primary) that represents all the\n\t//    users of that domain. For example, `google.com` or `example.com`.\n\t//\n\t//\n\tMembers []string `protobuf:\"bytes,2,rep,name=members,proto3\" json:\"members,omitempty\"`\n\t// The condition that is associated with this binding.\n\t// NOTE: An unsatisfied condition will not allow user access via current\n\t// binding. Different bindings, including their conditions, are examined\n\t// independently.\n\tCondition            *expr.Expr `protobuf:\"bytes,3,opt,name=condition,proto3\" json:\"condition,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}   `json:\"-\"`\n\tXXX_unrecognized     []byte     `json:\"-\"`\n\tXXX_sizecache        int32      `json:\"-\"`\n}\n\nfunc (m *Binding) Reset()         { *m = Binding{} }\nfunc (m *Binding) String() string { return proto.CompactTextString(m) }\nfunc (*Binding) ProtoMessage()    {}\nfunc (*Binding) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_a3cd40b8a66b2a99, []int{1}\n}\n\nfunc (m *Binding) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_Binding.Unmarshal(m, b)\n}\nfunc (m *Binding) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_Binding.Marshal(b, m, deterministic)\n}\nfunc (m *Binding) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Binding.Merge(m, src)\n}\nfunc (m *Binding) XXX_Size() int {\n\treturn xxx_messageInfo_Binding.Size(m)\n}\nfunc (m *Binding) XXX_DiscardUnknown() {\n\txxx_messageInfo_Binding.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Binding proto.InternalMessageInfo\n\nfunc (m *Binding) GetRole() string {\n\tif m != nil {\n\t\treturn m.Role\n\t}\n\treturn \"\"\n}\n\nfunc (m *Binding) GetMembers() []string {\n\tif m != nil {\n\t\treturn m.Members\n\t}\n\treturn nil\n}\n\nfunc (m *Binding) GetCondition() *expr.Expr {\n\tif m != nil {\n\t\treturn m.Condition\n\t}\n\treturn nil\n}\n\n// The difference delta between two policies.\ntype PolicyDelta struct {\n\t// The delta for Bindings between two policies.\n\tBindingDeltas []*BindingDelta `protobuf:\"bytes,1,rep,name=binding_deltas,json=bindingDeltas,proto3\" json:\"binding_deltas,omitempty\"`\n\t// The delta for AuditConfigs between two policies.\n\tAuditConfigDeltas    []*AuditConfigDelta `protobuf:\"bytes,2,rep,name=audit_config_deltas,json=auditConfigDeltas,proto3\" json:\"audit_config_deltas,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}            `json:\"-\"`\n\tXXX_unrecognized     []byte              `json:\"-\"`\n\tXXX_sizecache        int32               `json:\"-\"`\n}\n\nfunc (m *PolicyDelta) Reset()         { *m = PolicyDelta{} }\nfunc (m *PolicyDelta) String() string { return proto.CompactTextString(m) }\nfunc (*PolicyDelta) ProtoMessage()    {}\nfunc (*PolicyDelta) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_a3cd40b8a66b2a99, []int{2}\n}\n\nfunc (m *PolicyDelta) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_PolicyDelta.Unmarshal(m, b)\n}\nfunc (m *PolicyDelta) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_PolicyDelta.Marshal(b, m, deterministic)\n}\nfunc (m *PolicyDelta) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_PolicyDelta.Merge(m, src)\n}\nfunc (m *PolicyDelta) XXX_Size() int {\n\treturn xxx_messageInfo_PolicyDelta.Size(m)\n}\nfunc (m *PolicyDelta) XXX_DiscardUnknown() {\n\txxx_messageInfo_PolicyDelta.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_PolicyDelta proto.InternalMessageInfo\n\nfunc (m *PolicyDelta) GetBindingDeltas() []*BindingDelta {\n\tif m != nil {\n\t\treturn m.BindingDeltas\n\t}\n\treturn nil\n}\n\nfunc (m *PolicyDelta) GetAuditConfigDeltas() []*AuditConfigDelta {\n\tif m != nil {\n\t\treturn m.AuditConfigDeltas\n\t}\n\treturn nil\n}\n\n// One delta entry for Binding. Each individual change (only one member in each\n// entry) to a binding will be a separate entry.\ntype BindingDelta struct {\n\t// The action that was performed on a Binding.\n\t// Required\n\tAction BindingDelta_Action `protobuf:\"varint,1,opt,name=action,proto3,enum=google.iam.v1.BindingDelta_Action\" json:\"action,omitempty\"`\n\t// Role that is assigned to `members`.\n\t// For example, `roles/viewer`, `roles/editor`, or `roles/owner`.\n\t// Required\n\tRole string `protobuf:\"bytes,2,opt,name=role,proto3\" json:\"role,omitempty\"`\n\t// A single identity requesting access for a Cloud Platform resource.\n\t// Follows the same format of Binding.members.\n\t// Required\n\tMember string `protobuf:\"bytes,3,opt,name=member,proto3\" json:\"member,omitempty\"`\n\t// Unimplemented. The condition that is associated with this binding.\n\t// This field is logged only for Cloud Audit Logging.\n\tCondition            *expr.Expr `protobuf:\"bytes,4,opt,name=condition,proto3\" json:\"condition,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}   `json:\"-\"`\n\tXXX_unrecognized     []byte     `json:\"-\"`\n\tXXX_sizecache        int32      `json:\"-\"`\n}\n\nfunc (m *BindingDelta) Reset()         { *m = BindingDelta{} }\nfunc (m *BindingDelta) String() string { return proto.CompactTextString(m) }\nfunc (*BindingDelta) ProtoMessage()    {}\nfunc (*BindingDelta) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_a3cd40b8a66b2a99, []int{3}\n}\n\nfunc (m *BindingDelta) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_BindingDelta.Unmarshal(m, b)\n}\nfunc (m *BindingDelta) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_BindingDelta.Marshal(b, m, deterministic)\n}\nfunc (m *BindingDelta) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_BindingDelta.Merge(m, src)\n}\nfunc (m *BindingDelta) XXX_Size() int {\n\treturn xxx_messageInfo_BindingDelta.Size(m)\n}\nfunc (m *BindingDelta) XXX_DiscardUnknown() {\n\txxx_messageInfo_BindingDelta.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_BindingDelta proto.InternalMessageInfo\n\nfunc (m *BindingDelta) GetAction() BindingDelta_Action {\n\tif m != nil {\n\t\treturn m.Action\n\t}\n\treturn BindingDelta_ACTION_UNSPECIFIED\n}\n\nfunc (m *BindingDelta) GetRole() string {\n\tif m != nil {\n\t\treturn m.Role\n\t}\n\treturn \"\"\n}\n\nfunc (m *BindingDelta) GetMember() string {\n\tif m != nil {\n\t\treturn m.Member\n\t}\n\treturn \"\"\n}\n\nfunc (m *BindingDelta) GetCondition() *expr.Expr {\n\tif m != nil {\n\t\treturn m.Condition\n\t}\n\treturn nil\n}\n\n// One delta entry for AuditConfig. Each individual change (only one\n// exempted_member in each entry) to a AuditConfig will be a separate entry.\ntype AuditConfigDelta struct {\n\t// The action that was performed on an audit configuration in a policy.\n\t// Required\n\tAction AuditConfigDelta_Action `protobuf:\"varint,1,opt,name=action,proto3,enum=google.iam.v1.AuditConfigDelta_Action\" json:\"action,omitempty\"`\n\t// Specifies a service that was configured for Cloud Audit Logging.\n\t// For example, `storage.googleapis.com`, `cloudsql.googleapis.com`.\n\t// `allServices` is a special value that covers all services.\n\t// Required\n\tService string `protobuf:\"bytes,2,opt,name=service,proto3\" json:\"service,omitempty\"`\n\t// A single identity that is exempted from \"data access\" audit\n\t// logging for the `service` specified above.\n\t// Follows the same format of Binding.members.\n\tExemptedMember string `protobuf:\"bytes,3,opt,name=exempted_member,json=exemptedMember,proto3\" json:\"exempted_member,omitempty\"`\n\t// Specifies the log_type that was be enabled. ADMIN_ACTIVITY is always\n\t// enabled, and cannot be configured.\n\t// Required\n\tLogType              string   `protobuf:\"bytes,4,opt,name=log_type,json=logType,proto3\" json:\"log_type,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *AuditConfigDelta) Reset()         { *m = AuditConfigDelta{} }\nfunc (m *AuditConfigDelta) String() string { return proto.CompactTextString(m) }\nfunc (*AuditConfigDelta) ProtoMessage()    {}\nfunc (*AuditConfigDelta) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_a3cd40b8a66b2a99, []int{4}\n}\n\nfunc (m *AuditConfigDelta) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_AuditConfigDelta.Unmarshal(m, b)\n}\nfunc (m *AuditConfigDelta) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_AuditConfigDelta.Marshal(b, m, deterministic)\n}\nfunc (m *AuditConfigDelta) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_AuditConfigDelta.Merge(m, src)\n}\nfunc (m *AuditConfigDelta) XXX_Size() int {\n\treturn xxx_messageInfo_AuditConfigDelta.Size(m)\n}\nfunc (m *AuditConfigDelta) XXX_DiscardUnknown() {\n\txxx_messageInfo_AuditConfigDelta.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_AuditConfigDelta proto.InternalMessageInfo\n\nfunc (m *AuditConfigDelta) GetAction() AuditConfigDelta_Action {\n\tif m != nil {\n\t\treturn m.Action\n\t}\n\treturn AuditConfigDelta_ACTION_UNSPECIFIED\n}\n\nfunc (m *AuditConfigDelta) GetService() string {\n\tif m != nil {\n\t\treturn m.Service\n\t}\n\treturn \"\"\n}\n\nfunc (m *AuditConfigDelta) GetExemptedMember() string {\n\tif m != nil {\n\t\treturn m.ExemptedMember\n\t}\n\treturn \"\"\n}\n\nfunc (m *AuditConfigDelta) GetLogType() string {\n\tif m != nil {\n\t\treturn m.LogType\n\t}\n\treturn \"\"\n}\n\nfunc init() {\n\tproto.RegisterEnum(\"google.iam.v1.BindingDelta_Action\", BindingDelta_Action_name, BindingDelta_Action_value)\n\tproto.RegisterEnum(\"google.iam.v1.AuditConfigDelta_Action\", AuditConfigDelta_Action_name, AuditConfigDelta_Action_value)\n\tproto.RegisterType((*Policy)(nil), \"google.iam.v1.Policy\")\n\tproto.RegisterType((*Binding)(nil), \"google.iam.v1.Binding\")\n\tproto.RegisterType((*PolicyDelta)(nil), \"google.iam.v1.PolicyDelta\")\n\tproto.RegisterType((*BindingDelta)(nil), \"google.iam.v1.BindingDelta\")\n\tproto.RegisterType((*AuditConfigDelta)(nil), \"google.iam.v1.AuditConfigDelta\")\n}\n\nfunc init() { proto.RegisterFile(\"google/iam/v1/policy.proto\", fileDescriptor_a3cd40b8a66b2a99) }\n\nvar fileDescriptor_a3cd40b8a66b2a99 = []byte{\n\t// 550 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x93, 0xcf, 0xae, 0xd2, 0x4e,\n\t0x14, 0xc7, 0x7f, 0x03, 0xfc, 0xca, 0xe5, 0x70, 0x2f, 0xc2, 0xdc, 0x84, 0x54, 0x34, 0x91, 0x74,\n\t0xa1, 0xac, 0x5a, 0xc1, 0xb8, 0xd1, 0xc4, 0x84, 0x7f, 0x1a, 0x16, 0xf7, 0x42, 0xc6, 0x2b, 0x0b,\n\t0x43, 0x42, 0x86, 0x76, 0xac, 0x63, 0xda, 0x4e, 0xd3, 0xf6, 0x12, 0x58, 0xfb, 0x26, 0x2e, 0x7d,\n\t0x14, 0x1f, 0xc2, 0xad, 0xaf, 0xe0, 0xd2, 0x74, 0xa6, 0x45, 0x68, 0x8c, 0x1a, 0x77, 0x73, 0xce,\n\t0xf9, 0xce, 0x39, 0xe7, 0xf3, 0x6d, 0x07, 0x3a, 0xae, 0x10, 0xae, 0xc7, 0x2c, 0x4e, 0x7d, 0x6b,\n\t0xdb, 0xb7, 0x42, 0xe1, 0x71, 0x7b, 0x6f, 0x86, 0x91, 0x48, 0x04, 0xbe, 0x50, 0x35, 0x93, 0x53,\n\t0xdf, 0xdc, 0xf6, 0x3b, 0xed, 0x4c, 0x9a, 0xec, 0x43, 0x66, 0xb1, 0x5d, 0x18, 0x29, 0x59, 0xe7,\n\t0x7e, 0x96, 0xa7, 0x21, 0xb7, 0x68, 0x10, 0x88, 0x84, 0x26, 0x5c, 0x04, 0xb1, 0xaa, 0x1a, 0x1f,\n\t0x40, 0x5b, 0xc8, 0xa6, 0x58, 0x87, 0xea, 0x96, 0x45, 0x31, 0x17, 0x81, 0x8e, 0xba, 0xa8, 0xf7,\n\t0x3f, 0xc9, 0x43, 0x3c, 0x80, 0xb3, 0x0d, 0x0f, 0x1c, 0x1e, 0xb8, 0xb1, 0x5e, 0xe9, 0x96, 0x7b,\n\t0xf5, 0x41, 0xdb, 0x3c, 0x99, 0x6d, 0x8e, 0x54, 0x99, 0x1c, 0x74, 0x18, 0x43, 0x85, 0x25, 0xd4,\n\t0xd5, 0xcb, 0x5d, 0xd4, 0x3b, 0x27, 0xf2, 0x6c, 0xbc, 0x87, 0x6a, 0x26, 0x4c, 0xcb, 0x91, 0xf0,\n\t0x98, 0x9c, 0x54, 0x23, 0xf2, 0x9c, 0x2e, 0xe0, 0x33, 0x7f, 0xc3, 0xa2, 0x58, 0x2f, 0x75, 0xcb,\n\t0xbd, 0x1a, 0xc9, 0x43, 0x6c, 0x41, 0xcd, 0x16, 0x81, 0xc3, 0xd3, 0xc5, 0x65, 0xc7, 0xfa, 0xa0,\n\t0x95, 0x6f, 0x90, 0xe2, 0x9a, 0xd3, 0x5d, 0x18, 0x91, 0x9f, 0x1a, 0xe3, 0x13, 0x82, 0xba, 0xc2,\n\t0x9a, 0x30, 0x2f, 0xa1, 0x78, 0x04, 0x8d, 0x6c, 0xb3, 0xb5, 0x93, 0x26, 0x62, 0x1d, 0x49, 0x8e,\n\t0x7b, 0xbf, 0xe6, 0x90, 0x97, 0xc8, 0xc5, 0xe6, 0x28, 0x8a, 0xf1, 0x1c, 0x2e, 0xe9, 0xad, 0xc3,\n\t0x93, 0xb5, 0x2d, 0x82, 0x77, 0xfc, 0xd0, 0xa8, 0x24, 0x1b, 0x3d, 0x28, 0x34, 0x1a, 0xa6, 0xca,\n\t0xb1, 0x14, 0xaa, 0x66, 0x2d, 0x5a, 0xc8, 0xc4, 0xc6, 0x57, 0x04, 0xe7, 0xc7, 0x03, 0xf1, 0x33,\n\t0xd0, 0xa8, 0x9d, 0xe4, 0x1f, 0xa0, 0x31, 0x30, 0x7e, 0xb3, 0x9d, 0x39, 0x94, 0x4a, 0x92, 0xdd,\n\t0x38, 0x18, 0x5a, 0x3a, 0x32, 0xb4, 0x0d, 0x9a, 0x72, 0x50, 0x7a, 0x56, 0x23, 0x59, 0x74, 0x6a,\n\t0x67, 0xe5, 0x2f, 0xec, 0x7c, 0x0a, 0x9a, 0x1a, 0x87, 0xdb, 0x80, 0x87, 0xe3, 0x9b, 0xd9, 0xfc,\n\t0x7a, 0xfd, 0xe6, 0xfa, 0xf5, 0x62, 0x3a, 0x9e, 0xbd, 0x9c, 0x4d, 0x27, 0xcd, 0xff, 0x70, 0x15,\n\t0xca, 0xc3, 0xc9, 0xa4, 0x89, 0x30, 0x80, 0x46, 0xa6, 0x57, 0xf3, 0xe5, 0xb4, 0x59, 0x32, 0xbe,\n\t0x21, 0x68, 0x16, 0x8d, 0xc0, 0x2f, 0x0a, 0x90, 0x0f, 0xff, 0xe0, 0x5c, 0x11, 0x54, 0x87, 0x6a,\n\t0xcc, 0xa2, 0x2d, 0xb7, 0x73, 0xd6, 0x3c, 0xc4, 0x8f, 0xe0, 0x0e, 0xdb, 0x31, 0x3f, 0x4c, 0x98,\n\t0xb3, 0x3e, 0xe1, 0x6e, 0xe4, 0xe9, 0x2b, 0xc5, 0x7f, 0x17, 0xce, 0x3c, 0xe1, 0xae, 0x53, 0x54,\n\t0x89, 0x5f, 0x23, 0x55, 0x4f, 0xb8, 0x37, 0xfb, 0x90, 0xfd, 0x23, 0xe9, 0xe8, 0x23, 0x82, 0x96,\n\t0x2d, 0xfc, 0x53, 0x94, 0x51, 0xf6, 0x0b, 0x2e, 0xd2, 0x87, 0xb6, 0x40, 0x6f, 0x1f, 0x67, 0x55,\n\t0x57, 0x78, 0x34, 0x70, 0x4d, 0x11, 0xb9, 0x96, 0xcb, 0x02, 0xf9, 0x0c, 0x2d, 0x55, 0xa2, 0x21,\n\t0x8f, 0xb3, 0xa7, 0xfe, 0x9c, 0x53, 0xff, 0x3b, 0x42, 0x9f, 0x4b, 0x97, 0xaf, 0xd4, 0xad, 0xb1,\n\t0x27, 0x6e, 0x1d, 0x73, 0x46, 0x7d, 0x73, 0xd9, 0xff, 0x92, 0x67, 0x57, 0x32, 0xbb, 0x9a, 0x51,\n\t0x7f, 0xb5, 0xec, 0x6f, 0x34, 0xd9, 0xeb, 0xc9, 0x8f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x29, 0x86,\n\t0x8f, 0x3e, 0x35, 0x04, 0x00, 0x00,\n}\n"
  },
  {
    "path": "vendor/google.golang.org/genproto/googleapis/rpc/code/code.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// source: google/rpc/code.proto\n\npackage code\n\nimport (\n\tfmt \"fmt\"\n\tmath \"math\"\n\n\tproto \"github.com/golang/protobuf/proto\"\n)\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar _ = proto.Marshal\nvar _ = fmt.Errorf\nvar _ = math.Inf\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package\n\n// The canonical error codes for Google APIs.\n//\n//\n// Sometimes multiple error codes may apply.  Services should return\n// the most specific error code that applies.  For example, prefer\n// `OUT_OF_RANGE` over `FAILED_PRECONDITION` if both codes apply.\n// Similarly prefer `NOT_FOUND` or `ALREADY_EXISTS` over `FAILED_PRECONDITION`.\ntype Code int32\n\nconst (\n\t// Not an error; returned on success\n\t//\n\t// HTTP Mapping: 200 OK\n\tCode_OK Code = 0\n\t// The operation was cancelled, typically by the caller.\n\t//\n\t// HTTP Mapping: 499 Client Closed Request\n\tCode_CANCELLED Code = 1\n\t// Unknown error.  For example, this error may be returned when\n\t// a `Status` value received from another address space belongs to\n\t// an error space that is not known in this address space.  Also\n\t// errors raised by APIs that do not return enough error information\n\t// may be converted to this error.\n\t//\n\t// HTTP Mapping: 500 Internal Server Error\n\tCode_UNKNOWN Code = 2\n\t// The client specified an invalid argument.  Note that this differs\n\t// from `FAILED_PRECONDITION`.  `INVALID_ARGUMENT` indicates arguments\n\t// that are problematic regardless of the state of the system\n\t// (e.g., a malformed file name).\n\t//\n\t// HTTP Mapping: 400 Bad Request\n\tCode_INVALID_ARGUMENT Code = 3\n\t// The deadline expired before the operation could complete. For operations\n\t// that change the state of the system, this error may be returned\n\t// even if the operation has completed successfully.  For example, a\n\t// successful response from a server could have been delayed long\n\t// enough for the deadline to expire.\n\t//\n\t// HTTP Mapping: 504 Gateway Timeout\n\tCode_DEADLINE_EXCEEDED Code = 4\n\t// Some requested entity (e.g., file or directory) was not found.\n\t//\n\t// Note to server developers: if a request is denied for an entire class\n\t// of users, such as gradual feature rollout or undocumented whitelist,\n\t// `NOT_FOUND` may be used. If a request is denied for some users within\n\t// a class of users, such as user-based access control, `PERMISSION_DENIED`\n\t// must be used.\n\t//\n\t// HTTP Mapping: 404 Not Found\n\tCode_NOT_FOUND Code = 5\n\t// The entity that a client attempted to create (e.g., file or directory)\n\t// already exists.\n\t//\n\t// HTTP Mapping: 409 Conflict\n\tCode_ALREADY_EXISTS Code = 6\n\t// The caller does not have permission to execute the specified\n\t// operation. `PERMISSION_DENIED` must not be used for rejections\n\t// caused by exhausting some resource (use `RESOURCE_EXHAUSTED`\n\t// instead for those errors). `PERMISSION_DENIED` must not be\n\t// used if the caller can not be identified (use `UNAUTHENTICATED`\n\t// instead for those errors). This error code does not imply the\n\t// request is valid or the requested entity exists or satisfies\n\t// other pre-conditions.\n\t//\n\t// HTTP Mapping: 403 Forbidden\n\tCode_PERMISSION_DENIED Code = 7\n\t// The request does not have valid authentication credentials for the\n\t// operation.\n\t//\n\t// HTTP Mapping: 401 Unauthorized\n\tCode_UNAUTHENTICATED Code = 16\n\t// Some resource has been exhausted, perhaps a per-user quota, or\n\t// perhaps the entire file system is out of space.\n\t//\n\t// HTTP Mapping: 429 Too Many Requests\n\tCode_RESOURCE_EXHAUSTED Code = 8\n\t// The operation was rejected because the system is not in a state\n\t// required for the operation's execution.  For example, the directory\n\t// to be deleted is non-empty, an rmdir operation is applied to\n\t// a non-directory, etc.\n\t//\n\t// Service implementors can use the following guidelines to decide\n\t// between `FAILED_PRECONDITION`, `ABORTED`, and `UNAVAILABLE`:\n\t//  (a) Use `UNAVAILABLE` if the client can retry just the failing call.\n\t//  (b) Use `ABORTED` if the client should retry at a higher level\n\t//      (e.g., when a client-specified test-and-set fails, indicating the\n\t//      client should restart a read-modify-write sequence).\n\t//  (c) Use `FAILED_PRECONDITION` if the client should not retry until\n\t//      the system state has been explicitly fixed.  E.g., if an \"rmdir\"\n\t//      fails because the directory is non-empty, `FAILED_PRECONDITION`\n\t//      should be returned since the client should not retry unless\n\t//      the files are deleted from the directory.\n\t//\n\t// HTTP Mapping: 400 Bad Request\n\tCode_FAILED_PRECONDITION Code = 9\n\t// The operation was aborted, typically due to a concurrency issue such as\n\t// a sequencer check failure or transaction abort.\n\t//\n\t// See the guidelines above for deciding between `FAILED_PRECONDITION`,\n\t// `ABORTED`, and `UNAVAILABLE`.\n\t//\n\t// HTTP Mapping: 409 Conflict\n\tCode_ABORTED Code = 10\n\t// The operation was attempted past the valid range.  E.g., seeking or\n\t// reading past end-of-file.\n\t//\n\t// Unlike `INVALID_ARGUMENT`, this error indicates a problem that may\n\t// be fixed if the system state changes. For example, a 32-bit file\n\t// system will generate `INVALID_ARGUMENT` if asked to read at an\n\t// offset that is not in the range [0,2^32-1], but it will generate\n\t// `OUT_OF_RANGE` if asked to read from an offset past the current\n\t// file size.\n\t//\n\t// There is a fair bit of overlap between `FAILED_PRECONDITION` and\n\t// `OUT_OF_RANGE`.  We recommend using `OUT_OF_RANGE` (the more specific\n\t// error) when it applies so that callers who are iterating through\n\t// a space can easily look for an `OUT_OF_RANGE` error to detect when\n\t// they are done.\n\t//\n\t// HTTP Mapping: 400 Bad Request\n\tCode_OUT_OF_RANGE Code = 11\n\t// The operation is not implemented or is not supported/enabled in this\n\t// service.\n\t//\n\t// HTTP Mapping: 501 Not Implemented\n\tCode_UNIMPLEMENTED Code = 12\n\t// Internal errors.  This means that some invariants expected by the\n\t// underlying system have been broken.  This error code is reserved\n\t// for serious errors.\n\t//\n\t// HTTP Mapping: 500 Internal Server Error\n\tCode_INTERNAL Code = 13\n\t// The service is currently unavailable.  This is most likely a\n\t// transient condition, which can be corrected by retrying with\n\t// a backoff.\n\t//\n\t// See the guidelines above for deciding between `FAILED_PRECONDITION`,\n\t// `ABORTED`, and `UNAVAILABLE`.\n\t//\n\t// HTTP Mapping: 503 Service Unavailable\n\tCode_UNAVAILABLE Code = 14\n\t// Unrecoverable data loss or corruption.\n\t//\n\t// HTTP Mapping: 500 Internal Server Error\n\tCode_DATA_LOSS Code = 15\n)\n\nvar Code_name = map[int32]string{\n\t0:  \"OK\",\n\t1:  \"CANCELLED\",\n\t2:  \"UNKNOWN\",\n\t3:  \"INVALID_ARGUMENT\",\n\t4:  \"DEADLINE_EXCEEDED\",\n\t5:  \"NOT_FOUND\",\n\t6:  \"ALREADY_EXISTS\",\n\t7:  \"PERMISSION_DENIED\",\n\t16: \"UNAUTHENTICATED\",\n\t8:  \"RESOURCE_EXHAUSTED\",\n\t9:  \"FAILED_PRECONDITION\",\n\t10: \"ABORTED\",\n\t11: \"OUT_OF_RANGE\",\n\t12: \"UNIMPLEMENTED\",\n\t13: \"INTERNAL\",\n\t14: \"UNAVAILABLE\",\n\t15: \"DATA_LOSS\",\n}\n\nvar Code_value = map[string]int32{\n\t\"OK\":                  0,\n\t\"CANCELLED\":           1,\n\t\"UNKNOWN\":             2,\n\t\"INVALID_ARGUMENT\":    3,\n\t\"DEADLINE_EXCEEDED\":   4,\n\t\"NOT_FOUND\":           5,\n\t\"ALREADY_EXISTS\":      6,\n\t\"PERMISSION_DENIED\":   7,\n\t\"UNAUTHENTICATED\":     16,\n\t\"RESOURCE_EXHAUSTED\":  8,\n\t\"FAILED_PRECONDITION\": 9,\n\t\"ABORTED\":             10,\n\t\"OUT_OF_RANGE\":        11,\n\t\"UNIMPLEMENTED\":       12,\n\t\"INTERNAL\":            13,\n\t\"UNAVAILABLE\":         14,\n\t\"DATA_LOSS\":           15,\n}\n\nfunc (x Code) String() string {\n\treturn proto.EnumName(Code_name, int32(x))\n}\n\nfunc (Code) EnumDescriptor() ([]byte, []int) {\n\treturn fileDescriptor_fe593a732623ccf0, []int{0}\n}\n\nfunc init() {\n\tproto.RegisterEnum(\"google.rpc.Code\", Code_name, Code_value)\n}\n\nfunc init() { proto.RegisterFile(\"google/rpc/code.proto\", fileDescriptor_fe593a732623ccf0) }\n\nvar fileDescriptor_fe593a732623ccf0 = []byte{\n\t// 362 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x44, 0x51, 0xcd, 0x6e, 0x93, 0x31,\n\t0x10, 0xa4, 0x69, 0x49, 0x9b, 0xcd, 0xdf, 0xd6, 0xa5, 0xf0, 0x0e, 0x1c, 0x92, 0x43, 0x8f, 0x9c,\n\t0x36, 0x9f, 0x37, 0xad, 0x55, 0x67, 0xfd, 0xc9, 0x3f, 0x25, 0x70, 0xb1, 0x4a, 0x1a, 0x7d, 0x42,\n\t0x2a, 0x75, 0xf4, 0xc1, 0x13, 0xf1, 0x12, 0xbc, 0x1e, 0x72, 0x8b, 0xe8, 0xc5, 0x87, 0x99, 0xf1,\n\t0xee, 0xce, 0x0c, 0x5c, 0x76, 0xa5, 0x74, 0x8f, 0xfb, 0x65, 0x7f, 0xd8, 0x2d, 0x77, 0xe5, 0x61,\n\t0xbf, 0x38, 0xf4, 0xe5, 0x57, 0x51, 0xf0, 0x02, 0x2f, 0xfa, 0xc3, 0xee, 0xe3, 0x9f, 0x01, 0x9c,\n\t0x34, 0xe5, 0x61, 0xaf, 0x86, 0x30, 0x70, 0xb7, 0xf8, 0x46, 0x4d, 0x61, 0xd4, 0x90, 0x34, 0x6c,\n\t0x2d, 0x6b, 0x3c, 0x52, 0x63, 0x38, 0x4d, 0x72, 0x2b, 0xee, 0xb3, 0xe0, 0x40, 0xbd, 0x03, 0x34,\n\t0x72, 0x47, 0xd6, 0xe8, 0x4c, 0xfe, 0x3a, 0x6d, 0x58, 0x22, 0x1e, 0xab, 0x4b, 0x38, 0xd7, 0x4c,\n\t0xda, 0x1a, 0xe1, 0xcc, 0xdb, 0x86, 0x59, 0xb3, 0xc6, 0x93, 0x3a, 0x48, 0x5c, 0xcc, 0x6b, 0x97,\n\t0x44, 0xe3, 0x5b, 0xa5, 0x60, 0x46, 0xd6, 0x33, 0xe9, 0x2f, 0x99, 0xb7, 0x26, 0xc4, 0x80, 0xc3,\n\t0xfa, 0xb3, 0x65, 0xbf, 0x31, 0x21, 0x18, 0x27, 0x59, 0xb3, 0x18, 0xd6, 0x78, 0xaa, 0x2e, 0x60,\n\t0x9e, 0x84, 0x52, 0xbc, 0x61, 0x89, 0xa6, 0xa1, 0xc8, 0x1a, 0x51, 0xbd, 0x07, 0xe5, 0x39, 0xb8,\n\t0xe4, 0x9b, 0xba, 0xe5, 0x86, 0x52, 0xa8, 0xf8, 0x99, 0xfa, 0x00, 0x17, 0x6b, 0x32, 0x96, 0x75,\n\t0x6e, 0x3d, 0x37, 0x4e, 0xb4, 0x89, 0xc6, 0x09, 0x8e, 0xea, 0xe5, 0xb4, 0x72, 0xbe, 0xaa, 0x40,\n\t0x21, 0x4c, 0x5c, 0x8a, 0xd9, 0xad, 0xb3, 0x27, 0xb9, 0x66, 0x1c, 0xab, 0x73, 0x98, 0x26, 0x31,\n\t0x9b, 0xd6, 0x72, 0xb5, 0xc1, 0x1a, 0x27, 0x6a, 0x02, 0x67, 0x46, 0x22, 0x7b, 0x21, 0x8b, 0x53,\n\t0x35, 0x87, 0x71, 0x12, 0xba, 0x23, 0x63, 0x69, 0x65, 0x19, 0x67, 0xd5, 0x90, 0xa6, 0x48, 0xd9,\n\t0xba, 0x10, 0x70, 0xbe, 0xda, 0xc2, 0x6c, 0x57, 0x7e, 0x2c, 0x5e, 0xb3, 0x5c, 0x8d, 0x6a, 0x90,\n\t0x6d, 0x8d, 0xb8, 0x3d, 0xfa, 0x7a, 0xf5, 0x8f, 0xe8, 0xca, 0xe3, 0xfd, 0x53, 0xb7, 0x28, 0x7d,\n\t0xb7, 0xec, 0xf6, 0x4f, 0xcf, 0x05, 0x2c, 0x5f, 0xa8, 0xfb, 0xc3, 0xf7, 0x9f, 0xff, 0xab, 0xf9,\n\t0x54, 0x9f, 0xdf, 0x83, 0x63, 0xdf, 0x36, 0xdf, 0x86, 0xcf, 0xaa, 0xab, 0xbf, 0x01, 0x00, 0x00,\n\t0xff, 0xff, 0x8e, 0x97, 0x77, 0xc2, 0xbf, 0x01, 0x00, 0x00,\n}\n"
  },
  {
    "path": "vendor/google.golang.org/genproto/googleapis/rpc/status/status.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// source: google/rpc/status.proto\n\npackage status\n\nimport (\n\tfmt \"fmt\"\n\tmath \"math\"\n\n\tproto \"github.com/golang/protobuf/proto\"\n\tany \"github.com/golang/protobuf/ptypes/any\"\n)\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar _ = proto.Marshal\nvar _ = fmt.Errorf\nvar _ = math.Inf\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package\n\n// The `Status` type defines a logical error model that is suitable for\n// different programming environments, including REST APIs and RPC APIs. It is\n// used by [gRPC](https://github.com/grpc). The error model is designed to be:\n//\n// - Simple to use and understand for most users\n// - Flexible enough to meet unexpected needs\n//\n// # Overview\n//\n// The `Status` message contains three pieces of data: error code, error\n// message, and error details. The error code should be an enum value of\n// [google.rpc.Code][google.rpc.Code], but it may accept additional error codes\n// if needed.  The error message should be a developer-facing English message\n// that helps developers *understand* and *resolve* the error. If a localized\n// user-facing error message is needed, put the localized message in the error\n// details or localize it in the client. The optional error details may contain\n// arbitrary information about the error. There is a predefined set of error\n// detail types in the package `google.rpc` that can be used for common error\n// conditions.\n//\n// # Language mapping\n//\n// The `Status` message is the logical representation of the error model, but it\n// is not necessarily the actual wire format. When the `Status` message is\n// exposed in different client libraries and different wire protocols, it can be\n// mapped differently. For example, it will likely be mapped to some exceptions\n// in Java, but more likely mapped to some error codes in C.\n//\n// # Other uses\n//\n// The error model and the `Status` message can be used in a variety of\n// environments, either with or without APIs, to provide a\n// consistent developer experience across different environments.\n//\n// Example uses of this error model include:\n//\n// - Partial errors. If a service needs to return partial errors to the client,\n//     it may embed the `Status` in the normal response to indicate the partial\n//     errors.\n//\n// - Workflow errors. A typical workflow has multiple steps. Each step may\n//     have a `Status` message for error reporting.\n//\n// - Batch operations. If a client uses batch request and batch response, the\n//     `Status` message should be used directly inside batch response, one for\n//     each error sub-response.\n//\n// - Asynchronous operations. If an API call embeds asynchronous operation\n//     results in its response, the status of those operations should be\n//     represented directly using the `Status` message.\n//\n// - Logging. If some API errors are stored in logs, the message `Status` could\n//     be used directly after any stripping needed for security/privacy reasons.\ntype Status struct {\n\t// The status code, which should be an enum value of\n\t// [google.rpc.Code][google.rpc.Code].\n\tCode int32 `protobuf:\"varint,1,opt,name=code,proto3\" json:\"code,omitempty\"`\n\t// A developer-facing error message, which should be in English. Any\n\t// user-facing error message should be localized and sent in the\n\t// [google.rpc.Status.details][google.rpc.Status.details] field, or localized\n\t// by the client.\n\tMessage string `protobuf:\"bytes,2,opt,name=message,proto3\" json:\"message,omitempty\"`\n\t// A list of messages that carry the error details.  There is a common set of\n\t// message types for APIs to use.\n\tDetails              []*any.Any `protobuf:\"bytes,3,rep,name=details,proto3\" json:\"details,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}   `json:\"-\"`\n\tXXX_unrecognized     []byte     `json:\"-\"`\n\tXXX_sizecache        int32      `json:\"-\"`\n}\n\nfunc (m *Status) Reset()         { *m = Status{} }\nfunc (m *Status) String() string { return proto.CompactTextString(m) }\nfunc (*Status) ProtoMessage()    {}\nfunc (*Status) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_24d244abaf643bfe, []int{0}\n}\n\nfunc (m *Status) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_Status.Unmarshal(m, b)\n}\nfunc (m *Status) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_Status.Marshal(b, m, deterministic)\n}\nfunc (m *Status) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Status.Merge(m, src)\n}\nfunc (m *Status) XXX_Size() int {\n\treturn xxx_messageInfo_Status.Size(m)\n}\nfunc (m *Status) XXX_DiscardUnknown() {\n\txxx_messageInfo_Status.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Status proto.InternalMessageInfo\n\nfunc (m *Status) GetCode() int32 {\n\tif m != nil {\n\t\treturn m.Code\n\t}\n\treturn 0\n}\n\nfunc (m *Status) GetMessage() string {\n\tif m != nil {\n\t\treturn m.Message\n\t}\n\treturn \"\"\n}\n\nfunc (m *Status) GetDetails() []*any.Any {\n\tif m != nil {\n\t\treturn m.Details\n\t}\n\treturn nil\n}\n\nfunc init() {\n\tproto.RegisterType((*Status)(nil), \"google.rpc.Status\")\n}\n\nfunc init() { proto.RegisterFile(\"google/rpc/status.proto\", fileDescriptor_24d244abaf643bfe) }\n\nvar fileDescriptor_24d244abaf643bfe = []byte{\n\t// 209 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0x4f, 0xcf, 0xcf, 0x4f,\n\t0xcf, 0x49, 0xd5, 0x2f, 0x2a, 0x48, 0xd6, 0x2f, 0x2e, 0x49, 0x2c, 0x29, 0x2d, 0xd6, 0x2b, 0x28,\n\t0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x82, 0x48, 0xe8, 0x15, 0x15, 0x24, 0x4b, 0x49, 0x42, 0x15, 0x81,\n\t0x65, 0x92, 0x4a, 0xd3, 0xf4, 0x13, 0xf3, 0x2a, 0x21, 0xca, 0x94, 0xd2, 0xb8, 0xd8, 0x82, 0xc1,\n\t0xda, 0x84, 0x84, 0xb8, 0x58, 0x92, 0xf3, 0x53, 0x52, 0x25, 0x18, 0x15, 0x18, 0x35, 0x58, 0x83,\n\t0xc0, 0x6c, 0x21, 0x09, 0x2e, 0xf6, 0xdc, 0xd4, 0xe2, 0xe2, 0xc4, 0xf4, 0x54, 0x09, 0x26, 0x05,\n\t0x46, 0x0d, 0xce, 0x20, 0x18, 0x57, 0x48, 0x8f, 0x8b, 0x3d, 0x25, 0xb5, 0x24, 0x31, 0x33, 0xa7,\n\t0x58, 0x82, 0x59, 0x81, 0x59, 0x83, 0xdb, 0x48, 0x44, 0x0f, 0x6a, 0x21, 0xcc, 0x12, 0x3d, 0xc7,\n\t0xbc, 0xca, 0x20, 0x98, 0x22, 0xa7, 0x38, 0x2e, 0xbe, 0xe4, 0xfc, 0x5c, 0x3d, 0x84, 0xa3, 0x9c,\n\t0xb8, 0x21, 0xf6, 0x06, 0x80, 0x94, 0x07, 0x30, 0x46, 0x99, 0x43, 0xa5, 0xd2, 0xf3, 0x73, 0x12,\n\t0xf3, 0xd2, 0xf5, 0xf2, 0x8b, 0xd2, 0xf5, 0xd3, 0x53, 0xf3, 0xc0, 0x86, 0xe9, 0x43, 0xa4, 0x12,\n\t0x0b, 0x32, 0x8b, 0x91, 0xfc, 0x69, 0x0d, 0xa1, 0x16, 0x31, 0x31, 0x07, 0x05, 0x38, 0x27, 0xb1,\n\t0x81, 0x55, 0x1a, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0xa4, 0x53, 0xf0, 0x7c, 0x10, 0x01, 0x00,\n\t0x00,\n}\n"
  },
  {
    "path": "vendor/google.golang.org/genproto/googleapis/type/expr/expr.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// source: google/type/expr.proto\n\npackage expr\n\nimport (\n\tfmt \"fmt\"\n\tmath \"math\"\n\n\tproto \"github.com/golang/protobuf/proto\"\n)\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar _ = proto.Marshal\nvar _ = fmt.Errorf\nvar _ = math.Inf\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package\n\n// Represents an expression text. Example:\n//\n//     title: \"User account presence\"\n//     description: \"Determines whether the request has a user account\"\n//     expression: \"size(request.user) > 0\"\ntype Expr struct {\n\t// Textual representation of an expression in\n\t// Common Expression Language syntax.\n\t//\n\t// The application context of the containing message determines which\n\t// well-known feature set of CEL is supported.\n\tExpression string `protobuf:\"bytes,1,opt,name=expression,proto3\" json:\"expression,omitempty\"`\n\t// An optional title for the expression, i.e. a short string describing\n\t// its purpose. This can be used e.g. in UIs which allow to enter the\n\t// expression.\n\tTitle string `protobuf:\"bytes,2,opt,name=title,proto3\" json:\"title,omitempty\"`\n\t// An optional description of the expression. This is a longer text which\n\t// describes the expression, e.g. when hovered over it in a UI.\n\tDescription string `protobuf:\"bytes,3,opt,name=description,proto3\" json:\"description,omitempty\"`\n\t// An optional string indicating the location of the expression for error\n\t// reporting, e.g. a file name and a position in the file.\n\tLocation             string   `protobuf:\"bytes,4,opt,name=location,proto3\" json:\"location,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *Expr) Reset()         { *m = Expr{} }\nfunc (m *Expr) String() string { return proto.CompactTextString(m) }\nfunc (*Expr) ProtoMessage()    {}\nfunc (*Expr) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_d7920f1ae7a2722f, []int{0}\n}\n\nfunc (m *Expr) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_Expr.Unmarshal(m, b)\n}\nfunc (m *Expr) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_Expr.Marshal(b, m, deterministic)\n}\nfunc (m *Expr) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Expr.Merge(m, src)\n}\nfunc (m *Expr) XXX_Size() int {\n\treturn xxx_messageInfo_Expr.Size(m)\n}\nfunc (m *Expr) XXX_DiscardUnknown() {\n\txxx_messageInfo_Expr.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Expr proto.InternalMessageInfo\n\nfunc (m *Expr) GetExpression() string {\n\tif m != nil {\n\t\treturn m.Expression\n\t}\n\treturn \"\"\n}\n\nfunc (m *Expr) GetTitle() string {\n\tif m != nil {\n\t\treturn m.Title\n\t}\n\treturn \"\"\n}\n\nfunc (m *Expr) GetDescription() string {\n\tif m != nil {\n\t\treturn m.Description\n\t}\n\treturn \"\"\n}\n\nfunc (m *Expr) GetLocation() string {\n\tif m != nil {\n\t\treturn m.Location\n\t}\n\treturn \"\"\n}\n\nfunc init() {\n\tproto.RegisterType((*Expr)(nil), \"google.type.Expr\")\n}\n\nfunc init() { proto.RegisterFile(\"google/type/expr.proto\", fileDescriptor_d7920f1ae7a2722f) }\n\nvar fileDescriptor_d7920f1ae7a2722f = []byte{\n\t// 195 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0x4b, 0xcf, 0xcf, 0x4f,\n\t0xcf, 0x49, 0xd5, 0x2f, 0xa9, 0x2c, 0x48, 0xd5, 0x4f, 0xad, 0x28, 0x28, 0xd2, 0x2b, 0x28, 0xca,\n\t0x2f, 0xc9, 0x17, 0xe2, 0x86, 0x88, 0xeb, 0x81, 0xc4, 0x95, 0xaa, 0xb8, 0x58, 0x5c, 0x2b, 0x0a,\n\t0x8a, 0x84, 0xe4, 0xb8, 0xb8, 0x40, 0x4a, 0x52, 0x8b, 0x8b, 0x33, 0xf3, 0xf3, 0x24, 0x18, 0x15,\n\t0x18, 0x35, 0x38, 0x83, 0x90, 0x44, 0x84, 0x44, 0xb8, 0x58, 0x4b, 0x32, 0x4b, 0x72, 0x52, 0x25,\n\t0x98, 0xc0, 0x52, 0x10, 0x8e, 0x90, 0x02, 0x17, 0x77, 0x4a, 0x6a, 0x71, 0x72, 0x51, 0x66, 0x41,\n\t0x09, 0x48, 0x1b, 0x33, 0x58, 0x0e, 0x59, 0x48, 0x48, 0x8a, 0x8b, 0x23, 0x27, 0x3f, 0x39, 0x11,\n\t0x2c, 0xcd, 0x02, 0x96, 0x86, 0xf3, 0x9d, 0xa2, 0xb8, 0xf8, 0x93, 0xf3, 0x73, 0xf5, 0x90, 0x9c,\n\t0xe3, 0xc4, 0x09, 0x72, 0x4c, 0x00, 0xc8, 0x99, 0x01, 0x8c, 0x51, 0x26, 0x50, 0x99, 0xf4, 0xfc,\n\t0x9c, 0xc4, 0xbc, 0x74, 0xbd, 0xfc, 0xa2, 0x74, 0xfd, 0xf4, 0xd4, 0x3c, 0xb0, 0x27, 0xf4, 0x21,\n\t0x52, 0x89, 0x05, 0x99, 0xc5, 0x08, 0xff, 0x59, 0x83, 0x88, 0x45, 0x4c, 0xcc, 0xee, 0x21, 0x01,\n\t0x49, 0x6c, 0x60, 0x65, 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0xe7, 0x67, 0x9e, 0xf5, 0x05,\n\t0x01, 0x00, 0x00,\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/LICENSE",
    "content": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/backoff.go",
    "content": "/*\n *\n * Copyright 2017 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n// See internal/backoff package for the backoff implementation. This file is\n// kept for the exported types and API backward compatibility.\n\npackage grpc\n\nimport (\n\t\"time\"\n)\n\n// DefaultBackoffConfig uses values specified for backoff in\n// https://github.com/grpc/grpc/blob/master/doc/connection-backoff.md.\nvar DefaultBackoffConfig = BackoffConfig{\n\tMaxDelay: 120 * time.Second,\n}\n\n// BackoffConfig defines the parameters for the default gRPC backoff strategy.\ntype BackoffConfig struct {\n\t// MaxDelay is the upper bound of backoff delay.\n\tMaxDelay time.Duration\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/balancer/balancer.go",
    "content": "/*\n *\n * Copyright 2017 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n// Package balancer defines APIs for load balancing in gRPC.\n// All APIs in this package are experimental.\npackage balancer\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"net\"\n\t\"strings\"\n\n\t\"google.golang.org/grpc/connectivity\"\n\t\"google.golang.org/grpc/credentials\"\n\t\"google.golang.org/grpc/internal\"\n\t\"google.golang.org/grpc/metadata\"\n\t\"google.golang.org/grpc/resolver\"\n\t\"google.golang.org/grpc/serviceconfig\"\n)\n\nvar (\n\t// m is a map from name to balancer builder.\n\tm = make(map[string]Builder)\n)\n\n// Register registers the balancer builder to the balancer map. b.Name\n// (lowercased) will be used as the name registered with this builder.  If the\n// Builder implements ConfigParser, ParseConfig will be called when new service\n// configs are received by the resolver, and the result will be provided to the\n// Balancer in UpdateClientConnState.\n//\n// NOTE: this function must only be called during initialization time (i.e. in\n// an init() function), and is not thread-safe. If multiple Balancers are\n// registered with the same name, the one registered last will take effect.\nfunc Register(b Builder) {\n\tm[strings.ToLower(b.Name())] = b\n}\n\n// unregisterForTesting deletes the balancer with the given name from the\n// balancer map.\n//\n// This function is not thread-safe.\nfunc unregisterForTesting(name string) {\n\tdelete(m, name)\n}\n\nfunc init() {\n\tinternal.BalancerUnregister = unregisterForTesting\n}\n\n// Get returns the resolver builder registered with the given name.\n// Note that the compare is done in a case-insensitive fashion.\n// If no builder is register with the name, nil will be returned.\nfunc Get(name string) Builder {\n\tif b, ok := m[strings.ToLower(name)]; ok {\n\t\treturn b\n\t}\n\treturn nil\n}\n\n// SubConn represents a gRPC sub connection.\n// Each sub connection contains a list of addresses. gRPC will\n// try to connect to them (in sequence), and stop trying the\n// remainder once one connection is successful.\n//\n// The reconnect backoff will be applied on the list, not a single address.\n// For example, try_on_all_addresses -> backoff -> try_on_all_addresses.\n//\n// All SubConns start in IDLE, and will not try to connect. To trigger\n// the connecting, Balancers must call Connect.\n// When the connection encounters an error, it will reconnect immediately.\n// When the connection becomes IDLE, it will not reconnect unless Connect is\n// called.\n//\n// This interface is to be implemented by gRPC. Users should not need a\n// brand new implementation of this interface. For the situations like\n// testing, the new implementation should embed this interface. This allows\n// gRPC to add new methods to this interface.\ntype SubConn interface {\n\t// UpdateAddresses updates the addresses used in this SubConn.\n\t// gRPC checks if currently-connected address is still in the new list.\n\t// If it's in the list, the connection will be kept.\n\t// If it's not in the list, the connection will gracefully closed, and\n\t// a new connection will be created.\n\t//\n\t// This will trigger a state transition for the SubConn.\n\tUpdateAddresses([]resolver.Address)\n\t// Connect starts the connecting for this SubConn.\n\tConnect()\n}\n\n// NewSubConnOptions contains options to create new SubConn.\ntype NewSubConnOptions struct {\n\t// CredsBundle is the credentials bundle that will be used in the created\n\t// SubConn. If it's nil, the original creds from grpc DialOptions will be\n\t// used.\n\tCredsBundle credentials.Bundle\n\t// HealthCheckEnabled indicates whether health check service should be\n\t// enabled on this SubConn\n\tHealthCheckEnabled bool\n}\n\n// ClientConn represents a gRPC ClientConn.\n//\n// This interface is to be implemented by gRPC. Users should not need a\n// brand new implementation of this interface. For the situations like\n// testing, the new implementation should embed this interface. This allows\n// gRPC to add new methods to this interface.\ntype ClientConn interface {\n\t// NewSubConn is called by balancer to create a new SubConn.\n\t// It doesn't block and wait for the connections to be established.\n\t// Behaviors of the SubConn can be controlled by options.\n\tNewSubConn([]resolver.Address, NewSubConnOptions) (SubConn, error)\n\t// RemoveSubConn removes the SubConn from ClientConn.\n\t// The SubConn will be shutdown.\n\tRemoveSubConn(SubConn)\n\n\t// UpdateBalancerState is called by balancer to notify gRPC that some internal\n\t// state in balancer has changed.\n\t//\n\t// gRPC will update the connectivity state of the ClientConn, and will call pick\n\t// on the new picker to pick new SubConn.\n\tUpdateBalancerState(s connectivity.State, p Picker)\n\n\t// ResolveNow is called by balancer to notify gRPC to do a name resolving.\n\tResolveNow(resolver.ResolveNowOption)\n\n\t// Target returns the dial target for this ClientConn.\n\t//\n\t// Deprecated: Use the Target field in the BuildOptions instead.\n\tTarget() string\n}\n\n// BuildOptions contains additional information for Build.\ntype BuildOptions struct {\n\t// DialCreds is the transport credential the Balancer implementation can\n\t// use to dial to a remote load balancer server. The Balancer implementations\n\t// can ignore this if it does not need to talk to another party securely.\n\tDialCreds credentials.TransportCredentials\n\t// CredsBundle is the credentials bundle that the Balancer can use.\n\tCredsBundle credentials.Bundle\n\t// Dialer is the custom dialer the Balancer implementation can use to dial\n\t// to a remote load balancer server. The Balancer implementations\n\t// can ignore this if it doesn't need to talk to remote balancer.\n\tDialer func(context.Context, string) (net.Conn, error)\n\t// ChannelzParentID is the entity parent's channelz unique identification number.\n\tChannelzParentID int64\n\t// Target contains the parsed address info of the dial target. It is the same resolver.Target as\n\t// passed to the resolver.\n\t// See the documentation for the resolver.Target type for details about what it contains.\n\tTarget resolver.Target\n}\n\n// Builder creates a balancer.\ntype Builder interface {\n\t// Build creates a new balancer with the ClientConn.\n\tBuild(cc ClientConn, opts BuildOptions) Balancer\n\t// Name returns the name of balancers built by this builder.\n\t// It will be used to pick balancers (for example in service config).\n\tName() string\n}\n\n// ConfigParser parses load balancer configs.\ntype ConfigParser interface {\n\t// ParseConfig parses the JSON load balancer config provided into an\n\t// internal form or returns an error if the config is invalid.  For future\n\t// compatibility reasons, unknown fields in the config should be ignored.\n\tParseConfig(LoadBalancingConfigJSON json.RawMessage) (serviceconfig.LoadBalancingConfig, error)\n}\n\n// PickOptions contains addition information for the Pick operation.\ntype PickOptions struct {\n\t// FullMethodName is the method name that NewClientStream() is called\n\t// with. The canonical format is /service/Method.\n\tFullMethodName string\n}\n\n// DoneInfo contains additional information for done.\ntype DoneInfo struct {\n\t// Err is the rpc error the RPC finished with. It could be nil.\n\tErr error\n\t// Trailer contains the metadata from the RPC's trailer, if present.\n\tTrailer metadata.MD\n\t// BytesSent indicates if any bytes have been sent to the server.\n\tBytesSent bool\n\t// BytesReceived indicates if any byte has been received from the server.\n\tBytesReceived bool\n\t// ServerLoad is the load received from server. It's usually sent as part of\n\t// trailing metadata.\n\t//\n\t// The only supported type now is *orca_v1.LoadReport.\n\tServerLoad interface{}\n}\n\nvar (\n\t// ErrNoSubConnAvailable indicates no SubConn is available for pick().\n\t// gRPC will block the RPC until a new picker is available via UpdateBalancerState().\n\tErrNoSubConnAvailable = errors.New(\"no SubConn is available\")\n\t// ErrTransientFailure indicates all SubConns are in TransientFailure.\n\t// WaitForReady RPCs will block, non-WaitForReady RPCs will fail.\n\tErrTransientFailure = errors.New(\"all SubConns are in TransientFailure\")\n)\n\n// Picker is used by gRPC to pick a SubConn to send an RPC.\n// Balancer is expected to generate a new picker from its snapshot every time its\n// internal state has changed.\n//\n// The pickers used by gRPC can be updated by ClientConn.UpdateBalancerState().\ntype Picker interface {\n\t// Pick returns the SubConn to be used to send the RPC.\n\t// The returned SubConn must be one returned by NewSubConn().\n\t//\n\t// This functions is expected to return:\n\t// - a SubConn that is known to be READY;\n\t// - ErrNoSubConnAvailable if no SubConn is available, but progress is being\n\t//   made (for example, some SubConn is in CONNECTING mode);\n\t// - other errors if no active connecting is happening (for example, all SubConn\n\t//   are in TRANSIENT_FAILURE mode).\n\t//\n\t// If a SubConn is returned:\n\t// - If it is READY, gRPC will send the RPC on it;\n\t// - If it is not ready, or becomes not ready after it's returned, gRPC will\n\t//   block until UpdateBalancerState() is called and will call pick on the\n\t//   new picker. The done function returned from Pick(), if not nil, will be\n\t//   called with nil error, no bytes sent and no bytes received.\n\t//\n\t// If the returned error is not nil:\n\t// - If the error is ErrNoSubConnAvailable, gRPC will block until UpdateBalancerState()\n\t// - If the error is ErrTransientFailure:\n\t//   - If the RPC is wait-for-ready, gRPC will block until UpdateBalancerState()\n\t//     is called to pick again;\n\t//   - Otherwise, RPC will fail with unavailable error.\n\t// - Else (error is other non-nil error):\n\t//   - The RPC will fail with unavailable error.\n\t//\n\t// The returned done() function will be called once the rpc has finished,\n\t// with the final status of that RPC.  If the SubConn returned is not a\n\t// valid SubConn type, done may not be called.  done may be nil if balancer\n\t// doesn't care about the RPC status.\n\tPick(ctx context.Context, opts PickOptions) (conn SubConn, done func(DoneInfo), err error)\n}\n\n// Balancer takes input from gRPC, manages SubConns, and collects and aggregates\n// the connectivity states.\n//\n// It also generates and updates the Picker used by gRPC to pick SubConns for RPCs.\n//\n// HandleSubConnectionStateChange, HandleResolvedAddrs and Close are guaranteed\n// to be called synchronously from the same goroutine.\n// There's no guarantee on picker.Pick, it may be called anytime.\ntype Balancer interface {\n\t// HandleSubConnStateChange is called by gRPC when the connectivity state\n\t// of sc has changed.\n\t// Balancer is expected to aggregate all the state of SubConn and report\n\t// that back to gRPC.\n\t// Balancer should also generate and update Pickers when its internal state has\n\t// been changed by the new state.\n\t//\n\t// Deprecated: if V2Balancer is implemented by the Balancer,\n\t// UpdateSubConnState will be called instead.\n\tHandleSubConnStateChange(sc SubConn, state connectivity.State)\n\t// HandleResolvedAddrs is called by gRPC to send updated resolved addresses to\n\t// balancers.\n\t// Balancer can create new SubConn or remove SubConn with the addresses.\n\t// An empty address slice and a non-nil error will be passed if the resolver returns\n\t// non-nil error to gRPC.\n\t//\n\t// Deprecated: if V2Balancer is implemented by the Balancer,\n\t// UpdateClientConnState will be called instead.\n\tHandleResolvedAddrs([]resolver.Address, error)\n\t// Close closes the balancer. The balancer is not required to call\n\t// ClientConn.RemoveSubConn for its existing SubConns.\n\tClose()\n}\n\n// SubConnState describes the state of a SubConn.\ntype SubConnState struct {\n\tConnectivityState connectivity.State\n\t// TODO: add last connection error\n}\n\n// ClientConnState describes the state of a ClientConn relevant to the\n// balancer.\ntype ClientConnState struct {\n\tResolverState resolver.State\n\t// The parsed load balancing configuration returned by the builder's\n\t// ParseConfig method, if implemented.\n\tBalancerConfig serviceconfig.LoadBalancingConfig\n}\n\n// V2Balancer is defined for documentation purposes.  If a Balancer also\n// implements V2Balancer, its UpdateClientConnState method will be called\n// instead of HandleResolvedAddrs and its UpdateSubConnState will be called\n// instead of HandleSubConnStateChange.\ntype V2Balancer interface {\n\t// UpdateClientConnState is called by gRPC when the state of the ClientConn\n\t// changes.\n\tUpdateClientConnState(ClientConnState)\n\t// UpdateSubConnState is called by gRPC when the state of a SubConn\n\t// changes.\n\tUpdateSubConnState(SubConn, SubConnState)\n\t// Close closes the balancer. The balancer is not required to call\n\t// ClientConn.RemoveSubConn for its existing SubConns.\n\tClose()\n}\n\n// ConnectivityStateEvaluator takes the connectivity states of multiple SubConns\n// and returns one aggregated connectivity state.\n//\n// It's not thread safe.\ntype ConnectivityStateEvaluator struct {\n\tnumReady            uint64 // Number of addrConns in ready state.\n\tnumConnecting       uint64 // Number of addrConns in connecting state.\n\tnumTransientFailure uint64 // Number of addrConns in transientFailure.\n}\n\n// RecordTransition records state change happening in subConn and based on that\n// it evaluates what aggregated state should be.\n//\n//  - If at least one SubConn in Ready, the aggregated state is Ready;\n//  - Else if at least one SubConn in Connecting, the aggregated state is Connecting;\n//  - Else the aggregated state is TransientFailure.\n//\n// Idle and Shutdown are not considered.\nfunc (cse *ConnectivityStateEvaluator) RecordTransition(oldState, newState connectivity.State) connectivity.State {\n\t// Update counters.\n\tfor idx, state := range []connectivity.State{oldState, newState} {\n\t\tupdateVal := 2*uint64(idx) - 1 // -1 for oldState and +1 for new.\n\t\tswitch state {\n\t\tcase connectivity.Ready:\n\t\t\tcse.numReady += updateVal\n\t\tcase connectivity.Connecting:\n\t\t\tcse.numConnecting += updateVal\n\t\tcase connectivity.TransientFailure:\n\t\t\tcse.numTransientFailure += updateVal\n\t\t}\n\t}\n\n\t// Evaluate.\n\tif cse.numReady > 0 {\n\t\treturn connectivity.Ready\n\t}\n\tif cse.numConnecting > 0 {\n\t\treturn connectivity.Connecting\n\t}\n\treturn connectivity.TransientFailure\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/balancer/base/balancer.go",
    "content": "/*\n *\n * Copyright 2017 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\npackage base\n\nimport (\n\t\"context\"\n\n\t\"google.golang.org/grpc/balancer\"\n\t\"google.golang.org/grpc/connectivity\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/grpc/resolver\"\n)\n\ntype baseBuilder struct {\n\tname          string\n\tpickerBuilder PickerBuilder\n\tconfig        Config\n}\n\nfunc (bb *baseBuilder) Build(cc balancer.ClientConn, opt balancer.BuildOptions) balancer.Balancer {\n\treturn &baseBalancer{\n\t\tcc:            cc,\n\t\tpickerBuilder: bb.pickerBuilder,\n\n\t\tsubConns: make(map[resolver.Address]balancer.SubConn),\n\t\tscStates: make(map[balancer.SubConn]connectivity.State),\n\t\tcsEvltr:  &balancer.ConnectivityStateEvaluator{},\n\t\t// Initialize picker to a picker that always return\n\t\t// ErrNoSubConnAvailable, because when state of a SubConn changes, we\n\t\t// may call UpdateBalancerState with this picker.\n\t\tpicker: NewErrPicker(balancer.ErrNoSubConnAvailable),\n\t\tconfig: bb.config,\n\t}\n}\n\nfunc (bb *baseBuilder) Name() string {\n\treturn bb.name\n}\n\ntype baseBalancer struct {\n\tcc            balancer.ClientConn\n\tpickerBuilder PickerBuilder\n\n\tcsEvltr *balancer.ConnectivityStateEvaluator\n\tstate   connectivity.State\n\n\tsubConns map[resolver.Address]balancer.SubConn\n\tscStates map[balancer.SubConn]connectivity.State\n\tpicker   balancer.Picker\n\tconfig   Config\n}\n\nfunc (b *baseBalancer) HandleResolvedAddrs(addrs []resolver.Address, err error) {\n\tpanic(\"not implemented\")\n}\n\nfunc (b *baseBalancer) UpdateClientConnState(s balancer.ClientConnState) {\n\t// TODO: handle s.ResolverState.Err (log if not nil) once implemented.\n\t// TODO: handle s.ResolverState.ServiceConfig?\n\tgrpclog.Infoln(\"base.baseBalancer: got new ClientConn state: \", s)\n\t// addrsSet is the set converted from addrs, it's used for quick lookup of an address.\n\taddrsSet := make(map[resolver.Address]struct{})\n\tfor _, a := range s.ResolverState.Addresses {\n\t\taddrsSet[a] = struct{}{}\n\t\tif _, ok := b.subConns[a]; !ok {\n\t\t\t// a is a new address (not existing in b.subConns).\n\t\t\tsc, err := b.cc.NewSubConn([]resolver.Address{a}, balancer.NewSubConnOptions{HealthCheckEnabled: b.config.HealthCheck})\n\t\t\tif err != nil {\n\t\t\t\tgrpclog.Warningf(\"base.baseBalancer: failed to create new SubConn: %v\", err)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tb.subConns[a] = sc\n\t\t\tb.scStates[sc] = connectivity.Idle\n\t\t\tsc.Connect()\n\t\t}\n\t}\n\tfor a, sc := range b.subConns {\n\t\t// a was removed by resolver.\n\t\tif _, ok := addrsSet[a]; !ok {\n\t\t\tb.cc.RemoveSubConn(sc)\n\t\t\tdelete(b.subConns, a)\n\t\t\t// Keep the state of this sc in b.scStates until sc's state becomes Shutdown.\n\t\t\t// The entry will be deleted in HandleSubConnStateChange.\n\t\t}\n\t}\n}\n\n// regeneratePicker takes a snapshot of the balancer, and generates a picker\n// from it. The picker is\n//  - errPicker with ErrTransientFailure if the balancer is in TransientFailure,\n//  - built by the pickerBuilder with all READY SubConns otherwise.\nfunc (b *baseBalancer) regeneratePicker() {\n\tif b.state == connectivity.TransientFailure {\n\t\tb.picker = NewErrPicker(balancer.ErrTransientFailure)\n\t\treturn\n\t}\n\treadySCs := make(map[resolver.Address]balancer.SubConn)\n\n\t// Filter out all ready SCs from full subConn map.\n\tfor addr, sc := range b.subConns {\n\t\tif st, ok := b.scStates[sc]; ok && st == connectivity.Ready {\n\t\t\treadySCs[addr] = sc\n\t\t}\n\t}\n\tb.picker = b.pickerBuilder.Build(readySCs)\n}\n\nfunc (b *baseBalancer) HandleSubConnStateChange(sc balancer.SubConn, s connectivity.State) {\n\tpanic(\"not implemented\")\n}\n\nfunc (b *baseBalancer) UpdateSubConnState(sc balancer.SubConn, state balancer.SubConnState) {\n\ts := state.ConnectivityState\n\tgrpclog.Infof(\"base.baseBalancer: handle SubConn state change: %p, %v\", sc, s)\n\toldS, ok := b.scStates[sc]\n\tif !ok {\n\t\tgrpclog.Infof(\"base.baseBalancer: got state changes for an unknown SubConn: %p, %v\", sc, s)\n\t\treturn\n\t}\n\tb.scStates[sc] = s\n\tswitch s {\n\tcase connectivity.Idle:\n\t\tsc.Connect()\n\tcase connectivity.Shutdown:\n\t\t// When an address was removed by resolver, b called RemoveSubConn but\n\t\t// kept the sc's state in scStates. Remove state for this sc here.\n\t\tdelete(b.scStates, sc)\n\t}\n\n\toldAggrState := b.state\n\tb.state = b.csEvltr.RecordTransition(oldS, s)\n\n\t// Regenerate picker when one of the following happens:\n\t//  - this sc became ready from not-ready\n\t//  - this sc became not-ready from ready\n\t//  - the aggregated state of balancer became TransientFailure from non-TransientFailure\n\t//  - the aggregated state of balancer became non-TransientFailure from TransientFailure\n\tif (s == connectivity.Ready) != (oldS == connectivity.Ready) ||\n\t\t(b.state == connectivity.TransientFailure) != (oldAggrState == connectivity.TransientFailure) {\n\t\tb.regeneratePicker()\n\t}\n\n\tb.cc.UpdateBalancerState(b.state, b.picker)\n}\n\n// Close is a nop because base balancer doesn't have internal state to clean up,\n// and it doesn't need to call RemoveSubConn for the SubConns.\nfunc (b *baseBalancer) Close() {\n}\n\n// NewErrPicker returns a picker that always returns err on Pick().\nfunc NewErrPicker(err error) balancer.Picker {\n\treturn &errPicker{err: err}\n}\n\ntype errPicker struct {\n\terr error // Pick() always returns this err.\n}\n\nfunc (p *errPicker) Pick(ctx context.Context, opts balancer.PickOptions) (balancer.SubConn, func(balancer.DoneInfo), error) {\n\treturn nil, nil, p.err\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/balancer/base/base.go",
    "content": "/*\n *\n * Copyright 2017 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n// Package base defines a balancer base that can be used to build balancers with\n// different picking algorithms.\n//\n// The base balancer creates a new SubConn for each resolved address. The\n// provided picker will only be notified about READY SubConns.\n//\n// This package is the base of round_robin balancer, its purpose is to be used\n// to build round_robin like balancers with complex picking algorithms.\n// Balancers with more complicated logic should try to implement a balancer\n// builder from scratch.\n//\n// All APIs in this package are experimental.\npackage base\n\nimport (\n\t\"google.golang.org/grpc/balancer\"\n\t\"google.golang.org/grpc/resolver\"\n)\n\n// PickerBuilder creates balancer.Picker.\ntype PickerBuilder interface {\n\t// Build takes a slice of ready SubConns, and returns a picker that will be\n\t// used by gRPC to pick a SubConn.\n\tBuild(readySCs map[resolver.Address]balancer.SubConn) balancer.Picker\n}\n\n// NewBalancerBuilder returns a balancer builder. The balancers\n// built by this builder will use the picker builder to build pickers.\nfunc NewBalancerBuilder(name string, pb PickerBuilder) balancer.Builder {\n\treturn NewBalancerBuilderWithConfig(name, pb, Config{})\n}\n\n// Config contains the config info about the base balancer builder.\ntype Config struct {\n\t// HealthCheck indicates whether health checking should be enabled for this specific balancer.\n\tHealthCheck bool\n}\n\n// NewBalancerBuilderWithConfig returns a base balancer builder configured by the provided config.\nfunc NewBalancerBuilderWithConfig(name string, pb PickerBuilder, config Config) balancer.Builder {\n\treturn &baseBuilder{\n\t\tname:          name,\n\t\tpickerBuilder: pb,\n\t\tconfig:        config,\n\t}\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/balancer/roundrobin/roundrobin.go",
    "content": "/*\n *\n * Copyright 2017 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n// Package roundrobin defines a roundrobin balancer. Roundrobin balancer is\n// installed as one of the default balancers in gRPC, users don't need to\n// explicitly install this balancer.\npackage roundrobin\n\nimport (\n\t\"context\"\n\t\"sync\"\n\n\t\"google.golang.org/grpc/balancer\"\n\t\"google.golang.org/grpc/balancer/base\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/grpc/internal/grpcrand\"\n\t\"google.golang.org/grpc/resolver\"\n)\n\n// Name is the name of round_robin balancer.\nconst Name = \"round_robin\"\n\n// newBuilder creates a new roundrobin balancer builder.\nfunc newBuilder() balancer.Builder {\n\treturn base.NewBalancerBuilderWithConfig(Name, &rrPickerBuilder{}, base.Config{HealthCheck: true})\n}\n\nfunc init() {\n\tbalancer.Register(newBuilder())\n}\n\ntype rrPickerBuilder struct{}\n\nfunc (*rrPickerBuilder) Build(readySCs map[resolver.Address]balancer.SubConn) balancer.Picker {\n\tgrpclog.Infof(\"roundrobinPicker: newPicker called with readySCs: %v\", readySCs)\n\tif len(readySCs) == 0 {\n\t\treturn base.NewErrPicker(balancer.ErrNoSubConnAvailable)\n\t}\n\tvar scs []balancer.SubConn\n\tfor _, sc := range readySCs {\n\t\tscs = append(scs, sc)\n\t}\n\treturn &rrPicker{\n\t\tsubConns: scs,\n\t\t// Start at a random index, as the same RR balancer rebuilds a new\n\t\t// picker when SubConn states change, and we don't want to apply excess\n\t\t// load to the first server in the list.\n\t\tnext: grpcrand.Intn(len(scs)),\n\t}\n}\n\ntype rrPicker struct {\n\t// subConns is the snapshot of the roundrobin balancer when this picker was\n\t// created. The slice is immutable. Each Get() will do a round robin\n\t// selection from it and return the selected SubConn.\n\tsubConns []balancer.SubConn\n\n\tmu   sync.Mutex\n\tnext int\n}\n\nfunc (p *rrPicker) Pick(ctx context.Context, opts balancer.PickOptions) (balancer.SubConn, func(balancer.DoneInfo), error) {\n\tp.mu.Lock()\n\tsc := p.subConns[p.next]\n\tp.next = (p.next + 1) % len(p.subConns)\n\tp.mu.Unlock()\n\treturn sc, nil, nil\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/balancer.go",
    "content": "/*\n *\n * Copyright 2016 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\npackage grpc\n\nimport (\n\t\"context\"\n\t\"net\"\n\t\"sync\"\n\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/credentials\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/grpc/naming\"\n\t\"google.golang.org/grpc/status\"\n)\n\n// Address represents a server the client connects to.\n//\n// Deprecated: please use package balancer.\ntype Address struct {\n\t// Addr is the server address on which a connection will be established.\n\tAddr string\n\t// Metadata is the information associated with Addr, which may be used\n\t// to make load balancing decision.\n\tMetadata interface{}\n}\n\n// BalancerConfig specifies the configurations for Balancer.\n//\n// Deprecated: please use package balancer.\ntype BalancerConfig struct {\n\t// DialCreds is the transport credential the Balancer implementation can\n\t// use to dial to a remote load balancer server. The Balancer implementations\n\t// can ignore this if it does not need to talk to another party securely.\n\tDialCreds credentials.TransportCredentials\n\t// Dialer is the custom dialer the Balancer implementation can use to dial\n\t// to a remote load balancer server. The Balancer implementations\n\t// can ignore this if it doesn't need to talk to remote balancer.\n\tDialer func(context.Context, string) (net.Conn, error)\n}\n\n// BalancerGetOptions configures a Get call.\n//\n// Deprecated: please use package balancer.\ntype BalancerGetOptions struct {\n\t// BlockingWait specifies whether Get should block when there is no\n\t// connected address.\n\tBlockingWait bool\n}\n\n// Balancer chooses network addresses for RPCs.\n//\n// Deprecated: please use package balancer.\ntype Balancer interface {\n\t// Start does the initialization work to bootstrap a Balancer. For example,\n\t// this function may start the name resolution and watch the updates. It will\n\t// be called when dialing.\n\tStart(target string, config BalancerConfig) error\n\t// Up informs the Balancer that gRPC has a connection to the server at\n\t// addr. It returns down which is called once the connection to addr gets\n\t// lost or closed.\n\t// TODO: It is not clear how to construct and take advantage of the meaningful error\n\t// parameter for down. Need realistic demands to guide.\n\tUp(addr Address) (down func(error))\n\t// Get gets the address of a server for the RPC corresponding to ctx.\n\t// i) If it returns a connected address, gRPC internals issues the RPC on the\n\t// connection to this address;\n\t// ii) If it returns an address on which the connection is under construction\n\t// (initiated by Notify(...)) but not connected, gRPC internals\n\t//  * fails RPC if the RPC is fail-fast and connection is in the TransientFailure or\n\t//  Shutdown state;\n\t//  or\n\t//  * issues RPC on the connection otherwise.\n\t// iii) If it returns an address on which the connection does not exist, gRPC\n\t// internals treats it as an error and will fail the corresponding RPC.\n\t//\n\t// Therefore, the following is the recommended rule when writing a custom Balancer.\n\t// If opts.BlockingWait is true, it should return a connected address or\n\t// block if there is no connected address. It should respect the timeout or\n\t// cancellation of ctx when blocking. If opts.BlockingWait is false (for fail-fast\n\t// RPCs), it should return an address it has notified via Notify(...) immediately\n\t// instead of blocking.\n\t//\n\t// The function returns put which is called once the rpc has completed or failed.\n\t// put can collect and report RPC stats to a remote load balancer.\n\t//\n\t// This function should only return the errors Balancer cannot recover by itself.\n\t// gRPC internals will fail the RPC if an error is returned.\n\tGet(ctx context.Context, opts BalancerGetOptions) (addr Address, put func(), err error)\n\t// Notify returns a channel that is used by gRPC internals to watch the addresses\n\t// gRPC needs to connect. The addresses might be from a name resolver or remote\n\t// load balancer. gRPC internals will compare it with the existing connected\n\t// addresses. If the address Balancer notified is not in the existing connected\n\t// addresses, gRPC starts to connect the address. If an address in the existing\n\t// connected addresses is not in the notification list, the corresponding connection\n\t// is shutdown gracefully. Otherwise, there are no operations to take. Note that\n\t// the Address slice must be the full list of the Addresses which should be connected.\n\t// It is NOT delta.\n\tNotify() <-chan []Address\n\t// Close shuts down the balancer.\n\tClose() error\n}\n\n// RoundRobin returns a Balancer that selects addresses round-robin. It uses r to watch\n// the name resolution updates and updates the addresses available correspondingly.\n//\n// Deprecated: please use package balancer/roundrobin.\nfunc RoundRobin(r naming.Resolver) Balancer {\n\treturn &roundRobin{r: r}\n}\n\ntype addrInfo struct {\n\taddr      Address\n\tconnected bool\n}\n\ntype roundRobin struct {\n\tr      naming.Resolver\n\tw      naming.Watcher\n\taddrs  []*addrInfo // all the addresses the client should potentially connect\n\tmu     sync.Mutex\n\taddrCh chan []Address // the channel to notify gRPC internals the list of addresses the client should connect to.\n\tnext   int            // index of the next address to return for Get()\n\twaitCh chan struct{}  // the channel to block when there is no connected address available\n\tdone   bool           // The Balancer is closed.\n}\n\nfunc (rr *roundRobin) watchAddrUpdates() error {\n\tupdates, err := rr.w.Next()\n\tif err != nil {\n\t\tgrpclog.Warningf(\"grpc: the naming watcher stops working due to %v.\", err)\n\t\treturn err\n\t}\n\trr.mu.Lock()\n\tdefer rr.mu.Unlock()\n\tfor _, update := range updates {\n\t\taddr := Address{\n\t\t\tAddr:     update.Addr,\n\t\t\tMetadata: update.Metadata,\n\t\t}\n\t\tswitch update.Op {\n\t\tcase naming.Add:\n\t\t\tvar exist bool\n\t\t\tfor _, v := range rr.addrs {\n\t\t\t\tif addr == v.addr {\n\t\t\t\t\texist = true\n\t\t\t\t\tgrpclog.Infoln(\"grpc: The name resolver wanted to add an existing address: \", addr)\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif exist {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\trr.addrs = append(rr.addrs, &addrInfo{addr: addr})\n\t\tcase naming.Delete:\n\t\t\tfor i, v := range rr.addrs {\n\t\t\t\tif addr == v.addr {\n\t\t\t\t\tcopy(rr.addrs[i:], rr.addrs[i+1:])\n\t\t\t\t\trr.addrs = rr.addrs[:len(rr.addrs)-1]\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\tdefault:\n\t\t\tgrpclog.Errorln(\"Unknown update.Op \", update.Op)\n\t\t}\n\t}\n\t// Make a copy of rr.addrs and write it onto rr.addrCh so that gRPC internals gets notified.\n\topen := make([]Address, len(rr.addrs))\n\tfor i, v := range rr.addrs {\n\t\topen[i] = v.addr\n\t}\n\tif rr.done {\n\t\treturn ErrClientConnClosing\n\t}\n\tselect {\n\tcase <-rr.addrCh:\n\tdefault:\n\t}\n\trr.addrCh <- open\n\treturn nil\n}\n\nfunc (rr *roundRobin) Start(target string, config BalancerConfig) error {\n\trr.mu.Lock()\n\tdefer rr.mu.Unlock()\n\tif rr.done {\n\t\treturn ErrClientConnClosing\n\t}\n\tif rr.r == nil {\n\t\t// If there is no name resolver installed, it is not needed to\n\t\t// do name resolution. In this case, target is added into rr.addrs\n\t\t// as the only address available and rr.addrCh stays nil.\n\t\trr.addrs = append(rr.addrs, &addrInfo{addr: Address{Addr: target}})\n\t\treturn nil\n\t}\n\tw, err := rr.r.Resolve(target)\n\tif err != nil {\n\t\treturn err\n\t}\n\trr.w = w\n\trr.addrCh = make(chan []Address, 1)\n\tgo func() {\n\t\tfor {\n\t\t\tif err := rr.watchAddrUpdates(); err != nil {\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t}()\n\treturn nil\n}\n\n// Up sets the connected state of addr and sends notification if there are pending\n// Get() calls.\nfunc (rr *roundRobin) Up(addr Address) func(error) {\n\trr.mu.Lock()\n\tdefer rr.mu.Unlock()\n\tvar cnt int\n\tfor _, a := range rr.addrs {\n\t\tif a.addr == addr {\n\t\t\tif a.connected {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\ta.connected = true\n\t\t}\n\t\tif a.connected {\n\t\t\tcnt++\n\t\t}\n\t}\n\t// addr is only one which is connected. Notify the Get() callers who are blocking.\n\tif cnt == 1 && rr.waitCh != nil {\n\t\tclose(rr.waitCh)\n\t\trr.waitCh = nil\n\t}\n\treturn func(err error) {\n\t\trr.down(addr, err)\n\t}\n}\n\n// down unsets the connected state of addr.\nfunc (rr *roundRobin) down(addr Address, err error) {\n\trr.mu.Lock()\n\tdefer rr.mu.Unlock()\n\tfor _, a := range rr.addrs {\n\t\tif addr == a.addr {\n\t\t\ta.connected = false\n\t\t\tbreak\n\t\t}\n\t}\n}\n\n// Get returns the next addr in the rotation.\nfunc (rr *roundRobin) Get(ctx context.Context, opts BalancerGetOptions) (addr Address, put func(), err error) {\n\tvar ch chan struct{}\n\trr.mu.Lock()\n\tif rr.done {\n\t\trr.mu.Unlock()\n\t\terr = ErrClientConnClosing\n\t\treturn\n\t}\n\n\tif len(rr.addrs) > 0 {\n\t\tif rr.next >= len(rr.addrs) {\n\t\t\trr.next = 0\n\t\t}\n\t\tnext := rr.next\n\t\tfor {\n\t\t\ta := rr.addrs[next]\n\t\t\tnext = (next + 1) % len(rr.addrs)\n\t\t\tif a.connected {\n\t\t\t\taddr = a.addr\n\t\t\t\trr.next = next\n\t\t\t\trr.mu.Unlock()\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif next == rr.next {\n\t\t\t\t// Has iterated all the possible address but none is connected.\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\tif !opts.BlockingWait {\n\t\tif len(rr.addrs) == 0 {\n\t\t\trr.mu.Unlock()\n\t\t\terr = status.Errorf(codes.Unavailable, \"there is no address available\")\n\t\t\treturn\n\t\t}\n\t\t// Returns the next addr on rr.addrs for failfast RPCs.\n\t\taddr = rr.addrs[rr.next].addr\n\t\trr.next++\n\t\trr.mu.Unlock()\n\t\treturn\n\t}\n\t// Wait on rr.waitCh for non-failfast RPCs.\n\tif rr.waitCh == nil {\n\t\tch = make(chan struct{})\n\t\trr.waitCh = ch\n\t} else {\n\t\tch = rr.waitCh\n\t}\n\trr.mu.Unlock()\n\tfor {\n\t\tselect {\n\t\tcase <-ctx.Done():\n\t\t\terr = ctx.Err()\n\t\t\treturn\n\t\tcase <-ch:\n\t\t\trr.mu.Lock()\n\t\t\tif rr.done {\n\t\t\t\trr.mu.Unlock()\n\t\t\t\terr = ErrClientConnClosing\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif len(rr.addrs) > 0 {\n\t\t\t\tif rr.next >= len(rr.addrs) {\n\t\t\t\t\trr.next = 0\n\t\t\t\t}\n\t\t\t\tnext := rr.next\n\t\t\t\tfor {\n\t\t\t\t\ta := rr.addrs[next]\n\t\t\t\t\tnext = (next + 1) % len(rr.addrs)\n\t\t\t\t\tif a.connected {\n\t\t\t\t\t\taddr = a.addr\n\t\t\t\t\t\trr.next = next\n\t\t\t\t\t\trr.mu.Unlock()\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tif next == rr.next {\n\t\t\t\t\t\t// Has iterated all the possible address but none is connected.\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// The newly added addr got removed by Down() again.\n\t\t\tif rr.waitCh == nil {\n\t\t\t\tch = make(chan struct{})\n\t\t\t\trr.waitCh = ch\n\t\t\t} else {\n\t\t\t\tch = rr.waitCh\n\t\t\t}\n\t\t\trr.mu.Unlock()\n\t\t}\n\t}\n}\n\nfunc (rr *roundRobin) Notify() <-chan []Address {\n\treturn rr.addrCh\n}\n\nfunc (rr *roundRobin) Close() error {\n\trr.mu.Lock()\n\tdefer rr.mu.Unlock()\n\tif rr.done {\n\t\treturn errBalancerClosed\n\t}\n\trr.done = true\n\tif rr.w != nil {\n\t\trr.w.Close()\n\t}\n\tif rr.waitCh != nil {\n\t\tclose(rr.waitCh)\n\t\trr.waitCh = nil\n\t}\n\tif rr.addrCh != nil {\n\t\tclose(rr.addrCh)\n\t}\n\treturn nil\n}\n\n// pickFirst is used to test multi-addresses in one addrConn in which all addresses share the same addrConn.\n// It is a wrapper around roundRobin balancer. The logic of all methods works fine because balancer.Get()\n// returns the only address Up by resetTransport().\ntype pickFirst struct {\n\t*roundRobin\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/balancer_conn_wrappers.go",
    "content": "/*\n *\n * Copyright 2017 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\npackage grpc\n\nimport (\n\t\"fmt\"\n\t\"sync\"\n\n\t\"google.golang.org/grpc/balancer\"\n\t\"google.golang.org/grpc/connectivity\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/grpc/resolver\"\n)\n\n// scStateUpdate contains the subConn and the new state it changed to.\ntype scStateUpdate struct {\n\tsc    balancer.SubConn\n\tstate connectivity.State\n}\n\n// scStateUpdateBuffer is an unbounded channel for scStateChangeTuple.\n// TODO make a general purpose buffer that uses interface{}.\ntype scStateUpdateBuffer struct {\n\tc       chan *scStateUpdate\n\tmu      sync.Mutex\n\tbacklog []*scStateUpdate\n}\n\nfunc newSCStateUpdateBuffer() *scStateUpdateBuffer {\n\treturn &scStateUpdateBuffer{\n\t\tc: make(chan *scStateUpdate, 1),\n\t}\n}\n\nfunc (b *scStateUpdateBuffer) put(t *scStateUpdate) {\n\tb.mu.Lock()\n\tdefer b.mu.Unlock()\n\tif len(b.backlog) == 0 {\n\t\tselect {\n\t\tcase b.c <- t:\n\t\t\treturn\n\t\tdefault:\n\t\t}\n\t}\n\tb.backlog = append(b.backlog, t)\n}\n\nfunc (b *scStateUpdateBuffer) load() {\n\tb.mu.Lock()\n\tdefer b.mu.Unlock()\n\tif len(b.backlog) > 0 {\n\t\tselect {\n\t\tcase b.c <- b.backlog[0]:\n\t\t\tb.backlog[0] = nil\n\t\t\tb.backlog = b.backlog[1:]\n\t\tdefault:\n\t\t}\n\t}\n}\n\n// get returns the channel that the scStateUpdate will be sent to.\n//\n// Upon receiving, the caller should call load to send another\n// scStateChangeTuple onto the channel if there is any.\nfunc (b *scStateUpdateBuffer) get() <-chan *scStateUpdate {\n\treturn b.c\n}\n\n// ccBalancerWrapper is a wrapper on top of cc for balancers.\n// It implements balancer.ClientConn interface.\ntype ccBalancerWrapper struct {\n\tcc               *ClientConn\n\tbalancer         balancer.Balancer\n\tstateChangeQueue *scStateUpdateBuffer\n\tccUpdateCh       chan *balancer.ClientConnState\n\tdone             chan struct{}\n\n\tmu       sync.Mutex\n\tsubConns map[*acBalancerWrapper]struct{}\n}\n\nfunc newCCBalancerWrapper(cc *ClientConn, b balancer.Builder, bopts balancer.BuildOptions) *ccBalancerWrapper {\n\tccb := &ccBalancerWrapper{\n\t\tcc:               cc,\n\t\tstateChangeQueue: newSCStateUpdateBuffer(),\n\t\tccUpdateCh:       make(chan *balancer.ClientConnState, 1),\n\t\tdone:             make(chan struct{}),\n\t\tsubConns:         make(map[*acBalancerWrapper]struct{}),\n\t}\n\tgo ccb.watcher()\n\tccb.balancer = b.Build(ccb, bopts)\n\treturn ccb\n}\n\n// watcher balancer functions sequentially, so the balancer can be implemented\n// lock-free.\nfunc (ccb *ccBalancerWrapper) watcher() {\n\tfor {\n\t\tselect {\n\t\tcase t := <-ccb.stateChangeQueue.get():\n\t\t\tccb.stateChangeQueue.load()\n\t\t\tselect {\n\t\t\tcase <-ccb.done:\n\t\t\t\tccb.balancer.Close()\n\t\t\t\treturn\n\t\t\tdefault:\n\t\t\t}\n\t\t\tif ub, ok := ccb.balancer.(balancer.V2Balancer); ok {\n\t\t\t\tub.UpdateSubConnState(t.sc, balancer.SubConnState{ConnectivityState: t.state})\n\t\t\t} else {\n\t\t\t\tccb.balancer.HandleSubConnStateChange(t.sc, t.state)\n\t\t\t}\n\t\tcase s := <-ccb.ccUpdateCh:\n\t\t\tselect {\n\t\t\tcase <-ccb.done:\n\t\t\t\tccb.balancer.Close()\n\t\t\t\treturn\n\t\t\tdefault:\n\t\t\t}\n\t\t\tif ub, ok := ccb.balancer.(balancer.V2Balancer); ok {\n\t\t\t\tub.UpdateClientConnState(*s)\n\t\t\t} else {\n\t\t\t\tccb.balancer.HandleResolvedAddrs(s.ResolverState.Addresses, nil)\n\t\t\t}\n\t\tcase <-ccb.done:\n\t\t}\n\n\t\tselect {\n\t\tcase <-ccb.done:\n\t\t\tccb.balancer.Close()\n\t\t\tccb.mu.Lock()\n\t\t\tscs := ccb.subConns\n\t\t\tccb.subConns = nil\n\t\t\tccb.mu.Unlock()\n\t\t\tfor acbw := range scs {\n\t\t\t\tccb.cc.removeAddrConn(acbw.getAddrConn(), errConnDrain)\n\t\t\t}\n\t\t\tccb.UpdateBalancerState(connectivity.Connecting, nil)\n\t\t\treturn\n\t\tdefault:\n\t\t}\n\t\tccb.cc.firstResolveEvent.Fire()\n\t}\n}\n\nfunc (ccb *ccBalancerWrapper) close() {\n\tclose(ccb.done)\n}\n\nfunc (ccb *ccBalancerWrapper) handleSubConnStateChange(sc balancer.SubConn, s connectivity.State) {\n\t// When updating addresses for a SubConn, if the address in use is not in\n\t// the new addresses, the old ac will be tearDown() and a new ac will be\n\t// created. tearDown() generates a state change with Shutdown state, we\n\t// don't want the balancer to receive this state change. So before\n\t// tearDown() on the old ac, ac.acbw (acWrapper) will be set to nil, and\n\t// this function will be called with (nil, Shutdown). We don't need to call\n\t// balancer method in this case.\n\tif sc == nil {\n\t\treturn\n\t}\n\tccb.stateChangeQueue.put(&scStateUpdate{\n\t\tsc:    sc,\n\t\tstate: s,\n\t})\n}\n\nfunc (ccb *ccBalancerWrapper) updateClientConnState(ccs *balancer.ClientConnState) {\n\tif ccb.cc.curBalancerName != grpclbName {\n\t\t// Filter any grpclb addresses since we don't have the grpclb balancer.\n\t\ts := ccs.ResolverState\n\t\tfor i := 0; i < len(s.Addresses); {\n\t\t\tif s.Addresses[i].Type == resolver.GRPCLB {\n\t\t\t\tcopy(s.Addresses[i:], s.Addresses[i+1:])\n\t\t\t\ts.Addresses = s.Addresses[:len(s.Addresses)-1]\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\ti++\n\t\t}\n\t}\n\tselect {\n\tcase <-ccb.ccUpdateCh:\n\tdefault:\n\t}\n\tccb.ccUpdateCh <- ccs\n}\n\nfunc (ccb *ccBalancerWrapper) NewSubConn(addrs []resolver.Address, opts balancer.NewSubConnOptions) (balancer.SubConn, error) {\n\tif len(addrs) <= 0 {\n\t\treturn nil, fmt.Errorf(\"grpc: cannot create SubConn with empty address list\")\n\t}\n\tccb.mu.Lock()\n\tdefer ccb.mu.Unlock()\n\tif ccb.subConns == nil {\n\t\treturn nil, fmt.Errorf(\"grpc: ClientConn balancer wrapper was closed\")\n\t}\n\tac, err := ccb.cc.newAddrConn(addrs, opts)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tacbw := &acBalancerWrapper{ac: ac}\n\tacbw.ac.mu.Lock()\n\tac.acbw = acbw\n\tacbw.ac.mu.Unlock()\n\tccb.subConns[acbw] = struct{}{}\n\treturn acbw, nil\n}\n\nfunc (ccb *ccBalancerWrapper) RemoveSubConn(sc balancer.SubConn) {\n\tacbw, ok := sc.(*acBalancerWrapper)\n\tif !ok {\n\t\treturn\n\t}\n\tccb.mu.Lock()\n\tdefer ccb.mu.Unlock()\n\tif ccb.subConns == nil {\n\t\treturn\n\t}\n\tdelete(ccb.subConns, acbw)\n\tccb.cc.removeAddrConn(acbw.getAddrConn(), errConnDrain)\n}\n\nfunc (ccb *ccBalancerWrapper) UpdateBalancerState(s connectivity.State, p balancer.Picker) {\n\tccb.mu.Lock()\n\tdefer ccb.mu.Unlock()\n\tif ccb.subConns == nil {\n\t\treturn\n\t}\n\t// Update picker before updating state.  Even though the ordering here does\n\t// not matter, it can lead to multiple calls of Pick in the common start-up\n\t// case where we wait for ready and then perform an RPC.  If the picker is\n\t// updated later, we could call the \"connecting\" picker when the state is\n\t// updated, and then call the \"ready\" picker after the picker gets updated.\n\tccb.cc.blockingpicker.updatePicker(p)\n\tccb.cc.csMgr.updateState(s)\n}\n\nfunc (ccb *ccBalancerWrapper) ResolveNow(o resolver.ResolveNowOption) {\n\tccb.cc.resolveNow(o)\n}\n\nfunc (ccb *ccBalancerWrapper) Target() string {\n\treturn ccb.cc.target\n}\n\n// acBalancerWrapper is a wrapper on top of ac for balancers.\n// It implements balancer.SubConn interface.\ntype acBalancerWrapper struct {\n\tmu sync.Mutex\n\tac *addrConn\n}\n\nfunc (acbw *acBalancerWrapper) UpdateAddresses(addrs []resolver.Address) {\n\tacbw.mu.Lock()\n\tdefer acbw.mu.Unlock()\n\tif len(addrs) <= 0 {\n\t\tacbw.ac.tearDown(errConnDrain)\n\t\treturn\n\t}\n\tif !acbw.ac.tryUpdateAddrs(addrs) {\n\t\tcc := acbw.ac.cc\n\t\topts := acbw.ac.scopts\n\t\tacbw.ac.mu.Lock()\n\t\t// Set old ac.acbw to nil so the Shutdown state update will be ignored\n\t\t// by balancer.\n\t\t//\n\t\t// TODO(bar) the state transition could be wrong when tearDown() old ac\n\t\t// and creating new ac, fix the transition.\n\t\tacbw.ac.acbw = nil\n\t\tacbw.ac.mu.Unlock()\n\t\tacState := acbw.ac.getState()\n\t\tacbw.ac.tearDown(errConnDrain)\n\n\t\tif acState == connectivity.Shutdown {\n\t\t\treturn\n\t\t}\n\n\t\tac, err := cc.newAddrConn(addrs, opts)\n\t\tif err != nil {\n\t\t\tgrpclog.Warningf(\"acBalancerWrapper: UpdateAddresses: failed to newAddrConn: %v\", err)\n\t\t\treturn\n\t\t}\n\t\tacbw.ac = ac\n\t\tac.mu.Lock()\n\t\tac.acbw = acbw\n\t\tac.mu.Unlock()\n\t\tif acState != connectivity.Idle {\n\t\t\tac.connect()\n\t\t}\n\t}\n}\n\nfunc (acbw *acBalancerWrapper) Connect() {\n\tacbw.mu.Lock()\n\tdefer acbw.mu.Unlock()\n\tacbw.ac.connect()\n}\n\nfunc (acbw *acBalancerWrapper) getAddrConn() *addrConn {\n\tacbw.mu.Lock()\n\tdefer acbw.mu.Unlock()\n\treturn acbw.ac\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/balancer_v1_wrapper.go",
    "content": "/*\n *\n * Copyright 2017 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\npackage grpc\n\nimport (\n\t\"context\"\n\t\"sync\"\n\n\t\"google.golang.org/grpc/balancer\"\n\t\"google.golang.org/grpc/connectivity\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/grpc/resolver\"\n)\n\ntype balancerWrapperBuilder struct {\n\tb Balancer // The v1 balancer.\n}\n\nfunc (bwb *balancerWrapperBuilder) Build(cc balancer.ClientConn, opts balancer.BuildOptions) balancer.Balancer {\n\tbwb.b.Start(opts.Target.Endpoint, BalancerConfig{\n\t\tDialCreds: opts.DialCreds,\n\t\tDialer:    opts.Dialer,\n\t})\n\t_, pickfirst := bwb.b.(*pickFirst)\n\tbw := &balancerWrapper{\n\t\tbalancer:   bwb.b,\n\t\tpickfirst:  pickfirst,\n\t\tcc:         cc,\n\t\ttargetAddr: opts.Target.Endpoint,\n\t\tstartCh:    make(chan struct{}),\n\t\tconns:      make(map[resolver.Address]balancer.SubConn),\n\t\tconnSt:     make(map[balancer.SubConn]*scState),\n\t\tcsEvltr:    &balancer.ConnectivityStateEvaluator{},\n\t\tstate:      connectivity.Idle,\n\t}\n\tcc.UpdateBalancerState(connectivity.Idle, bw)\n\tgo bw.lbWatcher()\n\treturn bw\n}\n\nfunc (bwb *balancerWrapperBuilder) Name() string {\n\treturn \"wrapper\"\n}\n\ntype scState struct {\n\taddr Address // The v1 address type.\n\ts    connectivity.State\n\tdown func(error)\n}\n\ntype balancerWrapper struct {\n\tbalancer  Balancer // The v1 balancer.\n\tpickfirst bool\n\n\tcc         balancer.ClientConn\n\ttargetAddr string // Target without the scheme.\n\n\tmu     sync.Mutex\n\tconns  map[resolver.Address]balancer.SubConn\n\tconnSt map[balancer.SubConn]*scState\n\t// This channel is closed when handling the first resolver result.\n\t// lbWatcher blocks until this is closed, to avoid race between\n\t// - NewSubConn is created, cc wants to notify balancer of state changes;\n\t// - Build hasn't return, cc doesn't have access to balancer.\n\tstartCh chan struct{}\n\n\t// To aggregate the connectivity state.\n\tcsEvltr *balancer.ConnectivityStateEvaluator\n\tstate   connectivity.State\n}\n\n// lbWatcher watches the Notify channel of the balancer and manages\n// connections accordingly.\nfunc (bw *balancerWrapper) lbWatcher() {\n\t<-bw.startCh\n\tnotifyCh := bw.balancer.Notify()\n\tif notifyCh == nil {\n\t\t// There's no resolver in the balancer. Connect directly.\n\t\ta := resolver.Address{\n\t\t\tAddr: bw.targetAddr,\n\t\t\tType: resolver.Backend,\n\t\t}\n\t\tsc, err := bw.cc.NewSubConn([]resolver.Address{a}, balancer.NewSubConnOptions{})\n\t\tif err != nil {\n\t\t\tgrpclog.Warningf(\"Error creating connection to %v. Err: %v\", a, err)\n\t\t} else {\n\t\t\tbw.mu.Lock()\n\t\t\tbw.conns[a] = sc\n\t\t\tbw.connSt[sc] = &scState{\n\t\t\t\taddr: Address{Addr: bw.targetAddr},\n\t\t\t\ts:    connectivity.Idle,\n\t\t\t}\n\t\t\tbw.mu.Unlock()\n\t\t\tsc.Connect()\n\t\t}\n\t\treturn\n\t}\n\n\tfor addrs := range notifyCh {\n\t\tgrpclog.Infof(\"balancerWrapper: got update addr from Notify: %v\", addrs)\n\t\tif bw.pickfirst {\n\t\t\tvar (\n\t\t\t\toldA  resolver.Address\n\t\t\t\toldSC balancer.SubConn\n\t\t\t)\n\t\t\tbw.mu.Lock()\n\t\t\tfor oldA, oldSC = range bw.conns {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tbw.mu.Unlock()\n\t\t\tif len(addrs) <= 0 {\n\t\t\t\tif oldSC != nil {\n\t\t\t\t\t// Teardown old sc.\n\t\t\t\t\tbw.mu.Lock()\n\t\t\t\t\tdelete(bw.conns, oldA)\n\t\t\t\t\tdelete(bw.connSt, oldSC)\n\t\t\t\t\tbw.mu.Unlock()\n\t\t\t\t\tbw.cc.RemoveSubConn(oldSC)\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tvar newAddrs []resolver.Address\n\t\t\tfor _, a := range addrs {\n\t\t\t\tnewAddr := resolver.Address{\n\t\t\t\t\tAddr:       a.Addr,\n\t\t\t\t\tType:       resolver.Backend, // All addresses from balancer are all backends.\n\t\t\t\t\tServerName: \"\",\n\t\t\t\t\tMetadata:   a.Metadata,\n\t\t\t\t}\n\t\t\t\tnewAddrs = append(newAddrs, newAddr)\n\t\t\t}\n\t\t\tif oldSC == nil {\n\t\t\t\t// Create new sc.\n\t\t\t\tsc, err := bw.cc.NewSubConn(newAddrs, balancer.NewSubConnOptions{})\n\t\t\t\tif err != nil {\n\t\t\t\t\tgrpclog.Warningf(\"Error creating connection to %v. Err: %v\", newAddrs, err)\n\t\t\t\t} else {\n\t\t\t\t\tbw.mu.Lock()\n\t\t\t\t\t// For pickfirst, there should be only one SubConn, so the\n\t\t\t\t\t// address doesn't matter. All states updating (up and down)\n\t\t\t\t\t// and picking should all happen on that only SubConn.\n\t\t\t\t\tbw.conns[resolver.Address{}] = sc\n\t\t\t\t\tbw.connSt[sc] = &scState{\n\t\t\t\t\t\taddr: addrs[0], // Use the first address.\n\t\t\t\t\t\ts:    connectivity.Idle,\n\t\t\t\t\t}\n\t\t\t\t\tbw.mu.Unlock()\n\t\t\t\t\tsc.Connect()\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tbw.mu.Lock()\n\t\t\t\tbw.connSt[oldSC].addr = addrs[0]\n\t\t\t\tbw.mu.Unlock()\n\t\t\t\toldSC.UpdateAddresses(newAddrs)\n\t\t\t}\n\t\t} else {\n\t\t\tvar (\n\t\t\t\tadd []resolver.Address // Addresses need to setup connections.\n\t\t\t\tdel []balancer.SubConn // Connections need to tear down.\n\t\t\t)\n\t\t\tresAddrs := make(map[resolver.Address]Address)\n\t\t\tfor _, a := range addrs {\n\t\t\t\tresAddrs[resolver.Address{\n\t\t\t\t\tAddr:       a.Addr,\n\t\t\t\t\tType:       resolver.Backend, // All addresses from balancer are all backends.\n\t\t\t\t\tServerName: \"\",\n\t\t\t\t\tMetadata:   a.Metadata,\n\t\t\t\t}] = a\n\t\t\t}\n\t\t\tbw.mu.Lock()\n\t\t\tfor a := range resAddrs {\n\t\t\t\tif _, ok := bw.conns[a]; !ok {\n\t\t\t\t\tadd = append(add, a)\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor a, c := range bw.conns {\n\t\t\t\tif _, ok := resAddrs[a]; !ok {\n\t\t\t\t\tdel = append(del, c)\n\t\t\t\t\tdelete(bw.conns, a)\n\t\t\t\t\t// Keep the state of this sc in bw.connSt until its state becomes Shutdown.\n\t\t\t\t}\n\t\t\t}\n\t\t\tbw.mu.Unlock()\n\t\t\tfor _, a := range add {\n\t\t\t\tsc, err := bw.cc.NewSubConn([]resolver.Address{a}, balancer.NewSubConnOptions{})\n\t\t\t\tif err != nil {\n\t\t\t\t\tgrpclog.Warningf(\"Error creating connection to %v. Err: %v\", a, err)\n\t\t\t\t} else {\n\t\t\t\t\tbw.mu.Lock()\n\t\t\t\t\tbw.conns[a] = sc\n\t\t\t\t\tbw.connSt[sc] = &scState{\n\t\t\t\t\t\taddr: resAddrs[a],\n\t\t\t\t\t\ts:    connectivity.Idle,\n\t\t\t\t\t}\n\t\t\t\t\tbw.mu.Unlock()\n\t\t\t\t\tsc.Connect()\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor _, c := range del {\n\t\t\t\tbw.cc.RemoveSubConn(c)\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc (bw *balancerWrapper) HandleSubConnStateChange(sc balancer.SubConn, s connectivity.State) {\n\tbw.mu.Lock()\n\tdefer bw.mu.Unlock()\n\tscSt, ok := bw.connSt[sc]\n\tif !ok {\n\t\treturn\n\t}\n\tif s == connectivity.Idle {\n\t\tsc.Connect()\n\t}\n\toldS := scSt.s\n\tscSt.s = s\n\tif oldS != connectivity.Ready && s == connectivity.Ready {\n\t\tscSt.down = bw.balancer.Up(scSt.addr)\n\t} else if oldS == connectivity.Ready && s != connectivity.Ready {\n\t\tif scSt.down != nil {\n\t\t\tscSt.down(errConnClosing)\n\t\t}\n\t}\n\tsa := bw.csEvltr.RecordTransition(oldS, s)\n\tif bw.state != sa {\n\t\tbw.state = sa\n\t}\n\tbw.cc.UpdateBalancerState(bw.state, bw)\n\tif s == connectivity.Shutdown {\n\t\t// Remove state for this sc.\n\t\tdelete(bw.connSt, sc)\n\t}\n}\n\nfunc (bw *balancerWrapper) HandleResolvedAddrs([]resolver.Address, error) {\n\tbw.mu.Lock()\n\tdefer bw.mu.Unlock()\n\tselect {\n\tcase <-bw.startCh:\n\tdefault:\n\t\tclose(bw.startCh)\n\t}\n\t// There should be a resolver inside the balancer.\n\t// All updates here, if any, are ignored.\n}\n\nfunc (bw *balancerWrapper) Close() {\n\tbw.mu.Lock()\n\tdefer bw.mu.Unlock()\n\tselect {\n\tcase <-bw.startCh:\n\tdefault:\n\t\tclose(bw.startCh)\n\t}\n\tbw.balancer.Close()\n}\n\n// The picker is the balancerWrapper itself.\n// It either blocks or returns error, consistent with v1 balancer Get().\nfunc (bw *balancerWrapper) Pick(ctx context.Context, opts balancer.PickOptions) (sc balancer.SubConn, done func(balancer.DoneInfo), err error) {\n\tfailfast := true // Default failfast is true.\n\tif ss, ok := rpcInfoFromContext(ctx); ok {\n\t\tfailfast = ss.failfast\n\t}\n\ta, p, err := bw.balancer.Get(ctx, BalancerGetOptions{BlockingWait: !failfast})\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\tif p != nil {\n\t\tdone = func(balancer.DoneInfo) { p() }\n\t\tdefer func() {\n\t\t\tif err != nil {\n\t\t\t\tp()\n\t\t\t}\n\t\t}()\n\t}\n\n\tbw.mu.Lock()\n\tdefer bw.mu.Unlock()\n\tif bw.pickfirst {\n\t\t// Get the first sc in conns.\n\t\tfor _, sc := range bw.conns {\n\t\t\treturn sc, done, nil\n\t\t}\n\t\treturn nil, nil, balancer.ErrNoSubConnAvailable\n\t}\n\tsc, ok1 := bw.conns[resolver.Address{\n\t\tAddr:       a.Addr,\n\t\tType:       resolver.Backend,\n\t\tServerName: \"\",\n\t\tMetadata:   a.Metadata,\n\t}]\n\ts, ok2 := bw.connSt[sc]\n\tif !ok1 || !ok2 {\n\t\t// This can only happen due to a race where Get() returned an address\n\t\t// that was subsequently removed by Notify.  In this case we should\n\t\t// retry always.\n\t\treturn nil, nil, balancer.ErrNoSubConnAvailable\n\t}\n\tswitch s.s {\n\tcase connectivity.Ready, connectivity.Idle:\n\t\treturn sc, done, nil\n\tcase connectivity.Shutdown, connectivity.TransientFailure:\n\t\t// If the returned sc has been shut down or is in transient failure,\n\t\t// return error, and this RPC will fail or wait for another picker (if\n\t\t// non-failfast).\n\t\treturn nil, nil, balancer.ErrTransientFailure\n\tdefault:\n\t\t// For other states (connecting or unknown), the v1 balancer would\n\t\t// traditionally wait until ready and then issue the RPC.  Returning\n\t\t// ErrNoSubConnAvailable will be a slight improvement in that it will\n\t\t// allow the balancer to choose another address in case others are\n\t\t// connected.\n\t\treturn nil, nil, balancer.ErrNoSubConnAvailable\n\t}\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/binarylog/grpc_binarylog_v1/binarylog.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// source: grpc/binarylog/grpc_binarylog_v1/binarylog.proto\n\npackage grpc_binarylog_v1 // import \"google.golang.org/grpc/binarylog/grpc_binarylog_v1\"\n\nimport proto \"github.com/golang/protobuf/proto\"\nimport fmt \"fmt\"\nimport math \"math\"\nimport duration \"github.com/golang/protobuf/ptypes/duration\"\nimport timestamp \"github.com/golang/protobuf/ptypes/timestamp\"\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar _ = proto.Marshal\nvar _ = fmt.Errorf\nvar _ = math.Inf\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package\n\n// Enumerates the type of event\n// Note the terminology is different from the RPC semantics\n// definition, but the same meaning is expressed here.\ntype GrpcLogEntry_EventType int32\n\nconst (\n\tGrpcLogEntry_EVENT_TYPE_UNKNOWN GrpcLogEntry_EventType = 0\n\t// Header sent from client to server\n\tGrpcLogEntry_EVENT_TYPE_CLIENT_HEADER GrpcLogEntry_EventType = 1\n\t// Header sent from server to client\n\tGrpcLogEntry_EVENT_TYPE_SERVER_HEADER GrpcLogEntry_EventType = 2\n\t// Message sent from client to server\n\tGrpcLogEntry_EVENT_TYPE_CLIENT_MESSAGE GrpcLogEntry_EventType = 3\n\t// Message sent from server to client\n\tGrpcLogEntry_EVENT_TYPE_SERVER_MESSAGE GrpcLogEntry_EventType = 4\n\t// A signal that client is done sending\n\tGrpcLogEntry_EVENT_TYPE_CLIENT_HALF_CLOSE GrpcLogEntry_EventType = 5\n\t// Trailer indicates the end of the RPC.\n\t// On client side, this event means a trailer was either received\n\t// from the network or the gRPC library locally generated a status\n\t// to inform the application about a failure.\n\t// On server side, this event means the server application requested\n\t// to send a trailer. Note: EVENT_TYPE_CANCEL may still arrive after\n\t// this due to races on server side.\n\tGrpcLogEntry_EVENT_TYPE_SERVER_TRAILER GrpcLogEntry_EventType = 6\n\t// A signal that the RPC is cancelled. On client side, this\n\t// indicates the client application requests a cancellation.\n\t// On server side, this indicates that cancellation was detected.\n\t// Note: This marks the end of the RPC. Events may arrive after\n\t// this due to races. For example, on client side a trailer\n\t// may arrive even though the application requested to cancel the RPC.\n\tGrpcLogEntry_EVENT_TYPE_CANCEL GrpcLogEntry_EventType = 7\n)\n\nvar GrpcLogEntry_EventType_name = map[int32]string{\n\t0: \"EVENT_TYPE_UNKNOWN\",\n\t1: \"EVENT_TYPE_CLIENT_HEADER\",\n\t2: \"EVENT_TYPE_SERVER_HEADER\",\n\t3: \"EVENT_TYPE_CLIENT_MESSAGE\",\n\t4: \"EVENT_TYPE_SERVER_MESSAGE\",\n\t5: \"EVENT_TYPE_CLIENT_HALF_CLOSE\",\n\t6: \"EVENT_TYPE_SERVER_TRAILER\",\n\t7: \"EVENT_TYPE_CANCEL\",\n}\nvar GrpcLogEntry_EventType_value = map[string]int32{\n\t\"EVENT_TYPE_UNKNOWN\":           0,\n\t\"EVENT_TYPE_CLIENT_HEADER\":     1,\n\t\"EVENT_TYPE_SERVER_HEADER\":     2,\n\t\"EVENT_TYPE_CLIENT_MESSAGE\":    3,\n\t\"EVENT_TYPE_SERVER_MESSAGE\":    4,\n\t\"EVENT_TYPE_CLIENT_HALF_CLOSE\": 5,\n\t\"EVENT_TYPE_SERVER_TRAILER\":    6,\n\t\"EVENT_TYPE_CANCEL\":            7,\n}\n\nfunc (x GrpcLogEntry_EventType) String() string {\n\treturn proto.EnumName(GrpcLogEntry_EventType_name, int32(x))\n}\nfunc (GrpcLogEntry_EventType) EnumDescriptor() ([]byte, []int) {\n\treturn fileDescriptor_binarylog_264c8c9c551ce911, []int{0, 0}\n}\n\n// Enumerates the entity that generates the log entry\ntype GrpcLogEntry_Logger int32\n\nconst (\n\tGrpcLogEntry_LOGGER_UNKNOWN GrpcLogEntry_Logger = 0\n\tGrpcLogEntry_LOGGER_CLIENT  GrpcLogEntry_Logger = 1\n\tGrpcLogEntry_LOGGER_SERVER  GrpcLogEntry_Logger = 2\n)\n\nvar GrpcLogEntry_Logger_name = map[int32]string{\n\t0: \"LOGGER_UNKNOWN\",\n\t1: \"LOGGER_CLIENT\",\n\t2: \"LOGGER_SERVER\",\n}\nvar GrpcLogEntry_Logger_value = map[string]int32{\n\t\"LOGGER_UNKNOWN\": 0,\n\t\"LOGGER_CLIENT\":  1,\n\t\"LOGGER_SERVER\":  2,\n}\n\nfunc (x GrpcLogEntry_Logger) String() string {\n\treturn proto.EnumName(GrpcLogEntry_Logger_name, int32(x))\n}\nfunc (GrpcLogEntry_Logger) EnumDescriptor() ([]byte, []int) {\n\treturn fileDescriptor_binarylog_264c8c9c551ce911, []int{0, 1}\n}\n\ntype Address_Type int32\n\nconst (\n\tAddress_TYPE_UNKNOWN Address_Type = 0\n\t// address is in 1.2.3.4 form\n\tAddress_TYPE_IPV4 Address_Type = 1\n\t// address is in IPv6 canonical form (RFC5952 section 4)\n\t// The scope is NOT included in the address string.\n\tAddress_TYPE_IPV6 Address_Type = 2\n\t// address is UDS string\n\tAddress_TYPE_UNIX Address_Type = 3\n)\n\nvar Address_Type_name = map[int32]string{\n\t0: \"TYPE_UNKNOWN\",\n\t1: \"TYPE_IPV4\",\n\t2: \"TYPE_IPV6\",\n\t3: \"TYPE_UNIX\",\n}\nvar Address_Type_value = map[string]int32{\n\t\"TYPE_UNKNOWN\": 0,\n\t\"TYPE_IPV4\":    1,\n\t\"TYPE_IPV6\":    2,\n\t\"TYPE_UNIX\":    3,\n}\n\nfunc (x Address_Type) String() string {\n\treturn proto.EnumName(Address_Type_name, int32(x))\n}\nfunc (Address_Type) EnumDescriptor() ([]byte, []int) {\n\treturn fileDescriptor_binarylog_264c8c9c551ce911, []int{7, 0}\n}\n\n// Log entry we store in binary logs\ntype GrpcLogEntry struct {\n\t// The timestamp of the binary log message\n\tTimestamp *timestamp.Timestamp `protobuf:\"bytes,1,opt,name=timestamp,proto3\" json:\"timestamp,omitempty\"`\n\t// Uniquely identifies a call. The value must not be 0 in order to disambiguate\n\t// from an unset value.\n\t// Each call may have several log entries, they will all have the same call_id.\n\t// Nothing is guaranteed about their value other than they are unique across\n\t// different RPCs in the same gRPC process.\n\tCallId uint64 `protobuf:\"varint,2,opt,name=call_id,json=callId,proto3\" json:\"call_id,omitempty\"`\n\t// The entry sequence id for this call. The first GrpcLogEntry has a\n\t// value of 1, to disambiguate from an unset value. The purpose of\n\t// this field is to detect missing entries in environments where\n\t// durability or ordering is not guaranteed.\n\tSequenceIdWithinCall uint64                 `protobuf:\"varint,3,opt,name=sequence_id_within_call,json=sequenceIdWithinCall,proto3\" json:\"sequence_id_within_call,omitempty\"`\n\tType                 GrpcLogEntry_EventType `protobuf:\"varint,4,opt,name=type,proto3,enum=grpc.binarylog.v1.GrpcLogEntry_EventType\" json:\"type,omitempty\"`\n\tLogger               GrpcLogEntry_Logger    `protobuf:\"varint,5,opt,name=logger,proto3,enum=grpc.binarylog.v1.GrpcLogEntry_Logger\" json:\"logger,omitempty\"`\n\t// The logger uses one of the following fields to record the payload,\n\t// according to the type of the log entry.\n\t//\n\t// Types that are valid to be assigned to Payload:\n\t//\t*GrpcLogEntry_ClientHeader\n\t//\t*GrpcLogEntry_ServerHeader\n\t//\t*GrpcLogEntry_Message\n\t//\t*GrpcLogEntry_Trailer\n\tPayload isGrpcLogEntry_Payload `protobuf_oneof:\"payload\"`\n\t// true if payload does not represent the full message or metadata.\n\tPayloadTruncated bool `protobuf:\"varint,10,opt,name=payload_truncated,json=payloadTruncated,proto3\" json:\"payload_truncated,omitempty\"`\n\t// Peer address information, will only be recorded on the first\n\t// incoming event. On client side, peer is logged on\n\t// EVENT_TYPE_SERVER_HEADER normally or EVENT_TYPE_SERVER_TRAILER in\n\t// the case of trailers-only. On server side, peer is always\n\t// logged on EVENT_TYPE_CLIENT_HEADER.\n\tPeer                 *Address `protobuf:\"bytes,11,opt,name=peer,proto3\" json:\"peer,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *GrpcLogEntry) Reset()         { *m = GrpcLogEntry{} }\nfunc (m *GrpcLogEntry) String() string { return proto.CompactTextString(m) }\nfunc (*GrpcLogEntry) ProtoMessage()    {}\nfunc (*GrpcLogEntry) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_binarylog_264c8c9c551ce911, []int{0}\n}\nfunc (m *GrpcLogEntry) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_GrpcLogEntry.Unmarshal(m, b)\n}\nfunc (m *GrpcLogEntry) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_GrpcLogEntry.Marshal(b, m, deterministic)\n}\nfunc (dst *GrpcLogEntry) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_GrpcLogEntry.Merge(dst, src)\n}\nfunc (m *GrpcLogEntry) XXX_Size() int {\n\treturn xxx_messageInfo_GrpcLogEntry.Size(m)\n}\nfunc (m *GrpcLogEntry) XXX_DiscardUnknown() {\n\txxx_messageInfo_GrpcLogEntry.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_GrpcLogEntry proto.InternalMessageInfo\n\nfunc (m *GrpcLogEntry) GetTimestamp() *timestamp.Timestamp {\n\tif m != nil {\n\t\treturn m.Timestamp\n\t}\n\treturn nil\n}\n\nfunc (m *GrpcLogEntry) GetCallId() uint64 {\n\tif m != nil {\n\t\treturn m.CallId\n\t}\n\treturn 0\n}\n\nfunc (m *GrpcLogEntry) GetSequenceIdWithinCall() uint64 {\n\tif m != nil {\n\t\treturn m.SequenceIdWithinCall\n\t}\n\treturn 0\n}\n\nfunc (m *GrpcLogEntry) GetType() GrpcLogEntry_EventType {\n\tif m != nil {\n\t\treturn m.Type\n\t}\n\treturn GrpcLogEntry_EVENT_TYPE_UNKNOWN\n}\n\nfunc (m *GrpcLogEntry) GetLogger() GrpcLogEntry_Logger {\n\tif m != nil {\n\t\treturn m.Logger\n\t}\n\treturn GrpcLogEntry_LOGGER_UNKNOWN\n}\n\ntype isGrpcLogEntry_Payload interface {\n\tisGrpcLogEntry_Payload()\n}\n\ntype GrpcLogEntry_ClientHeader struct {\n\tClientHeader *ClientHeader `protobuf:\"bytes,6,opt,name=client_header,json=clientHeader,proto3,oneof\"`\n}\n\ntype GrpcLogEntry_ServerHeader struct {\n\tServerHeader *ServerHeader `protobuf:\"bytes,7,opt,name=server_header,json=serverHeader,proto3,oneof\"`\n}\n\ntype GrpcLogEntry_Message struct {\n\tMessage *Message `protobuf:\"bytes,8,opt,name=message,proto3,oneof\"`\n}\n\ntype GrpcLogEntry_Trailer struct {\n\tTrailer *Trailer `protobuf:\"bytes,9,opt,name=trailer,proto3,oneof\"`\n}\n\nfunc (*GrpcLogEntry_ClientHeader) isGrpcLogEntry_Payload() {}\n\nfunc (*GrpcLogEntry_ServerHeader) isGrpcLogEntry_Payload() {}\n\nfunc (*GrpcLogEntry_Message) isGrpcLogEntry_Payload() {}\n\nfunc (*GrpcLogEntry_Trailer) isGrpcLogEntry_Payload() {}\n\nfunc (m *GrpcLogEntry) GetPayload() isGrpcLogEntry_Payload {\n\tif m != nil {\n\t\treturn m.Payload\n\t}\n\treturn nil\n}\n\nfunc (m *GrpcLogEntry) GetClientHeader() *ClientHeader {\n\tif x, ok := m.GetPayload().(*GrpcLogEntry_ClientHeader); ok {\n\t\treturn x.ClientHeader\n\t}\n\treturn nil\n}\n\nfunc (m *GrpcLogEntry) GetServerHeader() *ServerHeader {\n\tif x, ok := m.GetPayload().(*GrpcLogEntry_ServerHeader); ok {\n\t\treturn x.ServerHeader\n\t}\n\treturn nil\n}\n\nfunc (m *GrpcLogEntry) GetMessage() *Message {\n\tif x, ok := m.GetPayload().(*GrpcLogEntry_Message); ok {\n\t\treturn x.Message\n\t}\n\treturn nil\n}\n\nfunc (m *GrpcLogEntry) GetTrailer() *Trailer {\n\tif x, ok := m.GetPayload().(*GrpcLogEntry_Trailer); ok {\n\t\treturn x.Trailer\n\t}\n\treturn nil\n}\n\nfunc (m *GrpcLogEntry) GetPayloadTruncated() bool {\n\tif m != nil {\n\t\treturn m.PayloadTruncated\n\t}\n\treturn false\n}\n\nfunc (m *GrpcLogEntry) GetPeer() *Address {\n\tif m != nil {\n\t\treturn m.Peer\n\t}\n\treturn nil\n}\n\n// XXX_OneofFuncs is for the internal use of the proto package.\nfunc (*GrpcLogEntry) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {\n\treturn _GrpcLogEntry_OneofMarshaler, _GrpcLogEntry_OneofUnmarshaler, _GrpcLogEntry_OneofSizer, []interface{}{\n\t\t(*GrpcLogEntry_ClientHeader)(nil),\n\t\t(*GrpcLogEntry_ServerHeader)(nil),\n\t\t(*GrpcLogEntry_Message)(nil),\n\t\t(*GrpcLogEntry_Trailer)(nil),\n\t}\n}\n\nfunc _GrpcLogEntry_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {\n\tm := msg.(*GrpcLogEntry)\n\t// payload\n\tswitch x := m.Payload.(type) {\n\tcase *GrpcLogEntry_ClientHeader:\n\t\tb.EncodeVarint(6<<3 | proto.WireBytes)\n\t\tif err := b.EncodeMessage(x.ClientHeader); err != nil {\n\t\t\treturn err\n\t\t}\n\tcase *GrpcLogEntry_ServerHeader:\n\t\tb.EncodeVarint(7<<3 | proto.WireBytes)\n\t\tif err := b.EncodeMessage(x.ServerHeader); err != nil {\n\t\t\treturn err\n\t\t}\n\tcase *GrpcLogEntry_Message:\n\t\tb.EncodeVarint(8<<3 | proto.WireBytes)\n\t\tif err := b.EncodeMessage(x.Message); err != nil {\n\t\t\treturn err\n\t\t}\n\tcase *GrpcLogEntry_Trailer:\n\t\tb.EncodeVarint(9<<3 | proto.WireBytes)\n\t\tif err := b.EncodeMessage(x.Trailer); err != nil {\n\t\t\treturn err\n\t\t}\n\tcase nil:\n\tdefault:\n\t\treturn fmt.Errorf(\"GrpcLogEntry.Payload has unexpected type %T\", x)\n\t}\n\treturn nil\n}\n\nfunc _GrpcLogEntry_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {\n\tm := msg.(*GrpcLogEntry)\n\tswitch tag {\n\tcase 6: // payload.client_header\n\t\tif wire != proto.WireBytes {\n\t\t\treturn true, proto.ErrInternalBadWireType\n\t\t}\n\t\tmsg := new(ClientHeader)\n\t\terr := b.DecodeMessage(msg)\n\t\tm.Payload = &GrpcLogEntry_ClientHeader{msg}\n\t\treturn true, err\n\tcase 7: // payload.server_header\n\t\tif wire != proto.WireBytes {\n\t\t\treturn true, proto.ErrInternalBadWireType\n\t\t}\n\t\tmsg := new(ServerHeader)\n\t\terr := b.DecodeMessage(msg)\n\t\tm.Payload = &GrpcLogEntry_ServerHeader{msg}\n\t\treturn true, err\n\tcase 8: // payload.message\n\t\tif wire != proto.WireBytes {\n\t\t\treturn true, proto.ErrInternalBadWireType\n\t\t}\n\t\tmsg := new(Message)\n\t\terr := b.DecodeMessage(msg)\n\t\tm.Payload = &GrpcLogEntry_Message{msg}\n\t\treturn true, err\n\tcase 9: // payload.trailer\n\t\tif wire != proto.WireBytes {\n\t\t\treturn true, proto.ErrInternalBadWireType\n\t\t}\n\t\tmsg := new(Trailer)\n\t\terr := b.DecodeMessage(msg)\n\t\tm.Payload = &GrpcLogEntry_Trailer{msg}\n\t\treturn true, err\n\tdefault:\n\t\treturn false, nil\n\t}\n}\n\nfunc _GrpcLogEntry_OneofSizer(msg proto.Message) (n int) {\n\tm := msg.(*GrpcLogEntry)\n\t// payload\n\tswitch x := m.Payload.(type) {\n\tcase *GrpcLogEntry_ClientHeader:\n\t\ts := proto.Size(x.ClientHeader)\n\t\tn += 1 // tag and wire\n\t\tn += proto.SizeVarint(uint64(s))\n\t\tn += s\n\tcase *GrpcLogEntry_ServerHeader:\n\t\ts := proto.Size(x.ServerHeader)\n\t\tn += 1 // tag and wire\n\t\tn += proto.SizeVarint(uint64(s))\n\t\tn += s\n\tcase *GrpcLogEntry_Message:\n\t\ts := proto.Size(x.Message)\n\t\tn += 1 // tag and wire\n\t\tn += proto.SizeVarint(uint64(s))\n\t\tn += s\n\tcase *GrpcLogEntry_Trailer:\n\t\ts := proto.Size(x.Trailer)\n\t\tn += 1 // tag and wire\n\t\tn += proto.SizeVarint(uint64(s))\n\t\tn += s\n\tcase nil:\n\tdefault:\n\t\tpanic(fmt.Sprintf(\"proto: unexpected type %T in oneof\", x))\n\t}\n\treturn n\n}\n\ntype ClientHeader struct {\n\t// This contains only the metadata from the application.\n\tMetadata *Metadata `protobuf:\"bytes,1,opt,name=metadata,proto3\" json:\"metadata,omitempty\"`\n\t// The name of the RPC method, which looks something like:\n\t// /<service>/<method>\n\t// Note the leading \"/\" character.\n\tMethodName string `protobuf:\"bytes,2,opt,name=method_name,json=methodName,proto3\" json:\"method_name,omitempty\"`\n\t// A single process may be used to run multiple virtual\n\t// servers with different identities.\n\t// The authority is the name of such a server identitiy.\n\t// It is typically a portion of the URI in the form of\n\t// <host> or <host>:<port> .\n\tAuthority string `protobuf:\"bytes,3,opt,name=authority,proto3\" json:\"authority,omitempty\"`\n\t// the RPC timeout\n\tTimeout              *duration.Duration `protobuf:\"bytes,4,opt,name=timeout,proto3\" json:\"timeout,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}           `json:\"-\"`\n\tXXX_unrecognized     []byte             `json:\"-\"`\n\tXXX_sizecache        int32              `json:\"-\"`\n}\n\nfunc (m *ClientHeader) Reset()         { *m = ClientHeader{} }\nfunc (m *ClientHeader) String() string { return proto.CompactTextString(m) }\nfunc (*ClientHeader) ProtoMessage()    {}\nfunc (*ClientHeader) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_binarylog_264c8c9c551ce911, []int{1}\n}\nfunc (m *ClientHeader) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_ClientHeader.Unmarshal(m, b)\n}\nfunc (m *ClientHeader) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_ClientHeader.Marshal(b, m, deterministic)\n}\nfunc (dst *ClientHeader) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_ClientHeader.Merge(dst, src)\n}\nfunc (m *ClientHeader) XXX_Size() int {\n\treturn xxx_messageInfo_ClientHeader.Size(m)\n}\nfunc (m *ClientHeader) XXX_DiscardUnknown() {\n\txxx_messageInfo_ClientHeader.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_ClientHeader proto.InternalMessageInfo\n\nfunc (m *ClientHeader) GetMetadata() *Metadata {\n\tif m != nil {\n\t\treturn m.Metadata\n\t}\n\treturn nil\n}\n\nfunc (m *ClientHeader) GetMethodName() string {\n\tif m != nil {\n\t\treturn m.MethodName\n\t}\n\treturn \"\"\n}\n\nfunc (m *ClientHeader) GetAuthority() string {\n\tif m != nil {\n\t\treturn m.Authority\n\t}\n\treturn \"\"\n}\n\nfunc (m *ClientHeader) GetTimeout() *duration.Duration {\n\tif m != nil {\n\t\treturn m.Timeout\n\t}\n\treturn nil\n}\n\ntype ServerHeader struct {\n\t// This contains only the metadata from the application.\n\tMetadata             *Metadata `protobuf:\"bytes,1,opt,name=metadata,proto3\" json:\"metadata,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}  `json:\"-\"`\n\tXXX_unrecognized     []byte    `json:\"-\"`\n\tXXX_sizecache        int32     `json:\"-\"`\n}\n\nfunc (m *ServerHeader) Reset()         { *m = ServerHeader{} }\nfunc (m *ServerHeader) String() string { return proto.CompactTextString(m) }\nfunc (*ServerHeader) ProtoMessage()    {}\nfunc (*ServerHeader) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_binarylog_264c8c9c551ce911, []int{2}\n}\nfunc (m *ServerHeader) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_ServerHeader.Unmarshal(m, b)\n}\nfunc (m *ServerHeader) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_ServerHeader.Marshal(b, m, deterministic)\n}\nfunc (dst *ServerHeader) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_ServerHeader.Merge(dst, src)\n}\nfunc (m *ServerHeader) XXX_Size() int {\n\treturn xxx_messageInfo_ServerHeader.Size(m)\n}\nfunc (m *ServerHeader) XXX_DiscardUnknown() {\n\txxx_messageInfo_ServerHeader.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_ServerHeader proto.InternalMessageInfo\n\nfunc (m *ServerHeader) GetMetadata() *Metadata {\n\tif m != nil {\n\t\treturn m.Metadata\n\t}\n\treturn nil\n}\n\ntype Trailer struct {\n\t// This contains only the metadata from the application.\n\tMetadata *Metadata `protobuf:\"bytes,1,opt,name=metadata,proto3\" json:\"metadata,omitempty\"`\n\t// The gRPC status code.\n\tStatusCode uint32 `protobuf:\"varint,2,opt,name=status_code,json=statusCode,proto3\" json:\"status_code,omitempty\"`\n\t// An original status message before any transport specific\n\t// encoding.\n\tStatusMessage string `protobuf:\"bytes,3,opt,name=status_message,json=statusMessage,proto3\" json:\"status_message,omitempty\"`\n\t// The value of the 'grpc-status-details-bin' metadata key. If\n\t// present, this is always an encoded 'google.rpc.Status' message.\n\tStatusDetails        []byte   `protobuf:\"bytes,4,opt,name=status_details,json=statusDetails,proto3\" json:\"status_details,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *Trailer) Reset()         { *m = Trailer{} }\nfunc (m *Trailer) String() string { return proto.CompactTextString(m) }\nfunc (*Trailer) ProtoMessage()    {}\nfunc (*Trailer) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_binarylog_264c8c9c551ce911, []int{3}\n}\nfunc (m *Trailer) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_Trailer.Unmarshal(m, b)\n}\nfunc (m *Trailer) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_Trailer.Marshal(b, m, deterministic)\n}\nfunc (dst *Trailer) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Trailer.Merge(dst, src)\n}\nfunc (m *Trailer) XXX_Size() int {\n\treturn xxx_messageInfo_Trailer.Size(m)\n}\nfunc (m *Trailer) XXX_DiscardUnknown() {\n\txxx_messageInfo_Trailer.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Trailer proto.InternalMessageInfo\n\nfunc (m *Trailer) GetMetadata() *Metadata {\n\tif m != nil {\n\t\treturn m.Metadata\n\t}\n\treturn nil\n}\n\nfunc (m *Trailer) GetStatusCode() uint32 {\n\tif m != nil {\n\t\treturn m.StatusCode\n\t}\n\treturn 0\n}\n\nfunc (m *Trailer) GetStatusMessage() string {\n\tif m != nil {\n\t\treturn m.StatusMessage\n\t}\n\treturn \"\"\n}\n\nfunc (m *Trailer) GetStatusDetails() []byte {\n\tif m != nil {\n\t\treturn m.StatusDetails\n\t}\n\treturn nil\n}\n\n// Message payload, used by CLIENT_MESSAGE and SERVER_MESSAGE\ntype Message struct {\n\t// Length of the message. It may not be the same as the length of the\n\t// data field, as the logging payload can be truncated or omitted.\n\tLength uint32 `protobuf:\"varint,1,opt,name=length,proto3\" json:\"length,omitempty\"`\n\t// May be truncated or omitted.\n\tData                 []byte   `protobuf:\"bytes,2,opt,name=data,proto3\" json:\"data,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *Message) Reset()         { *m = Message{} }\nfunc (m *Message) String() string { return proto.CompactTextString(m) }\nfunc (*Message) ProtoMessage()    {}\nfunc (*Message) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_binarylog_264c8c9c551ce911, []int{4}\n}\nfunc (m *Message) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_Message.Unmarshal(m, b)\n}\nfunc (m *Message) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_Message.Marshal(b, m, deterministic)\n}\nfunc (dst *Message) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Message.Merge(dst, src)\n}\nfunc (m *Message) XXX_Size() int {\n\treturn xxx_messageInfo_Message.Size(m)\n}\nfunc (m *Message) XXX_DiscardUnknown() {\n\txxx_messageInfo_Message.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Message proto.InternalMessageInfo\n\nfunc (m *Message) GetLength() uint32 {\n\tif m != nil {\n\t\treturn m.Length\n\t}\n\treturn 0\n}\n\nfunc (m *Message) GetData() []byte {\n\tif m != nil {\n\t\treturn m.Data\n\t}\n\treturn nil\n}\n\n// A list of metadata pairs, used in the payload of client header,\n// server header, and server trailer.\n// Implementations may omit some entries to honor the header limits\n// of GRPC_BINARY_LOG_CONFIG.\n//\n// Header keys added by gRPC are omitted. To be more specific,\n// implementations will not log the following entries, and this is\n// not to be treated as a truncation:\n// - entries handled by grpc that are not user visible, such as those\n//   that begin with 'grpc-' (with exception of grpc-trace-bin)\n//   or keys like 'lb-token'\n// - transport specific entries, including but not limited to:\n//   ':path', ':authority', 'content-encoding', 'user-agent', 'te', etc\n// - entries added for call credentials\n//\n// Implementations must always log grpc-trace-bin if it is present.\n// Practically speaking it will only be visible on server side because\n// grpc-trace-bin is managed by low level client side mechanisms\n// inaccessible from the application level. On server side, the\n// header is just a normal metadata key.\n// The pair will not count towards the size limit.\ntype Metadata struct {\n\tEntry                []*MetadataEntry `protobuf:\"bytes,1,rep,name=entry,proto3\" json:\"entry,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}         `json:\"-\"`\n\tXXX_unrecognized     []byte           `json:\"-\"`\n\tXXX_sizecache        int32            `json:\"-\"`\n}\n\nfunc (m *Metadata) Reset()         { *m = Metadata{} }\nfunc (m *Metadata) String() string { return proto.CompactTextString(m) }\nfunc (*Metadata) ProtoMessage()    {}\nfunc (*Metadata) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_binarylog_264c8c9c551ce911, []int{5}\n}\nfunc (m *Metadata) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_Metadata.Unmarshal(m, b)\n}\nfunc (m *Metadata) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_Metadata.Marshal(b, m, deterministic)\n}\nfunc (dst *Metadata) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Metadata.Merge(dst, src)\n}\nfunc (m *Metadata) XXX_Size() int {\n\treturn xxx_messageInfo_Metadata.Size(m)\n}\nfunc (m *Metadata) XXX_DiscardUnknown() {\n\txxx_messageInfo_Metadata.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Metadata proto.InternalMessageInfo\n\nfunc (m *Metadata) GetEntry() []*MetadataEntry {\n\tif m != nil {\n\t\treturn m.Entry\n\t}\n\treturn nil\n}\n\n// A metadata key value pair\ntype MetadataEntry struct {\n\tKey                  string   `protobuf:\"bytes,1,opt,name=key,proto3\" json:\"key,omitempty\"`\n\tValue                []byte   `protobuf:\"bytes,2,opt,name=value,proto3\" json:\"value,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *MetadataEntry) Reset()         { *m = MetadataEntry{} }\nfunc (m *MetadataEntry) String() string { return proto.CompactTextString(m) }\nfunc (*MetadataEntry) ProtoMessage()    {}\nfunc (*MetadataEntry) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_binarylog_264c8c9c551ce911, []int{6}\n}\nfunc (m *MetadataEntry) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_MetadataEntry.Unmarshal(m, b)\n}\nfunc (m *MetadataEntry) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_MetadataEntry.Marshal(b, m, deterministic)\n}\nfunc (dst *MetadataEntry) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_MetadataEntry.Merge(dst, src)\n}\nfunc (m *MetadataEntry) XXX_Size() int {\n\treturn xxx_messageInfo_MetadataEntry.Size(m)\n}\nfunc (m *MetadataEntry) XXX_DiscardUnknown() {\n\txxx_messageInfo_MetadataEntry.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_MetadataEntry proto.InternalMessageInfo\n\nfunc (m *MetadataEntry) GetKey() string {\n\tif m != nil {\n\t\treturn m.Key\n\t}\n\treturn \"\"\n}\n\nfunc (m *MetadataEntry) GetValue() []byte {\n\tif m != nil {\n\t\treturn m.Value\n\t}\n\treturn nil\n}\n\n// Address information\ntype Address struct {\n\tType    Address_Type `protobuf:\"varint,1,opt,name=type,proto3,enum=grpc.binarylog.v1.Address_Type\" json:\"type,omitempty\"`\n\tAddress string       `protobuf:\"bytes,2,opt,name=address,proto3\" json:\"address,omitempty\"`\n\t// only for TYPE_IPV4 and TYPE_IPV6\n\tIpPort               uint32   `protobuf:\"varint,3,opt,name=ip_port,json=ipPort,proto3\" json:\"ip_port,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *Address) Reset()         { *m = Address{} }\nfunc (m *Address) String() string { return proto.CompactTextString(m) }\nfunc (*Address) ProtoMessage()    {}\nfunc (*Address) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_binarylog_264c8c9c551ce911, []int{7}\n}\nfunc (m *Address) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_Address.Unmarshal(m, b)\n}\nfunc (m *Address) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_Address.Marshal(b, m, deterministic)\n}\nfunc (dst *Address) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_Address.Merge(dst, src)\n}\nfunc (m *Address) XXX_Size() int {\n\treturn xxx_messageInfo_Address.Size(m)\n}\nfunc (m *Address) XXX_DiscardUnknown() {\n\txxx_messageInfo_Address.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_Address proto.InternalMessageInfo\n\nfunc (m *Address) GetType() Address_Type {\n\tif m != nil {\n\t\treturn m.Type\n\t}\n\treturn Address_TYPE_UNKNOWN\n}\n\nfunc (m *Address) GetAddress() string {\n\tif m != nil {\n\t\treturn m.Address\n\t}\n\treturn \"\"\n}\n\nfunc (m *Address) GetIpPort() uint32 {\n\tif m != nil {\n\t\treturn m.IpPort\n\t}\n\treturn 0\n}\n\nfunc init() {\n\tproto.RegisterType((*GrpcLogEntry)(nil), \"grpc.binarylog.v1.GrpcLogEntry\")\n\tproto.RegisterType((*ClientHeader)(nil), \"grpc.binarylog.v1.ClientHeader\")\n\tproto.RegisterType((*ServerHeader)(nil), \"grpc.binarylog.v1.ServerHeader\")\n\tproto.RegisterType((*Trailer)(nil), \"grpc.binarylog.v1.Trailer\")\n\tproto.RegisterType((*Message)(nil), \"grpc.binarylog.v1.Message\")\n\tproto.RegisterType((*Metadata)(nil), \"grpc.binarylog.v1.Metadata\")\n\tproto.RegisterType((*MetadataEntry)(nil), \"grpc.binarylog.v1.MetadataEntry\")\n\tproto.RegisterType((*Address)(nil), \"grpc.binarylog.v1.Address\")\n\tproto.RegisterEnum(\"grpc.binarylog.v1.GrpcLogEntry_EventType\", GrpcLogEntry_EventType_name, GrpcLogEntry_EventType_value)\n\tproto.RegisterEnum(\"grpc.binarylog.v1.GrpcLogEntry_Logger\", GrpcLogEntry_Logger_name, GrpcLogEntry_Logger_value)\n\tproto.RegisterEnum(\"grpc.binarylog.v1.Address_Type\", Address_Type_name, Address_Type_value)\n}\n\nfunc init() {\n\tproto.RegisterFile(\"grpc/binarylog/grpc_binarylog_v1/binarylog.proto\", fileDescriptor_binarylog_264c8c9c551ce911)\n}\n\nvar fileDescriptor_binarylog_264c8c9c551ce911 = []byte{\n\t// 900 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x55, 0x51, 0x6f, 0xe3, 0x44,\n\t0x10, 0x3e, 0x37, 0x69, 0xdc, 0x4c, 0x92, 0xca, 0x5d, 0x95, 0x3b, 0x5f, 0x29, 0x34, 0xb2, 0x04,\n\t0x0a, 0x42, 0x72, 0xb9, 0x94, 0xeb, 0xf1, 0x02, 0x52, 0x92, 0xfa, 0xd2, 0x88, 0x5c, 0x1a, 0x6d,\n\t0x72, 0x3d, 0x40, 0x48, 0xd6, 0x36, 0x5e, 0x1c, 0x0b, 0xc7, 0x6b, 0xd6, 0x9b, 0xa0, 0xfc, 0x2c,\n\t0xde, 0x90, 0xee, 0x77, 0xf1, 0x8e, 0xbc, 0x6b, 0x27, 0xa6, 0x69, 0x0f, 0x09, 0xde, 0x3c, 0xdf,\n\t0x7c, 0xf3, 0xcd, 0xee, 0x78, 0x66, 0x16, 0xbe, 0xf2, 0x79, 0x3c, 0x3b, 0xbf, 0x0b, 0x22, 0xc2,\n\t0xd7, 0x21, 0xf3, 0xcf, 0x53, 0xd3, 0xdd, 0x98, 0xee, 0xea, 0xc5, 0xd6, 0x67, 0xc7, 0x9c, 0x09,\n\t0x86, 0x8e, 0x52, 0x8a, 0xbd, 0x45, 0x57, 0x2f, 0x4e, 0x3e, 0xf5, 0x19, 0xf3, 0x43, 0x7a, 0x2e,\n\t0x09, 0x77, 0xcb, 0x5f, 0xce, 0xbd, 0x25, 0x27, 0x22, 0x60, 0x91, 0x0a, 0x39, 0x39, 0xbb, 0xef,\n\t0x17, 0xc1, 0x82, 0x26, 0x82, 0x2c, 0x62, 0x45, 0xb0, 0xde, 0xeb, 0x50, 0xef, 0xf3, 0x78, 0x36,\n\t0x64, 0xbe, 0x13, 0x09, 0xbe, 0x46, 0xdf, 0x40, 0x75, 0xc3, 0x31, 0xb5, 0xa6, 0xd6, 0xaa, 0xb5,\n\t0x4f, 0x6c, 0xa5, 0x62, 0xe7, 0x2a, 0xf6, 0x34, 0x67, 0xe0, 0x2d, 0x19, 0x3d, 0x03, 0x7d, 0x46,\n\t0xc2, 0xd0, 0x0d, 0x3c, 0x73, 0xaf, 0xa9, 0xb5, 0xca, 0xb8, 0x92, 0x9a, 0x03, 0x0f, 0xbd, 0x84,\n\t0x67, 0x09, 0xfd, 0x6d, 0x49, 0xa3, 0x19, 0x75, 0x03, 0xcf, 0xfd, 0x3d, 0x10, 0xf3, 0x20, 0x72,\n\t0x53, 0xa7, 0x59, 0x92, 0xc4, 0xe3, 0xdc, 0x3d, 0xf0, 0xde, 0x49, 0x67, 0x8f, 0x84, 0x21, 0xfa,\n\t0x16, 0xca, 0x62, 0x1d, 0x53, 0xb3, 0xdc, 0xd4, 0x5a, 0x87, 0xed, 0x2f, 0xec, 0x9d, 0xdb, 0xdb,\n\t0xc5, 0x83, 0xdb, 0xce, 0x8a, 0x46, 0x62, 0xba, 0x8e, 0x29, 0x96, 0x61, 0xe8, 0x3b, 0xa8, 0x84,\n\t0xcc, 0xf7, 0x29, 0x37, 0xf7, 0xa5, 0xc0, 0xe7, 0xff, 0x26, 0x30, 0x94, 0x6c, 0x9c, 0x45, 0xa1,\n\t0xd7, 0xd0, 0x98, 0x85, 0x01, 0x8d, 0x84, 0x3b, 0xa7, 0xc4, 0xa3, 0xdc, 0xac, 0xc8, 0x62, 0x9c,\n\t0x3d, 0x20, 0xd3, 0x93, 0xbc, 0x6b, 0x49, 0xbb, 0x7e, 0x82, 0xeb, 0xb3, 0x82, 0x9d, 0xea, 0x24,\n\t0x94, 0xaf, 0x28, 0xcf, 0x75, 0xf4, 0x47, 0x75, 0x26, 0x92, 0xb7, 0xd5, 0x49, 0x0a, 0x36, 0xba,\n\t0x04, 0x7d, 0x41, 0x93, 0x84, 0xf8, 0xd4, 0x3c, 0xc8, 0x7f, 0xcb, 0x8e, 0xc2, 0x1b, 0xc5, 0xb8,\n\t0x7e, 0x82, 0x73, 0x72, 0x1a, 0x27, 0x38, 0x09, 0x42, 0xca, 0xcd, 0xea, 0xa3, 0x71, 0x53, 0xc5,\n\t0x48, 0xe3, 0x32, 0x32, 0xfa, 0x12, 0x8e, 0x62, 0xb2, 0x0e, 0x19, 0xf1, 0x5c, 0xc1, 0x97, 0xd1,\n\t0x8c, 0x08, 0xea, 0x99, 0xd0, 0xd4, 0x5a, 0x07, 0xd8, 0xc8, 0x1c, 0xd3, 0x1c, 0x47, 0x36, 0x94,\n\t0x63, 0x4a, 0xb9, 0x59, 0x7b, 0x34, 0x43, 0xc7, 0xf3, 0x38, 0x4d, 0x12, 0x2c, 0x79, 0xd6, 0x5f,\n\t0x1a, 0x54, 0x37, 0x3f, 0x0c, 0x3d, 0x05, 0xe4, 0xdc, 0x3a, 0xa3, 0xa9, 0x3b, 0xfd, 0x71, 0xec,\n\t0xb8, 0x6f, 0x47, 0xdf, 0x8f, 0x6e, 0xde, 0x8d, 0x8c, 0x27, 0xe8, 0x14, 0xcc, 0x02, 0xde, 0x1b,\n\t0x0e, 0xd2, 0xef, 0x6b, 0xa7, 0x73, 0xe5, 0x60, 0x43, 0xbb, 0xe7, 0x9d, 0x38, 0xf8, 0xd6, 0xc1,\n\t0xb9, 0x77, 0x0f, 0x7d, 0x02, 0xcf, 0x77, 0x63, 0xdf, 0x38, 0x93, 0x49, 0xa7, 0xef, 0x18, 0xa5,\n\t0x7b, 0xee, 0x2c, 0x38, 0x77, 0x97, 0x51, 0x13, 0x4e, 0x1f, 0xc8, 0xdc, 0x19, 0xbe, 0x76, 0x7b,\n\t0xc3, 0x9b, 0x89, 0x63, 0xec, 0x3f, 0x2c, 0x30, 0xc5, 0x9d, 0xc1, 0xd0, 0xc1, 0x46, 0x05, 0x7d,\n\t0x04, 0x47, 0x45, 0x81, 0xce, 0xa8, 0xe7, 0x0c, 0x0d, 0xdd, 0xea, 0x42, 0x45, 0xb5, 0x19, 0x42,\n\t0x70, 0x38, 0xbc, 0xe9, 0xf7, 0x1d, 0x5c, 0xb8, 0xef, 0x11, 0x34, 0x32, 0x4c, 0x65, 0x34, 0xb4,\n\t0x02, 0xa4, 0x52, 0x18, 0x7b, 0xdd, 0x2a, 0xe8, 0x59, 0xfd, 0xad, 0xf7, 0x1a, 0xd4, 0x8b, 0xcd,\n\t0x87, 0x5e, 0xc1, 0xc1, 0x82, 0x0a, 0xe2, 0x11, 0x41, 0xb2, 0xe1, 0xfd, 0xf8, 0xc1, 0x2e, 0x51,\n\t0x14, 0xbc, 0x21, 0xa3, 0x33, 0xa8, 0x2d, 0xa8, 0x98, 0x33, 0xcf, 0x8d, 0xc8, 0x82, 0xca, 0x01,\n\t0xae, 0x62, 0x50, 0xd0, 0x88, 0x2c, 0x28, 0x3a, 0x85, 0x2a, 0x59, 0x8a, 0x39, 0xe3, 0x81, 0x58,\n\t0xcb, 0xb1, 0xad, 0xe2, 0x2d, 0x80, 0x2e, 0x40, 0x4f, 0x17, 0x01, 0x5b, 0x0a, 0x39, 0xae, 0xb5,\n\t0xf6, 0xf3, 0x9d, 0x9d, 0x71, 0x95, 0x6d, 0x26, 0x9c, 0x33, 0xad, 0x3e, 0xd4, 0x8b, 0x1d, 0xff,\n\t0x9f, 0x0f, 0x6f, 0xfd, 0xa1, 0x81, 0x9e, 0x75, 0xf0, 0xff, 0xaa, 0x40, 0x22, 0x88, 0x58, 0x26,\n\t0xee, 0x8c, 0x79, 0xaa, 0x02, 0x0d, 0x0c, 0x0a, 0xea, 0x31, 0x8f, 0xa2, 0xcf, 0xe0, 0x30, 0x23,\n\t0xe4, 0x73, 0xa8, 0xca, 0xd0, 0x50, 0x68, 0x36, 0x7a, 0x05, 0x9a, 0x47, 0x05, 0x09, 0xc2, 0x44,\n\t0x56, 0xa4, 0x9e, 0xd3, 0xae, 0x14, 0x68, 0xbd, 0x04, 0x3d, 0x8f, 0x78, 0x0a, 0x95, 0x90, 0x46,\n\t0xbe, 0x98, 0xcb, 0x03, 0x37, 0x70, 0x66, 0x21, 0x04, 0x65, 0x79, 0x8d, 0x3d, 0x19, 0x2f, 0xbf,\n\t0xad, 0x2e, 0x1c, 0xe4, 0x67, 0x47, 0x97, 0xb0, 0x4f, 0xd3, 0xcd, 0x65, 0x6a, 0xcd, 0x52, 0xab,\n\t0xd6, 0x6e, 0x7e, 0xe0, 0x9e, 0x72, 0xc3, 0x61, 0x45, 0xb7, 0x5e, 0x41, 0xe3, 0x1f, 0x38, 0x32,\n\t0xa0, 0xf4, 0x2b, 0x5d, 0xcb, 0xec, 0x55, 0x9c, 0x7e, 0xa2, 0x63, 0xd8, 0x5f, 0x91, 0x70, 0x49,\n\t0xb3, 0xdc, 0xca, 0xb0, 0xfe, 0xd4, 0x40, 0xcf, 0xe6, 0x18, 0x5d, 0x64, 0xdb, 0x59, 0x93, 0xcb,\n\t0xf5, 0xec, 0xf1, 0x89, 0xb7, 0x0b, 0x3b, 0xd9, 0x04, 0x9d, 0x28, 0x34, 0xeb, 0xb0, 0xdc, 0x4c,\n\t0x1f, 0x8f, 0x20, 0x76, 0x63, 0xc6, 0x85, 0xac, 0x6a, 0x03, 0x57, 0x82, 0x78, 0xcc, 0xb8, 0xb0,\n\t0x1c, 0x28, 0xcb, 0x1d, 0x61, 0x40, 0xfd, 0xde, 0x76, 0x68, 0x40, 0x55, 0x22, 0x83, 0xf1, 0xed,\n\t0xd7, 0x86, 0x56, 0x34, 0x2f, 0x8d, 0xbd, 0x8d, 0xf9, 0x76, 0x34, 0xf8, 0xc1, 0x28, 0x75, 0x7f,\n\t0x86, 0xe3, 0x80, 0xed, 0x1e, 0xb2, 0x7b, 0xd8, 0x95, 0xd6, 0x90, 0xf9, 0xe3, 0xb4, 0x51, 0xc7,\n\t0xda, 0x4f, 0xed, 0xac, 0x71, 0x7d, 0x16, 0x92, 0xc8, 0xb7, 0x19, 0x57, 0x4f, 0xf3, 0x87, 0x5e,\n\t0xea, 0xbb, 0x8a, 0xec, 0xf2, 0x8b, 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, 0xe7, 0xf6, 0x4b, 0x50,\n\t0xd4, 0x07, 0x00, 0x00,\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/call.go",
    "content": "/*\n *\n * Copyright 2014 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\npackage grpc\n\nimport (\n\t\"context\"\n)\n\n// Invoke sends the RPC request on the wire and returns after response is\n// received.  This is typically called by generated code.\n//\n// All errors returned by Invoke are compatible with the status package.\nfunc (cc *ClientConn) Invoke(ctx context.Context, method string, args, reply interface{}, opts ...CallOption) error {\n\t// allow interceptor to see all applicable call options, which means those\n\t// configured as defaults from dial option as well as per-call options\n\topts = combine(cc.dopts.callOptions, opts)\n\n\tif cc.dopts.unaryInt != nil {\n\t\treturn cc.dopts.unaryInt(ctx, method, args, reply, cc, invoke, opts...)\n\t}\n\treturn invoke(ctx, method, args, reply, cc, opts...)\n}\n\nfunc combine(o1 []CallOption, o2 []CallOption) []CallOption {\n\t// we don't use append because o1 could have extra capacity whose\n\t// elements would be overwritten, which could cause inadvertent\n\t// sharing (and race conditions) between concurrent calls\n\tif len(o1) == 0 {\n\t\treturn o2\n\t} else if len(o2) == 0 {\n\t\treturn o1\n\t}\n\tret := make([]CallOption, len(o1)+len(o2))\n\tcopy(ret, o1)\n\tcopy(ret[len(o1):], o2)\n\treturn ret\n}\n\n// Invoke sends the RPC request on the wire and returns after response is\n// received.  This is typically called by generated code.\n//\n// DEPRECATED: Use ClientConn.Invoke instead.\nfunc Invoke(ctx context.Context, method string, args, reply interface{}, cc *ClientConn, opts ...CallOption) error {\n\treturn cc.Invoke(ctx, method, args, reply, opts...)\n}\n\nvar unaryStreamDesc = &StreamDesc{ServerStreams: false, ClientStreams: false}\n\nfunc invoke(ctx context.Context, method string, req, reply interface{}, cc *ClientConn, opts ...CallOption) error {\n\tcs, err := newClientStream(ctx, unaryStreamDesc, cc, method, opts...)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif err := cs.SendMsg(req); err != nil {\n\t\treturn err\n\t}\n\treturn cs.RecvMsg(reply)\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/clientconn.go",
    "content": "/*\n *\n * Copyright 2014 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\npackage grpc\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"math\"\n\t\"net\"\n\t\"reflect\"\n\t\"strings\"\n\t\"sync\"\n\t\"sync/atomic\"\n\t\"time\"\n\n\t\"google.golang.org/grpc/balancer\"\n\t_ \"google.golang.org/grpc/balancer/roundrobin\" // To register roundrobin.\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/connectivity\"\n\t\"google.golang.org/grpc/credentials\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/grpc/internal/backoff\"\n\t\"google.golang.org/grpc/internal/channelz\"\n\t\"google.golang.org/grpc/internal/envconfig\"\n\t\"google.golang.org/grpc/internal/grpcsync\"\n\t\"google.golang.org/grpc/internal/transport\"\n\t\"google.golang.org/grpc/keepalive\"\n\t\"google.golang.org/grpc/resolver\"\n\t_ \"google.golang.org/grpc/resolver/dns\"         // To register dns resolver.\n\t_ \"google.golang.org/grpc/resolver/passthrough\" // To register passthrough resolver.\n\t\"google.golang.org/grpc/serviceconfig\"\n\t\"google.golang.org/grpc/status\"\n)\n\nconst (\n\t// minimum time to give a connection to complete\n\tminConnectTimeout = 20 * time.Second\n\t// must match grpclbName in grpclb/grpclb.go\n\tgrpclbName = \"grpclb\"\n)\n\nvar (\n\t// ErrClientConnClosing indicates that the operation is illegal because\n\t// the ClientConn is closing.\n\t//\n\t// Deprecated: this error should not be relied upon by users; use the status\n\t// code of Canceled instead.\n\tErrClientConnClosing = status.Error(codes.Canceled, \"grpc: the client connection is closing\")\n\t// errConnDrain indicates that the connection starts to be drained and does not accept any new RPCs.\n\terrConnDrain = errors.New(\"grpc: the connection is drained\")\n\t// errConnClosing indicates that the connection is closing.\n\terrConnClosing = errors.New(\"grpc: the connection is closing\")\n\t// errBalancerClosed indicates that the balancer is closed.\n\terrBalancerClosed = errors.New(\"grpc: balancer is closed\")\n\t// invalidDefaultServiceConfigErrPrefix is used to prefix the json parsing error for the default\n\t// service config.\n\tinvalidDefaultServiceConfigErrPrefix = \"grpc: the provided default service config is invalid\"\n)\n\n// The following errors are returned from Dial and DialContext\nvar (\n\t// errNoTransportSecurity indicates that there is no transport security\n\t// being set for ClientConn. Users should either set one or explicitly\n\t// call WithInsecure DialOption to disable security.\n\terrNoTransportSecurity = errors.New(\"grpc: no transport security set (use grpc.WithInsecure() explicitly or set credentials)\")\n\t// errTransportCredsAndBundle indicates that creds bundle is used together\n\t// with other individual Transport Credentials.\n\terrTransportCredsAndBundle = errors.New(\"grpc: credentials.Bundle may not be used with individual TransportCredentials\")\n\t// errTransportCredentialsMissing indicates that users want to transmit security\n\t// information (e.g., OAuth2 token) which requires secure connection on an insecure\n\t// connection.\n\terrTransportCredentialsMissing = errors.New(\"grpc: the credentials require transport level security (use grpc.WithTransportCredentials() to set)\")\n\t// errCredentialsConflict indicates that grpc.WithTransportCredentials()\n\t// and grpc.WithInsecure() are both called for a connection.\n\terrCredentialsConflict = errors.New(\"grpc: transport credentials are set for an insecure connection (grpc.WithTransportCredentials() and grpc.WithInsecure() are both called)\")\n)\n\nconst (\n\tdefaultClientMaxReceiveMessageSize = 1024 * 1024 * 4\n\tdefaultClientMaxSendMessageSize    = math.MaxInt32\n\t// http2IOBufSize specifies the buffer size for sending frames.\n\tdefaultWriteBufSize = 32 * 1024\n\tdefaultReadBufSize  = 32 * 1024\n)\n\n// Dial creates a client connection to the given target.\nfunc Dial(target string, opts ...DialOption) (*ClientConn, error) {\n\treturn DialContext(context.Background(), target, opts...)\n}\n\n// DialContext creates a client connection to the given target. By default, it's\n// a non-blocking dial (the function won't wait for connections to be\n// established, and connecting happens in the background). To make it a blocking\n// dial, use WithBlock() dial option.\n//\n// In the non-blocking case, the ctx does not act against the connection. It\n// only controls the setup steps.\n//\n// In the blocking case, ctx can be used to cancel or expire the pending\n// connection. Once this function returns, the cancellation and expiration of\n// ctx will be noop. Users should call ClientConn.Close to terminate all the\n// pending operations after this function returns.\n//\n// The target name syntax is defined in\n// https://github.com/grpc/grpc/blob/master/doc/naming.md.\n// e.g. to use dns resolver, a \"dns:///\" prefix should be applied to the target.\nfunc DialContext(ctx context.Context, target string, opts ...DialOption) (conn *ClientConn, err error) {\n\tcc := &ClientConn{\n\t\ttarget:            target,\n\t\tcsMgr:             &connectivityStateManager{},\n\t\tconns:             make(map[*addrConn]struct{}),\n\t\tdopts:             defaultDialOptions(),\n\t\tblockingpicker:    newPickerWrapper(),\n\t\tczData:            new(channelzData),\n\t\tfirstResolveEvent: grpcsync.NewEvent(),\n\t}\n\tcc.retryThrottler.Store((*retryThrottler)(nil))\n\tcc.ctx, cc.cancel = context.WithCancel(context.Background())\n\n\tfor _, opt := range opts {\n\t\topt.apply(&cc.dopts)\n\t}\n\n\tchainUnaryClientInterceptors(cc)\n\tchainStreamClientInterceptors(cc)\n\n\tdefer func() {\n\t\tif err != nil {\n\t\t\tcc.Close()\n\t\t}\n\t}()\n\n\tif channelz.IsOn() {\n\t\tif cc.dopts.channelzParentID != 0 {\n\t\t\tcc.channelzID = channelz.RegisterChannel(&channelzChannel{cc}, cc.dopts.channelzParentID, target)\n\t\t\tchannelz.AddTraceEvent(cc.channelzID, &channelz.TraceEventDesc{\n\t\t\t\tDesc:     \"Channel Created\",\n\t\t\t\tSeverity: channelz.CtINFO,\n\t\t\t\tParent: &channelz.TraceEventDesc{\n\t\t\t\t\tDesc:     fmt.Sprintf(\"Nested Channel(id:%d) created\", cc.channelzID),\n\t\t\t\t\tSeverity: channelz.CtINFO,\n\t\t\t\t},\n\t\t\t})\n\t\t} else {\n\t\t\tcc.channelzID = channelz.RegisterChannel(&channelzChannel{cc}, 0, target)\n\t\t\tchannelz.AddTraceEvent(cc.channelzID, &channelz.TraceEventDesc{\n\t\t\t\tDesc:     \"Channel Created\",\n\t\t\t\tSeverity: channelz.CtINFO,\n\t\t\t})\n\t\t}\n\t\tcc.csMgr.channelzID = cc.channelzID\n\t}\n\n\tif !cc.dopts.insecure {\n\t\tif cc.dopts.copts.TransportCredentials == nil && cc.dopts.copts.CredsBundle == nil {\n\t\t\treturn nil, errNoTransportSecurity\n\t\t}\n\t\tif cc.dopts.copts.TransportCredentials != nil && cc.dopts.copts.CredsBundle != nil {\n\t\t\treturn nil, errTransportCredsAndBundle\n\t\t}\n\t} else {\n\t\tif cc.dopts.copts.TransportCredentials != nil || cc.dopts.copts.CredsBundle != nil {\n\t\t\treturn nil, errCredentialsConflict\n\t\t}\n\t\tfor _, cd := range cc.dopts.copts.PerRPCCredentials {\n\t\t\tif cd.RequireTransportSecurity() {\n\t\t\t\treturn nil, errTransportCredentialsMissing\n\t\t\t}\n\t\t}\n\t}\n\n\tif cc.dopts.defaultServiceConfigRawJSON != nil {\n\t\tsc, err := parseServiceConfig(*cc.dopts.defaultServiceConfigRawJSON)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"%s: %v\", invalidDefaultServiceConfigErrPrefix, err)\n\t\t}\n\t\tcc.dopts.defaultServiceConfig = sc\n\t}\n\tcc.mkp = cc.dopts.copts.KeepaliveParams\n\n\tif cc.dopts.copts.Dialer == nil {\n\t\tcc.dopts.copts.Dialer = newProxyDialer(\n\t\t\tfunc(ctx context.Context, addr string) (net.Conn, error) {\n\t\t\t\tnetwork, addr := parseDialTarget(addr)\n\t\t\t\treturn (&net.Dialer{}).DialContext(ctx, network, addr)\n\t\t\t},\n\t\t)\n\t}\n\n\tif cc.dopts.copts.UserAgent != \"\" {\n\t\tcc.dopts.copts.UserAgent += \" \" + grpcUA\n\t} else {\n\t\tcc.dopts.copts.UserAgent = grpcUA\n\t}\n\n\tif cc.dopts.timeout > 0 {\n\t\tvar cancel context.CancelFunc\n\t\tctx, cancel = context.WithTimeout(ctx, cc.dopts.timeout)\n\t\tdefer cancel()\n\t}\n\tdefer func() {\n\t\tselect {\n\t\tcase <-ctx.Done():\n\t\t\tconn, err = nil, ctx.Err()\n\t\tdefault:\n\t\t}\n\t}()\n\n\tscSet := false\n\tif cc.dopts.scChan != nil {\n\t\t// Try to get an initial service config.\n\t\tselect {\n\t\tcase sc, ok := <-cc.dopts.scChan:\n\t\t\tif ok {\n\t\t\t\tcc.sc = &sc\n\t\t\t\tscSet = true\n\t\t\t}\n\t\tdefault:\n\t\t}\n\t}\n\tif cc.dopts.bs == nil {\n\t\tcc.dopts.bs = backoff.Exponential{\n\t\t\tMaxDelay: DefaultBackoffConfig.MaxDelay,\n\t\t}\n\t}\n\tif cc.dopts.resolverBuilder == nil {\n\t\t// Only try to parse target when resolver builder is not already set.\n\t\tcc.parsedTarget = parseTarget(cc.target)\n\t\tgrpclog.Infof(\"parsed scheme: %q\", cc.parsedTarget.Scheme)\n\t\tcc.dopts.resolverBuilder = resolver.Get(cc.parsedTarget.Scheme)\n\t\tif cc.dopts.resolverBuilder == nil {\n\t\t\t// If resolver builder is still nil, the parsed target's scheme is\n\t\t\t// not registered. Fallback to default resolver and set Endpoint to\n\t\t\t// the original target.\n\t\t\tgrpclog.Infof(\"scheme %q not registered, fallback to default scheme\", cc.parsedTarget.Scheme)\n\t\t\tcc.parsedTarget = resolver.Target{\n\t\t\t\tScheme:   resolver.GetDefaultScheme(),\n\t\t\t\tEndpoint: target,\n\t\t\t}\n\t\t\tcc.dopts.resolverBuilder = resolver.Get(cc.parsedTarget.Scheme)\n\t\t}\n\t} else {\n\t\tcc.parsedTarget = resolver.Target{Endpoint: target}\n\t}\n\tcreds := cc.dopts.copts.TransportCredentials\n\tif creds != nil && creds.Info().ServerName != \"\" {\n\t\tcc.authority = creds.Info().ServerName\n\t} else if cc.dopts.insecure && cc.dopts.authority != \"\" {\n\t\tcc.authority = cc.dopts.authority\n\t} else {\n\t\t// Use endpoint from \"scheme://authority/endpoint\" as the default\n\t\t// authority for ClientConn.\n\t\tcc.authority = cc.parsedTarget.Endpoint\n\t}\n\n\tif cc.dopts.scChan != nil && !scSet {\n\t\t// Blocking wait for the initial service config.\n\t\tselect {\n\t\tcase sc, ok := <-cc.dopts.scChan:\n\t\t\tif ok {\n\t\t\t\tcc.sc = &sc\n\t\t\t}\n\t\tcase <-ctx.Done():\n\t\t\treturn nil, ctx.Err()\n\t\t}\n\t}\n\tif cc.dopts.scChan != nil {\n\t\tgo cc.scWatcher()\n\t}\n\n\tvar credsClone credentials.TransportCredentials\n\tif creds := cc.dopts.copts.TransportCredentials; creds != nil {\n\t\tcredsClone = creds.Clone()\n\t}\n\tcc.balancerBuildOpts = balancer.BuildOptions{\n\t\tDialCreds:        credsClone,\n\t\tCredsBundle:      cc.dopts.copts.CredsBundle,\n\t\tDialer:           cc.dopts.copts.Dialer,\n\t\tChannelzParentID: cc.channelzID,\n\t\tTarget:           cc.parsedTarget,\n\t}\n\n\t// Build the resolver.\n\trWrapper, err := newCCResolverWrapper(cc)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to build resolver: %v\", err)\n\t}\n\n\tcc.mu.Lock()\n\tcc.resolverWrapper = rWrapper\n\tcc.mu.Unlock()\n\t// A blocking dial blocks until the clientConn is ready.\n\tif cc.dopts.block {\n\t\tfor {\n\t\t\ts := cc.GetState()\n\t\t\tif s == connectivity.Ready {\n\t\t\t\tbreak\n\t\t\t} else if cc.dopts.copts.FailOnNonTempDialError && s == connectivity.TransientFailure {\n\t\t\t\tif err = cc.blockingpicker.connectionError(); err != nil {\n\t\t\t\t\tterr, ok := err.(interface {\n\t\t\t\t\t\tTemporary() bool\n\t\t\t\t\t})\n\t\t\t\t\tif ok && !terr.Temporary() {\n\t\t\t\t\t\treturn nil, err\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif !cc.WaitForStateChange(ctx, s) {\n\t\t\t\t// ctx got timeout or canceled.\n\t\t\t\treturn nil, ctx.Err()\n\t\t\t}\n\t\t}\n\t}\n\n\treturn cc, nil\n}\n\n// chainUnaryClientInterceptors chains all unary client interceptors into one.\nfunc chainUnaryClientInterceptors(cc *ClientConn) {\n\tinterceptors := cc.dopts.chainUnaryInts\n\t// Prepend dopts.unaryInt to the chaining interceptors if it exists, since unaryInt will\n\t// be executed before any other chained interceptors.\n\tif cc.dopts.unaryInt != nil {\n\t\tinterceptors = append([]UnaryClientInterceptor{cc.dopts.unaryInt}, interceptors...)\n\t}\n\tvar chainedInt UnaryClientInterceptor\n\tif len(interceptors) == 0 {\n\t\tchainedInt = nil\n\t} else if len(interceptors) == 1 {\n\t\tchainedInt = interceptors[0]\n\t} else {\n\t\tchainedInt = func(ctx context.Context, method string, req, reply interface{}, cc *ClientConn, invoker UnaryInvoker, opts ...CallOption) error {\n\t\t\treturn interceptors[0](ctx, method, req, reply, cc, getChainUnaryInvoker(interceptors, 0, invoker), opts...)\n\t\t}\n\t}\n\tcc.dopts.unaryInt = chainedInt\n}\n\n// getChainUnaryInvoker recursively generate the chained unary invoker.\nfunc getChainUnaryInvoker(interceptors []UnaryClientInterceptor, curr int, finalInvoker UnaryInvoker) UnaryInvoker {\n\tif curr == len(interceptors)-1 {\n\t\treturn finalInvoker\n\t}\n\treturn func(ctx context.Context, method string, req, reply interface{}, cc *ClientConn, opts ...CallOption) error {\n\t\treturn interceptors[curr+1](ctx, method, req, reply, cc, getChainUnaryInvoker(interceptors, curr+1, finalInvoker), opts...)\n\t}\n}\n\n// chainStreamClientInterceptors chains all stream client interceptors into one.\nfunc chainStreamClientInterceptors(cc *ClientConn) {\n\tinterceptors := cc.dopts.chainStreamInts\n\t// Prepend dopts.streamInt to the chaining interceptors if it exists, since streamInt will\n\t// be executed before any other chained interceptors.\n\tif cc.dopts.streamInt != nil {\n\t\tinterceptors = append([]StreamClientInterceptor{cc.dopts.streamInt}, interceptors...)\n\t}\n\tvar chainedInt StreamClientInterceptor\n\tif len(interceptors) == 0 {\n\t\tchainedInt = nil\n\t} else if len(interceptors) == 1 {\n\t\tchainedInt = interceptors[0]\n\t} else {\n\t\tchainedInt = func(ctx context.Context, desc *StreamDesc, cc *ClientConn, method string, streamer Streamer, opts ...CallOption) (ClientStream, error) {\n\t\t\treturn interceptors[0](ctx, desc, cc, method, getChainStreamer(interceptors, 0, streamer), opts...)\n\t\t}\n\t}\n\tcc.dopts.streamInt = chainedInt\n}\n\n// getChainStreamer recursively generate the chained client stream constructor.\nfunc getChainStreamer(interceptors []StreamClientInterceptor, curr int, finalStreamer Streamer) Streamer {\n\tif curr == len(interceptors)-1 {\n\t\treturn finalStreamer\n\t}\n\treturn func(ctx context.Context, desc *StreamDesc, cc *ClientConn, method string, opts ...CallOption) (ClientStream, error) {\n\t\treturn interceptors[curr+1](ctx, desc, cc, method, getChainStreamer(interceptors, curr+1, finalStreamer), opts...)\n\t}\n}\n\n// connectivityStateManager keeps the connectivity.State of ClientConn.\n// This struct will eventually be exported so the balancers can access it.\ntype connectivityStateManager struct {\n\tmu         sync.Mutex\n\tstate      connectivity.State\n\tnotifyChan chan struct{}\n\tchannelzID int64\n}\n\n// updateState updates the connectivity.State of ClientConn.\n// If there's a change it notifies goroutines waiting on state change to\n// happen.\nfunc (csm *connectivityStateManager) updateState(state connectivity.State) {\n\tcsm.mu.Lock()\n\tdefer csm.mu.Unlock()\n\tif csm.state == connectivity.Shutdown {\n\t\treturn\n\t}\n\tif csm.state == state {\n\t\treturn\n\t}\n\tcsm.state = state\n\tif channelz.IsOn() {\n\t\tchannelz.AddTraceEvent(csm.channelzID, &channelz.TraceEventDesc{\n\t\t\tDesc:     fmt.Sprintf(\"Channel Connectivity change to %v\", state),\n\t\t\tSeverity: channelz.CtINFO,\n\t\t})\n\t}\n\tif csm.notifyChan != nil {\n\t\t// There are other goroutines waiting on this channel.\n\t\tclose(csm.notifyChan)\n\t\tcsm.notifyChan = nil\n\t}\n}\n\nfunc (csm *connectivityStateManager) getState() connectivity.State {\n\tcsm.mu.Lock()\n\tdefer csm.mu.Unlock()\n\treturn csm.state\n}\n\nfunc (csm *connectivityStateManager) getNotifyChan() <-chan struct{} {\n\tcsm.mu.Lock()\n\tdefer csm.mu.Unlock()\n\tif csm.notifyChan == nil {\n\t\tcsm.notifyChan = make(chan struct{})\n\t}\n\treturn csm.notifyChan\n}\n\n// ClientConn represents a client connection to an RPC server.\ntype ClientConn struct {\n\tctx    context.Context\n\tcancel context.CancelFunc\n\n\ttarget       string\n\tparsedTarget resolver.Target\n\tauthority    string\n\tdopts        dialOptions\n\tcsMgr        *connectivityStateManager\n\n\tbalancerBuildOpts balancer.BuildOptions\n\tblockingpicker    *pickerWrapper\n\n\tmu              sync.RWMutex\n\tresolverWrapper *ccResolverWrapper\n\tsc              *ServiceConfig\n\tconns           map[*addrConn]struct{}\n\t// Keepalive parameter can be updated if a GoAway is received.\n\tmkp             keepalive.ClientParameters\n\tcurBalancerName string\n\tbalancerWrapper *ccBalancerWrapper\n\tretryThrottler  atomic.Value\n\n\tfirstResolveEvent *grpcsync.Event\n\n\tchannelzID int64 // channelz unique identification number\n\tczData     *channelzData\n}\n\n// WaitForStateChange waits until the connectivity.State of ClientConn changes from sourceState or\n// ctx expires. A true value is returned in former case and false in latter.\n// This is an EXPERIMENTAL API.\nfunc (cc *ClientConn) WaitForStateChange(ctx context.Context, sourceState connectivity.State) bool {\n\tch := cc.csMgr.getNotifyChan()\n\tif cc.csMgr.getState() != sourceState {\n\t\treturn true\n\t}\n\tselect {\n\tcase <-ctx.Done():\n\t\treturn false\n\tcase <-ch:\n\t\treturn true\n\t}\n}\n\n// GetState returns the connectivity.State of ClientConn.\n// This is an EXPERIMENTAL API.\nfunc (cc *ClientConn) GetState() connectivity.State {\n\treturn cc.csMgr.getState()\n}\n\nfunc (cc *ClientConn) scWatcher() {\n\tfor {\n\t\tselect {\n\t\tcase sc, ok := <-cc.dopts.scChan:\n\t\t\tif !ok {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tcc.mu.Lock()\n\t\t\t// TODO: load balance policy runtime change is ignored.\n\t\t\t// We may revisit this decision in the future.\n\t\t\tcc.sc = &sc\n\t\t\tcc.mu.Unlock()\n\t\tcase <-cc.ctx.Done():\n\t\t\treturn\n\t\t}\n\t}\n}\n\n// waitForResolvedAddrs blocks until the resolver has provided addresses or the\n// context expires.  Returns nil unless the context expires first; otherwise\n// returns a status error based on the context.\nfunc (cc *ClientConn) waitForResolvedAddrs(ctx context.Context) error {\n\t// This is on the RPC path, so we use a fast path to avoid the\n\t// more-expensive \"select\" below after the resolver has returned once.\n\tif cc.firstResolveEvent.HasFired() {\n\t\treturn nil\n\t}\n\tselect {\n\tcase <-cc.firstResolveEvent.Done():\n\t\treturn nil\n\tcase <-ctx.Done():\n\t\treturn status.FromContextError(ctx.Err()).Err()\n\tcase <-cc.ctx.Done():\n\t\treturn ErrClientConnClosing\n\t}\n}\n\nfunc (cc *ClientConn) updateResolverState(s resolver.State) error {\n\tcc.mu.Lock()\n\tdefer cc.mu.Unlock()\n\t// Check if the ClientConn is already closed. Some fields (e.g.\n\t// balancerWrapper) are set to nil when closing the ClientConn, and could\n\t// cause nil pointer panic if we don't have this check.\n\tif cc.conns == nil {\n\t\treturn nil\n\t}\n\n\tif cc.dopts.disableServiceConfig || s.ServiceConfig == nil {\n\t\tif cc.dopts.defaultServiceConfig != nil && cc.sc == nil {\n\t\t\tcc.applyServiceConfig(cc.dopts.defaultServiceConfig)\n\t\t}\n\t} else if sc, ok := s.ServiceConfig.(*ServiceConfig); ok {\n\t\tcc.applyServiceConfig(sc)\n\t}\n\n\tvar balCfg serviceconfig.LoadBalancingConfig\n\tif cc.dopts.balancerBuilder == nil {\n\t\t// Only look at balancer types and switch balancer if balancer dial\n\t\t// option is not set.\n\t\tvar newBalancerName string\n\t\tif cc.sc != nil && cc.sc.lbConfig != nil {\n\t\t\tnewBalancerName = cc.sc.lbConfig.name\n\t\t\tbalCfg = cc.sc.lbConfig.cfg\n\t\t} else {\n\t\t\tvar isGRPCLB bool\n\t\t\tfor _, a := range s.Addresses {\n\t\t\t\tif a.Type == resolver.GRPCLB {\n\t\t\t\t\tisGRPCLB = true\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif isGRPCLB {\n\t\t\t\tnewBalancerName = grpclbName\n\t\t\t} else if cc.sc != nil && cc.sc.LB != nil {\n\t\t\t\tnewBalancerName = *cc.sc.LB\n\t\t\t} else {\n\t\t\t\tnewBalancerName = PickFirstBalancerName\n\t\t\t}\n\t\t}\n\t\tcc.switchBalancer(newBalancerName)\n\t} else if cc.balancerWrapper == nil {\n\t\t// Balancer dial option was set, and this is the first time handling\n\t\t// resolved addresses. Build a balancer with dopts.balancerBuilder.\n\t\tcc.curBalancerName = cc.dopts.balancerBuilder.Name()\n\t\tcc.balancerWrapper = newCCBalancerWrapper(cc, cc.dopts.balancerBuilder, cc.balancerBuildOpts)\n\t}\n\n\tcc.balancerWrapper.updateClientConnState(&balancer.ClientConnState{ResolverState: s, BalancerConfig: balCfg})\n\treturn nil\n}\n\n// switchBalancer starts the switching from current balancer to the balancer\n// with the given name.\n//\n// It will NOT send the current address list to the new balancer. If needed,\n// caller of this function should send address list to the new balancer after\n// this function returns.\n//\n// Caller must hold cc.mu.\nfunc (cc *ClientConn) switchBalancer(name string) {\n\tif strings.EqualFold(cc.curBalancerName, name) {\n\t\treturn\n\t}\n\n\tgrpclog.Infof(\"ClientConn switching balancer to %q\", name)\n\tif cc.dopts.balancerBuilder != nil {\n\t\tgrpclog.Infoln(\"ignoring balancer switching: Balancer DialOption used instead\")\n\t\treturn\n\t}\n\tif cc.balancerWrapper != nil {\n\t\tcc.balancerWrapper.close()\n\t}\n\n\tbuilder := balancer.Get(name)\n\tif channelz.IsOn() {\n\t\tif builder == nil {\n\t\t\tchannelz.AddTraceEvent(cc.channelzID, &channelz.TraceEventDesc{\n\t\t\t\tDesc:     fmt.Sprintf(\"Channel switches to new LB policy %q due to fallback from invalid balancer name\", PickFirstBalancerName),\n\t\t\t\tSeverity: channelz.CtWarning,\n\t\t\t})\n\t\t} else {\n\t\t\tchannelz.AddTraceEvent(cc.channelzID, &channelz.TraceEventDesc{\n\t\t\t\tDesc:     fmt.Sprintf(\"Channel switches to new LB policy %q\", name),\n\t\t\t\tSeverity: channelz.CtINFO,\n\t\t\t})\n\t\t}\n\t}\n\tif builder == nil {\n\t\tgrpclog.Infof(\"failed to get balancer builder for: %v, using pick_first instead\", name)\n\t\tbuilder = newPickfirstBuilder()\n\t}\n\n\tcc.curBalancerName = builder.Name()\n\tcc.balancerWrapper = newCCBalancerWrapper(cc, builder, cc.balancerBuildOpts)\n}\n\nfunc (cc *ClientConn) handleSubConnStateChange(sc balancer.SubConn, s connectivity.State) {\n\tcc.mu.Lock()\n\tif cc.conns == nil {\n\t\tcc.mu.Unlock()\n\t\treturn\n\t}\n\t// TODO(bar switching) send updates to all balancer wrappers when balancer\n\t// gracefully switching is supported.\n\tcc.balancerWrapper.handleSubConnStateChange(sc, s)\n\tcc.mu.Unlock()\n}\n\n// newAddrConn creates an addrConn for addrs and adds it to cc.conns.\n//\n// Caller needs to make sure len(addrs) > 0.\nfunc (cc *ClientConn) newAddrConn(addrs []resolver.Address, opts balancer.NewSubConnOptions) (*addrConn, error) {\n\tac := &addrConn{\n\t\tcc:           cc,\n\t\taddrs:        addrs,\n\t\tscopts:       opts,\n\t\tdopts:        cc.dopts,\n\t\tczData:       new(channelzData),\n\t\tresetBackoff: make(chan struct{}),\n\t}\n\tac.ctx, ac.cancel = context.WithCancel(cc.ctx)\n\t// Track ac in cc. This needs to be done before any getTransport(...) is called.\n\tcc.mu.Lock()\n\tif cc.conns == nil {\n\t\tcc.mu.Unlock()\n\t\treturn nil, ErrClientConnClosing\n\t}\n\tif channelz.IsOn() {\n\t\tac.channelzID = channelz.RegisterSubChannel(ac, cc.channelzID, \"\")\n\t\tchannelz.AddTraceEvent(ac.channelzID, &channelz.TraceEventDesc{\n\t\t\tDesc:     \"Subchannel Created\",\n\t\t\tSeverity: channelz.CtINFO,\n\t\t\tParent: &channelz.TraceEventDesc{\n\t\t\t\tDesc:     fmt.Sprintf(\"Subchannel(id:%d) created\", ac.channelzID),\n\t\t\t\tSeverity: channelz.CtINFO,\n\t\t\t},\n\t\t})\n\t}\n\tcc.conns[ac] = struct{}{}\n\tcc.mu.Unlock()\n\treturn ac, nil\n}\n\n// removeAddrConn removes the addrConn in the subConn from clientConn.\n// It also tears down the ac with the given error.\nfunc (cc *ClientConn) removeAddrConn(ac *addrConn, err error) {\n\tcc.mu.Lock()\n\tif cc.conns == nil {\n\t\tcc.mu.Unlock()\n\t\treturn\n\t}\n\tdelete(cc.conns, ac)\n\tcc.mu.Unlock()\n\tac.tearDown(err)\n}\n\nfunc (cc *ClientConn) channelzMetric() *channelz.ChannelInternalMetric {\n\treturn &channelz.ChannelInternalMetric{\n\t\tState:                    cc.GetState(),\n\t\tTarget:                   cc.target,\n\t\tCallsStarted:             atomic.LoadInt64(&cc.czData.callsStarted),\n\t\tCallsSucceeded:           atomic.LoadInt64(&cc.czData.callsSucceeded),\n\t\tCallsFailed:              atomic.LoadInt64(&cc.czData.callsFailed),\n\t\tLastCallStartedTimestamp: time.Unix(0, atomic.LoadInt64(&cc.czData.lastCallStartedTime)),\n\t}\n}\n\n// Target returns the target string of the ClientConn.\n// This is an EXPERIMENTAL API.\nfunc (cc *ClientConn) Target() string {\n\treturn cc.target\n}\n\nfunc (cc *ClientConn) incrCallsStarted() {\n\tatomic.AddInt64(&cc.czData.callsStarted, 1)\n\tatomic.StoreInt64(&cc.czData.lastCallStartedTime, time.Now().UnixNano())\n}\n\nfunc (cc *ClientConn) incrCallsSucceeded() {\n\tatomic.AddInt64(&cc.czData.callsSucceeded, 1)\n}\n\nfunc (cc *ClientConn) incrCallsFailed() {\n\tatomic.AddInt64(&cc.czData.callsFailed, 1)\n}\n\n// connect starts creating a transport.\n// It does nothing if the ac is not IDLE.\n// TODO(bar) Move this to the addrConn section.\nfunc (ac *addrConn) connect() error {\n\tac.mu.Lock()\n\tif ac.state == connectivity.Shutdown {\n\t\tac.mu.Unlock()\n\t\treturn errConnClosing\n\t}\n\tif ac.state != connectivity.Idle {\n\t\tac.mu.Unlock()\n\t\treturn nil\n\t}\n\tac.mu.Unlock()\n\n\t// Start a goroutine connecting to the server asynchronously.\n\tgo ac.resetTransport()\n\treturn nil\n}\n\n// tryUpdateAddrs tries to update ac.addrs with the new addresses list.\n//\n// If ac is Connecting, it returns false. The caller should tear down the ac and\n// create a new one. Note that the backoff will be reset when this happens.\n//\n// If ac is TransientFailure, it updates ac.addrs and returns true. The updated\n// addresses will be picked up by retry in the next iteration after backoff.\n//\n// If ac is Shutdown or Idle, it updates ac.addrs and returns true.\n//\n// If ac is Ready, it checks whether current connected address of ac is in the\n// new addrs list.\n//  - If true, it updates ac.addrs and returns true. The ac will keep using\n//    the existing connection.\n//  - If false, it does nothing and returns false.\nfunc (ac *addrConn) tryUpdateAddrs(addrs []resolver.Address) bool {\n\tac.mu.Lock()\n\tdefer ac.mu.Unlock()\n\tgrpclog.Infof(\"addrConn: tryUpdateAddrs curAddr: %v, addrs: %v\", ac.curAddr, addrs)\n\tif ac.state == connectivity.Shutdown ||\n\t\tac.state == connectivity.TransientFailure ||\n\t\tac.state == connectivity.Idle {\n\t\tac.addrs = addrs\n\t\treturn true\n\t}\n\n\tif ac.state == connectivity.Connecting {\n\t\treturn false\n\t}\n\n\t// ac.state is Ready, try to find the connected address.\n\tvar curAddrFound bool\n\tfor _, a := range addrs {\n\t\tif reflect.DeepEqual(ac.curAddr, a) {\n\t\t\tcurAddrFound = true\n\t\t\tbreak\n\t\t}\n\t}\n\tgrpclog.Infof(\"addrConn: tryUpdateAddrs curAddrFound: %v\", curAddrFound)\n\tif curAddrFound {\n\t\tac.addrs = addrs\n\t}\n\n\treturn curAddrFound\n}\n\n// GetMethodConfig gets the method config of the input method.\n// If there's an exact match for input method (i.e. /service/method), we return\n// the corresponding MethodConfig.\n// If there isn't an exact match for the input method, we look for the default config\n// under the service (i.e /service/). If there is a default MethodConfig for\n// the service, we return it.\n// Otherwise, we return an empty MethodConfig.\nfunc (cc *ClientConn) GetMethodConfig(method string) MethodConfig {\n\t// TODO: Avoid the locking here.\n\tcc.mu.RLock()\n\tdefer cc.mu.RUnlock()\n\tif cc.sc == nil {\n\t\treturn MethodConfig{}\n\t}\n\tm, ok := cc.sc.Methods[method]\n\tif !ok {\n\t\ti := strings.LastIndex(method, \"/\")\n\t\tm = cc.sc.Methods[method[:i+1]]\n\t}\n\treturn m\n}\n\nfunc (cc *ClientConn) healthCheckConfig() *healthCheckConfig {\n\tcc.mu.RLock()\n\tdefer cc.mu.RUnlock()\n\tif cc.sc == nil {\n\t\treturn nil\n\t}\n\treturn cc.sc.healthCheckConfig\n}\n\nfunc (cc *ClientConn) getTransport(ctx context.Context, failfast bool, method string) (transport.ClientTransport, func(balancer.DoneInfo), error) {\n\tt, done, err := cc.blockingpicker.pick(ctx, failfast, balancer.PickOptions{\n\t\tFullMethodName: method,\n\t})\n\tif err != nil {\n\t\treturn nil, nil, toRPCErr(err)\n\t}\n\treturn t, done, nil\n}\n\nfunc (cc *ClientConn) applyServiceConfig(sc *ServiceConfig) error {\n\tif sc == nil {\n\t\t// should never reach here.\n\t\treturn fmt.Errorf(\"got nil pointer for service config\")\n\t}\n\tcc.sc = sc\n\n\tif cc.sc.retryThrottling != nil {\n\t\tnewThrottler := &retryThrottler{\n\t\t\ttokens: cc.sc.retryThrottling.MaxTokens,\n\t\t\tmax:    cc.sc.retryThrottling.MaxTokens,\n\t\t\tthresh: cc.sc.retryThrottling.MaxTokens / 2,\n\t\t\tratio:  cc.sc.retryThrottling.TokenRatio,\n\t\t}\n\t\tcc.retryThrottler.Store(newThrottler)\n\t} else {\n\t\tcc.retryThrottler.Store((*retryThrottler)(nil))\n\t}\n\n\treturn nil\n}\n\nfunc (cc *ClientConn) resolveNow(o resolver.ResolveNowOption) {\n\tcc.mu.RLock()\n\tr := cc.resolverWrapper\n\tcc.mu.RUnlock()\n\tif r == nil {\n\t\treturn\n\t}\n\tgo r.resolveNow(o)\n}\n\n// ResetConnectBackoff wakes up all subchannels in transient failure and causes\n// them to attempt another connection immediately.  It also resets the backoff\n// times used for subsequent attempts regardless of the current state.\n//\n// In general, this function should not be used.  Typical service or network\n// outages result in a reasonable client reconnection strategy by default.\n// However, if a previously unavailable network becomes available, this may be\n// used to trigger an immediate reconnect.\n//\n// This API is EXPERIMENTAL.\nfunc (cc *ClientConn) ResetConnectBackoff() {\n\tcc.mu.Lock()\n\tdefer cc.mu.Unlock()\n\tfor ac := range cc.conns {\n\t\tac.resetConnectBackoff()\n\t}\n}\n\n// Close tears down the ClientConn and all underlying connections.\nfunc (cc *ClientConn) Close() error {\n\tdefer cc.cancel()\n\n\tcc.mu.Lock()\n\tif cc.conns == nil {\n\t\tcc.mu.Unlock()\n\t\treturn ErrClientConnClosing\n\t}\n\tconns := cc.conns\n\tcc.conns = nil\n\tcc.csMgr.updateState(connectivity.Shutdown)\n\n\trWrapper := cc.resolverWrapper\n\tcc.resolverWrapper = nil\n\tbWrapper := cc.balancerWrapper\n\tcc.balancerWrapper = nil\n\tcc.mu.Unlock()\n\n\tcc.blockingpicker.close()\n\n\tif rWrapper != nil {\n\t\trWrapper.close()\n\t}\n\tif bWrapper != nil {\n\t\tbWrapper.close()\n\t}\n\n\tfor ac := range conns {\n\t\tac.tearDown(ErrClientConnClosing)\n\t}\n\tif channelz.IsOn() {\n\t\tted := &channelz.TraceEventDesc{\n\t\t\tDesc:     \"Channel Deleted\",\n\t\t\tSeverity: channelz.CtINFO,\n\t\t}\n\t\tif cc.dopts.channelzParentID != 0 {\n\t\t\tted.Parent = &channelz.TraceEventDesc{\n\t\t\t\tDesc:     fmt.Sprintf(\"Nested channel(id:%d) deleted\", cc.channelzID),\n\t\t\t\tSeverity: channelz.CtINFO,\n\t\t\t}\n\t\t}\n\t\tchannelz.AddTraceEvent(cc.channelzID, ted)\n\t\t// TraceEvent needs to be called before RemoveEntry, as TraceEvent may add trace reference to\n\t\t// the entity being deleted, and thus prevent it from being deleted right away.\n\t\tchannelz.RemoveEntry(cc.channelzID)\n\t}\n\treturn nil\n}\n\n// addrConn is a network connection to a given address.\ntype addrConn struct {\n\tctx    context.Context\n\tcancel context.CancelFunc\n\n\tcc     *ClientConn\n\tdopts  dialOptions\n\tacbw   balancer.SubConn\n\tscopts balancer.NewSubConnOptions\n\n\t// transport is set when there's a viable transport (note: ac state may not be READY as LB channel\n\t// health checking may require server to report healthy to set ac to READY), and is reset\n\t// to nil when the current transport should no longer be used to create a stream (e.g. after GoAway\n\t// is received, transport is closed, ac has been torn down).\n\ttransport transport.ClientTransport // The current transport.\n\n\tmu      sync.Mutex\n\tcurAddr resolver.Address   // The current address.\n\taddrs   []resolver.Address // All addresses that the resolver resolved to.\n\n\t// Use updateConnectivityState for updating addrConn's connectivity state.\n\tstate connectivity.State\n\n\tbackoffIdx   int // Needs to be stateful for resetConnectBackoff.\n\tresetBackoff chan struct{}\n\n\tchannelzID int64 // channelz unique identification number.\n\tczData     *channelzData\n}\n\n// Note: this requires a lock on ac.mu.\nfunc (ac *addrConn) updateConnectivityState(s connectivity.State) {\n\tif ac.state == s {\n\t\treturn\n\t}\n\n\tupdateMsg := fmt.Sprintf(\"Subchannel Connectivity change to %v\", s)\n\tac.state = s\n\tif channelz.IsOn() {\n\t\tchannelz.AddTraceEvent(ac.channelzID, &channelz.TraceEventDesc{\n\t\t\tDesc:     updateMsg,\n\t\t\tSeverity: channelz.CtINFO,\n\t\t})\n\t}\n\tac.cc.handleSubConnStateChange(ac.acbw, s)\n}\n\n// adjustParams updates parameters used to create transports upon\n// receiving a GoAway.\nfunc (ac *addrConn) adjustParams(r transport.GoAwayReason) {\n\tswitch r {\n\tcase transport.GoAwayTooManyPings:\n\t\tv := 2 * ac.dopts.copts.KeepaliveParams.Time\n\t\tac.cc.mu.Lock()\n\t\tif v > ac.cc.mkp.Time {\n\t\t\tac.cc.mkp.Time = v\n\t\t}\n\t\tac.cc.mu.Unlock()\n\t}\n}\n\nfunc (ac *addrConn) resetTransport() {\n\tfor i := 0; ; i++ {\n\t\tif i > 0 {\n\t\t\tac.cc.resolveNow(resolver.ResolveNowOption{})\n\t\t}\n\n\t\tac.mu.Lock()\n\t\tif ac.state == connectivity.Shutdown {\n\t\t\tac.mu.Unlock()\n\t\t\treturn\n\t\t}\n\n\t\taddrs := ac.addrs\n\t\tbackoffFor := ac.dopts.bs.Backoff(ac.backoffIdx)\n\t\t// This will be the duration that dial gets to finish.\n\t\tdialDuration := minConnectTimeout\n\t\tif ac.dopts.minConnectTimeout != nil {\n\t\t\tdialDuration = ac.dopts.minConnectTimeout()\n\t\t}\n\n\t\tif dialDuration < backoffFor {\n\t\t\t// Give dial more time as we keep failing to connect.\n\t\t\tdialDuration = backoffFor\n\t\t}\n\t\t// We can potentially spend all the time trying the first address, and\n\t\t// if the server accepts the connection and then hangs, the following\n\t\t// addresses will never be tried.\n\t\t//\n\t\t// The spec doesn't mention what should be done for multiple addresses.\n\t\t// https://github.com/grpc/grpc/blob/master/doc/connection-backoff.md#proposed-backoff-algorithm\n\t\tconnectDeadline := time.Now().Add(dialDuration)\n\n\t\tac.updateConnectivityState(connectivity.Connecting)\n\t\tac.transport = nil\n\t\tac.mu.Unlock()\n\n\t\tnewTr, addr, reconnect, err := ac.tryAllAddrs(addrs, connectDeadline)\n\t\tif err != nil {\n\t\t\t// After exhausting all addresses, the addrConn enters\n\t\t\t// TRANSIENT_FAILURE.\n\t\t\tac.mu.Lock()\n\t\t\tif ac.state == connectivity.Shutdown {\n\t\t\t\tac.mu.Unlock()\n\t\t\t\treturn\n\t\t\t}\n\t\t\tac.updateConnectivityState(connectivity.TransientFailure)\n\n\t\t\t// Backoff.\n\t\t\tb := ac.resetBackoff\n\t\t\tac.mu.Unlock()\n\n\t\t\ttimer := time.NewTimer(backoffFor)\n\t\t\tselect {\n\t\t\tcase <-timer.C:\n\t\t\t\tac.mu.Lock()\n\t\t\t\tac.backoffIdx++\n\t\t\t\tac.mu.Unlock()\n\t\t\tcase <-b:\n\t\t\t\ttimer.Stop()\n\t\t\tcase <-ac.ctx.Done():\n\t\t\t\ttimer.Stop()\n\t\t\t\treturn\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\tac.mu.Lock()\n\t\tif ac.state == connectivity.Shutdown {\n\t\t\tnewTr.Close()\n\t\t\tac.mu.Unlock()\n\t\t\treturn\n\t\t}\n\t\tac.curAddr = addr\n\t\tac.transport = newTr\n\t\tac.backoffIdx = 0\n\n\t\thealthCheckConfig := ac.cc.healthCheckConfig()\n\t\t// LB channel health checking is only enabled when all the four requirements below are met:\n\t\t// 1. it is not disabled by the user with the WithDisableHealthCheck DialOption,\n\t\t// 2. the internal.HealthCheckFunc is set by importing the grpc/healthcheck package,\n\t\t// 3. a service config with non-empty healthCheckConfig field is provided,\n\t\t// 4. the current load balancer allows it.\n\t\thctx, hcancel := context.WithCancel(ac.ctx)\n\t\thealthcheckManagingState := false\n\t\tif !ac.cc.dopts.disableHealthCheck && healthCheckConfig != nil && ac.scopts.HealthCheckEnabled {\n\t\t\tif ac.cc.dopts.healthCheckFunc == nil {\n\t\t\t\t// TODO: add a link to the health check doc in the error message.\n\t\t\t\tgrpclog.Error(\"the client side LB channel health check function has not been set.\")\n\t\t\t} else {\n\t\t\t\t// TODO(deklerk) refactor to just return transport\n\t\t\t\tgo ac.startHealthCheck(hctx, newTr, addr, healthCheckConfig.ServiceName)\n\t\t\t\thealthcheckManagingState = true\n\t\t\t}\n\t\t}\n\t\tif !healthcheckManagingState {\n\t\t\tac.updateConnectivityState(connectivity.Ready)\n\t\t}\n\t\tac.mu.Unlock()\n\n\t\t// Block until the created transport is down. And when this happens,\n\t\t// we restart from the top of the addr list.\n\t\t<-reconnect.Done()\n\t\thcancel()\n\n\t\t// Need to reconnect after a READY, the addrConn enters\n\t\t// TRANSIENT_FAILURE.\n\t\t//\n\t\t// This will set addrConn to TRANSIENT_FAILURE for a very short period\n\t\t// of time, and turns CONNECTING. It seems reasonable to skip this, but\n\t\t// READY-CONNECTING is not a valid transition.\n\t\tac.mu.Lock()\n\t\tif ac.state == connectivity.Shutdown {\n\t\t\tac.mu.Unlock()\n\t\t\treturn\n\t\t}\n\t\tac.updateConnectivityState(connectivity.TransientFailure)\n\t\tac.mu.Unlock()\n\t}\n}\n\n// tryAllAddrs tries to creates a connection to the addresses, and stop when at the\n// first successful one. It returns the transport, the address and a Event in\n// the successful case. The Event fires when the returned transport disconnects.\nfunc (ac *addrConn) tryAllAddrs(addrs []resolver.Address, connectDeadline time.Time) (transport.ClientTransport, resolver.Address, *grpcsync.Event, error) {\n\tfor _, addr := range addrs {\n\t\tac.mu.Lock()\n\t\tif ac.state == connectivity.Shutdown {\n\t\t\tac.mu.Unlock()\n\t\t\treturn nil, resolver.Address{}, nil, errConnClosing\n\t\t}\n\n\t\tac.cc.mu.RLock()\n\t\tac.dopts.copts.KeepaliveParams = ac.cc.mkp\n\t\tac.cc.mu.RUnlock()\n\n\t\tcopts := ac.dopts.copts\n\t\tif ac.scopts.CredsBundle != nil {\n\t\t\tcopts.CredsBundle = ac.scopts.CredsBundle\n\t\t}\n\t\tac.mu.Unlock()\n\n\t\tif channelz.IsOn() {\n\t\t\tchannelz.AddTraceEvent(ac.channelzID, &channelz.TraceEventDesc{\n\t\t\t\tDesc:     fmt.Sprintf(\"Subchannel picks a new address %q to connect\", addr.Addr),\n\t\t\t\tSeverity: channelz.CtINFO,\n\t\t\t})\n\t\t}\n\n\t\tnewTr, reconnect, err := ac.createTransport(addr, copts, connectDeadline)\n\t\tif err == nil {\n\t\t\treturn newTr, addr, reconnect, nil\n\t\t}\n\t\tac.cc.blockingpicker.updateConnectionError(err)\n\t}\n\n\t// Couldn't connect to any address.\n\treturn nil, resolver.Address{}, nil, fmt.Errorf(\"couldn't connect to any address\")\n}\n\n// createTransport creates a connection to addr. It returns the transport and a\n// Event in the successful case. The Event fires when the returned transport\n// disconnects.\nfunc (ac *addrConn) createTransport(addr resolver.Address, copts transport.ConnectOptions, connectDeadline time.Time) (transport.ClientTransport, *grpcsync.Event, error) {\n\tprefaceReceived := make(chan struct{})\n\tonCloseCalled := make(chan struct{})\n\treconnect := grpcsync.NewEvent()\n\n\ttarget := transport.TargetInfo{\n\t\tAddr:      addr.Addr,\n\t\tMetadata:  addr.Metadata,\n\t\tAuthority: ac.cc.authority,\n\t}\n\n\tonGoAway := func(r transport.GoAwayReason) {\n\t\tac.mu.Lock()\n\t\tac.adjustParams(r)\n\t\tac.mu.Unlock()\n\t\treconnect.Fire()\n\t}\n\n\tonClose := func() {\n\t\tclose(onCloseCalled)\n\t\treconnect.Fire()\n\t}\n\n\tonPrefaceReceipt := func() {\n\t\tclose(prefaceReceived)\n\t}\n\n\tconnectCtx, cancel := context.WithDeadline(ac.ctx, connectDeadline)\n\tdefer cancel()\n\tif channelz.IsOn() {\n\t\tcopts.ChannelzParentID = ac.channelzID\n\t}\n\n\tnewTr, err := transport.NewClientTransport(connectCtx, ac.cc.ctx, target, copts, onPrefaceReceipt, onGoAway, onClose)\n\tif err != nil {\n\t\t// newTr is either nil, or closed.\n\t\tgrpclog.Warningf(\"grpc: addrConn.createTransport failed to connect to %v. Err :%v. Reconnecting...\", addr, err)\n\t\treturn nil, nil, err\n\t}\n\n\tif ac.dopts.reqHandshake == envconfig.RequireHandshakeOn {\n\t\tselect {\n\t\tcase <-time.After(connectDeadline.Sub(time.Now())):\n\t\t\t// We didn't get the preface in time.\n\t\t\tnewTr.Close()\n\t\t\tgrpclog.Warningf(\"grpc: addrConn.createTransport failed to connect to %v: didn't receive server preface in time. Reconnecting...\", addr)\n\t\t\treturn nil, nil, errors.New(\"timed out waiting for server handshake\")\n\t\tcase <-prefaceReceived:\n\t\t\t// We got the preface - huzzah! things are good.\n\t\tcase <-onCloseCalled:\n\t\t\t// The transport has already closed - noop.\n\t\t\treturn nil, nil, errors.New(\"connection closed\")\n\t\t\t// TODO(deklerk) this should bail on ac.ctx.Done(). Add a test and fix.\n\t\t}\n\t}\n\treturn newTr, reconnect, nil\n}\n\nfunc (ac *addrConn) startHealthCheck(ctx context.Context, newTr transport.ClientTransport, addr resolver.Address, serviceName string) {\n\t// Set up the health check helper functions\n\tnewStream := func() (interface{}, error) {\n\t\treturn ac.newClientStream(ctx, &StreamDesc{ServerStreams: true}, \"/grpc.health.v1.Health/Watch\", newTr)\n\t}\n\tfirstReady := true\n\treportHealth := func(ok bool) {\n\t\tac.mu.Lock()\n\t\tdefer ac.mu.Unlock()\n\t\tif ac.transport != newTr {\n\t\t\treturn\n\t\t}\n\t\tif ok {\n\t\t\tif firstReady {\n\t\t\t\tfirstReady = false\n\t\t\t\tac.curAddr = addr\n\t\t\t}\n\t\t\tac.updateConnectivityState(connectivity.Ready)\n\t\t} else {\n\t\t\tac.updateConnectivityState(connectivity.TransientFailure)\n\t\t}\n\t}\n\terr := ac.cc.dopts.healthCheckFunc(ctx, newStream, reportHealth, serviceName)\n\tif err != nil {\n\t\tif status.Code(err) == codes.Unimplemented {\n\t\t\tif channelz.IsOn() {\n\t\t\t\tchannelz.AddTraceEvent(ac.channelzID, &channelz.TraceEventDesc{\n\t\t\t\t\tDesc:     \"Subchannel health check is unimplemented at server side, thus health check is disabled\",\n\t\t\t\t\tSeverity: channelz.CtError,\n\t\t\t\t})\n\t\t\t}\n\t\t\tgrpclog.Error(\"Subchannel health check is unimplemented at server side, thus health check is disabled\")\n\t\t} else {\n\t\t\tgrpclog.Errorf(\"HealthCheckFunc exits with unexpected error %v\", err)\n\t\t}\n\t}\n}\n\nfunc (ac *addrConn) resetConnectBackoff() {\n\tac.mu.Lock()\n\tclose(ac.resetBackoff)\n\tac.backoffIdx = 0\n\tac.resetBackoff = make(chan struct{})\n\tac.mu.Unlock()\n}\n\n// getReadyTransport returns the transport if ac's state is READY.\n// Otherwise it returns nil, false.\n// If ac's state is IDLE, it will trigger ac to connect.\nfunc (ac *addrConn) getReadyTransport() (transport.ClientTransport, bool) {\n\tac.mu.Lock()\n\tif ac.state == connectivity.Ready && ac.transport != nil {\n\t\tt := ac.transport\n\t\tac.mu.Unlock()\n\t\treturn t, true\n\t}\n\tvar idle bool\n\tif ac.state == connectivity.Idle {\n\t\tidle = true\n\t}\n\tac.mu.Unlock()\n\t// Trigger idle ac to connect.\n\tif idle {\n\t\tac.connect()\n\t}\n\treturn nil, false\n}\n\n// tearDown starts to tear down the addrConn.\n// TODO(zhaoq): Make this synchronous to avoid unbounded memory consumption in\n// some edge cases (e.g., the caller opens and closes many addrConn's in a\n// tight loop.\n// tearDown doesn't remove ac from ac.cc.conns.\nfunc (ac *addrConn) tearDown(err error) {\n\tac.mu.Lock()\n\tif ac.state == connectivity.Shutdown {\n\t\tac.mu.Unlock()\n\t\treturn\n\t}\n\tcurTr := ac.transport\n\tac.transport = nil\n\t// We have to set the state to Shutdown before anything else to prevent races\n\t// between setting the state and logic that waits on context cancelation / etc.\n\tac.updateConnectivityState(connectivity.Shutdown)\n\tac.cancel()\n\tac.curAddr = resolver.Address{}\n\tif err == errConnDrain && curTr != nil {\n\t\t// GracefulClose(...) may be executed multiple times when\n\t\t// i) receiving multiple GoAway frames from the server; or\n\t\t// ii) there are concurrent name resolver/Balancer triggered\n\t\t// address removal and GoAway.\n\t\t// We have to unlock and re-lock here because GracefulClose => Close => onClose, which requires locking ac.mu.\n\t\tac.mu.Unlock()\n\t\tcurTr.GracefulClose()\n\t\tac.mu.Lock()\n\t}\n\tif channelz.IsOn() {\n\t\tchannelz.AddTraceEvent(ac.channelzID, &channelz.TraceEventDesc{\n\t\t\tDesc:     \"Subchannel Deleted\",\n\t\t\tSeverity: channelz.CtINFO,\n\t\t\tParent: &channelz.TraceEventDesc{\n\t\t\t\tDesc:     fmt.Sprintf(\"Subchanel(id:%d) deleted\", ac.channelzID),\n\t\t\t\tSeverity: channelz.CtINFO,\n\t\t\t},\n\t\t})\n\t\t// TraceEvent needs to be called before RemoveEntry, as TraceEvent may add trace reference to\n\t\t// the entity beng deleted, and thus prevent it from being deleted right away.\n\t\tchannelz.RemoveEntry(ac.channelzID)\n\t}\n\tac.mu.Unlock()\n}\n\nfunc (ac *addrConn) getState() connectivity.State {\n\tac.mu.Lock()\n\tdefer ac.mu.Unlock()\n\treturn ac.state\n}\n\nfunc (ac *addrConn) ChannelzMetric() *channelz.ChannelInternalMetric {\n\tac.mu.Lock()\n\taddr := ac.curAddr.Addr\n\tac.mu.Unlock()\n\treturn &channelz.ChannelInternalMetric{\n\t\tState:                    ac.getState(),\n\t\tTarget:                   addr,\n\t\tCallsStarted:             atomic.LoadInt64(&ac.czData.callsStarted),\n\t\tCallsSucceeded:           atomic.LoadInt64(&ac.czData.callsSucceeded),\n\t\tCallsFailed:              atomic.LoadInt64(&ac.czData.callsFailed),\n\t\tLastCallStartedTimestamp: time.Unix(0, atomic.LoadInt64(&ac.czData.lastCallStartedTime)),\n\t}\n}\n\nfunc (ac *addrConn) incrCallsStarted() {\n\tatomic.AddInt64(&ac.czData.callsStarted, 1)\n\tatomic.StoreInt64(&ac.czData.lastCallStartedTime, time.Now().UnixNano())\n}\n\nfunc (ac *addrConn) incrCallsSucceeded() {\n\tatomic.AddInt64(&ac.czData.callsSucceeded, 1)\n}\n\nfunc (ac *addrConn) incrCallsFailed() {\n\tatomic.AddInt64(&ac.czData.callsFailed, 1)\n}\n\ntype retryThrottler struct {\n\tmax    float64\n\tthresh float64\n\tratio  float64\n\n\tmu     sync.Mutex\n\ttokens float64 // TODO(dfawley): replace with atomic and remove lock.\n}\n\n// throttle subtracts a retry token from the pool and returns whether a retry\n// should be throttled (disallowed) based upon the retry throttling policy in\n// the service config.\nfunc (rt *retryThrottler) throttle() bool {\n\tif rt == nil {\n\t\treturn false\n\t}\n\trt.mu.Lock()\n\tdefer rt.mu.Unlock()\n\trt.tokens--\n\tif rt.tokens < 0 {\n\t\trt.tokens = 0\n\t}\n\treturn rt.tokens <= rt.thresh\n}\n\nfunc (rt *retryThrottler) successfulRPC() {\n\tif rt == nil {\n\t\treturn\n\t}\n\trt.mu.Lock()\n\tdefer rt.mu.Unlock()\n\trt.tokens += rt.ratio\n\tif rt.tokens > rt.max {\n\t\trt.tokens = rt.max\n\t}\n}\n\ntype channelzChannel struct {\n\tcc *ClientConn\n}\n\nfunc (c *channelzChannel) ChannelzMetric() *channelz.ChannelInternalMetric {\n\treturn c.cc.channelzMetric()\n}\n\n// ErrClientConnTimeout indicates that the ClientConn cannot establish the\n// underlying connections within the specified timeout.\n//\n// Deprecated: This error is never returned by grpc and should not be\n// referenced by users.\nvar ErrClientConnTimeout = errors.New(\"grpc: timed out when dialing\")\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/codec.go",
    "content": "/*\n *\n * Copyright 2014 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\npackage grpc\n\nimport (\n\t\"google.golang.org/grpc/encoding\"\n\t_ \"google.golang.org/grpc/encoding/proto\" // to register the Codec for \"proto\"\n)\n\n// baseCodec contains the functionality of both Codec and encoding.Codec, but\n// omits the name/string, which vary between the two and are not needed for\n// anything besides the registry in the encoding package.\ntype baseCodec interface {\n\tMarshal(v interface{}) ([]byte, error)\n\tUnmarshal(data []byte, v interface{}) error\n}\n\nvar _ baseCodec = Codec(nil)\nvar _ baseCodec = encoding.Codec(nil)\n\n// Codec defines the interface gRPC uses to encode and decode messages.\n// Note that implementations of this interface must be thread safe;\n// a Codec's methods can be called from concurrent goroutines.\n//\n// Deprecated: use encoding.Codec instead.\ntype Codec interface {\n\t// Marshal returns the wire format of v.\n\tMarshal(v interface{}) ([]byte, error)\n\t// Unmarshal parses the wire format into v.\n\tUnmarshal(data []byte, v interface{}) error\n\t// String returns the name of the Codec implementation.  This is unused by\n\t// gRPC.\n\tString() string\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/codes/code_string.go",
    "content": "/*\n *\n * Copyright 2017 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\npackage codes\n\nimport \"strconv\"\n\nfunc (c Code) String() string {\n\tswitch c {\n\tcase OK:\n\t\treturn \"OK\"\n\tcase Canceled:\n\t\treturn \"Canceled\"\n\tcase Unknown:\n\t\treturn \"Unknown\"\n\tcase InvalidArgument:\n\t\treturn \"InvalidArgument\"\n\tcase DeadlineExceeded:\n\t\treturn \"DeadlineExceeded\"\n\tcase NotFound:\n\t\treturn \"NotFound\"\n\tcase AlreadyExists:\n\t\treturn \"AlreadyExists\"\n\tcase PermissionDenied:\n\t\treturn \"PermissionDenied\"\n\tcase ResourceExhausted:\n\t\treturn \"ResourceExhausted\"\n\tcase FailedPrecondition:\n\t\treturn \"FailedPrecondition\"\n\tcase Aborted:\n\t\treturn \"Aborted\"\n\tcase OutOfRange:\n\t\treturn \"OutOfRange\"\n\tcase Unimplemented:\n\t\treturn \"Unimplemented\"\n\tcase Internal:\n\t\treturn \"Internal\"\n\tcase Unavailable:\n\t\treturn \"Unavailable\"\n\tcase DataLoss:\n\t\treturn \"DataLoss\"\n\tcase Unauthenticated:\n\t\treturn \"Unauthenticated\"\n\tdefault:\n\t\treturn \"Code(\" + strconv.FormatInt(int64(c), 10) + \")\"\n\t}\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/codes/codes.go",
    "content": "/*\n *\n * Copyright 2014 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n// Package codes defines the canonical error codes used by gRPC. It is\n// consistent across various languages.\npackage codes // import \"google.golang.org/grpc/codes\"\n\nimport (\n\t\"fmt\"\n\t\"strconv\"\n)\n\n// A Code is an unsigned 32-bit error code as defined in the gRPC spec.\ntype Code uint32\n\nconst (\n\t// OK is returned on success.\n\tOK Code = 0\n\n\t// Canceled indicates the operation was canceled (typically by the caller).\n\tCanceled Code = 1\n\n\t// Unknown error. An example of where this error may be returned is\n\t// if a Status value received from another address space belongs to\n\t// an error-space that is not known in this address space. Also\n\t// errors raised by APIs that do not return enough error information\n\t// may be converted to this error.\n\tUnknown Code = 2\n\n\t// InvalidArgument indicates client specified an invalid argument.\n\t// Note that this differs from FailedPrecondition. It indicates arguments\n\t// that are problematic regardless of the state of the system\n\t// (e.g., a malformed file name).\n\tInvalidArgument Code = 3\n\n\t// DeadlineExceeded means operation expired before completion.\n\t// For operations that change the state of the system, this error may be\n\t// returned even if the operation has completed successfully. For\n\t// example, a successful response from a server could have been delayed\n\t// long enough for the deadline to expire.\n\tDeadlineExceeded Code = 4\n\n\t// NotFound means some requested entity (e.g., file or directory) was\n\t// not found.\n\tNotFound Code = 5\n\n\t// AlreadyExists means an attempt to create an entity failed because one\n\t// already exists.\n\tAlreadyExists Code = 6\n\n\t// PermissionDenied indicates the caller does not have permission to\n\t// execute the specified operation. It must not be used for rejections\n\t// caused by exhausting some resource (use ResourceExhausted\n\t// instead for those errors). It must not be\n\t// used if the caller cannot be identified (use Unauthenticated\n\t// instead for those errors).\n\tPermissionDenied Code = 7\n\n\t// ResourceExhausted indicates some resource has been exhausted, perhaps\n\t// a per-user quota, or perhaps the entire file system is out of space.\n\tResourceExhausted Code = 8\n\n\t// FailedPrecondition indicates operation was rejected because the\n\t// system is not in a state required for the operation's execution.\n\t// For example, directory to be deleted may be non-empty, an rmdir\n\t// operation is applied to a non-directory, etc.\n\t//\n\t// A litmus test that may help a service implementor in deciding\n\t// between FailedPrecondition, Aborted, and Unavailable:\n\t//  (a) Use Unavailable if the client can retry just the failing call.\n\t//  (b) Use Aborted if the client should retry at a higher-level\n\t//      (e.g., restarting a read-modify-write sequence).\n\t//  (c) Use FailedPrecondition if the client should not retry until\n\t//      the system state has been explicitly fixed. E.g., if an \"rmdir\"\n\t//      fails because the directory is non-empty, FailedPrecondition\n\t//      should be returned since the client should not retry unless\n\t//      they have first fixed up the directory by deleting files from it.\n\t//  (d) Use FailedPrecondition if the client performs conditional\n\t//      REST Get/Update/Delete on a resource and the resource on the\n\t//      server does not match the condition. E.g., conflicting\n\t//      read-modify-write on the same resource.\n\tFailedPrecondition Code = 9\n\n\t// Aborted indicates the operation was aborted, typically due to a\n\t// concurrency issue like sequencer check failures, transaction aborts,\n\t// etc.\n\t//\n\t// See litmus test above for deciding between FailedPrecondition,\n\t// Aborted, and Unavailable.\n\tAborted Code = 10\n\n\t// OutOfRange means operation was attempted past the valid range.\n\t// E.g., seeking or reading past end of file.\n\t//\n\t// Unlike InvalidArgument, this error indicates a problem that may\n\t// be fixed if the system state changes. For example, a 32-bit file\n\t// system will generate InvalidArgument if asked to read at an\n\t// offset that is not in the range [0,2^32-1], but it will generate\n\t// OutOfRange if asked to read from an offset past the current\n\t// file size.\n\t//\n\t// There is a fair bit of overlap between FailedPrecondition and\n\t// OutOfRange. We recommend using OutOfRange (the more specific\n\t// error) when it applies so that callers who are iterating through\n\t// a space can easily look for an OutOfRange error to detect when\n\t// they are done.\n\tOutOfRange Code = 11\n\n\t// Unimplemented indicates operation is not implemented or not\n\t// supported/enabled in this service.\n\tUnimplemented Code = 12\n\n\t// Internal errors. Means some invariants expected by underlying\n\t// system has been broken. If you see one of these errors,\n\t// something is very broken.\n\tInternal Code = 13\n\n\t// Unavailable indicates the service is currently unavailable.\n\t// This is a most likely a transient condition and may be corrected\n\t// by retrying with a backoff. Note that it is not always safe to retry\n\t// non-idempotent operations.\n\t//\n\t// See litmus test above for deciding between FailedPrecondition,\n\t// Aborted, and Unavailable.\n\tUnavailable Code = 14\n\n\t// DataLoss indicates unrecoverable data loss or corruption.\n\tDataLoss Code = 15\n\n\t// Unauthenticated indicates the request does not have valid\n\t// authentication credentials for the operation.\n\tUnauthenticated Code = 16\n\n\t_maxCode = 17\n)\n\nvar strToCode = map[string]Code{\n\t`\"OK\"`: OK,\n\t`\"CANCELLED\"`:/* [sic] */ Canceled,\n\t`\"UNKNOWN\"`:             Unknown,\n\t`\"INVALID_ARGUMENT\"`:    InvalidArgument,\n\t`\"DEADLINE_EXCEEDED\"`:   DeadlineExceeded,\n\t`\"NOT_FOUND\"`:           NotFound,\n\t`\"ALREADY_EXISTS\"`:      AlreadyExists,\n\t`\"PERMISSION_DENIED\"`:   PermissionDenied,\n\t`\"RESOURCE_EXHAUSTED\"`:  ResourceExhausted,\n\t`\"FAILED_PRECONDITION\"`: FailedPrecondition,\n\t`\"ABORTED\"`:             Aborted,\n\t`\"OUT_OF_RANGE\"`:        OutOfRange,\n\t`\"UNIMPLEMENTED\"`:       Unimplemented,\n\t`\"INTERNAL\"`:            Internal,\n\t`\"UNAVAILABLE\"`:         Unavailable,\n\t`\"DATA_LOSS\"`:           DataLoss,\n\t`\"UNAUTHENTICATED\"`:     Unauthenticated,\n}\n\n// UnmarshalJSON unmarshals b into the Code.\nfunc (c *Code) UnmarshalJSON(b []byte) error {\n\t// From json.Unmarshaler: By convention, to approximate the behavior of\n\t// Unmarshal itself, Unmarshalers implement UnmarshalJSON([]byte(\"null\")) as\n\t// a no-op.\n\tif string(b) == \"null\" {\n\t\treturn nil\n\t}\n\tif c == nil {\n\t\treturn fmt.Errorf(\"nil receiver passed to UnmarshalJSON\")\n\t}\n\n\tif ci, err := strconv.ParseUint(string(b), 10, 32); err == nil {\n\t\tif ci >= _maxCode {\n\t\t\treturn fmt.Errorf(\"invalid code: %q\", ci)\n\t\t}\n\n\t\t*c = Code(ci)\n\t\treturn nil\n\t}\n\n\tif jc, ok := strToCode[string(b)]; ok {\n\t\t*c = jc\n\t\treturn nil\n\t}\n\treturn fmt.Errorf(\"invalid code: %q\", string(b))\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/connectivity/connectivity.go",
    "content": "/*\n *\n * Copyright 2017 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n// Package connectivity defines connectivity semantics.\n// For details, see https://github.com/grpc/grpc/blob/master/doc/connectivity-semantics-and-api.md.\n// All APIs in this package are experimental.\npackage connectivity\n\nimport (\n\t\"context\"\n\n\t\"google.golang.org/grpc/grpclog\"\n)\n\n// State indicates the state of connectivity.\n// It can be the state of a ClientConn or SubConn.\ntype State int\n\nfunc (s State) String() string {\n\tswitch s {\n\tcase Idle:\n\t\treturn \"IDLE\"\n\tcase Connecting:\n\t\treturn \"CONNECTING\"\n\tcase Ready:\n\t\treturn \"READY\"\n\tcase TransientFailure:\n\t\treturn \"TRANSIENT_FAILURE\"\n\tcase Shutdown:\n\t\treturn \"SHUTDOWN\"\n\tdefault:\n\t\tgrpclog.Errorf(\"unknown connectivity state: %d\", s)\n\t\treturn \"Invalid-State\"\n\t}\n}\n\nconst (\n\t// Idle indicates the ClientConn is idle.\n\tIdle State = iota\n\t// Connecting indicates the ClientConn is connecting.\n\tConnecting\n\t// Ready indicates the ClientConn is ready for work.\n\tReady\n\t// TransientFailure indicates the ClientConn has seen a failure but expects to recover.\n\tTransientFailure\n\t// Shutdown indicates the ClientConn has started shutting down.\n\tShutdown\n)\n\n// Reporter reports the connectivity states.\ntype Reporter interface {\n\t// CurrentState returns the current state of the reporter.\n\tCurrentState() State\n\t// WaitForStateChange blocks until the reporter's state is different from the given state,\n\t// and returns true.\n\t// It returns false if <-ctx.Done() can proceed (ctx got timeout or got canceled).\n\tWaitForStateChange(context.Context, State) bool\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/credentials/credentials.go",
    "content": "/*\n *\n * Copyright 2014 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n// Package credentials implements various credentials supported by gRPC library,\n// which encapsulate all the state needed by a client to authenticate with a\n// server and make various assertions, e.g., about the client's identity, role,\n// or whether it is authorized to make a particular call.\npackage credentials // import \"google.golang.org/grpc/credentials\"\n\nimport (\n\t\"context\"\n\t\"crypto/tls\"\n\t\"crypto/x509\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"net\"\n\t\"strings\"\n\n\t\"github.com/golang/protobuf/proto\"\n\t\"google.golang.org/grpc/credentials/internal\"\n)\n\n// PerRPCCredentials defines the common interface for the credentials which need to\n// attach security information to every RPC (e.g., oauth2).\ntype PerRPCCredentials interface {\n\t// GetRequestMetadata gets the current request metadata, refreshing\n\t// tokens if required. This should be called by the transport layer on\n\t// each request, and the data should be populated in headers or other\n\t// context. If a status code is returned, it will be used as the status\n\t// for the RPC. uri is the URI of the entry point for the request.\n\t// When supported by the underlying implementation, ctx can be used for\n\t// timeout and cancellation.\n\t// TODO(zhaoq): Define the set of the qualified keys instead of leaving\n\t// it as an arbitrary string.\n\tGetRequestMetadata(ctx context.Context, uri ...string) (map[string]string, error)\n\t// RequireTransportSecurity indicates whether the credentials requires\n\t// transport security.\n\tRequireTransportSecurity() bool\n}\n\n// ProtocolInfo provides information regarding the gRPC wire protocol version,\n// security protocol, security protocol version in use, server name, etc.\ntype ProtocolInfo struct {\n\t// ProtocolVersion is the gRPC wire protocol version.\n\tProtocolVersion string\n\t// SecurityProtocol is the security protocol in use.\n\tSecurityProtocol string\n\t// SecurityVersion is the security protocol version.\n\tSecurityVersion string\n\t// ServerName is the user-configured server name.\n\tServerName string\n}\n\n// AuthInfo defines the common interface for the auth information the users are interested in.\ntype AuthInfo interface {\n\tAuthType() string\n}\n\n// ErrConnDispatched indicates that rawConn has been dispatched out of gRPC\n// and the caller should not close rawConn.\nvar ErrConnDispatched = errors.New(\"credentials: rawConn is dispatched out of gRPC\")\n\n// TransportCredentials defines the common interface for all the live gRPC wire\n// protocols and supported transport security protocols (e.g., TLS, SSL).\ntype TransportCredentials interface {\n\t// ClientHandshake does the authentication handshake specified by the corresponding\n\t// authentication protocol on rawConn for clients. It returns the authenticated\n\t// connection and the corresponding auth information about the connection.\n\t// Implementations must use the provided context to implement timely cancellation.\n\t// gRPC will try to reconnect if the error returned is a temporary error\n\t// (io.EOF, context.DeadlineExceeded or err.Temporary() == true).\n\t// If the returned error is a wrapper error, implementations should make sure that\n\t// the error implements Temporary() to have the correct retry behaviors.\n\t//\n\t// If the returned net.Conn is closed, it MUST close the net.Conn provided.\n\tClientHandshake(context.Context, string, net.Conn) (net.Conn, AuthInfo, error)\n\t// ServerHandshake does the authentication handshake for servers. It returns\n\t// the authenticated connection and the corresponding auth information about\n\t// the connection.\n\t//\n\t// If the returned net.Conn is closed, it MUST close the net.Conn provided.\n\tServerHandshake(net.Conn) (net.Conn, AuthInfo, error)\n\t// Info provides the ProtocolInfo of this TransportCredentials.\n\tInfo() ProtocolInfo\n\t// Clone makes a copy of this TransportCredentials.\n\tClone() TransportCredentials\n\t// OverrideServerName overrides the server name used to verify the hostname on the returned certificates from the server.\n\t// gRPC internals also use it to override the virtual hosting name if it is set.\n\t// It must be called before dialing. Currently, this is only used by grpclb.\n\tOverrideServerName(string) error\n}\n\n// Bundle is a combination of TransportCredentials and PerRPCCredentials.\n//\n// It also contains a mode switching method, so it can be used as a combination\n// of different credential policies.\n//\n// Bundle cannot be used together with individual TransportCredentials.\n// PerRPCCredentials from Bundle will be appended to other PerRPCCredentials.\n//\n// This API is experimental.\ntype Bundle interface {\n\tTransportCredentials() TransportCredentials\n\tPerRPCCredentials() PerRPCCredentials\n\t// NewWithMode should make a copy of Bundle, and switch mode. Modifying the\n\t// existing Bundle may cause races.\n\t//\n\t// NewWithMode returns nil if the requested mode is not supported.\n\tNewWithMode(mode string) (Bundle, error)\n}\n\n// TLSInfo contains the auth information for a TLS authenticated connection.\n// It implements the AuthInfo interface.\ntype TLSInfo struct {\n\tState tls.ConnectionState\n}\n\n// AuthType returns the type of TLSInfo as a string.\nfunc (t TLSInfo) AuthType() string {\n\treturn \"tls\"\n}\n\n// GetSecurityValue returns security info requested by channelz.\nfunc (t TLSInfo) GetSecurityValue() ChannelzSecurityValue {\n\tv := &TLSChannelzSecurityValue{\n\t\tStandardName: cipherSuiteLookup[t.State.CipherSuite],\n\t}\n\t// Currently there's no way to get LocalCertificate info from tls package.\n\tif len(t.State.PeerCertificates) > 0 {\n\t\tv.RemoteCertificate = t.State.PeerCertificates[0].Raw\n\t}\n\treturn v\n}\n\n// tlsCreds is the credentials required for authenticating a connection using TLS.\ntype tlsCreds struct {\n\t// TLS configuration\n\tconfig *tls.Config\n}\n\nfunc (c tlsCreds) Info() ProtocolInfo {\n\treturn ProtocolInfo{\n\t\tSecurityProtocol: \"tls\",\n\t\tSecurityVersion:  \"1.2\",\n\t\tServerName:       c.config.ServerName,\n\t}\n}\n\nfunc (c *tlsCreds) ClientHandshake(ctx context.Context, authority string, rawConn net.Conn) (_ net.Conn, _ AuthInfo, err error) {\n\t// use local cfg to avoid clobbering ServerName if using multiple endpoints\n\tcfg := cloneTLSConfig(c.config)\n\tif cfg.ServerName == \"\" {\n\t\tcolonPos := strings.LastIndex(authority, \":\")\n\t\tif colonPos == -1 {\n\t\t\tcolonPos = len(authority)\n\t\t}\n\t\tcfg.ServerName = authority[:colonPos]\n\t}\n\tconn := tls.Client(rawConn, cfg)\n\terrChannel := make(chan error, 1)\n\tgo func() {\n\t\terrChannel <- conn.Handshake()\n\t}()\n\tselect {\n\tcase err := <-errChannel:\n\t\tif err != nil {\n\t\t\treturn nil, nil, err\n\t\t}\n\tcase <-ctx.Done():\n\t\treturn nil, nil, ctx.Err()\n\t}\n\treturn internal.WrapSyscallConn(rawConn, conn), TLSInfo{conn.ConnectionState()}, nil\n}\n\nfunc (c *tlsCreds) ServerHandshake(rawConn net.Conn) (net.Conn, AuthInfo, error) {\n\tconn := tls.Server(rawConn, c.config)\n\tif err := conn.Handshake(); err != nil {\n\t\treturn nil, nil, err\n\t}\n\treturn internal.WrapSyscallConn(rawConn, conn), TLSInfo{conn.ConnectionState()}, nil\n}\n\nfunc (c *tlsCreds) Clone() TransportCredentials {\n\treturn NewTLS(c.config)\n}\n\nfunc (c *tlsCreds) OverrideServerName(serverNameOverride string) error {\n\tc.config.ServerName = serverNameOverride\n\treturn nil\n}\n\nconst alpnProtoStrH2 = \"h2\"\n\nfunc appendH2ToNextProtos(ps []string) []string {\n\tfor _, p := range ps {\n\t\tif p == alpnProtoStrH2 {\n\t\t\treturn ps\n\t\t}\n\t}\n\tret := make([]string, 0, len(ps)+1)\n\tret = append(ret, ps...)\n\treturn append(ret, alpnProtoStrH2)\n}\n\n// NewTLS uses c to construct a TransportCredentials based on TLS.\nfunc NewTLS(c *tls.Config) TransportCredentials {\n\ttc := &tlsCreds{cloneTLSConfig(c)}\n\ttc.config.NextProtos = appendH2ToNextProtos(tc.config.NextProtos)\n\treturn tc\n}\n\n// NewClientTLSFromCert constructs TLS credentials from the input certificate for client.\n// serverNameOverride is for testing only. If set to a non empty string,\n// it will override the virtual host name of authority (e.g. :authority header field) in requests.\nfunc NewClientTLSFromCert(cp *x509.CertPool, serverNameOverride string) TransportCredentials {\n\treturn NewTLS(&tls.Config{ServerName: serverNameOverride, RootCAs: cp})\n}\n\n// NewClientTLSFromFile constructs TLS credentials from the input certificate file for client.\n// serverNameOverride is for testing only. If set to a non empty string,\n// it will override the virtual host name of authority (e.g. :authority header field) in requests.\nfunc NewClientTLSFromFile(certFile, serverNameOverride string) (TransportCredentials, error) {\n\tb, err := ioutil.ReadFile(certFile)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tcp := x509.NewCertPool()\n\tif !cp.AppendCertsFromPEM(b) {\n\t\treturn nil, fmt.Errorf(\"credentials: failed to append certificates\")\n\t}\n\treturn NewTLS(&tls.Config{ServerName: serverNameOverride, RootCAs: cp}), nil\n}\n\n// NewServerTLSFromCert constructs TLS credentials from the input certificate for server.\nfunc NewServerTLSFromCert(cert *tls.Certificate) TransportCredentials {\n\treturn NewTLS(&tls.Config{Certificates: []tls.Certificate{*cert}})\n}\n\n// NewServerTLSFromFile constructs TLS credentials from the input certificate file and key\n// file for server.\nfunc NewServerTLSFromFile(certFile, keyFile string) (TransportCredentials, error) {\n\tcert, err := tls.LoadX509KeyPair(certFile, keyFile)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn NewTLS(&tls.Config{Certificates: []tls.Certificate{cert}}), nil\n}\n\n// ChannelzSecurityInfo defines the interface that security protocols should implement\n// in order to provide security info to channelz.\ntype ChannelzSecurityInfo interface {\n\tGetSecurityValue() ChannelzSecurityValue\n}\n\n// ChannelzSecurityValue defines the interface that GetSecurityValue() return value\n// should satisfy. This interface should only be satisfied by *TLSChannelzSecurityValue\n// and *OtherChannelzSecurityValue.\ntype ChannelzSecurityValue interface {\n\tisChannelzSecurityValue()\n}\n\n// TLSChannelzSecurityValue defines the struct that TLS protocol should return\n// from GetSecurityValue(), containing security info like cipher and certificate used.\ntype TLSChannelzSecurityValue struct {\n\tChannelzSecurityValue\n\tStandardName      string\n\tLocalCertificate  []byte\n\tRemoteCertificate []byte\n}\n\n// OtherChannelzSecurityValue defines the struct that non-TLS protocol should return\n// from GetSecurityValue(), which contains protocol specific security info. Note\n// the Value field will be sent to users of channelz requesting channel info, and\n// thus sensitive info should better be avoided.\ntype OtherChannelzSecurityValue struct {\n\tChannelzSecurityValue\n\tName  string\n\tValue proto.Message\n}\n\nvar cipherSuiteLookup = map[uint16]string{\n\ttls.TLS_RSA_WITH_RC4_128_SHA:                \"TLS_RSA_WITH_RC4_128_SHA\",\n\ttls.TLS_RSA_WITH_3DES_EDE_CBC_SHA:           \"TLS_RSA_WITH_3DES_EDE_CBC_SHA\",\n\ttls.TLS_RSA_WITH_AES_128_CBC_SHA:            \"TLS_RSA_WITH_AES_128_CBC_SHA\",\n\ttls.TLS_RSA_WITH_AES_256_CBC_SHA:            \"TLS_RSA_WITH_AES_256_CBC_SHA\",\n\ttls.TLS_RSA_WITH_AES_128_GCM_SHA256:         \"TLS_RSA_WITH_AES_128_GCM_SHA256\",\n\ttls.TLS_RSA_WITH_AES_256_GCM_SHA384:         \"TLS_RSA_WITH_AES_256_GCM_SHA384\",\n\ttls.TLS_ECDHE_ECDSA_WITH_RC4_128_SHA:        \"TLS_ECDHE_ECDSA_WITH_RC4_128_SHA\",\n\ttls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA:    \"TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA\",\n\ttls.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA:    \"TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA\",\n\ttls.TLS_ECDHE_RSA_WITH_RC4_128_SHA:          \"TLS_ECDHE_RSA_WITH_RC4_128_SHA\",\n\ttls.TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA:     \"TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA\",\n\ttls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA:      \"TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA\",\n\ttls.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA:      \"TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA\",\n\ttls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256:   \"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256\",\n\ttls.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256: \"TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256\",\n\ttls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384:   \"TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384\",\n\ttls.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384: \"TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384\",\n\ttls.TLS_FALLBACK_SCSV:                       \"TLS_FALLBACK_SCSV\",\n\ttls.TLS_RSA_WITH_AES_128_CBC_SHA256:         \"TLS_RSA_WITH_AES_128_CBC_SHA256\",\n\ttls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256: \"TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256\",\n\ttls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256:   \"TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256\",\n\ttls.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305:    \"TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305\",\n\ttls.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305:  \"TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305\",\n}\n\n// cloneTLSConfig returns a shallow clone of the exported\n// fields of cfg, ignoring the unexported sync.Once, which\n// contains a mutex and must not be copied.\n//\n// If cfg is nil, a new zero tls.Config is returned.\n//\n// TODO: inline this function if possible.\nfunc cloneTLSConfig(cfg *tls.Config) *tls.Config {\n\tif cfg == nil {\n\t\treturn &tls.Config{}\n\t}\n\n\treturn cfg.Clone()\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/credentials/internal/syscallconn.go",
    "content": "// +build !appengine\n\n/*\n *\n * Copyright 2018 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n// Package internal contains credentials-internal code.\npackage internal\n\nimport (\n\t\"net\"\n\t\"syscall\"\n)\n\ntype sysConn = syscall.Conn\n\n// syscallConn keeps reference of rawConn to support syscall.Conn for channelz.\n// SyscallConn() (the method in interface syscall.Conn) is explicitly\n// implemented on this type,\n//\n// Interface syscall.Conn is implemented by most net.Conn implementations (e.g.\n// TCPConn, UnixConn), but is not part of net.Conn interface. So wrapper conns\n// that embed net.Conn don't implement syscall.Conn. (Side note: tls.Conn\n// doesn't embed net.Conn, so even if syscall.Conn is part of net.Conn, it won't\n// help here).\ntype syscallConn struct {\n\tnet.Conn\n\t// sysConn is a type alias of syscall.Conn. It's necessary because the name\n\t// `Conn` collides with `net.Conn`.\n\tsysConn\n}\n\n// WrapSyscallConn tries to wrap rawConn and newConn into a net.Conn that\n// implements syscall.Conn. rawConn will be used to support syscall, and newConn\n// will be used for read/write.\n//\n// This function returns newConn if rawConn doesn't implement syscall.Conn.\nfunc WrapSyscallConn(rawConn, newConn net.Conn) net.Conn {\n\tsysConn, ok := rawConn.(syscall.Conn)\n\tif !ok {\n\t\treturn newConn\n\t}\n\treturn &syscallConn{\n\t\tConn:    newConn,\n\t\tsysConn: sysConn,\n\t}\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/credentials/internal/syscallconn_appengine.go",
    "content": "// +build appengine\n\n/*\n *\n * Copyright 2018 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\npackage internal\n\nimport (\n\t\"net\"\n)\n\n// WrapSyscallConn returns newConn on appengine.\nfunc WrapSyscallConn(rawConn, newConn net.Conn) net.Conn {\n\treturn newConn\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/credentials/tls13.go",
    "content": "// +build go1.12\n\n/*\n *\n * Copyright 2019 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\npackage credentials\n\nimport \"crypto/tls\"\n\n// This init function adds cipher suite constants only defined in Go 1.12.\nfunc init() {\n\tcipherSuiteLookup[tls.TLS_AES_128_GCM_SHA256] = \"TLS_AES_128_GCM_SHA256\"\n\tcipherSuiteLookup[tls.TLS_AES_256_GCM_SHA384] = \"TLS_AES_256_GCM_SHA384\"\n\tcipherSuiteLookup[tls.TLS_CHACHA20_POLY1305_SHA256] = \"TLS_CHACHA20_POLY1305_SHA256\"\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/dialoptions.go",
    "content": "/*\n *\n * Copyright 2018 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\npackage grpc\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"net\"\n\t\"time\"\n\n\t\"google.golang.org/grpc/balancer\"\n\t\"google.golang.org/grpc/credentials\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/grpc/internal\"\n\t\"google.golang.org/grpc/internal/backoff\"\n\t\"google.golang.org/grpc/internal/envconfig\"\n\t\"google.golang.org/grpc/internal/transport\"\n\t\"google.golang.org/grpc/keepalive\"\n\t\"google.golang.org/grpc/resolver\"\n\t\"google.golang.org/grpc/stats\"\n)\n\n// dialOptions configure a Dial call. dialOptions are set by the DialOption\n// values passed to Dial.\ntype dialOptions struct {\n\tunaryInt  UnaryClientInterceptor\n\tstreamInt StreamClientInterceptor\n\n\tchainUnaryInts  []UnaryClientInterceptor\n\tchainStreamInts []StreamClientInterceptor\n\n\tcp          Compressor\n\tdc          Decompressor\n\tbs          backoff.Strategy\n\tblock       bool\n\tinsecure    bool\n\ttimeout     time.Duration\n\tscChan      <-chan ServiceConfig\n\tauthority   string\n\tcopts       transport.ConnectOptions\n\tcallOptions []CallOption\n\t// This is used by v1 balancer dial option WithBalancer to support v1\n\t// balancer, and also by WithBalancerName dial option.\n\tbalancerBuilder balancer.Builder\n\t// This is to support grpclb.\n\tresolverBuilder             resolver.Builder\n\treqHandshake                envconfig.RequireHandshakeSetting\n\tchannelzParentID            int64\n\tdisableServiceConfig        bool\n\tdisableRetry                bool\n\tdisableHealthCheck          bool\n\thealthCheckFunc             internal.HealthChecker\n\tminConnectTimeout           func() time.Duration\n\tdefaultServiceConfig        *ServiceConfig // defaultServiceConfig is parsed from defaultServiceConfigRawJSON.\n\tdefaultServiceConfigRawJSON *string\n}\n\n// DialOption configures how we set up the connection.\ntype DialOption interface {\n\tapply(*dialOptions)\n}\n\n// EmptyDialOption does not alter the dial configuration. It can be embedded in\n// another structure to build custom dial options.\n//\n// This API is EXPERIMENTAL.\ntype EmptyDialOption struct{}\n\nfunc (EmptyDialOption) apply(*dialOptions) {}\n\n// funcDialOption wraps a function that modifies dialOptions into an\n// implementation of the DialOption interface.\ntype funcDialOption struct {\n\tf func(*dialOptions)\n}\n\nfunc (fdo *funcDialOption) apply(do *dialOptions) {\n\tfdo.f(do)\n}\n\nfunc newFuncDialOption(f func(*dialOptions)) *funcDialOption {\n\treturn &funcDialOption{\n\t\tf: f,\n\t}\n}\n\n// WithWaitForHandshake blocks until the initial settings frame is received from\n// the server before assigning RPCs to the connection.\n//\n// Deprecated: this is the default behavior, and this option will be removed\n// after the 1.18 release.\nfunc WithWaitForHandshake() DialOption {\n\treturn newFuncDialOption(func(o *dialOptions) {\n\t\to.reqHandshake = envconfig.RequireHandshakeOn\n\t})\n}\n\n// WithWriteBufferSize determines how much data can be batched before doing a\n// write on the wire. The corresponding memory allocation for this buffer will\n// be twice the size to keep syscalls low. The default value for this buffer is\n// 32KB.\n//\n// Zero will disable the write buffer such that each write will be on underlying\n// connection. Note: A Send call may not directly translate to a write.\nfunc WithWriteBufferSize(s int) DialOption {\n\treturn newFuncDialOption(func(o *dialOptions) {\n\t\to.copts.WriteBufferSize = s\n\t})\n}\n\n// WithReadBufferSize lets you set the size of read buffer, this determines how\n// much data can be read at most for each read syscall.\n//\n// The default value for this buffer is 32KB. Zero will disable read buffer for\n// a connection so data framer can access the underlying conn directly.\nfunc WithReadBufferSize(s int) DialOption {\n\treturn newFuncDialOption(func(o *dialOptions) {\n\t\to.copts.ReadBufferSize = s\n\t})\n}\n\n// WithInitialWindowSize returns a DialOption which sets the value for initial\n// window size on a stream. The lower bound for window size is 64K and any value\n// smaller than that will be ignored.\nfunc WithInitialWindowSize(s int32) DialOption {\n\treturn newFuncDialOption(func(o *dialOptions) {\n\t\to.copts.InitialWindowSize = s\n\t})\n}\n\n// WithInitialConnWindowSize returns a DialOption which sets the value for\n// initial window size on a connection. The lower bound for window size is 64K\n// and any value smaller than that will be ignored.\nfunc WithInitialConnWindowSize(s int32) DialOption {\n\treturn newFuncDialOption(func(o *dialOptions) {\n\t\to.copts.InitialConnWindowSize = s\n\t})\n}\n\n// WithMaxMsgSize returns a DialOption which sets the maximum message size the\n// client can receive.\n//\n// Deprecated: use WithDefaultCallOptions(MaxCallRecvMsgSize(s)) instead.\nfunc WithMaxMsgSize(s int) DialOption {\n\treturn WithDefaultCallOptions(MaxCallRecvMsgSize(s))\n}\n\n// WithDefaultCallOptions returns a DialOption which sets the default\n// CallOptions for calls over the connection.\nfunc WithDefaultCallOptions(cos ...CallOption) DialOption {\n\treturn newFuncDialOption(func(o *dialOptions) {\n\t\to.callOptions = append(o.callOptions, cos...)\n\t})\n}\n\n// WithCodec returns a DialOption which sets a codec for message marshaling and\n// unmarshaling.\n//\n// Deprecated: use WithDefaultCallOptions(ForceCodec(_)) instead.\nfunc WithCodec(c Codec) DialOption {\n\treturn WithDefaultCallOptions(CallCustomCodec(c))\n}\n\n// WithCompressor returns a DialOption which sets a Compressor to use for\n// message compression. It has lower priority than the compressor set by the\n// UseCompressor CallOption.\n//\n// Deprecated: use UseCompressor instead.\nfunc WithCompressor(cp Compressor) DialOption {\n\treturn newFuncDialOption(func(o *dialOptions) {\n\t\to.cp = cp\n\t})\n}\n\n// WithDecompressor returns a DialOption which sets a Decompressor to use for\n// incoming message decompression.  If incoming response messages are encoded\n// using the decompressor's Type(), it will be used.  Otherwise, the message\n// encoding will be used to look up the compressor registered via\n// encoding.RegisterCompressor, which will then be used to decompress the\n// message.  If no compressor is registered for the encoding, an Unimplemented\n// status error will be returned.\n//\n// Deprecated: use encoding.RegisterCompressor instead.\nfunc WithDecompressor(dc Decompressor) DialOption {\n\treturn newFuncDialOption(func(o *dialOptions) {\n\t\to.dc = dc\n\t})\n}\n\n// WithBalancer returns a DialOption which sets a load balancer with the v1 API.\n// Name resolver will be ignored if this DialOption is specified.\n//\n// Deprecated: use the new balancer APIs in balancer package and\n// WithBalancerName.\nfunc WithBalancer(b Balancer) DialOption {\n\treturn newFuncDialOption(func(o *dialOptions) {\n\t\to.balancerBuilder = &balancerWrapperBuilder{\n\t\t\tb: b,\n\t\t}\n\t})\n}\n\n// WithBalancerName sets the balancer that the ClientConn will be initialized\n// with. Balancer registered with balancerName will be used. This function\n// panics if no balancer was registered by balancerName.\n//\n// The balancer cannot be overridden by balancer option specified by service\n// config.\n//\n// This is an EXPERIMENTAL API.\nfunc WithBalancerName(balancerName string) DialOption {\n\tbuilder := balancer.Get(balancerName)\n\tif builder == nil {\n\t\tpanic(fmt.Sprintf(\"grpc.WithBalancerName: no balancer is registered for name %v\", balancerName))\n\t}\n\treturn newFuncDialOption(func(o *dialOptions) {\n\t\to.balancerBuilder = builder\n\t})\n}\n\n// withResolverBuilder is only for grpclb.\nfunc withResolverBuilder(b resolver.Builder) DialOption {\n\treturn newFuncDialOption(func(o *dialOptions) {\n\t\to.resolverBuilder = b\n\t})\n}\n\n// WithServiceConfig returns a DialOption which has a channel to read the\n// service configuration.\n//\n// Deprecated: service config should be received through name resolver, as\n// specified here.\n// https://github.com/grpc/grpc/blob/master/doc/service_config.md\nfunc WithServiceConfig(c <-chan ServiceConfig) DialOption {\n\treturn newFuncDialOption(func(o *dialOptions) {\n\t\to.scChan = c\n\t})\n}\n\n// WithBackoffMaxDelay configures the dialer to use the provided maximum delay\n// when backing off after failed connection attempts.\nfunc WithBackoffMaxDelay(md time.Duration) DialOption {\n\treturn WithBackoffConfig(BackoffConfig{MaxDelay: md})\n}\n\n// WithBackoffConfig configures the dialer to use the provided backoff\n// parameters after connection failures.\n//\n// Use WithBackoffMaxDelay until more parameters on BackoffConfig are opened up\n// for use.\nfunc WithBackoffConfig(b BackoffConfig) DialOption {\n\treturn withBackoff(backoff.Exponential{\n\t\tMaxDelay: b.MaxDelay,\n\t})\n}\n\n// withBackoff sets the backoff strategy used for connectRetryNum after a failed\n// connection attempt.\n//\n// This can be exported if arbitrary backoff strategies are allowed by gRPC.\nfunc withBackoff(bs backoff.Strategy) DialOption {\n\treturn newFuncDialOption(func(o *dialOptions) {\n\t\to.bs = bs\n\t})\n}\n\n// WithBlock returns a DialOption which makes caller of Dial blocks until the\n// underlying connection is up. Without this, Dial returns immediately and\n// connecting the server happens in background.\nfunc WithBlock() DialOption {\n\treturn newFuncDialOption(func(o *dialOptions) {\n\t\to.block = true\n\t})\n}\n\n// WithInsecure returns a DialOption which disables transport security for this\n// ClientConn. Note that transport security is required unless WithInsecure is\n// set.\nfunc WithInsecure() DialOption {\n\treturn newFuncDialOption(func(o *dialOptions) {\n\t\to.insecure = true\n\t})\n}\n\n// WithTransportCredentials returns a DialOption which configures a connection\n// level security credentials (e.g., TLS/SSL). This should not be used together\n// with WithCredentialsBundle.\nfunc WithTransportCredentials(creds credentials.TransportCredentials) DialOption {\n\treturn newFuncDialOption(func(o *dialOptions) {\n\t\to.copts.TransportCredentials = creds\n\t})\n}\n\n// WithPerRPCCredentials returns a DialOption which sets credentials and places\n// auth state on each outbound RPC.\nfunc WithPerRPCCredentials(creds credentials.PerRPCCredentials) DialOption {\n\treturn newFuncDialOption(func(o *dialOptions) {\n\t\to.copts.PerRPCCredentials = append(o.copts.PerRPCCredentials, creds)\n\t})\n}\n\n// WithCredentialsBundle returns a DialOption to set a credentials bundle for\n// the ClientConn.WithCreds. This should not be used together with\n// WithTransportCredentials.\n//\n// This API is experimental.\nfunc WithCredentialsBundle(b credentials.Bundle) DialOption {\n\treturn newFuncDialOption(func(o *dialOptions) {\n\t\to.copts.CredsBundle = b\n\t})\n}\n\n// WithTimeout returns a DialOption that configures a timeout for dialing a\n// ClientConn initially. This is valid if and only if WithBlock() is present.\n//\n// Deprecated: use DialContext and context.WithTimeout instead.\nfunc WithTimeout(d time.Duration) DialOption {\n\treturn newFuncDialOption(func(o *dialOptions) {\n\t\to.timeout = d\n\t})\n}\n\n// WithContextDialer returns a DialOption that sets a dialer to create\n// connections. If FailOnNonTempDialError() is set to true, and an error is\n// returned by f, gRPC checks the error's Temporary() method to decide if it\n// should try to reconnect to the network address.\nfunc WithContextDialer(f func(context.Context, string) (net.Conn, error)) DialOption {\n\treturn newFuncDialOption(func(o *dialOptions) {\n\t\to.copts.Dialer = f\n\t})\n}\n\nfunc init() {\n\tinternal.WithResolverBuilder = withResolverBuilder\n\tinternal.WithHealthCheckFunc = withHealthCheckFunc\n}\n\n// WithDialer returns a DialOption that specifies a function to use for dialing\n// network addresses. If FailOnNonTempDialError() is set to true, and an error\n// is returned by f, gRPC checks the error's Temporary() method to decide if it\n// should try to reconnect to the network address.\n//\n// Deprecated: use WithContextDialer instead\nfunc WithDialer(f func(string, time.Duration) (net.Conn, error)) DialOption {\n\treturn WithContextDialer(\n\t\tfunc(ctx context.Context, addr string) (net.Conn, error) {\n\t\t\tif deadline, ok := ctx.Deadline(); ok {\n\t\t\t\treturn f(addr, time.Until(deadline))\n\t\t\t}\n\t\t\treturn f(addr, 0)\n\t\t})\n}\n\n// WithStatsHandler returns a DialOption that specifies the stats handler for\n// all the RPCs and underlying network connections in this ClientConn.\nfunc WithStatsHandler(h stats.Handler) DialOption {\n\treturn newFuncDialOption(func(o *dialOptions) {\n\t\to.copts.StatsHandler = h\n\t})\n}\n\n// FailOnNonTempDialError returns a DialOption that specifies if gRPC fails on\n// non-temporary dial errors. If f is true, and dialer returns a non-temporary\n// error, gRPC will fail the connection to the network address and won't try to\n// reconnect. The default value of FailOnNonTempDialError is false.\n//\n// FailOnNonTempDialError only affects the initial dial, and does not do\n// anything useful unless you are also using WithBlock().\n//\n// This is an EXPERIMENTAL API.\nfunc FailOnNonTempDialError(f bool) DialOption {\n\treturn newFuncDialOption(func(o *dialOptions) {\n\t\to.copts.FailOnNonTempDialError = f\n\t})\n}\n\n// WithUserAgent returns a DialOption that specifies a user agent string for all\n// the RPCs.\nfunc WithUserAgent(s string) DialOption {\n\treturn newFuncDialOption(func(o *dialOptions) {\n\t\to.copts.UserAgent = s\n\t})\n}\n\n// WithKeepaliveParams returns a DialOption that specifies keepalive parameters\n// for the client transport.\nfunc WithKeepaliveParams(kp keepalive.ClientParameters) DialOption {\n\tif kp.Time < internal.KeepaliveMinPingTime {\n\t\tgrpclog.Warningf(\"Adjusting keepalive ping interval to minimum period of %v\", internal.KeepaliveMinPingTime)\n\t\tkp.Time = internal.KeepaliveMinPingTime\n\t}\n\treturn newFuncDialOption(func(o *dialOptions) {\n\t\to.copts.KeepaliveParams = kp\n\t})\n}\n\n// WithUnaryInterceptor returns a DialOption that specifies the interceptor for\n// unary RPCs.\nfunc WithUnaryInterceptor(f UnaryClientInterceptor) DialOption {\n\treturn newFuncDialOption(func(o *dialOptions) {\n\t\to.unaryInt = f\n\t})\n}\n\n// WithChainUnaryInterceptor returns a DialOption that specifies the chained\n// interceptor for unary RPCs. The first interceptor will be the outer most,\n// while the last interceptor will be the inner most wrapper around the real call.\n// All interceptors added by this method will be chained, and the interceptor\n// defined by WithUnaryInterceptor will always be prepended to the chain.\nfunc WithChainUnaryInterceptor(interceptors ...UnaryClientInterceptor) DialOption {\n\treturn newFuncDialOption(func(o *dialOptions) {\n\t\to.chainUnaryInts = append(o.chainUnaryInts, interceptors...)\n\t})\n}\n\n// WithStreamInterceptor returns a DialOption that specifies the interceptor for\n// streaming RPCs.\nfunc WithStreamInterceptor(f StreamClientInterceptor) DialOption {\n\treturn newFuncDialOption(func(o *dialOptions) {\n\t\to.streamInt = f\n\t})\n}\n\n// WithChainStreamInterceptor returns a DialOption that specifies the chained\n// interceptor for unary RPCs. The first interceptor will be the outer most,\n// while the last interceptor will be the inner most wrapper around the real call.\n// All interceptors added by this method will be chained, and the interceptor\n// defined by WithStreamInterceptor will always be prepended to the chain.\nfunc WithChainStreamInterceptor(interceptors ...StreamClientInterceptor) DialOption {\n\treturn newFuncDialOption(func(o *dialOptions) {\n\t\to.chainStreamInts = append(o.chainStreamInts, interceptors...)\n\t})\n}\n\n// WithAuthority returns a DialOption that specifies the value to be used as the\n// :authority pseudo-header. This value only works with WithInsecure and has no\n// effect if TransportCredentials are present.\nfunc WithAuthority(a string) DialOption {\n\treturn newFuncDialOption(func(o *dialOptions) {\n\t\to.authority = a\n\t})\n}\n\n// WithChannelzParentID returns a DialOption that specifies the channelz ID of\n// current ClientConn's parent. This function is used in nested channel creation\n// (e.g. grpclb dial).\nfunc WithChannelzParentID(id int64) DialOption {\n\treturn newFuncDialOption(func(o *dialOptions) {\n\t\to.channelzParentID = id\n\t})\n}\n\n// WithDisableServiceConfig returns a DialOption that causes gRPC to ignore any\n// service config provided by the resolver and provides a hint to the resolver\n// to not fetch service configs.\n//\n// Note that this dial option only disables service config from resolver. If\n// default service config is provided, gRPC will use the default service config.\nfunc WithDisableServiceConfig() DialOption {\n\treturn newFuncDialOption(func(o *dialOptions) {\n\t\to.disableServiceConfig = true\n\t})\n}\n\n// WithDefaultServiceConfig returns a DialOption that configures the default\n// service config, which will be used in cases where:\n// 1. WithDisableServiceConfig is called.\n// 2. Resolver does not return service config or if the resolver gets and invalid config.\n//\n// This API is EXPERIMENTAL.\nfunc WithDefaultServiceConfig(s string) DialOption {\n\treturn newFuncDialOption(func(o *dialOptions) {\n\t\to.defaultServiceConfigRawJSON = &s\n\t})\n}\n\n// WithDisableRetry returns a DialOption that disables retries, even if the\n// service config enables them.  This does not impact transparent retries, which\n// will happen automatically if no data is written to the wire or if the RPC is\n// unprocessed by the remote server.\n//\n// Retry support is currently disabled by default, but will be enabled by\n// default in the future.  Until then, it may be enabled by setting the\n// environment variable \"GRPC_GO_RETRY\" to \"on\".\n//\n// This API is EXPERIMENTAL.\nfunc WithDisableRetry() DialOption {\n\treturn newFuncDialOption(func(o *dialOptions) {\n\t\to.disableRetry = true\n\t})\n}\n\n// WithMaxHeaderListSize returns a DialOption that specifies the maximum\n// (uncompressed) size of header list that the client is prepared to accept.\nfunc WithMaxHeaderListSize(s uint32) DialOption {\n\treturn newFuncDialOption(func(o *dialOptions) {\n\t\to.copts.MaxHeaderListSize = &s\n\t})\n}\n\n// WithDisableHealthCheck disables the LB channel health checking for all\n// SubConns of this ClientConn.\n//\n// This API is EXPERIMENTAL.\nfunc WithDisableHealthCheck() DialOption {\n\treturn newFuncDialOption(func(o *dialOptions) {\n\t\to.disableHealthCheck = true\n\t})\n}\n\n// withHealthCheckFunc replaces the default health check function with the\n// provided one. It makes tests easier to change the health check function.\n//\n// For testing purpose only.\nfunc withHealthCheckFunc(f internal.HealthChecker) DialOption {\n\treturn newFuncDialOption(func(o *dialOptions) {\n\t\to.healthCheckFunc = f\n\t})\n}\n\nfunc defaultDialOptions() dialOptions {\n\treturn dialOptions{\n\t\tdisableRetry:    !envconfig.Retry,\n\t\treqHandshake:    envconfig.RequireHandshake,\n\t\thealthCheckFunc: internal.HealthCheckFunc,\n\t\tcopts: transport.ConnectOptions{\n\t\t\tWriteBufferSize: defaultWriteBufSize,\n\t\t\tReadBufferSize:  defaultReadBufSize,\n\t\t},\n\t}\n}\n\n// withGetMinConnectDeadline specifies the function that clientconn uses to\n// get minConnectDeadline. This can be used to make connection attempts happen\n// faster/slower.\n//\n// For testing purpose only.\nfunc withMinConnectDeadline(f func() time.Duration) DialOption {\n\treturn newFuncDialOption(func(o *dialOptions) {\n\t\to.minConnectTimeout = f\n\t})\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/doc.go",
    "content": "/*\n *\n * Copyright 2015 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n/*\nPackage grpc implements an RPC system called gRPC.\n\nSee grpc.io for more information about gRPC.\n*/\npackage grpc // import \"google.golang.org/grpc\"\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/encoding/encoding.go",
    "content": "/*\n *\n * Copyright 2017 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n// Package encoding defines the interface for the compressor and codec, and\n// functions to register and retrieve compressors and codecs.\n//\n// This package is EXPERIMENTAL.\npackage encoding\n\nimport (\n\t\"io\"\n\t\"strings\"\n)\n\n// Identity specifies the optional encoding for uncompressed streams.\n// It is intended for grpc internal use only.\nconst Identity = \"identity\"\n\n// Compressor is used for compressing and decompressing when sending or\n// receiving messages.\ntype Compressor interface {\n\t// Compress writes the data written to wc to w after compressing it.  If an\n\t// error occurs while initializing the compressor, that error is returned\n\t// instead.\n\tCompress(w io.Writer) (io.WriteCloser, error)\n\t// Decompress reads data from r, decompresses it, and provides the\n\t// uncompressed data via the returned io.Reader.  If an error occurs while\n\t// initializing the decompressor, that error is returned instead.\n\tDecompress(r io.Reader) (io.Reader, error)\n\t// Name is the name of the compression codec and is used to set the content\n\t// coding header.  The result must be static; the result cannot change\n\t// between calls.\n\tName() string\n}\n\nvar registeredCompressor = make(map[string]Compressor)\n\n// RegisterCompressor registers the compressor with gRPC by its name.  It can\n// be activated when sending an RPC via grpc.UseCompressor().  It will be\n// automatically accessed when receiving a message based on the content coding\n// header.  Servers also use it to send a response with the same encoding as\n// the request.\n//\n// NOTE: this function must only be called during initialization time (i.e. in\n// an init() function), and is not thread-safe.  If multiple Compressors are\n// registered with the same name, the one registered last will take effect.\nfunc RegisterCompressor(c Compressor) {\n\tregisteredCompressor[c.Name()] = c\n}\n\n// GetCompressor returns Compressor for the given compressor name.\nfunc GetCompressor(name string) Compressor {\n\treturn registeredCompressor[name]\n}\n\n// Codec defines the interface gRPC uses to encode and decode messages.  Note\n// that implementations of this interface must be thread safe; a Codec's\n// methods can be called from concurrent goroutines.\ntype Codec interface {\n\t// Marshal returns the wire format of v.\n\tMarshal(v interface{}) ([]byte, error)\n\t// Unmarshal parses the wire format into v.\n\tUnmarshal(data []byte, v interface{}) error\n\t// Name returns the name of the Codec implementation. The returned string\n\t// will be used as part of content type in transmission.  The result must be\n\t// static; the result cannot change between calls.\n\tName() string\n}\n\nvar registeredCodecs = make(map[string]Codec)\n\n// RegisterCodec registers the provided Codec for use with all gRPC clients and\n// servers.\n//\n// The Codec will be stored and looked up by result of its Name() method, which\n// should match the content-subtype of the encoding handled by the Codec.  This\n// is case-insensitive, and is stored and looked up as lowercase.  If the\n// result of calling Name() is an empty string, RegisterCodec will panic. See\n// Content-Type on\n// https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md#requests for\n// more details.\n//\n// NOTE: this function must only be called during initialization time (i.e. in\n// an init() function), and is not thread-safe.  If multiple Compressors are\n// registered with the same name, the one registered last will take effect.\nfunc RegisterCodec(codec Codec) {\n\tif codec == nil {\n\t\tpanic(\"cannot register a nil Codec\")\n\t}\n\tif codec.Name() == \"\" {\n\t\tpanic(\"cannot register Codec with empty string result for Name()\")\n\t}\n\tcontentSubtype := strings.ToLower(codec.Name())\n\tregisteredCodecs[contentSubtype] = codec\n}\n\n// GetCodec gets a registered Codec by content-subtype, or nil if no Codec is\n// registered for the content-subtype.\n//\n// The content-subtype is expected to be lowercase.\nfunc GetCodec(contentSubtype string) Codec {\n\treturn registeredCodecs[contentSubtype]\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/encoding/proto/proto.go",
    "content": "/*\n *\n * Copyright 2018 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n// Package proto defines the protobuf codec. Importing this package will\n// register the codec.\npackage proto\n\nimport (\n\t\"math\"\n\t\"sync\"\n\n\t\"github.com/golang/protobuf/proto\"\n\t\"google.golang.org/grpc/encoding\"\n)\n\n// Name is the name registered for the proto compressor.\nconst Name = \"proto\"\n\nfunc init() {\n\tencoding.RegisterCodec(codec{})\n}\n\n// codec is a Codec implementation with protobuf. It is the default codec for gRPC.\ntype codec struct{}\n\ntype cachedProtoBuffer struct {\n\tlastMarshaledSize uint32\n\tproto.Buffer\n}\n\nfunc capToMaxInt32(val int) uint32 {\n\tif val > math.MaxInt32 {\n\t\treturn uint32(math.MaxInt32)\n\t}\n\treturn uint32(val)\n}\n\nfunc marshal(v interface{}, cb *cachedProtoBuffer) ([]byte, error) {\n\tprotoMsg := v.(proto.Message)\n\tnewSlice := make([]byte, 0, cb.lastMarshaledSize)\n\n\tcb.SetBuf(newSlice)\n\tcb.Reset()\n\tif err := cb.Marshal(protoMsg); err != nil {\n\t\treturn nil, err\n\t}\n\tout := cb.Bytes()\n\tcb.lastMarshaledSize = capToMaxInt32(len(out))\n\treturn out, nil\n}\n\nfunc (codec) Marshal(v interface{}) ([]byte, error) {\n\tif pm, ok := v.(proto.Marshaler); ok {\n\t\t// object can marshal itself, no need for buffer\n\t\treturn pm.Marshal()\n\t}\n\n\tcb := protoBufferPool.Get().(*cachedProtoBuffer)\n\tout, err := marshal(v, cb)\n\n\t// put back buffer and lose the ref to the slice\n\tcb.SetBuf(nil)\n\tprotoBufferPool.Put(cb)\n\treturn out, err\n}\n\nfunc (codec) Unmarshal(data []byte, v interface{}) error {\n\tprotoMsg := v.(proto.Message)\n\tprotoMsg.Reset()\n\n\tif pu, ok := protoMsg.(proto.Unmarshaler); ok {\n\t\t// object can unmarshal itself, no need for buffer\n\t\treturn pu.Unmarshal(data)\n\t}\n\n\tcb := protoBufferPool.Get().(*cachedProtoBuffer)\n\tcb.SetBuf(data)\n\terr := cb.Unmarshal(protoMsg)\n\tcb.SetBuf(nil)\n\tprotoBufferPool.Put(cb)\n\treturn err\n}\n\nfunc (codec) Name() string {\n\treturn Name\n}\n\nvar protoBufferPool = &sync.Pool{\n\tNew: func() interface{} {\n\t\treturn &cachedProtoBuffer{\n\t\t\tBuffer:            proto.Buffer{},\n\t\t\tlastMarshaledSize: 16,\n\t\t}\n\t},\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/grpclog/grpclog.go",
    "content": "/*\n *\n * Copyright 2017 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n// Package grpclog defines logging for grpc.\n//\n// All logs in transport and grpclb packages only go to verbose level 2.\n// All logs in other packages in grpc are logged in spite of the verbosity level.\n//\n// In the default logger,\n// severity level can be set by environment variable GRPC_GO_LOG_SEVERITY_LEVEL,\n// verbosity level can be set by GRPC_GO_LOG_VERBOSITY_LEVEL.\npackage grpclog // import \"google.golang.org/grpc/grpclog\"\n\nimport \"os\"\n\nvar logger = newLoggerV2()\n\n// V reports whether verbosity level l is at least the requested verbose level.\nfunc V(l int) bool {\n\treturn logger.V(l)\n}\n\n// Info logs to the INFO log.\nfunc Info(args ...interface{}) {\n\tlogger.Info(args...)\n}\n\n// Infof logs to the INFO log. Arguments are handled in the manner of fmt.Printf.\nfunc Infof(format string, args ...interface{}) {\n\tlogger.Infof(format, args...)\n}\n\n// Infoln logs to the INFO log. Arguments are handled in the manner of fmt.Println.\nfunc Infoln(args ...interface{}) {\n\tlogger.Infoln(args...)\n}\n\n// Warning logs to the WARNING log.\nfunc Warning(args ...interface{}) {\n\tlogger.Warning(args...)\n}\n\n// Warningf logs to the WARNING log. Arguments are handled in the manner of fmt.Printf.\nfunc Warningf(format string, args ...interface{}) {\n\tlogger.Warningf(format, args...)\n}\n\n// Warningln logs to the WARNING log. Arguments are handled in the manner of fmt.Println.\nfunc Warningln(args ...interface{}) {\n\tlogger.Warningln(args...)\n}\n\n// Error logs to the ERROR log.\nfunc Error(args ...interface{}) {\n\tlogger.Error(args...)\n}\n\n// Errorf logs to the ERROR log. Arguments are handled in the manner of fmt.Printf.\nfunc Errorf(format string, args ...interface{}) {\n\tlogger.Errorf(format, args...)\n}\n\n// Errorln logs to the ERROR log. Arguments are handled in the manner of fmt.Println.\nfunc Errorln(args ...interface{}) {\n\tlogger.Errorln(args...)\n}\n\n// Fatal logs to the FATAL log. Arguments are handled in the manner of fmt.Print.\n// It calls os.Exit() with exit code 1.\nfunc Fatal(args ...interface{}) {\n\tlogger.Fatal(args...)\n\t// Make sure fatal logs will exit.\n\tos.Exit(1)\n}\n\n// Fatalf logs to the FATAL log. Arguments are handled in the manner of fmt.Printf.\n// It calles os.Exit() with exit code 1.\nfunc Fatalf(format string, args ...interface{}) {\n\tlogger.Fatalf(format, args...)\n\t// Make sure fatal logs will exit.\n\tos.Exit(1)\n}\n\n// Fatalln logs to the FATAL log. Arguments are handled in the manner of fmt.Println.\n// It calle os.Exit()) with exit code 1.\nfunc Fatalln(args ...interface{}) {\n\tlogger.Fatalln(args...)\n\t// Make sure fatal logs will exit.\n\tos.Exit(1)\n}\n\n// Print prints to the logger. Arguments are handled in the manner of fmt.Print.\n//\n// Deprecated: use Info.\nfunc Print(args ...interface{}) {\n\tlogger.Info(args...)\n}\n\n// Printf prints to the logger. Arguments are handled in the manner of fmt.Printf.\n//\n// Deprecated: use Infof.\nfunc Printf(format string, args ...interface{}) {\n\tlogger.Infof(format, args...)\n}\n\n// Println prints to the logger. Arguments are handled in the manner of fmt.Println.\n//\n// Deprecated: use Infoln.\nfunc Println(args ...interface{}) {\n\tlogger.Infoln(args...)\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/grpclog/logger.go",
    "content": "/*\n *\n * Copyright 2015 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\npackage grpclog\n\n// Logger mimics golang's standard Logger as an interface.\n//\n// Deprecated: use LoggerV2.\ntype Logger interface {\n\tFatal(args ...interface{})\n\tFatalf(format string, args ...interface{})\n\tFatalln(args ...interface{})\n\tPrint(args ...interface{})\n\tPrintf(format string, args ...interface{})\n\tPrintln(args ...interface{})\n}\n\n// SetLogger sets the logger that is used in grpc. Call only from\n// init() functions.\n//\n// Deprecated: use SetLoggerV2.\nfunc SetLogger(l Logger) {\n\tlogger = &loggerWrapper{Logger: l}\n}\n\n// loggerWrapper wraps Logger into a LoggerV2.\ntype loggerWrapper struct {\n\tLogger\n}\n\nfunc (g *loggerWrapper) Info(args ...interface{}) {\n\tg.Logger.Print(args...)\n}\n\nfunc (g *loggerWrapper) Infoln(args ...interface{}) {\n\tg.Logger.Println(args...)\n}\n\nfunc (g *loggerWrapper) Infof(format string, args ...interface{}) {\n\tg.Logger.Printf(format, args...)\n}\n\nfunc (g *loggerWrapper) Warning(args ...interface{}) {\n\tg.Logger.Print(args...)\n}\n\nfunc (g *loggerWrapper) Warningln(args ...interface{}) {\n\tg.Logger.Println(args...)\n}\n\nfunc (g *loggerWrapper) Warningf(format string, args ...interface{}) {\n\tg.Logger.Printf(format, args...)\n}\n\nfunc (g *loggerWrapper) Error(args ...interface{}) {\n\tg.Logger.Print(args...)\n}\n\nfunc (g *loggerWrapper) Errorln(args ...interface{}) {\n\tg.Logger.Println(args...)\n}\n\nfunc (g *loggerWrapper) Errorf(format string, args ...interface{}) {\n\tg.Logger.Printf(format, args...)\n}\n\nfunc (g *loggerWrapper) V(l int) bool {\n\t// Returns true for all verbose level.\n\treturn true\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/grpclog/loggerv2.go",
    "content": "/*\n *\n * Copyright 2017 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\npackage grpclog\n\nimport (\n\t\"io\"\n\t\"io/ioutil\"\n\t\"log\"\n\t\"os\"\n\t\"strconv\"\n)\n\n// LoggerV2 does underlying logging work for grpclog.\ntype LoggerV2 interface {\n\t// Info logs to INFO log. Arguments are handled in the manner of fmt.Print.\n\tInfo(args ...interface{})\n\t// Infoln logs to INFO log. Arguments are handled in the manner of fmt.Println.\n\tInfoln(args ...interface{})\n\t// Infof logs to INFO log. Arguments are handled in the manner of fmt.Printf.\n\tInfof(format string, args ...interface{})\n\t// Warning logs to WARNING log. Arguments are handled in the manner of fmt.Print.\n\tWarning(args ...interface{})\n\t// Warningln logs to WARNING log. Arguments are handled in the manner of fmt.Println.\n\tWarningln(args ...interface{})\n\t// Warningf logs to WARNING log. Arguments are handled in the manner of fmt.Printf.\n\tWarningf(format string, args ...interface{})\n\t// Error logs to ERROR log. Arguments are handled in the manner of fmt.Print.\n\tError(args ...interface{})\n\t// Errorln logs to ERROR log. Arguments are handled in the manner of fmt.Println.\n\tErrorln(args ...interface{})\n\t// Errorf logs to ERROR log. Arguments are handled in the manner of fmt.Printf.\n\tErrorf(format string, args ...interface{})\n\t// Fatal logs to ERROR log. Arguments are handled in the manner of fmt.Print.\n\t// gRPC ensures that all Fatal logs will exit with os.Exit(1).\n\t// Implementations may also call os.Exit() with a non-zero exit code.\n\tFatal(args ...interface{})\n\t// Fatalln logs to ERROR log. Arguments are handled in the manner of fmt.Println.\n\t// gRPC ensures that all Fatal logs will exit with os.Exit(1).\n\t// Implementations may also call os.Exit() with a non-zero exit code.\n\tFatalln(args ...interface{})\n\t// Fatalf logs to ERROR log. Arguments are handled in the manner of fmt.Printf.\n\t// gRPC ensures that all Fatal logs will exit with os.Exit(1).\n\t// Implementations may also call os.Exit() with a non-zero exit code.\n\tFatalf(format string, args ...interface{})\n\t// V reports whether verbosity level l is at least the requested verbose level.\n\tV(l int) bool\n}\n\n// SetLoggerV2 sets logger that is used in grpc to a V2 logger.\n// Not mutex-protected, should be called before any gRPC functions.\nfunc SetLoggerV2(l LoggerV2) {\n\tlogger = l\n}\n\nconst (\n\t// infoLog indicates Info severity.\n\tinfoLog int = iota\n\t// warningLog indicates Warning severity.\n\twarningLog\n\t// errorLog indicates Error severity.\n\terrorLog\n\t// fatalLog indicates Fatal severity.\n\tfatalLog\n)\n\n// severityName contains the string representation of each severity.\nvar severityName = []string{\n\tinfoLog:    \"INFO\",\n\twarningLog: \"WARNING\",\n\terrorLog:   \"ERROR\",\n\tfatalLog:   \"FATAL\",\n}\n\n// loggerT is the default logger used by grpclog.\ntype loggerT struct {\n\tm []*log.Logger\n\tv int\n}\n\n// NewLoggerV2 creates a loggerV2 with the provided writers.\n// Fatal logs will be written to errorW, warningW, infoW, followed by exit(1).\n// Error logs will be written to errorW, warningW and infoW.\n// Warning logs will be written to warningW and infoW.\n// Info logs will be written to infoW.\nfunc NewLoggerV2(infoW, warningW, errorW io.Writer) LoggerV2 {\n\treturn NewLoggerV2WithVerbosity(infoW, warningW, errorW, 0)\n}\n\n// NewLoggerV2WithVerbosity creates a loggerV2 with the provided writers and\n// verbosity level.\nfunc NewLoggerV2WithVerbosity(infoW, warningW, errorW io.Writer, v int) LoggerV2 {\n\tvar m []*log.Logger\n\tm = append(m, log.New(infoW, severityName[infoLog]+\": \", log.LstdFlags))\n\tm = append(m, log.New(io.MultiWriter(infoW, warningW), severityName[warningLog]+\": \", log.LstdFlags))\n\tew := io.MultiWriter(infoW, warningW, errorW) // ew will be used for error and fatal.\n\tm = append(m, log.New(ew, severityName[errorLog]+\": \", log.LstdFlags))\n\tm = append(m, log.New(ew, severityName[fatalLog]+\": \", log.LstdFlags))\n\treturn &loggerT{m: m, v: v}\n}\n\n// newLoggerV2 creates a loggerV2 to be used as default logger.\n// All logs are written to stderr.\nfunc newLoggerV2() LoggerV2 {\n\terrorW := ioutil.Discard\n\twarningW := ioutil.Discard\n\tinfoW := ioutil.Discard\n\n\tlogLevel := os.Getenv(\"GRPC_GO_LOG_SEVERITY_LEVEL\")\n\tswitch logLevel {\n\tcase \"\", \"ERROR\", \"error\": // If env is unset, set level to ERROR.\n\t\terrorW = os.Stderr\n\tcase \"WARNING\", \"warning\":\n\t\twarningW = os.Stderr\n\tcase \"INFO\", \"info\":\n\t\tinfoW = os.Stderr\n\t}\n\n\tvar v int\n\tvLevel := os.Getenv(\"GRPC_GO_LOG_VERBOSITY_LEVEL\")\n\tif vl, err := strconv.Atoi(vLevel); err == nil {\n\t\tv = vl\n\t}\n\treturn NewLoggerV2WithVerbosity(infoW, warningW, errorW, v)\n}\n\nfunc (g *loggerT) Info(args ...interface{}) {\n\tg.m[infoLog].Print(args...)\n}\n\nfunc (g *loggerT) Infoln(args ...interface{}) {\n\tg.m[infoLog].Println(args...)\n}\n\nfunc (g *loggerT) Infof(format string, args ...interface{}) {\n\tg.m[infoLog].Printf(format, args...)\n}\n\nfunc (g *loggerT) Warning(args ...interface{}) {\n\tg.m[warningLog].Print(args...)\n}\n\nfunc (g *loggerT) Warningln(args ...interface{}) {\n\tg.m[warningLog].Println(args...)\n}\n\nfunc (g *loggerT) Warningf(format string, args ...interface{}) {\n\tg.m[warningLog].Printf(format, args...)\n}\n\nfunc (g *loggerT) Error(args ...interface{}) {\n\tg.m[errorLog].Print(args...)\n}\n\nfunc (g *loggerT) Errorln(args ...interface{}) {\n\tg.m[errorLog].Println(args...)\n}\n\nfunc (g *loggerT) Errorf(format string, args ...interface{}) {\n\tg.m[errorLog].Printf(format, args...)\n}\n\nfunc (g *loggerT) Fatal(args ...interface{}) {\n\tg.m[fatalLog].Fatal(args...)\n\t// No need to call os.Exit() again because log.Logger.Fatal() calls os.Exit().\n}\n\nfunc (g *loggerT) Fatalln(args ...interface{}) {\n\tg.m[fatalLog].Fatalln(args...)\n\t// No need to call os.Exit() again because log.Logger.Fatal() calls os.Exit().\n}\n\nfunc (g *loggerT) Fatalf(format string, args ...interface{}) {\n\tg.m[fatalLog].Fatalf(format, args...)\n\t// No need to call os.Exit() again because log.Logger.Fatal() calls os.Exit().\n}\n\nfunc (g *loggerT) V(l int) bool {\n\treturn l <= g.v\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/health/client.go",
    "content": "/*\n *\n * Copyright 2018 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\npackage health\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"io\"\n\t\"time\"\n\n\t\"google.golang.org/grpc\"\n\t\"google.golang.org/grpc/codes\"\n\thealthpb \"google.golang.org/grpc/health/grpc_health_v1\"\n\t\"google.golang.org/grpc/internal\"\n\t\"google.golang.org/grpc/internal/backoff\"\n\t\"google.golang.org/grpc/status\"\n)\n\nconst maxDelay = 120 * time.Second\n\nvar backoffStrategy = backoff.Exponential{MaxDelay: maxDelay}\nvar backoffFunc = func(ctx context.Context, retries int) bool {\n\td := backoffStrategy.Backoff(retries)\n\ttimer := time.NewTimer(d)\n\tselect {\n\tcase <-timer.C:\n\t\treturn true\n\tcase <-ctx.Done():\n\t\ttimer.Stop()\n\t\treturn false\n\t}\n}\n\nfunc init() {\n\tinternal.HealthCheckFunc = clientHealthCheck\n}\n\nfunc clientHealthCheck(ctx context.Context, newStream func() (interface{}, error), reportHealth func(bool), service string) error {\n\ttryCnt := 0\n\nretryConnection:\n\tfor {\n\t\t// Backs off if the connection has failed in some way without receiving a message in the previous retry.\n\t\tif tryCnt > 0 && !backoffFunc(ctx, tryCnt-1) {\n\t\t\treturn nil\n\t\t}\n\t\ttryCnt++\n\n\t\tif ctx.Err() != nil {\n\t\t\treturn nil\n\t\t}\n\t\trawS, err := newStream()\n\t\tif err != nil {\n\t\t\tcontinue retryConnection\n\t\t}\n\n\t\ts, ok := rawS.(grpc.ClientStream)\n\t\t// Ideally, this should never happen. But if it happens, the server is marked as healthy for LBing purposes.\n\t\tif !ok {\n\t\t\treportHealth(true)\n\t\t\treturn fmt.Errorf(\"newStream returned %v (type %T); want grpc.ClientStream\", rawS, rawS)\n\t\t}\n\n\t\tif err = s.SendMsg(&healthpb.HealthCheckRequest{Service: service}); err != nil && err != io.EOF {\n\t\t\t// Stream should have been closed, so we can safely continue to create a new stream.\n\t\t\tcontinue retryConnection\n\t\t}\n\t\ts.CloseSend()\n\n\t\tresp := new(healthpb.HealthCheckResponse)\n\t\tfor {\n\t\t\terr = s.RecvMsg(resp)\n\n\t\t\t// Reports healthy for the LBing purposes if health check is not implemented in the server.\n\t\t\tif status.Code(err) == codes.Unimplemented {\n\t\t\t\treportHealth(true)\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\t// Reports unhealthy if server's Watch method gives an error other than UNIMPLEMENTED.\n\t\t\tif err != nil {\n\t\t\t\treportHealth(false)\n\t\t\t\tcontinue retryConnection\n\t\t\t}\n\n\t\t\t// As a message has been received, removes the need for backoff for the next retry by reseting the try count.\n\t\t\ttryCnt = 0\n\t\t\treportHealth(resp.Status == healthpb.HealthCheckResponse_SERVING)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/health/grpc_health_v1/health.pb.go",
    "content": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// source: grpc/health/v1/health.proto\n\npackage grpc_health_v1 // import \"google.golang.org/grpc/health/grpc_health_v1\"\n\nimport proto \"github.com/golang/protobuf/proto\"\nimport fmt \"fmt\"\nimport math \"math\"\n\nimport (\n\tcontext \"golang.org/x/net/context\"\n\tgrpc \"google.golang.org/grpc\"\n)\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar _ = proto.Marshal\nvar _ = fmt.Errorf\nvar _ = math.Inf\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the proto package it is being compiled against.\n// A compilation error at this line likely means your copy of the\n// proto package needs to be updated.\nconst _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package\n\ntype HealthCheckResponse_ServingStatus int32\n\nconst (\n\tHealthCheckResponse_UNKNOWN         HealthCheckResponse_ServingStatus = 0\n\tHealthCheckResponse_SERVING         HealthCheckResponse_ServingStatus = 1\n\tHealthCheckResponse_NOT_SERVING     HealthCheckResponse_ServingStatus = 2\n\tHealthCheckResponse_SERVICE_UNKNOWN HealthCheckResponse_ServingStatus = 3\n)\n\nvar HealthCheckResponse_ServingStatus_name = map[int32]string{\n\t0: \"UNKNOWN\",\n\t1: \"SERVING\",\n\t2: \"NOT_SERVING\",\n\t3: \"SERVICE_UNKNOWN\",\n}\nvar HealthCheckResponse_ServingStatus_value = map[string]int32{\n\t\"UNKNOWN\":         0,\n\t\"SERVING\":         1,\n\t\"NOT_SERVING\":     2,\n\t\"SERVICE_UNKNOWN\": 3,\n}\n\nfunc (x HealthCheckResponse_ServingStatus) String() string {\n\treturn proto.EnumName(HealthCheckResponse_ServingStatus_name, int32(x))\n}\nfunc (HealthCheckResponse_ServingStatus) EnumDescriptor() ([]byte, []int) {\n\treturn fileDescriptor_health_6b1a06aa67f91efd, []int{1, 0}\n}\n\ntype HealthCheckRequest struct {\n\tService              string   `protobuf:\"bytes,1,opt,name=service,proto3\" json:\"service,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{} `json:\"-\"`\n\tXXX_unrecognized     []byte   `json:\"-\"`\n\tXXX_sizecache        int32    `json:\"-\"`\n}\n\nfunc (m *HealthCheckRequest) Reset()         { *m = HealthCheckRequest{} }\nfunc (m *HealthCheckRequest) String() string { return proto.CompactTextString(m) }\nfunc (*HealthCheckRequest) ProtoMessage()    {}\nfunc (*HealthCheckRequest) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_health_6b1a06aa67f91efd, []int{0}\n}\nfunc (m *HealthCheckRequest) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_HealthCheckRequest.Unmarshal(m, b)\n}\nfunc (m *HealthCheckRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_HealthCheckRequest.Marshal(b, m, deterministic)\n}\nfunc (dst *HealthCheckRequest) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_HealthCheckRequest.Merge(dst, src)\n}\nfunc (m *HealthCheckRequest) XXX_Size() int {\n\treturn xxx_messageInfo_HealthCheckRequest.Size(m)\n}\nfunc (m *HealthCheckRequest) XXX_DiscardUnknown() {\n\txxx_messageInfo_HealthCheckRequest.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_HealthCheckRequest proto.InternalMessageInfo\n\nfunc (m *HealthCheckRequest) GetService() string {\n\tif m != nil {\n\t\treturn m.Service\n\t}\n\treturn \"\"\n}\n\ntype HealthCheckResponse struct {\n\tStatus               HealthCheckResponse_ServingStatus `protobuf:\"varint,1,opt,name=status,proto3,enum=grpc.health.v1.HealthCheckResponse_ServingStatus\" json:\"status,omitempty\"`\n\tXXX_NoUnkeyedLiteral struct{}                          `json:\"-\"`\n\tXXX_unrecognized     []byte                            `json:\"-\"`\n\tXXX_sizecache        int32                             `json:\"-\"`\n}\n\nfunc (m *HealthCheckResponse) Reset()         { *m = HealthCheckResponse{} }\nfunc (m *HealthCheckResponse) String() string { return proto.CompactTextString(m) }\nfunc (*HealthCheckResponse) ProtoMessage()    {}\nfunc (*HealthCheckResponse) Descriptor() ([]byte, []int) {\n\treturn fileDescriptor_health_6b1a06aa67f91efd, []int{1}\n}\nfunc (m *HealthCheckResponse) XXX_Unmarshal(b []byte) error {\n\treturn xxx_messageInfo_HealthCheckResponse.Unmarshal(m, b)\n}\nfunc (m *HealthCheckResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {\n\treturn xxx_messageInfo_HealthCheckResponse.Marshal(b, m, deterministic)\n}\nfunc (dst *HealthCheckResponse) XXX_Merge(src proto.Message) {\n\txxx_messageInfo_HealthCheckResponse.Merge(dst, src)\n}\nfunc (m *HealthCheckResponse) XXX_Size() int {\n\treturn xxx_messageInfo_HealthCheckResponse.Size(m)\n}\nfunc (m *HealthCheckResponse) XXX_DiscardUnknown() {\n\txxx_messageInfo_HealthCheckResponse.DiscardUnknown(m)\n}\n\nvar xxx_messageInfo_HealthCheckResponse proto.InternalMessageInfo\n\nfunc (m *HealthCheckResponse) GetStatus() HealthCheckResponse_ServingStatus {\n\tif m != nil {\n\t\treturn m.Status\n\t}\n\treturn HealthCheckResponse_UNKNOWN\n}\n\nfunc init() {\n\tproto.RegisterType((*HealthCheckRequest)(nil), \"grpc.health.v1.HealthCheckRequest\")\n\tproto.RegisterType((*HealthCheckResponse)(nil), \"grpc.health.v1.HealthCheckResponse\")\n\tproto.RegisterEnum(\"grpc.health.v1.HealthCheckResponse_ServingStatus\", HealthCheckResponse_ServingStatus_name, HealthCheckResponse_ServingStatus_value)\n}\n\n// Reference imports to suppress errors if they are not otherwise used.\nvar _ context.Context\nvar _ grpc.ClientConn\n\n// This is a compile-time assertion to ensure that this generated file\n// is compatible with the grpc package it is being compiled against.\nconst _ = grpc.SupportPackageIsVersion4\n\n// HealthClient is the client API for Health service.\n//\n// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.\ntype HealthClient interface {\n\t// If the requested service is unknown, the call will fail with status\n\t// NOT_FOUND.\n\tCheck(ctx context.Context, in *HealthCheckRequest, opts ...grpc.CallOption) (*HealthCheckResponse, error)\n\t// Performs a watch for the serving status of the requested service.\n\t// The server will immediately send back a message indicating the current\n\t// serving status.  It will then subsequently send a new message whenever\n\t// the service's serving status changes.\n\t//\n\t// If the requested service is unknown when the call is received, the\n\t// server will send a message setting the serving status to\n\t// SERVICE_UNKNOWN but will *not* terminate the call.  If at some\n\t// future point, the serving status of the service becomes known, the\n\t// server will send a new message with the service's serving status.\n\t//\n\t// If the call terminates with status UNIMPLEMENTED, then clients\n\t// should assume this method is not supported and should not retry the\n\t// call.  If the call terminates with any other status (including OK),\n\t// clients should retry the call with appropriate exponential backoff.\n\tWatch(ctx context.Context, in *HealthCheckRequest, opts ...grpc.CallOption) (Health_WatchClient, error)\n}\n\ntype healthClient struct {\n\tcc *grpc.ClientConn\n}\n\nfunc NewHealthClient(cc *grpc.ClientConn) HealthClient {\n\treturn &healthClient{cc}\n}\n\nfunc (c *healthClient) Check(ctx context.Context, in *HealthCheckRequest, opts ...grpc.CallOption) (*HealthCheckResponse, error) {\n\tout := new(HealthCheckResponse)\n\terr := c.cc.Invoke(ctx, \"/grpc.health.v1.Health/Check\", in, out, opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn out, nil\n}\n\nfunc (c *healthClient) Watch(ctx context.Context, in *HealthCheckRequest, opts ...grpc.CallOption) (Health_WatchClient, error) {\n\tstream, err := c.cc.NewStream(ctx, &_Health_serviceDesc.Streams[0], \"/grpc.health.v1.Health/Watch\", opts...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tx := &healthWatchClient{stream}\n\tif err := x.ClientStream.SendMsg(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif err := x.ClientStream.CloseSend(); err != nil {\n\t\treturn nil, err\n\t}\n\treturn x, nil\n}\n\ntype Health_WatchClient interface {\n\tRecv() (*HealthCheckResponse, error)\n\tgrpc.ClientStream\n}\n\ntype healthWatchClient struct {\n\tgrpc.ClientStream\n}\n\nfunc (x *healthWatchClient) Recv() (*HealthCheckResponse, error) {\n\tm := new(HealthCheckResponse)\n\tif err := x.ClientStream.RecvMsg(m); err != nil {\n\t\treturn nil, err\n\t}\n\treturn m, nil\n}\n\n// HealthServer is the server API for Health service.\ntype HealthServer interface {\n\t// If the requested service is unknown, the call will fail with status\n\t// NOT_FOUND.\n\tCheck(context.Context, *HealthCheckRequest) (*HealthCheckResponse, error)\n\t// Performs a watch for the serving status of the requested service.\n\t// The server will immediately send back a message indicating the current\n\t// serving status.  It will then subsequently send a new message whenever\n\t// the service's serving status changes.\n\t//\n\t// If the requested service is unknown when the call is received, the\n\t// server will send a message setting the serving status to\n\t// SERVICE_UNKNOWN but will *not* terminate the call.  If at some\n\t// future point, the serving status of the service becomes known, the\n\t// server will send a new message with the service's serving status.\n\t//\n\t// If the call terminates with status UNIMPLEMENTED, then clients\n\t// should assume this method is not supported and should not retry the\n\t// call.  If the call terminates with any other status (including OK),\n\t// clients should retry the call with appropriate exponential backoff.\n\tWatch(*HealthCheckRequest, Health_WatchServer) error\n}\n\nfunc RegisterHealthServer(s *grpc.Server, srv HealthServer) {\n\ts.RegisterService(&_Health_serviceDesc, srv)\n}\n\nfunc _Health_Check_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {\n\tin := new(HealthCheckRequest)\n\tif err := dec(in); err != nil {\n\t\treturn nil, err\n\t}\n\tif interceptor == nil {\n\t\treturn srv.(HealthServer).Check(ctx, in)\n\t}\n\tinfo := &grpc.UnaryServerInfo{\n\t\tServer:     srv,\n\t\tFullMethod: \"/grpc.health.v1.Health/Check\",\n\t}\n\thandler := func(ctx context.Context, req interface{}) (interface{}, error) {\n\t\treturn srv.(HealthServer).Check(ctx, req.(*HealthCheckRequest))\n\t}\n\treturn interceptor(ctx, in, info, handler)\n}\n\nfunc _Health_Watch_Handler(srv interface{}, stream grpc.ServerStream) error {\n\tm := new(HealthCheckRequest)\n\tif err := stream.RecvMsg(m); err != nil {\n\t\treturn err\n\t}\n\treturn srv.(HealthServer).Watch(m, &healthWatchServer{stream})\n}\n\ntype Health_WatchServer interface {\n\tSend(*HealthCheckResponse) error\n\tgrpc.ServerStream\n}\n\ntype healthWatchServer struct {\n\tgrpc.ServerStream\n}\n\nfunc (x *healthWatchServer) Send(m *HealthCheckResponse) error {\n\treturn x.ServerStream.SendMsg(m)\n}\n\nvar _Health_serviceDesc = grpc.ServiceDesc{\n\tServiceName: \"grpc.health.v1.Health\",\n\tHandlerType: (*HealthServer)(nil),\n\tMethods: []grpc.MethodDesc{\n\t\t{\n\t\t\tMethodName: \"Check\",\n\t\t\tHandler:    _Health_Check_Handler,\n\t\t},\n\t},\n\tStreams: []grpc.StreamDesc{\n\t\t{\n\t\t\tStreamName:    \"Watch\",\n\t\t\tHandler:       _Health_Watch_Handler,\n\t\t\tServerStreams: true,\n\t\t},\n\t},\n\tMetadata: \"grpc/health/v1/health.proto\",\n}\n\nfunc init() { proto.RegisterFile(\"grpc/health/v1/health.proto\", fileDescriptor_health_6b1a06aa67f91efd) }\n\nvar fileDescriptor_health_6b1a06aa67f91efd = []byte{\n\t// 297 bytes of a gzipped FileDescriptorProto\n\t0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4e, 0x2f, 0x2a, 0x48,\n\t0xd6, 0xcf, 0x48, 0x4d, 0xcc, 0x29, 0xc9, 0xd0, 0x2f, 0x33, 0x84, 0xb2, 0xf4, 0x0a, 0x8a, 0xf2,\n\t0x4b, 0xf2, 0x85, 0xf8, 0x40, 0x92, 0x7a, 0x50, 0xa1, 0x32, 0x43, 0x25, 0x3d, 0x2e, 0x21, 0x0f,\n\t0x30, 0xc7, 0x39, 0x23, 0x35, 0x39, 0x3b, 0x28, 0xb5, 0xb0, 0x34, 0xb5, 0xb8, 0x44, 0x48, 0x82,\n\t0x8b, 0xbd, 0x38, 0xb5, 0xa8, 0x2c, 0x33, 0x39, 0x55, 0x82, 0x51, 0x81, 0x51, 0x83, 0x33, 0x08,\n\t0xc6, 0x55, 0xda, 0xc8, 0xc8, 0x25, 0x8c, 0xa2, 0xa1, 0xb8, 0x20, 0x3f, 0xaf, 0x38, 0x55, 0xc8,\n\t0x93, 0x8b, 0xad, 0xb8, 0x24, 0xb1, 0xa4, 0xb4, 0x18, 0xac, 0x81, 0xcf, 0xc8, 0x50, 0x0f, 0xd5,\n\t0x22, 0x3d, 0x2c, 0x9a, 0xf4, 0x82, 0x41, 0x86, 0xe6, 0xa5, 0x07, 0x83, 0x35, 0x06, 0x41, 0x0d,\n\t0x50, 0xf2, 0xe7, 0xe2, 0x45, 0x91, 0x10, 0xe2, 0xe6, 0x62, 0x0f, 0xf5, 0xf3, 0xf6, 0xf3, 0x0f,\n\t0xf7, 0x13, 0x60, 0x00, 0x71, 0x82, 0x5d, 0x83, 0xc2, 0x3c, 0xfd, 0xdc, 0x05, 0x18, 0x85, 0xf8,\n\t0xb9, 0xb8, 0xfd, 0xfc, 0x43, 0xe2, 0x61, 0x02, 0x4c, 0x42, 0xc2, 0x5c, 0xfc, 0x60, 0x8e, 0xb3,\n\t0x6b, 0x3c, 0x4c, 0x0b, 0xb3, 0xd1, 0x3a, 0x46, 0x2e, 0x36, 0x88, 0xf5, 0x42, 0x01, 0x5c, 0xac,\n\t0x60, 0x27, 0x08, 0x29, 0xe1, 0x75, 0x1f, 0x38, 0x14, 0xa4, 0x94, 0x89, 0xf0, 0x83, 0x50, 0x10,\n\t0x17, 0x6b, 0x78, 0x62, 0x49, 0x72, 0x06, 0xd5, 0x4c, 0x34, 0x60, 0x74, 0x4a, 0xe4, 0x12, 0xcc,\n\t0xcc, 0x47, 0x53, 0xea, 0xc4, 0x0d, 0x51, 0x1b, 0x00, 0x8a, 0xc6, 0x00, 0xc6, 0x28, 0x9d, 0xf4,\n\t0xfc, 0xfc, 0xf4, 0x9c, 0x54, 0xbd, 0xf4, 0xfc, 0x9c, 0xc4, 0xbc, 0x74, 0xbd, 0xfc, 0xa2, 0x74,\n\t0x7d, 0xe4, 0x78, 0x07, 0xb1, 0xe3, 0x21, 0xec, 0xf8, 0x32, 0xc3, 0x55, 0x4c, 0x7c, 0xee, 0x20,\n\t0xd3, 0x20, 0x46, 0xe8, 0x85, 0x19, 0x26, 0xb1, 0x81, 0x93, 0x83, 0x31, 0x20, 0x00, 0x00, 0xff,\n\t0xff, 0x12, 0x7d, 0x96, 0xcb, 0x2d, 0x02, 0x00, 0x00,\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/health/server.go",
    "content": "/*\n *\n * Copyright 2017 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n//go:generate ./regenerate.sh\n\n// Package health provides a service that exposes server's health and it must be\n// imported to enable support for client-side health checks.\npackage health\n\nimport (\n\t\"context\"\n\t\"sync\"\n\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/grpclog\"\n\thealthgrpc \"google.golang.org/grpc/health/grpc_health_v1\"\n\thealthpb \"google.golang.org/grpc/health/grpc_health_v1\"\n\t\"google.golang.org/grpc/status\"\n)\n\n// Server implements `service Health`.\ntype Server struct {\n\tmu sync.Mutex\n\t// If shutdown is true, it's expected all serving status is NOT_SERVING, and\n\t// will stay in NOT_SERVING.\n\tshutdown bool\n\t// statusMap stores the serving status of the services this Server monitors.\n\tstatusMap map[string]healthpb.HealthCheckResponse_ServingStatus\n\tupdates   map[string]map[healthgrpc.Health_WatchServer]chan healthpb.HealthCheckResponse_ServingStatus\n}\n\n// NewServer returns a new Server.\nfunc NewServer() *Server {\n\treturn &Server{\n\t\tstatusMap: map[string]healthpb.HealthCheckResponse_ServingStatus{\"\": healthpb.HealthCheckResponse_SERVING},\n\t\tupdates:   make(map[string]map[healthgrpc.Health_WatchServer]chan healthpb.HealthCheckResponse_ServingStatus),\n\t}\n}\n\n// Check implements `service Health`.\nfunc (s *Server) Check(ctx context.Context, in *healthpb.HealthCheckRequest) (*healthpb.HealthCheckResponse, error) {\n\ts.mu.Lock()\n\tdefer s.mu.Unlock()\n\tif servingStatus, ok := s.statusMap[in.Service]; ok {\n\t\treturn &healthpb.HealthCheckResponse{\n\t\t\tStatus: servingStatus,\n\t\t}, nil\n\t}\n\treturn nil, status.Error(codes.NotFound, \"unknown service\")\n}\n\n// Watch implements `service Health`.\nfunc (s *Server) Watch(in *healthpb.HealthCheckRequest, stream healthgrpc.Health_WatchServer) error {\n\tservice := in.Service\n\t// update channel is used for getting service status updates.\n\tupdate := make(chan healthpb.HealthCheckResponse_ServingStatus, 1)\n\ts.mu.Lock()\n\t// Puts the initial status to the channel.\n\tif servingStatus, ok := s.statusMap[service]; ok {\n\t\tupdate <- servingStatus\n\t} else {\n\t\tupdate <- healthpb.HealthCheckResponse_SERVICE_UNKNOWN\n\t}\n\n\t// Registers the update channel to the correct place in the updates map.\n\tif _, ok := s.updates[service]; !ok {\n\t\ts.updates[service] = make(map[healthgrpc.Health_WatchServer]chan healthpb.HealthCheckResponse_ServingStatus)\n\t}\n\ts.updates[service][stream] = update\n\tdefer func() {\n\t\ts.mu.Lock()\n\t\tdelete(s.updates[service], stream)\n\t\ts.mu.Unlock()\n\t}()\n\ts.mu.Unlock()\n\n\tvar lastSentStatus healthpb.HealthCheckResponse_ServingStatus = -1\n\tfor {\n\t\tselect {\n\t\t// Status updated. Sends the up-to-date status to the client.\n\t\tcase servingStatus := <-update:\n\t\t\tif lastSentStatus == servingStatus {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tlastSentStatus = servingStatus\n\t\t\terr := stream.Send(&healthpb.HealthCheckResponse{Status: servingStatus})\n\t\t\tif err != nil {\n\t\t\t\treturn status.Error(codes.Canceled, \"Stream has ended.\")\n\t\t\t}\n\t\t// Context done. Removes the update channel from the updates map.\n\t\tcase <-stream.Context().Done():\n\t\t\treturn status.Error(codes.Canceled, \"Stream has ended.\")\n\t\t}\n\t}\n}\n\n// SetServingStatus is called when need to reset the serving status of a service\n// or insert a new service entry into the statusMap.\nfunc (s *Server) SetServingStatus(service string, servingStatus healthpb.HealthCheckResponse_ServingStatus) {\n\ts.mu.Lock()\n\tdefer s.mu.Unlock()\n\tif s.shutdown {\n\t\tgrpclog.Infof(\"health: status changing for %s to %v is ignored because health service is shutdown\", service, servingStatus)\n\t\treturn\n\t}\n\n\ts.setServingStatusLocked(service, servingStatus)\n}\n\nfunc (s *Server) setServingStatusLocked(service string, servingStatus healthpb.HealthCheckResponse_ServingStatus) {\n\ts.statusMap[service] = servingStatus\n\tfor _, update := range s.updates[service] {\n\t\t// Clears previous updates, that are not sent to the client, from the channel.\n\t\t// This can happen if the client is not reading and the server gets flow control limited.\n\t\tselect {\n\t\tcase <-update:\n\t\tdefault:\n\t\t}\n\t\t// Puts the most recent update to the channel.\n\t\tupdate <- servingStatus\n\t}\n}\n\n// Shutdown sets all serving status to NOT_SERVING, and configures the server to\n// ignore all future status changes.\n//\n// This changes serving status for all services. To set status for a perticular\n// services, call SetServingStatus().\nfunc (s *Server) Shutdown() {\n\ts.mu.Lock()\n\tdefer s.mu.Unlock()\n\ts.shutdown = true\n\tfor service := range s.statusMap {\n\t\ts.setServingStatusLocked(service, healthpb.HealthCheckResponse_NOT_SERVING)\n\t}\n}\n\n// Resume sets all serving status to SERVING, and configures the server to\n// accept all future status changes.\n//\n// This changes serving status for all services. To set status for a perticular\n// services, call SetServingStatus().\nfunc (s *Server) Resume() {\n\ts.mu.Lock()\n\tdefer s.mu.Unlock()\n\ts.shutdown = false\n\tfor service := range s.statusMap {\n\t\ts.setServingStatusLocked(service, healthpb.HealthCheckResponse_SERVING)\n\t}\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/interceptor.go",
    "content": "/*\n *\n * Copyright 2016 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\npackage grpc\n\nimport (\n\t\"context\"\n)\n\n// UnaryInvoker is called by UnaryClientInterceptor to complete RPCs.\ntype UnaryInvoker func(ctx context.Context, method string, req, reply interface{}, cc *ClientConn, opts ...CallOption) error\n\n// UnaryClientInterceptor intercepts the execution of a unary RPC on the client. invoker is the handler to complete the RPC\n// and it is the responsibility of the interceptor to call it.\n// This is an EXPERIMENTAL API.\ntype UnaryClientInterceptor func(ctx context.Context, method string, req, reply interface{}, cc *ClientConn, invoker UnaryInvoker, opts ...CallOption) error\n\n// Streamer is called by StreamClientInterceptor to create a ClientStream.\ntype Streamer func(ctx context.Context, desc *StreamDesc, cc *ClientConn, method string, opts ...CallOption) (ClientStream, error)\n\n// StreamClientInterceptor intercepts the creation of ClientStream. It may return a custom ClientStream to intercept all I/O\n// operations. streamer is the handler to create a ClientStream and it is the responsibility of the interceptor to call it.\n// This is an EXPERIMENTAL API.\ntype StreamClientInterceptor func(ctx context.Context, desc *StreamDesc, cc *ClientConn, method string, streamer Streamer, opts ...CallOption) (ClientStream, error)\n\n// UnaryServerInfo consists of various information about a unary RPC on\n// server side. All per-rpc information may be mutated by the interceptor.\ntype UnaryServerInfo struct {\n\t// Server is the service implementation the user provides. This is read-only.\n\tServer interface{}\n\t// FullMethod is the full RPC method string, i.e., /package.service/method.\n\tFullMethod string\n}\n\n// UnaryHandler defines the handler invoked by UnaryServerInterceptor to complete the normal\n// execution of a unary RPC. If a UnaryHandler returns an error, it should be produced by the\n// status package, or else gRPC will use codes.Unknown as the status code and err.Error() as\n// the status message of the RPC.\ntype UnaryHandler func(ctx context.Context, req interface{}) (interface{}, error)\n\n// UnaryServerInterceptor provides a hook to intercept the execution of a unary RPC on the server. info\n// contains all the information of this RPC the interceptor can operate on. And handler is the wrapper\n// of the service method implementation. It is the responsibility of the interceptor to invoke handler\n// to complete the RPC.\ntype UnaryServerInterceptor func(ctx context.Context, req interface{}, info *UnaryServerInfo, handler UnaryHandler) (resp interface{}, err error)\n\n// StreamServerInfo consists of various information about a streaming RPC on\n// server side. All per-rpc information may be mutated by the interceptor.\ntype StreamServerInfo struct {\n\t// FullMethod is the full RPC method string, i.e., /package.service/method.\n\tFullMethod string\n\t// IsClientStream indicates whether the RPC is a client streaming RPC.\n\tIsClientStream bool\n\t// IsServerStream indicates whether the RPC is a server streaming RPC.\n\tIsServerStream bool\n}\n\n// StreamServerInterceptor provides a hook to intercept the execution of a streaming RPC on the server.\n// info contains all the information of this RPC the interceptor can operate on. And handler is the\n// service method implementation. It is the responsibility of the interceptor to invoke handler to\n// complete the RPC.\ntype StreamServerInterceptor func(srv interface{}, ss ServerStream, info *StreamServerInfo, handler StreamHandler) error\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/internal/backoff/backoff.go",
    "content": "/*\n *\n * Copyright 2017 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n// Package backoff implement the backoff strategy for gRPC.\n//\n// This is kept in internal until the gRPC project decides whether or not to\n// allow alternative backoff strategies.\npackage backoff\n\nimport (\n\t\"time\"\n\n\t\"google.golang.org/grpc/internal/grpcrand\"\n)\n\n// Strategy defines the methodology for backing off after a grpc connection\n// failure.\n//\ntype Strategy interface {\n\t// Backoff returns the amount of time to wait before the next retry given\n\t// the number of consecutive failures.\n\tBackoff(retries int) time.Duration\n}\n\nconst (\n\t// baseDelay is the amount of time to wait before retrying after the first\n\t// failure.\n\tbaseDelay = 1.0 * time.Second\n\t// factor is applied to the backoff after each retry.\n\tfactor = 1.6\n\t// jitter provides a range to randomize backoff delays.\n\tjitter = 0.2\n)\n\n// Exponential implements exponential backoff algorithm as defined in\n// https://github.com/grpc/grpc/blob/master/doc/connection-backoff.md.\ntype Exponential struct {\n\t// MaxDelay is the upper bound of backoff delay.\n\tMaxDelay time.Duration\n}\n\n// Backoff returns the amount of time to wait before the next retry given the\n// number of retries.\nfunc (bc Exponential) Backoff(retries int) time.Duration {\n\tif retries == 0 {\n\t\treturn baseDelay\n\t}\n\tbackoff, max := float64(baseDelay), float64(bc.MaxDelay)\n\tfor backoff < max && retries > 0 {\n\t\tbackoff *= factor\n\t\tretries--\n\t}\n\tif backoff > max {\n\t\tbackoff = max\n\t}\n\t// Randomize backoff delays so that if a cluster of requests start at\n\t// the same time, they won't operate in lockstep.\n\tbackoff *= 1 + jitter*(grpcrand.Float64()*2-1)\n\tif backoff < 0 {\n\t\treturn 0\n\t}\n\treturn time.Duration(backoff)\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/internal/balancerload/load.go",
    "content": "/*\n * Copyright 2019 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Package balancerload defines APIs to parse server loads in trailers. The\n// parsed loads are sent to balancers in DoneInfo.\npackage balancerload\n\nimport (\n\t\"google.golang.org/grpc/metadata\"\n)\n\n// Parser converts loads from metadata into a concrete type.\ntype Parser interface {\n\t// Parse parses loads from metadata.\n\tParse(md metadata.MD) interface{}\n}\n\nvar parser Parser\n\n// SetParser sets the load parser.\n//\n// Not mutex-protected, should be called before any gRPC functions.\nfunc SetParser(lr Parser) {\n\tparser = lr\n}\n\n// Parse calls parser.Read().\nfunc Parse(md metadata.MD) interface{} {\n\tif parser == nil {\n\t\treturn nil\n\t}\n\treturn parser.Parse(md)\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/internal/binarylog/binarylog.go",
    "content": "/*\n *\n * Copyright 2018 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n// Package binarylog implementation binary logging as defined in\n// https://github.com/grpc/proposal/blob/master/A16-binary-logging.md.\npackage binarylog\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\n\t\"google.golang.org/grpc/grpclog\"\n)\n\n// Logger is the global binary logger. It can be used to get binary logger for\n// each method.\ntype Logger interface {\n\tgetMethodLogger(methodName string) *MethodLogger\n}\n\n// binLogger is the global binary logger for the binary. One of this should be\n// built at init time from the configuration (environment varialbe or flags).\n//\n// It is used to get a methodLogger for each individual method.\nvar binLogger Logger\n\n// SetLogger sets the binarg logger.\n//\n// Only call this at init time.\nfunc SetLogger(l Logger) {\n\tbinLogger = l\n}\n\n// GetMethodLogger returns the methodLogger for the given methodName.\n//\n// methodName should be in the format of \"/service/method\".\n//\n// Each methodLogger returned by this method is a new instance. This is to\n// generate sequence id within the call.\nfunc GetMethodLogger(methodName string) *MethodLogger {\n\tif binLogger == nil {\n\t\treturn nil\n\t}\n\treturn binLogger.getMethodLogger(methodName)\n}\n\nfunc init() {\n\tconst envStr = \"GRPC_BINARY_LOG_FILTER\"\n\tconfigStr := os.Getenv(envStr)\n\tbinLogger = NewLoggerFromConfigString(configStr)\n}\n\ntype methodLoggerConfig struct {\n\t// Max length of header and message.\n\thdr, msg uint64\n}\n\ntype logger struct {\n\tall      *methodLoggerConfig\n\tservices map[string]*methodLoggerConfig\n\tmethods  map[string]*methodLoggerConfig\n\n\tblacklist map[string]struct{}\n}\n\n// newEmptyLogger creates an empty logger. The map fields need to be filled in\n// using the set* functions.\nfunc newEmptyLogger() *logger {\n\treturn &logger{}\n}\n\n// Set method logger for \"*\".\nfunc (l *logger) setDefaultMethodLogger(ml *methodLoggerConfig) error {\n\tif l.all != nil {\n\t\treturn fmt.Errorf(\"conflicting global rules found\")\n\t}\n\tl.all = ml\n\treturn nil\n}\n\n// Set method logger for \"service/*\".\n//\n// New methodLogger with same service overrides the old one.\nfunc (l *logger) setServiceMethodLogger(service string, ml *methodLoggerConfig) error {\n\tif _, ok := l.services[service]; ok {\n\t\treturn fmt.Errorf(\"conflicting rules for service %v found\", service)\n\t}\n\tif l.services == nil {\n\t\tl.services = make(map[string]*methodLoggerConfig)\n\t}\n\tl.services[service] = ml\n\treturn nil\n}\n\n// Set method logger for \"service/method\".\n//\n// New methodLogger with same method overrides the old one.\nfunc (l *logger) setMethodMethodLogger(method string, ml *methodLoggerConfig) error {\n\tif _, ok := l.blacklist[method]; ok {\n\t\treturn fmt.Errorf(\"conflicting rules for method %v found\", method)\n\t}\n\tif _, ok := l.methods[method]; ok {\n\t\treturn fmt.Errorf(\"conflicting rules for method %v found\", method)\n\t}\n\tif l.methods == nil {\n\t\tl.methods = make(map[string]*methodLoggerConfig)\n\t}\n\tl.methods[method] = ml\n\treturn nil\n}\n\n// Set blacklist method for \"-service/method\".\nfunc (l *logger) setBlacklist(method string) error {\n\tif _, ok := l.blacklist[method]; ok {\n\t\treturn fmt.Errorf(\"conflicting rules for method %v found\", method)\n\t}\n\tif _, ok := l.methods[method]; ok {\n\t\treturn fmt.Errorf(\"conflicting rules for method %v found\", method)\n\t}\n\tif l.blacklist == nil {\n\t\tl.blacklist = make(map[string]struct{})\n\t}\n\tl.blacklist[method] = struct{}{}\n\treturn nil\n}\n\n// getMethodLogger returns the methodLogger for the given methodName.\n//\n// methodName should be in the format of \"/service/method\".\n//\n// Each methodLogger returned by this method is a new instance. This is to\n// generate sequence id within the call.\nfunc (l *logger) getMethodLogger(methodName string) *MethodLogger {\n\ts, m, err := parseMethodName(methodName)\n\tif err != nil {\n\t\tgrpclog.Infof(\"binarylogging: failed to parse %q: %v\", methodName, err)\n\t\treturn nil\n\t}\n\tif ml, ok := l.methods[s+\"/\"+m]; ok {\n\t\treturn newMethodLogger(ml.hdr, ml.msg)\n\t}\n\tif _, ok := l.blacklist[s+\"/\"+m]; ok {\n\t\treturn nil\n\t}\n\tif ml, ok := l.services[s]; ok {\n\t\treturn newMethodLogger(ml.hdr, ml.msg)\n\t}\n\tif l.all == nil {\n\t\treturn nil\n\t}\n\treturn newMethodLogger(l.all.hdr, l.all.msg)\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/internal/binarylog/binarylog_testutil.go",
    "content": "/*\n *\n * Copyright 2018 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n// This file contains exported variables/functions that are exported for testing\n// only.\n//\n// An ideal way for this would be to put those in a *_test.go but in binarylog\n// package. But this doesn't work with staticcheck with go module. Error was:\n// \"MdToMetadataProto not declared by package binarylog\". This could be caused\n// by the way staticcheck looks for files for a certain package, which doesn't\n// support *_test.go files.\n//\n// Move those to binary_test.go when staticcheck is fixed.\n\npackage binarylog\n\nvar (\n\t// AllLogger is a logger that logs all headers/messages for all RPCs. It's\n\t// for testing only.\n\tAllLogger = NewLoggerFromConfigString(\"*\")\n\t// MdToMetadataProto converts metadata to a binary logging proto message.\n\t// It's for testing only.\n\tMdToMetadataProto = mdToMetadataProto\n\t// AddrToProto converts an address to a binary logging proto message. It's\n\t// for testing only.\n\tAddrToProto = addrToProto\n)\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/internal/binarylog/env_config.go",
    "content": "/*\n *\n * Copyright 2018 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\npackage binarylog\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"regexp\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"google.golang.org/grpc/grpclog\"\n)\n\n// NewLoggerFromConfigString reads the string and build a logger. It can be used\n// to build a new logger and assign it to binarylog.Logger.\n//\n// Example filter config strings:\n//  - \"\" Nothing will be logged\n//  - \"*\" All headers and messages will be fully logged.\n//  - \"*{h}\" Only headers will be logged.\n//  - \"*{m:256}\" Only the first 256 bytes of each message will be logged.\n//  - \"Foo/*\" Logs every method in service Foo\n//  - \"Foo/*,-Foo/Bar\" Logs every method in service Foo except method /Foo/Bar\n//  - \"Foo/*,Foo/Bar{m:256}\" Logs the first 256 bytes of each message in method\n//    /Foo/Bar, logs all headers and messages in every other method in service\n//    Foo.\n//\n// If two configs exist for one certain method or service, the one specified\n// later overrides the privous config.\nfunc NewLoggerFromConfigString(s string) Logger {\n\tif s == \"\" {\n\t\treturn nil\n\t}\n\tl := newEmptyLogger()\n\tmethods := strings.Split(s, \",\")\n\tfor _, method := range methods {\n\t\tif err := l.fillMethodLoggerWithConfigString(method); err != nil {\n\t\t\tgrpclog.Warningf(\"failed to parse binary log config: %v\", err)\n\t\t\treturn nil\n\t\t}\n\t}\n\treturn l\n}\n\n// fillMethodLoggerWithConfigString parses config, creates methodLogger and adds\n// it to the right map in the logger.\nfunc (l *logger) fillMethodLoggerWithConfigString(config string) error {\n\t// \"\" is invalid.\n\tif config == \"\" {\n\t\treturn errors.New(\"empty string is not a valid method binary logging config\")\n\t}\n\n\t// \"-service/method\", blacklist, no * or {} allowed.\n\tif config[0] == '-' {\n\t\ts, m, suffix, err := parseMethodConfigAndSuffix(config[1:])\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"invalid config: %q, %v\", config, err)\n\t\t}\n\t\tif m == \"*\" {\n\t\t\treturn fmt.Errorf(\"invalid config: %q, %v\", config, \"* not allowd in blacklist config\")\n\t\t}\n\t\tif suffix != \"\" {\n\t\t\treturn fmt.Errorf(\"invalid config: %q, %v\", config, \"header/message limit not allowed in blacklist config\")\n\t\t}\n\t\tif err := l.setBlacklist(s + \"/\" + m); err != nil {\n\t\t\treturn fmt.Errorf(\"invalid config: %v\", err)\n\t\t}\n\t\treturn nil\n\t}\n\n\t// \"*{h:256;m:256}\"\n\tif config[0] == '*' {\n\t\thdr, msg, err := parseHeaderMessageLengthConfig(config[1:])\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"invalid config: %q, %v\", config, err)\n\t\t}\n\t\tif err := l.setDefaultMethodLogger(&methodLoggerConfig{hdr: hdr, msg: msg}); err != nil {\n\t\t\treturn fmt.Errorf(\"invalid config: %v\", err)\n\t\t}\n\t\treturn nil\n\t}\n\n\ts, m, suffix, err := parseMethodConfigAndSuffix(config)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"invalid config: %q, %v\", config, err)\n\t}\n\thdr, msg, err := parseHeaderMessageLengthConfig(suffix)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"invalid header/message length config: %q, %v\", suffix, err)\n\t}\n\tif m == \"*\" {\n\t\tif err := l.setServiceMethodLogger(s, &methodLoggerConfig{hdr: hdr, msg: msg}); err != nil {\n\t\t\treturn fmt.Errorf(\"invalid config: %v\", err)\n\t\t}\n\t} else {\n\t\tif err := l.setMethodMethodLogger(s+\"/\"+m, &methodLoggerConfig{hdr: hdr, msg: msg}); err != nil {\n\t\t\treturn fmt.Errorf(\"invalid config: %v\", err)\n\t\t}\n\t}\n\treturn nil\n}\n\nconst (\n\t// TODO: this const is only used by env_config now. But could be useful for\n\t// other config. Move to binarylog.go if necessary.\n\tmaxUInt = ^uint64(0)\n\n\t// For \"p.s/m\" plus any suffix. Suffix will be parsed again. See test for\n\t// expected output.\n\tlongMethodConfigRegexpStr = `^([\\w./]+)/((?:\\w+)|[*])(.+)?$`\n\n\t// For suffix from above, \"{h:123,m:123}\". See test for expected output.\n\toptionalLengthRegexpStr      = `(?::(\\d+))?` // Optional \":123\".\n\theaderConfigRegexpStr        = `^{h` + optionalLengthRegexpStr + `}$`\n\tmessageConfigRegexpStr       = `^{m` + optionalLengthRegexpStr + `}$`\n\theaderMessageConfigRegexpStr = `^{h` + optionalLengthRegexpStr + `;m` + optionalLengthRegexpStr + `}$`\n)\n\nvar (\n\tlongMethodConfigRegexp    = regexp.MustCompile(longMethodConfigRegexpStr)\n\theaderConfigRegexp        = regexp.MustCompile(headerConfigRegexpStr)\n\tmessageConfigRegexp       = regexp.MustCompile(messageConfigRegexpStr)\n\theaderMessageConfigRegexp = regexp.MustCompile(headerMessageConfigRegexpStr)\n)\n\n// Turn \"service/method{h;m}\" into \"service\", \"method\", \"{h;m}\".\nfunc parseMethodConfigAndSuffix(c string) (service, method, suffix string, _ error) {\n\t// Regexp result:\n\t//\n\t// in:  \"p.s/m{h:123,m:123}\",\n\t// out: []string{\"p.s/m{h:123,m:123}\", \"p.s\", \"m\", \"{h:123,m:123}\"},\n\tmatch := longMethodConfigRegexp.FindStringSubmatch(c)\n\tif match == nil {\n\t\treturn \"\", \"\", \"\", fmt.Errorf(\"%q contains invalid substring\", c)\n\t}\n\tservice = match[1]\n\tmethod = match[2]\n\tsuffix = match[3]\n\treturn\n}\n\n// Turn \"{h:123;m:345}\" into 123, 345.\n//\n// Return maxUInt if length is unspecified.\nfunc parseHeaderMessageLengthConfig(c string) (hdrLenStr, msgLenStr uint64, err error) {\n\tif c == \"\" {\n\t\treturn maxUInt, maxUInt, nil\n\t}\n\t// Header config only.\n\tif match := headerConfigRegexp.FindStringSubmatch(c); match != nil {\n\t\tif s := match[1]; s != \"\" {\n\t\t\thdrLenStr, err = strconv.ParseUint(s, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn 0, 0, fmt.Errorf(\"failed to convert %q to uint\", s)\n\t\t\t}\n\t\t\treturn hdrLenStr, 0, nil\n\t\t}\n\t\treturn maxUInt, 0, nil\n\t}\n\n\t// Message config only.\n\tif match := messageConfigRegexp.FindStringSubmatch(c); match != nil {\n\t\tif s := match[1]; s != \"\" {\n\t\t\tmsgLenStr, err = strconv.ParseUint(s, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn 0, 0, fmt.Errorf(\"failed to convert %q to uint\", s)\n\t\t\t}\n\t\t\treturn 0, msgLenStr, nil\n\t\t}\n\t\treturn 0, maxUInt, nil\n\t}\n\n\t// Header and message config both.\n\tif match := headerMessageConfigRegexp.FindStringSubmatch(c); match != nil {\n\t\t// Both hdr and msg are specified, but one or two of them might be empty.\n\t\thdrLenStr = maxUInt\n\t\tmsgLenStr = maxUInt\n\t\tif s := match[1]; s != \"\" {\n\t\t\thdrLenStr, err = strconv.ParseUint(s, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn 0, 0, fmt.Errorf(\"failed to convert %q to uint\", s)\n\t\t\t}\n\t\t}\n\t\tif s := match[2]; s != \"\" {\n\t\t\tmsgLenStr, err = strconv.ParseUint(s, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn 0, 0, fmt.Errorf(\"failed to convert %q to uint\", s)\n\t\t\t}\n\t\t}\n\t\treturn hdrLenStr, msgLenStr, nil\n\t}\n\treturn 0, 0, fmt.Errorf(\"%q contains invalid substring\", c)\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/internal/binarylog/method_logger.go",
    "content": "/*\n *\n * Copyright 2018 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\npackage binarylog\n\nimport (\n\t\"net\"\n\t\"strings\"\n\t\"sync/atomic\"\n\t\"time\"\n\n\t\"github.com/golang/protobuf/proto\"\n\t\"github.com/golang/protobuf/ptypes\"\n\tpb \"google.golang.org/grpc/binarylog/grpc_binarylog_v1\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/grpc/metadata\"\n\t\"google.golang.org/grpc/status\"\n)\n\ntype callIDGenerator struct {\n\tid uint64\n}\n\nfunc (g *callIDGenerator) next() uint64 {\n\tid := atomic.AddUint64(&g.id, 1)\n\treturn id\n}\n\n// reset is for testing only, and doesn't need to be thread safe.\nfunc (g *callIDGenerator) reset() {\n\tg.id = 0\n}\n\nvar idGen callIDGenerator\n\n// MethodLogger is the sub-logger for each method.\ntype MethodLogger struct {\n\theaderMaxLen, messageMaxLen uint64\n\n\tcallID          uint64\n\tidWithinCallGen *callIDGenerator\n\n\tsink Sink // TODO(blog): make this plugable.\n}\n\nfunc newMethodLogger(h, m uint64) *MethodLogger {\n\treturn &MethodLogger{\n\t\theaderMaxLen:  h,\n\t\tmessageMaxLen: m,\n\n\t\tcallID:          idGen.next(),\n\t\tidWithinCallGen: &callIDGenerator{},\n\n\t\tsink: defaultSink, // TODO(blog): make it plugable.\n\t}\n}\n\n// Log creates a proto binary log entry, and logs it to the sink.\nfunc (ml *MethodLogger) Log(c LogEntryConfig) {\n\tm := c.toProto()\n\ttimestamp, _ := ptypes.TimestampProto(time.Now())\n\tm.Timestamp = timestamp\n\tm.CallId = ml.callID\n\tm.SequenceIdWithinCall = ml.idWithinCallGen.next()\n\n\tswitch pay := m.Payload.(type) {\n\tcase *pb.GrpcLogEntry_ClientHeader:\n\t\tm.PayloadTruncated = ml.truncateMetadata(pay.ClientHeader.GetMetadata())\n\tcase *pb.GrpcLogEntry_ServerHeader:\n\t\tm.PayloadTruncated = ml.truncateMetadata(pay.ServerHeader.GetMetadata())\n\tcase *pb.GrpcLogEntry_Message:\n\t\tm.PayloadTruncated = ml.truncateMessage(pay.Message)\n\t}\n\n\tml.sink.Write(m)\n}\n\nfunc (ml *MethodLogger) truncateMetadata(mdPb *pb.Metadata) (truncated bool) {\n\tif ml.headerMaxLen == maxUInt {\n\t\treturn false\n\t}\n\tvar (\n\t\tbytesLimit = ml.headerMaxLen\n\t\tindex      int\n\t)\n\t// At the end of the loop, index will be the first entry where the total\n\t// size is greater than the limit:\n\t//\n\t// len(entry[:index]) <= ml.hdr && len(entry[:index+1]) > ml.hdr.\n\tfor ; index < len(mdPb.Entry); index++ {\n\t\tentry := mdPb.Entry[index]\n\t\tif entry.Key == \"grpc-trace-bin\" {\n\t\t\t// \"grpc-trace-bin\" is a special key. It's kept in the log entry,\n\t\t\t// but not counted towards the size limit.\n\t\t\tcontinue\n\t\t}\n\t\tcurrentEntryLen := uint64(len(entry.Value))\n\t\tif currentEntryLen > bytesLimit {\n\t\t\tbreak\n\t\t}\n\t\tbytesLimit -= currentEntryLen\n\t}\n\ttruncated = index < len(mdPb.Entry)\n\tmdPb.Entry = mdPb.Entry[:index]\n\treturn truncated\n}\n\nfunc (ml *MethodLogger) truncateMessage(msgPb *pb.Message) (truncated bool) {\n\tif ml.messageMaxLen == maxUInt {\n\t\treturn false\n\t}\n\tif ml.messageMaxLen >= uint64(len(msgPb.Data)) {\n\t\treturn false\n\t}\n\tmsgPb.Data = msgPb.Data[:ml.messageMaxLen]\n\treturn true\n}\n\n// LogEntryConfig represents the configuration for binary log entry.\ntype LogEntryConfig interface {\n\ttoProto() *pb.GrpcLogEntry\n}\n\n// ClientHeader configs the binary log entry to be a ClientHeader entry.\ntype ClientHeader struct {\n\tOnClientSide bool\n\tHeader       metadata.MD\n\tMethodName   string\n\tAuthority    string\n\tTimeout      time.Duration\n\t// PeerAddr is required only when it's on server side.\n\tPeerAddr net.Addr\n}\n\nfunc (c *ClientHeader) toProto() *pb.GrpcLogEntry {\n\t// This function doesn't need to set all the fields (e.g. seq ID). The Log\n\t// function will set the fields when necessary.\n\tclientHeader := &pb.ClientHeader{\n\t\tMetadata:   mdToMetadataProto(c.Header),\n\t\tMethodName: c.MethodName,\n\t\tAuthority:  c.Authority,\n\t}\n\tif c.Timeout > 0 {\n\t\tclientHeader.Timeout = ptypes.DurationProto(c.Timeout)\n\t}\n\tret := &pb.GrpcLogEntry{\n\t\tType: pb.GrpcLogEntry_EVENT_TYPE_CLIENT_HEADER,\n\t\tPayload: &pb.GrpcLogEntry_ClientHeader{\n\t\t\tClientHeader: clientHeader,\n\t\t},\n\t}\n\tif c.OnClientSide {\n\t\tret.Logger = pb.GrpcLogEntry_LOGGER_CLIENT\n\t} else {\n\t\tret.Logger = pb.GrpcLogEntry_LOGGER_SERVER\n\t}\n\tif c.PeerAddr != nil {\n\t\tret.Peer = addrToProto(c.PeerAddr)\n\t}\n\treturn ret\n}\n\n// ServerHeader configs the binary log entry to be a ServerHeader entry.\ntype ServerHeader struct {\n\tOnClientSide bool\n\tHeader       metadata.MD\n\t// PeerAddr is required only when it's on client side.\n\tPeerAddr net.Addr\n}\n\nfunc (c *ServerHeader) toProto() *pb.GrpcLogEntry {\n\tret := &pb.GrpcLogEntry{\n\t\tType: pb.GrpcLogEntry_EVENT_TYPE_SERVER_HEADER,\n\t\tPayload: &pb.GrpcLogEntry_ServerHeader{\n\t\t\tServerHeader: &pb.ServerHeader{\n\t\t\t\tMetadata: mdToMetadataProto(c.Header),\n\t\t\t},\n\t\t},\n\t}\n\tif c.OnClientSide {\n\t\tret.Logger = pb.GrpcLogEntry_LOGGER_CLIENT\n\t} else {\n\t\tret.Logger = pb.GrpcLogEntry_LOGGER_SERVER\n\t}\n\tif c.PeerAddr != nil {\n\t\tret.Peer = addrToProto(c.PeerAddr)\n\t}\n\treturn ret\n}\n\n// ClientMessage configs the binary log entry to be a ClientMessage entry.\ntype ClientMessage struct {\n\tOnClientSide bool\n\t// Message can be a proto.Message or []byte. Other messages formats are not\n\t// supported.\n\tMessage interface{}\n}\n\nfunc (c *ClientMessage) toProto() *pb.GrpcLogEntry {\n\tvar (\n\t\tdata []byte\n\t\terr  error\n\t)\n\tif m, ok := c.Message.(proto.Message); ok {\n\t\tdata, err = proto.Marshal(m)\n\t\tif err != nil {\n\t\t\tgrpclog.Infof(\"binarylogging: failed to marshal proto message: %v\", err)\n\t\t}\n\t} else if b, ok := c.Message.([]byte); ok {\n\t\tdata = b\n\t} else {\n\t\tgrpclog.Infof(\"binarylogging: message to log is neither proto.message nor []byte\")\n\t}\n\tret := &pb.GrpcLogEntry{\n\t\tType: pb.GrpcLogEntry_EVENT_TYPE_CLIENT_MESSAGE,\n\t\tPayload: &pb.GrpcLogEntry_Message{\n\t\t\tMessage: &pb.Message{\n\t\t\t\tLength: uint32(len(data)),\n\t\t\t\tData:   data,\n\t\t\t},\n\t\t},\n\t}\n\tif c.OnClientSide {\n\t\tret.Logger = pb.GrpcLogEntry_LOGGER_CLIENT\n\t} else {\n\t\tret.Logger = pb.GrpcLogEntry_LOGGER_SERVER\n\t}\n\treturn ret\n}\n\n// ServerMessage configs the binary log entry to be a ServerMessage entry.\ntype ServerMessage struct {\n\tOnClientSide bool\n\t// Message can be a proto.Message or []byte. Other messages formats are not\n\t// supported.\n\tMessage interface{}\n}\n\nfunc (c *ServerMessage) toProto() *pb.GrpcLogEntry {\n\tvar (\n\t\tdata []byte\n\t\terr  error\n\t)\n\tif m, ok := c.Message.(proto.Message); ok {\n\t\tdata, err = proto.Marshal(m)\n\t\tif err != nil {\n\t\t\tgrpclog.Infof(\"binarylogging: failed to marshal proto message: %v\", err)\n\t\t}\n\t} else if b, ok := c.Message.([]byte); ok {\n\t\tdata = b\n\t} else {\n\t\tgrpclog.Infof(\"binarylogging: message to log is neither proto.message nor []byte\")\n\t}\n\tret := &pb.GrpcLogEntry{\n\t\tType: pb.GrpcLogEntry_EVENT_TYPE_SERVER_MESSAGE,\n\t\tPayload: &pb.GrpcLogEntry_Message{\n\t\t\tMessage: &pb.Message{\n\t\t\t\tLength: uint32(len(data)),\n\t\t\t\tData:   data,\n\t\t\t},\n\t\t},\n\t}\n\tif c.OnClientSide {\n\t\tret.Logger = pb.GrpcLogEntry_LOGGER_CLIENT\n\t} else {\n\t\tret.Logger = pb.GrpcLogEntry_LOGGER_SERVER\n\t}\n\treturn ret\n}\n\n// ClientHalfClose configs the binary log entry to be a ClientHalfClose entry.\ntype ClientHalfClose struct {\n\tOnClientSide bool\n}\n\nfunc (c *ClientHalfClose) toProto() *pb.GrpcLogEntry {\n\tret := &pb.GrpcLogEntry{\n\t\tType:    pb.GrpcLogEntry_EVENT_TYPE_CLIENT_HALF_CLOSE,\n\t\tPayload: nil, // No payload here.\n\t}\n\tif c.OnClientSide {\n\t\tret.Logger = pb.GrpcLogEntry_LOGGER_CLIENT\n\t} else {\n\t\tret.Logger = pb.GrpcLogEntry_LOGGER_SERVER\n\t}\n\treturn ret\n}\n\n// ServerTrailer configs the binary log entry to be a ServerTrailer entry.\ntype ServerTrailer struct {\n\tOnClientSide bool\n\tTrailer      metadata.MD\n\t// Err is the status error.\n\tErr error\n\t// PeerAddr is required only when it's on client side and the RPC is trailer\n\t// only.\n\tPeerAddr net.Addr\n}\n\nfunc (c *ServerTrailer) toProto() *pb.GrpcLogEntry {\n\tst, ok := status.FromError(c.Err)\n\tif !ok {\n\t\tgrpclog.Info(\"binarylogging: error in trailer is not a status error\")\n\t}\n\tvar (\n\t\tdetailsBytes []byte\n\t\terr          error\n\t)\n\tstProto := st.Proto()\n\tif stProto != nil && len(stProto.Details) != 0 {\n\t\tdetailsBytes, err = proto.Marshal(stProto)\n\t\tif err != nil {\n\t\t\tgrpclog.Infof(\"binarylogging: failed to marshal status proto: %v\", err)\n\t\t}\n\t}\n\tret := &pb.GrpcLogEntry{\n\t\tType: pb.GrpcLogEntry_EVENT_TYPE_SERVER_TRAILER,\n\t\tPayload: &pb.GrpcLogEntry_Trailer{\n\t\t\tTrailer: &pb.Trailer{\n\t\t\t\tMetadata:      mdToMetadataProto(c.Trailer),\n\t\t\t\tStatusCode:    uint32(st.Code()),\n\t\t\t\tStatusMessage: st.Message(),\n\t\t\t\tStatusDetails: detailsBytes,\n\t\t\t},\n\t\t},\n\t}\n\tif c.OnClientSide {\n\t\tret.Logger = pb.GrpcLogEntry_LOGGER_CLIENT\n\t} else {\n\t\tret.Logger = pb.GrpcLogEntry_LOGGER_SERVER\n\t}\n\tif c.PeerAddr != nil {\n\t\tret.Peer = addrToProto(c.PeerAddr)\n\t}\n\treturn ret\n}\n\n// Cancel configs the binary log entry to be a Cancel entry.\ntype Cancel struct {\n\tOnClientSide bool\n}\n\nfunc (c *Cancel) toProto() *pb.GrpcLogEntry {\n\tret := &pb.GrpcLogEntry{\n\t\tType:    pb.GrpcLogEntry_EVENT_TYPE_CANCEL,\n\t\tPayload: nil,\n\t}\n\tif c.OnClientSide {\n\t\tret.Logger = pb.GrpcLogEntry_LOGGER_CLIENT\n\t} else {\n\t\tret.Logger = pb.GrpcLogEntry_LOGGER_SERVER\n\t}\n\treturn ret\n}\n\n// metadataKeyOmit returns whether the metadata entry with this key should be\n// omitted.\nfunc metadataKeyOmit(key string) bool {\n\tswitch key {\n\tcase \"lb-token\", \":path\", \":authority\", \"content-encoding\", \"content-type\", \"user-agent\", \"te\":\n\t\treturn true\n\tcase \"grpc-trace-bin\": // grpc-trace-bin is special because it's visiable to users.\n\t\treturn false\n\t}\n\treturn strings.HasPrefix(key, \"grpc-\")\n}\n\nfunc mdToMetadataProto(md metadata.MD) *pb.Metadata {\n\tret := &pb.Metadata{}\n\tfor k, vv := range md {\n\t\tif metadataKeyOmit(k) {\n\t\t\tcontinue\n\t\t}\n\t\tfor _, v := range vv {\n\t\t\tret.Entry = append(ret.Entry,\n\t\t\t\t&pb.MetadataEntry{\n\t\t\t\t\tKey:   k,\n\t\t\t\t\tValue: []byte(v),\n\t\t\t\t},\n\t\t\t)\n\t\t}\n\t}\n\treturn ret\n}\n\nfunc addrToProto(addr net.Addr) *pb.Address {\n\tret := &pb.Address{}\n\tswitch a := addr.(type) {\n\tcase *net.TCPAddr:\n\t\tif a.IP.To4() != nil {\n\t\t\tret.Type = pb.Address_TYPE_IPV4\n\t\t} else if a.IP.To16() != nil {\n\t\t\tret.Type = pb.Address_TYPE_IPV6\n\t\t} else {\n\t\t\tret.Type = pb.Address_TYPE_UNKNOWN\n\t\t\t// Do not set address and port fields.\n\t\t\tbreak\n\t\t}\n\t\tret.Address = a.IP.String()\n\t\tret.IpPort = uint32(a.Port)\n\tcase *net.UnixAddr:\n\t\tret.Type = pb.Address_TYPE_UNIX\n\t\tret.Address = a.String()\n\tdefault:\n\t\tret.Type = pb.Address_TYPE_UNKNOWN\n\t}\n\treturn ret\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/internal/binarylog/sink.go",
    "content": "/*\n *\n * Copyright 2018 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\npackage binarylog\n\nimport (\n\t\"bufio\"\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/golang/protobuf/proto\"\n\tpb \"google.golang.org/grpc/binarylog/grpc_binarylog_v1\"\n\t\"google.golang.org/grpc/grpclog\"\n)\n\nvar (\n\tdefaultSink Sink = &noopSink{} // TODO(blog): change this default (file in /tmp).\n)\n\n// SetDefaultSink sets the sink where binary logs will be written to.\n//\n// Not thread safe. Only set during initialization.\nfunc SetDefaultSink(s Sink) {\n\tif defaultSink != nil {\n\t\tdefaultSink.Close()\n\t}\n\tdefaultSink = s\n}\n\n// Sink writes log entry into the binary log sink.\ntype Sink interface {\n\t// Write will be called to write the log entry into the sink.\n\t//\n\t// It should be thread-safe so it can be called in parallel.\n\tWrite(*pb.GrpcLogEntry) error\n\t// Close will be called when the Sink is replaced by a new Sink.\n\tClose() error\n}\n\ntype noopSink struct{}\n\nfunc (ns *noopSink) Write(*pb.GrpcLogEntry) error { return nil }\nfunc (ns *noopSink) Close() error                 { return nil }\n\n// newWriterSink creates a binary log sink with the given writer.\n//\n// Write() marshalls the proto message and writes it to the given writer. Each\n// message is prefixed with a 4 byte big endian unsigned integer as the length.\n//\n// No buffer is done, Close() doesn't try to close the writer.\nfunc newWriterSink(w io.Writer) *writerSink {\n\treturn &writerSink{out: w}\n}\n\ntype writerSink struct {\n\tout io.Writer\n}\n\nfunc (ws *writerSink) Write(e *pb.GrpcLogEntry) error {\n\tb, err := proto.Marshal(e)\n\tif err != nil {\n\t\tgrpclog.Infof(\"binary logging: failed to marshal proto message: %v\", err)\n\t}\n\thdr := make([]byte, 4)\n\tbinary.BigEndian.PutUint32(hdr, uint32(len(b)))\n\tif _, err := ws.out.Write(hdr); err != nil {\n\t\treturn err\n\t}\n\tif _, err := ws.out.Write(b); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc (ws *writerSink) Close() error { return nil }\n\ntype bufWriteCloserSink struct {\n\tmu     sync.Mutex\n\tcloser io.Closer\n\tout    *writerSink   // out is built on buf.\n\tbuf    *bufio.Writer // buf is kept for flush.\n\n\twriteStartOnce sync.Once\n\twriteTicker    *time.Ticker\n}\n\nfunc (fs *bufWriteCloserSink) Write(e *pb.GrpcLogEntry) error {\n\t// Start the write loop when Write is called.\n\tfs.writeStartOnce.Do(fs.startFlushGoroutine)\n\tfs.mu.Lock()\n\tif err := fs.out.Write(e); err != nil {\n\t\tfs.mu.Unlock()\n\t\treturn err\n\t}\n\tfs.mu.Unlock()\n\treturn nil\n}\n\nconst (\n\tbufFlushDuration = 60 * time.Second\n)\n\nfunc (fs *bufWriteCloserSink) startFlushGoroutine() {\n\tfs.writeTicker = time.NewTicker(bufFlushDuration)\n\tgo func() {\n\t\tfor range fs.writeTicker.C {\n\t\t\tfs.mu.Lock()\n\t\t\tfs.buf.Flush()\n\t\t\tfs.mu.Unlock()\n\t\t}\n\t}()\n}\n\nfunc (fs *bufWriteCloserSink) Close() error {\n\tif fs.writeTicker != nil {\n\t\tfs.writeTicker.Stop()\n\t}\n\tfs.mu.Lock()\n\tfs.buf.Flush()\n\tfs.closer.Close()\n\tfs.out.Close()\n\tfs.mu.Unlock()\n\treturn nil\n}\n\nfunc newBufWriteCloserSink(o io.WriteCloser) Sink {\n\tbufW := bufio.NewWriter(o)\n\treturn &bufWriteCloserSink{\n\t\tcloser: o,\n\t\tout:    newWriterSink(bufW),\n\t\tbuf:    bufW,\n\t}\n}\n\n// NewTempFileSink creates a temp file and returns a Sink that writes to this\n// file.\nfunc NewTempFileSink() (Sink, error) {\n\ttempFile, err := ioutil.TempFile(\"/tmp\", \"grpcgo_binarylog_*.txt\")\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to create temp file: %v\", err)\n\t}\n\treturn newBufWriteCloserSink(tempFile), nil\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/internal/binarylog/util.go",
    "content": "/*\n *\n * Copyright 2018 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\npackage binarylog\n\nimport (\n\t\"errors\"\n\t\"strings\"\n)\n\n// parseMethodName splits service and method from the input. It expects format\n// \"/service/method\".\n//\n// TODO: move to internal/grpcutil.\nfunc parseMethodName(methodName string) (service, method string, _ error) {\n\tif !strings.HasPrefix(methodName, \"/\") {\n\t\treturn \"\", \"\", errors.New(\"invalid method name: should start with /\")\n\t}\n\tmethodName = methodName[1:]\n\n\tpos := strings.LastIndex(methodName, \"/\")\n\tif pos < 0 {\n\t\treturn \"\", \"\", errors.New(\"invalid method name: suffix /method is missing\")\n\t}\n\treturn methodName[:pos], methodName[pos+1:], nil\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/internal/channelz/funcs.go",
    "content": "/*\n *\n * Copyright 2018 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n// Package channelz defines APIs for enabling channelz service, entry\n// registration/deletion, and accessing channelz data. It also defines channelz\n// metric struct formats.\n//\n// All APIs in this package are experimental.\npackage channelz\n\nimport (\n\t\"fmt\"\n\t\"sort\"\n\t\"sync\"\n\t\"sync/atomic\"\n\t\"time\"\n\n\t\"google.golang.org/grpc/grpclog\"\n)\n\nconst (\n\tdefaultMaxTraceEntry int32 = 30\n)\n\nvar (\n\tdb    dbWrapper\n\tidGen idGenerator\n\t// EntryPerPage defines the number of channelz entries to be shown on a web page.\n\tEntryPerPage  = int64(50)\n\tcurState      int32\n\tmaxTraceEntry = defaultMaxTraceEntry\n)\n\n// TurnOn turns on channelz data collection.\nfunc TurnOn() {\n\tif !IsOn() {\n\t\tNewChannelzStorage()\n\t\tatomic.StoreInt32(&curState, 1)\n\t}\n}\n\n// IsOn returns whether channelz data collection is on.\nfunc IsOn() bool {\n\treturn atomic.CompareAndSwapInt32(&curState, 1, 1)\n}\n\n// SetMaxTraceEntry sets maximum number of trace entry per entity (i.e. channel/subchannel).\n// Setting it to 0 will disable channel tracing.\nfunc SetMaxTraceEntry(i int32) {\n\tatomic.StoreInt32(&maxTraceEntry, i)\n}\n\n// ResetMaxTraceEntryToDefault resets the maximum number of trace entry per entity to default.\nfunc ResetMaxTraceEntryToDefault() {\n\tatomic.StoreInt32(&maxTraceEntry, defaultMaxTraceEntry)\n}\n\nfunc getMaxTraceEntry() int {\n\ti := atomic.LoadInt32(&maxTraceEntry)\n\treturn int(i)\n}\n\n// dbWarpper wraps around a reference to internal channelz data storage, and\n// provide synchronized functionality to set and get the reference.\ntype dbWrapper struct {\n\tmu sync.RWMutex\n\tDB *channelMap\n}\n\nfunc (d *dbWrapper) set(db *channelMap) {\n\td.mu.Lock()\n\td.DB = db\n\td.mu.Unlock()\n}\n\nfunc (d *dbWrapper) get() *channelMap {\n\td.mu.RLock()\n\tdefer d.mu.RUnlock()\n\treturn d.DB\n}\n\n// NewChannelzStorage initializes channelz data storage and id generator.\n//\n// This function returns a cleanup function to wait for all channelz state to be reset by the\n// grpc goroutines when those entities get closed. By using this cleanup function, we make sure tests\n// don't mess up each other, i.e. lingering goroutine from previous test doing entity removal happen\n// to remove some entity just register by the new test, since the id space is the same.\n//\n// Note: This function is exported for testing purpose only. User should not call\n// it in most cases.\nfunc NewChannelzStorage() (cleanup func() error) {\n\tdb.set(&channelMap{\n\t\ttopLevelChannels: make(map[int64]struct{}),\n\t\tchannels:         make(map[int64]*channel),\n\t\tlistenSockets:    make(map[int64]*listenSocket),\n\t\tnormalSockets:    make(map[int64]*normalSocket),\n\t\tservers:          make(map[int64]*server),\n\t\tsubChannels:      make(map[int64]*subChannel),\n\t})\n\tidGen.reset()\n\treturn func() error {\n\t\tvar err error\n\t\tcm := db.get()\n\t\tif cm == nil {\n\t\t\treturn nil\n\t\t}\n\t\tfor i := 0; i < 1000; i++ {\n\t\t\tcm.mu.Lock()\n\t\t\tif len(cm.topLevelChannels) == 0 && len(cm.servers) == 0 && len(cm.channels) == 0 && len(cm.subChannels) == 0 && len(cm.listenSockets) == 0 && len(cm.normalSockets) == 0 {\n\t\t\t\tcm.mu.Unlock()\n\t\t\t\t// all things stored in the channelz map have been cleared.\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\tcm.mu.Unlock()\n\t\t\ttime.Sleep(10 * time.Millisecond)\n\t\t}\n\n\t\tcm.mu.Lock()\n\t\terr = fmt.Errorf(\"after 10s the channelz map has not been cleaned up yet, topchannels: %d, servers: %d, channels: %d, subchannels: %d, listen sockets: %d, normal sockets: %d\", len(cm.topLevelChannels), len(cm.servers), len(cm.channels), len(cm.subChannels), len(cm.listenSockets), len(cm.normalSockets))\n\t\tcm.mu.Unlock()\n\t\treturn err\n\t}\n}\n\n// GetTopChannels returns a slice of top channel's ChannelMetric, along with a\n// boolean indicating whether there's more top channels to be queried for.\n//\n// The arg id specifies that only top channel with id at or above it will be included\n// in the result. The returned slice is up to a length of the arg maxResults or\n// EntryPerPage if maxResults is zero, and is sorted in ascending id order.\nfunc GetTopChannels(id int64, maxResults int64) ([]*ChannelMetric, bool) {\n\treturn db.get().GetTopChannels(id, maxResults)\n}\n\n// GetServers returns a slice of server's ServerMetric, along with a\n// boolean indicating whether there's more servers to be queried for.\n//\n// The arg id specifies that only server with id at or above it will be included\n// in the result. The returned slice is up to a length of the arg maxResults or\n// EntryPerPage if maxResults is zero, and is sorted in ascending id order.\nfunc GetServers(id int64, maxResults int64) ([]*ServerMetric, bool) {\n\treturn db.get().GetServers(id, maxResults)\n}\n\n// GetServerSockets returns a slice of server's (identified by id) normal socket's\n// SocketMetric, along with a boolean indicating whether there's more sockets to\n// be queried for.\n//\n// The arg startID specifies that only sockets with id at or above it will be\n// included in the result. The returned slice is up to a length of the arg maxResults\n// or EntryPerPage if maxResults is zero, and is sorted in ascending id order.\nfunc GetServerSockets(id int64, startID int64, maxResults int64) ([]*SocketMetric, bool) {\n\treturn db.get().GetServerSockets(id, startID, maxResults)\n}\n\n// GetChannel returns the ChannelMetric for the channel (identified by id).\nfunc GetChannel(id int64) *ChannelMetric {\n\treturn db.get().GetChannel(id)\n}\n\n// GetSubChannel returns the SubChannelMetric for the subchannel (identified by id).\nfunc GetSubChannel(id int64) *SubChannelMetric {\n\treturn db.get().GetSubChannel(id)\n}\n\n// GetSocket returns the SocketInternalMetric for the socket (identified by id).\nfunc GetSocket(id int64) *SocketMetric {\n\treturn db.get().GetSocket(id)\n}\n\n// GetServer returns the ServerMetric for the server (identified by id).\nfunc GetServer(id int64) *ServerMetric {\n\treturn db.get().GetServer(id)\n}\n\n// RegisterChannel registers the given channel c in channelz database with ref\n// as its reference name, and add it to the child list of its parent (identified\n// by pid). pid = 0 means no parent. It returns the unique channelz tracking id\n// assigned to this channel.\nfunc RegisterChannel(c Channel, pid int64, ref string) int64 {\n\tid := idGen.genID()\n\tcn := &channel{\n\t\trefName:     ref,\n\t\tc:           c,\n\t\tsubChans:    make(map[int64]string),\n\t\tnestedChans: make(map[int64]string),\n\t\tid:          id,\n\t\tpid:         pid,\n\t\ttrace:       &channelTrace{createdTime: time.Now(), events: make([]*TraceEvent, 0, getMaxTraceEntry())},\n\t}\n\tif pid == 0 {\n\t\tdb.get().addChannel(id, cn, true, pid, ref)\n\t} else {\n\t\tdb.get().addChannel(id, cn, false, pid, ref)\n\t}\n\treturn id\n}\n\n// RegisterSubChannel registers the given channel c in channelz database with ref\n// as its reference name, and add it to the child list of its parent (identified\n// by pid). It returns the unique channelz tracking id assigned to this subchannel.\nfunc RegisterSubChannel(c Channel, pid int64, ref string) int64 {\n\tif pid == 0 {\n\t\tgrpclog.Error(\"a SubChannel's parent id cannot be 0\")\n\t\treturn 0\n\t}\n\tid := idGen.genID()\n\tsc := &subChannel{\n\t\trefName: ref,\n\t\tc:       c,\n\t\tsockets: make(map[int64]string),\n\t\tid:      id,\n\t\tpid:     pid,\n\t\ttrace:   &channelTrace{createdTime: time.Now(), events: make([]*TraceEvent, 0, getMaxTraceEntry())},\n\t}\n\tdb.get().addSubChannel(id, sc, pid, ref)\n\treturn id\n}\n\n// RegisterServer registers the given server s in channelz database. It returns\n// the unique channelz tracking id assigned to this server.\nfunc RegisterServer(s Server, ref string) int64 {\n\tid := idGen.genID()\n\tsvr := &server{\n\t\trefName:       ref,\n\t\ts:             s,\n\t\tsockets:       make(map[int64]string),\n\t\tlistenSockets: make(map[int64]string),\n\t\tid:            id,\n\t}\n\tdb.get().addServer(id, svr)\n\treturn id\n}\n\n// RegisterListenSocket registers the given listen socket s in channelz database\n// with ref as its reference name, and add it to the child list of its parent\n// (identified by pid). It returns the unique channelz tracking id assigned to\n// this listen socket.\nfunc RegisterListenSocket(s Socket, pid int64, ref string) int64 {\n\tif pid == 0 {\n\t\tgrpclog.Error(\"a ListenSocket's parent id cannot be 0\")\n\t\treturn 0\n\t}\n\tid := idGen.genID()\n\tls := &listenSocket{refName: ref, s: s, id: id, pid: pid}\n\tdb.get().addListenSocket(id, ls, pid, ref)\n\treturn id\n}\n\n// RegisterNormalSocket registers the given normal socket s in channelz database\n// with ref as its reference name, and add it to the child list of its parent\n// (identified by pid). It returns the unique channelz tracking id assigned to\n// this normal socket.\nfunc RegisterNormalSocket(s Socket, pid int64, ref string) int64 {\n\tif pid == 0 {\n\t\tgrpclog.Error(\"a NormalSocket's parent id cannot be 0\")\n\t\treturn 0\n\t}\n\tid := idGen.genID()\n\tns := &normalSocket{refName: ref, s: s, id: id, pid: pid}\n\tdb.get().addNormalSocket(id, ns, pid, ref)\n\treturn id\n}\n\n// RemoveEntry removes an entry with unique channelz trakcing id to be id from\n// channelz database.\nfunc RemoveEntry(id int64) {\n\tdb.get().removeEntry(id)\n}\n\n// TraceEventDesc is what the caller of AddTraceEvent should provide to describe the event to be added\n// to the channel trace.\n// The Parent field is optional. It is used for event that will be recorded in the entity's parent\n// trace also.\ntype TraceEventDesc struct {\n\tDesc     string\n\tSeverity Severity\n\tParent   *TraceEventDesc\n}\n\n// AddTraceEvent adds trace related to the entity with specified id, using the provided TraceEventDesc.\nfunc AddTraceEvent(id int64, desc *TraceEventDesc) {\n\tif getMaxTraceEntry() == 0 {\n\t\treturn\n\t}\n\tdb.get().traceEvent(id, desc)\n}\n\n// channelMap is the storage data structure for channelz.\n// Methods of channelMap can be divided in two two categories with respect to locking.\n// 1. Methods acquire the global lock.\n// 2. Methods that can only be called when global lock is held.\n// A second type of method need always to be called inside a first type of method.\ntype channelMap struct {\n\tmu               sync.RWMutex\n\ttopLevelChannels map[int64]struct{}\n\tservers          map[int64]*server\n\tchannels         map[int64]*channel\n\tsubChannels      map[int64]*subChannel\n\tlistenSockets    map[int64]*listenSocket\n\tnormalSockets    map[int64]*normalSocket\n}\n\nfunc (c *channelMap) addServer(id int64, s *server) {\n\tc.mu.Lock()\n\ts.cm = c\n\tc.servers[id] = s\n\tc.mu.Unlock()\n}\n\nfunc (c *channelMap) addChannel(id int64, cn *channel, isTopChannel bool, pid int64, ref string) {\n\tc.mu.Lock()\n\tcn.cm = c\n\tcn.trace.cm = c\n\tc.channels[id] = cn\n\tif isTopChannel {\n\t\tc.topLevelChannels[id] = struct{}{}\n\t} else {\n\t\tc.findEntry(pid).addChild(id, cn)\n\t}\n\tc.mu.Unlock()\n}\n\nfunc (c *channelMap) addSubChannel(id int64, sc *subChannel, pid int64, ref string) {\n\tc.mu.Lock()\n\tsc.cm = c\n\tsc.trace.cm = c\n\tc.subChannels[id] = sc\n\tc.findEntry(pid).addChild(id, sc)\n\tc.mu.Unlock()\n}\n\nfunc (c *channelMap) addListenSocket(id int64, ls *listenSocket, pid int64, ref string) {\n\tc.mu.Lock()\n\tls.cm = c\n\tc.listenSockets[id] = ls\n\tc.findEntry(pid).addChild(id, ls)\n\tc.mu.Unlock()\n}\n\nfunc (c *channelMap) addNormalSocket(id int64, ns *normalSocket, pid int64, ref string) {\n\tc.mu.Lock()\n\tns.cm = c\n\tc.normalSockets[id] = ns\n\tc.findEntry(pid).addChild(id, ns)\n\tc.mu.Unlock()\n}\n\n// removeEntry triggers the removal of an entry, which may not indeed delete the entry, if it has to\n// wait on the deletion of its children and until no other entity's channel trace references it.\n// It may lead to a chain of entry deletion. For example, deleting the last socket of a gracefully\n// shutting down server will lead to the server being also deleted.\nfunc (c *channelMap) removeEntry(id int64) {\n\tc.mu.Lock()\n\tc.findEntry(id).triggerDelete()\n\tc.mu.Unlock()\n}\n\n// c.mu must be held by the caller\nfunc (c *channelMap) decrTraceRefCount(id int64) {\n\te := c.findEntry(id)\n\tif v, ok := e.(tracedChannel); ok {\n\t\tv.decrTraceRefCount()\n\t\te.deleteSelfIfReady()\n\t}\n}\n\n// c.mu must be held by the caller.\nfunc (c *channelMap) findEntry(id int64) entry {\n\tvar v entry\n\tvar ok bool\n\tif v, ok = c.channels[id]; ok {\n\t\treturn v\n\t}\n\tif v, ok = c.subChannels[id]; ok {\n\t\treturn v\n\t}\n\tif v, ok = c.servers[id]; ok {\n\t\treturn v\n\t}\n\tif v, ok = c.listenSockets[id]; ok {\n\t\treturn v\n\t}\n\tif v, ok = c.normalSockets[id]; ok {\n\t\treturn v\n\t}\n\treturn &dummyEntry{idNotFound: id}\n}\n\n// c.mu must be held by the caller\n// deleteEntry simply deletes an entry from the channelMap. Before calling this\n// method, caller must check this entry is ready to be deleted, i.e removeEntry()\n// has been called on it, and no children still exist.\n// Conditionals are ordered by the expected frequency of deletion of each entity\n// type, in order to optimize performance.\nfunc (c *channelMap) deleteEntry(id int64) {\n\tvar ok bool\n\tif _, ok = c.normalSockets[id]; ok {\n\t\tdelete(c.normalSockets, id)\n\t\treturn\n\t}\n\tif _, ok = c.subChannels[id]; ok {\n\t\tdelete(c.subChannels, id)\n\t\treturn\n\t}\n\tif _, ok = c.channels[id]; ok {\n\t\tdelete(c.channels, id)\n\t\tdelete(c.topLevelChannels, id)\n\t\treturn\n\t}\n\tif _, ok = c.listenSockets[id]; ok {\n\t\tdelete(c.listenSockets, id)\n\t\treturn\n\t}\n\tif _, ok = c.servers[id]; ok {\n\t\tdelete(c.servers, id)\n\t\treturn\n\t}\n}\n\nfunc (c *channelMap) traceEvent(id int64, desc *TraceEventDesc) {\n\tc.mu.Lock()\n\tchild := c.findEntry(id)\n\tchildTC, ok := child.(tracedChannel)\n\tif !ok {\n\t\tc.mu.Unlock()\n\t\treturn\n\t}\n\tchildTC.getChannelTrace().append(&TraceEvent{Desc: desc.Desc, Severity: desc.Severity, Timestamp: time.Now()})\n\tif desc.Parent != nil {\n\t\tparent := c.findEntry(child.getParentID())\n\t\tvar chanType RefChannelType\n\t\tswitch child.(type) {\n\t\tcase *channel:\n\t\t\tchanType = RefChannel\n\t\tcase *subChannel:\n\t\t\tchanType = RefSubChannel\n\t\t}\n\t\tif parentTC, ok := parent.(tracedChannel); ok {\n\t\t\tparentTC.getChannelTrace().append(&TraceEvent{\n\t\t\t\tDesc:      desc.Parent.Desc,\n\t\t\t\tSeverity:  desc.Parent.Severity,\n\t\t\t\tTimestamp: time.Now(),\n\t\t\t\tRefID:     id,\n\t\t\t\tRefName:   childTC.getRefName(),\n\t\t\t\tRefType:   chanType,\n\t\t\t})\n\t\t\tchildTC.incrTraceRefCount()\n\t\t}\n\t}\n\tc.mu.Unlock()\n}\n\ntype int64Slice []int64\n\nfunc (s int64Slice) Len() int           { return len(s) }\nfunc (s int64Slice) Swap(i, j int)      { s[i], s[j] = s[j], s[i] }\nfunc (s int64Slice) Less(i, j int) bool { return s[i] < s[j] }\n\nfunc copyMap(m map[int64]string) map[int64]string {\n\tn := make(map[int64]string)\n\tfor k, v := range m {\n\t\tn[k] = v\n\t}\n\treturn n\n}\n\nfunc min(a, b int64) int64 {\n\tif a < b {\n\t\treturn a\n\t}\n\treturn b\n}\n\nfunc (c *channelMap) GetTopChannels(id int64, maxResults int64) ([]*ChannelMetric, bool) {\n\tif maxResults <= 0 {\n\t\tmaxResults = EntryPerPage\n\t}\n\tc.mu.RLock()\n\tl := int64(len(c.topLevelChannels))\n\tids := make([]int64, 0, l)\n\tcns := make([]*channel, 0, min(l, maxResults))\n\n\tfor k := range c.topLevelChannels {\n\t\tids = append(ids, k)\n\t}\n\tsort.Sort(int64Slice(ids))\n\tidx := sort.Search(len(ids), func(i int) bool { return ids[i] >= id })\n\tcount := int64(0)\n\tvar end bool\n\tvar t []*ChannelMetric\n\tfor i, v := range ids[idx:] {\n\t\tif count == maxResults {\n\t\t\tbreak\n\t\t}\n\t\tif cn, ok := c.channels[v]; ok {\n\t\t\tcns = append(cns, cn)\n\t\t\tt = append(t, &ChannelMetric{\n\t\t\t\tNestedChans: copyMap(cn.nestedChans),\n\t\t\t\tSubChans:    copyMap(cn.subChans),\n\t\t\t})\n\t\t\tcount++\n\t\t}\n\t\tif i == len(ids[idx:])-1 {\n\t\t\tend = true\n\t\t\tbreak\n\t\t}\n\t}\n\tc.mu.RUnlock()\n\tif count == 0 {\n\t\tend = true\n\t}\n\n\tfor i, cn := range cns {\n\t\tt[i].ChannelData = cn.c.ChannelzMetric()\n\t\tt[i].ID = cn.id\n\t\tt[i].RefName = cn.refName\n\t\tt[i].Trace = cn.trace.dumpData()\n\t}\n\treturn t, end\n}\n\nfunc (c *channelMap) GetServers(id, maxResults int64) ([]*ServerMetric, bool) {\n\tif maxResults <= 0 {\n\t\tmaxResults = EntryPerPage\n\t}\n\tc.mu.RLock()\n\tl := int64(len(c.servers))\n\tids := make([]int64, 0, l)\n\tss := make([]*server, 0, min(l, maxResults))\n\tfor k := range c.servers {\n\t\tids = append(ids, k)\n\t}\n\tsort.Sort(int64Slice(ids))\n\tidx := sort.Search(len(ids), func(i int) bool { return ids[i] >= id })\n\tcount := int64(0)\n\tvar end bool\n\tvar s []*ServerMetric\n\tfor i, v := range ids[idx:] {\n\t\tif count == maxResults {\n\t\t\tbreak\n\t\t}\n\t\tif svr, ok := c.servers[v]; ok {\n\t\t\tss = append(ss, svr)\n\t\t\ts = append(s, &ServerMetric{\n\t\t\t\tListenSockets: copyMap(svr.listenSockets),\n\t\t\t})\n\t\t\tcount++\n\t\t}\n\t\tif i == len(ids[idx:])-1 {\n\t\t\tend = true\n\t\t\tbreak\n\t\t}\n\t}\n\tc.mu.RUnlock()\n\tif count == 0 {\n\t\tend = true\n\t}\n\n\tfor i, svr := range ss {\n\t\ts[i].ServerData = svr.s.ChannelzMetric()\n\t\ts[i].ID = svr.id\n\t\ts[i].RefName = svr.refName\n\t}\n\treturn s, end\n}\n\nfunc (c *channelMap) GetServerSockets(id int64, startID int64, maxResults int64) ([]*SocketMetric, bool) {\n\tif maxResults <= 0 {\n\t\tmaxResults = EntryPerPage\n\t}\n\tvar svr *server\n\tvar ok bool\n\tc.mu.RLock()\n\tif svr, ok = c.servers[id]; !ok {\n\t\t// server with id doesn't exist.\n\t\tc.mu.RUnlock()\n\t\treturn nil, true\n\t}\n\tsvrskts := svr.sockets\n\tl := int64(len(svrskts))\n\tids := make([]int64, 0, l)\n\tsks := make([]*normalSocket, 0, min(l, maxResults))\n\tfor k := range svrskts {\n\t\tids = append(ids, k)\n\t}\n\tsort.Sort(int64Slice(ids))\n\tidx := sort.Search(len(ids), func(i int) bool { return ids[i] >= startID })\n\tcount := int64(0)\n\tvar end bool\n\tfor i, v := range ids[idx:] {\n\t\tif count == maxResults {\n\t\t\tbreak\n\t\t}\n\t\tif ns, ok := c.normalSockets[v]; ok {\n\t\t\tsks = append(sks, ns)\n\t\t\tcount++\n\t\t}\n\t\tif i == len(ids[idx:])-1 {\n\t\t\tend = true\n\t\t\tbreak\n\t\t}\n\t}\n\tc.mu.RUnlock()\n\tif count == 0 {\n\t\tend = true\n\t}\n\tvar s []*SocketMetric\n\tfor _, ns := range sks {\n\t\tsm := &SocketMetric{}\n\t\tsm.SocketData = ns.s.ChannelzMetric()\n\t\tsm.ID = ns.id\n\t\tsm.RefName = ns.refName\n\t\ts = append(s, sm)\n\t}\n\treturn s, end\n}\n\nfunc (c *channelMap) GetChannel(id int64) *ChannelMetric {\n\tcm := &ChannelMetric{}\n\tvar cn *channel\n\tvar ok bool\n\tc.mu.RLock()\n\tif cn, ok = c.channels[id]; !ok {\n\t\t// channel with id doesn't exist.\n\t\tc.mu.RUnlock()\n\t\treturn nil\n\t}\n\tcm.NestedChans = copyMap(cn.nestedChans)\n\tcm.SubChans = copyMap(cn.subChans)\n\t// cn.c can be set to &dummyChannel{} when deleteSelfFromMap is called. Save a copy of cn.c when\n\t// holding the lock to prevent potential data race.\n\tchanCopy := cn.c\n\tc.mu.RUnlock()\n\tcm.ChannelData = chanCopy.ChannelzMetric()\n\tcm.ID = cn.id\n\tcm.RefName = cn.refName\n\tcm.Trace = cn.trace.dumpData()\n\treturn cm\n}\n\nfunc (c *channelMap) GetSubChannel(id int64) *SubChannelMetric {\n\tcm := &SubChannelMetric{}\n\tvar sc *subChannel\n\tvar ok bool\n\tc.mu.RLock()\n\tif sc, ok = c.subChannels[id]; !ok {\n\t\t// subchannel with id doesn't exist.\n\t\tc.mu.RUnlock()\n\t\treturn nil\n\t}\n\tcm.Sockets = copyMap(sc.sockets)\n\t// sc.c can be set to &dummyChannel{} when deleteSelfFromMap is called. Save a copy of sc.c when\n\t// holding the lock to prevent potential data race.\n\tchanCopy := sc.c\n\tc.mu.RUnlock()\n\tcm.ChannelData = chanCopy.ChannelzMetric()\n\tcm.ID = sc.id\n\tcm.RefName = sc.refName\n\tcm.Trace = sc.trace.dumpData()\n\treturn cm\n}\n\nfunc (c *channelMap) GetSocket(id int64) *SocketMetric {\n\tsm := &SocketMetric{}\n\tc.mu.RLock()\n\tif ls, ok := c.listenSockets[id]; ok {\n\t\tc.mu.RUnlock()\n\t\tsm.SocketData = ls.s.ChannelzMetric()\n\t\tsm.ID = ls.id\n\t\tsm.RefName = ls.refName\n\t\treturn sm\n\t}\n\tif ns, ok := c.normalSockets[id]; ok {\n\t\tc.mu.RUnlock()\n\t\tsm.SocketData = ns.s.ChannelzMetric()\n\t\tsm.ID = ns.id\n\t\tsm.RefName = ns.refName\n\t\treturn sm\n\t}\n\tc.mu.RUnlock()\n\treturn nil\n}\n\nfunc (c *channelMap) GetServer(id int64) *ServerMetric {\n\tsm := &ServerMetric{}\n\tvar svr *server\n\tvar ok bool\n\tc.mu.RLock()\n\tif svr, ok = c.servers[id]; !ok {\n\t\tc.mu.RUnlock()\n\t\treturn nil\n\t}\n\tsm.ListenSockets = copyMap(svr.listenSockets)\n\tc.mu.RUnlock()\n\tsm.ID = svr.id\n\tsm.RefName = svr.refName\n\tsm.ServerData = svr.s.ChannelzMetric()\n\treturn sm\n}\n\ntype idGenerator struct {\n\tid int64\n}\n\nfunc (i *idGenerator) reset() {\n\tatomic.StoreInt64(&i.id, 0)\n}\n\nfunc (i *idGenerator) genID() int64 {\n\treturn atomic.AddInt64(&i.id, 1)\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/internal/channelz/types.go",
    "content": "/*\n *\n * Copyright 2018 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\npackage channelz\n\nimport (\n\t\"net\"\n\t\"sync\"\n\t\"sync/atomic\"\n\t\"time\"\n\n\t\"google.golang.org/grpc/connectivity\"\n\t\"google.golang.org/grpc/credentials\"\n\t\"google.golang.org/grpc/grpclog\"\n)\n\n// entry represents a node in the channelz database.\ntype entry interface {\n\t// addChild adds a child e, whose channelz id is id to child list\n\taddChild(id int64, e entry)\n\t// deleteChild deletes a child with channelz id to be id from child list\n\tdeleteChild(id int64)\n\t// triggerDelete tries to delete self from channelz database. However, if child\n\t// list is not empty, then deletion from the database is on hold until the last\n\t// child is deleted from database.\n\ttriggerDelete()\n\t// deleteSelfIfReady check whether triggerDelete() has been called before, and whether child\n\t// list is now empty. If both conditions are met, then delete self from database.\n\tdeleteSelfIfReady()\n\t// getParentID returns parent ID of the entry. 0 value parent ID means no parent.\n\tgetParentID() int64\n}\n\n// dummyEntry is a fake entry to handle entry not found case.\ntype dummyEntry struct {\n\tidNotFound int64\n}\n\nfunc (d *dummyEntry) addChild(id int64, e entry) {\n\t// Note: It is possible for a normal program to reach here under race condition.\n\t// For example, there could be a race between ClientConn.Close() info being propagated\n\t// to addrConn and http2Client. ClientConn.Close() cancel the context and result\n\t// in http2Client to error. The error info is then caught by transport monitor\n\t// and before addrConn.tearDown() is called in side ClientConn.Close(). Therefore,\n\t// the addrConn will create a new transport. And when registering the new transport in\n\t// channelz, its parent addrConn could have already been torn down and deleted\n\t// from channelz tracking, and thus reach the code here.\n\tgrpclog.Infof(\"attempt to add child of type %T with id %d to a parent (id=%d) that doesn't currently exist\", e, id, d.idNotFound)\n}\n\nfunc (d *dummyEntry) deleteChild(id int64) {\n\t// It is possible for a normal program to reach here under race condition.\n\t// Refer to the example described in addChild().\n\tgrpclog.Infof(\"attempt to delete child with id %d from a parent (id=%d) that doesn't currently exist\", id, d.idNotFound)\n}\n\nfunc (d *dummyEntry) triggerDelete() {\n\tgrpclog.Warningf(\"attempt to delete an entry (id=%d) that doesn't currently exist\", d.idNotFound)\n}\n\nfunc (*dummyEntry) deleteSelfIfReady() {\n\t// code should not reach here. deleteSelfIfReady is always called on an existing entry.\n}\n\nfunc (*dummyEntry) getParentID() int64 {\n\treturn 0\n}\n\n// ChannelMetric defines the info channelz provides for a specific Channel, which\n// includes ChannelInternalMetric and channelz-specific data, such as channelz id,\n// child list, etc.\ntype ChannelMetric struct {\n\t// ID is the channelz id of this channel.\n\tID int64\n\t// RefName is the human readable reference string of this channel.\n\tRefName string\n\t// ChannelData contains channel internal metric reported by the channel through\n\t// ChannelzMetric().\n\tChannelData *ChannelInternalMetric\n\t// NestedChans tracks the nested channel type children of this channel in the format of\n\t// a map from nested channel channelz id to corresponding reference string.\n\tNestedChans map[int64]string\n\t// SubChans tracks the subchannel type children of this channel in the format of a\n\t// map from subchannel channelz id to corresponding reference string.\n\tSubChans map[int64]string\n\t// Sockets tracks the socket type children of this channel in the format of a map\n\t// from socket channelz id to corresponding reference string.\n\t// Note current grpc implementation doesn't allow channel having sockets directly,\n\t// therefore, this is field is unused.\n\tSockets map[int64]string\n\t// Trace contains the most recent traced events.\n\tTrace *ChannelTrace\n}\n\n// SubChannelMetric defines the info channelz provides for a specific SubChannel,\n// which includes ChannelInternalMetric and channelz-specific data, such as\n// channelz id, child list, etc.\ntype SubChannelMetric struct {\n\t// ID is the channelz id of this subchannel.\n\tID int64\n\t// RefName is the human readable reference string of this subchannel.\n\tRefName string\n\t// ChannelData contains subchannel internal metric reported by the subchannel\n\t// through ChannelzMetric().\n\tChannelData *ChannelInternalMetric\n\t// NestedChans tracks the nested channel type children of this subchannel in the format of\n\t// a map from nested channel channelz id to corresponding reference string.\n\t// Note current grpc implementation doesn't allow subchannel to have nested channels\n\t// as children, therefore, this field is unused.\n\tNestedChans map[int64]string\n\t// SubChans tracks the subchannel type children of this subchannel in the format of a\n\t// map from subchannel channelz id to corresponding reference string.\n\t// Note current grpc implementation doesn't allow subchannel to have subchannels\n\t// as children, therefore, this field is unused.\n\tSubChans map[int64]string\n\t// Sockets tracks the socket type children of this subchannel in the format of a map\n\t// from socket channelz id to corresponding reference string.\n\tSockets map[int64]string\n\t// Trace contains the most recent traced events.\n\tTrace *ChannelTrace\n}\n\n// ChannelInternalMetric defines the struct that the implementor of Channel interface\n// should return from ChannelzMetric().\ntype ChannelInternalMetric struct {\n\t// current connectivity state of the channel.\n\tState connectivity.State\n\t// The target this channel originally tried to connect to.  May be absent\n\tTarget string\n\t// The number of calls started on the channel.\n\tCallsStarted int64\n\t// The number of calls that have completed with an OK status.\n\tCallsSucceeded int64\n\t// The number of calls that have a completed with a non-OK status.\n\tCallsFailed int64\n\t// The last time a call was started on the channel.\n\tLastCallStartedTimestamp time.Time\n}\n\n// ChannelTrace stores traced events on a channel/subchannel and related info.\ntype ChannelTrace struct {\n\t// EventNum is the number of events that ever got traced (i.e. including those that have been deleted)\n\tEventNum int64\n\t// CreationTime is the creation time of the trace.\n\tCreationTime time.Time\n\t// Events stores the most recent trace events (up to $maxTraceEntry, newer event will overwrite the\n\t// oldest one)\n\tEvents []*TraceEvent\n}\n\n// TraceEvent represent a single trace event\ntype TraceEvent struct {\n\t// Desc is a simple description of the trace event.\n\tDesc string\n\t// Severity states the severity of this trace event.\n\tSeverity Severity\n\t// Timestamp is the event time.\n\tTimestamp time.Time\n\t// RefID is the id of the entity that gets referenced in the event. RefID is 0 if no other entity is\n\t// involved in this event.\n\t// e.g. SubChannel (id: 4[]) Created. --> RefID = 4, RefName = \"\" (inside [])\n\tRefID int64\n\t// RefName is the reference name for the entity that gets referenced in the event.\n\tRefName string\n\t// RefType indicates the referenced entity type, i.e Channel or SubChannel.\n\tRefType RefChannelType\n}\n\n// Channel is the interface that should be satisfied in order to be tracked by\n// channelz as Channel or SubChannel.\ntype Channel interface {\n\tChannelzMetric() *ChannelInternalMetric\n}\n\ntype dummyChannel struct{}\n\nfunc (d *dummyChannel) ChannelzMetric() *ChannelInternalMetric {\n\treturn &ChannelInternalMetric{}\n}\n\ntype channel struct {\n\trefName     string\n\tc           Channel\n\tcloseCalled bool\n\tnestedChans map[int64]string\n\tsubChans    map[int64]string\n\tid          int64\n\tpid         int64\n\tcm          *channelMap\n\ttrace       *channelTrace\n\t// traceRefCount is the number of trace events that reference this channel.\n\t// Non-zero traceRefCount means the trace of this channel cannot be deleted.\n\ttraceRefCount int32\n}\n\nfunc (c *channel) addChild(id int64, e entry) {\n\tswitch v := e.(type) {\n\tcase *subChannel:\n\t\tc.subChans[id] = v.refName\n\tcase *channel:\n\t\tc.nestedChans[id] = v.refName\n\tdefault:\n\t\tgrpclog.Errorf(\"cannot add a child (id = %d) of type %T to a channel\", id, e)\n\t}\n}\n\nfunc (c *channel) deleteChild(id int64) {\n\tdelete(c.subChans, id)\n\tdelete(c.nestedChans, id)\n\tc.deleteSelfIfReady()\n}\n\nfunc (c *channel) triggerDelete() {\n\tc.closeCalled = true\n\tc.deleteSelfIfReady()\n}\n\nfunc (c *channel) getParentID() int64 {\n\treturn c.pid\n}\n\n// deleteSelfFromTree tries to delete the channel from the channelz entry relation tree, which means\n// deleting the channel reference from its parent's child list.\n//\n// In order for a channel to be deleted from the tree, it must meet the criteria that, removal of the\n// corresponding grpc object has been invoked, and the channel does not have any children left.\n//\n// The returned boolean value indicates whether the channel has been successfully deleted from tree.\nfunc (c *channel) deleteSelfFromTree() (deleted bool) {\n\tif !c.closeCalled || len(c.subChans)+len(c.nestedChans) != 0 {\n\t\treturn false\n\t}\n\t// not top channel\n\tif c.pid != 0 {\n\t\tc.cm.findEntry(c.pid).deleteChild(c.id)\n\t}\n\treturn true\n}\n\n// deleteSelfFromMap checks whether it is valid to delete the channel from the map, which means\n// deleting the channel from channelz's tracking entirely. Users can no longer use id to query the\n// channel, and its memory will be garbage collected.\n//\n// The trace reference count of the channel must be 0 in order to be deleted from the map. This is\n// specified in the channel tracing gRFC that as long as some other trace has reference to an entity,\n// the trace of the referenced entity must not be deleted. In order to release the resource allocated\n// by grpc, the reference to the grpc object is reset to a dummy object.\n//\n// deleteSelfFromMap must be called after deleteSelfFromTree returns true.\n//\n// It returns a bool to indicate whether the channel can be safely deleted from map.\nfunc (c *channel) deleteSelfFromMap() (delete bool) {\n\tif c.getTraceRefCount() != 0 {\n\t\tc.c = &dummyChannel{}\n\t\treturn false\n\t}\n\treturn true\n}\n\n// deleteSelfIfReady tries to delete the channel itself from the channelz database.\n// The delete process includes two steps:\n// 1. delete the channel from the entry relation tree, i.e. delete the channel reference from its\n//    parent's child list.\n// 2. delete the channel from the map, i.e. delete the channel entirely from channelz. Lookup by id\n//    will return entry not found error.\nfunc (c *channel) deleteSelfIfReady() {\n\tif !c.deleteSelfFromTree() {\n\t\treturn\n\t}\n\tif !c.deleteSelfFromMap() {\n\t\treturn\n\t}\n\tc.cm.deleteEntry(c.id)\n\tc.trace.clear()\n}\n\nfunc (c *channel) getChannelTrace() *channelTrace {\n\treturn c.trace\n}\n\nfunc (c *channel) incrTraceRefCount() {\n\tatomic.AddInt32(&c.traceRefCount, 1)\n}\n\nfunc (c *channel) decrTraceRefCount() {\n\tatomic.AddInt32(&c.traceRefCount, -1)\n}\n\nfunc (c *channel) getTraceRefCount() int {\n\ti := atomic.LoadInt32(&c.traceRefCount)\n\treturn int(i)\n}\n\nfunc (c *channel) getRefName() string {\n\treturn c.refName\n}\n\ntype subChannel struct {\n\trefName       string\n\tc             Channel\n\tcloseCalled   bool\n\tsockets       map[int64]string\n\tid            int64\n\tpid           int64\n\tcm            *channelMap\n\ttrace         *channelTrace\n\ttraceRefCount int32\n}\n\nfunc (sc *subChannel) addChild(id int64, e entry) {\n\tif v, ok := e.(*normalSocket); ok {\n\t\tsc.sockets[id] = v.refName\n\t} else {\n\t\tgrpclog.Errorf(\"cannot add a child (id = %d) of type %T to a subChannel\", id, e)\n\t}\n}\n\nfunc (sc *subChannel) deleteChild(id int64) {\n\tdelete(sc.sockets, id)\n\tsc.deleteSelfIfReady()\n}\n\nfunc (sc *subChannel) triggerDelete() {\n\tsc.closeCalled = true\n\tsc.deleteSelfIfReady()\n}\n\nfunc (sc *subChannel) getParentID() int64 {\n\treturn sc.pid\n}\n\n// deleteSelfFromTree tries to delete the subchannel from the channelz entry relation tree, which\n// means deleting the subchannel reference from its parent's child list.\n//\n// In order for a subchannel to be deleted from the tree, it must meet the criteria that, removal of\n// the corresponding grpc object has been invoked, and the subchannel does not have any children left.\n//\n// The returned boolean value indicates whether the channel has been successfully deleted from tree.\nfunc (sc *subChannel) deleteSelfFromTree() (deleted bool) {\n\tif !sc.closeCalled || len(sc.sockets) != 0 {\n\t\treturn false\n\t}\n\tsc.cm.findEntry(sc.pid).deleteChild(sc.id)\n\treturn true\n}\n\n// deleteSelfFromMap checks whether it is valid to delete the subchannel from the map, which means\n// deleting the subchannel from channelz's tracking entirely. Users can no longer use id to query\n// the subchannel, and its memory will be garbage collected.\n//\n// The trace reference count of the subchannel must be 0 in order to be deleted from the map. This is\n// specified in the channel tracing gRFC that as long as some other trace has reference to an entity,\n// the trace of the referenced entity must not be deleted. In order to release the resource allocated\n// by grpc, the reference to the grpc object is reset to a dummy object.\n//\n// deleteSelfFromMap must be called after deleteSelfFromTree returns true.\n//\n// It returns a bool to indicate whether the channel can be safely deleted from map.\nfunc (sc *subChannel) deleteSelfFromMap() (delete bool) {\n\tif sc.getTraceRefCount() != 0 {\n\t\t// free the grpc struct (i.e. addrConn)\n\t\tsc.c = &dummyChannel{}\n\t\treturn false\n\t}\n\treturn true\n}\n\n// deleteSelfIfReady tries to delete the subchannel itself from the channelz database.\n// The delete process includes two steps:\n// 1. delete the subchannel from the entry relation tree, i.e. delete the subchannel reference from\n//    its parent's child list.\n// 2. delete the subchannel from the map, i.e. delete the subchannel entirely from channelz. Lookup\n//    by id will return entry not found error.\nfunc (sc *subChannel) deleteSelfIfReady() {\n\tif !sc.deleteSelfFromTree() {\n\t\treturn\n\t}\n\tif !sc.deleteSelfFromMap() {\n\t\treturn\n\t}\n\tsc.cm.deleteEntry(sc.id)\n\tsc.trace.clear()\n}\n\nfunc (sc *subChannel) getChannelTrace() *channelTrace {\n\treturn sc.trace\n}\n\nfunc (sc *subChannel) incrTraceRefCount() {\n\tatomic.AddInt32(&sc.traceRefCount, 1)\n}\n\nfunc (sc *subChannel) decrTraceRefCount() {\n\tatomic.AddInt32(&sc.traceRefCount, -1)\n}\n\nfunc (sc *subChannel) getTraceRefCount() int {\n\ti := atomic.LoadInt32(&sc.traceRefCount)\n\treturn int(i)\n}\n\nfunc (sc *subChannel) getRefName() string {\n\treturn sc.refName\n}\n\n// SocketMetric defines the info channelz provides for a specific Socket, which\n// includes SocketInternalMetric and channelz-specific data, such as channelz id, etc.\ntype SocketMetric struct {\n\t// ID is the channelz id of this socket.\n\tID int64\n\t// RefName is the human readable reference string of this socket.\n\tRefName string\n\t// SocketData contains socket internal metric reported by the socket through\n\t// ChannelzMetric().\n\tSocketData *SocketInternalMetric\n}\n\n// SocketInternalMetric defines the struct that the implementor of Socket interface\n// should return from ChannelzMetric().\ntype SocketInternalMetric struct {\n\t// The number of streams that have been started.\n\tStreamsStarted int64\n\t// The number of streams that have ended successfully:\n\t// On client side, receiving frame with eos bit set.\n\t// On server side, sending frame with eos bit set.\n\tStreamsSucceeded int64\n\t// The number of streams that have ended unsuccessfully:\n\t// On client side, termination without receiving frame with eos bit set.\n\t// On server side, termination without sending frame with eos bit set.\n\tStreamsFailed int64\n\t// The number of messages successfully sent on this socket.\n\tMessagesSent     int64\n\tMessagesReceived int64\n\t// The number of keep alives sent.  This is typically implemented with HTTP/2\n\t// ping messages.\n\tKeepAlivesSent int64\n\t// The last time a stream was created by this endpoint.  Usually unset for\n\t// servers.\n\tLastLocalStreamCreatedTimestamp time.Time\n\t// The last time a stream was created by the remote endpoint.  Usually unset\n\t// for clients.\n\tLastRemoteStreamCreatedTimestamp time.Time\n\t// The last time a message was sent by this endpoint.\n\tLastMessageSentTimestamp time.Time\n\t// The last time a message was received by this endpoint.\n\tLastMessageReceivedTimestamp time.Time\n\t// The amount of window, granted to the local endpoint by the remote endpoint.\n\t// This may be slightly out of date due to network latency.  This does NOT\n\t// include stream level or TCP level flow control info.\n\tLocalFlowControlWindow int64\n\t// The amount of window, granted to the remote endpoint by the local endpoint.\n\t// This may be slightly out of date due to network latency.  This does NOT\n\t// include stream level or TCP level flow control info.\n\tRemoteFlowControlWindow int64\n\t// The locally bound address.\n\tLocalAddr net.Addr\n\t// The remote bound address.  May be absent.\n\tRemoteAddr net.Addr\n\t// Optional, represents the name of the remote endpoint, if different than\n\t// the original target name.\n\tRemoteName    string\n\tSocketOptions *SocketOptionData\n\tSecurity      credentials.ChannelzSecurityValue\n}\n\n// Socket is the interface that should be satisfied in order to be tracked by\n// channelz as Socket.\ntype Socket interface {\n\tChannelzMetric() *SocketInternalMetric\n}\n\ntype listenSocket struct {\n\trefName string\n\ts       Socket\n\tid      int64\n\tpid     int64\n\tcm      *channelMap\n}\n\nfunc (ls *listenSocket) addChild(id int64, e entry) {\n\tgrpclog.Errorf(\"cannot add a child (id = %d) of type %T to a listen socket\", id, e)\n}\n\nfunc (ls *listenSocket) deleteChild(id int64) {\n\tgrpclog.Errorf(\"cannot delete a child (id = %d) from a listen socket\", id)\n}\n\nfunc (ls *listenSocket) triggerDelete() {\n\tls.cm.deleteEntry(ls.id)\n\tls.cm.findEntry(ls.pid).deleteChild(ls.id)\n}\n\nfunc (ls *listenSocket) deleteSelfIfReady() {\n\tgrpclog.Errorf(\"cannot call deleteSelfIfReady on a listen socket\")\n}\n\nfunc (ls *listenSocket) getParentID() int64 {\n\treturn ls.pid\n}\n\ntype normalSocket struct {\n\trefName string\n\ts       Socket\n\tid      int64\n\tpid     int64\n\tcm      *channelMap\n}\n\nfunc (ns *normalSocket) addChild(id int64, e entry) {\n\tgrpclog.Errorf(\"cannot add a child (id = %d) of type %T to a normal socket\", id, e)\n}\n\nfunc (ns *normalSocket) deleteChild(id int64) {\n\tgrpclog.Errorf(\"cannot delete a child (id = %d) from a normal socket\", id)\n}\n\nfunc (ns *normalSocket) triggerDelete() {\n\tns.cm.deleteEntry(ns.id)\n\tns.cm.findEntry(ns.pid).deleteChild(ns.id)\n}\n\nfunc (ns *normalSocket) deleteSelfIfReady() {\n\tgrpclog.Errorf(\"cannot call deleteSelfIfReady on a normal socket\")\n}\n\nfunc (ns *normalSocket) getParentID() int64 {\n\treturn ns.pid\n}\n\n// ServerMetric defines the info channelz provides for a specific Server, which\n// includes ServerInternalMetric and channelz-specific data, such as channelz id,\n// child list, etc.\ntype ServerMetric struct {\n\t// ID is the channelz id of this server.\n\tID int64\n\t// RefName is the human readable reference string of this server.\n\tRefName string\n\t// ServerData contains server internal metric reported by the server through\n\t// ChannelzMetric().\n\tServerData *ServerInternalMetric\n\t// ListenSockets tracks the listener socket type children of this server in the\n\t// format of a map from socket channelz id to corresponding reference string.\n\tListenSockets map[int64]string\n}\n\n// ServerInternalMetric defines the struct that the implementor of Server interface\n// should return from ChannelzMetric().\ntype ServerInternalMetric struct {\n\t// The number of incoming calls started on the server.\n\tCallsStarted int64\n\t// The number of incoming calls that have completed with an OK status.\n\tCallsSucceeded int64\n\t// The number of incoming calls that have a completed with a non-OK status.\n\tCallsFailed int64\n\t// The last time a call was started on the server.\n\tLastCallStartedTimestamp time.Time\n}\n\n// Server is the interface to be satisfied in order to be tracked by channelz as\n// Server.\ntype Server interface {\n\tChannelzMetric() *ServerInternalMetric\n}\n\ntype server struct {\n\trefName       string\n\ts             Server\n\tcloseCalled   bool\n\tsockets       map[int64]string\n\tlistenSockets map[int64]string\n\tid            int64\n\tcm            *channelMap\n}\n\nfunc (s *server) addChild(id int64, e entry) {\n\tswitch v := e.(type) {\n\tcase *normalSocket:\n\t\ts.sockets[id] = v.refName\n\tcase *listenSocket:\n\t\ts.listenSockets[id] = v.refName\n\tdefault:\n\t\tgrpclog.Errorf(\"cannot add a child (id = %d) of type %T to a server\", id, e)\n\t}\n}\n\nfunc (s *server) deleteChild(id int64) {\n\tdelete(s.sockets, id)\n\tdelete(s.listenSockets, id)\n\ts.deleteSelfIfReady()\n}\n\nfunc (s *server) triggerDelete() {\n\ts.closeCalled = true\n\ts.deleteSelfIfReady()\n}\n\nfunc (s *server) deleteSelfIfReady() {\n\tif !s.closeCalled || len(s.sockets)+len(s.listenSockets) != 0 {\n\t\treturn\n\t}\n\ts.cm.deleteEntry(s.id)\n}\n\nfunc (s *server) getParentID() int64 {\n\treturn 0\n}\n\ntype tracedChannel interface {\n\tgetChannelTrace() *channelTrace\n\tincrTraceRefCount()\n\tdecrTraceRefCount()\n\tgetRefName() string\n}\n\ntype channelTrace struct {\n\tcm          *channelMap\n\tcreatedTime time.Time\n\teventCount  int64\n\tmu          sync.Mutex\n\tevents      []*TraceEvent\n}\n\nfunc (c *channelTrace) append(e *TraceEvent) {\n\tc.mu.Lock()\n\tif len(c.events) == getMaxTraceEntry() {\n\t\tdel := c.events[0]\n\t\tc.events = c.events[1:]\n\t\tif del.RefID != 0 {\n\t\t\t// start recursive cleanup in a goroutine to not block the call originated from grpc.\n\t\t\tgo func() {\n\t\t\t\t// need to acquire c.cm.mu lock to call the unlocked attemptCleanup func.\n\t\t\t\tc.cm.mu.Lock()\n\t\t\t\tc.cm.decrTraceRefCount(del.RefID)\n\t\t\t\tc.cm.mu.Unlock()\n\t\t\t}()\n\t\t}\n\t}\n\te.Timestamp = time.Now()\n\tc.events = append(c.events, e)\n\tc.eventCount++\n\tc.mu.Unlock()\n}\n\nfunc (c *channelTrace) clear() {\n\tc.mu.Lock()\n\tfor _, e := range c.events {\n\t\tif e.RefID != 0 {\n\t\t\t// caller should have already held the c.cm.mu lock.\n\t\t\tc.cm.decrTraceRefCount(e.RefID)\n\t\t}\n\t}\n\tc.mu.Unlock()\n}\n\n// Severity is the severity level of a trace event.\n// The canonical enumeration of all valid values is here:\n// https://github.com/grpc/grpc-proto/blob/9b13d199cc0d4703c7ea26c9c330ba695866eb23/grpc/channelz/v1/channelz.proto#L126.\ntype Severity int\n\nconst (\n\t// CtUNKNOWN indicates unknown severity of a trace event.\n\tCtUNKNOWN Severity = iota\n\t// CtINFO indicates info level severity of a trace event.\n\tCtINFO\n\t// CtWarning indicates warning level severity of a trace event.\n\tCtWarning\n\t// CtError indicates error level severity of a trace event.\n\tCtError\n)\n\n// RefChannelType is the type of the entity being referenced in a trace event.\ntype RefChannelType int\n\nconst (\n\t// RefChannel indicates the referenced entity is a Channel.\n\tRefChannel RefChannelType = iota\n\t// RefSubChannel indicates the referenced entity is a SubChannel.\n\tRefSubChannel\n)\n\nfunc (c *channelTrace) dumpData() *ChannelTrace {\n\tc.mu.Lock()\n\tct := &ChannelTrace{EventNum: c.eventCount, CreationTime: c.createdTime}\n\tct.Events = c.events[:len(c.events)]\n\tc.mu.Unlock()\n\treturn ct\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/internal/channelz/types_linux.go",
    "content": "// +build !appengine\n\n/*\n *\n * Copyright 2018 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\npackage channelz\n\nimport (\n\t\"syscall\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\n// SocketOptionData defines the struct to hold socket option data, and related\n// getter function to obtain info from fd.\ntype SocketOptionData struct {\n\tLinger      *unix.Linger\n\tRecvTimeout *unix.Timeval\n\tSendTimeout *unix.Timeval\n\tTCPInfo     *unix.TCPInfo\n}\n\n// Getsockopt defines the function to get socket options requested by channelz.\n// It is to be passed to syscall.RawConn.Control().\nfunc (s *SocketOptionData) Getsockopt(fd uintptr) {\n\tif v, err := unix.GetsockoptLinger(int(fd), syscall.SOL_SOCKET, syscall.SO_LINGER); err == nil {\n\t\ts.Linger = v\n\t}\n\tif v, err := unix.GetsockoptTimeval(int(fd), syscall.SOL_SOCKET, syscall.SO_RCVTIMEO); err == nil {\n\t\ts.RecvTimeout = v\n\t}\n\tif v, err := unix.GetsockoptTimeval(int(fd), syscall.SOL_SOCKET, syscall.SO_SNDTIMEO); err == nil {\n\t\ts.SendTimeout = v\n\t}\n\tif v, err := unix.GetsockoptTCPInfo(int(fd), syscall.SOL_TCP, syscall.TCP_INFO); err == nil {\n\t\ts.TCPInfo = v\n\t}\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/internal/channelz/types_nonlinux.go",
    "content": "// +build !linux appengine\n\n/*\n *\n * Copyright 2018 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\npackage channelz\n\nimport (\n\t\"sync\"\n\n\t\"google.golang.org/grpc/grpclog\"\n)\n\nvar once sync.Once\n\n// SocketOptionData defines the struct to hold socket option data, and related\n// getter function to obtain info from fd.\n// Windows OS doesn't support Socket Option\ntype SocketOptionData struct {\n}\n\n// Getsockopt defines the function to get socket options requested by channelz.\n// It is to be passed to syscall.RawConn.Control().\n// Windows OS doesn't support Socket Option\nfunc (s *SocketOptionData) Getsockopt(fd uintptr) {\n\tonce.Do(func() {\n\t\tgrpclog.Warningln(\"Channelz: socket options are not supported on non-linux os and appengine.\")\n\t})\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/internal/channelz/util_linux.go",
    "content": "// +build linux,!appengine\n\n/*\n *\n * Copyright 2018 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\npackage channelz\n\nimport (\n\t\"syscall\"\n)\n\n// GetSocketOption gets the socket option info of the conn.\nfunc GetSocketOption(socket interface{}) *SocketOptionData {\n\tc, ok := socket.(syscall.Conn)\n\tif !ok {\n\t\treturn nil\n\t}\n\tdata := &SocketOptionData{}\n\tif rawConn, err := c.SyscallConn(); err == nil {\n\t\trawConn.Control(data.Getsockopt)\n\t\treturn data\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/internal/channelz/util_nonlinux.go",
    "content": "// +build !linux appengine\n\n/*\n *\n * Copyright 2018 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\npackage channelz\n\n// GetSocketOption gets the socket option info of the conn.\nfunc GetSocketOption(c interface{}) *SocketOptionData {\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/internal/envconfig/envconfig.go",
    "content": "/*\n *\n * Copyright 2018 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n// Package envconfig contains grpc settings configured by environment variables.\npackage envconfig\n\nimport (\n\t\"os\"\n\t\"strings\"\n)\n\nconst (\n\tprefix              = \"GRPC_GO_\"\n\tretryStr            = prefix + \"RETRY\"\n\trequireHandshakeStr = prefix + \"REQUIRE_HANDSHAKE\"\n)\n\n// RequireHandshakeSetting describes the settings for handshaking.\ntype RequireHandshakeSetting int\n\nconst (\n\t// RequireHandshakeOn indicates to wait for handshake before considering a\n\t// connection ready/successful.\n\tRequireHandshakeOn RequireHandshakeSetting = iota\n\t// RequireHandshakeOff indicates to not wait for handshake before\n\t// considering a connection ready/successful.\n\tRequireHandshakeOff\n)\n\nvar (\n\t// Retry is set if retry is explicitly enabled via \"GRPC_GO_RETRY=on\".\n\tRetry = strings.EqualFold(os.Getenv(retryStr), \"on\")\n\t// RequireHandshake is set based upon the GRPC_GO_REQUIRE_HANDSHAKE\n\t// environment variable.\n\t//\n\t// Will be removed after the 1.18 release.\n\tRequireHandshake = RequireHandshakeOn\n)\n\nfunc init() {\n\tswitch strings.ToLower(os.Getenv(requireHandshakeStr)) {\n\tcase \"on\":\n\t\tfallthrough\n\tdefault:\n\t\tRequireHandshake = RequireHandshakeOn\n\tcase \"off\":\n\t\tRequireHandshake = RequireHandshakeOff\n\t}\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/internal/grpcrand/grpcrand.go",
    "content": "/*\n *\n * Copyright 2018 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n// Package grpcrand implements math/rand functions in a concurrent-safe way\n// with a global random source, independent of math/rand's global source.\npackage grpcrand\n\nimport (\n\t\"math/rand\"\n\t\"sync\"\n\t\"time\"\n)\n\nvar (\n\tr  = rand.New(rand.NewSource(time.Now().UnixNano()))\n\tmu sync.Mutex\n)\n\n// Int63n implements rand.Int63n on the grpcrand global source.\nfunc Int63n(n int64) int64 {\n\tmu.Lock()\n\tres := r.Int63n(n)\n\tmu.Unlock()\n\treturn res\n}\n\n// Intn implements rand.Intn on the grpcrand global source.\nfunc Intn(n int) int {\n\tmu.Lock()\n\tres := r.Intn(n)\n\tmu.Unlock()\n\treturn res\n}\n\n// Float64 implements rand.Float64 on the grpcrand global source.\nfunc Float64() float64 {\n\tmu.Lock()\n\tres := r.Float64()\n\tmu.Unlock()\n\treturn res\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/internal/grpcsync/event.go",
    "content": "/*\n *\n * Copyright 2018 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n// Package grpcsync implements additional synchronization primitives built upon\n// the sync package.\npackage grpcsync\n\nimport (\n\t\"sync\"\n\t\"sync/atomic\"\n)\n\n// Event represents a one-time event that may occur in the future.\ntype Event struct {\n\tfired int32\n\tc     chan struct{}\n\to     sync.Once\n}\n\n// Fire causes e to complete.  It is safe to call multiple times, and\n// concurrently.  It returns true iff this call to Fire caused the signaling\n// channel returned by Done to close.\nfunc (e *Event) Fire() bool {\n\tret := false\n\te.o.Do(func() {\n\t\tatomic.StoreInt32(&e.fired, 1)\n\t\tclose(e.c)\n\t\tret = true\n\t})\n\treturn ret\n}\n\n// Done returns a channel that will be closed when Fire is called.\nfunc (e *Event) Done() <-chan struct{} {\n\treturn e.c\n}\n\n// HasFired returns true if Fire has been called.\nfunc (e *Event) HasFired() bool {\n\treturn atomic.LoadInt32(&e.fired) == 1\n}\n\n// NewEvent returns a new, ready-to-use Event.\nfunc NewEvent() *Event {\n\treturn &Event{c: make(chan struct{})}\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/internal/internal.go",
    "content": "/*\n * Copyright 2016 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n// Package internal contains gRPC-internal code, to avoid polluting\n// the godoc of the top-level grpc package.  It must not import any grpc\n// symbols to avoid circular dependencies.\npackage internal\n\nimport (\n\t\"context\"\n\t\"time\"\n)\n\nvar (\n\t// WithResolverBuilder is exported by dialoptions.go\n\tWithResolverBuilder interface{} // func (resolver.Builder) grpc.DialOption\n\t// WithHealthCheckFunc is not exported by dialoptions.go\n\tWithHealthCheckFunc interface{} // func (HealthChecker) DialOption\n\t// HealthCheckFunc is used to provide client-side LB channel health checking\n\tHealthCheckFunc HealthChecker\n\t// BalancerUnregister is exported by package balancer to unregister a balancer.\n\tBalancerUnregister func(name string)\n\t// KeepaliveMinPingTime is the minimum ping interval.  This must be 10s by\n\t// default, but tests may wish to set it lower for convenience.\n\tKeepaliveMinPingTime = 10 * time.Second\n\t// ParseServiceConfig is a function to parse JSON service configs into\n\t// opaque data structures.\n\tParseServiceConfig func(sc string) (interface{}, error)\n)\n\n// HealthChecker defines the signature of the client-side LB channel health checking function.\ntype HealthChecker func(ctx context.Context, newStream func() (interface{}, error), reportHealth func(bool), serviceName string) error\n\nconst (\n\t// CredsBundleModeFallback switches GoogleDefaultCreds to fallback mode.\n\tCredsBundleModeFallback = \"fallback\"\n\t// CredsBundleModeBalancer switches GoogleDefaultCreds to grpclb balancer\n\t// mode.\n\tCredsBundleModeBalancer = \"balancer\"\n\t// CredsBundleModeBackendFromBalancer switches GoogleDefaultCreds to mode\n\t// that supports backend returned by grpclb balancer.\n\tCredsBundleModeBackendFromBalancer = \"backend-from-balancer\"\n)\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/internal/syscall/syscall_linux.go",
    "content": "// +build !appengine\n\n/*\n *\n * Copyright 2018 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n// Package syscall provides functionalities that grpc uses to get low-level operating system\n// stats/info.\npackage syscall\n\nimport (\n\t\"fmt\"\n\t\"net\"\n\t\"syscall\"\n\t\"time\"\n\n\t\"golang.org/x/sys/unix\"\n\t\"google.golang.org/grpc/grpclog\"\n)\n\n// GetCPUTime returns the how much CPU time has passed since the start of this process.\nfunc GetCPUTime() int64 {\n\tvar ts unix.Timespec\n\tif err := unix.ClockGettime(unix.CLOCK_PROCESS_CPUTIME_ID, &ts); err != nil {\n\t\tgrpclog.Fatal(err)\n\t}\n\treturn ts.Nano()\n}\n\n// Rusage is an alias for syscall.Rusage under linux non-appengine environment.\ntype Rusage syscall.Rusage\n\n// GetRusage returns the resource usage of current process.\nfunc GetRusage() (rusage *Rusage) {\n\trusage = new(Rusage)\n\tsyscall.Getrusage(syscall.RUSAGE_SELF, (*syscall.Rusage)(rusage))\n\treturn\n}\n\n// CPUTimeDiff returns the differences of user CPU time and system CPU time used\n// between two Rusage structs.\nfunc CPUTimeDiff(first *Rusage, latest *Rusage) (float64, float64) {\n\tf := (*syscall.Rusage)(first)\n\tl := (*syscall.Rusage)(latest)\n\tvar (\n\t\tutimeDiffs  = l.Utime.Sec - f.Utime.Sec\n\t\tutimeDiffus = l.Utime.Usec - f.Utime.Usec\n\t\tstimeDiffs  = l.Stime.Sec - f.Stime.Sec\n\t\tstimeDiffus = l.Stime.Usec - f.Stime.Usec\n\t)\n\n\tuTimeElapsed := float64(utimeDiffs) + float64(utimeDiffus)*1.0e-6\n\tsTimeElapsed := float64(stimeDiffs) + float64(stimeDiffus)*1.0e-6\n\n\treturn uTimeElapsed, sTimeElapsed\n}\n\n// SetTCPUserTimeout sets the TCP user timeout on a connection's socket\nfunc SetTCPUserTimeout(conn net.Conn, timeout time.Duration) error {\n\ttcpconn, ok := conn.(*net.TCPConn)\n\tif !ok {\n\t\t// not a TCP connection. exit early\n\t\treturn nil\n\t}\n\trawConn, err := tcpconn.SyscallConn()\n\tif err != nil {\n\t\treturn fmt.Errorf(\"error getting raw connection: %v\", err)\n\t}\n\terr = rawConn.Control(func(fd uintptr) {\n\t\terr = syscall.SetsockoptInt(int(fd), syscall.IPPROTO_TCP, unix.TCP_USER_TIMEOUT, int(timeout/time.Millisecond))\n\t})\n\tif err != nil {\n\t\treturn fmt.Errorf(\"error setting option on socket: %v\", err)\n\t}\n\n\treturn nil\n}\n\n// GetTCPUserTimeout gets the TCP user timeout on a connection's socket\nfunc GetTCPUserTimeout(conn net.Conn) (opt int, err error) {\n\ttcpconn, ok := conn.(*net.TCPConn)\n\tif !ok {\n\t\terr = fmt.Errorf(\"conn is not *net.TCPConn. got %T\", conn)\n\t\treturn\n\t}\n\trawConn, err := tcpconn.SyscallConn()\n\tif err != nil {\n\t\terr = fmt.Errorf(\"error getting raw connection: %v\", err)\n\t\treturn\n\t}\n\terr = rawConn.Control(func(fd uintptr) {\n\t\topt, err = syscall.GetsockoptInt(int(fd), syscall.IPPROTO_TCP, unix.TCP_USER_TIMEOUT)\n\t})\n\tif err != nil {\n\t\terr = fmt.Errorf(\"error getting option on socket: %v\", err)\n\t\treturn\n\t}\n\n\treturn\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/internal/syscall/syscall_nonlinux.go",
    "content": "// +build !linux appengine\n\n/*\n *\n * Copyright 2018 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\npackage syscall\n\nimport (\n\t\"net\"\n\t\"sync\"\n\t\"time\"\n\n\t\"google.golang.org/grpc/grpclog\"\n)\n\nvar once sync.Once\n\nfunc log() {\n\tonce.Do(func() {\n\t\tgrpclog.Info(\"CPU time info is unavailable on non-linux or appengine environment.\")\n\t})\n}\n\n// GetCPUTime returns the how much CPU time has passed since the start of this process.\n// It always returns 0 under non-linux or appengine environment.\nfunc GetCPUTime() int64 {\n\tlog()\n\treturn 0\n}\n\n// Rusage is an empty struct under non-linux or appengine environment.\ntype Rusage struct{}\n\n// GetRusage is a no-op function under non-linux or appengine environment.\nfunc GetRusage() (rusage *Rusage) {\n\tlog()\n\treturn nil\n}\n\n// CPUTimeDiff returns the differences of user CPU time and system CPU time used\n// between two Rusage structs. It a no-op function for non-linux or appengine environment.\nfunc CPUTimeDiff(first *Rusage, latest *Rusage) (float64, float64) {\n\tlog()\n\treturn 0, 0\n}\n\n// SetTCPUserTimeout is a no-op function under non-linux or appengine environments\nfunc SetTCPUserTimeout(conn net.Conn, timeout time.Duration) error {\n\tlog()\n\treturn nil\n}\n\n// GetTCPUserTimeout is a no-op function under non-linux or appengine environments\n// a negative return value indicates the operation is not supported\nfunc GetTCPUserTimeout(conn net.Conn) (int, error) {\n\tlog()\n\treturn -1, nil\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/internal/transport/bdp_estimator.go",
    "content": "/*\n *\n * Copyright 2017 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\npackage transport\n\nimport (\n\t\"sync\"\n\t\"time\"\n)\n\nconst (\n\t// bdpLimit is the maximum value the flow control windows will be increased\n\t// to.  TCP typically limits this to 4MB, but some systems go up to 16MB.\n\t// Since this is only a limit, it is safe to make it optimistic.\n\tbdpLimit = (1 << 20) * 16\n\t// alpha is a constant factor used to keep a moving average\n\t// of RTTs.\n\talpha = 0.9\n\t// If the current bdp sample is greater than or equal to\n\t// our beta * our estimated bdp and the current bandwidth\n\t// sample is the maximum bandwidth observed so far, we\n\t// increase our bbp estimate by a factor of gamma.\n\tbeta = 0.66\n\t// To put our bdp to be smaller than or equal to twice the real BDP,\n\t// we should multiply our current sample with 4/3, however to round things out\n\t// we use 2 as the multiplication factor.\n\tgamma = 2\n)\n\n// Adding arbitrary data to ping so that its ack can be identified.\n// Easter-egg: what does the ping message say?\nvar bdpPing = &ping{data: [8]byte{2, 4, 16, 16, 9, 14, 7, 7}}\n\ntype bdpEstimator struct {\n\t// sentAt is the time when the ping was sent.\n\tsentAt time.Time\n\n\tmu sync.Mutex\n\t// bdp is the current bdp estimate.\n\tbdp uint32\n\t// sample is the number of bytes received in one measurement cycle.\n\tsample uint32\n\t// bwMax is the maximum bandwidth noted so far (bytes/sec).\n\tbwMax float64\n\t// bool to keep track of the beginning of a new measurement cycle.\n\tisSent bool\n\t// Callback to update the window sizes.\n\tupdateFlowControl func(n uint32)\n\t// sampleCount is the number of samples taken so far.\n\tsampleCount uint64\n\t// round trip time (seconds)\n\trtt float64\n}\n\n// timesnap registers the time bdp ping was sent out so that\n// network rtt can be calculated when its ack is received.\n// It is called (by controller) when the bdpPing is\n// being written on the wire.\nfunc (b *bdpEstimator) timesnap(d [8]byte) {\n\tif bdpPing.data != d {\n\t\treturn\n\t}\n\tb.sentAt = time.Now()\n}\n\n// add adds bytes to the current sample for calculating bdp.\n// It returns true only if a ping must be sent. This can be used\n// by the caller (handleData) to make decision about batching\n// a window update with it.\nfunc (b *bdpEstimator) add(n uint32) bool {\n\tb.mu.Lock()\n\tdefer b.mu.Unlock()\n\tif b.bdp == bdpLimit {\n\t\treturn false\n\t}\n\tif !b.isSent {\n\t\tb.isSent = true\n\t\tb.sample = n\n\t\tb.sentAt = time.Time{}\n\t\tb.sampleCount++\n\t\treturn true\n\t}\n\tb.sample += n\n\treturn false\n}\n\n// calculate is called when an ack for a bdp ping is received.\n// Here we calculate the current bdp and bandwidth sample and\n// decide if the flow control windows should go up.\nfunc (b *bdpEstimator) calculate(d [8]byte) {\n\t// Check if the ping acked for was the bdp ping.\n\tif bdpPing.data != d {\n\t\treturn\n\t}\n\tb.mu.Lock()\n\trttSample := time.Since(b.sentAt).Seconds()\n\tif b.sampleCount < 10 {\n\t\t// Bootstrap rtt with an average of first 10 rtt samples.\n\t\tb.rtt += (rttSample - b.rtt) / float64(b.sampleCount)\n\t} else {\n\t\t// Heed to the recent past more.\n\t\tb.rtt += (rttSample - b.rtt) * float64(alpha)\n\t}\n\tb.isSent = false\n\t// The number of bytes accumulated so far in the sample is smaller\n\t// than or equal to 1.5 times the real BDP on a saturated connection.\n\tbwCurrent := float64(b.sample) / (b.rtt * float64(1.5))\n\tif bwCurrent > b.bwMax {\n\t\tb.bwMax = bwCurrent\n\t}\n\t// If the current sample (which is smaller than or equal to the 1.5 times the real BDP) is\n\t// greater than or equal to 2/3rd our perceived bdp AND this is the maximum bandwidth seen so far, we\n\t// should update our perception of the network BDP.\n\tif float64(b.sample) >= beta*float64(b.bdp) && bwCurrent == b.bwMax && b.bdp != bdpLimit {\n\t\tsampleFloat := float64(b.sample)\n\t\tb.bdp = uint32(gamma * sampleFloat)\n\t\tif b.bdp > bdpLimit {\n\t\t\tb.bdp = bdpLimit\n\t\t}\n\t\tbdp := b.bdp\n\t\tb.mu.Unlock()\n\t\tb.updateFlowControl(bdp)\n\t\treturn\n\t}\n\tb.mu.Unlock()\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/internal/transport/controlbuf.go",
    "content": "/*\n *\n * Copyright 2014 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\npackage transport\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"runtime\"\n\t\"sync\"\n\n\t\"golang.org/x/net/http2\"\n\t\"golang.org/x/net/http2/hpack\"\n)\n\nvar updateHeaderTblSize = func(e *hpack.Encoder, v uint32) {\n\te.SetMaxDynamicTableSizeLimit(v)\n}\n\ntype itemNode struct {\n\tit   interface{}\n\tnext *itemNode\n}\n\ntype itemList struct {\n\thead *itemNode\n\ttail *itemNode\n}\n\nfunc (il *itemList) enqueue(i interface{}) {\n\tn := &itemNode{it: i}\n\tif il.tail == nil {\n\t\til.head, il.tail = n, n\n\t\treturn\n\t}\n\til.tail.next = n\n\til.tail = n\n}\n\n// peek returns the first item in the list without removing it from the\n// list.\nfunc (il *itemList) peek() interface{} {\n\treturn il.head.it\n}\n\nfunc (il *itemList) dequeue() interface{} {\n\tif il.head == nil {\n\t\treturn nil\n\t}\n\ti := il.head.it\n\til.head = il.head.next\n\tif il.head == nil {\n\t\til.tail = nil\n\t}\n\treturn i\n}\n\nfunc (il *itemList) dequeueAll() *itemNode {\n\th := il.head\n\til.head, il.tail = nil, nil\n\treturn h\n}\n\nfunc (il *itemList) isEmpty() bool {\n\treturn il.head == nil\n}\n\n// The following defines various control items which could flow through\n// the control buffer of transport. They represent different aspects of\n// control tasks, e.g., flow control, settings, streaming resetting, etc.\n\n// registerStream is used to register an incoming stream with loopy writer.\ntype registerStream struct {\n\tstreamID uint32\n\twq       *writeQuota\n}\n\n// headerFrame is also used to register stream on the client-side.\ntype headerFrame struct {\n\tstreamID   uint32\n\thf         []hpack.HeaderField\n\tendStream  bool                       // Valid on server side.\n\tinitStream func(uint32) (bool, error) // Used only on the client side.\n\tonWrite    func()\n\twq         *writeQuota    // write quota for the stream created.\n\tcleanup    *cleanupStream // Valid on the server side.\n\tonOrphaned func(error)    // Valid on client-side\n}\n\ntype cleanupStream struct {\n\tstreamID uint32\n\trst      bool\n\trstCode  http2.ErrCode\n\tonWrite  func()\n}\n\ntype dataFrame struct {\n\tstreamID  uint32\n\tendStream bool\n\th         []byte\n\td         []byte\n\t// onEachWrite is called every time\n\t// a part of d is written out.\n\tonEachWrite func()\n}\n\ntype incomingWindowUpdate struct {\n\tstreamID  uint32\n\tincrement uint32\n}\n\ntype outgoingWindowUpdate struct {\n\tstreamID  uint32\n\tincrement uint32\n}\n\ntype incomingSettings struct {\n\tss []http2.Setting\n}\n\ntype outgoingSettings struct {\n\tss []http2.Setting\n}\n\ntype incomingGoAway struct {\n}\n\ntype goAway struct {\n\tcode      http2.ErrCode\n\tdebugData []byte\n\theadsUp   bool\n\tcloseConn bool\n}\n\ntype ping struct {\n\tack  bool\n\tdata [8]byte\n}\n\ntype outFlowControlSizeRequest struct {\n\tresp chan uint32\n}\n\ntype outStreamState int\n\nconst (\n\tactive outStreamState = iota\n\tempty\n\twaitingOnStreamQuota\n)\n\ntype outStream struct {\n\tid               uint32\n\tstate            outStreamState\n\titl              *itemList\n\tbytesOutStanding int\n\twq               *writeQuota\n\n\tnext *outStream\n\tprev *outStream\n}\n\nfunc (s *outStream) deleteSelf() {\n\tif s.prev != nil {\n\t\ts.prev.next = s.next\n\t}\n\tif s.next != nil {\n\t\ts.next.prev = s.prev\n\t}\n\ts.next, s.prev = nil, nil\n}\n\ntype outStreamList struct {\n\t// Following are sentinel objects that mark the\n\t// beginning and end of the list. They do not\n\t// contain any item lists. All valid objects are\n\t// inserted in between them.\n\t// This is needed so that an outStream object can\n\t// deleteSelf() in O(1) time without knowing which\n\t// list it belongs to.\n\thead *outStream\n\ttail *outStream\n}\n\nfunc newOutStreamList() *outStreamList {\n\thead, tail := new(outStream), new(outStream)\n\thead.next = tail\n\ttail.prev = head\n\treturn &outStreamList{\n\t\thead: head,\n\t\ttail: tail,\n\t}\n}\n\nfunc (l *outStreamList) enqueue(s *outStream) {\n\te := l.tail.prev\n\te.next = s\n\ts.prev = e\n\ts.next = l.tail\n\tl.tail.prev = s\n}\n\n// remove from the beginning of the list.\nfunc (l *outStreamList) dequeue() *outStream {\n\tb := l.head.next\n\tif b == l.tail {\n\t\treturn nil\n\t}\n\tb.deleteSelf()\n\treturn b\n}\n\n// controlBuffer is a way to pass information to loopy.\n// Information is passed as specific struct types called control frames.\n// A control frame not only represents data, messages or headers to be sent out\n// but can also be used to instruct loopy to update its internal state.\n// It shouldn't be confused with an HTTP2 frame, although some of the control frames\n// like dataFrame and headerFrame do go out on wire as HTTP2 frames.\ntype controlBuffer struct {\n\tch              chan struct{}\n\tdone            <-chan struct{}\n\tmu              sync.Mutex\n\tconsumerWaiting bool\n\tlist            *itemList\n\terr             error\n}\n\nfunc newControlBuffer(done <-chan struct{}) *controlBuffer {\n\treturn &controlBuffer{\n\t\tch:   make(chan struct{}, 1),\n\t\tlist: &itemList{},\n\t\tdone: done,\n\t}\n}\n\nfunc (c *controlBuffer) put(it interface{}) error {\n\t_, err := c.executeAndPut(nil, it)\n\treturn err\n}\n\nfunc (c *controlBuffer) executeAndPut(f func(it interface{}) bool, it interface{}) (bool, error) {\n\tvar wakeUp bool\n\tc.mu.Lock()\n\tif c.err != nil {\n\t\tc.mu.Unlock()\n\t\treturn false, c.err\n\t}\n\tif f != nil {\n\t\tif !f(it) { // f wasn't successful\n\t\t\tc.mu.Unlock()\n\t\t\treturn false, nil\n\t\t}\n\t}\n\tif c.consumerWaiting {\n\t\twakeUp = true\n\t\tc.consumerWaiting = false\n\t}\n\tc.list.enqueue(it)\n\tc.mu.Unlock()\n\tif wakeUp {\n\t\tselect {\n\t\tcase c.ch <- struct{}{}:\n\t\tdefault:\n\t\t}\n\t}\n\treturn true, nil\n}\n\n// Note argument f should never be nil.\nfunc (c *controlBuffer) execute(f func(it interface{}) bool, it interface{}) (bool, error) {\n\tc.mu.Lock()\n\tif c.err != nil {\n\t\tc.mu.Unlock()\n\t\treturn false, c.err\n\t}\n\tif !f(it) { // f wasn't successful\n\t\tc.mu.Unlock()\n\t\treturn false, nil\n\t}\n\tc.mu.Unlock()\n\treturn true, nil\n}\n\nfunc (c *controlBuffer) get(block bool) (interface{}, error) {\n\tfor {\n\t\tc.mu.Lock()\n\t\tif c.err != nil {\n\t\t\tc.mu.Unlock()\n\t\t\treturn nil, c.err\n\t\t}\n\t\tif !c.list.isEmpty() {\n\t\t\th := c.list.dequeue()\n\t\t\tc.mu.Unlock()\n\t\t\treturn h, nil\n\t\t}\n\t\tif !block {\n\t\t\tc.mu.Unlock()\n\t\t\treturn nil, nil\n\t\t}\n\t\tc.consumerWaiting = true\n\t\tc.mu.Unlock()\n\t\tselect {\n\t\tcase <-c.ch:\n\t\tcase <-c.done:\n\t\t\tc.finish()\n\t\t\treturn nil, ErrConnClosing\n\t\t}\n\t}\n}\n\nfunc (c *controlBuffer) finish() {\n\tc.mu.Lock()\n\tif c.err != nil {\n\t\tc.mu.Unlock()\n\t\treturn\n\t}\n\tc.err = ErrConnClosing\n\t// There may be headers for streams in the control buffer.\n\t// These streams need to be cleaned out since the transport\n\t// is still not aware of these yet.\n\tfor head := c.list.dequeueAll(); head != nil; head = head.next {\n\t\thdr, ok := head.it.(*headerFrame)\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\t\tif hdr.onOrphaned != nil { // It will be nil on the server-side.\n\t\t\thdr.onOrphaned(ErrConnClosing)\n\t\t}\n\t}\n\tc.mu.Unlock()\n}\n\ntype side int\n\nconst (\n\tclientSide side = iota\n\tserverSide\n)\n\n// Loopy receives frames from the control buffer.\n// Each frame is handled individually; most of the work done by loopy goes\n// into handling data frames. Loopy maintains a queue of active streams, and each\n// stream maintains a queue of data frames; as loopy receives data frames\n// it gets added to the queue of the relevant stream.\n// Loopy goes over this list of active streams by processing one node every iteration,\n// thereby closely resemebling to a round-robin scheduling over all streams. While\n// processing a stream, loopy writes out data bytes from this stream capped by the min\n// of http2MaxFrameLen, connection-level flow control and stream-level flow control.\ntype loopyWriter struct {\n\tside      side\n\tcbuf      *controlBuffer\n\tsendQuota uint32\n\toiws      uint32 // outbound initial window size.\n\t// estdStreams is map of all established streams that are not cleaned-up yet.\n\t// On client-side, this is all streams whose headers were sent out.\n\t// On server-side, this is all streams whose headers were received.\n\testdStreams map[uint32]*outStream // Established streams.\n\t// activeStreams is a linked-list of all streams that have data to send and some\n\t// stream-level flow control quota.\n\t// Each of these streams internally have a list of data items(and perhaps trailers\n\t// on the server-side) to be sent out.\n\tactiveStreams *outStreamList\n\tframer        *framer\n\thBuf          *bytes.Buffer  // The buffer for HPACK encoding.\n\thEnc          *hpack.Encoder // HPACK encoder.\n\tbdpEst        *bdpEstimator\n\tdraining      bool\n\n\t// Side-specific handlers\n\tssGoAwayHandler func(*goAway) (bool, error)\n}\n\nfunc newLoopyWriter(s side, fr *framer, cbuf *controlBuffer, bdpEst *bdpEstimator) *loopyWriter {\n\tvar buf bytes.Buffer\n\tl := &loopyWriter{\n\t\tside:          s,\n\t\tcbuf:          cbuf,\n\t\tsendQuota:     defaultWindowSize,\n\t\toiws:          defaultWindowSize,\n\t\testdStreams:   make(map[uint32]*outStream),\n\t\tactiveStreams: newOutStreamList(),\n\t\tframer:        fr,\n\t\thBuf:          &buf,\n\t\thEnc:          hpack.NewEncoder(&buf),\n\t\tbdpEst:        bdpEst,\n\t}\n\treturn l\n}\n\nconst minBatchSize = 1000\n\n// run should be run in a separate goroutine.\n// It reads control frames from controlBuf and processes them by:\n// 1. Updating loopy's internal state, or/and\n// 2. Writing out HTTP2 frames on the wire.\n//\n// Loopy keeps all active streams with data to send in a linked-list.\n// All streams in the activeStreams linked-list must have both:\n// 1. Data to send, and\n// 2. Stream level flow control quota available.\n//\n// In each iteration of run loop, other than processing the incoming control\n// frame, loopy calls processData, which processes one node from the activeStreams linked-list.\n// This results in writing of HTTP2 frames into an underlying write buffer.\n// When there's no more control frames to read from controlBuf, loopy flushes the write buffer.\n// As an optimization, to increase the batch size for each flush, loopy yields the processor, once\n// if the batch size is too low to give stream goroutines a chance to fill it up.\nfunc (l *loopyWriter) run() (err error) {\n\tdefer func() {\n\t\tif err == ErrConnClosing {\n\t\t\t// Don't log ErrConnClosing as error since it happens\n\t\t\t// 1. When the connection is closed by some other known issue.\n\t\t\t// 2. User closed the connection.\n\t\t\t// 3. A graceful close of connection.\n\t\t\tinfof(\"transport: loopyWriter.run returning. %v\", err)\n\t\t\terr = nil\n\t\t}\n\t}()\n\tfor {\n\t\tit, err := l.cbuf.get(true)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif err = l.handle(it); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif _, err = l.processData(); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tgosched := true\n\thasdata:\n\t\tfor {\n\t\t\tit, err := l.cbuf.get(false)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif it != nil {\n\t\t\t\tif err = l.handle(it); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tif _, err = l.processData(); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tcontinue hasdata\n\t\t\t}\n\t\t\tisEmpty, err := l.processData()\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif !isEmpty {\n\t\t\t\tcontinue hasdata\n\t\t\t}\n\t\t\tif gosched {\n\t\t\t\tgosched = false\n\t\t\t\tif l.framer.writer.offset < minBatchSize {\n\t\t\t\t\truntime.Gosched()\n\t\t\t\t\tcontinue hasdata\n\t\t\t\t}\n\t\t\t}\n\t\t\tl.framer.writer.Flush()\n\t\t\tbreak hasdata\n\n\t\t}\n\t}\n}\n\nfunc (l *loopyWriter) outgoingWindowUpdateHandler(w *outgoingWindowUpdate) error {\n\treturn l.framer.fr.WriteWindowUpdate(w.streamID, w.increment)\n}\n\nfunc (l *loopyWriter) incomingWindowUpdateHandler(w *incomingWindowUpdate) error {\n\t// Otherwise update the quota.\n\tif w.streamID == 0 {\n\t\tl.sendQuota += w.increment\n\t\treturn nil\n\t}\n\t// Find the stream and update it.\n\tif str, ok := l.estdStreams[w.streamID]; ok {\n\t\tstr.bytesOutStanding -= int(w.increment)\n\t\tif strQuota := int(l.oiws) - str.bytesOutStanding; strQuota > 0 && str.state == waitingOnStreamQuota {\n\t\t\tstr.state = active\n\t\t\tl.activeStreams.enqueue(str)\n\t\t\treturn nil\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (l *loopyWriter) outgoingSettingsHandler(s *outgoingSettings) error {\n\treturn l.framer.fr.WriteSettings(s.ss...)\n}\n\nfunc (l *loopyWriter) incomingSettingsHandler(s *incomingSettings) error {\n\tif err := l.applySettings(s.ss); err != nil {\n\t\treturn err\n\t}\n\treturn l.framer.fr.WriteSettingsAck()\n}\n\nfunc (l *loopyWriter) registerStreamHandler(h *registerStream) error {\n\tstr := &outStream{\n\t\tid:    h.streamID,\n\t\tstate: empty,\n\t\titl:   &itemList{},\n\t\twq:    h.wq,\n\t}\n\tl.estdStreams[h.streamID] = str\n\treturn nil\n}\n\nfunc (l *loopyWriter) headerHandler(h *headerFrame) error {\n\tif l.side == serverSide {\n\t\tstr, ok := l.estdStreams[h.streamID]\n\t\tif !ok {\n\t\t\twarningf(\"transport: loopy doesn't recognize the stream: %d\", h.streamID)\n\t\t\treturn nil\n\t\t}\n\t\t// Case 1.A: Server is responding back with headers.\n\t\tif !h.endStream {\n\t\t\treturn l.writeHeader(h.streamID, h.endStream, h.hf, h.onWrite)\n\t\t}\n\t\t// else:  Case 1.B: Server wants to close stream.\n\n\t\tif str.state != empty { // either active or waiting on stream quota.\n\t\t\t// add it str's list of items.\n\t\t\tstr.itl.enqueue(h)\n\t\t\treturn nil\n\t\t}\n\t\tif err := l.writeHeader(h.streamID, h.endStream, h.hf, h.onWrite); err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn l.cleanupStreamHandler(h.cleanup)\n\t}\n\t// Case 2: Client wants to originate stream.\n\tstr := &outStream{\n\t\tid:    h.streamID,\n\t\tstate: empty,\n\t\titl:   &itemList{},\n\t\twq:    h.wq,\n\t}\n\tstr.itl.enqueue(h)\n\treturn l.originateStream(str)\n}\n\nfunc (l *loopyWriter) originateStream(str *outStream) error {\n\thdr := str.itl.dequeue().(*headerFrame)\n\tsendPing, err := hdr.initStream(str.id)\n\tif err != nil {\n\t\tif err == ErrConnClosing {\n\t\t\treturn err\n\t\t}\n\t\t// Other errors(errStreamDrain) need not close transport.\n\t\treturn nil\n\t}\n\tif err = l.writeHeader(str.id, hdr.endStream, hdr.hf, hdr.onWrite); err != nil {\n\t\treturn err\n\t}\n\tl.estdStreams[str.id] = str\n\tif sendPing {\n\t\treturn l.pingHandler(&ping{data: [8]byte{}})\n\t}\n\treturn nil\n}\n\nfunc (l *loopyWriter) writeHeader(streamID uint32, endStream bool, hf []hpack.HeaderField, onWrite func()) error {\n\tif onWrite != nil {\n\t\tonWrite()\n\t}\n\tl.hBuf.Reset()\n\tfor _, f := range hf {\n\t\tif err := l.hEnc.WriteField(f); err != nil {\n\t\t\twarningf(\"transport: loopyWriter.writeHeader encountered error while encoding headers:\", err)\n\t\t}\n\t}\n\tvar (\n\t\terr               error\n\t\tendHeaders, first bool\n\t)\n\tfirst = true\n\tfor !endHeaders {\n\t\tsize := l.hBuf.Len()\n\t\tif size > http2MaxFrameLen {\n\t\t\tsize = http2MaxFrameLen\n\t\t} else {\n\t\t\tendHeaders = true\n\t\t}\n\t\tif first {\n\t\t\tfirst = false\n\t\t\terr = l.framer.fr.WriteHeaders(http2.HeadersFrameParam{\n\t\t\t\tStreamID:      streamID,\n\t\t\t\tBlockFragment: l.hBuf.Next(size),\n\t\t\t\tEndStream:     endStream,\n\t\t\t\tEndHeaders:    endHeaders,\n\t\t\t})\n\t\t} else {\n\t\t\terr = l.framer.fr.WriteContinuation(\n\t\t\t\tstreamID,\n\t\t\t\tendHeaders,\n\t\t\t\tl.hBuf.Next(size),\n\t\t\t)\n\t\t}\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (l *loopyWriter) preprocessData(df *dataFrame) error {\n\tstr, ok := l.estdStreams[df.streamID]\n\tif !ok {\n\t\treturn nil\n\t}\n\t// If we got data for a stream it means that\n\t// stream was originated and the headers were sent out.\n\tstr.itl.enqueue(df)\n\tif str.state == empty {\n\t\tstr.state = active\n\t\tl.activeStreams.enqueue(str)\n\t}\n\treturn nil\n}\n\nfunc (l *loopyWriter) pingHandler(p *ping) error {\n\tif !p.ack {\n\t\tl.bdpEst.timesnap(p.data)\n\t}\n\treturn l.framer.fr.WritePing(p.ack, p.data)\n\n}\n\nfunc (l *loopyWriter) outFlowControlSizeRequestHandler(o *outFlowControlSizeRequest) error {\n\to.resp <- l.sendQuota\n\treturn nil\n}\n\nfunc (l *loopyWriter) cleanupStreamHandler(c *cleanupStream) error {\n\tc.onWrite()\n\tif str, ok := l.estdStreams[c.streamID]; ok {\n\t\t// On the server side it could be a trailers-only response or\n\t\t// a RST_STREAM before stream initialization thus the stream might\n\t\t// not be established yet.\n\t\tdelete(l.estdStreams, c.streamID)\n\t\tstr.deleteSelf()\n\t}\n\tif c.rst { // If RST_STREAM needs to be sent.\n\t\tif err := l.framer.fr.WriteRSTStream(c.streamID, c.rstCode); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tif l.side == clientSide && l.draining && len(l.estdStreams) == 0 {\n\t\treturn ErrConnClosing\n\t}\n\treturn nil\n}\n\nfunc (l *loopyWriter) incomingGoAwayHandler(*incomingGoAway) error {\n\tif l.side == clientSide {\n\t\tl.draining = true\n\t\tif len(l.estdStreams) == 0 {\n\t\t\treturn ErrConnClosing\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (l *loopyWriter) goAwayHandler(g *goAway) error {\n\t// Handling of outgoing GoAway is very specific to side.\n\tif l.ssGoAwayHandler != nil {\n\t\tdraining, err := l.ssGoAwayHandler(g)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tl.draining = draining\n\t}\n\treturn nil\n}\n\nfunc (l *loopyWriter) handle(i interface{}) error {\n\tswitch i := i.(type) {\n\tcase *incomingWindowUpdate:\n\t\treturn l.incomingWindowUpdateHandler(i)\n\tcase *outgoingWindowUpdate:\n\t\treturn l.outgoingWindowUpdateHandler(i)\n\tcase *incomingSettings:\n\t\treturn l.incomingSettingsHandler(i)\n\tcase *outgoingSettings:\n\t\treturn l.outgoingSettingsHandler(i)\n\tcase *headerFrame:\n\t\treturn l.headerHandler(i)\n\tcase *registerStream:\n\t\treturn l.registerStreamHandler(i)\n\tcase *cleanupStream:\n\t\treturn l.cleanupStreamHandler(i)\n\tcase *incomingGoAway:\n\t\treturn l.incomingGoAwayHandler(i)\n\tcase *dataFrame:\n\t\treturn l.preprocessData(i)\n\tcase *ping:\n\t\treturn l.pingHandler(i)\n\tcase *goAway:\n\t\treturn l.goAwayHandler(i)\n\tcase *outFlowControlSizeRequest:\n\t\treturn l.outFlowControlSizeRequestHandler(i)\n\tdefault:\n\t\treturn fmt.Errorf(\"transport: unknown control message type %T\", i)\n\t}\n}\n\nfunc (l *loopyWriter) applySettings(ss []http2.Setting) error {\n\tfor _, s := range ss {\n\t\tswitch s.ID {\n\t\tcase http2.SettingInitialWindowSize:\n\t\t\to := l.oiws\n\t\t\tl.oiws = s.Val\n\t\t\tif o < l.oiws {\n\t\t\t\t// If the new limit is greater make all depleted streams active.\n\t\t\t\tfor _, stream := range l.estdStreams {\n\t\t\t\t\tif stream.state == waitingOnStreamQuota {\n\t\t\t\t\t\tstream.state = active\n\t\t\t\t\t\tl.activeStreams.enqueue(stream)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\tcase http2.SettingHeaderTableSize:\n\t\t\tupdateHeaderTblSize(l.hEnc, s.Val)\n\t\t}\n\t}\n\treturn nil\n}\n\n// processData removes the first stream from active streams, writes out at most 16KB\n// of its data and then puts it at the end of activeStreams if there's still more data\n// to be sent and stream has some stream-level flow control.\nfunc (l *loopyWriter) processData() (bool, error) {\n\tif l.sendQuota == 0 {\n\t\treturn true, nil\n\t}\n\tstr := l.activeStreams.dequeue() // Remove the first stream.\n\tif str == nil {\n\t\treturn true, nil\n\t}\n\tdataItem := str.itl.peek().(*dataFrame) // Peek at the first data item this stream.\n\t// A data item is represented by a dataFrame, since it later translates into\n\t// multiple HTTP2 data frames.\n\t// Every dataFrame has two buffers; h that keeps grpc-message header and d that is acutal data.\n\t// As an optimization to keep wire traffic low, data from d is copied to h to make as big as the\n\t// maximum possilbe HTTP2 frame size.\n\n\tif len(dataItem.h) == 0 && len(dataItem.d) == 0 { // Empty data frame\n\t\t// Client sends out empty data frame with endStream = true\n\t\tif err := l.framer.fr.WriteData(dataItem.streamID, dataItem.endStream, nil); err != nil {\n\t\t\treturn false, err\n\t\t}\n\t\tstr.itl.dequeue() // remove the empty data item from stream\n\t\tif str.itl.isEmpty() {\n\t\t\tstr.state = empty\n\t\t} else if trailer, ok := str.itl.peek().(*headerFrame); ok { // the next item is trailers.\n\t\t\tif err := l.writeHeader(trailer.streamID, trailer.endStream, trailer.hf, trailer.onWrite); err != nil {\n\t\t\t\treturn false, err\n\t\t\t}\n\t\t\tif err := l.cleanupStreamHandler(trailer.cleanup); err != nil {\n\t\t\t\treturn false, nil\n\t\t\t}\n\t\t} else {\n\t\t\tl.activeStreams.enqueue(str)\n\t\t}\n\t\treturn false, nil\n\t}\n\tvar (\n\t\tidx int\n\t\tbuf []byte\n\t)\n\tif len(dataItem.h) != 0 { // data header has not been written out yet.\n\t\tbuf = dataItem.h\n\t} else {\n\t\tidx = 1\n\t\tbuf = dataItem.d\n\t}\n\tsize := http2MaxFrameLen\n\tif len(buf) < size {\n\t\tsize = len(buf)\n\t}\n\tif strQuota := int(l.oiws) - str.bytesOutStanding; strQuota <= 0 { // stream-level flow control.\n\t\tstr.state = waitingOnStreamQuota\n\t\treturn false, nil\n\t} else if strQuota < size {\n\t\tsize = strQuota\n\t}\n\n\tif l.sendQuota < uint32(size) { // connection-level flow control.\n\t\tsize = int(l.sendQuota)\n\t}\n\t// Now that outgoing flow controls are checked we can replenish str's write quota\n\tstr.wq.replenish(size)\n\tvar endStream bool\n\t// If this is the last data message on this stream and all of it can be written in this iteration.\n\tif dataItem.endStream && size == len(buf) {\n\t\t// buf contains either data or it contains header but data is empty.\n\t\tif idx == 1 || len(dataItem.d) == 0 {\n\t\t\tendStream = true\n\t\t}\n\t}\n\tif dataItem.onEachWrite != nil {\n\t\tdataItem.onEachWrite()\n\t}\n\tif err := l.framer.fr.WriteData(dataItem.streamID, endStream, buf[:size]); err != nil {\n\t\treturn false, err\n\t}\n\tbuf = buf[size:]\n\tstr.bytesOutStanding += size\n\tl.sendQuota -= uint32(size)\n\tif idx == 0 {\n\t\tdataItem.h = buf\n\t} else {\n\t\tdataItem.d = buf\n\t}\n\n\tif len(dataItem.h) == 0 && len(dataItem.d) == 0 { // All the data from that message was written out.\n\t\tstr.itl.dequeue()\n\t}\n\tif str.itl.isEmpty() {\n\t\tstr.state = empty\n\t} else if trailer, ok := str.itl.peek().(*headerFrame); ok { // The next item is trailers.\n\t\tif err := l.writeHeader(trailer.streamID, trailer.endStream, trailer.hf, trailer.onWrite); err != nil {\n\t\t\treturn false, err\n\t\t}\n\t\tif err := l.cleanupStreamHandler(trailer.cleanup); err != nil {\n\t\t\treturn false, err\n\t\t}\n\t} else if int(l.oiws)-str.bytesOutStanding <= 0 { // Ran out of stream quota.\n\t\tstr.state = waitingOnStreamQuota\n\t} else { // Otherwise add it back to the list of active streams.\n\t\tl.activeStreams.enqueue(str)\n\t}\n\treturn false, nil\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/internal/transport/defaults.go",
    "content": "/*\n *\n * Copyright 2018 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\npackage transport\n\nimport (\n\t\"math\"\n\t\"time\"\n)\n\nconst (\n\t// The default value of flow control window size in HTTP2 spec.\n\tdefaultWindowSize = 65535\n\t// The initial window size for flow control.\n\tinitialWindowSize             = defaultWindowSize // for an RPC\n\tinfinity                      = time.Duration(math.MaxInt64)\n\tdefaultClientKeepaliveTime    = infinity\n\tdefaultClientKeepaliveTimeout = 20 * time.Second\n\tdefaultMaxStreamsClient       = 100\n\tdefaultMaxConnectionIdle      = infinity\n\tdefaultMaxConnectionAge       = infinity\n\tdefaultMaxConnectionAgeGrace  = infinity\n\tdefaultServerKeepaliveTime    = 2 * time.Hour\n\tdefaultServerKeepaliveTimeout = 20 * time.Second\n\tdefaultKeepalivePolicyMinTime = 5 * time.Minute\n\t// max window limit set by HTTP2 Specs.\n\tmaxWindowSize = math.MaxInt32\n\t// defaultWriteQuota is the default value for number of data\n\t// bytes that each stream can schedule before some of it being\n\t// flushed out.\n\tdefaultWriteQuota              = 64 * 1024\n\tdefaultClientMaxHeaderListSize = uint32(16 << 20)\n\tdefaultServerMaxHeaderListSize = uint32(16 << 20)\n)\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/internal/transport/flowcontrol.go",
    "content": "/*\n *\n * Copyright 2014 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\npackage transport\n\nimport (\n\t\"fmt\"\n\t\"math\"\n\t\"sync\"\n\t\"sync/atomic\"\n)\n\n// writeQuota is a soft limit on the amount of data a stream can\n// schedule before some of it is written out.\ntype writeQuota struct {\n\tquota int32\n\t// get waits on read from when quota goes less than or equal to zero.\n\t// replenish writes on it when quota goes positive again.\n\tch chan struct{}\n\t// done is triggered in error case.\n\tdone <-chan struct{}\n\t// replenish is called by loopyWriter to give quota back to.\n\t// It is implemented as a field so that it can be updated\n\t// by tests.\n\treplenish func(n int)\n}\n\nfunc newWriteQuota(sz int32, done <-chan struct{}) *writeQuota {\n\tw := &writeQuota{\n\t\tquota: sz,\n\t\tch:    make(chan struct{}, 1),\n\t\tdone:  done,\n\t}\n\tw.replenish = w.realReplenish\n\treturn w\n}\n\nfunc (w *writeQuota) get(sz int32) error {\n\tfor {\n\t\tif atomic.LoadInt32(&w.quota) > 0 {\n\t\t\tatomic.AddInt32(&w.quota, -sz)\n\t\t\treturn nil\n\t\t}\n\t\tselect {\n\t\tcase <-w.ch:\n\t\t\tcontinue\n\t\tcase <-w.done:\n\t\t\treturn errStreamDone\n\t\t}\n\t}\n}\n\nfunc (w *writeQuota) realReplenish(n int) {\n\tsz := int32(n)\n\ta := atomic.AddInt32(&w.quota, sz)\n\tb := a - sz\n\tif b <= 0 && a > 0 {\n\t\tselect {\n\t\tcase w.ch <- struct{}{}:\n\t\tdefault:\n\t\t}\n\t}\n}\n\ntype trInFlow struct {\n\tlimit               uint32\n\tunacked             uint32\n\teffectiveWindowSize uint32\n}\n\nfunc (f *trInFlow) newLimit(n uint32) uint32 {\n\td := n - f.limit\n\tf.limit = n\n\tf.updateEffectiveWindowSize()\n\treturn d\n}\n\nfunc (f *trInFlow) onData(n uint32) uint32 {\n\tf.unacked += n\n\tif f.unacked >= f.limit/4 {\n\t\tw := f.unacked\n\t\tf.unacked = 0\n\t\tf.updateEffectiveWindowSize()\n\t\treturn w\n\t}\n\tf.updateEffectiveWindowSize()\n\treturn 0\n}\n\nfunc (f *trInFlow) reset() uint32 {\n\tw := f.unacked\n\tf.unacked = 0\n\tf.updateEffectiveWindowSize()\n\treturn w\n}\n\nfunc (f *trInFlow) updateEffectiveWindowSize() {\n\tatomic.StoreUint32(&f.effectiveWindowSize, f.limit-f.unacked)\n}\n\nfunc (f *trInFlow) getSize() uint32 {\n\treturn atomic.LoadUint32(&f.effectiveWindowSize)\n}\n\n// TODO(mmukhi): Simplify this code.\n// inFlow deals with inbound flow control\ntype inFlow struct {\n\tmu sync.Mutex\n\t// The inbound flow control limit for pending data.\n\tlimit uint32\n\t// pendingData is the overall data which have been received but not been\n\t// consumed by applications.\n\tpendingData uint32\n\t// The amount of data the application has consumed but grpc has not sent\n\t// window update for them. Used to reduce window update frequency.\n\tpendingUpdate uint32\n\t// delta is the extra window update given by receiver when an application\n\t// is reading data bigger in size than the inFlow limit.\n\tdelta uint32\n}\n\n// newLimit updates the inflow window to a new value n.\n// It assumes that n is always greater than the old limit.\nfunc (f *inFlow) newLimit(n uint32) uint32 {\n\tf.mu.Lock()\n\td := n - f.limit\n\tf.limit = n\n\tf.mu.Unlock()\n\treturn d\n}\n\nfunc (f *inFlow) maybeAdjust(n uint32) uint32 {\n\tif n > uint32(math.MaxInt32) {\n\t\tn = uint32(math.MaxInt32)\n\t}\n\tf.mu.Lock()\n\t// estSenderQuota is the receiver's view of the maximum number of bytes the sender\n\t// can send without a window update.\n\testSenderQuota := int32(f.limit - (f.pendingData + f.pendingUpdate))\n\t// estUntransmittedData is the maximum number of bytes the sends might not have put\n\t// on the wire yet. A value of 0 or less means that we have already received all or\n\t// more bytes than the application is requesting to read.\n\testUntransmittedData := int32(n - f.pendingData) // Casting into int32 since it could be negative.\n\t// This implies that unless we send a window update, the sender won't be able to send all the bytes\n\t// for this message. Therefore we must send an update over the limit since there's an active read\n\t// request from the application.\n\tif estUntransmittedData > estSenderQuota {\n\t\t// Sender's window shouldn't go more than 2^31 - 1 as specified in the HTTP spec.\n\t\tif f.limit+n > maxWindowSize {\n\t\t\tf.delta = maxWindowSize - f.limit\n\t\t} else {\n\t\t\t// Send a window update for the whole message and not just the difference between\n\t\t\t// estUntransmittedData and estSenderQuota. This will be helpful in case the message\n\t\t\t// is padded; We will fallback on the current available window(at least a 1/4th of the limit).\n\t\t\tf.delta = n\n\t\t}\n\t\tf.mu.Unlock()\n\t\treturn f.delta\n\t}\n\tf.mu.Unlock()\n\treturn 0\n}\n\n// onData is invoked when some data frame is received. It updates pendingData.\nfunc (f *inFlow) onData(n uint32) error {\n\tf.mu.Lock()\n\tf.pendingData += n\n\tif f.pendingData+f.pendingUpdate > f.limit+f.delta {\n\t\tlimit := f.limit\n\t\trcvd := f.pendingData + f.pendingUpdate\n\t\tf.mu.Unlock()\n\t\treturn fmt.Errorf(\"received %d-bytes data exceeding the limit %d bytes\", rcvd, limit)\n\t}\n\tf.mu.Unlock()\n\treturn nil\n}\n\n// onRead is invoked when the application reads the data. It returns the window size\n// to be sent to the peer.\nfunc (f *inFlow) onRead(n uint32) uint32 {\n\tf.mu.Lock()\n\tif f.pendingData == 0 {\n\t\tf.mu.Unlock()\n\t\treturn 0\n\t}\n\tf.pendingData -= n\n\tif n > f.delta {\n\t\tn -= f.delta\n\t\tf.delta = 0\n\t} else {\n\t\tf.delta -= n\n\t\tn = 0\n\t}\n\tf.pendingUpdate += n\n\tif f.pendingUpdate >= f.limit/4 {\n\t\twu := f.pendingUpdate\n\t\tf.pendingUpdate = 0\n\t\tf.mu.Unlock()\n\t\treturn wu\n\t}\n\tf.mu.Unlock()\n\treturn 0\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/internal/transport/handler_server.go",
    "content": "/*\n *\n * Copyright 2016 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n// This file is the implementation of a gRPC server using HTTP/2 which\n// uses the standard Go http2 Server implementation (via the\n// http.Handler interface), rather than speaking low-level HTTP/2\n// frames itself. It is the implementation of *grpc.Server.ServeHTTP.\n\npackage transport\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net\"\n\t\"net/http\"\n\t\"strings\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/golang/protobuf/proto\"\n\t\"golang.org/x/net/http2\"\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/credentials\"\n\t\"google.golang.org/grpc/metadata\"\n\t\"google.golang.org/grpc/peer\"\n\t\"google.golang.org/grpc/stats\"\n\t\"google.golang.org/grpc/status\"\n)\n\n// NewServerHandlerTransport returns a ServerTransport handling gRPC\n// from inside an http.Handler. It requires that the http Server\n// supports HTTP/2.\nfunc NewServerHandlerTransport(w http.ResponseWriter, r *http.Request, stats stats.Handler) (ServerTransport, error) {\n\tif r.ProtoMajor != 2 {\n\t\treturn nil, errors.New(\"gRPC requires HTTP/2\")\n\t}\n\tif r.Method != \"POST\" {\n\t\treturn nil, errors.New(\"invalid gRPC request method\")\n\t}\n\tcontentType := r.Header.Get(\"Content-Type\")\n\t// TODO: do we assume contentType is lowercase? we did before\n\tcontentSubtype, validContentType := contentSubtype(contentType)\n\tif !validContentType {\n\t\treturn nil, errors.New(\"invalid gRPC request content-type\")\n\t}\n\tif _, ok := w.(http.Flusher); !ok {\n\t\treturn nil, errors.New(\"gRPC requires a ResponseWriter supporting http.Flusher\")\n\t}\n\n\tst := &serverHandlerTransport{\n\t\trw:             w,\n\t\treq:            r,\n\t\tclosedCh:       make(chan struct{}),\n\t\twrites:         make(chan func()),\n\t\tcontentType:    contentType,\n\t\tcontentSubtype: contentSubtype,\n\t\tstats:          stats,\n\t}\n\n\tif v := r.Header.Get(\"grpc-timeout\"); v != \"\" {\n\t\tto, err := decodeTimeout(v)\n\t\tif err != nil {\n\t\t\treturn nil, status.Errorf(codes.Internal, \"malformed time-out: %v\", err)\n\t\t}\n\t\tst.timeoutSet = true\n\t\tst.timeout = to\n\t}\n\n\tmetakv := []string{\"content-type\", contentType}\n\tif r.Host != \"\" {\n\t\tmetakv = append(metakv, \":authority\", r.Host)\n\t}\n\tfor k, vv := range r.Header {\n\t\tk = strings.ToLower(k)\n\t\tif isReservedHeader(k) && !isWhitelistedHeader(k) {\n\t\t\tcontinue\n\t\t}\n\t\tfor _, v := range vv {\n\t\t\tv, err := decodeMetadataHeader(k, v)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, status.Errorf(codes.Internal, \"malformed binary metadata: %v\", err)\n\t\t\t}\n\t\t\tmetakv = append(metakv, k, v)\n\t\t}\n\t}\n\tst.headerMD = metadata.Pairs(metakv...)\n\n\treturn st, nil\n}\n\n// serverHandlerTransport is an implementation of ServerTransport\n// which replies to exactly one gRPC request (exactly one HTTP request),\n// using the net/http.Handler interface. This http.Handler is guaranteed\n// at this point to be speaking over HTTP/2, so it's able to speak valid\n// gRPC.\ntype serverHandlerTransport struct {\n\trw               http.ResponseWriter\n\treq              *http.Request\n\ttimeoutSet       bool\n\ttimeout          time.Duration\n\tdidCommonHeaders bool\n\n\theaderMD metadata.MD\n\n\tcloseOnce sync.Once\n\tclosedCh  chan struct{} // closed on Close\n\n\t// writes is a channel of code to run serialized in the\n\t// ServeHTTP (HandleStreams) goroutine. The channel is closed\n\t// when WriteStatus is called.\n\twrites chan func()\n\n\t// block concurrent WriteStatus calls\n\t// e.g. grpc/(*serverStream).SendMsg/RecvMsg\n\twriteStatusMu sync.Mutex\n\n\t// we just mirror the request content-type\n\tcontentType string\n\t// we store both contentType and contentSubtype so we don't keep recreating them\n\t// TODO make sure this is consistent across handler_server and http2_server\n\tcontentSubtype string\n\n\tstats stats.Handler\n}\n\nfunc (ht *serverHandlerTransport) Close() error {\n\tht.closeOnce.Do(ht.closeCloseChanOnce)\n\treturn nil\n}\n\nfunc (ht *serverHandlerTransport) closeCloseChanOnce() { close(ht.closedCh) }\n\nfunc (ht *serverHandlerTransport) RemoteAddr() net.Addr { return strAddr(ht.req.RemoteAddr) }\n\n// strAddr is a net.Addr backed by either a TCP \"ip:port\" string, or\n// the empty string if unknown.\ntype strAddr string\n\nfunc (a strAddr) Network() string {\n\tif a != \"\" {\n\t\t// Per the documentation on net/http.Request.RemoteAddr, if this is\n\t\t// set, it's set to the IP:port of the peer (hence, TCP):\n\t\t// https://golang.org/pkg/net/http/#Request\n\t\t//\n\t\t// If we want to support Unix sockets later, we can\n\t\t// add our own grpc-specific convention within the\n\t\t// grpc codebase to set RemoteAddr to a different\n\t\t// format, or probably better: we can attach it to the\n\t\t// context and use that from serverHandlerTransport.RemoteAddr.\n\t\treturn \"tcp\"\n\t}\n\treturn \"\"\n}\n\nfunc (a strAddr) String() string { return string(a) }\n\n// do runs fn in the ServeHTTP goroutine.\nfunc (ht *serverHandlerTransport) do(fn func()) error {\n\tselect {\n\tcase <-ht.closedCh:\n\t\treturn ErrConnClosing\n\tcase ht.writes <- fn:\n\t\treturn nil\n\t}\n}\n\nfunc (ht *serverHandlerTransport) WriteStatus(s *Stream, st *status.Status) error {\n\tht.writeStatusMu.Lock()\n\tdefer ht.writeStatusMu.Unlock()\n\n\terr := ht.do(func() {\n\t\tht.writeCommonHeaders(s)\n\n\t\t// And flush, in case no header or body has been sent yet.\n\t\t// This forces a separation of headers and trailers if this is the\n\t\t// first call (for example, in end2end tests's TestNoService).\n\t\tht.rw.(http.Flusher).Flush()\n\n\t\th := ht.rw.Header()\n\t\th.Set(\"Grpc-Status\", fmt.Sprintf(\"%d\", st.Code()))\n\t\tif m := st.Message(); m != \"\" {\n\t\t\th.Set(\"Grpc-Message\", encodeGrpcMessage(m))\n\t\t}\n\n\t\tif p := st.Proto(); p != nil && len(p.Details) > 0 {\n\t\t\tstBytes, err := proto.Marshal(p)\n\t\t\tif err != nil {\n\t\t\t\t// TODO: return error instead, when callers are able to handle it.\n\t\t\t\tpanic(err)\n\t\t\t}\n\n\t\t\th.Set(\"Grpc-Status-Details-Bin\", encodeBinHeader(stBytes))\n\t\t}\n\n\t\tif md := s.Trailer(); len(md) > 0 {\n\t\t\tfor k, vv := range md {\n\t\t\t\t// Clients don't tolerate reading restricted headers after some non restricted ones were sent.\n\t\t\t\tif isReservedHeader(k) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tfor _, v := range vv {\n\t\t\t\t\t// http2 ResponseWriter mechanism to send undeclared Trailers after\n\t\t\t\t\t// the headers have possibly been written.\n\t\t\t\t\th.Add(http2.TrailerPrefix+k, encodeMetadataHeader(k, v))\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t})\n\n\tif err == nil { // transport has not been closed\n\t\tif ht.stats != nil {\n\t\t\tht.stats.HandleRPC(s.Context(), &stats.OutTrailer{})\n\t\t}\n\t}\n\tht.Close()\n\treturn err\n}\n\n// writeCommonHeaders sets common headers on the first write\n// call (Write, WriteHeader, or WriteStatus).\nfunc (ht *serverHandlerTransport) writeCommonHeaders(s *Stream) {\n\tif ht.didCommonHeaders {\n\t\treturn\n\t}\n\tht.didCommonHeaders = true\n\n\th := ht.rw.Header()\n\th[\"Date\"] = nil // suppress Date to make tests happy; TODO: restore\n\th.Set(\"Content-Type\", ht.contentType)\n\n\t// Predeclare trailers we'll set later in WriteStatus (after the body).\n\t// This is a SHOULD in the HTTP RFC, and the way you add (known)\n\t// Trailers per the net/http.ResponseWriter contract.\n\t// See https://golang.org/pkg/net/http/#ResponseWriter\n\t// and https://golang.org/pkg/net/http/#example_ResponseWriter_trailers\n\th.Add(\"Trailer\", \"Grpc-Status\")\n\th.Add(\"Trailer\", \"Grpc-Message\")\n\th.Add(\"Trailer\", \"Grpc-Status-Details-Bin\")\n\n\tif s.sendCompress != \"\" {\n\t\th.Set(\"Grpc-Encoding\", s.sendCompress)\n\t}\n}\n\nfunc (ht *serverHandlerTransport) Write(s *Stream, hdr []byte, data []byte, opts *Options) error {\n\treturn ht.do(func() {\n\t\tht.writeCommonHeaders(s)\n\t\tht.rw.Write(hdr)\n\t\tht.rw.Write(data)\n\t\tht.rw.(http.Flusher).Flush()\n\t})\n}\n\nfunc (ht *serverHandlerTransport) WriteHeader(s *Stream, md metadata.MD) error {\n\terr := ht.do(func() {\n\t\tht.writeCommonHeaders(s)\n\t\th := ht.rw.Header()\n\t\tfor k, vv := range md {\n\t\t\t// Clients don't tolerate reading restricted headers after some non restricted ones were sent.\n\t\t\tif isReservedHeader(k) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tfor _, v := range vv {\n\t\t\t\tv = encodeMetadataHeader(k, v)\n\t\t\t\th.Add(k, v)\n\t\t\t}\n\t\t}\n\t\tht.rw.WriteHeader(200)\n\t\tht.rw.(http.Flusher).Flush()\n\t})\n\n\tif err == nil {\n\t\tif ht.stats != nil {\n\t\t\tht.stats.HandleRPC(s.Context(), &stats.OutHeader{})\n\t\t}\n\t}\n\treturn err\n}\n\nfunc (ht *serverHandlerTransport) HandleStreams(startStream func(*Stream), traceCtx func(context.Context, string) context.Context) {\n\t// With this transport type there will be exactly 1 stream: this HTTP request.\n\n\tctx := ht.req.Context()\n\tvar cancel context.CancelFunc\n\tif ht.timeoutSet {\n\t\tctx, cancel = context.WithTimeout(ctx, ht.timeout)\n\t} else {\n\t\tctx, cancel = context.WithCancel(ctx)\n\t}\n\n\t// requestOver is closed when the status has been written via WriteStatus.\n\trequestOver := make(chan struct{})\n\tgo func() {\n\t\tselect {\n\t\tcase <-requestOver:\n\t\tcase <-ht.closedCh:\n\t\tcase <-ht.req.Context().Done():\n\t\t}\n\t\tcancel()\n\t\tht.Close()\n\t}()\n\n\treq := ht.req\n\n\ts := &Stream{\n\t\tid:             0, // irrelevant\n\t\trequestRead:    func(int) {},\n\t\tcancel:         cancel,\n\t\tbuf:            newRecvBuffer(),\n\t\tst:             ht,\n\t\tmethod:         req.URL.Path,\n\t\trecvCompress:   req.Header.Get(\"grpc-encoding\"),\n\t\tcontentSubtype: ht.contentSubtype,\n\t}\n\tpr := &peer.Peer{\n\t\tAddr: ht.RemoteAddr(),\n\t}\n\tif req.TLS != nil {\n\t\tpr.AuthInfo = credentials.TLSInfo{State: *req.TLS}\n\t}\n\tctx = metadata.NewIncomingContext(ctx, ht.headerMD)\n\ts.ctx = peer.NewContext(ctx, pr)\n\tif ht.stats != nil {\n\t\ts.ctx = ht.stats.TagRPC(s.ctx, &stats.RPCTagInfo{FullMethodName: s.method})\n\t\tinHeader := &stats.InHeader{\n\t\t\tFullMethod:  s.method,\n\t\t\tRemoteAddr:  ht.RemoteAddr(),\n\t\t\tCompression: s.recvCompress,\n\t\t}\n\t\tht.stats.HandleRPC(s.ctx, inHeader)\n\t}\n\ts.trReader = &transportReader{\n\t\treader:        &recvBufferReader{ctx: s.ctx, ctxDone: s.ctx.Done(), recv: s.buf},\n\t\twindowHandler: func(int) {},\n\t}\n\n\t// readerDone is closed when the Body.Read-ing goroutine exits.\n\treaderDone := make(chan struct{})\n\tgo func() {\n\t\tdefer close(readerDone)\n\n\t\t// TODO: minimize garbage, optimize recvBuffer code/ownership\n\t\tconst readSize = 8196\n\t\tfor buf := make([]byte, readSize); ; {\n\t\t\tn, err := req.Body.Read(buf)\n\t\t\tif n > 0 {\n\t\t\t\ts.buf.put(recvMsg{data: buf[:n:n]})\n\t\t\t\tbuf = buf[n:]\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\ts.buf.put(recvMsg{err: mapRecvMsgError(err)})\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif len(buf) == 0 {\n\t\t\t\tbuf = make([]byte, readSize)\n\t\t\t}\n\t\t}\n\t}()\n\n\t// startStream is provided by the *grpc.Server's serveStreams.\n\t// It starts a goroutine serving s and exits immediately.\n\t// The goroutine that is started is the one that then calls\n\t// into ht, calling WriteHeader, Write, WriteStatus, Close, etc.\n\tstartStream(s)\n\n\tht.runStream()\n\tclose(requestOver)\n\n\t// Wait for reading goroutine to finish.\n\treq.Body.Close()\n\t<-readerDone\n}\n\nfunc (ht *serverHandlerTransport) runStream() {\n\tfor {\n\t\tselect {\n\t\tcase fn := <-ht.writes:\n\t\t\tfn()\n\t\tcase <-ht.closedCh:\n\t\t\treturn\n\t\t}\n\t}\n}\n\nfunc (ht *serverHandlerTransport) IncrMsgSent() {}\n\nfunc (ht *serverHandlerTransport) IncrMsgRecv() {}\n\nfunc (ht *serverHandlerTransport) Drain() {\n\tpanic(\"Drain() is not implemented\")\n}\n\n// mapRecvMsgError returns the non-nil err into the appropriate\n// error value as expected by callers of *grpc.parser.recvMsg.\n// In particular, in can only be:\n//   * io.EOF\n//   * io.ErrUnexpectedEOF\n//   * of type transport.ConnectionError\n//   * an error from the status package\nfunc mapRecvMsgError(err error) error {\n\tif err == io.EOF || err == io.ErrUnexpectedEOF {\n\t\treturn err\n\t}\n\tif se, ok := err.(http2.StreamError); ok {\n\t\tif code, ok := http2ErrConvTab[se.Code]; ok {\n\t\t\treturn status.Error(code, se.Error())\n\t\t}\n\t}\n\tif strings.Contains(err.Error(), \"body closed by handler\") {\n\t\treturn status.Error(codes.Canceled, err.Error())\n\t}\n\treturn connectionErrorf(true, err, err.Error())\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/internal/transport/http2_client.go",
    "content": "/*\n *\n * Copyright 2014 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\npackage transport\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"io\"\n\t\"math\"\n\t\"net\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\t\"sync/atomic\"\n\t\"time\"\n\n\t\"golang.org/x/net/http2\"\n\t\"golang.org/x/net/http2/hpack\"\n\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/credentials\"\n\t\"google.golang.org/grpc/internal/channelz\"\n\t\"google.golang.org/grpc/internal/syscall\"\n\t\"google.golang.org/grpc/keepalive\"\n\t\"google.golang.org/grpc/metadata\"\n\t\"google.golang.org/grpc/peer\"\n\t\"google.golang.org/grpc/stats\"\n\t\"google.golang.org/grpc/status\"\n)\n\n// http2Client implements the ClientTransport interface with HTTP2.\ntype http2Client struct {\n\tctx        context.Context\n\tcancel     context.CancelFunc\n\tctxDone    <-chan struct{} // Cache the ctx.Done() chan.\n\tuserAgent  string\n\tmd         interface{}\n\tconn       net.Conn // underlying communication channel\n\tloopy      *loopyWriter\n\tremoteAddr net.Addr\n\tlocalAddr  net.Addr\n\tauthInfo   credentials.AuthInfo // auth info about the connection\n\n\treaderDone chan struct{} // sync point to enable testing.\n\twriterDone chan struct{} // sync point to enable testing.\n\t// goAway is closed to notify the upper layer (i.e., addrConn.transportMonitor)\n\t// that the server sent GoAway on this transport.\n\tgoAway chan struct{}\n\t// awakenKeepalive is used to wake up keepalive when after it has gone dormant.\n\tawakenKeepalive chan struct{}\n\n\tframer *framer\n\t// controlBuf delivers all the control related tasks (e.g., window\n\t// updates, reset streams, and various settings) to the controller.\n\tcontrolBuf *controlBuffer\n\tfc         *trInFlow\n\t// The scheme used: https if TLS is on, http otherwise.\n\tscheme string\n\n\tisSecure bool\n\n\tperRPCCreds []credentials.PerRPCCredentials\n\n\t// Boolean to keep track of reading activity on transport.\n\t// 1 is true and 0 is false.\n\tactivity         uint32 // Accessed atomically.\n\tkp               keepalive.ClientParameters\n\tkeepaliveEnabled bool\n\n\tstatsHandler stats.Handler\n\n\tinitialWindowSize int32\n\n\t// configured by peer through SETTINGS_MAX_HEADER_LIST_SIZE\n\tmaxSendHeaderListSize *uint32\n\n\tbdpEst *bdpEstimator\n\t// onPrefaceReceipt is a callback that client transport calls upon\n\t// receiving server preface to signal that a succefull HTTP2\n\t// connection was established.\n\tonPrefaceReceipt func()\n\n\tmaxConcurrentStreams  uint32\n\tstreamQuota           int64\n\tstreamsQuotaAvailable chan struct{}\n\twaitingStreams        uint32\n\tnextID                uint32\n\n\tmu            sync.Mutex // guard the following variables\n\tstate         transportState\n\tactiveStreams map[uint32]*Stream\n\t// prevGoAway ID records the Last-Stream-ID in the previous GOAway frame.\n\tprevGoAwayID uint32\n\t// goAwayReason records the http2.ErrCode and debug data received with the\n\t// GoAway frame.\n\tgoAwayReason GoAwayReason\n\n\t// Fields below are for channelz metric collection.\n\tchannelzID int64 // channelz unique identification number\n\tczData     *channelzData\n\n\tonGoAway func(GoAwayReason)\n\tonClose  func()\n}\n\nfunc dial(ctx context.Context, fn func(context.Context, string) (net.Conn, error), addr string) (net.Conn, error) {\n\tif fn != nil {\n\t\treturn fn(ctx, addr)\n\t}\n\treturn (&net.Dialer{}).DialContext(ctx, \"tcp\", addr)\n}\n\nfunc isTemporary(err error) bool {\n\tswitch err := err.(type) {\n\tcase interface {\n\t\tTemporary() bool\n\t}:\n\t\treturn err.Temporary()\n\tcase interface {\n\t\tTimeout() bool\n\t}:\n\t\t// Timeouts may be resolved upon retry, and are thus treated as\n\t\t// temporary.\n\t\treturn err.Timeout()\n\t}\n\treturn true\n}\n\n// newHTTP2Client constructs a connected ClientTransport to addr based on HTTP2\n// and starts to receive messages on it. Non-nil error returns if construction\n// fails.\nfunc newHTTP2Client(connectCtx, ctx context.Context, addr TargetInfo, opts ConnectOptions, onPrefaceReceipt func(), onGoAway func(GoAwayReason), onClose func()) (_ *http2Client, err error) {\n\tscheme := \"http\"\n\tctx, cancel := context.WithCancel(ctx)\n\tdefer func() {\n\t\tif err != nil {\n\t\t\tcancel()\n\t\t}\n\t}()\n\n\tconn, err := dial(connectCtx, opts.Dialer, addr.Addr)\n\tif err != nil {\n\t\tif opts.FailOnNonTempDialError {\n\t\t\treturn nil, connectionErrorf(isTemporary(err), err, \"transport: error while dialing: %v\", err)\n\t\t}\n\t\treturn nil, connectionErrorf(true, err, \"transport: Error while dialing %v\", err)\n\t}\n\t// Any further errors will close the underlying connection\n\tdefer func(conn net.Conn) {\n\t\tif err != nil {\n\t\t\tconn.Close()\n\t\t}\n\t}(conn)\n\tkp := opts.KeepaliveParams\n\t// Validate keepalive parameters.\n\tif kp.Time == 0 {\n\t\tkp.Time = defaultClientKeepaliveTime\n\t}\n\tif kp.Timeout == 0 {\n\t\tkp.Timeout = defaultClientKeepaliveTimeout\n\t}\n\tkeepaliveEnabled := false\n\tif kp.Time != infinity {\n\t\tif err = syscall.SetTCPUserTimeout(conn, kp.Timeout); err != nil {\n\t\t\treturn nil, connectionErrorf(false, err, \"transport: failed to set TCP_USER_TIMEOUT: %v\", err)\n\t\t}\n\t\tkeepaliveEnabled = true\n\t}\n\tvar (\n\t\tisSecure bool\n\t\tauthInfo credentials.AuthInfo\n\t)\n\ttransportCreds := opts.TransportCredentials\n\tperRPCCreds := opts.PerRPCCredentials\n\n\tif b := opts.CredsBundle; b != nil {\n\t\tif t := b.TransportCredentials(); t != nil {\n\t\t\ttransportCreds = t\n\t\t}\n\t\tif t := b.PerRPCCredentials(); t != nil {\n\t\t\tperRPCCreds = append(perRPCCreds, t)\n\t\t}\n\t}\n\tif transportCreds != nil {\n\t\tscheme = \"https\"\n\t\tconn, authInfo, err = transportCreds.ClientHandshake(connectCtx, addr.Authority, conn)\n\t\tif err != nil {\n\t\t\treturn nil, connectionErrorf(isTemporary(err), err, \"transport: authentication handshake failed: %v\", err)\n\t\t}\n\t\tisSecure = true\n\t}\n\tdynamicWindow := true\n\ticwz := int32(initialWindowSize)\n\tif opts.InitialConnWindowSize >= defaultWindowSize {\n\t\ticwz = opts.InitialConnWindowSize\n\t\tdynamicWindow = false\n\t}\n\twriteBufSize := opts.WriteBufferSize\n\treadBufSize := opts.ReadBufferSize\n\tmaxHeaderListSize := defaultClientMaxHeaderListSize\n\tif opts.MaxHeaderListSize != nil {\n\t\tmaxHeaderListSize = *opts.MaxHeaderListSize\n\t}\n\tt := &http2Client{\n\t\tctx:                   ctx,\n\t\tctxDone:               ctx.Done(), // Cache Done chan.\n\t\tcancel:                cancel,\n\t\tuserAgent:             opts.UserAgent,\n\t\tmd:                    addr.Metadata,\n\t\tconn:                  conn,\n\t\tremoteAddr:            conn.RemoteAddr(),\n\t\tlocalAddr:             conn.LocalAddr(),\n\t\tauthInfo:              authInfo,\n\t\treaderDone:            make(chan struct{}),\n\t\twriterDone:            make(chan struct{}),\n\t\tgoAway:                make(chan struct{}),\n\t\tawakenKeepalive:       make(chan struct{}, 1),\n\t\tframer:                newFramer(conn, writeBufSize, readBufSize, maxHeaderListSize),\n\t\tfc:                    &trInFlow{limit: uint32(icwz)},\n\t\tscheme:                scheme,\n\t\tactiveStreams:         make(map[uint32]*Stream),\n\t\tisSecure:              isSecure,\n\t\tperRPCCreds:           perRPCCreds,\n\t\tkp:                    kp,\n\t\tstatsHandler:          opts.StatsHandler,\n\t\tinitialWindowSize:     initialWindowSize,\n\t\tonPrefaceReceipt:      onPrefaceReceipt,\n\t\tnextID:                1,\n\t\tmaxConcurrentStreams:  defaultMaxStreamsClient,\n\t\tstreamQuota:           defaultMaxStreamsClient,\n\t\tstreamsQuotaAvailable: make(chan struct{}, 1),\n\t\tczData:                new(channelzData),\n\t\tonGoAway:              onGoAway,\n\t\tonClose:               onClose,\n\t\tkeepaliveEnabled:      keepaliveEnabled,\n\t}\n\tt.controlBuf = newControlBuffer(t.ctxDone)\n\tif opts.InitialWindowSize >= defaultWindowSize {\n\t\tt.initialWindowSize = opts.InitialWindowSize\n\t\tdynamicWindow = false\n\t}\n\tif dynamicWindow {\n\t\tt.bdpEst = &bdpEstimator{\n\t\t\tbdp:               initialWindowSize,\n\t\t\tupdateFlowControl: t.updateFlowControl,\n\t\t}\n\t}\n\t// Make sure awakenKeepalive can't be written upon.\n\t// keepalive routine will make it writable, if need be.\n\tt.awakenKeepalive <- struct{}{}\n\tif t.statsHandler != nil {\n\t\tt.ctx = t.statsHandler.TagConn(t.ctx, &stats.ConnTagInfo{\n\t\t\tRemoteAddr: t.remoteAddr,\n\t\t\tLocalAddr:  t.localAddr,\n\t\t})\n\t\tconnBegin := &stats.ConnBegin{\n\t\t\tClient: true,\n\t\t}\n\t\tt.statsHandler.HandleConn(t.ctx, connBegin)\n\t}\n\tif channelz.IsOn() {\n\t\tt.channelzID = channelz.RegisterNormalSocket(t, opts.ChannelzParentID, fmt.Sprintf(\"%s -> %s\", t.localAddr, t.remoteAddr))\n\t}\n\tif t.keepaliveEnabled {\n\t\tgo t.keepalive()\n\t}\n\t// Start the reader goroutine for incoming message. Each transport has\n\t// a dedicated goroutine which reads HTTP2 frame from network. Then it\n\t// dispatches the frame to the corresponding stream entity.\n\tgo t.reader()\n\n\t// Send connection preface to server.\n\tn, err := t.conn.Write(clientPreface)\n\tif err != nil {\n\t\tt.Close()\n\t\treturn nil, connectionErrorf(true, err, \"transport: failed to write client preface: %v\", err)\n\t}\n\tif n != len(clientPreface) {\n\t\tt.Close()\n\t\treturn nil, connectionErrorf(true, err, \"transport: preface mismatch, wrote %d bytes; want %d\", n, len(clientPreface))\n\t}\n\tvar ss []http2.Setting\n\n\tif t.initialWindowSize != defaultWindowSize {\n\t\tss = append(ss, http2.Setting{\n\t\t\tID:  http2.SettingInitialWindowSize,\n\t\t\tVal: uint32(t.initialWindowSize),\n\t\t})\n\t}\n\tif opts.MaxHeaderListSize != nil {\n\t\tss = append(ss, http2.Setting{\n\t\t\tID:  http2.SettingMaxHeaderListSize,\n\t\t\tVal: *opts.MaxHeaderListSize,\n\t\t})\n\t}\n\terr = t.framer.fr.WriteSettings(ss...)\n\tif err != nil {\n\t\tt.Close()\n\t\treturn nil, connectionErrorf(true, err, \"transport: failed to write initial settings frame: %v\", err)\n\t}\n\t// Adjust the connection flow control window if needed.\n\tif delta := uint32(icwz - defaultWindowSize); delta > 0 {\n\t\tif err := t.framer.fr.WriteWindowUpdate(0, delta); err != nil {\n\t\t\tt.Close()\n\t\t\treturn nil, connectionErrorf(true, err, \"transport: failed to write window update: %v\", err)\n\t\t}\n\t}\n\n\tif err := t.framer.writer.Flush(); err != nil {\n\t\treturn nil, err\n\t}\n\tgo func() {\n\t\tt.loopy = newLoopyWriter(clientSide, t.framer, t.controlBuf, t.bdpEst)\n\t\terr := t.loopy.run()\n\t\tif err != nil {\n\t\t\terrorf(\"transport: loopyWriter.run returning. Err: %v\", err)\n\t\t}\n\t\t// If it's a connection error, let reader goroutine handle it\n\t\t// since there might be data in the buffers.\n\t\tif _, ok := err.(net.Error); !ok {\n\t\t\tt.conn.Close()\n\t\t}\n\t\tclose(t.writerDone)\n\t}()\n\treturn t, nil\n}\n\nfunc (t *http2Client) newStream(ctx context.Context, callHdr *CallHdr) *Stream {\n\t// TODO(zhaoq): Handle uint32 overflow of Stream.id.\n\ts := &Stream{\n\t\tdone:           make(chan struct{}),\n\t\tmethod:         callHdr.Method,\n\t\tsendCompress:   callHdr.SendCompress,\n\t\tbuf:            newRecvBuffer(),\n\t\theaderChan:     make(chan struct{}),\n\t\tcontentSubtype: callHdr.ContentSubtype,\n\t}\n\ts.wq = newWriteQuota(defaultWriteQuota, s.done)\n\ts.requestRead = func(n int) {\n\t\tt.adjustWindow(s, uint32(n))\n\t}\n\t// The client side stream context should have exactly the same life cycle with the user provided context.\n\t// That means, s.ctx should be read-only. And s.ctx is done iff ctx is done.\n\t// So we use the original context here instead of creating a copy.\n\ts.ctx = ctx\n\ts.trReader = &transportReader{\n\t\treader: &recvBufferReader{\n\t\t\tctx:     s.ctx,\n\t\t\tctxDone: s.ctx.Done(),\n\t\t\trecv:    s.buf,\n\t\t\tcloseStream: func(err error) {\n\t\t\t\tt.CloseStream(s, err)\n\t\t\t},\n\t\t},\n\t\twindowHandler: func(n int) {\n\t\t\tt.updateWindow(s, uint32(n))\n\t\t},\n\t}\n\treturn s\n}\n\nfunc (t *http2Client) getPeer() *peer.Peer {\n\tpr := &peer.Peer{\n\t\tAddr: t.remoteAddr,\n\t}\n\t// Attach Auth info if there is any.\n\tif t.authInfo != nil {\n\t\tpr.AuthInfo = t.authInfo\n\t}\n\treturn pr\n}\n\nfunc (t *http2Client) createHeaderFields(ctx context.Context, callHdr *CallHdr) ([]hpack.HeaderField, error) {\n\taud := t.createAudience(callHdr)\n\tauthData, err := t.getTrAuthData(ctx, aud)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tcallAuthData, err := t.getCallAuthData(ctx, aud, callHdr)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\t// TODO(mmukhi): Benchmark if the performance gets better if count the metadata and other header fields\n\t// first and create a slice of that exact size.\n\t// Make the slice of certain predictable size to reduce allocations made by append.\n\thfLen := 7 // :method, :scheme, :path, :authority, content-type, user-agent, te\n\thfLen += len(authData) + len(callAuthData)\n\theaderFields := make([]hpack.HeaderField, 0, hfLen)\n\theaderFields = append(headerFields, hpack.HeaderField{Name: \":method\", Value: \"POST\"})\n\theaderFields = append(headerFields, hpack.HeaderField{Name: \":scheme\", Value: t.scheme})\n\theaderFields = append(headerFields, hpack.HeaderField{Name: \":path\", Value: callHdr.Method})\n\theaderFields = append(headerFields, hpack.HeaderField{Name: \":authority\", Value: callHdr.Host})\n\theaderFields = append(headerFields, hpack.HeaderField{Name: \"content-type\", Value: contentType(callHdr.ContentSubtype)})\n\theaderFields = append(headerFields, hpack.HeaderField{Name: \"user-agent\", Value: t.userAgent})\n\theaderFields = append(headerFields, hpack.HeaderField{Name: \"te\", Value: \"trailers\"})\n\tif callHdr.PreviousAttempts > 0 {\n\t\theaderFields = append(headerFields, hpack.HeaderField{Name: \"grpc-previous-rpc-attempts\", Value: strconv.Itoa(callHdr.PreviousAttempts)})\n\t}\n\n\tif callHdr.SendCompress != \"\" {\n\t\theaderFields = append(headerFields, hpack.HeaderField{Name: \"grpc-encoding\", Value: callHdr.SendCompress})\n\t}\n\tif dl, ok := ctx.Deadline(); ok {\n\t\t// Send out timeout regardless its value. The server can detect timeout context by itself.\n\t\t// TODO(mmukhi): Perhaps this field should be updated when actually writing out to the wire.\n\t\ttimeout := time.Until(dl)\n\t\theaderFields = append(headerFields, hpack.HeaderField{Name: \"grpc-timeout\", Value: encodeTimeout(timeout)})\n\t}\n\tfor k, v := range authData {\n\t\theaderFields = append(headerFields, hpack.HeaderField{Name: k, Value: encodeMetadataHeader(k, v)})\n\t}\n\tfor k, v := range callAuthData {\n\t\theaderFields = append(headerFields, hpack.HeaderField{Name: k, Value: encodeMetadataHeader(k, v)})\n\t}\n\tif b := stats.OutgoingTags(ctx); b != nil {\n\t\theaderFields = append(headerFields, hpack.HeaderField{Name: \"grpc-tags-bin\", Value: encodeBinHeader(b)})\n\t}\n\tif b := stats.OutgoingTrace(ctx); b != nil {\n\t\theaderFields = append(headerFields, hpack.HeaderField{Name: \"grpc-trace-bin\", Value: encodeBinHeader(b)})\n\t}\n\n\tif md, added, ok := metadata.FromOutgoingContextRaw(ctx); ok {\n\t\tvar k string\n\t\tfor _, vv := range added {\n\t\t\tfor i, v := range vv {\n\t\t\t\tif i%2 == 0 {\n\t\t\t\t\tk = v\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\t// HTTP doesn't allow you to set pseudoheaders after non pseudoheaders were set.\n\t\t\t\tif isReservedHeader(k) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\theaderFields = append(headerFields, hpack.HeaderField{Name: strings.ToLower(k), Value: encodeMetadataHeader(k, v)})\n\t\t\t}\n\t\t}\n\t\tfor k, vv := range md {\n\t\t\t// HTTP doesn't allow you to set pseudoheaders after non pseudoheaders were set.\n\t\t\tif isReservedHeader(k) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tfor _, v := range vv {\n\t\t\t\theaderFields = append(headerFields, hpack.HeaderField{Name: k, Value: encodeMetadataHeader(k, v)})\n\t\t\t}\n\t\t}\n\t}\n\tif md, ok := t.md.(*metadata.MD); ok {\n\t\tfor k, vv := range *md {\n\t\t\tif isReservedHeader(k) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tfor _, v := range vv {\n\t\t\t\theaderFields = append(headerFields, hpack.HeaderField{Name: k, Value: encodeMetadataHeader(k, v)})\n\t\t\t}\n\t\t}\n\t}\n\treturn headerFields, nil\n}\n\nfunc (t *http2Client) createAudience(callHdr *CallHdr) string {\n\t// Create an audience string only if needed.\n\tif len(t.perRPCCreds) == 0 && callHdr.Creds == nil {\n\t\treturn \"\"\n\t}\n\t// Construct URI required to get auth request metadata.\n\t// Omit port if it is the default one.\n\thost := strings.TrimSuffix(callHdr.Host, \":443\")\n\tpos := strings.LastIndex(callHdr.Method, \"/\")\n\tif pos == -1 {\n\t\tpos = len(callHdr.Method)\n\t}\n\treturn \"https://\" + host + callHdr.Method[:pos]\n}\n\nfunc (t *http2Client) getTrAuthData(ctx context.Context, audience string) (map[string]string, error) {\n\tauthData := map[string]string{}\n\tfor _, c := range t.perRPCCreds {\n\t\tdata, err := c.GetRequestMetadata(ctx, audience)\n\t\tif err != nil {\n\t\t\tif _, ok := status.FromError(err); ok {\n\t\t\t\treturn nil, err\n\t\t\t}\n\n\t\t\treturn nil, status.Errorf(codes.Unauthenticated, \"transport: %v\", err)\n\t\t}\n\t\tfor k, v := range data {\n\t\t\t// Capital header names are illegal in HTTP/2.\n\t\t\tk = strings.ToLower(k)\n\t\t\tauthData[k] = v\n\t\t}\n\t}\n\treturn authData, nil\n}\n\nfunc (t *http2Client) getCallAuthData(ctx context.Context, audience string, callHdr *CallHdr) (map[string]string, error) {\n\tcallAuthData := map[string]string{}\n\t// Check if credentials.PerRPCCredentials were provided via call options.\n\t// Note: if these credentials are provided both via dial options and call\n\t// options, then both sets of credentials will be applied.\n\tif callCreds := callHdr.Creds; callCreds != nil {\n\t\tif !t.isSecure && callCreds.RequireTransportSecurity() {\n\t\t\treturn nil, status.Error(codes.Unauthenticated, \"transport: cannot send secure credentials on an insecure connection\")\n\t\t}\n\t\tdata, err := callCreds.GetRequestMetadata(ctx, audience)\n\t\tif err != nil {\n\t\t\treturn nil, status.Errorf(codes.Internal, \"transport: %v\", err)\n\t\t}\n\t\tfor k, v := range data {\n\t\t\t// Capital header names are illegal in HTTP/2\n\t\t\tk = strings.ToLower(k)\n\t\t\tcallAuthData[k] = v\n\t\t}\n\t}\n\treturn callAuthData, nil\n}\n\n// NewStream creates a stream and registers it into the transport as \"active\"\n// streams.\nfunc (t *http2Client) NewStream(ctx context.Context, callHdr *CallHdr) (_ *Stream, err error) {\n\tctx = peer.NewContext(ctx, t.getPeer())\n\theaderFields, err := t.createHeaderFields(ctx, callHdr)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\ts := t.newStream(ctx, callHdr)\n\tcleanup := func(err error) {\n\t\tif s.swapState(streamDone) == streamDone {\n\t\t\t// If it was already done, return.\n\t\t\treturn\n\t\t}\n\t\t// The stream was unprocessed by the server.\n\t\tatomic.StoreUint32(&s.unprocessed, 1)\n\t\ts.write(recvMsg{err: err})\n\t\tclose(s.done)\n\t\t// If headerChan isn't closed, then close it.\n\t\tif atomic.CompareAndSwapUint32(&s.headerChanClosed, 0, 1) {\n\t\t\tclose(s.headerChan)\n\t\t}\n\n\t}\n\thdr := &headerFrame{\n\t\thf:        headerFields,\n\t\tendStream: false,\n\t\tinitStream: func(id uint32) (bool, error) {\n\t\t\tt.mu.Lock()\n\t\t\tif state := t.state; state != reachable {\n\t\t\t\tt.mu.Unlock()\n\t\t\t\t// Do a quick cleanup.\n\t\t\t\terr := error(errStreamDrain)\n\t\t\t\tif state == closing {\n\t\t\t\t\terr = ErrConnClosing\n\t\t\t\t}\n\t\t\t\tcleanup(err)\n\t\t\t\treturn false, err\n\t\t\t}\n\t\t\tt.activeStreams[id] = s\n\t\t\tif channelz.IsOn() {\n\t\t\t\tatomic.AddInt64(&t.czData.streamsStarted, 1)\n\t\t\t\tatomic.StoreInt64(&t.czData.lastStreamCreatedTime, time.Now().UnixNano())\n\t\t\t}\n\t\t\tvar sendPing bool\n\t\t\t// If the number of active streams change from 0 to 1, then check if keepalive\n\t\t\t// has gone dormant. If so, wake it up.\n\t\t\tif len(t.activeStreams) == 1 && t.keepaliveEnabled {\n\t\t\t\tselect {\n\t\t\t\tcase t.awakenKeepalive <- struct{}{}:\n\t\t\t\t\tsendPing = true\n\t\t\t\t\t// Fill the awakenKeepalive channel again as this channel must be\n\t\t\t\t\t// kept non-writable except at the point that the keepalive()\n\t\t\t\t\t// goroutine is waiting either to be awaken or shutdown.\n\t\t\t\t\tt.awakenKeepalive <- struct{}{}\n\t\t\t\tdefault:\n\t\t\t\t}\n\t\t\t}\n\t\t\tt.mu.Unlock()\n\t\t\treturn sendPing, nil\n\t\t},\n\t\tonOrphaned: cleanup,\n\t\twq:         s.wq,\n\t}\n\tfirstTry := true\n\tvar ch chan struct{}\n\tcheckForStreamQuota := func(it interface{}) bool {\n\t\tif t.streamQuota <= 0 { // Can go negative if server decreases it.\n\t\t\tif firstTry {\n\t\t\t\tt.waitingStreams++\n\t\t\t}\n\t\t\tch = t.streamsQuotaAvailable\n\t\t\treturn false\n\t\t}\n\t\tif !firstTry {\n\t\t\tt.waitingStreams--\n\t\t}\n\t\tt.streamQuota--\n\t\th := it.(*headerFrame)\n\t\th.streamID = t.nextID\n\t\tt.nextID += 2\n\t\ts.id = h.streamID\n\t\ts.fc = &inFlow{limit: uint32(t.initialWindowSize)}\n\t\tif t.streamQuota > 0 && t.waitingStreams > 0 {\n\t\t\tselect {\n\t\t\tcase t.streamsQuotaAvailable <- struct{}{}:\n\t\t\tdefault:\n\t\t\t}\n\t\t}\n\t\treturn true\n\t}\n\tvar hdrListSizeErr error\n\tcheckForHeaderListSize := func(it interface{}) bool {\n\t\tif t.maxSendHeaderListSize == nil {\n\t\t\treturn true\n\t\t}\n\t\thdrFrame := it.(*headerFrame)\n\t\tvar sz int64\n\t\tfor _, f := range hdrFrame.hf {\n\t\t\tif sz += int64(f.Size()); sz > int64(*t.maxSendHeaderListSize) {\n\t\t\t\thdrListSizeErr = status.Errorf(codes.Internal, \"header list size to send violates the maximum size (%d bytes) set by server\", *t.maxSendHeaderListSize)\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\treturn true\n\t}\n\tfor {\n\t\tsuccess, err := t.controlBuf.executeAndPut(func(it interface{}) bool {\n\t\t\tif !checkForStreamQuota(it) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif !checkForHeaderListSize(it) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn true\n\t\t}, hdr)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif success {\n\t\t\tbreak\n\t\t}\n\t\tif hdrListSizeErr != nil {\n\t\t\treturn nil, hdrListSizeErr\n\t\t}\n\t\tfirstTry = false\n\t\tselect {\n\t\tcase <-ch:\n\t\tcase <-s.ctx.Done():\n\t\t\treturn nil, ContextErr(s.ctx.Err())\n\t\tcase <-t.goAway:\n\t\t\treturn nil, errStreamDrain\n\t\tcase <-t.ctx.Done():\n\t\t\treturn nil, ErrConnClosing\n\t\t}\n\t}\n\tif t.statsHandler != nil {\n\t\toutHeader := &stats.OutHeader{\n\t\t\tClient:      true,\n\t\t\tFullMethod:  callHdr.Method,\n\t\t\tRemoteAddr:  t.remoteAddr,\n\t\t\tLocalAddr:   t.localAddr,\n\t\t\tCompression: callHdr.SendCompress,\n\t\t}\n\t\tt.statsHandler.HandleRPC(s.ctx, outHeader)\n\t}\n\treturn s, nil\n}\n\n// CloseStream clears the footprint of a stream when the stream is not needed any more.\n// This must not be executed in reader's goroutine.\nfunc (t *http2Client) CloseStream(s *Stream, err error) {\n\tvar (\n\t\trst     bool\n\t\trstCode http2.ErrCode\n\t)\n\tif err != nil {\n\t\trst = true\n\t\trstCode = http2.ErrCodeCancel\n\t}\n\tt.closeStream(s, err, rst, rstCode, status.Convert(err), nil, false)\n}\n\nfunc (t *http2Client) closeStream(s *Stream, err error, rst bool, rstCode http2.ErrCode, st *status.Status, mdata map[string][]string, eosReceived bool) {\n\t// Set stream status to done.\n\tif s.swapState(streamDone) == streamDone {\n\t\t// If it was already done, return.  If multiple closeStream calls\n\t\t// happen simultaneously, wait for the first to finish.\n\t\t<-s.done\n\t\treturn\n\t}\n\t// status and trailers can be updated here without any synchronization because the stream goroutine will\n\t// only read it after it sees an io.EOF error from read or write and we'll write those errors\n\t// only after updating this.\n\ts.status = st\n\tif len(mdata) > 0 {\n\t\ts.trailer = mdata\n\t}\n\tif err != nil {\n\t\t// This will unblock reads eventually.\n\t\ts.write(recvMsg{err: err})\n\t}\n\t// If headerChan isn't closed, then close it.\n\tif atomic.CompareAndSwapUint32(&s.headerChanClosed, 0, 1) {\n\t\ts.noHeaders = true\n\t\tclose(s.headerChan)\n\t}\n\tcleanup := &cleanupStream{\n\t\tstreamID: s.id,\n\t\tonWrite: func() {\n\t\t\tt.mu.Lock()\n\t\t\tif t.activeStreams != nil {\n\t\t\t\tdelete(t.activeStreams, s.id)\n\t\t\t}\n\t\t\tt.mu.Unlock()\n\t\t\tif channelz.IsOn() {\n\t\t\t\tif eosReceived {\n\t\t\t\t\tatomic.AddInt64(&t.czData.streamsSucceeded, 1)\n\t\t\t\t} else {\n\t\t\t\t\tatomic.AddInt64(&t.czData.streamsFailed, 1)\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\trst:     rst,\n\t\trstCode: rstCode,\n\t}\n\taddBackStreamQuota := func(interface{}) bool {\n\t\tt.streamQuota++\n\t\tif t.streamQuota > 0 && t.waitingStreams > 0 {\n\t\t\tselect {\n\t\t\tcase t.streamsQuotaAvailable <- struct{}{}:\n\t\t\tdefault:\n\t\t\t}\n\t\t}\n\t\treturn true\n\t}\n\tt.controlBuf.executeAndPut(addBackStreamQuota, cleanup)\n\t// This will unblock write.\n\tclose(s.done)\n}\n\n// Close kicks off the shutdown process of the transport. This should be called\n// only once on a transport. Once it is called, the transport should not be\n// accessed any more.\n//\n// This method blocks until the addrConn that initiated this transport is\n// re-connected. This happens because t.onClose() begins reconnect logic at the\n// addrConn level and blocks until the addrConn is successfully connected.\nfunc (t *http2Client) Close() error {\n\tt.mu.Lock()\n\t// Make sure we only Close once.\n\tif t.state == closing {\n\t\tt.mu.Unlock()\n\t\treturn nil\n\t}\n\tt.state = closing\n\tstreams := t.activeStreams\n\tt.activeStreams = nil\n\tt.mu.Unlock()\n\tt.controlBuf.finish()\n\tt.cancel()\n\terr := t.conn.Close()\n\tif channelz.IsOn() {\n\t\tchannelz.RemoveEntry(t.channelzID)\n\t}\n\t// Notify all active streams.\n\tfor _, s := range streams {\n\t\tt.closeStream(s, ErrConnClosing, false, http2.ErrCodeNo, status.New(codes.Unavailable, ErrConnClosing.Desc), nil, false)\n\t}\n\tif t.statsHandler != nil {\n\t\tconnEnd := &stats.ConnEnd{\n\t\t\tClient: true,\n\t\t}\n\t\tt.statsHandler.HandleConn(t.ctx, connEnd)\n\t}\n\tt.onClose()\n\treturn err\n}\n\n// GracefulClose sets the state to draining, which prevents new streams from\n// being created and causes the transport to be closed when the last active\n// stream is closed.  If there are no active streams, the transport is closed\n// immediately.  This does nothing if the transport is already draining or\n// closing.\nfunc (t *http2Client) GracefulClose() {\n\tt.mu.Lock()\n\t// Make sure we move to draining only from active.\n\tif t.state == draining || t.state == closing {\n\t\tt.mu.Unlock()\n\t\treturn\n\t}\n\tt.state = draining\n\tactive := len(t.activeStreams)\n\tt.mu.Unlock()\n\tif active == 0 {\n\t\tt.Close()\n\t\treturn\n\t}\n\tt.controlBuf.put(&incomingGoAway{})\n}\n\n// Write formats the data into HTTP2 data frame(s) and sends it out. The caller\n// should proceed only if Write returns nil.\nfunc (t *http2Client) Write(s *Stream, hdr []byte, data []byte, opts *Options) error {\n\tif opts.Last {\n\t\t// If it's the last message, update stream state.\n\t\tif !s.compareAndSwapState(streamActive, streamWriteDone) {\n\t\t\treturn errStreamDone\n\t\t}\n\t} else if s.getState() != streamActive {\n\t\treturn errStreamDone\n\t}\n\tdf := &dataFrame{\n\t\tstreamID:  s.id,\n\t\tendStream: opts.Last,\n\t}\n\tif hdr != nil || data != nil { // If it's not an empty data frame.\n\t\t// Add some data to grpc message header so that we can equally\n\t\t// distribute bytes across frames.\n\t\temptyLen := http2MaxFrameLen - len(hdr)\n\t\tif emptyLen > len(data) {\n\t\t\temptyLen = len(data)\n\t\t}\n\t\thdr = append(hdr, data[:emptyLen]...)\n\t\tdata = data[emptyLen:]\n\t\tdf.h, df.d = hdr, data\n\t\t// TODO(mmukhi): The above logic in this if can be moved to loopyWriter's data handler.\n\t\tif err := s.wq.get(int32(len(hdr) + len(data))); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn t.controlBuf.put(df)\n}\n\nfunc (t *http2Client) getStream(f http2.Frame) (*Stream, bool) {\n\tt.mu.Lock()\n\tdefer t.mu.Unlock()\n\ts, ok := t.activeStreams[f.Header().StreamID]\n\treturn s, ok\n}\n\n// adjustWindow sends out extra window update over the initial window size\n// of stream if the application is requesting data larger in size than\n// the window.\nfunc (t *http2Client) adjustWindow(s *Stream, n uint32) {\n\tif w := s.fc.maybeAdjust(n); w > 0 {\n\t\tt.controlBuf.put(&outgoingWindowUpdate{streamID: s.id, increment: w})\n\t}\n}\n\n// updateWindow adjusts the inbound quota for the stream.\n// Window updates will be sent out when the cumulative quota\n// exceeds the corresponding threshold.\nfunc (t *http2Client) updateWindow(s *Stream, n uint32) {\n\tif w := s.fc.onRead(n); w > 0 {\n\t\tt.controlBuf.put(&outgoingWindowUpdate{streamID: s.id, increment: w})\n\t}\n}\n\n// updateFlowControl updates the incoming flow control windows\n// for the transport and the stream based on the current bdp\n// estimation.\nfunc (t *http2Client) updateFlowControl(n uint32) {\n\tt.mu.Lock()\n\tfor _, s := range t.activeStreams {\n\t\ts.fc.newLimit(n)\n\t}\n\tt.mu.Unlock()\n\tupdateIWS := func(interface{}) bool {\n\t\tt.initialWindowSize = int32(n)\n\t\treturn true\n\t}\n\tt.controlBuf.executeAndPut(updateIWS, &outgoingWindowUpdate{streamID: 0, increment: t.fc.newLimit(n)})\n\tt.controlBuf.put(&outgoingSettings{\n\t\tss: []http2.Setting{\n\t\t\t{\n\t\t\t\tID:  http2.SettingInitialWindowSize,\n\t\t\t\tVal: n,\n\t\t\t},\n\t\t},\n\t})\n}\n\nfunc (t *http2Client) handleData(f *http2.DataFrame) {\n\tsize := f.Header().Length\n\tvar sendBDPPing bool\n\tif t.bdpEst != nil {\n\t\tsendBDPPing = t.bdpEst.add(size)\n\t}\n\t// Decouple connection's flow control from application's read.\n\t// An update on connection's flow control should not depend on\n\t// whether user application has read the data or not. Such a\n\t// restriction is already imposed on the stream's flow control,\n\t// and therefore the sender will be blocked anyways.\n\t// Decoupling the connection flow control will prevent other\n\t// active(fast) streams from starving in presence of slow or\n\t// inactive streams.\n\t//\n\tif w := t.fc.onData(size); w > 0 {\n\t\tt.controlBuf.put(&outgoingWindowUpdate{\n\t\t\tstreamID:  0,\n\t\t\tincrement: w,\n\t\t})\n\t}\n\tif sendBDPPing {\n\t\t// Avoid excessive ping detection (e.g. in an L7 proxy)\n\t\t// by sending a window update prior to the BDP ping.\n\n\t\tif w := t.fc.reset(); w > 0 {\n\t\t\tt.controlBuf.put(&outgoingWindowUpdate{\n\t\t\t\tstreamID:  0,\n\t\t\t\tincrement: w,\n\t\t\t})\n\t\t}\n\n\t\tt.controlBuf.put(bdpPing)\n\t}\n\t// Select the right stream to dispatch.\n\ts, ok := t.getStream(f)\n\tif !ok {\n\t\treturn\n\t}\n\tif size > 0 {\n\t\tif err := s.fc.onData(size); err != nil {\n\t\t\tt.closeStream(s, io.EOF, true, http2.ErrCodeFlowControl, status.New(codes.Internal, err.Error()), nil, false)\n\t\t\treturn\n\t\t}\n\t\tif f.Header().Flags.Has(http2.FlagDataPadded) {\n\t\t\tif w := s.fc.onRead(size - uint32(len(f.Data()))); w > 0 {\n\t\t\t\tt.controlBuf.put(&outgoingWindowUpdate{s.id, w})\n\t\t\t}\n\t\t}\n\t\t// TODO(bradfitz, zhaoq): A copy is required here because there is no\n\t\t// guarantee f.Data() is consumed before the arrival of next frame.\n\t\t// Can this copy be eliminated?\n\t\tif len(f.Data()) > 0 {\n\t\t\tdata := make([]byte, len(f.Data()))\n\t\t\tcopy(data, f.Data())\n\t\t\ts.write(recvMsg{data: data})\n\t\t}\n\t}\n\t// The server has closed the stream without sending trailers.  Record that\n\t// the read direction is closed, and set the status appropriately.\n\tif f.FrameHeader.Flags.Has(http2.FlagDataEndStream) {\n\t\tt.closeStream(s, io.EOF, false, http2.ErrCodeNo, status.New(codes.Internal, \"server closed the stream without sending trailers\"), nil, true)\n\t}\n}\n\nfunc (t *http2Client) handleRSTStream(f *http2.RSTStreamFrame) {\n\ts, ok := t.getStream(f)\n\tif !ok {\n\t\treturn\n\t}\n\tif f.ErrCode == http2.ErrCodeRefusedStream {\n\t\t// The stream was unprocessed by the server.\n\t\tatomic.StoreUint32(&s.unprocessed, 1)\n\t}\n\tstatusCode, ok := http2ErrConvTab[f.ErrCode]\n\tif !ok {\n\t\twarningf(\"transport: http2Client.handleRSTStream found no mapped gRPC status for the received http2 error %v\", f.ErrCode)\n\t\tstatusCode = codes.Unknown\n\t}\n\tif statusCode == codes.Canceled {\n\t\t// Our deadline was already exceeded, and that was likely the cause of\n\t\t// this cancelation.  Alter the status code accordingly.\n\t\tif d, ok := s.ctx.Deadline(); ok && d.After(time.Now()) {\n\t\t\tstatusCode = codes.DeadlineExceeded\n\t\t}\n\t}\n\tt.closeStream(s, io.EOF, false, http2.ErrCodeNo, status.Newf(statusCode, \"stream terminated by RST_STREAM with error code: %v\", f.ErrCode), nil, false)\n}\n\nfunc (t *http2Client) handleSettings(f *http2.SettingsFrame, isFirst bool) {\n\tif f.IsAck() {\n\t\treturn\n\t}\n\tvar maxStreams *uint32\n\tvar ss []http2.Setting\n\tvar updateFuncs []func()\n\tf.ForeachSetting(func(s http2.Setting) error {\n\t\tswitch s.ID {\n\t\tcase http2.SettingMaxConcurrentStreams:\n\t\t\tmaxStreams = new(uint32)\n\t\t\t*maxStreams = s.Val\n\t\tcase http2.SettingMaxHeaderListSize:\n\t\t\tupdateFuncs = append(updateFuncs, func() {\n\t\t\t\tt.maxSendHeaderListSize = new(uint32)\n\t\t\t\t*t.maxSendHeaderListSize = s.Val\n\t\t\t})\n\t\tdefault:\n\t\t\tss = append(ss, s)\n\t\t}\n\t\treturn nil\n\t})\n\tif isFirst && maxStreams == nil {\n\t\tmaxStreams = new(uint32)\n\t\t*maxStreams = math.MaxUint32\n\t}\n\tsf := &incomingSettings{\n\t\tss: ss,\n\t}\n\tif maxStreams != nil {\n\t\tupdateStreamQuota := func() {\n\t\t\tdelta := int64(*maxStreams) - int64(t.maxConcurrentStreams)\n\t\t\tt.maxConcurrentStreams = *maxStreams\n\t\t\tt.streamQuota += delta\n\t\t\tif delta > 0 && t.waitingStreams > 0 {\n\t\t\t\tclose(t.streamsQuotaAvailable) // wake all of them up.\n\t\t\t\tt.streamsQuotaAvailable = make(chan struct{}, 1)\n\t\t\t}\n\t\t}\n\t\tupdateFuncs = append(updateFuncs, updateStreamQuota)\n\t}\n\tt.controlBuf.executeAndPut(func(interface{}) bool {\n\t\tfor _, f := range updateFuncs {\n\t\t\tf()\n\t\t}\n\t\treturn true\n\t}, sf)\n}\n\nfunc (t *http2Client) handlePing(f *http2.PingFrame) {\n\tif f.IsAck() {\n\t\t// Maybe it's a BDP ping.\n\t\tif t.bdpEst != nil {\n\t\t\tt.bdpEst.calculate(f.Data)\n\t\t}\n\t\treturn\n\t}\n\tpingAck := &ping{ack: true}\n\tcopy(pingAck.data[:], f.Data[:])\n\tt.controlBuf.put(pingAck)\n}\n\nfunc (t *http2Client) handleGoAway(f *http2.GoAwayFrame) {\n\tt.mu.Lock()\n\tif t.state == closing {\n\t\tt.mu.Unlock()\n\t\treturn\n\t}\n\tif f.ErrCode == http2.ErrCodeEnhanceYourCalm {\n\t\tinfof(\"Client received GoAway with http2.ErrCodeEnhanceYourCalm.\")\n\t}\n\tid := f.LastStreamID\n\tif id > 0 && id%2 != 1 {\n\t\tt.mu.Unlock()\n\t\tt.Close()\n\t\treturn\n\t}\n\t// A client can receive multiple GoAways from the server (see\n\t// https://github.com/grpc/grpc-go/issues/1387).  The idea is that the first\n\t// GoAway will be sent with an ID of MaxInt32 and the second GoAway will be\n\t// sent after an RTT delay with the ID of the last stream the server will\n\t// process.\n\t//\n\t// Therefore, when we get the first GoAway we don't necessarily close any\n\t// streams. While in case of second GoAway we close all streams created after\n\t// the GoAwayId. This way streams that were in-flight while the GoAway from\n\t// server was being sent don't get killed.\n\tselect {\n\tcase <-t.goAway: // t.goAway has been closed (i.e.,multiple GoAways).\n\t\t// If there are multiple GoAways the first one should always have an ID greater than the following ones.\n\t\tif id > t.prevGoAwayID {\n\t\t\tt.mu.Unlock()\n\t\t\tt.Close()\n\t\t\treturn\n\t\t}\n\tdefault:\n\t\tt.setGoAwayReason(f)\n\t\tclose(t.goAway)\n\t\tt.state = draining\n\t\tt.controlBuf.put(&incomingGoAway{})\n\n\t\t// This has to be a new goroutine because we're still using the current goroutine to read in the transport.\n\t\tt.onGoAway(t.goAwayReason)\n\t}\n\t// All streams with IDs greater than the GoAwayId\n\t// and smaller than the previous GoAway ID should be killed.\n\tupperLimit := t.prevGoAwayID\n\tif upperLimit == 0 { // This is the first GoAway Frame.\n\t\tupperLimit = math.MaxUint32 // Kill all streams after the GoAway ID.\n\t}\n\tfor streamID, stream := range t.activeStreams {\n\t\tif streamID > id && streamID <= upperLimit {\n\t\t\t// The stream was unprocessed by the server.\n\t\t\tatomic.StoreUint32(&stream.unprocessed, 1)\n\t\t\tt.closeStream(stream, errStreamDrain, false, http2.ErrCodeNo, statusGoAway, nil, false)\n\t\t}\n\t}\n\tt.prevGoAwayID = id\n\tactive := len(t.activeStreams)\n\tt.mu.Unlock()\n\tif active == 0 {\n\t\tt.Close()\n\t}\n}\n\n// setGoAwayReason sets the value of t.goAwayReason based\n// on the GoAway frame received.\n// It expects a lock on transport's mutext to be held by\n// the caller.\nfunc (t *http2Client) setGoAwayReason(f *http2.GoAwayFrame) {\n\tt.goAwayReason = GoAwayNoReason\n\tswitch f.ErrCode {\n\tcase http2.ErrCodeEnhanceYourCalm:\n\t\tif string(f.DebugData()) == \"too_many_pings\" {\n\t\t\tt.goAwayReason = GoAwayTooManyPings\n\t\t}\n\t}\n}\n\nfunc (t *http2Client) GetGoAwayReason() GoAwayReason {\n\tt.mu.Lock()\n\tdefer t.mu.Unlock()\n\treturn t.goAwayReason\n}\n\nfunc (t *http2Client) handleWindowUpdate(f *http2.WindowUpdateFrame) {\n\tt.controlBuf.put(&incomingWindowUpdate{\n\t\tstreamID:  f.Header().StreamID,\n\t\tincrement: f.Increment,\n\t})\n}\n\n// operateHeaders takes action on the decoded headers.\nfunc (t *http2Client) operateHeaders(frame *http2.MetaHeadersFrame) {\n\ts, ok := t.getStream(frame)\n\tif !ok {\n\t\treturn\n\t}\n\tendStream := frame.StreamEnded()\n\tatomic.StoreUint32(&s.bytesReceived, 1)\n\tinitialHeader := atomic.LoadUint32(&s.headerChanClosed) == 0\n\n\tif !initialHeader && !endStream {\n\t\t// As specified by gRPC over HTTP2, a HEADERS frame (and associated CONTINUATION frames) can only appear at the start or end of a stream. Therefore, second HEADERS frame must have EOS bit set.\n\t\tst := status.New(codes.Internal, \"a HEADERS frame cannot appear in the middle of a stream\")\n\t\tt.closeStream(s, st.Err(), true, http2.ErrCodeProtocol, st, nil, false)\n\t\treturn\n\t}\n\n\tstate := &decodeState{}\n\t// Initialize isGRPC value to be !initialHeader, since if a gRPC Response-Headers has already been received, then it means that the peer is speaking gRPC and we are in gRPC mode.\n\tstate.data.isGRPC = !initialHeader\n\tif err := state.decodeHeader(frame); err != nil {\n\t\tt.closeStream(s, err, true, http2.ErrCodeProtocol, status.Convert(err), nil, endStream)\n\t\treturn\n\t}\n\n\tisHeader := false\n\tdefer func() {\n\t\tif t.statsHandler != nil {\n\t\t\tif isHeader {\n\t\t\t\tinHeader := &stats.InHeader{\n\t\t\t\t\tClient:     true,\n\t\t\t\t\tWireLength: int(frame.Header().Length),\n\t\t\t\t}\n\t\t\t\tt.statsHandler.HandleRPC(s.ctx, inHeader)\n\t\t\t} else {\n\t\t\t\tinTrailer := &stats.InTrailer{\n\t\t\t\t\tClient:     true,\n\t\t\t\t\tWireLength: int(frame.Header().Length),\n\t\t\t\t}\n\t\t\t\tt.statsHandler.HandleRPC(s.ctx, inTrailer)\n\t\t\t}\n\t\t}\n\t}()\n\n\t// If headerChan hasn't been closed yet\n\tif atomic.CompareAndSwapUint32(&s.headerChanClosed, 0, 1) {\n\t\tif !endStream {\n\t\t\t// HEADERS frame block carries a Response-Headers.\n\t\t\tisHeader = true\n\t\t\t// These values can be set without any synchronization because\n\t\t\t// stream goroutine will read it only after seeing a closed\n\t\t\t// headerChan which we'll close after setting this.\n\t\t\ts.recvCompress = state.data.encoding\n\t\t\tif len(state.data.mdata) > 0 {\n\t\t\t\ts.header = state.data.mdata\n\t\t\t}\n\t\t} else {\n\t\t\t// HEADERS frame block carries a Trailers-Only.\n\t\t\ts.noHeaders = true\n\t\t}\n\t\tclose(s.headerChan)\n\t}\n\n\tif !endStream {\n\t\treturn\n\t}\n\n\t// if client received END_STREAM from server while stream was still active, send RST_STREAM\n\trst := s.getState() == streamActive\n\tt.closeStream(s, io.EOF, rst, http2.ErrCodeNo, state.status(), state.data.mdata, true)\n}\n\n// reader runs as a separate goroutine in charge of reading data from network\n// connection.\n//\n// TODO(zhaoq): currently one reader per transport. Investigate whether this is\n// optimal.\n// TODO(zhaoq): Check the validity of the incoming frame sequence.\nfunc (t *http2Client) reader() {\n\tdefer close(t.readerDone)\n\t// Check the validity of server preface.\n\tframe, err := t.framer.fr.ReadFrame()\n\tif err != nil {\n\t\tt.Close() // this kicks off resetTransport, so must be last before return\n\t\treturn\n\t}\n\tt.conn.SetReadDeadline(time.Time{}) // reset deadline once we get the settings frame (we didn't time out, yay!)\n\tif t.keepaliveEnabled {\n\t\tatomic.CompareAndSwapUint32(&t.activity, 0, 1)\n\t}\n\tsf, ok := frame.(*http2.SettingsFrame)\n\tif !ok {\n\t\tt.Close() // this kicks off resetTransport, so must be last before return\n\t\treturn\n\t}\n\tt.onPrefaceReceipt()\n\tt.handleSettings(sf, true)\n\n\t// loop to keep reading incoming messages on this transport.\n\tfor {\n\t\tframe, err := t.framer.fr.ReadFrame()\n\t\tif t.keepaliveEnabled {\n\t\t\tatomic.CompareAndSwapUint32(&t.activity, 0, 1)\n\t\t}\n\t\tif err != nil {\n\t\t\t// Abort an active stream if the http2.Framer returns a\n\t\t\t// http2.StreamError. This can happen only if the server's response\n\t\t\t// is malformed http2.\n\t\t\tif se, ok := err.(http2.StreamError); ok {\n\t\t\t\tt.mu.Lock()\n\t\t\t\ts := t.activeStreams[se.StreamID]\n\t\t\t\tt.mu.Unlock()\n\t\t\t\tif s != nil {\n\t\t\t\t\t// use error detail to provide better err message\n\t\t\t\t\tcode := http2ErrConvTab[se.Code]\n\t\t\t\t\tmsg := t.framer.fr.ErrorDetail().Error()\n\t\t\t\t\tt.closeStream(s, status.Error(code, msg), true, http2.ErrCodeProtocol, status.New(code, msg), nil, false)\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t} else {\n\t\t\t\t// Transport error.\n\t\t\t\tt.Close()\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t\tswitch frame := frame.(type) {\n\t\tcase *http2.MetaHeadersFrame:\n\t\t\tt.operateHeaders(frame)\n\t\tcase *http2.DataFrame:\n\t\t\tt.handleData(frame)\n\t\tcase *http2.RSTStreamFrame:\n\t\t\tt.handleRSTStream(frame)\n\t\tcase *http2.SettingsFrame:\n\t\t\tt.handleSettings(frame, false)\n\t\tcase *http2.PingFrame:\n\t\t\tt.handlePing(frame)\n\t\tcase *http2.GoAwayFrame:\n\t\t\tt.handleGoAway(frame)\n\t\tcase *http2.WindowUpdateFrame:\n\t\t\tt.handleWindowUpdate(frame)\n\t\tdefault:\n\t\t\terrorf(\"transport: http2Client.reader got unhandled frame type %v.\", frame)\n\t\t}\n\t}\n}\n\n// keepalive running in a separate goroutune makes sure the connection is alive by sending pings.\nfunc (t *http2Client) keepalive() {\n\tp := &ping{data: [8]byte{}}\n\ttimer := time.NewTimer(t.kp.Time)\n\tfor {\n\t\tselect {\n\t\tcase <-timer.C:\n\t\t\tif atomic.CompareAndSwapUint32(&t.activity, 1, 0) {\n\t\t\t\ttimer.Reset(t.kp.Time)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\t// Check if keepalive should go dormant.\n\t\t\tt.mu.Lock()\n\t\t\tif len(t.activeStreams) < 1 && !t.kp.PermitWithoutStream {\n\t\t\t\t// Make awakenKeepalive writable.\n\t\t\t\t<-t.awakenKeepalive\n\t\t\t\tt.mu.Unlock()\n\t\t\t\tselect {\n\t\t\t\tcase <-t.awakenKeepalive:\n\t\t\t\t\t// If the control gets here a ping has been sent\n\t\t\t\t\t// need to reset the timer with keepalive.Timeout.\n\t\t\t\tcase <-t.ctx.Done():\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tt.mu.Unlock()\n\t\t\t\tif channelz.IsOn() {\n\t\t\t\t\tatomic.AddInt64(&t.czData.kpCount, 1)\n\t\t\t\t}\n\t\t\t\t// Send ping.\n\t\t\t\tt.controlBuf.put(p)\n\t\t\t}\n\n\t\t\t// By the time control gets here a ping has been sent one way or the other.\n\t\t\ttimer.Reset(t.kp.Timeout)\n\t\t\tselect {\n\t\t\tcase <-timer.C:\n\t\t\t\tif atomic.CompareAndSwapUint32(&t.activity, 1, 0) {\n\t\t\t\t\ttimer.Reset(t.kp.Time)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tt.Close()\n\t\t\t\treturn\n\t\t\tcase <-t.ctx.Done():\n\t\t\t\tif !timer.Stop() {\n\t\t\t\t\t<-timer.C\n\t\t\t\t}\n\t\t\t\treturn\n\t\t\t}\n\t\tcase <-t.ctx.Done():\n\t\t\tif !timer.Stop() {\n\t\t\t\t<-timer.C\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t}\n}\n\nfunc (t *http2Client) Error() <-chan struct{} {\n\treturn t.ctx.Done()\n}\n\nfunc (t *http2Client) GoAway() <-chan struct{} {\n\treturn t.goAway\n}\n\nfunc (t *http2Client) ChannelzMetric() *channelz.SocketInternalMetric {\n\ts := channelz.SocketInternalMetric{\n\t\tStreamsStarted:                  atomic.LoadInt64(&t.czData.streamsStarted),\n\t\tStreamsSucceeded:                atomic.LoadInt64(&t.czData.streamsSucceeded),\n\t\tStreamsFailed:                   atomic.LoadInt64(&t.czData.streamsFailed),\n\t\tMessagesSent:                    atomic.LoadInt64(&t.czData.msgSent),\n\t\tMessagesReceived:                atomic.LoadInt64(&t.czData.msgRecv),\n\t\tKeepAlivesSent:                  atomic.LoadInt64(&t.czData.kpCount),\n\t\tLastLocalStreamCreatedTimestamp: time.Unix(0, atomic.LoadInt64(&t.czData.lastStreamCreatedTime)),\n\t\tLastMessageSentTimestamp:        time.Unix(0, atomic.LoadInt64(&t.czData.lastMsgSentTime)),\n\t\tLastMessageReceivedTimestamp:    time.Unix(0, atomic.LoadInt64(&t.czData.lastMsgRecvTime)),\n\t\tLocalFlowControlWindow:          int64(t.fc.getSize()),\n\t\tSocketOptions:                   channelz.GetSocketOption(t.conn),\n\t\tLocalAddr:                       t.localAddr,\n\t\tRemoteAddr:                      t.remoteAddr,\n\t\t// RemoteName :\n\t}\n\tif au, ok := t.authInfo.(credentials.ChannelzSecurityInfo); ok {\n\t\ts.Security = au.GetSecurityValue()\n\t}\n\ts.RemoteFlowControlWindow = t.getOutFlowWindow()\n\treturn &s\n}\n\nfunc (t *http2Client) RemoteAddr() net.Addr { return t.remoteAddr }\n\nfunc (t *http2Client) IncrMsgSent() {\n\tatomic.AddInt64(&t.czData.msgSent, 1)\n\tatomic.StoreInt64(&t.czData.lastMsgSentTime, time.Now().UnixNano())\n}\n\nfunc (t *http2Client) IncrMsgRecv() {\n\tatomic.AddInt64(&t.czData.msgRecv, 1)\n\tatomic.StoreInt64(&t.czData.lastMsgRecvTime, time.Now().UnixNano())\n}\n\nfunc (t *http2Client) getOutFlowWindow() int64 {\n\tresp := make(chan uint32, 1)\n\ttimer := time.NewTimer(time.Second)\n\tdefer timer.Stop()\n\tt.controlBuf.put(&outFlowControlSizeRequest{resp})\n\tselect {\n\tcase sz := <-resp:\n\t\treturn int64(sz)\n\tcase <-t.ctxDone:\n\t\treturn -1\n\tcase <-timer.C:\n\t\treturn -2\n\t}\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/internal/transport/http2_server.go",
    "content": "/*\n *\n * Copyright 2014 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\npackage transport\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"math\"\n\t\"net\"\n\t\"strconv\"\n\t\"sync\"\n\t\"sync/atomic\"\n\t\"time\"\n\n\t\"github.com/golang/protobuf/proto\"\n\t\"golang.org/x/net/http2\"\n\t\"golang.org/x/net/http2/hpack\"\n\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/credentials\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/grpc/internal/channelz\"\n\t\"google.golang.org/grpc/internal/grpcrand\"\n\t\"google.golang.org/grpc/keepalive\"\n\t\"google.golang.org/grpc/metadata\"\n\t\"google.golang.org/grpc/peer\"\n\t\"google.golang.org/grpc/stats\"\n\t\"google.golang.org/grpc/status\"\n\t\"google.golang.org/grpc/tap\"\n)\n\nvar (\n\t// ErrIllegalHeaderWrite indicates that setting header is illegal because of\n\t// the stream's state.\n\tErrIllegalHeaderWrite = errors.New(\"transport: the stream is done or WriteHeader was already called\")\n\t// ErrHeaderListSizeLimitViolation indicates that the header list size is larger\n\t// than the limit set by peer.\n\tErrHeaderListSizeLimitViolation = errors.New(\"transport: trying to send header list size larger than the limit set by peer\")\n)\n\n// http2Server implements the ServerTransport interface with HTTP2.\ntype http2Server struct {\n\tctx         context.Context\n\tctxDone     <-chan struct{} // Cache the context.Done() chan\n\tcancel      context.CancelFunc\n\tconn        net.Conn\n\tloopy       *loopyWriter\n\treaderDone  chan struct{} // sync point to enable testing.\n\twriterDone  chan struct{} // sync point to enable testing.\n\tremoteAddr  net.Addr\n\tlocalAddr   net.Addr\n\tmaxStreamID uint32               // max stream ID ever seen\n\tauthInfo    credentials.AuthInfo // auth info about the connection\n\tinTapHandle tap.ServerInHandle\n\tframer      *framer\n\t// The max number of concurrent streams.\n\tmaxStreams uint32\n\t// controlBuf delivers all the control related tasks (e.g., window\n\t// updates, reset streams, and various settings) to the controller.\n\tcontrolBuf *controlBuffer\n\tfc         *trInFlow\n\tstats      stats.Handler\n\t// Flag to keep track of reading activity on transport.\n\t// 1 is true and 0 is false.\n\tactivity uint32 // Accessed atomically.\n\t// Keepalive and max-age parameters for the server.\n\tkp keepalive.ServerParameters\n\n\t// Keepalive enforcement policy.\n\tkep keepalive.EnforcementPolicy\n\t// The time instance last ping was received.\n\tlastPingAt time.Time\n\t// Number of times the client has violated keepalive ping policy so far.\n\tpingStrikes uint8\n\t// Flag to signify that number of ping strikes should be reset to 0.\n\t// This is set whenever data or header frames are sent.\n\t// 1 means yes.\n\tresetPingStrikes      uint32 // Accessed atomically.\n\tinitialWindowSize     int32\n\tbdpEst                *bdpEstimator\n\tmaxSendHeaderListSize *uint32\n\n\tmu sync.Mutex // guard the following\n\n\t// drainChan is initialized when drain(...) is called the first time.\n\t// After which the server writes out the first GoAway(with ID 2^31-1) frame.\n\t// Then an independent goroutine will be launched to later send the second GoAway.\n\t// During this time we don't want to write another first GoAway(with ID 2^31 -1) frame.\n\t// Thus call to drain(...) will be a no-op if drainChan is already initialized since draining is\n\t// already underway.\n\tdrainChan     chan struct{}\n\tstate         transportState\n\tactiveStreams map[uint32]*Stream\n\t// idle is the time instant when the connection went idle.\n\t// This is either the beginning of the connection or when the number of\n\t// RPCs go down to 0.\n\t// When the connection is busy, this value is set to 0.\n\tidle time.Time\n\n\t// Fields below are for channelz metric collection.\n\tchannelzID int64 // channelz unique identification number\n\tczData     *channelzData\n}\n\n// newHTTP2Server constructs a ServerTransport based on HTTP2. ConnectionError is\n// returned if something goes wrong.\nfunc newHTTP2Server(conn net.Conn, config *ServerConfig) (_ ServerTransport, err error) {\n\twriteBufSize := config.WriteBufferSize\n\treadBufSize := config.ReadBufferSize\n\tmaxHeaderListSize := defaultServerMaxHeaderListSize\n\tif config.MaxHeaderListSize != nil {\n\t\tmaxHeaderListSize = *config.MaxHeaderListSize\n\t}\n\tframer := newFramer(conn, writeBufSize, readBufSize, maxHeaderListSize)\n\t// Send initial settings as connection preface to client.\n\tvar isettings []http2.Setting\n\t// TODO(zhaoq): Have a better way to signal \"no limit\" because 0 is\n\t// permitted in the HTTP2 spec.\n\tmaxStreams := config.MaxStreams\n\tif maxStreams == 0 {\n\t\tmaxStreams = math.MaxUint32\n\t} else {\n\t\tisettings = append(isettings, http2.Setting{\n\t\t\tID:  http2.SettingMaxConcurrentStreams,\n\t\t\tVal: maxStreams,\n\t\t})\n\t}\n\tdynamicWindow := true\n\tiwz := int32(initialWindowSize)\n\tif config.InitialWindowSize >= defaultWindowSize {\n\t\tiwz = config.InitialWindowSize\n\t\tdynamicWindow = false\n\t}\n\ticwz := int32(initialWindowSize)\n\tif config.InitialConnWindowSize >= defaultWindowSize {\n\t\ticwz = config.InitialConnWindowSize\n\t\tdynamicWindow = false\n\t}\n\tif iwz != defaultWindowSize {\n\t\tisettings = append(isettings, http2.Setting{\n\t\t\tID:  http2.SettingInitialWindowSize,\n\t\t\tVal: uint32(iwz)})\n\t}\n\tif config.MaxHeaderListSize != nil {\n\t\tisettings = append(isettings, http2.Setting{\n\t\t\tID:  http2.SettingMaxHeaderListSize,\n\t\t\tVal: *config.MaxHeaderListSize,\n\t\t})\n\t}\n\tif err := framer.fr.WriteSettings(isettings...); err != nil {\n\t\treturn nil, connectionErrorf(false, err, \"transport: %v\", err)\n\t}\n\t// Adjust the connection flow control window if needed.\n\tif delta := uint32(icwz - defaultWindowSize); delta > 0 {\n\t\tif err := framer.fr.WriteWindowUpdate(0, delta); err != nil {\n\t\t\treturn nil, connectionErrorf(false, err, \"transport: %v\", err)\n\t\t}\n\t}\n\tkp := config.KeepaliveParams\n\tif kp.MaxConnectionIdle == 0 {\n\t\tkp.MaxConnectionIdle = defaultMaxConnectionIdle\n\t}\n\tif kp.MaxConnectionAge == 0 {\n\t\tkp.MaxConnectionAge = defaultMaxConnectionAge\n\t}\n\t// Add a jitter to MaxConnectionAge.\n\tkp.MaxConnectionAge += getJitter(kp.MaxConnectionAge)\n\tif kp.MaxConnectionAgeGrace == 0 {\n\t\tkp.MaxConnectionAgeGrace = defaultMaxConnectionAgeGrace\n\t}\n\tif kp.Time == 0 {\n\t\tkp.Time = defaultServerKeepaliveTime\n\t}\n\tif kp.Timeout == 0 {\n\t\tkp.Timeout = defaultServerKeepaliveTimeout\n\t}\n\tkep := config.KeepalivePolicy\n\tif kep.MinTime == 0 {\n\t\tkep.MinTime = defaultKeepalivePolicyMinTime\n\t}\n\tctx, cancel := context.WithCancel(context.Background())\n\tt := &http2Server{\n\t\tctx:               ctx,\n\t\tcancel:            cancel,\n\t\tctxDone:           ctx.Done(),\n\t\tconn:              conn,\n\t\tremoteAddr:        conn.RemoteAddr(),\n\t\tlocalAddr:         conn.LocalAddr(),\n\t\tauthInfo:          config.AuthInfo,\n\t\tframer:            framer,\n\t\treaderDone:        make(chan struct{}),\n\t\twriterDone:        make(chan struct{}),\n\t\tmaxStreams:        maxStreams,\n\t\tinTapHandle:       config.InTapHandle,\n\t\tfc:                &trInFlow{limit: uint32(icwz)},\n\t\tstate:             reachable,\n\t\tactiveStreams:     make(map[uint32]*Stream),\n\t\tstats:             config.StatsHandler,\n\t\tkp:                kp,\n\t\tidle:              time.Now(),\n\t\tkep:               kep,\n\t\tinitialWindowSize: iwz,\n\t\tczData:            new(channelzData),\n\t}\n\tt.controlBuf = newControlBuffer(t.ctxDone)\n\tif dynamicWindow {\n\t\tt.bdpEst = &bdpEstimator{\n\t\t\tbdp:               initialWindowSize,\n\t\t\tupdateFlowControl: t.updateFlowControl,\n\t\t}\n\t}\n\tif t.stats != nil {\n\t\tt.ctx = t.stats.TagConn(t.ctx, &stats.ConnTagInfo{\n\t\t\tRemoteAddr: t.remoteAddr,\n\t\t\tLocalAddr:  t.localAddr,\n\t\t})\n\t\tconnBegin := &stats.ConnBegin{}\n\t\tt.stats.HandleConn(t.ctx, connBegin)\n\t}\n\tif channelz.IsOn() {\n\t\tt.channelzID = channelz.RegisterNormalSocket(t, config.ChannelzParentID, fmt.Sprintf(\"%s -> %s\", t.remoteAddr, t.localAddr))\n\t}\n\tt.framer.writer.Flush()\n\n\tdefer func() {\n\t\tif err != nil {\n\t\t\tt.Close()\n\t\t}\n\t}()\n\n\t// Check the validity of client preface.\n\tpreface := make([]byte, len(clientPreface))\n\tif _, err := io.ReadFull(t.conn, preface); err != nil {\n\t\treturn nil, connectionErrorf(false, err, \"transport: http2Server.HandleStreams failed to receive the preface from client: %v\", err)\n\t}\n\tif !bytes.Equal(preface, clientPreface) {\n\t\treturn nil, connectionErrorf(false, nil, \"transport: http2Server.HandleStreams received bogus greeting from client: %q\", preface)\n\t}\n\n\tframe, err := t.framer.fr.ReadFrame()\n\tif err == io.EOF || err == io.ErrUnexpectedEOF {\n\t\treturn nil, err\n\t}\n\tif err != nil {\n\t\treturn nil, connectionErrorf(false, err, \"transport: http2Server.HandleStreams failed to read initial settings frame: %v\", err)\n\t}\n\tatomic.StoreUint32(&t.activity, 1)\n\tsf, ok := frame.(*http2.SettingsFrame)\n\tif !ok {\n\t\treturn nil, connectionErrorf(false, nil, \"transport: http2Server.HandleStreams saw invalid preface type %T from client\", frame)\n\t}\n\tt.handleSettings(sf)\n\n\tgo func() {\n\t\tt.loopy = newLoopyWriter(serverSide, t.framer, t.controlBuf, t.bdpEst)\n\t\tt.loopy.ssGoAwayHandler = t.outgoingGoAwayHandler\n\t\tif err := t.loopy.run(); err != nil {\n\t\t\terrorf(\"transport: loopyWriter.run returning. Err: %v\", err)\n\t\t}\n\t\tt.conn.Close()\n\t\tclose(t.writerDone)\n\t}()\n\tgo t.keepalive()\n\treturn t, nil\n}\n\n// operateHeader takes action on the decoded headers.\nfunc (t *http2Server) operateHeaders(frame *http2.MetaHeadersFrame, handle func(*Stream), traceCtx func(context.Context, string) context.Context) (fatal bool) {\n\tstreamID := frame.Header().StreamID\n\tstate := &decodeState{\n\t\tserverSide: true,\n\t}\n\tif err := state.decodeHeader(frame); err != nil {\n\t\tif se, ok := status.FromError(err); ok {\n\t\t\tt.controlBuf.put(&cleanupStream{\n\t\t\t\tstreamID: streamID,\n\t\t\t\trst:      true,\n\t\t\t\trstCode:  statusCodeConvTab[se.Code()],\n\t\t\t\tonWrite:  func() {},\n\t\t\t})\n\t\t}\n\t\treturn false\n\t}\n\n\tbuf := newRecvBuffer()\n\ts := &Stream{\n\t\tid:             streamID,\n\t\tst:             t,\n\t\tbuf:            buf,\n\t\tfc:             &inFlow{limit: uint32(t.initialWindowSize)},\n\t\trecvCompress:   state.data.encoding,\n\t\tmethod:         state.data.method,\n\t\tcontentSubtype: state.data.contentSubtype,\n\t}\n\tif frame.StreamEnded() {\n\t\t// s is just created by the caller. No lock needed.\n\t\ts.state = streamReadDone\n\t}\n\tif state.data.timeoutSet {\n\t\ts.ctx, s.cancel = context.WithTimeout(t.ctx, state.data.timeout)\n\t} else {\n\t\ts.ctx, s.cancel = context.WithCancel(t.ctx)\n\t}\n\tpr := &peer.Peer{\n\t\tAddr: t.remoteAddr,\n\t}\n\t// Attach Auth info if there is any.\n\tif t.authInfo != nil {\n\t\tpr.AuthInfo = t.authInfo\n\t}\n\ts.ctx = peer.NewContext(s.ctx, pr)\n\t// Attach the received metadata to the context.\n\tif len(state.data.mdata) > 0 {\n\t\ts.ctx = metadata.NewIncomingContext(s.ctx, state.data.mdata)\n\t}\n\tif state.data.statsTags != nil {\n\t\ts.ctx = stats.SetIncomingTags(s.ctx, state.data.statsTags)\n\t}\n\tif state.data.statsTrace != nil {\n\t\ts.ctx = stats.SetIncomingTrace(s.ctx, state.data.statsTrace)\n\t}\n\tif t.inTapHandle != nil {\n\t\tvar err error\n\t\tinfo := &tap.Info{\n\t\t\tFullMethodName: state.data.method,\n\t\t}\n\t\ts.ctx, err = t.inTapHandle(s.ctx, info)\n\t\tif err != nil {\n\t\t\twarningf(\"transport: http2Server.operateHeaders got an error from InTapHandle: %v\", err)\n\t\t\tt.controlBuf.put(&cleanupStream{\n\t\t\t\tstreamID: s.id,\n\t\t\t\trst:      true,\n\t\t\t\trstCode:  http2.ErrCodeRefusedStream,\n\t\t\t\tonWrite:  func() {},\n\t\t\t})\n\t\t\treturn false\n\t\t}\n\t}\n\tt.mu.Lock()\n\tif t.state != reachable {\n\t\tt.mu.Unlock()\n\t\treturn false\n\t}\n\tif uint32(len(t.activeStreams)) >= t.maxStreams {\n\t\tt.mu.Unlock()\n\t\tt.controlBuf.put(&cleanupStream{\n\t\t\tstreamID: streamID,\n\t\t\trst:      true,\n\t\t\trstCode:  http2.ErrCodeRefusedStream,\n\t\t\tonWrite:  func() {},\n\t\t})\n\t\treturn false\n\t}\n\tif streamID%2 != 1 || streamID <= t.maxStreamID {\n\t\tt.mu.Unlock()\n\t\t// illegal gRPC stream id.\n\t\terrorf(\"transport: http2Server.HandleStreams received an illegal stream id: %v\", streamID)\n\t\treturn true\n\t}\n\tt.maxStreamID = streamID\n\tt.activeStreams[streamID] = s\n\tif len(t.activeStreams) == 1 {\n\t\tt.idle = time.Time{}\n\t}\n\tt.mu.Unlock()\n\tif channelz.IsOn() {\n\t\tatomic.AddInt64(&t.czData.streamsStarted, 1)\n\t\tatomic.StoreInt64(&t.czData.lastStreamCreatedTime, time.Now().UnixNano())\n\t}\n\ts.requestRead = func(n int) {\n\t\tt.adjustWindow(s, uint32(n))\n\t}\n\ts.ctx = traceCtx(s.ctx, s.method)\n\tif t.stats != nil {\n\t\ts.ctx = t.stats.TagRPC(s.ctx, &stats.RPCTagInfo{FullMethodName: s.method})\n\t\tinHeader := &stats.InHeader{\n\t\t\tFullMethod:  s.method,\n\t\t\tRemoteAddr:  t.remoteAddr,\n\t\t\tLocalAddr:   t.localAddr,\n\t\t\tCompression: s.recvCompress,\n\t\t\tWireLength:  int(frame.Header().Length),\n\t\t}\n\t\tt.stats.HandleRPC(s.ctx, inHeader)\n\t}\n\ts.ctxDone = s.ctx.Done()\n\ts.wq = newWriteQuota(defaultWriteQuota, s.ctxDone)\n\ts.trReader = &transportReader{\n\t\treader: &recvBufferReader{\n\t\t\tctx:     s.ctx,\n\t\t\tctxDone: s.ctxDone,\n\t\t\trecv:    s.buf,\n\t\t},\n\t\twindowHandler: func(n int) {\n\t\t\tt.updateWindow(s, uint32(n))\n\t\t},\n\t}\n\t// Register the stream with loopy.\n\tt.controlBuf.put(&registerStream{\n\t\tstreamID: s.id,\n\t\twq:       s.wq,\n\t})\n\thandle(s)\n\treturn false\n}\n\n// HandleStreams receives incoming streams using the given handler. This is\n// typically run in a separate goroutine.\n// traceCtx attaches trace to ctx and returns the new context.\nfunc (t *http2Server) HandleStreams(handle func(*Stream), traceCtx func(context.Context, string) context.Context) {\n\tdefer close(t.readerDone)\n\tfor {\n\t\tframe, err := t.framer.fr.ReadFrame()\n\t\tatomic.StoreUint32(&t.activity, 1)\n\t\tif err != nil {\n\t\t\tif se, ok := err.(http2.StreamError); ok {\n\t\t\t\twarningf(\"transport: http2Server.HandleStreams encountered http2.StreamError: %v\", se)\n\t\t\t\tt.mu.Lock()\n\t\t\t\ts := t.activeStreams[se.StreamID]\n\t\t\t\tt.mu.Unlock()\n\t\t\t\tif s != nil {\n\t\t\t\t\tt.closeStream(s, true, se.Code, false)\n\t\t\t\t} else {\n\t\t\t\t\tt.controlBuf.put(&cleanupStream{\n\t\t\t\t\t\tstreamID: se.StreamID,\n\t\t\t\t\t\trst:      true,\n\t\t\t\t\t\trstCode:  se.Code,\n\t\t\t\t\t\tonWrite:  func() {},\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif err == io.EOF || err == io.ErrUnexpectedEOF {\n\t\t\t\tt.Close()\n\t\t\t\treturn\n\t\t\t}\n\t\t\twarningf(\"transport: http2Server.HandleStreams failed to read frame: %v\", err)\n\t\t\tt.Close()\n\t\t\treturn\n\t\t}\n\t\tswitch frame := frame.(type) {\n\t\tcase *http2.MetaHeadersFrame:\n\t\t\tif t.operateHeaders(frame, handle, traceCtx) {\n\t\t\t\tt.Close()\n\t\t\t\tbreak\n\t\t\t}\n\t\tcase *http2.DataFrame:\n\t\t\tt.handleData(frame)\n\t\tcase *http2.RSTStreamFrame:\n\t\t\tt.handleRSTStream(frame)\n\t\tcase *http2.SettingsFrame:\n\t\t\tt.handleSettings(frame)\n\t\tcase *http2.PingFrame:\n\t\t\tt.handlePing(frame)\n\t\tcase *http2.WindowUpdateFrame:\n\t\t\tt.handleWindowUpdate(frame)\n\t\tcase *http2.GoAwayFrame:\n\t\t\t// TODO: Handle GoAway from the client appropriately.\n\t\tdefault:\n\t\t\terrorf(\"transport: http2Server.HandleStreams found unhandled frame type %v.\", frame)\n\t\t}\n\t}\n}\n\nfunc (t *http2Server) getStream(f http2.Frame) (*Stream, bool) {\n\tt.mu.Lock()\n\tdefer t.mu.Unlock()\n\tif t.activeStreams == nil {\n\t\t// The transport is closing.\n\t\treturn nil, false\n\t}\n\ts, ok := t.activeStreams[f.Header().StreamID]\n\tif !ok {\n\t\t// The stream is already done.\n\t\treturn nil, false\n\t}\n\treturn s, true\n}\n\n// adjustWindow sends out extra window update over the initial window size\n// of stream if the application is requesting data larger in size than\n// the window.\nfunc (t *http2Server) adjustWindow(s *Stream, n uint32) {\n\tif w := s.fc.maybeAdjust(n); w > 0 {\n\t\tt.controlBuf.put(&outgoingWindowUpdate{streamID: s.id, increment: w})\n\t}\n\n}\n\n// updateWindow adjusts the inbound quota for the stream and the transport.\n// Window updates will deliver to the controller for sending when\n// the cumulative quota exceeds the corresponding threshold.\nfunc (t *http2Server) updateWindow(s *Stream, n uint32) {\n\tif w := s.fc.onRead(n); w > 0 {\n\t\tt.controlBuf.put(&outgoingWindowUpdate{streamID: s.id,\n\t\t\tincrement: w,\n\t\t})\n\t}\n}\n\n// updateFlowControl updates the incoming flow control windows\n// for the transport and the stream based on the current bdp\n// estimation.\nfunc (t *http2Server) updateFlowControl(n uint32) {\n\tt.mu.Lock()\n\tfor _, s := range t.activeStreams {\n\t\ts.fc.newLimit(n)\n\t}\n\tt.initialWindowSize = int32(n)\n\tt.mu.Unlock()\n\tt.controlBuf.put(&outgoingWindowUpdate{\n\t\tstreamID:  0,\n\t\tincrement: t.fc.newLimit(n),\n\t})\n\tt.controlBuf.put(&outgoingSettings{\n\t\tss: []http2.Setting{\n\t\t\t{\n\t\t\t\tID:  http2.SettingInitialWindowSize,\n\t\t\t\tVal: n,\n\t\t\t},\n\t\t},\n\t})\n\n}\n\nfunc (t *http2Server) handleData(f *http2.DataFrame) {\n\tsize := f.Header().Length\n\tvar sendBDPPing bool\n\tif t.bdpEst != nil {\n\t\tsendBDPPing = t.bdpEst.add(size)\n\t}\n\t// Decouple connection's flow control from application's read.\n\t// An update on connection's flow control should not depend on\n\t// whether user application has read the data or not. Such a\n\t// restriction is already imposed on the stream's flow control,\n\t// and therefore the sender will be blocked anyways.\n\t// Decoupling the connection flow control will prevent other\n\t// active(fast) streams from starving in presence of slow or\n\t// inactive streams.\n\tif w := t.fc.onData(size); w > 0 {\n\t\tt.controlBuf.put(&outgoingWindowUpdate{\n\t\t\tstreamID:  0,\n\t\t\tincrement: w,\n\t\t})\n\t}\n\tif sendBDPPing {\n\t\t// Avoid excessive ping detection (e.g. in an L7 proxy)\n\t\t// by sending a window update prior to the BDP ping.\n\t\tif w := t.fc.reset(); w > 0 {\n\t\t\tt.controlBuf.put(&outgoingWindowUpdate{\n\t\t\t\tstreamID:  0,\n\t\t\t\tincrement: w,\n\t\t\t})\n\t\t}\n\t\tt.controlBuf.put(bdpPing)\n\t}\n\t// Select the right stream to dispatch.\n\ts, ok := t.getStream(f)\n\tif !ok {\n\t\treturn\n\t}\n\tif size > 0 {\n\t\tif err := s.fc.onData(size); err != nil {\n\t\t\tt.closeStream(s, true, http2.ErrCodeFlowControl, false)\n\t\t\treturn\n\t\t}\n\t\tif f.Header().Flags.Has(http2.FlagDataPadded) {\n\t\t\tif w := s.fc.onRead(size - uint32(len(f.Data()))); w > 0 {\n\t\t\t\tt.controlBuf.put(&outgoingWindowUpdate{s.id, w})\n\t\t\t}\n\t\t}\n\t\t// TODO(bradfitz, zhaoq): A copy is required here because there is no\n\t\t// guarantee f.Data() is consumed before the arrival of next frame.\n\t\t// Can this copy be eliminated?\n\t\tif len(f.Data()) > 0 {\n\t\t\tdata := make([]byte, len(f.Data()))\n\t\t\tcopy(data, f.Data())\n\t\t\ts.write(recvMsg{data: data})\n\t\t}\n\t}\n\tif f.Header().Flags.Has(http2.FlagDataEndStream) {\n\t\t// Received the end of stream from the client.\n\t\ts.compareAndSwapState(streamActive, streamReadDone)\n\t\ts.write(recvMsg{err: io.EOF})\n\t}\n}\n\nfunc (t *http2Server) handleRSTStream(f *http2.RSTStreamFrame) {\n\t// If the stream is not deleted from the transport's active streams map, then do a regular close stream.\n\tif s, ok := t.getStream(f); ok {\n\t\tt.closeStream(s, false, 0, false)\n\t\treturn\n\t}\n\t// If the stream is already deleted from the active streams map, then put a cleanupStream item into controlbuf to delete the stream from loopy writer's established streams map.\n\tt.controlBuf.put(&cleanupStream{\n\t\tstreamID: f.Header().StreamID,\n\t\trst:      false,\n\t\trstCode:  0,\n\t\tonWrite:  func() {},\n\t})\n}\n\nfunc (t *http2Server) handleSettings(f *http2.SettingsFrame) {\n\tif f.IsAck() {\n\t\treturn\n\t}\n\tvar ss []http2.Setting\n\tvar updateFuncs []func()\n\tf.ForeachSetting(func(s http2.Setting) error {\n\t\tswitch s.ID {\n\t\tcase http2.SettingMaxHeaderListSize:\n\t\t\tupdateFuncs = append(updateFuncs, func() {\n\t\t\t\tt.maxSendHeaderListSize = new(uint32)\n\t\t\t\t*t.maxSendHeaderListSize = s.Val\n\t\t\t})\n\t\tdefault:\n\t\t\tss = append(ss, s)\n\t\t}\n\t\treturn nil\n\t})\n\tt.controlBuf.executeAndPut(func(interface{}) bool {\n\t\tfor _, f := range updateFuncs {\n\t\t\tf()\n\t\t}\n\t\treturn true\n\t}, &incomingSettings{\n\t\tss: ss,\n\t})\n}\n\nconst (\n\tmaxPingStrikes     = 2\n\tdefaultPingTimeout = 2 * time.Hour\n)\n\nfunc (t *http2Server) handlePing(f *http2.PingFrame) {\n\tif f.IsAck() {\n\t\tif f.Data == goAwayPing.data && t.drainChan != nil {\n\t\t\tclose(t.drainChan)\n\t\t\treturn\n\t\t}\n\t\t// Maybe it's a BDP ping.\n\t\tif t.bdpEst != nil {\n\t\t\tt.bdpEst.calculate(f.Data)\n\t\t}\n\t\treturn\n\t}\n\tpingAck := &ping{ack: true}\n\tcopy(pingAck.data[:], f.Data[:])\n\tt.controlBuf.put(pingAck)\n\n\tnow := time.Now()\n\tdefer func() {\n\t\tt.lastPingAt = now\n\t}()\n\t// A reset ping strikes means that we don't need to check for policy\n\t// violation for this ping and the pingStrikes counter should be set\n\t// to 0.\n\tif atomic.CompareAndSwapUint32(&t.resetPingStrikes, 1, 0) {\n\t\tt.pingStrikes = 0\n\t\treturn\n\t}\n\tt.mu.Lock()\n\tns := len(t.activeStreams)\n\tt.mu.Unlock()\n\tif ns < 1 && !t.kep.PermitWithoutStream {\n\t\t// Keepalive shouldn't be active thus, this new ping should\n\t\t// have come after at least defaultPingTimeout.\n\t\tif t.lastPingAt.Add(defaultPingTimeout).After(now) {\n\t\t\tt.pingStrikes++\n\t\t}\n\t} else {\n\t\t// Check if keepalive policy is respected.\n\t\tif t.lastPingAt.Add(t.kep.MinTime).After(now) {\n\t\t\tt.pingStrikes++\n\t\t}\n\t}\n\n\tif t.pingStrikes > maxPingStrikes {\n\t\t// Send goaway and close the connection.\n\t\terrorf(\"transport: Got too many pings from the client, closing the connection.\")\n\t\tt.controlBuf.put(&goAway{code: http2.ErrCodeEnhanceYourCalm, debugData: []byte(\"too_many_pings\"), closeConn: true})\n\t}\n}\n\nfunc (t *http2Server) handleWindowUpdate(f *http2.WindowUpdateFrame) {\n\tt.controlBuf.put(&incomingWindowUpdate{\n\t\tstreamID:  f.Header().StreamID,\n\t\tincrement: f.Increment,\n\t})\n}\n\nfunc appendHeaderFieldsFromMD(headerFields []hpack.HeaderField, md metadata.MD) []hpack.HeaderField {\n\tfor k, vv := range md {\n\t\tif isReservedHeader(k) {\n\t\t\t// Clients don't tolerate reading restricted headers after some non restricted ones were sent.\n\t\t\tcontinue\n\t\t}\n\t\tfor _, v := range vv {\n\t\t\theaderFields = append(headerFields, hpack.HeaderField{Name: k, Value: encodeMetadataHeader(k, v)})\n\t\t}\n\t}\n\treturn headerFields\n}\n\nfunc (t *http2Server) checkForHeaderListSize(it interface{}) bool {\n\tif t.maxSendHeaderListSize == nil {\n\t\treturn true\n\t}\n\thdrFrame := it.(*headerFrame)\n\tvar sz int64\n\tfor _, f := range hdrFrame.hf {\n\t\tif sz += int64(f.Size()); sz > int64(*t.maxSendHeaderListSize) {\n\t\t\terrorf(\"header list size to send violates the maximum size (%d bytes) set by client\", *t.maxSendHeaderListSize)\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\n// WriteHeader sends the header metedata md back to the client.\nfunc (t *http2Server) WriteHeader(s *Stream, md metadata.MD) error {\n\tif s.updateHeaderSent() || s.getState() == streamDone {\n\t\treturn ErrIllegalHeaderWrite\n\t}\n\ts.hdrMu.Lock()\n\tif md.Len() > 0 {\n\t\tif s.header.Len() > 0 {\n\t\t\ts.header = metadata.Join(s.header, md)\n\t\t} else {\n\t\t\ts.header = md\n\t\t}\n\t}\n\tif err := t.writeHeaderLocked(s); err != nil {\n\t\ts.hdrMu.Unlock()\n\t\treturn err\n\t}\n\ts.hdrMu.Unlock()\n\treturn nil\n}\n\nfunc (t *http2Server) writeHeaderLocked(s *Stream) error {\n\t// TODO(mmukhi): Benchmark if the performance gets better if count the metadata and other header fields\n\t// first and create a slice of that exact size.\n\theaderFields := make([]hpack.HeaderField, 0, 2) // at least :status, content-type will be there if none else.\n\theaderFields = append(headerFields, hpack.HeaderField{Name: \":status\", Value: \"200\"})\n\theaderFields = append(headerFields, hpack.HeaderField{Name: \"content-type\", Value: contentType(s.contentSubtype)})\n\tif s.sendCompress != \"\" {\n\t\theaderFields = append(headerFields, hpack.HeaderField{Name: \"grpc-encoding\", Value: s.sendCompress})\n\t}\n\theaderFields = appendHeaderFieldsFromMD(headerFields, s.header)\n\tsuccess, err := t.controlBuf.executeAndPut(t.checkForHeaderListSize, &headerFrame{\n\t\tstreamID:  s.id,\n\t\thf:        headerFields,\n\t\tendStream: false,\n\t\tonWrite: func() {\n\t\t\tatomic.StoreUint32(&t.resetPingStrikes, 1)\n\t\t},\n\t})\n\tif !success {\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tt.closeStream(s, true, http2.ErrCodeInternal, false)\n\t\treturn ErrHeaderListSizeLimitViolation\n\t}\n\tif t.stats != nil {\n\t\t// Note: WireLength is not set in outHeader.\n\t\t// TODO(mmukhi): Revisit this later, if needed.\n\t\toutHeader := &stats.OutHeader{}\n\t\tt.stats.HandleRPC(s.Context(), outHeader)\n\t}\n\treturn nil\n}\n\n// WriteStatus sends stream status to the client and terminates the stream.\n// There is no further I/O operations being able to perform on this stream.\n// TODO(zhaoq): Now it indicates the end of entire stream. Revisit if early\n// OK is adopted.\nfunc (t *http2Server) WriteStatus(s *Stream, st *status.Status) error {\n\tif s.getState() == streamDone {\n\t\treturn nil\n\t}\n\ts.hdrMu.Lock()\n\t// TODO(mmukhi): Benchmark if the performance gets better if count the metadata and other header fields\n\t// first and create a slice of that exact size.\n\theaderFields := make([]hpack.HeaderField, 0, 2) // grpc-status and grpc-message will be there if none else.\n\tif !s.updateHeaderSent() {                      // No headers have been sent.\n\t\tif len(s.header) > 0 { // Send a separate header frame.\n\t\t\tif err := t.writeHeaderLocked(s); err != nil {\n\t\t\t\ts.hdrMu.Unlock()\n\t\t\t\treturn err\n\t\t\t}\n\t\t} else { // Send a trailer only response.\n\t\t\theaderFields = append(headerFields, hpack.HeaderField{Name: \":status\", Value: \"200\"})\n\t\t\theaderFields = append(headerFields, hpack.HeaderField{Name: \"content-type\", Value: contentType(s.contentSubtype)})\n\t\t}\n\t}\n\theaderFields = append(headerFields, hpack.HeaderField{Name: \"grpc-status\", Value: strconv.Itoa(int(st.Code()))})\n\theaderFields = append(headerFields, hpack.HeaderField{Name: \"grpc-message\", Value: encodeGrpcMessage(st.Message())})\n\n\tif p := st.Proto(); p != nil && len(p.Details) > 0 {\n\t\tstBytes, err := proto.Marshal(p)\n\t\tif err != nil {\n\t\t\t// TODO: return error instead, when callers are able to handle it.\n\t\t\tgrpclog.Errorf(\"transport: failed to marshal rpc status: %v, error: %v\", p, err)\n\t\t} else {\n\t\t\theaderFields = append(headerFields, hpack.HeaderField{Name: \"grpc-status-details-bin\", Value: encodeBinHeader(stBytes)})\n\t\t}\n\t}\n\n\t// Attach the trailer metadata.\n\theaderFields = appendHeaderFieldsFromMD(headerFields, s.trailer)\n\ttrailingHeader := &headerFrame{\n\t\tstreamID:  s.id,\n\t\thf:        headerFields,\n\t\tendStream: true,\n\t\tonWrite: func() {\n\t\t\tatomic.StoreUint32(&t.resetPingStrikes, 1)\n\t\t},\n\t}\n\ts.hdrMu.Unlock()\n\tsuccess, err := t.controlBuf.execute(t.checkForHeaderListSize, trailingHeader)\n\tif !success {\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tt.closeStream(s, true, http2.ErrCodeInternal, false)\n\t\treturn ErrHeaderListSizeLimitViolation\n\t}\n\t// Send a RST_STREAM after the trailers if the client has not already half-closed.\n\trst := s.getState() == streamActive\n\tt.finishStream(s, rst, http2.ErrCodeNo, trailingHeader, true)\n\tif t.stats != nil {\n\t\tt.stats.HandleRPC(s.Context(), &stats.OutTrailer{})\n\t}\n\treturn nil\n}\n\n// Write converts the data into HTTP2 data frame and sends it out. Non-nil error\n// is returns if it fails (e.g., framing error, transport error).\nfunc (t *http2Server) Write(s *Stream, hdr []byte, data []byte, opts *Options) error {\n\tif !s.isHeaderSent() { // Headers haven't been written yet.\n\t\tif err := t.WriteHeader(s, nil); err != nil {\n\t\t\tif _, ok := err.(ConnectionError); ok {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\t// TODO(mmukhi, dfawley): Make sure this is the right code to return.\n\t\t\treturn status.Errorf(codes.Internal, \"transport: %v\", err)\n\t\t}\n\t} else {\n\t\t// Writing headers checks for this condition.\n\t\tif s.getState() == streamDone {\n\t\t\t// TODO(mmukhi, dfawley): Should the server write also return io.EOF?\n\t\t\ts.cancel()\n\t\t\tselect {\n\t\t\tcase <-t.ctx.Done():\n\t\t\t\treturn ErrConnClosing\n\t\t\tdefault:\n\t\t\t}\n\t\t\treturn ContextErr(s.ctx.Err())\n\t\t}\n\t}\n\t// Add some data to header frame so that we can equally distribute bytes across frames.\n\temptyLen := http2MaxFrameLen - len(hdr)\n\tif emptyLen > len(data) {\n\t\temptyLen = len(data)\n\t}\n\thdr = append(hdr, data[:emptyLen]...)\n\tdata = data[emptyLen:]\n\tdf := &dataFrame{\n\t\tstreamID: s.id,\n\t\th:        hdr,\n\t\td:        data,\n\t\tonEachWrite: func() {\n\t\t\tatomic.StoreUint32(&t.resetPingStrikes, 1)\n\t\t},\n\t}\n\tif err := s.wq.get(int32(len(hdr) + len(data))); err != nil {\n\t\tselect {\n\t\tcase <-t.ctx.Done():\n\t\t\treturn ErrConnClosing\n\t\tdefault:\n\t\t}\n\t\treturn ContextErr(s.ctx.Err())\n\t}\n\treturn t.controlBuf.put(df)\n}\n\n// keepalive running in a separate goroutine does the following:\n// 1. Gracefully closes an idle connection after a duration of keepalive.MaxConnectionIdle.\n// 2. Gracefully closes any connection after a duration of keepalive.MaxConnectionAge.\n// 3. Forcibly closes a connection after an additive period of keepalive.MaxConnectionAgeGrace over keepalive.MaxConnectionAge.\n// 4. Makes sure a connection is alive by sending pings with a frequency of keepalive.Time and closes a non-responsive connection\n// after an additional duration of keepalive.Timeout.\nfunc (t *http2Server) keepalive() {\n\tp := &ping{}\n\tvar pingSent bool\n\tmaxIdle := time.NewTimer(t.kp.MaxConnectionIdle)\n\tmaxAge := time.NewTimer(t.kp.MaxConnectionAge)\n\tkeepalive := time.NewTimer(t.kp.Time)\n\t// NOTE: All exit paths of this function should reset their\n\t// respective timers. A failure to do so will cause the\n\t// following clean-up to deadlock and eventually leak.\n\tdefer func() {\n\t\tif !maxIdle.Stop() {\n\t\t\t<-maxIdle.C\n\t\t}\n\t\tif !maxAge.Stop() {\n\t\t\t<-maxAge.C\n\t\t}\n\t\tif !keepalive.Stop() {\n\t\t\t<-keepalive.C\n\t\t}\n\t}()\n\tfor {\n\t\tselect {\n\t\tcase <-maxIdle.C:\n\t\t\tt.mu.Lock()\n\t\t\tidle := t.idle\n\t\t\tif idle.IsZero() { // The connection is non-idle.\n\t\t\t\tt.mu.Unlock()\n\t\t\t\tmaxIdle.Reset(t.kp.MaxConnectionIdle)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tval := t.kp.MaxConnectionIdle - time.Since(idle)\n\t\t\tt.mu.Unlock()\n\t\t\tif val <= 0 {\n\t\t\t\t// The connection has been idle for a duration of keepalive.MaxConnectionIdle or more.\n\t\t\t\t// Gracefully close the connection.\n\t\t\t\tt.drain(http2.ErrCodeNo, []byte{})\n\t\t\t\t// Resetting the timer so that the clean-up doesn't deadlock.\n\t\t\t\tmaxIdle.Reset(infinity)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tmaxIdle.Reset(val)\n\t\tcase <-maxAge.C:\n\t\t\tt.drain(http2.ErrCodeNo, []byte{})\n\t\t\tmaxAge.Reset(t.kp.MaxConnectionAgeGrace)\n\t\t\tselect {\n\t\t\tcase <-maxAge.C:\n\t\t\t\t// Close the connection after grace period.\n\t\t\t\tt.Close()\n\t\t\t\t// Resetting the timer so that the clean-up doesn't deadlock.\n\t\t\t\tmaxAge.Reset(infinity)\n\t\t\tcase <-t.ctx.Done():\n\t\t\t}\n\t\t\treturn\n\t\tcase <-keepalive.C:\n\t\t\tif atomic.CompareAndSwapUint32(&t.activity, 1, 0) {\n\t\t\t\tpingSent = false\n\t\t\t\tkeepalive.Reset(t.kp.Time)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif pingSent {\n\t\t\t\tt.Close()\n\t\t\t\t// Resetting the timer so that the clean-up doesn't deadlock.\n\t\t\t\tkeepalive.Reset(infinity)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tpingSent = true\n\t\t\tif channelz.IsOn() {\n\t\t\t\tatomic.AddInt64(&t.czData.kpCount, 1)\n\t\t\t}\n\t\t\tt.controlBuf.put(p)\n\t\t\tkeepalive.Reset(t.kp.Timeout)\n\t\tcase <-t.ctx.Done():\n\t\t\treturn\n\t\t}\n\t}\n}\n\n// Close starts shutting down the http2Server transport.\n// TODO(zhaoq): Now the destruction is not blocked on any pending streams. This\n// could cause some resource issue. Revisit this later.\nfunc (t *http2Server) Close() error {\n\tt.mu.Lock()\n\tif t.state == closing {\n\t\tt.mu.Unlock()\n\t\treturn errors.New(\"transport: Close() was already called\")\n\t}\n\tt.state = closing\n\tstreams := t.activeStreams\n\tt.activeStreams = nil\n\tt.mu.Unlock()\n\tt.controlBuf.finish()\n\tt.cancel()\n\terr := t.conn.Close()\n\tif channelz.IsOn() {\n\t\tchannelz.RemoveEntry(t.channelzID)\n\t}\n\t// Cancel all active streams.\n\tfor _, s := range streams {\n\t\ts.cancel()\n\t}\n\tif t.stats != nil {\n\t\tconnEnd := &stats.ConnEnd{}\n\t\tt.stats.HandleConn(t.ctx, connEnd)\n\t}\n\treturn err\n}\n\n// deleteStream deletes the stream s from transport's active streams.\nfunc (t *http2Server) deleteStream(s *Stream, eosReceived bool) (oldState streamState) {\n\toldState = s.swapState(streamDone)\n\tif oldState == streamDone {\n\t\t// If the stream was already done, return.\n\t\treturn oldState\n\t}\n\n\t// In case stream sending and receiving are invoked in separate\n\t// goroutines (e.g., bi-directional streaming), cancel needs to be\n\t// called to interrupt the potential blocking on other goroutines.\n\ts.cancel()\n\n\tt.mu.Lock()\n\tif _, ok := t.activeStreams[s.id]; ok {\n\t\tdelete(t.activeStreams, s.id)\n\t\tif len(t.activeStreams) == 0 {\n\t\t\tt.idle = time.Now()\n\t\t}\n\t}\n\tt.mu.Unlock()\n\n\tif channelz.IsOn() {\n\t\tif eosReceived {\n\t\t\tatomic.AddInt64(&t.czData.streamsSucceeded, 1)\n\t\t} else {\n\t\t\tatomic.AddInt64(&t.czData.streamsFailed, 1)\n\t\t}\n\t}\n\n\treturn oldState\n}\n\n// finishStream closes the stream and puts the trailing headerFrame into controlbuf.\nfunc (t *http2Server) finishStream(s *Stream, rst bool, rstCode http2.ErrCode, hdr *headerFrame, eosReceived bool) {\n\toldState := t.deleteStream(s, eosReceived)\n\t// If the stream is already closed, then don't put trailing header to controlbuf.\n\tif oldState == streamDone {\n\t\treturn\n\t}\n\n\thdr.cleanup = &cleanupStream{\n\t\tstreamID: s.id,\n\t\trst:      rst,\n\t\trstCode:  rstCode,\n\t\tonWrite:  func() {},\n\t}\n\tt.controlBuf.put(hdr)\n}\n\n// closeStream clears the footprint of a stream when the stream is not needed any more.\nfunc (t *http2Server) closeStream(s *Stream, rst bool, rstCode http2.ErrCode, eosReceived bool) {\n\tt.deleteStream(s, eosReceived)\n\tt.controlBuf.put(&cleanupStream{\n\t\tstreamID: s.id,\n\t\trst:      rst,\n\t\trstCode:  rstCode,\n\t\tonWrite:  func() {},\n\t})\n}\n\nfunc (t *http2Server) RemoteAddr() net.Addr {\n\treturn t.remoteAddr\n}\n\nfunc (t *http2Server) Drain() {\n\tt.drain(http2.ErrCodeNo, []byte{})\n}\n\nfunc (t *http2Server) drain(code http2.ErrCode, debugData []byte) {\n\tt.mu.Lock()\n\tdefer t.mu.Unlock()\n\tif t.drainChan != nil {\n\t\treturn\n\t}\n\tt.drainChan = make(chan struct{})\n\tt.controlBuf.put(&goAway{code: code, debugData: debugData, headsUp: true})\n}\n\nvar goAwayPing = &ping{data: [8]byte{1, 6, 1, 8, 0, 3, 3, 9}}\n\n// Handles outgoing GoAway and returns true if loopy needs to put itself\n// in draining mode.\nfunc (t *http2Server) outgoingGoAwayHandler(g *goAway) (bool, error) {\n\tt.mu.Lock()\n\tif t.state == closing { // TODO(mmukhi): This seems unnecessary.\n\t\tt.mu.Unlock()\n\t\t// The transport is closing.\n\t\treturn false, ErrConnClosing\n\t}\n\tsid := t.maxStreamID\n\tif !g.headsUp {\n\t\t// Stop accepting more streams now.\n\t\tt.state = draining\n\t\tif len(t.activeStreams) == 0 {\n\t\t\tg.closeConn = true\n\t\t}\n\t\tt.mu.Unlock()\n\t\tif err := t.framer.fr.WriteGoAway(sid, g.code, g.debugData); err != nil {\n\t\t\treturn false, err\n\t\t}\n\t\tif g.closeConn {\n\t\t\t// Abruptly close the connection following the GoAway (via\n\t\t\t// loopywriter).  But flush out what's inside the buffer first.\n\t\t\tt.framer.writer.Flush()\n\t\t\treturn false, fmt.Errorf(\"transport: Connection closing\")\n\t\t}\n\t\treturn true, nil\n\t}\n\tt.mu.Unlock()\n\t// For a graceful close, send out a GoAway with stream ID of MaxUInt32,\n\t// Follow that with a ping and wait for the ack to come back or a timer\n\t// to expire. During this time accept new streams since they might have\n\t// originated before the GoAway reaches the client.\n\t// After getting the ack or timer expiration send out another GoAway this\n\t// time with an ID of the max stream server intends to process.\n\tif err := t.framer.fr.WriteGoAway(math.MaxUint32, http2.ErrCodeNo, []byte{}); err != nil {\n\t\treturn false, err\n\t}\n\tif err := t.framer.fr.WritePing(false, goAwayPing.data); err != nil {\n\t\treturn false, err\n\t}\n\tgo func() {\n\t\ttimer := time.NewTimer(time.Minute)\n\t\tdefer timer.Stop()\n\t\tselect {\n\t\tcase <-t.drainChan:\n\t\tcase <-timer.C:\n\t\tcase <-t.ctx.Done():\n\t\t\treturn\n\t\t}\n\t\tt.controlBuf.put(&goAway{code: g.code, debugData: g.debugData})\n\t}()\n\treturn false, nil\n}\n\nfunc (t *http2Server) ChannelzMetric() *channelz.SocketInternalMetric {\n\ts := channelz.SocketInternalMetric{\n\t\tStreamsStarted:                   atomic.LoadInt64(&t.czData.streamsStarted),\n\t\tStreamsSucceeded:                 atomic.LoadInt64(&t.czData.streamsSucceeded),\n\t\tStreamsFailed:                    atomic.LoadInt64(&t.czData.streamsFailed),\n\t\tMessagesSent:                     atomic.LoadInt64(&t.czData.msgSent),\n\t\tMessagesReceived:                 atomic.LoadInt64(&t.czData.msgRecv),\n\t\tKeepAlivesSent:                   atomic.LoadInt64(&t.czData.kpCount),\n\t\tLastRemoteStreamCreatedTimestamp: time.Unix(0, atomic.LoadInt64(&t.czData.lastStreamCreatedTime)),\n\t\tLastMessageSentTimestamp:         time.Unix(0, atomic.LoadInt64(&t.czData.lastMsgSentTime)),\n\t\tLastMessageReceivedTimestamp:     time.Unix(0, atomic.LoadInt64(&t.czData.lastMsgRecvTime)),\n\t\tLocalFlowControlWindow:           int64(t.fc.getSize()),\n\t\tSocketOptions:                    channelz.GetSocketOption(t.conn),\n\t\tLocalAddr:                        t.localAddr,\n\t\tRemoteAddr:                       t.remoteAddr,\n\t\t// RemoteName :\n\t}\n\tif au, ok := t.authInfo.(credentials.ChannelzSecurityInfo); ok {\n\t\ts.Security = au.GetSecurityValue()\n\t}\n\ts.RemoteFlowControlWindow = t.getOutFlowWindow()\n\treturn &s\n}\n\nfunc (t *http2Server) IncrMsgSent() {\n\tatomic.AddInt64(&t.czData.msgSent, 1)\n\tatomic.StoreInt64(&t.czData.lastMsgSentTime, time.Now().UnixNano())\n}\n\nfunc (t *http2Server) IncrMsgRecv() {\n\tatomic.AddInt64(&t.czData.msgRecv, 1)\n\tatomic.StoreInt64(&t.czData.lastMsgRecvTime, time.Now().UnixNano())\n}\n\nfunc (t *http2Server) getOutFlowWindow() int64 {\n\tresp := make(chan uint32, 1)\n\ttimer := time.NewTimer(time.Second)\n\tdefer timer.Stop()\n\tt.controlBuf.put(&outFlowControlSizeRequest{resp})\n\tselect {\n\tcase sz := <-resp:\n\t\treturn int64(sz)\n\tcase <-t.ctxDone:\n\t\treturn -1\n\tcase <-timer.C:\n\t\treturn -2\n\t}\n}\n\nfunc getJitter(v time.Duration) time.Duration {\n\tif v == infinity {\n\t\treturn 0\n\t}\n\t// Generate a jitter between +/- 10% of the value.\n\tr := int64(v / 10)\n\tj := grpcrand.Int63n(2*r) - r\n\treturn time.Duration(j)\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/internal/transport/http_util.go",
    "content": "/*\n *\n * Copyright 2014 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\npackage transport\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"encoding/base64\"\n\t\"fmt\"\n\t\"io\"\n\t\"math\"\n\t\"net\"\n\t\"net/http\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\t\"unicode/utf8\"\n\n\t\"github.com/golang/protobuf/proto\"\n\t\"golang.org/x/net/http2\"\n\t\"golang.org/x/net/http2/hpack\"\n\tspb \"google.golang.org/genproto/googleapis/rpc/status\"\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/status\"\n)\n\nconst (\n\t// http2MaxFrameLen specifies the max length of a HTTP2 frame.\n\thttp2MaxFrameLen = 16384 // 16KB frame\n\t// http://http2.github.io/http2-spec/#SettingValues\n\thttp2InitHeaderTableSize = 4096\n\t// baseContentType is the base content-type for gRPC.  This is a valid\n\t// content-type on it's own, but can also include a content-subtype such as\n\t// \"proto\" as a suffix after \"+\" or \";\".  See\n\t// https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md#requests\n\t// for more details.\n\tbaseContentType = \"application/grpc\"\n)\n\nvar (\n\tclientPreface   = []byte(http2.ClientPreface)\n\thttp2ErrConvTab = map[http2.ErrCode]codes.Code{\n\t\thttp2.ErrCodeNo:                 codes.Internal,\n\t\thttp2.ErrCodeProtocol:           codes.Internal,\n\t\thttp2.ErrCodeInternal:           codes.Internal,\n\t\thttp2.ErrCodeFlowControl:        codes.ResourceExhausted,\n\t\thttp2.ErrCodeSettingsTimeout:    codes.Internal,\n\t\thttp2.ErrCodeStreamClosed:       codes.Internal,\n\t\thttp2.ErrCodeFrameSize:          codes.Internal,\n\t\thttp2.ErrCodeRefusedStream:      codes.Unavailable,\n\t\thttp2.ErrCodeCancel:             codes.Canceled,\n\t\thttp2.ErrCodeCompression:        codes.Internal,\n\t\thttp2.ErrCodeConnect:            codes.Internal,\n\t\thttp2.ErrCodeEnhanceYourCalm:    codes.ResourceExhausted,\n\t\thttp2.ErrCodeInadequateSecurity: codes.PermissionDenied,\n\t\thttp2.ErrCodeHTTP11Required:     codes.Internal,\n\t}\n\tstatusCodeConvTab = map[codes.Code]http2.ErrCode{\n\t\tcodes.Internal:          http2.ErrCodeInternal,\n\t\tcodes.Canceled:          http2.ErrCodeCancel,\n\t\tcodes.Unavailable:       http2.ErrCodeRefusedStream,\n\t\tcodes.ResourceExhausted: http2.ErrCodeEnhanceYourCalm,\n\t\tcodes.PermissionDenied:  http2.ErrCodeInadequateSecurity,\n\t}\n\t// HTTPStatusConvTab is the HTTP status code to gRPC error code conversion table.\n\tHTTPStatusConvTab = map[int]codes.Code{\n\t\t// 400 Bad Request - INTERNAL.\n\t\thttp.StatusBadRequest: codes.Internal,\n\t\t// 401 Unauthorized  - UNAUTHENTICATED.\n\t\thttp.StatusUnauthorized: codes.Unauthenticated,\n\t\t// 403 Forbidden - PERMISSION_DENIED.\n\t\thttp.StatusForbidden: codes.PermissionDenied,\n\t\t// 404 Not Found - UNIMPLEMENTED.\n\t\thttp.StatusNotFound: codes.Unimplemented,\n\t\t// 429 Too Many Requests - UNAVAILABLE.\n\t\thttp.StatusTooManyRequests: codes.Unavailable,\n\t\t// 502 Bad Gateway - UNAVAILABLE.\n\t\thttp.StatusBadGateway: codes.Unavailable,\n\t\t// 503 Service Unavailable - UNAVAILABLE.\n\t\thttp.StatusServiceUnavailable: codes.Unavailable,\n\t\t// 504 Gateway timeout - UNAVAILABLE.\n\t\thttp.StatusGatewayTimeout: codes.Unavailable,\n\t}\n)\n\ntype parsedHeaderData struct {\n\tencoding string\n\t// statusGen caches the stream status received from the trailer the server\n\t// sent.  Client side only.  Do not access directly.  After all trailers are\n\t// parsed, use the status method to retrieve the status.\n\tstatusGen *status.Status\n\t// rawStatusCode and rawStatusMsg are set from the raw trailer fields and are not\n\t// intended for direct access outside of parsing.\n\trawStatusCode *int\n\trawStatusMsg  string\n\thttpStatus    *int\n\t// Server side only fields.\n\ttimeoutSet bool\n\ttimeout    time.Duration\n\tmethod     string\n\t// key-value metadata map from the peer.\n\tmdata          map[string][]string\n\tstatsTags      []byte\n\tstatsTrace     []byte\n\tcontentSubtype string\n\n\t// isGRPC field indicates whether the peer is speaking gRPC (otherwise HTTP).\n\t//\n\t// We are in gRPC mode (peer speaking gRPC) if:\n\t// \t* We are client side and have already received a HEADER frame that indicates gRPC peer.\n\t//  * The header contains valid  a content-type, i.e. a string starts with \"application/grpc\"\n\t// And we should handle error specific to gRPC.\n\t//\n\t// Otherwise (i.e. a content-type string starts without \"application/grpc\", or does not exist), we\n\t// are in HTTP fallback mode, and should handle error specific to HTTP.\n\tisGRPC         bool\n\tgrpcErr        error\n\thttpErr        error\n\tcontentTypeErr string\n}\n\n// decodeState configures decoding criteria and records the decoded data.\ntype decodeState struct {\n\t// whether decoding on server side or not\n\tserverSide bool\n\n\t// Records the states during HPACK decoding. It will be filled with info parsed from HTTP HEADERS\n\t// frame once decodeHeader function has been invoked and returned.\n\tdata parsedHeaderData\n}\n\n// isReservedHeader checks whether hdr belongs to HTTP2 headers\n// reserved by gRPC protocol. Any other headers are classified as the\n// user-specified metadata.\nfunc isReservedHeader(hdr string) bool {\n\tif hdr != \"\" && hdr[0] == ':' {\n\t\treturn true\n\t}\n\tswitch hdr {\n\tcase \"content-type\",\n\t\t\"user-agent\",\n\t\t\"grpc-message-type\",\n\t\t\"grpc-encoding\",\n\t\t\"grpc-message\",\n\t\t\"grpc-status\",\n\t\t\"grpc-timeout\",\n\t\t\"grpc-status-details-bin\",\n\t\t// Intentionally exclude grpc-previous-rpc-attempts and\n\t\t// grpc-retry-pushback-ms, which are \"reserved\", but their API\n\t\t// intentionally works via metadata.\n\t\t\"te\":\n\t\treturn true\n\tdefault:\n\t\treturn false\n\t}\n}\n\n// isWhitelistedHeader checks whether hdr should be propagated into metadata\n// visible to users, even though it is classified as \"reserved\", above.\nfunc isWhitelistedHeader(hdr string) bool {\n\tswitch hdr {\n\tcase \":authority\", \"user-agent\":\n\t\treturn true\n\tdefault:\n\t\treturn false\n\t}\n}\n\n// contentSubtype returns the content-subtype for the given content-type.  The\n// given content-type must be a valid content-type that starts with\n// \"application/grpc\". A content-subtype will follow \"application/grpc\" after a\n// \"+\" or \";\". See\n// https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md#requests for\n// more details.\n//\n// If contentType is not a valid content-type for gRPC, the boolean\n// will be false, otherwise true. If content-type == \"application/grpc\",\n// \"application/grpc+\", or \"application/grpc;\", the boolean will be true,\n// but no content-subtype will be returned.\n//\n// contentType is assumed to be lowercase already.\nfunc contentSubtype(contentType string) (string, bool) {\n\tif contentType == baseContentType {\n\t\treturn \"\", true\n\t}\n\tif !strings.HasPrefix(contentType, baseContentType) {\n\t\treturn \"\", false\n\t}\n\t// guaranteed since != baseContentType and has baseContentType prefix\n\tswitch contentType[len(baseContentType)] {\n\tcase '+', ';':\n\t\t// this will return true for \"application/grpc+\" or \"application/grpc;\"\n\t\t// which the previous validContentType function tested to be valid, so we\n\t\t// just say that no content-subtype is specified in this case\n\t\treturn contentType[len(baseContentType)+1:], true\n\tdefault:\n\t\treturn \"\", false\n\t}\n}\n\n// contentSubtype is assumed to be lowercase\nfunc contentType(contentSubtype string) string {\n\tif contentSubtype == \"\" {\n\t\treturn baseContentType\n\t}\n\treturn baseContentType + \"+\" + contentSubtype\n}\n\nfunc (d *decodeState) status() *status.Status {\n\tif d.data.statusGen == nil {\n\t\t// No status-details were provided; generate status using code/msg.\n\t\td.data.statusGen = status.New(codes.Code(int32(*(d.data.rawStatusCode))), d.data.rawStatusMsg)\n\t}\n\treturn d.data.statusGen\n}\n\nconst binHdrSuffix = \"-bin\"\n\nfunc encodeBinHeader(v []byte) string {\n\treturn base64.RawStdEncoding.EncodeToString(v)\n}\n\nfunc decodeBinHeader(v string) ([]byte, error) {\n\tif len(v)%4 == 0 {\n\t\t// Input was padded, or padding was not necessary.\n\t\treturn base64.StdEncoding.DecodeString(v)\n\t}\n\treturn base64.RawStdEncoding.DecodeString(v)\n}\n\nfunc encodeMetadataHeader(k, v string) string {\n\tif strings.HasSuffix(k, binHdrSuffix) {\n\t\treturn encodeBinHeader(([]byte)(v))\n\t}\n\treturn v\n}\n\nfunc decodeMetadataHeader(k, v string) (string, error) {\n\tif strings.HasSuffix(k, binHdrSuffix) {\n\t\tb, err := decodeBinHeader(v)\n\t\treturn string(b), err\n\t}\n\treturn v, nil\n}\n\nfunc (d *decodeState) decodeHeader(frame *http2.MetaHeadersFrame) error {\n\t// frame.Truncated is set to true when framer detects that the current header\n\t// list size hits MaxHeaderListSize limit.\n\tif frame.Truncated {\n\t\treturn status.Error(codes.Internal, \"peer header list size exceeded limit\")\n\t}\n\n\tfor _, hf := range frame.Fields {\n\t\td.processHeaderField(hf)\n\t}\n\n\tif d.data.isGRPC {\n\t\tif d.data.grpcErr != nil {\n\t\t\treturn d.data.grpcErr\n\t\t}\n\t\tif d.serverSide {\n\t\t\treturn nil\n\t\t}\n\t\tif d.data.rawStatusCode == nil && d.data.statusGen == nil {\n\t\t\t// gRPC status doesn't exist.\n\t\t\t// Set rawStatusCode to be unknown and return nil error.\n\t\t\t// So that, if the stream has ended this Unknown status\n\t\t\t// will be propagated to the user.\n\t\t\t// Otherwise, it will be ignored. In which case, status from\n\t\t\t// a later trailer, that has StreamEnded flag set, is propagated.\n\t\t\tcode := int(codes.Unknown)\n\t\t\td.data.rawStatusCode = &code\n\t\t}\n\t\treturn nil\n\t}\n\n\t// HTTP fallback mode\n\tif d.data.httpErr != nil {\n\t\treturn d.data.httpErr\n\t}\n\n\tvar (\n\t\tcode = codes.Internal // when header does not include HTTP status, return INTERNAL\n\t\tok   bool\n\t)\n\n\tif d.data.httpStatus != nil {\n\t\tcode, ok = HTTPStatusConvTab[*(d.data.httpStatus)]\n\t\tif !ok {\n\t\t\tcode = codes.Unknown\n\t\t}\n\t}\n\n\treturn status.Error(code, d.constructHTTPErrMsg())\n}\n\n// constructErrMsg constructs error message to be returned in HTTP fallback mode.\n// Format: HTTP status code and its corresponding message + content-type error message.\nfunc (d *decodeState) constructHTTPErrMsg() string {\n\tvar errMsgs []string\n\n\tif d.data.httpStatus == nil {\n\t\terrMsgs = append(errMsgs, \"malformed header: missing HTTP status\")\n\t} else {\n\t\terrMsgs = append(errMsgs, fmt.Sprintf(\"%s: HTTP status code %d\", http.StatusText(*(d.data.httpStatus)), *d.data.httpStatus))\n\t}\n\n\tif d.data.contentTypeErr == \"\" {\n\t\terrMsgs = append(errMsgs, \"transport: missing content-type field\")\n\t} else {\n\t\terrMsgs = append(errMsgs, d.data.contentTypeErr)\n\t}\n\n\treturn strings.Join(errMsgs, \"; \")\n}\n\nfunc (d *decodeState) addMetadata(k, v string) {\n\tif d.data.mdata == nil {\n\t\td.data.mdata = make(map[string][]string)\n\t}\n\td.data.mdata[k] = append(d.data.mdata[k], v)\n}\n\nfunc (d *decodeState) processHeaderField(f hpack.HeaderField) {\n\tswitch f.Name {\n\tcase \"content-type\":\n\t\tcontentSubtype, validContentType := contentSubtype(f.Value)\n\t\tif !validContentType {\n\t\t\td.data.contentTypeErr = fmt.Sprintf(\"transport: received the unexpected content-type %q\", f.Value)\n\t\t\treturn\n\t\t}\n\t\td.data.contentSubtype = contentSubtype\n\t\t// TODO: do we want to propagate the whole content-type in the metadata,\n\t\t// or come up with a way to just propagate the content-subtype if it was set?\n\t\t// ie {\"content-type\": \"application/grpc+proto\"} or {\"content-subtype\": \"proto\"}\n\t\t// in the metadata?\n\t\td.addMetadata(f.Name, f.Value)\n\t\td.data.isGRPC = true\n\tcase \"grpc-encoding\":\n\t\td.data.encoding = f.Value\n\tcase \"grpc-status\":\n\t\tcode, err := strconv.Atoi(f.Value)\n\t\tif err != nil {\n\t\t\td.data.grpcErr = status.Errorf(codes.Internal, \"transport: malformed grpc-status: %v\", err)\n\t\t\treturn\n\t\t}\n\t\td.data.rawStatusCode = &code\n\tcase \"grpc-message\":\n\t\td.data.rawStatusMsg = decodeGrpcMessage(f.Value)\n\tcase \"grpc-status-details-bin\":\n\t\tv, err := decodeBinHeader(f.Value)\n\t\tif err != nil {\n\t\t\td.data.grpcErr = status.Errorf(codes.Internal, \"transport: malformed grpc-status-details-bin: %v\", err)\n\t\t\treturn\n\t\t}\n\t\ts := &spb.Status{}\n\t\tif err := proto.Unmarshal(v, s); err != nil {\n\t\t\td.data.grpcErr = status.Errorf(codes.Internal, \"transport: malformed grpc-status-details-bin: %v\", err)\n\t\t\treturn\n\t\t}\n\t\td.data.statusGen = status.FromProto(s)\n\tcase \"grpc-timeout\":\n\t\td.data.timeoutSet = true\n\t\tvar err error\n\t\tif d.data.timeout, err = decodeTimeout(f.Value); err != nil {\n\t\t\td.data.grpcErr = status.Errorf(codes.Internal, \"transport: malformed time-out: %v\", err)\n\t\t}\n\tcase \":path\":\n\t\td.data.method = f.Value\n\tcase \":status\":\n\t\tcode, err := strconv.Atoi(f.Value)\n\t\tif err != nil {\n\t\t\td.data.httpErr = status.Errorf(codes.Internal, \"transport: malformed http-status: %v\", err)\n\t\t\treturn\n\t\t}\n\t\td.data.httpStatus = &code\n\tcase \"grpc-tags-bin\":\n\t\tv, err := decodeBinHeader(f.Value)\n\t\tif err != nil {\n\t\t\td.data.grpcErr = status.Errorf(codes.Internal, \"transport: malformed grpc-tags-bin: %v\", err)\n\t\t\treturn\n\t\t}\n\t\td.data.statsTags = v\n\t\td.addMetadata(f.Name, string(v))\n\tcase \"grpc-trace-bin\":\n\t\tv, err := decodeBinHeader(f.Value)\n\t\tif err != nil {\n\t\t\td.data.grpcErr = status.Errorf(codes.Internal, \"transport: malformed grpc-trace-bin: %v\", err)\n\t\t\treturn\n\t\t}\n\t\td.data.statsTrace = v\n\t\td.addMetadata(f.Name, string(v))\n\tdefault:\n\t\tif isReservedHeader(f.Name) && !isWhitelistedHeader(f.Name) {\n\t\t\tbreak\n\t\t}\n\t\tv, err := decodeMetadataHeader(f.Name, f.Value)\n\t\tif err != nil {\n\t\t\terrorf(\"Failed to decode metadata header (%q, %q): %v\", f.Name, f.Value, err)\n\t\t\treturn\n\t\t}\n\t\td.addMetadata(f.Name, v)\n\t}\n}\n\ntype timeoutUnit uint8\n\nconst (\n\thour        timeoutUnit = 'H'\n\tminute      timeoutUnit = 'M'\n\tsecond      timeoutUnit = 'S'\n\tmillisecond timeoutUnit = 'm'\n\tmicrosecond timeoutUnit = 'u'\n\tnanosecond  timeoutUnit = 'n'\n)\n\nfunc timeoutUnitToDuration(u timeoutUnit) (d time.Duration, ok bool) {\n\tswitch u {\n\tcase hour:\n\t\treturn time.Hour, true\n\tcase minute:\n\t\treturn time.Minute, true\n\tcase second:\n\t\treturn time.Second, true\n\tcase millisecond:\n\t\treturn time.Millisecond, true\n\tcase microsecond:\n\t\treturn time.Microsecond, true\n\tcase nanosecond:\n\t\treturn time.Nanosecond, true\n\tdefault:\n\t}\n\treturn\n}\n\nconst maxTimeoutValue int64 = 100000000 - 1\n\n// div does integer division and round-up the result. Note that this is\n// equivalent to (d+r-1)/r but has less chance to overflow.\nfunc div(d, r time.Duration) int64 {\n\tif m := d % r; m > 0 {\n\t\treturn int64(d/r + 1)\n\t}\n\treturn int64(d / r)\n}\n\n// TODO(zhaoq): It is the simplistic and not bandwidth efficient. Improve it.\nfunc encodeTimeout(t time.Duration) string {\n\tif t <= 0 {\n\t\treturn \"0n\"\n\t}\n\tif d := div(t, time.Nanosecond); d <= maxTimeoutValue {\n\t\treturn strconv.FormatInt(d, 10) + \"n\"\n\t}\n\tif d := div(t, time.Microsecond); d <= maxTimeoutValue {\n\t\treturn strconv.FormatInt(d, 10) + \"u\"\n\t}\n\tif d := div(t, time.Millisecond); d <= maxTimeoutValue {\n\t\treturn strconv.FormatInt(d, 10) + \"m\"\n\t}\n\tif d := div(t, time.Second); d <= maxTimeoutValue {\n\t\treturn strconv.FormatInt(d, 10) + \"S\"\n\t}\n\tif d := div(t, time.Minute); d <= maxTimeoutValue {\n\t\treturn strconv.FormatInt(d, 10) + \"M\"\n\t}\n\t// Note that maxTimeoutValue * time.Hour > MaxInt64.\n\treturn strconv.FormatInt(div(t, time.Hour), 10) + \"H\"\n}\n\nfunc decodeTimeout(s string) (time.Duration, error) {\n\tsize := len(s)\n\tif size < 2 {\n\t\treturn 0, fmt.Errorf(\"transport: timeout string is too short: %q\", s)\n\t}\n\tif size > 9 {\n\t\t// Spec allows for 8 digits plus the unit.\n\t\treturn 0, fmt.Errorf(\"transport: timeout string is too long: %q\", s)\n\t}\n\tunit := timeoutUnit(s[size-1])\n\td, ok := timeoutUnitToDuration(unit)\n\tif !ok {\n\t\treturn 0, fmt.Errorf(\"transport: timeout unit is not recognized: %q\", s)\n\t}\n\tt, err := strconv.ParseInt(s[:size-1], 10, 64)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tconst maxHours = math.MaxInt64 / int64(time.Hour)\n\tif d == time.Hour && t > maxHours {\n\t\t// This timeout would overflow math.MaxInt64; clamp it.\n\t\treturn time.Duration(math.MaxInt64), nil\n\t}\n\treturn d * time.Duration(t), nil\n}\n\nconst (\n\tspaceByte   = ' '\n\ttildeByte   = '~'\n\tpercentByte = '%'\n)\n\n// encodeGrpcMessage is used to encode status code in header field\n// \"grpc-message\". It does percent encoding and also replaces invalid utf-8\n// characters with Unicode replacement character.\n//\n// It checks to see if each individual byte in msg is an allowable byte, and\n// then either percent encoding or passing it through. When percent encoding,\n// the byte is converted into hexadecimal notation with a '%' prepended.\nfunc encodeGrpcMessage(msg string) string {\n\tif msg == \"\" {\n\t\treturn \"\"\n\t}\n\tlenMsg := len(msg)\n\tfor i := 0; i < lenMsg; i++ {\n\t\tc := msg[i]\n\t\tif !(c >= spaceByte && c <= tildeByte && c != percentByte) {\n\t\t\treturn encodeGrpcMessageUnchecked(msg)\n\t\t}\n\t}\n\treturn msg\n}\n\nfunc encodeGrpcMessageUnchecked(msg string) string {\n\tvar buf bytes.Buffer\n\tfor len(msg) > 0 {\n\t\tr, size := utf8.DecodeRuneInString(msg)\n\t\tfor _, b := range []byte(string(r)) {\n\t\t\tif size > 1 {\n\t\t\t\t// If size > 1, r is not ascii. Always do percent encoding.\n\t\t\t\tbuf.WriteString(fmt.Sprintf(\"%%%02X\", b))\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// The for loop is necessary even if size == 1. r could be\n\t\t\t// utf8.RuneError.\n\t\t\t//\n\t\t\t// fmt.Sprintf(\"%%%02X\", utf8.RuneError) gives \"%FFFD\".\n\t\t\tif b >= spaceByte && b <= tildeByte && b != percentByte {\n\t\t\t\tbuf.WriteByte(b)\n\t\t\t} else {\n\t\t\t\tbuf.WriteString(fmt.Sprintf(\"%%%02X\", b))\n\t\t\t}\n\t\t}\n\t\tmsg = msg[size:]\n\t}\n\treturn buf.String()\n}\n\n// decodeGrpcMessage decodes the msg encoded by encodeGrpcMessage.\nfunc decodeGrpcMessage(msg string) string {\n\tif msg == \"\" {\n\t\treturn \"\"\n\t}\n\tlenMsg := len(msg)\n\tfor i := 0; i < lenMsg; i++ {\n\t\tif msg[i] == percentByte && i+2 < lenMsg {\n\t\t\treturn decodeGrpcMessageUnchecked(msg)\n\t\t}\n\t}\n\treturn msg\n}\n\nfunc decodeGrpcMessageUnchecked(msg string) string {\n\tvar buf bytes.Buffer\n\tlenMsg := len(msg)\n\tfor i := 0; i < lenMsg; i++ {\n\t\tc := msg[i]\n\t\tif c == percentByte && i+2 < lenMsg {\n\t\t\tparsed, err := strconv.ParseUint(msg[i+1:i+3], 16, 8)\n\t\t\tif err != nil {\n\t\t\t\tbuf.WriteByte(c)\n\t\t\t} else {\n\t\t\t\tbuf.WriteByte(byte(parsed))\n\t\t\t\ti += 2\n\t\t\t}\n\t\t} else {\n\t\t\tbuf.WriteByte(c)\n\t\t}\n\t}\n\treturn buf.String()\n}\n\ntype bufWriter struct {\n\tbuf       []byte\n\toffset    int\n\tbatchSize int\n\tconn      net.Conn\n\terr       error\n\n\tonFlush func()\n}\n\nfunc newBufWriter(conn net.Conn, batchSize int) *bufWriter {\n\treturn &bufWriter{\n\t\tbuf:       make([]byte, batchSize*2),\n\t\tbatchSize: batchSize,\n\t\tconn:      conn,\n\t}\n}\n\nfunc (w *bufWriter) Write(b []byte) (n int, err error) {\n\tif w.err != nil {\n\t\treturn 0, w.err\n\t}\n\tif w.batchSize == 0 { // Buffer has been disabled.\n\t\treturn w.conn.Write(b)\n\t}\n\tfor len(b) > 0 {\n\t\tnn := copy(w.buf[w.offset:], b)\n\t\tb = b[nn:]\n\t\tw.offset += nn\n\t\tn += nn\n\t\tif w.offset >= w.batchSize {\n\t\t\terr = w.Flush()\n\t\t}\n\t}\n\treturn n, err\n}\n\nfunc (w *bufWriter) Flush() error {\n\tif w.err != nil {\n\t\treturn w.err\n\t}\n\tif w.offset == 0 {\n\t\treturn nil\n\t}\n\tif w.onFlush != nil {\n\t\tw.onFlush()\n\t}\n\t_, w.err = w.conn.Write(w.buf[:w.offset])\n\tw.offset = 0\n\treturn w.err\n}\n\ntype framer struct {\n\twriter *bufWriter\n\tfr     *http2.Framer\n}\n\nfunc newFramer(conn net.Conn, writeBufferSize, readBufferSize int, maxHeaderListSize uint32) *framer {\n\tif writeBufferSize < 0 {\n\t\twriteBufferSize = 0\n\t}\n\tvar r io.Reader = conn\n\tif readBufferSize > 0 {\n\t\tr = bufio.NewReaderSize(r, readBufferSize)\n\t}\n\tw := newBufWriter(conn, writeBufferSize)\n\tf := &framer{\n\t\twriter: w,\n\t\tfr:     http2.NewFramer(w, r),\n\t}\n\t// Opt-in to Frame reuse API on framer to reduce garbage.\n\t// Frames aren't safe to read from after a subsequent call to ReadFrame.\n\tf.fr.SetReuseFrames()\n\tf.fr.MaxHeaderListSize = maxHeaderListSize\n\tf.fr.ReadMetaHeaders = hpack.NewDecoder(http2InitHeaderTableSize, nil)\n\treturn f\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/internal/transport/log.go",
    "content": "/*\n *\n * Copyright 2017 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n// This file contains wrappers for grpclog functions.\n// The transport package only logs to verbose level 2 by default.\n\npackage transport\n\nimport \"google.golang.org/grpc/grpclog\"\n\nconst logLevel = 2\n\nfunc infof(format string, args ...interface{}) {\n\tif grpclog.V(logLevel) {\n\t\tgrpclog.Infof(format, args...)\n\t}\n}\n\nfunc warningf(format string, args ...interface{}) {\n\tif grpclog.V(logLevel) {\n\t\tgrpclog.Warningf(format, args...)\n\t}\n}\n\nfunc errorf(format string, args ...interface{}) {\n\tif grpclog.V(logLevel) {\n\t\tgrpclog.Errorf(format, args...)\n\t}\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/internal/transport/transport.go",
    "content": "/*\n *\n * Copyright 2014 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n// Package transport defines and implements message oriented communication\n// channel to complete various transactions (e.g., an RPC).  It is meant for\n// grpc-internal usage and is not intended to be imported directly by users.\npackage transport\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net\"\n\t\"sync\"\n\t\"sync/atomic\"\n\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/credentials\"\n\t\"google.golang.org/grpc/keepalive\"\n\t\"google.golang.org/grpc/metadata\"\n\t\"google.golang.org/grpc/stats\"\n\t\"google.golang.org/grpc/status\"\n\t\"google.golang.org/grpc/tap\"\n)\n\n// recvMsg represents the received msg from the transport. All transport\n// protocol specific info has been removed.\ntype recvMsg struct {\n\tdata []byte\n\t// nil: received some data\n\t// io.EOF: stream is completed. data is nil.\n\t// other non-nil error: transport failure. data is nil.\n\terr error\n}\n\n// recvBuffer is an unbounded channel of recvMsg structs.\n// Note recvBuffer differs from controlBuffer only in that recvBuffer\n// holds a channel of only recvMsg structs instead of objects implementing \"item\" interface.\n// recvBuffer is written to much more often than\n// controlBuffer and using strict recvMsg structs helps avoid allocation in \"recvBuffer.put\"\ntype recvBuffer struct {\n\tc       chan recvMsg\n\tmu      sync.Mutex\n\tbacklog []recvMsg\n\terr     error\n}\n\nfunc newRecvBuffer() *recvBuffer {\n\tb := &recvBuffer{\n\t\tc: make(chan recvMsg, 1),\n\t}\n\treturn b\n}\n\nfunc (b *recvBuffer) put(r recvMsg) {\n\tb.mu.Lock()\n\tif b.err != nil {\n\t\tb.mu.Unlock()\n\t\t// An error had occurred earlier, don't accept more\n\t\t// data or errors.\n\t\treturn\n\t}\n\tb.err = r.err\n\tif len(b.backlog) == 0 {\n\t\tselect {\n\t\tcase b.c <- r:\n\t\t\tb.mu.Unlock()\n\t\t\treturn\n\t\tdefault:\n\t\t}\n\t}\n\tb.backlog = append(b.backlog, r)\n\tb.mu.Unlock()\n}\n\nfunc (b *recvBuffer) load() {\n\tb.mu.Lock()\n\tif len(b.backlog) > 0 {\n\t\tselect {\n\t\tcase b.c <- b.backlog[0]:\n\t\t\tb.backlog[0] = recvMsg{}\n\t\t\tb.backlog = b.backlog[1:]\n\t\tdefault:\n\t\t}\n\t}\n\tb.mu.Unlock()\n}\n\n// get returns the channel that receives a recvMsg in the buffer.\n//\n// Upon receipt of a recvMsg, the caller should call load to send another\n// recvMsg onto the channel if there is any.\nfunc (b *recvBuffer) get() <-chan recvMsg {\n\treturn b.c\n}\n\n// recvBufferReader implements io.Reader interface to read the data from\n// recvBuffer.\ntype recvBufferReader struct {\n\tcloseStream func(error) // Closes the client transport stream with the given error and nil trailer metadata.\n\tctx         context.Context\n\tctxDone     <-chan struct{} // cache of ctx.Done() (for performance).\n\trecv        *recvBuffer\n\tlast        []byte // Stores the remaining data in the previous calls.\n\terr         error\n}\n\n// Read reads the next len(p) bytes from last. If last is drained, it tries to\n// read additional data from recv. It blocks if there no additional data available\n// in recv. If Read returns any non-nil error, it will continue to return that error.\nfunc (r *recvBufferReader) Read(p []byte) (n int, err error) {\n\tif r.err != nil {\n\t\treturn 0, r.err\n\t}\n\tif r.last != nil && len(r.last) > 0 {\n\t\t// Read remaining data left in last call.\n\t\tcopied := copy(p, r.last)\n\t\tr.last = r.last[copied:]\n\t\treturn copied, nil\n\t}\n\tif r.closeStream != nil {\n\t\tn, r.err = r.readClient(p)\n\t} else {\n\t\tn, r.err = r.read(p)\n\t}\n\treturn n, r.err\n}\n\nfunc (r *recvBufferReader) read(p []byte) (n int, err error) {\n\tselect {\n\tcase <-r.ctxDone:\n\t\treturn 0, ContextErr(r.ctx.Err())\n\tcase m := <-r.recv.get():\n\t\treturn r.readAdditional(m, p)\n\t}\n}\n\nfunc (r *recvBufferReader) readClient(p []byte) (n int, err error) {\n\t// If the context is canceled, then closes the stream with nil metadata.\n\t// closeStream writes its error parameter to r.recv as a recvMsg.\n\t// r.readAdditional acts on that message and returns the necessary error.\n\tselect {\n\tcase <-r.ctxDone:\n\t\tr.closeStream(ContextErr(r.ctx.Err()))\n\t\tm := <-r.recv.get()\n\t\treturn r.readAdditional(m, p)\n\tcase m := <-r.recv.get():\n\t\treturn r.readAdditional(m, p)\n\t}\n}\n\nfunc (r *recvBufferReader) readAdditional(m recvMsg, p []byte) (n int, err error) {\n\tr.recv.load()\n\tif m.err != nil {\n\t\treturn 0, m.err\n\t}\n\tcopied := copy(p, m.data)\n\tr.last = m.data[copied:]\n\treturn copied, nil\n}\n\ntype streamState uint32\n\nconst (\n\tstreamActive    streamState = iota\n\tstreamWriteDone             // EndStream sent\n\tstreamReadDone              // EndStream received\n\tstreamDone                  // the entire stream is finished.\n)\n\n// Stream represents an RPC in the transport layer.\ntype Stream struct {\n\tid           uint32\n\tst           ServerTransport    // nil for client side Stream\n\tctx          context.Context    // the associated context of the stream\n\tcancel       context.CancelFunc // always nil for client side Stream\n\tdone         chan struct{}      // closed at the end of stream to unblock writers. On the client side.\n\tctxDone      <-chan struct{}    // same as done chan but for server side. Cache of ctx.Done() (for performance)\n\tmethod       string             // the associated RPC method of the stream\n\trecvCompress string\n\tsendCompress string\n\tbuf          *recvBuffer\n\ttrReader     io.Reader\n\tfc           *inFlow\n\twq           *writeQuota\n\n\t// Callback to state application's intentions to read data. This\n\t// is used to adjust flow control, if needed.\n\trequestRead func(int)\n\n\theaderChan       chan struct{} // closed to indicate the end of header metadata.\n\theaderChanClosed uint32        // set when headerChan is closed. Used to avoid closing headerChan multiple times.\n\n\t// hdrMu protects header and trailer metadata on the server-side.\n\thdrMu sync.Mutex\n\t// On client side, header keeps the received header metadata.\n\t//\n\t// On server side, header keeps the header set by SetHeader(). The complete\n\t// header will merged into this after t.WriteHeader() is called.\n\theader  metadata.MD\n\ttrailer metadata.MD // the key-value map of trailer metadata.\n\n\tnoHeaders bool // set if the client never received headers (set only after the stream is done).\n\n\t// On the server-side, headerSent is atomically set to 1 when the headers are sent out.\n\theaderSent uint32\n\n\tstate streamState\n\n\t// On client-side it is the status error received from the server.\n\t// On server-side it is unused.\n\tstatus *status.Status\n\n\tbytesReceived uint32 // indicates whether any bytes have been received on this stream\n\tunprocessed   uint32 // set if the server sends a refused stream or GOAWAY including this stream\n\n\t// contentSubtype is the content-subtype for requests.\n\t// this must be lowercase or the behavior is undefined.\n\tcontentSubtype string\n}\n\n// isHeaderSent is only valid on the server-side.\nfunc (s *Stream) isHeaderSent() bool {\n\treturn atomic.LoadUint32(&s.headerSent) == 1\n}\n\n// updateHeaderSent updates headerSent and returns true\n// if it was alreay set. It is valid only on server-side.\nfunc (s *Stream) updateHeaderSent() bool {\n\treturn atomic.SwapUint32(&s.headerSent, 1) == 1\n}\n\nfunc (s *Stream) swapState(st streamState) streamState {\n\treturn streamState(atomic.SwapUint32((*uint32)(&s.state), uint32(st)))\n}\n\nfunc (s *Stream) compareAndSwapState(oldState, newState streamState) bool {\n\treturn atomic.CompareAndSwapUint32((*uint32)(&s.state), uint32(oldState), uint32(newState))\n}\n\nfunc (s *Stream) getState() streamState {\n\treturn streamState(atomic.LoadUint32((*uint32)(&s.state)))\n}\n\nfunc (s *Stream) waitOnHeader() error {\n\tif s.headerChan == nil {\n\t\t// On the server headerChan is always nil since a stream originates\n\t\t// only after having received headers.\n\t\treturn nil\n\t}\n\tselect {\n\tcase <-s.ctx.Done():\n\t\treturn ContextErr(s.ctx.Err())\n\tcase <-s.headerChan:\n\t\treturn nil\n\t}\n}\n\n// RecvCompress returns the compression algorithm applied to the inbound\n// message. It is empty string if there is no compression applied.\nfunc (s *Stream) RecvCompress() string {\n\tif err := s.waitOnHeader(); err != nil {\n\t\treturn \"\"\n\t}\n\treturn s.recvCompress\n}\n\n// SetSendCompress sets the compression algorithm to the stream.\nfunc (s *Stream) SetSendCompress(str string) {\n\ts.sendCompress = str\n}\n\n// Done returns a channel which is closed when it receives the final status\n// from the server.\nfunc (s *Stream) Done() <-chan struct{} {\n\treturn s.done\n}\n\n// Header returns the header metadata of the stream.\n//\n// On client side, it acquires the key-value pairs of header metadata once it is\n// available. It blocks until i) the metadata is ready or ii) there is no header\n// metadata or iii) the stream is canceled/expired.\n//\n// On server side, it returns the out header after t.WriteHeader is called.\nfunc (s *Stream) Header() (metadata.MD, error) {\n\tif s.headerChan == nil && s.header != nil {\n\t\t// On server side, return the header in stream. It will be the out\n\t\t// header after t.WriteHeader is called.\n\t\treturn s.header.Copy(), nil\n\t}\n\terr := s.waitOnHeader()\n\t// Even if the stream is closed, header is returned if available.\n\tselect {\n\tcase <-s.headerChan:\n\t\tif s.header == nil {\n\t\t\treturn nil, nil\n\t\t}\n\t\treturn s.header.Copy(), nil\n\tdefault:\n\t}\n\treturn nil, err\n}\n\n// TrailersOnly blocks until a header or trailers-only frame is received and\n// then returns true if the stream was trailers-only.  If the stream ends\n// before headers are received, returns true, nil.  If a context error happens\n// first, returns it as a status error.  Client-side only.\nfunc (s *Stream) TrailersOnly() (bool, error) {\n\terr := s.waitOnHeader()\n\tif err != nil {\n\t\treturn false, err\n\t}\n\treturn s.noHeaders, nil\n}\n\n// Trailer returns the cached trailer metedata. Note that if it is not called\n// after the entire stream is done, it could return an empty MD. Client\n// side only.\n// It can be safely read only after stream has ended that is either read\n// or write have returned io.EOF.\nfunc (s *Stream) Trailer() metadata.MD {\n\tc := s.trailer.Copy()\n\treturn c\n}\n\n// ContentSubtype returns the content-subtype for a request. For example, a\n// content-subtype of \"proto\" will result in a content-type of\n// \"application/grpc+proto\". This will always be lowercase.  See\n// https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md#requests for\n// more details.\nfunc (s *Stream) ContentSubtype() string {\n\treturn s.contentSubtype\n}\n\n// Context returns the context of the stream.\nfunc (s *Stream) Context() context.Context {\n\treturn s.ctx\n}\n\n// Method returns the method for the stream.\nfunc (s *Stream) Method() string {\n\treturn s.method\n}\n\n// Status returns the status received from the server.\n// Status can be read safely only after the stream has ended,\n// that is, after Done() is closed.\nfunc (s *Stream) Status() *status.Status {\n\treturn s.status\n}\n\n// SetHeader sets the header metadata. This can be called multiple times.\n// Server side only.\n// This should not be called in parallel to other data writes.\nfunc (s *Stream) SetHeader(md metadata.MD) error {\n\tif md.Len() == 0 {\n\t\treturn nil\n\t}\n\tif s.isHeaderSent() || s.getState() == streamDone {\n\t\treturn ErrIllegalHeaderWrite\n\t}\n\ts.hdrMu.Lock()\n\ts.header = metadata.Join(s.header, md)\n\ts.hdrMu.Unlock()\n\treturn nil\n}\n\n// SendHeader sends the given header metadata. The given metadata is\n// combined with any metadata set by previous calls to SetHeader and\n// then written to the transport stream.\nfunc (s *Stream) SendHeader(md metadata.MD) error {\n\treturn s.st.WriteHeader(s, md)\n}\n\n// SetTrailer sets the trailer metadata which will be sent with the RPC status\n// by the server. This can be called multiple times. Server side only.\n// This should not be called parallel to other data writes.\nfunc (s *Stream) SetTrailer(md metadata.MD) error {\n\tif md.Len() == 0 {\n\t\treturn nil\n\t}\n\tif s.getState() == streamDone {\n\t\treturn ErrIllegalHeaderWrite\n\t}\n\ts.hdrMu.Lock()\n\ts.trailer = metadata.Join(s.trailer, md)\n\ts.hdrMu.Unlock()\n\treturn nil\n}\n\nfunc (s *Stream) write(m recvMsg) {\n\ts.buf.put(m)\n}\n\n// Read reads all p bytes from the wire for this stream.\nfunc (s *Stream) Read(p []byte) (n int, err error) {\n\t// Don't request a read if there was an error earlier\n\tif er := s.trReader.(*transportReader).er; er != nil {\n\t\treturn 0, er\n\t}\n\ts.requestRead(len(p))\n\treturn io.ReadFull(s.trReader, p)\n}\n\n// tranportReader reads all the data available for this Stream from the transport and\n// passes them into the decoder, which converts them into a gRPC message stream.\n// The error is io.EOF when the stream is done or another non-nil error if\n// the stream broke.\ntype transportReader struct {\n\treader io.Reader\n\t// The handler to control the window update procedure for both this\n\t// particular stream and the associated transport.\n\twindowHandler func(int)\n\ter            error\n}\n\nfunc (t *transportReader) Read(p []byte) (n int, err error) {\n\tn, err = t.reader.Read(p)\n\tif err != nil {\n\t\tt.er = err\n\t\treturn\n\t}\n\tt.windowHandler(n)\n\treturn\n}\n\n// BytesReceived indicates whether any bytes have been received on this stream.\nfunc (s *Stream) BytesReceived() bool {\n\treturn atomic.LoadUint32(&s.bytesReceived) == 1\n}\n\n// Unprocessed indicates whether the server did not process this stream --\n// i.e. it sent a refused stream or GOAWAY including this stream ID.\nfunc (s *Stream) Unprocessed() bool {\n\treturn atomic.LoadUint32(&s.unprocessed) == 1\n}\n\n// GoString is implemented by Stream so context.String() won't\n// race when printing %#v.\nfunc (s *Stream) GoString() string {\n\treturn fmt.Sprintf(\"<stream: %p, %v>\", s, s.method)\n}\n\n// state of transport\ntype transportState int\n\nconst (\n\treachable transportState = iota\n\tclosing\n\tdraining\n)\n\n// ServerConfig consists of all the configurations to establish a server transport.\ntype ServerConfig struct {\n\tMaxStreams            uint32\n\tAuthInfo              credentials.AuthInfo\n\tInTapHandle           tap.ServerInHandle\n\tStatsHandler          stats.Handler\n\tKeepaliveParams       keepalive.ServerParameters\n\tKeepalivePolicy       keepalive.EnforcementPolicy\n\tInitialWindowSize     int32\n\tInitialConnWindowSize int32\n\tWriteBufferSize       int\n\tReadBufferSize        int\n\tChannelzParentID      int64\n\tMaxHeaderListSize     *uint32\n}\n\n// NewServerTransport creates a ServerTransport with conn or non-nil error\n// if it fails.\nfunc NewServerTransport(protocol string, conn net.Conn, config *ServerConfig) (ServerTransport, error) {\n\treturn newHTTP2Server(conn, config)\n}\n\n// ConnectOptions covers all relevant options for communicating with the server.\ntype ConnectOptions struct {\n\t// UserAgent is the application user agent.\n\tUserAgent string\n\t// Dialer specifies how to dial a network address.\n\tDialer func(context.Context, string) (net.Conn, error)\n\t// FailOnNonTempDialError specifies if gRPC fails on non-temporary dial errors.\n\tFailOnNonTempDialError bool\n\t// PerRPCCredentials stores the PerRPCCredentials required to issue RPCs.\n\tPerRPCCredentials []credentials.PerRPCCredentials\n\t// TransportCredentials stores the Authenticator required to setup a client\n\t// connection. Only one of TransportCredentials and CredsBundle is non-nil.\n\tTransportCredentials credentials.TransportCredentials\n\t// CredsBundle is the credentials bundle to be used. Only one of\n\t// TransportCredentials and CredsBundle is non-nil.\n\tCredsBundle credentials.Bundle\n\t// KeepaliveParams stores the keepalive parameters.\n\tKeepaliveParams keepalive.ClientParameters\n\t// StatsHandler stores the handler for stats.\n\tStatsHandler stats.Handler\n\t// InitialWindowSize sets the initial window size for a stream.\n\tInitialWindowSize int32\n\t// InitialConnWindowSize sets the initial window size for a connection.\n\tInitialConnWindowSize int32\n\t// WriteBufferSize sets the size of write buffer which in turn determines how much data can be batched before it's written on the wire.\n\tWriteBufferSize int\n\t// ReadBufferSize sets the size of read buffer, which in turn determines how much data can be read at most for one read syscall.\n\tReadBufferSize int\n\t// ChannelzParentID sets the addrConn id which initiate the creation of this client transport.\n\tChannelzParentID int64\n\t// MaxHeaderListSize sets the max (uncompressed) size of header list that is prepared to be received.\n\tMaxHeaderListSize *uint32\n}\n\n// TargetInfo contains the information of the target such as network address and metadata.\ntype TargetInfo struct {\n\tAddr      string\n\tMetadata  interface{}\n\tAuthority string\n}\n\n// NewClientTransport establishes the transport with the required ConnectOptions\n// and returns it to the caller.\nfunc NewClientTransport(connectCtx, ctx context.Context, target TargetInfo, opts ConnectOptions, onPrefaceReceipt func(), onGoAway func(GoAwayReason), onClose func()) (ClientTransport, error) {\n\treturn newHTTP2Client(connectCtx, ctx, target, opts, onPrefaceReceipt, onGoAway, onClose)\n}\n\n// Options provides additional hints and information for message\n// transmission.\ntype Options struct {\n\t// Last indicates whether this write is the last piece for\n\t// this stream.\n\tLast bool\n}\n\n// CallHdr carries the information of a particular RPC.\ntype CallHdr struct {\n\t// Host specifies the peer's host.\n\tHost string\n\n\t// Method specifies the operation to perform.\n\tMethod string\n\n\t// SendCompress specifies the compression algorithm applied on\n\t// outbound message.\n\tSendCompress string\n\n\t// Creds specifies credentials.PerRPCCredentials for a call.\n\tCreds credentials.PerRPCCredentials\n\n\t// ContentSubtype specifies the content-subtype for a request. For example, a\n\t// content-subtype of \"proto\" will result in a content-type of\n\t// \"application/grpc+proto\". The value of ContentSubtype must be all\n\t// lowercase, otherwise the behavior is undefined. See\n\t// https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md#requests\n\t// for more details.\n\tContentSubtype string\n\n\tPreviousAttempts int // value of grpc-previous-rpc-attempts header to set\n}\n\n// ClientTransport is the common interface for all gRPC client-side transport\n// implementations.\ntype ClientTransport interface {\n\t// Close tears down this transport. Once it returns, the transport\n\t// should not be accessed any more. The caller must make sure this\n\t// is called only once.\n\tClose() error\n\n\t// GracefulClose starts to tear down the transport: the transport will stop\n\t// accepting new RPCs and NewStream will return error. Once all streams are\n\t// finished, the transport will close.\n\t//\n\t// It does not block.\n\tGracefulClose()\n\n\t// Write sends the data for the given stream. A nil stream indicates\n\t// the write is to be performed on the transport as a whole.\n\tWrite(s *Stream, hdr []byte, data []byte, opts *Options) error\n\n\t// NewStream creates a Stream for an RPC.\n\tNewStream(ctx context.Context, callHdr *CallHdr) (*Stream, error)\n\n\t// CloseStream clears the footprint of a stream when the stream is\n\t// not needed any more. The err indicates the error incurred when\n\t// CloseStream is called. Must be called when a stream is finished\n\t// unless the associated transport is closing.\n\tCloseStream(stream *Stream, err error)\n\n\t// Error returns a channel that is closed when some I/O error\n\t// happens. Typically the caller should have a goroutine to monitor\n\t// this in order to take action (e.g., close the current transport\n\t// and create a new one) in error case. It should not return nil\n\t// once the transport is initiated.\n\tError() <-chan struct{}\n\n\t// GoAway returns a channel that is closed when ClientTransport\n\t// receives the draining signal from the server (e.g., GOAWAY frame in\n\t// HTTP/2).\n\tGoAway() <-chan struct{}\n\n\t// GetGoAwayReason returns the reason why GoAway frame was received.\n\tGetGoAwayReason() GoAwayReason\n\n\t// RemoteAddr returns the remote network address.\n\tRemoteAddr() net.Addr\n\n\t// IncrMsgSent increments the number of message sent through this transport.\n\tIncrMsgSent()\n\n\t// IncrMsgRecv increments the number of message received through this transport.\n\tIncrMsgRecv()\n}\n\n// ServerTransport is the common interface for all gRPC server-side transport\n// implementations.\n//\n// Methods may be called concurrently from multiple goroutines, but\n// Write methods for a given Stream will be called serially.\ntype ServerTransport interface {\n\t// HandleStreams receives incoming streams using the given handler.\n\tHandleStreams(func(*Stream), func(context.Context, string) context.Context)\n\n\t// WriteHeader sends the header metadata for the given stream.\n\t// WriteHeader may not be called on all streams.\n\tWriteHeader(s *Stream, md metadata.MD) error\n\n\t// Write sends the data for the given stream.\n\t// Write may not be called on all streams.\n\tWrite(s *Stream, hdr []byte, data []byte, opts *Options) error\n\n\t// WriteStatus sends the status of a stream to the client.  WriteStatus is\n\t// the final call made on a stream and always occurs.\n\tWriteStatus(s *Stream, st *status.Status) error\n\n\t// Close tears down the transport. Once it is called, the transport\n\t// should not be accessed any more. All the pending streams and their\n\t// handlers will be terminated asynchronously.\n\tClose() error\n\n\t// RemoteAddr returns the remote network address.\n\tRemoteAddr() net.Addr\n\n\t// Drain notifies the client this ServerTransport stops accepting new RPCs.\n\tDrain()\n\n\t// IncrMsgSent increments the number of message sent through this transport.\n\tIncrMsgSent()\n\n\t// IncrMsgRecv increments the number of message received through this transport.\n\tIncrMsgRecv()\n}\n\n// connectionErrorf creates an ConnectionError with the specified error description.\nfunc connectionErrorf(temp bool, e error, format string, a ...interface{}) ConnectionError {\n\treturn ConnectionError{\n\t\tDesc: fmt.Sprintf(format, a...),\n\t\ttemp: temp,\n\t\terr:  e,\n\t}\n}\n\n// ConnectionError is an error that results in the termination of the\n// entire connection and the retry of all the active streams.\ntype ConnectionError struct {\n\tDesc string\n\ttemp bool\n\terr  error\n}\n\nfunc (e ConnectionError) Error() string {\n\treturn fmt.Sprintf(\"connection error: desc = %q\", e.Desc)\n}\n\n// Temporary indicates if this connection error is temporary or fatal.\nfunc (e ConnectionError) Temporary() bool {\n\treturn e.temp\n}\n\n// Origin returns the original error of this connection error.\nfunc (e ConnectionError) Origin() error {\n\t// Never return nil error here.\n\t// If the original error is nil, return itself.\n\tif e.err == nil {\n\t\treturn e\n\t}\n\treturn e.err\n}\n\nvar (\n\t// ErrConnClosing indicates that the transport is closing.\n\tErrConnClosing = connectionErrorf(true, nil, \"transport is closing\")\n\t// errStreamDrain indicates that the stream is rejected because the\n\t// connection is draining. This could be caused by goaway or balancer\n\t// removing the address.\n\terrStreamDrain = status.Error(codes.Unavailable, \"the connection is draining\")\n\t// errStreamDone is returned from write at the client side to indiacte application\n\t// layer of an error.\n\terrStreamDone = errors.New(\"the stream is done\")\n\t// StatusGoAway indicates that the server sent a GOAWAY that included this\n\t// stream's ID in unprocessed RPCs.\n\tstatusGoAway = status.New(codes.Unavailable, \"the stream is rejected because server is draining the connection\")\n)\n\n// GoAwayReason contains the reason for the GoAway frame received.\ntype GoAwayReason uint8\n\nconst (\n\t// GoAwayInvalid indicates that no GoAway frame is received.\n\tGoAwayInvalid GoAwayReason = 0\n\t// GoAwayNoReason is the default value when GoAway frame is received.\n\tGoAwayNoReason GoAwayReason = 1\n\t// GoAwayTooManyPings indicates that a GoAway frame with\n\t// ErrCodeEnhanceYourCalm was received and that the debug data said\n\t// \"too_many_pings\".\n\tGoAwayTooManyPings GoAwayReason = 2\n)\n\n// channelzData is used to store channelz related data for http2Client and http2Server.\n// These fields cannot be embedded in the original structs (e.g. http2Client), since to do atomic\n// operation on int64 variable on 32-bit machine, user is responsible to enforce memory alignment.\n// Here, by grouping those int64 fields inside a struct, we are enforcing the alignment.\ntype channelzData struct {\n\tkpCount int64\n\t// The number of streams that have started, including already finished ones.\n\tstreamsStarted int64\n\t// Client side: The number of streams that have ended successfully by receiving\n\t// EoS bit set frame from server.\n\t// Server side: The number of streams that have ended successfully by sending\n\t// frame with EoS bit set.\n\tstreamsSucceeded int64\n\tstreamsFailed    int64\n\t// lastStreamCreatedTime stores the timestamp that the last stream gets created. It is of int64 type\n\t// instead of time.Time since it's more costly to atomically update time.Time variable than int64\n\t// variable. The same goes for lastMsgSentTime and lastMsgRecvTime.\n\tlastStreamCreatedTime int64\n\tmsgSent               int64\n\tmsgRecv               int64\n\tlastMsgSentTime       int64\n\tlastMsgRecvTime       int64\n}\n\n// ContextErr converts the error from context package into a status error.\nfunc ContextErr(err error) error {\n\tswitch err {\n\tcase context.DeadlineExceeded:\n\t\treturn status.Error(codes.DeadlineExceeded, err.Error())\n\tcase context.Canceled:\n\t\treturn status.Error(codes.Canceled, err.Error())\n\t}\n\treturn status.Errorf(codes.Internal, \"Unexpected error from context packet: %v\", err)\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/keepalive/keepalive.go",
    "content": "/*\n *\n * Copyright 2017 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n// Package keepalive defines configurable parameters for point-to-point\n// healthcheck.\npackage keepalive\n\nimport (\n\t\"time\"\n)\n\n// ClientParameters is used to set keepalive parameters on the client-side.\n// These configure how the client will actively probe to notice when a\n// connection is broken and send pings so intermediaries will be aware of the\n// liveness of the connection. Make sure these parameters are set in\n// coordination with the keepalive policy on the server, as incompatible\n// settings can result in closing of connection.\ntype ClientParameters struct {\n\t// After a duration of this time if the client doesn't see any activity it\n\t// pings the server to see if the transport is still alive.\n\t// If set below 10s, a minimum value of 10s will be used instead.\n\tTime time.Duration // The current default value is infinity.\n\t// After having pinged for keepalive check, the client waits for a duration\n\t// of Timeout and if no activity is seen even after that the connection is\n\t// closed.\n\tTimeout time.Duration // The current default value is 20 seconds.\n\t// If true, client sends keepalive pings even with no active RPCs. If false,\n\t// when there are no active RPCs, Time and Timeout will be ignored and no\n\t// keepalive pings will be sent.\n\tPermitWithoutStream bool // false by default.\n}\n\n// ServerParameters is used to set keepalive and max-age parameters on the\n// server-side.\ntype ServerParameters struct {\n\t// MaxConnectionIdle is a duration for the amount of time after which an\n\t// idle connection would be closed by sending a GoAway. Idleness duration is\n\t// defined since the most recent time the number of outstanding RPCs became\n\t// zero or the connection establishment.\n\tMaxConnectionIdle time.Duration // The current default value is infinity.\n\t// MaxConnectionAge is a duration for the maximum amount of time a\n\t// connection may exist before it will be closed by sending a GoAway. A\n\t// random jitter of +/-10% will be added to MaxConnectionAge to spread out\n\t// connection storms.\n\tMaxConnectionAge time.Duration // The current default value is infinity.\n\t// MaxConnectionAgeGrace is an additive period after MaxConnectionAge after\n\t// which the connection will be forcibly closed.\n\tMaxConnectionAgeGrace time.Duration // The current default value is infinity.\n\t// After a duration of this time if the server doesn't see any activity it\n\t// pings the client to see if the transport is still alive.\n\t// If set below 1s, a minimum value of 1s will be used instead.\n\tTime time.Duration // The current default value is 2 hours.\n\t// After having pinged for keepalive check, the server waits for a duration\n\t// of Timeout and if no activity is seen even after that the connection is\n\t// closed.\n\tTimeout time.Duration // The current default value is 20 seconds.\n}\n\n// EnforcementPolicy is used to set keepalive enforcement policy on the\n// server-side. Server will close connection with a client that violates this\n// policy.\ntype EnforcementPolicy struct {\n\t// MinTime is the minimum amount of time a client should wait before sending\n\t// a keepalive ping.\n\tMinTime time.Duration // The current default value is 5 minutes.\n\t// If true, server allows keepalive pings even when there are no active\n\t// streams(RPCs). If false, and client sends ping when there are no active\n\t// streams, server will send GOAWAY and close the connection.\n\tPermitWithoutStream bool // false by default.\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/metadata/metadata.go",
    "content": "/*\n *\n * Copyright 2014 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n// Package metadata define the structure of the metadata supported by gRPC library.\n// Please refer to https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md\n// for more information about custom-metadata.\npackage metadata // import \"google.golang.org/grpc/metadata\"\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"strings\"\n)\n\n// DecodeKeyValue returns k, v, nil.\n//\n// Deprecated: use k and v directly instead.\nfunc DecodeKeyValue(k, v string) (string, string, error) {\n\treturn k, v, nil\n}\n\n// MD is a mapping from metadata keys to values. Users should use the following\n// two convenience functions New and Pairs to generate MD.\ntype MD map[string][]string\n\n// New creates an MD from a given key-value map.\n//\n// Only the following ASCII characters are allowed in keys:\n//  - digits: 0-9\n//  - uppercase letters: A-Z (normalized to lower)\n//  - lowercase letters: a-z\n//  - special characters: -_.\n// Uppercase letters are automatically converted to lowercase.\n//\n// Keys beginning with \"grpc-\" are reserved for grpc-internal use only and may\n// result in errors if set in metadata.\nfunc New(m map[string]string) MD {\n\tmd := MD{}\n\tfor k, val := range m {\n\t\tkey := strings.ToLower(k)\n\t\tmd[key] = append(md[key], val)\n\t}\n\treturn md\n}\n\n// Pairs returns an MD formed by the mapping of key, value ...\n// Pairs panics if len(kv) is odd.\n//\n// Only the following ASCII characters are allowed in keys:\n//  - digits: 0-9\n//  - uppercase letters: A-Z (normalized to lower)\n//  - lowercase letters: a-z\n//  - special characters: -_.\n// Uppercase letters are automatically converted to lowercase.\n//\n// Keys beginning with \"grpc-\" are reserved for grpc-internal use only and may\n// result in errors if set in metadata.\nfunc Pairs(kv ...string) MD {\n\tif len(kv)%2 == 1 {\n\t\tpanic(fmt.Sprintf(\"metadata: Pairs got the odd number of input pairs for metadata: %d\", len(kv)))\n\t}\n\tmd := MD{}\n\tvar key string\n\tfor i, s := range kv {\n\t\tif i%2 == 0 {\n\t\t\tkey = strings.ToLower(s)\n\t\t\tcontinue\n\t\t}\n\t\tmd[key] = append(md[key], s)\n\t}\n\treturn md\n}\n\n// Len returns the number of items in md.\nfunc (md MD) Len() int {\n\treturn len(md)\n}\n\n// Copy returns a copy of md.\nfunc (md MD) Copy() MD {\n\treturn Join(md)\n}\n\n// Get obtains the values for a given key.\nfunc (md MD) Get(k string) []string {\n\tk = strings.ToLower(k)\n\treturn md[k]\n}\n\n// Set sets the value of a given key with a slice of values.\nfunc (md MD) Set(k string, vals ...string) {\n\tif len(vals) == 0 {\n\t\treturn\n\t}\n\tk = strings.ToLower(k)\n\tmd[k] = vals\n}\n\n// Append adds the values to key k, not overwriting what was already stored at that key.\nfunc (md MD) Append(k string, vals ...string) {\n\tif len(vals) == 0 {\n\t\treturn\n\t}\n\tk = strings.ToLower(k)\n\tmd[k] = append(md[k], vals...)\n}\n\n// Join joins any number of mds into a single MD.\n// The order of values for each key is determined by the order in which\n// the mds containing those values are presented to Join.\nfunc Join(mds ...MD) MD {\n\tout := MD{}\n\tfor _, md := range mds {\n\t\tfor k, v := range md {\n\t\t\tout[k] = append(out[k], v...)\n\t\t}\n\t}\n\treturn out\n}\n\ntype mdIncomingKey struct{}\ntype mdOutgoingKey struct{}\n\n// NewIncomingContext creates a new context with incoming md attached.\nfunc NewIncomingContext(ctx context.Context, md MD) context.Context {\n\treturn context.WithValue(ctx, mdIncomingKey{}, md)\n}\n\n// NewOutgoingContext creates a new context with outgoing md attached. If used\n// in conjunction with AppendToOutgoingContext, NewOutgoingContext will\n// overwrite any previously-appended metadata.\nfunc NewOutgoingContext(ctx context.Context, md MD) context.Context {\n\treturn context.WithValue(ctx, mdOutgoingKey{}, rawMD{md: md})\n}\n\n// AppendToOutgoingContext returns a new context with the provided kv merged\n// with any existing metadata in the context. Please refer to the\n// documentation of Pairs for a description of kv.\nfunc AppendToOutgoingContext(ctx context.Context, kv ...string) context.Context {\n\tif len(kv)%2 == 1 {\n\t\tpanic(fmt.Sprintf(\"metadata: AppendToOutgoingContext got an odd number of input pairs for metadata: %d\", len(kv)))\n\t}\n\tmd, _ := ctx.Value(mdOutgoingKey{}).(rawMD)\n\tadded := make([][]string, len(md.added)+1)\n\tcopy(added, md.added)\n\tadded[len(added)-1] = make([]string, len(kv))\n\tcopy(added[len(added)-1], kv)\n\treturn context.WithValue(ctx, mdOutgoingKey{}, rawMD{md: md.md, added: added})\n}\n\n// FromIncomingContext returns the incoming metadata in ctx if it exists.  The\n// returned MD should not be modified. Writing to it may cause races.\n// Modification should be made to copies of the returned MD.\nfunc FromIncomingContext(ctx context.Context) (md MD, ok bool) {\n\tmd, ok = ctx.Value(mdIncomingKey{}).(MD)\n\treturn\n}\n\n// FromOutgoingContextRaw returns the un-merged, intermediary contents\n// of rawMD. Remember to perform strings.ToLower on the keys. The returned\n// MD should not be modified. Writing to it may cause races. Modification\n// should be made to copies of the returned MD.\n//\n// This is intended for gRPC-internal use ONLY.\nfunc FromOutgoingContextRaw(ctx context.Context) (MD, [][]string, bool) {\n\traw, ok := ctx.Value(mdOutgoingKey{}).(rawMD)\n\tif !ok {\n\t\treturn nil, nil, false\n\t}\n\n\treturn raw.md, raw.added, true\n}\n\n// FromOutgoingContext returns the outgoing metadata in ctx if it exists.  The\n// returned MD should not be modified. Writing to it may cause races.\n// Modification should be made to copies of the returned MD.\nfunc FromOutgoingContext(ctx context.Context) (MD, bool) {\n\traw, ok := ctx.Value(mdOutgoingKey{}).(rawMD)\n\tif !ok {\n\t\treturn nil, false\n\t}\n\n\tmds := make([]MD, 0, len(raw.added)+1)\n\tmds = append(mds, raw.md)\n\tfor _, vv := range raw.added {\n\t\tmds = append(mds, Pairs(vv...))\n\t}\n\treturn Join(mds...), ok\n}\n\ntype rawMD struct {\n\tmd    MD\n\tadded [][]string\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/naming/dns_resolver.go",
    "content": "/*\n *\n * Copyright 2017 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\npackage naming\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"net\"\n\t\"strconv\"\n\t\"time\"\n\n\t\"google.golang.org/grpc/grpclog\"\n)\n\nconst (\n\tdefaultPort = \"443\"\n\tdefaultFreq = time.Minute * 30\n)\n\nvar (\n\terrMissingAddr  = errors.New(\"missing address\")\n\terrWatcherClose = errors.New(\"watcher has been closed\")\n\n\tlookupHost = net.DefaultResolver.LookupHost\n\tlookupSRV  = net.DefaultResolver.LookupSRV\n)\n\n// NewDNSResolverWithFreq creates a DNS Resolver that can resolve DNS names, and\n// create watchers that poll the DNS server using the frequency set by freq.\nfunc NewDNSResolverWithFreq(freq time.Duration) (Resolver, error) {\n\treturn &dnsResolver{freq: freq}, nil\n}\n\n// NewDNSResolver creates a DNS Resolver that can resolve DNS names, and create\n// watchers that poll the DNS server using the default frequency defined by defaultFreq.\nfunc NewDNSResolver() (Resolver, error) {\n\treturn NewDNSResolverWithFreq(defaultFreq)\n}\n\n// dnsResolver handles name resolution for names following the DNS scheme\ntype dnsResolver struct {\n\t// frequency of polling the DNS server that the watchers created by this resolver will use.\n\tfreq time.Duration\n}\n\n// formatIP returns ok = false if addr is not a valid textual representation of an IP address.\n// If addr is an IPv4 address, return the addr and ok = true.\n// If addr is an IPv6 address, return the addr enclosed in square brackets and ok = true.\nfunc formatIP(addr string) (addrIP string, ok bool) {\n\tip := net.ParseIP(addr)\n\tif ip == nil {\n\t\treturn \"\", false\n\t}\n\tif ip.To4() != nil {\n\t\treturn addr, true\n\t}\n\treturn \"[\" + addr + \"]\", true\n}\n\n// parseTarget takes the user input target string, returns formatted host and port info.\n// If target doesn't specify a port, set the port to be the defaultPort.\n// If target is in IPv6 format and host-name is enclosed in square brackets, brackets\n// are stripped when setting the host.\n// examples:\n// target: \"www.google.com\" returns host: \"www.google.com\", port: \"443\"\n// target: \"ipv4-host:80\" returns host: \"ipv4-host\", port: \"80\"\n// target: \"[ipv6-host]\" returns host: \"ipv6-host\", port: \"443\"\n// target: \":80\" returns host: \"localhost\", port: \"80\"\n// target: \":\" returns host: \"localhost\", port: \"443\"\nfunc parseTarget(target string) (host, port string, err error) {\n\tif target == \"\" {\n\t\treturn \"\", \"\", errMissingAddr\n\t}\n\n\tif ip := net.ParseIP(target); ip != nil {\n\t\t// target is an IPv4 or IPv6(without brackets) address\n\t\treturn target, defaultPort, nil\n\t}\n\tif host, port, err := net.SplitHostPort(target); err == nil {\n\t\t// target has port, i.e ipv4-host:port, [ipv6-host]:port, host-name:port\n\t\tif host == \"\" {\n\t\t\t// Keep consistent with net.Dial(): If the host is empty, as in \":80\", the local system is assumed.\n\t\t\thost = \"localhost\"\n\t\t}\n\t\tif port == \"\" {\n\t\t\t// If the port field is empty(target ends with colon), e.g. \"[::1]:\", defaultPort is used.\n\t\t\tport = defaultPort\n\t\t}\n\t\treturn host, port, nil\n\t}\n\tif host, port, err := net.SplitHostPort(target + \":\" + defaultPort); err == nil {\n\t\t// target doesn't have port\n\t\treturn host, port, nil\n\t}\n\treturn \"\", \"\", fmt.Errorf(\"invalid target address %v\", target)\n}\n\n// Resolve creates a watcher that watches the name resolution of the target.\nfunc (r *dnsResolver) Resolve(target string) (Watcher, error) {\n\thost, port, err := parseTarget(target)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif net.ParseIP(host) != nil {\n\t\tipWatcher := &ipWatcher{\n\t\t\tupdateChan: make(chan *Update, 1),\n\t\t}\n\t\thost, _ = formatIP(host)\n\t\tipWatcher.updateChan <- &Update{Op: Add, Addr: host + \":\" + port}\n\t\treturn ipWatcher, nil\n\t}\n\n\tctx, cancel := context.WithCancel(context.Background())\n\treturn &dnsWatcher{\n\t\tr:      r,\n\t\thost:   host,\n\t\tport:   port,\n\t\tctx:    ctx,\n\t\tcancel: cancel,\n\t\tt:      time.NewTimer(0),\n\t}, nil\n}\n\n// dnsWatcher watches for the name resolution update for a specific target\ntype dnsWatcher struct {\n\tr    *dnsResolver\n\thost string\n\tport string\n\t// The latest resolved address set\n\tcurAddrs map[string]*Update\n\tctx      context.Context\n\tcancel   context.CancelFunc\n\tt        *time.Timer\n}\n\n// ipWatcher watches for the name resolution update for an IP address.\ntype ipWatcher struct {\n\tupdateChan chan *Update\n}\n\n// Next returns the address resolution Update for the target. For IP address,\n// the resolution is itself, thus polling name server is unnecessary. Therefore,\n// Next() will return an Update the first time it is called, and will be blocked\n// for all following calls as no Update exists until watcher is closed.\nfunc (i *ipWatcher) Next() ([]*Update, error) {\n\tu, ok := <-i.updateChan\n\tif !ok {\n\t\treturn nil, errWatcherClose\n\t}\n\treturn []*Update{u}, nil\n}\n\n// Close closes the ipWatcher.\nfunc (i *ipWatcher) Close() {\n\tclose(i.updateChan)\n}\n\n// AddressType indicates the address type returned by name resolution.\ntype AddressType uint8\n\nconst (\n\t// Backend indicates the server is a backend server.\n\tBackend AddressType = iota\n\t// GRPCLB indicates the server is a grpclb load balancer.\n\tGRPCLB\n)\n\n// AddrMetadataGRPCLB contains the information the name resolver for grpclb should provide. The\n// name resolver used by the grpclb balancer is required to provide this type of metadata in\n// its address updates.\ntype AddrMetadataGRPCLB struct {\n\t// AddrType is the type of server (grpc load balancer or backend).\n\tAddrType AddressType\n\t// ServerName is the name of the grpc load balancer. Used for authentication.\n\tServerName string\n}\n\n// compileUpdate compares the old resolved addresses and newly resolved addresses,\n// and generates an update list\nfunc (w *dnsWatcher) compileUpdate(newAddrs map[string]*Update) []*Update {\n\tvar res []*Update\n\tfor a, u := range w.curAddrs {\n\t\tif _, ok := newAddrs[a]; !ok {\n\t\t\tu.Op = Delete\n\t\t\tres = append(res, u)\n\t\t}\n\t}\n\tfor a, u := range newAddrs {\n\t\tif _, ok := w.curAddrs[a]; !ok {\n\t\t\tres = append(res, u)\n\t\t}\n\t}\n\treturn res\n}\n\nfunc (w *dnsWatcher) lookupSRV() map[string]*Update {\n\tnewAddrs := make(map[string]*Update)\n\t_, srvs, err := lookupSRV(w.ctx, \"grpclb\", \"tcp\", w.host)\n\tif err != nil {\n\t\tgrpclog.Infof(\"grpc: failed dns SRV record lookup due to %v.\\n\", err)\n\t\treturn nil\n\t}\n\tfor _, s := range srvs {\n\t\tlbAddrs, err := lookupHost(w.ctx, s.Target)\n\t\tif err != nil {\n\t\t\tgrpclog.Warningf(\"grpc: failed load balancer address dns lookup due to %v.\\n\", err)\n\t\t\tcontinue\n\t\t}\n\t\tfor _, a := range lbAddrs {\n\t\t\ta, ok := formatIP(a)\n\t\t\tif !ok {\n\t\t\t\tgrpclog.Errorf(\"grpc: failed IP parsing due to %v.\\n\", err)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\taddr := a + \":\" + strconv.Itoa(int(s.Port))\n\t\t\tnewAddrs[addr] = &Update{Addr: addr,\n\t\t\t\tMetadata: AddrMetadataGRPCLB{AddrType: GRPCLB, ServerName: s.Target}}\n\t\t}\n\t}\n\treturn newAddrs\n}\n\nfunc (w *dnsWatcher) lookupHost() map[string]*Update {\n\tnewAddrs := make(map[string]*Update)\n\taddrs, err := lookupHost(w.ctx, w.host)\n\tif err != nil {\n\t\tgrpclog.Warningf(\"grpc: failed dns A record lookup due to %v.\\n\", err)\n\t\treturn nil\n\t}\n\tfor _, a := range addrs {\n\t\ta, ok := formatIP(a)\n\t\tif !ok {\n\t\t\tgrpclog.Errorf(\"grpc: failed IP parsing due to %v.\\n\", err)\n\t\t\tcontinue\n\t\t}\n\t\taddr := a + \":\" + w.port\n\t\tnewAddrs[addr] = &Update{Addr: addr}\n\t}\n\treturn newAddrs\n}\n\nfunc (w *dnsWatcher) lookup() []*Update {\n\tnewAddrs := w.lookupSRV()\n\tif newAddrs == nil {\n\t\t// If failed to get any balancer address (either no corresponding SRV for the\n\t\t// target, or caused by failure during resolution/parsing of the balancer target),\n\t\t// return any A record info available.\n\t\tnewAddrs = w.lookupHost()\n\t}\n\tresult := w.compileUpdate(newAddrs)\n\tw.curAddrs = newAddrs\n\treturn result\n}\n\n// Next returns the resolved address update(delta) for the target. If there's no\n// change, it will sleep for 30 mins and try to resolve again after that.\nfunc (w *dnsWatcher) Next() ([]*Update, error) {\n\tfor {\n\t\tselect {\n\t\tcase <-w.ctx.Done():\n\t\t\treturn nil, errWatcherClose\n\t\tcase <-w.t.C:\n\t\t}\n\t\tresult := w.lookup()\n\t\t// Next lookup should happen after an interval defined by w.r.freq.\n\t\tw.t.Reset(w.r.freq)\n\t\tif len(result) > 0 {\n\t\t\treturn result, nil\n\t\t}\n\t}\n}\n\nfunc (w *dnsWatcher) Close() {\n\tw.cancel()\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/naming/naming.go",
    "content": "/*\n *\n * Copyright 2014 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n// Package naming defines the naming API and related data structures for gRPC.\n//\n// This package is deprecated: please use package resolver instead.\npackage naming\n\n// Operation defines the corresponding operations for a name resolution change.\n//\n// Deprecated: please use package resolver.\ntype Operation uint8\n\nconst (\n\t// Add indicates a new address is added.\n\tAdd Operation = iota\n\t// Delete indicates an existing address is deleted.\n\tDelete\n)\n\n// Update defines a name resolution update. Notice that it is not valid having both\n// empty string Addr and nil Metadata in an Update.\n//\n// Deprecated: please use package resolver.\ntype Update struct {\n\t// Op indicates the operation of the update.\n\tOp Operation\n\t// Addr is the updated address. It is empty string if there is no address update.\n\tAddr string\n\t// Metadata is the updated metadata. It is nil if there is no metadata update.\n\t// Metadata is not required for a custom naming implementation.\n\tMetadata interface{}\n}\n\n// Resolver creates a Watcher for a target to track its resolution changes.\n//\n// Deprecated: please use package resolver.\ntype Resolver interface {\n\t// Resolve creates a Watcher for target.\n\tResolve(target string) (Watcher, error)\n}\n\n// Watcher watches for the updates on the specified target.\n//\n// Deprecated: please use package resolver.\ntype Watcher interface {\n\t// Next blocks until an update or error happens. It may return one or more\n\t// updates. The first call should get the full set of the results. It should\n\t// return an error if and only if Watcher cannot recover.\n\tNext() ([]*Update, error)\n\t// Close closes the Watcher.\n\tClose()\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/peer/peer.go",
    "content": "/*\n *\n * Copyright 2014 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n// Package peer defines various peer information associated with RPCs and\n// corresponding utils.\npackage peer\n\nimport (\n\t\"context\"\n\t\"net\"\n\n\t\"google.golang.org/grpc/credentials\"\n)\n\n// Peer contains the information of the peer for an RPC, such as the address\n// and authentication information.\ntype Peer struct {\n\t// Addr is the peer address.\n\tAddr net.Addr\n\t// AuthInfo is the authentication information of the transport.\n\t// It is nil if there is no transport security being used.\n\tAuthInfo credentials.AuthInfo\n}\n\ntype peerKey struct{}\n\n// NewContext creates a new context with peer information attached.\nfunc NewContext(ctx context.Context, p *Peer) context.Context {\n\treturn context.WithValue(ctx, peerKey{}, p)\n}\n\n// FromContext returns the peer information in ctx if it exists.\nfunc FromContext(ctx context.Context) (p *Peer, ok bool) {\n\tp, ok = ctx.Value(peerKey{}).(*Peer)\n\treturn\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/picker_wrapper.go",
    "content": "/*\n *\n * Copyright 2017 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\npackage grpc\n\nimport (\n\t\"context\"\n\t\"io\"\n\t\"sync\"\n\n\t\"google.golang.org/grpc/balancer\"\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/grpc/internal/channelz\"\n\t\"google.golang.org/grpc/internal/transport\"\n\t\"google.golang.org/grpc/status\"\n)\n\n// pickerWrapper is a wrapper of balancer.Picker. It blocks on certain pick\n// actions and unblock when there's a picker update.\ntype pickerWrapper struct {\n\tmu         sync.Mutex\n\tdone       bool\n\tblockingCh chan struct{}\n\tpicker     balancer.Picker\n\n\t// The latest connection happened.\n\tconnErrMu sync.Mutex\n\tconnErr   error\n}\n\nfunc newPickerWrapper() *pickerWrapper {\n\tbp := &pickerWrapper{blockingCh: make(chan struct{})}\n\treturn bp\n}\n\nfunc (bp *pickerWrapper) updateConnectionError(err error) {\n\tbp.connErrMu.Lock()\n\tbp.connErr = err\n\tbp.connErrMu.Unlock()\n}\n\nfunc (bp *pickerWrapper) connectionError() error {\n\tbp.connErrMu.Lock()\n\terr := bp.connErr\n\tbp.connErrMu.Unlock()\n\treturn err\n}\n\n// updatePicker is called by UpdateBalancerState. It unblocks all blocked pick.\nfunc (bp *pickerWrapper) updatePicker(p balancer.Picker) {\n\tbp.mu.Lock()\n\tif bp.done {\n\t\tbp.mu.Unlock()\n\t\treturn\n\t}\n\tbp.picker = p\n\t// bp.blockingCh should never be nil.\n\tclose(bp.blockingCh)\n\tbp.blockingCh = make(chan struct{})\n\tbp.mu.Unlock()\n}\n\nfunc doneChannelzWrapper(acw *acBalancerWrapper, done func(balancer.DoneInfo)) func(balancer.DoneInfo) {\n\tacw.mu.Lock()\n\tac := acw.ac\n\tacw.mu.Unlock()\n\tac.incrCallsStarted()\n\treturn func(b balancer.DoneInfo) {\n\t\tif b.Err != nil && b.Err != io.EOF {\n\t\t\tac.incrCallsFailed()\n\t\t} else {\n\t\t\tac.incrCallsSucceeded()\n\t\t}\n\t\tif done != nil {\n\t\t\tdone(b)\n\t\t}\n\t}\n}\n\n// pick returns the transport that will be used for the RPC.\n// It may block in the following cases:\n// - there's no picker\n// - the current picker returns ErrNoSubConnAvailable\n// - the current picker returns other errors and failfast is false.\n// - the subConn returned by the current picker is not READY\n// When one of these situations happens, pick blocks until the picker gets updated.\nfunc (bp *pickerWrapper) pick(ctx context.Context, failfast bool, opts balancer.PickOptions) (transport.ClientTransport, func(balancer.DoneInfo), error) {\n\tvar ch chan struct{}\n\n\tfor {\n\t\tbp.mu.Lock()\n\t\tif bp.done {\n\t\t\tbp.mu.Unlock()\n\t\t\treturn nil, nil, ErrClientConnClosing\n\t\t}\n\n\t\tif bp.picker == nil {\n\t\t\tch = bp.blockingCh\n\t\t}\n\t\tif ch == bp.blockingCh {\n\t\t\t// This could happen when either:\n\t\t\t// - bp.picker is nil (the previous if condition), or\n\t\t\t// - has called pick on the current picker.\n\t\t\tbp.mu.Unlock()\n\t\t\tselect {\n\t\t\tcase <-ctx.Done():\n\t\t\t\tif connectionErr := bp.connectionError(); connectionErr != nil {\n\t\t\t\t\tswitch ctx.Err() {\n\t\t\t\t\tcase context.DeadlineExceeded:\n\t\t\t\t\t\treturn nil, nil, status.Errorf(codes.DeadlineExceeded, \"latest connection error: %v\", connectionErr)\n\t\t\t\t\tcase context.Canceled:\n\t\t\t\t\t\treturn nil, nil, status.Errorf(codes.Canceled, \"latest connection error: %v\", connectionErr)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn nil, nil, ctx.Err()\n\t\t\tcase <-ch:\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\tch = bp.blockingCh\n\t\tp := bp.picker\n\t\tbp.mu.Unlock()\n\n\t\tsubConn, done, err := p.Pick(ctx, opts)\n\n\t\tif err != nil {\n\t\t\tswitch err {\n\t\t\tcase balancer.ErrNoSubConnAvailable:\n\t\t\t\tcontinue\n\t\t\tcase balancer.ErrTransientFailure:\n\t\t\t\tif !failfast {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\treturn nil, nil, status.Errorf(codes.Unavailable, \"%v, latest connection error: %v\", err, bp.connectionError())\n\t\t\tcase context.DeadlineExceeded:\n\t\t\t\treturn nil, nil, status.Error(codes.DeadlineExceeded, err.Error())\n\t\t\tcase context.Canceled:\n\t\t\t\treturn nil, nil, status.Error(codes.Canceled, err.Error())\n\t\t\tdefault:\n\t\t\t\tif _, ok := status.FromError(err); ok {\n\t\t\t\t\treturn nil, nil, err\n\t\t\t\t}\n\t\t\t\t// err is some other error.\n\t\t\t\treturn nil, nil, status.Error(codes.Unknown, err.Error())\n\t\t\t}\n\t\t}\n\n\t\tacw, ok := subConn.(*acBalancerWrapper)\n\t\tif !ok {\n\t\t\tgrpclog.Error(\"subconn returned from pick is not *acBalancerWrapper\")\n\t\t\tcontinue\n\t\t}\n\t\tif t, ok := acw.getAddrConn().getReadyTransport(); ok {\n\t\t\tif channelz.IsOn() {\n\t\t\t\treturn t, doneChannelzWrapper(acw, done), nil\n\t\t\t}\n\t\t\treturn t, done, nil\n\t\t}\n\t\tif done != nil {\n\t\t\t// Calling done with nil error, no bytes sent and no bytes received.\n\t\t\t// DoneInfo with default value works.\n\t\t\tdone(balancer.DoneInfo{})\n\t\t}\n\t\tgrpclog.Infof(\"blockingPicker: the picked transport is not ready, loop back to repick\")\n\t\t// If ok == false, ac.state is not READY.\n\t\t// A valid picker always returns READY subConn. This means the state of ac\n\t\t// just changed, and picker will be updated shortly.\n\t\t// continue back to the beginning of the for loop to repick.\n\t}\n}\n\nfunc (bp *pickerWrapper) close() {\n\tbp.mu.Lock()\n\tdefer bp.mu.Unlock()\n\tif bp.done {\n\t\treturn\n\t}\n\tbp.done = true\n\tclose(bp.blockingCh)\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/pickfirst.go",
    "content": "/*\n *\n * Copyright 2017 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\npackage grpc\n\nimport (\n\t\"context\"\n\n\t\"google.golang.org/grpc/balancer\"\n\t\"google.golang.org/grpc/connectivity\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/grpc/resolver\"\n)\n\n// PickFirstBalancerName is the name of the pick_first balancer.\nconst PickFirstBalancerName = \"pick_first\"\n\nfunc newPickfirstBuilder() balancer.Builder {\n\treturn &pickfirstBuilder{}\n}\n\ntype pickfirstBuilder struct{}\n\nfunc (*pickfirstBuilder) Build(cc balancer.ClientConn, opt balancer.BuildOptions) balancer.Balancer {\n\treturn &pickfirstBalancer{cc: cc}\n}\n\nfunc (*pickfirstBuilder) Name() string {\n\treturn PickFirstBalancerName\n}\n\ntype pickfirstBalancer struct {\n\tcc balancer.ClientConn\n\tsc balancer.SubConn\n}\n\nfunc (b *pickfirstBalancer) HandleResolvedAddrs(addrs []resolver.Address, err error) {\n\tif err != nil {\n\t\tgrpclog.Infof(\"pickfirstBalancer: HandleResolvedAddrs called with error %v\", err)\n\t\treturn\n\t}\n\tif b.sc == nil {\n\t\tb.sc, err = b.cc.NewSubConn(addrs, balancer.NewSubConnOptions{})\n\t\tif err != nil {\n\t\t\t//TODO(yuxuanli): why not change the cc state to Idle?\n\t\t\tgrpclog.Errorf(\"pickfirstBalancer: failed to NewSubConn: %v\", err)\n\t\t\treturn\n\t\t}\n\t\tb.cc.UpdateBalancerState(connectivity.Idle, &picker{sc: b.sc})\n\t\tb.sc.Connect()\n\t} else {\n\t\tb.sc.UpdateAddresses(addrs)\n\t\tb.sc.Connect()\n\t}\n}\n\nfunc (b *pickfirstBalancer) HandleSubConnStateChange(sc balancer.SubConn, s connectivity.State) {\n\tgrpclog.Infof(\"pickfirstBalancer: HandleSubConnStateChange: %p, %v\", sc, s)\n\tif b.sc != sc {\n\t\tgrpclog.Infof(\"pickfirstBalancer: ignored state change because sc is not recognized\")\n\t\treturn\n\t}\n\tif s == connectivity.Shutdown {\n\t\tb.sc = nil\n\t\treturn\n\t}\n\n\tswitch s {\n\tcase connectivity.Ready, connectivity.Idle:\n\t\tb.cc.UpdateBalancerState(s, &picker{sc: sc})\n\tcase connectivity.Connecting:\n\t\tb.cc.UpdateBalancerState(s, &picker{err: balancer.ErrNoSubConnAvailable})\n\tcase connectivity.TransientFailure:\n\t\tb.cc.UpdateBalancerState(s, &picker{err: balancer.ErrTransientFailure})\n\t}\n}\n\nfunc (b *pickfirstBalancer) Close() {\n}\n\ntype picker struct {\n\terr error\n\tsc  balancer.SubConn\n}\n\nfunc (p *picker) Pick(ctx context.Context, opts balancer.PickOptions) (balancer.SubConn, func(balancer.DoneInfo), error) {\n\tif p.err != nil {\n\t\treturn nil, nil, p.err\n\t}\n\treturn p.sc, nil, nil\n}\n\nfunc init() {\n\tbalancer.Register(newPickfirstBuilder())\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/preloader.go",
    "content": "/*\n *\n * Copyright 2019 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\npackage grpc\n\nimport (\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/status\"\n)\n\n// PreparedMsg is responsible for creating a Marshalled and Compressed object.\n//\n// This API is EXPERIMENTAL.\ntype PreparedMsg struct {\n\t// Struct for preparing msg before sending them\n\tencodedData []byte\n\thdr         []byte\n\tpayload     []byte\n}\n\n// Encode marshalls and compresses the message using the codec and compressor for the stream.\nfunc (p *PreparedMsg) Encode(s Stream, msg interface{}) error {\n\tctx := s.Context()\n\trpcInfo, ok := rpcInfoFromContext(ctx)\n\tif !ok {\n\t\treturn status.Errorf(codes.Internal, \"grpc: unable to get rpcInfo\")\n\t}\n\n\t// check if the context has the relevant information to prepareMsg\n\tif rpcInfo.preloaderInfo == nil {\n\t\treturn status.Errorf(codes.Internal, \"grpc: rpcInfo.preloaderInfo is nil\")\n\t}\n\tif rpcInfo.preloaderInfo.codec == nil {\n\t\treturn status.Errorf(codes.Internal, \"grpc: rpcInfo.preloaderInfo.codec is nil\")\n\t}\n\n\t// prepare the msg\n\tdata, err := encode(rpcInfo.preloaderInfo.codec, msg)\n\tif err != nil {\n\t\treturn err\n\t}\n\tp.encodedData = data\n\tcompData, err := compress(data, rpcInfo.preloaderInfo.cp, rpcInfo.preloaderInfo.comp)\n\tif err != nil {\n\t\treturn err\n\t}\n\tp.hdr, p.payload = msgHeader(data, compData)\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/proxy.go",
    "content": "/*\n *\n * Copyright 2017 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\npackage grpc\n\nimport (\n\t\"bufio\"\n\t\"context\"\n\t\"encoding/base64\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net\"\n\t\"net/http\"\n\t\"net/http/httputil\"\n\t\"net/url\"\n)\n\nconst proxyAuthHeaderKey = \"Proxy-Authorization\"\n\nvar (\n\t// errDisabled indicates that proxy is disabled for the address.\n\terrDisabled = errors.New(\"proxy is disabled for the address\")\n\t// The following variable will be overwritten in the tests.\n\thttpProxyFromEnvironment = http.ProxyFromEnvironment\n)\n\nfunc mapAddress(ctx context.Context, address string) (*url.URL, error) {\n\treq := &http.Request{\n\t\tURL: &url.URL{\n\t\t\tScheme: \"https\",\n\t\t\tHost:   address,\n\t\t},\n\t}\n\turl, err := httpProxyFromEnvironment(req)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif url == nil {\n\t\treturn nil, errDisabled\n\t}\n\treturn url, nil\n}\n\n// To read a response from a net.Conn, http.ReadResponse() takes a bufio.Reader.\n// It's possible that this reader reads more than what's need for the response and stores\n// those bytes in the buffer.\n// bufConn wraps the original net.Conn and the bufio.Reader to make sure we don't lose the\n// bytes in the buffer.\ntype bufConn struct {\n\tnet.Conn\n\tr io.Reader\n}\n\nfunc (c *bufConn) Read(b []byte) (int, error) {\n\treturn c.r.Read(b)\n}\n\nfunc basicAuth(username, password string) string {\n\tauth := username + \":\" + password\n\treturn base64.StdEncoding.EncodeToString([]byte(auth))\n}\n\nfunc doHTTPConnectHandshake(ctx context.Context, conn net.Conn, backendAddr string, proxyURL *url.URL) (_ net.Conn, err error) {\n\tdefer func() {\n\t\tif err != nil {\n\t\t\tconn.Close()\n\t\t}\n\t}()\n\n\treq := &http.Request{\n\t\tMethod: http.MethodConnect,\n\t\tURL:    &url.URL{Host: backendAddr},\n\t\tHeader: map[string][]string{\"User-Agent\": {grpcUA}},\n\t}\n\tif t := proxyURL.User; t != nil {\n\t\tu := t.Username()\n\t\tp, _ := t.Password()\n\t\treq.Header.Add(proxyAuthHeaderKey, \"Basic \"+basicAuth(u, p))\n\t}\n\n\tif err := sendHTTPRequest(ctx, req, conn); err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to write the HTTP request: %v\", err)\n\t}\n\n\tr := bufio.NewReader(conn)\n\tresp, err := http.ReadResponse(r, req)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"reading server HTTP response: %v\", err)\n\t}\n\tdefer resp.Body.Close()\n\tif resp.StatusCode != http.StatusOK {\n\t\tdump, err := httputil.DumpResponse(resp, true)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"failed to do connect handshake, status code: %s\", resp.Status)\n\t\t}\n\t\treturn nil, fmt.Errorf(\"failed to do connect handshake, response: %q\", dump)\n\t}\n\n\treturn &bufConn{Conn: conn, r: r}, nil\n}\n\n// newProxyDialer returns a dialer that connects to proxy first if necessary.\n// The returned dialer checks if a proxy is necessary, dial to the proxy with the\n// provided dialer, does HTTP CONNECT handshake and returns the connection.\nfunc newProxyDialer(dialer func(context.Context, string) (net.Conn, error)) func(context.Context, string) (net.Conn, error) {\n\treturn func(ctx context.Context, addr string) (conn net.Conn, err error) {\n\t\tvar newAddr string\n\t\tproxyURL, err := mapAddress(ctx, addr)\n\t\tif err != nil {\n\t\t\tif err != errDisabled {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tnewAddr = addr\n\t\t} else {\n\t\t\tnewAddr = proxyURL.Host\n\t\t}\n\n\t\tconn, err = dialer(ctx, newAddr)\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t\tif proxyURL != nil {\n\t\t\t// proxy is disabled if proxyURL is nil.\n\t\t\tconn, err = doHTTPConnectHandshake(ctx, conn, addr, proxyURL)\n\t\t}\n\t\treturn\n\t}\n}\n\nfunc sendHTTPRequest(ctx context.Context, req *http.Request, conn net.Conn) error {\n\treq = req.WithContext(ctx)\n\tif err := req.Write(conn); err != nil {\n\t\treturn fmt.Errorf(\"failed to write the HTTP request: %v\", err)\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/resolver/dns/dns_resolver.go",
    "content": "/*\n *\n * Copyright 2018 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n// Package dns implements a dns resolver to be installed as the default resolver\n// in grpc.\npackage dns\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"net\"\n\t\"os\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\t\"time\"\n\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/grpc/internal/backoff\"\n\t\"google.golang.org/grpc/internal/grpcrand\"\n\t\"google.golang.org/grpc/resolver\"\n)\n\nfunc init() {\n\tresolver.Register(NewBuilder())\n}\n\nconst (\n\tdefaultPort       = \"443\"\n\tdefaultFreq       = time.Minute * 30\n\tdefaultDNSSvrPort = \"53\"\n\tgolang            = \"GO\"\n\t// txtPrefix is the prefix string to be prepended to the host name for txt record lookup.\n\ttxtPrefix = \"_grpc_config.\"\n\t// In DNS, service config is encoded in a TXT record via the mechanism\n\t// described in RFC-1464 using the attribute name grpc_config.\n\ttxtAttribute = \"grpc_config=\"\n)\n\nvar (\n\terrMissingAddr = errors.New(\"dns resolver: missing address\")\n\n\t// Addresses ending with a colon that is supposed to be the separator\n\t// between host and port is not allowed.  E.g. \"::\" is a valid address as\n\t// it is an IPv6 address (host only) and \"[::]:\" is invalid as it ends with\n\t// a colon as the host and port separator\n\terrEndsWithColon = errors.New(\"dns resolver: missing port after port-separator colon\")\n)\n\nvar (\n\tdefaultResolver netResolver = net.DefaultResolver\n\t// To prevent excessive re-resolution, we enforce a rate limit on DNS\n\t// resolution requests.\n\tminDNSResRate = 30 * time.Second\n)\n\nvar customAuthorityDialler = func(authority string) func(ctx context.Context, network, address string) (net.Conn, error) {\n\treturn func(ctx context.Context, network, address string) (net.Conn, error) {\n\t\tvar dialer net.Dialer\n\t\treturn dialer.DialContext(ctx, network, authority)\n\t}\n}\n\nvar customAuthorityResolver = func(authority string) (netResolver, error) {\n\thost, port, err := parseTarget(authority, defaultDNSSvrPort)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tauthorityWithPort := net.JoinHostPort(host, port)\n\n\treturn &net.Resolver{\n\t\tPreferGo: true,\n\t\tDial:     customAuthorityDialler(authorityWithPort),\n\t}, nil\n}\n\n// NewBuilder creates a dnsBuilder which is used to factory DNS resolvers.\nfunc NewBuilder() resolver.Builder {\n\treturn &dnsBuilder{minFreq: defaultFreq}\n}\n\ntype dnsBuilder struct {\n\t// minimum frequency of polling the DNS server.\n\tminFreq time.Duration\n}\n\n// Build creates and starts a DNS resolver that watches the name resolution of the target.\nfunc (b *dnsBuilder) Build(target resolver.Target, cc resolver.ClientConn, opts resolver.BuildOption) (resolver.Resolver, error) {\n\thost, port, err := parseTarget(target.Endpoint, defaultPort)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// IP address.\n\tif net.ParseIP(host) != nil {\n\t\thost, _ = formatIP(host)\n\t\taddr := []resolver.Address{{Addr: host + \":\" + port}}\n\t\ti := &ipResolver{\n\t\t\tcc: cc,\n\t\t\tip: addr,\n\t\t\trn: make(chan struct{}, 1),\n\t\t\tq:  make(chan struct{}),\n\t\t}\n\t\tcc.NewAddress(addr)\n\t\tgo i.watcher()\n\t\treturn i, nil\n\t}\n\n\t// DNS address (non-IP).\n\tctx, cancel := context.WithCancel(context.Background())\n\td := &dnsResolver{\n\t\tfreq:                 b.minFreq,\n\t\tbackoff:              backoff.Exponential{MaxDelay: b.minFreq},\n\t\thost:                 host,\n\t\tport:                 port,\n\t\tctx:                  ctx,\n\t\tcancel:               cancel,\n\t\tcc:                   cc,\n\t\tt:                    time.NewTimer(0),\n\t\trn:                   make(chan struct{}, 1),\n\t\tdisableServiceConfig: opts.DisableServiceConfig,\n\t}\n\n\tif target.Authority == \"\" {\n\t\td.resolver = defaultResolver\n\t} else {\n\t\td.resolver, err = customAuthorityResolver(target.Authority)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\td.wg.Add(1)\n\tgo d.watcher()\n\treturn d, nil\n}\n\n// Scheme returns the naming scheme of this resolver builder, which is \"dns\".\nfunc (b *dnsBuilder) Scheme() string {\n\treturn \"dns\"\n}\n\ntype netResolver interface {\n\tLookupHost(ctx context.Context, host string) (addrs []string, err error)\n\tLookupSRV(ctx context.Context, service, proto, name string) (cname string, addrs []*net.SRV, err error)\n\tLookupTXT(ctx context.Context, name string) (txts []string, err error)\n}\n\n// ipResolver watches for the name resolution update for an IP address.\ntype ipResolver struct {\n\tcc resolver.ClientConn\n\tip []resolver.Address\n\t// rn channel is used by ResolveNow() to force an immediate resolution of the target.\n\trn chan struct{}\n\tq  chan struct{}\n}\n\n// ResolveNow resend the address it stores, no resolution is needed.\nfunc (i *ipResolver) ResolveNow(opt resolver.ResolveNowOption) {\n\tselect {\n\tcase i.rn <- struct{}{}:\n\tdefault:\n\t}\n}\n\n// Close closes the ipResolver.\nfunc (i *ipResolver) Close() {\n\tclose(i.q)\n}\n\nfunc (i *ipResolver) watcher() {\n\tfor {\n\t\tselect {\n\t\tcase <-i.rn:\n\t\t\ti.cc.NewAddress(i.ip)\n\t\tcase <-i.q:\n\t\t\treturn\n\t\t}\n\t}\n}\n\n// dnsResolver watches for the name resolution update for a non-IP target.\ntype dnsResolver struct {\n\tfreq       time.Duration\n\tbackoff    backoff.Exponential\n\tretryCount int\n\thost       string\n\tport       string\n\tresolver   netResolver\n\tctx        context.Context\n\tcancel     context.CancelFunc\n\tcc         resolver.ClientConn\n\t// rn channel is used by ResolveNow() to force an immediate resolution of the target.\n\trn chan struct{}\n\tt  *time.Timer\n\t// wg is used to enforce Close() to return after the watcher() goroutine has finished.\n\t// Otherwise, data race will be possible. [Race Example] in dns_resolver_test we\n\t// replace the real lookup functions with mocked ones to facilitate testing.\n\t// If Close() doesn't wait for watcher() goroutine finishes, race detector sometimes\n\t// will warns lookup (READ the lookup function pointers) inside watcher() goroutine\n\t// has data race with replaceNetFunc (WRITE the lookup function pointers).\n\twg                   sync.WaitGroup\n\tdisableServiceConfig bool\n}\n\n// ResolveNow invoke an immediate resolution of the target that this dnsResolver watches.\nfunc (d *dnsResolver) ResolveNow(opt resolver.ResolveNowOption) {\n\tselect {\n\tcase d.rn <- struct{}{}:\n\tdefault:\n\t}\n}\n\n// Close closes the dnsResolver.\nfunc (d *dnsResolver) Close() {\n\td.cancel()\n\td.wg.Wait()\n\td.t.Stop()\n}\n\nfunc (d *dnsResolver) watcher() {\n\tdefer d.wg.Done()\n\tfor {\n\t\tselect {\n\t\tcase <-d.ctx.Done():\n\t\t\treturn\n\t\tcase <-d.t.C:\n\t\tcase <-d.rn:\n\t\t\tif !d.t.Stop() {\n\t\t\t\t// Before resetting a timer, it should be stopped to prevent racing with\n\t\t\t\t// reads on it's channel.\n\t\t\t\t<-d.t.C\n\t\t\t}\n\t\t}\n\n\t\tresult, sc := d.lookup()\n\t\t// Next lookup should happen within an interval defined by d.freq. It may be\n\t\t// more often due to exponential retry on empty address list.\n\t\tif len(result) == 0 {\n\t\t\td.retryCount++\n\t\t\td.t.Reset(d.backoff.Backoff(d.retryCount))\n\t\t} else {\n\t\t\td.retryCount = 0\n\t\t\td.t.Reset(d.freq)\n\t\t}\n\t\td.cc.NewServiceConfig(sc)\n\t\td.cc.NewAddress(result)\n\n\t\t// Sleep to prevent excessive re-resolutions. Incoming resolution requests\n\t\t// will be queued in d.rn.\n\t\tt := time.NewTimer(minDNSResRate)\n\t\tselect {\n\t\tcase <-t.C:\n\t\tcase <-d.ctx.Done():\n\t\t\tt.Stop()\n\t\t\treturn\n\t\t}\n\t}\n}\n\nfunc (d *dnsResolver) lookupSRV() []resolver.Address {\n\tvar newAddrs []resolver.Address\n\t_, srvs, err := d.resolver.LookupSRV(d.ctx, \"grpclb\", \"tcp\", d.host)\n\tif err != nil {\n\t\tgrpclog.Infof(\"grpc: failed dns SRV record lookup due to %v.\\n\", err)\n\t\treturn nil\n\t}\n\tfor _, s := range srvs {\n\t\tlbAddrs, err := d.resolver.LookupHost(d.ctx, s.Target)\n\t\tif err != nil {\n\t\t\tgrpclog.Infof(\"grpc: failed load balancer address dns lookup due to %v.\\n\", err)\n\t\t\tcontinue\n\t\t}\n\t\tfor _, a := range lbAddrs {\n\t\t\ta, ok := formatIP(a)\n\t\t\tif !ok {\n\t\t\t\tgrpclog.Errorf(\"grpc: failed IP parsing due to %v.\\n\", err)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\taddr := a + \":\" + strconv.Itoa(int(s.Port))\n\t\t\tnewAddrs = append(newAddrs, resolver.Address{Addr: addr, Type: resolver.GRPCLB, ServerName: s.Target})\n\t\t}\n\t}\n\treturn newAddrs\n}\n\nfunc (d *dnsResolver) lookupTXT() string {\n\tss, err := d.resolver.LookupTXT(d.ctx, txtPrefix+d.host)\n\tif err != nil {\n\t\tgrpclog.Infof(\"grpc: failed dns TXT record lookup due to %v.\\n\", err)\n\t\treturn \"\"\n\t}\n\tvar res string\n\tfor _, s := range ss {\n\t\tres += s\n\t}\n\n\t// TXT record must have \"grpc_config=\" attribute in order to be used as service config.\n\tif !strings.HasPrefix(res, txtAttribute) {\n\t\tgrpclog.Warningf(\"grpc: TXT record %v missing %v attribute\", res, txtAttribute)\n\t\treturn \"\"\n\t}\n\treturn strings.TrimPrefix(res, txtAttribute)\n}\n\nfunc (d *dnsResolver) lookupHost() []resolver.Address {\n\tvar newAddrs []resolver.Address\n\taddrs, err := d.resolver.LookupHost(d.ctx, d.host)\n\tif err != nil {\n\t\tgrpclog.Warningf(\"grpc: failed dns A record lookup due to %v.\\n\", err)\n\t\treturn nil\n\t}\n\tfor _, a := range addrs {\n\t\ta, ok := formatIP(a)\n\t\tif !ok {\n\t\t\tgrpclog.Errorf(\"grpc: failed IP parsing due to %v.\\n\", err)\n\t\t\tcontinue\n\t\t}\n\t\taddr := a + \":\" + d.port\n\t\tnewAddrs = append(newAddrs, resolver.Address{Addr: addr})\n\t}\n\treturn newAddrs\n}\n\nfunc (d *dnsResolver) lookup() ([]resolver.Address, string) {\n\tnewAddrs := d.lookupSRV()\n\t// Support fallback to non-balancer address.\n\tnewAddrs = append(newAddrs, d.lookupHost()...)\n\tif d.disableServiceConfig {\n\t\treturn newAddrs, \"\"\n\t}\n\tsc := d.lookupTXT()\n\treturn newAddrs, canaryingSC(sc)\n}\n\n// formatIP returns ok = false if addr is not a valid textual representation of an IP address.\n// If addr is an IPv4 address, return the addr and ok = true.\n// If addr is an IPv6 address, return the addr enclosed in square brackets and ok = true.\nfunc formatIP(addr string) (addrIP string, ok bool) {\n\tip := net.ParseIP(addr)\n\tif ip == nil {\n\t\treturn \"\", false\n\t}\n\tif ip.To4() != nil {\n\t\treturn addr, true\n\t}\n\treturn \"[\" + addr + \"]\", true\n}\n\n// parseTarget takes the user input target string and default port, returns formatted host and port info.\n// If target doesn't specify a port, set the port to be the defaultPort.\n// If target is in IPv6 format and host-name is enclosed in square brackets, brackets\n// are stripped when setting the host.\n// examples:\n// target: \"www.google.com\" defaultPort: \"443\" returns host: \"www.google.com\", port: \"443\"\n// target: \"ipv4-host:80\" defaultPort: \"443\" returns host: \"ipv4-host\", port: \"80\"\n// target: \"[ipv6-host]\" defaultPort: \"443\" returns host: \"ipv6-host\", port: \"443\"\n// target: \":80\" defaultPort: \"443\" returns host: \"localhost\", port: \"80\"\nfunc parseTarget(target, defaultPort string) (host, port string, err error) {\n\tif target == \"\" {\n\t\treturn \"\", \"\", errMissingAddr\n\t}\n\tif ip := net.ParseIP(target); ip != nil {\n\t\t// target is an IPv4 or IPv6(without brackets) address\n\t\treturn target, defaultPort, nil\n\t}\n\tif host, port, err = net.SplitHostPort(target); err == nil {\n\t\tif port == \"\" {\n\t\t\t// If the port field is empty (target ends with colon), e.g. \"[::1]:\", this is an error.\n\t\t\treturn \"\", \"\", errEndsWithColon\n\t\t}\n\t\t// target has port, i.e ipv4-host:port, [ipv6-host]:port, host-name:port\n\t\tif host == \"\" {\n\t\t\t// Keep consistent with net.Dial(): If the host is empty, as in \":80\", the local system is assumed.\n\t\t\thost = \"localhost\"\n\t\t}\n\t\treturn host, port, nil\n\t}\n\tif host, port, err = net.SplitHostPort(target + \":\" + defaultPort); err == nil {\n\t\t// target doesn't have port\n\t\treturn host, port, nil\n\t}\n\treturn \"\", \"\", fmt.Errorf(\"invalid target address %v, error info: %v\", target, err)\n}\n\ntype rawChoice struct {\n\tClientLanguage *[]string        `json:\"clientLanguage,omitempty\"`\n\tPercentage     *int             `json:\"percentage,omitempty\"`\n\tClientHostName *[]string        `json:\"clientHostName,omitempty\"`\n\tServiceConfig  *json.RawMessage `json:\"serviceConfig,omitempty\"`\n}\n\nfunc containsString(a *[]string, b string) bool {\n\tif a == nil {\n\t\treturn true\n\t}\n\tfor _, c := range *a {\n\t\tif c == b {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\nfunc chosenByPercentage(a *int) bool {\n\tif a == nil {\n\t\treturn true\n\t}\n\treturn grpcrand.Intn(100)+1 <= *a\n}\n\nfunc canaryingSC(js string) string {\n\tif js == \"\" {\n\t\treturn \"\"\n\t}\n\tvar rcs []rawChoice\n\terr := json.Unmarshal([]byte(js), &rcs)\n\tif err != nil {\n\t\tgrpclog.Warningf(\"grpc: failed to parse service config json string due to %v.\\n\", err)\n\t\treturn \"\"\n\t}\n\tcliHostname, err := os.Hostname()\n\tif err != nil {\n\t\tgrpclog.Warningf(\"grpc: failed to get client hostname due to %v.\\n\", err)\n\t\treturn \"\"\n\t}\n\tvar sc string\n\tfor _, c := range rcs {\n\t\tif !containsString(c.ClientLanguage, golang) ||\n\t\t\t!chosenByPercentage(c.Percentage) ||\n\t\t\t!containsString(c.ClientHostName, cliHostname) ||\n\t\t\tc.ServiceConfig == nil {\n\t\t\tcontinue\n\t\t}\n\t\tsc = string(*c.ServiceConfig)\n\t\tbreak\n\t}\n\treturn sc\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/resolver/passthrough/passthrough.go",
    "content": "/*\n *\n * Copyright 2017 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n// Package passthrough implements a pass-through resolver. It sends the target\n// name without scheme back to gRPC as resolved address.\npackage passthrough\n\nimport \"google.golang.org/grpc/resolver\"\n\nconst scheme = \"passthrough\"\n\ntype passthroughBuilder struct{}\n\nfunc (*passthroughBuilder) Build(target resolver.Target, cc resolver.ClientConn, opts resolver.BuildOption) (resolver.Resolver, error) {\n\tr := &passthroughResolver{\n\t\ttarget: target,\n\t\tcc:     cc,\n\t}\n\tr.start()\n\treturn r, nil\n}\n\nfunc (*passthroughBuilder) Scheme() string {\n\treturn scheme\n}\n\ntype passthroughResolver struct {\n\ttarget resolver.Target\n\tcc     resolver.ClientConn\n}\n\nfunc (r *passthroughResolver) start() {\n\tr.cc.UpdateState(resolver.State{Addresses: []resolver.Address{{Addr: r.target.Endpoint}}})\n}\n\nfunc (*passthroughResolver) ResolveNow(o resolver.ResolveNowOption) {}\n\nfunc (*passthroughResolver) Close() {}\n\nfunc init() {\n\tresolver.Register(&passthroughBuilder{})\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/resolver/resolver.go",
    "content": "/*\n *\n * Copyright 2017 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n// Package resolver defines APIs for name resolution in gRPC.\n// All APIs in this package are experimental.\npackage resolver\n\nimport (\n\t\"google.golang.org/grpc/serviceconfig\"\n)\n\nvar (\n\t// m is a map from scheme to resolver builder.\n\tm = make(map[string]Builder)\n\t// defaultScheme is the default scheme to use.\n\tdefaultScheme = \"passthrough\"\n)\n\n// TODO(bar) install dns resolver in init(){}.\n\n// Register registers the resolver builder to the resolver map. b.Scheme will be\n// used as the scheme registered with this builder.\n//\n// NOTE: this function must only be called during initialization time (i.e. in\n// an init() function), and is not thread-safe. If multiple Resolvers are\n// registered with the same name, the one registered last will take effect.\nfunc Register(b Builder) {\n\tm[b.Scheme()] = b\n}\n\n// Get returns the resolver builder registered with the given scheme.\n//\n// If no builder is register with the scheme, nil will be returned.\nfunc Get(scheme string) Builder {\n\tif b, ok := m[scheme]; ok {\n\t\treturn b\n\t}\n\treturn nil\n}\n\n// SetDefaultScheme sets the default scheme that will be used. The default\n// default scheme is \"passthrough\".\n//\n// NOTE: this function must only be called during initialization time (i.e. in\n// an init() function), and is not thread-safe. The scheme set last overrides\n// previously set values.\nfunc SetDefaultScheme(scheme string) {\n\tdefaultScheme = scheme\n}\n\n// GetDefaultScheme gets the default scheme that will be used.\nfunc GetDefaultScheme() string {\n\treturn defaultScheme\n}\n\n// AddressType indicates the address type returned by name resolution.\ntype AddressType uint8\n\nconst (\n\t// Backend indicates the address is for a backend server.\n\tBackend AddressType = iota\n\t// GRPCLB indicates the address is for a grpclb load balancer.\n\tGRPCLB\n)\n\n// Address represents a server the client connects to.\n// This is the EXPERIMENTAL API and may be changed or extended in the future.\ntype Address struct {\n\t// Addr is the server address on which a connection will be established.\n\tAddr string\n\t// Type is the type of this address.\n\tType AddressType\n\t// ServerName is the name of this address.\n\t//\n\t// e.g. if Type is GRPCLB, ServerName should be the name of the remote load\n\t// balancer, not the name of the backend.\n\tServerName string\n\t// Metadata is the information associated with Addr, which may be used\n\t// to make load balancing decision.\n\tMetadata interface{}\n}\n\n// BuildOption includes additional information for the builder to create\n// the resolver.\ntype BuildOption struct {\n\t// DisableServiceConfig indicates whether resolver should fetch service config data.\n\tDisableServiceConfig bool\n}\n\n// State contains the current Resolver state relevant to the ClientConn.\ntype State struct {\n\tAddresses []Address // Resolved addresses for the target\n\t// ServiceConfig is the parsed service config; obtained from\n\t// serviceconfig.Parse.\n\tServiceConfig serviceconfig.Config\n\n\t// TODO: add Err error\n}\n\n// ClientConn contains the callbacks for resolver to notify any updates\n// to the gRPC ClientConn.\n//\n// This interface is to be implemented by gRPC. Users should not need a\n// brand new implementation of this interface. For the situations like\n// testing, the new implementation should embed this interface. This allows\n// gRPC to add new methods to this interface.\ntype ClientConn interface {\n\t// UpdateState updates the state of the ClientConn appropriately.\n\tUpdateState(State)\n\t// NewAddress is called by resolver to notify ClientConn a new list\n\t// of resolved addresses.\n\t// The address list should be the complete list of resolved addresses.\n\t//\n\t// Deprecated: Use UpdateState instead.\n\tNewAddress(addresses []Address)\n\t// NewServiceConfig is called by resolver to notify ClientConn a new\n\t// service config. The service config should be provided as a json string.\n\t//\n\t// Deprecated: Use UpdateState instead.\n\tNewServiceConfig(serviceConfig string)\n}\n\n// Target represents a target for gRPC, as specified in:\n// https://github.com/grpc/grpc/blob/master/doc/naming.md.\n// It is parsed from the target string that gets passed into Dial or DialContext by the user. And\n// grpc passes it to the resolver and the balancer.\n//\n// If the target follows the naming spec, and the parsed scheme is registered with grpc, we will\n// parse the target string according to the spec. e.g. \"dns://some_authority/foo.bar\" will be parsed\n// into &Target{Scheme: \"dns\", Authority: \"some_authority\", Endpoint: \"foo.bar\"}\n//\n// If the target does not contain a scheme, we will apply the default scheme, and set the Target to\n// be the full target string. e.g. \"foo.bar\" will be parsed into\n// &Target{Scheme: resolver.GetDefaultScheme(), Endpoint: \"foo.bar\"}.\n//\n// If the parsed scheme is not registered (i.e. no corresponding resolver available to resolve the\n// endpoint), we set the Scheme to be the default scheme, and set the Endpoint to be the full target\n// string. e.g. target string \"unknown_scheme://authority/endpoint\" will be parsed into\n// &Target{Scheme: resolver.GetDefaultScheme(), Endpoint: \"unknown_scheme://authority/endpoint\"}.\ntype Target struct {\n\tScheme    string\n\tAuthority string\n\tEndpoint  string\n}\n\n// Builder creates a resolver that will be used to watch name resolution updates.\ntype Builder interface {\n\t// Build creates a new resolver for the given target.\n\t//\n\t// gRPC dial calls Build synchronously, and fails if the returned error is\n\t// not nil.\n\tBuild(target Target, cc ClientConn, opts BuildOption) (Resolver, error)\n\t// Scheme returns the scheme supported by this resolver.\n\t// Scheme is defined at https://github.com/grpc/grpc/blob/master/doc/naming.md.\n\tScheme() string\n}\n\n// ResolveNowOption includes additional information for ResolveNow.\ntype ResolveNowOption struct{}\n\n// Resolver watches for the updates on the specified target.\n// Updates include address updates and service config updates.\ntype Resolver interface {\n\t// ResolveNow will be called by gRPC to try to resolve the target name\n\t// again. It's just a hint, resolver can ignore this if it's not necessary.\n\t//\n\t// It could be called multiple times concurrently.\n\tResolveNow(ResolveNowOption)\n\t// Close closes the resolver.\n\tClose()\n}\n\n// UnregisterForTesting removes the resolver builder with the given scheme from the\n// resolver map.\n// This function is for testing only.\nfunc UnregisterForTesting(scheme string) {\n\tdelete(m, scheme)\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/resolver_conn_wrapper.go",
    "content": "/*\n *\n * Copyright 2017 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\npackage grpc\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n\t\"sync/atomic\"\n\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/grpc/internal/channelz\"\n\t\"google.golang.org/grpc/resolver\"\n)\n\n// ccResolverWrapper is a wrapper on top of cc for resolvers.\n// It implements resolver.ClientConnection interface.\ntype ccResolverWrapper struct {\n\tcc       *ClientConn\n\tresolver resolver.Resolver\n\taddrCh   chan []resolver.Address\n\tscCh     chan string\n\tdone     uint32 // accessed atomically; set to 1 when closed.\n\tcurState resolver.State\n}\n\n// split2 returns the values from strings.SplitN(s, sep, 2).\n// If sep is not found, it returns (\"\", \"\", false) instead.\nfunc split2(s, sep string) (string, string, bool) {\n\tspl := strings.SplitN(s, sep, 2)\n\tif len(spl) < 2 {\n\t\treturn \"\", \"\", false\n\t}\n\treturn spl[0], spl[1], true\n}\n\n// parseTarget splits target into a struct containing scheme, authority and\n// endpoint.\n//\n// If target is not a valid scheme://authority/endpoint, it returns {Endpoint:\n// target}.\nfunc parseTarget(target string) (ret resolver.Target) {\n\tvar ok bool\n\tret.Scheme, ret.Endpoint, ok = split2(target, \"://\")\n\tif !ok {\n\t\treturn resolver.Target{Endpoint: target}\n\t}\n\tret.Authority, ret.Endpoint, ok = split2(ret.Endpoint, \"/\")\n\tif !ok {\n\t\treturn resolver.Target{Endpoint: target}\n\t}\n\treturn ret\n}\n\n// newCCResolverWrapper parses cc.target for scheme and gets the resolver\n// builder for this scheme and builds the resolver. The monitoring goroutine\n// for it is not started yet and can be created by calling start().\n//\n// If withResolverBuilder dial option is set, the specified resolver will be\n// used instead.\nfunc newCCResolverWrapper(cc *ClientConn) (*ccResolverWrapper, error) {\n\trb := cc.dopts.resolverBuilder\n\tif rb == nil {\n\t\treturn nil, fmt.Errorf(\"could not get resolver for scheme: %q\", cc.parsedTarget.Scheme)\n\t}\n\n\tccr := &ccResolverWrapper{\n\t\tcc:     cc,\n\t\taddrCh: make(chan []resolver.Address, 1),\n\t\tscCh:   make(chan string, 1),\n\t}\n\n\tvar err error\n\tccr.resolver, err = rb.Build(cc.parsedTarget, ccr, resolver.BuildOption{DisableServiceConfig: cc.dopts.disableServiceConfig})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn ccr, nil\n}\n\nfunc (ccr *ccResolverWrapper) resolveNow(o resolver.ResolveNowOption) {\n\tccr.resolver.ResolveNow(o)\n}\n\nfunc (ccr *ccResolverWrapper) close() {\n\tccr.resolver.Close()\n\tatomic.StoreUint32(&ccr.done, 1)\n}\n\nfunc (ccr *ccResolverWrapper) isDone() bool {\n\treturn atomic.LoadUint32(&ccr.done) == 1\n}\n\nfunc (ccr *ccResolverWrapper) UpdateState(s resolver.State) {\n\tif ccr.isDone() {\n\t\treturn\n\t}\n\tgrpclog.Infof(\"ccResolverWrapper: sending update to cc: %v\", s)\n\tif channelz.IsOn() {\n\t\tccr.addChannelzTraceEvent(s)\n\t}\n\tccr.cc.updateResolverState(s)\n\tccr.curState = s\n}\n\n// NewAddress is called by the resolver implementation to send addresses to gRPC.\nfunc (ccr *ccResolverWrapper) NewAddress(addrs []resolver.Address) {\n\tif ccr.isDone() {\n\t\treturn\n\t}\n\tgrpclog.Infof(\"ccResolverWrapper: sending new addresses to cc: %v\", addrs)\n\tif channelz.IsOn() {\n\t\tccr.addChannelzTraceEvent(resolver.State{Addresses: addrs, ServiceConfig: ccr.curState.ServiceConfig})\n\t}\n\tccr.curState.Addresses = addrs\n\tccr.cc.updateResolverState(ccr.curState)\n}\n\n// NewServiceConfig is called by the resolver implementation to send service\n// configs to gRPC.\nfunc (ccr *ccResolverWrapper) NewServiceConfig(sc string) {\n\tif ccr.isDone() {\n\t\treturn\n\t}\n\tgrpclog.Infof(\"ccResolverWrapper: got new service config: %v\", sc)\n\tc, err := parseServiceConfig(sc)\n\tif err != nil {\n\t\treturn\n\t}\n\tif channelz.IsOn() {\n\t\tccr.addChannelzTraceEvent(resolver.State{Addresses: ccr.curState.Addresses, ServiceConfig: c})\n\t}\n\tccr.curState.ServiceConfig = c\n\tccr.cc.updateResolverState(ccr.curState)\n}\n\nfunc (ccr *ccResolverWrapper) addChannelzTraceEvent(s resolver.State) {\n\tvar updates []string\n\toldSC, oldOK := ccr.curState.ServiceConfig.(*ServiceConfig)\n\tnewSC, newOK := s.ServiceConfig.(*ServiceConfig)\n\tif oldOK != newOK || (oldOK && newOK && oldSC.rawJSONString != newSC.rawJSONString) {\n\t\tupdates = append(updates, \"service config updated\")\n\t}\n\tif len(ccr.curState.Addresses) > 0 && len(s.Addresses) == 0 {\n\t\tupdates = append(updates, \"resolver returned an empty address list\")\n\t} else if len(ccr.curState.Addresses) == 0 && len(s.Addresses) > 0 {\n\t\tupdates = append(updates, \"resolver returned new addresses\")\n\t}\n\tchannelz.AddTraceEvent(ccr.cc.channelzID, &channelz.TraceEventDesc{\n\t\tDesc:     fmt.Sprintf(\"Resolver state updated: %+v (%v)\", s, strings.Join(updates, \"; \")),\n\t\tSeverity: channelz.CtINFO,\n\t})\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/rpc_util.go",
    "content": "/*\n *\n * Copyright 2014 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\npackage grpc\n\nimport (\n\t\"bytes\"\n\t\"compress/gzip\"\n\t\"context\"\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"math\"\n\t\"net/url\"\n\t\"strings\"\n\t\"sync\"\n\t\"time\"\n\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/credentials\"\n\t\"google.golang.org/grpc/encoding\"\n\t\"google.golang.org/grpc/encoding/proto\"\n\t\"google.golang.org/grpc/internal/transport\"\n\t\"google.golang.org/grpc/metadata\"\n\t\"google.golang.org/grpc/peer\"\n\t\"google.golang.org/grpc/stats\"\n\t\"google.golang.org/grpc/status\"\n)\n\n// Compressor defines the interface gRPC uses to compress a message.\n//\n// Deprecated: use package encoding.\ntype Compressor interface {\n\t// Do compresses p into w.\n\tDo(w io.Writer, p []byte) error\n\t// Type returns the compression algorithm the Compressor uses.\n\tType() string\n}\n\ntype gzipCompressor struct {\n\tpool sync.Pool\n}\n\n// NewGZIPCompressor creates a Compressor based on GZIP.\n//\n// Deprecated: use package encoding/gzip.\nfunc NewGZIPCompressor() Compressor {\n\tc, _ := NewGZIPCompressorWithLevel(gzip.DefaultCompression)\n\treturn c\n}\n\n// NewGZIPCompressorWithLevel is like NewGZIPCompressor but specifies the gzip compression level instead\n// of assuming DefaultCompression.\n//\n// The error returned will be nil if the level is valid.\n//\n// Deprecated: use package encoding/gzip.\nfunc NewGZIPCompressorWithLevel(level int) (Compressor, error) {\n\tif level < gzip.DefaultCompression || level > gzip.BestCompression {\n\t\treturn nil, fmt.Errorf(\"grpc: invalid compression level: %d\", level)\n\t}\n\treturn &gzipCompressor{\n\t\tpool: sync.Pool{\n\t\t\tNew: func() interface{} {\n\t\t\t\tw, err := gzip.NewWriterLevel(ioutil.Discard, level)\n\t\t\t\tif err != nil {\n\t\t\t\t\tpanic(err)\n\t\t\t\t}\n\t\t\t\treturn w\n\t\t\t},\n\t\t},\n\t}, nil\n}\n\nfunc (c *gzipCompressor) Do(w io.Writer, p []byte) error {\n\tz := c.pool.Get().(*gzip.Writer)\n\tdefer c.pool.Put(z)\n\tz.Reset(w)\n\tif _, err := z.Write(p); err != nil {\n\t\treturn err\n\t}\n\treturn z.Close()\n}\n\nfunc (c *gzipCompressor) Type() string {\n\treturn \"gzip\"\n}\n\n// Decompressor defines the interface gRPC uses to decompress a message.\n//\n// Deprecated: use package encoding.\ntype Decompressor interface {\n\t// Do reads the data from r and uncompress them.\n\tDo(r io.Reader) ([]byte, error)\n\t// Type returns the compression algorithm the Decompressor uses.\n\tType() string\n}\n\ntype gzipDecompressor struct {\n\tpool sync.Pool\n}\n\n// NewGZIPDecompressor creates a Decompressor based on GZIP.\n//\n// Deprecated: use package encoding/gzip.\nfunc NewGZIPDecompressor() Decompressor {\n\treturn &gzipDecompressor{}\n}\n\nfunc (d *gzipDecompressor) Do(r io.Reader) ([]byte, error) {\n\tvar z *gzip.Reader\n\tswitch maybeZ := d.pool.Get().(type) {\n\tcase nil:\n\t\tnewZ, err := gzip.NewReader(r)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tz = newZ\n\tcase *gzip.Reader:\n\t\tz = maybeZ\n\t\tif err := z.Reset(r); err != nil {\n\t\t\td.pool.Put(z)\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\tdefer func() {\n\t\tz.Close()\n\t\td.pool.Put(z)\n\t}()\n\treturn ioutil.ReadAll(z)\n}\n\nfunc (d *gzipDecompressor) Type() string {\n\treturn \"gzip\"\n}\n\n// callInfo contains all related configuration and information about an RPC.\ntype callInfo struct {\n\tcompressorType        string\n\tfailFast              bool\n\tstream                ClientStream\n\tmaxReceiveMessageSize *int\n\tmaxSendMessageSize    *int\n\tcreds                 credentials.PerRPCCredentials\n\tcontentSubtype        string\n\tcodec                 baseCodec\n\tmaxRetryRPCBufferSize int\n}\n\nfunc defaultCallInfo() *callInfo {\n\treturn &callInfo{\n\t\tfailFast:              true,\n\t\tmaxRetryRPCBufferSize: 256 * 1024, // 256KB\n\t}\n}\n\n// CallOption configures a Call before it starts or extracts information from\n// a Call after it completes.\ntype CallOption interface {\n\t// before is called before the call is sent to any server.  If before\n\t// returns a non-nil error, the RPC fails with that error.\n\tbefore(*callInfo) error\n\n\t// after is called after the call has completed.  after cannot return an\n\t// error, so any failures should be reported via output parameters.\n\tafter(*callInfo)\n}\n\n// EmptyCallOption does not alter the Call configuration.\n// It can be embedded in another structure to carry satellite data for use\n// by interceptors.\ntype EmptyCallOption struct{}\n\nfunc (EmptyCallOption) before(*callInfo) error { return nil }\nfunc (EmptyCallOption) after(*callInfo)        {}\n\n// Header returns a CallOptions that retrieves the header metadata\n// for a unary RPC.\nfunc Header(md *metadata.MD) CallOption {\n\treturn HeaderCallOption{HeaderAddr: md}\n}\n\n// HeaderCallOption is a CallOption for collecting response header metadata.\n// The metadata field will be populated *after* the RPC completes.\n// This is an EXPERIMENTAL API.\ntype HeaderCallOption struct {\n\tHeaderAddr *metadata.MD\n}\n\nfunc (o HeaderCallOption) before(c *callInfo) error { return nil }\nfunc (o HeaderCallOption) after(c *callInfo) {\n\tif c.stream != nil {\n\t\t*o.HeaderAddr, _ = c.stream.Header()\n\t}\n}\n\n// Trailer returns a CallOptions that retrieves the trailer metadata\n// for a unary RPC.\nfunc Trailer(md *metadata.MD) CallOption {\n\treturn TrailerCallOption{TrailerAddr: md}\n}\n\n// TrailerCallOption is a CallOption for collecting response trailer metadata.\n// The metadata field will be populated *after* the RPC completes.\n// This is an EXPERIMENTAL API.\ntype TrailerCallOption struct {\n\tTrailerAddr *metadata.MD\n}\n\nfunc (o TrailerCallOption) before(c *callInfo) error { return nil }\nfunc (o TrailerCallOption) after(c *callInfo) {\n\tif c.stream != nil {\n\t\t*o.TrailerAddr = c.stream.Trailer()\n\t}\n}\n\n// Peer returns a CallOption that retrieves peer information for a unary RPC.\n// The peer field will be populated *after* the RPC completes.\nfunc Peer(p *peer.Peer) CallOption {\n\treturn PeerCallOption{PeerAddr: p}\n}\n\n// PeerCallOption is a CallOption for collecting the identity of the remote\n// peer. The peer field will be populated *after* the RPC completes.\n// This is an EXPERIMENTAL API.\ntype PeerCallOption struct {\n\tPeerAddr *peer.Peer\n}\n\nfunc (o PeerCallOption) before(c *callInfo) error { return nil }\nfunc (o PeerCallOption) after(c *callInfo) {\n\tif c.stream != nil {\n\t\tif x, ok := peer.FromContext(c.stream.Context()); ok {\n\t\t\t*o.PeerAddr = *x\n\t\t}\n\t}\n}\n\n// WaitForReady configures the action to take when an RPC is attempted on broken\n// connections or unreachable servers. If waitForReady is false, the RPC will fail\n// immediately. Otherwise, the RPC client will block the call until a\n// connection is available (or the call is canceled or times out) and will\n// retry the call if it fails due to a transient error.  gRPC will not retry if\n// data was written to the wire unless the server indicates it did not process\n// the data.  Please refer to\n// https://github.com/grpc/grpc/blob/master/doc/wait-for-ready.md.\n//\n// By default, RPCs don't \"wait for ready\".\nfunc WaitForReady(waitForReady bool) CallOption {\n\treturn FailFastCallOption{FailFast: !waitForReady}\n}\n\n// FailFast is the opposite of WaitForReady.\n//\n// Deprecated: use WaitForReady.\nfunc FailFast(failFast bool) CallOption {\n\treturn FailFastCallOption{FailFast: failFast}\n}\n\n// FailFastCallOption is a CallOption for indicating whether an RPC should fail\n// fast or not.\n// This is an EXPERIMENTAL API.\ntype FailFastCallOption struct {\n\tFailFast bool\n}\n\nfunc (o FailFastCallOption) before(c *callInfo) error {\n\tc.failFast = o.FailFast\n\treturn nil\n}\nfunc (o FailFastCallOption) after(c *callInfo) {}\n\n// MaxCallRecvMsgSize returns a CallOption which sets the maximum message size the client can receive.\nfunc MaxCallRecvMsgSize(s int) CallOption {\n\treturn MaxRecvMsgSizeCallOption{MaxRecvMsgSize: s}\n}\n\n// MaxRecvMsgSizeCallOption is a CallOption that indicates the maximum message\n// size the client can receive.\n// This is an EXPERIMENTAL API.\ntype MaxRecvMsgSizeCallOption struct {\n\tMaxRecvMsgSize int\n}\n\nfunc (o MaxRecvMsgSizeCallOption) before(c *callInfo) error {\n\tc.maxReceiveMessageSize = &o.MaxRecvMsgSize\n\treturn nil\n}\nfunc (o MaxRecvMsgSizeCallOption) after(c *callInfo) {}\n\n// MaxCallSendMsgSize returns a CallOption which sets the maximum message size the client can send.\nfunc MaxCallSendMsgSize(s int) CallOption {\n\treturn MaxSendMsgSizeCallOption{MaxSendMsgSize: s}\n}\n\n// MaxSendMsgSizeCallOption is a CallOption that indicates the maximum message\n// size the client can send.\n// This is an EXPERIMENTAL API.\ntype MaxSendMsgSizeCallOption struct {\n\tMaxSendMsgSize int\n}\n\nfunc (o MaxSendMsgSizeCallOption) before(c *callInfo) error {\n\tc.maxSendMessageSize = &o.MaxSendMsgSize\n\treturn nil\n}\nfunc (o MaxSendMsgSizeCallOption) after(c *callInfo) {}\n\n// PerRPCCredentials returns a CallOption that sets credentials.PerRPCCredentials\n// for a call.\nfunc PerRPCCredentials(creds credentials.PerRPCCredentials) CallOption {\n\treturn PerRPCCredsCallOption{Creds: creds}\n}\n\n// PerRPCCredsCallOption is a CallOption that indicates the per-RPC\n// credentials to use for the call.\n// This is an EXPERIMENTAL API.\ntype PerRPCCredsCallOption struct {\n\tCreds credentials.PerRPCCredentials\n}\n\nfunc (o PerRPCCredsCallOption) before(c *callInfo) error {\n\tc.creds = o.Creds\n\treturn nil\n}\nfunc (o PerRPCCredsCallOption) after(c *callInfo) {}\n\n// UseCompressor returns a CallOption which sets the compressor used when\n// sending the request.  If WithCompressor is also set, UseCompressor has\n// higher priority.\n//\n// This API is EXPERIMENTAL.\nfunc UseCompressor(name string) CallOption {\n\treturn CompressorCallOption{CompressorType: name}\n}\n\n// CompressorCallOption is a CallOption that indicates the compressor to use.\n// This is an EXPERIMENTAL API.\ntype CompressorCallOption struct {\n\tCompressorType string\n}\n\nfunc (o CompressorCallOption) before(c *callInfo) error {\n\tc.compressorType = o.CompressorType\n\treturn nil\n}\nfunc (o CompressorCallOption) after(c *callInfo) {}\n\n// CallContentSubtype returns a CallOption that will set the content-subtype\n// for a call. For example, if content-subtype is \"json\", the Content-Type over\n// the wire will be \"application/grpc+json\". The content-subtype is converted\n// to lowercase before being included in Content-Type. See Content-Type on\n// https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md#requests for\n// more details.\n//\n// If ForceCodec is not also used, the content-subtype will be used to look up\n// the Codec to use in the registry controlled by RegisterCodec. See the\n// documentation on RegisterCodec for details on registration. The lookup of\n// content-subtype is case-insensitive. If no such Codec is found, the call\n// will result in an error with code codes.Internal.\n//\n// If ForceCodec is also used, that Codec will be used for all request and\n// response messages, with the content-subtype set to the given contentSubtype\n// here for requests.\nfunc CallContentSubtype(contentSubtype string) CallOption {\n\treturn ContentSubtypeCallOption{ContentSubtype: strings.ToLower(contentSubtype)}\n}\n\n// ContentSubtypeCallOption is a CallOption that indicates the content-subtype\n// used for marshaling messages.\n// This is an EXPERIMENTAL API.\ntype ContentSubtypeCallOption struct {\n\tContentSubtype string\n}\n\nfunc (o ContentSubtypeCallOption) before(c *callInfo) error {\n\tc.contentSubtype = o.ContentSubtype\n\treturn nil\n}\nfunc (o ContentSubtypeCallOption) after(c *callInfo) {}\n\n// ForceCodec returns a CallOption that will set the given Codec to be\n// used for all request and response messages for a call. The result of calling\n// String() will be used as the content-subtype in a case-insensitive manner.\n//\n// See Content-Type on\n// https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md#requests for\n// more details. Also see the documentation on RegisterCodec and\n// CallContentSubtype for more details on the interaction between Codec and\n// content-subtype.\n//\n// This function is provided for advanced users; prefer to use only\n// CallContentSubtype to select a registered codec instead.\n//\n// This is an EXPERIMENTAL API.\nfunc ForceCodec(codec encoding.Codec) CallOption {\n\treturn ForceCodecCallOption{Codec: codec}\n}\n\n// ForceCodecCallOption is a CallOption that indicates the codec used for\n// marshaling messages.\n//\n// This is an EXPERIMENTAL API.\ntype ForceCodecCallOption struct {\n\tCodec encoding.Codec\n}\n\nfunc (o ForceCodecCallOption) before(c *callInfo) error {\n\tc.codec = o.Codec\n\treturn nil\n}\nfunc (o ForceCodecCallOption) after(c *callInfo) {}\n\n// CallCustomCodec behaves like ForceCodec, but accepts a grpc.Codec instead of\n// an encoding.Codec.\n//\n// Deprecated: use ForceCodec instead.\nfunc CallCustomCodec(codec Codec) CallOption {\n\treturn CustomCodecCallOption{Codec: codec}\n}\n\n// CustomCodecCallOption is a CallOption that indicates the codec used for\n// marshaling messages.\n//\n// This is an EXPERIMENTAL API.\ntype CustomCodecCallOption struct {\n\tCodec Codec\n}\n\nfunc (o CustomCodecCallOption) before(c *callInfo) error {\n\tc.codec = o.Codec\n\treturn nil\n}\nfunc (o CustomCodecCallOption) after(c *callInfo) {}\n\n// MaxRetryRPCBufferSize returns a CallOption that limits the amount of memory\n// used for buffering this RPC's requests for retry purposes.\n//\n// This API is EXPERIMENTAL.\nfunc MaxRetryRPCBufferSize(bytes int) CallOption {\n\treturn MaxRetryRPCBufferSizeCallOption{bytes}\n}\n\n// MaxRetryRPCBufferSizeCallOption is a CallOption indicating the amount of\n// memory to be used for caching this RPC for retry purposes.\n// This is an EXPERIMENTAL API.\ntype MaxRetryRPCBufferSizeCallOption struct {\n\tMaxRetryRPCBufferSize int\n}\n\nfunc (o MaxRetryRPCBufferSizeCallOption) before(c *callInfo) error {\n\tc.maxRetryRPCBufferSize = o.MaxRetryRPCBufferSize\n\treturn nil\n}\nfunc (o MaxRetryRPCBufferSizeCallOption) after(c *callInfo) {}\n\n// The format of the payload: compressed or not?\ntype payloadFormat uint8\n\nconst (\n\tcompressionNone payloadFormat = 0 // no compression\n\tcompressionMade payloadFormat = 1 // compressed\n)\n\n// parser reads complete gRPC messages from the underlying reader.\ntype parser struct {\n\t// r is the underlying reader.\n\t// See the comment on recvMsg for the permissible\n\t// error types.\n\tr io.Reader\n\n\t// The header of a gRPC message. Find more detail at\n\t// https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md\n\theader [5]byte\n}\n\n// recvMsg reads a complete gRPC message from the stream.\n//\n// It returns the message and its payload (compression/encoding)\n// format. The caller owns the returned msg memory.\n//\n// If there is an error, possible values are:\n//   * io.EOF, when no messages remain\n//   * io.ErrUnexpectedEOF\n//   * of type transport.ConnectionError\n//   * an error from the status package\n// No other error values or types must be returned, which also means\n// that the underlying io.Reader must not return an incompatible\n// error.\nfunc (p *parser) recvMsg(maxReceiveMessageSize int) (pf payloadFormat, msg []byte, err error) {\n\tif _, err := p.r.Read(p.header[:]); err != nil {\n\t\treturn 0, nil, err\n\t}\n\n\tpf = payloadFormat(p.header[0])\n\tlength := binary.BigEndian.Uint32(p.header[1:])\n\n\tif length == 0 {\n\t\treturn pf, nil, nil\n\t}\n\tif int64(length) > int64(maxInt) {\n\t\treturn 0, nil, status.Errorf(codes.ResourceExhausted, \"grpc: received message larger than max length allowed on current machine (%d vs. %d)\", length, maxInt)\n\t}\n\tif int(length) > maxReceiveMessageSize {\n\t\treturn 0, nil, status.Errorf(codes.ResourceExhausted, \"grpc: received message larger than max (%d vs. %d)\", length, maxReceiveMessageSize)\n\t}\n\t// TODO(bradfitz,zhaoq): garbage. reuse buffer after proto decoding instead\n\t// of making it for each message:\n\tmsg = make([]byte, int(length))\n\tif _, err := p.r.Read(msg); err != nil {\n\t\tif err == io.EOF {\n\t\t\terr = io.ErrUnexpectedEOF\n\t\t}\n\t\treturn 0, nil, err\n\t}\n\treturn pf, msg, nil\n}\n\n// encode serializes msg and returns a buffer containing the message, or an\n// error if it is too large to be transmitted by grpc.  If msg is nil, it\n// generates an empty message.\nfunc encode(c baseCodec, msg interface{}) ([]byte, error) {\n\tif msg == nil { // NOTE: typed nils will not be caught by this check\n\t\treturn nil, nil\n\t}\n\tb, err := c.Marshal(msg)\n\tif err != nil {\n\t\treturn nil, status.Errorf(codes.Internal, \"grpc: error while marshaling: %v\", err.Error())\n\t}\n\tif uint(len(b)) > math.MaxUint32 {\n\t\treturn nil, status.Errorf(codes.ResourceExhausted, \"grpc: message too large (%d bytes)\", len(b))\n\t}\n\treturn b, nil\n}\n\n// compress returns the input bytes compressed by compressor or cp.  If both\n// compressors are nil, returns nil.\n//\n// TODO(dfawley): eliminate cp parameter by wrapping Compressor in an encoding.Compressor.\nfunc compress(in []byte, cp Compressor, compressor encoding.Compressor) ([]byte, error) {\n\tif compressor == nil && cp == nil {\n\t\treturn nil, nil\n\t}\n\twrapErr := func(err error) error {\n\t\treturn status.Errorf(codes.Internal, \"grpc: error while compressing: %v\", err.Error())\n\t}\n\tcbuf := &bytes.Buffer{}\n\tif compressor != nil {\n\t\tz, err := compressor.Compress(cbuf)\n\t\tif err != nil {\n\t\t\treturn nil, wrapErr(err)\n\t\t}\n\t\tif _, err := z.Write(in); err != nil {\n\t\t\treturn nil, wrapErr(err)\n\t\t}\n\t\tif err := z.Close(); err != nil {\n\t\t\treturn nil, wrapErr(err)\n\t\t}\n\t} else {\n\t\tif err := cp.Do(cbuf, in); err != nil {\n\t\t\treturn nil, wrapErr(err)\n\t\t}\n\t}\n\treturn cbuf.Bytes(), nil\n}\n\nconst (\n\tpayloadLen = 1\n\tsizeLen    = 4\n\theaderLen  = payloadLen + sizeLen\n)\n\n// msgHeader returns a 5-byte header for the message being transmitted and the\n// payload, which is compData if non-nil or data otherwise.\nfunc msgHeader(data, compData []byte) (hdr []byte, payload []byte) {\n\thdr = make([]byte, headerLen)\n\tif compData != nil {\n\t\thdr[0] = byte(compressionMade)\n\t\tdata = compData\n\t} else {\n\t\thdr[0] = byte(compressionNone)\n\t}\n\n\t// Write length of payload into buf\n\tbinary.BigEndian.PutUint32(hdr[payloadLen:], uint32(len(data)))\n\treturn hdr, data\n}\n\nfunc outPayload(client bool, msg interface{}, data, payload []byte, t time.Time) *stats.OutPayload {\n\treturn &stats.OutPayload{\n\t\tClient:     client,\n\t\tPayload:    msg,\n\t\tData:       data,\n\t\tLength:     len(data),\n\t\tWireLength: len(payload) + headerLen,\n\t\tSentTime:   t,\n\t}\n}\n\nfunc checkRecvPayload(pf payloadFormat, recvCompress string, haveCompressor bool) *status.Status {\n\tswitch pf {\n\tcase compressionNone:\n\tcase compressionMade:\n\t\tif recvCompress == \"\" || recvCompress == encoding.Identity {\n\t\t\treturn status.New(codes.Internal, \"grpc: compressed flag set with identity or empty encoding\")\n\t\t}\n\t\tif !haveCompressor {\n\t\t\treturn status.Newf(codes.Unimplemented, \"grpc: Decompressor is not installed for grpc-encoding %q\", recvCompress)\n\t\t}\n\tdefault:\n\t\treturn status.Newf(codes.Internal, \"grpc: received unexpected payload format %d\", pf)\n\t}\n\treturn nil\n}\n\ntype payloadInfo struct {\n\twireLength        int // The compressed length got from wire.\n\tuncompressedBytes []byte\n}\n\nfunc recvAndDecompress(p *parser, s *transport.Stream, dc Decompressor, maxReceiveMessageSize int, payInfo *payloadInfo, compressor encoding.Compressor) ([]byte, error) {\n\tpf, d, err := p.recvMsg(maxReceiveMessageSize)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif payInfo != nil {\n\t\tpayInfo.wireLength = len(d)\n\t}\n\n\tif st := checkRecvPayload(pf, s.RecvCompress(), compressor != nil || dc != nil); st != nil {\n\t\treturn nil, st.Err()\n\t}\n\n\tif pf == compressionMade {\n\t\t// To match legacy behavior, if the decompressor is set by WithDecompressor or RPCDecompressor,\n\t\t// use this decompressor as the default.\n\t\tif dc != nil {\n\t\t\td, err = dc.Do(bytes.NewReader(d))\n\t\t\tif err != nil {\n\t\t\t\treturn nil, status.Errorf(codes.Internal, \"grpc: failed to decompress the received message %v\", err)\n\t\t\t}\n\t\t} else {\n\t\t\tdcReader, err := compressor.Decompress(bytes.NewReader(d))\n\t\t\tif err != nil {\n\t\t\t\treturn nil, status.Errorf(codes.Internal, \"grpc: failed to decompress the received message %v\", err)\n\t\t\t}\n\t\t\t// Read from LimitReader with limit max+1. So if the underlying\n\t\t\t// reader is over limit, the result will be bigger than max.\n\t\t\td, err = ioutil.ReadAll(io.LimitReader(dcReader, int64(maxReceiveMessageSize)+1))\n\t\t\tif err != nil {\n\t\t\t\treturn nil, status.Errorf(codes.Internal, \"grpc: failed to decompress the received message %v\", err)\n\t\t\t}\n\t\t}\n\t}\n\tif len(d) > maxReceiveMessageSize {\n\t\t// TODO: Revisit the error code. Currently keep it consistent with java\n\t\t// implementation.\n\t\treturn nil, status.Errorf(codes.ResourceExhausted, \"grpc: received message larger than max (%d vs. %d)\", len(d), maxReceiveMessageSize)\n\t}\n\treturn d, nil\n}\n\n// For the two compressor parameters, both should not be set, but if they are,\n// dc takes precedence over compressor.\n// TODO(dfawley): wrap the old compressor/decompressor using the new API?\nfunc recv(p *parser, c baseCodec, s *transport.Stream, dc Decompressor, m interface{}, maxReceiveMessageSize int, payInfo *payloadInfo, compressor encoding.Compressor) error {\n\td, err := recvAndDecompress(p, s, dc, maxReceiveMessageSize, payInfo, compressor)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif err := c.Unmarshal(d, m); err != nil {\n\t\treturn status.Errorf(codes.Internal, \"grpc: failed to unmarshal the received message %v\", err)\n\t}\n\tif payInfo != nil {\n\t\tpayInfo.uncompressedBytes = d\n\t}\n\treturn nil\n}\n\n// Information about RPC\ntype rpcInfo struct {\n\tfailfast      bool\n\tpreloaderInfo *compressorInfo\n}\n\n// Information about Preloader\n// Responsible for storing codec, and compressors\n// If stream (s) has  context s.Context which stores rpcInfo that has non nil\n// pointers to codec, and compressors, then we can use preparedMsg for Async message prep\n// and reuse marshalled bytes\ntype compressorInfo struct {\n\tcodec baseCodec\n\tcp    Compressor\n\tcomp  encoding.Compressor\n}\n\ntype rpcInfoContextKey struct{}\n\nfunc newContextWithRPCInfo(ctx context.Context, failfast bool, codec baseCodec, cp Compressor, comp encoding.Compressor) context.Context {\n\treturn context.WithValue(ctx, rpcInfoContextKey{}, &rpcInfo{\n\t\tfailfast: failfast,\n\t\tpreloaderInfo: &compressorInfo{\n\t\t\tcodec: codec,\n\t\t\tcp:    cp,\n\t\t\tcomp:  comp,\n\t\t},\n\t})\n}\n\nfunc rpcInfoFromContext(ctx context.Context) (s *rpcInfo, ok bool) {\n\ts, ok = ctx.Value(rpcInfoContextKey{}).(*rpcInfo)\n\treturn\n}\n\n// Code returns the error code for err if it was produced by the rpc system.\n// Otherwise, it returns codes.Unknown.\n//\n// Deprecated: use status.Code instead.\nfunc Code(err error) codes.Code {\n\treturn status.Code(err)\n}\n\n// ErrorDesc returns the error description of err if it was produced by the rpc system.\n// Otherwise, it returns err.Error() or empty string when err is nil.\n//\n// Deprecated: use status.Convert and Message method instead.\nfunc ErrorDesc(err error) string {\n\treturn status.Convert(err).Message()\n}\n\n// Errorf returns an error containing an error code and a description;\n// Errorf returns nil if c is OK.\n//\n// Deprecated: use status.Errorf instead.\nfunc Errorf(c codes.Code, format string, a ...interface{}) error {\n\treturn status.Errorf(c, format, a...)\n}\n\n// toRPCErr converts an error into an error from the status package.\nfunc toRPCErr(err error) error {\n\tif err == nil || err == io.EOF {\n\t\treturn err\n\t}\n\tif err == io.ErrUnexpectedEOF {\n\t\treturn status.Error(codes.Internal, err.Error())\n\t}\n\tif _, ok := status.FromError(err); ok {\n\t\treturn err\n\t}\n\tswitch e := err.(type) {\n\tcase transport.ConnectionError:\n\t\treturn status.Error(codes.Unavailable, e.Desc)\n\tdefault:\n\t\tswitch err {\n\t\tcase context.DeadlineExceeded:\n\t\t\treturn status.Error(codes.DeadlineExceeded, err.Error())\n\t\tcase context.Canceled:\n\t\t\treturn status.Error(codes.Canceled, err.Error())\n\t\t}\n\t}\n\treturn status.Error(codes.Unknown, err.Error())\n}\n\n// setCallInfoCodec should only be called after CallOptions have been applied.\nfunc setCallInfoCodec(c *callInfo) error {\n\tif c.codec != nil {\n\t\t// codec was already set by a CallOption; use it.\n\t\treturn nil\n\t}\n\n\tif c.contentSubtype == \"\" {\n\t\t// No codec specified in CallOptions; use proto by default.\n\t\tc.codec = encoding.GetCodec(proto.Name)\n\t\treturn nil\n\t}\n\n\t// c.contentSubtype is already lowercased in CallContentSubtype\n\tc.codec = encoding.GetCodec(c.contentSubtype)\n\tif c.codec == nil {\n\t\treturn status.Errorf(codes.Internal, \"no codec registered for content-subtype %s\", c.contentSubtype)\n\t}\n\treturn nil\n}\n\n// parseDialTarget returns the network and address to pass to dialer\nfunc parseDialTarget(target string) (net string, addr string) {\n\tnet = \"tcp\"\n\n\tm1 := strings.Index(target, \":\")\n\tm2 := strings.Index(target, \":/\")\n\n\t// handle unix:addr which will fail with url.Parse\n\tif m1 >= 0 && m2 < 0 {\n\t\tif n := target[0:m1]; n == \"unix\" {\n\t\t\tnet = n\n\t\t\taddr = target[m1+1:]\n\t\t\treturn net, addr\n\t\t}\n\t}\n\tif m2 >= 0 {\n\t\tt, err := url.Parse(target)\n\t\tif err != nil {\n\t\t\treturn net, target\n\t\t}\n\t\tscheme := t.Scheme\n\t\taddr = t.Path\n\t\tif scheme == \"unix\" {\n\t\t\tnet = scheme\n\t\t\tif addr == \"\" {\n\t\t\t\taddr = t.Host\n\t\t\t}\n\t\t\treturn net, addr\n\t\t}\n\t}\n\n\treturn net, target\n}\n\n// channelzData is used to store channelz related data for ClientConn, addrConn and Server.\n// These fields cannot be embedded in the original structs (e.g. ClientConn), since to do atomic\n// operation on int64 variable on 32-bit machine, user is responsible to enforce memory alignment.\n// Here, by grouping those int64 fields inside a struct, we are enforcing the alignment.\ntype channelzData struct {\n\tcallsStarted   int64\n\tcallsFailed    int64\n\tcallsSucceeded int64\n\t// lastCallStartedTime stores the timestamp that last call starts. It is of int64 type instead of\n\t// time.Time since it's more costly to atomically update time.Time variable than int64 variable.\n\tlastCallStartedTime int64\n}\n\n// The SupportPackageIsVersion variables are referenced from generated protocol\n// buffer files to ensure compatibility with the gRPC version used.  The latest\n// support package version is 5.\n//\n// Older versions are kept for compatibility. They may be removed if\n// compatibility cannot be maintained.\n//\n// These constants should not be referenced from any other code.\nconst (\n\tSupportPackageIsVersion3 = true\n\tSupportPackageIsVersion4 = true\n\tSupportPackageIsVersion5 = true\n)\n\nconst grpcUA = \"grpc-go/\" + Version\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/server.go",
    "content": "/*\n *\n * Copyright 2014 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\npackage grpc\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"math\"\n\t\"net\"\n\t\"net/http\"\n\t\"reflect\"\n\t\"runtime\"\n\t\"strings\"\n\t\"sync\"\n\t\"sync/atomic\"\n\t\"time\"\n\n\t\"golang.org/x/net/trace\"\n\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/credentials\"\n\t\"google.golang.org/grpc/encoding\"\n\t\"google.golang.org/grpc/encoding/proto\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/grpc/internal/binarylog\"\n\t\"google.golang.org/grpc/internal/channelz\"\n\t\"google.golang.org/grpc/internal/transport\"\n\t\"google.golang.org/grpc/keepalive\"\n\t\"google.golang.org/grpc/metadata\"\n\t\"google.golang.org/grpc/peer\"\n\t\"google.golang.org/grpc/stats\"\n\t\"google.golang.org/grpc/status\"\n\t\"google.golang.org/grpc/tap\"\n)\n\nconst (\n\tdefaultServerMaxReceiveMessageSize = 1024 * 1024 * 4\n\tdefaultServerMaxSendMessageSize    = math.MaxInt32\n)\n\ntype methodHandler func(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor UnaryServerInterceptor) (interface{}, error)\n\n// MethodDesc represents an RPC service's method specification.\ntype MethodDesc struct {\n\tMethodName string\n\tHandler    methodHandler\n}\n\n// ServiceDesc represents an RPC service's specification.\ntype ServiceDesc struct {\n\tServiceName string\n\t// The pointer to the service interface. Used to check whether the user\n\t// provided implementation satisfies the interface requirements.\n\tHandlerType interface{}\n\tMethods     []MethodDesc\n\tStreams     []StreamDesc\n\tMetadata    interface{}\n}\n\n// service consists of the information of the server serving this service and\n// the methods in this service.\ntype service struct {\n\tserver interface{} // the server for service methods\n\tmd     map[string]*MethodDesc\n\tsd     map[string]*StreamDesc\n\tmdata  interface{}\n}\n\n// Server is a gRPC server to serve RPC requests.\ntype Server struct {\n\topts serverOptions\n\n\tmu     sync.Mutex // guards following\n\tlis    map[net.Listener]bool\n\tconns  map[io.Closer]bool\n\tserve  bool\n\tdrain  bool\n\tcv     *sync.Cond          // signaled when connections close for GracefulStop\n\tm      map[string]*service // service name -> service info\n\tevents trace.EventLog\n\n\tquit               chan struct{}\n\tdone               chan struct{}\n\tquitOnce           sync.Once\n\tdoneOnce           sync.Once\n\tchannelzRemoveOnce sync.Once\n\tserveWG            sync.WaitGroup // counts active Serve goroutines for GracefulStop\n\n\tchannelzID int64 // channelz unique identification number\n\tczData     *channelzData\n}\n\ntype serverOptions struct {\n\tcreds                 credentials.TransportCredentials\n\tcodec                 baseCodec\n\tcp                    Compressor\n\tdc                    Decompressor\n\tunaryInt              UnaryServerInterceptor\n\tstreamInt             StreamServerInterceptor\n\tinTapHandle           tap.ServerInHandle\n\tstatsHandler          stats.Handler\n\tmaxConcurrentStreams  uint32\n\tmaxReceiveMessageSize int\n\tmaxSendMessageSize    int\n\tunknownStreamDesc     *StreamDesc\n\tkeepaliveParams       keepalive.ServerParameters\n\tkeepalivePolicy       keepalive.EnforcementPolicy\n\tinitialWindowSize     int32\n\tinitialConnWindowSize int32\n\twriteBufferSize       int\n\treadBufferSize        int\n\tconnectionTimeout     time.Duration\n\tmaxHeaderListSize     *uint32\n}\n\nvar defaultServerOptions = serverOptions{\n\tmaxReceiveMessageSize: defaultServerMaxReceiveMessageSize,\n\tmaxSendMessageSize:    defaultServerMaxSendMessageSize,\n\tconnectionTimeout:     120 * time.Second,\n\twriteBufferSize:       defaultWriteBufSize,\n\treadBufferSize:        defaultReadBufSize,\n}\n\n// A ServerOption sets options such as credentials, codec and keepalive parameters, etc.\ntype ServerOption interface {\n\tapply(*serverOptions)\n}\n\n// EmptyServerOption does not alter the server configuration. It can be embedded\n// in another structure to build custom server options.\n//\n// This API is EXPERIMENTAL.\ntype EmptyServerOption struct{}\n\nfunc (EmptyServerOption) apply(*serverOptions) {}\n\n// funcServerOption wraps a function that modifies serverOptions into an\n// implementation of the ServerOption interface.\ntype funcServerOption struct {\n\tf func(*serverOptions)\n}\n\nfunc (fdo *funcServerOption) apply(do *serverOptions) {\n\tfdo.f(do)\n}\n\nfunc newFuncServerOption(f func(*serverOptions)) *funcServerOption {\n\treturn &funcServerOption{\n\t\tf: f,\n\t}\n}\n\n// WriteBufferSize determines how much data can be batched before doing a write on the wire.\n// The corresponding memory allocation for this buffer will be twice the size to keep syscalls low.\n// The default value for this buffer is 32KB.\n// Zero will disable the write buffer such that each write will be on underlying connection.\n// Note: A Send call may not directly translate to a write.\nfunc WriteBufferSize(s int) ServerOption {\n\treturn newFuncServerOption(func(o *serverOptions) {\n\t\to.writeBufferSize = s\n\t})\n}\n\n// ReadBufferSize lets you set the size of read buffer, this determines how much data can be read at most\n// for one read syscall.\n// The default value for this buffer is 32KB.\n// Zero will disable read buffer for a connection so data framer can access the underlying\n// conn directly.\nfunc ReadBufferSize(s int) ServerOption {\n\treturn newFuncServerOption(func(o *serverOptions) {\n\t\to.readBufferSize = s\n\t})\n}\n\n// InitialWindowSize returns a ServerOption that sets window size for stream.\n// The lower bound for window size is 64K and any value smaller than that will be ignored.\nfunc InitialWindowSize(s int32) ServerOption {\n\treturn newFuncServerOption(func(o *serverOptions) {\n\t\to.initialWindowSize = s\n\t})\n}\n\n// InitialConnWindowSize returns a ServerOption that sets window size for a connection.\n// The lower bound for window size is 64K and any value smaller than that will be ignored.\nfunc InitialConnWindowSize(s int32) ServerOption {\n\treturn newFuncServerOption(func(o *serverOptions) {\n\t\to.initialConnWindowSize = s\n\t})\n}\n\n// KeepaliveParams returns a ServerOption that sets keepalive and max-age parameters for the server.\nfunc KeepaliveParams(kp keepalive.ServerParameters) ServerOption {\n\tif kp.Time > 0 && kp.Time < time.Second {\n\t\tgrpclog.Warning(\"Adjusting keepalive ping interval to minimum period of 1s\")\n\t\tkp.Time = time.Second\n\t}\n\n\treturn newFuncServerOption(func(o *serverOptions) {\n\t\to.keepaliveParams = kp\n\t})\n}\n\n// KeepaliveEnforcementPolicy returns a ServerOption that sets keepalive enforcement policy for the server.\nfunc KeepaliveEnforcementPolicy(kep keepalive.EnforcementPolicy) ServerOption {\n\treturn newFuncServerOption(func(o *serverOptions) {\n\t\to.keepalivePolicy = kep\n\t})\n}\n\n// CustomCodec returns a ServerOption that sets a codec for message marshaling and unmarshaling.\n//\n// This will override any lookups by content-subtype for Codecs registered with RegisterCodec.\nfunc CustomCodec(codec Codec) ServerOption {\n\treturn newFuncServerOption(func(o *serverOptions) {\n\t\to.codec = codec\n\t})\n}\n\n// RPCCompressor returns a ServerOption that sets a compressor for outbound\n// messages.  For backward compatibility, all outbound messages will be sent\n// using this compressor, regardless of incoming message compression.  By\n// default, server messages will be sent using the same compressor with which\n// request messages were sent.\n//\n// Deprecated: use encoding.RegisterCompressor instead.\nfunc RPCCompressor(cp Compressor) ServerOption {\n\treturn newFuncServerOption(func(o *serverOptions) {\n\t\to.cp = cp\n\t})\n}\n\n// RPCDecompressor returns a ServerOption that sets a decompressor for inbound\n// messages.  It has higher priority than decompressors registered via\n// encoding.RegisterCompressor.\n//\n// Deprecated: use encoding.RegisterCompressor instead.\nfunc RPCDecompressor(dc Decompressor) ServerOption {\n\treturn newFuncServerOption(func(o *serverOptions) {\n\t\to.dc = dc\n\t})\n}\n\n// MaxMsgSize returns a ServerOption to set the max message size in bytes the server can receive.\n// If this is not set, gRPC uses the default limit.\n//\n// Deprecated: use MaxRecvMsgSize instead.\nfunc MaxMsgSize(m int) ServerOption {\n\treturn MaxRecvMsgSize(m)\n}\n\n// MaxRecvMsgSize returns a ServerOption to set the max message size in bytes the server can receive.\n// If this is not set, gRPC uses the default 4MB.\nfunc MaxRecvMsgSize(m int) ServerOption {\n\treturn newFuncServerOption(func(o *serverOptions) {\n\t\to.maxReceiveMessageSize = m\n\t})\n}\n\n// MaxSendMsgSize returns a ServerOption to set the max message size in bytes the server can send.\n// If this is not set, gRPC uses the default `math.MaxInt32`.\nfunc MaxSendMsgSize(m int) ServerOption {\n\treturn newFuncServerOption(func(o *serverOptions) {\n\t\to.maxSendMessageSize = m\n\t})\n}\n\n// MaxConcurrentStreams returns a ServerOption that will apply a limit on the number\n// of concurrent streams to each ServerTransport.\nfunc MaxConcurrentStreams(n uint32) ServerOption {\n\treturn newFuncServerOption(func(o *serverOptions) {\n\t\to.maxConcurrentStreams = n\n\t})\n}\n\n// Creds returns a ServerOption that sets credentials for server connections.\nfunc Creds(c credentials.TransportCredentials) ServerOption {\n\treturn newFuncServerOption(func(o *serverOptions) {\n\t\to.creds = c\n\t})\n}\n\n// UnaryInterceptor returns a ServerOption that sets the UnaryServerInterceptor for the\n// server. Only one unary interceptor can be installed. The construction of multiple\n// interceptors (e.g., chaining) can be implemented at the caller.\nfunc UnaryInterceptor(i UnaryServerInterceptor) ServerOption {\n\treturn newFuncServerOption(func(o *serverOptions) {\n\t\tif o.unaryInt != nil {\n\t\t\tpanic(\"The unary server interceptor was already set and may not be reset.\")\n\t\t}\n\t\to.unaryInt = i\n\t})\n}\n\n// StreamInterceptor returns a ServerOption that sets the StreamServerInterceptor for the\n// server. Only one stream interceptor can be installed.\nfunc StreamInterceptor(i StreamServerInterceptor) ServerOption {\n\treturn newFuncServerOption(func(o *serverOptions) {\n\t\tif o.streamInt != nil {\n\t\t\tpanic(\"The stream server interceptor was already set and may not be reset.\")\n\t\t}\n\t\to.streamInt = i\n\t})\n}\n\n// InTapHandle returns a ServerOption that sets the tap handle for all the server\n// transport to be created. Only one can be installed.\nfunc InTapHandle(h tap.ServerInHandle) ServerOption {\n\treturn newFuncServerOption(func(o *serverOptions) {\n\t\tif o.inTapHandle != nil {\n\t\t\tpanic(\"The tap handle was already set and may not be reset.\")\n\t\t}\n\t\to.inTapHandle = h\n\t})\n}\n\n// StatsHandler returns a ServerOption that sets the stats handler for the server.\nfunc StatsHandler(h stats.Handler) ServerOption {\n\treturn newFuncServerOption(func(o *serverOptions) {\n\t\to.statsHandler = h\n\t})\n}\n\n// UnknownServiceHandler returns a ServerOption that allows for adding a custom\n// unknown service handler. The provided method is a bidi-streaming RPC service\n// handler that will be invoked instead of returning the \"unimplemented\" gRPC\n// error whenever a request is received for an unregistered service or method.\n// The handling function has full access to the Context of the request and the\n// stream, and the invocation bypasses interceptors.\nfunc UnknownServiceHandler(streamHandler StreamHandler) ServerOption {\n\treturn newFuncServerOption(func(o *serverOptions) {\n\t\to.unknownStreamDesc = &StreamDesc{\n\t\t\tStreamName: \"unknown_service_handler\",\n\t\t\tHandler:    streamHandler,\n\t\t\t// We need to assume that the users of the streamHandler will want to use both.\n\t\t\tClientStreams: true,\n\t\t\tServerStreams: true,\n\t\t}\n\t})\n}\n\n// ConnectionTimeout returns a ServerOption that sets the timeout for\n// connection establishment (up to and including HTTP/2 handshaking) for all\n// new connections.  If this is not set, the default is 120 seconds.  A zero or\n// negative value will result in an immediate timeout.\n//\n// This API is EXPERIMENTAL.\nfunc ConnectionTimeout(d time.Duration) ServerOption {\n\treturn newFuncServerOption(func(o *serverOptions) {\n\t\to.connectionTimeout = d\n\t})\n}\n\n// MaxHeaderListSize returns a ServerOption that sets the max (uncompressed) size\n// of header list that the server is prepared to accept.\nfunc MaxHeaderListSize(s uint32) ServerOption {\n\treturn newFuncServerOption(func(o *serverOptions) {\n\t\to.maxHeaderListSize = &s\n\t})\n}\n\n// NewServer creates a gRPC server which has no service registered and has not\n// started to accept requests yet.\nfunc NewServer(opt ...ServerOption) *Server {\n\topts := defaultServerOptions\n\tfor _, o := range opt {\n\t\to.apply(&opts)\n\t}\n\ts := &Server{\n\t\tlis:    make(map[net.Listener]bool),\n\t\topts:   opts,\n\t\tconns:  make(map[io.Closer]bool),\n\t\tm:      make(map[string]*service),\n\t\tquit:   make(chan struct{}),\n\t\tdone:   make(chan struct{}),\n\t\tczData: new(channelzData),\n\t}\n\ts.cv = sync.NewCond(&s.mu)\n\tif EnableTracing {\n\t\t_, file, line, _ := runtime.Caller(1)\n\t\ts.events = trace.NewEventLog(\"grpc.Server\", fmt.Sprintf(\"%s:%d\", file, line))\n\t}\n\n\tif channelz.IsOn() {\n\t\ts.channelzID = channelz.RegisterServer(&channelzServer{s}, \"\")\n\t}\n\treturn s\n}\n\n// printf records an event in s's event log, unless s has been stopped.\n// REQUIRES s.mu is held.\nfunc (s *Server) printf(format string, a ...interface{}) {\n\tif s.events != nil {\n\t\ts.events.Printf(format, a...)\n\t}\n}\n\n// errorf records an error in s's event log, unless s has been stopped.\n// REQUIRES s.mu is held.\nfunc (s *Server) errorf(format string, a ...interface{}) {\n\tif s.events != nil {\n\t\ts.events.Errorf(format, a...)\n\t}\n}\n\n// RegisterService registers a service and its implementation to the gRPC\n// server. It is called from the IDL generated code. This must be called before\n// invoking Serve.\nfunc (s *Server) RegisterService(sd *ServiceDesc, ss interface{}) {\n\tht := reflect.TypeOf(sd.HandlerType).Elem()\n\tst := reflect.TypeOf(ss)\n\tif !st.Implements(ht) {\n\t\tgrpclog.Fatalf(\"grpc: Server.RegisterService found the handler of type %v that does not satisfy %v\", st, ht)\n\t}\n\ts.register(sd, ss)\n}\n\nfunc (s *Server) register(sd *ServiceDesc, ss interface{}) {\n\ts.mu.Lock()\n\tdefer s.mu.Unlock()\n\ts.printf(\"RegisterService(%q)\", sd.ServiceName)\n\tif s.serve {\n\t\tgrpclog.Fatalf(\"grpc: Server.RegisterService after Server.Serve for %q\", sd.ServiceName)\n\t}\n\tif _, ok := s.m[sd.ServiceName]; ok {\n\t\tgrpclog.Fatalf(\"grpc: Server.RegisterService found duplicate service registration for %q\", sd.ServiceName)\n\t}\n\tsrv := &service{\n\t\tserver: ss,\n\t\tmd:     make(map[string]*MethodDesc),\n\t\tsd:     make(map[string]*StreamDesc),\n\t\tmdata:  sd.Metadata,\n\t}\n\tfor i := range sd.Methods {\n\t\td := &sd.Methods[i]\n\t\tsrv.md[d.MethodName] = d\n\t}\n\tfor i := range sd.Streams {\n\t\td := &sd.Streams[i]\n\t\tsrv.sd[d.StreamName] = d\n\t}\n\ts.m[sd.ServiceName] = srv\n}\n\n// MethodInfo contains the information of an RPC including its method name and type.\ntype MethodInfo struct {\n\t// Name is the method name only, without the service name or package name.\n\tName string\n\t// IsClientStream indicates whether the RPC is a client streaming RPC.\n\tIsClientStream bool\n\t// IsServerStream indicates whether the RPC is a server streaming RPC.\n\tIsServerStream bool\n}\n\n// ServiceInfo contains unary RPC method info, streaming RPC method info and metadata for a service.\ntype ServiceInfo struct {\n\tMethods []MethodInfo\n\t// Metadata is the metadata specified in ServiceDesc when registering service.\n\tMetadata interface{}\n}\n\n// GetServiceInfo returns a map from service names to ServiceInfo.\n// Service names include the package names, in the form of <package>.<service>.\nfunc (s *Server) GetServiceInfo() map[string]ServiceInfo {\n\tret := make(map[string]ServiceInfo)\n\tfor n, srv := range s.m {\n\t\tmethods := make([]MethodInfo, 0, len(srv.md)+len(srv.sd))\n\t\tfor m := range srv.md {\n\t\t\tmethods = append(methods, MethodInfo{\n\t\t\t\tName:           m,\n\t\t\t\tIsClientStream: false,\n\t\t\t\tIsServerStream: false,\n\t\t\t})\n\t\t}\n\t\tfor m, d := range srv.sd {\n\t\t\tmethods = append(methods, MethodInfo{\n\t\t\t\tName:           m,\n\t\t\t\tIsClientStream: d.ClientStreams,\n\t\t\t\tIsServerStream: d.ServerStreams,\n\t\t\t})\n\t\t}\n\n\t\tret[n] = ServiceInfo{\n\t\t\tMethods:  methods,\n\t\t\tMetadata: srv.mdata,\n\t\t}\n\t}\n\treturn ret\n}\n\n// ErrServerStopped indicates that the operation is now illegal because of\n// the server being stopped.\nvar ErrServerStopped = errors.New(\"grpc: the server has been stopped\")\n\nfunc (s *Server) useTransportAuthenticator(rawConn net.Conn) (net.Conn, credentials.AuthInfo, error) {\n\tif s.opts.creds == nil {\n\t\treturn rawConn, nil, nil\n\t}\n\treturn s.opts.creds.ServerHandshake(rawConn)\n}\n\ntype listenSocket struct {\n\tnet.Listener\n\tchannelzID int64\n}\n\nfunc (l *listenSocket) ChannelzMetric() *channelz.SocketInternalMetric {\n\treturn &channelz.SocketInternalMetric{\n\t\tSocketOptions: channelz.GetSocketOption(l.Listener),\n\t\tLocalAddr:     l.Listener.Addr(),\n\t}\n}\n\nfunc (l *listenSocket) Close() error {\n\terr := l.Listener.Close()\n\tif channelz.IsOn() {\n\t\tchannelz.RemoveEntry(l.channelzID)\n\t}\n\treturn err\n}\n\n// Serve accepts incoming connections on the listener lis, creating a new\n// ServerTransport and service goroutine for each. The service goroutines\n// read gRPC requests and then call the registered handlers to reply to them.\n// Serve returns when lis.Accept fails with fatal errors.  lis will be closed when\n// this method returns.\n// Serve will return a non-nil error unless Stop or GracefulStop is called.\nfunc (s *Server) Serve(lis net.Listener) error {\n\ts.mu.Lock()\n\ts.printf(\"serving\")\n\ts.serve = true\n\tif s.lis == nil {\n\t\t// Serve called after Stop or GracefulStop.\n\t\ts.mu.Unlock()\n\t\tlis.Close()\n\t\treturn ErrServerStopped\n\t}\n\n\ts.serveWG.Add(1)\n\tdefer func() {\n\t\ts.serveWG.Done()\n\t\tselect {\n\t\t// Stop or GracefulStop called; block until done and return nil.\n\t\tcase <-s.quit:\n\t\t\t<-s.done\n\t\tdefault:\n\t\t}\n\t}()\n\n\tls := &listenSocket{Listener: lis}\n\ts.lis[ls] = true\n\n\tif channelz.IsOn() {\n\t\tls.channelzID = channelz.RegisterListenSocket(ls, s.channelzID, lis.Addr().String())\n\t}\n\ts.mu.Unlock()\n\n\tdefer func() {\n\t\ts.mu.Lock()\n\t\tif s.lis != nil && s.lis[ls] {\n\t\t\tls.Close()\n\t\t\tdelete(s.lis, ls)\n\t\t}\n\t\ts.mu.Unlock()\n\t}()\n\n\tvar tempDelay time.Duration // how long to sleep on accept failure\n\n\tfor {\n\t\trawConn, err := lis.Accept()\n\t\tif err != nil {\n\t\t\tif ne, ok := err.(interface {\n\t\t\t\tTemporary() bool\n\t\t\t}); ok && ne.Temporary() {\n\t\t\t\tif tempDelay == 0 {\n\t\t\t\t\ttempDelay = 5 * time.Millisecond\n\t\t\t\t} else {\n\t\t\t\t\ttempDelay *= 2\n\t\t\t\t}\n\t\t\t\tif max := 1 * time.Second; tempDelay > max {\n\t\t\t\t\ttempDelay = max\n\t\t\t\t}\n\t\t\t\ts.mu.Lock()\n\t\t\t\ts.printf(\"Accept error: %v; retrying in %v\", err, tempDelay)\n\t\t\t\ts.mu.Unlock()\n\t\t\t\ttimer := time.NewTimer(tempDelay)\n\t\t\t\tselect {\n\t\t\t\tcase <-timer.C:\n\t\t\t\tcase <-s.quit:\n\t\t\t\t\ttimer.Stop()\n\t\t\t\t\treturn nil\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\ts.mu.Lock()\n\t\t\ts.printf(\"done serving; Accept = %v\", err)\n\t\t\ts.mu.Unlock()\n\n\t\t\tselect {\n\t\t\tcase <-s.quit:\n\t\t\t\treturn nil\n\t\t\tdefault:\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\t\ttempDelay = 0\n\t\t// Start a new goroutine to deal with rawConn so we don't stall this Accept\n\t\t// loop goroutine.\n\t\t//\n\t\t// Make sure we account for the goroutine so GracefulStop doesn't nil out\n\t\t// s.conns before this conn can be added.\n\t\ts.serveWG.Add(1)\n\t\tgo func() {\n\t\t\ts.handleRawConn(rawConn)\n\t\t\ts.serveWG.Done()\n\t\t}()\n\t}\n}\n\n// handleRawConn forks a goroutine to handle a just-accepted connection that\n// has not had any I/O performed on it yet.\nfunc (s *Server) handleRawConn(rawConn net.Conn) {\n\trawConn.SetDeadline(time.Now().Add(s.opts.connectionTimeout))\n\tconn, authInfo, err := s.useTransportAuthenticator(rawConn)\n\tif err != nil {\n\t\t// ErrConnDispatched means that the connection was dispatched away from\n\t\t// gRPC; those connections should be left open.\n\t\tif err != credentials.ErrConnDispatched {\n\t\t\ts.mu.Lock()\n\t\t\ts.errorf(\"ServerHandshake(%q) failed: %v\", rawConn.RemoteAddr(), err)\n\t\t\ts.mu.Unlock()\n\t\t\tgrpclog.Warningf(\"grpc: Server.Serve failed to complete security handshake from %q: %v\", rawConn.RemoteAddr(), err)\n\t\t\trawConn.Close()\n\t\t}\n\t\trawConn.SetDeadline(time.Time{})\n\t\treturn\n\t}\n\n\ts.mu.Lock()\n\tif s.conns == nil {\n\t\ts.mu.Unlock()\n\t\tconn.Close()\n\t\treturn\n\t}\n\ts.mu.Unlock()\n\n\t// Finish handshaking (HTTP2)\n\tst := s.newHTTP2Transport(conn, authInfo)\n\tif st == nil {\n\t\treturn\n\t}\n\n\trawConn.SetDeadline(time.Time{})\n\tif !s.addConn(st) {\n\t\treturn\n\t}\n\tgo func() {\n\t\ts.serveStreams(st)\n\t\ts.removeConn(st)\n\t}()\n}\n\n// newHTTP2Transport sets up a http/2 transport (using the\n// gRPC http2 server transport in transport/http2_server.go).\nfunc (s *Server) newHTTP2Transport(c net.Conn, authInfo credentials.AuthInfo) transport.ServerTransport {\n\tconfig := &transport.ServerConfig{\n\t\tMaxStreams:            s.opts.maxConcurrentStreams,\n\t\tAuthInfo:              authInfo,\n\t\tInTapHandle:           s.opts.inTapHandle,\n\t\tStatsHandler:          s.opts.statsHandler,\n\t\tKeepaliveParams:       s.opts.keepaliveParams,\n\t\tKeepalivePolicy:       s.opts.keepalivePolicy,\n\t\tInitialWindowSize:     s.opts.initialWindowSize,\n\t\tInitialConnWindowSize: s.opts.initialConnWindowSize,\n\t\tWriteBufferSize:       s.opts.writeBufferSize,\n\t\tReadBufferSize:        s.opts.readBufferSize,\n\t\tChannelzParentID:      s.channelzID,\n\t\tMaxHeaderListSize:     s.opts.maxHeaderListSize,\n\t}\n\tst, err := transport.NewServerTransport(\"http2\", c, config)\n\tif err != nil {\n\t\ts.mu.Lock()\n\t\ts.errorf(\"NewServerTransport(%q) failed: %v\", c.RemoteAddr(), err)\n\t\ts.mu.Unlock()\n\t\tc.Close()\n\t\tgrpclog.Warningln(\"grpc: Server.Serve failed to create ServerTransport: \", err)\n\t\treturn nil\n\t}\n\n\treturn st\n}\n\nfunc (s *Server) serveStreams(st transport.ServerTransport) {\n\tdefer st.Close()\n\tvar wg sync.WaitGroup\n\tst.HandleStreams(func(stream *transport.Stream) {\n\t\twg.Add(1)\n\t\tgo func() {\n\t\t\tdefer wg.Done()\n\t\t\ts.handleStream(st, stream, s.traceInfo(st, stream))\n\t\t}()\n\t}, func(ctx context.Context, method string) context.Context {\n\t\tif !EnableTracing {\n\t\t\treturn ctx\n\t\t}\n\t\ttr := trace.New(\"grpc.Recv.\"+methodFamily(method), method)\n\t\treturn trace.NewContext(ctx, tr)\n\t})\n\twg.Wait()\n}\n\nvar _ http.Handler = (*Server)(nil)\n\n// ServeHTTP implements the Go standard library's http.Handler\n// interface by responding to the gRPC request r, by looking up\n// the requested gRPC method in the gRPC server s.\n//\n// The provided HTTP request must have arrived on an HTTP/2\n// connection. When using the Go standard library's server,\n// practically this means that the Request must also have arrived\n// over TLS.\n//\n// To share one port (such as 443 for https) between gRPC and an\n// existing http.Handler, use a root http.Handler such as:\n//\n//   if r.ProtoMajor == 2 && strings.HasPrefix(\n//   \tr.Header.Get(\"Content-Type\"), \"application/grpc\") {\n//   \tgrpcServer.ServeHTTP(w, r)\n//   } else {\n//   \tyourMux.ServeHTTP(w, r)\n//   }\n//\n// Note that ServeHTTP uses Go's HTTP/2 server implementation which is totally\n// separate from grpc-go's HTTP/2 server. Performance and features may vary\n// between the two paths. ServeHTTP does not support some gRPC features\n// available through grpc-go's HTTP/2 server, and it is currently EXPERIMENTAL\n// and subject to change.\nfunc (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {\n\tst, err := transport.NewServerHandlerTransport(w, r, s.opts.statsHandler)\n\tif err != nil {\n\t\thttp.Error(w, err.Error(), http.StatusInternalServerError)\n\t\treturn\n\t}\n\tif !s.addConn(st) {\n\t\treturn\n\t}\n\tdefer s.removeConn(st)\n\ts.serveStreams(st)\n}\n\n// traceInfo returns a traceInfo and associates it with stream, if tracing is enabled.\n// If tracing is not enabled, it returns nil.\nfunc (s *Server) traceInfo(st transport.ServerTransport, stream *transport.Stream) (trInfo *traceInfo) {\n\ttr, ok := trace.FromContext(stream.Context())\n\tif !ok {\n\t\treturn nil\n\t}\n\n\ttrInfo = &traceInfo{\n\t\ttr: tr,\n\t\tfirstLine: firstLine{\n\t\t\tclient:     false,\n\t\t\tremoteAddr: st.RemoteAddr(),\n\t\t},\n\t}\n\tif dl, ok := stream.Context().Deadline(); ok {\n\t\ttrInfo.firstLine.deadline = time.Until(dl)\n\t}\n\treturn trInfo\n}\n\nfunc (s *Server) addConn(c io.Closer) bool {\n\ts.mu.Lock()\n\tdefer s.mu.Unlock()\n\tif s.conns == nil {\n\t\tc.Close()\n\t\treturn false\n\t}\n\tif s.drain {\n\t\t// Transport added after we drained our existing conns: drain it\n\t\t// immediately.\n\t\tc.(transport.ServerTransport).Drain()\n\t}\n\ts.conns[c] = true\n\treturn true\n}\n\nfunc (s *Server) removeConn(c io.Closer) {\n\ts.mu.Lock()\n\tdefer s.mu.Unlock()\n\tif s.conns != nil {\n\t\tdelete(s.conns, c)\n\t\ts.cv.Broadcast()\n\t}\n}\n\nfunc (s *Server) channelzMetric() *channelz.ServerInternalMetric {\n\treturn &channelz.ServerInternalMetric{\n\t\tCallsStarted:             atomic.LoadInt64(&s.czData.callsStarted),\n\t\tCallsSucceeded:           atomic.LoadInt64(&s.czData.callsSucceeded),\n\t\tCallsFailed:              atomic.LoadInt64(&s.czData.callsFailed),\n\t\tLastCallStartedTimestamp: time.Unix(0, atomic.LoadInt64(&s.czData.lastCallStartedTime)),\n\t}\n}\n\nfunc (s *Server) incrCallsStarted() {\n\tatomic.AddInt64(&s.czData.callsStarted, 1)\n\tatomic.StoreInt64(&s.czData.lastCallStartedTime, time.Now().UnixNano())\n}\n\nfunc (s *Server) incrCallsSucceeded() {\n\tatomic.AddInt64(&s.czData.callsSucceeded, 1)\n}\n\nfunc (s *Server) incrCallsFailed() {\n\tatomic.AddInt64(&s.czData.callsFailed, 1)\n}\n\nfunc (s *Server) sendResponse(t transport.ServerTransport, stream *transport.Stream, msg interface{}, cp Compressor, opts *transport.Options, comp encoding.Compressor) error {\n\tdata, err := encode(s.getCodec(stream.ContentSubtype()), msg)\n\tif err != nil {\n\t\tgrpclog.Errorln(\"grpc: server failed to encode response: \", err)\n\t\treturn err\n\t}\n\tcompData, err := compress(data, cp, comp)\n\tif err != nil {\n\t\tgrpclog.Errorln(\"grpc: server failed to compress response: \", err)\n\t\treturn err\n\t}\n\thdr, payload := msgHeader(data, compData)\n\t// TODO(dfawley): should we be checking len(data) instead?\n\tif len(payload) > s.opts.maxSendMessageSize {\n\t\treturn status.Errorf(codes.ResourceExhausted, \"grpc: trying to send message larger than max (%d vs. %d)\", len(payload), s.opts.maxSendMessageSize)\n\t}\n\terr = t.Write(stream, hdr, payload, opts)\n\tif err == nil && s.opts.statsHandler != nil {\n\t\ts.opts.statsHandler.HandleRPC(stream.Context(), outPayload(false, msg, data, payload, time.Now()))\n\t}\n\treturn err\n}\n\nfunc (s *Server) processUnaryRPC(t transport.ServerTransport, stream *transport.Stream, srv *service, md *MethodDesc, trInfo *traceInfo) (err error) {\n\tif channelz.IsOn() {\n\t\ts.incrCallsStarted()\n\t\tdefer func() {\n\t\t\tif err != nil && err != io.EOF {\n\t\t\t\ts.incrCallsFailed()\n\t\t\t} else {\n\t\t\t\ts.incrCallsSucceeded()\n\t\t\t}\n\t\t}()\n\t}\n\tsh := s.opts.statsHandler\n\tif sh != nil {\n\t\tbeginTime := time.Now()\n\t\tbegin := &stats.Begin{\n\t\t\tBeginTime: beginTime,\n\t\t}\n\t\tsh.HandleRPC(stream.Context(), begin)\n\t\tdefer func() {\n\t\t\tend := &stats.End{\n\t\t\t\tBeginTime: beginTime,\n\t\t\t\tEndTime:   time.Now(),\n\t\t\t}\n\t\t\tif err != nil && err != io.EOF {\n\t\t\t\tend.Error = toRPCErr(err)\n\t\t\t}\n\t\t\tsh.HandleRPC(stream.Context(), end)\n\t\t}()\n\t}\n\tif trInfo != nil {\n\t\tdefer trInfo.tr.Finish()\n\t\ttrInfo.tr.LazyLog(&trInfo.firstLine, false)\n\t\tdefer func() {\n\t\t\tif err != nil && err != io.EOF {\n\t\t\t\ttrInfo.tr.LazyLog(&fmtStringer{\"%v\", []interface{}{err}}, true)\n\t\t\t\ttrInfo.tr.SetError()\n\t\t\t}\n\t\t}()\n\t}\n\n\tbinlog := binarylog.GetMethodLogger(stream.Method())\n\tif binlog != nil {\n\t\tctx := stream.Context()\n\t\tmd, _ := metadata.FromIncomingContext(ctx)\n\t\tlogEntry := &binarylog.ClientHeader{\n\t\t\tHeader:     md,\n\t\t\tMethodName: stream.Method(),\n\t\t\tPeerAddr:   nil,\n\t\t}\n\t\tif deadline, ok := ctx.Deadline(); ok {\n\t\t\tlogEntry.Timeout = time.Until(deadline)\n\t\t\tif logEntry.Timeout < 0 {\n\t\t\t\tlogEntry.Timeout = 0\n\t\t\t}\n\t\t}\n\t\tif a := md[\":authority\"]; len(a) > 0 {\n\t\t\tlogEntry.Authority = a[0]\n\t\t}\n\t\tif peer, ok := peer.FromContext(ctx); ok {\n\t\t\tlogEntry.PeerAddr = peer.Addr\n\t\t}\n\t\tbinlog.Log(logEntry)\n\t}\n\n\t// comp and cp are used for compression.  decomp and dc are used for\n\t// decompression.  If comp and decomp are both set, they are the same;\n\t// however they are kept separate to ensure that at most one of the\n\t// compressor/decompressor variable pairs are set for use later.\n\tvar comp, decomp encoding.Compressor\n\tvar cp Compressor\n\tvar dc Decompressor\n\n\t// If dc is set and matches the stream's compression, use it.  Otherwise, try\n\t// to find a matching registered compressor for decomp.\n\tif rc := stream.RecvCompress(); s.opts.dc != nil && s.opts.dc.Type() == rc {\n\t\tdc = s.opts.dc\n\t} else if rc != \"\" && rc != encoding.Identity {\n\t\tdecomp = encoding.GetCompressor(rc)\n\t\tif decomp == nil {\n\t\t\tst := status.Newf(codes.Unimplemented, \"grpc: Decompressor is not installed for grpc-encoding %q\", rc)\n\t\t\tt.WriteStatus(stream, st)\n\t\t\treturn st.Err()\n\t\t}\n\t}\n\n\t// If cp is set, use it.  Otherwise, attempt to compress the response using\n\t// the incoming message compression method.\n\t//\n\t// NOTE: this needs to be ahead of all handling, https://github.com/grpc/grpc-go/issues/686.\n\tif s.opts.cp != nil {\n\t\tcp = s.opts.cp\n\t\tstream.SetSendCompress(cp.Type())\n\t} else if rc := stream.RecvCompress(); rc != \"\" && rc != encoding.Identity {\n\t\t// Legacy compressor not specified; attempt to respond with same encoding.\n\t\tcomp = encoding.GetCompressor(rc)\n\t\tif comp != nil {\n\t\t\tstream.SetSendCompress(rc)\n\t\t}\n\t}\n\n\tvar payInfo *payloadInfo\n\tif sh != nil || binlog != nil {\n\t\tpayInfo = &payloadInfo{}\n\t}\n\td, err := recvAndDecompress(&parser{r: stream}, stream, dc, s.opts.maxReceiveMessageSize, payInfo, decomp)\n\tif err != nil {\n\t\tif st, ok := status.FromError(err); ok {\n\t\t\tif e := t.WriteStatus(stream, st); e != nil {\n\t\t\t\tgrpclog.Warningf(\"grpc: Server.processUnaryRPC failed to write status %v\", e)\n\t\t\t}\n\t\t}\n\t\treturn err\n\t}\n\tif channelz.IsOn() {\n\t\tt.IncrMsgRecv()\n\t}\n\tdf := func(v interface{}) error {\n\t\tif err := s.getCodec(stream.ContentSubtype()).Unmarshal(d, v); err != nil {\n\t\t\treturn status.Errorf(codes.Internal, \"grpc: error unmarshalling request: %v\", err)\n\t\t}\n\t\tif sh != nil {\n\t\t\tsh.HandleRPC(stream.Context(), &stats.InPayload{\n\t\t\t\tRecvTime: time.Now(),\n\t\t\t\tPayload:  v,\n\t\t\t\tData:     d,\n\t\t\t\tLength:   len(d),\n\t\t\t})\n\t\t}\n\t\tif binlog != nil {\n\t\t\tbinlog.Log(&binarylog.ClientMessage{\n\t\t\t\tMessage: d,\n\t\t\t})\n\t\t}\n\t\tif trInfo != nil {\n\t\t\ttrInfo.tr.LazyLog(&payload{sent: false, msg: v}, true)\n\t\t}\n\t\treturn nil\n\t}\n\tctx := NewContextWithServerTransportStream(stream.Context(), stream)\n\treply, appErr := md.Handler(srv.server, ctx, df, s.opts.unaryInt)\n\tif appErr != nil {\n\t\tappStatus, ok := status.FromError(appErr)\n\t\tif !ok {\n\t\t\t// Convert appErr if it is not a grpc status error.\n\t\t\tappErr = status.Error(codes.Unknown, appErr.Error())\n\t\t\tappStatus, _ = status.FromError(appErr)\n\t\t}\n\t\tif trInfo != nil {\n\t\t\ttrInfo.tr.LazyLog(stringer(appStatus.Message()), true)\n\t\t\ttrInfo.tr.SetError()\n\t\t}\n\t\tif e := t.WriteStatus(stream, appStatus); e != nil {\n\t\t\tgrpclog.Warningf(\"grpc: Server.processUnaryRPC failed to write status: %v\", e)\n\t\t}\n\t\tif binlog != nil {\n\t\t\tif h, _ := stream.Header(); h.Len() > 0 {\n\t\t\t\t// Only log serverHeader if there was header. Otherwise it can\n\t\t\t\t// be trailer only.\n\t\t\t\tbinlog.Log(&binarylog.ServerHeader{\n\t\t\t\t\tHeader: h,\n\t\t\t\t})\n\t\t\t}\n\t\t\tbinlog.Log(&binarylog.ServerTrailer{\n\t\t\t\tTrailer: stream.Trailer(),\n\t\t\t\tErr:     appErr,\n\t\t\t})\n\t\t}\n\t\treturn appErr\n\t}\n\tif trInfo != nil {\n\t\ttrInfo.tr.LazyLog(stringer(\"OK\"), false)\n\t}\n\topts := &transport.Options{Last: true}\n\n\tif err := s.sendResponse(t, stream, reply, cp, opts, comp); err != nil {\n\t\tif err == io.EOF {\n\t\t\t// The entire stream is done (for unary RPC only).\n\t\t\treturn err\n\t\t}\n\t\tif s, ok := status.FromError(err); ok {\n\t\t\tif e := t.WriteStatus(stream, s); e != nil {\n\t\t\t\tgrpclog.Warningf(\"grpc: Server.processUnaryRPC failed to write status: %v\", e)\n\t\t\t}\n\t\t} else {\n\t\t\tswitch st := err.(type) {\n\t\t\tcase transport.ConnectionError:\n\t\t\t\t// Nothing to do here.\n\t\t\tdefault:\n\t\t\t\tpanic(fmt.Sprintf(\"grpc: Unexpected error (%T) from sendResponse: %v\", st, st))\n\t\t\t}\n\t\t}\n\t\tif binlog != nil {\n\t\t\th, _ := stream.Header()\n\t\t\tbinlog.Log(&binarylog.ServerHeader{\n\t\t\t\tHeader: h,\n\t\t\t})\n\t\t\tbinlog.Log(&binarylog.ServerTrailer{\n\t\t\t\tTrailer: stream.Trailer(),\n\t\t\t\tErr:     appErr,\n\t\t\t})\n\t\t}\n\t\treturn err\n\t}\n\tif binlog != nil {\n\t\th, _ := stream.Header()\n\t\tbinlog.Log(&binarylog.ServerHeader{\n\t\t\tHeader: h,\n\t\t})\n\t\tbinlog.Log(&binarylog.ServerMessage{\n\t\t\tMessage: reply,\n\t\t})\n\t}\n\tif channelz.IsOn() {\n\t\tt.IncrMsgSent()\n\t}\n\tif trInfo != nil {\n\t\ttrInfo.tr.LazyLog(&payload{sent: true, msg: reply}, true)\n\t}\n\t// TODO: Should we be logging if writing status failed here, like above?\n\t// Should the logging be in WriteStatus?  Should we ignore the WriteStatus\n\t// error or allow the stats handler to see it?\n\terr = t.WriteStatus(stream, status.New(codes.OK, \"\"))\n\tif binlog != nil {\n\t\tbinlog.Log(&binarylog.ServerTrailer{\n\t\t\tTrailer: stream.Trailer(),\n\t\t\tErr:     appErr,\n\t\t})\n\t}\n\treturn err\n}\n\nfunc (s *Server) processStreamingRPC(t transport.ServerTransport, stream *transport.Stream, srv *service, sd *StreamDesc, trInfo *traceInfo) (err error) {\n\tif channelz.IsOn() {\n\t\ts.incrCallsStarted()\n\t\tdefer func() {\n\t\t\tif err != nil && err != io.EOF {\n\t\t\t\ts.incrCallsFailed()\n\t\t\t} else {\n\t\t\t\ts.incrCallsSucceeded()\n\t\t\t}\n\t\t}()\n\t}\n\tsh := s.opts.statsHandler\n\tif sh != nil {\n\t\tbeginTime := time.Now()\n\t\tbegin := &stats.Begin{\n\t\t\tBeginTime: beginTime,\n\t\t}\n\t\tsh.HandleRPC(stream.Context(), begin)\n\t\tdefer func() {\n\t\t\tend := &stats.End{\n\t\t\t\tBeginTime: beginTime,\n\t\t\t\tEndTime:   time.Now(),\n\t\t\t}\n\t\t\tif err != nil && err != io.EOF {\n\t\t\t\tend.Error = toRPCErr(err)\n\t\t\t}\n\t\t\tsh.HandleRPC(stream.Context(), end)\n\t\t}()\n\t}\n\tctx := NewContextWithServerTransportStream(stream.Context(), stream)\n\tss := &serverStream{\n\t\tctx:                   ctx,\n\t\tt:                     t,\n\t\ts:                     stream,\n\t\tp:                     &parser{r: stream},\n\t\tcodec:                 s.getCodec(stream.ContentSubtype()),\n\t\tmaxReceiveMessageSize: s.opts.maxReceiveMessageSize,\n\t\tmaxSendMessageSize:    s.opts.maxSendMessageSize,\n\t\ttrInfo:                trInfo,\n\t\tstatsHandler:          sh,\n\t}\n\n\tss.binlog = binarylog.GetMethodLogger(stream.Method())\n\tif ss.binlog != nil {\n\t\tmd, _ := metadata.FromIncomingContext(ctx)\n\t\tlogEntry := &binarylog.ClientHeader{\n\t\t\tHeader:     md,\n\t\t\tMethodName: stream.Method(),\n\t\t\tPeerAddr:   nil,\n\t\t}\n\t\tif deadline, ok := ctx.Deadline(); ok {\n\t\t\tlogEntry.Timeout = time.Until(deadline)\n\t\t\tif logEntry.Timeout < 0 {\n\t\t\t\tlogEntry.Timeout = 0\n\t\t\t}\n\t\t}\n\t\tif a := md[\":authority\"]; len(a) > 0 {\n\t\t\tlogEntry.Authority = a[0]\n\t\t}\n\t\tif peer, ok := peer.FromContext(ss.Context()); ok {\n\t\t\tlogEntry.PeerAddr = peer.Addr\n\t\t}\n\t\tss.binlog.Log(logEntry)\n\t}\n\n\t// If dc is set and matches the stream's compression, use it.  Otherwise, try\n\t// to find a matching registered compressor for decomp.\n\tif rc := stream.RecvCompress(); s.opts.dc != nil && s.opts.dc.Type() == rc {\n\t\tss.dc = s.opts.dc\n\t} else if rc != \"\" && rc != encoding.Identity {\n\t\tss.decomp = encoding.GetCompressor(rc)\n\t\tif ss.decomp == nil {\n\t\t\tst := status.Newf(codes.Unimplemented, \"grpc: Decompressor is not installed for grpc-encoding %q\", rc)\n\t\t\tt.WriteStatus(ss.s, st)\n\t\t\treturn st.Err()\n\t\t}\n\t}\n\n\t// If cp is set, use it.  Otherwise, attempt to compress the response using\n\t// the incoming message compression method.\n\t//\n\t// NOTE: this needs to be ahead of all handling, https://github.com/grpc/grpc-go/issues/686.\n\tif s.opts.cp != nil {\n\t\tss.cp = s.opts.cp\n\t\tstream.SetSendCompress(s.opts.cp.Type())\n\t} else if rc := stream.RecvCompress(); rc != \"\" && rc != encoding.Identity {\n\t\t// Legacy compressor not specified; attempt to respond with same encoding.\n\t\tss.comp = encoding.GetCompressor(rc)\n\t\tif ss.comp != nil {\n\t\t\tstream.SetSendCompress(rc)\n\t\t}\n\t}\n\n\tif trInfo != nil {\n\t\ttrInfo.tr.LazyLog(&trInfo.firstLine, false)\n\t\tdefer func() {\n\t\t\tss.mu.Lock()\n\t\t\tif err != nil && err != io.EOF {\n\t\t\t\tss.trInfo.tr.LazyLog(&fmtStringer{\"%v\", []interface{}{err}}, true)\n\t\t\t\tss.trInfo.tr.SetError()\n\t\t\t}\n\t\t\tss.trInfo.tr.Finish()\n\t\t\tss.trInfo.tr = nil\n\t\t\tss.mu.Unlock()\n\t\t}()\n\t}\n\tvar appErr error\n\tvar server interface{}\n\tif srv != nil {\n\t\tserver = srv.server\n\t}\n\tif s.opts.streamInt == nil {\n\t\tappErr = sd.Handler(server, ss)\n\t} else {\n\t\tinfo := &StreamServerInfo{\n\t\t\tFullMethod:     stream.Method(),\n\t\t\tIsClientStream: sd.ClientStreams,\n\t\t\tIsServerStream: sd.ServerStreams,\n\t\t}\n\t\tappErr = s.opts.streamInt(server, ss, info, sd.Handler)\n\t}\n\tif appErr != nil {\n\t\tappStatus, ok := status.FromError(appErr)\n\t\tif !ok {\n\t\t\tappStatus = status.New(codes.Unknown, appErr.Error())\n\t\t\tappErr = appStatus.Err()\n\t\t}\n\t\tif trInfo != nil {\n\t\t\tss.mu.Lock()\n\t\t\tss.trInfo.tr.LazyLog(stringer(appStatus.Message()), true)\n\t\t\tss.trInfo.tr.SetError()\n\t\t\tss.mu.Unlock()\n\t\t}\n\t\tt.WriteStatus(ss.s, appStatus)\n\t\tif ss.binlog != nil {\n\t\t\tss.binlog.Log(&binarylog.ServerTrailer{\n\t\t\t\tTrailer: ss.s.Trailer(),\n\t\t\t\tErr:     appErr,\n\t\t\t})\n\t\t}\n\t\t// TODO: Should we log an error from WriteStatus here and below?\n\t\treturn appErr\n\t}\n\tif trInfo != nil {\n\t\tss.mu.Lock()\n\t\tss.trInfo.tr.LazyLog(stringer(\"OK\"), false)\n\t\tss.mu.Unlock()\n\t}\n\terr = t.WriteStatus(ss.s, status.New(codes.OK, \"\"))\n\tif ss.binlog != nil {\n\t\tss.binlog.Log(&binarylog.ServerTrailer{\n\t\t\tTrailer: ss.s.Trailer(),\n\t\t\tErr:     appErr,\n\t\t})\n\t}\n\treturn err\n}\n\nfunc (s *Server) handleStream(t transport.ServerTransport, stream *transport.Stream, trInfo *traceInfo) {\n\tsm := stream.Method()\n\tif sm != \"\" && sm[0] == '/' {\n\t\tsm = sm[1:]\n\t}\n\tpos := strings.LastIndex(sm, \"/\")\n\tif pos == -1 {\n\t\tif trInfo != nil {\n\t\t\ttrInfo.tr.LazyLog(&fmtStringer{\"Malformed method name %q\", []interface{}{sm}}, true)\n\t\t\ttrInfo.tr.SetError()\n\t\t}\n\t\terrDesc := fmt.Sprintf(\"malformed method name: %q\", stream.Method())\n\t\tif err := t.WriteStatus(stream, status.New(codes.ResourceExhausted, errDesc)); err != nil {\n\t\t\tif trInfo != nil {\n\t\t\t\ttrInfo.tr.LazyLog(&fmtStringer{\"%v\", []interface{}{err}}, true)\n\t\t\t\ttrInfo.tr.SetError()\n\t\t\t}\n\t\t\tgrpclog.Warningf(\"grpc: Server.handleStream failed to write status: %v\", err)\n\t\t}\n\t\tif trInfo != nil {\n\t\t\ttrInfo.tr.Finish()\n\t\t}\n\t\treturn\n\t}\n\tservice := sm[:pos]\n\tmethod := sm[pos+1:]\n\n\tsrv, knownService := s.m[service]\n\tif knownService {\n\t\tif md, ok := srv.md[method]; ok {\n\t\t\ts.processUnaryRPC(t, stream, srv, md, trInfo)\n\t\t\treturn\n\t\t}\n\t\tif sd, ok := srv.sd[method]; ok {\n\t\t\ts.processStreamingRPC(t, stream, srv, sd, trInfo)\n\t\t\treturn\n\t\t}\n\t}\n\t// Unknown service, or known server unknown method.\n\tif unknownDesc := s.opts.unknownStreamDesc; unknownDesc != nil {\n\t\ts.processStreamingRPC(t, stream, nil, unknownDesc, trInfo)\n\t\treturn\n\t}\n\tvar errDesc string\n\tif !knownService {\n\t\terrDesc = fmt.Sprintf(\"unknown service %v\", service)\n\t} else {\n\t\terrDesc = fmt.Sprintf(\"unknown method %v for service %v\", method, service)\n\t}\n\tif trInfo != nil {\n\t\ttrInfo.tr.LazyPrintf(\"%s\", errDesc)\n\t\ttrInfo.tr.SetError()\n\t}\n\tif err := t.WriteStatus(stream, status.New(codes.Unimplemented, errDesc)); err != nil {\n\t\tif trInfo != nil {\n\t\t\ttrInfo.tr.LazyLog(&fmtStringer{\"%v\", []interface{}{err}}, true)\n\t\t\ttrInfo.tr.SetError()\n\t\t}\n\t\tgrpclog.Warningf(\"grpc: Server.handleStream failed to write status: %v\", err)\n\t}\n\tif trInfo != nil {\n\t\ttrInfo.tr.Finish()\n\t}\n}\n\n// The key to save ServerTransportStream in the context.\ntype streamKey struct{}\n\n// NewContextWithServerTransportStream creates a new context from ctx and\n// attaches stream to it.\n//\n// This API is EXPERIMENTAL.\nfunc NewContextWithServerTransportStream(ctx context.Context, stream ServerTransportStream) context.Context {\n\treturn context.WithValue(ctx, streamKey{}, stream)\n}\n\n// ServerTransportStream is a minimal interface that a transport stream must\n// implement. This can be used to mock an actual transport stream for tests of\n// handler code that use, for example, grpc.SetHeader (which requires some\n// stream to be in context).\n//\n// See also NewContextWithServerTransportStream.\n//\n// This API is EXPERIMENTAL.\ntype ServerTransportStream interface {\n\tMethod() string\n\tSetHeader(md metadata.MD) error\n\tSendHeader(md metadata.MD) error\n\tSetTrailer(md metadata.MD) error\n}\n\n// ServerTransportStreamFromContext returns the ServerTransportStream saved in\n// ctx. Returns nil if the given context has no stream associated with it\n// (which implies it is not an RPC invocation context).\n//\n// This API is EXPERIMENTAL.\nfunc ServerTransportStreamFromContext(ctx context.Context) ServerTransportStream {\n\ts, _ := ctx.Value(streamKey{}).(ServerTransportStream)\n\treturn s\n}\n\n// Stop stops the gRPC server. It immediately closes all open\n// connections and listeners.\n// It cancels all active RPCs on the server side and the corresponding\n// pending RPCs on the client side will get notified by connection\n// errors.\nfunc (s *Server) Stop() {\n\ts.quitOnce.Do(func() {\n\t\tclose(s.quit)\n\t})\n\n\tdefer func() {\n\t\ts.serveWG.Wait()\n\t\ts.doneOnce.Do(func() {\n\t\t\tclose(s.done)\n\t\t})\n\t}()\n\n\ts.channelzRemoveOnce.Do(func() {\n\t\tif channelz.IsOn() {\n\t\t\tchannelz.RemoveEntry(s.channelzID)\n\t\t}\n\t})\n\n\ts.mu.Lock()\n\tlisteners := s.lis\n\ts.lis = nil\n\tst := s.conns\n\ts.conns = nil\n\t// interrupt GracefulStop if Stop and GracefulStop are called concurrently.\n\ts.cv.Broadcast()\n\ts.mu.Unlock()\n\n\tfor lis := range listeners {\n\t\tlis.Close()\n\t}\n\tfor c := range st {\n\t\tc.Close()\n\t}\n\n\ts.mu.Lock()\n\tif s.events != nil {\n\t\ts.events.Finish()\n\t\ts.events = nil\n\t}\n\ts.mu.Unlock()\n}\n\n// GracefulStop stops the gRPC server gracefully. It stops the server from\n// accepting new connections and RPCs and blocks until all the pending RPCs are\n// finished.\nfunc (s *Server) GracefulStop() {\n\ts.quitOnce.Do(func() {\n\t\tclose(s.quit)\n\t})\n\n\tdefer func() {\n\t\ts.doneOnce.Do(func() {\n\t\t\tclose(s.done)\n\t\t})\n\t}()\n\n\ts.channelzRemoveOnce.Do(func() {\n\t\tif channelz.IsOn() {\n\t\t\tchannelz.RemoveEntry(s.channelzID)\n\t\t}\n\t})\n\ts.mu.Lock()\n\tif s.conns == nil {\n\t\ts.mu.Unlock()\n\t\treturn\n\t}\n\n\tfor lis := range s.lis {\n\t\tlis.Close()\n\t}\n\ts.lis = nil\n\tif !s.drain {\n\t\tfor c := range s.conns {\n\t\t\tc.(transport.ServerTransport).Drain()\n\t\t}\n\t\ts.drain = true\n\t}\n\n\t// Wait for serving threads to be ready to exit.  Only then can we be sure no\n\t// new conns will be created.\n\ts.mu.Unlock()\n\ts.serveWG.Wait()\n\ts.mu.Lock()\n\n\tfor len(s.conns) != 0 {\n\t\ts.cv.Wait()\n\t}\n\ts.conns = nil\n\tif s.events != nil {\n\t\ts.events.Finish()\n\t\ts.events = nil\n\t}\n\ts.mu.Unlock()\n}\n\n// contentSubtype must be lowercase\n// cannot return nil\nfunc (s *Server) getCodec(contentSubtype string) baseCodec {\n\tif s.opts.codec != nil {\n\t\treturn s.opts.codec\n\t}\n\tif contentSubtype == \"\" {\n\t\treturn encoding.GetCodec(proto.Name)\n\t}\n\tcodec := encoding.GetCodec(contentSubtype)\n\tif codec == nil {\n\t\treturn encoding.GetCodec(proto.Name)\n\t}\n\treturn codec\n}\n\n// SetHeader sets the header metadata.\n// When called multiple times, all the provided metadata will be merged.\n// All the metadata will be sent out when one of the following happens:\n//  - grpc.SendHeader() is called;\n//  - The first response is sent out;\n//  - An RPC status is sent out (error or success).\nfunc SetHeader(ctx context.Context, md metadata.MD) error {\n\tif md.Len() == 0 {\n\t\treturn nil\n\t}\n\tstream := ServerTransportStreamFromContext(ctx)\n\tif stream == nil {\n\t\treturn status.Errorf(codes.Internal, \"grpc: failed to fetch the stream from the context %v\", ctx)\n\t}\n\treturn stream.SetHeader(md)\n}\n\n// SendHeader sends header metadata. It may be called at most once.\n// The provided md and headers set by SetHeader() will be sent.\nfunc SendHeader(ctx context.Context, md metadata.MD) error {\n\tstream := ServerTransportStreamFromContext(ctx)\n\tif stream == nil {\n\t\treturn status.Errorf(codes.Internal, \"grpc: failed to fetch the stream from the context %v\", ctx)\n\t}\n\tif err := stream.SendHeader(md); err != nil {\n\t\treturn toRPCErr(err)\n\t}\n\treturn nil\n}\n\n// SetTrailer sets the trailer metadata that will be sent when an RPC returns.\n// When called more than once, all the provided metadata will be merged.\nfunc SetTrailer(ctx context.Context, md metadata.MD) error {\n\tif md.Len() == 0 {\n\t\treturn nil\n\t}\n\tstream := ServerTransportStreamFromContext(ctx)\n\tif stream == nil {\n\t\treturn status.Errorf(codes.Internal, \"grpc: failed to fetch the stream from the context %v\", ctx)\n\t}\n\treturn stream.SetTrailer(md)\n}\n\n// Method returns the method string for the server context.  The returned\n// string is in the format of \"/service/method\".\nfunc Method(ctx context.Context) (string, bool) {\n\ts := ServerTransportStreamFromContext(ctx)\n\tif s == nil {\n\t\treturn \"\", false\n\t}\n\treturn s.Method(), true\n}\n\ntype channelzServer struct {\n\ts *Server\n}\n\nfunc (c *channelzServer) ChannelzMetric() *channelz.ServerInternalMetric {\n\treturn c.s.channelzMetric()\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/service_config.go",
    "content": "/*\n *\n * Copyright 2017 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\npackage grpc\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\n\t\"google.golang.org/grpc/balancer\"\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/grpc/internal\"\n\t\"google.golang.org/grpc/serviceconfig\"\n)\n\nconst maxInt = int(^uint(0) >> 1)\n\n// MethodConfig defines the configuration recommended by the service providers for a\n// particular method.\n//\n// Deprecated: Users should not use this struct. Service config should be received\n// through name resolver, as specified here\n// https://github.com/grpc/grpc/blob/master/doc/service_config.md\ntype MethodConfig struct {\n\t// WaitForReady indicates whether RPCs sent to this method should wait until\n\t// the connection is ready by default (!failfast). The value specified via the\n\t// gRPC client API will override the value set here.\n\tWaitForReady *bool\n\t// Timeout is the default timeout for RPCs sent to this method. The actual\n\t// deadline used will be the minimum of the value specified here and the value\n\t// set by the application via the gRPC client API.  If either one is not set,\n\t// then the other will be used.  If neither is set, then the RPC has no deadline.\n\tTimeout *time.Duration\n\t// MaxReqSize is the maximum allowed payload size for an individual request in a\n\t// stream (client->server) in bytes. The size which is measured is the serialized\n\t// payload after per-message compression (but before stream compression) in bytes.\n\t// The actual value used is the minimum of the value specified here and the value set\n\t// by the application via the gRPC client API. If either one is not set, then the other\n\t// will be used.  If neither is set, then the built-in default is used.\n\tMaxReqSize *int\n\t// MaxRespSize is the maximum allowed payload size for an individual response in a\n\t// stream (server->client) in bytes.\n\tMaxRespSize *int\n\t// RetryPolicy configures retry options for the method.\n\tretryPolicy *retryPolicy\n}\n\ntype lbConfig struct {\n\tname string\n\tcfg  serviceconfig.LoadBalancingConfig\n}\n\n// ServiceConfig is provided by the service provider and contains parameters for how\n// clients that connect to the service should behave.\n//\n// Deprecated: Users should not use this struct. Service config should be received\n// through name resolver, as specified here\n// https://github.com/grpc/grpc/blob/master/doc/service_config.md\ntype ServiceConfig struct {\n\tserviceconfig.Config\n\n\t// LB is the load balancer the service providers recommends. The balancer\n\t// specified via grpc.WithBalancer will override this.  This is deprecated;\n\t// lbConfigs is preferred.  If lbConfig and LB are both present, lbConfig\n\t// will be used.\n\tLB *string\n\n\t// lbConfig is the service config's load balancing configuration.  If\n\t// lbConfig and LB are both present, lbConfig will be used.\n\tlbConfig *lbConfig\n\n\t// Methods contains a map for the methods in this service.  If there is an\n\t// exact match for a method (i.e. /service/method) in the map, use the\n\t// corresponding MethodConfig.  If there's no exact match, look for the\n\t// default config for the service (/service/) and use the corresponding\n\t// MethodConfig if it exists.  Otherwise, the method has no MethodConfig to\n\t// use.\n\tMethods map[string]MethodConfig\n\n\t// If a retryThrottlingPolicy is provided, gRPC will automatically throttle\n\t// retry attempts and hedged RPCs when the client’s ratio of failures to\n\t// successes exceeds a threshold.\n\t//\n\t// For each server name, the gRPC client will maintain a token_count which is\n\t// initially set to maxTokens, and can take values between 0 and maxTokens.\n\t//\n\t// Every outgoing RPC (regardless of service or method invoked) will change\n\t// token_count as follows:\n\t//\n\t//   - Every failed RPC will decrement the token_count by 1.\n\t//   - Every successful RPC will increment the token_count by tokenRatio.\n\t//\n\t// If token_count is less than or equal to maxTokens / 2, then RPCs will not\n\t// be retried and hedged RPCs will not be sent.\n\tretryThrottling *retryThrottlingPolicy\n\t// healthCheckConfig must be set as one of the requirement to enable LB channel\n\t// health check.\n\thealthCheckConfig *healthCheckConfig\n\t// rawJSONString stores service config json string that get parsed into\n\t// this service config struct.\n\trawJSONString string\n}\n\n// healthCheckConfig defines the go-native version of the LB channel health check config.\ntype healthCheckConfig struct {\n\t// serviceName is the service name to use in the health-checking request.\n\tServiceName string\n}\n\n// retryPolicy defines the go-native version of the retry policy defined by the\n// service config here:\n// https://github.com/grpc/proposal/blob/master/A6-client-retries.md#integration-with-service-config\ntype retryPolicy struct {\n\t// MaxAttempts is the maximum number of attempts, including the original RPC.\n\t//\n\t// This field is required and must be two or greater.\n\tmaxAttempts int\n\n\t// Exponential backoff parameters. The initial retry attempt will occur at\n\t// random(0, initialBackoffMS). In general, the nth attempt will occur at\n\t// random(0,\n\t//   min(initialBackoffMS*backoffMultiplier**(n-1), maxBackoffMS)).\n\t//\n\t// These fields are required and must be greater than zero.\n\tinitialBackoff    time.Duration\n\tmaxBackoff        time.Duration\n\tbackoffMultiplier float64\n\n\t// The set of status codes which may be retried.\n\t//\n\t// Status codes are specified as strings, e.g., \"UNAVAILABLE\".\n\t//\n\t// This field is required and must be non-empty.\n\t// Note: a set is used to store this for easy lookup.\n\tretryableStatusCodes map[codes.Code]bool\n}\n\ntype jsonRetryPolicy struct {\n\tMaxAttempts          int\n\tInitialBackoff       string\n\tMaxBackoff           string\n\tBackoffMultiplier    float64\n\tRetryableStatusCodes []codes.Code\n}\n\n// retryThrottlingPolicy defines the go-native version of the retry throttling\n// policy defined by the service config here:\n// https://github.com/grpc/proposal/blob/master/A6-client-retries.md#integration-with-service-config\ntype retryThrottlingPolicy struct {\n\t// The number of tokens starts at maxTokens. The token_count will always be\n\t// between 0 and maxTokens.\n\t//\n\t// This field is required and must be greater than zero.\n\tMaxTokens float64\n\t// The amount of tokens to add on each successful RPC. Typically this will\n\t// be some number between 0 and 1, e.g., 0.1.\n\t//\n\t// This field is required and must be greater than zero. Up to 3 decimal\n\t// places are supported.\n\tTokenRatio float64\n}\n\nfunc parseDuration(s *string) (*time.Duration, error) {\n\tif s == nil {\n\t\treturn nil, nil\n\t}\n\tif !strings.HasSuffix(*s, \"s\") {\n\t\treturn nil, fmt.Errorf(\"malformed duration %q\", *s)\n\t}\n\tss := strings.SplitN((*s)[:len(*s)-1], \".\", 3)\n\tif len(ss) > 2 {\n\t\treturn nil, fmt.Errorf(\"malformed duration %q\", *s)\n\t}\n\t// hasDigits is set if either the whole or fractional part of the number is\n\t// present, since both are optional but one is required.\n\thasDigits := false\n\tvar d time.Duration\n\tif len(ss[0]) > 0 {\n\t\ti, err := strconv.ParseInt(ss[0], 10, 32)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"malformed duration %q: %v\", *s, err)\n\t\t}\n\t\td = time.Duration(i) * time.Second\n\t\thasDigits = true\n\t}\n\tif len(ss) == 2 && len(ss[1]) > 0 {\n\t\tif len(ss[1]) > 9 {\n\t\t\treturn nil, fmt.Errorf(\"malformed duration %q\", *s)\n\t\t}\n\t\tf, err := strconv.ParseInt(ss[1], 10, 64)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"malformed duration %q: %v\", *s, err)\n\t\t}\n\t\tfor i := 9; i > len(ss[1]); i-- {\n\t\t\tf *= 10\n\t\t}\n\t\td += time.Duration(f)\n\t\thasDigits = true\n\t}\n\tif !hasDigits {\n\t\treturn nil, fmt.Errorf(\"malformed duration %q\", *s)\n\t}\n\n\treturn &d, nil\n}\n\ntype jsonName struct {\n\tService *string\n\tMethod  *string\n}\n\nfunc (j jsonName) generatePath() (string, bool) {\n\tif j.Service == nil {\n\t\treturn \"\", false\n\t}\n\tres := \"/\" + *j.Service + \"/\"\n\tif j.Method != nil {\n\t\tres += *j.Method\n\t}\n\treturn res, true\n}\n\n// TODO(lyuxuan): delete this struct after cleaning up old service config implementation.\ntype jsonMC struct {\n\tName                    *[]jsonName\n\tWaitForReady            *bool\n\tTimeout                 *string\n\tMaxRequestMessageBytes  *int64\n\tMaxResponseMessageBytes *int64\n\tRetryPolicy             *jsonRetryPolicy\n}\n\ntype loadBalancingConfig map[string]json.RawMessage\n\n// TODO(lyuxuan): delete this struct after cleaning up old service config implementation.\ntype jsonSC struct {\n\tLoadBalancingPolicy *string\n\tLoadBalancingConfig *[]loadBalancingConfig\n\tMethodConfig        *[]jsonMC\n\tRetryThrottling     *retryThrottlingPolicy\n\tHealthCheckConfig   *healthCheckConfig\n}\n\nfunc init() {\n\tinternal.ParseServiceConfig = func(sc string) (interface{}, error) {\n\t\treturn parseServiceConfig(sc)\n\t}\n}\n\nfunc parseServiceConfig(js string) (*ServiceConfig, error) {\n\tif len(js) == 0 {\n\t\treturn nil, fmt.Errorf(\"no JSON service config provided\")\n\t}\n\tvar rsc jsonSC\n\terr := json.Unmarshal([]byte(js), &rsc)\n\tif err != nil {\n\t\tgrpclog.Warningf(\"grpc: parseServiceConfig error unmarshaling %s due to %v\", js, err)\n\t\treturn nil, err\n\t}\n\tsc := ServiceConfig{\n\t\tLB:                rsc.LoadBalancingPolicy,\n\t\tMethods:           make(map[string]MethodConfig),\n\t\tretryThrottling:   rsc.RetryThrottling,\n\t\thealthCheckConfig: rsc.HealthCheckConfig,\n\t\trawJSONString:     js,\n\t}\n\tif rsc.LoadBalancingConfig != nil {\n\t\tfor i, lbcfg := range *rsc.LoadBalancingConfig {\n\t\t\tif len(lbcfg) != 1 {\n\t\t\t\terr := fmt.Errorf(\"invalid loadBalancingConfig: entry %v does not contain exactly 1 policy/config pair: %q\", i, lbcfg)\n\t\t\t\tgrpclog.Warningf(err.Error())\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tvar name string\n\t\t\tvar jsonCfg json.RawMessage\n\t\t\tfor name, jsonCfg = range lbcfg {\n\t\t\t}\n\t\t\tbuilder := balancer.Get(name)\n\t\t\tif builder == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tsc.lbConfig = &lbConfig{name: name}\n\t\t\tif parser, ok := builder.(balancer.ConfigParser); ok {\n\t\t\t\tvar err error\n\t\t\t\tsc.lbConfig.cfg, err = parser.ParseConfig(jsonCfg)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, fmt.Errorf(\"error parsing loadBalancingConfig for policy %q: %v\", name, err)\n\t\t\t\t}\n\t\t\t} else if string(jsonCfg) != \"{}\" {\n\t\t\t\tgrpclog.Warningf(\"non-empty balancer configuration %q, but balancer does not implement ParseConfig\", string(jsonCfg))\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\t}\n\n\tif rsc.MethodConfig == nil {\n\t\treturn &sc, nil\n\t}\n\tfor _, m := range *rsc.MethodConfig {\n\t\tif m.Name == nil {\n\t\t\tcontinue\n\t\t}\n\t\td, err := parseDuration(m.Timeout)\n\t\tif err != nil {\n\t\t\tgrpclog.Warningf(\"grpc: parseServiceConfig error unmarshaling %s due to %v\", js, err)\n\t\t\treturn nil, err\n\t\t}\n\n\t\tmc := MethodConfig{\n\t\t\tWaitForReady: m.WaitForReady,\n\t\t\tTimeout:      d,\n\t\t}\n\t\tif mc.retryPolicy, err = convertRetryPolicy(m.RetryPolicy); err != nil {\n\t\t\tgrpclog.Warningf(\"grpc: parseServiceConfig error unmarshaling %s due to %v\", js, err)\n\t\t\treturn nil, err\n\t\t}\n\t\tif m.MaxRequestMessageBytes != nil {\n\t\t\tif *m.MaxRequestMessageBytes > int64(maxInt) {\n\t\t\t\tmc.MaxReqSize = newInt(maxInt)\n\t\t\t} else {\n\t\t\t\tmc.MaxReqSize = newInt(int(*m.MaxRequestMessageBytes))\n\t\t\t}\n\t\t}\n\t\tif m.MaxResponseMessageBytes != nil {\n\t\t\tif *m.MaxResponseMessageBytes > int64(maxInt) {\n\t\t\t\tmc.MaxRespSize = newInt(maxInt)\n\t\t\t} else {\n\t\t\t\tmc.MaxRespSize = newInt(int(*m.MaxResponseMessageBytes))\n\t\t\t}\n\t\t}\n\t\tfor _, n := range *m.Name {\n\t\t\tif path, valid := n.generatePath(); valid {\n\t\t\t\tsc.Methods[path] = mc\n\t\t\t}\n\t\t}\n\t}\n\n\tif sc.retryThrottling != nil {\n\t\tif mt := sc.retryThrottling.MaxTokens; mt <= 0 || mt > 1000 {\n\t\t\treturn nil, fmt.Errorf(\"invalid retry throttling config: maxTokens (%v) out of range (0, 1000]\", mt)\n\t\t}\n\t\tif tr := sc.retryThrottling.TokenRatio; tr <= 0 {\n\t\t\treturn nil, fmt.Errorf(\"invalid retry throttling config: tokenRatio (%v) may not be negative\", tr)\n\t\t}\n\t}\n\treturn &sc, nil\n}\n\nfunc convertRetryPolicy(jrp *jsonRetryPolicy) (p *retryPolicy, err error) {\n\tif jrp == nil {\n\t\treturn nil, nil\n\t}\n\tib, err := parseDuration(&jrp.InitialBackoff)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tmb, err := parseDuration(&jrp.MaxBackoff)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif jrp.MaxAttempts <= 1 ||\n\t\t*ib <= 0 ||\n\t\t*mb <= 0 ||\n\t\tjrp.BackoffMultiplier <= 0 ||\n\t\tlen(jrp.RetryableStatusCodes) == 0 {\n\t\tgrpclog.Warningf(\"grpc: ignoring retry policy %v due to illegal configuration\", jrp)\n\t\treturn nil, nil\n\t}\n\n\trp := &retryPolicy{\n\t\tmaxAttempts:          jrp.MaxAttempts,\n\t\tinitialBackoff:       *ib,\n\t\tmaxBackoff:           *mb,\n\t\tbackoffMultiplier:    jrp.BackoffMultiplier,\n\t\tretryableStatusCodes: make(map[codes.Code]bool),\n\t}\n\tif rp.maxAttempts > 5 {\n\t\t// TODO(retry): Make the max maxAttempts configurable.\n\t\trp.maxAttempts = 5\n\t}\n\tfor _, code := range jrp.RetryableStatusCodes {\n\t\trp.retryableStatusCodes[code] = true\n\t}\n\treturn rp, nil\n}\n\nfunc min(a, b *int) *int {\n\tif *a < *b {\n\t\treturn a\n\t}\n\treturn b\n}\n\nfunc getMaxSize(mcMax, doptMax *int, defaultVal int) *int {\n\tif mcMax == nil && doptMax == nil {\n\t\treturn &defaultVal\n\t}\n\tif mcMax != nil && doptMax != nil {\n\t\treturn min(mcMax, doptMax)\n\t}\n\tif mcMax != nil {\n\t\treturn mcMax\n\t}\n\treturn doptMax\n}\n\nfunc newInt(b int) *int {\n\treturn &b\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/serviceconfig/serviceconfig.go",
    "content": "/*\n *\n * Copyright 2019 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n// Package serviceconfig defines types and methods for operating on gRPC\n// service configs.\npackage serviceconfig\n\nimport (\n\t\"google.golang.org/grpc/internal\"\n)\n\n// Config represents an opaque data structure holding a service config.\ntype Config interface {\n\tisConfig()\n}\n\n// LoadBalancingConfig represents an opaque data structure holding a load\n// balancer config.\ntype LoadBalancingConfig interface {\n\tisLoadBalancingConfig()\n}\n\n// Parse parses the JSON service config provided into an internal form or\n// returns an error if the config is invalid.\nfunc Parse(ServiceConfigJSON string) (Config, error) {\n\tc, err := internal.ParseServiceConfig(ServiceConfigJSON)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn c.(Config), err\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/stats/handlers.go",
    "content": "/*\n *\n * Copyright 2016 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\npackage stats\n\nimport (\n\t\"context\"\n\t\"net\"\n)\n\n// ConnTagInfo defines the relevant information needed by connection context tagger.\ntype ConnTagInfo struct {\n\t// RemoteAddr is the remote address of the corresponding connection.\n\tRemoteAddr net.Addr\n\t// LocalAddr is the local address of the corresponding connection.\n\tLocalAddr net.Addr\n}\n\n// RPCTagInfo defines the relevant information needed by RPC context tagger.\ntype RPCTagInfo struct {\n\t// FullMethodName is the RPC method in the format of /package.service/method.\n\tFullMethodName string\n\t// FailFast indicates if this RPC is failfast.\n\t// This field is only valid on client side, it's always false on server side.\n\tFailFast bool\n}\n\n// Handler defines the interface for the related stats handling (e.g., RPCs, connections).\ntype Handler interface {\n\t// TagRPC can attach some information to the given context.\n\t// The context used for the rest lifetime of the RPC will be derived from\n\t// the returned context.\n\tTagRPC(context.Context, *RPCTagInfo) context.Context\n\t// HandleRPC processes the RPC stats.\n\tHandleRPC(context.Context, RPCStats)\n\n\t// TagConn can attach some information to the given context.\n\t// The returned context will be used for stats handling.\n\t// For conn stats handling, the context used in HandleConn for this\n\t// connection will be derived from the context returned.\n\t// For RPC stats handling,\n\t//  - On server side, the context used in HandleRPC for all RPCs on this\n\t// connection will be derived from the context returned.\n\t//  - On client side, the context is not derived from the context returned.\n\tTagConn(context.Context, *ConnTagInfo) context.Context\n\t// HandleConn processes the Conn stats.\n\tHandleConn(context.Context, ConnStats)\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/stats/stats.go",
    "content": "/*\n *\n * Copyright 2016 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n//go:generate protoc --go_out=plugins=grpc:. grpc_testing/test.proto\n\n// Package stats is for collecting and reporting various network and RPC stats.\n// This package is for monitoring purpose only. All fields are read-only.\n// All APIs are experimental.\npackage stats // import \"google.golang.org/grpc/stats\"\n\nimport (\n\t\"context\"\n\t\"net\"\n\t\"time\"\n\n\t\"google.golang.org/grpc/metadata\"\n)\n\n// RPCStats contains stats information about RPCs.\ntype RPCStats interface {\n\tisRPCStats()\n\t// IsClient returns true if this RPCStats is from client side.\n\tIsClient() bool\n}\n\n// Begin contains stats when an RPC begins.\n// FailFast is only valid if this Begin is from client side.\ntype Begin struct {\n\t// Client is true if this Begin is from client side.\n\tClient bool\n\t// BeginTime is the time when the RPC begins.\n\tBeginTime time.Time\n\t// FailFast indicates if this RPC is failfast.\n\tFailFast bool\n}\n\n// IsClient indicates if the stats information is from client side.\nfunc (s *Begin) IsClient() bool { return s.Client }\n\nfunc (s *Begin) isRPCStats() {}\n\n// InPayload contains the information for an incoming payload.\ntype InPayload struct {\n\t// Client is true if this InPayload is from client side.\n\tClient bool\n\t// Payload is the payload with original type.\n\tPayload interface{}\n\t// Data is the serialized message payload.\n\tData []byte\n\t// Length is the length of uncompressed data.\n\tLength int\n\t// WireLength is the length of data on wire (compressed, signed, encrypted).\n\tWireLength int\n\t// RecvTime is the time when the payload is received.\n\tRecvTime time.Time\n}\n\n// IsClient indicates if the stats information is from client side.\nfunc (s *InPayload) IsClient() bool { return s.Client }\n\nfunc (s *InPayload) isRPCStats() {}\n\n// InHeader contains stats when a header is received.\ntype InHeader struct {\n\t// Client is true if this InHeader is from client side.\n\tClient bool\n\t// WireLength is the wire length of header.\n\tWireLength int\n\n\t// The following fields are valid only if Client is false.\n\t// FullMethod is the full RPC method string, i.e., /package.service/method.\n\tFullMethod string\n\t// RemoteAddr is the remote address of the corresponding connection.\n\tRemoteAddr net.Addr\n\t// LocalAddr is the local address of the corresponding connection.\n\tLocalAddr net.Addr\n\t// Compression is the compression algorithm used for the RPC.\n\tCompression string\n}\n\n// IsClient indicates if the stats information is from client side.\nfunc (s *InHeader) IsClient() bool { return s.Client }\n\nfunc (s *InHeader) isRPCStats() {}\n\n// InTrailer contains stats when a trailer is received.\ntype InTrailer struct {\n\t// Client is true if this InTrailer is from client side.\n\tClient bool\n\t// WireLength is the wire length of trailer.\n\tWireLength int\n}\n\n// IsClient indicates if the stats information is from client side.\nfunc (s *InTrailer) IsClient() bool { return s.Client }\n\nfunc (s *InTrailer) isRPCStats() {}\n\n// OutPayload contains the information for an outgoing payload.\ntype OutPayload struct {\n\t// Client is true if this OutPayload is from client side.\n\tClient bool\n\t// Payload is the payload with original type.\n\tPayload interface{}\n\t// Data is the serialized message payload.\n\tData []byte\n\t// Length is the length of uncompressed data.\n\tLength int\n\t// WireLength is the length of data on wire (compressed, signed, encrypted).\n\tWireLength int\n\t// SentTime is the time when the payload is sent.\n\tSentTime time.Time\n}\n\n// IsClient indicates if this stats information is from client side.\nfunc (s *OutPayload) IsClient() bool { return s.Client }\n\nfunc (s *OutPayload) isRPCStats() {}\n\n// OutHeader contains stats when a header is sent.\ntype OutHeader struct {\n\t// Client is true if this OutHeader is from client side.\n\tClient bool\n\n\t// The following fields are valid only if Client is true.\n\t// FullMethod is the full RPC method string, i.e., /package.service/method.\n\tFullMethod string\n\t// RemoteAddr is the remote address of the corresponding connection.\n\tRemoteAddr net.Addr\n\t// LocalAddr is the local address of the corresponding connection.\n\tLocalAddr net.Addr\n\t// Compression is the compression algorithm used for the RPC.\n\tCompression string\n}\n\n// IsClient indicates if this stats information is from client side.\nfunc (s *OutHeader) IsClient() bool { return s.Client }\n\nfunc (s *OutHeader) isRPCStats() {}\n\n// OutTrailer contains stats when a trailer is sent.\ntype OutTrailer struct {\n\t// Client is true if this OutTrailer is from client side.\n\tClient bool\n\t// WireLength is the wire length of trailer.\n\tWireLength int\n}\n\n// IsClient indicates if this stats information is from client side.\nfunc (s *OutTrailer) IsClient() bool { return s.Client }\n\nfunc (s *OutTrailer) isRPCStats() {}\n\n// End contains stats when an RPC ends.\ntype End struct {\n\t// Client is true if this End is from client side.\n\tClient bool\n\t// BeginTime is the time when the RPC began.\n\tBeginTime time.Time\n\t// EndTime is the time when the RPC ends.\n\tEndTime time.Time\n\t// Trailer contains the trailer metadata received from the server. This\n\t// field is only valid if this End is from the client side.\n\tTrailer metadata.MD\n\t// Error is the error the RPC ended with. It is an error generated from\n\t// status.Status and can be converted back to status.Status using\n\t// status.FromError if non-nil.\n\tError error\n}\n\n// IsClient indicates if this is from client side.\nfunc (s *End) IsClient() bool { return s.Client }\n\nfunc (s *End) isRPCStats() {}\n\n// ConnStats contains stats information about connections.\ntype ConnStats interface {\n\tisConnStats()\n\t// IsClient returns true if this ConnStats is from client side.\n\tIsClient() bool\n}\n\n// ConnBegin contains the stats of a connection when it is established.\ntype ConnBegin struct {\n\t// Client is true if this ConnBegin is from client side.\n\tClient bool\n}\n\n// IsClient indicates if this is from client side.\nfunc (s *ConnBegin) IsClient() bool { return s.Client }\n\nfunc (s *ConnBegin) isConnStats() {}\n\n// ConnEnd contains the stats of a connection when it ends.\ntype ConnEnd struct {\n\t// Client is true if this ConnEnd is from client side.\n\tClient bool\n}\n\n// IsClient indicates if this is from client side.\nfunc (s *ConnEnd) IsClient() bool { return s.Client }\n\nfunc (s *ConnEnd) isConnStats() {}\n\ntype incomingTagsKey struct{}\ntype outgoingTagsKey struct{}\n\n// SetTags attaches stats tagging data to the context, which will be sent in\n// the outgoing RPC with the header grpc-tags-bin.  Subsequent calls to\n// SetTags will overwrite the values from earlier calls.\n//\n// NOTE: this is provided only for backward compatibility with existing clients\n// and will likely be removed in an upcoming release.  New uses should transmit\n// this type of data using metadata with a different, non-reserved (i.e. does\n// not begin with \"grpc-\") header name.\nfunc SetTags(ctx context.Context, b []byte) context.Context {\n\treturn context.WithValue(ctx, outgoingTagsKey{}, b)\n}\n\n// Tags returns the tags from the context for the inbound RPC.\n//\n// NOTE: this is provided only for backward compatibility with existing clients\n// and will likely be removed in an upcoming release.  New uses should transmit\n// this type of data using metadata with a different, non-reserved (i.e. does\n// not begin with \"grpc-\") header name.\nfunc Tags(ctx context.Context) []byte {\n\tb, _ := ctx.Value(incomingTagsKey{}).([]byte)\n\treturn b\n}\n\n// SetIncomingTags attaches stats tagging data to the context, to be read by\n// the application (not sent in outgoing RPCs).\n//\n// This is intended for gRPC-internal use ONLY.\nfunc SetIncomingTags(ctx context.Context, b []byte) context.Context {\n\treturn context.WithValue(ctx, incomingTagsKey{}, b)\n}\n\n// OutgoingTags returns the tags from the context for the outbound RPC.\n//\n// This is intended for gRPC-internal use ONLY.\nfunc OutgoingTags(ctx context.Context) []byte {\n\tb, _ := ctx.Value(outgoingTagsKey{}).([]byte)\n\treturn b\n}\n\ntype incomingTraceKey struct{}\ntype outgoingTraceKey struct{}\n\n// SetTrace attaches stats tagging data to the context, which will be sent in\n// the outgoing RPC with the header grpc-trace-bin.  Subsequent calls to\n// SetTrace will overwrite the values from earlier calls.\n//\n// NOTE: this is provided only for backward compatibility with existing clients\n// and will likely be removed in an upcoming release.  New uses should transmit\n// this type of data using metadata with a different, non-reserved (i.e. does\n// not begin with \"grpc-\") header name.\nfunc SetTrace(ctx context.Context, b []byte) context.Context {\n\treturn context.WithValue(ctx, outgoingTraceKey{}, b)\n}\n\n// Trace returns the trace from the context for the inbound RPC.\n//\n// NOTE: this is provided only for backward compatibility with existing clients\n// and will likely be removed in an upcoming release.  New uses should transmit\n// this type of data using metadata with a different, non-reserved (i.e. does\n// not begin with \"grpc-\") header name.\nfunc Trace(ctx context.Context) []byte {\n\tb, _ := ctx.Value(incomingTraceKey{}).([]byte)\n\treturn b\n}\n\n// SetIncomingTrace attaches stats tagging data to the context, to be read by\n// the application (not sent in outgoing RPCs).  It is intended for\n// gRPC-internal use.\nfunc SetIncomingTrace(ctx context.Context, b []byte) context.Context {\n\treturn context.WithValue(ctx, incomingTraceKey{}, b)\n}\n\n// OutgoingTrace returns the trace from the context for the outbound RPC.  It is\n// intended for gRPC-internal use.\nfunc OutgoingTrace(ctx context.Context) []byte {\n\tb, _ := ctx.Value(outgoingTraceKey{}).([]byte)\n\treturn b\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/status/status.go",
    "content": "/*\n *\n * Copyright 2017 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n// Package status implements errors returned by gRPC.  These errors are\n// serialized and transmitted on the wire between server and client, and allow\n// for additional data to be transmitted via the Details field in the status\n// proto.  gRPC service handlers should return an error created by this\n// package, and gRPC clients should expect a corresponding error to be\n// returned from the RPC call.\n//\n// This package upholds the invariants that a non-nil error may not\n// contain an OK code, and an OK code must result in a nil error.\npackage status\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\n\t\"github.com/golang/protobuf/proto\"\n\t\"github.com/golang/protobuf/ptypes\"\n\tspb \"google.golang.org/genproto/googleapis/rpc/status\"\n\t\"google.golang.org/grpc/codes\"\n)\n\n// statusError is an alias of a status proto.  It implements error and Status,\n// and a nil statusError should never be returned by this package.\ntype statusError spb.Status\n\nfunc (se *statusError) Error() string {\n\tp := (*spb.Status)(se)\n\treturn fmt.Sprintf(\"rpc error: code = %s desc = %s\", codes.Code(p.GetCode()), p.GetMessage())\n}\n\nfunc (se *statusError) GRPCStatus() *Status {\n\treturn &Status{s: (*spb.Status)(se)}\n}\n\n// Status represents an RPC status code, message, and details.  It is immutable\n// and should be created with New, Newf, or FromProto.\ntype Status struct {\n\ts *spb.Status\n}\n\n// Code returns the status code contained in s.\nfunc (s *Status) Code() codes.Code {\n\tif s == nil || s.s == nil {\n\t\treturn codes.OK\n\t}\n\treturn codes.Code(s.s.Code)\n}\n\n// Message returns the message contained in s.\nfunc (s *Status) Message() string {\n\tif s == nil || s.s == nil {\n\t\treturn \"\"\n\t}\n\treturn s.s.Message\n}\n\n// Proto returns s's status as an spb.Status proto message.\nfunc (s *Status) Proto() *spb.Status {\n\tif s == nil {\n\t\treturn nil\n\t}\n\treturn proto.Clone(s.s).(*spb.Status)\n}\n\n// Err returns an immutable error representing s; returns nil if s.Code() is\n// OK.\nfunc (s *Status) Err() error {\n\tif s.Code() == codes.OK {\n\t\treturn nil\n\t}\n\treturn (*statusError)(s.s)\n}\n\n// New returns a Status representing c and msg.\nfunc New(c codes.Code, msg string) *Status {\n\treturn &Status{s: &spb.Status{Code: int32(c), Message: msg}}\n}\n\n// Newf returns New(c, fmt.Sprintf(format, a...)).\nfunc Newf(c codes.Code, format string, a ...interface{}) *Status {\n\treturn New(c, fmt.Sprintf(format, a...))\n}\n\n// Error returns an error representing c and msg.  If c is OK, returns nil.\nfunc Error(c codes.Code, msg string) error {\n\treturn New(c, msg).Err()\n}\n\n// Errorf returns Error(c, fmt.Sprintf(format, a...)).\nfunc Errorf(c codes.Code, format string, a ...interface{}) error {\n\treturn Error(c, fmt.Sprintf(format, a...))\n}\n\n// ErrorProto returns an error representing s.  If s.Code is OK, returns nil.\nfunc ErrorProto(s *spb.Status) error {\n\treturn FromProto(s).Err()\n}\n\n// FromProto returns a Status representing s.\nfunc FromProto(s *spb.Status) *Status {\n\treturn &Status{s: proto.Clone(s).(*spb.Status)}\n}\n\n// FromError returns a Status representing err if it was produced from this\n// package or has a method `GRPCStatus() *Status`. Otherwise, ok is false and a\n// Status is returned with codes.Unknown and the original error message.\nfunc FromError(err error) (s *Status, ok bool) {\n\tif err == nil {\n\t\treturn &Status{s: &spb.Status{Code: int32(codes.OK)}}, true\n\t}\n\tif se, ok := err.(interface {\n\t\tGRPCStatus() *Status\n\t}); ok {\n\t\treturn se.GRPCStatus(), true\n\t}\n\treturn New(codes.Unknown, err.Error()), false\n}\n\n// Convert is a convenience function which removes the need to handle the\n// boolean return value from FromError.\nfunc Convert(err error) *Status {\n\ts, _ := FromError(err)\n\treturn s\n}\n\n// WithDetails returns a new status with the provided details messages appended to the status.\n// If any errors are encountered, it returns nil and the first error encountered.\nfunc (s *Status) WithDetails(details ...proto.Message) (*Status, error) {\n\tif s.Code() == codes.OK {\n\t\treturn nil, errors.New(\"no error details for status with code OK\")\n\t}\n\t// s.Code() != OK implies that s.Proto() != nil.\n\tp := s.Proto()\n\tfor _, detail := range details {\n\t\tany, err := ptypes.MarshalAny(detail)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tp.Details = append(p.Details, any)\n\t}\n\treturn &Status{s: p}, nil\n}\n\n// Details returns a slice of details messages attached to the status.\n// If a detail cannot be decoded, the error is returned in place of the detail.\nfunc (s *Status) Details() []interface{} {\n\tif s == nil || s.s == nil {\n\t\treturn nil\n\t}\n\tdetails := make([]interface{}, 0, len(s.s.Details))\n\tfor _, any := range s.s.Details {\n\t\tdetail := &ptypes.DynamicAny{}\n\t\tif err := ptypes.UnmarshalAny(any, detail); err != nil {\n\t\t\tdetails = append(details, err)\n\t\t\tcontinue\n\t\t}\n\t\tdetails = append(details, detail.Message)\n\t}\n\treturn details\n}\n\n// Code returns the Code of the error if it is a Status error, codes.OK if err\n// is nil, or codes.Unknown otherwise.\nfunc Code(err error) codes.Code {\n\t// Don't use FromError to avoid allocation of OK status.\n\tif err == nil {\n\t\treturn codes.OK\n\t}\n\tif se, ok := err.(interface {\n\t\tGRPCStatus() *Status\n\t}); ok {\n\t\treturn se.GRPCStatus().Code()\n\t}\n\treturn codes.Unknown\n}\n\n// FromContextError converts a context error into a Status.  It returns a\n// Status with codes.OK if err is nil, or a Status with codes.Unknown if err is\n// non-nil and not a context error.\nfunc FromContextError(err error) *Status {\n\tswitch err {\n\tcase nil:\n\t\treturn New(codes.OK, \"\")\n\tcase context.DeadlineExceeded:\n\t\treturn New(codes.DeadlineExceeded, err.Error())\n\tcase context.Canceled:\n\t\treturn New(codes.Canceled, err.Error())\n\tdefault:\n\t\treturn New(codes.Unknown, err.Error())\n\t}\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/stream.go",
    "content": "/*\n *\n * Copyright 2014 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\npackage grpc\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"io\"\n\t\"math\"\n\t\"strconv\"\n\t\"sync\"\n\t\"time\"\n\n\t\"golang.org/x/net/trace\"\n\t\"google.golang.org/grpc/balancer\"\n\t\"google.golang.org/grpc/codes\"\n\t\"google.golang.org/grpc/connectivity\"\n\t\"google.golang.org/grpc/encoding\"\n\t\"google.golang.org/grpc/grpclog\"\n\t\"google.golang.org/grpc/internal/balancerload\"\n\t\"google.golang.org/grpc/internal/binarylog\"\n\t\"google.golang.org/grpc/internal/channelz\"\n\t\"google.golang.org/grpc/internal/grpcrand\"\n\t\"google.golang.org/grpc/internal/transport\"\n\t\"google.golang.org/grpc/metadata\"\n\t\"google.golang.org/grpc/peer\"\n\t\"google.golang.org/grpc/stats\"\n\t\"google.golang.org/grpc/status\"\n)\n\n// StreamHandler defines the handler called by gRPC server to complete the\n// execution of a streaming RPC. If a StreamHandler returns an error, it\n// should be produced by the status package, or else gRPC will use\n// codes.Unknown as the status code and err.Error() as the status message\n// of the RPC.\ntype StreamHandler func(srv interface{}, stream ServerStream) error\n\n// StreamDesc represents a streaming RPC service's method specification.\ntype StreamDesc struct {\n\tStreamName string\n\tHandler    StreamHandler\n\n\t// At least one of these is true.\n\tServerStreams bool\n\tClientStreams bool\n}\n\n// Stream defines the common interface a client or server stream has to satisfy.\n//\n// Deprecated: See ClientStream and ServerStream documentation instead.\ntype Stream interface {\n\t// Deprecated: See ClientStream and ServerStream documentation instead.\n\tContext() context.Context\n\t// Deprecated: See ClientStream and ServerStream documentation instead.\n\tSendMsg(m interface{}) error\n\t// Deprecated: See ClientStream and ServerStream documentation instead.\n\tRecvMsg(m interface{}) error\n}\n\n// ClientStream defines the client-side behavior of a streaming RPC.\n//\n// All errors returned from ClientStream methods are compatible with the\n// status package.\ntype ClientStream interface {\n\t// Header returns the header metadata received from the server if there\n\t// is any. It blocks if the metadata is not ready to read.\n\tHeader() (metadata.MD, error)\n\t// Trailer returns the trailer metadata from the server, if there is any.\n\t// It must only be called after stream.CloseAndRecv has returned, or\n\t// stream.Recv has returned a non-nil error (including io.EOF).\n\tTrailer() metadata.MD\n\t// CloseSend closes the send direction of the stream. It closes the stream\n\t// when non-nil error is met. It is also not safe to call CloseSend\n\t// concurrently with SendMsg.\n\tCloseSend() error\n\t// Context returns the context for this stream.\n\t//\n\t// It should not be called until after Header or RecvMsg has returned. Once\n\t// called, subsequent client-side retries are disabled.\n\tContext() context.Context\n\t// SendMsg is generally called by generated code. On error, SendMsg aborts\n\t// the stream. If the error was generated by the client, the status is\n\t// returned directly; otherwise, io.EOF is returned and the status of\n\t// the stream may be discovered using RecvMsg.\n\t//\n\t// SendMsg blocks until:\n\t//   - There is sufficient flow control to schedule m with the transport, or\n\t//   - The stream is done, or\n\t//   - The stream breaks.\n\t//\n\t// SendMsg does not wait until the message is received by the server. An\n\t// untimely stream closure may result in lost messages. To ensure delivery,\n\t// users should ensure the RPC completed successfully using RecvMsg.\n\t//\n\t// It is safe to have a goroutine calling SendMsg and another goroutine\n\t// calling RecvMsg on the same stream at the same time, but it is not safe\n\t// to call SendMsg on the same stream in different goroutines. It is also\n\t// not safe to call CloseSend concurrently with SendMsg.\n\tSendMsg(m interface{}) error\n\t// RecvMsg blocks until it receives a message into m or the stream is\n\t// done. It returns io.EOF when the stream completes successfully. On\n\t// any other error, the stream is aborted and the error contains the RPC\n\t// status.\n\t//\n\t// It is safe to have a goroutine calling SendMsg and another goroutine\n\t// calling RecvMsg on the same stream at the same time, but it is not\n\t// safe to call RecvMsg on the same stream in different goroutines.\n\tRecvMsg(m interface{}) error\n}\n\n// NewStream creates a new Stream for the client side. This is typically\n// called by generated code. ctx is used for the lifetime of the stream.\n//\n// To ensure resources are not leaked due to the stream returned, one of the following\n// actions must be performed:\n//\n//      1. Call Close on the ClientConn.\n//      2. Cancel the context provided.\n//      3. Call RecvMsg until a non-nil error is returned. A protobuf-generated\n//         client-streaming RPC, for instance, might use the helper function\n//         CloseAndRecv (note that CloseSend does not Recv, therefore is not\n//         guaranteed to release all resources).\n//      4. Receive a non-nil, non-io.EOF error from Header or SendMsg.\n//\n// If none of the above happen, a goroutine and a context will be leaked, and grpc\n// will not call the optionally-configured stats handler with a stats.End message.\nfunc (cc *ClientConn) NewStream(ctx context.Context, desc *StreamDesc, method string, opts ...CallOption) (ClientStream, error) {\n\t// allow interceptor to see all applicable call options, which means those\n\t// configured as defaults from dial option as well as per-call options\n\topts = combine(cc.dopts.callOptions, opts)\n\n\tif cc.dopts.streamInt != nil {\n\t\treturn cc.dopts.streamInt(ctx, desc, cc, method, newClientStream, opts...)\n\t}\n\treturn newClientStream(ctx, desc, cc, method, opts...)\n}\n\n// NewClientStream is a wrapper for ClientConn.NewStream.\nfunc NewClientStream(ctx context.Context, desc *StreamDesc, cc *ClientConn, method string, opts ...CallOption) (ClientStream, error) {\n\treturn cc.NewStream(ctx, desc, method, opts...)\n}\n\nfunc newClientStream(ctx context.Context, desc *StreamDesc, cc *ClientConn, method string, opts ...CallOption) (_ ClientStream, err error) {\n\tif channelz.IsOn() {\n\t\tcc.incrCallsStarted()\n\t\tdefer func() {\n\t\t\tif err != nil {\n\t\t\t\tcc.incrCallsFailed()\n\t\t\t}\n\t\t}()\n\t}\n\tc := defaultCallInfo()\n\t// Provide an opportunity for the first RPC to see the first service config\n\t// provided by the resolver.\n\tif err := cc.waitForResolvedAddrs(ctx); err != nil {\n\t\treturn nil, err\n\t}\n\tmc := cc.GetMethodConfig(method)\n\tif mc.WaitForReady != nil {\n\t\tc.failFast = !*mc.WaitForReady\n\t}\n\n\t// Possible context leak:\n\t// The cancel function for the child context we create will only be called\n\t// when RecvMsg returns a non-nil error, if the ClientConn is closed, or if\n\t// an error is generated by SendMsg.\n\t// https://github.com/grpc/grpc-go/issues/1818.\n\tvar cancel context.CancelFunc\n\tif mc.Timeout != nil && *mc.Timeout >= 0 {\n\t\tctx, cancel = context.WithTimeout(ctx, *mc.Timeout)\n\t} else {\n\t\tctx, cancel = context.WithCancel(ctx)\n\t}\n\tdefer func() {\n\t\tif err != nil {\n\t\t\tcancel()\n\t\t}\n\t}()\n\n\tfor _, o := range opts {\n\t\tif err := o.before(c); err != nil {\n\t\t\treturn nil, toRPCErr(err)\n\t\t}\n\t}\n\tc.maxSendMessageSize = getMaxSize(mc.MaxReqSize, c.maxSendMessageSize, defaultClientMaxSendMessageSize)\n\tc.maxReceiveMessageSize = getMaxSize(mc.MaxRespSize, c.maxReceiveMessageSize, defaultClientMaxReceiveMessageSize)\n\tif err := setCallInfoCodec(c); err != nil {\n\t\treturn nil, err\n\t}\n\n\tcallHdr := &transport.CallHdr{\n\t\tHost:           cc.authority,\n\t\tMethod:         method,\n\t\tContentSubtype: c.contentSubtype,\n\t}\n\n\t// Set our outgoing compression according to the UseCompressor CallOption, if\n\t// set.  In that case, also find the compressor from the encoding package.\n\t// Otherwise, use the compressor configured by the WithCompressor DialOption,\n\t// if set.\n\tvar cp Compressor\n\tvar comp encoding.Compressor\n\tif ct := c.compressorType; ct != \"\" {\n\t\tcallHdr.SendCompress = ct\n\t\tif ct != encoding.Identity {\n\t\t\tcomp = encoding.GetCompressor(ct)\n\t\t\tif comp == nil {\n\t\t\t\treturn nil, status.Errorf(codes.Internal, \"grpc: Compressor is not installed for requested grpc-encoding %q\", ct)\n\t\t\t}\n\t\t}\n\t} else if cc.dopts.cp != nil {\n\t\tcallHdr.SendCompress = cc.dopts.cp.Type()\n\t\tcp = cc.dopts.cp\n\t}\n\tif c.creds != nil {\n\t\tcallHdr.Creds = c.creds\n\t}\n\tvar trInfo *traceInfo\n\tif EnableTracing {\n\t\ttrInfo = &traceInfo{\n\t\t\ttr: trace.New(\"grpc.Sent.\"+methodFamily(method), method),\n\t\t\tfirstLine: firstLine{\n\t\t\t\tclient: true,\n\t\t\t},\n\t\t}\n\t\tif deadline, ok := ctx.Deadline(); ok {\n\t\t\ttrInfo.firstLine.deadline = time.Until(deadline)\n\t\t}\n\t\ttrInfo.tr.LazyLog(&trInfo.firstLine, false)\n\t\tctx = trace.NewContext(ctx, trInfo.tr)\n\t}\n\tctx = newContextWithRPCInfo(ctx, c.failFast, c.codec, cp, comp)\n\tsh := cc.dopts.copts.StatsHandler\n\tvar beginTime time.Time\n\tif sh != nil {\n\t\tctx = sh.TagRPC(ctx, &stats.RPCTagInfo{FullMethodName: method, FailFast: c.failFast})\n\t\tbeginTime = time.Now()\n\t\tbegin := &stats.Begin{\n\t\t\tClient:    true,\n\t\t\tBeginTime: beginTime,\n\t\t\tFailFast:  c.failFast,\n\t\t}\n\t\tsh.HandleRPC(ctx, begin)\n\t}\n\n\tcs := &clientStream{\n\t\tcallHdr:      callHdr,\n\t\tctx:          ctx,\n\t\tmethodConfig: &mc,\n\t\topts:         opts,\n\t\tcallInfo:     c,\n\t\tcc:           cc,\n\t\tdesc:         desc,\n\t\tcodec:        c.codec,\n\t\tcp:           cp,\n\t\tcomp:         comp,\n\t\tcancel:       cancel,\n\t\tbeginTime:    beginTime,\n\t\tfirstAttempt: true,\n\t}\n\tif !cc.dopts.disableRetry {\n\t\tcs.retryThrottler = cc.retryThrottler.Load().(*retryThrottler)\n\t}\n\tcs.binlog = binarylog.GetMethodLogger(method)\n\n\tcs.callInfo.stream = cs\n\t// Only this initial attempt has stats/tracing.\n\t// TODO(dfawley): move to newAttempt when per-attempt stats are implemented.\n\tif err := cs.newAttemptLocked(sh, trInfo); err != nil {\n\t\tcs.finish(err)\n\t\treturn nil, err\n\t}\n\n\top := func(a *csAttempt) error { return a.newStream() }\n\tif err := cs.withRetry(op, func() { cs.bufferForRetryLocked(0, op) }); err != nil {\n\t\tcs.finish(err)\n\t\treturn nil, err\n\t}\n\n\tif cs.binlog != nil {\n\t\tmd, _ := metadata.FromOutgoingContext(ctx)\n\t\tlogEntry := &binarylog.ClientHeader{\n\t\t\tOnClientSide: true,\n\t\t\tHeader:       md,\n\t\t\tMethodName:   method,\n\t\t\tAuthority:    cs.cc.authority,\n\t\t}\n\t\tif deadline, ok := ctx.Deadline(); ok {\n\t\t\tlogEntry.Timeout = time.Until(deadline)\n\t\t\tif logEntry.Timeout < 0 {\n\t\t\t\tlogEntry.Timeout = 0\n\t\t\t}\n\t\t}\n\t\tcs.binlog.Log(logEntry)\n\t}\n\n\tif desc != unaryStreamDesc {\n\t\t// Listen on cc and stream contexts to cleanup when the user closes the\n\t\t// ClientConn or cancels the stream context.  In all other cases, an error\n\t\t// should already be injected into the recv buffer by the transport, which\n\t\t// the client will eventually receive, and then we will cancel the stream's\n\t\t// context in clientStream.finish.\n\t\tgo func() {\n\t\t\tselect {\n\t\t\tcase <-cc.ctx.Done():\n\t\t\t\tcs.finish(ErrClientConnClosing)\n\t\t\tcase <-ctx.Done():\n\t\t\t\tcs.finish(toRPCErr(ctx.Err()))\n\t\t\t}\n\t\t}()\n\t}\n\treturn cs, nil\n}\n\nfunc (cs *clientStream) newAttemptLocked(sh stats.Handler, trInfo *traceInfo) error {\n\tcs.attempt = &csAttempt{\n\t\tcs:           cs,\n\t\tdc:           cs.cc.dopts.dc,\n\t\tstatsHandler: sh,\n\t\ttrInfo:       trInfo,\n\t}\n\n\tif err := cs.ctx.Err(); err != nil {\n\t\treturn toRPCErr(err)\n\t}\n\tt, done, err := cs.cc.getTransport(cs.ctx, cs.callInfo.failFast, cs.callHdr.Method)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif trInfo != nil {\n\t\ttrInfo.firstLine.SetRemoteAddr(t.RemoteAddr())\n\t}\n\tcs.attempt.t = t\n\tcs.attempt.done = done\n\treturn nil\n}\n\nfunc (a *csAttempt) newStream() error {\n\tcs := a.cs\n\tcs.callHdr.PreviousAttempts = cs.numRetries\n\ts, err := a.t.NewStream(cs.ctx, cs.callHdr)\n\tif err != nil {\n\t\treturn toRPCErr(err)\n\t}\n\tcs.attempt.s = s\n\tcs.attempt.p = &parser{r: s}\n\treturn nil\n}\n\n// clientStream implements a client side Stream.\ntype clientStream struct {\n\tcallHdr  *transport.CallHdr\n\topts     []CallOption\n\tcallInfo *callInfo\n\tcc       *ClientConn\n\tdesc     *StreamDesc\n\n\tcodec baseCodec\n\tcp    Compressor\n\tcomp  encoding.Compressor\n\n\tcancel context.CancelFunc // cancels all attempts\n\n\tsentLast  bool // sent an end stream\n\tbeginTime time.Time\n\n\tmethodConfig *MethodConfig\n\n\tctx context.Context // the application's context, wrapped by stats/tracing\n\n\tretryThrottler *retryThrottler // The throttler active when the RPC began.\n\n\tbinlog *binarylog.MethodLogger // Binary logger, can be nil.\n\t// serverHeaderBinlogged is a boolean for whether server header has been\n\t// logged. Server header will be logged when the first time one of those\n\t// happens: stream.Header(), stream.Recv().\n\t//\n\t// It's only read and used by Recv() and Header(), so it doesn't need to be\n\t// synchronized.\n\tserverHeaderBinlogged bool\n\n\tmu                      sync.Mutex\n\tfirstAttempt            bool       // if true, transparent retry is valid\n\tnumRetries              int        // exclusive of transparent retry attempt(s)\n\tnumRetriesSincePushback int        // retries since pushback; to reset backoff\n\tfinished                bool       // TODO: replace with atomic cmpxchg or sync.Once?\n\tattempt                 *csAttempt // the active client stream attempt\n\t// TODO(hedging): hedging will have multiple attempts simultaneously.\n\tcommitted  bool                       // active attempt committed for retry?\n\tbuffer     []func(a *csAttempt) error // operations to replay on retry\n\tbufferSize int                        // current size of buffer\n}\n\n// csAttempt implements a single transport stream attempt within a\n// clientStream.\ntype csAttempt struct {\n\tcs   *clientStream\n\tt    transport.ClientTransport\n\ts    *transport.Stream\n\tp    *parser\n\tdone func(balancer.DoneInfo)\n\n\tfinished  bool\n\tdc        Decompressor\n\tdecomp    encoding.Compressor\n\tdecompSet bool\n\n\tmu sync.Mutex // guards trInfo.tr\n\t// trInfo may be nil (if EnableTracing is false).\n\t// trInfo.tr is set when created (if EnableTracing is true),\n\t// and cleared when the finish method is called.\n\ttrInfo *traceInfo\n\n\tstatsHandler stats.Handler\n}\n\nfunc (cs *clientStream) commitAttemptLocked() {\n\tcs.committed = true\n\tcs.buffer = nil\n}\n\nfunc (cs *clientStream) commitAttempt() {\n\tcs.mu.Lock()\n\tcs.commitAttemptLocked()\n\tcs.mu.Unlock()\n}\n\n// shouldRetry returns nil if the RPC should be retried; otherwise it returns\n// the error that should be returned by the operation.\nfunc (cs *clientStream) shouldRetry(err error) error {\n\tif cs.attempt.s == nil && !cs.callInfo.failFast {\n\t\t// In the event of any error from NewStream (attempt.s == nil), we\n\t\t// never attempted to write anything to the wire, so we can retry\n\t\t// indefinitely for non-fail-fast RPCs.\n\t\treturn nil\n\t}\n\tif cs.finished || cs.committed {\n\t\t// RPC is finished or committed; cannot retry.\n\t\treturn err\n\t}\n\t// Wait for the trailers.\n\tif cs.attempt.s != nil {\n\t\t<-cs.attempt.s.Done()\n\t}\n\tif cs.firstAttempt && !cs.callInfo.failFast && (cs.attempt.s == nil || cs.attempt.s.Unprocessed()) {\n\t\t// First attempt, wait-for-ready, stream unprocessed: transparently retry.\n\t\tcs.firstAttempt = false\n\t\treturn nil\n\t}\n\tcs.firstAttempt = false\n\tif cs.cc.dopts.disableRetry {\n\t\treturn err\n\t}\n\n\tpushback := 0\n\thasPushback := false\n\tif cs.attempt.s != nil {\n\t\tif to, toErr := cs.attempt.s.TrailersOnly(); toErr != nil || !to {\n\t\t\treturn err\n\t\t}\n\n\t\t// TODO(retry): Move down if the spec changes to not check server pushback\n\t\t// before considering this a failure for throttling.\n\t\tsps := cs.attempt.s.Trailer()[\"grpc-retry-pushback-ms\"]\n\t\tif len(sps) == 1 {\n\t\t\tvar e error\n\t\t\tif pushback, e = strconv.Atoi(sps[0]); e != nil || pushback < 0 {\n\t\t\t\tgrpclog.Infof(\"Server retry pushback specified to abort (%q).\", sps[0])\n\t\t\t\tcs.retryThrottler.throttle() // This counts as a failure for throttling.\n\t\t\t\treturn err\n\t\t\t}\n\t\t\thasPushback = true\n\t\t} else if len(sps) > 1 {\n\t\t\tgrpclog.Warningf(\"Server retry pushback specified multiple values (%q); not retrying.\", sps)\n\t\t\tcs.retryThrottler.throttle() // This counts as a failure for throttling.\n\t\t\treturn err\n\t\t}\n\t}\n\n\tvar code codes.Code\n\tif cs.attempt.s != nil {\n\t\tcode = cs.attempt.s.Status().Code()\n\t} else {\n\t\tcode = status.Convert(err).Code()\n\t}\n\n\trp := cs.methodConfig.retryPolicy\n\tif rp == nil || !rp.retryableStatusCodes[code] {\n\t\treturn err\n\t}\n\n\t// Note: the ordering here is important; we count this as a failure\n\t// only if the code matched a retryable code.\n\tif cs.retryThrottler.throttle() {\n\t\treturn err\n\t}\n\tif cs.numRetries+1 >= rp.maxAttempts {\n\t\treturn err\n\t}\n\n\tvar dur time.Duration\n\tif hasPushback {\n\t\tdur = time.Millisecond * time.Duration(pushback)\n\t\tcs.numRetriesSincePushback = 0\n\t} else {\n\t\tfact := math.Pow(rp.backoffMultiplier, float64(cs.numRetriesSincePushback))\n\t\tcur := float64(rp.initialBackoff) * fact\n\t\tif max := float64(rp.maxBackoff); cur > max {\n\t\t\tcur = max\n\t\t}\n\t\tdur = time.Duration(grpcrand.Int63n(int64(cur)))\n\t\tcs.numRetriesSincePushback++\n\t}\n\n\t// TODO(dfawley): we could eagerly fail here if dur puts us past the\n\t// deadline, but unsure if it is worth doing.\n\tt := time.NewTimer(dur)\n\tselect {\n\tcase <-t.C:\n\t\tcs.numRetries++\n\t\treturn nil\n\tcase <-cs.ctx.Done():\n\t\tt.Stop()\n\t\treturn status.FromContextError(cs.ctx.Err()).Err()\n\t}\n}\n\n// Returns nil if a retry was performed and succeeded; error otherwise.\nfunc (cs *clientStream) retryLocked(lastErr error) error {\n\tfor {\n\t\tcs.attempt.finish(lastErr)\n\t\tif err := cs.shouldRetry(lastErr); err != nil {\n\t\t\tcs.commitAttemptLocked()\n\t\t\treturn err\n\t\t}\n\t\tif err := cs.newAttemptLocked(nil, nil); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif lastErr = cs.replayBufferLocked(); lastErr == nil {\n\t\t\treturn nil\n\t\t}\n\t}\n}\n\nfunc (cs *clientStream) Context() context.Context {\n\tcs.commitAttempt()\n\t// No need to lock before using attempt, since we know it is committed and\n\t// cannot change.\n\treturn cs.attempt.s.Context()\n}\n\nfunc (cs *clientStream) withRetry(op func(a *csAttempt) error, onSuccess func()) error {\n\tcs.mu.Lock()\n\tfor {\n\t\tif cs.committed {\n\t\t\tcs.mu.Unlock()\n\t\t\treturn op(cs.attempt)\n\t\t}\n\t\ta := cs.attempt\n\t\tcs.mu.Unlock()\n\t\terr := op(a)\n\t\tcs.mu.Lock()\n\t\tif a != cs.attempt {\n\t\t\t// We started another attempt already.\n\t\t\tcontinue\n\t\t}\n\t\tif err == io.EOF {\n\t\t\t<-a.s.Done()\n\t\t}\n\t\tif err == nil || (err == io.EOF && a.s.Status().Code() == codes.OK) {\n\t\t\tonSuccess()\n\t\t\tcs.mu.Unlock()\n\t\t\treturn err\n\t\t}\n\t\tif err := cs.retryLocked(err); err != nil {\n\t\t\tcs.mu.Unlock()\n\t\t\treturn err\n\t\t}\n\t}\n}\n\nfunc (cs *clientStream) Header() (metadata.MD, error) {\n\tvar m metadata.MD\n\terr := cs.withRetry(func(a *csAttempt) error {\n\t\tvar err error\n\t\tm, err = a.s.Header()\n\t\treturn toRPCErr(err)\n\t}, cs.commitAttemptLocked)\n\tif err != nil {\n\t\tcs.finish(err)\n\t\treturn nil, err\n\t}\n\tif cs.binlog != nil && !cs.serverHeaderBinlogged {\n\t\t// Only log if binary log is on and header has not been logged.\n\t\tlogEntry := &binarylog.ServerHeader{\n\t\t\tOnClientSide: true,\n\t\t\tHeader:       m,\n\t\t\tPeerAddr:     nil,\n\t\t}\n\t\tif peer, ok := peer.FromContext(cs.Context()); ok {\n\t\t\tlogEntry.PeerAddr = peer.Addr\n\t\t}\n\t\tcs.binlog.Log(logEntry)\n\t\tcs.serverHeaderBinlogged = true\n\t}\n\treturn m, err\n}\n\nfunc (cs *clientStream) Trailer() metadata.MD {\n\t// On RPC failure, we never need to retry, because usage requires that\n\t// RecvMsg() returned a non-nil error before calling this function is valid.\n\t// We would have retried earlier if necessary.\n\t//\n\t// Commit the attempt anyway, just in case users are not following those\n\t// directions -- it will prevent races and should not meaningfully impact\n\t// performance.\n\tcs.commitAttempt()\n\tif cs.attempt.s == nil {\n\t\treturn nil\n\t}\n\treturn cs.attempt.s.Trailer()\n}\n\nfunc (cs *clientStream) replayBufferLocked() error {\n\ta := cs.attempt\n\tfor _, f := range cs.buffer {\n\t\tif err := f(a); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (cs *clientStream) bufferForRetryLocked(sz int, op func(a *csAttempt) error) {\n\t// Note: we still will buffer if retry is disabled (for transparent retries).\n\tif cs.committed {\n\t\treturn\n\t}\n\tcs.bufferSize += sz\n\tif cs.bufferSize > cs.callInfo.maxRetryRPCBufferSize {\n\t\tcs.commitAttemptLocked()\n\t\treturn\n\t}\n\tcs.buffer = append(cs.buffer, op)\n}\n\nfunc (cs *clientStream) SendMsg(m interface{}) (err error) {\n\tdefer func() {\n\t\tif err != nil && err != io.EOF {\n\t\t\t// Call finish on the client stream for errors generated by this SendMsg\n\t\t\t// call, as these indicate problems created by this client.  (Transport\n\t\t\t// errors are converted to an io.EOF error in csAttempt.sendMsg; the real\n\t\t\t// error will be returned from RecvMsg eventually in that case, or be\n\t\t\t// retried.)\n\t\t\tcs.finish(err)\n\t\t}\n\t}()\n\tif cs.sentLast {\n\t\treturn status.Errorf(codes.Internal, \"SendMsg called after CloseSend\")\n\t}\n\tif !cs.desc.ClientStreams {\n\t\tcs.sentLast = true\n\t}\n\n\t// load hdr, payload, data\n\thdr, payload, data, err := prepareMsg(m, cs.codec, cs.cp, cs.comp)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// TODO(dfawley): should we be checking len(data) instead?\n\tif len(payload) > *cs.callInfo.maxSendMessageSize {\n\t\treturn status.Errorf(codes.ResourceExhausted, \"trying to send message larger than max (%d vs. %d)\", len(payload), *cs.callInfo.maxSendMessageSize)\n\t}\n\tmsgBytes := data // Store the pointer before setting to nil. For binary logging.\n\top := func(a *csAttempt) error {\n\t\terr := a.sendMsg(m, hdr, payload, data)\n\t\t// nil out the message and uncomp when replaying; they are only needed for\n\t\t// stats which is disabled for subsequent attempts.\n\t\tm, data = nil, nil\n\t\treturn err\n\t}\n\terr = cs.withRetry(op, func() { cs.bufferForRetryLocked(len(hdr)+len(payload), op) })\n\tif cs.binlog != nil && err == nil {\n\t\tcs.binlog.Log(&binarylog.ClientMessage{\n\t\t\tOnClientSide: true,\n\t\t\tMessage:      msgBytes,\n\t\t})\n\t}\n\treturn\n}\n\nfunc (cs *clientStream) RecvMsg(m interface{}) error {\n\tif cs.binlog != nil && !cs.serverHeaderBinlogged {\n\t\t// Call Header() to binary log header if it's not already logged.\n\t\tcs.Header()\n\t}\n\tvar recvInfo *payloadInfo\n\tif cs.binlog != nil {\n\t\trecvInfo = &payloadInfo{}\n\t}\n\terr := cs.withRetry(func(a *csAttempt) error {\n\t\treturn a.recvMsg(m, recvInfo)\n\t}, cs.commitAttemptLocked)\n\tif cs.binlog != nil && err == nil {\n\t\tcs.binlog.Log(&binarylog.ServerMessage{\n\t\t\tOnClientSide: true,\n\t\t\tMessage:      recvInfo.uncompressedBytes,\n\t\t})\n\t}\n\tif err != nil || !cs.desc.ServerStreams {\n\t\t// err != nil or non-server-streaming indicates end of stream.\n\t\tcs.finish(err)\n\n\t\tif cs.binlog != nil {\n\t\t\t// finish will not log Trailer. Log Trailer here.\n\t\t\tlogEntry := &binarylog.ServerTrailer{\n\t\t\t\tOnClientSide: true,\n\t\t\t\tTrailer:      cs.Trailer(),\n\t\t\t\tErr:          err,\n\t\t\t}\n\t\t\tif logEntry.Err == io.EOF {\n\t\t\t\tlogEntry.Err = nil\n\t\t\t}\n\t\t\tif peer, ok := peer.FromContext(cs.Context()); ok {\n\t\t\t\tlogEntry.PeerAddr = peer.Addr\n\t\t\t}\n\t\t\tcs.binlog.Log(logEntry)\n\t\t}\n\t}\n\treturn err\n}\n\nfunc (cs *clientStream) CloseSend() error {\n\tif cs.sentLast {\n\t\t// TODO: return an error and finish the stream instead, due to API misuse?\n\t\treturn nil\n\t}\n\tcs.sentLast = true\n\top := func(a *csAttempt) error {\n\t\ta.t.Write(a.s, nil, nil, &transport.Options{Last: true})\n\t\t// Always return nil; io.EOF is the only error that might make sense\n\t\t// instead, but there is no need to signal the client to call RecvMsg\n\t\t// as the only use left for the stream after CloseSend is to call\n\t\t// RecvMsg.  This also matches historical behavior.\n\t\treturn nil\n\t}\n\tcs.withRetry(op, func() { cs.bufferForRetryLocked(0, op) })\n\tif cs.binlog != nil {\n\t\tcs.binlog.Log(&binarylog.ClientHalfClose{\n\t\t\tOnClientSide: true,\n\t\t})\n\t}\n\t// We never returned an error here for reasons.\n\treturn nil\n}\n\nfunc (cs *clientStream) finish(err error) {\n\tif err == io.EOF {\n\t\t// Ending a stream with EOF indicates a success.\n\t\terr = nil\n\t}\n\tcs.mu.Lock()\n\tif cs.finished {\n\t\tcs.mu.Unlock()\n\t\treturn\n\t}\n\tcs.finished = true\n\tcs.commitAttemptLocked()\n\tcs.mu.Unlock()\n\t// For binary logging. only log cancel in finish (could be caused by RPC ctx\n\t// canceled or ClientConn closed). Trailer will be logged in RecvMsg.\n\t//\n\t// Only one of cancel or trailer needs to be logged. In the cases where\n\t// users don't call RecvMsg, users must have already canceled the RPC.\n\tif cs.binlog != nil && status.Code(err) == codes.Canceled {\n\t\tcs.binlog.Log(&binarylog.Cancel{\n\t\t\tOnClientSide: true,\n\t\t})\n\t}\n\tif err == nil {\n\t\tcs.retryThrottler.successfulRPC()\n\t}\n\tif channelz.IsOn() {\n\t\tif err != nil {\n\t\t\tcs.cc.incrCallsFailed()\n\t\t} else {\n\t\t\tcs.cc.incrCallsSucceeded()\n\t\t}\n\t}\n\tif cs.attempt != nil {\n\t\tcs.attempt.finish(err)\n\t}\n\t// after functions all rely upon having a stream.\n\tif cs.attempt.s != nil {\n\t\tfor _, o := range cs.opts {\n\t\t\to.after(cs.callInfo)\n\t\t}\n\t}\n\tcs.cancel()\n}\n\nfunc (a *csAttempt) sendMsg(m interface{}, hdr, payld, data []byte) error {\n\tcs := a.cs\n\tif a.trInfo != nil {\n\t\ta.mu.Lock()\n\t\tif a.trInfo.tr != nil {\n\t\t\ta.trInfo.tr.LazyLog(&payload{sent: true, msg: m}, true)\n\t\t}\n\t\ta.mu.Unlock()\n\t}\n\tif err := a.t.Write(a.s, hdr, payld, &transport.Options{Last: !cs.desc.ClientStreams}); err != nil {\n\t\tif !cs.desc.ClientStreams {\n\t\t\t// For non-client-streaming RPCs, we return nil instead of EOF on error\n\t\t\t// because the generated code requires it.  finish is not called; RecvMsg()\n\t\t\t// will call it with the stream's status independently.\n\t\t\treturn nil\n\t\t}\n\t\treturn io.EOF\n\t}\n\tif a.statsHandler != nil {\n\t\ta.statsHandler.HandleRPC(cs.ctx, outPayload(true, m, data, payld, time.Now()))\n\t}\n\tif channelz.IsOn() {\n\t\ta.t.IncrMsgSent()\n\t}\n\treturn nil\n}\n\nfunc (a *csAttempt) recvMsg(m interface{}, payInfo *payloadInfo) (err error) {\n\tcs := a.cs\n\tif a.statsHandler != nil && payInfo == nil {\n\t\tpayInfo = &payloadInfo{}\n\t}\n\n\tif !a.decompSet {\n\t\t// Block until we receive headers containing received message encoding.\n\t\tif ct := a.s.RecvCompress(); ct != \"\" && ct != encoding.Identity {\n\t\t\tif a.dc == nil || a.dc.Type() != ct {\n\t\t\t\t// No configured decompressor, or it does not match the incoming\n\t\t\t\t// message encoding; attempt to find a registered compressor that does.\n\t\t\t\ta.dc = nil\n\t\t\t\ta.decomp = encoding.GetCompressor(ct)\n\t\t\t}\n\t\t} else {\n\t\t\t// No compression is used; disable our decompressor.\n\t\t\ta.dc = nil\n\t\t}\n\t\t// Only initialize this state once per stream.\n\t\ta.decompSet = true\n\t}\n\terr = recv(a.p, cs.codec, a.s, a.dc, m, *cs.callInfo.maxReceiveMessageSize, payInfo, a.decomp)\n\tif err != nil {\n\t\tif err == io.EOF {\n\t\t\tif statusErr := a.s.Status().Err(); statusErr != nil {\n\t\t\t\treturn statusErr\n\t\t\t}\n\t\t\treturn io.EOF // indicates successful end of stream.\n\t\t}\n\t\treturn toRPCErr(err)\n\t}\n\tif a.trInfo != nil {\n\t\ta.mu.Lock()\n\t\tif a.trInfo.tr != nil {\n\t\t\ta.trInfo.tr.LazyLog(&payload{sent: false, msg: m}, true)\n\t\t}\n\t\ta.mu.Unlock()\n\t}\n\tif a.statsHandler != nil {\n\t\ta.statsHandler.HandleRPC(cs.ctx, &stats.InPayload{\n\t\t\tClient:   true,\n\t\t\tRecvTime: time.Now(),\n\t\t\tPayload:  m,\n\t\t\t// TODO truncate large payload.\n\t\t\tData:       payInfo.uncompressedBytes,\n\t\t\tWireLength: payInfo.wireLength,\n\t\t\tLength:     len(payInfo.uncompressedBytes),\n\t\t})\n\t}\n\tif channelz.IsOn() {\n\t\ta.t.IncrMsgRecv()\n\t}\n\tif cs.desc.ServerStreams {\n\t\t// Subsequent messages should be received by subsequent RecvMsg calls.\n\t\treturn nil\n\t}\n\t// Special handling for non-server-stream rpcs.\n\t// This recv expects EOF or errors, so we don't collect inPayload.\n\terr = recv(a.p, cs.codec, a.s, a.dc, m, *cs.callInfo.maxReceiveMessageSize, nil, a.decomp)\n\tif err == nil {\n\t\treturn toRPCErr(errors.New(\"grpc: client streaming protocol violation: get <nil>, want <EOF>\"))\n\t}\n\tif err == io.EOF {\n\t\treturn a.s.Status().Err() // non-server streaming Recv returns nil on success\n\t}\n\treturn toRPCErr(err)\n}\n\nfunc (a *csAttempt) finish(err error) {\n\ta.mu.Lock()\n\tif a.finished {\n\t\ta.mu.Unlock()\n\t\treturn\n\t}\n\ta.finished = true\n\tif err == io.EOF {\n\t\t// Ending a stream with EOF indicates a success.\n\t\terr = nil\n\t}\n\tvar tr metadata.MD\n\tif a.s != nil {\n\t\ta.t.CloseStream(a.s, err)\n\t\ttr = a.s.Trailer()\n\t}\n\n\tif a.done != nil {\n\t\tbr := false\n\t\tif a.s != nil {\n\t\t\tbr = a.s.BytesReceived()\n\t\t}\n\t\ta.done(balancer.DoneInfo{\n\t\t\tErr:           err,\n\t\t\tTrailer:       tr,\n\t\t\tBytesSent:     a.s != nil,\n\t\t\tBytesReceived: br,\n\t\t\tServerLoad:    balancerload.Parse(tr),\n\t\t})\n\t}\n\tif a.statsHandler != nil {\n\t\tend := &stats.End{\n\t\t\tClient:    true,\n\t\t\tBeginTime: a.cs.beginTime,\n\t\t\tEndTime:   time.Now(),\n\t\t\tTrailer:   tr,\n\t\t\tError:     err,\n\t\t}\n\t\ta.statsHandler.HandleRPC(a.cs.ctx, end)\n\t}\n\tif a.trInfo != nil && a.trInfo.tr != nil {\n\t\tif err == nil {\n\t\t\ta.trInfo.tr.LazyPrintf(\"RPC: [OK]\")\n\t\t} else {\n\t\t\ta.trInfo.tr.LazyPrintf(\"RPC: [%v]\", err)\n\t\t\ta.trInfo.tr.SetError()\n\t\t}\n\t\ta.trInfo.tr.Finish()\n\t\ta.trInfo.tr = nil\n\t}\n\ta.mu.Unlock()\n}\n\nfunc (ac *addrConn) newClientStream(ctx context.Context, desc *StreamDesc, method string, t transport.ClientTransport, opts ...CallOption) (_ ClientStream, err error) {\n\tac.mu.Lock()\n\tif ac.transport != t {\n\t\tac.mu.Unlock()\n\t\treturn nil, status.Error(codes.Canceled, \"the provided transport is no longer valid to use\")\n\t}\n\t// transition to CONNECTING state when an attempt starts\n\tif ac.state != connectivity.Connecting {\n\t\tac.updateConnectivityState(connectivity.Connecting)\n\t\tac.cc.handleSubConnStateChange(ac.acbw, ac.state)\n\t}\n\tac.mu.Unlock()\n\n\tif t == nil {\n\t\t// TODO: return RPC error here?\n\t\treturn nil, errors.New(\"transport provided is nil\")\n\t}\n\t// defaultCallInfo contains unnecessary info(i.e. failfast, maxRetryRPCBufferSize), so we just initialize an empty struct.\n\tc := &callInfo{}\n\n\tfor _, o := range opts {\n\t\tif err := o.before(c); err != nil {\n\t\t\treturn nil, toRPCErr(err)\n\t\t}\n\t}\n\tc.maxReceiveMessageSize = getMaxSize(nil, c.maxReceiveMessageSize, defaultClientMaxReceiveMessageSize)\n\tc.maxSendMessageSize = getMaxSize(nil, c.maxSendMessageSize, defaultServerMaxSendMessageSize)\n\n\t// Possible context leak:\n\t// The cancel function for the child context we create will only be called\n\t// when RecvMsg returns a non-nil error, if the ClientConn is closed, or if\n\t// an error is generated by SendMsg.\n\t// https://github.com/grpc/grpc-go/issues/1818.\n\tctx, cancel := context.WithCancel(ctx)\n\tdefer func() {\n\t\tif err != nil {\n\t\t\tcancel()\n\t\t}\n\t}()\n\n\tif err := setCallInfoCodec(c); err != nil {\n\t\treturn nil, err\n\t}\n\n\tcallHdr := &transport.CallHdr{\n\t\tHost:           ac.cc.authority,\n\t\tMethod:         method,\n\t\tContentSubtype: c.contentSubtype,\n\t}\n\n\t// Set our outgoing compression according to the UseCompressor CallOption, if\n\t// set.  In that case, also find the compressor from the encoding package.\n\t// Otherwise, use the compressor configured by the WithCompressor DialOption,\n\t// if set.\n\tvar cp Compressor\n\tvar comp encoding.Compressor\n\tif ct := c.compressorType; ct != \"\" {\n\t\tcallHdr.SendCompress = ct\n\t\tif ct != encoding.Identity {\n\t\t\tcomp = encoding.GetCompressor(ct)\n\t\t\tif comp == nil {\n\t\t\t\treturn nil, status.Errorf(codes.Internal, \"grpc: Compressor is not installed for requested grpc-encoding %q\", ct)\n\t\t\t}\n\t\t}\n\t} else if ac.cc.dopts.cp != nil {\n\t\tcallHdr.SendCompress = ac.cc.dopts.cp.Type()\n\t\tcp = ac.cc.dopts.cp\n\t}\n\tif c.creds != nil {\n\t\tcallHdr.Creds = c.creds\n\t}\n\n\tas := &addrConnStream{\n\t\tcallHdr:  callHdr,\n\t\tac:       ac,\n\t\tctx:      ctx,\n\t\tcancel:   cancel,\n\t\topts:     opts,\n\t\tcallInfo: c,\n\t\tdesc:     desc,\n\t\tcodec:    c.codec,\n\t\tcp:       cp,\n\t\tcomp:     comp,\n\t\tt:        t,\n\t}\n\n\tas.callInfo.stream = as\n\ts, err := as.t.NewStream(as.ctx, as.callHdr)\n\tif err != nil {\n\t\terr = toRPCErr(err)\n\t\treturn nil, err\n\t}\n\tas.s = s\n\tas.p = &parser{r: s}\n\tac.incrCallsStarted()\n\tif desc != unaryStreamDesc {\n\t\t// Listen on cc and stream contexts to cleanup when the user closes the\n\t\t// ClientConn or cancels the stream context.  In all other cases, an error\n\t\t// should already be injected into the recv buffer by the transport, which\n\t\t// the client will eventually receive, and then we will cancel the stream's\n\t\t// context in clientStream.finish.\n\t\tgo func() {\n\t\t\tselect {\n\t\t\tcase <-ac.ctx.Done():\n\t\t\t\tas.finish(status.Error(codes.Canceled, \"grpc: the SubConn is closing\"))\n\t\t\tcase <-ctx.Done():\n\t\t\t\tas.finish(toRPCErr(ctx.Err()))\n\t\t\t}\n\t\t}()\n\t}\n\treturn as, nil\n}\n\ntype addrConnStream struct {\n\ts         *transport.Stream\n\tac        *addrConn\n\tcallHdr   *transport.CallHdr\n\tcancel    context.CancelFunc\n\topts      []CallOption\n\tcallInfo  *callInfo\n\tt         transport.ClientTransport\n\tctx       context.Context\n\tsentLast  bool\n\tdesc      *StreamDesc\n\tcodec     baseCodec\n\tcp        Compressor\n\tcomp      encoding.Compressor\n\tdecompSet bool\n\tdc        Decompressor\n\tdecomp    encoding.Compressor\n\tp         *parser\n\tmu        sync.Mutex\n\tfinished  bool\n}\n\nfunc (as *addrConnStream) Header() (metadata.MD, error) {\n\tm, err := as.s.Header()\n\tif err != nil {\n\t\tas.finish(toRPCErr(err))\n\t}\n\treturn m, err\n}\n\nfunc (as *addrConnStream) Trailer() metadata.MD {\n\treturn as.s.Trailer()\n}\n\nfunc (as *addrConnStream) CloseSend() error {\n\tif as.sentLast {\n\t\t// TODO: return an error and finish the stream instead, due to API misuse?\n\t\treturn nil\n\t}\n\tas.sentLast = true\n\n\tas.t.Write(as.s, nil, nil, &transport.Options{Last: true})\n\t// Always return nil; io.EOF is the only error that might make sense\n\t// instead, but there is no need to signal the client to call RecvMsg\n\t// as the only use left for the stream after CloseSend is to call\n\t// RecvMsg.  This also matches historical behavior.\n\treturn nil\n}\n\nfunc (as *addrConnStream) Context() context.Context {\n\treturn as.s.Context()\n}\n\nfunc (as *addrConnStream) SendMsg(m interface{}) (err error) {\n\tdefer func() {\n\t\tif err != nil && err != io.EOF {\n\t\t\t// Call finish on the client stream for errors generated by this SendMsg\n\t\t\t// call, as these indicate problems created by this client.  (Transport\n\t\t\t// errors are converted to an io.EOF error in csAttempt.sendMsg; the real\n\t\t\t// error will be returned from RecvMsg eventually in that case, or be\n\t\t\t// retried.)\n\t\t\tas.finish(err)\n\t\t}\n\t}()\n\tif as.sentLast {\n\t\treturn status.Errorf(codes.Internal, \"SendMsg called after CloseSend\")\n\t}\n\tif !as.desc.ClientStreams {\n\t\tas.sentLast = true\n\t}\n\n\t// load hdr, payload, data\n\thdr, payld, _, err := prepareMsg(m, as.codec, as.cp, as.comp)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// TODO(dfawley): should we be checking len(data) instead?\n\tif len(payld) > *as.callInfo.maxSendMessageSize {\n\t\treturn status.Errorf(codes.ResourceExhausted, \"trying to send message larger than max (%d vs. %d)\", len(payld), *as.callInfo.maxSendMessageSize)\n\t}\n\n\tif err := as.t.Write(as.s, hdr, payld, &transport.Options{Last: !as.desc.ClientStreams}); err != nil {\n\t\tif !as.desc.ClientStreams {\n\t\t\t// For non-client-streaming RPCs, we return nil instead of EOF on error\n\t\t\t// because the generated code requires it.  finish is not called; RecvMsg()\n\t\t\t// will call it with the stream's status independently.\n\t\t\treturn nil\n\t\t}\n\t\treturn io.EOF\n\t}\n\n\tif channelz.IsOn() {\n\t\tas.t.IncrMsgSent()\n\t}\n\treturn nil\n}\n\nfunc (as *addrConnStream) RecvMsg(m interface{}) (err error) {\n\tdefer func() {\n\t\tif err != nil || !as.desc.ServerStreams {\n\t\t\t// err != nil or non-server-streaming indicates end of stream.\n\t\t\tas.finish(err)\n\t\t}\n\t}()\n\n\tif !as.decompSet {\n\t\t// Block until we receive headers containing received message encoding.\n\t\tif ct := as.s.RecvCompress(); ct != \"\" && ct != encoding.Identity {\n\t\t\tif as.dc == nil || as.dc.Type() != ct {\n\t\t\t\t// No configured decompressor, or it does not match the incoming\n\t\t\t\t// message encoding; attempt to find a registered compressor that does.\n\t\t\t\tas.dc = nil\n\t\t\t\tas.decomp = encoding.GetCompressor(ct)\n\t\t\t}\n\t\t} else {\n\t\t\t// No compression is used; disable our decompressor.\n\t\t\tas.dc = nil\n\t\t}\n\t\t// Only initialize this state once per stream.\n\t\tas.decompSet = true\n\t}\n\terr = recv(as.p, as.codec, as.s, as.dc, m, *as.callInfo.maxReceiveMessageSize, nil, as.decomp)\n\tif err != nil {\n\t\tif err == io.EOF {\n\t\t\tif statusErr := as.s.Status().Err(); statusErr != nil {\n\t\t\t\treturn statusErr\n\t\t\t}\n\t\t\treturn io.EOF // indicates successful end of stream.\n\t\t}\n\t\treturn toRPCErr(err)\n\t}\n\n\tif channelz.IsOn() {\n\t\tas.t.IncrMsgRecv()\n\t}\n\tif as.desc.ServerStreams {\n\t\t// Subsequent messages should be received by subsequent RecvMsg calls.\n\t\treturn nil\n\t}\n\n\t// Special handling for non-server-stream rpcs.\n\t// This recv expects EOF or errors, so we don't collect inPayload.\n\terr = recv(as.p, as.codec, as.s, as.dc, m, *as.callInfo.maxReceiveMessageSize, nil, as.decomp)\n\tif err == nil {\n\t\treturn toRPCErr(errors.New(\"grpc: client streaming protocol violation: get <nil>, want <EOF>\"))\n\t}\n\tif err == io.EOF {\n\t\treturn as.s.Status().Err() // non-server streaming Recv returns nil on success\n\t}\n\treturn toRPCErr(err)\n}\n\nfunc (as *addrConnStream) finish(err error) {\n\tas.mu.Lock()\n\tif as.finished {\n\t\tas.mu.Unlock()\n\t\treturn\n\t}\n\tas.finished = true\n\tif err == io.EOF {\n\t\t// Ending a stream with EOF indicates a success.\n\t\terr = nil\n\t}\n\tif as.s != nil {\n\t\tas.t.CloseStream(as.s, err)\n\t}\n\n\tif err != nil {\n\t\tas.ac.incrCallsFailed()\n\t} else {\n\t\tas.ac.incrCallsSucceeded()\n\t}\n\tas.cancel()\n\tas.mu.Unlock()\n}\n\n// ServerStream defines the server-side behavior of a streaming RPC.\n//\n// All errors returned from ServerStream methods are compatible with the\n// status package.\ntype ServerStream interface {\n\t// SetHeader sets the header metadata. It may be called multiple times.\n\t// When call multiple times, all the provided metadata will be merged.\n\t// All the metadata will be sent out when one of the following happens:\n\t//  - ServerStream.SendHeader() is called;\n\t//  - The first response is sent out;\n\t//  - An RPC status is sent out (error or success).\n\tSetHeader(metadata.MD) error\n\t// SendHeader sends the header metadata.\n\t// The provided md and headers set by SetHeader() will be sent.\n\t// It fails if called multiple times.\n\tSendHeader(metadata.MD) error\n\t// SetTrailer sets the trailer metadata which will be sent with the RPC status.\n\t// When called more than once, all the provided metadata will be merged.\n\tSetTrailer(metadata.MD)\n\t// Context returns the context for this stream.\n\tContext() context.Context\n\t// SendMsg sends a message. On error, SendMsg aborts the stream and the\n\t// error is returned directly.\n\t//\n\t// SendMsg blocks until:\n\t//   - There is sufficient flow control to schedule m with the transport, or\n\t//   - The stream is done, or\n\t//   - The stream breaks.\n\t//\n\t// SendMsg does not wait until the message is received by the client. An\n\t// untimely stream closure may result in lost messages.\n\t//\n\t// It is safe to have a goroutine calling SendMsg and another goroutine\n\t// calling RecvMsg on the same stream at the same time, but it is not safe\n\t// to call SendMsg on the same stream in different goroutines.\n\tSendMsg(m interface{}) error\n\t// RecvMsg blocks until it receives a message into m or the stream is\n\t// done. It returns io.EOF when the client has performed a CloseSend. On\n\t// any non-EOF error, the stream is aborted and the error contains the\n\t// RPC status.\n\t//\n\t// It is safe to have a goroutine calling SendMsg and another goroutine\n\t// calling RecvMsg on the same stream at the same time, but it is not\n\t// safe to call RecvMsg on the same stream in different goroutines.\n\tRecvMsg(m interface{}) error\n}\n\n// serverStream implements a server side Stream.\ntype serverStream struct {\n\tctx   context.Context\n\tt     transport.ServerTransport\n\ts     *transport.Stream\n\tp     *parser\n\tcodec baseCodec\n\n\tcp     Compressor\n\tdc     Decompressor\n\tcomp   encoding.Compressor\n\tdecomp encoding.Compressor\n\n\tmaxReceiveMessageSize int\n\tmaxSendMessageSize    int\n\ttrInfo                *traceInfo\n\n\tstatsHandler stats.Handler\n\n\tbinlog *binarylog.MethodLogger\n\t// serverHeaderBinlogged indicates whether server header has been logged. It\n\t// will happen when one of the following two happens: stream.SendHeader(),\n\t// stream.Send().\n\t//\n\t// It's only checked in send and sendHeader, doesn't need to be\n\t// synchronized.\n\tserverHeaderBinlogged bool\n\n\tmu sync.Mutex // protects trInfo.tr after the service handler runs.\n}\n\nfunc (ss *serverStream) Context() context.Context {\n\treturn ss.ctx\n}\n\nfunc (ss *serverStream) SetHeader(md metadata.MD) error {\n\tif md.Len() == 0 {\n\t\treturn nil\n\t}\n\treturn ss.s.SetHeader(md)\n}\n\nfunc (ss *serverStream) SendHeader(md metadata.MD) error {\n\terr := ss.t.WriteHeader(ss.s, md)\n\tif ss.binlog != nil && !ss.serverHeaderBinlogged {\n\t\th, _ := ss.s.Header()\n\t\tss.binlog.Log(&binarylog.ServerHeader{\n\t\t\tHeader: h,\n\t\t})\n\t\tss.serverHeaderBinlogged = true\n\t}\n\treturn err\n}\n\nfunc (ss *serverStream) SetTrailer(md metadata.MD) {\n\tif md.Len() == 0 {\n\t\treturn\n\t}\n\tss.s.SetTrailer(md)\n}\n\nfunc (ss *serverStream) SendMsg(m interface{}) (err error) {\n\tdefer func() {\n\t\tif ss.trInfo != nil {\n\t\t\tss.mu.Lock()\n\t\t\tif ss.trInfo.tr != nil {\n\t\t\t\tif err == nil {\n\t\t\t\t\tss.trInfo.tr.LazyLog(&payload{sent: true, msg: m}, true)\n\t\t\t\t} else {\n\t\t\t\t\tss.trInfo.tr.LazyLog(&fmtStringer{\"%v\", []interface{}{err}}, true)\n\t\t\t\t\tss.trInfo.tr.SetError()\n\t\t\t\t}\n\t\t\t}\n\t\t\tss.mu.Unlock()\n\t\t}\n\t\tif err != nil && err != io.EOF {\n\t\t\tst, _ := status.FromError(toRPCErr(err))\n\t\t\tss.t.WriteStatus(ss.s, st)\n\t\t\t// Non-user specified status was sent out. This should be an error\n\t\t\t// case (as a server side Cancel maybe).\n\t\t\t//\n\t\t\t// This is not handled specifically now. User will return a final\n\t\t\t// status from the service handler, we will log that error instead.\n\t\t\t// This behavior is similar to an interceptor.\n\t\t}\n\t\tif channelz.IsOn() && err == nil {\n\t\t\tss.t.IncrMsgSent()\n\t\t}\n\t}()\n\n\t// load hdr, payload, data\n\thdr, payload, data, err := prepareMsg(m, ss.codec, ss.cp, ss.comp)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// TODO(dfawley): should we be checking len(data) instead?\n\tif len(payload) > ss.maxSendMessageSize {\n\t\treturn status.Errorf(codes.ResourceExhausted, \"trying to send message larger than max (%d vs. %d)\", len(payload), ss.maxSendMessageSize)\n\t}\n\tif err := ss.t.Write(ss.s, hdr, payload, &transport.Options{Last: false}); err != nil {\n\t\treturn toRPCErr(err)\n\t}\n\tif ss.binlog != nil {\n\t\tif !ss.serverHeaderBinlogged {\n\t\t\th, _ := ss.s.Header()\n\t\t\tss.binlog.Log(&binarylog.ServerHeader{\n\t\t\t\tHeader: h,\n\t\t\t})\n\t\t\tss.serverHeaderBinlogged = true\n\t\t}\n\t\tss.binlog.Log(&binarylog.ServerMessage{\n\t\t\tMessage: data,\n\t\t})\n\t}\n\tif ss.statsHandler != nil {\n\t\tss.statsHandler.HandleRPC(ss.s.Context(), outPayload(false, m, data, payload, time.Now()))\n\t}\n\treturn nil\n}\n\nfunc (ss *serverStream) RecvMsg(m interface{}) (err error) {\n\tdefer func() {\n\t\tif ss.trInfo != nil {\n\t\t\tss.mu.Lock()\n\t\t\tif ss.trInfo.tr != nil {\n\t\t\t\tif err == nil {\n\t\t\t\t\tss.trInfo.tr.LazyLog(&payload{sent: false, msg: m}, true)\n\t\t\t\t} else if err != io.EOF {\n\t\t\t\t\tss.trInfo.tr.LazyLog(&fmtStringer{\"%v\", []interface{}{err}}, true)\n\t\t\t\t\tss.trInfo.tr.SetError()\n\t\t\t\t}\n\t\t\t}\n\t\t\tss.mu.Unlock()\n\t\t}\n\t\tif err != nil && err != io.EOF {\n\t\t\tst, _ := status.FromError(toRPCErr(err))\n\t\t\tss.t.WriteStatus(ss.s, st)\n\t\t\t// Non-user specified status was sent out. This should be an error\n\t\t\t// case (as a server side Cancel maybe).\n\t\t\t//\n\t\t\t// This is not handled specifically now. User will return a final\n\t\t\t// status from the service handler, we will log that error instead.\n\t\t\t// This behavior is similar to an interceptor.\n\t\t}\n\t\tif channelz.IsOn() && err == nil {\n\t\t\tss.t.IncrMsgRecv()\n\t\t}\n\t}()\n\tvar payInfo *payloadInfo\n\tif ss.statsHandler != nil || ss.binlog != nil {\n\t\tpayInfo = &payloadInfo{}\n\t}\n\tif err := recv(ss.p, ss.codec, ss.s, ss.dc, m, ss.maxReceiveMessageSize, payInfo, ss.decomp); err != nil {\n\t\tif err == io.EOF {\n\t\t\tif ss.binlog != nil {\n\t\t\t\tss.binlog.Log(&binarylog.ClientHalfClose{})\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\t\tif err == io.ErrUnexpectedEOF {\n\t\t\terr = status.Errorf(codes.Internal, io.ErrUnexpectedEOF.Error())\n\t\t}\n\t\treturn toRPCErr(err)\n\t}\n\tif ss.statsHandler != nil {\n\t\tss.statsHandler.HandleRPC(ss.s.Context(), &stats.InPayload{\n\t\t\tRecvTime: time.Now(),\n\t\t\tPayload:  m,\n\t\t\t// TODO truncate large payload.\n\t\t\tData:       payInfo.uncompressedBytes,\n\t\t\tWireLength: payInfo.wireLength,\n\t\t\tLength:     len(payInfo.uncompressedBytes),\n\t\t})\n\t}\n\tif ss.binlog != nil {\n\t\tss.binlog.Log(&binarylog.ClientMessage{\n\t\t\tMessage: payInfo.uncompressedBytes,\n\t\t})\n\t}\n\treturn nil\n}\n\n// MethodFromServerStream returns the method string for the input stream.\n// The returned string is in the format of \"/service/method\".\nfunc MethodFromServerStream(stream ServerStream) (string, bool) {\n\treturn Method(stream.Context())\n}\n\n// prepareMsg returns the hdr, payload and data\n// using the compressors passed or using the\n// passed preparedmsg\nfunc prepareMsg(m interface{}, codec baseCodec, cp Compressor, comp encoding.Compressor) (hdr, payload, data []byte, err error) {\n\tif preparedMsg, ok := m.(*PreparedMsg); ok {\n\t\treturn preparedMsg.hdr, preparedMsg.payload, preparedMsg.encodedData, nil\n\t}\n\t// The input interface is not a prepared msg.\n\t// Marshal and Compress the data at this point\n\tdata, err = encode(codec, m)\n\tif err != nil {\n\t\treturn nil, nil, nil, err\n\t}\n\tcompData, err := compress(data, cp, comp)\n\tif err != nil {\n\t\treturn nil, nil, nil, err\n\t}\n\thdr, payload = msgHeader(data, compData)\n\treturn hdr, payload, data, nil\n}\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/tap/tap.go",
    "content": "/*\n *\n * Copyright 2016 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n// Package tap defines the function handles which are executed on the transport\n// layer of gRPC-Go and related information. Everything here is EXPERIMENTAL.\npackage tap\n\nimport (\n\t\"context\"\n)\n\n// Info defines the relevant information needed by the handles.\ntype Info struct {\n\t// FullMethodName is the string of grpc method (in the format of\n\t// /package.service/method).\n\tFullMethodName string\n\t// TODO: More to be added.\n}\n\n// ServerInHandle defines the function which runs before a new stream is created\n// on the server side. If it returns a non-nil error, the stream will not be\n// created and a RST_STREAM will be sent back to the client with REFUSED_STREAM.\n// The client will receive an RPC error \"code = Unavailable, desc = stream\n// terminated by RST_STREAM with error code: REFUSED_STREAM\".\n//\n// It's intended to be used in situations where you don't want to waste the\n// resources to accept the new stream (e.g. rate-limiting). And the content of\n// the error will be ignored and won't be sent back to the client. For other\n// general usages, please use interceptors.\n//\n// Note that it is executed in the per-connection I/O goroutine(s) instead of\n// per-RPC goroutine. Therefore, users should NOT have any\n// blocking/time-consuming work in this handle. Otherwise all the RPCs would\n// slow down. Also, for the same reason, this handle won't be called\n// concurrently by gRPC.\ntype ServerInHandle func(ctx context.Context, info *Info) (context.Context, error)\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/test/bufconn/bufconn.go",
    "content": "/*\n *\n * Copyright 2017 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n// Package bufconn provides a net.Conn implemented by a buffer and related\n// dialing and listening functionality.\npackage bufconn\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"net\"\n\t\"sync\"\n\t\"time\"\n)\n\n// Listener implements a net.Listener that creates local, buffered net.Conns\n// via its Accept and Dial method.\ntype Listener struct {\n\tmu   sync.Mutex\n\tsz   int\n\tch   chan net.Conn\n\tdone chan struct{}\n}\n\nvar errClosed = fmt.Errorf(\"closed\")\n\n// Listen returns a Listener that can only be contacted by its own Dialers and\n// creates buffered connections between the two.\nfunc Listen(sz int) *Listener {\n\treturn &Listener{sz: sz, ch: make(chan net.Conn), done: make(chan struct{})}\n}\n\n// Accept blocks until Dial is called, then returns a net.Conn for the server\n// half of the connection.\nfunc (l *Listener) Accept() (net.Conn, error) {\n\tselect {\n\tcase <-l.done:\n\t\treturn nil, errClosed\n\tcase c := <-l.ch:\n\t\treturn c, nil\n\t}\n}\n\n// Close stops the listener.\nfunc (l *Listener) Close() error {\n\tl.mu.Lock()\n\tdefer l.mu.Unlock()\n\tselect {\n\tcase <-l.done:\n\t\t// Already closed.\n\t\tbreak\n\tdefault:\n\t\tclose(l.done)\n\t}\n\treturn nil\n}\n\n// Addr reports the address of the listener.\nfunc (l *Listener) Addr() net.Addr { return addr{} }\n\n// Dial creates an in-memory full-duplex network connection, unblocks Accept by\n// providing it the server half of the connection, and returns the client half\n// of the connection.\nfunc (l *Listener) Dial() (net.Conn, error) {\n\tp1, p2 := newPipe(l.sz), newPipe(l.sz)\n\tselect {\n\tcase <-l.done:\n\t\treturn nil, errClosed\n\tcase l.ch <- &conn{p1, p2}:\n\t\treturn &conn{p2, p1}, nil\n\t}\n}\n\ntype pipe struct {\n\tmu sync.Mutex\n\n\t// buf contains the data in the pipe.  It is a ring buffer of fixed capacity,\n\t// with r and w pointing to the offset to read and write, respsectively.\n\t//\n\t// Data is read between [r, w) and written to [w, r), wrapping around the end\n\t// of the slice if necessary.\n\t//\n\t// The buffer is empty if r == len(buf), otherwise if r == w, it is full.\n\t//\n\t// w and r are always in the range [0, cap(buf)) and [0, len(buf)].\n\tbuf  []byte\n\tw, r int\n\n\twwait sync.Cond\n\trwait sync.Cond\n\n\tclosed      bool\n\twriteClosed bool\n}\n\nfunc newPipe(sz int) *pipe {\n\tp := &pipe{buf: make([]byte, 0, sz)}\n\tp.wwait.L = &p.mu\n\tp.rwait.L = &p.mu\n\treturn p\n}\n\nfunc (p *pipe) empty() bool {\n\treturn p.r == len(p.buf)\n}\n\nfunc (p *pipe) full() bool {\n\treturn p.r < len(p.buf) && p.r == p.w\n}\n\nfunc (p *pipe) Read(b []byte) (n int, err error) {\n\tp.mu.Lock()\n\tdefer p.mu.Unlock()\n\t// Block until p has data.\n\tfor {\n\t\tif p.closed {\n\t\t\treturn 0, io.ErrClosedPipe\n\t\t}\n\t\tif !p.empty() {\n\t\t\tbreak\n\t\t}\n\t\tif p.writeClosed {\n\t\t\treturn 0, io.EOF\n\t\t}\n\t\tp.rwait.Wait()\n\t}\n\twasFull := p.full()\n\n\tn = copy(b, p.buf[p.r:len(p.buf)])\n\tp.r += n\n\tif p.r == cap(p.buf) {\n\t\tp.r = 0\n\t\tp.buf = p.buf[:p.w]\n\t}\n\n\t// Signal a blocked writer, if any\n\tif wasFull {\n\t\tp.wwait.Signal()\n\t}\n\n\treturn n, nil\n}\n\nfunc (p *pipe) Write(b []byte) (n int, err error) {\n\tp.mu.Lock()\n\tdefer p.mu.Unlock()\n\tif p.closed {\n\t\treturn 0, io.ErrClosedPipe\n\t}\n\tfor len(b) > 0 {\n\t\t// Block until p is not full.\n\t\tfor {\n\t\t\tif p.closed || p.writeClosed {\n\t\t\t\treturn 0, io.ErrClosedPipe\n\t\t\t}\n\t\t\tif !p.full() {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tp.wwait.Wait()\n\t\t}\n\t\twasEmpty := p.empty()\n\n\t\tend := cap(p.buf)\n\t\tif p.w < p.r {\n\t\t\tend = p.r\n\t\t}\n\t\tx := copy(p.buf[p.w:end], b)\n\t\tb = b[x:]\n\t\tn += x\n\t\tp.w += x\n\t\tif p.w > len(p.buf) {\n\t\t\tp.buf = p.buf[:p.w]\n\t\t}\n\t\tif p.w == cap(p.buf) {\n\t\t\tp.w = 0\n\t\t}\n\n\t\t// Signal a blocked reader, if any.\n\t\tif wasEmpty {\n\t\t\tp.rwait.Signal()\n\t\t}\n\t}\n\treturn n, nil\n}\n\nfunc (p *pipe) Close() error {\n\tp.mu.Lock()\n\tdefer p.mu.Unlock()\n\tp.closed = true\n\t// Signal all blocked readers and writers to return an error.\n\tp.rwait.Broadcast()\n\tp.wwait.Broadcast()\n\treturn nil\n}\n\nfunc (p *pipe) closeWrite() error {\n\tp.mu.Lock()\n\tdefer p.mu.Unlock()\n\tp.writeClosed = true\n\t// Signal all blocked readers and writers to return an error.\n\tp.rwait.Broadcast()\n\tp.wwait.Broadcast()\n\treturn nil\n}\n\ntype conn struct {\n\tio.Reader\n\tio.Writer\n}\n\nfunc (c *conn) Close() error {\n\terr1 := c.Reader.(*pipe).Close()\n\terr2 := c.Writer.(*pipe).closeWrite()\n\tif err1 != nil {\n\t\treturn err1\n\t}\n\treturn err2\n}\n\nfunc (*conn) LocalAddr() net.Addr                  { return addr{} }\nfunc (*conn) RemoteAddr() net.Addr                 { return addr{} }\nfunc (c *conn) SetDeadline(t time.Time) error      { return fmt.Errorf(\"unsupported\") }\nfunc (c *conn) SetReadDeadline(t time.Time) error  { return fmt.Errorf(\"unsupported\") }\nfunc (c *conn) SetWriteDeadline(t time.Time) error { return fmt.Errorf(\"unsupported\") }\n\ntype addr struct{}\n\nfunc (addr) Network() string { return \"bufconn\" }\nfunc (addr) String() string  { return \"bufconn\" }\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/trace.go",
    "content": "/*\n *\n * Copyright 2015 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\npackage grpc\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"net\"\n\t\"strings\"\n\t\"sync\"\n\t\"time\"\n\n\t\"golang.org/x/net/trace\"\n)\n\n// EnableTracing controls whether to trace RPCs using the golang.org/x/net/trace package.\n// This should only be set before any RPCs are sent or received by this program.\nvar EnableTracing bool\n\n// methodFamily returns the trace family for the given method.\n// It turns \"/pkg.Service/GetFoo\" into \"pkg.Service\".\nfunc methodFamily(m string) string {\n\tm = strings.TrimPrefix(m, \"/\") // remove leading slash\n\tif i := strings.Index(m, \"/\"); i >= 0 {\n\t\tm = m[:i] // remove everything from second slash\n\t}\n\tif i := strings.LastIndex(m, \".\"); i >= 0 {\n\t\tm = m[i+1:] // cut down to last dotted component\n\t}\n\treturn m\n}\n\n// traceInfo contains tracing information for an RPC.\ntype traceInfo struct {\n\ttr        trace.Trace\n\tfirstLine firstLine\n}\n\n// firstLine is the first line of an RPC trace.\n// It may be mutated after construction; remoteAddr specifically may change\n// during client-side use.\ntype firstLine struct {\n\tmu         sync.Mutex\n\tclient     bool // whether this is a client (outgoing) RPC\n\tremoteAddr net.Addr\n\tdeadline   time.Duration // may be zero\n}\n\nfunc (f *firstLine) SetRemoteAddr(addr net.Addr) {\n\tf.mu.Lock()\n\tf.remoteAddr = addr\n\tf.mu.Unlock()\n}\n\nfunc (f *firstLine) String() string {\n\tf.mu.Lock()\n\tdefer f.mu.Unlock()\n\n\tvar line bytes.Buffer\n\tio.WriteString(&line, \"RPC: \")\n\tif f.client {\n\t\tio.WriteString(&line, \"to\")\n\t} else {\n\t\tio.WriteString(&line, \"from\")\n\t}\n\tfmt.Fprintf(&line, \" %v deadline:\", f.remoteAddr)\n\tif f.deadline != 0 {\n\t\tfmt.Fprint(&line, f.deadline)\n\t} else {\n\t\tio.WriteString(&line, \"none\")\n\t}\n\treturn line.String()\n}\n\nconst truncateSize = 100\n\nfunc truncate(x string, l int) string {\n\tif l > len(x) {\n\t\treturn x\n\t}\n\treturn x[:l]\n}\n\n// payload represents an RPC request or response payload.\ntype payload struct {\n\tsent bool        // whether this is an outgoing payload\n\tmsg  interface{} // e.g. a proto.Message\n\t// TODO(dsymonds): add stringifying info to codec, and limit how much we hold here?\n}\n\nfunc (p payload) String() string {\n\tif p.sent {\n\t\treturn truncate(fmt.Sprintf(\"sent: %v\", p.msg), truncateSize)\n\t}\n\treturn truncate(fmt.Sprintf(\"recv: %v\", p.msg), truncateSize)\n}\n\ntype fmtStringer struct {\n\tformat string\n\ta      []interface{}\n}\n\nfunc (f *fmtStringer) String() string {\n\treturn fmt.Sprintf(f.format, f.a...)\n}\n\ntype stringer string\n\nfunc (s stringer) String() string { return string(s) }\n"
  },
  {
    "path": "vendor/google.golang.org/grpc/version.go",
    "content": "/*\n *\n * Copyright 2018 gRPC authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\npackage grpc\n\n// Version is the current grpc version.\nconst Version = \"1.22.0-dev\"\n"
  },
  {
    "path": "vultr/config.go",
    "content": "package vultr\n\nimport (\n\t\"log\"\n\t\"net/http\"\n\t\"net/http/httputil\"\n\t\"time\"\n\n\t\"github.com/JamesClonk/vultr/lib\"\n\t\"github.com/hashicorp/terraform/helper/logging\"\n)\n\nconst logReqMsg = `Vultr API Request Details:\n---[ REQUEST ]---------------------------------------\n%s\n-----------------------------------------------------`\n\nconst logRespMsg = `Vultr API Response Details:\n---[ RESPONSE ]--------------------------------------\n%s\n-----------------------------------------------------`\n\n// Config is the configuration structure used to instantiate the Vultr\n// provider.\ntype Config struct {\n\tAPIKey string\n}\n\n// Client wraps a JamesClonk/vultr/lib.\ntype Client struct {\n\t*lib.Client\n}\n\n// Client configures and returns a fully initialized Vultr Client.\nfunc (c *Config) Client() (interface{}, error) {\n\tclient := Client{lib.NewClient(c.APIKey, &lib.Options{RateLimitation: 500 * time.Millisecond})}\n\n\tif logging.IsDebugOrHigher() {\n\t\tclient.OnRequestCompleted(logRequestAndResponse)\n\t}\n\n\tlog.Printf(\"[INFO] Vultr Client configured for URL: %s\", client.Endpoint)\n\n\treturn &client, nil\n}\n\nfunc logRequestAndResponse(req *http.Request, resp *http.Response) {\n\treqData, err := httputil.DumpRequest(req, true)\n\tif err == nil {\n\t\tlog.Printf(\"[DEBUG] \"+logReqMsg, string(reqData))\n\t} else {\n\t\tlog.Printf(\"[ERROR] Vultr API Request error: %#v\", err)\n\t}\n\n\trespData, err := httputil.DumpResponse(resp, true)\n\tif err == nil {\n\t\tlog.Printf(\"[DEBUG] \"+logRespMsg, string(respData))\n\t} else {\n\t\tlog.Printf(\"[ERROR] Vultr API Response error: %#v\", err)\n\t}\n}\n"
  },
  {
    "path": "vultr/data_source_application.go",
    "content": "package vultr\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"regexp\"\n\n\t\"github.com/JamesClonk/vultr/lib\"\n\t\"github.com/hashicorp/terraform/helper/schema\"\n)\n\nfunc dataSourceApplication() *schema.Resource {\n\treturn &schema.Resource{\n\t\tRead: dataSourceApplicationRead,\n\n\t\tSchema: map[string]*schema.Schema{\n\t\t\t\"filter\": dataSourceFiltersSchema(),\n\n\t\t\t\"name_regex\": {\n\t\t\t\tType:         schema.TypeString,\n\t\t\t\tOptional:     true,\n\t\t\t\tForceNew:     true,\n\t\t\t\tValidateFunc: validateRegex,\n\t\t\t},\n\n\t\t\t\"deploy_name\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"name\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"short_name\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"surcharge\": {\n\t\t\t\tType:     schema.TypeInt,\n\t\t\t\tComputed: true,\n\t\t\t},\n\t\t},\n\t}\n}\n\nfunc dataSourceApplicationRead(d *schema.ResourceData, meta interface{}) error {\n\tclient := meta.(*Client)\n\n\tfilters, filtersOk := d.GetOk(\"filter\")\n\tnameRegex, nameRegexOk := d.GetOk(\"name_regex\")\n\n\tif !filtersOk && !nameRegexOk {\n\t\treturn fmt.Errorf(\"One of %q and %q must be provided\", \"filter\", \"name_regex\")\n\t}\n\n\tapplications, err := client.GetApplications()\n\tif err != nil {\n\t\treturn fmt.Errorf(\"Error getting applications: %v\", err)\n\t}\n\n\tif filtersOk {\n\t\tfilter := filterFromSet(filters.(*schema.Set))\n\t\tvar filteredApplications []lib.Application\n\t\tfor _, application := range applications {\n\t\t\tm := structToMap(application)\n\t\t\tif filter.F(m) {\n\t\t\t\tfilteredApplications = append(filteredApplications, application)\n\t\t\t}\n\t\t}\n\t\tapplications = filteredApplications\n\t}\n\n\tif nameRegexOk {\n\t\tvar filteredApplications []lib.Application\n\t\tr := regexp.MustCompile(nameRegex.(string))\n\t\tfor _, application := range applications {\n\t\t\tif r.MatchString(application.Name) {\n\t\t\t\tfilteredApplications = append(filteredApplications, application)\n\t\t\t}\n\t\t}\n\t\tapplications = filteredApplications\n\t}\n\n\tif len(applications) < 1 {\n\t\treturn errors.New(\"The query for applications returned no results. Please modify the search criteria and try again\")\n\t}\n\n\tif len(applications) > 1 {\n\t\treturn fmt.Errorf(\"The query for applications returned %d results. Please make the search criteria more specific and try again\", len(applications))\n\t}\n\n\td.SetId(applications[0].ID)\n\td.Set(\"deploy_name\", applications[0].DeployName)\n\td.Set(\"name\", applications[0].Name)\n\td.Set(\"short_name\", applications[0].ShortName)\n\td.Set(\"surcharge\", applications[0].Surcharge)\n\treturn nil\n}\n"
  },
  {
    "path": "vultr/data_source_bare_metal_plan.go",
    "content": "package vultr\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"regexp\"\n\t\"strconv\"\n\n\t\"github.com/JamesClonk/vultr/lib\"\n\t\"github.com/hashicorp/terraform/helper/schema\"\n)\n\nfunc dataSourceBareMetalPlan() *schema.Resource {\n\treturn &schema.Resource{\n\t\tRead: dataSourceBareMetalPlanRead,\n\n\t\tSchema: map[string]*schema.Schema{\n\t\t\t\"filter\": dataSourceFiltersSchema(),\n\n\t\t\t\"name_regex\": {\n\t\t\t\tType:         schema.TypeString,\n\t\t\t\tOptional:     true,\n\t\t\t\tForceNew:     true,\n\t\t\t\tValidateFunc: validateRegex,\n\t\t\t},\n\n\t\t\t\"available_locations\": {\n\t\t\t\tType:     schema.TypeList,\n\t\t\t\tComputed: true,\n\t\t\t\tElem: &schema.Schema{\n\t\t\t\t\tType: schema.TypeInt,\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t\"bandwidth\": {\n\t\t\t\tType:     schema.TypeInt,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"disk\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"name\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"price_per_month\": {\n\t\t\t\tType:     schema.TypeInt,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"ram\": {\n\t\t\t\tType:     schema.TypeInt,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"cpu_count\": {\n\t\t\t\tType:     schema.TypeInt,\n\t\t\t\tComputed: true,\n\t\t\t},\n\t\t},\n\t}\n}\n\nfunc dataSourceBareMetalPlanRead(d *schema.ResourceData, meta interface{}) error {\n\tclient := meta.(*Client)\n\n\tfilters, filtersOk := d.GetOk(\"filter\")\n\tnameRegex, nameRegexOk := d.GetOk(\"name_regex\")\n\n\tif !filtersOk && !nameRegexOk {\n\t\treturn fmt.Errorf(\"One of %q and %q must be provided\", \"filter\", \"name_regex\")\n\t}\n\n\tbareMetalPlans, err := client.GetBareMetalPlans()\n\tif err != nil {\n\t\treturn fmt.Errorf(\"Error getting bare metal plans: %v\", err)\n\t}\n\n\tif filtersOk {\n\t\tfilter := filterFromSet(filters.(*schema.Set))\n\t\tvar filteredBareMetalPlans []lib.BareMetalPlan\n\t\tfor _, bareMetalPlan := range bareMetalPlans {\n\t\t\tm := structToMap(bareMetalPlan)\n\t\t\tif filter.F(m) {\n\t\t\t\tfilteredBareMetalPlans = append(filteredBareMetalPlans, bareMetalPlan)\n\t\t\t}\n\t\t}\n\t\tbareMetalPlans = filteredBareMetalPlans\n\t}\n\n\tif nameRegexOk {\n\t\tvar filteredBareMetalPlans []lib.BareMetalPlan\n\t\tr := regexp.MustCompile(nameRegex.(string))\n\t\tfor _, bareMetalPlan := range bareMetalPlans {\n\t\t\tif r.MatchString(bareMetalPlan.Name) {\n\t\t\t\tfilteredBareMetalPlans = append(filteredBareMetalPlans, bareMetalPlan)\n\t\t\t}\n\t\t}\n\t\tbareMetalPlans = filteredBareMetalPlans\n\t}\n\n\tif len(bareMetalPlans) < 1 {\n\t\treturn errors.New(\"The query for bare metal plans returned no results. Please modify the search criteria and try again\")\n\t}\n\n\tif len(bareMetalPlans) > 1 {\n\t\treturn fmt.Errorf(\"The query for bare metal plans returned %d results. Please make the search criteria more specific and try again\", len(bareMetalPlans))\n\t}\n\n\td.SetId(strconv.Itoa(bareMetalPlans[0].ID))\n\td.Set(\"available_locations\", bareMetalPlans[0].Regions)\n\td.Set(\"bandwidth\", bareMetalPlans[0].Bandwidth)\n\td.Set(\"disk\", bareMetalPlans[0].Disk)\n\td.Set(\"name\", bareMetalPlans[0].Name)\n\td.Set(\"price_per_month\", bareMetalPlans[0].Price)\n\td.Set(\"ram\", bareMetalPlans[0].RAM)\n\td.Set(\"cpu_count\", bareMetalPlans[0].CPUs)\n\treturn nil\n}\n"
  },
  {
    "path": "vultr/data_source_common_schema.go",
    "content": "package vultr\n\nimport \"github.com/hashicorp/terraform/helper/schema\"\n\nfunc dataSourceFiltersSchema() *schema.Schema {\n\treturn &schema.Schema{\n\t\tType:     schema.TypeSet,\n\t\tOptional: true,\n\t\tForceNew: true,\n\t\tElem: &schema.Resource{\n\t\t\tSchema: map[string]*schema.Schema{\n\t\t\t\t\"name\": {\n\t\t\t\t\tType:     schema.TypeString,\n\t\t\t\t\tRequired: true,\n\t\t\t\t},\n\n\t\t\t\t\"values\": {\n\t\t\t\t\tType:     schema.TypeList,\n\t\t\t\t\tRequired: true,\n\t\t\t\t\tElem:     &schema.Schema{Type: schema.TypeString},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n}\n"
  },
  {
    "path": "vultr/data_source_firewall_group.go",
    "content": "package vultr\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"regexp\"\n\n\t\"github.com/JamesClonk/vultr/lib\"\n\t\"github.com/hashicorp/terraform/helper/schema\"\n)\n\nfunc dataSourceFirewallGroup() *schema.Resource {\n\treturn &schema.Resource{\n\t\tRead: dataSourceFirewallGroupRead,\n\n\t\tSchema: map[string]*schema.Schema{\n\t\t\t\"filter\": dataSourceFiltersSchema(),\n\n\t\t\t\"description_regex\": {\n\t\t\t\tType:         schema.TypeString,\n\t\t\t\tOptional:     true,\n\t\t\t\tForceNew:     true,\n\t\t\t\tValidateFunc: validateRegex,\n\t\t\t},\n\n\t\t\t\"description\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"instance_count\": {\n\t\t\t\tType:     schema.TypeInt,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"max_rule_count\": {\n\t\t\t\tType:     schema.TypeInt,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"rule_count\": {\n\t\t\t\tType:     schema.TypeInt,\n\t\t\t\tComputed: true,\n\t\t\t},\n\t\t},\n\t}\n}\n\nfunc dataSourceFirewallGroupRead(d *schema.ResourceData, meta interface{}) error {\n\tclient := meta.(*Client)\n\n\tfilters, filtersOk := d.GetOk(\"filter\")\n\tdescriptionRegex, descriptionRegexOk := d.GetOk(\"description_regex\")\n\n\tif !filtersOk && !descriptionRegexOk {\n\t\treturn fmt.Errorf(\"One of %q and %q must be provided\", \"filter\", \"description_regex\")\n\t}\n\n\tfirewallGroups, err := client.GetFirewallGroups()\n\tif err != nil {\n\t\treturn fmt.Errorf(\"Error getting firewall groups: %v\", err)\n\t}\n\n\tif filtersOk {\n\t\tfilter := filterFromSet(filters.(*schema.Set))\n\t\tvar filteredFirewallGroups []lib.FirewallGroup\n\t\tfor _, firewallGroup := range firewallGroups {\n\t\t\tm := structToMap(firewallGroup)\n\t\t\tif filter.F(m) {\n\t\t\t\tfilteredFirewallGroups = append(filteredFirewallGroups, firewallGroup)\n\t\t\t}\n\t\t}\n\t\tfirewallGroups = filteredFirewallGroups\n\t}\n\n\tif descriptionRegexOk {\n\t\tvar filteredFirewallGroups []lib.FirewallGroup\n\t\tr := regexp.MustCompile(descriptionRegex.(string))\n\t\tfor _, firewallGroup := range firewallGroups {\n\t\t\tif r.MatchString(firewallGroup.Description) {\n\t\t\t\tfilteredFirewallGroups = append(filteredFirewallGroups, firewallGroup)\n\t\t\t}\n\t\t}\n\t\tfirewallGroups = filteredFirewallGroups\n\t}\n\n\tif len(firewallGroups) < 1 {\n\t\treturn errors.New(\"The query for firewall groups returned no results. Please modify the search criteria and try again\")\n\t}\n\n\tif len(firewallGroups) > 1 {\n\t\treturn fmt.Errorf(\"The query for firewall groups returned %d results. Please make the search criteria more specific and try again\", len(firewallGroups))\n\t}\n\n\td.SetId(firewallGroups[0].ID)\n\td.Set(\"description\", firewallGroups[0].Description)\n\td.Set(\"instance_count\", firewallGroups[0].InstanceCount)\n\td.Set(\"max_rule_count\", firewallGroups[0].MaxRuleCount)\n\td.Set(\"rule_count\", firewallGroups[0].RuleCount)\n\treturn nil\n}\n"
  },
  {
    "path": "vultr/data_source_network.go",
    "content": "package vultr\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"regexp\"\n\n\t\"github.com/JamesClonk/vultr/lib\"\n\t\"github.com/hashicorp/terraform/helper/schema\"\n)\n\nfunc dataSourceNetwork() *schema.Resource {\n\treturn &schema.Resource{\n\t\tRead: dataSourceNetworkRead,\n\n\t\tSchema: map[string]*schema.Schema{\n\t\t\t\"filter\": dataSourceFiltersSchema(),\n\n\t\t\t\"description_regex\": {\n\t\t\t\tType:         schema.TypeString,\n\t\t\t\tOptional:     true,\n\t\t\t\tForceNew:     true,\n\t\t\t\tValidateFunc: validateRegex,\n\t\t\t},\n\n\t\t\t\"cidr_block\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"description\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"region_id\": {\n\t\t\t\tType:     schema.TypeInt,\n\t\t\t\tComputed: true,\n\t\t\t},\n\t\t},\n\t}\n}\n\nfunc dataSourceNetworkRead(d *schema.ResourceData, meta interface{}) error {\n\tclient := meta.(*Client)\n\n\tfilters, filtersOk := d.GetOk(\"filter\")\n\tdescriptionRegex, descriptionRegexOk := d.GetOk(\"description_regex\")\n\n\tif !filtersOk && !descriptionRegexOk {\n\t\treturn fmt.Errorf(\"One of %q and %q must be provided\", \"filter\", \"description_regex\")\n\t}\n\n\tnetworks, err := client.GetNetworks()\n\tif err != nil {\n\t\treturn fmt.Errorf(\"Error getting networks: %v\", err)\n\t}\n\n\tif filtersOk {\n\t\tfilter := filterFromSet(filters.(*schema.Set))\n\t\tvar filteredNetworks []lib.Network\n\t\tfor _, network := range networks {\n\t\t\tm := structToMap(network)\n\t\t\tif filter.F(m) {\n\t\t\t\tfilteredNetworks = append(filteredNetworks, network)\n\t\t\t}\n\t\t}\n\t\tnetworks = filteredNetworks\n\t}\n\n\tif descriptionRegexOk {\n\t\tvar filteredNetworks []lib.Network\n\t\tr := regexp.MustCompile(descriptionRegex.(string))\n\t\tfor _, network := range networks {\n\t\t\tif r.MatchString(network.Description) {\n\t\t\t\tfilteredNetworks = append(filteredNetworks, network)\n\t\t\t}\n\t\t}\n\t\tnetworks = filteredNetworks\n\t}\n\n\tif len(networks) < 1 {\n\t\treturn errors.New(\"The query for networks returned no results. Please modify the search criteria and try again\")\n\t}\n\n\tif len(networks) > 1 {\n\t\treturn fmt.Errorf(\"The query for networks returned %d results. Please make the search criteria more specific and try again\", len(networks))\n\t}\n\n\td.SetId(networks[0].ID)\n\td.Set(\"cidr_block\", networkToCIDR(&networks[0]))\n\td.Set(\"description\", networks[0].Description)\n\td.Set(\"region_id\", networks[0].RegionID)\n\treturn nil\n}\n"
  },
  {
    "path": "vultr/data_source_os.go",
    "content": "package vultr\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"regexp\"\n\t\"strconv\"\n\n\t\"github.com/JamesClonk/vultr/lib\"\n\t\"github.com/hashicorp/terraform/helper/schema\"\n)\n\nfunc dataSourceOS() *schema.Resource {\n\treturn &schema.Resource{\n\t\tRead: dataSourceOSRead,\n\n\t\tSchema: map[string]*schema.Schema{\n\t\t\t\"filter\": dataSourceFiltersSchema(),\n\n\t\t\t\"name_regex\": {\n\t\t\t\tType:         schema.TypeString,\n\t\t\t\tOptional:     true,\n\t\t\t\tForceNew:     true,\n\t\t\t\tValidateFunc: validateRegex,\n\t\t\t},\n\n\t\t\t\"arch\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"family\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"name\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"surcharge\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"windows\": {\n\t\t\t\tType:     schema.TypeBool,\n\t\t\t\tComputed: true,\n\t\t\t},\n\t\t},\n\t}\n}\n\nfunc dataSourceOSRead(d *schema.ResourceData, meta interface{}) error {\n\tclient := meta.(*Client)\n\n\tfilters, filtersOk := d.GetOk(\"filter\")\n\tnameRegex, nameRegexOk := d.GetOk(\"name_regex\")\n\n\tif !filtersOk && !nameRegexOk {\n\t\treturn fmt.Errorf(\"One of %q and %q must be provided\", \"filter\", \"name_regex\")\n\t}\n\n\timages, err := client.GetOS()\n\tif err != nil {\n\t\treturn fmt.Errorf(\"Error getting images: %v\", err)\n\t}\n\n\tif filtersOk {\n\t\tfilter := filterFromSet(filters.(*schema.Set))\n\t\tvar filteredImages []lib.OS\n\t\tfor _, image := range images {\n\t\t\tm := structToMap(image)\n\t\t\tif filter.F(m) {\n\t\t\t\tfilteredImages = append(filteredImages, image)\n\t\t\t}\n\t\t}\n\t\timages = filteredImages\n\t}\n\n\tif nameRegexOk {\n\t\tvar filteredImages []lib.OS\n\t\tr := regexp.MustCompile(nameRegex.(string))\n\t\tfor _, image := range images {\n\t\t\tif r.MatchString(image.Name) {\n\t\t\t\tfilteredImages = append(filteredImages, image)\n\t\t\t}\n\t\t}\n\t\timages = filteredImages\n\t}\n\n\tif len(images) < 1 {\n\t\treturn errors.New(\"The query for OS returned no results. Please modify the search criteria and try again\")\n\t}\n\n\tif len(images) > 1 {\n\t\treturn fmt.Errorf(\"The query for OS returned %d results. Please make the search criteria more specific and try again\", len(images))\n\t}\n\n\td.SetId(strconv.Itoa(images[0].ID))\n\td.Set(\"arch\", images[0].Arch)\n\td.Set(\"family\", images[0].Family)\n\td.Set(\"name\", images[0].Name)\n\td.Set(\"surcharge\", images[0].Surcharge)\n\td.Set(\"windows\", images[0].Windows)\n\treturn nil\n}\n"
  },
  {
    "path": "vultr/data_source_plan.go",
    "content": "package vultr\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"regexp\"\n\t\"strconv\"\n\n\t\"github.com/JamesClonk/vultr/lib\"\n\t\"github.com/hashicorp/terraform/helper/schema\"\n)\n\nfunc dataSourcePlan() *schema.Resource {\n\treturn &schema.Resource{\n\t\tRead: dataSourcePlanRead,\n\n\t\tSchema: map[string]*schema.Schema{\n\t\t\t\"filter\": dataSourceFiltersSchema(),\n\n\t\t\t\"name_regex\": {\n\t\t\t\tType:         schema.TypeString,\n\t\t\t\tOptional:     true,\n\t\t\t\tForceNew:     true,\n\t\t\t\tValidateFunc: validateRegex,\n\t\t\t},\n\n\t\t\t\"available_locations\": {\n\t\t\t\tType:     schema.TypeList,\n\t\t\t\tComputed: true,\n\t\t\t\tElem: &schema.Schema{\n\t\t\t\t\tType: schema.TypeInt,\n\t\t\t\t},\n\t\t\t},\n\n\t\t\t\"bandwidth\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"disk\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"name\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"price_per_month\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"ram\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"vcpu_count\": {\n\t\t\t\tType:     schema.TypeInt,\n\t\t\t\tComputed: true,\n\t\t\t},\n\t\t},\n\t}\n}\n\nfunc dataSourcePlanRead(d *schema.ResourceData, meta interface{}) error {\n\tclient := meta.(*Client)\n\n\tfilters, filtersOk := d.GetOk(\"filter\")\n\tnameRegex, nameRegexOk := d.GetOk(\"name_regex\")\n\n\tif !filtersOk && !nameRegexOk {\n\t\treturn fmt.Errorf(\"One of %q and %q must be provided\", \"filter\", \"name_regex\")\n\t}\n\n\tplans, err := client.GetPlans()\n\tif err != nil {\n\t\treturn fmt.Errorf(\"Error getting plans: %v\", err)\n\t}\n\n\tif filtersOk {\n\t\tfilter := filterFromSet(filters.(*schema.Set))\n\t\tvar filteredPlans []lib.Plan\n\t\tfor _, plan := range plans {\n\t\t\tm := structToMap(plan)\n\t\t\tif filter.F(m) {\n\t\t\t\tfilteredPlans = append(filteredPlans, plan)\n\t\t\t}\n\t\t}\n\t\tplans = filteredPlans\n\t}\n\n\tif nameRegexOk {\n\t\tvar filteredPlans []lib.Plan\n\t\tr := regexp.MustCompile(nameRegex.(string))\n\t\tfor _, plan := range plans {\n\t\t\tif r.MatchString(plan.Name) {\n\t\t\t\tfilteredPlans = append(filteredPlans, plan)\n\t\t\t}\n\t\t}\n\t\tplans = filteredPlans\n\t}\n\n\tif len(plans) < 1 {\n\t\treturn errors.New(\"The query for plans returned no results. Please modify the search criteria and try again\")\n\t}\n\n\tif len(plans) > 1 {\n\t\treturn fmt.Errorf(\"The query for plans returned %d results. Please make the search criteria more specific and try again\", len(plans))\n\t}\n\n\td.SetId(strconv.Itoa(plans[0].ID))\n\td.Set(\"available_locations\", plans[0].Regions)\n\td.Set(\"bandwidth\", plans[0].Bandwidth)\n\td.Set(\"disk\", plans[0].Disk)\n\td.Set(\"name\", plans[0].Name)\n\td.Set(\"price_per_month\", plans[0].Price)\n\td.Set(\"ram\", plans[0].RAM)\n\td.Set(\"vcpu_count\", plans[0].VCpus)\n\treturn nil\n}\n"
  },
  {
    "path": "vultr/data_source_region.go",
    "content": "package vultr\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"regexp\"\n\t\"strconv\"\n\n\t\"github.com/JamesClonk/vultr/lib\"\n\t\"github.com/hashicorp/terraform/helper/schema\"\n)\n\nfunc dataSourceRegion() *schema.Resource {\n\treturn &schema.Resource{\n\t\tRead: dataSourceRegionRead,\n\n\t\tSchema: map[string]*schema.Schema{\n\t\t\t\"filter\": dataSourceFiltersSchema(),\n\n\t\t\t\"name_regex\": {\n\t\t\t\tType:         schema.TypeString,\n\t\t\t\tOptional:     true,\n\t\t\t\tForceNew:     true,\n\t\t\t\tValidateFunc: validateRegex,\n\t\t\t},\n\n\t\t\t\"block_storage\": {\n\t\t\t\tType:     schema.TypeBool,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"code\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"continent\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"country\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"ddos_protection\": {\n\t\t\t\tType:     schema.TypeBool,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"name\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"state\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tComputed: true,\n\t\t\t},\n\t\t},\n\t}\n}\n\nfunc dataSourceRegionRead(d *schema.ResourceData, meta interface{}) error {\n\tclient := meta.(*Client)\n\n\tfilters, filtersOk := d.GetOk(\"filter\")\n\tnameRegex, nameRegexOk := d.GetOk(\"name_regex\")\n\n\tif !filtersOk && !nameRegexOk {\n\t\treturn fmt.Errorf(\"One of %q and %q must be provided\", \"filter\", \"name_regex\")\n\t}\n\n\tregions, err := client.GetRegions()\n\tif err != nil {\n\t\treturn fmt.Errorf(\"Error getting regions: %v\", err)\n\t}\n\n\tif filtersOk {\n\t\tfilter := filterFromSet(filters.(*schema.Set))\n\t\tvar filteredRegions []lib.Region\n\t\tfor _, region := range regions {\n\t\t\tm := structToMap(region)\n\t\t\tif filter.F(m) {\n\t\t\t\tfilteredRegions = append(filteredRegions, region)\n\t\t\t}\n\t\t}\n\t\tregions = filteredRegions\n\t}\n\n\tif nameRegexOk {\n\t\tvar filteredRegions []lib.Region\n\t\tr := regexp.MustCompile(nameRegex.(string))\n\t\tfor _, region := range regions {\n\t\t\tif r.MatchString(region.Name) {\n\t\t\t\tfilteredRegions = append(filteredRegions, region)\n\t\t\t}\n\t\t}\n\t\tregions = filteredRegions\n\t}\n\n\tif len(regions) < 1 {\n\t\treturn errors.New(\"The query for regions returned no results. Please modify the search criteria and try again\")\n\t}\n\n\tif len(regions) > 1 {\n\t\treturn fmt.Errorf(\"The query for regions returned %d results. Please make the search criteria more specific and try again\", len(regions))\n\t}\n\n\td.SetId(strconv.Itoa(regions[0].ID))\n\td.Set(\"block_storage\", regions[0].BlockStorage)\n\td.Set(\"code\", regions[0].Code)\n\td.Set(\"continent\", regions[0].Continent)\n\td.Set(\"country\", regions[0].Country)\n\td.Set(\"ddos_protection\", regions[0].Ddos)\n\td.Set(\"name\", regions[0].Name)\n\td.Set(\"state\", regions[0].State)\n\treturn nil\n}\n"
  },
  {
    "path": "vultr/data_source_snapshot.go",
    "content": "package vultr\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"regexp\"\n\t\"strconv\"\n\n\t\"github.com/JamesClonk/vultr/lib\"\n\t\"github.com/hashicorp/terraform/helper/schema\"\n)\n\nfunc dataSourceSnapshot() *schema.Resource {\n\treturn &schema.Resource{\n\t\tRead: dataSourceSnapshotRead,\n\n\t\tSchema: map[string]*schema.Schema{\n\t\t\t\"filter\": dataSourceFiltersSchema(),\n\n\t\t\t\"description_regex\": {\n\t\t\t\tType:         schema.TypeString,\n\t\t\t\tOptional:     true,\n\t\t\t\tForceNew:     true,\n\t\t\t\tValidateFunc: validateRegex,\n\t\t\t},\n\n\t\t\t\"application_id\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"created\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"description\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"os_id\": {\n\t\t\t\tType:     schema.TypeInt,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"size\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"status\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tComputed: true,\n\t\t\t},\n\t\t},\n\t}\n}\n\nfunc dataSourceSnapshotRead(d *schema.ResourceData, meta interface{}) error {\n\tclient := meta.(*Client)\n\n\tfilters, filtersOk := d.GetOk(\"filter\")\n\tdescriptionRegex, descriptionRegexOk := d.GetOk(\"description_regex\")\n\n\tif !filtersOk && !descriptionRegexOk {\n\t\treturn fmt.Errorf(\"One of %q and %q must be provided\", \"filter\", \"description_regex\")\n\t}\n\n\tsnapshots, err := client.GetSnapshots()\n\tif err != nil {\n\t\treturn fmt.Errorf(\"Error getting snapshots: %v\", err)\n\t}\n\n\tif filtersOk {\n\t\tfilter := filterFromSet(filters.(*schema.Set))\n\t\tvar filteredSnapshots []lib.Snapshot\n\t\tfor _, snapshot := range snapshots {\n\t\t\tm := structToMap(snapshot)\n\t\t\tif filter.F(m) {\n\t\t\t\tfilteredSnapshots = append(filteredSnapshots, snapshot)\n\t\t\t}\n\t\t}\n\t\tsnapshots = filteredSnapshots\n\t}\n\n\tif descriptionRegexOk {\n\t\tvar filteredSnapshots []lib.Snapshot\n\t\tr := regexp.MustCompile(descriptionRegex.(string))\n\t\tfor _, snapshot := range snapshots {\n\t\t\tif r.MatchString(snapshot.Description) {\n\t\t\t\tfilteredSnapshots = append(filteredSnapshots, snapshot)\n\t\t\t}\n\t\t}\n\t\tsnapshots = filteredSnapshots\n\t}\n\n\tif len(snapshots) < 1 {\n\t\treturn errors.New(\"The query for snapshots returned no results. Please modify the search criteria and try again\")\n\t}\n\n\tif len(snapshots) > 1 {\n\t\treturn fmt.Errorf(\"The query for snapshots returned %d results. Please make the search criteria more specific and try again\", len(snapshots))\n\t}\n\n\tosID, err := strconv.Atoi(snapshots[0].OSID)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"OS ID must be an integer: %v\", err)\n\t}\n\n\td.SetId(snapshots[0].ID)\n\td.Set(\"application_id\", snapshots[0].AppID)\n\td.Set(\"description\", snapshots[0].Description)\n\td.Set(\"created\", snapshots[0].Created)\n\td.Set(\"os_id\", osID)\n\td.Set(\"size\", snapshots[0].Size)\n\td.Set(\"status\", snapshots[0].Status)\n\treturn nil\n}\n"
  },
  {
    "path": "vultr/data_source_ssh_key.go",
    "content": "package vultr\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"regexp\"\n\n\t\"github.com/JamesClonk/vultr/lib\"\n\t\"github.com/hashicorp/terraform/helper/schema\"\n)\n\nfunc dataSourceSSHKey() *schema.Resource {\n\treturn &schema.Resource{\n\t\tRead: dataSourceSSHKeyRead,\n\n\t\tSchema: map[string]*schema.Schema{\n\t\t\t\"filter\": dataSourceFiltersSchema(),\n\n\t\t\t\"name_regex\": {\n\t\t\t\tType:         schema.TypeString,\n\t\t\t\tOptional:     true,\n\t\t\t\tForceNew:     true,\n\t\t\t\tValidateFunc: validateRegex,\n\t\t\t},\n\n\t\t\t\"name\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"public_key\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tComputed: true,\n\t\t\t},\n\t\t},\n\t}\n}\n\nfunc dataSourceSSHKeyRead(d *schema.ResourceData, meta interface{}) error {\n\tclient := meta.(*Client)\n\n\tfilters, filtersOk := d.GetOk(\"filter\")\n\tnameRegex, nameRegexOk := d.GetOk(\"name_regex\")\n\n\tif !filtersOk && !nameRegexOk {\n\t\treturn fmt.Errorf(\"One of %q and %q must be provided\", \"filter\", \"name_regex\")\n\t}\n\n\tkeys, err := client.GetSSHKeys()\n\tif err != nil {\n\t\treturn fmt.Errorf(\"Error getting SSH keys: %v\", err)\n\t}\n\n\tif filtersOk {\n\t\tfilter := filterFromSet(filters.(*schema.Set))\n\t\tvar filteredKeys []lib.SSHKey\n\t\tfor _, key := range keys {\n\t\t\tm := structToMap(key)\n\t\t\tif filter.F(m) {\n\t\t\t\tfilteredKeys = append(filteredKeys, key)\n\t\t\t}\n\t\t}\n\t\tkeys = filteredKeys\n\t}\n\n\tif nameRegexOk {\n\t\tvar filteredKeys []lib.SSHKey\n\t\tr := regexp.MustCompile(nameRegex.(string))\n\t\tfor _, key := range keys {\n\t\t\tif r.MatchString(key.Name) {\n\t\t\t\tfilteredKeys = append(filteredKeys, key)\n\t\t\t}\n\t\t}\n\t\tkeys = filteredKeys\n\t}\n\n\tif len(keys) < 1 {\n\t\treturn errors.New(\"The query for SSH keys returned no results. Please modify the search criteria and try again\")\n\t}\n\n\tif len(keys) > 1 {\n\t\treturn fmt.Errorf(\"The query for SSH keys returned %d results. Please make the search criteria more specific and try again\", len(keys))\n\t}\n\n\td.SetId(keys[0].ID)\n\td.Set(\"name\", keys[0].Name)\n\td.Set(\"public_key\", keys[0].Key)\n\treturn nil\n}\n"
  },
  {
    "path": "vultr/data_source_startup_script.go",
    "content": "package vultr\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"regexp\"\n\n\t\"github.com/JamesClonk/vultr/lib\"\n\t\"github.com/hashicorp/terraform/helper/schema\"\n)\n\nfunc dataSourceStartupScript() *schema.Resource {\n\treturn &schema.Resource{\n\t\tRead: dataSourceStartupScriptRead,\n\n\t\tSchema: map[string]*schema.Schema{\n\t\t\t\"filter\": dataSourceFiltersSchema(),\n\n\t\t\t\"name_regex\": {\n\t\t\t\tType:         schema.TypeString,\n\t\t\t\tOptional:     true,\n\t\t\t\tForceNew:     true,\n\t\t\t\tValidateFunc: validateRegex,\n\t\t\t},\n\n\t\t\t\"content\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"name\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"type\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tComputed: true,\n\t\t\t},\n\t\t},\n\t}\n}\n\nfunc dataSourceStartupScriptRead(d *schema.ResourceData, meta interface{}) error {\n\tclient := meta.(*Client)\n\n\tfilters, filtersOk := d.GetOk(\"filter\")\n\tnameRegex, nameRegexOk := d.GetOk(\"name_regex\")\n\n\tif !filtersOk && !nameRegexOk {\n\t\treturn fmt.Errorf(\"One of %q and %q must be provided\", \"filter\", \"name_regex\")\n\t}\n\n\tstartupScripts, err := client.GetStartupScripts()\n\tif err != nil {\n\t\treturn fmt.Errorf(\"Error getting startup scripts: %v\", err)\n\t}\n\n\tif filtersOk {\n\t\tfilter := filterFromSet(filters.(*schema.Set))\n\t\tvar filteredStartupScripts []lib.StartupScript\n\t\tfor _, startupScript := range startupScripts {\n\t\t\tm := structToMap(startupScript)\n\t\t\tif filter.F(m) {\n\t\t\t\tfilteredStartupScripts = append(filteredStartupScripts, startupScript)\n\t\t\t}\n\t\t}\n\t\tstartupScripts = filteredStartupScripts\n\t}\n\n\tif nameRegexOk {\n\t\tvar filteredStartupScripts []lib.StartupScript\n\t\tr := regexp.MustCompile(nameRegex.(string))\n\t\tfor _, startupScript := range startupScripts {\n\t\t\tif r.MatchString(startupScript.Name) {\n\t\t\t\tfilteredStartupScripts = append(filteredStartupScripts, startupScript)\n\t\t\t}\n\t\t}\n\t\tstartupScripts = filteredStartupScripts\n\t}\n\n\tif len(startupScripts) < 1 {\n\t\treturn errors.New(\"The query for startup scripts returned no results. Please modify the search criteria and try again\")\n\t}\n\n\tif len(startupScripts) > 1 {\n\t\treturn fmt.Errorf(\"The query for startup scripts returned %d results. Please make the search criteria more specific and try again\", len(startupScripts))\n\t}\n\n\td.SetId(startupScripts[0].ID)\n\td.Set(\"content\", startupScripts[0].Content)\n\td.Set(\"name\", startupScripts[0].Name)\n\td.Set(\"type\", startupScripts[0].Type)\n\treturn nil\n}\n"
  },
  {
    "path": "vultr/filter.go",
    "content": "package vultr\n\nimport (\n\t\"strconv\"\n\n\t\"github.com/hashicorp/terraform/helper/schema\"\n\t\"github.com/squat/terraform-provider-vultr/structs\"\n)\n\nfunc structToMap(s interface{}) map[string]string {\n\tst := structs.New(s)\n\tst.TagName = \"json\"\n\tm := st.Map()\n\tm2 := make(map[string]string)\n\tfor k, v := range m {\n\t\tswitch v.(type) {\n\t\tcase string:\n\t\t\tm2[k] = v.(string)\n\t\tcase bool:\n\t\t\tm2[k] = strconv.FormatBool(v.(bool))\n\t\tcase int:\n\t\t\tm2[k] = strconv.FormatInt(int64(v.(int)), 10)\n\t\t}\n\t}\n\treturn m2\n}\n\n// Filter is a simple interface to describe type that accepts a\n// map[string]string and returns a boolean saying whether or not it\n// matches the filter.\ntype Filter interface {\n\tF(map[string]string) bool\n}\n\ntype filter struct {\n\tname   string\n\tvalues []string\n}\n\nfunc (f *filter) F(m map[string]string) bool {\n\tv, ok := m[f.name]\n\tif !ok {\n\t\treturn false\n\t}\n\tfor _, value := range f.values {\n\t\tif v == value {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\ntype multiFilter []filter\n\nfunc (f multiFilter) F(m map[string]string) bool {\n\tfor _, filter := range f {\n\t\tif !filter.F(m) {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\nfunc filterFromSet(set *schema.Set) Filter {\n\tvar filters []filter\n\tfor _, v := range set.List() {\n\t\tm := v.(map[string]interface{})\n\t\tvar values []string\n\t\tfor _, value := range m[\"values\"].([]interface{}) {\n\t\t\tvalues = append(values, value.(string))\n\t\t}\n\t\tfilters = append(filters, filter{\n\t\t\tname:   m[\"name\"].(string),\n\t\t\tvalues: values,\n\t\t})\n\t}\n\treturn multiFilter(filters)\n}\n"
  },
  {
    "path": "vultr/provider.go",
    "content": "package vultr\n\nimport (\n\t\"github.com/hashicorp/terraform/helper/mutexkv\"\n\t\"github.com/hashicorp/terraform/helper/schema\"\n\t\"github.com/hashicorp/terraform/terraform\"\n)\n\n// Provider returns a terraform.ResourceProvider.\nfunc Provider() terraform.ResourceProvider {\n\treturn &schema.Provider{\n\t\tSchema: map[string]*schema.Schema{\n\t\t\t\"api_key\": {\n\t\t\t\tType:        schema.TypeString,\n\t\t\t\tOptional:    true,\n\t\t\t\tDefaultFunc: schema.EnvDefaultFunc(\"VULTR_API_KEY\", nil),\n\t\t\t\tDescription: \"The key for API operations. You can retrieve this from the 'API' tab of the 'Account' section  of the Vultr console.\",\n\t\t\t},\n\t\t},\n\n\t\tDataSourcesMap: map[string]*schema.Resource{\n\t\t\t\"vultr_application\":     dataSourceApplication(),\n\t\t\t\"vultr_bare_metal_plan\": dataSourceBareMetalPlan(),\n\t\t\t\"vultr_firewall_group\":  dataSourceFirewallGroup(),\n\t\t\t\"vultr_network\":         dataSourceNetwork(),\n\t\t\t\"vultr_os\":              dataSourceOS(),\n\t\t\t\"vultr_plan\":            dataSourcePlan(),\n\t\t\t\"vultr_region\":          dataSourceRegion(),\n\t\t\t\"vultr_snapshot\":        dataSourceSnapshot(),\n\t\t\t\"vultr_ssh_key\":         dataSourceSSHKey(),\n\t\t\t\"vultr_startup_script\":  dataSourceStartupScript(),\n\t\t},\n\n\t\tResourcesMap: map[string]*schema.Resource{\n\t\t\t\"vultr_bare_metal\":     resourceBareMetal(),\n\t\t\t\"vultr_block_storage\":  resourceBlockStorage(),\n\t\t\t\"vultr_dns_domain\":     resourceDNSDomain(),\n\t\t\t\"vultr_dns_record\":     resourceDNSRecord(),\n\t\t\t\"vultr_firewall_group\": resourceFirewallGroup(),\n\t\t\t\"vultr_firewall_rule\":  resourceFirewallRule(),\n\t\t\t\"vultr_instance\":       resourceInstance(),\n\t\t\t\"vultr_ipv4\":           resourceIPV4(),\n\t\t\t\"vultr_network\":        resourceNetwork(),\n\t\t\t\"vultr_reserved_ip\":    resourceReservedIP(),\n\t\t\t\"vultr_ssh_key\":        resourceSSHKey(),\n\t\t\t\"vultr_startup_script\": resourceStartupScript(),\n\t\t},\n\n\t\tConfigureFunc: providerConfigure,\n\t}\n}\n\nfunc providerConfigure(d *schema.ResourceData) (interface{}, error) {\n\tconfig := Config{\n\t\tAPIKey: d.Get(\"api_key\").(string),\n\t}\n\treturn config.Client()\n}\n\n// This is a global MutexKV for use within this plugin.\nvar vultrMutexKV = mutexkv.NewMutexKV()\n"
  },
  {
    "path": "vultr/provider_test.go",
    "content": "package vultr\n\nimport (\n\t\"testing\"\n\n\t\"github.com/hashicorp/terraform/helper/schema\"\n\t\"github.com/hashicorp/terraform/terraform\"\n)\n\nvar testAccProvider = Provider().(*schema.Provider)\nvar testAccProviders = map[string]terraform.ResourceProvider{\n\t\"vultr\": testAccProvider,\n}\n\nfunc TestProvider(t *testing.T) {\n\tif err := Provider().(*schema.Provider).InternalValidate(); err != nil {\n\t\tt.Fatalf(\"expected provider to validate: %v\", err)\n\t}\n}\n"
  },
  {
    "path": "vultr/resource_bare_metal.go",
    "content": "package vultr\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/JamesClonk/vultr/lib\"\n\t\"github.com/hashicorp/terraform/helper/schema\"\n)\n\nfunc resourceBareMetal() *schema.Resource {\n\treturn &schema.Resource{\n\t\tCreate: resourceBareMetalCreate,\n\t\tRead:   resourceBareMetalRead,\n\t\tUpdate: resourceBareMetalUpdate,\n\t\tDelete: resourceBareMetalDelete,\n\t\tImporter: &schema.ResourceImporter{\n\t\t\tState: schema.ImportStatePassthrough,\n\t\t},\n\n\t\tSchema: map[string]*schema.Schema{\n\t\t\t\"application_id\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tComputed: true,\n\t\t\t\tOptional: true,\n\t\t\t},\n\n\t\t\t\"cpus\": {\n\t\t\t\tType:     schema.TypeInt,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"default_password\": {\n\t\t\t\tType:      schema.TypeString,\n\t\t\t\tComputed:  true,\n\t\t\t\tSensitive: true,\n\t\t\t},\n\n\t\t\t\"disk\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"hostname\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tOptional: true,\n\t\t\t\tForceNew: true,\n\t\t\t},\n\n\t\t\t\"ipv4_address\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"ipv6\": {\n\t\t\t\tType:     schema.TypeBool,\n\t\t\t\tOptional: true,\n\t\t\t\tForceNew: true,\n\t\t\t},\n\n\t\t\t\"ipv6_address\": {\n\t\t\t\tType:     schema.TypeList,\n\t\t\t\tComputed: true,\n\t\t\t\tElem:     &schema.Schema{Type: schema.TypeString},\n\t\t\t},\n\n\t\t\t\"name\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tOptional: true,\n\t\t\t},\n\n\t\t\t\"notify_activate\": {\n\t\t\t\tType:     schema.TypeBool,\n\t\t\t\tOptional: true,\n\t\t\t\tForceNew: true,\n\t\t\t},\n\n\t\t\t\"os_id\": {\n\t\t\t\tType:     schema.TypeInt,\n\t\t\t\tComputed: true,\n\t\t\t\tOptional: true,\n\t\t\t},\n\n\t\t\t\"plan_id\": {\n\t\t\t\tType:     schema.TypeInt,\n\t\t\t\tRequired: true,\n\t\t\t\tForceNew: true,\n\t\t\t},\n\n\t\t\t\"ram\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"region_id\": {\n\t\t\t\tType:     schema.TypeInt,\n\t\t\t\tRequired: true,\n\t\t\t\tForceNew: true,\n\t\t\t},\n\n\t\t\t\"snapshot_id\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tOptional: true,\n\t\t\t\tForceNew: true,\n\t\t\t},\n\n\t\t\t\"startup_script_id\": {\n\t\t\t\tType:     schema.TypeInt,\n\t\t\t\tOptional: true,\n\t\t\t\tForceNew: true,\n\t\t\t},\n\n\t\t\t\"ssh_key_ids\": {\n\t\t\t\tType:     schema.TypeList,\n\t\t\t\tOptional: true,\n\t\t\t\tForceNew: true,\n\t\t\t\tElem:     &schema.Schema{Type: schema.TypeString},\n\t\t\t},\n\n\t\t\t\"status\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"tag\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tOptional: true,\n\t\t\t},\n\t\t},\n\t}\n}\n\nfunc resourceBareMetalCreate(d *schema.ResourceData, meta interface{}) error {\n\t_, appOK := d.GetOk(\"application_id\")\n\t_, osOK := d.GetOk(\"os_id\")\n\t_, snapshotOK := d.GetOk(\"snapshot_id\")\n\t// At most one.\n\tif appOK && snapshotOK {\n\t\treturn fmt.Errorf(\"Only one of %q and %q may be provided but not both\", \"application_id\", \"snapshot_id\")\n\t}\n\t// Exactly one.\n\tif osOK == snapshotOK {\n\t\treturn fmt.Errorf(\"One of %q and %q must be provided but not both\", \"os_id\", \"snapshot_id\")\n\t}\n\n\tclient := meta.(*Client)\n\toptions := &lib.BareMetalServerOptions{\n\t\tAppID:                d.Get(\"application_id\").(string),\n\t\tDontNotifyOnActivate: !d.Get(\"notify_activate\").(bool),\n\t\tHostname:             d.Get(\"hostname\").(string),\n\t\tIPV6:                 d.Get(\"ipv6\").(bool),\n\t\tScript:               d.Get(\"startup_script_id\").(int),\n\t\tSnapshot:             d.Get(\"snapshot_id\").(string),\n\t\tTag:                  d.Get(\"tag\").(string),\n\t}\n\n\tname := d.Get(\"name\").(string)\n\tvar osID int\n\tif snapshotOK {\n\t\tosID = osIDSnapshot\n\t} else {\n\t\tosID = d.Get(\"os_id\").(int)\n\t}\n\tplanID := d.Get(\"plan_id\").(int)\n\tregionID := d.Get(\"region_id\").(int)\n\n\tkeyIDs := make([]string, d.Get(\"ssh_key_ids.#\").(int))\n\tfor i, id := range d.Get(\"ssh_key_ids\").([]interface{}) {\n\t\tkeyIDs[i] = id.(string)\n\t}\n\toptions.SSHKey = strings.Join(keyIDs, \",\")\n\n\tlog.Printf(\"[INFO] Creating new bare metal instance\")\n\tinstance, err := client.CreateBareMetalServer(name, regionID, planID, osID, options)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"Error creating bare metal instance: %v\", err)\n\t}\n\td.SetId(instance.ID)\n\n\tif _, err := waitForResourceState(d, meta, \"bare metal instance\", \"status\", resourceBareMetalRead, \"active\", []string{\"pending\"}); err != nil {\n\t\treturn err\n\t}\n\treturn resourceBareMetalRead(d, meta)\n}\n\nfunc resourceBareMetalRead(d *schema.ResourceData, meta interface{}) error {\n\tclient := meta.(*Client)\n\n\tinstance, err := client.GetBareMetalServer(d.Id())\n\tif err != nil {\n\t\tif strings.HasPrefix(err.Error(), \"Invalid server\") {\n\t\t\tlog.Printf(\"[WARN] Removing bare metal instance (%s) because it is gone\", d.Id())\n\t\t\td.Set(\"status\", \"none\")\n\t\t\td.SetId(\"\")\n\t\t\treturn nil\n\t\t}\n\t\treturn fmt.Errorf(\"Error getting bare metal instance (%s): %v\", d.Id(), err)\n\t}\n\n\tosID, err := strconv.Atoi(instance.OSID)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"OS ID must be an integer: %v\", err)\n\t}\n\n\td.Set(\"application_id\", instance.AppID)\n\td.Set(\"cpus\", instance.CPUs)\n\td.Set(\"default_password\", instance.DefaultPassword)\n\td.Set(\"disk\", instance.Disk)\n\td.Set(\"ipv4_address\", instance.MainIP)\n\td.Set(\"name\", instance.Name)\n\td.Set(\"os_id\", osID)\n\td.Set(\"plan_id\", instance.PlanID)\n\td.Set(\"ram\", instance.RAM)\n\td.Set(\"region_id\", instance.RegionID)\n\td.Set(\"status\", instance.Status)\n\td.Set(\"tag\", instance.Tag)\n\n\tvar ipv6s []string\n\tfor _, net := range instance.V6Networks {\n\t\tipv6s = append(ipv6s, net.MainIP)\n\t}\n\td.Set(\"ipv6_address\", ipv6s)\n\n\t// Initialize the connection information.\n\td.SetConnInfo(map[string]string{\n\t\t\"host\":     instance.MainIP,\n\t\t\"password\": instance.DefaultPassword,\n\t\t\"type\":     \"ssh\",\n\t\t\"user\":     \"root\",\n\t})\n\n\treturn nil\n}\n\nfunc resourceBareMetalUpdate(d *schema.ResourceData, meta interface{}) error {\n\tclient := meta.(*Client)\n\n\td.Partial(true)\n\n\tif d.HasChange(\"application_id\") {\n\t\tlog.Printf(\"[INFO] Updating bare metal instance (%s) application\", d.Id())\n\t\told, new := d.GetChange(\"application_id\")\n\t\tif err := changeApplication(d.Id(), \"bare metal instance\", new.(string), client.ChangeApplicationofBareMetalServer, client.ListApplicationsforBareMetalServer); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif _, err := waitForResourceState(d, meta, \"bare metal instance\", \"application_id\", resourceBareMetalRead, new.(string), []string{\"\", old.(string)}); err != nil {\n\t\t\treturn err\n\t\t}\n\t\td.SetPartial(\"application_id\")\n\t}\n\n\tif d.HasChange(\"name\") {\n\t\tlog.Printf(\"[INFO] Updating bare metal instance (%s) name\", d.Id())\n\t\told, new := d.GetChange(\"name\")\n\t\tif err := client.RenameBareMetalServer(d.Id(), new.(string)); err != nil {\n\t\t\treturn fmt.Errorf(\"Error renaming bare metal instance (%s) to %q: %v\", d.Id(), new.(string), err)\n\t\t}\n\t\tif _, err := waitForResourceState(d, meta, \"bare metal instance\", \"name\", resourceBareMetalRead, new.(string), []string{\"\", old.(string)}); err != nil {\n\t\t\treturn err\n\t\t}\n\t\td.SetPartial(\"name\")\n\t}\n\n\tif d.HasChange(\"os_id\") {\n\t\tlog.Printf(\"[INFO] Updating bare metal instance (%s) OS\", d.Id())\n\t\told, new := d.GetChange(\"os_id\")\n\t\tif err := changeOS(d.Id(), \"bare metal instance\", new.(int), client.ChangeOSofBareMetalServer, client.ListOSforBareMetalServer); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif _, err := waitForResourceState(d, meta, \"bare metal instance\", \"os_id\", resourceBareMetalRead, strconv.FormatInt(int64(new.(int)), 10), []string{\"\", strconv.FormatInt(int64(old.(int)), 10)}); err != nil {\n\t\t\treturn err\n\t\t}\n\t\td.SetPartial(\"os_id\")\n\t}\n\n\tif d.HasChange(\"tag\") {\n\t\tlog.Printf(\"[INFO] Updating bare metal instance (%s) tag\", d.Id())\n\t\told, new := d.GetChange(\"tag\")\n\t\tif err := client.TagBareMetalServer(d.Id(), new.(string)); err != nil {\n\t\t\treturn fmt.Errorf(\"Error tagging bare metal instance (%s) with %q: %v\", d.Id(), new.(string), err)\n\t\t}\n\t\tif _, err := waitForResourceState(d, meta, \"bare metal instance\", \"tag\", resourceBareMetalRead, new.(string), []string{\"\", old.(string)}); err != nil {\n\t\t\treturn err\n\t\t}\n\t\td.SetPartial(\"tag\")\n\t}\n\n\td.Partial(false)\n\n\treturn resourceBareMetalRead(d, meta)\n}\n\nfunc resourceBareMetalDelete(d *schema.ResourceData, meta interface{}) error {\n\tclient := meta.(*Client)\n\n\tlog.Printf(\"[INFO] Destroying bare metal instance (%s)\", d.Id())\n\n\tif err := client.DeleteBareMetalServer(d.Id()); err != nil {\n\t\treturn fmt.Errorf(\"Error destroying bare metal instance (%s): %v\", d.Id(), err)\n\t}\n\n\t// Wait for the instance to be fully destroyed.\n\tif _, err := waitForResourceState(d, meta, \"bare metal instance\", \"status\", resourceBareMetalRead, \"none\", []string{\"pending\"}); err != nil {\n\t\treturn fmt.Errorf(\"Error waiting for bare metal instance (%s) to be destroyed: %v\", d.Id(), err)\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vultr/resource_block_storage.go",
    "content": "package vultr\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"strings\"\n\n\t\"github.com/hashicorp/terraform/helper/schema\"\n)\n\nfunc resourceBlockStorage() *schema.Resource {\n\treturn &schema.Resource{\n\t\tCreate: resourceBlockStorageCreate,\n\t\tRead:   resourceBlockStorageRead,\n\t\tUpdate: resourceBlockStorageUpdate,\n\t\tDelete: resourceBlockStorageDelete,\n\t\tImporter: &schema.ResourceImporter{\n\t\t\tState: schema.ImportStatePassthrough,\n\t\t},\n\n\t\tSchema: map[string]*schema.Schema{\n\t\t\t\"name\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tRequired: true,\n\t\t\t},\n\n\t\t\t\"region_id\": {\n\t\t\t\tType:     schema.TypeInt,\n\t\t\t\tRequired: true,\n\t\t\t\tForceNew: true,\n\t\t\t},\n\n\t\t\t\"size\": {\n\t\t\t\tType:     schema.TypeInt,\n\t\t\t\tRequired: true,\n\t\t\t},\n\n\t\t\t\"date_created\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"cost_per_month\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"status\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"instance\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tOptional: true,\n\t\t\t},\n\t\t},\n\t}\n}\n\nfunc resourceBlockStorageCreate(d *schema.ResourceData, meta interface{}) error {\n\tclient := meta.(*Client)\n\n\tname := d.Get(\"name\").(string)\n\tregionID := d.Get(\"region_id\").(int)\n\tsize := d.Get(\"size\").(int)\n\n\tlog.Printf(\"[INFO] Creating new block storage\")\n\tstorage, err := client.CreateBlockStorage(name, regionID, size)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"Error creating block storage: %v\", err)\n\t}\n\td.SetId(storage.ID)\n\n\tinstance := d.Get(\"instance\")\n\tif instance != \"\" {\n\t\tif err := client.AttachBlockStorage(d.Id(), instance.(string)); err != nil {\n\t\t\treturn fmt.Errorf(\"Error attaching newly created block storage (%s) to instance %q: %v\", d.Id(), instance.(string), err)\n\t\t}\n\t}\n\n\treturn resourceBlockStorageRead(d, meta)\n}\n\nfunc resourceBlockStorageRead(d *schema.ResourceData, meta interface{}) error {\n\tclient := meta.(*Client)\n\n\tstorage, err := client.GetBlockStorage(d.Id())\n\tif err != nil {\n\t\tif strings.HasPrefix(err.Error(), \"Invalid block storage\") {\n\t\t\tlog.Printf(\"[WARN] Removing block storage (%s) because it is gone\", d.Id())\n\t\t\td.SetId(\"\")\n\t\t\treturn nil\n\t\t}\n\t\treturn fmt.Errorf(\"Error getting block storage (%s): %v\", d.Id(), err)\n\t}\n\n\td.Set(\"cost_per_month\", storage.Cost)\n\td.Set(\"size\", storage.SizeGB)\n\td.Set(\"name\", storage.Name)\n\td.Set(\"region_id\", storage.RegionID)\n\td.Set(\"status\", storage.Status)\n\td.Set(\"instance\", storage.AttachedTo)\n\n\treturn nil\n}\n\nfunc resourceBlockStorageUpdate(d *schema.ResourceData, meta interface{}) error {\n\tclient := meta.(*Client)\n\n\td.Partial(true)\n\n\tif d.HasChange(\"name\") {\n\t\tlog.Printf(\"[INFO] Renaming block storage (%s)\", d.Id())\n\t\t_, new := d.GetChange(\"name\")\n\t\tif err := client.LabelBlockStorage(d.Id(), new.(string)); err != nil {\n\t\t\treturn fmt.Errorf(\"Error renaming block storage (%s) to %q: %v\", d.Id(), new.(string), err)\n\t\t}\n\t\td.SetPartial(\"name\")\n\t}\n\n\tif d.HasChange(\"size\") {\n\t\tlog.Printf(\"[INFO] Resizing block storage (%s)\", d.Id())\n\t\t_, new := d.GetChange(\"size\")\n\t\tif err := client.ResizeBlockStorage(d.Id(), new.(int)); err != nil {\n\t\t\treturn fmt.Errorf(\"Error resizing block storage (%s) to %q: %v\", d.Id(), new.(int), err)\n\t\t}\n\t\td.SetPartial(\"size\")\n\t}\n\n\tif d.HasChange(\"instance\") {\n\t\told, new := d.GetChange(\"instance\")\n\t\tif old != \"\" {\n\t\t\tlog.Printf(\"[INFO] Detaching block storage (%s)\", d.Id())\n\t\t\tif err := client.DetachBlockStorage(d.Id()); err != nil {\n\t\t\t\treturn fmt.Errorf(\"Error detaching block storage (%s): %v\", d.Id(), err)\n\t\t\t}\n\t\t}\n\t\tif new != \"\" {\n\t\t\tlog.Printf(\"[INFO] Attaching block storage (%s)\", d.Id())\n\t\t\tif err := client.AttachBlockStorage(d.Id(), new.(string)); err != nil {\n\t\t\t\treturn fmt.Errorf(\"Error attaching block storage (%s) to %q: %v\", d.Id(), new.(string), err)\n\t\t\t}\n\t\t}\n\t\td.SetPartial(\"instance\")\n\t}\n\n\treturn resourceBlockStorageRead(d, meta)\n}\n\nfunc resourceBlockStorageDelete(d *schema.ResourceData, meta interface{}) error {\n\tclient := meta.(*Client)\n\n\tlog.Printf(\"[INFO] Destroying block storage (%s)\", d.Id())\n\n\tinstance := d.Get(\"instance\").(string)\n\tif instance != \"\" {\n\t\t// We need to detach block storage before deleting it\n\t\tlog.Printf(\"[INFO] Dettaching block storage (%s) before deleting it.\", d.Id())\n\t\tif err := client.DetachBlockStorage(d.Id()); err != nil {\n\t\t\treturn fmt.Errorf(\"Error detaching block storage (%s): %v\", d.Id(), err)\n\t\t}\n\t}\n\tif err := client.DeleteBlockStorage(d.Id()); err != nil {\n\t\treturn fmt.Errorf(\"Error destroying block storage (%s): %v\", d.Id(), err)\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vultr/resource_dns_domain.go",
    "content": "package vultr\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"strings\"\n\n\t\"github.com/JamesClonk/vultr/lib\"\n\t\"github.com/hashicorp/terraform/helper/schema\"\n)\n\nfunc resourceDNSDomain() *schema.Resource {\n\treturn &schema.Resource{\n\t\tCreate: resourceDNSDomainCreate,\n\t\tRead:   resourceDNSDomainRead,\n\t\tUpdate: resourceDNSDomainUpdate,\n\t\tDelete: resourceDNSDomainDelete,\n\t\tImporter: &schema.ResourceImporter{\n\t\t\tState: schema.ImportStatePassthrough,\n\t\t},\n\n\t\tSchema: map[string]*schema.Schema{\n\t\t\t\"domain\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tRequired: true,\n\t\t\t\tForceNew: true,\n\t\t\t},\n\n\t\t\t\"ip\": {\n\t\t\t\tType:         schema.TypeString,\n\t\t\t\tRequired:     true,\n\t\t\t\tValidateFunc: validateIPAddress,\n\t\t\t},\n\t\t},\n\t}\n}\n\nfunc resourceDNSDomainCreate(d *schema.ResourceData, meta interface{}) error {\n\tclient := meta.(*Client)\n\n\tdomain := d.Get(\"domain\").(string)\n\tip := d.Get(\"ip\").(string)\n\n\tlog.Printf(\"[INFO] Creating new DNS domain\")\n\terr := client.CreateDNSDomain(domain, ip)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"Error creating DNS domain: %v\", err)\n\t}\n\n\td.SetId(domain)\n\n\treturn resourceDNSDomainRead(d, meta)\n}\n\nfunc resourceDNSDomainRead(d *schema.ResourceData, meta interface{}) error {\n\tclient := meta.(*Client)\n\n\tdnsDomains, err := client.GetDNSDomains()\n\tif err != nil {\n\t\treturn fmt.Errorf(\"Error getting DNS domains: %v\", err)\n\t}\n\n\tvar dnsDomain *lib.DNSDomain\n\tfor i := range dnsDomains {\n\t\tif dnsDomains[i].Domain == d.Id() {\n\t\t\tdnsDomain = &dnsDomains[i]\n\t\t\tbreak\n\t\t}\n\t}\n\n\tif dnsDomain == nil {\n\t\tlog.Printf(\"[WARN] Removing DNS domain (%s) because it is gone\", d.Id())\n\t\td.SetId(\"\")\n\t\treturn nil\n\t}\n\n\t// Find the default record for the domain.\n\trecords, err := client.GetDNSRecords(dnsDomain.Domain)\n\tif err != nil {\n\t\tif strings.HasPrefix(err.Error(), \"Invalid domain\") {\n\t\t\tlog.Printf(\"[WARN] Removing DNS domain (%s) because it has no default record\", d.Id())\n\t\t\td.SetId(\"\")\n\t\t\treturn nil\n\t\t}\n\t\treturn fmt.Errorf(\"Error getting DNS records for DNS domain (%s): %v\", d.Id(), err)\n\t}\n\n\tvar record *lib.DNSRecord\n\tfor i := range records {\n\t\tif records[i].Type == \"A\" && records[i].Name == \"\" {\n\t\t\trecord = &records[i]\n\t\t\tbreak\n\t\t}\n\t}\n\n\tif record == nil {\n\t\tlog.Printf(\"[WARN] Removing DNS domain (%s) because it has no default record\", d.Id())\n\t\td.SetId(\"\")\n\t\treturn nil\n\t}\n\n\td.Set(\"domain\", dnsDomain.Domain)\n\td.Set(\"ip\", record.Data)\n\n\treturn nil\n}\n\nfunc resourceDNSDomainUpdate(d *schema.ResourceData, meta interface{}) error {\n\tclient := meta.(*Client)\n\n\t// Find the default record for the domain.\n\trecords, err := client.GetDNSRecords(d.Id())\n\tif err != nil {\n\t\treturn fmt.Errorf(\"Error fetching default DNS record for DNS domain (%s): %v\", d.Id(), err)\n\t}\n\n\tvar record *lib.DNSRecord\n\tfor i := range records {\n\t\tif records[i].Type == \"A\" && records[i].Name == \"\" {\n\t\t\trecord = &records[i]\n\t\t\tbreak\n\t\t}\n\t}\n\n\t// Failed to find default record so read the domain again.\n\tif record == nil {\n\t\treturn resourceDNSDomainRead(d, meta)\n\t}\n\n\trecord.Data = d.Get(\"ip\").(string)\n\tif err := client.UpdateDNSRecord(d.Id(), *record); err != nil {\n\t\treturn fmt.Errorf(\"Error updating default DNS record for DNS domain (%s): %v\", d.Id(), err)\n\t}\n\n\treturn resourceDNSDomainRead(d, meta)\n}\n\nfunc resourceDNSDomainDelete(d *schema.ResourceData, meta interface{}) error {\n\tclient := meta.(*Client)\n\n\tlog.Printf(\"[INFO] Destroying DNS domain (%s)\", d.Id())\n\n\tif err := client.DeleteDNSDomain(d.Id()); err != nil {\n\t\treturn fmt.Errorf(\"Error destroying DNS domain (%s): %v\", d.Id(), err)\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vultr/resource_dns_record.go",
    "content": "package vultr\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"strings\"\n\n\t\"github.com/JamesClonk/vultr/lib\"\n\t\"github.com/hashicorp/terraform/helper/schema\"\n)\n\nfunc resourceDNSRecord() *schema.Resource {\n\treturn &schema.Resource{\n\t\tCreate: resourceDNSRecordCreate,\n\t\tRead:   resourceDNSRecordRead,\n\t\tUpdate: resourceDNSRecordUpdate,\n\t\tDelete: resourceDNSRecordDelete,\n\t\tImporter: &schema.ResourceImporter{\n\t\t\tState: schema.ImportStatePassthrough,\n\t\t},\n\n\t\tSchema: map[string]*schema.Schema{\n\t\t\t\"data\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tRequired: true,\n\t\t\t},\n\n\t\t\t\"domain\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tRequired: true,\n\t\t\t\tForceNew: true,\n\t\t\t},\n\n\t\t\t\"name\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tRequired: true,\n\t\t\t},\n\n\t\t\t\"priority\": {\n\t\t\t\tType:     schema.TypeInt,\n\t\t\t\tOptional: true,\n\t\t\t},\n\n\t\t\t\"type\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tOptional: true,\n\t\t\t\tForceNew: true,\n\t\t\t},\n\n\t\t\t\"ttl\": {\n\t\t\t\tType:     schema.TypeInt,\n\t\t\t\tComputed: true,\n\t\t\t\tOptional: true,\n\t\t\t},\n\t\t},\n\t}\n}\n\nfunc resourceDNSRecordCreate(d *schema.ResourceData, meta interface{}) error {\n\tclient := meta.(*Client)\n\n\tdata := d.Get(\"data\").(string)\n\tdomain := d.Get(\"domain\").(string)\n\tname := d.Get(\"name\").(string)\n\trecordType := d.Get(\"type\").(string)\n\n\tvar priority int\n\tif recordType == \"MX\" || recordType == \"SRV\" {\n\t\tif _, priorityOk := d.GetOk(\"priority\"); priorityOk {\n\t\t\tpriority = d.Get(\"priority\").(int)\n\t\t} else {\n\t\t\treturn fmt.Errorf(\"Records of type %s and %s require a priority\", \"MX\", \"SRV\")\n\t\t}\n\t}\n\n\tvar ttl int\n\tif _, ttlOk := d.GetOk(\"ttl\"); ttlOk {\n\t\tttl = d.Get(\"ttl\").(int)\n\t}\n\n\tlog.Printf(\"[INFO] Creating new DNS record\")\n\terr := client.CreateDNSRecord(domain, name, recordType, data, priority, ttl)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"Error creating DNS record: %v\", err)\n\t}\n\n\trecords, err := client.GetDNSRecords(domain)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"Error getting DNS record: %v\", err)\n\t}\n\tfor _, r := range records {\n\t\tif r.Data == data && r.Name == name && r.Type == recordType {\n\t\t\td.SetId(fmt.Sprintf(\"%s/%d\", domain, r.RecordID))\n\t\t\treturn resourceDNSRecordRead(d, meta)\n\t\t}\n\t}\n\n\treturn fmt.Errorf(\"Error finding DNS record: %v\", err)\n}\n\nfunc resourceDNSRecordRead(d *schema.ResourceData, meta interface{}) error {\n\tclient := meta.(*Client)\n\n\tdomain, id, err := parseStringSlashInt(d.Id(), \"DNS record ID\", \"domain\", \"record-ID\")\n\tif err != nil {\n\t\treturn err\n\t}\n\n\trecords, err := client.GetDNSRecords(domain)\n\tif err != nil {\n\t\tif strings.HasPrefix(err.Error(), \"Invalid domain\") {\n\t\t\tlog.Printf(\"[WARN] Removing DNS record (%s) because the domain is gone\", d.Id())\n\t\t\td.SetId(\"\")\n\t\t\treturn nil\n\t\t}\n\t\treturn fmt.Errorf(\"Error getting DNS records: %v\", err)\n\t}\n\n\tvar record *lib.DNSRecord\n\tfor i := range records {\n\t\tif records[i].RecordID == id {\n\t\t\trecord = &records[i]\n\t\t\tbreak\n\t\t}\n\t}\n\n\tif record == nil {\n\t\tlog.Printf(\"[WARN] Removing DNS record (%s) because it is gone\", d.Id())\n\t\td.SetId(\"\")\n\t\treturn nil\n\t}\n\n\td.Set(\"data\", record.Data)\n\td.Set(\"domain\", domain)\n\td.Set(\"name\", record.Name)\n\td.Set(\"priority\", record.Priority)\n\td.Set(\"ttl\", record.TTL)\n\td.Set(\"type\", record.Type)\n\n\treturn nil\n}\n\nfunc resourceDNSRecordUpdate(d *schema.ResourceData, meta interface{}) error {\n\tclient := meta.(*Client)\n\n\tdomain, id, err := parseStringSlashInt(d.Id(), \"DNS record ID\", \"domain\", \"record-ID\")\n\tif err != nil {\n\t\treturn err\n\t}\n\n\trecord := lib.DNSRecord{\n\t\tData:     d.Get(\"data\").(string),\n\t\tRecordID: id,\n\t\tName:     d.Get(\"name\").(string),\n\t\tPriority: d.Get(\"priority\").(int),\n\t\tTTL:      d.Get(\"ttl\").(int),\n\t\tType:     d.Get(\"type\").(string),\n\t}\n\n\tif err := client.UpdateDNSRecord(domain, record); err != nil {\n\t\treturn fmt.Errorf(\"Error updating DNS record (%s): %v\", d.Id(), err)\n\t}\n\n\treturn resourceDNSRecordRead(d, meta)\n}\n\nfunc resourceDNSRecordDelete(d *schema.ResourceData, meta interface{}) error {\n\tclient := meta.(*Client)\n\n\tdomain, id, err := parseStringSlashInt(d.Id(), \"DNS record ID\", \"domain\", \"record-ID\")\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tlog.Printf(\"[INFO] Destroying DNS record (%s)\", d.Id())\n\n\tif err := client.DeleteDNSRecord(domain, id); err != nil {\n\t\treturn fmt.Errorf(\"Error destroying DNS record (%s): %v\", d.Id(), err)\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vultr/resource_firewall_group.go",
    "content": "package vultr\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"strings\"\n\n\t\"github.com/hashicorp/terraform/helper/schema\"\n)\n\nfunc resourceFirewallGroup() *schema.Resource {\n\treturn &schema.Resource{\n\t\tCreate: resourceFirewallGroupCreate,\n\t\tRead:   resourceFirewallGroupRead,\n\t\tUpdate: resourceFirewallGroupUpdate,\n\t\tDelete: resourceFirewallGroupDelete,\n\t\tImporter: &schema.ResourceImporter{\n\t\t\tState: schema.ImportStatePassthrough,\n\t\t},\n\n\t\tSchema: map[string]*schema.Schema{\n\t\t\t\"description\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tOptional: true,\n\t\t\t},\n\n\t\t\t\"instance_count\": {\n\t\t\t\tType:     schema.TypeInt,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"max_rule_count\": {\n\t\t\t\tType:     schema.TypeInt,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"rule_count\": {\n\t\t\t\tType:     schema.TypeInt,\n\t\t\t\tComputed: true,\n\t\t\t},\n\t\t},\n\t}\n}\n\nfunc resourceFirewallGroupCreate(d *schema.ResourceData, meta interface{}) error {\n\tclient := meta.(*Client)\n\n\tlog.Printf(\"[INFO] Creating new firewall group\")\n\tid, err := client.CreateFirewallGroup(d.Get(\"description\").(string))\n\tif err != nil {\n\t\treturn fmt.Errorf(\"Error creating firewall group: %v\", err)\n\t}\n\n\td.SetId(id)\n\n\treturn resourceFirewallGroupRead(d, meta)\n}\n\nfunc resourceFirewallGroupRead(d *schema.ResourceData, meta interface{}) error {\n\tclient := meta.(*Client)\n\n\tfirewallGroup, err := client.GetFirewallGroup(d.Id())\n\tif err != nil {\n\t\tif strings.HasPrefix(err.Error(), fmt.Sprintf(\"Firewall group with ID %v not found\", d.Id())) {\n\t\t\tlog.Printf(\"[WARN] Removing firewall group (%s) because it is gone\", d.Id())\n\t\t\td.SetId(\"\")\n\t\t\treturn nil\n\t\t}\n\t\treturn fmt.Errorf(\"Error getting firewall group (%s): %v\", d.Id(), err)\n\t}\n\n\td.Set(\"description\", firewallGroup.Description)\n\td.Set(\"instance_count\", firewallGroup.InstanceCount)\n\td.Set(\"max_rule_count\", firewallGroup.MaxRuleCount)\n\td.Set(\"rule_count\", firewallGroup.RuleCount)\n\n\treturn nil\n}\n\nfunc resourceFirewallGroupUpdate(d *schema.ResourceData, meta interface{}) error {\n\tclient := meta.(*Client)\n\n\tif d.HasChange(\"description\") {\n\t\tlog.Printf(\"[INFO] Updating firewall group (%s) description\", d.Id())\n\t\tif err := client.SetFirewallGroupDescription(d.Id(), d.Get(\"description\").(string)); err != nil {\n\t\t\treturn fmt.Errorf(\"Error changing firewall group (%s) description to %q: %v\", d.Id(), d.Get(\"description\").(string), err)\n\t\t}\n\t}\n\n\treturn resourceFirewallGroupRead(d, meta)\n}\n\nfunc resourceFirewallGroupDelete(d *schema.ResourceData, meta interface{}) error {\n\tclient := meta.(*Client)\n\n\tlog.Printf(\"[INFO] Destroying firewall group (%s)\", d.Id())\n\n\tif err := client.DeleteFirewallGroup(d.Id()); err != nil {\n\t\treturn fmt.Errorf(\"Error destroying firewall group (%s): %v\", d.Id(), err)\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vultr/resource_firewall_rule.go",
    "content": "package vultr\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"net\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/JamesClonk/vultr/lib\"\n\t\"github.com/hashicorp/terraform/helper/schema\"\n)\n\nfunc resourceFirewallRule() *schema.Resource {\n\treturn &schema.Resource{\n\t\tCreate: resourceFirewallRuleCreate,\n\t\tRead:   resourceFirewallRuleRead,\n\t\tDelete: resourceFirewallRuleDelete,\n\t\tImporter: &schema.ResourceImporter{\n\t\t\tState: schema.ImportStatePassthrough,\n\t\t},\n\n\t\tSchema: map[string]*schema.Schema{\n\t\t\t\"action\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"cidr_block\": {\n\t\t\t\tType:         schema.TypeString,\n\t\t\t\tRequired:     true,\n\t\t\t\tForceNew:     true,\n\t\t\t\tValidateFunc: validateCIDRNetworkAddress,\n\t\t\t},\n\n\t\t\t\"direction\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"firewall_group_id\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tRequired: true,\n\t\t\t\tForceNew: true,\n\t\t\t},\n\n\t\t\t\"from_port\": {\n\t\t\t\tType:     schema.TypeInt,\n\t\t\t\tOptional: true,\n\t\t\t\tForceNew: true,\n\t\t\t},\n\n\t\t\t\"notes\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tOptional: true,\n\t\t\t\tForceNew: true,\n\t\t\t},\n\n\t\t\t\"protocol\": {\n\t\t\t\tType:         schema.TypeString,\n\t\t\t\tRequired:     true,\n\t\t\t\tForceNew:     true,\n\t\t\t\tValidateFunc: validateFirewallRuleProtocol,\n\t\t\t},\n\n\t\t\t\"to_port\": {\n\t\t\t\tType:     schema.TypeInt,\n\t\t\t\tOptional: true,\n\t\t\t\tForceNew: true,\n\t\t\t},\n\t\t},\n\t}\n}\n\nfunc resourceFirewallRuleCreate(d *schema.ResourceData, meta interface{}) error {\n\tclient := meta.(*Client)\n\n\t_, cidrBlock, err := net.ParseCIDR(d.Get(\"cidr_block\").(string))\n\tif err != nil {\n\t\treturn fmt.Errorf(\"Error parsing %q for firewall rule: %v\", \"cidr_block\", err)\n\t}\n\tfirewallGroupID := d.Get(\"firewall_group_id\").(string)\n\tfromPort := d.Get(\"from_port\").(int)\n\tnotes := d.Get(\"notes\").(string)\n\tprotocol := d.Get(\"protocol\").(string)\n\ttoPort := d.Get(\"to_port\").(int)\n\n\t_, fok := d.GetOk(\"from_port\")\n\t_, tok := d.GetOk(\"to_port\")\n\tif fok != tok {\n\t\treturn fmt.Errorf(\"Expected %q and %q to both be provided or both be empty\", \"from_port\", \"to_port\")\n\t}\n\n\tif (protocol == \"tcp\" || protocol == \"udp\") && !fok {\n\t\treturn fmt.Errorf(\"%q and %q are required for protocol of type %q\", \"from_port\", \"to_port\", protocol)\n\t}\n\n\tvar port string\n\tif fok {\n\t\tif fromPort != toPort {\n\t\t\tport = fmt.Sprintf(\"%d:%d\", fromPort, toPort)\n\t\t} else {\n\t\t\tport = strconv.Itoa(fromPort)\n\t\t}\n\t}\n\n\tlog.Printf(\"[INFO] Creating new firewall rule\")\n\tid, err := client.CreateFirewallRule(firewallGroupID, protocol, port, cidrBlock, notes)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"Error creating firewall rule: %v\", err)\n\t}\n\n\td.SetId(fmt.Sprintf(\"%s/%d\", firewallGroupID, id))\n\n\treturn resourceFirewallRuleRead(d, meta)\n}\n\nfunc resourceFirewallRuleRead(d *schema.ResourceData, meta interface{}) error {\n\tclient := meta.(*Client)\n\n\tfirewallGroupID, id, err := parseStringSlashInt(d.Id(), \"firewall rule ID\", \"firewall-group-id\", \"firewall-rule-number\")\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfirewallRules, err := client.GetFirewallRules(firewallGroupID)\n\tif err != nil {\n\t\tif strings.HasPrefix(err.Error(), \"Invalid firewall group\") {\n\t\t\tlog.Printf(\"[WARN] Removing firewall rule (%s) because the group is gone\", d.Id())\n\t\t\td.SetId(\"\")\n\t\t\treturn nil\n\t\t}\n\t\treturn fmt.Errorf(\"Error getting firewall rule (%s): %v\", d.Id(), err)\n\t}\n\n\tvar firewallRule *lib.FirewallRule\n\tfor _, f := range firewallRules {\n\t\tif f.RuleNumber == id {\n\t\t\tfirewallRule = &f\n\t\t\tbreak\n\t\t}\n\t}\n\n\tif firewallRule == nil {\n\t\tlog.Printf(\"[WARN] Removing firewall rule (%s) because it is gone\", d.Id())\n\t\td.SetId(\"\")\n\t\treturn nil\n\t}\n\n\td.Set(\"action\", firewallRule.Action)\n\td.Set(\"cidr_block\", firewallRule.Network.String())\n\td.Set(\"direction\", \"in\")\n\td.Set(\"firewall_group_id\", firewallGroupID)\n\td.Set(\"notes\", firewallRule.Notes)\n\td.Set(\"protocol\", firewallRule.Protocol)\n\tfrom, to, err := splitFirewallRule(firewallRule.Port)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"Error parsing port range for firewall rule (%s): %v\", d.Id(), err)\n\t}\n\td.Set(\"from_port\", from)\n\td.Set(\"to_port\", to)\n\n\treturn nil\n}\n\nfunc resourceFirewallRuleDelete(d *schema.ResourceData, meta interface{}) error {\n\tclient := meta.(*Client)\n\n\tfirewallGroupID, id, err := parseStringSlashInt(d.Id(), \"firewall rule ID\", \"firewall-group-id\", \"firewall-rule-number\")\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tlog.Printf(\"[INFO] Destroying firewall rule (%s)\", d.Id())\n\n\tif err := client.DeleteFirewallRule(id, firewallGroupID); err != nil {\n\t\treturn fmt.Errorf(\"Error destroying firewall rule (%s): %v\", d.Id(), err)\n\t}\n\n\treturn nil\n}\n\nfunc splitFirewallRule(portRange string) (int, int, error) {\n\tif len(portRange) == 0 || strings.TrimSpace(portRange) == \"-\" {\n\t\treturn 0, 0, nil\n\t}\n\tports := strings.Split(portRange, \"-\")\n\tfrom, err := strconv.Atoi(strings.TrimSpace(ports[0]))\n\tif err != nil {\n\t\treturn 0, 0, err\n\t}\n\tif len(ports) == 1 {\n\t\treturn from, from, nil\n\t}\n\tto, err := strconv.Atoi(strings.TrimSpace(ports[1]))\n\tif err != nil {\n\t\treturn 0, 0, err\n\t}\n\treturn from, to, nil\n}\n"
  },
  {
    "path": "vultr/resource_firewall_rule_test.go",
    "content": "package vultr\n\nimport (\n\t\"testing\"\n)\n\nfunc TestSplitFirewallRule(t *testing.T) {\n\tcases := []struct {\n\t\tportRange string\n\t\tfrom      int\n\t\tto        int\n\t\terr       bool\n\t}{\n\t\t{\n\t\t\tportRange: \"\",\n\t\t\tfrom:      0,\n\t\t\tto:        0,\n\t\t\terr:       false,\n\t\t},\n\t\t{\n\t\t\tportRange: \":\",\n\t\t\tfrom:      0,\n\t\t\tto:        0,\n\t\t\terr:       true,\n\t\t},\n\t\t{\n\t\t\tportRange: \"-\",\n\t\t\tfrom:      0,\n\t\t\tto:        0,\n\t\t\terr:       false,\n\t\t},\n\t\t{\n\t\t\tportRange: \" - \",\n\t\t\tfrom:      0,\n\t\t\tto:        0,\n\t\t\terr:       false,\n\t\t},\n\t\t{\n\t\t\tportRange: \"22\",\n\t\t\tfrom:      22,\n\t\t\tto:        22,\n\t\t\terr:       false,\n\t\t},\n\t\t{\n\t\t\tportRange: \"foo\",\n\t\t\tfrom:      0,\n\t\t\tto:        0,\n\t\t\terr:       true,\n\t\t},\n\t\t{\n\t\t\tportRange: \"22:23\",\n\t\t\tfrom:      0,\n\t\t\tto:        0,\n\t\t\terr:       true,\n\t\t},\n\t\t{\n\t\t\tportRange: \"22 - 23\",\n\t\t\tfrom:      22,\n\t\t\tto:        23,\n\t\t\terr:       false,\n\t\t},\n\t\t{\n\t\t\tportRange: \"80-81\",\n\t\t\tfrom:      80,\n\t\t\tto:        81,\n\t\t\terr:       false,\n\t\t},\n\t}\n\n\tfor i, c := range cases {\n\t\tfrom, to, err := splitFirewallRule(c.portRange)\n\t\tif (err != nil) != c.err {\n\t\t\tno := \"no\"\n\t\t\tif c.err {\n\t\t\t\tno = \"an\"\n\t\t\t}\n\t\t\tt.Errorf(\"test case %d: expected %s error, got %v\", i, no, err)\n\t\t}\n\t\tif from != c.from || to != c.to {\n\t\t\tt.Errorf(\"test case %d: expected range %d:%d, got %d:%d\", i, c.from, c.to, from, to)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "vultr/resource_instance.go",
    "content": "package vultr\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"net\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/JamesClonk/vultr/lib\"\n\t\"github.com/hashicorp/terraform/helper/schema\"\n)\n\nconst (\n\tosIDSnapshot = 164\n)\n\nfunc resourceInstance() *schema.Resource {\n\treturn &schema.Resource{\n\t\tCreate: resourceInstanceCreate,\n\t\tRead:   resourceInstanceRead,\n\t\tUpdate: resourceInstanceUpdate,\n\t\tDelete: resourceInstanceDelete,\n\t\tImporter: &schema.ResourceImporter{\n\t\t\tState: schema.ImportStatePassthrough,\n\t\t},\n\n\t\tSchema: map[string]*schema.Schema{\n\t\t\t\"application_id\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tComputed: true,\n\t\t\t\tOptional: true,\n\t\t\t},\n\n\t\t\t\"auto_backups\": {\n\t\t\t\tType:     schema.TypeBool,\n\t\t\t\tOptional: true,\n\t\t\t\tForceNew: true,\n\t\t\t},\n\n\t\t\t\"cost_per_month\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"default_password\": {\n\t\t\t\tType:      schema.TypeString,\n\t\t\t\tComputed:  true,\n\t\t\t\tSensitive: true,\n\t\t\t},\n\n\t\t\t\"disk\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"firewall_group_id\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tOptional: true,\n\t\t\t},\n\n\t\t\t\"hostname\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tOptional: true,\n\t\t\t\tForceNew: true,\n\t\t\t},\n\n\t\t\t\"ipv4_address\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"ipv4_gateway\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"ipv4_mac\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"ipv4_mask\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"ipv4_private_cidr\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"ipv6\": {\n\t\t\t\tType:     schema.TypeBool,\n\t\t\t\tOptional: true,\n\t\t\t\tForceNew: true,\n\t\t\t},\n\n\t\t\t\"ipv6_addresses\": {\n\t\t\t\tType:     schema.TypeList,\n\t\t\t\tComputed: true,\n\t\t\t\tElem:     &schema.Schema{Type: schema.TypeString},\n\t\t\t},\n\n\t\t\t\"name\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tOptional: true,\n\t\t\t},\n\n\t\t\t\"networks\": {\n\t\t\t\tType:     schema.TypeMap,\n\t\t\t\tComputed: true,\n\t\t\t\tElem:     &schema.Schema{Type: schema.TypeString},\n\t\t\t},\n\n\t\t\t\"network_ids\": {\n\t\t\t\tType:     schema.TypeList,\n\t\t\t\tComputed: true,\n\t\t\t\tOptional: true,\n\t\t\t\tElem:     &schema.Schema{Type: schema.TypeString},\n\t\t\t},\n\n\t\t\t\"network_macs\": {\n\t\t\t\tType:     schema.TypeMap,\n\t\t\t\tComputed: true,\n\t\t\t\tElem:     &schema.Schema{Type: schema.TypeString},\n\t\t\t},\n\n\t\t\t\"notify_activate\": {\n\t\t\t\tType:     schema.TypeBool,\n\t\t\t\tOptional: true,\n\t\t\t\tForceNew: true,\n\t\t\t},\n\n\t\t\t\"os_id\": {\n\t\t\t\tType:     schema.TypeInt,\n\t\t\t\tComputed: true,\n\t\t\t\tOptional: true,\n\t\t\t},\n\n\t\t\t\"plan_id\": {\n\t\t\t\tType:     schema.TypeInt,\n\t\t\t\tRequired: true,\n\t\t\t\tForceNew: true,\n\t\t\t},\n\n\t\t\t\"power_status\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"private_networking\": {\n\t\t\t\tType:     schema.TypeBool,\n\t\t\t\tOptional: true,\n\t\t\t\tForceNew: true,\n\t\t\t},\n\n\t\t\t\"ram\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"region_id\": {\n\t\t\t\tType:     schema.TypeInt,\n\t\t\t\tRequired: true,\n\t\t\t\tForceNew: true,\n\t\t\t},\n\n\t\t\t\"server_state\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"snapshot_id\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tOptional: true,\n\t\t\t\tForceNew: true,\n\t\t\t},\n\n\t\t\t\"startup_script_id\": {\n\t\t\t\tType:     schema.TypeInt,\n\t\t\t\tOptional: true,\n\t\t\t\tForceNew: true,\n\t\t\t},\n\n\t\t\t\"ssh_key_ids\": {\n\t\t\t\tType:     schema.TypeList,\n\t\t\t\tOptional: true,\n\t\t\t\tForceNew: true,\n\t\t\t\tElem:     &schema.Schema{Type: schema.TypeString},\n\t\t\t},\n\n\t\t\t\"status\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"tag\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tOptional: true,\n\t\t\t},\n\n\t\t\t\"user_data\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tOptional: true,\n\t\t\t\tForceNew: true,\n\t\t\t},\n\n\t\t\t\"vcpus\": {\n\t\t\t\tType:     schema.TypeInt,\n\t\t\t\tComputed: true,\n\t\t\t},\n\t\t},\n\t}\n}\n\nfunc resourceInstanceCreate(d *schema.ResourceData, meta interface{}) error {\n\t_, appOK := d.GetOk(\"application_id\")\n\t_, osOK := d.GetOk(\"os_id\")\n\t_, snapshotOK := d.GetOk(\"snapshot_id\")\n\t// At most one.\n\tif appOK && snapshotOK {\n\t\treturn fmt.Errorf(\"Only one of %q and %q may be provided but not both\", \"application_id\", \"snapshot_id\")\n\t}\n\t// Exactly one.\n\tif osOK == snapshotOK {\n\t\treturn fmt.Errorf(\"One of %q and %q must be provided but not both\", \"os_id\", \"snapshot_id\")\n\t}\n\n\tclient := meta.(*Client)\n\toptions := &lib.ServerOptions{\n\t\tAppID:                d.Get(\"application_id\").(string),\n\t\tAutoBackups:          d.Get(\"auto_backups\").(bool),\n\t\tDontNotifyOnActivate: !d.Get(\"notify_activate\").(bool),\n\t\tFirewallGroupID:      d.Get(\"firewall_group_id\").(string),\n\t\tHostname:             d.Get(\"hostname\").(string),\n\t\tIPV6:                 d.Get(\"ipv6\").(bool),\n\t\tPrivateNetworking:    d.Get(\"private_networking\").(bool),\n\t\tScript:               d.Get(\"startup_script_id\").(int),\n\t\tSnapshot:             d.Get(\"snapshot_id\").(string),\n\t\tTag:                  d.Get(\"tag\").(string),\n\t\tUserData:             d.Get(\"user_data\").(string),\n\t}\n\n\tname := d.Get(\"name\").(string)\n\tvar osID int\n\tif snapshotOK {\n\t\tosID = osIDSnapshot\n\t} else {\n\t\tosID = d.Get(\"os_id\").(int)\n\t}\n\tplanID := d.Get(\"plan_id\").(int)\n\tregionID := d.Get(\"region_id\").(int)\n\n\tnetIDs := make([]string, d.Get(\"network_ids.#\").(int))\n\tfor i, id := range d.Get(\"network_ids\").([]interface{}) {\n\t\tnetIDs[i] = id.(string)\n\t}\n\toptions.Networks = netIDs\n\n\tkeyIDs := make([]string, d.Get(\"ssh_key_ids.#\").(int))\n\tfor i, id := range d.Get(\"ssh_key_ids\").([]interface{}) {\n\t\tkeyIDs[i] = id.(string)\n\t}\n\toptions.SSHKey = strings.Join(keyIDs, \",\")\n\n\tlog.Printf(\"[INFO] Creating new instance\")\n\tinstance, err := client.CreateServer(name, regionID, planID, osID, options)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"Error creating instance: %v\", err)\n\t}\n\td.SetId(instance.ID)\n\n\tif _, err := waitForResourceState(d, meta, \"instance\", \"status\", resourceInstanceRead, \"active\", []string{\"pending\"}); err != nil {\n\t\treturn err\n\t}\n\tif _, err := waitForResourceState(d, meta, \"instance\", \"power_status\", resourceInstanceRead, \"running\", []string{\"starting\", \"stopped\"}); err != nil {\n\t\treturn err\n\t}\n\n\treturn resourceInstanceRead(d, meta)\n}\n\nfunc resourceInstanceRead(d *schema.ResourceData, meta interface{}) error {\n\tclient := meta.(*Client)\n\n\tinstance, err := client.GetServer(d.Id())\n\tif err != nil {\n\t\tif strings.HasPrefix(err.Error(), \"Invalid server\") {\n\t\t\tlog.Printf(\"[WARN] Removing instance (%s) because it is gone\", d.Id())\n\t\t\td.SetId(\"\")\n\t\t\treturn nil\n\t\t}\n\t\treturn fmt.Errorf(\"Error getting instance (%s): %v\", d.Id(), err)\n\t}\n\n\tnetworks, err := client.ListPrivateNetworksForServer(d.Id())\n\tif err != nil {\n\t\treturn fmt.Errorf(\"Error getting private networks for instance (%s): %v\", d.Id(), err)\n\t}\n\tnets := make(map[string]string)\n\tnetMACs := make(map[string]string)\n\tvar networkIDs []string\n\tfor _, n := range networks {\n\t\tnets[n.ID] = n.IPAddress\n\t\tnetMACs[n.ID] = n.MACAddress\n\t\tnetworkIDs = append(networkIDs, n.ID)\n\t}\n\n\tosID, err := strconv.Atoi(instance.OSID)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"OS ID must be an integer: %v\", err)\n\t}\n\n\tipv4s, err := client.ListIPv4(d.Id())\n\tif err != nil {\n\t\treturn fmt.Errorf(\"Error getting IPv4 networks for instance (%s): %v\", d.Id(), err)\n\t}\n\n\tvar mainMac string\n\terr = func() error {\n\t\tfor _, n := range ipv4s {\n\t\t\tif n.Type == \"main_ip\" {\n\t\t\t\tmainMac = n.MAC\n\t\t\t\tif mainMac == \"\" {\n\t\t\t\t\treturn fmt.Errorf(\"no MAC returned for main_ip\")\n\t\t\t\t}\n\t\t\t\treturn nil\n\t\t\t}\n\t\t}\n\t\treturn fmt.Errorf(\"no address of type main_ip found\")\n\t}()\n\tif err != nil {\n\t\treturn fmt.Errorf(\"Error finding main interface MAC for instance (%s): %v\", d.Id(), err)\n\t}\n\n\tvar size int\n\tif instance.InternalIP != \"\" {\n\t\terr = func() error {\n\t\t\tfor _, n := range ipv4s {\n\t\t\t\tif n.IP == instance.InternalIP {\n\t\t\t\t\tsize, _ = parseIPv4Mask(n.Netmask).Size()\n\t\t\t\t\treturn nil\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn fmt.Errorf(\"no matching address for %q in IPv4 list\", instance.InternalIP)\n\t\t}()\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"Error finding private IPv4 subnet mask for instance (%s): %v\", d.Id(), err)\n\t\t}\n\t}\n\n\td.Set(\"application_id\", instance.AppID)\n\td.Set(\"auto_backups\", instance.AutoBackups)\n\td.Set(\"cost_per_month\", instance.Cost)\n\td.Set(\"default_password\", instance.DefaultPassword)\n\td.Set(\"disk\", instance.Disk)\n\td.Set(\"firewall_group_id\", instance.FirewallGroupID)\n\td.Set(\"ipv4_address\", instance.MainIP)\n\td.Set(\"ipv4_gateway\", instance.GatewayV4)\n\td.Set(\"ipv4_mac\", mainMac)\n\td.Set(\"ipv4_mask\", instance.NetmaskV4)\n\td.Set(\"ipv4_private_cidr\", fmt.Sprintf(\"%s/%d\", instance.InternalIP, size))\n\td.Set(\"name\", instance.Name)\n\td.Set(\"networks\", nets)\n\td.Set(\"network_macs\", netMACs)\n\td.Set(\"network_ids\", networkIDs)\n\td.Set(\"os_id\", osID)\n\td.Set(\"plan_id\", instance.PlanID)\n\td.Set(\"power_status\", instance.PowerStatus)\n\td.Set(\"ram\", instance.RAM)\n\td.Set(\"region_id\", instance.RegionID)\n\td.Set(\"status\", instance.Status)\n\td.Set(\"server_state\", instance.ServerState)\n\td.Set(\"tag\", instance.Tag)\n\td.Set(\"vcpus\", instance.VCpus)\n\n\tvar ipv6s []string\n\tfor _, net := range instance.V6Networks {\n\t\tipv6s = append(ipv6s, net.MainIP)\n\t}\n\td.Set(\"ipv6_addresses\", ipv6s)\n\n\treturn nil\n}\n\nfunc resourceInstanceUpdate(d *schema.ResourceData, meta interface{}) error {\n\tclient := meta.(*Client)\n\n\td.Partial(true)\n\n\tif d.HasChange(\"application_id\") {\n\t\tlog.Printf(\"[INFO] Updating instance (%s) application\", d.Id())\n\t\told, new := d.GetChange(\"application_id\")\n\t\tif err := changeApplication(d.Id(), \"instance\", new.(string), client.ChangeApplicationofServer, client.ListApplicationsforServer); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif _, err := waitForResourceState(d, meta, \"instance\", \"application_id\", resourceInstanceRead, new.(string), []string{\"\", old.(string)}); err != nil {\n\t\t\treturn err\n\t\t}\n\t\td.SetPartial(\"application_id\")\n\t}\n\n\tif d.HasChange(\"firewall_group_id\") {\n\t\tlog.Printf(\"[INFO] Updating instance (%s) firewall group\", d.Id())\n\t\told, new := d.GetChange(\"firewall_group_id\")\n\t\tif err := client.SetFirewallGroup(d.Id(), new.(string)); err != nil {\n\t\t\treturn fmt.Errorf(\"Error changing instance (%s) firewall group to %q: %v\", d.Id(), new.(string), err)\n\t\t}\n\t\tif _, err := waitForResourceState(d, meta, \"instance\", \"firewall_group_id\", resourceInstanceRead, new.(string), []string{old.(string)}); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tif d.HasChange(\"name\") {\n\t\tlog.Printf(\"[INFO] Updating instance (%s) name\", d.Id())\n\t\told, new := d.GetChange(\"name\")\n\t\tif err := client.RenameServer(d.Id(), new.(string)); err != nil {\n\t\t\treturn fmt.Errorf(\"Error renaming instance (%s) to %q: %v\", d.Id(), new.(string), err)\n\t\t}\n\t\tif _, err := waitForResourceState(d, meta, \"instance\", \"name\", resourceInstanceRead, new.(string), []string{\"\", old.(string)}); err != nil {\n\t\t\treturn err\n\t\t}\n\t\td.SetPartial(\"name\")\n\t}\n\n\tif d.HasChange(\"network_ids\") {\n\t\tlog.Printf(\"[INFO] Updating instance (%s) networks\", d.Id())\n\t\told, new := d.GetChange(\"network_ids\")\n\t\toldIDs := make([]string, len(old.([]interface{})))\n\t\tfor i, id := range old.([]interface{}) {\n\t\t\toldIDs[i] = id.(string)\n\t\t}\n\t\tnewIDs := make([]string, len(new.([]interface{})))\n\t\tfor i, id := range new.([]interface{}) {\n\t\t\tnewIDs[i] = id.(string)\n\t\t}\n\t\tadd := stringsDiff(oldIDs, newIDs)\n\t\tdel := stringsDiff(newIDs, oldIDs)\n\t\tfor _, n := range add {\n\t\t\tif err := client.EnablePrivateNetworkForServer(d.Id(), n); err != nil {\n\t\t\t\treturn fmt.Errorf(\"Error attaching instance (%s) to private network %q: %v\", d.Id(), n, err)\n\t\t\t}\n\t\t}\n\t\tfor _, n := range del {\n\t\t\tif err := client.DisablePrivateNetworkForServer(d.Id(), n); err != nil {\n\t\t\t\treturn fmt.Errorf(\"Error detaching instance (%s) to private network %q: %v\", d.Id(), n, err)\n\t\t\t}\n\t\t}\n\t\td.SetPartial(\"network_ids\")\n\t}\n\n\tif d.HasChange(\"os_id\") {\n\t\tlog.Printf(\"[INFO] Updating instance (%s) OS\", d.Id())\n\t\told, new := d.GetChange(\"os_id\")\n\t\tif err := changeOS(d.Id(), \"instance\", new.(int), client.ChangeOSofServer, client.ListOSforServer); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif _, err := waitForResourceState(d, meta, \"instance\", \"os_id\", resourceInstanceRead, strconv.FormatInt(int64(new.(int)), 10), []string{\"\", strconv.FormatInt(int64(old.(int)), 10)}); err != nil {\n\t\t\treturn err\n\t\t}\n\t\td.SetPartial(\"os_id\")\n\t}\n\n\tif d.HasChange(\"tag\") {\n\t\tlog.Printf(\"[INFO] Updating instance (%s) tag\", d.Id())\n\t\told, new := d.GetChange(\"tag\")\n\t\tif err := client.TagServer(d.Id(), new.(string)); err != nil {\n\t\t\treturn fmt.Errorf(\"Error tagging instance (%s) with %q: %v\", d.Id(), new.(string), err)\n\t\t}\n\t\tif _, err := waitForResourceState(d, meta, \"instance\", \"tag\", resourceInstanceRead, new.(string), []string{\"\", old.(string)}); err != nil {\n\t\t\treturn err\n\t\t}\n\t\td.SetPartial(\"tag\")\n\t}\n\n\td.Partial(false)\n\n\treturn resourceInstanceRead(d, meta)\n}\n\nfunc resourceInstanceDelete(d *schema.ResourceData, meta interface{}) error {\n\tclient := meta.(*Client)\n\n\tlog.Printf(\"[INFO] Destroying instance (%s)\", d.Id())\n\n\tfor {\n\t\t// The Vultr API does not allow us to directly check the a server's state if it is being destroyed.\n\t\t// However, we can infer this state from the responses of the destroy endpoint.\n\t\t// If there was no error, then we need to try destroying again.\n\t\tif err := client.DeleteServer(d.Id()); err != nil {\n\t\t\t// Server is locked and still being destroyed. We need to try again.\n\t\t\tif err.Error() == \"Unable to destroy server: Unable to remove VM: Server is currently locked\" {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// Server is pending destruction. We need to wait and try again.\n\t\t\tif err.Error() == \"Unable to destroy server: Server is already pending destruction.\" {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// Server does not exist so it has been deleted.\n\t\t\tif strings.HasPrefix(err.Error(), \"Invalid server\") {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\t// There was a legitimate error.\n\t\t\treturn fmt.Errorf(\"Error destroying instance (%s): %v\", d.Id(), err)\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// changeOS will try to change the OS of a instance or bare metal instance.\n// If there is an error, it will return an error with the list of valid OSs.\nfunc changeOS(id, resourceType string, new int, change func(string, int) error, list func(string) ([]lib.OS, error)) error {\n\tif err := change(id, new); err != nil {\n\t\tvar validOS string\n\t\tos, oserr := list(id)\n\t\tif oserr != nil {\n\t\t\tlog.Printf(\"[Error] failed to get available OSs for %s (%s)\", resourceType, id)\n\t\t} else {\n\t\t\tvar oss []string\n\t\t\tfor i := range os {\n\t\t\t\toss = append(oss, strconv.FormatInt(int64(os[i].ID), 10))\n\t\t\t}\n\t\t\tvalidOS = fmt.Sprintf(\" Valid OSs are %s\", strings.Join(oss, \", \"))\n\t\t}\n\t\treturn fmt.Errorf(\"Error changing OS of %s (%s) to %d: %v%s\", resourceType, id, new, err, validOS)\n\t}\n\treturn nil\n}\n\n// changeApplication will try to change the appliation of an instance or bare metal instance.\n// If there is an error, it will return an error with the list of valid applications.\nfunc changeApplication(id, resourceType string, new string, change func(string, string) error, list func(string) ([]lib.Application, error)) error {\n\tif err := change(id, new); err != nil {\n\t\tvar validApp string\n\t\tapp, apperr := list(id)\n\t\tif apperr != nil {\n\t\t\tlog.Printf(\"[Error] failed to get available applications for %s (%s)\", resourceType, id)\n\t\t} else {\n\t\t\tvar apps []string\n\t\t\tfor i := range app {\n\t\t\t\tapps = append(apps, app[i].ID)\n\t\t\t}\n\t\t\tvalidApp = fmt.Sprintf(\" Valid applications are %s\", strings.Join(apps, \", \"))\n\t\t}\n\t\treturn fmt.Errorf(\"Error changing application of %s (%s) to %s: %v%s\", resourceType, id, new, err, validApp)\n\t}\n\treturn nil\n}\n\nfunc parseIPv4Mask(s string) net.IPMask {\n\tmask := net.ParseIP(s)\n\tif mask == nil {\n\t\treturn nil\n\t}\n\treturn net.IPv4Mask(mask[12], mask[13], mask[14], mask[15])\n}\n\n// stringsDiff returns the strings that are in after and not\n// in before.\nfunc stringsDiff(before []string, after []string) []string {\n\tvar diff []string\n\tb := map[string]struct{}{}\n\tfor i := range before {\n\t\tb[before[i]] = struct{}{}\n\t}\n\tfor i := range after {\n\t\tif _, ok := b[after[i]]; !ok {\n\t\t\tdiff = append(diff, after[i])\n\t\t}\n\t}\n\treturn diff\n}\n"
  },
  {
    "path": "vultr/resource_ipv4.go",
    "content": "package vultr\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"log\"\n\t\"strings\"\n\n\t\"github.com/JamesClonk/vultr/lib\"\n\t\"github.com/hashicorp/terraform/helper/schema\"\n)\n\nfunc resourceIPV4() *schema.Resource {\n\treturn &schema.Resource{\n\t\tCreate: resourceIPV4Create,\n\t\tRead:   resourceIPV4Read,\n\t\tUpdate: resourceIPV4Update,\n\t\tDelete: resourceIPV4Delete,\n\t\tImporter: &schema.ResourceImporter{\n\t\t\tState: schema.ImportStatePassthrough,\n\t\t},\n\n\t\tSchema: map[string]*schema.Schema{\n\t\t\t\"gateway\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"ipv4_address\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"instance_id\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tRequired: true,\n\t\t\t\tForceNew: true,\n\t\t\t},\n\n\t\t\t\"netmask\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"reboot\": {\n\t\t\t\tType:     schema.TypeBool,\n\t\t\t\tOptional: true,\n\t\t\t\tDefault:  true,\n\t\t\t},\n\n\t\t\t\"reverse_dns\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tComputed: true,\n\t\t\t},\n\t\t},\n\t}\n}\n\nfunc resourceIPV4Create(d *schema.ResourceData, meta interface{}) error {\n\tclient := meta.(*Client)\n\n\tinstance := d.Get(\"instance_id\").(string)\n\treboot := d.Get(\"reboot\").(bool)\n\n\tlog.Printf(\"[INFO] Creating new IPv4 address\")\n\n\tvultrMutexKV.Lock(instance)\n\tips, err := client.ListIPv4(instance)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"Error listing IPv4 addresses: %v\", err)\n\t}\n\tif err := client.CreateIPv4(instance, reboot); err != nil {\n\t\treturn fmt.Errorf(\"Error creating IPv4 address: %v\", err)\n\t}\n\tnewIPs, err := client.ListIPv4(instance)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"Error re-listing IPv4 addresses: %v\", err)\n\t}\n\tvultrMutexKV.Unlock(instance)\n\n\tvar ip *lib.IPv4\n\tfor i := range newIPs {\n\t\tvar found bool\n\t\tfor j := range ips {\n\t\t\tif newIPs[i] == ips[j] {\n\t\t\t\tfound = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif !found {\n\t\t\tip = &newIPs[i]\n\t\t\tbreak\n\t\t}\n\t}\n\tif ip == nil {\n\t\treturn errors.New(\"Error finding created IPv4 address\")\n\t}\n\n\td.SetId(fmt.Sprintf(\"%s/%s\", instance, ip.IP))\n\n\treturn resourceIPV4Read(d, meta)\n}\n\nfunc resourceIPV4Read(d *schema.ResourceData, meta interface{}) error {\n\tclient := meta.(*Client)\n\n\tinstance, id, err := parseStringSlashString(d.Id(), \"IPv4 ID\", \"instance-id\", \"ip-address\")\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tips, err := client.ListIPv4(instance)\n\tif err != nil {\n\t\tif strings.HasPrefix(err.Error(), \"Invalid server\") {\n\t\t\tlog.Printf(\"[WARN] Removing IPv4 address (%s) because the attached instance (%s) is gone\", d.Id(), instance)\n\t\t\td.SetId(\"\")\n\t\t\treturn nil\n\t\t}\n\t\treturn fmt.Errorf(\"Error getting IPv4 addresses: %v\", err)\n\t}\n\tvar ip *lib.IPv4\n\tfor i := range ips {\n\t\tif ips[i].IP == id {\n\t\t\tip = &ips[i]\n\t\t\tbreak\n\t\t}\n\t}\n\tif ip == nil {\n\t\tlog.Printf(\"[WARN] Removing IPv4 address (%s) because it is gone\", d.Id())\n\t\td.SetId(\"\")\n\t\treturn nil\n\t}\n\n\td.Set(\"gateway\", ip.Gateway)\n\td.Set(\"ipv4_address\", ip.IP)\n\td.Set(\"netmask\", ip.Netmask)\n\td.Set(\"reverse_dns\", ip.ReverseDNS)\n\n\treturn nil\n}\n\nfunc resourceIPV4Update(d *schema.ResourceData, meta interface{}) error {\n\treturn resourceIPV4Read(d, meta)\n}\n\nfunc resourceIPV4Delete(d *schema.ResourceData, meta interface{}) error {\n\tclient := meta.(*Client)\n\n\tinstance, id, err := parseStringSlashString(d.Id(), \"IPv4 ID\", \"instance-id\", \"ip-address\")\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tlog.Printf(\"[INFO] Destroying IPv4 address (%s)\", d.Id())\n\n\tif err := client.DeleteIPv4(instance, id); err != nil {\n\t\treturn fmt.Errorf(\"Error destroying IPv4 address (%s): %v\", d.Id(), err)\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vultr/resource_network.go",
    "content": "package vultr\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"net\"\n\n\t\"github.com/JamesClonk/vultr/lib\"\n\t\"github.com/hashicorp/terraform/helper/schema\"\n)\n\nfunc resourceNetwork() *schema.Resource {\n\treturn &schema.Resource{\n\t\tCreate: resourceNetworkCreate,\n\t\tRead:   resourceNetworkRead,\n\t\tDelete: resourceNetworkDelete,\n\t\tImporter: &schema.ResourceImporter{\n\t\t\tState: schema.ImportStatePassthrough,\n\t\t},\n\n\t\tSchema: map[string]*schema.Schema{\n\t\t\t\"cidr_block\": {\n\t\t\t\tType:         schema.TypeString,\n\t\t\t\tComputed:     true,\n\t\t\t\tOptional:     true,\n\t\t\t\tForceNew:     true,\n\t\t\t\tValidateFunc: validateCIDRNetworkAddress,\n\t\t\t},\n\n\t\t\t\"description\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tOptional: true,\n\t\t\t\tForceNew: true,\n\t\t\t},\n\n\t\t\t\"region_id\": {\n\t\t\t\tType:     schema.TypeInt,\n\t\t\t\tRequired: true,\n\t\t\t\tForceNew: true,\n\t\t\t},\n\t\t},\n\t}\n}\n\nfunc resourceNetworkCreate(d *schema.ResourceData, meta interface{}) error {\n\tclient := meta.(*Client)\n\n\tvar cidrBlock *net.IPNet\n\tvar err error\n\tif _, ok := d.GetOkExists(\"cidr_block\"); ok {\n\t\t_, cidrBlock, err = net.ParseCIDR(d.Get(\"cidr_block\").(string))\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"Error parsing %q for netword: %v\", \"cidr_block\", err)\n\t\t}\n\t}\n\tdescription := d.Get(\"description\").(string)\n\tregionID := d.Get(\"region_id\").(int)\n\n\tlog.Printf(\"[INFO] Creating new network\")\n\tnetwork, err := client.CreateNetwork(regionID, description, cidrBlock)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"Error creating network: %v\", err)\n\t}\n\n\td.SetId(network.ID)\n\n\treturn resourceNetworkRead(d, meta)\n}\n\nfunc resourceNetworkRead(d *schema.ResourceData, meta interface{}) error {\n\tclient := meta.(*Client)\n\n\tnetworks, err := client.GetNetworks()\n\tif err != nil {\n\t\treturn fmt.Errorf(\"Error getting network (%s): %v\", d.Id(), err)\n\t}\n\n\tvar network *lib.Network\n\tfor _, n := range networks {\n\t\tif n.ID == d.Id() {\n\t\t\tnetwork = &n\n\t\t\tbreak\n\t\t}\n\t}\n\n\tif network == nil {\n\t\tlog.Printf(\"[WARN] Removing network (%s) because it is gone\", d.Id())\n\t\td.SetId(\"\")\n\t\treturn nil\n\t}\n\n\td.Set(\"cidr_block\", networkToCIDR(network))\n\td.Set(\"description\", network.Description)\n\td.Set(\"region_id\", network.RegionID)\n\n\treturn nil\n}\n\nfunc resourceNetworkDelete(d *schema.ResourceData, meta interface{}) error {\n\tclient := meta.(*Client)\n\n\tlog.Printf(\"[INFO] Destroying network (%s)\", d.Id())\n\n\tif err := client.DeleteNetwork(d.Id()); err != nil {\n\t\treturn fmt.Errorf(\"Error destroying network (%s): %v\", d.Id(), err)\n\t}\n\n\treturn nil\n}\n\nfunc networkToCIDR(net *lib.Network) string {\n\treturn fmt.Sprintf(\"%s/%d\", net.V4Subnet, net.V4SubnetMask)\n}\n"
  },
  {
    "path": "vultr/resource_reserved_ip.go",
    "content": "package vultr\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"strings\"\n\n\t\"github.com/JamesClonk/vultr/lib\"\n\t\"github.com/hashicorp/terraform/helper/schema\"\n)\n\nfunc resourceReservedIP() *schema.Resource {\n\treturn &schema.Resource{\n\t\tCreate: resourceReservedIPCreate,\n\t\tRead:   resourceReservedIPRead,\n\t\tUpdate: resourceReservedIPUpdate,\n\t\tDelete: resourceReservedIPDelete,\n\t\tImporter: &schema.ResourceImporter{\n\t\t\tState: schema.ImportStatePassthrough,\n\t\t},\n\n\t\tSchema: map[string]*schema.Schema{\n\t\t\t\"attached_id\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tOptional: true,\n\t\t\t},\n\n\t\t\t\"cidr\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tComputed: true,\n\t\t\t},\n\n\t\t\t\"name\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tRequired: true,\n\t\t\t\tForceNew: true,\n\t\t\t},\n\n\t\t\t\"region_id\": {\n\t\t\t\tType:     schema.TypeInt,\n\t\t\t\tRequired: true,\n\t\t\t\tForceNew: true,\n\t\t\t},\n\n\t\t\t\"type\": {\n\t\t\t\tType:         schema.TypeString,\n\t\t\t\tDefault:      \"v4\",\n\t\t\t\tOptional:     true,\n\t\t\t\tForceNew:     true,\n\t\t\t\tValidateFunc: validateReservedIPType,\n\t\t\t},\n\t\t},\n\t}\n}\n\nfunc resourceReservedIPCreate(d *schema.ResourceData, meta interface{}) error {\n\tclient := meta.(*Client)\n\n\taid := d.Get(\"attached_id\").(string)\n\tname := d.Get(\"name\").(string)\n\tregionID := d.Get(\"region_id\").(int)\n\tipType := d.Get(\"type\").(string)\n\n\tlog.Printf(\"[INFO] Creating new reserved ip\")\n\trid, err := client.CreateReservedIP(regionID, ipType, name)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"Error creating reserved ip: %v\", err)\n\t}\n\n\td.SetId(rid)\n\n\tif aid != \"\" {\n\t\trip, err := client.GetReservedIP(rid)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"Error getting address for reserved ip (%s): %v\", d.Id(), err)\n\t\t}\n\t\terr = client.AttachReservedIP(reservedIPToCIDR(rip), aid)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"Error attaching reserved ip (%s) to instance (%s): %v\", d.Id(), aid, err)\n\t\t}\n\t}\n\n\treturn resourceReservedIPRead(d, meta)\n}\n\nfunc resourceReservedIPRead(d *schema.ResourceData, meta interface{}) error {\n\tclient := meta.(*Client)\n\n\trip, err := client.GetReservedIP(d.Id())\n\tif err != nil {\n\t\tif strings.HasPrefix(err.Error(), fmt.Sprintf(\"IP with ID %v not found\", d.Id())) {\n\t\t\tlog.Printf(\"[WARN] Removing reserved ip (%s) because it is gone\", d.Id())\n\t\t\td.SetId(\"\")\n\t\t\treturn nil\n\t\t}\n\t\treturn fmt.Errorf(\"Error getting reserved ip (%s): %v\", d.Id(), err)\n\t}\n\n\td.Set(\"attached_id\", rip.AttachedTo)\n\td.Set(\"cidr\", reservedIPToCIDR(rip))\n\td.Set(\"name\", rip.Label)\n\td.Set(\"region_id\", rip.RegionID)\n\td.Set(\"type\", rip.IPType)\n\n\treturn nil\n}\n\nfunc resourceReservedIPUpdate(d *schema.ResourceData, meta interface{}) error {\n\tclient := meta.(*Client)\n\n\tif d.HasChange(\"attached_id\") {\n\t\tip := d.Get(\"cidr\").(string)\n\t\tlog.Printf(\"[INFO] Updating reserved IP (%s) attachment\", d.Id())\n\t\told, new := d.GetChange(\"attached_id\")\n\t\tif old.(string) != \"\" {\n\t\t\tif err := client.DetachReservedIP(old.(string), ip); err != nil {\n\t\t\t\treturn fmt.Errorf(\"Error detaching reserved IP (%s) from instance (%s): %v\", d.Id(), old.(string), err)\n\t\t\t}\n\t\t}\n\t\tif new.(string) != \"\" {\n\t\t\tif err := client.AttachReservedIP(ip, new.(string)); err != nil {\n\t\t\t\treturn fmt.Errorf(\"Error attaching reserved IP (%s) to instance (%s): %v\", d.Id(), new.(string), err)\n\t\t\t}\n\t\t}\n\t}\n\n\treturn resourceReservedIPRead(d, meta)\n}\n\nfunc resourceReservedIPDelete(d *schema.ResourceData, meta interface{}) error {\n\tclient := meta.(*Client)\n\n\tlog.Printf(\"[INFO] Destroying reserved ip (%s)\", d.Id())\n\n\taid := d.Get(\"attached_id\").(string)\n\tif aid != \"\" {\n\t\tip := d.Get(\"cidr\").(string)\n\t\tif err := client.DetachReservedIP(aid, ip); err != nil {\n\t\t\treturn fmt.Errorf(\"Error detaching reserved IP (%s) from instance (%s): %v\", d.Id(), aid, err)\n\t\t}\n\t}\n\n\tif err := client.DestroyReservedIP(d.Id()); err != nil {\n\t\treturn fmt.Errorf(\"Error destroying reserved ip (%s): %v\", d.Id(), err)\n\t}\n\n\treturn nil\n}\n\nfunc reservedIPToCIDR(rip lib.IP) string {\n\treturn fmt.Sprintf(\"%s/%d\", rip.Subnet, rip.SubnetSize)\n}\n"
  },
  {
    "path": "vultr/resource_ssh_key.go",
    "content": "package vultr\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"strings\"\n\n\t\"github.com/JamesClonk/vultr/lib\"\n\t\"github.com/hashicorp/terraform/helper/schema\"\n)\n\nfunc resourceSSHKey() *schema.Resource {\n\treturn &schema.Resource{\n\t\tCreate: resourceSSHKeyCreate,\n\t\tRead:   resourceSSHKeyRead,\n\t\tUpdate: resourceSSHKeyUpdate,\n\t\tDelete: resourceSSHKeyDelete,\n\t\tImporter: &schema.ResourceImporter{\n\t\t\tState: schema.ImportStatePassthrough,\n\t\t},\n\n\t\tSchema: map[string]*schema.Schema{\n\t\t\t\"name\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tRequired: true,\n\t\t\t},\n\n\t\t\t\"public_key\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tRequired: true,\n\t\t\t\tStateFunc: func(v interface{}) string {\n\t\t\t\t\treturn strings.TrimSpace(v.(string))\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n}\n\nfunc resourceSSHKeyCreate(d *schema.ResourceData, meta interface{}) error {\n\tclient := meta.(*Client)\n\n\tname := d.Get(\"name\").(string)\n\tpublicKey := d.Get(\"public_key\").(string)\n\n\tlog.Printf(\"[INFO] Creating new SSH key\")\n\tkey, err := client.CreateSSHKey(name, publicKey)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"Error creating SSH key: %v\", err)\n\t}\n\td.SetId(key.ID)\n\n\treturn resourceSSHKeyRead(d, meta)\n}\n\nfunc resourceSSHKeyRead(d *schema.ResourceData, meta interface{}) error {\n\tclient := meta.(*Client)\n\n\tkeys, err := client.GetSSHKeys()\n\tif err != nil {\n\t\treturn fmt.Errorf(\"Error getting SSH keys: %v\", err)\n\t}\n\n\tvar key *lib.SSHKey\n\tfor i := range keys {\n\t\tif keys[i].ID == d.Id() {\n\t\t\tkey = &keys[i]\n\t\t\tbreak\n\t\t}\n\t}\n\n\tif key == nil {\n\t\tlog.Printf(\"[WARN] Removing SSH key (%s) because it is gone\", d.Id())\n\t\td.SetId(\"\")\n\t\treturn nil\n\t}\n\n\td.Set(\"name\", key.Name)\n\td.Set(\"public_key\", key.Key)\n\n\treturn nil\n}\n\nfunc resourceSSHKeyUpdate(d *schema.ResourceData, meta interface{}) error {\n\tclient := meta.(*Client)\n\n\tlog.Printf(\"[INFO] Updating SSH key (%s)\", d.Id())\n\n\tkey := lib.SSHKey{\n\t\tID:   d.Id(),\n\t\tKey:  d.Get(\"public_key\").(string),\n\t\tName: d.Get(\"name\").(string),\n\t}\n\tif err := client.UpdateSSHKey(key); err != nil {\n\t\treturn fmt.Errorf(\"Error updating SSH key (%s): %v\", d.Id(), err)\n\t}\n\n\treturn resourceSSHKeyRead(d, meta)\n}\n\nfunc resourceSSHKeyDelete(d *schema.ResourceData, meta interface{}) error {\n\tclient := meta.(*Client)\n\n\tlog.Printf(\"[INFO] Destroying SSH key (%s)\", d.Id())\n\n\tif err := client.DeleteSSHKey(d.Id()); err != nil {\n\t\treturn fmt.Errorf(\"Error destroying SSH key (%s): %v\", d.Id(), err)\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vultr/resource_startup_script.go",
    "content": "package vultr\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\n\t\"github.com/JamesClonk/vultr/lib\"\n\t\"github.com/hashicorp/terraform/helper/schema\"\n)\n\nfunc resourceStartupScript() *schema.Resource {\n\treturn &schema.Resource{\n\t\tCreate: resourceStartupScriptCreate,\n\t\tRead:   resourceStartupScriptRead,\n\t\tUpdate: resourceStartupScriptUpdate,\n\t\tDelete: resourceStartupScriptDelete,\n\t\tImporter: &schema.ResourceImporter{\n\t\t\tState: schema.ImportStatePassthrough,\n\t\t},\n\n\t\tSchema: map[string]*schema.Schema{\n\t\t\t\"content\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tRequired: true,\n\t\t\t},\n\n\t\t\t\"name\": {\n\t\t\t\tType:     schema.TypeString,\n\t\t\t\tRequired: true,\n\t\t\t},\n\n\t\t\t\"type\": {\n\t\t\t\tType:         schema.TypeString,\n\t\t\t\tOptional:     true,\n\t\t\t\tForceNew:     true,\n\t\t\t\tValidateFunc: validateStartupScriptType,\n\t\t\t},\n\t\t},\n\t}\n}\n\nfunc resourceStartupScriptCreate(d *schema.ResourceData, meta interface{}) error {\n\tclient := meta.(*Client)\n\n\tcontent := d.Get(\"content\").(string)\n\tname := d.Get(\"name\").(string)\n\tvar scriptType string\n\tif _, typeOk := d.GetOk(\"type\"); typeOk {\n\t\tscriptType = d.Get(\"type\").(string)\n\t} else {\n\t\tscriptType = \"boot\"\n\t}\n\n\tlog.Printf(\"[INFO] Creating new startup script\")\n\tscript, err := client.CreateStartupScript(name, content, scriptType)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"Error creating startup script: %v\", err)\n\t}\n\n\td.SetId(script.ID)\n\n\treturn resourceStartupScriptRead(d, meta)\n}\n\nfunc resourceStartupScriptRead(d *schema.ResourceData, meta interface{}) error {\n\tclient := meta.(*Client)\n\n\tscript, err := client.GetStartupScript(d.Id())\n\tif err != nil {\n\t\treturn fmt.Errorf(\"Error getting startup script (%s): %v\", d.Id(), err)\n\t}\n\n\tif script == (lib.StartupScript{}) {\n\t\tlog.Printf(\"[WARN] Removing startup script (%s) because it is gone\", d.Id())\n\t\td.SetId(\"\")\n\t\treturn nil\n\t}\n\n\td.Set(\"content\", script.Content)\n\td.Set(\"name\", script.Name)\n\td.Set(\"type\", script.Type)\n\n\treturn nil\n}\n\nfunc resourceStartupScriptUpdate(d *schema.ResourceData, meta interface{}) error {\n\tclient := meta.(*Client)\n\n\tscript := lib.StartupScript{\n\t\tContent: d.Get(\"content\").(string),\n\t\tID:      d.Id(),\n\t\tName:    d.Get(\"name\").(string),\n\t\tType:    d.Get(\"type\").(string),\n\t}\n\n\tif err := client.UpdateStartupScript(script); err != nil {\n\t\treturn fmt.Errorf(\"Error updating startup script (%s): %v\", d.Id(), err)\n\t}\n\n\treturn resourceStartupScriptRead(d, meta)\n}\n\nfunc resourceStartupScriptDelete(d *schema.ResourceData, meta interface{}) error {\n\tclient := meta.(*Client)\n\n\tlog.Printf(\"[INFO] Destroying startup script (%s)\", d.Id())\n\n\tif err := client.DeleteStartupScript(d.Id()); err != nil {\n\t\treturn fmt.Errorf(\"Error destroying startup script (%s): %v\", d.Id(), err)\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vultr/validators.go",
    "content": "package vultr\n\nimport (\n\t\"fmt\"\n\t\"net\"\n\t\"regexp\"\n\t\"strconv\"\n\t\"strings\"\n)\n\nconst (\n\t// stringSlashIntFormatErrTemplate is the default error template for parsing a string/int resource ID.\n\tstringSlashIntFormatErrTemplate = \"Error parsing %s: should be of form <%s>/<%s>, where <%s> is an integer; got %q\"\n\t// stringSlashStringFormatErrTemplate is the default error template for parsing a string/string resource ID.\n\tstringSlashStringFormatErrTemplate = \"Error parsing %s: should be of form <%s>/<%s>; got %q\"\n)\n\n// validateCIDRNetworkAddress ensures that the string value is a valid CIDR that\n// represents a network address and returns an error otherwise.\nfunc validateCIDRNetworkAddress(v interface{}, k string) (ws []string, errors []error) {\n\tvalue := v.(string)\n\t_, ipnet, err := net.ParseCIDR(value)\n\tif err != nil {\n\t\terrors = append(errors, fmt.Errorf(\"%q must contain a valid CIDR, got error parsing: %v\", k, err))\n\t\treturn\n\t}\n\n\tif ipnet == nil || value != ipnet.String() {\n\t\terrors = append(errors, fmt.Errorf(\"%q must contain a valid network CIDR, got %q\", k, value))\n\t}\n\treturn\n}\n\n// validateIPAddress ensures that the string value is a valid IPv4 or IPv6\n// address and returns an error otherwise.\nfunc validateIPAddress(v interface{}, k string) (ws []string, errors []error) {\n\tvalue := v.(string)\n\tip := net.ParseIP(value)\n\tif ip == nil {\n\t\terrors = append(errors, fmt.Errorf(\"%q must contain a valid IP address\", k))\n\t\treturn\n\t}\n\treturn\n}\n\n// validateReservedIPType ensures that the string value is either \"v4\" or \"v6\".\nfunc validateReservedIPType(v interface{}, k string) (ws []string, errors []error) {\n\tvalue := v.(string)\n\tif value != \"v6\" && value != \"v4\" {\n\t\terrors = append(errors, fmt.Errorf(\"%q must be either 'v4' or 'v6'\", k))\n\t\treturn\n\t}\n\treturn\n}\n\n// validateFirewallRuleProtocol ensures that the string value is a valid\n// firewall rule protocol and returns an error otherwise.\nfunc validateFirewallRuleProtocol(v interface{}, k string) (ws []string, errors []error) {\n\tvalue := v.(string)\n\tvalidProtocols := map[string]struct{}{\n\t\t\"gre\":  {},\n\t\t\"icmp\": {},\n\t\t\"tcp\":  {},\n\t\t\"udp\":  {},\n\t}\n\tif _, ok := validProtocols[value]; !ok {\n\t\terrors = append(errors, fmt.Errorf(\"%q contains an invalid firewall rule protocol %q; valid types are: %q, %q, %q, and %q\", k, value, \"gre\", \"icmp\", \"tcp\", \"udp\"))\n\t}\n\treturn\n}\n\n// validateStartupScriptType ensures that the string value is a valid\n// startup script type and returns an error otherwise.\nfunc validateStartupScriptType(v interface{}, k string) (ws []string, errors []error) {\n\tvalue := v.(string)\n\tvalidProtocols := map[string]struct{}{\n\t\t\"boot\": {},\n\t\t\"pxe\":  {},\n\t}\n\tif _, ok := validProtocols[value]; !ok {\n\t\terrors = append(errors, fmt.Errorf(\"%q contains an invalid startup script type %q; valid types are: %q and %q\", k, value, \"boot\", \"pxe\"))\n\t}\n\treturn\n}\n\n// validateRegex ensures that the string is a valid regular expression.\nfunc validateRegex(v interface{}, k string) (ws []string, errors []error) {\n\tvalue := v.(string)\n\tif _, err := regexp.Compile(value); err != nil {\n\t\terrors = append(errors, fmt.Errorf(\"%q contains an invalid regular expression: %v\", k, err))\n\t}\n\treturn\n}\n\n// parseStringSlashInt parses a commond ID format <string>/<int> into its components and returns\n// the provided error otherwise.\nfunc parseStringSlashInt(id, idType, first, second string) (string, int, error) {\n\tbaseErr := fmt.Errorf(stringSlashIntFormatErrTemplate, idType, first, second, second, id)\n\tidParts := strings.Split(id, \"/\")\n\tif len(idParts) != 2 {\n\t\treturn \"\", 0, baseErr\n\t}\n\ts := idParts[0]\n\ti, err := strconv.Atoi(idParts[1])\n\tif err != nil {\n\t\treturn \"\", 0, fmt.Errorf(\"%v: %v\", baseErr, err)\n\t}\n\treturn s, i, nil\n}\n\n// parseStringSlashString parses a commond ID format <string>/<string> into its components and returns\n// the provided error otherwise.\nfunc parseStringSlashString(id, idType, first, second string) (string, string, error) {\n\tparts := strings.Split(id, \"/\")\n\tif len(parts) != 2 {\n\t\treturn \"\", \"\", fmt.Errorf(stringSlashStringFormatErrTemplate, idType, first, second, id)\n\t}\n\treturn parts[0], parts[1], nil\n}\n"
  },
  {
    "path": "vultr/wait.go",
    "content": "package vultr\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"strconv\"\n\t\"time\"\n\n\t\"github.com/hashicorp/terraform/helper/resource\"\n\t\"github.com/hashicorp/terraform/helper/schema\"\n)\n\nfunc waitForResourceState(d *schema.ResourceData, meta interface{}, resourceName, prop string, readFunc schema.ReadFunc, target string, pending []string) (interface{}, error) {\n\tlog.Printf(\"[INFO] Waiting for %s (%s) to update %s to %q\", resourceName, d.Id(), prop, target)\n\n\tstateConf := &resource.StateChangeConf{\n\t\tPending:    pending,\n\t\tTarget:     []string{target},\n\t\tRefresh:    resourceStateRefreshFunc(d, meta, prop, readFunc),\n\t\tTimeout:    d.Timeout(schema.TimeoutUpdate),\n\t\tDelay:      10 * time.Second,\n\t\tMinTimeout: 3 * time.Second,\n\t}\n\n\tstate, err := stateConf.WaitForState()\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"Error waiting for %s (%s) to have %s %q\", resourceName, d.Id(), prop, target)\n\t}\n\treturn state, nil\n}\n\nfunc resourceStateRefreshFunc(d *schema.ResourceData, meta interface{}, prop string, readFunc schema.ReadFunc) resource.StateRefreshFunc {\n\treturn func() (interface{}, string, error) {\n\t\tif err := readFunc(d, meta); err != nil {\n\t\t\treturn nil, \"\", err\n\t\t}\n\n\t\tif state, ok := d.GetOk(prop); ok {\n\t\t\tswitch t := state.(type) {\n\t\t\tcase bool:\n\t\t\t\treturn struct{}{}, strconv.FormatBool(state.(bool)), nil\n\t\t\tcase int:\n\t\t\t\treturn struct{}{}, strconv.FormatInt(int64(state.(int)), 10), nil\n\t\t\tcase string:\n\t\t\t\treturn struct{}{}, state.(string), nil\n\t\t\tdefault:\n\t\t\t\treturn struct{}{}, \"\", fmt.Errorf(\"do not know how to interpret %v of type %T\", state, t)\n\t\t\t}\n\t\t}\n\t\treturn nil, \"\", nil\n\t}\n}\n"
  }
]